[
  {
    "path": ".babelrc",
    "content": "{\n    \"presets\": [\"@babel/preset-env\"],\n    \"plugins\": [\n        [\n            \"module-resolver\", {\n                \"root\": [\".\"],\n                \"alias\": {\n                    \"helpers\": \"./tests/js/helpers\"\n                }\n            }\n        ]\n    ]\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "# EditorConfig is awesome: http://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n[*]\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto"
  },
  {
    "path": ".gitignore",
    "content": "# Common\ncomposer.phar\n.DS_Store\n.vite\n.claude\n.idea\n.env\n.env.*.php\n.env.php\nauth.json\nphp_errors.log\nnginx-error.log\nnginx-access.log\nnginx-ssl.access.log\nnginx-ssl.error.log\nphp-errors.log\nsftp-config.json\n.ftpconfig\n.vscode/\nselenium.php\ncomposer.lock\npackage-lock.json\n/node_modules\n/modules/system/node_modules\n_ide_helper.php\n.phpunit.result.cache\nnbproject\n.phpstorm.meta.php\n\n# Project\n/bootstrap/compiled.php\n/vendor\n/vendor_drm\n"
  },
  {
    "path": ".htaccess",
    "content": "<IfModule mod_rewrite.c>\n\n    <IfModule mod_negotiation.c>\n        Options -MultiViews\n    </IfModule>\n\n    RewriteEngine On\n\n    ##\n    ## You may need to uncomment the following line for some hosting environments,\n    ## if you have installed to a subdirectory, enter the name here also.\n    ##\n    # RewriteBase /\n\n    ##\n    ## Uncomment following lines to force HTTPS.\n    ##\n    # RewriteCond %{HTTPS} off\n    # RewriteRule (.*) https://%{SERVER_NAME}/$1 [L,R=301]\n\n    ##\n    ## Uncomment to redirect trailing slashes in URLs.\n    ##\n    # RewriteCond %{REQUEST_FILENAME} !-d\n    # RewriteRule ^(.*)/$ /$1 [L,R=301]\n\n    ##\n    ## Uncomment to redirect /index.php/path to /path\n    ##\n    # RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\\s/index\\.php\\s\n    # RewriteRule ^index\\.php$ / [R=301,L]\n    # RewriteRule ^index\\.php/(.*)$ /$1 [L,R=301]\n\n    ##\n    ## Handle Authorization Header\n    ##\n    RewriteCond %{HTTP:Authorization} .\n    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n\n    ##\n    ## Blocked folders\n    ##\n    RewriteRule ^bootstrap/.* index.php [L,NC]\n    RewriteRule ^config/.* index.php [L,NC]\n    RewriteRule ^vendor/.* index.php [L,NC]\n    RewriteRule ^storage/cms/.* index.php [L,NC]\n    RewriteRule ^storage/logs/.* index.php [L,NC]\n    RewriteRule ^storage/framework/.* index.php [L,NC]\n    RewriteRule ^storage/temp/protected/.* index.php [L,NC]\n    RewriteRule ^storage/app/uploads/protected/.* index.php [L,NC]\n\n    ##\n    ## Allowed folders\n    ##\n    RewriteCond %{REQUEST_FILENAME} -f\n    RewriteCond %{REQUEST_FILENAME} !/.well-known/*\n    RewriteCond %{REQUEST_FILENAME} !/app/(assets|resources)/.*\n    RewriteCond %{REQUEST_FILENAME} !/storage/app/media/.*\n    RewriteCond %{REQUEST_FILENAME} !/storage/app/resources/.*\n    RewriteCond %{REQUEST_FILENAME} !/storage/app/uploads/public/.*\n    RewriteCond %{REQUEST_FILENAME} !/storage/temp/public/.*\n    RewriteCond %{REQUEST_FILENAME} !/themes/.*/(assets|resources)/.*\n    RewriteCond %{REQUEST_FILENAME} !/plugins/.*/(assets|resources)/.*\n    RewriteCond %{REQUEST_FILENAME} !/modules/.*/(assets|resources)/.*\n    RewriteRule !^index.php index.php [L,NC]\n\n    ##\n    ## Block all PHP files, except index\n    ##\n    RewriteCond %{REQUEST_FILENAME} -f\n    RewriteCond %{REQUEST_FILENAME} \\.php$\n    RewriteRule !^index.php index.php [L,NC]\n\n    ##\n    ## Standard routes\n    ##\n    RewriteCond %{REQUEST_FILENAME} !-f\n    RewriteRule ^ index.php [L]\n\n</IfModule>\n"
  },
  {
    "path": ".jshintrc",
    "content": "{\n    \"esversion\": 6,\n    \"curly\": true,\n    \"asi\": true\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "View the changelog on the [October CMS website](https://octobercms.com/changelog)\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright (c) 2013-2022 Responsiv Pty Ltd\n\nThis End User License Agreement (“EULA”) constitutes a binding agreement between you (the “Licensee”, “you” or “your”) and Responsiv Pty Ltd - ACN 159 492 823 (the “Company”, “we”, “us” or “our”) with respect to your use of the October CMS software (“Licensed Software” or “October CMS Software”). The Company and the Licensee are each individually referred to as “Party” and collectively as “Parties”.\n\nPlease carefully read the terms and conditions of this EULA before installing and using the Licensed Software. By using the Licensed Software, you represent that you have read this EULA, and you agree to be bound by all the terms and conditions of this EULA, including any other agreements and policies referenced in this EULA. If you do not agree with any provisions of this EULA, please do not install the October CMS Software.\n\nThe Company reserves the right to modify or discontinue the October CMS Software or any portion thereof, temporarily or permanently, with or without notice to you. The Company will not be under any obligation to support or update the Licensed Software, except as described in this EULA.\n\nYOU AGREE THAT THE COMPANY SHALL NOT BE LIABLE TO YOU OR ANY THIRD PARTY IN THE EVENT THAT WE EXERCISE OUR RIGHT TO MODIFY OR DISCONTINUE THE LICENSED SOFTWARE OR ANY PORTION THEREOF.\n\n## Summary\n\nThis section outlines some of the key provisions covered in this EULA. Please note that this summary is provided for your convenience only, and it does not relieve you of your obligation to read the full EULA before installing/using the October CMS Software.\n\nBy proceeding to use the October CMS Software, you understand and agree that:\n\n- You must be at least 18 years of age to enter into this EULA;\n\n- You will only use the October CMS Software in compliance with applicable laws;\n\n- October CMS Software licenses are only issued for Projects created through the website. To acquire/renew your Project licence, you need to sign in to your October CMS Account, and select/create the Project for which you wish to acquire/renew the licence;\n\n- You will be responsible for paying the full License Fee prior to installing the October CMS Software;\n\n- All License Fee Payments are non-refundable;\n\n- Upon full payment of the License Fee, you will receive a License Key that allows you to install the Licensed Software to create a single production or non-production website and ancillary installations needed to support that single production or non-production website;\n\n- Each new/renewed Project licence comes with one year of Updates. You may continue to use your expired Project license in perpetuity, but if you wish to continue receiving all the Updates, you will be required to keep your Project licence active by renewing it every year;\n\n- Subject to the payment of full License Fee and compliance with this EULA, the Company and its third party licensors grant you a limited, non-exclusive, non-transferable, non-assignable, perpetual and worldwide license to install and/or use the October CMS Software;\n\n- The Company and its licensors retain all rights, title and interest in the October CMS Software, Documentation and other similar proprietary materials made available to you;\n\n- You will not sublicense, resell, distribute, or transfer the Licensed Software to any third party without the Company’s prior written consent;\n\n- You will not remove, obscure or otherwise modify any copyright notices from the October CMS Software files or this EULA;\n\n- You will not modify, disassemble, or reverse engineer any part of the October CMS Software;\n\n- You will take all required steps to prevent unauthorised installation/use of the October CMS Software and prevent any breach of this EULA;\n\n- The Company may terminate this EULA if you are in breach of any provision of this EULA or if we discontinue the October CMS Software;\n\n- SUBJECT TO YOUR STATUTORY RIGHTS, THE COMPANY PROVIDES THE OCTOBER CMS SOFTWARE TO YOU “AS IS” AND “WITH ALL FAULTS”. THE COMPANY DOES NOT OFFER ANY WARRANTIES, WHETHER EXPRESS OR IMPLIED. IN NO EVENT WILL THE COMPANY’S AGGREGATE LIABILITY TO YOU FOR ANY CLAIMS CONNECTED WITH THIS EULA OR THE OCTOBER CMS SOFTWARE EXCEED THE AMOUNT ACTUALLY PAID BY YOU TO THE COMPANY FOR THE OCTOBER CMS SOFTWARE IN THE TWELVE MONTHS PRECEDING THE DATE WHEN THE CLAIM FIRST AROSE;\n\n- This EULA shall be governed by and construed in accordance with the laws of the state of New South Wales, Australia, without giving effect to any principles of conflict of laws.\n\n## Table of Contents\n\n- [1. Definitions](#Definitions)\n- [2. Authorisation](#Authorisation)\n- [3. License Grant](#License-Grant)\n- [4. License Purchase and Renewal](#License-Purchase-and-Renewal)\n- [5. License Fees, Payments and Refunds](#License-Fees-Payments-and-Refunds)\n- [6. Ownership](#Ownership)\n- [7. Use and Restrictions](#Use-and-Restrictions)\n- [8. Technical Support](#Technical-Support)\n- [9. Termination](#Termination)\n- [10. Statutory Consumer Rights](#Statutory-Consumer-Rights)\n- [11. Disclaimer of Warranties](#Disclaimer-of-Warranties)\n- [12. Limitation of Liability](#Limitation-of-Liability)\n- [13. Waiver](#Waiver)\n- [14. Indemnification](#Indemnification)\n- [15. Compliance with the Laws](#Compliance-with-the-Laws)\n- [16. Data Protection](#Data-Protection)\n- [17. Delivery](#Delivery)\n- [18. General](#General)\n\n<a name=\"Definitions\"></a>\n## 1. Definitions\n\nThe following words shall have the meaning given hereunder whenever they appear in this EULA:\n\nTerm | Definition\n---- | -----------\nAccount | refers to a user account registered on the Website by an individual or entity.\nActive Term | means the period commencing from the date of License purchase/renewal until the License expiry date as specified on the Project page in your Account.\nDocumentation | means the current version of the documentation relating to the October CMS Software available at https://docs.octobercms.com or otherwise made available by the Company in electronic format. Documentation includes but is not limited to installation instructions, user guides and help documents regarding the use of the October CMS Software.\nLicense Fee | means the fee payable by the Licensee for the use of the October CMS Software in accordance with the provisions of this EULA and any other applicable agreements referenced in this EULA.\nLicense Key | means a unique string of characters provided by the Company that enables users to install the October CMS Software for a specific Project.\nModifications | means any changes to the original code or files of the October CMS Software by the Licensee or any third party. For the avoidance of any doubt, the term “Modifications” does not include any Updates furnished by the Company.\nOctober CMS Software | refers to the collection of proprietary code and graphics in various file formats provided by the Company to the Licensee.\nProject | means a collection of extensions and themes to be used in a single production website.\nUpdates | means all new releases of the October CMS Software, including but not limited to new features and fixes which are provided by the Company to a Licensee during the Active Term of the License.\nThe Website | refers to the Company website located at www.octobercms.com.\n\n<a name=\"Authorisation\"></a>\n## 2. Authorisation\n\nYou must be at least 18 years of age and have the legal capacity to enter into this EULA. If you are accepting this EULA on behalf of a corporation, organisation, or other legal entity (‘corporate entity’), you warrant that you have the authority to enter into this EULA on behalf of such corporate entity and to bind the former to this EULA.\n\n<a name=\"License-Grant\"></a>\n## 3. License Grant\n\nSubject to your compliance with all the terms and conditions of this EULA and the payment of the full License Fee, the Company and its third party licensors grant you a limited, non-exclusive, non-transferable, non-assignable, perpetual and worldwide license to install and/or use the October CMS Software.\n\nYou shall be solely responsible for ensuring that all your authorised employees, contractors or other users of the Licensed Software comply with all the terms and conditions of this EULA, and any failure to comply with this EULA will be deemed as a breach of this EULA by you.\n\nThe Company and its third party licensors may make changes to the Licensed Software, which are provided to you through Updates. You will only receive all such Updates during the Active Term of your license. You will not have any right to receive Updates after the expiration of your license. Please note that if you terminate your Account, you will not be able to access your Projects and renew your license/receive any future Updates.\n\nUNLESS EXPRESSLY PROVIDED IN THIS EULA, YOU MAY NOT COPY OR MODIFY THE OCTOBER CMS SOFTWARE.\n\n<a name=\"License-Purchase-and-Renewal\"></a>\n## 4. License Purchase and Renewal\n\nOctober CMS Software licenses are only issued for Projects created through the Website. To acquire a new Project licence or to renew an existing Project licence, you must sign in to your October CMS Account and select/create the Project for which you wish to acquire/renew the licence.\n\nUpon full payment of the License Fee, you will receive a License Key that allows you to install the Licensed Software to create a single production or non-production website and ancillary installations needed to support that single production or non-production website.\n\nEach new/renewed Project licence comes with one year of Updates starting from the date on which you pay the License Fee. You are not under any legal obligation to renew your Project licence, and you can continue to use your expired Project license for your website in perpetuity. Please note that expired Project licenses do not receive any Updates. If you wish to continue receiving all the Updates, you will be required to keep your Project licence active by renewing it every year.\n\nBy installing and using the October CMS Software, you assume full responsibility for your selection of the Licensed Software, its installation, and the results obtained from the use of the October CMS Software.\n\n<a name=\"License-Fees-Payments-and-Refunds\"></a>\n## 5. License Fees, Payments and Refunds\n\nThe current License Fee for the October CMS Software is published on the Website, and the amount is specified in United States Dollars (USD). The License fee as specified on the Website does not include any taxes which shall be payable by the Licensee in addition to the License Fee.\n\nThe License fee becomes due and payable in full at the time the Licensee purchases a new Project license or renews an existing Project license.\n\nAll Project licenses are issued/renewed subject to the payment of the License Fee by the Licensee as outlined in Section 7 of our [Website Terms of Use](https://octobercms.com/help/terms/website#fees-payments-refunds-policy) and incorporated into this EULA by reference. The Company reserves the right to refuse issuance of a new Project license or renewal of an existing license until the Company receives the full payment.\n\nTo the extent permitted by law, all License Fee payments are non-refundable.\n\n<a name=\"Ownership\"></a>\n## 6. Ownership\n\nNothing in this EULA constitutes the sale of October CMS Software to you. The Company and its licensors retain all rights, title and interest in the October CMS Software, Documentation and other similar proprietary materials made available to you (collectively “Proprietary Material”). All Proprietary Material is protected by copyright and other intellectual property laws of Australia and international conventions. You acknowledge that the October CMS Software may contain some open source software that is not owned by the Company and which shall be governed by its own license terms.\n\nExcept where authorised by the Company in writing, any use of the October CMS trademark, trade name, or logo is strictly prohibited. The Company reserves all rights that are not expressly granted in and to the Proprietary Material.\n\n<a name=\"Use-and-Restrictions\"></a>\n## 7. Use and Restrictions\n\nYou hereby agree that:\n\n1. A License Key may only be used to create a single production or non-production website as provided in Section 4 (License Purchase and Renewal) of this EULA. If you wish to create another website, you will need to create a new Project and acquire a new License for that Project;\n\n2. Unless expressly provided otherwise in this EULA or other applicable agreements referenced herein, you will not sublicense, resell, distribute, or transfer the Licensed Software to any third party without the Company’s prior written consent;\n\n3. You will not remove, obscure or otherwise modify any copyright notices from the October CMS Software files or this EULA;\n\n4. You will not modify, disassemble, or reverse engineer any part of the October CMS Software;\n\n5. You will take all required steps to prevent unauthorised installation/use of the October CMS Software and prevent any breach of this EULA;\n\n6. You do not receive any rights, interests or titles in the “October CMS” trademark, trade name or service mark (“Marks”), and you will not use any of these Marks without our express consent.\n\n<a name=\"Technical-Support\"></a>\n## 8. Technical Support\n\nThe Company does not offer any technical support except as described in our Premium Support Policy. The Company reserves the right to deny any and all technical support for any Modifications of the October CMS Software or in the event of any breach of this EULA.\n\n<a name=\"Termination\"></a>\n## 9. Termination\n\nThis EULA shall remain effective until terminated by either Party as described below.\n\n### 9.1 Termination by Licensee\n\nYou may terminate this EULA by uninstalling the October CMS Software and deleting all files and your Account. Please note that once you delete your Account, you will not be able to reactivate it to restore your Projects and access your License Key.\n\n### 9.2 Termination by the Company\n\nThe Company may terminate this EULA if you are in breach of any provision of this EULA or if we discontinue the October CMS Software.\n\n### 9.3 Survival\n\nSection 11 (Disclaimer of Warranties), Section 12 (Limitation of Liability), Section 13 (Waiver), Section 14 (Indemnification) and other sections of this EULA that by their nature are intended to survive the termination of this EULA shall survive.\n\nUnless expressly specified otherwise in this EULA, any termination of this EULA either by you or the Company does not create any obligation on the Company to issue a full or partial refund of the License Fee paid by you.\n\n<a name=\"Statutory-Consumer-Rights\"></a>\n## 10. Statutory Consumer Rights\n\n### 10.1 CONSUMERS IN AUSTRALIA\n\nIf you acquire the October CMS Software license as a “consumer”, nothing in this EULA will exclude, limit or modify any rights and guarantees conferred on you by legislation, including the Australian Consumer Law (ACL) in the Competition and Consumer Act 2010 (Cth) (‘Statutory Rights’). If the Company is in breach of any such Statutory Rights, then the Company’s liability shall be limited (at the Company’s option) to:\n\n10.1.1 In case of products supplied to you, to resupplying, replacing or paying the cost of resupplying or replacing the product in respect of which the breach occurred;\n\n10.1.2 In case of services supplied to you, to resupply the service or to pay the cost of resupplying the service in respect of which the breach occurred.\n\nUnless expressly specified otherwise in this EULA, you agree that the Company’s liability for the October CMS Software is governed solely by this EULA and the Australian Consumer Law.\n\n### 10.1 CONSUMERS OUTSIDE OF AUSTRALIA\n\nIf you are deemed a “consumer” by statutory law in your country of residence, you may enjoy some legal rights under your local law which prohibit the exclusions, modification or limitations of certain liabilities from applying to you, and where such prohibition exists in your country of residence, any such limitations or exclusions will only apply to you to the extent it is permitted by your local law.\n\nYou agree that apart from the application of your statutory consumer rights, the Company’s liability for the October CMS Software is governed solely by this EULA.\n\n<a name=\"Disclaimer-of-Warranties\"></a>\n## 11. Disclaimer of Warranties\n\nSUBJECT TO YOUR STATUTORY RIGHTS AS PROVIDED IN SECTION 10 ABOVE, THE COMPANY PROVIDES THE OCTOBER CMS SOFTWARE TO YOU “AS IS” AND “WITH ALL FAULTS”.\n\nEXCLUDING ANY EXPRESS WARRANTIES OFFERED IN THIS EULA, TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE COMPANY, ITS EMPLOYEES, DIRECTORS, CONTRACTORS, AFFILIATES (“THE COMPANY AND ITS OFFICERS”) DISCLAIM ANY EXPRESS OR IMPLIED WARRANTIES WITH RESPECT TO THE OCTOBER CMS SOFTWARE, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, RELIABILITY, COURSE OF PERFORMANCE OR USAGE IN TRADE. THE COMPANY DOES NOT WARRANT THAT THE OCTOBER CMS SOFTWARE: WILL MEET YOUR REQUIREMENTS; WILL BE UNINTERRUPTED, ERROR-FREE, OR SECURE; OR THAT THE COMPANY WILL BE ABLE TO RECTIFY ANY ERRORS, BUGS, SECURITY VULNERABILITIES. NO OBLIGATION, WARRANTIES OR LIABILITY SHALL ARISE OUT OF ANY TECHNICAL SUPPORT SERVICES PROVIDED BY THE COMPANY AND ITS OFFICERS IN CONNECTION WITH THE OCTOBER CMS SOFTWARE. NO VERBAL OR WRITTEN COMMUNICATION RECEIVED FROM THE COMPANY AND ITS OFFICERS, WHETHER MARKETING, PROMOTIONAL OR TECHNICAL SUPPORT, SHALL CREATE ANY WARRANTIES THAT ARE NOT EXPRESSLY PROVIDED IN THIS EULA.\n\nALTHOUGH THE COMPANY PERIODICALLY RELEASES UPDATES FOR THE OCTOBER CMS SOFTWARE THAT MAY INCLUDE FIXES FOR KNOWN VULNERABILITIES, YOU ACKNOWLEDGE AND AGREE THAT THERE MAY BE VULNERABILITIES THAT THE COMPANY HAS NOT YET IDENTIFIED AND THEREFORE CANNOT ADDRESS. YOU ACKNOWLEDGE AND AGREE THAT YOU ARE SOLELY RESPONSIBLE FOR TAKING ALL THE PRECAUTIONS AND SAFEGUARDS NECESSARY TO PROTECT YOUR WEBSITE AND DATA FROM ANY EXTERNAL ATTACKS, INCLUDING BUT NOT LIMITED TO KEEPING YOUR OCTOBER CMS SOFTWARE INSTALLATION CURRENT AND UP TO DATE.\n\nSOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU.\n\n<a name=\"Limitation-of-Liability\"></a>\n## 12. Limitation of Liability\n\nIN NO EVENT SHALL THE COMPANY BE LIABLE TO YOU OR ANY THIRD-PARTY FOR ANY LOSS OF REVENUE, LOSS OF PROFITS (ACTUAL OR ANTICIPATED), LOSS OF SAVINGS (ACTUAL OR ANTICIPATED), LOSS OF OPPORTUNITY, LOSS OF REPUTATION, LOSS OF GOODWILL OR FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES RESULTING FROM THE INSTALLATION, USE OR INABILITY TO USE THE OCTOBER CMS SOFTWARE, WHETHER ARISING FROM ANY BREACH OF CONTRACT, NEGLIGENCE OR ANY OTHER THEORY OF LIABILITY, EVEN IF THE COMPANY WAS PREVIOUSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE LICENSEE SHALL BE SOLELY RESPONSIBLE FOR DETERMINING THE SUITABILITY OF THE LICENSED SOFTWARE AND ALL RISKS ASSOCIATED WITH ITS USE.\n\nIN NO EVENT WILL THE COMPANY’S AGGREGATE LIABILITY TO YOU FOR ANY CLAIMS CONNECTED WITH THIS EULA OR THE OCTOBER CMS SOFTWARE, INCLUDING THOSE ARISING FROM ANY BREACH OF CONTRACT OR NEGLIGENCE, EXCEED THE AMOUNT ACTUALLY PAID BY YOU TO THE COMPANY FOR THE OCTOBER CMS SOFTWARE IN THE TWELVE MONTHS PRECEDING THE DATE WHEN THE CLAIM FIRST AROSE.\n\nNOTWITHSTANDING ANYTHING TO THE FOREGOING, NOTHING IN THIS PROVISION SHALL LIMIT EITHER PARTY’S LIABILITY FOR ANY FRAUD OR LIABILITY THAT CANNOT BE LIMITED BY LAW.\n\n<a name=\"Waiver\"></a>\n## 13. Waiver\n\nYOU HEREBY RELEASE THE COMPANY AND ITS OFFICERS FROM ALL UNKNOWN RISKS ARISING OUT OF OR ASSOCIATED WITH THE USE OF THE OCTOBER CMS SOFTWARE. IF YOU ARE A RESIDENT IN THE STATE OF CALIFORNIA, U.S.A., YOU EXPRESSLY WAIVE CALIFORNIA CIVIL CODE SECTION 1542, OR OTHER SIMILAR LAW APPLICABLE TO YOU, WHICH STATES: “A GENERAL RELEASE DOES NOT EXTEND TO CLAIMS WHICH THE CREDITOR DOES NOT KNOW OR SUSPECT TO EXIST IN HIS OR HER FAVOR AT THE TIME OF EXECUTING THE RELEASE, WHICH IF KNOWN BY HIM OR HER MUST HAVE MATERIALLY AFFECTED HIS OR HER SETTLEMENT WITH THE DEBTOR OR RELEASED PARTY. ”\n\n**YOU ACKNOWLEDGE AND AGREE THAT THE LIMITATION OF LIABILITY AND THE WAIVER SET FORTH ABOVE REFLECT A REASONABLE AND FAIR ALLOCATION OF RISK BETWEEN YOU AND THE COMPANY AND THAT THESE PROVISIONS FORM AN ESSENTIAL BASIS OF THE BARGAIN BETWEEN YOU AND THE COMPANY. THE COMPANY WOULD NOT BE ABLE TO PROVIDE THE OCTOBER CMS SOFTWARE TO YOU ON AN ECONOMICALLY REASONABLE BASIS WITHOUT THESE LIMITATIONS.**\n\n<a name=\"Indemnification\"></a>\n## 14. Indemnification\n\n14.1 The Company will defend or settle any claims against you that allege that the October CMS Software as supplied to you for installation and use in accordance with this EULA and Documentation infringes the intellectual property rights of a third party provided that:\n\n14.1.1 You immediately notify the Company of any such claim that relates to this indemnity;\n\n14.1.2 The Company has the sole right to control the defence or settlement of such claim; and\n\n14.1.3 You provide the Company with all reasonable assistance in relation to the defence.\n\n14.2 For any claims of infringement of intellectual property mentioned in Section 14.1, the Company reserves the right to:\n\n14.2.1 Modify or replace the Licensed Software to make it non-infringing provided such modification or replacement does not substantively change the functionality of the Licensed Software; or\n\n14.2.2 Acquire at its own expense the right for you to continue the use of the Licensed Software; or\n\n14.2.3 Terminate the Project license and direct you to cease the use of the Licensed Software. In such cases, the Company will provide you with a full refund of the License Fees paid by you for the Licensed Software in the preceding 12 months. Please note that where the Company directs you to cease the use of the October CMS Software due to a third party claim of infringement, you are under a legal obligation to immediately cease such use.\n\nUnless otherwise provided by law, this Section 14 sets out your exclusive remedies for any infringement of intellectual property claims made by a third party against you and nothing in this EULA will create any obligations on the Company to offer greater indemnity. The Company does not have any obligation to defend or indemnify any other third party.\n\n14.3 The Company shall not have any obligation to indemnify you if:\n\n14.3.1 The infringement arises out of any Modification of the October CMS Software;\n\n14.3.2 The infringement arises from any combination, operation, or use of the Licensed Software with any other third party software;\n\n14.3.3 The infringement arises from the use of the Licensed Software in breach of this EULA;\n\n14.3.4 The infringement arises from the use of the Licensed Software after the Company has informed you to cease the use of the Licensed Software due to possible claims.\n\n14.4 You will indemnify the Company against any third party claims, damages, losses and costs, including reasonable attorney fees arising from:\n\n14.4.1 Your actions or omissions (actual or alleged), including without limitation, claims that your actions or omission infringe any third party’s intellectual property rights; or\n\n14.4.2 Your violation of any applicable laws; or\n\n14.4.3 Your breach of this EULA.\n\n<a name=\"Compliance-with-the-Laws\"></a>\n## 15. Compliance with the Laws\n\nYou will only install/use the October CMS Software and fulfil all your obligations under this EULA in compliance with all applicable laws. You hereby confirm that neither you nor the corporate entity that you represent is subject or target of any government Sanctions, and your use of the October CMS Software would not result in violation of any Sanctions by the Company.\n\nYou further confirm that the Licensed Software will not be used by any individual or entity engaged in any of the following activities: (i) Terrorist activities; (ii) design, development or production of any weapons of mass destruction; or (iii) any other illegal activity.\n\n<a name=\"Data-Protection\"></a>\n## 16. Data Protection\n\nThe Company only collects minimal personal data from the Licensee, as described in our Privacy Policy. The Company does not process any data on behalf of the Licensee, and the Licensee shall be solely responsible for compliance with applicable data protection laws for any data it controls or processes.\n\n<a name=\"Delivery\"></a>\n## 17. Delivery\n\nThe Company will deliver the October CMS Software and this EULA to you by electronic download.\n\n<a name=\"General\"></a>\n## 18. General\n\n### 18.1 Amendments\n\nThe Company reserves the right to amend the terms and conditions of this EULA at any time and without giving any prior notice to you. You acknowledge that you are responsible for periodically reviewing this EULA to familiarise yourself with any changes. Your continued use of the October CMS Software after any changes to the EULA shall constitute your consent to such change. You can access the latest version of the EULA by visiting https://octobercms.com/eula\n\n### 18.2 Assignment\n\nYou may not assign any rights and obligations under this EULA, in whole or in part, without an authorised Company representative's written consent. Any attempt to assign any rights and obligations without the Company's consent shall be void. The Company reserves the right to assign any of its rights and obligations under this EULA to a third party without requiring your consent.\n\n### 18.3 Notices\n\nYou hereby consent to receive all notices and communication from the Company electronically.\n\nAll notices to the Company under this EULA shall be sent to:\n\nPO Box 47<br />\nQueanbeyan NSW 2620<br />\nAustralia\n\nFor any other questions relating to this EULA, please contact us at https://octobercms.com/contact\n\n### 18.4 Governing Law and Jurisdiction\n\nThis EULA shall be governed by and construed in accordance with the laws of the state of New South Wales, Australia, without giving effect to any principles of conflict of laws. The parties hereby agree to submit to the non-exclusive jurisdiction of the courts of New South Wales to decide any matter arising out of these Terms. Both Parties hereby agree that the United Nations Convention on Contracts for the International Sale of Goods will not apply to this EULA.\n\n### 18.5 Force Majeure\n\nNeither Party will be liable to the other for any failure or delay in the performance of its obligations to the extent that such failure or delay is caused by any unforeseen events which are beyond the reasonable control of the obligated Party such as an act of God, strike, war, terrorism, epidemic, internet or telecommunication outage or other similar events, and the obligated Party is not able to avoid or remove the force measure by taking reasonable measures.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n    <img src=\"https://github.com/octobercms/october/blob/develop/themes/demo/assets/images/favicon.png?raw=true\" alt=\"October\" width=\"25%\" height=\"25%\" />\n</p>\n\n[October](https://octobercms.com) is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of frustration with existing systems. We feel building websites has become a convoluted and confusing process that leaves developers unsatisfied. We want to turn you around to the simpler side and get back to basics.\n\nOctober's mission is to show the world that web development is not rocket science.\n\n[![Build Status](https://github.com/octobercms/library/actions/workflows/tests.yml/badge.svg)](https://octobercms.com/)\n[![Downloads](https://img.shields.io/packagist/dt/october/rain)](https://docs.octobercms.com/)\n[![Version](https://img.shields.io/packagist/v/october/october)](https://octobercms.com/changelog)\n[![License](https://poser.pugx.org/october/october/license.svg)](./LICENSE.md)\n\n> *Please note*: October CMS is open source and every new account includes a complimentary license for the first year. After that, a license is required to continue receiving updates and access the Marketplace ecosystem.\n\n## Installing October\n\nInstructions on how to install October can be found at the [installation guide](https://docs.octobercms.com/3.x/setup/installation.html).\n\n### Quick Start Installation\n\nIf you have composer installed, run this in your terminal to install October CMS from command line. This will place the files in a directory named **myoctober**.\n\n    composer create-project october/october myoctober\n\nIf you plan on using a database, run this command inside the application directory.\n\n    php artisan october:install\n\n## Learning October\n\nThe best place to learn October CMS is by [reading the documentation](https://docs.octobercms.com) or [following some tutorials](https://octobercms.com/support/articles/tutorials).\n\nYou may also watch this [introductory video](https://www.youtube.com/watch?v=yLZTOeOS7wI). Make sure to check out our [official YouTube channel](https://www.youtube.com/c/OctoberCMSOfficial). There is also the excellent video series by [Watch & Learn](https://watch-learn.com/series/making-websites-with-october-cms).\n\nFor code examples of building with October CMS, visit the [RainLab Plugin Suite](https://github.com/rainlab) or the [October Demos Repo](https://github.com/octoberdemos).\n\n## Coding Standards\n\nPlease follow the following guides and code standards:\n\n* [PSR 4 Coding Standards](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md)\n* [PSR 2 Coding Style Guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)\n* [PSR 1 Coding Standards](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md)\n\n## Security Vulnerabilities\n\nPlease review [our security policy](https://github.com/octobercms/october/security/policy) on how to report security vulnerabilities.\n\n## Development Team\n\nOctober CMS was founded in 2014 by Alexey Bobkov and Sam Georges. Today it is supported by a worldwide network of [partners](https://octobercms.com/partners) and contributors.\n\n## Foundation library\n\nThe CMS uses [Laravel](https://laravel.com) as a foundation PHP framework.\n\n## Contact\n\nFor announcements and updates:\n\n* [Contact Us Page](https://octobercms.com/contact)\n* [Follow us on Twitter](https://twitter.com/octobercms)\n* [Like us on Facebook](https://facebook.com/octobercms)\n\nTo chat or hang out:\n\n* [Join us on Discord](https://discord.gg/gEKgwSZ)\n\n## License\n\nThe October CMS platform is licensed software, see [End User License Agreement](./LICENSE.md) (EULA) for more details.\n"
  },
  {
    "path": "app/Provider.php",
    "content": "<?php namespace App;\n\nuse System\\Classes\\AppBase;\n\n/**\n * Provider is an application level plugin, all registration methods are supported.\n */\nclass Provider extends AppBase\n{\n    /**\n     * register method, called when the app is first registered.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        parent::register();\n    }\n\n    /**\n     * boot method, called right before the request route.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        parent::boot();\n    }\n}\n"
  },
  {
    "path": "app/blueprints/.gitkeep",
    "content": ""
  },
  {
    "path": "artisan",
    "content": "#!/usr/bin/env php\n<?php\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader\n| for our application. We just need to utilize it! We'll require it\n| into the script here so that we do not have to worry about the\n| loading of any our classes \"manually\". Feels great to relax.\n|\n*/\n\nrequire __DIR__.'/bootstrap/autoload.php';\n\n$app = require_once __DIR__.'/bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Artisan Application\n|--------------------------------------------------------------------------\n|\n| When we run the console application, the current CLI command will be\n| executed in this console and the response sent back to a terminal\n| or another output device for the developers. Here goes nothing!\n|\n*/\n\n$kernel = $app->make(Illuminate\\Contracts\\Console\\Kernel::class);\n\n$status = $kernel->handle(\n    $input = new Symfony\\Component\\Console\\Input\\ArgvInput,\n    new Symfony\\Component\\Console\\Output\\ConsoleOutput\n);\n\n/*\n|--------------------------------------------------------------------------\n| Shutdown The Application\n|--------------------------------------------------------------------------\n|\n| Once Artisan has finished running. We will fire off the shutdown events\n| so that any final work may be done by the application before we shut\n| down the process. This is the last thing to happen to the request.\n|\n*/\n\n$kernel->terminate($input, $status);\n\nexit($status);\n"
  },
  {
    "path": "bootstrap/app.php",
    "content": "<?php\n\nuse October\\Rain\\Foundation\\Application;\nuse Illuminate\\Foundation\\Configuration\\Exceptions;\nuse Illuminate\\Foundation\\Configuration\\Middleware;\n\nreturn Application::configure(basePath: dirname(__DIR__))\n    ->withRouting(\n        // web: __DIR__.'/../routes/web.php',\n        // commands: __DIR__.'/../routes/console.php',\n        // health: '/up',\n    )\n    ->withMiddleware(function (Middleware $middleware) {\n        //\n    })\n    ->withExceptions(function (Exceptions $exceptions) {\n        //\n    })->create();\n"
  },
  {
    "path": "bootstrap/autoload.php",
    "content": "<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader for\n| this application. We just need to utilize it! We'll simply require it\n| into the script here so we don't need to manually load our classes.\n|\n*/\n\n$vendorPath = __DIR__ . '/../vendor/autoload.php';\n\nif (!file_exists($vendorPath)) {\n    missingVendorGuard();\n}\n\nrequire $vendorPath;\n\n/*\n|--------------------------------------------------------------------------\n| Include The Compiled Class File\n|--------------------------------------------------------------------------\n|\n| To dramatically increase your application's performance, you may use a\n| compiled class file which contains all of the classes commonly used\n| by a request. The Artisan \"optimize\" is used to create this file.\n|\n*/\n\n$compiledPath = __DIR__ . '/../storage/framework/compiled.php';\n\nif (file_exists($compiledPath)) {\n    require $compiledPath;\n}\n\n/*\n|--------------------------------------------------------------------------\n| Handle Missing Vendor Directory\n|--------------------------------------------------------------------------\n|\n| This safeguard ensures the application fails gracefully when Composer\n| dependencies have not been installed. If the \"vendor/autoload.php\" file\n| is missing, a clear message is displayed to the user, and the process\n| exits safely instead of triggering a fatal error.\n|\n| This helps developers identify incomplete deployments and guides them\n| to run \"composer install\" before using the application.\n|\n*/\n\nfunction missingVendorGuard()\n{\n    // Log for operators\n    error_log('[BOOT] vendor/autoload.php missing. Run \"composer install\".');\n\n    $isCli = PHP_SAPI === 'cli';\n\n    if ($isCli) {\n        // CLI output\n        fwrite(STDERR, \"Application not ready: vendor/autoload.php is missing.\\n\");\n        fwrite(STDERR, \"Fix: composer install --no-dev --prefer-dist --no-interaction --optimize-autoloader\\n\");\n        exit(1);\n    }\n\n    // HTTP response\n    http_response_code(503);\n    header('Content-Type: text/html; charset=utf-8');\n    header('Retry-After: 120');\n\n    echo <<<HTML\n<!doctype html>\n<meta charset=\"utf-8\">\n<title>Application not ready</title>\n<style>\n    body{font:14px/1.5 system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;margin:3rem;color:#222}\n    code{background:#f4f4f4;padding:.15rem .35rem;border-radius:4px}\n    .box{max-width:680px}\n</style>\n<div class=\"box\">\n    <h1>Application not ready</h1>\n    <p>The application dependencies are not installed.</p>\n    <p>On the server, run:</p>\n    <pre><code>composer install --no-dev --prefer-dist --no-interaction --optimize-autoloader</code></pre>\n    <p>If you deploy build artifacts, ensure the <code>vendor/</code> directory is included or that your deploy step runs Composer before switching traffic.</p>\n    <p>If you are using the <strong>Deploy</strong> plugin for this application, use the <strong>Check&nbsp;Beacon</strong>\n  function now to verify the deployment.</p>\n</div>\nHTML;\n\n    exit(1);\n}\n"
  },
  {
    "path": "bootstrap/providers.php",
    "content": "<?php\n\nreturn [\n    // The App\\Provider class will be automatically loaded by October CMS.\n    //\n    System\\ServiceProvider::class,\n\n    // Include any custom Service Providers in this array, for example.\n    //\n    // App\\Providers\\AppServiceProvider::class,\n    //\n];\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"october/october\",\n    \"description\": \"Built using October CMS: The Laravel-Based CMS Engineered For Simplicity\",\n    \"type\": \"project\",\n    \"homepage\": \"https://octobercms.com\",\n    \"license\": \"proprietary\",\n    \"require\": {\n        \"php\": \"^8.2\",\n        \"october/rain\": \"^4.2\",\n        \"laravel/framework\": \"^12.0\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^8.5|^9.0\",\n        \"squizlabs/php_codesniffer\": \"^3.11\"\n    },\n    \"scripts\": {\n        \"post-root-package-install\": [\n            \"@php -r \\\"file_exists('.env') || copy('.env.example', '.env');\\\"\"\n        ],\n        \"post-create-project-cmd\": [\n            \"@php artisan key:generate --ansi\"\n        ],\n        \"post-autoload-dump\": [\n            \"System\\\\Console\\\\ComposerScript::postAutoloadDump\"\n        ],\n        \"post-update-cmd\": [\n            \"System\\\\Console\\\\ComposerScript::postUpdateCmd\"\n        ],\n        \"pre-package-uninstall\": [\n            \"System\\\\Console\\\\ComposerScript::prePackageUninstall\"\n        ],\n        \"test\": [\n            \"phpunit --stop-on-failure\"\n        ],\n        \"lint\": [\n            \"phpcs\"\n        ]\n    },\n    \"config\": {\n        \"preferred-install\": \"dist\",\n        \"allow-plugins\": {\n            \"composer/installers\": true\n        },\n        \"audit\": {\n            \"block-insecure\": false\n        }\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"System\\\\Console\\\\\": \"modules/system/console\"\n        }\n    },\n    \"minimum-stability\": \"stable\",\n    \"prefer-stable\": true\n}\n"
  },
  {
    "path": "config/app.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Name\n    |--------------------------------------------------------------------------\n    |\n    | This value is the name of your application. This value is used when the\n    | framework needs to place the application's name in a notification or\n    | any other location as required by the application or its packages.\n    */\n\n    'name' => env('APP_NAME', 'October CMS'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Environment\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the \"environment\" your application is currently\n    | running in. This may determine how you prefer to configure various\n    | services the application utilizes. Set this in your \".env\" file.\n    |\n    */\n\n    'env' => env('APP_ENV', 'production'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Debug Mode\n    |--------------------------------------------------------------------------\n    |\n    | When your application is in debug mode, detailed error messages with\n    | stack traces will be shown on every error that occurs within your\n    | application. If disabled, a simple generic error page is shown.\n    |\n    | You can create a CMS page with route \"/error\" to set the contents\n    | of this page. Otherwise a default error page is shown.\n    |\n    */\n\n    'debug' => (bool) env('APP_DEBUG', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application URL\n    |--------------------------------------------------------------------------\n    |\n    | This URL is used by the console to properly generate URLs when using\n    | the Artisan command line tool. You should set this to the root of\n    | your application so that it is used when running Artisan tasks.\n    |\n    */\n\n    'url' => env('APP_URL', 'http://localhost'),\n\n    'asset_url' => env('ASSET_URL'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Locale Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The application locale determines the default locale that will be used\n    | by the translation service provider. You are free to set this value\n    | to any of the locales which will be supported by the application.\n    |\n    */\n\n    'locale' => env('APP_LOCALE', 'en'),\n\n    'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),\n\n    'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Key\n    |--------------------------------------------------------------------------\n    |\n    | This key is used by the Illuminate encrypter service and should be set\n    | to a random, 32 character string, otherwise these encrypted strings\n    | will not be safe. Please do this before deploying an application!\n    |\n    */\n\n    'cipher' => 'AES-256-CBC',\n\n    'key' => env('APP_KEY'),\n\n    'previous_keys' => [\n        ...array_filter(\n            explode(',', (string) env('APP_PREVIOUS_KEYS', ''))\n        ),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Maintenance Mode Driver\n    |--------------------------------------------------------------------------\n    |\n    | These configuration options determine the driver used to determine and\n    | manage Laravel's \"maintenance mode\" status. The \"cache\" driver will\n    | allow maintenance mode to be controlled across multiple machines.\n    |\n    | Supported drivers: \"file\", \"cache\"\n    |\n    */\n\n    'maintenance' => [\n        'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),\n        'store' => env('APP_MAINTENANCE_STORE', 'database'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Timezone\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default timezone for your application, which\n    | will be used by the PHP date and date-time functions. We have gone\n    | ahead and set this to a sensible default for you out of the box.\n    |\n    |-------------------------------- WARNING! --------------------------------\n    |\n    | Before you change this value, consider carefully if that is actually\n    | what you want to do. It is highly recommended that this is always set\n    | to UTC (as your server & DB timezone should be as well) and instead\n    | you can use backend.timezone or cms.timezone to set the default\n    | timezone used to display dates & times.\n    |\n    */\n\n    'timezone' => 'UTC',\n\n];\n"
  },
  {
    "path": "config/backend.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Backend URI prefix\n    |--------------------------------------------------------------------------\n    |\n    | Specifies the URL name used for accessing backend pages.\n    | For example: admin -> http://localhost/admin\n    |\n    */\n\n    'uri' => env('BACKEND_URI', 'admin'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Backend Skin\n    |--------------------------------------------------------------------------\n    |\n    | Specifies the backend skin class to use.\n    |\n    */\n\n    'skin' => Backend\\Skins\\Standard::class,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Branding\n    |--------------------------------------------------------------------------\n    |\n    | The default backend customization settings. These values are all optional\n    | and remember to set the enabled value to true. Supported values:\n    |\n    | - menu_mode: inline, text, tile, collapse, icons, left\n    | - color_mode: light, dark, auto\n    | - color_palette: default, classic, oxford, console, valentino, punch\n    | - login_background_type: color, wallpaper, gradient, ai_images\n    | - login_background_wallpaper_size: auto, cover\n    | - login_image_type: autumn_images, custom\n    |\n    */\n\n    'brand' => [\n        'enabled' => false,\n        'app_name' => env('APP_NAME', 'October CMS'),\n        'tagline' => 'Administration Panel',\n        'menu_mode' => 'icons',\n        'color_mode' => 'light',\n        'color_palette' => 'default',\n        'logo_path' => '~/app/assets/images/logo.png',\n        'favicon_path' => '~/app/assets/images/favicon.png',\n        'menu_logo_path' => '~/app/assets/images/menu_logo.png',\n        'dashboard_icon_path' => '~/app/assets/images/dashboard_icon.png',\n        'stylesheet_path' => '~/app/assets/css/brand_styles.css',\n        'login_background_type' => 'color',\n        'login_background_color' => '#fef6eb',\n        'login_background_wallpaper' => '~/app/assets/images/login_wallpaper.png',\n        'login_background_wallpaper_size' => 'auto',\n        'login_image_type' => 'autumn_images',\n        'login_custom_image' => '~/app/assets/images/loginimage.png',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Turbo Router\n    |--------------------------------------------------------------------------\n    |\n    | Enhance the backend experience using PJAX (push state and AJAX) so when\n    | you click a link, the page is automatically swapped client-side without\n    | the cost of a full page load.\n    |\n    */\n\n    'turbo_router' => env('BACKEND_TURBO_ROUTER', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Force HTTPS security\n    |--------------------------------------------------------------------------\n    |\n    | Use this setting to force a secure protocol when accessing any backend\n    | pages, including the authentication pages. This is usually handled by\n    | web server config, but can be handled by the app for added security.\n    |\n    */\n\n    'force_secure' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Remember Login\n    |--------------------------------------------------------------------------\n    |\n    | Define live duration of backend sessions:\n    |\n    | true  - session never expires (cookie expiration in 5 years)\n    | false - session has a limited time (see session.lifetime)\n    | null  - the form login displays a checkbox that allow user to choose\n    |\n    */\n\n    'force_remember' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Force Single Session\n    |--------------------------------------------------------------------------\n    |\n    | Use this setting to prevent concurrent sessions. When enabled, backend\n    | users cannot sign in to multiple devices at the same time. When a new\n    | sign in occurs, all other sessions for that user are invalidated.\n    |\n    */\n\n    'force_single_session' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Force Mail Setting\n    |--------------------------------------------------------------------------\n    |\n    | Use this setting to remove the option to configure the mail settings\n    | via the backend. This can be used in developer environments to prevent\n    | accidentally sending mail via the configured database.\n    |\n    */\n\n    'force_mail_setting' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Policy\n    |--------------------------------------------------------------------------\n    |\n    | Specify the password policy for backend administrators.\n    |\n    | allow_reset       - Allow administrators to reset their own passwords via self service\n    | min_length        - Password minimum length between 4 - 128 chars\n    | require_uppercase - Require at least one uppercase letter (A–Z)\n    | require_lowercase - Require at least one lowercase letter (a–z)\n    | require_number    - Require at least one number\n    | require_nonalpha  - Require at least one non-alphanumeric character\n    | expire_days       - Enable password expiration after number of days, false to disable\n    |\n    */\n\n    'password_policy' => [\n        'allow_reset' => true,\n        'min_length' => 4,\n        'require_uppercase' => false,\n        'require_lowercase' => false,\n        'require_number' => false,\n        'require_nonalpha' => false,\n        'expire_days' => false,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Peer Management\n    |--------------------------------------------------------------------------\n    |\n    | When enabled, admin users can manage other users at the same role level\n    | in addition to their users below their role (direct reports).\n    |\n    | When disabled, users can only manage their direct reports and not peers.\n    |\n    */\n\n    'user_peer_management' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Avatar\n    |--------------------------------------------------------------------------\n    |\n    | The default avatar used for backend accounts that have no avatar defined.\n    |\n    | local    - Use a local default image of a user\n    | gravatar - Use the Gravatar service to generate a unique image\n    | <url>    - Specify a custom URL to a default avatar\n    |\n    */\n\n    'default_avatar' => 'gravatar',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Backend Locale\n    |--------------------------------------------------------------------------\n    |\n    | This acts as the default setting for a backend user's locale. This can\n    | be changed by the user at any time using the backend preferences.\n    |\n    */\n\n    'locale' => env('APP_LOCALE', 'en'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Backend Timezone\n    |--------------------------------------------------------------------------\n    |\n    | This acts as the default setting for a backend user's timezone. This can\n    | be changed by the user at any time using the backend preferences. All\n    | dates displayed in the backend will be converted to this timezone.\n    |\n    */\n\n    'timezone' => 'UTC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Middleware Group\n    |--------------------------------------------------------------------------\n    |\n    | The name of the middleware group to apply to all backend application routes.\n    | You may use this to apply your own middleware definition.\n    |\n    */\n\n    'middleware_group' => 'web',\n\n];\n"
  },
  {
    "path": "config/broadcasting.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Broadcaster\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default broadcaster that will be used by the\n    | framework when an event needs to be broadcast. You may set this to\n    | any of the connections defined in the \"connections\" array below.\n    |\n    */\n\n    'default' => env('BROADCASTING_DEFAULT', 'pusher'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Broadcast Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the broadcast connections that will be used\n    | to broadcast events to other systems or over websockets. Samples of\n    | each available type of connection are provided inside this array.\n    |\n    */\n\n    'connections' => [\n\n        'pusher' => [\n            'driver' => 'pusher',\n            'key' => env('PUSHER_KEY'),\n            'secret' => env('PUSHER_SECRET'),\n            'app_id' => env('PUSHER_APP_ID'),\n            'options' => [\n                'cluster' => 'eu',\n                'encrypted' => true,\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n        ],\n\n        'log' => [\n            'driver' => 'log',\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/cache.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default cache connection that gets used while\n    | using this caching library. This connection is used when another is\n    | not explicitly specified when executing a given caching function.\n    |\n    */\n\n    'default' => env('CACHE_STORE', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Stores\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the cache \"stores\" for your application as\n    | well as their drivers. You may even define multiple stores for the\n    | same cache driver to group types of items stored in your caches.\n    |\n    */\n\n    'stores' => [\n\n        'apc' => [\n            'driver' => 'apc',\n        ],\n\n        'array' => [\n            'driver' => 'array',\n            'serialize' => false,\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'connection' => env('DB_CACHE_CONNECTION'),\n            'table' => env('DB_CACHE_TABLE', 'cache'),\n            'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),\n            'lock_table' => env('DB_CACHE_LOCK_TABLE'),\n        ],\n\n        'file' => [\n            'driver' => 'file',\n            'path' => storage_path('framework/cache/data'),\n            'lock_path' => storage_path('framework/cache/data'),\n        ],\n\n        'memcached' => [\n            'driver' => 'memcached',\n            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),\n            'sasl' => [\n                env('MEMCACHED_USERNAME'),\n                env('MEMCACHED_PASSWORD'),\n            ],\n            'options' => [\n                // Memcached::OPT_CONNECT_TIMEOUT => 2000,\n            ],\n            'servers' => [\n                [\n                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),\n                    'port' => env('MEMCACHED_PORT', 11211),\n                    'weight' => 100,\n                ],\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),\n            'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),\n        ],\n\n        'dynamodb' => [\n            'driver' => 'dynamodb',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),\n            'endpoint' => env('DYNAMODB_ENDPOINT'),\n        ],\n\n        'octane' => [\n            'driver' => 'octane',\n        ],\n\n        'failover' => [\n            'driver' => 'failover',\n            'stores' => [\n                'database',\n                'array',\n            ],\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Key Prefix\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing a RAM based store such as APC or Memcached, there might\n    | be other applications utilizing the same cache. So, we'll specify a\n    | value to get prefixed to all our keys so we can avoid collisions.\n    |\n    */\n\n    'prefix' => env('CACHE_PREFIX', 'october-cache-'),\n\n];\n"
  },
  {
    "path": "config/cms.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Specifies the default CMS theme.\n    |--------------------------------------------------------------------------\n    |\n    | This parameter value can be overridden by the CMS back-end settings.\n    |\n    */\n\n    'active_theme' => env('ACTIVE_THEME', 'demo'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Themes\n    |--------------------------------------------------------------------------\n    |\n    | Globally forces all themes to store template changes in the database,\n    | instead of the file system. If this feature is enabled, changes will\n    | not be stored in the file system.\n    |\n    | false - All theme templates are sourced from the filesystem.\n    | true  - Source theme templates from the database with fallback to the filesystem.\n    |\n    */\n\n    'database_templates' => env('CMS_DB_TEMPLATES', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Template Strictness\n    |--------------------------------------------------------------------------\n    |\n    | When enabled, an error is thrown when a component, variable, or attribute\n    | used does not exist. When disabled, a null value is returned instead.\n    |\n    */\n\n    'strict_variables' => env('CMS_STRICT_VARIABLES', false),\n\n    'strict_components' => env('CMS_STRICT_COMPONENTS', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Frontend Timezone\n    |--------------------------------------------------------------------------\n    |\n    | This acts as the default setting for a frontend user's timezone used when\n    | converting dates from the system setting, typically set to UTC.\n    |\n    */\n\n    'timezone' => 'UTC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Template Caching\n    |--------------------------------------------------------------------------\n    |\n    | Specifies the number of minutes the CMS object cache lives. After the interval\n    | is expired item are re-cached. Note that items are re-cached automatically when\n    | the corresponding template file is modified.\n    |\n    */\n\n    'template_cache_ttl' => 1440,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Twig Cache\n    |--------------------------------------------------------------------------\n    |\n    | Store a temporary cache of parsed Twig templates in the local filesystem.\n    |\n    */\n\n    'enable_twig_cache' => env('CMS_TWIG_CACHE', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Determines if the routing caching is enabled.\n    |--------------------------------------------------------------------------\n    |\n    | If the caching is enabled, the page URL map is saved in the cache. If a page\n    | URL was changed on the disk, the old URL value could be still saved in the cache.\n    | To update the cache the clear:cache command should be used. It is recommended\n    | to disable the caching during the development, and enable it in the production mode.\n    |\n    */\n\n    'enable_route_cache' => env('CMS_ROUTE_CACHE', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Page URL Exceptions (Beta)\n    |--------------------------------------------------------------------------\n    |\n    | This configuration can be used to bypass CMS routing logic, such as the\n    | maintenance mode page and site definition prefix. The key matches a page\n    | URL match with support for wildcards. The following exception values can\n    | be configured separated by the pipe character (|).\n    |\n    | maintenance - Skip maintenance mode and always allow access to this page\n    | site        - Skip the multisite definition matching engine\n    |\n    */\n\n    'url_exceptions' => [\n        // '/api/*' => 'maintenance',\n        // '/sitemap.xml' => 'site|maintenance',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Time to live for the URL map.\n    |--------------------------------------------------------------------------\n    |\n    | The URL map used in the CMS page routing process. By default\n    | the map is updated every time when a page is saved in the backend or when the\n    | interval, in minutes, specified with the url_cache_ttl parameter expires.\n    |\n    */\n\n    'url_cache_ttl' => 60,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Determines if the asset caching is enabled.\n    |--------------------------------------------------------------------------\n    |\n    | If the caching is enabled, combined assets are cached. If a asset file\n    | is changed on the disk, the old file contents could be still saved in the cache.\n    | To update the cache the clear cache command should be used. It is recommended\n    | to disable the caching during the development, and enable it in the production mode.\n    |\n    */\n\n    'enable_asset_cache' => env('CMS_ASSET_CACHE', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Determines if the asset minification is enabled.\n    |--------------------------------------------------------------------------\n    |\n    | If the minification is enabled, combined assets are compressed (minified).\n    | It is recommended to disable the minification during development, and\n    | enable it in production mode.\n    |\n    */\n\n    'enable_asset_minify' => env('CMS_ASSET_MINIFY', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Check Import Timestamps When Combining Assets\n    |--------------------------------------------------------------------------\n    |\n    | If deep hashing is enabled, the combiner cache will be reset when a change\n    | is detected on imported files, in addition to those referenced directly.\n    | This will cause slower page performance. If set to null, deep hashing\n    | is used when debug mode (app.debug) is enabled.\n    |\n    */\n\n    'enable_asset_deep_hashing' => env('CMS_ASSET_DEEP_HASHING', null),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Site Redirect Policy\n    |--------------------------------------------------------------------------\n    |\n    | Controls the behavior when the root URL is opened without a matched site.\n    |\n    | detect    - detect the site based on the browser language\n    | primary   - use the primary site\n    | <site_id> - use a specific site identifier (id)\n    |\n    */\n\n    'redirect_policy' => env('CMS_REDIRECT_POLICY', 'detect'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Force Bytecode Invalidation\n    |--------------------------------------------------------------------------\n    |\n    | When using Opcache with opcache.validate_timestamps set to 0 or APC\n    | with apc.stat set to 0 and Twig cache enabled, clearing the template\n    | cache won't update the cache, set to true to get around this.\n    |\n    */\n\n    'force_bytecode_invalidation' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Safe Mode\n    |--------------------------------------------------------------------------\n    |\n    | If safe mode is enabled, the PHP code section is disabled in the CMS\n    | for security reasons. If set to null, safe mode is enabled when\n    | debug mode (app.debug) is disabled.\n    |\n    */\n\n    'safe_mode' => env('CMS_SAFE_MODE', null),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Middleware Group\n    |--------------------------------------------------------------------------\n    |\n    | The name of the middleware group to apply to all CMS application routes.\n    | You may use this to apply your own middleware definition, or use some\n    | of the defaults: web, api\n    |\n    */\n\n    'middleware_group' => 'web',\n\n    /*\n    |--------------------------------------------------------------------------\n    | V1 Security Policy\n    |--------------------------------------------------------------------------\n    |\n    | When using safe mode configuration, the Twig sandbox becomes very strict and\n    | uses an allow-list to protect calling unapproved methods. Instead, you may\n    | use V1, which is a more relaxed policy that uses a block-list, it blocks\n    | most of the unsecure methods but is not as secure as an allow-list.\n    |\n    */\n\n    'security_policy_v1' => env('CMS_SECURITY_POLICY_V1', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | V1 Exception Policy\n    |--------------------------------------------------------------------------\n    |\n    | When debug mode is off, throwing exceptions in AJAX will display a generic\n    | message, except for specific exception types such as ApplicationException\n    | and ValidationException (allow-list). Instead, you may use V1, which is\n    | a more relaxed policy that allows all messages and blocks common exception\n    | types (block-list) but may still leak information in rare cases.\n    |\n    */\n\n    'exception_policy_v1' => env('CMS_EXCEPTION_POLICY_V1', false),\n\n];\n"
  },
  {
    "path": "config/database.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Database Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which of the database connections below you wish\n    | to use as your default connection for all database work. Of course\n    | you may use many connections at once using the Database library.\n    |\n    */\n\n    'default' => env('DB_CONNECTION', 'mysql'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here are each of the database connections setup for your application.\n    | Of course, examples of configuring each database platform that is\n    | supported by Laravel is shown below to make development simple.\n    |\n    |\n    | All database work in Laravel is done through the PHP PDO facilities\n    | so make sure you have the driver for your particular database of\n    | choice installed on your machine before you begin development.\n    |\n    */\n\n    'connections' => [\n\n        'sqlite' => [\n            'driver' => 'sqlite',\n            'url' => env('DB_URL'),\n            'database' => env('DB_DATABASE', database_path('database.sqlite')),\n            'prefix' => '',\n            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),\n            'busy_timeout' => null,\n            'journal_mode' => null,\n            'synchronous' => null,\n            'transaction_mode' => 'DEFERRED',\n        ],\n\n        'mysql' => [\n            'driver' => 'mysql',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => env('DB_CHARSET', 'utf8mb4'),\n            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'strict' => true,\n            'engine' => null,\n            'options' => extension_loaded('pdo_mysql') ? array_filter([\n                (PHP_VERSION_ID >= 80500 ? \\Pdo\\Mysql::ATTR_SSL_CA : \\PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),\n            ]) : [],\n        ],\n\n        'mariadb' => [\n            'driver' => 'mariadb',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => env('DB_CHARSET', 'utf8mb4'),\n            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'strict' => true,\n            'engine' => null,\n            'options' => extension_loaded('pdo_mysql') ? array_filter([\n                (PHP_VERSION_ID >= 80500 ? \\Pdo\\Mysql::ATTR_SSL_CA : \\PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),\n            ]) : [],\n        ],\n\n        'pgsql' => [\n            'driver' => 'pgsql',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '5432'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => env('DB_CHARSET', 'utf8'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'search_path' => env('DB_SCHEMA', 'public'),\n            'sslmode' => env('DB_SSLMODE', 'prefer'),\n        ],\n\n        'sqlsrv' => [\n            'driver' => 'sqlsrv',\n            'url' => env('DB_URL'),\n            'host' => env('DB_HOST', 'localhost'),\n            'port' => env('DB_PORT', '1433'),\n            'database' => env('DB_DATABASE', 'laravel'),\n            'username' => env('DB_USERNAME', 'root'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => env('DB_CHARSET', 'utf8'),\n            'prefix' => '',\n            'prefix_indexes' => true,\n            // 'encrypt' => env('DB_ENCRYPT', 'yes'),\n            // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Migration Repository Table\n    |--------------------------------------------------------------------------\n    |\n    | This table keeps track of all the migrations that have already run for\n    | your application. Using this information, we can determine which of\n    | the migrations on disk have not actually be run in the databases.\n    |\n    */\n\n    'migrations' => [\n        'table' => 'migrations',\n        'update_date_on_publish' => true,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Redis Databases\n    |--------------------------------------------------------------------------\n    |\n    | Redis is an open source, fast, and advanced key-value store that also\n    | provides a richer set of commands than a typical key-value systems\n    | such as APC or Memcached. Laravel makes it easy to dig right in.\n    |\n    */\n\n    'redis' => [\n\n        'client' => env('REDIS_CLIENT', 'phpredis'),\n\n        'options' => [\n            'cluster' => env('REDIS_CLUSTER', 'redis'),\n            'prefix' => env('REDIS_PREFIX', 'october_database_'),\n            'persistent' => env('REDIS_PERSISTENT', false),\n        ],\n\n        'default' => [\n            'url' => env('REDIS_URL'),\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'username' => env('REDIS_USERNAME'),\n            'password' => env('REDIS_PASSWORD'),\n            'port' => env('REDIS_PORT', '6379'),\n            'database' => env('REDIS_DB', '0'),\n            'max_retries' => env('REDIS_MAX_RETRIES', 3),\n            'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),\n            'backoff_base' => env('REDIS_BACKOFF_BASE', 100),\n            'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),\n        ],\n\n        'cache' => [\n            'url' => env('REDIS_URL'),\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'username' => env('REDIS_USERNAME'),\n            'password' => env('REDIS_PASSWORD'),\n            'port' => env('REDIS_PORT', '6379'),\n            'database' => env('REDIS_CACHE_DB', '1'),\n            'max_retries' => env('REDIS_MAX_RETRIES', 3),\n            'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),\n            'backoff_base' => env('REDIS_BACKOFF_BASE', 100),\n            'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/editor.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default HTML Editor Settings\n    |--------------------------------------------------------------------------\n    |\n    | The default editor settings. These values are all optional and remember to\n    | set the enabled value to true. The `editor_options` provides defaults\n    | for the `editorOptions` property.\n    |\n    | See https://docs.octobercms.com/3.x/element/form/widget-richeditor.html\n    |\n    */\n\n    'html_defaults' => [\n        'enabled' => false,\n        'stylesheet_path' => '~/app/assets/css/editor_styles.css',\n        'toolbar_buttons' => 'paragraphFormat, paragraphStyle, quote, bold, italic, align, formatOL, formatUL, insertTable, insertSnippet, insertPageLink, insertImage, insertVideo, insertAudio, insertFile, insertHR, fullscreen, html',\n        'allow_tags' => 'a, abbr, address, area, article, aside, audio, b, base, bdi, bdo, blockquote, br, button, canvas, caption, cite, code, col, colgroup, datalist, dd, del, details, dfn, dialog, div, dl, dt, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, hr, i, iframe, img, input, ins, kbd, keygen, label, legend, li, link, main, map, mark, menu, menuitem, meter, nav, noscript, object, ol, optgroup, option, output, p, param, pre, progress, queue, rp, rt, ruby, s, samp, script, style, section, select, small, source, span, strike, strong, sub, summary, sup, table, tbody, td, textarea, tfoot, th, thead, time, title, tr, track, u, ul, var, video, wbr',\n        'allow_empty_tags' => 'textarea, a, i, iframe, object, video, style, script, .icon, .bi, .fa, .fr-emoticon, .fr-inner, path, line',\n        'no_wrap_tags' => 'figure, script, style',\n        'remove_tags' => 'script, style',\n        'line_breaker_tags' => 'figure, table, hr, iframe, form, dl',\n        'allow_attrs' => '',\n        'paragraph_formats' => [\n            'N' => 'Normal',\n            'H1' => 'Heading 1',\n            'H2' => 'Heading 2',\n            'H3' => 'Heading 3',\n            'H4' => 'Heading 4',\n            'PRE' => 'Code',\n        ],\n        'style_paragraph' => [\n            'oc-text-bordered' => 'Bordered',\n            'oc-text-gray' => 'Gray',\n            'oc-text-spaced' => 'Spaced',\n            'oc-text-uppercase' => 'Uppercase',\n        ],\n        'style_inline' => [\n            'oc-class-code' => 'Code',\n            'oc-class-highlighted' => 'Highlighted',\n            'oc-class-transparency' => 'Transparent',\n        ],\n        'style_link' => [\n            'oc-link-green' => 'Green',\n            'oc-link-strong' => 'Strong',\n        ],\n        'style_table' => [\n            'oc-dashed-borders' => 'Dashed Borders',\n            'oc-alternate-rows' => 'Alternate Rows',\n        ],\n        'style_table_cell' => [\n            'oc-cell-highlighted' => 'Highlighted',\n            'oc-cell-thick-border' => 'Thick Border',\n        ],\n        'style_image' => [\n            'oc-img-rounded' => 'Rounded',\n            'oc-img-bordered' => 'Bordered',\n        ],\n        'editor_options' => [],\n    ],\n\n];\n"
  },
  {
    "path": "config/filesystems.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default filesystem disk that should be used\n    | by the framework. A \"local\" driver, as well as a variety of cloud\n    | based drivers are available for your choosing. Just store away!\n    |\n    */\n\n    'default' => env('FILESYSTEM_DISK', 'local'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem Disks\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure as many filesystem \"disks\" as you wish, and you\n    | may even configure multiple disks of the same driver. Defaults have\n    | been setup for each driver as an example of the required options.\n    |\n    | Supported Drivers: \"local\", \"ftp\", \"sftp\", \"s3\"\n    |\n    */\n\n    'disks' => [\n\n        'local' => [\n            'driver' => 'local',\n            'root' => storage_path('app/private'),\n            'serve' => true,\n            'throw' => false,\n            'report' => false,\n        ],\n\n        'public' => [\n            'driver' => 'local',\n            'root' => storage_path('app/public'),\n            'url' => rtrim(env('APP_URL', ''), '/').'/storage/app/public',\n            'visibility' => 'public',\n            'throw' => false,\n            'report' => false,\n        ],\n\n        'uploads' => [\n            'driver' => 'local',\n            'root' => storage_path('app/uploads'),\n            'url' => '/storage/app/uploads',\n            'visibility' => 'public',\n            'throw' => false,\n            'report' => false,\n        ],\n\n        'media' => [\n            'driver' => 'local',\n            'root' => storage_path('app/media'),\n            'url' => '/storage/app/media',\n            'visibility' => 'public',\n            'throw' => false,\n            'report' => false,\n        ],\n\n        'resources' => [\n            'driver' => 'local',\n            'root' => storage_path('app/resources'),\n            'url' => '/storage/app/resources',\n            'visibility' => 'public',\n            'throw' => false,\n            'report' => false,\n        ],\n\n        's3' => [\n            'driver' => 's3',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n            'url' => env('AWS_URL'),\n            'endpoint' => env('AWS_ENDPOINT'),\n            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),\n            'throw' => false,\n            'report' => false,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Symbolic Links\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the symbolic links that will be created when the\n    | `storage:link` Artisan command is executed. The array keys should be\n    | the locations of the links and the values should be their targets.\n    |\n    | For October CMS, we recommend using the `october:mirror` command instead\n    |\n    */\n\n    'links' => [\n        public_path('storage/app/public') => storage_path('app/public'),\n    ],\n\n];\n"
  },
  {
    "path": "config/hashing.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Hash Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default hash driver that will be used to hash\n    | passwords for your application. By default, the bcrypt algorithm is\n    | used; however, you remain free to modify this option if you wish.\n    |\n    | Supported: \"bcrypt\", \"argon\", \"argon2id\"\n    |\n    */\n\n    'driver' => 'bcrypt',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Bcrypt Options\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the configuration options that should be used when\n    | passwords are hashed using the Bcrypt algorithm. This will allow you\n    | to control the amount of time it takes to hash the given password.\n    |\n    */\n\n    'bcrypt' => [\n        'rounds' => env('BCRYPT_ROUNDS', 10),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Argon Options\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the configuration options that should be used when\n    | passwords are hashed using the Argon algorithm. These will allow you\n    | to control the amount of time it takes to hash the given password.\n    |\n    */\n\n    'argon' => [\n        'memory' => 1024,\n        'threads' => 2,\n        'time' => 2,\n    ],\n\n];\n"
  },
  {
    "path": "config/logging.php",
    "content": "<?php\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\nuse Monolog\\Processor\\PsrLogMessageProcessor;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default log channel that gets used when writing\n    | messages to the logs. The name specified in this option should match\n    | one of the channels defined in the \"channels\" configuration array.\n    |\n    */\n\n    'default' => env('LOG_CHANNEL', 'stack'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Deprecations Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the log channel that should be used to log warnings\n    | regarding deprecated PHP and library features. This allows you to get\n    | your application ready for upcoming major versions of dependencies.\n    |\n    */\n\n    'deprecations' => [\n        'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),\n        'trace' => env('LOG_DEPRECATIONS_TRACE', false),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Log Channels\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log channels for your application. Out of\n    | the box, Laravel uses the Monolog PHP logging library. This gives\n    | you a variety of powerful log handlers / formatters to utilize.\n    |\n    | Available Drivers: \"single\", \"daily\", \"slack\", \"syslog\",\n    |                    \"errorlog\", \"monolog\",\n    |                    \"custom\", \"stack\"\n    |\n    */\n\n    'channels' => [\n\n        'stack' => [\n            'driver' => 'stack',\n            'channels' => explode(',', (string) env('LOG_STACK', 'single')),\n            'ignore_exceptions' => false,\n        ],\n\n        'single' => [\n            'driver' => 'single',\n            'path' => storage_path('logs/system.log'),\n            'level' => env('LOG_LEVEL', 'debug'),\n            'replace_placeholders' => true,\n        ],\n\n        'daily' => [\n            'driver' => 'daily',\n            'path' => storage_path('logs/system.log'),\n            'level' => env('LOG_LEVEL', 'debug'),\n            'days' => env('LOG_DAILY_DAYS', 14),\n            'replace_placeholders' => true,\n        ],\n\n        'slack' => [\n            'driver' => 'slack',\n            'url' => env('LOG_SLACK_WEBHOOK_URL'),\n            'username' => env('LOG_SLACK_USERNAME', 'October CMS Log'),\n            'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),\n            'level' => env('LOG_LEVEL', 'critical'),\n            'replace_placeholders' => true,\n        ],\n\n        'papertrail' => [\n            'driver' => 'monolog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),\n            'handler_with' => [\n                'host' => env('PAPERTRAIL_URL'),\n                'port' => env('PAPERTRAIL_PORT'),\n                'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),\n            ],\n            'processors' => [PsrLogMessageProcessor::class],\n        ],\n\n        'stderr' => [\n            'driver' => 'monolog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'handler' => StreamHandler::class,\n            'handler_with' => [\n                'stream' => 'php://stderr',\n            ],\n            'formatter' => env('LOG_STDERR_FORMATTER'),\n            'processors' => [PsrLogMessageProcessor::class],\n        ],\n\n        'syslog' => [\n            'driver' => 'syslog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),\n            'replace_placeholders' => true,\n        ],\n\n        'errorlog' => [\n            'driver' => 'errorlog',\n            'level' => env('LOG_LEVEL', 'debug'),\n            'replace_placeholders' => true,\n        ],\n\n        'null' => [\n            'driver' => 'monolog',\n            'handler' => NullHandler::class,\n        ],\n\n        'emergency' => [\n            'path' => storage_path('logs/laravel.log'),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/mail.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Mailer\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default mailer that is used to send any email\n    | messages sent by your application. Alternative mailers may be setup\n    | and used as needed; however, this mailer will be used by default.\n    |\n    */\n\n    'default' => env('MAIL_MAILER', 'smtp'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mailer Configurations\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure all of the mailers used by your application plus\n    | their respective settings. Several examples have been configured for\n    | you and you are free to add your own as your application requires.\n    |\n    | Laravel supports a variety of mail \"transport\" drivers to be used while\n    | sending an e-mail. You will specify which one you are using for your\n    | mailers below. You are free to add additional mailers as required.\n    |\n    | Supported: \"smtp\", \"sendmail\", \"mailgun\", \"ses\", \"ses-v2\",\n    |            \"postmark\", \"resend\", \"log\", \"array\",\n    |            \"failover\", \"roundrobin\"\n    |\n    */\n\n    'mailers' => [\n        'smtp' => [\n            'transport' => 'smtp',\n            'scheme' => env('MAIL_SCHEME'),\n            'url' => env('MAIL_URL'),\n            'host' => env('MAIL_HOST', '127.0.0.1'),\n            'port' => env('MAIL_PORT', 2525),\n            'username' => env('MAIL_USERNAME'),\n            'password' => env('MAIL_PASSWORD'),\n            'timeout' => null,\n            'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),\n        ],\n\n        'ses' => [\n            'transport' => 'ses',\n        ],\n\n        'postmark' => [\n            'transport' => 'postmark',\n            // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),\n            // 'client' => [\n            //     'timeout' => 5,\n            // ],\n        ],\n\n        'resend' => [\n            'transport' => 'resend',\n        ],\n\n        'sendmail' => [\n            'transport' => 'sendmail',\n            'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'),\n        ],\n\n        'log' => [\n            'transport' => 'log',\n            'channel' => env('MAIL_LOG_CHANNEL'),\n        ],\n\n        'array' => [\n            'transport' => 'array',\n        ],\n\n        'failover' => [\n            'transport' => 'failover',\n            'mailers' => [\n                'smtp',\n                'log',\n            ],\n            'retry_after' => 60,\n        ],\n\n        'roundrobin' => [\n            'transport' => 'roundrobin',\n            'mailers' => [\n                'ses',\n                'postmark',\n            ],\n            'retry_after' => 60,\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global \"From\" Address\n    |--------------------------------------------------------------------------\n    |\n    | You may wish for all e-mails sent by your application to be sent from\n    | the same address. Here, you may specify a name and address that is\n    | used globally for all e-mails that are sent by your application.\n    |\n    */\n\n    'from' => [\n        'address' => env('MAIL_FROM_ADDRESS', 'noreply@example.tld'),\n        'name' => env('MAIL_FROM_NAME', 'October CMS'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global \"To\" Address\n    |--------------------------------------------------------------------------\n    |\n    | When testing your application, you may need all e-mails to be sent to\n    | one developer's address. Here, you may specify a name and address that is\n    | used globally for all e-mails that are sent by your application.\n    |\n    */\n\n    'to' => [\n        'address' => env('MAIL_TO_ADDRESS', null),\n        'name' => env('MAIL_TO_NAME', null),\n    ],\n];\n"
  },
  {
    "path": "config/media.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Time to Live for Assets\n    |--------------------------------------------------------------------------\n    |\n    | Specifies the cache time-to-live, in minutes. The default value is 10.\n    | The cache invalidates automatically when Library items are added,\n    | updated or deleted.\n    |\n    */\n\n    'item_cache_ttl' => 10,\n\n   /*\n    |--------------------------------------------------------------------------\n    | Automatically Rename Filenames\n    |--------------------------------------------------------------------------\n    |\n    | When a media file is uploaded, automatically transform its filename to\n    | something consistent. The \"slug\" mode will slug the file name for all\n    | uploads.\n    |\n    | Supported: \"null\", \"slug\"\n    |\n    */\n\n    'auto_rename' => env('MEDIA_AUTO_RENAME', null),\n\n   /*\n    |--------------------------------------------------------------------------\n    | Clean Vector Files\n    |--------------------------------------------------------------------------\n    |\n    | When a vector file (SVG) file is uploaded, automatically process its\n    | contents to remove scripts and other potentially dangerous content.\n    |\n    */\n\n    'clean_vectors' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Ignored Files and Patterns\n    |--------------------------------------------------------------------------\n    |\n    | The media manager wil ignore file names and patterns specified here\n    |\n    */\n\n    'ignore_files' => ['.svn', '.git', '.DS_Store', '.AppleDouble'],\n\n    'ignore_patterns' => ['^\\..*'],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Allowed Extensions\n    |--------------------------------------------------------------------------\n    |\n    | Only allow the following extensions to be uploaded and stored.\n    |\n    */\n\n    'default_extensions' => ['jpg', 'jpeg', 'bmp', 'png', 'webp', 'avif', 'gif', 'svg', 'js', 'map', 'ico', 'css', 'less', 'scss', 'ics', 'odt', 'doc', 'docx', 'ppt', 'pptx', 'pdf', 'swf', 'txt', 'ods', 'xls', 'xlsx', 'eot', 'woff', 'woff2', 'ttf', 'flv', 'wmv', 'mp3', 'ogg', 'wav', 'avi', 'mov', 'mp4', 'mpeg', 'webm', 'mkv', 'rar', 'zip'],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Image Extensions\n    |--------------------------------------------------------------------------\n    |\n    | File extensions corresponding to the Image document type\n    |\n    */\n\n    'image_extensions' => ['jpg', 'jpeg', 'bmp', 'png', 'webp', 'avif', 'gif', 'svg'],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Video Extensions\n    |--------------------------------------------------------------------------\n    |\n    | File extensions corresponding to the Video document type\n    |\n    */\n\n    'video_extensions' => ['mp4', 'avi', 'mov', 'mpg', 'mpeg', 'mkv', 'webm'],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Audio Extensions\n    |--------------------------------------------------------------------------\n    |\n    | File extensions corresponding to the Audio document type\n    |\n    */\n\n    'audio_extensions' => ['mp3', 'wav', 'wma', 'm4a', 'ogg'],\n\n];\n"
  },
  {
    "path": "config/multisite.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Enable Multisite\n    |--------------------------------------------------------------------------\n    |\n    | Allows the creation of multiple site definitions in the same installation.\n    | Disabling this will lock any existing site definitions.\n    |\n    */\n\n    'enabled' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Multisite Features\n    |--------------------------------------------------------------------------\n    |\n    | Use multisite for the features defined below. Be sure to clear the application\n    | cache after modifying these settings.\n    |\n    |  - system_plugin_sites - Plugins can be enabled/disabled per site\n    |  - system_plugin_site_groups - Plugins can be enabled/disabled per site group\n    |  - system_asset_combiner - Asset combiner cache keys are unique to the site\n    |  - cms_maintenance_setting - Maintenance Mode Settings are unique for each site\n    |  - backend_mail_setting - Mail Settings are unique for each site\n    |\n    | There are also some known vendor implementations.\n    |\n    |  - rainlab_googleanalytics_setting - Google Analytics for each site\n    |  - responsiv_campaign_message - Mailing list campaigns for each site\n    |\n    */\n\n    'features' => [\n        'system_plugin_sites' => false,\n        'system_plugin_site_groups' => false,\n        'system_asset_combiner' => false,\n        'cms_maintenance_setting' => false,\n        'backend_mail_setting' => false,\n        'dashboard_traffic_statistics' => false,\n\n        // Vendor\n        'rainlab_googleanalytics_setting' => false,\n        'responsiv_campaign_message' => false,\n    ],\n\n];\n"
  },
  {
    "path": "config/queue.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Queue Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Laravel's queue supports a variety of backends via a single, unified\n    | API, giving you convenient access to each backend using identical\n    | syntax for each. The default queue connection is defined below.\n    |\n    */\n\n    'default' => env('QUEUE_CONNECTION', 'sync'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the connection options for every queue backend\n    | used by your application. An example configuration is provided for\n    | each backend supported by Laravel. You're also free to add more.\n    |\n    | Drivers: \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\",\n    |          \"deferred\", \"background\", \"failover\", \"null\"\n    |\n    */\n\n    'connections' => [\n\n        'sync' => [\n            'driver' => 'sync',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'connection' => env('DB_QUEUE_CONNECTION'),\n            'table' => env('DB_QUEUE_TABLE', 'jobs'),\n            'queue' => env('DB_QUEUE', 'default'),\n            'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),\n            'after_commit' => false,\n        ],\n\n        'beanstalkd' => [\n            'driver' => 'beanstalkd',\n            'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),\n            'queue' => env('BEANSTALKD_QUEUE', 'default'),\n            'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),\n            'block_for' => 0,\n            'after_commit' => false,\n        ],\n\n        'sqs' => [\n            'driver' => 'sqs',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),\n            'queue' => env('SQS_QUEUE', 'default'),\n            'suffix' => env('SQS_SUFFIX'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n            'after_commit' => false,\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),\n            'queue' => env('REDIS_QUEUE', 'default'),\n            'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),\n            'block_for' => null,\n            'after_commit' => false,\n        ],\n\n        'deferred' => [\n            'driver' => 'deferred',\n        ],\n\n        'background' => [\n            'driver' => 'background',\n        ],\n\n        'failover' => [\n            'driver' => 'failover',\n            'connections' => [\n                'database',\n                'deferred',\n            ],\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Job Batching\n    |--------------------------------------------------------------------------\n    |\n    | The following options configure the database and table that store job\n    | batching information. These options can be updated to any database\n    | connection and table which has been defined by your application.\n    |\n    */\n\n    'batching' => [\n        'database' => env('DB_CONNECTION', 'mysql'),\n        'table' => 'job_batches',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Failed Queue Jobs\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the behavior of failed queue job logging so you\n    | can control how and where failed jobs are stored. Laravel ships with\n    | support for storing failed jobs in a simple file or in a database.\n    |\n    | Supported drivers: \"database\", \"database-uuids\", \"dynamodb\", \"file\", \"null\"\n    |\n    */\n\n    'failed' => [\n        'driver' => env('QUEUE_FAILED_DRIVER', 'database'),\n        'database' => env('DB_CONNECTION', 'mysql'),\n        'table' => 'failed_jobs',\n    ],\n\n];\n"
  },
  {
    "path": "config/services.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Party Services\n    |--------------------------------------------------------------------------\n    |\n    | This file is for storing the credentials for third party services such\n    | as Mailgun, Postmark, AWS and more. This file provides the de facto\n    | location for this type of information, allowing packages to have\n    | a conventional file to locate the various service credentials.\n    |\n    */\n\n    'postmark' => [\n        'key' => env('POSTMARK_API_KEY'),\n    ],\n\n    'resend' => [\n        'key' => env('RESEND_API_KEY'),\n    ],\n\n    'ses' => [\n        'key' => env('AWS_ACCESS_KEY_ID'),\n        'secret' => env('AWS_SECRET_ACCESS_KEY'),\n        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n    ],\n\n    'slack' => [\n        'notifications' => [\n            'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),\n            'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/session.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Session Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option determines the default session driver that is utilized for\n    | incoming requests. Laravel supports a variety of storage options to\n    | persist session data. Database storage is a great default choice.\n    |\n    | Supported: \"file\", \"cookie\", \"database\", \"memcached\",\n    |            \"redis\", \"dynamodb\", \"array\"\n    |\n    */\n\n    'driver' => env('SESSION_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Lifetime\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the number of minutes that you wish the session\n    | to be allowed to remain idle before it expires. If you want them\n    | to expire immediately when the browser is closed then you may\n    | indicate that via the expire_on_close configuration option.\n    |\n    */\n\n    'lifetime' => (int) env('SESSION_LIFETIME', 120),\n\n    'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Encryption\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to easily specify that all of your session data\n    | should be encrypted before it's stored. All encryption is performed\n    | automatically by Laravel and you may use the session like normal.\n    |\n    */\n\n    'encrypt' => env('SESSION_ENCRYPT', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session File Location\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing the \"file\" session driver, the session files are placed\n    | on disk. The default storage location is defined here; however, you\n    | are free to provide another location where they should be stored.\n    |\n    */\n\n    'files' => storage_path('framework/sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Connection\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" or \"redis\" session drivers, you may specify a\n    | connection that should be used to manage these sessions. This should\n    | correspond to a connection in your database configuration options.\n    |\n    */\n\n    'connection' => env('SESSION_CONNECTION'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Table\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" session driver, you may specify the table to\n    | be used to store sessions. Of course, a sensible default is defined\n    | for you; however, you're welcome to change this to another table.\n    |\n    */\n\n    'table' => env('SESSION_TABLE', 'sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | When using one of the framework's cache driven session backends, you may\n    | define the cache store which should be used to store the session data\n    | between requests. This must match one of your defined cache stores.\n    |\n    | Affects: \"dynamodb\", \"memcached\", \"redis\"\n    |\n    */\n\n    'store' => env('SESSION_STORE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Sweeping Lottery\n    |--------------------------------------------------------------------------\n    |\n    | Some session drivers must manually sweep their storage location to get\n    | rid of old sessions from storage. Here are the chances that it will\n    | happen on a given request. By default, the odds are 2 out of 100.\n    |\n    */\n\n    'lottery' => [2, 100],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the name of the session cookie that is created by\n    | the framework. Typically, you should not need to change this value\n    | since doing so does not grant a meaningful security improvement.\n    |\n    */\n\n    'cookie' => env('SESSION_COOKIE', 'october_session'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Path\n    |--------------------------------------------------------------------------\n    |\n    | The session cookie path determines the path for which the cookie will\n    | be regarded as available. Typically, this will be the root path of\n    | your application, but you're free to change this when necessary.\n    |\n    */\n\n    'path' => env('SESSION_PATH', '/'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Domain\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the domain and subdomains the session cookie is\n    | available to. By default, the cookie will be available to the root\n    | domain without subdomains. Typically, this shouldn't be changed.\n    |\n    */\n\n    'domain' => env('SESSION_DOMAIN'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTPS Only Cookies\n    |--------------------------------------------------------------------------\n    |\n    | By setting this option to true, session cookies will only be sent back\n    | to the server if the browser has a HTTPS connection. This will keep\n    | the cookie from being sent to you when it can't be done securely.\n    |\n    */\n\n    'secure' => env('SESSION_SECURE_COOKIE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP Access Only\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will prevent JavaScript from accessing the\n    | value of the cookie and the cookie will only be accessible through\n    | the HTTP protocol. It's unlikely you should disable this option.\n    |\n    */\n\n    'http_only' => env('SESSION_HTTP_ONLY', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Same-Site Cookies\n    |--------------------------------------------------------------------------\n    |\n    | This option determines how your cookies behave when cross-site requests\n    | take place, and can be used to mitigate CSRF attacks. By default, we\n    | will set this value to \"lax\" to permit secure cross-site requests.\n    |\n    | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value\n    |\n    | Supported: \"lax\", \"strict\", \"none\", null\n    |\n    */\n\n    'same_site' => env('SESSION_SAME_SITE', 'lax'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Partitioned Cookies\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will tie the cookie to the top-level site for\n    | a cross-site context. Partitioned cookies are accepted by the browser\n    | when flagged \"secure\" and the Same-Site attribute is set to \"none\".\n    |\n    */\n\n    'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),\n\n];\n"
  },
  {
    "path": "config/system.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Load Specified Modules\n    |--------------------------------------------------------------------------\n    |\n    | Specify which modules should be registered when using the application.\n    |\n    | LOAD_MODULES=\"System,Backend,Editor,Cms,Media\"\n    |\n    */\n\n    'load_modules' => env('LOAD_MODULES'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Disable Specified Plugins\n    |--------------------------------------------------------------------------\n    |\n    | Specify plugin codes which will always be disabled in the application.\n    |\n    | DISABLE_PLUGINS=\"October.Demo,RainLab.Blog\"\n    |\n    */\n\n    'disable_plugins' => env('DISABLE_PLUGINS'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Link Policy\n    |--------------------------------------------------------------------------\n    |\n    | Controls how URL links are generated throughout the application.\n    |\n    | detect   - detect hostname and use the current schema\n    | secure   - detect hostname and force HTTPS schema\n    | insecure - detect hostname and force HTTP schema\n    | force    - force hostname and schema using app.url config value\n    |\n    | By default most links use their fully qualified URLs or reference their\n    | CDN location. In some cases you may prefer relative links where possible\n    | if so, set the relative_links value to true.\n    |\n    */\n\n    'link_policy' => env('LINK_POLICY', 'detect'),\n\n    'relative_links' => env('RELATIVE_LINKS', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | System Paths\n    |--------------------------------------------------------------------------\n    |\n    | Specify location to core system paths. Local paths are relative if they\n    | do not have a leading slash. URLs can be relative to the base application\n    | URL or you can specify a full path URL.\n    |\n    | PLUGINS_PATH=\"plugins\"\n    | PLUGINS_ASSET_URL=\"/plugins\"\n    |\n    | THEMES_PATH=\"/absolute/path/to/themes\"\n    | THEMES_ASSET_URL=\"http://localhost/themes\"\n    |\n    */\n\n    'plugins_path' => env('PLUGINS_PATH'),\n\n    'plugins_asset_url' => env('PLUGINS_ASSET_URL'),\n\n    'themes_path' => env('THEMES_PATH'),\n\n    'themes_asset_url' => env('THEMES_ASSET_URL'),\n\n    'storage_path' => env('STORAGE_PATH'),\n\n    'cache_path' => env('CACHE_PATH'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Permission Masks\n    |--------------------------------------------------------------------------\n    |\n    | Specifies a default file and folder permission as a string (eg: \"755\") for\n    | created files and directories in the system paths. It is recommended\n    | to use file as \"644\" and folder as \"755\".\n    |\n    */\n\n    'default_mask' => [\n        'file' => env('DEFAULT_FILE_MASK'),\n        'folder' => env('DEFAULT_FOLDER_MASK'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cross Site Request Forgery (CSRF) Protection\n    |--------------------------------------------------------------------------\n    |\n    | If the CSRF protection is enabled, all \"postback\" & AJAX requests are\n    | checked for a valid security token.\n    |\n    */\n\n    'enable_csrf_protection' => env('ENABLE_CSRF', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Convert Line Endings\n    |--------------------------------------------------------------------------\n    |\n    | Determines if October CMS should convert line endings from the Windows\n    | style \\r\\n to the Unix style \\n.\n    |\n    */\n\n    'convert_line_endings' => env('CONVERT_LINE_ENDINGS', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cookie Encryption\n    |--------------------------------------------------------------------------\n    |\n    | October CMS encrypts/decrypts cookies by default. You can specify cookies\n    | that should not be encrypted or decrypted here. This is useful, for\n    | example, when you want to pass data from frontend to server side backend\n    | via cookies, and vice versa.\n    |\n    */\n\n    'unencrypt_cookies' => env('UNENCRYPT_COOKIES', [\n        // 'my_cookie',\n    ]),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Automatically Mirror to Public Directory\n    |--------------------------------------------------------------------------\n    |\n    | Performed after a composer update.\n    |\n    | true   - automatically mirror asset to the public directory\n    | false  - never mirror assets to public directory\n    | null   - only mirror assets when debug mode is OFF (in production)\n    |\n    */\n\n    'auto_mirror_public' => env('AUTO_MIRROR_PUBLIC', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Automatically Rollback Plugins\n    |--------------------------------------------------------------------------\n    |\n    | Attempt to automatically reverse database migrations for a plugin when\n    | they are uninstalled using composer. This is disabled by default\n    | to prevent data loss.\n    |\n    */\n\n    'auto_rollback_plugins' => env('AUTO_ROLLBACK_PLUGINS', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Base Directory Restriction\n    |--------------------------------------------------------------------------\n    |\n    | Restricts loading backend template and config files to within the base\n    | directory of the application. For example, when using the symlink option\n    | in composer for local packages.\n    |\n    | Warning: This should never be disabled in production for security reasons.\n    |\n    */\n\n    'restrict_base_dir' => env('RESTRICT_BASE_DIR', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Log Deprecation Warnings\n    |--------------------------------------------------------------------------\n    |\n    | This logs deprecation warnings from PHP code, either by the language or\n    | from developer code, in the event log. This should be set to true in\n    | development environments to ensure code is maintained and breaking\n    | changes are fixed before they happen.\n    |\n    */\n\n    'log_deprecations' => env('LOG_DEPRECATIONS', false),\n\n];\n"
  },
  {
    "path": "config/view.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Storage Paths\n    |--------------------------------------------------------------------------\n    |\n    | Most templating systems load templates from disk. Here you may specify\n    | an array of paths that should be checked for your views. Of course\n    | the usual Laravel view path has already been registered for you.\n    |\n    */\n\n    'paths' => [\n        app_path('views'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Compiled View Path\n    |--------------------------------------------------------------------------\n    |\n    | This option determines where all the compiled Blade templates will be\n    | stored for your application. Typically, this is within the storage\n    | directory. However, as usual, you are free to change this value.\n    |\n    */\n\n    'compiled' => env(\n        'VIEW_COMPILED_PATH',\n        realpath(storage_path('framework/views'))\n    ),\n\n];\n"
  },
  {
    "path": "index.php",
    "content": "<?php\n/**\n * October - The PHP platform that gets back to basics.\n *\n * @package  october/october\n * @author   Alexey Bobkov, Samuel Georges\n */\n\n/*\n|--------------------------------------------------------------------------\n| Register composer\n|--------------------------------------------------------------------------\n|\n| Composer provides a generated class loader for the application.\n|\n*/\n\nrequire __DIR__.'/bootstrap/autoload.php';\n\n/*\n|--------------------------------------------------------------------------\n| Load framework\n|--------------------------------------------------------------------------\n|\n| This bootstraps the framework and loads up this application.\n|\n*/\n\n$app = require_once __DIR__.'/bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Process request\n|--------------------------------------------------------------------------\n|\n| Execute the request and send the response back to the client.\n|\n*/\n\n$kernel = $app->make(\\Illuminate\\Contracts\\Http\\Kernel::class);\n\n$response = $kernel->handle(\n    $request = Illuminate\\Http\\Request::capture()\n);\n\n$response->send();\n\n$kernel->terminate($request, $response);\n"
  },
  {
    "path": "modules/backend/ServiceProvider.php",
    "content": "<?php namespace Backend;\n\nuse Backend;\nuse System\\Classes\\SettingsManager;\nuse Backend\\Models\\UserRole;\nuse Backend\\Models\\BrandSetting;\nuse October\\Rain\\Support\\ModuleServiceProvider;\n\n/**\n * ServiceProvider for Backend module\n */\nclass ServiceProvider extends ModuleServiceProvider\n{\n    /**\n     * register the service provider.\n     */\n    public function register()\n    {\n        parent::register('backend');\n\n        $this->registerSingletons();\n    }\n\n    /**\n     * boot the module events.\n     */\n    public function boot()\n    {\n        parent::boot('backend');\n    }\n\n    /**\n     * registerSingletons\n     */\n    protected function registerSingletons()\n    {\n        $this->app->singleton('backend.helper', \\Backend\\Helpers\\Backend::class);\n        $this->app->singleton('backend.roles', \\Backend\\Classes\\RoleManager::class);\n        $this->app->scoped('backend.auth', fn () => \\Backend\\Classes\\AuthManager::instance());\n        $this->app->scoped('backend.menu', \\Backend\\Classes\\NavigationManager::class);\n        $this->app->scoped('backend.widgets', \\Backend\\Classes\\WidgetManager::class);\n    }\n\n    /**\n     * registerReportWidgets\n     */\n    public function registerReportWidgets()\n    {\n        return [\n            \\Backend\\ReportWidgets\\Welcome::class => [\n                'label' => \"Welcome\",\n                'context' => 'dashboard'\n            ],\n        ];\n    }\n\n    /**\n     * registerMailTemplates\n     */\n    public function registerMailTemplates()\n    {\n        return [\n            'backend:invite' => 'backend::mail.invite',\n            'backend:restore' => 'backend::mail.restore',\n            'backend:contact-form' => 'backend::mail.contact-form',\n        ];\n    }\n\n    /**\n     * registerNavigation\n     */\n    public function registerNavigation()\n    {\n        // return [\n        //     'dashboard' => [\n        //         'label' => \"Dashboard\",\n        //         'icon' => 'icon-dashboard',\n        //         'iconSvg' => 'modules/backend/assets/images/dashboard-icon.svg',\n        //         'url' => Backend::url('backend'),\n        //         'permissions' => ['dashboard.*', 'dashboard'],\n        //         'order' => 10\n        //     ]\n        // ];\n    }\n\n    /**\n     * registerPermissions\n     */\n    public function registerPermissions()\n    {\n        return [\n            // General\n            'general.backend' => [\n                'label' => 'Access the Backend Panel',\n                'tab' => 'General',\n                'order' => 200\n            ],\n            'general.backend.view_offline' => [\n                'label' => 'View Backend During Maintenance',\n                'tab' => 'General',\n                'order' => 300\n            ],\n            'general.backend.perform_updates' => [\n                'label' => 'Perform Software Updates',\n                'tab' => 'General',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 300\n            ],\n\n            // Administrators\n            'admins.manage' => [\n                'label' => 'Manage Admins',\n                'tab' => 'Administrators',\n                'order' => 200\n            ],\n            'admins.manage.create' => [\n                'label' => 'Create Admins',\n                'tab' => 'Administrators',\n                'order' => 300\n            ],\n            // 'admins.manage.moderate' => [\n            //     'label' => 'Moderate Admins',\n            //     'comment' => 'Manage account suspension and ban admin accounts',\n            //     'tab' => 'Administrators',\n            //     'order' => 400\n            // ],\n            'admins.manage.other_admins' => [\n                'label' => 'Manage Other Admins',\n                'comment' => 'Allow users to reset passwords and update emails.',\n                'tab' => 'Administrators',\n                'order' => 700\n            ],\n            'admins.manage.delete' => [\n                'label' => 'Delete Admins',\n                'tab' => 'Administrators',\n                'order' => 800\n            ],\n            'admins.roles' => [\n                'label' => 'Role Permissions',\n                'comment' => 'Allow users to create new roles and manage roles lower than their highest role.',\n                'tab' => 'Administrators',\n                'order' => 500\n            ],\n            'admins.groups' => [\n                'label' => 'Team Groups',\n                'tab' => 'Administrators',\n                'order' => 600\n            ],\n\n            // Preferences\n            'preferences' => [\n                'label' => \"Manage Backend Preferences\",\n                'tab' => 'Preferences',\n                'order' => 400\n            ],\n            'preferences.code_editor' => [\n                'label' => \"Manage Code Editor Preferences\",\n                'tab' => 'Preferences',\n                'order' => 500\n            ],\n\n            // Settings\n            'settings.customize_backend' => [\n                'label' => \"Customize Backend Styles\",\n                'tab' => 'Settings',\n                'order' => 400\n            ],\n            'settings.editor_settings' => [\n                'label' => 'Global Editor Settings',\n                'comment' => \"Change the global editor preferences.\",\n                'tab' => 'Settings',\n                'order' => 500\n            ]\n        ];\n    }\n\n    /**\n     * registerFormWidgets\n     */\n    public function registerFormWidgets()\n    {\n        return [\n            \\Backend\\FormWidgets\\CodeEditor::class => 'codeeditor',\n            \\Backend\\FormWidgets\\RichEditor::class => 'richeditor',\n            \\Backend\\FormWidgets\\MarkdownEditor::class => 'markdown',\n            \\Backend\\FormWidgets\\FileUpload::class => 'fileupload',\n            \\Backend\\FormWidgets\\Relation::class => 'relation',\n            \\Backend\\FormWidgets\\DatePicker::class => 'datepicker',\n            \\Backend\\FormWidgets\\ColorPicker::class => 'colorpicker',\n            \\Backend\\FormWidgets\\DataTable::class => 'datatable',\n            \\Backend\\FormWidgets\\RecordFinder::class => 'recordfinder',\n            \\Backend\\FormWidgets\\Repeater::class => 'repeater',\n            \\Backend\\FormWidgets\\TagList::class => 'taglist',\n            \\Backend\\FormWidgets\\NestedForm::class => 'nestedform',\n            \\Backend\\FormWidgets\\Sensitive::class => 'sensitive',\n        ];\n    }\n\n    /**\n     * registerFilterWidgets\n     */\n    public function registerFilterWidgets()\n    {\n        return [\n            \\Backend\\FilterWidgets\\Group::class => 'group',\n            \\Backend\\FilterWidgets\\Date::class => 'date',\n            \\Backend\\FilterWidgets\\Text::class => 'text',\n            \\Backend\\FilterWidgets\\Number::class => 'number',\n        ];\n    }\n\n    /**\n     * registerSettings\n     */\n    public function registerSettings()\n    {\n        return [\n            'branding' => [\n                'label' => \"Branding & Appearance\",\n                'description' => \"Customize the administration area such as name, colors and logo.\",\n                'category' => SettingsManager::CATEGORY_BACKEND,\n                'icon' => 'ph ph-terminal-window',\n                'class' => \\Backend\\Models\\BrandSetting::class,\n                'permissions' => ['settings.customize_backend'],\n                'order' => 400,\n                'keywords' => 'brand style'\n            ],\n            'editor' => [\n                'label' => \"Editor Settings\",\n                'description' => \"Change the global editor preferences.\",\n                'category' => SettingsManager::CATEGORY_BACKEND,\n                'icon' => 'icon-code',\n                'class' => \\Backend\\Models\\EditorSetting::class,\n                'permissions' => ['settings.editor_settings'],\n                'order' => 410,\n                'keywords' => 'html code class style'\n            ],\n            'administrators' => [\n                'label' => \"Administrators\",\n                'description' => \"Manage back-end administrator users, groups and permissions.\",\n                'category' => SettingsManager::CATEGORY_TEAM,\n                'icon' => 'ph ph-users-three',\n                'url' => Backend::url('backend/users'),\n                'permissions' => ['admins.manage'],\n                'order' => 500\n            ],\n            'adminroles' => [\n                'label' => \"Role Permissions\",\n                'description' => \"Define permissions for administrators based on their role.\",\n                'category' => SettingsManager::CATEGORY_TEAM,\n                'icon' => 'icon-id-card-1',\n                'url' => Backend::url('backend/userroles'),\n                'permissions' => ['admins.roles'],\n                'order' => 510\n            ],\n            'admingroups' => [\n                'label' => \"Team Groups\",\n                'description' => \"Add administrators to groups used for notifications and features.\",\n                'category' => SettingsManager::CATEGORY_TEAM,\n                'icon' => 'icon-user-group',\n                'url' => Backend::url('backend/usergroups'),\n                'permissions' => ['admins.groups'],\n                'order' => 520\n            ],\n            'myaccount' => [\n                'label' => \"My Account\",\n                'description' => \"Update your account details such as name, email address and password.\",\n                'category' => SettingsManager::CATEGORY_MYSETTINGS,\n                'icon' => 'icon-user-account',\n                'url' => Backend::url('backend/users/myaccount'),\n                'order' => 600,\n                'context' => 'mysettings',\n                'keywords' => \"security login\"\n            ],\n            'preferences' => [\n                'label' => \"Backend Preferences\",\n                'description' => \"Manage your account preferences such as desired language.\",\n                'category' => SettingsManager::CATEGORY_MYSETTINGS,\n                'icon' => 'icon-app-window',\n                'url' => Backend::url('backend/preferences'),\n                'permissions' => ['preferences'],\n                'order' => 610,\n                'context' => 'mysettings'\n            ],\n            'color_mode' => !BrandSetting::get('show_light_switch') ? null : [\n                'label' => \"Color Mode\",\n                'category' => SettingsManager::CATEGORY_MYSETTINGS,\n                'icon' => 'icon-adjust',\n                'url' => 'javascript:;',\n                'permissions' => ['preferences'],\n                'attributes' => [\n                    'data-control' => 'color-mode-switcher',\n                    'data-lang-light-mode' => __(\"Light Mode\"),\n                    'data-lang-dark-mode' => __(\"Dark Mode\"),\n                    'data-lang-auto-mode' => __(\"Auto Mode\")\n                ],\n                'order' => 620,\n                'context' => 'mysettings'\n            ],\n            'access_logs' => [\n                'label' => 'Access Log',\n                'description' => 'View a list of successful back-end user sign ins.',\n                'category' => SettingsManager::CATEGORY_LOGS,\n                'icon' => 'icon-text-lock',\n                'url' => Backend::url('backend/accesslogs'),\n                'permissions' => ['utilities.logs'],\n                'order' => 920\n            ]\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/css/backend/_brand.css",
    "content": "/*\n// Light Mode\n// --------------------------------------------------*/\n\n:root, [data-bs-theme=\"light\"] {\n    /* --bs-border-color: #d7e1ea; */\n    /* --oc-border-focus: #72809d; */\n    --bs-emphasis-color: #333333;\n    --bs-border-color: #c4ced7;\n    --bs-backdrop-opacity: 0.2;\n    --oc-border-focus: var(--oc-primary-active-bg);\n    --oc-highlight-color: white;\n\n    /*\n    // Primary Colors\n    // --------------------------------------------------*/\n\n    --bs-success: var(--bs-green);\n    --bs-info: var(--bs-blue);\n    --bs-warning: var(--bs-yellow);\n    --bs-danger: var(--bs-red);\n\n    --oc-accent: #3498db;\n    --oc-accent-text: #258cd1; /* darker 5% */\n    --oc-selection: var(--bs-teal);\n    --oc-selection-rgb: 107, 196, 141;\n    --oc-selection-text: #39905a; /* darken 20% */\n\n    --oc-primary-bg: white;\n    --oc-primary-color: #5e6d8c;\n    --oc-primary-border: #cfd7e1;\n    --oc-primary-hover-bg: #8082f8; /* tint(#6a6cf7, 15%); */\n    --oc-primary-active-bg: #8889f9; /* tint(#6a6cf7, 20%); */\n\n    --bs-secondary: #72809d;\n    --bs-secondary-color: #72809d;\n    --oc-secondary-bg: #d7e1ea;\n    --oc-secondary-hover-bg: #e0e2e4; /* darken(#eeeff0, 5%); */\n    --oc-secondary-active-bg: #d3d6d8; /* darken(#eeeff0, 10%); */\n\n    --oc-color-neutral: #e5a91a;\n    --oc-color-positive: #95b753;\n    --oc-color-negative: #cc3300;\n\n    /*\n    // Form Variables\n    // --------------------------------------------------*/\n\n    --oc-form-control-bg: white;\n    --oc-form-control-disabled-bg: #e9ecef;\n    --oc-form-control-disabled-color: #899c9d;\n    --oc-input-translatable-color: #75809b;\n    --oc-input-translatable-bg: #ebf0fb;\n    --oc-input-selection-color: #000;\n    --oc-input-selection-bg: #b5d6fd;\n\n    /*\n    // Component Variables\n    // --------------------------------------------------*/\n\n    --oc-mainnav-color: white;\n    --oc-mainnav-bg: #2D3134;\n    --oc-mainnav-icon-color: white;\n\n    --oc-sidebar-color: #536061;\n    --oc-sidebar-bg: #e9edf3;\n    --oc-sidebar-active-color: #333;\n    --oc-sidebar-active-bg: white;\n    --oc-sidebar-active-border: var(--bs-primary);\n    --oc-sidebar-hover-bg: white;\n\n    --oc-editor-bg: #f0f4f8;\n    --oc-editor-section-color: #333;\n    --oc-editor-section-bg: #d7e1eA;\n    --oc-editor-tab-color: #5e6d8c;\n    --oc-editor-tab-bg: #e9edf3;\n    --oc-editor-tab-active-color: #2c3e4f;\n    --oc-editor-tab-active-bg: var(--bs-body-bg);\n\n    --oc-document-toolbar-bg: var(--bs-body-bg);\n    --oc-document-tabs-bg: white;\n    --oc-document-content-bg: white;\n    --oc-document-ruler-bg: #d7e1ea;\n    --oc-document-ruler-color: white;\n    --oc-document-ruler-tick: #bdc3c7;\n\n    --oc-settings-color: #536061;\n    --oc-settings-bg: #f0f4f8;\n    --oc-settings-item: white;\n    --oc-settings-active-color: white;\n    --oc-settings-active-bg: #6bc48d;\n    --oc-settings-hover-bg: #dfe7ee;\n\n    --oc-toolbar-color: #536061;\n    --oc-toolbar-bg: white;\n    /* --oc-toolbar-border: #ecf0f1; */\n    --oc-toolbar-border: #d7e1ea;\n    --oc-toolbar-hover-color: black;\n    --oc-toolbar-hover-bg: rgba(215,225,234,0.7);\n\n    --oc-tab-color: #72809d;\n    --oc-tab-bg: #ffffff;\n    --oc-tab-active-color: #35425b;\n    --oc-tab-border: #d7e1eA;\n    --oc-tab-hover-bg: rgba(215,225,234,0.7);\n\n    --oc-dropdown-trigger-border: #bcc3c7;\n    --oc-dropdown-trigger-color: #536061;\n    --oc-dropdown-trigger-bg: white;\n    --oc-dropdown-hover-bg: var(--bs-primary);\n    --oc-dropdown-hover-color: white;\n    --oc-dropdown-active-bg: rgba(var(--bs-primary-rgb), .95);\n    --oc-dropdown-active-color: white;\n\n    &,.table {\n        --bs-table-color: #536061;\n        --bs-table-bg: white;\n        --bs-table-striped-bg: #f7f9fb;\n        /* --bs-table-border-color: #ecf0f1; */\n        --bs-table-border-color: #d7e1ea;\n        --bs-table-hover-bg: #fff5cb;\n        --oc-table-active-bg: #fff0b2; /* darken(#fff5cb, 5%); */\n    }\n\n    &,.pagination {\n        --bs-pagination-active-bg: var(--bs-primary);\n        --bs-pagination-active-border-color: var(--bs-primary);\n    }\n\n    &,.breadcrumb {\n        --bs-breadcrumb-item-padding-x: 0.4rem;\n    }\n\n    &,.modal {\n        --bs-modal-bg: white;\n    }\n}\n\n/*\n// Dark Mode\n// --------------------------------------------------*/\n\n[data-bs-theme=\"dark\"] {\n    --bs-heading-color: #e0e0e0;\n    --bs-emphasis-color: white;\n    --bs-border-color: #383a3e;\n    --bs-backdrop-opacity: 0.5;\n    --oc-highlight-color: black;\n\n    /*\n    // Primary Colors\n    // --------------------------------------------------*/\n\n    --bs-blue:    #0d6efd;\n    --bs-indigo:  #6610f2;\n    --bs-purple:  #6f42c1;\n    --bs-pink:    #d63384;\n    --bs-red:     #dc3545;\n    --bs-orange:  #fd7e14;\n    --bs-yellow:  #ffc107;\n    --bs-green:   #41b862;\n    --bs-teal:    #24b58a;\n    --bs-cyan:    #0dcaf0;\n\n    --oc-primary-color: rgba(173, 181, 189, 0.85);\n    --oc-primary-bg: #141515;\n    --oc-primary-border: #494c50;\n\n    --bs-secondary-color: rgba(173, 181, 189, 0.75);\n    --oc-secondary-bg: #6f6f6f; /* darken(#888, 10%); */\n    --oc-secondary-hover-bg: #7b7b7b; /* darken(#888, 5%); */\n    --oc-secondary-active-bg: #888;\n\n    /*\n    // Form Variables\n    // --------------------------------------------------*/\n\n    --oc-form-control-bg: #1e2227;\n    --oc-form-control-disabled-bg: #343a40;\n    --oc-input-translatable-color: rgba(173, 181, 189, 0.85);\n    --oc-input-translatable-bg: #272b2e;\n    --oc-input-selection-color: #e0e0e0;\n    --oc-input-selection-bg: #373f47;\n\n    /*\n    // Component Variables\n    // --------------------------------------------------*/\n\n    --oc-sidebar-color: #d7e1eA;\n    --oc-sidebar-bg: #292a2d;\n    --oc-sidebar-active-color: white;\n    --oc-sidebar-active-bg: #424242;\n    --oc-sidebar-hover-bg: #424242;\n\n    --oc-editor-bg: #212529;\n    --oc-editor-section-bg: #383a3e;\n    --oc-editor-section-color: #e0e0e0;\n    --oc-editor-tab-color: #adb5bd;\n    --oc-editor-tab-bg: #181a1e;\n    --oc-editor-tab-active-color: #e0e0e0;\n    --oc-editor-tab-active-bg: #202124;\n\n    --oc-document-toolbar-bg: #202124;\n    --oc-document-tabs-bg: #24262a;\n    --oc-document-content-bg: #181a1e;\n    --oc-document-ruler-bg: #353b42;\n    --oc-document-ruler-color: #1e2227;\n    --oc-document-ruler-tick: #495057;\n\n    --oc-settings-color: #adb5bd;\n    --oc-settings-bg: #1b1f22;\n    --oc-settings-item: #212529;\n    --oc-settings-active-color: white;\n    --oc-settings-active-bg: #2b3442;\n    --oc-settings-hover-bg: #2b3442;\n\n    --oc-toolbar-color: #adb5bd;\n    --oc-toolbar-bg: #1e2227;\n    --oc-toolbar-border: #242a30;\n    --oc-toolbar-hover-color: white;\n    --oc-toolbar-hover-bg: #43484e; /* rgba(215,225,234,0.2); */\n\n    --oc-tab-color: var(--bs-body-color);\n    --oc-tab-bg: var(--bs-body-bg);\n    --oc-tab-active-color: #e0e0e0;\n    --oc-tab-border: #383a3e;\n    --oc-tab-hover-bg: rgba(215,225,234,0.2);\n\n    --oc-dropdown-trigger-border: #495057;\n    --oc-dropdown-trigger-color: #e0e0e0;\n    --oc-dropdown-trigger-bg: #12262c;\n\n    &,.table {\n        --bs-table-color: #adb5bd;\n        --bs-table-bg: #1e2227;\n        --bs-table-striped-bg: rgba(0,0,0,0.05);\n        --bs-table-border-color: #242a30;\n        --bs-table-hover-bg: #35425b;\n        --bs-table-hover-color: #e0e0e0;\n        --oc-table-active-bg: #2c364b; /* darken(#35425b, 5%); */\n    }\n\n    &,.modal {\n        --bs-modal-bg: #1a1d21;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/css/backend/_vars.css",
    "content": "/*\n// Variables\n// --------------------------------------------------*/\n\n:root {\n    --bs-body-font-family:      -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n\n    --oc-brand-primary:          var(--bs-primary);\n    --oc-brand-secondary:        var(--bs-secondary);\n    --oc-brand-success:          var(--bs-success);\n    --oc-brand-info:             var(--bs-info);\n    --oc-brand-warning:          var(--bs-warning);\n    --oc-brand-danger:           var(--bs-danger);\n    --oc-brand-light:            var(--bs-light);\n    --oc-brand-dark:             var(--bs-dark);\n\n    --oc-body-bg:                var(--bs-body-bg);\n    --oc-text-color:             var(--bs-body-color);\n    --oc-text-muted:             var(--bs-secondary-color);\n    --oc-link-color:             var(--bs-link-color);\n    --oc-link-hover-color:       var(--bs-link-hover-color);\n    --oc-heading-color:          var(--bs-heading-color);\n    --oc-emphasis-color:         var(--bs-emphasis-color);\n    --oc-border-color:           var(--bs-border-color);\n    --oc-popup-bg:               var(--bs-modal-bg);\n    --oc-popup-border:           1px solid rgba(149, 165, 166, 0.2);\n    --oc-backdrop-opacity:       var(--bs-backdrop-opacity);\n\n    /*\n    // \"Windex\" Z-Index Window Manager\n    // --------------------------------------------------\n    //\n    // Z-Index frequencies:\n    //\n    // 0-100      - Primary layer (body / content)\n    // 100-200    - Primary menus / dropdowns\n    //\n    // 300-400    - Secondary layer (full screen)\n    // 400-500    - Secondary menus / dropdowns\n    //\n    // 500-600    - Tertiary layer (popups)\n    // 600-700    - Tertiary menus / dropdowns\n    //\n    // 1000-10000 - Reserved for frequency manager\n    //\n    // 10000+     - Always on top\n    */\n\n    /* Primary */\n    --oc-zindex-filter:            10;\n    --oc-zindex-button:            10;\n    --oc-zindex-form:              10;\n    --oc-zindex-checkbox:          10;\n    --oc-zindex-breadcrumb:        10;\n    --oc-zindex-chart:             10;\n    --oc-zindex-tab:               10;\n    --oc-zindex-loader:            10;\n    --oc-zindex-navbar:            100;\n    --oc-zindex-navbar-fixed:      110;\n\n    /* Secondary */\n    --oc-zindex-fullscreen:        300;\n\n    /* Tertiary */\n    --oc-zindex-modal-background:  500;\n    --oc-zindex-modal:             600;\n    --oc-zindex-popover:           600;\n    --oc-zindex-dropdown:          600;\n\n    /* Always on top */\n    --oc-zindex-inspector:         10000;\n    --oc-zindex-datepicker:        10100;\n    --oc-zindex-flashmessage:      10300;\n    --oc-zindex-select:            10400;\n    --oc-zindex-alert:             10500;\n    --oc-zindex-snackbar:          10600;\n    --oc-zindex-tooltip:           10700;\n}\n"
  },
  {
    "path": "modules/backend/assets/css/controls/settings-nav.css",
    "content": "html .control-settings-nav {\n    background: var(--oc-settings-bg);\n}\n\nbody.has-settings-nav {\n    .control-settings-nav ul.top-level {\n        opacity: 1;\n    }\n}\n.control-settings-nav ul.top-level {\n    opacity: 0;\n}\n\n.control-settings-nav-container {\n    width: 300px;\n}\n\n.control-settings-nav {\n    width: 300px;\n    flex-shrink: 0;\n    border-right: 1px solid var(--oc-primary-border);\n\n    position: sticky;\n    top: 0;\n    height: calc(100vh - 70px);\n\n    &.is-full {\n        height: 100vh;\n    }\n\n    .input-clear-search {\n        display: none;\n    }\n\n    &.is-search-active {\n        .input-clear-search {\n            display: block;\n        }\n    }\n\n    .settings-nav-scroll-canvas {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n\n    .settings-search-toolbar-item {\n        display: block;\n        position: relative;\n        background: var(--oc-form-control-bg);\n\n        input.form-control {\n            border: none;\n            outline: none;\n            background: transparent;\n            border-radius: 0;\n            border-bottom: 1px solid var(--oc-primary-border);\n            padding-left: 3rem;\n            padding-right: 3rem;\n            height: 40px;\n        }\n\n        .input-icon-start, .input-icon-end {\n            position: absolute;\n            top: 50%;\n            transform: translateY(-50%);\n            font-size: 1.4rem;\n            margin-top: .1rem;\n        }\n        .input-icon-start {\n            left: 1rem;\n        }\n        .input-icon-end {\n            right: 1rem;\n        }\n        .input-decoration {\n            color: var(--bs-tertiary-color);\n        }\n        .input-clear-search {\n            text-decoration: none;\n            color: var(--bs-body-color);\n\n            &:hover {\n                color: var(--bs-secondary-color);\n            }\n        }\n    }\n\n    ul {\n        padding: 0;\n        margin: 0;\n        list-style: none;\n    }\n\n    ul.top-level {\n        padding-bottom: 20px;\n    }\n\n    div.scrollbar-thumb {\n        background: rgba(0,0,0,.2) !important;\n    }\n\n    ul.top-level > li {\n        padding-top: 10px;\n\n        &[data-status=collapsed] {\n            > div.group {\n                h3 > span.group-collapse {\n                    transform: scaleY(-1) translate(0, -10px);\n                }\n            }\n\n            ul {\n                display: none;\n            }\n        }\n\n        > div.group {\n            /* This makes the group title stick to the top when scrolling\n            background: var(--oc-settings-bg);\n            position: relative;\n            position: sticky;\n            top: 0;\n            z-index: 1;\n            */\n\n            h3 {\n                user-select: none;\n                font-size: 1rem;\n                font-weight: 600;\n                padding: 9px 2px 10px 60px;\n                margin: 0;\n                position: relative;\n                cursor: pointer;\n\n                > span.group-icon {\n                    position: absolute;\n                    left: 15px;\n                    top: 4px;\n\n                    width: 30px;\n                    height: 30px;\n\n                    > i {\n                        font-size: 1.4rem;\n                        position: absolute;\n                        right: 0;\n                        top: 50%;\n                        transform: translateY(-50%);\n                    }\n                }\n\n                > span.group-collapse {\n                    display: block;\n                    position: absolute;\n                    width: 10px;\n                    height: 10px;\n                    right: 20px;\n                    top: 7px;\n                    transform: scaleY(1);\n                    transition: all 0.1s ease;\n                    font-size: 16px;\n                }\n            }\n        }\n\n        > ul {\n            li {\n                padding: 1px 10px;\n                a {\n                    display: block;\n                    position: relative;\n                    padding: 5px 5px 3px 50px;\n                    text-decoration: none !important;\n                    border-radius: 6px;\n                    font-size: 1rem;\n\n                    span {\n                        display: block;\n                        line-height: 150%;\n\n                        &.header {\n                            margin-bottom: 3px;\n                        }\n                    }\n                }\n\n                a:hover,\n                &.active a {\n                    opacity: 1;\n                    text-decoration: none;\n                }\n            }\n        }\n    }\n}\n\n/* Item Styling */\n\n.control-settings-nav ul.top-level > li {\n    > div.group h3 {\n        color: var(--oc-settings-color);\n\n        &:before {\n            color: var(--oc-settings-color);\n        }\n    }\n}\n\n.control-settings-nav ul.top-level > li > ul li {\n    a {\n        color: var(--oc-settings-color);\n\n        span.header {\n            color: var(--oc-settings-color);\n        }\n    }\n\n    a:hover {\n        background: var(--oc-settings-hover-bg);\n        color: var(--oc-settings-color);\n\n        span.header {\n            color: var(--oc-settings-color);\n        }\n    }\n\n    &.active a {\n        color: var(--oc-settings-active-color);\n        background: var(--oc-settings-active-bg);\n\n        span.header {\n            color: var(--oc-settings-active-color);\n        }\n    }\n}\n\n.control-settings-nav {\n    .control-scrollbar.vertical > div.scrollbar-scrollbar {\n        margin-right: 0;\n\n        div.scrollbar-thumb {\n            opacity: 0;\n            transition: opacity 0.1s ease-out;\n            background: rgba(0,0,0,.2);\n        }\n    }\n\n    &:hover {\n        .control-scrollbar.vertical > div.scrollbar-scrollbar {\n            div.scrollbar-thumb {\n                opacity: 1;\n            }\n        }\n    }\n}\n\nbody.drag-noselect {\n    .control-settings-nav {\n        .control-scrollbar.vertical > div.scrollbar-scrollbar {\n            div.scrollbar-thumb {\n                opacity: 1;\n            }\n        }\n    }\n}\n\n/* Expanded */\n@media (max-width: 767px) {\n    body.settings-nav-expanded {\n        #layout-body {\n            display: none !important;\n        }\n\n        .control-settings-nav-container {\n            width: 100%;\n        }\n\n        .control-settings-nav {\n            display: block !important;\n            margin: 0 auto;\n            border-right: none;\n            border-left: none;\n            flex-shrink: inherit;\n            width: 100%;\n        }\n    }\n\n    body:not(.settings-nav-expanded) {\n        .control-settings-nav-container,\n        .control-settings-nav {\n            display: none;\n        }\n    }\n}\n\nhtml body.main-menu-left .control-settings-nav {\n    height: 100vh;\n}\n"
  },
  {
    "path": "modules/backend/assets/css/main.css",
    "content": "/* Backend */\n@import './backend/_brand.css';\n@import './backend/_vars.css';\n@import './controls/settings-nav.css';\n\n/* temp */\n@import './october.css';\n"
  },
  {
    "path": "modules/backend/assets/css/october.css",
    "content": ".clearfix:before,.clearfix:after{content:\" \";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.oc-hide{display:none !important}.oc-show{display:block !important}.oc-invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.t-ww{word-wrap:break-word;word-break:break-word}.t-nw{white-space:nowrap}.w-0{width:0 !important}.w-60{width:60px !important}.w-120{width:120px !important}.w-130{width:130px !important}.w-140{width:140px !important}.w-150{width:150px !important}.w-200{width:200px !important}.w-300{width:300px !important}.w-350{width:350px !important}.mw-400{max-width:400px !important}.mw-450{max-width:450px !important}.mw-500{max-width:500px !important}.mw-550{max-width:550px !important}.mw-600{max-width:600px !important}.mw-650{max-width:650px !important}.mw-700{max-width:700px !important}.mw-750{max-width:750px !important}.mw-800{max-width:800px !important}.mw-850{max-width:850px !important}.mw-900{max-width:900px !important}.mw-950{max-width:950px !important}.mw-1000{max-width:1000px !important}.mw-1050{max-width:1050px !important}.mw-1100{max-width:1100px !important}.mw-1150{max-width:1150px !important}.mw-1200{max-width:1200px !important}.mw-1250{max-width:1250px !important}.mw-1400{max-width:1400px !important}.mw-auto{max-width:auto !important}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0, -100%, 0);-ms-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);-ms-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%, 0, 0);-ms-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0, 100%, 0);-ms-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}}@keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0, 100%, 0);-ms-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}}@keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);-ms-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}}@keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%, 0, 0);-ms-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}}@keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0, -100%, 0);-ms-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeCycle{0%{opacity:1}50%{opacity:.5}100%{opacity:1}}@keyframes fadeCycle{0%{opacity:1}50%{opacity:.5}100%{opacity:1}}.fadeCycle{-webkit-animation:fadeCycle 2s infinite;-moz-animation:fadeCycle 2s infinite;animation:fadeCycle 2s infinite}.autocomplete.dropdown-menu{background:var(--bs-modal-bg)}.autocomplete.dropdown-menu li a{padding:3px 12px}body .control-balloon-selector ul{padding:0;display:inline-block;font-size:0}body .control-balloon-selector ul li{list-style:none;line-height:36px;display:inline-block;background-color:var(--oc-form-control-bg);color:var(--bs-body-color);font-size:1rem;padding:0 14px;border:1px solid var(--bs-border-color)}body .control-balloon-selector ul li:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}body .control-balloon-selector ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}body .control-balloon-selector ul li.active{background:var(--oc-selection) !important;color:white;border-color:var(--oc-selection);position:relative;z-index:1}body .control-balloon-selector ul li+li{margin-left:-1px}body .control-balloon-selector.control-disabled ul li.active{background-color:#72809d !important;border-color:#72809d !important}body .control-balloon-selector:not(.control-disabled) ul li:hover{background:var(--oc-toolbar-hover-bg);cursor:pointer}body .control-balloon-selector.form-control-sm li{font-size:12px;padding:0 10px;line-height:27px}.form-group .control-balloon-selector ul{margin-bottom:0}:root,[data-bs-theme=\"light\"]{--oc-callout-info-bg:#e6e7fc;--oc-callout-info-icon:#6a6cf7;--oc-callout-warning-bg:#faf6e2;--oc-callout-warning-icon:#e1b810;--oc-callout-danger-bg:#fadad7;--oc-callout-danger-content-bg:#fadad7;--oc-callout-danger-icon:#ff3e1d;--oc-callout-success-bg:#ecf7da;--oc-callout-success-icon:#86cb43}[data-bs-theme=\"dark\"]{--oc-callout-info-bg:#12262c;--oc-callout-warning-bg:#302310;--oc-callout-danger-bg:#330c06;--oc-callout-success-bg:#1b290d}.callout{font-size:14px;margin-bottom:20px}.callout.fade{opacity:0;transition:all .5s,width 0s;transform:scale(.9)}.callout.fade.show{opacity:1;transform:scale(1)}.callout>.close{width:22px;height:22px;margin:15px 15px 0;position:relative;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;opacity:1}.callout>.close:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e93e\";color:var(--bs-body-color);font-size:16px;position:relative}.callout>.close:hover:before{color:var(--bs-danger)}.callout>.action{float:right;padding:10px}.callout>.header+.content{border-top:none}.callout>.header{padding:15px 20px 5px;border-radius:4px 4px 0 0;color:var(--bs-body-color);margin-bottom:-1px}.callout>.header>.custom-icon{width:27.5px;text-align:center;font-size:22px;float:left;position:relative;top:-5px;left:-5px}.callout>.header>i,.callout>.header>.custom-icon{display:none}.callout>.header:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;float:left;font-size:22px;position:relative;left:-3px}.callout>.header h3{letter-spacing:0;font-size:14px;font-weight:600;line-height:150%;margin:0}.callout>.header h3,.callout>.header p,.callout>.header ul,.callout>.header ol{margin-left:32px;margin-bottom:7px}.callout>.header ul,.callout>.header ol{padding-left:20px}.callout>.header:last-child{border-radius:4px;margin-bottom:0}.callout>.content{color:var(--bs-body-color);padding:0 20px 15px 52px;border-radius:0 0 4px 4px}.callout>.content h1,.callout>.content h2,.callout>.content h3,.callout>.content h4,.callout>.content h5,.callout>.content h6{color:var(--bs-body-color);text-transform:none;margin:20px 0 5px 0;line-height:150%;font-weight:600}.callout>.content h1{font-size:30px}.callout>.content h2{font-size:26px}.callout>.content h3{font-size:24px}.callout>.content h4{font-size:20px}.callout>.content h5{font-size:18px}.callout>.content h6{font-size:16px}.callout>.content *:last-child{margin-bottom:0}.callout>.content ul,.callout>.content ol{padding-left:20px}.callout>.content ul li,.callout>.content ol li{margin-bottom:5px}.callout>.content .action-panel{padding:10px 0 0 0}.callout.has-custom-icon>.header>.custom-icon{display:block}.callout.has-custom-icon>.header:before{display:none}.callout.no-title>.content{padding-top:15px;border-radius:4px}.callout.no-subheader>.header{padding-bottom:10px}.callout.no-subheader>.header+.content{margin-top:-5px}.callout.no-icon>.header h3,.callout.no-icon>.header p,.callout.no-icon>.header ul,.callout.no-icon>.header ol{margin-left:0}.callout.no-icon>.header:before{display:none}.callout.no-icon>.content{padding-left:20px}.callout.callout-danger>.header{background:var(--oc-callout-danger-bg)}.callout.callout-danger>.header>.custom-icon{color:var(--oc-callout-danger-icon)}.callout.callout-danger>.header:before{content:\"\\e93d\";color:var(--oc-callout-danger-icon)}.callout.callout-danger>.content{background:var(--oc-callout-danger-bg)}.callout.callout-info>.header{background:var(--oc-callout-info-bg)}.callout.callout-info>.header>.custom-icon{color:var(--oc-callout-info-icon)}.callout.callout-info>.header:before{content:\"\\e93f\";color:var(--oc-callout-info-icon)}.callout.callout-info>.content{background:var(--oc-callout-info-bg)}.callout.callout-success>.header{background:var(--oc-callout-success-bg)}.callout.callout-success>.header>.custom-icon{color:var(--oc-callout-success-icon)}.callout.callout-success>.header:before{content:\"\\e93c\";color:var(--oc-callout-success-icon)}.callout.callout-success>.content{background:var(--oc-callout-success-bg)}.callout.callout-warning>.header{background:var(--oc-callout-warning-bg)}.callout.callout-warning>.header>.custom-icon{color:var(--oc-callout-warning-icon)}.callout.callout-warning>.header:before{content:\"\\e93d\";color:var(--oc-callout-warning-icon)}.callout.callout-warning>.content{background:var(--oc-callout-warning-bg)}.callout.is-flush{margin-bottom:0}.callout.is-flush>.content{border-bottom-left-radius:0;border-bottom-right-radius:0}.form-group>.callout{margin-bottom:0}.control-chart{text-align:left}.control-chart div.canvas{display:inline-block;margin-right:20px;margin-bottom:20px;position:relative}.control-chart div.canvas span.center{position:absolute;display:block;text-align:center;width:100%;top:50%;margin-top:-21px;font-size:30px;font-weight:100;color:var(--bs-heading-color);z-index:9}.control-chart div.canvas svg{z-index:10}.control-chart.full-width div.canvas{margin-right:0 !important}.control-chart ul{display:inline-block;height:inherit;margin:0;padding:0;list-style:none;position:relative;vertical-align:top}.control-chart ul li{width:120px;white-space:normal;display:block;text-transform:uppercase;color:var(--bs-heading-color);font-weight:300;font-size:12px;margin-bottom:10px}.control-chart ul li span{float:right;font-weight:600}.control-chart ul li:last-child{margin-bottom:0}.control-chart div.chart-legend{display:inline-block;vertical-align:top;text-align:left}.control-chart div.chart-legend table{font-size:12px;color:var(--bs-body-color)}.control-chart div.chart-legend table tr td{padding:0 0 7px 0;vertical-align:top}.control-chart div.chart-legend table tr td.value{padding-left:10px;font-weight:600;color:var(--bs-secondary-color)}.control-chart div.chart-legend table tr td i{display:inline-block;width:13px;height:13px;border-radius:4px;text-indent:-100000em;margin-right:5px;position:relative;top:2px}.control-chart div.chart-legend table tr td.indicator{width:20px}.control-chart div.chart-legend table tr:last-child td{padding-bottom:0}.control-chart .canvas{margin-right:20px;display:inline-block}.control-chart.centered{text-align:center}.control-chart.centered .canvas{margin-right:0;display:block;margin-left:auto;margin-right:auto}.control-chart.wrap-legend div.chart-legend table tr{display:inline-block;white-space:nowrap;margin-right:20px}.control-chart.wrap-legend div.chart-legend table tr:last-child td{padding-bottom:7px}.report-container .wrapped .control-chart{text-align:left}.report-container .wrapped .control-chart .canvas{margin-right:20px;display:inline-block}.tickLabel,.flot-tick-label{color:#545454}[data-bs-theme=\"dark\"] .tickLabel,[data-bs-theme=\"dark\"] .flot-tick-label{color:#e0e0e0}.title-value span.goal-meter-indicator{float:left;height:24px;width:10px;margin-right:5px;position:relative;top:9px;background:var(--oc-color-negative)}.title-value span.goal-meter-indicator>span{text-indent:-10000em;display:block;position:absolute;width:10px;left:0;bottom:0;background:var(--oc-color-positive);height:0;-webkit-transition:all .2s;transition:all .2s}.title-value.goal-meter-inverse span.goal-meter-indicator{background:var(--oc-color-positive)}.title-value.goal-meter-inverse span.goal-meter-indicator>span{background:var(--oc-color-negative)}.report-container .title-value{margin-top:-18px}.report-container .title-value p{font-weight:100;font-size:40px}.report-container .title-value p.description{font-size:12px;margin-top:9px}.report-container .title-value p:before{font-size:30px;margin-right:10px}.report-container .title-value p.negative:after,.report-container .title-value p.positive:after{top:-8px}.report-container .title-value span.goal-meter-indicator{height:31px;top:4px;width:15px;margin-right:10px}.report-container .title-value span.goal-meter-indicator span{width:15px}.control-status-list>ul{margin-bottom:0;padding:0}.control-status-list>ul li{margin:0;padding:7px 15px 6px;list-style:none;display:block;font-size:13px;color:#7e8c8d;border-bottom:1px solid var(--bs-border-color)}.control-status-list>ul li:last-child{border-bottom:none}.control-status-list>ul li a:not(.btn){color:#7e8c8d;text-decoration:none}.control-status-list>ul li a:not(.btn):hover{color:var(--bs-link-color);text-decoration:none}.control-status-list>ul li a.btn:hover{color:white}.control-status-list>ul li .status-text{margin:0 5px}.control-status-list>ul li .status-text.muted{color:var(--bs-secondary-color)}.control-status-list>ul li .status-text.primary{color:var(--bs-primary)}.control-status-list>ul li .status-text.success{color:#3c763d}.control-status-list>ul li .status-text.info{color:#31708f}.control-status-list>ul li .status-text.warning{color:#8a6d3b}.control-status-list>ul li .status-text.danger{color:#a94442}.control-status-list>ul li .status-label{display:block;float:right;padding:1px 10px}.control-status-list>ul li .status-label.btn{border-radius:20px}.control-status-list>ul li .status-icon{display:inline-block;text-align:center;color:white;width:22px;height:22px;position:relative;top:-1px;-webkit-border-radius:100px;-moz-border-radius:100px;border-radius:100px}.control-status-list>ul li .status-icon>i{font-size:12px;line-height:22px}.control-status-list>ul li .status-icon{background:#999}.control-status-list>ul li .status-icon.success{background:var(--bs-success)}.control-status-list>ul li .status-icon.primary{background:var(--bs-primary)}.control-status-list>ul li .status-icon.warning{background:var(--bs-warning)}.control-status-list>ul li .status-icon.danger{background:var(--bs-danger)}.control-status-list>ul li .status-icon.info{background:var(--bs-info)}.control-status-list>ul li .status-icon.link{background:transparent}.report-container .control-status-list>ul{margin:-15px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul,.control-dropdown.dropdown-menu{padding:0;list-style:none;background-color:var(--bs-modal-bg);position:relative;border:var(--oc-popup-border);box-shadow:-2px 2px 5px rgba(67, 86, 100, 0.12);border-radius:4px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul.is-fixed,.control-dropdown.dropdown-menu.is-fixed{position:fixed !important}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul.offset-left,.control-dropdown.dropdown-menu.offset-left{left:10px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a,.control-dropdown.dropdown-menu>li a,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button,.control-dropdown.dropdown-menu>li button{outline:none;padding:10px 15px;font-size:14px;display:block;color:var(--bs-body-color);position:relative;white-space:nowrap;text-decoration:none}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:hover,.control-dropdown.dropdown-menu>li a:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:hover,.control-dropdown.dropdown-menu>li button:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active,.control-dropdown.dropdown-menu>li a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active,.control-dropdown.dropdown-menu>li button:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active,.control-dropdown.dropdown-menu>li a:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active,.control-dropdown.dropdown-menu>li button:focus:active{color:var(--oc-dropdown-hover-color);background-color:var(--oc-dropdown-hover-bg) !important}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:hover i,.control-dropdown.dropdown-menu>li a:hover i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:hover i,.control-dropdown.dropdown-menu>li button:hover i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active i,.control-dropdown.dropdown-menu>li a:active i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active i,.control-dropdown.dropdown-menu>li button:active i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active i,.control-dropdown.dropdown-menu>li a:focus:active i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active i,.control-dropdown.dropdown-menu>li button:focus:active i{color:var(--oc-dropdown-hover-color)}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:hover[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a:hover[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:hover[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button:hover[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a:active[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button:active[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a:focus:active[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button:focus:active[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:hover[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a:hover[class*=\" oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:hover[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button:hover[class*=\" oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a:active[class*=\" oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button:active[class*=\" oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a:focus:active[class*=\" oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button:focus:active[class*=\" oc-icon-\"]:before{color:var(--oc-dropdown-hover-color)}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active,.control-dropdown.dropdown-menu>li a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active,.control-dropdown.dropdown-menu>li button:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active,.control-dropdown.dropdown-menu>li a:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active,.control-dropdown.dropdown-menu>li button:focus:active{background-color:var(--oc-dropdown-active-bg) !important}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[class^=\"oc-icon-\"],.control-dropdown.dropdown-menu>li a[class^=\"oc-icon-\"],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[class^=\"oc-icon-\"],.control-dropdown.dropdown-menu>li button[class^=\"oc-icon-\"],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[class*=\" oc-icon-\"],.control-dropdown.dropdown-menu>li a[class*=\" oc-icon-\"],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[class*=\" oc-icon-\"],.control-dropdown.dropdown-menu>li button[class*=\" oc-icon-\"]{padding-left:30px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a[class*=\" oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button[class*=\" oc-icon-\"]:before{position:absolute;font-size:14px;left:9px;top:14px;color:rgba(var(--bs-body-color-rgb), .6)}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a>i,.control-dropdown.dropdown-menu>li a>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button>i,.control-dropdown.dropdown-menu>li button>i{color:rgba(var(--bs-body-color-rgb), .6);font-size:14px;margin-right:4px;margin-left:-2px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) a:hover,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) button:hover,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) a:focus,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:focus,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) button:focus,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:focus,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) a:active,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) button:active,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:active{border-top-left-radius:4px;border-top-right-radius:4px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) a:hover,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) button:hover,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) a:focus,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:focus,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) button:focus,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:focus,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) a:active,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) button:active,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:active{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.dropdown-title,.control-dropdown.dropdown-menu>li.dropdown-title{display:none}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.dropdown-divider,.control-dropdown.dropdown-menu>li.dropdown-divider{margin:0}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.active>a,.control-dropdown.dropdown-menu>li.active>a{font-weight:bold}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a,.control-dropdown.dropdown-menu>li.disabled a,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button,.control-dropdown.dropdown-menu>li.disabled button,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled],.control-dropdown.dropdown-menu>li a[disabled],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled],.control-dropdown.dropdown-menu>li button[disabled],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:hover,.control-dropdown.dropdown-menu>li.disabled a:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:hover,.control-dropdown.dropdown-menu>li.disabled button:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:hover,.control-dropdown.dropdown-menu>li a[disabled]:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:hover,.control-dropdown.dropdown-menu>li button[disabled]:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:active,.control-dropdown.dropdown-menu>li.disabled a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:active,.control-dropdown.dropdown-menu>li.disabled button:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:active,.control-dropdown.dropdown-menu>li a[disabled]:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:active,.control-dropdown.dropdown-menu>li button[disabled]:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:focus:active,.control-dropdown.dropdown-menu>li.disabled a:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:focus:active,.control-dropdown.dropdown-menu>li.disabled button:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:focus:active,.control-dropdown.dropdown-menu>li a[disabled]:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:focus:active,.control-dropdown.dropdown-menu>li button[disabled]:focus:active{cursor:not-allowed;background-color:var(--bs-modal-bg) !important;color:#98A0A0}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a>i,.control-dropdown.dropdown-menu>li.disabled a>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button>i,.control-dropdown.dropdown-menu>li.disabled button>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]>i,.control-dropdown.dropdown-menu>li a[disabled]>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]>i,.control-dropdown.dropdown-menu>li button[disabled]>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:hover>i,.control-dropdown.dropdown-menu>li.disabled a:hover>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:hover>i,.control-dropdown.dropdown-menu>li.disabled button:hover>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:hover>i,.control-dropdown.dropdown-menu>li a[disabled]:hover>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:hover>i,.control-dropdown.dropdown-menu>li button[disabled]:hover>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:active>i,.control-dropdown.dropdown-menu>li.disabled a:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:active>i,.control-dropdown.dropdown-menu>li.disabled button:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:active>i,.control-dropdown.dropdown-menu>li a[disabled]:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:active>i,.control-dropdown.dropdown-menu>li button[disabled]:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:focus:active>i,.control-dropdown.dropdown-menu>li.disabled a:focus:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:focus:active>i,.control-dropdown.dropdown-menu>li.disabled button:focus:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:focus:active>i,.control-dropdown.dropdown-menu>li a[disabled]:focus:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:focus:active>i,.control-dropdown.dropdown-menu>li button[disabled]:focus:active>i{color:rgba(var(--bs-body-color-rgb), .6)}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li.disabled a[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button[class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li.disabled button[class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled][class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a[disabled][class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled][class^=\"oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button[disabled][class^=\"oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li.disabled a[class*=\" oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button[class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li.disabled button[class*=\" oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled][class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li a[disabled][class*=\" oc-icon-\"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled][class*=\" oc-icon-\"]:before,.control-dropdown.dropdown-menu>li button[disabled][class*=\" oc-icon-\"]:before{color:rgba(var(--bs-body-color-rgb), .6)}@media (hover:hover){.control-dropdown.dropdown-menu>li a:focus,.control-dropdown.dropdown-menu>li button:focus{background:var(--oc-toolbar-hover-bg)}}.touch .control-dropdown.dropdown-menu>li a:hover{color:var(--bs-body-color);background:white}body.dropdown-open .dropdown-overlay{position:fixed;left:0;top:0;right:0;bottom:0;z-index:599}@media (max-width:768px){body.dropdown-open{overflow:hidden}body.dropdown-open .dropdown-overlay{background:rgba(0,0,0,0.4)}body.dropdown-open .control-dropdown.dropdown-menu{overflow:auto;overflow-y:scroll;position:fixed !important;margin:15px !important;top:auto !important;right:0 !important;bottom:0 !important;left:0 !important;transform:none !important;z-index:600;border-radius:8px}body.dropdown-open .control-dropdown.dropdown-menu>li a,body.dropdown-open .control-dropdown.dropdown-menu>li button{font-size:16px;padding-top:12px;padding-bottom:12px}body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:hover,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:hover,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:focus,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:focus,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:active,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:active{border-top-left-radius:8px;border-top-right-radius:8px}body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:hover,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:hover,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:focus,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:focus,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:active,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:active{border-bottom-left-radius:8px;border-bottom-right-radius:8px}}.flash-message.static{color:#ffffff;font-size:14px;padding:10px 30px 10px 15px;word-wrap:break-word;text-align:left;border-radius:4px}.flash-message.static.success{background:var(--bs-success)}.flash-message.static.error{background:#cc3300}.flash-message.static.warning{background:#f0ad4e}.flash-message.static.info{background:#5fb6f5}.flash-message.static button{float:none;position:absolute;right:10px;top:12px;color:white;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;opacity:1;outline:none}.flash-message.static button:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e93e\";color:white;font-size:16px;position:relative}.flash-message.static button:hover{opacity:1}.inspector-fields{min-width:220px;border-collapse:collapse;width:100%;table-layout:fixed;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.inspector-fields td,.inspector-fields th{padding:5px 12px;font-size:12px;border-bottom:1px solid var(--oc-primary-border);text-align:left}.inspector-fields th{color:var(--oc-primary-color);width:45%}.inspector-fields td{color:var(--bs-body-color);width:55%}.inspector-fields tr:last-child td,.inspector-fields tr:last-child th{border-bottom:none}.inspector-fields tr:last-child td,.inspector-fields tr:last-child td input[type=text]{border-radius:0 0 2px 0}.inspector-fields tr.group{user-select:none}.inspector-fields tr.group th{font-weight:600;cursor:pointer}.inspector-fields tr.invalid th{color:#c03f31 !important}.inspector-fields tr.control-group{user-select:none}.inspector-fields tr.control-group th,.inspector-fields tr.control-group td{cursor:pointer}.inspector-fields tr.collapsed{display:none}.inspector-fields tr.expanded{display:table-row}.inspector-fields.has-groups th{padding-left:20px}.inspector-fields.has-groups tr.grouped th{padding-left:35px}.inspector-fields:not(:hover) td{border-left-color:transparent}.inspector-fields th{background:var(--oc-form-control-bg)}.inspector-fields td{font-weight:400;border-left:1px solid var(--oc-primary-border);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;background:var(--oc-form-control-bg);transition:border-left-color .35s}.inspector-fields td.text input[type=text]{background:var(--oc-form-control-bg);color:var(--bs-body-color);text-overflow:ellipsis}.inspector-fields td.text input[type=text]::placeholder{font-weight:normal!important;color:#b5babd}.inspector-fields td.text.active{background:var(--oc-form-control-bg)}.inspector-fields td.autocomplete{padding:0;position:relative;overflow:visible}.inspector-fields td.autocomplete .autocomplete-container input[type=text]{padding:5px 12px}.inspector-fields td.autocomplete .autocomplete-container ul.dropdown-menu{background:var(--bs-modal-bg);font-size:12px;z-index:10000}.inspector-fields td.autocomplete .autocomplete-container ul.dropdown-menu li a{padding:5px 12px;white-space:normal;word-wrap:break-word}.inspector-fields td.autocomplete .autocomplete-container .loading-indicator span{margin-top:-12px;right:10px;left:auto}.inspector-fields td.trigger-cell{padding:0!important}.inspector-fields td.trigger-cell a.trigger{display:block;padding:5px 12px 7px 12px;overflow:hidden;min-height:29px;text-overflow:ellipsis;color:var(--oc-primary-color);text-decoration:none}.inspector-fields td.trigger-cell a.trigger.cell-placeholder{color:#b5babd}.inspector-fields td.trigger-cell a.trigger .loading-indicator{background-color:var(--oc-form-control-bg)}.inspector-fields td.trigger-cell a.trigger .loading-indicator span{margin-top:-12px;right:10px;left:auto}.inspector-fields td.dropdown{padding:0!important}.inspector-fields td select{width:90%}.inspector-fields td div.external-param-editor-container{position:relative;padding-right:25px}.inspector-fields td div.external-param-editor-container div.external-editor{bottom:0;margin:-5px -12px;right:30px;left:auto;top:0;position:absolute;transition:left .2s;transform:translateZ(0);will-change:transform}.inspector-fields td div.external-param-editor-container div.external-editor div.controls{position:absolute;width:100%;height:100%;left:0;top:0}.inspector-fields td div.external-param-editor-container div.external-editor div.controls a{position:absolute;left:0;top:0;display:inline-block;height:100%;width:30px;color:var(--oc-primary-color);outline:none}.inspector-fields td div.external-param-editor-container div.external-editor div.controls a i{display:inline-block;position:relative;left:7px;top:5px;font-size:1rem}.inspector-fields td div.external-param-editor-container div.external-editor div.controls input{position:absolute;display:block;border:none;width:100%;height:100%;left:0;top:0;padding-left:30px;padding-right:12px;background:transparent;color:var(--bs-body-color)}.inspector-fields td div.external-param-editor-container.editor-visible div.external-editor div.controls input{background:var(--oc-form-control-bg)}.inspector-fields td.active div.external-param-editor-container div.external-editor div.controls input{background:var(--bs-secondary-bg)}.inspector-fields td.dropdown div.external-param-editor-container div.external-editor,.inspector-fields td.trigger-cell div.external-param-editor-container div.external-editor{height:100%;margin:0;bottom:auto}.inspector-fields th{font-weight:600}.inspector-fields th>div{position:relative}.inspector-fields th>div>div{white-space:nowrap;padding-right:10px;text-overflow:ellipsis;overflow:hidden;width:100%}.inspector-fields th>div>div span.info{display:inline-block;position:absolute;right:3px;top:3px;font-size:14px;width:10px;height:12px;line-height:80%;color:#999}.inspector-fields th>div>div span.info:before{margin-left:3px}.inspector-fields th>div>div span.info:hover{color:var(--bs-emphasis-color)}.inspector-fields th>div a.expandControl{display:block;position:absolute;width:12px;height:12px;left:-15px;top:2px;text-indent:-100000em}.inspector-fields th>div a.expandControl span{position:absolute;display:inline-block;left:0;top:0;width:12px;height:12px}.inspector-fields th>div a.expandControl span:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f105\";position:absolute;left:4px;top:-2px;width:12px;height:12px;font-size:13px;color:var(--oc-primary-color);text-indent:0}.inspector-fields th>div a.expandControl.expanded span:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f107\";left:2px}.inspector-fields input[type=text]{display:block;width:100%;border:none;outline:none}.inspector-fields div.form-check{position:relative;top:1px;font-size:1rem}.inspector-fields .select2-container{width:100% !important}.inspector-fields .select2-container .select2-selection{height:29px;line-height:29px;padding:0 3px 0 12px;border:none !important;font-size:12px;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;-webkit-box-shadow:none !important;box-shadow:none !important}.inspector-fields .select2-container .select2-selection.select2-default{font-weight:normal !important}.inspector-fields .select2-container .loading-indicator>span{top:15px}.inspector-fields .select2-container.select2-container--open{-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;border:none !important}.inspector-fields .select2-container .select2-selection__rendered{padding:0 22px 0 0;color:var(--bs-body-color)}.inspector-fields tr.changed td{font-weight:600}.inspector-fields tr.changed td input[type=text]{font-weight:600}.inspector-fields tr.changed td .select2-container .select2-selection{font-weight:600}div.control-popover.control-inspector>div{background:var(--oc-form-control-bg);border:none}div.control-popover.control-inspector>div:before,div.control-popover.control-inspector>div:after{display:none}div.control-popover.control-inspector>div>form{padding:5px 20px 10px}div.control-popover.control-inspector .popover-head{padding-left:20px;padding-right:20px}div.control-popover.control-inspector .inspector-fields th{padding-left:0}div.control-popover.hero>div{border-radius:8px}div.control-popover.hero .popover-head{border-top-right-radius:8px;border-top-left-radius:8px}div.control-popover.hero .popover-head h3{font-weight:normal;font-size:18px}div.control-popover.hero .popover-head .btn-close{top:16px;right:17px}div.control-popover.hero .inspector-fields th,div.control-popover.hero .inspector-fields td{padding:9px 12px;font-weight:600!important;font-size:13px}div.control-popover.hero .inspector-fields th{padding-left:0}div.control-popover.hero .inspector-fields td{font-weight:400!important}div.control-popover.hero .inspector-fields div.custom-select.select2-container .select2-selection{height:36px;line-height:36px}div.control-popover.inspector-temporary-placement{visibility:hidden;left:0!important;top:0!important}.inspector-columns-editor{min-height:400px;margin-bottom:20px;border-bottom:1px solid var(--oc-primary-border)}.inspector-columns-editor .items-column{width:250px}.inspector-columns-editor .inspector-wrapper{background:var(--oc-form-control-bg);border-left:2px solid var(--oc-primary-border)}.inspector-columns-editor .toolbar{padding:20px}.inspector-table-list{border-top:1px solid var(--bs-border-color);user-select:none}div.inspector-dictionary-container{border:1px solid var(--bs-border-color)}div.inspector-dictionary-container .values{height:300px}div.inspector-dictionary-container table.headers{width:100%;border:none}div.inspector-dictionary-container table.headers td{width:50%;padding:7px 5px;font-size:13px;text-transform:uppercase;font-weight:600;color:var(--oc-primary-color);background:var(--oc-primary-bg);border-bottom:1px solid var(--bs-border-color)}div.inspector-dictionary-container table.headers td:first-child{border-right:1px solid var(--bs-border-color)}div.inspector-dictionary-container table.inspector-dictionary-table{width:100%;border:none}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td{width:50%;padding:0!important;border-bottom:1px solid var(--bs-border-color)}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td div{border:1px solid transparent}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td.active div{border-color:var(--oc-accent)}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td input{width:100%;height:100%;display:block;outline:none;border:none;padding:7px 5px;box-shadow:none}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td input:focus{border:none;outline:none}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td:first-child{border-right:1px solid var(--bs-border-color)}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr:last-child td{border-bottom:none}.inspector-header{background:var(--oc-popup-bg);padding:14px 16px;position:relative;color:var(--oc-primary-color);border-bottom:1px solid rgba(0,0,0,0.15)}.inspector-header h3{font-size:15px;font-weight:600;margin-top:0;margin-bottom:0;padding-right:15px;line-height:130%}.inspector-header p{font-size:12px;font-weight:normal;margin:5px 0 0 0}.inspector-header p:empty{display:none}.inspector-header span,.inspector-header a{text-decoration:none;position:absolute;top:12px;float:none;color:var(--bs-emphasis-color);cursor:pointer;line-height:1;opacity:.4}.inspector-header span:hover,.inspector-header a:hover{opacity:1;color:var(--bs-emphasis-color)}.inspector-header .detach{right:26px;line-height:22px}.inspector-header .close{right:11px;font-size:21px}.inspector-container:empty{display:none}.inspector-container .control-scrollpad{position:absolute}.inspector-field-comment:empty{display:none}ul.autocomplete.dropdown-menu.inspector-autocomplete{background:var(--bs-modal-bg);font-size:12px;z-index:10000}ul.autocomplete.dropdown-menu.inspector-autocomplete li a{padding:5px 12px;white-space:normal;word-wrap:break-word}.select2-dropdown.ocInspectorDropdown{font-size:12px;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;border:none !important}.select2-dropdown.ocInspectorDropdown>.select2-results>.select2-results__options{font-size:12px}.select2-dropdown.ocInspectorDropdown>.select2-results>li>div{padding:5px 12px 5px}.select2-dropdown.ocInspectorDropdown>.select2-results li.select2-no-results{padding:5px 12px 5px}.select2-dropdown.ocInspectorDropdown>.select2-results li>i,.select2-dropdown.ocInspectorDropdown>.select2-results li>img{margin-left:6px}.select2-dropdown.ocInspectorDropdown .select2-search{min-height:26px;position:relative;border-bottom:1px solid var(--bs-border-color)}.select2-dropdown.ocInspectorDropdown .select2-search:after{position:absolute;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f002\";right:10px;top:10px;color:#95a5a6}.select2-dropdown.ocInspectorDropdown .select2-search input.select2-search__field{min-height:26px;background:transparent !important;font-size:13px;padding-left:4px;padding-right:20px;border:none}div.control-popover{position:absolute;background-clip:content-box;left:0;top:0;z-index:600;visibility:hidden}div.control-popover.fade,div.control-popover.show{visibility:visible}div.control-popover.fade>div{opacity:0;transition:all .3s,width 0s;transform:scale(.7)}div.control-popover.fade.show>div{opacity:1;transform:scale(1)}div.control-popover>div{position:relative;background:var(--oc-popup-bg);box-shadow:0 1px 6px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.24);border-radius:6px}div.control-popover>div:after,div.control-popover>div:before{position:absolute}div.control-popover>div:after{z-index:601}div.control-popover>div:before{z-index:600}div.control-popover.placement-bottom>div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid var(--oc-popup-bg);left:15px;top:-8px}div.control-popover.placement-bottom>div:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-bottom:9px solid rgba(0,0,0,0.15);left:14px;top:-9px}div.control-popover.placement-bottom.placement-bottom-right>div:after{left:auto;right:15px}div.control-popover.placement-bottom.placement-bottom-right>div:before{left:auto;right:14px}div.control-popover.placement-top>div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid var(--oc-popup-bg);border-bottom-width:0;left:15px;bottom:-8px}div.control-popover.placement-top>div:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid rgba(0,0,0,0.15);border-bottom-width:0;left:14px;bottom:-9px}div.control-popover.placement-left>div:after{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-left:8px solid var(--oc-popup-bg);right:-8px;top:7px}div.control-popover.placement-left>div:before{content:'';display:block;width:0;height:0;border-top:8.5px solid transparent;border-bottom:8.5px solid transparent;border-left:9px solid rgba(0,0,0,0.15);right:-9px;top:6px}div.control-popover.placement-right>div:after{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-right:8px solid var(--oc-popup-bg);left:-8px;top:7px}div.control-popover.placement-right>div:before{content:'';display:block;width:0;height:0;border-top:8.5px solid transparent;border-bottom:8.5px solid transparent;border-right:9px solid rgba(0,0,0,0.15);left:-9px;top:6px}div.control-popover div.popover-body{padding:15px}div.control-popover div.popover-body.form-container{padding-bottom:0}div.control-popover div.popover-footer{padding:0 20px 20px 20px}div.control-popover .popover-head{background:var(--oc-popup-bg);padding:14px 16px;position:relative;color:var(--oc-primary-color);border-top-right-radius:6px;border-top-left-radius:6px;border-bottom:1px solid rgba(0,0,0,0.15)}div.control-popover .popover-head:before{z-index:602;position:absolute}div.control-popover .popover-head h3{font-size:14px;font-weight:600;margin-top:0;margin-bottom:0;padding-right:15px;line-height:130%}div.control-popover .popover-head p{font-size:12px;font-weight:normal;margin:5px 0 0 0}div.control-popover .popover-head p:empty{display:none}div.control-popover .popover-head .btn-close,div.control-popover .popover-head .close{float:none;position:absolute;right:11px;top:12px;color:var(--oc-primary-color);outline:none;opacity:.4}div.control-popover .popover-head .btn-close:hover,div.control-popover .popover-head .close:hover{opacity:1}div.control-popover .popover-head .inspector-move-to-container{opacity:.4;position:absolute;top:14px;right:26px;float:none;color:var(--bs-emphasis-color);cursor:pointer;text-decoration:none;line-height:17px}div.control-popover .popover-head .inspector-move-to-container:hover{opacity:1;color:var(--bs-emphasis-color)}div.control-popover .popover-head .inspector-move-to-container:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}div.control-popover.placement-bottom .popover-head:before{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid var(--oc-popup-bg);left:15px;top:-8px}div.control-popover.placement-left .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-left:8px solid var(--oc-popup-bg);right:-8px;top:7px}div.control-popover.placement-right .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-right:8px solid var(--oc-popup-bg);left:-8px;top:7px}div.control-popover.popover-danger>div{color:#fff;background-color:#ab2a1c}div.control-popover.popover-danger>div .popover-head p,div.control-popover.popover-danger>div .popover-head h3{color:#fff}div.control-popover.popover-danger>div .popover-head .btn-close{filter:var(--bs-btn-close-white-filter)}div.control-popover.popover-danger.placement-top>div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid #ab2a1c;border-bottom-width:0}div.control-popover.popover-danger.placement-bottom>div:after,div.control-popover.popover-danger.placement-bottom .popover-head:before{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid #ab2a1c}div.control-popover.popover-danger.placement-left>div:after,div.control-popover.popover-danger.placement-left .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-left:8px solid #ab2a1c}div.control-popover.popover-danger.placement-right>div:after,div.control-popover.popover-danger.placement-right .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-right:8px solid #ab2a1c}div.control-popover.popover-danger .popover-head{color:#fff;background-color:#ab2a1c;border-bottom:2px solid rgba(255,255,255,0.15)}div.control-popover.popover-danger .popover-head .close{color:#fff;text-shadow:none}div.control-popover div.popover-fixed-height{height:300px}.popover-highlight{position:relative;z-index:598 !important}.popover-highlight:hover,.popover-highlight:active,.popover-highlight:focus{z-index:598 !important}div.popover-overlay-container{position:fixed;left:0;top:0;right:0;bottom:0;z-index:597;font-size:14px}div.popover-overlay-container>div.control-popover>div{border-radius:4px}div.popover-overlay{position:fixed;left:0;top:0;right:0;bottom:0;background:rgba(0, 0, 0, var(--bs-backdrop-opacity));z-index:597;display:none}div.popover-overlay.show{display:block}@media (max-width:768px){body.popover-open{overflow:hidden}body.popover-open .control-popover{overflow:auto;overflow-y:scroll;position:fixed;margin:0;padding:10px;width:100% !important;z-index:603;top:auto !important;right:0 !important;bottom:0 !important;left:0 !important}body.popover-open .control-popover>div{padding:0}body.popover-open .control-popover>div:before,body.popover-open .control-popover>div:after{display:none}body.popover-open .control-popover div.popover-fixed-height{height:100%;min-height:100%}body.popover-open .control-popover .popover-head:before{display:none}div.popover-overlay{display:block}}.modal{z-index:600}.modal-backdrop{z-index:490;background-color:rgba(0, 0, 0, var(--bs-backdrop-opacity))}.modal-content{border:var(--oc-popup-border);border-radius:8px;box-shadow:0 0 32px rgba(67, 86, 100, 0.2);background:var(--oc-popup-bg)}.modal-content.popup-shaking{-webkit-animation:popup-shake .82s cubic-bezier(.36, .07, .19, .97) both;animation:popup-shake .82s cubic-bezier(.36, .07, .19, .97) both;-webkit-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.modal-content .modal-header{background:transparent;color:var(--bs-heading-color);border-top-right-radius:4px;border-top-left-radius:4px;padding:15px 20px;border-bottom:var(--oc-popup-border)}.modal-content .modal-header h4{font-weight:normal;font-size:18px}.modal-content .modal-header button.close{width:19px;height:19px;border-radius:20px;position:relative;top:5px;opacity:1;font-size:0;color:transparent}.modal-content .modal-header button.close:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e93e\";color:#35425b;font-size:16px;position:relative;top:-1px}.modal-content .modal-header button.close:hover:after{color:var(--bs-danger)}.modal-content .modal-header button.close:focus{outline:none;background-color:var(--oc-toolbar-hover-bg)}.modal-content .modal-body{padding:20px 20px 0 20px}.modal-content .modal-body>p:last-child{margin-bottom:20px}.modal-content .modal-body.modal-no-header{padding-top:20px}.modal-content .modal-body.modal-no-footer{padding-bottom:20px}.modal-content .modal-footer{background:transparent;border:none;margin-top:0;padding:0 20px 20px 20px;justify-content:flex-start}.modal-content .modal-footer>.pull-right{margin-left:auto}.modal-content .modal-footer>*:first-child{margin-left:0}.modal-content .modal-footer>*:last-child{margin-right:0}.modal-content .modal-footer .btn-link{padding-left:5px;padding-right:5px}.modal-dialog{max-width:598px}.modal-dialog.size-adaptive{max-width:100%;padding-right:50px;padding-left:50px}.modal-dialog.adaptive-height{height:100%;min-height:600px;margin-top:0;margin-bottom:0;padding-top:50px;padding-bottom:50px}.modal-dialog.adaptive-height .modal-content{height:100%}@media (min-width:768px){.modal-dialog.size-tiny{max-width:300px}.modal-dialog.size-small{max-width:400px}}@media (min-width:992px){.modal-dialog.size-large{max-width:750px}.modal-dialog.size-huge{max-width:900px}.modal-dialog.size-giant{max-width:982px}}@media (max-width:768px){.modal-dialog.size-adaptive{max-width:auto;padding:5px 0;margin:0}}.modal-dialog.size-400{max-width:400px}.modal-dialog.size-450{max-width:450px}.modal-dialog.size-500{max-width:500px}.modal-dialog.size-550{max-width:550px}.modal-dialog.size-600{max-width:600px}.modal-dialog.size-650{max-width:650px}.modal-dialog.size-700{max-width:700px}.modal-dialog.size-750{max-width:750px}.modal-dialog.size-800{max-width:800px}.modal-dialog.size-850{max-width:850px}.modal-dialog.size-900{max-width:900px}.modal-dialog.size-950{max-width:950px}.modal-dialog.size-1000{max-width:1000px}.modal-dialog.size-1050{max-width:1050px}.modal-dialog.size-1100{max-width:1100px}.modal-dialog.size-1200{max-width:1200px}.modal-dialog.size-1400{max-width:1400px}.modal-dialog.size-auto{max-width:auto;padding:5px 0;margin:0}.control-popup.fade:not(.show){pointer-events:none}.control-popup.fade .modal-dialog{opacity:0;-webkit-transition:all 0.3s, width 0s;transition:all 0.3s, width 0s;-webkit-transform:scale(0.7);-ms-transform:scale(0.7);transform:scale(0.7)}.control-popup.fade.show .modal-dialog{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.popup-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:490;background-color:rgba(0, 0, 0, var(--bs-backdrop-opacity));opacity:1}.popup-backdrop .popup-loading-indicator{background:var(--oc-popup-bg);display:block;width:100px;height:100px;position:absolute;top:130px;left:50%;margin-left:-50px;transition:all .3s,width 0s;transform:scale(.7);opacity:0}.popup-backdrop .popup-loading-indicator:after{--loader-size:50px;content:'';position:absolute;top:50%;left:50%;width:var(--loader-size);height:var(--loader-size);margin-top:calc(var(--loader-size) / -2);margin-left:calc(var(--loader-size) / -2);border:4px solid var(--oc-primary-border);border-top-color:var(--oc-accent);border-radius:50%;animation:spin .8s linear infinite}.popup-backdrop.loading .popup-loading-indicator{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}@-moz-keyframes popup-shake{10%,90%{-moz-transform:translate3d(-1px, 0, 0)}20%,80%{-moz-transform:translate3d(2px, 0, 0)}30%,50%,70%{-moz-transform:translate3d(-4px, 0, 0)}40%,60%{-moz-transform:translate3d(4px, 0, 0)}}@-webkit-keyframes popup-shake{10%,90%{-webkit-transform:translate3d(-1px, 0, 0)}20%,80%{-webkit-transform:translate3d(2px, 0, 0)}30%,50%,70%{-webkit-transform:translate3d(-4px, 0, 0)}40%,60%{-webkit-transform:translate3d(4px, 0, 0)}}@keyframes popup-shake{10%,90%{transform:translate3d(-1px, 0, 0)}20%,80%{transform:translate3d(2px, 0, 0)}30%,50%,70%{transform:translate3d(-4px, 0, 0)}40%,60%{transform:translate3d(4px, 0, 0)}}.control-toolbar{font-size:0;padding:0 0 10px 0;position:relative;display:table;table-layout:fixed;width:100%}.control-toolbar .toolbar-divider{margin-right:1px;display:inline-block;height:1em;padding:10px 0;border-right:1px solid var(--oc-toolbar-border);border-left:1px solid var(--bs-border-color);width:1px;vertical-align:middle;margin-right:8px}.control-toolbar .toolbar-item{position:relative;white-space:nowrap;display:table-cell;vertical-align:top;padding-right:10px}.control-toolbar .toolbar-item:last-child,.control-toolbar .toolbar-item.last{padding-right:0}.control-toolbar .toolbar-item.toolbar-primary{position:relative}.control-toolbar .toolbar-item.toolbar-primary:after,.control-toolbar .toolbar-item.toolbar-primary:before{content:'';position:absolute;top:0;bottom:0;width:10px;z-index:2;opacity:0;transition:opacity .1s ease-out}.control-toolbar .toolbar-item.toolbar-primary:before{background:transparent linear-gradient(90deg, #000 0%, rgba(0,0,0,0) 100%);left:10px}.control-toolbar .toolbar-item.toolbar-primary:after{background:transparent linear-gradient(270deg, #000 0%, rgba(0,0,0,0) 100%);right:-10px}.control-toolbar .toolbar-item.toolbar-primary.scroll-before:before{opacity:.15}.control-toolbar .toolbar-item.toolbar-primary.scroll-after:after{opacity:.15}.control-toolbar .toolbar-item.toolbar-primary:before{left:-3px}.control-toolbar .toolbar-item.toolbar-primary:after{right:13px}.control-toolbar .toolbar-item.toolbar-setup{width:28px;vertical-align:middle}.control-toolbar .toolbar-item.toolbar-setup a{padding:8px 15px}.control-toolbar .toolbar-item.toolbar-setup a>span{display:block;color:var(--oc-toolbar-color);width:24px;height:24px;text-align:center;border-radius:3px}.control-toolbar .toolbar-item.toolbar-setup a>span:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e90c\";font-size:14px;line-height:24px;display:inline-block;vertical-align:middle}.control-toolbar .toolbar-item.toolbar-setup a:hover>span{color:var(--oc-toolbar-hover-color);background:var(--oc-toolbar-hover-bg)}.control-toolbar .btn,.control-toolbar .btn-group,.control-toolbar .dropdown,.control-toolbar .btn-container{white-space:nowrap;float:none;display:inline-block;margin-right:10px}.control-toolbar .btn:last-child,.control-toolbar .btn-group:last-child,.control-toolbar .dropdown:last-child,.control-toolbar .btn-container:last-child{margin-right:0}.control-toolbar .btn.standalone,.control-toolbar .btn-group.standalone,.control-toolbar .dropdown.standalone,.control-toolbar .btn-container.standalone{margin-right:15px}.control-toolbar .dropdown>.btn{margin-right:0}.control-toolbar .btn-group>.btn,.control-toolbar .btn-group>.dropdown{margin-right:0;display:inline-block;float:none}.control-toolbar .btn-group .dropdown>.btn{margin-right:0;border-bottom-right-radius:0;border-top-right-radius:0}.control-toolbar .btn-group .dropdown.last>.btn{border-bottom-right-radius:4px !important;border-top-right-radius:4px !important}.control-toolbar input.form-control[type=text]{height:auto;padding:7px 13px 6px}.control-toolbar.toolbar-padded{padding:20px}.control-toolbar.flex{display:flex;flex-direction:row}.control-toolbar.flex .toolbar-item{display:block;flex:1 1 auto}.control-toolbar.flex .toolbar-item.fix-width{flex:0 0 auto}.relation-toolbar .control-toolbar .btn,.control-toolbar.toolbar-form .btn{line-height:inherit;display:inline-block;color:inherit;padding:0 6px;min-width:40px;text-align:center;text-decoration:none !important;border-radius:4px;outline:none;box-shadow:none;-webkit-appearance:none;border:none;background:transparent;color:var(--oc-toolbar-color);font-size:14px;margin-right:8px;line-height:30px}.relation-toolbar .control-toolbar .btn.control-button,.control-toolbar.toolbar-form .btn.control-button{color:var(--oc-toolbar-color);font-size:14px;margin-right:8px;line-height:30px}.relation-toolbar .control-toolbar .btn.icon-only,.control-toolbar.toolbar-form .btn.icon-only{min-width:30px}.relation-toolbar .control-toolbar .btn[disabled],.control-toolbar.toolbar-form .btn[disabled]{cursor:default}.relation-toolbar .control-toolbar .btn[disabled]>i,.control-toolbar.toolbar-form .btn[disabled]>i,.relation-toolbar .control-toolbar .btn[disabled]>span,.control-toolbar.toolbar-form .btn[disabled]>span,.relation-toolbar .control-toolbar .btn[disabled]:after,.control-toolbar.toolbar-form .btn[disabled]:after{opacity:.5}.relation-toolbar .control-toolbar .btn i,.control-toolbar.toolbar-form .btn i{display:inline-block;position:relative;font-size:16px;top:1px}.relation-toolbar .control-toolbar .btn i+span.button-label,.control-toolbar.toolbar-form .btn i+span.button-label{margin-left:6px}.relation-toolbar .control-toolbar .btn:not([disabled]):hover,.control-toolbar.toolbar-form .btn:not([disabled]):hover{background:var(--oc-toolbar-hover-bg)}.relation-toolbar .control-toolbar .btn:not([disabled]):focus,.control-toolbar.toolbar-form .btn:not([disabled]):focus{background:var(--oc-toolbar-hover-bg)}.relation-toolbar .control-toolbar .btn.has-menu:after,.control-toolbar.toolbar-form .btn.has-menu:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e90a\";font-size:16px;vertical-align:middle;margin-left:0;margin-right:-3px;position:relative;top:-1px}[data-control~=toolbar]{white-space:nowrap;width:100%;overflow:hidden;padding:.3rem;margin:-0.3rem}@media (pointer:coarse){[data-control~=toolbar].is-native-drag{overflow:auto}}.clear-input-text{padding:0 5px;cursor:pointer;border:none;border-radius:100px;-webkit-appearance:none;font-size:21px;font-weight:bold;line-height:1;color:var(--bs-emphasis-color);text-shadow:0 1px 0 var(--bs-body-bg);font-family:sans-serif;display:inline-block;position:absolute;right:3px;top:0;bottom:0;margin:auto;background-color:var(--oc-form-control-bg);height:28px;width:26px;z-index:2}.clear-input-text>i{opacity:1;width:16px;height:16px;background-position:-16px -38px;display:block}.clear-input-text:hover,.clear-input-text:focus{text-decoration:none;cursor:pointer}.clear-input-text:focus{outline:none}.control-toolbar.form-toolbar{background-color:var(--oc-content-tab-content-bg);border-radius:6px}.control-toolbar.form-toolbar .btn-outline-secondary{--bs-btn-color:var(--bs-body-color)}.control-toolbar.form-toolbar .btn{--bs-btn-padding-x:.5rem;--bs-btn-padding-y:.4rem;border:none;font-size:14px;margin-right:8px;transition:all .15s ease-in-out}.control-toolbar.form-toolbar .btn:before{transition:color .15s ease-in-out}.control-toolbar.form-toolbar .btn,.control-toolbar.form-toolbar .btn:before{color:var(--bs-body-color)}.control-toolbar.form-toolbar .btn:hover,.control-toolbar.form-toolbar .btn:focus:hover,.control-toolbar.form-toolbar .btn:active,.control-toolbar.form-toolbar .btn:focus-visible,.control-toolbar.form-toolbar .btn:hover:before,.control-toolbar.form-toolbar .btn:focus:hover:before,.control-toolbar.form-toolbar .btn:active:before,.control-toolbar.form-toolbar .btn:focus-visible:before{color:#fff}.control-toolbar.editor-toolbar{padding:0;background:#ffffff;border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom:1px solid var(--oc-toolbar-border)}.control-toolbar.editor-toolbar .toolbar-item .btn,.control-toolbar.editor-toolbar .toolbar-item .btn-group,.control-toolbar.editor-toolbar .toolbar-item .dropdown{margin:0;padding:0}.control-toolbar.editor-toolbar .toolbar-item .btn{text-align:center;height:38px;width:38px;line-height:38px;color:#333;background:transparent;user-select:none;box-shadow:none;text-shadow:none;border-radius:0;font-size:14px}.control-toolbar.editor-toolbar .toolbar-item .btn>i{opacity:1}.control-toolbar.editor-toolbar .toolbar-item .btn:hover{outline:none;background-color:#ddd;color:#000}.control-toolbar.editor-toolbar .toolbar-item .btn.active,.control-toolbar.editor-toolbar .toolbar-item .btn:active{outline:none;background-color:#d6d6d6;color:#000}.control-toolbar.editor-toolbar .toolbar-item .btn.disabled,.control-toolbar.editor-toolbar .toolbar-item .btn[disabled]{opacity:1;color:#bdbdbd;cursor:default;background:transparent}.control-toolbar.editor-toolbar .toolbar-item .dropdown.open .btn{background-color:#d6d6d6;color:#000}.control-toolbar.editor-toolbar .toolbar-item .btn[class^=\"oc-icon-\"]:before,.control-toolbar.editor-toolbar .toolbar-item .btn[class*=\" oc-icon-\"]:before{opacity:1;margin:0}.control-toolbar.editor-toolbar .toolbar-item .btn.oc-autumn-button{color:#c03f31}.control-toolbar.editor-toolbar .toolbar-item .btn.oc-autumn-button:hover{color:#000 !important}#layout-side-panel div.control-toolbar,.compact-toolbar div.control-toolbar,#layout-side-panel div.control-toolbar.toolbar-padded,.compact-toolbar div.control-toolbar.toolbar-padded{padding:0}#layout-side-panel div.control-toolbar.separator,.compact-toolbar div.control-toolbar.separator{border-bottom:1px solid var(--oc-toolbar-border)}#layout-side-panel div.control-toolbar .toolbar-item,.compact-toolbar div.control-toolbar .toolbar-item{padding-right:0}#layout-side-panel div.control-toolbar .btn,.compact-toolbar div.control-toolbar .btn{border-radius:0 !important;padding-top:12px;padding-bottom:13px;margin-right:0;box-shadow:none}#layout-side-panel div.control-toolbar input.form-control,.compact-toolbar div.control-toolbar input.form-control{border:none;padding:11px 13px 12px;height:auto;border-radius:0 !important}#layout-side-panel div.control-toolbar input.form-control.icon.search,.compact-toolbar div.control-toolbar input.form-control.icon.search{background-position:right -78px}#layout-side-panel div.control-toolbar div.loading-indicator-container.size-input-text .loading-indicator,.compact-toolbar div.control-toolbar div.loading-indicator-container.size-input-text .loading-indicator{top:6px}.tooltip{z-index:10700;font-size:13px}.form-check-input:checked,.form-check-input[type=checkbox]:indeterminate{background-color:var(--bs-primary);border-color:var(--bs-primary)}.backend-icon-background{background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 0}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.backend-icon-background{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}.backend-icon-background.entity-small{position:relative;width:10px;height:10px}.backend-icon-background.entity-small.cms-page{background-position:-129px 0}.backend-icon-background.entity-small.cms-partial{background-position:-180px -20px}.backend-icon-background.entity-small.cms-content{background-position:-206px -20px}.backend-icon-background.entity-small.cms-layout{background-position:-193px -20px}.backend-icon-background.entity-small.cms-asset{background-position:-219px -20px}.backend-icon-background.entity-small.tailor-blueprint{background-position:-180px -60px}.backend-icon-background.entity-small.text{background-position:-142px 0}.backend-icon-background.monaco-document{position:relative;width:16px;height:16px}.backend-icon-background.monaco-document.php{background-position:-181px -38px}.backend-icon-background.monaco-document.html{background-position:-203px -38px}.backend-icon-background-pseudo:before{content:'';background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 0}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.backend-icon-background-pseudo:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}[data-bs-theme=\"dark\"] .backend-icon-background-pseudo:before{background-image:url('../foundation/elements/backendicons/backend-icons-dark.png')}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){[data-bs-theme=\"dark\"] .backend-icon-background-pseudo:before{background-image:url('../foundation/elements/backendicons/backend-icons-dark@2x.png')}}body.breadcrumb-flush .control-breadcrumb,.control-breadcrumb.breadcrumb-flush{margin-bottom:0}.control-breadcrumb>ol>li>a{text-decoration:underline}body.compact-container .control-breadcrumb{margin-top:20px;margin-left:20px;margin-right:20px}body.compact-container .control-breadcrumb>ol{margin-bottom:0}body.slim-container .layout-container .control-breadcrumb{margin-left:20px;margin-right:20px}.btn{--bs-btn-padding-x:1.25rem;--bs-btn-padding-y:.5rem}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y:.5rem;--bs-btn-padding-x:1.5rem;--bs-btn-font-size:1.15rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y:.4rem;--bs-btn-padding-x:.85rem}.btn-default,.btn-primary,.btn-secondary,.btn-success,.btn-info,.btn-warning,.btn-danger{--bs-btn-box-shadow:rgba(20,19,78,0.32) 0 1px 1px 0, var(--bs-btn-bg) 0 0 0 1px, rgba(64,68,82,0.08) 0 2px 5px 0;box-shadow:var(--bs-btn-box-shadow);border:none}.btn-primary{--bs-btn-font-weight:600;--bs-btn-bg:var(--bs-primary);--bs-btn-hover-bg:var(--oc-primary-hover-bg);--bs-btn-active-bg:var(--oc-primary-active-bg)}.btn-secondary{--bs-btn-color:var(--bs-emphasis-color);--bs-btn-bg:var(--oc-secondary-bg);--bs-btn-hover-color:var(--bs-emphasis-color);--bs-btn-hover-bg:var(--oc-secondary-hover-bg);--bs-btn-active-color:var(--bs-emphasis-color);--bs-btn-active-bg:var(--oc-secondary-active-bg);--bs-btn-disabled-bg:var(--oc-secondary-bg);--bs-btn-disabled-color:var(--bs-body-color);--bs-btn-box-shadow:rgba(0,0,0,0.12) 0 1px 1px 0, rgba(64,68,82,0.16) 0 0 0 1px, rgba(64,68,82,0.08) 0 2px 5px 0}.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{--bs-btn-color:#fff;--bs-btn-hover-color:#fff;--bs-btn-active-color:#fff;--bs-btn-disabled-color:rgba(255,255,255,0.6)}.btn-success{--bs-btn-hover-bg:var(--bs-success)}.btn-info{--bs-btn-hover-bg:var(--bs-info)}.btn-warning{--bs-btn-hover-bg:var(--bs-warning)}.btn-default{--bs-btn-color:#fff;--bs-btn-bg:var(--bs-secondary);--bs-btn-border-color:var(--bs-secondary);--bs-btn-hover-color:#fff;--bs-btn-hover-bg:var(--oc-primary-hover-bg);--bs-btn-hover-border-color:var(--oc-primary-hover-bg);--bs-btn-focus-shadow-rgb:90, 92, 210;--bs-btn-active-color:#fff;--bs-btn-active-bg:var(--oc-primary-active-bg);--bs-btn-active-border-color:var(--oc-primary-active-bg);--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color:#f0f0f0;--bs-btn-disabled-bg:var(--bs-secondary);--bs-btn-disabled-border-color:var(--bs-secondary)}.btn-link.text-muted{text-decoration:underline}.btn-link.text-muted:hover,.btn-link.text-muted:focus-visible{color:#124364 !important}.input-group .btn{--bs-btn-box-shadow:none}.btn-outline-default,.btn-outline-primary,.btn-outline-success,.btn-outline-info,.btn-outline-warning,.btn-outline-danger{--bs-btn-hover-color:#fff;--bs-btn-active-color:#f0f0f0}.btn-outline-default{--bs-btn-hover-bg:var(--oc-brand-primary);--bs-btn-active-bg:var(--oc-brand-primary)}.button-separator{color:var(--bs-secondary-color);margin:0 10px;font-size:14px;padding-bottom:2px}.button-separator+.btn-link{margin-left:-5px}.btn[class^=\"oc-icon-\"]:before,.btn[class*=\" oc-icon-\"]:before{font-size:14px;line-height:14px;position:relative;text-decoration:none}.btn i{font-size:14px;line-height:14px;position:relative;top:1px;text-decoration:none;margin-right:4px}.btn-group .btn{border-right:1px solid rgba(0,0,0,0.09);margin-left:0 !important}.btn-group .btn:last-child,.btn-group .btn.last{border-right:none}.btn-group .btn.last{border-bottom-right-radius:4px !important;border-top-right-radius:4px !important}.btn-group>.dropdown{float:left}.btn-group>.dropdown:not(:last-child, .last)>.btn{border-right:1px solid rgba(0,0,0,0.09);border-bottom-right-radius:0 !important;border-top-right-radius:0 !important}.btn-group>.dropdown:not(:first-child)>.btn{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.btn-group>.dropdown.last .btn{border-right:none}.btn.offset-right,.btn-group.offset-right{margin-right:10px}.btn-icon{display:inline-block;height:36px;font-size:21px;background:transparent;border:none;outline:none;border-radius:.3rem;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.btn-icon:before{display:block;color:#bcc3c7}.btn-icon:focus-visible{box-shadow:0 0 0 .25rem rgba(53,66,91,0.1)}.btn-icon:hover:before{color:var(--bs-link-color)}.btn-icon.danger:hover:before{color:#c63e26}.btn-icon.pull-right:before{margin-right:0}.btn-icon.margin-left{margin-left:5px}.btn-icon.small{font-size:17px;height:17px;line-height:15px}.btn-icon.larger{font-size:21px;height:21px;line-height:17px}.btn-text{font-size:14px;color:var(--bs-secondary-color);vertical-align:middle;display:inline-block;padding:8px 0}.btn-text a,.btn-text .btn.btn-link{font-size:14px;color:var(--bs-secondary-color);text-decoration:underline;vertical-align:baseline}.btn-text a:hover,.btn-text .btn.btn-link:hover{color:var(--bs-link-color)}.btn-circle{width:30px;height:30px;text-align:center;padding-left:0;padding-right:0;font-size:12px;line-height:1.42857143;border-radius:30px}.btn-circle i{margin:0}.btn-circle.btn-lg{width:50px;height:50px;font-size:18px;line-height:1.33;border-radius:25px}.btn-circle.btn-xl{width:70px;height:70px;font-size:24px;line-height:1.33;border-radius:35px}div.scoreboard{position:relative;padding:0}div.scoreboard:after,div.scoreboard:before{display:none;position:absolute;top:50%;margin-top:-7px;height:9px;font-size:10px;color:#bbbbbb}div.scoreboard:before{left:-6px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f104\"}div.scoreboard:after{right:-8px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f105\"}div.scoreboard.scroll-before:before{display:block}div.scoreboard.scroll-after:after{display:block}div.scoreboard:before,div.scoreboard:after{margin-top:-10px}div.scoreboard:before{left:7px}div.scoreboard:after{right:10px}div.scoreboard div.scoreboard-item{display:inline-block;margin-right:40px;margin-bottom:20px;vertical-align:top}div.scoreboard div.scoreboard-item:last-child{margin-right:0}div.scoreboard div.scoreboard-item.thumbnail-value{margin-right:20px}div.scoreboard div.scoreboard-item.thumbnail-value img{height:72px}div.scoreboard div.scoreboard-item span.scoreboard-colorpicker{width:0;height:0;background-color:transparent;border-right-color:var(--background-color);border-bottom-color:var(--background-color);border-top-color:var(--foreground-color);border-left-color:var(--foreground-color);border-width:10px;border-style:solid;border-radius:20px;display:inline-block}div.scoreboard div.scoreboard-item span.scoreboard-colorpicker:after{content:\"\";top:-10px;left:-10px;width:20px;height:20px;position:absolute;box-shadow:inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), .2);border-radius:20px}div.scoreboard .control-chart{height:67px}div.scoreboard .control-chart ul{margin-left:77px;top:-2px}div.scoreboard .control-chart ul li{padding-left:18px}div.scoreboard .control-chart ul li>i{margin-left:-18px}div.scoreboard .control-chart .canvas+ul{margin-left:0}div.scoreboard .scoreboard-offset{padding-left:20px}body.slim-container div.scoreboard{padding:0 20px}.title-value h4{font-size:1.1rem;line-height:1;font-weight:normal;margin:0;color:var(--bs-heading-color)}.title-value p{color:var(--bs-body-color);margin:0;font-size:28px}.title-value p i,.title-value p:before{color:var(--oc-color-neutral);font-size:22px;position:relative;top:-2px}.title-value p.success{color:var(--oc-color-positive)}.title-value p.danger{color:var(--oc-color-negative)}.title-value p.negative:after,.title-value p.positive:after{font-size:17px;vertical-align:middle;position:relative;top:-3px;left:5px}.title-value p.negative{color:var(--oc-color-negative)}.title-value p.negative:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f103\"}.title-value p.positive{color:var(--oc-color-positive)}.title-value p.positive:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f102\"}.title-value p.description{color:var(--bs-secondary-color);line-height:100%;font-size:13px}.loading-indicator{padding:20px 20px 20px 60px;color:#999999;font-size:14px;font-weight:600;background:var(--bs-body-bg);text-align:left;z-index:10}.loading-indicator>span{--loader-size:40px;position:absolute;width:var(--loader-size);height:var(--loader-size);top:50%;margin-top:calc(var(--loader-size) / -2);left:0;display:block;border:3px solid var(--oc-primary-border);border-top-color:var(--oc-accent);border-radius:50%;animation:spin .8s linear infinite}.loading-indicator.is-transparent{background-color:transparent}.loading-indicator-container{position:relative;min-height:40px}.loading-indicator-container .loading-indicator{position:absolute;left:-1px;right:-1px;top:-1px;bottom:-1px;padding-top:0}.loading-indicator-container .loading-indicator>div{position:absolute;top:50%;margin-top:-0.65em}.form-buttons>.loading-indicator-container{padding:.3rem;margin:-0.3rem}.loading-indicator.is-opaque>span,.loading-indicator-container.is-opaque .loading-indicator>span{background-color:var(--bs-body-bg);border-color:var(--oc-primary-border);border-top-color:var(--oc-accent)}.loading-indicator-container.size-small{min-height:20px}.loading-indicator.size-small,.loading-indicator-container.size-small .loading-indicator{padding:16px 16px 16px 30px;font-size:11px}.loading-indicator.size-small>span,.loading-indicator-container.size-small .loading-indicator>span{--loader-size:20px;border-width:2px}.loading-indicator.indicator-center,.loading-indicator-container.indicator-center .loading-indicator{padding:20px}.loading-indicator.indicator-center>span,.loading-indicator-container.indicator-center .loading-indicator>span{left:50%;margin-left:calc(var(--loader-size) / -2);margin-top:calc(var(--loader-size) / -2)}.loading-indicator.indicator-center>div,.loading-indicator-container.indicator-center .loading-indicator>div{text-align:center;position:relative;margin-top:30px}.loading-indicator.indicator-inset,.loading-indicator-container.indicator-inset .loading-indicator{padding-left:80px}.loading-indicator.indicator-inset>span,.loading-indicator-container.indicator-inset .loading-indicator>span{left:20px}.loading-indicator-container.size-form-field,.loading-indicator-container.size-input-text{min-height:0}.loading-indicator-container.size-form-field .loading-indicator,.loading-indicator-container.size-input-text .loading-indicator{background-color:transparent;padding:0;margin:0}.loading-indicator-container.size-form-field .loading-indicator>span,.loading-indicator-container.size-input-text .loading-indicator>span{--loader-size:23px;padding:0;margin:0;left:auto;right:7px;top:6px;border-width:2px}.loading-indicator-container.size-form-field .loading-indicator>span{--loader-size:20px;top:0;right:0}.layout{display:table;table-layout:fixed;height:100%;width:100%}.layout>.layout-row{display:table-row;vertical-align:top;height:100%}.layout>.layout-row>.layout-cell{display:table-cell;vertical-align:top;height:100%}.layout>.layout-row>.layout-cell .layout-relative{position:relative;height:100%}.layout>.layout-row>.layout-cell .layout-absolute{position:absolute;height:100%;width:100%}.layout>.layout-row>.layout-cell.min-size{width:0}.layout>.layout-row>.layout-cell.min-height{height:0}.layout>.layout-row>.layout-cell.center{text-align:center}.layout>.layout-row>.layout-cell.middle{vertical-align:middle}.layout>.layout-row>.layout-cell .layout-relative{position:relative;height:100%}.layout>.layout-row>.layout-cell .layout-absolute{position:absolute;height:100%;width:100%}.layout>.layout-row>.layout-cell.min-size{width:0}.layout>.layout-row>.layout-cell.min-height{height:0}.layout>.layout-row>.layout-cell.center{text-align:center}.layout>.layout-row>.layout-cell.middle{vertical-align:middle}.layout>.layout-row.min-size{height:.1px}.layout>.layout-cell{display:table-cell;vertical-align:top;height:100%}.layout>.layout-cell .layout-relative{position:relative;height:100%}.layout>.layout-cell .layout-absolute{position:absolute;height:100%;width:100%}.layout>.layout-cell.min-size{width:0}.layout>.layout-cell.min-height{height:0}.layout>.layout-cell.center{text-align:center}.layout>.layout-cell.middle{vertical-align:middle}@media (max-width:768px){.hide-on-small{display:none !important}}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:var(--bs-emphasis-color);text-shadow:0 1px 0 var(--bs-body-bg);font-family:sans-serif;opacity:.2}.close:hover,.close:focus{color:var(--bs-emphasis-color);text-decoration:none;cursor:pointer;opacity:.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.custom-checkbox.nolabel label,.custom-radio.nolabel label{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.custom-checkbox,.custom-radio{padding-left:23px;margin-top:0}.custom-checkbox input[type=radio],.custom-radio input[type=radio],.custom-checkbox input[type=checkbox],.custom-radio input[type=checkbox]{position:absolute;overflow:hidden;clip:rect(0 0 0 0);width:1px;margin:-1px;padding:0;border:0;opacity:0}.custom-checkbox label,.custom-radio label{display:inline-block;cursor:pointer;position:relative;padding-left:20px;margin-right:15px;margin-left:-20px;font-size:1rem;user-select:none}.custom-checkbox label:before,.custom-radio label:before{content:\"\";display:inline-block;text-align:center;color:#FFFFFF;width:16px;height:16px;margin-right:15px;position:absolute;left:-3px;top:1px;background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.custom-checkbox label:hover:before,.custom-radio label:hover:before{border-color:var(--oc-border-focus)}.custom-checkbox label:active:before,.custom-radio label:active:before{border-color:#b0bdcd;border-width:2px}.custom-checkbox input[type=radio]+label:before,.custom-radio input[type=radio]+label:before{background-position:-19px -19px}.custom-checkbox input[type=radio]:checked+label:before,.custom-radio input[type=radio]:checked+label:before{background-position:0 -19px}.custom-checkbox input[type=radio][data-radio-color=green]:checked+label:before,.custom-radio input[type=radio][data-radio-color=green]:checked+label:before{background-position:-59px -19px}.custom-checkbox input[type=radio][data-radio-color=red]:checked+label:before,.custom-radio input[type=radio][data-radio-color=red]:checked+label:before{background-position:-79px -19px}.custom-checkbox input[type=checkbox]+label:before,.custom-radio input[type=checkbox]+label:before{background-position:-19px 0}.custom-checkbox input[type=checkbox]:checked+label:before,.custom-radio input[type=checkbox]:checked+label:before{background-position:0 0}.custom-checkbox input[type=checkbox]:indeterminate+label:before,.custom-radio input[type=checkbox]:indeterminate+label:before{background-position:-79px 0}.custom-checkbox input:disabled+label,.custom-radio input:disabled+label{cursor:not-allowed}.custom-checkbox input[type=checkbox]:disabled:checked+label:before,.custom-radio input[type=checkbox]:disabled:checked+label:before{background-position:-39px 0}.custom-checkbox input[type=radio]:disabled:checked+label:before,.custom-radio input[type=radio]:disabled:checked+label:before{background-position:-39px -19px}.custom-checkbox:focus,.custom-radio:focus{outline:none}.custom-checkbox:focus label:before,.custom-radio:focus label:before{box-shadow:0 0 0px 2px rgba(0,0,0,0.15)}.custom-checkbox p.form-text,.custom-radio p.form-text{margin-bottom:17px}.custom-radio label:before{-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.custom-checkbox label:before{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.inline-options .field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner{padding:10px 15px 15px 15px}.inline-options .field-checkboxlist:not(.is-scrollable) .custom-checkbox{display:inline-block;margin:0}.inline-options .field-checkboxlist:not(.is-scrollable) .custom-checkbox label{margin-bottom:0 !important;padding-top:10px}.inline-options .field-checkboxlist:not(.is-scrollable) .custom-checkbox label:before{top:10px}.inline-options.radio-field>label{display:block}.inline-options.radio-field .custom-radio{display:inline-block;margin-bottom:0}.switch-field .field-switch{padding-left:75px;float:left}.switch-field .field-switch>label{margin-top:3px}.custom-switch{display:block;width:65px;height:26px;position:relative;text-transform:uppercase;border:none;cursor:pointer;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.custom-switch *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.custom-switch.disabled{opacity:.5}.custom-switch .slide-button{z-index:9;display:block;position:absolute;right:42px;top:3px;width:20px;height:20px;background-color:#f6f6f6;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;-webkit-transition:all .1s;transition:all .1s}.custom-switch label,.custom-switch>span{line-height:23px;vertical-align:middle}.custom-switch label{z-index:8;width:100%;display:block;position:relative}.custom-switch input{z-index:10;position:absolute;left:0;top:0;opacity:0}.custom-switch input:checked~.slide-button{right:4px}.custom-switch input:checked~span{background-color:var(--bs-success)}.custom-switch input:checked~span span:first-of-type{color:#FFFFFF;display:block}.custom-switch input:checked~span span:last-of-type{color:#666666;display:none}.custom-switch input[disabled]~span{background-color:#bdc3c7 !important}.custom-switch input[disabled]~span,.custom-switch input[disabled]~span+a{cursor:default}.custom-switch>span{display:block;height:100%;position:absolute;left:0;width:100%;background-color:#72809d;font-size:12px;font-weight:600;user-select:none;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px}.custom-switch>span span{z-index:10;display:block;position:absolute;top:1px;left:-1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.custom-switch>span span:last-child{left:28px;color:#FFFFFF;display:block}.custom-switch>span span:first-of-type{padding-left:13px;display:none;color:#666666}.oc-circle-thin:before,.icon-circle-thin:before{content:\"\\f10c\"}.oc-undo:before,.icon-undo:before{content:\"\\e929\"}.oc-redo:before,.icon-redo:before{content:\"\\e928\"}.oc-icon-arrow-circle-o-down:before,.icon-arrow-circle-o-down:before{content:\"\\f0ab\"}.oc-icon-arrow-circle-o-left:before,.icon-arrow-circle-o-left:before{content:\"\\f0a8\"}.oc-icon-arrow-circle-o-right:before,.icon-arrow-circle-o-right:before{content:\"\\f0a9\"}.oc-icon-arrow-circle-o-up:before,.icon-arrow-circle-o-up:before{content:\"\\f0aa\"}.oc-icon-caret-square-o-down:before,.icon-caret-square-o-down:before{content:\"\\f150\"}.oc-icon-caret-square-o-left:before,.icon-caret-square-o-left:before{content:\"\\f191\"}.oc-icon-caret-square-o-right:before,.icon-caret-square-o-right:before{content:\"\\f152\"}.oc-icon-caret-square-o-up:before,.icon-caret-square-o-up:before{content:\"\\f151\"}.oc-icon-circle-o-notch:before,.icon-circle-o-notch:before{content:\"\\f1ce\"}.oc-icon-hand-o-down:before,.icon-hand-o-down:before{content:\"\\f0a7\"}.oc-icon-hand-o-left:before,.icon-hand-o-left:before{content:\"\\f0a5\"}.oc-icon-hand-o-right:before,.icon-hand-o-right:before{content:\"\\f0a4\"}.oc-icon-hand-o-up:before,.icon-hand-o-up:before{content:\"\\f0a6\"}.oc-icon-thumbs-o-down:before,.icon-thumbs-o-down:before{content:\"\\f16a\"}.oc-icon-thumbs-o-up:before,.icon-thumbs-o-up:before{content:\"\\f08c\"}.oc-icon-address-book-o:before,.icon-address-book-o:before{content:\"\\f2ba\"}.oc-icon-address-card-o:before,.icon-address-card-o:before{content:\"\\f2bc\"}.oc-icon-bar-chart-o:before,.icon-bar-chart-o:before{content:\"\\f080\"}.oc-icon-bell-o:before,.icon-bell-o:before{content:\"\\f0f3\"}.oc-icon-bell-slash-o:before,.icon-bell-slash-o:before{content:\"\\f1f6\"}.oc-icon-bookmark-o:before,.icon-bookmark-o:before{content:\"\\f02e\"}.oc-icon-building-o:before,.icon-building-o:before{content:\"\\f1ad\"}.oc-icon-calendar-check-o:before,.icon-calendar-check-o:before{content:\"\\f274\"}.oc-icon-calendar-minus-o:before,.icon-calendar-minus-o:before{content:\"\\f272\"}.oc-icon-calendar-o:before,.icon-calendar-o:before{content:\"\\f073\"}.oc-icon-calendar-plus-o:before,.icon-calendar-plus-o:before{content:\"\\f271\"}.oc-icon-calendar-times-o:before,.icon-calendar-times-o:before{content:\"\\f273\"}.oc-icon-check-circle-o:before,.icon-check-circle-o:before{content:\"\\f058\"}.oc-icon-check-square-o:before,.icon-check-square-o:before{content:\"\\f14a\"}.oc-icon-circle-o:before,.icon-circle-o:before{content:\"\\f10c\"}.oc-icon-clock-o:before,.icon-clock-o:before{content:\"\\f017\"}.oc-icon-comment-o:before,.icon-comment-o:before{content:\"\\f075\"}.oc-icon-commenting-o:before,.icon-commenting-o:before{content:\"\\f27b\"}.oc-icon-comments-o:before,.icon-comments-o:before{content:\"\\f086\"}.oc-icon-dot-circle-o:before,.icon-dot-circle-o:before{content:\"\\f192\"}.oc-icon-drivers-license-o:before,.icon-drivers-license-o:before{content:\"\\f2c3\"}.oc-icon-envelope-o:before,.icon-envelope-o:before{content:\"\\f0e0\"}.oc-icon-envelope-open-o:before,.icon-envelope-open-o:before{content:\"\\f2b7\"}.oc-icon-file-archive-o:before,.icon-file-archive-o:before{content:\"\\f1c6\"}.oc-icon-file-audio-o:before,.icon-file-audio-o:before{content:\"\\f1c7\"}.oc-icon-file-code-o:before,.icon-file-code-o:before{content:\"\\f1c9\"}.oc-icon-file-excel-o:before,.icon-file-excel-o:before{content:\"\\f1c3\"}.oc-icon-file-image-o:before,.icon-file-image-o:before{content:\"\\f1c5\"}.oc-icon-file-movie-o:before,.icon-file-movie-o:before{content:\"\\f1c8\"}.oc-icon-file-o:before,.icon-file-o:before{content:\"\\f15c\"}.oc-icon-file-pdf-o:before,.icon-file-pdf-o:before{content:\"\\f1c1\"}.oc-icon-file-photo-o:before,.icon-file-photo-o:before{content:\"\\f1ca\"}.oc-icon-file-picture-o:before,.icon-file-picture-o:before{content:\"\\f1cc\"}.oc-icon-file-powerpoint-o:before,.icon-file-powerpoint-o:before{content:\"\\f1c4\"}.oc-icon-file-sound-o:before,.icon-file-sound-o:before{content:\"\\f1cd\"}.oc-icon-file-text-o:before,.icon-file-text-o:before{content:\"\\f15d\"}.oc-icon-file-video-o:before,.icon-file-video-o:before{content:\"\\f1cf\"}.oc-icon-file-word-o:before,.icon-file-word-o:before{content:\"\\f1c2\"}.oc-icon-file-zip-o:before,.icon-file-zip-o:before{content:\"\\f1d0\"}.oc-icon-files-o:before,.icon-files-o:before{content:\"\\f0c6\"}.oc-icon-flag-o:before,.icon-flag-o:before{content:\"\\f024\"}.oc-icon-floppy-o:before,.icon-floppy-o:before{content:\"\\f0c7\"}.oc-icon-folder-o:before,.icon-folder-o:before{content:\"\\f114\"}.oc-icon-folder-open-o:before,.icon-folder-open-o:before{content:\"\\f115\"}.oc-icon-frown-o:before,.icon-frown-o:before{content:\"\\f119\"}.oc-icon-futbol-o:before,.icon-futbol-o:before{content:\"\\f1e3\"}.oc-icon-hand-grab-o:before,.icon-hand-grab-o:before{content:\"\\f255\"}.oc-icon-hand-lizard-o:before,.icon-hand-lizard-o:before{content:\"\\f258\"}.oc-icon-hand-paper-o:before,.icon-hand-paper-o:before{content:\"\\f256\"}.oc-icon-hand-peace-o:before,.icon-hand-peace-o:before{content:\"\\f25b\"}.oc-icon-hand-pointer-o:before,.icon-hand-pointer-o:before{content:\"\\f25a\"}.oc-icon-hand-rock-o:before,.icon-hand-rock-o:before{content:\"\\f257\"}.oc-icon-hand-scissors-o:before,.icon-hand-scissors-o:before{content:\"\\f259\"}.oc-icon-hand-spock-o:before,.icon-hand-spock-o:before{content:\"\\f25c\"}.oc-icon-hand-stop-o:before,.icon-hand-stop-o:before{content:\"\\f25d\"}.oc-icon-handshake-o:before,.icon-handshake-o:before{content:\"\\f2b8\"}.oc-icon-hdd-o:before,.icon-hdd-o:before{content:\"\\f0a0\"}.oc-icon-heart-o:before,.icon-heart-o:before{content:\"\\f004\"}.oc-icon-hospital-o:before,.icon-hospital-o:before{content:\"\\f0f8\"}.oc-icon-hourglass-o:before,.icon-hourglass-o:before{content:\"\\f250\"}.oc-icon-id-card-o:before,.icon-id-card-o:before{content:\"\\f2c6\"}.oc-icon-keyboard-o:before,.icon-keyboard-o:before{content:\"\\f11c\"}.oc-icon-lemon-o:before,.icon-lemon-o:before{content:\"\\f094\"}.oc-icon-lightbulb-o:before,.icon-lightbulb-o:before{content:\"\\f0eb\"}.oc-icon-map-o:before,.icon-map-o:before{content:\"\\f278\"}.oc-icon-meh-o:before,.icon-meh-o:before{content:\"\\f11a\"}.oc-icon-minus-square-o:before,.icon-minus-square-o:before{content:\"\\f147\"}.oc-icon-moon-o:before,.icon-moon-o:before{content:\"\\f186\"}.oc-icon-newspaper-o:before,.icon-newspaper-o:before{content:\"\\f1ea\"}.oc-icon-paper-plane-o:before,.icon-paper-plane-o:before{content:\"\\f1dd\"}.oc-icon-pause-circle-o:before,.icon-pause-circle-o:before{content:\"\\f28c\"}.oc-icon-pencil-square-o:before,.icon-pencil-square-o:before{content:\"\\f14b\"}.oc-icon-picture-o:before,.icon-picture-o:before{content:\"\\f03f\"}.oc-icon-play-circle-o:before,.icon-play-circle-o:before{content:\"\\f144\"}.oc-icon-plus-square-o:before,.icon-plus-square-o:before{content:\"\\f196\"}.oc-icon-question-circle-o:before,.icon-question-circle-o:before{content:\"\\f059\"}.oc-icon-send-o:before,.icon-send-o:before{content:\"\\f1e7\"}.oc-icon-share-square-o:before,.icon-share-square-o:before{content:\"\\f14d\"}.oc-icon-smile-o:before,.icon-smile-o:before{content:\"\\f118\"}.oc-icon-snowflake-o:before,.icon-snowflake-o:before{content:\"\\f2dc\"}.oc-icon-soccer-ball-o:before,.icon-soccer-ball-o:before{content:\"\\f1ef\"}.oc-icon-square-o:before,.icon-square-o:before{content:\"\\f0d2\"}.oc-icon-star-half-o:before,.icon-star-half-o:before{content:\"\\f12f\"}.oc-icon-star-o:before,.icon-star-o:before{content:\"\\f006\"}.oc-icon-sticky-note-o:before,.icon-sticky-note-o:before{content:\"\\f26d\"}.oc-icon-stop-circle-o:before,.icon-stop-circle-o:before{content:\"\\f28e\"}.oc-icon-sun-o:before,.icon-sun-o:before{content:\"\\f189\"}.oc-icon-times-circle-o:before,.icon-times-circle-o:before{content:\"\\f057\"}.oc-icon-times-rectangle-o:before,.icon-times-rectangle-o:before{content:\"\\f2de\"}.oc-icon-trash-o:before,.icon-trash-o:before{content:\"\\f1f8\"}.oc-icon-user-circle-o:before,.icon-user-circle-o:before{content:\"\\f2be\"}.oc-icon-user-o:before,.icon-user-o:before{content:\"\\f007\"}.oc-icon-vcard-o:before,.icon-vcard-o:before{content:\"\\f2df\"}.oc-icon-window-close-o:before,.icon-window-close-o:before{content:\"\\f2e1\"}.storm-icon{background-size:300px 63px;background-image:url('../foundation/migrate/images/storm-icons.png')}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.storm-icon{background-image:url('../foundation/migrate/images/storm-icons@2x.png')}}.storm-icon-pseudo:before{content:'';background-size:300px 63px;background-image:url('../foundation/migrate/images/storm-icons.png')}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.storm-icon-pseudo:before{background-image:url('../foundation/migrate/images/storm-icons@2x.png')}}.control-breadcrumb ul{padding:0 0 20px 0;margin:0;font-size:0}.control-breadcrumb ul li{font-size:14px;list-style:none;margin:0;padding:0;display:inline-block;position:relative;color:var(--bs-link-color)}.control-breadcrumb ul li a{display:inline-block;color:var(--bs-link-color);text-decoration:underline}.control-breadcrumb ul li a:hover{color:var(--bs-link-color)}.control-breadcrumb ul li:after{content:var(--bs-breadcrumb-divider, \"/\");position:relative;display:inline-block;margin:0 5px;color:var(--bs-secondary-color)}.control-breadcrumb ul li:last-child{background-color:transparent;color:var(--bs-secondary-color)}.control-breadcrumb ul li:last-child:after{display:none}body.breadcrumb-flush .control-breadcrumb,.control-breadcrumb.breadcrumb-flush{margin-bottom:0}body.compact-container .control-breadcrumb{margin-top:20px;margin-left:20px;margin-right:20px}body.compact-container .control-breadcrumb>ul{padding-bottom:0}body.slim-container .control-breadcrumb{margin-left:20px;margin-right:20px}.modal-content .modal-header.flex-row-reverse{justify-content:space-between}@font-face{font-family:'octo-icon-migrate';src:url('../foundation/migrate/vendor/octoicons/octo-icon.eot?symvb&v=1.0.1');src:url('../foundation/migrate/vendor/octoicons/octo-icon.eot?symvb#iefix&v=1.0.1') format('embedded-opentype'),url('../foundation/migrate/vendor/octoicons/octo-icon.ttf?symvb&v=1.0.1') format('truetype'),url('../foundation/migrate/vendor/octoicons/octo-icon.woff?symvb&v=1.0.1') format('woff'),url('../foundation/migrate/vendor/octoicons/octo-icon.svg?symvb#octo-icon&v=1.0.1') format('svg');font-weight:normal;font-style:normal;font-display:block}[class^=\"octo-icon-\"],[class*=\" octo-icon-\"]{font-family:'octo-icon-migrate' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.octo-icon-size-20{font-size:20px}.octo-icon-earth:before{content:\"\\eb55\"}.octo-icon-language-letters:before{content:\"\\eb56\"}.octo-icon-database-flash:before{content:\"\\eb54\"}.octo-icon-collapse:before{content:\"\\eb26\"}.octo-icon-music:before{content:\"\\e964\"}.octo-icon-envelope:before{content:\"\\e965\"}.octo-icon-heart:before{content:\"\\e966\"}.octo-icon-star:before{content:\"\\e967\"}.octo-icon-user:before{content:\"\\e968\"}.octo-icon-film:before{content:\"\\e969\"}.octo-icon-check:before{content:\"\\e96a\"}.octo-icon-remove:before{content:\"\\e96b\"}.octo-icon-close:before{content:\"\\e96c\"}.octo-icon-search-minus:before{content:\"\\e96d\"}.octo-icon-search-plus:before{content:\"\\e96e\"}.octo-icon-power-off:before{content:\"\\e96f\"}.octo-icon-signal:before{content:\"\\e970\"}.octo-icon-gear:before{content:\"\\e971\"}.octo-icon-cog:before{content:\"\\e972\"}.octo-icon-home:before{content:\"\\e973\"}.octo-icon-file:before{content:\"\\e974\"}.octo-icon-clock:before{content:\"\\e975\"}.octo-icon-road:before{content:\"\\e976\"}.octo-icon-arrow-circle-o-down:before{content:\"\\e977\"}.octo-icon-arrow-circle-o-up:before{content:\"\\e978\"}.octo-icon-inbox:before{content:\"\\e979\"}.octo-icon-play-circle:before{content:\"\\e97a\"}.octo-icon-rotate-right:before{content:\"\\e97b\"}.octo-icon-repeat:before{content:\"\\e97c\"}.octo-icon-refresh:before{content:\"\\e97d\"}.octo-icon-list-alt:before{content:\"\\e97e\"}.octo-icon-headphones:before{content:\"\\e97f\"}.octo-icon-volume-off:before{content:\"\\e980\"}.octo-icon-volume-down:before{content:\"\\e981\"}.octo-icon-volume-up:before{content:\"\\e982\"}.octo-icon-qrcode:before{content:\"\\e983\"}.octo-icon-barcode:before{content:\"\\e984\"}.octo-icon-tags:before{content:\"\\e985\"}.octo-icon-book:before{content:\"\\e986\"}.octo-icon-bookmark:before{content:\"\\e987\"}.octo-icon-print:before{content:\"\\e988\"}.octo-icon-camera:before{content:\"\\e989\"}.octo-icon-font:before{content:\"\\e98a\"}.octo-icon-text-height:before{content:\"\\e98b\"}.octo-icon-text-width:before{content:\"\\e98c\"}.octo-icon-video-camera:before{content:\"\\e98d\"}.octo-icon-photo:before{content:\"\\e98e\"}.octo-icon-image:before{content:\"\\e98f\"}.octo-icon-picture:before{content:\"\\e990\"}.octo-icon-pencil:before{content:\"\\e991\"}.octo-icon-map-marker:before{content:\"\\e992\"}.octo-icon-adjust:before{content:\"\\e993\"}.octo-icon-edit:before{content:\"\\e994\"}.octo-icon-pencil-square:before{content:\"\\e995\"}.octo-icon-share-square:before{content:\"\\e996\"}.octo-icon-check-square:before{content:\"\\e997\"}.octo-icon-arrows:before{content:\"\\e998\"}.octo-icon-pause:before{content:\"\\e999\"}.octo-icon-stop:before{content:\"\\e99a\"}.octo-icon-eject:before{content:\"\\e99b\"}.octo-icon-chevron-right:before{content:\"\\e99c\"}.octo-icon-plus-circle:before{content:\"\\e99d\"}.octo-icon-minus-circle:before{content:\"\\e99e\"}.octo-icon-times-circle:before{content:\"\\e99f\"}.octo-icon-check-circle:before{content:\"\\e9a0\"}.octo-icon-question-circle:before{content:\"\\e9a1\"}.octo-icon-info-circle:before{content:\"\\e9a2\"}.octo-icon-crosshairs:before{content:\"\\e9a3\"}.octo-icon-times-circle-o:before{content:\"\\e9a4\"}.octo-icon-check-circle-o:before{content:\"\\e9a5\"}.octo-icon-ban:before{content:\"\\e9a6\"}.octo-icon-arrow-left:before{content:\"\\e9a7\"}.octo-icon-arrow-right:before{content:\"\\e9a8\"}.octo-icon-arrow-up:before{content:\"\\e9a9\"}.octo-icon-arrow-down:before{content:\"\\e9aa\"}.octo-icon-mail-forward:before{content:\"\\e9ab\"}.octo-icon-share:before{content:\"\\e9ac\"}.octo-icon-expand:before{content:\"\\e9ad\"}.octo-icon-compress:before{content:\"\\e9ae\"}.octo-icon-minus:before{content:\"\\e9af\"}.octo-icon-asterisk:before{content:\"\\e9b0\"}.octo-icon-exclamation-circle:before{content:\"\\e9b1\"}.octo-icon-gift:before{content:\"\\e9b2\"}.octo-icon-leaf:before{content:\"\\e9b3\"}.octo-icon-fire:before{content:\"\\e9b4\"}.octo-icon-eye:before{content:\"\\e9b5\"}.octo-icon-eye-slash:before{content:\"\\e9b6\"}.octo-icon-calendar:before{content:\"\\e9b7\"}.octo-icon-comment:before{content:\"\\e9b8\"}.octo-icon-chevron-down:before{content:\"\\e9b9\"}.octo-icon-retweet:before{content:\"\\e9ba\"}.octo-icon-shopping-cart:before{content:\"\\e9bb\"}.octo-icon-folder:before{content:\"\\e9bc\"}.octo-icon-folder-open:before{content:\"\\e9bd\"}.octo-icon-arrows-v:before{content:\"\\e9be\"}.octo-icon-arrows-h:before{content:\"\\e9bf\"}.octo-icon-bar-chart-o:before{content:\"\\e9c0\"}.octo-icon-bar-chart:before{content:\"\\e9c1\"}.octo-icon-twitter-square:before{content:\"\\e9c2\"}.octo-icon-facebook-square:before{content:\"\\e9c3\"}.octo-icon-camera-retro:before{content:\"\\e9c4\"}.octo-icon-key:before{content:\"\\e9c5\"}.octo-icon-cogs:before{content:\"\\e9c6\"}.octo-icon-comments:before{content:\"\\e9c7\"}.octo-icon-thumbs-o-down:before{content:\"\\e9c8\"}.octo-icon-heart-o:before{content:\"\\e9c9\"}.octo-icon-sign-out:before{content:\"\\e9ca\"}.octo-icon-linkedin-square:before{content:\"\\e9cb\"}.octo-icon-thumb-tack:before{content:\"\\e9cc\"}.octo-icon-external-link:before{content:\"\\e9cd\"}.octo-icon-sign-in:before{content:\"\\e9ce\"}.octo-icon-trophy:before{content:\"\\e9cf\"}.octo-icon-upload:before{content:\"\\e9d0\"}.octo-icon-lemon-o:before{content:\"\\e9d1\"}.octo-icon-phone:before{content:\"\\e9d2\"}.octo-icon-square-o:before{content:\"\\e9d3\"}.octo-icon-bookmark-o:before{content:\"\\e9d4\"}.octo-icon-phone-square:before{content:\"\\e9d5\"}.octo-icon-twitter:before{content:\"\\e9d6\"}.octo-icon-facebook-f:before{content:\"\\e9d7\"}.octo-icon-facebook:before{content:\"\\e9d8\"}.octo-icon-unlock:before{content:\"\\e9d9\"}.octo-icon-credit-card:before{content:\"\\e9da\"}.octo-icon-feed:before{content:\"\\e9db\"}.octo-icon-rss:before{content:\"\\e9dc\"}.octo-icon-hdd-o:before{content:\"\\e9dd\"}.octo-icon-certificate:before{content:\"\\e9de\"}.octo-icon-arrow-circle-left:before{content:\"\\e9df\"}.octo-icon-arrow-circle-down:before{content:\"\\e9e0\"}.octo-icon-wrench:before{content:\"\\e9e1\"}.octo-icon-tasks:before{content:\"\\e9e2\"}.octo-icon-filter:before{content:\"\\e9e3\"}.octo-icon-briefcase:before{content:\"\\e9e4\"}.octo-icon-arrows-alt:before{content:\"\\e9e5\"}.octo-icon-group:before{content:\"\\e9e6\"}.octo-icon-chain:before{content:\"\\e9e7\"}.octo-icon-flask:before{content:\"\\e9e8\"}.octo-icon-cut:before{content:\"\\e9e9\"}.octo-icon-scissors:before{content:\"\\e9ea\"}.octo-icon-copy:before{content:\"\\e9eb\"}.octo-icon-files-o:before{content:\"\\e9ec\"}.octo-icon-square:before{content:\"\\e9ed\"}.octo-icon-navicon:before{content:\"\\e9ee\"}.octo-icon-reorder:before{content:\"\\e9ef\"}.octo-icon-bars:before{content:\"\\e9f0\"}.octo-icon-list-ul:before{content:\"\\e9f1\"}.octo-icon-list-ol:before{content:\"\\e9f2\"}.octo-icon-strikethrough:before{content:\"\\e9f3\"}.octo-icon-magic:before{content:\"\\e9f4\"}.octo-icon-truck:before{content:\"\\e9f5\"}.octo-icon-pinterest:before{content:\"\\e9f6\"}.octo-icon-pinterest-square:before{content:\"\\e9f7\"}.octo-icon-google-plus-square:before{content:\"\\e9f8\"}.octo-icon-google-plus:before{content:\"\\e9f9\"}.octo-icon-caret-down:before{content:\"\\e9fa\"}.octo-icon-caret-up:before{content:\"\\e9fb\"}.octo-icon-caret-left:before{content:\"\\e9fc\"}.octo-icon-caret-right:before{content:\"\\e9fd\"}.octo-icon-columns:before{content:\"\\e9fe\"}.octo-icon-sort:before{content:\"\\e9ff\"}.octo-icon-sort-down:before{content:\"\\ea00\"}.octo-icon-sort-desc:before{content:\"\\ea01\"}.octo-icon-sort-up:before{content:\"\\ea02\"}.octo-icon-sort-asc:before{content:\"\\ea03\"}.octo-icon-linkedin:before{content:\"\\ea04\"}.octo-icon-rotate-left:before{content:\"\\ea05\"}.octo-icon-legal:before{content:\"\\ea06\"}.octo-icon-gavel:before{content:\"\\ea07\"}.octo-icon-dashboard:before{content:\"\\ea08\"}.octo-icon-tachometer:before{content:\"\\ea09\"}.octo-icon-comment-o:before{content:\"\\ea0a\"}.octo-icon-comments-o:before{content:\"\\ea0b\"}.octo-icon-sitemap:before{content:\"\\ea0c\"}.octo-icon-umbrella:before{content:\"\\ea0d\"}.octo-icon-clipboard:before{content:\"\\ea0e\"}.octo-icon-lightbulb-o:before{content:\"\\ea0f\"}.octo-icon-exchange:before{content:\"\\ea10\"}.octo-icon-user-md:before{content:\"\\ea11\"}.octo-icon-stethoscope:before{content:\"\\ea12\"}.octo-icon-suitcase:before{content:\"\\ea13\"}.octo-icon-bell-o:before{content:\"\\ea14\"}.octo-icon-coffee:before{content:\"\\ea15\"}.octo-icon-file-text-o:before{content:\"\\ea16\"}.octo-icon-building-o:before{content:\"\\ea17\"}.octo-icon-hospital-o:before{content:\"\\ea18\"}.octo-icon-ambulance:before{content:\"\\ea19\"}.octo-icon-medkit:before{content:\"\\ea1a\"}.octo-icon-fighter-jet:before{content:\"\\ea1b\"}.octo-icon-beer:before{content:\"\\ea1c\"}.octo-icon-h-square:before{content:\"\\ea1d\"}.octo-icon-plus-square:before{content:\"\\ea1e\"}.octo-icon-angle-double-left:before{content:\"\\ea1f\"}.octo-icon-angle-double-right:before{content:\"\\ea20\"}.octo-icon-angle-double-up:before{content:\"\\ea21\"}.octo-icon-angle-double-down:before{content:\"\\ea22\"}.octo-icon-angle-left:before{content:\"\\ea23\"}.octo-icon-angle-right:before{content:\"\\ea24\"}.octo-icon-desktop:before{content:\"\\ea25\"}.octo-icon-laptop:before{content:\"\\ea26\"}.octo-icon-tablet:before{content:\"\\ea27\"}.octo-icon-mobile-phone:before{content:\"\\ea28\"}.octo-icon-mobile:before{content:\"\\ea29\"}.octo-icon-circle-o:before{content:\"\\ea2a\"}.octo-icon-quote-left:before{content:\"\\ea2b\"}.octo-icon-quote-right:before{content:\"\\ea2c\"}.octo-icon-spinner:before{content:\"\\ea2d\"}.octo-icon-circle:before{content:\"\\ea2e\"}.octo-icon-mail-reply:before{content:\"\\ea2f\"}.octo-icon-reply:before{content:\"\\ea30\"}.octo-icon-folder-o:before{content:\"\\ea31\"}.octo-icon-folder-open-o:before{content:\"\\ea32\"}.octo-icon-smile-o:before{content:\"\\ea33\"}.octo-icon-frown-o:before{content:\"\\ea34\"}.octo-icon-meh-o:before{content:\"\\ea35\"}.octo-icon-keyboard-o:before{content:\"\\ea36\"}.octo-icon-flag-checkered:before{content:\"\\ea37\"}.octo-icon-terminal:before{content:\"\\ea38\"}.octo-icon-code:before{content:\"\\ea39\"}.octo-icon-mail-reply-all:before{content:\"\\ea3a\"}.octo-icon-reply-all:before{content:\"\\ea3b\"}.octo-icon-location-arrow:before{content:\"\\ea3c\"}.octo-icon-crop:before{content:\"\\ea3d\"}.octo-icon-chain-broken:before{content:\"\\ea3e\"}.octo-icon-question:before{content:\"\\ea3f\"}.octo-icon-exclamation:before{content:\"\\ea40\"}.octo-icon-superscript:before{content:\"\\ea41\"}.octo-icon-subscript:before{content:\"\\ea42\"}.octo-icon-puzzle-piece:before{content:\"\\ea43\"}.octo-icon-microphone:before{content:\"\\ea44\"}.octo-icon-microphone-slash:before{content:\"\\ea45\"}.octo-icon-shield:before{content:\"\\ea46\"}.octo-icon-calendar-o:before{content:\"\\ea47\"}.octo-icon-fire-extinguisher:before{content:\"\\ea48\"}.octo-icon-rocket:before{content:\"\\ea49\"}.octo-icon-chevron-circle-left:before{content:\"\\ea4a\"}.octo-icon-chevron-circle-right:before{content:\"\\ea4b\"}.octo-icon-chevron-circle-up:before{content:\"\\ea4c\"}.octo-icon-chevron-circle-down:before{content:\"\\ea4d\"}.octo-icon-html5:before{content:\"\\ea4e\"}.octo-icon-css3:before{content:\"\\ea4f\"}.octo-icon-anchor:before{content:\"\\ea50\"}.octo-icon-unlock-alt:before{content:\"\\ea51\"}.octo-icon-bullseye:before{content:\"\\ea52\"}.octo-icon-rss-square:before{content:\"\\ea53\"}.octo-icon-minus-square:before{content:\"\\ea54\"}.octo-icon-minus-square-o:before{content:\"\\ea55\"}.octo-icon-level-down:before{content:\"\\ea56\"}.octo-icon-toggle-down:before{content:\"\\ea57\"}.octo-icon-caret-square-o-down:before{content:\"\\ea58\"}.octo-icon-toggle-up:before{content:\"\\ea59\"}.octo-icon-caret-square-o-up:before{content:\"\\ea5a\"}.octo-icon-caret-square-o-right:before{content:\"\\ea5b\"}.octo-icon-euro:before{content:\"\\ea5c\"}.octo-icon-sort-numeric-asc:before{content:\"\\ea5d\"}.octo-icon-sort-numeric-desc:before{content:\"\\ea5e\"}.octo-icon-eur:before{content:\"\\ea5f\"}.octo-icon-gbp:before{content:\"\\ea60\"}.octo-icon-dollar:before{content:\"\\ea61\"}.octo-icon-usd:before{content:\"\\ea62\"}.octo-icon-bitcoin:before{content:\"\\ea63\"}.octo-icon-btc:before{content:\"\\ea64\"}.octo-icon-file-text:before{content:\"\\ea65\"}.octo-icon-thumbs-up:before{content:\"\\ea66\"}.octo-icon-thumbs-down:before{content:\"\\ea67\"}.octo-icon-youtube-square:before{content:\"\\ea68\"}.octo-icon-youtube:before{content:\"\\ea69\"}.octo-icon-xing:before{content:\"\\ea6a\"}.octo-icon-xing-square:before{content:\"\\ea6b\"}.octo-icon-youtube-play:before{content:\"\\ea6c\"}.octo-icon-dropbox:before{content:\"\\ea6d\"}.octo-icon-stack-overflow:before{content:\"\\ea6e\"}.octo-icon-instagram:before{content:\"\\ea6f\"}.octo-icon-flickr:before{content:\"\\ea70\"}.octo-icon-tumblr:before{content:\"\\ea71\"}.octo-icon-tumblr-square:before{content:\"\\ea72\"}.octo-icon-long-arrow-down:before{content:\"\\ea73\"}.octo-icon-long-arrow-up:before{content:\"\\ea74\"}.octo-icon-long-arrow-left:before{content:\"\\ea75\"}.octo-icon-long-arrow-right:before{content:\"\\ea76\"}.octo-icon-apple:before{content:\"\\ea77\"}.octo-icon-windows:before{content:\"\\ea78\"}.octo-icon-android:before{content:\"\\ea79\"}.octo-icon-dribbble:before{content:\"\\ea7a\"}.octo-icon-foursquare:before{content:\"\\ea7b\"}.octo-icon-female:before{content:\"\\ea7c\"}.octo-icon-male:before{content:\"\\ea7d\"}.octo-icon-sun-o:before{content:\"\\ea7e\"}.octo-icon-moon-o:before{content:\"\\ea7f\"}.octo-icon-archive:before{content:\"\\ea80\"}.octo-icon-bug:before{content:\"\\ea81\"}.octo-icon-vk:before{content:\"\\ea82\"}.octo-icon-weibo:before{content:\"\\ea83\"}.octo-icon-renren:before{content:\"\\ea84\"}.octo-icon-arrow-circle-o-right:before{content:\"\\ea85\"}.octo-icon-arrow-circle-o-left:before{content:\"\\ea86\"}.octo-icon-caret-square-o-left:before{content:\"\\ea87\"}.octo-icon-dot-circle-o:before{content:\"\\ea88\"}.octo-icon-wheelchair:before{content:\"\\ea89\"}.octo-icon-plus-square-o:before{content:\"\\ea8a\"}.octo-icon-space-shuttle:before{content:\"\\ea8b\"}.octo-icon-envelope-square:before{content:\"\\ea8c\"}.octo-icon-institution:before{content:\"\\ea8d\"}.octo-icon-bank:before{content:\"\\ea8e\"}.octo-icon-university:before{content:\"\\ea8f\"}.octo-icon-mortar-board:before{content:\"\\ea90\"}.octo-icon-yahoo:before{content:\"\\ea91\"}.octo-icon-reddit:before{content:\"\\ea92\"}.octo-icon-reddit-square:before{content:\"\\ea93\"}.octo-icon-delicious:before{content:\"\\ea94\"}.octo-icon-digg:before{content:\"\\ea95\"}.octo-icon-drupal:before{content:\"\\ea96\"}.octo-icon-language:before{content:\"\\ea97\"}.octo-icon-building:before{content:\"\\ea98\"}.octo-icon-paw:before{content:\"\\ea99\"}.octo-icon-spoon:before{content:\"\\ea9a\"}.octo-icon-steam:before{content:\"\\ea9b\"}.octo-icon-steam-square:before{content:\"\\ea9c\"}.octo-icon-automobile:before{content:\"\\ea9d\"}.octo-icon-car:before{content:\"\\ea9e\"}.octo-icon-cab:before{content:\"\\ea9f\"}.octo-icon-taxi:before{content:\"\\eaa0\"}.octo-icon-tree:before{content:\"\\eaa1\"}.octo-icon-database:before{content:\"\\eaa2\"}.octo-icon-file-pdf-o:before{content:\"\\eaa3\"}.octo-icon-file-word-o:before{content:\"\\eaa4\"}.octo-icon-file-excel-o:before{content:\"\\eaa5\"}.octo-icon-file-powerpoint-o:before{content:\"\\eaa6\"}.octo-icon-file-photo-o:before{content:\"\\eaa7\"}.octo-icon-file-picture-o:before{content:\"\\eaa8\"}.octo-icon-file-image-o:before{content:\"\\eaa9\"}.octo-icon-file-zip-o:before{content:\"\\eaaa\"}.octo-icon-file-archive-o:before{content:\"\\eaab\"}.octo-icon-file-sound-o:before{content:\"\\eaac\"}.octo-icon-file-audio-o:before{content:\"\\eaad\"}.octo-icon-file-video-o:before{content:\"\\eaae\"}.octo-icon-file-code-o:before{content:\"\\eaaf\"}.octo-icon-vine:before{content:\"\\eab0\"}.octo-icon-life-bouy:before{content:\"\\eab1\"}.octo-icon-life-buoy:before{content:\"\\eab2\"}.octo-icon-life-saver:before{content:\"\\eab3\"}.octo-icon-support:before{content:\"\\eab4\"}.octo-icon-life-ring:before{content:\"\\eab5\"}.octo-icon-ra:before{content:\"\\eab6\"}.octo-icon-empire:before{content:\"\\eab7\"}.octo-icon-tencent-weibo:before{content:\"\\eab8\"}.octo-icon-send:before{content:\"\\eab9\"}.octo-icon-paper-plane:before{content:\"\\eaba\"}.octo-icon-send-o:before{content:\"\\eabb\"}.octo-icon-paper-plane-o:before{content:\"\\eabc\"}.octo-icon-history:before{content:\"\\eabd\"}.octo-icon-circle-thin:before{content:\"\\eabe\"}.octo-icon-paragraph:before{content:\"\\eabf\"}.octo-icon-sliders:before{content:\"\\eac0\"}.octo-icon-share-alt:before{content:\"\\eac1\"}.octo-icon-share-alt-square:before{content:\"\\eac2\"}.octo-icon-bomb:before{content:\"\\eac3\"}.octo-icon-soccer-ball-o:before{content:\"\\eac4\"}.octo-icon-futbol-o:before{content:\"\\eac5\"}.octo-icon-tty:before{content:\"\\eac6\"}.octo-icon-binoculars:before{content:\"\\eac7\"}.octo-icon-twitch:before{content:\"\\eac8\"}.octo-icon-yelp:before{content:\"\\eac9\"}.octo-icon-newspaper-o:before{content:\"\\eaca\"}.octo-icon-wifi:before{content:\"\\eacb\"}.octo-icon-calculator:before{content:\"\\eacc\"}.octo-icon-paypal:before{content:\"\\eacd\"}.octo-icon-cc-visa:before{content:\"\\eace\"}.octo-icon-cc-mastercard:before{content:\"\\eacf\"}.octo-icon-cc-discover:before{content:\"\\ead0\"}.octo-icon-cc-amex:before{content:\"\\ead1\"}.octo-icon-cc-paypal:before{content:\"\\ead2\"}.octo-icon-cc-stripe:before{content:\"\\ead3\"}.octo-icon-bell-slash:before{content:\"\\ead4\"}.octo-icon-bell-slash-o:before{content:\"\\ead5\"}.octo-icon-at:before{content:\"\\ead6\"}.octo-icon-paint-brush:before{content:\"\\ead7\"}.octo-icon-birthday-cake:before{content:\"\\ead8\"}.octo-icon-area-chart:before{content:\"\\ead9\"}.octo-icon-pie-chart:before{content:\"\\eada\"}.octo-icon-line-chart:before{content:\"\\eadb\"}.octo-icon-lastfm:before{content:\"\\eadc\"}.octo-icon-lastfm-square:before{content:\"\\eadd\"}.octo-icon-toggle-off:before{content:\"\\eade\"}.octo-icon-toggle-on:before{content:\"\\eadf\"}.octo-icon-bicycle:before{content:\"\\eae0\"}.octo-icon-bus:before{content:\"\\eae1\"}.octo-icon-cc:before{content:\"\\eae2\"}.octo-icon-cart-plus:before{content:\"\\eae3\"}.octo-icon-cart-arrow-down:before{content:\"\\eae4\"}.octo-icon-diamond:before{content:\"\\eae5\"}.octo-icon-ship:before{content:\"\\eae6\"}.octo-icon-street-view:before{content:\"\\eae7\"}.octo-icon-heartbeat:before{content:\"\\eae8\"}.octo-icon-venus:before{content:\"\\eae9\"}.octo-icon-mars:before{content:\"\\eaea\"}.octo-icon-transgender:before{content:\"\\eaeb\"}.octo-icon-transgender-alt:before{content:\"\\eaec\"}.octo-icon-facebook-official:before{content:\"\\eaed\"}.octo-icon-pinterest-p:before{content:\"\\eaee\"}.octo-icon-whatsapp:before{content:\"\\eaef\"}.octo-icon-server:before{content:\"\\eaf0\"}.octo-icon-user-plus:before{content:\"\\eaf1\"}.octo-icon-hotel:before{content:\"\\eaf2\"}.octo-icon-bed:before{content:\"\\eaf3\"}.octo-icon-train:before{content:\"\\eaf4\"}.octo-icon-subway:before{content:\"\\eaf5\"}.octo-icon-battery-4:before{content:\"\\eaf6\"}.octo-icon-battery:before{content:\"\\eaf7\"}.octo-icon-battery-full:before{content:\"\\eaf8\"}.octo-icon-battery-3:before{content:\"\\eaf9\"}.octo-icon-battery-three-quarters:before{content:\"\\eafa\"}.octo-icon-battery-2:before{content:\"\\eafb\"}.octo-icon-battery-half:before{content:\"\\eafc\"}.octo-icon-battery-1:before{content:\"\\eafd\"}.octo-icon-battery-quarter:before{content:\"\\eafe\"}.octo-icon-battery-0:before{content:\"\\eaff\"}.octo-icon-battery-empty:before{content:\"\\eb00\"}.octo-icon-mouse-pointer:before{content:\"\\eb01\"}.octo-icon-i-cursor:before{content:\"\\eb02\"}.octo-icon-clone:before{content:\"\\eb03\"}.octo-icon-balance-scale:before{content:\"\\eb04\"}.octo-icon-hourglass-1:before{content:\"\\eb05\"}.octo-icon-hourglass-start:before{content:\"\\eb06\"}.octo-icon-hourglass-half:before{content:\"\\eb07\"}.octo-icon-odnoklassniki:before{content:\"\\eb08\"}.octo-icon-odnoklassniki-square:before{content:\"\\eb09\"}.octo-icon-wikipedia-w:before{content:\"\\eb0a\"}.octo-icon-tv:before{content:\"\\eb0b\"}.octo-icon-television:before{content:\"\\eb0c\"}.octo-icon-px:before{content:\"\\eb0d\"}.octo-icon-amazon:before{content:\"\\eb0e\"}.octo-icon-calendar-plus-o:before{content:\"\\eb0f\"}.octo-icon-calendar-minus-o:before{content:\"\\eb10\"}.octo-icon-calendar-times-o:before{content:\"\\eb11\"}.octo-icon-calendar-check-o:before{content:\"\\eb12\"}.octo-icon-industry:before{content:\"\\eb13\"}.octo-icon-map-signs:before{content:\"\\eb14\"}.octo-icon-commenting:before{content:\"\\eb15\"}.octo-icon-black-tie:before{content:\"\\eb16\"}.octo-icon-reddit-alien:before{content:\"\\eb17\"}.octo-icon-credit-card-alt:before{content:\"\\eb18\"}.octo-icon-scribd:before{content:\"\\eb19\"}.octo-icon-usb:before{content:\"\\eb1a\"}.octo-icon-pause-circle:before{content:\"\\eb1b\"}.octo-icon-pause-circle-o:before{content:\"\\eb1c\"}.octo-icon-stop-circle:before{content:\"\\eb1d\"}.octo-icon-stop-circle-o:before{content:\"\\eb1e\"}.octo-icon-shopping-bag:before{content:\"\\eb1f\"}.octo-icon-shopping-basket:before{content:\"\\eb20\"}.octo-icon-hashtag:before{content:\"\\eb21\"}.octo-icon-bluetooth-b:before{content:\"\\eb22\"}.octo-icon-wheelchair-alt:before{content:\"\\eb23\"}.octo-icon-question-circle-o:before{content:\"\\eb24\"}.octo-icon-blind:before{content:\"\\eb25\"}.octo-icon-volume-control-phone:before{content:\"\\eb26\"}.octo-icon-braille:before{content:\"\\eb27\"}.octo-icon-snapchat:before{content:\"\\eb28\"}.octo-icon-snapchat-ghost:before{content:\"\\eb29\"}.octo-icon-snapchat-square:before{content:\"\\eb2a\"}.octo-icon-google-plus-circle:before{content:\"\\eb2b\"}.octo-icon-google-plus-official:before{content:\"\\eb2c\"}.octo-icon-handshake-o:before{content:\"\\eb2d\"}.octo-icon-envelope-open:before{content:\"\\eb2e\"}.octo-icon-envelope-open-o:before{content:\"\\eb2f\"}.octo-icon-address-book:before{content:\"\\eb30\"}.octo-icon-address-book-o:before{content:\"\\eb31\"}.octo-icon-vcard:before{content:\"\\eb32\"}.octo-icon-address-card:before{content:\"\\eb33\"}.octo-icon-vcard-o:before{content:\"\\eb34\"}.octo-icon-address-card-o:before{content:\"\\eb35\"}.octo-icon-user-circle:before{content:\"\\eb36\"}.octo-icon-user-circle-o:before{content:\"\\eb37\"}.octo-icon-user-o:before{content:\"\\eb38\"}.octo-icon-id-badge:before{content:\"\\eb39\"}.octo-icon-drivers-license:before{content:\"\\eb3a\"}.octo-icon-id-card:before{content:\"\\eb3b\"}.octo-icon-drivers-license-o:before{content:\"\\eb3c\"}.octo-icon-id-card-o:before{content:\"\\eb3d\"}.octo-icon-quora:before{content:\"\\eb3e\"}.octo-icon-thermometer-4:before{content:\"\\eb3f\"}.octo-icon-thermometer:before{content:\"\\eb40\"}.octo-icon-thermometer-3:before{content:\"\\eb41\"}.octo-icon-thermometer-full:before{content:\"\\eb42\"}.octo-icon-thermometer-three-quarters:before{content:\"\\eb43\"}.octo-icon-thermometer-half:before{content:\"\\eb44\"}.octo-icon-thermometer-2:before{content:\"\\eb45\"}.octo-icon-thermometer-1:before{content:\"\\eb46\"}.octo-icon-thermometer-quarter:before{content:\"\\eb47\"}.octo-icon-thermometer-0:before{content:\"\\eb48\"}.octo-icon-thermometer-empty:before{content:\"\\eb49\"}.octo-icon-shower:before{content:\"\\eb4a\"}.octo-icon-window-maximize:before{content:\"\\eb4b\"}.octo-icon-window-minimize:before{content:\"\\eb4c\"}.octo-icon-window-restore:before{content:\"\\eb4d\"}.octo-icon-window-close:before{content:\"\\eb4e\"}.octo-icon-etsy:before{content:\"\\eb4f\"}.octo-icon-imdb:before{content:\"\\eb50\"}.octo-icon-microchip:before{content:\"\\eb51\"}.octo-icon-snowflake-o:before{content:\"\\eb52\"}.octo-icon-meetup:before{content:\"\\eb53\"}.octo-icon-add-bold:before{content:\"\\e962\"}.octo-icon-layers-grid-add:before{content:\"\\e963\"}.octo-icon-common-file-star:before{content:\"\\e961\"}.octo-icon-set-parent:before{content:\"\\e960\"}.octo-icon-common-file-remove:before{content:\"\\e95c\"}.octo-icon-common-file-sync:before{content:\"\\e95d\"}.octo-icon-harddrive-upload:before{content:\"\\e95e\"}.octo-icon-common-file-upload:before{content:\"\\e95f\"}.octo-icon-list-reorder:before{content:\"\\e95b\"}.octo-icon-keyboard-return:before{content:\"\\e95a\"}.octo-icon-calendar-add:before{content:\"\\e951\"}.octo-icon-calendar-3:before{content:\"\\e952\"}.octo-icon-calendar-disable:before{content:\"\\e953\"}.octo-icon-calendar-check:before{content:\"\\e954\"}.octo-icon-calendar-clock:before{content:\"\\e955\"}.octo-icon-notes-edit-active .path1:before{content:\"\\e956\";color:#ff9c09}.octo-icon-notes-edit-active .path2:before{content:\"\\e957\";margin-left:-1em;color:#536061}.octo-icon-notes-edit:before{content:\"\\e958\"}.octo-icon-calendar-check-1:before{content:\"\\e959\"}.octo-icon-user-actions-key:before{content:\"\\e950\"}.octo-icon-id-card-1:before{content:\"\\e94e\"}.octo-icon-user-group:before{content:\"\\e94f\"}.octo-icon-translate:before{content:\"\\e94c\"}.octo-icon-globe:before{content:\"\\e94d\"}.octo-icon-code-snippet:before{content:\"\\e94b\"}.octo-icon-log-settings:before{content:\"\\e941\"}.octo-icon-lock:before{content:\"\\e949\"}.octo-icon-users:before{content:\"\\e94a\"}.octo-icon-power:before{content:\"\\e942\"}.octo-icon-paint-brush-1:before{content:\"\\e943\"}.octo-icon-mail-templates:before{content:\"\\e947\"}.octo-icon-mail-messages:before{content:\"\\e945\"}.octo-icon-mail-settings:before{content:\"\\e946\"}.octo-icon-mail-branding:before{content:\"\\e944\"}.octo-icon-download:before{content:\"\\e948\"}.octo-icon-plus:before{content:\"\\e940\"}.octo-icon-cross:before{content:\"\\e93e\"}.octo-icon-callout-danger:before{content:\"\\e93d\"}.octo-icon-callout-success:before{content:\"\\e93c\"}.octo-icon-callout-info:before{content:\"\\e93f\"}.octo-icon-add-above:before{content:\"\\e93a\"}.octo-icon-add-below:before{content:\"\\e93b\"}.octo-icon-check-multi:before{content:\"\\e939\"}.octo-icon-unlink:before{content:\"\\e938\"}.octo-icon-list-add:before{content:\"\\e935\"}.octo-icon-list-remove:before{content:\"\\e936\"}.octo-icon-create:before{content:\"\\e937\"}.octo-icon-preview:before{content:\"\\e933\"}.octo-icon-window-split:before{content:\"\\e934\"}.octo-icon-eraser:before{content:\"\\e92e\"}.octo-icon-text-code-block:before{content:\"\\e932\"}.octo-icon-text-h1:before{content:\"\\e92f\"}.octo-icon-text-h3:before{content:\"\\e930\"}.octo-icon-text-h2:before{content:\"\\e931\"}.octo-icon-text-insert-table:before{content:\"\\e915\"}.octo-icon-text-colors:before{content:\"\\e91e\"}.octo-icon-text-emoticons:before{content:\"\\e91f\"}.octo-icon-text-inline-style:before{content:\"\\e924\"}.octo-icon-volume:before{content:\"\\e925\"}.octo-icon-text-video:before{content:\"\\e926\"}.octo-icon-edit-code:before{content:\"\\e92b\"}.octo-icon-text-subscript:before{content:\"\\e920\"}.octo-icon-text-superscript:before{content:\"\\e921\"}.octo-icon-link:before{content:\"\\e91b\"}.octo-icon-text-strikethrough:before{content:\"\\e91d\"}.octo-icon-text-increase-indent:before{content:\"\\e922\"}.octo-icon-text-decrease-indent:before{content:\"\\e923\"}.octo-icon-text-image:before{content:\"\\e927\"}.octo-icon-redo:before{content:\"\\e928\"}.octo-icon-undo:before{content:\"\\e929\"}.octo-icon-attachment:before{content:\"\\e92a\"}.octo-icon-cursor-arrow:before{content:\"\\e92c\"}.octo-icon-text-clear-formatting:before{content:\"\\e92d\"}.octo-icon-quote:before{content:\"\\e919\"}.octo-icon-text-format-ul:before{content:\"\\e90c\"}.octo-icon-text-format-ol:before{content:\"\\e90d\"}.octo-icon-text-justify:before{content:\"\\e916\"}.octo-icon-magic-wand:before{content:\"\\e918\"}.octo-icon-horizontal-line:before{content:\"\\e91a\"}.octo-icon-bold:before{content:\"\\e90f\"}.octo-icon-text-left:before{content:\"\\e910\"}.octo-icon-text-right:before{content:\"\\e911\"}.octo-icon-text-center:before{content:\"\\e912\"}.octo-icon-italic:before{content:\"\\e913\"}.octo-icon-underline:before{content:\"\\e914\"}.octo-icon-info:before{content:\"\\e917\"}.octo-icon-components:before{content:\"\\e91c\"}.octo-icon-fullscreen-collapse:before{content:\"\\e90e\"}.octo-icon-angle-down:before{content:\"\\e90a\"}.octo-icon-angle-up:before{content:\"\\e90b\"}.octo-icon-search:before{content:\"\\e909\"}.octo-icon-settings:before{content:\"\\e904\"}.octo-icon-delete:before{content:\"\\e905\"}.octo-icon-fullscreen:before{content:\"\\e906\"}.octo-icon-save:before{content:\"\\e907\"}.octo-icon-search-code:before{content:\"\\e908\"}.octo-icon-exit:before{content:\"\\e901\"}.octo-icon-app-window:before{content:\"\\e902\"}.octo-icon-user-account:before{content:\"\\e903\"}.octo-icon-triangle-down:before{content:\"\\e900\"}.octo-icon-location-target:before{content:\"\\1f32b\"}.list-hidden-drag-ghost{opacity:0 !important}table.table.data tr:hover .list-reorder span.list-reorder-handle{display:block}table.table.data tbody.tree-drag-mode,table.table.data tbody.tree-drag-mode *{cursor:move!important}table.table.data tbody.tree-drag-mode td.list-reorder span.list-reorder-handle{display:none}table.table.data tbody.tree-drag-mode tr.sortable-chosen td.list-reorder span.list-reorder-handle{display:block}table.table.data tbody.tree-drag-updated td.list-reorder span.list-reorder-handle{display:none !important}table.table.data th.list-reorder,table.table.data td.list-reorder{width:24px;min-width:24px;padding-left:0;padding-right:0}table.table.data td.list-reorder{vertical-align:middle;position:relative}table.table.data td.list-reorder span.list-reorder-handle{display:none;background:var(--oc-toolbar-bg);text-align:center;cursor:move;left:-6px;width:24px;height:24px;position:absolute;top:calc(50% - 12px);border-radius:3px;text-decoration:none}table.table.data td.list-reorder span.list-reorder-handle i{font-size:24px;top:2px}table.table.data td.list-reorder span.list-reorder-handle:active{background:var(--oc-toolbar-hover-bg)}table.table.data td.list-cell-tree{vertical-align:middle;position:relative;-webkit-transition:padding .3s ease;transition:padding .3s ease}table.table.data td.list-cell-tree a.tree-expand-collapse{width:24px;height:24px;display:block;position:absolute;top:calc(50% - 12px);border-radius:3px;text-decoration:none}table.table.data td.list-cell-tree a.tree-expand-collapse{margin-left:-25px}table.table.data td.list-cell-tree a.tree-expand-collapse>span{position:absolute;display:inline-block;left:0;top:0;width:24px;height:24px}table.table.data td.list-cell-tree a.tree-expand-collapse>span:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f105\";position:absolute;left:calc(100% - 15px);top:5px;width:24px;height:24px;font-size:15px;color:var(--bs-body-color);text-indent:0}table.table.data td.list-cell-tree a.tree-expand-collapse.is-expanded span:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f107\";left:calc(100% - 17px)}.control-list.list-checkboxes table.table.data th.list-reorder,.control-list.list-checkboxes table.table.data td.list-reorder{width:18px}.control-list.list-checkboxes table.table.data td.list-reorder span.list-reorder-handle{left:-13px}tr.rowlink:not(.nolink) td{cursor:pointer}tr.rowlink:not(.nolink) td.nolink{cursor:auto}a.rowlink{color:inherit;font:inherit;text-decoration:inherit}.control-list table.table.data thead td,.control-list table.table.data thead th{border:none}.control-list .table>:not(:first-child){border-top:none}.control-list .table>:not(caption)>*>*{border-bottom-width:0}table.table.data{font-size:14px;border-bottom:1px solid var(--bs-border-color)}table.table.data.no-offset-bottom{margin-bottom:0 !important}table.table.data thead{background:var(--bs-tertiary-bg)}table.table.data thead td,table.table.data thead th{border-width:1px;border-top:1px solid var(--bs-border-color) !important;border-bottom:1px solid var(--bs-border-color) !important;border-color:var(--bs-border-color);padding:0;font-weight:600;font-size:14px;white-space:nowrap;background-color:inherit}table.table.data thead td>a,table.table.data thead th>a,table.table.data thead td>span,table.table.data thead th>span{display:block;padding:10px 15px;color:var(--bs-body-color);text-decoration:none}table.table.data thead td>a:hover,table.table.data thead th>a:hover,table.table.data thead td>span:hover,table.table.data thead th>span:hover{color:var(--bs-emphasis-color)}table.table.data thead td.explicit-left-padding>a,table.table.data thead th.explicit-left-padding>a,table.table.data thead td.explicit-left-padding>span,table.table.data thead th.explicit-left-padding>span{padding-left:0}table.table.data thead td.sort-desc>span:after,table.table.data thead th.sort-desc>span:after,table.table.data thead td.sort-desc>a:after,table.table.data thead th.sort-desc>a:after{font-size:14px;line-height:14px;display:inline-block;margin-left:6px;vertical-align:baseline;opacity:.4;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f107\"}table.table.data thead td.sort-desc>span:hover:after,table.table.data thead th.sort-desc>span:hover:after,table.table.data thead td.sort-desc>a:hover:after,table.table.data thead th.sort-desc>a:hover:after{opacity:.8}table.table.data thead td.sort-asc>span:after,table.table.data thead th.sort-asc>span:after,table.table.data thead td.sort-asc>a:after,table.table.data thead th.sort-asc>a:after{font-size:14px;line-height:14px;display:inline-block;margin-left:6px;vertical-align:baseline;opacity:.4;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f106\"}table.table.data thead td.sort-asc>span:hover:after,table.table.data thead th.sort-asc>span:hover:after,table.table.data thead td.sort-asc>a:hover:after,table.table.data thead th.sort-asc>a:hover:after{opacity:.8}table.table.data thead td.has-tooltip>a,table.table.data thead th.has-tooltip>a,table.table.data thead td.has-tooltip>span,table.table.data thead th.has-tooltip>span{padding-left:20px;padding-right:10px}table.table.data thead td.has-tooltip .list-tooltip,table.table.data thead th.has-tooltip .list-tooltip{float:left;position:relative;left:-5px}table.table.data thead td.active,table.table.data thead th.active{text-decoration:underline;color:var(--bs-emphasis-color)}table.table.data thead td.active:hover,table.table.data thead th.active:hover{text-decoration:none}table.table.data thead td.active>span:after,table.table.data thead th.active>span:after,table.table.data thead td.active>a:after,table.table.data thead th.active>a:after{text-decoration:none;color:#c63e26;opacity:1 !important}table.table.data thead tr th:last-child a{padding-right:25px}table.table.data thead .list-checkbox .custom-checkbox{top:-22px}table.table.data tbody tr{background-color:var(--bs-table-bg)}table.table.data tbody tr:nth-child(even) td,table.table.data tbody tr:nth-child(even) th{background-color:var(--bs-table-striped-bg)}table.table.data tbody td,table.table.data tbody th{padding:10px 15px;color:var(--bs-table-color);border-top:1px solid var(--bs-table-border-color)}table.table.data tbody td strong,table.table.data tbody th strong{font-weight:600}table.table.data tbody td div.progress,table.table.data tbody th div.progress{position:relative;overflow:visible;height:auto;margin-bottom:0;background-color:transparent;border-radius:0;box-shadow:none}table.table.data tbody td div.progress div.bar,table.table.data tbody th div.progress div.bar{position:absolute;left:-15px;top:-11px;bottom:-11px;background:#0181b9;opacity:.3}table.table.data tbody td div.progress a,table.table.data tbody th div.progress a{position:relative}table.table.data tbody tr:first-child th,table.table.data tbody tr:first-child td{border-top:none}table.table.data tbody tr.active:not(.no-data) td,table.table.data tbody tr.selected:not(.no-data) td{color:var(--bs-table-hover-color);background-color:var(--bs-table-hover-bg)}table.table.data tbody:not(.tree-drag-mode) tr.rowlink:not(.nolink):not(.active):hover td,table.table.data tbody:not(.tree-drag-mode) tr:not(.no-data):not(.active).selected td{color:var(--bs-table-hover-color);background-color:var(--bs-table-hover-bg)}table.table.data tbody:not(.tree-drag-mode) tr.rowlink:not(.nolink).active:hover td,table.table.data tbody:not(.tree-drag-mode) tr:not(.no-data).active.selected td{background:var(--oc-table-active-bg)}table.table.data tbody tr.sortable-chosen{position:relative;z-index:1}table.table.data tbody tr.sortable-chosen td{color:var(--bs-table-hover-color);background-color:var(--bs-table-hover-bg)}table.table.data tbody tr:focus{outline:none}table.table.data tbody tr.hidden td,table.table.data tbody tr.hidden th,table.table.data tbody tr.hidden td a,table.table.data tbody tr.hidden th a{display:none}table.table.data tbody tr.strike td,table.table.data tbody tr.strike th,table.table.data tbody tr.strike td a,table.table.data tbody tr.strike th a{text-decoration:line-through}table.table.data tbody tr.frozen td,table.table.data tbody tr.frozen th,table.table.data tbody tr.frozen td a,table.table.data tbody tr.frozen th a{color:#337ab7}table.table.data tbody tr.processing td,table.table.data tbody tr.processing th,table.table.data tbody tr.processing td a,table.table.data tbody tr.processing th a{color:#666666}table.table.data tbody tr.negative td,table.table.data tbody tr.negative th,table.table.data tbody tr.negative td a,table.table.data tbody tr.negative th a{color:#b2341c}table.table.data tbody tr.positive td,table.table.data tbody tr.positive th,table.table.data tbody tr.positive td a,table.table.data tbody tr.positive th a{color:#278731}table.table.data tbody tr.disabled td,table.table.data tbody tr.deleted td,table.table.data tbody tr.disabled th,table.table.data tbody tr.deleted th,table.table.data tbody tr.disabled td a,table.table.data tbody tr.deleted td a,table.table.data tbody tr.disabled th a,table.table.data tbody tr.deleted th a{color:#888888}table.table.data tbody tr.new td,table.table.data tbody tr.important td,table.table.data tbody tr.new th,table.table.data tbody tr.important th,table.table.data tbody tr.new td a,table.table.data tbody tr.important td a,table.table.data tbody tr.new th a,table.table.data tbody tr.important th a{font-weight:600}table.table.data tbody tr.safe td,table.table.data tbody tr.special td,table.table.data tbody tr.safe th,table.table.data tbody tr.special th,table.table.data tbody tr.safe td a,table.table.data tbody tr.special td a,table.table.data tbody tr.safe th a,table.table.data tbody tr.special th a{color:#98a7a8}table.table.data tbody td.column-break-word{word-wrap:break-word;word-break:break-all}table.table.data tbody td.column-single-line{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}table.table.data tbody td.column-slim{padding-left:0;padding-right:0}table.table.data tbody td.column-compact{padding:0}table.table.data tbody td.column-button{padding:5px}table.table.data tbody.icons td i[class^=\"icon-\"]{display:inline-block;margin-right:7px;font-size:15px;color:#95a5a6;position:relative;top:1px}table.table.data tbody.clickable{cursor:pointer;user-select:none}table.table.data.no-active-indicator tbody tr td:first-child{border-left:none}table.table.data tfoot a{color:var(--bs-table-color);text-decoration:none}table.table.data tfoot td,table.table.data tfoot th{border-color:var(--bs-border-color);padding:10px 15px}table.table.data th.list-cell-type-switch,table.table.data td.list-cell-type-switch{text-align:center}table.table.data th.list-cell-type-number,table.table.data td.list-cell-type-number{text-align:right}table.table.data th.list-cell-align-left,table.table.data td.list-cell-align-left{text-align:left}table.table.data th.list-cell-align-right,table.table.data td.list-cell-align-right{text-align:right}table.table.data th.list-cell-align-center,table.table.data td.list-cell-align-center{text-align:center}table.table.data th.list-cell-type-selectable,table.table.data td.list-cell-type-selectable{white-space:nowrap}table.table.data th.list-cell-type-colorpicker,table.table.data td.list-cell-type-colorpicker{width:20px}table.table.data .list-badge{display:inline-block;position:relative;top:0;margin:0 5px 0 0;padding:1px 0 0 0;font-size:10px;width:15px;height:15px;text-align:center;border-radius:4px;color:#fff}table.table.data .list-badge>i{position:relative;top:-1px}table.table.data .list-badge.badge-default{background:#98A0A0}table.table.data .list-badge.badge-primary{background:var(--bs-primary)}table.table.data .list-badge.badge-success{background:var(--bs-success)}table.table.data .list-badge.badge-info{background:var(--bs-info)}table.table.data .list-badge.badge-warning{background:var(--bs-warning)}table.table.data .list-badge.badge-danger{background:var(--bs-danger)}table.table.data .list-switch{border-radius:100px;display:inline-block;width:20px;height:20px;text-align:center}table.table.data .list-switch.is-true{background-color:var(--bs-success);color:#fff}table.table.data .list-switch.is-false{background-color:var(--bs-secondary-bg);color:var(--bs-body-color)}table.table.data ul.list-link-list{list-style:none;padding:0;margin:0}table.table.data ul.list-link-list>li{display:inline-block}table.table.data ul.list-link-list>li:after{content:', '}table.table.data ul.list-link-list>li:last-child{padding-right:0}table.table.data ul.list-link-list>li:last-child:after{content:''}table.table.data ul.list-link-list>li a{text-decoration:underline}table.table.data .list-image-thumbs{margin-top:-7px;margin-bottom:-7px}table.table.data .list-image-thumb{display:inline-block;position:relative;margin-top:1px;margin-bottom:1px}table.table.data .list-image-thumb:after{content:'';display:block;position:absolute;box-shadow:inset 0 0 0 1px rgba(127,140,141,0.25);top:0;bottom:0;right:0;left:0;z-index:2;border-radius:4px}table.table.data .list-image-thumb>img{border-radius:4px}table.table.data .list-image-thumb.is-default-size{width:34px;height:34px}table.table.data .list-image-thumb.is-default-size>img{height:100%;width:100%;object-fit:cover}table.table.data .list-file-items{margin-top:-7px;margin-bottom:-7px}table.table.data .list-file-item{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;margin:1px;background:var(--oc-toolbar-bg);border:1px solid var(--oc-toolbar-border);border-radius:4px;color:var(--bs-secondary-color);text-decoration:none}table.table.data .list-file-item>i{font-size:18px}table.table.data .list-selectable{background:var(--oc-toolbar-bg);border:1px solid var(--oc-toolbar-border);border-radius:6px;display:inline-block;padding:0 8px;height:28px;line-height:26px;margin-top:-10px;margin-bottom:-10px;white-space:nowrap}table.table.data .list-selectable i{display:inline-block;margin-right:3px;margin-left:3px;text-align:center}table.table.data .list-colorpicker{width:0;height:0;background-color:transparent;border-right-color:var(--background-color);border-top-color:var(--background-color);border-bottom-color:var(--background-color);border-left-color:var(--background-color);border-width:10px;border-style:solid;border-radius:20px;display:inline-block;position:relative;margin-top:-5px;margin-bottom:-5px}table.table.data .list-colorpicker:after{content:\"\";top:-10px;left:-10px;width:20px;height:20px;position:absolute;box-shadow:inset 0 0 0 1px rgba(53,66,91,0.15);border-radius:20px}table.table.data .list-colorpicker.is-twotone{border-top-color:var(--foreground-color);border-left-color:var(--foreground-color)}table.table.data .list-checkbox{width:42px;vertical-align:top;border-right:1px solid var(--bs-table-border-color)}table.table.data tbody tr td.list-checkbox{padding-left:15px}table.table.data thead tr th.list-checkbox{padding:10.5px 0 0 15px}.list-preview{padding:0;margin-bottom:20px;background:white;border:1px solid var(--bs-border-color)}.list-preview .list-header:first-child{padding-top:20px}.list-preview .control-list:last-child{margin-bottom:0}.list-preview .control-list:last-child>table{border-bottom:none}.list-flush table.table.data thead tr th{border-top:none !important}.list-with-sidebar{display:flex}.list-with-sidebar .sidebar-area{flex-shrink:0;flex-basis:180px;width:180px}.list-with-sidebar .sidebar-list{flex-grow:1;width:0}@media (max-width:991px){.list-with-sidebar{display:block}.list-with-sidebar .sidebar-area{width:auto;flex-shrink:inherit;flex-basis:inherit;margin:0 20px 20px}.list-with-sidebar .sidebar-list{flex-grow:inherit;width:auto}}.control-list{margin-bottom:20px}.control-list p.no-data{padding:18px 20px;margin:0 20px;color:var(--bs-secondary-color);font-size:14px;text-align:center;border-radius:4px}.control-list table.table.data{margin-bottom:0}.control-list table.table.data .list-setup{width:48px;vertical-align:middle}.control-list table.table.data .list-setup a{padding:8px 15px}.control-list table.table.data .list-setup a>span{display:block;color:var(--oc-toolbar-color);background:var(--oc-toolbar-bg);width:24px;height:24px;text-align:center;border-radius:3px}.control-list table.table.data .list-setup a>span:before{font-size:14px;line-height:14px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f0ca\";display:inline-block;vertical-align:middle}.control-list table.table.data .list-setup a:hover>span{color:var(--oc-toolbar-hover-color);background:var(--oc-toolbar-hover-bg)}.control-list table.table.data .list-setup.setup-show-structure a>span:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f0f0\"}.control-list.list-rowlink tbody td a:not(.btn,.dropdown-item),.control-list.list-rowlink tbody th a:not(.btn,.dropdown-item){color:var(--bs-table-color)}.control-list.list-rowlink tbody td a:not(.btn,.dropdown-item):hover,.control-list.list-rowlink tbody th a:not(.btn,.dropdown-item):hover{text-decoration:none}.list-widget-container{border-radius:6px;border:1px solid var(--bs-border-color);overflow:hidden}.list-widget-container>.control-filter{background-color:var(--oc-form-control-bg);border-top:none}.list-widget-container>.control-filter>.filter-group>.filter-scope{padding:10px}.list-widget-container>.list-widget table.table.data thead th{border-top:none !important}.list-widget-container>.list-widget .control-list table.table.data{border-bottom:none}.list-widget-container{margin:0 20px 20px}.list-widget-container>.list-widget>.control-list{margin-bottom:0}@media (max-width:767px){.list-widget-container{margin:0 0 20px;border-radius:0;border:none}}.list-header{background-color:transparent;padding:0 20px 1px 20px}.list-header h3{font-size:14px;color:#7e8c8d;text-transform:uppercase;font-weight:600;margin-top:0;margin-bottom:15px}.list-footer{padding:5px 10px;border-top:1px solid var(--bs-border-color)}.list-footer a{color:var(--bs-table-color);text-decoration:none}.list-footer .list-pagination{display:flex}.list-footer .list-pagination .list-pagination-summary{padding:.475rem 5px;font-size:.9rem}.list-footer .list-pagination .list-pagination-links ul.pagination{margin-bottom:0}.list-footer .list-pagination .list-pagination-links ul.pagination .page-link{border-radius:4px;border-color:transparent;box-shadow:none}.list-footer .list-pagination .list-pagination-links ul.pagination li.disabled .page-link{color:#98a7a8;background-color:transparent}@media (max-width:992px){.list-footer .list-pagination{flex-direction:column-reverse}.list-footer .list-pagination .list-pagination-links{margin-bottom:.5rem}}.report-widget .table-container{margin:-15px}.report-widget .table-container table.table.data{margin-bottom:0}.report-widget .table-container table.table.data thead tr th{border-top:none !important}.report-widget .table-container table.table.data tbody tr:nth-child(even) td,.report-widget .table-container table.table.data tbody tr:nth-child(even) th{background-color:transparent}.list-scrollable-container{touch-action:auto;position:relative}.list-scrollable-container>.list-scrollable{position:relative}.list-scrollable-container>.list-scrollable:after,.list-scrollable-container>.list-scrollable:before{content:'';position:absolute;top:0;bottom:0;width:10px;z-index:2;opacity:0;transition:opacity .1s ease-out}.list-scrollable-container>.list-scrollable:before{background:transparent linear-gradient(90deg, #000 0%, rgba(0,0,0,0) 100%);left:10px}.list-scrollable-container>.list-scrollable:after{background:transparent linear-gradient(270deg, #000 0%, rgba(0,0,0,0) 100%);right:-10px}.list-scrollable-container>.list-scrollable.scroll-before:before{opacity:.15}.list-scrollable-container>.list-scrollable.scroll-after:after{opacity:.15}.list-scrollable-container>.list-scrollable:after,.list-scrollable-container>.list-scrollable:before{bottom:auto;height:40.5px}.list-scrollable-container>.list-scrollable:before{left:0}.list-scrollable-container>.list-scrollable:after{right:0}.list-scrollable-container>.list-scrollable.scroll-after th,.list-scrollable-container>.list-scrollable.scroll-before th{cursor:move}.list-scrollable-container>.list-scrollable.scroll-after th a,.list-scrollable-container>.list-scrollable.scroll-before th a{cursor:pointer}.list-scrollable-container>.list-scrollable>.list-content{overflow-x:auto}.control-filter .form-check .form-check-input{position:relative;top:1px}.control-filter .form-check label{font-size:14px;color:var(--bs-secondary-color)}.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check,.control-filter>.filter-group>.filter-scope.form-check{padding-left:29px}.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check,.control-filter>.filter-group>.filter-scope.form-check,.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check label,.control-filter>.filter-group>.filter-scope.form-check label{margin-bottom:0}.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check:after,.control-filter>.filter-group>.filter-scope.form-check:after{content:''}.control-filter>.filter-group>.filter-scope.scope-checkbox:hover.form-check label,.control-filter>.filter-group>.filter-scope:hover.form-check label,.control-filter>.filter-group>.filter-scope.scope-checkbox.active.form-check label,.control-filter>.filter-group>.filter-scope.active.form-check label{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope.scope-dropdown,.control-filter>.filter-group>.filter-scope.dropdown{padding:8px 0 4px}.control-filter>.filter-group>.filter-scope.scope-dropdown:after,.control-filter>.filter-group>.filter-scope.dropdown:after{content:''}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container,.control-filter>.filter-group>.filter-scope.dropdown .select2-container{width:100%;display:inline-block;position:relative;top:-2px}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection{height:29px;line-height:29px;padding:0 3px 0 12px;border:none;font-size:12px;border-radius:0;box-shadow:none;background-color:transparent}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection.select2-default,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection.select2-default{font-weight:normal}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection:focus-visible,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection:focus-visible{outline:auto 1px}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .loading-indicator>span,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .loading-indicator>span{top:15px}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container.select2-container--open,.control-filter>.filter-group>.filter-scope.dropdown .select2-container.select2-container--open{border-radius:0;border:none}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection__arrow{font-size:14px;top:1px;right:10px}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection__rendered{padding:0 28px 0 0;font-size:14px;color:var(--bs-secondary-color)}.control-filter>.filter-group>.filter-scope.scope-dropdown:hover .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.dropdown:hover .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.scope-dropdown.active .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.dropdown.active .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.scope-dropdown:hover .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.dropdown:hover .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.scope-dropdown.active .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.dropdown.active .select2-selection__rendered{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope.scope-inline{padding:0;display:flex;align-items:center}.control-filter>.filter-group>.filter-scope.scope-inline:after{content:''}.control-filter-popover .filter-search{min-height:36px;position:relative}.control-filter-popover .filter-search input{height:auto;border:none;border-bottom:1px solid var(--bs-border-color);border-bottom-right-radius:0;border-bottom-left-radius:0;box-shadow:none;background:transparent !important;padding-top:6px;padding-bottom:6px;padding-right:35px}.control-filter-popover .filter-search .close{display:none}.control-filter-popover .filter-search .filter-items,.control-filter-popover .filter-search .filter-active-items{color:var(--bs-secondary-color);font-size:13px}.control-filter-popover .filter-search .filter-items ul,.control-filter-popover .filter-search .filter-active-items ul,.control-filter-popover .filter-search .filter-items li,.control-filter-popover .filter-search .filter-active-items li{list-style-type:none;margin:0;padding:0}.control-filter-popover .filter-search .filter-items li,.control-filter-popover .filter-search .filter-active-items li{transition:color .6s,background-color .3s}.control-filter-popover .filter-search .filter-items a,.control-filter-popover .filter-search .filter-active-items a{text-decoration:none;color:var(--bs-secondary-color);display:block;padding:7px 9px}.control-filter-popover .filter-search .filter-items a:before,.control-filter-popover .filter-search .filter-active-items a:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:4px;position:relative;top:1px;display:inline-block;vertical-align:baseline;text-align:center;border-radius:100px}.control-filter-popover .filter-search .filter-items a:hover,.control-filter-popover .filter-search .filter-active-items a:hover{background-color:var(--oc-selection);color:white}.control-filter-popover .filter-search .filter-items{max-height:200px;overflow:auto}.control-filter-popover .filter-search .filter-items a:before{content:\"\\f067\"}.control-filter-popover .filter-search .filter-items li.loading{padding:7px}.control-filter-popover .filter-search .filter-items li.loading>span{--loader-size:20px;display:block;width:var(--loader-size);height:var(--loader-size);border:2px solid var(--oc-primary-border);border-top-color:var(--oc-accent);border-radius:50%;animation:spin .8s linear infinite}.control-filter-popover .filter-search .filter-items li.animate-enter{animation:fadeInUp .3s}.control-filter-popover .filter-search .filter-buttons{border-top:none}.control-filter-popover .filter-search .filter-active-items{border-top:1px solid var(--bs-border-color)}.control-filter-popover .filter-search .filter-active-items a{font-weight:600;color:var(--bs-body-color)}.control-filter-popover .filter-search .filter-active-items a:before{background-color:var(--bs-secondary-bg);color:var(--bs-body-color);content:\"\\e93e\";left:-1px}.control-filter-popover .filter-search .filter-active-items a:hover:before{color:#c63e26;background-color:white}.control-filter-popover .filter-search .filter-active-items li.animate-enter{animation:fadeInDown .3s}.control-filter-popover .filter-search .filter-active-items li:last-child{border-bottom:1px solid var(--bs-border-color)}.control-filter-popover .filter-box .filter-facet{padding:10px 5px;display:flex}.control-filter-popover .filter-box .filter-facet .facet-item{white-space:nowrap;padding-left:5px;padding-right:5px;line-height:1.8}.control-filter-popover .filter-box .filter-facet .facet-item>span{font-size:12px;color:var(--bs-secondary-color)}.control-filter-popover .filter-box .filter-facet .facet-item.is-grow{flex-grow:1}.control-filter-popover .filter-box .filter-facet+.filter-facet{padding-top:0}.control-filter{padding:0 10px;color:var(--bs-secondary-color);background-color:var(--bs-body-bg);border-top:1px solid var(--bs-border-color);border-bottom:1px solid var(--bs-border-color);font-size:14px}.control-filter a{text-decoration:none;color:var(--bs-secondary-color)}.control-filter>.filter-setup{padding:6px 0}.control-filter>.filter-setup>a>span{margin-left:-2px;margin-right:-2px;display:block;color:var(--oc-toolbar-color);width:24px;height:24px;text-align:center;border-radius:3px}.control-filter>.filter-setup>a>span>i{position:relative;top:2px;font-size:20px}.control-filter>.filter-setup>a:hover>span{color:var(--oc-toolbar-hover-color);background:var(--oc-toolbar-hover-bg)}.control-filter>.filter-group{display:inline-block;vertical-align:middle}.control-filter>.filter-group>.filter-scope{padding:8px;display:block}.control-filter>.filter-group>.filter-scope .filter-label{margin-right:5px}.control-filter>.filter-group>.filter-scope .filter-setting{display:inline-block;margin-right:5px;-webkit-transition:color .6s;transition:color .6s}.control-filter>.filter-group>.filter-scope.loading-indicator-container.in-progress{pointer-events:none;cursor:default}.control-filter>.filter-group>.filter-scope.loading-indicator-container.in-progress .loading-indicator{background:transparent}.control-filter>.filter-group>.filter-scope.loading-indicator-container.in-progress .loading-indicator>span{left:unset;right:0;top:10px;background-color:var(--bs-body-bg);border-radius:50%;margin-top:0;width:20px;height:20px;background-size:15px 15px}.control-filter>.filter-group>.filter-scope:after{font-size:14px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f107\"}.control-filter>.filter-group>.filter-scope.active .filter-setting{padding-left:5px;padding-right:5px;color:#FFF;background-color:var(--bs-success);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:color 1s, background-color 1s;transition:color 1s, background-color 1s}.control-filter>.filter-group>.filter-scope:hover,.control-filter>.filter-group>.filter-scope.active{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope:hover .filter-label,.control-filter>.filter-group>.filter-scope.active .filter-label{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope:hover.active .filter-setting,.control-filter>.filter-group>.filter-scope.active.active .filter-setting{background-color:var(--bs-success)}.control-filter>.filter-group>.filter-has-popover{display:inline-block;padding:10px}.control-filter>.filter-group>.filter-has-popover .filter-setting{display:inline-block;-webkit-transition:color .6s;transition:color .6s}.control-filter>.filter-group>.filter-has-popover:after{font-size:14px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f107\"}.control-filter>.filter-group>.filter-has-popover.active .filter-setting{padding-left:5px;padding-right:5px;color:#FFF;background-color:var(--bs-success);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;transition:color 1s,background-color 1s}.control-filter>.filter-group>.filter-has-popover:hover{color:#000}.control-filter>.filter-group>.filter-has-popover:hover .filter-label{color:var(--bs-secondary-color)}.control-filter>.filter-group>.filter-has-popover:hover.active .filter-setting{background-color:#79c035}.control-filter.is-loading{cursor:wait}.control-filter.is-loading>.filter-group{pointer-events:none;opacity:.7}.control-filter.is-loading>.filter-setup>a{opacity:0}.control-filter.is-loading>.filter-setup:after{--loader-size:20px;content:'';position:absolute;left:50%;top:50%;width:var(--loader-size);height:var(--loader-size);margin-top:calc(var(--loader-size) / -2);margin-left:calc(var(--loader-size) / -2);border:2px solid var(--oc-primary-border);border-top-color:var(--oc-accent);border-radius:50%;animation:spin .8s linear infinite}.control-filter-popover{min-width:275px}.control-filter-popover>.loading-indicator-container>.loading-indicator{border-radius:4px}.control-filter-popover>.loading-indicator-container>.loading-indicator>span{left:10px}.control-filter-popover input[type=\"number\"]{-moz-appearance:textfield}.control-filter-popover input[type=\"number\"]::-webkit-inner-spin-button,.control-filter-popover input[type=\"number\"]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.control-filter-popover .filter-buttons{border-top:1px solid var(--bs-border-color);padding:10px;display:flex;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.control-filter-popover .filter-buttons>div{flex-grow:1}.control-filter-popover .filter-buttons>.btn{text-align:center}.form-preview{padding:20px;margin-bottom:20px;background:var(--oc-primary-bg);border:1px solid var(--oc-primary-border)}.form-preview>.form-group:last-child{padding-bottom:0}.form-preview>.form-group:last-child .form-check{margin-bottom:0}.form-preview.form-flush{border-top:none}.form-preview .control-tabs.primary-tabs>ul.nav-tabs>li a>span.title:before,.form-preview .control-tabs.primary-tabs>div>ul.nav-tabs>li a>span.title:before,.form-preview .control-tabs.primary-tabs>div>div>ul.nav-tabs>li a>span.title:before,.form-preview .control-tabs.primary-tabs>ul.nav-tabs>li a>span.title:after,.form-preview .control-tabs.primary-tabs>div>ul.nav-tabs>li a>span.title:after,.form-preview .control-tabs.primary-tabs>div>div>ul.nav-tabs>li a>span.title:after{background:var(--oc-primary-bg)}.form-preview .control-tabs.primary-tabs>ul.nav-tabs>li.active a:before,.form-preview .control-tabs.primary-tabs>div>ul.nav-tabs>li.active a:before,.form-preview .control-tabs.primary-tabs>div>div>ul.nav-tabs>li.active a:before{background-color:var(--oc-primary-bg)}.form-elements:before,.form-tabless-fields:before,.form-elements:after,.form-tabless-fields:after{content:\" \";display:table}.form-elements:after,.form-tabless-fields:after{clear:both}.form-elements:before,.form-tabless-fields:before,.form-elements:after,.form-tabless-fields:after{content:\" \";display:table}.form-elements:after,.form-tabless-fields:after{clear:both}.form-control{position:relative;-webkit-appearance:none}.form-control:focus{border:1px solid var(--oc-border-focus);box-shadow:none}.form-control.growable,.form-control.is-growable{width:110px}.form-control.growable:focus,.form-control.is-growable:focus,.form-control.growable:active,.form-control.is-growable:active{width:200px !important}@media (max-width:576px){.form-control.growable,.form-control.is-growable{width:40px;text-indent:-999px}.form-control.growable:focus,.form-control.is-growable:focus,.form-control.growable:active,.form-control.is-growable:active{text-indent:0;width:100px !important}.form-control.growable.icon,.form-control.is-growable.icon{padding-right:0 !important}}.form-control.is-searchable{border-radius:100px}.search-input-container{position:relative}.search-input-container:before{position:absolute;width:16px;height:16px;background-position:0 -38px;z-index:1;right:8px;top:11px}.form-group{position:relative;box-sizing:border-box}.form-group:empty{display:none}.form-group,.form-group.layout-item{padding-bottom:20px;margin-bottom:0}.form-group.is-required>label:after{background-color:var(--bs-danger);width:5px;height:5px;margin-left:3px;vertical-align:super;font-size:60%;content:\"\";display:inline-block;border-radius:8px}.form-group .form-translatable{display:inline-block;position:relative;height:20px;width:25px;border-radius:5px;background-color:var(--oc-input-translatable-bg);color:var(--oc-input-translatable-color);margin-bottom:-5px;margin-left:2px}.form-group .form-translatable i{font-size:16px;position:absolute;top:2px;left:4px;cursor:pointer}.form-group .form-translatable.no-label{position:absolute;top:1px;right:0;left:auto;z-index:2}.form-group.span-full{width:100%;float:left}.form-group.span-left{float:left;width:48.5%;clear:left}.form-group.span-right{float:right;width:48.5%;clear:right}.form-group.clear-full{clear:both}.form-group.clear-left{clear:left}.form-group.clear-right{clear:right}.form-group.layout-relative{padding-bottom:0}.form-group.checkbox-field{padding-bottom:5px}.form-group.checkbox-field>.form-check{margin-bottom:10px}.form-group.radio-field>.form-check{margin-bottom:10px}.form-group.number-field>.form-control{text-align:right}.form-group.radio-align{padding-left:23px;margin-top:-20px}.form-group.checkbox-align{padding-left:23px;margin-top:-5px}.form-group.field-align-above{margin-top:-5px}.form-group.field-slim.span-left,.form-group.field-slim.span-right{width:50%}.form-group.field-indent{padding-left:23px}.form-group.input-sidebar-control{padding-right:35px}.form-group.input-sidebar-control .sidebar-control{position:absolute;right:8px;top:34px;font-size:16px;color:#C4C4C4}.form-group.input-sidebar-control .sidebar-control:hover,.form-group.input-sidebar-control .sidebar-control:focus{text-decoration:none;color:var(--bs-link-color);outline:none}.form-horizontal .col-horizontal{width:155px}.form-horizontal .form-group.checkbox-field{padding-bottom:20px}.form-group-preview .form-control{background-color:var(--oc-form-control-disabled-bg);height:auto;min-height:38px;word-break:break-word;box-shadow:none}.form-group-preview .custom-checkbox label,.form-group-preview .custom-radio label{cursor:default}.col-form-label,.form-label{font-weight:600}.form-text{margin-bottom:0}.form-text.before-field{margin-top:-0.135rem;margin-bottom:.385rem}.control-disabled .form-text{opacity:.5}.input-with-icon{position:relative}.input-with-icon>.icon{position:absolute;z-index:10;padding:10px;pointer-events:none;color:#bdbdbd;font-size:15px;margin-top:1px}.input-with-icon.right-align>.icon{right:0}.input-with-icon.right-align input{padding-right:32px !important}.input-with-icon.left-align>.icon{left:0}.input-with-icon.left-align input{padding-left:32px !important}.input-with-icon.size-sm>.icon{margin-top:0;padding:5px 8px}.input-no-spinner{-moz-appearance:textfield}.input-no-spinner::-webkit-inner-spin-button,.input-no-spinner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.field-section{border-bottom:1px solid var(--bs-border-color);padding-top:3px;padding-bottom:7px}.field-section>h4{font-weight:400;font-size:1.3rem}.field-section>p:first-child,.field-section>h4:first-child{margin:0}.field-section.is-collapsible{cursor:pointer}.field-section.is-collapsible>h4:before{display:inline-block;vertical-align:baseline;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f077\";font-size:12px;margin:2px 8px 0;float:right;color:rgba(0,0,0,0.4);-webkit-transition:all .3s;transition:all .3s;-webkit-transform:scale(1, 1);transform:scale(1, 1)}.field-section.is-collapsible:hover{border-bottom:1px solid #b0bdcd}.field-section.is-collapsible:hover>h4:before{color:inherit}.field-action{border-bottom:1px solid var(--bs-border-color);padding:10px 0 5px;margin-top:-20px}.field-action h5{margin-bottom:.35rem;margin-top:.75rem;font-weight:400;font-size:1rem}.field-action p{color:var(--bs-secondary-color);margin-bottom:0;font-size:.9rem}.field-action .field-action-button{margin-top:15px;margin-bottom:10px}@media (min-width:992px){.field-action .field-action-button{text-align:right}}.form-group.section-field.collapsed .field-section.is-collapsible>h4:before{-webkit-transform:scale(1, -1);transform:scale(1, -1)}.field-horizontalrule hr{height:1px;background:#000;margin:0;opacity:.1}.field-textarea{resize:vertical}.field-textarea.size-tiny{min-height:50px}.field-textarea.size-small{min-height:100px}.field-textarea.size-large{min-height:200px}.field-textarea.size-huge{min-height:250px}.field-textarea.size-giant{min-height:350px}.field-checkboxlist .field-checkboxlist-inner{border-radius:4px;background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color)}.field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner{padding:15px 15px 2px 15px}.field-checkboxlist .checkboxlist-controls{padding:3px;font-size:0;white-space:nowrap;background:var(--oc-form-control-bg);border-top:1px solid var(--bs-border-color);border-left:1px solid var(--bs-border-color);border-right:1px solid var(--bs-border-color);border-top-left-radius:4px;border-top-right-radius:4px}.field-checkboxlist .checkboxlist-controls+.field-checkboxlist-inner{border-top-left-radius:0;border-top-right-radius:0;border-top-color:var(--oc-toolbar-border)}.field-checkboxlist .form-check{margin-bottom:10px}.field-checkboxlist .checkboxlist-group{margin:0;padding-left:1.1rem;list-style:none}.field-checkboxlist .checkboxlist-group:not(:has(*)),.field-checkboxlist .checkboxlist-group-item:not(:has(*)){display:none}.field-checkboxlist-scrollable{height:300px}.field-checkboxlist-scrollable .form-check{margin-left:15px;margin-top:15px;margin-bottom:10px}.field-checkboxlist-scrollable .form-check~.form-check{margin-top:0}.form-group.inline-options .field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner{padding:15px 15px 5px 15px}.form-group.inline-options .form-check{display:inline-block;margin-right:15px}.form-buttons{padding-bottom:20px;font-size:0;width:100%}.form-buttons:before,.form-buttons:after{content:\" \";display:table}.form-buttons:after{clear:both}.form-buttons:before,.form-buttons:after{content:\" \";display:table}.form-buttons:after{clear:both}.form-buttons.is-horizontal{padding-left:155px}.form-buttons .btn{margin-right:7px}.form-buttons .btn.no-margin-right{margin-right:0}.form-buttons .btn-group{margin-right:7px}.form-buttons .btn-group .btn{margin-right:0}.form-buttons .pull-right{margin-right:0;margin-left:7px}.form-buttons.buttons-offset{padding-left:20px}body.slim-container .form-buttons{padding:0 20px 20px}body .modal-footer .form-buttons{padding:0}@media (max-width:769px){.form-group.span-left,.form-group.span-right{width:100%;clear:none}}body.compact-container .form-fatal-error{padding:1rem 20px 0 20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border:none}.select2-dropdown{z-index:10400}[data-control~=toolbar] .form-control{display:inline-block;margin-right:15px}[data-control~=toolbar] input[type=text].form-control,[data-control~=toolbar] label{position:relative;top:5px}[data-control~=toolbar] label{margin-right:7px}[data-control~=toolbar] label.standalone{margin-right:15px}[data-control~=toolbar] .select2-container{display:inline-block;width:auto;height:36px;margin-right:15px}[data-control~=toolbar] .select2-container .select2-selection__rendered{line-height:17px}[data-control~=toolbar] .select2-container .select2-selection--single{height:36px}[data-control~=toolbar] select.form-control.custom-select{display:none}.control-simplelist{padding:20px 20px 2px 20px;margin-bottom:20px;border:1px solid var(--bs-border-color);background:var(--oc-form-control-bg);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.control-simplelist ul{padding-left:15px}.control-simplelist.form-control ul{margin-bottom:0}.control-simplelist.form-control li{padding-top:5px;padding-bottom:5px}.control-simplelist.with-icons ul,.control-simplelist.with-checkboxes ul,.control-simplelist.is-divided ul,.control-simplelist.is-selectable ul{list-style-type:none;padding-left:0}.control-simplelist.with-icons li>i{margin-right:5px}.control-simplelist.with-checkboxes li div.custom-checkbox,.control-simplelist.with-checkboxes li div.form-check{display:inline-block}.control-simplelist.with-checkboxes li:first-child{margin-top:0}.control-simplelist.with-checkboxes li:last-child div.custom-checkbox,.control-simplelist.with-checkboxes li:last-child div.form-check{margin-bottom:0}.control-simplelist.with-checkboxes li:last-child div.custom-checkbox label,.control-simplelist.with-checkboxes li:last-child div.form-check label{margin-bottom:5px}.control-simplelist.is-sortable li{position:relative;padding:2px 0 2px 24px}.control-simplelist.is-sortable li .drag-handle{width:24px;height:24px;cursor:move;text-align:center;color:var(--oc-toolbar-color);background:var(--oc-toolbar-bg);border-radius:3px;text-decoration:none;position:absolute;top:1px;left:-6px}.control-simplelist.is-sortable li .drag-handle>i{font-size:24px}.control-simplelist.is-sortable li.sortable-chosen.sortable-ghost{position:relative}.control-simplelist.is-sortable li.sortable-chosen.sortable-ghost .drag-handle{background:var(--oc-toolbar-hover-bg)}.control-simplelist.is-scrollable{height:200px}.control-simplelist.is-scrollable.size-tiny{min-height:250px}.control-simplelist.is-scrollable.size-small{min-height:300px}.control-simplelist.is-scrollable.size-large{min-height:400px}.control-simplelist.is-scrollable.size-huge{min-height:450px}.control-simplelist.is-scrollable.size-giant{min-height:550px}.control-simplelist.is-divided,.control-simplelist.is-selectable,.control-simplelist.is-selectable-box{padding:0}.control-simplelist.is-divided li .heading,.control-simplelist.is-selectable li .heading,.control-simplelist.is-selectable-box li .heading{font-size:14px;font-weight:600;margin-top:10px}.control-simplelist.is-divided li,.control-simplelist.is-selectable li{padding:5px 10px;border-bottom:1px solid var(--bs-border-color)}.control-simplelist.is-divided li:last-child,.control-simplelist.is-selectable li:last-child{border-bottom:none}.control-simplelist.is-selectable li a{padding:5px 10px;margin:-5px -10px;display:block;color:var(--bs-body-color)}.control-simplelist.is-selectable li:hover{background:var(--bs-primary);cursor:pointer}.control-simplelist.is-selectable li:hover,.control-simplelist.is-selectable li:hover a,.control-simplelist.is-selectable li:hover .heading,.control-simplelist.is-selectable li:hover .description{color:white}.control-simplelist.is-selectable li:hover a{text-decoration:none}.control-simplelist.is-selectable li.active a{background:#f0f0f0}.control-simplelist.is-selectable li.active a:hover{background:var(--bs-primary)}.control-simplelist.is-selectable-box{padding-top:15px;margin-bottom:0;background:transparent}.control-simplelist.is-selectable-box.is-flush{padding:0;margin-left:-8px}.control-simplelist.is-selectable-box.is-flush ul{padding-left:0}.control-simplelist.is-selectable-box li{width:155px;margin:8px;display:inline-block;text-align:center;vertical-align:top}.control-simplelist.is-selectable-box li a{text-decoration:none;display:block;color:var(--bs-body-color)}.control-simplelist.is-selectable-box li a .box{display:block;width:155px;height:155px;border:3px solid rgba(0,0,0,0.1);position:relative;background:var(--oc-form-control-bg);-webkit-transition:border .3s ease;transition:border .3s ease}.control-simplelist.is-selectable-box li a .image{display:block;width:56px;height:56px;position:absolute;top:50%;left:50%;margin-top:-28px;margin-left:-28px}.control-simplelist.is-selectable-box li a .image>i{font-size:56px;color:rgba(0,0,0,0.25)}.control-simplelist.is-selectable-box li a .heading{margin:7px 0;padding:0}.control-simplelist.is-selectable-box li a .description{font-size:12px}.control-simplelist.is-selectable-box li a:hover .box{border-color:rgba(0,0,0,0.2)}.control-simplelist.is-selectable-box li a:hover .image>i{color:rgba(0,0,0,0.45)}.control-simplelist.is-selectable-box li.active a .box{border-color:var(--oc-selection)}.control-simplelist.is-selectable-box li.active a .image>i{color:rgba(0,0,0,0.45)}.list-preview .control-simplelist.is-selectable ul{margin-bottom:0}.drag-noselect{user-select:none}.control-scrollbar{position:relative;overflow:hidden;height:100%}.control-scrollbar>.scrollbar-scrollbar{position:absolute;z-index:100}.control-scrollbar>.scrollbar-scrollbar .scrollbar-track{background-color:transparent;position:relative;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.control-scrollbar>.scrollbar-scrollbar .scrollbar-track .scrollbar-thumb{background-color:rgba(0,0,0,0.35);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;cursor:pointer;overflow:hidden;position:absolute}.control-scrollbar>.scrollbar-scrollbar.disabled{display:none !important}.control-scrollbar.vertical>.scrollbar-scrollbar{right:0;margin-right:5px;width:6px}.control-scrollbar.vertical>.scrollbar-scrollbar .scrollbar-track{height:100%;width:6px}.control-scrollbar.vertical>.scrollbar-scrollbar .scrollbar-track .scrollbar-thumb{height:20px;width:6px;top:0;left:0}.control-scrollbar.vertical>.scrollbar-scrollbar:active,.control-scrollbar.vertical>.scrollbar-scrollbar:hover{width:8px;-webkit-transition:width .3s;transition:width .3s}.control-scrollbar.vertical>.scrollbar-scrollbar:active .scrollbar-track,.control-scrollbar.vertical>.scrollbar-scrollbar:hover .scrollbar-track,.control-scrollbar.vertical>.scrollbar-scrollbar:active .scrollbar-thumb,.control-scrollbar.vertical>.scrollbar-scrollbar:hover .scrollbar-thumb{width:8px;-webkit-transition:width .3s;transition:width .3s}.control-scrollbar.horizontal>.scrollbar-scrollbar{margin:0 0 5px;clear:both;height:6px}.control-scrollbar.horizontal>.scrollbar-scrollbar .scrollbar-track{width:100%;height:6px}.control-scrollbar.horizontal>.scrollbar-scrollbar .scrollbar-track .scrollbar-thumb{height:6px;margin:2px 0;left:0;top:0}.control-scrollbar.horizontal>.scrollbar-scrollbar:active,.control-scrollbar.horizontal>.scrollbar-scrollbar:hover{height:8px;-webkit-transition:height .3s;transition:height .3s}.control-scrollbar.horizontal>.scrollbar-scrollbar:active .scrollbar-track,.control-scrollbar.horizontal>.scrollbar-scrollbar:hover .scrollbar-track,.control-scrollbar.horizontal>.scrollbar-scrollbar:active .scrollbar-thumb,.control-scrollbar.horizontal>.scrollbar-scrollbar:hover .scrollbar-thumb{height:8px;-webkit-transition:height .3s;transition:height .3s}@media (pointer:coarse){.control-scrollbar{overflow:auto}}.no-touch .control-scrollbar>.scrollbar-scrollbar{opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.no-touch .control-scrollbar:active>.scrollbar-scrollbar,.no-touch .control-scrollbar:hover>.scrollbar-scrollbar{opacity:1}.scrollable-panel-container{position:relative}.scrollable-panel-container:before{content:'';position:absolute;top:0;left:0;width:100%;height:0;background:transparent url(../images/scrollable-panel-shadow.png) repeat-x left top;transition:height .1s,width .1s}.scrollable-panel-container.scrolled:before{height:9px}.scrollable-panel-container.horizontal:before{top:0;width:0;height:100%}.scrollable-panel-container.horizontal.scrolled:before:before{width:9px;background:transparent url(../images/scrollable-panel-shadow-horizontal.png) repeat-x left top}.scrollable-panel-container .scrollable{position:absolute;left:0;top:0;height:100%;width:100%}.control-filelist p.no-data{padding:22px 0;margin:0;color:#666666;font-size:14px;text-align:center;font-weight:normal;border-radius:4px}.control-filelist ul{padding:0;margin:0}.control-filelist ul li{font-weight:normal;line-height:150%;position:relative;list-style:none}.control-filelist ul li a:hover{background:var(--oc-toolbar-hover-bg)}.control-filelist ul li.active>a{background:var(--oc-selection);position:relative}.control-filelist ul li.active>a span.title,.control-filelist ul li.active>a span.description{color:#ffffff}.control-filelist ul li a{display:block;padding:10px 45px 10px 20px;outline:none}.control-filelist ul li a:hover,.control-filelist ul li a:focus,.control-filelist ul li a:active{text-decoration:none}.control-filelist ul li a span{display:block}.control-filelist ul li a span.title{font-weight:normal;color:var(--oc-toolbar-color);font-size:14px}.control-filelist ul li a span.description{color:var(--oc-primary-color);font-size:12px;white-space:nowrap;font-weight:normal;overflow:hidden;text-overflow:ellipsis}.control-filelist ul li a span.description strong{color:var(--oc-toolbar-color);font-weight:normal}.control-filelist ul li.group>h4,.control-filelist ul li.group>div.group>h4{font-weight:normal;font-size:14px;margin-top:0;margin-bottom:0;position:relative}.control-filelist ul li.group>h4 a,.control-filelist ul li.group>div.group>h4 a{padding:10px 20px 10px 53px;color:var(--oc-toolbar-color);position:relative;outline:none}.control-filelist ul li.group>h4 a:hover,.control-filelist ul li.group>div.group>h4 a:hover{background:transparent}.control-filelist ul li.group>h4 a:before,.control-filelist ul li.group>div.group>h4 a:before,.control-filelist ul li.group>h4 a:after,.control-filelist ul li.group>div.group>h4 a:after{width:10px;height:10px;display:block;position:absolute;top:1px}.control-filelist ul li.group>h4 a:after,.control-filelist ul li.group>div.group>h4 a:after{left:33px;top:9px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f114\";color:#a1aab1;font-size:16px}.control-filelist ul li.group>h4 a:before,.control-filelist ul li.group>div.group>h4 a:before{left:20px;top:9px;color:#cfcfcf;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f0da\";transform:rotate(90deg) translate(5px, 0);transition:all .1s ease}.control-filelist ul li.group>ul>li>a{padding-left:52px}.control-filelist ul li.group>ul>li.group{padding-left:20px}.control-filelist ul li.group>ul>li.group>ul>li>a{padding-left:324px;margin-left:-270px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:297px;margin-left:-243px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:270px;margin-left:-216px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:243px;margin-left:-189px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:216px;margin-left:-162px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:189px;margin-left:-135px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:162px;margin-left:-108px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:135px;margin-left:-81px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:108px;margin-left:-54px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:81px;margin-left:-27px}.control-filelist ul li.group[data-status=collapsed]>h4 a:before,.control-filelist ul li.group[data-status=collapsed]>div.group>h4 a:before{transform:rotate(0deg) translate(3px, 0)}.control-filelist ul li.group[data-status=collapsed]>ul,.control-filelist ul li.group[data-status=collapsed]>div.subitems{display:none}.control-filelist ul li>div.controls{position:absolute;right:19px;top:6px}.control-filelist ul li>div.controls .dropdown{width:14px;height:21px}.control-filelist ul li>div.controls .dropdown.open a.control{display:block!important}.control-filelist ul li>div.controls .dropdown.open a.control:before{visibility:visible;display:block}.control-filelist ul li>div.controls a.control{color:var(--oc-toolbar-color);font-size:14px;visibility:hidden;overflow:hidden;width:14px;height:21px;display:none;text-decoration:none;cursor:pointer;padding:0;opacity:.5}.control-filelist ul li>div.controls a.control:before{visibility:visible;display:block;margin-right:0}.control-filelist ul li>div.controls a.control:hover{opacity:1}.control-filelist ul li:hover>div.controls,.control-filelist ul li:hover>a.control{display:block!important}.control-filelist ul li:hover>div.controls>a.control,.control-filelist ul li:hover>a.control>a.control{display:block!important}.control-filelist ul li .checkbox{position:absolute;top:-5px;right:0}.control-filelist ul li .checkbox label{margin-right:0}.control-filelist ul li .checkbox label:before{border-color:#cccccc}.control-filelist.single-line ul li a span.title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.control-filelist.filelist-hero ul li{background:var(--oc-primary-bg);border-bottom:none}.control-filelist.filelist-hero ul li>a{padding:11px 45px 10px 50px;font-size:13px;border-bottom:1px solid var(--oc-toolbar-border)}.control-filelist.filelist-hero ul li>a span.title{font-size:14px;font-weight:normal;color:var(--oc-primary-color)}.control-filelist.filelist-hero ul li>a span.description{font-size:13px}.control-filelist.filelist-hero ul li>a .list-icon{position:absolute;left:14px;top:9px;font-size:22px;color:#b7c0c2}.control-filelist.filelist-hero ul li>a .list-description{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:16px;color:var(--oc-primary-color);cursor:help;opacity:.7;transition:opacity .15s ease}.control-filelist.filelist-hero ul li>a .list-description:hover{opacity:1}.control-filelist.filelist-hero ul li>a:hover{background:var(--oc-dropdown-hover-bg);border-bottom:1px solid var(--oc-dropdown-hover-bg) !important}.control-filelist.filelist-hero ul li>a:hover span.title,.control-filelist.filelist-hero ul li>a:hover span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>a:hover .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>a:hover .list-description{color:var(--oc-dropdown-hover-color)}.control-filelist.filelist-hero ul li>a:active{background:var(--oc-dropdown-active-bg);border-bottom:1px solid var(--oc-dropdown-active-bg) !important}.control-filelist.filelist-hero ul li>a:active span.title,.control-filelist.filelist-hero ul li>a:active span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>a:active .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>a:active .list-description{color:var(--oc-dropdown-hover-color)}.control-filelist.filelist-hero ul li .checkbox{top:-4px;right:0}.control-filelist.filelist-hero ul li.no-description .list-icon{top:10px}.control-filelist.filelist-hero ul li.has-description>a{padding-right:40px}.control-filelist.filelist-hero ul li.active>a{border-bottom:1px solid var(--oc-selection)}.control-filelist.filelist-hero ul li.active>a:after{display:none}.control-filelist.filelist-hero ul li.active>a>span.borders:before{content:' ';position:absolute;width:100%;height:1px;display:block;left:0;background-color:var(--oc-selection)}.control-filelist.filelist-hero ul li.active>a>span.borders:before{top:-1px}.control-filelist.filelist-hero ul li.active>a:hover>span.borders:before{background-color:var(--oc-dropdown-hover-bg)}.control-filelist.filelist-hero ul li.active>a:active>span.borders:before{background-color:var(--oc-dropdown-active-bg)}.control-filelist.filelist-hero ul li.active>a span.title,.control-filelist.filelist-hero ul li.active>a span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li.active>a .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>h4{padding-top:7px;padding-bottom:6px;border-bottom:1px solid var(--oc-toolbar-border)}.control-filelist.filelist-hero ul li>div.controls{display:none;position:absolute;right:16px;top:15px}.control-filelist.filelist-hero ul li>div.controls>a.control{width:16px;height:23px;background:transparent;overflow:hidden;display:inline-block;color:var(--oc-dropdown-hover-color) !important;padding:0}.control-filelist.filelist-hero ul li>div.controls>a.control:before{font-size:17px}.control-filelist.filelist-hero ul li:hover>div.controls{display:block}.control-filelist.filelist-hero ul li.separator{position:relative;border-bottom:1px solid var(--bs-border-color);padding:12px 15px 13px 15px}.control-filelist.filelist-hero ul li.separator:before{z-index:31;content:'';display:block;width:0;height:0;border-left:9.5px solid transparent;border-right:9.5px solid transparent;border-top:11px solid var(--oc-primary-bg);border-bottom-width:0;position:absolute;left:13px;bottom:-8px}.control-filelist.filelist-hero ul li.separator:after{z-index:30;content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid var(--bs-border-color);border-bottom-width:0;position:absolute;left:14px;bottom:-9px}.control-filelist.filelist-hero ul li.separator h5{color:var(--bs-heading-color);font-size:14px;margin:0;font-weight:normal;padding:0}.control-filelist.filelist-hero ul>li.group>ul>li>a{padding-left:66px}.control-filelist.filelist-hero.single-level ul li:hover{background:var(--oc-dropdown-hover-bg)}.control-filelist.filelist-hero.single-level ul li:hover>a{background:var(--oc-dropdown-hover-bg);border-bottom:1px solid var(--oc-dropdown-hover-bg) !important}.control-filelist.filelist-hero.single-level ul li:hover>a span.title,.control-filelist.filelist-hero.single-level ul li:hover>a span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero.single-level ul li:hover>a .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero.single-level ul li:active{background:var(--oc-dropdown-active-bg)}.control-filelist.filelist-hero.single-level ul li:active>a{background:var(--oc-dropdown-active-bg);border-bottom:1px solid var(--oc-dropdown-active-bg) !important}.control-filelist.filelist-hero.single-level ul li:active>a span.title,.control-filelist.filelist-hero.single-level ul li:active>a span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero.single-level ul li:active>a .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.snippet-list li>a{position:relative;color:var(--oc-toolbar-color)}.control-filelist.snippet-list li>a:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e94b\";font-size:19.5px;position:absolute;width:17px;height:19px;left:18px;top:12px}.control-filelist.snippet-list li>a:hover:before{color:var(--oc-dropdown-hover-color)}.control-filelist.snippet-list li.group ul li>a:before{left:34px}.oc-progress-bar{background-color:var(--oc-accent, #0076ff)}.control-scrollpanel{position:relative;background:var(--bs-tertiary-bg)}.control-scrollpanel .control-scrollbar.vertical>.scrollbar-scrollbar{right:0}.tooltip .tooltip-inner{text-align:left;padding:5px 8px}.tooltip.show{opacity:1}.status-indicator{width:10px;height:10px;border-radius:20px;display:inline-block;margin-right:3px;border:1px solid rgba(var(--bs-body-bg-rgb), .9)}.oc-logo-white{background-image:url(../images/october-logo-white.svg);background-position:50% 50%;background-repeat:no-repeat;background-size:contain}.oc-logo,.october-cms-logo-grey{background-image:url(../images/october-logo.svg);background-position:50% 50%;background-repeat:no-repeat;background-size:contain}.layout.control-tabs.oc-logo-transparent:not(.has-tabs),.flex-layout-column.oc-logo-transparent:not(.has-tabs),.layout-cell.oc-logo-transparent{background-size:auto 38px;background-repeat:no-repeat;background-image:url(../images/october-logo.svg);background-position:50% 50%;position:relative}.report-widget{padding:15px;background:var(--oc-popup-bg);box-sizing:border-box;border-radius:6px;font-size:14px}.report-widget h3{font-size:14px;color:#7e8c8d;text-transform:uppercase;font-weight:600;margin-top:0;margin-bottom:30px}.report-widget .height-100{height:100px}.report-widget .height-200{height:200px}.report-widget .height-300{height:300px}.report-widget .height-400{height:400px}.report-widget .height-500{height:500px}.report-widget p.report-description{margin-bottom:0;margin-top:15px;font-size:12px;line-height:190%;color:#7e8c8d}.report-widget a:not(.btn){color:#7e8c8d;text-decoration:none}.report-widget a:not(.btn):hover{color:var(--bs-link-color);text-decoration:none}.report-widget p.flash-message.static{margin-bottom:0}.report-widget .icon-circle.success,.report-widget .icon-circle-full.success{color:var(--bs-success)}.report-widget .icon-circle.primary,.report-widget .icon-circle-full.primary{color:var(--bs-primary)}.report-widget .icon-circle.warning,.report-widget .icon-circle-full.warning{color:var(--bs-warning)}.report-widget .icon-circle.danger,.report-widget .icon-circle-full.danger{color:var(--bs-danger)}.report-widget .icon-circle.info,.report-widget .icon-circle-full.info{color:var(--bs-info)}.control-treelist ol{padding:0;margin:0;list-style:none}.control-treelist ol ol{margin:0;margin-left:15px;padding-left:15px;border-left:1px solid #dbdee0}.control-treelist>ol>li>div.record:before{display:none}.control-treelist li{margin:0;padding:0}.control-treelist li>div.record{margin:0;font-size:14px;margin-bottom:5px;position:relative;display:block}.control-treelist li>div.record:before{color:#bdc3c7;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f10c\";font-size:6px;position:absolute;left:-18px;top:11px}.control-treelist li>div.record>a.move{display:inline-block;padding:7px 0 7px 10px;text-decoration:none;color:#bdc3c7}.control-treelist li>div.record>a.move:hover{color:rgba(215,225,234,0.7)}.control-treelist li>div.record>a.move:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f0c9\"}.control-treelist li>div.record>span{color:var(--bs-table-color);display:inline-block;padding:7px 15px 7px 5px}.control-treelist li.dragged{position:absolute;z-index:2000;width:auto !important;height:auto !important}.control-treelist li.dragged>div.record{opacity:.5;background:rgba(215,225,234,0.7) !important}.control-treelist li.dragged>div.record>a.move:before,.control-treelist li.dragged>div.record>span{color:white}.control-treelist li.dragged>div.record:before{display:none}.control-treelist li.placeholder{display:inline-block;position:relative;background:rgba(215,225,234,0.7) !important;height:25px;margin-bottom:5px}.control-treelist li.placeholder:before{display:block;position:absolute;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f053\";color:#d35714;left:-10px;top:8px;z-index:2000}html .sidenav-tree{background:var(--oc-settings-bg)}.sidenav-tree{width:300px;flex-shrink:0;border-right:1px solid var(--oc-primary-border)}.sidenav-tree .sidenav-tree-scroll-canvas{position:absolute;top:0;bottom:0;left:0;right:0}.sidenav-tree .settings-search-toolbar-item{display:block;background:var(--oc-form-control-bg);position:relative}.sidenav-tree .settings-search-toolbar-item:before{display:block;width:15px;height:15px;position:absolute;background-position:-238px 0;top:13px;right:15px;font-size:0}.sidenav-tree .settings-search-toolbar-item input.form-control{border:none;outline:none;padding:1px 35px 1px 10px;border-bottom:1px solid var(--oc-primary-border);height:40px;background:transparent;border-radius:0}.sidenav-tree .settings-search-toolbar-item input.form-control.search{background-position:right -78px}.sidenav-tree ul{padding:0;margin:0;list-style:none}.sidenav-tree div.scrollbar-thumb{background:rgba(0,0,0,0.2) !important}.sidenav-tree ul.top-level>li[data-status=collapsed]>div.group h3:before{transform:rotate(0deg) translate(2px, -2px)}.sidenav-tree ul.top-level>li[data-status=collapsed]>div.group:before,.sidenav-tree ul.top-level>li[data-status=collapsed]>div.group:after{display:none}.sidenav-tree ul.top-level>li[data-status=collapsed] ul{display:none}.sidenav-tree ul.top-level>li>div.group{position:relative;position:sticky;top:0;z-index:1}.sidenav-tree ul.top-level>li>div.group h3{user-select:none;font-size:14px;font-weight:600;padding:9px 15px 7px 25px;margin:0;position:relative;cursor:pointer}.sidenav-tree ul.top-level>li>div.group h3:before{display:block;position:absolute;width:10px;height:10px;left:10px;top:10px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f105\";transform:rotate(90deg) translate(5px, -3px);transition:all .1s ease;font-size:16px}.sidenav-tree ul.top-level>li>ul li{padding:5px}.sidenav-tree ul.top-level>li>ul li a{display:block;position:relative;padding:10px 5px 15px 44px;text-decoration:none !important;border-radius:6px}.sidenav-tree ul.top-level>li>ul li a i{position:absolute;left:11px;top:11px;font-size:22px}.sidenav-tree ul.top-level>li>ul li a span{display:block;line-height:150%}.sidenav-tree ul.top-level>li>ul li a span.header{margin-bottom:3px}.sidenav-tree ul.top-level>li>ul li a span.description{font-size:.875em}.sidenav-tree ul.top-level>li>ul li a:hover,.sidenav-tree ul.top-level>li>ul li.active a{opacity:1;text-decoration:none}.system-home-link{display:block;padding:13px 15px;background:var(--bs-secondary);color:white;font-size:14px;line-height:14px;text-decoration:none}.system-home-link i{display:inline-block;margin-right:10px}.system-home-link i:before{content:'';width:24px;height:11px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-52px 0}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.system-home-link i:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}.system-home-link:hover{color:white;text-decoration:none}.system-home-link.back-link-other{display:none;margin-bottom:20px}@media (max-width:768px){.system-home-link.back-link-other{display:block}}.layout-container .system-home-link.back-link-other{margin:-20px -20px 20px -20px}body.slim-container .layout-container .system-home-link.back-link-other{margin:-20px 0 20px 0}body.compact-container .layout-container .system-home-link.back-link-other{margin:0}@media (max-width:768px){.sidenav-tree{border-right:none;width:100%;height:auto;display:none !important}body.has-sidenav-tree #layout-body{display:block}}body.sidenav-tree-expanded #layout-body{display:none !important}body.sidenav-tree-expanded .sidenav-tree{display:block !important;margin:0 auto;border-right:none;border-left:none;flex-shrink:inherit;width:100%;padding:30px 10px 50px 10px}body.sidenav-tree-expanded .sidenav-tree .scrollbar-scrollbar{display:none !important}body.sidenav-tree-expanded .sidenav-tree .system-home-link{display:none !important}body.sidenav-tree-expanded .sidenav-tree .sidenav-tree-scroll-canvas{position:relative}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>div.group{margin-top:10px}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>div.group h3{background:transparent}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:stretch;align-content:stretch}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li{display:inline-block;padding:10px;width:350px}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li a{background:var(--oc-settings-item);padding-top:12px;padding-right:15px;padding-bottom:15px;padding-left:54px;min-height:100px;height:100%;overflow:hidden}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li a i{top:15px;left:12px;font-size:28px}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li a:hover{background:var(--oc-settings-hover-bg)}body.sidenav-tree-expanded .settings-search-toolbar-item{margin:0px 10px 10px 10px;border-radius:20px !important}body.sidenav-tree-expanded .settings-search-toolbar-item input.form-control{border:1px solid var(--bs-border-color);border-radius:20px !important;padding-left:15px;line-height:40px;height:40px}body.sidenav-tree-expanded .settings-search-toolbar-item input.form-control:focus{border-color:var(--oc-border-focus)}.sidenav-tree ul.top-level>li>div.group h3{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>div.group h3:before{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a span.header{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a span.description{color:var(--oc-settings-color);opacity:.7}.sidenav-tree ul.top-level>li>ul li a:hover{background:var(--oc-settings-hover-bg);color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a:hover span.header{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a:hover span.description{color:var(--oc-settings-color);opacity:1}.sidenav-tree ul.top-level>li>ul li.active a{color:var(--oc-settings-active-color);background:var(--oc-settings-active-bg)}.sidenav-tree ul.top-level>li>ul li.active a span.header{color:var(--oc-settings-active-color)}.sidenav-tree ul.top-level>li>ul li.active a span.description{color:var(--oc-settings-active-color);opacity:1}@media (max-width:768px){.sidenav-tree-expanded #layout-body{display:none !important}}@media (max-width:767px){body.sidenav-tree-expanded .sidenav-tree{width:100%}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li{width:100%}}body:not(.sidenav-tree-expanded) .sidenav-tree .is-inactive-group{display:none}body:not(.sidenav-tree-expanded) .sidenav-tree.is-searching .is-inactive-group{display:block}div.panel,div.media-panel{padding:20px}div.panel.no-padding,div.media-panel.no-padding{padding:0}div.panel.padding-top,div.media-panel.padding-top{padding-top:20px}div.panel.padding-less,div.media-panel.padding-less{padding:15px}div.panel.transparent,div.media-panel.transparent{background:transparent}div.panel.border-left,div.media-panel.border-left{border-left:1px solid var(--oc-primary-border)}div.panel.border-right,div.media-panel.border-right{border-right:1px solid var(--oc-primary-border)}div.panel.border-bottom,div.media-panel.border-bottom{border-bottom:1px solid var(--oc-primary-border)}div.panel.border-top,div.media-panel.border-top{border-top:1px solid var(--oc-primary-border)}div.panel h3.section,div.media-panel h3.section,div.panel>label,div.media-panel>label{color:var(--oc-primary-color);font-size:13px;font-weight:600}div.panel>label,div.media-panel>label{margin-bottom:5px}div.panel .nav.selector-group,div.media-panel .nav.selector-group{margin:0 -20px 20px -20px}.nav.selector-group{font-size:13px;letter-spacing:.01em;margin-bottom:20px}.nav.selector-group li{padding:0 3px;margin:0}.nav.selector-group li a{padding:7px 20px 7px 23px;color:var(--oc-toolbar-color);border-radius:4px}.nav.selector-group li a:hover{background-color:var(--oc-toolbar-hover-bg)}.nav.selector-group li.active a{background:var(--oc-selection);padding-left:20px;color:white}.nav.selector-group li i[class^=\"icon-\"]{font-size:17px;margin-right:6px;position:relative;top:1px}ul.tree-path{list-style:none;padding:0;margin-bottom:0}ul.tree-path li{display:inline-block;margin-right:1px;font-size:13px}ul.tree-path li:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f105\";display:inline-block;font-size:13px;margin-left:5px;position:relative;top:1px;color:#95a5a6}ul.tree-path li:last-child a{cursor:default}ul.tree-path li:last-child:after{display:none}ul.tree-path li.go-up{font-size:12px;margin-right:7px}ul.tree-path li.go-up a{color:#95a5a6}ul.tree-path li.go-up a:hover{color:var(--bs-link-color)}ul.tree-path li.go-up:after{display:none}ul.tree-path li.root a{font-weight:600;color:var(--oc-primary-color)}ul.tree-path li a{color:#95a5a6}ul.tree-path li a:hover{text-decoration:none}table.name-value-list{border-collapse:collapse;font-size:13px}table.name-value-list th,table.name-value-list td{padding:4px 0 4px 0;vertical-align:top}table.name-value-list tr:first-child th,table.name-value-list tr:first-child td{padding-top:0}table.name-value-list th{font-weight:600;color:var(--oc-primary-color);padding-right:15px;text-transform:uppercase}table.name-value-list td{color:var(--bs-body-color);word-wrap:break-word}.scrollpad-scrollbar-size-tester{width:50px;height:50px;overflow-y:scroll;position:absolute;top:-200px;left:-200px}.scrollpad-scrollbar-size-tester div{height:100px}.scrollpad-scrollbar-size-tester::-webkit-scrollbar{width:0;height:0}div.control-scrollpad{position:relative;width:100%;height:100%;overflow:hidden}div.control-scrollpad>div{overflow:hidden;overflow-y:scroll;height:100%}div.control-scrollpad>div::-webkit-scrollbar{width:0;height:0}div.control-scrollpad[data-direction=horizontal]>div{overflow-x:scroll;overflow-y:hidden;width:100%}div.control-scrollpad[data-direction=horizontal]>div::-webkit-scrollbar{width:auto;height:0}div.control-scrollpad>.scrollpad-scrollbar{z-index:199;position:absolute;top:0;right:0;bottom:0;width:11px;background-color:transparent;opacity:0;overflow:hidden;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-transition:opacity .3s;transition:opacity .3s}div.control-scrollpad>.scrollpad-scrollbar .drag-handle{position:absolute;right:2px;min-height:10px;width:7px;background-color:rgba(0,0,0,0.35);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}div.control-scrollpad>.scrollpad-scrollbar:hover{opacity:.7;transition:opacity 0 linear}div.control-scrollpad>.scrollpad-scrollbar[data-visible]{opacity:.7}div.control-scrollpad>.scrollpad-scrollbar[data-hidden]{display:none}div.control-scrollpad[data-direction=horizontal]>.scrollpad-scrollbar{top:auto;left:0;width:auto;height:11px}div.control-scrollpad[data-direction=horizontal]>.scrollpad-scrollbar .drag-handle{right:auto;top:2px;height:7px;min-height:0;min-width:10px;width:auto}.svg-icon-container img.svg-icon{display:inline-block}.svg-icon-container.svg-active-effects img.svg-icon{filter:grayscale(100%)}.svg-icon-container.svg-active-effects.active img.svg-icon{filter:none}body:not(.drag) .svg-icon-container.svg-active-effects:hover img.svg-icon{filter:none}.october-snackbar{padding:14px 40px 0 16px;background:#323232;font-size:14px;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,0.3);max-width:100%;margin-right:16px;position:fixed;z-index:10600;left:16px;bottom:16px;color:white;opacity:0}.october-snackbar.enter{transition:opacity .2s}.october-snackbar.show-snackbar{opacity:1}.october-snackbar .snackbar-label{float:left;margin-right:16px;margin-bottom:14px}.october-snackbar button{outline:none;-webkit-appearance:none;background:transparent;border-radius:3px;border:none;color:#FFD422;font-weight:600}.october-snackbar button:focus{background:rgba(215,225,234,0.2)}.october-snackbar .snackbar-dismiss{font-size:0;color:transparent;width:22px;height:22px;position:absolute;right:10px;top:14px}.october-snackbar .snackbar-dismiss:before{content:'';width:7px;height:7px;left:7px;top:8px;display:block;position:absolute;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-156px -10px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.october-snackbar .snackbar-dismiss:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}.october-snackbar .snackbar-action{float:left;margin:0 0 14px -8px;padding:1px 8px;text-transform:uppercase}.october-tooltip{display:inline-block;padding:4px 8px 5px;position:absolute;border-radius:4px;max-width:200px;transition:opacity .15s ease-out,transform .15s ease-out;transform:scale(1);opacity:1;color:#fff;background:#536061;font-size:13px;line-height:140%;z-index:10700}.october-tooltip .tooltip-hotkey{display:inline-block;margin-left:5px;letter-spacing:1px}.october-tooltip .tooltip-hotkey:empty{display:none}.october-tooltip .tooltip-hotkey i{font-style:normal;margin-left:5px;padding:0 2px;display:inline-block;border-radius:3px;background:rgba(255,255,255,0.11);color:rgba(255,255,255,0.6)}.october-tooltip .tooltip-hotkey i:last-child{margin-right:-3px}.october-tooltip.tooltip-hidden{display:none}.october-tooltip.tooltip-invisible{opacity:0;transform:scale(.95)}#flotTip,#chart-tooltip{white-space:nowrap;padding:4px 8px 5px;background:#536061;position:absolute;z-index:10700;color:#fff;border-radius:4px;font-size:13px;opacity:1}.backend-toolbar-button .badge{display:block;z-index:9;width:8px;height:8px;position:absolute;top:5px;right:-3px;border-radius:50%;background-color:#dd1100;padding:0}button.backend-toolbar-button,a.backend-toolbar-button{line-height:inherit;display:inline-block;color:inherit;padding:0 6px;min-width:40px;text-align:center;text-decoration:none !important;border-radius:4px;outline:none;box-shadow:none;-webkit-appearance:none;border:none;background:transparent}button.backend-toolbar-button.control-button,a.backend-toolbar-button.control-button{color:var(--oc-toolbar-color);font-size:14px;margin-right:8px;line-height:30px}button.backend-toolbar-button.icon-only,a.backend-toolbar-button.icon-only{min-width:30px}button.backend-toolbar-button[disabled],a.backend-toolbar-button[disabled]{cursor:default}button.backend-toolbar-button[disabled]>i,a.backend-toolbar-button[disabled]>i,button.backend-toolbar-button[disabled]>span,a.backend-toolbar-button[disabled]>span,button.backend-toolbar-button[disabled]:after,a.backend-toolbar-button[disabled]:after{opacity:.5}button.backend-toolbar-button i,a.backend-toolbar-button i{display:inline-block;position:relative;font-size:16px;top:1px}button.backend-toolbar-button i+span.button-label,a.backend-toolbar-button i+span.button-label{margin-left:6px}button.backend-toolbar-button:not([disabled]):hover,a.backend-toolbar-button:not([disabled]):hover{background:var(--oc-toolbar-hover-bg)}button.backend-toolbar-button:not([disabled]):focus,a.backend-toolbar-button:not([disabled]):focus{background:var(--oc-toolbar-hover-bg)}button.backend-toolbar-button.has-menu:after,a.backend-toolbar-button.has-menu:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e90a\";font-size:16px;vertical-align:middle;margin-left:0;margin-right:-3px;position:relative;top:-1px}@media (hover:hover){button.backend-toolbar-button:focus:not([disabled]),a.backend-toolbar-button:focus:not([disabled]){background:var(--oc-toolbar-hover-bg)}}div.control-simplelist.is-selectable-box.menu-mode-selector{margin-left:0;margin-top:10px;border:none}div.control-simplelist.is-selectable-box.menu-mode-selector li{margin:0 16px 16px 0;width:175px}div.control-simplelist.is-selectable-box.menu-mode-selector li.active .menu-mode-box{border-color:var(--oc-accent)}div.control-simplelist.is-selectable-box.menu-mode-selector li .heading{margin:0;text-align:left;padding:18px 17px}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box{display:block;border:2px solid var(--bs-border-color);background:var(--oc-form-control-bg);border-radius:10px}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box .mode-image{display:block;height:42px;border-bottom:1px solid var(--bs-border-color);position:relative}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box .mode-image:before{position:absolute;left:17px}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-inline .mode-image:before{content:'';width:131px;height:10px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 -100px;top:15px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-inline .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-text .mode-image:before{content:'';width:137px;height:6px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 -120px;top:17px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-text .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-tiles .mode-image:before{content:'';width:126px;height:20px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 -139px;top:10px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-tiles .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-icons .mode-image:before{content:'';width:79px;height:10px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-61px -169px;top:15px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-icons .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-collapsed .mode-image:before{content:'';width:35px;height:10px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 -170px;top:15px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-collapsed .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-collapsed .mode-image:after{position:absolute;right:17px;top:13px;content:'';width:10px;height:16px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-44px -167px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-collapsed .mode-image:after{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left{height:98px}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left .mode-image{width:42px;height:93px;float:left;border-bottom:none;border-right:1px solid var(--bs-border-color)}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left .mode-image:before{top:17px;content:'';width:10px;height:56px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-148px -100px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left .heading{margin-left:42px;text-align:left;padding:18px 17px}div.control-simplelist.is-selectable-box.color-mode-selector{margin-left:0;margin-top:10px;border:none;margin-bottom:-16px}div.control-simplelist.is-selectable-box.color-mode-selector ul{margin-bottom:0}div.control-simplelist.is-selectable-box.color-mode-selector li{margin:0 16px 16px 0;width:215px}div.control-simplelist.is-selectable-box.color-mode-selector li.active .color-mode-box{border-color:var(--oc-accent)}div.control-simplelist.is-selectable-box.color-mode-selector li .heading{margin:0;text-align:left;padding:18px 17px}div.control-simplelist.is-selectable-box.color-mode-selector .color-mode-box{display:block;border:2px solid var(--bs-border-color);background:var(--oc-form-control-bg);border-radius:10px}.modal-content .onboarding-modal{margin:-1px;border-radius:15px}.modal-content .onboarding-modal .modal-header{height:132px;border-bottom:none;background-image:url('../images/license-header.png');background-size:cover;background-repeat:no-repeat}.modal-content .onboarding-modal .modal-header .onboarding-logo{width:248px;height:41px}.modal-content .onboarding-modal .modal-header .btn-close{position:absolute;width:19px;height:19px;top:15px;right:15px;border:none;background-color:transparent;background-image:url('../images/license-header-close.png');background-size:cover;background-size:20px 20px;opacity:1}.modal-content .onboarding-modal .modal-footer .btn{border-radius:44px}body.onboarding-popup-visible .onboarding-popup-collapsed{display:none}.onboarding-popup-collapsed{display:block;position:fixed;cursor:pointer;width:60px;height:60px;right:55px;bottom:40px;border-radius:60px;background-color:#E67E21;z-index:1049}.onboarding-popup-collapsed:after{content:'';width:30px;height:40px;position:absolute;top:10px;left:15px;background-image:url('../images/october-leaf-white.svg');background-size:cover}.onboarding-popup-collapsed>div{position:absolute;width:70px;height:70px;left:-5px;top:-5px;transform:rotate(0);display:none}.onboarding-popup-collapsed>div:before{content:'';width:38px;height:38px;position:absolute;bottom:-4px;right:-1px;opacity:1;background-image:url('../images/license-spinner.png');background-size:39px 39px}.onboarding-popup-collapsed.onboarding-popup-just-collapsed>div{transform:rotate(720deg);transition:transform 2s linear}.onboarding-popup-collapsed.onboarding-popup-just-collapsed>div:before{opacity:0;transition:opacity .5s;transition-delay:1s}.onboarding-popup-collapsed.onboarding-popup-collapse-animation-start>div{display:block}@media (max-height:740px){.onboarding-popup-collapsed{right:35px;bottom:10px}}:root,[data-bs-theme=\"light\"]{--oc-page-size-outer-bg:var(--bs-tertiary-bg);--oc-page-size-inner-bg:var(--bs-body-bg);--oc-page-size-border:var(--bs-border-color)}[data-bs-theme=\"dark\"]{--oc-page-size-outer-bg:var(--bs-tertiary-bg);--oc-page-size-inner-bg:var(--bs-body-bg);--oc-page-size-border:var(--bs-border-color)}@media (pointer:fine){body.drag *{cursor:grab !important}}body.dragging,body.dragging *{cursor:move !important}body.loading,body.loading *{cursor:wait !important}body.no-select{user-select:none;cursor:default !important}html,body{height:100%;font-size:14px;line-height:1.42857143}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.has-page-size{background:var(--oc-page-size-outer-bg)}body.has-page-size #layout-body{background:var(--oc-page-size-inner-bg)}body.has-page-size.has-sidenav-tree #layout-body{border-right:1px solid var(--oc-page-size-border)}#layout-canvas{min-height:100%;height:100%}#layout-body{width:0}.layout-container,.padded-container{padding:20px 20px 0 20px}.layout-container .container-flush,.padded-container .container-flush{padding-top:0}.layout-container .padded-container-inset,.padded-container .padded-container-inset{margin-left:-20px;margin-right:-20px}.whiteboard{background:white}[data-bs-theme=\"dark\"] .whiteboard{background:#181a1e}.layout-fill-container{position:absolute;left:0;top:0;width:100%;height:100%}[data-calculate-width]>form,[data-calculate-width]>div{display:inline-block}body.compact-container .layout-container{padding:0 !important}body.slim-container .layout-container{padding-left:0 !important;padding-right:0 !important}.flex-layout-column{display:flex;flex-direction:column}.flex-layout-column.absolute{position:absolute !important}.flex-layout-column.fill-container{position:absolute;left:0;top:0;width:100%;height:100%}.flex-layout-row{display:flex;flex-direction:row}.flex-layout-column.justify-center,.flex-layout-row.justify-center{justify-content:center}.flex-layout-column.align-center,.flex-layout-row.align-center{align-items:center;align-content:center}.flex-layout-column.full-height,.flex-layout-row.full-height{min-height:100%}.flex-layout-column.full-width,.flex-layout-row.full-width{width:100%}.flex-layout-column.full-height-strict,.flex-layout-row.full-height-strict{height:100%}.flex-layout-item{margin:0}.flex-layout-item.fix{flex:0 0 auto}.flex-layout-item.stretch{flex:1 1 auto}.flex-layout-item.stretch-constrain{flex:1}.flex-layout-item.center{align-self:center}.flex-layout-item.relative{position:relative}.flex-layout-item.layout-container{max-width:none}ul.mainmenu-items{padding:0;margin:0;font-size:0;white-space:nowrap;user-select:none}ul.mainmenu-items>li.mainmenu-item{display:block}.mainmenu-item{display:inline-block;position:relative;vertical-align:top;user-select:none}.mainmenu-item>a,.mainmenu-item>.mainmenu-item-container{display:flex;flex-direction:row;align-items:baseline;text-decoration:none!important;outline:none;color:var(--oc-mainnav-color)}.mainmenu-item>a:after,.mainmenu-item>.mainmenu-item-container:after{opacity:.5}.mainmenu-item .nav-label{opacity:.5;font-size:14px;white-space:nowrap;text-overflow:ellipsis;flex:1 1 auto}.mainmenu-item .nav-icon{opacity:.5;position:absolute;top:0;display:inline-block;height:100%;color:var(--oc-mainnav-icon-color)}.mainmenu-item .nav-icon .svg-icon{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:relative}.mainmenu-item .nav-icon i{vertical-align:middle;display:block;height:100%}.mainmenu-item .nav-icon i:before{position:relative}.mainmenu-item span.counter{flex:0 0 auto;position:relative;top:1px;padding:2px 2px;background-color:#ff3e1d;color:#ffffff;font-size:14px;line-height:100%;opacity:1;border-radius:4px;transform:scale(1);transition:transform .3s;margin-left:6px}.mainmenu-item span.counter.empty{transform:scale(0);opacity:0;padding:0;margin-left:0!important}.mainmenu-item.has-subitems>a:after,.mainmenu-item.has-subitems>.mainmenu-item-container:after{display:inline-block}.mainmenu-item.has-subitems span.counter{right:17px}.mainmenu-item.mainmenu-account .nav-icon{opacity:1;width:42px}.mainmenu-item.active .nav-label,.mainmenu-item.active-dropdown .nav-label,.mainmenu-item.active .nav-icon,.mainmenu-item.active-dropdown .nav-icon,.mainmenu-item.active>a:after,.mainmenu-item.active-dropdown>a:after{opacity:1}.mainmenu-item.has-solidicon .nav-icon{opacity:1}body:not(.drag) .mainmenu-item:hover .nav-label,body:not(.drag) .mainmenu-item:hover .nav-icon,body:not(.drag) .mainmenu-item:hover>a:after{opacity:1}body:not(.drag) ul.mainmenu-items.hover-effects li>a:hover{background:var(--bs-primary);color:white}@media (pointer:coarse){.mainmenu-item .nav-label{font-size:16px}}.layout-mainmenu .navbar{padding:0 20px 0 0;height:70px;background-color:var(--oc-mainnav-bg)}.layout-mainmenu .navbar [data-control=\"toolbar\"]{position:absolute}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]{margin-left:20px;margin-top:7px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item{display:inline-block;margin-right:15px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item:last-child{margin-right:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a{height:50px;padding:15px 10px 0 38px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems .nav-label{padding-right:17px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems>a:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e90a\";position:absolute;right:6px;top:19.4px;font-size:19.5px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label{font-size:16px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon{line-height:52px;left:0;width:30px;text-align:center}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .svg-icon{height:30px;width:30px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon i{line-height:inherit;font-size:30px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .nav-colorpicker{width:0;height:0;background-color:transparent;border-right-color:var(--background-color);border-bottom-color:var(--background-color);border-top-color:var(--foreground-color);border-left-color:var(--foreground-color);border-width:10px;border-style:solid;border-radius:20px;display:inline-block;position:relative;top:10px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .nav-colorpicker:after{content:\"\";top:-10px;left:-10px;width:20px;height:20px;position:absolute;box-shadow:inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), .2);border-radius:20px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-preview>a{padding-left:34px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-preview:not(.has-nolabel)>a{padding-right:15px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-preview:not(.has-nolabel)>a:after{right:11px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-taskbar>a{padding-right:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras{margin-left:10px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-taskbar,.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview{margin-right:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-taskbar .nav-icon,.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview .nav-icon{left:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-taskbar .nav-icon i,.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview .nav-icon i{font-size:20px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-taskbar .nav-icon i:before,.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview .nav-icon i:before{top:1px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-account{margin-right:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-account>a{padding:0;margin-top:2px;width:42px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-account>a:after{display:none}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-account .nav-icon{left:0;width:auto;position:static}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle{display:none}@media (min-width:768px){.layout-mainmenu .navbar.navbar-mode-icons ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems>a:after,.layout-mainmenu .navbar.navbar-mode-icons ul.mainmenu-items[data-main-menu] .nav-label{display:none}.layout-mainmenu .navbar.navbar-mode-icons ul.mainmenu-items[data-main-menu] .nav-icon{text-align:center}.layout-mainmenu .navbar.navbar-mode-tile{height:78px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]{margin-top:0}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item{text-align:center}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a{padding:11px 15px 10px;height:auto;display:block}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label{display:block;overflow:hidden;max-width:150px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems .nav-label{padding-right:17px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems a:after{margin:0;top:auto;right:11px;bottom:8.9px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon{display:block;height:30px;width:auto;position:static;line-height:1;margin-bottom:4px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .svg-icon,.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon i{display:inline-block}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon i:before{margin-right:0}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .nav-colorpicker{top:7px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item span.counter{margin:0;position:absolute;top:8px;left:50%}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account>a{padding:12px 0 0 0;margin-top:1px;width:auto}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account .nav-icon{height:auto}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account div.mainmenu-account-avatar{width:52px;height:52px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account div.mainmenu-account-avatar img{width:50px;height:50px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-preview.has-nolabel>a{width:auto;margin-top:14px}.layout-mainmenu .navbar.navbar-mode-text ul.mainmenu-items.mainmenu-general>li.mainmenu-item>a{padding:15px 10px 0 10px}.layout-mainmenu .navbar.navbar-mode-text ul.mainmenu-items.mainmenu-general>li.mainmenu-item .nav-icon{display:none}}@media (max-width:767px){#layout-mainmenu .navbar ul.mainmenu-items.mainmenu-general>li.mainmenu-item:not(.active){display:none}#layout-mainmenu .navbar ul.mainmenu-items.mainmenu-general>li.mainmenu-item>a{cursor:default;pointer-events:none}#layout-mainmenu .navbar ul.mainmenu-items.mainmenu-general>li.mainmenu-item span.counter,#layout-mainmenu .navbar ul.mainmenu-items.mainmenu-general>li.mainmenu-item.has-subitems>a:after{display:none}#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle{display:inline-block;margin-right:-10px}#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;width:50px;position:relative;opacity:.7}#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:before{content:'';width:20px;height:18px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 0;position:absolute;top:19px;left:18px}#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:hover{opacity:1}}@media (max-width:767px) and (-webkit-min-device-pixel-ratio:2),(max-width:767px) and (min-resolution:192dpi){#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items.mainmenu-general>li.mainmenu-item:not(.active){display:none}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items.mainmenu-general>li.mainmenu-item>a{cursor:default;pointer-events:none}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items.mainmenu-general>li.mainmenu-item span.counter,#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items.mainmenu-general>li.mainmenu-item.has-subitems>a:after{display:none}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle{display:inline-block;margin-right:-10px}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;width:50px;position:relative;opacity:.7}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:before{content:'';width:20px;height:18px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 0;position:absolute;top:19px;left:18px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:hover{opacity:1}body.main-menu-left #layout-mainmenu .main-menu-container{display:none}div.mainmenu-account-avatar{overflow:hidden;border-radius:9px;border:1px solid rgba(236,240,241,0.1);display:inline-block;width:42px;height:42px;vertical-align:middle}div.mainmenu-account-avatar img{width:42px;height:42px;display:block}.mainmenu-account.active-dropdown div.mainmenu-account-avatar{box-shadow:0 0 4px 0 var(--bs-link-color)}.layout-mainmenu .control-toolbar .toolbar-item.toolbar-primary:before{left:0}.layout-mainmenu .control-toolbar .toolbar-item.toolbar-primary:after{right:0}.left-side-menu-container{display:none !important;width:63px}.left-side-menu-container .layout-mainmenu{position:fixed;height:100%;width:63px}.left-side-menu-container .layout-mainmenu .main-menu-container{position:absolute;width:100%;height:100%}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar{position:absolute;padding-right:0;width:100%;height:100%;flex-direction:column}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar{padding-bottom:0}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar [data-control=toolbar]{width:auto}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item{padding-right:0;padding-bottom:20px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item:last-child{padding-bottom:0}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item:before{display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item:after{content:'';position:absolute;bottom:-5px;left:0;width:100%;height:9px;top:auto;display:block!important;background:transparent url(../../images/scrollable-panel-shadow.png) repeat-x left top;transition:opacity .1s;opacity:0}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item.scroll-after:after{opacity:1}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item.fix-width:after{display:none !important}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar [data-control=\"toolbar\"]{height:100%}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]{margin-left:10px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-general{margin-left:15px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a{padding-left:0}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a:after{top:27px;right:15px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a .nav-label{padding-left:13px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a .nav-icon{left:5px;position:static;width:40px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a .nav-icon i{position:relative;top:-15px;width:40px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a .nav-icon .nav-colorpicker{top:5px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item{display:block;margin-right:0;margin-bottom:15px;text-align:center}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-toggle{display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account .nav-label{position:relative;top:5px;padding-left:11px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account>a:after{top:17px;right:15px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account .nav-label,.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account>a:after{display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon i{display:inline-block}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label{padding-left:10px;text-align:left;display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a{padding-right:15px;width:100%}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a>span.counter{left:-20px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a:after{top:18.4px;display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems>a:after{transform:rotate(-90deg)}.left-side-menu-container.width-check .layout-mainmenu .main-menu-container .navbar.control-toolbar div[data-control=\"toolbar\"]{width:auto !important}.left-side-menu-container.width-check .layout-mainmenu .main-menu-container .navbar.control-toolbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label,.left-side-menu-container.width-check .layout-mainmenu .main-menu-container .navbar.control-toolbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a:after{visibility:hidden;display:block}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu{z-index:599;box-shadow:10px 0 10px rgba(0,0,0,0.2)}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu .main-menu-container .navbar [data-control=\"toolbar\"]{width:100%}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label{display:block}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item a:after{display:block}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a>span.counter{left:-10px}body.left-menu-submenu-displayed{overflow:hidden}body.left-menu-submenu-displayed ul.mainmenu-items.mainmenu-submenu-dropdown{box-shadow:10px 0 15px rgba(0,0,0,0.3);border-bottom-left-radius:0;border-top-right-radius:6px;margin-top:10px}body.left-menu-submenu-displayed ul.mainmenu-items.mainmenu-submenu-dropdown li:last-child{margin-bottom:6px}body.left-menu-submenu-displayed ul.mainmenu-items.mainmenu-submenu-dropdown li:first-child{margin-top:6px}body.main-menu-left .left-side-menu-container{display:block !important}div.mainmenu-leftmenu-overlay{z-index:598 !important}ul.mainmenu-items.mainmenu-submenu-dropdown{display:none;position:absolute;background:var(--oc-mainnav-bg);box-shadow:0 10px 15px rgba(0,0,0,0.3);z-index:601;border-bottom-left-radius:6px;border-bottom-right-radius:6px;user-select:none;padding:0;margin:0}ul.mainmenu-items.mainmenu-submenu-dropdown.show{display:block}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item a{padding:7px 17px 7px 47px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-label,ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon{opacity:1}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon{left:17px;width:20px;line-height:34px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon .svg-icon{width:20px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon i{font-size:20px;line-height:inherit}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item span.counter{font-size:12px;padding:2px 3px;margin:2px 0 0 10px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item:last-child{margin-bottom:6px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.divider{height:1px;margin:5px 0;background:rgba(255,255,255,0.1)}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.section-title{color:white;padding:7px 17px;white-space:nowrap;font-weight:600}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.section-title .nav-label{margin-right:0;display:block;overflow:hidden;max-width:250px;vertical-align:middle}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.has-bullet.is-selected a:before{content:\"\";background-color:white;border-radius:10px;position:absolute;top:50%;left:21px;height:8px;width:8px;margin-top:-4px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.has-flag .nav-label{padding-right:25px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.has-flag .nav-icon.nav-icon-flag{top:2px;left:auto;right:17px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.has-flag .nav-icon.nav-icon-flag i{opacity:1;font-size:14px;display:inline-block;height:14px;border-radius:2px;box-shadow:inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), .2)}div.mainmenu-submenu-overlay,div.mainmenu-leftmenu-overlay{position:fixed;z-index:600;left:0;top:0;width:100%;height:100%;display:none;background:rgba(0,0,0,0.01);opacity:.01}div.mainmenu-submenu-overlay.show{display:block}@media (pointer:coarse){ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon{line-height:38px}}#layout-mainmenu-responsive-container{position:fixed;top:0;right:0;width:0;max-width:100%;height:100%;z-index:601;overflow:hidden;transition:width .25s ease-in-out}#layout-mainmenu-responsive-container nav.responsive-menu-pane{z-index:602;background-color:var(--oc-mainnav-bg);transition:margin .25s ease-in-out;position:absolute;top:0;right:0;width:100%;height:100%;border-left:1px solid rgba(255,255,255,0.1);display:flex;flex-direction:column}#layout-mainmenu-responsive-container nav.responsive-menu-pane.mainmenu-pane{box-shadow:-10px 0 10px rgba(0,0,0,0.2)}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header{padding:25px;flex:0 0 auto}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container{padding-left:50px;white-space:nowrap}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .nav-icon{left:0}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .company-name,#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .user-name{text-overflow:ellipsis;overflow:hidden}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .company-name{font-size:16px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .user-name{color:rgba(255,255,255,0.7);cursor:pointer}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .user-name:hover{color:var(--oc-mainnav-color)}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a{cursor:default;pointer-events:none;padding:7px 10px 7px 43px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .nav-icon{line-height:34px;left:0;width:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .nav-icon .svg-icon{height:30px;width:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .nav-icon i{line-height:inherit;font-size:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .counter{display:none}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .nav-label{display:block;overflow:hidden;width:100%}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item.has-subitems .mainmenu-item-container:after{bottom:4px;cursor:pointer}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header.has-back-link .mainmenu-item{margin-left:36px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header.has-back-link .go-back-link{display:block;width:24px;height:34px;position:absolute;left:25px;top:24px;z-index:603;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header.has-back-link .go-back-link:after{content:'';width:24px;height:11px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-52px 0;position:absolute;left:0;top:12px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header.has-back-link .go-back-link:after{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .close-link{display:none;position:absolute;width:24px;height:24px;left:19px;top:33px;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;z-index:603}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .close-link:after{content:'';width:11px;height:11px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-96px 0;position:absolute;left:6px;top:7px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .close-link:after{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu-responsive-container nav.responsive-menu-pane .scrollable-panel-container{flex:1 1 auto}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>a,#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>.mainmenu-item-container{padding-right:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>a:after,#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>.mainmenu-item-container:after{content:'';width:24px;height:11px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-22px 0;position:absolute;right:0}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>a:after,#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>.mainmenu-item-container:after{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items.scrollable{overflow:hidden}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item{margin-bottom:6px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item>a{padding:7px 25px 7px 60px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item.has-subitems>a{padding-right:55px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item.has-subitems>a:after{right:25px;top:11px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-label{display:block;overflow:hidden}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-icon{left:25px;width:20px;line-height:34px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-icon .svg-icon{width:24px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-icon i{font-size:24px;line-height:inherit}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .counter{top:0}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane{z-index:603;margin-right:-100%;box-shadow:none}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .menu-header[data-submenu-index=account] .go-back-link{top:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .menu-header[data-submenu-index=account] .mainmenu-item{height:42px}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .menu-header .mainmenu-item .mainmenu-item-container .company-name{display:none}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .menu-header .mainmenu-item .mainmenu-item-container .user-name{color:var(--oc-mainnav-color);position:relative;top:11px;cursor:default}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .mainmenu-item.section-user-title{display:none}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .mainmenu-item.divider{height:1px;margin:5px 0;background:rgba(255,255,255,0.1)}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .mainmenu-item.section-title{color:white;padding:7px 17px;white-space:nowrap;font-weight:600}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .mainmenu-item.section-title .nav-label{opacity:.5;margin-right:0;display:block;overflow:hidden;max-width:250px;vertical-align:middle}body.responsive-submenu-displayed #layout-mainmenu-responsive-container .responsive-menu-pane.mainmenu-pane{margin-right:100%}body.responsive-submenu-displayed #layout-mainmenu-responsive-container .responsive-menu-pane.submenu-pane{margin-right:0}body.responsive-menu-displayed{overflow:hidden}body.responsive-menu-displayed #layout-mainmenu-responsive-container{width:300px;box-shadow:-10px 0 10px rgba(0,0,0,0.2)}@media (pointer:coarse){#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item{margin-bottom:12px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-icon{line-height:38px}#layout-mainmenu-responsive-container nav.responsive-menu-pane.mainmenu-pane .menu-header{padding-left:60px}#layout-mainmenu-responsive-container nav.responsive-menu-pane.mainmenu-pane .menu-header .close-link{display:block}}@media (max-width:414px){body.responsive-menu-displayed #layout-mainmenu-responsive-container{width:414px}}:root{--oc-nav-logo-offset-top:-2px;--oc-nav-logo-offset-start:0;--oc-nav-logo-opacity:.5}.layout-mainmenu .navbar.has-logo .toolbar-logo{position:relative}.layout-mainmenu .navbar.has-logo ul.mainmenu-items[data-main-menu]{margin-left:10px}.layout-mainmenu .navbar.has-logo ul.mainmenu-items[data-main-menu] li.is-dashboard{display:none}.layout-mainmenu .navbar.has-logo .toolbar-item.toolbar-primary:before{left:-5px}.layout-mainmenu .navbar.has-logo.navbar-mode-tile .mainmenu-logo{padding-top:20px}.mainmenu-logo{display:block;padding-top:15px;padding-left:20px;padding-right:10px}.mainmenu-logo .nav-logo{height:40px;position:relative;top:var(--oc-nav-logo-offset-top);left:var(--oc-nav-logo-offset-start);opacity:var(--oc-nav-logo-opacity)}.mainmenu-logo.active .nav-logo,.mainmenu-logo.active-dropdown .nav-logo,.mainmenu-logo:hover .nav-logo{opacity:1}@media (max-width:768px){.mainmenu-logo{display:none}}.layout-sidenav-container>.layout-sidenav-spacer{position:relative;height:100%;width:240px}nav.layout-sidenav{position:absolute;height:100%;width:100%;box-sizing:border-box;font-size:14px;background:var(--oc-sidebar-bg)}nav.layout-sidenav ul{position:relative;margin:0;padding:25px 25px 25px 0;height:100%;overflow:hidden}nav.layout-sidenav ul>li.mainmenu-item{margin:0 0 10px 0}nav.layout-sidenav ul>li.mainmenu-item>a{padding:7px 10px 7px 58px;border-top-right-radius:20px;border-bottom-right-radius:20px;margin:0;transition:padding .1s;display:flex;flex-direction:row}nav.layout-sidenav ul>li.mainmenu-item>a:hover{background:transparent}nav.layout-sidenav ul>li.mainmenu-item>a .nav-icon{left:25px;width:20px;line-height:34px;opacity:1;text-align:center}nav.layout-sidenav ul>li.mainmenu-item>a .nav-icon .svg-icon{width:20px;-webkit-filter:grayscale(100%) invert(100%);filter:grayscale(100%) invert(100%)}nav.layout-sidenav ul>li.mainmenu-item>a .nav-icon i{font-size:20px;line-height:inherit;color:var(--oc-sidebar-color)}nav.layout-sidenav ul>li.mainmenu-item>a .nav-label{color:var(--oc-sidebar-color);font-size:14px;opacity:1;overflow:hidden}nav.layout-sidenav ul>li.mainmenu-item>a span.counter{position:absolute;top:10px;right:10px;font-size:12px;transition:all .1s}nav.layout-sidenav ul>li.mainmenu-item.has-counter>a{padding-right:25px}nav.layout-sidenav ul>li.mainmenu-item:last-child{margin-bottom:0}nav.layout-sidenav ul>li.mainmenu-item.divider{height:1px;margin:5px 0 10px;background:var(--oc-primary-border);margin-right:-25px}nav.layout-sidenav ul>li.mainmenu-item.section-title{color:var(--oc-sidebar-color);padding:7px 0 7px 17px;white-space:nowrap;font-weight:600;margin-bottom:0;transition:margin .1s ease-in-out;transition-delay:.25s}nav.layout-sidenav ul>li.mainmenu-item.section-title .nav-label{opacity:1;margin-right:0;display:block;overflow:hidden;max-width:250px;vertical-align:middle}nav.layout-sidenav ul>li.mainmenu-item.active>a{background:var(--oc-sidebar-active-bg) !important;border-left:3px solid var(--oc-sidebar-active-border);padding-left:55px}nav.layout-sidenav ul>li.mainmenu-item.active>a .nav-label{color:var(--oc-sidebar-active-color);font-weight:600}nav.layout-sidenav ul>li.mainmenu-item.active>a .nav-icon{opacity:1}nav.layout-sidenav ul>li.mainmenu-item.active>a .nav-icon i{color:var(--oc-sidebar-active-color)}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button{margin-bottom:25px}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a{margin-left:15px;background:var(--bs-primary);padding:9px 38px 0 13px;border-radius:5px;transition:all .1s ease-in-out;transition-property:border-radius,padding;height:40px;box-shadow:0 0 10px rgba(0,0,0,0.27);min-width:40px}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a:hover{background:#5A5CEF}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a:active{box-shadow:none}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a .nav-icon{transition:width .1s ease-in-out;transition-delay:.25s;width:40px;top:3px;right:0;left:auto;text-align:center}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a .nav-icon .svg-icon,nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a .nav-icon i{color:white}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a .nav-label{transition:opacity .1s ease-in-out;transition-delay:.25s;opacity:1;color:white;font-weight:600}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button.active>a{background:var(--bs-primary) !important}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button.active>a:hover{background:#5A5CEF !important}@media (max-width:1199px){.layout-sidenav-container>.layout-sidenav-spacer{width:70px}#layout-sidenav{transition:width .1s,box-shadow .1s ease-in-out;box-shadow:none}#layout-sidenav:not(:hover) ul>li.mainmenu-item>a{padding-right:0}#layout-sidenav:not(:hover) ul>li.mainmenu-item>a .nav-label{visibility:hidden}#layout-sidenav:not(:hover) ul>li.mainmenu-item>a span.counter{top:-8px;right:1px}#layout-sidenav:not(:hover) ul>li.mainmenu-item.section-title{transition:none;margin-right:-15px}#layout-sidenav:not(:hover) ul>li.mainmenu-item.sidebar-button>a{margin-left:15px;border-radius:25px;width:40px;padding:9px 13px 0 0}#layout-sidenav:not(:hover) ul>li.mainmenu-item.sidebar-button>a .nav-label{transition:none;opacity:0}#layout-sidenav:not(:hover) ul>li.mainmenu-item.sidebar-button>a .nav-icon{transition:none;width:20px}#layout-sidenav:hover{z-index:20;width:240px;box-shadow:5px 0 5px rgba(0,0,0,0.1);transition-delay:.25s}#layout-sidenav:hover ul>li.mainmenu-item>a{transition-delay:.25s}#layout-sidenav:hover ul>li.mainmenu-item>a span.counter{top:9px;right:10px;transition-delay:.25s}}body:not(.drag) #layout-sidenav ul>li.mainmenu-item:not(.sidebar-button)>a:hover{background:var(--oc-sidebar-hover-bg)}body.sidenav-responsive .layout-sidenav-container{display:none!important}@media (max-width:767px){.layout-sidenav-container{display:none!important}}.layout-sidenav.sidenav-responsive{position:static;height:60px}.layout-sidenav.sidenav-responsive ul{padding:13px 20px 0 20px;overflow:visible}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item{display:inline-block;margin:0 10px 0 0}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item>a span.counter{position:relative;top:0;right:0}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.divider{height:60px;width:1.4px;margin:-13px 10px 0 0;border-left:1px solid var(--bs-border-color)}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.divider+.section-title{margin-left:-10px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.sidebar-button{margin-bottom:0;margin-right:25px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.sidebar-button>a{margin:0;height:34px;padding:7px 33px 0 13px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.sidebar-button>a .nav-icon{top:0}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item:not(.sidebar-button)>a{border-radius:20px;padding:7px 10px 7px 41px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item:not(.sidebar-button)>a .nav-icon{left:15px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item:not(.sidebar-button).active>a{border-left:none}.responsive-sidebar-toolbar{background:var(--oc-sidebar-bg)}.responsive-sidebar-toolbar:before,.responsive-sidebar-toolbar:after{display:none !important}.secondary-nav>.control-toolbar{padding-bottom:0}.secondary-nav{display:none}body:not(.drag) .layout-sidenav.sidenav-responsive ul>li.mainmenu-item:not(.sidebar-button)>a:hover{background:var(--oc-sidebar-hover-bg)}body.sidenav-responsive .secondary-nav{display:block}@media (max-width:767px){.secondary-nav{display:block}}#layout-side-panel{border-right:1px solid var(--oc-primary-border)}#layout-side-panel .sidepanel-content-header{background:#d7e1eA;font-size:15px;padding:12px 20px 13px;position:relative}body.display-side-panel #layout-side-panel{display:block;position:absolute;z-index:600;width:350px;border-right:none;-webkit-box-shadow:3px 0 3px 0 rgba(0,0,0,0.1);box-shadow:3px 0 3px 0 rgba(0,0,0,0.1)}[data-bs-theme=\"dark\"] #layout-side-panel .sidepanel-content-header{background:var(--bs-secondary-bg)}#layout-footer{width:100%;z-index:100;height:60px;position:fixed;bottom:0;color:#666666;background-color:rgba(255,255,255,0.8);border-top:1px solid #dfdfdf}#layout-footer .brand,#layout-footer .tagline{margin:10px;height:40px;line-height:40px}#layout-footer .brand{float:left;font-size:16px}#layout-footer .brand .logo{margin:0 10px}#layout-footer .tagline{float:right}#layout-footer .tagline p{color:#999}html body.outer{background:white}body.outer .outer-form-cell{width:350px;padding:40px;border-right:1px solid #ECF0F1;vertical-align:top}body.outer .outer-theme-cell{background-color:#FEF6EB;vertical-align:middle;text-align:center;overflow:hidden}body.outer .outer-theme-cell img{display:inline-block;margin:0 auto}body.outer h1{margin:0 0 20px 0;padding:0;text-align:center;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}body.outer h1 img{max-width:180px;width:100%;display:inline-block}body.outer .outer-form-container{margin:0 auto}body.outer .outer-form-container p{color:#2C3E4F}body.outer .outer-form-container h2{font-size:22px;font-family:serif;margin:0;padding:10px 0 30px 0;color:#2C3E4F;text-align:center}body.outer .outer-form-container h2:empty{padding:0}body.outer .outer-form-container h2:after{content:'';display:block;height:2px;width:60px;margin:30px auto 20px;background:#536061}body.outer .outer-form-container .forgot-password{margin-top:8px}body.outer .outer-form-container .forgot-password a{color:#536061;text-decoration:underline}body.outer .outer-form-container .horizontal-form input.form-control{margin-bottom:20px}body.outer .outer-form-container .horizontal-form+.pull-right.forgot-password{margin-top:-47px;position:relative}body.outer.setup .outer-form-cell{width:500px}@media (max-width:576px){body.outer .outer-form-cell{width:100% !important}body.outer .outer-theme-cell{display:none}}:root,[data-bs-theme=\"light\"]{--oc-fancy-tabs-bg:var(--bs-secondary)}[data-bs-theme=\"dark\"]{--oc-fancy-tabs-bg:var(--oc-editor-tab-bg)}body.breadcrumb-fancy .control-breadcrumb,.control-breadcrumb.breadcrumb-fancy{margin-bottom:0;margin-left:15px;margin-top:10px;margin-bottom:10px}.fancy-layout .tab-collapse-icon{position:absolute;display:block;text-decoration:none;outline:none;opacity:.6;transition:all .3s;font-size:12px;color:var(--bs-body-color);right:11px}.fancy-layout .tab-collapse-icon:hover{text-decoration:none;opacity:1}.fancy-layout .tab-collapse-icon.primary{color:var(--bs-body-bg);bottom:-25px;z-index:100;-webkit-transform:scale(1, -1);transform:scale(1, -1)}.fancy-layout .tab-collapse-icon.primary i{position:relative;display:block}.fancy-layout .tab-collapse-icon.tabless{display:none}.fancy-layout .control-tabs.master-tabs:before,.fancy-layout.control-tabs.master-tabs:before,.fancy-layout .control-tabs.master-tabs:after,.fancy-layout.control-tabs.master-tabs:after{top:13px;font-size:14px;color:rgba(255,255,255,0.5)}.fancy-layout .control-tabs.master-tabs:before,.fancy-layout.control-tabs.master-tabs:before{left:8px}.fancy-layout .control-tabs.master-tabs:after,.fancy-layout.control-tabs.master-tabs:after{right:8px}.fancy-layout .control-tabs.master-tabs.scroll-before:before,.fancy-layout.control-tabs.master-tabs.scroll-before:before{color:var(--bs-body-color)}.fancy-layout .control-tabs.master-tabs.scroll-after:after,.fancy-layout.control-tabs.master-tabs.scroll-after:after{color:var(--bs-body-color)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container{background:var(--oc-fancy-tabs-bg);padding-left:20px;padding-right:20px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs{margin-left:-8px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li{margin-left:-5px;padding-top:3px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close{top:14px;right:-5px;left:auto;z-index:110;font-family:sans-serif;color:rgba(255,255,255,0.3)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close i,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close i{top:4px;right:1px;font-style:normal;font-weight:bold;font-size:16px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close:hover,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close:hover{color:white !important}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a{border-bottom:none;background:transparent;font-size:14px;color:rgba(255,255,255,0.5);padding:6px 0 0 24px!important;overflow:visible;text-decoration:none}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a:hover,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a:hover{color:white}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title{position:relative;display:inline-block;padding:12px 5px 0 5px;height:38px;font-size:14px;z-index:100;background-color:transparent}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:before,.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:after,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:after{content:' ';position:absolute;width:20px;display:block;height:37px;top:0;z-index:100;background-color:transparent}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:before{left:-14px;border-radius:8px 0 0 0;transform:skewX(-10deg)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:after,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:after{right:-14px;border-radius:0 8px 0 0;transform:skewX(10deg)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title span,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title span{border-top:none;padding:0;margin-top:0;overflow:visible}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a:before{z-index:110;position:absolute;top:18px;left:22px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a[class*=icon]>span.title,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a[class*=icon]>span.title{padding-left:18px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active{top:1px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a{z-index:107;color:var(--bs-body-color)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active span.tab-close,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active span.tab-close{color:rgba(var(--bs-body-color-rgb), .3)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active span.tab-close:hover,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active span.tab-close:hover{color:var(--bs-body-color) !important}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title{background-color:var(--bs-body-bg);z-index:105}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title:before{z-index:107;background-color:var(--bs-body-bg)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title:after,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title:after{background-color:var(--bs-body-bg);z-index:107}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li[data-modified] span.tab-close i,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li[data-modified] span.tab-close i{top:5px;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;color:inherit}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li[data-modified] span.tab-close i:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li[data-modified] span.tab-close i:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f111\";font-size:9px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li:first-child,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li:first-child{margin-left:0}.fancy-layout .control-tabs.master-tabs[data-closable]>div>div.tabs-container>ul.nav-tabs>li a>span.title,.fancy-layout.control-tabs.master-tabs[data-closable]>div>div.tabs-container>ul.nav-tabs>li a>span.title{padding-right:10px}.fancy-layout .control-tabs.master-tabs.has-tabs:before,.fancy-layout.control-tabs.master-tabs.has-tabs:before,.fancy-layout .control-tabs.master-tabs.has-tabs:after,.fancy-layout.control-tabs.master-tabs.has-tabs:after{display:block}.fancy-layout .control-tabs.secondary-tabs:before,.fancy-layout.control-tabs.secondary-tabs:before{left:5px}.fancy-layout .control-tabs.secondary-tabs:after,.fancy-layout.control-tabs.secondary-tabs:after{right:5px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs{position:relative;border-top:1px solid var(--oc-primary-border);background:var(--bs-body-bg);padding-top:10px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs:before{position:absolute;bottom:0;height:1px;width:100%;z-index:9;content:' ';border-bottom:2px solid var(--oc-primary-border)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li{border-right:none;padding-right:0;margin-right:-10px;vertical-align:top}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a{font-size:14px;font-weight:600;padding-bottom:3px;margin:0;position:relative;top:-1px;z-index:11;background:transparent;overflow:visible;border-bottom:1px solid transparent}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span{position:relative;display:inline-block;padding:4px 25px 0px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:before,.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:after,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:after{content:'';display:none;border-top:2px solid var(--oc-primary-border);position:absolute;background:transparent;top:0;z-index:-1;width:20px;bottom:-2px;transform-origin:bottom}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:before{left:0;border-left:2px solid var(--oc-primary-border);-webkit-border-radius:8px 0 0 0;-moz-border-radius:8px 0 0 0;border-radius:8px 0 0 0;-webkit-transform:skewX(-10deg);-ms-transform:skewX(-10deg);transform:skewX(-10deg)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:after,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:after{right:0;border-right:2px solid var(--oc-primary-border);-webkit-border-radius:0 8px 0 0;-moz-border-radius:0 8px 0 0;border-radius:0 8px 0 0;-webkit-transform:skewX(10deg);-ms-transform:skewX(10deg);transform:skewX(10deg)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span span,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span span{border-top:2px solid transparent;margin-top:-4px;padding-left:0;padding-right:0;padding-top:7px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li:hover a,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li:hover a{color:var(--bs-body-color)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li:first-child,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li:first-child{padding-left:10px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li:last-child,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li:last-child{margin-right:0}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a{z-index:13;top:0}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title{border-top-color:var(--oc-primary-border)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title:before,.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title:after,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title:after{display:block;border-color:var(--oc-primary-border)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title span,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title span{border-top-color:var(--oc-primary-border)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a:before{position:absolute;bottom:-1px;height:2.2px;right:2px;left:2px;content:' ';background-color:var(--bs-body-bg)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title:before,.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title:after,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title:after{background-color:var(--bs-body-bg)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title span,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title span{background-color:var(--bs-body-bg);margin-left:-6px;padding-left:6px;margin-right:-6px;padding-right:6px;margin-bottom:-6px;padding-bottom:6px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a:before{background-color:var(--bs-body-bg)}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon{position:absolute;display:block;text-decoration:none;outline:none;opacity:.6;transition:all .3s;font-size:12px;color:var(--bs-body-color);right:11px}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon:hover,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon:hover{text-decoration:none;opacity:1}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon.primary,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon.primary{color:var(--bs-body-bg);bottom:-25px;z-index:100;-webkit-transform:scale(1, -1);transform:scale(1, -1)}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon.primary i,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon.primary i{position:relative;display:block}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon.tabless,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon.tabless{display:none}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon.primary,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon.primary{color:var(--bs-body-color);top:15px;right:11px;bottom:auto}.fancy-layout .control-tabs.secondary-tabs.primary-collapsed .tab-collapse-icon.primary,.fancy-layout.control-tabs.secondary-tabs.primary-collapsed .tab-collapse-icon.primary{-webkit-transform:scale(1, 1);transform:scale(1, 1)}.fancy-layout .control-tabs.primary-tabs,.fancy-layout.control-tabs.primary-tabs{border-top:1px solid var(--oc-primary-border)}.fancy-layout .control-tabs.primary-tabs.master-area>div>ul.nav-tabs,.fancy-layout.control-tabs.primary-tabs.master-area>div>ul.nav-tabs{-webkit-transition:background-color .5s;transition:background-color .5s;background:var(--bs-body-bg)}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs{background:#7F8C8D;margin-left:0 !important;margin-right:0 !important}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs:before,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs:before{border-bottom-width:1px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li{background:transparent;border:none;margin-right:-8px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li:first-child,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li:first-child{margin-left:-15px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a{background:transparent;border:none;padding:3px 10px 3px;font-size:14px;font-weight:400;color:#536061;top:2px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title{border-bottom:2px solid transparent;border-top:none;padding:0 7px 6px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title:before,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title:before,.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title:after,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title:after{display:none !important}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title span,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title span{border-width:0;vertical-align:top}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a:before,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a:before{top:2px;bottom:-6px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li.active a,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li.active a{color:var(--bs-body-color);font-weight:600}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li.active a:before,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li.active a:before{display:none}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li.active a span.title,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li.active a span.title{border-bottom-color:var(--bs-primary)}.fancy-layout .control-tabs.primary-tabs>.tab-content>.tab-pane,.fancy-layout.control-tabs.primary-tabs>.tab-content>.tab-pane{padding:20px 20px 0 20px}.fancy-layout .control-tabs.primary-tabs>.tab-content>.tab-pane.pane-compact,.fancy-layout.control-tabs.primary-tabs>.tab-content>.tab-pane.pane-compact{padding:0}.fancy-layout .control-tabs.primary-tabs.collapsed,.fancy-layout.control-tabs.primary-tabs.collapsed{display:none}.fancy-layout .control-tabs.has-tabs>div.tab-content,.fancy-layout.control-tabs.has-tabs>div.tab-content{background:var(--bs-body-bg)}.fancy-layout .control-tabs>div.tab-content>div.tab-pane,.fancy-layout.control-tabs>div.tab-content>div.tab-pane{padding:0}.fancy-layout .control-tabs>div.tab-content>div.tab-pane.padded-pane,.fancy-layout.control-tabs>div.tab-content>div.tab-pane.padded-pane{padding:20px 20px 0 20px}.fancy-layout .form-tabless-fields:not(.not-fancy){position:relative;background:var(--bs-body-bg);padding:10px 15px 0 15px}.fancy-layout .form-tabless-fields:not(.not-fancy):before,.fancy-layout .form-tabless-fields:not(.not-fancy):after{content:\" \";display:table}.fancy-layout .form-tabless-fields:not(.not-fancy):after{clear:both}.fancy-layout .form-tabless-fields:not(.not-fancy):before,.fancy-layout .form-tabless-fields:not(.not-fancy):after{content:\" \";display:table}.fancy-layout .form-tabless-fields:not(.not-fancy):after{clear:both}.fancy-layout .form-tabless-fields:not(.not-fancy) label{text-transform:uppercase;font-size:12px;color:var(--oc-primary-color);margin-bottom:0}.fancy-layout .form-tabless-fields:not(.not-fancy) input[type=text]{background:transparent;border:none;color:var(--bs-body-color);font-size:24px;font-weight:400;height:auto;padding:0;box-shadow:none;border:1px solid transparent}.fancy-layout .form-tabless-fields:not(.not-fancy) input[type=text]:focus,.fancy-layout .form-tabless-fields:not(.not-fancy) input[type=text]:hover{border:1px solid var(--oc-primary-border)}.fancy-layout .form-tabless-fields:not(.not-fancy) .form-group{padding-bottom:0}.fancy-layout .form-tabless-fields:not(.not-fancy) .form-group.is-required>label:after{display:none}.fancy-layout .form-tabless-fields:not(.not-fancy) .form-group .form-translatable{position:absolute;margin:0;right:3px;top:28px}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon{position:absolute;display:block;text-decoration:none;outline:none;opacity:.6;transition:all .3s;font-size:12px;color:var(--bs-body-color);right:11px}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon:hover{text-decoration:none;opacity:1}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon.primary{color:var(--bs-body-bg);bottom:-25px;z-index:100;-webkit-transform:scale(1, -1);transform:scale(1, -1)}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon.primary i{position:relative;display:block}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon.tabless{display:none}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon.tabless{top:14px}.fancy-layout .form-tabless-fields:not(.not-fancy).collapsed{padding:5px 23px 0 10px}.fancy-layout .form-tabless-fields:not(.not-fancy).collapsed .tab-collapse-icon.tabless{-webkit-transform:scale(1, -1);transform:scale(1, -1)}.fancy-layout .form-tabless-fields:not(.not-fancy).collapsed .form-group:not(.collapse-visible){display:none}.fancy-layout .form-tabless-fields:not(.not-fancy).collapsed .form-buttons{margin-left:10px;padding-bottom:0}.fancy-layout .form-tabless-fields:not(.not-fancy) .loading-indicator-container .loading-indicator{background-color:var(--bs-body-bg);color:var(--oc-primary-color)}.fancy-layout .form-tabless-fields:not(.not-fancy) .loading-indicator-container .loading-indicator>span,.fancy-layout .form-tabless-fields:not(.not-fancy) .loading-indicator-container .loading-indicator>div{margin-left:15px}.fancy-layout .form-buttons{margin-top:10px;padding-top:5px;padding-bottom:3px;margin-left:-15px;margin-right:-15px;padding-left:10px;padding-right:10px;border-top:1px solid var(--oc-primary-border)}.fancy-layout .form-buttons.loading-indicator-container.in-progress{overflow:hidden}.fancy-layout .form-buttons .btn{padding:6px;margin-right:8px;background:transparent;color:var(--oc-toolbar-color);font-size:14px;font-weight:normal;box-shadow:none}.fancy-layout .form-buttons .btn:before{margin-right:2px}.fancy-layout .form-buttons .btn:hover{background:var(--oc-toolbar-hover-bg)}.fancy-layout .form-buttons .btn:last-child{margin-right:0}.fancy-layout .form-buttons .btn[class^=\"oc-icon-\"]:before,.fancy-layout .form-buttons .btn[class*=\" oc-icon-\"]:before{opacity:1}.fancy-layout form.oc-data-changed .btn.save{opacity:1}.fancy-layout .field-codeeditor{border:none !important;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.fancy-layout .field-codeeditor .editor-code{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.fancy-layout .field-markdowneditor{border:none !important}.fancy-layout .field-richeditor{border:none}.fancy-layout .field-richeditor,.fancy-layout .field-richeditor .fr-toolbar,.fancy-layout .field-richeditor .fr-wrapper{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-top-right-radius:0;border-top-left-radius:0}.fancy-layout .secondary-content-tabs .field-richeditor .fr-toolbar{background:var(--bs-body-bg)}body.side-panel-not-fixed .fancy-layout .field-richeditor{border-left:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs{padding:13px 0;background:var(--oc-document-tabs-bg);border-bottom:1px solid var(--oc-primary-border)}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs:before{display:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li{border-right:1px solid var(--oc-primary-border);border-bottom:none;margin:0!important;padding:0}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li:first-child{margin-left:-12px !important}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li:last-child{border-right:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a{padding:2px 12px 0;height:24px;border:none;top:0}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a:before{display:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title{padding:0;margin:0}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title:before,.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title:after{display:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title>span{margin:0;padding:0;border-top:none;color:inherit;background-color:transparent}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title>span:before,.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title>span:after{display:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li.active a{color:var(--bs-primary)}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)[data-single-tab]>div>ul.nav-tabs{display:none!important}.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-label,.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-translatable{display:none}.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-control{display:block;font-size:24px;width:100%;border:1px solid var(--bs-body-bg);outline:none;background:transparent;color:var(--bs-body-color);padding:1px}.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-control:not([disabled]):hover,.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-control:not([disabled]):focus{border:1px solid var(--bs-border-color);box-shadow:none}.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field span.form-control{opacity:.5}.form-document-layout div.primary-tabs-container>div>.layout-row{display:table-cell}.form-document-layout div.primary-tabs-container>div>.layout-row .tab-pane.is-adaptive{padding-top:0}.form-document-layout .component-backend-document .document-progress-indicator{z-index:1}.form-document-layout .form-group.span-adaptive{margin-left:-20px;margin-right:-20px}.form-document-layout .form-group.span-adaptive>.form-label,.form-document-layout .form-group.span-adaptive>.form-translatable{display:none}.form-document-layout .record-management-controls{padding-left:20px;padding-bottom:20px}.form-with-sidebar .form-with-sidebar-canvas{position:absolute;top:0;bottom:0;left:0;right:0}.form-with-sidebar>.form-sidebar{width:300px;background:var(--bs-tertiary-bg);border-left:1px solid var(--oc-primary-border)}.form-with-sidebar.sidebar-width-350>.form-sidebar{width:350px}.form-with-sidebar.sidebar-width-400>.form-sidebar{width:400px}.form-with-sidebar.sidebar-width-450>.form-sidebar{width:450px}.form-with-sidebar.sidebar-width-500>.form-sidebar{width:500px}.form-with-sidebar.sidebar-width-550>.form-sidebar{width:550px}.form-with-sidebar.sidebar-width-600>.form-sidebar{width:600px}.form-with-sidebar.sidebar-width-650>.form-sidebar{width:650px}.form-with-sidebar.sidebar-width-700>.form-sidebar{width:700px}.form-with-sidebar.sidebar-width-750>.form-sidebar{width:750px}@media (max-width:992px){.form-with-sidebar{flex-direction:column-reverse}.form-with-sidebar .form-with-sidebar-canvas{position:relative}.form-with-sidebar>.form-contents{height:auto}.form-with-sidebar>.form-contents .control-breadcrumb{display:none}.form-with-sidebar>.form-sidebar{width:100% !important;height:auto;border-left:none;border-bottom:1px solid var(--oc-primary-border)}.form-with-sidebar>.form-sidebar .control-scrollbar{overflow:visible;height:auto}.form-with-sidebar>.form-sidebar .control-scrollbar .scrollbar-scrollbar{display:none !important}}.flyout-container>.flyout-content{overflow:hidden;width:0;left:0!important;transition:width .1s}.flyout-overlay{width:100%;height:100%;top:0;z-index:5000;position:absolute;background-color:rgba(0,0,0,0);transition:background-color .3s}.flyout-toggle{position:absolute;top:20px;left:0;width:23px;height:25px;background:#35425b;cursor:pointer;border-bottom-right-radius:4px;border-top-right-radius:4px;color:#bdc3c7;font-size:10px}.flyout-toggle i{margin:7px 0 0 6px;display:inline-block}.flyout-toggle:hover i{color:#ffffff}body.flyout-visible{overflow:hidden}body.flyout-visible .flyout-overlay{background-color:rgba(0,0,0,0.3)}#layout-sidenav-responsive.has-toggle{position:relative}#layout-sidenav-responsive.has-toggle ul.nav{padding-left:35px}#layout-sidenav-responsive.has-toggle .flyout-toggle{top:18px}"
  },
  {
    "path": "modules/backend/assets/foundation/controls/autocomplete/README.md",
    "content": "# Autocomplete\n\n### Autocomplete\n\nAutocomplete control.\n\n    <input\n        class=\"form-control\"\n        placeholder=\"Search for something or else\"\n        data-control=\"autocomplete\"\n        data-source=\"something: 'Something', else: 'Else'\" />\n\n## JavaScript API\n\n```js\n$('input').autocomplete({\n    source: { something: 'Something', else: 'Else' }\n})\n```\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/autocomplete/autocomplete.js",
    "content": "/*\n * The autcomplete plugin, a forked version of Bootstrap's original typeahead plugin.\n *\n * Data attributes:\n * - data-control=\"autocomplete\" - enables the autocomplete plugin\n *\n * JavaScript API:\n * $('input').autocomplete()\n *\n * Forked by daftspunk:\n *\n * - Source can be an object [{ value: 'something', label: 'Something' }, { value: 'else', label: 'Something Else' }]\n * - Source can also be { something: 'Something', else: 'Else' }\n */\n\n!function($){\n\n    \"use strict\"; // jshint ;_;\n\n\n    /* AUTOCOMPLETE PUBLIC CLASS DEFINITION\n     * ================================= */\n\n    var Autocomplete = function (element, options) {\n        this.$element = $(element)\n        this.options = $.extend({}, $.fn.autocomplete.defaults, options)\n        this.matcher = this.options.matcher || this.matcher\n        this.sorter = this.options.sorter || this.sorter\n        this.highlighter = this.options.highlighter || this.highlighter\n        this.updater = this.options.updater || this.updater\n        this.source = this.options.source\n        this.$menu = $(this.options.menu)\n        this.shown = false\n        this.listen()\n    }\n\n    Autocomplete.prototype = {\n\n        constructor: Autocomplete,\n\n        select: function () {\n            var val = this.$menu.find('.active').attr('data-value')\n            this.$element\n                .val(this.updater(val))\n                .change()\n            return this.hide()\n        },\n\n        updater: function (item) {\n            return item\n        },\n\n        show: function () {\n            var offset = this.options.bodyContainer ? this.$element.offset() : this.$element.position(),\n                pos = $.extend({}, offset, {\n                height: this.$element[0].offsetHeight\n            }),\n            cssOptions = {\n                top: pos.top + pos.height\n                , left: pos.left\n            }\n\n            if (this.options.matchWidth) {\n                cssOptions.width = this.$element[0].offsetWidth\n            }\n\n            this.$menu.css(cssOptions)\n\n            if (this.options.bodyContainer) {\n                $(document.body).append(this.$menu)\n            }\n            else {\n                this.$menu.insertAfter(this.$element)\n            }\n\n            this.$menu.show()\n\n            this.shown = true\n            return this\n        },\n\n        hide: function () {\n            this.$menu.hide()\n            this.shown = false\n            return this\n        },\n\n        lookup: function (event) {\n            var items\n\n            this.query = this.$element.val()\n\n            if (!this.query || this.query.length < this.options.minLength) {\n                return this.shown ? this.hide() : this\n            }\n\n            items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source\n\n            return items ? this.process(items) : this\n        },\n\n        itemValue: function (item) {\n            if (typeof item === 'object')\n                return item.value;\n\n            return item;\n        },\n\n        itemLabel: function (item) {\n            if (typeof item === 'object')\n                return item.label;\n\n            return item;\n        },\n\n        itemsToArray: function (items) {\n            var newArray = []\n            $.each(items, function(value, label){\n                newArray.push({ label: label, value: value })\n            })\n            return newArray\n        },\n\n        process: function (items) {\n            var that = this\n\n            if (typeof items == 'object')\n                items = this.itemsToArray(items)\n\n            items = $.grep(items, function (item) {\n                return that.matcher(item)\n            })\n\n            items = this.sorter(items)\n\n            if (!items.length) {\n                return this.shown ? this.hide() : this\n            }\n\n            return this.render(items.slice(0, this.options.items)).show()\n        },\n\n        matcher: function (item) {\n            return ~this.itemValue(item).toLowerCase().indexOf(this.query.toLowerCase())\n        },\n\n        sorter: function (items) {\n            var beginswith = [],\n                caseSensitive = [],\n                caseInsensitive = [],\n                item,\n                itemValue\n\n            while (item = items.shift()) {\n                itemValue = this.itemValue(item)\n                if (!itemValue.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)\n                else if (~itemValue.indexOf(this.query)) caseSensitive.push(item)\n                else caseInsensitive.push(item)\n            }\n\n            return beginswith.concat(caseSensitive, caseInsensitive)\n        },\n\n        highlighter: function (item) {\n            var query = this.query.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&')\n            return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {\n                return '<strong>' + match + '</strong>'\n            })\n        },\n\n        render: function (items) {\n            var that = this\n\n            items = $(items).map(function (i, item) {\n                i = $(that.options.item).attr('data-value', that.itemValue(item))\n                i.find('a').html(that.highlighter(that.itemLabel(item)))\n                return i[0]\n            })\n\n            items.first().addClass('active')\n            this.$menu.html(items)\n            return this\n        },\n\n        next: function (event) {\n            var active = this.$menu.find('.active').removeClass('active'),\n                next = active.next()\n\n            if (!next.length) {\n                next = $(this.$menu.find('li')[0])\n            }\n\n            next.addClass('active')\n        },\n\n        prev: function (event) {\n            var active = this.$menu.find('.active').removeClass('active'),\n                prev = active.prev()\n\n            if (!prev.length) {\n                prev = this.$menu.find('li').last()\n            }\n\n            prev.addClass('active')\n        },\n\n        listen: function () {\n            this.$element\n                .on('focus.autocomplete',    $.proxy(this.focus, this))\n                .on('blur.autocomplete',     $.proxy(this.blur, this))\n                .on('keypress.autocomplete', $.proxy(this.keypress, this))\n                .on('keyup.autocomplete',    $.proxy(this.keyup, this))\n\n            if (this.eventSupported('keydown')) {\n                this.$element.on('keydown.autocomplete', $.proxy(this.keydown, this))\n            }\n\n            this.$menu\n                .on('click.autocomplete', $.proxy(this.click, this))\n                .on('mouseenter.autocomplete', 'li', $.proxy(this.mouseenter, this))\n                .on('mouseleave.autocomplete', 'li', $.proxy(this.mouseleave, this))\n        },\n\n        eventSupported: function(eventName) {\n            var isSupported = eventName in this.$element\n            if (!isSupported) {\n                this.$element.setAttribute(eventName, 'return;')\n                isSupported = typeof this.$element[eventName] === 'function'\n            }\n            return isSupported\n        },\n\n        move: function (e) {\n            if (!this.shown) return\n\n            switch(e.key) {\n                case 'Tab':\n                case 'Enter':\n                case 'Escape':\n                    e.preventDefault()\n                    break\n\n                case 'ArrowUp':\n                    e.preventDefault()\n                    this.prev()\n                    break\n\n                case 'ArrowDown':\n                    e.preventDefault()\n                    this.next()\n                    break\n            }\n\n            e.stopPropagation()\n        },\n\n        keydown: function (e) {\n            this.suppressKeyPressRepeat = ~$.inArray(e.key, ['ArrowDown','ArrowUp','Tab','Enter','Escape'])\n            this.move(e)\n        },\n\n        keypress: function (e) {\n            if (this.suppressKeyPressRepeat) return\n            this.move(e)\n        },\n\n        keyup: function (e) {\n            switch(e.keyCode) {\n                case 40: // down arrow\n                case 38: // up arrow\n                case 16: // shift\n                case 17: // ctrl\n                case 18: // alt\n                    break\n\n                case 9: // tab\n                case 13: // enter\n                    if (!this.shown) return\n                    this.select()\n                    break\n\n                case 27: // escape\n                    if (!this.shown) return\n                    this.hide()\n                    break\n\n                default:\n                    this.lookup()\n            }\n\n            e.stopPropagation()\n            e.preventDefault()\n        },\n\n        focus: function (e) {\n            this.focused = true\n        },\n\n        blur: function (e) {\n            this.focused = false\n            if (!this.mousedover && this.shown) this.hide()\n        },\n\n        click: function (e) {\n            e.stopPropagation()\n            e.preventDefault()\n            this.select()\n            this.$element.focus()\n        },\n\n        mouseenter: function (e) {\n            this.mousedover = true\n            this.$menu.find('.active').removeClass('active')\n            $(e.currentTarget).addClass('active')\n        },\n\n        mouseleave: function (e) {\n            this.mousedover = false\n            if (!this.focused && this.shown) this.hide()\n        },\n\n        destroy: function() {\n            this.hide()\n\n            this.$element.removeData('autocomplete')\n            this.$menu.remove()\n\n            this.$element.off('.autocomplete')\n            this.$menu.off('.autocomplete')\n\n            this.$element = null\n            this.$menu = null\n        }\n    }\n\n\n    /* AUTOCOMPLETE PLUGIN DEFINITION\n     * =========================== */\n\n    var old = $.fn.autocomplete\n\n    $.fn.autocomplete = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n                , data = $this.data('autocomplete')\n                , options = typeof option == 'object' && option\n            if (!data) $this.data('autocomplete', (data = new Autocomplete(this, options)))\n            if (typeof option == 'string') data[option]()\n        })\n    }\n\n    $.fn.autocomplete.defaults = {\n        source: [],\n        items: 8,\n        menu: '<ul class=\"autocomplete dropdown-menu\"></ul>',\n        item: '<li><a href=\"#\"></a></li>',\n        minLength: 1,\n        bodyContainer: false\n    }\n\n    $.fn.autocomplete.Constructor = Autocomplete\n\n\n    /* AUTOCOMPLETE NO CONFLICT\n     * =================== */\n\n    $.fn.autocomplete.noConflict = function () {\n        $.fn.autocomplete = old\n        return this\n    }\n\n\n    /* AUTOCOMPLETE DATA-API\n     * ================== */\n\n    function paramToObj(name, value) {\n        if (value === undefined) value = ''\n        if (typeof value == 'object') return value\n\n        try {\n            return oc.parseJSON(\"{\" + value + \"}\")\n        }\n        catch (e) {\n            throw new Error('Error parsing the '+name+' attribute value. '+e)\n        }\n    }\n\n    $(document).on('focus.autocomplete.data-api', '[data-control=\"autocomplete\"]', function (e) {\n        var $this = $(this)\n        if ($this.data('autocomplete')) return\n\n        var opts = $this.data()\n\n        if (opts.source) {\n            opts.source = paramToObj('data-source', opts.source)\n        }\n\n        $this.autocomplete(opts)\n    })\n\n}(window.jQuery);\n\n\n/* =============================================================\n * bootstrap-autocomplete.js v2.3.1\n * http://twitter.github.com/bootstrap/javascript.html#autocomplete\n * =============================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/autocomplete/autocomplete.less",
    "content": ".autocomplete.dropdown-menu {\n    background: @dropdown-bg;\n\n    li a {\n        padding: 3px 12px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/balloon-selector/README.md",
    "content": "# Balloon selector\n\n    <div data-control=\"balloon-selector\" class=\"control-balloon-selector\">\n        <ul>\n            <li data-value=\"1\" class=\"active\">One</li>\n            <li data-value=\"2\">Two</li>\n            <li data-value=\"3\">Three</li>\n        </ul>\n\n        <input type=\"hidden\" name=\"balloonValue\" value=\"1\" />\n    </div>\n\nIf you don't define `data-control=\"balloon-selector\"` then the control will act as a static list of labels.\n\n    <div class=\"control-balloon-selector\">\n        <ul>\n            <li>Monday</li>\n            <li>Tuesday</li>\n            <li>Happy days!</li>\n        </ul>\n    </div>\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/balloon-selector/balloon-selector.js",
    "content": "/*\n * Balloon selector control.\n *\n * Data attributes:\n * - data-control=\"balloon-selector\" - enables the plugin\n *\n */\n+function ($) { \"use strict\";\n\n    var BalloonSelector = function (element, options) {\n\n        this.$el = $(element);\n        this.$field = $('input', this.$el);\n\n        this.options = options || {};\n        this.allowEmpty = 'selectorAllowEmpty' in this.$el.get(0).dataset;\n\n        var self = this;\n        $('li', this.$el).click(function(){\n            if (self.$el.hasClass('control-disabled')) {\n                return;\n            }\n\n            if (self.allowEmpty && $(this).hasClass('active')) {\n                $(this).removeClass('active');\n                self.$field\n                    .val('')\n                    .trigger('change');\n                return;\n            }\n\n            $('li', self.$el).removeClass('active');\n            $(this).addClass('active');\n            self.$field\n                .val($(this).data('value'))\n                .trigger('change');\n        });\n\n        oc.Events.on(this.$el.get(0), 'trigger:empty', function() {\n            $('li', self.$el).removeClass('active');\n            self.$field.val('').trigger('change');\n        });\n\n        oc.Events.on(this.$el.get(0), 'trigger:fill', function(ev) {\n            var fillValue = ev.detail.fillValue;\n            $('li', self.$el).removeClass('active');\n            $('li[data-value=\"'+fillValue+'\"]', self.$el).addClass('active');\n            self.$field.val(fillValue).trigger('change');\n        });\n\n        oc.Events.on(this.$el.get(0), 'trigger:disable', function(ev) {\n            var status = ev.detail.status;\n            self.$field.prop('disabled', status);\n        });\n    }\n\n    BalloonSelector.DEFAULTS = {}\n\n    // BALLOON SELECTOR PLUGIN DEFINITION\n    // ===================================\n\n    var old = $.fn.balloonSelector;\n\n    $.fn.balloonSelector = function (option) {\n        return this.each(function () {\n            var $this = $(this);\n            var data  = $this.data('oc.balloon-selector');\n            var options = $.extend({}, BalloonSelector.DEFAULTS, $this.data(), typeof option == 'object' && option);\n\n            if (!data) $this.data('oc.balloon-selector', (data = new BalloonSelector(this, options)));\n        });\n    }\n\n    $.fn.balloonSelector.Constructor = BalloonSelector;\n\n    // BALLOON SELECTOR NO CONFLICT\n    // ===================================\n\n    $.fn.balloonSelector.noConflict = function () {\n        $.fn.balloonSelector = old;\n        return this;\n    }\n\n    // BALLOON SELECTOR DATA-API\n    // ===================================\n\n    $(document).on('render', function(){\n        $('div[data-control=balloon-selector]').balloonSelector();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/balloon-selector/balloon-selector.less",
    "content": "//\n// Balloon selector\n// --------------------------------------------------\n\n@color-balloon-control-default-text:         @input-color;\n@color-balloon-control-hover-bg:             @toolbar-hover-bg;\n@color-balloon-control-active-bg:            @brand-selection;\n\nbody .control-balloon-selector {\n    ul {\n        padding: 0;\n        display: inline-block;\n        // background: white;\n        font-size: 0;\n\n        li {\n            list-style: none;\n            line-height: 36px;\n            display: inline-block;\n            background-color: @input-bg;\n            color: @color-balloon-control-default-text;\n            font-size: @input-font-size;\n            padding: 0 14px;\n            border: 1px solid @input-border;\n\n            &:first-child {\n                border-top-left-radius: @border-radius-base;\n                border-bottom-left-radius: @border-radius-base;\n            }\n\n            &:last-child {\n                border-top-right-radius: @border-radius-base;\n                border-bottom-right-radius: @border-radius-base;\n            }\n\n            &.active {\n                background: @color-balloon-control-active-bg !important;\n                color: white;\n                border-color: @color-balloon-control-active-bg;\n                position: relative;\n                z-index: 1;\n            }\n\n            + li {\n                margin-left: -1px;\n            }\n        }\n    }\n\n    &.control-disabled {\n        ul li.active {\n            background-color: @color-grey-2!important;\n            border-color: @color-grey-2!important;\n        }\n    }\n\n    &:not(.control-disabled) ul {\n        li:hover {\n            background: @color-balloon-control-hover-bg;\n            cursor: pointer;\n        }\n    }\n\n    &.form-control-sm {\n        li {\n            font-size: @font-size-small;\n            padding: 0 10px;\n            line-height: 27px;\n        }\n    }\n}\n\n.form-group {\n    .control-balloon-selector ul {\n        margin-bottom: 0;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/build.less",
    "content": "//\n// Controls\n// --------------------------------------------------\n\n@import \"autocomplete/autocomplete.less\";\n@import \"balloon-selector/balloon-selector.less\";\n@import \"callout/callout.less\";\n@import \"chart/chart.less\";\n@import \"dropdown/dropdown.less\";\n@import \"flashmessage/flashmessage.less\";\n@import \"inspector/inspector.less\";\n@import \"popover/popover.less\";\n@import \"popup/popup.less\";\n@import \"toolbar/toolbar.less\";\n@import \"tooltip/tooltip.less\";\n@import \"checkbox/checkbox.less\";\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/callout/README.md",
    "content": "# Callout\n\n### Callout\n\nDisplays a detailed message to the user, also allowing it to be dismissed.\n\n    <div class=\"callout fade in callout-warning\">\n        <button\n            type=\"button\"\n            class=\"close\"\n            data-dismiss=\"callout\"\n            aria-hidden=\"true\">&times;</button>\n        <div class=\"header\">\n            <i class=\"icon-warning\"></i>\n            <h3>Warning warning</h3>\n            <p>My arms are flailing wildly</p>\n        </div>\n        <div class=\"content\">\n            <p>Insert coin(s) to begin play</p>\n        </div>\n    </div>\n\n### No sub-header\n\nInclude the `no-subheader` class to omit the sub heading.\n\n    <div class=\"callout fade in callout-info no-subheader\">\n        <div class=\"header\">\n            <i class=\"icon-info\"></i>\n            <h3>Incoming unicorn</h3>\n        </div>\n    </div>\n\n### No icon\n\nInclude the `no-icon` class to omit the icon.\n\n    <div class=\"callout fade in callout-danger no-icon\">\n        <div class=\"header\">\n            <h3>There was a hull breach</h3>\n            <ul>\n                <li>Get to the chopper</li>\n            </ul>\n        </div>\n    </div>\n\n### No header\n\n    <div class=\"callout fade in callout-success\">\n        <div class=\"content\">\n            <p>Something good happened</p>\n            <ul>\n                <li>You found a pony</li>\n            </ul>\n        </div>\n    </div>\n\n### Data attributes:\n\n- data-dismiss=\"callout\" - when assigned to an element, the callout hides on click\n\n## JavaScript API\n\n### Events\n\n- close.oc.callout - triggered when the callout is closed\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/callout/callout.js",
    "content": "/*\n * Callout\n *\n * - Documentation: ../docs/callout.md\n */\n+function ($) {\n    'use strict';\n\n    // CALLOUT CLASS DEFINITION\n    // ======================\n\n    var dismiss = '[data-dismiss=\"callout\"]';\n    var Callout = function (el) {\n        $(el).on('click', dismiss, this.close);\n    }\n\n    Callout.prototype.close = function (e) {\n        var $this    = $(this);\n        var selector = $this.attr('data-target');\n\n        if (!selector) {\n            selector = $this.attr('href');\n        }\n\n        var $parent = $(selector);\n\n        if (e) {\n            e.preventDefault();\n        }\n\n        if (!$parent.length) {\n            $parent = $this.hasClass('callout') ? $this : $this.parent();\n        }\n\n        $parent.trigger(e = $.Event('close.oc.callout'));\n\n        if (e.isDefaultPrevented()) {\n            return;\n        }\n\n        $parent.removeClass('show');\n\n        function removeElement() {\n            $parent.trigger('closed.oc.callout').remove();\n        }\n\n        $parent.hasClass('fade')\n            ? $parent.one('transitionend', removeElement)\n            : removeElement();\n    }\n\n    // CALLOUT PLUGIN DEFINITION\n    // =======================\n\n    var old = $.fn.callout\n\n    $.fn.callout = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.callout')\n\n            if (!data) $this.data('oc.callout', (data = new Callout(this)))\n            if (typeof option == 'string') data[option].call($this)\n        })\n    }\n\n    $.fn.callout.Constructor = Callout\n\n    // CALLOUT NO CONFLICT\n    // =================\n\n    $.fn.callout.noConflict = function () {\n        $.fn.callout = old;\n        return this;\n    }\n\n    // CALLOUT DATA-API\n    // ==============\n\n    $(document).on('click.oc.callout.data-api', dismiss, Callout.prototype.close);\n\n}(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/callout/callout.less",
    "content": "//\n// Callouts\n// --------------------------------------------------\n\n@callout-color:               var(--bs-body-color);\n@callout-info-bg:             var(--oc-callout-info-bg);\n@callout-info-icon:           var(--oc-callout-info-icon);\n@callout-warning-bg:          var(--oc-callout-warning-bg);\n@callout-warning-icon:        var(--oc-callout-warning-icon);\n@callout-danger-bg:           var(--oc-callout-danger-bg);\n@callout-danger-icon:         var(--oc-callout-danger-icon);\n@callout-success-bg:          var(--oc-callout-success-bg);\n@callout-success-icon:        var(--oc-callout-success-icon);\n\n:root, [data-bs-theme=\"light\"] {\n    --oc-callout-info-bg: #e6e7fc;\n    --oc-callout-info-icon: #6a6cf7;\n    --oc-callout-warning-bg: #faf6e2;\n    --oc-callout-warning-icon: #e1b810;\n    --oc-callout-danger-bg: #fadad7;\n    --oc-callout-danger-content-bg: #fadad7;\n    --oc-callout-danger-icon: #ff3e1d;\n    --oc-callout-success-bg: #ecf7da;\n    --oc-callout-success-icon: #86cb43;\n}\n\n[data-bs-theme=\"dark\"] {\n    --oc-callout-info-bg: #12262c;\n    --oc-callout-warning-bg: #302310;\n    --oc-callout-danger-bg: #330c06;\n    --oc-callout-success-bg: #1b290d;\n}\n\n.callout {\n    font-size: @font-size-base;\n    margin-bottom: @line-height-computed;\n\n    &.fade {\n        opacity: 0;\n        transition: all 0.5s, width 0s;\n        transform: scale(0.9);\n    }\n\n    &.fade.show {\n        opacity: 1;\n        transform: scale(1);\n    }\n\n    > .close {\n        width: 22px;\n        height: 22px;\n        margin: 15px 15px 0;\n        position: relative;\n        .hide-text();\n        opacity: 1;\n\n        &:before {\n            .icon-OctoFont();\n            content: @icon-cross;\n            color: @callout-color;\n            font-size: 16px;\n            position: relative;\n        }\n\n        &:hover:before {\n            color: @brand-danger;\n        }\n    }\n\n    > .action {\n        float: right;\n        padding: 10px;\n    }\n\n    > .header + .content {\n        border-top: none;\n    }\n\n    > .header {\n        padding: 15px 20px 5px;\n        border-radius: 4px 4px 0 0;\n        color: @callout-color;\n        margin-bottom: -1px;\n\n        > .custom-icon {\n            width: 27.5px;\n            text-align: center;\n            font-size: 22px;\n            float: left;\n            position: relative;\n            top: -5px;\n            left: -5px;\n        }\n\n        //\n        // Default icon\n        //\n\n        > i, > .custom-icon {\n            display: none;\n        }\n\n        &:before {\n            .icon-OctoFont();\n            float: left;\n            font-size: 22px;\n            position: relative;\n            left: -3px;\n        }\n\n        h3 {\n            letter-spacing: 0;\n            font-size: @font-size-base;\n            font-weight: 600;\n            line-height: 150%;\n            margin: 0;\n        }\n\n        h3, p, ul, ol {\n            margin-left: 32px;\n            margin-bottom: 7px;\n        }\n\n        ul, ol {\n            padding-left: @padding-standard;\n        }\n\n        &:last-child {\n            border-radius: 4px;\n            margin-bottom: 0;\n        }\n    }\n\n    > .content {\n        color: @callout-color;\n        padding: 0 20px 15px 52px;\n        border-radius: 0 0 4px 4px;\n\n        h1,\n        h2,\n        h3,\n        h4,\n        h5,\n        h6 {\n            color: @callout-color;\n            text-transform: none;\n            margin: 20px 0 5px 0;\n            line-height: 150%;\n            font-weight: 600;\n        }\n\n        h1 {\n            font-size: 30px;\n        }\n        h2 {\n            font-size: 26px;\n        }\n        h3 {\n            font-size: 24px;\n        }\n        h4 {\n            font-size: 20px;\n        }\n        h5 {\n            font-size: 18px;\n        }\n        h6 {\n            font-size: 16px;\n        }\n\n        *:last-child {\n            margin-bottom: 0;\n        }\n\n        ul, ol {\n            padding-left: @padding-standard;\n\n            li {\n                margin-bottom: 5px;\n            }\n        }\n\n        .action-panel {\n            padding: 10px 0 0 0;\n        }\n    }\n\n    //\n    // Modifiers\n    //\n\n    &.has-custom-icon {\n        > .header {\n            > .custom-icon {\n                display: block;\n            }\n\n            &:before {\n                display: none;\n            }\n        }\n    }\n\n    &.no-title {\n        > .content {\n            padding-top: 15px;\n            border-radius: 4px;\n        }\n    }\n\n    &.no-subheader {\n        > .header {\n            padding-bottom: 10px;\n        }\n\n        > .header + .content {\n            margin-top: -5px;\n        }\n    }\n\n    &.no-icon {\n        > .header {\n            h3,\n            p,\n            ul,\n            ol {\n                margin-left: 0;\n            }\n\n            &:before {\n                display: none;\n            }\n        }\n\n        > .content {\n            padding-left: 20px;\n        }\n    }\n\n    //\n    // Styles\n    //\n\n    &.callout-danger {\n        > .header {\n            background: @callout-danger-bg;\n\n            > .custom-icon {\n                color: @callout-danger-icon;\n            }\n\n            &:before {\n                content: @icon-callout-danger;\n                color: @callout-danger-icon;\n            }\n        }\n        > .content {\n            background: @callout-danger-bg;\n        }\n    }\n\n    &.callout-info {\n        > .header {\n            background: @callout-info-bg;\n\n            > .custom-icon {\n                color: @callout-info-icon;\n            }\n\n            &:before {\n                content: @icon-callout-info;\n                color: @callout-info-icon;\n            }\n        }\n        > .content {\n            background: @callout-info-bg;\n        }\n    }\n\n    &.callout-success {\n        > .header {\n            background: @callout-success-bg;\n\n            > .custom-icon {\n                color: @callout-success-icon;\n            }\n\n            &:before {\n                content: @icon-callout-success;\n                color: @callout-success-icon;\n            }\n        }\n        > .content {\n            background: @callout-success-bg;\n        }\n    }\n\n    &.callout-warning {\n        > .header {\n            background: @callout-warning-bg;\n\n            > .custom-icon {\n                color: @callout-warning-icon;\n            }\n\n            &:before {\n                content: @icon-callout-danger;\n                color: @callout-warning-icon;\n            }\n        }\n        > .content {\n            background: @callout-warning-bg;\n        }\n    }\n\n    &.is-flush {\n        margin-bottom: 0;\n        > .content {\n            border-bottom-left-radius: 0;\n            border-bottom-right-radius: 0;\n        }\n    }\n}\n\n.form-group > .callout {\n    margin-bottom: 0;\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/chart/README.md",
    "content": "# Chart\n\n<a name=\"pie-chart\" class=\"anchor\" href=\"#pie-chart\"></a>\n## Pie chart\n\nThe pie chart outputs information as a circle diagram, with optional label in the center. Example markup:\n\n    <div\n        class=\"control-chart centered wrap-legend\"\n        data-control=\"chart-pie\"\n        data-size=\"200\"\n        data-center-text=\"100\">\n        <ul>\n            <li>Label 1 <span>100</span></li>\n            <li>Label 2 <span>100</span></li>\n            <li>Label 3 <span>100</span></li>\n        </ul>\n    </div>\n\n![image](https://github.com/octobercms/docs/blob/develop/images/traffic-sources.png?raw=true) {.img-responsive .frame}\n\n<a name=\"line-chart\" class=\"anchor\" href=\"#line-chart\"></a>\n## Line chart\n\nThe next example shows a line chart markup. Data sets are defined with the SPAN elements inside the chart element.\n\n    <div\n        data-control=\"chart-line\"\n        data-time-mode=\"weeks\"\n        style=\"height: 200px\"\n        data-chart-options=\"xaxis: {mode: 'time'}\">\n        <span\n            data-chart=\"dataset\"\n            data-set-color=\"#008dc9\"\n            data-set-data=\"[1477857082000, 400], [1477943482000, 380], [1478029882000, 340], [1478116282000, 540], [1478202682000, 440], [1478289082000, 360], [1478375482000, 220]\"\n            data-set-name=\"Visits\">\n        </span>\n    </div>\n\n![image](https://github.com/octobercms/docs/blob/develop/images/line-chart.png?raw=true) {.img-responsive .frame}\n\n<a name=\"bar-chart\" class=\"anchor\" href=\"#bar-chart\"></a>\n## Bar chart\n\nThe next example shows a bar chart markup. The **wrap-legend** class is optional, it manages the legend layout. The **data-height** and **data-full-width** attributes are optional as well.\n\n    <div\n        class=\"control-chart wrap-legend\"\n        data-control=\"chart-bar\"\n        data-height=\"100\"\n        data-full-width=\"1\">\n        <ul>\n            <li>Label 1 <span>100</span></li>\n            <li>Label 2 <span>100</span></li>\n            <li>Label 3 <span>100</span></li>\n        </ul>\n    </div>\n\n![image](https://github.com/octobercms/docs/blob/develop/images/bar-chart.png?raw=true) {.img-responsive .frame}\n\n# Example\n\n    <div\n        class=\"control-chart centered wrap-legend\"\n        data-control=\"chart-pie\"\n        data-size=\"200\"\n        data-center-text=\"100\">\n        <ul>\n            <li>Label 1 <span>100</span></li>\n            <li>Label 2 <span>100</span></li>\n            <li>Label 3 <span>100</span></li>\n        </ul>\n    </div>\n\n    <div\n        class=\"control-chart wrap-legend\"\n        data-control=\"chart-bar\"\n        data-height=\"100\"\n        data-full-width=\"1\">\n        <ul>\n            <li>Label 1 <span>100</span></li>\n            <li>Label 2 <span>100</span></li>\n            <li>Label 3 <span>100</span></li>\n        </ul>\n    </div>\n\n\n<a name=\"bar-chart\" class=\"anchor\" href=\"#bar-chart\"></a>\n## Status list\n\nA list of statuses and values\n\n# Example\n\n    <div class=\"control-status-list\">\n        <ul>\n            <li>\n                <span class=\"status-icon success\"><i class=\"icon-check\"></i></span>\n                <span class=\"status-text success\">Software is up to date</span>\n                <a href=\"#\" class=\"status-label link\">Update</a>\n            </li>\n\n            <li>\n                <span class=\"status-icon warning\"><i class=\"icon-exclamation\"></i></span>\n                <span class=\"status-text warning\">Some issues need attention</span>\n                <a href=\"#\" class=\"status-label link\">View</a>\n            </li>\n\n            <li>\n                <span class=\"status-icon\"><i class=\"icon-info\"></i></span>\n                <span class=\"status-text\">System build</span>\n                <span class=\"status-label primary\">313</span>\n            </li>\n\n            <li>\n                <span class=\"status-icon\"><i class=\"icon-info\"></i></span>\n                <span class=\"status-text\">Event log items</span>\n                <span class=\"status-label primary\">200</span>\n            </li>\n\n            <li>\n                <span class=\"status-icon\"><i class=\"icon-info\"></i></span>\n                <span class=\"status-text\">Online since</span>\n                <span class=\"status-label link\">4th April 2014</span>\n            </li>\n        </ul>\n    </div>\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/chart/chart.bar.js",
    "content": "/*\n * The bar chart plugin.\n *\n * Data attributes:\n * - data-control=\"chart-bar\" - enables the bar chart plugin\n * - data-height=\"200\" - optional, height of the graph\n * - data-full-width=\"1\" - optional, determines whether the chart should use the full width of the container\n *\n * JavaScript API:\n * $('.scoreboard .chart').barChart()\n *\n * Dependencies:\n * - Raphaël (raphael-min.js)\n */\n+function ($) { \"use strict\";\n\n    var BarChart = function (element, options) {\n        this.options = options || {}\n\n        var\n            $el = this.$el = $(element),\n            size = this.size = $el.height(),\n            self = this,\n            values = $.oc.chartUtils.loadListValues($('ul', $el)),\n            $legend = $.oc.chartUtils.createLegend($('ul', $el)),\n            indicators = $.oc.chartUtils.initLegendColorIndicators($legend),\n            isFullWidth = this.isFullWidth(),\n            chartHeight = this.options.height !== undefined ? this.options.height : size,\n            chartWidth = isFullWidth ? this.$el.width() : size,\n            barWidth = (chartWidth - (values.values.length-1)*this.options.gap)/values.values.length\n\n        var $canvas = $('<div/>').addClass('canvas').height(chartHeight).width(isFullWidth ? '100%' : chartWidth)\n        $el.prepend($canvas)\n        $el.toggleClass('full-width', isFullWidth)\n\n        Raphael($canvas.get(0), isFullWidth ? '100%' : chartWidth, chartHeight, function(){\n            self.paper = this\n            self.bars = this.set()\n\n            self.paper.customAttributes.bar = function (start, height) {\n                return {\n                    path: [\n                        [\"M\", start, chartHeight],\n                        [\"L\", start, chartHeight-height],\n                        [\"L\", start + barWidth, chartHeight-height],\n                        [\"L\", start + barWidth, chartHeight],\n                        [\"Z\"]\n                    ]\n                }\n            }\n\n            // Add bars\n            var start = 0\n            $.each(values.values, function(index, valueInfo) {\n                var color = valueInfo.color !== undefined ? valueInfo.color : $.oc.chartUtils.getColor(index),\n                    path = self.paper.path().attr({\"stroke-width\": 0}).attr({bar: [start, 0]}).attr({fill: color})\n\n                self.bars.push(path)\n                indicators[index].css('background-color', color)\n                start += barWidth + self.options.gap\n\n                path.hover(function(ev){\n                    $.oc.chartUtils.showTooltip(ev.pageX, ev.pageY,\n                        $.trim($.oc.chartUtils.getLegendLabel($legend, index)) + ': <strong>'+valueInfo.value+'</stong>')\n                }, function() {\n                    $.oc.chartUtils.hideTooltip()\n                })\n            })\n\n            // Animate bars\n            start = 0\n            $.each(values.values, function(index, valueInfo) {\n                var height = (values.max && valueInfo.value) ? chartHeight/values.max * valueInfo.value : 0\n\n                self.bars[index].animate({bar: [start, height]}, 1000, \"bounce\")\n                start += barWidth + self.options.gap\n            })\n\n            // Update the full-width chart when the window is redized\n            if (isFullWidth) {\n                $(window).on('resize', function(){\n                    chartWidth = self.$el.width()\n                    barWidth = (chartWidth - (values.values.length-1)*self.options.gap)/values.values.length\n\n                    var start = 0\n                    $.each(values.values, function(index, valueInfo) {\n                        var height = (values.max && valueInfo.value) ? chartHeight/values.max * valueInfo.value : 0\n\n                        self.bars[index].animate({bar: [start, height]}, 10, \"bounce\")\n                        start += barWidth + self.options.gap\n                    })\n                })\n            }\n        })\n    }\n\n    BarChart.prototype.isFullWidth = function() {\n        return this.options.fullWidth !== undefined && this.options.fullWidth\n    }\n\n    BarChart.DEFAULTS = {\n        gap: 2\n    }\n\n    // BARCHART PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.barChart\n\n    $.fn.barChart = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.barChart')\n            var options = $.extend({}, BarChart.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data)\n                $this.data('oc.barChart', new BarChart(this, options))\n        })\n    }\n\n    $.fn.barChart.Constructor = BarChart\n\n    // BARCHART NO CONFLICT\n    // =================\n\n    $.fn.barChart.noConflict = function () {\n        $.fn.barChart = old\n        return this\n    }\n\n    // BARCHART DATA-API\n    // ===============\n\n    $(document).render(function () {\n        $('[data-control=chart-bar]').barChart()\n    })\n\n}(window.jQuery)\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/chart/chart.less",
    "content": "//\n// Chart\n// --------------------------------------------------\n\n@color-status-list-text:          #7e8c8d;\n@color-chart-tooltip-bg:          #000000;\n@color-chart-tooltip-text:        #ffffff;\n\n//\n// Chart\n// --------------------------------------------------\n\n.control-chart {\n    div.canvas {\n        display: inline-block;\n        margin-right: 20px;\n        margin-bottom: 20px;\n        position: relative;\n\n        span.center {\n            position: absolute;\n            display: block;\n            text-align: center;\n            width: 100%;\n            top: 50%;\n            margin-top: -21px;\n            font-size: 30px;\n            font-weight: 100;\n            color: var(--bs-heading-color);\n            z-index: @zindex-chart - 1;\n        }\n\n        svg {\n            z-index: @zindex-chart;\n        }\n    }\n\n    &.full-width div.canvas {\n        margin-right: 0 !important;\n    }\n\n    ul {\n        display: inline-block;\n        height: inherit;\n        margin: 0;\n        padding: 0;\n        list-style: none;\n        position: relative;\n        vertical-align: top;\n\n        li {\n            width: 120px;\n            white-space: normal;\n            display: block;\n            text-transform: uppercase;\n            color: var(--bs-heading-color);\n            font-weight: 300;\n            font-size: 12px;\n            margin-bottom: 10px;\n\n            span {\n                float: right;\n                font-weight: 600;\n            }\n\n            &:last-child {\n                margin-bottom: 0;\n            }\n        }\n    }\n\n    div.chart-legend {\n        display: inline-block;\n        vertical-align: top;\n        text-align: left;\n\n        table {\n            font-size: 12px;\n            color: var(--bs-body-color);\n\n            tr {\n                td {\n                    padding: 0 0 7px 0;\n                    vertical-align: top;\n\n                    &.value {\n                        padding-left: 10px;\n                        font-weight: 600;\n                        color: var(--bs-secondary-color);\n                    }\n\n                    i {\n                        display: inline-block;\n                        width: 13px;\n                        height: 13px;\n                        border-radius: @border-radius-base;\n                        text-indent: -100000em;\n                        margin-right: 5px;\n                        position: relative;\n                        top: 2px;\n                    }\n\n                    &.indicator {\n                        width: 20px;\n                    }\n                }\n\n                &:last-child td {\n                    padding-bottom: 0;\n                }\n            }\n        }\n    }\n\n    text-align: left;\n\n    .canvas {\n        margin-right: 20px;\n        display: inline-block;\n    }\n\n    &.centered {\n        text-align: center;\n\n        .canvas {\n            margin-right: 0;\n            display: block;\n            margin-left: auto;\n            margin-right: auto;\n        }\n    }\n\n    &.wrap-legend div.chart-legend table tr {\n        display: inline-block;\n        white-space: nowrap;\n        margin-right: 20px;\n\n        &:last-child td {\n            padding-bottom: 7px;\n        }\n    }\n}\n\n.report-container .wrapped .control-chart {\n    text-align: left;\n\n    .canvas {\n        margin-right: 20px;\n        display: inline-block;\n    }\n}\n\n.tickLabel, .flot-tick-label {\n    color: #545454;\n}\n\n[data-bs-theme=\"dark\"] {\n    .tickLabel, .flot-tick-label {\n        color: #e0e0e0;\n    }\n}\n\n.title-value {\n    span.goal-meter-indicator {\n        float: left;\n        height: 24px;\n        width: 10px;\n        margin-right: 5px;\n        position: relative;\n        top: 9px;\n        background: var(--oc-color-negative);\n\n        > span {\n            text-indent: -10000em;\n            display: block;\n            position: absolute;\n            width: 10px;\n            left: 0;\n            bottom: 0;\n            background: var(--oc-color-positive);\n            height: 0;\n            .transition(all 0.2s);\n        }\n    }\n\n    &.goal-meter-inverse {\n        span.goal-meter-indicator {\n            background: var(--oc-color-positive);\n            > span {\n                background: var(--oc-color-negative);\n            }\n        }\n    }\n}\n\n.report-container {\n    .title-value {\n        margin-top: -18px;\n\n        p {\n            font-weight: 100;\n            font-size: 40px;\n\n            &.description {\n                font-size: 12px;\n                margin-top: 9px;\n            }\n\n            &:before {\n                font-size: 30px;\n                margin-right: 10px;\n            }\n\n            &.negative, &.positive {\n                &:after {\n                    top: -8px;\n                }\n            }\n        }\n\n        span.goal-meter-indicator {\n            height: 31px;\n            top: 4px;\n            width: 15px;\n            margin-right: 10px;\n\n            span {\n                width: 15px;\n            }\n        }\n    }\n}\n\n//\n// Status list\n// --------------------------------------------------\n\n.control-status-list > ul {\n    margin-bottom: 0;\n    padding: 0;\n\n    li {\n        margin: 0;\n        padding: 7px 15px 6px;\n        list-style: none;\n        display: block;\n        font-size: @font-size-base - 1;\n        color: @color-status-list-text;\n        border-bottom: 1px solid @border-color;\n\n        &:last-child {\n            border-bottom: none;\n        }\n\n        a:not(.btn) {\n            color: @color-status-list-text;\n            text-decoration: none;\n            &:hover {\n                color: @link-color;\n                text-decoration: none;\n            }\n        }\n\n        a.btn:hover {\n            color: white;\n        }\n\n        .status-text {\n            margin: 0 5px;\n\n            &.muted { color: @text-muted; }\n            &.primary { color: @brand-primary; }\n            &.success { color: @state-success-text; }\n            &.info { color: @state-info-text; }\n            &.warning { color: @state-warning-text; }\n            &.danger { color: @state-danger-text; }\n        }\n\n        .status-label {\n            display: block;\n            float: right;\n            padding: 1px 10px;\n\n            &.btn {\n                border-radius: 20px;\n            }\n        }\n\n        .status-icon {\n            display: inline-block;\n            text-align: center;\n            color: white;\n            width: 22px;\n            height: 22px;\n            position: relative;\n            top: -1px;\n            .border-radius(100px);\n\n            > i {\n                font-size: 12px;\n                line-height: 22px;\n            }\n        }\n\n        .status-icon {\n            background: #999;\n            &.success { background: @brand-success; }\n            &.primary { background: @brand-primary; }\n            &.warning { background: @brand-warning; }\n            &.danger { background: @brand-danger; }\n            &.info { background: @brand-info; }\n            &.link { background: transparent; }\n        }\n    }\n}\n\n.report-container {\n    .control-status-list > ul {\n        margin: -15px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/chart/chart.line.js",
    "content": "/*\n * Line Chart Plugin\n *\n * Data attributes:\n * - data-control=\"chart-line\" - enables the line chart plugin\n * - data-reset-zoom-link=\"#reset-zoom\" - specifies a link to reset zoom\n * - data-zoomable - indicates that the chart is zoomable\n * - data-time-mode=\"weeks\" - if the \"weeks\" value is specified and the xaxis mode is \"time\", the X axis labels will be displayed as week end dates.\n * - data-chart-options=\"xaxis: {mode: 'time'}\" - specifies the Flot configuration in JSON format. See https://github.com/flot/flot/blob/master/API.md for details.\n *\n * Data sets are defined with the SPAN elements inside the chart element: <span data-chart=\"dataset\" data-set-data=\"[0,0],[1,19]\">\n * Data set elements could contain data attributes with names in the format \"data-set-color\". The names for the data set\n * attributes are described in the Flot documentation: https://github.com/flot/flot/blob/master/API.md#data-format\n *\n * JavaScript API:\n * $('.chart').chartLine({ resetZoomLink:'#reset-zoom' })\n *\n * Dependencies:\n * - Flot (jquery.flot.js)\n * - Flot Tooltip (jquery.flot.tooltip.js)\n * - Flot Resize (jquery.flot.resize.js)\n * - Flot Time (jquery.flot.time.js)\n */\n\n+function ($) { \"use strict\";\n\n    // LINE CHART CLASS DEFINITION\n    // ============================\n\n    var ChartLine = function(element, options) {\n        var self = this;\n\n        var isDark = document.documentElement.getAttribute('data-bs-theme') === 'dark';\n        var colorBackground = '#fff',\n            colorMarkings = 'rgba(0,0,0,0.02)';\n\n        if (isDark) {\n            colorBackground = '#1e2227';\n            colorMarkings = 'rgba(255,255,255,0.02)';\n        }\n\n        // Flot options\n        this.chartOptions = {\n            xaxis: {\n                mode: \"time\",\n                tickLength: 5\n            },\n            selection: { mode: \"x\" },\n            grid: {\n                markingsColor: colorMarkings,\n                backgroundColor: { colors: [colorBackground, colorBackground] },\n                borderColor: \"#7bafcc\",\n                borderWidth: 0,\n                color: colorBackground,\n                hoverable: true,\n                clickable: true,\n                labelMargin: 10\n            },\n            series: {\n                lines: {\n                    show: true,\n                    fill: true\n                },\n                points: {\n                    show: true\n                }\n            },\n            tooltip: true,\n            tooltipOpts: {\n                defaultTheme: false,\n                content: \"%x: <strong>%y</strong>\",\n                dateFormat: \"%y-%0m-%0d\",\n                shifts: {\n                    x: 10,\n                    y: 20\n                }\n            },\n            legend: {\n                show: true,\n                noColumns: 2\n            }\n        }\n\n        this.defaultDataSetOptions = {\n            shadowSize: 0\n        }\n\n        var parsedOptions = {}\n        try {\n            parsedOptions = oc.parseJSON(\"{\" + options.chartOptions + \"}\");\n        }\n        catch (e) {\n            throw new Error('Error parsing the data-chart-options attribute value. '+e);\n        }\n\n        this.chartOptions = $.extend({}, this.chartOptions, parsedOptions)\n\n        this.options = options\n        this.$el = $(element)\n        this.fullDataSet = []\n        this.resetZoomLink = $(options.resetZoomLink)\n\n        this.$el.trigger('oc.chartLineInit', [this])\n\n        /*\n         * Bind Events\n         */\n\n        this.resetZoomLink.on('click', $.proxy(this.clearZoom, this));\n\n        if (this.options.zoomable) {\n            this.$el.on(\"plotselected\", function (event, ranges) {\n                var newCoords = {\n                    xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }\n                }\n\n                $.plot(self.$el, self.fullDataSet, $.extend(true, {}, self.chartOptions, newCoords))\n                self.resetZoomLink.show()\n            });\n        }\n\n        /*\n         * Markings Helper\n         */\n\n        if (this.chartOptions.xaxis.mode == \"time\" && this.options.timeMode == \"weeks\")\n            this.chartOptions.markings = weekendAreas\n\n        function weekendAreas(axes) {\n            var markings = [],\n                d = new Date(axes.xaxis.min);\n\n            // Go to the first Saturday\n            d.setUTCDate(d.getUTCDate() - ((d.getUTCDay() + 1) % 7))\n            d.setUTCSeconds(0)\n            d.setUTCMinutes(0)\n            d.setUTCHours(0)\n            var i = d.getTime()\n\n            do {\n                // When we don't set yaxis, the rectangle automatically\n                // extends to infinity upwards and downwards\n                markings.push({ xaxis: { from: i, to: i + 2 * 24 * 60 * 60 * 1000 } })\n                i += 7 * 24 * 60 * 60 * 1000\n            } while (i < axes.xaxis.max)\n\n            return markings\n        }\n\n        /*\n         * Process the datasets\n         */\n\n        this.initializing = true\n\n        this.$el.find('>[data-chart=\"dataset\"]').each(function(){\n            var data = $(this).data(),\n                processedData = {};\n\n            for (var key in data) {\n                var normalizedKey = key.substring(3),\n                    value = data[key];\n\n                normalizedKey = normalizedKey.charAt(0).toLowerCase() + normalizedKey.slice(1);\n                if (normalizedKey == 'data')\n                    value = Array.isArray(value) ? [value] : JSON.parse('['+value+']');\n\n                processedData[normalizedKey] = value;\n            }\n\n            self.addDataSet($.extend({}, self.defaultDataSetOptions, processedData));\n        })\n\n        /*\n         * Build chart\n         */\n\n        this.initializing = false\n        this.rebuildChart()\n    }\n\n    ChartLine.DEFAULTS = {\n        chartOptions: \"\",\n        timeMode: null,\n        zoomable: false\n    }\n\n    /*\n     * Adds a data set to the chart.\n     * See https://github.com/flot/flot/blob/master/API.md#data-format for the list\n     * of supported data set options.\n     */\n    ChartLine.prototype.addDataSet = function (dataSet) {\n        this.fullDataSet.push(dataSet)\n\n        if (!this.initializing)\n            this.rebuildChart()\n    }\n\n    ChartLine.prototype.rebuildChart = function() {\n        this.$el.trigger('oc.beforeChartLineRender', [this])\n\n        $.plot(this.$el, this.fullDataSet, this.chartOptions)\n    }\n\n    ChartLine.prototype.clearZoom = function() {\n        this.rebuildChart()\n        this.resetZoomLink.hide()\n    }\n\n    // LINE CHART PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.chartLine\n\n    $.fn.chartLine = function (option) {\n        return this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('october.chartLine')\n            var options = $.extend({}, ChartLine.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('october.chartLine', (data = new ChartLine(this, options)))\n            if (typeof option == 'string') data[option].call($this)\n        })\n    }\n\n    $.fn.chartLine.Constructor = ChartLine\n\n    // LINE CHART NO CONFLICT\n    // =================\n\n    $.fn.chartLine.noConflict = function () {\n        $.fn.chartLine = old\n        return this\n    }\n\n\n    // LINE CHART DATA-API\n    // ===============\n    $(document).render(function () {\n        $('[data-control=\"chart-line\"]').chartLine()\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/chart/chart.meter.js",
    "content": "/*\n * The goal meter plugin.\n *\n * Applies the goal meter style to a scoreboard item.\n *\n * Data attributes:\n * - data-control=\"goal-meter\" - enables the goal meter plugin\n * - data-value - sets the value, in percents\n *\n * JavaScript API:\n * $('.scoreboard .goal-meter').goalMeter({value: 20})\n * $('.scoreboard .goal-meter').goalMeter(10) // Sets the current value\n */\n+function ($) { \"use strict\";\n\n    var GoalMeter = function (element, options) {\n        var\n            $el = this.$el = $(element),\n            self = this;\n\n        this.options = options || {};\n\n        // Canvas already drawn\n        var $canvas = $('span.goal-meter-indicator', $el);\n        if ($canvas.length > 0) {\n            return;\n        }\n\n        this.$indicatorBar = $('<span />').text(this.options.value + '%');\n        this.$indicatorOuter = $('<span />').addClass('goal-meter-indicator').append(this.$indicatorBar);\n\n        $('p', this.$el).first().before(this.$indicatorOuter);\n\n        window.setTimeout(function(){\n            self.update(self.options.value);\n        }, 200);\n    }\n\n    GoalMeter.prototype.update = function(value) {\n        this.$indicatorBar.css('height', value + '%');\n    }\n\n    GoalMeter.DEFAULTS = {\n        value: 50\n    }\n\n    // GOALMETER PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.goalMeter\n\n    $.fn.goalMeter = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.goalMeter')\n            var options = $.extend({}, GoalMeter.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data)\n                $this.data('oc.goalMeter', (data = new GoalMeter(this, options)))\n            else\n                data.update(option)\n        })\n    }\n\n    $.fn.goalMeter.Constructor = GoalMeter\n\n    // GOALMETER NO CONFLICT\n    // =================\n\n    $.fn.goalMeter.noConflict = function () {\n        $.fn.goalMeter = old\n        return this\n    }\n\n    // GOALMETER DATA-API\n    // ===============\n\n\n    $(document).render(function () {\n        $('[data-control=goal-meter]').goalMeter()\n    })\n\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/chart/chart.pie.js",
    "content": "/*\n * The pie chart plugin.\n *\n * Data attributes:\n * - data-control=\"chart-pie\" - enables the pie chart plugin\n * - data-size=\"200\" - optional, size of the graph\n * - data-center-text - text to display inside the graph\n *\n * JavaScript API:\n * $('.scoreboard .chart').pieChart()\n *\n * Dependencies:\n * - Raphaël (raphael-min.js)\n * - October chart utilities (chart.utils.js)\n */\n+function ($) { \"use strict\";\n\n    var PieChart = function (element, options) {\n        this.options = options || {}\n\n        var\n            $el = this.$el = $(element),\n            size = this.size = (this.options.size !== undefined ? this.options.size : $el.height()),\n            outerRadius = size/2 - 1,\n            innerRadius = outerRadius - outerRadius/3.5,\n            values = $.oc.chartUtils.loadListValues($('ul', $el)),\n            $legend = $.oc.chartUtils.createLegend($('ul', $el)),\n            indicators = $.oc.chartUtils.initLegendColorIndicators($legend),\n            self = this;\n\n        // Canvas already drawn\n        var $canvas = $('div.canvas', $el);\n        if ($canvas.length > 0) {\n            return;\n        }\n\n        var $canvas = $('<div />').addClass('canvas').width(size).height(size);\n        $el.prepend($canvas);\n\n        // Truncate scoreboard in cases where there are more than 3 items\n        $legend.height(size).css('overflow', 'hidden');\n\n        Raphael($canvas.get(0), size, size, function(){\n            self.paper = this;\n            self.segments = this.set();\n\n            self.paper.customAttributes.segment = function (startAngle, endAngle) {\n                var\n                    p1 = self.arcCoords(outerRadius, startAngle),\n                    p2 = self.arcCoords(outerRadius, endAngle),\n                    p3 = self.arcCoords(innerRadius, endAngle),\n                    p4 = self.arcCoords(innerRadius, startAngle),\n                    flag = (endAngle - startAngle) > 180,\n                    path = [\n                        [\"M\", p1.x, p1.y],\n                        [\"A\", outerRadius, outerRadius, 0, +flag, 0, p2.x, p2.y],\n                        [\"L\", p3.x, p3.y],\n                        [\"A\", innerRadius, innerRadius, 0, +flag, 1, p4.x, p4.y],\n                        [\"Z\"]\n                    ];\n\n                return {path: path};\n            };\n\n            // Draw the background\n            self.paper.circle(size/2, size/2, innerRadius + (outerRadius - innerRadius)/2)\n                .attr({\"stroke-width\": outerRadius - innerRadius - 0.5})\n                .attr({stroke: $.oc.chartUtils.defaultValueColor});\n\n            // Add segments\n            $.each(values.values, function(index, valueInfo) {\n                var color = valueInfo.color !== undefined ? valueInfo.color : $.oc.chartUtils.getColor(index),\n                    path = self.paper.path().attr({\"stroke-width\": 0}).attr({segment: [0, 0]}).attr({fill: color})\n\n                self.segments.push(path)\n                indicators[index].css('background-color', color)\n\n                path.hover(function(ev){\n                    $.oc.chartUtils.showTooltip(ev.pageX, ev.pageY,\n                        $.trim($.oc.chartUtils.getLegendLabel($legend, index)) + ': <strong>'+valueInfo.value+'</stong>')\n                }, function() {\n                    $.oc.chartUtils.hideTooltip()\n                })\n            });\n\n            // Animate segments\n            var start = self.options.startAngle\n            $.each(values.values, function(index, valueInfo) {\n                var length = (values.total && valueInfo.value) ? 360/values.total * valueInfo.value : 0\n                if (length == 360)\n                    length--\n\n                self.segments[index].animate({segment: [start, start + length]}, 1000, \"bounce\")\n                start += length\n            });\n        })\n\n        if (this.options.centerText !== undefined) {\n            var $text = $('<span>').addClass('center').html(this.options.centerText);\n            $canvas.append($text);\n        }\n    }\n\n    PieChart.prototype.arcCoords = function(radius, angle) {\n      var\n        a = Raphael.rad(angle),\n        x = this.size/2 + radius * Math.cos(a),\n        y = this.size/2 - radius * Math.sin(a);\n\n        return {'x': x, 'y': y};\n    }\n\n    PieChart.DEFAULTS = {\n        startAngle: 45\n    }\n\n    // PIECHART PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.pieChart\n\n    $.fn.pieChart = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.pieChart')\n            var options = $.extend({}, PieChart.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data)\n                $this.data('oc.pieChart', new PieChart(this, options))\n        })\n    }\n\n    $.fn.pieChart.Constructor = PieChart\n\n    // PIECHART NO CONFLICT\n    // =================\n\n    $.fn.pieChart.noConflict = function () {\n        $.fn.pieChart = old\n        return this\n    }\n\n    // PIECHART DATA-API\n    // ===============\n\n    $(document).render(function () {\n        $('[data-control=chart-pie]').pieChart()\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/chart/chart.utils.js",
    "content": "/*\n * October charting utilities.\n */\n\n+function ($) { \"use strict\";\n\n    var ChartUtils = function() {};\n\n    ChartUtils.prototype.defaultValueColor = '#b8b8b8';\n\n    ChartUtils.prototype.getColor = function(index) {\n        var\n            colors = [\n                '#95b753', '#cc3300', '#e5a91a', '#3366ff', '#ff0f00', '#ff6600',\n                '#ff9e01', '#fcd202', '#f8ff01', '#b0de09', '#04d215', '#0d8ecf', '#0d52d1',\n                '#2a0cd0', '#8a0ccf', '#cd0d74', '#754deb', '#dddddd', '#999999', '#333333',\n                '#000000', '#57032a', '#ca9726', '#990000', '#4b0c25'\n            ],\n            colorIndex = index % (colors.length-1);\n\n        return colors[colorIndex];\n    }\n\n    ChartUtils.prototype.loadListValues = function($list) {\n        var result = {\n            values: [],\n            total: 0,\n            max: 0\n        };\n\n        $('> li', $list).each(function() {\n            var value = $(this).data('value')\n                ? parseFloat($(this).data('value'))\n                : parseFloat($('span', this).text());\n\n            // Negative values present as positive in charts\n            if (value < 0) {\n                value = value * -1;\n            }\n\n            result.total += value;\n            result.values.push({value: value, color: $(this).data('color')});\n            result.max = Math.max(result.max, value);\n        });\n\n        return result;\n    }\n\n    ChartUtils.prototype.getLegendLabel = function($legend, index) {\n        return $('tr:eq('+index+') td:eq(1)', $legend).html();\n    }\n\n    ChartUtils.prototype.initLegendColorIndicators = function($legend) {\n        var indicators = [];\n\n        $('tr > td:first-child', $legend).each(function() {\n            var indicator = $('<i></i>');\n            $(this).prepend(indicator);\n            indicators.push(indicator);\n        });\n\n        return indicators;\n    }\n\n    ChartUtils.prototype.createLegend = function($list) {\n        var\n            $legend = $('<div>').addClass('chart-legend'),\n            $table = $('<table>')\n\n        $legend.append($table)\n\n        $('> li', $list).each(function() {\n            var label = $(this).clone().children().remove().end().html();\n\n            $table.append(\n                $('<tr>')\n                    .append($('<td class=\"indicator\">'))\n                    .append($('<td>').html(label))\n                    .append($('<td>').addClass('value').html($('span', this).html()))\n            );\n        });\n\n        $legend.insertAfter($list);\n        $list.remove();\n\n        return $legend;\n    }\n\n    ChartUtils.prototype.showTooltip = function(x, y, text) {\n        var $tooltip = $('#chart-tooltip');\n\n        if ($tooltip.length) {\n            $tooltip.remove();\n        }\n\n        $tooltip = $('<div id=\"chart-tooltip\">')\n            .html(text)\n            .css('visibility', 'hidden');\n\n        x += 10;\n        y += 10;\n\n        $(document.body).append($tooltip)\n        var tooltipWidth = $tooltip.outerWidth()\n        if ((x + tooltipWidth) > $(window).width())\n            x = $(window).width() - tooltipWidth - 10;\n\n        $tooltip.css({top: y, left: x, visibility: 'visible'});\n    }\n\n    ChartUtils.prototype.hideTooltip = function() {\n       $('#chart-tooltip').remove();\n    }\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    $.oc.chartUtils = new ChartUtils();\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/checkbox/checkbox.js",
    "content": "/*\n * Checkbox control\n */\n\n(function($) {\n\n    //\n    // Intermediate checkboxes\n    //\n\n    $(document).render(function() {\n        $('.form-check.is-indeterminate > input').each(function() {\n            var $el = $(this),\n                checked = $el.data('checked');\n\n            switch (checked) {\n\n                // Unchecked\n                case 1:\n                    $el.prop('indeterminate', true);\n                    break;\n\n                // Checked\n                case 2:\n                    $el.prop('indeterminate', false);\n                    $el.prop('checked', true);\n                    break;\n\n                // Unchecked\n                default:\n                    $el.prop('indeterminate', false);\n                    $el.prop('checked', false);\n            }\n        })\n    })\n\n    $(document).on('click', '.form-check.is-indeterminate > input', function() {\n        var $el = $(this),\n            checked = $el.data('checked');\n\n        if (checked === undefined) {\n            checked = $el.is(':checked') ? 1 : 0;\n        }\n\n        switch (checked) {\n\n            // Unchecked, going indeterminate\n            case 0:\n                $el.data('checked', 1);\n                $el.prop('indeterminate', true);\n                break;\n\n            // Indeterminate, going checked\n            case 1:\n                $el.data('checked', 2);\n                $el.prop('indeterminate', false);\n                $el.prop('checked', true);\n                break;\n\n            // Checked, going unchecked\n            default:\n                $el.data('checked', 0);\n                $el.prop('indeterminate', false);\n                $el.prop('checked', false);\n        }\n    });\n\n    //\n    // Checkbox Ranges\n    //\n\n    oc.checkboxRangeDetail = {\n        lastCheckbox: null,\n        isLastChecked: true\n    };\n\n    oc.checkboxRangeRegisterClick = function(ev, containerSelector, checkboxSelector) {\n        var el = ev.target,\n            detail = oc.checkboxRangeDetail;\n\n        var selectCheckboxesIn = function(rows, isChecked) {\n            rows.forEach(function(row) {\n                row.querySelectorAll(checkboxSelector).forEach(function(el) {\n                    el.checked = isChecked;\n                    $(el).trigger('change'); // @todo needs triggerNativeChange?\n                });\n            });\n        }\n\n        var selectCheckboxRange = function($el, $prevEl) {\n            var $item = $el.closest(containerSelector),\n                $prevItem = $prevEl.closest(containerSelector),\n                toSelect = [];\n\n            var $nextRow = $item;\n            while ($nextRow) {\n                if ($nextRow === $prevItem) {\n                    selectCheckboxesIn(toSelect, detail.isLastChecked);\n                    return;\n                }\n\n                toSelect.push($nextRow);\n                $nextRow = $nextRow.nextElementSibling;\n            }\n\n            toSelect = [];\n            var $prevRow = $item;\n            while ($prevRow) {\n                if ($prevRow === $prevItem) {\n                    selectCheckboxesIn(toSelect, detail.isLastChecked);\n                    return;\n                }\n\n                toSelect.push($prevRow);\n                $prevRow = $prevRow.previousElementSibling;\n            }\n        }\n\n        if (detail.lastCheckbox && ev.shiftKey) {\n            selectCheckboxRange(el, detail.lastCheckbox);\n        }\n        else {\n            detail.lastCheckbox = el;\n            detail.isLastChecked = el.checked;\n        }\n    }\n\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/checkbox/checkbox.less",
    "content": "\n// Styles are provided by Bootstrap and the Form widget\n\n.form-check-input:checked,\n.form-check-input[type=checkbox]:indeterminate {\n    background-color: var(--bs-primary);\n    border-color: var(--bs-primary);\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/dropdown/README.md",
    "content": "Customized dropdown menu\n\n### Small dropdown\n\n    <div class=\"dropdown\">\n        <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-primary oc-icon-plus\">Add small</a>\n\n        <ul class=\"dropdown-menu\" role=\"menu\">\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-folder\">Group</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-copy\">Page</a></li>\n        </ul>\n    </div>\n\n### Drop \"up\"\n\nAdd the `dropup` class to the dropdown container and the dropdown will appear in an upward direction.\n\n    <div class=\"dropdown dropup\">\n        ...\n    </div>\n\n### Large dropdown\n\n    <div class=\"dropdown\">\n        <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-primary oc-icon-plus\">Add large</a>\n\n        <ul class=\"dropdown-menu\" role=\"menu\">\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-folder\">Group</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-copy\">Page</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-briefcase\">Briefcase</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-link\">Link</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-tag\">Tag</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-search-minus\">Zoom out</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-briefcase\">Briefcase</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-link\">Link</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-tag\">Tag</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-search-minus\">Zoom out</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-briefcase\">Briefcase</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-link\">Link</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-tag\">Tag</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"oc-icon-search-minus\">Zoom out</a></li>\n        </ul>\n    </div>\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/dropdown/dropdown.js",
    "content": "/*\n * Dropdown menus.\n *\n * This script customizes the Twitter Bootstrap drop-downs.\n *\n * Require:\n *  - bootstrap/dropdown\n */\n+function ($) { \"use strict\";\n\n    $(document).on('shown.bs.dropdown', '.dropdown', function(ev) {\n        $(document.body).addClass('dropdown-open');\n\n        var dropdown = $(ev.relatedTarget).siblings('.dropdown-menu'),\n            dropdownContainer = $(this).data('dropdown-container');\n\n        // The dropdown menu should be a sibling of the triggering element (above)\n        // otherwise, look for any dropdown menu within this context.\n        if (dropdown.length === 0) {\n            dropdown = $('.dropdown-menu', this);\n        }\n\n        if (!dropdown.hasClass('control-dropdown')) {\n            $('li > a', dropdown).addClass('dropdown-item');\n            $('li:first-child', dropdown).addClass('first-item');\n            $('li:last-child', dropdown).addClass('last-item');\n\n            dropdown.addClass('control-dropdown');\n        }\n\n        if (dropdownContainer !== undefined && dropdownContainer == 'body') {\n            $(this).data('oc.dropdown', dropdown);\n            $(document.body).append(dropdown);\n\n            dropdown.css({\n                'visibility': 'hidden',\n                'left': 0,\n                'top' : 0,\n                'display': 'block'\n            });\n\n            var targetOffset = $(this).offset(),\n                targetHeight = $(this).height(),\n                targetWidth = $(this).width(),\n                position = {\n                    x: targetOffset.left,\n                    y: targetOffset.top + targetHeight\n                },\n                leftOffset = targetWidth < 30 ? -16 : 0,\n                documentHeight = $(document).height(),\n                dropdownHeight = dropdown.height();\n\n            if ((dropdownHeight + position.y) > documentHeight) {\n                position.y = targetOffset.top - dropdownHeight - 12;\n                dropdown.addClass('top');\n            }\n            else {\n                dropdown.removeClass('top');\n            }\n\n            dropdown.css({\n                'left': position.x + leftOffset,\n                'top': position.y,\n                'visibility': 'visible'\n            });\n        }\n\n        if ($('.dropdown-overlay', document.body).length == 0) {\n            $(document.body).prepend($('<div/>').addClass('dropdown-overlay'));\n        }\n    })\n\n    $(document).on('hidden.bs.dropdown', '.dropdown', function() {\n        var dropdown = $(this).data('oc.dropdown');\n        if (dropdown !== undefined) {\n            dropdown.css('display', 'none');\n            $(this).append(dropdown);\n        }\n\n        $(document.body).removeClass('dropdown-open');\n    })\n\n    /*\n     * Fixed positioned dropdowns\n     * - Useful for dropdowns inside hidden overflow containers\n     */\n\n    var $dropdown, $container, $target;\n\n    function fixDropdownPosition() {\n        var position = $container.offset(),\n            top = position.top - $(window).scrollTop() + $target.outerHeight() + 1,\n            left = position.left;\n\n        // Waiting for https://github.com/twbs/bootstrap/pull/34120\n        $dropdown.css({\n            position: 'fixed',\n            inset: '0px auto auto 0px',\n            transform: 'translate('+left+'px, '+top+'px)'\n        });\n    }\n\n    $(document).on('shown.bs.dropdown', '.dropdown.dropdown-fixed', function (ev) {\n        $container = $(this);\n        $dropdown = $('.dropdown-menu', $container);\n        $target = $(ev.relatedTarget);\n        $dropdown.addClass('is-fixed');\n        $(window).on('scroll.oc.dropdown, resize.oc.dropdown', fixDropdownPosition);\n        setTimeout(fixDropdownPosition, 0);\n        fixDropdownPosition();\n    })\n\n    $(document).on('hidden.bs.dropdown', '.dropdown.dropdown-fixed', function() {\n        $(window).off('scroll.oc.dropdown, resize.oc.dropdown', fixDropdownPosition);\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/dropdown/dropdown.less",
    "content": "//\n// Dropdown\n// --------------------------------------------------\n\n@import \"dropdown.variables.less\";\n\n.dropdown-menu.backend-dropdownmenu .dropdown-container > ul,\n.control-dropdown.dropdown-menu {\n    padding: 0;\n    list-style: none;\n    background-color: @dropdown-bg;\n    position: relative;\n    border: @popup-border;\n    box-shadow: @box-shadow-z1;\n    border-radius: @border-radius-base;\n\n    &.is-fixed {\n        position: fixed !important;\n    }\n\n    &.offset-left {\n        left: 10px;\n    }\n\n    > li {\n        a, button {\n            outline: none;\n            padding: 10px 15px;\n            font-size: @font-size-base;\n            display: block;\n            color: @dropdown-link-color;\n            position: relative;\n            white-space: nowrap;\n            text-decoration: none;\n\n            &:hover, &:active, &:focus:active {\n                color: @dropdown-hover-color;\n                background-color: @dropdown-hover-bg !important;\n                i {\n                    color: @dropdown-hover-color;\n                }\n\n                &[class^=\"oc-icon-\"],\n                &[class*=\" oc-icon-\"] {\n                    &:before {\n                        color: @dropdown-hover-color;\n                    }\n                }\n            }\n\n            &:active, &:focus:active {\n                background-color: @dropdown-active-bg !important;\n            }\n\n            &[class^=\"oc-icon-\"],\n            &[class*=\" oc-icon-\"] {\n                padding-left: 30px;\n\n                &:before {\n                    position: absolute;\n                    font-size: 14px;\n                    left: 9px;\n                    top: 14px;\n                    color: @dropdown-link-color-fade;\n                }\n            }\n\n            > i {\n                color: @dropdown-link-color-fade;\n                font-size: 14px;\n                margin-right: 4px;\n                margin-left: -2px;\n            }\n        }\n\n        &.first-item:not(.disabled) {\n            a, button {\n                &:hover, &:focus, &:active {\n                    border-top-left-radius: 4px;\n                    border-top-right-radius: 4px;\n                }\n            }\n        }\n\n        &.last-item:not(.disabled) {\n            a, button {\n                &:hover, &:focus, &:active {\n                    border-bottom-left-radius: 4px;\n                    border-bottom-right-radius: 4px;\n                }\n            }\n        }\n\n        &.dropdown-title { display: none; }\n        &.dropdown-divider { margin: 0; }\n\n        &.active > a {\n            font-weight: bold;\n        }\n\n        &.disabled a,\n        &.disabled button,\n        a[disabled],\n        button[disabled] {\n            &, &:hover, &:active, &:focus:active {\n                cursor: not-allowed;\n                background-color: @dropdown-bg !important;\n                color: @dropdown-link-disabled-color;\n                > i {\n                    color: @dropdown-link-color-fade;\n                }\n            }\n\n            &[class^=\"oc-icon-\"],\n            &[class*=\" oc-icon-\"] {\n                &:before {\n                    color: @dropdown-link-color-fade;\n                }\n            }\n        }\n    }\n}\n\n// Adjustment for octo-icons\n// @deprecated\n// .control-dropdown.dropdown-menu > li {\n//     a, button {\n//         > i[class^=\"octo-icon-\"] {\n//             font-size: 16px;\n//             position: relative;\n//             top: 2px;\n//             left: -2px;\n//         }\n//     }\n// }\n\n@media (hover: hover) {\n    .control-dropdown.dropdown-menu > li {\n        a, button {\n            &:focus {\n                background: @toolbar-focus-bg;\n            }\n        }\n    }\n}\n\n.touch .control-dropdown.dropdown-menu > li {\n    a:hover {\n        color: @dropdown-link-color;\n        background: white;\n    }\n}\n\nbody.dropdown-open {\n    .dropdown-overlay {\n        position: fixed;\n        left: 0;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        // background: rgba(0,0,0,0.1);\n        z-index: @zindex-dropdown - 1;\n    }\n}\n\n@media (max-width: @screen-sm) {\n    body.dropdown-open {\n        overflow: hidden;\n\n        .dropdown-overlay {\n            background: rgba(0,0,0,0.4);\n        }\n\n        .control-dropdown.dropdown-menu {\n            overflow: auto;\n            overflow-y: scroll;\n            position: fixed !important;\n            margin: 15px !important;\n            top: auto !important;\n            right: 0 !important;\n            bottom: 0 !important;\n            left: 0 !important;\n            transform: none !important;\n            z-index: @zindex-dropdown;\n            border-radius: 8px;\n\n            > li {\n                a, button {\n                    font-size: 16px;\n                    // line-height: 50px;\n                    padding-top: 12px;\n                    padding-bottom: 12px;\n                }\n\n                &.first-item:not(.disabled) {\n                    a, button {\n                        &:hover, &:focus, &:active {\n                            border-top-left-radius: 8px;\n                            border-top-right-radius: 8px;\n                        }\n                    }\n                }\n\n                &.last-item:not(.disabled) {\n                    a, button {\n                        &:hover, &:focus, &:active {\n                            border-bottom-left-radius: 8px;\n                            border-bottom-right-radius: 8px;\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/dropdown/dropdown.variables.less",
    "content": "@dropdown-border:                @overlay-background;\n@dropdown-fallback-border:       #ccc;\n@dropdown-divider-bg:            #e5e5e5;\n\n@dropdown-link-color:            @text-color;\n@dropdown-link-color-fade:       rgba(var(--bs-body-color-rgb), 0.6);\n@dropdown-link-hover-color:      @emphasis-color;\n@dropdown-link-hover-bg:         @body-bg;\n\n@dropdown-link-active-color:     @component-active-color;\n@dropdown-link-active-bg:        @component-active-bg;\n\n@dropdown-link-disabled-color:   @gray-light;\n@dropdown-header-color:          @gray-light;\n\n@color-dropdown-title-border:    #c9c9c9;\n@color-dropdown-title-text:      @dropdown-link-color;\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/flashmessage/README.md",
    "content": "## Flash message\n\nDisplays a floating flash message on the screen.\n\n### Display onload\n\n```html\n<div data-control=\"flash-message\" data-interval=\"5\" data-type=\"success\" class=\"oc-hide\">\n    This message is created from a static element. It will go away in 5 seconds.\n</p>\n```\n\n### Trigger\n\n```html\n<p>\n    <a href=\"#\" class=\"btn btn-primary\" onclick=\"oc.flashMsg({ message: 'The record has been successfully saved. This message will go away in 1 second.', type: 'success', 'interval': 1 }); return false;\">\n        Show Success\n    </a>\n\n    <a href=\"javascript:;\" class=\"btn btn-danger\" onclick=\"oc.flashMsg({ message: 'Babam!', type: 'error'}); return false;\">\n        Show Error\n    </a>\n\n    <a href=\"javascript:;\" class=\"btn btn-warning\" onclick=\"oc.flashMsg({ message: 'Warning! October is too good for this world!', type: 'warning'}); return false;\">\n        Show Warning\n    </a>\n</p>\n```\n\n### Display static\n\nA flash message can be rendered as a static element by attaching the `static` class. The `data-control` attribute is not needed.\n\n```html\n<p class=\"flash-message static success\">\n    Import completed successfully (success)\n</p>\n\n<p class=\"flash-message static info\">\n    Informative info box is informational (info)\n</p>\n\n<p class=\"flash-message static warning\">\n    Phasers have been set to stun (warning)\n</p>\n\n<p class=\"flash-message static error\">\n    We couldn't help you with that (error)\n</p>\n```\n\n### Data attributes\n\n- data-control=\"flash-message\" - enables the flash message plugin\n- data-interval=\"2\" - the interval to display the message in seconds, optional. Default: 2\n\n### JavaScript API\n\n```js\noc.flashMsg({\n    'text': 'Record saved.',\n    'type': 'success',\n    'interval': 3\n})\n```\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/flashmessage/flashmessage.less",
    "content": "//\n// Flash Messages\n// --------------------------------------------------\n\n@color-flash-success-bg:                     @brand-success;\n@color-flash-error-bg:                       #cc3300;\n@color-flash-warning-bg:                     #f0ad4e;\n@color-flash-info-bg:                        #5fb6f5;\n@color-flash-text:                           #ffffff;\n\n.flash-message.static {\n    color: @color-flash-text;\n    font-size: 14px;\n    padding: 10px 30px 10px 15px;\n    word-wrap: break-word;\n    text-align: left;\n    border-radius: @border-radius-base;\n\n    &.success { background: @color-flash-success-bg; }\n    &.error { background: @color-flash-error-bg; }\n    &.warning { background: @color-flash-warning-bg; }\n    &.info { background: @color-flash-info-bg; }\n\n    button {\n        float: none;\n        position: absolute;\n        right: 10px;\n        top: 12px;\n        color: white;\n        .hide-text();\n        opacity: 1;\n        outline: none;\n\n        &:before {\n            .icon-OctoFont();\n            content: @icon-cross;\n            color: white;\n            font-size: 16px;\n            position: relative;\n        }\n\n        &:hover {\n            opacity: 1;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/README.md",
    "content": "# Inspector control\n\nInspector is a visual configuration tool that is used in several places of October back-end. The most known usage of Inspector is the CMS components configuration feature, but Inspector is not limited with the CMS. In fact, it's a universal tool that can be used with any element on a back-end page.\n\nThe Inspector loads the configuration schema from an inspectable element, builds the user interface, and writes values entered by users back to the inspectable element. The first version of Inspector was supporting only a few scalar value types - strings and Booleans, without an option to edit any complex data.\n\nThe current version of Inspector allows to edit any imaginable data structures, including cases where users create enumerable data elements right in the Inspector interface.\n\nThis section describes the client-side Inspector API without going into details about the back-end usage of the data Inspector generates. Inspector accepts the configuration schema in JSON format and generates values in JSON format as well. Providing the configuration and interpreting the generated values is up to developers. For example, the CMS module uses information returned from component's defineProperties() method to generate the configuration JSON string and converts JSON values generated by Inspector to the components configuration in CMS templates. In this document we are focusing only on the JSON format.\n\n## Configuring inspectable elements\n\nClicking an inspectable element displays Inspector for that element. Any HTML element could be made inspectable by adding data attributes to it. The required attributes are:\n\n* `data-inspectable` - indicates that Inspector should be created when the element is clicked.\n* `data-inspector-title` - sets the Inspector popup title.\n* `data-inspector-config` - contains the Inspector configuration JSON string. If this attribute is not specified, the configuration is loaded from the server, see the [Dynamic configuration and dynamic items](#dynamic-configuration-and-dynamic-items) section below.\n\nInspectable elements should also contain a hidden input element used by Inspector for reading and writing values. The input element should be marked with the `data-inspector-values` data attribute.\n\nExample inspectable element markup:\n\n```html\n<div\n    data-inspectable\n    data-inspector-title=\"Some inspectable element\"\n    data-inspector-description=\"Some description\">\n        <input\n            data-inspector-values\n            type=\"hidden\"\n            value=\"JSON\"/>\n</div>\n```\n\n### Optional data attributes\n\nThere are several optional data attributes and features that could be defined in an inspectable element or in elements around it:\n\n* `data-inspector-offset` - sets offset, in pixels, for the Inspector popup.\n* `data-inspector-offset-x` - sets horizontal offset, in pixels, for the Inspector popup.\n* `data-inspector-offset-y` - sets vertical offset, in pixels, for the Inspector popup.\n* `data-inspector-placement` - sets defines placement for the Inspector popup, optional. If omitted, Inspector evaluates a placement automatically. Supported values: top, bottom, left, top.\n* `data-inspector-fallback-placement` - sets less preferable placement for the Inspector popup, optional. This value is used if Inspector can't use the placement specified in data-inspector-placement. Supported values: top, bottom, left, top.\n* `data-inspector-external-parameters` - if this attribute exists in any parent element of the inspectable element, the external parameters editors will be enabled in Inspector (unless property-specific rules cancel the external editor).\n\n### Dynamic configuration and dynamic items\n\nIn case if the `data-inspector-config` attribute is missing in the inspectable element Inspector tries to load its configuration from the server. An important note - there should be a FORM element wrapping inspectable elements in order to use any dynamic features of Inspector.\n\nThe AJAX request used for loading the configuration from the server is named `onGetInspectorConfiguration`. The handler should be defined in the back-end controller and should return an array containing the Inspector configuration (in the PHP equivalent of the JSON configuration structure described later in this section), inspector title and description. Example of a server-side AJAX dynamic configuration request handler:\n\n```php\npublic function onGetInspectorConfiguration()\n{\n    // Load and use some values from the posted form\n    //\n    $someValue = Request::input('someValue');\n\n    // ... do some processing ...\n\n    return [\n        'configuration' => [\n            'properties'  => [list of properties],\n            'title'       => 'Inspector title',\n            'description' => 'Inspector description'\n        ]\n    ];\n}\n```\n\nSome Inspector editors - (drop-down, set, autocomplete) support static and dynamic options. Dynamic options are requested from the server, rather than being defined in the configuration JSON string. For using this feature, the inspectable element must have the `data-inspector-class` attribute defined. The attribute value should contain a name of a PHP class corresponding to the inspectable element.\n\nThe server-side controller should use the `Backend\\Traits\\InspectableContainer` trait in order to provide the dynamic options loading. The inspectable PHP class (specified with `data-inspector-class`) must either have a method `get[Property]Options()`, where the [Property] part corresponds the name of the dynamic property, or `getPropertyOptions($propertyName)` method that is more universal and accepts the property name as a parameter. The methods should return the `options` array containing associative arrays with keys `option` and `value`. Example:\n\n```php\npublic function getContextOptions()\n{\n    $optionsArray = [];\n\n    $optionsArray[] = ['value' => 'create', 'title' => 'Create'];\n    $optionsArray[] = ['value' => 'update', 'title' => 'Update'];\n    $optionsArray[] = ['value' => 'delete', 'title' => 'Delete'];\n\n    return [\n        'options' => $optionsArray\n    ];\n}\n```\n\n### Container and popups\n\nBy default Inspector is displayed in a popup, but there's an option to display it right on the page, in a container element. To enable this option, all inspectable elements should be wrapped into another element with `data-inspector-container` attribute. The attribute value should be a CSS selector pointing to an element inside the wrapper. Example:\n\n```html\n<div data-inspector-container=\".inspector-container\">\n   <div class=\"inspector-container\"></div>\n   <div data-inspectable ... ...>\n   <div data-inspectable ... ...>\n</div>\n```\n\nThe inner element will act as host element for Inspector when an inspectable element is clicked. The element should have the `inspector-container` class and can be optionally marked with `data-inspector-scrollable` attribute to make the Inspector scrollable. For the scrolling feature, the container element should have height defined explicitly.\n\nWhen the container is used, Inspector is still displayed in a popup by default, but users can click an icon in the Inspector header to move it to the container.\n\n## Data schema configuration\n\nInspector configuration, defined with `data-inspector-config` attribute or loaded from the server, should be an array containing a list of property definition. All examples in this section use JSON format. Below is an example of a configuration for two properties:\n\n```json\n[\n    {\n        \"property\": \"firstName\",\n        \"title\": \"First name\",\n        \"type\": \"string\"\n    },\n    {\n        \"property\": \"lastName\",\n        \"title\": \"Last name\",\n        \"type\": \"string\"\n    }\n]\n```\n\nThis configuration creates two text fields with titles \"First name\" and \"Last name\". When the data is saved back to the inspectable element (to the `data-inspector-values` hidden input element), it would have the following format:\n\n```json\n{\"firstName\":\"John\", \"lastName\":\"Smith\"}\n```\n\nEach property should have attributes `property`, `title` and `type`. The `type` attribute defines a type of an editor that should be created for the property. The supported editors are described further.\n\nOther attributes supported by all (or most of the) property types are:\n\n* `description` - description string, which is available in a tooltip displayed when a user overs the 'i' icon in the property editor.\n* `group` - allows to group multiple properties. The attribute should contain a group name. Groups could be collapsed by users, making the Inspector interface less cluttered.\n* `showExternalParam` - enables the inspector parameter editor for the property. External parameters are currently used only by the CMS. Note that some property types do not support external property editors. See also `data-inspector-external-parameters` attribute described above.\n* `placeholder` - text to display in the editor if property value is empty.\n* `validation` - validation configuration. See the complete validation description below.\n* `default` - default property value. The property value format depends on the property type - for the `string` type it's an array, for `stringList` type it's an array of strings. See more details below.\n\nAll other configuration properties are specific for different property types.\n\n### String editor\n\nString editor allows entering a single line of a text and represented with a simple input text field. The editor doesn't have any specific parameters. The optional `default` parameter for the editor should contain a string.\n\n```json\n{\n    \"property\": \"firstName\",\n    \"title\": \"First name\",\n    \"type\": \"string\",\n    \"default\": \"John\"\n}\n```\n\nThe editor generates string values:\n\n```json\n{\"firstName\":\"Sam\"}\n```\n\n### Text editor\n\nText editor allows entering multi-line long text values in a popup window. The editor doesn't have any specific parameters. The optional `default` parameter for the editor should contain a string.\n\n```json\n{\n    \"property\": \"description\",\n    \"title\": \"Description\",\n    \"type\": \"text\",\n    \"default\": \"This is a default description\"\n}\n```\n\nThe editor generates string values:\n\n```json\n{\"description\":\"This is a description\"}\n```\n\n### String list editor\n\nAllows users to enter lists of strings. The editor opens in a popup window and displays a text area. Each line of text represents an element in the result array. The optional `default` parameter should contain an array of strings. Example:\n\n```json\n{\n    \"property\": \"items\",\n    \"title\": \"Items\"\n    \"type\": \"stringList\",\n    \"default\": [\"String 1\", \"String 2\"]\n}\n```\n\nA value generated by the editor is an array of strings, for example:\n\n```json\n{\"items\":[\"String 1\",\"String 2\",\"String 3\"]}\n```\n\n### Autocomplete editor\n\nThis editor works like the `string` editor, but includes the autocomplete feature. Autocompletion options can be specified statically, with the `items` parameter or loaded dynamically. Example with static options:\n\n```json\n{\n    \"property\": \"condition\",\n    \"title\": \"Condition\"\n    \"type\": \"autocomplete\",\n    \"items\": {\"start\": \"Start\", \"end\": \"End\"}\n}\n```\n\nThe items are specified as a key-value object. The `items` parameter is optional, if it's not provided, the items will be loaded from the server - see [Dynamic configuration and dynamic items](#dynamic-configuration-and-dynamic-items) section above.\n\nValues generated by the editor are strings. Example:\n\n```json\n{\"condition\":\"start\"}\n```\n\nFields of this type do not support external property editors.\n\n### Checkbox editor\n\nProperties of this type are represented with a checkbox in the Inspector UI. This property doesn't have any special parameters. The `default` parameter, if specified, should contain a Boolean value or string values \"true\", \"false\", \"1\", \"0\". Example:\n\n```json\n{\n    \"property\": \"enabled\",\n    \"title\": \"Enabled\",\n    \"type\": \"checkbox\",\n    \"default\": true\n}\n```\n\nValues generated by the editor are 0 (unchecked) or 1 (checked). Example:\n\n```json\n{\"enabled\":1}\n```\n\n### Dropdown editor\n\nDisplays a drop-down list. Options for the drop-down list can be specified statically with the `options` attribute or loaded from the server dynamically. Example:\n\n```json\n{\n    \"property\": \"action\",\n    \"title\": \"Action\",\n    \"type\": \"dropdown\",\n    \"options\": {\n        \"show\": \"Show\",\n        \"hide\": \"Hide\",\n        \"enable\": \"Enable\",\n        \"disable\": \"Disable\",\n        \"empty\": \"Empty\"\n    }\n}\n```\n\nThe `options` attribute should be a key-value object. If the attribute is not specified, Inspector will try to load options from the server - see [Dynamic configuration and dynamic items](#dynamic-configuration-and-dynamic-items) section above.\n\nThe editor generates a string value corresponding to the selected option, for example:\n\n```json\n{\"action\":\"hide\"}\n```\n\n### Dictionary editor\n\nDictionary editor allows to create key-value pairs with a simple user interface consisting of a table with two columns. The `default` parameter, if specified, should contain a key-value object. Example:\n\n```json\n{\n    \"property\": \"options\",\n    \"title\": \"Options\",\n    \"type\": \"dictionary\",\n    \"default\": {\"option1\": \"Option 1\"}\n}\n```\n\nThe editor generates an object value, for example:\n\n```json\n{\"options\":{\"option1\":\"Option 1\",\"option2\":\"Option 2\"}}\n```\n\nThe dictionary editor supports validation for the entire set (`required` and `length` validators) and for keys and values separately. See the [validation description](#defining-the-validation-rules) further in this document. The `validationKey` and `validationValue` define validation for keys and values, for example:\n\n```json\n{\n    \"property\": \"options\",\n    \"title\": \"Options\",\n    \"type\": \"dictionary\",\n    \"validation\": {\n        \"required\": {\n            \"message\": \"Please create options\"\n        },\n        \"length\": {\n            \"min\": {\n                \"value\": 2,\n                \"message\": \"Create at least two options.\"\n            }\n        }\n    },\n    \"validationKey\": {\n        \"regex\": {\n            \"pattern\": \"^[a-z]+$\",\n            \"message\": \"Keys can contain only lowercase Latin letters\"\n        }\n    },\n    \"validationValue\": {\n        \"regex\": {\n            \"pattern\": \"^[a-zA-Z0-9]+$\",\n            \"message\": \"Values can contain only Latin letters and digits\"\n        }\n    }\n}\n```\n\n### Object editor\n\nAllows to define an object with specific properties editable by users. Object properties are specified with the `properties` attribute. The value of the attribute is an array, which has exactly the same structure as the Inspector properties array.\n\n```json\n{\n    \"property\": \"address\",\n    \"title\": \"Address\",\n    \"type\": \"object\",\n    \"properties\": [\n        {\n            \"property\": \"streetAddress\",\n            \"title\": \"Street address\",\n            \"type\": \"string\"\n        },\n        {\n            \"property\": \"city\",\n            \"title\": \"City\",\n            \"type\": \"string\"\n        },\n        {\n            \"property\": \"country\",\n            \"title\": \"Country\",\n            \"type\": \"dropdown\",\n            \"options\": {\"us\": \"US\", \"ca\": \"Canada\"}\n        }\n    ]\n}\n```\n\nThe example above creates an object with three properties. Two of them are displayed as text fields, and the third as a drop-down.\n\nObject editor values are objects. Example:\n\n```json\n{\n    \"address\": {\n        \"streetAddress\":\"321-210 Second ave\",\n        \"city\":\"Springfield\",\n        \"country\":\"us\"\n    }\n}\n```\n\nThe object properties can be of any type supported by Inspector, including other objects.\n\nThere's a way to exclude an object from Inspector values completely, if one of the object fields is empty. The field is identified with `ignoreIfPropertyEmpty` parameter. For example:\n\n```json\n{\n    \"property\": \"address\",\n    \"title\": \"Address\",\n    \"type\": \"object\",\n    \"ignoreIfPropertyEmpty\": \"title\",\n    \"properties\": [\n        {\n            \"property\": \"streetAddress\",\n            \"title\": \"Street address\",\n            \"type\": \"string\"\n        },\n        {\n            \"property\": \"city\",\n            \"title\": \"City\",\n            \"type\": \"string\"\n        }\n    ]\n}\n```\n\nIn the example above, if the street address is not specified, the object (\"address\") will be completely removed from the Inspector output. If there are any validation rules defined on other object properties and the required property is empty, those rules will be ignored.\n\nA `default` value for the editor, if specified, should be an object with the same properties as defined in the `properties` configuration parameter.\n\nObject editors do not support the external property editor feature.\n\n### Object list editor\n\nThe object list editor allows users to create multiple objects with a pre-defined structure. For example, it could be used for creating a list of person, where each person has a name and address.\n\nThe properties of objects that can be created with the editor are defined with `itemProperties` parameter. The parameter should contain an array of properties, similar to Inspector configuration array. Another required parameter is `titleProperty`, which identifies a property that should be used as a title in Inspector UI. Example configuration:\n\n```json\n{\n    \"property\": \"people\",\n    \"title\": \"People\",\n    \"type\": \"objectList\",\n    \"titleProperty\": \"fullName\",\n    \"itemProperties\": [\n        {\n            \"property\": \"fullName\",\n            \"title\": \"Full name\",\n            \"type\": \"string\"\n        },\n        {\n            \"property\": \"address\",\n            \"title\": \"Address\",\n            \"type\": \"string\"\n        }\n    ]\n}\n```\n\nThe array of properties defined with `itemProperties` supports all property types.\n\nThe Object List editor type doesn't support default values.\n\nBy default the value created by the editor of this type is a non-associative array:\n\n```json\n{\n    \"people\":[\n        {\"fullName\":\"John Smith\",\"address\":\"Palo Alto\"},\n        {\"fullName\":\"Bart Simpson\",\"address\":\"Springfield\"}\n     ]\n}\n```\n\nIf the result value should be an associative array (object), use the `keyProperty` configuration option. The option value should refer to a property that should be used as a key. The key property can use only the string or drop-down editors, its value should be unique and cannot be empty. Example:\n\n```json\n{\n    \"property\": \"people\",\n    \"title\": \"People\",\n    \"type\": \"objectList\",\n    \"titleProperty\": \"fullName\",\n    \"keyProperty\": \"login\",\n    \"itemProperties\": [\n        {\n            \"property\": \"fullName\",\n            \"title\": \"Full name\",\n            \"type\": \"string\"\n        },\n        {\n            \"property\": \"login\",\n            \"title\": \"Login\",\n            \"type\": \"string\"\n        },\n        {\n            \"property\": \"address\",\n            \"title\": \"Address\",\n            \"type\": \"string\"\n        }\n    ]\n}\n```\n\nThe `login` property in the example above will be used as a key in the result value:\n\n```json\n{\n    \"people\":{\n        \"john\":{\"fullName\":\"John Smith\",\"address\":\"Palo Alto\"},\n        \"bart\":{\"fullName\":\"Bart Simpson\",\"address\":\"Springfield\"}\n    }\n}\n```\n\n### Set editor\n\nThe set editor allows users to select multiple predefined options with checkboxes. Set items can be specified statically with the configuration, using the `items` parameter, or loaded dynamically. Example with static items definition:\n\n```json\n{\n    \"property\": \"context\",\n    \"title\": \"Context\",\n    \"type\": \"set\",\n    \"items\": {\n        \"create\": \"Create\",\n        \"update\": \"Update\",\n        \"preview\": \"Preview\"\n    },\n    \"default\": [\"create\", \"update\"]\n}\n```\n\nThe `items` attribute should be a key-value object. If the attribute is not specified, Inspector will try to load options from the server - see [Dynamic configuration and dynamic items](#dynamic-configuration-and-dynamic-items) section above.\n\nThe `default` parameter, if specified, should be an array listing item keys selected by default.\n\nSet editors do not support the external property editor feature.\n\n## Defining the validation rules\n\nInspector support several validation rules that can be applied to properties. Validation rules can be applied to top-level properties as well as to internal property definitions of object and object list editors. There are two ways to define validation rules - the legacy syntax and the new syntax.\n\nThe legacy syntax is supported for the backwards compatibility with existing CMS components definitions. This syntax will always be supported, but it's limited, and cannot be mixed with the new syntax. Example of the legacy syntax:\n\n```json\n{\n    \"property\": \"name\",\n    \"title\": \"Name\",\n    \"type\": \"string\",\n    \"required\": true,\n    \"validationPattern\": \"^[a-zA-Z]+$\"\n    \"validationMessage\": \"The Name field is required and can contain only Latin letters.\",\n}\n```\n\nThe legacy syntax supports only two validation rules - required and regular expression. The new syntax is much more flexible and extendable:\n\n```json\n{\n    \"property\": \"name\",\n    \"title\": \"Name\",\n    \"type\": \"string\",\n    \"validation\": {\n        \"required\": {\n            \"message\": \"The Name field is required\"\n        },\n        \"regex\": {\n            \"message\": \"The Name field can contain only Latin letters.\",\n            \"pattern\": \"^[a-zA-Z]+$\"\n        }\n    }\n}\n```\n\nThe key value in the `validation` object refers to a validator (see below). Validators are configured with objects, which properties depend on a validator. One property - `message` is common for all validators.\n\n### required validator\n\nChecks if a value is not empty. The validator can be used with any editor, including complex editors (sets, dictionaries, object lists, etc.). Example:\n\n```json\n{\n    \"property\": \"name\",\n    \"title\": \"Name\",\n    \"type\": \"string\",\n    \"validation\": {\n        \"required\": {\n            \"message\": \"The Name field is required\"\n        }\n    }\n}\n```\n\n### regex validator\n\nValidates string values with a regular expression. The validator can  be use only with string-typed editors. Example:\n\n```json\n{\n    \"property\": \"name\",\n    \"title\": \"Name\",\n    \"type\": \"string\",\n    \"validation\": {\n        \"regex\": {\n            \"message\": \"The Name field can contain only Latin letters\",\n            \"pattern\": \"^[a-z]+$\",\n            \"modifiers\": \"i\"\n        }\n    }\n}\n```\n\nThe regular expression is specified with the required `pattern` parameter. The `modifiers` parameter is optional and can be used for setting regular expression modifiers.\n\n### integer validator\n\nChecks if the value is integer and can optionally validate if the value is within a specific interval. The validator can be used only with string-typed editors. Example:\n\n```json\n{\n    \"property\": \"numOfColumns\",\n    \"title\": \"Number of Columns\",\n    \"type\": \"string\",\n    \"validation\": {\n        \"integer\": {\n            \"message\": \"The Number of Columns field should contain an integer value\",\n            \"allowNegative\": true,\n            \"min\": {\n                \"value\": -10,\n                \"message\": \"The number of columns should not be less than -10.\"\n            },\n            \"max\": {\n                \"value\": 10,\n                \"message\": \"The number of columns should not be greater than 10.\"\n            }\n        }\n    }\n}\n```\n\nSupported parameters:\n\n* `allowNegative` - optional, determines if negative values are allowed. By default negative values are not allowed.\n* `min` - optional object, defines the minimum allowed value and error message. Object fields:\n    * `value` - defines the minimum value.\n    * `message` - optional, defines the error message.\n* `max` - optional object, defines the maximum allowed value and error message. Object fields:\n    * `value` - defines the maximum value.\n    * `message` - optional, defines the error message.\n\n### float validator\n\nChecks if the value is a floating point number. The parameters for this validator match the parameters of the **integer** validator described above. Example:\n\n```json\n{\n    \"property\": \"amount\",\n    \"title\": \"Amount\",\n    \"type\": \"string\",\n    \"validation\": {\n        \"float\": {\n            \"message\": \"The Amount field should contain a positive floating point value.\"\n        }\n    }\n}\n```\n\nValid floating point number formats:\n\n* 10\n* 10.302\n* -10 (if `allowNegative` is `true`)\n* -10.84 (if `allowNegative` is `true`)\n\n### length validator\n\nChecks if a string, array or object is not shorter or longer than specified values. This validator can work with the string, text, set, string list, dictionary and object list editors. In multiple-value editors (set, string list, dictionary and object list) it validates the number of items created in the editor.\n\n> **Note**: the `length` validator doesn't validate empty values. For example, if it's applied to a set editor, and the set is empty, the validation will pass regardless of the `min` and `max` parameter values. Use the `required` validator together with the `length` validator to make sure that the value is not empty before the length validation is applied.\n\n```json\n{\n    \"property\": \"name\",\n    \"title\": \"Name\",\n    \"type\": \"string\",\n    \"validation\": {\n        \"length\": {\n            \"min\": {\n                \"value\": 2,\n                \"message\": \"The name should not be shorter than two letters.\"\n            },\n            \"max\": {\n                \"value\": 10,\n                \"message\": \"name should not be longer than 10 letters.\"\n            }\n        }\n    }\n}\n```\n\nSupported parameters:\n\n* `min` - optional object, defines the minimum allowed length and error message. Object fields:\n    * `value` - defines the minimum value.\n    * `message` - optional, defines the error message.\n* `max` - optional object, defines the maximum allowed length and error message. Object fields:\n    * `value` - defines the maximum value.\n    * `message` - optional, defines the error message.\n\n## Inspector events\n\nInspector triggers several events on the inspectable elements.\n\n### change\n\nThe `change` event is triggered after Inspector applies updated values to the inspectable element. The event is triggered only if the user has changed values in the Inspector UI.\n\n### showing.oc.inspector\n\nThe `showing.oc.inspector` event is triggered before Inspector is displayed. The event handler can optionally stop the process with calling `ev.isDefaultPrevented()`. Example - prevent Inspector showing:\n\n```js\n$(document).on('showing.oc.inspector', 'div[data-inspectable]', function(ev, data){\n    ev.preventDefault()\n})\n```\n\nThe handler could  perform any required processing, even asynchronous, and then call the callback function passed to the handler, to continue showing the Inspector. In this case the handler should call `ev.stopPropagation()` method to stop the default Inspector initialization. Example - continue showing after some processing:\n\n```js\n$(document).on('showing.oc.inspector', 'div[data-inspectable]', function(ev, data){\n    ev.stopPropagation()\n    // The callback function can be called asynchronously\n    data.callback()\n})\n```\n\n### hiding.oc.inspector\n\nThe `hiding.oc.inspector` is called before Inspector hiding process starts. The handler can stop the hiding with calling `ev.preventDefault()`. Example:\n\n```js\n$(document).on('hiding.oc.inspector', 'div[data-inspectable]', function(ev, data){\n    if (!confirm('Allow hiding?')) {\n        ev.preventDefault()\n    }\n})\n```\n\nThe values entered in Inspector are available through the `values` element of the second handler argument:\n\n```js\n$(document).on('hiding.oc.inspector', 'div[data-inspectable]', function(ev, data){\n   console.log(data.values)\n})\n```\n\n### hidden.oc.inspector\n\nThe `hidden.oc.inspector` is triggered after Inspector is hidden.\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.datainteraction.js",
    "content": "/*\n * Inspector data interaction class.\n *\n * Provides methods for loading and writing Inspector configuration\n * and values form and to inspectable elements.\n */\n+function ($) { \"use strict\";\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var DataInteraction = function(element) {\n        this.element = element;\n\n        Base.call(this);\n    }\n\n    DataInteraction.prototype = Object.create(BaseProto)\n    DataInteraction.prototype.constructor = Base\n\n    DataInteraction.prototype.dispose = function() {\n        this.element = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    DataInteraction.prototype.getElementValuesInput = function() {\n        return this.element.querySelector('input[data-inspector-values]')\n    }\n\n    DataInteraction.prototype.normalizePropertyCode = function(code, configuration) {\n        var lowerCaseCode = code.toLowerCase()\n\n        for (var index in configuration) {\n            var propertyInfo = configuration[index]\n\n            if (propertyInfo.property.toLowerCase() == lowerCaseCode) {\n                return propertyInfo.property\n            }\n        }\n\n        return code\n    }\n\n    DataInteraction.prototype.loadValues = function(configuration) {\n        var valuesField = this.getElementValuesInput()\n\n        if (valuesField) {\n            var valuesStr = $.trim(valuesField.value)\n\n            try {\n                return valuesStr.length === 0 ? {} : JSON.parse(valuesStr)\n            }\n            catch (err) {\n                throw new Error('Error parsing Inspector field values. ' + err)\n            }\n        }\n\n        var values = {},\n            attributes = this.element.attributes\n\n        for (var i=0, len = attributes.length; i < len; i++) {\n            var attribute = attributes[i],\n                matches = []\n\n            if (matches = attribute.name.match(/^data-property-(.*)$/)) {\n                // Important - values contained in data-property-xxx attributes are\n                // considered strings and never parsed with JSON. The use of the\n                // data-property-xxx attributes is very limited - they're only\n                // used in Pages for creating snippets from partials, where properties\n                // are created with a table UI widget, which doesn't allow creating\n                // properties of any complex types.\n                //\n                // There is no a technically reliable way to determine when a string\n                // is a JSON data or a regular string. Users can enter a value\n                // like [10], which is a proper JSON value, but meant to be a string.\n                //\n                // One possible way to resolve it, if to check the property type loaded\n                // from the configuration and see if the corresponding editor expects\n                // complex data.\n\n                var normalizedPropertyName = normalizePropertyCode(matches[1], configuration)\n                values[normalizedPropertyName] = attribute.value\n            }\n        }\n\n        return values\n    }\n\n    DataInteraction.prototype.loadConfiguration = function(onComplete) {\n        var configurationField = this.element.querySelector('input[data-inspector-config]'),\n            result = {\n                configuration: {},\n                title: null,\n                description: null\n            },\n            $element = $(this.element);\n\n        result.title = $element.data('inspector-title');\n        result.description = $element.data('inspector-description');\n\n        if (configurationField) {\n            result.configuration = this.parseConfiguration(configurationField.value);\n\n            onComplete(result, this);\n            return;\n        }\n\n        var $form = $element.closest('form'),\n            data = $element.data(),\n            self = this;\n\n        $.oc.stripeLoadIndicator.show();\n\n        $form.request($.oc.inspector.helpers.getEventHandler($element, 'onGetInspectorConfiguration'), {\n            data: data\n        })\n        .done(function inspectorConfigurationRequestDoneClosure(data) {\n            self.configurationRequestDone(data, onComplete, result);\n        })\n        .always(function() {\n            $.oc.stripeLoadIndicator.hide();\n        });\n    }\n\n    //\n    // Internal methods\n    //\n\n    DataInteraction.prototype.parseConfiguration = function(configuration) {\n        if (!Array.isArray(configuration) && !$.isPlainObject(configuration)) {\n            if ($.trim(configuration) === 0) {\n                return {};\n            }\n\n            try {\n               return JSON.parse(configuration);\n            }\n            catch(err) {\n                throw new Error('Error parsing Inspector configuration. ' + err);\n            }\n        }\n        else {\n            return configuration;\n        }\n    }\n\n    DataInteraction.prototype.configurationRequestDone = function(data, onComplete, result) {\n        result.configuration = this.parseConfiguration(data.configuration.properties);\n\n        if (data.configuration.title !== undefined) {\n            result.title = data.configuration.title;\n        }\n\n        if (data.configuration.description !== undefined) {\n            result.description = data.configuration.description;\n        }\n\n        onComplete(result, this);\n    }\n\n    $.oc.inspector.dataInteraction = DataInteraction;\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.autocomplete.js",
    "content": "/*\n * Inspector autocomplete editor class.\n *\n * Depends on october.autocomplete.js\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.string,\n        BaseProto = Base.prototype;\n\n    var AutocompleteEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.autoUpdateTimeout = null;\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group);\n    }\n\n    AutocompleteEditor.prototype = Object.create(BaseProto);\n    AutocompleteEditor.prototype.constructor = Base;\n\n    AutocompleteEditor.prototype.dispose = function() {\n        this.clearAutoUpdateTimeout();\n        this.removeAutocomplete();\n\n        BaseProto.dispose.call(this);\n    }\n\n    AutocompleteEditor.prototype.build = function() {\n        var container = document.createElement('div'),\n            editor = document.createElement('input'),\n            placeholder = this.propertyDefinition.placeholder !== undefined ? this.propertyDefinition.placeholder : '',\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property);\n\n        editor.setAttribute('type', 'text');\n        editor.setAttribute('class', 'string-editor');\n        editor.setAttribute('placeholder', placeholder);\n\n        container.setAttribute('class', 'autocomplete-container');\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default;\n        }\n\n        if (value === undefined) {\n            value = '';\n        }\n\n        editor.value = value;\n\n        $.oc.foundation.element.addClass(this.containerCell, 'text autocomplete');\n\n        container.appendChild(editor);\n        this.containerCell.appendChild(container);\n\n        if (this.propertyDefinition.items !== undefined) {\n            this.buildAutoComplete(this.propertyDefinition.items);\n        }\n        else {\n            this.loadDynamicItems();\n        }\n    }\n\n    AutocompleteEditor.prototype.buildAutoComplete = function(items) {\n        var input = this.getInput()\n\n        if (items === undefined) {\n            items = [];\n        }\n\n        var $input = $(input),\n            autocomplete = $input.data('autocomplete')\n\n        if (!autocomplete) {\n            $input.autocomplete({\n                source: this.prepareItems(items),\n                matchWidth: true\n            });\n        }\n        else {\n            autocomplete.source = this.prepareItems(items);\n        }\n    }\n\n    AutocompleteEditor.prototype.removeAutocomplete = function() {\n        var input = this.getInput();\n\n        $(input).autocomplete('destroy');\n    }\n\n    AutocompleteEditor.prototype.prepareItems = function(items) {\n        var result = {};\n\n        if (Array.isArray(items)) {\n            for (var i = 0, len = items.length; i < len; i++) {\n                result[items[i]] = items[i];\n            }\n        }\n        else {\n            result = items;\n        }\n\n        return result;\n    }\n\n    AutocompleteEditor.prototype.supportsExternalParameterEditor = function() {\n        return false;\n    }\n\n    AutocompleteEditor.prototype.getContainer = function() {\n        return this.getInput().parentNode;\n    }\n\n    AutocompleteEditor.prototype.registerHandlers = function() {\n        BaseProto.registerHandlers.call(this);\n\n        $(this.getInput()).on('change', this.proxy(this.onInputKeyUp));\n    }\n\n    AutocompleteEditor.prototype.unregisterHandlers = function() {\n        BaseProto.unregisterHandlers.call(this);\n\n        $(this.getInput()).off('change', this.proxy(this.onInputKeyUp));\n    }\n\n    AutocompleteEditor.prototype.saveDependencyValues = function() {\n        this.prevDependencyValues = this.getDependencyValues();\n    }\n\n    AutocompleteEditor.prototype.getDependencyValues = function() {\n        var result = '';\n\n        for (var i = 0, len = this.propertyDefinition.depends.length; i < len; i++) {\n            var property = this.propertyDefinition.depends[i],\n                value = this.inspector.getPropertyValue(property);\n\n            if (value === undefined) {\n                value = '';\n            }\n\n            result += property + ':' + value + '-';\n        }\n\n        return result;\n    }\n\n    AutocompleteEditor.prototype.onInspectorPropertyChanged = function(property) {\n        if (!this.propertyDefinition.depends || this.propertyDefinition.depends.indexOf(property) === -1) {\n            return;\n        }\n\n        this.clearAutoUpdateTimeout();\n\n        if (this.prevDependencyValues === undefined || this.prevDependencyValues != dependencyValues) {\n            this.autoUpdateTimeout = setTimeout(this.proxy(this.loadDynamicItems), 200);\n        }\n    }\n\n    AutocompleteEditor.prototype.clearAutoUpdateTimeout = function() {\n        if (this.autoUpdateTimeout !== null) {\n            clearTimeout(this.autoUpdateTimeout);\n            this.autoUpdateTimeout = null;\n        }\n    }\n\n    //\n    // Dynamic items\n    //\n\n    AutocompleteEditor.prototype.showLoadingIndicator = function() {\n        $(this.getContainer()).loadIndicator();\n    }\n\n    AutocompleteEditor.prototype.hideLoadingIndicator = function() {\n        if (this.isDisposed()) {\n            return;\n        }\n\n        var $container = $(this.getContainer());\n\n        $container.loadIndicator('hide');\n        $container.loadIndicator('destroy');\n\n        $container.removeClass('loading-indicator-container');\n    }\n\n    AutocompleteEditor.prototype.loadDynamicItems = function() {\n        if (this.isDisposed()) {\n            return;\n        }\n\n        this.clearAutoUpdateTimeout();\n\n        var container = this.getContainer(),\n            data = this.getRootSurface().getValues(),\n            $form = $(container).closest('form');\n\n        $.oc.foundation.element.addClass(container, 'loading-indicator-container size-small');\n        this.showLoadingIndicator();\n\n        if (this.triggerGetItems(data) === false) {\n            return;\n        }\n\n        data['inspectorProperty'] = this.getPropertyPath();\n        data['inspectorClassName'] = this.inspector.options.inspectorClass;\n\n        $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), {\n            data: data,\n            progressBar: false\n        })\n        .done(this.proxy(this.itemsRequestDone))\n        .always(this.proxy(this.hideLoadingIndicator));\n    }\n\n    AutocompleteEditor.prototype.triggerGetItems = function(values) {\n        var $inspectable = this.getInspectableElement();\n        if (!$inspectable) {\n            return true;\n        }\n\n        var itemsEvent = $.Event('autocompleteitems.oc.inspector');\n\n        $inspectable.trigger(itemsEvent, [{\n            values: values,\n            callback: this.proxy(this.itemsRequestDone),\n            property: this.inspector.getPropertyPath(this.propertyDefinition.property),\n            propertyDefinition: this.propertyDefinition\n        }]);\n\n        if (itemsEvent.isDefaultPrevented()) {\n            return false;\n        }\n\n        return true;\n    }\n\n    AutocompleteEditor.prototype.itemsRequestDone = function(data) {\n        if (this.isDisposed()) {\n            // Handle the case when the asynchronous request finishes after\n            // the editor is disposed\n            return\n        }\n\n        this.hideLoadingIndicator();\n\n        var loadedItems = {};\n\n        if (data.options) {\n            for (var i = data.options.length-1; i >= 0; i--) {\n                loadedItems[data.options[i].value] = data.options[i].title;\n            }\n        }\n\n        this.buildAutoComplete(loadedItems);\n    }\n\n    $.oc.inspector.propertyEditors.autocomplete = AutocompleteEditor;\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.base.js",
    "content": "/*\n * Inspector editor base class.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined) {\n        $.oc = {}\n    }\n\n    if ($.oc.inspector === undefined) {\n        $.oc.inspector = {}\n    }\n\n    if ($.oc.inspector.propertyEditors === undefined) {\n        $.oc.inspector.propertyEditors = {}\n    }\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var BaseEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.inspector = inspector;\n        this.propertyDefinition = propertyDefinition;\n        this.containerCell = containerCell;\n        this.containerRow = containerCell.parentNode;\n        this.parentGroup = group;\n        // Group created by a grouped editor, for example by the set editor\n        this.group = null;\n        this.childInspector = null;\n        this.validationSet = null;\n        this.disposed = false;\n\n        Base.call(this);\n\n        this.init();\n    }\n\n    BaseEditor.prototype = Object.create(BaseProto)\n    BaseEditor.prototype.constructor = Base\n\n    BaseEditor.prototype.dispose = function() {\n        // After this point editors can't rely on any DOM references\n        this.disposed = true;\n\n        this.disposeValidation();\n\n        if (this.childInspector) {\n            this.childInspector.dispose();\n        }\n\n        this.inspector = null;\n        this.propertyDefinition = null;\n        this.containerCell = null;\n        this.containerRow = null;\n        this.childInspector = null;\n        this.parentGroup = null;\n        this.group = null;\n        this.validationSet = null;\n\n        BaseProto.dispose.call(this)\n    }\n\n    BaseEditor.prototype.init = function() {\n        this.build()\n        this.registerHandlers()\n        this.initValidation()\n    }\n\n    BaseEditor.prototype.build = function() {\n        return null\n    }\n\n    BaseEditor.prototype.isDisposed = function() {\n        return this.disposed\n    }\n\n    BaseEditor.prototype.registerHandlers = function() {\n    }\n\n    BaseEditor.prototype.onInspectorPropertyChanged = function(property, value) {\n    }\n\n    BaseEditor.prototype.notifyChildSurfacesPropertyChanged = function(property, value) {\n        if (!this.hasChildSurface()) {\n            return;\n        }\n\n        this.childInspector.notifyEditorsPropertyChanged(property, value)\n    }\n\n    BaseEditor.prototype.focus = function() {\n    }\n\n    BaseEditor.prototype.hasChildSurface = function() {\n        return this.childInspector !== null\n    }\n\n    BaseEditor.prototype.getRootSurface = function() {\n        return this.inspector.getRootSurface()\n    }\n\n    BaseEditor.prototype.getPropertyPath = function() {\n        return this.inspector.getPropertyPath(this.propertyDefinition.property)\n    }\n\n    /**\n     * Updates displayed value in the editor UI. The value is already set\n     * in the Inspector and should be loaded from Inspector.\n     */\n    BaseEditor.prototype.updateDisplayedValue = function(value) {\n    }\n\n    BaseEditor.prototype.getPropertyName = function() {\n        return this.propertyDefinition.property\n    }\n\n    BaseEditor.prototype.getUndefinedValue = function() {\n        return this.propertyDefinition.default === undefined ? undefined : this.propertyDefinition.default\n    }\n\n    BaseEditor.prototype.throwError = function(errorMessage) {\n        throw new Error(errorMessage + ' Property: ' + this.propertyDefinition.property)\n    }\n\n    BaseEditor.prototype.getInspectableElement = function() {\n        return this.getRootSurface().getInspectableElement()\n    }\n\n    BaseEditor.prototype.isEmptyValue = function(value) {\n        return value === undefined\n            || value === null\n            || (typeof value == 'object' && $.isEmptyObject(value) )\n            || (typeof value == 'string' && $.trim(value).length === 0)\n            || (Object.prototype.toString.call(value) === '[object Array]' && value.length === 0)\n    }\n\n    //\n    // Validation\n    //\n\n    BaseEditor.prototype.initValidation = function() {\n        this.validationSet = new $.oc.inspector.validationSet(this.propertyDefinition, this.propertyDefinition.property)\n    }\n\n    BaseEditor.prototype.disposeValidation = function() {\n        this.validationSet.dispose()\n    }\n\n    BaseEditor.prototype.getValueToValidate = function() {\n        return this.inspector.getPropertyValue(this.propertyDefinition.property)\n    }\n\n    BaseEditor.prototype.validate = function(silentMode) {\n        var value = this.getValueToValidate()\n\n        if (value === undefined) {\n            value = this.getUndefinedValue()\n        }\n\n        var validationResult = this.validationSet.validate(value)\n        if (validationResult !== null) {\n            if (!silentMode) {\n                $.oc.flashMsg({text: validationResult, 'class': 'error', 'interval': 5})\n            }\n            return false\n        }\n\n        return true\n    }\n\n    BaseEditor.prototype.markInvalid = function() {\n        $.oc.foundation.element.addClass(this.containerRow, 'invalid');\n        this.inspector.getGroupManager().markGroupRowInvalid(this.parentGroup, this.inspector.getRootTable());\n\n        this.inspector.getRootSurface().expandGroupParents(this.parentGroup);\n        this.focus();\n    }\n\n    //\n    // External editor\n    //\n\n    BaseEditor.prototype.supportsExternalParameterEditor = function() {\n        return true\n    }\n\n    BaseEditor.prototype.onExternalPropertyEditorHidden = function() {\n    }\n\n    //\n    // Grouping\n    //\n\n    BaseEditor.prototype.isGroupedEditor = function() {\n        return false\n    }\n\n    BaseEditor.prototype.initControlGroup = function() {\n        this.group = this.inspector.getGroupManager().createGroup(this.propertyDefinition.property, this.parentGroup)\n    }\n\n    BaseEditor.prototype.createGroupedRow = function(property) {\n        var row = this.inspector.buildRow(property, this.group),\n            groupedClass = this.inspector.getGroupManager().isGroupExpanded(this.group) ? 'expanded' : 'collapsed'\n\n        this.inspector.applyGroupLevelToRow(row, this.group)\n\n        $.oc.foundation.element.addClass(row, 'property')\n        $.oc.foundation.element.addClass(row, groupedClass)\n        return row\n    }\n\n    $.oc.inspector.propertyEditors.base = BaseEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.checkbox.js",
    "content": "/*\n * Inspector checkbox editor class.\n *\n * This editor is used in $.oc.inspector.propertyEditors.set class.\n * If updates that affect references to this.inspector and propertyDefinition are done,\n * the propertyEditors.set class implementation should be reviewed.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var CheckboxEditor = function(inspector, propertyDefinition, containerCell, group) {\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    CheckboxEditor.prototype = Object.create(BaseProto)\n    CheckboxEditor.prototype.constructor = Base\n\n    CheckboxEditor.prototype.dispose = function() {\n        this.unregisterHandlers()\n\n        BaseProto.dispose.call(this)\n    }\n\n    CheckboxEditor.prototype.build = function() {\n        var editor = document.createElement('input'),\n            container = document.createElement('div'),\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property),\n            label = document.createElement('label'),\n            isChecked = false,\n            id = this.inspector.generateSequencedId();\n\n        container.setAttribute('tabindex', 0);\n        container.setAttribute('class', 'form-check');\n\n        editor.setAttribute('type', 'checkbox');\n        editor.setAttribute('value', '1');\n        editor.setAttribute('placeholder', 'placeholder');\n        editor.setAttribute('id', id);\n        editor.setAttribute('class', 'form-check-input');\n\n        container.appendChild(editor);\n\n        if (value === undefined) {\n            if (this.propertyDefinition.default !== undefined) {\n                isChecked = this.normalizeCheckedValue(this.propertyDefinition.default);\n            }\n        }\n        else {\n            isChecked = this.normalizeCheckedValue(value);\n        }\n\n        editor.checked = isChecked;\n\n        this.containerCell.appendChild(container);\n    }\n\n    CheckboxEditor.prototype.normalizeCheckedValue = function(value) {\n         if (value == '0' || value == 'false') {\n             return false;\n         }\n\n        return value;\n    }\n\n    CheckboxEditor.prototype.getInput = function() {\n        return this.containerCell.querySelector('input');\n    }\n\n    CheckboxEditor.prototype.focus = function() {\n        this.getInput().parentNode.focus({ preventScroll: true });\n    }\n\n    CheckboxEditor.prototype.updateDisplayedValue = function(value) {\n        this.getInput().checked = this.normalizeCheckedValue(value);\n    }\n\n    CheckboxEditor.prototype.isEmptyValue = function(value) {\n        if (value === 0 || value === '0' || value === 'false') {\n            return true;\n        }\n\n        return BaseProto.isEmptyValue.call(this, value);\n    }\n\n    CheckboxEditor.prototype.registerHandlers = function() {\n        var input = this.getInput()\n\n        input.addEventListener('change', this.proxy(this.onInputChange))\n    }\n\n    CheckboxEditor.prototype.unregisterHandlers = function() {\n        var input = this.getInput()\n\n        input.removeEventListener('change', this.proxy(this.onInputChange))\n    }\n\n    CheckboxEditor.prototype.onInputChange = function() {\n        var isChecked = this.getInput().checked\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, isChecked ? 1 : 0)\n    }\n\n    $.oc.inspector.propertyEditors.checkbox = CheckboxEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.dictionary.js",
    "content": "/*\n * Inspector dictionary editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.popupBase,\n        BaseProto = Base.prototype\n\n    var DictionaryEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.keyValidationSet = null\n        this.valueValidationSet = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    DictionaryEditor.prototype = Object.create(BaseProto)\n    DictionaryEditor.prototype.constructor = Base\n\n    DictionaryEditor.prototype.dispose = function() {\n        this.disposeValidators()\n\n        this.keyValidationSet = null\n        this.valueValidationSet = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    DictionaryEditor.prototype.init = function() {\n        this.initValidators()\n\n        BaseProto.init.call(this)\n    }\n\n    DictionaryEditor.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    //\n    // Popup editor methods\n    //\n\n    DictionaryEditor.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        if (value === undefined || $.isEmptyObject(value)) {\n            var placeholder = this.propertyDefinition.placeholder\n\n            if (placeholder !== undefined) {\n                $.oc.foundation.element.addClass(link, 'cell-placeholder')\n                link.textContent = placeholder\n            }\n            else {\n                link.textContent = 'Items: 0'\n            }\n        }\n        else {\n            if (typeof value !== 'object') {\n                this.throwError('Object list value should be an object.')\n            }\n\n            var itemCount = this.getValueKeys(value).length\n\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n            link.textContent = 'Items: ' + itemCount\n        }\n    }\n\n    DictionaryEditor.prototype.getPopupContent = function() {\n        return '<form>                                                                                      \\\n                <div class=\"modal-header\">                                                                  \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                               \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                  \\\n                </div>                                                                                      \\\n                <div class=\"modal-body\">                                                                    \\\n                    <div class=\"control-toolbar\">                                                           \\\n                        <div class=\"toolbar-item\">                                                          \\\n                            <div class=\"btn-group\">                                                         \\\n                                <button type=\"button\" class=\"btn btn-primary                                \\\n                                    oc-icon-plus\"                                                           \\\n                                    data-cmd=\"create-item\">'+oc.lang.get('inspector.add')+'</button>        \\\n                                <button type=\"button\" class=\"btn btn-default                                \\\n                                    empty oc-icon-trash\"                                                  \\\n                                    data-cmd=\"delete-item\"></button>                                        \\\n                            </div>                                                                          \\\n                        </div>                                                                              \\\n                    </div>                                                                                  \\\n                    <div class=\"form-group\">                                                                \\\n                        <div class=\"inspector-dictionary-container\">                                        \\\n                            <table class=\"headers\">                                                         \\\n                                <thead>                                                                     \\\n                                    <tr>                                                                    \\\n                                        <td>'+oc.lang.get('inspector.key')+'</td>                           \\\n                                        <td>'+oc.lang.get('inspector.value')+'</td>                         \\\n                                    </tr>                                                                   \\\n                                </thead>                                                                    \\\n                            </table>                                                                        \\\n                            <div class=\"values\">                                                            \\\n                                <div class=\"control-scrollpad\"                                              \\\n                                    data-control=\"scrollpad\">                                               \\\n                                    <div class=\"scroll-wrapper\">                                            \\\n                                        <table class=\"                                                      \\\n                                            no-offset-bottom                                                \\\n                                            inspector-dictionary-table\">                                    \\\n                                        </table>                                                            \\\n                                    </div>                                                                  \\\n                                </div>                                                                      \\\n                            </div>                                                                          \\\n                        </div>                                                                              \\\n                    </div>                                                                                  \\\n                </div>                                                                                      \\\n                <div class=\"modal-footer\">                                                                  \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button>  \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button> \\\n                </div>                                                                                      \\\n            </form>'\n    }\n\n    DictionaryEditor.prototype.configurePopup = function(popup) {\n        this.buildItemsTable(popup.get(0))\n\n        this.focusFirstInput()\n    }\n\n    DictionaryEditor.prototype.handleSubmit = function($form) {\n        return this.applyValues()\n    }\n\n    //\n    // Building and row management\n    //\n\n    DictionaryEditor.prototype.buildItemsTable = function(popup) {\n        var table = popup.querySelector('table.inspector-dictionary-table'),\n            tbody = document.createElement('tbody'),\n            items = this.inspector.getPropertyValue(this.propertyDefinition.property),\n            titleProperty = this.propertyDefinition.titleProperty\n\n        if (items === undefined) {\n            items = this.propertyDefinition.default\n        }\n\n        if (items === undefined || this.getValueKeys(items).length === 0) {\n            var row = this.buildEmptyRow()\n\n            tbody.appendChild(row)\n        }\n        else {\n            for (var key in items) {\n                var row = this.buildTableRow(key, items[key])\n\n                tbody.appendChild(row)\n            }\n        }\n\n        table.appendChild(tbody)\n        this.updateScrollpads()\n    }\n\n    DictionaryEditor.prototype.buildTableRow = function(key, value) {\n        var row = document.createElement('tr'),\n            keyCell = document.createElement('td'),\n            valueCell = document.createElement('td')\n\n        this.createInput(keyCell, key)\n        this.createInput(valueCell, value)\n\n        row.appendChild(keyCell)\n        row.appendChild(valueCell)\n\n        return row\n    }\n\n    DictionaryEditor.prototype.buildEmptyRow = function() {\n        return this.buildTableRow(null, null)\n    }\n\n    DictionaryEditor.prototype.createInput = function(container, value) {\n        var input = document.createElement('input'),\n            controlContainer = document.createElement('div')\n\n        input.setAttribute('type', 'text')\n        input.setAttribute('class', 'form-control')\n        input.value = value\n\n        controlContainer.appendChild(input)\n        container.appendChild(controlContainer)\n    }\n\n    DictionaryEditor.prototype.setActiveCell = function(input) {\n        var activeCells = this.popup.querySelectorAll('td.active')\n\n        for (var i = activeCells.length-1; i >= 0; i--) {\n            $.oc.foundation.element.removeClass(activeCells[i], 'active')\n        }\n\n        var activeCell = input.parentNode.parentNode // input / div / td\n        $.oc.foundation.element.addClass(activeCell, 'active')\n    }\n\n    DictionaryEditor.prototype.createItem = function() {\n        var activeRow = this.getActiveRow(),\n            newRow = this.buildEmptyRow(),\n            tbody = this.getTableBody(),\n            nextSibling = activeRow ? activeRow.nextElementSibling : null\n\n        tbody.insertBefore(newRow, nextSibling)\n\n        this.focusAndMakeActive(newRow.querySelector('input'))\n        this.updateScrollpads()\n    }\n\n    DictionaryEditor.prototype.deleteItem = function() {\n        var activeRow = this.getActiveRow(),\n            tbody = this.getTableBody()\n\n        if (!activeRow) {\n            return\n        }\n\n        var nextRow = activeRow.nextElementSibling,\n            prevRow = activeRow.previousElementSibling\n\n        tbody.removeChild(activeRow)\n\n        var newSelectedRow = nextRow ? nextRow : prevRow\n\n        if (!newSelectedRow) {\n            newSelectedRow = this.buildEmptyRow()\n            tbody.appendChild(newSelectedRow)\n        }\n\n        this.focusAndMakeActive(newSelectedRow .querySelector('input'))\n        this.updateScrollpads()\n    }\n\n    DictionaryEditor.prototype.applyValues = function() {\n        var tbody = this.getTableBody(),\n            dataRows = tbody.querySelectorAll('tr'),\n            link = this.getLink(),\n            result = {}\n\n        for (var i = 0, len = dataRows.length; i < len; i++) {\n            var dataRow = dataRows[i],\n                keyInput = this.getRowInputByIndex(dataRow, 0),\n                valueInput = this.getRowInputByIndex(dataRow, 1),\n                key = $.trim(keyInput.value),\n                value = $.trim(valueInput.value)\n\n            if (key.length == 0 && value.length == 0) {\n                continue\n            }\n\n            if (key.length == 0) {\n                $.oc.flashMsg({text: 'The key cannot be empty.', 'class': 'error', 'interval': 3})\n                this.focusAndMakeActive(keyInput)\n                return false\n            }\n\n            if (value.length == 0) {\n                $.oc.flashMsg({text: 'The value cannot be empty.', 'class': 'error', 'interval': 3})\n                this.focusAndMakeActive(valueInput)\n                return false\n            }\n\n            if (result[key] !== undefined) {\n                $.oc.flashMsg({text: 'Keys should be unique.', 'class': 'error', 'interval': 3})\n                this.focusAndMakeActive(keyInput)\n                return false\n            }\n\n            var validationResult = this.keyValidationSet.validate(key)\n            if (validationResult !== null) {\n                $.oc.flashMsg({text: validationResult, 'class': 'error', 'interval': 5})\n                return false\n            }\n\n            validationResult = this.valueValidationSet.validate(value)\n            if (validationResult !== null) {\n                $.oc.flashMsg({text: validationResult, 'class': 'error', 'interval': 5})\n                return false\n            }\n\n            result[key] = value\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, result)\n        this.setLinkText(link, result)\n    }\n\n    //\n    // Helpers\n    //\n\n    DictionaryEditor.prototype.getValueKeys = function(value) {\n        var result = []\n\n        for (var key in value) {\n            result.push(key)\n        }\n\n        return result\n    }\n\n    DictionaryEditor.prototype.getActiveRow = function() {\n        var activeCell = this.popup.querySelector('td.active')\n\n        if (!activeCell) {\n            return null\n        }\n\n        return activeCell.parentNode\n    }\n\n    DictionaryEditor.prototype.getTableBody = function() {\n        return this.popup.querySelector('table.inspector-dictionary-table tbody')\n    }\n\n    DictionaryEditor.prototype.updateScrollpads = function() {\n        $('.control-scrollpad', this.popup).scrollpad('update')\n    }\n\n    DictionaryEditor.prototype.focusFirstInput = function() {\n        var input = this.popup.querySelector('td input')\n\n        if (input) {\n            input.focus()\n            this.setActiveCell(input)\n        }\n    }\n\n    DictionaryEditor.prototype.getEditorCell = function(cell) {\n        return cell.parentNode.parentNode // cell / div / td\n    }\n\n    DictionaryEditor.prototype.getEditorRow = function(cell) {\n        return cell.parentNode.parentNode.parentNode // cell / div / td / tr\n    }\n\n    DictionaryEditor.prototype.focusAndMakeActive = function(input) {\n        input.focus()\n        this.setActiveCell(input)\n    }\n\n    DictionaryEditor.prototype.getRowInputByIndex = function(row, index) {\n        return row.cells[index].querySelector('input')\n    }\n\n    //\n    // Navigation\n    //\n\n    DictionaryEditor.prototype.navigateDown = function(ev) {\n        var cell = this.getEditorCell(ev.currentTarget),\n            row = this.getEditorRow(ev.currentTarget),\n            nextRow = row.nextElementSibling\n\n        if (!nextRow) {\n            return\n        }\n\n        var newActiveEditor = nextRow.cells[cell.cellIndex].querySelector('input')\n\n        this.focusAndMakeActive(newActiveEditor)\n    }\n\n    DictionaryEditor.prototype.navigateUp = function(ev) {\n        var cell = this.getEditorCell(ev.currentTarget),\n            row = this.getEditorRow(ev.currentTarget),\n            prevRow = row.previousElementSibling\n\n        if (!prevRow) {\n            return\n        }\n\n        var newActiveEditor = prevRow.cells[cell.cellIndex].querySelector('input')\n\n        this.focusAndMakeActive(newActiveEditor)\n    }\n\n    //\n    // Validation\n    //\n\n    DictionaryEditor.prototype.initValidators = function() {\n        this.keyValidationSet = new $.oc.inspector.validationSet({\n            validation: this.propertyDefinition.validationKey\n        }, this.propertyDefinition.property+'.validationKey')\n\n        this.valueValidationSet = new $.oc.inspector.validationSet({\n            validation: this.propertyDefinition.validationValue\n        }, this.propertyDefinition.property+'.validationValue')\n    }\n\n    DictionaryEditor.prototype.disposeValidators = function() {\n        this.keyValidationSet.dispose()\n        this.valueValidationSet.dispose()\n    }\n\n    //\n    // Event handlers\n    //\n\n    DictionaryEditor.prototype.onPopupShown = function(ev, link, popup) {\n        BaseProto.onPopupShown.call(this,ev, link, popup )\n\n        popup.on('focus.inspector', 'td input', this.proxy(this.onFocus))\n        popup.on('keydown.inspector', 'td input', this.proxy(this.onKeyDown))\n        popup.on('click.inspector', '[data-cmd]', this.proxy(this.onCommand))\n    }\n\n    DictionaryEditor.prototype.onPopupHidden = function(ev, link, popup) {\n        popup.off('.inspector', 'td input')\n        popup.off('.inspector', '[data-cmd]', this.proxy(this.onCommand))\n\n        BaseProto.onPopupHidden.call(this, ev, link, popup)\n    }\n\n    DictionaryEditor.prototype.onFocus = function(ev) {\n        this.setActiveCell(ev.currentTarget)\n    }\n\n    DictionaryEditor.prototype.onCommand = function(ev) {\n        var command = ev.currentTarget.getAttribute('data-cmd')\n\n        switch (command) {\n            case 'create-item' :\n                this.createItem()\n            break;\n            case 'delete-item' :\n                this.deleteItem()\n            break;\n        }\n    }\n\n    DictionaryEditor.prototype.onKeyDown = function(ev) {\n        if (ev.key === 'ArrowDown') {\n            return this.navigateDown(ev)\n        }\n        else if (ev.key === 'ArrowUp') {\n            return this.navigateUp(ev)\n        }\n    }\n\n    $.oc.inspector.propertyEditors.dictionary = DictionaryEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.dropdown.js",
    "content": "/*\n * Inspector checkbox dropdown class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var DropdownEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.indicatorContainer = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    DropdownEditor.prototype = Object.create(BaseProto)\n    DropdownEditor.prototype.constructor = Base\n\n    DropdownEditor.prototype.init = function() {\n        this.dynamicOptions = this.propertyDefinition.options ? false : true\n        this.initialization = false\n\n        BaseProto.init.call(this)\n    }\n\n    DropdownEditor.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.destroyCustomSelect()\n\n        this.indicatorContainer = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    //\n    // Building\n    //\n\n    DropdownEditor.prototype.build = function() {\n        var select = document.createElement('select')\n\n        $.oc.foundation.element.addClass(this.containerCell, 'dropdown')\n        $.oc.foundation.element.addClass(select, 'custom-select')\n\n        if (!this.dynamicOptions) {\n            this.loadStaticOptions(select)\n        }\n\n        this.containerCell.appendChild(select)\n\n        this.initCustomSelect()\n\n        if (this.dynamicOptions) {\n           this.loadDynamicOptions(true)\n        }\n    }\n\n    DropdownEditor.prototype.formatSelectOption = function(state) {\n        if (!state.id)\n            return state.text; // optgroup\n\n        var option = state.element,\n            iconClass = option.getAttribute('data-icon'),\n            imageSrc = option.getAttribute('data-image')\n\n        if (iconClass) {\n            return '<i class=\"select-icon '+iconClass+'\"></i> ' + state.text\n        }\n\n        if (imageSrc) {\n            return '<img class=\"select-image\" src=\"'+imageSrc+'\" alt=\"\" /> ' + state.text\n        }\n\n        return state.text\n    }\n\n    DropdownEditor.prototype.createOption = function(select, title, value) {\n        var option = document.createElement('option')\n\n        if (title !== null) {\n            if (!Array.isArray(title)) {\n                option.textContent = title\n            }\n            else {\n                if (title[1].indexOf('.') !== -1) {\n                    option.setAttribute('data-image', title[1])\n                }\n                else {\n                    option.setAttribute('data-icon', title[1])\n                }\n\n                option.textContent = title[0]\n            }\n        }\n\n        if (value !== null) {\n            option.value = value\n        }\n\n        select.appendChild(option)\n    }\n\n    DropdownEditor.prototype.createOptions = function(select, options) {\n        for (var value in options) {\n            this.createOption(select, options[value], value)\n        }\n    }\n\n    DropdownEditor.prototype.initCustomSelect = function() {\n        var select = this.getSelect()\n\n        var options = {\n            dropdownCssClass: 'ocInspectorDropdown'\n        }\n\n        if (this.propertyDefinition.emptyOption !== undefined) {\n            options.placeholder = this.propertyDefinition.emptyOption\n        }\n\n        if (this.propertyDefinition.placeholder !== undefined) {\n            options.placeholder = this.propertyDefinition.placeholder\n        }\n\n        options.templateResult = this.formatSelectOption\n        options.templateSelection = this.formatSelectOption\n        options.escapeMarkup = function(m) {\n            return m\n        }\n\n        $(select).select2(options)\n\n        if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) {\n            this.indicatorContainer = $('.select2-container', this.containerCell)\n            this.indicatorContainer.addClass('loading-indicator-container size-small')\n        }\n    }\n\n    DropdownEditor.prototype.createPlaceholder = function(select) {\n        var placeholder = this.propertyDefinition.placeholder || this.propertyDefinition.emptyOption\n\n        var isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0\n\n        if (placeholder !== undefined && !isTouchDevice) {\n            this.createOption(select, null, null)\n        }\n\n        if (placeholder !== undefined && isTouchDevice) {\n            this.createOption(select, placeholder, null)\n        }\n    }\n\n    //\n    // Helpers\n    //\n\n    DropdownEditor.prototype.getSelect = function() {\n        return this.containerCell.querySelector('select')\n    }\n\n    DropdownEditor.prototype.clearOptions = function(select) {\n        while (select.firstChild) {\n            select.removeChild(select.firstChild)\n        }\n    }\n\n    DropdownEditor.prototype.hasOptionValue = function(select, value) {\n        var options = select.children\n\n        for (var i = 0, len = options.length; i < len; i++) {\n            if (options[i].value == value) {\n                return true\n            }\n        }\n\n        return false\n    }\n\n    DropdownEditor.prototype.normalizeValue = function(value) {\n        if (!this.propertyDefinition.booleanValues) {\n            return value\n        }\n\n        var str = String(value)\n\n        if (str.length === 0) {\n            return ''\n        }\n\n        if (str === 'true') {\n            return true\n        }\n\n        return false\n    }\n\n    //\n    // Event handlers\n    //\n\n    DropdownEditor.prototype.registerHandlers = function() {\n        var select = this.getSelect()\n\n        $(select).on('change', this.proxy(this.onSelectionChange))\n    }\n\n    DropdownEditor.prototype.onSelectionChange = function() {\n        var select = this.getSelect()\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, this.normalizeValue(select.value), this.initialization)\n    }\n\n    DropdownEditor.prototype.onInspectorPropertyChanged = function(property) {\n        if (!this.propertyDefinition.depends || this.propertyDefinition.depends.indexOf(property) === -1) {\n            return\n        }\n\n        var dependencyValues = this.getDependencyValues()\n\n        if (this.prevDependencyValues === undefined || this.prevDependencyValues != dependencyValues) {\n            this.loadDynamicOptions()\n        }\n    }\n\n    DropdownEditor.prototype.onExternalPropertyEditorHidden = function() {\n        if (this.dynamicOptions) {\n            this.loadDynamicOptions(false)\n        }\n    }\n\n    //\n    // Editor API methods\n    //\n\n    DropdownEditor.prototype.updateDisplayedValue = function(value) {\n        var select = this.getSelect()\n\n        select.value = value\n    }\n\n    DropdownEditor.prototype.getUndefinedValue = function() {\n        // Return default value if the default value is defined\n        if (this.propertyDefinition.default !== undefined) {\n            return this.propertyDefinition.default\n        }\n\n        // Return undefined if there's a placeholder value\n        if (this.propertyDefinition.placeholder !== undefined) {\n            return undefined\n        }\n\n        // Otherwise - return the first value in the list\n        var select = this.getSelect()\n\n        if (select) {\n            return this.normalizeValue(select.value)\n        }\n\n        return undefined\n    }\n\n    DropdownEditor.prototype.isEmptyValue = function(value) {\n        if (this.propertyDefinition.booleanValues) {\n            if (value === '') {\n                return true\n            }\n\n            return false\n        }\n\n        return BaseProto.isEmptyValue.call(this, value)\n    }\n\n    //\n    // Disposing\n    //\n\n    DropdownEditor.prototype.destroyCustomSelect = function() {\n        var $select = $(this.getSelect())\n\n        if ($select.data('select2') != null) {\n            $select.select2('destroy')\n        }\n    }\n\n    DropdownEditor.prototype.unregisterHandlers = function() {\n        var select = this.getSelect()\n\n        $(select).off('change', this.proxy(this.onSelectionChange))\n    }\n\n    //\n    // Static options\n    //\n\n    DropdownEditor.prototype.loadStaticOptions = function(select) {\n        var value = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        this.createPlaceholder(select)\n\n        this.createOptions(select, this.propertyDefinition.options)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        select.value = value\n    }\n\n    //\n    // Dynamic options\n    //\n\n    DropdownEditor.prototype.loadDynamicOptions = function(initialization) {\n        var currentValue = this.inspector.getPropertyValue(this.propertyDefinition.property),\n            data = this.getRootSurface().getValues(),\n            self = this,\n            $form = $(this.getSelect()).closest('form'),\n            dependents = this.inspector.findDependentProperties(this.propertyDefinition.property)\n\n        if (currentValue === undefined) {\n            currentValue = this.propertyDefinition.default\n        }\n\n        var callback = function dropdownOptionsRequestDoneClosure(data) {\n            self.hideLoadingIndicator();\n            self.optionsRequestDone(data, currentValue, true);\n\n            if (dependents.length > 0 && self.inspector) {\n                for (var i in dependents) {\n                    var editor = self.inspector.findPropertyEditor(dependents[i])\n                    if (editor && typeof editor.onInspectorPropertyChanged === 'function') {\n                        editor.onInspectorPropertyChanged(self.propertyDefinition.property)\n                    }\n                }\n            }\n        }\n\n        if (this.propertyDefinition.depends) {\n            this.saveDependencyValues();\n        }\n\n        data['inspectorProperty'] = this.getPropertyPath();\n        data['inspectorClassName'] = this.inspector.options.inspectorClass;\n\n        this.showLoadingIndicator();\n\n        if (this.triggerGetOptions(data, callback) === false) {\n            return;\n        }\n\n        $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), {\n            data: data,\n            progressBar: false\n        })\n        .done(callback).always(this.proxy(this.hideLoadingIndicator));\n    }\n\n    DropdownEditor.prototype.triggerGetOptions = function(values, callback) {\n        var $inspectable = this.getInspectableElement()\n        if (!$inspectable) {\n            return true\n        }\n\n        var optionsEvent = $.Event('dropdownoptions.oc.inspector')\n\n        $inspectable.trigger(optionsEvent, [{\n            values: values,\n            callback: callback,\n            property: this.inspector.getPropertyPath(this.propertyDefinition.property),\n            propertyDefinition: this.propertyDefinition\n        }])\n\n        if (optionsEvent.isDefaultPrevented()) {\n            return false\n        }\n\n        return true\n    }\n\n    DropdownEditor.prototype.saveDependencyValues = function() {\n        this.prevDependencyValues = this.getDependencyValues()\n    }\n\n    DropdownEditor.prototype.getDependencyValues = function() {\n        var result = ''\n\n        for (var i = 0, len = this.propertyDefinition.depends.length; i < len; i++) {\n            var property = this.propertyDefinition.depends[i],\n                value = this.inspector.getPropertyValue(property)\n\n            if (value === undefined) {\n                value = '';\n            }\n\n            result += property + ':' + value + '-'\n        }\n\n        return result\n    }\n\n    DropdownEditor.prototype.showLoadingIndicator = function() {\n        if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) {\n            this.indicatorContainer.loadIndicator()\n        }\n    }\n\n    DropdownEditor.prototype.hideLoadingIndicator = function() {\n        if (this.isDisposed()) {\n            return\n        }\n\n        if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) {\n            this.indicatorContainer.loadIndicator('hide')\n            this.indicatorContainer.loadIndicator('destroy')\n        }\n    }\n\n    DropdownEditor.prototype.optionsRequestDone = function(data, currentValue, initialization) {\n        if (this.isDisposed()) {\n            // Handle the case when the asynchronous request finishes after\n            // the editor is disposed\n            return\n        }\n\n        var select = this.getSelect()\n\n        // Without destroying and recreating the custom select\n        // there could be detached DOM nodes.\n        this.destroyCustomSelect()\n        this.clearOptions(select)\n        this.initCustomSelect()\n\n        this.createPlaceholder(select)\n\n        if (data.options) {\n            for (var i = 0, len = data.options.length; i < len; i++) {\n               this.createOption(select, data.options[i].title, data.options[i].value)\n            }\n        }\n\n        if (this.hasOptionValue(select, currentValue)) {\n            select.value = currentValue\n        }\n        else {\n            select.selectedIndex = this.propertyDefinition.placeholder === undefined ? 0 : -1\n        }\n\n        this.initialization = initialization\n        $(select).trigger('change')\n        this.initialization = false\n    }\n\n    $.oc.inspector.propertyEditors.dropdown = DropdownEditor\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.object.js",
    "content": "/*\n * Inspector object editor class.\n *\n * This class uses other editors.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var ObjectEditor = function(inspector, propertyDefinition, containerCell, group) {\n        if (propertyDefinition.properties === undefined) {\n            this.throwError('The properties property should be specified in the object editor configuration.')\n        }\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    ObjectEditor.prototype = Object.create(BaseProto)\n    ObjectEditor.prototype.constructor = Base\n\n    ObjectEditor.prototype.init = function() {\n        this.initControlGroup()\n\n        BaseProto.init.call(this)\n    }\n\n    //\n    // Building\n    //\n\n    ObjectEditor.prototype.build = function() {\n        var currentRow = this.containerCell.parentNode,\n            inspectorContainer = document.createElement('div'),\n            options = {\n                enableExternalParameterEditor: false,\n                onChange: this.proxy(this.onInspectorDataChange),\n                inspectorClass: this.inspector.options.inspectorClass\n            },\n            values = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (values === undefined) {\n            values = {}\n        }\n\n        this.childInspector = new $.oc.inspector.surface(inspectorContainer, \n            this.propertyDefinition.properties, \n            values, \n            this.inspector.getInspectorUniqueId() + '-' + this.propertyDefinition.property, \n            options,\n            this.inspector,\n            this.group,\n            this.propertyDefinition.property)\n\n        this.inspector.mergeChildSurface(this.childInspector, currentRow)\n    }\n\n    //\n    // Helpers\n    //\n\n    ObjectEditor.prototype.cleanUpValue = function(value) {\n        if (value === undefined || typeof value !== 'object') {\n            return undefined\n        }\n\n        if (this.propertyDefinition.ignoreIfPropertyEmpty === undefined) {\n            return value\n        }\n\n        return this.getValueOrRemove(value)\n    }\n\n    ObjectEditor.prototype.getValueOrRemove = function(value) {\n        if (this.propertyDefinition.ignoreIfPropertyEmpty === undefined) {\n            return value\n        }\n\n        var targetProperty = this.propertyDefinition.ignoreIfPropertyEmpty,\n            targetValue = value[targetProperty]\n\n        if (this.isEmptyValue(targetValue)) {\n            return $.oc.inspector.removedProperty\n        }\n\n        return value\n    }\n\n    //\n    // Editor API methods\n    //\n\n    ObjectEditor.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    ObjectEditor.prototype.isGroupedEditor = function() {\n        return true\n    }\n\n    ObjectEditor.prototype.getUndefinedValue = function() {\n        var result = {}\n\n        for (var i = 0, len = this.propertyDefinition.properties.length; i < len; i++) {\n            var propertyName = this.propertyDefinition.properties[i].property,\n                editor = this.childInspector.findPropertyEditor(propertyName)\n\n            if (editor) {\n                result[propertyName] = editor.getUndefinedValue()\n            }\n        }\n\n        return this.getValueOrRemove(result)\n    }\n\n    ObjectEditor.prototype.validate = function(silentMode) {\n        var values = this.childInspector.getValues()\n\n        if (this.cleanUpValue(values) === $.oc.inspector.removedProperty) {\n            // Ignore any validation rules if the object's required \n            // property is empty (ignoreIfPropertyEmpty)\n\n            return true\n        }\n\n        return this.childInspector.validate(silentMode)\n    }\n\n    //\n    // Event handlers\n    //\n\n    ObjectEditor.prototype.onInspectorDataChange = function(property, value) {\n        var values = this.childInspector.getValues()\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, this.cleanUpValue(values))\n    }\n\n    $.oc.inspector.propertyEditors.object = ObjectEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.objectlist.js",
    "content": "/*\n * Inspector object list editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var ObjectListEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.currentRowInspector = null\n        this.popup = null\n\n        if (propertyDefinition.titleProperty === undefined) {\n            throw new Error('The titleProperty property should be specified in the objectList editor configuration. Property: ' + propertyDefinition.property)\n        }\n\n        if (propertyDefinition.itemProperties === undefined) {\n            throw new Error('The itemProperties property should be specified in the objectList editor configuration. Property: ' + propertyDefinition.property)\n        }\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    ObjectListEditor.prototype = Object.create(BaseProto)\n    ObjectListEditor.prototype.constructor = Base\n\n    ObjectListEditor.prototype.init = function() {\n        if (this.isKeyValueMode()) {\n            var keyProperty = this.getKeyProperty()\n\n            if (!keyProperty) {\n                throw new Error('Object list key property ' + this.propertyDefinition.keyProperty\n                    + ' is not defined in itemProperties. Property: ' + this.propertyDefinition.property)\n            }\n        }\n\n        BaseProto.init.call(this)\n    }\n\n    ObjectListEditor.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.removeControls()\n\n        this.currentRowInspector = null\n        this.popup = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    ObjectListEditor.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    //\n    // Building\n    //\n\n    ObjectListEditor.prototype.build = function() {\n        var link = document.createElement('a')\n\n        $.oc.foundation.element.addClass(link, 'trigger')\n        link.setAttribute('href', '#')\n        this.setLinkText(link)\n\n        $.oc.foundation.element.addClass(this.containerCell, 'trigger-cell')\n\n        this.containerCell.appendChild(link)\n    }\n\n    ObjectListEditor.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined && value !== null ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === null) {\n            value = undefined\n        }\n\n        if (value === undefined) {\n            var placeholder = this.propertyDefinition.placeholder\n\n            if (placeholder !== undefined) {\n                $.oc.foundation.element.addClass(link, 'cell-placeholder')\n                link.textContent = placeholder\n            }\n            else {\n                link.textContent = 'Items: 0'\n            }\n        }\n        else {\n            var itemCount = 0\n\n            if (!this.isKeyValueMode()) {\n                if (value.length === undefined) {\n                    throw new Error('Object list value should be an array. Property: ' + this.propertyDefinition.property)\n                }\n\n                itemCount = value.length\n            }\n            else {\n                if (typeof value !== 'object') {\n                    throw new Error('Object list value should be an object. Property: ' + this.propertyDefinition.property)\n                }\n\n                itemCount = this.getValueKeys(value).length\n            }\n\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n            link.textContent = 'Items: ' + itemCount\n        }\n    }\n\n    ObjectListEditor.prototype.getPopupContent = function() {\n        return '<form>                                                                                     \\\n                <div class=\"modal-header\">                                                                 \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                              \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                 \\\n                </div>                                                                                     \\\n                <div>                                                                                      \\\n                    <div class=\"layout inspector-columns-editor\">                                          \\\n                        <div class=\"layout-row\">                                                           \\\n                            <div class=\"layout-cell items-column\">                                         \\\n                                <div class=\"layout-relative\">                                              \\\n                                    <div class=\"layout\">                                                   \\\n                                        <div class=\"layout-row min-size\">                                  \\\n                                            <div class=\"control-toolbar toolbar-padded\">                   \\\n                                                <div class=\"toolbar-item\">                                 \\\n                                                    <div class=\"btn-group\">                                \\\n                                                        <button type=\"button\" class=\"btn btn-primary       \\\n                                                            oc-icon-plus\"                                  \\\n                                                            data-cmd=\"create-item\">'+oc.lang.get('inspector.add')+'</button> \\\n                                                        <button type=\"button\" class=\"btn btn-default       \\\n                                                            empty oc-icon-trash\"                         \\\n                                                            data-cmd=\"delete-item\"></button>               \\\n                                                    </div>                                                 \\\n                                                </div>                                                     \\\n                                            </div>                                                         \\\n                                        </div>                                                             \\\n                                        <div class=\"layout-row\">                                           \\\n                                            <div class=\"layout-cell\">                                      \\\n                                                <div class=\"layout-relative\">                              \\\n                                                    <div class=\"layout-absolute\">                          \\\n                                                        <div class=\"control-scrollpad\"                     \\\n                                                            data-control=\"scrollpad\">                      \\\n                                                            <div class=\"scroll-wrapper\">                   \\\n                                                                <table class=\"table data                   \\\n                                                                    no-offset-bottom                       \\\n                                                                    inspector-table-list\">                 \\\n                                                                </table>                                   \\\n                                                            </div>                                         \\\n                                                        </div>                                             \\\n                                                    </div>                                                 \\\n                                                </div>                                                     \\\n                                            </div>                                                         \\\n                                        </div>                                                             \\\n                                    </div>                                                                 \\\n                                </div>                                                                     \\\n                            </div>                                                                         \\\n                            <div class=\"layout-cell\">                                                      \\\n                                <div class=\"layout-relative\">                                              \\\n                                    <div class=\"layout-absolute\">                                          \\\n                                        <div class=\"control-scrollpad\" data-control=\"scrollpad\">           \\\n                                            <div class=\"scroll-wrapper inspector-wrapper\">                 \\\n                                                <div data-inspector-container>                             \\\n                                                </div>                                                     \\\n                                            </div>                                                         \\\n                                        </div>                                                             \\\n                                    </div>                                                                 \\\n                                </div>                                                                     \\\n                            </div>                                                                         \\\n                        </div>                                                                             \\\n                    </div>                                                                                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-footer\">                                                                 \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button> \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button> \\\n                </div>                                                                                     \\\n            </form>';\n    }\n\n    ObjectListEditor.prototype.buildPopupContents = function(popup) {\n        this.buildItemsTable(popup)\n    }\n\n    ObjectListEditor.prototype.buildItemsTable = function(popup) {\n        var table = popup.querySelector('table'),\n            tbody = document.createElement('tbody'),\n            items = this.inspector.getPropertyValue(this.propertyDefinition.property),\n            titleProperty = this.propertyDefinition.titleProperty\n\n        if (items === undefined || this.getValueKeys(items).length === 0) {\n            var row = this.buildEmptyRow()\n\n            tbody.appendChild(row)\n        }\n        else {\n            var firstRow = undefined\n\n            for (var key in items) {\n                var item = items[key],\n                    itemInspectorValue = this.addKeyProperty(key, item),\n                    itemText = item[titleProperty],\n                    row = this.buildTableRow(itemText, 'rowlink')\n\n                row.setAttribute('data-inspector-values', JSON.stringify(itemInspectorValue))\n                tbody.appendChild(row)\n\n                if (firstRow === undefined) {\n                    firstRow = row\n                }\n            }\n        }\n\n        table.appendChild(tbody)\n\n        if (firstRow !== undefined) {\n            this.selectRow(firstRow, true)\n        }\n\n        this.updateScrollpads()\n    }\n\n    ObjectListEditor.prototype.buildEmptyRow = function() {\n        return this.buildTableRow('No items found', 'no-data', 'nolink')\n    }\n\n    ObjectListEditor.prototype.removeEmptyRow = function() {\n        var tbody = this.getTableBody(),\n            row = tbody.querySelector('tr.no-data')\n\n        if (row) {\n            tbody.removeChild(row)\n        }\n    }\n\n    ObjectListEditor.prototype.buildTableRow = function(text, rowClass, cellClass) {\n        var row = document.createElement('tr'),\n            cell = document.createElement('td')\n\n        cell.textContent = text\n\n        if (rowClass !== undefined) {\n            $.oc.foundation.element.addClass(row, rowClass)\n        }\n\n        if (cellClass !== undefined) {\n            $.oc.foundation.element.addClass(cell, cellClass)\n        }\n\n        row.appendChild(cell)\n        return row\n    }\n\n    ObjectListEditor.prototype.updateScrollpads = function() {\n        $('.control-scrollpad', this.popup).scrollpad('update')\n    }\n\n    //\n    // Built-in Inspector management\n    //\n\n    ObjectListEditor.prototype.selectRow = function(row, forceSelect) {\n        var tbody = row.parentNode,\n            inspectorContainer = this.getInspectorContainer(),\n            selectedRow = this.getSelectedRow()\n\n        if (selectedRow === row && !forceSelect) {\n            return\n        }\n\n        if (selectedRow) {\n            if (!this.validateKeyValue()) {\n                return\n            }\n\n            if (this.currentRowInspector) {\n                if (!this.currentRowInspector.validate()) {\n                    return\n                }\n            }\n\n            this.applyDataToRow(selectedRow)\n            $.oc.foundation.element.removeClass(selectedRow, 'active')\n        }\n\n        this.disposeInspector()\n\n        $.oc.foundation.element.addClass(row, 'active')\n\n        this.createInspectorForRow(row, inspectorContainer)\n    }\n\n    ObjectListEditor.prototype.createInspectorForRow = function(row, inspectorContainer) {\n        var dataStr = row.getAttribute('data-inspector-values')\n\n        if (dataStr === undefined || typeof dataStr !== 'string') {\n            throw new Error('Values not found for the selected row.')\n        }\n\n        var properties = this.propertyDefinition.itemProperties,\n            values = JSON.parse(dataStr),\n            options = {\n                enableExternalParameterEditor: false,\n                onChange: this.proxy(this.onInspectorDataChange),\n                inspectorClass: this.inspector.options.inspectorClass\n            }\n\n        this.currentRowInspector = new $.oc.inspector.surface(inspectorContainer, properties, values,\n            $.oc.inspector.helpers.generateElementUniqueId(inspectorContainer), options)\n    }\n\n    ObjectListEditor.prototype.disposeInspector = function() {\n        $.oc.foundation.controlUtils.disposeControls(this.popup.querySelector('[data-inspector-container]'))\n        this.currentRowInspector = null\n    }\n\n    ObjectListEditor.prototype.applyDataToRow = function(row) {\n        if (this.currentRowInspector === null) {\n            return\n        }\n\n        var data = this.currentRowInspector.getValues()\n        row.setAttribute('data-inspector-values', JSON.stringify(data))\n    }\n\n    ObjectListEditor.prototype.updateRowText = function(property, value) {\n        var selectedRow = this.getSelectedRow()\n\n        if (!selectedRow) {\n            throw new Exception('A row is not found for the updated data')\n        }\n\n        if (property !== this.propertyDefinition.titleProperty) {\n            return\n        }\n\n        value = $.trim(value)\n\n        if (value.length === 0) {\n            value = '[No title]'\n            $.oc.foundation.element.addClass(selectedRow, 'disabled')\n        }\n        else {\n            $.oc.foundation.element.removeClass(selectedRow, 'disabled')\n        }\n\n        selectedRow.firstChild.textContent = value\n    }\n\n    ObjectListEditor.prototype.getSelectedRow = function() {\n        if (!this.popup) {\n            throw new Error('Trying to get selected row without a popup reference.')\n        }\n\n        var rows = this.getTableBody().children\n\n        for (var i = 0, len = rows.length; i < len; i++) {\n            if ($.oc.foundation.element.hasClass(rows[i], 'active')) {\n                return rows[i]\n            }\n        }\n\n        return null\n    }\n\n    ObjectListEditor.prototype.createItem = function() {\n        var selectedRow = this.getSelectedRow()\n\n        if (selectedRow) {\n            if (!this.validateKeyValue()) {\n                return\n            }\n\n            if (this.currentRowInspector) {\n                if (!this.currentRowInspector.validate()) {\n                    return\n                }\n            }\n\n            this.applyDataToRow(selectedRow)\n            $.oc.foundation.element.removeClass(selectedRow, 'active')\n        }\n\n        this.disposeInspector()\n\n        var title = 'New item',\n            row = this.buildTableRow(title, 'rowlink active'),\n            tbody = this.getTableBody(),\n            data = {}\n\n        data[this.propertyDefinition.titleProperty] = title\n\n        row.setAttribute('data-inspector-values', JSON.stringify(data))\n        tbody.appendChild(row)\n\n        this.selectRow(row, true)\n\n        this.removeEmptyRow()\n        this.updateScrollpads()\n    }\n\n    ObjectListEditor.prototype.deleteItem = function() {\n        var selectedRow = this.getSelectedRow()\n\n        if (!selectedRow) {\n            return\n        }\n\n        var nextRow = selectedRow.nextElementSibling,\n            prevRow = selectedRow.previousElementSibling,\n            tbody = this.getTableBody()\n\n        this.disposeInspector()\n        tbody.removeChild(selectedRow)\n\n        var newSelectedRow = nextRow ? nextRow : prevRow\n\n        if (newSelectedRow) {\n            this.selectRow(newSelectedRow)\n        }\n        else {\n            tbody.appendChild(this.buildEmptyRow())\n        }\n\n        this.updateScrollpads()\n    }\n\n    ObjectListEditor.prototype.applyDataToParentInspector = function() {\n        var selectedRow = this.getSelectedRow(),\n            tbody = this.getTableBody(),\n            dataRows = tbody.querySelectorAll('tr[data-inspector-values]'),\n            link = this.getLink(),\n            result = this.getEmptyValue()\n\n        if (selectedRow) {\n            if (!this.validateKeyValue()) {\n                return\n            }\n\n            if (this.currentRowInspector) {\n                if (!this.currentRowInspector.validate()) {\n                    return\n                }\n            }\n\n            this.applyDataToRow(selectedRow)\n        }\n\n        for (var i = 0, len = dataRows.length; i < len; i++) {\n            var dataRow = dataRows[i],\n                rowData = JSON.parse(dataRow.getAttribute('data-inspector-values'))\n\n            if (!this.isKeyValueMode()) {\n                result.push(rowData)\n            }\n            else {\n                var rowKey = rowData[this.propertyDefinition.keyProperty]\n\n                result[rowKey] = this.removeKeyProperty(rowData)\n            }\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, result)\n        this.setLinkText(link, result)\n\n        $(link).popup('hide')\n        return false\n    }\n\n    ObjectListEditor.prototype.validateKeyValue = function() {\n        if (!this.isKeyValueMode()) {\n            return true\n        }\n\n        if (this.currentRowInspector === null) {\n            return true\n        }\n\n        var data = this.currentRowInspector.getValues(),\n            keyProperty = this.propertyDefinition.keyProperty\n\n        if (data[keyProperty] === undefined) {\n            throw new Error('Key property ' + keyProperty + ' is not found in the Inspector data. Property: ' + this.propertyDefinition.property)\n        }\n\n        var keyPropertyValue = data[keyProperty],\n            keyPropertyTitle = this.getKeyProperty().title\n\n        if (typeof keyPropertyValue !== 'string') {\n            throw new Error('Key property (' + keyProperty + ') value should be a string. Property: ' + this.propertyDefinition.property)\n        }\n\n        if ($.trim(keyPropertyValue).length === 0) {\n            $.oc.flashMsg({text: 'The value of key property ' + keyPropertyTitle + ' cannot be empty.', 'class': 'error', 'interval': 3})\n            return false\n        }\n\n        var selectedRow = this.getSelectedRow(),\n            tbody = this.getTableBody(),\n            dataRows = tbody.querySelectorAll('tr[data-inspector-values]')\n\n        for (var i = 0, len = dataRows.length; i < len; i++) {\n            var dataRow = dataRows[i],\n                rowData = JSON.parse(dataRow.getAttribute('data-inspector-values'))\n\n            if (selectedRow == dataRow) {\n                continue\n            }\n\n            if (rowData[keyProperty] == keyPropertyValue) {\n                $.oc.flashMsg({text: 'The value of key property ' + keyPropertyTitle + ' should be unique.', 'class': 'error', 'interval': 3})\n                return false\n            }\n        }\n\n        return true\n    }\n\n    //\n    // Helpers\n    //\n\n    ObjectListEditor.prototype.getLink = function() {\n        return this.containerCell.querySelector('a.trigger')\n    }\n\n    ObjectListEditor.prototype.getPopupFormElement = function() {\n        var form = this.popup.querySelector('form')\n\n        if (!form) {\n            this.throwError('Cannot find form element in the popup window.')\n        }\n\n        return form\n    }\n\n    ObjectListEditor.prototype.getInspectorContainer = function() {\n        return this.popup.querySelector('div[data-inspector-container]')\n    }\n\n    ObjectListEditor.prototype.getTableBody = function() {\n        return this.popup.querySelector('table.inspector-table-list tbody')\n    }\n\n    ObjectListEditor.prototype.isKeyValueMode = function() {\n        return this.propertyDefinition.keyProperty !== undefined\n    }\n\n    ObjectListEditor.prototype.getKeyProperty = function() {\n        for (var i = 0, len = this.propertyDefinition.itemProperties.length; i < len; i++) {\n            var property = this.propertyDefinition.itemProperties[i]\n\n            if (property.property == this.propertyDefinition.keyProperty) {\n                return property\n            }\n        }\n    }\n\n    ObjectListEditor.prototype.getValueKeys = function(value) {\n        var result = []\n\n        for (var key in value) {\n            result.push(key)\n        }\n\n        return result\n    }\n\n    ObjectListEditor.prototype.addKeyProperty = function(key, value) {\n        if (!this.isKeyValueMode()) {\n            return value\n        }\n\n        value[this.propertyDefinition.keyProperty] = key\n\n        return value\n    }\n\n    ObjectListEditor.prototype.removeKeyProperty = function(value) {\n        if (!this.isKeyValueMode()) {\n            return value\n        }\n\n        var result = value\n\n        if (result[this.propertyDefinition.keyProperty] !== undefined) {\n            delete result[this.propertyDefinition.keyProperty]\n        }\n\n        return result\n    }\n\n    ObjectListEditor.prototype.getEmptyValue = function() {\n        if (this.isKeyValueMode()) {\n            return {}\n        }\n        else {\n            return []\n        }\n    }\n\n    //\n    // Event handlers\n    //\n\n    ObjectListEditor.prototype.registerHandlers = function() {\n        var link = this.getLink(),\n            $link = $(link)\n\n        link.addEventListener('click', this.proxy(this.onTriggerClick))\n        $link.on('shown.oc.popup', this.proxy(this.onPopupShown))\n        $link.on('hidden.oc.popup', this.proxy(this.onPopupHidden))\n    }\n\n    ObjectListEditor.prototype.unregisterHandlers = function() {\n        var link = this.getLink(),\n            $link = $(link)\n\n        link.removeEventListener('click', this.proxy(this.onTriggerClick))\n        $link.off('shown.oc.popup', this.proxy(this.onPopupShown))\n        $link.off('hidden.oc.popup', this.proxy(this.onPopupHidden))\n    }\n\n    ObjectListEditor.prototype.onTriggerClick = function(ev) {\n        $.oc.foundation.event.stop(ev)\n\n        var content = this.getPopupContent()\n\n        content = content.replace('{{property}}', this.propertyDefinition.title)\n\n        $(ev.target).popup({\n            content: content\n        })\n\n        return false\n    }\n\n    ObjectListEditor.prototype.onPopupShown = function(ev, link, popup) {\n        $(popup).on('submit.inspector', 'form', this.proxy(this.onSubmit))\n        $(popup).on('click', 'tr.rowlink', this.proxy(this.onRowClick))\n        $(popup).on('click.inspector', '[data-cmd]', this.proxy(this.onCommand))\n\n        this.popup = popup.get(0)\n\n        this.buildPopupContents(this.popup)\n        this.getRootSurface().popupDisplayed()\n    }\n\n    ObjectListEditor.prototype.onPopupHidden = function(ev, link, popup) {\n        $(popup).off('.inspector', this.proxy(this.onSubmit))\n        $(popup).off('click', 'tr.rowlink', this.proxy(this.onRowClick))\n        $(popup).off('click.inspector', '[data-cmd]', this.proxy(this.onCommand))\n\n        this.disposeInspector()\n        $.oc.foundation.controlUtils.disposeControls(this.popup)\n\n        this.popup = null\n        this.getRootSurface().popupHidden()\n    }\n\n    ObjectListEditor.prototype.onSubmit = function(ev) {\n        this.applyDataToParentInspector()\n\n        ev.preventDefault()\n        return false\n    }\n\n    ObjectListEditor.prototype.onRowClick = function(ev) {\n        this.selectRow(ev.currentTarget)\n    }\n\n    ObjectListEditor.prototype.onInspectorDataChange = function(property, value) {\n        this.updateRowText(property, value)\n    }\n\n    ObjectListEditor.prototype.onCommand = function(ev) {\n        var command = ev.currentTarget.getAttribute('data-cmd')\n\n        switch (command) {\n            case 'create-item' :\n                this.createItem()\n            break;\n            case 'delete-item' :\n                this.deleteItem()\n            break;\n        }\n    }\n\n    //\n    // Disposing\n    //\n\n    ObjectListEditor.prototype.removeControls = function() {\n        if (this.popup) {\n            this.disposeInspector(this.popup)\n        }\n    }\n\n    $.oc.inspector.propertyEditors.objectList = ObjectListEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.popupbase.js",
    "content": "/*\n * Base class for Inspector editors that create popups.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var PopupBase = function(inspector, propertyDefinition, containerCell, group) {\n        this.popup = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    PopupBase.prototype = Object.create(BaseProto)\n    PopupBase.prototype.constructor = Base\n\n    PopupBase.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.popup = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    PopupBase.prototype.build = function() {\n        var link = document.createElement('a')\n\n        $.oc.foundation.element.addClass(link, 'trigger')\n        link.setAttribute('href', '#')\n        this.setLinkText(link)\n\n        $.oc.foundation.element.addClass(this.containerCell, 'trigger-cell')\n\n        this.containerCell.appendChild(link)\n    }\n\n    PopupBase.prototype.setLinkText = function(link, value) {\n    }\n\n    PopupBase.prototype.getPopupContent = function() {\n        return '<form>                                                                                     \\\n                <div class=\"modal-header\">                                                                 \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                              \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-body\">                                                                   \\\n                    <div class=\"form-group\">                                                               \\\n                    </div>                                                                                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-footer\">                                                                 \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button> \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button>  \\\n                </div>                                                                                     \\\n            </form>'\n    }\n\n    PopupBase.prototype.updateDisplayedValue = function(value) {\n        this.setLinkText(this.getLink(), value)\n    }\n\n    PopupBase.prototype.registerHandlers = function() {\n        var link = this.getLink(),\n            $link = $(link)\n\n        link.addEventListener('click', this.proxy(this.onTriggerClick))\n        $link.on('shown.oc.popup', this.proxy(this.onPopupShown))\n        $link.on('hidden.oc.popup', this.proxy(this.onPopupHidden))\n    }\n\n    PopupBase.prototype.unregisterHandlers = function() {\n        var link = this.getLink(),\n            $link = $(link)\n\n        link.removeEventListener('click', this.proxy(this.onTriggerClick))\n        $link.off('shown.oc.popup', this.proxy(this.onPopupShown))\n        $link.off('hidden.oc.popup', this.proxy(this.onPopupHidden))\n    }\n\n    PopupBase.prototype.getLink = function() {\n        return this.containerCell.querySelector('a.trigger')\n    }\n\n    PopupBase.prototype.configurePopup = function(popup) {\n    }\n\n    PopupBase.prototype.handleSubmit = function($form) {\n    }\n\n    PopupBase.prototype.hidePopup = function() {\n        $(this.getLink()).popup('hide')\n    }\n\n    PopupBase.prototype.onTriggerClick = function(ev) {\n        $.oc.foundation.event.stop(ev)\n\n        var content = this.getPopupContent()\n\n        content = content.replace('{{property}}', this.propertyDefinition.title)\n\n        $(ev.target).popup({\n            content: content\n        })\n\n        return false\n    }\n\n    PopupBase.prototype.onPopupShown = function(ev, link, popup) {\n        $(popup).on('submit.inspector', 'form', this.proxy(this.onSubmit))\n\n        this.popup = popup.get(0)\n\n        this.configurePopup(popup)\n\n        this.getRootSurface().popupDisplayed()\n    }\n\n    PopupBase.prototype.onPopupHidden = function(ev, link, popup) {\n        $(popup).off('.inspector', 'form', this.proxy(this.onSubmit))\n        this.popup = null\n\n        this.getRootSurface().popupHidden()\n    }\n\n    PopupBase.prototype.onSubmit = function(ev) {\n        ev.preventDefault()\n\n        if (this.handleSubmit($(ev.target)) === false) {\n            return false\n        }\n\n        this.setLinkText(this.getLink())\n        this.hidePopup()\n        return false\n    }\n\n    $.oc.inspector.propertyEditors.popupBase = PopupBase\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.set.js",
    "content": "/*\n * Inspector set editor class.\n *\n * This class uses $.oc.inspector.propertyEditors.checkbox editor.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var SetEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.editors = []\n        this.loadedItems = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    SetEditor.prototype = Object.create(BaseProto)\n    SetEditor.prototype.constructor = Base\n\n    SetEditor.prototype.init = function() {\n        this.initControlGroup()\n\n        BaseProto.init.call(this)\n    }\n\n    SetEditor.prototype.dispose = function() {\n        this.disposeEditors()\n        this.disposeControls()\n\n        this.editors = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    //\n    // Building\n    //\n\n    SetEditor.prototype.build = function() {\n        var link = document.createElement('a')\n\n        $.oc.foundation.element.addClass(link, 'trigger')\n        link.setAttribute('href', '#')\n        this.setLinkText(link)\n\n        $.oc.foundation.element.addClass(this.containerCell, 'trigger-cell')\n\n        this.containerCell.appendChild(link)\n\n        if (this.propertyDefinition.items !== undefined) {\n            this.loadStaticItems()\n        }\n        else {\n            this.loadDynamicItems()\n        }\n    }\n\n    SetEditor.prototype.loadStaticItems = function() {\n        var itemArray = []\n\n        for (var itemValue in this.propertyDefinition.items) {\n            itemArray.push({\n                value: itemValue,\n                title: this.propertyDefinition.items[itemValue]\n            })\n        }\n\n        for (var i = itemArray.length-1; i >=0; i--) {\n            this.buildItemEditor(itemArray[i].value, itemArray[i].title)\n        }\n    }\n\n    SetEditor.prototype.setLinkText = function(link, value) {\n        var value = (value !== undefined && value !== null) ? value\n                : this.getNormalizedValue(),\n            text = '[ ]'\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        if (value !== undefined && value.length !== undefined && value.length > 0 && typeof value !== 'string') {\n            var textValues = []\n            for (var i = 0, len = value.length; i < len; i++) {\n                textValues.push(this.valueToText(value[i]))\n            }\n\n            text = '[' + textValues.join(', ') + ']'\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n        }\n        else {\n            text = this.propertyDefinition.placeholder\n\n            if ((typeof text === 'string' && text.length == 0) || text === undefined) {\n                text = '[ ]'\n            }\n            $.oc.foundation.element.addClass(link, 'cell-placeholder')\n        }\n\n        link.textContent = text\n    }\n\n    SetEditor.prototype.buildItemEditor = function(value, text) {\n        var property = {\n                title: text,\n                itemType: 'property',\n                groupIndex: this.group.getGroupIndex()\n            },\n            newRow = this.createGroupedRow(property),\n            currentRow = this.containerCell.parentNode,\n            tbody = this.containerCell.parentNode.parentNode, // row / tbody\n            cell = document.createElement('td')\n\n        this.buildCheckbox(cell, value, text)\n\n        newRow.appendChild(cell)\n        tbody.insertBefore(newRow, currentRow.nextSibling)\n    }\n\n    SetEditor.prototype.buildCheckbox = function(cell, value, title) {\n        var property = {\n                property: value,\n                title: title,\n                default: this.isCheckedByDefault(value)\n            },\n            editor = new $.oc.inspector.propertyEditors.checkbox(this, property, cell, this.group)\n\n        this.editors.push[editor]\n    }\n\n    SetEditor.prototype.isCheckedByDefault = function(value) {\n        if (!this.propertyDefinition.default) {\n            return false\n        }\n\n        return this.propertyDefinition.default.indexOf(value) > -1\n    }\n\n    //\n    // Dynamic items\n    //\n\n    SetEditor.prototype.showLoadingIndicator = function() {\n        $(this.getLink()).loadIndicator()\n    }\n\n    SetEditor.prototype.hideLoadingIndicator = function() {\n        if (this.isDisposed()) {\n            return\n        }\n\n        var $link = $(this.getLink())\n\n        $link.loadIndicator('hide')\n        $link.loadIndicator('destroy')\n    }\n\n    SetEditor.prototype.loadDynamicItems = function() {\n        var link = this.getLink(),\n            data = this.inspector.getValues(),\n            $form = $(link).closest('form');\n\n        $.oc.foundation.element.addClass(link, 'loading-indicator-container size-small');\n        this.showLoadingIndicator();\n\n        data['inspectorProperty'] = this.getPropertyPath();\n        data['inspectorClassName'] = this.inspector.options.inspectorClass;\n\n        $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), {\n            data: data,\n            progressBar: false\n        })\n        .done(this.proxy(this.itemsRequestDone))\n        .always(this.proxy(this.hideLoadingIndicator));\n    }\n\n    SetEditor.prototype.itemsRequestDone = function(data, currentValue, initialization) {\n        if (this.isDisposed()) {\n            // Handle the case when the asynchronous request finishes after\n            // the editor is disposed\n            return\n        }\n\n        this.loadedItems = {}\n\n        if (data.options) {\n            for (var i = data.options.length-1; i >= 0; i--) {\n                this.buildItemEditor(data.options[i].value, data.options[i].title)\n\n                this.loadedItems[data.options[i].value] = data.options[i].title\n            }\n        }\n\n        this.setLinkText(this.getLink())\n    }\n\n    //\n    // Helpers\n    //\n\n    SetEditor.prototype.getLink = function() {\n        return this.containerCell.querySelector('a.trigger')\n    }\n\n    SetEditor.prototype.getItemsSource = function() {\n        if (this.propertyDefinition.items !== undefined) {\n            return this.propertyDefinition.items\n        }\n\n        return this.loadedItems\n    }\n\n    SetEditor.prototype.valueToText = function(value) {\n        var source = this.getItemsSource()\n\n        if (!source) {\n            return value\n        }\n\n        for (var itemValue in source) {\n            if (itemValue == value) {\n                return source[itemValue]\n            }\n        }\n\n        return value\n    }\n\n    /*\n     * Removes items that don't exist in the defined items from\n     * the value.\n     */\n    SetEditor.prototype.cleanUpValue = function(value) {\n        if (!value) {\n            return value\n        }\n\n        var result = [],\n            source = this.getItemsSource()\n\n        for (var i = 0, len = value.length; i < len; i++) {\n            var currentValue = value[i]\n\n            if (source[currentValue] !== undefined) {\n                result.push(currentValue)\n            }\n        }\n\n        return result\n    }\n\n    SetEditor.prototype.getNormalizedValue = function() {\n        var value = this.inspector.getPropertyValue(this.propertyDefinition.property);\n\n        if (value === null) {\n            value = undefined;\n        }\n\n        if (value === undefined) {\n            return value;\n        }\n\n        if (value.length === undefined || typeof value === 'string') {\n            return undefined;\n        }\n\n        return value;\n    }\n\n    //\n    // Editor API methods\n    //\n\n    SetEditor.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    SetEditor.prototype.isGroupedEditor = function() {\n        return true\n    }\n\n    //\n    // Inspector API methods\n    //\n    // This editor creates checkbox editor and acts as a container Inspector\n    // for them. The methods in this section emulate and proxy some functionality\n    // of the Inspector.\n    //\n\n    SetEditor.prototype.getPropertyValue = function(checkboxValue) {\n        // When a checkbox requests the property value, we return\n        // TRUE if the checkbox value is listed in the current values of\n        // the set.\n        // For example, the available set items are [create, update], the\n        // current set value is [create] and checkboxValue is \"create\".\n        // The result of the method will be TRUE.\n\n        var value = this.getNormalizedValue();\n\n        if (value === undefined) {\n            return this.isCheckedByDefault(checkboxValue);\n        }\n\n        if (!value) {\n            return false;\n        }\n\n        return value.indexOf(checkboxValue) > -1;\n    }\n\n    SetEditor.prototype.setPropertyValue = function(checkboxValue, isChecked) {\n        // In this method the Set Editor mimics the Surface.\n        // It acts as a parent surface for the children checkboxes,\n        // watching changes in them and updating the link text.\n\n        var currentValue = this.getNormalizedValue()\n\n        if (currentValue === undefined) {\n            currentValue = this.propertyDefinition.default\n        }\n\n        if (!currentValue) {\n            currentValue = []\n        }\n\n        var resultValue = [],\n            items = this.getItemsSource()\n\n        for (var itemValue in items) {\n            if (itemValue !== checkboxValue) {\n                if (currentValue.indexOf(itemValue) !== -1) {\n                    resultValue.push(itemValue)\n                }\n            }\n            else {\n                if (isChecked) {\n                    resultValue.push(itemValue);\n                }\n            }\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, this.cleanUpValue(resultValue));\n        this.setLinkText(this.getLink());\n    }\n\n    SetEditor.prototype.generateSequencedId = function() {\n        return this.inspector.generateSequencedId()\n    }\n\n    //\n    // Disposing\n    //\n\n    SetEditor.prototype.disposeEditors = function() {\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i]\n\n            editor.dispose()\n        }\n    }\n\n    SetEditor.prototype.disposeControls = function() {\n        var link = this.getLink()\n\n        if (this.propertyDefinition.items === undefined) {\n            $(link).loadIndicator('destroy')\n        }\n\n        link.parentNode.removeChild(link)\n    }\n\n    $.oc.inspector.propertyEditors.set = SetEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.string.js",
    "content": "/*\n * Inspector string editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var StringEditor = function(inspector, propertyDefinition, containerCell, group) {\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    StringEditor.prototype = Object.create(BaseProto)\n    StringEditor.prototype.constructor = Base\n\n    StringEditor.prototype.dispose = function() {\n        this.unregisterHandlers()\n\n        BaseProto.dispose.call(this)\n    }\n\n    StringEditor.prototype.build = function() {\n        var editor = document.createElement('input'),\n            placeholder = this.propertyDefinition.placeholder !== undefined ? this.propertyDefinition.placeholder : '',\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        editor.setAttribute('type', 'text')\n        editor.setAttribute('class', 'string-editor')\n        editor.setAttribute('placeholder', placeholder)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        if (value === undefined) {\n            value = ''\n        }\n\n        editor.value = value\n\n        $.oc.foundation.element.addClass(this.containerCell, 'text')\n\n        this.containerCell.appendChild(editor)\n    }\n\n    StringEditor.prototype.updateDisplayedValue = function(value) {\n        this.getInput().value = value\n    }\n\n    StringEditor.prototype.getInput = function() {\n        return this.containerCell.querySelector('input');\n    }\n\n    StringEditor.prototype.focus = function() {\n        this.getInput().focus({ preventScroll: true });\n        this.onInputFocus();\n    }\n\n    StringEditor.prototype.registerHandlers = function() {\n        var input = this.getInput();\n\n        input.addEventListener('focus', this.proxy(this.onInputFocus));\n        input.addEventListener('keyup', this.proxy(this.onInputKeyUp));\n    }\n\n    StringEditor.prototype.unregisterHandlers = function() {\n        var input = this.getInput();\n\n        input.removeEventListener('focus', this.proxy(this.onInputFocus));\n        input.removeEventListener('keyup', this.proxy(this.onInputKeyUp));\n    }\n\n    StringEditor.prototype.onInputFocus = function(ev) {\n        this.inspector.makeCellActive(this.containerCell);\n    }\n\n    StringEditor.prototype.onInputKeyUp = function() {\n        var value = $.trim(this.getInput().value);\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, value);\n    }\n\n    StringEditor.prototype.onExternalPropertyEditorHidden = function() {\n        this.focus()\n    }\n\n    $.oc.inspector.propertyEditors.string = StringEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.stringlist.js",
    "content": "/*\n * Inspector string list editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.text,\n        BaseProto = Base.prototype\n\n    var StringListEditor = function(inspector, propertyDefinition, containerCell, group) {\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    StringListEditor.prototype = Object.create(BaseProto)\n    StringListEditor.prototype.constructor = Base\n\n    StringListEditor.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        this.checkValueType(value)\n\n        if (!value) {\n            value = this.propertyDefinition.placeholder\n            $.oc.foundation.element.addClass(link, 'cell-placeholder')\n\n            if (!value) {\n                value = '[]'\n            }\n\n            link.textContent = value\n        }\n        else {\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n\n            link.textContent = '[' + value.join(', ') + ']'\n        }\n    }\n\n    StringListEditor.prototype.checkValueType = function(value) {\n        if (value && Object.prototype.toString.call(value) !== '[object Array]') {\n            this.throwError('The string list value should be an array.')\n        }\n    }\n\n    StringListEditor.prototype.configurePopup = function(popup) {\n        var $textarea = $(popup).find('textarea'),\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (this.propertyDefinition.placeholder) {\n            $textarea.attr('placeholder', this.propertyDefinition.placeholder)\n        }\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        this.checkValueType(value)\n\n        if (value && value.length) {\n            $textarea.val(value.join('\\n'))\n        }\n\n        $textarea.focus()\n\n        this.configureComment(popup)\n    }\n\n    StringListEditor.prototype.handleSubmit = function($form) {\n        var $textarea = $form.find('textarea'),\n            link = this.getLink(),\n            value = $.trim($textarea.val()),\n            arrayValue = [],\n            resultValue = []\n\n        if (value.length) {\n            value = value.replace(/\\r\\n/g, '\\n')\n            arrayValue = value.split('\\n')\n\n            for (var i = 0, len = arrayValue.length; i < len; i++) {\n                var currentValue = $.trim(arrayValue[i])\n\n                if (currentValue.length > 0) {\n                    resultValue.push(currentValue)\n                }\n            }\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, resultValue)\n    }\n\n    $.oc.inspector.propertyEditors.stringList = StringListEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.stringlistautocomplete.js",
    "content": "/*\n * Inspector string list with autocompletion editor class.\n *\n * TODO: validation is not implemented in this editor. See the Dictionary editor for reference.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.popupBase,\n        BaseProto = Base.prototype\n\n    var StringListAutocomplete = function(inspector, propertyDefinition, containerCell, group) {\n        this.items = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    StringListAutocomplete.prototype = Object.create(BaseProto)\n    StringListAutocomplete.prototype.constructor = Base\n\n    StringListAutocomplete.prototype.dispose = function() {\n        BaseProto.dispose.call(this)\n    }\n\n    StringListAutocomplete.prototype.init = function() {\n        BaseProto.init.call(this)\n    }\n\n    StringListAutocomplete.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    StringListAutocomplete.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        this.checkValueType(value)\n\n        if (!value) {\n            value = this.propertyDefinition.placeholder\n            $.oc.foundation.element.addClass(link, 'cell-placeholder')\n\n            if (!value) {\n                value = '[]'\n            }\n\n            link.textContent = value\n        }\n        else {\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n\n            link.textContent = '[' + value.join(', ') + ']'\n        }\n    }\n\n    StringListAutocomplete.prototype.checkValueType = function(value) {\n        if (value && Object.prototype.toString.call(value) !== '[object Array]') {\n            this.throwError('The string list value should be an array.')\n        }\n    }\n\n    //\n    // Popup editor methods\n    //\n\n    StringListAutocomplete.prototype.getPopupContent = function() {\n        return '<form>                                                                                     \\\n                <div class=\"modal-header\">                                                                 \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                              \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-body\">                                                                   \\\n                    <div class=\"control-toolbar\">                                                          \\\n                        <div class=\"toolbar-item\">                                                         \\\n                            <div class=\"btn-group\">                                                        \\\n                                <button type=\"button\" class=\"btn btn-primary                               \\\n                                    oc-icon-plus\"                                                          \\\n                                    data-cmd=\"create-item\">'+oc.lang.get('inspector.add')+'</button>       \\\n                                <button type=\"button\" class=\"btn btn-default                               \\\n                                    empty oc-icon-trash\"                                                 \\\n                                    data-cmd=\"delete-item\"></button>                                       \\\n                            </div>                                                                         \\\n                        </div>                                                                             \\\n                    </div>                                                                                 \\\n                    <div class=\"form-group\">                                                               \\\n                        <div class=\"inspector-dictionary-container\">                                       \\\n                            <div class=\"values\">                                                           \\\n                                <div class=\"control-scrollpad\"                                             \\\n                                    data-control=\"scrollpad\">                                              \\\n                                    <div class=\"scroll-wrapper\">                                           \\\n                                        <table class=\"                                                     \\\n                                            no-offset-bottom                                               \\\n                                            inspector-dictionary-table\">                                   \\\n                                        </table>                                                           \\\n                                    </div>                                                                 \\\n                                </div>                                                                     \\\n                            </div>                                                                         \\\n                        </div>                                                                             \\\n                    </div>                                                                                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-footer\">                                                                 \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button> \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button>   \\\n                </div>                                                                                     \\\n                </form>'\n    }\n\n    StringListAutocomplete.prototype.configurePopup = function(popup) {\n        this.initAutocomplete()\n\n        this.buildItemsTable(popup.get(0))\n\n        this.focusFirstInput()\n    }\n\n    StringListAutocomplete.prototype.handleSubmit = function($form) {\n        return this.applyValues()\n    }\n\n    //\n    // Building and row management\n    //\n\n    StringListAutocomplete.prototype.buildItemsTable = function(popup) {\n        var table = popup.querySelector('table.inspector-dictionary-table'),\n            tbody = document.createElement('tbody'),\n            items = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (items === undefined) {\n            items = this.propertyDefinition.default\n        }\n\n        if (items === undefined || this.getValueKeys(items).length === 0) {\n            var row = this.buildEmptyRow()\n\n            tbody.appendChild(row)\n        }\n        else {\n            for (var key in items) {\n                var row = this.buildTableRow(items[key])\n\n                tbody.appendChild(row)\n            }\n        }\n\n        table.appendChild(tbody)\n        this.updateScrollpads()\n    }\n\n    StringListAutocomplete.prototype.buildTableRow = function(value) {\n        var row = document.createElement('tr'),\n            valueCell = document.createElement('td')\n\n        this.createInput(valueCell, value)\n\n        row.appendChild(valueCell)\n\n        return row\n    }\n\n    StringListAutocomplete.prototype.buildEmptyRow = function() {\n        return this.buildTableRow(null)\n    }\n\n    StringListAutocomplete.prototype.createInput = function(container, value) {\n        var input = document.createElement('input'),\n            controlContainer = document.createElement('div')\n\n        input.setAttribute('type', 'text')\n        input.setAttribute('class', 'form-control')\n        input.value = value\n\n        controlContainer.appendChild(input)\n        container.appendChild(controlContainer)\n    }\n\n    StringListAutocomplete.prototype.setActiveCell = function(input) {\n        var activeCells = this.popup.querySelectorAll('td.active')\n\n        for (var i = activeCells.length-1; i >= 0; i--) {\n            $.oc.foundation.element.removeClass(activeCells[i], 'active')\n        }\n\n        var activeCell = input.parentNode.parentNode // input / div / td\n        $.oc.foundation.element.addClass(activeCell, 'active')\n\n        this.buildAutoComplete(input)\n    }\n\n    StringListAutocomplete.prototype.createItem = function() {\n        var activeRow = this.getActiveRow(),\n            newRow = this.buildEmptyRow(),\n            tbody = this.getTableBody(),\n            nextSibling = activeRow ? activeRow.nextElementSibling : null\n\n        tbody.insertBefore(newRow, nextSibling)\n\n        this.focusAndMakeActive(newRow.querySelector('input'))\n        this.updateScrollpads()\n    }\n\n    StringListAutocomplete.prototype.deleteItem = function() {\n        var activeRow = this.getActiveRow(),\n            tbody = this.getTableBody()\n\n        if (!activeRow) {\n            return\n        }\n\n        var nextRow = activeRow.nextElementSibling,\n            prevRow = activeRow.previousElementSibling,\n            input = this.getRowInputByIndex(activeRow, 0)\n\n        if (input) {\n            this.removeAutocomplete(input)\n        }\n\n        tbody.removeChild(activeRow)\n\n        var newSelectedRow = nextRow ? nextRow : prevRow\n\n        if (!newSelectedRow) {\n            newSelectedRow = this.buildEmptyRow()\n            tbody.appendChild(newSelectedRow)\n        }\n\n        this.focusAndMakeActive(newSelectedRow.querySelector('input'))\n        this.updateScrollpads()\n    }\n\n    StringListAutocomplete.prototype.applyValues = function() {\n        var tbody = this.getTableBody(),\n            dataRows = tbody.querySelectorAll('tr'),\n            link = this.getLink(),\n            result = []\n\n        for (var i = 0, len = dataRows.length; i < len; i++) {\n            var dataRow = dataRows[i],\n                valueInput = this.getRowInputByIndex(dataRow, 0),\n                value = $.trim(valueInput.value)\n\n            if (value.length == 0) {\n                continue\n            }\n\n            result.push(value)\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, result)\n        this.setLinkText(link, result)\n    }\n\n    //\n    // Helpers\n    //\n\n    StringListAutocomplete.prototype.getValueKeys = function(value) {\n        var result = []\n\n        for (var key in value) {\n            result.push(key)\n        }\n\n        return result\n    }\n\n    StringListAutocomplete.prototype.getActiveRow = function() {\n        var activeCell = this.popup.querySelector('td.active')\n\n        if (!activeCell) {\n            return null\n        }\n\n        return activeCell.parentNode\n    }\n\n    StringListAutocomplete.prototype.getTableBody = function() {\n        return this.popup.querySelector('table.inspector-dictionary-table tbody')\n    }\n\n    StringListAutocomplete.prototype.updateScrollpads = function() {\n        $('.control-scrollpad', this.popup).scrollpad('update')\n    }\n\n    StringListAutocomplete.prototype.focusFirstInput = function() {\n        var input = this.popup.querySelector('td input')\n\n        if (input) {\n            input.focus()\n            this.setActiveCell(input)\n        }\n    }\n\n    StringListAutocomplete.prototype.getEditorCell = function(cell) {\n        return cell.parentNode.parentNode // cell / div / td\n    }\n\n    StringListAutocomplete.prototype.getEditorRow = function(cell) {\n        return cell.parentNode.parentNode.parentNode // cell / div / td / tr\n    }\n\n    StringListAutocomplete.prototype.focusAndMakeActive = function(input) {\n        input.focus()\n        this.setActiveCell(input)\n    }\n\n    StringListAutocomplete.prototype.getRowInputByIndex = function(row, index) {\n        return row.cells[index].querySelector('input')\n    }\n\n    //\n    // Navigation\n    //\n\n    StringListAutocomplete.prototype.navigateDown = function(ev) {\n        var cell = this.getEditorCell(ev.currentTarget),\n            row = this.getEditorRow(ev.currentTarget),\n            nextRow = row.nextElementSibling\n\n        if (!nextRow) {\n            return\n        }\n\n        var newActiveEditor = nextRow.cells[cell.cellIndex].querySelector('input')\n\n        this.focusAndMakeActive(newActiveEditor)\n    }\n\n    StringListAutocomplete.prototype.navigateUp = function(ev) {\n        var cell = this.getEditorCell(ev.currentTarget),\n            row = this.getEditorRow(ev.currentTarget),\n            prevRow = row.previousElementSibling\n\n        if (!prevRow) {\n            return\n        }\n\n        var newActiveEditor = prevRow.cells[cell.cellIndex].querySelector('input')\n\n        this.focusAndMakeActive(newActiveEditor)\n    }\n\n    //\n    // Autocomplete\n    //\n\n    StringListAutocomplete.prototype.initAutocomplete = function() {\n        if (this.propertyDefinition.items !== undefined) {\n            this.items = this.prepareItems(this.propertyDefinition.items)\n            this.initializeAutocompleteForCurrentInput()\n        }\n        else {\n            this.loadDynamicItems()\n        }\n    }\n\n    StringListAutocomplete.prototype.initializeAutocompleteForCurrentInput = function() {\n        var activeElement = document.activeElement\n\n        if (!activeElement) {\n            return\n        }\n\n        var inputs = this.popup.querySelectorAll('td input.form-control')\n\n        if (!inputs) {\n            return\n        }\n\n        for (var i=inputs.length-1; i>=0; i--) {\n            if (inputs[i] === activeElement) {\n                this.buildAutoComplete(inputs[i])\n                return\n            }\n        }\n    }\n\n    StringListAutocomplete.prototype.buildAutoComplete = function(input) {\n        if (this.items === null) {\n            return\n        }\n\n        $(input).autocomplete({\n            source: this.items,\n            matchWidth: true,\n            menu: '<ul class=\"autocomplete dropdown-menu inspector-autocomplete\"></ul>',\n            bodyContainer: true\n        })\n    }\n\n    StringListAutocomplete.prototype.removeAutocomplete = function(input) {\n        var $input = $(input)\n\n        if (!$input.data('autocomplete')) {\n            return\n        }\n\n        $input.autocomplete('destroy')\n    }\n\n    StringListAutocomplete.prototype.prepareItems = function(items) {\n        var result = {}\n\n        if (Array.isArray(items)) {\n            for (var i = 0, len = items.length; i < len; i++) {\n                result[items[i]] = items[i]\n            }\n        }\n        else {\n            result = items\n        }\n\n        return result\n    }\n\n    StringListAutocomplete.prototype.loadDynamicItems = function() {\n        if (this.isDisposed()) {\n            return;\n        }\n\n        var data = this.getRootSurface().getValues(),\n            $form = $(this.popup).find('form');\n\n        if (this.triggerGetItems(data) === false) {\n            return;\n        }\n\n        data['inspectorProperty'] = this.getPropertyPath();\n        data['inspectorClassName'] = this.inspector.options.inspectorClass;\n\n        $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), {\n            data: data,\n            progressBar: false\n        })\n        .done(this.proxy(this.itemsRequestDone));\n    }\n\n    StringListAutocomplete.prototype.triggerGetItems = function(values) {\n        var $inspectable = this.getInspectableElement()\n        if (!$inspectable) {\n            return true\n        }\n\n        var itemsEvent = $.Event('autocompleteitems.oc.inspector')\n\n        $inspectable.trigger(itemsEvent, [{\n            values: values,\n            callback: this.proxy(this.itemsRequestDone),\n            property: this.inspector.getPropertyPath(this.propertyDefinition.property),\n            propertyDefinition: this.propertyDefinition\n        }])\n\n        if (itemsEvent.isDefaultPrevented()) {\n            return false\n        }\n\n        return true\n    }\n\n    StringListAutocomplete.prototype.itemsRequestDone = function(data) {\n        if (this.isDisposed()) {\n            // Handle the case when the asynchronous request finishes after\n            // the editor is disposed\n            return\n        }\n\n        var loadedItems = {}\n\n        if (data.options) {\n            for (var i = data.options.length-1; i >= 0; i--) {\n                loadedItems[data.options[i].value] = data.options[i].title\n            }\n        }\n\n        this.items = this.prepareItems(loadedItems)\n        this.initializeAutocompleteForCurrentInput()\n    }\n\n    StringListAutocomplete.prototype.removeAutocompleteFromAllRows = function() {\n        var inputs = this.popup.querySelector('td input.form-control')\n\n        for (var i=inputs.length-1; i>=0; i--) {\n            this.removeAutocomplete(inputs[i])\n        }\n    }\n\n    //\n    // Event handlers\n    //\n\n    StringListAutocomplete.prototype.onPopupShown = function(ev, link, popup) {\n        BaseProto.onPopupShown.call(this,ev, link, popup)\n\n        popup.on('focus.inspector', 'td input', this.proxy(this.onFocus))\n        popup.on('blur.inspector', 'td input', this.proxy(this.onBlur))\n        popup.on('keydown.inspector', 'td input', this.proxy(this.onKeyDown))\n        popup.on('click.inspector', '[data-cmd]', this.proxy(this.onCommand))\n    }\n\n    StringListAutocomplete.prototype.onPopupHidden = function(ev, link, popup) {\n        popup.off('.inspector', 'td input')\n        popup.off('.inspector', '[data-cmd]', this.proxy(this.onCommand))\n\n        this.removeAutocompleteFromAllRows()\n        this.items = null\n\n        BaseProto.onPopupHidden.call(this, ev, link, popup)\n    }\n\n    StringListAutocomplete.prototype.onFocus = function(ev) {\n        this.setActiveCell(ev.currentTarget)\n    }\n\n    StringListAutocomplete.prototype.onBlur = function(ev) {\n        if ($(ev.relatedTarget).closest('ul.inspector-autocomplete').length > 0) {\n            // Do not close the autocomplete results if a drop-down\n            // menu item was clicked\n            return\n        }\n\n        this.removeAutocomplete(ev.currentTarget)\n    }\n\n    StringListAutocomplete.prototype.onCommand = function(ev) {\n        var command = ev.currentTarget.getAttribute('data-cmd')\n\n        switch (command) {\n            case 'create-item' :\n                this.createItem()\n            break;\n            case 'delete-item' :\n                this.deleteItem()\n            break;\n        }\n    }\n\n    StringListAutocomplete.prototype.onKeyDown = function(ev) {\n        if (ev.key === 'ArrowDown') {\n            return this.navigateDown(ev)\n        }\n        else if (ev.key === 'ArrowUp') {\n            return this.navigateUp(ev)\n        }\n    }\n\n    $.oc.inspector.propertyEditors.stringListAutocomplete = StringListAutocomplete\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.editor.text.js",
    "content": "/*\n * Inspector text editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.popupBase,\n        BaseProto = Base.prototype\n\n    var TextEditor = function(inspector, propertyDefinition, containerCell, group) {\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    TextEditor.prototype = Object.create(BaseProto)\n    TextEditor.prototype.constructor = Base\n\n    TextEditor.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        if (!value) {\n            value = this.propertyDefinition.placeholder\n            $.oc.foundation.element.addClass(link, 'cell-placeholder')\n        }\n        else {\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n        }\n\n        if (typeof value === 'string') {\n            value = value.replace(/(?:\\r\\n|\\r|\\n)/g, ' ');\n            value = $.trim(value)\n            value = value.substring(0, 300);\n        }\n\n        link.textContent = value\n    }\n\n    TextEditor.prototype.getPopupContent = function() {\n        return '<form>                                                                                     \\\n                <div class=\"modal-header\">                                                                 \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                              \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-body\">                                                                   \\\n                    <div class=\"form-group\">                                                               \\\n                        <p class=\"inspector-field-comment\"></p>                                            \\\n                        <textarea class=\"form-control size-small field-textarea\" name=\"name\"></textarea>   \\\n                    </div>                                                                                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-footer\">                                                                 \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button> \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button> \\\n                </div>                                                                                     \\\n            </form>'\n    }\n\n    TextEditor.prototype.configureComment = function(popup) {\n        if (!this.propertyDefinition.description) {\n            return\n        }\n\n        var descriptionElement = $(popup).find('p.inspector-field-comment')\n        descriptionElement.text(this.propertyDefinition.description)\n    }\n\n    TextEditor.prototype.configurePopup = function(popup) {\n        var $textarea = $(popup).find('textarea'),\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (this.propertyDefinition.placeholder) {\n            $textarea.attr('placeholder', this.propertyDefinition.placeholder)\n        }\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        $textarea.val(value)\n        $textarea.focus()\n\n        this.configureComment(popup)\n    }\n\n    TextEditor.prototype.handleSubmit = function($form) {\n        var $textarea = $form.find('textarea'),\n            link = this.getLink(),\n            value = $.trim($textarea.val())\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, value)\n    }\n\n    $.oc.inspector.propertyEditors.text = TextEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.engine.js",
    "content": "/*\n * Inspector engine helpers.\n *\n * The helpers are used mostly by the Inspector Surface.\n *\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    $.oc.inspector.engine = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    function findGroup(group, properties) {\n        for (var i = 0, len = properties.length; i < len; i++) {\n            var property = properties[i]\n\n            if (property.itemType !== undefined && property.itemType == 'group' && property.title == group) {\n                return property\n            }\n        }\n\n        return null\n    }\n\n    $.oc.inspector.engine.processPropertyGroups = function(properties) {\n        var fields = [],\n            result = {\n                hasGroups: false,\n                properties: []\n            },\n            groupIndex = 0\n\n        for (var i = 0, len = properties.length; i < len; i++) {\n            var property = properties[i]\n\n            if (property['sortOrder'] === undefined) {\n                property['sortOrder'] = (i+1)*20\n            }\n        }\n\n        properties.sort(function(a, b){\n            return a['sortOrder'] - b['sortOrder']\n        })\n\n        for (var i = 0, len = properties.length; i < len; i++) {\n            var property = properties[i]\n\n            property.itemType = 'property'\n\n            if (property.group === undefined) {\n                fields.push(property)\n            }\n            else {\n                var group = findGroup(property.group, fields)\n\n                if (!group) {\n                    group = {\n                        itemType: 'group',\n                        title: property.group,\n                        properties: [],\n                        groupIndex: groupIndex\n                    }\n\n                    groupIndex++\n                    fields.push(group)\n                }\n\n                property.groupIndex = group.groupIndex\n                group.properties.push(property)\n            }\n        }\n\n        for (var i = 0, len = fields.length; i < len; i++) {\n            var property = fields[i]\n\n            result.properties.push(property)\n\n            if (property.itemType == 'group') {\n                result.hasGroups = true\n\n                for (var j = 0, propertiesLen = property.properties.length; j < propertiesLen; j++) {\n                    result.properties.push(property.properties[j])\n                }\n\n                delete property.properties\n            }\n        }\n\n        return result\n    }\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.externalparametereditor.js",
    "content": "/*\n * External parameter editor for Inspector.\n *\n * The external parameter editor allows to use URL and\n * other external parameters as values for the inspectable\n * properties.\n *\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var ExternalParameterEditor = function(inspector, propertyDefinition, containerCell, initialValue) {\n        this.inspector = inspector\n        this.propertyDefinition = propertyDefinition\n        this.containerCell = containerCell\n        this.initialValue = initialValue\n\n        Base.call(this)\n\n        this.init()\n    }\n\n    ExternalParameterEditor.prototype = Object.create(BaseProto)\n    ExternalParameterEditor.prototype.constructor = Base\n\n    ExternalParameterEditor.prototype.dispose = function() {\n        this.disposeControls()\n        this.unregisterHandlers()\n\n        this.inspector = null\n        this.propertyDefinition = null\n        this.containerCell = null\n        this.initialValue = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    ExternalParameterEditor.prototype.init = function() {\n        this.tooltipText = 'Click to enter the external parameter name to load the property value from'\n\n        this.build()\n        this.registerHandlers()\n        this.setInitialValue()\n    }\n\n    /**\n     * Builds the external parameter editor markup:\n     *\n     * <div class=\"external-param-editor-container\">\n     *     <input> <-- original property editing input/markup\n     *     <div class=\"external-editor\">\n     *         <div class=\"controls\">\n     *             <input type=\"text\" tabindex=\"-1\"/>\n     *             <a href=\"#\" tabindex=\"-1\">\n     *                 <i class=\"oc-icon-terminal\"></i>\n     *             </a>\n     *         </div>\n     *     </div>\n     * </div>\n     */\n    ExternalParameterEditor.prototype.build = function() {\n        var container = document.createElement('div'),\n            editor = document.createElement('div'),\n            controls = document.createElement('div'),\n            input = document.createElement('input'),\n            link = document.createElement('a'),\n            icon = document.createElement('i')\n\n        container.setAttribute('class', 'external-param-editor-container')\n        editor.setAttribute('class', 'external-editor')\n        controls.setAttribute('class', 'controls')\n        input.setAttribute('type', 'text')\n        input.setAttribute('tabindex', '-1')\n\n        link.setAttribute('href', '#')\n        link.setAttribute('class', 'external-editor-link')\n        link.setAttribute('tabindex', '-1')\n        link.setAttribute('title', this.tooltipText)\n        $(link).tooltip({'container': 'body', delay: 500})\n\n        icon.setAttribute('class', 'oc-icon-terminal')\n\n        link.appendChild(icon)\n        controls.appendChild(input)\n        controls.appendChild(link)\n        editor.appendChild(controls)\n\n        while (this.containerCell.firstChild) {\n            var child = this.containerCell.firstChild\n\n            container.appendChild(child)\n        }\n\n        container.appendChild(editor)\n        this.containerCell.appendChild(container)\n    }\n\n    ExternalParameterEditor.prototype.setInitialValue = function() {\n        if (!this.initialValue) {\n            return\n        }\n\n        if (typeof this.initialValue !== 'string') {\n            return\n        }\n\n        var matches = []\n        if (matches = this.initialValue.match(/^\\{\\{([^\\}]+)\\}\\}$/)) {\n            var value = $.trim(matches[1])\n\n            if (value.length > 0) {\n                this.showEditor(true)\n                this.getInput().value = value\n                this.inspector.setPropertyValue(this.propertyDefinition.property, null, true, true)\n            }\n        }\n    }\n\n    ExternalParameterEditor.prototype.showEditor = function(building) {\n        var editor = this.getEditor(),\n            input = this.getInput(),\n            container = this.getContainer(),\n            link = this.getLink()\n\n        var position = $(editor).position()\n\n        if (!building) {\n            editor.style.right = 0\n            editor.style.left = position.left + 'px'\n        }\n        else {\n            editor.style.right = 0\n        }\n\n        setTimeout(this.proxy(this.repositionEditor), 0)\n\n        $.oc.foundation.element.addClass(container, 'editor-visible')\n        link.setAttribute('data-original-title', 'Click to enter the property value')\n\n        this.toggleEditorVisibility(false)\n        input.setAttribute('tabindex', 0)\n\n        if (!building) {\n            input.focus()\n        }\n    }\n\n    ExternalParameterEditor.prototype.repositionEditor = function() {\n        this.getEditor().style.left = 0;\n        this.containerCell.scrollTop = 0;\n    }\n\n    ExternalParameterEditor.prototype.hideEditor = function() {\n        var editor = this.getEditor(),\n            container = this.getContainer();\n\n        editor.style.left = 'auto';\n        editor.style.right = '30px';\n\n        $.oc.foundation.element.removeClass(container, 'editor-visible');\n        $.oc.foundation.element.removeClass(this.containerCell, 'active');\n\n        var propertyEditor = this.inspector.findPropertyEditor(this.propertyDefinition.property);\n\n        if (propertyEditor) {\n            propertyEditor.onExternalPropertyEditorHidden();\n        }\n    }\n\n    ExternalParameterEditor.prototype.toggleEditor = function(ev) {\n        $.oc.foundation.event.stop(ev);\n\n        var link = this.getLink(),\n            container = this.getContainer(),\n            editor = this.getEditor();\n\n        $(link).tooltip('hide');\n\n        if (!this.isEditorVisible()) {\n            this.showEditor();\n            return;\n        }\n\n        var left = container.offsetWidth;\n\n        editor.style.left = left + 'px';\n        link.setAttribute('data-original-title', this.tooltipText);\n        this.getInput().setAttribute('tabindex', '-1');\n\n        this.toggleEditorVisibility(true)\n\n        setTimeout(this.proxy(this.hideEditor), 200)\n    }\n\n    ExternalParameterEditor.prototype.toggleEditorVisibility = function(show) {\n        var container = this.getContainer(),\n            children = container.children,\n            height = 0;\n\n        if (!show) {\n            height = this.containerCell.getAttribute('data-inspector-cell-height')\n\n            if (!height) {\n                height = $(this.containerCell).height()\n                this.containerCell.setAttribute('data-inspector-cell-height', height)\n            }\n        }\n\n        // Fixed value instead of trying to get the container cell height.\n        // If the editor is contained in initially hidden editor (collapsed group),\n        // the container cell will be unknown.\n\n        height = Math.max(height, 19);\n\n        for (var i = 0, len = children.length; i < len; i++) {\n            var element = children[i]\n\n            if ($.oc.foundation.element.hasClass(element, 'external-editor')) {\n                continue\n            }\n\n            if (show) {\n                $.oc.foundation.element.removeClass(element, 'oc-hide');\n            }\n            else {\n                container.style.height = height + 'px'\n                $.oc.foundation.element.addClass(element, 'oc-hide');\n            }\n        }\n    }\n\n    ExternalParameterEditor.prototype.focus = function() {\n        this.getInput().focus({ preventScroll: true });\n    }\n\n    ExternalParameterEditor.prototype.validate = function(silentMode) {\n        var value = $.trim(this.getValue());\n\n        if (value.length === 0) {\n            if (!silentMode) {\n                $.oc.flashMsg({text: 'Please enter the external parameter name.', 'class': 'error', 'interval': 5});\n                this.focus();\n            }\n\n            return false;\n        }\n\n        return true;\n    }\n\n    //\n    // Event handlers\n    //\n\n    ExternalParameterEditor.prototype.registerHandlers = function() {\n        var input = this.getInput();\n\n        this.getLink().addEventListener('click', this.proxy(this.toggleEditor));\n        input.addEventListener('focus', this.proxy(this.onInputFocus));\n        input.addEventListener('change', this.proxy(this.onInputChange));\n    }\n\n    ExternalParameterEditor.prototype.onInputFocus = function() {\n        this.inspector.makeCellActive(this.containerCell);\n    }\n\n    ExternalParameterEditor.prototype.onInputChange = function() {\n        this.inspector.markPropertyChanged(this.propertyDefinition.property, true);\n    }\n\n    //\n    // Disposing\n    //\n\n    ExternalParameterEditor.prototype.unregisterHandlers = function() {\n        var input = this.getInput()\n\n        this.getLink().removeEventListener('click', this.proxy(this.toggleEditor))\n        input.removeEventListener('focus', this.proxy(this.onInputFocus))\n        input.removeEventListener('change', this.proxy(this.onInputChange))\n    }\n\n    ExternalParameterEditor.prototype.disposeControls = function() {\n        $(this.getLink()).tooltip('dispose');\n    }\n\n    //\n    // Helpers\n    //\n\n    ExternalParameterEditor.prototype.getInput = function() {\n        return this.containerCell.querySelector('div.external-editor input')\n    }\n\n    ExternalParameterEditor.prototype.getValue = function() {\n        return this.getInput().value\n    }\n\n    ExternalParameterEditor.prototype.getLink = function() {\n        return this.containerCell.querySelector('a.external-editor-link')\n    }\n\n    ExternalParameterEditor.prototype.getContainer = function() {\n        return this.containerCell.querySelector('div.external-param-editor-container')\n    }\n\n    ExternalParameterEditor.prototype.getEditor = function() {\n        return this.containerCell.querySelector('div.external-editor')\n    }\n\n    ExternalParameterEditor.prototype.getPropertyName = function() {\n        return this.propertyDefinition.property\n    }\n\n    ExternalParameterEditor.prototype.isEditorVisible = function() {\n        return $.oc.foundation.element.hasClass(this.getContainer(), 'editor-visible')\n    }\n\n    $.oc.inspector.externalParameterEditor = ExternalParameterEditor\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.groups.js",
    "content": "/*\n * Inspector grouping support.\n *\n */\n+function ($) { \"use strict\";\n\n    // GROUP MANAGER CLASS\n    // ============================\n\n    var GroupManager = function(controlId) {\n        this.controlId = controlId\n        this.rootGroup = null\n        this.cachedGroupStatuses = null\n    }\n\n    GroupManager.prototype.createGroup = function(groupId, parentGroup) {\n        var group = new Group(groupId)\n\n        if (parentGroup) {\n            parentGroup.groups.push(group)\n            group.parentGroup = parentGroup // Circular reference, but memory leaks are not noticed\n        }\n        else {\n            this.rootGroup = group\n        }\n\n        return group\n    }\n\n    GroupManager.prototype.getGroupIndex = function(group) {\n        return group.getGroupIndex()\n    }\n\n    GroupManager.prototype.isParentGroupExpanded = function(group) {\n        if (!group.parentGroup) {\n            // The root group is always expanded\n            return true\n        }\n\n        return this.isGroupExpanded(group.parentGroup)\n    }\n\n    GroupManager.prototype.isGroupExpanded = function(group) {\n        if (!group.parentGroup) {\n            // The root group is always expanded\n            return true\n        }\n\n        var groupIndex = this.getGroupIndex(group),\n            statuses = this.readGroupStatuses()\n\n        if (statuses[groupIndex] !== undefined) {\n            return statuses[groupIndex]\n        }\n\n        return false\n    }\n\n    GroupManager.prototype.setGroupStatus = function(groupIndex, expanded) {\n        var statuses = this.readGroupStatuses()\n\n        statuses[groupIndex] = expanded\n\n        this.writeGroupStatuses(statuses)\n    }\n\n    GroupManager.prototype.readGroupStatuses = function() {\n        if (this.cachedGroupStatuses !== null) {\n            return this.cachedGroupStatuses\n        }\n\n        var statuses = getInspectorGroupStatuses()\n\n        if (statuses[this.controlId] !== undefined) {\n            this.cachedGroupStatuses = statuses[this.controlId]\n        }\n        else {\n            this.cachedGroupStatuses = {}\n        }\n\n        return this.cachedGroupStatuses\n    }\n\n    GroupManager.prototype.writeGroupStatuses = function(updatedStatuses) {\n        var statuses = getInspectorGroupStatuses()\n\n        statuses[this.controlId] = updatedStatuses\n        setInspectorGroupStatuses(statuses)\n\n        this.cachedGroupStatuses = updatedStatuses\n    }\n\n    GroupManager.prototype.findGroupByIndex = function(index) {\n        return this.rootGroup.findGroupByIndex(index)\n    }\n\n    GroupManager.prototype.findGroupRows = function(table, index, ignoreCollapsedSubgroups) {\n        var group = this.findGroupByIndex(index)\n\n        if (!group) {\n            throw new Error('Cannot find the requested row group.')\n        }\n\n        return group.findGroupRows(table, ignoreCollapsedSubgroups, this)\n    }\n\n    GroupManager.prototype.markGroupRowInvalid = function(group, table) {\n        var currentGroup = group\n\n        while (currentGroup) {\n            var row = currentGroup.findGroupRow(table)\n            if (row) {\n                $.oc.foundation.element.addClass(row, 'invalid')\n            }\n\n            currentGroup = currentGroup.parentGroup\n        }\n    }\n\n    GroupManager.prototype.unmarkInvalidGroups = function(table) {\n        var rows = table.querySelectorAll('tr.invalid')\n\n        for (var i = rows.length-1; i >= 0; i--) {\n            $.oc.foundation.element.removeClass(rows[i], 'invalid')\n        }\n    }\n\n    GroupManager.prototype.isRowVisible = function(table, rowGroupIndex) {\n        var group = this.findGroupByIndex(index)\n\n        if (!group) {\n            throw new Error('Cannot find the requested row group.')\n        }\n\n        var current = group\n\n        while (current) {\n            if (!this.isGroupExpanded(current)) {\n                return false\n            }\n\n            current = current.parentGroup\n        }\n\n        return true\n    }\n\n    //\n    // Internal functions\n    //\n\n    function getInspectorGroupStatuses() {\n        var statuses = document.body.getAttribute('data-inspector-group-statuses')\n\n        if (statuses !== null) {\n            return JSON.parse(statuses)\n        }\n\n        return {}\n    }\n\n    function setInspectorGroupStatuses(statuses) {\n        document.body.setAttribute('data-inspector-group-statuses', JSON.stringify(statuses))\n    }\n\n    // GROUP CLASS\n    // ============================\n\n    var Group = function(groupId) {\n        this.groupId = groupId\n        this.parentGroup = null\n        this.groupIndex = null\n\n        this.groups = []\n    }\n\n    Group.prototype.getGroupIndex = function() {\n        if (this.groupIndex !== null) {\n            return this.groupIndex\n        }\n\n        var result = '',\n            current = this\n\n        while (current) {\n            if (result.length > 0) {\n                result = current.groupId + '-' + result\n            }\n            else {\n                result = String(current.groupId)\n            }\n\n            current = current.parentGroup\n        }\n\n        this.groupIndex = result\n\n        return result\n    }\n\n    Group.prototype.findGroupByIndex = function(index) {\n        if (this.getGroupIndex() == index) {\n            return this\n        }\n\n        for (var i = this.groups.length-1; i >= 0; i--) {\n            var groupResult = this.groups[i].findGroupByIndex(index)\n            if (groupResult !== null) {\n                return groupResult\n            }\n        }\n\n        return null\n    }\n\n    Group.prototype.getLevel = function() {\n        var current = this,\n            level = -1\n\n        while (current) {\n            level++\n\n            current = current.parentGroup\n        }\n\n        return level\n    }\n\n    Group.prototype.getGroupAndAllParents = function() {\n        var current = this,\n            result = []\n\n        while (current) {\n            result.push(current)\n\n            current = current.parentGroup\n        }\n\n        return result\n    }\n\n    Group.prototype.findGroupRows = function(table, ignoreCollapsedSubgroups, groupManager) {\n        var groupIndex = this.getGroupIndex(),\n            rows = table.querySelectorAll('tr[data-parent-group-index=\"'+groupIndex+'\"]'),\n            result = Array.prototype.slice.call(rows) // Convert node list to array\n\n        for (var i = 0, len = this.groups.length; i < len; i++) {\n            var subgroup = this.groups[i]\n\n            if (ignoreCollapsedSubgroups && !groupManager.isGroupExpanded(subgroup)) {\n                continue\n            }\n\n            var subgroupRows = subgroup.findGroupRows(table, ignoreCollapsedSubgroups, groupManager)\n            for (var j = 0, subgroupLen = subgroupRows.length; j < subgroupLen; j++) {\n                result.push(subgroupRows[j])\n            }\n        }\n\n        return result\n    }\n\n    Group.prototype.findGroupRow = function(table) {\n        return table.querySelector('tr[data-group-index=\"'+this.groupIndex+'\"]')\n    }\n\n    $.oc.inspector.groupManager = GroupManager\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.helpers.js",
    "content": "/*\n * Inspector helper functions.\n *\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    $.oc.inspector.helpers = {}\n\n    $.oc.inspector.helpers.generateElementUniqueId = function(element) {\n        if (element.hasAttribute('data-inspector-id')) {\n            return element.getAttribute('data-inspector-id');\n        }\n\n        var id = $.oc.inspector.helpers.generateUniqueId();\n        element.setAttribute('data-inspector-id', id);\n\n        return id;\n    }\n\n    $.oc.inspector.helpers.generateUniqueId = function() {\n        return \"inspectorid-\" + Math.floor(Math.random() * new Date().getTime());\n    }\n\n    $.oc.inspector.helpers.getEventHandler = function(element, handler) {\n        if (element instanceof jQuery){\n            element = element.get(0);\n        }\n\n        var handlerAlias = element.dataset.inspectorHandlerAlias;\n        if (handlerAlias) {\n            return handlerAlias + '::' + handler;\n        }\n\n        return handler;\n    }\n\n}(window.jQuery)"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.less",
    "content": "//\n// Inspector\n// --------------------------------------------------\n\n@color-inspector-bg:                         @input-bg;\n@color-inspector-color:                      @primary-color;\n@color-inspector-border:                     @primary-border;\n@color-inspector-label-bg:                   @input-bg;\n@color-inspector-value-bg:                   @input-bg;\n@color-inspector-value-color:                @input-color;\n@color-inspector-active-bg:                  @input-bg;\n@color-inspector-changed:                    #c03f31;\n\n//\n// Inspector\n// --------------------------------------------------\n\n.inspector-autocomplete-list() {\n    background: @dropdown-bg;\n    font-size: 12px;\n    z-index: @zindex-inspector;\n\n    li a {\n        padding: 5px 12px;\n        white-space: normal;\n        word-wrap: break-word;\n    }\n}\n\n.inspector-fields {\n    min-width: 220px;\n    border-collapse: collapse;\n    width: 100%;\n    table-layout: fixed;\n    .border-bottom-radius(2px);\n\n    td, th {\n        padding: 5px 12px;\n        font-size: 12px;\n        border-bottom: 1px solid @color-inspector-border;\n        text-align: left;\n    }\n\n    th {\n        color: @color-inspector-color;\n        width: 45%;\n    }\n\n    td {\n        color: @color-inspector-value-color;\n        width: 55%;\n    }\n\n    tr:last-child {\n        td, th { border-bottom: none; }\n\n        td {\n            &, input[type=text] {\n                border-radius: 0 0 2px 0;\n            }\n        }\n    }\n\n    tr.group {\n        user-select: none;\n\n        th {\n            // background: @tertiary-bg;\n            font-weight: 600;\n            cursor: pointer;\n        }\n    }\n\n    tr.invalid th {\n        color: #c03f31!important;\n    }\n\n    tr.control-group {\n        user-select: none;\n\n        th, td {\n            cursor: pointer;\n        }\n    }\n\n    tr {\n        &.collapsed { display: none; }\n        &.expanded { display: table-row; }\n    }\n\n    &.has-groups {\n        th {\n            padding-left: 20px;\n        }\n\n        tr.grouped th {\n            padding-left: 35px;\n        }\n    }\n\n    &:not(:hover) td {\n        border-left-color: transparent;\n    }\n\n    th {\n        background: @color-inspector-label-bg;\n    }\n\n    td {\n        font-weight: 400;\n        border-left: 1px solid @color-inspector-border;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        overflow: hidden;\n        background: @color-inspector-value-bg;\n        transition: border-left-color 0.35s;\n\n        &.text {\n            input[type=text] {\n                background: @color-inspector-value-bg;\n                color: @color-inspector-value-color;\n                text-overflow: ellipsis;\n\n                &::placeholder {\n                    font-weight: normal!important;\n                    color: #b5babd;\n                }\n            }\n\n            &.active {\n                background: @color-inspector-active-bg;\n            }\n        }\n\n        &.autocomplete {\n            padding: 0;\n            position: relative;\n            overflow: visible;\n\n            .autocomplete-container {\n                input[type=text] {\n                    padding: 5px 12px;\n                }\n\n                ul.dropdown-menu {\n                    .inspector-autocomplete-list();\n                }\n\n                .loading-indicator {\n                    span {\n                        margin-top: -12px;\n                        right: 10px;\n                        left: auto;\n                    }\n                }\n            }\n        }\n\n        &.trigger-cell {\n            padding: 0!important;\n\n            a.trigger {\n                display: block;\n                padding: 5px 12px 7px 12px;\n                overflow: hidden;\n                min-height: 29px;\n                text-overflow: ellipsis;\n                color: @color-inspector-color;\n                text-decoration: none;\n\n                &.cell-placeholder {\n                    color: #b5babd;\n                }\n\n                .loading-indicator {\n                    background-color: @color-inspector-bg;\n\n                    span {\n                        margin-top: -12px;\n                        right: 10px;\n                        left: auto;\n                    }\n                }\n            }\n        }\n\n        &.dropdown {\n            padding: 0!important;\n        }\n\n        select {\n            width: 90%;\n        }\n\n        div.external-param-editor-container {\n            position: relative;\n            padding-right: 25px;\n\n            div.external-editor {\n                bottom: 0;\n                margin: -5px -12px;\n                right: 30px;\n                left: auto;\n                top: 0;\n                position: absolute;\n\n                transition: left 0.2s;\n                transform: translateZ(0);\n                will-change: transform;\n\n                div.controls {\n                    position: absolute;\n                    width: 100%;\n                    height: 100%;\n                    left: 0;\n                    top: 0;\n\n                    a {\n                        position: absolute;\n                        left: 0;\n                        top: 0;\n                        display: inline-block;\n                        height: 100%;\n                        width: 30px;\n                        color: @primary-color;\n                        outline: none;\n\n                        i {\n                            display: inline-block;\n                            position: relative;\n                            left: 7px;\n                            top: 5px;\n                            font-size: 1rem;\n                        }\n                    }\n\n                    input {\n                        position: absolute;\n                        display: block;\n                        border: none;\n                        width: 100%;\n                        height: 100%;\n                        left: 0;\n                        top: 0;\n                        padding-left: 30px;\n                        padding-right: 12px;\n                        background: transparent;\n                        color: @color-inspector-value-color;\n                    }\n                }\n            }\n\n            &.editor-visible {\n                div.external-editor {\n                    div.controls {\n                        input {\n                            background: @color-inspector-bg;\n                        }\n                    }\n                }\n            }\n        }\n\n        &.active {\n            div.external-param-editor-container {\n               div.external-editor {\n                    div.controls {\n                        input {\n                            background: @secondary-bg;\n                        }\n                    }\n                }\n            }\n        }\n\n        &.dropdown, &.trigger-cell {\n            div.external-param-editor-container div.external-editor {\n                height: 100%;\n                margin: 0;\n                bottom: auto;\n            }\n        }\n    }\n\n    th {\n        font-weight: 600;\n\n        > div {\n            position: relative;\n\n            > div {\n                white-space: nowrap;\n                padding-right: 10px;\n                text-overflow: ellipsis;\n                overflow: hidden;\n                width: 100%;\n\n                span.info {\n                    display: inline-block;\n                    position: absolute;\n                    right: 3px;\n                    top: 3px;\n                    font-size: 14px;\n                    width: 10px;\n                    height: 12px;\n                    line-height: 80%;\n                    color: #999;\n                    &:before {\n                        margin-left: 3px;\n                    }\n                    &:hover {\n                        color: @emphasis-color;\n                    }\n                }\n            }\n\n            a.expandControl {\n                display: block;\n                position: absolute;\n                width: 12px;\n                height: 12px;\n                left: -15px;\n                top: 2px;\n                text-indent: -100000em;\n\n                span {\n                    position: absolute;\n                    display: inline-block;\n                    left: 0;\n                    top: 0;\n                    width: 12px;\n                    height: 12px;\n\n                    &:after {\n                        .icon(@icon-angle-right);\n                        position: absolute;\n                        left: 4px;\n                        top: -2px;\n                        width: 12px;\n                        height: 12px;\n                        font-size: 13px;\n                        color: @primary-color;\n                        text-indent: 0;\n                    }\n                }\n\n                &.expanded span:after {\n                    .icon(@icon-angle-down);\n                    left: 2px;\n                }\n            }\n        }\n    }\n\n    input[type=text] {\n        display: block;\n        width: 100%;\n        border: none;\n        outline: none;\n    }\n\n    div.form-check {\n        position: relative;\n        top: 1px;\n        font-size: 1rem;\n    }\n\n    .select2-container {\n        width: 100% !important;\n\n        .select2-selection {\n            height: 29px;\n            line-height: 29px;\n            padding: 0 3px 0 12px;\n            border: none !important;\n            font-size: 12px;\n            .border-radius(0) !important;\n            .box-shadow(none) !important;\n\n            &.select2-default {\n                font-weight: normal !important;\n            }\n        }\n\n        .loading-indicator {\n            > span {\n                top: 15px;\n            }\n        }\n\n        &.select2-container--open {\n            .border-radius(0) !important;\n            border: none !important;\n\n            .select2-selection {}\n        }\n\n        .select2-selection__rendered {\n            padding: 0 22px 0 0;\n            color: @color-inspector-value-color;\n        }\n    }\n\n    tr.changed {\n        td {\n            font-weight: 600;\n            input[type=text] {\n                font-weight: 600;\n            }\n\n            .select2-container .select2-selection {\n                font-weight: 600;\n            }\n        }\n    }\n\n}\n\ndiv.control-popover {\n    &.control-inspector {\n        > div {\n            background: @color-inspector-bg;\n            border: none;\n\n            &:before, &:after {\n                display: none;\n            }\n        }\n\n        > div > form {\n            padding: 5px 20px 10px;\n        }\n\n        .popover-head {\n            padding-left: 20px;\n            padding-right: 20px;\n        }\n\n        .inspector-fields {\n            th {\n                padding-left: 0;\n            }\n        }\n    }\n\n    &.hero {\n        > div {\n            border-radius: 8px;\n        }\n\n        .popover-head {\n            .border-top-radius(8px);\n\n            h3 {\n                font-weight: normal;\n                font-size: 18px;\n            }\n\n            .btn-close {\n                top: 16px;\n                right: 17px;\n            }\n        }\n\n        .inspector-fields {\n            th, td {\n                padding: 9px 12px;\n                font-weight: 600!important;\n                font-size: 13px;\n            }\n\n            th {\n                padding-left: 0;\n            }\n\n            td {\n                font-weight: 400!important;\n            }\n\n            div.custom-select.select2-container .select2-selection {\n                height: 36px;\n                line-height: 36px;\n            }\n        }\n    }\n\n    &.inspector-temporary-placement {\n        visibility: hidden;\n        left: 0!important;\n        top: 0!important;\n    }\n}\n\n.inspector-columns-editor {\n    min-height: 400px;\n    margin-bottom: 20px;\n    border-bottom: 1px solid @color-inspector-border;\n\n    .items-column {\n        width: 250px;\n    }\n\n    .inspector-wrapper {\n        background: @color-inspector-bg;\n        border-left: 2px solid @color-inspector-border;\n    }\n\n    .toolbar {\n        padding: 20px;\n    }\n}\n\n.inspector-table-list {\n    border-top: 1px solid @border-color;\n    user-select: none;\n}\n\ndiv.inspector-dictionary-container {\n    border: 1px solid @border-color;\n\n    .values {\n        height: 300px;\n    }\n\n    table.headers {\n        width: 100%;\n        border: none;\n\n        td {\n            width: 50%;\n            padding: 7px 5px;\n            font-size: 13px;\n            text-transform: uppercase;\n            font-weight: 600;\n            color: @primary-color;\n            background: @primary-bg;\n            border-bottom: 1px solid @border-color;\n\n            &:first-child {\n                border-right: 1px solid @border-color;\n            }\n        }\n    }\n\n    table.inspector-dictionary-table {\n        width: 100%;\n        border: none;\n\n        tbody tr {\n            td {\n                width: 50%;\n                padding: 0!important;\n                border-bottom: 1px solid @border-color;\n\n                div {\n                    border: 1px solid transparent;\n                }\n\n                &.active div {\n                    border-color: @brand-accent;\n                }\n\n                input {\n                    width: 100%;\n                    height: 100%;\n                    display: block;\n                    outline: none;\n                    border: none;\n                    padding: 7px 5px;\n                    box-shadow: none;\n\n                    &:focus {\n                        border: none;\n                        outline: none;\n                    }\n                }\n\n                &:first-child {\n                    border-right: 1px solid @border-color;\n                }\n            }\n\n            &:last-child td {\n                border-bottom: none;\n            }\n        }\n    }\n}\n\n.inspector-header {\n    background: @color-popover-head-bg;\n    padding: 14px 16px;\n    position: relative;\n    color: @color-popover-head-text;\n    border-bottom: 1px solid @color-popover-border;\n\n    h3 {\n        font-size: @font-size-base + 1;\n        font-weight: 600;\n        margin-top: 0;\n        margin-bottom: 0;\n        padding-right: 15px;\n        line-height: 130%;\n    }\n\n    p {\n        font-size: @font-size-base - 2;\n        font-weight: normal;\n        margin: 5px 0 0 0;\n\n        &:empty {\n            display: none;\n        }\n    }\n\n    span, a {\n        text-decoration: none;\n        position: absolute;\n        top: 12px;\n        float: none;\n        color: @close-color;\n        cursor: pointer;\n        line-height: 1;\n\n        opacity: .4;\n        &:hover {\n            opacity: 1;\n            color: @close-color;\n        }\n    }\n\n    .detach {\n        right: 26px;\n        line-height: 22px;\n    }\n\n    .close {\n        right: 11px;\n        font-size: 21px;\n    }\n}\n\n.inspector-container {\n    &:empty {\n        display: none;\n    }\n\n    .control-scrollpad {\n        position: absolute;\n    }\n}\n\n.inspector-field-comment {\n    &:empty {\n        display: none;\n    }\n}\n\nul.autocomplete.dropdown-menu.inspector-autocomplete {\n    .inspector-autocomplete-list();\n}\n\n.select2-dropdown {\n    &.ocInspectorDropdown {\n        font-size: 12px;\n        .border-radius(0) !important;\n        border: none !important;\n\n        > .select2-results {\n            > .select2-results__options {\n                font-size: 12px;\n            }\n            > li > div {\n                padding: 5px 12px 5px;\n            }\n\n            li.select2-no-results {\n                padding: 5px 12px 5px;\n            }\n\n            li > i, li > img {\n                margin-left: 6px;\n            }\n        }\n\n        .select2-search {\n            min-height: 26px;\n            position: relative;\n            border-bottom: 1px solid @border-color;\n\n            &:after {\n                position: absolute;\n                .icon(@icon-search);\n                right: 10px;\n                top: 10px;\n                color: #95a5a6;\n            }\n\n            input.select2-search__field {\n                min-height: 26px;\n                background: transparent !important;\n                font-size: @font-size-base - 1;\n                padding-left: 4px;\n                padding-right: 20px;\n                border: none;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.manager.js",
    "content": "/*\n * Inspector management functions.\n *\n * Watches inspectable elements clicks and creates Inspector surfaces in popups\n * and containers.\n */\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var InspectorManager = function() {\n        Base.call(this);\n\n        this.init();\n    }\n\n    InspectorManager.prototype = Object.create(BaseProto);\n    InspectorManager.prototype.constructor = Base;\n\n    InspectorManager.prototype.init = function() {\n        $(document).on('click', '[data-inspectable]', this.proxy(this.onInspectableClicked));\n    }\n\n    InspectorManager.prototype.getContainerElement = function($element) {\n        var $containerHolder = $element.closest('[data-inspector-container]');\n        if ($containerHolder.length === 0) {\n            return null;\n        }\n\n        var $container = $containerHolder.find($containerHolder.data('inspector-container'));\n        if ($container.length === 0) {\n            throw new Error('Inspector container ' + $containerHolder.data['inspector-container'] + ' element is not found.');\n        }\n\n        return $container;\n    }\n\n    InspectorManager.prototype.loadElementOptions = function($element) {\n        var options = {};\n\n        // Only specific options are allowed, don't load all options with data()\n        if ($element.data('inspector-css-class')) {\n            options.inspectorCssClass = $element.data('inspector-css-class');\n        }\n\n        return options;\n    }\n\n    InspectorManager.prototype.createInspectorPopup = function($element, containerSupported) {\n        var options = $.extend(this.loadElementOptions($element), {\n                containerSupported: containerSupported\n            });\n\n        new $.oc.inspector.wrappers.popup($element, null, options);\n    }\n\n    InspectorManager.prototype.createInspectorContainer = function($element, $container) {\n        var options = $.extend(this.loadElementOptions($element), {\n                containerSupported: true,\n                container: $container\n            });\n\n        new $.oc.inspector.wrappers.container($element, null, options);\n    }\n\n    InspectorManager.prototype.switchToPopup = function(wrapper) {\n        var options = $.extend(this.loadElementOptions(wrapper.$element), {\n                containerSupported: true\n            })\n\n        new $.oc.inspector.wrappers.popup(wrapper.$element, wrapper, options)\n\n        wrapper.cleanupAfterSwitch();\n        this.setContainerPreference(false);\n    }\n\n    InspectorManager.prototype.switchToContainer = function(wrapper) {\n        var $container = this.getContainerElement(wrapper.$element),\n            options = $.extend(this.loadElementOptions(wrapper.$element), {\n                containerSupported: true,\n                container: $container\n            });\n\n        if (!$container) {\n            throw new Error('Cannot switch to container: a container element is not found');\n        }\n\n        new $.oc.inspector.wrappers.container(wrapper.$element, wrapper, options);\n\n        wrapper.cleanupAfterSwitch();\n        this.setContainerPreference(true);\n    }\n\n    InspectorManager.prototype.createInspector = function(element) {\n        var $element = $(element);\n\n        if ($element.data('oc.inspectorVisible')) {\n            return false;\n        }\n\n        var $container = this.getContainerElement($element);\n\n        // If there's no container option, create the Inspector popup\n        if (!$container) {\n            this.createInspectorPopup($element, false);\n        }\n        else {\n            // If the container is already in use, apply values to the inspectable elements\n            if (!this.applyValuesFromContainer($container) || !this.containerHidingAllowed($container)) {\n                return;\n            }\n\n            // Dispose existing container wrapper, if any\n            $.oc.foundation.controlUtils.disposeControls($container.get(0));\n\n            if (!this.getContainerPreference()) {\n                // If container is not a preferred option, create Inspector popup\n                this.createInspectorPopup($element, true);\n            }\n            else {\n                // Otherwise, create Inspector in the container\n                this.createInspectorContainer($element, $container);\n            }\n        }\n    }\n\n    InspectorManager.prototype.getContainerPreference = function() {\n        try {\n            return localStorage.getItem('oc.inspectorUseContainer') === \"true\";\n        } catch (e) {\n            return false;\n        }\n    }\n\n    InspectorManager.prototype.setContainerPreference = function(value) {\n        try {\n            localStorage.setItem('oc.inspectorUseContainer', value ? \"true\" : \"false\");\n        } catch (e) {\n            // localStorage not available\n        }\n    }\n\n    InspectorManager.prototype.applyValuesFromContainer = function($container) {\n        var applyEvent = $.Event('apply.oc.inspector');\n\n        $container.trigger(applyEvent);\n        return !applyEvent.isDefaultPrevented();\n    }\n\n    InspectorManager.prototype.containerHidingAllowed = function($container) {\n        var allowedEvent = $.Event('beforeContainerHide.oc.inspector');\n\n        $container.trigger(allowedEvent);\n        return !allowedEvent.isDefaultPrevented();\n    }\n\n    InspectorManager.prototype.onInspectableClicked = function(ev) {\n        var $element = $(ev.currentTarget);\n\n        if (this.createInspector($element) === false) {\n            return false;\n        }\n\n        ev.stopPropagation();\n        return false;\n    }\n\n    $.oc.inspector.manager = new InspectorManager();\n\n    $.fn.inspector = function () {\n        return this.each(function () {\n            $.oc.inspector.manager.createInspector(this);\n        })\n    }\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.surface.js",
    "content": "/*\n * Inspector Surface class.\n *\n * The class creates Inspector user interface and all the editors\n * corresponding to the passed configuration in a specified container\n * element.\n *\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    /**\n     * Creates the Inspector surface in a container.\n     * - containerElement container DOM element\n     * - properties array (array of objects)\n     * - values - property values, an object\n     * - inspectorUniqueId - a string containing the unique inspector identifier.\n     *   The identifier should be a constant for an inspectable element. Use\n     *   $.oc.inspector.helpers.generateElementUniqueId(element) to generate a persistent ID\n     *   for an element. Use $.oc.inspector.helpers.generateUniqueId() to generate an ID\n     *   not associated with an element. Inspector uses the ID for storing configuration\n     *   related to an element in the document DOM.\n     */\n    var Surface = function(containerElement, properties, values, inspectorUniqueId, options, parentSurface, group, propertyName) {\n        if (inspectorUniqueId === undefined) {\n            throw new Error('Inspector surface unique ID should be defined.')\n        }\n\n        this.options = $.extend({}, Surface.DEFAULTS, typeof options == 'object' && options)\n        this.rawProperties = properties\n        this.parsedProperties = $.oc.inspector.engine.processPropertyGroups(properties)\n        this.container = containerElement\n        this.inspectorUniqueId = inspectorUniqueId\n        this.values = values !== null ? values : {}\n        this.originalValues = $.extend(true, {}, this.values) // Clone the values hash\n        this.idCounter = 1\n        this.popupCounter = 0\n        this.parentSurface = parentSurface\n        this.propertyName = propertyName\n\n        this.editors = []\n        this.externalParameterEditors = []\n        this.tableContainer = null\n        this.groupManager = null\n        this.group = null\n\n        if (group !== undefined) {\n            this.group = group\n        }\n\n        if (!this.parentSurface) {\n            this.groupManager = new $.oc.inspector.groupManager(this.inspectorUniqueId)\n        }\n\n        Base.call(this)\n\n        this.init()\n    }\n\n    Surface.prototype = Object.create(BaseProto)\n    Surface.prototype.constructor = Surface\n\n    Surface.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.disposeControls()\n        this.disposeEditors()\n        this.removeElements()\n        this.disposeExternalParameterEditors()\n\n        this.container = null\n        this.tableContainer = null\n        this.rawProperties = null\n        this.parsedProperties = null\n        this.editors = null\n        this.externalParameterEditors = null\n        this.values = null\n        this.originalValues = null\n        this.options.onChange = null\n        this.options.onPopupDisplayed = null\n        this.options.onPopupHidden = null\n        this.options.onGetInspectableElement = null\n        this.parentSurface = null\n        this.groupManager = null\n        this.group = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    // INTERNAL METHODS\n    // ============================\n\n    Surface.prototype.init = function() {\n        if (this.groupManager && !this.group) {\n            this.group = this.groupManager.createGroup('root')\n        }\n\n        this.build()\n\n        if (!this.parentSurface) {\n            $.oc.foundation.controlUtils.markDisposable(this.tableContainer)\n        }\n\n        this.registerHandlers()\n    }\n\n    Surface.prototype.registerHandlers = function() {\n        if (!this.parentSurface) {\n            $(this.tableContainer).one('dispose-control', this.proxy(this.dispose))\n            $(this.tableContainer).on('click', 'tr.group, tr.control-group', this.proxy(this.onGroupClick))\n            $(this.tableContainer).on('focus-control', this.proxy(this.focusFirstEditor))\n        }\n    }\n\n    Surface.prototype.unregisterHandlers = function() {\n        if (!this.parentSurface) {\n            $(this.tableContainer).off('dispose-control', this.proxy(this.dispose))\n            $(this.tableContainer).off('click', 'tr.group, tr.control-group', this.proxy(this.onGroupClick))\n            $(this.tableContainer).off('focus-control', this.proxy(this.focusFirstEditor))\n        }\n    }\n\n    Surface.prototype.getEventHandler = function(handler) {\n        return $.oc.inspector.helpers.getEventHandler(this.getInspectableElement(), handler);\n    }\n\n    //\n    // Building\n    //\n\n    /**\n     * Builds the Inspector table. The markup generated by this method looks\n     * like this:\n     *\n     * <div>\n     *     <table>\n     *         <tbody>\n     *             <tr>\n     *                 <th data-property=\"label\">\n     *                     <div>\n     *                         <div>\n     *                             <span class=\"title-element\" title=\"Label\">\n     *                                 <a href=\"javascript:;\" class=\"expandControl expanded\" data-group-index=\"1\">Expand/Collapse</a>\n     *                                 Label\n     *                             </span>\n     *                         </div>\n     *                     </div>\n     *                 </th>\n     *                 <td>\n     *                     Editor markup\n     *                 </td>\n     *             </tr>\n     *         </tbody>\n     *     </table>\n     * </div>\n     */\n    Surface.prototype.build = function() {\n        this.tableContainer = document.createElement('div')\n\n        var dataTable = document.createElement('table'),\n            tbody = document.createElement('tbody')\n\n        $.oc.foundation.element.addClass(dataTable, 'inspector-fields')\n        if (this.parsedProperties.hasGroups) {\n            $.oc.foundation.element.addClass(dataTable, 'has-groups')\n        }\n\n        var currentGroup = this.group\n\n        for (var i=0, len = this.parsedProperties.properties.length; i < len; i++) {\n            var property = this.parsedProperties.properties[i]\n\n            if (property.itemType == 'group') {\n                currentGroup = this.getGroupManager().createGroup(property.groupIndex, this.group)\n            }\n            else {\n                if (property.groupIndex === undefined) {\n                    currentGroup = this.group\n                }\n            }\n\n            var row = this.buildRow(property, currentGroup)\n\n            if (property.itemType == 'group') {\n                this.applyGroupLevelToRow(row, currentGroup.parentGroup)\n            }\n            else {\n                this.applyGroupLevelToRow(row, currentGroup)\n            }\n\n            tbody.appendChild(row)\n\n            // Editor\n            //\n            this.buildEditor(row, property, dataTable, currentGroup)\n        }\n\n        dataTable.appendChild(tbody)\n        this.tableContainer.appendChild(dataTable)\n\n        this.container.appendChild(this.tableContainer)\n\n        if (this.options.enableExternalParameterEditor) {\n            this.buildExternalParameterEditor(tbody)\n        }\n\n        if (!this.parentSurface) {\n            this.focusFirstEditor()\n        }\n    }\n\n    Surface.prototype.moveToContainer = function(newContainer) {\n        this.container = newContainer\n\n        this.container.appendChild(this.tableContainer)\n    }\n\n    Surface.prototype.buildRow = function(property, group) {\n        var row = document.createElement('tr'),\n            th = document.createElement('th'),\n            titleSpan = document.createElement('span'),\n            description = this.buildPropertyDescription(property)\n\n        // Table row\n        //\n        if (property.property) {\n            row.setAttribute('data-property', property.property)\n            row.setAttribute('data-property-path', this.getPropertyPath(property.property))\n        }\n\n        this.applyGroupIndexAttribute(property, row, group)\n        $.oc.foundation.element.addClass(row, this.getRowCssClass(property, group))\n\n        // Property head\n        //\n        this.applyHeadColspan(th, property)\n\n        titleSpan.setAttribute('class', 'title-element')\n        titleSpan.setAttribute('title', this.escapeJavascriptString(property.title))\n        this.buildGroupExpandControl(titleSpan, property, false, false, group)\n\n        titleSpan.innerHTML += this.escapeJavascriptString(property.title)\n\n        var outerDiv = document.createElement('div'),\n            innerDiv = document.createElement('div')\n\n        innerDiv.appendChild(titleSpan)\n\n        if (description) {\n            innerDiv.appendChild(description)\n        }\n\n        outerDiv.appendChild(innerDiv)\n        th.appendChild(outerDiv)\n        row.appendChild(th)\n\n        return row\n    }\n\n    Surface.prototype.focusFirstEditor = function() {\n        if (this.editors.length == 0) {\n            return\n        }\n\n        var groupManager = this.getGroupManager();\n\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i],\n                group = editor.parentGroup;\n\n            if (group && !this.groupManager.isGroupExpanded(group) ) {\n                continue;\n            }\n\n            var externalParameterEditor = this.findExternalParameterEditor(editor.getPropertyName())\n\n            if (externalParameterEditor && externalParameterEditor.isEditorVisible()) {\n                externalParameterEditor.focus();\n                return;\n            }\n\n            editor.focus();\n            return;\n        }\n    }\n\n    Surface.prototype.getRowCssClass = function(property, group) {\n        var result = property.itemType\n\n        if (property.itemType == 'property') {\n            // result += ' grouped'\n            if (group.parentGroup) {\n                result += this.getGroupManager().isGroupExpanded(group) ? ' expanded' : ' collapsed'\n            }\n        }\n\n        if (property.itemType == 'property' && !property.showExternalParam) {\n            result += ' no-external-parameter'\n        }\n\n        return result\n    }\n\n    Surface.prototype.applyHeadColspan = function(th, property) {\n        if (property.itemType == 'group') {\n            th.setAttribute('colspan',  2)\n        }\n    }\n\n    Surface.prototype.buildGroupExpandControl = function(titleSpan, property, force, hasChildSurface, group) {\n        if (property.itemType !== 'group' && !force) {\n            return\n        }\n\n        var groupIndex = this.getGroupManager().getGroupIndex(group),\n            statusClass = this.getGroupManager().isGroupExpanded(group) ? 'expanded' : '',\n            anchor = document.createElement('a')\n\n        anchor.setAttribute('class', 'expandControl ' + statusClass)\n        anchor.setAttribute('href', 'javascript:;')\n        anchor.innerHTML = '<span>Expand/collapse</span>'\n\n        titleSpan.appendChild(anchor)\n    }\n\n    Surface.prototype.buildPropertyDescription = function(property) {\n        if (property.description === undefined || property.description === null) {\n            return null;\n        }\n\n        var span = document.createElement('span');\n        span.setAttribute('data-tooltip-text', this.escapeJavascriptString(property.description));\n        span.setAttribute('class', 'info icon-info-circle-1 with-tooltip');\n\n        return span;\n    }\n\n    Surface.prototype.buildExternalParameterEditor = function(tbody) {\n        var rows = tbody.children\n\n        for (var i = 0, len = rows.length; i < len; i++) {\n            var row = rows[i],\n                property = row.getAttribute('data-property')\n\n            if ($.oc.foundation.element.hasClass(row, 'no-external-parameter') || !property) {\n                continue\n            }\n\n            var propertyEditor = this.findPropertyEditor(property)\n            if (propertyEditor && !propertyEditor.supportsExternalParameterEditor()) {\n                continue\n            }\n\n            var cell = row.querySelector('td'),\n                propertyDefinition = this.findPropertyDefinition(property),\n                initialValue = this.getPropertyValue(property)\n\n            if (initialValue === undefined) {\n                initialValue = propertyEditor.getUndefinedValue()\n            }\n\n            var editor = new $.oc.inspector.externalParameterEditor(this, propertyDefinition, cell, initialValue)\n\n            this.externalParameterEditors.push(editor)\n        }\n    }\n\n    //\n    // Field grouping\n    //\n\n    Surface.prototype.applyGroupIndexAttribute = function(property, row, group, isGroupedControl) {\n        if (property.itemType == 'group' || isGroupedControl) {\n            row.setAttribute('data-group-index', this.getGroupManager().getGroupIndex(group))\n            row.setAttribute('data-parent-group-index', this.getGroupManager().getGroupIndex(group.parentGroup))\n        }\n        else {\n            if (group.parentGroup) {\n                row.setAttribute('data-parent-group-index', this.getGroupManager().getGroupIndex(group))\n            }\n        }\n    }\n\n    Surface.prototype.applyGroupLevelToRow = function(row, group) {\n        if (row.hasAttribute('data-group-level')) {\n            return;\n        }\n\n        var th = this.getRowHeadElement(row);\n\n        if (th === null) {\n            throw new Error('Cannot find TH element for the Inspector row');\n        }\n\n        var groupLevel = group.getLevel();\n\n        row.setAttribute('data-group-level', groupLevel)\n        th.children[0].style.marginLeft = groupLevel*10 + 'px'\n    }\n\n    Surface.prototype.toggleGroup = function(row, forceExpand) {\n        var link = row.querySelector('a'),\n            groupIndex = row.getAttribute('data-group-index'),\n            table = this.getRootTable(),\n            groupManager = this.getGroupManager(),\n            collapse = true\n\n        if ($.oc.foundation.element.hasClass(link, 'expanded') && !forceExpand) {\n            $.oc.foundation.element.removeClass(link, 'expanded')\n        }\n        else {\n            $.oc.foundation.element.addClass(link, 'expanded')\n            collapse = false\n        }\n\n        var propertyRows = groupManager.findGroupRows(table, groupIndex, !collapse),\n            duration = Math.round(50 / propertyRows.length)\n\n        this.expandOrCollapseRows(propertyRows, collapse, duration, forceExpand)\n        groupManager.setGroupStatus(groupIndex, !collapse)\n    }\n\n    Surface.prototype.expandGroupParents = function(group) {\n        var groups = group.getGroupAndAllParents(),\n            table = this.getRootTable()\n\n        for (var i = groups.length-1; i >= 0; i--) {\n            var row = groups[i].findGroupRow(table)\n\n            if (row) {\n                this.toggleGroup(row, true)\n            }\n        }\n    }\n\n    Surface.prototype.expandOrCollapseRows = function(rows, collapse, duration, noAnimation) {\n        var row = rows.pop(),\n            self = this\n\n        if (row) {\n            if (!noAnimation) {\n                setTimeout(function toggleRow() {\n                    $.oc.foundation.element.toggleClass(row, 'collapsed', collapse)\n                    $.oc.foundation.element.toggleClass(row, 'expanded', !collapse)\n\n                    self.expandOrCollapseRows(rows, collapse, duration, noAnimation)\n                }, duration)\n            }\n            else {\n                $.oc.foundation.element.toggleClass(row, 'collapsed', collapse)\n                $.oc.foundation.element.toggleClass(row, 'expanded', !collapse)\n\n                self.expandOrCollapseRows(rows, collapse, duration, noAnimation)\n            }\n        }\n    }\n\n    Surface.prototype.getGroupManager = function() {\n        return this.getRootSurface().groupManager\n    }\n\n    //\n    // Editors\n    //\n\n    Surface.prototype.buildEditor = function(row, property, dataTable, group) {\n        if (property.itemType !== 'property') {\n            return\n        }\n\n        this.validateEditorType(property.type)\n\n        var cell = document.createElement('td'),\n            type = property.type\n\n        row.appendChild(cell)\n\n        if (type === undefined) {\n            type = 'string'\n        }\n\n        var editor = new $.oc.inspector.propertyEditors[type](this, property, cell, group)\n\n        if (editor.isGroupedEditor()) {\n            $.oc.foundation.element.addClass(dataTable, 'has-groups')\n            $.oc.foundation.element.addClass(row, 'control-group')\n\n            this.applyGroupIndexAttribute(property, row, editor.group, true)\n            this.buildGroupExpandControl(row.querySelector('span.title-element'), property, true, editor.hasChildSurface(), editor.group)\n\n            if (cell.children.length == 0) {\n                // If the editor hasn't added any elements to the cell,\n                // and it's a grouped control, remove the cell and\n                // make the group title full-width.\n                row.querySelector('th').setAttribute('colspan', 2)\n                row.removeChild(cell)\n            }\n        }\n\n        this.editors.push(editor)\n    }\n\n    Surface.prototype.generateSequencedId = function() {\n        this.idCounter ++\n\n        return this.inspectorUniqueId + '-' + this.idCounter\n    }\n\n    //\n    // Internal API for the editors\n    //\n\n    Surface.prototype.getPropertyValue = function(property) {\n        return this.values[property]\n    }\n\n    Surface.prototype.setPropertyValue = function(property, value, supressChangeEvents, forceEditorUpdate) {\n        if (value !== undefined) {\n            this.values[property] = value\n        }\n        else {\n            if (this.values[property] !== undefined) {\n                delete this.values[property]\n            }\n        }\n\n        if (!supressChangeEvents) {\n            if (this.originalValues[property] === undefined || !this.comparePropertyValues(this.originalValues[property], value)) {\n                this.markPropertyChanged(property, true)\n            }\n            else {\n                this.markPropertyChanged(property, false)\n            }\n\n            var propertyPath = this.getPropertyPath(property)\n            this.getRootSurface().notifyEditorsPropertyChanged(propertyPath, value)\n\n            if (this.options.onChange !== null) {\n                this.options.onChange(property, value)\n            }\n        }\n\n        if (forceEditorUpdate) {\n            var editor = this.findPropertyEditor(property)\n            if (editor) {\n                editor.updateDisplayedValue(value)\n            }\n        }\n\n        return value\n    }\n\n    Surface.prototype.notifyEditorsPropertyChanged = function(propertyPath, value) {\n        // Editors use this event to watch changes in properties\n        // they depend on. All editors should be notified, including\n        // editors in nested surfaces. The property name is passed as a\n        // path object.property (if the property is nested), so that\n        // property depenencies could be defined as\n        // ['property', 'object.property']\n\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i]\n\n            editor.onInspectorPropertyChanged(propertyPath, value)\n            editor.notifyChildSurfacesPropertyChanged(propertyPath, value)\n        }\n    }\n\n    Surface.prototype.makeCellActive = function(cell) {\n        var tbody = cell.parentNode.parentNode.parentNode, // cell / row / tbody\n            cells = tbody.querySelectorAll('tr td')\n\n        for (var i = 0, len = cells.length; i < len; i++) {\n            $.oc.foundation.element.removeClass(cells[i], 'active')\n        }\n\n        $.oc.foundation.element.addClass(cell, 'active')\n    }\n\n    Surface.prototype.markPropertyChanged = function(property, changed) {\n        var propertyPath = this.getPropertyPath(property),\n            row = this.tableContainer.querySelector('tr[data-property-path=\"'+propertyPath+'\"]')\n\n        if (changed) {\n            $.oc.foundation.element.addClass(row, 'changed')\n        }\n        else {\n            $.oc.foundation.element.removeClass(row, 'changed')\n        }\n    }\n\n    Surface.prototype.findPropertyEditor = function(property) {\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            if (this.editors[i].getPropertyName() == property) {\n                return this.editors[i]\n            }\n        }\n\n        return null\n    }\n\n    Surface.prototype.findExternalParameterEditor = function(property) {\n        for (var i = 0, len = this.externalParameterEditors.length; i < len; i++) {\n            if (this.externalParameterEditors[i].getPropertyName() == property) {\n                return this.externalParameterEditors[i]\n            }\n        }\n\n        return null\n    }\n\n    Surface.prototype.findPropertyDefinition = function(property) {\n        for (var i=0, len = this.parsedProperties.properties.length; i < len; i++) {\n            var definition = this.parsedProperties.properties[i]\n\n            if (definition.property == property) {\n                return definition\n            }\n        }\n\n        return null\n    }\n\n    Surface.prototype.validateEditorType = function(type) {\n        if (type === undefined) {\n            type = 'string'\n        }\n\n        if ($.oc.inspector.propertyEditors[type] === undefined) {\n            throw new Error('The Inspector editor class \"' + type +\n                '\" is not defined in the $.oc.inspector.propertyEditors namespace.')\n        }\n    }\n\n    Surface.prototype.popupDisplayed = function() {\n        if (this.popupCounter === 0 && this.options.onPopupDisplayed !== null) {\n            this.options.onPopupDisplayed()\n        }\n\n        this.popupCounter++\n    }\n\n    Surface.prototype.popupHidden = function() {\n        this.popupCounter--\n\n        if (this.popupCounter < 0) {\n            this.popupCounter = 0\n        }\n\n        if (this.popupCounter === 0 && this.options.onPopupHidden !== null) {\n            this.options.onPopupHidden()\n        }\n    }\n\n    Surface.prototype.getInspectableElement = function() {\n        if (this.options.onGetInspectableElement !== null) {\n            return this.options.onGetInspectableElement()\n        }\n    }\n\n    Surface.prototype.getPropertyPath = function(propertyName) {\n        var result = [],\n            current = this\n\n        result.push(propertyName)\n\n        while (current) {\n            if (current.propertyName) {\n                result.push(current.propertyName)\n            }\n\n            current = current.parentSurface\n        }\n\n        result.reverse()\n\n        return result.join('.')\n    }\n\n    Surface.prototype.findDependentProperties = function(propertyName) {\n        var dependents = []\n\n        for (var i in this.rawProperties) {\n            var property = this.rawProperties[i]\n\n            if (!property.depends) {\n                continue\n            }\n\n            if (property.depends.indexOf(propertyName) !== -1) {\n                dependents.push(property.property)\n            }\n        }\n\n        return dependents\n    }\n\n    //\n    // Nested surfaces support\n    //\n\n    Surface.prototype.mergeChildSurface = function(surface, mergeAfterRow) {\n        var rows = surface.tableContainer.querySelectorAll('table.inspector-fields > tbody > tr')\n\n        surface.tableContainer = this.getRootSurface().tableContainer\n\n        for (var i = rows.length-1; i >= 0; i--) {\n            var row = rows[i]\n\n            mergeAfterRow.parentNode.insertBefore(row, mergeAfterRow.nextSibling)\n            this.applyGroupLevelToRow(row, surface.group)\n        }\n    }\n\n    Surface.prototype.getRowHeadElement = function(row) {\n        for (var i = row.children.length-1; i >= 0; i--) {\n            var element = row.children[i]\n\n            if (element.tagName === 'TH') {\n                return element\n            }\n        }\n\n        return null\n    }\n\n    Surface.prototype.getInspectorUniqueId = function() {\n        return this.inspectorUniqueId\n    }\n\n    Surface.prototype.getRootSurface = function() {\n        var current = this\n\n        while (current) {\n            if (!current.parentSurface) {\n                return current\n            }\n\n            current = current.parentSurface\n        }\n    }\n\n    //\n    // Disposing\n    //\n\n    Surface.prototype.removeElements = function() {\n        if (!this.parentSurface) {\n            this.tableContainer.parentNode.removeChild(this.tableContainer);\n        }\n    }\n\n    Surface.prototype.disposeEditors = function() {\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i]\n\n            editor.dispose()\n        }\n    }\n\n    Surface.prototype.disposeExternalParameterEditors = function() {\n        for (var i = 0, len = this.externalParameterEditors.length; i < len; i++) {\n            var editor = this.externalParameterEditors[i]\n\n            editor.dispose()\n        }\n    }\n\n    Surface.prototype.disposeControls = function() {\n        var tooltipControls = this.tableContainer.querySelectorAll('.with-tooltip')\n\n        for (var i = 0, len = tooltipControls.length; i < len; i++) {\n            $(tooltipControls[i]).tooltip('dispose');\n        }\n    }\n\n    //\n    // Helpers\n    //\n\n    Surface.prototype.escapeJavascriptString = function(str) {\n        var div = document.createElement('div')\n        div.appendChild(document.createTextNode(str))\n        return div.innerHTML\n    }\n\n    Surface.prototype.comparePropertyValues = function(oldValue, newValue) {\n        if (oldValue === undefined && newValue !== undefined) {\n            return false\n        }\n\n        if (oldValue !== undefined && newValue === undefined) {\n            return false\n        }\n\n        if (typeof oldValue == 'object' && typeof newValue == 'object') {\n            return JSON.stringify(oldValue) == JSON.stringify(newValue)\n        }\n\n        return oldValue == newValue\n    }\n\n    Surface.prototype.getRootTable = function() {\n        return this.getRootSurface().container.querySelector('table.inspector-fields')\n    }\n\n    //\n    // External API\n    //\n\n    Surface.prototype.getValues = function() {\n        var result = {}\n\n        for (var i=0, len = this.parsedProperties.properties.length; i < len; i++) {\n            var property = this.parsedProperties.properties[i]\n\n            if (property.itemType !== 'property') {\n                continue\n            }\n\n            var value = null,\n                externalParameterEditor = this.findExternalParameterEditor(property.property)\n\n            if (!externalParameterEditor || !externalParameterEditor.isEditorVisible()) {\n                value = this.getPropertyValue(property.property)\n\n                var editor = this.findPropertyEditor(property.property)\n\n                if (value === undefined) {\n                    if (editor) {\n                        value = editor.getUndefinedValue()\n                    }\n                    else {\n                        value = property.default\n                    }\n                }\n\n                if (value === $.oc.inspector.removedProperty) {\n                    continue\n                }\n\n                if (property.ignoreIfEmpty !== undefined && (property.ignoreIfEmpty === true || property.ignoreIfEmpty === \"true\") && editor) {\n                    if (editor.isEmptyValue(value)) {\n                        continue\n                    }\n                }\n\n                if (property.ignoreIfDefault !== undefined && (property.ignoreIfDefault === true || property.ignoreIfDefault === \"true\") && editor) {\n                    if (property.default === undefined) {\n                        throw new Error('The ignoreIfDefault feature cannot be used without the default property value.')\n                    }\n\n                    if (this.comparePropertyValues(value, property.default)) {\n                        continue\n                    }\n                }\n            }\n            else {\n                value = externalParameterEditor.getValue()\n                value = '{{ ' + value + ' }}'\n            }\n\n            result[property.property] = value\n        }\n\n        return result\n    }\n\n    Surface.prototype.getValidValues = function() {\n        var allValues = this.getValues(),\n            result = {}\n\n        for (var property in allValues) {\n            var editor = this.findPropertyEditor(property)\n\n            if (!editor) {\n                throw new Error('Cannot find editor for property ' + property)\n            }\n\n            var externalEditor = this.findExternalParameterEditor(property)\n            if (externalEditor && externalEditor.isEditorVisible() && !externalEditor.validate(true)) {\n                result[property] = $.oc.inspector.invalidProperty\n                continue\n            }\n\n            if (!editor.validate(true)) {\n                result[property] = $.oc.inspector.invalidProperty\n                continue\n            }\n\n            result[property] = allValues[property]\n        }\n\n        return result\n    }\n\n    Surface.prototype.validate = function(silentMode) {\n        this.getGroupManager().unmarkInvalidGroups(this.getRootTable())\n\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i],\n                externalEditor = this.findExternalParameterEditor(editor.propertyDefinition.property)\n\n            if (externalEditor && externalEditor.isEditorVisible()) {\n                if (!externalEditor.validate(silentMode)) {\n                    if (!silentMode) {\n                        editor.markInvalid()\n                    }\n                    return false\n                }\n                else {\n                    continue\n                }\n            }\n\n            if (!editor.validate(silentMode)) {\n                if (!silentMode) {\n                    editor.markInvalid()\n                }\n                return false\n            }\n        }\n\n        return true\n    }\n\n    Surface.prototype.hasChanges = function(originalValues) {\n        var values = originalValues !== undefined ? originalValues : this.originalValues\n\n        return !this.comparePropertyValues(values, this.getValues())\n    }\n\n    // EVENT HANDLERS\n    //\n\n    Surface.prototype.onGroupClick = function(ev) {\n        var row = ev.currentTarget\n\n        this.toggleGroup(row)\n\n        $.oc.foundation.event.stop(ev)\n        return false\n    }\n\n    // DEFAULT OPTIONS\n    // ============================\n\n    Surface.DEFAULTS = {\n        enableExternalParameterEditor: false,\n        onChange: null,\n        onPopupDisplayed: null,\n        onPopupHidden: null,\n        onGetInspectableElement: null\n    }\n\n    // REGISTRATION\n    // ============================\n\n    $.oc.inspector.surface = Surface\n    $.oc.inspector.removedProperty = {removed: true}\n    $.oc.inspector.invalidProperty = {invalid: true}\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.validationset.js",
    "content": "/*\n * Inspector validation set class.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n      if ($.oc.inspector.validators === undefined)\n        $.oc.inspector.validators = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var ValidationSet = function(options, propertyName) {\n        this.validators = []\n\n        this.options = options\n        this.propertyName = propertyName\n        Base.call(this)\n\n        this.createValidators()\n    }\n\n    ValidationSet.prototype = Object.create(BaseProto)\n    ValidationSet.prototype.constructor = Base\n\n    ValidationSet.prototype.dispose = function() {\n        this.disposeValidators()\n        this.validators = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    ValidationSet.prototype.disposeValidators = function() {\n        for (var i = 0, len = this.validators.length; i < len; i++) {\n            this.validators[i].dispose()\n        }\n    }\n\n    ValidationSet.prototype.throwError = function(errorMessage) {\n        throw new Error(errorMessage + ' Property: ' + this.propertyName)\n    }\n\n    ValidationSet.prototype.createValidators = function() {\n        // Handle legacy validation syntax properties:\n        //\n        // - required\n        // - validationPattern\n        // - validationMessage \n\n        if ((this.options.required !== undefined ||\n            this.options.validationPattern !== undefined ||\n            this.options.validationMessage !== undefined) &&\n            this.options.validation !== undefined) {\n            this.throwError('Legacy and new validation syntax should not be mixed.')\n        }\n\n        if (this.options.required !== undefined && this.options.required) {\n            var validator = new $.oc.inspector.validators.required({\n                message: this.options.validationMessage\n            })\n\n            this.validators.push(validator)\n        }\n\n        if (this.options.validationPattern !== undefined) {\n            var validator = new $.oc.inspector.validators.regex({\n                message: this.options.validationMessage,\n                pattern: this.options.validationPattern\n            })\n\n            this.validators.push(validator)\n        }\n\n        //\n        // Handle new validation syntax\n        //\n\n        if (this.options.validation === undefined) {\n            return\n        }\n\n        for (var validatorName in this.options.validation) {\n            if ($.oc.inspector.validators[validatorName] == undefined) {\n                this.throwError('Inspector validator \"' + validatorName + '\" is not found in the $.oc.inspector.validators namespace.')\n            }\n\n            var validator = new $.oc.inspector.validators[validatorName](\n                    this.options.validation[validatorName]\n                )\n\n            this.validators.push(validator)\n        }\n    }\n\n    ValidationSet.prototype.validate = function(value) {\n        try {\n            for (var i = 0, len = this.validators.length; i < len; i++) {\n                var validator = this.validators[i],\n                    errorMessage = validator.isValid(value)\n\n                if (typeof errorMessage === 'string') {\n                    return errorMessage\n                }\n            }\n\n            return null\n        }\n        catch (err) {\n            this.throwError(err)\n        }\n    }\n\n    $.oc.inspector.validationSet = ValidationSet\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.validator.base.js",
    "content": "/*\n * Inspector validator base class.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc.inspector.validators === undefined)\n        $.oc.inspector.validators = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var BaseValidator = function(options) {\n        this.options = options\n        this.defaultMessage = 'Invalid property value.'\n\n        Base.call(this)\n    }\n\n    BaseValidator.prototype = Object.create(BaseProto)\n    BaseValidator.prototype.constructor = Base\n\n    BaseValidator.prototype.dispose = function() {\n        this.defaultMessage = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    BaseValidator.prototype.getMessage = function(defaultMessage) {\n        if (this.options.message !== undefined) {\n            return this.options.message\n        }\n\n        if (defaultMessage !== undefined) {\n            return defaultMessage\n        }\n\n        return this.defaultMessage\n    }\n\n    BaseValidator.prototype.isScalar = function(value) {\n        if (value === undefined || value === null) {\n            return true\n        }\n\n        return !!(typeof value === 'string' || typeof value == 'number' || typeof value == 'boolean');\n    }\n\n    BaseValidator.prototype.isValid = function(value) {\n        return null\n    }\n\n    $.oc.inspector.validators.base = BaseValidator\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.validator.basenumber.js",
    "content": "/*\n * Base class for Inspector numeric validators.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.base,\n        BaseProto = Base.prototype\n\n    var BaseNumber = function(options) {\n        Base.call(this, options)\n    }\n\n    BaseNumber.prototype = Object.create(BaseProto)\n    BaseNumber.prototype.constructor = Base\n\n    BaseNumber.prototype.doCommonChecks = function(value) {\n       if (this.options.min !== undefined || this.options.max !== undefined) {\n            if (this.options.min !== undefined) {\n                if (this.options.min.value === undefined) {\n                    throw new Error('The min.value parameter is not defined in the Inspector validator configuration')\n                }\n\n                if (value < this.options.min.value) {\n                    return this.options.min.message !== undefined ?\n                        this.options.min.message :\n                        \"The value should not be less than \" + this.options.min.value\n                }\n            }\n\n            if (this.options.max !== undefined) {\n                if (this.options.max.value === undefined) {\n                    throw new Error('The max.value parameter is not defined in the table Inspector validator configuration')\n                }\n\n                if (value > this.options.max.value) {\n                    return this.options.max.message !== undefined ?\n                        this.options.max.message :\n                        \"The value should not be greater than \" + this.options.max.value\n                }\n            }\n        }\n    }\n\n    $.oc.inspector.validators.baseNumber = BaseNumber\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.validator.float.js",
    "content": "/*\n * Inspector float validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.baseNumber,\n        BaseProto = Base.prototype\n\n    var FloatValidator = function(options) {\n        Base.call(this, options)\n    }\n\n    FloatValidator.prototype = Object.create(BaseProto)\n    FloatValidator.prototype.constructor = Base\n\n    FloatValidator.prototype.isValid = function(value) {\n        if (!this.isScalar(value) || typeof value == 'boolean') {\n            this.throwError('The Float Inspector validator can only be used with string values.')\n        }\n\n        if (value === undefined || value === null) {\n            return null\n        }\n\n        var string = $.trim(String(value))\n\n        if (string.length === 0) {\n            return null\n        }\n\n        var testResult = this.options.allowNegative ? \n            /^[-]?([0-9]+\\.[0-9]+|[0-9]+)$/.test(string) : \n            /^([0-9]+\\.[0-9]+|[0-9]+)$/.test(string)\n\n        if (!testResult) {\n            var defaultMessage = this.options.allowNegative ?\n                'The value should be a floating point number.' :\n                'The value should be a positive floating point number.';\n\n            return this.getMessage(defaultMessage)\n        }\n\n        return this.doCommonChecks(parseFloat(string))\n    }\n\n    $.oc.inspector.validators.float = FloatValidator\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.validator.integer.js",
    "content": "/*\n * Inspector integer validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.baseNumber,\n        BaseProto = Base.prototype\n\n    var IntegerValidator = function(options) {\n        Base.call(this, options)\n    }\n\n    IntegerValidator.prototype = Object.create(BaseProto)\n    IntegerValidator.prototype.constructor = Base\n\n    IntegerValidator.prototype.isValid = function(value) {\n        if (!this.isScalar(value) || typeof value == 'boolean') {\n            this.throwError('The Integer Inspector validator can only be used with string values.')\n        }\n\n        if (value === undefined || value === null) {\n            return null\n        }\n\n        var string = $.trim(String(value))\n\n        if (string.length === 0) {\n            return null\n        }\n\n        var testResult = this.options.allowNegative ? \n            /^\\-?[0-9]*$/.test(string) : \n            /^[0-9]*$/.test(string)\n\n        if (!testResult) {\n            var defaultMessage = this.options.allowNegative ?\n                'The value should be an integer.' :\n                'The value should be a positive integer.';\n\n            return this.getMessage(defaultMessage)\n        }\n\n        return this.doCommonChecks(parseInt(string))\n    }\n\n    $.oc.inspector.validators.integer = IntegerValidator\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.validator.length.js",
    "content": "/*\n * Inspector length validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.base,\n        BaseProto = Base.prototype\n\n    var LengthValidator = function(options) {\n        Base.call(this, options)\n    }\n\n    LengthValidator.prototype = Object.create(BaseProto)\n    LengthValidator.prototype.constructor = Base\n\n    LengthValidator.prototype.isValid = function(value) {\n        if (value === undefined || value === null) {\n            return null\n        }\n\n        if (typeof value == 'boolean') {\n            this.throwError('The Length Inspector validator cannot work with Boolean values.')\n\n        }\n\n        var length = null\n\n        if(Object.prototype.toString.call(value) === '[object Array]' || typeof value === 'string') {\n            length = value.length\n        }\n        else if (typeof value === 'object') {\n            length = this.getObjectLength(value)\n        }\n\n        if (this.options.min !== undefined || this.options.max !== undefined) {\n            if (this.options.min !== undefined) {\n                if (this.options.min.value === undefined) {\n                    throw new Error('The min.value parameter is not defined in the Length Inspector validator configuration.')\n                }\n\n                if (length < this.options.min.value) {\n                    return this.options.min.message !== undefined ?\n                        this.options.min.message :\n                        \"The value should not be shorter than \" + this.options.min.value\n                }\n            }\n\n            if (this.options.max !== undefined) {\n                if (this.options.max.value === undefined)\n                    throw new Error('The max.value parameter is not defined in the Length Inspector validator configuration.')\n\n                if (length > this.options.max.value) {\n                    return this.options.max.message !== undefined ?\n                        this.options.max.message :\n                        \"The value should not be longer than \" + this.options.max.value\n                }\n            }\n        }\n    }\n\n    LengthValidator.prototype.getObjectLength = function(value) {\n        var result = 0\n\n        for (var key in value) {\n            result++\n        }\n\n        return result\n    }\n\n    $.oc.inspector.validators.length = LengthValidator\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.validator.regex.js",
    "content": "/*\n * Inspector regex validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.base,\n        BaseProto = Base.prototype\n\n    var RegexValidator = function(options) {\n        Base.call(this, options)\n    }\n\n    RegexValidator.prototype = Object.create(BaseProto)\n    RegexValidator.prototype.constructor = Base\n\n    RegexValidator.prototype.isValid = function(value) {\n        if (this.options.pattern === undefined) {\n            this.throwError('The pattern parameter is not defined in the Regex Inspector validator configuration.')\n        }\n\n        if (!this.isScalar(value)) {\n            this.throwError('The Regex Inspector validator can only be used with string values.')\n        }\n\n        if (value === undefined || value === null) {\n            return null\n        }\n\n        var string = $.trim(String(value))\n\n        if (string.length === 0) {\n            return null\n        }\n\n        var regexObj = new RegExp(this.options.pattern, this.options.modifiers)\n\n        return regexObj.test(string) ? null : this.getMessage()\n    }\n\n    $.oc.inspector.validators.regex = RegexValidator\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.validator.required.js",
    "content": "/*\n * Inspector required validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.base,\n        BaseProto = Base.prototype\n\n    var RequiredValidator = function(options) {\n        Base.call(this, options)\n\n        this.defaultMessage = 'The property is required.'\n    }\n\n    RequiredValidator.prototype = Object.create(BaseProto)\n    RequiredValidator.prototype.constructor = Base\n\n    RequiredValidator.prototype.isValid = function(value) {\n        if (value === undefined || value === null) {\n            return this.getMessage()\n        }\n\n        if (typeof value === 'boolean') {\n            return value ? null : this.getMessage()\n        }\n\n        if (typeof value === 'object') {\n            return !$.isEmptyObject(value) ? null : this.getMessage()\n        }\n\n        return $.trim(String(value)).length > 0 ? null : this.getMessage()\n    }\n\n    $.oc.inspector.validators.required = RequiredValidator\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.wrapper.base.js",
    "content": "/*\n * Inspector wrapper base class.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    if ($.oc.inspector.wrappers === undefined)\n        $.oc.inspector.wrappers = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var BaseWrapper = function($element, sourceWrapper, options) {\n        this.$element = $element\n\n        this.options = $.extend({}, BaseWrapper.DEFAULTS, typeof options == 'object' && options)\n        this.switched = false\n        this.configuration = null\n\n        Base.call(this)\n\n        if (!sourceWrapper) {\n            if (!this.triggerShowingAndInit()) {\n                // this.init() is called inside triggerShowing()\n\n                return\n            }\n\n            this.surface = null\n            this.title = null\n            this.description = null\n        }\n        else {\n            this.surface = sourceWrapper.surface\n            this.title = sourceWrapper.title\n            this.description = sourceWrapper.description\n\n            sourceWrapper = null\n\n            this.init()\n        }\n    }\n\n    BaseWrapper.prototype = Object.create(BaseProto)\n    BaseWrapper.prototype.constructor = Base\n\n    BaseWrapper.prototype.dispose = function() {\n        if (!this.switched) {\n            this.$element.removeClass('inspector-open');\n            this.setInspectorVisibleFlag(false);\n\n            this.$element.trigger('hidden.oc.inspector');\n        }\n\n        if (this.surface !== null && this.surface.options.onGetInspectableElement === this.proxy(this.onGetInspectableElement)) {\n            this.surface.options.onGetInspectableElement = null;\n        }\n\n        this.surface = null;\n        this.$element = null;\n        this.title = null;\n        this.description = null;\n        this.configuration = null;\n\n        BaseProto.dispose.call(this)\n    }\n\n    BaseWrapper.prototype.init = function() {\n        // Wrappers can create a new surface or inject an existing\n        // surface to the UI they manage.\n        //\n        // If there is no surface provided in the wrapper constructor,\n        // the wrapper first loads the Inspector configuration and values\n        // and then calls the createSurfaceAndUi() method with all information\n        // required for creating a new Inspector surface and UI.\n\n        if (!this.surface) {\n            this.loadConfiguration()\n        }\n        else {\n            this.adoptSurface()\n        }\n\n        this.$element.addClass('inspector-open')\n        this.$element.trigger('showed.oc.inspector')\n    }\n\n    //\n    // Helper methods\n    //\n\n    BaseWrapper.prototype.getElementValuesInput = function() {\n        return this.$element.find('> input[data-inspector-values]')\n    }\n\n    BaseWrapper.prototype.normalizePropertyCode = function(code, configuration) {\n        var lowerCaseCode = code.toLowerCase()\n\n        for (var index in configuration) {\n            var propertyInfo = configuration[index]\n\n            if (propertyInfo.property.toLowerCase() == lowerCaseCode) {\n                return propertyInfo.property\n            }\n        }\n\n        return code\n    }\n\n    BaseWrapper.prototype.isExternalParametersEditorEnabled = function() {\n        return this.$element.closest('[data-inspector-external-parameters]').length > 0\n    }\n\n    BaseWrapper.prototype.initSurface = function(containerElement, properties, values) {\n        var options = this.$element.data() || {}\n\n        options.enableExternalParameterEditor = this.isExternalParametersEditorEnabled()\n        options.onGetInspectableElement = this.proxy(this.onGetInspectableElement)\n\n        this.surface = new $.oc.inspector.surface(\n            containerElement,\n            properties,\n            values,\n            $.oc.inspector.helpers.generateElementUniqueId(this.$element.get(0)),\n            options)\n    }\n\n    BaseWrapper.prototype.isLiveUpdateEnabled = function() {\n        return false\n    }\n\n    //\n    // Wrapper API\n    //\n\n    BaseWrapper.prototype.createSurfaceAndUi = function(properties, values) {\n\n    }\n\n    BaseWrapper.prototype.setInspectorVisibleFlag = function(value) {\n        this.$element.data('oc.inspectorVisible', value)\n    }\n\n    BaseWrapper.prototype.adoptSurface = function() {\n        this.surface.options.onGetInspectableElement = this.proxy(this.onGetInspectableElement)\n    }\n\n    BaseWrapper.prototype.cleanupAfterSwitch = function() {\n        this.switched = true\n        this.dispose()\n    }\n\n    //\n    // Values\n    //\n\n    BaseWrapper.prototype.loadValues = function(configuration) {\n        var $valuesField = this.getElementValuesInput();\n\n        if ($valuesField.length > 0) {\n            var valuesStr = $.trim($valuesField.val());\n\n            try {\n                return valuesStr.length === 0 ? {} : JSON.parse(valuesStr);\n            }\n            catch (err) {\n                throw new Error('Error parsing Inspector field values. ' + err);\n            }\n        }\n\n        var values = {},\n            attributes = this.$element.get(0).attributes;\n\n        for (var i=0, len = attributes.length; i < len; i++) {\n            var attribute = attributes[i],\n                matches = [];\n\n            if (matches = attribute.name.match(/^data-property-(.*)$/)) {\n                // Important - values contained in data-property-xxx attributes are\n                // considered strings and only parsed with JSON when they begin with\n                // the json: protocol prefix.\n                var normalizedPropertyName = this.normalizePropertyCode(matches[1], configuration),\n                    attrVal = attribute.value;\n\n                if (attrVal.startsWith('json:')) {\n                    try {\n                        attrVal = JSON.parse(decodeURIComponent(attrVal.substring(5)));\n                    }\n                    catch (e) {\n                        attrVal = '';\n                    }\n                }\n\n                values[normalizedPropertyName] = attrVal;\n            }\n        }\n\n        return values;\n    }\n\n    BaseWrapper.prototype.applyValues = function(liveUpdateMode) {\n        var $valuesField = this.getElementValuesInput(),\n            values = liveUpdateMode\n                ? this.surface.getValidValues()\n                : this.surface.getValues();\n\n        if (liveUpdateMode) {\n            // In the live update mode, when only valid values are applied,\n            // we don't want to change all other values (invalid properties).\n            var existingValues = this.loadValues(this.configuration);\n            for (var property in values) {\n                if (values[property] !== $.oc.inspector.invalidProperty) {\n                    existingValues[property] = values[property];\n                }\n            }\n\n            // Properties that use settings like ignoreIfPropertyEmpty could\n            // be removed from the list returned by getValidValues(). Removed\n            // properties should be removed from the result list.\n            var filteredValues = {};\n\n            for (var property in existingValues) {\n                if (values.hasOwnProperty(property)) {\n                    filteredValues[property] = existingValues[property];\n                }\n            }\n\n            values = filteredValues;\n        }\n\n        if ($valuesField.length > 0) {\n            $valuesField.val(JSON.stringify(values));\n        }\n        else {\n            for (var property in values) {\n                var value = values[property];\n\n                if (Array.isArray(value) || $.isPlainObject(value)) {\n                    value = 'json:' + encodeURIComponent(JSON.stringify(value));\n                }\n\n                this.$element.attr('data-property-' + property, value);\n            }\n        }\n\n        // In the live update mode the livechange event is triggered\n        // regardless of whether Surface properties match or don't match\n        // the original properties of the inspectable element. Without it\n        // there could be undesirable side effects.\n\n        if (liveUpdateMode) {\n            this.$element.trigger('livechange');\n        }\n        else {\n            var hasChanges = false;\n\n            if (this.isLiveUpdateEnabled()) {\n                var currentValues = this.loadValues(this.configuration);\n\n                // If the Inspector setup supports the live update mode,\n                // evaluate changes as a difference between the current element\n                // properties and internal properties stored in the Surface.\n                // If there is no differences, the properties have already\n                // been applied with a preceding live update.\n                hasChanges = this.surface.hasChanges(currentValues);\n            }\n            else {\n                hasChanges = this.surface.hasChanges();\n            }\n\n            if (hasChanges) {\n                this.$element.trigger('change');\n            }\n        }\n    }\n\n    //\n    // Configuration\n    //\n\n    BaseWrapper.prototype.loadConfiguration = function() {\n        var configString = this.$element.data('inspector-config'),\n            result = {\n                properties: {},\n                title: null,\n                description: null\n            };\n\n        result.title = this.$element.data('inspector-title');\n        result.description = this.$element.data('inspector-description');\n\n        if (configString !== undefined) {\n            result.properties = this.parseConfiguration(configString);\n\n            this.configurationLoaded(result);\n            return;\n        }\n\n        var $configurationField = this.$element.find('> input[data-inspector-config]');\n\n        if ($configurationField.length > 0) {\n            result.properties = this.parseConfiguration($configurationField.val());\n            this.configurationLoaded(result);\n            return;\n        }\n\n        var $form = this.$element.closest('form'),\n            data = this.$element.data(),\n            self = this;\n\n        $.oc.stripeLoadIndicator.show();\n\n        $form.request($.oc.inspector.helpers.getEventHandler(this.$element, 'onGetInspectorConfiguration'), {\n            data: data\n        })\n        .done(function inspectorConfigurationRequestDoneClosure(data) {\n            self.onConfigurationRequestDone(data, result);\n        })\n        .fail(function inspectorConfigurationRequestErrorClosure(data) {\n            self.$element.trigger('error.oc.inspector');\n        })\n        .always(function() {\n            $.oc.stripeLoadIndicator.hide();\n        });\n    }\n\n    BaseWrapper.prototype.parseConfiguration = function(configuration) {\n        if (!Array.isArray(configuration) && !$.isPlainObject(configuration)) {\n            if ($.trim(configuration) === 0) {\n                return {};\n            }\n\n            try {\n               return JSON.parse(configuration);\n            }\n            catch(err) {\n                throw new Error('Error parsing Inspector configuration. ' + err);\n            }\n        }\n        else {\n            return configuration;\n        }\n    }\n\n    BaseWrapper.prototype.configurationLoaded = function(configuration) {\n        var values = this.loadValues(configuration.properties);\n\n        this.title = configuration.title;\n        this.description = configuration.description;\n        this.configuration = configuration;\n\n        this.createSurfaceAndUi(configuration.properties, values);\n    }\n\n    BaseWrapper.prototype.onConfigurationRequestDone = function(data, result) {\n        result.properties = this.parseConfiguration(data.configuration.properties)\n\n        if (data.configuration.title !== undefined) {\n            result.title = data.configuration.title\n        }\n\n        if (data.configuration.description !== undefined) {\n            result.description = data.configuration.description\n        }\n\n        this.configurationLoaded(result)\n    }\n\n    //\n    // Events\n    //\n\n    BaseWrapper.prototype.triggerShowingAndInit = function() {\n        var e = $.Event('showing.oc.inspector');\n\n        this.$element.trigger(e, [{callback: this.proxy(this.init)}]);\n        if (e.isDefaultPrevented()) {\n            this.$element = null;\n\n            return false;\n        }\n\n        if (!e.isPropagationStopped()) {\n            this.init();\n        }\n    }\n\n    BaseWrapper.prototype.triggerHiding = function() {\n        var hidingEvent = $.Event('hiding.oc.inspector'),\n            values = this.surface.getValues()\n\n        this.$element.trigger(hidingEvent, [{values: values}])\n        return !hidingEvent.isDefaultPrevented();\n    }\n\n    BaseWrapper.prototype.onGetInspectableElement = function() {\n        return this.$element;\n    }\n\n    BaseWrapper.DEFAULTS = {\n        containerSupported: false\n    };\n\n    $.oc.inspector.wrappers.base = BaseWrapper;\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.wrapper.container.js",
    "content": "/*\n * Inspector container wrapper.\n */\n+function ($) { \"use strict\";\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.inspector.wrappers.base,\n        BaseProto = Base.prototype\n\n    var InspectorContainer = function($element, surface, options) {\n        if (!options.container) {\n            throw new Error('Cannot create Inspector container wrapper without a container element.')\n        }\n\n        this.surfaceContainer = null\n\n        Base.call(this, $element, surface, options)\n    }\n\n    InspectorContainer.prototype = Object.create(BaseProto)\n    InspectorContainer.prototype.constructor = Base\n\n    InspectorContainer.prototype.init = function() {\n        this.registerHandlers()\n\n        BaseProto.init.call(this)\n    }\n\n    InspectorContainer.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.removeControls()\n\n        this.surfaceContainer = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    InspectorContainer.prototype.createSurfaceAndUi = function(properties, values) {\n        this.buildUi()\n\n        this.initSurface(this.surfaceContainer, properties, values)\n\n        if (this.isLiveUpdateEnabled()) {\n            this.surface.options.onChange = this.proxy(this.onLiveUpdate)\n        }\n    }\n\n    InspectorContainer.prototype.adoptSurface = function() {\n        this.buildUi()\n\n        this.surface.moveToContainer(this.surfaceContainer)\n\n        if (this.isLiveUpdateEnabled()) {\n            this.surface.options.onChange = this.proxy(this.onLiveUpdate)\n        }\n\n        BaseProto.adoptSurface.call(this)\n    }\n\n    InspectorContainer.prototype.buildUi = function() {\n        var scrollable = this.isScrollable(),\n            head = this.buildHead(),\n            layoutElements = this.buildLayout()\n\n        layoutElements.headContainer.appendChild(head)\n\n        if (scrollable) {\n            var scrollpad = this.buildScrollpad()\n\n            this.surfaceContainer = scrollpad.container\n            layoutElements.bodyContainer.appendChild(scrollpad.scrollpad)\n\n            $(scrollpad.scrollpad).scrollpad()\n        }\n        else {\n            this.surfaceContainer = layoutElements.bodyContainer\n        }\n\n        this.setInspectorVisibleFlag(true)\n    }\n\n    InspectorContainer.prototype.buildHead = function() {\n        var container = document.createElement('div'),\n            header = document.createElement('h3'),\n            paragraph = document.createElement('p'),\n            detachButton = document.createElement('span'),\n            closeButton = document.createElement('span')\n\n        container.setAttribute('class', 'inspector-header')\n        detachButton.setAttribute('class', 'oc-icon-external-link-square detach')\n        closeButton.setAttribute('class', 'close')\n\n        header.textContent = this.title\n        paragraph.textContent = this.description\n        closeButton.innerHTML = '&times;';\n\n        container.appendChild(header)\n        container.appendChild(paragraph)\n        container.appendChild(detachButton)\n        container.appendChild(closeButton)\n\n        return container\n    }\n\n    InspectorContainer.prototype.buildScrollpad = function() {\n        var scrollpad = document.createElement('div'),\n            scrollWrapper = document.createElement('div'),\n            scrollableContainer = document.createElement('div')\n\n        scrollpad.setAttribute('class', 'control-scrollpad')\n        scrollpad.setAttribute('data-control', 'scrollpad')\n        scrollWrapper.setAttribute('class', 'scroll-wrapper inspector-wrapper')\n\n        scrollpad.appendChild(scrollWrapper)\n        scrollWrapper.appendChild(scrollableContainer)\n\n        return {\n            scrollpad: scrollpad,\n            container: scrollableContainer\n        }\n    }\n\n    InspectorContainer.prototype.buildLayout = function() {\n        var layout = document.createElement('div'),\n            headRow = document.createElement('div'),\n            bodyRow = document.createElement('div')\n\n        layout.setAttribute('class', 'flex-layout-column fill-container')\n        headRow.setAttribute('class', 'flex-layout-item fix')\n        bodyRow.setAttribute('class', 'flex-layout-item stretch relative')\n\n        layout.appendChild(headRow)\n        layout.appendChild(bodyRow)\n\n        this.options.container.get(0).appendChild(layout)\n\n        $.oc.foundation.controlUtils.markDisposable(layout)\n        this.registerLayoutHandlers(layout)\n  \n        return {\n            headContainer: headRow,\n            bodyContainer: bodyRow\n        }\n    }\n\n    InspectorContainer.prototype.validateAndApply = function() {\n        if (!this.surface.validate()) {\n            return false\n        }\n\n        this.applyValues()\n        return true\n    }\n\n    InspectorContainer.prototype.isScrollable = function() {\n        return this.options.container.data('inspector-scrollable') !== undefined\n    }\n\n    InspectorContainer.prototype.isLiveUpdateEnabled = function() {\n        return this.options.container.data('inspector-live-update') !== undefined\n    }\n\n    InspectorContainer.prototype.getLayout = function() {\n        return this.options.container.get(0).querySelector('div.flex-layout-column')\n    }\n\n    InspectorContainer.prototype.registerLayoutHandlers = function(layout) {\n        var $layout = $(layout)\n\n        $layout.one('dispose-control', this.proxy(this.dispose))\n        $layout.on('click', 'span.close', this.proxy(this.onClose))\n        $layout.on('click', 'span.detach', this.proxy(this.onDetach))\n    }\n\n    InspectorContainer.prototype.registerHandlers = function() {\n        this.options.container.on('apply.oc.inspector', this.proxy(this.onApplyValues))\n        this.options.container.on('beforeContainerHide.oc.inspector', this.proxy(this.onBeforeHide))\n    }\n\n    InspectorContainer.prototype.unregisterHandlers = function() {\n        var $layout = $(this.getLayout())\n\n        this.options.container.off('apply.oc.inspector', this.proxy(this.onApplyValues))\n        this.options.container.off('beforeContainerHide.oc.inspector', this.proxy(this.onBeforeHide))\n\n        $layout.off('dispose-control', this.proxy(this.dispose))\n        $layout.off('click', 'span.close', this.proxy(this.onClose))\n        $layout.off('click', 'span.detach', this.proxy(this.onDetach))\n\n        if (this.surface !== null && this.surface.options.onChange === this.proxy(this.onLiveUpdate)) {\n            this.surface.options.onChange = null\n        }\n    }\n\n    InspectorContainer.prototype.removeControls = function() {\n        if (this.isScrollable()) {\n            this.options.container.find('.control-scrollpad').scrollpad('dispose')\n        }\n\n        var layout = this.getLayout()\n        layout.parentNode.removeChild(layout)\n    }\n\n    InspectorContainer.prototype.onApplyValues = function(ev) {\n        if (!this.validateAndApply()) {\n            ev.preventDefault()\n            return false\n        }\n    }\n\n    InspectorContainer.prototype.onBeforeHide = function(ev) {\n        if (!this.triggerHiding()) {\n            ev.preventDefault()\n            return false\n        }\n    }\n\n    InspectorContainer.prototype.onClose = function(ev) {\n        if (!this.validateAndApply()) {\n            ev.preventDefault()\n            return false\n        }\n\n        if (!this.triggerHiding()) {\n            ev.preventDefault()\n            return false\n        }\n\n        this.surface.dispose()\n\n        this.dispose()\n    }\n\n    InspectorContainer.prototype.onLiveUpdate = function() {\n        this.applyValues(true)\n    }\n\n    InspectorContainer.prototype.onDetach = function() {\n        $.oc.inspector.manager.switchToPopup(this)\n    }\n\n    $.oc.inspector.wrappers.container = InspectorContainer\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/inspector/inspector.wrapper.popup.js",
    "content": "/*\n * Inspector popup wrapper.\n */\n+function ($) { \"use strict\";\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.inspector.wrappers.base,\n        BaseProto = Base.prototype\n\n    var InspectorPopup = function($element, surface, options) {\n        this.$popoverContainer = null\n        this.popoverObj = null\n        this.cleaningUp = false\n\n        Base.call(this, $element, surface, options)\n    }\n\n    InspectorPopup.prototype = Object.create(BaseProto)\n    InspectorPopup.prototype.constructor = Base\n\n    InspectorPopup.prototype.dispose = function() {\n        this.unregisterHandlers();\n\n        this.$popoverContainer = null;\n        this.popoverObj = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    InspectorPopup.prototype.createSurfaceAndUi = function(properties, values, title, description) {\n        this.showPopover();\n\n        this.initSurface(this.$popoverContainer.find('[data-surface-container]').get(0), properties, values);\n        this.repositionPopover();\n\n        this.registerPopupHandlers();\n    }\n\n    InspectorPopup.prototype.adoptSurface = function() {\n        this.showPopover();\n\n        this.surface.moveToContainer(this.$popoverContainer.find('[data-surface-container]').get(0));\n        this.repositionPopover();\n\n        this.registerPopupHandlers();\n\n        BaseProto.adoptSurface.call(this);\n    }\n\n    InspectorPopup.prototype.cleanupAfterSwitch = function() {\n        this.cleaningUp = true;\n        this.switched = true;\n\n        this.forceClose();\n\n        // The parent cleanupAfterSwitch() is not called because\n        // disposing happens in onHide() triggered by forceClose()\n    }\n\n    InspectorPopup.prototype.getPopoverContents = function() {\n        return '<div class=\"popover-head\">                          \\\n                    <h3 data-inspector-title></h3>                  \\\n                    <p data-inspector-description></p>              \\\n                    <button type=\"button\" class=\"btn-close\"         \\\n                        data-dismiss=\"popover\"                      \\\n                        aria-hidden=\"true\"></button>                \\\n                </div>                                              \\\n                <form autocomplete=\"off\" onsubmit=\"return false\">   \\\n                    <div data-surface-container></div>              \\\n                <form>'\n    }\n\n    InspectorPopup.prototype.showPopover = function() {\n        var offset = this.$element.data('inspector-offset'),\n            offsetX = this.$element.data('inspector-offset-x'),\n            offsetY = this.$element.data('inspector-offset-y'),\n            placement = this.$element.data('inspector-placement'),\n            fallbackPlacement = this.$element.data('inspector-fallback-placement');\n\n        if (offset === undefined) {\n            offset = 15;\n        }\n\n        if (placement === undefined) {\n            placement = 'bottom';\n        }\n\n        if (fallbackPlacement === undefined) {\n            fallbackPlacement = 'bottom';\n        }\n\n        this.$element.ocPopover({\n            content: this.getPopoverContents(),\n            highlightModalTarget: true,\n            modal: true,\n            placement: placement,\n            fallbackPlacement: fallbackPlacement,\n            containerClass: 'control-inspector',\n            container:  this.$element.data('inspector-container'),\n            offset: offset,\n            offsetX: offsetX,\n            offsetY: offsetY,\n            width: 450\n        });\n\n        this.setInspectorVisibleFlag(true);\n\n        this.popoverObj = this.$element.data('oc.popover');\n        this.$popoverContainer = this.popoverObj.$container;\n\n        this.$popoverContainer.addClass('inspector-temporary-placement');\n\n        if (this.options.inspectorCssClass !== undefined) {\n            this.$popoverContainer.addClass(this.options.inspectorCssClass);\n        }\n\n        if (this.options.containerSupported) {\n            var moveToContainerButton = $('<span class=\"inspector-move-to-container oc-icon-download\">');\n            this.$popoverContainer.find('.popover-head').append(moveToContainerButton);\n        }\n\n        this.$popoverContainer.find('[data-inspector-title]').text(this.title);\n        this.$popoverContainer.find('[data-inspector-description]').text(this.description);\n    }\n\n    InspectorPopup.prototype.repositionPopover = function() {\n        this.popoverObj.reposition();\n        this.$popoverContainer.removeClass('inspector-temporary-placement');\n        this.$popoverContainer.find('div[data-surface-container] > div').trigger('focus-control');\n    }\n\n    InspectorPopup.prototype.forceClose = function() {\n        this.$popoverContainer.trigger('close.oc.popover')\n    }\n\n    InspectorPopup.prototype.registerPopupHandlers = function() {\n        this.surface.options.onPopupDisplayed = this.proxy(this.onPopupEditorDisplayed)\n        this.surface.options.onPopupHidden = this.proxy(this.onPopupEditorHidden)\n        this.popoverObj.options.onCheckDocumentClickTarget = this.proxy(this.onCheckDocumentClickTarget)\n\n        this.$element.on('hiding.oc.popover', this.proxy(this.onBeforeHide))\n        this.$element.on('hide.oc.popover', this.proxy(this.onHide))\n        this.$popoverContainer.on('keydown', this.proxy(this.onPopoverKeyDown))\n\n        if (this.options.containerSupported) {\n            this.$popoverContainer.on('click', 'span.inspector-move-to-container', this.proxy(this.onMoveToContainer))\n        }\n    }\n\n    InspectorPopup.prototype.unregisterHandlers = function() {\n        this.popoverObj.options.onCheckDocumentClickTarget = null\n\n        this.$element.off('hiding.oc.popover', this.proxy(this.onBeforeHide))\n        this.$element.off('hide.oc.popover', this.proxy(this.onHide))\n        this.$popoverContainer.off('keydown', this.proxy(this.onPopoverKeyDown))\n\n        if (this.options.containerSupported) {\n            this.$popoverContainer.off('click', 'span.inspector-move-to-container', this.proxy(this.onMoveToContainer))\n        }\n\n        this.surface.options.onPopupDisplayed = null\n        this.surface.options.onPopupHidden = null\n    }\n\n    InspectorPopup.prototype.onBeforeHide = function(ev) {\n        if (this.cleaningUp) {\n            return\n        }\n\n        if (!this.surface.validate()) {\n            ev.preventDefault()\n            return false\n        }\n\n        if (!this.triggerHiding()) {\n            ev.preventDefault()\n            return false\n        }\n\n        this.applyValues()\n    }\n\n    InspectorPopup.prototype.onHide = function(ev) {\n        this.dispose()\n    }\n\n    InspectorPopup.prototype.onPopoverKeyDown = function(ev) {\n        if(ev.key === 'Enter') {\n            $(ev.currentTarget).trigger('close.oc.popover')\n        }\n    }\n\n    InspectorPopup.prototype.onPopupEditorDisplayed = function() {\n        this.popoverObj.options.closeOnPageClick = false\n        this.popoverObj.options.closeOnEsc = false\n    }\n\n    InspectorPopup.prototype.onPopupEditorHidden = function() {\n        this.popoverObj.options.closeOnPageClick = true\n        this.popoverObj.options.closeOnEsc = true\n    }\n\n    InspectorPopup.prototype.onCheckDocumentClickTarget = function(element) {\n        if ($.contains(this.$element, element) || this.$element.get(0) === element) {\n            return true\n        }\n    }\n\n    InspectorPopup.prototype.onMoveToContainer = function() {\n        $.oc.inspector.manager.switchToContainer(this)\n    }\n\n    $.oc.inspector.wrappers.popup = InspectorPopup\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/controls/popover/README.md",
    "content": "# Popover\n\nRenders a richer version of a tooltip, called a popover.\n\n## Examples\n\n### Basic usage\n\nYou may add `data-control=\"popover\"` to an anchor or button to activate a popover. Use the `data-content` attribute to specify the contents.\n\n    <a\n        href=\"javascript:;\"\n        class=\"btn btn-primary\"\n        data-control=\"popover\"\n        data-content=\"I am a standard popover\">\n        Basic popover\n    </a>\n\n### Template content\n\nDefine the popover content as a template and reference it with `data-content-from=\"#myPopoverContent\"`.\n\n```html\n<script type=\"text/template\" id=\"myPopoverContent\">\n    <div class=\"popover-head\">\n        <h3>Popover</h3>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popover\"></button>\n    </div>\n    <div class=\"popover-body\">\n        I am a popover\n    </div>\n</script>\n```\n\n<div style=\"display:none\" id=\"myPopoverContent\">\n    <div class=\"popover-head\">\n        <h3>Popover</h3>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popover\"></button>\n    </div>\n    <div class=\"popover-body\">\n        I am a popover\n    </div>\n</div>\n\n    <a\n        href=\"javascript:;\"\n        class=\"btn btn-primary\"\n        data-control=\"popover\"\n        data-width=\"200\"\n        data-content-from=\"#myPopoverContent\">\n        Template popover\n    </a>\n\n### Event specified content\n\n```js\n$('#btn1').on('showing.oc.popover', function(e, popover) {\n    popover.options.content = '<div class=\"popover-body\">Some other content</div>'\n})\n```\n\n    <a\n        href=\"javascript:;\"\n        class=\"btn btn-primary\"\n        data-control=\"popover\"\n        data-placement=\"right\"\n        id=\"btn1\">\n        Event content popover\n    </a>\n\n<script>\n$(document).ready(function() {\n    $('#btn1').on('showing.oc.popover', function(e, popover) {\n        popover.options.content = '<div class=\"popover-body\">Some other content</div>'\n    })\n})\n</script>\n\n## JavaScript API\n\n```js\n$('#element').ocPopover({\n    content: '<p>This is a popover</p>'\n    placement: 'top'\n})\n```\n\n### Supported methods\n\n`.ocPopover('hide')`\nCloses the popover. There are 3 ways to close the popover: call it's `hide()` method, trigger the `close.oc.popover` on any element inside the popover or click an element with attribute `data-dismiss=\"popover\"` inside the popover.\n\n### Supported options\n\n- `placement`: top | bottom | left | right | center. The placement could automatically be changed if the popover doesn't fit into the desired position.\n\n- `fallbackPlacement`: top | bottom | left | right. The placement to use if the default placement and all other possible placements do not work. The default value is \"bottom\".\n\n- `content`: content HTML string or callback\n\n- `contentFrom`: selector to source the content HTML\n\n- `width`: content width, optional. If not specified, the content width will be used.\n\n- `modal`: make the popover modal\n\n- `highlightModalTarget`: \"pop\" the popover target above the overlay, making it highlighted. The feature assigns the target position relative.\n\n- `closeOnPageClick`: close the popover if the page was clicked outside the popover area.\n\n- `container`: the popover container selector or element. The default container is the document body. The container must be relative positioned.\n\n- `containerClass` - a CSS class to apply to the popover container element\n\n- `offset` - offset in pixels to add to the calculated position, to make the position more \"random\"\n\n- `offsetX` - X offset in pixels to add to the calculated position, to make the position more \"random\". If specified, overrides the offset property for the bottom and top popover placement.\n\n- `offsetY` - Y offset in pixels to add to the calculated position, to make the position more \"random\". If specified, overrides the offset property for the left and right popover placement.\n\n- `useAnimation`: adds animation to the open and close sequence, the equivalent of adding the CSS class 'fade' to the containerClass.\n\n### Supported events\n\n- `showing.oc.popover` - triggered before the popover is displayed. Allows to override the popover options (for example the content) or cancel the action with e.preventDefault()\n\n- `show.oc.popover` - triggered after the popover is displayed.\n\n- `hiding.oc.popover` - triggered before the popover is closed. Allows to cancel the action with e.preventDefault()\n\n- `hide.oc.popover` - triggered after the popover is hidden.\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/popover/popover.js",
    "content": "/*\n * Popover plugin\n *\n * Documentation: ../docs/popover.md\n */\n\n+function ($) { \"use strict\";\n\n    var Popover = function (element, options) {\n        this.$el = $(element);\n        this.options = options || {};\n        this.arrowSize = 15;\n        this.docClickHandler = null;\n        this.show();\n    }\n\n    Popover.prototype.hide = function() {\n        var e = $.Event('hiding.oc.popover', { relatedTarget: this.$el });\n        this.$el.trigger(e, this);\n\n        if (e.isDefaultPrevented()) {\n            return;\n        }\n\n        this.$container.removeClass('show');\n\n        if (this.options.modal) {\n            this.$overlay.removeClass('show');\n        }\n\n        this.disposeControls();\n\n        if (this.$container.hasClass('fade')) {\n            this.$container.one('transitionend', $.proxy(this.hidePopover, this));\n        }\n        else {\n            this.hidePopover();\n        }\n    }\n\n    Popover.prototype.disposeControls = function() {\n        if (this.$container) {\n            $.oc.foundation.controlUtils.disposeControls(this.$container.get(0));\n        }\n    }\n\n    Popover.prototype.hidePopover = function() {\n        this.$container.remove();\n\n        if (this.$overlay) {\n            this.$overlay.remove();\n        }\n\n        this.$el.removeClass('popover-highlight');\n        this.$el.trigger('hide.oc.popover');\n\n        this.$overlay = false;\n        this.$container = false;\n\n        this.$el.data('oc.popover', null);\n        $(document.body).removeClass('popover-open');\n\n        $(document).unbind('mousedown', this.docClickHandler);\n        $(document).off('.oc.popover');\n\n        this.docClickHandler = null;\n        this.options.onCheckDocumentClickTarget = null;\n    }\n\n    Popover.prototype.show = function(options) {\n        var self = this;\n\n        // Trigger the show event\n        var e = $.Event('showing.oc.popover', { relatedTarget: this.$el })\n        this.$el.trigger(e, this)\n        if (e.isDefaultPrevented()) {\n            return;\n        }\n\n        // Create the popover container and overlay\n        this.$container = $('<div />').addClass('control-popover');\n\n        if (this.options.containerClass) {\n            this.$container.addClass(this.options.containerClass);\n        }\n\n        if (this.options.useAnimation) {\n            this.$container.addClass('fade');\n        }\n\n        var $content = $('<div />').html(this.getContent());\n\n        this.$container.append($content);\n\n        if (this.options.width) {\n            this.$container.width(this.options.width);\n        }\n\n        // Create overlay\n        this.$overlay = $('<div />').addClass('popover-overlay');\n        $(document.body).append(this.$overlay);\n        if (this.options.highlightModalTarget) {\n            this.$el.addClass('popover-highlight');\n            this.$el.blur();\n        }\n\n        if (this.options.container) {\n            $(this.options.container).append(this.$container);\n        }\n        else {\n            $(document.body).append(this.$container);\n        }\n\n        // Determine the popover position\n        this.reposition();\n\n        $(window).on('resize', function() {\n            if (self.$container) {\n                self.reposition();\n            }\n        });\n\n        // Display the popover\n        this.$container.addClass('show');\n        if (this.options.modal) {\n            this.$overlay.addClass('show');\n        }\n\n        $(document.body).addClass('popover-open');\n        var showEvent = jQuery.Event('show.oc.popover', { relatedTarget: this.$container.get(0) });\n        this.$el.trigger(showEvent);\n\n        // Autofocus implementation\n        $('[data-popover-autofocus]:first', this.$container).focus();\n\n        // Bind events\n        this.$container.on('close.oc.popover', function(e){\n           self.hide();\n        });\n\n        this.$container.on('click', '[data-dismiss=popover]', function(e){\n           self.hide();\n           return false;\n        });\n\n        this.docClickHandler = $.proxy(this.onDocumentClick, this);\n        $(document).bind('mousedown', this.docClickHandler);\n\n        if (this.options.closeOnEsc) {\n            $(document).on('keyup.oc.popover', function(e){\n                if ($(e.target).hasClass('select2-offscreen')) {\n                    return false;\n               }\n\n                // The value of the option could be changed after the popover is displayed\n                if (!self.options.closeOnEsc) {\n                    return false;\n                }\n\n                if (e.key === 'Escape') {\n                   self.hide();\n                   return false;\n                }\n            });\n        }\n    }\n\n    Popover.prototype.reposition = function() {\n        var\n            placement = this.calcPlacement(),\n            position = this.calcPosition(placement);\n\n        this.$container.removeClass('placement-center placement-bottom placement-top placement-left placement-right');\n\n        this.$container.css({\n            left: position.x,\n            top: position.y\n        }).addClass('placement-'+placement);\n    }\n\n    Popover.prototype.getContainer = function () {\n        return this.$container.get(0);\n    }\n\n    Popover.prototype.getContent = function () {\n        if (this.options.contentFrom) {\n            return $(this.options.contentFrom).html();\n        }\n\n        if (typeof this.options.content == 'function') {\n            return this.options.content.call(this.$el[0], this);\n        }\n\n        return this.options.content;\n    }\n\n    Popover.prototype.calcDimensions = function() {\n        var\n            documentWidth = $(document).width(),\n            documentHeight = $(document).height(),\n            targetOffset = this.$el.offset(),\n            targetWidth = this.$el.outerWidth(),\n            targetHeight = this.$el.outerHeight();\n\n        return {\n            containerWidth: this.$container.outerWidth() + this.arrowSize,\n            containerHeight: this.$container.outerHeight() + this.arrowSize,\n            targetOffset: targetOffset,\n            targetHeight: targetHeight,\n            targetWidth: targetWidth,\n            spaceLeft: targetOffset.left,\n            spaceRight: documentWidth - (targetWidth + targetOffset.left),\n            spaceTop: targetOffset.top,\n            spaceBottom: documentHeight - (targetHeight + targetOffset.top),\n            spaceHorizontalBottom: documentHeight - targetOffset.top,\n            spaceVerticalRight: documentWidth - targetOffset.left,\n            documentWidth: documentWidth\n        };\n    }\n\n    Popover.prototype.fitsLeft = function(dimensions) {\n        return dimensions.spaceLeft >= dimensions.containerWidth &&\n            dimensions.spaceHorizontalBottom >= dimensions.containerHeight;\n    }\n\n    Popover.prototype.fitsRight = function(dimensions) {\n        return dimensions.spaceRight >= dimensions.containerWidth &&\n            dimensions.spaceHorizontalBottom >= dimensions.containerHeight;\n    }\n\n    Popover.prototype.fitsBottom = function(dimensions) {\n        return dimensions.spaceBottom >= dimensions.containerHeight &&\n            dimensions.spaceVerticalRight >= dimensions.containerWidth;\n    }\n\n    Popover.prototype.fitsTop = function(dimensions) {\n        return dimensions.spaceTop >= dimensions.containerHeight &&\n            dimensions.spaceVerticalRight >= dimensions.containerWidth;\n    }\n\n    Popover.prototype.calcPlacement = function() {\n        var\n            placement = this.options.placement,\n            dimensions = this.calcDimensions();\n\n        if (placement == 'center') {\n            return placement;\n        }\n\n        if (placement != 'bottom' && placement != 'top' && placement != 'left' && placement != 'right') {\n            placement = 'bottom';\n        }\n\n        var placementFunctions = {\n            top: this.fitsTop,\n            bottom: this.fitsBottom,\n            left: this.fitsLeft,\n            right: this.fitsRight\n        };\n\n        if (placementFunctions[placement](dimensions)) {\n            return placement;\n        }\n\n        for (var index in placementFunctions) {\n            if (placementFunctions[index](dimensions)) {\n                return index;\n            }\n        }\n\n        return this.options.fallbackPlacement;\n    }\n\n    Popover.prototype.calcPosition = function(placement) {\n        var dimensions = this.calcDimensions(),\n            result;\n\n        switch (placement) {\n            case 'left':\n                var realOffset = this.options.offsetY === undefined ? this.options.offset : this.options.offsetY;\n                result = {x: (dimensions.targetOffset.left - dimensions.containerWidth), y: dimensions.targetOffset.top + realOffset};\n            break;\n            case 'top':\n                var realOffset = this.options.offsetX === undefined ? this.options.offset : this.options.offsetX;\n                result = {x: dimensions.targetOffset.left + realOffset, y: (dimensions.targetOffset.top - dimensions.containerHeight)};\n            break;\n            case 'bottom':\n                var realOffset = this.options.offsetX === undefined ? this.options.offset : this.options.offsetX;\n                result = {x: dimensions.targetOffset.left + realOffset, y: (dimensions.targetOffset.top + dimensions.targetHeight + this.arrowSize)};\n            break;\n            case 'right':\n                var realOffset = this.options.offsetY === undefined ? this.options.offset : this.options.offsetY;\n                result = {x: (dimensions.targetOffset.left + dimensions.targetWidth + this.arrowSize), y: dimensions.targetOffset.top + realOffset};\n            break;\n            case 'center' :\n                var windowHeight = $(window).height();\n                result = {x: (dimensions.documentWidth/2 - dimensions.containerWidth/2), y: (windowHeight/2 - dimensions.containerHeight/2)};\n\n                if (result.y < 40) {\n                    result.y = 40;\n                }\n            break;\n        }\n\n        if (!this.options.container) {\n            return result;\n        }\n\n        var\n            $container = $(this.options.container),\n            containerOffset = $container.offset();\n\n        result.x -= containerOffset.left;\n        result.y -= containerOffset.top;\n\n        return result;\n    }\n\n    Popover.prototype.onDocumentClick = function(e) {\n        if (!this.options.closeOnPageClick) {\n            return;\n        }\n\n        if (this.options.onCheckDocumentClickTarget && this.options.onCheckDocumentClickTarget(e.target)) {\n            return;\n        }\n\n        if ($.contains(this.$container.get(0), e.target)) {\n            return;\n        }\n\n        this.hide();\n    }\n\n    Popover.DEFAULTS = {\n        placement: 'bottom',\n        fallbackPlacement: 'bottom',\n        content: '<p>Popover content<p>',\n        contentFrom: null,\n        width: false,\n        modal: false,\n        highlightModalTarget: false,\n        closeOnPageClick: true,\n        closeOnEsc: true,\n        container: false,\n        containerClass: null,\n        offset: 15,\n        useAnimation: false,\n        onCheckDocumentClickTarget: null\n    }\n\n    // POPOVER PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.ocPopover;\n\n    $.fn.ocPopover = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n\n        this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.popover')\n            var options = $.extend({}, Popover.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.popover', (data = new Popover(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args);\n            if (typeof result != 'undefined') return false;\n        });\n\n        return result ? result : this;\n    }\n\n    $.fn.ocPopover.Constructor = Popover;\n\n    // POPOVER NO CONFLICT\n    // =================\n\n    $.fn.ocPopover.noConflict = function () {\n        $.fn.ocPopover = old;\n        return this;\n    }\n\n    // POPOVER DATA-API\n    // ===============\n\n    $(document).on('click', '[data-control=popover]', function(e){\n        $(this).ocPopover();\n        return false;\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/popover/popover.less",
    "content": "//\n// Popover\n// --------------------------------------------------\n\n@color-popover-bg:                           @popup-bg;\n@color-popover-border:                       rgba(0,0,0,.15);\n@color-popover-head-bg:                      @popup-bg; // @tertiary-bg\n@color-popover-head-text:                    @primary-color;\n@color-popover-danger-bg:                    #ab2a1c;\n\ndiv.control-popover {\n    position: absolute;\n    background-clip: content-box;\n    left: 0;\n    top: 0;\n    z-index: @zindex-popover;\n    visibility: hidden;\n\n    &.fade, &.show {\n        visibility: visible;\n    }\n\n    &.fade {\n        & > div {\n            opacity: 0;\n            transition: all 0.3s, width 0s;\n            transform: scale(0.7);\n        }\n    }\n\n    &.fade.show {\n        & > div {\n            opacity: 1;\n            transform: scale(1);\n        }\n    }\n\n    & > div {\n        position: relative;\n        background: @color-popover-bg;\n        box-shadow: @overlay-box-shadow;\n        border-radius: 6px;\n\n        &:after, &:before {\n            position: absolute;\n        }\n\n        &:after { z-index: @zindex-popover + 1; }\n        &:before { z-index: @zindex-popover; }\n    }\n\n    &.placement-bottom {\n        > div {\n            &:after {\n                .triangle(up, 15px, 8px, @color-popover-bg);\n                left: 15px;\n                top: -8px;\n            }\n\n            &:before {\n                .triangle(up, 17px, 9px, @color-popover-border);\n                left: 14px;\n                top: -9px;\n            }\n        }\n\n        &.placement-bottom-right > div {\n            &:after {\n                left: auto;\n                right: 15px;\n            }\n\n            &:before {\n                left: auto;\n                right: 14px;\n            }\n        }\n    }\n\n    &.placement-top > div {\n        &:after {\n            .triangle(down, 15px, 8px, @color-popover-bg);\n            left: 15px;\n            bottom: -8px;\n        }\n\n        &:before {\n            .triangle(down, 17px, 9px, @color-popover-border);\n            left: 14px;\n            bottom: -9px;\n        }\n    }\n\n    &.placement-left > div {\n        &:after {\n            .triangle(right, 8px, 15px, @color-popover-bg);\n            right: -8px;\n            top: 7px;\n        }\n\n        &:before {\n            .triangle(right, 9px, 17px, @color-popover-border);\n            right: -9px;\n            top: 6px;\n        }\n    }\n\n    &.placement-right > div {\n        &:after {\n            .triangle(left, 8px, 15px, @color-popover-bg);\n            left: -8px;\n            top: 7px;\n        }\n\n        &:before {\n            .triangle(left, 9px, 17px, @color-popover-border);\n            left: -9px;\n            top: 6px;\n        }\n    }\n\n    div.popover-body {\n        padding: 15px;\n\n        &.form-container {\n            padding-bottom: 0;\n        }\n    }\n\n    div.popover-footer {\n        padding: 0 20px 20px 20px;\n    }\n\n    .popover-head {\n        background: @color-popover-head-bg;\n        padding: 14px 16px;\n        position: relative;\n        color: @color-popover-head-text;\n        .border-top-radius(6px);\n        border-bottom: 1px solid @color-popover-border;\n\n        &:before {\n            z-index: @zindex-popover + 2;\n            position: absolute;\n        }\n\n        h3 {\n            font-size: @font-size-base;\n            font-weight: 600;\n            margin-top: 0;\n            margin-bottom: 0;\n            padding-right: 15px;\n            line-height: 130%;\n        }\n\n        p {\n            font-size: @font-size-base - 2;\n            font-weight: normal;\n            margin: 5px 0 0 0;\n\n            &:empty {\n                display: none;\n            }\n        }\n\n        .btn-close, .close {\n            float: none;\n            position: absolute;\n            right: 11px;\n            top: 12px;\n            color: @color-popover-head-text;\n            outline: none;\n            opacity: .4;\n\n            &:hover {\n                opacity: 1;\n            }\n        }\n\n        .inspector-move-to-container {\n            opacity: .4;\n            position: absolute;\n            top: 14px;\n            right: 26px;\n            float: none;\n            color: @close-color;\n            cursor: pointer;\n            text-decoration: none;\n            line-height: 17px;\n\n            &:hover {\n                opacity: 1;\n                color: @close-color;\n            }\n\n            &:before {\n                .transform(~'rotate(270deg)');\n            }\n        }\n    }\n\n    &.placement-bottom .popover-head:before {\n        .triangle(up, 15px, 8px, @color-popover-head-bg);\n        left: 15px;\n        top: -8px;\n    }\n\n    &.placement-left .popover-head:before {\n        .triangle(right, 8px, 15px, @color-popover-head-bg);\n        right: -8px;\n        top: 7px;\n    }\n\n    &.placement-right .popover-head:before {\n        .triangle(left, 8px, 15px, @color-popover-head-bg);\n        left: -8px;\n        top: 7px;\n    }\n\n    &.popover-danger {\n        > div {\n            color: #fff;\n            background-color: @color-popover-danger-bg;\n            .popover-head {\n                p, h3 {\n                    color: #fff;\n                }\n                .btn-close {\n                    filter: var(--bs-btn-close-white-filter);\n                }\n            }\n        }\n\n        &.placement-top {\n            > div:after {\n                .triangle(down, 15px, 8px, @color-popover-danger-bg);\n            }\n        }\n\n        &.placement-bottom {\n            > div:after, .popover-head:before {\n                .triangle(up, 15px, 8px, @color-popover-danger-bg);\n            }\n        }\n\n        &.placement-left {\n            > div:after, .popover-head:before {\n                .triangle(right, 8px, 15px, @color-popover-danger-bg);\n            }\n        }\n\n        &.placement-right {\n            > div:after, .popover-head:before {\n                .triangle(left, 8px, 15px, @color-popover-danger-bg);\n            }\n        }\n\n        .popover-head {\n            color: #fff;\n            background-color: @color-popover-danger-bg;\n            border-bottom: 2px solid rgba(255,255,255,.15);\n\n            .close {\n                color: #fff;\n                text-shadow: none;\n            }\n        }\n    }\n\n    div.popover-fixed-height {\n        height: 300px;\n    }\n}\n\n.popover-highlight {\n    position: relative;\n    z-index: (@zindex-popover - 2) !important;\n    &:hover, &:active, &:focus {\n        z-index: (@zindex-popover - 2) !important;\n    }\n}\n\ndiv.popover-overlay-container {\n    position: fixed;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    z-index: @zindex-popover - 3;\n    font-size: @font-size-base;\n\n    > div.control-popover {\n        > div {\n            border-radius: @border-radius-base;\n        }\n    }\n}\n\ndiv.popover-overlay {\n    position: fixed;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    background: @overlay-background;\n    z-index: @zindex-popover - 3;\n    display: none;\n\n    &.show {\n        display: block;\n    }\n}\n\n@media (max-width: @screen-sm) {\n    body.popover-open {\n        overflow: hidden;\n\n        .control-popover {\n            overflow: auto;\n            overflow-y: scroll;\n            position: fixed;\n            margin: 0;\n            padding: 10px;\n            width: 100% !important;\n            z-index: @zindex-popover + 3;\n            top: auto !important;\n            right: 0 !important;\n            bottom: 0 !important;\n            left: 0 !important;\n\n            > div {\n                padding: 0;\n                // min-height: 100%;\n\n                &:before, &:after {\n                    display: none;\n                }\n            }\n\n            div.popover-fixed-height {\n                height: 100%;\n                min-height: 100%;\n            }\n\n            .popover-head:before {\n                display: none;\n            }\n        }\n    }\n\n    div.popover-overlay {\n        display: block;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/popup/README.md",
    "content": "# Popups\n\nDisplays a modal popup, based on the Bootstrap modal implementation.\n\n- [Examples](#examples)\n- [Inline popups](#inline-popups)\n- [Remote popups](#remote-popups)\n- [API documentation](#api-docs)\n\n<a name=\"examples\"></a>\n## Examples\n\n    <a data-toggle=\"modal\" href=\"#contentBasic\" class=\"btn btn-primary btn-lg\">Launch basic content</a>\n\n    <div class=\"control-popup modal fade\" id=\"contentBasic\" tabindex=\"-1\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-body\">\n                    <p>This is a very basic example of a popup...</p>\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\"></button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <a data-toggle=\"modal\" href=\"#content-confirmation\" class=\"btn btn-primary btn-lg\">Launch Confirmation dialog</a>\n\n    <div class=\"control-popup modal fade\" id=\"content-confirmation\" tabindex=\"-1\" role=\"dialog\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h4 class=\"modal-title\">Are you sure you wanna do that?</h4>\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\"></button>\n                </div>\n                <div class=\"modal-body\">\n                    <p>This is your last chance. After this, there is no turning back.</p>\n                    <p>You take the blue pill - the story ends, you wake up in your bed and believe whatever you want to believe. You take the red pill - you stay in Wonderland, and I show you how deep the rabbit hole goes.</p>\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Blue Pill</button>\n                    <button type=\"button\" class=\"btn btn-primary\" data-dismiss=\"modal\">Red Pill</button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n<a name=\"inline-popups\"></a>\n## Inline popups\n\nAn inline popup places the popup content inside the current page, hidden from the view. For example, this container will not be visible on the page.\n\n```html\n<div class=\"control-popup modal fade\" id=\"contentBasic\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-body\">\n                <p>This is a very basic example of a popup...</p>\n            </div>\n        </div>\n    </div>\n</div>\n```\n\nUse the `data-toggle=\"modal\"` HTML attribute to launch this container as a popup.\n\n```html\n<a data-toggle=\"modal\" href=\"#contentBasic\" class=\"btn btn-primary btn-lg\">\n    Launch basic content\n</a>\n```\n\n<a name=\"remote-popups\"></a>\n## Remote popups\n\nContent for the popup can be loaded remotely using an AJAX request. Use the `data-handler` attribute to populate a popup with the contents of an AJAX handler.\n\n```html\n<a\n    data-control=\"popup\"\n    data-handler=\"onLoadContent\"\n    href=\"javascript:;\"\n    class=\"btn btn-primary btn-lg\">\n    Launch Ajax Form\n</a>\n```\n\nUsing the `data-ajax` attribute you can refer to an external file or URL directly.\n\n```html\n<a\n    data-control=\"popup\"\n    data-ajax=\"popup-content.htm\"\n    href=\"javascript:;\"\n    class=\"btn btn-primary btn-lg\">\n    Launch Ajax Form\n</a>\n```\n\nThe partial for your rendered popup should follow this structure:\n\n```html\n<div class=\"modal-header\">\n    <h4 class=\"modal-title\">\n        <!-- Modal header title goes here -->\n        Send email\n    </h4>\n    <button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\"></button>\n</div>\n<div class=\"modal-body\">\n    <!-- Any popup content goes here -->\n    <?= $this->customFormWidget->render() ?>\n</div>\n<div class=\"modal-footer\">\n    <!-- Popup action buttons go here -->\n    <button\n        type=\"submit\"\n        class=\"btn btn-primary oc-icon-send\"\n        data-load-indicator=\"Sending\">\n        Send\n    </button>\n    <button\n        type=\"button\"\n        class=\"btn btn-default\"\n        data-dismiss=\"popup\">\n        Close\n    </button>\n</div>\n```\n\n<a name=\"api-docs\"></a>\n## API documentation\n\n### Options:\n- content: content HTML string or callback\n\n### Data attributes\n- data-control=\"popup\" - enables the ajax popup plugin\n- data-ajax=\"popup-content.htm\" - ajax content to load\n- data-handler=\"onLoadContent\" - October ajax request name\n- data-keyboard=\"false\" - Allow popup to be closed with the keyboard\n- data-extra-data=\"file_id: 1\" - October ajax request data\n- data-size=\"large\" - Popup size, available sizes: giant, huge, large, small, tiny\n\n### JavaScript API\n\n```js\n$('a#someLink').popup({ ajax: 'popup-content.htm' })\n$('a#someLink').popup({ handler: 'onLoadSomePopup' })\n$('a#someLink').popup({ handler: 'onLoadSomePopup', extraData: { id: 3 } })\n```\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/popup/popup.js",
    "content": "/*\n * Ajax Popup plugin\n *\n * Documentation: ../docs/popup.md\n *\n * Require:\n *  - bootstrap/modal\n */\n\n+function($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    // POPUP CLASS DEFINITION\n    // ============================\n\n    var Popup = function(element, options) {\n        this.options = options;\n        this.$el = $(element);\n        this.$container = null;\n        this.$modal = null;\n        this.$backdrop = null;\n        this.isOpen = false;\n        this.isLoading = false;\n        this.firstDiv = null;\n        this.allowHide = true;\n\n        this.$container = this.createPopupContainer()\n        this.$content = $('.modal-content:first', this.$container);\n        this.$dialog = $('.modal-dialog:first', this.$container);\n        this.$modal = this.$container.modal({\n            show: false,\n            backdrop: false,\n            keyboard: this.options.keyboard,\n            focus: false\n        });\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        Base.call(this);\n\n        this.initEvents();\n        this.init();\n    }\n\n    Popup.prototype = Object.create(BaseProto)\n    Popup.prototype.constructor = Popup\n\n    Popup.DEFAULTS = {\n        ajax: null,\n        handler: null,\n        keyboard: true,\n        extraData: {},\n        content: null,\n        size: null,\n        adaptiveHeight: false,\n        zIndex: null\n    }\n\n    Popup.prototype.init = function() {\n        var self = this;\n\n        // Do not allow the same popup to open twice\n        if (self.isOpen) {\n            return;\n        }\n\n        // Show loading panel\n        this.setBackdrop(true);\n\n        if (!this.options.content) {\n            this.setLoading(true);\n        }\n\n        // October AJAX\n        if (this.options.handler) {\n            this.$el.request(this.options.handler, {\n                data: paramToObj('data-extra-data', this.options.extraData),\n                success: function(data, statusCode, xhr) {\n                    if (data instanceof Blob) {\n                        if (self.isLoading) {\n                            self.hideLoading();\n                        }\n                        else {\n                            self.hide();\n                        }\n                        self.triggerEvent('popup:download');\n                        this.success(data, statusCode, xhr);\n                        return;\n                    }\n\n                    this.success(data, statusCode, xhr).done(function() {\n                        self.setContent(data.result);\n                        $(window).trigger('ajaxUpdateComplete', [this, data, statusCode, xhr]);\n                        self.triggerEvent('popupComplete');\n                        self.triggerEvent('complete.oc.popup');\n                    });\n                },\n                error: function(data, statusCode, xhr) {\n                    this.error(data, statusCode, xhr).done(function() {\n                        if (self.isLoading) {\n                            self.hideLoading();\n                        }\n                        else {\n                            self.hide();\n                        }\n                        self.triggerEvent('popupError');\n                        self.triggerEvent('error.oc.popup');\n                    });\n                },\n                cancel: function() {\n                    if (self.isLoading) {\n                        self.hideLoading();\n                    }\n                    else {\n                        self.hide();\n                    }\n                }\n            });\n\n        }\n        // Regular AJAX\n        else if (this.options.ajax) {\n            $.ajax({\n                url: this.options.ajax,\n                data: paramToObj('data-extra-data', this.options.extraData),\n                success: function(data) {\n                    self.setContent(data)\n                },\n                cache: false\n            });\n        }\n        // Specified content\n        else if (this.options.content) {\n            var content = typeof this.options.content == 'function'\n                ? this.options.content.call(this.$el[0], this)\n                : this.options.content;\n\n            this.setContent(content);\n        }\n    }\n\n    Popup.prototype.initEvents = function() {\n        var self = this;\n\n        // Duplicate the popup reference on the .control-popup container\n        this.$container.data('oc.popup', this);\n\n        // Hook in to BS Modal events\n        this.$modal.on('hide.bs.modal', function() {\n            self.triggerEvent('hide.oc.popup');\n            self.isOpen = false;\n            self.setBackdrop(false);\n        });\n\n        this.$modal.on('hidden.bs.modal', function() {\n            self.triggerEvent('hidden.oc.popup');\n            $.oc.foundation.controlUtils.disposeControls(self.$container.get(0));\n            self.$container.remove();\n            $(document.body).removeClass('modal-open');\n            self.dispose();\n        });\n\n        this.$modal.on('show.bs.modal', function() {\n            self.isOpen = true;\n            self.setBackdrop(true);\n            $(document.body).addClass('modal-open');\n        });\n\n        this.$modal.on('shown.bs.modal', function() {\n            self.triggerEvent('shown.oc.popup');\n        });\n\n        this.$modal.on('close.oc.popup', function() {\n            self.hide();\n            return false;\n        });\n\n        oc.Events.dispatch('popup:show');\n    }\n\n    Popup.prototype.dispose = function() {\n        this.$modal.off('hide.bs.modal');\n        this.$modal.off('hidden.bs.modal');\n        this.$modal.off('show.bs.modal');\n        this.$modal.off('shown.bs.modal');\n        this.$modal.off('close.oc.popup');\n\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n        this.$el.removeData('oc.popup');\n        this.$container.removeData('oc.popup');\n\n        this.$container = null;\n        this.$content = null;\n        this.$dialog = null;\n        this.$modal = null;\n        this.$el = null;\n\n        // In some cases options could contain callbacks,\n        // so it's better to clean them up too.\n        this.options = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    Popup.prototype.createPopupContainer = function() {\n        var\n            modal = $('<div />').prop({\n                class: 'control-popup modal fade',\n                role: 'dialog',\n                tabindex: -1\n            }),\n            modalDialog = $('<div />').addClass('modal-dialog'),\n            modalContent = $('<div />').addClass('modal-content');\n\n        if (this.options.size) {\n            modalDialog.addClass('size-' + this.options.size);\n        }\n\n        if (this.options.adaptiveHeight) {\n            modalDialog.addClass('adaptive-height');\n        }\n\n        if (this.options.zIndex !== null) {\n            modal.css('z-index', this.options.zIndex + 20);\n        }\n\n        return modal.append(modalDialog.append(modalContent));\n    }\n\n    Popup.prototype.setContent = function(contents) {\n        var contentNode = $(contents);\n\n        // Set the popup size from the inner contents instead\n        // of needing it from the calling code\n        if (contentNode.data('popup-size')) {\n            this.$dialog.addClass('size-' + contentNode.data('popup-size'));\n        }\n        else {\n            var $defaultSize = $('[data-popup-size]', contentNode);\n            if ($defaultSize.length > 0) {\n                this.$dialog.addClass('size-' + $defaultSize.data('popup-size'));\n            }\n        }\n\n        this.setLoading(false);\n        this.$modal.modal('show');\n        this.$content.html(contentNode);\n        this.triggerShowEvent();\n\n        // Duplicate the popup object reference on to the first div\n        // inside the popup. Eg: $('#firstDiv').popup('hide')\n        this.firstDiv = this.$content.find('>div:first');\n        if (this.firstDiv.length > 0) {\n            this.firstDiv.data('oc.popup', this)\n        }\n\n        var $defaultFocus = $('[default-focus],[autofocus]', this.$content);\n        if ($defaultFocus.is(\":visible\")) {\n            window.setTimeout(function() {\n                $defaultFocus.focus();\n                $defaultFocus = null;\n            }, 300);\n        }\n    }\n\n    Popup.prototype.setBackdrop = function(val) {\n        if (val && !this.$backdrop) {\n            this.$backdrop = $('<div class=\"popup-backdrop fade\" />');\n\n            if (this.options.zIndex !== null) {\n                this.$backdrop.css('z-index', this.options.zIndex);\n            }\n\n            this.$backdrop.appendTo(document.body);\n\n            this.$backdrop.addClass('show');\n            this.$backdrop.append($('<div class=\"modal-content popup-loading-indicator\" />'));\n        }\n        else if (!val && this.$backdrop) {\n            this.$backdrop.remove();\n            this.$backdrop = null;\n        }\n    }\n\n    Popup.prototype.setLoading = function(val) {\n        if (!this.$backdrop) {\n            return;\n        }\n\n        this.isLoading = val;\n\n        if (val) {\n            setTimeout(() => {\n                if (this.$backdrop) {\n                    this.$backdrop.addClass('loading');\n                }\n            }, 100);\n        }\n        else {\n            setTimeout(() => {\n                if (this.$backdrop) {\n                    this.$backdrop.removeClass('loading');\n                }\n            }, 100);\n        }\n    }\n\n    Popup.prototype.setShake = function() {\n        var self = this;\n\n        this.$content.addClass('popup-shaking');\n\n        setTimeout(function() {\n            self.$content.removeClass('popup-shaking');\n        }, 1000)\n    }\n\n    Popup.prototype.hideLoading = function(val) {\n        this.setLoading(false);\n\n        // Wait for animations to complete\n        var self = this;\n        setTimeout(function() { self.setBackdrop(false) }, 250);\n        setTimeout(function() { self.hide() }, 300);\n    }\n\n    Popup.prototype.triggerEvent = function(eventName, params) {\n        if (!params) {\n            params = [this.$el, this.$modal];\n        }\n\n        var eventObject = jQuery.Event(eventName, { relatedTarget: this.$container.get(0) });\n\n        this.$el.trigger(eventObject, params);\n\n        if (this.firstDiv) {\n            this.firstDiv.trigger(eventObject, params);\n        }\n    }\n\n    Popup.prototype.reload = function() {\n        this.init();\n    }\n\n    Popup.prototype.show = function() {\n        this.$modal.modal('show');\n        this.triggerShowEvent();\n    }\n\n    Popup.prototype.triggerShowEvent = function() {\n        this.$modal.on('click.dismiss.popup', '[data-dismiss=\"popup\"]', $.proxy(this.hide, this));\n        this.triggerEvent('popupShow');\n        this.triggerEvent('show.oc.popup');\n\n        // Fixes an issue where the Modal makes `position: fixed` elements relative to itself\n        // https://github.com/twbs/bootstrap/issues/15856\n        this.$dialog.css('transform', 'inherit');\n    }\n\n    Popup.prototype.hide = function() {\n        if (!this.isOpen) return\n\n        this.triggerEvent('popupHide');\n        this.triggerEvent('hide.oc.popup');\n\n        if (this.allowHide) {\n            this.$modal.modal('hide');\n        }\n\n        // Fixes an issue where the Modal makes `position: fixed` elements relative to itself\n        // https://github.com/twbs/bootstrap/issues/15856\n        this.$dialog.css('transform', '');\n    }\n\n    /*\n     * Hide the popup without destroying it,\n     * you should call .hide() once finished\n     */\n    Popup.prototype.visible = function(val) {\n        if (val) {\n            this.$modal.addClass('show');\n        }\n        else {\n            this.$modal.removeClass('show');\n        }\n\n        this.setBackdrop(val);\n    }\n\n    Popup.prototype.toggle = function() {\n        this.triggerEvent('toggle.oc.popup', [this.$modal]);\n\n        this.$modal.modal('toggle');\n    }\n\n    /*\n     * Lock the popup from closing\n     */\n    Popup.prototype.lock = function(val) {\n        this.allowHide = !val;\n    }\n\n    // POPUP PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.popup;\n\n    $.fn.popup = function(option) {\n        var args = Array.prototype.slice.call(arguments, 1);\n        return this.each(function() {\n            var $this   = $(this)\n            var data    = $this.data('oc.popup')\n            var options = $.extend({}, Popup.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.popup', (data = new Popup(this, options)))\n            else if (typeof option == 'string') data[option].apply(data, args)\n            else data.reload()\n        });\n    }\n\n    $.fn.popup.Constructor = Popup;\n\n    $.popup = function(option) {\n        return $('<a />').popup(option);\n    }\n\n    // POPUP NO CONFLICT\n    // =================\n\n    $.fn.popup.noConflict = function() {\n        $.fn.popup = old;\n        return this;\n    }\n\n    // POPUP DATA-API\n    // ===============\n\n    function paramToObj(name, value) {\n        if (value === undefined) value = '';\n        if (typeof value == 'object') return value;\n\n        try {\n            return oc.parseJSON(\"{\" + value + \"}\");\n        }\n        catch (e) {\n            throw new Error('Error parsing the '+name+' attribute value. '+e);\n        }\n    }\n\n    $(document).on('click.oc.popup', '[data-control~=\"popup\"]', function(event) {\n        event.preventDefault();\n\n        $(this).popup();\n    });\n\n    // Popup loading indicator will only show if the handlers are an exact match.\n    $(document)\n        // Prevent subsequent requests while loading (mis-doubleclick)\n        .on('ajax:setup', '[data-popup-load-indicator]', function(event) {\n            if ($(this).data('request') !== event.detail.context.handler) return;\n            if (!$(this).closest('.control-popup').hasClass('show')) event.preventDefault();\n        })\n        // Hide popup during AJAX\n        .on('ajax:promise', '[data-popup-load-indicator]', function(event) {\n            if ($(this).data('request') !== event.detail.context.handler) return;\n            $(this).closest('.control-popup').removeClass('show').popup('setLoading', true);\n        })\n        // Request failed, show popup again\n        .on('ajax:fail', '[data-popup-load-indicator]', function(event) {\n            if ($(this).data('request') !== event.detail.context.handler) return;\n            $(this).closest('.control-popup').addClass('show').popup('setLoading', false).popup('setShake');\n        })\n        // Request complete, hide loader\n        .on('ajax:done', '[data-popup-load-indicator]', function(event) {\n            if ($(this).data('request') !== event.detail.context.handler) return;\n            $(this).closest('.control-popup').popup('hideLoading');\n        });\n\n    oc.popup = Popup;\n\n    // This function transfers the supplied variables as hidden form inputs,\n    // to any popup that is spawned within the supplied container. The spawned\n    // popup must contain a form element.\n    oc.popup.bindToPopups = (container, vars) => {\n        $(container).on('show.oc.popup', function(event, $trigger, $modal){\n            var $form = $('form', $modal)\n            $.each(vars, function(name, value){\n                $form.prepend($('<input />').attr({ type: 'hidden', name: name, value: value }));\n            });\n        });\n    };\n\n    // This will focus the first element if no other autofocus attribute is found,\n    // uses a specific delay to account for the CSS animations used by the modal.\n    oc.popup.focusFirstInput = (container) => {\n        setTimeout(function() {\n            var $container = $(container);\n            if (!$('[default-focus],[autofocus]', $container).length) {\n                $('input.form-control:first', $container).focus();\n            }\n        }, 310);\n    };\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/popup/popup.less",
    "content": "//\n// Popup\n// --------------------------------------------------\n\n@color-popup-header-bg:                      transparent;\n@color-popup-header-text:                    @heading-color;\n@color-popup-footer-bg:                      transparent;\n@color-popup-content-bg:                     @popup-bg;\n\n@popup-box-shadow: ~\"0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22)\";\n\n@modal-inner-padding:                        @padding-standard;\n@modal-title-padding:                        15px;\n@modal-title-line-height:                    @line-height-base;\n@modal-content-border-color:                 rgba(0,0,0,.2);\n@modal-content-fallback-border-color:        #999;\n@modal-backdrop-bg:           @overlay-background;\n@modal-backdrop-opacity:      .5;\n@modal-header-border-color:   #e5e5e5;\n@modal-footer-border-color:   @modal-header-border-color;\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n//\n// Popup\n// --------------------------------------------------\n\n@popup-size-giant: 982px;\n@popup-size-huge: 900px;\n@popup-size-large: 750px;\n@popup-size-small: 400px;\n@popup-size-tiny: 300px;\n\n.modal {\n    z-index: @zindex-modal;\n}\n\n.modal-backdrop {\n    z-index: (@zindex-modal-background - 10);\n    background-color: @modal-backdrop-bg;\n}\n\n.modal-content {\n    border: @popup-border;\n    border-radius: 8px;\n    box-shadow: @box-shadow-z2;\n    background: @color-popup-content-bg;\n}\n\n.modal-content.popup-shaking {\n    .animation(popup-shake 0.82s cubic-bezier(.36,.07,.19,.97) both);\n    .transform(translate3d(0, 0, 0));\n    .backface-visibility(hidden);\n    .perspective(1000px);\n}\n\n.modal-content .modal-header {\n    background: @color-popup-header-bg;\n    color: @color-popup-header-text;\n    border-top-right-radius: @border-radius-base;\n    border-top-left-radius: @border-radius-base;\n    padding: @modal-title-padding @padding-standard;\n    border-bottom: @popup-border;\n\n    h4 {\n        font-weight: normal;\n        font-size: 18px;\n    }\n\n    button.close {\n        width: 19px;\n        height: 19px;\n        border-radius: 20px;\n        position: relative;\n        top: 5px;\n        opacity: 1;\n        font-size: 0;\n        color: transparent;\n\n        &:after {\n            .icon-OctoFont();\n            content: @icon-cross;\n            color: @color-grey-1;\n            font-size: 16px;\n            position: relative;\n            top: -1px;\n        }\n\n        &:hover:after {\n            color: @brand-danger;\n        }\n\n        &:focus {\n            outline: none;\n            background-color: @toolbar-focus-bg;\n        }\n\n    }\n}\n\n.modal-content .modal-body {\n    padding: 20px 20px 0 20px;\n\n    > p:last-child {\n        margin-bottom: 20px;\n    }\n\n    &.modal-no-header {\n        padding-top: @padding-standard;\n    }\n\n    &.modal-no-footer {\n        padding-bottom: @padding-standard;\n    }\n}\n\n.modal-content .modal-footer {\n    background: @color-popup-footer-bg;\n    border: none;\n    margin-top: 0;\n    padding: 0 @padding-standard @padding-standard @padding-standard;\n    justify-content: flex-start;\n\n    > .pull-right {\n        margin-left: auto;\n    }\n\n    > *:first-child {\n        margin-left: 0;\n    }\n\n    > *:last-child {\n        margin-right: 0;\n    }\n\n    .btn-link {\n        padding-left: 5px;\n        padding-right: 5px;\n    }\n}\n\n.modal-dialog {\n    max-width: 598px;\n\n    &.size-adaptive {\n        max-width: 100%;\n        padding-right: 50px;\n        padding-left: 50px;\n    }\n\n    &.adaptive-height {\n        height: 100%;\n        min-height: 600px;\n        margin-top: 0;\n        margin-bottom: 0;\n        padding-top: 50px;\n        padding-bottom: 50px;\n\n        .modal-content {\n            height: 100%;\n        }\n    }\n\n    @media (min-width: @screen-sm-min) {\n        &.size-tiny  { max-width: @popup-size-tiny; }\n        &.size-small { max-width: @popup-size-small; }\n    }\n    @media (min-width: @screen-md-min) {\n        &.size-large { max-width: @popup-size-large; }\n        &.size-huge  { max-width: @popup-size-huge; }\n        &.size-giant { max-width: @popup-size-giant; }\n    }\n    @media (max-width: @screen-sm) {\n        &.size-adaptive {\n            max-width: auto;\n            padding: 5px 0;\n            margin: 0;\n        }\n    }\n\n    &.size-400 { max-width: 400px; }\n    &.size-450 { max-width: 450px; }\n    &.size-500 { max-width: 500px; }\n    &.size-550 { max-width: 550px; }\n    &.size-600 { max-width: 600px; }\n    &.size-650 { max-width: 650px; }\n    &.size-700 { max-width: 700px; }\n    &.size-750 { max-width: 750px; }\n    &.size-800 { max-width: 800px; }\n    &.size-850 { max-width: 850px; }\n    &.size-900 { max-width: 900px; }\n    &.size-950 { max-width: 950px; }\n    &.size-1000 { max-width: 1000px; }\n    &.size-1050 { max-width: 1050px; }\n    &.size-1100 { max-width: 1100px; }\n    &.size-1200 { max-width: 1200px; }\n    &.size-1400 { max-width: 1400px; }\n    &.size-auto {\n        max-width: auto;\n        padding: 5px 0;\n        margin: 0;\n    }\n}\n\n.control-popup {\n    &.fade {\n        &:not(.show) {\n            pointer-events: none;\n        }\n\n        .modal-dialog {\n            opacity: 0;\n            .transition(~'all 0.3s, width 0s');\n            .transform(~'scale(0.7)');\n        }\n    }\n\n    &.fade.show {\n        .modal-dialog {\n            opacity: 1;\n            .transform( ~'scale(1)');\n        }\n    }\n}\n\n.popup-backdrop {\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: (@zindex-modal-background - 10);\n    background-color: @modal-backdrop-bg;\n    opacity: 1;\n\n    .popup-loading-indicator {\n        background: @color-popup-content-bg;\n        display: block;\n        width: 100px;\n        height: 100px;\n        position: absolute;\n        top: 130px;\n        left: 50%;\n        margin-left: -50px;\n        transition: all 0.3s, width 0s;\n        transform: scale(0.7);\n        opacity: 0;\n\n        &:after {\n            --loader-size: 50px;\n            content: '';\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            width: var(--loader-size);\n            height: var(--loader-size);\n            margin-top: calc(var(--loader-size) / -2);\n            margin-left: calc(var(--loader-size) / -2);\n            border: 4px solid var(--oc-primary-border);\n            border-top-color: var(--oc-accent);\n            border-radius: 50%;\n            animation: spin 0.8s linear infinite;\n        }\n    }\n\n    &.loading .popup-loading-indicator {\n        opacity: 1;\n        .transform(~'scale(1)');\n    }\n\n}\n\n// Popup animations\n// -------------------------\n\n@-moz-keyframes popup-shake {\n    10%, 90% { -moz-transform: translate3d(-1px, 0, 0); }\n    20%, 80% { -moz-transform: translate3d(2px, 0, 0); }\n    30%, 50%, 70% { -moz-transform: translate3d(-4px, 0, 0); }\n    40%, 60% { -moz-transform: translate3d(4px, 0, 0); }\n}\n\n@-webkit-keyframes popup-shake {\n    10%, 90% { -webkit-transform: translate3d(-1px, 0, 0); }\n    20%, 80% { -webkit-transform: translate3d(2px, 0, 0); }\n    30%, 50%, 70% { -webkit-transform: translate3d(-4px, 0, 0); }\n    40%, 60% { -webkit-transform: translate3d(4px, 0, 0); }\n}\n\n@keyframes popup-shake {\n    10%, 90% { transform: translate3d(-1px, 0, 0); }\n    20%, 80% { transform: translate3d(2px, 0, 0); }\n    30%, 50%, 70% { transform: translate3d(-4px, 0, 0); }\n    40%, 60% { transform: translate3d(4px, 0, 0); }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/popup/popup.stacker.js",
    "content": "+(function($) {\n    'use strict';\n\n    class PopupStacker\n    {\n        constructor() {\n            $(document).on('hidden.bs.modal', (ev) => this.onPopupHidden(ev));\n            $(document).on('shown.bs.modal', (ev) => this.onPopupShown(ev));\n            oc.Events.on(document, 'popup:show', (ev) => this.onPopupShowing(ev));\n        }\n\n        onPopupHidden(ev) {\n            this.redrawStack();\n            this.pullForward();\n        }\n\n        onPopupShowing(ev) {\n            document.activeElement && document.activeElement.blur();\n            this.redrawStack(true);\n        }\n\n        onPopupShown(ev) {\n            var el = ev.target;\n\n            if (!el.dataset.popupStackId) {\n                el.dataset.popupStackId = this.generateUniqueId();\n            }\n\n            this.redrawStack();\n        }\n\n        pullForward() {\n            const el = this.getFirstPopup();\n            if (!el) {\n                return;\n            }\n\n            const content = el.querySelector('.modal-content');\n            if (content) {\n                content.style.transform = null;\n                content.style.transformOrigin = null;\n                el.style.zIndex = null;\n\n                // Wait for transition end (.3s)\n                setTimeout(() => {\n                    if (content) {\n                        content.style.transition = null;\n                    }\n                }, 350);\n            }\n\n            const backdrop = el.previousElementSibling;\n            if (backdrop && backdrop.classList.contains('popup-backdrop')) {\n                backdrop.style.zIndex = null;\n            }\n        }\n\n        redrawStack(isEarly) {\n            let count = 0;\n\n            this.getAllPopups().forEach((el) => {\n                count++;\n\n                // Push back popups before a new popup spawns\n                let offset = count;\n                if (!isEarly) {\n                    offset--;\n\n                    if (count === 1) {\n                        return;\n                    }\n                }\n\n                const content = el.querySelector('.modal-content');\n                if (content && !content.classList.contains('popup-loading-indicator')) {\n                    content.style.transform = `scale(.9) translate(-${2*offset}rem, -${50*offset}px)`;\n                    content.style.transformOrigin = 'top left';\n                    content.style.transition = 'all .3s';\n                    el.style.zIndex = (490 - offset);\n                }\n\n                const backdrop = el.previousElementSibling;\n                if (backdrop && backdrop.classList.contains('popup-backdrop')) {\n                    backdrop.style.zIndex = (490 - offset);\n                }\n            });\n        }\n\n        getFirstPopup() {\n            return this.getAllPopups()[0];\n        }\n\n        getAllPopups() {\n            return Array.from(document.querySelectorAll('.modal.show[data-popup-stack-id]')).reverse();\n        }\n\n        generateUniqueId() {\n            return \"popupid-\" + Math.floor(Math.random() * new Date().getTime());\n        }\n    }\n\n    oc.popupStacker = new PopupStacker();\n\n})($);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/toolbar/README.md",
    "content": "# Toolbar\n\nA scrollable set of buttons aligned to the left with a fixed right section.\n\nAll toolbar items (`toolbar-item`) should have a fixed width, except for the primary item (`toolbar-primary`) which will stretch. In the October backend you can use the `data-calculate-width` attribute to have these widths calculated dynamically for you.\n\n## Basic toolbar\n\n```html\n<div class=\"control-toolbar\">\n    <div class=\"toolbar-item toolbar-primary\">\n        <div data-control=\"toolbar\">\n            <button type=\"button\" class=\"btn btn-primary oc-icon-plus\">Create post</button>\n\n            <button type=\"button\" class=\"btn btn-default oc-icon-copy\">Copy</button>\n\n            <button type=\"button\" class=\"btn btn-default oc-icon-trash\">Delete</button>\n\n            <button type=\"button\" class=\"btn btn-default oc-icon-magic\">Publish</button>\n\n            <button type=\"button\" class=\"btn btn-default oc-icon-power-off\">Unpublish</button>\n\n            <button type=\"button\" class=\"btn btn-default oc-icon-clock-o\">Timer</button>\n\n            <button type=\"button\" class=\"btn btn-default oc-icon-mail-reply-all\">Send by email</button>\n\n            <button type=\"button\" class=\"btn btn-default oc-icon-hdd-o\">Archive</button>\n        </div>\n    </div>\n    <div class=\"toolbar-item\" style=\"width: 110px\">\n        <input placeholder=\"search...\" type=\"text\" name=\"\" value=\"\" class=\"form-control icon search\" />\n    </div>\n</div>\n```\n\n### Button groups\n\n```html\n<div class=\"control-toolbar\">\n    <div class=\"toolbar-item toolbar-primary\">\n        <div data-control=\"toolbar\">\n            <div class=\"btn-group\">\n                <button type=\"button\" class=\"btn btn-default oc-icon-mail-reply-all\">Send by email</button>\n                <button type=\"button\" class=\"btn btn-default oc-icon-hdd-o\">Archive</button>\n            </div>\n        </div>\n    </div>\n    <div class=\"toolbar-item\" style=\"width: 110px\">\n        <input placeholder=\"search...\" type=\"text\" name=\"\" value=\"\" class=\"form-control icon search\" />\n    </div>\n</div>\n```\n\n### Button with Tooltips\n\n```html\n<div class=\"control-toolbar\">\n    <div class=\"toolbar-item toolbar-primary\">\n        <div data-control=\"toolbar\">\n            <button\n                type=\"button\"\n                class=\"btn btn-default oc-icon-download\"\n                title=\"Hold down shift for more options\"\n                data-control=\"tooltip\"\n                data-placement=\"bottom\"\n                data-container=\"body\">\n                Export\n            </button>\n        </div>\n    </div>\n    <div class=\"toolbar-item\" style=\"width: 110px\">\n        <input placeholder=\"search...\" type=\"text\" name=\"\" value=\"\" class=\"form-control icon search\" />\n    </div>\n</div>\n```\n\n### Dropdown buttons\n\n```html\n<div class=\"control-toolbar\">\n    <div class=\"toolbar-item toolbar-primary\">\n        <div data-control=\"toolbar\">\n\n            <div class=\"dropdown dropdown-fixed\">\n                <button\n                    type=\"button\"\n                    class=\"btn btn-default oc-icon-users\"\n                    data-toggle=\"dropdown\">\n                    Assign selected to...\n                </button>\n                <ul class=\"dropdown-menu\">\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-user\">Sally</a></li>\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-user\">Steve</a></li>\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-user\">Justin</a></li>\n                </ul>\n            </div>\n\n        </div>\n    </div>\n    <div class=\"toolbar-item\" style=\"width: 110px\">\n        <input placeholder=\"search...\" type=\"text\" name=\"\" value=\"\" class=\"form-control icon search\" />\n    </div>\n</div>\n```\n\n## Editor toolbar\n\n```html\n<div class=\"layout control-toolbar editor-toolbar\">\n    <div class=\"layout-cell toolbar-item\">\n        <div data-control=\"toolbar\">\n\n            <!-- Dropdown item -->\n            <div class=\"dropdown dropdown-fixed\">\n                <button\n                    type=\"button\"\n                    class=\"btn\"\n                    title=\"Formatting\"\n                    data-toggle=\"dropdown\"\n                    data-control=\"tooltip\"\n                    data-placement=\"bottom\"\n                    data-container=\"body\">\n                    <i class=\"icon-paragraph\"></i>\n                </button>\n                <ul class=\"dropdown-menu\">\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-quote-right\">Quote</a></li>\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-code\">Code</a></li>\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-header\">Header 1</a></li>\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-header\">Header 2</a></li>\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-header\">Header 3</a></li>\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-header\">Header 4</a></li>\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-header\">Header 5</a></li>\n                    <li><a href=\"#\" tabindex=\"-1\" class=\"oc-icon-header\">Header 6</a></li>\n                </ul>\n            </div>\n\n            <!-- Item with tooltip -->\n            <button\n                type=\"button\"\n                class=\"btn\"\n                title=\"Bold\"\n                data-control=\"tooltip\"\n                data-placement=\"bottom\"\n                data-container=\"body\">\n                <i class=\"icon-bold\"></i>\n            </button>\n\n            <!-- Disabled item -->\n            <button type=\"button\" disabled class=\"btn\">\n                <i class=\"icon-italic\"></i>\n            </button>\n\n            <button type=\"button\" class=\"btn\">\n                <i class=\"icon-list-ul\"></i>\n            </button>\n            <button type=\"button\" class=\"btn\">\n                <i class=\"icon-list-ol\"></i>\n            </button>\n            <button type=\"button\" class=\"btn\">\n                <i class=\"icon-link\"></i>\n            </button>\n            <button type=\"button\" class=\"btn\">\n                <i class=\"icon-minus\"></i>\n            </button>\n        </div>\n    </div>\n    <div class=\"toolbar-item\" style=\"width: 80px\">\n        <button type=\"button\" class=\"btn oc-icon-eye\"></button>\n        <button type=\"button\" class=\"btn oc-icon-expand\"></button>\n    </div>\n</div>\n```\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/toolbar/toolbar.js",
    "content": "/*\n * Toolbar control.\n *\n * Makes toolbars drag/scrollable.\n *\n * Data attributes:\n * - data-control=\"toolbar\" - enables the toolbar plugin\n * - data-no-drag-support=\"true\" - disables the drag support for the toolbar, leaving only the mouse wheel support\n * - data-use-native-drag=\"true\" - if native CSS is enabled via \"mobile\" on the HTML tag, false by default\n * - data-vertical=\"false\" - enables vertical scrolling mode for the toolbar contents\n *\n * JavaScript API:\n * $('#toolbar').toolbar()\n *\n * Require:\n * - storm/drag.scroll\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var Toolbar = function (element, options) {\n        var\n            $el = this.$el = $(element),\n            $toolbar = $el.closest('.control-toolbar');\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        this.$toolbar = $toolbar;\n\n        this.options = options || {};\n\n        var noDragSupport = options.noDragSupport !== undefined && options.noDragSupport;\n\n        Base.call(this);\n\n        var scrollClassContainer = options.scrollClassContainer !== undefined\n            ? options.scrollClassContainer\n            : $el.parent();\n\n        if (this.options.useNativeDrag) {\n            $el.addClass('is-native-drag');\n        }\n\n        $el.dragScroll({\n            scrollClassContainer: scrollClassContainer,\n            useDrag: !noDragSupport,\n            useNative: this.options.useNativeDrag,\n            vertical: this.options.vertical,\n            noOverScroll: this.options.vertical\n        });\n\n        $('.form-control.is-growable', $toolbar).on('focus.toolbar', function(){\n            update();\n        });\n\n        $('.form-control.is-growable', $toolbar).on('blur.toolbar', function(){\n            update();\n        });\n\n        this.$el.one('dispose-control', this.proxy(this.dispose));\n\n        function update() {\n            $(window).trigger('resize');\n        }\n    }\n\n    Toolbar.prototype = Object.create(BaseProto)\n    Toolbar.prototype.constructor = Toolbar\n\n    Toolbar.prototype.dispose = function() {\n        this.$el.off('dispose-control', this.proxy(this.dispose))\n        $('.form-control.is-growable', this.$toolbar).off('.toolbar')\n        this.$el.dragScroll('dispose')\n        this.$el.removeData('oc.toolbar')\n        this.$el = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    Toolbar.DEFAULTS = {\n        useNativeDrag: false,\n        vertical: false\n    }\n\n    // TOOLBAR PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.toolbar\n\n    $.fn.toolbar = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1)\n\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.toolbar')\n            var options = $.extend({}, Toolbar.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data) $this.data('oc.toolbar', (data = new Toolbar(this, options)))\n            if (typeof option == 'string') data[option].apply(data, args)\n        })\n      }\n\n    $.fn.toolbar.Constructor = Toolbar\n\n    // TOOLBAR NO CONFLICT\n    // =================\n\n    $.fn.toolbar.noConflict = function () {\n        $.fn.toolbar = old\n        return this\n    }\n\n    // TOOLBAR DATA-API\n    // ===============\n\n    $(document).on('render', function(){\n        $('[data-control~=toolbar]').toolbar()\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/toolbar/toolbar.less",
    "content": "//\n// Toolbars\n// --------------------------------------------------\n\n@import \"toolbar.variables.less\";\n\n.control-toolbar {\n    font-size: 0; // Do not rely on the default spacing between inline-block elements\n    padding: 0 0 10px 0;\n    position: relative;\n\n    display: table;\n    table-layout: fixed;\n    width: 100%;\n\n    // Unsure where used -sg\n    // .horizontal-scroll-shadow();\n    // &:before { left: -10px; }\n    // &:after { right: -8px; }\n\n    .toolbar-divider {\n        margin-right: 1px;\n        display: inline-block;\n        height: 1em;\n        padding: 10px 0;\n        border-right: 1px solid @toolbar-border;\n        border-left: 1px solid @border-color;\n        width: 1px;\n        vertical-align: middle;\n        margin-right: 8px;\n    }\n\n    .toolbar-item {\n        position: relative;\n        white-space: nowrap;\n        display: table-cell;\n        vertical-align: top;\n        padding-right: 10px;\n\n        &:last-child,\n        &.last {\n            padding-right: 0;\n        }\n\n        &.toolbar-primary {\n            .horizontal-scroll-shadow();\n            &:before { left: -3px; }\n            &:after { right: 13px; }\n        }\n\n        &.toolbar-setup {\n            width: 28px;\n            vertical-align: middle;\n\n            a {\n                padding: 8px 15px;\n                > span {\n                    display: block;\n                    color: @toolbar-color;\n                    // background: @toolbar-bg;\n                    width: 24px;\n                    height: 24px;\n                    text-align: center;\n                    border-radius: 3px;\n\n                    &:before {\n                        .icon(@icon-text-format-ul);\n                        font-size: 14px;\n                        line-height: 24px;\n                        display: inline-block;\n                        vertical-align: middle;\n                    }\n                }\n\n                &:hover > span {\n                    color: @toolbar-hover-color;\n                    background: @toolbar-hover-bg;\n                }\n            }\n        }\n    }\n\n    .btn, .btn-group, .dropdown, .btn-container {\n        white-space: nowrap;\n        float: none;\n        display: inline-block;\n        margin-right: 10px;\n\n        &:last-child {\n            margin-right: 0;\n        }\n\n        &.standalone {\n            margin-right: 15px;\n        }\n    }\n\n    .dropdown > .btn {\n        margin-right: 0;\n    }\n\n    .btn-group {\n        > .btn, > .dropdown {\n            margin-right: 0;\n            display: inline-block;\n            float: none;\n        }\n\n        .dropdown {\n            > .btn {\n                margin-right: 0;\n                .border-right-radius(0);\n            }\n\n            &.last > .btn {\n                .border-right-radius(@border-radius-base) !important;\n            }\n        }\n    }\n\n    input.form-control[type=text] {\n        height: auto;\n        padding: 7px 13px 6px;\n    }\n\n    &.toolbar-padded {\n        padding: 20px;\n    }\n\n    &.flex {\n        display: flex;\n        flex-direction: row;\n\n        .toolbar-item {\n            display: block;\n            flex: 1 1 auto;\n\n            &.fix-width {\n                flex: 0 0 auto;\n            }\n        }\n    }\n}\n\n.relation-toolbar .control-toolbar,\n.control-toolbar.toolbar-form {\n    .btn {\n        .backend-toolbar-button();\n        color: @toolbar-color;\n        font-size: @font-size-base;\n        margin-right: 8px;\n        line-height: 30px;\n    }\n}\n\n[data-control~=toolbar] {\n    white-space: nowrap;\n    width: 100%;\n    overflow: hidden;\n\n    // For the focus border of buttons\n    padding: .3rem;\n    margin: -.3rem;\n}\n\n@media (pointer: coarse) {\n    [data-control~=toolbar].is-native-drag {\n        overflow: auto;\n    }\n}\n\n.clear-input-text {\n    padding: 0 5px;\n    cursor: pointer;\n    border: none;\n    border-radius: 100px;\n    -webkit-appearance: none;\n    font-size: (@font-size-base * 1.5);\n    font-weight: @close-font-weight;\n    line-height: 1;\n    color: @close-color;\n    text-shadow: @close-text-shadow;\n    font-family: sans-serif;\n    display: inline-block;\n    position: absolute;\n    right: 3px;\n    top: 0;\n    bottom: 0;\n    margin: auto;\n    background-color: @input-bg;\n    height: 28px;\n    width: 26px;\n    z-index: 2;\n\n    > i {\n        opacity: 1;\n        width: 16px;\n        height: 16px;\n        background-position: -16px -38px;\n        display: block;\n    }\n\n    &:hover,\n    &:focus {\n        text-decoration: none;\n        cursor: pointer;\n    }\n\n    &:focus {\n        outline: none;\n    }\n}\n\n//\n// Form Toolbar\n// --------------------------------------------------\n\n.control-toolbar.form-toolbar {\n    background-color: var(--oc-content-tab-content-bg);\n    border-radius: 6px;\n\n    .btn-outline-secondary {\n        --bs-btn-color: var(--bs-body-color);\n    }\n\n    .btn {\n        --bs-btn-padding-x: .5rem;\n        --bs-btn-padding-y: .4rem;\n        border: none;\n        font-size: @font-size-base;\n        margin-right: 8px;\n        // text-shadow: 1px 1px var(--oc-highlight-color);\n        transition: all 0.15s ease-in-out;\n\n        // Icon\n        &:before {\n            transition: color 0.15s ease-in-out;\n        }\n\n        &, &:before {\n            color: var(--bs-body-color);\n        }\n\n        &:hover, &:focus:hover, &:active, &:focus-visible {\n            // text-shadow: none;\n            &, &:before {\n                color: #fff;\n            }\n        }\n    }\n}\n\n//\n// Editor Toolbar\n// --------------------------------------------------\n\n@toolbar-editor-btn-size: 38px;\n\n.control-toolbar.editor-toolbar {\n    padding: 0;\n    background: @color-toolbar-editor-bg;\n    .border-bottom-radius(0);\n    border-bottom: 1px solid @color-toolbar-editor-border;\n\n    .toolbar-item {\n        .btn, .btn-group, .dropdown {\n            margin: 0;\n            padding: 0;\n        }\n\n        .btn {\n            text-align: center;\n            height: @toolbar-editor-btn-size;\n            width: @toolbar-editor-btn-size;\n            line-height: @toolbar-editor-btn-size;\n            color: @color-toolbar-editor-btn;\n            background: transparent;\n            user-select: none;\n            box-shadow: none;\n            text-shadow: none;\n            border-radius: 0;\n            font-size: 14px;\n\n            > i  {\n                opacity: 1;\n            }\n\n            &:hover {\n                outline: none;\n                background-color: @color-toolbar-editor-btn-bg-hover;\n                color: @color-toolbar-editor-btn-hover;\n            }\n            &.active,\n            &:active {\n                outline: none;\n                background-color: @color-toolbar-editor-btn-bg-active;\n                color: @color-toolbar-editor-btn-hover;\n            }\n            &.disabled,\n            &[disabled] {\n                opacity: 1;\n                color: #bdbdbd;\n                cursor: default;\n                background: transparent;\n            }\n        }\n\n        .dropdown.open {\n            .btn {\n                background-color: @color-toolbar-editor-btn-bg-active;\n                color: @color-toolbar-editor-btn-hover;\n            }\n        }\n\n        .btn[class^=\"oc-icon-\"],\n        .btn[class*=\" oc-icon-\"] {\n            &:before {\n                opacity: 1;\n                margin: 0;\n            }\n        }\n\n        .btn.oc-autumn-button {\n            color: #c03f31;\n\n            &:hover {\n                color: @color-toolbar-editor-btn-hover !important;\n            }\n        }\n    }\n}\n\n/* Toolbar tweaks for the side panel */\n\n#layout-side-panel,\n.compact-toolbar {\n    div.control-toolbar {\n        &, &.toolbar-padded {\n            padding: 0;\n        }\n\n        &.separator {\n            border-bottom: 1px solid @toolbar-border;\n        }\n\n        .toolbar-item {\n            padding-right: 0;\n        }\n\n        .btn {\n            border-radius: 0 !important;\n            padding-top: 12px;\n            padding-bottom: 13px;\n            margin-right: 0;\n            box-shadow: none;\n        }\n\n        input.form-control {\n            border: none;\n            padding: 11px 13px 12px;\n            height: auto;\n            border-radius: 0 !important;\n\n            &.icon.search {\n                background-position: right -78px;\n            }\n        }\n\n        div.loading-indicator-container.size-input-text {\n            .loading-indicator {\n                top: 6px;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/toolbar/toolbar.variables.less",
    "content": "//\n// Toolbars\n// --------------------------------------------------\n\n@color-scroll-indicator:                 #bbbbbb;\n@color-toolbar-editor-bg:                #ffffff;\n@color-toolbar-editor-border:            @toolbar-border;\n@color-toolbar-editor-btn:               #333;\n@color-toolbar-editor-btn-hover:         #000;\n@color-toolbar-editor-btn-bg-hover:      #ddd;\n@color-toolbar-editor-btn-bg-active:     mix(white, #999, 60%);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/tooltip/README.md",
    "content": "# Tooltips\n\nTooltips are an alternative to the standard browser title tooltip.\n\n## Tooltip markup\nA standard tooltip\n\n    <div class=\"tooltip fade top in\">\n        <div class=\"tooltip-arrow\"></div>\n        <div class=\"tooltip-inner\">Create a new blog post based on this</div>\n    </div>\n\n## Spawning tooltips\nTooltips can be automatically created when the mouse enters an element using the `data-toggle=\"tooltip\"` tag.\n\n    <a\n        href=\"javascript:;\"\n        data-toggle=\"tooltip\"\n        data-placement=\"left\"\n        data-delay=\"500\"\n        title=\"Tooltip content\">\n        Some link\n    </a>\n\n# Example\n\n    <div class=\"tooltip fade top in\">\n        <div class=\"tooltip-arrow\"></div>\n        <div class=\"tooltip-inner\">Create a new blog post based on this</div>\n    </div>"
  },
  {
    "path": "modules/backend/assets/foundation/controls/tooltip/tooltip.js",
    "content": "/*\n * Implement the tooltip control automatically\n *\n * Usage:\n *\n *   <a\n *       href=\"javascript:;\"\n *       data-toggle=\"tooltip\"\n *       data-placement=\"left\"\n *       title=\"Tooltip content\">\n *       Some link\n *   </a>\n *\n * Require:\n *  - bootstrap/tooltip\n */\n\n(function($){\n\n    $(document).render(function() {\n        $('[data-control=\"tooltip\"], [data-bs-toggle=\"tooltip\"], [data-toggle=\"tooltip\"]').tooltip();\n    });\n\n    addEventListener('ajax:before-update', function(event) {\n        $('.tooltip.show').remove();\n    });\n\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/tooltip/tooltip.less",
    "content": "//\n// Tooltips\n// --------------------------------------------------\n\n@import \"tooltip.variables.less\";\n\n// Base class\n.tooltip {\n    z-index: @zindex-tooltip;\n    font-size: 13px;\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/controls/tooltip/tooltip.variables.less",
    "content": "//\n// Tooltips\n// --------------------------------------------------\n\n@tooltip-max-width: 200px;\n@tooltip-color: #fff;\n@tooltip-bg: #536061;\n@tooltip-opacity: 1;\n@tooltip-border-radius: 4px;\n@tooltip-padding: 4px 8px 5px;\n@tooltip-font-size: 13px;\n\n@tooltip-arrow-width: 5px;\n@tooltip-arrow-color: @tooltip-bg;\n"
  },
  {
    "path": "modules/backend/assets/foundation/elements/backendicons/backendicons.less",
    "content": ".backend-icon-background {\n    .backend-icon-sprite(0, 0);\n\n    &.entity-small {\n        position: relative;\n        width: 10px;\n        height: 10px;\n\n        &.cms-page {\n            background-position: -129px 0;\n        }\n\n        &.cms-partial {\n            background-position: -180px -20px;\n        }\n\n        &.cms-content {\n            background-position: -206px -20px;\n        }\n\n        &.cms-layout {\n            background-position: -193px -20px;\n        }\n\n        &.cms-asset {\n            background-position: -219px -20px;\n        }\n\n        &.tailor-blueprint {\n            background-position: -180px -60px;\n        }\n\n        &.text {\n            background-position: -142px 0;\n        }\n    }\n\n    &.monaco-document {\n        position: relative;\n        width: 16px;\n        height: 16px;\n\n        &.php {\n            background-position: -181px -38px;\n        }\n\n        &.html {\n            background-position: -203px -38px;\n        }\n    }\n}\n\n.backend-icon-background-pseudo {\n    &:before {\n        content: '';\n        .backend-icon-sprite(0, 0);\n    }\n}\n\n[data-bs-theme=\"dark\"] {\n    .backend-icon-background-pseudo:before {\n        background-image: url('../foundation/elements/backendicons/backend-icons-dark.png');\n\n        @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\n            background-image: url('../foundation/elements/backendicons/backend-icons-dark@2x.png');\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/elements/backendicons/backendicons.mixins.less",
    "content": ".backend-icon-sprite(@offsetX, @offsetY) {\n    background-image: url('../foundation/elements/backendicons/backend-icons.png');\n    background-size: 300px 300px;\n    background-position: -(@offsetX) -(@offsetY);\n\n    @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\n        background-image: url('../foundation/elements/backendicons/backend-icons@2x.png');\n    }\n}\n\n.backend-icon-sprite-pseudo(@width, @height, @offsetX: 0, @offsetY: 0) {\n    content: '';\n    width: @width;\n    height: @height;\n    display: inline-block;\n    .backend-icon-sprite(@offsetX, @offsetY);\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/elements/breadcrumb/README.md",
    "content": "Display a breadcrumb on the page.\n\n# Example\n\n    <div style=\"padding: 20px\">\n        <div class=\"control-breadcrumb\">\n            <ul>\n                <li><a href=\"#\">Dash Board</a></li>\n                <li><a href=\"#\">Blog Posts</a></li>\n                <li>Edit Post</li>\n            </ul>\n        </div>\n    </div>"
  },
  {
    "path": "modules/backend/assets/foundation/elements/breadcrumb/breadcrumb.less",
    "content": "//\n// Breadcrumb\n// --------------------------------------------------\n\n// Breadcrumb to sit flush to the element below\nbody.breadcrumb-flush .control-breadcrumb,\n.control-breadcrumb.breadcrumb-flush {\n    margin-bottom: 0;\n}\n\n.control-breadcrumb {\n    > ol > li > a {\n        text-decoration: underline;\n    }\n}\n\nbody.compact-container {\n    .control-breadcrumb {\n        margin-top: 20px;\n        margin-left: 20px;\n        margin-right: 20px;\n\n        > ol {\n            margin-bottom: 0;\n        }\n    }\n}\n\nbody.slim-container .layout-container {\n    .control-breadcrumb {\n        margin-left: 20px;\n        margin-right: 20px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/elements/build.less",
    "content": "//\n// Elements\n// --------------------------------------------------\n\n@import \"backendicons/backendicons.less\";\n@import \"breadcrumb/breadcrumb.less\";\n@import \"buttons/buttons.less\";\n@import \"scoreboard/scoreboard.less\";\n"
  },
  {
    "path": "modules/backend/assets/foundation/elements/buttons/buttons.less",
    "content": "//\n// Buttons\n// --------------------------------------------------\n\n@btn-default-bg:                 var(--bs-secondary);\n@btn-default-hover-bg:           var(--oc-primary-hover-bg);\n@btn-default-active-bg:          var(--oc-primary-active-bg);\n\n@btn-secondary-bg:               var(--oc-secondary-bg);\n@btn-secondary-hover-bg:         var(--oc-secondary-hover-bg);\n@btn-secondary-active-bg:        var(--oc-secondary-active-bg);\n\n@btn-text-color:                 var(--bs-secondary-color);\n\n@btn-icon-color:                 #bcc3c7;\n@btn-icon-danger-color:          #c63e26;\n\n.btn {\n    --bs-btn-padding-x: 1.25rem;\n    --bs-btn-padding-y: 0.5rem;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  --bs-btn-padding-y: 0.5rem;\n  --bs-btn-padding-x: 1.5rem;\n  --bs-btn-font-size: 1.15rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  --bs-btn-padding-y: 0.4rem;\n  --bs-btn-padding-x: 0.85rem;\n}\n\n// Everything except btn-link\n.btn-default,\n.btn-primary,\n.btn-secondary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n    --bs-btn-box-shadow: rgba(20, 19, 78, 0.32) 0 1px 1px 0, var(--bs-btn-bg) 0 0 0 1px, rgba(64, 68, 82, 0.08) 0 2px 5px 0;\n    box-shadow: var(--bs-btn-box-shadow);\n    border: none;\n}\n\n// Primary gets a bigger weight\n.btn-primary {\n    --bs-btn-font-weight: 600;\n    --bs-btn-bg: @brand-primary;\n    --bs-btn-hover-bg: @btn-default-hover-bg;\n    --bs-btn-active-bg: @btn-default-active-bg;\n}\n\n.btn-secondary {\n    --bs-btn-color: @emphasis-color;\n    --bs-btn-bg: @btn-secondary-bg;\n    --bs-btn-hover-color: @emphasis-color;\n    --bs-btn-hover-bg: @btn-secondary-hover-bg;\n    --bs-btn-active-color: @emphasis-color;\n    --bs-btn-active-bg: @btn-secondary-active-bg;\n    --bs-btn-disabled-bg: @btn-secondary-bg;\n    --bs-btn-disabled-color: var(--bs-body-color);\n    --bs-btn-box-shadow: rgba(0, 0, 0, 0.12) 0 1px 1px 0, rgba(64, 68, 82, 0.16) 0 0 0 1px, rgba(64, 68, 82, 0.08) 0 2px 5px 0;\n\n    // box-shadow: inset 0 -2px 0 rgba(var(--bs-body-color-rgb), .1);\n    // &.active,\n    // &:active {\n    //     box-shadow: inset 0 1px 0 rgba(var(--bs-body-color-rgb), .2);\n    // }\n}\n\n// All buttons have white text\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n    --bs-btn-color: #fff;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-active-color: #fff;\n    --bs-btn-disabled-color: rgba(255, 255, 255, 0.6);\n}\n\n// All use default background, except danger\n// .btn-success,\n// .btn-info,\n// .btn-warning {\n//     --bs-btn-bg: @btn-default-bg;\n//     --bs-btn-disabled-bg: @btn-default-bg;\n// }\n\n// Use a darker hover color\n.btn-success {\n    --bs-btn-hover-bg: @brand-success;\n}\n\n.btn-info {\n    --bs-btn-hover-bg: @brand-info;\n}\n\n.btn-warning {\n    --bs-btn-hover-bg: @brand-warning;\n}\n\n// Custom default button style\n.btn-default {\n    --bs-btn-color: #fff;\n    --bs-btn-bg: @btn-default-bg;\n    --bs-btn-border-color: @btn-default-bg;\n    --bs-btn-hover-color: #fff;\n    --bs-btn-hover-bg: @btn-default-hover-bg;\n    --bs-btn-hover-border-color: @btn-default-hover-bg;\n    --bs-btn-focus-shadow-rgb: 90, 92, 210;\n    --bs-btn-active-color: #fff;\n    --bs-btn-active-bg: @btn-default-active-bg;\n    --bs-btn-active-border-color: @btn-default-active-bg;\n    --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n    --bs-btn-disabled-color: #f0f0f0;\n    --bs-btn-disabled-bg: @btn-default-bg;\n    --bs-btn-disabled-border-color: @btn-default-bg;\n}\n\n.btn-link.text-muted {\n    text-decoration: underline;\n    &:hover, &:focus-visible {\n        color: #124364 !important;\n    }\n}\n\n.input-group .btn {\n    --bs-btn-box-shadow: none;\n}\n\n//\n// Outline Buttons\n// --------------------------------------------------\n\n// Bootstrap has this set to #000 for some reason -sg\n.btn-outline-default,\n.btn-outline-primary,\n.btn-outline-success,\n.btn-outline-info,\n.btn-outline-warning,\n.btn-outline-danger {\n    --bs-btn-hover-color: #fff;\n    --bs-btn-active-color: #f0f0f0;\n}\n\n.btn-outline-default {\n    --bs-btn-hover-bg: var(--oc-brand-primary);\n    --bs-btn-active-bg: var(--oc-brand-primary);\n}\n.btn-outline-secondary {\n}\n\n//\n// Button separator\n// --------------------------------------------------\n\n.button-separator {\n    color: @text-muted;\n    margin: 0 10px;\n    font-size: @font-size-base;\n    padding-bottom: 2px;\n\n    + .btn-link {\n        margin-left: -5px;\n    }\n}\n\n//\n// Buttons with icons\n// --------------------------------------------------\n\n.btn {\n    &[class^=\"oc-icon-\"],\n    &[class*=\" oc-icon-\"] {\n        &:before {\n            font-size: 14px;\n            line-height: 14px;\n            position: relative;\n            text-decoration: none;\n        }\n    }\n\n    i {\n        font-size: 14px;\n        line-height: 14px;\n        position: relative;\n        top: 1px;\n        text-decoration: none;\n        margin-right: 4px;\n    }\n}\n\n.btn-group {\n    .btn {\n        border-right: 1px solid rgba(0,0,0,0.09);\n        margin-left: 0 !important;\n\n        &:last-child, &.last {\n            border-right: none;\n        }\n\n        &.last {\n            .border-right-radius(@border-radius-base) !important;\n        }\n    }\n\n    > .dropdown {\n        float: left;\n\n        &:not(:last-child, .last) > .btn {\n            border-right: 1px solid rgba(0,0,0,0.09);\n            .border-right-radius(0) !important;\n        }\n\n        &:not(:first-child) > .btn {\n            .border-left-radius(0) !important;\n        }\n\n        &.last {\n            .btn {\n                border-right: none;\n            }\n        }\n    }\n}\n\n.btn, .btn-group {\n    &.offset-right {\n        margin-right: 10px;\n    }\n}\n\n// Display a button as an icon link\n.btn-icon {\n    display: inline-block;\n    height: 36px;\n    font-size: 21px;\n    background: transparent;\n    border: none;\n    outline: none;\n    border-radius: .3rem;\n    transition: @input-transition;\n\n    &:before {\n        display: block;\n        color: @btn-icon-color;\n    }\n\n    &:focus-visible {\n        box-shadow: @input-focus-box-shadow;\n    }\n\n    &:hover:before {\n        color: @link-color;\n    }\n\n    &.danger:hover:before {\n        color: @btn-icon-danger-color;\n    }\n\n    &.pull-right:before {\n        margin-right: 0;\n    }\n\n    &.margin-left {\n        margin-left: 5px;\n    }\n\n    &.small {\n        font-size: 17px;\n        height: 17px;\n        line-height: 15px;\n    }\n\n    &.larger {\n        font-size: 21px;\n        height: 21px;\n        line-height: 17px;\n    }\n}\n\n// Display a button as text only\n.btn-text {\n    font-size: @font-size-base;\n    color: @btn-text-color;\n    vertical-align: middle;\n    display: inline-block;\n    padding: 8px 0;\n\n    a,\n    .btn.btn-link {\n        font-size: @font-size-base;\n        color: @btn-text-color;\n        text-decoration: underline;\n        vertical-align: baseline;\n\n        &:hover {\n            color: @link-color;\n        }\n    }\n}\n\n// Circular button with icon inside\n.btn-circle {\n    width: 30px;\n    height: 30px;\n    text-align: center;\n    padding-left: 0;\n    padding-right: 0;\n    font-size: 12px;\n    line-height: 1.428571429;\n    border-radius: 30px;\n\n    i {\n        margin: 0;\n    }\n\n    &.btn-lg {\n        width: 50px;\n        height: 50px;\n        font-size: 18px;\n        line-height: 1.33;\n        border-radius: 25px;\n    }\n\n    &.btn-xl {\n        width: 70px;\n        height: 70px;\n        font-size: 24px;\n        line-height: 1.33;\n        border-radius: 35px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/elements/icons/icons.mixins.less",
    "content": ".icon(@icon) {\n    .icon-OctoFont();\n    content: @icon;\n}\n\n.icon-OctoFont() {\n    // use !important to prevent issues with browser extensions that change fonts\n    font-family: 'octo-icon' !important;\n    speak: none;\n    font-style: normal;\n    font-weight: normal;\n    font-variant: normal;\n    text-transform: none;\n    line-height: 1;\n\n    // Better Font Rendering ===========\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n// Scroll markers\n// --------------------------------------------------\n\n.vertical-scroll-marker(@color) {\n    .scroll-marker {\n        position: absolute;\n        left: 0;\n        width: 100%;\n        height: 10px;\n        display: none;\n\n        &:after {\n            .icon(@icon-ellipsis-h);\n            display: block;\n            position: absolute;\n            left: 50%;\n            margin-left: -3px;\n            top: 0;\n            height: 9px;\n            font-size: 10px;\n            color: @color;\n        }\n\n        &.before {top: 0;}\n        &.after {\n            bottom: 3px;\n            &:after {\n                top: 2px;\n            }\n        }\n    }\n\n    &.scroll-before .scroll-marker.before { display: block; }\n    &.scroll-after .scroll-marker.after { display: block; }\n}\n\n.horizontal-scroll-indicators(@color) {\n    &:after, &:before {\n        display: none;\n        position: absolute;\n        top: 50%;\n        margin-top: -7px;\n        height: 9px;\n        font-size: 10px;\n        color: @color;\n    }\n\n    &:before {\n        left: -6px;\n        .icon(@icon-angle-left);\n    }\n\n    &:after {\n        right: -8px;\n        .icon(@icon-angle-right);\n    }\n\n    &.scroll-before:before { display: block; }\n    &.scroll-after:after { display: block; }\n}\n\n.horizontal-scroll-shadow() {\n    position: relative;\n\n    &:after, &:before {\n        content: '';\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        width: 10px;\n        z-index: 2;\n        opacity: 0;\n        transition: opacity 0.1s ease-out;\n    }\n\n    &:before {\n        background: transparent linear-gradient(90deg, #000 0%, rgba(0, 0, 0, 0) 100%);\n        left: 10px;\n    }\n\n    &:after {\n        background: transparent linear-gradient(270deg, #000 0%, rgba(0, 0, 0, 0) 100%);\n        right: -10px;\n    }\n\n    &.scroll-before:before { opacity: .15; }\n    &.scroll-after:after { opacity: .15; }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/elements/icons/icons.variables.less",
    "content": "@icon-database-flash: \"\\eb54\";\n@icon-exit: \"\\e901\";\n@icon-app-window: \"\\e902\";\n@icon-user-account: \"\\e903\";\n@icon-settings: \"\\e904\";\n@icon-delete: \"\\e905\";\n@icon-fullscreen: \"\\e906\";\n@icon-save-cloud: \"\\e907\";\n@icon-search-code: \"\\e908\";\n@icon-search-up: \"\\e909\";\n@icon-angle-down-arrow: \"\\e90a\";\n@icon-angle-up-arrow: \"\\e90b\";\n@icon-text-format-ul: \"\\e90c\";\n@icon-text-format-ol: \"\\e90d\";\n@icon-fullscreen-collapse: \"\\e90e\";\n@icon-text-bold: \"\\e90f\";\n@icon-text-left: \"\\e910\";\n@icon-text-right: \"\\e911\";\n@icon-text-center: \"\\e912\";\n@icon-text-italic: \"\\e913\";\n@icon-text-underline: \"\\e914\";\n@icon-text-insert-table: \"\\e915\";\n@icon-text-justify: \"\\e916\";\n@icon-info-circle: \"\\e917\";\n@icon-magic-wand: \"\\e918\";\n@icon-quote: \"\\e919\";\n@icon-horizontal-line: \"\\e91a\";\n@icon-text-link: \"\\e91b\";\n@icon-components: \"\\e91c\";\n@icon-text-strikethrough: \"\\e91d\";\n@icon-text-colors: \"\\e91e\";\n@icon-text-emoticons: \"\\e91f\";\n@icon-text-subscript: \"\\e920\";\n@icon-text-superscript: \"\\e921\";\n@icon-text-increase-indent: \"\\e922\";\n@icon-text-decrease-indent: \"\\e923\";\n@icon-text-inline-style: \"\\e924\";\n@icon-volume: \"\\e925\";\n@icon-text-video: \"\\e926\";\n@icon-text-image: \"\\e927\";\n@icon-text-redo: \"\\e928\";\n@icon-text-undo: \"\\e929\";\n@icon-attachment: \"\\e92a\";\n@icon-edit-code: \"\\e92b\";\n@icon-cursor-arrow: \"\\e92c\";\n@icon-text-clear-formatting: \"\\e92d\";\n@icon-text-eraser: \"\\e92e\";\n@icon-text-h1: \"\\e92f\";\n@icon-text-h3: \"\\e930\";\n@icon-text-h2: \"\\e931\";\n@icon-text-code-block: \"\\e932\";\n@icon-preview: \"\\e933\";\n@icon-window-split: \"\\e934\";\n@icon-list-add: \"\\e935\";\n@icon-list-remove: \"\\e936\";\n@icon-create: \"\\e937\";\n@icon-text-unlink: \"\\e938\";\n@icon-check-multi: \"\\e939\";\n@icon-add-above: \"\\e93a\";\n@icon-add-below: \"\\e93b\";\n@icon-callout-success: \"\\e93c\";\n@icon-callout-danger: \"\\e93d\";\n@icon-cross: \"\\e93e\";\n@icon-callout-info: \"\\e93f\";\n@icon-text-plus: \"\\e940\";\n@icon-log-settings: \"\\e941\";\n@icon-power: \"\\e942\";\n@icon-text-paint-brush: \"\\e943\";\n@icon-mail-branding: \"\\e944\";\n@icon-mail-messages: \"\\e945\";\n@icon-mail-settings: \"\\e946\";\n@icon-mail-templates: \"\\e947\";\n@icon-download-cloud: \"\\e948\";\n@icon-text-lock: \"\\e949\";\n@icon-text-users: \"\\e94a\";\n@icon-code-snippet: \"\\e94b\";\n@icon-translate: \"\\e94c\";\n@icon-globe-site: \"\\e94d\";\n@icon-id-card-1: \"\\e94e\";\n@icon-user-group: \"\\e94f\";\n@icon-user-actions-key: \"\\e950\";\n@icon-calendar-add: \"\\e951\";\n@icon-calendar-3: \"\\e952\";\n@icon-calendar-disable: \"\\e953\";\n@icon-calendar-enable: \"\\e954\";\n@icon-calendar-clock: \"\\e955\";\n@icon-notes-edit: \"\\e958\";\n@icon-calendar-check-1: \"\\e959\";\n@icon-keyboard-return: \"\\e95a\";\n@icon-list-reorder: \"\\e95b\";\n@icon-common-file-remove: \"\\e95c\";\n@icon-common-file-sync: \"\\e95d\";\n@icon-harddrive-upload: \"\\e95e\";\n@icon-common-file-upload: \"\\e95f\";\n@icon-set-parent: \"\\e960\";\n@icon-common-file-star: \"\\e961\";\n@icon-add-bold: \"\\e962\";\n@icon-layers-grid-add: \"\\e963\";\n@icon-location-target: \"\\1f32b\";\n@icon-id-badge-1: \"\\eb39\";\n@icon-language-letters: \"\\eb56\";\n@icon-address-book: \"\\f2ba\";\n@icon-address-card: \"\\f2bc\";\n@icon-adjust: \"\\f042\";\n@icon-align-center: \"\\f037\";\n@icon-align-justify: \"\\f039\";\n@icon-align-left: \"\\f036\";\n@icon-align-right: \"\\f038\";\n@icon-ambulance: \"\\f0f9\";\n@icon-american-sign-language-interpreting: \"\\f2a3\";\n@icon-anchor: \"\\f13d\";\n@icon-android: \"\\f17b\";\n@icon-angellist: \"\\f209\";\n@icon-angle-double-down: \"\\f103\";\n@icon-angle-double-left: \"\\f100\";\n@icon-angle-double-right: \"\\f101\";\n@icon-angle-double-up: \"\\f102\";\n@icon-angle-down: \"\\f107\";\n@icon-angle-left: \"\\f104\";\n@icon-angle-right: \"\\f105\";\n@icon-angle-up: \"\\f106\";\n@icon-apple: \"\\f179\";\n@icon-archive: \"\\f187\";\n@icon-area-chart: \"\\f1fe\";\n@icon-arrow-circle-down: \"\\f0ab\";\n@icon-arrow-circle-left: \"\\f0a8\";\n@icon-arrow-circle-right: \"\\f0a9\";\n@icon-arrow-circle-up: \"\\f0aa\";\n@icon-arrow-full-circle-down: \"\\f01a\";\n@icon-arrow-full-circle-left: \"\\f190\";\n@icon-arrow-full-circle-right: \"\\f18e\";\n@icon-arrow-full-circle-up: \"\\f01b\";\n@icon-arrow-down: \"\\f063\";\n@icon-arrow-left: \"\\f060\";\n@icon-arrow-right: \"\\f061\";\n@icon-arrow-up: \"\\f062\";\n@icon-move: \"\\f047\";\n@icon-arrows-alt: \"\\f0b2\";\n@icon-arrows-h: \"\\f07e\";\n@icon-arrows-v: \"\\f07d\";\n@icon-asl-interpreting: \"\\f2a4\";\n@icon-assistive-listening-systems: \"\\f2a2\";\n@icon-asterisk: \"\\f069\";\n@icon-at: \"\\f1fa\";\n@icon-audio-description: \"\\f29e\";\n@icon-automobile: \"\\f1b9\";\n@icon-backward: \"\\f04a\";\n@icon-balance-scale: \"\\f24e\";\n@icon-ban: \"\\f05e\";\n@icon-bank: \"\\f19c\";\n@icon-bar-chart: \"\\f080\";\n@icon-barcode: \"\\f02a\";\n@icon-bars: \"\\f0c9\";\n@icon-bathtub: \"\\f2ce\";\n@icon-battery: \"\\f240\";\n@icon-battery-0: \"\\f244\";\n@icon-battery-1: \"\\f243\";\n@icon-battery-2: \"\\f242\";\n@icon-battery-3: \"\\f241\";\n@icon-battery-4: \"\\f245\";\n@icon-bed: \"\\f236\";\n@icon-beer: \"\\f0fc\";\n@icon-bell: \"\\f0f3\";\n@icon-bell-slash: \"\\f1f6\";\n@icon-bicycle: \"\\f206\";\n@icon-binoculars: \"\\f1e5\";\n@icon-birthday-cake: \"\\f1fd\";\n@icon-bitcoin: \"\\f15a\";\n@icon-blind: \"\\f29d\";\n@icon-bluetooth: \"\\f293\";\n@icon-bluetooth-b: \"\\f294\";\n@icon-bold: \"\\f032\";\n@icon-bolt: \"\\f0e7\";\n@icon-bomb: \"\\f1e2\";\n@icon-book: \"\\f02d\";\n@icon-bookmark: \"\\f02e\";\n@icon-braille: \"\\f2a1\";\n@icon-briefcase: \"\\f0b1\";\n@icon-btc: \"\\f15b\";\n@icon-bug: \"\\f188\";\n@icon-building: \"\\f1ad\";\n@icon-bullhorn: \"\\f0a1\";\n@icon-bullseye: \"\\f140\";\n@icon-bus: \"\\f207\";\n@icon-cab: \"\\f1ba\";\n@icon-calculator: \"\\f1ec\";\n@icon-calendar: \"\\f073\";\n@icon-calendar-check: \"\\f274\";\n@icon-calendar-minus: \"\\f272\";\n@icon-calendar-empty: \"\\f133\";\n@icon-calendar-plus: \"\\f271\";\n@icon-calendar-times: \"\\f273\";\n@icon-camera: \"\\f030\";\n@icon-camera-retro: \"\\f083\";\n@icon-car: \"\\f1bb\";\n@icon-caret-down: \"\\f0d7\";\n@icon-caret-left: \"\\f0d9\";\n@icon-caret-right: \"\\f0da\";\n@icon-caret-up: \"\\f0d8\";\n@icon-caret-square-down: \"\\f150\";\n@icon-caret-square-left: \"\\f191\";\n@icon-caret-square-right: \"\\f152\";\n@icon-caret-square-up: \"\\f151\";\n@icon-cart-arrow-down: \"\\f218\";\n@icon-cart-plus: \"\\f217\";\n@icon-cc: \"\\f20a\";\n@icon-cc-amex: \"\\f1f3\";\n@icon-cc-diners-club: \"\\f24c\";\n@icon-cc-discover: \"\\f1f2\";\n@icon-cc-jcb: \"\\f24b\";\n@icon-cc-mastercard: \"\\f1f1\";\n@icon-cc-paypal: \"\\f1f4\";\n@icon-cc-stripe: \"\\f1f5\";\n@icon-cc-visa: \"\\f1f0\";\n@icon-certificate: \"\\f0a3\";\n@icon-chain: \"\\f0c1\";\n@icon-chain-broken: \"\\f127\";\n@icon-check: \"\\f00c\";\n@icon-check-circle: \"\\f058\";\n@icon-check-square: \"\\f14a\";\n@icon-chevron-circle-down: \"\\f13a\";\n@icon-chevron-circle-left: \"\\f137\";\n@icon-chevron-circle-right: \"\\f138\";\n@icon-chevron-circle-up: \"\\f139\";\n@icon-chevron-down: \"\\f078\";\n@icon-chevron-left: \"\\f053\";\n@icon-chevron-right: \"\\f054\";\n@icon-chevron-up: \"\\f077\";\n@icon-child: \"\\f1ae\";\n@icon-chrome: \"\\f268\";\n@icon-circle-full: \"\\f111\";\n@icon-circle: \"\\f10c\";\n@icon-circle-notch: \"\\f1ce\";\n@icon-clipboard: \"\\f0ea\";\n@icon-clock: \"\\f017\";\n@icon-clone: \"\\f24d\";\n@icon-close: \"\\f00d\";\n@icon-cloud: \"\\f0c2\";\n@icon-cloud-download: \"\\f0ed\";\n@icon-cloud-upload: \"\\f0ee\";\n@icon-cny: \"\\f157\";\n@icon-code: \"\\f121\";\n@icon-code-fork: \"\\f126\";\n@icon-coffee: \"\\f0f4\";\n@icon-cog: \"\\f013\";\n@icon-cogs: \"\\f085\";\n@icon-columns: \"\\f0db\";\n@icon-comment: \"\\f075\";\n@icon-commenting: \"\\f27b\";\n@icon-comments: \"\\f086\";\n@icon-compass: \"\\f14e\";\n@icon-compress: \"\\f066\";\n@icon-copy: \"\\f0c5\";\n@icon-copyright: \"\\f1f9\";\n@icon-creative-commons: \"\\f25e\";\n@icon-credit-card: \"\\f09d\";\n@icon-crop: \"\\f125\";\n@icon-crosshairs: \"\\f05b\";\n@icon-css3: \"\\f13c\";\n@icon-cube: \"\\f1b2\";\n@icon-cubes: \"\\f1b3\";\n@icon-cut: \"\\f0c4\";\n@icon-cutlery: \"\\f0f5\";\n@icon-dashboard: \"\\f0e4\";\n@icon-database: \"\\f1c0\";\n@icon-deaf: \"\\f2a5\";\n@icon-deafness: \"\\f2a6\";\n@icon-dedent: \"\\f03b\";\n@icon-desktop: \"\\f108\";\n@icon-diamond: \"\\f219\";\n@icon-dollar: \"\\f155\";\n@icon-dot-circle: \"\\f192\";\n@icon-download: \"\\f019\";\n@icon-dribbble: \"\\f17d\";\n@icon-drivers-license: \"\\f2c3\";\n@icon-edge: \"\\f282\";\n@icon-edit: \"\\f044\";\n@icon-eject: \"\\f052\";\n@icon-ellipsis-h: \"\\f141\";\n@icon-ellipsis-v: \"\\f142\";\n@icon-envelope: \"\\f0e0\";\n@icon-envelope-open: \"\\f2b7\";\n@icon-envelope-square: \"\\f199\";\n@icon-leaf-2: \"\\f299\";\n@icon-eraser: \"\\f12d\";\n@icon-eur: \"\\f153\";\n@icon-euro: \"\\f154\";\n@icon-exchange: \"\\f0ec\";\n@icon-exclamation: \"\\f12a\";\n@icon-exclamation-circle: \"\\f06a\";\n@icon-exclamation-triangle: \"\\f071\";\n@icon-collapse: \"\\e964\";\n@icon-expand: \"\\f065\";\n@icon-external-link: \"\\f08e\";\n@icon-external-link-square: \"\\f14c\";\n@icon-eye: \"\\f06e\";\n@icon-eye-slash: \"\\f070\";\n@icon-eyedropper: \"\\f1fb\";\n@icon-fa: \"\\f2b4\";\n@icon-fast-backward: \"\\f049\";\n@icon-fast-forward: \"\\f050\";\n@icon-fax: \"\\f1ac\";\n@icon-feed: \"\\f09e\";\n@icon-female: \"\\f182\";\n@icon-fighter-jet: \"\\f0fb\";\n@icon-file: \"\\f15c\";\n@icon-file-archive: \"\\f1c6\";\n@icon-file-audio: \"\\f1c7\";\n@icon-file-code: \"\\f1c9\";\n@icon-file-excel: \"\\f1c3\";\n@icon-file-image: \"\\f1c5\";\n@icon-file-movie: \"\\f1c8\";\n@icon-file-pdf: \"\\f1c1\";\n@icon-file-photo: \"\\f1ca\";\n@icon-file-picture: \"\\f1cc\";\n@icon-file-powerpoint: \"\\f1c4\";\n@icon-file-sound: \"\\f1cd\";\n@icon-file-text: \"\\f15d\";\n@icon-file-video: \"\\f1cf\";\n@icon-file-word: \"\\f1c2\";\n@icon-file-zip: \"\\f1d0\";\n@icon-files: \"\\f0c6\";\n@icon-film: \"\\f008\";\n@icon-filter: \"\\f0b0\";\n@icon-fire: \"\\f06d\";\n@icon-fire-extinguisher: \"\\f134\";\n@icon-flag: \"\\f024\";\n@icon-flag-checkered: \"\\f11e\";\n@icon-flash: \"\\f0e8\";\n@icon-flask: \"\\f0c3\";\n@icon-floppy: \"\\f0c7\";\n@icon-folder: \"\\f114\";\n@icon-folder-open: \"\\f115\";\n@icon-font: \"\\f031\";\n@icon-forward: \"\\f04e\";\n@icon-frown: \"\\f119\";\n@icon-futbol: \"\\f1e3\";\n@icon-gamepad: \"\\f11b\";\n@icon-legal: \"\\f0e3\";\n@icon-gbp: \"\\f156\";\n@icon-gear: \"\\f014\";\n@icon-gears: \"\\f087\";\n@icon-genderless: \"\\f22d\";\n@icon-gift: \"\\f06b\";\n@icon-git: \"\\f1d3\";\n@icon-git-square: \"\\f1d2\";\n@icon-glass: \"\\f000\";\n@icon-globe: \"\\f0ac\";\n@icon-google: \"\\f1a0\";\n@icon-graduation-cap: \"\\f19d\";\n@icon-october: \"\\f2d6\";\n@icon-group: \"\\f0c0\";\n@icon-hand-grab: \"\\f255\";\n@icon-hand-lizard: \"\\f258\";\n@icon-hand-down: \"\\f0a7\";\n@icon-hand-left: \"\\f0a5\";\n@icon-hand-right: \"\\f0a4\";\n@icon-hand-up: \"\\f0a6\";\n@icon-hand-paper: \"\\f256\";\n@icon-hand-peace: \"\\f25b\";\n@icon-hand-pointer: \"\\f25a\";\n@icon-hand-rock: \"\\f257\";\n@icon-hand-scissors: \"\\f259\";\n@icon-hand-spock: \"\\f25c\";\n@icon-hand-stop: \"\\f25d\";\n@icon-handshake: \"\\f2b8\";\n@icon-hard-of-hearing: \"\\f2a7\";\n@icon-hashtag: \"\\f292\";\n@icon-hdd: \"\\f0a0\";\n@icon-header: \"\\f1dc\";\n@icon-headphones: \"\\f025\";\n@icon-heart: \"\\f004\";\n@icon-heartbeat: \"\\f21e\";\n@icon-history: \"\\f1da\";\n@icon-home: \"\\f015\";\n@icon-hospital: \"\\f0f8\";\n@icon-hotel: \"\\f237\";\n@icon-hourglass-0: \"\\f250\";\n@icon-hourglass-1: \"\\f251\";\n@icon-hourglass-2: \"\\f252\";\n@icon-hourglass-3: \"\\f253\";\n@icon-html5: \"\\f13b\";\n@icon-i-cursor: \"\\f24f\";\n@icon-id-badge: \"\\f2c1\";\n@icon-id-card: \"\\f2c6\";\n@icon-ils: \"\\f20b\";\n@icon-image: \"\\f03e\";\n@icon-inbox: \"\\f01c\";\n@icon-indent: \"\\f03c\";\n@icon-industry: \"\\f275\";\n@icon-info: \"\\f129\";\n@icon-info-circle-1: \"\\f05a\";\n@icon-inr: \"\\f158\";\n@icon-instagram: \"\\f16d\";\n@icon-institution: \"\\f19e\";\n@icon-intersex: \"\\f224\";\n@icon-italic: \"\\f033\";\n@icon-jpy: \"\\f159\";\n@icon-key: \"\\f084\";\n@icon-keyboard: \"\\f11c\";\n@icon-krw: \"\\f15e\";\n@icon-language: \"\\f1ab\";\n@icon-laptop: \"\\f109\";\n@icon-leaf: \"\\f06c\";\n@icon-legal-1: \"\\f0e9\";\n@icon-lemon: \"\\f094\";\n@icon-life-bouy: \"\\f1d5\";\n@icon-life-buoy: \"\\f1d6\";\n@icon-life-ring: \"\\f1d7\";\n@icon-life-saver: \"\\f1d8\";\n@icon-lightbulb: \"\\f0eb\";\n@icon-line-chart: \"\\f201\";\n@icon-link: \"\\f0c8\";\n@icon-linux: \"\\f17c\";\n@icon-list: \"\\f03a\";\n@icon-list-alt: \"\\f022\";\n@icon-list-ol: \"\\f0cb\";\n@icon-list-ul: \"\\f0ca\";\n@icon-location-arrow: \"\\f124\";\n@icon-lock: \"\\f023\";\n@icon-long-arrow-down: \"\\f175\";\n@icon-long-arrow-left: \"\\f177\";\n@icon-long-arrow-right: \"\\f178\";\n@icon-long-arrow-up: \"\\f176\";\n@icon-low-vision: \"\\f2a8\";\n@icon-magic: \"\\f0d0\";\n@icon-magnet: \"\\f076\";\n@icon-mail-forward: \"\\f064\";\n@icon-mail-reply: \"\\f113\";\n@icon-mail-reply-all: \"\\f123\";\n@icon-level-up: \"\\f148\";\n@icon-level-down: \"\\f149\";\n@icon-male: \"\\f183\";\n@icon-map-marker: \"\\f041\";\n@icon-map: \"\\f278\";\n@icon-map-pin: \"\\f276\";\n@icon-map-signs: \"\\f277\";\n@icon-mars: \"\\f222\";\n@icon-mars-double: \"\\f227\";\n@icon-mars-stroke: \"\\f229\";\n@icon-mars-stroke-h: \"\\f22b\";\n@icon-mars-stroke-v: \"\\f22a\";\n@icon-medkit: \"\\f0fa\";\n@icon-meh: \"\\f11a\";\n@icon-mercury: \"\\f223\";\n@icon-microchip: \"\\f2db\";\n@icon-microphone: \"\\f130\";\n@icon-microphone-slash: \"\\f131\";\n@icon-minus: \"\\f068\";\n@icon-minus-circle: \"\\f056\";\n@icon-minus-square: \"\\f147\";\n@icon-mobile: \"\\f10b\";\n@icon-money: \"\\f0d6\";\n@icon-moon: \"\\f186\";\n@icon-mortar-board: \"\\f19f\";\n@icon-motorcycle: \"\\f21c\";\n@icon-mouse-pointer: \"\\f264\";\n@icon-music: \"\\f001\";\n@icon-navicon: \"\\f0cc\";\n@icon-neuter: \"\\f22c\";\n@icon-newspaper: \"\\f1ea\";\n@icon-object-group: \"\\f266\";\n@icon-object-ungroup: \"\\f267\";\n@icon-outdent: \"\\f03d\";\n@icon-pagelines: \"\\f18c\";\n@icon-paint-brush: \"\\f1fc\";\n@icon-paper-plane: \"\\f1dd\";\n@icon-paperclip: \"\\f0cd\";\n@icon-paragraph: \"\\f1de\";\n@icon-paste: \"\\f0ef\";\n@icon-pause: \"\\f04c\";\n@icon-pause-circle: \"\\f28c\";\n@icon-paw: \"\\f1b0\";\n@icon-pencil: \"\\f040\";\n@icon-pencil-square: \"\\f14b\";\n@icon-pencil-square-1: \"\\f045\";\n@icon-percent: \"\\f295\";\n@icon-phone: \"\\f095\";\n@icon-phone-square: \"\\f098\";\n@icon-photo: \"\\f03f\";\n@icon-pie-chart: \"\\f200\";\n@icon-plane: \"\\f072\";\n@icon-play: \"\\f04b\";\n@icon-play-circle: \"\\f144\";\n@icon-plug: \"\\f1e6\";\n@icon-plus: \"\\f067\";\n@icon-plus-circle: \"\\f055\";\n@icon-plus-square: \"\\f196\";\n@icon-podcast: \"\\f2cf\";\n@icon-power-off: \"\\f011\";\n@icon-print: \"\\f02f\";\n@icon-puzzle-piece: \"\\f12e\";\n@icon-qrcode: \"\\f029\";\n@icon-question: \"\\f128\";\n@icon-question-circle: \"\\f059\";\n@icon-quote-left: \"\\f10e\";\n@icon-quote-right: \"\\f10f\";\n@icon-random: \"\\f074\";\n@icon-recycle: \"\\f1b8\";\n@icon-refresh: \"\\f021\";\n@icon-registered: \"\\f269\";\n@icon-remove: \"\\f00e\";\n@icon-reorder: \"\\f0ce\";\n@icon-repeat: \"\\f01e\";\n@icon-retweet: \"\\f079\";\n@icon-rmb: \"\\f15f\";\n@icon-road: \"\\f018\";\n@icon-rocket: \"\\f135\";\n@icon-rotate-left: \"\\f0e2\";\n@icon-rotate-right: \"\\f01f\";\n@icon-rouble: \"\\f160\";\n@icon-rss: \"\\f09f\";\n@icon-rss-square-square: \"\\f143\";\n@icon-rub: \"\\f161\";\n@icon-ruble: \"\\f162\";\n@icon-rupee: \"\\f163\";\n@icon-s15: \"\\f2d0\";\n@icon-safari: \"\\f26a\";\n@icon-save: \"\\f0cf\";\n@icon-scissors: \"\\f0d1\";\n@icon-search: \"\\f002\";\n@icon-search-minus: \"\\f010\";\n@icon-search-plus: \"\\f00f\";\n@icon-send: \"\\f1e7\";\n@icon-server: \"\\f233\";\n@icon-share-alt: \"\\f1e8\";\n@icon-share-alt-square: \"\\f1e9\";\n@icon-share-square: \"\\f14d\";\n@icon-shekel: \"\\f20c\";\n@icon-shield: \"\\f132\";\n@icon-ship: \"\\f21a\";\n@icon-shopping-bag: \"\\f290\";\n@icon-shopping-basket: \"\\f291\";\n@icon-shopping-cart: \"\\f07a\";\n@icon-shower: \"\\f2cc\";\n@icon-sign-in: \"\\f090\";\n@icon-sign-language: \"\\f2a9\";\n@icon-sign-out: \"\\f08b\";\n@icon-signal: \"\\f012\";\n@icon-signing: \"\\f2aa\";\n@icon-sitemap: \"\\f0f0\";\n@icon-sliders: \"\\f1eb\";\n@icon-smile: \"\\f118\";\n@icon-snowflake: \"\\f2dc\";\n@icon-soccer-ball: \"\\f1ef\";\n@icon-sort: \"\\f0dc\";\n@icon-sort-alpha-asc: \"\\f164\";\n@icon-sort-alpha-desc: \"\\f165\";\n@icon-sort-amount-asc: \"\\f166\";\n@icon-sort-amount-desc: \"\\f167\";\n@icon-sort-down: \"\\f0df\";\n@icon-sort-numeric-asc: \"\\f168\";\n@icon-sort-numeric-desc: \"\\f169\";\n@icon-sort-up: \"\\f0e1\";\n@icon-space-shuttle: \"\\f197\";\n@icon-spinner: \"\\f110\";\n@icon-spoon: \"\\f1b1\";\n@icon-square: \"\\f0d2\";\n@icon-star-full: \"\\f005\";\n@icon-star-half-full: \"\\f12b\";\n@icon-star-half: \"\\f12f\";\n@icon-star: \"\\f006\";\n@icon-step-backward: \"\\f04d\";\n@icon-step-forward: \"\\f051\";\n@icon-stethoscope: \"\\f0f1\";\n@icon-sticky-note: \"\\f26d\";\n@icon-stop: \"\\f04f\";\n@icon-stop-circle: \"\\f28e\";\n@icon-street-view: \"\\f21d\";\n@icon-strikethrough: \"\\f0d3\";\n@icon-subscript: \"\\f136\";\n@icon-subway: \"\\f239\";\n@icon-suitcase: \"\\f0f2\";\n@icon-sun: \"\\f189\";\n@icon-superscript: \"\\f13e\";\n@icon-subway1: \"\\f23a\";\n@icon-table: \"\\f0d4\";\n@icon-tablet: \"\\f10a\";\n@icon-tachometer: \"\\f0ff\";\n@icon-tag: \"\\f02b\";\n@icon-tags: \"\\f02c\";\n@icon-tasks: \"\\f0ae\";\n@icon-taxi: \"\\f1bc\";\n@icon-television: \"\\f26e\";\n@icon-terminal: \"\\f120\";\n@icon-text-height: \"\\f034\";\n@icon-text-width: \"\\f035\";\n@icon-th: \"\\f00a\";\n@icon-th-large: \"\\f009\";\n@icon-th-list: \"\\f00b\";\n@icon-thermometer-0: \"\\f2cb\";\n@icon-thermometer-1: \"\\f2ca\";\n@icon-thermometer-2: \"\\f2c9\";\n@icon-thermometer-3: \"\\f2c8\";\n@icon-thermometer-4: \"\\f2d1\";\n@icon-thumb-tack: \"\\f08d\";\n@icon-thumbs-down: \"\\f16a\";\n@icon-thumbs-up: \"\\f08c\";\n@icon-ticket: \"\\f145\";\n@icon-times: \"\\f020\";\n@icon-times-circle: \"\\f057\";\n@icon-times-rectangle: \"\\f2de\";\n@icon-tint: \"\\f05f\";\n@icon-toggle-off: \"\\f204\";\n@icon-toggle-on: \"\\f205\";\n@icon-toggle-down: \"\\f171\";\n@icon-toggle-left: \"\\f193\";\n@icon-toggle-right: \"\\f172\";\n@icon-toggle-up: \"\\f173\";\n@icon-trademark: \"\\f26f\";\n@icon-train: \"\\f238\";\n@icon-transgender: \"\\f225\";\n@icon-transgender-alt: \"\\f226\";\n@icon-trash: \"\\f1f8\";\n@icon-trash-1: \"\\f026\";\n@icon-tree: \"\\f1be\";\n@icon-trophy: \"\\f091\";\n@icon-truck: \"\\f0d5\";\n@icon-try: \"\\f195\";\n@icon-tty: \"\\f1ff\";\n@icon-turkish-lira: \"\\f198\";\n@icon-tv: \"\\f270\";\n@icon-umbrella: \"\\f116\";\n@icon-underline: \"\\f117\";\n@icon-universal-access: \"\\f29a\";\n@icon-university: \"\\f1a1\";\n@icon-unlink: \"\\f13f\";\n@icon-unlock: \"\\f09c\";\n@icon-unlock-alt: \"\\f14f\";\n@icon-unsorted: \"\\f174\";\n@icon-upload: \"\\f093\";\n@icon-usb: \"\\f287\";\n@icon-usd: \"\\f17a\";\n@icon-user: \"\\f007\";\n@icon-user-circle: \"\\f2be\";\n@icon-user-md: \"\\f17e\";\n@icon-user-plus: \"\\f234\";\n@icon-user-secret: \"\\f21b\";\n@icon-user-times: \"\\f235\";\n@icon-users: \"\\f17f\";\n@icon-vcard: \"\\f2df\";\n@icon-venus: \"\\f221\";\n@icon-venus-double: \"\\f228\";\n@icon-venus-mars: \"\\f22e\";\n@icon-video-camera: \"\\f07f\";\n@icon-volume-control-phone: \"\\f2a0\";\n@icon-volume-down: \"\\f027\";\n@icon-volume-off: \"\\f028\";\n@icon-volume-up: \"\\f082\";\n@icon-warning: \"\\f08f\";\n@icon-wheelchair: \"\\f194\";\n@icon-wheelchair-alt: \"\\f29b\";\n@icon-wifi: \"\\f202\";\n@icon-wikipedia-w: \"\\f27c\";\n@icon-window-close: \"\\f2e1\";\n@icon-window-maximize: \"\\f2e2\";\n@icon-window-minimize: \"\\f2e3\";\n@icon-window-restore: \"\\f2e4\";\n@icon-windows: \"\\f18a\";\n@icon-won: \"\\f18f\";\n@icon-wrench: \"\\f0ad\";\n@icon-yen: \"\\f19a\";\n\n"
  },
  {
    "path": "modules/backend/assets/foundation/elements/scoreboard/README.md",
    "content": "# Scoreboard\n\n### Scoreboard\n\n```html\n<div class=\"scoreboard\">\n    <div data-control=\"toolbar\">\n        <div class=\"scoreboard-item title-value\">\n            <h4>Weight</h4>\n            <p>100</p>\n            <p class=\"description\">unit: kg</p>\n        </div>\n\n        <div class=\"scoreboard-item title-value\">\n            <h4>Comments</h4>\n            <p class=\"positive\">44</p>\n            <p class=\"description\">previous month: 32</p>\n        </div>\n\n        <div class=\"scoreboard-item title-value\">\n            <h4>Latest commenter</h4>\n            <p class=\"oc-icon-star\">John Smith</p>\n            <p class=\"description\">registered: yes</p>\n        </div>\n    </div>\n</div>\n```\n\n### Complete Example\n\n```html\n<div class=\"scoreboard\">\n    <div data-control=\"toolbar\">\n        <div class=\"scoreboard-item control-chart\" data-control=\"chart-pie\">\n            <ul>\n                <li data-color=\"#95b753\">Published <span>84</span></li>\n                <li data-color=\"#e5a91a\">Drafts <span>12</span></li>\n                <li data-color=\"#cc3300\">Deleted <span>18</span></li>\n            </ul>\n        </div>\n\n        <div class=\"scoreboard-item control-chart\" data-control=\"chart-bar\">\n            <ul>\n                <li data-color=\"#95b753\">Published <span>84</span></li>\n                <li data-color=\"#e5a91a\">Drafts <span>12</span></li>\n                <li data-color=\"#cc3300\">Deleted <span>18</span></li>\n            </ul>\n        </div>\n\n        <div class=\"scoreboard-item title-value\">\n            <h4>Weight</h4>\n            <p>100</p>\n            <p class=\"description\">unit: kg</p>\n        </div>\n\n        <div class=\"scoreboard-item title-value\">\n            <h4>Comments</h4>\n            <p class=\"positive\">44</p>\n            <p class=\"description\">previous month: 32</p>\n        </div>\n\n        <div class=\"scoreboard-item title-value\">\n            <h4>Length</h4>\n            <p class=\"negative\">31</p>\n            <p class=\"description\">previous: 42</p>\n        </div>\n\n        <div class=\"scoreboard-item title-value\">\n            <h4>Latest commenter</h4>\n            <p class=\"oc-icon-star\">John Smith</p>\n            <p class=\"description\">registered: yes</p>\n        </div>\n\n        <div class=\"scoreboard-item title-value\" data-control=\"goal-meter\" data-value=\"88\">\n            <h4>goal meter</h4>\n            <p>88%</p>\n            <p class=\"description\">37 posts remain</p>\n        </div>\n\n        <div class=\"scoreboard-item title-value goal-meter-inverse\" data-control=\"goal-meter\" data-value=\"88\">\n            <h4>goal meter</h4>\n            <p>88%</p>\n            <p class=\"description\">37 posts remain</p>\n        </div>\n    </div>\n</div>\n```\n"
  },
  {
    "path": "modules/backend/assets/foundation/elements/scoreboard/scoreboard.less",
    "content": "//\n// Scoreboard\n// --------------------------------------------------\n\n// @color-scoreboard-title:            var(--bs-emphasis-color);\n@color-scoreboard-title:            var(--bs-heading-color);\n@color-scoreboard-description:      var(--bs-secondary-color);\n@color-scoreboard-body:             var(--bs-body-color);\n@color-scoreboard-icon:             var(--oc-color-neutral);\n@color-scoreboard-positive:         var(--oc-color-positive);\n@color-scoreboard-negative:         var(--oc-color-negative);\n\ndiv.scoreboard {\n    position: relative;\n    padding: 0;\n\n    .horizontal-scroll-indicators(@color-scroll-indicator);\n    &:before, &:after { margin-top: -10px; }\n    &:before { left: 7px; }\n    &:after { right: 10px; }\n\n    div.scoreboard-item {\n        display: inline-block;\n        margin-right: 40px;\n        margin-bottom: @padding-standard;\n        vertical-align: top;\n\n        &:last-child {\n            margin-right: 0;\n        }\n\n        &.thumbnail-value {\n            margin-right: 20px;\n            img {\n                height: 72px;\n            }\n        }\n\n        span.scoreboard-colorpicker {\n            width: 0;\n            height: 0;\n            background-color: transparent;\n            border-right-color: var(--background-color);\n            border-bottom-color: var(--background-color);\n            border-top-color: var(--foreground-color);\n            border-left-color: var(--foreground-color);\n            border-width: 10px;\n            border-style: solid;\n            border-radius: 20px;\n            display: inline-block;\n\n            &:after {\n                content: \"\";\n                top: -10px;\n                left: -10px;\n                width: 20px;\n                height: 20px;\n                position: absolute;\n                box-shadow: inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), 0.2);\n                border-radius: 20px;\n            }\n        }\n    }\n\n    .control-chart {\n        // Setup the chart height in the scoreboard\n        // and set offsets so that the elements do not\n        // \"jump\" when the chart script loads and\n        // adds the canvas and color indicator elements.\n        height: 67px;\n\n        ul {\n            margin-left: 77px;\n            top: -2px;\n\n            li {\n                padding-left: 18px;\n                & > i { margin-left: -18px; }\n            }\n        }\n\n        .canvas + ul { margin-left: 0; }\n    }\n\n    .scoreboard-offset {\n        padding-left: 20px;\n    }\n}\n\nbody.slim-container {\n    div.scoreboard {\n        padding: 0 @padding-standard;\n    }\n}\n\n.title-value {\n    h4 {\n        font-size: 1.1rem;\n        line-height: 1;\n        font-weight: normal;\n        margin: 0;\n        color: @color-scoreboard-title;\n    }\n\n    p {\n        color: @color-scoreboard-body;\n        margin: 0;\n        font-size: 28px;\n\n        // Icon\n        i, &:before {\n            color: @color-scoreboard-icon;\n            font-size: 22px;\n            position: relative;\n            top: -2px;\n        }\n\n        &.success {\n            color: @color-scoreboard-positive;\n        }\n        &.danger {\n            color: @color-scoreboard-negative;\n        }\n\n        &.negative, &.positive {\n            &:after {\n                font-size: 17px;\n                vertical-align: middle;\n                position: relative;\n                top: -3px;\n                left: 5px;\n            }\n        }\n\n        &.negative {\n            color: @color-scoreboard-negative;\n            &:after{.icon(@icon-angle-double-down)};\n        }\n        &.positive {\n            color: @color-scoreboard-positive;\n            &:after{.icon(@icon-angle-double-up)};\n        }\n\n        &.description {\n            color: @color-scoreboard-description;\n            // font-weight: 300;\n            line-height: 100%;\n            font-size: 13px;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/build.less",
    "content": "//\n// Deprecated Assets\n// --------------------------------------------------\n\n@import \"less/loader.less\";\n@import \"less/layout.less\";\n@import \"less/close.less\";\n@import \"less/checkbox.less\";\n@import \"less/icons.less\";\n@import \"less/stormicon.less\";\n@import \"less/breadcrumb.less\";\n@import \"less/popup.less\";\n\n//\n// Deprecated Icons\n// --------------------------------------------------\n\n@import \"vendor/octoicons/octoicons.variables.less\";\n@import \"vendor/octoicons/octoicons.mixins.less\";\n@import \"vendor/octoicons/octoicons.less\";\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/js/backend.js",
    "content": "// Deprecated reference\nwindow.assetManager = oc.AssetManager;\nwindow.ocJSON = oc.parseJSON;\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/js/bs3-adapter.js",
    "content": "//\n// BS3 adapter\n//\n\n$(document).render(function(){\n    $('[data-toggle=dropdown]:not([data-bs-toggle])').attr('data-bs-toggle', 'dropdown');\n    $('[data-toggle=modal]:not([data-bs-toggle])').attr('data-bs-toggle', 'modal');\n    $('[data-dismiss=modal]:not([data-bs-dismiss])').attr('data-bs-dismiss', 'modal');\n    $('.fade.in:not(.show)').addClass('show');\n});\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/js/checkbox.js",
    "content": "/*\n * Checkbox control\n *\n */\n\n(function($) {\n\n    $(document).on('keypress', 'div.custom-checkbox', function(e) {\n        if (e.key === '(Space character)' || e.key === 'Spacebar' || e.key === ' ') {\n            var $cb = $('input[type=checkbox]', this)\n\n            if ($cb.data('oc-space-timestamp') == e.timeStamp)\n                return\n\n            if ($cb.get(0).disabled) {\n                return false\n            }\n\n            $cb.get(0).checked = !$cb.get(0).checked\n            $cb.data('oc-space-timestamp', e.timeStamp)\n            $cb.trigger('change')\n            return false\n        }\n    })\n\n    //\n    // Intermediate checkboxes\n    //\n\n    $(document).render(function() {\n        $('div.custom-checkbox.is-indeterminate > input').each(function() {\n            var $el = $(this),\n                checked = $el.data('checked')\n\n            switch (checked) {\n\n                // Unchecked\n                case 1:\n                    $el.prop('indeterminate', true)\n                    break\n\n                // Checked\n                case 2:\n                    $el.prop('indeterminate', false)\n                    $el.prop('checked', true)\n                    break\n\n                // Unchecked\n                default:\n                    $el.prop('indeterminate', false)\n                    $el.prop('checked', false)\n            }\n        })\n    })\n\n    $(document).on('click', 'div.custom-checkbox.is-indeterminate > label', function() {\n        var $el = $(this).parent().find('input:first'),\n            checked = $el.data('checked')\n\n        if (checked === undefined) {\n            checked = $el.is(':checked') ? 1 : 0\n        }\n\n        switch (checked) {\n\n            // Unchecked, going indeterminate\n            case 0:\n                $el.data('checked', 1)\n                $el.prop('indeterminate', true)\n                break\n\n            // Indeterminate, going checked\n            case 1:\n                $el.data('checked', 2)\n                $el.prop('indeterminate', false)\n                $el.prop('checked', true)\n                break\n\n            // Checked, going unchecked\n            default:\n                $el.data('checked', 0)\n                $el.prop('indeterminate', false)\n                $el.prop('checked', false)\n        }\n\n        $el.trigger('change')\n        return false\n    })\n\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/js/list.sortable.js",
    "content": "/*\n * Sortable plugin.\n *\n * Status: experimental. The behavior is not perfect, but it's OK in terms of memory\n * usage and disposing.\n *\n * This is a lightweight, October-style implementation of the drag & drop sorting\n * functionality. The plugin uses only HTML5 Drag&Drop feature and completely\n * disposable.\n *\n * During the dragging the plugin creates a placeholder element, which should be\n * styled separately.\n *\n * Draggable elements should be marked with \"draggable\" HTML5 attribute.\n *\n * Current / planned features:\n *\n * [x] Sorting a single list.\n * [ ] Dragging items between multiple lists.\n * [ ] Sorting nested lists.\n\n * JAVASCRIPT API\n *\n * $('#list').listSortable({})\n *\n * DATA ATTRIBUTES API\n *\n * In the simplest case the plugin can be initialized like this:\n * <ul data-control=\"list-sortable\">\n *     <li draggable=\"true\">...</li>\n *\n * Multiple lists will not support this option and the plugin should be created\n * and updated by a caller code.\n *\n * Options:\n * - handle: optional selector for a drag handle element. Also available as data-handle attribute.\n * - direction: direction of the list - horizontal or vertical. Also available as data-direction attribute. Default is vertical.\n *\n * Events:\n * - dragged.list.sortable - triggered on a list element after it was moved\n */\n\n+function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype,\n        listSortableIdCounter = 0,\n        elementsIdCounter = 0\n\n    var ListSortable = function (element, options) {\n        this.lists = []\n        this.options = options\n        this.listSortableId = null\n        this.lastMousePosition = null\n\n        Base.call(this)\n\n        $.oc.foundation.controlUtils.markDisposable(element)\n        this.init()\n\n        this.addList(element)\n    }\n\n    ListSortable.prototype = Object.create(BaseProto)\n    ListSortable.prototype.constructor = ListSortable\n\n    ListSortable.prototype.init = function () {\n        listSortableIdCounter++\n\n        this.listSortableId = 'listsortable/id/' + listSortableIdCounter\n    }\n\n    ListSortable.prototype.addList = function(list) {\n        this.lists.push(list)\n        this.registerListHandlers(list)\n\n        if (this.lists.length == 1) {\n            $(list).one('dispose-control', this.proxy(this.dispose))\n        }\n    }\n\n    //\n    // Event management\n    //\n\n    ListSortable.prototype.registerListHandlers = function(list) {\n        var $list = $(list)\n\n        $list.on('dragstart', '> li', this.proxy(this.onDragStart))\n        $list.on('dragover', '> li', this.proxy(this.onDragOver))\n        $list.on('dragenter', '> li', this.proxy(this.onDragEnter))\n        $list.on('dragleave', '> li', this.proxy(this.onDragLeave))\n        $list.on('drop', '> li', this.proxy(this.onDragDrop))\n        $list.on('dragend', '> li', this.proxy(this.onDragEnd))\n    }\n\n    ListSortable.prototype.unregisterListHandlers = function(list) {\n        var $list = $(list)\n\n        $list.off('dragstart', '> li', this.proxy(this.onDragStart))\n        $list.off('dragover', '> li', this.proxy(this.onDragOver))\n        $list.off('dragenter', '> li', this.proxy(this.onDragEnter))\n        $list.off('dragleave', '> li', this.proxy(this.onDragLeave))\n        $list.off('drop', '> li', this.proxy(this.onDragDrop))\n        $list.off('dragend', '> li', this.proxy(this.onDragEnd))\n    }\n\n    ListSortable.prototype.unregisterHandlers = function() {\n        $(document).off('dragover', this.proxy(this.onDocumentDragOver))\n        $(document).off('mousemove', this.proxy(this.onDocumentMouseMove))\n        $(this.lists[0]).off('dispose-control', this.proxy(this.dispose))\n    }\n\n    //\n    // Disposing\n    //\n\n    ListSortable.prototype.unbindLists = function() {\n        for (var i=this.lists.length-1; i>0; i--) {\n            var list = this.lists[i]\n\n            this.unregisterListHandlers(this.lists[i])\n            $(list).removeData('oc.listSortable')\n        }\n    }\n\n    ListSortable.prototype.dispose = function() {\n        this.unbindLists()\n        this.unregisterHandlers()\n\n        this.options = null\n        this.lists = []\n\n        BaseProto.dispose.call(this)\n    }\n\n    //\n    // Internal helpers\n    //\n\n    ListSortable.prototype.elementBelongsToManagedList = function(element) {\n        for (var i=this.lists.length-1; i >= 0; i--) {\n            var list = this.lists[i],\n                children = [].slice.call(list.children); // Converts HTMLCollection to array\n\n            if (children.indexOf(element) !== -1) {\n                return true\n            }\n        }\n\n        return false\n    }\n\n    ListSortable.prototype.isDragStartAllowed = function(element) {\n        // TODO: if handle selector is specified - test if\n        // the element is a handle.\n\n        return true\n    }\n\n    ListSortable.prototype.elementIsPlaceholder = function(element) {\n        return element.getAttribute('class') === 'list-sortable-placeholder'\n    }\n\n    ListSortable.prototype.getElementSortableId = function(element) {\n        if (element.hasAttribute('data-list-sortable-element-id')) {\n            return element.getAttribute('data-list-sortable-element-id')\n        }\n\n        elementsIdCounter++\n        var elementId = elementsIdCounter\n\n        element.setAttribute('data-list-sortable-element-id', elementsIdCounter)\n\n        return elementsIdCounter\n    }\n\n    ListSortable.prototype.dataTransferContains = function(ev, element) {\n        if (ev.dataTransfer.types.indexOf !== undefined){\n            return ev.dataTransfer.types.indexOf(element) >= 0\n        }\n\n        return ev.dataTransfer.types.contains(element)\n    }\n\n    ListSortable.prototype.isSourceManagedList = function(ev) {\n        return this.dataTransferContains(ev, this.listSortableId)\n    }\n\n    ListSortable.prototype.removePlaceholders = function() {\n        for (var i=this.lists.length-1; i >= 0; i--) {\n            var list = this.lists[i],\n                placeholders = list.querySelectorAll('.list-sortable-placeholder')\n\n            for (var j=placeholders.length-1; j >= 0; j--) {\n                list.removeChild(placeholders[j])\n            }\n        }\n    }\n\n    ListSortable.prototype.createPlaceholder = function(element, ev) {\n        var placeholder = document.createElement('li'),\n            placement = this.getPlaceholderPlacement(element, ev)\n\n        this.removePlaceholders()\n\n        placeholder.setAttribute('class', 'list-sortable-placeholder')\n        placeholder.setAttribute('draggable', true)\n\n        if (placement == 'before') {\n            element.parentNode.insertBefore(placeholder, element)\n        }\n        else {\n            element.parentNode.insertBefore(placeholder, element.nextSibling)\n        }\n    }\n\n    ListSortable.prototype.moveElement = function(target, ev) {\n        var list = target.parentNode,\n            placeholder = list.querySelector('.list-sortable-placeholder')\n\n        if (!placeholder) {\n            return\n        }\n\n        var elementId = ev.dataTransfer.getData('listsortable/elementid')\n        if (!elementId) {\n            return\n        }\n\n        var item = this.findDraggedItem(elementId)\n        if (!item) {\n            return\n        }\n\n        placeholder.parentNode.insertBefore(item, placeholder)\n        $(item).trigger('dragged.list.sortable')\n    }\n\n    ListSortable.prototype.findDraggedItem = function(elementId) {\n        for (var i=this.lists.length-1; i >= 0; i--) {\n            var list = this.lists[i],\n                item = list.querySelector('[data-list-sortable-element-id=\"'+elementId+'\"]')\n\n            if (item) {\n                return item\n            }\n        }\n\n        return null\n    }\n\n    ListSortable.prototype.getPlaceholderPlacement = function(hoverElement, ev) {\n        var mousePosition = $.oc.foundation.event.pageCoordinates(ev),\n            elementPosition = $.oc.foundation.element.absolutePosition(hoverElement)\n\n        if (this.options.direction == 'vertical') {\n            var elementCenter = elementPosition.top + hoverElement.offsetHeight/2\n\n            return mousePosition.y <= elementCenter ? 'before' : 'after'\n        }\n        else {\n            var elementCenter = elementPosition.left + hoverElement.offsetWidth/2\n\n            return mousePosition.x <= elementCenter ? 'before' : 'after'\n        }\n    }\n\n    ListSortable.prototype.lastMousePositionChanged = function(ev) {\n        var mousePosition = $.oc.foundation.event.pageCoordinates(ev.originalEvent)\n\n        if (this.lastMousePosition === null || this.lastMousePosition.x != mousePosition.x || this.lastMousePosition.y != mousePosition.y) {\n            this.lastMousePosition = mousePosition\n            return true\n        }\n\n        return false\n    }\n\n    ListSortable.prototype.mouseOutsideLists = function(ev) {\n        var mousePosition = $.oc.foundation.event.pageCoordinates(ev)\n\n        for (var i=this.lists.length-1; i >= 0; i--) {\n            if ($.oc.foundation.element.elementContainsPoint(this.lists[i], mousePosition)) {\n                return false\n            }\n        }\n\n        return true\n    }\n\n    ListSortable.prototype.getClosestDraggableParent = function(element) {\n        var current = element\n\n        while (current) {\n            if (current.tagName === 'LI' && current.hasAttribute('draggable') ) {\n                return current\n            }\n\n            current = current.parentNode\n        }\n\n        return null\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    ListSortable.prototype.onDragStart = function(ev) {\n        if (!this.isDragStartAllowed(ev.target)) {\n            return\n        }\n\n        ev.originalEvent.dataTransfer.effectAllowed = 'move'\n        ev.originalEvent.dataTransfer.setData('listsortable/elementid', this.getElementSortableId(ev.target))\n        ev.originalEvent.dataTransfer.setData(this.listSortableId, this.listSortableId)\n\n        // The mousemove handler is used to remove the placeholder\n        // when the drag is canceled with Escape button. We can't use\n        // the dragend for removing the placeholders because dragend\n        // is triggered before drop, but we need placeholder to exists\n        // in the drop handler.\n        //\n        // Mouse events are suppressed during the drag and drop operations,\n        // so we only need to handle it once (but we still must the handler\n        // explicitly).\n        $(document).on('mousemove', this.proxy(this.onDocumentMouseMove))\n\n        // The dragover handler is used to hide the placeholder when\n        // the mouse is outside of any known list.\n        $(document).on('dragover', this.proxy(this.onDocumentDragOver))\n    }\n\n    ListSortable.prototype.onDragOver = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        var draggable = this.getClosestDraggableParent(ev.target)\n        if (!draggable) {\n            return\n        }\n\n        if (!this.elementIsPlaceholder(draggable) && this.lastMousePositionChanged(ev)) {\n            this.createPlaceholder(draggable, ev.originalEvent)\n        }\n\n        ev.stopPropagation()\n        ev.preventDefault()\n        ev.originalEvent.dataTransfer.dropEffect = 'move'\n    }\n\n    ListSortable.prototype.onDragEnter = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        var draggable = this.getClosestDraggableParent(ev.target)\n        if (!draggable) {\n            return\n        }\n\n        if (this.elementIsPlaceholder(draggable)) {\n            return\n        }\n\n        this.createPlaceholder(draggable, ev.originalEvent)\n        ev.stopPropagation()\n        ev.preventDefault()\n    }\n\n    ListSortable.prototype.onDragLeave = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        ev.stopPropagation()\n        ev.preventDefault()\n    }\n\n    ListSortable.prototype.onDragDrop = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        var draggable = this.getClosestDraggableParent(ev.target)\n        if (!draggable) {\n            return\n        }\n\n        this.moveElement(draggable, ev.originalEvent)\n\n        this.removePlaceholders()\n    }\n\n    ListSortable.prototype.onDragEnd = function(ev) {\n        $(document).off('dragover', this.proxy(this.onDocumentDragOver))\n    }\n\n    ListSortable.prototype.onDocumentDragOver = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        if (this.mouseOutsideLists(ev.originalEvent)) {\n            this.removePlaceholders()\n            return\n        }\n    }\n\n    ListSortable.prototype.onDocumentMouseMove = function(ev) {\n        $(document).off('mousemove', this.proxy(this.onDocumentMouseMove))\n        this.removePlaceholders()\n    }\n\n\n    // PLUGIN DEFINITION\n    // ============================\n\n    ListSortable.DEFAULTS = {\n        handle: null,\n        direction: 'vertical'\n    }\n\n    var old = $.fn.listSortable\n\n    $.fn.listSortable = function (option) {\n        var args = arguments\n\n        return this.each(function () {\n            var $this = $(this),\n                data  = $this.data('oc.listSortable'),\n                options = $.extend({}, ListSortable.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data) {\n                $this.data('oc.listSortable', (data = new ListSortable(this, options)))\n            }\n\n            if (typeof option == 'string' && data) {\n                if (data[option]) {\n                    var methodArguments = Array.prototype.slice.call(args) // Clone the arguments array\n                    methodArguments.shift()\n\n                    data[option].apply(data, methodArguments)\n                }\n            }\n        })\n    }\n\n    $.fn.listSortable.Constructor = ListSortable\n\n    // LISTSORTABLE NO CONFLICT\n    // =================\n\n    $.fn.listSortable.noConflict = function () {\n        $.fn.listSortable = old\n        return this\n    }\n\n    $(document).render(function(){\n        $('[data-control=list-sortable]').listSortable()\n    })\n\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/js/loader.js",
    "content": "/*\n * The loading indicator.\n * @deprecated this will be removed in the future\n * Consider using data-attach-loading\n *\n * The load indicator DIV is injected inside its container. The container should have\n * the relative position (use the loading-indicator-container class for it).\n *\n * Used with framework.js\n *\n * data-load-indicator=\"Message\" - displays a load indicator with a supplied message, the element\n * must be wrapped in a `<div class=\"loading-indicator-container\"></div>` container.\n *\n * JavaScript API:\n *\n * $('#buttons').loadIndicator({ text: 'Saving...', opaque: true }) - display the indicator in a solid (opaque) state\n * $('#buttons').loadIndicator({ centered: true }) - display the indicator aligned in the center horizontally\n * $('#buttons').loadIndicator({ size: small }) - display the indicator in small size\n * $('#buttons').loadIndicator({ text: 'Saving...' }) - display the indicator in a transparent state\n * $('#buttons').loadIndicator('hide') - display the indicator\n */\n+function ($) { \"use strict\";\n\n    var LoadIndicator = function (element, options) {\n        this.$el = $(element);\n\n        this.options = options || {};\n        this.tally = 0;\n        this.show();\n    }\n\n    LoadIndicator.prototype.hide = function() {\n        this.tally--;\n\n        if (this.tally <= 0) {\n            $('div.loading-indicator', this.$el).remove();\n            this.$el.removeClass('in-progress');\n        }\n    }\n\n    LoadIndicator.prototype.show = function(options) {\n        if (options) {\n            this.options = options;\n        }\n\n        this.hide();\n\n        var indicator = $('<div class=\"loading-indicator\"></div>');\n        indicator.append($('<div></div>').text(this.options.text));\n        indicator.append($('<span></span>'));\n        if (this.options.opaque !== undefined) {\n            indicator.addClass('is-opaque');\n        }\n        if (this.options.centered !== undefined) {\n            indicator.addClass('indicator-center');\n        }\n        if (this.options.size === 'small') {\n            indicator.addClass('size-small');\n        }\n\n        this.$el.prepend(indicator);\n        this.$el.addClass('in-progress');\n\n        this.tally++;\n    }\n\n    LoadIndicator.prototype.destroy = function() {\n        this.$el.removeData('oc.loadIndicator');\n        this.$el = null;\n    }\n\n    LoadIndicator.DEFAULTS = {\n        text: ''\n    }\n\n    // LOADINDICATOR PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.loadIndicator;\n\n    $.fn.loadIndicator = function (option) {\n        var args = arguments;\n\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.loadIndicator')\n            var options = $.extend({}, LoadIndicator.DEFAULTS, typeof option == 'object' && option)\n\n            if (!data) {\n                if (typeof option == 'string') {\n                    return;\n                }\n\n                $this.data('oc.loadIndicator', (data = new LoadIndicator(this, options)));\n            }\n            else {\n                if (typeof option !== 'string') {\n                    data.show(options);\n                }\n                else {\n                    var methodArgs = [];\n                    for (var i=1; i<args.length; i++) {\n                        methodArgs.push(args[i]);\n                    }\n\n                    data[option].apply(data, methodArgs);\n                }\n            }\n        });\n    }\n\n    $.fn.loadIndicator.Constructor = LoadIndicator;\n\n    // LOADINDICATOR NO CONFLICT\n    // =================\n\n    $.fn.loadIndicator.noConflict = function () {\n        $.fn.loadIndicator = old;\n        return this;\n    }\n\n    // LOADINDICATOR DATA-API\n    // ==============\n\n    $(document)\n        .on('ajaxPromise', '[data-load-indicator]', function() {\n            var\n                indicatorContainer = $(this).closest('.loading-indicator-container'),\n                loadingText = $(this).data('load-indicator'),\n                options = {\n                    opaque: $(this).data('load-indicator-opaque'),\n                    centered: $(this).data('load-indicator-centered'),\n                    size: $(this).data('load-indicator-size')\n                };\n\n                if (loadingText) {\n                    options.text = loadingText;\n                }\n\n            indicatorContainer.loadIndicator(options);\n        })\n        .on('ajaxFail ajaxDone', '[data-load-indicator]', function() {\n            $(this).closest('.loading-indicator-container').loadIndicator('hide');\n        });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/less/breadcrumb.less",
    "content": "//\n// Breadcrumb\n// --------------------------------------------------\n\n@color-breadcrumb-text:           var(--bs-link-color);\n@color-breadcrumb-active-text:    var(--bs-secondary-color);\n\n.control-breadcrumb {\n    ul {\n        padding: 0 0 20px 0;\n        margin: 0;\n        font-size: 0;\n    }\n\n    ul li {\n        font-size: @font-size-base;\n        list-style: none;\n        margin: 0;\n        padding:  0;\n        display: inline-block;\n        position: relative;\n        color: @color-breadcrumb-text;\n\n        a {\n            display: inline-block;\n            color: @color-breadcrumb-text;\n            text-decoration: underline;\n            &:hover { color: @color-breadcrumb-text; }\n        }\n\n        &:after {\n            content: var(--bs-breadcrumb-divider, \"/\");\n            position: relative;\n            display: inline-block;\n            margin: 0 5px;\n            color: @color-breadcrumb-active-text;\n        }\n\n        &:last-child {\n            background-color: transparent;\n            color: @color-breadcrumb-active-text;\n\n            &:after {\n                display: none;\n            }\n        }\n    }\n}\n\n// Breadcrumb to sit flush to the element below\nbody.breadcrumb-flush .control-breadcrumb,\n.control-breadcrumb.breadcrumb-flush {\n    margin-bottom: 0;\n}\n\nbody.compact-container {\n    .control-breadcrumb {\n        margin-top: 20px;\n        margin-left: 20px;\n        margin-right: 20px;\n\n        > ul {\n            padding-bottom: 0;\n        }\n    }\n}\n\nbody.slim-container {\n    .control-breadcrumb {\n        margin-left: 20px;\n        margin-right: 20px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/less/checkbox.less",
    "content": "//\n// Checkbox\n// --------------------------------------------------\n\n@color-checkbox-checked:                        #1F99DC;\n\n@color-checkbox-icon:                           #FFFFFF;\n@color-checkbox-border:                         @input-border;\n\n@color-checkbox-switch-bg:                      #f6f6f6;\n@color-checkbox-switch-on:                      @brand-success;\n@color-checkbox-switch-off:                     @color-grey-2;\n\n@color-label-green:                             @color-checkbox-switch-on;\n@color-label-red:                               @color-checkbox-switch-off;\n\n//\n// Checkbox\n// --------------------------------------------------\n\n.custom-checkbox.nolabel label,\n.custom-radio.nolabel label {\n    .text-hide();\n}\n\n//\n// Nice Checkboxes & Radios\n//\n\n.custom-checkbox,\n.custom-radio {\n    padding-left: 23px;\n    margin-top: 0;\n\n    // Faux hide the native element for client side validation\n    input[type=radio],\n    input[type=checkbox] {\n        position: absolute;\n        overflow: hidden;\n        clip: rect(0 0 0 0);\n        // height: 1px;\n        width: 1px;\n        margin: -1px;\n        padding: 0;\n        border: 0;\n        opacity: 0;\n    }\n\n    label {\n        display: inline-block;\n        cursor: pointer;\n        position: relative;\n        padding-left: 20px;\n        margin-right: 15px;\n        margin-left: -20px;\n        font-size: @label-font-size;\n        user-select: none;\n\n        &:before {\n            content: \"\";\n            display: inline-block;\n            text-align: center;\n            color: @color-checkbox-icon;\n\n            width: 16px;\n            height: 16px;\n\n            margin-right: 15px;\n            position: absolute;\n            left: -3px;\n            top: 1px;\n            background-color: transparent;\n            .box-shadow(none);\n        }\n        &:hover:before {\n            border-color: @input-border-focus;\n        }\n        &:active:before {\n            border-color: @input-border-fade;\n            border-width: 2px;\n        }\n    }\n\n    input[type=radio] + label:before {\n        background-position: -19px -19px;\n    }\n\n    input[type=radio]:checked + label {\n        &:before {\n            background-position: 0 -19px;\n        }\n    }\n\n    input[type=radio][data-radio-color=green]:checked + label {\n        &:before {\n            background-position: -59px -19px;\n        }\n    }\n\n    input[type=radio][data-radio-color=red]:checked + label {\n        &:before {\n            background-position: -79px -19px;\n        }\n    }\n\n    input[type=checkbox] + label:before {\n        background-position: -19px 0;\n    }\n\n    input[type=checkbox]:checked + label:before {\n        background-position: 0 0;\n    }\n\n    input[type=checkbox]:indeterminate + label:before {\n        background-position: -79px 0;\n    }\n\n    input:disabled + label{\n        cursor: not-allowed;\n    }\n\n    input[type=checkbox]:disabled:checked + label:before {\n        background-position: -39px 0;\n    }\n\n    input[type=radio]:disabled:checked + label:before {\n        background-position: -39px -19px;\n    }\n\n    &:focus {\n        outline: none;\n        label:before {\n            box-shadow: @outline-focus-shadow;\n        }\n    }\n\n    p.form-text {\n        margin-bottom: 17px;\n    }\n}\n\n.custom-radio label:before {\n    .border-radius(16px);\n}\n\n.custom-checkbox label:before {\n    .border-radius(4px);\n}\n\n.inline-options {\n    .field-checkboxlist:not(.is-scrollable) {\n        .field-checkboxlist-inner {\n            padding: 10px 15px 15px 15px;\n        }\n\n        .custom-checkbox {\n            display: inline-block;\n            margin: 0;\n\n            label {\n                margin-bottom: 0 !important;\n                padding-top: 10px;\n\n                &:before {\n                    top: 10px;\n                }\n            }\n        }\n    }\n\n    &.radio-field {\n        > label {\n            display: block;\n        }\n\n        .custom-radio {\n            display: inline-block;\n            margin-bottom: 0;\n        }\n    }\n}\n\n//\n// ON / OFF Switcher\n//\n\n.switch-field {\n    .field-switch {\n        padding-left: 75px;\n        float: left;\n\n        > label {\n            margin-top: 3px;\n        }\n    }\n}\n\n.custom-switch {\n    display: block;\n    width: 65px;\n    height: 26px;\n    position: relative;\n    text-transform: uppercase;\n    border: none;\n    cursor: pointer;\n    .border-radius(3px);\n\n    * { .box-sizing(border-box); }\n    &.disabled { opacity: .5; }\n    .slide-button {\n        z-index: @zindex-checkbox - 1;\n        display: block;\n        position: absolute;\n        right: 42px;\n        top: 3px;\n        width: 20px;\n        height: 20px;\n        background-color: @color-checkbox-switch-bg;\n        .border-radius(20px);\n        .transition(all 0.1s);\n    }\n\n    label,\n    > span {\n        line-height: 23px;\n        vertical-align: middle;\n    }\n\n    label {\n        z-index: @zindex-checkbox - 2;\n        width: 100%;\n        display: block;\n        position: relative;\n    }\n\n    input {\n        z-index: @zindex-checkbox;\n        position: absolute;\n        left: 0;\n        top: 0;\n        opacity: 0;\n        &:checked {\n            ~ .slide-button {\n                right: 4px;\n            }\n            ~ span { background-color: @color-checkbox-switch-on; }\n            ~ span span {\n                &:first-of-type {\n                    color: #FFFFFF;\n                    display: block;\n                }\n                &:last-of-type {\n                    color: #666666;\n                    display: none;\n                }\n            }\n        }\n        &[disabled] {\n            ~ span {\n                background-color: #bdc3c7 !important;\n                &, & + a {\n                    cursor: default;\n                }\n            }\n        }\n    }\n\n    > span {\n        display: block;\n        height: 100%;\n        position: absolute;\n        left: 0;\n        width: 100%;\n        background-color: @color-checkbox-switch-off;\n        font-size: 12px;\n        font-weight: 600;\n        user-select: none;\n        .border-radius(20px);\n\n        span {\n            z-index: @zindex-checkbox;\n            display: block;\n            position: absolute;\n            top: 1px;\n            left: -1px;\n            .box-sizing(border-box);\n            &:last-child {\n                left: 28px;\n                color: #FFFFFF;\n                display: block;\n            }\n            &:first-of-type {\n                padding-left: 13px;\n                display: none;\n                color: #666666;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/less/close.less",
    "content": "//\n// Close icons\n// --------------------------------------------------\n\n.close {\n    float: right;\n    font-size: (@font-size-base * 1.5);\n    font-weight: @close-font-weight;\n    line-height: 1;\n    color: @close-color;\n    text-shadow: @close-text-shadow;\n    font-family: sans-serif;\n    opacity: .2;\n\n    &:hover,\n    &:focus {\n        color: @close-color;\n        text-decoration: none;\n        cursor: pointer;\n        opacity: .5;\n    }\n\n    // Additional properties for button version\n    // iOS requires the button element instead of an anchor tag.\n    // If you want the anchor version, it requires `href=\"#\"`.\n    button& {\n        padding: 0;\n        cursor: pointer;\n        background: transparent;\n        border: 0;\n        -webkit-appearance: none;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/less/icons.less",
    "content": "//\n// Migrated Icons\n//\n\n.oc-circle-thin:before, .icon-circle-thin:before { content: @icon-circle; }\n.oc-undo:before, .icon-undo:before { content: @icon-text-undo; }\n.oc-redo:before, .icon-redo:before { content: @icon-text-redo; }\n\n.oc-icon-arrow-circle-o-down:before, .icon-arrow-circle-o-down:before { content: @icon-arrow-circle-down; }\n.oc-icon-arrow-circle-o-left:before, .icon-arrow-circle-o-left:before { content: @icon-arrow-circle-left; }\n.oc-icon-arrow-circle-o-right:before, .icon-arrow-circle-o-right:before { content: @icon-arrow-circle-right; }\n.oc-icon-arrow-circle-o-up:before, .icon-arrow-circle-o-up:before { content: @icon-arrow-circle-up; }\n.oc-icon-caret-square-o-down:before, .icon-caret-square-o-down:before { content: @icon-caret-square-down; }\n.oc-icon-caret-square-o-left:before, .icon-caret-square-o-left:before { content: @icon-caret-square-left; }\n.oc-icon-caret-square-o-right:before, .icon-caret-square-o-right:before { content: @icon-caret-square-right; }\n.oc-icon-caret-square-o-up:before, .icon-caret-square-o-up:before { content: @icon-caret-square-up; }\n.oc-icon-circle-o-notch:before, .icon-circle-o-notch:before { content: @icon-circle-notch; }\n.oc-icon-hand-o-down:before, .icon-hand-o-down:before { content: @icon-hand-down; }\n.oc-icon-hand-o-left:before, .icon-hand-o-left:before { content: @icon-hand-left; }\n.oc-icon-hand-o-right:before, .icon-hand-o-right:before { content: @icon-hand-right; }\n.oc-icon-hand-o-up:before, .icon-hand-o-up:before { content: @icon-hand-up; }\n.oc-icon-thumbs-o-down:before, .icon-thumbs-o-down:before { content: @icon-thumbs-down; }\n.oc-icon-thumbs-o-up:before, .icon-thumbs-o-up:before { content: @icon-thumbs-up; }\n\n.oc-icon-address-book-o:before, .icon-address-book-o:before { content: @icon-address-book; }\n.oc-icon-address-card-o:before, .icon-address-card-o:before { content: @icon-address-card; }\n.oc-icon-bar-chart-o:before, .icon-bar-chart-o:before { content: @icon-bar-chart; }\n.oc-icon-bell-o:before, .icon-bell-o:before { content: @icon-bell; }\n.oc-icon-bell-slash-o:before, .icon-bell-slash-o:before { content: @icon-bell-slash; }\n.oc-icon-bookmark-o:before, .icon-bookmark-o:before { content: @icon-bookmark; }\n.oc-icon-building-o:before, .icon-building-o:before { content: @icon-building; }\n.oc-icon-calendar-check-o:before, .icon-calendar-check-o:before { content: @icon-calendar-check; }\n.oc-icon-calendar-minus-o:before, .icon-calendar-minus-o:before { content: @icon-calendar-minus; }\n.oc-icon-calendar-o:before, .icon-calendar-o:before { content: @icon-calendar; }\n.oc-icon-calendar-plus-o:before, .icon-calendar-plus-o:before { content: @icon-calendar-plus; }\n.oc-icon-calendar-times-o:before, .icon-calendar-times-o:before { content: @icon-calendar-times; }\n.oc-icon-check-circle-o:before, .icon-check-circle-o:before { content: @icon-check-circle; }\n.oc-icon-check-square-o:before, .icon-check-square-o:before { content: @icon-check-square; }\n.oc-icon-circle-o:before, .icon-circle-o:before { content: @icon-circle; }\n.oc-icon-clock-o:before, .icon-clock-o:before { content: @icon-clock; }\n.oc-icon-comment-o:before, .icon-comment-o:before { content: @icon-comment; }\n.oc-icon-commenting-o:before, .icon-commenting-o:before { content: @icon-commenting; }\n.oc-icon-comments-o:before, .icon-comments-o:before { content: @icon-comments; }\n.oc-icon-dot-circle-o:before, .icon-dot-circle-o:before { content: @icon-dot-circle; }\n.oc-icon-drivers-license-o:before, .icon-drivers-license-o:before { content: @icon-drivers-license; }\n.oc-icon-envelope-o:before, .icon-envelope-o:before { content: @icon-envelope; }\n.oc-icon-envelope-open-o:before, .icon-envelope-open-o:before { content: @icon-envelope-open; }\n.oc-icon-file-archive-o:before, .icon-file-archive-o:before { content: @icon-file-archive; }\n.oc-icon-file-audio-o:before, .icon-file-audio-o:before { content: @icon-file-audio; }\n.oc-icon-file-code-o:before, .icon-file-code-o:before { content: @icon-file-code; }\n.oc-icon-file-excel-o:before, .icon-file-excel-o:before { content: @icon-file-excel; }\n.oc-icon-file-image-o:before, .icon-file-image-o:before { content: @icon-file-image; }\n.oc-icon-file-movie-o:before, .icon-file-movie-o:before { content: @icon-file-movie; }\n.oc-icon-file-o:before, .icon-file-o:before { content: @icon-file; }\n.oc-icon-file-pdf-o:before, .icon-file-pdf-o:before { content: @icon-file-pdf; }\n.oc-icon-file-photo-o:before, .icon-file-photo-o:before { content: @icon-file-photo; }\n.oc-icon-file-picture-o:before, .icon-file-picture-o:before { content: @icon-file-picture; }\n.oc-icon-file-powerpoint-o:before, .icon-file-powerpoint-o:before { content: @icon-file-powerpoint; }\n.oc-icon-file-sound-o:before, .icon-file-sound-o:before { content: @icon-file-sound; }\n.oc-icon-file-text-o:before, .icon-file-text-o:before { content: @icon-file-text; }\n.oc-icon-file-video-o:before, .icon-file-video-o:before { content: @icon-file-video; }\n.oc-icon-file-word-o:before, .icon-file-word-o:before { content: @icon-file-word; }\n.oc-icon-file-zip-o:before, .icon-file-zip-o:before { content: @icon-file-zip; }\n.oc-icon-files-o:before, .icon-files-o:before { content: @icon-files; }\n.oc-icon-flag-o:before, .icon-flag-o:before { content: @icon-flag; }\n.oc-icon-floppy-o:before, .icon-floppy-o:before { content: @icon-floppy; }\n.oc-icon-folder-o:before, .icon-folder-o:before { content: @icon-folder; }\n.oc-icon-folder-open-o:before, .icon-folder-open-o:before { content: @icon-folder-open; }\n.oc-icon-frown-o:before, .icon-frown-o:before { content: @icon-frown; }\n.oc-icon-futbol-o:before, .icon-futbol-o:before { content: @icon-futbol; }\n.oc-icon-hand-grab-o:before, .icon-hand-grab-o:before { content: @icon-hand-grab; }\n.oc-icon-hand-lizard-o:before, .icon-hand-lizard-o:before { content: @icon-hand-lizard; }\n.oc-icon-hand-paper-o:before, .icon-hand-paper-o:before { content: @icon-hand-paper; }\n.oc-icon-hand-peace-o:before, .icon-hand-peace-o:before { content: @icon-hand-peace; }\n.oc-icon-hand-pointer-o:before, .icon-hand-pointer-o:before { content: @icon-hand-pointer; }\n.oc-icon-hand-rock-o:before, .icon-hand-rock-o:before { content: @icon-hand-rock; }\n.oc-icon-hand-scissors-o:before, .icon-hand-scissors-o:before { content: @icon-hand-scissors; }\n.oc-icon-hand-spock-o:before, .icon-hand-spock-o:before { content: @icon-hand-spock; }\n.oc-icon-hand-stop-o:before, .icon-hand-stop-o:before { content: @icon-hand-stop; }\n.oc-icon-handshake-o:before, .icon-handshake-o:before { content: @icon-handshake; }\n.oc-icon-hdd-o:before, .icon-hdd-o:before { content: @icon-hdd; }\n.oc-icon-heart-o:before, .icon-heart-o:before { content: @icon-heart; }\n.oc-icon-hospital-o:before, .icon-hospital-o:before { content: @icon-hospital; }\n.oc-icon-hourglass-o:before, .icon-hourglass-o:before { content: @icon-hourglass-0; }\n.oc-icon-id-card-o:before, .icon-id-card-o:before { content: @icon-id-card; }\n.oc-icon-keyboard-o:before, .icon-keyboard-o:before { content: @icon-keyboard; }\n.oc-icon-lemon-o:before, .icon-lemon-o:before { content: @icon-lemon; }\n.oc-icon-lightbulb-o:before, .icon-lightbulb-o:before { content: @icon-lightbulb; }\n.oc-icon-map-o:before, .icon-map-o:before { content: @icon-map; }\n.oc-icon-meh-o:before, .icon-meh-o:before { content: @icon-meh; }\n.oc-icon-minus-square-o:before, .icon-minus-square-o:before { content: @icon-minus-square; }\n.oc-icon-moon-o:before, .icon-moon-o:before { content: @icon-moon; }\n.oc-icon-newspaper-o:before, .icon-newspaper-o:before { content: @icon-newspaper; }\n.oc-icon-paper-plane-o:before, .icon-paper-plane-o:before { content: @icon-paper-plane; }\n.oc-icon-pause-circle-o:before, .icon-pause-circle-o:before { content: @icon-pause-circle; }\n.oc-icon-pencil-square-o:before, .icon-pencil-square-o:before { content: @icon-pencil-square; }\n.oc-icon-picture-o:before, .icon-picture-o:before { content: @icon-photo; }\n.oc-icon-play-circle-o:before, .icon-play-circle-o:before { content: @icon-play-circle; }\n.oc-icon-plus-square-o:before, .icon-plus-square-o:before { content: @icon-plus-square; }\n.oc-icon-question-circle-o:before, .icon-question-circle-o:before { content: @icon-question-circle; }\n.oc-icon-send-o:before, .icon-send-o:before { content: @icon-send; }\n.oc-icon-share-square-o:before, .icon-share-square-o:before { content: @icon-share-square; }\n.oc-icon-smile-o:before, .icon-smile-o:before { content: @icon-smile; }\n.oc-icon-snowflake-o:before, .icon-snowflake-o:before { content: @icon-snowflake; }\n.oc-icon-soccer-ball-o:before, .icon-soccer-ball-o:before { content: @icon-soccer-ball; }\n.oc-icon-square-o:before, .icon-square-o:before { content: @icon-square; }\n.oc-icon-star-half-o:before, .icon-star-half-o:before { content: @icon-star-half; }\n.oc-icon-star-o:before, .icon-star-o:before { content: @icon-star; }\n.oc-icon-sticky-note-o:before, .icon-sticky-note-o:before { content: @icon-sticky-note; }\n.oc-icon-stop-circle-o:before, .icon-stop-circle-o:before { content: @icon-stop-circle; }\n.oc-icon-sun-o:before, .icon-sun-o:before { content: @icon-sun; }\n.oc-icon-times-circle-o:before, .icon-times-circle-o:before { content: @icon-times-circle; }\n.oc-icon-times-rectangle-o:before, .icon-times-rectangle-o:before { content: @icon-times-rectangle; }\n.oc-icon-trash-o:before, .icon-trash-o:before { content: @icon-trash; }\n.oc-icon-user-circle-o:before, .icon-user-circle-o:before { content: @icon-user-circle; }\n.oc-icon-user-o:before, .icon-user-o:before { content: @icon-user; }\n.oc-icon-vcard-o:before, .icon-vcard-o:before { content: @icon-vcard; }\n.oc-icon-window-close-o:before, .icon-window-close-o:before { content: @icon-window-close; }\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/less/layout.less",
    "content": "\n//\n// Flexible layout system\n// --------------------------------------------------\n\n.layout {\n    .layout-cell() {\n        display: table-cell;\n        vertical-align: top;\n        height: 100%;\n\n        .layout-relative {\n            position: relative;\n            height: 100%;\n        }\n\n        .layout-absolute {\n            position: absolute;\n            height: 100%;\n            width: 100%;\n        }\n\n        &.min-size {\n            width: 0;\n        }\n\n        &.min-height {\n            height: 0;\n        }\n\n        &.center {\n            text-align: center;\n        }\n\n        &.middle {\n            vertical-align: middle;\n        }\n    }\n\n    display: table;\n    table-layout: fixed;\n    height: 100%;\n    width: 100%;\n\n    > .layout-row {\n        display: table-row;\n        vertical-align: top;\n        height: 100%;\n\n        > .layout-cell {\n            .layout-cell();\n        }\n\n        &.min-size {\n            height: 0.1px;\n        }\n    }\n\n    > .layout-cell {\n        .layout-cell();\n    }\n}\n\n//\n// Screen specific\n//\n\n@media (max-width: @screen-sm) {\n    .hide-on-small {\n        display: none !important;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/less/loader.less",
    "content": "//\n// Loading indicator\n// --------------------------------------------------\n\n@color-loading-indicator-text: #999999;\n@loader-image-path: @image-path;\n\n.loading-indicator {\n    padding: 20px 20px 20px 60px;\n    color: @color-loading-indicator-text;\n    font-size: 14px;\n    font-weight: 600;\n    background: @body-bg;\n    text-align: left;\n    z-index: @zindex-loader;\n\n    > span {\n        --loader-size: 40px;\n        position: absolute;\n        width: var(--loader-size);\n        height: var(--loader-size);\n        top: 50%;\n        margin-top: calc(var(--loader-size) / -2);\n        left: 0;\n        display: block;\n        border: 3px solid var(--oc-primary-border);\n        border-top-color: var(--oc-accent);\n        border-radius: 50%;\n        animation: spin 0.8s linear infinite;\n    }\n\n    &.is-transparent {\n        background-color: transparent;\n    }\n}\n\n.loading-indicator-container {\n    position: relative;\n    min-height: 40px;\n\n    .loading-indicator {\n        position: absolute;\n        left: -1px;\n        right: -1px;\n        top: -1px;\n        bottom: -1px;\n        padding-top: 0;\n\n        > div {\n            position: absolute;\n            top: 50%;\n            margin-top: -0.65em;\n        }\n    }\n}\n\n// For the focus border of buttons\n.form-buttons > .loading-indicator-container {\n    padding: .3rem;\n    margin: -.3rem;\n}\n\n.loading-indicator.is-opaque,\n.loading-indicator-container.is-opaque .loading-indicator {\n    > span {\n        background-color: var(--bs-body-bg);\n        border-color: var(--oc-primary-border);\n        border-top-color: var(--oc-accent);\n    }\n}\n\n// Sizes\n\n.loading-indicator-container.size-small {\n    min-height: 20px;\n}\n\n.loading-indicator.size-small,\n.loading-indicator-container.size-small .loading-indicator {\n    padding: 16px 16px 16px 30px;\n    font-size: 11px;\n    > span {\n        --loader-size: 20px;\n        border-width: 2px;\n    }\n}\n\n// Centered\n\n.loading-indicator.indicator-center,\n.loading-indicator-container.indicator-center .loading-indicator {\n    padding: 20px;\n\n    > span {\n        left: 50%;\n        margin-left: calc(var(--loader-size) / -2);\n        margin-top: calc(var(--loader-size) / -2);\n    }\n\n    > div {\n        text-align: center;\n        position: relative;\n        margin-top: 30px;\n    }\n}\n\n// Inset\n\n.loading-indicator.indicator-inset,\n.loading-indicator-container.indicator-inset .loading-indicator {\n    padding-left: 80px;\n\n    > span {\n        left: 20px;\n    }\n}\n\n// Form fields\n\n.loading-indicator-container.size-form-field,\n.loading-indicator-container.size-input-text {\n    min-height: 0;\n}\n\n.loading-indicator-container.size-form-field .loading-indicator,\n.loading-indicator-container.size-input-text .loading-indicator {\n    background-color: transparent;\n    padding: 0;\n    margin: 0;\n\n    > span {\n        --loader-size: 23px;\n        padding: 0;\n        margin: 0;\n        left: auto;\n        right: 7px;\n        top: 6px;\n        border-width: 2px;\n    }\n}\n\n.loading-indicator-container.size-form-field .loading-indicator > span {\n    --loader-size: 20px;\n    top: 0;\n    right: 0;\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/less/popup.less",
    "content": "//\n// Backward support for Flex headers\n// --------------------------------------------------\n\n.modal-content .modal-header.flex-row-reverse {\n    justify-content: space-between;\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/less/stormicon.less",
    "content": ".storm-icon {\n    background-size: 300px 63px;\n    background-image: url('../foundation/migrate/images/storm-icons.png');\n\n    @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\n        background-image: url('../foundation/migrate/images/storm-icons@2x.png');\n    }\n}\n\n.storm-icon-pseudo {\n    &:before {\n        content: '';\n        .storm-icon();\n    }\n}"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/LICENSE.txt",
    "content": "Copyright (c) 2007-2013 IOLA and Ole Laursen\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/Makefile",
    "content": "# Makefile for generating minified files\n\n.PHONY: all\n\n# we cheat and process all .js files instead of an exhaustive list\nall: $(patsubst %.js,%.min.js,$(filter-out %.min.js,$(wildcard *.js)))\n\n%.min.js: %.js\n\tyui-compressor $< -o $@\n\ntest:\n\t./node_modules/.bin/jshint *jquery.flot.js\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/excanvas.js",
    "content": "// Copyright 2006 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n\n// Known Issues:\n//\n// * Patterns only support repeat.\n// * Radial gradient are not implemented. The VML version of these look very\n//   different from the canvas one.\n// * Clipping paths are not implemented.\n// * Coordsize. The width and height attribute have higher priority than the\n//   width and height style values which isn't correct.\n// * Painting mode isn't implemented.\n// * Canvas width/height should is using content-box by default. IE in\n//   Quirks mode will draw the canvas using border-box. Either change your\n//   doctype to HTML5\n//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)\n//   or use Box Sizing Behavior from WebFX\n//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)\n// * Non uniform scaling does not correctly scale strokes.\n// * Filling very large shapes (above 5000 points) is buggy.\n// * Optimize. There is always room for speed improvements.\n\n// Only add this code if we do not already have a canvas implementation\nif (!document.createElement('canvas').getContext) {\n\n(function() {\n\n  // alias some functions to make (compiled) code shorter\n  var m = Math;\n  var mr = m.round;\n  var ms = m.sin;\n  var mc = m.cos;\n  var abs = m.abs;\n  var sqrt = m.sqrt;\n\n  // this is used for sub pixel precision\n  var Z = 10;\n  var Z2 = Z / 2;\n\n  var IE_VERSION = +navigator.userAgent.match(/MSIE ([\\d.]+)?/)[1];\n\n  /**\n   * This funtion is assigned to the <canvas> elements as element.getContext().\n   * @this {HTMLElement}\n   * @return {CanvasRenderingContext2D_}\n   */\n  function getContext() {\n    return this.context_ ||\n        (this.context_ = new CanvasRenderingContext2D_(this));\n  }\n\n  var slice = Array.prototype.slice;\n\n  /**\n   * Binds a function to an object. The returned function will always use the\n   * passed in {@code obj} as {@code this}.\n   *\n   * Example:\n   *\n   *   g = bind(f, obj, a, b)\n   *   g(c, d) // will do f.call(obj, a, b, c, d)\n   *\n   * @param {Function} f The function to bind the object to\n   * @param {Object} obj The object that should act as this when the function\n   *     is called\n   * @param {*} var_args Rest arguments that will be used as the initial\n   *     arguments when the function is called\n   * @return {Function} A new function that has bound this\n   */\n  function bind(f, obj, var_args) {\n    var a = slice.call(arguments, 2);\n    return function() {\n      return f.apply(obj, a.concat(slice.call(arguments)));\n    };\n  }\n\n  function encodeHtmlAttribute(s) {\n    return String(s).replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n  }\n\n  function addNamespace(doc, prefix, urn) {\n    if (!doc.namespaces[prefix]) {\n      doc.namespaces.add(prefix, urn, '#default#VML');\n    }\n  }\n\n  function addNamespacesAndStylesheet(doc) {\n    addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');\n    addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');\n\n    // Setup default CSS.  Only add one style sheet per document\n    if (!doc.styleSheets['ex_canvas_']) {\n      var ss = doc.createStyleSheet();\n      ss.owningElement.id = 'ex_canvas_';\n      ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +\n          // default size is 300x150 in Gecko and Opera\n          'text-align:left;width:300px;height:150px}';\n    }\n  }\n\n  // Add namespaces and stylesheet at startup.\n  addNamespacesAndStylesheet(document);\n\n  var G_vmlCanvasManager_ = {\n    init: function(opt_doc) {\n      var doc = opt_doc || document;\n      // Create a dummy element so that IE will allow canvas elements to be\n      // recognized.\n      doc.createElement('canvas');\n      doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));\n    },\n\n    init_: function(doc) {\n      // find all canvas elements\n      var els = doc.getElementsByTagName('canvas');\n      for (var i = 0; i < els.length; i++) {\n        this.initElement(els[i]);\n      }\n    },\n\n    /**\n     * Public initializes a canvas element so that it can be used as canvas\n     * element from now on. This is called automatically before the page is\n     * loaded but if you are creating elements using createElement you need to\n     * make sure this is called on the element.\n     * @param {HTMLElement} el The canvas element to initialize.\n     * @return {HTMLElement} the element that was created.\n     */\n    initElement: function(el) {\n      if (!el.getContext) {\n        el.getContext = getContext;\n\n        // Add namespaces and stylesheet to document of the element.\n        addNamespacesAndStylesheet(el.ownerDocument);\n\n        // Remove fallback content. There is no way to hide text nodes so we\n        // just remove all childNodes. We could hide all elements and remove\n        // text nodes but who really cares about the fallback content.\n        el.innerHTML = '';\n\n        // do not use inline function because that will leak memory\n        el.attachEvent('onpropertychange', onPropertyChange);\n        el.attachEvent('onresize', onResize);\n\n        var attrs = el.attributes;\n        if (attrs.width && attrs.width.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setWidth_(attrs.width.nodeValue);\n          el.style.width = attrs.width.nodeValue + 'px';\n        } else {\n          el.width = el.clientWidth;\n        }\n        if (attrs.height && attrs.height.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setHeight_(attrs.height.nodeValue);\n          el.style.height = attrs.height.nodeValue + 'px';\n        } else {\n          el.height = el.clientHeight;\n        }\n        //el.getContext().setCoordsize_()\n      }\n      return el;\n    }\n  };\n\n  function onPropertyChange(e) {\n    var el = e.srcElement;\n\n    switch (e.propertyName) {\n      case 'width':\n        el.getContext().clearRect();\n        el.style.width = el.attributes.width.nodeValue + 'px';\n        // In IE8 this does not trigger onresize.\n        el.firstChild.style.width =  el.clientWidth + 'px';\n        break;\n      case 'height':\n        el.getContext().clearRect();\n        el.style.height = el.attributes.height.nodeValue + 'px';\n        el.firstChild.style.height = el.clientHeight + 'px';\n        break;\n    }\n  }\n\n  function onResize(e) {\n    var el = e.srcElement;\n    if (el.firstChild) {\n      el.firstChild.style.width =  el.clientWidth + 'px';\n      el.firstChild.style.height = el.clientHeight + 'px';\n    }\n  }\n\n  G_vmlCanvasManager_.init();\n\n  // precompute \"00\" to \"FF\"\n  var decToHex = [];\n  for (var i = 0; i < 16; i++) {\n    for (var j = 0; j < 16; j++) {\n      decToHex[i * 16 + j] = i.toString(16) + j.toString(16);\n    }\n  }\n\n  function createMatrixIdentity() {\n    return [\n      [1, 0, 0],\n      [0, 1, 0],\n      [0, 0, 1]\n    ];\n  }\n\n  function matrixMultiply(m1, m2) {\n    var result = createMatrixIdentity();\n\n    for (var x = 0; x < 3; x++) {\n      for (var y = 0; y < 3; y++) {\n        var sum = 0;\n\n        for (var z = 0; z < 3; z++) {\n          sum += m1[x][z] * m2[z][y];\n        }\n\n        result[x][y] = sum;\n      }\n    }\n    return result;\n  }\n\n  function copyState(o1, o2) {\n    o2.fillStyle     = o1.fillStyle;\n    o2.lineCap       = o1.lineCap;\n    o2.lineJoin      = o1.lineJoin;\n    o2.lineWidth     = o1.lineWidth;\n    o2.miterLimit    = o1.miterLimit;\n    o2.shadowBlur    = o1.shadowBlur;\n    o2.shadowColor   = o1.shadowColor;\n    o2.shadowOffsetX = o1.shadowOffsetX;\n    o2.shadowOffsetY = o1.shadowOffsetY;\n    o2.strokeStyle   = o1.strokeStyle;\n    o2.globalAlpha   = o1.globalAlpha;\n    o2.font          = o1.font;\n    o2.textAlign     = o1.textAlign;\n    o2.textBaseline  = o1.textBaseline;\n    o2.arcScaleX_    = o1.arcScaleX_;\n    o2.arcScaleY_    = o1.arcScaleY_;\n    o2.lineScale_    = o1.lineScale_;\n  }\n\n  var colorData = {\n    aliceblue: '#F0F8FF',\n    antiquewhite: '#FAEBD7',\n    aquamarine: '#7FFFD4',\n    azure: '#F0FFFF',\n    beige: '#F5F5DC',\n    bisque: '#FFE4C4',\n    black: '#000000',\n    blanchedalmond: '#FFEBCD',\n    blueviolet: '#8A2BE2',\n    brown: '#A52A2A',\n    burlywood: '#DEB887',\n    cadetblue: '#5F9EA0',\n    chartreuse: '#7FFF00',\n    chocolate: '#D2691E',\n    coral: '#FF7F50',\n    cornflowerblue: '#6495ED',\n    cornsilk: '#FFF8DC',\n    crimson: '#DC143C',\n    cyan: '#00FFFF',\n    darkblue: '#00008B',\n    darkcyan: '#008B8B',\n    darkgoldenrod: '#B8860B',\n    darkgray: '#A9A9A9',\n    darkgreen: '#006400',\n    darkgrey: '#A9A9A9',\n    darkkhaki: '#BDB76B',\n    darkmagenta: '#8B008B',\n    darkolivegreen: '#556B2F',\n    darkorange: '#FF8C00',\n    darkorchid: '#9932CC',\n    darkred: '#8B0000',\n    darksalmon: '#E9967A',\n    darkseagreen: '#8FBC8F',\n    darkslateblue: '#483D8B',\n    darkslategray: '#2F4F4F',\n    darkslategrey: '#2F4F4F',\n    darkturquoise: '#00CED1',\n    darkviolet: '#9400D3',\n    deeppink: '#FF1493',\n    deepskyblue: '#00BFFF',\n    dimgray: '#696969',\n    dimgrey: '#696969',\n    dodgerblue: '#1E90FF',\n    firebrick: '#B22222',\n    floralwhite: '#FFFAF0',\n    forestgreen: '#228B22',\n    gainsboro: '#DCDCDC',\n    ghostwhite: '#F8F8FF',\n    gold: '#FFD700',\n    goldenrod: '#DAA520',\n    grey: '#808080',\n    greenyellow: '#ADFF2F',\n    honeydew: '#F0FFF0',\n    hotpink: '#FF69B4',\n    indianred: '#CD5C5C',\n    indigo: '#4B0082',\n    ivory: '#FFFFF0',\n    khaki: '#F0E68C',\n    lavender: '#E6E6FA',\n    lavenderblush: '#FFF0F5',\n    lawngreen: '#7CFC00',\n    lemonchiffon: '#FFFACD',\n    lightblue: '#ADD8E6',\n    lightcoral: '#F08080',\n    lightcyan: '#E0FFFF',\n    lightgoldenrodyellow: '#FAFAD2',\n    lightgreen: '#90EE90',\n    lightgrey: '#D3D3D3',\n    lightpink: '#FFB6C1',\n    lightsalmon: '#FFA07A',\n    lightseagreen: '#20B2AA',\n    lightskyblue: '#87CEFA',\n    lightslategray: '#778899',\n    lightslategrey: '#778899',\n    lightsteelblue: '#B0C4DE',\n    lightyellow: '#FFFFE0',\n    limegreen: '#32CD32',\n    linen: '#FAF0E6',\n    magenta: '#FF00FF',\n    mediumaquamarine: '#66CDAA',\n    mediumblue: '#0000CD',\n    mediumorchid: '#BA55D3',\n    mediumpurple: '#9370DB',\n    mediumseagreen: '#3CB371',\n    mediumslateblue: '#7B68EE',\n    mediumspringgreen: '#00FA9A',\n    mediumturquoise: '#48D1CC',\n    mediumvioletred: '#C71585',\n    midnightblue: '#191970',\n    mintcream: '#F5FFFA',\n    mistyrose: '#FFE4E1',\n    moccasin: '#FFE4B5',\n    navajowhite: '#FFDEAD',\n    oldlace: '#FDF5E6',\n    olivedrab: '#6B8E23',\n    orange: '#FFA500',\n    orangered: '#FF4500',\n    orchid: '#DA70D6',\n    palegoldenrod: '#EEE8AA',\n    palegreen: '#98FB98',\n    paleturquoise: '#AFEEEE',\n    palevioletred: '#DB7093',\n    papayawhip: '#FFEFD5',\n    peachpuff: '#FFDAB9',\n    peru: '#CD853F',\n    pink: '#FFC0CB',\n    plum: '#DDA0DD',\n    powderblue: '#B0E0E6',\n    rosybrown: '#BC8F8F',\n    royalblue: '#4169E1',\n    saddlebrown: '#8B4513',\n    salmon: '#FA8072',\n    sandybrown: '#F4A460',\n    seagreen: '#2E8B57',\n    seashell: '#FFF5EE',\n    sienna: '#A0522D',\n    skyblue: '#87CEEB',\n    slateblue: '#6A5ACD',\n    slategray: '#708090',\n    slategrey: '#708090',\n    snow: '#FFFAFA',\n    springgreen: '#00FF7F',\n    steelblue: '#4682B4',\n    tan: '#D2B48C',\n    thistle: '#D8BFD8',\n    tomato: '#FF6347',\n    turquoise: '#40E0D0',\n    violet: '#EE82EE',\n    wheat: '#F5DEB3',\n    whitesmoke: '#F5F5F5',\n    yellowgreen: '#9ACD32'\n  };\n\n\n  function getRgbHslContent(styleString) {\n    var start = styleString.indexOf('(', 3);\n    var end = styleString.indexOf(')', start + 1);\n    var parts = styleString.substring(start + 1, end).split(',');\n    // add alpha if needed\n    if (parts.length != 4 || styleString.charAt(3) != 'a') {\n      parts[3] = 1;\n    }\n    return parts;\n  }\n\n  function percent(s) {\n    return parseFloat(s) / 100;\n  }\n\n  function clamp(v, min, max) {\n    return Math.min(max, Math.max(min, v));\n  }\n\n  function hslToRgb(parts){\n    var r, g, b, h, s, l;\n    h = parseFloat(parts[0]) / 360 % 360;\n    if (h < 0)\n      h++;\n    s = clamp(percent(parts[1]), 0, 1);\n    l = clamp(percent(parts[2]), 0, 1);\n    if (s == 0) {\n      r = g = b = l; // achromatic\n    } else {\n      var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n      var p = 2 * l - q;\n      r = hueToRgb(p, q, h + 1 / 3);\n      g = hueToRgb(p, q, h);\n      b = hueToRgb(p, q, h - 1 / 3);\n    }\n\n    return '#' + decToHex[Math.floor(r * 255)] +\n        decToHex[Math.floor(g * 255)] +\n        decToHex[Math.floor(b * 255)];\n  }\n\n  function hueToRgb(m1, m2, h) {\n    if (h < 0)\n      h++;\n    if (h > 1)\n      h--;\n\n    if (6 * h < 1)\n      return m1 + (m2 - m1) * 6 * h;\n    else if (2 * h < 1)\n      return m2;\n    else if (3 * h < 2)\n      return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n    else\n      return m1;\n  }\n\n  var processStyleCache = {};\n\n  function processStyle(styleString) {\n    if (styleString in processStyleCache) {\n      return processStyleCache[styleString];\n    }\n\n    var str, alpha = 1;\n\n    styleString = String(styleString);\n    if (styleString.charAt(0) == '#') {\n      str = styleString;\n    } else if (/^rgb/.test(styleString)) {\n      var parts = getRgbHslContent(styleString);\n      var str = '#', n;\n      for (var i = 0; i < 3; i++) {\n        if (parts[i].indexOf('%') != -1) {\n          n = Math.floor(percent(parts[i]) * 255);\n        } else {\n          n = +parts[i];\n        }\n        str += decToHex[clamp(n, 0, 255)];\n      }\n      alpha = +parts[3];\n    } else if (/^hsl/.test(styleString)) {\n      var parts = getRgbHslContent(styleString);\n      str = hslToRgb(parts);\n      alpha = parts[3];\n    } else {\n      str = colorData[styleString] || styleString;\n    }\n    return processStyleCache[styleString] = {color: str, alpha: alpha};\n  }\n\n  var DEFAULT_STYLE = {\n    style: 'normal',\n    variant: 'normal',\n    weight: 'normal',\n    size: 10,\n    family: 'sans-serif'\n  };\n\n  // Internal text style cache\n  var fontStyleCache = {};\n\n  function processFontStyle(styleString) {\n    if (fontStyleCache[styleString]) {\n      return fontStyleCache[styleString];\n    }\n\n    var el = document.createElement('div');\n    var style = el.style;\n    try {\n      style.font = styleString;\n    } catch (ex) {\n      // Ignore failures to set to invalid font.\n    }\n\n    return fontStyleCache[styleString] = {\n      style: style.fontStyle || DEFAULT_STYLE.style,\n      variant: style.fontVariant || DEFAULT_STYLE.variant,\n      weight: style.fontWeight || DEFAULT_STYLE.weight,\n      size: style.fontSize || DEFAULT_STYLE.size,\n      family: style.fontFamily || DEFAULT_STYLE.family\n    };\n  }\n\n  function getComputedStyle(style, element) {\n    var computedStyle = {};\n\n    for (var p in style) {\n      computedStyle[p] = style[p];\n    }\n\n    // Compute the size\n    var canvasFontSize = parseFloat(element.currentStyle.fontSize),\n        fontSize = parseFloat(style.size);\n\n    if (typeof style.size == 'number') {\n      computedStyle.size = style.size;\n    } else if (style.size.indexOf('px') != -1) {\n      computedStyle.size = fontSize;\n    } else if (style.size.indexOf('em') != -1) {\n      computedStyle.size = canvasFontSize * fontSize;\n    } else if(style.size.indexOf('%') != -1) {\n      computedStyle.size = (canvasFontSize / 100) * fontSize;\n    } else if (style.size.indexOf('pt') != -1) {\n      computedStyle.size = fontSize / .75;\n    } else {\n      computedStyle.size = canvasFontSize;\n    }\n\n    // Different scaling between normal text and VML text. This was found using\n    // trial and error to get the same size as non VML text.\n    computedStyle.size *= 0.981;\n\n    return computedStyle;\n  }\n\n  function buildStyle(style) {\n    return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +\n        style.size + 'px ' + style.family;\n  }\n\n  var lineCapMap = {\n    'butt': 'flat',\n    'round': 'round'\n  };\n\n  function processLineCap(lineCap) {\n    return lineCapMap[lineCap] || 'square';\n  }\n\n  /**\n   * This class implements CanvasRenderingContext2D interface as described by\n   * the WHATWG.\n   * @param {HTMLElement} canvasElement The element that the 2D context should\n   * be associated with\n   */\n  function CanvasRenderingContext2D_(canvasElement) {\n    this.m_ = createMatrixIdentity();\n\n    this.mStack_ = [];\n    this.aStack_ = [];\n    this.currentPath_ = [];\n\n    // Canvas context properties\n    this.strokeStyle = '#000';\n    this.fillStyle = '#000';\n\n    this.lineWidth = 1;\n    this.lineJoin = 'miter';\n    this.lineCap = 'butt';\n    this.miterLimit = Z * 1;\n    this.globalAlpha = 1;\n    this.font = '10px sans-serif';\n    this.textAlign = 'left';\n    this.textBaseline = 'alphabetic';\n    this.canvas = canvasElement;\n\n    var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' +\n        canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';\n    var el = canvasElement.ownerDocument.createElement('div');\n    el.style.cssText = cssText;\n    canvasElement.appendChild(el);\n\n    var overlayEl = el.cloneNode(false);\n    // Use a non transparent background.\n    overlayEl.style.backgroundColor = 'red';\n    overlayEl.style.filter = 'alpha(opacity=0)';\n    canvasElement.appendChild(overlayEl);\n\n    this.element_ = el;\n    this.arcScaleX_ = 1;\n    this.arcScaleY_ = 1;\n    this.lineScale_ = 1;\n  }\n\n  var contextPrototype = CanvasRenderingContext2D_.prototype;\n  contextPrototype.clearRect = function() {\n    if (this.textMeasureEl_) {\n      this.textMeasureEl_.removeNode(true);\n      this.textMeasureEl_ = null;\n    }\n    this.element_.innerHTML = '';\n  };\n\n  contextPrototype.beginPath = function() {\n    // TODO: Branch current matrix so that save/restore has no effect\n    //       as per safari docs.\n    this.currentPath_ = [];\n  };\n\n  contextPrototype.moveTo = function(aX, aY) {\n    var p = getCoords(this, aX, aY);\n    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.lineTo = function(aX, aY) {\n    var p = getCoords(this, aX, aY);\n    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});\n\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,\n                                            aCP2x, aCP2y,\n                                            aX, aY) {\n    var p = getCoords(this, aX, aY);\n    var cp1 = getCoords(this, aCP1x, aCP1y);\n    var cp2 = getCoords(this, aCP2x, aCP2y);\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  // Helper function that takes the already fixed cordinates.\n  function bezierCurveTo(self, cp1, cp2, p) {\n    self.currentPath_.push({\n      type: 'bezierCurveTo',\n      cp1x: cp1.x,\n      cp1y: cp1.y,\n      cp2x: cp2.x,\n      cp2y: cp2.y,\n      x: p.x,\n      y: p.y\n    });\n    self.currentX_ = p.x;\n    self.currentY_ = p.y;\n  }\n\n  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {\n    // the following is lifted almost directly from\n    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes\n\n    var cp = getCoords(this, aCPx, aCPy);\n    var p = getCoords(this, aX, aY);\n\n    var cp1 = {\n      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),\n      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)\n    };\n    var cp2 = {\n      x: cp1.x + (p.x - this.currentX_) / 3.0,\n      y: cp1.y + (p.y - this.currentY_) / 3.0\n    };\n\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  contextPrototype.arc = function(aX, aY, aRadius,\n                                  aStartAngle, aEndAngle, aClockwise) {\n    aRadius *= Z;\n    var arcType = aClockwise ? 'at' : 'wa';\n\n    var xStart = aX + mc(aStartAngle) * aRadius - Z2;\n    var yStart = aY + ms(aStartAngle) * aRadius - Z2;\n\n    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;\n    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;\n\n    // IE won't render arches drawn counter clockwise if xStart == xEnd.\n    if (xStart == xEnd && !aClockwise) {\n      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something\n                       // that can be represented in binary\n    }\n\n    var p = getCoords(this, aX, aY);\n    var pStart = getCoords(this, xStart, yStart);\n    var pEnd = getCoords(this, xEnd, yEnd);\n\n    this.currentPath_.push({type: arcType,\n                           x: p.x,\n                           y: p.y,\n                           radius: aRadius,\n                           xStart: pStart.x,\n                           yStart: pStart.y,\n                           xEnd: pEnd.x,\n                           yEnd: pEnd.y});\n\n  };\n\n  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n  };\n\n  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.stroke();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.fill();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {\n    var gradient = new CanvasGradient_('gradient');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    return gradient;\n  };\n\n  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,\n                                                   aX1, aY1, aR1) {\n    var gradient = new CanvasGradient_('gradientradial');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.r0_ = aR0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    gradient.r1_ = aR1;\n    return gradient;\n  };\n\n  contextPrototype.drawImage = function(image, var_args) {\n    var dx, dy, dw, dh, sx, sy, sw, sh;\n\n    // to find the original width we overide the width and height\n    var oldRuntimeWidth = image.runtimeStyle.width;\n    var oldRuntimeHeight = image.runtimeStyle.height;\n    image.runtimeStyle.width = 'auto';\n    image.runtimeStyle.height = 'auto';\n\n    // get the original size\n    var w = image.width;\n    var h = image.height;\n\n    // and remove overides\n    image.runtimeStyle.width = oldRuntimeWidth;\n    image.runtimeStyle.height = oldRuntimeHeight;\n\n    if (arguments.length == 3) {\n      dx = arguments[1];\n      dy = arguments[2];\n      sx = sy = 0;\n      sw = dw = w;\n      sh = dh = h;\n    } else if (arguments.length == 5) {\n      dx = arguments[1];\n      dy = arguments[2];\n      dw = arguments[3];\n      dh = arguments[4];\n      sx = sy = 0;\n      sw = w;\n      sh = h;\n    } else if (arguments.length == 9) {\n      sx = arguments[1];\n      sy = arguments[2];\n      sw = arguments[3];\n      sh = arguments[4];\n      dx = arguments[5];\n      dy = arguments[6];\n      dw = arguments[7];\n      dh = arguments[8];\n    } else {\n      throw Error('Invalid number of arguments');\n    }\n\n    var d = getCoords(this, dx, dy);\n\n    var w2 = sw / 2;\n    var h2 = sh / 2;\n\n    var vmlStr = [];\n\n    var W = 10;\n    var H = 10;\n\n    // For some reason that I've now forgotten, using divs didn't work\n    vmlStr.push(' <g_vml_:group',\n                ' coordsize=\"', Z * W, ',', Z * H, '\"',\n                ' coordorigin=\"0,0\"' ,\n                ' style=\"width:', W, 'px;height:', H, 'px;position:absolute;');\n\n    // If filters are necessary (rotation exists), create them\n    // filters are bog-slow, so only create them if abbsolutely necessary\n    // The following check doesn't account for skews (which don't exist\n    // in the canvas spec (yet) anyway.\n\n    if (this.m_[0][0] != 1 || this.m_[0][1] ||\n        this.m_[1][1] != 1 || this.m_[1][0]) {\n      var filter = [];\n\n      // Note the 12/21 reversal\n      filter.push('M11=', this.m_[0][0], ',',\n                  'M12=', this.m_[1][0], ',',\n                  'M21=', this.m_[0][1], ',',\n                  'M22=', this.m_[1][1], ',',\n                  'Dx=', mr(d.x / Z), ',',\n                  'Dy=', mr(d.y / Z), '');\n\n      // Bounding box calculation (need to minimize displayed area so that\n      // filters don't waste time on unused pixels.\n      var max = d;\n      var c2 = getCoords(this, dx + dw, dy);\n      var c3 = getCoords(this, dx, dy + dh);\n      var c4 = getCoords(this, dx + dw, dy + dh);\n\n      max.x = m.max(max.x, c2.x, c3.x, c4.x);\n      max.y = m.max(max.y, c2.y, c3.y, c4.y);\n\n      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),\n                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',\n                  filter.join(''), \", sizingmethod='clip');\");\n\n    } else {\n      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');\n    }\n\n    vmlStr.push(' \">' ,\n                '<g_vml_:image src=\"', image.src, '\"',\n                ' style=\"width:', Z * dw, 'px;',\n                ' height:', Z * dh, 'px\"',\n                ' cropleft=\"', sx / w, '\"',\n                ' croptop=\"', sy / h, '\"',\n                ' cropright=\"', (w - sx - sw) / w, '\"',\n                ' cropbottom=\"', (h - sy - sh) / h, '\"',\n                ' />',\n                '</g_vml_:group>');\n\n    this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));\n  };\n\n  contextPrototype.stroke = function(aFill) {\n    var W = 10;\n    var H = 10;\n    // Divide the shape into chunks if it's too long because IE has a limit\n    // somewhere for how long a VML shape can be. This simple division does\n    // not work with fills, only strokes, unfortunately.\n    var chunkSize = 5000;\n\n    var min = {x: null, y: null};\n    var max = {x: null, y: null};\n\n    for (var j = 0; j < this.currentPath_.length; j += chunkSize) {\n      var lineStr = [];\n      var lineOpen = false;\n\n      lineStr.push('<g_vml_:shape',\n                   ' filled=\"', !!aFill, '\"',\n                   ' style=\"position:absolute;width:', W, 'px;height:', H, 'px;\"',\n                   ' coordorigin=\"0,0\"',\n                   ' coordsize=\"', Z * W, ',', Z * H, '\"',\n                   ' stroked=\"', !aFill, '\"',\n                   ' path=\"');\n\n      var newSeq = false;\n\n      for (var i = j; i < Math.min(j + chunkSize, this.currentPath_.length); i++) {\n        if (i % chunkSize == 0 && i > 0) { // move into position for next chunk\n          lineStr.push(' m ', mr(this.currentPath_[i-1].x), ',', mr(this.currentPath_[i-1].y));\n        }\n\n        var p = this.currentPath_[i];\n        var c;\n\n        switch (p.type) {\n          case 'moveTo':\n            c = p;\n            lineStr.push(' m ', mr(p.x), ',', mr(p.y));\n            break;\n          case 'lineTo':\n            lineStr.push(' l ', mr(p.x), ',', mr(p.y));\n            break;\n          case 'close':\n            lineStr.push(' x ');\n            p = null;\n            break;\n          case 'bezierCurveTo':\n            lineStr.push(' c ',\n                         mr(p.cp1x), ',', mr(p.cp1y), ',',\n                         mr(p.cp2x), ',', mr(p.cp2y), ',',\n                         mr(p.x), ',', mr(p.y));\n            break;\n          case 'at':\n          case 'wa':\n            lineStr.push(' ', p.type, ' ',\n                         mr(p.x - this.arcScaleX_ * p.radius), ',',\n                         mr(p.y - this.arcScaleY_ * p.radius), ' ',\n                         mr(p.x + this.arcScaleX_ * p.radius), ',',\n                         mr(p.y + this.arcScaleY_ * p.radius), ' ',\n                         mr(p.xStart), ',', mr(p.yStart), ' ',\n                         mr(p.xEnd), ',', mr(p.yEnd));\n            break;\n        }\n  \n  \n        // TODO: Following is broken for curves due to\n        //       move to proper paths.\n  \n        // Figure out dimensions so we can do gradient fills\n        // properly\n        if (p) {\n          if (min.x == null || p.x < min.x) {\n            min.x = p.x;\n          }\n          if (max.x == null || p.x > max.x) {\n            max.x = p.x;\n          }\n          if (min.y == null || p.y < min.y) {\n            min.y = p.y;\n          }\n          if (max.y == null || p.y > max.y) {\n            max.y = p.y;\n          }\n        }\n      }\n      lineStr.push(' \">');\n  \n      if (!aFill) {\n        appendStroke(this, lineStr);\n      } else {\n        appendFill(this, lineStr, min, max);\n      }\n  \n      lineStr.push('</g_vml_:shape>');\n  \n      this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n    }\n  };\n\n  function appendStroke(ctx, lineStr) {\n    var a = processStyle(ctx.strokeStyle);\n    var color = a.color;\n    var opacity = a.alpha * ctx.globalAlpha;\n    var lineWidth = ctx.lineScale_ * ctx.lineWidth;\n\n    // VML cannot correctly render a line if the width is less than 1px.\n    // In that case, we dilute the color to make the line look thinner.\n    if (lineWidth < 1) {\n      opacity *= lineWidth;\n    }\n\n    lineStr.push(\n      '<g_vml_:stroke',\n      ' opacity=\"', opacity, '\"',\n      ' joinstyle=\"', ctx.lineJoin, '\"',\n      ' miterlimit=\"', ctx.miterLimit, '\"',\n      ' endcap=\"', processLineCap(ctx.lineCap), '\"',\n      ' weight=\"', lineWidth, 'px\"',\n      ' color=\"', color, '\" />'\n    );\n  }\n\n  function appendFill(ctx, lineStr, min, max) {\n    var fillStyle = ctx.fillStyle;\n    var arcScaleX = ctx.arcScaleX_;\n    var arcScaleY = ctx.arcScaleY_;\n    var width = max.x - min.x;\n    var height = max.y - min.y;\n    if (fillStyle instanceof CanvasGradient_) {\n      // TODO: Gradients transformed with the transformation matrix.\n      var angle = 0;\n      var focus = {x: 0, y: 0};\n\n      // additional offset\n      var shift = 0;\n      // scale factor for offset\n      var expansion = 1;\n\n      if (fillStyle.type_ == 'gradient') {\n        var x0 = fillStyle.x0_ / arcScaleX;\n        var y0 = fillStyle.y0_ / arcScaleY;\n        var x1 = fillStyle.x1_ / arcScaleX;\n        var y1 = fillStyle.y1_ / arcScaleY;\n        var p0 = getCoords(ctx, x0, y0);\n        var p1 = getCoords(ctx, x1, y1);\n        var dx = p1.x - p0.x;\n        var dy = p1.y - p0.y;\n        angle = Math.atan2(dx, dy) * 180 / Math.PI;\n\n        // The angle should be a non-negative number.\n        if (angle < 0) {\n          angle += 360;\n        }\n\n        // Very small angles produce an unexpected result because they are\n        // converted to a scientific notation string.\n        if (angle < 1e-6) {\n          angle = 0;\n        }\n      } else {\n        var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);\n        focus = {\n          x: (p0.x - min.x) / width,\n          y: (p0.y - min.y) / height\n        };\n\n        width  /= arcScaleX * Z;\n        height /= arcScaleY * Z;\n        var dimension = m.max(width, height);\n        shift = 2 * fillStyle.r0_ / dimension;\n        expansion = 2 * fillStyle.r1_ / dimension - shift;\n      }\n\n      // We need to sort the color stops in ascending order by offset,\n      // otherwise IE won't interpret it correctly.\n      var stops = fillStyle.colors_;\n      stops.sort(function(cs1, cs2) {\n        return cs1.offset - cs2.offset;\n      });\n\n      var length = stops.length;\n      var color1 = stops[0].color;\n      var color2 = stops[length - 1].color;\n      var opacity1 = stops[0].alpha * ctx.globalAlpha;\n      var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;\n\n      var colors = [];\n      for (var i = 0; i < length; i++) {\n        var stop = stops[i];\n        colors.push(stop.offset * expansion + shift + ' ' + stop.color);\n      }\n\n      // When colors attribute is used, the meanings of opacity and o:opacity2\n      // are reversed.\n      lineStr.push('<g_vml_:fill type=\"', fillStyle.type_, '\"',\n                   ' method=\"none\" focus=\"100%\"',\n                   ' color=\"', color1, '\"',\n                   ' color2=\"', color2, '\"',\n                   ' colors=\"', colors.join(','), '\"',\n                   ' opacity=\"', opacity2, '\"',\n                   ' g_o_:opacity2=\"', opacity1, '\"',\n                   ' angle=\"', angle, '\"',\n                   ' focusposition=\"', focus.x, ',', focus.y, '\" />');\n    } else if (fillStyle instanceof CanvasPattern_) {\n      if (width && height) {\n        var deltaLeft = -min.x;\n        var deltaTop = -min.y;\n        lineStr.push('<g_vml_:fill',\n                     ' position=\"',\n                     deltaLeft / width * arcScaleX * arcScaleX, ',',\n                     deltaTop / height * arcScaleY * arcScaleY, '\"',\n                     ' type=\"tile\"',\n                     // TODO: Figure out the correct size to fit the scale.\n                     //' size=\"', w, 'px ', h, 'px\"',\n                     ' src=\"', fillStyle.src_, '\" />');\n       }\n    } else {\n      var a = processStyle(ctx.fillStyle);\n      var color = a.color;\n      var opacity = a.alpha * ctx.globalAlpha;\n      lineStr.push('<g_vml_:fill color=\"', color, '\" opacity=\"', opacity,\n                   '\" />');\n    }\n  }\n\n  contextPrototype.fill = function() {\n    this.stroke(true);\n  };\n\n  contextPrototype.closePath = function() {\n    this.currentPath_.push({type: 'close'});\n  };\n\n  function getCoords(ctx, aX, aY) {\n    var m = ctx.m_;\n    return {\n      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,\n      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2\n    };\n  };\n\n  contextPrototype.save = function() {\n    var o = {};\n    copyState(this, o);\n    this.aStack_.push(o);\n    this.mStack_.push(this.m_);\n    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);\n  };\n\n  contextPrototype.restore = function() {\n    if (this.aStack_.length) {\n      copyState(this.aStack_.pop(), this);\n      this.m_ = this.mStack_.pop();\n    }\n  };\n\n  function matrixIsFinite(m) {\n    return isFinite(m[0][0]) && isFinite(m[0][1]) &&\n        isFinite(m[1][0]) && isFinite(m[1][1]) &&\n        isFinite(m[2][0]) && isFinite(m[2][1]);\n  }\n\n  function setM(ctx, m, updateLineScale) {\n    if (!matrixIsFinite(m)) {\n      return;\n    }\n    ctx.m_ = m;\n\n    if (updateLineScale) {\n      // Get the line scale.\n      // Determinant of this.m_ means how much the area is enlarged by the\n      // transformation. So its square root can be used as a scale factor\n      // for width.\n      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];\n      ctx.lineScale_ = sqrt(abs(det));\n    }\n  }\n\n  contextPrototype.translate = function(aX, aY) {\n    var m1 = [\n      [1,  0,  0],\n      [0,  1,  0],\n      [aX, aY, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.rotate = function(aRot) {\n    var c = mc(aRot);\n    var s = ms(aRot);\n\n    var m1 = [\n      [c,  s, 0],\n      [-s, c, 0],\n      [0,  0, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.scale = function(aX, aY) {\n    this.arcScaleX_ *= aX;\n    this.arcScaleY_ *= aY;\n    var m1 = [\n      [aX, 0,  0],\n      [0,  aY, 0],\n      [0,  0,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {\n    var m1 = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {\n    var m = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, m, true);\n  };\n\n  /**\n   * The text drawing function.\n   * The maxWidth argument isn't taken in account, since no browser supports\n   * it yet.\n   */\n  contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {\n    var m = this.m_,\n        delta = 1000,\n        left = 0,\n        right = delta,\n        offset = {x: 0, y: 0},\n        lineStr = [];\n\n    var fontStyle = getComputedStyle(processFontStyle(this.font),\n                                     this.element_);\n\n    var fontStyleString = buildStyle(fontStyle);\n\n    var elementStyle = this.element_.currentStyle;\n    var textAlign = this.textAlign.toLowerCase();\n    switch (textAlign) {\n      case 'left':\n      case 'center':\n      case 'right':\n        break;\n      case 'end':\n        textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';\n        break;\n      case 'start':\n        textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';\n        break;\n      default:\n        textAlign = 'left';\n    }\n\n    // 1.75 is an arbitrary number, as there is no info about the text baseline\n    switch (this.textBaseline) {\n      case 'hanging':\n      case 'top':\n        offset.y = fontStyle.size / 1.75;\n        break;\n      case 'middle':\n        break;\n      default:\n      case null:\n      case 'alphabetic':\n      case 'ideographic':\n      case 'bottom':\n        offset.y = -fontStyle.size / 2.25;\n        break;\n    }\n\n    switch(textAlign) {\n      case 'right':\n        left = delta;\n        right = 0.05;\n        break;\n      case 'center':\n        left = right = delta / 2;\n        break;\n    }\n\n    var d = getCoords(this, x + offset.x, y + offset.y);\n\n    lineStr.push('<g_vml_:line from=\"', -left ,' 0\" to=\"', right ,' 0.05\" ',\n                 ' coordsize=\"100 100\" coordorigin=\"0 0\"',\n                 ' filled=\"', !stroke, '\" stroked=\"', !!stroke,\n                 '\" style=\"position:absolute;width:1px;height:1px;\">');\n\n    if (stroke) {\n      appendStroke(this, lineStr);\n    } else {\n      // TODO: Fix the min and max params.\n      appendFill(this, lineStr, {x: -left, y: 0},\n                 {x: right, y: fontStyle.size});\n    }\n\n    var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +\n                m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';\n\n    var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);\n\n    lineStr.push('<g_vml_:skew on=\"t\" matrix=\"', skewM ,'\" ',\n                 ' offset=\"', skewOffset, '\" origin=\"', left ,' 0\" />',\n                 '<g_vml_:path textpathok=\"true\" />',\n                 '<g_vml_:textpath on=\"true\" string=\"',\n                 encodeHtmlAttribute(text),\n                 '\" style=\"v-text-align:', textAlign,\n                 ';font:', encodeHtmlAttribute(fontStyleString),\n                 '\" /></g_vml_:line>');\n\n    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n  };\n\n  contextPrototype.fillText = function(text, x, y, maxWidth) {\n    this.drawText_(text, x, y, maxWidth, false);\n  };\n\n  contextPrototype.strokeText = function(text, x, y, maxWidth) {\n    this.drawText_(text, x, y, maxWidth, true);\n  };\n\n  contextPrototype.measureText = function(text) {\n    if (!this.textMeasureEl_) {\n      var s = '<span style=\"position:absolute;' +\n          'top:-20000px;left:0;padding:0;margin:0;border:none;' +\n          'white-space:pre;\"></span>';\n      this.element_.insertAdjacentHTML('beforeEnd', s);\n      this.textMeasureEl_ = this.element_.lastChild;\n    }\n    var doc = this.element_.ownerDocument;\n    this.textMeasureEl_.innerHTML = '';\n    this.textMeasureEl_.style.font = this.font;\n    // Don't use innerHTML or innerText because they allow markup/whitespace.\n    this.textMeasureEl_.appendChild(doc.createTextNode(text));\n    return {width: this.textMeasureEl_.offsetWidth};\n  };\n\n  /******** STUBS ********/\n  contextPrototype.clip = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.arcTo = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.createPattern = function(image, repetition) {\n    return new CanvasPattern_(image, repetition);\n  };\n\n  // Gradient / Pattern Stubs\n  function CanvasGradient_(aType) {\n    this.type_ = aType;\n    this.x0_ = 0;\n    this.y0_ = 0;\n    this.r0_ = 0;\n    this.x1_ = 0;\n    this.y1_ = 0;\n    this.r1_ = 0;\n    this.colors_ = [];\n  }\n\n  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {\n    aColor = processStyle(aColor);\n    this.colors_.push({offset: aOffset,\n                       color: aColor.color,\n                       alpha: aColor.alpha});\n  };\n\n  function CanvasPattern_(image, repetition) {\n    assertImageIsValid(image);\n    switch (repetition) {\n      case 'repeat':\n      case null:\n      case '':\n        this.repetition_ = 'repeat';\n        break\n      case 'repeat-x':\n      case 'repeat-y':\n      case 'no-repeat':\n        this.repetition_ = repetition;\n        break;\n      default:\n        throwException('SYNTAX_ERR');\n    }\n\n    this.src_ = image.src;\n    this.width_ = image.width;\n    this.height_ = image.height;\n  }\n\n  function throwException(s) {\n    throw new DOMException_(s);\n  }\n\n  function assertImageIsValid(img) {\n    if (!img || img.nodeType != 1 || img.tagName != 'IMG') {\n      throwException('TYPE_MISMATCH_ERR');\n    }\n    if (img.readyState != 'complete') {\n      throwException('INVALID_STATE_ERR');\n    }\n  }\n\n  function DOMException_(s) {\n    this.code = this[s];\n    this.message = s +': DOM Exception ' + this.code;\n  }\n  var p = DOMException_.prototype = new Error;\n  p.INDEX_SIZE_ERR = 1;\n  p.DOMSTRING_SIZE_ERR = 2;\n  p.HIERARCHY_REQUEST_ERR = 3;\n  p.WRONG_DOCUMENT_ERR = 4;\n  p.INVALID_CHARACTER_ERR = 5;\n  p.NO_DATA_ALLOWED_ERR = 6;\n  p.NO_MODIFICATION_ALLOWED_ERR = 7;\n  p.NOT_FOUND_ERR = 8;\n  p.NOT_SUPPORTED_ERR = 9;\n  p.INUSE_ATTRIBUTE_ERR = 10;\n  p.INVALID_STATE_ERR = 11;\n  p.SYNTAX_ERR = 12;\n  p.INVALID_MODIFICATION_ERR = 13;\n  p.NAMESPACE_ERR = 14;\n  p.INVALID_ACCESS_ERR = 15;\n  p.VALIDATION_ERR = 16;\n  p.TYPE_MISMATCH_ERR = 17;\n\n  // set up externs\n  G_vmlCanvasManager = G_vmlCanvasManager_;\n  CanvasRenderingContext2D = CanvasRenderingContext2D_;\n  CanvasGradient = CanvasGradient_;\n  CanvasPattern = CanvasPattern_;\n  DOMException = DOMException_;\n})();\n\n} // if\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.colorhelpers.js",
    "content": "/* Plugin for jQuery for working with colors.\n * \n * Version 1.1.\n * \n * Inspiration from jQuery color animation plugin by John Resig.\n *\n * Released under the MIT license by Ole Laursen, October 2009.\n *\n * Examples:\n *\n *   $.color.parse(\"#fff\").scale('rgb', 0.25).add('a', -0.5).toString()\n *   var c = $.color.extract($(\"#mydiv\"), 'background-color');\n *   console.log(c.r, c.g, c.b, c.a);\n *   $.color.make(100, 50, 25, 0.4).toString() // returns \"rgba(100,50,25,0.4)\"\n *\n * Note that .scale() and .add() return the same modified object\n * instead of making a new one.\n *\n * V. 1.1: Fix error handling so e.g. parsing an empty string does\n * produce a color rather than just crashing.\n */ \n\n(function($) {\n    $.color = {};\n\n    // construct color object with some convenient chainable helpers\n    $.color.make = function (r, g, b, a) {\n        var o = {};\n        o.r = r || 0;\n        o.g = g || 0;\n        o.b = b || 0;\n        o.a = a != null ? a : 1;\n\n        o.add = function (c, d) {\n            for (var i = 0; i < c.length; ++i)\n                o[c.charAt(i)] += d;\n            return o.normalize();\n        };\n        \n        o.scale = function (c, f) {\n            for (var i = 0; i < c.length; ++i)\n                o[c.charAt(i)] *= f;\n            return o.normalize();\n        };\n        \n        o.toString = function () {\n            if (o.a >= 1.0) {\n                return \"rgb(\"+[o.r, o.g, o.b].join(\",\")+\")\";\n            } else {\n                return \"rgba(\"+[o.r, o.g, o.b, o.a].join(\",\")+\")\";\n            }\n        };\n\n        o.normalize = function () {\n            function clamp(min, value, max) {\n                return value < min ? min: (value > max ? max: value);\n            }\n            \n            o.r = clamp(0, parseInt(o.r), 255);\n            o.g = clamp(0, parseInt(o.g), 255);\n            o.b = clamp(0, parseInt(o.b), 255);\n            o.a = clamp(0, o.a, 1);\n            return o;\n        };\n\n        o.clone = function () {\n            return $.color.make(o.r, o.b, o.g, o.a);\n        };\n\n        return o.normalize();\n    }\n\n    // extract CSS color property from element, going up in the DOM\n    // if it's \"transparent\"\n    $.color.extract = function (elem, css) {\n        var c;\n        do {\n            c = elem.css(css).toLowerCase();\n            // keep going until we find an element that has color, or\n            // we hit the body\n            if (c != '' && c != 'transparent')\n                break;\n            elem = elem.parent();\n        } while (!$.nodeName(elem.get(0), \"body\"));\n\n        // catch Safari's way of signalling transparent\n        if (c == \"rgba(0, 0, 0, 0)\")\n            c = \"transparent\";\n        \n        return $.color.parse(c);\n    }\n    \n    // parse CSS color string (like \"rgb(10, 32, 43)\" or \"#fff\"),\n    // returns color object, if parsing failed, you get black (0, 0,\n    // 0) out\n    $.color.parse = function (str) {\n        var res, m = $.color.make;\n\n        // Look for rgb(num,num,num)\n        if (res = /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(str))\n            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10));\n        \n        // Look for rgba(num,num,num,num)\n        if (res = /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str))\n            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4]));\n            \n        // Look for rgb(num%,num%,num%)\n        if (res = /rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(str))\n            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55);\n\n        // Look for rgba(num%,num%,num%,num)\n        if (res = /rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str))\n            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4]));\n        \n        // Look for #a0b1c2\n        if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))\n            return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16));\n\n        // Look for #fff\n        if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))\n            return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16));\n\n        // Otherwise, we're most likely dealing with a named color\n        var name = $.trim(str).toLowerCase();\n        if (name == \"transparent\")\n            return m(255, 255, 255, 0);\n        else {\n            // default to black\n            res = lookupColors[name] || [0, 0, 0];\n            return m(res[0], res[1], res[2]);\n        }\n    }\n    \n    var lookupColors = {\n        aqua:[0,255,255],\n        azure:[240,255,255],\n        beige:[245,245,220],\n        black:[0,0,0],\n        blue:[0,0,255],\n        brown:[165,42,42],\n        cyan:[0,255,255],\n        darkblue:[0,0,139],\n        darkcyan:[0,139,139],\n        darkgrey:[169,169,169],\n        darkgreen:[0,100,0],\n        darkkhaki:[189,183,107],\n        darkmagenta:[139,0,139],\n        darkolivegreen:[85,107,47],\n        darkorange:[255,140,0],\n        darkorchid:[153,50,204],\n        darkred:[139,0,0],\n        darksalmon:[233,150,122],\n        darkviolet:[148,0,211],\n        fuchsia:[255,0,255],\n        gold:[255,215,0],\n        green:[0,128,0],\n        indigo:[75,0,130],\n        khaki:[240,230,140],\n        lightblue:[173,216,230],\n        lightcyan:[224,255,255],\n        lightgreen:[144,238,144],\n        lightgrey:[211,211,211],\n        lightpink:[255,182,193],\n        lightyellow:[255,255,224],\n        lime:[0,255,0],\n        magenta:[255,0,255],\n        maroon:[128,0,0],\n        navy:[0,0,128],\n        olive:[128,128,0],\n        orange:[255,165,0],\n        pink:[255,192,203],\n        purple:[128,0,128],\n        violet:[128,0,128],\n        red:[255,0,0],\n        silver:[192,192,192],\n        white:[255,255,255],\n        yellow:[255,255,0]\n    };\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.canvas.js",
    "content": "/* Flot plugin for drawing all elements of a plot on the canvas.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nFlot normally produces certain elements, like axis labels and the legend, using\nHTML elements. This permits greater interactivity and customization, and often\nlooks better, due to cross-browser canvas text inconsistencies and limitations.\n\nIt can also be desirable to render the plot entirely in canvas, particularly\nif the goal is to save it as an image, or if Flot is being used in a context\nwhere the HTML DOM does not exist, as is the case within Node.js. This plugin\nswitches out Flot's standard drawing operations for canvas-only replacements.\n\nCurrently the plugin supports only axis labels, but it will eventually allow\nevery element of the plot to be rendered directly to canvas.\n\nThe plugin supports these options:\n\n{\n    canvas: boolean\n}\n\nThe \"canvas\" option controls whether full canvas drawing is enabled, making it\npossible to toggle on and off. This is useful when a plot uses HTML text in the\nbrowser, but needs to redraw with canvas text when exporting as an image.\n\n*/\n\n(function($) {\n\n\tvar options = {\n\t\tcanvas: true\n\t};\n\n\tvar render, getTextInfo, addText;\n\n\t// Cache the prototype hasOwnProperty for faster access\n\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\tfunction init(plot, classes) {\n\n\t\tvar Canvas = classes.Canvas;\n\n\t\t// We only want to replace the functions once; the second time around\n\t\t// we would just get our new function back.  This whole replacing of\n\t\t// prototype functions is a disaster, and needs to be changed ASAP.\n\n\t\tif (render == null) {\n\t\t\tgetTextInfo = Canvas.prototype.getTextInfo,\n\t\t\taddText = Canvas.prototype.addText,\n\t\t\trender = Canvas.prototype.render;\n\t\t}\n\n\t\t// Finishes rendering the canvas, including overlaid text\n\n\t\tCanvas.prototype.render = function() {\n\n\t\t\tif (!plot.getOptions().canvas) {\n\t\t\t\treturn render.call(this);\n\t\t\t}\n\n\t\t\tvar context = this.context,\n\t\t\t\tcache = this._textCache;\n\n\t\t\t// For each text layer, render elements marked as active\n\n\t\t\tcontext.save();\n\t\t\tcontext.textBaseline = \"middle\";\n\n\t\t\tfor (var layerKey in cache) {\n\t\t\t\tif (hasOwnProperty.call(cache, layerKey)) {\n\t\t\t\t\tvar layerCache = cache[layerKey];\n\t\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\t\tvar styleCache = layerCache[styleKey],\n\t\t\t\t\t\t\t\tupdateStyles = true;\n\t\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\n\t\t\t\t\t\t\t\t\tvar info = styleCache[key],\n\t\t\t\t\t\t\t\t\t\tpositions = info.positions,\n\t\t\t\t\t\t\t\t\t\tlines = info.lines;\n\n\t\t\t\t\t\t\t\t\t// Since every element at this level of the cache have the\n\t\t\t\t\t\t\t\t\t// same font and fill styles, we can just change them once\n\t\t\t\t\t\t\t\t\t// using the values from the first element.\n\n\t\t\t\t\t\t\t\t\tif (updateStyles) {\n\t\t\t\t\t\t\t\t\t\tcontext.fillStyle = info.font.color;\n\t\t\t\t\t\t\t\t\t\tcontext.font = info.font.definition;\n\t\t\t\t\t\t\t\t\t\tupdateStyles = false;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\t\tif (position.active) {\n\t\t\t\t\t\t\t\t\t\t\tfor (var j = 0, line; line = position.lines[j]; j++) {\n\t\t\t\t\t\t\t\t\t\t\t\tcontext.fillText(lines[j].text, line[0], line[1]);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tpositions.splice(i--, 1);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (positions.length == 0) {\n\t\t\t\t\t\t\t\t\t\tdelete styleCache[key];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext.restore();\n\t\t};\n\n\t\t// Creates (if necessary) and returns a text info object.\n\t\t//\n\t\t// When the canvas option is set, the object looks like this:\n\t\t//\n\t\t// {\n\t\t//     width: Width of the text's bounding box.\n\t\t//     height: Height of the text's bounding box.\n\t\t//     positions: Array of positions at which this text is drawn.\n\t\t//     lines: [{\n\t\t//         height: Height of this line.\n\t\t//         widths: Width of this line.\n\t\t//         text: Text on this line.\n\t\t//     }],\n\t\t//     font: {\n\t\t//         definition: Canvas font property string.\n\t\t//         color: Color of the text.\n\t\t//     },\n\t\t// }\n\t\t//\n\t\t// The positions array contains objects that look like this:\n\t\t//\n\t\t// {\n\t\t//     active: Flag indicating whether the text should be visible.\n\t\t//     lines: Array of [x, y] coordinates at which to draw the line.\n\t\t//     x: X coordinate at which to draw the text.\n\t\t//     y: Y coordinate at which to draw the text.\n\t\t// }\n\n\t\tCanvas.prototype.getTextInfo = function(layer, text, font, angle, width) {\n\n\t\t\tif (!plot.getOptions().canvas) {\n\t\t\t\treturn getTextInfo.call(this, layer, text, font, angle, width);\n\t\t\t}\n\n\t\t\tvar textStyle, layerCache, styleCache, info;\n\n\t\t\t// Cast the value to a string, in case we were given a number\n\n\t\t\ttext = \"\" + text;\n\n\t\t\t// If the font is a font-spec object, generate a CSS definition\n\n\t\t\tif (typeof font === \"object\") {\n\t\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px \" + font.family;\n\t\t\t} else {\n\t\t\t\ttextStyle = font;\n\t\t\t}\n\n\t\t\t// Retrieve (or create) the cache for the text's layer and styles\n\n\t\t\tlayerCache = this._textCache[layer];\n\n\t\t\tif (layerCache == null) {\n\t\t\t\tlayerCache = this._textCache[layer] = {};\n\t\t\t}\n\n\t\t\tstyleCache = layerCache[textStyle];\n\n\t\t\tif (styleCache == null) {\n\t\t\t\tstyleCache = layerCache[textStyle] = {};\n\t\t\t}\n\n\t\t\tinfo = styleCache[text];\n\n\t\t\tif (info == null) {\n\n\t\t\t\tvar context = this.context;\n\n\t\t\t\t// If the font was provided as CSS, create a div with those\n\t\t\t\t// classes and examine it to generate a canvas font spec.\n\n\t\t\t\tif (typeof font !== \"object\") {\n\n\t\t\t\t\tvar element = $(\"<div>&nbsp;</div>\")\n\t\t\t\t\t\t.css(\"position\", \"absolute\")\n\t\t\t\t\t\t.addClass(typeof font === \"string\" ? font : null)\n\t\t\t\t\t\t.appendTo(this.getTextLayer(layer));\n\n\t\t\t\t\tfont = {\n\t\t\t\t\t\tlineHeight: element.height(),\n\t\t\t\t\t\tstyle: element.css(\"font-style\"),\n\t\t\t\t\t\tvariant: element.css(\"font-variant\"),\n\t\t\t\t\t\tweight: element.css(\"font-weight\"),\n\t\t\t\t\t\tfamily: element.css(\"font-family\"),\n\t\t\t\t\t\tcolor: element.css(\"color\")\n\t\t\t\t\t};\n\n\t\t\t\t\t// Setting line-height to 1, without units, sets it equal\n\t\t\t\t\t// to the font-size, even if the font-size is abstract,\n\t\t\t\t\t// like 'smaller'.  This enables us to read the real size\n\t\t\t\t\t// via the element's height, working around browsers that\n\t\t\t\t\t// return the literal 'smaller' value.\n\n\t\t\t\t\tfont.size = element.css(\"line-height\", 1).height();\n\n\t\t\t\t\telement.remove();\n\t\t\t\t}\n\n\t\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px \" + font.family;\n\n\t\t\t\t// Create a new info object, initializing the dimensions to\n\t\t\t\t// zero so we can count them up line-by-line.\n\n\t\t\t\tinfo = styleCache[text] = {\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tpositions: [],\n\t\t\t\t\tlines: [],\n\t\t\t\t\tfont: {\n\t\t\t\t\t\tdefinition: textStyle,\n\t\t\t\t\t\tcolor: font.color\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tcontext.save();\n\t\t\t\tcontext.font = textStyle;\n\n\t\t\t\t// Canvas can't handle multi-line strings; break on various\n\t\t\t\t// newlines, including HTML brs, to build a list of lines.\n\t\t\t\t// Note that we could split directly on regexps, but IE < 9 is\n\t\t\t\t// broken; revisit when we drop IE 7/8 support.\n\n\t\t\t\tvar lines = (text + \"\").replace(/<br ?\\/?>|\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n\n\t\t\t\tfor (var i = 0; i < lines.length; ++i) {\n\n\t\t\t\t\tvar lineText = lines[i],\n\t\t\t\t\t\tmeasured = context.measureText(lineText);\n\n\t\t\t\t\tinfo.width = Math.max(measured.width, info.width);\n\t\t\t\t\tinfo.height += font.lineHeight;\n\n\t\t\t\t\tinfo.lines.push({\n\t\t\t\t\t\ttext: lineText,\n\t\t\t\t\t\twidth: measured.width,\n\t\t\t\t\t\theight: font.lineHeight\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcontext.restore();\n\t\t\t}\n\n\t\t\treturn info;\n\t\t};\n\n\t\t// Adds a text string to the canvas text overlay.\n\n\t\tCanvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {\n\n\t\t\tif (!plot.getOptions().canvas) {\n\t\t\t\treturn addText.call(this, layer, x, y, text, font, angle, width, halign, valign);\n\t\t\t}\n\n\t\t\tvar info = this.getTextInfo(layer, text, font, angle, width),\n\t\t\t\tpositions = info.positions,\n\t\t\t\tlines = info.lines;\n\n\t\t\t// Text is drawn with baseline 'middle', which we need to account\n\t\t\t// for by adding half a line's height to the y position.\n\n\t\t\ty += info.height / lines.length / 2;\n\n\t\t\t// Tweak the initial y-position to match vertical alignment\n\n\t\t\tif (valign == \"middle\") {\n\t\t\t\ty = Math.round(y - info.height / 2);\n\t\t\t} else if (valign == \"bottom\") {\n\t\t\t\ty = Math.round(y - info.height);\n\t\t\t} else {\n\t\t\t\ty = Math.round(y);\n\t\t\t}\n\n\t\t\t// FIXME: LEGACY BROWSER FIX\n\t\t\t// AFFECTS: Opera < 12.00\n\n\t\t\t// Offset the y coordinate, since Opera is off pretty\n\t\t\t// consistently compared to the other browsers.\n\n\t\t\tif (!!(window.opera && window.opera.version().split(\".\")[0] < 12)) {\n\t\t\t\ty -= 2;\n\t\t\t}\n\n\t\t\t// Determine whether this text already exists at this position.\n\t\t\t// If so, mark it for inclusion in the next render pass.\n\n\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\t\tposition.active = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the text doesn't exist at this position, create a new entry\n\n\t\t\tposition = {\n\t\t\t\tactive: true,\n\t\t\t\tlines: [],\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t};\n\n\t\t\tpositions.push(position);\n\n\t\t\t// Fill in the x & y positions of each line, adjusting them\n\t\t\t// individually for horizontal alignment.\n\n\t\t\tfor (var i = 0, line; line = lines[i]; i++) {\n\t\t\t\tif (halign == \"center\") {\n\t\t\t\t\tposition.lines.push([Math.round(x - line.width / 2), y]);\n\t\t\t\t} else if (halign == \"right\") {\n\t\t\t\t\tposition.lines.push([Math.round(x - line.width), y]);\n\t\t\t\t} else {\n\t\t\t\t\tposition.lines.push([Math.round(x), y]);\n\t\t\t\t}\n\t\t\t\ty += line.height;\n\t\t\t}\n\t\t};\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"canvas\",\n\t\tversion: \"1.0\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.categories.js",
    "content": "/* Flot plugin for plotting textual data or categories.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nConsider a dataset like [[\"February\", 34], [\"March\", 20], ...]. This plugin\nallows you to plot such a dataset directly.\n\nTo enable it, you must specify mode: \"categories\" on the axis with the textual\nlabels, e.g.\n\n\t$.plot(\"#placeholder\", data, { xaxis: { mode: \"categories\" } });\n\nBy default, the labels are ordered as they are met in the data series. If you\nneed a different ordering, you can specify \"categories\" on the axis options\nand list the categories there:\n\n\txaxis: {\n\t\tmode: \"categories\",\n\t\tcategories: [\"February\", \"March\", \"April\"]\n\t}\n\nIf you need to customize the distances between the categories, you can specify\n\"categories\" as an object mapping labels to values\n\n\txaxis: {\n\t\tmode: \"categories\",\n\t\tcategories: { \"February\": 1, \"March\": 3, \"April\": 4 }\n\t}\n\nIf you don't specify all categories, the remaining categories will be numbered\nfrom the max value plus 1 (with a spacing of 1 between each).\n\nInternally, the plugin works by transforming the input data through an auto-\ngenerated mapping where the first category becomes 0, the second 1, etc.\nHence, a point like [\"February\", 34] becomes [0, 34] internally in Flot (this\nis visible in hover and click events that return numbers rather than the\ncategory labels). The plugin also overrides the tick generator to spit out the\ncategories as ticks instead of the values.\n\nIf you need to map a value back to its label, the mapping is always accessible\nas \"categories\" on the axis object, e.g. plot.getAxes().xaxis.categories.\n\n*/\n\n(function ($) {\n    var options = {\n        xaxis: {\n            categories: null\n        },\n        yaxis: {\n            categories: null\n        }\n    };\n    \n    function processRawData(plot, series, data, datapoints) {\n        // if categories are enabled, we need to disable\n        // auto-transformation to numbers so the strings are intact\n        // for later processing\n\n        var xCategories = series.xaxis.options.mode == \"categories\",\n            yCategories = series.yaxis.options.mode == \"categories\";\n        \n        if (!(xCategories || yCategories))\n            return;\n\n        var format = datapoints.format;\n\n        if (!format) {\n            // FIXME: auto-detection should really not be defined here\n            var s = series;\n            format = [];\n            format.push({ x: true, number: true, required: true });\n            format.push({ y: true, number: true, required: true });\n\n            if (s.bars.show || (s.lines.show && s.lines.fill)) {\n                var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));\n                format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });\n                if (s.bars.horizontal) {\n                    delete format[format.length - 1].y;\n                    format[format.length - 1].x = true;\n                }\n            }\n            \n            datapoints.format = format;\n        }\n\n        for (var m = 0; m < format.length; ++m) {\n            if (format[m].x && xCategories)\n                format[m].number = false;\n            \n            if (format[m].y && yCategories)\n                format[m].number = false;\n        }\n    }\n\n    function getNextIndex(categories) {\n        var index = -1;\n        \n        for (var v in categories)\n            if (categories[v] > index)\n                index = categories[v];\n\n        return index + 1;\n    }\n\n    function categoriesTickGenerator(axis) {\n        var res = [];\n        for (var label in axis.categories) {\n            var v = axis.categories[label];\n            if (v >= axis.min && v <= axis.max)\n                res.push([v, label]);\n        }\n\n        res.sort(function (a, b) { return a[0] - b[0]; });\n\n        return res;\n    }\n    \n    function setupCategoriesForAxis(series, axis, datapoints) {\n        if (series[axis].options.mode != \"categories\")\n            return;\n        \n        if (!series[axis].categories) {\n            // parse options\n            var c = {}, o = series[axis].options.categories || {};\n            if ($.isArray(o)) {\n                for (var i = 0; i < o.length; ++i)\n                    c[o[i]] = i;\n            }\n            else {\n                for (var v in o)\n                    c[v] = o[v];\n            }\n            \n            series[axis].categories = c;\n        }\n\n        // fix ticks\n        if (!series[axis].options.ticks)\n            series[axis].options.ticks = categoriesTickGenerator;\n\n        transformPointsOnAxis(datapoints, axis, series[axis].categories);\n    }\n    \n    function transformPointsOnAxis(datapoints, axis, categories) {\n        // go through the points, transforming them\n        var points = datapoints.points,\n            ps = datapoints.pointsize,\n            format = datapoints.format,\n            formatColumn = axis.charAt(0),\n            index = getNextIndex(categories);\n\n        for (var i = 0; i < points.length; i += ps) {\n            if (points[i] == null)\n                continue;\n            \n            for (var m = 0; m < ps; ++m) {\n                var val = points[i + m];\n\n                if (val == null || !format[m][formatColumn])\n                    continue;\n\n                if (!(val in categories)) {\n                    categories[val] = index;\n                    ++index;\n                }\n                \n                points[i + m] = categories[val];\n            }\n        }\n    }\n\n    function processDatapoints(plot, series, datapoints) {\n        setupCategoriesForAxis(series, \"xaxis\", datapoints);\n        setupCategoriesForAxis(series, \"yaxis\", datapoints);\n    }\n\n    function init(plot) {\n        plot.hooks.processRawData.push(processRawData);\n        plot.hooks.processDatapoints.push(processDatapoints);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'categories',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.crosshair.js",
    "content": "/* Flot plugin for showing crosshairs when the mouse hovers over the plot.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\n\tcrosshair: {\n\t\tmode: null or \"x\" or \"y\" or \"xy\"\n\t\tcolor: color\n\t\tlineWidth: number\n\t}\n\nSet the mode to one of \"x\", \"y\" or \"xy\". The \"x\" mode enables a vertical\ncrosshair that lets you trace the values on the x axis, \"y\" enables a\nhorizontal crosshair and \"xy\" enables them both. \"color\" is the color of the\ncrosshair (default is \"rgba(170, 0, 0, 0.80)\"), \"lineWidth\" is the width of\nthe drawn lines (default is 1).\n\nThe plugin also adds four public methods:\n\n  - setCrosshair( pos )\n\n    Set the position of the crosshair. Note that this is cleared if the user\n    moves the mouse. \"pos\" is in coordinates of the plot and should be on the\n    form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple\n    axes), which is coincidentally the same format as what you get from a\n    \"plothover\" event. If \"pos\" is null, the crosshair is cleared.\n\n  - clearCrosshair()\n\n    Clear the crosshair.\n\n  - lockCrosshair(pos)\n\n    Cause the crosshair to lock to the current location, no longer updating if\n    the user moves the mouse. Optionally supply a position (passed on to\n    setCrosshair()) to move it to.\n\n    Example usage:\n\n\tvar myFlot = $.plot( $(\"#graph\"), ..., { crosshair: { mode: \"x\" } } };\n\t$(\"#graph\").bind( \"plothover\", function ( evt, position, item ) {\n\t\tif ( item ) {\n\t\t\t// Lock the crosshair to the data point being hovered\n\t\t\tmyFlot.lockCrosshair({\n\t\t\t\tx: item.datapoint[ 0 ],\n\t\t\t\ty: item.datapoint[ 1 ]\n\t\t\t});\n\t\t} else {\n\t\t\t// Return normal crosshair operation\n\t\t\tmyFlot.unlockCrosshair();\n\t\t}\n\t});\n\n  - unlockCrosshair()\n\n    Free the crosshair to move again after locking it.\n*/\n\n(function ($) {\n    var options = {\n        crosshair: {\n            mode: null, // one of null, \"x\", \"y\" or \"xy\",\n            color: \"rgba(170, 0, 0, 0.80)\",\n            lineWidth: 1\n        }\n    };\n    \n    function init(plot) {\n        // position of crosshair in pixels\n        var crosshair = { x: -1, y: -1, locked: false };\n\n        plot.setCrosshair = function setCrosshair(pos) {\n            if (!pos)\n                crosshair.x = -1;\n            else {\n                var o = plot.p2c(pos);\n                crosshair.x = Math.max(0, Math.min(o.left, plot.width()));\n                crosshair.y = Math.max(0, Math.min(o.top, plot.height()));\n            }\n            \n            plot.triggerRedrawOverlay();\n        };\n        \n        plot.clearCrosshair = plot.setCrosshair; // passes null for pos\n        \n        plot.lockCrosshair = function lockCrosshair(pos) {\n            if (pos)\n                plot.setCrosshair(pos);\n            crosshair.locked = true;\n        };\n\n        plot.unlockCrosshair = function unlockCrosshair() {\n            crosshair.locked = false;\n        };\n\n        function onMouseOut(e) {\n            if (crosshair.locked)\n                return;\n\n            if (crosshair.x != -1) {\n                crosshair.x = -1;\n                plot.triggerRedrawOverlay();\n            }\n        }\n\n        function onMouseMove(e) {\n            if (crosshair.locked)\n                return;\n                \n            if (plot.getSelection && plot.getSelection()) {\n                crosshair.x = -1; // hide the crosshair while selecting\n                return;\n            }\n                \n            var offset = plot.offset();\n            crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width()));\n            crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height()));\n            plot.triggerRedrawOverlay();\n        }\n        \n        plot.hooks.bindEvents.push(function (plot, eventHolder) {\n            if (!plot.getOptions().crosshair.mode)\n                return;\n\n            eventHolder.mouseout(onMouseOut);\n            eventHolder.mousemove(onMouseMove);\n        });\n\n        plot.hooks.drawOverlay.push(function (plot, ctx) {\n            var c = plot.getOptions().crosshair;\n            if (!c.mode)\n                return;\n\n            var plotOffset = plot.getPlotOffset();\n            \n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            if (crosshair.x != -1) {\n                var adj = plot.getOptions().crosshair.lineWidth % 2 === 0 ? 0 : 0.5;\n\n                ctx.strokeStyle = c.color;\n                ctx.lineWidth = c.lineWidth;\n                ctx.lineJoin = \"round\";\n\n                ctx.beginPath();\n                if (c.mode.indexOf(\"x\") != -1) {\n                    var drawX = Math.round(crosshair.x) + adj;\n                    ctx.moveTo(drawX, 0);\n                    ctx.lineTo(drawX, plot.height());\n                }\n                if (c.mode.indexOf(\"y\") != -1) {\n                    var drawY = Math.round(crosshair.y) + adj;\n                    ctx.moveTo(0, drawY);\n                    ctx.lineTo(plot.width(), drawY);\n                }\n                ctx.stroke();\n            }\n            ctx.restore();\n        });\n\n        plot.hooks.shutdown.push(function (plot, eventHolder) {\n            eventHolder.unbind(\"mouseout\", onMouseOut);\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n        });\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'crosshair',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.errorbars.js",
    "content": "/* Flot plugin for plotting error bars.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nError bars are used to show standard deviation and other statistical\nproperties in a plot.\n\n* Created by Rui Pereira  -  rui (dot) pereira (at) gmail (dot) com\n\nThis plugin allows you to plot error-bars over points. Set \"errorbars\" inside\nthe points series to the axis name over which there will be error values in\nyour data array (*even* if you do not intend to plot them later, by setting\n\"show: null\" on xerr/yerr).\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tpoints: {\n\t\t\terrorbars: \"x\" or \"y\" or \"xy\",\n\t\t\txerr: {\n\t\t\t\tshow: null/false or true,\n\t\t\t\tasymmetric: null/false or true,\n\t\t\t\tupperCap: null or \"-\" or function,\n\t\t\t\tlowerCap: null or \"-\" or function,\n\t\t\t\tcolor: null or color,\n\t\t\t\tradius: null or number\n\t\t\t},\n\t\t\tyerr: { same options as xerr }\n\t\t}\n\t}\n\nEach data point array is expected to be of the type:\n\n\t\"x\"  [ x, y, xerr ]\n\t\"y\"  [ x, y, yerr ]\n\t\"xy\" [ x, y, xerr, yerr ]\n\nWhere xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and\nequivalently for yerr. Eg., a datapoint for the \"xy\" case with symmetric\nerror-bars on X and asymmetric on Y would be:\n\n\t[ x, y, xerr, yerr_lower, yerr_upper ]\n\nBy default no end caps are drawn. Setting upperCap and/or lowerCap to \"-\" will\ndraw a small cap perpendicular to the error bar. They can also be set to a\nuser-defined drawing function, with (ctx, x, y, radius) as parameters, as eg.\n\n\tfunction drawSemiCircle( ctx, x, y, radius ) {\n\t\tctx.beginPath();\n\t\tctx.arc( x, y, radius, 0, Math.PI, false );\n\t\tctx.moveTo( x - radius, y );\n\t\tctx.lineTo( x + radius, y );\n\t\tctx.stroke();\n\t}\n\nColor and radius both default to the same ones of the points series if not\nset. The independent radius parameter on xerr/yerr is useful for the case when\nwe may want to add error-bars to a line, without showing the interconnecting\npoints (with radius: 0), and still showing end caps on the error-bars.\nshadowSize and lineWidth are derived as well from the points series.\n\n*/\n\n(function ($) {\n    var options = {\n        series: {\n            points: {\n                errorbars: null, //should be 'x', 'y' or 'xy'\n                xerr: { err: 'x', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null},\n                yerr: { err: 'y', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null}\n            }\n        }\n    };\n\n    function processRawData(plot, series, data, datapoints){\n        if (!series.points.errorbars)\n            return;\n\n        // x,y values\n        var format = [\n            { x: true, number: true, required: true },\n            { y: true, number: true, required: true }\n        ];\n\n        var errors = series.points.errorbars;\n        // error bars - first X then Y\n        if (errors == 'x' || errors == 'xy') {\n            // lower / upper error\n            if (series.points.xerr.asymmetric) {\n                format.push({ x: true, number: true, required: true });\n                format.push({ x: true, number: true, required: true });\n            } else\n                format.push({ x: true, number: true, required: true });\n        }\n        if (errors == 'y' || errors == 'xy') {\n            // lower / upper error\n            if (series.points.yerr.asymmetric) {\n                format.push({ y: true, number: true, required: true });\n                format.push({ y: true, number: true, required: true });\n            } else\n                format.push({ y: true, number: true, required: true });\n        }\n        datapoints.format = format;\n    }\n\n    function parseErrors(series, i){\n\n        var points = series.datapoints.points;\n\n        // read errors from points array\n        var exl = null,\n                exu = null,\n                eyl = null,\n                eyu = null;\n        var xerr = series.points.xerr,\n                yerr = series.points.yerr;\n\n        var eb = series.points.errorbars;\n        // error bars - first X\n        if (eb == 'x' || eb == 'xy') {\n            if (xerr.asymmetric) {\n                exl = points[i + 2];\n                exu = points[i + 3];\n                if (eb == 'xy')\n                    if (yerr.asymmetric){\n                        eyl = points[i + 4];\n                        eyu = points[i + 5];\n                    } else eyl = points[i + 4];\n            } else {\n                exl = points[i + 2];\n                if (eb == 'xy')\n                    if (yerr.asymmetric) {\n                        eyl = points[i + 3];\n                        eyu = points[i + 4];\n                    } else eyl = points[i + 3];\n            }\n        // only Y\n        } else if (eb == 'y')\n            if (yerr.asymmetric) {\n                eyl = points[i + 2];\n                eyu = points[i + 3];\n            } else eyl = points[i + 2];\n\n        // symmetric errors?\n        if (exu == null) exu = exl;\n        if (eyu == null) eyu = eyl;\n\n        var errRanges = [exl, exu, eyl, eyu];\n        // nullify if not showing\n        if (!xerr.show){\n            errRanges[0] = null;\n            errRanges[1] = null;\n        }\n        if (!yerr.show){\n            errRanges[2] = null;\n            errRanges[3] = null;\n        }\n        return errRanges;\n    }\n\n    function drawSeriesErrors(plot, ctx, s){\n\n        var points = s.datapoints.points,\n                ps = s.datapoints.pointsize,\n                ax = [s.xaxis, s.yaxis],\n                radius = s.points.radius,\n                err = [s.points.xerr, s.points.yerr];\n\n        //sanity check, in case some inverted axis hack is applied to flot\n        var invertX = false;\n        if (ax[0].p2c(ax[0].max) < ax[0].p2c(ax[0].min)) {\n            invertX = true;\n            var tmp = err[0].lowerCap;\n            err[0].lowerCap = err[0].upperCap;\n            err[0].upperCap = tmp;\n        }\n\n        var invertY = false;\n        if (ax[1].p2c(ax[1].min) < ax[1].p2c(ax[1].max)) {\n            invertY = true;\n            var tmp = err[1].lowerCap;\n            err[1].lowerCap = err[1].upperCap;\n            err[1].upperCap = tmp;\n        }\n\n        for (var i = 0; i < s.datapoints.points.length; i += ps) {\n\n            //parse\n            var errRanges = parseErrors(s, i);\n\n            //cycle xerr & yerr\n            for (var e = 0; e < err.length; e++){\n\n                var minmax = [ax[e].min, ax[e].max];\n\n                //draw this error?\n                if (errRanges[e * err.length]){\n\n                    //data coordinates\n                    var x = points[i],\n                        y = points[i + 1];\n\n                    //errorbar ranges\n                    var upper = [x, y][e] + errRanges[e * err.length + 1],\n                        lower = [x, y][e] - errRanges[e * err.length];\n\n                    //points outside of the canvas\n                    if (err[e].err == 'x')\n                        if (y > ax[1].max || y < ax[1].min || upper < ax[0].min || lower > ax[0].max)\n                            continue;\n                    if (err[e].err == 'y')\n                        if (x > ax[0].max || x < ax[0].min || upper < ax[1].min || lower > ax[1].max)\n                            continue;\n\n                    // prevent errorbars getting out of the canvas\n                    var drawUpper = true,\n                        drawLower = true;\n\n                    if (upper > minmax[1]) {\n                        drawUpper = false;\n                        upper = minmax[1];\n                    }\n                    if (lower < minmax[0]) {\n                        drawLower = false;\n                        lower = minmax[0];\n                    }\n\n                    //sanity check, in case some inverted axis hack is applied to flot\n                    if ((err[e].err == 'x' && invertX) || (err[e].err == 'y' && invertY)) {\n                        //swap coordinates\n                        var tmp = lower;\n                        lower = upper;\n                        upper = tmp;\n                        tmp = drawLower;\n                        drawLower = drawUpper;\n                        drawUpper = tmp;\n                        tmp = minmax[0];\n                        minmax[0] = minmax[1];\n                        minmax[1] = tmp;\n                    }\n\n                    // convert to pixels\n                    x = ax[0].p2c(x),\n                        y = ax[1].p2c(y),\n                        upper = ax[e].p2c(upper);\n                    lower = ax[e].p2c(lower);\n                    minmax[0] = ax[e].p2c(minmax[0]);\n                    minmax[1] = ax[e].p2c(minmax[1]);\n\n                    //same style as points by default\n                    var lw = err[e].lineWidth ? err[e].lineWidth : s.points.lineWidth,\n                        sw = s.points.shadowSize != null ? s.points.shadowSize : s.shadowSize;\n\n                    //shadow as for points\n                    if (lw > 0 && sw > 0) {\n                        var w = sw / 2;\n                        ctx.lineWidth = w;\n                        ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                        drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w + w/2, minmax);\n\n                        ctx.strokeStyle = \"rgba(0,0,0,0.2)\";\n                        drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w/2, minmax);\n                    }\n\n                    ctx.strokeStyle = err[e].color? err[e].color: s.color;\n                    ctx.lineWidth = lw;\n                    //draw it\n                    drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, 0, minmax);\n                }\n            }\n        }\n    }\n\n    function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){\n\n        //shadow offset\n        y += offset;\n        upper += offset;\n        lower += offset;\n\n        // error bar - avoid plotting over circles\n        if (err.err == 'x'){\n            if (upper > x + radius) drawPath(ctx, [[upper,y],[Math.max(x + radius,minmax[0]),y]]);\n            else drawUpper = false;\n            if (lower < x - radius) drawPath(ctx, [[Math.min(x - radius,minmax[1]),y],[lower,y]] );\n            else drawLower = false;\n        }\n        else {\n            if (upper < y - radius) drawPath(ctx, [[x,upper],[x,Math.min(y - radius,minmax[0])]] );\n            else drawUpper = false;\n            if (lower > y + radius) drawPath(ctx, [[x,Math.max(y + radius,minmax[1])],[x,lower]] );\n            else drawLower = false;\n        }\n\n        //internal radius value in errorbar, allows to plot radius 0 points and still keep proper sized caps\n        //this is a way to get errorbars on lines without visible connecting dots\n        radius = err.radius != null? err.radius: radius;\n\n        // upper cap\n        if (drawUpper) {\n            if (err.upperCap == '-'){\n                if (err.err=='x') drawPath(ctx, [[upper,y - radius],[upper,y + radius]] );\n                else drawPath(ctx, [[x - radius,upper],[x + radius,upper]] );\n            } else if ($.isFunction(err.upperCap)){\n                if (err.err=='x') err.upperCap(ctx, upper, y, radius);\n                else err.upperCap(ctx, x, upper, radius);\n            }\n        }\n        // lower cap\n        if (drawLower) {\n            if (err.lowerCap == '-'){\n                if (err.err=='x') drawPath(ctx, [[lower,y - radius],[lower,y + radius]] );\n                else drawPath(ctx, [[x - radius,lower],[x + radius,lower]] );\n            } else if ($.isFunction(err.lowerCap)){\n                if (err.err=='x') err.lowerCap(ctx, lower, y, radius);\n                else err.lowerCap(ctx, x, lower, radius);\n            }\n        }\n    }\n\n    function drawPath(ctx, pts){\n        ctx.beginPath();\n        ctx.moveTo(pts[0][0], pts[0][1]);\n        for (var p=1; p < pts.length; p++)\n            ctx.lineTo(pts[p][0], pts[p][1]);\n        ctx.stroke();\n    }\n\n    function draw(plot, ctx){\n        var plotOffset = plot.getPlotOffset();\n\n        ctx.save();\n        ctx.translate(plotOffset.left, plotOffset.top);\n        $.each(plot.getData(), function (i, s) {\n            if (s.points.errorbars && (s.points.xerr.show || s.points.yerr.show))\n                drawSeriesErrors(plot, ctx, s);\n        });\n        ctx.restore();\n    }\n\n    function init(plot) {\n        plot.hooks.processRawData.push(processRawData);\n        plot.hooks.draw.push(draw);\n    }\n\n    $.plot.plugins.push({\n                init: init,\n                options: options,\n                name: 'errorbars',\n                version: '1.0'\n            });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.fillbetween.js",
    "content": "/* Flot plugin for computing bottoms for filled line and bar charts.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe case: you've got two series that you want to fill the area between. In Flot\nterms, you need to use one as the fill bottom of the other. You can specify the\nbottom of each data point as the third coordinate manually, or you can use this\nplugin to compute it for you.\n\nIn order to name the other series, you need to give it an id, like this:\n\n\tvar dataset = [\n\t\t{ data: [ ... ], id: \"foo\" } ,         // use default bottom\n\t\t{ data: [ ... ], fillBetween: \"foo\" }, // use first dataset as bottom\n\t];\n\n\t$.plot($(\"#placeholder\"), dataset, { lines: { show: true, fill: true }});\n\nAs a convenience, if the id given is a number that doesn't appear as an id in\nthe series, it is interpreted as the index in the array instead (so fillBetween:\n0 can also mean the first series).\n\nInternally, the plugin modifies the datapoints in each series. For line series,\nextra data points might be inserted through interpolation. Note that at points\nwhere the bottom line is not defined (due to a null point or start/end of line),\nthe current line will show a gap too. The algorithm comes from the\njquery.flot.stack.js plugin, possibly some code could be shared.\n\n*/\n\n(function ( $ ) {\n\n\tvar options = {\n\t\tseries: {\n\t\t\tfillBetween: null\t// or number\n\t\t}\n\t};\n\n\tfunction init( plot ) {\n\n\t\tfunction findBottomSeries( s, allseries ) {\n\n\t\t\tvar i;\n\n\t\t\tfor ( i = 0; i < allseries.length; ++i ) {\n\t\t\t\tif ( allseries[ i ].id === s.fillBetween ) {\n\t\t\t\t\treturn allseries[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( typeof s.fillBetween === \"number\" ) {\n\t\t\t\tif ( s.fillBetween < 0 || s.fillBetween >= allseries.length ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn allseries[ s.fillBetween ];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction computeFillBottoms( plot, s, datapoints ) {\n\n\t\t\tif ( s.fillBetween == null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar other = findBottomSeries( s, plot.getData() );\n\n\t\t\tif ( !other ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar ps = datapoints.pointsize,\n\t\t\t\tpoints = datapoints.points,\n\t\t\t\totherps = other.datapoints.pointsize,\n\t\t\t\totherpoints = other.datapoints.points,\n\t\t\t\tnewpoints = [],\n\t\t\t\tpx, py, intery, qx, qy, bottom,\n\t\t\t\twithlines = s.lines.show,\n\t\t\t\twithbottom = ps > 2 && datapoints.format[2].y,\n\t\t\t\twithsteps = withlines && s.lines.steps,\n\t\t\t\tfromgap = true,\n\t\t\t\ti = 0,\n\t\t\t\tj = 0,\n\t\t\t\tl, m;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tif ( i >= points.length ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tl = newpoints.length;\n\n\t\t\t\tif ( points[ i ] == null ) {\n\n\t\t\t\t\t// copy gaps\n\n\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ps;\n\n\t\t\t\t} else if ( j >= otherpoints.length ) {\n\n\t\t\t\t\t// for lines, we can't use the rest of the points\n\n\t\t\t\t\tif ( !withlines ) {\n\t\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ps;\n\n\t\t\t\t} else if ( otherpoints[ j ] == null ) {\n\n\t\t\t\t\t// oops, got a gap\n\n\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\tnewpoints.push( null );\n\t\t\t\t\t}\n\n\t\t\t\t\tfromgap = true;\n\t\t\t\t\tj += otherps;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// cases where we actually got two points\n\n\t\t\t\t\tpx = points[ i ];\n\t\t\t\t\tpy = points[ i + 1 ];\n\t\t\t\t\tqx = otherpoints[ j ];\n\t\t\t\t\tqy = otherpoints[ j + 1 ];\n\t\t\t\t\tbottom = 0;\n\n\t\t\t\t\tif ( px === qx ) {\n\n\t\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//newpoints[ l + 1 ] += qy;\n\t\t\t\t\t\tbottom = qy;\n\n\t\t\t\t\t\ti += ps;\n\t\t\t\t\t\tj += otherps;\n\n\t\t\t\t\t} else if ( px > qx ) {\n\n\t\t\t\t\t\t// we got past point below, might need to\n\t\t\t\t\t\t// insert interpolated extra point\n\n\t\t\t\t\t\tif ( withlines && i > 0 && points[ i - ps ] != null ) {\n\t\t\t\t\t\t\tintery = py + ( points[ i - ps + 1 ] - py ) * ( qx - px ) / ( points[ i - ps ] - px );\n\t\t\t\t\t\t\tnewpoints.push( qx );\n\t\t\t\t\t\t\tnewpoints.push( intery );\n\t\t\t\t\t\t\tfor ( m = 2; m < ps; ++m ) {\n\t\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbottom = qy;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tj += otherps;\n\n\t\t\t\t\t} else { // px < qx\n\n\t\t\t\t\t\t// if we come from a gap, we just skip this point\n\n\t\t\t\t\t\tif ( fromgap && withlines ) {\n\t\t\t\t\t\t\ti += ps;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// we might be able to interpolate a point below,\n\t\t\t\t\t\t// this can give us a better y\n\n\t\t\t\t\t\tif ( withlines && j > 0 && otherpoints[ j - otherps ] != null ) {\n\t\t\t\t\t\t\tbottom = qy + ( otherpoints[ j - otherps + 1 ] - qy ) * ( px - qx ) / ( otherpoints[ j - otherps ] - qx );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//newpoints[l + 1] += bottom;\n\n\t\t\t\t\t\ti += ps;\n\t\t\t\t\t}\n\n\t\t\t\t\tfromgap = false;\n\n\t\t\t\t\tif ( l !== newpoints.length && withbottom ) {\n\t\t\t\t\t\tnewpoints[ l + 2 ] = bottom;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// maintain the line steps invariant\n\n\t\t\t\tif ( withsteps && l !== newpoints.length && l > 0 &&\n\t\t\t\t\tnewpoints[ l ] !== null &&\n\t\t\t\t\tnewpoints[ l ] !== newpoints[ l - ps ] &&\n\t\t\t\t\tnewpoints[ l + 1 ] !== newpoints[ l - ps + 1 ] ) {\n\t\t\t\t\tfor (m = 0; m < ps; ++m) {\n\t\t\t\t\t\tnewpoints[ l + ps + m ] = newpoints[ l + m ];\n\t\t\t\t\t}\n\t\t\t\t\tnewpoints[ l + 1 ] = newpoints[ l - ps + 1 ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdatapoints.points = newpoints;\n\t\t}\n\n\t\tplot.hooks.processDatapoints.push( computeFillBottoms );\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"fillbetween\",\n\t\tversion: \"1.0\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.image.js",
    "content": "/* Flot plugin for plotting images.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and\n(x2, y2) are where you intend the two opposite corners of the image to end up\nin the plot. Image must be a fully loaded Javascript image (you can make one\nwith new Image()). If the image is not complete, it's skipped when plotting.\n\nThere are two helpers included for retrieving images. The easiest work the way\nthat you put in URLs instead of images in the data, like this:\n\n\t[ \"myimage.png\", 0, 0, 10, 10 ]\n\nThen call $.plot.image.loadData( data, options, callback ) where data and\noptions are the same as you pass in to $.plot. This loads the images, replaces\nthe URLs in the data with the corresponding images and calls \"callback\" when\nall images are loaded (or failed loading). In the callback, you can then call\n$.plot with the data set. See the included example.\n\nA more low-level helper, $.plot.image.load(urls, callback) is also included.\nGiven a list of URLs, it calls callback with an object mapping from URL to\nImage object when all images are loaded or have failed loading.\n\nThe plugin supports these options:\n\n\tseries: {\n\t\timages: {\n\t\t\tshow: boolean\n\t\t\tanchor: \"corner\" or \"center\"\n\t\t\talpha: [ 0, 1 ]\n\t\t}\n\t}\n\nThey can be specified for a specific series:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\timages: { ... }\n\t])\n\nNote that because the data format is different from usual data points, you\ncan't use images with anything else in a specific data series.\n\nSetting \"anchor\" to \"center\" causes the pixels in the image to be anchored at\nthe corner pixel centers inside of at the pixel corners, effectively letting\nhalf a pixel stick out to each side in the plot.\n\nA possible future direction could be support for tiling for large images (like\nGoogle Maps).\n\n*/\n\n(function ($) {\n    var options = {\n        series: {\n            images: {\n                show: false,\n                alpha: 1,\n                anchor: \"corner\" // or \"center\"\n            }\n        }\n    };\n\n    $.plot.image = {};\n\n    $.plot.image.loadDataImages = function (series, options, callback) {\n        var urls = [], points = [];\n\n        var defaultShow = options.series.images.show;\n        \n        $.each(series, function (i, s) {\n            if (!(defaultShow || s.images.show))\n                return;\n            \n            if (s.data)\n                s = s.data;\n\n            $.each(s, function (i, p) {\n                if (typeof p[0] == \"string\") {\n                    urls.push(p[0]);\n                    points.push(p);\n                }\n            });\n        });\n\n        $.plot.image.load(urls, function (loadedImages) {\n            $.each(points, function (i, p) {\n                var url = p[0];\n                if (loadedImages[url])\n                    p[0] = loadedImages[url];\n            });\n\n            callback();\n        });\n    }\n    \n    $.plot.image.load = function (urls, callback) {\n        var missing = urls.length, loaded = {};\n        if (missing == 0)\n            callback({});\n\n        $.each(urls, function (i, url) {\n            var handler = function () {\n                --missing;\n                \n                loaded[url] = this;\n                \n                if (missing == 0)\n                    callback(loaded);\n            };\n\n            $('<img />').load(handler).error(handler).attr('src', url);\n        });\n    };\n    \n    function drawSeries(plot, ctx, series) {\n        var plotOffset = plot.getPlotOffset();\n        \n        if (!series.images || !series.images.show)\n            return;\n        \n        var points = series.datapoints.points,\n            ps = series.datapoints.pointsize;\n        \n        for (var i = 0; i < points.length; i += ps) {\n            var img = points[i],\n                x1 = points[i + 1], y1 = points[i + 2],\n                x2 = points[i + 3], y2 = points[i + 4],\n                xaxis = series.xaxis, yaxis = series.yaxis,\n                tmp;\n\n            // actually we should check img.complete, but it\n            // appears to be a somewhat unreliable indicator in\n            // IE6 (false even after load event)\n            if (!img || img.width <= 0 || img.height <= 0)\n                continue;\n\n            if (x1 > x2) {\n                tmp = x2;\n                x2 = x1;\n                x1 = tmp;\n            }\n            if (y1 > y2) {\n                tmp = y2;\n                y2 = y1;\n                y1 = tmp;\n            }\n            \n            // if the anchor is at the center of the pixel, expand the \n            // image by 1/2 pixel in each direction\n            if (series.images.anchor == \"center\") {\n                tmp = 0.5 * (x2-x1) / (img.width - 1);\n                x1 -= tmp;\n                x2 += tmp;\n                tmp = 0.5 * (y2-y1) / (img.height - 1);\n                y1 -= tmp;\n                y2 += tmp;\n            }\n            \n            // clip\n            if (x1 == x2 || y1 == y2 ||\n                x1 >= xaxis.max || x2 <= xaxis.min ||\n                y1 >= yaxis.max || y2 <= yaxis.min)\n                continue;\n\n            var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height;\n            if (x1 < xaxis.min) {\n                sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1);\n                x1 = xaxis.min;\n            }\n\n            if (x2 > xaxis.max) {\n                sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1);\n                x2 = xaxis.max;\n            }\n\n            if (y1 < yaxis.min) {\n                sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1);\n                y1 = yaxis.min;\n            }\n\n            if (y2 > yaxis.max) {\n                sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1);\n                y2 = yaxis.max;\n            }\n            \n            x1 = xaxis.p2c(x1);\n            x2 = xaxis.p2c(x2);\n            y1 = yaxis.p2c(y1);\n            y2 = yaxis.p2c(y2);\n            \n            // the transformation may have swapped us\n            if (x1 > x2) {\n                tmp = x2;\n                x2 = x1;\n                x1 = tmp;\n            }\n            if (y1 > y2) {\n                tmp = y2;\n                y2 = y1;\n                y1 = tmp;\n            }\n\n            tmp = ctx.globalAlpha;\n            ctx.globalAlpha *= series.images.alpha;\n            ctx.drawImage(img,\n                          sx1, sy1, sx2 - sx1, sy2 - sy1,\n                          x1 + plotOffset.left, y1 + plotOffset.top,\n                          x2 - x1, y2 - y1);\n            ctx.globalAlpha = tmp;\n        }\n    }\n\n    function processRawData(plot, series, data, datapoints) {\n        if (!series.images.show)\n            return;\n\n        // format is Image, x1, y1, x2, y2 (opposite corners)\n        datapoints.format = [\n            { required: true },\n            { x: true, number: true, required: true },\n            { y: true, number: true, required: true },\n            { x: true, number: true, required: true },\n            { y: true, number: true, required: true }\n        ];\n    }\n    \n    function init(plot) {\n        plot.hooks.processRawData.push(processRawData);\n        plot.hooks.drawSeries.push(drawSeries);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'image',\n        version: '1.1'\n    });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.js",
    "content": "/* Javascript plotting library for jQuery, version 0.8.2-alpha.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\n*/\n\n// first an inline dependency, jquery.colorhelpers.js, we inline it here\n// for convenience\n\n/* Plugin for jQuery for working with colors.\n *\n * Version 1.1.\n *\n * Inspiration from jQuery color animation plugin by John Resig.\n *\n * Released under the MIT license by Ole Laursen, October 2009.\n *\n * Examples:\n *\n *   $.color.parse(\"#fff\").scale('rgb', 0.25).add('a', -0.5).toString()\n *   var c = $.color.extract($(\"#mydiv\"), 'background-color');\n *   console.log(c.r, c.g, c.b, c.a);\n *   $.color.make(100, 50, 25, 0.4).toString() // returns \"rgba(100,50,25,0.4)\"\n *\n * Note that .scale() and .add() return the same modified object\n * instead of making a new one.\n *\n * V. 1.1: Fix error handling so e.g. parsing an empty string does\n * produce a color rather than just crashing.\n */\n(function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]+=I}return G.normalize()};G.scale=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]*=I}return G.normalize()};G.toString=function(){if(G.a>=1){return\"rgb(\"+[G.r,G.g,G.b].join(\",\")+\")\"}else{return\"rgba(\"+[G.r,G.g,G.b,G.a].join(\",\")+\")\"}};G.normalize=function(){function H(J,K,I){return K<J?J:(K>I?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=\"\"&&E!=\"transparent\"){break}D=D.parent()}while(!B.nodeName(D.get(0),\"body\"));if(E==\"rgba(0, 0, 0, 0)\"){E=\"transparent\"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D==\"transparent\"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);\n\n// the actual Flot code\n(function($) {\n\n\t// Cache the prototype hasOwnProperty for faster access\n\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// The Canvas object is a wrapper around an HTML5 <canvas> tag.\n\t//\n\t// @constructor\n\t// @param {string} cls List of classes to apply to the canvas.\n\t// @param {element} container Element onto which to append the canvas.\n\t//\n\t// Requiring a container is a little iffy, but unfortunately canvas\n\t// operations don't work unless the canvas is attached to the DOM.\n\n\tfunction Canvas(cls, container) {\n\n\t\tvar element = container.children(\".\" + cls)[0];\n\n\t\tif (element == null) {\n\n\t\t\telement = document.createElement(\"canvas\");\n\t\t\telement.className = cls;\n\n\t\t\t$(element).css({ direction: \"ltr\", position: \"absolute\", left: 0, top: 0 })\n\t\t\t\t.appendTo(container);\n\n\t\t\t// If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas\n\n\t\t\tif (!element.getContext) {\n\t\t\t\tif (window.G_vmlCanvasManager) {\n\t\t\t\t\telement = window.G_vmlCanvasManager.initElement(element);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element = element;\n\n\t\tvar context = this.context = element.getContext(\"2d\");\n\n\t\t// Determine the screen's ratio of physical to device-independent\n\t\t// pixels.  This is the ratio between the canvas width that the browser\n\t\t// advertises and the number of pixels actually present in that space.\n\n\t\t// The iPhone 4, for example, has a device-independent width of 320px,\n\t\t// but its screen is actually 640px wide.  It therefore has a pixel\n\t\t// ratio of 2, while most normal devices have a ratio of 1.\n\n\t\tvar devicePixelRatio = window.devicePixelRatio || 1,\n\t\t\tbackingStoreRatio =\n\t\t\t\tcontext.webkitBackingStorePixelRatio ||\n\t\t\t\tcontext.mozBackingStorePixelRatio ||\n\t\t\t\tcontext.msBackingStorePixelRatio ||\n\t\t\t\tcontext.oBackingStorePixelRatio ||\n\t\t\t\tcontext.backingStorePixelRatio || 1;\n\n\t\tthis.pixelRatio = devicePixelRatio / backingStoreRatio;\n\n\t\t// Size the canvas to match the internal dimensions of its container\n\n\t\tthis.resize(container.width(), container.height());\n\n\t\t// Collection of HTML div layers for text overlaid onto the canvas\n\n\t\tthis.textContainer = null;\n\t\tthis.text = {};\n\n\t\t// Cache of text fragments and metrics, so we can avoid expensively\n\t\t// re-calculating them when the plot is re-rendered in a loop.\n\n\t\tthis._textCache = {};\n\t}\n\n\t// Resizes the canvas to the given dimensions.\n\t//\n\t// @param {number} width New width of the canvas, in pixels.\n\t// @param {number} width New height of the canvas, in pixels.\n\n\tCanvas.prototype.resize = function(width, height) {\n\n\t\tif (width <= 0 || height <= 0) {\n\t\t\tthrow new Error(\"Invalid dimensions for plot, width = \" + width + \", height = \" + height);\n\t\t}\n\n\t\tvar element = this.element,\n\t\t\tcontext = this.context,\n\t\t\tpixelRatio = this.pixelRatio;\n\n\t\t// Resize the canvas, increasing its density based on the display's\n\t\t// pixel ratio; basically giving it more pixels without increasing the\n\t\t// size of its element, to take advantage of the fact that retina\n\t\t// displays have that many more pixels in the same advertised space.\n\n\t\t// Resizing should reset the state (excanvas seems to be buggy though)\n\n\t\tif (this.width != width) {\n\t\t\telement.width = width * pixelRatio;\n\t\t\telement.style.width = width + \"px\";\n\t\t\tthis.width = width;\n\t\t}\n\n\t\tif (this.height != height) {\n\t\t\telement.height = height * pixelRatio;\n\t\t\telement.style.height = height + \"px\";\n\t\t\tthis.height = height;\n\t\t}\n\n\t\t// Save the context, so we can reset in case we get replotted.  The\n\t\t// restore ensure that we're really back at the initial state, and\n\t\t// should be safe even if we haven't saved the initial state yet.\n\n\t\tcontext.restore();\n\t\tcontext.save();\n\n\t\t// Scale the coordinate space to match the display density; so even though we\n\t\t// may have twice as many pixels, we still want lines and other drawing to\n\t\t// appear at the same size; the extra pixels will just make them crisper.\n\n\t\tcontext.scale(pixelRatio, pixelRatio);\n\t};\n\n\t// Clears the entire canvas area, not including any overlaid HTML text\n\n\tCanvas.prototype.clear = function() {\n\t\tthis.context.clearRect(0, 0, this.width, this.height);\n\t};\n\n\t// Finishes rendering the canvas, including managing the text overlay.\n\n\tCanvas.prototype.render = function() {\n\n\t\tvar cache = this._textCache;\n\n\t\t// For each text layer, add elements marked as active that haven't\n\t\t// already been rendered, and remove those that are no longer active.\n\n\t\tfor (var layerKey in cache) {\n\t\t\tif (hasOwnProperty.call(cache, layerKey)) {\n\n\t\t\t\tvar layer = this.getTextLayer(layerKey),\n\t\t\t\t\tlayerCache = cache[layerKey];\n\n\t\t\t\tlayer.hide();\n\n\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\tvar styleCache = layerCache[styleKey];\n\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\n\t\t\t\t\t\t\t\tvar positions = styleCache[key].positions;\n\n\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\tif (position.active) {\n\t\t\t\t\t\t\t\t\t\tif (!position.rendered) {\n\t\t\t\t\t\t\t\t\t\t\tlayer.append(position.element);\n\t\t\t\t\t\t\t\t\t\t\tposition.rendered = true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tpositions.splice(i--, 1);\n\t\t\t\t\t\t\t\t\t\tif (position.rendered) {\n\t\t\t\t\t\t\t\t\t\t\tposition.element.detach();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (positions.length == 0) {\n\t\t\t\t\t\t\t\t\tdelete styleCache[key];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlayer.show();\n\t\t\t}\n\t\t}\n\t};\n\n\t// Creates (if necessary) and returns the text overlay container.\n\t//\n\t// @param {string} classes String of space-separated CSS classes used to\n\t//     uniquely identify the text layer.\n\t// @return {object} The jQuery-wrapped text-layer div.\n\n\tCanvas.prototype.getTextLayer = function(classes) {\n\n\t\tvar layer = this.text[classes];\n\n\t\t// Create the text layer if it doesn't exist\n\n\t\tif (layer == null) {\n\n\t\t\t// Create the text layer container, if it doesn't exist\n\n\t\t\tif (this.textContainer == null) {\n\t\t\t\tthis.textContainer = $(\"<div class='flot-text'></div>\")\n\t\t\t\t\t.css({\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t'font-size': \"smaller\",\n\t\t\t\t\t\tcolor: \"#545454\"\n\t\t\t\t\t})\n\t\t\t\t\t.insertAfter(this.element);\n\t\t\t}\n\n\t\t\tlayer = this.text[classes] = $(\"<div></div>\")\n\t\t\t\t.addClass(classes)\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tright: 0\n\t\t\t\t})\n\t\t\t\t.appendTo(this.textContainer);\n\t\t}\n\n\t\treturn layer;\n\t};\n\n\t// Creates (if necessary) and returns a text info object.\n\t//\n\t// The object looks like this:\n\t//\n\t// {\n\t//     width: Width of the text's wrapper div.\n\t//     height: Height of the text's wrapper div.\n\t//     element: The jQuery-wrapped HTML div containing the text.\n\t//     positions: Array of positions at which this text is drawn.\n\t// }\n\t//\n\t// The positions array contains objects that look like this:\n\t//\n\t// {\n\t//     active: Flag indicating whether the text should be visible.\n\t//     rendered: Flag indicating whether the text is currently visible.\n\t//     element: The jQuery-wrapped HTML div containing the text.\n\t//     x: X coordinate at which to draw the text.\n\t//     y: Y coordinate at which to draw the text.\n\t// }\n\t//\n\t// Each position after the first receives a clone of the original element.\n\t//\n\t// The idea is that that the width, height, and general 'identity' of the\n\t// text is constant no matter where it is placed; the placements are a\n\t// secondary property.\n\t//\n\t// Canvas maintains a cache of recently-used text info objects; getTextInfo\n\t// either returns the cached element or creates a new entry.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {string} text Text string to retrieve info for.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which to rotate the text, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\t// @param {number=} width Maximum width of the text before it wraps.\n\t// @return {object} a text info object.\n\n\tCanvas.prototype.getTextInfo = function(layer, text, font, angle, width) {\n\n\t\tvar textStyle, layerCache, styleCache, info;\n\n\t\t// Cast the value to a string, in case we were given a number or such\n\n\t\ttext = \"\" + text;\n\n\t\t// If the font is a font-spec object, generate a CSS font definition\n\n\t\tif (typeof font === \"object\") {\n\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px/\" + font.lineHeight + \"px \" + font.family;\n\t\t} else {\n\t\t\ttextStyle = font;\n\t\t}\n\n\t\t// Retrieve (or create) the cache for the text's layer and styles\n\n\t\tlayerCache = this._textCache[layer];\n\n\t\tif (layerCache == null) {\n\t\t\tlayerCache = this._textCache[layer] = {};\n\t\t}\n\n\t\tstyleCache = layerCache[textStyle];\n\n\t\tif (styleCache == null) {\n\t\t\tstyleCache = layerCache[textStyle] = {};\n\t\t}\n\n\t\tinfo = styleCache[text];\n\n\t\t// If we can't find a matching element in our cache, create a new one\n\n\t\tif (info == null) {\n\n\t\t\tvar element = $(\"<div></div>\").html(text)\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t'max-width': width,\n\t\t\t\t\ttop: -9999\n\t\t\t\t})\n\t\t\t\t.appendTo(this.getTextLayer(layer));\n\n\t\t\tif (typeof font === \"object\") {\n\t\t\t\telement.css({\n\t\t\t\t\tfont: textStyle,\n\t\t\t\t\tcolor: font.color\n\t\t\t\t});\n\t\t\t} else if (typeof font === \"string\") {\n\t\t\t\telement.addClass(font);\n\t\t\t}\n\n\t\t\tinfo = styleCache[text] = {\n\t\t\t\twidth: element.outerWidth(true),\n\t\t\t\theight: element.outerHeight(true),\n\t\t\t\telement: element,\n\t\t\t\tpositions: []\n\t\t\t};\n\n\t\t\telement.detach();\n\t\t}\n\n\t\treturn info;\n\t};\n\n\t// Adds a text string to the canvas text overlay.\n\t//\n\t// The text isn't drawn immediately; it is marked as rendering, which will\n\t// result in its addition to the canvas on the next render pass.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {number} x X coordinate at which to draw the text.\n\t// @param {number} y Y coordinate at which to draw the text.\n\t// @param {string} text Text string to draw.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which to rotate the text, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\t// @param {number=} width Maximum width of the text before it wraps.\n\t// @param {string=} halign Horizontal alignment of the text; either \"left\",\n\t//     \"center\" or \"right\".\n\t// @param {string=} valign Vertical alignment of the text; either \"top\",\n\t//     \"middle\" or \"bottom\".\n\n\tCanvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {\n\n\t\tvar info = this.getTextInfo(layer, text, font, angle, width),\n\t\t\tpositions = info.positions;\n\n\t\t// Tweak the div's position to match the text's alignment\n\n\t\tif (halign == \"center\") {\n\t\t\tx -= info.width / 2;\n\t\t} else if (halign == \"right\") {\n\t\t\tx -= info.width;\n\t\t}\n\n\t\tif (valign == \"middle\") {\n\t\t\ty -= info.height / 2;\n\t\t} else if (valign == \"bottom\") {\n\t\t\ty -= info.height;\n\t\t}\n\n\t\t// Determine whether this text already exists at this position.\n\t\t// If so, mark it for inclusion in the next render pass.\n\n\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\tposition.active = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// If the text doesn't exist at this position, create a new entry\n\n\t\t// For the very first position we'll re-use the original element,\n\t\t// while for subsequent ones we'll clone it.\n\n\t\tposition = {\n\t\t\tactive: true,\n\t\t\trendered: false,\n\t\t\telement: positions.length ? info.element.clone() : info.element,\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\n\t\tpositions.push(position);\n\n\t\t// Move the element to its final position within the container\n\n\t\tposition.element.css({\n\t\t\ttop: Math.round(y),\n\t\t\tleft: Math.round(x),\n\t\t\t'text-align': halign\t// In case the text wraps\n\t\t});\n\t};\n\n\t// Removes one or more text strings from the canvas text overlay.\n\t//\n\t// If no parameters are given, all text within the layer is removed.\n\t//\n\t// Note that the text is not immediately removed; it is simply marked as\n\t// inactive, which will result in its removal on the next render pass.\n\t// This avoids the performance penalty for 'clear and redraw' behavior,\n\t// where we potentially get rid of all text on a layer, but will likely\n\t// add back most or all of it later, as when redrawing axes, for example.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {number=} x X coordinate of the text.\n\t// @param {number=} y Y coordinate of the text.\n\t// @param {string=} text Text string to remove.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which the text is rotated, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\n\tCanvas.prototype.removeText = function(layer, x, y, text, font, angle) {\n\t\tif (text == null) {\n\t\t\tvar layerCache = this._textCache[layer];\n\t\t\tif (layerCache != null) {\n\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\tvar styleCache = layerCache[styleKey];\n\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\t\t\t\t\t\t\t\tvar positions = styleCache[key].positions;\n\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\tposition.active = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar positions = this.getTextInfo(layer, text, font, angle).positions;\n\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\t\tposition.active = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// The top-level container for the entire plot.\n\n    function Plot(placeholder, data_, options_, plugins) {\n        // data is on the form:\n        //   [ series1, series2 ... ]\n        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]\n        // or { data: [ [x1, y1], [x2, y2], ... ], label: \"some label\", ... }\n\n        var series = [],\n            options = {\n                // the color theme used for graphs\n                colors: [\"#edc240\", \"#afd8f8\", \"#cb4b4b\", \"#4da74d\", \"#9440ed\"],\n                legend: {\n                    show: true,\n                    noColumns: 1, // number of colums in legend table\n                    labelFormatter: null, // fn: string -> string\n                    labelBoxBorderColor: \"#ccc\", // border color for the little label boxes\n                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph\n                    position: \"ne\", // position of default legend container within plot\n                    margin: 5, // distance from grid edge to default legend container within plot\n                    backgroundColor: null, // null means auto-detect\n                    backgroundOpacity: 0.85, // set to 0 to avoid background\n                    sorted: null    // default to no legend sorting\n                },\n                xaxis: {\n                    show: null, // null = auto-detect, true = always, false = never\n                    position: \"bottom\", // or \"top\"\n                    mode: null, // null or \"time\"\n                    font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: \"italic\", weight: \"bold\", family: \"sans-serif\", variant: \"small-caps\" }\n                    color: null, // base color, labels, ticks\n                    tickColor: null, // possibly different color of ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    transform: null, // null or f: number -> number to transform axis\n                    inverseTransform: null, // if transform is set, this should be the inverse function\n                    min: null, // min. value to show, null means set automatically\n                    max: null, // max. value to show, null means set automatically\n                    autoscaleMargin: null, // margin in % to add if auto-setting min/max\n                    ticks: null, // either [1, 3] or [[1, \"a\"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks\n                    tickFormatter: null, // fn: number -> string\n                    labelWidth: null, // size of tick labels in pixels\n                    labelHeight: null,\n                    reserveSpace: null, // whether to reserve space even if axis isn't shown\n                    tickLength: null, // size in pixels of ticks, or \"full\" for whole line\n                    alignTicksWithAxis: null, // axis number or null for no sync\n                    tickDecimals: null, // no. of decimals, null means auto\n                    tickSize: null, // number or [number, \"unit\"]\n                    minTickSize: null // number or [number, \"unit\"]\n                },\n                yaxis: {\n                    autoscaleMargin: 0.02,\n                    position: \"left\" // or \"right\"\n                },\n                xaxes: [],\n                yaxes: [],\n                series: {\n                    points: {\n                        show: false,\n                        radius: 3,\n                        lineWidth: 2, // in pixels\n                        fill: true,\n                        fillColor: \"#ffffff\",\n                        symbol: \"circle\" // or callback\n                    },\n                    lines: {\n                        // we don't put in show: false so we can see\n                        // whether lines were actively disabled\n                        lineWidth: 2, // in pixels\n                        fill: false,\n                        fillColor: null,\n                        steps: false\n                        // Omit 'zero', so we can later default its value to\n                        // match that of the 'fill' option.\n                    },\n                    bars: {\n                        show: false,\n                        lineWidth: 2, // in pixels\n                        barWidth: 1, // in units of the x axis\n                        fill: true,\n                        fillColor: null,\n                        align: \"left\", // \"left\", \"right\", or \"center\"\n                        horizontal: false,\n                        zero: true\n                    },\n                    shadowSize: 3,\n                    highlightColor: null\n                },\n                grid: {\n                    show: true,\n                    aboveData: false,\n                    color: \"#545454\", // primary color used for outline and labels\n                    backgroundColor: null, // null for transparent, else color\n                    borderColor: null, // set if different from the grid color\n                    tickColor: null, // color for the ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    margin: 0, // distance from the canvas edge to the grid\n                    labelMargin: 5, // in pixels\n                    axisMargin: 8, // in pixels\n                    borderWidth: 2, // in pixels\n                    minBorderMargin: null, // in pixels, null means taken from points radius\n                    markings: null, // array of ranges or fn: axes -> array of ranges\n                    markingsColor: \"#f4f4f4\",\n                    markingsLineWidth: 2,\n                    // interactive stuff\n                    clickable: false,\n                    hoverable: false,\n                    autoHighlight: true, // highlight in case mouse is near\n                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item\n                },\n                interaction: {\n                    redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow\n                },\n                hooks: {}\n            },\n        surface = null,     // the canvas for the plot itself\n        overlay = null,     // canvas for interactive stuff on top of plot\n        eventHolder = null, // jQuery object that events should be bound to\n        ctx = null, octx = null,\n        xaxes = [], yaxes = [],\n        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},\n        plotWidth = 0, plotHeight = 0,\n        hooks = {\n            processOptions: [],\n            processRawData: [],\n            processDatapoints: [],\n            processOffset: [],\n            drawBackground: [],\n            drawSeries: [],\n            draw: [],\n            bindEvents: [],\n            drawOverlay: [],\n            shutdown: []\n        },\n        plot = this;\n\n        // public functions\n        plot.setData = setData;\n        plot.setupGrid = setupGrid;\n        plot.draw = draw;\n        plot.getPlaceholder = function() { return placeholder; };\n        plot.getCanvas = function() { return surface.element; };\n        plot.getPlotOffset = function() { return plotOffset; };\n        plot.width = function () { return plotWidth; };\n        plot.height = function () { return plotHeight; };\n        plot.offset = function () {\n            var o = eventHolder.offset();\n            o.left += plotOffset.left;\n            o.top += plotOffset.top;\n            return o;\n        };\n        plot.getData = function () { return series; };\n        plot.getAxes = function () {\n            var res = {}, i;\n            $.each(xaxes.concat(yaxes), function (_, axis) {\n                if (axis)\n                    res[axis.direction + (axis.n != 1 ? axis.n : \"\") + \"axis\"] = axis;\n            });\n            return res;\n        };\n        plot.getXAxes = function () { return xaxes; };\n        plot.getYAxes = function () { return yaxes; };\n        plot.c2p = canvasToAxisCoords;\n        plot.p2c = axisToCanvasCoords;\n        plot.getOptions = function () { return options; };\n        plot.highlight = highlight;\n        plot.unhighlight = unhighlight;\n        plot.triggerRedrawOverlay = triggerRedrawOverlay;\n        plot.pointOffset = function(point) {\n            return {\n                left: parseInt(xaxes[axisNumber(point, \"x\") - 1].p2c(+point.x) + plotOffset.left, 10),\n                top: parseInt(yaxes[axisNumber(point, \"y\") - 1].p2c(+point.y) + plotOffset.top, 10)\n            };\n        };\n        plot.shutdown = shutdown;\n        plot.resize = function () {\n        \tvar width = placeholder.width(),\n        \t\theight = placeholder.height();\n            surface.resize(width, height);\n            overlay.resize(width, height);\n        };\n\n        // public attributes\n        plot.hooks = hooks;\n\n        // initialize\n        initPlugins(plot);\n        parseOptions(options_);\n        setupCanvases();\n        setData(data_);\n        setupGrid();\n        draw();\n        bindEvents();\n\n\n        function executeHooks(hook, args) {\n            args = [plot].concat(args);\n            for (var i = 0; i < hook.length; ++i)\n                hook[i].apply(this, args);\n        }\n\n        function initPlugins() {\n\n            // References to key classes, allowing plugins to modify them\n\n            var classes = {\n                Canvas: Canvas\n            };\n\n            for (var i = 0; i < plugins.length; ++i) {\n                var p = plugins[i];\n                p.init(plot, classes);\n                if (p.options)\n                    $.extend(true, options, p.options);\n            }\n        }\n\n        function parseOptions(opts) {\n\n            $.extend(true, options, opts);\n\n            // $.extend merges arrays, rather than replacing them.  When less\n            // colors are provided than the size of the default palette, we\n            // end up with those colors plus the remaining defaults, which is\n            // not expected behavior; avoid it by replacing them here.\n\n            if (opts && opts.colors) {\n            \toptions.colors = opts.colors;\n            }\n\n            if (options.xaxis.color == null)\n                options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n            if (options.yaxis.color == null)\n                options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n            if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility\n                options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;\n            if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility\n                options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;\n\n            if (options.grid.borderColor == null)\n                options.grid.borderColor = options.grid.color;\n            if (options.grid.tickColor == null)\n                options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n            // Fill in defaults for axis options, including any unspecified\n            // font-spec fields, if a font-spec was provided.\n\n            // If no x/y axis options were provided, create one of each anyway,\n            // since the rest of the code assumes that they exist.\n\n            var i, axisOptions, axisCount,\n                fontDefaults = {\n                    style: placeholder.css(\"font-style\"),\n                    size: Math.round(0.8 * (+placeholder.css(\"font-size\").replace(\"px\", \"\") || 13)),\n                    variant: placeholder.css(\"font-variant\"),\n                    weight: placeholder.css(\"font-weight\"),\n                    family: placeholder.css(\"font-family\")\n                };\n\n            fontDefaults.lineHeight = fontDefaults.size * 1.15;\n\n            axisCount = options.xaxes.length || 1;\n            for (i = 0; i < axisCount; ++i) {\n\n                axisOptions = options.xaxes[i];\n                if (axisOptions && !axisOptions.tickColor) {\n                    axisOptions.tickColor = axisOptions.color;\n                }\n\n                axisOptions = $.extend(true, {}, options.xaxis, axisOptions);\n                options.xaxes[i] = axisOptions;\n\n                if (axisOptions.font) {\n                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n                    if (!axisOptions.font.color) {\n                        axisOptions.font.color = axisOptions.color;\n                    }\n                }\n            }\n\n            axisCount = options.yaxes.length || 1;\n            for (i = 0; i < axisCount; ++i) {\n\n                axisOptions = options.yaxes[i];\n                if (axisOptions && !axisOptions.tickColor) {\n                    axisOptions.tickColor = axisOptions.color;\n                }\n\n                axisOptions = $.extend(true, {}, options.yaxis, axisOptions);\n                options.yaxes[i] = axisOptions;\n\n                if (axisOptions.font) {\n                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n                    if (!axisOptions.font.color) {\n                        axisOptions.font.color = axisOptions.color;\n                    }\n                }\n            }\n\n            // backwards compatibility, to be removed in future\n            if (options.xaxis.noTicks && options.xaxis.ticks == null)\n                options.xaxis.ticks = options.xaxis.noTicks;\n            if (options.yaxis.noTicks && options.yaxis.ticks == null)\n                options.yaxis.ticks = options.yaxis.noTicks;\n            if (options.x2axis) {\n                options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);\n                options.xaxes[1].position = \"top\";\n            }\n            if (options.y2axis) {\n                options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);\n                options.yaxes[1].position = \"right\";\n            }\n            if (options.grid.coloredAreas)\n                options.grid.markings = options.grid.coloredAreas;\n            if (options.grid.coloredAreasColor)\n                options.grid.markingsColor = options.grid.coloredAreasColor;\n            if (options.lines)\n                $.extend(true, options.series.lines, options.lines);\n            if (options.points)\n                $.extend(true, options.series.points, options.points);\n            if (options.bars)\n                $.extend(true, options.series.bars, options.bars);\n            if (options.shadowSize != null)\n                options.series.shadowSize = options.shadowSize;\n            if (options.highlightColor != null)\n                options.series.highlightColor = options.highlightColor;\n\n            // save options on axes for future reference\n            for (i = 0; i < options.xaxes.length; ++i)\n                getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];\n            for (i = 0; i < options.yaxes.length; ++i)\n                getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];\n\n            // add hooks from options\n            for (var n in hooks)\n                if (options.hooks[n] && options.hooks[n].length)\n                    hooks[n] = hooks[n].concat(options.hooks[n]);\n\n            executeHooks(hooks.processOptions, [options]);\n        }\n\n        function setData(d) {\n            series = parseData(d);\n            fillInSeriesOptions();\n            processData();\n        }\n\n        function parseData(d) {\n            var res = [];\n            for (var i = 0; i < d.length; ++i) {\n                var s = $.extend(true, {}, options.series);\n\n                if (d[i].data != null) {\n                    s.data = d[i].data; // move the data instead of deep-copy\n                    delete d[i].data;\n\n                    $.extend(true, s, d[i]);\n\n                    d[i].data = s.data;\n                }\n                else\n                    s.data = d[i];\n                res.push(s);\n            }\n\n            return res;\n        }\n\n        function axisNumber(obj, coord) {\n            var a = obj[coord + \"axis\"];\n            if (typeof a == \"object\") // if we got a real axis, extract number\n                a = a.n;\n            if (typeof a != \"number\")\n                a = 1; // default to first axis\n            return a;\n        }\n\n        function allAxes() {\n            // return flat array without annoying null entries\n            return $.grep(xaxes.concat(yaxes), function (a) { return a; });\n        }\n\n        function canvasToAxisCoords(pos) {\n            // return an object with x/y corresponding to all used axes\n            var res = {}, i, axis;\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used)\n                    res[\"x\" + axis.n] = axis.c2p(pos.left);\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used)\n                    res[\"y\" + axis.n] = axis.c2p(pos.top);\n            }\n\n            if (res.x1 !== undefined)\n                res.x = res.x1;\n            if (res.y1 !== undefined)\n                res.y = res.y1;\n\n            return res;\n        }\n\n        function axisToCanvasCoords(pos) {\n            // get canvas coords from the first pair of x/y found in pos\n            var res = {}, i, axis, key;\n\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used) {\n                    key = \"x\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"x\";\n\n                    if (pos[key] != null) {\n                        res.left = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used) {\n                    key = \"y\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"y\";\n\n                    if (pos[key] != null) {\n                        res.top = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            return res;\n        }\n\n        function getOrCreateAxis(axes, number) {\n            if (!axes[number - 1])\n                axes[number - 1] = {\n                    n: number, // save the number for future reference\n                    direction: axes == xaxes ? \"x\" : \"y\",\n                    options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)\n                };\n\n            return axes[number - 1];\n        }\n\n        function fillInSeriesOptions() {\n\n            var neededColors = series.length, maxIndex = -1, i;\n\n            // Subtract the number of series that already have fixed colors or\n            // color indexes from the number that we still need to generate.\n\n            for (i = 0; i < series.length; ++i) {\n                var sc = series[i].color;\n                if (sc != null) {\n                    neededColors--;\n                    if (typeof sc == \"number\" && sc > maxIndex) {\n                        maxIndex = sc;\n                    }\n                }\n            }\n\n            // If any of the series have fixed color indexes, then we need to\n            // generate at least as many colors as the highest index.\n\n            if (neededColors <= maxIndex) {\n                neededColors = maxIndex + 1;\n            }\n\n            // Generate all the colors, using first the option colors and then\n            // variations on those colors once they're exhausted.\n\n            var c, colors = [], colorPool = options.colors,\n                colorPoolSize = colorPool.length, variation = 0;\n\n            for (i = 0; i < neededColors; i++) {\n\n                c = $.color.parse(colorPool[i % colorPoolSize] || \"#666\");\n\n                // Each time we exhaust the colors in the pool we adjust\n                // a scaling factor used to produce more variations on\n                // those colors. The factor alternates negative/positive\n                // to produce lighter/darker colors.\n\n                // Reset the variation after every few cycles, or else\n                // it will end up producing only white or black colors.\n\n                if (i % colorPoolSize == 0 && i) {\n                    if (variation >= 0) {\n                        if (variation < 0.5) {\n                            variation = -variation - 0.2;\n                        } else variation = 0;\n                    } else variation = -variation;\n                }\n\n                colors[i] = c.scale('rgb', 1 + variation);\n            }\n\n            // Finalize the series options, filling in their colors\n\n            var colori = 0, s;\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                // assign colors\n                if (s.color == null) {\n                    s.color = colors[colori].toString();\n                    ++colori;\n                }\n                else if (typeof s.color == \"number\")\n                    s.color = colors[s.color].toString();\n\n                // turn on lines automatically in case nothing is set\n                if (s.lines.show == null) {\n                    var v, show = true;\n                    for (v in s)\n                        if (s[v] && s[v].show) {\n                            show = false;\n                            break;\n                        }\n                    if (show)\n                        s.lines.show = true;\n                }\n\n                // If nothing was provided for lines.zero, default it to match\n                // lines.fill, since areas by default should extend to zero.\n\n                if (s.lines.zero == null) {\n                    s.lines.zero = !!s.lines.fill;\n                }\n\n                // setup axes\n                s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, \"x\"));\n                s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, \"y\"));\n            }\n        }\n\n        function processData() {\n            var topSentry = Number.POSITIVE_INFINITY,\n                bottomSentry = Number.NEGATIVE_INFINITY,\n                fakeInfinity = Number.MAX_VALUE,\n                i, j, k, m, length,\n                s, points, ps, x, y, axis, val, f, p,\n                data, format;\n\n            function updateAxis(axis, min, max) {\n                if (min < axis.datamin && min != -fakeInfinity)\n                    axis.datamin = min;\n                if (max > axis.datamax && max != fakeInfinity)\n                    axis.datamax = max;\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                // init axis\n                axis.datamin = topSentry;\n                axis.datamax = bottomSentry;\n                axis.used = false;\n            });\n\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                s.datapoints = { points: [] };\n\n                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);\n            }\n\n            // first pass: clean and copy data\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                data = s.data;\n                format = s.datapoints.format;\n\n                if (!format) {\n                    format = [];\n                    // find out how to copy\n                    format.push({ x: true, number: true, required: true });\n                    format.push({ y: true, number: true, required: true });\n\n                    if (s.bars.show || (s.lines.show && s.lines.fill)) {\n                        var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));\n                        format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });\n                        if (s.bars.horizontal) {\n                            delete format[format.length - 1].y;\n                            format[format.length - 1].x = true;\n                        }\n                    }\n\n                    s.datapoints.format = format;\n                }\n\n                if (s.datapoints.pointsize != null)\n                    continue; // already filled in\n\n                s.datapoints.pointsize = format.length;\n\n                ps = s.datapoints.pointsize;\n                points = s.datapoints.points;\n\n                var insertSteps = s.lines.show && s.lines.steps;\n                s.xaxis.used = s.yaxis.used = true;\n\n                for (j = k = 0; j < data.length; ++j, k += ps) {\n                    p = data[j];\n\n                    var nullify = p == null;\n                    if (!nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = p[m];\n                            f = format[m];\n\n                            if (f) {\n                                if (f.number && val != null) {\n                                    val = +val; // convert to number\n                                    if (isNaN(val))\n                                        val = null;\n                                    else if (val == Infinity)\n                                        val = fakeInfinity;\n                                    else if (val == -Infinity)\n                                        val = -fakeInfinity;\n                                }\n\n                                if (val == null) {\n                                    if (f.required)\n                                        nullify = true;\n\n                                    if (f.defaultValue != null)\n                                        val = f.defaultValue;\n                                }\n                            }\n\n                            points[k + m] = val;\n                        }\n                    }\n\n                    if (nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = points[k + m];\n                            if (val != null) {\n                                f = format[m];\n                                // extract min/max info\n                                if (f.autoscale) {\n                                    if (f.x) {\n                                        updateAxis(s.xaxis, val, val);\n                                    }\n                                    if (f.y) {\n                                        updateAxis(s.yaxis, val, val);\n                                    }\n                                }\n                            }\n                            points[k + m] = null;\n                        }\n                    }\n                    else {\n                        // a little bit of line specific stuff that\n                        // perhaps shouldn't be here, but lacking\n                        // better means...\n                        if (insertSteps && k > 0\n                            && points[k - ps] != null\n                            && points[k - ps] != points[k]\n                            && points[k - ps + 1] != points[k + 1]) {\n                            // copy the point to make room for a middle point\n                            for (m = 0; m < ps; ++m)\n                                points[k + ps + m] = points[k + m];\n\n                            // middle point has same y\n                            points[k + 1] = points[k - ps + 1];\n\n                            // we've added a point, better reflect that\n                            k += ps;\n                        }\n                    }\n                }\n            }\n\n            // give the hooks a chance to run\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);\n            }\n\n            // second pass: find datamax/datamin for auto-scaling\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                points = s.datapoints.points;\n                ps = s.datapoints.pointsize;\n                format = s.datapoints.format;\n\n                var xmin = topSentry, ymin = topSentry,\n                    xmax = bottomSentry, ymax = bottomSentry;\n\n                for (j = 0; j < points.length; j += ps) {\n                    if (points[j] == null)\n                        continue;\n\n                    for (m = 0; m < ps; ++m) {\n                        val = points[j + m];\n                        f = format[m];\n                        if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)\n                            continue;\n\n                        if (f.x) {\n                            if (val < xmin)\n                                xmin = val;\n                            if (val > xmax)\n                                xmax = val;\n                        }\n                        if (f.y) {\n                            if (val < ymin)\n                                ymin = val;\n                            if (val > ymax)\n                                ymax = val;\n                        }\n                    }\n                }\n\n                if (s.bars.show) {\n                    // make sure we got room for the bar on the dancing floor\n                    var delta;\n\n                    switch (s.bars.align) {\n                        case \"left\":\n                            delta = 0;\n                            break;\n                        case \"right\":\n                            delta = -s.bars.barWidth;\n                            break;\n                        case \"center\":\n                            delta = -s.bars.barWidth / 2;\n                            break;\n                        default:\n                            throw new Error(\"Invalid bar alignment: \" + s.bars.align);\n                    }\n\n                    if (s.bars.horizontal) {\n                        ymin += delta;\n                        ymax += delta + s.bars.barWidth;\n                    }\n                    else {\n                        xmin += delta;\n                        xmax += delta + s.bars.barWidth;\n                    }\n                }\n\n                updateAxis(s.xaxis, xmin, xmax);\n                updateAxis(s.yaxis, ymin, ymax);\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                if (axis.datamin == topSentry)\n                    axis.datamin = null;\n                if (axis.datamax == bottomSentry)\n                    axis.datamax = null;\n            });\n        }\n\n        function setupCanvases() {\n\n            // Make sure the placeholder is clear of everything except canvases\n            // from a previous plot in this container that we'll try to re-use.\n\n            placeholder.css(\"padding\", 0) // padding messes up the positioning\n                .children(\":not(.flot-base,.flot-overlay)\").remove();\n\n            if (placeholder.css(\"position\") == 'static')\n                placeholder.css(\"position\", \"relative\"); // for positioning labels and overlay\n\n            surface = new Canvas(\"flot-base\", placeholder);\n            overlay = new Canvas(\"flot-overlay\", placeholder); // overlay canvas for interactive features\n\n            ctx = surface.context;\n            octx = overlay.context;\n\n            // define which element we're listening for events on\n            eventHolder = $(overlay.element).unbind();\n\n            // If we're re-using a plot object, shut down the old one\n\n            var existing = placeholder.data(\"plot\");\n\n            if (existing) {\n                existing.shutdown();\n                overlay.clear();\n            }\n\n            // save in case we get replotted\n            placeholder.data(\"plot\", plot);\n        }\n\n        function bindEvents() {\n            // bind events\n            if (options.grid.hoverable) {\n                eventHolder.mousemove(onMouseMove);\n\n                // Use bind, rather than .mouseleave, because we officially\n                // still support jQuery 1.2.6, which doesn't define a shortcut\n                // for mouseenter or mouseleave.  This was a bug/oversight that\n                // was fixed somewhere around 1.3.x.  We can return to using\n                // .mouseleave when we drop support for 1.2.6.\n\n                eventHolder.bind(\"mouseleave\", onMouseLeave);\n            }\n\n            if (options.grid.clickable)\n                eventHolder.click(onClick);\n\n            executeHooks(hooks.bindEvents, [eventHolder]);\n        }\n\n        function shutdown() {\n            if (redrawTimeout)\n                clearTimeout(redrawTimeout);\n\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n            eventHolder.unbind(\"mouseleave\", onMouseLeave);\n            eventHolder.unbind(\"click\", onClick);\n\n            executeHooks(hooks.shutdown, [eventHolder]);\n        }\n\n        function setTransformationHelpers(axis) {\n            // set helper functions on the axis, assumes plot area\n            // has been computed already\n\n            function identity(x) { return x; }\n\n            var s, m, t = axis.options.transform || identity,\n                it = axis.options.inverseTransform;\n\n            // precompute how much the axis is scaling a point\n            // in canvas space\n            if (axis.direction == \"x\") {\n                s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));\n                m = Math.min(t(axis.max), t(axis.min));\n            }\n            else {\n                s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));\n                s = -s;\n                m = Math.max(t(axis.max), t(axis.min));\n            }\n\n            // data point to canvas coordinate\n            if (t == identity) // slight optimization\n                axis.p2c = function (p) { return (p - m) * s; };\n            else\n                axis.p2c = function (p) { return (t(p) - m) * s; };\n            // canvas coordinate to data point\n            if (!it)\n                axis.c2p = function (c) { return m + c / s; };\n            else\n                axis.c2p = function (c) { return it(m + c / s); };\n        }\n\n        function measureTickLabels(axis) {\n\n            var opts = axis.options,\n                ticks = axis.ticks || [],\n                labelWidth = opts.labelWidth || 0,\n                labelHeight = opts.labelHeight || 0,\n                maxWidth = labelWidth || axis.direction == \"x\" ? Math.floor(surface.width / (ticks.length || 1)) : null,\n                legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n                layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n                font = opts.font || \"flot-tick-label tickLabel\";\n\n            for (var i = 0; i < ticks.length; ++i) {\n\n                var t = ticks[i];\n\n                if (!t.label)\n                    continue;\n\n                var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);\n\n                labelWidth = Math.max(labelWidth, info.width);\n                labelHeight = Math.max(labelHeight, info.height);\n            }\n\n            axis.labelWidth = opts.labelWidth || labelWidth;\n            axis.labelHeight = opts.labelHeight || labelHeight;\n        }\n\n        function allocateAxisBoxFirstPhase(axis) {\n            // find the bounding box of the axis by looking at label\n            // widths/heights and ticks, make room by diminishing the\n            // plotOffset; this first phase only looks at one\n            // dimension per axis, the other dimension depends on the\n            // other axes so will have to wait\n\n            var lw = axis.labelWidth,\n                lh = axis.labelHeight,\n                pos = axis.options.position,\n                tickLength = axis.options.tickLength,\n                axisMargin = options.grid.axisMargin,\n                padding = options.grid.labelMargin,\n                all = axis.direction == \"x\" ? xaxes : yaxes,\n                index, innermost;\n\n            // determine axis margin\n            var samePosition = $.grep(all, function (a) {\n                return a && a.options.position == pos && a.reserveSpace;\n            });\n            if ($.inArray(axis, samePosition) == samePosition.length - 1)\n                axisMargin = 0; // outermost\n\n            // Determine whether the axis is the first (innermost) on its side\n\n            innermost = $.inArray(axis, samePosition) == 0;\n\n            // determine tick length - if we're innermost, we can use \"full\"\n\n            if (tickLength == null) {\n                if (innermost)\n                    tickLength = \"full\";\n                else\n                    tickLength = 5;\n            }\n\n            if (!isNaN(+tickLength))\n                padding += +tickLength;\n\n            // compute box\n            if (axis.direction == \"x\") {\n                lh += padding;\n\n                if (pos == \"bottom\") {\n                    plotOffset.bottom += lh + axisMargin;\n                    axis.box = { top: surface.height - plotOffset.bottom, height: lh };\n                }\n                else {\n                    axis.box = { top: plotOffset.top + axisMargin, height: lh };\n                    plotOffset.top += lh + axisMargin;\n                }\n            }\n            else {\n                lw += padding;\n\n                if (pos == \"left\") {\n                    axis.box = { left: plotOffset.left + axisMargin, width: lw };\n                    plotOffset.left += lw + axisMargin;\n                }\n                else {\n                    plotOffset.right += lw + axisMargin;\n                    axis.box = { left: surface.width - plotOffset.right, width: lw };\n                }\n            }\n\n             // save for future reference\n            axis.position = pos;\n            axis.tickLength = tickLength;\n            axis.box.padding = padding;\n            axis.innermost = innermost;\n        }\n\n        function allocateAxisBoxSecondPhase(axis) {\n            // now that all axis boxes have been placed in one\n            // dimension, we can set the remaining dimension coordinates\n            if (axis.direction == \"x\") {\n                axis.box.left = plotOffset.left - axis.labelWidth / 2;\n                axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;\n            }\n            else {\n                axis.box.top = plotOffset.top - axis.labelHeight / 2;\n                axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;\n            }\n        }\n\n        function adjustLayoutForThingsStickingOut() {\n            // possibly adjust plot offset to ensure everything stays\n            // inside the canvas and isn't clipped off\n\n            var minMargin = options.grid.minBorderMargin,\n                margins = { x: 0, y: 0 }, i, axis;\n\n            // check stuff from the plot (FIXME: this should just read\n            // a value from the series, otherwise it's impossible to\n            // customize)\n            if (minMargin == null) {\n                minMargin = 0;\n                for (i = 0; i < series.length; ++i)\n                    minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2));\n            }\n\n            margins.x = margins.y = Math.ceil(minMargin);\n\n            // check axis labels, note we don't check the actual\n            // labels but instead use the overall width/height to not\n            // jump as much around with replots\n            $.each(allAxes(), function (_, axis) {\n                var dir = axis.direction;\n                if (axis.reserveSpace)\n                    margins[dir] = Math.ceil(Math.max(margins[dir], (dir == \"x\" ? axis.labelWidth : axis.labelHeight) / 2));\n            });\n\n            plotOffset.left = Math.max(margins.x, plotOffset.left);\n            plotOffset.right = Math.max(margins.x, plotOffset.right);\n            plotOffset.top = Math.max(margins.y, plotOffset.top);\n            plotOffset.bottom = Math.max(margins.y, plotOffset.bottom);\n        }\n\n        function setupGrid() {\n            var i, axes = allAxes(), showGrid = options.grid.show;\n\n            // Initialize the plot's offset from the edge of the canvas\n\n            for (var a in plotOffset) {\n                var margin = options.grid.margin || 0;\n                plotOffset[a] = typeof margin == \"number\" ? margin : margin[a] || 0;\n            }\n\n            executeHooks(hooks.processOffset, [plotOffset]);\n\n            // If the grid is visible, add its border width to the offset\n\n            for (var a in plotOffset) {\n                if(typeof(options.grid.borderWidth) == \"object\") {\n                    plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;\n                }\n                else {\n                    plotOffset[a] += showGrid ? options.grid.borderWidth : 0;\n                }\n            }\n\n            // init axes\n            $.each(axes, function (_, axis) {\n                axis.show = axis.options.show;\n                if (axis.show == null)\n                    axis.show = axis.used; // by default an axis is visible if it's got data\n\n                axis.reserveSpace = axis.show || axis.options.reserveSpace;\n\n                setRange(axis);\n            });\n\n            if (showGrid) {\n\n                var allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; });\n\n                $.each(allocatedAxes, function (_, axis) {\n                    // make the ticks\n                    setupTickGeneration(axis);\n                    setTicks(axis);\n                    snapRangeToTicks(axis, axis.ticks);\n                    // find labelWidth/Height for axis\n                    measureTickLabels(axis);\n                });\n\n                // with all dimensions calculated, we can compute the\n                // axis bounding boxes, start from the outside\n                // (reverse order)\n                for (i = allocatedAxes.length - 1; i >= 0; --i)\n                    allocateAxisBoxFirstPhase(allocatedAxes[i]);\n\n                // make sure we've got enough space for things that\n                // might stick out\n                adjustLayoutForThingsStickingOut();\n\n                $.each(allocatedAxes, function (_, axis) {\n                    allocateAxisBoxSecondPhase(axis);\n                });\n            }\n\n            plotWidth = surface.width - plotOffset.left - plotOffset.right;\n            plotHeight = surface.height - plotOffset.bottom - plotOffset.top;\n\n            // now we got the proper plot dimensions, we can compute the scaling\n            $.each(axes, function (_, axis) {\n                setTransformationHelpers(axis);\n            });\n\n            if (showGrid) {\n                drawAxisLabels();\n            }\n\n            insertLegend();\n        }\n\n        function setRange(axis) {\n            var opts = axis.options,\n                min = +(opts.min != null ? opts.min : axis.datamin),\n                max = +(opts.max != null ? opts.max : axis.datamax),\n                delta = max - min;\n\n            if (delta == 0.0) {\n                // degenerate case\n                var widen = max == 0 ? 1 : 0.01;\n\n                if (opts.min == null)\n                    min -= widen;\n                // always widen max if we couldn't widen min to ensure we\n                // don't fall into min == max which doesn't work\n                if (opts.max == null || opts.min != null)\n                    max += widen;\n            }\n            else {\n                // consider autoscaling\n                var margin = opts.autoscaleMargin;\n                if (margin != null) {\n                    if (opts.min == null) {\n                        min -= delta * margin;\n                        // make sure we don't go below zero if all values\n                        // are positive\n                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)\n                            min = 0;\n                    }\n                    if (opts.max == null) {\n                        max += delta * margin;\n                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)\n                            max = 0;\n                    }\n                }\n            }\n            axis.min = min;\n            axis.max = max;\n        }\n\n        function setupTickGeneration(axis) {\n            var opts = axis.options;\n\n            // estimate number of ticks\n            var noTicks;\n            if (typeof opts.ticks == \"number\" && opts.ticks > 0)\n                noTicks = opts.ticks;\n            else\n                // heuristic based on the model a*sqrt(x) fitted to\n                // some data points that seemed reasonable\n                noTicks = 0.3 * Math.sqrt(axis.direction == \"x\" ? surface.width : surface.height);\n\n            var delta = (axis.max - axis.min) / noTicks,\n                dec = -Math.floor(Math.log(delta) / Math.LN10),\n                maxDec = opts.tickDecimals;\n\n            if (maxDec != null && dec > maxDec) {\n                dec = maxDec;\n            }\n\n            var magn = Math.pow(10, -dec),\n                norm = delta / magn, // norm is between 1.0 and 10.0\n                size;\n\n            if (norm < 1.5) {\n                size = 1;\n            } else if (norm < 3) {\n                size = 2;\n                // special case for 2.5, requires an extra decimal\n                if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {\n                    size = 2.5;\n                    ++dec;\n                }\n            } else if (norm < 7.5) {\n                size = 5;\n            } else {\n                size = 10;\n            }\n\n            size *= magn;\n\n            if (opts.minTickSize != null && size < opts.minTickSize) {\n                size = opts.minTickSize;\n            }\n\n            axis.delta = delta;\n            axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);\n            axis.tickSize = opts.tickSize || size;\n\n            // Time mode was moved to a plug-in in 0.8, but since so many people use this\n            // we'll add an especially friendly make sure they remembered to include it.\n\n            if (opts.mode == \"time\" && !axis.tickGenerator) {\n                throw new Error(\"Time mode requires the flot.time plugin.\");\n            }\n\n            // Flot supports base-10 axes; any other mode else is handled by a plug-in,\n            // like flot.time.js.\n\n            if (!axis.tickGenerator) {\n\n                axis.tickGenerator = function (axis) {\n\n                    var ticks = [],\n                        start = floorInBase(axis.min, axis.tickSize),\n                        i = 0,\n                        v = Number.NaN,\n                        prev;\n\n                    do {\n                        prev = v;\n                        v = start + i * axis.tickSize;\n                        ticks.push(v);\n                        ++i;\n                    } while (v < axis.max && v != prev);\n                    return ticks;\n                };\n\n\t\t\t\taxis.tickFormatter = function (value, axis) {\n\n\t\t\t\t\tvar factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;\n\t\t\t\t\tvar formatted = \"\" + Math.round(value * factor) / factor;\n\n\t\t\t\t\t// If tickDecimals was specified, ensure that we have exactly that\n\t\t\t\t\t// much precision; otherwise default to the value's own precision.\n\n\t\t\t\t\tif (axis.tickDecimals != null) {\n\t\t\t\t\t\tvar decimal = formatted.indexOf(\".\");\n\t\t\t\t\t\tvar precision = decimal == -1 ? 0 : formatted.length - decimal - 1;\n\t\t\t\t\t\tif (precision < axis.tickDecimals) {\n\t\t\t\t\t\t\treturn (precision ? formatted : formatted + \".\") + (\"\" + factor).substr(1, axis.tickDecimals - precision);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n                    return formatted;\n                };\n            }\n\n            if ($.isFunction(opts.tickFormatter))\n                axis.tickFormatter = function (v, axis) { return \"\" + opts.tickFormatter(v, axis); };\n\n            if (opts.alignTicksWithAxis != null) {\n                var otherAxis = (axis.direction == \"x\" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];\n                if (otherAxis && otherAxis.used && otherAxis != axis) {\n                    // consider snapping min/max to outermost nice ticks\n                    var niceTicks = axis.tickGenerator(axis);\n                    if (niceTicks.length > 0) {\n                        if (opts.min == null)\n                            axis.min = Math.min(axis.min, niceTicks[0]);\n                        if (opts.max == null && niceTicks.length > 1)\n                            axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);\n                    }\n\n                    axis.tickGenerator = function (axis) {\n                        // copy ticks, scaled to this axis\n                        var ticks = [], v, i;\n                        for (i = 0; i < otherAxis.ticks.length; ++i) {\n                            v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);\n                            v = axis.min + v * (axis.max - axis.min);\n                            ticks.push(v);\n                        }\n                        return ticks;\n                    };\n\n                    // we might need an extra decimal since forced\n                    // ticks don't necessarily fit naturally\n                    if (!axis.mode && opts.tickDecimals == null) {\n                        var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),\n                            ts = axis.tickGenerator(axis);\n\n                        // only proceed if the tick interval rounded\n                        // with an extra decimal doesn't give us a\n                        // zero at end\n                        if (!(ts.length > 1 && /\\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))\n                            axis.tickDecimals = extraDec;\n                    }\n                }\n            }\n        }\n\n        function setTicks(axis) {\n            var oticks = axis.options.ticks, ticks = [];\n            if (oticks == null || (typeof oticks == \"number\" && oticks > 0))\n                ticks = axis.tickGenerator(axis);\n            else if (oticks) {\n                if ($.isFunction(oticks))\n                    // generate the ticks\n                    ticks = oticks(axis);\n                else\n                    ticks = oticks;\n            }\n\n            // clean up/labelify the supplied ticks, copy them over\n            var i, v;\n            axis.ticks = [];\n            for (i = 0; i < ticks.length; ++i) {\n                var label = null;\n                var t = ticks[i];\n                if (typeof t == \"object\") {\n                    v = +t[0];\n                    if (t.length > 1)\n                        label = t[1];\n                }\n                else\n                    v = +t;\n                if (label == null)\n                    label = axis.tickFormatter(v, axis);\n                if (!isNaN(v))\n                    axis.ticks.push({ v: v, label: label });\n            }\n        }\n\n        function snapRangeToTicks(axis, ticks) {\n            if (axis.options.autoscaleMargin && ticks.length > 0) {\n                // snap to ticks\n                if (axis.options.min == null)\n                    axis.min = Math.min(axis.min, ticks[0].v);\n                if (axis.options.max == null && ticks.length > 1)\n                    axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);\n            }\n        }\n\n        function draw() {\n\n            surface.clear();\n\n            executeHooks(hooks.drawBackground, [ctx]);\n\n            var grid = options.grid;\n\n            // draw background, if any\n            if (grid.show && grid.backgroundColor)\n                drawBackground();\n\n            if (grid.show && !grid.aboveData) {\n                drawGrid();\n            }\n\n            for (var i = 0; i < series.length; ++i) {\n                executeHooks(hooks.drawSeries, [ctx, series[i]]);\n                drawSeries(series[i]);\n            }\n\n            executeHooks(hooks.draw, [ctx]);\n\n            if (grid.show && grid.aboveData) {\n                drawGrid();\n            }\n\n            surface.render();\n\n            // A draw implies that either the axes or data have changed, so we\n            // should probably update the overlay highlights as well.\n\n            triggerRedrawOverlay();\n        }\n\n        function extractRange(ranges, coord) {\n            var axis, from, to, key, axes = allAxes();\n\n            for (var i = 0; i < axes.length; ++i) {\n                axis = axes[i];\n                if (axis.direction == coord) {\n                    key = coord + axis.n + \"axis\";\n                    if (!ranges[key] && axis.n == 1)\n                        key = coord + \"axis\"; // support x1axis as xaxis\n                    if (ranges[key]) {\n                        from = ranges[key].from;\n                        to = ranges[key].to;\n                        break;\n                    }\n                }\n            }\n\n            // backwards-compat stuff - to be removed in future\n            if (!ranges[key]) {\n                axis = coord == \"x\" ? xaxes[0] : yaxes[0];\n                from = ranges[coord + \"1\"];\n                to = ranges[coord + \"2\"];\n            }\n\n            // auto-reverse as an added bonus\n            if (from != null && to != null && from > to) {\n                var tmp = from;\n                from = to;\n                to = tmp;\n            }\n\n            return { from: from, to: to, axis: axis };\n        }\n\n        function drawBackground() {\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, \"rgba(255, 255, 255, 0)\");\n            ctx.fillRect(0, 0, plotWidth, plotHeight);\n            ctx.restore();\n        }\n\n        function drawGrid() {\n            var i, axes, bw, bc;\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // draw markings\n            var markings = options.grid.markings;\n            if (markings) {\n                if ($.isFunction(markings)) {\n                    axes = plot.getAxes();\n                    // xmin etc. is backwards compatibility, to be\n                    // removed in the future\n                    axes.xmin = axes.xaxis.min;\n                    axes.xmax = axes.xaxis.max;\n                    axes.ymin = axes.yaxis.min;\n                    axes.ymax = axes.yaxis.max;\n\n                    markings = markings(axes);\n                }\n\n                for (i = 0; i < markings.length; ++i) {\n                    var m = markings[i],\n                        xrange = extractRange(m, \"x\"),\n                        yrange = extractRange(m, \"y\");\n\n                    // fill in missing\n                    if (xrange.from == null)\n                        xrange.from = xrange.axis.min;\n                    if (xrange.to == null)\n                        xrange.to = xrange.axis.max;\n                    if (yrange.from == null)\n                        yrange.from = yrange.axis.min;\n                    if (yrange.to == null)\n                        yrange.to = yrange.axis.max;\n\n                    // clip\n                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||\n                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)\n                        continue;\n\n                    xrange.from = Math.max(xrange.from, xrange.axis.min);\n                    xrange.to = Math.min(xrange.to, xrange.axis.max);\n                    yrange.from = Math.max(yrange.from, yrange.axis.min);\n                    yrange.to = Math.min(yrange.to, yrange.axis.max);\n\n                    if (xrange.from == xrange.to && yrange.from == yrange.to)\n                        continue;\n\n                    // then draw\n                    xrange.from = xrange.axis.p2c(xrange.from);\n                    xrange.to = xrange.axis.p2c(xrange.to);\n                    yrange.from = yrange.axis.p2c(yrange.from);\n                    yrange.to = yrange.axis.p2c(yrange.to);\n\n                    if (xrange.from == xrange.to || yrange.from == yrange.to) {\n                        // draw line\n                        ctx.beginPath();\n                        ctx.strokeStyle = m.color || options.grid.markingsColor;\n                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;\n                        ctx.moveTo(xrange.from, yrange.from);\n                        ctx.lineTo(xrange.to, yrange.to);\n                        ctx.stroke();\n                    }\n                    else {\n                        // fill area\n                        ctx.fillStyle = m.color || options.grid.markingsColor;\n                        ctx.fillRect(xrange.from, yrange.to,\n                                     xrange.to - xrange.from,\n                                     yrange.from - yrange.to);\n                    }\n                }\n            }\n\n            // draw the ticks\n            axes = allAxes();\n            bw = options.grid.borderWidth;\n\n            for (var j = 0; j < axes.length; ++j) {\n                var axis = axes[j], box = axis.box,\n                    t = axis.tickLength, x, y, xoff, yoff;\n                if (!axis.show || axis.ticks.length == 0)\n                    continue;\n\n                ctx.lineWidth = 1;\n\n                // find the edges\n                if (axis.direction == \"x\") {\n                    x = 0;\n                    if (t == \"full\")\n                        y = (axis.position == \"top\" ? 0 : plotHeight);\n                    else\n                        y = box.top - plotOffset.top + (axis.position == \"top\" ? box.height : 0);\n                }\n                else {\n                    y = 0;\n                    if (t == \"full\")\n                        x = (axis.position == \"left\" ? 0 : plotWidth);\n                    else\n                        x = box.left - plotOffset.left + (axis.position == \"left\" ? box.width : 0);\n                }\n\n                // draw tick bar\n                if (!axis.innermost) {\n                    ctx.strokeStyle = axis.options.color;\n                    ctx.beginPath();\n                    xoff = yoff = 0;\n                    if (axis.direction == \"x\")\n                        xoff = plotWidth + 1;\n                    else\n                        yoff = plotHeight + 1;\n\n                    if (ctx.lineWidth == 1) {\n                        if (axis.direction == \"x\") {\n                            y = Math.floor(y) + 0.5;\n                        } else {\n                            x = Math.floor(x) + 0.5;\n                        }\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                    ctx.stroke();\n                }\n\n                // draw ticks\n\n                ctx.strokeStyle = axis.options.tickColor;\n\n                ctx.beginPath();\n                for (i = 0; i < axis.ticks.length; ++i) {\n                    var v = axis.ticks[i].v;\n\n                    xoff = yoff = 0;\n\n                    if (isNaN(v) || v < axis.min || v > axis.max\n                        // skip those lying on the axes if we got a border\n                        || (t == \"full\"\n                            && ((typeof bw == \"object\" && bw[axis.position] > 0) || bw > 0)\n                            && (v == axis.min || v == axis.max)))\n                        continue;\n\n                    if (axis.direction == \"x\") {\n                        x = axis.p2c(v);\n                        yoff = t == \"full\" ? -plotHeight : t;\n\n                        if (axis.position == \"top\")\n                            yoff = -yoff;\n                    }\n                    else {\n                        y = axis.p2c(v);\n                        xoff = t == \"full\" ? -plotWidth : t;\n\n                        if (axis.position == \"left\")\n                            xoff = -xoff;\n                    }\n\n                    if (ctx.lineWidth == 1) {\n                        if (axis.direction == \"x\")\n                            x = Math.floor(x) + 0.5;\n                        else\n                            y = Math.floor(y) + 0.5;\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                }\n\n                ctx.stroke();\n            }\n\n\n            // draw border\n            if (bw) {\n                // If either borderWidth or borderColor is an object, then draw the border\n                // line by line instead of as one rectangle\n                bc = options.grid.borderColor;\n                if(typeof bw == \"object\" || typeof bc == \"object\") {\n                    if (typeof bw !== \"object\") {\n                        bw = {top: bw, right: bw, bottom: bw, left: bw};\n                    }\n                    if (typeof bc !== \"object\") {\n                        bc = {top: bc, right: bc, bottom: bc, left: bc};\n                    }\n\n                    if (bw.top > 0) {\n                        ctx.strokeStyle = bc.top;\n                        ctx.lineWidth = bw.top;\n                        ctx.beginPath();\n                        ctx.moveTo(0 - bw.left, 0 - bw.top/2);\n                        ctx.lineTo(plotWidth, 0 - bw.top/2);\n                        ctx.stroke();\n                    }\n\n                    if (bw.right > 0) {\n                        ctx.strokeStyle = bc.right;\n                        ctx.lineWidth = bw.right;\n                        ctx.beginPath();\n                        ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);\n                        ctx.lineTo(plotWidth + bw.right / 2, plotHeight);\n                        ctx.stroke();\n                    }\n\n                    if (bw.bottom > 0) {\n                        ctx.strokeStyle = bc.bottom;\n                        ctx.lineWidth = bw.bottom;\n                        ctx.beginPath();\n                        ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);\n                        ctx.lineTo(0, plotHeight + bw.bottom / 2);\n                        ctx.stroke();\n                    }\n\n                    if (bw.left > 0) {\n                        ctx.strokeStyle = bc.left;\n                        ctx.lineWidth = bw.left;\n                        ctx.beginPath();\n                        ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom);\n                        ctx.lineTo(0- bw.left/2, 0);\n                        ctx.stroke();\n                    }\n                }\n                else {\n                    ctx.lineWidth = bw;\n                    ctx.strokeStyle = options.grid.borderColor;\n                    ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);\n                }\n            }\n\n            ctx.restore();\n        }\n\n        function drawAxisLabels() {\n\n            $.each(allAxes(), function (_, axis) {\n                if (!axis.show || axis.ticks.length == 0)\n                    return;\n\n                var box = axis.box,\n                    legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n                    layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n                    font = axis.options.font || \"flot-tick-label tickLabel\",\n                    tick, x, y, halign, valign;\n\n                surface.removeText(layer);\n\n                for (var i = 0; i < axis.ticks.length; ++i) {\n\n                    tick = axis.ticks[i];\n                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)\n                        continue;\n\n                    if (axis.direction == \"x\") {\n                        halign = \"center\";\n                        x = plotOffset.left + axis.p2c(tick.v);\n                        if (axis.position == \"bottom\") {\n                            y = box.top + box.padding;\n                        } else {\n                            y = box.top + box.height - box.padding;\n                            valign = \"bottom\";\n                        }\n                    } else {\n                        valign = \"middle\";\n                        y = plotOffset.top + axis.p2c(tick.v);\n                        if (axis.position == \"left\") {\n                            x = box.left + box.width - box.padding;\n                            halign = \"right\";\n                        } else {\n                            x = box.left + box.padding;\n                        }\n                    }\n\n                    surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);\n                }\n            });\n        }\n\n        function drawSeries(series) {\n            if (series.lines.show)\n                drawSeriesLines(series);\n            if (series.bars.show)\n                drawSeriesBars(series);\n            if (series.points.show)\n                drawSeriesPoints(series);\n        }\n\n        function drawSeriesLines(series) {\n            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    prevx = null, prevy = null;\n\n                ctx.beginPath();\n                for (var i = ps; i < points.length; i += ps) {\n                    var x1 = points[i - ps], y1 = points[i - ps + 1],\n                        x2 = points[i], y2 = points[i + 1];\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min) {\n                        if (y2 < axisy.min)\n                            continue;   // line segment is outside\n                        // compute new intersection point\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min) {\n                        if (y1 < axisy.min)\n                            continue;\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max) {\n                        if (y2 > axisy.max)\n                            continue;\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max) {\n                        if (y1 > axisy.max)\n                            continue;\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (x1 != prevx || y1 != prevy)\n                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);\n\n                    prevx = x2;\n                    prevy = y2;\n                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);\n                }\n                ctx.stroke();\n            }\n\n            function plotLineArea(datapoints, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),\n                    i = 0, top, areaOpen = false,\n                    ypos = 1, segmentStart = 0, segmentEnd = 0;\n\n                // we process each segment in two turns, first forward\n                // direction to sketch out top, then once we hit the\n                // end we go backwards to sketch the bottom\n                while (true) {\n                    if (ps > 0 && i > points.length + ps)\n                        break;\n\n                    i += ps; // ps is negative if going backwards\n\n                    var x1 = points[i - ps],\n                        y1 = points[i - ps + ypos],\n                        x2 = points[i], y2 = points[i + ypos];\n\n                    if (areaOpen) {\n                        if (ps > 0 && x1 != null && x2 == null) {\n                            // at turning point\n                            segmentEnd = i;\n                            ps = -ps;\n                            ypos = 2;\n                            continue;\n                        }\n\n                        if (ps < 0 && i == segmentStart + ps) {\n                            // done with the reverse sweep\n                            ctx.fill();\n                            areaOpen = false;\n                            ps = -ps;\n                            ypos = 1;\n                            i = segmentStart = segmentEnd + ps;\n                            continue;\n                        }\n                    }\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip x values\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (!areaOpen) {\n                        // open area\n                        ctx.beginPath();\n                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));\n                        areaOpen = true;\n                    }\n\n                    // now first check the case where both is outside\n                    if (y1 >= axisy.max && y2 >= axisy.max) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));\n                        continue;\n                    }\n                    else if (y1 <= axisy.min && y2 <= axisy.min) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));\n                        continue;\n                    }\n\n                    // else it's a bit more complicated, there might\n                    // be a flat maxed out rectangle first, then a\n                    // triangular cutout or reverse; to find these\n                    // keep track of the current x values\n                    var x1old = x1, x2old = x2;\n\n                    // clip the y values, without shortcutting, we\n                    // go through all cases in turn\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // if the x value was changed we got a rectangle\n                    // to fill\n                    if (x1 != x1old) {\n                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));\n                        // it goes to (x1, y1), but we fill that below\n                    }\n\n                    // fill triangular section, this sometimes result\n                    // in redundant points if (x1, y1) hasn't changed\n                    // from previous line to, but we just ignore that\n                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));\n                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n\n                    // fill the other rectangle if it's there\n                    if (x2 != x2old) {\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));\n                    }\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n            ctx.lineJoin = \"round\";\n\n            var lw = series.lines.lineWidth,\n                sw = series.shadowSize;\n            // FIXME: consider another form of shadow when filling is turned on\n            if (lw > 0 && sw > 0) {\n                // draw shadow as a thick and thin line with transparency\n                ctx.lineWidth = sw;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                // position shadow at angle from the mid of line\n                var angle = Math.PI/18;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);\n                ctx.lineWidth = sw/2;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);\n            if (fillStyle) {\n                ctx.fillStyle = fillStyle;\n                plotLineArea(series.datapoints, series.xaxis, series.yaxis);\n            }\n\n            if (lw > 0)\n                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function drawSeriesPoints(series) {\n            function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    var x = points[i], y = points[i + 1];\n                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                        continue;\n\n                    ctx.beginPath();\n                    x = axisx.p2c(x);\n                    y = axisy.p2c(y) + offset;\n                    if (symbol == \"circle\")\n                        ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);\n                    else\n                        symbol(ctx, x, y, radius, shadow);\n                    ctx.closePath();\n\n                    if (fillStyle) {\n                        ctx.fillStyle = fillStyle;\n                        ctx.fill();\n                    }\n                    ctx.stroke();\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            var lw = series.points.lineWidth,\n                sw = series.shadowSize,\n                radius = series.points.radius,\n                symbol = series.points.symbol;\n\n            // If the user sets the line width to 0, we change it to a very \n            // small value. A line width of 0 seems to force the default of 1.\n            // Doing the conditional here allows the shadow setting to still be \n            // optional even with a lineWidth of 0.\n\n            if( lw == 0 )\n                lw = 0.0001;\n\n            if (lw > 0 && sw > 0) {\n                // draw shadow in two steps\n                var w = sw / 2;\n                ctx.lineWidth = w;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                plotPoints(series.datapoints, radius, null, w + w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n\n                ctx.strokeStyle = \"rgba(0,0,0,0.2)\";\n                plotPoints(series.datapoints, radius, null, w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            plotPoints(series.datapoints, radius,\n                       getFillStyle(series.points, series.color), 0, false,\n                       series.xaxis, series.yaxis, symbol);\n            ctx.restore();\n        }\n\n        function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {\n            var left, right, bottom, top,\n                drawLeft, drawRight, drawTop, drawBottom,\n                tmp;\n\n            // in horizontal mode, we start the bar from the left\n            // instead of from the bottom so it appears to be\n            // horizontal rather than vertical\n            if (horizontal) {\n                drawBottom = drawRight = drawTop = true;\n                drawLeft = false;\n                left = b;\n                right = x;\n                top = y + barLeft;\n                bottom = y + barRight;\n\n                // account for negative bars\n                if (right < left) {\n                    tmp = right;\n                    right = left;\n                    left = tmp;\n                    drawLeft = true;\n                    drawRight = false;\n                }\n            }\n            else {\n                drawLeft = drawRight = drawTop = true;\n                drawBottom = false;\n                left = x + barLeft;\n                right = x + barRight;\n                bottom = b;\n                top = y;\n\n                // account for negative bars\n                if (top < bottom) {\n                    tmp = top;\n                    top = bottom;\n                    bottom = tmp;\n                    drawBottom = true;\n                    drawTop = false;\n                }\n            }\n\n            // clip\n            if (right < axisx.min || left > axisx.max ||\n                top < axisy.min || bottom > axisy.max)\n                return;\n\n            if (left < axisx.min) {\n                left = axisx.min;\n                drawLeft = false;\n            }\n\n            if (right > axisx.max) {\n                right = axisx.max;\n                drawRight = false;\n            }\n\n            if (bottom < axisy.min) {\n                bottom = axisy.min;\n                drawBottom = false;\n            }\n\n            if (top > axisy.max) {\n                top = axisy.max;\n                drawTop = false;\n            }\n\n            left = axisx.p2c(left);\n            bottom = axisy.p2c(bottom);\n            right = axisx.p2c(right);\n            top = axisy.p2c(top);\n\n            // fill the bar\n            if (fillStyleCallback) {\n                c.beginPath();\n                c.moveTo(left, bottom);\n                c.lineTo(left, top);\n                c.lineTo(right, top);\n                c.lineTo(right, bottom);\n                c.fillStyle = fillStyleCallback(bottom, top);\n                c.fill();\n            }\n\n            // draw outline\n            if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {\n                c.beginPath();\n\n                // FIXME: inline moveTo is buggy with excanvas\n                c.moveTo(left, bottom + offset);\n                if (drawLeft)\n                    c.lineTo(left, top + offset);\n                else\n                    c.moveTo(left, top + offset);\n                if (drawTop)\n                    c.lineTo(right, top + offset);\n                else\n                    c.moveTo(right, top + offset);\n                if (drawRight)\n                    c.lineTo(right, bottom + offset);\n                else\n                    c.moveTo(right, bottom + offset);\n                if (drawBottom)\n                    c.lineTo(left, bottom + offset);\n                else\n                    c.moveTo(left, bottom + offset);\n                c.stroke();\n            }\n        }\n\n        function drawSeriesBars(series) {\n            function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    if (points[i] == null)\n                        continue;\n                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // FIXME: figure out a way to add shadows (for instance along the right edge)\n            ctx.lineWidth = series.bars.lineWidth;\n            ctx.strokeStyle = series.color;\n\n            var barLeft;\n\n            switch (series.bars.align) {\n                case \"left\":\n                    barLeft = 0;\n                    break;\n                case \"right\":\n                    barLeft = -series.bars.barWidth;\n                    break;\n                case \"center\":\n                    barLeft = -series.bars.barWidth / 2;\n                    break;\n                default:\n                    throw new Error(\"Invalid bar alignment: \" + series.bars.align);\n            }\n\n            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;\n            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function getFillStyle(filloptions, seriesColor, bottom, top) {\n            var fill = filloptions.fill;\n            if (!fill)\n                return null;\n\n            if (filloptions.fillColor)\n                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);\n\n            var c = $.color.parse(seriesColor);\n            c.a = typeof fill == \"number\" ? fill : 0.4;\n            c.normalize();\n            return c.toString();\n        }\n\n        function insertLegend() {\n\n            placeholder.find(\".legend\").remove();\n\n            if (!options.legend.show)\n                return;\n\n            var fragments = [], entries = [], rowStarted = false,\n                lf = options.legend.labelFormatter, s, label;\n\n            // Build a list of legend entries, with each having a label and a color\n\n            for (var i = 0; i < series.length; ++i) {\n                s = series[i];\n                if (s.label) {\n                    label = lf ? lf(s.label, s) : s.label;\n                    if (label) {\n                        entries.push({\n                            label: label,\n                            color: s.color\n                        });\n                    }\n                }\n            }\n\n            // Sort the legend using either the default or a custom comparator\n\n            if (options.legend.sorted) {\n                if ($.isFunction(options.legend.sorted)) {\n                    entries.sort(options.legend.sorted);\n                } else if (options.legend.sorted == \"reverse\") {\n                \tentries.reverse();\n                } else {\n                    var ascending = options.legend.sorted != \"descending\";\n                    entries.sort(function(a, b) {\n                        return a.label == b.label ? 0 : (\n                            (a.label < b.label) != ascending ? 1 : -1   // Logical XOR\n                        );\n                    });\n                }\n            }\n\n            // Generate markup for the list of entries, in their final order\n\n            for (var i = 0; i < entries.length; ++i) {\n\n                var entry = entries[i];\n\n                if (i % options.legend.noColumns == 0) {\n                    if (rowStarted)\n                        fragments.push('</tr>');\n                    fragments.push('<tr>');\n                    rowStarted = true;\n                }\n\n                fragments.push(\n                    '<td class=\"legendColorBox\"><div style=\"border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px\"><div style=\"width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden\"></div></div></td>' +\n                    '<td class=\"legendLabel\">' + entry.label + '</td>'\n                );\n            }\n\n            if (rowStarted)\n                fragments.push('</tr>');\n\n            if (fragments.length == 0)\n                return;\n\n            var table = '<table style=\"font-size:smaller;color:' + options.grid.color + '\">' + fragments.join(\"\") + '</table>';\n            if (options.legend.container != null)\n                $(options.legend.container).html(table);\n            else {\n                var pos = \"\",\n                    p = options.legend.position,\n                    m = options.legend.margin;\n                if (m[0] == null)\n                    m = [m, m];\n                if (p.charAt(0) == \"n\")\n                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';\n                else if (p.charAt(0) == \"s\")\n                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';\n                if (p.charAt(1) == \"e\")\n                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';\n                else if (p.charAt(1) == \"w\")\n                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';\n                var legend = $('<div class=\"legend\">' + table.replace('style=\"', 'style=\"position:absolute;' + pos +';') + '</div>').appendTo(placeholder);\n                if (options.legend.backgroundOpacity != 0.0) {\n                    // put in the transparent background\n                    // separately to avoid blended labels and\n                    // label boxes\n                    var c = options.legend.backgroundColor;\n                    if (c == null) {\n                        c = options.grid.backgroundColor;\n                        if (c && typeof c == \"string\")\n                            c = $.color.parse(c);\n                        else\n                            c = $.color.extract(legend, 'background-color');\n                        c.a = 1;\n                        c = c.toString();\n                    }\n                    var div = legend.children();\n                    $('<div style=\"position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';\"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);\n                }\n            }\n        }\n\n\n        // interactive features\n\n        var highlights = [],\n            redrawTimeout = null;\n\n        // returns the data item the mouse is over, or null if none is found\n        function findNearbyItem(mouseX, mouseY, seriesFilter) {\n            var maxDistance = options.grid.mouseActiveRadius,\n                smallestDistance = maxDistance * maxDistance + 1,\n                item = null, foundPoint = false, i, j, ps;\n\n            for (i = series.length - 1; i >= 0; --i) {\n                if (!seriesFilter(series[i]))\n                    continue;\n\n                var s = series[i],\n                    axisx = s.xaxis,\n                    axisy = s.yaxis,\n                    points = s.datapoints.points,\n                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster\n                    my = axisy.c2p(mouseY),\n                    maxx = maxDistance / axisx.scale,\n                    maxy = maxDistance / axisy.scale;\n\n                ps = s.datapoints.pointsize;\n                // with inverse transforms, we can't use the maxx/maxy\n                // optimization, sadly\n                if (axisx.options.inverseTransform)\n                    maxx = Number.MAX_VALUE;\n                if (axisy.options.inverseTransform)\n                    maxy = Number.MAX_VALUE;\n\n                if (s.lines.show || s.points.show) {\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1];\n                        if (x == null)\n                            continue;\n\n                        // For points and lines, the cursor must be within a\n                        // certain distance to the data point\n                        if (x - mx > maxx || x - mx < -maxx ||\n                            y - my > maxy || y - my < -maxy)\n                            continue;\n\n                        // We have to calculate distances in pixels, not in\n                        // data units, because the scales of the axes may be different\n                        var dx = Math.abs(axisx.p2c(x) - mouseX),\n                            dy = Math.abs(axisy.p2c(y) - mouseY),\n                            dist = dx * dx + dy * dy; // we save the sqrt\n\n                        // use <= to ensure last point takes precedence\n                        // (last generally means on top of)\n                        if (dist < smallestDistance) {\n                            smallestDistance = dist;\n                            item = [i, j / ps];\n                        }\n                    }\n                }\n\n                if (s.bars.show && !item) { // no other point can be nearby\n                    var barLeft = s.bars.align == \"left\" ? 0 : -s.bars.barWidth/2,\n                        barRight = barLeft + s.bars.barWidth;\n\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1], b = points[j + 2];\n                        if (x == null)\n                            continue;\n\n                        // for a bar graph, the cursor must be inside the bar\n                        if (series[i].bars.horizontal ?\n                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&\n                             my >= y + barLeft && my <= y + barRight) :\n                            (mx >= x + barLeft && mx <= x + barRight &&\n                             my >= Math.min(b, y) && my <= Math.max(b, y)))\n                                item = [i, j / ps];\n                    }\n                }\n            }\n\n            if (item) {\n                i = item[0];\n                j = item[1];\n                ps = series[i].datapoints.pointsize;\n\n                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),\n                         dataIndex: j,\n                         series: series[i],\n                         seriesIndex: i };\n            }\n\n            return null;\n        }\n\n        function onMouseMove(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return s[\"hoverable\"] != false; });\n        }\n\n        function onMouseLeave(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return false; });\n        }\n\n        function onClick(e) {\n            triggerClickHoverEvent(\"plotclick\", e,\n                                   function (s) { return s[\"clickable\"] != false; });\n        }\n\n        // trigger click or hover event (they send the same parameters\n        // so we share their code)\n        function triggerClickHoverEvent(eventname, event, seriesFilter) {\n            var offset = eventHolder.offset(),\n                canvasX = event.pageX - offset.left - plotOffset.left,\n                canvasY = event.pageY - offset.top - plotOffset.top,\n            pos = canvasToAxisCoords({ left: canvasX, top: canvasY });\n\n            pos.pageX = event.pageX;\n            pos.pageY = event.pageY;\n\n            var item = findNearbyItem(canvasX, canvasY, seriesFilter);\n\n            if (item) {\n                // fill in mouse pos for any listeners out there\n                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);\n                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);\n            }\n\n            if (options.grid.autoHighlight) {\n                // clear auto-highlights\n                for (var i = 0; i < highlights.length; ++i) {\n                    var h = highlights[i];\n                    if (h.auto == eventname &&\n                        !(item && h.series == item.series &&\n                          h.point[0] == item.datapoint[0] &&\n                          h.point[1] == item.datapoint[1]))\n                        unhighlight(h.series, h.point);\n                }\n\n                if (item)\n                    highlight(item.series, item.datapoint, eventname);\n            }\n\n            placeholder.trigger(eventname, [ pos, item ]);\n        }\n\n        function triggerRedrawOverlay() {\n            var t = options.interaction.redrawOverlayInterval;\n            if (t == -1) {      // skip event queue\n                drawOverlay();\n                return;\n            }\n\n            if (!redrawTimeout)\n                redrawTimeout = setTimeout(drawOverlay, t);\n        }\n\n        function drawOverlay() {\n            redrawTimeout = null;\n\n            // draw highlights\n            octx.save();\n            overlay.clear();\n            octx.translate(plotOffset.left, plotOffset.top);\n\n            var i, hi;\n            for (i = 0; i < highlights.length; ++i) {\n                hi = highlights[i];\n\n                if (hi.series.bars.show)\n                    drawBarHighlight(hi.series, hi.point);\n                else\n                    drawPointHighlight(hi.series, hi.point);\n            }\n            octx.restore();\n\n            executeHooks(hooks.drawOverlay, [octx]);\n        }\n\n        function highlight(s, point, auto) {\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\") {\n                var ps = s.datapoints.pointsize;\n                point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n            }\n\n            var i = indexOfHighlight(s, point);\n            if (i == -1) {\n                highlights.push({ series: s, point: point, auto: auto });\n\n                triggerRedrawOverlay();\n            }\n            else if (!auto)\n                highlights[i].auto = false;\n        }\n\n        function unhighlight(s, point) {\n            if (s == null && point == null) {\n                highlights = [];\n                triggerRedrawOverlay();\n                return;\n            }\n\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\") {\n                var ps = s.datapoints.pointsize;\n                point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n            }\n\n            var i = indexOfHighlight(s, point);\n            if (i != -1) {\n                highlights.splice(i, 1);\n\n                triggerRedrawOverlay();\n            }\n        }\n\n        function indexOfHighlight(s, p) {\n            for (var i = 0; i < highlights.length; ++i) {\n                var h = highlights[i];\n                if (h.series == s && h.point[0] == p[0]\n                    && h.point[1] == p[1])\n                    return i;\n            }\n            return -1;\n        }\n\n        function drawPointHighlight(series, point) {\n            var x = point[0], y = point[1],\n                axisx = series.xaxis, axisy = series.yaxis,\n                highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();\n\n            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                return;\n\n            var pointRadius = series.points.radius + series.points.lineWidth / 2;\n            octx.lineWidth = pointRadius;\n            octx.strokeStyle = highlightColor;\n            var radius = 1.5 * pointRadius;\n            x = axisx.p2c(x);\n            y = axisy.p2c(y);\n\n            octx.beginPath();\n            if (series.points.symbol == \"circle\")\n                octx.arc(x, y, radius, 0, 2 * Math.PI, false);\n            else\n                series.points.symbol(octx, x, y, radius, false);\n            octx.closePath();\n            octx.stroke();\n        }\n\n        function drawBarHighlight(series, point) {\n            var highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),\n                fillStyle = highlightColor,\n                barLeft = series.bars.align == \"left\" ? 0 : -series.bars.barWidth/2;\n\n            octx.lineWidth = series.bars.lineWidth;\n            octx.strokeStyle = highlightColor;\n\n            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,\n                    0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);\n        }\n\n        function getColorOrGradient(spec, bottom, top, defaultColor) {\n            if (typeof spec == \"string\")\n                return spec;\n            else {\n                // assume this is a gradient spec; IE currently only\n                // supports a simple vertical gradient properly, so that's\n                // what we support too\n                var gradient = ctx.createLinearGradient(0, top, 0, bottom);\n\n                for (var i = 0, l = spec.colors.length; i < l; ++i) {\n                    var c = spec.colors[i];\n                    if (typeof c != \"string\") {\n                        var co = $.color.parse(defaultColor);\n                        if (c.brightness != null)\n                            co = co.scale('rgb', c.brightness);\n                        if (c.opacity != null)\n                            co.a *= c.opacity;\n                        c = co.toString();\n                    }\n                    gradient.addColorStop(i / (l - 1), c);\n                }\n\n                return gradient;\n            }\n        }\n    }\n\n    // Add the plot function to the top level of the jQuery object\n\n    $.plot = function(placeholder, data, options) {\n        //var t0 = new Date();\n        var plot = new Plot($(placeholder), data, options, $.plot.plugins);\n        //(window.console ? console.log : alert)(\"time used (msecs): \" + ((new Date()).getTime() - t0.getTime()));\n        return plot;\n    };\n\n    $.plot.version = \"0.8.2-alpha\";\n\n    $.plot.plugins = [];\n\n    // Also add the plot function as a chainable property\n\n    $.fn.plot = function(data, options) {\n        return this.each(function() {\n            $.plot(this, data, options);\n        });\n    };\n\n    // round to nearby lower multiple of base\n    function floorInBase(n, base) {\n        return base * Math.floor(n / base);\n    }\n\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.navigate.js",
    "content": "/* Flot plugin for adding the ability to pan and zoom the plot.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe default behaviour is double click and scrollwheel up/down to zoom in, drag\nto pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and\nplot.pan( offset ) so you easily can add custom controls. It also fires\n\"plotpan\" and \"plotzoom\" events, useful for synchronizing plots.\n\nThe plugin supports these options:\n\n\tzoom: {\n\t\tinteractive: false\n\t\ttrigger: \"dblclick\" // or \"click\" for single click\n\t\tamount: 1.5         // 2 = 200% (zoom in), 0.5 = 50% (zoom out)\n\t}\n\n\tpan: {\n\t\tinteractive: false\n\t\tcursor: \"move\"      // CSS mouse cursor value used when dragging, e.g. \"pointer\"\n\t\tframeRate: 20\n\t}\n\n\txaxis, yaxis, x2axis, y2axis: {\n\t\tzoomRange: null  // or [ number, number ] (min range, max range) or false\n\t\tpanRange: null   // or [ number, number ] (min, max) or false\n\t}\n\n\"interactive\" enables the built-in drag/click behaviour. If you enable\ninteractive for pan, then you'll have a basic plot that supports moving\naround; the same for zoom.\n\n\"amount\" specifies the default amount to zoom in (so 1.5 = 150%) relative to\nthe current viewport.\n\n\"cursor\" is a standard CSS mouse cursor string used for visual feedback to the\nuser when dragging.\n\n\"frameRate\" specifies the maximum number of times per second the plot will\nupdate itself while the user is panning around on it (set to null to disable\nintermediate pans, the plot will then not update until the mouse button is\nreleased).\n\n\"zoomRange\" is the interval in which zooming can happen, e.g. with zoomRange:\n[1, 100] the zoom will never scale the axis so that the difference between min\nand max is smaller than 1 or larger than 100. You can set either end to null\nto ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis\nwill be disabled.\n\n\"panRange\" confines the panning to stay within a range, e.g. with panRange:\n[-10, 20] panning stops at -10 in one end and at 20 in the other. Either can\nbe null, e.g. [-10, null]. If you set panRange to false, panning on that axis\nwill be disabled.\n\nExample API usage:\n\n\tplot = $.plot(...);\n\n\t// zoom default amount in on the pixel ( 10, 20 )\n\tplot.zoom({ center: { left: 10, top: 20 } });\n\n\t// zoom out again\n\tplot.zoomOut({ center: { left: 10, top: 20 } });\n\n\t// zoom 200% in on the pixel (10, 20)\n\tplot.zoom({ amount: 2, center: { left: 10, top: 20 } });\n\n\t// pan 100 pixels to the left and 20 down\n\tplot.pan({ left: -100, top: 20 })\n\nHere, \"center\" specifies where the center of the zooming should happen. Note\nthat this is defined in pixel space, not the space of the data points (you can\nuse the p2c helpers on the axes in Flot to help you convert between these).\n\n\"amount\" is the amount to zoom the viewport relative to the current range, so\n1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You\ncan set the default in the options.\n\n*/\n\n// First two dependencies, jquery.event.drag.js and\n// jquery.mousewheel.js, we put them inline here to save people the\n// effort of downloading them.\n\n/*\njquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)\nLicensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt\n*/\n(function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case\"mousedown\":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,\"mousemove mouseup\",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&\"mousemove\":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,\"dragstart\",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case\"mousemove\":if(d.dragging){if(k=f(h,\"drag\",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type=\"mouseup\"}case\"mouseup\":b.remove(document,\"mousemove mouseup\",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,\"dragend\",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?\"off\":\"on\",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?\"\":\"none\"))}a.fn.drag=function(a,b,c){return b&&this.bind(\"dragstart\",a),c&&this.bind(\"dragend\",c),a?this.bind(\"drag\",b?b:a):this.trigger(\"drag\")};var b=a.event,c=b.special,d=c.drag={not:\":input\",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,\"mousedown\",e,c),this.attachEvent&&this.attachEvent(\"ondragstart\",h)},teardown:function(){b.remove(this,\"mousedown\",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent(\"ondragstart\",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery);\n\n/* jquery.mousewheel.min.js\n * Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)\n * Licensed under the MIT License (LICENSE.txt).\n * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.\n * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.\n * Thanks to: Seamus Leahy for adding deltaX and deltaY\n *\n * Version: 3.0.6\n *\n * Requires: 1.2.2+\n */\n(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type=\"mousewheel\";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=[\"DOMMouseScroll\",\"mousewheel\"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})})(jQuery);\n\n\n\n\n(function ($) {\n    var options = {\n        xaxis: {\n            zoomRange: null, // or [number, number] (min range, max range)\n            panRange: null // or [number, number] (min, max)\n        },\n        zoom: {\n            interactive: false,\n            trigger: \"dblclick\", // or \"click\" for single click\n            amount: 1.5 // how much to zoom relative to current position, 2 = 200% (zoom in), 0.5 = 50% (zoom out)\n        },\n        pan: {\n            interactive: false,\n            cursor: \"move\",\n            frameRate: 20\n        }\n    };\n\n    function init(plot) {\n        function onZoomClick(e, zoomOut) {\n            var c = plot.offset();\n            c.left = e.pageX - c.left;\n            c.top = e.pageY - c.top;\n            if (zoomOut)\n                plot.zoomOut({ center: c });\n            else\n                plot.zoom({ center: c });\n        }\n\n        function onMouseWheel(e, delta) {\n            e.preventDefault();\n            onZoomClick(e, delta < 0);\n            return false;\n        }\n        \n        var prevCursor = 'default', prevPageX = 0, prevPageY = 0,\n            panTimeout = null;\n\n        function onDragStart(e) {\n            if (e.which != 1)  // only accept left-click\n                return false;\n            var c = plot.getPlaceholder().css('cursor');\n            if (c)\n                prevCursor = c;\n            plot.getPlaceholder().css('cursor', plot.getOptions().pan.cursor);\n            prevPageX = e.pageX;\n            prevPageY = e.pageY;\n        }\n        \n        function onDrag(e) {\n            var frameRate = plot.getOptions().pan.frameRate;\n            if (panTimeout || !frameRate)\n                return;\n\n            panTimeout = setTimeout(function () {\n                plot.pan({ left: prevPageX - e.pageX,\n                           top: prevPageY - e.pageY });\n                prevPageX = e.pageX;\n                prevPageY = e.pageY;\n                                                    \n                panTimeout = null;\n            }, 1 / frameRate * 1000);\n        }\n\n        function onDragEnd(e) {\n            if (panTimeout) {\n                clearTimeout(panTimeout);\n                panTimeout = null;\n            }\n                    \n            plot.getPlaceholder().css('cursor', prevCursor);\n            plot.pan({ left: prevPageX - e.pageX,\n                       top: prevPageY - e.pageY });\n        }\n        \n        function bindEvents(plot, eventHolder) {\n            var o = plot.getOptions();\n            if (o.zoom.interactive) {\n                eventHolder[o.zoom.trigger](onZoomClick);\n                eventHolder.mousewheel(onMouseWheel);\n            }\n\n            if (o.pan.interactive) {\n                eventHolder.bind(\"dragstart\", { distance: 10 }, onDragStart);\n                eventHolder.bind(\"drag\", onDrag);\n                eventHolder.bind(\"dragend\", onDragEnd);\n            }\n        }\n\n        plot.zoomOut = function (args) {\n            if (!args)\n                args = {};\n            \n            if (!args.amount)\n                args.amount = plot.getOptions().zoom.amount;\n\n            args.amount = 1 / args.amount;\n            plot.zoom(args);\n        };\n        \n        plot.zoom = function (args) {\n            if (!args)\n                args = {};\n            \n            var c = args.center,\n                amount = args.amount || plot.getOptions().zoom.amount,\n                w = plot.width(), h = plot.height();\n\n            if (!c)\n                c = { left: w / 2, top: h / 2 };\n                \n            var xf = c.left / w,\n                yf = c.top / h,\n                minmax = {\n                    x: {\n                        min: c.left - xf * w / amount,\n                        max: c.left + (1 - xf) * w / amount\n                    },\n                    y: {\n                        min: c.top - yf * h / amount,\n                        max: c.top + (1 - yf) * h / amount\n                    }\n                };\n\n            $.each(plot.getAxes(), function(_, axis) {\n                var opts = axis.options,\n                    min = minmax[axis.direction].min,\n                    max = minmax[axis.direction].max,\n                    zr = opts.zoomRange,\n                    pr = opts.panRange;\n\n                if (zr === false) // no zooming on this axis\n                    return;\n                    \n                min = axis.c2p(min);\n                max = axis.c2p(max);\n                if (min > max) {\n                    // make sure min < max\n                    var tmp = min;\n                    min = max;\n                    max = tmp;\n                }\n\n                //Check that we are in panRange\n                if (pr) {\n                    if (pr[0] != null && min < pr[0]) {\n                        min = pr[0];\n                    }\n                    if (pr[1] != null && max > pr[1]) {\n                        max = pr[1];\n                    }\n                }\n\n                var range = max - min;\n                if (zr &&\n                    ((zr[0] != null && range < zr[0]) ||\n                     (zr[1] != null && range > zr[1])))\n                    return;\n            \n                opts.min = min;\n                opts.max = max;\n            });\n            \n            plot.setupGrid();\n            plot.draw();\n            \n            if (!args.preventEvent)\n                plot.getPlaceholder().trigger(\"plotzoom\", [ plot, args ]);\n        };\n\n        plot.pan = function (args) {\n            var delta = {\n                x: +args.left,\n                y: +args.top\n            };\n\n            if (isNaN(delta.x))\n                delta.x = 0;\n            if (isNaN(delta.y))\n                delta.y = 0;\n\n            $.each(plot.getAxes(), function (_, axis) {\n                var opts = axis.options,\n                    min, max, d = delta[axis.direction];\n\n                min = axis.c2p(axis.p2c(axis.min) + d),\n                max = axis.c2p(axis.p2c(axis.max) + d);\n\n                var pr = opts.panRange;\n                if (pr === false) // no panning on this axis\n                    return;\n                \n                if (pr) {\n                    // check whether we hit the wall\n                    if (pr[0] != null && pr[0] > min) {\n                        d = pr[0] - min;\n                        min += d;\n                        max += d;\n                    }\n                    \n                    if (pr[1] != null && pr[1] < max) {\n                        d = pr[1] - max;\n                        min += d;\n                        max += d;\n                    }\n                }\n                \n                opts.min = min;\n                opts.max = max;\n            });\n            \n            plot.setupGrid();\n            plot.draw();\n            \n            if (!args.preventEvent)\n                plot.getPlaceholder().trigger(\"plotpan\", [ plot, args ]);\n        };\n\n        function shutdown(plot, eventHolder) {\n            eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick);\n            eventHolder.unbind(\"mousewheel\", onMouseWheel);\n            eventHolder.unbind(\"dragstart\", onDragStart);\n            eventHolder.unbind(\"drag\", onDrag);\n            eventHolder.unbind(\"dragend\", onDragEnd);\n            if (panTimeout)\n                clearTimeout(panTimeout);\n        }\n        \n        plot.hooks.bindEvents.push(bindEvents);\n        plot.hooks.shutdown.push(shutdown);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'navigate',\n        version: '1.3'\n    });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.pie.js",
    "content": "/* Flot plugin for rendering pie charts.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin assumes that each series has a single data value, and that each\nvalue is a positive integer or zero.  Negative numbers don't make sense for a\npie chart, and have unpredictable results.  The values do NOT need to be\npassed in as percentages; the plugin will calculate the total and per-slice\npercentages internally.\n\n* Created by Brian Medendorp\n\n* Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tpie: {\n\t\t\tshow: true/false\n\t\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto'\n\t\t\tinnerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect\n\t\t\tstartAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result\n\t\t\ttilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show)\n\t\t\toffset: {\n\t\t\t\ttop: integer value to move the pie up or down\n\t\t\t\tleft: integer value to move the pie left or right, or 'auto'\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF')\n\t\t\t\twidth: integer pixel width of the stroke\n\t\t\t},\n\t\t\tlabel: {\n\t\t\t\tshow: true/false, or 'auto'\n\t\t\t\tformatter:  a user-defined function that modifies the text/style of the label text\n\t\t\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length\n\t\t\t\tbackground: {\n\t\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000')\n\t\t\t\t\topacity: 0-1\n\t\t\t\t},\n\t\t\t\tthreshold: 0-1 for the percentage value at which to hide labels (if they're too small)\n\t\t\t},\n\t\t\tcombine: {\n\t\t\t\tthreshold: 0-1 for the percentage value at which to combine slices (if they're too small)\n\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined\n\t\t\t\tlabel: any text value of what the combined slice should be labeled\n\t\t\t}\n\t\t\thighlight: {\n\t\t\t\topacity: 0-1\n\t\t\t}\n\t\t}\n\t}\n\nMore detail and specific examples can be found in the included HTML file.\n\n*/\n\n(function($) {\n\n\t// Maximum redraw attempts when fitting labels within the plot\n\n\tvar REDRAW_ATTEMPTS = 10;\n\n\t// Factor by which to shrink the pie when fitting labels within the plot\n\n\tvar REDRAW_SHRINK = 0.95;\n\n\tfunction init(plot) {\n\n\t\tvar canvas = null,\n\t\t\ttarget = null,\n\t\t\tmaxRadius = null,\n\t\t\tcenterLeft = null,\n\t\t\tcenterTop = null,\n\t\t\tprocessed = false,\n\t\t\tctx = null;\n\n\t\t// interactive variables\n\n\t\tvar highlights = [];\n\n\t\t// add hook to determine if pie plugin in enabled, and then perform necessary operations\n\n\t\tplot.hooks.processOptions.push(function(plot, options) {\n\t\t\tif (options.series.pie.show) {\n\n\t\t\t\toptions.grid.show = false;\n\n\t\t\t\t// set labels.show\n\n\t\t\t\tif (options.series.pie.label.show == \"auto\") {\n\t\t\t\t\tif (options.legend.show) {\n\t\t\t\t\t\toptions.series.pie.label.show = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.series.pie.label.show = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// set radius\n\n\t\t\t\tif (options.series.pie.radius == \"auto\") {\n\t\t\t\t\tif (options.series.pie.label.show) {\n\t\t\t\t\t\toptions.series.pie.radius = 3/4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.series.pie.radius = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// ensure sane tilt\n\n\t\t\t\tif (options.series.pie.tilt > 1) {\n\t\t\t\t\toptions.series.pie.tilt = 1;\n\t\t\t\t} else if (options.series.pie.tilt < 0) {\n\t\t\t\t\toptions.series.pie.tilt = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.bindEvents.push(function(plot, eventHolder) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tif (options.grid.hoverable) {\n\t\t\t\t\teventHolder.unbind(\"mousemove\").mousemove(onMouseMove);\n\t\t\t\t}\n\t\t\t\tif (options.grid.clickable) {\n\t\t\t\t\teventHolder.unbind(\"click\").click(onClick);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.processDatapoints.push(function(plot, series, data, datapoints) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tprocessDatapoints(plot, series, data, datapoints);\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.drawOverlay.push(function(plot, octx) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tdrawOverlay(plot, octx);\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.draw.push(function(plot, newCtx) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tdraw(plot, newCtx);\n\t\t\t}\n\t\t});\n\n\t\tfunction processDatapoints(plot, series, datapoints) {\n\t\t\tif (!processed)\t{\n\t\t\t\tprocessed = true;\n\t\t\t\tcanvas = plot.getCanvas();\n\t\t\t\ttarget = $(canvas).parent();\n\t\t\t\toptions = plot.getOptions();\n\t\t\t\tplot.setData(combine(plot.getData()));\n\t\t\t}\n\t\t}\n\n\t\tfunction combine(data) {\n\n\t\t\tvar total = 0,\n\t\t\t\tcombined = 0,\n\t\t\t\tnumCombined = 0,\n\t\t\t\tcolor = options.series.pie.combine.color,\n\t\t\t\tnewdata = [];\n\n\t\t\t// Fix up the raw data from Flot, ensuring the data is numeric\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\n\t\t\t\tvar value = data[i].data;\n\n\t\t\t\t// If the data is an array, we'll assume that it's a standard\n\t\t\t\t// Flot x-y pair, and are concerned only with the second value.\n\n\t\t\t\t// Note how we use the original array, rather than creating a\n\t\t\t\t// new one; this is more efficient and preserves any extra data\n\t\t\t\t// that the user may have stored in higher indexes.\n\n\t\t\t\tif ($.isArray(value) && value.length == 1) {\n    \t\t\t\tvalue = value[0];\n\t\t\t\t}\n\n\t\t\t\tif ($.isArray(value)) {\n\t\t\t\t\t// Equivalent to $.isNumeric() but compatible with jQuery < 1.7\n\t\t\t\t\tif (!isNaN(parseFloat(value[1])) && isFinite(value[1])) {\n\t\t\t\t\t\tvalue[1] = +value[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue[1] = 0;\n\t\t\t\t\t}\n\t\t\t\t} else if (!isNaN(parseFloat(value)) && isFinite(value)) {\n\t\t\t\t\tvalue = [1, +value];\n\t\t\t\t} else {\n\t\t\t\t\tvalue = [1, 0];\n\t\t\t\t}\n\n\t\t\t\tdata[i].data = [value];\n\t\t\t}\n\n\t\t\t// Sum up all the slices, so we can calculate percentages for each\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\ttotal += data[i].data[0][1];\n\t\t\t}\n\n\t\t\t// Count the number of slices with percentages below the combine\n\t\t\t// threshold; if it turns out to be just one, we won't combine.\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\tvar value = data[i].data[0][1];\n\t\t\t\tif (value / total <= options.series.pie.combine.threshold) {\n\t\t\t\t\tcombined += value;\n\t\t\t\t\tnumCombined++;\n\t\t\t\t\tif (!color) {\n\t\t\t\t\t\tcolor = data[i].color;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\tvar value = data[i].data[0][1];\n\t\t\t\tif (numCombined < 2 || value / total > options.series.pie.combine.threshold) {\n\t\t\t\t\tnewdata.push({\n\t\t\t\t\t\tdata: [[1, value]],\n\t\t\t\t\t\tcolor: data[i].color,\n\t\t\t\t\t\tlabel: data[i].label,\n\t\t\t\t\t\tangle: value * Math.PI * 2 / total,\n\t\t\t\t\t\tpercent: value / (total / 100)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (numCombined > 1) {\n\t\t\t\tnewdata.push({\n\t\t\t\t\tdata: [[1, combined]],\n\t\t\t\t\tcolor: color,\n\t\t\t\t\tlabel: options.series.pie.combine.label,\n\t\t\t\t\tangle: combined * Math.PI * 2 / total,\n\t\t\t\t\tpercent: combined / (total / 100)\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn newdata;\n\t\t}\n\n\t\tfunction draw(plot, newCtx) {\n\n\t\t\tif (!target) {\n\t\t\t\treturn; // if no series were passed\n\t\t\t}\n\n\t\t\tvar canvasWidth = plot.getPlaceholder().width(),\n\t\t\t\tcanvasHeight = plot.getPlaceholder().height(),\n\t\t\t\tlegendWidth = target.children().filter(\".legend\").children().width() || 0;\n\n\t\t\tctx = newCtx;\n\n\t\t\t// WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE!\n\n\t\t\t// When combining smaller slices into an 'other' slice, we need to\n\t\t\t// add a new series.  Since Flot gives plugins no way to modify the\n\t\t\t// list of series, the pie plugin uses a hack where the first call\n\t\t\t// to processDatapoints results in a call to setData with the new\n\t\t\t// list of series, then subsequent processDatapoints do nothing.\n\n\t\t\t// The plugin-global 'processed' flag is used to control this hack;\n\t\t\t// it starts out false, and is set to true after the first call to\n\t\t\t// processDatapoints.\n\n\t\t\t// Unfortunately this turns future setData calls into no-ops; they\n\t\t\t// call processDatapoints, the flag is true, and nothing happens.\n\n\t\t\t// To fix this we'll set the flag back to false here in draw, when\n\t\t\t// all series have been processed, so the next sequence of calls to\n\t\t\t// processDatapoints once again starts out with a slice-combine.\n\t\t\t// This is really a hack; in 0.9 we need to give plugins a proper\n\t\t\t// way to modify series before any processing begins.\n\n\t\t\tprocessed = false;\n\n\t\t\t// calculate maximum radius and center point\n\n\t\t\tmaxRadius =  Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2;\n\t\t\tcenterTop = canvasHeight / 2 + options.series.pie.offset.top;\n\t\t\tcenterLeft = canvasWidth / 2;\n\n\t\t\tif (options.series.pie.offset.left == \"auto\") {\n\t\t\t\tif (options.legend.position.match(\"w\")) {\n\t\t\t\t\tcenterLeft += legendWidth / 2;\n\t\t\t\t} else {\n\t\t\t\t\tcenterLeft -= legendWidth / 2;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcenterLeft += options.series.pie.offset.left;\n\t\t\t}\n\n\t\t\tif (centerLeft < maxRadius) {\n\t\t\t\tcenterLeft = maxRadius;\n\t\t\t} else if (centerLeft > canvasWidth - maxRadius) {\n\t\t\t\tcenterLeft = canvasWidth - maxRadius;\n\t\t\t}\n\n\t\t\tvar slices = plot.getData(),\n\t\t\t\tattempts = 0;\n\n\t\t\t// Keep shrinking the pie's radius until drawPie returns true,\n\t\t\t// indicating that all the labels fit, or we try too many times.\n\n\t\t\tdo {\n\t\t\t\tif (attempts > 0) {\n\t\t\t\t\tmaxRadius *= REDRAW_SHRINK;\n\t\t\t\t}\n\t\t\t\tattempts += 1;\n\t\t\t\tclear();\n\t\t\t\tif (options.series.pie.tilt <= 0.8) {\n\t\t\t\t\tdrawShadow();\n\t\t\t\t}\n\t\t\t} while (!drawPie() && attempts < REDRAW_ATTEMPTS)\n\n\t\t\tif (attempts >= REDRAW_ATTEMPTS) {\n\t\t\t\tclear();\n\t\t\t\ttarget.prepend(\"<div class='error'>Could not draw pie with labels contained inside canvas</div>\");\n\t\t\t}\n\n\t\t\tif (plot.setSeries && plot.insertLegend) {\n\t\t\t\tplot.setSeries(slices);\n\t\t\t\tplot.insertLegend();\n\t\t\t}\n\n\t\t\t// we're actually done at this point, just defining internal functions at this point\n\n\t\t\tfunction clear() {\n\t\t\t\tctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\t\t\t\ttarget.children().filter(\".pieLabel, .pieLabelBackground\").remove();\n\t\t\t}\n\n\t\t\tfunction drawShadow() {\n\n\t\t\t\tvar shadowLeft = options.series.pie.shadow.left;\n\t\t\t\tvar shadowTop = options.series.pie.shadow.top;\n\t\t\t\tvar edge = 10;\n\t\t\t\tvar alpha = options.series.pie.shadow.alpha;\n\t\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\t\tif (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) {\n\t\t\t\t\treturn;\t// shadow would be outside canvas, so don't draw it\n\t\t\t\t}\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(shadowLeft,shadowTop);\n\t\t\t\tctx.globalAlpha = alpha;\n\t\t\t\tctx.fillStyle = \"#000\";\n\n\t\t\t\t// center and rotate to starting position\n\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\n\t\t\t\t//radius -= edge;\n\n\t\t\t\tfor (var i = 1; i <= edge; i++) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, false);\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tradius -= i;\n\t\t\t\t}\n\n\t\t\t\tctx.restore();\n\t\t\t}\n\n\t\t\tfunction drawPie() {\n\n\t\t\t\tvar startAngle = Math.PI * options.series.pie.startAngle;\n\t\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\t\t// center and rotate to starting position\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\t\t\t\t//ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera\n\n\t\t\t\t// draw slices\n\n\t\t\t\tctx.save();\n\t\t\t\tvar currentAngle = startAngle;\n\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\tslices[i].startAngle = currentAngle;\n\t\t\t\t\tdrawSlice(slices[i].angle, slices[i].color, true);\n\t\t\t\t}\n\t\t\t\tctx.restore();\n\n\t\t\t\t// draw slice outlines\n\n\t\t\t\tif (options.series.pie.stroke.width > 0) {\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.lineWidth = options.series.pie.stroke.width;\n\t\t\t\t\tcurrentAngle = startAngle;\n\t\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\t\tdrawSlice(slices[i].angle, options.series.pie.stroke.color, false);\n\t\t\t\t\t}\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\n\t\t\t\t// draw donut hole\n\n\t\t\t\tdrawDonutHole(ctx);\n\n\t\t\t\tctx.restore();\n\n\t\t\t\t// Draw the labels, returning true if they fit within the plot\n\n\t\t\t\tif (options.series.pie.label.show) {\n\t\t\t\t\treturn drawLabels();\n\t\t\t\t} else return true;\n\n\t\t\t\tfunction drawSlice(angle, color, fill) {\n\n\t\t\t\t\tif (angle <= 0 || isNaN(angle)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fill) {\n\t\t\t\t\t\tctx.fillStyle = color;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.strokeStyle = color;\n\t\t\t\t\t\tctx.lineJoin = \"round\";\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tif (Math.abs(angle - Math.PI * 2) > 0.000000001) {\n\t\t\t\t\t\tctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t\t}\n\n\t\t\t\t\t//ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera\n\t\t\t\t\tctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false);\n\t\t\t\t\tctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\t//ctx.rotate(angle); // This doesn't work properly in Opera\n\t\t\t\t\tcurrentAngle += angle;\n\n\t\t\t\t\tif (fill) {\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction drawLabels() {\n\n\t\t\t\t\tvar currentAngle = startAngle;\n\t\t\t\t\tvar radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius;\n\n\t\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\t\tif (slices[i].percent >= options.series.pie.label.threshold * 100) {\n\t\t\t\t\t\t\tif (!drawLabel(slices[i], currentAngle, i)) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentAngle += slices[i].angle;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t\tfunction drawLabel(slice, startAngle, index) {\n\n\t\t\t\t\t\tif (slice.data[0][1] == 0) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// format label text\n\n\t\t\t\t\t\tvar lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter;\n\n\t\t\t\t\t\tif (lf) {\n\t\t\t\t\t\t\ttext = lf(slice.label, slice);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttext = slice.label;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (plf) {\n\t\t\t\t\t\t\ttext = plf(text, slice);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar halfAngle = ((startAngle + slice.angle) + startAngle) / 2;\n\t\t\t\t\t\tvar x = centerLeft + Math.round(Math.cos(halfAngle) * radius);\n\t\t\t\t\t\tvar y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt;\n\n\t\t\t\t\t\tvar html = \"<span class='pieLabel' id='pieLabel\" + index + \"' style='position:absolute;top:\" + y + \"px;left:\" + x + \"px;'>\" + text + \"</span>\";\n\t\t\t\t\t\ttarget.append(html);\n\n\t\t\t\t\t\tvar label = target.children(\"#pieLabel\" + index);\n\t\t\t\t\t\tvar labelTop = (y - label.height() / 2);\n\t\t\t\t\t\tvar labelLeft = (x - label.width() / 2);\n\n\t\t\t\t\t\tlabel.css(\"top\", labelTop);\n\t\t\t\t\t\tlabel.css(\"left\", labelLeft);\n\n\t\t\t\t\t\t// check to make sure that the label is not outside the canvas\n\n\t\t\t\t\t\tif (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.series.pie.label.background.opacity != 0) {\n\n\t\t\t\t\t\t\t// put in the transparent background separately to avoid blended labels and label boxes\n\n\t\t\t\t\t\t\tvar c = options.series.pie.label.background.color;\n\n\t\t\t\t\t\t\tif (c == null) {\n\t\t\t\t\t\t\t\tc = slice.color;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar pos = \"top:\" + labelTop + \"px;left:\" + labelLeft + \"px;\";\n\t\t\t\t\t\t\t$(\"<div class='pieLabelBackground' style='position:absolute;width:\" + label.width() + \"px;height:\" + label.height() + \"px;\" + pos + \"background-color:\" + c + \";'></div>\")\n\t\t\t\t\t\t\t\t.css(\"opacity\", options.series.pie.label.background.opacity)\n\t\t\t\t\t\t\t\t.insertBefore(label);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} // end individual label function\n\t\t\t\t} // end drawLabels function\n\t\t\t} // end drawPie function\n\t\t} // end draw function\n\n\t\t// Placed here because it needs to be accessed from multiple locations\n\n\t\tfunction drawDonutHole(layer) {\n\t\t\tif (options.series.pie.innerRadius > 0) {\n\n\t\t\t\t// subtract the center\n\n\t\t\t\tlayer.save();\n\t\t\t\tvar innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius;\n\t\t\t\tlayer.globalCompositeOperation = \"destination-out\"; // this does not work with excanvas, but it will fall back to using the stroke color\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.fillStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);\n\t\t\t\tlayer.fill();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\n\t\t\t\t// add inner stroke\n\n\t\t\t\tlayer.save();\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.strokeStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);\n\t\t\t\tlayer.stroke();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\n\t\t\t\t// TODO: add extra shadow inside hole (with a mask) if the pie is tilted.\n\t\t\t}\n\t\t}\n\n\t\t//-- Additional Interactive related functions --\n\n\t\tfunction isPointInPoly(poly, pt) {\n\t\t\tfor(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)\n\t\t\t\t((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1]))\n\t\t\t\t&& (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0])\n\t\t\t\t&& (c = !c);\n\t\t\treturn c;\n\t\t}\n\n\t\tfunction findNearbySlice(mouseX, mouseY) {\n\n\t\t\tvar slices = plot.getData(),\n\t\t\t\toptions = plot.getOptions(),\n\t\t\t\tradius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius,\n\t\t\t\tx, y;\n\n\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\n\t\t\t\tvar s = slices[i];\n\n\t\t\t\tif (s.pie.show) {\n\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t\t//ctx.scale(1, options.series.pie.tilt);\t// this actually seems to break everything when here.\n\t\t\t\t\tctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false);\n\t\t\t\t\tctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tx = mouseX - centerLeft;\n\t\t\t\t\ty = mouseY - centerTop;\n\n\t\t\t\t\tif (ctx.isPointInPath) {\n\t\t\t\t\t\tif (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) {\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdatapoint: [s.percent, s.data],\n\t\t\t\t\t\t\t\tdataIndex: 0,\n\t\t\t\t\t\t\t\tseries: s,\n\t\t\t\t\t\t\t\tseriesIndex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// excanvas for IE doesn;t support isPointInPath, this is a workaround.\n\n\t\t\t\t\t\tvar p1X = radius * Math.cos(s.startAngle),\n\t\t\t\t\t\t\tp1Y = radius * Math.sin(s.startAngle),\n\t\t\t\t\t\t\tp2X = radius * Math.cos(s.startAngle + s.angle / 4),\n\t\t\t\t\t\t\tp2Y = radius * Math.sin(s.startAngle + s.angle / 4),\n\t\t\t\t\t\t\tp3X = radius * Math.cos(s.startAngle + s.angle / 2),\n\t\t\t\t\t\t\tp3Y = radius * Math.sin(s.startAngle + s.angle / 2),\n\t\t\t\t\t\t\tp4X = radius * Math.cos(s.startAngle + s.angle / 1.5),\n\t\t\t\t\t\t\tp4Y = radius * Math.sin(s.startAngle + s.angle / 1.5),\n\t\t\t\t\t\t\tp5X = radius * Math.cos(s.startAngle + s.angle),\n\t\t\t\t\t\t\tp5Y = radius * Math.sin(s.startAngle + s.angle),\n\t\t\t\t\t\t\tarrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]],\n\t\t\t\t\t\t\tarrPoint = [x, y];\n\n\t\t\t\t\t\t// TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt?\n\n\t\t\t\t\t\tif (isPointInPoly(arrPoly, arrPoint)) {\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdatapoint: [s.percent, s.data],\n\t\t\t\t\t\t\t\tdataIndex: 0,\n\t\t\t\t\t\t\t\tseries: s,\n\t\t\t\t\t\t\t\tseriesIndex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction onMouseMove(e) {\n\t\t\ttriggerClickHoverEvent(\"plothover\", e);\n\t\t}\n\n\t\tfunction onClick(e) {\n\t\t\ttriggerClickHoverEvent(\"plotclick\", e);\n\t\t}\n\n\t\t// trigger click or hover event (they send the same parameters so we share their code)\n\n\t\tfunction triggerClickHoverEvent(eventname, e) {\n\n\t\t\tvar offset = plot.offset();\n\t\t\tvar canvasX = parseInt(e.pageX - offset.left);\n\t\t\tvar canvasY =  parseInt(e.pageY - offset.top);\n\t\t\tvar item = findNearbySlice(canvasX, canvasY);\n\n\t\t\tif (options.grid.autoHighlight) {\n\n\t\t\t\t// clear auto-highlights\n\n\t\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\t\tvar h = highlights[i];\n\t\t\t\t\tif (h.auto == eventname && !(item && h.series == item.series)) {\n\t\t\t\t\t\tunhighlight(h.series);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// highlight the slice\n\n\t\t\tif (item) {\n\t\t\t\thighlight(item.series, eventname);\n\t\t\t}\n\n\t\t\t// trigger any hover bind events\n\n\t\t\tvar pos = { pageX: e.pageX, pageY: e.pageY };\n\t\t\ttarget.trigger(eventname, [pos, item]);\n\t\t}\n\n\t\tfunction highlight(s, auto) {\n\t\t\t//if (typeof s == \"number\") {\n\t\t\t//\ts = series[s];\n\t\t\t//}\n\n\t\t\tvar i = indexOfHighlight(s);\n\n\t\t\tif (i == -1) {\n\t\t\t\thighlights.push({ series: s, auto: auto });\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t} else if (!auto) {\n\t\t\t\thighlights[i].auto = false;\n\t\t\t}\n\t\t}\n\n\t\tfunction unhighlight(s) {\n\t\t\tif (s == null) {\n\t\t\t\thighlights = [];\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\n\t\t\t//if (typeof s == \"number\") {\n\t\t\t//\ts = series[s];\n\t\t\t//}\n\n\t\t\tvar i = indexOfHighlight(s);\n\n\t\t\tif (i != -1) {\n\t\t\t\thighlights.splice(i, 1);\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\t\t}\n\n\t\tfunction indexOfHighlight(s) {\n\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\tvar h = highlights[i];\n\t\t\t\tif (h.series == s)\n\t\t\t\t\treturn i;\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\n\t\tfunction drawOverlay(plot, octx) {\n\n\t\t\tvar options = plot.getOptions();\n\n\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\toctx.save();\n\t\t\toctx.translate(centerLeft, centerTop);\n\t\t\toctx.scale(1, options.series.pie.tilt);\n\n\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\tdrawHighlight(highlights[i].series);\n\t\t\t}\n\n\t\t\tdrawDonutHole(octx);\n\n\t\t\toctx.restore();\n\n\t\t\tfunction drawHighlight(series) {\n\n\t\t\t\tif (series.angle <= 0 || isNaN(series.angle)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString();\n\t\t\t\toctx.fillStyle = \"rgba(255, 255, 255, \" + options.series.pie.highlight.opacity + \")\"; // this is temporary until we have access to parseColor\n\t\t\t\toctx.beginPath();\n\t\t\t\tif (Math.abs(series.angle - Math.PI * 2) > 0.000000001) {\n\t\t\t\t\toctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t}\n\t\t\t\toctx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false);\n\t\t\t\toctx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false);\n\t\t\t\toctx.closePath();\n\t\t\t\toctx.fill();\n\t\t\t}\n\t\t}\n\t} // end init (plugin body)\n\n\t// define pie specific options and their default values\n\n\tvar options = {\n\t\tseries: {\n\t\t\tpie: {\n\t\t\t\tshow: false,\n\t\t\t\tradius: \"auto\",\t// actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\tinnerRadius: 0, /* for donut */\n\t\t\t\tstartAngle: 3/2,\n\t\t\t\ttilt: 1,\n\t\t\t\tshadow: {\n\t\t\t\t\tleft: 5,\t// shadow left offset\n\t\t\t\t\ttop: 15,\t// shadow top offset\n\t\t\t\t\talpha: 0.02\t// shadow alpha\n\t\t\t\t},\n\t\t\t\toffset: {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: \"auto\"\n\t\t\t\t},\n\t\t\t\tstroke: {\n\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\twidth: 1\n\t\t\t\t},\n\t\t\t\tlabel: {\n\t\t\t\t\tshow: \"auto\",\n\t\t\t\t\tformatter: function(label, slice) {\n\t\t\t\t\t\treturn \"<div style='font-size:x-small;text-align:center;padding:2px;color:\" + slice.color + \";'>\" + label + \"<br/>\" + Math.round(slice.percent) + \"%</div>\";\n\t\t\t\t\t},\t// formatter function\n\t\t\t\t\tradius: 1,\t// radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\t\tbackground: {\n\t\t\t\t\t\tcolor: null,\n\t\t\t\t\t\topacity: 0\n\t\t\t\t\t},\n\t\t\t\t\tthreshold: 0\t// percentage at which to hide the label (i.e. the slice is too narrow)\n\t\t\t\t},\n\t\t\t\tcombine: {\n\t\t\t\t\tthreshold: -1,\t// percentage at which to combine little slices into one larger slice\n\t\t\t\t\tcolor: null,\t// color to give the new slice (auto-generated if null)\n\t\t\t\t\tlabel: \"Other\"\t// label to give the new slice\n\t\t\t\t},\n\t\t\t\thighlight: {\n\t\t\t\t\t//color: \"#fff\",\t\t// will add this functionality once parseColor is available\n\t\t\t\t\topacity: 0.5\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"pie\",\n\t\tversion: \"1.1\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.resize.js",
    "content": "/* Flot plugin for automatically redrawing plots as the placeholder resizes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nIt works by listening for changes on the placeholder div (through the jQuery\nresize event plugin) - if the size changes, it will redraw the plot.\n\nThere are no options. If you need to disable the plugin for some plots, you\ncan just fix the size of their placeholders.\n\n*/\n\n/* Inline dependency:\n * jQuery resize event - v1.1 - 3/14/2010\n * http://benalman.com/projects/jquery-resize-plugin/\n *\n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n\n/*\n * The plugin depends on jQuery.Resize plugin https://github.com/cowboy/jquery-resize\n * which causes the memory leaking. The plugin dependency was replaced with the native\n * window.resize event as we don't need the jQuery.Resize functionality anyways.\n * -ab March 1, 2015\n */\n\n// (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k=\"setTimeout\",j=\"resize\",d=j+\"-special-event\",b=\"delay\",f=\"throttleWindow\";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);\n\n(function ($) {\n    var options = { }; // no options\n\n    function init(plot) {\n        function onResize() {\n            var placeholder = plot.getPlaceholder();\n\n            // somebody might have hidden us and we can't plot\n            // when we don't have the dimensions\n            if (placeholder.width() == 0 || placeholder.height() == 0)\n                return;\n\n            plot.resize();\n            plot.setupGrid();\n            plot.draw();\n        }\n        \n        function bindEvents(plot, eventHolder) {\n            //plot.getPlaceholder().resize(onResize);\n\n            $(window).bind('resize', onResize)\n        }\n\n        function shutdown(plot, eventHolder) {\n            //plot.getPlaceholder().unbind(\"resize\", onResize);\n            $(window).unbind('resize', onResize)\n        }\n        \n        plot.hooks.bindEvents.push(bindEvents);\n        plot.hooks.shutdown.push(shutdown);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'resize',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.selection.js",
    "content": "/* Flot plugin for selecting regions of a plot.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\nselection: {\n\tmode: null or \"x\" or \"y\" or \"xy\",\n\tcolor: color,\n\tshape: \"round\" or \"miter\" or \"bevel\",\n\tminSize: number of pixels\n}\n\nSelection support is enabled by setting the mode to one of \"x\", \"y\" or \"xy\".\nIn \"x\" mode, the user will only be able to specify the x range, similarly for\n\"y\" mode. For \"xy\", the selection becomes a rectangle where both ranges can be\nspecified. \"color\" is color of the selection (if you need to change the color\nlater on, you can get to it with plot.getOptions().selection.color). \"shape\"\nis the shape of the corners of the selection.\n\n\"minSize\" is the minimum size a selection can be in pixels. This value can\nbe customized to determine the smallest size a selection can be and still\nhave the selection rectangle be displayed. When customizing this value, the\nfact that it refers to pixels, not axis units must be taken into account.\nThus, for example, if there is a bar graph in time mode with BarWidth set to 1\nminute, setting \"minSize\" to 1 will not make the minimum selection size 1\nminute, but rather 1 pixel. Note also that setting \"minSize\" to 0 will prevent\n\"plotunselected\" events from being fired when the user clicks the mouse without\ndragging.\n\nWhen selection support is enabled, a \"plotselected\" event will be emitted on\nthe DOM element you passed into the plot function. The event handler gets a\nparameter with the ranges selected on the axes, like this:\n\n\tplaceholder.bind( \"plotselected\", function( event, ranges ) {\n\t\talert(\"You selected \" + ranges.xaxis.from + \" to \" + ranges.xaxis.to)\n\t\t// similar for yaxis - with multiple axes, the extra ones are in\n\t\t// x2axis, x3axis, ...\n\t});\n\nThe \"plotselected\" event is only fired when the user has finished making the\nselection. A \"plotselecting\" event is fired during the process with the same\nparameters as the \"plotselected\" event, in case you want to know what's\nhappening while it's happening,\n\nA \"plotunselected\" event with no arguments is emitted when the user clicks the\nmouse to remove the selection. As stated above, setting \"minSize\" to 0 will\ndestroy this behavior.\n\nThe plugin allso adds the following methods to the plot object:\n\n- setSelection( ranges, preventEvent )\n\n  Set the selection rectangle. The passed in ranges is on the same form as\n  returned in the \"plotselected\" event. If the selection mode is \"x\", you\n  should put in either an xaxis range, if the mode is \"y\" you need to put in\n  an yaxis range and both xaxis and yaxis if the selection mode is \"xy\", like\n  this:\n\n\tsetSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });\n\n  setSelection will trigger the \"plotselected\" event when called. If you don't\n  want that to happen, e.g. if you're inside a \"plotselected\" handler, pass\n  true as the second parameter. If you are using multiple axes, you can\n  specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of\n  xaxis, the plugin picks the first one it sees.\n\n- clearSelection( preventEvent )\n\n  Clear the selection rectangle. Pass in true to avoid getting a\n  \"plotunselected\" event.\n\n- getSelection()\n\n  Returns the current selection in the same format as the \"plotselected\"\n  event. If there's currently no selection, the function returns null.\n\n*/\n\n(function ($) {\n    function init(plot) {\n        var selection = {\n                first: { x: -1, y: -1}, second: { x: -1, y: -1},\n                show: false,\n                active: false\n            };\n\n        // FIXME: The drag handling implemented here should be\n        // abstracted out, there's some similar code from a library in\n        // the navigation plugin, this should be massaged a bit to fit\n        // the Flot cases here better and reused. Doing this would\n        // make this plugin much slimmer.\n        var savedhandlers = {};\n\n        var mouseUpHandler = null;\n        \n        function onMouseMove(e) {\n            if (selection.active) {\n                updateSelection(e);\n                \n                plot.getPlaceholder().trigger(\"plotselecting\", [ getSelection() ]);\n            }\n        }\n\n        function onMouseDown(e) {\n            if (e.which != 1)  // only accept left-click\n                return;\n            \n            // cancel out any text selections\n            document.body.focus();\n\n            // prevent text selection and drag in old-school browsers\n            if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) {\n                savedhandlers.onselectstart = document.onselectstart;\n                document.onselectstart = function () { return false; };\n            }\n            if (document.ondrag !== undefined && savedhandlers.ondrag == null) {\n                savedhandlers.ondrag = document.ondrag;\n                document.ondrag = function () { return false; };\n            }\n\n            setSelectionPos(selection.first, e);\n\n            selection.active = true;\n\n            // this is a bit silly, but we have to use a closure to be\n            // able to whack the same handler again\n            mouseUpHandler = function (e) { onMouseUp(e); };\n            \n            $(document).one(\"mouseup\", mouseUpHandler);\n        }\n\n        function onMouseUp(e) {\n            mouseUpHandler = null;\n            \n            // revert drag stuff for old-school browsers\n            if (document.onselectstart !== undefined)\n                document.onselectstart = savedhandlers.onselectstart;\n            if (document.ondrag !== undefined)\n                document.ondrag = savedhandlers.ondrag;\n\n            // no more dragging\n            selection.active = false;\n            updateSelection(e);\n\n            if (selectionIsSane())\n                triggerSelectedEvent();\n            else {\n                // this counts as a clear\n                plot.getPlaceholder().trigger(\"plotunselected\", [ ]);\n                plot.getPlaceholder().trigger(\"plotselecting\", [ null ]);\n            }\n\n            return false;\n        }\n\n        function getSelection() {\n            if (!selectionIsSane())\n                return null;\n            \n            if (!selection.show) return null;\n\n            var r = {}, c1 = selection.first, c2 = selection.second;\n            $.each(plot.getAxes(), function (name, axis) {\n                if (axis.used) {\n                    var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); \n                    r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) };\n                }\n            });\n            return r;\n        }\n\n        function triggerSelectedEvent() {\n            var r = getSelection();\n\n            plot.getPlaceholder().trigger(\"plotselected\", [ r ]);\n\n            // backwards-compat stuff, to be removed in future\n            if (r.xaxis && r.yaxis)\n                plot.getPlaceholder().trigger(\"selected\", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);\n        }\n\n        function clamp(min, value, max) {\n            return value < min ? min: (value > max ? max: value);\n        }\n\n        function setSelectionPos(pos, e) {\n            var o = plot.getOptions();\n            var offset = plot.getPlaceholder().offset();\n            var plotOffset = plot.getPlotOffset();\n            pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width());\n            pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height());\n\n            if (o.selection.mode == \"y\")\n                pos.x = pos == selection.first ? 0 : plot.width();\n\n            if (o.selection.mode == \"x\")\n                pos.y = pos == selection.first ? 0 : plot.height();\n        }\n\n        function updateSelection(pos) {\n            if (pos.pageX == null)\n                return;\n\n            setSelectionPos(selection.second, pos);\n            if (selectionIsSane()) {\n                selection.show = true;\n                plot.triggerRedrawOverlay();\n            }\n            else\n                clearSelection(true);\n        }\n\n        function clearSelection(preventEvent) {\n            if (selection.show) {\n                selection.show = false;\n                plot.triggerRedrawOverlay();\n                if (!preventEvent)\n                    plot.getPlaceholder().trigger(\"plotunselected\", [ ]);\n            }\n        }\n\n        // function taken from markings support in Flot\n        function extractRange(ranges, coord) {\n            var axis, from, to, key, axes = plot.getAxes();\n\n            for (var k in axes) {\n                axis = axes[k];\n                if (axis.direction == coord) {\n                    key = coord + axis.n + \"axis\";\n                    if (!ranges[key] && axis.n == 1)\n                        key = coord + \"axis\"; // support x1axis as xaxis\n                    if (ranges[key]) {\n                        from = ranges[key].from;\n                        to = ranges[key].to;\n                        break;\n                    }\n                }\n            }\n\n            // backwards-compat stuff - to be removed in future\n            if (!ranges[key]) {\n                axis = coord == \"x\" ? plot.getXAxes()[0] : plot.getYAxes()[0];\n                from = ranges[coord + \"1\"];\n                to = ranges[coord + \"2\"];\n            }\n\n            // auto-reverse as an added bonus\n            if (from != null && to != null && from > to) {\n                var tmp = from;\n                from = to;\n                to = tmp;\n            }\n            \n            return { from: from, to: to, axis: axis };\n        }\n        \n        function setSelection(ranges, preventEvent) {\n            var axis, range, o = plot.getOptions();\n\n            if (o.selection.mode == \"y\") {\n                selection.first.x = 0;\n                selection.second.x = plot.width();\n            }\n            else {\n                range = extractRange(ranges, \"x\");\n\n                selection.first.x = range.axis.p2c(range.from);\n                selection.second.x = range.axis.p2c(range.to);\n            }\n\n            if (o.selection.mode == \"x\") {\n                selection.first.y = 0;\n                selection.second.y = plot.height();\n            }\n            else {\n                range = extractRange(ranges, \"y\");\n\n                selection.first.y = range.axis.p2c(range.from);\n                selection.second.y = range.axis.p2c(range.to);\n            }\n\n            selection.show = true;\n            plot.triggerRedrawOverlay();\n            if (!preventEvent && selectionIsSane())\n                triggerSelectedEvent();\n        }\n\n        function selectionIsSane() {\n            var minSize = plot.getOptions().selection.minSize;\n            return Math.abs(selection.second.x - selection.first.x) >= minSize &&\n                Math.abs(selection.second.y - selection.first.y) >= minSize;\n        }\n\n        plot.clearSelection = clearSelection;\n        plot.setSelection = setSelection;\n        plot.getSelection = getSelection;\n\n        plot.hooks.bindEvents.push(function(plot, eventHolder) {\n            var o = plot.getOptions();\n            if (o.selection.mode != null) {\n                eventHolder.mousemove(onMouseMove);\n                eventHolder.mousedown(onMouseDown);\n            }\n        });\n\n\n        plot.hooks.drawOverlay.push(function (plot, ctx) {\n            // draw selection\n            if (selection.show && selectionIsSane()) {\n                var plotOffset = plot.getPlotOffset();\n                var o = plot.getOptions();\n\n                ctx.save();\n                ctx.translate(plotOffset.left, plotOffset.top);\n\n                var c = $.color.parse(o.selection.color);\n\n                ctx.strokeStyle = c.scale('a', 0.8).toString();\n                ctx.lineWidth = 1;\n                ctx.lineJoin = o.selection.shape;\n                ctx.fillStyle = c.scale('a', 0.4).toString();\n\n                var x = Math.min(selection.first.x, selection.second.x) + 0.5,\n                    y = Math.min(selection.first.y, selection.second.y) + 0.5,\n                    w = Math.abs(selection.second.x - selection.first.x) - 1,\n                    h = Math.abs(selection.second.y - selection.first.y) - 1;\n\n                ctx.fillRect(x, y, w, h);\n                ctx.strokeRect(x, y, w, h);\n\n                ctx.restore();\n            }\n        });\n        \n        plot.hooks.shutdown.push(function (plot, eventHolder) {\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n            eventHolder.unbind(\"mousedown\", onMouseDown);\n            \n            if (mouseUpHandler)\n                $(document).unbind(\"mouseup\", mouseUpHandler);\n        });\n\n    }\n\n    $.plot.plugins.push({\n        init: init,\n        options: {\n            selection: {\n                mode: null, // one of null, \"x\", \"y\" or \"xy\"\n                color: \"#e8cfac\",\n                shape: \"round\", // one of \"round\", \"miter\", or \"bevel\"\n                minSize: 5 // minimum number of pixels\n            }\n        },\n        name: 'selection',\n        version: '1.1'\n    });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.stack.js",
    "content": "/* Flot plugin for stacking data sets rather than overlyaing them.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin assumes the data is sorted on x (or y if stacking horizontally).\nFor line charts, it is assumed that if a line has an undefined gap (from a\nnull point), then the line above it should have the same gap - insert zeros\ninstead of \"null\" if you want another behaviour. This also holds for the start\nand end of the chart. Note that stacking a mix of positive and negative values\nin most instances doesn't make sense (so it looks weird).\n\nTwo or more series are stacked when their \"stack\" attribute is set to the same\nkey (which can be any number or string or just \"true\"). To specify the default\nstack, you can set the stack option like this:\n\n\tseries: {\n\t\tstack: null/false, true, or a key (number/string)\n\t}\n\nYou can also specify it for a single series, like this:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\tstack: true\n\t}])\n\nThe stacking order is determined by the order of the data series in the array\n(later series end up on top of the previous).\n\nInternally, the plugin modifies the datapoints in each series, adding an\noffset to the y value. For line series, extra data points are inserted through\ninterpolation. If there's a second y value, it's also adjusted (e.g for bar\ncharts or filled areas).\n\n*/\n\n(function ($) {\n    var options = {\n        series: { stack: null } // or number/string\n    };\n    \n    function init(plot) {\n        function findMatchingSeries(s, allseries) {\n            var res = null;\n            for (var i = 0; i < allseries.length; ++i) {\n                if (s == allseries[i])\n                    break;\n                \n                if (allseries[i].stack == s.stack)\n                    res = allseries[i];\n            }\n            \n            return res;\n        }\n        \n        function stackData(plot, s, datapoints) {\n            if (s.stack == null || s.stack === false)\n                return;\n\n            var other = findMatchingSeries(s, plot.getData());\n            if (!other)\n                return;\n\n            var ps = datapoints.pointsize,\n                points = datapoints.points,\n                otherps = other.datapoints.pointsize,\n                otherpoints = other.datapoints.points,\n                newpoints = [],\n                px, py, intery, qx, qy, bottom,\n                withlines = s.lines.show,\n                horizontal = s.bars.horizontal,\n                withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y),\n                withsteps = withlines && s.lines.steps,\n                fromgap = true,\n                keyOffset = horizontal ? 1 : 0,\n                accumulateOffset = horizontal ? 0 : 1,\n                i = 0, j = 0, l, m;\n\n            while (true) {\n                if (i >= points.length)\n                    break;\n\n                l = newpoints.length;\n\n                if (points[i] == null) {\n                    // copy gaps\n                    for (m = 0; m < ps; ++m)\n                        newpoints.push(points[i + m]);\n                    i += ps;\n                }\n                else if (j >= otherpoints.length) {\n                    // for lines, we can't use the rest of the points\n                    if (!withlines) {\n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n                    }\n                    i += ps;\n                }\n                else if (otherpoints[j] == null) {\n                    // oops, got a gap\n                    for (m = 0; m < ps; ++m)\n                        newpoints.push(null);\n                    fromgap = true;\n                    j += otherps;\n                }\n                else {\n                    // cases where we actually got two points\n                    px = points[i + keyOffset];\n                    py = points[i + accumulateOffset];\n                    qx = otherpoints[j + keyOffset];\n                    qy = otherpoints[j + accumulateOffset];\n                    bottom = 0;\n\n                    if (px == qx) {\n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n\n                        newpoints[l + accumulateOffset] += qy;\n                        bottom = qy;\n                        \n                        i += ps;\n                        j += otherps;\n                    }\n                    else if (px > qx) {\n                        // we got past point below, might need to\n                        // insert interpolated extra point\n                        if (withlines && i > 0 && points[i - ps] != null) {\n                            intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px);\n                            newpoints.push(qx);\n                            newpoints.push(intery + qy);\n                            for (m = 2; m < ps; ++m)\n                                newpoints.push(points[i + m]);\n                            bottom = qy; \n                        }\n\n                        j += otherps;\n                    }\n                    else { // px < qx\n                        if (fromgap && withlines) {\n                            // if we come from a gap, we just skip this point\n                            i += ps;\n                            continue;\n                        }\n                            \n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n                        \n                        // we might be able to interpolate a point below,\n                        // this can give us a better y\n                        if (withlines && j > 0 && otherpoints[j - otherps] != null)\n                            bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx);\n\n                        newpoints[l + accumulateOffset] += bottom;\n                        \n                        i += ps;\n                    }\n\n                    fromgap = false;\n                    \n                    if (l != newpoints.length && withbottom)\n                        newpoints[l + 2] += bottom;\n                }\n\n                // maintain the line steps invariant\n                if (withsteps && l != newpoints.length && l > 0\n                    && newpoints[l] != null\n                    && newpoints[l] != newpoints[l - ps]\n                    && newpoints[l + 1] != newpoints[l - ps + 1]) {\n                    for (m = 0; m < ps; ++m)\n                        newpoints[l + ps + m] = newpoints[l + m];\n                    newpoints[l + 1] = newpoints[l - ps + 1];\n                }\n            }\n\n            datapoints.points = newpoints;\n        }\n        \n        plot.hooks.processDatapoints.push(stackData);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'stack',\n        version: '1.2'\n    });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.symbol.js",
    "content": "/* Flot plugin that adds some extra symbols for plotting points.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe symbols are accessed as strings through the standard symbol options:\n\n\tseries: {\n\t\tpoints: {\n\t\t\tsymbol: \"square\" // or \"diamond\", \"triangle\", \"cross\"\n\t\t}\n\t}\n\n*/\n\n(function ($) {\n    function processRawData(plot, series, datapoints) {\n        // we normalize the area of each symbol so it is approximately the\n        // same as a circle of the given radius\n\n        var handlers = {\n            square: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2\n                var size = radius * Math.sqrt(Math.PI) / 2;\n                ctx.rect(x - size, y - size, size + size, size + size);\n            },\n            diamond: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = 2s^2  =>  s = r * sqrt(pi/2)\n                var size = radius * Math.sqrt(Math.PI / 2);\n                ctx.moveTo(x - size, y);\n                ctx.lineTo(x, y - size);\n                ctx.lineTo(x + size, y);\n                ctx.lineTo(x, y + size);\n                ctx.lineTo(x - size, y);\n            },\n            triangle: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = 1/2 * s^2 * sin (pi / 3)  =>  s = r * sqrt(2 * pi / sin(pi / 3))\n                var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3));\n                var height = size * Math.sin(Math.PI / 3);\n                ctx.moveTo(x - size/2, y + height/2);\n                ctx.lineTo(x + size/2, y + height/2);\n                if (!shadow) {\n                    ctx.lineTo(x, y - height/2);\n                    ctx.lineTo(x - size/2, y + height/2);\n                }\n            },\n            cross: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2\n                var size = radius * Math.sqrt(Math.PI) / 2;\n                ctx.moveTo(x - size, y - size);\n                ctx.lineTo(x + size, y + size);\n                ctx.moveTo(x - size, y + size);\n                ctx.lineTo(x + size, y - size);\n            }\n        };\n\n        var s = series.points.symbol;\n        if (handlers[s])\n            series.points.symbol = handlers[s];\n    }\n    \n    function init(plot) {\n        plot.hooks.processDatapoints.push(processRawData);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        name: 'symbols',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.threshold.js",
    "content": "/* Flot plugin for thresholding data.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tthreshold: {\n\t\t\tbelow: number\n\t\t\tcolor: colorspec\n\t\t}\n\t}\n\nIt can also be applied to a single series, like this:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\tthreshold: { ... }\n\t}])\n\nAn array can be passed for multiple thresholding, like this:\n\n\tthreshold: [{\n\t\tbelow: number1\n\t\tcolor: color1\n\t},{\n\t\tbelow: number2\n\t\tcolor: color2\n\t}]\n\nThese multiple threshold objects can be passed in any order since they are\nsorted by the processing function.\n\nThe data points below \"below\" are drawn with the specified color. This makes\nit easy to mark points below 0, e.g. for budget data.\n\nInternally, the plugin works by splitting the data into two series, above and\nbelow the threshold. The extra series below the threshold will have its label\ncleared and the special \"originSeries\" attribute set to the original series.\nYou may need to check for this in hover events.\n\n*/\n\n(function ($) {\n    var options = {\n        series: { threshold: null } // or { below: number, color: color spec}\n    };\n    \n    function init(plot) {\n        function thresholdData(plot, s, datapoints, below, color) {\n            var ps = datapoints.pointsize, i, x, y, p, prevp,\n                thresholded = $.extend({}, s); // note: shallow copy\n\n            thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format };\n            thresholded.label = null;\n            thresholded.color = color;\n            thresholded.threshold = null;\n            thresholded.originSeries = s;\n            thresholded.data = [];\n \n            var origpoints = datapoints.points,\n                addCrossingPoints = s.lines.show;\n\n            var threspoints = [];\n            var newpoints = [];\n            var m;\n\n            for (i = 0; i < origpoints.length; i += ps) {\n                x = origpoints[i];\n                y = origpoints[i + 1];\n\n                prevp = p;\n                if (y < below)\n                    p = threspoints;\n                else\n                    p = newpoints;\n\n                if (addCrossingPoints && prevp != p && x != null\n                    && i > 0 && origpoints[i - ps] != null) {\n                    var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]);\n                    prevp.push(interx);\n                    prevp.push(below);\n                    for (m = 2; m < ps; ++m)\n                        prevp.push(origpoints[i + m]);\n                    \n                    p.push(null); // start new segment\n                    p.push(null);\n                    for (m = 2; m < ps; ++m)\n                        p.push(origpoints[i + m]);\n                    p.push(interx);\n                    p.push(below);\n                    for (m = 2; m < ps; ++m)\n                        p.push(origpoints[i + m]);\n                }\n\n                p.push(x);\n                p.push(y);\n                for (m = 2; m < ps; ++m)\n                    p.push(origpoints[i + m]);\n            }\n\n            datapoints.points = newpoints;\n            thresholded.datapoints.points = threspoints;\n            \n            if (thresholded.datapoints.points.length > 0) {\n                var origIndex = $.inArray(s, plot.getData());\n                // Insert newly-generated series right after original one (to prevent it from becoming top-most)\n                plot.getData().splice(origIndex + 1, 0, thresholded);\n            }\n                \n            // FIXME: there are probably some edge cases left in bars\n        }\n        \n        function processThresholds(plot, s, datapoints) {\n            if (!s.threshold)\n                return;\n            \n            if (s.threshold instanceof Array) {\n                s.threshold.sort(function(a, b) {\n                    return a.below - b.below;\n                });\n                \n                $(s.threshold).each(function(i, th) {\n                    thresholdData(plot, s, datapoints, th.below, th.color);\n                });\n            }\n            else {\n                thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color);\n            }\n        }\n        \n        plot.hooks.processDatapoints.push(processThresholds);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'threshold',\n        version: '1.2'\n    });\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.time.js",
    "content": "/* Pretty handling of time axes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nSet axis.mode to \"time\" to enable. See the section \"Time series data\" in\nAPI.txt for details.\n\n*/\n\n(function($) {\n\n\tvar options = {\n\t\txaxis: {\n\t\t\ttimezone: null,\t\t// \"browser\" for local to the client or timezone for timezone-js\n\t\t\ttimeformat: null,\t// format string to use\n\t\t\ttwelveHourClock: false,\t// 12 or 24 time in time mode\n\t\t\tmonthNames: null\t// list of names of months\n\t\t}\n\t};\n\n\t// round to nearby lower multiple of base\n\n\tfunction floorInBase(n, base) {\n\t\treturn base * Math.floor(n / base);\n\t}\n\n\t// Returns a string with the date d formatted according to fmt.\n\t// A subset of the Open Group's strftime format is supported.\n\n\tfunction formatDate(d, fmt, monthNames, dayNames) {\n\n\t\tif (typeof d.strftime == \"function\") {\n\t\t\treturn d.strftime(fmt);\n\t\t}\n\n\t\tvar leftPad = function(n, pad) {\n\t\t\tn = \"\" + n;\n\t\t\tpad = \"\" + (pad == null ? \"0\" : pad);\n\t\t\treturn n.length == 1 ? pad + n : n;\n\t\t};\n\n\t\tvar r = [];\n\t\tvar escape = false;\n\t\tvar hours = d.getHours();\n\t\tvar isAM = hours < 12;\n\n\t\tif (monthNames == null) {\n\t\t\tmonthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\t\t}\n\n\t\tif (dayNames == null) {\n\t\t\tdayNames = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\t\t}\n\n\t\tvar hours12;\n\n\t\tif (hours > 12) {\n\t\t\thours12 = hours - 12;\n\t\t} else if (hours == 0) {\n\t\t\thours12 = 12;\n\t\t} else {\n\t\t\thours12 = hours;\n\t\t}\n\n\t\tfor (var i = 0; i < fmt.length; ++i) {\n\n\t\t\tvar c = fmt.charAt(i);\n\n\t\t\tif (escape) {\n\t\t\t\tswitch (c) {\n\t\t\t\t\tcase 'a': c = \"\" + dayNames[d.getDay()]; break;\n\t\t\t\t\tcase 'b': c = \"\" + monthNames[d.getMonth()]; break;\n\t\t\t\t\tcase 'd': c = leftPad(d.getDate()); break;\n\t\t\t\t\tcase 'e': c = leftPad(d.getDate(), \" \"); break;\n\t\t\t\t\tcase 'h':\t// For back-compat with 0.7; remove in 1.0\n\t\t\t\t\tcase 'H': c = leftPad(hours); break;\n\t\t\t\t\tcase 'I': c = leftPad(hours12); break;\n\t\t\t\t\tcase 'l': c = leftPad(hours12, \" \"); break;\n\t\t\t\t\tcase 'm': c = leftPad(d.getMonth() + 1); break;\n\t\t\t\t\tcase 'M': c = leftPad(d.getMinutes()); break;\n\t\t\t\t\t// quarters not in Open Group's strftime specification\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\tc = \"\" + (Math.floor(d.getMonth() / 3) + 1); break;\n\t\t\t\t\tcase 'S': c = leftPad(d.getSeconds()); break;\n\t\t\t\t\tcase 'y': c = leftPad(d.getFullYear() % 100); break;\n\t\t\t\t\tcase 'Y': c = \"\" + d.getFullYear(); break;\n\t\t\t\t\tcase 'p': c = (isAM) ? (\"\" + \"am\") : (\"\" + \"pm\"); break;\n\t\t\t\t\tcase 'P': c = (isAM) ? (\"\" + \"AM\") : (\"\" + \"PM\"); break;\n\t\t\t\t\tcase 'w': c = \"\" + d.getDay(); break;\n\t\t\t\t}\n\t\t\t\tr.push(c);\n\t\t\t\tescape = false;\n\t\t\t} else {\n\t\t\t\tif (c == \"%\") {\n\t\t\t\t\tescape = true;\n\t\t\t\t} else {\n\t\t\t\t\tr.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn r.join(\"\");\n\t}\n\n\t// To have a consistent view of time-based data independent of which time\n\t// zone the client happens to be in we need a date-like object independent\n\t// of time zones.  This is done through a wrapper that only calls the UTC\n\t// versions of the accessor methods.\n\n\tfunction makeUtcWrapper(d) {\n\n\t\tfunction addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {\n\t\t\tsourceObj[sourceMethod] = function() {\n\t\t\t\treturn targetObj[targetMethod].apply(targetObj, arguments);\n\t\t\t};\n\t\t};\n\n\t\tvar utc = {\n\t\t\tdate: d\n\t\t};\n\n\t\t// support strftime, if found\n\n\t\tif (d.strftime != undefined) {\n\t\t\taddProxyMethod(utc, \"strftime\", d, \"strftime\");\n\t\t}\n\n\t\taddProxyMethod(utc, \"getTime\", d, \"getTime\");\n\t\taddProxyMethod(utc, \"setTime\", d, \"setTime\");\n\n\t\tvar props = [\"Date\", \"Day\", \"FullYear\", \"Hours\", \"Milliseconds\", \"Minutes\", \"Month\", \"Seconds\"];\n\n\t\tfor (var p = 0; p < props.length; p++) {\n\t\t\taddProxyMethod(utc, \"get\" + props[p], d, \"getUTC\" + props[p]);\n\t\t\taddProxyMethod(utc, \"set\" + props[p], d, \"setUTC\" + props[p]);\n\t\t}\n\n\t\treturn utc;\n\t};\n\n\t// select time zone strategy.  This returns a date-like object tied to the\n\t// desired timezone\n\n\tfunction dateGenerator(ts, opts) {\n\t\tif (opts.timezone == \"browser\") {\n\t\t\treturn new Date(ts);\n\t\t} else if (!opts.timezone || opts.timezone == \"utc\") {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t} else if (typeof timezoneJS != \"undefined\" && typeof timezoneJS.Date != \"undefined\") {\n\t\t\tvar d = new timezoneJS.Date();\n\t\t\t// timezone-js is fickle, so be sure to set the time zone before\n\t\t\t// setting the time.\n\t\t\td.setTimezone(opts.timezone);\n\t\t\td.setTime(ts);\n\t\t\treturn d;\n\t\t} else {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t}\n\t}\n\t\n\t// map of app. size of time units in milliseconds\n\n\tvar timeUnitSize = {\n\t\t\"second\": 1000,\n\t\t\"minute\": 60 * 1000,\n\t\t\"hour\": 60 * 60 * 1000,\n\t\t\"day\": 24 * 60 * 60 * 1000,\n\t\t\"month\": 30 * 24 * 60 * 60 * 1000,\n\t\t\"quarter\": 3 * 30 * 24 * 60 * 60 * 1000,\n\t\t\"year\": 365.2425 * 24 * 60 * 60 * 1000\n\t};\n\n\t// the allowed tick sizes, after 1 year we use\n\t// an integer algorithm\n\n\tvar baseSpec = [\n\t\t[1, \"second\"], [2, \"second\"], [5, \"second\"], [10, \"second\"],\n\t\t[30, \"second\"], \n\t\t[1, \"minute\"], [2, \"minute\"], [5, \"minute\"], [10, \"minute\"],\n\t\t[30, \"minute\"], \n\t\t[1, \"hour\"], [2, \"hour\"], [4, \"hour\"],\n\t\t[8, \"hour\"], [12, \"hour\"],\n\t\t[1, \"day\"], [2, \"day\"], [3, \"day\"],\n\t\t[0.25, \"month\"], [0.5, \"month\"], [1, \"month\"],\n\t\t[2, \"month\"]\n\t];\n\n\t// we don't know which variant(s) we'll need yet, but generating both is\n\t// cheap\n\n\tvar specMonths = baseSpec.concat([[3, \"month\"], [6, \"month\"],\n\t\t[1, \"year\"]]);\n\tvar specQuarters = baseSpec.concat([[1, \"quarter\"], [2, \"quarter\"],\n\t\t[1, \"year\"]]);\n\n\tfunction init(plot) {\n\t\tplot.hooks.processOptions.push(function (plot, options) {\n\t\t\t$.each(plot.getAxes(), function(axisName, axis) {\n\n\t\t\t\tvar opts = axis.options;\n\n\t\t\t\tif (opts.mode == \"time\") {\n\t\t\t\t\taxis.tickGenerator = function(axis) {\n\n\t\t\t\t\t\tvar ticks = [];\n\t\t\t\t\t\tvar d = dateGenerator(axis.min, opts);\n\t\t\t\t\t\tvar minSize = 0;\n\n\t\t\t\t\t\t// make quarter use a possibility if quarters are\n\t\t\t\t\t\t// mentioned in either of these options\n\n\t\t\t\t\t\tvar spec = (opts.tickSize && opts.tickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ||\n\t\t\t\t\t\t\t(opts.minTickSize && opts.minTickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ? specQuarters : specMonths;\n\n\t\t\t\t\t\tif (opts.minTickSize != null) {\n\t\t\t\t\t\t\tif (typeof opts.tickSize == \"number\") {\n\t\t\t\t\t\t\t\tminSize = opts.tickSize;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tminSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (var i = 0; i < spec.length - 1; ++i) {\n\t\t\t\t\t\t\tif (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]\n\t\t\t\t\t\t\t\t\t\t\t  + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2\n\t\t\t\t\t\t\t\t&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar size = spec[i][0];\n\t\t\t\t\t\tvar unit = spec[i][1];\n\n\t\t\t\t\t\t// special-case the possibility of several years\n\n\t\t\t\t\t\tif (unit == \"year\") {\n\n\t\t\t\t\t\t\t// if given a minTickSize in years, just use it,\n\t\t\t\t\t\t\t// ensuring that it's an integer\n\n\t\t\t\t\t\t\tif (opts.minTickSize != null && opts.minTickSize[1] == \"year\") {\n\t\t\t\t\t\t\t\tsize = Math.floor(opts.minTickSize[0]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tvar magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));\n\t\t\t\t\t\t\t\tvar norm = (axis.delta / timeUnitSize.year) / magn;\n\n\t\t\t\t\t\t\t\tif (norm < 1.5) {\n\t\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t\t} else if (norm < 3) {\n\t\t\t\t\t\t\t\t\tsize = 2;\n\t\t\t\t\t\t\t\t} else if (norm < 7.5) {\n\t\t\t\t\t\t\t\t\tsize = 5;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tsize = 10;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsize *= magn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// minimum size for years is 1\n\n\t\t\t\t\t\t\tif (size < 1) {\n\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taxis.tickSize = opts.tickSize || [size, unit];\n\t\t\t\t\t\tvar tickSize = axis.tickSize[0];\n\t\t\t\t\t\tunit = axis.tickSize[1];\n\n\t\t\t\t\t\tvar step = tickSize * timeUnitSize[unit];\n\n\t\t\t\t\t\tif (unit == \"second\") {\n\t\t\t\t\t\t\td.setSeconds(floorInBase(d.getSeconds(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"minute\") {\n\t\t\t\t\t\t\td.setMinutes(floorInBase(d.getMinutes(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"hour\") {\n\t\t\t\t\t\t\td.setHours(floorInBase(d.getHours(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"month\") {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"quarter\") {\n\t\t\t\t\t\t\td.setMonth(3 * floorInBase(d.getMonth() / 3,\n\t\t\t\t\t\t\t\ttickSize));\n\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\td.setFullYear(floorInBase(d.getFullYear(), tickSize));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset smaller components\n\n\t\t\t\t\t\td.setMilliseconds(0);\n\n\t\t\t\t\t\tif (step >= timeUnitSize.minute) {\n\t\t\t\t\t\t\td.setSeconds(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.hour) {\n\t\t\t\t\t\t\td.setMinutes(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day) {\n\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day * 4) {\n\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.month * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 3));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.quarter * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.year) {\n\t\t\t\t\t\t\td.setMonth(0);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar carry = 0;\n\t\t\t\t\t\tvar v = Number.NaN;\n\t\t\t\t\t\tvar prev;\n\n\t\t\t\t\t\tdo {\n\n\t\t\t\t\t\t\tprev = v;\n\t\t\t\t\t\t\tv = d.getTime();\n\t\t\t\t\t\t\tticks.push(v);\n\n\t\t\t\t\t\t\tif (unit == \"month\" || unit == \"quarter\") {\n\t\t\t\t\t\t\t\tif (tickSize < 1) {\n\n\t\t\t\t\t\t\t\t\t// a bit complicated - we'll divide the\n\t\t\t\t\t\t\t\t\t// month/quarter up but we need to take\n\t\t\t\t\t\t\t\t\t// care of fractions so we don't end up in\n\t\t\t\t\t\t\t\t\t// the middle of a day\n\n\t\t\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t\t\t\tvar start = d.getTime();\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\t(unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t\tvar end = d.getTime();\n\t\t\t\t\t\t\t\t\td.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);\n\t\t\t\t\t\t\t\t\tcarry = d.getHours();\n\t\t\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\ttickSize * (unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + tickSize);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\td.setTime(v + step);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while (v < axis.max && v != prev);\n\n\t\t\t\t\t\treturn ticks;\n\t\t\t\t\t};\n\n\t\t\t\t\taxis.tickFormatter = function (v, axis) {\n\n\t\t\t\t\t\tvar d = dateGenerator(v, axis.options);\n\n\t\t\t\t\t\t// first check global format\n\n\t\t\t\t\t\tif (opts.timeformat != null) {\n\t\t\t\t\t\t\treturn formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// possibly use quarters if quarters are mentioned in\n\t\t\t\t\t\t// any of these places\n\n\t\t\t\t\t\tvar useQuarters = (axis.options.tickSize &&\n\t\t\t\t\t\t\t\taxis.options.tickSize[1] == \"quarter\") ||\n\t\t\t\t\t\t\t(axis.options.minTickSize &&\n\t\t\t\t\t\t\t\taxis.options.minTickSize[1] == \"quarter\");\n\n\t\t\t\t\t\tvar t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];\n\t\t\t\t\t\tvar span = axis.max - axis.min;\n\t\t\t\t\t\tvar suffix = (opts.twelveHourClock) ? \" %p\" : \"\";\n\t\t\t\t\t\tvar hourCode = (opts.twelveHourClock) ? \"%I\" : \"%H\";\n\t\t\t\t\t\tvar fmt;\n\n\t\t\t\t\t\tif (t < timeUnitSize.minute) {\n\t\t\t\t\t\t\tfmt = hourCode + \":%M:%S\" + suffix;\n\t\t\t\t\t\t} else if (t < timeUnitSize.day) {\n\t\t\t\t\t\t\tif (span < 2 * timeUnitSize.day) {\n\t\t\t\t\t\t\t\tfmt = hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %d \" + hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (t < timeUnitSize.month) {\n\t\t\t\t\t\t\tfmt = \"%b %d\";\n\t\t\t\t\t\t} else if ((useQuarters && t < timeUnitSize.quarter) ||\n\t\t\t\t\t\t\t(!useQuarters && t < timeUnitSize.year)) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"%b\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (useQuarters && t < timeUnitSize.year) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"Q%q\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"Q%q %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfmt = \"%Y\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);\n\n\t\t\t\t\t\treturn rt;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: 'time',\n\t\tversion: '1.0'\n\t});\n\n\t// Time-axis support used to be in Flot core, which exposed the\n\t// formatDate function on the plot object.  Various plugins depend\n\t// on the function, so we need to re-expose it here.\n\n\t$.plot.formatDate = formatDate;\n\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.tooltip.js",
    "content": "/*\n * jquery.flot.tooltip\n * \n * description: easy-to-use tooltips for Flot charts\n * version: 0.6.1\n * author: Krzysztof Urbas @krzysu [myviews.pl]\n * website: https://github.com/krzysu/flot.tooltip\n * \n * build on 2013-04-12\n * released under MIT License, 2012\n*/ \n(function ($) {\n\n    // plugin options, default values\n    var defaultOptions = {\n        tooltip: false,\n        tooltipOpts: {\n            content: \"%s | X: %x | Y: %y\",\n            // allowed templates are:\n            // %s -> series label,\n            // %x -> X value,\n            // %y -> Y value,\n            // %x.2 -> precision of X value,\n            // %p -> percent\n            xDateFormat: null,\n            yDateFormat: null,\n            shifts: {\n                x: 10,\n                y: 20\n            },\n            defaultTheme: true,\n\n            // callbacks\n            onHover: function(flotItem, $tooltipEl) {}\n        }\n    };\n\n    // object\n    var FlotTooltip = function(plot) {\n\n        // variables\n        this.tipPosition = {x: 0, y: 0};\n\n        this.init(plot);\n    };\n\n    // main plugin function\n    FlotTooltip.prototype.init = function(plot) {\n\n        var that = this;\n\n        plot.hooks.bindEvents.push(function (plot, eventHolder) {\n\n            // get plot options\n            that.plotOptions = plot.getOptions();\n\n            // if not enabled return\n            if (that.plotOptions.tooltip === false || typeof that.plotOptions.tooltip === 'undefined') return;\n\n            // shortcut to access tooltip options\n            that.tooltipOptions = that.plotOptions.tooltipOpts;\n\n            // create tooltip DOM element\n            var $tip = that.getDomElement();\n\n            // bind event\n            $( plot.getPlaceholder() ).bind(\"plothover\", function (event, pos, item) {\n\n                if (item) {\n                    var tipText;\n\n                    // convert tooltip content template to real tipText\n                    tipText = that.stringFormat(that.tooltipOptions.content, item);\n\n                    $tip.html( tipText );\n                    that.updateTooltipPosition({ x: pos.pageX, y: pos.pageY });\n                    $tip.css({\n                            left: that.tipPosition.x + that.tooltipOptions.shifts.x,\n                            top: that.tipPosition.y + that.tooltipOptions.shifts.y\n                        })\n                        .show();\n\n                    // run callback\n                    if(typeof that.tooltipOptions.onHover === 'function') {\n                        that.tooltipOptions.onHover(item, $tip);\n                    }\n                }\n                else {\n                    $tip.hide().html('');\n                }\n            });\n\n            eventHolder.mousemove( function(e) {\n                var pos = {};\n                pos.x = e.pageX;\n                pos.y = e.pageY;\n                that.updateTooltipPosition(pos);\n            });\n        });\n    };\n\n    /**\n     * get or create tooltip DOM element\n     * @return jQuery object\n     */\n    FlotTooltip.prototype.getDomElement = function() {\n        var $tip;\n\n        if( $('#flotTip').length > 0 ){\n            $tip = $('#flotTip');\n        }\n        else {\n            $tip = $('<div />').attr('id', 'flotTip');\n            $tip.appendTo('body').hide().css({position: 'absolute'});\n\n            if(this.tooltipOptions.defaultTheme) {\n                $tip.css({\n                    'background': '#fff',\n                    'z-index': '100',\n                    'padding': '0.4em 0.6em',\n                    'border-radius': '0.5em',\n                    'font-size': '0.8em',\n                    'border': '1px solid #111',\n                    'display': 'inline-block',\n                    'white-space': 'nowrap'\n                });\n            }\n        }\n\n        return $tip;\n    };\n\n    // as the name says\n    FlotTooltip.prototype.updateTooltipPosition = function(pos) {\n        var totalTipWidth = $(\"#flotTip\").outerWidth() + this.tooltipOptions.shifts.x;\n        var totalTipHeight = $(\"#flotTip\").outerHeight() + this.tooltipOptions.shifts.y;\n        if ((pos.x - $(window).scrollLeft()) > ($(window).innerWidth() - totalTipWidth)) {\n            pos.x -= totalTipWidth;\n        }\n        if ((pos.y - $(window).scrollTop()) > ($(window).innerHeight() - totalTipHeight)) {\n            pos.y -= totalTipHeight;\n        }\n        this.tipPosition.x = pos.x;\n        this.tipPosition.y = pos.y;\n    };\n\n    /**\n     * core function, create tooltip content\n     * @param  {string} content - template with tooltip content\n     * @param  {object} item - Flot item\n     * @return {string} real tooltip content for current item\n     */\n    FlotTooltip.prototype.stringFormat = function(content, item) {\n\n        var percentPattern = /%p\\.{0,1}(\\d{0,})/;\n        var seriesPattern = /%s/;\n        var xPattern = /%x\\.{0,1}(\\d{0,})/;\n        var yPattern = /%y\\.{0,1}(\\d{0,})/;\n\n        // if it is a function callback get the content string\n        if( typeof(content) === 'function' ) {\n            content = content(item.series.data[item.dataIndex][0], item.series.data[item.dataIndex][1]);\n        }\n\n        // percent match for pie charts\n        if( typeof (item.series.percent) !== 'undefined' ) {\n            content = this.adjustValPrecision(percentPattern, content, item.series.percent);\n        }\n\n        // series match\n        if( typeof(item.series.label) !== 'undefined' ) {\n            content = content.replace(seriesPattern, item.series.label);\n        }\n\n        // time mode axes with custom dateFormat\n        if(this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) {\n            content = content.replace(xPattern, this.timestampToDate(item.series.data[item.dataIndex][0], this.tooltipOptions.xDateFormat));\n        }\n\n        if(this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) {\n            content = content.replace(yPattern, this.timestampToDate(item.series.data[item.dataIndex][1], this.tooltipOptions.yDateFormat));\n        }\n\n        // set precision if defined\n        if( typeof item.series.data[item.dataIndex][0] === 'number' ) {\n            content = this.adjustValPrecision(xPattern, content, item.series.data[item.dataIndex][0]);\n        }\n        if( typeof item.series.data[item.dataIndex][1] === 'number' ) {\n            content = this.adjustValPrecision(yPattern, content, item.series.data[item.dataIndex][1]);\n        }\n\n        // if no value customization, use tickFormatter by default\n        if(typeof item.series.xaxis.tickFormatter !== 'undefined') {\n            content = content.replace(xPattern, item.series.xaxis.tickFormatter(item.series.data[item.dataIndex][0], item.series.xaxis));\n        }\n        if(typeof item.series.yaxis.tickFormatter !== 'undefined') {\n            content = content.replace(yPattern, item.series.yaxis.tickFormatter(item.series.data[item.dataIndex][1], item.series.yaxis));\n        }\n\n        return content;\n    };\n\n    // helpers just for readability\n    FlotTooltip.prototype.isTimeMode = function(axisName, item) {\n        return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time');\n    };\n\n    FlotTooltip.prototype.isXDateFormat = function(item) {\n        return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null);\n    };\n\n    FlotTooltip.prototype.isYDateFormat = function(item) {\n        return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null);\n    };\n\n    //\n    FlotTooltip.prototype.timestampToDate = function(tmst, dateFormat) {\n        var theDate = new Date(tmst);\n        return $.plot.formatDate(theDate, dateFormat);\n    };\n\n    //\n    FlotTooltip.prototype.adjustValPrecision = function(pattern, content, value) {\n\n        var precision;\n        if( content.match(pattern) !== null ) {\n            if(RegExp.$1 !== '') {\n                precision = RegExp.$1;\n                value = value.toFixed(precision);\n\n                // only replace content if precision exists\n                content = content.replace(pattern, value);\n            }\n        }\n        return content;\n    };\n\n    //\n    var init = function(plot) {\n      new FlotTooltip(plot);\n    };\n\n    // define Flot plugin\n    $.plot.plugins.push({\n        init: init,\n        options: defaultOptions,\n        name: 'tooltip',\n        version: '0.6.1'\n    });\n\n})(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/octoicons/octoicons.less",
    "content": "@icon-font-version:  \"1.0.1\";\n\n@font-face {\n    font-family: 'octo-icon-migrate';\n    src:  url('../foundation/migrate/vendor/octoicons/octo-icon.eot?symvb&v=@{icon-font-version}');\n    src:  url('../foundation/migrate/vendor/octoicons/octo-icon.eot?symvb#iefix&v=@{icon-font-version}') format('embedded-opentype'),\n        url('../foundation/migrate/vendor/octoicons/octo-icon.ttf?symvb&v=@{icon-font-version}') format('truetype'),\n        url('../foundation/migrate/vendor/octoicons/octo-icon.woff?symvb&v=@{icon-font-version}') format('woff'),\n        url('../foundation/migrate/vendor/octoicons/octo-icon.svg?symvb#octo-icon&v=@{icon-font-version}') format('svg');\n    font-weight: normal;\n    font-style: normal;\n    font-display: block;\n}\n\n[class^=\"octo-icon-\"],\n[class*=\" octo-icon-\"] {\n    .icon-OctoFontMigrate();\n}\n\n.octo-icon-size-20 {\n    font-size: 20px;\n}\n\n//\n// The code below is generated by Icomoon\n//\n\n.octo-icon-earth {\n    &:before {\n        content: @octo-icon-earth;\n    }\n}\n.octo-icon-language-letters {\n    &:before {\n        content: @octo-icon-language-letters;\n    }\n}\n.octo-icon-database-flash {\n    &:before {\n        content: @octo-icon-database-flash;\n    }\n}\n.octo-icon-collapse {\n    &:before {\n        content: @octo-icon-collapse;\n    }\n  }\n.octo-icon-music {\n    &:before {\n        content: @octo-icon-music;\n    }\n}\n.octo-icon-envelope {\n    &:before {\n        content: @octo-icon-envelope;\n    }\n}\n.octo-icon-heart {\n    &:before {\n        content: @octo-icon-heart;\n    }\n}\n.octo-icon-star {\n    &:before {\n        content: @octo-icon-star;\n    }\n}\n.octo-icon-user {\n    &:before {\n        content: @octo-icon-user;\n    }\n}\n.octo-icon-film {\n    &:before {\n        content: @octo-icon-film;\n    }\n}\n.octo-icon-check {\n    &:before {\n        content: @octo-icon-check;\n    }\n}\n.octo-icon-remove {\n    &:before {\n        content: @octo-icon-remove;\n    }\n}\n.octo-icon-close {\n    &:before {\n        content: @octo-icon-close;\n    }\n}\n.octo-icon-search-minus {\n    &:before {\n        content: @octo-icon-search-minus;\n    }\n}\n.octo-icon-search-plus {\n    &:before {\n        content: @octo-icon-search-plus;\n    }\n}\n.octo-icon-power-off {\n    &:before {\n        content: @octo-icon-power-off;\n    }\n}\n.octo-icon-signal {\n    &:before {\n        content: @octo-icon-signal;\n    }\n}\n.octo-icon-gear {\n    &:before {\n        content: @octo-icon-gear;\n    }\n}\n.octo-icon-cog {\n    &:before {\n        content: @octo-icon-cog;\n    }\n}\n.octo-icon-home {\n    &:before {\n        content: @octo-icon-home;\n    }\n}\n.octo-icon-file {\n    &:before {\n        content: @octo-icon-file;\n    }\n}\n.octo-icon-clock {\n    &:before {\n        content: @octo-icon-clock;\n    }\n}\n.octo-icon-road {\n    &:before {\n        content: @octo-icon-road;\n    }\n}\n.octo-icon-arrow-circle-o-down {\n    &:before {\n        content: @octo-icon-arrow-circle-o-down;\n    }\n}\n.octo-icon-arrow-circle-o-up {\n    &:before {\n        content: @octo-icon-arrow-circle-o-up;\n    }\n}\n.octo-icon-inbox {\n    &:before {\n        content: @octo-icon-inbox;\n    }\n}\n.octo-icon-play-circle {\n    &:before {\n        content: @octo-icon-play-circle;\n    }\n}\n.octo-icon-rotate-right {\n    &:before {\n        content: @octo-icon-rotate-right;\n    }\n}\n.octo-icon-repeat {\n    &:before {\n        content: @octo-icon-repeat;\n    }\n}\n.octo-icon-refresh {\n    &:before {\n        content: @octo-icon-refresh;\n    }\n}\n.octo-icon-list-alt {\n    &:before {\n        content: @octo-icon-list-alt;\n    }\n}\n.octo-icon-headphones {\n    &:before {\n        content: @octo-icon-headphones;\n    }\n}\n.octo-icon-volume-off {\n    &:before {\n        content: @octo-icon-volume-off;\n    }\n}\n.octo-icon-volume-down {\n    &:before {\n        content: @octo-icon-volume-down;\n    }\n}\n.octo-icon-volume-up {\n    &:before {\n        content: @octo-icon-volume-up;\n    }\n}\n.octo-icon-qrcode {\n    &:before {\n        content: @octo-icon-qrcode;\n    }\n}\n.octo-icon-barcode {\n    &:before {\n        content: @octo-icon-barcode;\n    }\n}\n.octo-icon-tags {\n    &:before {\n        content: @octo-icon-tags;\n    }\n}\n.octo-icon-book {\n    &:before {\n        content: @octo-icon-book;\n    }\n}\n.octo-icon-bookmark {\n    &:before {\n        content: @octo-icon-bookmark;\n    }\n}\n.octo-icon-print {\n    &:before {\n        content: @octo-icon-print;\n    }\n}\n.octo-icon-camera {\n    &:before {\n        content: @octo-icon-camera;\n    }\n}\n.octo-icon-font {\n    &:before {\n        content: @octo-icon-font;\n    }\n}\n.octo-icon-text-height {\n    &:before {\n        content: @octo-icon-text-height;\n    }\n}\n.octo-icon-text-width {\n    &:before {\n        content: @octo-icon-text-width;\n    }\n}\n.octo-icon-video-camera {\n    &:before {\n        content: @octo-icon-video-camera;\n    }\n}\n.octo-icon-photo {\n    &:before {\n        content: @octo-icon-photo;\n    }\n}\n.octo-icon-image {\n    &:before {\n        content: @octo-icon-image;\n    }\n}\n.octo-icon-picture {\n    &:before {\n        content: @octo-icon-picture;\n    }\n}\n.octo-icon-pencil {\n    &:before {\n        content: @octo-icon-pencil;\n    }\n}\n.octo-icon-map-marker {\n    &:before {\n        content: @octo-icon-map-marker;\n    }\n}\n.octo-icon-adjust {\n    &:before {\n        content: @octo-icon-adjust;\n    }\n}\n.octo-icon-edit {\n    &:before {\n        content: @octo-icon-edit;\n    }\n}\n.octo-icon-pencil-square {\n    &:before {\n        content: @octo-icon-pencil-square;\n    }\n}\n.octo-icon-share-square {\n    &:before {\n        content: @octo-icon-share-square;\n    }\n}\n.octo-icon-check-square {\n    &:before {\n        content: @octo-icon-check-square;\n    }\n}\n.octo-icon-arrows {\n    &:before {\n        content: @octo-icon-arrows;\n    }\n}\n.octo-icon-pause {\n    &:before {\n        content: @octo-icon-pause;\n    }\n}\n.octo-icon-stop {\n    &:before {\n        content: @octo-icon-stop;\n    }\n}\n.octo-icon-eject {\n    &:before {\n        content: @octo-icon-eject;\n    }\n}\n.octo-icon-chevron-right {\n    &:before {\n        content: @octo-icon-chevron-right;\n    }\n}\n.octo-icon-plus-circle {\n    &:before {\n        content: @octo-icon-plus-circle;\n    }\n}\n.octo-icon-minus-circle {\n    &:before {\n        content: @octo-icon-minus-circle;\n    }\n}\n.octo-icon-times-circle {\n    &:before {\n        content: @octo-icon-times-circle;\n    }\n}\n.octo-icon-check-circle {\n    &:before {\n        content: @octo-icon-check-circle;\n    }\n}\n.octo-icon-question-circle {\n    &:before {\n        content: @octo-icon-question-circle;\n    }\n}\n.octo-icon-info-circle {\n    &:before {\n        content: @octo-icon-info-circle;\n    }\n}\n.octo-icon-crosshairs {\n    &:before {\n        content: @octo-icon-crosshairs;\n    }\n}\n.octo-icon-times-circle-o {\n    &:before {\n        content: @octo-icon-times-circle-o;\n    }\n}\n.octo-icon-check-circle-o {\n    &:before {\n        content: @octo-icon-check-circle-o;\n    }\n}\n.octo-icon-ban {\n    &:before {\n        content: @octo-icon-ban;\n    }\n}\n.octo-icon-arrow-left {\n    &:before {\n        content: @octo-icon-arrow-left;\n    }\n}\n.octo-icon-arrow-right {\n    &:before {\n        content: @octo-icon-arrow-right;\n    }\n}\n.octo-icon-arrow-up {\n    &:before {\n        content: @octo-icon-arrow-up;\n    }\n}\n.octo-icon-arrow-down {\n    &:before {\n        content: @octo-icon-arrow-down;\n    }\n}\n.octo-icon-mail-forward {\n    &:before {\n        content: @octo-icon-mail-forward;\n    }\n}\n.octo-icon-share {\n    &:before {\n        content: @octo-icon-share;\n    }\n}\n.octo-icon-expand {\n    &:before {\n        content: @octo-icon-expand;\n    }\n}\n.octo-icon-compress {\n    &:before {\n        content: @octo-icon-compress;\n    }\n}\n.octo-icon-minus {\n    &:before {\n        content: @octo-icon-minus;\n    }\n}\n.octo-icon-asterisk {\n    &:before {\n        content: @octo-icon-asterisk;\n    }\n}\n.octo-icon-exclamation-circle {\n    &:before {\n        content: @octo-icon-exclamation-circle;\n    }\n}\n.octo-icon-gift {\n    &:before {\n        content: @octo-icon-gift;\n    }\n}\n.octo-icon-leaf {\n    &:before {\n        content: @octo-icon-leaf;\n    }\n}\n.octo-icon-fire {\n    &:before {\n        content: @octo-icon-fire;\n    }\n}\n.octo-icon-eye {\n    &:before {\n        content: @octo-icon-eye;\n    }\n}\n.octo-icon-eye-slash {\n    &:before {\n        content: @octo-icon-eye-slash;\n    }\n}\n.octo-icon-calendar {\n    &:before {\n        content: @octo-icon-calendar;\n    }\n}\n.octo-icon-comment {\n    &:before {\n        content: @octo-icon-comment;\n    }\n}\n.octo-icon-chevron-down {\n    &:before {\n        content: @octo-icon-chevron-down;\n    }\n}\n.octo-icon-retweet {\n    &:before {\n        content: @octo-icon-retweet;\n    }\n}\n.octo-icon-shopping-cart {\n    &:before {\n        content: @octo-icon-shopping-cart;\n    }\n}\n.octo-icon-folder {\n    &:before {\n        content: @octo-icon-folder;\n    }\n}\n.octo-icon-folder-open {\n    &:before {\n        content: @octo-icon-folder-open;\n    }\n}\n.octo-icon-arrows-v {\n    &:before {\n        content: @octo-icon-arrows-v;\n    }\n}\n.octo-icon-arrows-h {\n    &:before {\n        content: @octo-icon-arrows-h;\n    }\n}\n.octo-icon-bar-chart-o {\n    &:before {\n        content: @octo-icon-bar-chart-o;\n    }\n}\n.octo-icon-bar-chart {\n    &:before {\n        content: @octo-icon-bar-chart;\n    }\n}\n.octo-icon-twitter-square {\n    &:before {\n        content: @octo-icon-twitter-square;\n    }\n}\n.octo-icon-facebook-square {\n    &:before {\n        content: @octo-icon-facebook-square;\n    }\n}\n.octo-icon-camera-retro {\n    &:before {\n        content: @octo-icon-camera-retro;\n    }\n}\n.octo-icon-key {\n    &:before {\n        content: @octo-icon-key;\n    }\n}\n.octo-icon-cogs {\n    &:before {\n        content: @octo-icon-cogs;\n    }\n}\n.octo-icon-comments {\n    &:before {\n        content: @octo-icon-comments;\n    }\n}\n.octo-icon-thumbs-o-down {\n    &:before {\n        content: @octo-icon-thumbs-o-down;\n    }\n}\n.octo-icon-heart-o {\n    &:before {\n        content: @octo-icon-heart-o;\n    }\n}\n.octo-icon-sign-out {\n    &:before {\n        content: @octo-icon-sign-out;\n    }\n}\n.octo-icon-linkedin-square {\n    &:before {\n        content: @octo-icon-linkedin-square;\n    }\n}\n.octo-icon-thumb-tack {\n    &:before {\n        content: @octo-icon-thumb-tack;\n    }\n}\n.octo-icon-external-link {\n    &:before {\n        content: @octo-icon-external-link;\n    }\n}\n.octo-icon-sign-in {\n    &:before {\n        content: @octo-icon-sign-in;\n    }\n}\n.octo-icon-trophy {\n    &:before {\n        content: @octo-icon-trophy;\n    }\n}\n.octo-icon-upload {\n    &:before {\n        content: @octo-icon-upload;\n    }\n}\n.octo-icon-lemon-o {\n    &:before {\n        content: @octo-icon-lemon-o;\n    }\n}\n.octo-icon-phone {\n    &:before {\n        content: @octo-icon-phone;\n    }\n}\n.octo-icon-square-o {\n    &:before {\n        content: @octo-icon-square-o;\n    }\n}\n.octo-icon-bookmark-o {\n    &:before {\n        content: @octo-icon-bookmark-o;\n    }\n}\n.octo-icon-phone-square {\n    &:before {\n        content: @octo-icon-phone-square;\n    }\n}\n.octo-icon-twitter {\n    &:before {\n        content: @octo-icon-twitter;\n    }\n}\n.octo-icon-facebook-f {\n    &:before {\n        content: @octo-icon-facebook-f;\n    }\n}\n.octo-icon-facebook {\n    &:before {\n        content: @octo-icon-facebook;\n    }\n}\n.octo-icon-unlock {\n    &:before {\n        content: @octo-icon-unlock;\n    }\n}\n.octo-icon-credit-card {\n    &:before {\n        content: @octo-icon-credit-card;\n    }\n}\n.octo-icon-feed {\n    &:before {\n        content: @octo-icon-feed;\n    }\n}\n.octo-icon-rss {\n    &:before {\n        content: @octo-icon-rss;\n    }\n}\n.octo-icon-hdd-o {\n    &:before {\n        content: @octo-icon-hdd-o;\n    }\n}\n.octo-icon-certificate {\n    &:before {\n        content: @octo-icon-certificate;\n    }\n}\n.octo-icon-arrow-circle-left {\n    &:before {\n        content: @octo-icon-arrow-circle-left;\n    }\n}\n.octo-icon-arrow-circle-down {\n    &:before {\n        content: @octo-icon-arrow-circle-down;\n    }\n}\n.octo-icon-wrench {\n    &:before {\n        content: @octo-icon-wrench;\n    }\n}\n.octo-icon-tasks {\n    &:before {\n        content: @octo-icon-tasks;\n    }\n}\n.octo-icon-filter {\n    &:before {\n        content: @octo-icon-filter;\n    }\n}\n.octo-icon-briefcase {\n    &:before {\n        content: @octo-icon-briefcase;\n    }\n}\n.octo-icon-arrows-alt {\n    &:before {\n        content: @octo-icon-arrows-alt;\n    }\n}\n.octo-icon-group {\n    &:before {\n        content: @octo-icon-group;\n    }\n}\n.octo-icon-chain {\n    &:before {\n        content: @octo-icon-chain;\n    }\n}\n.octo-icon-flask {\n    &:before {\n        content: @octo-icon-flask;\n    }\n}\n.octo-icon-cut {\n    &:before {\n        content: @octo-icon-cut;\n    }\n}\n.octo-icon-scissors {\n    &:before {\n        content: @octo-icon-scissors;\n    }\n}\n.octo-icon-copy {\n    &:before {\n        content: @octo-icon-copy;\n    }\n}\n.octo-icon-files-o {\n    &:before {\n        content: @octo-icon-files-o;\n    }\n}\n.octo-icon-square {\n    &:before {\n        content: @octo-icon-square;\n    }\n}\n.octo-icon-navicon {\n    &:before {\n        content: @octo-icon-navicon;\n    }\n}\n.octo-icon-reorder {\n    &:before {\n        content: @octo-icon-reorder;\n    }\n}\n.octo-icon-bars {\n    &:before {\n        content: @octo-icon-bars;\n    }\n}\n.octo-icon-list-ul {\n    &:before {\n        content: @octo-icon-list-ul;\n    }\n}\n.octo-icon-list-ol {\n    &:before {\n        content: @octo-icon-list-ol;\n    }\n}\n.octo-icon-strikethrough {\n    &:before {\n        content: @octo-icon-strikethrough;\n    }\n}\n.octo-icon-magic {\n    &:before {\n        content: @octo-icon-magic;\n    }\n}\n.octo-icon-truck {\n    &:before {\n        content: @octo-icon-truck;\n    }\n}\n.octo-icon-pinterest {\n    &:before {\n        content: @octo-icon-pinterest;\n    }\n}\n.octo-icon-pinterest-square {\n    &:before {\n        content: @octo-icon-pinterest-square;\n    }\n}\n.octo-icon-google-plus-square {\n    &:before {\n        content: @octo-icon-google-plus-square;\n    }\n}\n.octo-icon-google-plus {\n    &:before {\n        content: @octo-icon-google-plus;\n    }\n}\n.octo-icon-caret-down {\n    &:before {\n        content: @octo-icon-caret-down;\n    }\n}\n.octo-icon-caret-up {\n    &:before {\n        content: @octo-icon-caret-up;\n    }\n}\n.octo-icon-caret-left {\n    &:before {\n        content: @octo-icon-caret-left;\n    }\n}\n.octo-icon-caret-right {\n    &:before {\n        content: @octo-icon-caret-right;\n    }\n}\n.octo-icon-columns {\n    &:before {\n        content: @octo-icon-columns;\n    }\n}\n.octo-icon-sort {\n    &:before {\n        content: @octo-icon-sort;\n    }\n}\n.octo-icon-sort-down {\n    &:before {\n        content: @octo-icon-sort-down;\n    }\n}\n.octo-icon-sort-desc {\n    &:before {\n        content: @octo-icon-sort-desc;\n    }\n}\n.octo-icon-sort-up {\n    &:before {\n        content: @octo-icon-sort-up;\n    }\n}\n.octo-icon-sort-asc {\n    &:before {\n        content: @octo-icon-sort-asc;\n    }\n}\n.octo-icon-linkedin {\n    &:before {\n        content: @octo-icon-linkedin;\n    }\n}\n.octo-icon-rotate-left {\n    &:before {\n        content: @octo-icon-rotate-left;\n    }\n}\n.octo-icon-legal {\n    &:before {\n        content: @octo-icon-legal;\n    }\n}\n.octo-icon-gavel {\n    &:before {\n        content: @octo-icon-gavel;\n    }\n}\n.octo-icon-dashboard {\n    &:before {\n        content: @octo-icon-dashboard;\n    }\n}\n.octo-icon-tachometer {\n    &:before {\n        content: @octo-icon-tachometer;\n    }\n}\n.octo-icon-comment-o {\n    &:before {\n        content: @octo-icon-comment-o;\n    }\n}\n.octo-icon-comments-o {\n    &:before {\n        content: @octo-icon-comments-o;\n    }\n}\n.octo-icon-sitemap {\n    &:before {\n        content: @octo-icon-sitemap;\n    }\n}\n.octo-icon-umbrella {\n    &:before {\n        content: @octo-icon-umbrella;\n    }\n}\n.octo-icon-clipboard {\n    &:before {\n        content: @octo-icon-clipboard;\n    }\n}\n.octo-icon-lightbulb-o {\n    &:before {\n        content: @octo-icon-lightbulb-o;\n    }\n}\n.octo-icon-exchange {\n    &:before {\n        content: @octo-icon-exchange;\n    }\n}\n.octo-icon-user-md {\n    &:before {\n        content: @octo-icon-user-md;\n    }\n}\n.octo-icon-stethoscope {\n    &:before {\n        content: @octo-icon-stethoscope;\n    }\n}\n.octo-icon-suitcase {\n    &:before {\n        content: @octo-icon-suitcase;\n    }\n}\n.octo-icon-bell-o {\n    &:before {\n        content: @octo-icon-bell-o;\n    }\n}\n.octo-icon-coffee {\n    &:before {\n        content: @octo-icon-coffee;\n    }\n}\n.octo-icon-file-text-o {\n    &:before {\n        content: @octo-icon-file-text-o;\n    }\n}\n.octo-icon-building-o {\n    &:before {\n        content: @octo-icon-building-o;\n    }\n}\n.octo-icon-hospital-o {\n    &:before {\n        content: @octo-icon-hospital-o;\n    }\n}\n.octo-icon-ambulance {\n    &:before {\n        content: @octo-icon-ambulance;\n    }\n}\n.octo-icon-medkit {\n    &:before {\n        content: @octo-icon-medkit;\n    }\n}\n.octo-icon-fighter-jet {\n    &:before {\n        content: @octo-icon-fighter-jet;\n    }\n}\n.octo-icon-beer {\n    &:before {\n        content: @octo-icon-beer;\n    }\n}\n.octo-icon-h-square {\n    &:before {\n        content: @octo-icon-h-square;\n    }\n}\n.octo-icon-plus-square {\n    &:before {\n        content: @octo-icon-plus-square;\n    }\n}\n.octo-icon-angle-double-left {\n    &:before {\n        content: @octo-icon-angle-double-left;\n    }\n}\n.octo-icon-angle-double-right {\n    &:before {\n        content: @octo-icon-angle-double-right;\n    }\n}\n.octo-icon-angle-double-up {\n    &:before {\n        content: @octo-icon-angle-double-up;\n    }\n}\n.octo-icon-angle-double-down {\n    &:before {\n        content: @octo-icon-angle-double-down;\n    }\n}\n.octo-icon-angle-left {\n    &:before {\n        content: @octo-icon-angle-left;\n    }\n}\n.octo-icon-angle-right {\n    &:before {\n        content: @octo-icon-angle-right;\n    }\n}\n.octo-icon-desktop {\n    &:before {\n        content: @octo-icon-desktop;\n    }\n}\n.octo-icon-laptop {\n    &:before {\n        content: @octo-icon-laptop;\n    }\n}\n.octo-icon-tablet {\n    &:before {\n        content: @octo-icon-tablet;\n    }\n}\n.octo-icon-mobile-phone {\n    &:before {\n        content: @octo-icon-mobile-phone;\n    }\n}\n.octo-icon-mobile {\n    &:before {\n        content: @octo-icon-mobile;\n    }\n}\n.octo-icon-circle-o {\n    &:before {\n        content: @octo-icon-circle-o;\n    }\n}\n.octo-icon-quote-left {\n    &:before {\n        content: @octo-icon-quote-left;\n    }\n}\n.octo-icon-quote-right {\n    &:before {\n        content: @octo-icon-quote-right;\n    }\n}\n.octo-icon-spinner {\n    &:before {\n        content: @octo-icon-spinner;\n    }\n}\n.octo-icon-circle {\n    &:before {\n        content: @octo-icon-circle;\n    }\n}\n.octo-icon-mail-reply {\n    &:before {\n        content: @octo-icon-mail-reply;\n    }\n}\n.octo-icon-reply {\n    &:before {\n        content: @octo-icon-reply;\n    }\n}\n.octo-icon-folder-o {\n    &:before {\n        content: @octo-icon-folder-o;\n    }\n}\n.octo-icon-folder-open-o {\n    &:before {\n        content: @octo-icon-folder-open-o;\n    }\n}\n.octo-icon-smile-o {\n    &:before {\n        content: @octo-icon-smile-o;\n    }\n}\n.octo-icon-frown-o {\n    &:before {\n        content: @octo-icon-frown-o;\n    }\n}\n.octo-icon-meh-o {\n    &:before {\n        content: @octo-icon-meh-o;\n    }\n}\n.octo-icon-keyboard-o {\n    &:before {\n        content: @octo-icon-keyboard-o;\n    }\n}\n.octo-icon-flag-checkered {\n    &:before {\n        content: @octo-icon-flag-checkered;\n    }\n}\n.octo-icon-terminal {\n    &:before {\n        content: @octo-icon-terminal;\n    }\n}\n.octo-icon-code {\n    &:before {\n        content: @octo-icon-code;\n    }\n}\n.octo-icon-mail-reply-all {\n    &:before {\n        content: @octo-icon-mail-reply-all;\n    }\n}\n.octo-icon-reply-all {\n    &:before {\n        content: @octo-icon-reply-all;\n    }\n}\n.octo-icon-location-arrow {\n    &:before {\n        content: @octo-icon-location-arrow;\n    }\n}\n.octo-icon-crop {\n    &:before {\n        content: @octo-icon-crop;\n    }\n}\n.octo-icon-chain-broken {\n    &:before {\n        content: @octo-icon-chain-broken;\n    }\n}\n.octo-icon-question {\n    &:before {\n        content: @octo-icon-question;\n    }\n}\n.octo-icon-exclamation {\n    &:before {\n        content: @octo-icon-exclamation;\n    }\n}\n.octo-icon-superscript {\n    &:before {\n        content: @octo-icon-superscript;\n    }\n}\n.octo-icon-subscript {\n    &:before {\n        content: @octo-icon-subscript;\n    }\n}\n.octo-icon-puzzle-piece {\n    &:before {\n        content: @octo-icon-puzzle-piece;\n    }\n}\n.octo-icon-microphone {\n    &:before {\n        content: @octo-icon-microphone;\n    }\n}\n.octo-icon-microphone-slash {\n    &:before {\n        content: @octo-icon-microphone-slash;\n    }\n}\n.octo-icon-shield {\n    &:before {\n        content: @octo-icon-shield;\n    }\n}\n.octo-icon-calendar-o {\n    &:before {\n        content: @octo-icon-calendar-o;\n    }\n}\n.octo-icon-fire-extinguisher {\n    &:before {\n        content: @octo-icon-fire-extinguisher;\n    }\n}\n.octo-icon-rocket {\n    &:before {\n        content: @octo-icon-rocket;\n    }\n}\n.octo-icon-chevron-circle-left {\n    &:before {\n        content: @octo-icon-chevron-circle-left;\n    }\n}\n.octo-icon-chevron-circle-right {\n    &:before {\n        content: @octo-icon-chevron-circle-right;\n    }\n}\n.octo-icon-chevron-circle-up {\n    &:before {\n        content: @octo-icon-chevron-circle-up;\n    }\n}\n.octo-icon-chevron-circle-down {\n    &:before {\n        content: @octo-icon-chevron-circle-down;\n    }\n}\n.octo-icon-html5 {\n    &:before {\n        content: @octo-icon-html5;\n    }\n}\n.octo-icon-css3 {\n    &:before {\n        content: @octo-icon-css3;\n    }\n}\n.octo-icon-anchor {\n    &:before {\n        content: @octo-icon-anchor;\n    }\n}\n.octo-icon-unlock-alt {\n    &:before {\n        content: @octo-icon-unlock-alt;\n    }\n}\n.octo-icon-bullseye {\n    &:before {\n        content: @octo-icon-bullseye;\n    }\n}\n.octo-icon-rss-square {\n    &:before {\n        content: @octo-icon-rss-square;\n    }\n}\n.octo-icon-minus-square {\n    &:before {\n        content: @octo-icon-minus-square;\n    }\n}\n.octo-icon-minus-square-o {\n    &:before {\n        content: @octo-icon-minus-square-o;\n    }\n}\n.octo-icon-level-down {\n    &:before {\n        content: @octo-icon-level-down;\n    }\n}\n.octo-icon-toggle-down {\n    &:before {\n        content: @octo-icon-toggle-down;\n    }\n}\n.octo-icon-caret-square-o-down {\n    &:before {\n        content: @octo-icon-caret-square-o-down;\n    }\n}\n.octo-icon-toggle-up {\n    &:before {\n        content: @octo-icon-toggle-up;\n    }\n}\n.octo-icon-caret-square-o-up {\n    &:before {\n        content: @octo-icon-caret-square-o-up;\n    }\n}\n.octo-icon-caret-square-o-right {\n    &:before {\n        content: @octo-icon-caret-square-o-right;\n    }\n}\n.octo-icon-euro {\n    &:before {\n        content: @octo-icon-euro;\n    }\n}\n.octo-icon-sort-numeric-asc {\n    &:before {\n        content: @octo-icon-sort-numeric-asc;\n    }\n}\n.octo-icon-sort-numeric-desc {\n    &:before {\n        content: @octo-icon-sort-numeric-desc;\n    }\n}\n.octo-icon-eur {\n    &:before {\n        content: @octo-icon-eur;\n    }\n}\n.octo-icon-gbp {\n    &:before {\n        content: @octo-icon-gbp;\n    }\n}\n.octo-icon-dollar {\n    &:before {\n        content: @octo-icon-dollar;\n    }\n}\n.octo-icon-usd {\n    &:before {\n        content: @octo-icon-usd;\n    }\n}\n.octo-icon-bitcoin {\n    &:before {\n        content: @octo-icon-bitcoin;\n    }\n}\n.octo-icon-btc {\n    &:before {\n        content: @octo-icon-btc;\n    }\n}\n.octo-icon-file-text {\n    &:before {\n        content: @octo-icon-file-text;\n    }\n}\n.octo-icon-thumbs-up {\n    &:before {\n        content: @octo-icon-thumbs-up;\n    }\n}\n.octo-icon-thumbs-down {\n    &:before {\n        content: @octo-icon-thumbs-down;\n    }\n}\n.octo-icon-youtube-square {\n    &:before {\n        content: @octo-icon-youtube-square;\n    }\n}\n.octo-icon-youtube {\n    &:before {\n        content: @octo-icon-youtube;\n    }\n}\n.octo-icon-xing {\n    &:before {\n        content: @octo-icon-xing;\n    }\n}\n.octo-icon-xing-square {\n    &:before {\n        content: @octo-icon-xing-square;\n    }\n}\n.octo-icon-youtube-play {\n    &:before {\n        content: @octo-icon-youtube-play;\n    }\n}\n.octo-icon-dropbox {\n    &:before {\n        content: @octo-icon-dropbox;\n    }\n}\n.octo-icon-stack-overflow {\n    &:before {\n        content: @octo-icon-stack-overflow;\n    }\n}\n.octo-icon-instagram {\n    &:before {\n        content: @octo-icon-instagram;\n    }\n}\n.octo-icon-flickr {\n    &:before {\n        content: @octo-icon-flickr;\n    }\n}\n.octo-icon-tumblr {\n    &:before {\n        content: @octo-icon-tumblr;\n    }\n}\n.octo-icon-tumblr-square {\n    &:before {\n        content: @octo-icon-tumblr-square;\n    }\n}\n.octo-icon-long-arrow-down {\n    &:before {\n        content: @octo-icon-long-arrow-down;\n    }\n}\n.octo-icon-long-arrow-up {\n    &:before {\n        content: @octo-icon-long-arrow-up;\n    }\n}\n.octo-icon-long-arrow-left {\n    &:before {\n        content: @octo-icon-long-arrow-left;\n    }\n}\n.octo-icon-long-arrow-right {\n    &:before {\n        content: @octo-icon-long-arrow-right;\n    }\n}\n.octo-icon-apple {\n    &:before {\n        content: @octo-icon-apple;\n    }\n}\n.octo-icon-windows {\n    &:before {\n        content: @octo-icon-windows;\n    }\n}\n.octo-icon-android {\n    &:before {\n        content: @octo-icon-android;\n    }\n}\n.octo-icon-dribbble {\n    &:before {\n        content: @octo-icon-dribbble;\n    }\n}\n.octo-icon-foursquare {\n    &:before {\n        content: @octo-icon-foursquare;\n    }\n}\n.octo-icon-female {\n    &:before {\n        content: @octo-icon-female;\n    }\n}\n.octo-icon-male {\n    &:before {\n        content: @octo-icon-male;\n    }\n}\n.octo-icon-sun-o {\n    &:before {\n        content: @octo-icon-sun-o;\n    }\n}\n.octo-icon-moon-o {\n    &:before {\n        content: @octo-icon-moon-o;\n    }\n}\n.octo-icon-archive {\n    &:before {\n        content: @octo-icon-archive;\n    }\n}\n.octo-icon-bug {\n    &:before {\n        content: @octo-icon-bug;\n    }\n}\n.octo-icon-vk {\n    &:before {\n        content: @octo-icon-vk;\n    }\n}\n.octo-icon-weibo {\n    &:before {\n        content: @octo-icon-weibo;\n    }\n}\n.octo-icon-renren {\n    &:before {\n        content: @octo-icon-renren;\n    }\n}\n.octo-icon-arrow-circle-o-right {\n    &:before {\n        content: @octo-icon-arrow-circle-o-right;\n    }\n}\n.octo-icon-arrow-circle-o-left {\n    &:before {\n        content: @octo-icon-arrow-circle-o-left;\n    }\n}\n.octo-icon-caret-square-o-left {\n    &:before {\n        content: @octo-icon-caret-square-o-left;\n    }\n}\n.octo-icon-dot-circle-o {\n    &:before {\n        content: @octo-icon-dot-circle-o;\n    }\n}\n.octo-icon-wheelchair {\n    &:before {\n        content: @octo-icon-wheelchair;\n    }\n}\n.octo-icon-plus-square-o {\n    &:before {\n        content: @octo-icon-plus-square-o;\n    }\n}\n.octo-icon-space-shuttle {\n    &:before {\n        content: @octo-icon-space-shuttle;\n    }\n}\n.octo-icon-envelope-square {\n    &:before {\n        content: @octo-icon-envelope-square;\n    }\n}\n.octo-icon-institution {\n    &:before {\n        content: @octo-icon-institution;\n    }\n}\n.octo-icon-bank {\n    &:before {\n        content: @octo-icon-bank;\n    }\n}\n.octo-icon-university {\n    &:before {\n        content: @octo-icon-university;\n    }\n}\n.octo-icon-mortar-board {\n    &:before {\n        content: @octo-icon-mortar-board;\n    }\n}\n.octo-icon-yahoo {\n    &:before {\n        content: @octo-icon-yahoo;\n    }\n}\n.octo-icon-reddit {\n    &:before {\n        content: @octo-icon-reddit;\n    }\n}\n.octo-icon-reddit-square {\n    &:before {\n        content: @octo-icon-reddit-square;\n    }\n}\n.octo-icon-delicious {\n    &:before {\n        content: @octo-icon-delicious;\n    }\n}\n.octo-icon-digg {\n    &:before {\n        content: @octo-icon-digg;\n    }\n}\n.octo-icon-drupal {\n    &:before {\n        content: @octo-icon-drupal;\n    }\n}\n.octo-icon-language {\n    &:before {\n        content: @octo-icon-language;\n    }\n}\n.octo-icon-building {\n    &:before {\n        content: @octo-icon-building;\n    }\n}\n.octo-icon-paw {\n    &:before {\n        content: @octo-icon-paw;\n    }\n}\n.octo-icon-spoon {\n    &:before {\n        content: @octo-icon-spoon;\n    }\n}\n.octo-icon-steam {\n    &:before {\n        content: @octo-icon-steam;\n    }\n}\n.octo-icon-steam-square {\n    &:before {\n        content: @octo-icon-steam-square;\n    }\n}\n.octo-icon-automobile {\n    &:before {\n        content: @octo-icon-automobile;\n    }\n}\n.octo-icon-car {\n    &:before {\n        content: @octo-icon-car;\n    }\n}\n.octo-icon-cab {\n    &:before {\n        content: @octo-icon-cab;\n    }\n}\n.octo-icon-taxi {\n    &:before {\n        content: @octo-icon-taxi;\n    }\n}\n.octo-icon-tree {\n    &:before {\n        content: @octo-icon-tree;\n    }\n}\n.octo-icon-database {\n    &:before {\n        content: @octo-icon-database;\n    }\n}\n.octo-icon-file-pdf-o {\n    &:before {\n        content: @octo-icon-file-pdf-o;\n    }\n}\n.octo-icon-file-word-o {\n    &:before {\n        content: @octo-icon-file-word-o;\n    }\n}\n.octo-icon-file-excel-o {\n    &:before {\n        content: @octo-icon-file-excel-o;\n    }\n}\n.octo-icon-file-powerpoint-o {\n    &:before {\n        content: @octo-icon-file-powerpoint-o;\n    }\n}\n.octo-icon-file-photo-o {\n    &:before {\n        content: @octo-icon-file-photo-o;\n    }\n}\n.octo-icon-file-picture-o {\n    &:before {\n        content: @octo-icon-file-picture-o;\n    }\n}\n.octo-icon-file-image-o {\n    &:before {\n        content: @octo-icon-file-image-o;\n    }\n}\n.octo-icon-file-zip-o {\n    &:before {\n        content: @octo-icon-file-zip-o;\n    }\n}\n.octo-icon-file-archive-o {\n    &:before {\n        content: @octo-icon-file-archive-o;\n    }\n}\n.octo-icon-file-sound-o {\n    &:before {\n        content: @octo-icon-file-sound-o;\n    }\n}\n.octo-icon-file-audio-o {\n    &:before {\n        content: @octo-icon-file-audio-o;\n    }\n}\n.octo-icon-file-video-o {\n    &:before {\n        content: @octo-icon-file-video-o;\n    }\n}\n.octo-icon-file-code-o {\n    &:before {\n        content: @octo-icon-file-code-o;\n    }\n}\n.octo-icon-vine {\n    &:before {\n        content: @octo-icon-vine;\n    }\n}\n.octo-icon-life-bouy {\n    &:before {\n        content: @octo-icon-life-bouy;\n    }\n}\n.octo-icon-life-buoy {\n    &:before {\n        content: @octo-icon-life-buoy;\n    }\n}\n.octo-icon-life-saver {\n    &:before {\n        content: @octo-icon-life-saver;\n    }\n}\n.octo-icon-support {\n    &:before {\n        content: @octo-icon-support;\n    }\n}\n.octo-icon-life-ring {\n    &:before {\n        content: @octo-icon-life-ring;\n    }\n}\n.octo-icon-ra {\n    &:before {\n        content: @octo-icon-ra;\n    }\n}\n.octo-icon-empire {\n    &:before {\n        content: @octo-icon-empire;\n    }\n}\n.octo-icon-tencent-weibo {\n    &:before {\n        content: @octo-icon-tencent-weibo;\n    }\n}\n.octo-icon-send {\n    &:before {\n        content: @octo-icon-send;\n    }\n}\n.octo-icon-paper-plane {\n    &:before {\n        content: @octo-icon-paper-plane;\n    }\n}\n.octo-icon-send-o {\n    &:before {\n        content: @octo-icon-send-o;\n    }\n}\n.octo-icon-paper-plane-o {\n    &:before {\n        content: @octo-icon-paper-plane-o;\n    }\n}\n.octo-icon-history {\n    &:before {\n        content: @octo-icon-history;\n    }\n}\n.octo-icon-circle-thin {\n    &:before {\n        content: @octo-icon-circle-thin;\n    }\n}\n.octo-icon-paragraph {\n    &:before {\n        content: @octo-icon-paragraph;\n    }\n}\n.octo-icon-sliders {\n    &:before {\n        content: @octo-icon-sliders;\n    }\n}\n.octo-icon-share-alt {\n    &:before {\n        content: @octo-icon-share-alt;\n    }\n}\n.octo-icon-share-alt-square {\n    &:before {\n        content: @octo-icon-share-alt-square;\n    }\n}\n.octo-icon-bomb {\n    &:before {\n        content: @octo-icon-bomb;\n    }\n}\n.octo-icon-soccer-ball-o {\n    &:before {\n        content: @octo-icon-soccer-ball-o;\n    }\n}\n.octo-icon-futbol-o {\n    &:before {\n        content: @octo-icon-futbol-o;\n    }\n}\n.octo-icon-tty {\n    &:before {\n        content: @octo-icon-tty;\n    }\n}\n.octo-icon-binoculars {\n    &:before {\n        content: @octo-icon-binoculars;\n    }\n}\n.octo-icon-twitch {\n    &:before {\n        content: @octo-icon-twitch;\n    }\n}\n.octo-icon-yelp {\n    &:before {\n        content: @octo-icon-yelp;\n    }\n}\n.octo-icon-newspaper-o {\n    &:before {\n        content: @octo-icon-newspaper-o;\n    }\n}\n.octo-icon-wifi {\n    &:before {\n        content: @octo-icon-wifi;\n    }\n}\n.octo-icon-calculator {\n    &:before {\n        content: @octo-icon-calculator;\n    }\n}\n.octo-icon-paypal {\n    &:before {\n        content: @octo-icon-paypal;\n    }\n}\n.octo-icon-cc-visa {\n    &:before {\n        content: @octo-icon-cc-visa;\n    }\n}\n.octo-icon-cc-mastercard {\n    &:before {\n        content: @octo-icon-cc-mastercard;\n    }\n}\n.octo-icon-cc-discover {\n    &:before {\n        content: @octo-icon-cc-discover;\n    }\n}\n.octo-icon-cc-amex {\n    &:before {\n        content: @octo-icon-cc-amex;\n    }\n}\n.octo-icon-cc-paypal {\n    &:before {\n        content: @octo-icon-cc-paypal;\n    }\n}\n.octo-icon-cc-stripe {\n    &:before {\n        content: @octo-icon-cc-stripe;\n    }\n}\n.octo-icon-bell-slash {\n    &:before {\n        content: @octo-icon-bell-slash;\n    }\n}\n.octo-icon-bell-slash-o {\n    &:before {\n        content: @octo-icon-bell-slash-o;\n    }\n}\n.octo-icon-at {\n    &:before {\n        content: @octo-icon-at;\n    }\n}\n.octo-icon-paint-brush {\n    &:before {\n        content: @octo-icon-paint-brush;\n    }\n}\n.octo-icon-birthday-cake {\n    &:before {\n        content: @octo-icon-birthday-cake;\n    }\n}\n.octo-icon-area-chart {\n    &:before {\n        content: @octo-icon-area-chart;\n    }\n}\n.octo-icon-pie-chart {\n    &:before {\n        content: @octo-icon-pie-chart;\n    }\n}\n.octo-icon-line-chart {\n    &:before {\n        content: @octo-icon-line-chart;\n    }\n}\n.octo-icon-lastfm {\n    &:before {\n        content: @octo-icon-lastfm;\n    }\n}\n.octo-icon-lastfm-square {\n    &:before {\n        content: @octo-icon-lastfm-square;\n    }\n}\n.octo-icon-toggle-off {\n    &:before {\n        content: @octo-icon-toggle-off;\n    }\n}\n.octo-icon-toggle-on {\n    &:before {\n        content: @octo-icon-toggle-on;\n    }\n}\n.octo-icon-bicycle {\n    &:before {\n        content: @octo-icon-bicycle;\n    }\n}\n.octo-icon-bus {\n    &:before {\n        content: @octo-icon-bus;\n    }\n}\n.octo-icon-cc {\n    &:before {\n        content: @octo-icon-cc;\n    }\n}\n.octo-icon-cart-plus {\n    &:before {\n        content: @octo-icon-cart-plus;\n    }\n}\n.octo-icon-cart-arrow-down {\n    &:before {\n        content: @octo-icon-cart-arrow-down;\n    }\n}\n.octo-icon-diamond {\n    &:before {\n        content: @octo-icon-diamond;\n    }\n}\n.octo-icon-ship {\n    &:before {\n        content: @octo-icon-ship;\n    }\n}\n.octo-icon-street-view {\n    &:before {\n        content: @octo-icon-street-view;\n    }\n}\n.octo-icon-heartbeat {\n    &:before {\n        content: @octo-icon-heartbeat;\n    }\n}\n.octo-icon-venus {\n    &:before {\n        content: @octo-icon-venus;\n    }\n}\n.octo-icon-mars {\n    &:before {\n        content: @octo-icon-mars;\n    }\n}\n.octo-icon-transgender {\n    &:before {\n        content: @octo-icon-transgender;\n    }\n}\n.octo-icon-transgender-alt {\n    &:before {\n        content: @octo-icon-transgender-alt;\n    }\n}\n.octo-icon-facebook-official {\n    &:before {\n        content: @octo-icon-facebook-official;\n    }\n}\n.octo-icon-pinterest-p {\n    &:before {\n        content: @octo-icon-pinterest-p;\n    }\n}\n.octo-icon-whatsapp {\n    &:before {\n        content: @octo-icon-whatsapp;\n    }\n}\n.octo-icon-server {\n    &:before {\n        content: @octo-icon-server;\n    }\n}\n.octo-icon-user-plus {\n    &:before {\n        content: @octo-icon-user-plus;\n    }\n}\n.octo-icon-hotel {\n    &:before {\n        content: @octo-icon-hotel;\n    }\n}\n.octo-icon-bed {\n    &:before {\n        content: @octo-icon-bed;\n    }\n}\n.octo-icon-train {\n    &:before {\n        content: @octo-icon-train;\n    }\n}\n.octo-icon-subway {\n    &:before {\n        content: @octo-icon-subway;\n    }\n}\n.octo-icon-battery-4 {\n    &:before {\n        content: @octo-icon-battery-4;\n    }\n}\n.octo-icon-battery {\n    &:before {\n        content: @octo-icon-battery;\n    }\n}\n.octo-icon-battery-full {\n    &:before {\n        content: @octo-icon-battery-full;\n    }\n}\n.octo-icon-battery-3 {\n    &:before {\n        content: @octo-icon-battery-3;\n    }\n}\n.octo-icon-battery-three-quarters {\n    &:before {\n        content: @octo-icon-battery-three-quarters;\n    }\n}\n.octo-icon-battery-2 {\n    &:before {\n        content: @octo-icon-battery-2;\n    }\n}\n.octo-icon-battery-half {\n    &:before {\n        content: @octo-icon-battery-half;\n    }\n}\n.octo-icon-battery-1 {\n    &:before {\n        content: @octo-icon-battery-1;\n    }\n}\n.octo-icon-battery-quarter {\n    &:before {\n        content: @octo-icon-battery-quarter;\n    }\n}\n.octo-icon-battery-0 {\n    &:before {\n        content: @octo-icon-battery-0;\n    }\n}\n.octo-icon-battery-empty {\n    &:before {\n        content: @octo-icon-battery-empty;\n    }\n}\n.octo-icon-mouse-pointer {\n    &:before {\n        content: @octo-icon-mouse-pointer;\n    }\n}\n.octo-icon-i-cursor {\n    &:before {\n        content: @octo-icon-i-cursor;\n    }\n}\n.octo-icon-clone {\n    &:before {\n        content: @octo-icon-clone;\n    }\n}\n.octo-icon-balance-scale {\n    &:before {\n        content: @octo-icon-balance-scale;\n    }\n}\n.octo-icon-hourglass-1 {\n    &:before {\n        content: @octo-icon-hourglass-1;\n    }\n}\n.octo-icon-hourglass-start {\n    &:before {\n        content: @octo-icon-hourglass-start;\n    }\n}\n.octo-icon-hourglass-half {\n    &:before {\n        content: @octo-icon-hourglass-half;\n    }\n}\n.octo-icon-odnoklassniki {\n    &:before {\n        content: @octo-icon-odnoklassniki;\n    }\n}\n.octo-icon-odnoklassniki-square {\n    &:before {\n        content: @octo-icon-odnoklassniki-square;\n    }\n}\n.octo-icon-wikipedia-w {\n    &:before {\n        content: @octo-icon-wikipedia-w;\n    }\n}\n.octo-icon-tv {\n    &:before {\n        content: @octo-icon-tv;\n    }\n}\n.octo-icon-television {\n    &:before {\n        content: @octo-icon-television;\n    }\n}\n.octo-icon-px {\n    &:before {\n        content: @octo-icon-px;\n    }\n}\n.octo-icon-amazon {\n    &:before {\n        content: @octo-icon-amazon;\n    }\n}\n.octo-icon-calendar-plus-o {\n    &:before {\n        content: @octo-icon-calendar-plus-o;\n    }\n}\n.octo-icon-calendar-minus-o {\n    &:before {\n        content: @octo-icon-calendar-minus-o;\n    }\n}\n.octo-icon-calendar-times-o {\n    &:before {\n        content: @octo-icon-calendar-times-o;\n    }\n}\n.octo-icon-calendar-check-o {\n    &:before {\n        content: @octo-icon-calendar-check-o;\n    }\n}\n.octo-icon-industry {\n    &:before {\n        content: @octo-icon-industry;\n    }\n}\n.octo-icon-map-signs {\n    &:before {\n        content: @octo-icon-map-signs;\n    }\n}\n.octo-icon-commenting {\n    &:before {\n        content: @octo-icon-commenting;\n    }\n}\n.octo-icon-black-tie {\n    &:before {\n        content: @octo-icon-black-tie;\n    }\n}\n.octo-icon-reddit-alien {\n    &:before {\n        content: @octo-icon-reddit-alien;\n    }\n}\n.octo-icon-credit-card-alt {\n    &:before {\n        content: @octo-icon-credit-card-alt;\n    }\n}\n.octo-icon-scribd {\n    &:before {\n        content: @octo-icon-scribd;\n    }\n}\n.octo-icon-usb {\n    &:before {\n        content: @octo-icon-usb;\n    }\n}\n.octo-icon-pause-circle {\n    &:before {\n        content: @octo-icon-pause-circle;\n    }\n}\n.octo-icon-pause-circle-o {\n    &:before {\n        content: @octo-icon-pause-circle-o;\n    }\n}\n.octo-icon-stop-circle {\n    &:before {\n        content: @octo-icon-stop-circle;\n    }\n}\n.octo-icon-stop-circle-o {\n    &:before {\n        content: @octo-icon-stop-circle-o;\n    }\n}\n.octo-icon-shopping-bag {\n    &:before {\n        content: @octo-icon-shopping-bag;\n    }\n}\n.octo-icon-shopping-basket {\n    &:before {\n        content: @octo-icon-shopping-basket;\n    }\n}\n.octo-icon-hashtag {\n    &:before {\n        content: @octo-icon-hashtag;\n    }\n}\n.octo-icon-bluetooth-b {\n    &:before {\n        content: @octo-icon-bluetooth-b;\n    }\n}\n.octo-icon-wheelchair-alt {\n    &:before {\n        content: @octo-icon-wheelchair-alt;\n    }\n}\n.octo-icon-question-circle-o {\n    &:before {\n        content: @octo-icon-question-circle-o;\n    }\n}\n.octo-icon-blind {\n    &:before {\n        content: @octo-icon-blind;\n    }\n}\n.octo-icon-volume-control-phone {\n    &:before {\n        content: @octo-icon-volume-control-phone;\n    }\n}\n.octo-icon-braille {\n    &:before {\n        content: @octo-icon-braille;\n    }\n}\n.octo-icon-snapchat {\n    &:before {\n        content: @octo-icon-snapchat;\n    }\n}\n.octo-icon-snapchat-ghost {\n    &:before {\n        content: @octo-icon-snapchat-ghost;\n    }\n}\n.octo-icon-snapchat-square {\n    &:before {\n        content: @octo-icon-snapchat-square;\n    }\n}\n.octo-icon-google-plus-circle {\n    &:before {\n        content: @octo-icon-google-plus-circle;\n    }\n}\n.octo-icon-google-plus-official {\n    &:before {\n        content: @octo-icon-google-plus-official;\n    }\n}\n.octo-icon-handshake-o {\n    &:before {\n        content: @octo-icon-handshake-o;\n    }\n}\n.octo-icon-envelope-open {\n    &:before {\n        content: @octo-icon-envelope-open;\n    }\n}\n.octo-icon-envelope-open-o {\n    &:before {\n        content: @octo-icon-envelope-open-o;\n    }\n}\n.octo-icon-address-book {\n    &:before {\n        content: @octo-icon-address-book;\n    }\n}\n.octo-icon-address-book-o {\n    &:before {\n        content: @octo-icon-address-book-o;\n    }\n}\n.octo-icon-vcard {\n    &:before {\n        content: @octo-icon-vcard;\n    }\n}\n.octo-icon-address-card {\n    &:before {\n        content: @octo-icon-address-card;\n    }\n}\n.octo-icon-vcard-o {\n    &:before {\n        content: @octo-icon-vcard-o;\n    }\n}\n.octo-icon-address-card-o {\n    &:before {\n        content: @octo-icon-address-card-o;\n    }\n}\n.octo-icon-user-circle {\n    &:before {\n        content: @octo-icon-user-circle;\n    }\n}\n.octo-icon-user-circle-o {\n    &:before {\n        content: @octo-icon-user-circle-o;\n    }\n}\n.octo-icon-user-o {\n    &:before {\n        content: @octo-icon-user-o;\n    }\n}\n.octo-icon-id-badge {\n    &:before {\n        content: @octo-icon-id-badge;\n    }\n}\n.octo-icon-drivers-license {\n    &:before {\n        content: @octo-icon-drivers-license;\n    }\n}\n.octo-icon-id-card {\n    &:before {\n        content: @octo-icon-id-card;\n    }\n}\n.octo-icon-drivers-license-o {\n    &:before {\n        content: @octo-icon-drivers-license-o;\n    }\n}\n.octo-icon-id-card-o {\n    &:before {\n        content: @octo-icon-id-card-o;\n    }\n}\n.octo-icon-quora {\n    &:before {\n        content: @octo-icon-quora;\n    }\n}\n.octo-icon-thermometer-4 {\n    &:before {\n        content: @octo-icon-thermometer-4;\n    }\n}\n.octo-icon-thermometer {\n    &:before {\n        content: @octo-icon-thermometer;\n    }\n}\n.octo-icon-thermometer-3 {\n    &:before {\n        content: @octo-icon-thermometer-3;\n    }\n}\n.octo-icon-thermometer-full {\n    &:before {\n        content: @octo-icon-thermometer-full;\n    }\n}\n.octo-icon-thermometer-three-quarters {\n    &:before {\n        content: @octo-icon-thermometer-three-quarters;\n    }\n}\n.octo-icon-thermometer-half {\n    &:before {\n        content: @octo-icon-thermometer-half;\n    }\n}\n.octo-icon-thermometer-2 {\n    &:before {\n        content: @octo-icon-thermometer-2;\n    }\n}\n.octo-icon-thermometer-1 {\n    &:before {\n        content: @octo-icon-thermometer-1;\n    }\n}\n.octo-icon-thermometer-quarter {\n    &:before {\n        content: @octo-icon-thermometer-quarter;\n    }\n}\n.octo-icon-thermometer-0 {\n    &:before {\n        content: @octo-icon-thermometer-0;\n    }\n}\n.octo-icon-thermometer-empty {\n    &:before {\n        content: @octo-icon-thermometer-empty;\n    }\n}\n.octo-icon-shower {\n    &:before {\n        content: @octo-icon-shower;\n    }\n}\n.octo-icon-window-maximize {\n    &:before {\n        content: @octo-icon-window-maximize;\n    }\n}\n.octo-icon-window-minimize {\n    &:before {\n        content: @octo-icon-window-minimize;\n    }\n}\n.octo-icon-window-restore {\n    &:before {\n        content: @octo-icon-window-restore;\n    }\n}\n.octo-icon-window-close {\n    &:before {\n        content: @octo-icon-window-close;\n    }\n}\n.octo-icon-etsy {\n    &:before {\n        content: @octo-icon-etsy;\n    }\n}\n.octo-icon-imdb {\n    &:before {\n        content: @octo-icon-imdb;\n    }\n}\n.octo-icon-microchip {\n    &:before {\n        content: @octo-icon-microchip;\n    }\n}\n.octo-icon-snowflake-o {\n    &:before {\n        content: @octo-icon-snowflake-o;\n    }\n}\n.octo-icon-meetup {\n    &:before {\n        content: @octo-icon-meetup;\n    }\n}\n.octo-icon-add-bold {\n    &:before {\n        content: @octo-icon-add-bold;\n    }\n}\n.octo-icon-layers-grid-add {\n    &:before {\n        content: @octo-icon-layers-grid-add;\n    }\n}\n.octo-icon-common-file-star {\n    &:before {\n        content: @octo-icon-common-file-star;\n    }\n}\n.octo-icon-set-parent {\n    &:before {\n        content: @octo-icon-set-parent;\n    }\n}\n.octo-icon-common-file-remove {\n    &:before {\n        content: @octo-icon-common-file-remove;\n    }\n}\n.octo-icon-common-file-sync {\n    &:before {\n        content: @octo-icon-common-file-sync;\n    }\n}\n.octo-icon-harddrive-upload {\n    &:before {\n        content: @octo-icon-harddrive-upload;\n    }\n}\n.octo-icon-common-file-upload {\n    &:before {\n        content: @octo-icon-common-file-upload;\n    }\n}\n.octo-icon-list-reorder {\n    &:before {\n        content: @octo-icon-list-reorder;\n    }\n}\n.octo-icon-keyboard-return {\n    &:before {\n        content: @octo-icon-keyboard-return;\n    }\n}\n.octo-icon-calendar-add {\n    &:before {\n        content: @octo-icon-calendar-add;\n    }\n}\n.octo-icon-calendar-3 {\n    &:before {\n        content: @octo-icon-calendar-3;\n    }\n}\n.octo-icon-calendar-disable {\n    &:before {\n        content: @octo-icon-calendar-disable;\n    }\n}\n.octo-icon-calendar-check {\n    &:before {\n        content: @octo-icon-calendar-check;\n    }\n}\n.octo-icon-calendar-clock {\n    &:before {\n        content: @octo-icon-calendar-clock;\n    }\n}\n.octo-icon-notes-edit-active .path1 {\n    &:before {\n        content: @octo-icon-notes-edit-active-path1;\n        color: rgb(255, 156, 9);\n    }\n}\n.octo-icon-notes-edit-active .path2 {\n    &:before {\n        content: @octo-icon-notes-edit-active-path2;\n        margin-left: -1em;\n        color: rgb(83, 96, 97);\n    }\n}\n.octo-icon-notes-edit {\n    &:before {\n        content: @octo-icon-notes-edit;\n    }\n}\n.octo-icon-calendar-check-1 {\n    &:before {\n        content: @octo-icon-calendar-check-1;\n    }\n}\n.octo-icon-user-actions-key {\n    &:before {\n        content: @octo-icon-user-actions-key;\n    }\n}\n.octo-icon-id-card-1 {\n    &:before {\n      content: @octo-icon-id-card-1;\n    }\n}\n.octo-icon-user-group {\n    &:before {\n        content: @octo-icon-user-group;\n    }\n}\n.octo-icon-translate {\n    &:before {\n        content: @octo-icon-translate;\n    }\n}\n.octo-icon-globe {\n    &:before {\n        content: @octo-icon-globe;\n    }\n}\n.octo-icon-code-snippet {\n    &:before {\n        content: @octo-icon-code-snippet;\n    }\n}\n.octo-icon-log-settings {\n    &:before {\n        content: @octo-icon-log-settings;\n    }\n}\n.octo-icon-lock {\n    &:before {\n        content: @octo-icon-lock;\n    }\n}\n.octo-icon-users {\n    &:before {\n        content: @octo-icon-users;\n    }\n}\n.octo-icon-power {\n    &:before {\n        content: @octo-icon-power;\n    }\n}\n.octo-icon-paint-brush-1 {\n    &:before {\n        content: @octo-icon-paint-brush-1;\n    }\n}\n.octo-icon-mail-templates {\n    &:before {\n        content: @octo-icon-mail-templates;\n    }\n}\n.octo-icon-mail-messages {\n    &:before {\n        content: @octo-icon-mail-messages;\n    }\n}\n.octo-icon-mail-settings {\n    &:before {\n        content: @octo-icon-mail-settings;\n    }\n}\n.octo-icon-mail-branding {\n    &:before {\n        content: @octo-icon-mail-branding;\n    }\n}\n.octo-icon-download {\n    &:before {\n        content: @octo-icon-download;\n    }\n}\n.octo-icon-plus {\n    &:before {\n        content: @octo-icon-plus;\n    }\n}\n.octo-icon-cross {\n    &:before {\n        content: @octo-icon-cross;\n    }\n}\n.octo-icon-callout-danger {\n    &:before {\n        content: @octo-icon-callout-danger;\n    }\n}\n.octo-icon-callout-success {\n    &:before {\n        content: @octo-icon-callout-success;\n    }\n}\n.octo-icon-callout-info {\n    &:before {\n        content: @octo-icon-callout-info;\n    }\n}\n.octo-icon-add-above {\n    &:before {\n        content: @octo-icon-add-above;\n    }\n}\n.octo-icon-add-below {\n    &:before {\n        content: @octo-icon-add-below;\n    }\n}\n.octo-icon-check-multi {\n    &:before {\n        content: @octo-icon-check-multi;\n    }\n}\n.octo-icon-unlink {\n    &:before {\n        content: @octo-icon-unlink;\n    }\n}\n.octo-icon-list-add {\n    &:before {\n        content: @octo-icon-list-add;\n    }\n}\n.octo-icon-list-remove {\n    &:before {\n        content: @octo-icon-list-remove;\n    }\n}\n.octo-icon-create {\n    &:before {\n        content: @octo-icon-create;\n    }\n}\n.octo-icon-preview {\n    &:before {\n        content: @octo-icon-preview;\n    }\n}\n.octo-icon-window-split {\n    &:before {\n        content: @octo-icon-window-split;\n    }\n}\n.octo-icon-eraser {\n    &:before {\n        content: @octo-icon-eraser;\n    }\n}\n.octo-icon-text-code-block {\n    &:before {\n        content: @octo-icon-text-code-block;\n    }\n}\n.octo-icon-text-h1 {\n    &:before {\n        content: @octo-icon-text-h1;\n    }\n}\n.octo-icon-text-h3 {\n    &:before {\n        content: @octo-icon-text-h3;\n    }\n}\n.octo-icon-text-h2 {\n    &:before {\n        content: @octo-icon-text-h2;\n    }\n}\n.octo-icon-text-insert-table {\n    &:before {\n        content: @octo-icon-text-insert-table;\n    }\n}\n.octo-icon-text-colors {\n    &:before {\n        content: @octo-icon-text-colors;\n    }\n}\n.octo-icon-text-emoticons {\n    &:before {\n        content: @octo-icon-text-emoticons;\n    }\n}\n.octo-icon-text-inline-style {\n    &:before {\n        content: @octo-icon-text-inline-style;\n    }\n}\n.octo-icon-volume {\n    &:before {\n        content: @octo-icon-volume;\n    }\n}\n.octo-icon-text-video {\n    &:before {\n        content: @octo-icon-text-video;\n    }\n}\n.octo-icon-edit-code {\n    &:before {\n        content: @octo-icon-edit-code;\n    }\n}\n.octo-icon-text-subscript {\n    &:before {\n        content: @octo-icon-text-subscript;\n    }\n}\n.octo-icon-text-superscript {\n    &:before {\n        content: @octo-icon-text-superscript;\n    }\n}\n.octo-icon-link {\n    &:before {\n        content: @octo-icon-link;\n    }\n}\n.octo-icon-text-strikethrough {\n    &:before {\n        content: @octo-icon-text-strikethrough;\n    }\n}\n.octo-icon-text-increase-indent {\n    &:before {\n        content: @octo-icon-text-increase-indent;\n    }\n}\n.octo-icon-text-decrease-indent {\n    &:before {\n        content: @octo-icon-text-decrease-indent;\n    }\n}\n.octo-icon-text-image {\n    &:before {\n        content: @octo-icon-text-image;\n    }\n}\n.octo-icon-redo {\n    &:before {\n        content: @octo-icon-redo;\n    }\n}\n.octo-icon-undo {\n    &:before {\n        content: @octo-icon-undo;\n    }\n}\n.octo-icon-attachment {\n    &:before {\n        content: @octo-icon-attachment;\n    }\n}\n.octo-icon-cursor-arrow {\n    &:before {\n        content: @octo-icon-cursor-arrow;\n    }\n}\n.octo-icon-text-clear-formatting {\n    &:before {\n        content: @octo-icon-text-clear-formatting;\n    }\n}\n.octo-icon-quote {\n    &:before {\n        content: @octo-icon-quote;\n    }\n}\n.octo-icon-text-format-ul {\n    &:before {\n        content: @octo-icon-text-format-ul;\n    }\n}\n.octo-icon-text-format-ol {\n    &:before {\n        content: @octo-icon-text-format-ol;\n    }\n}\n.octo-icon-text-justify {\n    &:before {\n        content: @octo-icon-text-justify;\n    }\n}\n.octo-icon-magic-wand {\n    &:before {\n        content: @octo-icon-magic-wand;\n    }\n}\n.octo-icon-horizontal-line {\n    &:before {\n        content: @octo-icon-horizontal-line;\n    }\n}\n.octo-icon-bold {\n    &:before {\n        content: @octo-icon-bold;\n    }\n}\n.octo-icon-text-left {\n    &:before {\n        content: @octo-icon-text-left;\n    }\n}\n.octo-icon-text-right {\n    &:before {\n        content: @octo-icon-text-right;\n    }\n}\n.octo-icon-text-center {\n    &:before {\n        content: @octo-icon-text-center;\n    }\n}\n.octo-icon-italic {\n    &:before {\n        content: @octo-icon-italic;\n    }\n}\n.octo-icon-underline {\n    &:before {\n        content: @octo-icon-underline;\n    }\n}\n.octo-icon-info {\n    &:before {\n        content: @octo-icon-info;\n    }\n}\n.octo-icon-components {\n    &:before {\n        content: @octo-icon-components;\n    }\n}\n.octo-icon-fullscreen-collapse {\n    &:before {\n        content: @octo-icon-fullscreen-collapse;\n    }\n}\n.octo-icon-angle-down {\n    &:before {\n        content: @octo-icon-angle-down;\n    }\n}\n.octo-icon-angle-up {\n    &:before {\n        content: @octo-icon-angle-up;\n    }\n}\n.octo-icon-search {\n    &:before {\n        content: @octo-icon-search;\n    }\n}\n.octo-icon-settings {\n    &:before {\n        content: @octo-icon-settings;\n    }\n}\n.octo-icon-delete {\n    &:before {\n        content: @octo-icon-delete;\n    }\n}\n.octo-icon-fullscreen {\n    &:before {\n        content: @octo-icon-fullscreen;\n    }\n}\n.octo-icon-save {\n    &:before {\n        content: @octo-icon-save;\n    }\n}\n.octo-icon-search-code {\n    &:before {\n        content: @octo-icon-search-code;\n    }\n}\n.octo-icon-exit {\n    &:before {\n        content: @octo-icon-exit;\n    }\n}\n.octo-icon-app-window {\n    &:before {\n        content: @octo-icon-app-window;\n    }\n}\n.octo-icon-user-account {\n    &:before {\n        content: @octo-icon-user-account;\n    }\n}\n.octo-icon-triangle-down {\n    &:before {\n        content: @octo-icon-triangle-down;\n    }\n}\n.octo-icon-location-target {\n    &:before {\n        content: @octo-icon-location-target;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/octoicons/octoicons.mixins.less",
    "content": ".icon-OctoFontMigrate() {\n    // use !important to prevent issues with browser extensions that change fonts\n    font-family: 'octo-icon-migrate' !important;\n    speak: none;\n    font-style: normal;\n    font-weight: normal;\n    font-variant: normal;\n    text-transform: none;\n    line-height: 1;\n\n    // Better Font Rendering ===========\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/octoicons/octoicons.variables.less",
    "content": "//\n// Generated by Icomoon\n//\n\n@octo-icon-earth: \"\\eb55\";\n@octo-icon-language-letters: \"\\eb56\";\n@octo-icon-database-flash: \"\\eb54\";\n@octo-icon-collapse: \"\\eb26\";\n@octo-icon-music: \"\\e964\";\n@octo-icon-envelope: \"\\e965\";\n@octo-icon-heart: \"\\e966\";\n@octo-icon-star: \"\\e967\";\n@octo-icon-user: \"\\e968\";\n@octo-icon-film: \"\\e969\";\n@octo-icon-check: \"\\e96a\";\n@octo-icon-remove: \"\\e96b\";\n@octo-icon-close: \"\\e96c\";\n@octo-icon-search-minus: \"\\e96d\";\n@octo-icon-search-plus: \"\\e96e\";\n@octo-icon-power-off: \"\\e96f\";\n@octo-icon-signal: \"\\e970\";\n@octo-icon-gear: \"\\e971\";\n@octo-icon-cog: \"\\e972\";\n@octo-icon-home: \"\\e973\";\n@octo-icon-file: \"\\e974\";\n@octo-icon-clock: \"\\e975\";\n@octo-icon-road: \"\\e976\";\n@octo-icon-arrow-circle-o-down: \"\\e977\";\n@octo-icon-arrow-circle-o-up: \"\\e978\";\n@octo-icon-inbox: \"\\e979\";\n@octo-icon-play-circle: \"\\e97a\";\n@octo-icon-rotate-right: \"\\e97b\";\n@octo-icon-repeat: \"\\e97c\";\n@octo-icon-refresh: \"\\e97d\";\n@octo-icon-list-alt: \"\\e97e\";\n@octo-icon-headphones: \"\\e97f\";\n@octo-icon-volume-off: \"\\e980\";\n@octo-icon-volume-down: \"\\e981\";\n@octo-icon-volume-up: \"\\e982\";\n@octo-icon-qrcode: \"\\e983\";\n@octo-icon-barcode: \"\\e984\";\n@octo-icon-tags: \"\\e985\";\n@octo-icon-book: \"\\e986\";\n@octo-icon-bookmark: \"\\e987\";\n@octo-icon-print: \"\\e988\";\n@octo-icon-camera: \"\\e989\";\n@octo-icon-font: \"\\e98a\";\n@octo-icon-text-height: \"\\e98b\";\n@octo-icon-text-width: \"\\e98c\";\n@octo-icon-video-camera: \"\\e98d\";\n@octo-icon-photo: \"\\e98e\";\n@octo-icon-image: \"\\e98f\";\n@octo-icon-picture: \"\\e990\";\n@octo-icon-pencil: \"\\e991\";\n@octo-icon-map-marker: \"\\e992\";\n@octo-icon-adjust: \"\\e993\";\n@octo-icon-edit: \"\\e994\";\n@octo-icon-pencil-square: \"\\e995\";\n@octo-icon-share-square: \"\\e996\";\n@octo-icon-check-square: \"\\e997\";\n@octo-icon-arrows: \"\\e998\";\n@octo-icon-pause: \"\\e999\";\n@octo-icon-stop: \"\\e99a\";\n@octo-icon-eject: \"\\e99b\";\n@octo-icon-chevron-right: \"\\e99c\";\n@octo-icon-plus-circle: \"\\e99d\";\n@octo-icon-minus-circle: \"\\e99e\";\n@octo-icon-times-circle: \"\\e99f\";\n@octo-icon-check-circle: \"\\e9a0\";\n@octo-icon-question-circle: \"\\e9a1\";\n@octo-icon-info-circle: \"\\e9a2\";\n@octo-icon-crosshairs: \"\\e9a3\";\n@octo-icon-times-circle-o: \"\\e9a4\";\n@octo-icon-check-circle-o: \"\\e9a5\";\n@octo-icon-ban: \"\\e9a6\";\n@octo-icon-arrow-left: \"\\e9a7\";\n@octo-icon-arrow-right: \"\\e9a8\";\n@octo-icon-arrow-up: \"\\e9a9\";\n@octo-icon-arrow-down: \"\\e9aa\";\n@octo-icon-mail-forward: \"\\e9ab\";\n@octo-icon-share: \"\\e9ac\";\n@octo-icon-expand: \"\\e9ad\";\n@octo-icon-compress: \"\\e9ae\";\n@octo-icon-minus: \"\\e9af\";\n@octo-icon-asterisk: \"\\e9b0\";\n@octo-icon-exclamation-circle: \"\\e9b1\";\n@octo-icon-gift: \"\\e9b2\";\n@octo-icon-leaf: \"\\e9b3\";\n@octo-icon-fire: \"\\e9b4\";\n@octo-icon-eye: \"\\e9b5\";\n@octo-icon-eye-slash: \"\\e9b6\";\n@octo-icon-calendar: \"\\e9b7\";\n@octo-icon-comment: \"\\e9b8\";\n@octo-icon-chevron-down: \"\\e9b9\";\n@octo-icon-retweet: \"\\e9ba\";\n@octo-icon-shopping-cart: \"\\e9bb\";\n@octo-icon-folder: \"\\e9bc\";\n@octo-icon-folder-open: \"\\e9bd\";\n@octo-icon-arrows-v: \"\\e9be\";\n@octo-icon-arrows-h: \"\\e9bf\";\n@octo-icon-bar-chart-o: \"\\e9c0\";\n@octo-icon-bar-chart: \"\\e9c1\";\n@octo-icon-twitter-square: \"\\e9c2\";\n@octo-icon-facebook-square: \"\\e9c3\";\n@octo-icon-camera-retro: \"\\e9c4\";\n@octo-icon-key: \"\\e9c5\";\n@octo-icon-cogs: \"\\e9c6\";\n@octo-icon-comments: \"\\e9c7\";\n@octo-icon-thumbs-o-down: \"\\e9c8\";\n@octo-icon-heart-o: \"\\e9c9\";\n@octo-icon-sign-out: \"\\e9ca\";\n@octo-icon-linkedin-square: \"\\e9cb\";\n@octo-icon-thumb-tack: \"\\e9cc\";\n@octo-icon-external-link: \"\\e9cd\";\n@octo-icon-sign-in: \"\\e9ce\";\n@octo-icon-trophy: \"\\e9cf\";\n@octo-icon-upload: \"\\e9d0\";\n@octo-icon-lemon-o: \"\\e9d1\";\n@octo-icon-phone: \"\\e9d2\";\n@octo-icon-square-o: \"\\e9d3\";\n@octo-icon-bookmark-o: \"\\e9d4\";\n@octo-icon-phone-square: \"\\e9d5\";\n@octo-icon-twitter: \"\\e9d6\";\n@octo-icon-facebook-f: \"\\e9d7\";\n@octo-icon-facebook: \"\\e9d8\";\n@octo-icon-unlock: \"\\e9d9\";\n@octo-icon-credit-card: \"\\e9da\";\n@octo-icon-feed: \"\\e9db\";\n@octo-icon-rss: \"\\e9dc\";\n@octo-icon-hdd-o: \"\\e9dd\";\n@octo-icon-certificate: \"\\e9de\";\n@octo-icon-arrow-circle-left: \"\\e9df\";\n@octo-icon-arrow-circle-down: \"\\e9e0\";\n@octo-icon-wrench: \"\\e9e1\";\n@octo-icon-tasks: \"\\e9e2\";\n@octo-icon-filter: \"\\e9e3\";\n@octo-icon-briefcase: \"\\e9e4\";\n@octo-icon-arrows-alt: \"\\e9e5\";\n@octo-icon-group: \"\\e9e6\";\n@octo-icon-chain: \"\\e9e7\";\n@octo-icon-flask: \"\\e9e8\";\n@octo-icon-cut: \"\\e9e9\";\n@octo-icon-scissors: \"\\e9ea\";\n@octo-icon-copy: \"\\e9eb\";\n@octo-icon-files-o: \"\\e9ec\";\n@octo-icon-square: \"\\e9ed\";\n@octo-icon-navicon: \"\\e9ee\";\n@octo-icon-reorder: \"\\e9ef\";\n@octo-icon-bars: \"\\e9f0\";\n@octo-icon-list-ul: \"\\e9f1\";\n@octo-icon-list-ol: \"\\e9f2\";\n@octo-icon-strikethrough: \"\\e9f3\";\n@octo-icon-magic: \"\\e9f4\";\n@octo-icon-truck: \"\\e9f5\";\n@octo-icon-pinterest: \"\\e9f6\";\n@octo-icon-pinterest-square: \"\\e9f7\";\n@octo-icon-google-plus-square: \"\\e9f8\";\n@octo-icon-google-plus: \"\\e9f9\";\n@octo-icon-caret-down: \"\\e9fa\";\n@octo-icon-caret-up: \"\\e9fb\";\n@octo-icon-caret-left: \"\\e9fc\";\n@octo-icon-caret-right: \"\\e9fd\";\n@octo-icon-columns: \"\\e9fe\";\n@octo-icon-sort: \"\\e9ff\";\n@octo-icon-sort-down: \"\\ea00\";\n@octo-icon-sort-desc: \"\\ea01\";\n@octo-icon-sort-up: \"\\ea02\";\n@octo-icon-sort-asc: \"\\ea03\";\n@octo-icon-linkedin: \"\\ea04\";\n@octo-icon-rotate-left: \"\\ea05\";\n@octo-icon-legal: \"\\ea06\";\n@octo-icon-gavel: \"\\ea07\";\n@octo-icon-dashboard: \"\\ea08\";\n@octo-icon-tachometer: \"\\ea09\";\n@octo-icon-comment-o: \"\\ea0a\";\n@octo-icon-comments-o: \"\\ea0b\";\n@octo-icon-sitemap: \"\\ea0c\";\n@octo-icon-umbrella: \"\\ea0d\";\n@octo-icon-clipboard: \"\\ea0e\";\n@octo-icon-lightbulb-o: \"\\ea0f\";\n@octo-icon-exchange: \"\\ea10\";\n@octo-icon-user-md: \"\\ea11\";\n@octo-icon-stethoscope: \"\\ea12\";\n@octo-icon-suitcase: \"\\ea13\";\n@octo-icon-bell-o: \"\\ea14\";\n@octo-icon-coffee: \"\\ea15\";\n@octo-icon-file-text-o: \"\\ea16\";\n@octo-icon-building-o: \"\\ea17\";\n@octo-icon-hospital-o: \"\\ea18\";\n@octo-icon-ambulance: \"\\ea19\";\n@octo-icon-medkit: \"\\ea1a\";\n@octo-icon-fighter-jet: \"\\ea1b\";\n@octo-icon-beer: \"\\ea1c\";\n@octo-icon-h-square: \"\\ea1d\";\n@octo-icon-plus-square: \"\\ea1e\";\n@octo-icon-angle-double-left: \"\\ea1f\";\n@octo-icon-angle-double-right: \"\\ea20\";\n@octo-icon-angle-double-up: \"\\ea21\";\n@octo-icon-angle-double-down: \"\\ea22\";\n@octo-icon-angle-left: \"\\ea23\";\n@octo-icon-angle-right: \"\\ea24\";\n@octo-icon-desktop: \"\\ea25\";\n@octo-icon-laptop: \"\\ea26\";\n@octo-icon-tablet: \"\\ea27\";\n@octo-icon-mobile-phone: \"\\ea28\";\n@octo-icon-mobile: \"\\ea29\";\n@octo-icon-circle-o: \"\\ea2a\";\n@octo-icon-quote-left: \"\\ea2b\";\n@octo-icon-quote-right: \"\\ea2c\";\n@octo-icon-spinner: \"\\ea2d\";\n@octo-icon-circle: \"\\ea2e\";\n@octo-icon-mail-reply: \"\\ea2f\";\n@octo-icon-reply: \"\\ea30\";\n@octo-icon-folder-o: \"\\ea31\";\n@octo-icon-folder-open-o: \"\\ea32\";\n@octo-icon-smile-o: \"\\ea33\";\n@octo-icon-frown-o: \"\\ea34\";\n@octo-icon-meh-o: \"\\ea35\";\n@octo-icon-keyboard-o: \"\\ea36\";\n@octo-icon-flag-checkered: \"\\ea37\";\n@octo-icon-terminal: \"\\ea38\";\n@octo-icon-code: \"\\ea39\";\n@octo-icon-mail-reply-all: \"\\ea3a\";\n@octo-icon-reply-all: \"\\ea3b\";\n@octo-icon-location-arrow: \"\\ea3c\";\n@octo-icon-crop: \"\\ea3d\";\n@octo-icon-chain-broken: \"\\ea3e\";\n@octo-icon-question: \"\\ea3f\";\n@octo-icon-exclamation: \"\\ea40\";\n@octo-icon-superscript: \"\\ea41\";\n@octo-icon-subscript: \"\\ea42\";\n@octo-icon-puzzle-piece: \"\\ea43\";\n@octo-icon-microphone: \"\\ea44\";\n@octo-icon-microphone-slash: \"\\ea45\";\n@octo-icon-shield: \"\\ea46\";\n@octo-icon-calendar-o: \"\\ea47\";\n@octo-icon-fire-extinguisher: \"\\ea48\";\n@octo-icon-rocket: \"\\ea49\";\n@octo-icon-chevron-circle-left: \"\\ea4a\";\n@octo-icon-chevron-circle-right: \"\\ea4b\";\n@octo-icon-chevron-circle-up: \"\\ea4c\";\n@octo-icon-chevron-circle-down: \"\\ea4d\";\n@octo-icon-html5: \"\\ea4e\";\n@octo-icon-css3: \"\\ea4f\";\n@octo-icon-anchor: \"\\ea50\";\n@octo-icon-unlock-alt: \"\\ea51\";\n@octo-icon-bullseye: \"\\ea52\";\n@octo-icon-rss-square: \"\\ea53\";\n@octo-icon-minus-square: \"\\ea54\";\n@octo-icon-minus-square-o: \"\\ea55\";\n@octo-icon-level-down: \"\\ea56\";\n@octo-icon-toggle-down: \"\\ea57\";\n@octo-icon-caret-square-o-down: \"\\ea58\";\n@octo-icon-toggle-up: \"\\ea59\";\n@octo-icon-caret-square-o-up: \"\\ea5a\";\n@octo-icon-caret-square-o-right: \"\\ea5b\";\n@octo-icon-euro: \"\\ea5c\";\n@octo-icon-sort-numeric-asc: \"\\ea5d\";\n@octo-icon-sort-numeric-desc: \"\\ea5e\";\n@octo-icon-eur: \"\\ea5f\";\n@octo-icon-gbp: \"\\ea60\";\n@octo-icon-dollar: \"\\ea61\";\n@octo-icon-usd: \"\\ea62\";\n@octo-icon-bitcoin: \"\\ea63\";\n@octo-icon-btc: \"\\ea64\";\n@octo-icon-file-text: \"\\ea65\";\n@octo-icon-thumbs-up: \"\\ea66\";\n@octo-icon-thumbs-down: \"\\ea67\";\n@octo-icon-youtube-square: \"\\ea68\";\n@octo-icon-youtube: \"\\ea69\";\n@octo-icon-xing: \"\\ea6a\";\n@octo-icon-xing-square: \"\\ea6b\";\n@octo-icon-youtube-play: \"\\ea6c\";\n@octo-icon-dropbox: \"\\ea6d\";\n@octo-icon-stack-overflow: \"\\ea6e\";\n@octo-icon-instagram: \"\\ea6f\";\n@octo-icon-flickr: \"\\ea70\";\n@octo-icon-tumblr: \"\\ea71\";\n@octo-icon-tumblr-square: \"\\ea72\";\n@octo-icon-long-arrow-down: \"\\ea73\";\n@octo-icon-long-arrow-up: \"\\ea74\";\n@octo-icon-long-arrow-left: \"\\ea75\";\n@octo-icon-long-arrow-right: \"\\ea76\";\n@octo-icon-apple: \"\\ea77\";\n@octo-icon-windows: \"\\ea78\";\n@octo-icon-android: \"\\ea79\";\n@octo-icon-dribbble: \"\\ea7a\";\n@octo-icon-foursquare: \"\\ea7b\";\n@octo-icon-female: \"\\ea7c\";\n@octo-icon-male: \"\\ea7d\";\n@octo-icon-sun-o: \"\\ea7e\";\n@octo-icon-moon-o: \"\\ea7f\";\n@octo-icon-archive: \"\\ea80\";\n@octo-icon-bug: \"\\ea81\";\n@octo-icon-vk: \"\\ea82\";\n@octo-icon-weibo: \"\\ea83\";\n@octo-icon-renren: \"\\ea84\";\n@octo-icon-arrow-circle-o-right: \"\\ea85\";\n@octo-icon-arrow-circle-o-left: \"\\ea86\";\n@octo-icon-caret-square-o-left: \"\\ea87\";\n@octo-icon-dot-circle-o: \"\\ea88\";\n@octo-icon-wheelchair: \"\\ea89\";\n@octo-icon-plus-square-o: \"\\ea8a\";\n@octo-icon-space-shuttle: \"\\ea8b\";\n@octo-icon-envelope-square: \"\\ea8c\";\n@octo-icon-institution: \"\\ea8d\";\n@octo-icon-bank: \"\\ea8e\";\n@octo-icon-university: \"\\ea8f\";\n@octo-icon-mortar-board: \"\\ea90\";\n@octo-icon-yahoo: \"\\ea91\";\n@octo-icon-reddit: \"\\ea92\";\n@octo-icon-reddit-square: \"\\ea93\";\n@octo-icon-delicious: \"\\ea94\";\n@octo-icon-digg: \"\\ea95\";\n@octo-icon-drupal: \"\\ea96\";\n@octo-icon-language: \"\\ea97\";\n@octo-icon-building: \"\\ea98\";\n@octo-icon-paw: \"\\ea99\";\n@octo-icon-spoon: \"\\ea9a\";\n@octo-icon-steam: \"\\ea9b\";\n@octo-icon-steam-square: \"\\ea9c\";\n@octo-icon-automobile: \"\\ea9d\";\n@octo-icon-car: \"\\ea9e\";\n@octo-icon-cab: \"\\ea9f\";\n@octo-icon-taxi: \"\\eaa0\";\n@octo-icon-tree: \"\\eaa1\";\n@octo-icon-database: \"\\eaa2\";\n@octo-icon-file-pdf-o: \"\\eaa3\";\n@octo-icon-file-word-o: \"\\eaa4\";\n@octo-icon-file-excel-o: \"\\eaa5\";\n@octo-icon-file-powerpoint-o: \"\\eaa6\";\n@octo-icon-file-photo-o: \"\\eaa7\";\n@octo-icon-file-picture-o: \"\\eaa8\";\n@octo-icon-file-image-o: \"\\eaa9\";\n@octo-icon-file-zip-o: \"\\eaaa\";\n@octo-icon-file-archive-o: \"\\eaab\";\n@octo-icon-file-sound-o: \"\\eaac\";\n@octo-icon-file-audio-o: \"\\eaad\";\n@octo-icon-file-video-o: \"\\eaae\";\n@octo-icon-file-code-o: \"\\eaaf\";\n@octo-icon-vine: \"\\eab0\";\n@octo-icon-life-bouy: \"\\eab1\";\n@octo-icon-life-buoy: \"\\eab2\";\n@octo-icon-life-saver: \"\\eab3\";\n@octo-icon-support: \"\\eab4\";\n@octo-icon-life-ring: \"\\eab5\";\n@octo-icon-ra: \"\\eab6\";\n@octo-icon-empire: \"\\eab7\";\n@octo-icon-tencent-weibo: \"\\eab8\";\n@octo-icon-send: \"\\eab9\";\n@octo-icon-paper-plane: \"\\eaba\";\n@octo-icon-send-o: \"\\eabb\";\n@octo-icon-paper-plane-o: \"\\eabc\";\n@octo-icon-history: \"\\eabd\";\n@octo-icon-circle-thin: \"\\eabe\";\n@octo-icon-paragraph: \"\\eabf\";\n@octo-icon-sliders: \"\\eac0\";\n@octo-icon-share-alt: \"\\eac1\";\n@octo-icon-share-alt-square: \"\\eac2\";\n@octo-icon-bomb: \"\\eac3\";\n@octo-icon-soccer-ball-o: \"\\eac4\";\n@octo-icon-futbol-o: \"\\eac5\";\n@octo-icon-tty: \"\\eac6\";\n@octo-icon-binoculars: \"\\eac7\";\n@octo-icon-twitch: \"\\eac8\";\n@octo-icon-yelp: \"\\eac9\";\n@octo-icon-newspaper-o: \"\\eaca\";\n@octo-icon-wifi: \"\\eacb\";\n@octo-icon-calculator: \"\\eacc\";\n@octo-icon-paypal: \"\\eacd\";\n@octo-icon-cc-visa: \"\\eace\";\n@octo-icon-cc-mastercard: \"\\eacf\";\n@octo-icon-cc-discover: \"\\ead0\";\n@octo-icon-cc-amex: \"\\ead1\";\n@octo-icon-cc-paypal: \"\\ead2\";\n@octo-icon-cc-stripe: \"\\ead3\";\n@octo-icon-bell-slash: \"\\ead4\";\n@octo-icon-bell-slash-o: \"\\ead5\";\n@octo-icon-at: \"\\ead6\";\n@octo-icon-paint-brush: \"\\ead7\";\n@octo-icon-birthday-cake: \"\\ead8\";\n@octo-icon-area-chart: \"\\ead9\";\n@octo-icon-pie-chart: \"\\eada\";\n@octo-icon-line-chart: \"\\eadb\";\n@octo-icon-lastfm: \"\\eadc\";\n@octo-icon-lastfm-square: \"\\eadd\";\n@octo-icon-toggle-off: \"\\eade\";\n@octo-icon-toggle-on: \"\\eadf\";\n@octo-icon-bicycle: \"\\eae0\";\n@octo-icon-bus: \"\\eae1\";\n@octo-icon-cc: \"\\eae2\";\n@octo-icon-cart-plus: \"\\eae3\";\n@octo-icon-cart-arrow-down: \"\\eae4\";\n@octo-icon-diamond: \"\\eae5\";\n@octo-icon-ship: \"\\eae6\";\n@octo-icon-street-view: \"\\eae7\";\n@octo-icon-heartbeat: \"\\eae8\";\n@octo-icon-venus: \"\\eae9\";\n@octo-icon-mars: \"\\eaea\";\n@octo-icon-transgender: \"\\eaeb\";\n@octo-icon-transgender-alt: \"\\eaec\";\n@octo-icon-facebook-official: \"\\eaed\";\n@octo-icon-pinterest-p: \"\\eaee\";\n@octo-icon-whatsapp: \"\\eaef\";\n@octo-icon-server: \"\\eaf0\";\n@octo-icon-user-plus: \"\\eaf1\";\n@octo-icon-hotel: \"\\eaf2\";\n@octo-icon-bed: \"\\eaf3\";\n@octo-icon-train: \"\\eaf4\";\n@octo-icon-subway: \"\\eaf5\";\n@octo-icon-battery-4: \"\\eaf6\";\n@octo-icon-battery: \"\\eaf7\";\n@octo-icon-battery-full: \"\\eaf8\";\n@octo-icon-battery-3: \"\\eaf9\";\n@octo-icon-battery-three-quarters: \"\\eafa\";\n@octo-icon-battery-2: \"\\eafb\";\n@octo-icon-battery-half: \"\\eafc\";\n@octo-icon-battery-1: \"\\eafd\";\n@octo-icon-battery-quarter: \"\\eafe\";\n@octo-icon-battery-0: \"\\eaff\";\n@octo-icon-battery-empty: \"\\eb00\";\n@octo-icon-mouse-pointer: \"\\eb01\";\n@octo-icon-i-cursor: \"\\eb02\";\n@octo-icon-clone: \"\\eb03\";\n@octo-icon-balance-scale: \"\\eb04\";\n@octo-icon-hourglass-1: \"\\eb05\";\n@octo-icon-hourglass-start: \"\\eb06\";\n@octo-icon-hourglass-half: \"\\eb07\";\n@octo-icon-odnoklassniki: \"\\eb08\";\n@octo-icon-odnoklassniki-square: \"\\eb09\";\n@octo-icon-wikipedia-w: \"\\eb0a\";\n@octo-icon-tv: \"\\eb0b\";\n@octo-icon-television: \"\\eb0c\";\n@octo-icon-px: \"\\eb0d\";\n@octo-icon-amazon: \"\\eb0e\";\n@octo-icon-calendar-plus-o: \"\\eb0f\";\n@octo-icon-calendar-minus-o: \"\\eb10\";\n@octo-icon-calendar-times-o: \"\\eb11\";\n@octo-icon-calendar-check-o: \"\\eb12\";\n@octo-icon-industry: \"\\eb13\";\n@octo-icon-map-signs: \"\\eb14\";\n@octo-icon-commenting: \"\\eb15\";\n@octo-icon-black-tie: \"\\eb16\";\n@octo-icon-reddit-alien: \"\\eb17\";\n@octo-icon-credit-card-alt: \"\\eb18\";\n@octo-icon-scribd: \"\\eb19\";\n@octo-icon-usb: \"\\eb1a\";\n@octo-icon-pause-circle: \"\\eb1b\";\n@octo-icon-pause-circle-o: \"\\eb1c\";\n@octo-icon-stop-circle: \"\\eb1d\";\n@octo-icon-stop-circle-o: \"\\eb1e\";\n@octo-icon-shopping-bag: \"\\eb1f\";\n@octo-icon-shopping-basket: \"\\eb20\";\n@octo-icon-hashtag: \"\\eb21\";\n@octo-icon-bluetooth-b: \"\\eb22\";\n@octo-icon-wheelchair-alt: \"\\eb23\";\n@octo-icon-question-circle-o: \"\\eb24\";\n@octo-icon-blind: \"\\eb25\";\n@octo-icon-volume-control-phone: \"\\eb26\";\n@octo-icon-braille: \"\\eb27\";\n@octo-icon-snapchat: \"\\eb28\";\n@octo-icon-snapchat-ghost: \"\\eb29\";\n@octo-icon-snapchat-square: \"\\eb2a\";\n@octo-icon-google-plus-circle: \"\\eb2b\";\n@octo-icon-google-plus-official: \"\\eb2c\";\n@octo-icon-handshake-o: \"\\eb2d\";\n@octo-icon-envelope-open: \"\\eb2e\";\n@octo-icon-envelope-open-o: \"\\eb2f\";\n@octo-icon-address-book: \"\\eb30\";\n@octo-icon-address-book-o: \"\\eb31\";\n@octo-icon-vcard: \"\\eb32\";\n@octo-icon-address-card: \"\\eb33\";\n@octo-icon-vcard-o: \"\\eb34\";\n@octo-icon-address-card-o: \"\\eb35\";\n@octo-icon-user-circle: \"\\eb36\";\n@octo-icon-user-circle-o: \"\\eb37\";\n@octo-icon-user-o: \"\\eb38\";\n@octo-icon-id-badge: \"\\eb39\";\n@octo-icon-drivers-license: \"\\eb3a\";\n@octo-icon-id-card: \"\\eb3b\";\n@octo-icon-drivers-license-o: \"\\eb3c\";\n@octo-icon-id-card-o: \"\\eb3d\";\n@octo-icon-quora: \"\\eb3e\";\n@octo-icon-thermometer-4: \"\\eb3f\";\n@octo-icon-thermometer: \"\\eb40\";\n@octo-icon-thermometer-3: \"\\eb41\";\n@octo-icon-thermometer-full: \"\\eb42\";\n@octo-icon-thermometer-three-quarters: \"\\eb43\";\n@octo-icon-thermometer-half: \"\\eb44\";\n@octo-icon-thermometer-2: \"\\eb45\";\n@octo-icon-thermometer-1: \"\\eb46\";\n@octo-icon-thermometer-quarter: \"\\eb47\";\n@octo-icon-thermometer-0: \"\\eb48\";\n@octo-icon-thermometer-empty: \"\\eb49\";\n@octo-icon-shower: \"\\eb4a\";\n@octo-icon-window-maximize: \"\\eb4b\";\n@octo-icon-window-minimize: \"\\eb4c\";\n@octo-icon-window-restore: \"\\eb4d\";\n@octo-icon-window-close: \"\\eb4e\";\n@octo-icon-etsy: \"\\eb4f\";\n@octo-icon-imdb: \"\\eb50\";\n@octo-icon-microchip: \"\\eb51\";\n@octo-icon-snowflake-o: \"\\eb52\";\n@octo-icon-meetup: \"\\eb53\";\n@octo-icon-add-bold: \"\\e962\";\n@octo-icon-layers-grid-add: \"\\e963\";\n@octo-icon-common-file-star: \"\\e961\";\n@octo-icon-set-parent: \"\\e960\";\n@octo-icon-common-file-remove: \"\\e95c\";\n@octo-icon-common-file-sync: \"\\e95d\";\n@octo-icon-harddrive-upload: \"\\e95e\";\n@octo-icon-common-file-upload: \"\\e95f\";\n@octo-icon-list-reorder: \"\\e95b\";\n@octo-icon-keyboard-return: \"\\e95a\";\n@octo-icon-calendar-add: \"\\e951\";\n@octo-icon-calendar-3: \"\\e952\";\n@octo-icon-calendar-disable: \"\\e953\";\n@octo-icon-calendar-check: \"\\e954\";\n@octo-icon-calendar-clock: \"\\e955\";\n@octo-icon-notes-edit-active-path1: \"\\e956\";\n@octo-icon-notes-edit-active-path2: \"\\e957\";\n@octo-icon-notes-edit: \"\\e958\";\n@octo-icon-calendar-check-1: \"\\e959\";\n@octo-icon-user-actions-key: \"\\e950\";\n@octo-icon-id-card-1: \"\\e94e\";\n@octo-icon-user-group: \"\\e94f\";\n@octo-icon-globe: \"\\e94d\";\n@octo-icon-translate: \"\\e94c\";\n@octo-icon-code-snippet: \"\\e94b\";\n@octo-icon-log-settings: \"\\e941\";\n@octo-icon-lock: \"\\e949\";\n@octo-icon-users: \"\\e94a\";\n@octo-icon-mail-branding: \"\\e944\";\n@octo-icon-mail-settings: \"\\e946\";\n@octo-icon-mail-templates: \"\\e947\";\n@octo-icon-power: \"\\e942\";\n@octo-icon-paint-brush-1: \"\\e943\";\n@octo-icon-mail-messages: \"\\e945\";\n@octo-icon-download: \"\\e948\";\n@octo-icon-plus: \"\\e940\";\n@octo-icon-cross: \"\\e93e\";\n@octo-icon-callout-danger: \"\\e93d\";\n@octo-icon-callout-success: \"\\e93c\";\n@octo-icon-callout-info: \"\\e93f\";\n@octo-icon-add-above: \"\\e93a\";\n@octo-icon-add-below: \"\\e93b\";\n@octo-icon-check-multi: \"\\e939\";\n@octo-icon-unlink: \"\\e938\";\n@octo-icon-list-add: \"\\e935\";\n@octo-icon-list-remove: \"\\e936\";\n@octo-icon-create: \"\\e937\";\n@octo-icon-preview: \"\\e933\";\n@octo-icon-window-split: \"\\e934\";\n@octo-icon-eraser: \"\\e92e\";\n@octo-icon-text-code-block: \"\\e932\";\n@octo-icon-text-h1: \"\\e92f\";\n@octo-icon-text-h3: \"\\e930\";\n@octo-icon-text-h2: \"\\e931\";\n@octo-icon-text-insert-table: \"\\e915\";\n@octo-icon-text-colors: \"\\e91e\";\n@octo-icon-text-emoticons: \"\\e91f\";\n@octo-icon-text-inline-style: \"\\e924\";\n@octo-icon-volume: \"\\e925\";\n@octo-icon-text-video: \"\\e926\";\n@octo-icon-edit-code: \"\\e92b\";\n@octo-icon-text-subscript: \"\\e920\";\n@octo-icon-text-superscript: \"\\e921\";\n@octo-icon-link: \"\\e91b\";\n@octo-icon-text-strikethrough: \"\\e91d\";\n@octo-icon-text-increase-indent: \"\\e922\";\n@octo-icon-text-decrease-indent: \"\\e923\";\n@octo-icon-text-image: \"\\e927\";\n@octo-icon-redo: \"\\e928\";\n@octo-icon-undo: \"\\e929\";\n@octo-icon-attachment: \"\\e92a\";\n@octo-icon-cursor-arrow: \"\\e92c\";\n@octo-icon-text-clear-formatting: \"\\e92d\";\n@octo-icon-quote: \"\\e919\";\n@octo-icon-text-format-ul: \"\\e90c\";\n@octo-icon-text-format-ol: \"\\e90d\";\n@octo-icon-text-justify: \"\\e916\";\n@octo-icon-magic-wand: \"\\e918\";\n@octo-icon-horizontal-line: \"\\e91a\";\n@octo-icon-bold: \"\\e90f\";\n@octo-icon-text-left: \"\\e910\";\n@octo-icon-text-right: \"\\e911\";\n@octo-icon-text-center: \"\\e912\";\n@octo-icon-italic: \"\\e913\";\n@octo-icon-underline: \"\\e914\";\n@octo-icon-info: \"\\e917\";\n@octo-icon-components: \"\\e91c\";\n@octo-icon-fullscreen-collapse: \"\\e90e\";\n@octo-icon-angle-down: \"\\e90a\";\n@octo-icon-angle-up: \"\\e90b\";\n@octo-icon-search: \"\\e909\";\n@octo-icon-settings: \"\\e904\";\n@octo-icon-delete: \"\\e905\";\n@octo-icon-fullscreen: \"\\e906\";\n@octo-icon-save: \"\\e907\";\n@octo-icon-search-code: \"\\e908\";\n@octo-icon-exit: \"\\e901\";\n@octo-icon-app-window: \"\\e902\";\n@octo-icon-user-account: \"\\e903\";\n@octo-icon-triangle-down: \"\\e900\";\n@octo-icon-location-target: \"\\1f32b\";\n"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/raphael/raphael.js",
    "content": "// ┌────────────────────────────────────────────────────────────────────┐ \\\\\n// │ Raphaël 2.2.7 - JavaScript Vector Library                          │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com)    │ \\\\\n// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com)              │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\\\\n// └────────────────────────────────────────────────────────────────────┘ \\\\\n// Copyright (c) 2017 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ┌────────────────────────────────────────────────────────────┐ \\\\\n// │ Eve 0.5.4 - JavaScript Events Library                      │ \\\\\n// ├────────────────────────────────────────────────────────────┤ \\\\\n// │ Author Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) │ \\\\\n// └────────────────────────────────────────────────────────────┘ \\\\\n// Link: https://github.com/adobe-webplatform/eve\n\n(function (glob) {\n    var version = \"0.5.4\",\n        has = \"hasOwnProperty\",\n        separator = /[\\.\\/]/,\n        comaseparator = /\\s*,\\s*/,\n        wildcard = \"*\",\n        numsort = function (a, b) {\n            return a - b;\n        },\n        current_event,\n        stop,\n        events = {n: {}},\n        firstDefined = function () {\n            for (var i = 0, ii = this.length; i < ii; i++) {\n                if (typeof this[i] != \"undefined\") {\n                    return this[i];\n                }\n            }\n        },\n        lastDefined = function () {\n            var i = this.length;\n            while (--i) {\n                if (typeof this[i] != \"undefined\") {\n                    return this[i];\n                }\n            }\n        },\n        objtos = Object.prototype.toString,\n        Str = String,\n        isArray = Array.isArray || function (ar) {\n            return ar instanceof Array || objtos.call(ar) == \"[object Array]\";\n        },\n    /*\\\n     * eve\n     [ method ]\n\n     * Fires event with given `name`, given scope and other parameters.\n\n     - name (string) name of the *event*, dot (`.`) or slash (`/`) separated\n     - scope (object) context for the event handlers\n     - varargs (...) the rest of arguments will be sent to event handlers\n\n     = (object) array of returned values from the listeners. Array has two methods `.firstDefined()` and `.lastDefined()` to get first or last not `undefined` value.\n    \\*/\n        eve = function (name, scope) {\n            var oldstop = stop,\n                args = Array.prototype.slice.call(arguments, 2),\n                listeners = eve.listeners(name),\n                z = 0,\n                l,\n                indexed = [],\n                queue = {},\n                out = [],\n                ce = current_event;\n            out.firstDefined = firstDefined;\n            out.lastDefined = lastDefined;\n            current_event = name;\n            stop = 0;\n            for (var i = 0, ii = listeners.length; i < ii; i++) if (\"zIndex\" in listeners[i]) {\n                indexed.push(listeners[i].zIndex);\n                if (listeners[i].zIndex < 0) {\n                    queue[listeners[i].zIndex] = listeners[i];\n                }\n            }\n            indexed.sort(numsort);\n            while (indexed[z] < 0) {\n                l = queue[indexed[z++]];\n                out.push(l.apply(scope, args));\n                if (stop) {\n                    stop = oldstop;\n                    return out;\n                }\n            }\n            for (i = 0; i < ii; i++) {\n                l = listeners[i];\n                if (\"zIndex\" in l) {\n                    if (l.zIndex == indexed[z]) {\n                        out.push(l.apply(scope, args));\n                        if (stop) {\n                            break;\n                        }\n                        do {\n                            z++;\n                            l = queue[indexed[z]];\n                            l && out.push(l.apply(scope, args));\n                            if (stop) {\n                                break;\n                            }\n                        } while (l)\n                    } else {\n                        queue[l.zIndex] = l;\n                    }\n                } else {\n                    out.push(l.apply(scope, args));\n                    if (stop) {\n                        break;\n                    }\n                }\n            }\n            stop = oldstop;\n            current_event = ce;\n            return out;\n        };\n    // Undocumented. Debug only.\n    eve._events = events;\n    /*\\\n     * eve.listeners\n     [ method ]\n\n     * Internal method which gives you array of all event handlers that will be triggered by the given `name`.\n\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated\n\n     = (array) array of event handlers\n    \\*/\n    eve.listeners = function (name) {\n        var names = isArray(name) ? name : name.split(separator),\n            e = events,\n            item,\n            items,\n            k,\n            i,\n            ii,\n            j,\n            jj,\n            nes,\n            es = [e],\n            out = [];\n        for (i = 0, ii = names.length; i < ii; i++) {\n            nes = [];\n            for (j = 0, jj = es.length; j < jj; j++) {\n                e = es[j].n;\n                items = [e[names[i]], e[wildcard]];\n                k = 2;\n                while (k--) {\n                    item = items[k];\n                    if (item) {\n                        nes.push(item);\n                        out = out.concat(item.f || []);\n                    }\n                }\n            }\n            es = nes;\n        }\n        return out;\n    };\n    /*\\\n     * eve.separator\n     [ method ]\n\n     * If for some reasons you don’t like default separators (`.` or `/`) you can specify yours\n     * here. Be aware that if you pass a string longer than one character it will be treated as\n     * a list of characters.\n\n     - separator (string) new separator. Empty string resets to default: `.` or `/`.\n    \\*/\n    eve.separator = function (sep) {\n        if (sep) {\n            sep = Str(sep).replace(/(?=[\\.\\^\\]\\[\\-])/g, \"\\\\\");\n            sep = \"[\" + sep + \"]\";\n            separator = new RegExp(sep);\n        } else {\n            separator = /[\\.\\/]/;\n        }\n    };\n    /*\\\n     * eve.on\n     [ method ]\n     **\n     * Binds given event handler with a given name. You can use wildcards “`*`” for the names:\n     | eve.on(\"*.under.*\", f);\n     | eve(\"mouse.under.floor\"); // triggers f\n     * Use @eve to trigger the listener.\n     **\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n     - f (function) event handler function\n     **\n     - name (array) if you don’t want to use separators, you can use array of strings\n     - f (function) event handler function\n     **\n     = (function) returned function accepts a single numeric parameter that represents z-index of the handler. It is an optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment.\n     > Example:\n     | eve.on(\"mouse\", eatIt)(2);\n     | eve.on(\"mouse\", scream);\n     | eve.on(\"mouse\", catchIt)(1);\n     * This will ensure that `catchIt` function will be called before `eatIt`.\n     *\n     * If you want to put your handler before non-indexed handlers, specify a negative value.\n     * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”.\n    \\*/\n    eve.on = function (name, f) {\n        if (typeof f != \"function\") {\n            return function () {};\n        }\n        var names = isArray(name) ? isArray(name[0]) ? name : [name] : Str(name).split(comaseparator);\n        for (var i = 0, ii = names.length; i < ii; i++) {\n            (function (name) {\n                var names = isArray(name) ? name : Str(name).split(separator),\n                    e = events,\n                    exist;\n                for (var i = 0, ii = names.length; i < ii; i++) {\n                    e = e.n;\n                    e = e.hasOwnProperty(names[i]) && e[names[i]] || (e[names[i]] = {n: {}});\n                }\n                e.f = e.f || [];\n                for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {\n                    exist = true;\n                    break;\n                }\n                !exist && e.f.push(f);\n            }(names[i]));\n        }\n        return function (zIndex) {\n            if (+zIndex == +zIndex) {\n                f.zIndex = +zIndex;\n            }\n        };\n    };\n    /*\\\n     * eve.f\n     [ method ]\n     **\n     * Returns function that will fire given event with optional arguments.\n     * Arguments that will be passed to the result function will be also\n     * concated to the list of final arguments.\n     | el.onclick = eve.f(\"click\", 1, 2);\n     | eve.on(\"click\", function (a, b, c) {\n     |     console.log(a, b, c); // 1, 2, [event object]\n     | });\n     - event (string) event name\n     - varargs (…) and any other arguments\n     = (function) possible event handler function\n    \\*/\n    eve.f = function (event) {\n        var attrs = [].slice.call(arguments, 1);\n        return function () {\n            eve.apply(null, [event, null].concat(attrs).concat([].slice.call(arguments, 0)));\n        };\n    };\n    /*\\\n     * eve.stop\n     [ method ]\n     **\n     * Is used inside an event handler to stop the event, preventing any subsequent listeners from firing.\n    \\*/\n    eve.stop = function () {\n        stop = 1;\n    };\n    /*\\\n     * eve.nt\n     [ method ]\n     **\n     * Could be used inside event handler to figure out actual name of the event.\n     **\n     - subname (string) #optional subname of the event\n     **\n     = (string) name of the event, if `subname` is not specified\n     * or\n     = (boolean) `true`, if current event’s name contains `subname`\n    \\*/\n    eve.nt = function (subname) {\n        var cur = isArray(current_event) ? current_event.join(\".\") : current_event;\n        if (subname) {\n            return new RegExp(\"(?:\\\\.|\\\\/|^)\" + subname + \"(?:\\\\.|\\\\/|$)\").test(cur);\n        }\n        return cur;\n    };\n    /*\\\n     * eve.nts\n     [ method ]\n     **\n     * Could be used inside event handler to figure out actual name of the event.\n     **\n     **\n     = (array) names of the event\n    \\*/\n    eve.nts = function () {\n        return isArray(current_event) ? current_event : current_event.split(separator);\n    };\n    /*\\\n     * eve.off\n     [ method ]\n     **\n     * Removes given function from the list of event listeners assigned to given name.\n     * If no arguments specified all the events will be cleared.\n     **\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n     - f (function) event handler function\n    \\*/\n    /*\\\n     * eve.unbind\n     [ method ]\n     **\n     * See @eve.off\n    \\*/\n    eve.off = eve.unbind = function (name, f) {\n        if (!name) {\n            eve._events = events = {n: {}};\n            return;\n        }\n        var names = isArray(name) ? isArray(name[0]) ? name : [name] : Str(name).split(comaseparator);\n        if (names.length > 1) {\n            for (var i = 0, ii = names.length; i < ii; i++) {\n                eve.off(names[i], f);\n            }\n            return;\n        }\n        names = isArray(name) ? name : Str(name).split(separator);\n        var e,\n            key,\n            splice,\n            i, ii, j, jj,\n            cur = [events],\n            inodes = [];\n        for (i = 0, ii = names.length; i < ii; i++) {\n            for (j = 0; j < cur.length; j += splice.length - 2) {\n                splice = [j, 1];\n                e = cur[j].n;\n                if (names[i] != wildcard) {\n                    if (e[names[i]]) {\n                        splice.push(e[names[i]]);\n                        inodes.unshift({\n                            n: e,\n                            name: names[i]\n                        });\n                    }\n                } else {\n                    for (key in e) if (e[has](key)) {\n                        splice.push(e[key]);\n                        inodes.unshift({\n                            n: e,\n                            name: key\n                        });\n                    }\n                }\n                cur.splice.apply(cur, splice);\n            }\n        }\n        for (i = 0, ii = cur.length; i < ii; i++) {\n            e = cur[i];\n            while (e.n) {\n                if (f) {\n                    if (e.f) {\n                        for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) {\n                            e.f.splice(j, 1);\n                            break;\n                        }\n                        !e.f.length && delete e.f;\n                    }\n                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n                        var funcs = e.n[key].f;\n                        for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) {\n                            funcs.splice(j, 1);\n                            break;\n                        }\n                        !funcs.length && delete e.n[key].f;\n                    }\n                } else {\n                    delete e.f;\n                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n                        delete e.n[key].f;\n                    }\n                }\n                e = e.n;\n            }\n        }\n        // prune inner nodes in path\n        prune: for (i = 0, ii = inodes.length; i < ii; i++) {\n            e = inodes[i];\n            for (key in e.n[e.name].f) {\n                // not empty (has listeners)\n                continue prune;\n            }\n            for (key in e.n[e.name].n) {\n                // not empty (has children)\n                continue prune;\n            }\n            // is empty\n            delete e.n[e.name];\n        }\n    };\n    /*\\\n     * eve.once\n     [ method ]\n     **\n     * Binds given event handler with a given name to only run once then unbind itself.\n     | eve.once(\"login\", f);\n     | eve(\"login\"); // triggers f\n     | eve(\"login\"); // no listeners\n     * Use @eve to trigger the listener.\n     **\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n     - f (function) event handler function\n     **\n     = (function) same return function as @eve.on\n    \\*/\n    eve.once = function (name, f) {\n        var f2 = function () {\n            eve.off(name, f2);\n            return f.apply(this, arguments);\n        };\n        return eve.on(name, f2);\n    };\n    /*\\\n     * eve.version\n     [ property (string) ]\n     **\n     * Current version of the library.\n    \\*/\n    eve.version = version;\n    eve.toString = function () {\n        return \"You are running Eve \" + version;\n    };\n    glob.eve = eve;\n    typeof module != \"undefined\" && module.exports ? module.exports = eve : typeof define === \"function\" && define.amd ? define(\"eve\", [], function () { return eve; }) : glob.eve = eve;\n})(typeof window != \"undefined\" ? window : this);\n\n// ┌─────────────────────────────────────────────────────────────────────┐ \\\\\n// │ \"Raphaël 2.2.7\" - JavaScript Vector Library                         │ \\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright (c) 2008-2016 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\\\\n// │ Copyright (c) 2008-2016 Sencha Labs (http://sencha.com)             │ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\\\\n// └─────────────────────────────────────────────────────────────────────┘ \\\\\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Raphael\"] = factory();\n\telse\n\t\troot[\"Raphael\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), __webpack_require__(3), __webpack_require__(4)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) {\n\n\t    return R;\n\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_RESULT__ = function(eve) {\n\n\t    /*\\\n\t     * Raphael\n\t     [ method ]\n\t     **\n\t     * Creates a canvas object on which to draw.\n\t     * You must do this first, as all future calls to drawing methods\n\t     * from this instance will be bound to this canvas.\n\t     > Parameters\n\t     **\n\t     - container (HTMLElement|string) DOM element or its ID which is going to be a parent for drawing surface\n\t     - width (number)\n\t     - height (number)\n\t     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\n\t     * or\n\t     - x (number)\n\t     - y (number)\n\t     - width (number)\n\t     - height (number)\n\t     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\n\t     * or\n\t     - all (array) (first 3 or 4 elements in the array are equal to [containerID, width, height] or [x, y, width, height]. The rest are element descriptions in format {type: type, <attributes>}). See @Paper.add.\n\t     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\n\t     * or\n\t     - onReadyCallback (function) function that is going to be called on DOM ready event. You can also subscribe to this event via Eveâ€™s â€œDOMLoadâ€ event. In this case method returns `undefined`.\n\t     = (object) @Paper\n\t     > Usage\n\t     | // Each of the following examples create a canvas\n\t     | // that is 320px wide by 200px high.\n\t     | // Canvas is created at the viewportâ€™s 10,50 coordinate.\n\t     | var paper = Raphael(10, 50, 320, 200);\n\t     | // Canvas is created at the top left corner of the #notepad element\n\t     | // (or its top right corner in dir=\"rtl\" elements)\n\t     | var paper = Raphael(document.getElementById(\"notepad\"), 320, 200);\n\t     | // Same as above\n\t     | var paper = Raphael(\"notepad\", 320, 200);\n\t     | // Image dump\n\t     | var set = Raphael([\"notepad\", 320, 200, {\n\t     |     type: \"rect\",\n\t     |     x: 10,\n\t     |     y: 10,\n\t     |     width: 25,\n\t     |     height: 25,\n\t     |     stroke: \"#f00\"\n\t     | }, {\n\t     |     type: \"text\",\n\t     |     x: 30,\n\t     |     y: 40,\n\t     |     text: \"Dump\"\n\t     | }]);\n\t    \\*/\n\t    function R(first) {\n\t        if (R.is(first, \"function\")) {\n\t            return loaded ? first() : eve.on(\"raphael.DOMload\", first);\n\t        } else if (R.is(first, array)) {\n\t            return R._engine.create[apply](R, first.splice(0, 3 + R.is(first[0], nu))).add(first);\n\t        } else {\n\t            var args = Array.prototype.slice.call(arguments, 0);\n\t            if (R.is(args[args.length - 1], \"function\")) {\n\t                var f = args.pop();\n\t                return loaded ? f.call(R._engine.create[apply](R, args)) : eve.on(\"raphael.DOMload\", function () {\n\t                    f.call(R._engine.create[apply](R, args));\n\t                });\n\t            } else {\n\t                return R._engine.create[apply](R, arguments);\n\t            }\n\t        }\n\t    }\n\t    R.version = \"2.2.0\";\n\t    R.eve = eve;\n\t    var loaded,\n\t        separator = /[, ]+/,\n\t        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},\n\t        formatrg = /\\{(\\d+)\\}/g,\n\t        proto = \"prototype\",\n\t        has = \"hasOwnProperty\",\n\t        g = {\n\t            doc: document,\n\t            win: window\n\t        },\n\t        oldRaphael = {\n\t            was: Object.prototype[has].call(g.win, \"Raphael\"),\n\t            is: g.win.Raphael\n\t        },\n\t        Paper = function () {\n\t            /*\\\n\t             * Paper.ca\n\t             [ property (object) ]\n\t             **\n\t             * Shortcut for @Paper.customAttributes\n\t            \\*/\n\t            /*\\\n\t             * Paper.customAttributes\n\t             [ property (object) ]\n\t             **\n\t             * If you have a set of attributes that you would like to represent\n\t             * as a function of some number you can do it easily with custom attributes:\n\t             > Usage\n\t             | paper.customAttributes.hue = function (num) {\n\t             |     num = num % 1;\n\t             |     return {fill: \"hsb(\" + num + \", 0.75, 1)\"};\n\t             | };\n\t             | // Custom attribute â€œhueâ€ will change fill\n\t             | // to be given hue with fixed saturation and brightness.\n\t             | // Now you can use it like this:\n\t             | var c = paper.circle(10, 10, 10).attr({hue: .45});\n\t             | // or even like this:\n\t             | c.animate({hue: 1}, 1e3);\n\t             |\n\t             | // You could also create custom attribute\n\t             | // with multiple parameters:\n\t             | paper.customAttributes.hsb = function (h, s, b) {\n\t             |     return {fill: \"hsb(\" + [h, s, b].join(\",\") + \")\"};\n\t             | };\n\t             | c.attr({hsb: \"0.5 .8 1\"});\n\t             | c.animate({hsb: [1, 0, 0.5]}, 1e3);\n\t            \\*/\n\t            this.ca = this.customAttributes = {};\n\t        },\n\t        paperproto,\n\t        appendChild = \"appendChild\",\n\t        apply = \"apply\",\n\t        concat = \"concat\",\n\t        supportsTouch = ('ontouchstart' in g.win) || g.win.DocumentTouch && g.doc instanceof DocumentTouch, //taken from Modernizr touch test\n\t        E = \"\",\n\t        S = \" \",\n\t        Str = String,\n\t        split = \"split\",\n\t        events = \"click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel\"[split](S),\n\t        touchMap = {\n\t            mousedown: \"touchstart\",\n\t            mousemove: \"touchmove\",\n\t            mouseup: \"touchend\"\n\t        },\n\t        lowerCase = Str.prototype.toLowerCase,\n\t        math = Math,\n\t        mmax = math.max,\n\t        mmin = math.min,\n\t        abs = math.abs,\n\t        pow = math.pow,\n\t        PI = math.PI,\n\t        nu = \"number\",\n\t        string = \"string\",\n\t        array = \"array\",\n\t        toString = \"toString\",\n\t        fillString = \"fill\",\n\t        objectToString = Object.prototype.toString,\n\t        paper = {},\n\t        push = \"push\",\n\t        ISURL = R._ISURL = /^url\\(['\"]?(.+?)['\"]?\\)$/i,\n\t        colourRegExp = /^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i,\n\t        isnan = {\"NaN\": 1, \"Infinity\": 1, \"-Infinity\": 1},\n\t        bezierrg = /^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,\n\t        round = math.round,\n\t        setAttribute = \"setAttribute\",\n\t        toFloat = parseFloat,\n\t        toInt = parseInt,\n\t        upperCase = Str.prototype.toUpperCase,\n\t        availableAttrs = R._availableAttrs = {\n\t            \"arrow-end\": \"none\",\n\t            \"arrow-start\": \"none\",\n\t            blur: 0,\n\t            \"clip-rect\": \"0 0 1e9 1e9\",\n\t            cursor: \"default\",\n\t            cx: 0,\n\t            cy: 0,\n\t            fill: \"#fff\",\n\t            \"fill-opacity\": 1,\n\t            font: '10px \"Arial\"',\n\t            \"font-family\": '\"Arial\"',\n\t            \"font-size\": \"10\",\n\t            \"font-style\": \"normal\",\n\t            \"font-weight\": 400,\n\t            gradient: 0,\n\t            height: 0,\n\t            href: \"http://raphaeljs.com/\",\n\t            \"letter-spacing\": 0,\n\t            opacity: 1,\n\t            path: \"M0,0\",\n\t            r: 0,\n\t            rx: 0,\n\t            ry: 0,\n\t            src: \"\",\n\t            stroke: \"#000\",\n\t            \"stroke-dasharray\": \"\",\n\t            \"stroke-linecap\": \"butt\",\n\t            \"stroke-linejoin\": \"butt\",\n\t            \"stroke-miterlimit\": 0,\n\t            \"stroke-opacity\": 1,\n\t            \"stroke-width\": 1,\n\t            target: \"_blank\",\n\t            \"text-anchor\": \"middle\",\n\t            title: \"Raphael\",\n\t            transform: \"\",\n\t            width: 0,\n\t            x: 0,\n\t            y: 0,\n\t            \"class\": \"\"\n\t        },\n\t        availableAnimAttrs = R._availableAnimAttrs = {\n\t            blur: nu,\n\t            \"clip-rect\": \"csv\",\n\t            cx: nu,\n\t            cy: nu,\n\t            fill: \"colour\",\n\t            \"fill-opacity\": nu,\n\t            \"font-size\": nu,\n\t            height: nu,\n\t            opacity: nu,\n\t            path: \"path\",\n\t            r: nu,\n\t            rx: nu,\n\t            ry: nu,\n\t            stroke: \"colour\",\n\t            \"stroke-opacity\": nu,\n\t            \"stroke-width\": nu,\n\t            transform: \"transform\",\n\t            width: nu,\n\t            x: nu,\n\t            y: nu\n\t        },\n\t        whitespace = /[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]/g,\n\t        commaSpaces = /[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/,\n\t        hsrg = {hs: 1, rg: 1},\n\t        p2s = /,?([achlmqrstvxz]),?/gi,\n\t        pathCommand = /([achlmrqstvz])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/ig,\n\t        tCommand = /([rstm])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/ig,\n\t        pathValues = /(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/ig,\n\t        radial_gradient = R._radial_gradient = /^r(?:\\(([^,]+?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*([^\\)]+?)\\))?/,\n\t        eldata = {},\n\t        sortByKey = function (a, b) {\n\t            return a.key - b.key;\n\t        },\n\t        sortByNumber = function (a, b) {\n\t            return toFloat(a) - toFloat(b);\n\t        },\n\t        fun = function () {},\n\t        pipe = function (x) {\n\t            return x;\n\t        },\n\t        rectPath = R._rectPath = function (x, y, w, h, r) {\n\t            if (r) {\n\t                return [[\"M\", x + r, y], [\"l\", w - r * 2, 0], [\"a\", r, r, 0, 0, 1, r, r], [\"l\", 0, h - r * 2], [\"a\", r, r, 0, 0, 1, -r, r], [\"l\", r * 2 - w, 0], [\"a\", r, r, 0, 0, 1, -r, -r], [\"l\", 0, r * 2 - h], [\"a\", r, r, 0, 0, 1, r, -r], [\"z\"]];\n\t            }\n\t            return [[\"M\", x, y], [\"l\", w, 0], [\"l\", 0, h], [\"l\", -w, 0], [\"z\"]];\n\t        },\n\t        ellipsePath = function (x, y, rx, ry) {\n\t            if (ry == null) {\n\t                ry = rx;\n\t            }\n\t            return [[\"M\", x, y], [\"m\", 0, -ry], [\"a\", rx, ry, 0, 1, 1, 0, 2 * ry], [\"a\", rx, ry, 0, 1, 1, 0, -2 * ry], [\"z\"]];\n\t        },\n\t        getPath = R._getPath = {\n\t            path: function (el) {\n\t                return el.attr(\"path\");\n\t            },\n\t            circle: function (el) {\n\t                var a = el.attrs;\n\t                return ellipsePath(a.cx, a.cy, a.r);\n\t            },\n\t            ellipse: function (el) {\n\t                var a = el.attrs;\n\t                return ellipsePath(a.cx, a.cy, a.rx, a.ry);\n\t            },\n\t            rect: function (el) {\n\t                var a = el.attrs;\n\t                return rectPath(a.x, a.y, a.width, a.height, a.r);\n\t            },\n\t            image: function (el) {\n\t                var a = el.attrs;\n\t                return rectPath(a.x, a.y, a.width, a.height);\n\t            },\n\t            text: function (el) {\n\t                var bbox = el._getBBox();\n\t                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\n\t            },\n\t            set : function(el) {\n\t                var bbox = el._getBBox();\n\t                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\n\t            }\n\t        },\n\t        /*\\\n\t         * Raphael.mapPath\n\t         [ method ]\n\t         **\n\t         * Transform the path string with given matrix.\n\t         > Parameters\n\t         - path (string) path string\n\t         - matrix (object) see @Matrix\n\t         = (string) transformed path string\n\t        \\*/\n\t        mapPath = R.mapPath = function (path, matrix) {\n\t            if (!matrix) {\n\t                return path;\n\t            }\n\t            var x, y, i, j, ii, jj, pathi;\n\t            path = path2curve(path);\n\t            for (i = 0, ii = path.length; i < ii; i++) {\n\t                pathi = path[i];\n\t                for (j = 1, jj = pathi.length; j < jj; j += 2) {\n\t                    x = matrix.x(pathi[j], pathi[j + 1]);\n\t                    y = matrix.y(pathi[j], pathi[j + 1]);\n\t                    pathi[j] = x;\n\t                    pathi[j + 1] = y;\n\t                }\n\t            }\n\t            return path;\n\t        };\n\n\t    R._g = g;\n\t    /*\\\n\t     * Raphael.type\n\t     [ property (string) ]\n\t     **\n\t     * Can be â€œSVGâ€, â€œVMLâ€ or empty, depending on browser support.\n\t    \\*/\n\t    R.type = (g.win.SVGAngle || g.doc.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\") ? \"SVG\" : \"VML\");\n\t    if (R.type == \"VML\") {\n\t        var d = g.doc.createElement(\"div\"),\n\t            b;\n\t        d.innerHTML = '<v:shape adj=\"1\"/>';\n\t        b = d.firstChild;\n\t        b.style.behavior = \"url(#default#VML)\";\n\t        if (!(b && typeof b.adj == \"object\")) {\n\t            return (R.type = E);\n\t        }\n\t        d = null;\n\t    }\n\t    /*\\\n\t     * Raphael.svg\n\t     [ property (boolean) ]\n\t     **\n\t     * `true` if browser supports SVG.\n\t    \\*/\n\t    /*\\\n\t     * Raphael.vml\n\t     [ property (boolean) ]\n\t     **\n\t     * `true` if browser supports VML.\n\t    \\*/\n\t    R.svg = !(R.vml = R.type == \"VML\");\n\t    R._Paper = Paper;\n\t    /*\\\n\t     * Raphael.fn\n\t     [ property (object) ]\n\t     **\n\t     * You can add your own method to the canvas. For example if you want to draw a pie chart,\n\t     * you can create your own pie chart function and ship it as a RaphaÃ«l plugin. To do this\n\t     * you need to extend the `Raphael.fn` object. You should modify the `fn` object before a\n\t     * RaphaÃ«l instance is created, otherwise it will take no effect. Please note that the\n\t     * ability for namespaced plugins was removed in Raphael 2.0. It is up to the plugin to\n\t     * ensure any namespacing ensures proper context.\n\t     > Usage\n\t     | Raphael.fn.arrow = function (x1, y1, x2, y2, size) {\n\t     |     return this.path( ... );\n\t     | };\n\t     | // or create namespace\n\t     | Raphael.fn.mystuff = {\n\t     |     arrow: function () {â€¦},\n\t     |     star: function () {â€¦},\n\t     |     // etcâ€¦\n\t     | };\n\t     | var paper = Raphael(10, 10, 630, 480);\n\t     | // then use it\n\t     | paper.arrow(10, 10, 30, 30, 5).attr({fill: \"#f00\"});\n\t     | paper.mystuff.arrow();\n\t     | paper.mystuff.star();\n\t    \\*/\n\t    R.fn = paperproto = Paper.prototype = R.prototype;\n\t    R._id = 0;\n\t    /*\\\n\t     * Raphael.is\n\t     [ method ]\n\t     **\n\t     * Handful of replacements for `typeof` operator.\n\t     > Parameters\n\t     - o (â€¦) any object or primitive\n\t     - type (string) name of the type, i.e. â€œstringâ€, â€œfunctionâ€, â€œnumberâ€, etc.\n\t     = (boolean) is given value is of given type\n\t    \\*/\n\t    R.is = function (o, type) {\n\t        type = lowerCase.call(type);\n\t        if (type == \"finite\") {\n\t            return !isnan[has](+o);\n\t        }\n\t        if (type == \"array\") {\n\t            return o instanceof Array;\n\t        }\n\t        return  (type == \"null\" && o === null) ||\n\t                (type == typeof o && o !== null) ||\n\t                (type == \"object\" && o === Object(o)) ||\n\t                (type == \"array\" && Array.isArray && Array.isArray(o)) ||\n\t                objectToString.call(o).slice(8, -1).toLowerCase() == type;\n\t    };\n\n\t    function clone(obj) {\n\t        if (typeof obj == \"function\" || Object(obj) !== obj) {\n\t            return obj;\n\t        }\n\t        var res = new obj.constructor;\n\t        for (var key in obj) if (obj[has](key)) {\n\t            res[key] = clone(obj[key]);\n\t        }\n\t        return res;\n\t    }\n\n\t    /*\\\n\t     * Raphael.angle\n\t     [ method ]\n\t     **\n\t     * Returns angle between two or three points\n\t     > Parameters\n\t     - x1 (number) x coord of first point\n\t     - y1 (number) y coord of first point\n\t     - x2 (number) x coord of second point\n\t     - y2 (number) y coord of second point\n\t     - x3 (number) #optional x coord of third point\n\t     - y3 (number) #optional y coord of third point\n\t     = (number) angle in degrees.\n\t    \\*/\n\t    R.angle = function (x1, y1, x2, y2, x3, y3) {\n\t        if (x3 == null) {\n\t            var x = x1 - x2,\n\t                y = y1 - y2;\n\t            if (!x && !y) {\n\t                return 0;\n\t            }\n\t            return (180 + math.atan2(-y, -x) * 180 / PI + 360) % 360;\n\t        } else {\n\t            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);\n\t        }\n\t    };\n\t    /*\\\n\t     * Raphael.rad\n\t     [ method ]\n\t     **\n\t     * Transform angle to radians\n\t     > Parameters\n\t     - deg (number) angle in degrees\n\t     = (number) angle in radians.\n\t    \\*/\n\t    R.rad = function (deg) {\n\t        return deg % 360 * PI / 180;\n\t    };\n\t    /*\\\n\t     * Raphael.deg\n\t     [ method ]\n\t     **\n\t     * Transform angle to degrees\n\t     > Parameters\n\t     - rad (number) angle in radians\n\t     = (number) angle in degrees.\n\t    \\*/\n\t    R.deg = function (rad) {\n\t        return Math.round ((rad * 180 / PI% 360)* 1000) / 1000;\n\t    };\n\t    /*\\\n\t     * Raphael.snapTo\n\t     [ method ]\n\t     **\n\t     * Snaps given value to given grid.\n\t     > Parameters\n\t     - values (array|number) given array of values or step of the grid\n\t     - value (number) value to adjust\n\t     - tolerance (number) #optional tolerance for snapping. Default is `10`.\n\t     = (number) adjusted value.\n\t    \\*/\n\t    R.snapTo = function (values, value, tolerance) {\n\t        tolerance = R.is(tolerance, \"finite\") ? tolerance : 10;\n\t        if (R.is(values, array)) {\n\t            var i = values.length;\n\t            while (i--) if (abs(values[i] - value) <= tolerance) {\n\t                return values[i];\n\t            }\n\t        } else {\n\t            values = +values;\n\t            var rem = value % values;\n\t            if (rem < tolerance) {\n\t                return value - rem;\n\t            }\n\t            if (rem > values - tolerance) {\n\t                return value - rem + values;\n\t            }\n\t        }\n\t        return value;\n\t    };\n\n\t    /*\\\n\t     * Raphael.createUUID\n\t     [ method ]\n\t     **\n\t     * Returns RFC4122, version 4 ID\n\t    \\*/\n\t    var createUUID = R.createUUID = (function (uuidRegEx, uuidReplacer) {\n\t        return function () {\n\t            return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(uuidRegEx, uuidReplacer).toUpperCase();\n\t        };\n\t    })(/[xy]/g, function (c) {\n\t        var r = math.random() * 16 | 0,\n\t            v = c == \"x\" ? r : (r & 3 | 8);\n\t        return v.toString(16);\n\t    });\n\n\t    /*\\\n\t     * Raphael.setWindow\n\t     [ method ]\n\t     **\n\t     * Used when you need to draw in `&lt;iframe>`. Switched window to the iframe one.\n\t     > Parameters\n\t     - newwin (window) new window object\n\t    \\*/\n\t    R.setWindow = function (newwin) {\n\t        eve(\"raphael.setWindow\", R, g.win, newwin);\n\t        g.win = newwin;\n\t        g.doc = g.win.document;\n\t        if (R._engine.initWin) {\n\t            R._engine.initWin(g.win);\n\t        }\n\t    };\n\t    var toHex = function (color) {\n\t        if (R.vml) {\n\t            // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/\n\t            var trim = /^\\s+|\\s+$/g;\n\t            var bod;\n\t            try {\n\t                var docum = new ActiveXObject(\"htmlfile\");\n\t                docum.write(\"<body>\");\n\t                docum.close();\n\t                bod = docum.body;\n\t            } catch(e) {\n\t                bod = createPopup().document.body;\n\t            }\n\t            var range = bod.createTextRange();\n\t            toHex = cacher(function (color) {\n\t                try {\n\t                    bod.style.color = Str(color).replace(trim, E);\n\t                    var value = range.queryCommandValue(\"ForeColor\");\n\t                    value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);\n\t                    return \"#\" + (\"000000\" + value.toString(16)).slice(-6);\n\t                } catch(e) {\n\t                    return \"none\";\n\t                }\n\t            });\n\t        } else {\n\t            var i = g.doc.createElement(\"i\");\n\t            i.title = \"Rapha\\xebl Colour Picker\";\n\t            i.style.display = \"none\";\n\t            g.doc.body.appendChild(i);\n\t            toHex = cacher(function (color) {\n\t                i.style.color = color;\n\t                return g.doc.defaultView.getComputedStyle(i, E).getPropertyValue(\"color\");\n\t            });\n\t        }\n\t        return toHex(color);\n\t    },\n\t    hsbtoString = function () {\n\t        return \"hsb(\" + [this.h, this.s, this.b] + \")\";\n\t    },\n\t    hsltoString = function () {\n\t        return \"hsl(\" + [this.h, this.s, this.l] + \")\";\n\t    },\n\t    rgbtoString = function () {\n\t        return this.hex;\n\t    },\n\t    prepareRGB = function (r, g, b) {\n\t        if (g == null && R.is(r, \"object\") && \"r\" in r && \"g\" in r && \"b\" in r) {\n\t            b = r.b;\n\t            g = r.g;\n\t            r = r.r;\n\t        }\n\t        if (g == null && R.is(r, string)) {\n\t            var clr = R.getRGB(r);\n\t            r = clr.r;\n\t            g = clr.g;\n\t            b = clr.b;\n\t        }\n\t        if (r > 1 || g > 1 || b > 1) {\n\t            r /= 255;\n\t            g /= 255;\n\t            b /= 255;\n\t        }\n\n\t        return [r, g, b];\n\t    },\n\t    packageRGB = function (r, g, b, o) {\n\t        r *= 255;\n\t        g *= 255;\n\t        b *= 255;\n\t        var rgb = {\n\t            r: r,\n\t            g: g,\n\t            b: b,\n\t            hex: R.rgb(r, g, b),\n\t            toString: rgbtoString\n\t        };\n\t        R.is(o, \"finite\") && (rgb.opacity = o);\n\t        return rgb;\n\t    };\n\n\t    /*\\\n\t     * Raphael.color\n\t     [ method ]\n\t     **\n\t     * Parses the color string and returns object with all values for the given color.\n\t     > Parameters\n\t     - clr (string) color string in one of the supported formats (see @Raphael.getRGB)\n\t     = (object) Combined RGB & HSB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue,\n\t     o     hex (string) color in HTML/CSS format: #â€¢â€¢â€¢â€¢â€¢â€¢,\n\t     o     error (boolean) `true` if string canâ€™t be parsed,\n\t     o     h (number) hue,\n\t     o     s (number) saturation,\n\t     o     v (number) value (brightness),\n\t     o     l (number) lightness\n\t     o }\n\t    \\*/\n\t    R.color = function (clr) {\n\t        var rgb;\n\t        if (R.is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"b\" in clr) {\n\t            rgb = R.hsb2rgb(clr);\n\t            clr.r = rgb.r;\n\t            clr.g = rgb.g;\n\t            clr.b = rgb.b;\n\t            clr.hex = rgb.hex;\n\t        } else if (R.is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"l\" in clr) {\n\t            rgb = R.hsl2rgb(clr);\n\t            clr.r = rgb.r;\n\t            clr.g = rgb.g;\n\t            clr.b = rgb.b;\n\t            clr.hex = rgb.hex;\n\t        } else {\n\t            if (R.is(clr, \"string\")) {\n\t                clr = R.getRGB(clr);\n\t            }\n\t            if (R.is(clr, \"object\") && \"r\" in clr && \"g\" in clr && \"b\" in clr) {\n\t                rgb = R.rgb2hsl(clr);\n\t                clr.h = rgb.h;\n\t                clr.s = rgb.s;\n\t                clr.l = rgb.l;\n\t                rgb = R.rgb2hsb(clr);\n\t                clr.v = rgb.b;\n\t            } else {\n\t                clr = {hex: \"none\"};\n\t                clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;\n\t            }\n\t        }\n\t        clr.toString = rgbtoString;\n\t        return clr;\n\t    };\n\t    /*\\\n\t     * Raphael.hsb2rgb\n\t     [ method ]\n\t     **\n\t     * Converts HSB values to RGB object.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - v (number) value or brightness\n\t     = (object) RGB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue,\n\t     o     hex (string) color in HTML/CSS format: #â€¢â€¢â€¢â€¢â€¢â€¢\n\t     o }\n\t    \\*/\n\t    R.hsb2rgb = function (h, s, v, o) {\n\t        if (this.is(h, \"object\") && \"h\" in h && \"s\" in h && \"b\" in h) {\n\t            v = h.b;\n\t            s = h.s;\n\t            o = h.o;\n\t            h = h.h;\n\t        }\n\t        h *= 360;\n\t        var R, G, B, X, C;\n\t        h = (h % 360) / 60;\n\t        C = v * s;\n\t        X = C * (1 - abs(h % 2 - 1));\n\t        R = G = B = v - C;\n\n\t        h = ~~h;\n\t        R += [C, X, 0, 0, X, C][h];\n\t        G += [X, C, C, X, 0, 0][h];\n\t        B += [0, 0, X, C, C, X][h];\n\t        return packageRGB(R, G, B, o);\n\t    };\n\t    /*\\\n\t     * Raphael.hsl2rgb\n\t     [ method ]\n\t     **\n\t     * Converts HSL values to RGB object.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - l (number) luminosity\n\t     = (object) RGB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue,\n\t     o     hex (string) color in HTML/CSS format: #â€¢â€¢â€¢â€¢â€¢â€¢\n\t     o }\n\t    \\*/\n\t    R.hsl2rgb = function (h, s, l, o) {\n\t        if (this.is(h, \"object\") && \"h\" in h && \"s\" in h && \"l\" in h) {\n\t            l = h.l;\n\t            s = h.s;\n\t            h = h.h;\n\t        }\n\t        if (h > 1 || s > 1 || l > 1) {\n\t            h /= 360;\n\t            s /= 100;\n\t            l /= 100;\n\t        }\n\t        h *= 360;\n\t        var R, G, B, X, C;\n\t        h = (h % 360) / 60;\n\t        C = 2 * s * (l < .5 ? l : 1 - l);\n\t        X = C * (1 - abs(h % 2 - 1));\n\t        R = G = B = l - C / 2;\n\n\t        h = ~~h;\n\t        R += [C, X, 0, 0, X, C][h];\n\t        G += [X, C, C, X, 0, 0][h];\n\t        B += [0, 0, X, C, C, X][h];\n\t        return packageRGB(R, G, B, o);\n\t    };\n\t    /*\\\n\t     * Raphael.rgb2hsb\n\t     [ method ]\n\t     **\n\t     * Converts RGB values to HSB object.\n\t     > Parameters\n\t     - r (number) red\n\t     - g (number) green\n\t     - b (number) blue\n\t     = (object) HSB object in format:\n\t     o {\n\t     o     h (number) hue\n\t     o     s (number) saturation\n\t     o     b (number) brightness\n\t     o }\n\t    \\*/\n\t    R.rgb2hsb = function (r, g, b) {\n\t        b = prepareRGB(r, g, b);\n\t        r = b[0];\n\t        g = b[1];\n\t        b = b[2];\n\n\t        var H, S, V, C;\n\t        V = mmax(r, g, b);\n\t        C = V - mmin(r, g, b);\n\t        H = (C == 0 ? null :\n\t             V == r ? (g - b) / C :\n\t             V == g ? (b - r) / C + 2 :\n\t                      (r - g) / C + 4\n\t            );\n\t        H = ((H + 360) % 6) * 60 / 360;\n\t        S = C == 0 ? 0 : C / V;\n\t        return {h: H, s: S, b: V, toString: hsbtoString};\n\t    };\n\t    /*\\\n\t     * Raphael.rgb2hsl\n\t     [ method ]\n\t     **\n\t     * Converts RGB values to HSL object.\n\t     > Parameters\n\t     - r (number) red\n\t     - g (number) green\n\t     - b (number) blue\n\t     = (object) HSL object in format:\n\t     o {\n\t     o     h (number) hue\n\t     o     s (number) saturation\n\t     o     l (number) luminosity\n\t     o }\n\t    \\*/\n\t    R.rgb2hsl = function (r, g, b) {\n\t        b = prepareRGB(r, g, b);\n\t        r = b[0];\n\t        g = b[1];\n\t        b = b[2];\n\n\t        var H, S, L, M, m, C;\n\t        M = mmax(r, g, b);\n\t        m = mmin(r, g, b);\n\t        C = M - m;\n\t        H = (C == 0 ? null :\n\t             M == r ? (g - b) / C :\n\t             M == g ? (b - r) / C + 2 :\n\t                      (r - g) / C + 4);\n\t        H = ((H + 360) % 6) * 60 / 360;\n\t        L = (M + m) / 2;\n\t        S = (C == 0 ? 0 :\n\t             L < .5 ? C / (2 * L) :\n\t                      C / (2 - 2 * L));\n\t        return {h: H, s: S, l: L, toString: hsltoString};\n\t    };\n\t    R._path2string = function () {\n\t        return this.join(\",\").replace(p2s, \"$1\");\n\t    };\n\t    function repush(array, item) {\n\t        for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) {\n\t            return array.push(array.splice(i, 1)[0]);\n\t        }\n\t    }\n\t    function cacher(f, scope, postprocessor) {\n\t        function newf() {\n\t            var arg = Array.prototype.slice.call(arguments, 0),\n\t                args = arg.join(\"\\u2400\"),\n\t                cache = newf.cache = newf.cache || {},\n\t                count = newf.count = newf.count || [];\n\t            if (cache[has](args)) {\n\t                repush(count, args);\n\t                return postprocessor ? postprocessor(cache[args]) : cache[args];\n\t            }\n\t            count.length >= 1e3 && delete cache[count.shift()];\n\t            count.push(args);\n\t            cache[args] = f[apply](scope, arg);\n\t            return postprocessor ? postprocessor(cache[args]) : cache[args];\n\t        }\n\t        return newf;\n\t    }\n\n\t    var preload = R._preload = function (src, f) {\n\t        var img = g.doc.createElement(\"img\");\n\t        img.style.cssText = \"position:absolute;left:-9999em;top:-9999em\";\n\t        img.onload = function () {\n\t            f.call(this);\n\t            this.onload = null;\n\t            g.doc.body.removeChild(this);\n\t        };\n\t        img.onerror = function () {\n\t            g.doc.body.removeChild(this);\n\t        };\n\t        g.doc.body.appendChild(img);\n\t        img.src = src;\n\t    };\n\n\t    function clrToString() {\n\t        return this.hex;\n\t    }\n\n\t    /*\\\n\t     * Raphael.getRGB\n\t     [ method ]\n\t     **\n\t     * Parses colour string as RGB object\n\t     > Parameters\n\t     - colour (string) colour string in one of formats:\n\t     # <ul>\n\t     #     <li>Colour name (â€œ<code>red</code>â€, â€œ<code>green</code>â€, â€œ<code>cornflowerblue</code>â€, etc)</li>\n\t     #     <li>#â€¢â€¢â€¢ â€” shortened HTML colour: (â€œ<code>#000</code>â€, â€œ<code>#fc0</code>â€, etc)</li>\n\t     #     <li>#â€¢â€¢â€¢â€¢â€¢â€¢ â€” full length HTML colour: (â€œ<code>#000000</code>â€, â€œ<code>#bd2300</code>â€)</li>\n\t     #     <li>rgb(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” red, green and blue channelsâ€™ values: (â€œ<code>rgb(200,&nbsp;100,&nbsp;0)</code>â€)</li>\n\t     #     <li>rgb(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %: (â€œ<code>rgb(100%,&nbsp;175%,&nbsp;0%)</code>â€)</li>\n\t     #     <li>hsb(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” hue, saturation and brightness values: (â€œ<code>hsb(0.5,&nbsp;0.25,&nbsp;1)</code>â€)</li>\n\t     #     <li>hsb(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %</li>\n\t     #     <li>hsl(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” same as hsb</li>\n\t     #     <li>hsl(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as hsb</li>\n\t     # </ul>\n\t     = (object) RGB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue\n\t     o     hex (string) color in HTML/CSS format: #â€¢â€¢â€¢â€¢â€¢â€¢,\n\t     o     error (boolean) true if string canâ€™t be parsed\n\t     o }\n\t    \\*/\n\t    R.getRGB = cacher(function (colour) {\n\t        if (!colour || !!((colour = Str(colour)).indexOf(\"-\") + 1)) {\n\t            return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: clrToString};\n\t        }\n\t        if (colour == \"none\") {\n\t            return {r: -1, g: -1, b: -1, hex: \"none\", toString: clrToString};\n\t        }\n\t        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == \"#\") && (colour = toHex(colour));\n\t        var res,\n\t            red,\n\t            green,\n\t            blue,\n\t            opacity,\n\t            t,\n\t            values,\n\t            rgb = colour.match(colourRegExp);\n\t        if (rgb) {\n\t            if (rgb[2]) {\n\t                blue = toInt(rgb[2].substring(5), 16);\n\t                green = toInt(rgb[2].substring(3, 5), 16);\n\t                red = toInt(rgb[2].substring(1, 3), 16);\n\t            }\n\t            if (rgb[3]) {\n\t                blue = toInt((t = rgb[3].charAt(3)) + t, 16);\n\t                green = toInt((t = rgb[3].charAt(2)) + t, 16);\n\t                red = toInt((t = rgb[3].charAt(1)) + t, 16);\n\t            }\n\t            if (rgb[4]) {\n\t                values = rgb[4][split](commaSpaces);\n\t                red = toFloat(values[0]);\n\t                values[0].slice(-1) == \"%\" && (red *= 2.55);\n\t                green = toFloat(values[1]);\n\t                values[1].slice(-1) == \"%\" && (green *= 2.55);\n\t                blue = toFloat(values[2]);\n\t                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n\t                rgb[1].toLowerCase().slice(0, 4) == \"rgba\" && (opacity = toFloat(values[3]));\n\t                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n\t            }\n\t            if (rgb[5]) {\n\t                values = rgb[5][split](commaSpaces);\n\t                red = toFloat(values[0]);\n\t                values[0].slice(-1) == \"%\" && (red *= 2.55);\n\t                green = toFloat(values[1]);\n\t                values[1].slice(-1) == \"%\" && (green *= 2.55);\n\t                blue = toFloat(values[2]);\n\t                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n\t                (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n\t                rgb[1].toLowerCase().slice(0, 4) == \"hsba\" && (opacity = toFloat(values[3]));\n\t                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n\t                return R.hsb2rgb(red, green, blue, opacity);\n\t            }\n\t            if (rgb[6]) {\n\t                values = rgb[6][split](commaSpaces);\n\t                red = toFloat(values[0]);\n\t                values[0].slice(-1) == \"%\" && (red *= 2.55);\n\t                green = toFloat(values[1]);\n\t                values[1].slice(-1) == \"%\" && (green *= 2.55);\n\t                blue = toFloat(values[2]);\n\t                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n\t                (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n\t                rgb[1].toLowerCase().slice(0, 4) == \"hsla\" && (opacity = toFloat(values[3]));\n\t                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n\t                return R.hsl2rgb(red, green, blue, opacity);\n\t            }\n\t            rgb = {r: red, g: green, b: blue, toString: clrToString};\n\t            rgb.hex = \"#\" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);\n\t            R.is(opacity, \"finite\") && (rgb.opacity = opacity);\n\t            return rgb;\n\t        }\n\t        return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: clrToString};\n\t    }, R);\n\t    /*\\\n\t     * Raphael.hsb\n\t     [ method ]\n\t     **\n\t     * Converts HSB values to hex representation of the colour.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - b (number) value or brightness\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.hsb = cacher(function (h, s, b) {\n\t        return R.hsb2rgb(h, s, b).hex;\n\t    });\n\t    /*\\\n\t     * Raphael.hsl\n\t     [ method ]\n\t     **\n\t     * Converts HSL values to hex representation of the colour.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - l (number) luminosity\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.hsl = cacher(function (h, s, l) {\n\t        return R.hsl2rgb(h, s, l).hex;\n\t    });\n\t    /*\\\n\t     * Raphael.rgb\n\t     [ method ]\n\t     **\n\t     * Converts RGB values to hex representation of the colour.\n\t     > Parameters\n\t     - r (number) red\n\t     - g (number) green\n\t     - b (number) blue\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.rgb = cacher(function (r, g, b) {\n\t        function round(x) { return (x + 0.5) | 0; }\n\t        return \"#\" + (16777216 | round(b) | (round(g) << 8) | (round(r) << 16)).toString(16).slice(1);\n\t    });\n\t    /*\\\n\t     * Raphael.getColor\n\t     [ method ]\n\t     **\n\t     * On each call returns next colour in the spectrum. To reset it back to red call @Raphael.getColor.reset\n\t     > Parameters\n\t     - value (number) #optional brightness, default is `0.75`\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.getColor = function (value) {\n\t        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},\n\t            rgb = this.hsb2rgb(start.h, start.s, start.b);\n\t        start.h += .075;\n\t        if (start.h > 1) {\n\t            start.h = 0;\n\t            start.s -= .2;\n\t            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});\n\t        }\n\t        return rgb.hex;\n\t    };\n\t    /*\\\n\t     * Raphael.getColor.reset\n\t     [ method ]\n\t     **\n\t     * Resets spectrum position for @Raphael.getColor back to red.\n\t    \\*/\n\t    R.getColor.reset = function () {\n\t        delete this.start;\n\t    };\n\n\t    // http://schepers.cc/getting-to-the-point\n\t    function catmullRom2bezier(crp, z) {\n\t        var d = [];\n\t        for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n\t            var p = [\n\t                        {x: +crp[i - 2], y: +crp[i - 1]},\n\t                        {x: +crp[i],     y: +crp[i + 1]},\n\t                        {x: +crp[i + 2], y: +crp[i + 3]},\n\t                        {x: +crp[i + 4], y: +crp[i + 5]}\n\t                    ];\n\t            if (z) {\n\t                if (!i) {\n\t                    p[0] = {x: +crp[iLen - 2], y: +crp[iLen - 1]};\n\t                } else if (iLen - 4 == i) {\n\t                    p[3] = {x: +crp[0], y: +crp[1]};\n\t                } else if (iLen - 2 == i) {\n\t                    p[2] = {x: +crp[0], y: +crp[1]};\n\t                    p[3] = {x: +crp[2], y: +crp[3]};\n\t                }\n\t            } else {\n\t                if (iLen - 4 == i) {\n\t                    p[3] = p[2];\n\t                } else if (!i) {\n\t                    p[0] = {x: +crp[i], y: +crp[i + 1]};\n\t                }\n\t            }\n\t            d.push([\"C\",\n\t                  (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n\t                  (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n\t                  (p[1].x + 6 * p[2].x - p[3].x) / 6,\n\t                  (p[1].y + 6*p[2].y - p[3].y) / 6,\n\t                  p[2].x,\n\t                  p[2].y\n\t            ]);\n\t        }\n\n\t        return d;\n\t    }\n\t    /*\\\n\t     * Raphael.parsePathString\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Parses given path string into an array of arrays of path segments.\n\t     > Parameters\n\t     - pathString (string|array) path string or array of segments (in the last case it will be returned straight away)\n\t     = (array) array of segments.\n\t    \\*/\n\t    R.parsePathString = function (pathString) {\n\t        if (!pathString) {\n\t            return null;\n\t        }\n\t        var pth = paths(pathString);\n\t        if (pth.arr) {\n\t            return pathClone(pth.arr);\n\t        }\n\n\t        var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0},\n\t            data = [];\n\t        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption\n\t            data = pathClone(pathString);\n\t        }\n\t        if (!data.length) {\n\t            Str(pathString).replace(pathCommand, function (a, b, c) {\n\t                var params = [],\n\t                    name = b.toLowerCase();\n\t                c.replace(pathValues, function (a, b) {\n\t                    b && params.push(+b);\n\t                });\n\t                if (name == \"m\" && params.length > 2) {\n\t                    data.push([b][concat](params.splice(0, 2)));\n\t                    name = \"l\";\n\t                    b = b == \"m\" ? \"l\" : \"L\";\n\t                }\n\t                if (name == \"r\") {\n\t                    data.push([b][concat](params));\n\t                } else while (params.length >= paramCounts[name]) {\n\t                    data.push([b][concat](params.splice(0, paramCounts[name])));\n\t                    if (!paramCounts[name]) {\n\t                        break;\n\t                    }\n\t                }\n\t            });\n\t        }\n\t        data.toString = R._path2string;\n\t        pth.arr = pathClone(data);\n\t        return data;\n\t    };\n\t    /*\\\n\t     * Raphael.parseTransformString\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Parses given path string into an array of transformations.\n\t     > Parameters\n\t     - TString (string|array) transform string or array of transformations (in the last case it will be returned straight away)\n\t     = (array) array of transformations.\n\t    \\*/\n\t    R.parseTransformString = cacher(function (TString) {\n\t        if (!TString) {\n\t            return null;\n\t        }\n\t        var paramCounts = {r: 3, s: 4, t: 2, m: 6},\n\t            data = [];\n\t        if (R.is(TString, array) && R.is(TString[0], array)) { // rough assumption\n\t            data = pathClone(TString);\n\t        }\n\t        if (!data.length) {\n\t            Str(TString).replace(tCommand, function (a, b, c) {\n\t                var params = [],\n\t                    name = lowerCase.call(b);\n\t                c.replace(pathValues, function (a, b) {\n\t                    b && params.push(+b);\n\t                });\n\t                data.push([b][concat](params));\n\t            });\n\t        }\n\t        data.toString = R._path2string;\n\t        return data;\n\t    });\n\t    // PATHS\n\t    var paths = function (ps) {\n\t        var p = paths.ps = paths.ps || {};\n\t        if (p[ps]) {\n\t            p[ps].sleep = 100;\n\t        } else {\n\t            p[ps] = {\n\t                sleep: 100\n\t            };\n\t        }\n\t        setTimeout(function () {\n\t            for (var key in p) if (p[has](key) && key != ps) {\n\t                p[key].sleep--;\n\t                !p[key].sleep && delete p[key];\n\t            }\n\t        });\n\t        return p[ps];\n\t    };\n\t    /*\\\n\t     * Raphael.findDotsAtSegment\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Find dot coordinates on the given cubic bezier curve at the given t.\n\t     > Parameters\n\t     - p1x (number) x of the first point of the curve\n\t     - p1y (number) y of the first point of the curve\n\t     - c1x (number) x of the first anchor of the curve\n\t     - c1y (number) y of the first anchor of the curve\n\t     - c2x (number) x of the second anchor of the curve\n\t     - c2y (number) y of the second anchor of the curve\n\t     - p2x (number) x of the second point of the curve\n\t     - p2y (number) y of the second point of the curve\n\t     - t (number) position on the curve (0..1)\n\t     = (object) point information in format:\n\t     o {\n\t     o     x: (number) x coordinate of the point\n\t     o     y: (number) y coordinate of the point\n\t     o     m: {\n\t     o         x: (number) x coordinate of the left anchor\n\t     o         y: (number) y coordinate of the left anchor\n\t     o     }\n\t     o     n: {\n\t     o         x: (number) x coordinate of the right anchor\n\t     o         y: (number) y coordinate of the right anchor\n\t     o     }\n\t     o     start: {\n\t     o         x: (number) x coordinate of the start of the curve\n\t     o         y: (number) y coordinate of the start of the curve\n\t     o     }\n\t     o     end: {\n\t     o         x: (number) x coordinate of the end of the curve\n\t     o         y: (number) y coordinate of the end of the curve\n\t     o     }\n\t     o     alpha: (number) angle of the curve derivative at the point\n\t     o }\n\t    \\*/\n\t    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n\t        var t1 = 1 - t,\n\t            t13 = pow(t1, 3),\n\t            t12 = pow(t1, 2),\n\t            t2 = t * t,\n\t            t3 = t2 * t,\n\t            x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x,\n\t            y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y,\n\t            mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x),\n\t            my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y),\n\t            nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x),\n\t            ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y),\n\t            ax = t1 * p1x + t * c1x,\n\t            ay = t1 * p1y + t * c1y,\n\t            cx = t1 * c2x + t * p2x,\n\t            cy = t1 * c2y + t * p2y,\n\t            alpha = (90 - math.atan2(mx - nx, my - ny) * 180 / PI);\n\t        (mx > nx || my < ny) && (alpha += 180);\n\t        return {\n\t            x: x,\n\t            y: y,\n\t            m: {x: mx, y: my},\n\t            n: {x: nx, y: ny},\n\t            start: {x: ax, y: ay},\n\t            end: {x: cx, y: cy},\n\t            alpha: alpha\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.bezierBBox\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Return bounding box of a given cubic bezier curve\n\t     > Parameters\n\t     - p1x (number) x of the first point of the curve\n\t     - p1y (number) y of the first point of the curve\n\t     - c1x (number) x of the first anchor of the curve\n\t     - c1y (number) y of the first anchor of the curve\n\t     - c2x (number) x of the second anchor of the curve\n\t     - c2y (number) y of the second anchor of the curve\n\t     - p2x (number) x of the second point of the curve\n\t     - p2y (number) y of the second point of the curve\n\t     * or\n\t     - bez (array) array of six points for bezier curve\n\t     = (object) point information in format:\n\t     o {\n\t     o     min: {\n\t     o         x: (number) x coordinate of the left point\n\t     o         y: (number) y coordinate of the top point\n\t     o     }\n\t     o     max: {\n\t     o         x: (number) x coordinate of the right point\n\t     o         y: (number) y coordinate of the bottom point\n\t     o     }\n\t     o }\n\t    \\*/\n\t    R.bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n\t        if (!R.is(p1x, \"array\")) {\n\t            p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n\t        }\n\t        var bbox = curveDim.apply(null, p1x);\n\t        return {\n\t            x: bbox.min.x,\n\t            y: bbox.min.y,\n\t            x2: bbox.max.x,\n\t            y2: bbox.max.y,\n\t            width: bbox.max.x - bbox.min.x,\n\t            height: bbox.max.y - bbox.min.y\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.isPointInsideBBox\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns `true` if given point is inside bounding boxes.\n\t     > Parameters\n\t     - bbox (string) bounding box\n\t     - x (string) x coordinate of the point\n\t     - y (string) y coordinate of the point\n\t     = (boolean) `true` if point inside\n\t    \\*/\n\t    R.isPointInsideBBox = function (bbox, x, y) {\n\t        return x >= bbox.x && x <= bbox.x2 && y >= bbox.y && y <= bbox.y2;\n\t    };\n\t    /*\\\n\t     * Raphael.isBBoxIntersect\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns `true` if two bounding boxes intersect\n\t     > Parameters\n\t     - bbox1 (string) first bounding box\n\t     - bbox2 (string) second bounding box\n\t     = (boolean) `true` if they intersect\n\t    \\*/\n\t    R.isBBoxIntersect = function (bbox1, bbox2) {\n\t        var i = R.isPointInsideBBox;\n\t        return i(bbox2, bbox1.x, bbox1.y)\n\t            || i(bbox2, bbox1.x2, bbox1.y)\n\t            || i(bbox2, bbox1.x, bbox1.y2)\n\t            || i(bbox2, bbox1.x2, bbox1.y2)\n\t            || i(bbox1, bbox2.x, bbox2.y)\n\t            || i(bbox1, bbox2.x2, bbox2.y)\n\t            || i(bbox1, bbox2.x, bbox2.y2)\n\t            || i(bbox1, bbox2.x2, bbox2.y2)\n\t            || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)\n\t            && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n\t    };\n\t    function base3(t, p1, p2, p3, p4) {\n\t        var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4,\n\t            t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n\t        return t * t2 - 3 * p1 + 3 * p2;\n\t    }\n\t    function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n\t        if (z == null) {\n\t            z = 1;\n\t        }\n\t        z = z > 1 ? 1 : z < 0 ? 0 : z;\n\t        var z2 = z / 2,\n\t            n = 12,\n\t            Tvalues = [-0.1252,0.1252,-0.3678,0.3678,-0.5873,0.5873,-0.7699,0.7699,-0.9041,0.9041,-0.9816,0.9816],\n\t            Cvalues = [0.2491,0.2491,0.2335,0.2335,0.2032,0.2032,0.1601,0.1601,0.1069,0.1069,0.0472,0.0472],\n\t            sum = 0;\n\t        for (var i = 0; i < n; i++) {\n\t            var ct = z2 * Tvalues[i] + z2,\n\t                xbase = base3(ct, x1, x2, x3, x4),\n\t                ybase = base3(ct, y1, y2, y3, y4),\n\t                comb = xbase * xbase + ybase * ybase;\n\t            sum += Cvalues[i] * math.sqrt(comb);\n\t        }\n\t        return z2 * sum;\n\t    }\n\t    function getTatLen(x1, y1, x2, y2, x3, y3, x4, y4, ll) {\n\t        if (ll < 0 || bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll) {\n\t            return;\n\t        }\n\t        var t = 1,\n\t            step = t / 2,\n\t            t2 = t - step,\n\t            l,\n\t            e = .01;\n\t        l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n\t        while (abs(l - ll) > e) {\n\t            step /= 2;\n\t            t2 += (l < ll ? 1 : -1) * step;\n\t            l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n\t        }\n\t        return t2;\n\t    }\n\t    function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {\n\t        if (\n\t            mmax(x1, x2) < mmin(x3, x4) ||\n\t            mmin(x1, x2) > mmax(x3, x4) ||\n\t            mmax(y1, y2) < mmin(y3, y4) ||\n\t            mmin(y1, y2) > mmax(y3, y4)\n\t        ) {\n\t            return;\n\t        }\n\t        var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4),\n\t            ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4),\n\t            denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n\t        if (!denominator) {\n\t            return;\n\t        }\n\t        var px = nx / denominator,\n\t            py = ny / denominator,\n\t            px2 = +px.toFixed(2),\n\t            py2 = +py.toFixed(2);\n\t        if (\n\t            px2 < +mmin(x1, x2).toFixed(2) ||\n\t            px2 > +mmax(x1, x2).toFixed(2) ||\n\t            px2 < +mmin(x3, x4).toFixed(2) ||\n\t            px2 > +mmax(x3, x4).toFixed(2) ||\n\t            py2 < +mmin(y1, y2).toFixed(2) ||\n\t            py2 > +mmax(y1, y2).toFixed(2) ||\n\t            py2 < +mmin(y3, y4).toFixed(2) ||\n\t            py2 > +mmax(y3, y4).toFixed(2)\n\t        ) {\n\t            return;\n\t        }\n\t        return {x: px, y: py};\n\t    }\n\t    function inter(bez1, bez2) {\n\t        return interHelper(bez1, bez2);\n\t    }\n\t    function interCount(bez1, bez2) {\n\t        return interHelper(bez1, bez2, 1);\n\t    }\n\t    function interHelper(bez1, bez2, justCount) {\n\t        var bbox1 = R.bezierBBox(bez1),\n\t            bbox2 = R.bezierBBox(bez2);\n\t        if (!R.isBBoxIntersect(bbox1, bbox2)) {\n\t            return justCount ? 0 : [];\n\t        }\n\t        var l1 = bezlen.apply(0, bez1),\n\t            l2 = bezlen.apply(0, bez2),\n\t            n1 = mmax(~~(l1 / 5), 1),\n\t            n2 = mmax(~~(l2 / 5), 1),\n\t            dots1 = [],\n\t            dots2 = [],\n\t            xy = {},\n\t            res = justCount ? 0 : [];\n\t        for (var i = 0; i < n1 + 1; i++) {\n\t            var p = R.findDotsAtSegment.apply(R, bez1.concat(i / n1));\n\t            dots1.push({x: p.x, y: p.y, t: i / n1});\n\t        }\n\t        for (i = 0; i < n2 + 1; i++) {\n\t            p = R.findDotsAtSegment.apply(R, bez2.concat(i / n2));\n\t            dots2.push({x: p.x, y: p.y, t: i / n2});\n\t        }\n\t        for (i = 0; i < n1; i++) {\n\t            for (var j = 0; j < n2; j++) {\n\t                var di = dots1[i],\n\t                    di1 = dots1[i + 1],\n\t                    dj = dots2[j],\n\t                    dj1 = dots2[j + 1],\n\t                    ci = abs(di1.x - di.x) < .001 ? \"y\" : \"x\",\n\t                    cj = abs(dj1.x - dj.x) < .001 ? \"y\" : \"x\",\n\t                    is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n\t                if (is) {\n\t                    if (xy[is.x.toFixed(4)] == is.y.toFixed(4)) {\n\t                        continue;\n\t                    }\n\t                    xy[is.x.toFixed(4)] = is.y.toFixed(4);\n\t                    var t1 = di.t + abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t),\n\t                        t2 = dj.t + abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n\t                    if (t1 >= 0 && t1 <= 1.001 && t2 >= 0 && t2 <= 1.001) {\n\t                        if (justCount) {\n\t                            res++;\n\t                        } else {\n\t                            res.push({\n\t                                x: is.x,\n\t                                y: is.y,\n\t                                t1: mmin(t1, 1),\n\t                                t2: mmin(t2, 1)\n\t                            });\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return res;\n\t    }\n\t    /*\\\n\t     * Raphael.pathIntersection\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Finds intersections of two paths\n\t     > Parameters\n\t     - path1 (string) path string\n\t     - path2 (string) path string\n\t     = (array) dots of intersection\n\t     o [\n\t     o     {\n\t     o         x: (number) x coordinate of the point\n\t     o         y: (number) y coordinate of the point\n\t     o         t1: (number) t value for segment of path1\n\t     o         t2: (number) t value for segment of path2\n\t     o         segment1: (number) order number for segment of path1\n\t     o         segment2: (number) order number for segment of path2\n\t     o         bez1: (array) eight coordinates representing beziÃ©r curve for the segment of path1\n\t     o         bez2: (array) eight coordinates representing beziÃ©r curve for the segment of path2\n\t     o     }\n\t     o ]\n\t    \\*/\n\t    R.pathIntersection = function (path1, path2) {\n\t        return interPathHelper(path1, path2);\n\t    };\n\t    R.pathIntersectionNumber = function (path1, path2) {\n\t        return interPathHelper(path1, path2, 1);\n\t    };\n\t    function interPathHelper(path1, path2, justCount) {\n\t        path1 = R._path2curve(path1);\n\t        path2 = R._path2curve(path2);\n\t        var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,\n\t            res = justCount ? 0 : [];\n\t        for (var i = 0, ii = path1.length; i < ii; i++) {\n\t            var pi = path1[i];\n\t            if (pi[0] == \"M\") {\n\t                x1 = x1m = pi[1];\n\t                y1 = y1m = pi[2];\n\t            } else {\n\t                if (pi[0] == \"C\") {\n\t                    bez1 = [x1, y1].concat(pi.slice(1));\n\t                    x1 = bez1[6];\n\t                    y1 = bez1[7];\n\t                } else {\n\t                    bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n\t                    x1 = x1m;\n\t                    y1 = y1m;\n\t                }\n\t                for (var j = 0, jj = path2.length; j < jj; j++) {\n\t                    var pj = path2[j];\n\t                    if (pj[0] == \"M\") {\n\t                        x2 = x2m = pj[1];\n\t                        y2 = y2m = pj[2];\n\t                    } else {\n\t                        if (pj[0] == \"C\") {\n\t                            bez2 = [x2, y2].concat(pj.slice(1));\n\t                            x2 = bez2[6];\n\t                            y2 = bez2[7];\n\t                        } else {\n\t                            bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n\t                            x2 = x2m;\n\t                            y2 = y2m;\n\t                        }\n\t                        var intr = interHelper(bez1, bez2, justCount);\n\t                        if (justCount) {\n\t                            res += intr;\n\t                        } else {\n\t                            for (var k = 0, kk = intr.length; k < kk; k++) {\n\t                                intr[k].segment1 = i;\n\t                                intr[k].segment2 = j;\n\t                                intr[k].bez1 = bez1;\n\t                                intr[k].bez2 = bez2;\n\t                            }\n\t                            res = res.concat(intr);\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return res;\n\t    }\n\t    /*\\\n\t     * Raphael.isPointInsidePath\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns `true` if given point is inside a given closed path.\n\t     > Parameters\n\t     - path (string) path string\n\t     - x (number) x of the point\n\t     - y (number) y of the point\n\t     = (boolean) true, if point is inside the path\n\t    \\*/\n\t    R.isPointInsidePath = function (path, x, y) {\n\t        var bbox = R.pathBBox(path);\n\t        return R.isPointInsideBBox(bbox, x, y) &&\n\t               interPathHelper(path, [[\"M\", x, y], [\"H\", bbox.x2 + 10]], 1) % 2 == 1;\n\t    };\n\t    R._removedFactory = function (methodname) {\n\t        return function () {\n\t            eve(\"raphael.log\", null, \"Rapha\\xebl: you are calling to method \\u201c\" + methodname + \"\\u201d of removed object\", methodname);\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.pathBBox\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Return bounding box of a given path\n\t     > Parameters\n\t     - path (string) path string\n\t     = (object) bounding box\n\t     o {\n\t     o     x: (number) x coordinate of the left top point of the box\n\t     o     y: (number) y coordinate of the left top point of the box\n\t     o     x2: (number) x coordinate of the right bottom point of the box\n\t     o     y2: (number) y coordinate of the right bottom point of the box\n\t     o     width: (number) width of the box\n\t     o     height: (number) height of the box\n\t     o     cx: (number) x coordinate of the center of the box\n\t     o     cy: (number) y coordinate of the center of the box\n\t     o }\n\t    \\*/\n\t    var pathDimensions = R.pathBBox = function (path) {\n\t        var pth = paths(path);\n\t        if (pth.bbox) {\n\t            return clone(pth.bbox);\n\t        }\n\t        if (!path) {\n\t            return {x: 0, y: 0, width: 0, height: 0, x2: 0, y2: 0};\n\t        }\n\t        path = path2curve(path);\n\t        var x = 0,\n\t            y = 0,\n\t            X = [],\n\t            Y = [],\n\t            p;\n\t        for (var i = 0, ii = path.length; i < ii; i++) {\n\t            p = path[i];\n\t            if (p[0] == \"M\") {\n\t                x = p[1];\n\t                y = p[2];\n\t                X.push(x);\n\t                Y.push(y);\n\t            } else {\n\t                var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n\t                X = X[concat](dim.min.x, dim.max.x);\n\t                Y = Y[concat](dim.min.y, dim.max.y);\n\t                x = p[5];\n\t                y = p[6];\n\t            }\n\t        }\n\t        var xmin = mmin[apply](0, X),\n\t            ymin = mmin[apply](0, Y),\n\t            xmax = mmax[apply](0, X),\n\t            ymax = mmax[apply](0, Y),\n\t            width = xmax - xmin,\n\t            height = ymax - ymin,\n\t                bb = {\n\t                x: xmin,\n\t                y: ymin,\n\t                x2: xmax,\n\t                y2: ymax,\n\t                width: width,\n\t                height: height,\n\t                cx: xmin + width / 2,\n\t                cy: ymin + height / 2\n\t            };\n\t        pth.bbox = clone(bb);\n\t        return bb;\n\t    },\n\t        pathClone = function (pathArray) {\n\t            var res = clone(pathArray);\n\t            res.toString = R._path2string;\n\t            return res;\n\t        },\n\t        pathToRelative = R._pathToRelative = function (pathArray) {\n\t            var pth = paths(pathArray);\n\t            if (pth.rel) {\n\t                return pathClone(pth.rel);\n\t            }\n\t            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\n\t                pathArray = R.parsePathString(pathArray);\n\t            }\n\t            var res = [],\n\t                x = 0,\n\t                y = 0,\n\t                mx = 0,\n\t                my = 0,\n\t                start = 0;\n\t            if (pathArray[0][0] == \"M\") {\n\t                x = pathArray[0][1];\n\t                y = pathArray[0][2];\n\t                mx = x;\n\t                my = y;\n\t                start++;\n\t                res.push([\"M\", x, y]);\n\t            }\n\t            for (var i = start, ii = pathArray.length; i < ii; i++) {\n\t                var r = res[i] = [],\n\t                    pa = pathArray[i];\n\t                if (pa[0] != lowerCase.call(pa[0])) {\n\t                    r[0] = lowerCase.call(pa[0]);\n\t                    switch (r[0]) {\n\t                        case \"a\":\n\t                            r[1] = pa[1];\n\t                            r[2] = pa[2];\n\t                            r[3] = pa[3];\n\t                            r[4] = pa[4];\n\t                            r[5] = pa[5];\n\t                            r[6] = +(pa[6] - x).toFixed(3);\n\t                            r[7] = +(pa[7] - y).toFixed(3);\n\t                            break;\n\t                        case \"v\":\n\t                            r[1] = +(pa[1] - y).toFixed(3);\n\t                            break;\n\t                        case \"m\":\n\t                            mx = pa[1];\n\t                            my = pa[2];\n\t                        default:\n\t                            for (var j = 1, jj = pa.length; j < jj; j++) {\n\t                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);\n\t                            }\n\t                    }\n\t                } else {\n\t                    r = res[i] = [];\n\t                    if (pa[0] == \"m\") {\n\t                        mx = pa[1] + x;\n\t                        my = pa[2] + y;\n\t                    }\n\t                    for (var k = 0, kk = pa.length; k < kk; k++) {\n\t                        res[i][k] = pa[k];\n\t                    }\n\t                }\n\t                var len = res[i].length;\n\t                switch (res[i][0]) {\n\t                    case \"z\":\n\t                        x = mx;\n\t                        y = my;\n\t                        break;\n\t                    case \"h\":\n\t                        x += +res[i][len - 1];\n\t                        break;\n\t                    case \"v\":\n\t                        y += +res[i][len - 1];\n\t                        break;\n\t                    default:\n\t                        x += +res[i][len - 2];\n\t                        y += +res[i][len - 1];\n\t                }\n\t            }\n\t            res.toString = R._path2string;\n\t            pth.rel = pathClone(res);\n\t            return res;\n\t        },\n\t        pathToAbsolute = R._pathToAbsolute = function (pathArray) {\n\t            var pth = paths(pathArray);\n\t            if (pth.abs) {\n\t                return pathClone(pth.abs);\n\t            }\n\t            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\n\t                pathArray = R.parsePathString(pathArray);\n\t            }\n\t            if (!pathArray || !pathArray.length) {\n\t                return [[\"M\", 0, 0]];\n\t            }\n\t            var res = [],\n\t                x = 0,\n\t                y = 0,\n\t                mx = 0,\n\t                my = 0,\n\t                start = 0;\n\t            if (pathArray[0][0] == \"M\") {\n\t                x = +pathArray[0][1];\n\t                y = +pathArray[0][2];\n\t                mx = x;\n\t                my = y;\n\t                start++;\n\t                res[0] = [\"M\", x, y];\n\t            }\n\t            var crz = pathArray.length == 3 && pathArray[0][0] == \"M\" && pathArray[1][0].toUpperCase() == \"R\" && pathArray[2][0].toUpperCase() == \"Z\";\n\t            for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {\n\t                res.push(r = []);\n\t                pa = pathArray[i];\n\t                if (pa[0] != upperCase.call(pa[0])) {\n\t                    r[0] = upperCase.call(pa[0]);\n\t                    switch (r[0]) {\n\t                        case \"A\":\n\t                            r[1] = pa[1];\n\t                            r[2] = pa[2];\n\t                            r[3] = pa[3];\n\t                            r[4] = pa[4];\n\t                            r[5] = pa[5];\n\t                            r[6] = +(pa[6] + x);\n\t                            r[7] = +(pa[7] + y);\n\t                            break;\n\t                        case \"V\":\n\t                            r[1] = +pa[1] + y;\n\t                            break;\n\t                        case \"H\":\n\t                            r[1] = +pa[1] + x;\n\t                            break;\n\t                        case \"R\":\n\t                            var dots = [x, y][concat](pa.slice(1));\n\t                            for (var j = 2, jj = dots.length; j < jj; j++) {\n\t                                dots[j] = +dots[j] + x;\n\t                                dots[++j] = +dots[j] + y;\n\t                            }\n\t                            res.pop();\n\t                            res = res[concat](catmullRom2bezier(dots, crz));\n\t                            break;\n\t                        case \"M\":\n\t                            mx = +pa[1] + x;\n\t                            my = +pa[2] + y;\n\t                        default:\n\t                            for (j = 1, jj = pa.length; j < jj; j++) {\n\t                                r[j] = +pa[j] + ((j % 2) ? x : y);\n\t                            }\n\t                    }\n\t                } else if (pa[0] == \"R\") {\n\t                    dots = [x, y][concat](pa.slice(1));\n\t                    res.pop();\n\t                    res = res[concat](catmullRom2bezier(dots, crz));\n\t                    r = [\"R\"][concat](pa.slice(-2));\n\t                } else {\n\t                    for (var k = 0, kk = pa.length; k < kk; k++) {\n\t                        r[k] = pa[k];\n\t                    }\n\t                }\n\t                switch (r[0]) {\n\t                    case \"Z\":\n\t                        x = mx;\n\t                        y = my;\n\t                        break;\n\t                    case \"H\":\n\t                        x = r[1];\n\t                        break;\n\t                    case \"V\":\n\t                        y = r[1];\n\t                        break;\n\t                    case \"M\":\n\t                        mx = r[r.length - 2];\n\t                        my = r[r.length - 1];\n\t                    default:\n\t                        x = r[r.length - 2];\n\t                        y = r[r.length - 1];\n\t                }\n\t            }\n\t            res.toString = R._path2string;\n\t            pth.abs = pathClone(res);\n\t            return res;\n\t        },\n\t        l2c = function (x1, y1, x2, y2) {\n\t            return [x1, y1, x2, y2, x2, y2];\n\t        },\n\t        q2c = function (x1, y1, ax, ay, x2, y2) {\n\t            var _13 = 1 / 3,\n\t                _23 = 2 / 3;\n\t            return [\n\t                    _13 * x1 + _23 * ax,\n\t                    _13 * y1 + _23 * ay,\n\t                    _13 * x2 + _23 * ax,\n\t                    _13 * y2 + _23 * ay,\n\t                    x2,\n\t                    y2\n\t                ];\n\t        },\n\t        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n\t            // for more information of where this math came from visit:\n\t            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n\t            var _120 = PI * 120 / 180,\n\t                rad = PI / 180 * (+angle || 0),\n\t                res = [],\n\t                xy,\n\t                rotate = cacher(function (x, y, rad) {\n\t                    var X = x * math.cos(rad) - y * math.sin(rad),\n\t                        Y = x * math.sin(rad) + y * math.cos(rad);\n\t                    return {x: X, y: Y};\n\t                });\n\t            if (!recursive) {\n\t                xy = rotate(x1, y1, -rad);\n\t                x1 = xy.x;\n\t                y1 = xy.y;\n\t                xy = rotate(x2, y2, -rad);\n\t                x2 = xy.x;\n\t                y2 = xy.y;\n\t                var cos = math.cos(PI / 180 * angle),\n\t                    sin = math.sin(PI / 180 * angle),\n\t                    x = (x1 - x2) / 2,\n\t                    y = (y1 - y2) / 2;\n\t                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n\t                if (h > 1) {\n\t                    h = math.sqrt(h);\n\t                    rx = h * rx;\n\t                    ry = h * ry;\n\t                }\n\t                var rx2 = rx * rx,\n\t                    ry2 = ry * ry,\n\t                    k = (large_arc_flag == sweep_flag ? -1 : 1) *\n\t                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),\n\t                    cx = k * rx * y / ry + (x1 + x2) / 2,\n\t                    cy = k * -ry * x / rx + (y1 + y2) / 2,\n\t                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),\n\t                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));\n\n\t                f1 = x1 < cx ? PI - f1 : f1;\n\t                f2 = x2 < cx ? PI - f2 : f2;\n\t                f1 < 0 && (f1 = PI * 2 + f1);\n\t                f2 < 0 && (f2 = PI * 2 + f2);\n\t                if (sweep_flag && f1 > f2) {\n\t                    f1 = f1 - PI * 2;\n\t                }\n\t                if (!sweep_flag && f2 > f1) {\n\t                    f2 = f2 - PI * 2;\n\t                }\n\t            } else {\n\t                f1 = recursive[0];\n\t                f2 = recursive[1];\n\t                cx = recursive[2];\n\t                cy = recursive[3];\n\t            }\n\t            var df = f2 - f1;\n\t            if (abs(df) > _120) {\n\t                var f2old = f2,\n\t                    x2old = x2,\n\t                    y2old = y2;\n\t                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n\t                x2 = cx + rx * math.cos(f2);\n\t                y2 = cy + ry * math.sin(f2);\n\t                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n\t            }\n\t            df = f2 - f1;\n\t            var c1 = math.cos(f1),\n\t                s1 = math.sin(f1),\n\t                c2 = math.cos(f2),\n\t                s2 = math.sin(f2),\n\t                t = math.tan(df / 4),\n\t                hx = 4 / 3 * rx * t,\n\t                hy = 4 / 3 * ry * t,\n\t                m1 = [x1, y1],\n\t                m2 = [x1 + hx * s1, y1 - hy * c1],\n\t                m3 = [x2 + hx * s2, y2 - hy * c2],\n\t                m4 = [x2, y2];\n\t            m2[0] = 2 * m1[0] - m2[0];\n\t            m2[1] = 2 * m1[1] - m2[1];\n\t            if (recursive) {\n\t                return [m2, m3, m4][concat](res);\n\t            } else {\n\t                res = [m2, m3, m4][concat](res).join()[split](\",\");\n\t                var newres = [];\n\t                for (var i = 0, ii = res.length; i < ii; i++) {\n\t                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n\t                }\n\t                return newres;\n\t            }\n\t        },\n\t        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n\t            var t1 = 1 - t;\n\t            return {\n\t                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,\n\t                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y\n\t            };\n\t        },\n\t        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n\t            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),\n\t                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),\n\t                c = p1x - c1x,\n\t                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,\n\t                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,\n\t                y = [p1y, p2y],\n\t                x = [p1x, p2x],\n\t                dot;\n\t            abs(t1) > \"1e12\" && (t1 = .5);\n\t            abs(t2) > \"1e12\" && (t2 = .5);\n\t            if (t1 > 0 && t1 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            if (t2 > 0 && t2 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);\n\t            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);\n\t            c = p1y - c1y;\n\t            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;\n\t            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;\n\t            abs(t1) > \"1e12\" && (t1 = .5);\n\t            abs(t2) > \"1e12\" && (t2 = .5);\n\t            if (t1 > 0 && t1 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            if (t2 > 0 && t2 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            return {\n\t                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},\n\t                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}\n\t            };\n\t        }),\n\t        path2curve = R._path2curve = cacher(function (path, path2) {\n\t            var pth = !path2 && paths(path);\n\t            if (!path2 && pth.curve) {\n\t                return pathClone(pth.curve);\n\t            }\n\t            var p = pathToAbsolute(path),\n\t                p2 = path2 && pathToAbsolute(path2),\n\t                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n\t                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n\t                processPath = function (path, d, pcom) {\n\t                    var nx, ny, tq = {T:1, Q:1};\n\t                    if (!path) {\n\t                        return [\"C\", d.x, d.y, d.x, d.y, d.x, d.y];\n\t                    }\n\t                    !(path[0] in tq) && (d.qx = d.qy = null);\n\t                    switch (path[0]) {\n\t                        case \"M\":\n\t                            d.X = path[1];\n\t                            d.Y = path[2];\n\t                            break;\n\t                        case \"A\":\n\t                            path = [\"C\"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));\n\t                            break;\n\t                        case \"S\":\n\t                            if (pcom == \"C\" || pcom == \"S\") { // In \"S\" case we have to take into account, if the previous command is C/S.\n\t                                nx = d.x * 2 - d.bx;          // And reflect the previous\n\t                                ny = d.y * 2 - d.by;          // command's control point relative to the current point.\n\t                            }\n\t                            else {                            // or some else or nothing\n\t                                nx = d.x;\n\t                                ny = d.y;\n\t                            }\n\t                            path = [\"C\", nx, ny][concat](path.slice(1));\n\t                            break;\n\t                        case \"T\":\n\t                            if (pcom == \"Q\" || pcom == \"T\") { // In \"T\" case we have to take into account, if the previous command is Q/T.\n\t                                d.qx = d.x * 2 - d.qx;        // And make a reflection similar\n\t                                d.qy = d.y * 2 - d.qy;        // to case \"S\".\n\t                            }\n\t                            else {                            // or something else or nothing\n\t                                d.qx = d.x;\n\t                                d.qy = d.y;\n\t                            }\n\t                            path = [\"C\"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n\t                            break;\n\t                        case \"Q\":\n\t                            d.qx = path[1];\n\t                            d.qy = path[2];\n\t                            path = [\"C\"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n\t                            break;\n\t                        case \"L\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, path[1], path[2]));\n\t                            break;\n\t                        case \"H\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, path[1], d.y));\n\t                            break;\n\t                        case \"V\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, d.x, path[1]));\n\t                            break;\n\t                        case \"Z\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, d.X, d.Y));\n\t                            break;\n\t                    }\n\t                    return path;\n\t                },\n\t                fixArc = function (pp, i) {\n\t                    if (pp[i].length > 7) {\n\t                        pp[i].shift();\n\t                        var pi = pp[i];\n\t                        while (pi.length) {\n\t                            pcoms1[i]=\"A\"; // if created multiple C:s, their original seg is saved\n\t                            p2 && (pcoms2[i]=\"A\"); // the same as above\n\t                            pp.splice(i++, 0, [\"C\"][concat](pi.splice(0, 6)));\n\t                        }\n\t                        pp.splice(i, 1);\n\t                        ii = mmax(p.length, p2 && p2.length || 0);\n\t                    }\n\t                },\n\t                fixM = function (path1, path2, a1, a2, i) {\n\t                    if (path1 && path2 && path1[i][0] == \"M\" && path2[i][0] != \"M\") {\n\t                        path2.splice(i, 0, [\"M\", a2.x, a2.y]);\n\t                        a1.bx = 0;\n\t                        a1.by = 0;\n\t                        a1.x = path1[i][1];\n\t                        a1.y = path1[i][2];\n\t                        ii = mmax(p.length, p2 && p2.length || 0);\n\t                    }\n\t                },\n\t                pcoms1 = [], // path commands of original path p\n\t                pcoms2 = [], // path commands of original path p2\n\t                pfirst = \"\", // temporary holder for original path command\n\t                pcom = \"\"; // holder for previous path command of original path\n\t            for (var i = 0, ii = mmax(p.length, p2 && p2.length || 0); i < ii; i++) {\n\t                p[i] && (pfirst = p[i][0]); // save current path command\n\n\t                if (pfirst != \"C\") // C is not saved yet, because it may be result of conversion\n\t                {\n\t                    pcoms1[i] = pfirst; // Save current path command\n\t                    i && ( pcom = pcoms1[i-1]); // Get previous path command pcom\n\t                }\n\t                p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n\n\t                if (pcoms1[i] != \"A\" && pfirst == \"C\") pcoms1[i] = \"C\"; // A is the only command\n\t                // which may produce multiple C:s\n\t                // so we have to make sure that C is also C in original path\n\n\t                fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n\n\t                if (p2) { // the same procedures is done to p2\n\t                    p2[i] && (pfirst = p2[i][0]);\n\t                    if (pfirst != \"C\")\n\t                    {\n\t                        pcoms2[i] = pfirst;\n\t                        i && (pcom = pcoms2[i-1]);\n\t                    }\n\t                    p2[i] = processPath(p2[i], attrs2, pcom);\n\n\t                    if (pcoms2[i]!=\"A\" && pfirst==\"C\") pcoms2[i]=\"C\";\n\n\t                    fixArc(p2, i);\n\t                }\n\t                fixM(p, p2, attrs, attrs2, i);\n\t                fixM(p2, p, attrs2, attrs, i);\n\t                var seg = p[i],\n\t                    seg2 = p2 && p2[i],\n\t                    seglen = seg.length,\n\t                    seg2len = p2 && seg2.length;\n\t                attrs.x = seg[seglen - 2];\n\t                attrs.y = seg[seglen - 1];\n\t                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;\n\t                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;\n\t                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);\n\t                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);\n\t                attrs2.x = p2 && seg2[seg2len - 2];\n\t                attrs2.y = p2 && seg2[seg2len - 1];\n\t            }\n\t            if (!p2) {\n\t                pth.curve = pathClone(p);\n\t            }\n\t            return p2 ? [p, p2] : p;\n\t        }, null, pathClone),\n\t        parseDots = R._parseDots = cacher(function (gradient) {\n\t            var dots = [];\n\t            for (var i = 0, ii = gradient.length; i < ii; i++) {\n\t                var dot = {},\n\t                    par = gradient[i].match(/^([^:]*):?([\\d\\.]*)/);\n\t                dot.color = R.getRGB(par[1]);\n\t                if (dot.color.error) {\n\t                    return null;\n\t                }\n\t                dot.opacity = dot.color.opacity;\n\t                dot.color = dot.color.hex;\n\t                par[2] && (dot.offset = par[2] + \"%\");\n\t                dots.push(dot);\n\t            }\n\t            for (i = 1, ii = dots.length - 1; i < ii; i++) {\n\t                if (!dots[i].offset) {\n\t                    var start = toFloat(dots[i - 1].offset || 0),\n\t                        end = 0;\n\t                    for (var j = i + 1; j < ii; j++) {\n\t                        if (dots[j].offset) {\n\t                            end = dots[j].offset;\n\t                            break;\n\t                        }\n\t                    }\n\t                    if (!end) {\n\t                        end = 100;\n\t                        j = ii;\n\t                    }\n\t                    end = toFloat(end);\n\t                    var d = (end - start) / (j - i + 1);\n\t                    for (; i < j; i++) {\n\t                        start += d;\n\t                        dots[i].offset = start + \"%\";\n\t                    }\n\t                }\n\t            }\n\t            return dots;\n\t        }),\n\t        tear = R._tear = function (el, paper) {\n\t            el == paper.top && (paper.top = el.prev);\n\t            el == paper.bottom && (paper.bottom = el.next);\n\t            el.next && (el.next.prev = el.prev);\n\t            el.prev && (el.prev.next = el.next);\n\t        },\n\t        tofront = R._tofront = function (el, paper) {\n\t            if (paper.top === el) {\n\t                return;\n\t            }\n\t            tear(el, paper);\n\t            el.next = null;\n\t            el.prev = paper.top;\n\t            paper.top.next = el;\n\t            paper.top = el;\n\t        },\n\t        toback = R._toback = function (el, paper) {\n\t            if (paper.bottom === el) {\n\t                return;\n\t            }\n\t            tear(el, paper);\n\t            el.next = paper.bottom;\n\t            el.prev = null;\n\t            paper.bottom.prev = el;\n\t            paper.bottom = el;\n\t        },\n\t        insertafter = R._insertafter = function (el, el2, paper) {\n\t            tear(el, paper);\n\t            el2 == paper.top && (paper.top = el);\n\t            el2.next && (el2.next.prev = el);\n\t            el.next = el2.next;\n\t            el.prev = el2;\n\t            el2.next = el;\n\t        },\n\t        insertbefore = R._insertbefore = function (el, el2, paper) {\n\t            tear(el, paper);\n\t            el2 == paper.bottom && (paper.bottom = el);\n\t            el2.prev && (el2.prev.next = el);\n\t            el.prev = el2.prev;\n\t            el2.prev = el;\n\t            el.next = el2;\n\t        },\n\t        /*\\\n\t         * Raphael.toMatrix\n\t         [ method ]\n\t         **\n\t         * Utility method\n\t         **\n\t         * Returns matrix of transformations applied to a given path\n\t         > Parameters\n\t         - path (string) path string\n\t         - transform (string|array) transformation string\n\t         = (object) @Matrix\n\t        \\*/\n\t        toMatrix = R.toMatrix = function (path, transform) {\n\t            var bb = pathDimensions(path),\n\t                el = {\n\t                    _: {\n\t                        transform: E\n\t                    },\n\t                    getBBox: function () {\n\t                        return bb;\n\t                    }\n\t                };\n\t            extractTransform(el, transform);\n\t            return el.matrix;\n\t        },\n\t        /*\\\n\t         * Raphael.transformPath\n\t         [ method ]\n\t         **\n\t         * Utility method\n\t         **\n\t         * Returns path transformed by a given transformation\n\t         > Parameters\n\t         - path (string) path string\n\t         - transform (string|array) transformation string\n\t         = (string) path\n\t        \\*/\n\t        transformPath = R.transformPath = function (path, transform) {\n\t            return mapPath(path, toMatrix(path, transform));\n\n\t        },\n\t        extractTransform = R._extractTransform = function (el, tstr) {\n\t            if (tstr == null) {\n\t                return el._.transform;\n\t            }\n\t            tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, el._.transform || E);\n\t            var tdata = R.parseTransformString(tstr),\n\t                deg = 0,\n\t                dx = 0,\n\t                dy = 0,\n\t                sx = 1,\n\t                sy = 1,\n\t                _ = el._,\n\t                m = new Matrix;\n\t            _.transform = tdata || [];\n\t            if (tdata) {\n\t                for (var i = 0, ii = tdata.length; i < ii; i++) {\n\t                    var t = tdata[i],\n\t                        tlen = t.length,\n\t                        command = Str(t[0]).toLowerCase(),\n\t                        absolute = t[0] != command,\n\t                        inver = absolute ? m.invert() : 0,\n\t                        x1,\n\t                        y1,\n\t                        x2,\n\t                        y2,\n\t                        bb;\n\t                    if (command == \"t\" && tlen == 3) {\n\t                        if (absolute) {\n\t                            x1 = inver.x(0, 0);\n\t                            y1 = inver.y(0, 0);\n\t                            x2 = inver.x(t[1], t[2]);\n\t                            y2 = inver.y(t[1], t[2]);\n\t                            m.translate(x2 - x1, y2 - y1);\n\t                        } else {\n\t                            m.translate(t[1], t[2]);\n\t                        }\n\t                    } else if (command == \"r\") {\n\t                        if (tlen == 2) {\n\t                            bb = bb || el.getBBox(1);\n\t                            m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n\t                            deg += t[1];\n\t                        } else if (tlen == 4) {\n\t                            if (absolute) {\n\t                                x2 = inver.x(t[2], t[3]);\n\t                                y2 = inver.y(t[2], t[3]);\n\t                                m.rotate(t[1], x2, y2);\n\t                            } else {\n\t                                m.rotate(t[1], t[2], t[3]);\n\t                            }\n\t                            deg += t[1];\n\t                        }\n\t                    } else if (command == \"s\") {\n\t                        if (tlen == 2 || tlen == 3) {\n\t                            bb = bb || el.getBBox(1);\n\t                            m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n\t                            sx *= t[1];\n\t                            sy *= t[tlen - 1];\n\t                        } else if (tlen == 5) {\n\t                            if (absolute) {\n\t                                x2 = inver.x(t[3], t[4]);\n\t                                y2 = inver.y(t[3], t[4]);\n\t                                m.scale(t[1], t[2], x2, y2);\n\t                            } else {\n\t                                m.scale(t[1], t[2], t[3], t[4]);\n\t                            }\n\t                            sx *= t[1];\n\t                            sy *= t[2];\n\t                        }\n\t                    } else if (command == \"m\" && tlen == 7) {\n\t                        m.add(t[1], t[2], t[3], t[4], t[5], t[6]);\n\t                    }\n\t                    _.dirtyT = 1;\n\t                    el.matrix = m;\n\t                }\n\t            }\n\n\t            /*\\\n\t             * Element.matrix\n\t             [ property (object) ]\n\t             **\n\t             * Keeps @Matrix object, which represents element transformation\n\t            \\*/\n\t            el.matrix = m;\n\n\t            _.sx = sx;\n\t            _.sy = sy;\n\t            _.deg = deg;\n\t            _.dx = dx = m.e;\n\t            _.dy = dy = m.f;\n\n\t            if (sx == 1 && sy == 1 && !deg && _.bbox) {\n\t                _.bbox.x += +dx;\n\t                _.bbox.y += +dy;\n\t            } else {\n\t                _.dirtyT = 1;\n\t            }\n\t        },\n\t        getEmpty = function (item) {\n\t            var l = item[0];\n\t            switch (l.toLowerCase()) {\n\t                case \"t\": return [l, 0, 0];\n\t                case \"m\": return [l, 1, 0, 0, 1, 0, 0];\n\t                case \"r\": if (item.length == 4) {\n\t                    return [l, 0, item[2], item[3]];\n\t                } else {\n\t                    return [l, 0];\n\t                }\n\t                case \"s\": if (item.length == 5) {\n\t                    return [l, 1, 1, item[3], item[4]];\n\n\t                } else if (item.length == 3) {\n\t                    return [l, 1, 1];\n\t                } else {\n\t                    return [l, 1];\n\t                }\n\t            }\n\t        },\n\t        equaliseTransform = R._equaliseTransform = function (t1, t2) {\n\t            t2 = Str(t2).replace(/\\.{3}|\\u2026/g, t1);\n\t            t1 = R.parseTransformString(t1) || [];\n\t            t2 = R.parseTransformString(t2) || [];\n\t            var maxlength = mmax(t1.length, t2.length),\n\t                from = [],\n\t                to = [],\n\t                i = 0, j, jj,\n\t                tt1, tt2;\n\t            for (; i < maxlength; i++) {\n\t                tt1 = t1[i] || getEmpty(t2[i]);\n\t                tt2 = t2[i] || getEmpty(tt1);\n\t                if ((tt1[0] != tt2[0]) ||\n\t                    (tt1[0].toLowerCase() == \"r\" && (tt1[2] != tt2[2] || tt1[3] != tt2[3])) ||\n\t                    (tt1[0].toLowerCase() == \"s\" && (tt1[3] != tt2[3] || tt1[4] != tt2[4]))\n\t                    ) {\n\t                    return;\n\t                }\n\t                from[i] = [];\n\t                to[i] = [];\n\t                for (j = 0, jj = mmax(tt1.length, tt2.length); j < jj; j++) {\n\t                    j in tt1 && (from[i][j] = tt1[j]);\n\t                    j in tt2 && (to[i][j] = tt2[j]);\n\t                }\n\t            }\n\t            return {\n\t                from: from,\n\t                to: to\n\t            };\n\t        };\n\t    R._getContainer = function (x, y, w, h) {\n\t        var container;\n\t        container = h == null && !R.is(x, \"object\") ? g.doc.getElementById(x) : x;\n\t        if (container == null) {\n\t            return;\n\t        }\n\t        if (container.tagName) {\n\t            if (y == null) {\n\t                return {\n\t                    container: container,\n\t                    width: container.style.pixelWidth || container.offsetWidth,\n\t                    height: container.style.pixelHeight || container.offsetHeight\n\t                };\n\t            } else {\n\t                return {\n\t                    container: container,\n\t                    width: y,\n\t                    height: w\n\t                };\n\t            }\n\t        }\n\t        return {\n\t            container: 1,\n\t            x: x,\n\t            y: y,\n\t            width: w,\n\t            height: h\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.pathToRelative\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Converts path to relative form\n\t     > Parameters\n\t     - pathString (string|array) path string or array of segments\n\t     = (array) array of segments.\n\t    \\*/\n\t    R.pathToRelative = pathToRelative;\n\t    R._engine = {};\n\t    /*\\\n\t     * Raphael.path2curve\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Converts path to a new path where all segments are cubic bezier curves.\n\t     > Parameters\n\t     - pathString (string|array) path string or array of segments\n\t     = (array) array of segments.\n\t    \\*/\n\t    R.path2curve = path2curve;\n\t    /*\\\n\t     * Raphael.matrix\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns matrix based on given parameters.\n\t     > Parameters\n\t     - a (number)\n\t     - b (number)\n\t     - c (number)\n\t     - d (number)\n\t     - e (number)\n\t     - f (number)\n\t     = (object) @Matrix\n\t    \\*/\n\t    R.matrix = function (a, b, c, d, e, f) {\n\t        return new Matrix(a, b, c, d, e, f);\n\t    };\n\t    function Matrix(a, b, c, d, e, f) {\n\t        if (a != null) {\n\t            this.a = +a;\n\t            this.b = +b;\n\t            this.c = +c;\n\t            this.d = +d;\n\t            this.e = +e;\n\t            this.f = +f;\n\t        } else {\n\t            this.a = 1;\n\t            this.b = 0;\n\t            this.c = 0;\n\t            this.d = 1;\n\t            this.e = 0;\n\t            this.f = 0;\n\t        }\n\t    }\n\t    (function (matrixproto) {\n\t        /*\\\n\t         * Matrix.add\n\t         [ method ]\n\t         **\n\t         * Adds given matrix to existing one.\n\t         > Parameters\n\n\t         - a (number)\n\t         - b (number)\n\t         - c (number)\n\t         - d (number)\n\t         - e (number)\n\t         - f (number)\n\t         or\n\t         - matrix (object) @Matrix\n\t        \\*/\n\t        matrixproto.add = function (a, b, c, d, e, f) {\n\t            var out = [[], [], []],\n\t                m = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]],\n\t                matrix = [[a, c, e], [b, d, f], [0, 0, 1]],\n\t                x, y, z, res;\n\n\t            if (a && a instanceof Matrix) {\n\t                matrix = [[a.a, a.c, a.e], [a.b, a.d, a.f], [0, 0, 1]];\n\t            }\n\n\t            for (x = 0; x < 3; x++) {\n\t                for (y = 0; y < 3; y++) {\n\t                    res = 0;\n\t                    for (z = 0; z < 3; z++) {\n\t                        res += m[x][z] * matrix[z][y];\n\t                    }\n\t                    out[x][y] = res;\n\t                }\n\t            }\n\t            this.a = out[0][0];\n\t            this.b = out[1][0];\n\t            this.c = out[0][1];\n\t            this.d = out[1][1];\n\t            this.e = out[0][2];\n\t            this.f = out[1][2];\n\t        };\n\t        /*\\\n\t         * Matrix.invert\n\t         [ method ]\n\t         **\n\t         * Returns inverted version of the matrix\n\t         = (object) @Matrix\n\t        \\*/\n\t        matrixproto.invert = function () {\n\t            var me = this,\n\t                x = me.a * me.d - me.b * me.c;\n\t            return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x);\n\t        };\n\t        /*\\\n\t         * Matrix.clone\n\t         [ method ]\n\t         **\n\t         * Returns copy of the matrix\n\t         = (object) @Matrix\n\t        \\*/\n\t        matrixproto.clone = function () {\n\t            return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n\t        };\n\t        /*\\\n\t         * Matrix.translate\n\t         [ method ]\n\t         **\n\t         * Translate the matrix\n\t         > Parameters\n\t         - x (number)\n\t         - y (number)\n\t        \\*/\n\t        matrixproto.translate = function (x, y) {\n\t            this.add(1, 0, 0, 1, x, y);\n\t        };\n\t        /*\\\n\t         * Matrix.scale\n\t         [ method ]\n\t         **\n\t         * Scales the matrix\n\t         > Parameters\n\t         - x (number)\n\t         - y (number) #optional\n\t         - cx (number) #optional\n\t         - cy (number) #optional\n\t        \\*/\n\t        matrixproto.scale = function (x, y, cx, cy) {\n\t            y == null && (y = x);\n\t            (cx || cy) && this.add(1, 0, 0, 1, cx, cy);\n\t            this.add(x, 0, 0, y, 0, 0);\n\t            (cx || cy) && this.add(1, 0, 0, 1, -cx, -cy);\n\t        };\n\t        /*\\\n\t         * Matrix.rotate\n\t         [ method ]\n\t         **\n\t         * Rotates the matrix\n\t         > Parameters\n\t         - a (number)\n\t         - x (number)\n\t         - y (number)\n\t        \\*/\n\t        matrixproto.rotate = function (a, x, y) {\n\t            a = R.rad(a);\n\t            x = x || 0;\n\t            y = y || 0;\n\t            var cos = +math.cos(a).toFixed(9),\n\t                sin = +math.sin(a).toFixed(9);\n\t            this.add(cos, sin, -sin, cos, x, y);\n\t            this.add(1, 0, 0, 1, -x, -y);\n\t        };\n\t        /*\\\n\t         * Matrix.x\n\t         [ method ]\n\t         **\n\t         * Return x coordinate for given point after transformation described by the matrix. See also @Matrix.y\n\t         > Parameters\n\t         - x (number)\n\t         - y (number)\n\t         = (number) x\n\t        \\*/\n\t        matrixproto.x = function (x, y) {\n\t            return x * this.a + y * this.c + this.e;\n\t        };\n\t        /*\\\n\t         * Matrix.y\n\t         [ method ]\n\t         **\n\t         * Return y coordinate for given point after transformation described by the matrix. See also @Matrix.x\n\t         > Parameters\n\t         - x (number)\n\t         - y (number)\n\t         = (number) y\n\t        \\*/\n\t        matrixproto.y = function (x, y) {\n\t            return x * this.b + y * this.d + this.f;\n\t        };\n\t        matrixproto.get = function (i) {\n\t            return +this[Str.fromCharCode(97 + i)].toFixed(4);\n\t        };\n\t        matrixproto.toString = function () {\n\t            return R.svg ?\n\t                \"matrix(\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + \")\" :\n\t                [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join();\n\t        };\n\t        matrixproto.toFilter = function () {\n\t            return \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + this.get(0) +\n\t                \", M12=\" + this.get(2) + \", M21=\" + this.get(1) + \", M22=\" + this.get(3) +\n\t                \", Dx=\" + this.get(4) + \", Dy=\" + this.get(5) + \", sizingmethod='auto expand')\";\n\t        };\n\t        matrixproto.offset = function () {\n\t            return [this.e.toFixed(4), this.f.toFixed(4)];\n\t        };\n\t        function norm(a) {\n\t            return a[0] * a[0] + a[1] * a[1];\n\t        }\n\t        function normalize(a) {\n\t            var mag = math.sqrt(norm(a));\n\t            a[0] && (a[0] /= mag);\n\t            a[1] && (a[1] /= mag);\n\t        }\n\t        /*\\\n\t         * Matrix.split\n\t         [ method ]\n\t         **\n\t         * Splits matrix into primitive transformations\n\t         = (object) in format:\n\t         o dx (number) translation by x\n\t         o dy (number) translation by y\n\t         o scalex (number) scale by x\n\t         o scaley (number) scale by y\n\t         o shear (number) shear\n\t         o rotate (number) rotation in deg\n\t         o isSimple (boolean) could it be represented via simple transformations\n\t        \\*/\n\t        matrixproto.split = function () {\n\t            var out = {};\n\t            // translation\n\t            out.dx = this.e;\n\t            out.dy = this.f;\n\n\t            // scale and shear\n\t            var row = [[this.a, this.c], [this.b, this.d]];\n\t            out.scalex = math.sqrt(norm(row[0]));\n\t            normalize(row[0]);\n\n\t            out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1];\n\t            row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear];\n\n\t            out.scaley = math.sqrt(norm(row[1]));\n\t            normalize(row[1]);\n\t            out.shear /= out.scaley;\n\n\t            // rotation\n\t            var sin = -row[0][1],\n\t                cos = row[1][1];\n\t            if (cos < 0) {\n\t                out.rotate = R.deg(math.acos(cos));\n\t                if (sin < 0) {\n\t                    out.rotate = 360 - out.rotate;\n\t                }\n\t            } else {\n\t                out.rotate = R.deg(math.asin(sin));\n\t            }\n\n\t            out.isSimple = !+out.shear.toFixed(9) && (out.scalex.toFixed(9) == out.scaley.toFixed(9) || !out.rotate);\n\t            out.isSuperSimple = !+out.shear.toFixed(9) && out.scalex.toFixed(9) == out.scaley.toFixed(9) && !out.rotate;\n\t            out.noRotation = !+out.shear.toFixed(9) && !out.rotate;\n\t            return out;\n\t        };\n\t        /*\\\n\t         * Matrix.toTransformString\n\t         [ method ]\n\t         **\n\t         * Return transform string that represents given matrix\n\t         = (string) transform string\n\t        \\*/\n\t        matrixproto.toTransformString = function (shorter) {\n\t            var s = shorter || this[split]();\n\t            if (s.isSimple) {\n\t                s.scalex = +s.scalex.toFixed(4);\n\t                s.scaley = +s.scaley.toFixed(4);\n\t                s.rotate = +s.rotate.toFixed(4);\n\t                return  (s.dx || s.dy ? \"t\" + [s.dx, s.dy] : E) +\n\t                        (s.scalex != 1 || s.scaley != 1 ? \"s\" + [s.scalex, s.scaley, 0, 0] : E) +\n\t                        (s.rotate ? \"r\" + [s.rotate, 0, 0] : E);\n\t            } else {\n\t                return \"m\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)];\n\t            }\n\t        };\n\t    })(Matrix.prototype);\n\n\t    var preventDefault = function () {\n\t        this.returnValue = false;\n\t    },\n\t    preventTouch = function () {\n\t        return this.originalEvent.preventDefault();\n\t    },\n\t    stopPropagation = function () {\n\t        this.cancelBubble = true;\n\t    },\n\t    stopTouch = function () {\n\t        return this.originalEvent.stopPropagation();\n\t    },\n\t    getEventPosition = function (e) {\n\t        var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;\n\n\t        return {\n\t            x: e.clientX + scrollX,\n\t            y: e.clientY + scrollY\n\t        };\n\t    },\n\t    addEvent = (function () {\n\t        if (g.doc.addEventListener) {\n\t            return function (obj, type, fn, element) {\n\t                var f = function (e) {\n\t                    var pos = getEventPosition(e);\n\t                    return fn.call(element, e, pos.x, pos.y);\n\t                };\n\t                obj.addEventListener(type, f, false);\n\n\t                if (supportsTouch && touchMap[type]) {\n\t                    var _f = function (e) {\n\t                        var pos = getEventPosition(e),\n\t                            olde = e;\n\n\t                        for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {\n\t                            if (e.targetTouches[i].target == obj) {\n\t                                e = e.targetTouches[i];\n\t                                e.originalEvent = olde;\n\t                                e.preventDefault = preventTouch;\n\t                                e.stopPropagation = stopTouch;\n\t                                break;\n\t                            }\n\t                        }\n\n\t                        return fn.call(element, e, pos.x, pos.y);\n\t                    };\n\t                    obj.addEventListener(touchMap[type], _f, false);\n\t                }\n\n\t                return function () {\n\t                    obj.removeEventListener(type, f, false);\n\n\t                    if (supportsTouch && touchMap[type])\n\t                        obj.removeEventListener(touchMap[type], _f, false);\n\n\t                    return true;\n\t                };\n\t            };\n\t        } else if (g.doc.attachEvent) {\n\t            return function (obj, type, fn, element) {\n\t                var f = function (e) {\n\t                    e = e || g.win.event;\n\t                    var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t                        scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\n\t                        x = e.clientX + scrollX,\n\t                        y = e.clientY + scrollY;\n\t                    e.preventDefault = e.preventDefault || preventDefault;\n\t                    e.stopPropagation = e.stopPropagation || stopPropagation;\n\t                    return fn.call(element, e, x, y);\n\t                };\n\t                obj.attachEvent(\"on\" + type, f);\n\t                var detacher = function () {\n\t                    obj.detachEvent(\"on\" + type, f);\n\t                    return true;\n\t                };\n\t                return detacher;\n\t            };\n\t        }\n\t    })(),\n\t    drag = [],\n\t    dragMove = function (e) {\n\t        var x = e.clientX,\n\t            y = e.clientY,\n\t            scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\n\t            dragi,\n\t            j = drag.length;\n\t        while (j--) {\n\t            dragi = drag[j];\n\t            if (supportsTouch && e.touches) {\n\t                var i = e.touches.length,\n\t                    touch;\n\t                while (i--) {\n\t                    touch = e.touches[i];\n\t                    if (touch.identifier == dragi.el._drag.id) {\n\t                        x = touch.clientX;\n\t                        y = touch.clientY;\n\t                        (e.originalEvent ? e.originalEvent : e).preventDefault();\n\t                        break;\n\t                    }\n\t                }\n\t            } else {\n\t                e.preventDefault();\n\t            }\n\t            var node = dragi.el.node,\n\t                o,\n\t                next = node.nextSibling,\n\t                parent = node.parentNode,\n\t                display = node.style.display;\n\t            g.win.opera && parent.removeChild(node);\n\t            node.style.display = \"none\";\n\t            o = dragi.el.paper.getElementByPoint(x, y);\n\t            node.style.display = display;\n\t            g.win.opera && (next ? parent.insertBefore(node, next) : parent.appendChild(node));\n\t            o && eve(\"raphael.drag.over.\" + dragi.el.id, dragi.el, o);\n\t            x += scrollX;\n\t            y += scrollY;\n\t            eve(\"raphael.drag.move.\" + dragi.el.id, dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);\n\t        }\n\t    },\n\t    dragUp = function (e) {\n\t        R.unmousemove(dragMove).unmouseup(dragUp);\n\t        var i = drag.length,\n\t            dragi;\n\t        while (i--) {\n\t            dragi = drag[i];\n\t            dragi.el._drag = {};\n\t            eve(\"raphael.drag.end.\" + dragi.el.id, dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);\n\t        }\n\t        drag = [];\n\t    },\n\t    /*\\\n\t     * Raphael.el\n\t     [ property (object) ]\n\t     **\n\t     * You can add your own method to elements. This is useful when you want to hack default functionality or\n\t     * want to wrap some common transformation or attributes in one method. In difference to canvas methods,\n\t     * you can redefine element method at any time. Expending element methods wouldnâ€™t affect set.\n\t     > Usage\n\t     | Raphael.el.red = function () {\n\t     |     this.attr({fill: \"#f00\"});\n\t     | };\n\t     | // then use it\n\t     | paper.circle(100, 100, 20).red();\n\t    \\*/\n\t    elproto = R.el = {};\n\t    /*\\\n\t     * Element.click\n\t     [ method ]\n\t     **\n\t     * Adds event handler for click for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unclick\n\t     [ method ]\n\t     **\n\t     * Removes event handler for click for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.dblclick\n\t     [ method ]\n\t     **\n\t     * Adds event handler for double click for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.undblclick\n\t     [ method ]\n\t     **\n\t     * Removes event handler for double click for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mousedown\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mousedown for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmousedown\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mousedown for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mousemove\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mousemove for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmousemove\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mousemove for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mouseout\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mouseout for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmouseout\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mouseout for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mouseover\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mouseover for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmouseover\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mouseover for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mouseup\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mouseup for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmouseup\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mouseup for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchstart\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchstart for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchstart\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchstart for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchmove\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchmove for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchmove\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchmove for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchend\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchend for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchend\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchend for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchcancel\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchcancel for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchcancel\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchcancel for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    for (var i = events.length; i--;) {\n\t        (function (eventName) {\n\t            R[eventName] = elproto[eventName] = function (fn, scope) {\n\t                if (R.is(fn, \"function\")) {\n\t                    this.events = this.events || [];\n\t                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || g.doc, eventName, fn, scope || this)});\n\t                }\n\t                return this;\n\t            };\n\t            R[\"un\" + eventName] = elproto[\"un\" + eventName] = function (fn) {\n\t                var events = this.events || [],\n\t                    l = events.length;\n\t                while (l--){\n\t                    if (events[l].name == eventName && (R.is(fn, \"undefined\") || events[l].f == fn)) {\n\t                        events[l].unbind();\n\t                        events.splice(l, 1);\n\t                        !events.length && delete this.events;\n\t                    }\n\t                }\n\t                return this;\n\t            };\n\t        })(events[i]);\n\t    }\n\n\t    /*\\\n\t     * Element.data\n\t     [ method ]\n\t     **\n\t     * Adds or retrieves given value associated with given key.\n\t     **\n\t     * See also @Element.removeData\n\t     > Parameters\n\t     - key (string) key to store data\n\t     - value (any) #optional value to store\n\t     = (object) @Element\n\t     * or, if value is not specified:\n\t     = (any) value\n\t     * or, if key and value are not specified:\n\t     = (object) Key/value pairs for all the data associated with the element.\n\t     > Usage\n\t     | for (var i = 0, i < 5, i++) {\n\t     |     paper.circle(10 + 15 * i, 10, 10)\n\t     |          .attr({fill: \"#000\"})\n\t     |          .data(\"i\", i)\n\t     |          .click(function () {\n\t     |             alert(this.data(\"i\"));\n\t     |          });\n\t     | }\n\t    \\*/\n\t    elproto.data = function (key, value) {\n\t        var data = eldata[this.id] = eldata[this.id] || {};\n\t        if (arguments.length == 0) {\n\t            return data;\n\t        }\n\t        if (arguments.length == 1) {\n\t            if (R.is(key, \"object\")) {\n\t                for (var i in key) if (key[has](i)) {\n\t                    this.data(i, key[i]);\n\t                }\n\t                return this;\n\t            }\n\t            eve(\"raphael.data.get.\" + this.id, this, data[key], key);\n\t            return data[key];\n\t        }\n\t        data[key] = value;\n\t        eve(\"raphael.data.set.\" + this.id, this, value, key);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.removeData\n\t     [ method ]\n\t     **\n\t     * Removes value associated with an element by given key.\n\t     * If key is not provided, removes all the data of the element.\n\t     > Parameters\n\t     - key (string) #optional key\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.removeData = function (key) {\n\t        if (key == null) {\n\t            eldata[this.id] = {};\n\t        } else {\n\t            eldata[this.id] && delete eldata[this.id][key];\n\t        }\n\t        return this;\n\t    };\n\t     /*\\\n\t     * Element.getData\n\t     [ method ]\n\t     **\n\t     * Retrieves the element data\n\t     = (object) data\n\t    \\*/\n\t    elproto.getData = function () {\n\t        return clone(eldata[this.id] || {});\n\t    };\n\t    /*\\\n\t     * Element.hover\n\t     [ method ]\n\t     **\n\t     * Adds event handlers for hover for the element.\n\t     > Parameters\n\t     - f_in (function) handler for hover in\n\t     - f_out (function) handler for hover out\n\t     - icontext (object) #optional context for hover in handler\n\t     - ocontext (object) #optional context for hover out handler\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.hover = function (f_in, f_out, scope_in, scope_out) {\n\t        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);\n\t    };\n\t    /*\\\n\t     * Element.unhover\n\t     [ method ]\n\t     **\n\t     * Removes event handlers for hover for the element.\n\t     > Parameters\n\t     - f_in (function) handler for hover in\n\t     - f_out (function) handler for hover out\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.unhover = function (f_in, f_out) {\n\t        return this.unmouseover(f_in).unmouseout(f_out);\n\t    };\n\t    var draggable = [];\n\t    /*\\\n\t     * Element.drag\n\t     [ method ]\n\t     **\n\t     * Adds event handlers for drag of the element.\n\t     > Parameters\n\t     - onmove (function) handler for moving\n\t     - onstart (function) handler for drag start\n\t     - onend (function) handler for drag end\n\t     - mcontext (object) #optional context for moving handler\n\t     - scontext (object) #optional context for drag start handler\n\t     - econtext (object) #optional context for drag end handler\n\t     * Additionally following `drag` events will be triggered: `drag.start.<id>` on start,\n\t     * `drag.end.<id>` on end and `drag.move.<id>` on every move. When element will be dragged over another element\n\t     * `drag.over.<id>` will be fired as well.\n\t     *\n\t     * Start event and start handler will be called in specified context or in context of the element with following parameters:\n\t     o x (number) x position of the mouse\n\t     o y (number) y position of the mouse\n\t     o event (object) DOM event object\n\t     * Move event and move handler will be called in specified context or in context of the element with following parameters:\n\t     o dx (number) shift by x from the start point\n\t     o dy (number) shift by y from the start point\n\t     o x (number) x position of the mouse\n\t     o y (number) y position of the mouse\n\t     o event (object) DOM event object\n\t     * End event and end handler will be called in specified context or in context of the element with following parameters:\n\t     o event (object) DOM event object\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {\n\t        function start(e) {\n\t            (e.originalEvent || e).preventDefault();\n\t            var x = e.clientX,\n\t                y = e.clientY,\n\t                scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t                scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;\n\t            this._drag.id = e.identifier;\n\t            if (supportsTouch && e.touches) {\n\t                var i = e.touches.length, touch;\n\t                while (i--) {\n\t                    touch = e.touches[i];\n\t                    this._drag.id = touch.identifier;\n\t                    if (touch.identifier == this._drag.id) {\n\t                        x = touch.clientX;\n\t                        y = touch.clientY;\n\t                        break;\n\t                    }\n\t                }\n\t            }\n\t            this._drag.x = x + scrollX;\n\t            this._drag.y = y + scrollY;\n\t            !drag.length && R.mousemove(dragMove).mouseup(dragUp);\n\t            drag.push({el: this, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});\n\t            onstart && eve.on(\"raphael.drag.start.\" + this.id, onstart);\n\t            onmove && eve.on(\"raphael.drag.move.\" + this.id, onmove);\n\t            onend && eve.on(\"raphael.drag.end.\" + this.id, onend);\n\t            eve(\"raphael.drag.start.\" + this.id, start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);\n\t        }\n\t        this._drag = {};\n\t        draggable.push({el: this, start: start});\n\t        this.mousedown(start);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.onDragOver\n\t     [ method ]\n\t     **\n\t     * Shortcut for assigning event handler for `drag.over.<id>` event, where id is id of the element (see @Element.id).\n\t     > Parameters\n\t     - f (function) handler for event, first argument would be the element you are dragging over\n\t    \\*/\n\t    elproto.onDragOver = function (f) {\n\t        f ? eve.on(\"raphael.drag.over.\" + this.id, f) : eve.unbind(\"raphael.drag.over.\" + this.id);\n\t    };\n\t    /*\\\n\t     * Element.undrag\n\t     [ method ]\n\t     **\n\t     * Removes all drag event handlers from given element.\n\t    \\*/\n\t    elproto.undrag = function () {\n\t        var i = draggable.length;\n\t        while (i--) if (draggable[i].el == this) {\n\t            this.unmousedown(draggable[i].start);\n\t            draggable.splice(i, 1);\n\t            eve.unbind(\"raphael.drag.*.\" + this.id);\n\t        }\n\t        !draggable.length && R.unmousemove(dragMove).unmouseup(dragUp);\n\t        drag = [];\n\t    };\n\t    /*\\\n\t     * Paper.circle\n\t     [ method ]\n\t     **\n\t     * Draws a circle.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the centre\n\t     - y (number) y coordinate of the centre\n\t     - r (number) radius\n\t     = (object) RaphaÃ«l element object with type â€œcircleâ€\n\t     **\n\t     > Usage\n\t     | var c = paper.circle(50, 50, 40);\n\t    \\*/\n\t    paperproto.circle = function (x, y, r) {\n\t        var out = R._engine.circle(this, x || 0, y || 0, r || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.rect\n\t     [ method ]\n\t     *\n\t     * Draws a rectangle.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the top left corner\n\t     - y (number) y coordinate of the top left corner\n\t     - width (number) width\n\t     - height (number) height\n\t     - r (number) #optional radius for rounded corners, default is 0\n\t     = (object) RaphaÃ«l element object with type â€œrectâ€\n\t     **\n\t     > Usage\n\t     | // regular rectangle\n\t     | var c = paper.rect(10, 10, 50, 50);\n\t     | // rectangle with rounded corners\n\t     | var c = paper.rect(40, 40, 50, 50, 10);\n\t    \\*/\n\t    paperproto.rect = function (x, y, w, h, r) {\n\t        var out = R._engine.rect(this, x || 0, y || 0, w || 0, h || 0, r || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.ellipse\n\t     [ method ]\n\t     **\n\t     * Draws an ellipse.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the centre\n\t     - y (number) y coordinate of the centre\n\t     - rx (number) horizontal radius\n\t     - ry (number) vertical radius\n\t     = (object) RaphaÃ«l element object with type â€œellipseâ€\n\t     **\n\t     > Usage\n\t     | var c = paper.ellipse(50, 50, 40, 20);\n\t    \\*/\n\t    paperproto.ellipse = function (x, y, rx, ry) {\n\t        var out = R._engine.ellipse(this, x || 0, y || 0, rx || 0, ry || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.path\n\t     [ method ]\n\t     **\n\t     * Creates a path element by given path data string.\n\t     > Parameters\n\t     - pathString (string) #optional path string in SVG format.\n\t     * Path string consists of one-letter commands, followed by comma seprarated arguments in numercal form. Example:\n\t     | \"M10,20L30,40\"\n\t     * Here we can see two commands: â€œMâ€, with arguments `(10, 20)` and â€œLâ€ with arguments `(30, 40)`. Upper case letter mean command is absolute, lower caseâ€”relative.\n\t     *\n\t     # <p>Here is short list of commands available, for more details see <a href=\"http://www.w3.org/TR/SVG/paths.html#PathData\" title=\"Details of a path's data attribute's format are described in the SVG specification.\">SVG path string format</a>.</p>\n\t     # <table><thead><tr><th>Command</th><th>Name</th><th>Parameters</th></tr></thead><tbody>\n\t     # <tr><td>M</td><td>moveto</td><td>(x y)+</td></tr>\n\t     # <tr><td>Z</td><td>closepath</td><td>(none)</td></tr>\n\t     # <tr><td>L</td><td>lineto</td><td>(x y)+</td></tr>\n\t     # <tr><td>H</td><td>horizontal lineto</td><td>x+</td></tr>\n\t     # <tr><td>V</td><td>vertical lineto</td><td>y+</td></tr>\n\t     # <tr><td>C</td><td>curveto</td><td>(x1 y1 x2 y2 x y)+</td></tr>\n\t     # <tr><td>S</td><td>smooth curveto</td><td>(x2 y2 x y)+</td></tr>\n\t     # <tr><td>Q</td><td>quadratic BÃ©zier curveto</td><td>(x1 y1 x y)+</td></tr>\n\t     # <tr><td>T</td><td>smooth quadratic BÃ©zier curveto</td><td>(x y)+</td></tr>\n\t     # <tr><td>A</td><td>elliptical arc</td><td>(rx ry x-axis-rotation large-arc-flag sweep-flag x y)+</td></tr>\n\t     # <tr><td>R</td><td><a href=\"http://en.wikipedia.org/wiki/Catmullâ€“Rom_spline#Catmull.E2.80.93Rom_spline\">Catmull-Rom curveto</a>*</td><td>x1 y1 (x y)+</td></tr></tbody></table>\n\t     * * â€œCatmull-Rom curvetoâ€ is a not standard SVG command and added in 2.0 to make life easier.\n\t     * Note: there is a special case when path consist of just three commands: â€œM10,10Râ€¦zâ€. In this case path will smoothly connects to its beginning.\n\t     > Usage\n\t     | var c = paper.path(\"M10 10L90 90\");\n\t     | // draw a diagonal line:\n\t     | // move to 10,10, line to 90,90\n\t     * For example of path strings, check out these icons: http://raphaeljs.com/icons/\n\t    \\*/\n\t    paperproto.path = function (pathString) {\n\t        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);\n\t        var out = R._engine.path(R.format[apply](R, arguments), this);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.image\n\t     [ method ]\n\t     **\n\t     * Embeds an image into the surface.\n\t     **\n\t     > Parameters\n\t     **\n\t     - src (string) URI of the source image\n\t     - x (number) x coordinate position\n\t     - y (number) y coordinate position\n\t     - width (number) width of the image\n\t     - height (number) height of the image\n\t     = (object) RaphaÃ«l element object with type â€œimageâ€\n\t     **\n\t     > Usage\n\t     | var c = paper.image(\"apple.png\", 10, 10, 80, 80);\n\t    \\*/\n\t    paperproto.image = function (src, x, y, w, h) {\n\t        var out = R._engine.image(this, src || \"about:blank\", x || 0, y || 0, w || 0, h || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.text\n\t     [ method ]\n\t     **\n\t     * Draws a text string. If you need line breaks, put â€œ\\nâ€ in the string.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate position\n\t     - y (number) y coordinate position\n\t     - text (string) The text string to draw\n\t     = (object) RaphaÃ«l element object with type â€œtextâ€\n\t     **\n\t     > Usage\n\t     | var t = paper.text(50, 50, \"RaphaÃ«l\\nkicks\\nbutt!\");\n\t    \\*/\n\t    paperproto.text = function (x, y, text) {\n\t        var out = R._engine.text(this, x || 0, y || 0, Str(text));\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.set\n\t     [ method ]\n\t     **\n\t     * Creates array-like object to keep and operate several elements at once.\n\t     * Warning: it doesnâ€™t create any elements for itself in the page, it just groups existing elements.\n\t     * Sets act as pseudo elements â€” all methods available to an element can be used on a set.\n\t     = (object) array-like object that represents set of elements\n\t     **\n\t     > Usage\n\t     | var st = paper.set();\n\t     | st.push(\n\t     |     paper.circle(10, 10, 5),\n\t     |     paper.circle(30, 10, 5)\n\t     | );\n\t     | st.attr({fill: \"red\"}); // changes the fill of both circles\n\t    \\*/\n\t    paperproto.set = function (itemsArray) {\n\t        !R.is(itemsArray, \"array\") && (itemsArray = Array.prototype.splice.call(arguments, 0, arguments.length));\n\t        var out = new Set(itemsArray);\n\t        this.__set__ && this.__set__.push(out);\n\t        out[\"paper\"] = this;\n\t        out[\"type\"] = \"set\";\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.setStart\n\t     [ method ]\n\t     **\n\t     * Creates @Paper.set. All elements that will be created after calling this method and before calling\n\t     * @Paper.setFinish will be added to the set.\n\t     **\n\t     > Usage\n\t     | paper.setStart();\n\t     | paper.circle(10, 10, 5),\n\t     | paper.circle(30, 10, 5)\n\t     | var st = paper.setFinish();\n\t     | st.attr({fill: \"red\"}); // changes the fill of both circles\n\t    \\*/\n\t    paperproto.setStart = function (set) {\n\t        this.__set__ = set || this.set();\n\t    };\n\t    /*\\\n\t     * Paper.setFinish\n\t     [ method ]\n\t     **\n\t     * See @Paper.setStart. This method finishes catching and returns resulting set.\n\t     **\n\t     = (object) set\n\t    \\*/\n\t    paperproto.setFinish = function (set) {\n\t        var out = this.__set__;\n\t        delete this.__set__;\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.getSize\n\t     [ method ]\n\t     **\n\t     * Obtains current paper actual size.\n\t     **\n\t     = (object)\n\t     \\*/\n\t    paperproto.getSize = function () {\n\t        var container = this.canvas.parentNode;\n\t        return {\n\t            width: container.offsetWidth,\n\t            height: container.offsetHeight\n\t                };\n\t        };\n\t    /*\\\n\t     * Paper.setSize\n\t     [ method ]\n\t     **\n\t     * If you need to change dimensions of the canvas call this method\n\t     **\n\t     > Parameters\n\t     **\n\t     - width (number) new width of the canvas\n\t     - height (number) new height of the canvas\n\t    \\*/\n\t    paperproto.setSize = function (width, height) {\n\t        return R._engine.setSize.call(this, width, height);\n\t    };\n\t    /*\\\n\t     * Paper.setViewBox\n\t     [ method ]\n\t     **\n\t     * Sets the view box of the paper. Practically it gives you ability to zoom and pan whole paper surface by\n\t     * specifying new boundaries.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) new x position, default is `0`\n\t     - y (number) new y position, default is `0`\n\t     - w (number) new width of the canvas\n\t     - h (number) new height of the canvas\n\t     - fit (boolean) `true` if you want graphics to fit into new boundary box\n\t    \\*/\n\t    paperproto.setViewBox = function (x, y, w, h, fit) {\n\t        return R._engine.setViewBox.call(this, x, y, w, h, fit);\n\t    };\n\t    /*\\\n\t     * Paper.top\n\t     [ property ]\n\t     **\n\t     * Points to the topmost element on the paper\n\t    \\*/\n\t    /*\\\n\t     * Paper.bottom\n\t     [ property ]\n\t     **\n\t     * Points to the bottom element on the paper\n\t    \\*/\n\t    paperproto.top = paperproto.bottom = null;\n\t    /*\\\n\t     * Paper.raphael\n\t     [ property ]\n\t     **\n\t     * Points to the @Raphael object/function\n\t    \\*/\n\t    paperproto.raphael = R;\n\t    var getOffset = function (elem) {\n\t        var box = elem.getBoundingClientRect(),\n\t            doc = elem.ownerDocument,\n\t            body = doc.body,\n\t            docElem = doc.documentElement,\n\t            clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,\n\t            top  = box.top  + (g.win.pageYOffset || docElem.scrollTop || body.scrollTop ) - clientTop,\n\t            left = box.left + (g.win.pageXOffset || docElem.scrollLeft || body.scrollLeft) - clientLeft;\n\t        return {\n\t            y: top,\n\t            x: left\n\t        };\n\t    };\n\t    /*\\\n\t     * Paper.getElementByPoint\n\t     [ method ]\n\t     **\n\t     * Returns you topmost element under given point.\n\t     **\n\t     = (object) RaphaÃ«l element object\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate from the top left corner of the window\n\t     - y (number) y coordinate from the top left corner of the window\n\t     > Usage\n\t     | paper.getElementByPoint(mouseX, mouseY).attr({stroke: \"#f00\"});\n\t    \\*/\n\t    paperproto.getElementByPoint = function (x, y) {\n\t        var paper = this,\n\t            svg = paper.canvas,\n\t            target = g.doc.elementFromPoint(x, y);\n\t        if (g.win.opera && target.tagName == \"svg\") {\n\t            var so = getOffset(svg),\n\t                sr = svg.createSVGRect();\n\t            sr.x = x - so.x;\n\t            sr.y = y - so.y;\n\t            sr.width = sr.height = 1;\n\t            var hits = svg.getIntersectionList(sr, null);\n\t            if (hits.length) {\n\t                target = hits[hits.length - 1];\n\t            }\n\t        }\n\t        if (!target) {\n\t            return null;\n\t        }\n\t        while (target.parentNode && target != svg.parentNode && !target.raphael) {\n\t            target = target.parentNode;\n\t        }\n\t        target == paper.canvas.parentNode && (target = svg);\n\t        target = target && target.raphael ? paper.getById(target.raphaelid) : null;\n\t        return target;\n\t    };\n\n\t    /*\\\n\t     * Paper.getElementsByBBox\n\t     [ method ]\n\t     **\n\t     * Returns set of elements that have an intersecting bounding box\n\t     **\n\t     > Parameters\n\t     **\n\t     - bbox (object) bbox to check with\n\t     = (object) @Set\n\t     \\*/\n\t    paperproto.getElementsByBBox = function (bbox) {\n\t        var set = this.set();\n\t        this.forEach(function (el) {\n\t            if (R.isBBoxIntersect(el.getBBox(), bbox)) {\n\t                set.push(el);\n\t            }\n\t        });\n\t        return set;\n\t    };\n\n\t    /*\\\n\t     * Paper.getById\n\t     [ method ]\n\t     **\n\t     * Returns you element by its internal ID.\n\t     **\n\t     > Parameters\n\t     **\n\t     - id (number) id\n\t     = (object) RaphaÃ«l element object\n\t    \\*/\n\t    paperproto.getById = function (id) {\n\t        var bot = this.bottom;\n\t        while (bot) {\n\t            if (bot.id == id) {\n\t                return bot;\n\t            }\n\t            bot = bot.next;\n\t        }\n\t        return null;\n\t    };\n\t    /*\\\n\t     * Paper.forEach\n\t     [ method ]\n\t     **\n\t     * Executes given function for each element on the paper\n\t     *\n\t     * If callback function returns `false` it will stop loop running.\n\t     **\n\t     > Parameters\n\t     **\n\t     - callback (function) function to run\n\t     - thisArg (object) context object for the callback\n\t     = (object) Paper object\n\t     > Usage\n\t     | paper.forEach(function (el) {\n\t     |     el.attr({ stroke: \"blue\" });\n\t     | });\n\t    \\*/\n\t    paperproto.forEach = function (callback, thisArg) {\n\t        var bot = this.bottom;\n\t        while (bot) {\n\t            if (callback.call(thisArg, bot) === false) {\n\t                return this;\n\t            }\n\t            bot = bot.next;\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Paper.getElementsByPoint\n\t     [ method ]\n\t     **\n\t     * Returns set of elements that have common point inside\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the point\n\t     - y (number) y coordinate of the point\n\t     = (object) @Set\n\t    \\*/\n\t    paperproto.getElementsByPoint = function (x, y) {\n\t        var set = this.set();\n\t        this.forEach(function (el) {\n\t            if (el.isPointInside(x, y)) {\n\t                set.push(el);\n\t            }\n\t        });\n\t        return set;\n\t    };\n\t    function x_y() {\n\t        return this.x + S + this.y;\n\t    }\n\t    function x_y_w_h() {\n\t        return this.x + S + this.y + S + this.width + \" \\xd7 \" + this.height;\n\t    }\n\t    /*\\\n\t     * Element.isPointInside\n\t     [ method ]\n\t     **\n\t     * Determine if given point is inside this elementâ€™s shape\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the point\n\t     - y (number) y coordinate of the point\n\t     = (boolean) `true` if point inside the shape\n\t    \\*/\n\t    elproto.isPointInside = function (x, y) {\n\t        var rp = this.realPath = getPath[this.type](this);\n\t        if (this.attr('transform') && this.attr('transform').length) {\n\t            rp = R.transformPath(rp, this.attr('transform'));\n\t        }\n\t        return R.isPointInsidePath(rp, x, y);\n\t    };\n\t    /*\\\n\t     * Element.getBBox\n\t     [ method ]\n\t     **\n\t     * Return bounding box for a given element\n\t     **\n\t     > Parameters\n\t     **\n\t     - isWithoutTransform (boolean) flag, `true` if you want to have bounding box before transformations. Default is `false`.\n\t     = (object) Bounding box object:\n\t     o {\n\t     o     x: (number) top left corner x\n\t     o     y: (number) top left corner y\n\t     o     x2: (number) bottom right corner x\n\t     o     y2: (number) bottom right corner y\n\t     o     width: (number) width\n\t     o     height: (number) height\n\t     o }\n\t    \\*/\n\t    elproto.getBBox = function (isWithoutTransform) {\n\t        if (this.removed) {\n\t            return {};\n\t        }\n\t        var _ = this._;\n\t        if (isWithoutTransform) {\n\t            if (_.dirty || !_.bboxwt) {\n\t                this.realPath = getPath[this.type](this);\n\t                _.bboxwt = pathDimensions(this.realPath);\n\t                _.bboxwt.toString = x_y_w_h;\n\t                _.dirty = 0;\n\t            }\n\t            return _.bboxwt;\n\t        }\n\t        if (_.dirty || _.dirtyT || !_.bbox) {\n\t            if (_.dirty || !this.realPath) {\n\t                _.bboxwt = 0;\n\t                this.realPath = getPath[this.type](this);\n\t            }\n\t            _.bbox = pathDimensions(mapPath(this.realPath, this.matrix));\n\t            _.bbox.toString = x_y_w_h;\n\t            _.dirty = _.dirtyT = 0;\n\t        }\n\t        return _.bbox;\n\t    };\n\t    /*\\\n\t     * Element.clone\n\t     [ method ]\n\t     **\n\t     = (object) clone of a given element\n\t     **\n\t    \\*/\n\t    elproto.clone = function () {\n\t        if (this.removed) {\n\t            return null;\n\t        }\n\t        var out = this.paper[this.type]().attr(this.attr());\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Element.glow\n\t     [ method ]\n\t     **\n\t     * Return set of elements that create glow-like effect around given element. See @Paper.set.\n\t     *\n\t     * Note: Glow is not connected to the element. If you change element attributes it wonâ€™t adjust itself.\n\t     **\n\t     > Parameters\n\t     **\n\t     - glow (object) #optional parameters object with all properties optional:\n\t     o {\n\t     o     width (number) size of the glow, default is `10`\n\t     o     fill (boolean) will it be filled, default is `false`\n\t     o     opacity (number) opacity, default is `0.5`\n\t     o     offsetx (number) horizontal offset, default is `0`\n\t     o     offsety (number) vertical offset, default is `0`\n\t     o     color (string) glow colour, default is `black`\n\t     o }\n\t     = (object) @Paper.set of elements that represents glow\n\t    \\*/\n\t    elproto.glow = function (glow) {\n\t        if (this.type == \"text\") {\n\t            return null;\n\t        }\n\t        glow = glow || {};\n\t        var s = {\n\t            width: (glow.width || 10) + (+this.attr(\"stroke-width\") || 1),\n\t            fill: glow.fill || false,\n\t            opacity: glow.opacity == null ? .5 : glow.opacity,\n\t            offsetx: glow.offsetx || 0,\n\t            offsety: glow.offsety || 0,\n\t            color: glow.color || \"#000\"\n\t        },\n\t            c = s.width / 2,\n\t            r = this.paper,\n\t            out = r.set(),\n\t            path = this.realPath || getPath[this.type](this);\n\t        path = this.matrix ? mapPath(path, this.matrix) : path;\n\t        for (var i = 1; i < c + 1; i++) {\n\t            out.push(r.path(path).attr({\n\t                stroke: s.color,\n\t                fill: s.fill ? s.color : \"none\",\n\t                \"stroke-linejoin\": \"round\",\n\t                \"stroke-linecap\": \"round\",\n\t                \"stroke-width\": +(s.width / c * i).toFixed(3),\n\t                opacity: +(s.opacity / c).toFixed(3)\n\t            }));\n\t        }\n\t        return out.insertBefore(this).translate(s.offsetx, s.offsety);\n\t    };\n\t    var curveslengths = {},\n\t    getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {\n\t        if (length == null) {\n\t            return bezlen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);\n\t        } else {\n\t            return R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, getTatLen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length));\n\t        }\n\t    },\n\t    getLengthFactory = function (istotal, subpath) {\n\t        return function (path, length, onlystart) {\n\t            path = path2curve(path);\n\t            var x, y, p, l, sp = \"\", subpaths = {}, point,\n\t                len = 0;\n\t            for (var i = 0, ii = path.length; i < ii; i++) {\n\t                p = path[i];\n\t                if (p[0] == \"M\") {\n\t                    x = +p[1];\n\t                    y = +p[2];\n\t                } else {\n\t                    l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n\t                    if (len + l > length) {\n\t                        if (subpath && !subpaths.start) {\n\t                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n\t                            sp += [\"C\" + point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];\n\t                            if (onlystart) {return sp;}\n\t                            subpaths.start = sp;\n\t                            sp = [\"M\" + point.x, point.y + \"C\" + point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]].join();\n\t                            len += l;\n\t                            x = +p[5];\n\t                            y = +p[6];\n\t                            continue;\n\t                        }\n\t                        if (!istotal && !subpath) {\n\t                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n\t                            return {x: point.x, y: point.y, alpha: point.alpha};\n\t                        }\n\t                    }\n\t                    len += l;\n\t                    x = +p[5];\n\t                    y = +p[6];\n\t                }\n\t                sp += p.shift() + p;\n\t            }\n\t            subpaths.end = sp;\n\t            point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1);\n\t            point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});\n\t            return point;\n\t        };\n\t    };\n\t    var getTotalLength = getLengthFactory(1),\n\t        getPointAtLength = getLengthFactory(),\n\t        getSubpathsAtLength = getLengthFactory(0, 1);\n\t    /*\\\n\t     * Raphael.getTotalLength\n\t     [ method ]\n\t     **\n\t     * Returns length of the given path in pixels.\n\t     **\n\t     > Parameters\n\t     **\n\t     - path (string) SVG path string.\n\t     **\n\t     = (number) length.\n\t    \\*/\n\t    R.getTotalLength = getTotalLength;\n\t    /*\\\n\t     * Raphael.getPointAtLength\n\t     [ method ]\n\t     **\n\t     * Return coordinates of the point located at the given length on the given path.\n\t     **\n\t     > Parameters\n\t     **\n\t     - path (string) SVG path string\n\t     - length (number)\n\t     **\n\t     = (object) representation of the point:\n\t     o {\n\t     o     x: (number) x coordinate\n\t     o     y: (number) y coordinate\n\t     o     alpha: (number) angle of derivative\n\t     o }\n\t    \\*/\n\t    R.getPointAtLength = getPointAtLength;\n\t    /*\\\n\t     * Raphael.getSubpath\n\t     [ method ]\n\t     **\n\t     * Return subpath of a given path from given length to given length.\n\t     **\n\t     > Parameters\n\t     **\n\t     - path (string) SVG path string\n\t     - from (number) position of the start of the segment\n\t     - to (number) position of the end of the segment\n\t     **\n\t     = (string) pathstring for the segment\n\t    \\*/\n\t    R.getSubpath = function (path, from, to) {\n\t        if (this.getTotalLength(path) - to < 1e-6) {\n\t            return getSubpathsAtLength(path, from).end;\n\t        }\n\t        var a = getSubpathsAtLength(path, to, 1);\n\t        return from ? getSubpathsAtLength(a, from).end : a;\n\t    };\n\t    /*\\\n\t     * Element.getTotalLength\n\t     [ method ]\n\t     **\n\t     * Returns length of the path in pixels. Only works for element of â€œpathâ€ type.\n\t     = (number) length.\n\t    \\*/\n\t    elproto.getTotalLength = function () {\n\t        var path = this.getPath();\n\t        if (!path) {\n\t            return;\n\t        }\n\n\t        if (this.node.getTotalLength) {\n\t            return this.node.getTotalLength();\n\t        }\n\n\t        return getTotalLength(path);\n\t    };\n\t    /*\\\n\t     * Element.getPointAtLength\n\t     [ method ]\n\t     **\n\t     * Return coordinates of the point located at the given length on the given path. Only works for element of â€œpathâ€ type.\n\t     **\n\t     > Parameters\n\t     **\n\t     - length (number)\n\t     **\n\t     = (object) representation of the point:\n\t     o {\n\t     o     x: (number) x coordinate\n\t     o     y: (number) y coordinate\n\t     o     alpha: (number) angle of derivative\n\t     o }\n\t    \\*/\n\t    elproto.getPointAtLength = function (length) {\n\t        var path = this.getPath();\n\t        if (!path) {\n\t            return;\n\t        }\n\n\t        return getPointAtLength(path, length);\n\t    };\n\t    /*\\\n\t     * Element.getPath\n\t     [ method ]\n\t     **\n\t     * Returns path of the element. Only works for elements of â€œpathâ€ type and simple elements like circle.\n\t     = (object) path\n\t     **\n\t    \\*/\n\t    elproto.getPath = function () {\n\t        var path,\n\t            getPath = R._getPath[this.type];\n\n\t        if (this.type == \"text\" || this.type == \"set\") {\n\t            return;\n\t        }\n\n\t        if (getPath) {\n\t            path = getPath(this);\n\t        }\n\n\t        return path;\n\t    };\n\t    /*\\\n\t     * Element.getSubpath\n\t     [ method ]\n\t     **\n\t     * Return subpath of a given element from given length to given length. Only works for element of â€œpathâ€ type.\n\t     **\n\t     > Parameters\n\t     **\n\t     - from (number) position of the start of the segment\n\t     - to (number) position of the end of the segment\n\t     **\n\t     = (string) pathstring for the segment\n\t    \\*/\n\t    elproto.getSubpath = function (from, to) {\n\t        var path = this.getPath();\n\t        if (!path) {\n\t            return;\n\t        }\n\n\t        return R.getSubpath(path, from, to);\n\t    };\n\t    /*\\\n\t     * Raphael.easing_formulas\n\t     [ property ]\n\t     **\n\t     * Object that contains easing formulas for animation. You could extend it with your own. By default it has following list of easing:\n\t     # <ul>\n\t     #     <li>â€œlinearâ€</li>\n\t     #     <li>â€œ&lt;â€ or â€œeaseInâ€ or â€œease-inâ€</li>\n\t     #     <li>â€œ>â€ or â€œeaseOutâ€ or â€œease-outâ€</li>\n\t     #     <li>â€œ&lt;>â€ or â€œeaseInOutâ€ or â€œease-in-outâ€</li>\n\t     #     <li>â€œbackInâ€ or â€œback-inâ€</li>\n\t     #     <li>â€œbackOutâ€ or â€œback-outâ€</li>\n\t     #     <li>â€œelasticâ€</li>\n\t     #     <li>â€œbounceâ€</li>\n\t     # </ul>\n\t     # <p>See also <a href=\"http://raphaeljs.com/easing.html\">Easing demo</a>.</p>\n\t    \\*/\n\t    var ef = R.easing_formulas = {\n\t        linear: function (n) {\n\t            return n;\n\t        },\n\t        \"<\": function (n) {\n\t            return pow(n, 1.7);\n\t        },\n\t        \">\": function (n) {\n\t            return pow(n, .48);\n\t        },\n\t        \"<>\": function (n) {\n\t            var q = .48 - n / 1.04,\n\t                Q = math.sqrt(.1734 + q * q),\n\t                x = Q - q,\n\t                X = pow(abs(x), 1 / 3) * (x < 0 ? -1 : 1),\n\t                y = -Q - q,\n\t                Y = pow(abs(y), 1 / 3) * (y < 0 ? -1 : 1),\n\t                t = X + Y + .5;\n\t            return (1 - t) * 3 * t * t + t * t * t;\n\t        },\n\t        backIn: function (n) {\n\t            var s = 1.70158;\n\t            return n * n * ((s + 1) * n - s);\n\t        },\n\t        backOut: function (n) {\n\t            n = n - 1;\n\t            var s = 1.70158;\n\t            return n * n * ((s + 1) * n + s) + 1;\n\t        },\n\t        elastic: function (n) {\n\t            if (n == !!n) {\n\t                return n;\n\t            }\n\t            return pow(2, -10 * n) * math.sin((n - .075) * (2 * PI) / .3) + 1;\n\t        },\n\t        bounce: function (n) {\n\t            var s = 7.5625,\n\t                p = 2.75,\n\t                l;\n\t            if (n < (1 / p)) {\n\t                l = s * n * n;\n\t            } else {\n\t                if (n < (2 / p)) {\n\t                    n -= (1.5 / p);\n\t                    l = s * n * n + .75;\n\t                } else {\n\t                    if (n < (2.5 / p)) {\n\t                        n -= (2.25 / p);\n\t                        l = s * n * n + .9375;\n\t                    } else {\n\t                        n -= (2.625 / p);\n\t                        l = s * n * n + .984375;\n\t                    }\n\t                }\n\t            }\n\t            return l;\n\t        }\n\t    };\n\t    ef.easeIn = ef[\"ease-in\"] = ef[\"<\"];\n\t    ef.easeOut = ef[\"ease-out\"] = ef[\">\"];\n\t    ef.easeInOut = ef[\"ease-in-out\"] = ef[\"<>\"];\n\t    ef[\"back-in\"] = ef.backIn;\n\t    ef[\"back-out\"] = ef.backOut;\n\n\t    var animationElements = [],\n\t        requestAnimFrame = window.requestAnimationFrame       ||\n\t                           window.webkitRequestAnimationFrame ||\n\t                           window.mozRequestAnimationFrame    ||\n\t                           window.oRequestAnimationFrame      ||\n\t                           window.msRequestAnimationFrame     ||\n\t                           function (callback) {\n\t                               setTimeout(callback, 16);\n\t                           },\n\t        animation = function () {\n\t            var Now = +new Date,\n\t                l = 0;\n\t            for (; l < animationElements.length; l++) {\n\t                var e = animationElements[l];\n\t                if (e.el.removed || e.paused) {\n\t                    continue;\n\t                }\n\t                var time = Now - e.start,\n\t                    ms = e.ms,\n\t                    easing = e.easing,\n\t                    from = e.from,\n\t                    diff = e.diff,\n\t                    to = e.to,\n\t                    t = e.t,\n\t                    that = e.el,\n\t                    set = {},\n\t                    now,\n\t                    init = {},\n\t                    key;\n\t                if (e.initstatus) {\n\t                    time = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * ms;\n\t                    e.status = e.initstatus;\n\t                    delete e.initstatus;\n\t                    e.stop && animationElements.splice(l--, 1);\n\t                } else {\n\t                    e.status = (e.prev + (e.percent - e.prev) * (time / ms)) / e.anim.top;\n\t                }\n\t                if (time < 0) {\n\t                    continue;\n\t                }\n\t                if (time < ms) {\n\t                    var pos = easing(time / ms);\n\t                    for (var attr in from) if (from[has](attr)) {\n\t                        switch (availableAnimAttrs[attr]) {\n\t                            case nu:\n\t                                now = +from[attr] + pos * ms * diff[attr];\n\t                                break;\n\t                            case \"colour\":\n\t                                now = \"rgb(\" + [\n\t                                    upto255(round(from[attr].r + pos * ms * diff[attr].r)),\n\t                                    upto255(round(from[attr].g + pos * ms * diff[attr].g)),\n\t                                    upto255(round(from[attr].b + pos * ms * diff[attr].b))\n\t                                ].join(\",\") + \")\";\n\t                                break;\n\t                            case \"path\":\n\t                                now = [];\n\t                                for (var i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                    now[i] = [from[attr][i][0]];\n\t                                    for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];\n\t                                    }\n\t                                    now[i] = now[i].join(S);\n\t                                }\n\t                                now = now.join(S);\n\t                                break;\n\t                            case \"transform\":\n\t                                if (diff[attr].real) {\n\t                                    now = [];\n\t                                    for (i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                        now[i] = [from[attr][i][0]];\n\t                                        for (j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                            now[i][j] = from[attr][i][j] + pos * ms * diff[attr][i][j];\n\t                                        }\n\t                                    }\n\t                                } else {\n\t                                    var get = function (i) {\n\t                                        return +from[attr][i] + pos * ms * diff[attr][i];\n\t                                    };\n\t                                    // now = [[\"r\", get(2), 0, 0], [\"t\", get(3), get(4)], [\"s\", get(0), get(1), 0, 0]];\n\t                                    now = [[\"m\", get(0), get(1), get(2), get(3), get(4), get(5)]];\n\t                                }\n\t                                break;\n\t                            case \"csv\":\n\t                                if (attr == \"clip-rect\") {\n\t                                    now = [];\n\t                                    i = 4;\n\t                                    while (i--) {\n\t                                        now[i] = +from[attr][i] + pos * ms * diff[attr][i];\n\t                                    }\n\t                                }\n\t                                break;\n\t                            default:\n\t                                var from2 = [][concat](from[attr]);\n\t                                now = [];\n\t                                i = that.paper.customAttributes[attr].length;\n\t                                while (i--) {\n\t                                    now[i] = +from2[i] + pos * ms * diff[attr][i];\n\t                                }\n\t                                break;\n\t                        }\n\t                        set[attr] = now;\n\t                    }\n\t                    that.attr(set);\n\t                    (function (id, that, anim) {\n\t                        setTimeout(function () {\n\t                            eve(\"raphael.anim.frame.\" + id, that, anim);\n\t                        });\n\t                    })(that.id, that, e.anim);\n\t                } else {\n\t                    (function(f, el, a) {\n\t                        setTimeout(function() {\n\t                            eve(\"raphael.anim.frame.\" + el.id, el, a);\n\t                            eve(\"raphael.anim.finish.\" + el.id, el, a);\n\t                            R.is(f, \"function\") && f.call(el);\n\t                        });\n\t                    })(e.callback, that, e.anim);\n\t                    that.attr(to);\n\t                    animationElements.splice(l--, 1);\n\t                    if (e.repeat > 1 && !e.next) {\n\t                        for (key in to) if (to[has](key)) {\n\t                            init[key] = e.totalOrigin[key];\n\t                        }\n\t                        e.el.attr(init);\n\t                        runAnimation(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1);\n\t                    }\n\t                    if (e.next && !e.stop) {\n\t                        runAnimation(e.anim, e.el, e.next, null, e.totalOrigin, e.repeat);\n\t                    }\n\t                }\n\t            }\n\t            animationElements.length && requestAnimFrame(animation);\n\t        },\n\t        upto255 = function (color) {\n\t            return color > 255 ? 255 : color < 0 ? 0 : color;\n\t        };\n\t    /*\\\n\t     * Element.animateWith\n\t     [ method ]\n\t     **\n\t     * Acts similar to @Element.animate, but ensure that given animation runs in sync with another given element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - el (object) element to sync with\n\t     - anim (object) animation to sync with\n\t     - params (object) #optional final attributes for the element, see also @Element.attr\n\t     - ms (number) #optional number of milliseconds for animation to run\n\t     - easing (string) #optional easing type. Accept on of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\n\t     - callback (function) #optional callback function. Will be called at the end of animation.\n\t     * or\n\t     - element (object) element to sync with\n\t     - anim (object) animation to sync with\n\t     - animation (object) #optional animation object, see @Raphael.animation\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.animateWith = function (el, anim, params, ms, easing, callback) {\n\t        var element = this;\n\t        if (element.removed) {\n\t            callback && callback.call(element);\n\t            return element;\n\t        }\n\t        var a = params instanceof Animation ? params : R.animation(params, ms, easing, callback),\n\t            x, y;\n\t        runAnimation(a, element, a.percents[0], null, element.attr());\n\t        for (var i = 0, ii = animationElements.length; i < ii; i++) {\n\t            if (animationElements[i].anim == anim && animationElements[i].el == el) {\n\t                animationElements[ii - 1].start = animationElements[i].start;\n\t                break;\n\t            }\n\t        }\n\t        return element;\n\t        //\n\t        //\n\t        // var a = params ? R.animation(params, ms, easing, callback) : anim,\n\t        //     status = element.status(anim);\n\t        // return this.animate(a).status(a, status * anim.ms / a.ms);\n\t    };\n\t    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {\n\t        var cx = 3 * p1x,\n\t            bx = 3 * (p2x - p1x) - cx,\n\t            ax = 1 - cx - bx,\n\t            cy = 3 * p1y,\n\t            by = 3 * (p2y - p1y) - cy,\n\t            ay = 1 - cy - by;\n\t        function sampleCurveX(t) {\n\t            return ((ax * t + bx) * t + cx) * t;\n\t        }\n\t        function solve(x, epsilon) {\n\t            var t = solveCurveX(x, epsilon);\n\t            return ((ay * t + by) * t + cy) * t;\n\t        }\n\t        function solveCurveX(x, epsilon) {\n\t            var t0, t1, t2, x2, d2, i;\n\t            for(t2 = x, i = 0; i < 8; i++) {\n\t                x2 = sampleCurveX(t2) - x;\n\t                if (abs(x2) < epsilon) {\n\t                    return t2;\n\t                }\n\t                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;\n\t                if (abs(d2) < 1e-6) {\n\t                    break;\n\t                }\n\t                t2 = t2 - x2 / d2;\n\t            }\n\t            t0 = 0;\n\t            t1 = 1;\n\t            t2 = x;\n\t            if (t2 < t0) {\n\t                return t0;\n\t            }\n\t            if (t2 > t1) {\n\t                return t1;\n\t            }\n\t            while (t0 < t1) {\n\t                x2 = sampleCurveX(t2);\n\t                if (abs(x2 - x) < epsilon) {\n\t                    return t2;\n\t                }\n\t                if (x > x2) {\n\t                    t0 = t2;\n\t                } else {\n\t                    t1 = t2;\n\t                }\n\t                t2 = (t1 - t0) / 2 + t0;\n\t            }\n\t            return t2;\n\t        }\n\t        return solve(t, 1 / (200 * duration));\n\t    }\n\t    elproto.onAnimation = function (f) {\n\t        f ? eve.on(\"raphael.anim.frame.\" + this.id, f) : eve.unbind(\"raphael.anim.frame.\" + this.id);\n\t        return this;\n\t    };\n\t    function Animation(anim, ms) {\n\t        var percents = [],\n\t            newAnim = {};\n\t        this.ms = ms;\n\t        this.times = 1;\n\t        if (anim) {\n\t            for (var attr in anim) if (anim[has](attr)) {\n\t                newAnim[toFloat(attr)] = anim[attr];\n\t                percents.push(toFloat(attr));\n\t            }\n\t            percents.sort(sortByNumber);\n\t        }\n\t        this.anim = newAnim;\n\t        this.top = percents[percents.length - 1];\n\t        this.percents = percents;\n\t    }\n\t    /*\\\n\t     * Animation.delay\n\t     [ method ]\n\t     **\n\t     * Creates a copy of existing animation object with given delay.\n\t     **\n\t     > Parameters\n\t     **\n\t     - delay (number) number of ms to pass between animation start and actual animation\n\t     **\n\t     = (object) new altered Animation object\n\t     | var anim = Raphael.animation({cx: 10, cy: 20}, 2e3);\n\t     | circle1.animate(anim); // run the given animation immediately\n\t     | circle2.animate(anim.delay(500)); // run the given animation after 500 ms\n\t    \\*/\n\t    Animation.prototype.delay = function (delay) {\n\t        var a = new Animation(this.anim, this.ms);\n\t        a.times = this.times;\n\t        a.del = +delay || 0;\n\t        return a;\n\t    };\n\t    /*\\\n\t     * Animation.repeat\n\t     [ method ]\n\t     **\n\t     * Creates a copy of existing animation object with given repetition.\n\t     **\n\t     > Parameters\n\t     **\n\t     - repeat (number) number iterations of animation. For infinite animation pass `Infinity`\n\t     **\n\t     = (object) new altered Animation object\n\t    \\*/\n\t    Animation.prototype.repeat = function (times) {\n\t        var a = new Animation(this.anim, this.ms);\n\t        a.del = this.del;\n\t        a.times = math.floor(mmax(times, 0)) || 1;\n\t        return a;\n\t    };\n\t    function runAnimation(anim, element, percent, status, totalOrigin, times) {\n\t        percent = toFloat(percent);\n\t        var params,\n\t            isInAnim,\n\t            isInAnimSet,\n\t            percents = [],\n\t            next,\n\t            prev,\n\t            timestamp,\n\t            ms = anim.ms,\n\t            from = {},\n\t            to = {},\n\t            diff = {};\n\t        if (status) {\n\t            for (i = 0, ii = animationElements.length; i < ii; i++) {\n\t                var e = animationElements[i];\n\t                if (e.el.id == element.id && e.anim == anim) {\n\t                    if (e.percent != percent) {\n\t                        animationElements.splice(i, 1);\n\t                        isInAnimSet = 1;\n\t                    } else {\n\t                        isInAnim = e;\n\t                    }\n\t                    element.attr(e.totalOrigin);\n\t                    break;\n\t                }\n\t            }\n\t        } else {\n\t            status = +to; // NaN\n\t        }\n\t        for (var i = 0, ii = anim.percents.length; i < ii; i++) {\n\t            if (anim.percents[i] == percent || anim.percents[i] > status * anim.top) {\n\t                percent = anim.percents[i];\n\t                prev = anim.percents[i - 1] || 0;\n\t                ms = ms / anim.top * (percent - prev);\n\t                next = anim.percents[i + 1];\n\t                params = anim.anim[percent];\n\t                break;\n\t            } else if (status) {\n\t                element.attr(anim.anim[anim.percents[i]]);\n\t            }\n\t        }\n\t        if (!params) {\n\t            return;\n\t        }\n\t        if (!isInAnim) {\n\t            for (var attr in params) if (params[has](attr)) {\n\t                if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {\n\t                    from[attr] = element.attr(attr);\n\t                    (from[attr] == null) && (from[attr] = availableAttrs[attr]);\n\t                    to[attr] = params[attr];\n\t                    switch (availableAnimAttrs[attr]) {\n\t                        case nu:\n\t                            diff[attr] = (to[attr] - from[attr]) / ms;\n\t                            break;\n\t                        case \"colour\":\n\t                            from[attr] = R.getRGB(from[attr]);\n\t                            var toColour = R.getRGB(to[attr]);\n\t                            diff[attr] = {\n\t                                r: (toColour.r - from[attr].r) / ms,\n\t                                g: (toColour.g - from[attr].g) / ms,\n\t                                b: (toColour.b - from[attr].b) / ms\n\t                            };\n\t                            break;\n\t                        case \"path\":\n\t                            var pathes = path2curve(from[attr], to[attr]),\n\t                                toPath = pathes[1];\n\t                            from[attr] = pathes[0];\n\t                            diff[attr] = [];\n\t                            for (i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                diff[attr][i] = [0];\n\t                                for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                    diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;\n\t                                }\n\t                            }\n\t                            break;\n\t                        case \"transform\":\n\t                            var _ = element._,\n\t                                eq = equaliseTransform(_[attr], to[attr]);\n\t                            if (eq) {\n\t                                from[attr] = eq.from;\n\t                                to[attr] = eq.to;\n\t                                diff[attr] = [];\n\t                                diff[attr].real = true;\n\t                                for (i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                    diff[attr][i] = [from[attr][i][0]];\n\t                                    for (j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                        diff[attr][i][j] = (to[attr][i][j] - from[attr][i][j]) / ms;\n\t                                    }\n\t                                }\n\t                            } else {\n\t                                var m = (element.matrix || new Matrix),\n\t                                    to2 = {\n\t                                        _: {transform: _.transform},\n\t                                        getBBox: function () {\n\t                                            return element.getBBox(1);\n\t                                        }\n\t                                    };\n\t                                from[attr] = [\n\t                                    m.a,\n\t                                    m.b,\n\t                                    m.c,\n\t                                    m.d,\n\t                                    m.e,\n\t                                    m.f\n\t                                ];\n\t                                extractTransform(to2, to[attr]);\n\t                                to[attr] = to2._.transform;\n\t                                diff[attr] = [\n\t                                    (to2.matrix.a - m.a) / ms,\n\t                                    (to2.matrix.b - m.b) / ms,\n\t                                    (to2.matrix.c - m.c) / ms,\n\t                                    (to2.matrix.d - m.d) / ms,\n\t                                    (to2.matrix.e - m.e) / ms,\n\t                                    (to2.matrix.f - m.f) / ms\n\t                                ];\n\t                                // from[attr] = [_.sx, _.sy, _.deg, _.dx, _.dy];\n\t                                // var to2 = {_:{}, getBBox: function () { return element.getBBox(); }};\n\t                                // extractTransform(to2, to[attr]);\n\t                                // diff[attr] = [\n\t                                //     (to2._.sx - _.sx) / ms,\n\t                                //     (to2._.sy - _.sy) / ms,\n\t                                //     (to2._.deg - _.deg) / ms,\n\t                                //     (to2._.dx - _.dx) / ms,\n\t                                //     (to2._.dy - _.dy) / ms\n\t                                // ];\n\t                            }\n\t                            break;\n\t                        case \"csv\":\n\t                            var values = Str(params[attr])[split](separator),\n\t                                from2 = Str(from[attr])[split](separator);\n\t                            if (attr == \"clip-rect\") {\n\t                                from[attr] = from2;\n\t                                diff[attr] = [];\n\t                                i = from2.length;\n\t                                while (i--) {\n\t                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;\n\t                                }\n\t                            }\n\t                            to[attr] = values;\n\t                            break;\n\t                        default:\n\t                            values = [][concat](params[attr]);\n\t                            from2 = [][concat](from[attr]);\n\t                            diff[attr] = [];\n\t                            i = element.paper.customAttributes[attr].length;\n\t                            while (i--) {\n\t                                diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;\n\t                            }\n\t                            break;\n\t                    }\n\t                }\n\t            }\n\t            var easing = params.easing,\n\t                easyeasy = R.easing_formulas[easing];\n\t            if (!easyeasy) {\n\t                easyeasy = Str(easing).match(bezierrg);\n\t                if (easyeasy && easyeasy.length == 5) {\n\t                    var curve = easyeasy;\n\t                    easyeasy = function (t) {\n\t                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);\n\t                    };\n\t                } else {\n\t                    easyeasy = pipe;\n\t                }\n\t            }\n\t            timestamp = params.start || anim.start || +new Date;\n\t            e = {\n\t                anim: anim,\n\t                percent: percent,\n\t                timestamp: timestamp,\n\t                start: timestamp + (anim.del || 0),\n\t                status: 0,\n\t                initstatus: status || 0,\n\t                stop: false,\n\t                ms: ms,\n\t                easing: easyeasy,\n\t                from: from,\n\t                diff: diff,\n\t                to: to,\n\t                el: element,\n\t                callback: params.callback,\n\t                prev: prev,\n\t                next: next,\n\t                repeat: times || anim.times,\n\t                origin: element.attr(),\n\t                totalOrigin: totalOrigin\n\t            };\n\t            animationElements.push(e);\n\t            if (status && !isInAnim && !isInAnimSet) {\n\t                e.stop = true;\n\t                e.start = new Date - ms * status;\n\t                if (animationElements.length == 1) {\n\t                    return animation();\n\t                }\n\t            }\n\t            if (isInAnimSet) {\n\t                e.start = new Date - e.ms * status;\n\t            }\n\t            animationElements.length == 1 && requestAnimFrame(animation);\n\t        } else {\n\t            isInAnim.initstatus = status;\n\t            isInAnim.start = new Date - isInAnim.ms * status;\n\t        }\n\t        eve(\"raphael.anim.start.\" + element.id, element, anim);\n\t    }\n\t    /*\\\n\t     * Raphael.animation\n\t     [ method ]\n\t     **\n\t     * Creates an animation object that can be passed to the @Element.animate or @Element.animateWith methods.\n\t     * See also @Animation.delay and @Animation.repeat methods.\n\t     **\n\t     > Parameters\n\t     **\n\t     - params (object) final attributes for the element, see also @Element.attr\n\t     - ms (number) number of milliseconds for animation to run\n\t     - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\n\t     - callback (function) #optional callback function. Will be called at the end of animation.\n\t     **\n\t     = (object) @Animation\n\t    \\*/\n\t    R.animation = function (params, ms, easing, callback) {\n\t        if (params instanceof Animation) {\n\t            return params;\n\t        }\n\t        if (R.is(easing, \"function\") || !easing) {\n\t            callback = callback || easing || null;\n\t            easing = null;\n\t        }\n\t        params = Object(params);\n\t        ms = +ms || 0;\n\t        var p = {},\n\t            json,\n\t            attr;\n\t        for (attr in params) if (params[has](attr) && toFloat(attr) != attr && toFloat(attr) + \"%\" != attr) {\n\t            json = true;\n\t            p[attr] = params[attr];\n\t        }\n\t        if (!json) {\n\t            // if percent-like syntax is used and end-of-all animation callback used\n\t            if(callback){\n\t                // find the last one\n\t                var lastKey = 0;\n\t                for(var i in params){\n\t                    var percent = toInt(i);\n\t                    if(params[has](i) && percent > lastKey){\n\t                        lastKey = percent;\n\t                    }\n\t                }\n\t                lastKey += '%';\n\t                // if already defined callback in the last keyframe, skip\n\t                !params[lastKey].callback && (params[lastKey].callback = callback);\n\t            }\n\t          return new Animation(params, ms);\n\t        } else {\n\t            easing && (p.easing = easing);\n\t            callback && (p.callback = callback);\n\t            return new Animation({100: p}, ms);\n\t        }\n\t    };\n\t    /*\\\n\t     * Element.animate\n\t     [ method ]\n\t     **\n\t     * Creates and starts animation for given element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - params (object) final attributes for the element, see also @Element.attr\n\t     - ms (number) number of milliseconds for animation to run\n\t     - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\n\t     - callback (function) #optional callback function. Will be called at the end of animation.\n\t     * or\n\t     - animation (object) animation object, see @Raphael.animation\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.animate = function (params, ms, easing, callback) {\n\t        var element = this;\n\t        if (element.removed) {\n\t            callback && callback.call(element);\n\t            return element;\n\t        }\n\t        var anim = params instanceof Animation ? params : R.animation(params, ms, easing, callback);\n\t        runAnimation(anim, element, anim.percents[0], null, element.attr());\n\t        return element;\n\t    };\n\t    /*\\\n\t     * Element.setTime\n\t     [ method ]\n\t     **\n\t     * Sets the status of animation of the element in milliseconds. Similar to @Element.status method.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) animation object\n\t     - value (number) number of milliseconds from the beginning of the animation\n\t     **\n\t     = (object) original element if `value` is specified\n\t     * Note, that during animation following events are triggered:\n\t     *\n\t     * On each animation frame event `anim.frame.<id>`, on start `anim.start.<id>` and on end `anim.finish.<id>`.\n\t    \\*/\n\t    elproto.setTime = function (anim, value) {\n\t        if (anim && value != null) {\n\t            this.status(anim, mmin(value, anim.ms) / anim.ms);\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.status\n\t     [ method ]\n\t     **\n\t     * Gets or sets the status of animation of the element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     - value (number) #optional 0 â€“ 1. If specified, method works like a setter and sets the status of a given animation to the value. This will cause animation to jump to the given position.\n\t     **\n\t     = (number) status\n\t     * or\n\t     = (array) status if `anim` is not specified. Array of objects in format:\n\t     o {\n\t     o     anim: (object) animation object\n\t     o     status: (number) status\n\t     o }\n\t     * or\n\t     = (object) original element if `value` is specified\n\t    \\*/\n\t    elproto.status = function (anim, value) {\n\t        var out = [],\n\t            i = 0,\n\t            len,\n\t            e;\n\t        if (value != null) {\n\t            runAnimation(anim, this, -1, mmin(value, 1));\n\t            return this;\n\t        } else {\n\t            len = animationElements.length;\n\t            for (; i < len; i++) {\n\t                e = animationElements[i];\n\t                if (e.el.id == this.id && (!anim || e.anim == anim)) {\n\t                    if (anim) {\n\t                        return e.status;\n\t                    }\n\t                    out.push({\n\t                        anim: e.anim,\n\t                        status: e.status\n\t                    });\n\t                }\n\t            }\n\t            if (anim) {\n\t                return 0;\n\t            }\n\t            return out;\n\t        }\n\t    };\n\t    /*\\\n\t     * Element.pause\n\t     [ method ]\n\t     **\n\t     * Stops animation of the element with ability to resume it later on.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.pause = function (anim) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n\t            if (eve(\"raphael.anim.pause.\" + this.id, this, animationElements[i].anim) !== false) {\n\t                animationElements[i].paused = true;\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.resume\n\t     [ method ]\n\t     **\n\t     * Resumes animation if it was paused with @Element.pause method.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.resume = function (anim) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n\t            var e = animationElements[i];\n\t            if (eve(\"raphael.anim.resume.\" + this.id, this, e.anim) !== false) {\n\t                delete e.paused;\n\t                this.status(e.anim, e.status);\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.stop\n\t     [ method ]\n\t     **\n\t     * Stops animation of the element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     **\n\n\t     = (object) original element\n\t    \\*/\n\t    elproto.stop = function (anim) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n\t            if (eve(\"raphael.anim.stop.\" + this.id, this, animationElements[i].anim) !== false) {\n\t                animationElements.splice(i--, 1);\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    function stopAnimation(paper) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.paper == paper) {\n\t            animationElements.splice(i--, 1);\n\t        }\n\t    }\n\t    eve.on(\"raphael.remove\", stopAnimation);\n\t    eve.on(\"raphael.clear\", stopAnimation);\n\t    elproto.toString = function () {\n\t        return \"Rapha\\xebl\\u2019s object\";\n\t    };\n\n\t    // Set\n\t    var Set = function (items) {\n\t        this.items = [];\n\t        this.length = 0;\n\t        this.type = \"set\";\n\t        if (items) {\n\t            for (var i = 0, ii = items.length; i < ii; i++) {\n\t                if (items[i] && (items[i].constructor == elproto.constructor || items[i].constructor == Set)) {\n\t                    this[this.items.length] = this.items[this.items.length] = items[i];\n\t                    this.length++;\n\t                }\n\t            }\n\t        }\n\t    },\n\t    setproto = Set.prototype;\n\t    /*\\\n\t     * Set.push\n\t     [ method ]\n\t     **\n\t     * Adds each argument to the current set.\n\t     = (object) original element\n\t    \\*/\n\t    setproto.push = function () {\n\t        var item,\n\t            len;\n\t        for (var i = 0, ii = arguments.length; i < ii; i++) {\n\t            item = arguments[i];\n\t            if (item && (item.constructor == elproto.constructor || item.constructor == Set)) {\n\t                len = this.items.length;\n\t                this[len] = this.items[len] = item;\n\t                this.length++;\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Set.pop\n\t     [ method ]\n\t     **\n\t     * Removes last element and returns it.\n\t     = (object) element\n\t    \\*/\n\t    setproto.pop = function () {\n\t        this.length && delete this[this.length--];\n\t        return this.items.pop();\n\t    };\n\t    /*\\\n\t     * Set.forEach\n\t     [ method ]\n\t     **\n\t     * Executes given function for each element in the set.\n\t     *\n\t     * If function returns `false` it will stop loop running.\n\t     **\n\t     > Parameters\n\t     **\n\t     - callback (function) function to run\n\t     - thisArg (object) context object for the callback\n\t     = (object) Set object\n\t    \\*/\n\t    setproto.forEach = function (callback, thisArg) {\n\t        for (var i = 0, ii = this.items.length; i < ii; i++) {\n\t            if (callback.call(thisArg, this.items[i], i) === false) {\n\t                return this;\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    for (var method in elproto) if (elproto[has](method)) {\n\t        setproto[method] = (function (methodname) {\n\t            return function () {\n\t                var arg = arguments;\n\t                return this.forEach(function (el) {\n\t                    el[methodname][apply](el, arg);\n\t                });\n\t            };\n\t        })(method);\n\t    }\n\t    setproto.attr = function (name, value) {\n\t        if (name && R.is(name, array) && R.is(name[0], \"object\")) {\n\t            for (var j = 0, jj = name.length; j < jj; j++) {\n\t                this.items[j].attr(name[j]);\n\t            }\n\t        } else {\n\t            for (var i = 0, ii = this.items.length; i < ii; i++) {\n\t                this.items[i].attr(name, value);\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Set.clear\n\t     [ method ]\n\t     **\n\t     * Removes all elements from the set\n\t    \\*/\n\t    setproto.clear = function () {\n\t        while (this.length) {\n\t            this.pop();\n\t        }\n\t    };\n\t    /*\\\n\t     * Set.splice\n\t     [ method ]\n\t     **\n\t     * Removes given element from the set\n\t     **\n\t     > Parameters\n\t     **\n\t     - index (number) position of the deletion\n\t     - count (number) number of element to remove\n\t     - insertionâ€¦ (object) #optional elements to insert\n\t     = (object) set elements that were deleted\n\t    \\*/\n\t    setproto.splice = function (index, count, insertion) {\n\t        index = index < 0 ? mmax(this.length + index, 0) : index;\n\t        count = mmax(0, mmin(this.length - index, count));\n\t        var tail = [],\n\t            todel = [],\n\t            args = [],\n\t            i;\n\t        for (i = 2; i < arguments.length; i++) {\n\t            args.push(arguments[i]);\n\t        }\n\t        for (i = 0; i < count; i++) {\n\t            todel.push(this[index + i]);\n\t        }\n\t        for (; i < this.length - index; i++) {\n\t            tail.push(this[index + i]);\n\t        }\n\t        var arglen = args.length;\n\t        for (i = 0; i < arglen + tail.length; i++) {\n\t            this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];\n\t        }\n\t        i = this.items.length = this.length -= count - arglen;\n\t        while (this[i]) {\n\t            delete this[i++];\n\t        }\n\t        return new Set(todel);\n\t    };\n\t    /*\\\n\t     * Set.exclude\n\t     [ method ]\n\t     **\n\t     * Removes given element from the set\n\t     **\n\t     > Parameters\n\t     **\n\t     - element (object) element to remove\n\t     = (boolean) `true` if object was found & removed from the set\n\t    \\*/\n\t    setproto.exclude = function (el) {\n\t        for (var i = 0, ii = this.length; i < ii; i++) if (this[i] == el) {\n\t            this.splice(i, 1);\n\t            return true;\n\t        }\n\t    };\n\t    setproto.animate = function (params, ms, easing, callback) {\n\t        (R.is(easing, \"function\") || !easing) && (callback = easing || null);\n\t        var len = this.items.length,\n\t            i = len,\n\t            item,\n\t            set = this,\n\t            collector;\n\t        if (!len) {\n\t            return this;\n\t        }\n\t        callback && (collector = function () {\n\t            !--len && callback.call(set);\n\t        });\n\t        easing = R.is(easing, string) ? easing : collector;\n\t        var anim = R.animation(params, ms, easing, collector);\n\t        item = this.items[--i].animate(anim);\n\t        while (i--) {\n\t            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, anim, anim);\n\t            (this.items[i] && !this.items[i].removed) || len--;\n\t        }\n\t        return this;\n\t    };\n\t    setproto.insertAfter = function (el) {\n\t        var i = this.items.length;\n\t        while (i--) {\n\t            this.items[i].insertAfter(el);\n\t        }\n\t        return this;\n\t    };\n\t    setproto.getBBox = function () {\n\t        var x = [],\n\t            y = [],\n\t            x2 = [],\n\t            y2 = [];\n\t        for (var i = this.items.length; i--;) if (!this.items[i].removed) {\n\t            var box = this.items[i].getBBox();\n\t            x.push(box.x);\n\t            y.push(box.y);\n\t            x2.push(box.x + box.width);\n\t            y2.push(box.y + box.height);\n\t        }\n\t        x = mmin[apply](0, x);\n\t        y = mmin[apply](0, y);\n\t        x2 = mmax[apply](0, x2);\n\t        y2 = mmax[apply](0, y2);\n\t        return {\n\t            x: x,\n\t            y: y,\n\t            x2: x2,\n\t            y2: y2,\n\t            width: x2 - x,\n\t            height: y2 - y\n\t        };\n\t    };\n\t    setproto.clone = function (s) {\n\t        s = this.paper.set();\n\t        for (var i = 0, ii = this.items.length; i < ii; i++) {\n\t            s.push(this.items[i].clone());\n\t        }\n\t        return s;\n\t    };\n\t    setproto.toString = function () {\n\t        return \"Rapha\\xebl\\u2018s set\";\n\t    };\n\n\t    setproto.glow = function(glowConfig) {\n\t        var ret = this.paper.set();\n\t        this.forEach(function(shape, index){\n\t            var g = shape.glow(glowConfig);\n\t            if(g != null){\n\t                g.forEach(function(shape2, index2){\n\t                    ret.push(shape2);\n\t                });\n\t            }\n\t        });\n\t        return ret;\n\t    };\n\n\n\t    /*\\\n\t     * Set.isPointInside\n\t     [ method ]\n\t     **\n\t     * Determine if given point is inside this setâ€™s elements\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the point\n\t     - y (number) y coordinate of the point\n\t     = (boolean) `true` if point is inside any of the set's elements\n\t     \\*/\n\t    setproto.isPointInside = function (x, y) {\n\t        var isPointInside = false;\n\t        this.forEach(function (el) {\n\t            if (el.isPointInside(x, y)) {\n\t                isPointInside = true;\n\t                return false; // stop loop\n\t            }\n\t        });\n\t        return isPointInside;\n\t    };\n\n\t    /*\\\n\t     * Raphael.registerFont\n\t     [ method ]\n\t     **\n\t     * Adds given font to the registered set of fonts for RaphaÃ«l. Should be used as an internal call from within CufÃ³nâ€™s font file.\n\t     * Returns original parameter, so it could be used with chaining.\n\t     # <a href=\"http://wiki.github.com/sorccu/cufon/about\">More about CufÃ³n and how to convert your font form TTF, OTF, etc to JavaScript file.</a>\n\t     **\n\t     > Parameters\n\t     **\n\t     - font (object) the font to register\n\t     = (object) the font you passed in\n\t     > Usage\n\t     | Cufon.registerFont(Raphael.registerFont({â€¦}));\n\t    \\*/\n\t    R.registerFont = function (font) {\n\t        if (!font.face) {\n\t            return font;\n\t        }\n\t        this.fonts = this.fonts || {};\n\t        var fontcopy = {\n\t                w: font.w,\n\t                face: {},\n\t                glyphs: {}\n\t            },\n\t            family = font.face[\"font-family\"];\n\t        for (var prop in font.face) if (font.face[has](prop)) {\n\t            fontcopy.face[prop] = font.face[prop];\n\t        }\n\t        if (this.fonts[family]) {\n\t            this.fonts[family].push(fontcopy);\n\t        } else {\n\t            this.fonts[family] = [fontcopy];\n\t        }\n\t        if (!font.svg) {\n\t            fontcopy.face[\"units-per-em\"] = toInt(font.face[\"units-per-em\"], 10);\n\t            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {\n\t                var path = font.glyphs[glyph];\n\t                fontcopy.glyphs[glyph] = {\n\t                    w: path.w,\n\t                    k: {},\n\t                    d: path.d && \"M\" + path.d.replace(/[mlcxtrv]/g, function (command) {\n\t                            return {l: \"L\", c: \"C\", x: \"z\", t: \"m\", r: \"l\", v: \"c\"}[command] || \"M\";\n\t                        }) + \"z\"\n\t                };\n\t                if (path.k) {\n\t                    for (var k in path.k) if (path[has](k)) {\n\t                        fontcopy.glyphs[glyph].k[k] = path.k[k];\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return font;\n\t    };\n\t    /*\\\n\t     * Paper.getFont\n\t     [ method ]\n\t     **\n\t     * Finds font object in the registered fonts by given parameters. You could specify only one word from the font name, like â€œMyriadâ€ for â€œMyriad Proâ€.\n\t     **\n\t     > Parameters\n\t     **\n\t     - family (string) font family name or any word from it\n\t     - weight (string) #optional font weight\n\t     - style (string) #optional font style\n\t     - stretch (string) #optional font stretch\n\t     = (object) the font object\n\t     > Usage\n\t     | paper.print(100, 100, \"Test string\", paper.getFont(\"Times\", 800), 30);\n\t    \\*/\n\t    paperproto.getFont = function (family, weight, style, stretch) {\n\t        stretch = stretch || \"normal\";\n\t        style = style || \"normal\";\n\t        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;\n\t        if (!R.fonts) {\n\t            return;\n\t        }\n\t        var font = R.fonts[family];\n\t        if (!font) {\n\t            var name = new RegExp(\"(^|\\\\s)\" + family.replace(/[^\\w\\d\\s+!~.:_-]/g, E) + \"(\\\\s|$)\", \"i\");\n\t            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {\n\t                if (name.test(fontName)) {\n\t                    font = R.fonts[fontName];\n\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        var thefont;\n\t        if (font) {\n\t            for (var i = 0, ii = font.length; i < ii; i++) {\n\t                thefont = font[i];\n\t                if (thefont.face[\"font-weight\"] == weight && (thefont.face[\"font-style\"] == style || !thefont.face[\"font-style\"]) && thefont.face[\"font-stretch\"] == stretch) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        return thefont;\n\t    };\n\t    /*\\\n\t     * Paper.print\n\t     [ method ]\n\t     **\n\t     * Creates path that represent given text written using given font at given position with given size.\n\t     * Result of the method is path element that contains whole text as a separate path.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x position of the text\n\t     - y (number) y position of the text\n\t     - string (string) text to print\n\t     - font (object) font object, see @Paper.getFont\n\t     - size (number) #optional size of the font, default is `16`\n\t     - origin (string) #optional could be `\"baseline\"` or `\"middle\"`, default is `\"middle\"`\n\t     - letter_spacing (number) #optional number in range `-1..1`, default is `0`\n\t     - line_spacing (number) #optional number in range `1..3`, default is `1`\n\t     = (object) resulting path element, which consist of all letters\n\t     > Usage\n\t     | var txt = r.print(10, 50, \"print\", r.getFont(\"Museo\"), 30).attr({fill: \"#fff\"});\n\t    \\*/\n\t    paperproto.print = function (x, y, string, font, size, origin, letter_spacing, line_spacing) {\n\t        origin = origin || \"middle\"; // baseline|middle\n\t        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);\n\t        line_spacing = mmax(mmin(line_spacing || 1, 3), 1);\n\t        var letters = Str(string)[split](E),\n\t            shift = 0,\n\t            notfirst = 0,\n\t            path = E,\n\t            scale;\n\t        R.is(font, \"string\") && (font = this.getFont(font));\n\t        if (font) {\n\t            scale = (size || 16) / font.face[\"units-per-em\"];\n\t            var bb = font.face.bbox[split](separator),\n\t                top = +bb[0],\n\t                lineHeight = bb[3] - bb[1],\n\t                shifty = 0,\n\t                height = +bb[1] + (origin == \"baseline\" ? lineHeight + (+font.face.descent) : lineHeight / 2);\n\t            for (var i = 0, ii = letters.length; i < ii; i++) {\n\t                if (letters[i] == \"\\n\") {\n\t                    shift = 0;\n\t                    curr = 0;\n\t                    notfirst = 0;\n\t                    shifty += lineHeight * line_spacing;\n\t                } else {\n\t                    var prev = notfirst && font.glyphs[letters[i - 1]] || {},\n\t                        curr = font.glyphs[letters[i]];\n\t                    shift += notfirst ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;\n\t                    notfirst = 1;\n\t                }\n\t                if (curr && curr.d) {\n\t                    path += R.transformPath(curr.d, [\"t\", shift * scale, shifty * scale, \"s\", scale, scale, top, height, \"t\", (x - top) / scale, (y - height) / scale]);\n\t                }\n\t            }\n\t        }\n\t        return this.path(path).attr({\n\t            fill: \"#000\",\n\t            stroke: \"none\"\n\t        });\n\t    };\n\n\t    /*\\\n\t     * Paper.add\n\t     [ method ]\n\t     **\n\t     * Imports elements in JSON array in format `{type: type, <attributes>}`\n\t     **\n\t     > Parameters\n\t     **\n\t     - json (array)\n\t     = (object) resulting set of imported elements\n\t     > Usage\n\t     | paper.add([\n\t     |     {\n\t     |         type: \"circle\",\n\t     |         cx: 10,\n\t     |         cy: 10,\n\t     |         r: 5\n\t     |     },\n\t     |     {\n\t     |         type: \"rect\",\n\t     |         x: 10,\n\t     |         y: 10,\n\t     |         width: 10,\n\t     |         height: 10,\n\t     |         fill: \"#fc0\"\n\t     |     }\n\t     | ]);\n\t    \\*/\n\t    paperproto.add = function (json) {\n\t        if (R.is(json, \"array\")) {\n\t            var res = this.set(),\n\t                i = 0,\n\t                ii = json.length,\n\t                j;\n\t            for (; i < ii; i++) {\n\t                j = json[i] || {};\n\t                elements[has](j.type) && res.push(this[j.type]().attr(j));\n\t            }\n\t        }\n\t        return res;\n\t    };\n\n\t    /*\\\n\t     * Raphael.format\n\t     [ method ]\n\t     **\n\t     * Simple format function. Replaces construction of type â€œ`{<number>}`â€ to the corresponding argument.\n\t     **\n\t     > Parameters\n\t     **\n\t     - token (string) string to format\n\t     - â€¦ (string) rest of arguments will be treated as parameters for replacement\n\t     = (string) formated string\n\t     > Usage\n\t     | var x = 10,\n\t     |     y = 20,\n\t     |     width = 40,\n\t     |     height = 50;\n\t     | // this will draw a rectangular shape equivalent to \"M10,20h40v50h-40z\"\n\t     | paper.path(Raphael.format(\"M{0},{1}h{2}v{3}h{4}z\", x, y, width, height, -width));\n\t    \\*/\n\t    R.format = function (token, params) {\n\t        var args = R.is(params, array) ? [0][concat](params) : arguments;\n\t        token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) {\n\t            return args[++i] == null ? E : args[i];\n\t        }));\n\t        return token || E;\n\t    };\n\t    /*\\\n\t     * Raphael.fullfill\n\t     [ method ]\n\t     **\n\t     * A little bit more advanced format function than @Raphael.format. Replaces construction of type â€œ`{<name>}`â€ to the corresponding argument.\n\t     **\n\t     > Parameters\n\t     **\n\t     - token (string) string to format\n\t     - json (object) object which properties will be used as a replacement\n\t     = (string) formated string\n\t     > Usage\n\t     | // this will draw a rectangular shape equivalent to \"M10,20h40v50h-40z\"\n\t     | paper.path(Raphael.fullfill(\"M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z\", {\n\t     |     x: 10,\n\t     |     y: 20,\n\t     |     dim: {\n\t     |         width: 40,\n\t     |         height: 50,\n\t     |         \"negative width\": -40\n\t     |     }\n\t     | }));\n\t    \\*/\n\t    R.fullfill = (function () {\n\t        var tokenRegex = /\\{([^\\}]+)\\}/g,\n\t            objNotationRegex = /(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g, // matches .xxxxx or [\"xxxxx\"] to run over object properties\n\t            replacer = function (all, key, obj) {\n\t                var res = obj;\n\t                key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {\n\t                    name = name || quotedName;\n\t                    if (res) {\n\t                        if (name in res) {\n\t                            res = res[name];\n\t                        }\n\t                        typeof res == \"function\" && isFunc && (res = res());\n\t                    }\n\t                });\n\t                res = (res == null || res == obj ? all : res) + \"\";\n\t                return res;\n\t            };\n\t        return function (str, obj) {\n\t            return String(str).replace(tokenRegex, function (all, key) {\n\t                return replacer(all, key, obj);\n\t            });\n\t        };\n\t    })();\n\t    /*\\\n\t     * Raphael.ninja\n\t     [ method ]\n\t     **\n\t     * If you want to leave no trace of RaphaÃ«l (Well, RaphaÃ«l creates only one global variable `Raphael`, but anyway.) You can use `ninja` method.\n\t     * Beware, that in this case plugins could stop working, because they are depending on global variable existence.\n\t     **\n\t     = (object) Raphael object\n\t     > Usage\n\t     | (function (local_raphael) {\n\t     |     var paper = local_raphael(10, 10, 320, 200);\n\t     |     â€¦\n\t     | })(Raphael.ninja());\n\t    \\*/\n\t    R.ninja = function () {\n\t        if (oldRaphael.was) {\n\t            g.win.Raphael = oldRaphael.is;\n\t        } else {\n\t            // IE8 raises an error when deleting window property\n\t            window.Raphael = undefined;\n\t            try {\n\t                delete window.Raphael;\n\t            } catch(e) {}\n\t        }\n\t        return R;\n\t    };\n\t    /*\\\n\t     * Raphael.st\n\t     [ property (object) ]\n\t     **\n\t     * You can add your own method to elements and sets. It is wise to add a set method for each element method\n\t     * you added, so you will be able to call the same method on sets too.\n\t     **\n\t     * See also @Raphael.el.\n\t     > Usage\n\t     | Raphael.el.red = function () {\n\t     |     this.attr({fill: \"#f00\"});\n\t     | };\n\t     | Raphael.st.red = function () {\n\t     |     this.forEach(function (el) {\n\t     |         el.red();\n\t     |     });\n\t     | };\n\t     | // then use it\n\t     | paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red();\n\t    \\*/\n\t    R.st = setproto;\n\n\t    eve.on(\"raphael.DOMload\", function () {\n\t        loaded = true;\n\t    });\n\n\t    // Firefox <3.6 fix: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\n\t    (function (doc, loaded, f) {\n\t        if (doc.readyState == null && doc.addEventListener){\n\t            doc.addEventListener(loaded, f = function () {\n\t                doc.removeEventListener(loaded, f, false);\n\t                doc.readyState = \"complete\";\n\t            }, false);\n\t            doc.readyState = \"loading\";\n\t        }\n\t        function isLoaded() {\n\t            (/in/).test(doc.readyState) ? setTimeout(isLoaded, 9) : R.eve(\"raphael.DOMload\");\n\t        }\n\t        isLoaded();\n\t    })(document, \"DOMContentLoaded\");\n\n\t    return R;\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n\t//\n\t// Licensed under the Apache License, Version 2.0 (the \"License\");\n\t// you may not use this file except in compliance with the License.\n\t// You may obtain a copy of the License at\n\t//\n\t// http://www.apache.org/licenses/LICENSE-2.0\n\t//\n\t// Unless required by applicable law or agreed to in writing, software\n\t// distributed under the License is distributed on an \"AS IS\" BASIS,\n\t// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t// See the License for the specific language governing permissions and\n\t// limitations under the License.\n\t// â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â” \\\\\n\t// â”‚ Eve 0.5.0 - JavaScript Events Library                      â”‚ \\\\\n\t// â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤ \\\\\n\t// â”‚ Author Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) â”‚ \\\\\n\t// â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜ \\\\\n\n\t(function (glob) {\n\t    var version = \"0.5.0\",\n\t        has = \"hasOwnProperty\",\n\t        separator = /[\\.\\/]/,\n\t        comaseparator = /\\s*,\\s*/,\n\t        wildcard = \"*\",\n\t        fun = function () {},\n\t        numsort = function (a, b) {\n\t            return a - b;\n\t        },\n\t        current_event,\n\t        stop,\n\t        events = {n: {}},\n\t        firstDefined = function () {\n\t            for (var i = 0, ii = this.length; i < ii; i++) {\n\t                if (typeof this[i] != \"undefined\") {\n\t                    return this[i];\n\t                }\n\t            }\n\t        },\n\t        lastDefined = function () {\n\t            var i = this.length;\n\t            while (--i) {\n\t                if (typeof this[i] != \"undefined\") {\n\t                    return this[i];\n\t                }\n\t            }\n\t        },\n\t        objtos = Object.prototype.toString,\n\t        Str = String,\n\t        isArray = Array.isArray || function (ar) {\n\n\t            return ar instanceof Array || objtos.call(ar) == \"[object Array]\";\n\t        };\n\t    /*\\\n\t     * eve\n\t     [ method ]\n\n\t     * Fires event with given `name`, given scope and other parameters.\n\n\t     > Arguments\n\n\t     - name (string) name of the *event*, dot (`.`) or slash (`/`) separated\n\t     - scope (object) context for the event handlers\n\t     - varargs (...) the rest of arguments will be sent to event handlers\n\n\t     = (object) array of returned values from the listeners. Array has two methods `.firstDefined()` and `.lastDefined()` to get first or last not `undefined` value.\n\t    \\*/\n\t        eve = function (name, scope) {\n\t            var e = events,\n\t                oldstop = stop,\n\t                args = Array.prototype.slice.call(arguments, 2),\n\t                listeners = eve.listeners(name),\n\t                z = 0,\n\t                f = false,\n\t                l,\n\t                indexed = [],\n\t                queue = {},\n\t                out = [],\n\t                ce = current_event,\n\t                errors = [];\n\t            out.firstDefined = firstDefined;\n\t            out.lastDefined = lastDefined;\n\t            current_event = name;\n\t            stop = 0;\n\t            for (var i = 0, ii = listeners.length; i < ii; i++) if (\"zIndex\" in listeners[i]) {\n\t                indexed.push(listeners[i].zIndex);\n\t                if (listeners[i].zIndex < 0) {\n\t                    queue[listeners[i].zIndex] = listeners[i];\n\t                }\n\t            }\n\t            indexed.sort(numsort);\n\t            while (indexed[z] < 0) {\n\t                l = queue[indexed[z++]];\n\t                out.push(l.apply(scope, args));\n\t                if (stop) {\n\t                    stop = oldstop;\n\t                    return out;\n\t                }\n\t            }\n\t            for (i = 0; i < ii; i++) {\n\t                l = listeners[i];\n\t                if (\"zIndex\" in l) {\n\t                    if (l.zIndex == indexed[z]) {\n\t                        out.push(l.apply(scope, args));\n\t                        if (stop) {\n\t                            break;\n\t                        }\n\t                        do {\n\t                            z++;\n\t                            l = queue[indexed[z]];\n\t                            l && out.push(l.apply(scope, args));\n\t                            if (stop) {\n\t                                break;\n\t                            }\n\t                        } while (l)\n\t                    } else {\n\t                        queue[l.zIndex] = l;\n\t                    }\n\t                } else {\n\t                    out.push(l.apply(scope, args));\n\t                    if (stop) {\n\t                        break;\n\t                    }\n\t                }\n\t            }\n\t            stop = oldstop;\n\t            current_event = ce;\n\t            return out;\n\t        };\n\t        // Undocumented. Debug only.\n\t        eve._events = events;\n\t    /*\\\n\t     * eve.listeners\n\t     [ method ]\n\n\t     * Internal method which gives you array of all event handlers that will be triggered by the given `name`.\n\n\t     > Arguments\n\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated\n\n\t     = (array) array of event handlers\n\t    \\*/\n\t    eve.listeners = function (name) {\n\t        var names = isArray(name) ? name : name.split(separator),\n\t            e = events,\n\t            item,\n\t            items,\n\t            k,\n\t            i,\n\t            ii,\n\t            j,\n\t            jj,\n\t            nes,\n\t            es = [e],\n\t            out = [];\n\t        for (i = 0, ii = names.length; i < ii; i++) {\n\t            nes = [];\n\t            for (j = 0, jj = es.length; j < jj; j++) {\n\t                e = es[j].n;\n\t                items = [e[names[i]], e[wildcard]];\n\t                k = 2;\n\t                while (k--) {\n\t                    item = items[k];\n\t                    if (item) {\n\t                        nes.push(item);\n\t                        out = out.concat(item.f || []);\n\t                    }\n\t                }\n\t            }\n\t            es = nes;\n\t        }\n\t        return out;\n\t    };\n\t    /*\\\n\t     * eve.separator\n\t     [ method ]\n\n\t     * If for some reasons you donâ€™t like default separators (`.` or `/`) you can specify yours\n\t     * here. Be aware that if you pass a string longer than one character it will be treated as\n\t     * a list of characters.\n\n\t     - separator (string) new separator. Empty string resets to default: `.` or `/`.\n\t    \\*/\n\t    eve.separator = function (sep) {\n\t        if (sep) {\n\t            sep = Str(sep).replace(/(?=[\\.\\^\\]\\[\\-])/g, \"\\\\\");\n\t            sep = \"[\" + sep + \"]\";\n\t            separator = new RegExp(sep);\n\t        } else {\n\t            separator = /[\\.\\/]/;\n\t        }\n\t    };\n\t    /*\\\n\t     * eve.on\n\t     [ method ]\n\t     **\n\t     * Binds given event handler with a given name. You can use wildcards â€œ`*`â€ for the names:\n\t     | eve.on(\"*.under.*\", f);\n\t     | eve(\"mouse.under.floor\"); // triggers f\n\t     * Use @eve to trigger the listener.\n\t     **\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n\t     - f (function) event handler function\n\t     **\n\t     - name (array) if you donâ€™t want to use separators, you can use array of strings\n\t     - f (function) event handler function\n\t     **\n\t     = (function) returned function accepts a single numeric parameter that represents z-index of the handler. It is an optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment.\n\t     > Example:\n\t     | eve.on(\"mouse\", eatIt)(2);\n\t     | eve.on(\"mouse\", scream);\n\t     | eve.on(\"mouse\", catchIt)(1);\n\t     * This will ensure that `catchIt` function will be called before `eatIt`.\n\t     *\n\t     * If you want to put your handler before non-indexed handlers, specify a negative value.\n\t     * Note: I assume most of the time you donâ€™t need to worry about z-index, but itâ€™s nice to have this feature â€œjust in caseâ€.\n\t    \\*/\n\t    eve.on = function (name, f) {\n\t        if (typeof f != \"function\") {\n\t            return function () {};\n\t        }\n\t        var names = isArray(name) ? (isArray(name[0]) ? name : [name]) : Str(name).split(comaseparator);\n\t        for (var i = 0, ii = names.length; i < ii; i++) {\n\t            (function (name) {\n\t                var names = isArray(name) ? name : Str(name).split(separator),\n\t                    e = events,\n\t                    exist;\n\t                for (var i = 0, ii = names.length; i < ii; i++) {\n\t                    e = e.n;\n\t                    e = e.hasOwnProperty(names[i]) && e[names[i]] || (e[names[i]] = {n: {}});\n\t                }\n\t                e.f = e.f || [];\n\t                for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {\n\t                    exist = true;\n\t                    break;\n\t                }\n\t                !exist && e.f.push(f);\n\t            }(names[i]));\n\t        }\n\t        return function (zIndex) {\n\t            if (+zIndex == +zIndex) {\n\t                f.zIndex = +zIndex;\n\t            }\n\t        };\n\t    };\n\t    /*\\\n\t     * eve.f\n\t     [ method ]\n\t     **\n\t     * Returns function that will fire given event with optional arguments.\n\t     * Arguments that will be passed to the result function will be also\n\t     * concated to the list of final arguments.\n\t     | el.onclick = eve.f(\"click\", 1, 2);\n\t     | eve.on(\"click\", function (a, b, c) {\n\t     |     console.log(a, b, c); // 1, 2, [event object]\n\t     | });\n\t     > Arguments\n\t     - event (string) event name\n\t     - varargs (â€¦) and any other arguments\n\t     = (function) possible event handler function\n\t    \\*/\n\t    eve.f = function (event) {\n\t        var attrs = [].slice.call(arguments, 1);\n\t        return function () {\n\t            eve.apply(null, [event, null].concat(attrs).concat([].slice.call(arguments, 0)));\n\t        };\n\t    };\n\t    /*\\\n\t     * eve.stop\n\t     [ method ]\n\t     **\n\t     * Is used inside an event handler to stop the event, preventing any subsequent listeners from firing.\n\t    \\*/\n\t    eve.stop = function () {\n\t        stop = 1;\n\t    };\n\t    /*\\\n\t     * eve.nt\n\t     [ method ]\n\t     **\n\t     * Could be used inside event handler to figure out actual name of the event.\n\t     **\n\t     > Arguments\n\t     **\n\t     - subname (string) #optional subname of the event\n\t     **\n\t     = (string) name of the event, if `subname` is not specified\n\t     * or\n\t     = (boolean) `true`, if current eventâ€™s name contains `subname`\n\t    \\*/\n\t    eve.nt = function (subname) {\n\t        var cur = isArray(current_event) ? current_event.join(\".\") : current_event;\n\t        if (subname) {\n\t            return new RegExp(\"(?:\\\\.|\\\\/|^)\" + subname + \"(?:\\\\.|\\\\/|$)\").test(cur);\n\t        }\n\t        return cur;\n\t    };\n\t    /*\\\n\t     * eve.nts\n\t     [ method ]\n\t     **\n\t     * Could be used inside event handler to figure out actual name of the event.\n\t     **\n\t     **\n\t     = (array) names of the event\n\t    \\*/\n\t    eve.nts = function () {\n\t        return isArray(current_event) ? current_event : current_event.split(separator);\n\t    };\n\t    /*\\\n\t     * eve.off\n\t     [ method ]\n\t     **\n\t     * Removes given function from the list of event listeners assigned to given name.\n\t     * If no arguments specified all the events will be cleared.\n\t     **\n\t     > Arguments\n\t     **\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n\t     - f (function) event handler function\n\t    \\*/\n\t    /*\\\n\t     * eve.unbind\n\t     [ method ]\n\t     **\n\t     * See @eve.off\n\t    \\*/\n\t    eve.off = eve.unbind = function (name, f) {\n\t        if (!name) {\n\t            eve._events = events = {n: {}};\n\t            return;\n\t        }\n\t        var names = isArray(name) ? (isArray(name[0]) ? name : [name]) : Str(name).split(comaseparator);\n\t        if (names.length > 1) {\n\t            for (var i = 0, ii = names.length; i < ii; i++) {\n\t                eve.off(names[i], f);\n\t            }\n\t            return;\n\t        }\n\t        names = isArray(name) ? name : Str(name).split(separator);\n\t        var e,\n\t            key,\n\t            splice,\n\t            i, ii, j, jj,\n\t            cur = [events];\n\t        for (i = 0, ii = names.length; i < ii; i++) {\n\t            for (j = 0; j < cur.length; j += splice.length - 2) {\n\t                splice = [j, 1];\n\t                e = cur[j].n;\n\t                if (names[i] != wildcard) {\n\t                    if (e[names[i]]) {\n\t                        splice.push(e[names[i]]);\n\t                    }\n\t                } else {\n\t                    for (key in e) if (e[has](key)) {\n\t                        splice.push(e[key]);\n\t                    }\n\t                }\n\t                cur.splice.apply(cur, splice);\n\t            }\n\t        }\n\t        for (i = 0, ii = cur.length; i < ii; i++) {\n\t            e = cur[i];\n\t            while (e.n) {\n\t                if (f) {\n\t                    if (e.f) {\n\t                        for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) {\n\t                            e.f.splice(j, 1);\n\t                            break;\n\t                        }\n\t                        !e.f.length && delete e.f;\n\t                    }\n\t                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n\t                        var funcs = e.n[key].f;\n\t                        for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) {\n\t                            funcs.splice(j, 1);\n\t                            break;\n\t                        }\n\t                        !funcs.length && delete e.n[key].f;\n\t                    }\n\t                } else {\n\t                    delete e.f;\n\t                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n\t                        delete e.n[key].f;\n\t                    }\n\t                }\n\t                e = e.n;\n\t            }\n\t        }\n\t    };\n\t    /*\\\n\t     * eve.once\n\t     [ method ]\n\t     **\n\t     * Binds given event handler with a given name to only run once then unbind itself.\n\t     | eve.once(\"login\", f);\n\t     | eve(\"login\"); // triggers f\n\t     | eve(\"login\"); // no listeners\n\t     * Use @eve to trigger the listener.\n\t     **\n\t     > Arguments\n\t     **\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n\t     - f (function) event handler function\n\t     **\n\t     = (function) same return function as @eve.on\n\t    \\*/\n\t    eve.once = function (name, f) {\n\t        var f2 = function () {\n\t            eve.off(name, f2);\n\t            return f.apply(this, arguments);\n\t        };\n\t        return eve.on(name, f2);\n\t    };\n\t    /*\\\n\t     * eve.version\n\t     [ property (string) ]\n\t     **\n\t     * Current version of the library.\n\t    \\*/\n\t    eve.version = version;\n\t    eve.toString = function () {\n\t        return \"You are running Eve \" + version;\n\t    };\n\t    (typeof module != \"undefined\" && module.exports) ? (module.exports = eve) : ( true ? (!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { return eve; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))) : (glob.eve = eve));\n\t})(this);\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) {\n\t    if (R && !R.svg) {\n\t        return;\n\t    }\n\n\t    var has = \"hasOwnProperty\",\n\t        Str = String,\n\t        toFloat = parseFloat,\n\t        toInt = parseInt,\n\t        math = Math,\n\t        mmax = math.max,\n\t        abs = math.abs,\n\t        pow = math.pow,\n\t        separator = /[, ]+/,\n\t        eve = R.eve,\n\t        E = \"\",\n\t        S = \" \";\n\t    var xlink = \"http://www.w3.org/1999/xlink\",\n\t        markers = {\n\t            block: \"M5,0 0,2.5 5,5z\",\n\t            classic: \"M5,0 0,2.5 5,5 3.5,3 3.5,2z\",\n\t            diamond: \"M2.5,0 5,2.5 2.5,5 0,2.5z\",\n\t            open: \"M6,1 1,3.5 6,6\",\n\t            oval: \"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z\"\n\t        },\n\t        markerCounter = {};\n\t    R.toString = function () {\n\t        return  \"Your browser supports SVG.\\nYou are running Rapha\\xebl \" + this.version;\n\t    };\n\t    var $ = function (el, attr) {\n\t        if (attr) {\n\t            if (typeof el == \"string\") {\n\t                el = $(el);\n\t            }\n\t            for (var key in attr) if (attr[has](key)) {\n\t                if (key.substring(0, 6) == \"xlink:\") {\n\t                    el.setAttributeNS(xlink, key.substring(6), Str(attr[key]));\n\t                } else {\n\t                    el.setAttribute(key, Str(attr[key]));\n\t                }\n\t            }\n\t        } else {\n\t            el = R._g.doc.createElementNS(\"http://www.w3.org/2000/svg\", el);\n\t            el.style && (el.style.webkitTapHighlightColor = \"rgba(0,0,0,0)\");\n\t        }\n\t        return el;\n\t    },\n\t    addGradientFill = function (element, gradient) {\n\t        var type = \"linear\",\n\t            id = element.id + gradient,\n\t            fx = .5, fy = .5,\n\t            o = element.node,\n\t            SVG = element.paper,\n\t            s = o.style,\n\t            el = R._g.doc.getElementById(id);\n\t        if (!el) {\n\t            gradient = Str(gradient).replace(R._radial_gradient, function (all, _fx, _fy) {\n\t                type = \"radial\";\n\t                if (_fx && _fy) {\n\t                    fx = toFloat(_fx);\n\t                    fy = toFloat(_fy);\n\t                    var dir = ((fy > .5) * 2 - 1);\n\t                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&\n\t                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&\n\t                        fy != .5 &&\n\t                        (fy = fy.toFixed(5) - 1e-5 * dir);\n\t                }\n\t                return E;\n\t            });\n\t            gradient = gradient.split(/\\s*\\-\\s*/);\n\t            if (type == \"linear\") {\n\t                var angle = gradient.shift();\n\t                angle = -toFloat(angle);\n\t                if (isNaN(angle)) {\n\t                    return null;\n\t                }\n\t                var vector = [0, 0, math.cos(R.rad(angle)), math.sin(R.rad(angle))],\n\t                    max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);\n\t                vector[2] *= max;\n\t                vector[3] *= max;\n\t                if (vector[2] < 0) {\n\t                    vector[0] = -vector[2];\n\t                    vector[2] = 0;\n\t                }\n\t                if (vector[3] < 0) {\n\t                    vector[1] = -vector[3];\n\t                    vector[3] = 0;\n\t                }\n\t            }\n\t            var dots = R._parseDots(gradient);\n\t            if (!dots) {\n\t                return null;\n\t            }\n\t            id = id.replace(/[\\(\\)\\s,\\xb0#]/g, \"_\");\n\n\t            if (element.gradient && id != element.gradient.id) {\n\t                SVG.defs.removeChild(element.gradient);\n\t                delete element.gradient;\n\t            }\n\n\t            if (!element.gradient) {\n\t                el = $(type + \"Gradient\", {id: id});\n\t                element.gradient = el;\n\t                $(el, type == \"radial\" ? {\n\t                    fx: fx,\n\t                    fy: fy\n\t                } : {\n\t                    x1: vector[0],\n\t                    y1: vector[1],\n\t                    x2: vector[2],\n\t                    y2: vector[3],\n\t                    gradientTransform: element.matrix.invert()\n\t                });\n\t                SVG.defs.appendChild(el);\n\t                for (var i = 0, ii = dots.length; i < ii; i++) {\n\t                    el.appendChild($(\"stop\", {\n\t                        offset: dots[i].offset ? dots[i].offset : i ? \"100%\" : \"0%\",\n\t                        \"stop-color\": dots[i].color || \"#fff\",\n\t                        \"stop-opacity\": isFinite(dots[i].opacity) ? dots[i].opacity : 1\n\t                    }));\n\t                }\n\t            }\n\t        }\n\t        $(o, {\n\t            fill: fillurl(id),\n\t            opacity: 1,\n\t            \"fill-opacity\": 1\n\t        });\n\t        s.fill = E;\n\t        s.opacity = 1;\n\t        s.fillOpacity = 1;\n\t        return 1;\n\t    },\n\t    isIE9or10 = function () {\n\t      var mode = document.documentMode;\n\t      return mode && (mode === 9 || mode === 10);\n\t    },\n\t    fillurl = function (id) {\n\t      if (isIE9or10()) {\n\t          return \"url('#\" + id + \"')\";\n\t      }\n\t      var location = document.location;\n\t      var locationString = (\n\t          location.protocol + '//' +\n\t          location.host +\n\t          location.pathname +\n\t          location.search\n\t      );\n\t      return \"url('\" + locationString + \"#\" + id + \"')\";\n\t    },\n\t    updatePosition = function (o) {\n\t        var bbox = o.getBBox(1);\n\t        $(o.pattern, {patternTransform: o.matrix.invert() + \" translate(\" + bbox.x + \",\" + bbox.y + \")\"});\n\t    },\n\t    addArrow = function (o, value, isEnd) {\n\t        if (o.type == \"path\") {\n\t            var values = Str(value).toLowerCase().split(\"-\"),\n\t                p = o.paper,\n\t                se = isEnd ? \"end\" : \"start\",\n\t                node = o.node,\n\t                attrs = o.attrs,\n\t                stroke = attrs[\"stroke-width\"],\n\t                i = values.length,\n\t                type = \"classic\",\n\t                from,\n\t                to,\n\t                dx,\n\t                refX,\n\t                attr,\n\t                w = 3,\n\t                h = 3,\n\t                t = 5;\n\t            while (i--) {\n\t                switch (values[i]) {\n\t                    case \"block\":\n\t                    case \"classic\":\n\t                    case \"oval\":\n\t                    case \"diamond\":\n\t                    case \"open\":\n\t                    case \"none\":\n\t                        type = values[i];\n\t                        break;\n\t                    case \"wide\": h = 5; break;\n\t                    case \"narrow\": h = 2; break;\n\t                    case \"long\": w = 5; break;\n\t                    case \"short\": w = 2; break;\n\t                }\n\t            }\n\t            if (type == \"open\") {\n\t                w += 2;\n\t                h += 2;\n\t                t += 2;\n\t                dx = 1;\n\t                refX = isEnd ? 4 : 1;\n\t                attr = {\n\t                    fill: \"none\",\n\t                    stroke: attrs.stroke\n\t                };\n\t            } else {\n\t                refX = dx = w / 2;\n\t                attr = {\n\t                    fill: attrs.stroke,\n\t                    stroke: \"none\"\n\t                };\n\t            }\n\t            if (o._.arrows) {\n\t                if (isEnd) {\n\t                    o._.arrows.endPath && markerCounter[o._.arrows.endPath]--;\n\t                    o._.arrows.endMarker && markerCounter[o._.arrows.endMarker]--;\n\t                } else {\n\t                    o._.arrows.startPath && markerCounter[o._.arrows.startPath]--;\n\t                    o._.arrows.startMarker && markerCounter[o._.arrows.startMarker]--;\n\t                }\n\t            } else {\n\t                o._.arrows = {};\n\t            }\n\t            if (type != \"none\") {\n\t                var pathId = \"raphael-marker-\" + type,\n\t                    markerId = \"raphael-marker-\" + se + type + w + h + \"-obj\" + o.id;\n\t                if (!R._g.doc.getElementById(pathId)) {\n\t                    p.defs.appendChild($($(\"path\"), {\n\t                        \"stroke-linecap\": \"round\",\n\t                        d: markers[type],\n\t                        id: pathId\n\t                    }));\n\t                    markerCounter[pathId] = 1;\n\t                } else {\n\t                    markerCounter[pathId]++;\n\t                }\n\t                var marker = R._g.doc.getElementById(markerId),\n\t                    use;\n\t                if (!marker) {\n\t                    marker = $($(\"marker\"), {\n\t                        id: markerId,\n\t                        markerHeight: h,\n\t                        markerWidth: w,\n\t                        orient: \"auto\",\n\t                        refX: refX,\n\t                        refY: h / 2\n\t                    });\n\t                    use = $($(\"use\"), {\n\t                        \"xlink:href\": \"#\" + pathId,\n\t                        transform: (isEnd ? \"rotate(180 \" + w / 2 + \" \" + h / 2 + \") \" : E) + \"scale(\" + w / t + \",\" + h / t + \")\",\n\t                        \"stroke-width\": (1 / ((w / t + h / t) / 2)).toFixed(4)\n\t                    });\n\t                    marker.appendChild(use);\n\t                    p.defs.appendChild(marker);\n\t                    markerCounter[markerId] = 1;\n\t                } else {\n\t                    markerCounter[markerId]++;\n\t                    use = marker.getElementsByTagName(\"use\")[0];\n\t                }\n\t                $(use, attr);\n\t                var delta = dx * (type != \"diamond\" && type != \"oval\");\n\t                if (isEnd) {\n\t                    from = o._.arrows.startdx * stroke || 0;\n\t                    to = R.getTotalLength(attrs.path) - delta * stroke;\n\t                } else {\n\t                    from = delta * stroke;\n\t                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\n\t                }\n\t                attr = {};\n\t                attr[\"marker-\" + se] = \"url(#\" + markerId + \")\";\n\t                if (to || from) {\n\t                    attr.d = R.getSubpath(attrs.path, from, to);\n\t                }\n\t                $(node, attr);\n\t                o._.arrows[se + \"Path\"] = pathId;\n\t                o._.arrows[se + \"Marker\"] = markerId;\n\t                o._.arrows[se + \"dx\"] = delta;\n\t                o._.arrows[se + \"Type\"] = type;\n\t                o._.arrows[se + \"String\"] = value;\n\t            } else {\n\t                if (isEnd) {\n\t                    from = o._.arrows.startdx * stroke || 0;\n\t                    to = R.getTotalLength(attrs.path) - from;\n\t                } else {\n\t                    from = 0;\n\t                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\n\t                }\n\t                o._.arrows[se + \"Path\"] && $(node, {d: R.getSubpath(attrs.path, from, to)});\n\t                delete o._.arrows[se + \"Path\"];\n\t                delete o._.arrows[se + \"Marker\"];\n\t                delete o._.arrows[se + \"dx\"];\n\t                delete o._.arrows[se + \"Type\"];\n\t                delete o._.arrows[se + \"String\"];\n\t            }\n\t            for (attr in markerCounter) if (markerCounter[has](attr) && !markerCounter[attr]) {\n\t                var item = R._g.doc.getElementById(attr);\n\t                item && item.parentNode.removeChild(item);\n\t            }\n\t        }\n\t    },\n\t    dasharray = {\n\t        \"-\": [3, 1],\n\t        \".\": [1, 1],\n\t        \"-.\": [3, 1, 1, 1],\n\t        \"-..\": [3, 1, 1, 1, 1, 1],\n\t        \". \": [1, 3],\n\t        \"- \": [4, 3],\n\t        \"--\": [8, 3],\n\t        \"- .\": [4, 3, 1, 3],\n\t        \"--.\": [8, 3, 1, 3],\n\t        \"--..\": [8, 3, 1, 3, 1, 3]\n\t    },\n\t    addDashes = function (o, value, params) {\n\t        value = dasharray[Str(value).toLowerCase()];\n\t        if (value) {\n\t            var width = o.attrs[\"stroke-width\"] || \"1\",\n\t                butt = {round: width, square: width, butt: 0}[o.attrs[\"stroke-linecap\"] || params[\"stroke-linecap\"]] || 0,\n\t                dashes = [],\n\t                i = value.length;\n\t            while (i--) {\n\t                dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;\n\t            }\n\t            $(o.node, {\"stroke-dasharray\": dashes.join(\",\")});\n\t        }\n\t        else {\n\t          $(o.node, {\"stroke-dasharray\": \"none\"});\n\t        }\n\t    },\n\t    setFillAndStroke = function (o, params) {\n\t        var node = o.node,\n\t            attrs = o.attrs,\n\t            vis = node.style.visibility;\n\t        node.style.visibility = \"hidden\";\n\t        for (var att in params) {\n\t            if (params[has](att)) {\n\t                if (!R._availableAttrs[has](att)) {\n\t                    continue;\n\t                }\n\t                var value = params[att];\n\t                attrs[att] = value;\n\t                switch (att) {\n\t                    case \"blur\":\n\t                        o.blur(value);\n\t                        break;\n\t                    case \"title\":\n\t                        var title = node.getElementsByTagName(\"title\");\n\n\t                        // Use the existing <title>.\n\t                        if (title.length && (title = title[0])) {\n\t                          title.firstChild.nodeValue = value;\n\t                        } else {\n\t                          title = $(\"title\");\n\t                          var val = R._g.doc.createTextNode(value);\n\t                          title.appendChild(val);\n\t                          node.appendChild(title);\n\t                        }\n\t                        break;\n\t                    case \"href\":\n\t                    case \"target\":\n\t                        var pn = node.parentNode;\n\t                        if (pn.tagName.toLowerCase() != \"a\") {\n\t                            var hl = $(\"a\");\n\t                            pn.insertBefore(hl, node);\n\t                            hl.appendChild(node);\n\t                            pn = hl;\n\t                        }\n\t                        if (att == \"target\") {\n\t                            pn.setAttributeNS(xlink, \"show\", value == \"blank\" ? \"new\" : value);\n\t                        } else {\n\t                            pn.setAttributeNS(xlink, att, value);\n\n\t                        }\n\t                        break;\n\t                    case \"cursor\":\n\t                        node.style.cursor = value;\n\t                        break;\n\t                    case \"transform\":\n\t                        o.transform(value);\n\t                        break;\n\t                    case \"arrow-start\":\n\t                        addArrow(o, value);\n\t                        break;\n\t                    case \"arrow-end\":\n\t                        addArrow(o, value, 1);\n\t                        break;\n\t                    case \"clip-rect\":\n\t                        var rect = Str(value).split(separator);\n\t                        if (rect.length == 4) {\n\t                            o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);\n\t                            var el = $(\"clipPath\"),\n\t                                rc = $(\"rect\");\n\t                            el.id = R.createUUID();\n\t                            $(rc, {\n\t                                x: rect[0],\n\t                                y: rect[1],\n\t                                width: rect[2],\n\t                                height: rect[3]\n\t                            });\n\t                            el.appendChild(rc);\n\t                            o.paper.defs.appendChild(el);\n\t                            $(node, {\"clip-path\": \"url(#\" + el.id + \")\"});\n\t                            o.clip = rc;\n\t                        }\n\t                        if (!value) {\n\t                            var path = node.getAttribute(\"clip-path\");\n\t                            if (path) {\n\t                                var clip = R._g.doc.getElementById(path.replace(/(^url\\(#|\\)$)/g, E));\n\t                                clip && clip.parentNode.removeChild(clip);\n\t                                $(node, {\"clip-path\": E});\n\t                                delete o.clip;\n\t                            }\n\t                        }\n\t                    break;\n\t                    case \"path\":\n\t                        if (o.type == \"path\") {\n\t                            $(node, {d: value ? attrs.path = R._pathToAbsolute(value) : \"M0,0\"});\n\t                            o._.dirty = 1;\n\t                            if (o._.arrows) {\n\t                                \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n\t                                \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n\t                            }\n\t                        }\n\t                        break;\n\t                    case \"width\":\n\t                        node.setAttribute(att, value);\n\t                        o._.dirty = 1;\n\t                        if (attrs.fx) {\n\t                            att = \"x\";\n\t                            value = attrs.x;\n\t                        } else {\n\t                            break;\n\t                        }\n\t                    case \"x\":\n\t                        if (attrs.fx) {\n\t                            value = -attrs.x - (attrs.width || 0);\n\t                        }\n\t                    case \"rx\":\n\t                        if (att == \"rx\" && o.type == \"rect\") {\n\t                            break;\n\t                        }\n\t                    case \"cx\":\n\t                        node.setAttribute(att, value);\n\t                        o.pattern && updatePosition(o);\n\t                        o._.dirty = 1;\n\t                        break;\n\t                    case \"height\":\n\t                        node.setAttribute(att, value);\n\t                        o._.dirty = 1;\n\t                        if (attrs.fy) {\n\t                            att = \"y\";\n\t                            value = attrs.y;\n\t                        } else {\n\t                            break;\n\t                        }\n\t                    case \"y\":\n\t                        if (attrs.fy) {\n\t                            value = -attrs.y - (attrs.height || 0);\n\t                        }\n\t                    case \"ry\":\n\t                        if (att == \"ry\" && o.type == \"rect\") {\n\t                            break;\n\t                        }\n\t                    case \"cy\":\n\t                        node.setAttribute(att, value);\n\t                        o.pattern && updatePosition(o);\n\t                        o._.dirty = 1;\n\t                        break;\n\t                    case \"r\":\n\t                        if (o.type == \"rect\") {\n\t                            $(node, {rx: value, ry: value});\n\t                        } else {\n\t                            node.setAttribute(att, value);\n\t                        }\n\t                        o._.dirty = 1;\n\t                        break;\n\t                    case \"src\":\n\t                        if (o.type == \"image\") {\n\t                            node.setAttributeNS(xlink, \"href\", value);\n\t                        }\n\t                        break;\n\t                    case \"stroke-width\":\n\t                        if (o._.sx != 1 || o._.sy != 1) {\n\t                            value /= mmax(abs(o._.sx), abs(o._.sy)) || 1;\n\t                        }\n\t                        node.setAttribute(att, value);\n\t                        if (attrs[\"stroke-dasharray\"]) {\n\t                            addDashes(o, attrs[\"stroke-dasharray\"], params);\n\t                        }\n\t                        if (o._.arrows) {\n\t                            \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n\t                            \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n\t                        }\n\t                        break;\n\t                    case \"stroke-dasharray\":\n\t                        addDashes(o, value, params);\n\t                        break;\n\t                    case \"fill\":\n\t                        var isURL = Str(value).match(R._ISURL);\n\t                        if (isURL) {\n\t                            el = $(\"pattern\");\n\t                            var ig = $(\"image\");\n\t                            el.id = R.createUUID();\n\t                            $(el, {x: 0, y: 0, patternUnits: \"userSpaceOnUse\", height: 1, width: 1});\n\t                            $(ig, {x: 0, y: 0, \"xlink:href\": isURL[1]});\n\t                            el.appendChild(ig);\n\n\t                            (function (el) {\n\t                                R._preload(isURL[1], function () {\n\t                                    var w = this.offsetWidth,\n\t                                        h = this.offsetHeight;\n\t                                    $(el, {width: w, height: h});\n\t                                    $(ig, {width: w, height: h});\n\t                                });\n\t                            })(el);\n\t                            o.paper.defs.appendChild(el);\n\t                            $(node, {fill: \"url(#\" + el.id + \")\"});\n\t                            o.pattern = el;\n\t                            o.pattern && updatePosition(o);\n\t                            break;\n\t                        }\n\t                        var clr = R.getRGB(value);\n\t                        if (!clr.error) {\n\t                            delete params.gradient;\n\t                            delete attrs.gradient;\n\t                            !R.is(attrs.opacity, \"undefined\") &&\n\t                                R.is(params.opacity, \"undefined\") &&\n\t                                $(node, {opacity: attrs.opacity});\n\t                            !R.is(attrs[\"fill-opacity\"], \"undefined\") &&\n\t                                R.is(params[\"fill-opacity\"], \"undefined\") &&\n\t                                $(node, {\"fill-opacity\": attrs[\"fill-opacity\"]});\n\t                        } else if ((o.type == \"circle\" || o.type == \"ellipse\" || Str(value).charAt() != \"r\") && addGradientFill(o, value)) {\n\t                            if (\"opacity\" in attrs || \"fill-opacity\" in attrs) {\n\t                                var gradient = R._g.doc.getElementById(node.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g, E));\n\t                                if (gradient) {\n\t                                    var stops = gradient.getElementsByTagName(\"stop\");\n\t                                    $(stops[stops.length - 1], {\"stop-opacity\": (\"opacity\" in attrs ? attrs.opacity : 1) * (\"fill-opacity\" in attrs ? attrs[\"fill-opacity\"] : 1)});\n\t                                }\n\t                            }\n\t                            attrs.gradient = value;\n\t                            attrs.fill = \"none\";\n\t                            break;\n\t                        }\n\t                        clr[has](\"opacity\") && $(node, {\"fill-opacity\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\n\t                    case \"stroke\":\n\t                        clr = R.getRGB(value);\n\t                        node.setAttribute(att, clr.hex);\n\t                        att == \"stroke\" && clr[has](\"opacity\") && $(node, {\"stroke-opacity\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\n\t                        if (att == \"stroke\" && o._.arrows) {\n\t                            \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n\t                            \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n\t                        }\n\t                        break;\n\t                    case \"gradient\":\n\t                        (o.type == \"circle\" || o.type == \"ellipse\" || Str(value).charAt() != \"r\") && addGradientFill(o, value);\n\t                        break;\n\t                    case \"opacity\":\n\t                        if (attrs.gradient && !attrs[has](\"stroke-opacity\")) {\n\t                            $(node, {\"stroke-opacity\": value > 1 ? value / 100 : value});\n\t                        }\n\t                        // fall\n\t                    case \"fill-opacity\":\n\t                        if (attrs.gradient) {\n\t                            gradient = R._g.doc.getElementById(node.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g, E));\n\t                            if (gradient) {\n\t                                stops = gradient.getElementsByTagName(\"stop\");\n\t                                $(stops[stops.length - 1], {\"stop-opacity\": value});\n\t                            }\n\t                            break;\n\t                        }\n\t                    default:\n\t                        att == \"font-size\" && (value = toInt(value, 10) + \"px\");\n\t                        var cssrule = att.replace(/(\\-.)/g, function (w) {\n\t                            return w.substring(1).toUpperCase();\n\t                        });\n\t                        node.style[cssrule] = value;\n\t                        o._.dirty = 1;\n\t                        node.setAttribute(att, value);\n\t                        break;\n\t                }\n\t            }\n\t        }\n\n\t        tuneText(o, params);\n\t        node.style.visibility = vis;\n\t    },\n\t    leading = 1.2,\n\t    tuneText = function (el, params) {\n\t        if (el.type != \"text\" || !(params[has](\"text\") || params[has](\"font\") || params[has](\"font-size\") || params[has](\"x\") || params[has](\"y\"))) {\n\t            return;\n\t        }\n\t        var a = el.attrs,\n\t            node = el.node,\n\t            fontSize = node.firstChild ? toInt(R._g.doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue(\"font-size\"), 10) : 10;\n\n\t        if (params[has](\"text\")) {\n\t            a.text = params.text;\n\t            while (node.firstChild) {\n\t                node.removeChild(node.firstChild);\n\t            }\n\t            var texts = Str(params.text).split(\"\\n\"),\n\t                tspans = [],\n\t                tspan;\n\t            for (var i = 0, ii = texts.length; i < ii; i++) {\n\t                tspan = $(\"tspan\");\n\t                i && $(tspan, {dy: fontSize * leading, x: a.x});\n\t                tspan.appendChild(R._g.doc.createTextNode(texts[i]));\n\t                node.appendChild(tspan);\n\t                tspans[i] = tspan;\n\t            }\n\t        } else {\n\t            tspans = node.getElementsByTagName(\"tspan\");\n\t            for (i = 0, ii = tspans.length; i < ii; i++) if (i) {\n\t                $(tspans[i], {dy: fontSize * leading, x: a.x});\n\t            } else {\n\t                $(tspans[0], {dy: 0});\n\t            }\n\t        }\n\t        $(node, {x: a.x, y: a.y});\n\t        el._.dirty = 1;\n\t        var bb = el._getBBox(),\n\t            dif = a.y - (bb.y + bb.height / 2);\n\t        dif && R.is(dif, \"finite\") && $(tspans[0], {dy: dif});\n\t    },\n\t    getRealNode = function (node) {\n\t        if (node.parentNode && node.parentNode.tagName.toLowerCase() === \"a\") {\n\t            return node.parentNode;\n\t        } else {\n\t            return node;\n\t        }\n\t    },\n\t    Element = function (node, svg) {\n\t        var X = 0,\n\t            Y = 0;\n\t        /*\\\n\t         * Element.node\n\t         [ property (object) ]\n\t         **\n\t         * Gives you a reference to the DOM object, so you can assign event handlers or just mess around.\n\t         **\n\t         * Note: Donâ€™t mess with it.\n\t         > Usage\n\t         | // draw a circle at coordinate 10,10 with radius of 10\n\t         | var c = paper.circle(10, 10, 10);\n\t         | c.node.onclick = function () {\n\t         |     c.attr(\"fill\", \"red\");\n\t         | };\n\t        \\*/\n\t        this[0] = this.node = node;\n\t        /*\\\n\t         * Element.raphael\n\t         [ property (object) ]\n\t         **\n\t         * Internal reference to @Raphael object. In case it is not available.\n\t         > Usage\n\t         | Raphael.el.red = function () {\n\t         |     var hsb = this.paper.raphael.rgb2hsb(this.attr(\"fill\"));\n\t         |     hsb.h = 1;\n\t         |     this.attr({fill: this.paper.raphael.hsb2rgb(hsb).hex});\n\t         | }\n\t        \\*/\n\t        node.raphael = true;\n\t        /*\\\n\t         * Element.id\n\t         [ property (number) ]\n\t         **\n\t         * Unique id of the element. Especially useful when you want to listen to events of the element,\n\t         * because all events are fired in format `<module>.<action>.<id>`. Also useful for @Paper.getById method.\n\t        \\*/\n\t        this.id = guid();\n\t        node.raphaelid = this.id;\n\n\t        /**\n\t        * Method that returns a 5 letter/digit id, enough for 36^5 = 60466176 elements\n\t        * @returns {string} id\n\t        */\n\t        function guid() {\n\t            return (\"0000\" + (Math.random()*Math.pow(36,5) << 0).toString(36)).slice(-5);\n\t        }\n\n\t        this.matrix = R.matrix();\n\t        this.realPath = null;\n\t        /*\\\n\t         * Element.paper\n\t         [ property (object) ]\n\t         **\n\t         * Internal reference to â€œpaperâ€ where object drawn. Mainly for use in plugins and element extensions.\n\t         > Usage\n\t         | Raphael.el.cross = function () {\n\t         |     this.attr({fill: \"red\"});\n\t         |     this.paper.path(\"M10,10L50,50M50,10L10,50\")\n\t         |         .attr({stroke: \"red\"});\n\t         | }\n\t        \\*/\n\t        this.paper = svg;\n\t        this.attrs = this.attrs || {};\n\t        this._ = {\n\t            transform: [],\n\t            sx: 1,\n\t            sy: 1,\n\t            deg: 0,\n\t            dx: 0,\n\t            dy: 0,\n\t            dirty: 1\n\t        };\n\t        !svg.bottom && (svg.bottom = this);\n\t        /*\\\n\t         * Element.prev\n\t         [ property (object) ]\n\t         **\n\t         * Reference to the previous element in the hierarchy.\n\t        \\*/\n\t        this.prev = svg.top;\n\t        svg.top && (svg.top.next = this);\n\t        svg.top = this;\n\t        /*\\\n\t         * Element.next\n\t         [ property (object) ]\n\t         **\n\t         * Reference to the next element in the hierarchy.\n\t        \\*/\n\t        this.next = null;\n\t    },\n\t    elproto = R.el;\n\n\t    Element.prototype = elproto;\n\t    elproto.constructor = Element;\n\n\t    R._engine.path = function (pathString, SVG) {\n\t        var el = $(\"path\");\n\t        SVG.canvas && SVG.canvas.appendChild(el);\n\t        var p = new Element(el, SVG);\n\t        p.type = \"path\";\n\t        setFillAndStroke(p, {\n\t            fill: \"none\",\n\t            stroke: \"#000\",\n\t            path: pathString\n\t        });\n\t        return p;\n\t    };\n\t    /*\\\n\t     * Element.rotate\n\t     [ method ]\n\t     **\n\t     * Deprecated! Use @Element.transform instead.\n\t     * Adds rotation by given angle around given point to the list of\n\t     * transformations of the element.\n\t     > Parameters\n\t     - deg (number) angle in degrees\n\t     - cx (number) #optional x coordinate of the centre of rotation\n\t     - cy (number) #optional y coordinate of the centre of rotation\n\t     * If cx & cy arenâ€™t specified centre of the shape is used as a point of rotation.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.rotate = function (deg, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        deg = Str(deg).split(separator);\n\t        if (deg.length - 1) {\n\t            cx = toFloat(deg[1]);\n\t            cy = toFloat(deg[2]);\n\t        }\n\t        deg = toFloat(deg[0]);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t            cx = bbox.x + bbox.width / 2;\n\t            cy = bbox.y + bbox.height / 2;\n\t        }\n\t        this.transform(this._.transform.concat([[\"r\", deg, cx, cy]]));\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.scale\n\t     [ method ]\n\t     **\n\t     * Deprecated! Use @Element.transform instead.\n\t     * Adds scale by given amount relative to given point to the list of\n\t     * transformations of the element.\n\t     > Parameters\n\t     - sx (number) horisontal scale amount\n\t     - sy (number) vertical scale amount\n\t     - cx (number) #optional x coordinate of the centre of scale\n\t     - cy (number) #optional y coordinate of the centre of scale\n\t     * If cx & cy arenâ€™t specified centre of the shape is used instead.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.scale = function (sx, sy, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        sx = Str(sx).split(separator);\n\t        if (sx.length - 1) {\n\t            sy = toFloat(sx[1]);\n\t            cx = toFloat(sx[2]);\n\t            cy = toFloat(sx[3]);\n\t        }\n\t        sx = toFloat(sx[0]);\n\t        (sy == null) && (sy = sx);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t        }\n\t        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\n\t        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\n\t        this.transform(this._.transform.concat([[\"s\", sx, sy, cx, cy]]));\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.translate\n\t     [ method ]\n\t     **\n\t     * Deprecated! Use @Element.transform instead.\n\t     * Adds translation by given amount to the list of transformations of the element.\n\t     > Parameters\n\t     - dx (number) horisontal shift\n\t     - dy (number) vertical shift\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.translate = function (dx, dy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        dx = Str(dx).split(separator);\n\t        if (dx.length - 1) {\n\t            dy = toFloat(dx[1]);\n\t        }\n\t        dx = toFloat(dx[0]) || 0;\n\t        dy = +dy || 0;\n\t        this.transform(this._.transform.concat([[\"t\", dx, dy]]));\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.transform\n\t     [ method ]\n\t     **\n\t     * Adds transformation to the element which is separate to other attributes,\n\t     * i.e. translation doesnâ€™t change `x` or `y` of the rectange. The format\n\t     * of transformation string is similar to the path string syntax:\n\t     | \"t100,100r30,100,100s2,2,100,100r45s1.5\"\n\t     * Each letter is a command. There are four commands: `t` is for translate, `r` is for rotate, `s` is for\n\t     * scale and `m` is for matrix.\n\t     *\n\t     * There are also alternative â€œabsoluteâ€ translation, rotation and scale: `T`, `R` and `S`. They will not take previous transformation into account. For example, `...T100,0` will always move element 100 px horisontally, while `...t100,0` could move it vertically if there is `r90` before. Just compare results of `r90t100,0` and `r90T100,0`.\n\t     *\n\t     * So, the example line above could be read like â€œtranslate by 100, 100; rotate 30Â° around 100, 100; scale twice around 100, 100;\n\t     * rotate 45Â° around centre; scale 1.5 times relative to centreâ€. As you can see rotate and scale commands have origin\n\t     * coordinates as optional parameters, the default is the centre point of the element.\n\t     * Matrix accepts six parameters.\n\t     > Usage\n\t     | var el = paper.rect(10, 20, 300, 200);\n\t     | // translate 100, 100, rotate 45Â°, translate -100, 0\n\t     | el.transform(\"t100,100r45t-100,0\");\n\t     | // if you want you can append or prepend transformations\n\t     | el.transform(\"...t50,50\");\n\t     | el.transform(\"s2...\");\n\t     | // or even wrap\n\t     | el.transform(\"t50,50...t-50-50\");\n\t     | // to reset transformation call method with empty string\n\t     | el.transform(\"\");\n\t     | // to get current value call it without parameters\n\t     | console.log(el.transform());\n\t     > Parameters\n\t     - tstr (string) #optional transformation string\n\t     * If tstr isnâ€™t specified\n\t     = (string) current transformation string\n\t     * else\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.transform = function (tstr) {\n\t        var _ = this._;\n\t        if (tstr == null) {\n\t            return _.transform;\n\t        }\n\t        R._extractTransform(this, tstr);\n\n\t        this.clip && $(this.clip, {transform: this.matrix.invert()});\n\t        this.pattern && updatePosition(this);\n\t        this.node && $(this.node, {transform: this.matrix});\n\n\t        if (_.sx != 1 || _.sy != 1) {\n\t            var sw = this.attrs[has](\"stroke-width\") ? this.attrs[\"stroke-width\"] : 1;\n\t            this.attr({\"stroke-width\": sw});\n\t        }\n\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.hide\n\t     [ method ]\n\t     **\n\t     * Makes element invisible. See @Element.show.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.hide = function () {\n\t        if(!this.removed) this.node.style.display = \"none\";\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.show\n\t     [ method ]\n\t     **\n\t     * Makes element visible. See @Element.hide.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.show = function () {\n\t        if(!this.removed) this.node.style.display = \"\";\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.remove\n\t     [ method ]\n\t     **\n\t     * Removes element from the paper.\n\t    \\*/\n\t    elproto.remove = function () {\n\t        var node = getRealNode(this.node);\n\t        if (this.removed || !node.parentNode) {\n\t            return;\n\t        }\n\t        var paper = this.paper;\n\t        paper.__set__ && paper.__set__.exclude(this);\n\t        eve.unbind(\"raphael.*.*.\" + this.id);\n\t        if (this.gradient) {\n\t            paper.defs.removeChild(this.gradient);\n\t        }\n\t        R._tear(this, paper);\n\n\t        node.parentNode.removeChild(node);\n\n\t        // Remove custom data for element\n\t        this.removeData();\n\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t        this.removed = true;\n\t    };\n\t    elproto._getBBox = function () {\n\t        if (this.node.style.display == \"none\") {\n\t            this.show();\n\t            var hide = true;\n\t        }\n\t        var canvasHidden = false,\n\t            containerStyle;\n\t        if (this.paper.canvas.parentElement) {\n\t          containerStyle = this.paper.canvas.parentElement.style;\n\t        } //IE10+ can't find parentElement\n\t        else if (this.paper.canvas.parentNode) {\n\t          containerStyle = this.paper.canvas.parentNode.style;\n\t        }\n\n\t        if(containerStyle && containerStyle.display == \"none\") {\n\t          canvasHidden = true;\n\t          containerStyle.display = \"\";\n\t        }\n\t        var bbox = {};\n\t        try {\n\t            bbox = this.node.getBBox();\n\t        } catch(e) {\n\t            // Firefox 3.0.x, 25.0.1 (probably more versions affected) play badly here - possible fix\n\t            bbox = {\n\t                x: this.node.clientLeft,\n\t                y: this.node.clientTop,\n\t                width: this.node.clientWidth,\n\t                height: this.node.clientHeight\n\t            }\n\t        } finally {\n\t            bbox = bbox || {};\n\t            if(canvasHidden){\n\t              containerStyle.display = \"none\";\n\t            }\n\t        }\n\t        hide && this.hide();\n\t        return bbox;\n\t    };\n\t    /*\\\n\t     * Element.attr\n\t     [ method ]\n\t     **\n\t     * Sets the attributes of the element.\n\t     > Parameters\n\t     - attrName (string) attributeâ€™s name\n\t     - value (string) value\n\t     * or\n\t     - params (object) object of name/value pairs\n\t     * or\n\t     - attrName (string) attributeâ€™s name\n\t     * or\n\t     - attrNames (array) in this case method returns array of current values for given attribute names\n\t     = (object) @Element if attrsName & value or params are passed in.\n\t     = (...) value of the attribute if only attrsName is passed in.\n\t     = (array) array of values of the attribute if attrsNames is passed in.\n\t     = (object) object of attributes if nothing is passed in.\n\t     > Possible parameters\n\t     # <p>Please refer to the <a href=\"http://www.w3.org/TR/SVG/\" title=\"The W3C Recommendation for the SVG language describes these properties in detail.\">SVG specification</a> for an explanation of these parameters.</p>\n\t     o arrow-end (string) arrowhead on the end of the path. The format for string is `<type>[-<width>[-<length>]]`. Possible types: `classic`, `block`, `open`, `oval`, `diamond`, `none`, width: `wide`, `narrow`, `medium`, length: `long`, `short`, `midium`.\n\t     o clip-rect (string) comma or space separated values: x, y, width and height\n\t     o cursor (string) CSS type of the cursor\n\t     o cx (number) the x-axis coordinate of the center of the circle, or ellipse\n\t     o cy (number) the y-axis coordinate of the center of the circle, or ellipse\n\t     o fill (string) colour, gradient or image\n\t     o fill-opacity (number)\n\t     o font (string)\n\t     o font-family (string)\n\t     o font-size (number) font size in pixels\n\t     o font-weight (string)\n\t     o height (number)\n\t     o href (string) URL, if specified element behaves as hyperlink\n\t     o opacity (number)\n\t     o path (string) SVG path string format\n\t     o r (number) radius of the circle, ellipse or rounded corner on the rect\n\t     o rx (number) horisontal radius of the ellipse\n\t     o ry (number) vertical radius of the ellipse\n\t     o src (string) image URL, only works for @Element.image element\n\t     o stroke (string) stroke colour\n\t     o stroke-dasharray (string) [â€œâ€, â€œnoneâ€, â€œ`-`â€, â€œ`.`â€, â€œ`-.`â€, â€œ`-..`â€, â€œ`. `â€, â€œ`- `â€, â€œ`--`â€, â€œ`- .`â€, â€œ`--.`â€, â€œ`--..`â€]\n\t     o stroke-linecap (string) [â€œ`butt`â€, â€œ`square`â€, â€œ`round`â€]\n\t     o stroke-linejoin (string) [â€œ`bevel`â€, â€œ`round`â€, â€œ`miter`â€]\n\t     o stroke-miterlimit (number)\n\t     o stroke-opacity (number)\n\t     o stroke-width (number) stroke width in pixels, default is '1'\n\t     o target (string) used with href\n\t     o text (string) contents of the text element. Use `\\n` for multiline text\n\t     o text-anchor (string) [â€œ`start`â€, â€œ`middle`â€, â€œ`end`â€], default is â€œ`middle`â€\n\t     o title (string) will create tooltip with a given text\n\t     o transform (string) see @Element.transform\n\t     o width (number)\n\t     o x (number)\n\t     o y (number)\n\t     > Gradients\n\t     * Linear gradient format: â€œ`â€¹angleâ€º-â€¹colourâ€º[-â€¹colourâ€º[:â€¹offsetâ€º]]*-â€¹colourâ€º`â€, example: â€œ`90-#fff-#000`â€ â€“ 90Â°\n\t     * gradient from white to black or â€œ`0-#fff-#f00:20-#000`â€ â€“ 0Â° gradient from white via red (at 20%) to black.\n\t     *\n\t     * radial gradient: â€œ`r[(â€¹fxâ€º, â€¹fyâ€º)]â€¹colourâ€º[-â€¹colourâ€º[:â€¹offsetâ€º]]*-â€¹colourâ€º`â€, example: â€œ`r#fff-#000`â€ â€“\n\t     * gradient from white to black or â€œ`r(0.25, 0.75)#fff-#000`â€ â€“ gradient from white to black with focus point\n\t     * at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can only be applied to circles and ellipses.\n\t     > Path String\n\t     # <p>Please refer to <a href=\"http://www.w3.org/TR/SVG/paths.html#PathData\" title=\"Details of a pathâ€™s data attributeâ€™s format are described in the SVG specification.\">SVG documentation regarding path string</a>. RaphaÃ«l fully supports it.</p>\n\t     > Colour Parsing\n\t     # <ul>\n\t     #     <li>Colour name (â€œ<code>red</code>â€, â€œ<code>green</code>â€, â€œ<code>cornflowerblue</code>â€, etc)</li>\n\t     #     <li>#â€¢â€¢â€¢ â€” shortened HTML colour: (â€œ<code>#000</code>â€, â€œ<code>#fc0</code>â€, etc)</li>\n\t     #     <li>#â€¢â€¢â€¢â€¢â€¢â€¢ â€” full length HTML colour: (â€œ<code>#000000</code>â€, â€œ<code>#bd2300</code>â€)</li>\n\t     #     <li>rgb(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” red, green and blue channelsâ€™ values: (â€œ<code>rgb(200,&nbsp;100,&nbsp;0)</code>â€)</li>\n\t     #     <li>rgb(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %: (â€œ<code>rgb(100%,&nbsp;175%,&nbsp;0%)</code>â€)</li>\n\t     #     <li>rgba(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” red, green and blue channelsâ€™ values: (â€œ<code>rgba(200,&nbsp;100,&nbsp;0, .5)</code>â€)</li>\n\t     #     <li>rgba(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %: (â€œ<code>rgba(100%,&nbsp;175%,&nbsp;0%, 50%)</code>â€)</li>\n\t     #     <li>hsb(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” hue, saturation and brightness values: (â€œ<code>hsb(0.5,&nbsp;0.25,&nbsp;1)</code>â€)</li>\n\t     #     <li>hsb(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %</li>\n\t     #     <li>hsba(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” same as above, but with opacity</li>\n\t     #     <li>hsl(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” almost the same as hsb, see <a href=\"http://en.wikipedia.org/wiki/HSL_and_HSV\" title=\"HSL and HSV - Wikipedia, the free encyclopedia\">Wikipedia page</a></li>\n\t     #     <li>hsl(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %</li>\n\t     #     <li>hsla(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” same as above, but with opacity</li>\n\t     #     <li>Optionally for hsb and hsl you could specify hue as a degree: â€œ<code>hsl(240deg,&nbsp;1,&nbsp;.5)</code>â€ or, if you want to go fancy, â€œ<code>hsl(240Â°,&nbsp;1,&nbsp;.5)</code>â€</li>\n\t     # </ul>\n\t    \\*/\n\t    elproto.attr = function (name, value) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (name == null) {\n\t            var res = {};\n\t            for (var a in this.attrs) if (this.attrs[has](a)) {\n\t                res[a] = this.attrs[a];\n\t            }\n\t            res.gradient && res.fill == \"none\" && (res.fill = res.gradient) && delete res.gradient;\n\t            res.transform = this._.transform;\n\t            return res;\n\t        }\n\t        if (value == null && R.is(name, \"string\")) {\n\t            if (name == \"fill\" && this.attrs.fill == \"none\" && this.attrs.gradient) {\n\t                return this.attrs.gradient;\n\t            }\n\t            if (name == \"transform\") {\n\t                return this._.transform;\n\t            }\n\t            var names = name.split(separator),\n\t                out = {};\n\t            for (var i = 0, ii = names.length; i < ii; i++) {\n\t                name = names[i];\n\t                if (name in this.attrs) {\n\t                    out[name] = this.attrs[name];\n\t                } else if (R.is(this.paper.customAttributes[name], \"function\")) {\n\t                    out[name] = this.paper.customAttributes[name].def;\n\t                } else {\n\t                    out[name] = R._availableAttrs[name];\n\t                }\n\t            }\n\t            return ii - 1 ? out : out[names[0]];\n\t        }\n\t        if (value == null && R.is(name, \"array\")) {\n\t            out = {};\n\t            for (i = 0, ii = name.length; i < ii; i++) {\n\t                out[name[i]] = this.attr(name[i]);\n\t            }\n\t            return out;\n\t        }\n\t        if (value != null) {\n\t            var params = {};\n\t            params[name] = value;\n\t        } else if (name != null && R.is(name, \"object\")) {\n\t            params = name;\n\t        }\n\t        for (var key in params) {\n\t            eve(\"raphael.attr.\" + key + \".\" + this.id, this, params[key]);\n\t        }\n\t        for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \"function\")) {\n\t            var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\n\t            this.attrs[key] = params[key];\n\t            for (var subkey in par) if (par[has](subkey)) {\n\t                params[subkey] = par[subkey];\n\t            }\n\t        }\n\t        setFillAndStroke(this, params);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.toFront\n\t     [ method ]\n\t     **\n\t     * Moves the element so it is the closest to the viewerâ€™s eyes, on top of other elements.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.toFront = function () {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        var node = getRealNode(this.node);\n\t        node.parentNode.appendChild(node);\n\t        var svg = this.paper;\n\t        svg.top != this && R._tofront(this, svg);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.toBack\n\t     [ method ]\n\t     **\n\t     * Moves the element so it is the furthest from the viewerâ€™s eyes, behind other elements.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.toBack = function () {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        var node = getRealNode(this.node);\n\t        var parentNode = node.parentNode;\n\t        parentNode.insertBefore(node, parentNode.firstChild);\n\t        R._toback(this, this.paper);\n\t        var svg = this.paper;\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.insertAfter\n\t     [ method ]\n\t     **\n\t     * Inserts current object after the given one.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.insertAfter = function (element) {\n\t        if (this.removed || !element) {\n\t            return this;\n\t        }\n\n\t        var node = getRealNode(this.node);\n\t        var afterNode = getRealNode(element.node || element[element.length - 1].node);\n\t        if (afterNode.nextSibling) {\n\t            afterNode.parentNode.insertBefore(node, afterNode.nextSibling);\n\t        } else {\n\t            afterNode.parentNode.appendChild(node);\n\t        }\n\t        R._insertafter(this, element, this.paper);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.insertBefore\n\t     [ method ]\n\t     **\n\t     * Inserts current object before the given one.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.insertBefore = function (element) {\n\t        if (this.removed || !element) {\n\t            return this;\n\t        }\n\n\t        var node = getRealNode(this.node);\n\t        var beforeNode = getRealNode(element.node || element[0].node);\n\t        beforeNode.parentNode.insertBefore(node, beforeNode);\n\t        R._insertbefore(this, element, this.paper);\n\t        return this;\n\t    };\n\t    elproto.blur = function (size) {\n\t        // Experimental. No Safari support. Use it on your own risk.\n\t        var t = this;\n\t        if (+size !== 0) {\n\t            var fltr = $(\"filter\"),\n\t                blur = $(\"feGaussianBlur\");\n\t            t.attrs.blur = size;\n\t            fltr.id = R.createUUID();\n\t            $(blur, {stdDeviation: +size || 1.5});\n\t            fltr.appendChild(blur);\n\t            t.paper.defs.appendChild(fltr);\n\t            t._blur = fltr;\n\t            $(t.node, {filter: \"url(#\" + fltr.id + \")\"});\n\t        } else {\n\t            if (t._blur) {\n\t                t._blur.parentNode.removeChild(t._blur);\n\t                delete t._blur;\n\t                delete t.attrs.blur;\n\t            }\n\t            t.node.removeAttribute(\"filter\");\n\t        }\n\t        return t;\n\t    };\n\t    R._engine.circle = function (svg, x, y, r) {\n\t        var el = $(\"circle\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {cx: x, cy: y, r: r, fill: \"none\", stroke: \"#000\"};\n\t        res.type = \"circle\";\n\t        $(el, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.rect = function (svg, x, y, w, h, r) {\n\t        var el = $(\"rect\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {x: x, y: y, width: w, height: h, rx: r || 0, ry: r || 0, fill: \"none\", stroke: \"#000\"};\n\t        res.type = \"rect\";\n\t        $(el, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.ellipse = function (svg, x, y, rx, ry) {\n\t        var el = $(\"ellipse\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: \"none\", stroke: \"#000\"};\n\t        res.type = \"ellipse\";\n\t        $(el, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.image = function (svg, src, x, y, w, h) {\n\t        var el = $(\"image\");\n\t        $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: \"none\"});\n\t        el.setAttributeNS(xlink, \"href\", src);\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {x: x, y: y, width: w, height: h, src: src};\n\t        res.type = \"image\";\n\t        return res;\n\t    };\n\t    R._engine.text = function (svg, x, y, text) {\n\t        var el = $(\"text\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {\n\t            x: x,\n\t            y: y,\n\t            \"text-anchor\": \"middle\",\n\t            text: text,\n\t            \"font-family\": R._availableAttrs[\"font-family\"],\n\t            \"font-size\": R._availableAttrs[\"font-size\"],\n\t            stroke: \"none\",\n\t            fill: \"#000\"\n\t        };\n\t        res.type = \"text\";\n\t        setFillAndStroke(res, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.setSize = function (width, height) {\n\t        this.width = width || this.width;\n\t        this.height = height || this.height;\n\t        this.canvas.setAttribute(\"width\", this.width);\n\t        this.canvas.setAttribute(\"height\", this.height);\n\t        if (this._viewBox) {\n\t            this.setViewBox.apply(this, this._viewBox);\n\t        }\n\t        return this;\n\t    };\n\t    R._engine.create = function () {\n\t        var con = R._getContainer.apply(0, arguments),\n\t            container = con && con.container,\n\t            x = con.x,\n\t            y = con.y,\n\t            width = con.width,\n\t            height = con.height;\n\t        if (!container) {\n\t            throw new Error(\"SVG container not found.\");\n\t        }\n\t        var cnvs = $(\"svg\"),\n\t            css = \"overflow:hidden;\",\n\t            isFloating;\n\t        x = x || 0;\n\t        y = y || 0;\n\t        width = width || 512;\n\t        height = height || 342;\n\t        $(cnvs, {\n\t            height: height,\n\t            version: 1.1,\n\t            width: width,\n\t            xmlns: \"http://www.w3.org/2000/svg\",\n\t            \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\"\n\t        });\n\t        if (container == 1) {\n\t            cnvs.style.cssText = css + \"position:absolute;left:\" + x + \"px;top:\" + y + \"px\";\n\t            R._g.doc.body.appendChild(cnvs);\n\t            isFloating = 1;\n\t        } else {\n\t            cnvs.style.cssText = css + \"position:relative\";\n\t            if (container.firstChild) {\n\t                container.insertBefore(cnvs, container.firstChild);\n\t            } else {\n\t                container.appendChild(cnvs);\n\t            }\n\t        }\n\t        container = new R._Paper;\n\t        container.width = width;\n\t        container.height = height;\n\t        container.canvas = cnvs;\n\t        container.clear();\n\t        container._left = container._top = 0;\n\t        isFloating && (container.renderfix = function () {});\n\t        container.renderfix();\n\t        return container;\n\t    };\n\t    R._engine.setViewBox = function (x, y, w, h, fit) {\n\t        eve(\"raphael.setViewBox\", this, this._viewBox, [x, y, w, h, fit]);\n\t        var paperSize = this.getSize(),\n\t            size = mmax(w / paperSize.width, h / paperSize.height),\n\t            top = this.top,\n\t            aspectRatio = fit ? \"xMidYMid meet\" : \"xMinYMin\",\n\t            vb,\n\t            sw;\n\t        if (x == null) {\n\t            if (this._vbSize) {\n\t                size = 1;\n\t            }\n\t            delete this._vbSize;\n\t            vb = \"0 0 \" + this.width + S + this.height;\n\t        } else {\n\t            this._vbSize = size;\n\t            vb = x + S + y + S + w + S + h;\n\t        }\n\t        $(this.canvas, {\n\t            viewBox: vb,\n\t            preserveAspectRatio: aspectRatio\n\t        });\n\t        while (size && top) {\n\t            sw = \"stroke-width\" in top.attrs ? top.attrs[\"stroke-width\"] : 1;\n\t            top.attr({\"stroke-width\": sw});\n\t            top._.dirty = 1;\n\t            top._.dirtyT = 1;\n\t            top = top.prev;\n\t        }\n\t        this._viewBox = [x, y, w, h, !!fit];\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Paper.renderfix\n\t     [ method ]\n\t     **\n\t     * Fixes the issue of Firefox and IE9 regarding subpixel rendering. If paper is dependent\n\t     * on other elements after reflow it could shift half pixel which cause for lines to lost their crispness.\n\t     * This method fixes the issue.\n\t     **\n\t       Special thanks to Mariusz Nowak (http://www.medikoo.com/) for this method.\n\t    \\*/\n\t    R.prototype.renderfix = function () {\n\t        var cnvs = this.canvas,\n\t            s = cnvs.style,\n\t            pos;\n\t        try {\n\t            pos = cnvs.getScreenCTM() || cnvs.createSVGMatrix();\n\t        } catch (e) {\n\t            pos = cnvs.createSVGMatrix();\n\t        }\n\t        var left = -pos.e % 1,\n\t            top = -pos.f % 1;\n\t        if (left || top) {\n\t            if (left) {\n\t                this._left = (this._left + left) % 1;\n\t                s.left = this._left + \"px\";\n\t            }\n\t            if (top) {\n\t                this._top = (this._top + top) % 1;\n\t                s.top = this._top + \"px\";\n\t            }\n\t        }\n\t    };\n\t    /*\\\n\t     * Paper.clear\n\t     [ method ]\n\t     **\n\t     * Clears the paper, i.e. removes all the elements.\n\t    \\*/\n\t    R.prototype.clear = function () {\n\t        R.eve(\"raphael.clear\", this);\n\t        var c = this.canvas;\n\t        while (c.firstChild) {\n\t            c.removeChild(c.firstChild);\n\t        }\n\t        this.bottom = this.top = null;\n\t        (this.desc = $(\"desc\")).appendChild(R._g.doc.createTextNode(\"Created with Rapha\\xebl \" + R.version));\n\t        c.appendChild(this.desc);\n\t        c.appendChild(this.defs = $(\"defs\"));\n\t    };\n\t    /*\\\n\t     * Paper.remove\n\t     [ method ]\n\t     **\n\t     * Removes the paper from the DOM.\n\t    \\*/\n\t    R.prototype.remove = function () {\n\t        eve(\"raphael.remove\", this);\n\t        this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t    };\n\t    var setproto = R.st;\n\t    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\n\t        setproto[method] = (function (methodname) {\n\t            return function () {\n\t                var arg = arguments;\n\t                return this.forEach(function (el) {\n\t                    el[methodname].apply(el, arg);\n\t                });\n\t            };\n\t        })(method);\n\t    }\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) {\n\t    if (R && !R.vml) {\n\t        return;\n\t    }\n\n\t    var has = \"hasOwnProperty\",\n\t        Str = String,\n\t        toFloat = parseFloat,\n\t        math = Math,\n\t        round = math.round,\n\t        mmax = math.max,\n\t        mmin = math.min,\n\t        abs = math.abs,\n\t        fillString = \"fill\",\n\t        separator = /[, ]+/,\n\t        eve = R.eve,\n\t        ms = \" progid:DXImageTransform.Microsoft\",\n\t        S = \" \",\n\t        E = \"\",\n\t        map = {M: \"m\", L: \"l\", C: \"c\", Z: \"x\", m: \"t\", l: \"r\", c: \"v\", z: \"x\"},\n\t        bites = /([clmz]),?([^clmz]*)/gi,\n\t        blurregexp = / progid:\\S+Blur\\([^\\)]+\\)/g,\n\t        val = /-?[^,\\s-]+/g,\n\t        cssDot = \"position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)\",\n\t        zoom = 21600,\n\t        pathTypes = {path: 1, rect: 1, image: 1},\n\t        ovalTypes = {circle: 1, ellipse: 1},\n\t        path2vml = function (path) {\n\t            var total =  /[ahqstv]/ig,\n\t                command = R._pathToAbsolute;\n\t            Str(path).match(total) && (command = R._path2curve);\n\t            total = /[clmz]/g;\n\t            if (command == R._pathToAbsolute && !Str(path).match(total)) {\n\t                var res = Str(path).replace(bites, function (all, command, args) {\n\t                    var vals = [],\n\t                        isMove = command.toLowerCase() == \"m\",\n\t                        res = map[command];\n\t                    args.replace(val, function (value) {\n\t                        if (isMove && vals.length == 2) {\n\t                            res += vals + map[command == \"m\" ? \"l\" : \"L\"];\n\t                            vals = [];\n\t                        }\n\t                        vals.push(round(value * zoom));\n\t                    });\n\t                    return res + vals;\n\t                });\n\t                return res;\n\t            }\n\t            var pa = command(path), p, r;\n\t            res = [];\n\t            for (var i = 0, ii = pa.length; i < ii; i++) {\n\t                p = pa[i];\n\t                r = pa[i][0].toLowerCase();\n\t                r == \"z\" && (r = \"x\");\n\t                for (var j = 1, jj = p.length; j < jj; j++) {\n\t                    r += round(p[j] * zoom) + (j != jj - 1 ? \",\" : E);\n\t                }\n\t                res.push(r);\n\t            }\n\t            return res.join(S);\n\t        },\n\t        compensation = function (deg, dx, dy) {\n\t            var m = R.matrix();\n\t            m.rotate(-deg, .5, .5);\n\t            return {\n\t                dx: m.x(dx, dy),\n\t                dy: m.y(dx, dy)\n\t            };\n\t        },\n\t        setCoords = function (p, sx, sy, dx, dy, deg) {\n\t            var _ = p._,\n\t                m = p.matrix,\n\t                fillpos = _.fillpos,\n\t                o = p.node,\n\t                s = o.style,\n\t                y = 1,\n\t                flip = \"\",\n\t                dxdy,\n\t                kx = zoom / sx,\n\t                ky = zoom / sy;\n\t            s.visibility = \"hidden\";\n\t            if (!sx || !sy) {\n\t                return;\n\t            }\n\t            o.coordsize = abs(kx) + S + abs(ky);\n\t            s.rotation = deg * (sx * sy < 0 ? -1 : 1);\n\t            if (deg) {\n\t                var c = compensation(deg, dx, dy);\n\t                dx = c.dx;\n\t                dy = c.dy;\n\t            }\n\t            sx < 0 && (flip += \"x\");\n\t            sy < 0 && (flip += \" y\") && (y = -1);\n\t            s.flip = flip;\n\t            o.coordorigin = (dx * -kx) + S + (dy * -ky);\n\t            if (fillpos || _.fillsize) {\n\t                var fill = o.getElementsByTagName(fillString);\n\t                fill = fill && fill[0];\n\t                o.removeChild(fill);\n\t                if (fillpos) {\n\t                    c = compensation(deg, m.x(fillpos[0], fillpos[1]), m.y(fillpos[0], fillpos[1]));\n\t                    fill.position = c.dx * y + S + c.dy * y;\n\t                }\n\t                if (_.fillsize) {\n\t                    fill.size = _.fillsize[0] * abs(sx) + S + _.fillsize[1] * abs(sy);\n\t                }\n\t                o.appendChild(fill);\n\t            }\n\t            s.visibility = \"visible\";\n\t        };\n\t    R.toString = function () {\n\t        return  \"Your browser doesn\\u2019t support SVG. Falling down to VML.\\nYou are running Rapha\\xebl \" + this.version;\n\t    };\n\t    var addArrow = function (o, value, isEnd) {\n\t        var values = Str(value).toLowerCase().split(\"-\"),\n\t            se = isEnd ? \"end\" : \"start\",\n\t            i = values.length,\n\t            type = \"classic\",\n\t            w = \"medium\",\n\t            h = \"medium\";\n\t        while (i--) {\n\t            switch (values[i]) {\n\t                case \"block\":\n\t                case \"classic\":\n\t                case \"oval\":\n\t                case \"diamond\":\n\t                case \"open\":\n\t                case \"none\":\n\t                    type = values[i];\n\t                    break;\n\t                case \"wide\":\n\t                case \"narrow\": h = values[i]; break;\n\t                case \"long\":\n\t                case \"short\": w = values[i]; break;\n\t            }\n\t        }\n\t        var stroke = o.node.getElementsByTagName(\"stroke\")[0];\n\t        stroke[se + \"arrow\"] = type;\n\t        stroke[se + \"arrowlength\"] = w;\n\t        stroke[se + \"arrowwidth\"] = h;\n\t    },\n\t    setFillAndStroke = function (o, params) {\n\t        // o.paper.canvas.style.display = \"none\";\n\t        o.attrs = o.attrs || {};\n\t        var node = o.node,\n\t            a = o.attrs,\n\t            s = node.style,\n\t            xy,\n\t            newpath = pathTypes[o.type] && (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.cx != a.cx || params.cy != a.cy || params.rx != a.rx || params.ry != a.ry || params.r != a.r),\n\t            isOval = ovalTypes[o.type] && (a.cx != params.cx || a.cy != params.cy || a.r != params.r || a.rx != params.rx || a.ry != params.ry),\n\t            res = o;\n\n\n\t        for (var par in params) if (params[has](par)) {\n\t            a[par] = params[par];\n\t        }\n\t        if (newpath) {\n\t            a.path = R._getPath[o.type](o);\n\t            o._.dirty = 1;\n\t        }\n\t        params.href && (node.href = params.href);\n\t        params.title && (node.title = params.title);\n\t        params.target && (node.target = params.target);\n\t        params.cursor && (s.cursor = params.cursor);\n\t        \"blur\" in params && o.blur(params.blur);\n\t        if (params.path && o.type == \"path\" || newpath) {\n\t            node.path = path2vml(~Str(a.path).toLowerCase().indexOf(\"r\") ? R._pathToAbsolute(a.path) : a.path);\n\t            o._.dirty = 1;\n\t            if (o.type == \"image\") {\n\t                o._.fillpos = [a.x, a.y];\n\t                o._.fillsize = [a.width, a.height];\n\t                setCoords(o, 1, 1, 0, 0, 0);\n\t            }\n\t        }\n\t        \"transform\" in params && o.transform(params.transform);\n\t        if (isOval) {\n\t            var cx = +a.cx,\n\t                cy = +a.cy,\n\t                rx = +a.rx || +a.r || 0,\n\t                ry = +a.ry || +a.r || 0;\n\t            node.path = R.format(\"ar{0},{1},{2},{3},{4},{1},{4},{1}x\", round((cx - rx) * zoom), round((cy - ry) * zoom), round((cx + rx) * zoom), round((cy + ry) * zoom), round(cx * zoom));\n\t            o._.dirty = 1;\n\t        }\n\t        if (\"clip-rect\" in params) {\n\t            var rect = Str(params[\"clip-rect\"]).split(separator);\n\t            if (rect.length == 4) {\n\t                rect[2] = +rect[2] + (+rect[0]);\n\t                rect[3] = +rect[3] + (+rect[1]);\n\t                var div = node.clipRect || R._g.doc.createElement(\"div\"),\n\t                    dstyle = div.style;\n\t                dstyle.clip = R.format(\"rect({1}px {2}px {3}px {0}px)\", rect);\n\t                if (!node.clipRect) {\n\t                    dstyle.position = \"absolute\";\n\t                    dstyle.top = 0;\n\t                    dstyle.left = 0;\n\t                    dstyle.width = o.paper.width + \"px\";\n\t                    dstyle.height = o.paper.height + \"px\";\n\t                    node.parentNode.insertBefore(div, node);\n\t                    div.appendChild(node);\n\t                    node.clipRect = div;\n\t                }\n\t            }\n\t            if (!params[\"clip-rect\"]) {\n\t                node.clipRect && (node.clipRect.style.clip = \"auto\");\n\t            }\n\t        }\n\t        if (o.textpath) {\n\t            var textpathStyle = o.textpath.style;\n\t            params.font && (textpathStyle.font = params.font);\n\t            params[\"font-family\"] && (textpathStyle.fontFamily = '\"' + params[\"font-family\"].split(\",\")[0].replace(/^['\"]+|['\"]+$/g, E) + '\"');\n\t            params[\"font-size\"] && (textpathStyle.fontSize = params[\"font-size\"]);\n\t            params[\"font-weight\"] && (textpathStyle.fontWeight = params[\"font-weight\"]);\n\t            params[\"font-style\"] && (textpathStyle.fontStyle = params[\"font-style\"]);\n\t        }\n\t        if (\"arrow-start\" in params) {\n\t            addArrow(res, params[\"arrow-start\"]);\n\t        }\n\t        if (\"arrow-end\" in params) {\n\t            addArrow(res, params[\"arrow-end\"], 1);\n\t        }\n\t        if (params.opacity != null ||\n\t            params.fill != null ||\n\t            params.src != null ||\n\t            params.stroke != null ||\n\t            params[\"stroke-width\"] != null ||\n\t            params[\"stroke-opacity\"] != null ||\n\t            params[\"fill-opacity\"] != null ||\n\t            params[\"stroke-dasharray\"] != null ||\n\t            params[\"stroke-miterlimit\"] != null ||\n\t            params[\"stroke-linejoin\"] != null ||\n\t            params[\"stroke-linecap\"] != null) {\n\t            var fill = node.getElementsByTagName(fillString),\n\t                newfill = false;\n\t            fill = fill && fill[0];\n\t            !fill && (newfill = fill = createNode(fillString));\n\t            if (o.type == \"image\" && params.src) {\n\t                fill.src = params.src;\n\t            }\n\t            params.fill && (fill.on = true);\n\t            if (fill.on == null || params.fill == \"none\" || params.fill === null) {\n\t                fill.on = false;\n\t            }\n\t            if (fill.on && params.fill) {\n\t                var isURL = Str(params.fill).match(R._ISURL);\n\t                if (isURL) {\n\t                    fill.parentNode == node && node.removeChild(fill);\n\t                    fill.rotate = true;\n\t                    fill.src = isURL[1];\n\t                    fill.type = \"tile\";\n\t                    var bbox = o.getBBox(1);\n\t                    fill.position = bbox.x + S + bbox.y;\n\t                    o._.fillpos = [bbox.x, bbox.y];\n\n\t                    R._preload(isURL[1], function () {\n\t                        o._.fillsize = [this.offsetWidth, this.offsetHeight];\n\t                    });\n\t                } else {\n\t                    fill.color = R.getRGB(params.fill).hex;\n\t                    fill.src = E;\n\t                    fill.type = \"solid\";\n\t                    if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != \"r\") && addGradientFill(res, params.fill, fill)) {\n\t                        a.fill = \"none\";\n\t                        a.gradient = params.fill;\n\t                        fill.rotate = false;\n\t                    }\n\t                }\n\t            }\n\t            if (\"fill-opacity\" in params || \"opacity\" in params) {\n\t                var opacity = ((+a[\"fill-opacity\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);\n\t                opacity = mmin(mmax(opacity, 0), 1);\n\t                fill.opacity = opacity;\n\t                if (fill.src) {\n\t                    fill.color = \"none\";\n\t                }\n\t            }\n\t            node.appendChild(fill);\n\t            var stroke = (node.getElementsByTagName(\"stroke\") && node.getElementsByTagName(\"stroke\")[0]),\n\t            newstroke = false;\n\t            !stroke && (newstroke = stroke = createNode(\"stroke\"));\n\t            if ((params.stroke && params.stroke != \"none\") ||\n\t                params[\"stroke-width\"] ||\n\t                params[\"stroke-opacity\"] != null ||\n\t                params[\"stroke-dasharray\"] ||\n\t                params[\"stroke-miterlimit\"] ||\n\t                params[\"stroke-linejoin\"] ||\n\t                params[\"stroke-linecap\"]) {\n\t                stroke.on = true;\n\t            }\n\t            (params.stroke == \"none\" || params.stroke === null || stroke.on == null || params.stroke == 0 || params[\"stroke-width\"] == 0) && (stroke.on = false);\n\t            var strokeColor = R.getRGB(params.stroke);\n\t            stroke.on && params.stroke && (stroke.color = strokeColor.hex);\n\t            opacity = ((+a[\"stroke-opacity\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);\n\t            var width = (toFloat(params[\"stroke-width\"]) || 1) * .75;\n\t            opacity = mmin(mmax(opacity, 0), 1);\n\t            params[\"stroke-width\"] == null && (width = a[\"stroke-width\"]);\n\t            params[\"stroke-width\"] && (stroke.weight = width);\n\t            width && width < 1 && (opacity *= width) && (stroke.weight = 1);\n\t            stroke.opacity = opacity;\n\n\t            params[\"stroke-linejoin\"] && (stroke.joinstyle = params[\"stroke-linejoin\"] || \"miter\");\n\t            stroke.miterlimit = params[\"stroke-miterlimit\"] || 8;\n\t            params[\"stroke-linecap\"] && (stroke.endcap = params[\"stroke-linecap\"] == \"butt\" ? \"flat\" : params[\"stroke-linecap\"] == \"square\" ? \"square\" : \"round\");\n\t            if (\"stroke-dasharray\" in params) {\n\t                var dasharray = {\n\t                    \"-\": \"shortdash\",\n\t                    \".\": \"shortdot\",\n\t                    \"-.\": \"shortdashdot\",\n\t                    \"-..\": \"shortdashdotdot\",\n\t                    \". \": \"dot\",\n\t                    \"- \": \"dash\",\n\t                    \"--\": \"longdash\",\n\t                    \"- .\": \"dashdot\",\n\t                    \"--.\": \"longdashdot\",\n\t                    \"--..\": \"longdashdotdot\"\n\t                };\n\t                stroke.dashstyle = dasharray[has](params[\"stroke-dasharray\"]) ? dasharray[params[\"stroke-dasharray\"]] : E;\n\t            }\n\t            newstroke && node.appendChild(stroke);\n\t        }\n\t        if (res.type == \"text\") {\n\t            res.paper.canvas.style.display = E;\n\t            var span = res.paper.span,\n\t                m = 100,\n\t                fontSize = a.font && a.font.match(/\\d+(?:\\.\\d*)?(?=px)/);\n\t            s = span.style;\n\t            a.font && (s.font = a.font);\n\t            a[\"font-family\"] && (s.fontFamily = a[\"font-family\"]);\n\t            a[\"font-weight\"] && (s.fontWeight = a[\"font-weight\"]);\n\t            a[\"font-style\"] && (s.fontStyle = a[\"font-style\"]);\n\t            fontSize = toFloat(a[\"font-size\"] || fontSize && fontSize[0]) || 10;\n\t            s.fontSize = fontSize * m + \"px\";\n\t            res.textpath.string && (span.innerHTML = Str(res.textpath.string).replace(/</g, \"&#60;\").replace(/&/g, \"&#38;\").replace(/\\n/g, \"<br>\"));\n\t            var brect = span.getBoundingClientRect();\n\t            res.W = a.w = (brect.right - brect.left) / m;\n\t            res.H = a.h = (brect.bottom - brect.top) / m;\n\t            // res.paper.canvas.style.display = \"none\";\n\t            res.X = a.x;\n\t            res.Y = a.y + res.H / 2;\n\n\t            (\"x\" in params || \"y\" in params) && (res.path.v = R.format(\"m{0},{1}l{2},{1}\", round(a.x * zoom), round(a.y * zoom), round(a.x * zoom) + 1));\n\t            var dirtyattrs = [\"x\", \"y\", \"text\", \"font\", \"font-family\", \"font-weight\", \"font-style\", \"font-size\"];\n\t            for (var d = 0, dd = dirtyattrs.length; d < dd; d++) if (dirtyattrs[d] in params) {\n\t                res._.dirty = 1;\n\t                break;\n\t            }\n\n\t            // text-anchor emulation\n\t            switch (a[\"text-anchor\"]) {\n\t                case \"start\":\n\t                    res.textpath.style[\"v-text-align\"] = \"left\";\n\t                    res.bbx = res.W / 2;\n\t                break;\n\t                case \"end\":\n\t                    res.textpath.style[\"v-text-align\"] = \"right\";\n\t                    res.bbx = -res.W / 2;\n\t                break;\n\t                default:\n\t                    res.textpath.style[\"v-text-align\"] = \"center\";\n\t                    res.bbx = 0;\n\t                break;\n\t            }\n\t            res.textpath.style[\"v-text-kern\"] = true;\n\t        }\n\t        // res.paper.canvas.style.display = E;\n\t    },\n\t    addGradientFill = function (o, gradient, fill) {\n\t        o.attrs = o.attrs || {};\n\t        var attrs = o.attrs,\n\t            pow = Math.pow,\n\t            opacity,\n\t            oindex,\n\t            type = \"linear\",\n\t            fxfy = \".5 .5\";\n\t        o.attrs.gradient = gradient;\n\t        gradient = Str(gradient).replace(R._radial_gradient, function (all, fx, fy) {\n\t            type = \"radial\";\n\t            if (fx && fy) {\n\t                fx = toFloat(fx);\n\t                fy = toFloat(fy);\n\t                pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);\n\t                fxfy = fx + S + fy;\n\t            }\n\t            return E;\n\t        });\n\t        gradient = gradient.split(/\\s*\\-\\s*/);\n\t        if (type == \"linear\") {\n\t            var angle = gradient.shift();\n\t            angle = -toFloat(angle);\n\t            if (isNaN(angle)) {\n\t                return null;\n\t            }\n\t        }\n\t        var dots = R._parseDots(gradient);\n\t        if (!dots) {\n\t            return null;\n\t        }\n\t        o = o.shape || o.node;\n\t        if (dots.length) {\n\t            o.removeChild(fill);\n\t            fill.on = true;\n\t            fill.method = \"none\";\n\t            fill.color = dots[0].color;\n\t            fill.color2 = dots[dots.length - 1].color;\n\t            var clrs = [];\n\t            for (var i = 0, ii = dots.length; i < ii; i++) {\n\t                dots[i].offset && clrs.push(dots[i].offset + S + dots[i].color);\n\t            }\n\t            fill.colors = clrs.length ? clrs.join() : \"0% \" + fill.color;\n\t            if (type == \"radial\") {\n\t                fill.type = \"gradientTitle\";\n\t                fill.focus = \"100%\";\n\t                fill.focussize = \"0 0\";\n\t                fill.focusposition = fxfy;\n\t                fill.angle = 0;\n\t            } else {\n\t                // fill.rotate= true;\n\t                fill.type = \"gradient\";\n\t                fill.angle = (270 - angle) % 360;\n\t            }\n\t            o.appendChild(fill);\n\t        }\n\t        return 1;\n\t    },\n\t    Element = function (node, vml) {\n\t        this[0] = this.node = node;\n\t        node.raphael = true;\n\t        this.id = R._oid++;\n\t        node.raphaelid = this.id;\n\t        this.X = 0;\n\t        this.Y = 0;\n\t        this.attrs = {};\n\t        this.paper = vml;\n\t        this.matrix = R.matrix();\n\t        this._ = {\n\t            transform: [],\n\t            sx: 1,\n\t            sy: 1,\n\t            dx: 0,\n\t            dy: 0,\n\t            deg: 0,\n\t            dirty: 1,\n\t            dirtyT: 1\n\t        };\n\t        !vml.bottom && (vml.bottom = this);\n\t        this.prev = vml.top;\n\t        vml.top && (vml.top.next = this);\n\t        vml.top = this;\n\t        this.next = null;\n\t    };\n\t    var elproto = R.el;\n\n\t    Element.prototype = elproto;\n\t    elproto.constructor = Element;\n\t    elproto.transform = function (tstr) {\n\t        if (tstr == null) {\n\t            return this._.transform;\n\t        }\n\t        var vbs = this.paper._viewBoxShift,\n\t            vbt = vbs ? \"s\" + [vbs.scale, vbs.scale] + \"-1-1t\" + [vbs.dx, vbs.dy] : E,\n\t            oldt;\n\t        if (vbs) {\n\t            oldt = tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, this._.transform || E);\n\t        }\n\t        R._extractTransform(this, vbt + tstr);\n\t        var matrix = this.matrix.clone(),\n\t            skew = this.skew,\n\t            o = this.node,\n\t            split,\n\t            isGrad = ~Str(this.attrs.fill).indexOf(\"-\"),\n\t            isPatt = !Str(this.attrs.fill).indexOf(\"url(\");\n\t        matrix.translate(1, 1);\n\t        if (isPatt || isGrad || this.type == \"image\") {\n\t            skew.matrix = \"1 0 0 1\";\n\t            skew.offset = \"0 0\";\n\t            split = matrix.split();\n\t            if ((isGrad && split.noRotation) || !split.isSimple) {\n\t                o.style.filter = matrix.toFilter();\n\t                var bb = this.getBBox(),\n\t                    bbt = this.getBBox(1),\n\t                    dx = bb.x - bbt.x,\n\t                    dy = bb.y - bbt.y;\n\t                o.coordorigin = (dx * -zoom) + S + (dy * -zoom);\n\t                setCoords(this, 1, 1, dx, dy, 0);\n\t            } else {\n\t                o.style.filter = E;\n\t                setCoords(this, split.scalex, split.scaley, split.dx, split.dy, split.rotate);\n\t            }\n\t        } else {\n\t            o.style.filter = E;\n\t            skew.matrix = Str(matrix);\n\t            skew.offset = matrix.offset();\n\t        }\n\t        if (oldt !== null) { // empty string value is true as well\n\t            this._.transform = oldt;\n\t            R._extractTransform(this, oldt);\n\t        }\n\t        return this;\n\t    };\n\t    elproto.rotate = function (deg, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (deg == null) {\n\t            return;\n\t        }\n\t        deg = Str(deg).split(separator);\n\t        if (deg.length - 1) {\n\t            cx = toFloat(deg[1]);\n\t            cy = toFloat(deg[2]);\n\t        }\n\t        deg = toFloat(deg[0]);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t            cx = bbox.x + bbox.width / 2;\n\t            cy = bbox.y + bbox.height / 2;\n\t        }\n\t        this._.dirtyT = 1;\n\t        this.transform(this._.transform.concat([[\"r\", deg, cx, cy]]));\n\t        return this;\n\t    };\n\t    elproto.translate = function (dx, dy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        dx = Str(dx).split(separator);\n\t        if (dx.length - 1) {\n\t            dy = toFloat(dx[1]);\n\t        }\n\t        dx = toFloat(dx[0]) || 0;\n\t        dy = +dy || 0;\n\t        if (this._.bbox) {\n\t            this._.bbox.x += dx;\n\t            this._.bbox.y += dy;\n\t        }\n\t        this.transform(this._.transform.concat([[\"t\", dx, dy]]));\n\t        return this;\n\t    };\n\t    elproto.scale = function (sx, sy, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        sx = Str(sx).split(separator);\n\t        if (sx.length - 1) {\n\t            sy = toFloat(sx[1]);\n\t            cx = toFloat(sx[2]);\n\t            cy = toFloat(sx[3]);\n\t            isNaN(cx) && (cx = null);\n\t            isNaN(cy) && (cy = null);\n\t        }\n\t        sx = toFloat(sx[0]);\n\t        (sy == null) && (sy = sx);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t        }\n\t        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\n\t        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\n\n\t        this.transform(this._.transform.concat([[\"s\", sx, sy, cx, cy]]));\n\t        this._.dirtyT = 1;\n\t        return this;\n\t    };\n\t    elproto.hide = function () {\n\t        !this.removed && (this.node.style.display = \"none\");\n\t        return this;\n\t    };\n\t    elproto.show = function () {\n\t        !this.removed && (this.node.style.display = E);\n\t        return this;\n\t    };\n\t    // Needed to fix the vml setViewBox issues\n\t    elproto.auxGetBBox = R.el.getBBox;\n\t    elproto.getBBox = function(){\n\t      var b = this.auxGetBBox();\n\t      if (this.paper && this.paper._viewBoxShift)\n\t      {\n\t        var c = {};\n\t        var z = 1/this.paper._viewBoxShift.scale;\n\t        c.x = b.x - this.paper._viewBoxShift.dx;\n\t        c.x *= z;\n\t        c.y = b.y - this.paper._viewBoxShift.dy;\n\t        c.y *= z;\n\t        c.width  = b.width  * z;\n\t        c.height = b.height * z;\n\t        c.x2 = c.x + c.width;\n\t        c.y2 = c.y + c.height;\n\t        return c;\n\t      }\n\t      return b;\n\t    };\n\t    elproto._getBBox = function () {\n\t        if (this.removed) {\n\t            return {};\n\t        }\n\t        return {\n\t            x: this.X + (this.bbx || 0) - this.W / 2,\n\t            y: this.Y - this.H,\n\t            width: this.W,\n\t            height: this.H\n\t        };\n\t    };\n\t    elproto.remove = function () {\n\t        if (this.removed || !this.node.parentNode) {\n\t            return;\n\t        }\n\t        this.paper.__set__ && this.paper.__set__.exclude(this);\n\t        R.eve.unbind(\"raphael.*.*.\" + this.id);\n\t        R._tear(this, this.paper);\n\t        this.node.parentNode.removeChild(this.node);\n\t        this.shape && this.shape.parentNode.removeChild(this.shape);\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t        this.removed = true;\n\t    };\n\t    elproto.attr = function (name, value) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (name == null) {\n\t            var res = {};\n\t            for (var a in this.attrs) if (this.attrs[has](a)) {\n\t                res[a] = this.attrs[a];\n\t            }\n\t            res.gradient && res.fill == \"none\" && (res.fill = res.gradient) && delete res.gradient;\n\t            res.transform = this._.transform;\n\t            return res;\n\t        }\n\t        if (value == null && R.is(name, \"string\")) {\n\t            if (name == fillString && this.attrs.fill == \"none\" && this.attrs.gradient) {\n\t                return this.attrs.gradient;\n\t            }\n\t            var names = name.split(separator),\n\t                out = {};\n\t            for (var i = 0, ii = names.length; i < ii; i++) {\n\t                name = names[i];\n\t                if (name in this.attrs) {\n\t                    out[name] = this.attrs[name];\n\t                } else if (R.is(this.paper.customAttributes[name], \"function\")) {\n\t                    out[name] = this.paper.customAttributes[name].def;\n\t                } else {\n\t                    out[name] = R._availableAttrs[name];\n\t                }\n\t            }\n\t            return ii - 1 ? out : out[names[0]];\n\t        }\n\t        if (this.attrs && value == null && R.is(name, \"array\")) {\n\t            out = {};\n\t            for (i = 0, ii = name.length; i < ii; i++) {\n\t                out[name[i]] = this.attr(name[i]);\n\t            }\n\t            return out;\n\t        }\n\t        var params;\n\t        if (value != null) {\n\t            params = {};\n\t            params[name] = value;\n\t        }\n\t        value == null && R.is(name, \"object\") && (params = name);\n\t        for (var key in params) {\n\t            eve(\"raphael.attr.\" + key + \".\" + this.id, this, params[key]);\n\t        }\n\t        if (params) {\n\t            for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \"function\")) {\n\t                var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\n\t                this.attrs[key] = params[key];\n\t                for (var subkey in par) if (par[has](subkey)) {\n\t                    params[subkey] = par[subkey];\n\t                }\n\t            }\n\t            // this.paper.canvas.style.display = \"none\";\n\t            if (params.text && this.type == \"text\") {\n\t                this.textpath.string = params.text;\n\t            }\n\t            setFillAndStroke(this, params);\n\t            // this.paper.canvas.style.display = E;\n\t        }\n\t        return this;\n\t    };\n\t    elproto.toFront = function () {\n\t        !this.removed && this.node.parentNode.appendChild(this.node);\n\t        this.paper && this.paper.top != this && R._tofront(this, this.paper);\n\t        return this;\n\t    };\n\t    elproto.toBack = function () {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (this.node.parentNode.firstChild != this.node) {\n\t            this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);\n\t            R._toback(this, this.paper);\n\t        }\n\t        return this;\n\t    };\n\t    elproto.insertAfter = function (element) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (element.constructor == R.st.constructor) {\n\t            element = element[element.length - 1];\n\t        }\n\n\t        if (element.node.nextSibling) {\n\t            element.node.parentNode.insertBefore(this.node, element.node.nextSibling);\n\t        } else {\n\t            element.node.parentNode.appendChild(this.node);\n\t        }\n\t        R._insertafter(this, element, this.paper);\n\t        return this;\n\t    };\n\t    elproto.insertBefore = function (element) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (element.constructor == R.st.constructor) {\n\t            element = element[0];\n\t        }\n\t        element.node.parentNode.insertBefore(this.node, element.node);\n\t        R._insertbefore(this, element, this.paper);\n\t        return this;\n\t    };\n\t    elproto.blur = function (size) {\n\t        var s = this.node.runtimeStyle,\n\t            f = s.filter;\n\t        f = f.replace(blurregexp, E);\n\t        if (+size !== 0) {\n\t            this.attrs.blur = size;\n\t            s.filter = f + S + ms + \".Blur(pixelradius=\" + (+size || 1.5) + \")\";\n\t            s.margin = R.format(\"-{0}px 0 0 -{0}px\", round(+size || 1.5));\n\t        } else {\n\t            s.filter = f;\n\t            s.margin = 0;\n\t            delete this.attrs.blur;\n\t        }\n\t        return this;\n\t    };\n\n\t    R._engine.path = function (pathString, vml) {\n\t        var el = createNode(\"shape\");\n\t        el.style.cssText = cssDot;\n\t        el.coordsize = zoom + S + zoom;\n\t        el.coordorigin = vml.coordorigin;\n\t        var p = new Element(el, vml),\n\t            attr = {fill: \"none\", stroke: \"#000\"};\n\t        pathString && (attr.path = pathString);\n\t        p.type = \"path\";\n\t        p.path = [];\n\t        p.Path = E;\n\t        setFillAndStroke(p, attr);\n\t        vml.canvas && vml.canvas.appendChild(el);\n\t        var skew = createNode(\"skew\");\n\t        skew.on = true;\n\t        el.appendChild(skew);\n\t        p.skew = skew;\n\t        p.transform(E);\n\t        return p;\n\t    };\n\t    R._engine.rect = function (vml, x, y, w, h, r) {\n\t        var path = R._rectPath(x, y, w, h, r),\n\t            res = vml.path(path),\n\t            a = res.attrs;\n\t        res.X = a.x = x;\n\t        res.Y = a.y = y;\n\t        res.W = a.width = w;\n\t        res.H = a.height = h;\n\t        a.r = r;\n\t        a.path = path;\n\t        res.type = \"rect\";\n\t        return res;\n\t    };\n\t    R._engine.ellipse = function (vml, x, y, rx, ry) {\n\t        var res = vml.path(),\n\t            a = res.attrs;\n\t        res.X = x - rx;\n\t        res.Y = y - ry;\n\t        res.W = rx * 2;\n\t        res.H = ry * 2;\n\t        res.type = \"ellipse\";\n\t        setFillAndStroke(res, {\n\t            cx: x,\n\t            cy: y,\n\t            rx: rx,\n\t            ry: ry\n\t        });\n\t        return res;\n\t    };\n\t    R._engine.circle = function (vml, x, y, r) {\n\t        var res = vml.path(),\n\t            a = res.attrs;\n\t        res.X = x - r;\n\t        res.Y = y - r;\n\t        res.W = res.H = r * 2;\n\t        res.type = \"circle\";\n\t        setFillAndStroke(res, {\n\t            cx: x,\n\t            cy: y,\n\t            r: r\n\t        });\n\t        return res;\n\t    };\n\t    R._engine.image = function (vml, src, x, y, w, h) {\n\t        var path = R._rectPath(x, y, w, h),\n\t            res = vml.path(path).attr({stroke: \"none\"}),\n\t            a = res.attrs,\n\t            node = res.node,\n\t            fill = node.getElementsByTagName(fillString)[0];\n\t        a.src = src;\n\t        res.X = a.x = x;\n\t        res.Y = a.y = y;\n\t        res.W = a.width = w;\n\t        res.H = a.height = h;\n\t        a.path = path;\n\t        res.type = \"image\";\n\t        fill.parentNode == node && node.removeChild(fill);\n\t        fill.rotate = true;\n\t        fill.src = src;\n\t        fill.type = \"tile\";\n\t        res._.fillpos = [x, y];\n\t        res._.fillsize = [w, h];\n\t        node.appendChild(fill);\n\t        setCoords(res, 1, 1, 0, 0, 0);\n\t        return res;\n\t    };\n\t    R._engine.text = function (vml, x, y, text) {\n\t        var el = createNode(\"shape\"),\n\t            path = createNode(\"path\"),\n\t            o = createNode(\"textpath\");\n\t        x = x || 0;\n\t        y = y || 0;\n\t        text = text || \"\";\n\t        path.v = R.format(\"m{0},{1}l{2},{1}\", round(x * zoom), round(y * zoom), round(x * zoom) + 1);\n\t        path.textpathok = true;\n\t        o.string = Str(text);\n\t        o.on = true;\n\t        el.style.cssText = cssDot;\n\t        el.coordsize = zoom + S + zoom;\n\t        el.coordorigin = \"0 0\";\n\t        var p = new Element(el, vml),\n\t            attr = {\n\t                fill: \"#000\",\n\t                stroke: \"none\",\n\t                font: R._availableAttrs.font,\n\t                text: text\n\t            };\n\t        p.shape = el;\n\t        p.path = path;\n\t        p.textpath = o;\n\t        p.type = \"text\";\n\t        p.attrs.text = Str(text);\n\t        p.attrs.x = x;\n\t        p.attrs.y = y;\n\t        p.attrs.w = 1;\n\t        p.attrs.h = 1;\n\t        setFillAndStroke(p, attr);\n\t        el.appendChild(o);\n\t        el.appendChild(path);\n\t        vml.canvas.appendChild(el);\n\t        var skew = createNode(\"skew\");\n\t        skew.on = true;\n\t        el.appendChild(skew);\n\t        p.skew = skew;\n\t        p.transform(E);\n\t        return p;\n\t    };\n\t    R._engine.setSize = function (width, height) {\n\t        var cs = this.canvas.style;\n\t        this.width = width;\n\t        this.height = height;\n\t        width == +width && (width += \"px\");\n\t        height == +height && (height += \"px\");\n\t        cs.width = width;\n\t        cs.height = height;\n\t        cs.clip = \"rect(0 \" + width + \" \" + height + \" 0)\";\n\t        if (this._viewBox) {\n\t            R._engine.setViewBox.apply(this, this._viewBox);\n\t        }\n\t        return this;\n\t    };\n\t    R._engine.setViewBox = function (x, y, w, h, fit) {\n\t        R.eve(\"raphael.setViewBox\", this, this._viewBox, [x, y, w, h, fit]);\n\t        var paperSize = this.getSize(),\n\t            width = paperSize.width,\n\t            height = paperSize.height,\n\t            H, W;\n\t        if (fit) {\n\t            H = height / h;\n\t            W = width / w;\n\t            if (w * H < width) {\n\t                x -= (width - w * H) / 2 / H;\n\t            }\n\t            if (h * W < height) {\n\t                y -= (height - h * W) / 2 / W;\n\t            }\n\t        }\n\t        this._viewBox = [x, y, w, h, !!fit];\n\t        this._viewBoxShift = {\n\t            dx: -x,\n\t            dy: -y,\n\t            scale: paperSize\n\t        };\n\t        this.forEach(function (el) {\n\t            el.transform(\"...\");\n\t        });\n\t        return this;\n\t    };\n\t    var createNode;\n\t    R._engine.initWin = function (win) {\n\t            var doc = win.document;\n\t            if (doc.styleSheets.length < 31) {\n\t                doc.createStyleSheet().addRule(\".rvml\", \"behavior:url(#default#VML)\");\n\t            } else {\n\t                // no more room, add to the existing one\n\t                // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx\n\t                doc.styleSheets[0].addRule(\".rvml\", \"behavior:url(#default#VML)\");\n\t            }\n\t            try {\n\t                !doc.namespaces.rvml && doc.namespaces.add(\"rvml\", \"urn:schemas-microsoft-com:vml\");\n\t                createNode = function (tagName) {\n\t                    return doc.createElement('<rvml:' + tagName + ' class=\"rvml\">');\n\t                };\n\t            } catch (e) {\n\t                createNode = function (tagName) {\n\t                    return doc.createElement('<' + tagName + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">');\n\t                };\n\t            }\n\t        };\n\t    R._engine.initWin(R._g.win);\n\t    R._engine.create = function () {\n\t        var con = R._getContainer.apply(0, arguments),\n\t            container = con.container,\n\t            height = con.height,\n\t            s,\n\t            width = con.width,\n\t            x = con.x,\n\t            y = con.y;\n\t        if (!container) {\n\t            throw new Error(\"VML container not found.\");\n\t        }\n\t        var res = new R._Paper,\n\t            c = res.canvas = R._g.doc.createElement(\"div\"),\n\t            cs = c.style;\n\t        x = x || 0;\n\n\t        y = y || 0;\n\t        width = width || 512;\n\t        height = height || 342;\n\t        res.width = width;\n\t        res.height = height;\n\t        width == +width && (width += \"px\");\n\t        height == +height && (height += \"px\");\n\t        res.coordsize = zoom * 1e3 + S + zoom * 1e3;\n\t        res.coordorigin = \"0 0\";\n\t        res.span = R._g.doc.createElement(\"span\");\n\t        res.span.style.cssText = \"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;\";\n\t        c.appendChild(res.span);\n\t        cs.cssText = R.format(\"top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden\", width, height);\n\t        if (container == 1) {\n\t            R._g.doc.body.appendChild(c);\n\t            cs.left = x + \"px\";\n\t            cs.top = y + \"px\";\n\t            cs.position = \"absolute\";\n\t        } else {\n\t            if (container.firstChild) {\n\t                container.insertBefore(c, container.firstChild);\n\t            } else {\n\t                container.appendChild(c);\n\t            }\n\t        }\n\t        res.renderfix = function () {};\n\t        return res;\n\t    };\n\t    R.prototype.clear = function () {\n\t        R.eve(\"raphael.clear\", this);\n\t        this.canvas.innerHTML = E;\n\t        this.span = R._g.doc.createElement(\"span\");\n\t        this.span.style.cssText = \"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;\";\n\t        this.canvas.appendChild(this.span);\n\t        this.bottom = this.top = null;\n\t    };\n\t    R.prototype.remove = function () {\n\t        R.eve(\"raphael.remove\", this);\n\t        this.canvas.parentNode.removeChild(this.canvas);\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t        return true;\n\t    };\n\n\t    var setproto = R.st;\n\t    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\n\t        setproto[method] = (function (methodname) {\n\t            return function () {\n\t                var arg = arguments;\n\t                return this.forEach(function (el) {\n\t                    el[methodname].apply(el, arg);\n\t                });\n\t            };\n\t        })(method);\n\t    }\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ }\n/******/ ])\n});\n;"
  },
  {
    "path": "modules/backend/assets/foundation/migrate/vendor/sortable/jquery-sortable.js",
    "content": "/* ===================================================\n *  jquery-sortable.js v0.9.13\n *  http://johnny.github.com/jquery-sortable/\n * ===================================================\n *  Copyright (c) 2012 Jonas von Andrian\n *  All rights reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *  * The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n *  DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * ========================================================== */\n\n!function ( $, window, pluginName, undefined){\n  var containerDefaults = {\n    // If true, items can be dragged from this container\n    drag: true,\n    // If true, items can be droped onto this container\n    drop: true,\n    // Exclude items from being draggable, if the\n    // selector matches the item\n    exclude: \"\",\n    // If true, search for nested containers within an item.If you nest containers,\n    // either the original selector with which you call the plugin must only match the top containers,\n    // or you need to specify a group (see the bootstrap nav example)\n    nested: true,\n    // If true, the items are assumed to be arranged vertically\n    vertical: true\n  }, // end container defaults\n  groupDefaults = {\n    // This is executed after the placeholder has been moved.\n    // $closestItemOrContainer contains the closest item, the placeholder\n    // has been put at or the closest empty Container, the placeholder has\n    // been appended to.\n    afterMove: function ($placeholder, container, $closestItemOrContainer) {\n    },\n    // The exact css path between the container and its items, e.g. \"> tbody\"\n    containerPath: \"\",\n    // The css selector of the containers\n    containerSelector: \"ol, ul\",\n    // Distance the mouse has to travel to start dragging\n    distance: 0,\n    // Time in milliseconds after mousedown until dragging should start.\n    // This option can be used to prevent unwanted drags when clicking on an element.\n    delay: 0,\n    // The css selector of the drag handle\n    handle: \"\",\n    // The exact css path between the item and its subcontainers.\n    // It should only match the immediate items of a container.\n    // No item of a subcontainer should be matched. E.g. for ol>div>li the itemPath is \"> div\"\n    itemPath: \"\",\n    // The css selector of the items\n    itemSelector: \"li\",\n    // The class given to \"body\" while an item is being dragged\n    bodyClass: \"dragging\",\n    // The class giving to an item while being dragged\n    draggedClass: \"dragged\",\n    // Check if the dragged item may be inside the container.\n    // Use with care, since the search for a valid container entails a depth first search\n    // and may be quite expensive.\n    isValidTarget: function ($item, container) {\n      return true\n    },\n    // Executed before onDrop if placeholder is detached.\n    // This happens if pullPlaceholder is set to false and the drop occurs outside a container.\n    onCancel: function ($item, container, _super, event) {\n    },\n    // Executed at the beginning of a mouse move event.\n    // The Placeholder has not been moved yet.\n    onDrag: function ($item, position, _super, event) {\n      $item.css(position)\n      event.preventDefault()\n    },\n    // Called after the drag has been started,\n    // that is the mouse button is being held down and\n    // the mouse is moving.\n    // The container is the closest initialized container.\n    // Therefore it might not be the container, that actually contains the item.\n    onDragStart: function ($item, container, _super, event) {\n      $item.css({\n        height: $item.outerHeight(),\n        width: $item.outerWidth()\n      })\n      $item.addClass(container.group.options.draggedClass)\n      $(\"body\").addClass(container.group.options.bodyClass)\n    },\n    // Called when the mouse button is being released\n    onDrop: function ($item, container, _super, event) {\n      $item.removeClass(container.group.options.draggedClass).removeAttr(\"style\")\n      $(\"body\").removeClass(container.group.options.bodyClass)\n    },\n    // Called on mousedown. If falsy value is returned, the dragging will not start.\n    // Ignore if element clicked is input, select or textarea\n    onMousedown: function ($item, _super, event) {\n      if (!event.target.nodeName.match(/^(input|select|textarea)$/i)) {\n        if (event.type.match(/^mouse/)) event.preventDefault()\n        return true\n      }\n    },\n    // The class of the placeholder (must match placeholder option markup)\n    placeholderClass: \"placeholder\",\n    // Template for the placeholder. Can be any valid jQuery input\n    // e.g. a string, a DOM element.\n    // The placeholder must have the class \"placeholder\"\n    placeholder: '<li class=\"placeholder\"></li>',\n    // If true, the position of the placeholder is calculated on every mousemove.\n    // If false, it is only calculated when the mouse is above a container.\n    pullPlaceholder: true,\n    // Specifies serialization of the container group.\n    // The pair $parent/$children is either container/items or item/subcontainers.\n    serialize: function ($parent, $children, parentIsContainer) {\n      var result = $.extend({}, $parent.data())\n\n      if (parentIsContainer) {\n        return [$children]\n      }\n      else if ($children[0]){\n        result.children = $children\n      }\n\n      delete result.subContainers\n      delete result.sortable\n\n      return result\n    },\n    // Set tolerance while dragging. Positive values decrease sensitivity,\n    // negative values increase it.\n    tolerance: 0\n  }, // end group defaults\n  containerGroups = {},\n  groupCounter = 0,\n  emptyBox = {\n    left: 0,\n    top: 0,\n    bottom: 0,\n    right:0\n  },\n  eventNames = {\n    start: \"touchstart.sortable mousedown.sortable\",\n    drop: \"touchend.sortable touchcancel.sortable mouseup.sortable\",\n    drag: \"touchmove.sortable mousemove.sortable\",\n    scroll: \"scroll.sortable\"\n  },\n  subContainerKey = \"subContainers\"\n\n  /*\n   * a is Array [left, right, top, bottom]\n   * b is array [left, top]\n   */\n  function d(a,b) {\n    var x = Math.max(0, a[0] - b[0], b[0] - a[1]),\n    y = Math.max(0, a[2] - b[1], b[1] - a[3])\n    return x+y;\n  }\n\n  function setDimensions(array, dimensions, tolerance, useOffset) {\n    var i = array.length,\n    offsetMethod = useOffset ? \"offset\" : \"position\"\n    tolerance = tolerance || 0\n\n    while(i--){\n      var el = array[i].el ? array[i].el : $(array[i]),\n      // use fitting method\n      pos = el[offsetMethod]()\n      pos.left += parseInt(el.css('margin-left'), 10)\n      pos.top += parseInt(el.css('margin-top'),10)\n      dimensions[i] = [\n        pos.left - tolerance,\n        pos.left + el.outerWidth() + tolerance,\n        pos.top - tolerance,\n        pos.top + el.outerHeight() + tolerance\n      ]\n    }\n  }\n\n  function getRelativePosition(pointer, element) {\n    var offset = element.offset()\n    return {\n      left: pointer.left - offset.left,\n      top: pointer.top - offset.top\n    }\n  }\n\n  function sortByDistanceDesc(dimensions, pointer, lastPointer) {\n    pointer = [pointer.left, pointer.top]\n    lastPointer = lastPointer && [lastPointer.left, lastPointer.top]\n\n    var dim,\n    i = dimensions.length,\n    distances = []\n\n    while(i--){\n      dim = dimensions[i]\n      distances[i] = [i,d(dim,pointer), lastPointer && d(dim, lastPointer)]\n    }\n    distances = distances.sort(function  (a,b) {\n      return b[1] - a[1] || b[2] - a[2] || b[0] - a[0]\n    })\n\n    // last entry is the closest\n    return distances\n  }\n\n  function ContainerGroup(options) {\n    this.options = $.extend({}, groupDefaults, options)\n    this.containers = []\n\n    if(!this.options.rootGroup){\n      this.scrollProxy = $.proxy(this.scroll, this)\n      this.dragProxy = $.proxy(this.drag, this)\n      this.dropProxy = $.proxy(this.drop, this)\n      this.placeholder = $(this.options.placeholder)\n\n      if(!options.isValidTarget)\n        this.options.isValidTarget = undefined\n    }\n  }\n\n  ContainerGroup.get = function  (options) {\n    if(!containerGroups[options.group]) {\n      if(options.group === undefined)\n        options.group = groupCounter ++\n\n      containerGroups[options.group] = new ContainerGroup(options)\n    }\n\n    return containerGroups[options.group]\n  }\n\n  ContainerGroup.prototype = {\n    dragInit: function  (e, itemContainer) {\n      this.$document = $(itemContainer.el[0].ownerDocument)\n\n      // get item to drag\n      var closestItem = $(e.target).closest(this.options.itemSelector);\n      // using the length of this item, prevents the plugin from being started if there is no handle being clicked on.\n      // this may also be helpful in instantiating multidrag.\n      if (closestItem.length) {\n        this.item = closestItem;\n        this.itemContainer = itemContainer;\n        if (this.item.is(this.options.exclude) || !this.options.onMousedown(this.item, groupDefaults.onMousedown, e)) {\n          return;\n        }\n        this.setPointer(e);\n        this.toggleListeners('on');\n        this.setupDelayTimer();\n        this.dragInitDone = true;\n      }\n    },\n    drag: function  (e) {\n      if(!this.dragging){\n        if(!this.distanceMet(e) || !this.delayMet)\n          return\n\n        this.options.onDragStart(this.item, this.itemContainer, groupDefaults.onDragStart, e)\n        this.item.before(this.placeholder)\n        this.dragging = true\n      }\n\n      this.setPointer(e)\n      // place item under the cursor\n      this.options.onDrag(this.item,\n                          getRelativePosition(this.pointer, this.item.offsetParent()),\n                          groupDefaults.onDrag,\n                          e)\n\n      var p = this.getPointer(e),\n      box = this.sameResultBox,\n      t = this.options.tolerance\n\n      if(!box || box.top - t > p.top || box.bottom + t < p.top || box.left - t > p.left || box.right + t < p.left)\n        if(!this.searchValidTarget()){\n          this.placeholder.detach()\n          this.lastAppendedItem = undefined\n        }\n    },\n    drop: function  (e) {\n      this.toggleListeners('off')\n\n      this.dragInitDone = false\n\n      if(this.dragging){\n        // processing Drop, check if placeholder is detached\n        if(this.placeholder.closest(\"html\")[0]){\n          this.placeholder.before(this.item).detach()\n        } else {\n          this.options.onCancel(this.item, this.itemContainer, groupDefaults.onCancel, e)\n        }\n        this.options.onDrop(this.item, this.getContainer(this.item), groupDefaults.onDrop, e)\n\n        // cleanup\n        this.clearDimensions()\n        this.clearOffsetParent()\n        this.lastAppendedItem = this.sameResultBox = undefined\n        this.dragging = false\n      }\n    },\n    searchValidTarget: function  (pointer, lastPointer) {\n      if(!pointer){\n        pointer = this.relativePointer || this.pointer\n        lastPointer = this.lastRelativePointer || this.lastPointer\n      }\n\n      var distances = sortByDistanceDesc(this.getContainerDimensions(),\n                                         pointer,\n                                         lastPointer),\n      i = distances.length\n\n      while(i--){\n        var index = distances[i][0],\n        distance = distances[i][1]\n\n        if(!distance || this.options.pullPlaceholder){\n          var container = this.containers[index]\n          if(!container.disabled){\n            if(!this.$getOffsetParent()){\n              var offsetParent = container.getItemOffsetParent()\n              pointer = getRelativePosition(pointer, offsetParent)\n              lastPointer = getRelativePosition(lastPointer, offsetParent)\n            }\n            if(container.searchValidTarget(pointer, lastPointer))\n              return true\n          }\n        }\n      }\n      if(this.sameResultBox)\n        this.sameResultBox = undefined\n    },\n    movePlaceholder: function  (container, item, method, sameResultBox) {\n      var lastAppendedItem = this.lastAppendedItem\n      if(!sameResultBox && lastAppendedItem && lastAppendedItem[0] === item[0])\n        return;\n\n      item[method](this.placeholder)\n      this.lastAppendedItem = item\n      this.sameResultBox = sameResultBox\n      this.options.afterMove(this.placeholder, container, item)\n    },\n    getContainerDimensions: function  () {\n      if(!this.containerDimensions)\n        setDimensions(this.containers, this.containerDimensions = [], this.options.tolerance, !this.$getOffsetParent())\n      return this.containerDimensions\n    },\n    getContainer: function  (element) {\n      return element.closest(this.options.containerSelector).data(pluginName)\n    },\n    $getOffsetParent: function  () {\n      if(this.offsetParent === undefined){\n        var i = this.containers.length - 1,\n        offsetParent = this.containers[i].getItemOffsetParent()\n\n        if(!this.options.rootGroup){\n          while(i--){\n            if(offsetParent[0] != this.containers[i].getItemOffsetParent()[0]){\n              // If every container has the same offset parent,\n              // use position() which is relative to this parent,\n              // otherwise use offset()\n              // compare #setDimensions\n              offsetParent = false\n              break;\n            }\n          }\n        }\n\n        this.offsetParent = offsetParent\n      }\n      return this.offsetParent\n    },\n    setPointer: function (e) {\n      var pointer = this.getPointer(e)\n\n      if(this.$getOffsetParent()){\n        var relativePointer = getRelativePosition(pointer, this.$getOffsetParent())\n        this.lastRelativePointer = this.relativePointer\n        this.relativePointer = relativePointer\n      }\n\n      this.lastPointer = this.pointer\n      this.pointer = pointer\n    },\n    distanceMet: function (e) {\n      var currentPointer = this.getPointer(e)\n      return (Math.max(\n        Math.abs(this.pointer.left - currentPointer.left),\n        Math.abs(this.pointer.top - currentPointer.top)\n      ) >= this.options.distance)\n    },\n    getPointer: function(e) {\n      var o = e.originalEvent,\n          t = (e.originalEvent.touches && e.originalEvent.touches[0]) || {}\n      return {\n        left: e.pageX || o.pageX || t.pageX,\n        top: e.pageY || o.pageY || t.pageY\n      }\n    },\n    setupDelayTimer: function () {\n      var that = this\n      this.delayMet = !this.options.delay\n\n      // init delay timer if needed\n      if (!this.delayMet) {\n        clearTimeout(this._mouseDelayTimer);\n        this._mouseDelayTimer = setTimeout(function() {\n          that.delayMet = true\n        }, this.options.delay)\n      }\n    },\n    scroll: function  (e) {\n      this.clearDimensions()\n      this.clearOffsetParent() // TODO is this needed?\n    },\n    toggleListeners: function (method) {\n      var that = this,\n      events = ['drag','drop','scroll']\n\n      $.each(events,function  (i,event) {\n        that.$document[method](eventNames[event], that[event + 'Proxy'])\n      })\n    },\n    clearOffsetParent: function () {\n      this.offsetParent = undefined\n    },\n    // Recursively clear container and item dimensions\n    clearDimensions: function  () {\n      this.traverse(function(object){\n        object._clearDimensions()\n      })\n    },\n    traverse: function(callback) {\n      callback(this)\n      var i = this.containers.length\n      while(i--){\n        this.containers[i].traverse(callback)\n      }\n    },\n    _clearDimensions: function(){\n      this.containerDimensions = undefined\n    },\n    _destroy: function () {\n      containerGroups[this.options.group] = undefined\n    }\n  }\n\n  function Container(element, options) {\n    this.el = element\n    this.options = $.extend( {}, containerDefaults, options)\n\n    this.group = ContainerGroup.get(this.options)\n    this.rootGroup = this.options.rootGroup || this.group\n    this.handle = this.rootGroup.options.handle || this.rootGroup.options.itemSelector\n\n    var itemPath = this.rootGroup.options.itemPath\n    this.target = itemPath ? this.el.find(itemPath) : this.el\n\n    this.target.on(eventNames.start, this.handle, $.proxy(this.dragInit, this))\n\n    if(this.options.drop)\n      this.group.containers.push(this)\n  }\n\n  Container.prototype = {\n    dragInit: function  (e) {\n      var rootGroup = this.rootGroup\n\n      if( !this.disabled &&\n          !rootGroup.dragInitDone &&\n          this.options.drag &&\n          this.isValidDrag(e)) {\n        rootGroup.dragInit(e, this)\n      }\n    },\n    isValidDrag: function(e) {\n      return e.which == 1 ||\n        e.type == \"touchstart\" && e.originalEvent.touches.length == 1\n    },\n    searchValidTarget: function  (pointer, lastPointer) {\n      var distances = sortByDistanceDesc(this.getItemDimensions(),\n                                         pointer,\n                                         lastPointer),\n      i = distances.length,\n      rootGroup = this.rootGroup,\n      validTarget = !rootGroup.options.isValidTarget ||\n        rootGroup.options.isValidTarget(rootGroup.item, this)\n\n      if(!i && validTarget){\n        rootGroup.movePlaceholder(this, this.target, \"append\")\n        return true\n      } else\n        while(i--){\n          var index = distances[i][0],\n          distance = distances[i][1]\n          if(!distance && this.hasChildGroup(index)){\n            var found = this.getContainerGroup(index).searchValidTarget(pointer, lastPointer)\n            if(found)\n              return true\n          }\n          else if(validTarget){\n            this.movePlaceholder(index, pointer)\n            return true\n          }\n        }\n    },\n    movePlaceholder: function  (index, pointer) {\n      var item = $(this.items[index]),\n      dim = this.itemDimensions[index],\n      method = \"after\",\n      width = item.outerWidth(),\n      height = item.outerHeight(),\n      offset = item.offset(),\n      sameResultBox = {\n        left: offset.left,\n        right: offset.left + width,\n        top: offset.top,\n        bottom: offset.top + height\n      }\n      if(this.options.vertical){\n        var yCenter = (dim[2] + dim[3]) / 2,\n        inUpperHalf = pointer.top <= yCenter\n        if(inUpperHalf){\n          method = \"before\"\n          sameResultBox.bottom -= height / 2\n        } else\n          sameResultBox.top += height / 2\n      } else {\n        var xCenter = (dim[0] + dim[1]) / 2,\n        inLeftHalf = pointer.left <= xCenter\n        if(inLeftHalf){\n          method = \"before\"\n          sameResultBox.right -= width / 2\n        } else\n          sameResultBox.left += width / 2\n      }\n      if(this.hasChildGroup(index))\n        sameResultBox = emptyBox\n      this.rootGroup.movePlaceholder(this, item, method, sameResultBox)\n    },\n    getItemDimensions: function  () {\n      if(!this.itemDimensions){\n        this.items = this.$getChildren(this.el, \"item\").filter(\n          \":not(.\" + this.group.options.placeholderClass + \", .\" + this.group.options.draggedClass + \")\"\n        ).get()\n        setDimensions(this.items, this.itemDimensions = [], this.options.tolerance)\n      }\n      return this.itemDimensions\n    },\n    getItemOffsetParent: function  () {\n      var offsetParent,\n      el = this.el\n      // Since el might be empty we have to check el itself and\n      // can not do something like el.children().first().offsetParent()\n      if(el.css(\"position\") === \"relative\" || el.css(\"position\") === \"absolute\"  || el.css(\"position\") === \"fixed\")\n        offsetParent = el\n      else\n        offsetParent = el.offsetParent()\n      return offsetParent\n    },\n    hasChildGroup: function (index) {\n      return this.options.nested && this.getContainerGroup(index)\n    },\n    getContainerGroup: function  (index) {\n      var childGroup = $.data(this.items[index], subContainerKey)\n      if( childGroup === undefined){\n        var childContainers = this.$getChildren(this.items[index], \"container\")\n        childGroup = false\n\n        if(childContainers[0]){\n          var options = $.extend({}, this.options, {\n            rootGroup: this.rootGroup,\n            group: groupCounter ++\n          })\n          childGroup = childContainers[pluginName](options).data(pluginName).group\n        }\n        $.data(this.items[index], subContainerKey, childGroup)\n      }\n      return childGroup\n    },\n    $getChildren: function (parent, type) {\n      var options = this.rootGroup.options,\n      path = options[type + \"Path\"],\n      selector = options[type + \"Selector\"]\n\n      parent = $(parent)\n      if(path)\n        parent = parent.find(path)\n\n      return parent.children(selector)\n    },\n    _serialize: function (parent, isContainer) {\n      var that = this,\n      childType = isContainer ? \"item\" : \"container\",\n\n      children = this.$getChildren(parent, childType).not(this.options.exclude).map(function () {\n        return that._serialize($(this), !isContainer)\n      }).get()\n\n      return this.rootGroup.options.serialize(parent, children, isContainer)\n    },\n    traverse: function(callback) {\n      $.each(this.items || [], function(item){\n        var group = $.data(this, subContainerKey)\n        if(group)\n          group.traverse(callback)\n      });\n\n      callback(this)\n    },\n    _clearDimensions: function  () {\n      this.itemDimensions = undefined\n    },\n    _destroy: function() {\n      var that = this;\n\n      this.target.off(eventNames.start, this.handle);\n      this.el.removeData(pluginName)\n\n      if(this.options.drop)\n        this.group.containers = $.grep(this.group.containers, function(val){\n          return val != that\n        })\n\n      $.each(this.items || [], function(){\n        $.removeData(this, subContainerKey)\n      })\n    }\n  }\n\n  var API = {\n    enable: function() {\n      this.traverse(function(object){\n        object.disabled = false\n      })\n    },\n    disable: function (){\n      this.traverse(function(object){\n        object.disabled = true\n      })\n    },\n    serialize: function () {\n      return this._serialize(this.el, true)\n    },\n    refresh: function() {\n      this.traverse(function(object){\n        object._clearDimensions()\n      })\n    },\n    destroy: function () {\n      this.traverse(function(object){\n        object._destroy();\n      })\n    }\n  }\n\n  $.extend(Container.prototype, API)\n\n  /**\n   * jQuery API\n   *\n   * Parameters are\n   *   either options on init\n   *   or a method name followed by arguments to pass to the method\n   */\n  $.fn[pluginName] = function(methodOrOptions) {\n    var args = Array.prototype.slice.call(arguments, 1)\n\n    return this.map(function(){\n      var $t = $(this),\n      object = $t.data(pluginName)\n\n      if(object && API[methodOrOptions])\n        return API[methodOrOptions].apply(object, args) || this\n      else if(!object && (methodOrOptions === undefined ||\n                          typeof methodOrOptions === \"object\"))\n        $t.data(pluginName, new Container($t, methodOrOptions))\n\n      return this\n    });\n  };\n\n}(jQuery, window, 'jqSortable');\n"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/drag/README.md",
    "content": "# Drag.Scroll\n\nAllows the elements with `overflow: hidden` to be dragged.\n\n### Example\n\nDrag the area above left-to-right.\n\n    <div id=\"scrollExample\">\n        <div class=\"scroll-stripes-example\"></div>\n    </div>\n\n\n    <style>\n        #scrollExample {\n            width: 100%; height: 50px; overflow: hidden;\n        }\n        .scroll-stripes-example {\n            height: 50px; width: 5000px;\n            background-image: linear-gradient(90deg, gray, white, gray);\n            background-size: 500px 50px;\n        }\n    </style>\n\n    <script>\n        $('#scrollExample').dragScroll();\n    </script>\n\n# Drag.Value\n\nAllows the dragging of elements that result in a custom value when dropped.\n\n    <p>\n        <input placeholder=\"Drag a button below to me\" class=\"form-control\" />\n    </p>\n\n    <button\n        class=\"btn btn-default\"\n        data-control=\"dragvalue\"\n        data-text-value=\"October\">\n        Drop \"Foo\"\n    </button>\n\n    <button\n        class=\"btn btn-default\"\n        data-control=\"dragvalue\"\n        data-text-value=\"CMS\">\n        Drop \"Bar\"\n    </button>\n\n### Clickable\n\nYou can make elements clickable from another input by defining `data-drag-click=\"true\"`.\n\n    <p>\n        <input placeholder=\"Click on me first, then click a label below\" class=\"form-control\" />\n    </p>\n\n    <div class=\"control-balloon-selector\">\n        <ul>\n            <li\n                data-control=\"dragvalue\"\n                data-text-value=\"Richie\"\n                data-drag-click=\"true\">\n                Monday\n            </li>\n            <li\n                data-control=\"dragvalue\"\n                data-text-value=\"Potsie\"\n                data-drag-click=\"true\">\n                Tuesday\n            </li>\n            <li\n                data-control=\"dragvalue\"\n                data-text-value=\"The Fonz\"\n                data-drag-click=\"true\">\n                Happy days!\n            </li>\n        </ul>\n    </div>\n\n# Drag.Sort\n\nAllows the dragging and sorting of lists.\n\n### Example\n\nSort the buttons\n\n    <ol id=\"sortExample\">\n        <li><a class=\"btn btn-sm btn-default\">First</a></li>\n        <li><a class=\"btn btn-sm btn-primary\">Second</a></li>\n        <li><a class=\"btn btn-sm btn-success\">Third</a></li>\n    </ol>\n\n    <script>\n        $('#sortExample').sortable()\n    </script>\n\n    <style>\n        body.dragging, body.dragging * {\n            cursor: move !important\n        }\n        .dragged {\n            position: absolute; opacity: 0.5; z-index: 2000;\n        }\n        #sortExample li.placeholder {\n            position: relative;\n        }\n    </style>\n\n## JavaScript API\n\nThe `sortable()` method must be invoked on valid containers, meaning they must match the containerSelector option.\n\n`.sortable('enable')`\nEnable all instantiated sortables in the set of matched elements\n\n`.sortable('disable')`\nDisable all instantiated sortables in the set of matched elements\n\n`.sortable('refresh')`\nReset all cached element dimensions\n\n`.sortable('destroy')`\nRemove the sortable plugin from the set of matched elements\n\n`.sortable('serialize')`\nSerialize all selected containers. Returns a jQuery object . Use .get() to retrieve the array, if needed.\n\n### Supported options\n\n- `useAnimation`: Use animation when an item is removed or inserted into the tree.\n\n- `usePlaceholderClone`: Placeholder should be a clone of the item being dragged.\n\n- `afterMove`: This is executed after the placeholder has been moved. $closestItemOrContainer contains the closest item, the placeholder has been put at or the closest empty Container, the placeholder has been appended to.\n\n- `containerPath`: The exact css path between the container and its items, e.g. \"> tbody\"\n\n- `containerSelector`: The css selector of the containers\n\n- `distance`: Distance the mouse has to travel to start dragging\n\n- `delay`: Time in milliseconds after mousedown until dragging should start. This option can be used to prevent unwanted drags when clicking on an element.\n\n- `handle`: The css selector of the drag handle\n\n- `itemPath`: The exact css path between the item and its subcontainers. It should only match the immediate items of a container. No item of a subcontainer should be matched. E.g. for ol>div>li the itemPath is \"> div\"\n\n- `itemSelector`: The css selector of the items\n\n- `bodyClass`: The class given to \"body\" while an item is being dragged\n\n- `draggedClass`: The class giving to an item while being dragged\n\n- `isValidTarget`: Check if the dragged item may be inside the container. Use with care, since the search for a valid container entails a depth first search and may be quite expensive.\n\n- `onCancel`: Executed before onDrop if placeholder is detached. This happens if pullPlaceholder is set to false and the drop occurs outside a container.\n\n- `onDrag`: Executed at the beginning of a mouse move event. The Placeholder has not been moved yet.\n\n- `onDragStart`: Called after the drag has been started, that is the mouse button is being held down and the mouse is moving. The container is the closest initialized container. Therefore it might not be the container, that actually contains the item.\n\n- `onDrop`: Called when the mouse button is being released\n\n- `onMousedown`: Called on mousedown. If falsy value is returned, the dragging will not start. Ignore if element clicked is input, select or textarea\n\n- `placeholderClass`: The class of the placeholder (must match placeholder option markup)\n\n- `placeholder`: Template for the placeholder. Can be any valid jQuery input e.g. a string, a DOM element. The placeholder must have the class \"placeholder\"\n\n- `pullPlaceholder`: If true, the position of the placeholder is calculated on every mousemove. If false, it is only calculated when the mouse is above a container.\n\n- `serialize`: Specifies serialization of the container group. The pair $parent/$children is either container/items or item/subcontainers.\n\n- `tolerance`: Set tolerance while dragging. Positive values decrease sensitivity, negative values increase it.\n\n### Supported options (container specific)\n\n- `drag`: If true, items can be dragged from this container\n\n- `drop`: If true, items can be droped onto this container\n\n- `exclude`: Exclude items from being draggable, if the selector matches the item\n\n- `nested`: If true, search for nested containers within an item.If you nest containers, either the original selector with which you call the plugin must only match the top containers, or you need to specify a group (see the bootstrap nav example)\n\n- `vertical`: If true, the items are assumed to be arranged vertically\n"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/drag/drag.scroll.js",
    "content": "/*\n * Allows to scroll an element content in the horizontal or horizontal directions. This script doesn't use\n * absolute positioning and rely on the scrollLeft/scrollTop DHTML properties. The element width should be\n * fixed with the CSS or JavaScript.\n *\n * Events triggered on the element:\n * - start.oc.dragScroll\n * - drag.oc.dragScroll\n * - stop.oc.dragScroll\n *\n * Options:\n * - start - callback function to execute when the drag starts\n * - drag - callback function to execute when the element is dragged\n * - stop - callback function to execute when the drag ends\n * - vertical - determines if the scroll direction is vertical, true by default\n * - scrollClassContainer - if specified, specifies an element or element selector to apply the 'scroll-before' and 'scroll-after' CSS classes,\n *   depending on whether the scrollable area is in its start or end\n * - scrollMarkerContainer - if specified, specifies an element or element selector to inject scroll markers (span elements that con\n *   contain the ellipses icon, indicating whether scrolling is possible)\n * - useDrag - determines if dragging is allowed support, true by default\n * - useNative - if native CSS is enabled via \"mobile\" on the HTML tag, false by default\n * - useScroll - determines if the mouse wheel scrolling is allowed, true by default\n * - useComboScroll - determines if horizontal scroll should act as vertical, and vice versa, true by default\n * - dragSelector - restrict drag events to this selector\n * - scrollSelector - restrict scroll events to this selector\n *\n * Methods:\n * - isStart - determines if the scrollable area is in its start (left or top)\n * - isEnd - determines if the scrollable area is in its end (right or bottom)\n * - goToStart - moves the scrollable area to the start (left or top)\n * - goToElement - moves the scrollable area to an element\n *\n * Require:\n * - mousewheel/mousewheel\n */\n+(function($) {\n    'use strict';\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype;\n\n    var DragScroll = function(element, options) {\n        this.options = $.extend({}, DragScroll.DEFAULTS, options);\n        this.touchDragStarted = false;\n        this.onTouchMove = onTouchMove;\n\n        var $el = $(element),\n            el = $el.get(0),\n            dragStart = 0,\n            startOffset = 0,\n            self = this,\n            dragging = false,\n            eventElementName = this.options.vertical ? 'pageY' : 'pageX',\n            isNative = this.options.useNative && $('html').hasClass('mobile');\n\n        this.el = $el;\n        this.scrollClassContainer = this.options.scrollClassContainer ? $(this.options.scrollClassContainer) : $el;\n        this.isScrollable = true;\n\n        Base.call(this);\n\n        // Inject scroll markers\n        if (this.options.scrollMarkerContainer) {\n            $(this.options.scrollMarkerContainer).append(\n                $('<span class=\"before scroll-marker\"></span><span class=\"after scroll-marker\"></span>')\n            );\n        }\n\n        // Bind events\n        var $scrollSelect = this.options.scrollSelector ? $(this.options.scrollSelector, $el) : $el;\n\n        $scrollSelect.mousewheel(function(event) {\n            if (!self.options.useScroll || self.paused) {\n                return;\n            }\n\n            var offset,\n                offsetX = event.deltaFactor * event.deltaX,\n                offsetY = event.deltaFactor * event.deltaY;\n\n            if (!offsetX && self.options.useComboScroll) {\n                offset = offsetY * -1;\n            }\n            else if (!offsetY && self.options.useComboScroll) {\n                offset = offsetX;\n            }\n            else {\n                offset = self.options.vertical ? offsetY * -1 : offsetX;\n            }\n\n            var scrolled = scrollWheel(offset);\n            if (!scrolled && self.options.noOverScroll) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            return !scrolled\n        });\n\n        if (this.options.useDrag) {\n            $el.on('mousedown.dragScroll', this.options.dragSelector, function(event) {\n                if (self.paused) {\n                    return;\n                }\n\n                // Don't prevent clicking inputs in the toolbar\n                if (event.target && event.target.tagName === 'INPUT') {\n                    return;\n                }\n\n                if (!self.isScrollable) {\n                    return;\n                }\n\n                startDrag(event);\n                return false;\n            });\n        }\n\n        if ('ontouchstart' in window || navigator.maxTouchPoints > 0) {\n            $el.on('touchstart.dragScroll', this.options.dragSelector, function (event) {\n                if (self.paused) {\n                    return;\n                }\n\n                var touchEvent = event.originalEvent;\n\n                if (touchEvent.touches.length == 1) {\n                    startDrag(touchEvent.touches[0]);\n                    self.touchDragStarted = true;\n\n                    event.stopPropagation();\n                }\n            });\n\n            window.addEventListener('touchmove', self.onTouchMove, { passive: false })\n        }\n\n        $el.on('click.dragScroll', function() {\n            // Do not handle item clicks while dragging\n            if ($(document.body).hasClass(self.options.dragClass)) {\n                return false;\n            }\n        });\n\n        if (!this.options.noScrollClasses) {\n            $(document).on('ready', this.proxy(this.fixScrollClasses));\n            $(window).on('resize', this.proxy(this.fixScrollClasses));\n            this.el.on('scroll', this.proxy(this.fixScrollClasses));\n        }\n\n        /*\n         * Internal event, drag has started\n         */\n        function startDrag(event) {\n            if (self.paused) {\n                return;\n            }\n\n            dragStart = event[eventElementName];\n            startOffset = self.options.vertical ? $el.scrollTop() : $el.scrollLeft();\n\n            if ('ontouchstart' in window || navigator.maxTouchPoints > 0) {\n                $(window).on('touchend.dragScroll', function(event) {\n                    stopDrag();\n                });\n            }\n\n            $(window).on('mousemove.dragScroll', function(event) {\n                moveDrag(event);\n                return false;\n            });\n\n            $(window).on('mouseup.dragScroll', function(mouseUpEvent) {\n                var isClick = event.pageX == mouseUpEvent.pageX && event.pageY == mouseUpEvent.pageY;\n                stopDrag(isClick);\n                return false;\n            });\n        }\n\n        function onTouchMove(event) {\n            if (!self.touchDragStarted) {\n                return;\n            }\n\n            var touchEvent = event\n            moveDrag(touchEvent.touches[0])\n            if (!isNative) {\n                event.preventDefault()\n            }\n        }\n\n        /*\n         * Internal event, drag is active\n         */\n        function moveDrag(event) {\n            var current = event[eventElementName],\n                offset = dragStart - current;\n\n            if (Math.abs(offset) > 3) {\n                if (!dragging) {\n                    dragging = true;\n                    $el.trigger('start.oc.dragScroll');\n                    self.options.start();\n                    $(document.body).addClass(self.options.dragClass);\n                }\n\n                if (!isNative) {\n                    self.options.vertical ? $el.scrollTop(startOffset + offset) : $el.scrollLeft(startOffset + offset);\n                }\n\n                self.fixScrollClasses(true);\n\n                $el.trigger('drag.oc.dragScroll');\n                self.options.drag();\n            }\n        }\n\n        /*\n         * Internal event, drag has ended\n         */\n        function stopDrag(click) {\n            $(window).off('.dragScroll');\n            self.touchDragStarted = false;\n\n            dragging = false;\n\n            if (click) {\n                $(document.body).removeClass(self.options.dragClass);\n            }\n            else {\n                self.fixScrollClasses();\n            }\n\n            window.setTimeout(function() {\n                if (!click) {\n                    $(document.body).removeClass(self.options.dragClass);\n                    $el.trigger('stop.oc.dragScroll');\n                    self.options.stop();\n                    self.fixScrollClasses();\n                }\n            }, 100);\n        }\n\n        /*\n         * Scroll wheel has moved by supplied offset\n         */\n        function scrollWheel(offset) {\n            if (self.paused) {\n                return;\n            }\n\n            startOffset = self.options.vertical ? el.scrollTop : el.scrollLeft;\n\n            self.options.vertical ? $el.scrollTop(startOffset + offset) : $el.scrollLeft(startOffset + offset);\n\n            var scrolled = self.options.vertical ? el.scrollTop != startOffset : el.scrollLeft != startOffset;\n\n            $el.trigger('drag.oc.dragScroll');\n            self.options.drag();\n\n            if (scrolled) {\n                if (self.wheelUpdateTimer !== undefined && self.wheelUpdateTimer !== false)\n                    window.clearInterval(self.wheelUpdateTimer);\n\n                self.wheelUpdateTimer = window.setTimeout(function() {\n                    self.wheelUpdateTimer = false;\n                    self.fixScrollClasses();\n                }, 100);\n            }\n\n            return scrolled;\n        }\n\n        this.fixScrollClasses();\n    };\n\n    DragScroll.prototype.dispose = function() {\n        clearTimeout(this.fixScrollClassesIntervalId);\n\n        this.scrollClassContainer = null;\n\n        if (!this.options.noScrollClasses) {\n            $(document).off('ready', this.proxy(this.fixScrollClasses));\n            $(window).off('resize', this.proxy(this.fixScrollClasses));\n            this.el.off('scroll', this.proxy(this.fixScrollClasses));\n        }\n\n        this.el.off('.dragScroll');\n\n        this.el.removeData('oc.dragScroll');\n        window.removeEventListener('touchmove', this.onTouchMove, {passive: false})\n\n        this.el = null;\n        BaseProto.dispose.call(this);\n    };\n\n    DragScroll.prototype = Object.create(BaseProto);\n    DragScroll.prototype.constructor = DragScroll;\n\n    DragScroll.DEFAULTS = {\n        vertical: false,\n        useDrag: true,\n        useScroll: true,\n        useNative: false,\n        useComboScroll: true,\n        scrollClassContainer: false,\n        scrollMarkerContainer: false,\n        scrollSelector: null,\n        dragSelector: null,\n        noOverScroll: false,\n        dragClass: 'drag',\n        start: function() {},\n        drag: function() {},\n        stop: function() {}\n    };\n\n    DragScroll.prototype.fixScrollClasses = function(isThrottle) {\n        if (this.options.noScrollClasses) {\n            return;\n        }\n\n        if (this.fixScrollClassesIntervalId) {\n            if (isThrottle) {\n                return;\n            }\n\n            clearTimeout(this.fixScrollClassesIntervalId);\n            this.fixScrollClassesIntervalId = null;\n        }\n\n        var that = this;\n        this.fixScrollClassesIntervalId = window.setTimeout(function() {\n            that.fixScrollClassesIntervalId = null;\n\n            var isStart = that.isStart(),\n                isEnd = that.isEnd();\n\n            that.scrollClassContainer.toggleClass('scroll-before', !isStart);\n            that.scrollClassContainer.toggleClass('scroll-after', !isEnd);\n\n            that.scrollClassContainer.toggleClass('scroll-active-before', that.isActiveBefore());\n            that.scrollClassContainer.toggleClass('scroll-active-after', that.isActiveAfter());\n            that.isScrollable = !isStart || !isEnd;\n        }, 30);\n    };\n\n    DragScroll.prototype.isStart = function() {\n        if (!this.options.vertical) {\n            return this.el.scrollLeft() <= 0;\n        }\n        else {\n            return this.el.scrollTop() <= 0;\n        }\n    };\n\n    DragScroll.prototype.isEnd = function() {\n        // Fudge factor for retina displays\n        var offset = 1;\n\n        if (!this.options.vertical) {\n            return this.el[0].scrollWidth - (this.el.scrollLeft() + this.el.outerWidth()) - offset <= 0;\n        }\n        else {\n            return this.el[0].scrollHeight - (this.el.scrollTop() + this.el.outerHeight()) - offset <= 0;\n        }\n    };\n\n    DragScroll.prototype.goToStart = function() {\n        if (!this.options.vertical) {\n            return this.el.scrollLeft(0);\n        }\n        else {\n            return this.el.scrollTop(0);\n        }\n    };\n\n    /*\n     * Determines if the element with the class 'active' is hidden before the viewport -\n     * on the left or on the top, depending on whether the scrollbar is horizontal or vertical.\n     */\n    DragScroll.prototype.isActiveAfter = function() {\n        var activeElement = $('.active', this.el);\n        if (activeElement.length == 0) {\n            return false;\n        }\n\n        if (!this.options.vertical) {\n            return activeElement.get(0).offsetLeft > this.el.scrollLeft() + this.el.width();\n        }\n        else {\n            return activeElement.get(0).offsetTop > this.el.scrollTop() + this.el.height();\n        }\n    };\n\n    /*\n     * Determines if the element with the class 'active' is hidden after the viewport -\n     * on the right or on the bottom, depending on whether the scrollbar is horizontal or vertical.\n     */\n    DragScroll.prototype.isActiveBefore = function() {\n        var activeElement = $('.active', this.el);\n        if (activeElement.length == 0) {\n            return false;\n        }\n\n        if (!this.options.vertical) {\n            return activeElement.get(0).offsetLeft + activeElement.width() < this.el.scrollLeft();\n        }\n        else {\n            return activeElement.get(0).offsetTop + activeElement.height() < this.el.scrollTop();\n        }\n    };\n\n    DragScroll.prototype.goToElement = function(element, callback, options) {\n        var $el = $(element);\n        if (!$el.length) return;\n\n        var self = this,\n            params = {\n                duration: 300,\n                queue: false,\n                complete: function() {\n                    self.fixScrollClasses();\n                    if (callback !== undefined) callback();\n                }\n            };\n\n        params = $.extend(params, options || {});\n\n        var offset = 0,\n            animated = false;\n\n        if (!this.options.vertical) {\n            offset = $el.get(0).offsetLeft - this.el.scrollLeft();\n\n            if (offset < 0) {\n                this.el.animate({ scrollLeft: $el.get(0).offsetLeft }, params);\n                animated = true;\n            }\n            else {\n                offset = $el.get(0).offsetLeft + $el.width() - (this.el.scrollLeft() + this.el.width());\n                if (offset > 0) {\n                    this.el.animate({ scrollLeft: $el.get(0).offsetLeft + $el.width() - this.el.width() }, params);\n                    animated = true;\n                }\n            }\n        }\n        else {\n            offset = $el.get(0).offsetTop - this.el.scrollTop();\n\n            if (offset < 0) {\n                this.el.animate({ scrollTop: $el.get(0).offsetTop }, params);\n                animated = true;\n            }\n            else {\n                var heightOffset = 0;\n                if (params.alignBottom) {\n                    heightOffset = $el.height();\n                }\n\n                offset = $el.get(0).offsetTop + heightOffset - (this.el.scrollTop() + this.el.height());\n                if (offset > 0) {\n                    this.el.animate(\n                        { scrollTop: $el.get(0).offsetTop + $el.height() - this.el.height() + heightOffset },\n                        params\n                    );\n                    animated = true;\n                }\n            }\n        }\n\n        if (!animated && callback !== undefined) {\n            callback();\n        }\n    };\n\n    DragScroll.prototype.pause = function() {\n        this.paused = true;\n    };\n\n    DragScroll.prototype.resume = function() {\n        this.paused = false;\n    };\n\n    // DRAGSCROLL PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.dragScroll;\n\n    $.fn.dragScroll = function(option) {\n        var args = arguments;\n\n        return this.each(function() {\n            var $this = $(this);\n            var data = $this.data('oc.dragScroll');\n            var options = typeof option == 'object' && option;\n\n            if (!data) $this.data('oc.dragScroll', (data = new DragScroll(this, options)));\n            if (typeof option == 'string') {\n                var methodArgs = [];\n                for (var i = 1; i < args.length; i++) methodArgs.push(args[i]);\n\n                data[option].apply(data, methodArgs);\n            }\n        });\n    };\n\n    $.fn.dragScroll.Constructor = DragScroll;\n\n    // DRAGSCROLL NO CONFLICT\n    // =================\n\n    $.fn.dragScroll.noConflict = function() {\n        $.fn.dragScroll = old;\n        return this;\n    };\n})(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/drag/drag.sort.js",
    "content": "/*\n * Sortable plugin.\n *\n * Documentation: ../docs/drag-sort.md\n *\n * Require:\n *  - sortable/jquery-sortable\n */\n\n +function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var Sortable = function (element, options) {\n        this.$el = $(element)\n        this.options = options || {}\n        this.cursorAdjustment = null\n\n        $.oc.foundation.controlUtils.markDisposable(element)\n        Base.call(this)\n        this.init()\n    }\n\n    Sortable.prototype = Object.create(BaseProto)\n    Sortable.prototype.constructor = Sortable\n\n    Sortable.prototype.init = function() {\n        this.$el.one('dispose-control', this.proxy(this.dispose))\n\n        var\n            self = this,\n            sortableOverrides = {},\n            sortableDefaults = {\n                onDragStart: this.proxy(this.onDragStart),\n                onDrag: this.proxy(this.onDrag),\n                onDrop: this.proxy(this.onDrop)\n            }\n\n        /*\n         * Override _super object for each option/event\n         */\n        if (this.options.onDragStart) {\n            sortableOverrides.onDragStart = function ($item, container, _super, event) {\n                self.options.onDragStart($item, container, sortableDefaults.onDragStart, event)\n            }\n        }\n\n        if (this.options.onDrag) {\n            sortableOverrides.onDrag = function ($item, position, _super, event) {\n                self.options.onDrag($item, position, sortableDefaults.onDrag, event)\n            }\n        }\n\n        if (this.options.onDrop) {\n            sortableOverrides.onDrop = function ($item, container, _super, event) {\n                self.options.onDrop($item, container, sortableDefaults.onDrop, event)\n            }\n        }\n\n        this.$el.jqSortable($.extend({}, sortableDefaults, this.options, sortableOverrides))\n    }\n\n    Sortable.prototype.dispose = function() {\n        this.$el.jqSortable('destroy')\n        this.$el.off('dispose-control', this.proxy(this.dispose))\n        this.$el.removeData('oc.sortable')\n        this.$el = null\n        this.options = null\n        this.cursorAdjustment = null\n        BaseProto.dispose.call(this)\n    }\n\n    Sortable.prototype.onDragStart = function ($item, container, _super, event) {\n        /*\n         * Relative cursor position\n         */\n        var offset = $item.offset(),\n            pointer = container.rootGroup.pointer\n\n        if (pointer) {\n            this.cursorAdjustment = {\n                left: pointer.left - offset.left,\n                top: pointer.top - offset.top\n            }\n        }\n        else {\n            this.cursorAdjustment = null\n        }\n\n        if (this.options.tweakCursorAdjustment) {\n            this.cursorAdjustment = this.options.tweakCursorAdjustment(this.cursorAdjustment)\n        }\n\n        $item.css({\n            height: $item.height(),\n            width: $item.width()\n        })\n\n        $item.addClass('dragged')\n        $('body').addClass('dragging')\n        this.$el.addClass('dragging')\n\n        /*\n         * Use animation\n         */\n        if (this.options.useAnimation) {\n            $item.data('oc.animated', true)\n        }\n\n        /*\n         * Placeholder clone\n         */\n         if (this.options.usePlaceholderClone) {\n            $(container.rootGroup.placeholder).html($item.html())\n         }\n\n         if (!this.options.useDraggingClone) {\n            $item.hide()\n         }\n    }\n\n    Sortable.prototype.onDrag = function ($item, position, _super, event) {\n        if (this.cursorAdjustment) {\n            /*\n             * Relative cursor position\n             */\n            $item.css({\n              left: position.left - this.cursorAdjustment.left,\n              top: position.top - this.cursorAdjustment.top\n            })\n        }\n        else {\n            /*\n             * Default behavior\n             */\n            $item.css(position)\n        }\n    }\n\n    Sortable.prototype.onDrop = function ($item, container, _super, event) {\n        $item.removeClass('dragged').removeAttr('style')\n        $('body').removeClass('dragging')\n        this.$el.removeClass('dragging')\n\n        if ($item.data('oc.animated')) {\n            $item\n                .hide()\n                .slideDown(200)\n        }\n    }\n\n    //\n    // Proxy API\n    //\n\n    Sortable.prototype.enable = function() {\n        this.$el.jqSortable('enable')\n    }\n\n    Sortable.prototype.disable = function() {\n        this.$el.jqSortable('disable')\n    }\n\n    Sortable.prototype.refresh = function() {\n        this.$el.jqSortable('refresh')\n    }\n\n    Sortable.prototype.serialize = function() {\n        this.$el.jqSortable('serialize')\n    }\n\n    Sortable.prototype.destroy = function() {\n        this.dispose()\n    }\n\n    // External solution for group persistence\n    // See https://github.com/johnny/jquery-sortable/pull/122\n    Sortable.prototype.destroyGroup = function() {\n        var jqSortable = this.$el.data('jqSortable')\n        if (jqSortable.group) {\n            jqSortable.group._destroy()\n        }\n    }\n\n    Sortable.DEFAULTS = {\n        useAnimation: false,\n        usePlaceholderClone: false,\n        useDraggingClone: true,\n        tweakCursorAdjustment: null\n    }\n\n    // PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.sortable\n\n    $.fn.sortable = function (option) {\n        var args = arguments;\n\n        return this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.sortable')\n            var options = $.extend({}, Sortable.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.sortable', (data = new Sortable(this, options)))\n            if (typeof option == 'string') data[option].apply(data, args)\n        })\n    }\n\n    $.fn.sortable.Constructor = Sortable\n\n    $.fn.sortable.noConflict = function () {\n        $.fn.sortable = old\n        return this\n    }\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/drag/drag.value.js",
    "content": "/*\n * Drag Value plugin\n *\n * Uses native dragging to allow elements to be dragged in to inputs, textareas, etc\n *\n * Data attributes:\n * - data-control=\"dragvalue\" - enables the plugin on an element\n * - data-text-value=\"text to include\" - text value to include when dragging\n * - data-drag-click=\"false\" - allow click event, tries to cache the last active element\n *                             and insert the text at the current cursor position\n *\n * JavaScript API:\n * $('a#someElement').dragValue({ textValue: 'insert this text' })\n *\n */\n\n+function ($) { \"use strict\";\n\n    // DRAG VALUE CLASS DEFINITION\n    // ============================\n\n    var DragValue = function(element, options) {\n        this.options   = options\n        this.$el       = $(element)\n\n        // Init\n        this.init()\n    }\n\n    DragValue.DEFAULTS = {\n        dragClick: false\n    }\n\n    DragValue.prototype.init = function() {\n        this.$el.prop('draggable', true)\n        this.textValue = this.$el.data('textValue')\n\n        this.$el.on('dragstart', $.proxy(this.handleDragStart, this))\n        this.$el.on('drop', $.proxy(this.handleDrop, this))\n        this.$el.on('dragend', $.proxy(this.handleDragEnd, this))\n\n        if (this.options.dragClick) {\n            this.$el.on('click', $.proxy(this.handleClick, this))\n            this.$el.on('mouseover', $.proxy(this.handleMouseOver, this))\n        }\n    }\n\n    //\n    // Drag events\n    //\n\n    DragValue.prototype.handleDragStart = function(event) {\n        var e = event.originalEvent\n        e.dataTransfer.effectAllowed = 'all'\n        e.dataTransfer.setData('text/plain', this.textValue)\n\n        this.$el\n            .css({ opacity: 0.5 })\n            .addClass('dragvalue-dragging')\n    }\n\n    DragValue.prototype.handleDrop = function(event) {\n        event.stopPropagation()\n        return false\n    }\n\n    DragValue.prototype.handleDragEnd = function(event) {\n        this.$el\n            .css({ opacity: 1 })\n            .removeClass('dragvalue-dragging')\n    }\n\n    //\n    // Click events\n    //\n\n    DragValue.prototype.handleMouseOver = function(event) {\n        var el = document.activeElement\n        if (!el) return\n\n        if (el.isContentEditable || (\n            el.tagName.toLowerCase() == 'input' &&\n            el.type == 'text' ||\n            el.tagName.toLowerCase() == 'textarea'\n        )) {\n            this.lastElement = el\n        }\n    }\n\n    DragValue.prototype.handleClick = function(event) {\n        if (!this.lastElement) return\n\n        var $el = $(this.lastElement)\n\n        if ($el.hasClass('ace_text-input'))\n            return this.handleClickCodeEditor(event, $el)\n\n        if (this.lastElement.isContentEditable)\n            return this.handleClickContentEditable()\n\n        this.insertAtCaret(this.lastElement, this.textValue)\n    }\n\n    DragValue.prototype.handleClickCodeEditor = function(event, $el) {\n        var $editorArea = $el.closest('[data-control=codeeditor]')\n        if (!$editorArea.length) return\n\n        $editorArea.codeEditor('getEditorObject').insert(this.textValue)\n    }\n\n    DragValue.prototype.handleClickContentEditable = function() {\n        var sel, range, html;\n        if (window.getSelection) {\n            sel = window.getSelection();\n            if (sel.getRangeAt && sel.rangeCount) {\n                range = sel.getRangeAt(0);\n                range.deleteContents();\n                range.insertNode( document.createTextNode(this.textValue) );\n            }\n        }\n        else if (document.selection && document.selection.createRange) {\n            document.selection.createRange().text = this.textValue;\n        }\n    }\n\n    //\n    // Helpers\n    //\n\n    DragValue.prototype.insertAtCaret = function(el, insertValue) {\n        // IE\n        if (document.selection) {\n            el.focus()\n            var sel = document.selection.createRange()\n            sel.text = insertValue\n            el.focus()\n        }\n        // Real browsers\n        else if (el.selectionStart || el.selectionStart == '0') {\n            var startPos = el.selectionStart, endPos = el.selectionEnd, scrollTop = el.scrollTop\n            el.value = el.value.substring(0, startPos) + insertValue + el.value.substring(endPos, el.value.length)\n            el.focus()\n            el.selectionStart = startPos + insertValue.length\n            el.selectionEnd = startPos + insertValue.length\n            el.scrollTop = scrollTop\n        }\n        else {\n            el.value += insertValue\n            el.focus()\n        }\n    }\n\n    // DRAG VALUE PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.dragValue\n\n    $.fn.dragValue = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.dragvalue')\n            var options = $.extend({}, DragValue.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.dragvalue', (data = new DragValue(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        })\n\n        return result ? result : this\n    }\n\n    $.fn.dragValue.Constructor = DragValue\n\n    // DRAG VALUE NO CONFLICT\n    // =================\n\n    $.fn.dragValue.noConflict = function () {\n        $.fn.dragValue = old\n        return this\n    }\n\n    // DRAG VALUE DATA-API\n    // ===============\n\n    $(document).render(function() {\n        $('[data-control=\"dragvalue\"]').dragValue()\n    });\n\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/foundation/README.md",
    "content": "# Foundation\n\nThe foundation libraries are the core base of all scripts and controls. The goals of this library are:\n\n- Well structured and readable code.\n- Don't leave references to DOM elements.\n- Unbind all event handlers.\n- Write high-performance code (in cases when it's needed).\n\nThat's especially important on pages where users spend much time interacting with the page, like the CMS and Pages sections, but all back-end controls should follow these rules, because we never know when they are used.\n\n## Why it's important to release the memory, DOM references and event handlers\n\nA typical JavaScript control class instance consists of the following parts:\n\n1. JavaScript object representing the control.\n1. A reference to the corresponding DOM element. Usually it's the control's root element containing a tree with the control HTML markup.\n1. A number of event handlers to handle user's interaction with the control.\n\nIf any of that components are not released we have these problems:\n\n1. Non-released JavaScript objects increase the memory footprint. The more memory the application uses, the slower it works. Eventually it could result in a crashed tab or entire browser.\n1. Non-released references to DOM elements could result in detached DOM trees. That, in turn, could result in thousands of invisible DOM elements living in a page, increasing the memory footprint and making the application less responsive.\n1. Unbound event handlers usually result in non-released DOM elements, which is bad by itself, and also in the code which executes when the user interacts with the application and which should not be executed. That affects the performance.\n\n## This is how to deal with those problems:\n\n1. Remove the JavaScript object - usually by removing the data from the control's root element: `this.$el.removeData('oc.myControl')`\nClean all references to DOM elements. Usually it's done by assigning NULL to corresponding object properties.\n1. Watch for any references caught by closures (or - better do not use closures, see below).\n1. Unbind event handlers.\n\nOctober Storm provides everything we need to meet the goals. Please read on to learn more!\n\n## How to write quality code\n\nOOP approach and prototypes should be used in all places. This approach automatically deals with closures that could retain references to scope variables. Typical class code template:\n\n```js\nfunction ($) { \"use strict\";\n    var SomeClass = function() {\n        this.init()\n    }\n\n    SomeClass.prototype.init = function (){\n        ...\n    }\n}\n```\n\n## Basics of writing disposable classes\n\nIf a class should be disposable (all UI controls should be disposable), the class should extend `$.oc.foundation.base` class. That class has two useful methods: `proxy(method)` and `dispose()`.\n\n`proxy()` method is an alternative to jQuery's `$.proxy`, but as `$.oc.foundation.base` implements OOP approach, passing this parameter to the method is not required. This method is good for three reasons.\n\n1. It's code is very simple and easily controllable and debuggable.\n1. It caches bound functions and doesn't create new function as `$.proxy` does.\n1. It automatically removes all cached bound functions when the object is disposed with dispose() method.\n\n`dispose()` method in the base class cleans up bound methods cached by `proxy()` method and provides a common API for disposing objects. All classes that are supposed to do clean-up work, should override that method, do their own clean-up and call the base `dispose()` method.\n\nExample of a disposable class:\n\n```js\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var SomeDisposableClass = function(element) {\n        this.$el = $(element)\n\n        Base.call(this)\n        this.init()\n    }\n\n    SomeDisposableClass.prototype = Object.create(BaseProto)\n    SomeDisposableClass.prototype.constructor = SomeDisposableClass\n\n    SomeDisposableClass.prototype.init = function () {\n    }\n\n    SomeDisposableClass.prototype.dispose = function () {\n        this.$el = null\n        BaseProto.dispose.call(this)\n    }\n}\n```\n\nA couple of important things to note:\n\n1. The class constructor should call Base.call(this).\n1. The class prototype should be replaced with a copy of the Base class prototype, and its constructor reference should be restored back to the class constructor. It should be done right after the class constructor and before any method is defined in the class prototype.\n\n## Binding and unbinding events\n\nWhen binding events, use this.proxy() to make references to event handlers. Always unbind events in dispose() method:\n\n```js\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var SomeDisposableClass = function(element) {\n        this.$el = $(element)\n\n        Base.call(this)\n        this.init()\n    }\n\n    [...]\n\n    SomeDisposableClass.prototype.init = function () {\n        this.$el.on('click', this.proxy(this.onClick))\n    }\n\n    SomeDisposableClass.prototype.dispose = function () {\n        this.$el.off('click', this.proxy(this.onClick))\n        this.$el = null\n        BaseProto.dispose.call(this)\n    }\n}\n```\n\n## Making disposable controls\n\nUI controls should support two ways of disposing - with calling their `dispose()` method and with invoking the dispose-control handler. Also, disposable controls should mark their corresponding DOM elements as disposable, with October foundation API. Example:\n\n```js\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var SomeDisposableControl = function(element) {\n        this.$el = $(element)\n\n        $.oc.foundation.controlUtils.markDisposable(element)\n        Base.call(this)\n        this.init()\n    }\n\n    ...\n\n    SomeDisposableControl.prototype.init = function () {\n        this.$el.one('dispose-control', this.proxy(this.dispose))\n    }\n\n    SomeDisposableControl.prototype.dispose = function () {\n        this.$el.off('dispose-control', this.proxy(this.dispose))\n        this.$el = null\n        BaseProto.dispose.call(this)\n    }\n}\n```\n\n`$.oc.foundation.controlUtils.markDisposable(element)` call in the constructor adds `data-disposable` attribute to the DOM element, allowing the framework to find all disposable elements in a container and dispose them by calling their dispose-control handler when it's required.\n\n## Full example of a jQuery plugin that creates a disposable control\n\nWe already have a boilerplate code for jQuery code. Disposable controls approach just extends it. Don't forget to remove the  data associated with controls from their DOM elements.\n\n```js\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var SomeDisposableControl = function (element, options) {\n        this.$el = $(element)\n        this.options = options || {}\n\n        $.oc.foundation.controlUtils.markDisposable(element)\n        Base.call(this)\n        this.init()\n    }\n\n    SomeDisposableControl.prototype = Object.create(BaseProto)\n    SomeDisposableControl.prototype.constructor = SomeDisposableControl\n\n    SomeDisposableControl.prototype.init = function() {\n        this.$el.on('click', this.proxy(this.onClick))\n        this.$el.one('dispose-control', this.proxy(this.dispose))\n    }\n\n    SomeDisposableControl.prototype.dispose = function() {\n        this.$el.off('click', this.proxy(this.onClick))\n        this.$el.off('dispose-control', this.proxy(this.dispose))\n        this.$el.removeData('oc.someDisposableControl')\n\n        this.$el = null\n\n        // In some cases options could contain callbacks, \n        // so it's better to clean them up too.\n        this.options = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    SomeDisposableControl.DEFAULTS = {\n        someParam: null\n    }\n\n    // PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.someDisposableControl\n\n    $.fn.someDisposableControl = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), items, result\n\n        items = this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.someDisposableControl')\n            var options = $.extend({}, SomeDisposableControl.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.someDisposableControl', (data = new SomeDisposableControl(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        })\n\n        return result ? result : items\n    }\n\n    $.fn.someDisposableControl.Constructor = SomeDisposableControl\n\n    $.fn.someDisposableControl.noConflict = function () {\n        $.fn.someDisposableControl = old\n        return this\n    }\n\n    // Add this only if required\n    $(document).render(function (){\n        $('[data-some-disposable-control]').someDisposableControl()\n    })\n\n}(window.jQuery);\n```"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/foundation/foundation.baseclass.js",
    "content": "/*\n * October JavaScript foundation library.\n * \n * Base class for OctoberCMS back-end classes.\n *\n * The class defines base functionality for dealing with memory management\n * and cleaning up bound (proxied) methods.\n *\n * The base class defines the dispose method that cleans up proxied methods. \n * If child classes implement their own dispose() method, they should call \n * the base class dispose method (see the example below).\n *\n * Use the simple parasitic combination inheritance pattern to create child classes:\n * \n * var Base = $.oc.foundation.base,\n *     BaseProto = Base.prototype\n *\n * var SubClass = function(params) {\n *     // Call the parent constructor\n *     Base.call(this)\n * }\n *\n * SubClass.prototype = Object.create(BaseProto)\n * SubClass.prototype.constructor = SubClass\n *\n * // Child class methods can be defined only after the \n * // prototype is updated in the two previous lines\n *\n * SubClass.prototype.dispose = function() {\n *     // Call the parent method\n *     BaseProto.dispose.call(this)\n * };\n *\n * See: \n *\n * - https://developers.google.com/speed/articles/optimizing-javascript\n * - http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/\n * - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript\n *\n */\n+function ($) { \"use strict\";\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.foundation === undefined)\n        $.oc.foundation = {}\n\n    $.oc.foundation._proxyCounter = 0\n\n    var Base = function() {\n        this.proxiedMethods = {}\n    }\n\n    Base.prototype.dispose = function() {\n        for (var key in this.proxiedMethods) {\n            this.proxiedMethods[key] = null\n        }\n\n        this.proxiedMethods = null\n    }\n\n    /*\n     * Creates a proxied method reference or returns an existing proxied method.\n     */\n    Base.prototype.proxy = function(method) {\n        if (method.ocProxyId === undefined) {\n            $.oc.foundation._proxyCounter++\n            method.ocProxyId = $.oc.foundation._proxyCounter\n        }\n\n        if (this.proxiedMethods[method.ocProxyId] !== undefined)\n            return this.proxiedMethods[method.ocProxyId]\n\n        this.proxiedMethods[method.ocProxyId] = method.bind(this)\n        return this.proxiedMethods[method.ocProxyId]\n    }\n\n    $.oc.foundation.base = Base;\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/foundation/foundation.controlutils.js",
    "content": "/*\n * October JavaScript foundation library.\n *\n * Utility functions for working back-end client-side UI controls.\n *\n * Usage examples:\n *\n * $.oc.foundation.controlUtils.markDisposable(el)\n * $.oc.foundation.controlUtils.disposeControls(container)\n *\n */\n+function ($) { \"use strict\";\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.foundation === undefined)\n        $.oc.foundation = {}\n\n    var ControlUtils = {\n        markDisposable: function(el) {\n            el.setAttribute('data-disposable', '')\n        },\n\n        /*\n         * Destroys all disposable controls in a container.\n         * The disposable controls should watch the dispose-control\n         * event.\n         */\n        disposeControls: function(container) {\n            if (container === document) {\n                container = document.documentElement;\n            }\n\n            var controls = container.querySelectorAll('[data-disposable]')\n            for (var i=0, len=controls.length; i<len; i++) {\n                $(controls[i]).triggerHandler('dispose-control')\n            }\n\n            if (container.hasAttribute('data-disposable')) {\n                $(container).triggerHandler('dispose-control')\n            }\n        }\n    }\n\n    $.oc.foundation.controlUtils = ControlUtils;\n\n    // Automatically dispose controls in an element before the element contents is replaced.\n    // The ajaxBeforeReplace event is triggered by the AJAX framework.\n    addEventListener('page:before-render', function(ev) {\n        $.oc.foundation.controlUtils.disposeControls(ev.target);\n    });\n\n    addEventListener('ajax:before-replace', function(ev) {\n        $.oc.foundation.controlUtils.disposeControls(ev.target);\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/foundation/foundation.element.js",
    "content": "/*\n * October JavaScript foundation library.\n * \n * Light-weight utility functions for working with DOM elements. The functions\n * work with elements directly, without jQuery, using the native JavaScript and DOM\n * features.\n *\n * Usage examples:\n *\n * $.oc.foundation.element.addClass(myElement, myClass)\n *\n */\n+function ($) { \"use strict\";\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.foundation === undefined)\n        $.oc.foundation = {}\n\n    var Element = {\n        hasClass: function(el, className) {\n            if (el.classList)\n                return el.classList.contains(className);\n            \n            return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);\n        },\n\n        addClass: function(el, className) {\n            var classes = className.split(' ')\n\n            for (var i = 0, len = classes.length; i < len; i++) {\n                var currentClass = classes[i].trim()\n\n                if (this.hasClass(el, currentClass))\n                    return\n\n                if (el.classList)\n                    el.classList.add(currentClass);\n                else\n                    el.className += ' ' + currentClass;\n            }\n        },\n\n        removeClass: function(el, className) {\n            if (el.classList)\n                el.classList.remove(className);\n            else\n                el.className = el.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n        },\n\n        toggleClass: function(el, className, add) {\n            if (add === undefined) {\n                if (this.hasClass(el, className)) {\n                    this.removeClass(el, className)\n                }\n                else {\n                    this.addClass(el, className)\n                }\n            }\n\n            if (add && !this.hasClass(el, className)) {\n                this.addClass(el, className)\n                return\n            }\n\n            if (!add && this.hasClass(el, className)) {\n                this.removeClass(el, className)\n                return\n            }\n        },\n\n        /*\n         * Returns element absolution position.\n         * If the second parameter value is false, the scrolling\n         * won't be added to the result (which could improve the performance).\n         */\n        absolutePosition: function(element, ignoreScrolling) {\n            var top = ignoreScrolling === true ? 0 : document.body.scrollTop,\n                left = 0\n\n            do {\n                top += element.offsetTop || 0;\n\n                if (ignoreScrolling !== true)\n                    top -= element.scrollTop || 0\n\n                left += element.offsetLeft || 0\n                element = element.offsetParent\n            } while(element)\n\n            return {\n                top: top,\n                left: left\n            }\n        },\n\n        getCaretPosition: function(input) {\n            if (document.selection) { \n               var selection = document.selection.createRange()\n\n               selection.moveStart('character', -input.value.length)\n               return selection.text.length\n            }\n\n            if (input.selectionStart !== undefined)\n               return input.selectionStart\n\n            return 0\n        },\n\n        setCaretPosition: function(input, position) {\n            if (document.selection) { \n                var range = input.createTextRange()\n\n                setTimeout(function() {\n                    // Asynchronous layout update, better performance\n                    range.collapse(true)\n                    range.moveStart(\"character\", position)\n                    range.moveEnd(\"character\", 0)\n                    range.select()\n                    range = null\n                    input = null\n                }, 0)\n            }\n\n            if (input.selectionStart !== undefined) {\n                setTimeout(function() {\n                    // Asynchronous layout update\n                    input.selectionStart = position\n                    input.selectionEnd = position\n                    input = null\n                }, 0)\n            }\n        },\n\n        elementContainsPoint: function(element, point) {\n            var elementPosition = $.oc.foundation.element.absolutePosition(element),\n                elementRight = elementPosition.left + element.offsetWidth,\n                elementBottom = elementPosition.top + element.offsetHeight\n\n            return point.x >= elementPosition.left && point.x <= elementRight \n                    && point.y >= elementPosition.top && point.y <= elementBottom\n        }\n    }\n\n    $.oc.foundation.element = Element;\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/foundation/foundation.event.js",
    "content": "/*\n * October JavaScript foundation library.\n *\n * Light-weight utility functions for working with native DOM events. The functions\n * work with events directly, without jQuery, using the native JavaScript and DOM\n * features.\n *\n * Usage examples:\n *\n * $.oc.foundation.event.stop(ev)\n *\n */\n+function ($) { \"use strict\";\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.foundation === undefined)\n        $.oc.foundation = {}\n\n    var Event = {\n        /*\n         * Returns the event target element.\n         * If the second argument is provided (string), the function\n         * will try to find the first parent with the tag name matching\n         * the argument value.\n         */\n        getTarget: function(ev, tag) {\n            var target = ev.target ? ev.target : ev.srcElement;\n            if (tag === undefined) {\n                return target;\n            }\n\n            var tagName = target.tagName;\n\n            while (tagName != tag) {\n                target = target.parentNode;\n                if (!target) {\n                    return null;\n                }\n\n                tagName = target.tagName;\n            }\n\n            return target;\n        },\n\n        stop: function(ev) {\n            if (ev.stopPropagation) {\n                ev.stopPropagation();\n            }\n            else {\n                ev.cancelBubble = true;\n            }\n\n            if (ev.preventDefault) {\n                ev.preventDefault();\n            }\n            else {\n                ev.returnValue = false;\n            }\n        },\n\n        pageCoordinates: function(ev) {\n            if (ev.pageX || ev.pageY) {\n                return {\n                    x: ev.pageX,\n                    y: ev.pageY\n                };\n            }\n            else if (ev.clientX || ev.clientY) {\n                return {\n                    x: (ev.clientX + document.body.scrollLeft + document.documentElement.scrollLeft),\n                    y: (ev.clientY + document.body.scrollTop + document.documentElement.scrollTop)\n                };\n            }\n\n            return {\n                x: 0,\n                y: 0\n            };\n        }\n    }\n\n    $.oc.foundation.event = Event;\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/rowlink/README.md",
    "content": "# Row Link\n\nYou may link an entire row by adding the `data-control=\"rowlink\"` attribute to the table element. The first table data (TD) column with an anchor will be used to link the entire row. To bypass this behavior, simply add the `nolink` class to the column.\n\n    <div class=\"control-list\">\n        <table class=\"table data\" data-control=\"rowlink\">\n            <tbody>\n                <tr>\n                    <td>\n                        <a href=\"https://octobercms.com\">Link to this</a>\n                    </td>\n                    <td>Row will be linked</td>\n                    <td>This will also be linked</td>\n                    <td class=\"nolink\">No link applied here</td>\n                </tr>\n            </tbody>\n        </table>\n    </div>\n"
  },
  {
    "path": "modules/backend/assets/foundation/scripts/rowlink/rowlink.js",
    "content": "/*\n * Table row linking plugin\n *\n * Data attributes:\n * - data-control=\"rowlink\" - enables the plugin on an element\n * - data-exclude-class=\"nolink\" - disables the link for elements with this class\n * - data-linked-class=\"rowlink\" - this class is added to affected table rows\n *\n * JavaScript API:\n * $('a#someElement').rowLink()\n *\n * Dependencies:\n * - Null\n */\n\n+function ($) { \"use strict\";\n\n    // ROWLINK CLASS DEFINITION\n    // ============================\n\n    var RowLink = function(element, options) {\n        var self       = this;\n        this.options   = options;\n        this.$el       = $(element);\n\n        var tr = this.$el.prop('tagName') == 'TR'\n            ? this.$el\n            : this.$el.find('tr:has(td)');\n\n        tr.each(function() {\n            var link = $(this)\n                .find(options.target)\n                .filter(function(){\n                    return !$(this).closest('td').hasClass(options.excludeClass) &&\n                        !$(this).hasClass(options.excludeClass)\n                })\n                .first();\n\n            if (!link.length) {\n                return;\n            }\n\n            var href = link.attr('href'),\n                onclick = (typeof link.get(0).onclick == \"function\") ? link.get(0).onclick : null,\n                popup = link.is('[data-control=popup]'),\n                request = link.is('[data-request]'),\n                skipNextBubble = false;\n\n            function handleClick(e) {\n                if (skipNextBubble) {\n                    skipNextBubble = false;\n                    return;\n                }\n\n                if ($(document.body).hasClass('drag')) {\n                    return;\n                }\n\n                if (onclick) {\n                    onclick.apply(link.get(0));\n                }\n                else if (request) {\n                    link.request();\n                }\n                else if (popup) {\n                    link.popup();\n                }\n                else if (e.ctrlKey || e.metaKey) {\n                    window.open(href);\n                }\n                else {\n                    if (oc.useTurbo()) {\n                        oc.visit(href);\n                    }\n                    else {\n                        location.assign(href);\n                    }\n                }\n            }\n\n            var $row = $(this).not('.' + options.excludeClass)\n\n            $row.on('click', 'td:not(.'+options.excludeClass+') > .'+options.excludeClass, function(e) {\n                skipNextBubble = true;\n            });\n\n            $row.on('click', 'td:not(.'+options.excludeClass+')', function(e) {\n                handleClick(e);\n            })\n\n            $row.on('mousedown', 'td:not(.'+options.excludeClass+')', function(e) {\n                if (e.which == 2) {\n                    window.open(href);\n                }\n            })\n\n            $row.on('keypress', function(e) {\n                if (e.key === '(Space character)' || e.key === 'Spacebar' || e.key === ' ') {\n                    handleClick(e);\n                    return false;\n                }\n            })\n\n            $(this).addClass(options.linkedClass);\n\n            link.hide().after(link.contents());\n        })\n\n        // Add Keyboard Navigation to list rows\n        $('tr.rowlink').attr('tabindex', 0);\n    }\n\n    RowLink.DEFAULTS = {\n        target: 'a',\n        excludeClass: 'nolink',\n        linkedClass: 'rowlink'\n    }\n\n    // ROWLINK PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.rowLink\n\n    $.fn.rowLink = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1)\n        return this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.rowlink')\n            var options = $.extend({}, RowLink.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.rowlink', (data = new RowLink(this, options)))\n            else if (typeof option == 'string') data[option].apply(data, args)\n        })\n    }\n\n    $.fn.rowLink.Constructor = RowLink\n\n    // ROWLINK NO CONFLICT\n    // =================\n\n    $.fn.rowLink.noConflict = function () {\n        $.fn.rowLink = old\n        return this\n    }\n\n    // ROWLINK DATA-API\n    // ===============\n\n    $(document).render(function() {\n        $('[data-control=\"rowlink\"]').rowLink()\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/foundation/util/config.js",
    "content": "function normalizeData(value) {\n    if (value === 'true') {\n        return true\n    }\n\n    if (value === 'false') {\n        return false\n    }\n\n    if (value === Number(value).toString()) {\n        return Number(value)\n    }\n\n    if (value === '' || value === 'null') {\n        return null\n    }\n\n    if (typeof value !== 'string') {\n        return value\n    }\n\n    try {\n        return JSON.parse(decodeURIComponent(value));\n    }\n    catch {\n        return value;\n    }\n}\n\nfunction normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Config = {\n    setDataAttribute(element, key, value) {\n        element.setAttribute(`data-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n        element.removeAttribute(`data-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n        if (!element) {\n            return {};\n        }\n\n        const attributes = {};\n        const dataKeys = Object.keys(element.dataset);\n\n        for (const key of dataKeys) {\n            attributes[key] = normalizeData(element.dataset[key]);\n        }\n\n        return attributes;\n    },\n\n    getDataAttribute(element, key) {\n        return normalizeData(element.getAttribute(`data-${normalizeDataKey(key)}`))\n    }\n}\n\nexport default Config\n"
  },
  {
    "path": "modules/backend/assets/foundation/util/data.js",
    "content": "const elementMap = new Map();\n\nexport default {\n    set(element, key, instance) {\n        if (!elementMap.has(element)) {\n            elementMap.set(element, new Map());\n        }\n\n        const instanceMap = elementMap.get(element);\n        if (!instanceMap.has(key) && instanceMap.size !== 0) {\n            console.error(`[Foundation] Cannot bind more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n            return;\n        }\n\n        instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n        if (elementMap.has(element)) {\n            return elementMap.get(element).get(key) || null;\n        }\n\n        return null;\n    },\n\n    remove(element, key) {\n        if (!elementMap.has(element)) {\n            return;\n        }\n\n        const instanceMap = elementMap.get(element);\n\n        instanceMap.delete(key);\n\n        if (instanceMap.size === 0) {\n            elementMap.delete(element);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/images/october-login-ai-generated/1/background.css",
    "content": "background: #E9E6E6;"
  },
  {
    "path": "modules/backend/assets/images/october-login-ai-generated/2/background.css",
    "content": "background: #D4E9C1;"
  },
  {
    "path": "modules/backend/assets/images/october-login-ai-generated/3/background.css",
    "content": "background: #D6C15E;"
  },
  {
    "path": "modules/backend/assets/images/october-login-ai-generated/4/background.css",
    "content": "background: #361d34;"
  },
  {
    "path": "modules/backend/assets/images/october-login-ai-generated/5/background.css",
    "content": "background: #20111C;"
  },
  {
    "path": "modules/backend/assets/images/october-login-ai-generated/6/background.css",
    "content": "background: #251108;"
  },
  {
    "path": "modules/backend/assets/images/october-login-ai-generated/7/background.css",
    "content": "background: #FDD47F;"
  },
  {
    "path": "modules/backend/assets/images/october-login-gradients/1.css",
    "content": ".gradient-background {\n    position: relative;\n    display: block;\n    height: 100vh;\n    width: 100%;\n    overflow: hidden;\n    /* Elegant gradient background */\n    background: linear-gradient(120deg, #e7dacb 0%, #fff6e9 60%, #cdb4db 100%);\n    box-shadow: 0 0 0 100vw rgba(139, 114, 82, 0.09) inset;\n    isolation: isolate;\n    &:before {\n        content: '';\n        position: absolute;\n        inset: 0;\n        pointer-events: none;\n        z-index: 1;\n        background:\n            repeating-radial-gradient(circle at 70% 20%, #ffe4b5 0%, #fffbe8 15%, transparent 30%, transparent 100%),\n            repeating-radial-gradient(circle at 20% 80%, #ceb99288 0%, #fffbe833 18%, transparent 40%, transparent 100%);\n        opacity: 0.16;\n        mix-blend-mode: lighten;\n    }\n    &:after {\n        /* Subtle noise grain for tactile feeling */\n        content: '';\n        position: absolute;\n        inset: 0;\n        pointer-events: none;\n        z-index: 3;\n        opacity: 0.10;\n        background:\n            url('data:image/svg+xml;utf8,<svg width=\"100\" height=\"100\" xmlns=\"http://www.w3.org/2000/svg\"><filter id=\"n\"><feTurbulence baseFrequency=\"0.6\" seed=\"8\" type=\"fractalNoise\"/></filter><rect width=\"100%\" height=\"100%\" filter=\"url(%23n)\" opacity=\"0.7\"/></svg>');\n        mix-blend-mode: soft-light;\n    }\n    .blob {\n        position: absolute;\n        border-radius: 50%;\n        pointer-events: none;\n        opacity: 0.20;\n        filter: blur(60px);\n        z-index: 0;\n        animation: gradient-bg-blobfade 19s cubic-bezier(.77,0,.18,1) infinite alternate;\n    }\n    .blob.blob1 {\n        width: 38vw;\n        height: 38vw;\n        top: 12vh;\n        left: 10vw;\n        background: radial-gradient(circle, #fff1c1 0%, #ffe4b5 80%, transparent 100%);\n        animation-delay: 0s;\n    }\n    .blob.blob2 {\n        width: 50vw;\n        height: 50vw;\n        bottom: -10vh;\n        right: 6vw;\n        background: radial-gradient(circle, #ccb2a3 0%, #f0e1d2 70%, transparent 100%);\n        animation-delay: 12s;\n    }\n}\n\n@keyframes gradient-bg-blobfade {\n    0% {\n        transform: scale(1) translate(0,0);\n        opacity: 0.16;\n    }\n    70% {\n        transform: scale(1.05) translate(20px, -12px);\n        opacity: 0.21;\n    }\n    100% {\n        transform: scale(1) translate(-14px, 18px);\n        opacity: 0.17;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/js/auth/auth.js",
    "content": "jQuery(function() {\n    $('form input[type=text], form input[type=password]').first().trigger('focus');\n});\n"
  },
  {
    "path": "modules/backend/assets/js/backend/backend.ajax.js",
    "content": "/*\n * October AJAX Enhancements\n */\n\n\n// Persist site selection across requests\n//\naddEventListener('ajax:setup', function(event) {\n    var siteId = $('meta[name=\"backend-site\"]').attr('content');\n    if (siteId) {\n        var options = event.detail.context.options;\n        if (!options.headers) {\n            options.headers = {};\n        }\n        options.headers['X-SITE-ID'] = siteId;\n    }\n});\n\n// Adds the option to merge in a parent data with the current request\n// this is used by modals that need the state of a parent form\n//\naddEventListener('ajax:setup', function(event) {\n    const context = event.detail.context,\n        $el = context.el;\n\n    if (!$el || !$el.closest) {\n        return;\n    }\n\n    const $form = $el.closest('form');\n    if (!$form || !$form.dataset || !$form.dataset.requestParentForm) {\n        return;\n    }\n\n    var paramToObj = function(name, value) {\n        if (value === undefined) {\n            value = '';\n        }\n\n        if (typeof value == 'object') {\n            return value;\n        }\n\n        try {\n            return oc.parseJSON(\"{\" + value + \"}\");\n        }\n        catch (e) {\n            throw new Error('Error parsing the '+name+' attribute value. '+e);\n        }\n    }\n\n    var elementParents = function(element, selector) {\n        const parents = [];\n        if (!element.parentNode) {\n            return parents;\n        }\n\n        let ancestor = element.parentNode.closest(selector);\n        while (ancestor) {\n            parents.push(ancestor);\n            ancestor = ancestor.parentNode.closest(selector);\n        }\n\n        return parents;\n    }\n\n    var extractDataFromForms = function(parentFormId) {\n        if (!parentFormId) {\n            return;\n        }\n\n        const $parent = document.querySelector(parentFormId);\n        if (!$parent) {\n            return;\n        }\n\n        let $parentForm = $parent.closest('form');\n        if (!$parentForm) {\n            $parentForm = $parent;\n        }\n\n        let data = oc.serializeJSON($parentForm) || {};\n\n        elementParents($parent, '[data-request-data]').reverse().forEach(function(el) {\n            Object.assign(data, paramToObj(\n                'data-request-data',\n                el.getAttribute('data-request-data')\n            ));\n        });\n\n        if (!$parentForm.dataset || !$parentForm.dataset.requestParentForm) {\n            return data;\n        }\n\n        return {\n            ...extractDataFromForms($parentForm.dataset.requestParentForm) || {},\n            ...data\n        };\n    }\n\n    context.options.data = {\n        ...extractDataFromForms($form.dataset.requestParentForm) || {},\n        ...context.options.data || {}\n    };\n});\n"
  },
  {
    "path": "modules/backend/assets/js/backend/backend.fixes.js",
    "content": "/*\n * Backend Browser Fixes\n */\n\n/*\n * Internet Explorer v11\n * - IE11 will not honor height 100% when overflow is used on the Y axis.\n */\nif (!!window.MSInputMethodContext && !!document.documentMode) {\n    $(window).on('resize', function() {\n        fixMediaManager()\n        fixSidebar()\n    })\n\n    function fixMediaManager() {\n        var $el = $('div[data-control=\"media-manager\"] .control-scrollpad')\n        $el.height($el.parent().height())\n    }\n\n    function fixSidebar() {\n        $('#layout-sidenav').height(Math.max(\n            $('#layout-body').innerHeight(),\n            $(window).height() - $('#layout-mainmenu').height()\n        ))\n    }\n}\n\n/*\n * Firefox: Drag events are broken by design.\n *\n * \"Note though that it doesn't specify what the properties should be set to, just that they should be set and we currently set them to 0.\"\n * Patch for firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n */\nif(/Firefox\\/\\d+[\\d\\.]*/.test(navigator.userAgent) && typeof window.DragEvent === 'function' && typeof window.addEventListener === 'function') (function(){\n    var cx, cy, px, py, ox, oy, sx, sy, lx, ly;\n    function update(e) {\n        cx = e.clientX; cy = e.clientY;\n        px = e.pageX;   py = e.pageY;\n        ox = e.offsetX; oy = e.offsetY;\n        sx = e.screenX; sy = e.screenY;\n        lx = e.layerX;  ly = e.layerY;\n    }\n    function assign(e) {\n        e._ffix_cx = cx; e._ffix_cy = cy;\n        e._ffix_px = px; e._ffix_py = py;\n        e._ffix_ox = ox; e._ffix_oy = oy;\n        e._ffix_sx = sx; e._ffix_sy = sy;\n        e._ffix_lx = lx; e._ffix_ly = ly;\n    }\n    window.addEventListener('mousemove', update, true);\n    window.addEventListener('dragover', update, true);\n\n    // bug #505521 identifies these three listeners as problematic:\n    // (although tests show 'dragstart' seems to work now, keep to be compatible)\n    window.addEventListener('dragstart', assign, true);\n    window.addEventListener('drag', assign, true);\n    window.addEventListener('dragend', assign, true);\n\n    var me = Object.getOwnPropertyDescriptors(window.MouseEvent.prototype),\n        ue = Object.getOwnPropertyDescriptors(window.UIEvent.prototype);\n\n    function getter(prop,repl) {\n        return function() {return me[prop] && me[prop].get.call(this) || Number(this[repl]) || 0};\n    }\n\n    function layerGetter(prop,repl) {\n        return function() {return this.type === 'dragover' && ue[prop] ? ue[prop].get.call(this) : (Number(this[repl]) || 0)};\n    }\n\n    Object.defineProperties(window.DragEvent.prototype,{\n        clientX: {get: getter('clientX', '_ffix_cx')},\n        clientY: {get: getter('clientY', '_ffix_cy')},\n        pageX:   {get: getter('pageX', '_ffix_px')},\n        pageY:   {get: getter('pageY', '_ffix_py')},\n        offsetX: {get: getter('offsetX', '_ffix_ox')},\n        offsetY: {get: getter('offsetY', '_ffix_oy')},\n        screenX: {get: getter('screenX', '_ffix_sx')},\n        screenY: {get: getter('screenY', '_ffix_sy')},\n        x:       {get: getter('x', '_ffix_cx')},\n        y:       {get: getter('y', '_ffix_cy')},\n        layerX:  {get: layerGetter('layerX', '_ffix_lx')},\n        layerY:  {get: layerGetter('layerY', '_ffix_ly')}\n    });\n})();\n"
  },
  {
    "path": "modules/backend/assets/js/backend/backend.js",
    "content": "/*\n * October General Utilities\n */\n\n// Security helper\n// Prevents front end service workers from leaking in to the backend\n//\nfunction unregisterServiceWorkers() {\n    if (location.protocol === 'https:') {\n        navigator.serviceWorker.getRegistrations().then(\n            function(registrations) {\n                for (var index=0; index<registrations.length; index++) {\n                    registrations[index].unregister({ immediate: true })\n                }\n            }\n        );\n    }\n}\n\n\n// Path helpers\n//\nif ($.oc === undefined) {\n    $.oc = {};\n}\n\n$.oc.backendUrl = function(url) {\n    var backendBasePath = $('meta[name=\"backend-base-path\"]').attr('content');\n\n    if (!backendBasePath) {\n        return url;\n    }\n\n    if (url.substr(0, 1) == '/') {\n        url = url.substr(1);\n    }\n\n    return backendBasePath + '/' + url;\n}\n\n$.oc.backendCalculateTopContainerOffset = function() {\n    var height = $('#layout-mainmenu > .main-menu-container').outerHeight();\n\n    if ($('#layout-banner-area').length) {\n        height += $('#layout-banner-area').outerHeight();\n    }\n\n    return height;\n}\n\n// String escape\n//\n$.oc.escapeHtmlString = function(string) {\n    var htmlEscapes = {\n            '&': '&amp;',\n            '<': '&lt;',\n            '>': '&gt;',\n            '\"': '&quot;',\n            \"'\": '&#x27;',\n            '/': '&#x2F;'\n        },\n        htmlEscaper = /[&<>\"'\\/]/g\n\n    return ('' + string).replace(htmlEscaper, function(match) {\n        return htmlEscapes[match];\n    });\n}\n\n// Touch Detection\n// Returns true only for pure touch devices (no mouse), false for hybrid devices like touch laptops\n//\n$.oc.isTouchEnabled = function() {\n    return window.matchMedia('(pointer: coarse)').matches &&\n        !window.matchMedia('(pointer: fine)').matches;\n}\n\n// Color Modes\n//\n$.oc.setColorModeTheme = function(theme) {\n    if (theme === 'auto') {\n        theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n    }\n    document.documentElement.setAttribute('data-bs-theme', theme);\n}\n\n;(function() {\n    if (document.documentElement.classList.contains('color-mode-auto')) {\n        var current = document.documentElement.getAttribute('data-bs-theme'),\n            preferred = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n\n        if (current === 'auto' || preferred !== Cookies.get('admin_color_mode_setting')) {\n            Cookies.set('admin_color_mode_setting', preferred, { expires: 365, path: '/' });\n            $.oc.setColorModeTheme(preferred);\n        }\n    }\n\n    if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n        addEventListener('render', function() {\n            const darkFavicon = document.querySelector('head > link[data-favicon-dark]');\n            if (darkFavicon) {\n                darkFavicon.href = darkFavicon.dataset.faviconDark;\n            }\n        });\n    }\n})();\n\n// Color Switcher\n//\n\noc.registerControl('color-mode-switcher', class extends oc.ControlBase {\n    init() {\n        this.$anchor = this.element.querySelector('a');\n        this.$label = this.element.querySelector('.nav-label');\n        this.$icon = this.element.querySelector('.nav-icon > i');\n    }\n\n    connect() {\n        this.listen('click', this.$anchor, this.onToggleSwitch)\n        this.updateUi();\n    }\n\n    onToggleSwitch() {\n        var current = this.getCurrentMode(),\n            preferred;\n\n        if (current === 'light') {\n            preferred = 'dark';\n        }\n        else if (current === 'dark') {\n            preferred = 'auto';\n        }\n        else {\n            preferred = 'light';\n        }\n\n        $.oc.setColorModeTheme(preferred);\n\n        Cookies.set('admin_color_mode_user', preferred, { expires: 365, path: '/' });\n\n        if (preferred === 'auto') {\n            document.documentElement.classList.add('color-mode-auto');\n        }\n        else {\n            document.documentElement.classList.remove('color-mode-auto');\n        }\n\n        this.updateUi();\n    }\n\n    updateUi() {\n        var mode = this.getCurrentMode();\n\n        if (mode === 'light') {\n            this.$label.innerText = this.element.dataset.langDarkMode;\n            this.$icon.setAttribute('class', 'icon-moon');\n        }\n        else if (mode === 'dark') {\n            this.$label.innerText = this.element.dataset.langAutoMode;\n            this.$icon.setAttribute('class', 'icon-adjust');\n        }\n        else {\n            this.$label.innerText = this.element.dataset.langLightMode;\n            this.$icon.setAttribute('class', 'icon-sun');\n        }\n    }\n\n    getCurrentMode() {\n        var userCookie = Cookies.get('admin_color_mode_user');\n        if (userCookie === 'auto') {\n            return 'auto';\n        }\n        if (document.documentElement.classList.contains('color-mode-auto') && !userCookie) {\n            return 'auto';\n        }\n        return document.documentElement.getAttribute('data-bs-theme');\n    }\n});\n"
  },
  {
    "path": "modules/backend/assets/js/controls/settings-nav.js",
    "content": "oc.registerControl('settings-nav', class extends oc.ControlBase {\n    init() {\n        this.treeName = this.config.treeName || 'settingsNav';\n        this.statusCookieName = this.treeName + 'GroupStatus';\n        this.searchCookieName = this.treeName + 'Search';\n        this.$searchInput = this.element.querySelector(this.config.searchInput);\n        this.rememberSearch = !(this.config.rememberSearch === 'false' || this.config.rememberSearch === '0');\n    }\n\n    connect() {\n        this.listen('click', 'li > div.group', this.toggleGroup);\n        this.listen('click', '[data-clear-search]', this.clearSearch);\n        this.listen('input', this.$searchInput, this.handleSearchChange);\n        this.listen('scrollbar:ready', '[data-control=scrollbar]', this.initScrollbar);\n\n        window.addEventListener('scroll', this.proxy(this.toggleScrollState));\n\n        this.initSearch();\n\n        this.element.style.visibility = 'hidden';\n        document.body.classList.add('has-settings-nav');\n    }\n\n    disconnect() {\n        window.removeEventListener('scroll', this.proxy(this.toggleScrollState));\n\n        document.body.classList.remove('has-settings-nav');\n    }\n\n    // Toggle scroll state\n    //\n\n    toggleScrollState() {\n        if (window.scrollY > 0) {\n            this.element.classList.add('is-full');\n        } else {\n            this.element.classList.remove('is-full');\n        }\n    }\n\n    // Scrollbars\n    //\n\n    initScrollbar(event) {\n        var activeItem = this.element.querySelector('li.active'),\n            active = activeItem ? activeItem.closest('[data-group-code]') : null;\n\n        if (active) {\n            const $group = active.closest('li');\n            if ($group) {\n                this.expandGroup($group, 0);\n            }\n\n            oc.fetchControl(event.delegateTarget, 'scrollbar')\n                ?.gotoElement(active);\n        }\n\n        this.element.style.visibility = 'visible';\n    }\n\n    // Groups\n    //\n\n    toggleGroup(event) {\n        event.preventDefault();\n        const\n            $group = event.delegateTarget.closest('li'),\n            status = $group.dataset.status;\n\n        if (status === undefined || status === 'expanded') {\n            this.collapseGroup($group);\n        }\n        else {\n            this.expandGroup($group);\n        }\n    }\n\n    collapseGroup($group) {\n        const $list = $group.querySelector(':scope > ul');\n\n        $list.style.overflow = 'hidden';\n        $($list).animate({ height: 0 }, {\n            duration: 100,\n            queue: false,\n            complete: () => {\n                $list.style.overflow = 'visible';\n                $list.style.display = 'none';\n                $group.dataset.status = 'collapsed';\n                $(window).trigger('oc.updateUi');\n                this.saveGroupStatus($group.dataset.groupCode, true);\n            }\n        });\n    }\n\n    expandGroup($group, duration) {\n        const $list = $group.querySelector(':scope > ul');\n\n        duration = duration === undefined ? 100 : duration;\n        $list.style.overflow = 'hidden';\n        $list.style.height = 0;\n\n        $($list).animate({ height: $list.scrollHeight }, {\n            duration: duration,\n            queue: false,\n            complete: () => {\n                $list.style.overflow = 'visible';\n                $list.style.height = 'auto';\n                $list.style.display = '';\n                $group.dataset.status = 'expanded';\n                $(window).trigger('oc.updateUi');\n                this.saveGroupStatus($group.dataset.groupCode, false);\n            }\n        })\n    }\n\n    saveGroupStatus(groupCode, collapsed) {\n        var collapsedGroups = Cookies.get(this.statusCookieName),\n            updatedGroups = [];\n\n        if (collapsedGroups === undefined) {\n            collapsedGroups = '';\n        }\n\n        collapsedGroups.split('|').forEach((element) => {\n            if (groupCode != element) {\n                updatedGroups.push(element);\n            }\n        })\n\n        if (collapsed) {\n            updatedGroups.push(groupCode);\n        }\n\n        Cookies.set(\n            this.statusCookieName,\n            updatedGroups.join('|'),\n            { expires: 30, path: '/' }\n        );\n    }\n\n    // Search\n    //\n\n    initSearch() {\n        if (this.rememberSearch) {\n            var searchTerm = Cookies.get(this.searchCookieName);\n            if (searchTerm !== undefined && searchTerm.length > 0) {\n                this.$searchInput.value = searchTerm;\n                this.applySearch();\n            }\n        }\n    }\n\n    handleSearchChange(event) {\n        var lastValue = this.$searchInput.dataset.lastSearchValue;\n\n        if (lastValue !== undefined && lastValue == this.$searchInput.value) {\n            return;\n        }\n\n        this.$searchInput.dataset.lastSearchValue = this.$searchInput.value;\n\n        if (this.dataTrackInputTimer !== undefined) {\n            window.clearTimeout(this.dataTrackInputTimer);\n        }\n\n        this.dataTrackInputTimer = window.setTimeout(() => {\n            this.applySearch();\n        }, 300);\n\n        Cookies.set(this.searchCookieName, this.$searchInput.value.trim(), { expires: 30, path: '/' });\n    }\n\n    clearSearch() {\n        this.$searchInput.value = '';\n\n        this.element.classList.remove('is-search-active');\n\n        this.element.querySelectorAll('li').forEach((el) => {\n            el.classList.remove('oc-hide');\n        });\n\n        Cookies.remove(this.searchCookieName);\n    }\n\n    applySearch() {\n        var query = this.$searchInput.value.trim(),\n            words = query.toLowerCase().split(' '),\n            visibleGroups = [],\n            visibleItems = [],\n            $el = $(this.element);\n\n        if (query.length === 0) {\n            this.clearSearch();\n            return;\n        }\n\n        this.element.classList.add('is-search-active');\n\n        // Find visible groups and items\n        $('ul.top-level > li', $el).each((index, item) => {\n            var $li = $(item);\n            if (this.textContainsWords($('div.group h3', $li).text(), words)) {\n                visibleGroups.push($li.get(0));\n\n                $('ul li', $li).each((index, item) => {\n                    visibleItems.push(item);\n                });\n            }\n            else {\n                $('ul li', $li).each((index, item) => {\n                    if (\n                        this.textContainsWords($(item).text(), words) ||\n                        this.textContainsWords($(item).data('keywords'), words)\n                    ) {\n                        visibleGroups.push($li.get(0));\n                        visibleItems.push(item);\n                    }\n                })\n            }\n        })\n\n        // Hide invisible groups and items\n        $('ul.top-level > li', $el).each((index, item) => {\n            var $li = $(item),\n                groupIsVisible = $.inArray(item, visibleGroups) !== -1;\n\n            $li.toggleClass('oc-hide', !groupIsVisible);\n            if (groupIsVisible) {\n                this.expandGroup($li.get(0), 0);\n            }\n\n            $('ul li', $li).each((index, item) => {\n                var $itemLi = $(item);\n\n                $itemLi.toggleClass('oc-hide', $.inArray(item, visibleItems) == -1);\n            })\n        });\n\n        $(window).trigger('resize');\n\n        return false;\n    }\n\n    textContainsWords(text, words) {\n        text = text.toLowerCase();\n\n        for (var i = 0; i < words.length; i++) {\n            if (text.indexOf(words[i]) === -1) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n});\n"
  },
  {
    "path": "modules/backend/assets/js/main.js",
    "content": "/**\n * October CMS Backend Entry Point\n *\n * This is the main entry point for the backend panel. It imports all\n * required scripts, and relies on system/main.js being loaded first\n * for global dependencies like jQuery, Vue, Bootstrap, etc.\n */\n\n// Vue Application\nimport './vueapp/vue-application.js';\nimport './vueapp/vue-control-base.js';\n\n// October Core\nimport './october/october.lang.js';\nimport './october/october.alert.js';\nimport './october/october.snackbar.js';\nimport './october/october.scrollpad.js';\nimport './october/october.sidenav.js';\nimport './october/october.scrollbar.js';\nimport './october/october.filelist.js';\nimport './october/october.layout.js';\nimport './october/october.sidepaneltab.js';\nimport './october/october.simplelist.js';\nimport './october/october.treelist.js';\nimport './october/october.sidenav-tree.js';\nimport './october/october.datetime.js';\nimport './october/october.responsivemenu.js';\nimport './october/october.mainmenu.js';\nimport './october/october.modalfocusmanager.js';\nimport './october/october.domidmanager.js';\nimport './october/october.vueutils.js';\nimport './october/october.tooltip.js';\nimport './october/october.jsmodule.js';\nimport './october/october.flyout.js';\nimport './october/october.tabformexpandcontrols.js';\n\n// Settings nav control\nimport './controls/settings-nav.js';\n\n// Backend core\nimport './backend/backend.js';\nimport './backend/backend.ajax.js';\nimport './backend/backend.fixes.js';\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.alert.js",
    "content": "/*\n * Alerts\n *\n * Displays alert and confirmation dialogs\n *\n * JavaScript API:\n * oc.alert()\n * oc.confirm()\n *\n * Dependencies:\n * - Translations (october.lang.js)\n */\n(function($){\n    if (window.oc === undefined) {\n        window.oc = {};\n    }\n\n    oc.alert = function(message, title) {\n        var messageTitle = typeof title !== 'string' ?  $.oc.lang.get('alert.error') : title;\n\n        if (!oc.vueComponentHelpers || !oc.vueComponentHelpers.modalUtils) {\n            alert(message);\n            return;\n        }\n\n        oc.vueComponentHelpers.modalUtils.showAlert(messageTitle, message, {\n            buttonText: $.oc.lang.get('alert.dismiss')\n        });\n    };\n\n    oc.confirm = function(message, callback, title) {\n        oc.confirmPromise(message, title).then(function () {\n            callback(true);\n        }, function () {\n            callback(false);\n        });\n    }\n\n    oc.confirmPromise = function(message, title) {\n        var messageTitle = typeof title !== 'string'\n            ? $.oc.lang.get('alert.confirm')\n            : title;\n\n        return oc.vueComponentHelpers.modalUtils.showConfirm(messageTitle, message, {});\n    }\n\n    // @deprecated\n    if ($.oc === undefined) {\n        $.oc = {};\n    }\n    $.oc.alert = oc.alert;\n    $.oc.confirm = oc.confirm;\n    $.oc.confirmPromise = oc.confirmPromise;\n})(jQuery);\n\n/*\n * Implement alerts with AJAX framework\n */\n\n$(window).on('ajaxErrorMessage', function(event, message) {\n    if (!message) {\n        return;\n    }\n\n    oc.alert(message);\n\n    // Prevent the default alert() message\n    event.preventDefault();\n})\n\n$(window).on('ajaxConfirmMessage', function(event, message, promise) {\n    if (!message) {\n        return;\n    }\n\n    oc.confirm(message, function(isConfirm) {\n        isConfirm ? promise.resolve() : promise.reject();\n    });\n\n    // Prevent the default confirm() message\n    event.preventDefault();\n    return true;\n});\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.datetime.js",
    "content": "/*\n * Date time converter.\n * See moment.js for format options.\n * http://momentjs.com/docs/#/displaying/format/\n *\n * Usage:\n *\n * <time\n *      data-datetime-control\n *      datetime=\"2014-11-19 01:21:57\"\n *      data-format=\"dddd Do [o]f MMMM YYYY hh:mm:ss A\"\n *      data-timezone=\"Australia/Sydney\"\n *      data-locale=\"en-au\">This text will be replaced</time>\n *\n * Alias options:\n *\n * time             -> 6:28 AM\n * timeLong         -> 6:28:01 AM\n * date             -> 04/23/2016\n * dateMin          -> 4/23/2016\n * dateLong         -> April 23, 2016\n * dateLongMin      -> Apr 23, 2016\n * dateTime         -> April 23, 2016 6:28 AM\n * dateTimeMin      -> Apr 23, 2016 6:28 AM\n * dateTimeLong     -> Saturday, April 23, 2016 6:28 AM\n * dateTimeLongMin  -> Sat, Apr 23, 2016 6:29 AM\n *\n */\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var DateTimeConverter = function (element, options) {\n        this.$el = $(element);\n        this.options = options || {};\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        Base.call(this);\n        this.init();\n    }\n\n    DateTimeConverter.prototype = Object.create(BaseProto);\n    DateTimeConverter.prototype.constructor = DateTimeConverter;\n\n    DateTimeConverter.prototype.init = function() {\n        this.initDefaults();\n\n        this.datetime = this.$el.attr('datetime');\n\n        this.$el.text(this.getDateTimeValue());\n\n        this.$el.attr('title', this.datetime);\n\n        this.$el.one('dispose-control', this.proxy(this.dispose));\n    }\n\n    DateTimeConverter.prototype.dispose = function() {\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n        this.$el.removeData('oc.dateTimeConverter');\n\n        this.$el = null;\n        this.options = null;\n        this.datetime = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    DateTimeConverter.prototype.initDefaults = function() {\n        if (!this.options.timezone) {\n            this.options.timezone = $('meta[name=\"backend-timezone\"]').attr('content');\n        }\n\n        if (!this.options.locale) {\n            this.options.locale = $('meta[name=\"backend-locale\"]').attr('content');\n        }\n\n        if (!this.options.format) {\n            this.options.format = 'llll';\n        }\n\n        if (this.options.formatAlias) {\n            this.options.format = this.getFormatFromAlias(this.options.formatAlias);\n        }\n\n        this.appTimezone = $('meta[name=\"app-timezone\"]').attr('content');\n        if (!this.appTimezone) {\n            this.appTimezone = 'UTC';\n        }\n    }\n\n    DateTimeConverter.prototype.getDateTimeValue = function() {\n        if (this.$el.get(0).hasAttribute('data-ignore-timezone')) {\n            this.appTimezone = 'UTC';\n            this.options.timezone = 'UTC';\n        }\n\n        var momentObj = moment.tz(this.datetime, this.appTimezone),\n            result;\n\n        if (this.options.locale) {\n            momentObj = momentObj.locale(this.options.locale);\n        }\n\n        if (this.options.timezone) {\n            momentObj = momentObj.tz(this.options.timezone);\n        }\n\n        if (this.options.timeSince) {\n            result = momentObj.fromNow();\n        }\n        else if (this.options.timeTense) {\n            result = momentObj.calendar();\n        }\n        else {\n            result = momentObj.format(this.options.format);\n        }\n\n        return result;\n    }\n\n    DateTimeConverter.prototype.getFormatFromAlias = function(alias) {\n        var map = {\n            time: 'LT',\n            timeLong: 'LTS',\n            date: 'L',\n            dateMin: 'l',\n            dateLong: 'LL',\n            dateLongMin: 'll',\n            dateTime: 'LLL',\n            dateTimeMin: 'lll',\n            dateTimeLong: 'LLLL',\n            dateTimeLongMin: 'llll'\n        };\n\n        return map[alias] ? map[alias] : 'llll';\n    }\n\n    DateTimeConverter.DEFAULTS = {\n        format: null,\n        formatAlias: null,\n        timezone: null,\n        locale: null,\n        timeTense: false,\n        timeSince: false\n    }\n\n    // PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.dateTimeConverter\n\n    $.fn.dateTimeConverter = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), items, result;\n\n        items = this.each(function () {\n            var $this   = $(this);\n            var data    = $this.data('oc.dateTimeConverter');\n            var options = $.extend({}, DateTimeConverter.DEFAULTS, $this.data(), typeof option == 'object' && option);\n            if (!data) $this.data('oc.dateTimeConverter', (data = new DateTimeConverter(this, options)));\n            if (typeof option == 'string') result = data[option].apply(data, args);\n            if (typeof result != 'undefined') return false;\n        });\n\n        return result ? result : items;\n    }\n\n    $.fn.dateTimeConverter.Constructor = DateTimeConverter;\n\n    $.fn.dateTimeConverter.noConflict = function () {\n        $.fn.dateTimeConverter = old;\n        return this;\n    }\n\n    $(document).render(function () {\n        $('time[data-datetime-control]').dateTimeConverter();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.domidmanager.js",
    "content": "/*\n * Generates unique DOM element identifiers\n */\n\n+function ($) { \"use strict\";\n    var DomIdManager = function() {\n        var indexes = 1;\n\n        this.generate = function(prefix) {\n            var result = 'id-' + (indexes ++);\n\n            if (typeof prefix == 'string') {\n                result = prefix + '-' + result;\n            }\n\n            return result;\n        };\n    };\n\n    $.oc.domIdManager = new DomIdManager();\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/js/october/october.filelist.js",
    "content": "/*\n * File List\n *\n * Creates a tree list of clickable folders and files.\n *\n * Data attributes:\n * - data-control=\"filelist\" - enables the file list plugin\n * - data-group-status-handler - AJAX handler to execute when a group is collapsed or expanded by a user\n *\n * JavaScript API:\n * $('#list').fileList()\n *\n * Events\n * - open.oc.list - this event is triggered on the list element when an item is clicked.\n *\n * Dependencies:\n * - Null\n */\n\n+function ($) { \"use strict\";\n\n    // FILELIST CLASS DEFINITION\n    // ============================\n\n    var FileList = function(element, options) {\n        this.options   = options\n        this.$el       = $(element)\n\n        this.init();\n    }\n\n    FileList.DEFAULTS = {\n        ignoreItemClick: false\n    }\n\n    FileList.prototype.init = function (){\n        var self = this\n\n        this.$el.on('click', 'li.group > h4 > a, li.group > div.group', function() {\n            self.toggleGroup($(this).closest('li'))\n\n            return false;\n        });\n\n        if (!this.options.ignoreItemClick) {\n            this.$el.on('click', 'li.item > a', function(event) {\n                var e = $.Event('open.oc.list', {relatedTarget: $(this).parent().get(0), clickEvent: event})\n                self.$el.trigger(e, this)\n\n                return false\n            })\n        }\n\n        this.$el.on('ajaxUpdate', $.proxy(this.update, this))\n    }\n\n    FileList.prototype.toggleGroup = function(group) {\n        var $group = $(group);\n\n        $group.attr('data-status') == 'expanded' ?\n            this.collapseGroup($group) :\n            this.expandGroup($group)\n    }\n\n    FileList.prototype.collapseGroup = function(group) {\n        var\n            $list = $('> ul, > div.subitems', group),\n            self = this;\n\n        $list.css('overflow', 'hidden')\n        $list.animate({'height': 0}, { duration: 100, queue: false, complete: function() {\n            $list.css({\n                'overflow': 'visible',\n                'display': 'none'\n            })\n            $(group).attr('data-status', 'collapsed')\n            $(window).trigger('resize')\n        } })\n\n        this.sendGroupStatusRequest(group, 0);\n    }\n\n    FileList.prototype.expandGroup = function(group) {\n        var\n            $list = $('> ul, > div.subitems', group),\n            self = this;\n\n        $list.css({\n            'overflow': 'hidden',\n            'display': 'block',\n            'height': 0\n        })\n        $list.animate({'height': $list[0].scrollHeight}, { duration: 100, queue: false, complete: function() {\n            $list.css({\n                'overflow': 'visible',\n                'height': 'auto'\n            })\n            $(group).attr('data-status', 'expanded')\n            $(window).trigger('resize')\n        } })\n\n        this.sendGroupStatusRequest(group, 1);\n    }\n\n    FileList.prototype.sendGroupStatusRequest = function(group, status) {\n        if (this.options.groupStatusHandler !== undefined) {\n            var groupId = $(group).data('group-id')\n            if (groupId === undefined)\n                groupId = $('> h4 a', group).text();\n\n            $(group).request(this.options.groupStatusHandler, {data: {group: groupId, status: status}})\n        }\n    }\n\n    FileList.prototype.markActive = function(dataId) {\n        $('li.item', this.$el).removeClass('active')\n        if (dataId)\n            $('li.item[data-id=\"'+dataId+'\"]', this.$el).addClass('active')\n\n        this.dataId = dataId\n    }\n\n    FileList.prototype.update = function() {\n        if (this.dataId !== undefined)\n            this.markActive(this.dataId)\n    }\n\n    // FILELIST PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.fileList\n\n    $.fn.fileList = function (option) {\n        var args = arguments;\n\n        return this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.fileList')\n            var options = $.extend({}, FileList.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data) $this.data('oc.fileList', (data = new FileList(this, options)))\n            if (typeof option == 'string') {\n                var methodArgs = [];\n                for (var i=1; i<args.length; i++)\n                    methodArgs.push(args[i])\n\n                data[option].apply(data, methodArgs)\n            }\n        })\n    }\n\n    $.fn.fileList.Constructor = FileList\n\n    // FILELIST NO CONFLICT\n    // =================\n\n    $.fn.fileList.noConflict = function () {\n        $.fn.fileList = old\n        return this\n    }\n\n    // FILELIST DATA-API\n    // ===============\n\n    $(document).ready(function () {\n        $('[data-control=filelist]').fileList()\n    })\n\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/js/october/october.flyout.js",
    "content": "/*\n * Flyout plugin.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    // FLYOUT CLASS DEFINITION\n    // ============================\n\n    var Flyout = function(element, options) {\n        this.$el = $(element)\n        this.$overlay = null\n        this.options = options\n        this.$proxyContainer = $('#layout-sidenav-responsive');\n\n        Base.call(this)\n\n        this.init()\n    }\n\n    Flyout.prototype = Object.create(BaseProto)\n    Flyout.prototype.constructor = Flyout\n\n    Flyout.prototype.dispose = function() {\n        this.removeOverlay()\n        this.$el.removeData('oc.flyout')\n        this.$el = null\n\n        if (this.options.flyoutToggle) {\n            this.removeToggle()\n        }\n\n        BaseProto.dispose.call(this)\n    }\n\n    Flyout.prototype.toggle = function() {\n        if ($(document.body).hasClass('flyout-visible')) {\n            this.hide();\n        }\n        else {\n            this.show();\n        }\n    }\n\n    Flyout.prototype.show = function() {\n        var $cells = this.$el.find('> .layout-cell'),\n            $flyout = this.$el.find('> .flyout-content')\n\n        $('[data-control=layout-sidepanel]').sidePanelTab('hideSidePanel')\n\n        this.removeOverlay()\n\n        for (var i = 0; i < $cells.length; i++) {\n            var $cell = $($cells[i]),\n                width = $cell.width()\n\n            $cell.css('width', width)\n        }\n\n        this.createOverlay()\n\n        window.setTimeout(this.proxy(this.setBodyClass), 1)\n        $flyout.css('width', this.options.flyoutWidth)\n\n        this.hideToggle()\n    }\n\n    Flyout.prototype.hide = function() {\n        var $cells = this.$el.find('> .layout-cell'),\n            $flyout = this.$el.find('> .flyout-content')\n\n        for (var i = 0; i < $cells.length; i++) {\n            var $cell = $($cells[i])\n\n            $cell.css('width', '')\n        }\n\n        $flyout.css('width', 0)\n\n        window.setTimeout(this.proxy(this.removeBodyClass), 1)\n        window.setTimeout(this.proxy(this.removeOverlayAndShowToggle), 300)\n    }\n\n    // FLYOUT INTERNAL METHODS\n    // ============================\n\n    Flyout.prototype.init = function() {\n        this.build()\n    }\n\n    Flyout.prototype.build = function() {\n        if (this.options.flyoutToggle) {\n            this.buildToggle()\n        }\n    }\n\n    Flyout.prototype.buildToggle = function() {\n        var $toggleContainer = $(this.options.flyoutToggle),\n            $toggle = $('<div class=\"flyout-toggle\"><i class=\"icon-chevron-right\"></i></div>')\n\n        $toggle.on('click', this.proxy(this.show))\n        $toggleContainer.append($toggle)\n\n        // Build proxy for responsive menu\n        var $proxyToggle = $('<div class=\"flyout-toggle\"><i class=\"icon-chevron-right\"></i></div>');\n        $proxyToggle.on('click', this.proxy(this.toggle));\n        this.$proxyContainer.append($proxyToggle);\n        this.$proxyContainer.addClass('has-toggle');\n    }\n\n    Flyout.prototype.removeToggle = function() {\n        var $toggle = this.getToggle()\n\n        $toggle.off('click', this.proxy(this.show))\n        $toggle.remove()\n\n        var $proxyToggle = this.getProxyToggle()\n        $proxyToggle.off('click', this.proxy(this.show))\n        $proxyToggle.remove()\n    }\n\n    Flyout.prototype.hideToggle = function() {\n        if (!this.options.flyoutToggle) {\n            return\n        }\n\n        this.getToggle().hide()\n        // this.getProxyToggle().hide()\n    }\n\n    Flyout.prototype.showToggle = function() {\n        if (!this.options.flyoutToggle) {\n            return\n        }\n\n        this.getToggle().show()\n        this.getProxyToggle().show()\n    }\n\n    Flyout.prototype.getToggle = function() {\n        var $toggleContainer = $(this.options.flyoutToggle)\n\n        return $toggleContainer.find('.flyout-toggle')\n    }\n\n    Flyout.prototype.getProxyToggle = function() {\n        return this.$proxyContainer.find('.flyout-toggle')\n    }\n\n    Flyout.prototype.setBodyClass = function() {\n        $(document.body).addClass('flyout-visible')\n    }\n\n    Flyout.prototype.removeBodyClass = function() {\n        $(document.body).removeClass('flyout-visible')\n    }\n\n    Flyout.prototype.createOverlay = function() {\n        this.$overlay = $('<div class=\"flyout-overlay\"/>')\n\n        var position = this.$el.offset()\n\n        this.$overlay.css({\n            top: position.top,\n            left: this.options.flyoutWidth\n        })\n\n        this.$overlay.on('click', this.proxy(this.onOverlayClick))\n        $(document.body).on('keydown', this.proxy(this.onDocumentKeydown))\n\n        $(document.body).append(this.$overlay)\n    }\n\n    Flyout.prototype.removeOverlay = function() {\n        if (!this.$overlay) {\n            return\n        }\n\n        this.$overlay.off('click', this.proxy(this.onOverlayClick))\n        $(document.body).off('keydown', this.proxy(this.onDocumentKeydown))\n\n        this.$overlay.remove()\n        this.$overlay = null\n    }\n\n    Flyout.prototype.removeOverlayAndShowToggle = function() {\n        this.removeOverlay()\n        this.showToggle()\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    Flyout.prototype.onOverlayClick = function() {\n        this.hide()\n    }\n\n    Flyout.prototype.onDocumentKeydown = function(ev) {\n        if (ev.key === 'Escape') {\n            this.hide();\n        }\n    }\n\n    // FLYOUT PLUGIN DEFINITION\n    // ============================\n\n    Flyout.DEFAULTS = {\n        flyoutWidth: 400,\n        flyoutToggle: null\n    }\n\n    var old = $.fn.flyout\n\n    $.fn.flyout = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1),\n            result = undefined\n\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.flyout')\n            var options = $.extend({}, Flyout.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.flyout', (data = new Flyout(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        })\n\n        return result ? result : this\n    }\n\n    $.fn.flyout.Constructor = Flyout\n\n    // FLYOUT NO CONFLICT\n    // =================\n\n    $.fn.flyout.noConflict = function () {\n        $.fn.flyout = old\n        return this\n    }\n\n    // FLYOUT DATA-API\n    // ===============\n\n    // Currently flyouts don't use the document render event\n    // and can't be created dynamically (performance considerations).\n    $(document).ready(function(){\n        $('div[data-control=flyout]').flyout()\n    })\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/js/october/october.jsmodule.js",
    "content": "+(function($) {\n    'use strict';\n\n    function OctoberModuleRegistry() {\n        this.moduleMap = new Map();\n\n        this.register = function(namespace, registrationFn) {\n            if (this.moduleMap.has(namespace)) {\n                console.info('Module namespace is already registered: ' + namespace);\n                return;\n            }\n\n            this.moduleMap.set(namespace, registrationFn());\n        };\n\n        this.import = function(namespace) {\n            if (!this.exists(namespace)) {\n                throw new Error('Module namespace is not registered: ' + namespace);\n            }\n\n            return this.moduleMap.get(namespace);\n        };\n\n        this.exists = function(namespace) {\n            return this.moduleMap.has(namespace);\n        };\n    }\n\n    if (!window.oc) {\n        window.oc = {};\n    }\n\n    window.oc.Modules = new OctoberModuleRegistry();\n\n    // oc.Module and $.oc.module is @deprecated -sg\n    window.oc.Module = $.oc.module = window.oc.Modules;\n})($);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.lang.js",
    "content": "/*\n * Client side translations\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.lang = (function(lang, messages) {\n    lang.load = function(locale) {\n        if (messages[locale] === undefined) {\n            messages[locale] = {};\n        }\n\n        lang.loadedMessages = messages[locale];\n    }\n\n    lang.set = function(name, value) {\n        if (name.constructor === {}.constructor) {\n            lang.loadedMessages = {\n                ...name,\n                ...lang.loadedMessages\n            };\n        }\n        else {\n            lang.loadedMessages[name] = value;\n        }\n    }\n\n    lang.get = function(name, params) {\n        if (!name) {\n            return;\n        }\n\n        var result = lang.loadedMessages,\n            defaultValue = (typeof params === \"string\") ? params : name;\n\n        $.each(name.split('.'), function(index, value) {\n            if (result[value] === undefined) {\n                result = defaultValue;\n                return false;\n            }\n\n            result = result[value];\n        });\n\n        if (params && typeof params === \"object\") {\n            Object.keys(params).forEach(function(key) {\n                result = result.replace(new RegExp(\":\" + key, \"g\"), params[key]);\n            });\n        }\n\n        return result;\n    }\n\n    if (lang.locale === undefined) {\n        lang.locale = $('html').attr('lang') || 'en';\n    }\n\n    if (lang.loadedMessages === undefined) {\n        lang.load(lang.locale);\n    }\n\n    return lang;\n})(window.oc.lang || {}, window.oc.langMessages);\n\n// Translation helper\nwindow.oc.t = function(name, params) {\n    return oc.lang.get(name, params);\n};\n\n// Migrate jQuery\nif ($.oc === undefined) {\n    $.oc = {};\n}\n\n$.oc.lang = oc.lang;\n$.oc.langMessages = oc.langMessages;\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.layout.js",
    "content": "(function($){\n    var OctoberLayout = function() {\n    }\n\n    OctoberLayout.prototype.setPageTitle = function(title) {\n        var $title = $('title')\n\n        if (this.pageTitleTemplate === undefined)\n            this.pageTitleTemplate = $title.data('titleTemplate')\n\n        $title.text(this.pageTitleTemplate.replace('%s', title))\n    }\n\n    OctoberLayout.prototype.updateLayout = function(title) {\n        var $children, $el, fixedWidth, margin\n\n        $('[data-calculate-width]').each(function(){\n            $children = $(this).children()\n\n            if ($children.length > 0) {\n                fixedWidth = 0\n\n                $children.each(function() {\n                    $el = $(this)\n                    margin = $el.data('oc.layoutMargin')\n\n                    if (margin === undefined) {\n                        margin = parseInt($el.css('marginRight')) + parseInt($el.css('marginLeft'))\n                        $el.data('oc.layoutMargin', margin)\n                    }\n                    fixedWidth += $el.get(0).offsetWidth + margin\n                })\n\n                $(this).width(fixedWidth)\n                $(this).trigger('oc.widthFixed')\n            }\n        })\n    }\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    $.oc.layout = new OctoberLayout()\n\n    $(document).ready(function(){\n        $.oc.layout.updateLayout()\n\n        window.setTimeout($.oc.layout.updateLayout, 100)\n    })\n    $(window).on('resize', function() {\n        $.oc.layout.updateLayout()\n    })\n    $(window).on('oc.updateUi', function() {\n        $.oc.layout.updateLayout()\n    })\n})(jQuery);"
  },
  {
    "path": "modules/backend/assets/js/october/october.mainmenu.js",
    "content": "/*\n * Main menu\n *\n * Dependencies:\n * - ResponsiveMenu (october.responsivemenu.js)\n */\n\n+function ($) { \"use strict\";\n    function MainMenu() {\n        var $mainMenuNavbar = $('#layout-mainmenu .navbar:first'),\n            $mainMenuElement = $('.layout-mainmenu .navbar ul.mainmenu-items'),\n            $leftMenuElement = $('#layout-mainmenu-left'),\n            $leftMenuMainMenu = $leftMenuElement.find('[data-control=toolbar]'),\n            $leftMenuExtrasMenu = $leftMenuElement.find('.mainmenu-extras'),\n            $mainMenuToolbar = $('.layout-mainmenu [data-control=toolbar]'),\n            $menuContainer = $('#layout-mainmenu'),\n            menuHeight = $.oc.backendCalculateTopContainerOffset(),\n            responsiveMenu = new $.oc.responsiveMenu(hideMenus),\n            leftMenuDebounceTimer = null,\n            leftMenuWidth = null,\n            leftMenuLeaveDebounceTimer = null,\n            $overlay = null,\n            isTouch = false,\n            showingTooltips = null,\n            $leftMenuOverlay = null;\n\n        function init() {\n            $leftMenuElement.find('li a')\n                .on('touchstart', onLeftMenuTouch)\n                .on('click', onLeftMenuItemClick);\n\n            $mainMenuElement.on('mouseenter', 'li', onItemHover);\n            $mainMenuElement.on('click', 'li.has-subitems', onItemClick);\n            $mainMenuElement.on('click', '.mainmenu-toggle', onShowResponsiveMenuClick);\n            $leftMenuElement.on('mouseenter', onLeftMenuMouseEnter);\n            $leftMenuElement.on('mouseleave', onLeftMenuMouseLeave);\n            addEventListener('page:unload', hideMenus);\n            addEventListener('backend:hidemenus', hideMenus);\n\n            $mainMenuToolbar.each(function () {\n                var dragScroll = $(this).data('oc.dragScroll');\n                if (dragScroll) {\n                    dragScroll.goToElement($(this).find('ul.mainmenu-items > li.active'), undefined, {'duration': 0, alignBottom: true});\n                }\n            });\n        }\n\n        function displaySubmenu($li) {\n            var submenuIndex = $li.data('submenuIndex'),\n                $submenu = $('.mainmenu-submenu-dropdown[data-submenu-index=' + submenuIndex + ']', $menuContainer),\n                isLeftSideMenu = $li.closest('#layout-mainmenu-left').length > 0;\n\n            $li.addClass('active-dropdown');\n\n            getOverlay().addClass('oc-show');\n\n            if (!isLeftSideMenu) {\n                var menuLeft = $li.offset().left;\n\n                $submenu.css({\n                    top: menuHeight,\n                    left: menuLeft\n                });\n            }\n            else {\n                $(document.body).addClass('left-menu-submenu-displayed');\n                var menuTop = $li.offset().top;\n\n                $submenu.css({\n                    top: menuTop,\n                    left: $leftMenuElement.outerWidth()\n                });\n            }\n\n            $submenu.addClass('oc-invisible');\n            $submenu.addClass('oc-show');\n\n            if (!isLeftSideMenu) {\n                var menuRight = menuLeft + $submenu.width(),\n                    windowWidth = $(window).width();\n\n                if (menuRight > windowWidth - 20) {\n                    $submenu.css({\n                        left: menuLeft - (menuRight - windowWidth) - 20\n                    });\n                }\n            }\n            else {\n                var submenuPosition = $submenu.position(),\n                    menuBottom = $submenu.height() + submenuPosition.top,\n                    windowHeight = window.scrollY + $(document.body).height();\n\n                if (menuBottom > windowHeight - 20) {\n                    $submenu.css({\n                        top: submenuPosition.top - (menuBottom - windowHeight) - 20\n                    });\n                }\n            }\n\n            $submenu.removeClass('oc-invisible');\n            addKeyListener();\n        }\n\n        function onKeyDown(ev) {\n            // Escape\n            if (ev.keyCode == 27) {\n                hideMenus(null, true);\n            }\n        }\n\n        function onLeftMenuTouch(ev) {\n            isTouch = true;\n        }\n\n        function onLeftMenuItemClick(ev) {\n            if (isTouch && !$(document.body).hasClass('reveal-left-side-menu')) {\n                onLeftMenuMouseEnter();\n\n                ev.stopPropagation();\n                ev.preventDefault();\n                return false;\n            }\n        }\n\n        function onLeftMenuMouseEnter() {\n            if (leftMenuLeaveDebounceTimer) {\n                window.clearTimeout(leftMenuLeaveDebounceTimer);\n                leftMenuLeaveDebounceTimer = null;\n            }\n\n            if ($(document.body).hasClass('reveal-left-side-menu')) {\n                return;\n            }\n\n            if (leftMenuDebounceTimer) {\n                window.clearTimeout(leftMenuDebounceTimer);\n            }\n\n            leftMenuDebounceTimer = window.setTimeout(showLeftMenu, 100);\n        }\n\n        function onLeftMenuMouseLeave() {\n            if ($(document.body).hasClass('left-menu-submenu-displayed')) {\n                return;\n            }\n\n            if (leftMenuDebounceTimer) {\n                window.clearTimeout(leftMenuDebounceTimer);\n                leftMenuDebounceTimer = null;\n            }\n\n            if (leftMenuLeaveDebounceTimer) {\n                window.clearTimeout(leftMenuLeaveDebounceTimer);\n            }\n\n            leftMenuLeaveDebounceTimer = window.setTimeout(hideLeftMenu, 300);\n        }\n\n        function getLeftMenuWidth() {\n            if (leftMenuWidth !== null) {\n                return leftMenuWidth;\n            }\n\n            var leftMenuContainer = $leftMenuElement.closest('.left-side-menu-container');\n            leftMenuContainer.addClass('width-check');\n\n            var extrasWidth = 0;\n            $('.nav-label', $leftMenuExtrasMenu).each(function () {\n                var labelTotalWidth = $(this).offset().left + $(this).outerWidth(true) + 20;\n                extrasWidth = Math.max(extrasWidth, labelTotalWidth);\n            });\n\n            leftMenuWidth = Math.max($leftMenuMainMenu.outerWidth(), extrasWidth);\n            leftMenuContainer.removeClass('width-check');\n            return leftMenuWidth;\n        }\n\n        function showLeftMenu() {\n            $(document.body).addClass('reveal-left-side-menu');\n\n            if (!$leftMenuElement.data('original-width')) {\n                $leftMenuElement.data('original-width', $leftMenuElement.width());\n            }\n\n            addKeyListener();\n            getLeftMenuOverlay().addClass('oc-show');\n            $leftMenuElement.width(getLeftMenuWidth());\n        }\n\n        function hideLeftMenu() {\n            if (leftMenuLeaveDebounceTimer) {\n                window.clearTimeout(leftMenuLeaveDebounceTimer);\n                leftMenuLeaveDebounceTimer = null;\n            }\n\n            $leftMenuElement.width($leftMenuElement.data('original-width'));\n            getLeftMenuOverlay().removeClass('oc-show');\n            $(document.body).removeClass('reveal-left-side-menu');\n        }\n\n        function addKeyListener() {\n            $(document).on('keydown.mainmenusubmenu', onKeyDown);\n        }\n\n        function removeKeyListener() {\n            $(document).off('.mainmenusubmenu');\n        }\n\n        function hideSubmenu() {\n            $('li.active-dropdown', $mainMenuElement).removeClass('active-dropdown');\n            $('.mainmenu-submenu-dropdown.oc-show', $menuContainer).removeClass('oc-show');\n            $(document.body).removeClass('left-menu-submenu-displayed');\n        }\n\n        function hideMenus(ev, hideAll) {\n            var isSubmenuDisplayed = $(document.body).hasClass('left-menu-submenu-displayed');\n\n            getOverlay().removeClass('oc-show');\n            hideSubmenu();\n            removeKeyListener();\n\n            if (isSubmenuDisplayed && !hideAll) {\n                return;\n            }\n\n            hideLeftMenu();\n            responsiveMenu.hide();\n        }\n\n        function getOverlay() {\n            if ($overlay) {\n                return $overlay;\n            }\n\n            $overlay = $('<div class=\"mainmenu-submenu-overlay\"></div>')\n                .appendTo(document.body);\n\n            $overlay.on('click', function (ev) {\n                hideMenus(null, ev.pageX > $leftMenuElement.outerWidth());\n            });\n\n            return $overlay;\n        }\n\n        function getLeftMenuOverlay() {\n            if ($leftMenuOverlay) {\n                return $leftMenuOverlay;\n            }\n\n            $leftMenuOverlay = $('<div class=\"mainmenu-leftmenu-overlay\"></div>')\n                .appendTo(document.body);\n\n            $leftMenuOverlay.on('click', hideMenus);\n\n            return $leftMenuOverlay;\n        }\n\n        function onItemHover() {\n            var wantTooltips = $mainMenuNavbar.hasClass('navbar-mode-icons');\n            if (wantTooltips === showingTooltips) {\n                return;\n            }\n\n            showingTooltips = wantTooltips;\n            $('li', $mainMenuElement).each(function() {\n                var $li = $(this);\n                if (wantTooltips) {\n                    $li.attr('data-tooltip-text', $('.nav-label', $li).text().trim());\n                }\n                else {\n                    $li.removeAttr('data-tooltip-text');\n                }\n            });\n        }\n\n        function onItemClick(ev) {\n            var $li = $(ev.currentTarget).closest('li');\n\n            ev.preventDefault();\n\n            if ($(document.body).hasClass('drag')) {\n                return false;\n            }\n\n            displaySubmenu($li);\n            return false;\n        }\n\n        function onShowResponsiveMenuClick(ev) {\n            ev.preventDefault();\n\n            addKeyListener();\n            getOverlay().addClass('oc-show');\n            responsiveMenu.show();\n            return false;\n        }\n\n        init();\n\n        $.oc.mainMenu = this;\n\n        this.reload = function reload(mainMenuHtml, mainMenuLeftHtml, sidenavResponsiveHtml) {\n            if (mainMenuHtml) {\n                $('#layout-mainmenu').html(mainMenuHtml);\n            }\n            if (mainMenuLeftHtml) {\n                $('#layout-mainmenu-left').html(mainMenuLeftHtml);\n            }\n            if (sidenavResponsiveHtml) {\n                $('#layout-sidenav-responsive').html(sidenavResponsiveHtml);\n            }\n\n            $.oc.mainMenu = new MainMenu();\n        };\n    }\n\n    $(document).render(function() {\n        var $this = $('.layout-mainmenu:first');\n        var data = $this.data('oc.mainMenu');\n        if (!data) $this.data('oc.mainMenu', (data = new MainMenu()));\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.modalfocusmanager.js",
    "content": "/*\n * Manages a stack of modal elements that can lock Tab focus\n */\n\n+(function($) {\n    'use strict';\n    var ModalFocusManager = function() {\n        var modalStack = [];\n\n        function addEventAndCall(callback) {\n            $(document).on('focusin.octoberfocusmanager', callback);\n            callback(null);\n        }\n\n        function removeCallbacks() {\n            $(document).off('.octoberfocusmanager');\n        }\n\n        function findIndexByUid(uid) {\n            for (var index = 0; index < modalStack.length; index++) {\n                if (modalStack[index].uid == uid) {\n                    return index;\n                }\n            }\n\n            return null;\n        }\n\n        this.push = function(focusInCallback, type, uid, isHotkeyBlocking) {\n            removeCallbacks();\n\n            addEventAndCall(focusInCallback);\n            modalStack.push({\n                focusInCallback: focusInCallback,\n                type: type,\n                uid: uid,\n                isHotkeyBlocking: isHotkeyBlocking\n            });\n        };\n\n        this.hasHotkeyBlockingAbove = function(uid) {\n            var uidIndex = findIndexByUid(uid),\n                startIndex = uidIndex !== null ? uidIndex : 0;\n\n            for (var index = startIndex; index < modalStack.length; index++) {\n                if (modalStack[index].isHotkeyBlocking) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n\n        this.getTop = function() {\n            if (modalStack.length > 0) {\n                return modalStack[modalStack.length - 1];\n            }\n\n            return null;\n        };\n\n        this.isUidTop = function(uid) {\n            var top = this.getTop();\n\n            if (top === null || top.uid === undefined) {\n                return false;\n            }\n\n            return top.uid === uid;\n        };\n\n        this.getNumberOfType = function(type) {\n            var result = 0;\n\n            for (var index = 0; index < modalStack.length; index++) {\n                if (modalStack[index].type == type) {\n                    result++;\n                }\n            }\n\n            return result;\n        };\n\n        this.pop = function() {\n            modalStack.pop();\n            removeCallbacks();\n\n            if (modalStack.length > 0) {\n                var callback = modalStack[modalStack.length - 1].focusInCallback;\n                addEventAndCall(callback);\n            }\n        };\n    };\n\n    $.oc.modalFocusManager = new ModalFocusManager();\n})(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.responsivemenu.js",
    "content": "/*\n * Responsive extension for the main menu\n */\n\n+function ($) { \"use strict\";\n    function ResponsiveMenu(closeCallback) {\n        var $mainMenuElement = $('#layout-mainmenu .navbar ul.mainmenu-items'),\n            $menuContainer = $('#layout-mainmenu'),\n            $responsiveMenuContainer = $('#layout-mainmenu-responsive-container'),\n            $responsiveMainMenuPane = $responsiveMenuContainer.find('.mainmenu-pane'),\n            $responsiveSubMenuPane = $responsiveMenuContainer.find('.submenu-pane'),\n            $responsiveMainMenu = $responsiveMainMenuPane.find('ul.mainmenu-items'),\n            $responsiveSubMenu = $responsiveSubMenuPane.find('ul.mainmenu-items'),\n            $subMenuHeader = $responsiveSubMenuPane.find('.menu-header'),\n            $subMenuHeaderMenuItem = $subMenuHeader.find('.mainmenu-item')\n\n        function init() {\n            if (!$mainMenuElement.length) {\n                return;\n            }\n\n            transferMenuContents();\n\n            setupResponsiveMenu();\n\n            initListeners();\n        }\n\n        function transferMenuContents() {\n            $responsiveMainMenu.html($mainMenuElement.html());\n        }\n\n        function updateScrollIndicator(el) {\n            $(el.parentElement).toggleClass('scrolled', el.scrollTop > 0);\n        }\n\n        function initScrollablePanel(el) {\n            el.addEventListener('scroll', function(evt) {\n                updateScrollIndicator(evt.target)\n            }, {\n                capture: true,\n                passive: true\n            });\n        }\n\n        function initListeners() {\n            initScrollablePanel($responsiveMainMenu.get(0));\n            initScrollablePanel($responsiveSubMenu.get(0));\n\n            $responsiveMainMenuPane.on('click', '.mainmenu-item', onMainMenuItemClick);\n            $responsiveSubMenuPane.on('click', 'a.go-back-link', onCloseSubmenuClick);\n            $responsiveMainMenuPane.on('click', 'a.close-link', onMenuMenuCloseClick);\n        }\n\n        function initMenuScroll($menu) {\n            $menu.dragScroll({\n                vertical: true,\n                useNative: false,\n                useDrag: true\n            });\n        }\n\n        function setupResponsiveMenu() {\n            initMenuScroll($responsiveMainMenu);\n            initMenuScroll($responsiveSubMenu);\n\n            $(document.body).on('click', '.mainmenu-items', function() {\n                // Do not handle menu item clicks while dragging\n                if ($(document.body).hasClass('drag')) {\n                    return false;\n                }\n            });\n        }\n\n        function onMainMenuItemClick(ev) {\n            var $menuItem = $(ev.currentTarget),\n                $item = $menuItem.closest('.mainmenu-item');\n\n            if (!$item.hasClass('has-subitems')) {\n                return;\n            }\n\n            var submenuIndex = $item.data('submenuIndex'),\n                $submenu = $menuContainer.find('.mainmenu-submenu-dropdown[data-submenu-index='+submenuIndex+']');\n\n            $responsiveSubMenu.html($submenu.html());\n            $subMenuHeaderMenuItem.html($menuItem.html());\n            $subMenuHeader.attr('data-submenu-index', submenuIndex);\n\n            $(document.body).addClass('responsive-submenu-displayed');\n\n            ev.preventDefault();\n        }\n\n        function onCloseSubmenuClick(ev) {\n            $(document.body).removeClass('responsive-submenu-displayed');\n\n            ev.preventDefault();\n        }\n\n        function onMenuMenuCloseClick() {\n            closeCallback();\n        }\n\n        this.show = function() {\n            $responsiveMainMenu.dragScroll('goToStart');\n            $responsiveSubMenu.dragScroll('goToStart');\n\n            $(document.body).addClass('responsive-menu-displayed');\n        }\n\n        this.hide = function() {\n            $(document.body).removeClass('responsive-menu-displayed');\n\n            window.setTimeout(function() {\n                $(document.body).removeClass('responsive-submenu-displayed');\n            }, 250);\n        }\n\n        init();\n    }\n\n    $.oc.responsiveMenu = ResponsiveMenu\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.scrollbar.js",
    "content": "/*\n * Creates a scrollbar in a container.\n *\n * Note the element must have a height set for vertical,\n * and a width set for horizontal.\n *\n * Data attributes:\n * - data-control=\"scrollbar\" - enables the scrollbar plugin\n *\n * jQuery API:\n * $('#area').scrollbar()\n */\n\n'use strict';\n\noc.registerControl('scrollbar', class extends oc.ControlBase {\n    init() {\n        this.el = this.element;\n        this.options = Object.assign({\n            vertical: true,\n            scrollSpeed: 2,\n            animation: true\n        }, this.config);\n\n        this.isNative = document.documentElement.classList.contains('mobile');\n        this.isTouch = 'ontouchstart' in window;\n        this.isScrollable = false;\n        this.isLocked = false;\n        this.dragStart = 0;\n        this.startOffset = 0;\n        this.eventElementName = this.options.vertical ? 'pageY' : 'pageX';\n\n        // @deprecated backwards compatibility\n        $(this.el).data('oc.scrollbar', this);\n\n        // Use native scrolling on mobile\n        if (this.isNative) {\n            return;\n        }\n\n        this.createScrollbar();\n    }\n\n    connect() {\n        if (this.isNative) {\n            return;\n        }\n\n        this.attachEventHandlers();\n        this.update();\n\n        // Dispatch a ready event\n        setTimeout(() => {\n            oc.Events.dispatch('scrollbar:ready', { target: this.el });\n        }, 1);\n    }\n\n    disconnect() {\n        if (this.isNative) {\n            return;\n        }\n\n        window.removeEventListener('resize', this.proxy(this.update));\n        this.el.removeEventListener('wheel', this.proxy(this.onScrollWheel));\n        this.el.removeEventListener('scrollbar:goto-start', this.proxy(this.gotoStart));\n    }\n\n    createScrollbar() {\n        this.scrollbar = document.createElement('div');\n        this.scrollbar.className = 'scrollbar-scrollbar';\n\n        this.track = document.createElement('div');\n        this.track.className = 'scrollbar-track';\n\n        this.thumb = document.createElement('div');\n        this.thumb.className = 'scrollbar-thumb';\n\n        this.track.appendChild(this.thumb);\n        this.scrollbar.appendChild(this.track);\n        this.el.classList.add('drag-scrollbar', this.options.vertical ? 'vertical' : 'horizontal');\n        this.el.prepend(this.scrollbar);\n    }\n\n    attachEventHandlers() {\n        if (this.isTouch) {\n            this.el.addEventListener('touchstart', this.proxy(this.onTouchStart));\n        } else {\n            this.thumb.addEventListener('mousedown', this.proxy(this.onDragStart));\n            this.track.addEventListener('mouseup', this.proxy(this.onTrackClick));\n        }\n\n        this.el.addEventListener('wheel', this.proxy(this.onScrollWheel));\n        this.el.addEventListener('scrollbar:goto-start', this.proxy(this.gotoStart));\n        window.addEventListener('resize', this.proxy(this.update));\n    }\n\n    onTouchStart(event) {\n        if (event.touches.length === 1) {\n            this.startDrag(event.touches[0]);\n            event.stopPropagation();\n        }\n    }\n\n    onDragStart(event) {\n        this.startDrag(event);\n    }\n\n    onTrackClick(event) {\n        this.moveDrag(event);\n    }\n\n    onScrollWheel(event) {\n        if (!this.isScrollable) {\n            return;\n        }\n\n        let offset = this.options.vertical\n            ? (event.deltaY || 0)\n            : (event.deltaX || 0);\n\n        this.scrollWheel(offset * this.options.scrollSpeed);\n        event.preventDefault();\n    }\n\n    startDrag(event) {\n        document.body.classList.add('drag-noselect');\n        oc.Events.dispatch('scrollbar:scroll-start', { target: this.el });\n\n        this.dragStart = event[this.eventElementName];\n        this.startOffset = this.options.vertical ? this.el.scrollTop : this.el.scrollLeft;\n\n        if (this.isTouch) {\n            window.addEventListener('touchmove', this.proxy(this.moveDrag));\n            this.el.addEventListener('touchend', this.proxy(this.stopDrag));\n        } else {\n            window.addEventListener('mousemove', this.proxy(this.moveDrag));\n            window.addEventListener('mouseup', this.proxy(this.stopDrag));\n        }\n    }\n\n    moveDrag(event) {\n        this.isLocked = true;\n\n        let offset,\n            dragTo = event[this.eventElementName];\n\n        if (this.isTouch) {\n            offset = this.dragStart - dragTo;\n        } else {\n            let ratio = this.getCanvasSize() / this.getViewportSize();\n            offset = (dragTo - this.dragStart) * ratio;\n        }\n\n        if (this.options.vertical) {\n            this.el.scrollTop = this.startOffset + offset;\n        } else {\n            this.el.scrollLeft = this.startOffset + offset;\n        }\n\n        this.setThumbPosition();\n        return true;\n    }\n\n    stopDrag() {\n        document.body.classList.remove('drag-noselect');\n        oc.Events.dispatch('scrollbar:scroll-end', { target: this.el });\n\n        window.removeEventListener('mousemove', this.proxy(this.moveDrag));\n        window.removeEventListener('mouseup', this.proxy(this.stopDrag));\n    }\n\n    scrollWheel(offset) {\n        this.startOffset = this.options.vertical ? this.el.scrollTop : this.el.scrollLeft;\n        oc.Events.dispatch('scrollbar:scroll-start', { target: this.el });\n\n        if (this.options.vertical) {\n            this.el.scrollTop += offset;\n        } else {\n            this.el.scrollLeft += offset;\n        }\n\n        this.setThumbPosition();\n        oc.Events.dispatch('scrollbar:scroll-end', { target: this.el });\n\n        return true;\n    }\n\n    update() {\n        if (!this.scrollbar) {\n            return;\n        }\n\n        this.scrollbar.style.display = 'none';\n        this.setThumbSize();\n        this.setThumbPosition();\n        this.scrollbar.style.display = 'block';\n    }\n\n    setThumbSize() {\n        let properties = this.calculateProperties();\n\n        this.isScrollable = properties.thumbSizeRatio < 1;\n        this.scrollbar.classList.toggle('disabled', !this.isScrollable);\n\n        if (this.options.vertical) {\n            this.track.style.height = `${properties.canvasSize}px`;\n            this.thumb.style.height = `${properties.thumbSize}px`;\n        } else {\n            this.track.style.width = `${properties.canvasSize}px`;\n            this.thumb.style.width = `${properties.thumbSize}px`;\n        }\n    }\n\n    setThumbPosition() {\n        let properties = this.calculateProperties();\n\n        if (this.options.vertical) {\n            this.thumb.style.top = `${properties.thumbPosition}px`;\n        } else {\n            this.thumb.style.left = `${properties.thumbPosition}px`;\n        }\n    }\n\n    calculateProperties() {\n        let viewportSize = this.getViewportSize();\n        let canvasSize = this.getCanvasSize();\n        let scrollAmount = this.options.vertical ? this.el.scrollTop : this.el.scrollLeft;\n\n        let offset = 1;\n        let thumbSizeRatio = viewportSize / (canvasSize - offset);\n        let thumbSize = viewportSize * thumbSizeRatio;\n        let thumbPositionRatio = scrollAmount / (canvasSize - viewportSize);\n        let thumbPosition = ((viewportSize - thumbSize) * thumbPositionRatio) + scrollAmount;\n\n        return { viewportSize, canvasSize, scrollAmount, thumbSizeRatio, thumbSize, thumbPosition };\n    }\n\n    getViewportSize() {\n        return this.options.vertical ? this.el.clientHeight : this.el.clientWidth;\n    }\n\n    getCanvasSize() {\n        return this.options.vertical ? this.el.scrollHeight : this.el.scrollWidth;\n    }\n\n    gotoStart() {\n        if (this.options.vertical) {\n            this.el.scrollTop = 0;\n        } else {\n            this.el.scrollLeft = 0;\n        }\n        this.update();\n    }\n\n    gotoElement(element, callback) {\n        // @deprecated jQuery\n        if (element && element.jquery) {\n            element = element.get(0);\n        }\n\n        const target = typeof element === 'string' ? document.querySelector(element) : element;\n        if (!target) {\n            return;\n        }\n\n        const isVertical = this.options.vertical;\n        const scrollProp = isVertical ? 'scrollTop' : 'scrollLeft';\n        const offsetProp = isVertical ? 'offsetTop' : 'offsetLeft';\n        const sizeProp = isVertical ? 'offsetHeight' : 'offsetWidth';\n        const containerSizeProp = isVertical ? 'clientHeight' : 'clientWidth';\n        const containerScrollProp = isVertical ? 'scrollHeight' : 'scrollWidth';\n\n        let targetPosition = target[offsetProp];\n        let maxScroll = targetPosition;\n\n        // Ensure we do not scroll beyond container limits\n        maxScroll = Math.max(0, Math.min(maxScroll, this.el[containerScrollProp] - this.el[containerSizeProp]));\n\n        if (this.options.animation) {\n            this.smoothScrollTo(scrollProp, maxScroll, {\n                duration: 300,\n                complete: () => {\n                    this.setThumbPosition();\n                    if (callback) {\n                        callback();\n                    }\n                }\n            });\n        } else {\n            this.el[scrollProp] = maxScroll;\n            this.setThumbPosition();\n            if (callback) {\n                callback();\n            }\n        }\n\n        return this;\n    }\n\n    // Helper function for smooth scrolling\n    smoothScrollTo(property, value, params) {\n        const start = this.el[property];\n        const change = value - start;\n        const startTime = performance.now();\n        const duration = params.duration || 300;\n\n        const animateScroll = (currentTime) => {\n            const elapsed = currentTime - startTime;\n            const progress = Math.min(elapsed / duration, 1);\n            this.el[property] = start + change * progress;\n\n            if (elapsed < duration) {\n                requestAnimationFrame(animateScroll);\n            } else if (params.complete) {\n                params.complete();\n            }\n        };\n\n        requestAnimationFrame(animateScroll);\n    }\n\n\n    // @deprecated this control disposes itself\n    dispose() {}\n});\n\n// jQuery Plugin Definition (For Backwards Compatibility)\n$.fn.scrollbar = function (config) {\n    this.each((index, element) => {\n        config = config || {};\n        for (const key in config) {\n            if (key.startsWith('scroll')) {\n                element.dataset[key] = config[key];\n            }\n        }\n\n        if (!element.matches('[data-control~=\"scrollbar\"]')) {\n            element.dataset.control = ((element.dataset.control || '') + ' scrollbar').trim();\n        }\n    });\n};\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.scrollpad.js",
    "content": "/*\n * ScrollPad plugin.\n *\n * This plugin creates a scrollable area with features similar (but more limited) \n * to october.scrollbar.js, with virtual scroll bars. This plugin is more lightweight \n * in terms of calculations and more responsive. It doesn't use scripting for scrolling,\n * instead it uses the native scrolling and listens for the onscroll event to update \n * the virtual scroll bars.\n *\n * The plugin is partially based on Trackpad Scroll Emulator \n * https://github.com/jnicol/trackpad-scroll-emulator, cleaned up for the better CPU and\n * memory (DOM references) management.\n *\n * Expected markup:\n * <div class=\"control-scrollpad\" data-control=\"scrollpad\" data-direction=\"vertical\">\n *     <div>\n *         <div>\n *             The content goes here. The two wrapping \n *             DIV elements are required.\n *         </div>\n *     </div>\n * </div>\n * \n * Data attributes:\n * - data-control=\"scrollpad\" - enables the plugin.\n * - data-direction=\"vertical|horizontal\" - sets the scrolling direction.\n *\n * JavaScript API:\n * $('#area').scrollpad({direction: 'vertical'})\n * $('#area').scrollpad('dispose')\n * $('#area').scrollpad('scrollToStart')\n *\n * TODO: In FireFox the control in the horizontal mode displays the native scrollbars,\n * because negative margin-bottom in the scrollable element doesn't work for some reason.\n * Try to align the scrollable element with absolute positioning (negative right and bottom)\n * instead of negative margins.\n *\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    // SCROLLPAD CLASS DEFINITION\n    // ============================\n\n    var Scrollpad = function(element, options) {\n        this.$el = $(element)\n        this.scrollbarElement = null\n        this.dragHandleElement = null\n        this.scrollContentElement = null\n        this.contentElement = null\n        this.options = options\n        this.scrollbarSize = null\n        this.updateScrollbarTimer = null\n        this.dragOffset = null\n\n        Base.call(this)\n\n        //\n        // Initialization\n        //\n\n        this.init()\n\n        $.oc.foundation.controlUtils.markDisposable(element)\n    }\n\n    Scrollpad.prototype = Object.create(BaseProto)\n    Scrollpad.prototype.constructor = Scrollpad\n\n    Scrollpad.prototype.dispose = function() {\n        this.unregisterHandlers()\n\n        this.$el.get(0).removeChild(this.scrollbarElement)\n        this.$el.removeData('oc.scrollpad')\n        this.$el = null\n\n        this.scrollbarElement = null\n        this.dragHandleElement = null\n        this.scrollContentElement = null\n        this.contentElement = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    Scrollpad.prototype.scrollToStart = function() {\n        var scrollAttr = this.options.direction == 'vertical' ? 'scrollTop' : 'scrollLeft'\n        this.scrollContentElement[scrollAttr] = 0\n    }\n\n    Scrollpad.prototype.update = function() {\n        this.updateScrollbarSize()\n    }\n\n    // SCROLLPAD INTERNAL METHODS\n    // ============================\n\n    Scrollpad.prototype.init = function() {\n        this.build()\n        this.setScrollContentSize()\n        this.registerHandlers()\n    }\n\n    Scrollpad.prototype.build = function() {\n        var el = this.$el.get(0)\n\n        this.scrollContentElement = el.children[0]\n        this.contentElement = this.scrollContentElement.children[0]\n        this.$el.prepend('<div class=\"scrollpad-scrollbar\"><div class=\"drag-handle\"></div></div>')\n        this.scrollbarElement = el.querySelector('.scrollpad-scrollbar')\n        this.dragHandleElement = el.querySelector('.scrollpad-scrollbar > .drag-handle')\n    }\n\n    Scrollpad.prototype.registerHandlers = function() {\n        this.$el.on('mouseenter', this.proxy(this.onMouseEnter))\n        this.$el.on('mouseleave', this.proxy(this.onMouseLeave))\n\n        this.$el.one('dispose-control', this.proxy(this.dispose))\n\n        this.scrollContentElement.addEventListener('scroll', this.proxy(this.onScroll))\n        this.dragHandleElement.addEventListener('mousedown', this.proxy(this.onStartDrag))\n    }\n\n    Scrollpad.prototype.unregisterHandlers = function() {\n        this.$el.off('mouseenter', this.proxy(this.onMouseEnter))\n        this.$el.off('mouseleave', this.proxy(this.onMouseLeave))\n        this.$el.off('dispose-control', this.proxy(this.dispose))\n        this.scrollContentElement.removeEventListener('scroll', this.proxy(this.onScroll))\n        this.dragHandleElement.removeEventListener('mousedown', this.proxy(this.onStartDrag))\n\n        document.removeEventListener('mousemove', this.proxy(this.onMouseMove))\n        document.removeEventListener('mouseup', this.proxy(this.onEndDrag))\n    }\n\n    Scrollpad.prototype.setScrollContentSize = function() {\n        var scrollbarSize = this.getScrollbarSize()\n\n        if (this.options.direction == 'vertical')\n            this.scrollContentElement.setAttribute('style', 'margin-right: -' + scrollbarSize + 'px')\n        else\n            this.scrollContentElement.setAttribute('style', 'margin-bottom: -' + scrollbarSize + 'px')\n    }\n\n    Scrollpad.prototype.getScrollbarSize = function() {\n        if (this.scrollbarSize !== null)\n            return this.scrollbarSize\n\n        var testerElement = document.createElement('div')\n        testerElement.setAttribute('class', 'scrollpad-scrollbar-size-tester')\n        testerElement.appendChild(document.createElement('div'))\n\n        document.body.appendChild(testerElement)\n\n        var width = testerElement.offsetWidth,\n            innerWidth = testerElement.querySelector('div').offsetWidth\n\n        document.body.removeChild(testerElement)\n\n        // Some magic for FireFox, see \n        // https://github.com/jnicol/trackpad-scroll-emulator/blob/master/jquery.trackpad-scroll-emulator.js\n        if (width === innerWidth && navigator.userAgent.toLowerCase().indexOf('firefox') > -1)\n            return this.scrollbarSize = 17\n\n        return this.scrollbarSize = width - innerWidth\n    }\n\n    Scrollpad.prototype.updateScrollbarSize = function() {\n        this.scrollbarElement.removeAttribute('data-hidden')\n\n        var contentSize = this.options.direction == 'vertical' ? this.contentElement.scrollHeight : this.contentElement.scrollWidth,\n            scrollOffset = this.options.direction == 'vertical' ? this.scrollContentElement.scrollTop : this.scrollContentElement.scrollLeft,\n            scrollbarSize = this.options.direction == 'vertical' ? this.scrollbarElement.offsetHeight : this.scrollbarElement.offsetWidth,\n            scrollbarRatio = scrollbarSize / contentSize,\n            handleOffset = Math.round(scrollbarRatio * scrollOffset) + 2,\n            handleSize = Math.floor(scrollbarRatio * (scrollbarSize - 2)) - 2;\n\n        if (scrollbarSize < contentSize) {\n            if (this.options.direction == 'vertical')\n                this.dragHandleElement.setAttribute('style', 'top: ' + handleOffset + 'px; height: ' + handleSize + 'px')\n            else\n                this.dragHandleElement.setAttribute('style', 'left: ' + handleOffset + 'px; width: ' + handleSize + 'px')\n\n            this.scrollbarElement.removeAttribute('data-hidden')\n        }\n        else\n            this.scrollbarElement.setAttribute('data-hidden', true)\n    }\n\n    Scrollpad.prototype.displayScrollbar = function() {\n        this.clearUpdateScrollbarTimer()\n\n        this.updateScrollbarSize()\n        this.scrollbarElement.setAttribute('data-visible', 'true')\n    }\n\n    Scrollpad.prototype.hideScrollbar = function() {\n        this.scrollbarElement.removeAttribute('data-visible')\n    }\n\n    Scrollpad.prototype.clearUpdateScrollbarTimer = function() {\n        if (this.updateScrollbarTimer === null)\n            return\n\n        clearTimeout(this.updateScrollbarTimer)\n        this.updateScrollbarTimer = null\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    Scrollpad.prototype.onMouseEnter = function() {\n        this.displayScrollbar()\n    }\n\n    Scrollpad.prototype.onMouseLeave = function() {\n        this.hideScrollbar()\n    }\n\n    Scrollpad.prototype.onScroll = function() {\n        if (this.updateScrollbarTimer !== null)\n            return\n\n        this.updateScrollbarTimer = setTimeout(this.proxy(this.displayScrollbar), 10) \n    }\n\n    Scrollpad.prototype.onStartDrag = function(ev) {\n        $.oc.foundation.event.stop(ev)\n        \n        var pageCoords = $.oc.foundation.event.pageCoordinates(ev),\n            eventOffset = this.options.direction == 'vertical' ? pageCoords.y : pageCoords.x,\n            handleCoords = $.oc.foundation.element.absolutePosition(this.dragHandleElement),\n            handleOffset = this.options.direction == 'vertical' ? handleCoords.top : handleCoords.left\n\n        this.dragOffset = eventOffset - handleOffset\n\n        document.addEventListener('mousemove', this.proxy(this.onMouseMove))\n        document.addEventListener('mouseup', this.proxy(this.onEndDrag))\n    }\n\n    Scrollpad.prototype.onMouseMove = function(ev) {\n        $.oc.foundation.event.stop(ev)\n\n        var eventCoordsAttr = this.options.direction == 'vertical' ? 'y' : 'x',\n            elementCoordsAttr = this.options.direction == 'vertical' ? 'top' : 'left',\n            offsetAttr = this.options.direction == 'vertical' ? 'offsetHeight' : 'offsetWidth',\n            scrollAttr = this.options.direction == 'vertical' ? 'scrollTop' : 'scrollLeft'\n\n        var eventOffset = $.oc.foundation.event.pageCoordinates(ev)[eventCoordsAttr],\n            scrollbarOffset = $.oc.foundation.element.absolutePosition(this.scrollbarElement)[elementCoordsAttr],\n            dragPos = eventOffset - scrollbarOffset - this.dragOffset,\n            scrollbarSize = this.scrollbarElement[offsetAttr],\n            contentSize = this.contentElement[offsetAttr],\n            dragPerc = dragPos / scrollbarSize\n\n        if (dragPerc > 1)\n            dragPerc = 1\n\n        var scrollPos = dragPerc * contentSize;\n\n        this.scrollContentElement[scrollAttr] = scrollPos\n    }\n    \n    Scrollpad.prototype.onEndDrag = function(ev) {\n        document.removeEventListener('mousemove', this.proxy(this.onMouseMove))\n        document.removeEventListener('mouseup', this.proxy(this.onEndDrag))\n    }\n\n    // SCROLLPAD PLUGIN DEFINITION\n    // ============================\n\n    Scrollpad.DEFAULTS = {\n        direction: 'vertical'\n    }\n\n    var old = $.fn.scrollpad\n\n    $.fn.scrollpad = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), \n            result = undefined\n\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.scrollpad')\n            var options = $.extend({}, Scrollpad.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.scrollpad', (data = new Scrollpad(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        })\n        \n        return result ? result : this\n    }\n\n    $.fn.scrollpad.Constructor = Scrollpad\n\n    // SCROLLPAD NO CONFLICT\n    // =================\n\n    $.fn.scrollpad.noConflict = function () {\n        $.fn.scrollpad = old\n        return this\n    }\n\n    // SCROLLPAD DATA-API\n    // ===============\n\n    $(document).on('render', function(){\n        $('div[data-control=scrollpad]').scrollpad()\n    })\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/js/october/october.sidenav-tree.js",
    "content": "/* @deprecated v4 -sg */\n/*\n * Side navigation tree\n *\n * Data attributes:\n * - data-control=\"sidenav-tree\" - enables the plugin\n * - data-tree-name - unique name of the tree control. The name is used for storing user configuration in the browser cookies.\n *\n * JavaScript API:\n * $('#tree').sidenavTree()\n *\n * Dependencies:\n * - Null\n */\n\n+function ($) { \"use strict\";\n\n    // SIDENAVTREE CLASS DEFINITION\n    // ============================\n\n    var SidenavTree = function(element, options) {\n        this.options   = options;\n        this.$el       = $(element);\n\n        this.init();\n    }\n\n    SidenavTree.DEFAULTS = {\n        treeName: 'sidenav_tree',\n        rememberSearch: false\n    }\n\n    SidenavTree.prototype.init = function (){\n        var self = this;\n\n        $(document.body).addClass('has-sidenav-tree');\n\n        this.statusCookieName = this.options.treeName + 'groupStatus';\n        this.searchCookieName = this.options.treeName + 'search';\n        this.$searchInput = $(this.options.searchInput);\n\n        this.$el.on('click', 'li > div.group', function() {\n            self.toggleGroup($(this).closest('li'));\n            return false;\n        })\n\n        this.$searchInput.on('input', function(){\n            self.handleSearchChange();\n        })\n\n        if (this.options.rememberSearch) {\n            var searchTerm = Cookies.get(this.searchCookieName);\n            if (searchTerm !== undefined && searchTerm.length > 0) {\n                this.$searchInput.val(searchTerm);\n                this.applySearch();\n            }\n        }\n\n        var scrollbar = $('[data-control=scrollbar]', this.$el).data('oc.scrollbar'),\n            active = $('li.active', this.$el);\n\n        if (active.length > 0) {\n            scrollbar.gotoElement(active);\n        }\n    }\n\n    SidenavTree.prototype.toggleGroup = function(group) {\n        var $group = $(group),\n            status = $group.attr('data-status');\n\n        status === undefined || status == 'expanded'\n            ? this.collapseGroup($group)\n            : this.expandGroup($group);\n    }\n\n    SidenavTree.prototype.collapseGroup = function(group) {\n        var\n            $list = $('> ul', group),\n            self = this;\n\n        $list.css('overflow', 'hidden');\n        $list.animate({ 'height': 0 }, {\n            duration: 100,\n            queue: false,\n            complete: function() {\n                $list.css({\n                    'overflow': 'visible',\n                    'display': 'none'\n                })\n\n                $(group).attr('data-status', 'collapsed')\n                $(window).trigger('oc.updateUi')\n                self.saveGroupStatus($(group).data('group-code'), true)\n            }\n        });\n    }\n\n    SidenavTree.prototype.expandGroup = function(group, duration) {\n        var\n            $list = $('> ul', group),\n            self = this;\n\n        duration = duration === undefined ? 100 : duration;\n\n        $list.css({\n            'overflow': 'hidden',\n            'height': 0\n        });\n\n        $list.animate({'height': $list[0].scrollHeight}, { duration: duration, queue: false, complete: function() {\n            $list.css({\n                'overflow': 'visible',\n                'height': 'auto',\n                'display': ''\n            });\n\n            $(group).attr('data-status', 'expanded');\n            $(window).trigger('oc.updateUi');\n            self.saveGroupStatus($(group).data('group-code'), false);\n        } })\n    }\n\n    SidenavTree.prototype.saveGroupStatus = function(groupCode, collapsed) {\n        var collapsedGroups = Cookies.get(this.statusCookieName),\n            updatedGroups = [];\n\n        if (collapsedGroups === undefined) {\n            collapsedGroups = '';\n        }\n\n        collapsedGroups = collapsedGroups.split('|');\n        $.each(collapsedGroups, function() {\n            if (groupCode != this) {\n                updatedGroups.push(this);\n            }\n        })\n\n        if (collapsed) {\n            updatedGroups.push(groupCode);\n        }\n\n        Cookies.set(this.statusCookieName, updatedGroups.join('|'), { expires: 30, path: '/' });\n    }\n\n    SidenavTree.prototype.handleSearchChange = function() {\n        var lastValue = this.$searchInput.data('oc.lastvalue');\n\n        if (lastValue !== undefined && lastValue == this.$searchInput.val()) {\n            return;\n        }\n\n        this.$searchInput.data('oc.lastvalue', this.$searchInput.val());\n\n        if (this.dataTrackInputTimer !== undefined) {\n            window.clearTimeout(this.dataTrackInputTimer);\n        }\n\n        var self = this;\n        this.dataTrackInputTimer = window.setTimeout(function(){\n            self.applySearch();\n        }, 300);\n\n        Cookies.set(this.searchCookieName, $.trim(this.$searchInput.val()), { expires: 30, path: '/' });\n    }\n\n    SidenavTree.prototype.applySearch = function() {\n        var query = $.trim(this.$searchInput.val()),\n            words = query.toLowerCase().split(' '),\n            visibleGroups = [],\n            visibleItems = [],\n            self = this;\n\n        if (query.length == 0) {\n            $('li', this.$el).removeClass('hidden');\n            this.$el.removeClass('is-searching');\n            return;\n        }\n\n        this.$el.addClass('is-searching');\n\n        /*\n         * Find visible groups and items\n         */\n        $('ul.top-level > li', this.$el).each(function() {\n            var $li = $(this);\n\n            if (self.textContainsWords($('div.group h3', $li).text(), words)) {\n                visibleGroups.push($li.get(0));\n\n                $('ul li', $li).each(function(){\n                    visibleItems.push(this);\n                });\n            }\n            else {\n                $('ul li', $li).each(function(){\n                    if (self.textContainsWords($(this).text(), words) || self.textContainsWords($(this).data('keywords'), words)) {\n                        visibleGroups.push($li.get(0));\n                        visibleItems.push(this);\n                    }\n                })\n            }\n        })\n\n        /*\n         * Hide invisible groups and items\n         */\n        $('ul.top-level > li', this.$el).each(function() {\n            var $li = $(this),\n                groupIsVisible = $.inArray(this, visibleGroups) !== -1;\n\n            $li.toggleClass('hidden', !groupIsVisible);\n            if (groupIsVisible) {\n                self.expandGroup($li, 0);\n            }\n\n            $('ul li', $li).each(function(){\n                var $itemLi = $(this);\n\n                $itemLi.toggleClass('hidden', $.inArray(this, visibleItems) == -1);\n            })\n        });\n\n        $(window).trigger('resize');\n\n        return false;\n    }\n\n    SidenavTree.prototype.textContainsWords = function(text, words) {\n        text = text.toLowerCase();\n\n        for (var i = 0; i < words.length; i++) {\n            if (text.indexOf(words[i]) === -1) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    // SIDENAVTREE PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.sidenavTree\n\n    $.fn.sidenavTree = function (option) {\n        var args = arguments;\n\n        return this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.sidenavTree')\n            var options = $.extend({}, SidenavTree.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data) $this.data('oc.sidenavTree', (data = new SidenavTree(this, options)))\n            if (typeof option == 'string') {\n                var methodArgs = [];\n                for (var i=1; i<args.length; i++)\n                    methodArgs.push(args[i])\n\n                data[option].apply(data, methodArgs)\n            }\n        })\n    }\n\n    $.fn.sidenavTree.Constructor = SidenavTree\n\n    // SIDENAVREE NO CONFLICT\n    // =================\n\n    $.fn.sidenavTree.noConflict = function () {\n        $.fn.sidenavTree = old\n        return this\n    }\n\n    // SIDENAVTREE DATA-API\n    // ===============\n\n    $(document).render(function () {\n        $('[data-control=sidenav-tree]').sidenavTree();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.sidenav.js",
    "content": "/*\n * Side Navigation\n *\n * Data attributes:\n * - data-control=\"sidenav\" - enables the side navigation plugin\n *\n * JavaScript API:\n * $('#nav').sideNav()\n * $.oc.sideNav.setCounter('cms/partials', 5); - sets the counter value for a particular menu item\n * $.oc.sideNav.increaseCounter('cms/partials', 5); - increases the counter value for a particular menu item\n * $.oc.sideNav.dropCounter('cms/partials'); - drops the counter value for a particular menu item\n *\n * Dependencies:\n * - Drag Scroll (october.dragscroll.js)\n */\n\n+function ($) { \"use strict\";\n    if ($.oc === undefined)\n        $.oc = {}\n\n    // SIDENAV CLASS DEFINITION\n    // ============================\n\n    var SideNav = function(element, options) {\n        this.options   = options\n        this.$el       = $(element)\n        this.$list     = $('ul', this.$el)\n        this.$items    = $('li', this.$list)\n\n        this.init();\n        this.initResponsive();\n    }\n\n    SideNav.DEFAULTS = {\n        activeClass: 'active'\n    }\n\n    SideNav.prototype.init = function (){\n        var self = this\n\n        this.$list.dragScroll({\n            vertical: true,\n            useNative: false,\n            useDrag: true,\n            start: function() { self.$list.addClass('drag') },\n            stop: function() { self.$list.removeClass('drag') },\n            scrollClassContainer: self.$el,\n            scrollMarkerContainer: self.$el\n        })\n\n        this.$list.on('click', function() {\n            /* Do not handle menu item clicks while dragging */\n            if (self.$list.hasClass('drag')) {\n                return false\n            }\n        })\n    }\n\n    // Proxy responsive menu to desktop menu\n    SideNav.prototype.initResponsive = function (){\n        var $sideNav = $('#layout-sidenav-responsive'),\n            $items = $('ul li', $sideNav),\n            self = this;\n\n        $items.click(function() {\n            var itemId = $(this).data('menu-item');\n            if (!itemId) {\n                return;\n            }\n\n            if ($(this).data('no-side-panel')) {\n                return\n            }\n\n            $items\n                .removeClass(self.options.activeClass)\n                .filter('[data-menu-item='+itemId+']')\n                .addClass(self.options.activeClass);\n\n            $('[data-menu-item='+itemId+']:first', self.$list).trigger('click');\n        });\n    };\n\n    SideNav.prototype.unsetActiveItem = function (itemId){\n        this.$items.removeClass(this.options.activeClass)\n    }\n\n    SideNav.prototype.setActiveItem = function (itemId){\n        if (!itemId) {\n            return\n        }\n\n        this.$items\n            .removeClass(this.options.activeClass)\n            .filter('[data-menu-item='+itemId+']')\n            .addClass(this.options.activeClass)\n    }\n\n    function setCounterValue($counter, value){\n        $counter.toggleClass('empty', value == 0)\n        $counter.text(value)\n    }\n\n    function setCountersValue(itemId, $el, value) {\n        setCounterValue($('span.counter[data-menu-id=\"'+itemId+'\"]', $el), value)\n        setCounterValue($('span.counter[data-menu-id=\"'+itemId+'\"]', '#layout-sidenav-responsive'), value)\n        setCounterValue($('span.counter[data-menu-id=\"'+itemId+'\"]', '#layout-mainmenu'), value)\n    }\n\n    SideNav.prototype.setCounter = function (itemId, value){\n        setCountersValue(itemId, this.$el, value)\n\n        return this\n    }\n\n    SideNav.prototype.increaseCounter = function (itemId, value){\n        var $counter = $('span.counter[data-menu-id=\"'+itemId+'\"]', this.$el)\n\n        var originalValue = parseInt($counter.text())\n        if (isNaN(originalValue))\n            originalValue = 0\n\n        var newValue = value + originalValue\n\n        setCountersValue(itemId, this.$el, newValue)\n        return this\n    }\n\n    SideNav.prototype.dropCounter = function (itemId){\n        this.setCounter(itemId, 0)\n\n        return this\n    }\n\n    // SIDENAV PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.sideNav;\n\n    $.fn.sideNav = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.sideNav')\n            var options = $.extend({}, SideNav.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.sideNav', (data = new SideNav(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n\n            if ($.oc.sideNav === undefined)\n                $.oc.sideNav = data\n        })\n\n        return result ? result : this\n    }\n\n    $.fn.sideNav.Constructor = SideNav;\n\n    // SIDENAV NO CONFLICT\n    // =================\n\n    $.fn.sideNav.noConflict = function () {\n        $.fn.sideNav = old\n        return this\n    }\n\n    // SIDENAV DATA-API\n    // ===============\n\n    $(document).ready(function(){\n        $('[data-control=\"sidenav\"]').sideNav();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.sidepaneltab.js",
    "content": "/*\n * Side Panel Tabs\n */\n\n+function ($) { \"use strict\";\n\n    var SidePanelTab = function(element, options) {\n        this.options = options;\n        this.$el = $(element);\n        this.init();\n    }\n\n    SidePanelTab.prototype.init = function() {\n        var self = this;\n        this.tabOpenDelay = 200;\n        this.tabOpenTimeout = undefined;\n        this.panelOpenTimeout = undefined;\n        this.$sideNav = $('#layout-sidenav');\n        this.$sideNavRes = $('#layout-sidenav-responsive');\n        this.$sideNavItems = $('ul li', this.$sideNav);\n        this.$sidePanelItems = $('[data-content-id]', this.$el);\n        this.sideNavWidth = $('#layout-sidenav').outerWidth();\n        this.mainNavHeight = $.oc.backendCalculateTopContainerOffset();\n        this.panelVisible = false;\n        this.visibleItemId = false;\n\n        this.$sideNavItems.click(function() {\n            if ($(this).data('no-side-panel')) {\n                return\n            }\n\n            if ($(window).width() < self.options.breakpoint) {\n                if ($(this).data('menu-item') == self.visibleItemId && self.panelVisible) {\n                    self.hideSidePanel()\n                    return\n                }\n                else {\n                    self.displaySidePanel()\n                }\n            }\n\n            self.displayTab(this)\n\n            return false\n        })\n\n        $('#layout-body').click(function() {\n            if (self.panelVisible) {\n                self.hideSidePanel()\n                return false\n            }\n        })\n\n        self.$el.on('close.oc.sidePanel', function() {\n            self.hideSidePanel()\n        })\n\n        this.updateActiveTab()\n    }\n\n    SidePanelTab.prototype.displayTab = function(menuItem) {\n        var menuItemId = $(menuItem).data('menu-item')\n\n        this.visibleItemId = menuItemId\n\n        $.oc.sideNav.setActiveItem(menuItemId)\n\n        this.$sidePanelItems.each(function() {\n            var  $el = $(this)\n            $el.toggleClass('oc-hide', $el.data('content-id') != menuItemId)\n        })\n\n        $(window).trigger('resize')\n    }\n\n    SidePanelTab.prototype.displaySidePanel = function() {\n        $(document.body).addClass('display-side-panel')\n\n        if (this.$sideNavRes.is(':visible')) {\n            this.mainNavHeight = $.oc.backendCalculateTopContainerOffset() + this.$sideNavRes.outerHeight();\n        }\n\n        if ($('#layout-sidenav').is(':visible')) {\n            this.sideNavWidth = $('#layout-sidenav').outerWidth();\n        }\n        else {\n            this.sideNavWidth = 0;\n        }\n\n        this.$el.appendTo('#layout-canvas')\n        this.panelVisible = true\n        this.$el.css({\n            left: this.sideNavWidth,\n            top: this.mainNavHeight\n        })\n\n        this.updatePanelPosition()\n        $(window).trigger('resize')\n    }\n\n    SidePanelTab.prototype.hideSidePanel = function() {\n        $(document.body).removeClass('display-side-panel')\n        if (this.$el.next('#layout-body').length == 0) {\n            $('#layout-body').before(this.$el)\n        }\n\n        this.panelVisible = false\n\n        this.updateActiveTab()\n    }\n\n    SidePanelTab.prototype.updatePanelPosition = function() {\n        this.$el.height($(document).height() - this.mainNavHeight)\n\n        if (this.panelVisible && $(window).width() > this.options.breakpoint) {\n            this.hideSidePanel()\n        }\n    }\n\n    SidePanelTab.prototype.updateActiveTab = function() {\n        if (!this.panelVisible && ($(window).width() < this.options.breakpoint)) {\n            $.oc.sideNav.unsetActiveItem()\n        }\n        else {\n            $.oc.sideNav.setActiveItem(this.visibleItemId)\n        }\n    }\n\n    SidePanelTab.DEFAULTS = {\n        breakpoint: 769\n    }\n\n    // PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.sidePanelTab\n\n    $.fn.sidePanelTab = function (option) {\n        return this.each(function() {\n            var $this = $(this)\n            var data = $this.data('oc.sidePanelTab')\n            var options = $.extend({}, SidePanelTab.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.sidePanelTab', (data = new SidePanelTab(this, options)))\n            if (typeof option == 'string') data[option].call(data)\n        })\n    }\n\n    $.fn.sidePanelTab.Constructor = SidePanelTab\n\n    // NO CONFLICT\n    // =================\n\n    $.fn.sidePanelTab.noConflict = function() {\n        $.fn.sidePanelTab = old\n        return this\n    }\n\n    // DATA-API\n    // ============\n\n    $(document).ready(function(){\n        $('[data-control=layout-sidepanel]').sidePanelTab()\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.simplelist.js",
    "content": "/*\n * SimpleList control.\n *\n * Data attributes:\n * - data-control=\"simplelist\" - enables the simplelist plugin\n *\n * JavaScript API:\n * $('#simplelist').simplelist()\n *\n */\n+function ($) { \"use strict\";\n\n    var SimpleList = function (element, options) {\n\n        var $el = this.$el = $(element);\n\n        this.options = options || {};\n\n        // Make each list inside sortable\n        if ($el.hasClass('is-sortable')) {\n            var sortableOptions = {\n                distance: 10\n            }\n\n            if (this.options.sortableHandle) {\n                sortableOptions.handle = this.options.sortableHandle;\n            }\n\n            if ($el.find('.drag-handle').length > 0) {\n                sortableOptions.handle = '.drag-handle';\n            }\n\n            $el.find('> ul, > ol').each(function() {\n                Sortable.create(this, sortableOptions);\n            });\n        }\n\n        // Inject a scrollbar container\n        if ($el.hasClass('is-scrollable')) {\n            $el.wrapInner($('<div />').addClass('control-scrollbar'));\n            var $scrollbar = $el.find('>.control-scrollbar:first');\n            $scrollbar.scrollbar();\n        }\n    }\n\n    SimpleList.DEFAULTS = {\n        sortableHandle: null\n    }\n\n    // SIMPLE LIST PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.simplelist\n\n    $.fn.simplelist = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.simplelist')\n            var options = $.extend({}, SimpleList.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.simplelist', (data = new SimpleList(this, options)))\n        })\n      }\n\n    $.fn.simplelist.Constructor = SimpleList\n\n    // SIMPLE LIST NO CONFLICT\n    // =================\n\n    $.fn.simplelist.noConflict = function () {\n        $.fn.simplelist = old\n        return this\n    }\n\n    // SIMPLE LIST DATA-API\n    // ===============\n\n    $(document).render(function(){\n        $('[data-control=\"simplelist\"]').simplelist()\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.snackbar.js",
    "content": "/*\n * Backend Snackbar system\n *\n * JavaScript API:\n * $.oc.snackbar.show('Message', {timeout: 5000, action: {label: 'Retry', callback: onRetry}});\n *\n * Snackbars disappear automatically, but can be dismissed by users.\n * The default timeout is 4 seconds. The action parameter is optional.\n * Action label and callback properties are required.\n */\n\n+(function($) {\n    'use strict';\n    if ($.oc === undefined) $.oc = {};\n\n    var Snackbar = function() {\n        var queue = [],\n            lastUniqueId = 0,\n            displayedMessage = null;\n\n        function validateOptions(options) {\n            if (options === undefined) {\n                return;\n            }\n\n            if (typeof options !== 'object') {\n                throw new Error('Snackbar options must be an object');\n            }\n\n            if (options.replace !== undefined) {\n                if (typeof options.replace !== 'number') {\n                    throw new Error('Snackbar options.replace must be a number');\n                }\n            }\n\n            if (options.timeout !== undefined) {\n                if (typeof options.timeout !== 'number') {\n                    throw new Error('Snackbar options.timeout must be a number');\n                }\n\n                if (options.timeout < 2000) {\n                    throw new Error('Snackbar options.timeout cannot be lower than 2000');\n                }\n\n                if (options.timeout > 8000) {\n                    throw new Error('Snackbar options.timeout cannot be higher than 8000');\n                }\n            }\n\n            if (options.action !== undefined) {\n                if (typeof options.action !== 'object') {\n                    throw new Error('Snackbar options.action must be an object');\n                }\n\n                if (typeof options.action.label !== 'string') {\n                    throw new Error('Snackbar options.action.label must be a string');\n                }\n\n                if (typeof options.action.callback !== 'function') {\n                    throw new Error('Snackbar options.action.callback must be a function');\n                }\n            }\n        }\n\n        function runQueue() {\n            if (displayedMessage !== null) {\n                return;\n            }\n\n            var parameters = queue.shift();\n            if (parameters === undefined) {\n                return;\n            }\n\n            buildSnackbar(parameters);\n        }\n\n        function makeUniqueId() {\n            return ++lastUniqueId;\n        }\n\n        function buildSnackbar(parameters) {\n            displayedMessage = {\n                uniqueId: parameters.uniqueId\n            };\n\n            var $element = $(\n                    '\\\n                    <div class=\"october-snackbar\"> \\\n                        <div class=\"snackbar-label\"></div> \\\n                        <button class=\"snackbar-dismiss\" aria-title=\"Dismiss\">X</button> \\\n                    </div>'\n                ),\n                $label = $element.find('.snackbar-label');\n\n            $label.text(parameters.message);\n            $element.find('.snackbar-dismiss').one('click.snackbar', function() {\n                hideSnackbar($element, parameters.options);\n            });\n\n            if (parameters.options && parameters.options.action) {\n                var $actionButton = $('<button class=\"snackbar-action\"></button>');\n\n                $actionButton.text(parameters.options.action.label);\n                $actionButton.one('click.snackbar', function() {\n                    parameters.options.action.callback();\n                    hideSnackbar($element, parameters.options);\n                });\n\n                $actionButton.insertAfter($label);\n            }\n\n            $(document.body).append($element);\n\n            displayedMessage.element = $element;\n            displayedMessage.uniqueId = parameters.uniqueId;\n            displayedMessage.options = parameters.options;\n\n            setTimeout(function() {\n                $element.addClass('enter');\n\n                setTimeout(function() {\n                    $element.addClass('show-snackbar');\n\n                    startHideTimeout($element, parameters.options);\n                }, 20);\n            }, 1);\n        }\n\n        function startHideTimeout($element, options) {\n            var timeout = 2000;\n\n            if (options && options.timeout) {\n                timeout = options.timeout;\n            }\n\n            options.timeoutId = setTimeout(function() {\n                hideSnackbar($element, options);\n            }, timeout);\n        }\n\n        function hideSnackbar($element, options) {\n            $element.find('button').off('.snackbar');\n            $element.removeClass('show-snackbar');\n\n            clearTimeout(options.timeoutId);\n\n            setTimeout(function() {\n                displayedMessage = null;\n                $element.remove();\n                runQueue();\n            }, 210);\n        }\n\n        function forceHideSnackbar($element, options) {\n            clearTimeout(options.timeoutId);\n\n            options.timeoutId = setTimeout(function() {\n                hideSnackbar($element, options);\n            }, 200);\n        }\n\n        function removeFromQueue(uniqueId) {\n            for (var index = 0; index < queue.length; index++) {\n                if (queue[index].uniqueId == uniqueId) {\n                    queue.splice(index, 1);\n                    return;\n                }\n            }\n        }\n\n        this.show = function(message, options) {\n            validateOptions(options);\n\n            if (options && options.replace) {\n                if (displayedMessage && options.replace === displayedMessage.uniqueId) {\n                    forceHideSnackbar(displayedMessage.element, displayedMessage.options);\n                }\n                else {\n                    removeFromQueue(options.replace);\n                }\n            }\n\n            var uniqueId = makeUniqueId();\n            queue.push({\n                message: message,\n                options: options || {},\n                uniqueId: uniqueId\n            });\n\n            runQueue();\n\n            return uniqueId;\n        };\n\n        this.hide = function(uniqueId) {\n            if (displayedMessage && uniqueId === displayedMessage.uniqueId) {\n                forceHideSnackbar(displayedMessage.element, displayedMessage.options);\n            }\n        };\n    };\n\n    oc.snackbar = new Snackbar();\n\n    // @deprecated\n    $.oc.snackbar = oc.snackbar;\n})(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.tabformexpandcontrols.js",
    "content": "/*\n * Extends the fancy tabs layout with expand controls in the tab\n * form sections. See main Builder page for example.\n * TODO: A similar layout is used in the CMS, Pages and Builder areas,\n * but only Builder uses this class.\n */\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var TabFormExpandControls = function ($tabsControlElement, options) {\n        this.$tabsControlElement = $tabsControlElement\n        this.options = $.extend(TabFormExpandControls.DEFAULTS, typeof options == 'object' && options)\n        this.tabsControlId = null\n\n        Base.call(this)\n        this.init()\n    }\n\n    TabFormExpandControls.prototype = Object.create(BaseProto)\n    TabFormExpandControls.prototype.constructor = TabFormExpandControls\n\n    TabFormExpandControls.prototype.init = function() {\n        this.tabsControlId = this.$tabsControlElement.attr('id')\n\n        if (!this.tabsControlId) {\n            throw new Error('The tab controls element should have the id attribute value.')\n        }\n\n        this.registerHandlers()\n    }\n\n    TabFormExpandControls.prototype.dispose = function() {\n        this.unregisterHandlers()\n\n        this.$tabsControlElement = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    TabFormExpandControls.prototype.registerHandlers = function() {\n        this.$tabsControlElement.on('initTab.oc.tab', this.proxy(this.initTab))\n        this.$tabsControlElement.on('click', '[data-control=\"tabless-collapse-icon\"]', this.proxy(this.tablessCollapseClicked))\n        this.$tabsControlElement.on('click', '[data-control=\"primary-collapse-icon\"]', this.proxy(this.primaryCollapseClicked))\n    }\n\n    TabFormExpandControls.prototype.unregisterHandlers = function() {\n        this.$tabsControlElement.off('initTab.oc.tab', this.proxy(this.initTab))\n        this.$tabsControlElement.off('click', '[data-control=\"tabless-collapse-icon\"]', this.proxy(this.tablessCollapseClicked))\n        this.$tabsControlElement.off('click', '[data-control=\"primary-collapse-icon\"]', this.proxy(this.primaryCollapseClicked))\n    }\n\n    TabFormExpandControls.prototype.initTab = function(ev, data) {\n        if ($(ev.target).attr('id') != this.tabsControlId)\n            return\n\n        var $primaryPanel = this.findPrimaryPanel(data.pane),\n            $panel = $('.form-tabless-fields', data.pane),\n            $secondaryPanel = this.findSecondaryPanel(data.pane),\n            hasSecondaryTabs = $secondaryPanel.length > 0\n\n        $secondaryPanel.addClass('secondary-content-tabs')\n        $panel.append(this.createTablessCollapseIcon())\n\n        if (!hasSecondaryTabs) {\n            $('.tab-pane', $primaryPanel).addClass('pane-compact')\n        }\n\n        $('.nav-tabs', $primaryPanel).addClass('master-area')\n\n        if ($primaryPanel.length > 0) {\n            $secondaryPanel.append(this.createPrimaryCollapseIcon())\n        } else {\n            $secondaryPanel.addClass('primary-collapsed')\n        }\n\n        if (!$('a', data.tab).hasClass('new-template') && this.getLocalStorageValue('tabless', 0) == 1) {\n            $panel.addClass('collapsed')\n        }\n\n        if (this.getLocalStorageValue('primary', 0) == 1 && hasSecondaryTabs) {\n            $primaryPanel.addClass('collapsed')\n            $secondaryPanel.addClass('primary-collapsed')\n        }\n\n        if (this.options.onInitTab) {\n            this.options.onInitTab($('form', data.pane))\n        }\n    }\n\n    TabFormExpandControls.prototype.tablessCollapseClicked = function(ev) {\n        var $panel = $(ev.target).closest('.form-tabless-fields')\n\n        $panel.toggleClass('collapsed')\n        this.setLocalStorageValue('tabless', $panel.hasClass('collapsed') ? 1 : 0)\n        window.setTimeout(this.proxy(this.updateUi), 500)\n\n        ev.stopPropagation()\n        return false\n    }\n\n    TabFormExpandControls.prototype.primaryCollapseClicked = function(ev) {\n        var $pane = $(ev.target).closest('.tab-pane'),\n            $primaryPanel = this.findPrimaryPanel($pane),\n            $secondaryPanel = this.findSecondaryPanel($pane)\n\n        $primaryPanel.toggleClass('collapsed')\n        $secondaryPanel.toggleClass('primary-collapsed')\n\n        this.updateUi()\n        this.setLocalStorageValue('primary', $primaryPanel.hasClass('collapsed') ? 1 : 0)\n\n        return false\n    }\n\n    TabFormExpandControls.prototype.updateUi = function() {\n        $(window).trigger('oc.updateUi')\n    }\n\n    TabFormExpandControls.prototype.createTablessCollapseIcon = function() {\n        return $('<a href=\"javascript:;\" class=\"tab-collapse-icon tabless\" data-control=\"tabless-collapse-icon\"><i class=\"icon-chevron-up\"></i></a>')\n    }\n\n    TabFormExpandControls.prototype.createPrimaryCollapseIcon = function() {\n        return $('<a href=\"javascript:;\" class=\"tab-collapse-icon primary\" data-control=\"primary-collapse-icon\"><i class=\"icon-chevron-down\"></i></a>')\n    }\n\n    TabFormExpandControls.prototype.generateStorageKey = function(section) {\n        return 'oc' + section + this.tabsControlId.replace('-', '') + 'collapsed'\n    }\n\n    TabFormExpandControls.prototype.findPrimaryPanel = function(pane) {\n        return $(pane).find('.control-tabs.primary-tabs')\n    }\n\n    TabFormExpandControls.prototype.findSecondaryPanel = function(pane) {\n        return $(pane).find('.control-tabs.secondary-tabs')\n    }\n\n    TabFormExpandControls.prototype.getLocalStorageValue = function(section, defaultValue) {\n        var key = this.generateStorageKey(section)\n\n        if (typeof(localStorage) !== 'undefined') {\n            return localStorage[key]\n        }\n\n        return defaultValue\n    }\n\n    TabFormExpandControls.prototype.setLocalStorageValue = function(section, value) {\n        var key = this.generateStorageKey(section)\n\n        if (typeof(localStorage) !== 'undefined') {\n            localStorage[key] = value\n        }\n    }\n\n    TabFormExpandControls.DEFAULTS = {\n        onInitTab: null\n    }\n\n    $.oc.tabFormExpandControls = TabFormExpandControls\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/js/october/october.tooltip.js",
    "content": "/*\n * Implements a new tooltips solution.\n *\n * The solution doesn't use Bootstrap tooltips and doesn't\n * require adding listeners to each control with a tooltip.\n * It can handle tooltips on dynamically added elements without\n * explicit initialization.\n */\n\n+(function($) {\n    'use strict';\n\n    class Tooltips {\n        constructor() {\n            this.$tooltipElement = null;\n            this.tooltipTimeout = null;\n\n            this.onMouseEnter = (ev) => {\n                if (!ev.target || !ev.target.getAttribute || !ev.target.dataset) {\n                    return;\n                }\n\n                if (!ev.target.getAttribute('data-tooltip-text')) {\n                    return;\n                }\n\n                this.clearTooltipTimeout();\n                this.destroyTooltip();\n\n                this.tooltipTimeout = setTimeout(() => {\n                    this.createTooltip(ev.target);\n                }, 300);\n            }\n\n            this.onMouseLeave = (ev) => {\n                if (!ev.target || !ev.target.getAttribute || !ev.target.dataset) {\n                    return;\n                }\n\n                if (!ev.target.getAttribute('data-tooltip-text')) {\n                    return;\n                }\n\n                this.clearTooltipTimeout();\n                this.destroyTooltip();\n            }\n\n            this.onMouseDown = (ev) => {\n                this.destroyTooltip();\n            }\n\n            this.onKeyDown = (ev) => {\n                this.destroyTooltip();\n            };\n\n            this.hideAllTooltips = () => {\n                this.clearTooltipTimeout();\n                if (this.$tooltipElement) {\n                    this.$tooltipElement.remove();\n                    this.$tooltipElement = null;\n                }\n            };\n\n            this.addListeners();\n        }\n\n        addListeners() {\n            document.addEventListener('mouseenter', this.onMouseEnter, true);\n            document.addEventListener('mouseleave', this.onMouseLeave, true);\n            document.addEventListener('mousedown', this.onMouseDown);\n            document.addEventListener('click', this.onMouseDown);\n            document.addEventListener('keydown', this.onKeyDown);\n            addEventListener('ajax:before-update', this.hideAllTooltips);\n            addEventListener('page:before-render', this.hideAllTooltips);\n        }\n\n        clear() {\n            this.clearTooltipTimeout();\n            this.destroyTooltip();\n        }\n\n        clearTooltipTimeout() {\n            if (this.tooltipTimeout !== null) {\n                clearTimeout(this.tooltipTimeout);\n            }\n\n            this.tooltipTimeout = null;\n        }\n\n        createTooltip(element) {\n            if (!this.$tooltipElement) {\n                this.$tooltipElement = $(\n                    '<div class=\"october-tooltip tooltip-hidden tooltip-invisible\"><span class=\"tooltip-text\"></span><span class=\"tooltip-hotkey\"></span></div>'\n                );\n                $(document.body).append(this.$tooltipElement);\n            }\n\n            this.$tooltipElement.find('.tooltip-text').text(element.getAttribute('data-tooltip-text'));\n            var tooltipHotkey = element.getAttribute('data-tooltip-hotkey'),\n                hotkeySpan = this.$tooltipElement.find('.tooltip-hotkey').html('');\n\n            if (tooltipHotkey) {\n                tooltipHotkey.split(',').forEach(function(hotkeys) {\n                    hotkeySpan.append($('<i>').text(hotkeys.trim()));\n                });\n            }\n\n            this.$tooltipElement.removeClass('tooltip-hidden');\n            this.$tooltipElement.css('left', 0);\n\n            var $element = $(element),\n                elementOffset = $element.offset(),\n                elementWidth = $element.outerWidth(),\n                elementHeight = $element.height(),\n                tooltipWidth = this.$tooltipElement.outerWidth(),\n                bodyWidth = $(document.body).width(),\n                left = Math.round(elementOffset.left + elementWidth / 2 - tooltipWidth / 2);\n\n            if (left < 0) {\n                left = 15;\n            }\n\n            var rightDiff = left + tooltipWidth - bodyWidth;\n            if (rightDiff > 0) {\n                left -= rightDiff + 15;\n            }\n\n            var tooltipHeight = this.$tooltipElement.outerHeight(),\n                position = element.getAttribute('data-tooltip-position'),\n                top = position === 'top'\n                    ? elementOffset.top - tooltipHeight - 5\n                    : elementOffset.top + elementHeight + 5;\n\n            this.$tooltipElement.css({\n                left: left,\n                top: top\n            });\n\n            this.$tooltipElement.removeClass('tooltip-invisible');\n        }\n\n        destroyTooltip() {\n            if (!this.$tooltipElement) {\n                return;\n            }\n\n            this.$tooltipElement.addClass('tooltip-invisible');\n\n            setTimeout(() => {\n                if (this.$tooltipElement) {\n                    this.$tooltipElement.addClass('tooltip-hidden');\n                }\n            }, 150);\n        }\n    }\n\n    var tooltips = new Tooltips();\n\n    oc.octoberTooltips = {\n        clear: function() {\n            tooltips.clear();\n        }\n    };\n\n    // @deprecated\n    $.oc.octoberTooltips = oc.octoberTooltips;\n})(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/october/october.treelist.js",
    "content": "/*\n * TreeList Widget\n *\n * Supported options:\n *  - handle - class name to use as a handle\n *  - nested - set to false if sorting should be kept within each OL container, if using\n *             a handle it should be focused enough to exclude nested handles.\n *\n * Events:\n * - move.oc.treelist - triggered when a node on the tree is moved.\n *\n * Dependencies:\n * - Sortable Plugin (october.sortable.js)\n */\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var TreeListWidget = function (element, options) {\n        this.$el = $(element)\n        this.options = options || {};\n\n        Base.call(this)\n\n        $.oc.foundation.controlUtils.markDisposable(element)\n        this.init()\n    }\n\n    TreeListWidget.prototype = Object.create(BaseProto)\n    TreeListWidget.prototype.constructor = TreeListWidget\n\n    TreeListWidget.prototype.init = function() {\n        var sortableOptions = {\n                handle: this.options.handle,\n                nested: this.options.nested,\n                onDrop: this.proxy(this.onDrop),\n                afterMove: this.proxy(this.onAfterMove)\n            }\n\n        this.$el.find('> ol').sortable($.extend(sortableOptions, this.options))\n\n        if (!this.options.nested)\n            this.$el.find('> ol ol').sortable($.extend(sortableOptions, this.options))\n\n        this.$el.one('dispose-control', this.proxy(this.dispose))\n    }\n\n    TreeListWidget.prototype.dispose = function() {\n        this.unbind()\n        BaseProto.dispose.call(this)\n    }\n\n    TreeListWidget.prototype.unbind = function() {\n        this.$el.off('dispose-control', this.proxy(this.dispose))\n\n        this.$el.find('> ol').sortable('destroy')\n\n        if (!this.options.nested) {\n            this.$el.find('> ol ol').sortable('destroy')\n        }\n\n        this.$el.removeData('oc.treelist')\n\n        this.$el = null\n        this.options = null\n    }\n\n    TreeListWidget.DEFAULTS = {\n        handle: null,\n        nested: true\n    }\n\n    // TREELIST EVENT HANDLERS\n    // ============================\n\n    TreeListWidget.prototype.onDrop = function($item, container, _super) {\n        // The event handler could be registered after the\n        // sortable is destroyed. This should be fixed later.\n        if (!this.$el) {\n            return\n        }\n\n        this.$el.trigger('move.oc.treelist', { item: $item, container: container })\n        _super($item, container)\n    }\n\n    TreeListWidget.prototype.onAfterMove = function($placeholder, container, $closestEl) {\n        if (!this.$el) {\n            return\n        }\n\n        this.$el.trigger('aftermove.oc.treelist', { placeholder: $placeholder, container: container, closestEl: $closestEl })\n    }\n\n    // TREELIST WIDGET PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.treeListWidget\n\n    $.fn.treeListWidget = function (option) {\n        var args = arguments,\n            result\n\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.treelist')\n            var options = $.extend({}, TreeListWidget.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.treelist', (data = new TreeListWidget(this, options)))\n            if (typeof option == 'string') result = data[option].call(data)\n            if (typeof result != 'undefined') return false\n        })\n\n        return result ? result : this\n      }\n\n    $.fn.treeListWidget.Constructor = TreeListWidget\n\n    // TREELIST WIDGET NO CONFLICT\n    // =================\n\n    $.fn.treeListWidget.noConflict = function () {\n        $.fn.treeListWidget = old\n        return this\n    }\n\n    // TREELIST WIDGET DATA-API\n    // ==============\n\n    $(document).render(function(){\n        $('[data-control=\"treelist\"]').treeListWidget();\n    })\n\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/assets/js/october/october.vueutils.js",
    "content": "+(function($) {\n    'use strict';\n    var VueUtils = function() {\n        function findTraverseObjects(objectArray, currentKey, keyProperty) {\n            for (var index = 0; index < objectArray.length; index++) {\n                if (objectArray[index][keyProperty] === currentKey) {\n                    return objectArray[index];\n                }\n            }\n\n            return null;\n        }\n\n        this.getObjectProperty = function(obj, propertyPath) {\n            var pathParts = propertyPath.split('.'),\n                currentObject = obj;\n\n            for (var index = 0; index < pathParts.length; index++) {\n                var currentProperty = pathParts[index];\n\n                if (currentObject[currentProperty] === undefined) {\n                    return undefined;\n                }\n\n                currentObject = currentObject[currentProperty];\n            }\n\n            return currentObject;\n        };\n\n        this.getCleanObject = function(obj) {\n            return JSON.parse(JSON.stringify(obj));\n        };\n\n        this.findObjectByKeyPath = function(objectArray, keyPathArray, childrenListProperty, keyProperty) {\n            var keyPathCopy = keyPathArray.slice(),\n                currentKey = keyPathCopy.shift(),\n                obj = null;\n\n            while (currentKey !== undefined) {\n                if (!objectArray) {\n                    return null;\n                }\n\n                obj = findTraverseObjects(objectArray, currentKey, keyProperty);\n                if (obj === null) {\n                    return obj;\n                }\n\n                objectArray = this.getObjectProperty(obj, childrenListProperty);\n                if (objectArray === undefined) {\n                    objectArray = [];\n                }\n\n                currentKey = keyPathCopy.shift();\n            }\n\n            return obj;\n        };\n\n        this.findObjectsByProperty = function(objectArray, childrenListProperty, propertyName, propertyValue, path) {\n            var result = [];\n\n            function traverse(objects) {\n                for (var index = 0; index < objects.length; index++) {\n                    var object = objects[index];\n\n                    if (object[propertyName] === propertyValue) {\n                        result.push(object);\n                    }\n\n                    traverse(object[childrenListProperty] || []);\n                }\n            }\n\n            traverse(objectArray);\n\n            return result;\n        };\n\n        this.getObjectPathByProperty = function(objectArray, childrenListProperty, propertyName, propertyValue) {\n            function traverse(objects, path) {\n                for (var index = 0; index < objects.length; index++) {\n                    var object = objects[index],\n                        currentPropertyValue = object[propertyName];\n\n                    if (currentPropertyValue === propertyValue) {\n                        return path.concat(currentPropertyValue);\n                    }\n\n                    var childPath = traverse(object[childrenListProperty] || [], path.concat(currentPropertyValue));\n                    if (childPath) {\n                        return childPath;\n                    }\n                }\n            }\n\n            return traverse(objectArray, []);\n        };\n\n        this.findObjectParentInfoByProperty = function(objectArray, childrenListProperty, propertyName, propertyValue) {\n            function traverse(objects) {\n                for (var index = 0; index < objects.length; index++) {\n                    var object = objects[index];\n\n                    if (object[propertyName] === propertyValue) {\n                        return {\n                            parentArray: objects,\n                            index: index,\n                            object: object\n                        };\n                    }\n\n                    var subtreeResult = traverse(object[childrenListProperty] || []);\n                    if (subtreeResult) {\n                        return subtreeResult;\n                    }\n                }\n            }\n\n            return traverse(objectArray);\n        };\n\n        this.getFlattenNodes = function(objectArray, childrenListProperty) {\n            var result = [];\n\n            function traverse(objects) {\n                for (var index = 0; index < objects.length; index++) {\n                    var object = objects[index];\n\n                    traverse(object[childrenListProperty] || []);\n                    result.push(object);\n                }\n            }\n\n            traverse(objectArray);\n\n            return result;\n        };\n\n        this.stringHashCode = function(value) {\n            var hash = 0,\n                i,\n                chr;\n\n            for (i = 0; i < value.length; i++) {\n                chr = value.charCodeAt(i);\n                hash = (hash << 5) - hash + chr;\n                hash |= 0;\n            }\n\n            return hash;\n        };\n\n        this.syncObjectProperties = function(srcObj, destObj) {\n            for (var srcProp in srcObj) {\n                if (!srcObj.hasOwnProperty(srcProp)) {\n                    continue;\n                }\n\n                destObj[srcProp] = srcObj[srcProp];\n            }\n\n            for (var destProp in destObj) {\n                if (!destObj.hasOwnProperty(destProp)) {\n                    continue;\n                }\n\n                if (!srcObj.hasOwnProperty(destProp)) {\n                    delete destObj[destProp];\n                }\n            }\n        };\n\n        this.stringFuzzySearch = function (query, str) {\n            var queryArray = query.split(' '),\n                wordsFound = 0;\n\n            for (var index = 0; index < queryArray.length; index++) {\n                if (str.indexOf(queryArray[index]) !== -1) {\n                    wordsFound++;\n                }\n            }\n\n            return wordsFound == queryArray.length;\n        };\n\n        this.getRelativeOffset = function (element1, element2) {\n            var offset1 = $(element1).offset(),\n                offset2 = $(element2).offset();\n\n            return {\n                left: offset1.left - offset2.left,\n                top: offset1.top - offset2.top\n            }\n        };\n\n        this.getToolbarExtensionPoint = function (source, element) {\n            // Expected source format: eventBus::toolbarExtensionPoint\n            let parts = source.split('::');\n            if (parts.length !== 2) {\n                parts = ['eventBus', parts[0]];\n            }\n\n            const vueApp = oc.VueApp.getFromElement(element);\n            if (vueApp) {\n                return {\n                    bus: vueApp.getState(parts[0]),\n                    state: vueApp.getState(parts[1])\n                };\n            }\n        };\n    };\n\n    $.oc.vueUtils = new VueUtils();\n})(window.jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/onboarding.js",
    "content": "+function ($) { \"use strict\";\n    if (!$) {\n        return;\n    }\n\n    var OnboardingPopup = function () {\n        var $collapsedWidget = null;\n\n        function init() {\n            $collapsedWidget = $('<div class=\"onboarding-popup-collapsed\"><div></div></div>');\n            $(document.body).append($collapsedWidget);\n            playCollapsedAnimation();\n            initListeners();\n        }\n\n        function initListeners() {\n            $collapsedWidget.on('click', onCollapsedClick)\n        }\n\n        function playCollapsedAnimation() {\n            $collapsedWidget.addClass('onboarding-popup-collapse-animation-start');\n            window.setTimeout(function () {\n                $collapsedWidget.addClass('onboarding-popup-just-collapsed');\n                window.setTimeout(function () {\n                    $collapsedWidget.removeClass('onboarding-popup-just-collapsed');\n                    $collapsedWidget.removeClass('onboarding-popup-collapse-animation-start');\n                }, 2000);\n            }, 50);\n        }\n\n        function onCollapsedClick() {\n            $(document.body).addClass('onboarding-popup-visible');\n\n            $.popup({\n                handler: 'onRenewOctoberCmsLicense'\n            }).one('hide.oc.popup', function() {\n                setTimeout(function() {\n                    $(document.body).removeClass('onboarding-popup-visible');\n                    playCollapsedAnimation();\n                }, 200);\n            });\n        }\n\n        init();\n    };\n\n    addEventListener('page:load', function() {\n        if (!$(document.body).hasClass('outer') && $.oc.backendUrl) {\n            new OnboardingPopup();\n        }\n    });\n}(jQuery);\n"
  },
  {
    "path": "modules/backend/assets/js/ph-icons-list.js",
    "content": "export default {\n    \"ph ph-address-book\": \"Address Book\",\n        \"ph ph-airplane\": \"Airplane\",\n        \"ph ph-airplane-in-flight\": \"Airplane In Flight\",\n        \"ph ph-airplane-landing\": \"Airplane Landing\",\n        \"ph ph-airplane-takeoff\": \"Airplane Takeoff\",\n        \"ph ph-airplane-tilt\": \"Airplane Tilt\",\n        \"ph ph-airplay\": \"Airplay\",\n        \"ph ph-air-traffic-control\": \"Air Traffic Control\",\n        \"ph ph-alarm\": \"Alarm\",\n        \"ph ph-alien\": \"Alien\",\n        \"ph ph-align-bottom\": \"Align Bottom\",\n        \"ph ph-align-bottom-simple\": \"Align Bottom Simple\",\n        \"ph ph-align-center-horizontal\": \"Align Center Horizontal\",\n        \"ph ph-align-center-horizontal-simple\": \"Align Center Horizontal Simple\",\n        \"ph ph-align-center-vertical\": \"Align Center Vertical\",\n        \"ph ph-align-center-vertical-simple\": \"Align Center Vertical Simple\",\n        \"ph ph-align-left\": \"Align Left\",\n        \"ph ph-align-left-simple\": \"Align Left Simple\",\n        \"ph ph-align-right\": \"Align Right\",\n        \"ph ph-align-right-simple\": \"Align Right Simple\",\n        \"ph ph-align-top\": \"Align Top\",\n        \"ph ph-align-top-simple\": \"Align Top Simple\",\n        \"ph ph-amazon-logo\": \"Amazon Logo\",\n        \"ph ph-anchor\": \"Anchor\",\n        \"ph ph-anchor-simple\": \"Anchor Simple\",\n        \"ph ph-android-logo\": \"Android Logo\",\n        \"ph ph-angular-logo\": \"Angular Logo\",\n        \"ph ph-aperture\": \"Aperture\",\n        \"ph ph-apple-logo\": \"Apple Logo\",\n        \"ph ph-apple-podcasts-logo\": \"Apple Podcasts Logo\",\n        \"ph ph-app-store-logo\": \"App Store Logo\",\n        \"ph ph-app-window\": \"App Window\",\n        \"ph ph-archive\": \"Archive\",\n        \"ph ph-archive-box\": \"Archive Box\",\n        \"ph ph-archive-tray\": \"Archive Tray\",\n        \"ph ph-armchair\": \"Armchair\",\n        \"ph ph-arrow-arc-left\": \"Arrow Arc Left\",\n        \"ph ph-arrow-arc-right\": \"Arrow Arc Right\",\n        \"ph ph-arrow-bend-double-up-left\": \"Arrow Bend Double Up Left\",\n        \"ph ph-arrow-bend-double-up-right\": \"Arrow Bend Double Up Right\",\n        \"ph ph-arrow-bend-down-left\": \"Arrow Bend Down Left\",\n        \"ph ph-arrow-bend-down-right\": \"Arrow Bend Down Right\",\n        \"ph ph-arrow-bend-left-down\": \"Arrow Bend Left Down\",\n        \"ph ph-arrow-bend-left-up\": \"Arrow Bend Left Up\",\n        \"ph ph-arrow-bend-right-down\": \"Arrow Bend Right Down\",\n        \"ph ph-arrow-bend-right-up\": \"Arrow Bend Right Up\",\n        \"ph ph-arrow-bend-up-left\": \"Arrow Bend Up Left\",\n        \"ph ph-arrow-bend-up-right\": \"Arrow Bend Up Right\",\n        \"ph ph-arrow-circle-down\": \"Arrow Circle Down\",\n        \"ph ph-arrow-circle-down-left\": \"Arrow Circle Down Left\",\n        \"ph ph-arrow-circle-down-right\": \"Arrow Circle Down Right\",\n        \"ph ph-arrow-circle-left\": \"Arrow Circle Left\",\n        \"ph ph-arrow-circle-right\": \"Arrow Circle Right\",\n        \"ph ph-arrow-circle-up\": \"Arrow Circle Up\",\n        \"ph ph-arrow-circle-up-left\": \"Arrow Circle Up Left\",\n        \"ph ph-arrow-circle-up-right\": \"Arrow Circle Up Right\",\n        \"ph ph-arrow-clockwise\": \"Arrow Clockwise\",\n        \"ph ph-arrow-counter-clockwise\": \"Arrow Counter Clockwise\",\n        \"ph ph-arrow-down\": \"Arrow Down\",\n        \"ph ph-arrow-down-left\": \"Arrow Down Left\",\n        \"ph ph-arrow-down-right\": \"Arrow Down Right\",\n        \"ph ph-arrow-elbow-down-left\": \"Arrow Elbow Down Left\",\n        \"ph ph-arrow-elbow-down-right\": \"Arrow Elbow Down Right\",\n        \"ph ph-arrow-elbow-left\": \"Arrow Elbow Left\",\n        \"ph ph-arrow-elbow-left-down\": \"Arrow Elbow Left Down\",\n        \"ph ph-arrow-elbow-left-up\": \"Arrow Elbow Left Up\",\n        \"ph ph-arrow-elbow-right\": \"Arrow Elbow Right\",\n        \"ph ph-arrow-elbow-right-down\": \"Arrow Elbow Right Down\",\n        \"ph ph-arrow-elbow-right-up\": \"Arrow Elbow Right Up\",\n        \"ph ph-arrow-elbow-up-left\": \"Arrow Elbow Up Left\",\n        \"ph ph-arrow-elbow-up-right\": \"Arrow Elbow Up Right\",\n        \"ph ph-arrow-fat-down\": \"Arrow Fat Down\",\n        \"ph ph-arrow-fat-left\": \"Arrow Fat Left\",\n        \"ph ph-arrow-fat-line-down\": \"Arrow Fat Line Down\",\n        \"ph ph-arrow-fat-line-left\": \"Arrow Fat Line Left\",\n        \"ph ph-arrow-fat-line-right\": \"Arrow Fat Line Right\",\n        \"ph ph-arrow-fat-lines-down\": \"Arrow Fat Lines Down\",\n        \"ph ph-arrow-fat-lines-left\": \"Arrow Fat Lines Left\",\n        \"ph ph-arrow-fat-lines-right\": \"Arrow Fat Lines Right\",\n        \"ph ph-arrow-fat-lines-up\": \"Arrow Fat Lines Up\",\n        \"ph ph-arrow-fat-line-up\": \"Arrow Fat Line Up\",\n        \"ph ph-arrow-fat-right\": \"Arrow Fat Right\",\n        \"ph ph-arrow-fat-up\": \"Arrow Fat Up\",\n        \"ph ph-arrow-left\": \"Arrow Left\",\n        \"ph ph-arrow-line-down\": \"Arrow Line Down\",\n        \"ph ph-arrow-line-down-left\": \"Arrow Line Down Left\",\n        \"ph ph-arrow-line-down-right\": \"Arrow Line Down Right\",\n        \"ph ph-arrow-line-left\": \"Arrow Line Left\",\n        \"ph ph-arrow-line-right\": \"Arrow Line Right\",\n        \"ph ph-arrow-line-up\": \"Arrow Line Up\",\n        \"ph ph-arrow-line-up-left\": \"Arrow Line Up Left\",\n        \"ph ph-arrow-line-up-right\": \"Arrow Line Up Right\",\n        \"ph ph-arrow-right\": \"Arrow Right\",\n        \"ph ph-arrows-clockwise\": \"Arrows Clockwise\",\n        \"ph ph-arrows-counter-clockwise\": \"Arrows Counter Clockwise\",\n        \"ph ph-arrows-down-up\": \"Arrows Down Up\",\n        \"ph ph-arrows-horizontal\": \"Arrows Horizontal\",\n        \"ph ph-arrows-in\": \"Arrows In\",\n        \"ph ph-arrows-in-cardinal\": \"Arrows In Cardinal\",\n        \"ph ph-arrows-in-line-horizontal\": \"Arrows In Line Horizontal\",\n        \"ph ph-arrows-in-line-vertical\": \"Arrows In Line Vertical\",\n        \"ph ph-arrows-in-simple\": \"Arrows In Simple\",\n        \"ph ph-arrows-left-right\": \"Arrows Left Right\",\n        \"ph ph-arrows-merge\": \"Arrows Merge\",\n        \"ph ph-arrows-out\": \"Arrows Out\",\n        \"ph ph-arrows-out-cardinal\": \"Arrows Out Cardinal\",\n        \"ph ph-arrows-out-line-horizontal\": \"Arrows Out Line Horizontal\",\n        \"ph ph-arrows-out-line-vertical\": \"Arrows Out Line Vertical\",\n        \"ph ph-arrows-out-simple\": \"Arrows Out Simple\",\n        \"ph ph-arrow-square-down\": \"Arrow Square Down\",\n        \"ph ph-arrow-square-down-left\": \"Arrow Square Down Left\",\n        \"ph ph-arrow-square-down-right\": \"Arrow Square Down Right\",\n        \"ph ph-arrow-square-in\": \"Arrow Square In\",\n        \"ph ph-arrow-square-left\": \"Arrow Square Left\",\n        \"ph ph-arrow-square-out\": \"Arrow Square Out\",\n        \"ph ph-arrow-square-right\": \"Arrow Square Right\",\n        \"ph ph-arrow-square-up\": \"Arrow Square Up\",\n        \"ph ph-arrow-square-up-left\": \"Arrow Square Up Left\",\n        \"ph ph-arrow-square-up-right\": \"Arrow Square Up Right\",\n        \"ph ph-arrows-split\": \"Arrows Split\",\n        \"ph ph-arrows-vertical\": \"Arrows Vertical\",\n        \"ph ph-arrow-u-down-left\": \"Arrow U Down Left\",\n        \"ph ph-arrow-u-down-right\": \"Arrow U Down Right\",\n        \"ph ph-arrow-u-left-down\": \"Arrow U Left Down\",\n        \"ph ph-arrow-u-left-up\": \"Arrow U Left Up\",\n        \"ph ph-arrow-up\": \"Arrow Up\",\n        \"ph ph-arrow-up-left\": \"Arrow Up Left\",\n        \"ph ph-arrow-up-right\": \"Arrow Up Right\",\n        \"ph ph-arrow-u-right-down\": \"Arrow U Right Down\",\n        \"ph ph-arrow-u-right-up\": \"Arrow U Right Up\",\n        \"ph ph-arrow-u-up-left\": \"Arrow U Up Left\",\n        \"ph ph-arrow-u-up-right\": \"Arrow U Up Right\",\n        \"ph ph-article\": \"Article\",\n        \"ph ph-article-medium\": \"Article Medium\",\n        \"ph ph-article-ny-times\": \"Article Ny Times\",\n        \"ph ph-asterisk\": \"Asterisk\",\n        \"ph ph-asterisk-simple\": \"Asterisk Simple\",\n        \"ph ph-at\": \"At\",\n        \"ph ph-atom\": \"Atom\",\n        \"ph ph-baby\": \"Baby\",\n        \"ph ph-backpack\": \"Backpack\",\n        \"ph ph-backspace\": \"Backspace\",\n        \"ph ph-bag\": \"Bag\",\n        \"ph ph-bag-simple\": \"Bag Simple\",\n        \"ph ph-balloon\": \"Balloon\",\n        \"ph ph-bandaids\": \"Bandaids\",\n        \"ph ph-bank\": \"Bank\",\n        \"ph ph-barbell\": \"Barbell\",\n        \"ph ph-barcode\": \"Barcode\",\n        \"ph ph-barricade\": \"Barricade\",\n        \"ph ph-baseball\": \"Baseball\",\n        \"ph ph-baseball-cap\": \"Baseball Cap\",\n        \"ph ph-basket\": \"Basket\",\n        \"ph ph-basketball\": \"Basketball\",\n        \"ph ph-bathtub\": \"Bathtub\",\n        \"ph ph-battery-charging\": \"Battery Charging\",\n        \"ph ph-battery-charging-vertical\": \"Battery Charging Vertical\",\n        \"ph ph-battery-empty\": \"Battery Empty\",\n        \"ph ph-battery-full\": \"Battery Full\",\n        \"ph ph-battery-high\": \"Battery High\",\n        \"ph ph-battery-low\": \"Battery Low\",\n        \"ph ph-battery-medium\": \"Battery Medium\",\n        \"ph ph-battery-plus\": \"Battery Plus\",\n        \"ph ph-battery-plus-vertical\": \"Battery Plus Vertical\",\n        \"ph ph-battery-vertical-empty\": \"Battery Vertical Empty\",\n        \"ph ph-battery-vertical-full\": \"Battery Vertical Full\",\n        \"ph ph-battery-vertical-high\": \"Battery Vertical High\",\n        \"ph ph-battery-vertical-low\": \"Battery Vertical Low\",\n        \"ph ph-battery-vertical-medium\": \"Battery Vertical Medium\",\n        \"ph ph-battery-warning\": \"Battery Warning\",\n        \"ph ph-battery-warning-vertical\": \"Battery Warning Vertical\",\n        \"ph ph-bed\": \"Bed\",\n        \"ph ph-beer-bottle\": \"Beer Bottle\",\n        \"ph ph-beer-stein\": \"Beer Stein\",\n        \"ph ph-behance-logo\": \"Behance Logo\",\n        \"ph ph-bell\": \"Bell\",\n        \"ph ph-bell-ringing\": \"Bell Ringing\",\n        \"ph ph-bell-simple\": \"Bell Simple\",\n        \"ph ph-bell-simple-ringing\": \"Bell Simple Ringing\",\n        \"ph ph-bell-simple-slash\": \"Bell Simple Slash\",\n        \"ph ph-bell-simple-z\": \"Bell Simple Z\",\n        \"ph ph-bell-slash\": \"Bell Slash\",\n        \"ph ph-bell-z\": \"Bell Z\",\n        \"ph ph-bezier-curve\": \"Bezier Curve\",\n        \"ph ph-bicycle\": \"Bicycle\",\n        \"ph ph-binoculars\": \"Binoculars\",\n        \"ph ph-bird\": \"Bird\",\n        \"ph ph-bluetooth\": \"Bluetooth\",\n        \"ph ph-bluetooth-connected\": \"Bluetooth Connected\",\n        \"ph ph-bluetooth-slash\": \"Bluetooth Slash\",\n        \"ph ph-bluetooth-x\": \"Bluetooth X\",\n        \"ph ph-boat\": \"Boat\",\n        \"ph ph-bone\": \"Bone\",\n        \"ph ph-book\": \"Book\",\n        \"ph ph-book-bookmark\": \"Book Bookmark\",\n        \"ph ph-bookmark\": \"Bookmark\",\n        \"ph ph-bookmarks\": \"Bookmarks\",\n        \"ph ph-bookmark-simple\": \"Bookmark Simple\",\n        \"ph ph-bookmarks-simple\": \"Bookmarks Simple\",\n        \"ph ph-book-open\": \"Book Open\",\n        \"ph ph-book-open-text\": \"Book Open Text\",\n        \"ph ph-books\": \"Books\",\n        \"ph ph-boot\": \"Boot\",\n        \"ph ph-bounding-box\": \"Bounding Box\",\n        \"ph ph-bowl-food\": \"Bowl Food\",\n        \"ph ph-brackets-angle\": \"Brackets Angle\",\n        \"ph ph-brackets-curly\": \"Brackets Curly\",\n        \"ph ph-brackets-round\": \"Brackets Round\",\n        \"ph ph-brackets-square\": \"Brackets Square\",\n        \"ph ph-brain\": \"Brain\",\n        \"ph ph-brandy\": \"Brandy\",\n        \"ph ph-bridge\": \"Bridge\",\n        \"ph ph-briefcase\": \"Briefcase\",\n        \"ph ph-briefcase-metal\": \"Briefcase Metal\",\n        \"ph ph-broadcast\": \"Broadcast\",\n        \"ph ph-broom\": \"Broom\",\n        \"ph ph-browser\": \"Browser\",\n        \"ph ph-browsers\": \"Browsers\",\n        \"ph ph-bug\": \"Bug\",\n        \"ph ph-bug-beetle\": \"Bug Beetle\",\n        \"ph ph-bug-droid\": \"Bug Droid\",\n        \"ph ph-buildings\": \"Buildings\",\n        \"ph ph-bus\": \"Bus\",\n        \"ph ph-butterfly\": \"Butterfly\",\n        \"ph ph-cactus\": \"Cactus\",\n        \"ph ph-cake\": \"Cake\",\n        \"ph ph-calculator\": \"Calculator\",\n        \"ph ph-calendar\": \"Calendar\",\n        \"ph ph-calendar-blank\": \"Calendar Blank\",\n        \"ph ph-calendar-check\": \"Calendar Check\",\n        \"ph ph-calendar-plus\": \"Calendar Plus\",\n        \"ph ph-calendar-x\": \"Calendar X\",\n        \"ph ph-call-bell\": \"Call Bell\",\n        \"ph ph-camera\": \"Camera\",\n        \"ph ph-camera-plus\": \"Camera Plus\",\n        \"ph ph-camera-rotate\": \"Camera Rotate\",\n        \"ph ph-camera-slash\": \"Camera Slash\",\n        \"ph ph-campfire\": \"Campfire\",\n        \"ph ph-car\": \"Car\",\n        \"ph ph-cardholder\": \"Cardholder\",\n        \"ph ph-cards\": \"Cards\",\n        \"ph ph-caret-circle-double-down\": \"Caret Circle Double Down\",\n        \"ph ph-caret-circle-double-left\": \"Caret Circle Double Left\",\n        \"ph ph-caret-circle-double-right\": \"Caret Circle Double Right\",\n        \"ph ph-caret-circle-double-up\": \"Caret Circle Double Up\",\n        \"ph ph-caret-circle-down\": \"Caret Circle Down\",\n        \"ph ph-caret-circle-left\": \"Caret Circle Left\",\n        \"ph ph-caret-circle-right\": \"Caret Circle Right\",\n        \"ph ph-caret-circle-up\": \"Caret Circle Up\",\n        \"ph ph-caret-circle-up-down\": \"Caret Circle Up Down\",\n        \"ph ph-caret-double-down\": \"Caret Double Down\",\n        \"ph ph-caret-double-left\": \"Caret Double Left\",\n        \"ph ph-caret-double-right\": \"Caret Double Right\",\n        \"ph ph-caret-double-up\": \"Caret Double Up\",\n        \"ph ph-caret-down\": \"Caret Down\",\n        \"ph ph-caret-left\": \"Caret Left\",\n        \"ph ph-caret-right\": \"Caret Right\",\n        \"ph ph-caret-up\": \"Caret Up\",\n        \"ph ph-caret-up-down\": \"Caret Up Down\",\n        \"ph ph-car-profile\": \"Car Profile\",\n        \"ph ph-carrot\": \"Carrot\",\n        \"ph ph-car-simple\": \"Car Simple\",\n        \"ph ph-cassette-tape\": \"Cassette Tape\",\n        \"ph ph-castle-turret\": \"Castle Turret\",\n        \"ph ph-cat\": \"Cat\",\n        \"ph ph-cell-signal-full\": \"Cell Signal Full\",\n        \"ph ph-cell-signal-high\": \"Cell Signal High\",\n        \"ph ph-cell-signal-low\": \"Cell Signal Low\",\n        \"ph ph-cell-signal-medium\": \"Cell Signal Medium\",\n        \"ph ph-cell-signal-none\": \"Cell Signal None\",\n        \"ph ph-cell-signal-slash\": \"Cell Signal Slash\",\n        \"ph ph-cell-signal-x\": \"Cell Signal X\",\n        \"ph ph-certificate\": \"Certificate\",\n        \"ph ph-chair\": \"Chair\",\n        \"ph ph-chalkboard\": \"Chalkboard\",\n        \"ph ph-chalkboard-simple\": \"Chalkboard Simple\",\n        \"ph ph-chalkboard-teacher\": \"Chalkboard Teacher\",\n        \"ph ph-champagne\": \"Champagne\",\n        \"ph ph-charging-station\": \"Charging Station\",\n        \"ph ph-chart-bar\": \"Chart Bar\",\n        \"ph ph-chart-bar-horizontal\": \"Chart Bar Horizontal\",\n        \"ph ph-chart-donut\": \"Chart Donut\",\n        \"ph ph-chart-line\": \"Chart Line\",\n        \"ph ph-chart-line-down\": \"Chart Line Down\",\n        \"ph ph-chart-line-up\": \"Chart Line Up\",\n        \"ph ph-chart-pie\": \"Chart Pie\",\n        \"ph ph-chart-pie-slice\": \"Chart Pie Slice\",\n        \"ph ph-chart-polar\": \"Chart Polar\",\n        \"ph ph-chart-scatter\": \"Chart Scatter\",\n        \"ph ph-chat\": \"Chat\",\n        \"ph ph-chat-centered\": \"Chat Centered\",\n        \"ph ph-chat-centered-dots\": \"Chat Centered Dots\",\n        \"ph ph-chat-centered-text\": \"Chat Centered Text\",\n        \"ph ph-chat-circle\": \"Chat Circle\",\n        \"ph ph-chat-circle-dots\": \"Chat Circle Dots\",\n        \"ph ph-chat-circle-text\": \"Chat Circle Text\",\n        \"ph ph-chat-dots\": \"Chat Dots\",\n        \"ph ph-chats\": \"Chats\",\n        \"ph ph-chats-circle\": \"Chats Circle\",\n        \"ph ph-chats-teardrop\": \"Chats Teardrop\",\n        \"ph ph-chat-teardrop\": \"Chat Teardrop\",\n        \"ph ph-chat-teardrop-dots\": \"Chat Teardrop Dots\",\n        \"ph ph-chat-teardrop-text\": \"Chat Teardrop Text\",\n        \"ph ph-chat-text\": \"Chat Text\",\n        \"ph ph-check\": \"Check\",\n        \"ph ph-check-circle\": \"Check Circle\",\n        \"ph ph-check-fat\": \"Check Fat\",\n        \"ph ph-checks\": \"Checks\",\n        \"ph ph-check-square\": \"Check Square\",\n        \"ph ph-check-square-offset\": \"Check Square Offset\",\n        \"ph ph-church\": \"Church\",\n        \"ph ph-circle\": \"Circle\",\n        \"ph ph-circle-dashed\": \"Circle Dashed\",\n        \"ph ph-circle-half\": \"Circle Half\",\n        \"ph ph-circle-half-tilt\": \"Circle Half Tilt\",\n        \"ph ph-circle-notch\": \"Circle Notch\",\n        \"ph ph-circles-four\": \"Circles Four\",\n        \"ph ph-circles-three\": \"Circles Three\",\n        \"ph ph-circles-three-plus\": \"Circles Three Plus\",\n        \"ph ph-circuitry\": \"Circuitry\",\n        \"ph ph-clipboard\": \"Clipboard\",\n        \"ph ph-clipboard-text\": \"Clipboard Text\",\n        \"ph ph-clock\": \"Clock\",\n        \"ph ph-clock-afternoon\": \"Clock Afternoon\",\n        \"ph ph-clock-clockwise\": \"Clock Clockwise\",\n        \"ph ph-clock-countdown\": \"Clock Countdown\",\n        \"ph ph-clock-counter-clockwise\": \"Clock Counter Clockwise\",\n        \"ph ph-closed-captioning\": \"Closed Captioning\",\n        \"ph ph-cloud\": \"Cloud\",\n        \"ph ph-cloud-arrow-down\": \"Cloud Arrow Down\",\n        \"ph ph-cloud-arrow-up\": \"Cloud Arrow Up\",\n        \"ph ph-cloud-check\": \"Cloud Check\",\n        \"ph ph-cloud-fog\": \"Cloud Fog\",\n        \"ph ph-cloud-lightning\": \"Cloud Lightning\",\n        \"ph ph-cloud-moon\": \"Cloud Moon\",\n        \"ph ph-cloud-rain\": \"Cloud Rain\",\n        \"ph ph-cloud-slash\": \"Cloud Slash\",\n        \"ph ph-cloud-snow\": \"Cloud Snow\",\n        \"ph ph-cloud-sun\": \"Cloud Sun\",\n        \"ph ph-cloud-warning\": \"Cloud Warning\",\n        \"ph ph-cloud-x\": \"Cloud X\",\n        \"ph ph-club\": \"Club\",\n        \"ph ph-coat-hanger\": \"Coat Hanger\",\n        \"ph ph-coda-logo\": \"Coda Logo\",\n        \"ph ph-code\": \"Code\",\n        \"ph ph-code-block\": \"Code Block\",\n        \"ph ph-codepen-logo\": \"Codepen Logo\",\n        \"ph ph-codesandbox-logo\": \"Codesandbox Logo\",\n        \"ph ph-code-simple\": \"Code Simple\",\n        \"ph ph-coffee\": \"Coffee\",\n        \"ph ph-coin\": \"Coin\",\n        \"ph ph-coins\": \"Coins\",\n        \"ph ph-coin-vertical\": \"Coin Vertical\",\n        \"ph ph-columns\": \"Columns\",\n        \"ph ph-command\": \"Command\",\n        \"ph ph-compass\": \"Compass\",\n        \"ph ph-compass-tool\": \"Compass Tool\",\n        \"ph ph-computer-tower\": \"Computer Tower\",\n        \"ph ph-confetti\": \"Confetti\",\n        \"ph ph-contactless-payment\": \"Contactless Payment\",\n        \"ph ph-control\": \"Control\",\n        \"ph ph-cookie\": \"Cookie\",\n        \"ph ph-cooking-pot\": \"Cooking Pot\",\n        \"ph ph-copy\": \"Copy\",\n        \"ph ph-copyleft\": \"Copyleft\",\n        \"ph ph-copyright\": \"Copyright\",\n        \"ph ph-copy-simple\": \"Copy Simple\",\n        \"ph ph-corners-in\": \"Corners In\",\n        \"ph ph-corners-out\": \"Corners Out\",\n        \"ph ph-couch\": \"Couch\",\n        \"ph ph-cpu\": \"Cpu\",\n        \"ph ph-credit-card\": \"Credit Card\",\n        \"ph ph-crop\": \"Crop\",\n        \"ph ph-cross\": \"Cross\",\n        \"ph ph-crosshair\": \"Crosshair\",\n        \"ph ph-crosshair-simple\": \"Crosshair Simple\",\n        \"ph ph-crown\": \"Crown\",\n        \"ph ph-crown-simple\": \"Crown Simple\",\n        \"ph ph-cube\": \"Cube\",\n        \"ph ph-cube-focus\": \"Cube Focus\",\n        \"ph ph-cube-transparent\": \"Cube Transparent\",\n        \"ph ph-currency-btc\": \"Currency Btc\",\n        \"ph ph-currency-circle-dollar\": \"Currency Circle Dollar\",\n        \"ph ph-currency-cny\": \"Currency Cny\",\n        \"ph ph-currency-dollar\": \"Currency Dollar\",\n        \"ph ph-currency-dollar-simple\": \"Currency Dollar Simple\",\n        \"ph ph-currency-eth\": \"Currency Eth\",\n        \"ph ph-currency-eur\": \"Currency Eur\",\n        \"ph ph-currency-gbp\": \"Currency Gbp\",\n        \"ph ph-currency-inr\": \"Currency Inr\",\n        \"ph ph-currency-jpy\": \"Currency Jpy\",\n        \"ph ph-currency-krw\": \"Currency Krw\",\n        \"ph ph-currency-kzt\": \"Currency Kzt\",\n        \"ph ph-currency-ngn\": \"Currency Ngn\",\n        \"ph ph-currency-rub\": \"Currency Rub\",\n        \"ph ph-cursor\": \"Cursor\",\n        \"ph ph-cursor-click\": \"Cursor Click\",\n        \"ph ph-cursor-text\": \"Cursor Text\",\n        \"ph ph-cylinder\": \"Cylinder\",\n        \"ph ph-database\": \"Database\",\n        \"ph ph-desktop\": \"Desktop\",\n        \"ph ph-desktop-tower\": \"Desktop Tower\",\n        \"ph ph-detective\": \"Detective\",\n        \"ph ph-device-mobile\": \"Device Mobile\",\n        \"ph ph-device-mobile-camera\": \"Device Mobile Camera\",\n        \"ph ph-device-mobile-speaker\": \"Device Mobile Speaker\",\n        \"ph ph-devices\": \"Devices\",\n        \"ph ph-device-tablet\": \"Device Tablet\",\n        \"ph ph-device-tablet-camera\": \"Device Tablet Camera\",\n        \"ph ph-device-tablet-speaker\": \"Device Tablet Speaker\",\n        \"ph ph-dev-to-logo\": \"Dev To Logo\",\n        \"ph ph-diamond\": \"Diamond\",\n        \"ph ph-diamonds-four\": \"Diamonds Four\",\n        \"ph ph-dice-five\": \"Dice Five\",\n        \"ph ph-dice-four\": \"Dice Four\",\n        \"ph ph-dice-one\": \"Dice One\",\n        \"ph ph-dice-six\": \"Dice Six\",\n        \"ph ph-dice-three\": \"Dice Three\",\n        \"ph ph-dice-two\": \"Dice Two\",\n        \"ph ph-disc\": \"Disc\",\n        \"ph ph-discord-logo\": \"Discord Logo\",\n        \"ph ph-divide\": \"Divide\",\n        \"ph ph-dna\": \"Dna\",\n        \"ph ph-dog\": \"Dog\",\n        \"ph ph-door\": \"Door\",\n        \"ph ph-door-open\": \"Door Open\",\n        \"ph ph-dot\": \"Dot\",\n        \"ph ph-dot-outline\": \"Dot Outline\",\n        \"ph ph-dots-nine\": \"Dots Nine\",\n        \"ph ph-dots-six\": \"Dots Six\",\n        \"ph ph-dots-six-vertical\": \"Dots Six Vertical\",\n        \"ph ph-dots-three\": \"Dots Three\",\n        \"ph ph-dots-three-circle\": \"Dots Three Circle\",\n        \"ph ph-dots-three-circle-vertical\": \"Dots Three Circle Vertical\",\n        \"ph ph-dots-three-outline\": \"Dots Three Outline\",\n        \"ph ph-dots-three-outline-vertical\": \"Dots Three Outline Vertical\",\n        \"ph ph-dots-three-vertical\": \"Dots Three Vertical\",\n        \"ph ph-download\": \"Download\",\n        \"ph ph-download-simple\": \"Download Simple\",\n        \"ph ph-dress\": \"Dress\",\n        \"ph ph-dribbble-logo\": \"Dribbble Logo\",\n        \"ph ph-drop\": \"Drop\",\n        \"ph ph-dropbox-logo\": \"Dropbox Logo\",\n        \"ph ph-drop-half\": \"Drop Half\",\n        \"ph ph-drop-half-bottom\": \"Drop Half Bottom\",\n        \"ph ph-ear\": \"Ear\",\n        \"ph ph-ear-slash\": \"Ear Slash\",\n        \"ph ph-egg\": \"Egg\",\n        \"ph ph-egg-crack\": \"Egg Crack\",\n        \"ph ph-eject\": \"Eject\",\n        \"ph ph-eject-simple\": \"Eject Simple\",\n        \"ph ph-elevator\": \"Elevator\",\n        \"ph ph-engine\": \"Engine\",\n        \"ph ph-envelope\": \"Envelope\",\n        \"ph ph-envelope-open\": \"Envelope Open\",\n        \"ph ph-envelope-simple\": \"Envelope Simple\",\n        \"ph ph-envelope-simple-open\": \"Envelope Simple Open\",\n        \"ph ph-equalizer\": \"Equalizer\",\n        \"ph ph-equals\": \"Equals\",\n        \"ph ph-eraser\": \"Eraser\",\n        \"ph ph-escalator-down\": \"Escalator Down\",\n        \"ph ph-escalator-up\": \"Escalator Up\",\n        \"ph ph-exam\": \"Exam\",\n        \"ph ph-exclude\": \"Exclude\",\n        \"ph ph-exclude-square\": \"Exclude Square\",\n        \"ph ph-export\": \"Export\",\n        \"ph ph-eye\": \"Eye\",\n        \"ph ph-eye-closed\": \"Eye Closed\",\n        \"ph ph-eyedropper\": \"Eyedropper\",\n        \"ph ph-eyedropper-sample\": \"Eyedropper Sample\",\n        \"ph ph-eyeglasses\": \"Eyeglasses\",\n        \"ph ph-eye-slash\": \"Eye Slash\",\n        \"ph ph-facebook-logo\": \"Facebook Logo\",\n        \"ph ph-face-mask\": \"Face Mask\",\n        \"ph ph-factory\": \"Factory\",\n        \"ph ph-faders\": \"Faders\",\n        \"ph ph-faders-horizontal\": \"Faders Horizontal\",\n        \"ph ph-fan\": \"Fan\",\n        \"ph ph-fast-forward\": \"Fast Forward\",\n        \"ph ph-fast-forward-circle\": \"Fast Forward Circle\",\n        \"ph ph-feather\": \"Feather\",\n        \"ph ph-figma-logo\": \"Figma Logo\",\n        \"ph ph-file\": \"File\",\n        \"ph ph-file-archive\": \"File Archive\",\n        \"ph ph-file-arrow-down\": \"File Arrow Down\",\n        \"ph ph-file-arrow-up\": \"File Arrow Up\",\n        \"ph ph-file-audio\": \"File Audio\",\n        \"ph ph-file-cloud\": \"File Cloud\",\n        \"ph ph-file-code\": \"File Code\",\n        \"ph ph-file-css\": \"File Css\",\n        \"ph ph-file-csv\": \"File Csv\",\n        \"ph ph-file-dashed\": \"File Dashed\",\n        \"ph ph-file-dotted\": \"File Dotted\",\n        \"ph ph-file-doc\": \"File Doc\",\n        \"ph ph-file-html\": \"File Html\",\n        \"ph ph-file-image\": \"File Image\",\n        \"ph ph-file-jpg\": \"File Jpg\",\n        \"ph ph-file-js\": \"File Js\",\n        \"ph ph-file-jsx\": \"File Jsx\",\n        \"ph ph-file-lock\": \"File Lock\",\n        \"ph ph-file-magnifying-glass\": \"File Magnifying Glass\",\n        \"ph ph-file-search\": \"File Search\",\n        \"ph ph-file-minus\": \"File Minus\",\n        \"ph ph-file-pdf\": \"File Pdf\",\n        \"ph ph-file-plus\": \"File Plus\",\n        \"ph ph-file-png\": \"File Png\",\n        \"ph ph-file-ppt\": \"File Ppt\",\n        \"ph ph-file-rs\": \"File Rs\",\n        \"ph ph-files\": \"Files\",\n        \"ph ph-file-sql\": \"File Sql\",\n        \"ph ph-file-svg\": \"File Svg\",\n        \"ph ph-file-text\": \"File Text\",\n        \"ph ph-file-ts\": \"File Ts\",\n        \"ph ph-file-tsx\": \"File Tsx\",\n        \"ph ph-file-video\": \"File Video\",\n        \"ph ph-file-vue\": \"File Vue\",\n        \"ph ph-file-x\": \"File X\",\n        \"ph ph-file-xls\": \"File Xls\",\n        \"ph ph-file-zip\": \"File Zip\",\n        \"ph ph-film-reel\": \"Film Reel\",\n        \"ph ph-film-script\": \"Film Script\",\n        \"ph ph-film-slate\": \"Film Slate\",\n        \"ph ph-film-strip\": \"Film Strip\",\n        \"ph ph-fingerprint\": \"Fingerprint\",\n        \"ph ph-fingerprint-simple\": \"Fingerprint Simple\",\n        \"ph ph-finn-the-human\": \"Finn The Human\",\n        \"ph ph-fire\": \"Fire\",\n        \"ph ph-fire-extinguisher\": \"Fire Extinguisher\",\n        \"ph ph-fire-simple\": \"Fire Simple\",\n        \"ph ph-first-aid\": \"First Aid\",\n        \"ph ph-first-aid-kit\": \"First Aid Kit\",\n        \"ph ph-fish\": \"Fish\",\n        \"ph ph-fish-simple\": \"Fish Simple\",\n        \"ph ph-flag\": \"Flag\",\n        \"ph ph-flag-banner\": \"Flag Banner\",\n        \"ph ph-flag-checkered\": \"Flag Checkered\",\n        \"ph ph-flag-pennant\": \"Flag Pennant\",\n        \"ph ph-flame\": \"Flame\",\n        \"ph ph-flashlight\": \"Flashlight\",\n        \"ph ph-flask\": \"Flask\",\n        \"ph ph-floppy-disk\": \"Floppy Disk\",\n        \"ph ph-floppy-disk-back\": \"Floppy Disk Back\",\n        \"ph ph-flow-arrow\": \"Flow Arrow\",\n        \"ph ph-flower\": \"Flower\",\n        \"ph ph-flower-lotus\": \"Flower Lotus\",\n        \"ph ph-flower-tulip\": \"Flower Tulip\",\n        \"ph ph-flying-saucer\": \"Flying Saucer\",\n        \"ph ph-folder\": \"Folder\",\n        \"ph ph-folder-dashed\": \"Folder Dashed\",\n        \"ph ph-folder-dotted\": \"Folder Dotted\",\n        \"ph ph-folder-lock\": \"Folder Lock\",\n        \"ph ph-folder-minus\": \"Folder Minus\",\n        \"ph ph-folder-notch\": \"Folder Notch\",\n        \"ph ph-folder-notch-minus\": \"Folder Notch Minus\",\n        \"ph ph-folder-notch-open\": \"Folder Notch Open\",\n        \"ph ph-folder-notch-plus\": \"Folder Notch Plus\",\n        \"ph ph-folder-open\": \"Folder Open\",\n        \"ph ph-folder-plus\": \"Folder Plus\",\n        \"ph ph-folders\": \"Folders\",\n        \"ph ph-folder-simple\": \"Folder Simple\",\n        \"ph ph-folder-simple-dashed\": \"Folder Simple Dashed\",\n        \"ph ph-folder-simple-dotted\": \"Folder Simple Dotted\",\n        \"ph ph-folder-simple-lock\": \"Folder Simple Lock\",\n        \"ph ph-folder-simple-minus\": \"Folder Simple Minus\",\n        \"ph ph-folder-simple-plus\": \"Folder Simple Plus\",\n        \"ph ph-folder-simple-star\": \"Folder Simple Star\",\n        \"ph ph-folder-simple-user\": \"Folder Simple User\",\n        \"ph ph-folder-star\": \"Folder Star\",\n        \"ph ph-folder-user\": \"Folder User\",\n        \"ph ph-football\": \"Football\",\n        \"ph ph-footprints\": \"Footprints\",\n        \"ph ph-fork-knife\": \"Fork Knife\",\n        \"ph ph-frame-corners\": \"Frame Corners\",\n        \"ph ph-framer-logo\": \"Framer Logo\",\n        \"ph ph-function\": \"Function\",\n        \"ph ph-funnel\": \"Funnel\",\n        \"ph ph-funnel-simple\": \"Funnel Simple\",\n        \"ph ph-game-controller\": \"Game Controller\",\n        \"ph ph-garage\": \"Garage\",\n        \"ph ph-gas-can\": \"Gas Can\",\n        \"ph ph-gas-pump\": \"Gas Pump\",\n        \"ph ph-gauge\": \"Gauge\",\n        \"ph ph-gavel\": \"Gavel\",\n        \"ph ph-gear\": \"Gear\",\n        \"ph ph-gear-fine\": \"Gear Fine\",\n        \"ph ph-gear-six\": \"Gear Six\",\n        \"ph ph-gender-female\": \"Gender Female\",\n        \"ph ph-gender-intersex\": \"Gender Intersex\",\n        \"ph ph-gender-male\": \"Gender Male\",\n        \"ph ph-gender-neuter\": \"Gender Neuter\",\n        \"ph ph-gender-nonbinary\": \"Gender Nonbinary\",\n        \"ph ph-gender-transgender\": \"Gender Transgender\",\n        \"ph ph-ghost\": \"Ghost\",\n        \"ph ph-gif\": \"Gif\",\n        \"ph ph-gift\": \"Gift\",\n        \"ph ph-git-branch\": \"Git Branch\",\n        \"ph ph-git-commit\": \"Git Commit\",\n        \"ph ph-git-diff\": \"Git Diff\",\n        \"ph ph-git-fork\": \"Git Fork\",\n        \"ph ph-github-logo\": \"Github Logo\",\n        \"ph ph-gitlab-logo\": \"Gitlab Logo\",\n        \"ph ph-gitlab-logo-simple\": \"Gitlab Logo Simple\",\n        \"ph ph-git-merge\": \"Git Merge\",\n        \"ph ph-git-pull-request\": \"Git Pull Request\",\n        \"ph ph-globe\": \"Globe\",\n        \"ph ph-globe-hemisphere-east\": \"Globe Hemisphere East\",\n        \"ph ph-globe-hemisphere-west\": \"Globe Hemisphere West\",\n        \"ph ph-globe-simple\": \"Globe Simple\",\n        \"ph ph-globe-stand\": \"Globe Stand\",\n        \"ph ph-goggles\": \"Goggles\",\n        \"ph ph-goodreads-logo\": \"Goodreads Logo\",\n        \"ph ph-google-cardboard-logo\": \"Google Cardboard Logo\",\n        \"ph ph-google-chrome-logo\": \"Google Chrome Logo\",\n        \"ph ph-google-drive-logo\": \"Google Drive Logo\",\n        \"ph ph-google-logo\": \"Google Logo\",\n        \"ph ph-google-photos-logo\": \"Google Photos Logo\",\n        \"ph ph-google-play-logo\": \"Google Play Logo\",\n        \"ph ph-google-podcasts-logo\": \"Google Podcasts Logo\",\n        \"ph ph-gradient\": \"Gradient\",\n        \"ph ph-graduation-cap\": \"Graduation Cap\",\n        \"ph ph-grains\": \"Grains\",\n        \"ph ph-grains-slash\": \"Grains Slash\",\n        \"ph ph-graph\": \"Graph\",\n        \"ph ph-grid-four\": \"Grid Four\",\n        \"ph ph-grid-nine\": \"Grid Nine\",\n        \"ph ph-guitar\": \"Guitar\",\n        \"ph ph-hamburger\": \"Hamburger\",\n        \"ph ph-hammer\": \"Hammer\",\n        \"ph ph-hand\": \"Hand\",\n        \"ph ph-handbag\": \"Handbag\",\n        \"ph ph-handbag-simple\": \"Handbag Simple\",\n        \"ph ph-hand-coins\": \"Hand Coins\",\n        \"ph ph-hand-eye\": \"Hand Eye\",\n        \"ph ph-hand-fist\": \"Hand Fist\",\n        \"ph ph-hand-grabbing\": \"Hand Grabbing\",\n        \"ph ph-hand-heart\": \"Hand Heart\",\n        \"ph ph-hand-palm\": \"Hand Palm\",\n        \"ph ph-hand-pointing\": \"Hand Pointing\",\n        \"ph ph-hands-clapping\": \"Hands Clapping\",\n        \"ph ph-handshake\": \"Handshake\",\n        \"ph ph-hand-soap\": \"Hand Soap\",\n        \"ph ph-hands-praying\": \"Hands Praying\",\n        \"ph ph-hand-swipe-left\": \"Hand Swipe Left\",\n        \"ph ph-hand-swipe-right\": \"Hand Swipe Right\",\n        \"ph ph-hand-tap\": \"Hand Tap\",\n        \"ph ph-hand-waving\": \"Hand Waving\",\n        \"ph ph-hard-drive\": \"Hard Drive\",\n        \"ph ph-hard-drives\": \"Hard Drives\",\n        \"ph ph-hash\": \"Hash\",\n        \"ph ph-hash-straight\": \"Hash Straight\",\n        \"ph ph-headlights\": \"Headlights\",\n        \"ph ph-headphones\": \"Headphones\",\n        \"ph ph-headset\": \"Headset\",\n        \"ph ph-heart\": \"Heart\",\n        \"ph ph-heartbeat\": \"Heartbeat\",\n        \"ph ph-heart-break\": \"Heart Break\",\n        \"ph ph-heart-half\": \"Heart Half\",\n        \"ph ph-heart-straight\": \"Heart Straight\",\n        \"ph ph-heart-straight-break\": \"Heart Straight Break\",\n        \"ph ph-hexagon\": \"Hexagon\",\n        \"ph ph-high-heel\": \"High Heel\",\n        \"ph ph-highlighter-circle\": \"Highlighter Circle\",\n        \"ph ph-hoodie\": \"Hoodie\",\n        \"ph ph-horse\": \"Horse\",\n        \"ph ph-hourglass\": \"Hourglass\",\n        \"ph ph-hourglass-high\": \"Hourglass High\",\n        \"ph ph-hourglass-low\": \"Hourglass Low\",\n        \"ph ph-hourglass-medium\": \"Hourglass Medium\",\n        \"ph ph-hourglass-simple\": \"Hourglass Simple\",\n        \"ph ph-hourglass-simple-high\": \"Hourglass Simple High\",\n        \"ph ph-hourglass-simple-low\": \"Hourglass Simple Low\",\n        \"ph ph-hourglass-simple-medium\": \"Hourglass Simple Medium\",\n        \"ph ph-house\": \"House\",\n        \"ph ph-house-line\": \"House Line\",\n        \"ph ph-house-simple\": \"House Simple\",\n        \"ph ph-ice-cream\": \"Ice Cream\",\n        \"ph ph-identification-badge\": \"Identification Badge\",\n        \"ph ph-identification-card\": \"Identification Card\",\n        \"ph ph-image\": \"Image\",\n        \"ph ph-images\": \"Images\",\n        \"ph ph-image-square\": \"Image Square\",\n        \"ph ph-images-square\": \"Images Square\",\n        \"ph ph-infinity\": \"Infinity\",\n        \"ph ph-info\": \"Info\",\n        \"ph ph-instagram-logo\": \"Instagram Logo\",\n        \"ph ph-intersect\": \"Intersect\",\n        \"ph ph-intersect-square\": \"Intersect Square\",\n        \"ph ph-intersect-three\": \"Intersect Three\",\n        \"ph ph-jeep\": \"Jeep\",\n        \"ph ph-kanban\": \"Kanban\",\n        \"ph ph-key\": \"Key\",\n        \"ph ph-keyboard\": \"Keyboard\",\n        \"ph ph-keyhole\": \"Keyhole\",\n        \"ph ph-key-return\": \"Key Return\",\n        \"ph ph-knife\": \"Knife\",\n        \"ph ph-ladder\": \"Ladder\",\n        \"ph ph-ladder-simple\": \"Ladder Simple\",\n        \"ph ph-lamp\": \"Lamp\",\n        \"ph ph-laptop\": \"Laptop\",\n        \"ph ph-layout\": \"Layout\",\n        \"ph ph-leaf\": \"Leaf\",\n        \"ph ph-lifebuoy\": \"Lifebuoy\",\n        \"ph ph-lightbulb\": \"Lightbulb\",\n        \"ph ph-lightbulb-filament\": \"Lightbulb Filament\",\n        \"ph ph-lighthouse\": \"Lighthouse\",\n        \"ph ph-lightning\": \"Lightning\",\n        \"ph ph-lightning-a\": \"Lightning A\",\n        \"ph ph-lightning-slash\": \"Lightning Slash\",\n        \"ph ph-line-segment\": \"Line Segment\",\n        \"ph ph-line-segments\": \"Line Segments\",\n        \"ph ph-link\": \"Link\",\n        \"ph ph-link-break\": \"Link Break\",\n        \"ph ph-linkedin-logo\": \"Linkedin Logo\",\n        \"ph ph-link-simple\": \"Link Simple\",\n        \"ph ph-link-simple-break\": \"Link Simple Break\",\n        \"ph ph-link-simple-horizontal\": \"Link Simple Horizontal\",\n        \"ph ph-link-simple-horizontal-break\": \"Link Simple Horizontal Break\",\n        \"ph ph-linux-logo\": \"Linux Logo\",\n        \"ph ph-list\": \"List\",\n        \"ph ph-list-bullets\": \"List Bullets\",\n        \"ph ph-list-checks\": \"List Checks\",\n        \"ph ph-list-dashes\": \"List Dashes\",\n        \"ph ph-list-magnifying-glass\": \"List Magnifying Glass\",\n        \"ph ph-list-numbers\": \"List Numbers\",\n        \"ph ph-list-plus\": \"List Plus\",\n        \"ph ph-lock\": \"Lock\",\n        \"ph ph-lockers\": \"Lockers\",\n        \"ph ph-lock-key\": \"Lock Key\",\n        \"ph ph-lock-key-open\": \"Lock Key Open\",\n        \"ph ph-lock-laminated\": \"Lock Laminated\",\n        \"ph ph-lock-laminated-open\": \"Lock Laminated Open\",\n        \"ph ph-lock-open\": \"Lock Open\",\n        \"ph ph-lock-simple\": \"Lock Simple\",\n        \"ph ph-lock-simple-open\": \"Lock Simple Open\",\n        \"ph ph-magic-wand\": \"Magic Wand\",\n        \"ph ph-magnet\": \"Magnet\",\n        \"ph ph-magnet-straight\": \"Magnet Straight\",\n        \"ph ph-magnifying-glass\": \"Magnifying Glass\",\n        \"ph ph-magnifying-glass-minus\": \"Magnifying Glass Minus\",\n        \"ph ph-magnifying-glass-plus\": \"Magnifying Glass Plus\",\n        \"ph ph-map-pin\": \"Map Pin\",\n        \"ph ph-map-pin-line\": \"Map Pin Line\",\n        \"ph ph-map-trifold\": \"Map Trifold\",\n        \"ph ph-marker-circle\": \"Marker Circle\",\n        \"ph ph-martini\": \"Martini\",\n        \"ph ph-mask-happy\": \"Mask Happy\",\n        \"ph ph-mask-sad\": \"Mask Sad\",\n        \"ph ph-math-operations\": \"Math Operations\",\n        \"ph ph-medal\": \"Medal\",\n        \"ph ph-medal-military\": \"Medal Military\",\n        \"ph ph-medium-logo\": \"Medium Logo\",\n        \"ph ph-megaphone\": \"Megaphone\",\n        \"ph ph-megaphone-simple\": \"Megaphone Simple\",\n        \"ph ph-messenger-logo\": \"Messenger Logo\",\n        \"ph ph-meta-logo\": \"Meta Logo\",\n        \"ph ph-metronome\": \"Metronome\",\n        \"ph ph-microphone\": \"Microphone\",\n        \"ph ph-microphone-slash\": \"Microphone Slash\",\n        \"ph ph-microphone-stage\": \"Microphone Stage\",\n        \"ph ph-microsoft-excel-logo\": \"Microsoft Excel Logo\",\n        \"ph ph-microsoft-outlook-logo\": \"Microsoft Outlook Logo\",\n        \"ph ph-microsoft-powerpoint-logo\": \"Microsoft Powerpoint Logo\",\n        \"ph ph-microsoft-teams-logo\": \"Microsoft Teams Logo\",\n        \"ph ph-microsoft-word-logo\": \"Microsoft Word Logo\",\n        \"ph ph-minus\": \"Minus\",\n        \"ph ph-minus-circle\": \"Minus Circle\",\n        \"ph ph-minus-square\": \"Minus Square\",\n        \"ph ph-money\": \"Money\",\n        \"ph ph-monitor\": \"Monitor\",\n        \"ph ph-monitor-play\": \"Monitor Play\",\n        \"ph ph-moon\": \"Moon\",\n        \"ph ph-moon-stars\": \"Moon Stars\",\n        \"ph ph-moped\": \"Moped\",\n        \"ph ph-moped-front\": \"Moped Front\",\n        \"ph ph-mosque\": \"Mosque\",\n        \"ph ph-motorcycle\": \"Motorcycle\",\n        \"ph ph-mountains\": \"Mountains\",\n        \"ph ph-mouse\": \"Mouse\",\n        \"ph ph-mouse-simple\": \"Mouse Simple\",\n        \"ph ph-music-note\": \"Music Note\",\n        \"ph ph-music-notes\": \"Music Notes\",\n        \"ph ph-music-note-simple\": \"Music Note Simple\",\n        \"ph ph-music-notes-plus\": \"Music Notes Plus\",\n        \"ph ph-music-notes-simple\": \"Music Notes Simple\",\n        \"ph ph-navigation-arrow\": \"Navigation Arrow\",\n        \"ph ph-needle\": \"Needle\",\n        \"ph ph-newspaper\": \"Newspaper\",\n        \"ph ph-newspaper-clipping\": \"Newspaper Clipping\",\n        \"ph ph-notches\": \"Notches\",\n        \"ph ph-note\": \"Note\",\n        \"ph ph-note-blank\": \"Note Blank\",\n        \"ph ph-notebook\": \"Notebook\",\n        \"ph ph-notepad\": \"Notepad\",\n        \"ph ph-note-pencil\": \"Note Pencil\",\n        \"ph ph-notification\": \"Notification\",\n        \"ph ph-notion-logo\": \"Notion Logo\",\n        \"ph ph-number-circle-eight\": \"Number Circle Eight\",\n        \"ph ph-number-circle-five\": \"Number Circle Five\",\n        \"ph ph-number-circle-four\": \"Number Circle Four\",\n        \"ph ph-number-circle-nine\": \"Number Circle Nine\",\n        \"ph ph-number-circle-one\": \"Number Circle One\",\n        \"ph ph-number-circle-seven\": \"Number Circle Seven\",\n        \"ph ph-number-circle-six\": \"Number Circle Six\",\n        \"ph ph-number-circle-three\": \"Number Circle Three\",\n        \"ph ph-number-circle-two\": \"Number Circle Two\",\n        \"ph ph-number-circle-zero\": \"Number Circle Zero\",\n        \"ph ph-number-eight\": \"Number Eight\",\n        \"ph ph-number-five\": \"Number Five\",\n        \"ph ph-number-four\": \"Number Four\",\n        \"ph ph-number-nine\": \"Number Nine\",\n        \"ph ph-number-one\": \"Number One\",\n        \"ph ph-number-seven\": \"Number Seven\",\n        \"ph ph-number-six\": \"Number Six\",\n        \"ph ph-number-square-eight\": \"Number Square Eight\",\n        \"ph ph-number-square-five\": \"Number Square Five\",\n        \"ph ph-number-square-four\": \"Number Square Four\",\n        \"ph ph-number-square-nine\": \"Number Square Nine\",\n        \"ph ph-number-square-one\": \"Number Square One\",\n        \"ph ph-number-square-seven\": \"Number Square Seven\",\n        \"ph ph-number-square-six\": \"Number Square Six\",\n        \"ph ph-number-square-three\": \"Number Square Three\",\n        \"ph ph-number-square-two\": \"Number Square Two\",\n        \"ph ph-number-square-zero\": \"Number Square Zero\",\n        \"ph ph-number-three\": \"Number Three\",\n        \"ph ph-number-two\": \"Number Two\",\n        \"ph ph-number-zero\": \"Number Zero\",\n        \"ph ph-nut\": \"Nut\",\n        \"ph ph-ny-times-logo\": \"Ny Times Logo\",\n        \"ph ph-octagon\": \"Octagon\",\n        \"ph ph-office-chair\": \"Office Chair\",\n        \"ph ph-option\": \"Option\",\n        \"ph ph-orange-slice\": \"Orange Slice\",\n        \"ph ph-package\": \"Package\",\n        \"ph ph-paint-brush\": \"Paint Brush\",\n        \"ph ph-paint-brush-broad\": \"Paint Brush Broad\",\n        \"ph ph-paint-brush-household\": \"Paint Brush Household\",\n        \"ph ph-paint-bucket\": \"Paint Bucket\",\n        \"ph ph-paint-roller\": \"Paint Roller\",\n        \"ph ph-palette\": \"Palette\",\n        \"ph ph-pants\": \"Pants\",\n        \"ph ph-paperclip\": \"Paperclip\",\n        \"ph ph-paperclip-horizontal\": \"Paperclip Horizontal\",\n        \"ph ph-paper-plane\": \"Paper Plane\",\n        \"ph ph-paper-plane-right\": \"Paper Plane Right\",\n        \"ph ph-paper-plane-tilt\": \"Paper Plane Tilt\",\n        \"ph ph-parachute\": \"Parachute\",\n        \"ph ph-paragraph\": \"Paragraph\",\n        \"ph ph-parallelogram\": \"Parallelogram\",\n        \"ph ph-park\": \"Park\",\n        \"ph ph-password\": \"Password\",\n        \"ph ph-path\": \"Path\",\n        \"ph ph-patreon-logo\": \"Patreon Logo\",\n        \"ph ph-pause\": \"Pause\",\n        \"ph ph-pause-circle\": \"Pause Circle\",\n        \"ph ph-paw-print\": \"Paw Print\",\n        \"ph ph-paypal-logo\": \"Paypal Logo\",\n        \"ph ph-peace\": \"Peace\",\n        \"ph ph-pen\": \"Pen\",\n        \"ph ph-pencil\": \"Pencil\",\n        \"ph ph-pencil-circle\": \"Pencil Circle\",\n        \"ph ph-pencil-line\": \"Pencil Line\",\n        \"ph ph-pencil-simple\": \"Pencil Simple\",\n        \"ph ph-pencil-simple-line\": \"Pencil Simple Line\",\n        \"ph ph-pencil-simple-slash\": \"Pencil Simple Slash\",\n        \"ph ph-pencil-slash\": \"Pencil Slash\",\n        \"ph ph-pen-nib\": \"Pen Nib\",\n        \"ph ph-pen-nib-straight\": \"Pen Nib Straight\",\n        \"ph ph-pentagram\": \"Pentagram\",\n        \"ph ph-pepper\": \"Pepper\",\n        \"ph ph-percent\": \"Percent\",\n        \"ph ph-person\": \"Person\",\n        \"ph ph-person-arms-spread\": \"Person Arms Spread\",\n        \"ph ph-person-simple\": \"Person Simple\",\n        \"ph ph-person-simple-bike\": \"Person Simple Bike\",\n        \"ph ph-person-simple-run\": \"Person Simple Run\",\n        \"ph ph-person-simple-throw\": \"Person Simple Throw\",\n        \"ph ph-person-simple-walk\": \"Person Simple Walk\",\n        \"ph ph-perspective\": \"Perspective\",\n        \"ph ph-phone\": \"Phone\",\n        \"ph ph-phone-call\": \"Phone Call\",\n        \"ph ph-phone-disconnect\": \"Phone Disconnect\",\n        \"ph ph-phone-incoming\": \"Phone Incoming\",\n        \"ph ph-phone-outgoing\": \"Phone Outgoing\",\n        \"ph ph-phone-plus\": \"Phone Plus\",\n        \"ph ph-phone-slash\": \"Phone Slash\",\n        \"ph ph-phone-x\": \"Phone X\",\n        \"ph ph-phosphor-logo\": \"Phosphor Logo\",\n        \"ph ph-pi\": \"Pi\",\n        \"ph ph-piano-keys\": \"Piano Keys\",\n        \"ph ph-picture-in-picture\": \"Picture In Picture\",\n        \"ph ph-piggy-bank\": \"Piggy Bank\",\n        \"ph ph-pill\": \"Pill\",\n        \"ph ph-pinterest-logo\": \"Pinterest Logo\",\n        \"ph ph-pinwheel\": \"Pinwheel\",\n        \"ph ph-pizza\": \"Pizza\",\n        \"ph ph-placeholder\": \"Placeholder\",\n        \"ph ph-planet\": \"Planet\",\n        \"ph ph-plant\": \"Plant\",\n        \"ph ph-play\": \"Play\",\n        \"ph ph-play-circle\": \"Play Circle\",\n        \"ph ph-playlist\": \"Playlist\",\n        \"ph ph-play-pause\": \"Play Pause\",\n        \"ph ph-plug\": \"Plug\",\n        \"ph ph-plug-charging\": \"Plug Charging\",\n        \"ph ph-plugs\": \"Plugs\",\n        \"ph ph-plugs-connected\": \"Plugs Connected\",\n        \"ph ph-plus\": \"Plus\",\n        \"ph ph-plus-circle\": \"Plus Circle\",\n        \"ph ph-plus-minus\": \"Plus Minus\",\n        \"ph ph-plus-square\": \"Plus Square\",\n        \"ph ph-poker-chip\": \"Poker Chip\",\n        \"ph ph-police-car\": \"Police Car\",\n        \"ph ph-polygon\": \"Polygon\",\n        \"ph ph-popcorn\": \"Popcorn\",\n        \"ph ph-potted-plant\": \"Potted Plant\",\n        \"ph ph-power\": \"Power\",\n        \"ph ph-prescription\": \"Prescription\",\n        \"ph ph-presentation\": \"Presentation\",\n        \"ph ph-presentation-chart\": \"Presentation Chart\",\n        \"ph ph-printer\": \"Printer\",\n        \"ph ph-prohibit\": \"Prohibit\",\n        \"ph ph-prohibit-inset\": \"Prohibit Inset\",\n        \"ph ph-projector-screen\": \"Projector Screen\",\n        \"ph ph-projector-screen-chart\": \"Projector Screen Chart\",\n        \"ph ph-pulse\": \"Pulse\",\n        \"ph ph-activity\": \"Activity\",\n        \"ph ph-push-pin\": \"Push Pin\",\n        \"ph ph-push-pin-simple\": \"Push Pin Simple\",\n        \"ph ph-push-pin-simple-slash\": \"Push Pin Simple Slash\",\n        \"ph ph-push-pin-slash\": \"Push Pin Slash\",\n        \"ph ph-puzzle-piece\": \"Puzzle Piece\",\n        \"ph ph-qr-code\": \"Qr Code\",\n        \"ph ph-question\": \"Question\",\n        \"ph ph-queue\": \"Queue\",\n        \"ph ph-quotes\": \"Quotes\",\n        \"ph ph-radical\": \"Radical\",\n        \"ph ph-radio\": \"Radio\",\n        \"ph ph-radioactive\": \"Radioactive\",\n        \"ph ph-radio-button\": \"Radio Button\",\n        \"ph ph-rainbow\": \"Rainbow\",\n        \"ph ph-rainbow-cloud\": \"Rainbow Cloud\",\n        \"ph ph-read-cv-logo\": \"Read Cv Logo\",\n        \"ph ph-receipt\": \"Receipt\",\n        \"ph ph-receipt-x\": \"Receipt X\",\n        \"ph ph-record\": \"Record\",\n        \"ph ph-rectangle\": \"Rectangle\",\n        \"ph ph-recycle\": \"Recycle\",\n        \"ph ph-reddit-logo\": \"Reddit Logo\",\n        \"ph ph-repeat\": \"Repeat\",\n        \"ph ph-repeat-once\": \"Repeat Once\",\n        \"ph ph-rewind\": \"Rewind\",\n        \"ph ph-rewind-circle\": \"Rewind Circle\",\n        \"ph ph-road-horizon\": \"Road Horizon\",\n        \"ph ph-robot\": \"Robot\",\n        \"ph ph-rocket\": \"Rocket\",\n        \"ph ph-rocket-launch\": \"Rocket Launch\",\n        \"ph ph-rows\": \"Rows\",\n        \"ph ph-rss\": \"Rss\",\n        \"ph ph-rss-simple\": \"Rss Simple\",\n        \"ph ph-rug\": \"Rug\",\n        \"ph ph-ruler\": \"Ruler\",\n        \"ph ph-scales\": \"Scales\",\n        \"ph ph-scan\": \"Scan\",\n        \"ph ph-scissors\": \"Scissors\",\n        \"ph ph-scooter\": \"Scooter\",\n        \"ph ph-screencast\": \"Screencast\",\n        \"ph ph-scribble-loop\": \"Scribble Loop\",\n        \"ph ph-scroll\": \"Scroll\",\n        \"ph ph-seal\": \"Seal\",\n        \"ph ph-seal-check\": \"Seal Check\",\n        \"ph ph-seal-question\": \"Seal Question\",\n        \"ph ph-seal-warning\": \"Seal Warning\",\n        \"ph ph-circle-wavy\": \"Circle Wavy\",\n        \"ph ph-circle-wavy-check\": \"Circle Wavy Check\",\n        \"ph ph-circle-wavy-question\": \"Circle Wavy Question\",\n        \"ph ph-circle-wavy-warning\": \"Circle Wavy Warning\",\n        \"ph ph-selection\": \"Selection\",\n        \"ph ph-selection-all\": \"Selection All\",\n        \"ph ph-selection-background\": \"Selection Background\",\n        \"ph ph-selection-foreground\": \"Selection Foreground\",\n        \"ph ph-selection-inverse\": \"Selection Inverse\",\n        \"ph ph-selection-plus\": \"Selection Plus\",\n        \"ph ph-selection-slash\": \"Selection Slash\",\n        \"ph ph-shapes\": \"Shapes\",\n        \"ph ph-share\": \"Share\",\n        \"ph ph-share-fat\": \"Share Fat\",\n        \"ph ph-share-network\": \"Share Network\",\n        \"ph ph-shield\": \"Shield\",\n        \"ph ph-shield-check\": \"Shield Check\",\n        \"ph ph-shield-checkered\": \"Shield Checkered\",\n        \"ph ph-shield-chevron\": \"Shield Chevron\",\n        \"ph ph-shield-plus\": \"Shield Plus\",\n        \"ph ph-shield-slash\": \"Shield Slash\",\n        \"ph ph-shield-star\": \"Shield Star\",\n        \"ph ph-shield-warning\": \"Shield Warning\",\n        \"ph ph-shirt-folded\": \"Shirt Folded\",\n        \"ph ph-shooting-star\": \"Shooting Star\",\n        \"ph ph-shopping-bag\": \"Shopping Bag\",\n        \"ph ph-shopping-bag-open\": \"Shopping Bag Open\",\n        \"ph ph-shopping-cart\": \"Shopping Cart\",\n        \"ph ph-shopping-cart-simple\": \"Shopping Cart Simple\",\n        \"ph ph-shower\": \"Shower\",\n        \"ph ph-shrimp\": \"Shrimp\",\n        \"ph ph-shuffle\": \"Shuffle\",\n        \"ph ph-shuffle-angular\": \"Shuffle Angular\",\n        \"ph ph-shuffle-simple\": \"Shuffle Simple\",\n        \"ph ph-sidebar\": \"Sidebar\",\n        \"ph ph-sidebar-simple\": \"Sidebar Simple\",\n        \"ph ph-sigma\": \"Sigma\",\n        \"ph ph-signature\": \"Signature\",\n        \"ph ph-sign-in\": \"Sign In\",\n        \"ph ph-sign-out\": \"Sign Out\",\n        \"ph ph-signpost\": \"Signpost\",\n        \"ph ph-sim-card\": \"Sim Card\",\n        \"ph ph-siren\": \"Siren\",\n        \"ph ph-sketch-logo\": \"Sketch Logo\",\n        \"ph ph-skip-back\": \"Skip Back\",\n        \"ph ph-skip-back-circle\": \"Skip Back Circle\",\n        \"ph ph-skip-forward\": \"Skip Forward\",\n        \"ph ph-skip-forward-circle\": \"Skip Forward Circle\",\n        \"ph ph-skull\": \"Skull\",\n        \"ph ph-slack-logo\": \"Slack Logo\",\n        \"ph ph-sliders\": \"Sliders\",\n        \"ph ph-sliders-horizontal\": \"Sliders Horizontal\",\n        \"ph ph-slideshow\": \"Slideshow\",\n        \"ph ph-smiley\": \"Smiley\",\n        \"ph ph-smiley-angry\": \"Smiley Angry\",\n        \"ph ph-smiley-blank\": \"Smiley Blank\",\n        \"ph ph-smiley-meh\": \"Smiley Meh\",\n        \"ph ph-smiley-nervous\": \"Smiley Nervous\",\n        \"ph ph-smiley-sad\": \"Smiley Sad\",\n        \"ph ph-smiley-sticker\": \"Smiley Sticker\",\n        \"ph ph-smiley-wink\": \"Smiley Wink\",\n        \"ph ph-smiley-x-eyes\": \"Smiley X Eyes\",\n        \"ph ph-snapchat-logo\": \"Snapchat Logo\",\n        \"ph ph-sneaker\": \"Sneaker\",\n        \"ph ph-sneaker-move\": \"Sneaker Move\",\n        \"ph ph-snowflake\": \"Snowflake\",\n        \"ph ph-soccer-ball\": \"Soccer Ball\",\n        \"ph ph-sort-ascending\": \"Sort Ascending\",\n        \"ph ph-sort-descending\": \"Sort Descending\",\n        \"ph ph-soundcloud-logo\": \"Soundcloud Logo\",\n        \"ph ph-spade\": \"Spade\",\n        \"ph ph-sparkle\": \"Sparkle\",\n        \"ph ph-speaker-hifi\": \"Speaker Hifi\",\n        \"ph ph-speaker-high\": \"Speaker High\",\n        \"ph ph-speaker-low\": \"Speaker Low\",\n        \"ph ph-speaker-none\": \"Speaker None\",\n        \"ph ph-speaker-simple-high\": \"Speaker Simple High\",\n        \"ph ph-speaker-simple-low\": \"Speaker Simple Low\",\n        \"ph ph-speaker-simple-none\": \"Speaker Simple None\",\n        \"ph ph-speaker-simple-slash\": \"Speaker Simple Slash\",\n        \"ph ph-speaker-simple-x\": \"Speaker Simple X\",\n        \"ph ph-speaker-slash\": \"Speaker Slash\",\n        \"ph ph-speaker-x\": \"Speaker X\",\n        \"ph ph-spinner\": \"Spinner\",\n        \"ph ph-spinner-gap\": \"Spinner Gap\",\n        \"ph ph-spiral\": \"Spiral\",\n        \"ph ph-split-horizontal\": \"Split Horizontal\",\n        \"ph ph-split-vertical\": \"Split Vertical\",\n        \"ph ph-spotify-logo\": \"Spotify Logo\",\n        \"ph ph-square\": \"Square\",\n        \"ph ph-square-half\": \"Square Half\",\n        \"ph ph-square-half-bottom\": \"Square Half Bottom\",\n        \"ph ph-square-logo\": \"Square Logo\",\n        \"ph ph-squares-four\": \"Squares Four\",\n        \"ph ph-square-split-horizontal\": \"Square Split Horizontal\",\n        \"ph ph-square-split-vertical\": \"Square Split Vertical\",\n        \"ph ph-stack\": \"Stack\",\n        \"ph ph-stack-overflow-logo\": \"Stack Overflow Logo\",\n        \"ph ph-stack-simple\": \"Stack Simple\",\n        \"ph ph-stairs\": \"Stairs\",\n        \"ph ph-stamp\": \"Stamp\",\n        \"ph ph-star\": \"Star\",\n        \"ph ph-star-and-crescent\": \"Star And Crescent\",\n        \"ph ph-star-four\": \"Star Four\",\n        \"ph ph-star-half\": \"Star Half\",\n        \"ph ph-star-of-david\": \"Star Of David\",\n        \"ph ph-steering-wheel\": \"Steering Wheel\",\n        \"ph ph-steps\": \"Steps\",\n        \"ph ph-stethoscope\": \"Stethoscope\",\n        \"ph ph-sticker\": \"Sticker\",\n        \"ph ph-stool\": \"Stool\",\n        \"ph ph-stop\": \"Stop\",\n        \"ph ph-stop-circle\": \"Stop Circle\",\n        \"ph ph-storefront\": \"Storefront\",\n        \"ph ph-strategy\": \"Strategy\",\n        \"ph ph-stripe-logo\": \"Stripe Logo\",\n        \"ph ph-student\": \"Student\",\n        \"ph ph-subtitles\": \"Subtitles\",\n        \"ph ph-subtract\": \"Subtract\",\n        \"ph ph-subtract-square\": \"Subtract Square\",\n        \"ph ph-suitcase\": \"Suitcase\",\n        \"ph ph-suitcase-rolling\": \"Suitcase Rolling\",\n        \"ph ph-suitcase-simple\": \"Suitcase Simple\",\n        \"ph ph-sun\": \"Sun\",\n        \"ph ph-sun-dim\": \"Sun Dim\",\n        \"ph ph-sunglasses\": \"Sunglasses\",\n        \"ph ph-sun-horizon\": \"Sun Horizon\",\n        \"ph ph-swap\": \"Swap\",\n        \"ph ph-swatches\": \"Swatches\",\n        \"ph ph-swimming-pool\": \"Swimming Pool\",\n        \"ph ph-sword\": \"Sword\",\n        \"ph ph-synagogue\": \"Synagogue\",\n        \"ph ph-syringe\": \"Syringe\",\n        \"ph ph-table\": \"Table\",\n        \"ph ph-tabs\": \"Tabs\",\n        \"ph ph-tag\": \"Tag\",\n        \"ph ph-tag-chevron\": \"Tag Chevron\",\n        \"ph ph-tag-simple\": \"Tag Simple\",\n        \"ph ph-target\": \"Target\",\n        \"ph ph-taxi\": \"Taxi\",\n        \"ph ph-telegram-logo\": \"Telegram Logo\",\n        \"ph ph-television\": \"Television\",\n        \"ph ph-television-simple\": \"Television Simple\",\n        \"ph ph-tennis-ball\": \"Tennis Ball\",\n        \"ph ph-tent\": \"Tent\",\n        \"ph ph-terminal\": \"Terminal\",\n        \"ph ph-terminal-window\": \"Terminal Window\",\n        \"ph ph-test-tube\": \"Test Tube\",\n        \"ph ph-text-aa\": \"Text Aa\",\n        \"ph ph-text-align-center\": \"Text Align Center\",\n        \"ph ph-text-align-justify\": \"Text Align Justify\",\n        \"ph ph-text-align-left\": \"Text Align Left\",\n        \"ph ph-text-align-right\": \"Text Align Right\",\n        \"ph ph-text-a-underline\": \"Text A Underline\",\n        \"ph ph-text-b\": \"Text B\",\n        \"ph ph-text-bolder\": \"Text Bolder\",\n        \"ph ph-textbox\": \"Textbox\",\n        \"ph ph-text-columns\": \"Text Columns\",\n        \"ph ph-text-h\": \"Text H\",\n        \"ph ph-text-h-five\": \"Text H Five\",\n        \"ph ph-text-h-four\": \"Text H Four\",\n        \"ph ph-text-h-one\": \"Text H One\",\n        \"ph ph-text-h-six\": \"Text H Six\",\n        \"ph ph-text-h-three\": \"Text H Three\",\n        \"ph ph-text-h-two\": \"Text H Two\",\n        \"ph ph-text-indent\": \"Text Indent\",\n        \"ph ph-text-italic\": \"Text Italic\",\n        \"ph ph-text-outdent\": \"Text Outdent\",\n        \"ph ph-text-strikethrough\": \"Text Strikethrough\",\n        \"ph ph-text-t\": \"Text T\",\n        \"ph ph-text-underline\": \"Text Underline\",\n        \"ph ph-thermometer\": \"Thermometer\",\n        \"ph ph-thermometer-cold\": \"Thermometer Cold\",\n        \"ph ph-thermometer-hot\": \"Thermometer Hot\",\n        \"ph ph-thermometer-simple\": \"Thermometer Simple\",\n        \"ph ph-thumbs-down\": \"Thumbs Down\",\n        \"ph ph-thumbs-up\": \"Thumbs Up\",\n        \"ph ph-ticket\": \"Ticket\",\n        \"ph ph-tidal-logo\": \"Tidal Logo\",\n        \"ph ph-tiktok-logo\": \"Tiktok Logo\",\n        \"ph ph-timer\": \"Timer\",\n        \"ph ph-tipi\": \"Tipi\",\n        \"ph ph-toggle-left\": \"Toggle Left\",\n        \"ph ph-toggle-right\": \"Toggle Right\",\n        \"ph ph-toilet\": \"Toilet\",\n        \"ph ph-toilet-paper\": \"Toilet Paper\",\n        \"ph ph-toolbox\": \"Toolbox\",\n        \"ph ph-tooth\": \"Tooth\",\n        \"ph ph-tote\": \"Tote\",\n        \"ph ph-tote-simple\": \"Tote Simple\",\n        \"ph ph-trademark\": \"Trademark\",\n        \"ph ph-trademark-registered\": \"Trademark Registered\",\n        \"ph ph-traffic-cone\": \"Traffic Cone\",\n        \"ph ph-traffic-sign\": \"Traffic Sign\",\n        \"ph ph-traffic-signal\": \"Traffic Signal\",\n        \"ph ph-train\": \"Train\",\n        \"ph ph-train-regional\": \"Train Regional\",\n        \"ph ph-train-simple\": \"Train Simple\",\n        \"ph ph-tram\": \"Tram\",\n        \"ph ph-translate\": \"Translate\",\n        \"ph ph-trash\": \"Trash\",\n        \"ph ph-trash-simple\": \"Trash Simple\",\n        \"ph ph-tray\": \"Tray\",\n        \"ph ph-tree\": \"Tree\",\n        \"ph ph-tree-evergreen\": \"Tree Evergreen\",\n        \"ph ph-tree-palm\": \"Tree Palm\",\n        \"ph ph-tree-structure\": \"Tree Structure\",\n        \"ph ph-trend-down\": \"Trend Down\",\n        \"ph ph-trend-up\": \"Trend Up\",\n        \"ph ph-triangle\": \"Triangle\",\n        \"ph ph-trophy\": \"Trophy\",\n        \"ph ph-truck\": \"Truck\",\n        \"ph ph-t-shirt\": \"T Shirt\",\n        \"ph ph-twitch-logo\": \"Twitch Logo\",\n        \"ph ph-twitter-logo\": \"Twitter Logo\",\n        \"ph ph-umbrella\": \"Umbrella\",\n        \"ph ph-umbrella-simple\": \"Umbrella Simple\",\n        \"ph ph-unite\": \"Unite\",\n        \"ph ph-unite-square\": \"Unite Square\",\n        \"ph ph-upload\": \"Upload\",\n        \"ph ph-upload-simple\": \"Upload Simple\",\n        \"ph ph-usb\": \"Usb\",\n        \"ph ph-user\": \"User\",\n        \"ph ph-user-circle\": \"User Circle\",\n        \"ph ph-user-circle-gear\": \"User Circle Gear\",\n        \"ph ph-user-circle-minus\": \"User Circle Minus\",\n        \"ph ph-user-circle-plus\": \"User Circle Plus\",\n        \"ph ph-user-focus\": \"User Focus\",\n        \"ph ph-user-gear\": \"User Gear\",\n        \"ph ph-user-list\": \"User List\",\n        \"ph ph-user-minus\": \"User Minus\",\n        \"ph ph-user-plus\": \"User Plus\",\n        \"ph ph-user-rectangle\": \"User Rectangle\",\n        \"ph ph-users\": \"Users\",\n        \"ph ph-users-four\": \"Users Four\",\n        \"ph ph-user-square\": \"User Square\",\n        \"ph ph-users-three\": \"Users Three\",\n        \"ph ph-user-switch\": \"User Switch\",\n        \"ph ph-van\": \"Van\",\n        \"ph ph-vault\": \"Vault\",\n        \"ph ph-vibrate\": \"Vibrate\",\n        \"ph ph-video\": \"Video\",\n        \"ph ph-video-camera\": \"Video Camera\",\n        \"ph ph-video-camera-slash\": \"Video Camera Slash\",\n        \"ph ph-vignette\": \"Vignette\",\n        \"ph ph-vinyl-record\": \"Vinyl Record\",\n        \"ph ph-virtual-reality\": \"Virtual Reality\",\n        \"ph ph-virus\": \"Virus\",\n        \"ph ph-voicemail\": \"Voicemail\",\n        \"ph ph-volleyball\": \"Volleyball\",\n        \"ph ph-wall\": \"Wall\",\n        \"ph ph-wallet\": \"Wallet\",\n        \"ph ph-warehouse\": \"Warehouse\",\n        \"ph ph-warning\": \"Warning\",\n        \"ph ph-warning-circle\": \"Warning Circle\",\n        \"ph ph-warning-diamond\": \"Warning Diamond\",\n        \"ph ph-warning-octagon\": \"Warning Octagon\",\n        \"ph ph-watch\": \"Watch\",\n        \"ph ph-waveform\": \"Waveform\",\n        \"ph ph-waves\": \"Waves\",\n        \"ph ph-wave-sawtooth\": \"Wave Sawtooth\",\n        \"ph ph-wave-sine\": \"Wave Sine\",\n        \"ph ph-wave-square\": \"Wave Square\",\n        \"ph ph-wave-triangle\": \"Wave Triangle\",\n        \"ph ph-webcam\": \"Webcam\",\n        \"ph ph-webcam-slash\": \"Webcam Slash\",\n        \"ph ph-webhooks-logo\": \"Webhooks Logo\",\n        \"ph ph-wechat-logo\": \"Wechat Logo\",\n        \"ph ph-whatsapp-logo\": \"Whatsapp Logo\",\n        \"ph ph-wheelchair\": \"Wheelchair\",\n        \"ph ph-wheelchair-motion\": \"Wheelchair Motion\",\n        \"ph ph-wifi-high\": \"Wifi High\",\n        \"ph ph-wifi-low\": \"Wifi Low\",\n        \"ph ph-wifi-medium\": \"Wifi Medium\",\n        \"ph ph-wifi-none\": \"Wifi None\",\n        \"ph ph-wifi-slash\": \"Wifi Slash\",\n        \"ph ph-wifi-x\": \"Wifi X\",\n        \"ph ph-wind\": \"Wind\",\n        \"ph ph-windows-logo\": \"Windows Logo\",\n        \"ph ph-wine\": \"Wine\",\n        \"ph ph-wrench\": \"Wrench\",\n        \"ph ph-x\": \"X\",\n        \"ph ph-x-circle\": \"X Circle\",\n        \"ph ph-x-square\": \"X Square\",\n        \"ph ph-yin-yang\": \"Yin Yang\",\n        \"ph ph-youtube-logo\": \"YouTube Logo\"\n};\n"
  },
  {
    "path": "modules/backend/assets/js/preferences/preferences.js",
    "content": "$(document).ready(function() {\n\n    var editorEl = $('#editorpreferencesCodeeditor'),\n        editor = editorEl.codeEditor('getEditorObject'),\n        session = editor.getSession(),\n        renderer = editor.renderer\n\n    editorEl.height($('#editorSettingsForm').height() - 23)\n\n    $('#Form-field-Preference-editor_theme').on('change', function() {\n        editorEl.codeEditor('setTheme', $(this).val())\n    })\n\n    $('#Form-field-Preference-editor_font_size').on('change', function() {\n        editor.setFontSize(parseInt($(this).val()))\n    })\n\n    $('#Form-field-Preference-editor_word_wrap').on('change', function() {\n        editorEl.codeEditor('setWordWrap', $(this).val())\n    })\n\n    $('#Form-field-Preference-editor_code_folding').on('change', function() {\n        session.setFoldStyle($(this).val())\n    })\n\n    $('#Form-field-Preference-editor_autocompletion').on('change', function() {\n        editor.setOption('enableBasicAutocompletion', false)\n        editor.setOption('enableLiveAutocompletion', false)\n\n        var val = $(this).val()\n        if (val == 'basic') {\n            editor.setOption('enableBasicAutocompletion', true)\n        }\n        else if (val == 'live') {\n            editor.setOption('enableLiveAutocompletion', true)\n        }\n    })\n\n    $('#Form-field-Preference-editor_tab_size').on('change', function() {\n        session.setTabSize($(this).val())\n    })\n\n    $('#Form-field-Preference-editor_show_invisibles').on('change', function() {\n        editor.setShowInvisibles($(this).is(':checked'))\n    })\n\n    $('#Form-field-Preference-editor_display_indent_guides').on('change', function() {\n        editor.setDisplayIndentGuides($(this).is(':checked'))\n    })\n\n    $('#Form-field-Preference-editor_show_print_margin').on('change', function() {\n        editor.setShowPrintMargin($(this).is(':checked'))\n    })\n\n    $('#Form-field-Preference-editor_highlight_active_line').on('change', function() {\n        editor.setHighlightActiveLine($(this).is(':checked'))\n    })\n\n    $('#Form-field-Preference-editor_use_hard_tabs').on('change', function() {\n        session.setUseSoftTabs(!$(this).is(':checked'))\n    })\n\n    $('#Form-field-Preference-editor_show_gutter').on('change', function() {\n        renderer.setShowGutter($(this).is(':checked'))\n    })\n})\n"
  },
  {
    "path": "modules/backend/assets/js/vendor-min.js",
    "content": "!function(M){M.waterfall=function(){var b=[],p=M.Deferred(),e=0;return M.each(arguments,function(o,z){b.push(function(){var o,t=[].slice.apply(arguments);\"function\"==typeof z?(o=z.apply(null,t))&&o.promise||(o=M.Deferred()[!1===o?\"reject\":\"resolve\"](o)):o=z&&z.promise?z:M.Deferred()[!1===z?\"reject\":\"resolve\"](z),o.fail(function(){p.reject.apply(p,[].slice.apply(arguments))}).done(function(M){e++,t.push(M),e==b.length?p.resolve.apply(p,t):b[e].apply(null,t)})})}),b.length?b[0]():p.resolve(),p}}(jQuery),function(){function M(M){return M&&M.__esModule?M.default:M}function b(M){if(void 0===M)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return M}function p(M,b){if(!(M instanceof b))throw new TypeError(\"Cannot call a class as a function\")}function e(M,b){for(var p=0;p<b.length;p++){var e=b[p];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(M,e.key,e)}}function o(M,b,p){return b&&e(M.prototype,b),p&&e(M,p),M}function z(M){return z=Object.setPrototypeOf?Object.getPrototypeOf:function(M){return M.__proto__||Object.getPrototypeOf(M)},z(M)}function t(M,b){return t=Object.setPrototypeOf||function(M,b){return M.__proto__=b,M},t(M,b)}function c(M,b){if(\"function\"!=typeof b&&null!==b)throw new TypeError(\"Super expression must either be null or a function\");M.prototype=Object.create(b&&b.prototype,{constructor:{value:M,writable:!0,configurable:!0}}),b&&t(M,b)}function n(M,p){return!p||\"object\"!=((e=p)&&e.constructor===Symbol?\"symbol\":typeof e)&&\"function\"!=typeof p?b(M):p;var e}var O;function i(M){return Array.isArray(M)||\"[object Object]\"=={}.toString.call(M)}function r(M){return!M||\"object\"!=typeof M&&\"function\"!=typeof M}O=function M(){var b=[].slice.call(arguments),p=!1;\"boolean\"==typeof b[0]&&(p=b.shift());var e=b[0];if(r(e))throw new Error(\"extendee must be an object\");for(var o=b.slice(1),z=o.length,t=0;t<z;t++){var c=o[t];for(var n in c)if(Object.prototype.hasOwnProperty.call(c,n)){var O=c[n];if(p&&i(O)){var a=Array.isArray(O)?[]:{};e[n]=M(!0,Object.prototype.hasOwnProperty.call(e,n)&&!r(e[n])?e[n]:a,O)}else e[n]=O}}return e};var a=function(){\"use strict\";function M(){p(this,M)}return o(M,[{key:\"on\",value:function(M,b){return this._callbacks=this._callbacks||{},this._callbacks[M]||(this._callbacks[M]=[]),this._callbacks[M].push(b),this}},{key:\"emit\",value:function(M){for(var b=arguments.length,p=new Array(b>1?b-1:0),e=1;e<b;e++)p[e-1]=arguments[e];this._callbacks=this._callbacks||{};var o=this._callbacks[M],z=!0,t=!1,c=void 0;if(o)try{for(var n,O=o[Symbol.iterator]();!(z=(n=O.next()).done);z=!0){n.value.apply(this,p)}}catch(M){t=!0,c=M}finally{try{z||null==O.return||O.return()}finally{if(t)throw c}}return this.element&&this.element.dispatchEvent(this.makeEvent(\"dropzone:\"+M,{args:p})),this}},{key:\"makeEvent\",value:function(M,b){var p={bubbles:!0,cancelable:!0,detail:b};if(\"function\"==typeof window.CustomEvent)return new CustomEvent(M,p);var e=document.createEvent(\"CustomEvent\");return e.initCustomEvent(M,p.bubbles,p.cancelable,p.detail),e}},{key:\"off\",value:function(M,b){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var p=this._callbacks[M];if(!p)return this;if(1===arguments.length)return delete this._callbacks[M],this;for(var e=0;e<p.length;e++){if(p[e]===b){p.splice(e,1);break}}return this}}]),M}(),s={url:null,method:\"post\",withCredentials:!1,timeout:null,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2097152,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:\"file\",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:\"crop\",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:\"contain\",filesizeBase:1e3,maxFiles:null,headers:null,defaultHeaders:!0,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,disablePreviews:!1,hiddenInputContainer:\"body\",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:\"Drop files here to upload\",dictFallbackMessage:\"Your browser does not support drag'n'drop file uploads.\",dictFallbackText:\"Please use the fallback form below to upload your files like in the olden days.\",dictFileTooBig:\"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",dictInvalidFileType:\"You can't upload files of this type.\",dictResponseError:\"Server responded with {{statusCode}} code.\",dictCancelUpload:\"Cancel upload\",dictUploadCanceled:\"Upload canceled.\",dictCancelUploadConfirmation:\"Are you sure you want to cancel this upload?\",dictRemoveFile:\"Remove file\",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:\"You can not upload any more files.\",dictFileSizeUnits:{tb:\"TB\",gb:\"GB\",mb:\"MB\",kb:\"KB\",b:\"b\"},init:function(){},params:function(M,b,p){if(p)return{dzuuid:p.file.upload.uuid,dzchunkindex:p.index,dztotalfilesize:p.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:p.file.upload.totalChunkCount,dzchunkbyteoffset:p.index*this.options.chunkSize}},accept:function(M,b){return b()},chunksUploaded:function(M,b){b()},binaryBody:!1,fallback:function(){var M;this.element.className=\"\".concat(this.element.className,\" dz-browser-not-supported\");var b=!0,p=!1,e=void 0;try{for(var o,z=this.element.getElementsByTagName(\"div\")[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t=o.value;if(/(^| )dz-message($| )/.test(t.className)){M=t,t.className=\"dz-message\";break}}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}M||(M=A.createElement('<div class=\"dz-message\"><span></span></div>'),this.element.appendChild(M));var c=M.getElementsByTagName(\"span\")[0];return c&&(null!=c.textContent?c.textContent=this.options.dictFallbackMessage:null!=c.innerText&&(c.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(M,b,p,e){var o={srcX:0,srcY:0,srcWidth:M.width,srcHeight:M.height},z=M.width/M.height;null==b&&null==p?(b=o.srcWidth,p=o.srcHeight):null==b?b=p*z:null==p&&(p=b/z);var t=(b=Math.min(b,o.srcWidth))/(p=Math.min(p,o.srcHeight));if(o.srcWidth>b||o.srcHeight>p)if(\"crop\"===e)z>t?(o.srcHeight=M.height,o.srcWidth=o.srcHeight*t):(o.srcWidth=M.width,o.srcHeight=o.srcWidth/t);else{if(\"contain\"!==e)throw new Error(\"Unknown resizeMethod '\".concat(e,\"'\"));z>t?p=b/z:b=p*z}return o.srcX=(M.width-o.srcWidth)/2,o.srcY=(M.height-o.srcHeight)/2,o.trgWidth=b,o.trgHeight=p,o},transformFile:function(M,b){return(this.options.resizeWidth||this.options.resizeHeight)&&M.type.match(/image.*/)?this.resizeImage(M,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,b):b(M)},previewTemplate:M('<div class=\"dz-file-preview dz-preview\"> <div class=\"dz-image\"><img data-dz-thumbnail=\"\"></div> <div class=\"dz-details\"> <div class=\"dz-size\"><span data-dz-size=\"\"></span></div> <div class=\"dz-filename\"><span data-dz-name=\"\"></span></div> </div> <div class=\"dz-progress\"> <span class=\"dz-upload\" data-dz-uploadprogress=\"\"></span> </div> <div class=\"dz-error-message\"><span data-dz-errormessage=\"\"></span></div> <div class=\"dz-success-mark\"> <svg width=\"54\" height=\"54\" fill=\"#fff\"><path d=\"m10.207 29.793 4.086-4.086a1 1 0 0 1 1.414 0l5.586 5.586a1 1 0 0 0 1.414 0l15.586-15.586a1 1 0 0 1 1.414 0l4.086 4.086a1 1 0 0 1 0 1.414L22.707 42.293a1 1 0 0 1-1.414 0L10.207 31.207a1 1 0 0 1 0-1.414Z\"/></svg> </div> <div class=\"dz-error-mark\"> <svg width=\"54\" height=\"54\" fill=\"#fff\"><path d=\"m26.293 20.293-7.086-7.086a1 1 0 0 0-1.414 0l-4.586 4.586a1 1 0 0 0 0 1.414l7.086 7.086a1 1 0 0 1 0 1.414l-7.086 7.086a1 1 0 0 0 0 1.414l4.586 4.586a1 1 0 0 0 1.414 0l7.086-7.086a1 1 0 0 1 1.414 0l7.086 7.086a1 1 0 0 0 1.414 0l4.586-4.586a1 1 0 0 0 0-1.414l-7.086-7.086a1 1 0 0 1 0-1.414l7.086-7.086a1 1 0 0 0 0-1.414l-4.586-4.586a1 1 0 0 0-1.414 0l-7.086 7.086a1 1 0 0 1-1.414 0Z\"/></svg> </div> </div>'),drop:function(M){return this.element.classList.remove(\"dz-drag-hover\")},dragstart:function(M){},dragend:function(M){return this.element.classList.remove(\"dz-drag-hover\")},dragenter:function(M){return this.element.classList.add(\"dz-drag-hover\")},dragover:function(M){return this.element.classList.add(\"dz-drag-hover\")},dragleave:function(M){return this.element.classList.remove(\"dz-drag-hover\")},paste:function(M){},reset:function(){return this.element.classList.remove(\"dz-started\")},addedfile:function(M){if(this.element===this.previewsContainer&&this.element.classList.add(\"dz-started\"),this.previewsContainer&&!this.options.disablePreviews){var b=this;M.previewElement=A.createElement(this.options.previewTemplate.trim()),M.previewTemplate=M.previewElement,this.previewsContainer.appendChild(M.previewElement);var p=!0,e=!1,o=void 0;try{for(var z,t=M.previewElement.querySelectorAll(\"[data-dz-name]\")[Symbol.iterator]();!(p=(z=t.next()).done);p=!0){var c=z.value;c.textContent=M.name}}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}var n=!0,O=!1,i=void 0;try{for(var r,a=M.previewElement.querySelectorAll(\"[data-dz-size]\")[Symbol.iterator]();!(n=(r=a.next()).done);n=!0)(c=r.value).innerHTML=this.filesize(M.size)}catch(M){O=!0,i=M}finally{try{n||null==a.return||a.return()}finally{if(O)throw i}}this.options.addRemoveLinks&&(M._removeLink=A.createElement('<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>'.concat(this.options.dictRemoveFile,\"</a>\")),M.previewElement.appendChild(M._removeLink));var s=function(p){var e=b;if(p.preventDefault(),p.stopPropagation(),M.status===A.UPLOADING)return A.confirm(b.options.dictCancelUploadConfirmation,function(){return e.removeFile(M)});var o=b;return b.options.dictRemoveFileConfirmation?A.confirm(b.options.dictRemoveFileConfirmation,function(){return o.removeFile(M)}):b.removeFile(M)},d=!0,l=!1,q=void 0;try{for(var u,f=M.previewElement.querySelectorAll(\"[data-dz-remove]\")[Symbol.iterator]();!(d=(u=f.next()).done);d=!0)u.value.addEventListener(\"click\",s)}catch(M){l=!0,q=M}finally{try{d||null==f.return||f.return()}finally{if(l)throw q}}}},removedfile:function(M){return null!=M.previewElement&&null!=M.previewElement.parentNode&&M.previewElement.parentNode.removeChild(M.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(M,b){if(M.previewElement){M.previewElement.classList.remove(\"dz-file-preview\");var p=!0,e=!1,o=void 0;try{for(var z,t=M.previewElement.querySelectorAll(\"[data-dz-thumbnail]\")[Symbol.iterator]();!(p=(z=t.next()).done);p=!0){var c=z.value;c.alt=M.name,c.src=b}}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}return setTimeout(function(){return M.previewElement.classList.add(\"dz-image-preview\")},1)}},error:function(M,b){if(M.previewElement){M.previewElement.classList.add(\"dz-error\"),\"string\"!=typeof b&&b.error&&(b=b.error);var p=!0,e=!1,o=void 0;try{for(var z,t=M.previewElement.querySelectorAll(\"[data-dz-errormessage]\")[Symbol.iterator]();!(p=(z=t.next()).done);p=!0)z.value.textContent=b}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}}},errormultiple:function(){},processing:function(M){if(M.previewElement&&(M.previewElement.classList.add(\"dz-processing\"),M._removeLink))return M._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(M,b,p){var e=!0,o=!1,z=void 0;if(M.previewElement)try{for(var t,c=M.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\")[Symbol.iterator]();!(e=(t=c.next()).done);e=!0){var n=t.value;\"PROGRESS\"===n.nodeName?n.value=b:n.style.width=\"\".concat(b,\"%\")}}catch(M){o=!0,z=M}finally{try{e||null==c.return||c.return()}finally{if(o)throw z}}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(M){if(M.previewElement)return M.previewElement.classList.add(\"dz-success\")},successmultiple:function(){},canceled:function(M){return this.emit(\"error\",M,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(M){if(M._removeLink&&(M._removeLink.innerHTML=this.options.dictRemoveFile),M.previewElement)return M.previewElement.classList.add(\"dz-complete\")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}},A=function(e){\"use strict\";function t(e,o){var c,i,r,a;if(p(this,t),(c=n(this,(i=t,z(i)).call(this))).element=e,c.clickableElements=[],c.listeners=[],c.files=[],\"string\"==typeof c.element&&(c.element=document.querySelector(c.element)),!c.element||null==c.element.nodeType)throw new Error(\"Invalid dropzone element.\");if(c.element.dropzone)throw new Error(\"Dropzone already attached.\");t.instances.push(b(c)),c.element.dropzone=b(c);var A=null!=(a=t.optionsForElement(c.element))?a:{};if(c.options=M(O)(!0,{},s,A,null!=o?o:{}),c.options.previewTemplate=c.options.previewTemplate.replace(/\\n*/g,\"\"),c.options.forceFallback||!t.isBrowserSupported())return n(c,c.options.fallback.call(b(c)));if(null==c.options.url&&(c.options.url=c.element.getAttribute(\"action\")),!c.options.url)throw new Error(\"No URL provided.\");if(c.options.acceptedFiles&&c.options.acceptedMimeTypes)throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");if(c.options.uploadMultiple&&c.options.chunking)throw new Error(\"You cannot set both: uploadMultiple and chunking.\");if(c.options.binaryBody&&c.options.uploadMultiple)throw new Error(\"You cannot set both: binaryBody and uploadMultiple.\");return c.options.acceptedMimeTypes&&(c.options.acceptedFiles=c.options.acceptedMimeTypes,delete c.options.acceptedMimeTypes),null!=c.options.renameFilename&&(c.options.renameFile=function(M){return c.options.renameFilename.call(b(c),M.name,M)}),\"string\"==typeof c.options.method&&(c.options.method=c.options.method.toUpperCase()),(r=c.getExistingFallback())&&r.parentNode&&r.parentNode.removeChild(r),!1!==c.options.previewsContainer&&(c.options.previewsContainer?c.previewsContainer=t.getElement(c.options.previewsContainer,\"previewsContainer\"):c.previewsContainer=c.element),c.options.clickable&&(!0===c.options.clickable?c.clickableElements=[c.element]:c.clickableElements=t.getElements(c.options.clickable,\"clickable\")),c.init(),c}return c(t,e),o(t,[{key:\"getAcceptedFiles\",value:function(){return this.files.filter(function(M){return M.accepted}).map(function(M){return M})}},{key:\"getRejectedFiles\",value:function(){return this.files.filter(function(M){return!M.accepted}).map(function(M){return M})}},{key:\"getFilesWithStatus\",value:function(M){return this.files.filter(function(b){return b.status===M}).map(function(M){return M})}},{key:\"getQueuedFiles\",value:function(){return this.getFilesWithStatus(t.QUEUED)}},{key:\"getUploadingFiles\",value:function(){return this.getFilesWithStatus(t.UPLOADING)}},{key:\"getAddedFiles\",value:function(){return this.getFilesWithStatus(t.ADDED)}},{key:\"getActiveFiles\",value:function(){return this.files.filter(function(M){return M.status===t.UPLOADING||M.status===t.QUEUED}).map(function(M){return M})}},{key:\"init\",value:function(){var M=this,b=this,p=this,e=this,o=this,z=this,c=this,n=this,O=this,i=this,r=this;if(\"form\"===this.element.tagName&&this.element.setAttribute(\"enctype\",\"multipart/form-data\"),this.element.classList.contains(\"dropzone\")&&!this.element.querySelector(\".dz-message\")&&this.element.appendChild(t.createElement('<div class=\"dz-default dz-message\"><button class=\"dz-button\" type=\"button\">'.concat(this.options.dictDefaultMessage,\"</button></div>\"))),this.clickableElements.length){var a=this,s=function(){var M=a;a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement(\"input\"),a.hiddenFileInput.setAttribute(\"type\",\"file\"),(null===a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute(\"multiple\",\"multiple\"),a.hiddenFileInput.className=\"dz-hidden-input\",null!==a.options.acceptedFiles&&a.hiddenFileInput.setAttribute(\"accept\",a.options.acceptedFiles),null!==a.options.capture&&a.hiddenFileInput.setAttribute(\"capture\",a.options.capture),a.hiddenFileInput.setAttribute(\"tabindex\",\"-1\"),a.hiddenFileInput.style.visibility=\"hidden\",a.hiddenFileInput.style.position=\"absolute\",a.hiddenFileInput.style.top=\"0\",a.hiddenFileInput.style.left=\"0\",a.hiddenFileInput.style.height=\"0\",a.hiddenFileInput.style.width=\"0\",t.getElement(a.options.hiddenInputContainer,\"hiddenInputContainer\").appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener(\"change\",function(){var b=M.hiddenFileInput.files,p=!0,e=!1,o=void 0;if(b.length)try{for(var z,t=b[Symbol.iterator]();!(p=(z=t.next()).done);p=!0){var c=z.value;M.addFile(c)}}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}M.emit(\"addedfiles\",b),s()})};s()}this.URL=null!==window.URL?window.URL:window.webkitURL;var A=!0,d=!1,l=void 0;try{for(var q,u=this.events[Symbol.iterator]();!(A=(q=u.next()).done);A=!0){var f=q.value;this.on(f,this.options[f])}}catch(M){d=!0,l=M}finally{try{A||null==u.return||u.return()}finally{if(d)throw l}}this.on(\"uploadprogress\",function(){return M.updateTotalUploadProgress()}),this.on(\"removedfile\",function(){return b.updateTotalUploadProgress()}),this.on(\"canceled\",function(M){return p.emit(\"complete\",M)}),this.on(\"complete\",function(M){var b=e;if(0===e.getAddedFiles().length&&0===e.getUploadingFiles().length&&0===e.getQueuedFiles().length)return setTimeout(function(){return b.emit(\"queuecomplete\")},0)});var W=function(M){if(function(M){if(M.dataTransfer.types)for(var b=0;b<M.dataTransfer.types.length;b++)if(\"Files\"===M.dataTransfer.types[b])return!0;return!1}(M))return M.stopPropagation(),M.preventDefault?M.preventDefault():M.returnValue=!1};return this.listeners=[{element:this.element,events:{dragstart:function(M){return o.emit(\"dragstart\",M)},dragenter:function(M){return W(M),z.emit(\"dragenter\",M)},dragover:function(M){var b;try{b=M.dataTransfer.effectAllowed}catch(M){}return M.dataTransfer.dropEffect=\"move\"===b||\"linkMove\"===b?\"move\":\"copy\",W(M),c.emit(\"dragover\",M)},dragleave:function(M){return n.emit(\"dragleave\",M)},drop:function(M){return W(M),O.drop(M)},dragend:function(M){return i.emit(\"dragend\",M)}}}],this.clickableElements.forEach(function(M){var b=r;return r.listeners.push({element:M,events:{click:function(p){return(M!==b.element||p.target===b.element||t.elementInside(p.target,b.element.querySelector(\".dz-message\")))&&b.hiddenFileInput.click(),!0}}})}),this.enable(),this.options.init.call(this)}},{key:\"destroy\",value:function(){return this.disable(),this.removeAllFiles(!0),(null!=this.hiddenFileInput?this.hiddenFileInput.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,t.instances.splice(t.instances.indexOf(this),1)}},{key:\"updateTotalUploadProgress\",value:function(){var M,b=0,p=0;if(this.getActiveFiles().length){var e=!0,o=!1,z=void 0;try{for(var t,c=this.getActiveFiles()[Symbol.iterator]();!(e=(t=c.next()).done);e=!0){var n=t.value;b+=n.upload.bytesSent,p+=n.upload.total}}catch(M){o=!0,z=M}finally{try{e||null==c.return||c.return()}finally{if(o)throw z}}M=100*b/p}else M=100;return this.emit(\"totaluploadprogress\",M,p,b)}},{key:\"_getParamName\",value:function(M){return\"function\"==typeof this.options.paramName?this.options.paramName(M):\"\".concat(this.options.paramName).concat(this.options.uploadMultiple?\"[\".concat(M,\"]\"):\"\")}},{key:\"_renameFile\",value:function(M){return\"function\"!=typeof this.options.renameFile?M.name:this.options.renameFile(M)}},{key:\"getFallbackForm\",value:function(){var M,b;if(M=this.getExistingFallback())return M;var p='<div class=\"dz-fallback\">';this.options.dictFallbackText&&(p+=\"<p>\".concat(this.options.dictFallbackText,\"</p>\")),p+='<input type=\"file\" name=\"'.concat(this._getParamName(0),'\" ').concat(this.options.uploadMultiple?'multiple=\"multiple\"':void 0,' /><input type=\"submit\" value=\"Upload!\"></div>');var e=t.createElement(p);return\"FORM\"!==this.element.tagName?(b=t.createElement('<form action=\"'.concat(this.options.url,'\" enctype=\"multipart/form-data\" method=\"').concat(this.options.method,'\"></form>'))).appendChild(e):(this.element.setAttribute(\"enctype\",\"multipart/form-data\"),this.element.setAttribute(\"method\",this.options.method)),null!=b?b:e}},{key:\"getExistingFallback\",value:function(){var M=function(M){var b=!0,p=!1,e=void 0;try{for(var o,z=M[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t=o.value;if(/(^| )fallback($| )/.test(t.className))return t}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}},b=!0,p=!1,e=void 0;try{for(var o,z=[\"div\",\"form\"][Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t,c=o.value;if(t=M(this.element.getElementsByTagName(c)))return t}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}}},{key:\"setupEventListeners\",value:function(){return this.listeners.map(function(M){return function(){var b=[];for(var p in M.events){var e=M.events[p];b.push(M.element.addEventListener(p,e,!1))}return b}()})}},{key:\"removeEventListeners\",value:function(){return this.listeners.map(function(M){return function(){var b=[];for(var p in M.events){var e=M.events[p];b.push(M.element.removeEventListener(p,e,!1))}return b}()})}},{key:\"disable\",value:function(){var M=this;return this.clickableElements.forEach(function(M){return M.classList.remove(\"dz-clickable\")}),this.removeEventListeners(),this.disabled=!0,this.files.map(function(b){return M.cancelUpload(b)})}},{key:\"enable\",value:function(){return delete this.disabled,this.clickableElements.forEach(function(M){return M.classList.add(\"dz-clickable\")}),this.setupEventListeners()}},{key:\"filesize\",value:function(M){var b=0,p=\"b\";if(M>0){for(var e=[\"tb\",\"gb\",\"mb\",\"kb\",\"b\"],o=0;o<e.length;o++){var z=e[o];if(M>=Math.pow(this.options.filesizeBase,4-o)/10){b=M/Math.pow(this.options.filesizeBase,4-o),p=z;break}}b=Math.round(10*b)/10}return\"<strong>\".concat(b,\"</strong> \").concat(this.options.dictFileSizeUnits[p])}},{key:\"_updateMaxFilesReachedClass\",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit(\"maxfilesreached\",this.files),this.element.classList.add(\"dz-max-files-reached\")):this.element.classList.remove(\"dz-max-files-reached\")}},{key:\"drop\",value:function(M){if(M.dataTransfer){this.emit(\"drop\",M);for(var b=[],p=0;p<M.dataTransfer.files.length;p++)b[p]=M.dataTransfer.files[p];if(b.length){var e=M.dataTransfer.items;e&&e.length&&null!=e[0].webkitGetAsEntry?this._addFilesFromItems(e):this.handleFiles(b)}this.emit(\"addedfiles\",b)}}},{key:\"paste\",value:function(M){if(null!=(p=function(M){return M.items},null!=(b=null!=M?M.clipboardData:void 0)?p(b):void 0)){var b,p;this.emit(\"paste\",M);var e=M.clipboardData.items;return e.length?this._addFilesFromItems(e):void 0}}},{key:\"handleFiles\",value:function(M){var b=!0,p=!1,e=void 0;try{for(var o,z=M[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t=o.value;this.addFile(t)}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}}},{key:\"_addFilesFromItems\",value:function(M){var b=this;return function(){var p=[],e=!0,o=!1,z=void 0;try{for(var t,c=M[Symbol.iterator]();!(e=(t=c.next()).done);e=!0){var n,O=t.value;null!=O.webkitGetAsEntry&&(n=O.webkitGetAsEntry())?n.isFile?p.push(b.addFile(O.getAsFile())):n.isDirectory?p.push(b._addFilesFromDirectory(n,n.name)):p.push(void 0):null==O.getAsFile||null!=O.kind&&\"file\"!==O.kind?p.push(void 0):p.push(b.addFile(O.getAsFile()))}}catch(M){o=!0,z=M}finally{try{e||null==c.return||c.return()}finally{if(o)throw z}}return p}()}},{key:\"_addFilesFromDirectory\",value:function(M,b){var p=this,e=M.createReader(),o=function(M){return p=function(b){return b.log(M)},null!=(b=console)&&\"function\"==typeof b.log?p(b):void 0;var b,p},z=function(){var M=p;return e.readEntries(function(p){if(p.length>0){var e=!0,o=!1,t=void 0;try{for(var c,n=p[Symbol.iterator]();!(e=(c=n.next()).done);e=!0){var O=c.value,i=M;O.isFile?O.file(function(M){if(!i.options.ignoreHiddenFiles||\".\"!==M.name.substring(0,1))return M.fullPath=\"\".concat(b,\"/\").concat(M.name),i.addFile(M)}):O.isDirectory&&M._addFilesFromDirectory(O,\"\".concat(b,\"/\").concat(O.name))}}catch(M){o=!0,t=M}finally{try{e||null==n.return||n.return()}finally{if(o)throw t}}z()}return null},o)};return z()}},{key:\"accept\",value:function(M,b){this.options.maxFilesize&&M.size>1048576*this.options.maxFilesize?b(this.options.dictFileTooBig.replace(\"{{filesize}}\",Math.round(M.size/1024/10.24)/100).replace(\"{{maxFilesize}}\",this.options.maxFilesize)):t.isValidFile(M,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(b(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\",this.options.maxFiles)),this.emit(\"maxfilesexceeded\",M)):this.options.accept.call(this,M,b):b(this.options.dictInvalidFileType)}},{key:\"addFile\",value:function(M){var b=this;M.upload={uuid:t.uuidv4(),progress:0,total:M.size,bytesSent:0,filename:this._renameFile(M)},this.files.push(M),M.status=t.ADDED,this.emit(\"addedfile\",M),this._enqueueThumbnail(M),this.accept(M,function(p){p?(M.accepted=!1,b._errorProcessing([M],p)):(M.accepted=!0,b.options.autoQueue&&b.enqueueFile(M)),b._updateMaxFilesReachedClass()})}},{key:\"enqueueFiles\",value:function(M){var b=!0,p=!1,e=void 0;try{for(var o,z=M[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t=o.value;this.enqueueFile(t)}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}return null}},{key:\"enqueueFile\",value:function(M){if(M.status!==t.ADDED||!0!==M.accepted)throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");var b=this;if(M.status=t.QUEUED,this.options.autoProcessQueue)return setTimeout(function(){return b.processQueue()},0)}},{key:\"_enqueueThumbnail\",value:function(M){if(this.options.createImageThumbnails&&M.type.match(/image.*/)&&M.size<=1048576*this.options.maxThumbnailFilesize){var b=this;return this._thumbnailQueue.push(M),setTimeout(function(){return b._processThumbnailQueue()},0)}}},{key:\"_processThumbnailQueue\",value:function(){var M=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var b=this._thumbnailQueue.shift();return this.createThumbnail(b,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(p){return M.emit(\"thumbnail\",b,p),M._processingThumbnail=!1,M._processThumbnailQueue()})}}},{key:\"removeFile\",value:function(M){if(M.status===t.UPLOADING&&this.cancelUpload(M),this.files=d(this.files,M),this.emit(\"removedfile\",M),0===this.files.length)return this.emit(\"reset\")}},{key:\"removeAllFiles\",value:function(M){null==M&&(M=!1);var b=!0,p=!1,e=void 0;try{for(var o,z=this.files.slice()[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var c=o.value;(c.status!==t.UPLOADING||M)&&this.removeFile(c)}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}return null}},{key:\"resizeImage\",value:function(M,b,p,e,o){var z=this;return this.createThumbnail(M,b,p,e,!0,function(b,p){if(null==p)return o(M);var e=z.options.resizeMimeType;null==e&&(e=M.type);var c=p.toDataURL(e,z.options.resizeQuality);return\"image/jpeg\"!==e&&\"image/jpg\"!==e||(c=u.restore(M.dataURL,c)),o(t.dataURItoBlob(c))})}},{key:\"createThumbnail\",value:function(M,b,p,e,o,z){var t=this,c=new FileReader;c.onload=function(){M.dataURL=c.result,\"image/svg+xml\"!==M.type?t.createThumbnailFromUrl(M,b,p,e,o,z):null!=z&&z(c.result)},c.readAsDataURL(M)}},{key:\"displayExistingFile\",value:function(M,b,p,e,o){var z=void 0===o||o;if(this.emit(\"addedfile\",M),this.emit(\"complete\",M),z){var t=this;M.dataURL=b,this.createThumbnailFromUrl(M,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,this.options.fixOrientation,function(b){t.emit(\"thumbnail\",M,b),p&&p()},e)}else this.emit(\"thumbnail\",M,b),p&&p()}},{key:\"createThumbnailFromUrl\",value:function(M,b,p,e,o,z,t){var c=this,n=document.createElement(\"img\");return t&&(n.crossOrigin=t),o=\"from-image\"!=getComputedStyle(document.body).imageOrientation&&o,n.onload=function(){var t=c,O=function(M){return M(1)};return\"undefined\"!=typeof EXIF&&null!==EXIF&&o&&(O=function(M){return EXIF.getData(n,function(){return M(EXIF.getTag(this,\"Orientation\"))})}),O(function(o){M.width=n.width,M.height=n.height;var c=t.options.resize.call(t,M,b,p,e),O=document.createElement(\"canvas\"),i=O.getContext(\"2d\");switch(O.width=c.trgWidth,O.height=c.trgHeight,o>4&&(O.width=c.trgHeight,O.height=c.trgWidth),o){case 2:i.translate(O.width,0),i.scale(-1,1);break;case 3:i.translate(O.width,O.height),i.rotate(Math.PI);break;case 4:i.translate(0,O.height),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-O.width);break;case 7:i.rotate(.5*Math.PI),i.translate(O.height,-O.width),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-O.height,0)}q(i,n,null!=c.srcX?c.srcX:0,null!=c.srcY?c.srcY:0,c.srcWidth,c.srcHeight,null!=c.trgX?c.trgX:0,null!=c.trgY?c.trgY:0,c.trgWidth,c.trgHeight);var r=O.toDataURL(\"image/png\");if(null!=z)return z(r,O)})},null!=z&&(n.onerror=z),n.src=M.dataURL}},{key:\"processQueue\",value:function(){var M=this.options.parallelUploads,b=this.getUploadingFiles().length,p=b;if(!(b>=M)){var e=this.getQueuedFiles();if(e.length>0){if(this.options.uploadMultiple)return this.processFiles(e.slice(0,M-b));for(;p<M;){if(!e.length)return;this.processFile(e.shift()),p++}}}}},{key:\"processFile\",value:function(M){return this.processFiles([M])}},{key:\"processFiles\",value:function(M){var b=!0,p=!1,e=void 0;try{for(var o,z=M[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var c=o.value;c.processing=!0,c.status=t.UPLOADING,this.emit(\"processing\",c)}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}return this.options.uploadMultiple&&this.emit(\"processingmultiple\",M),this.uploadFiles(M)}},{key:\"_getFilesWithXhr\",value:function(M){return this.files.filter(function(b){return b.xhr===M}).map(function(M){return M})}},{key:\"cancelUpload\",value:function(M){if(M.status===t.UPLOADING){var b=this._getFilesWithXhr(M.xhr),p=!0,e=!1,o=void 0;try{for(var z,c=b[Symbol.iterator]();!(p=(z=c.next()).done);p=!0)(s=z.value).status=t.CANCELED}catch(M){e=!0,o=M}finally{try{p||null==c.return||c.return()}finally{if(e)throw o}}void 0!==M.xhr&&M.xhr.abort();var n=!0,O=!1,i=void 0;try{for(var r,a=b[Symbol.iterator]();!(n=(r=a.next()).done);n=!0){var s=r.value;this.emit(\"canceled\",s)}}catch(M){O=!0,i=M}finally{try{n||null==a.return||a.return()}finally{if(O)throw i}}this.options.uploadMultiple&&this.emit(\"canceledmultiple\",b)}else M.status!==t.ADDED&&M.status!==t.QUEUED||(M.status=t.CANCELED,this.emit(\"canceled\",M),this.options.uploadMultiple&&this.emit(\"canceledmultiple\",[M]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:\"resolveOption\",value:function(M){for(var b=arguments.length,p=new Array(b>1?b-1:0),e=1;e<b;e++)p[e-1]=arguments[e];return\"function\"==typeof M?M.apply(this,p):M}},{key:\"uploadFile\",value:function(M){return this.uploadFiles([M])}},{key:\"uploadFiles\",value:function(M){var b=this;this._transformFiles(M,function(p){if(b.options.chunking){var e=p[0];M[0].upload.chunked=b.options.chunking&&(b.options.forceChunking||e.size>b.options.chunkSize),M[0].upload.totalChunkCount=Math.ceil(e.size/b.options.chunkSize)}if(M[0].upload.chunked){var o=b,z=b,c=M[0];e=p[0],c.upload.chunks=[];var n=function(){for(var b=0;void 0!==c.upload.chunks[b];)b++;if(!(b>=c.upload.totalChunkCount)){var p=b*o.options.chunkSize,z=Math.min(p+o.options.chunkSize,e.size),n={name:o._getParamName(0),data:e.webkitSlice?e.webkitSlice(p,z):e.slice(p,z),filename:c.upload.filename,chunkIndex:b};c.upload.chunks[b]={file:c,index:b,dataBlock:n,status:t.UPLOADING,progress:0,retries:0},o._uploadData(M,[n])}};if(c.upload.finishedChunkUpload=function(b,p){var e=z,o=!0;b.status=t.SUCCESS,b.dataBlock=null,b.response=b.xhr.responseText,b.responseHeaders=b.xhr.getAllResponseHeaders(),b.xhr=null;for(var O=0;O<c.upload.totalChunkCount;O++){if(void 0===c.upload.chunks[O])return n();c.upload.chunks[O].status!==t.SUCCESS&&(o=!1)}o&&z.options.chunksUploaded(c,function(){e._finished(M,p,null)})},b.options.parallelChunkUploads)for(var O=0;O<c.upload.totalChunkCount;O++)n();else n()}else{var i=[];for(O=0;O<M.length;O++)i[O]={name:b._getParamName(O),data:p[O],filename:M[O].upload.filename};b._uploadData(M,i)}})}},{key:\"_getChunk\",value:function(M,b){for(var p=0;p<M.upload.totalChunkCount;p++)if(void 0!==M.upload.chunks[p]&&M.upload.chunks[p].xhr===b)return M.upload.chunks[p]}},{key:\"_uploadData\",value:function(b,p){var e=this,o=this,z=this,t=this,c=new XMLHttpRequest,n=!0,i=!1,r=void 0;try{for(var a=b[Symbol.iterator]();!(n=(g=a.next()).done);n=!0)(u=g.value).xhr=c}catch(M){i=!0,r=M}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}b[0].upload.chunked&&(b[0].upload.chunks[p[0].chunkIndex].xhr=c);var s=this.resolveOption(this.options.method,b,p),A=this.resolveOption(this.options.url,b,p);c.open(s,A,!0),this.resolveOption(this.options.timeout,b)&&(c.timeout=this.resolveOption(this.options.timeout,b)),c.withCredentials=!!this.options.withCredentials,c.onload=function(M){e._finishedUploading(b,c,M)},c.ontimeout=function(){o._handleUploadError(b,c,\"Request timedout after \".concat(o.options.timeout/1e3,\" seconds\"))},c.onerror=function(){z._handleUploadError(b,c)},(null!=c.upload?c.upload:c).onprogress=function(M){return t._updateFilesUploadProgress(b,c,M)};var d=this.options.defaultHeaders?{Accept:\"application/json\",\"Cache-Control\":\"no-cache\",\"X-Requested-With\":\"XMLHttpRequest\"}:{};for(var l in this.options.binaryBody&&(d[\"Content-Type\"]=b[0].type),this.options.headers&&M(O)(d,this.options.headers),d){var q=d[l];q&&c.setRequestHeader(l,q)}if(this.options.binaryBody){n=!0,i=!1,r=void 0;try{for(a=b[Symbol.iterator]();!(n=(g=a.next()).done);n=!0){var u=g.value;this.emit(\"sending\",u,c)}}catch(M){i=!0,r=M}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}this.options.uploadMultiple&&this.emit(\"sendingmultiple\",b,c),this.submitRequest(c,null,b)}else{var f=new FormData;if(this.options.params){var W=this.options.params;for(var h in\"function\"==typeof W&&(W=W.call(this,b,c,b[0].upload.chunked?this._getChunk(b[0],c):null)),W){var R=W[h];if(Array.isArray(R))for(var m=0;m<R.length;m++)f.append(h,R[m]);else f.append(h,R)}}n=!0,i=!1,r=void 0;try{var g;for(a=b[Symbol.iterator]();!(n=(g=a.next()).done);n=!0)u=g.value,this.emit(\"sending\",u,c,f)}catch(M){i=!0,r=M}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}for(this.options.uploadMultiple&&this.emit(\"sendingmultiple\",b,c,f),this._addFormElementData(f),m=0;m<p.length;m++){var L=p[m];f.append(L.name,L.data,L.filename)}this.submitRequest(c,f,b)}}},{key:\"_transformFiles\",value:function(M,b){for(var p=this,e=function(e){p.options.transformFile.call(p,M[e],function(p){o[e]=p,++z===M.length&&b(o)})},o=[],z=0,t=0;t<M.length;t++)e(t)}},{key:\"_addFormElementData\",value:function(M){var b=!0,p=!1,e=void 0;if(\"FORM\"===this.element.tagName)try{for(var o=this.element.querySelectorAll(\"input, textarea, select, button\")[Symbol.iterator]();!(b=(n=o.next()).done);b=!0){var z=n.value,t=z.getAttribute(\"name\"),c=z.getAttribute(\"type\");if(c&&(c=c.toLowerCase()),null!=t)if(\"SELECT\"===z.tagName&&z.hasAttribute(\"multiple\")){b=!0,p=!1,e=void 0;try{var n;for(o=z.options[Symbol.iterator]();!(b=(n=o.next()).done);b=!0){var O=n.value;O.selected&&M.append(t,O.value)}}catch(M){p=!0,e=M}finally{try{b||null==o.return||o.return()}finally{if(p)throw e}}}else(!c||\"checkbox\"!==c&&\"radio\"!==c||z.checked)&&M.append(t,z.value)}}catch(M){p=!0,e=M}finally{try{b||null==o.return||o.return()}finally{if(p)throw e}}}},{key:\"_updateFilesUploadProgress\",value:function(M,b,p){var e=!0,o=!1,z=void 0;if(M[0].upload.chunked){i=M[0];var t=this._getChunk(i,b);p?(t.progress=100*p.loaded/p.total,t.total=p.total,t.bytesSent=p.loaded):(t.progress=100,t.bytesSent=t.total),i.upload.progress=0,i.upload.total=0,i.upload.bytesSent=0;for(var c=0;c<i.upload.totalChunkCount;c++)i.upload.chunks[c]&&void 0!==i.upload.chunks[c].progress&&(i.upload.progress+=i.upload.chunks[c].progress,i.upload.total+=i.upload.chunks[c].total,i.upload.bytesSent+=i.upload.chunks[c].bytesSent);i.upload.progress=i.upload.progress/i.upload.totalChunkCount,this.emit(\"uploadprogress\",i,i.upload.progress,i.upload.bytesSent)}else try{for(var n,O=M[Symbol.iterator]();!(e=(n=O.next()).done);e=!0){var i;(i=n.value).upload.total&&i.upload.bytesSent&&i.upload.bytesSent==i.upload.total||(p?(i.upload.progress=100*p.loaded/p.total,i.upload.total=p.total,i.upload.bytesSent=p.loaded):(i.upload.progress=100,i.upload.bytesSent=i.upload.total),this.emit(\"uploadprogress\",i,i.upload.progress,i.upload.bytesSent))}}catch(M){o=!0,z=M}finally{try{e||null==O.return||O.return()}finally{if(o)throw z}}}},{key:\"_finishedUploading\",value:function(M,b,p){var e;if(M[0].status!==t.CANCELED&&4===b.readyState){if(\"arraybuffer\"!==b.responseType&&\"blob\"!==b.responseType&&(e=b.responseText,b.getResponseHeader(\"content-type\")&&~b.getResponseHeader(\"content-type\").indexOf(\"application/json\")))try{e=JSON.parse(e)}catch(M){p=M,e=\"Invalid JSON response from server.\"}this._updateFilesUploadProgress(M,b),200<=b.status&&b.status<300?M[0].upload.chunked?M[0].upload.finishedChunkUpload(this._getChunk(M[0],b),e):this._finished(M,e,p):this._handleUploadError(M,b,e)}}},{key:\"_handleUploadError\",value:function(M,b,p){if(M[0].status!==t.CANCELED){if(M[0].upload.chunked&&this.options.retryChunks){var e=this._getChunk(M[0],b);if(e.retries++<this.options.retryChunksLimit)return void this._uploadData(M,[e.dataBlock]);console.warn(\"Retried this chunk too often. Giving up.\")}this._errorProcessing(M,p||this.options.dictResponseError.replace(\"{{statusCode}}\",b.status),b)}}},{key:\"submitRequest\",value:function(M,b,p){if(1==M.readyState)if(this.options.binaryBody)if(p[0].upload.chunked){var e=this._getChunk(p[0],M);M.send(e.dataBlock.data)}else M.send(p[0]);else M.send(b);else console.warn(\"Cannot send this request because the XMLHttpRequest.readyState is not OPENED.\")}},{key:\"_finished\",value:function(M,b,p){var e=!0,o=!1,z=void 0;try{for(var c,n=M[Symbol.iterator]();!(e=(c=n.next()).done);e=!0){var O=c.value;O.status=t.SUCCESS,this.emit(\"success\",O,b,p),this.emit(\"complete\",O)}}catch(M){o=!0,z=M}finally{try{e||null==n.return||n.return()}finally{if(o)throw z}}if(this.options.uploadMultiple&&(this.emit(\"successmultiple\",M,b,p),this.emit(\"completemultiple\",M)),this.options.autoProcessQueue)return this.processQueue()}},{key:\"_errorProcessing\",value:function(M,b,p){var e=!0,o=!1,z=void 0;try{for(var c,n=M[Symbol.iterator]();!(e=(c=n.next()).done);e=!0){var O=c.value;O.status=t.ERROR,this.emit(\"error\",O,b,p),this.emit(\"complete\",O)}}catch(M){o=!0,z=M}finally{try{e||null==n.return||n.return()}finally{if(o)throw z}}if(this.options.uploadMultiple&&(this.emit(\"errormultiple\",M,b,p),this.emit(\"completemultiple\",M)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:\"initClass\",value:function(){this.prototype.Emitter=a,this.prototype.events=[\"drop\",\"dragstart\",\"dragend\",\"dragenter\",\"dragover\",\"dragleave\",\"addedfile\",\"addedfiles\",\"removedfile\",\"thumbnail\",\"error\",\"errormultiple\",\"processing\",\"processingmultiple\",\"uploadprogress\",\"totaluploadprogress\",\"sending\",\"sendingmultiple\",\"success\",\"successmultiple\",\"canceled\",\"canceledmultiple\",\"complete\",\"completemultiple\",\"reset\",\"maxfilesexceeded\",\"maxfilesreached\",\"queuecomplete\"],this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:\"uuidv4\",value:function(){return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g,function(M){var b=16*Math.random()|0;return(\"x\"===M?b:3&b|8).toString(16)})}}]),t}(a);A.initClass(),A.options={},A.optionsForElement=function(M){return M.getAttribute(\"id\")?A.options[l(M.getAttribute(\"id\"))]:void 0},A.instances=[],A.forElement=function(M){if(\"string\"==typeof M&&(M=document.querySelector(M)),null==(null!=M?M.dropzone:void 0))throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");return M.dropzone},A.discover=function(){var M;if(document.querySelectorAll)M=document.querySelectorAll(\".dropzone\");else{M=[];var b=function(b){return function(){var p=[],e=!0,o=!1,z=void 0;try{for(var t,c=b[Symbol.iterator]();!(e=(t=c.next()).done);e=!0){var n=t.value;/(^| )dropzone($| )/.test(n.className)?p.push(M.push(n)):p.push(void 0)}}catch(M){o=!0,z=M}finally{try{e||null==c.return||c.return()}finally{if(o)throw z}}return p}()};b(document.getElementsByTagName(\"div\")),b(document.getElementsByTagName(\"form\"))}return function(){var b=[],p=!0,e=!1,o=void 0;try{for(var z,t=M[Symbol.iterator]();!(p=(z=t.next()).done);p=!0){var c=z.value;!1!==A.optionsForElement(c)?b.push(new A(c)):b.push(void 0)}}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}return b}()},A.blockedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\\/12/i],A.isBrowserSupported=function(){var M=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if(\"classList\"in document.createElement(\"a\")){void 0!==A.blacklistedBrowsers&&(A.blockedBrowsers=A.blacklistedBrowsers);var b=!0,p=!1,e=void 0;try{for(var o,z=A.blockedBrowsers[Symbol.iterator]();!(b=(o=z.next()).done);b=!0)o.value.test(navigator.userAgent)&&(M=!1)}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}}else M=!1;else M=!1;return M},A.dataURItoBlob=function(M){for(var b=atob(M.split(\",\")[1]),p=M.split(\",\")[0].split(\":\")[1].split(\";\")[0],e=new ArrayBuffer(b.length),o=new Uint8Array(e),z=0,t=b.length,c=0<=t;c?z<=t:z>=t;c?z++:z--)o[z]=b.charCodeAt(z);return new Blob([e],{type:p})};var d=function(M,b){return M.filter(function(M){return M!==b}).map(function(M){return M})},l=function(M){return M.replace(/[\\-_](\\w)/g,function(M){return M.charAt(1).toUpperCase()})};A.createElement=function(M){var b=document.createElement(\"div\");return b.innerHTML=M,b.childNodes[0]},A.elementInside=function(M,b){if(M===b)return!0;for(;M=M.parentNode;)if(M===b)return!0;return!1},A.getElement=function(M,b){var p;if(\"string\"==typeof M?p=document.querySelector(M):null!=M.nodeType&&(p=M),null==p)throw new Error(\"Invalid `\".concat(b,\"` option provided. Please provide a CSS selector or a plain HTML element.\"));return p},A.getElements=function(M,b){var p,e;if(M instanceof Array){e=[];try{var o=!0,z=!1,t=void 0;try{for(var c=M[Symbol.iterator]();!(o=(n=c.next()).done);o=!0)p=n.value,e.push(this.getElement(p,b))}catch(M){z=!0,t=M}finally{try{o||null==c.return||c.return()}finally{if(z)throw t}}}catch(M){e=null}}else if(\"string\"==typeof M){e=[],o=!0,z=!1,t=void 0;try{var n;for(c=document.querySelectorAll(M)[Symbol.iterator]();!(o=(n=c.next()).done);o=!0)p=n.value,e.push(p)}catch(M){z=!0,t=M}finally{try{o||null==c.return||c.return()}finally{if(z)throw t}}}else null!=M.nodeType&&(e=[M]);if(null==e||!e.length)throw new Error(\"Invalid `\".concat(b,\"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\"));return e},A.confirm=function(M,b,p){return window.confirm(M)?b():null!=p?p():void 0},A.isValidFile=function(M,b){if(!b)return!0;b=b.split(\",\");var p=M.type,e=p.replace(/\\/.*$/,\"\"),o=!0,z=!1,t=void 0;try{for(var c,n=b[Symbol.iterator]();!(o=(c=n.next()).done);o=!0){var O=c.value;if(\".\"===(O=O.trim()).charAt(0)){if(-1!==M.name.toLowerCase().indexOf(O.toLowerCase(),M.name.length-O.length))return!0}else if(/\\/\\*$/.test(O)){if(e===O.replace(/\\/.*$/,\"\"))return!0}else if(p===O)return!0}}catch(M){z=!0,t=M}finally{try{o||null==n.return||n.return()}finally{if(z)throw t}}return!1},\"undefined\"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(M){return this.each(function(){return new A(this,M)})}),A.ADDED=\"added\",A.QUEUED=\"queued\",A.ACCEPTED=A.QUEUED,A.UPLOADING=\"uploading\",A.PROCESSING=A.UPLOADING,A.CANCELED=\"canceled\",A.ERROR=\"error\",A.SUCCESS=\"success\";var q=function(M,b,p,e,o,z,t,c,n,O){var i=function(M){M.naturalWidth;var b=M.naturalHeight,p=document.createElement(\"canvas\");p.width=1,p.height=b;var e=p.getContext(\"2d\");e.drawImage(M,0,0);for(var o=e.getImageData(1,0,1,b).data,z=0,t=b,c=b;c>z;)0===o[4*(c-1)+3]?t=c:z=c,c=t+z>>1;var n=c/b;return 0===n?1:n}(b);return M.drawImage(b,p,e,o,z,t,c,n,O/i)},u=function(){\"use strict\";function M(){p(this,M)}return o(M,null,[{key:\"initClass\",value:function(){this.KEY_STR=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}},{key:\"encode64\",value:function(M){for(var b=\"\",p=void 0,e=void 0,o=\"\",z=void 0,t=void 0,c=void 0,n=\"\",O=0;z=(p=M[O++])>>2,t=(3&p)<<4|(e=M[O++])>>4,c=(15&e)<<2|(o=M[O++])>>6,n=63&o,isNaN(e)?c=n=64:isNaN(o)&&(n=64),b=b+this.KEY_STR.charAt(z)+this.KEY_STR.charAt(t)+this.KEY_STR.charAt(c)+this.KEY_STR.charAt(n),p=e=o=\"\",z=t=c=n=\"\",O<M.length;);return b}},{key:\"restore\",value:function(M,b){if(!M.match(\"data:image/jpeg;base64,\"))return b;var p=this.decode64(M.replace(\"data:image/jpeg;base64,\",\"\")),e=this.slice2Segments(p),o=this.exifManipulation(b,e);return\"data:image/jpeg;base64,\".concat(this.encode64(o))}},{key:\"exifManipulation\",value:function(M,b){var p=this.getExifArray(b),e=this.insertExif(M,p);return new Uint8Array(e)}},{key:\"getExifArray\",value:function(M){for(var b=void 0,p=0;p<M.length;){if(255===(b=M[p])[0]&225===b[1])return b;p++}return[]}},{key:\"insertExif\",value:function(M,b){var p=M.replace(\"data:image/jpeg;base64,\",\"\"),e=this.decode64(p),o=e.indexOf(255,3),z=e.slice(0,o),t=e.slice(o),c=z;return(c=c.concat(b)).concat(t)}},{key:\"slice2Segments\",value:function(M){for(var b=0,p=[];!(255===M[b]&218===M[b+1]);){if(255===M[b]&216===M[b+1])b+=2;else{var e=b+(256*M[b+2]+M[b+3])+2,o=M.slice(b,e);p.push(o),b=e}if(b>M.length)break}return p}},{key:\"decode64\",value:function(M){var b=void 0,p=void 0,e=\"\",o=void 0,z=void 0,t=\"\",c=0,n=[];for(/[^A-Za-z0-9\\+\\/\\=]/g.exec(M)&&console.warn(\"There were invalid base64 characters in the input text.\\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\\nExpect errors in decoding.\"),M=M.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");b=this.KEY_STR.indexOf(M.charAt(c++))<<2|(o=this.KEY_STR.indexOf(M.charAt(c++)))>>4,p=(15&o)<<4|(z=this.KEY_STR.indexOf(M.charAt(c++)))>>2,e=(3&z)<<6|(t=this.KEY_STR.indexOf(M.charAt(c++))),n.push(b),64!==z&&n.push(p),64!==t&&n.push(e),b=p=e=\"\",o=z=t=\"\",c<M.length;);return n}}]),M}();u.initClass(),window.Dropzone=A}(),function(M){M.Jcrop=function(b,p){var e,o=M.extend({},M.Jcrop.defaults),z=navigator.userAgent.toLowerCase(),t=/msie/.test(z),c=/msie [1-6]\\./.test(z);function n(M){return Math.round(M)+\"px\"}function O(M){return o.baseClass+\"-\"+M}function i(b){var p=M(b).offset();return[p.left,p.top]}function r(M){return[M.pageX-e[0],M.pageY-e[1]]}function a(b){\"object\"!=typeof b&&(b={}),o=M.extend(o,b),M.each([\"onChange\",\"onSelect\",\"onRelease\",\"onDblClick\"],function(M,b){\"function\"!=typeof o[b]&&(o[b]=function(){})})}function s(M,b,p){if(e=i(v),K.setCursor(\"move\"===M?M:M+\"-resize\"),\"move\"===M)return K.activateHandlers(function(M){var b=M;return Q.watchKeys(),function(M){G.moveOffset([M[0]-b[0],M[1]-b[1]]),b=M,$.update()}}(b),u,p);var z=G.getFixed(),t=A(M),c=G.getCorner(A(t));G.setPressed(G.getCorner(t)),G.setCurrent(c),K.activateHandlers(function(M,b){return function(p){if(o.aspectRatio)switch(M){case\"e\":case\"w\":p[1]=b.y+1;break;case\"n\":case\"s\":p[0]=b.x+1}else switch(M){case\"e\":case\"w\":p[1]=b.y2;break;case\"n\":case\"s\":p[0]=b.x2}G.setCurrent(p),$.update()}}(M,z),u,p)}function A(M){switch(M){case\"n\":case\"ne\":return\"sw\";case\"s\":case\"e\":case\"se\":return\"nw\";case\"w\":case\"sw\":return\"ne\";case\"nw\":return\"se\"}}function d(M){return function(b){return!o.disabled&&(!(\"move\"===M&&!o.allowMove)&&(e=i(v),P=!0,s(M,r(b)),b.stopPropagation(),b.preventDefault(),!1))}}function l(M,b,p){var e=M.width(),o=M.height();e>b&&b>0&&(e=b,o=b/M.width()*M.height()),o>p&&p>0&&(o=p,e=p/M.height()*M.width()),E=M.width()/e,D=M.height()/o,M.width(e).height(o)}function q(M){return{x:M.x*E,y:M.y*D,x2:M.x2*E,y2:M.y2*D,w:M.w*E,h:M.h*D}}function u(M){var b=G.getFixed();b.w>o.minSelect[0]&&b.h>o.minSelect[1]?($.enableHandles(),$.done()):$.release(),K.setCursor(o.allowSelect?\"crosshair\":\"default\")}function f(M){if(o.disabled)return!1;if(!o.allowSelect)return!1;P=!0,e=i(v),$.disableHandles(),K.setCursor(\"crosshair\");var b=r(M);return G.setPressed(b),$.update(),K.activateHandlers(W,u,\"touch\"===M.type.substring(0,5)),Q.watchKeys(),M.stopPropagation(),M.preventDefault(),!1}function W(M){G.setCurrent(M),$.update()}function h(){var b=M(\"<div></div>\").addClass(O(\"tracker\"));return t&&b.css({opacity:0,backgroundColor:\"white\"}),b}\"object\"!=typeof b&&(b=M(b)[0]),\"object\"!=typeof p&&(p={}),a(p);var R={border:\"none\",visibility:\"visible\",margin:0,padding:0,position:\"absolute\",top:0,left:0},m=M(b),g=!0;if(\"IMG\"==b.tagName){if(0!=m[0].width&&0!=m[0].height)m.width(m[0].width),m.height(m[0].height);else{var L=new Image;L.src=m[0].src,m.width(L.width),m.height(L.height)}var v=m.clone().removeAttr(\"id\").css(R).show();v.width(m.width()),v.height(m.height()),m.after(v).hide()}else v=m.css(R).show(),g=!1,null===o.shade&&(o.shade=!0);l(v,o.boxWidth,o.boxHeight);var N=v.width(),y=v.height(),B=M(\"<div />\").width(N).height(y).addClass(O(\"holder\")).css({position:\"relative\",backgroundColor:o.bgColor}).insertAfter(m).append(v);o.addClass&&B.addClass(o.addClass);var X=M(\"<div />\"),w=M(\"<div />\").width(\"100%\").height(\"100%\").css({zIndex:310,position:\"absolute\",overflow:\"hidden\"}),x=M(\"<div />\").width(\"100%\").height(\"100%\").css(\"zIndex\",320),T=M(\"<div />\").css({position:\"absolute\",zIndex:600}).dblclick(function(){var M=G.getFixed();o.onDblClick.call(oM,M)}).insertBefore(v).append(w,x);g&&(X=M(\"<img />\").attr(\"src\",v.attr(\"src\")).css(R).width(N).height(y),w.append(X)),c&&T.css({overflowY:\"hidden\"});var _,k,S,C,E,D,P,I,F=o.boundary,j=h().width(N+2*F).height(y+2*F).css({position:\"absolute\",top:n(-F),left:n(-F),zIndex:290}).mousedown(f),H=o.bgColor,U=o.bgOpacity;e=i(v);var Y=function(){function b(){var M,b={},p=[\"touchstart\",\"touchmove\",\"touchend\"],e=document.createElement(\"div\");try{for(M=0;M<p.length;M++){var o=p[M],z=(o=\"on\"+o)in e;z||(e.setAttribute(o,\"return;\"),z=\"function\"==typeof e[o]),b[p[M]]=z}return b.touchstart&&b.touchend&&b.touchmove}catch(M){return!1}}return{createDragger:function(M){return function(b){return!o.disabled&&(!(\"move\"===M&&!o.allowMove)&&(e=i(v),P=!0,s(M,r(Y.cfilter(b)),!0),b.stopPropagation(),b.preventDefault(),!1))}},newSelection:function(M){return f(Y.cfilter(M))},cfilter:function(M){return M.pageX=M.originalEvent.changedTouches[0].pageX,M.pageY=M.originalEvent.changedTouches[0].pageY,M},fixTouchSupport:function(b){M(b.currentTarget).hasClass(\"jcrop-tracker\")&&b.stopPropagation()},isSupported:b,support:!0===o.touchSupport||!1===o.touchSupport?o.touchSupport:b()}}(),G=function(){var M,b,p=0,e=0,z=0,t=0;function c(){if(!o.aspectRatio)return function(){var M,b=z-p,o=t-e;_&&Math.abs(b)>_&&(z=b>0?p+_:p-_);k&&Math.abs(o)>k&&(t=o>0?e+k:e-k);C/D&&Math.abs(o)<C/D&&(t=o>0?e+C/D:e-C/D);S/E&&Math.abs(b)<S/E&&(z=b>0?p+S/E:p-S/E);p<0&&(z-=p,p-=p);e<0&&(t-=e,e-=e);z<0&&(p-=z,z-=z);t<0&&(e-=t,t-=t);z>N&&(p-=M=z-N,z-=M);t>y&&(e-=M=t-y,t-=M);p>N&&(t-=M=p-y,e-=M);e>y&&(t-=M=e-y,e-=M);return i(O(p,e,z,t))}();var M,b,c,n,r=o.aspectRatio,a=o.minSize[0]/E,s=o.maxSize[0]/E,A=o.maxSize[1]/D,d=z-p,l=t-e,q=Math.abs(d),u=Math.abs(l);return 0===s&&(s=10*N),0===A&&(A=10*y),q/u<r?(b=t,c=u*r,(M=d<0?p-c:c+p)<0?(M=0,n=Math.abs((M-p)/r),b=l<0?e-n:n+e):M>N&&(M=N,n=Math.abs((M-p)/r),b=l<0?e-n:n+e)):(M=z,n=q/r,(b=l<0?e-n:e+n)<0?(b=0,c=Math.abs((b-e)*r),M=d<0?p-c:c+p):b>y&&(b=y,c=Math.abs(b-e)*r,M=d<0?p-c:c+p)),M>p?(M-p<a?M=p+a:M-p>s&&(M=p+s),b=b>e?e+(M-p)/r:e-(M-p)/r):M<p&&(p-M<a?M=p-a:p-M>s&&(M=p-s),b=b>e?e+(p-M)/r:e-(p-M)/r),M<0?(p-=M,M=0):M>N&&(p-=M-N,M=N),b<0?(e-=b,b=0):b>y&&(e-=b-y,b=y),i(O(p,e,M,b))}function n(M){return M[0]<0&&(M[0]=0),M[1]<0&&(M[1]=0),M[0]>N&&(M[0]=N),M[1]>y&&(M[1]=y),[Math.round(M[0]),Math.round(M[1])]}function O(M,b,p,e){var o=M,z=p,t=b,c=e;return p<M&&(o=p,z=M),e<b&&(t=e,c=b),[o,t,z,c]}function i(M){return{x:M[0],y:M[1],x2:M[2],y2:M[3],w:M[2]-M[0],h:M[3]-M[1]}}return{flipCoords:O,setPressed:function(M){M=n(M),z=p=M[0],t=e=M[1]},setCurrent:function(p){p=n(p),M=p[0]-z,b=p[1]-t,z=p[0],t=p[1]},getOffset:function(){return[M,b]},moveOffset:function(M){var b=M[0],o=M[1];0>p+b&&(b-=b+p),0>e+o&&(o-=o+e),y<t+o&&(o+=y-(t+o)),N<z+b&&(b+=N-(z+b)),p+=b,z+=b,e+=o,t+=o},getCorner:function(M){var b=c();switch(M){case\"ne\":return[b.x2,b.y];case\"nw\":return[b.x,b.y];case\"se\":return[b.x2,b.y2];case\"sw\":return[b.x,b.y2]}},getFixed:c}}(),V=function(){var b=!1,p=M(\"<div />\").css({position:\"absolute\",zIndex:240,opacity:0}),e={top:c(),left:c().height(y),right:c().height(y),bottom:c()};function z(){return t(G.getFixed())}function t(M){e.top.css({left:n(M.x),width:n(M.w),height:n(M.y)}),e.bottom.css({top:n(M.y2),left:n(M.x),width:n(M.w),height:n(y-M.y2)}),e.right.css({left:n(M.x2),width:n(N-M.x2)}),e.left.css({width:n(M.x)})}function c(){return M(\"<div />\").css({position:\"absolute\",backgroundColor:o.shadeColor||o.bgColor}).appendTo(p)}function O(){b||(b=!0,p.insertBefore(v),z(),$.setBgOpacity(1,0,1),X.hide(),i(o.shadeColor||o.bgColor,1),$.isAwake()?a(o.bgOpacity,1):a(1,1))}function i(M,b){pM(s(),M,b)}function r(){b&&(p.remove(),X.show(),b=!1,$.isAwake()?$.setBgOpacity(o.bgOpacity,1,1):($.setBgOpacity(1,1,1),$.disableHandles()),pM(B,0,1))}function a(M,e){b&&(o.bgFade&&!e?p.animate({opacity:1-M},{queue:!1,duration:o.fadeTime}):p.css({opacity:1-M}))}function s(){return p.children()}return{update:z,updateRaw:t,getShades:s,setBgColor:i,enable:O,disable:r,resize:function(M,b){e.left.css({height:n(b)}),e.right.css({height:n(b)})},refresh:function(){o.shade?O():r(),$.isAwake()&&a(o.bgOpacity)},opacity:a}}(),$=function(){var b,p=370,e={},z={},t={},c=!1;function i(b){var p=M(\"<div />\").css({position:\"absolute\",opacity:o.borderOpacity}).addClass(O(b));return w.append(p),p}function r(b,p){var e=M(\"<div />\").mousedown(d(b)).css({cursor:b+\"-resize\",position:\"absolute\",zIndex:p}).addClass(\"ord-\"+b);return Y.support&&e.bind(\"touchstart.jcrop\",Y.createDragger(b)),x.append(e),e}function a(M){var b=o.handleSize,e=r(M,p++).css({opacity:o.handleOpacity}).addClass(O(\"handle\"));return b&&e.width(b).height(b),e}function s(M){return r(M,p++).addClass(\"jcrop-dragbar\")}function A(){var M=G.getFixed();G.setPressed([M.x,M.y]),G.setCurrent([M.x2,M.y2]),l()}function l(M){if(b)return u(M)}function u(M){var p,e,z,t,c=G.getFixed();p=c.w,e=c.h,T.width(Math.round(p)).height(Math.round(e)),z=c.x,t=c.y,o.shade||X.css({top:n(-t),left:n(-z)}),T.css({top:n(t),left:n(z)}),o.shade&&V.updateRaw(c),b||function(){T.show(),o.shade?V.opacity(U):f(U,!0);b=!0}(),M?o.onSelect.call(oM,q(c)):o.onChange.call(oM,q(c))}function f(M,p,e){(b||p)&&(o.bgFade&&!e?v.animate({opacity:M},{queue:!1,duration:o.fadeTime}):v.css(\"opacity\",M))}function W(){if(c=!0,o.allowResize)return x.show(),!0}function R(){c=!1,x.hide()}function m(M){M?(I=!0,R()):(I=!1,W())}o.dragEdges&&M.isArray(o.createDragbars)&&function(M){var b;for(b=0;b<M.length;b++)t[M[b]]=s(M[b])}(o.createDragbars),M.isArray(o.createHandles)&&function(M){var b;for(b=0;b<M.length;b++)z[M[b]]=a(M[b])}(o.createHandles),o.drawBorders&&M.isArray(o.createBorders)&&function(M){var b,p;for(p=0;p<M.length;p++){switch(M[p]){case\"n\":b=\"hline\";break;case\"s\":b=\"hline bottom\";break;case\"e\":b=\"vline right\";break;case\"w\":b=\"vline\"}e[M[p]]=i(b)}}(o.createBorders),M(document).bind(\"touchstart.jcrop-ios\",Y.fixTouchSupport);var g=h().mousedown(d(\"move\")).css({cursor:\"move\",position:\"absolute\",zIndex:360});return Y.support&&g.bind(\"touchstart.jcrop\",Y.createDragger(\"move\")),w.append(g),R(),{updateVisible:l,update:u,release:function(){R(),T.hide(),o.shade?V.opacity(1):f(1),b=!1,o.onRelease.call(oM)},refresh:A,isAwake:function(){return b},setCursor:function(M){g.css(\"cursor\",M)},enableHandles:W,enableOnly:function(){c=!0},showHandles:function(){c&&x.show()},disableHandles:R,animMode:m,setBgOpacity:f,done:function(){m(!1),A()}}}(),K=function(){var b=function(){},p=function(){},e=o.trackDocument;function z(M){return b(r(M)),!1}function t(e){return e.preventDefault(),e.stopPropagation(),P&&(P=!1,p(r(e)),$.isAwake()&&o.onSelect.call(oM,q(G.getFixed())),j.css({zIndex:290}),M(document).unbind(\".jcrop\"),b=function(){},p=function(){}),!1}function c(M){return b(r(Y.cfilter(M))),!1}function n(M){return t(Y.cfilter(M))}return e||j.mousemove(z).mouseup(t).mouseout(t),v.before(j),{activateHandlers:function(o,O,i){return P=!0,b=o,p=O,function(b){j.css({zIndex:450}),b?M(document).bind(\"touchmove.jcrop\",c).bind(\"touchend.jcrop\",n):e&&M(document).bind(\"mousemove.jcrop\",z).bind(\"mouseup.jcrop\",t)}(i),!1},setCursor:function(M){j.css(\"cursor\",M)}}}(),Q=function(){var b=M('<input type=\"radio\" />').css({position:\"fixed\",left:\"-120px\",width:\"12px\"}).addClass(\"jcrop-keymgr\"),p=M(\"<div />\").css({position:\"absolute\",overflow:\"hidden\"}).append(b);function e(M,b,p){o.allowMove&&(G.moveOffset([b,p]),$.updateVisible(!0)),M.preventDefault(),M.stopPropagation()}return o.keySupport&&(b.keydown(function(M){if(M.ctrlKey||M.metaKey)return!0;var b=!!M.shiftKey?10:1;switch(M.keyCode){case 37:e(M,-b,0);break;case 39:e(M,b,0);break;case 38:e(M,0,-b);break;case 40:e(M,0,b);break;case 27:o.allowSelect&&$.release();break;case 9:return!0}return!1}).blur(function(M){b.hide()}),c||!o.fixedSupport?(b.css({position:\"absolute\",left:\"-20px\"}),p.append(b).insertBefore(v)):b.insertBefore(v)),{watchKeys:function(){o.keySupport&&(b.show(),b.focus())}}}();function J(M){Z([M[0]/E,M[1]/D,M[2]/E,M[3]/D]),o.onSelect.call(oM,q(G.getFixed())),$.enableHandles()}function Z(M){G.setPressed([M[0],M[1]]),G.setCurrent([M[2],M[3]]),$.update()}function MM(){o.disabled=!0,$.disableHandles(),$.setCursor(\"default\"),K.setCursor(\"default\")}function bM(){o.disabled=!1,eM()}function pM(b,p,e){var z=p||o.bgColor;o.bgFade&&M.fx.step.hasOwnProperty(\"backgroundColor\")&&o.fadeTime&&!e?b.animate({backgroundColor:z},{queue:!1,duration:o.fadeTime}):b.css(\"backgroundColor\",z)}function eM(M){o.allowResize?M?$.enableOnly():$.enableHandles():$.disableHandles(),K.setCursor(o.allowSelect?\"crosshair\":\"default\"),$.setCursor(o.allowMove?\"move\":\"default\"),o.hasOwnProperty(\"trueSize\")&&(E=o.trueSize[0]/N,D=o.trueSize[1]/y),o.hasOwnProperty(\"setSelect\")&&(J(o.setSelect),$.done(),delete o.setSelect),V.refresh(),o.bgColor!=H&&(pM(o.shade?V.getShades():B,o.shade&&o.shadeColor||o.bgColor),H=o.bgColor),U!=o.bgOpacity&&(U=o.bgOpacity,o.shade?V.refresh():$.setBgOpacity(U)),_=o.maxSize[0]||0,k=o.maxSize[1]||0,S=o.minSize[0]||0,C=o.minSize[1]||0,o.hasOwnProperty(\"outerImage\")&&(v.attr(\"src\",o.outerImage),delete o.outerImage),$.refresh()}Y.support&&j.bind(\"touchstart.jcrop\",Y.newSelection),x.hide(),eM(!0);var oM={setImage:function(M,b){$.release(),MM();var p=new Image;p.onload=function(){var e=p.width,z=p.height,t=o.boxWidth,c=o.boxHeight;v.width(e).height(z),v.attr(\"src\",M),X.attr(\"src\",M),l(v,t,c),N=v.width(),y=v.height(),X.width(N).height(y),j.width(N+2*F).height(y+2*F),B.width(N).height(y),V.resize(N,y),bM(),\"function\"==typeof b&&b.call(oM)},p.src=M},animateTo:function(M,b){var p=M[0]/E,e=M[1]/D,z=M[2]/E,t=M[3]/D;if(!I){var c=G.flipCoords(p,e,z,t),n=G.getFixed(),O=[n.x,n.y,n.x2,n.y2],i=O,r=o.animationDelay,a=c[0]-O[0],s=c[1]-O[1],A=c[2]-O[2],d=c[3]-O[3],l=0,q=o.swingSpeed;p=i[0],e=i[1],z=i[2],t=i[3],$.animMode(!0);var u=function(){l+=(100-l)/q,i[0]=Math.round(p+l/100*a),i[1]=Math.round(e+l/100*s),i[2]=Math.round(z+l/100*A),i[3]=Math.round(t+l/100*d),l>=99.8&&(l=100),l<100?(Z(i),f()):($.done(),$.animMode(!1),\"function\"==typeof b&&b.call(oM))};f()}function f(){window.setTimeout(u,r)}},setSelect:J,setOptions:function(M){a(M),eM()},tellSelect:function(){return q(G.getFixed())},tellScaled:function(){return G.getFixed()},setClass:function(M){B.removeClass().addClass(O(\"holder\")).addClass(M)},disable:MM,enable:bM,cancel:function(){$.done(),K.activateHandlers(null,null)},release:$.release,destroy:function(){M(document).unbind(\"touchstart.jcrop-ios\",Y.fixTouchSupport),B.remove(),m.show(),m.css(\"visibility\",\"visible\"),M(b).removeData(\"Jcrop\")},focus:Q.watchKeys,getBounds:function(){return[N*E,y*D]},getWidgetSize:function(){return[N,y]},getScaleFactor:function(){return[E,D]},getOptions:function(){return o},ui:{holder:B,selection:T}};return t&&B.bind(\"selectstart\",function(){return!1}),m.data(\"Jcrop\",oM),oM},M.fn.Jcrop=function(b,p){var e;return this.each(function(){if(M(this).data(\"Jcrop\")){if(\"api\"===b)return M(this).data(\"Jcrop\");M(this).data(\"Jcrop\").setOptions(b)}else\"IMG\"==this.tagName?M.Jcrop.Loader(this,function(){M(this).css({display:\"block\",visibility:\"hidden\"}),e=M.Jcrop(this,b),M.isFunction(p)&&p.call(e)}):(M(this).css({display:\"block\",visibility:\"hidden\"}),e=M.Jcrop(this,b),M.isFunction(p)&&p.call(e))}),this},M.Jcrop.Loader=function(b,p,e){var o=M(b),z=o[0];o.bind(\"load.jcloader\",function b(){z.complete?(o.unbind(\".jcloader\"),M.isFunction(p)&&p.call(z)):window.setTimeout(b,50)}).bind(\"error.jcloader\",function(b){o.unbind(\".jcloader\"),M.isFunction(e)&&e.call(z)}),z.complete&&M.isFunction(p)&&(o.unbind(\".jcloader\"),p.call(z))},M.Jcrop.defaults={allowSelect:!0,allowMove:!0,allowResize:!0,trackDocument:!0,baseClass:\"jcrop\",addClass:null,bgColor:\"black\",bgOpacity:.6,bgFade:!1,borderOpacity:.4,handleOpacity:.5,handleSize:null,aspectRatio:0,keySupport:!0,createHandles:[\"n\",\"s\",\"e\",\"w\",\"nw\",\"ne\",\"se\",\"sw\"],createDragbars:[\"n\",\"s\",\"e\",\"w\"],createBorders:[\"n\",\"s\",\"e\",\"w\"],drawBorders:!0,dragEdges:!0,fixedSupport:!0,touchSupport:null,shade:null,boxWidth:0,boxHeight:0,boundary:2,fadeTime:400,animationDelay:20,swingSpeed:3,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){},onDblClick:function(){},onRelease:function(){}}}(jQuery),function(M,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=b():\"function\"==typeof define&&define.amd?define(b):(M=M||self).Sortable=b()}(this,function(){\"use strict\";function M(M,b){var p,e=Object.keys(M);return Object.getOwnPropertySymbols&&(p=Object.getOwnPropertySymbols(M),b&&(p=p.filter(function(b){return Object.getOwnPropertyDescriptor(M,b).enumerable})),e.push.apply(e,p)),e}function b(b){for(var p=1;p<arguments.length;p++){var e=null!=arguments[p]?arguments[p]:{};p%2?M(Object(e),!0).forEach(function(M){var p,o;p=b,M=e[o=M],o in p?Object.defineProperty(p,o,{value:M,enumerable:!0,configurable:!0,writable:!0}):p[o]=M}):Object.getOwnPropertyDescriptors?Object.defineProperties(b,Object.getOwnPropertyDescriptors(e)):M(Object(e)).forEach(function(M){Object.defineProperty(b,M,Object.getOwnPropertyDescriptor(e,M))})}return b}function p(M){return(p=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(M){return typeof M}:function(M){return M&&\"function\"==typeof Symbol&&M.constructor===Symbol&&M!==Symbol.prototype?\"symbol\":typeof M})(M)}function e(){return(e=Object.assign||function(M){for(var b=1;b<arguments.length;b++){var p,e=arguments[b];for(p in e)Object.prototype.hasOwnProperty.call(e,p)&&(M[p]=e[p])}return M}).apply(this,arguments)}function o(M){return function(M){if(Array.isArray(M))return z(M)}(M)||function(M){if(\"undefined\"!=typeof Symbol&&null!=M[Symbol.iterator]||null!=M[\"@@iterator\"])return Array.from(M)}(M)||function(M,b){if(M){if(\"string\"==typeof M)return z(M,b);var p=Object.prototype.toString.call(M).slice(8,-1);return\"Map\"===(p=\"Object\"===p&&M.constructor?M.constructor.name:p)||\"Set\"===p?Array.from(M):\"Arguments\"===p||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(p)?z(M,b):void 0}}(M)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function z(M,b){(null==b||b>M.length)&&(b=M.length);for(var p=0,e=new Array(b);p<b;p++)e[p]=M[p];return e}function t(M){if(\"undefined\"!=typeof window&&window.navigator)return!!navigator.userAgent.match(M)}var c=t(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i),n=t(/Edge/i),O=t(/firefox/i),i=t(/safari/i)&&!t(/chrome/i)&&!t(/android/i),r=t(/iP(ad|od|hone)/i),a=t(/chrome/i)&&t(/android/i),s={capture:!1,passive:!1};function A(M,b,p){M.addEventListener(b,p,!c&&s)}function d(M,b,p){M.removeEventListener(b,p,!c&&s)}function l(M,b){if(b&&(\">\"===b[0]&&(b=b.substring(1)),M))try{if(M.matches)return M.matches(b);if(M.msMatchesSelector)return M.msMatchesSelector(b);if(M.webkitMatchesSelector)return M.webkitMatchesSelector(b)}catch(M){return}}function q(M){return M.host&&M!==document&&M.host.nodeType?M.host:M.parentNode}function u(M,b,p,e){if(M){p=p||document;do{if(null!=b&&(\">\"!==b[0]||M.parentNode===p)&&l(M,b)||e&&M===p)return M}while(M!==p&&(M=q(M)))}return null}var f,W=/\\s+/g;function h(M,b,p){var e;M&&b&&(M.classList?M.classList[p?\"add\":\"remove\"](b):(e=(\" \"+M.className+\" \").replace(W,\" \").replace(\" \"+b+\" \",\" \"),M.className=(e+(p?\" \"+b:\"\")).replace(W,\" \")))}function R(M,b,p){var e=M&&M.style;if(e){if(void 0===p)return document.defaultView&&document.defaultView.getComputedStyle?p=document.defaultView.getComputedStyle(M,\"\"):M.currentStyle&&(p=M.currentStyle),void 0===b?p:p[b];e[b=b in e||-1!==b.indexOf(\"webkit\")?b:\"-webkit-\"+b]=p+(\"string\"==typeof p?\"\":\"px\")}}function m(M,b){var p=\"\";if(\"string\"==typeof M)p=M;else do{var e=R(M,\"transform\")}while(e&&\"none\"!==e&&(p=e+\" \"+p),!b&&(M=M.parentNode));var o=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return o&&new o(p)}function g(M,b,p){if(M){var e=M.getElementsByTagName(b),o=0,z=e.length;if(p)for(;o<z;o++)p(e[o],o);return e}return[]}function L(){return document.scrollingElement||document.documentElement}function v(M,b,p,e,o){if(M.getBoundingClientRect||M===window){var z,t,n,O,i,r,a=M!==window&&M.parentNode&&M!==L()?(t=(z=M.getBoundingClientRect()).top,n=z.left,O=z.bottom,i=z.right,r=z.height,z.width):(n=t=0,O=window.innerHeight,i=window.innerWidth,r=window.innerHeight,window.innerWidth);if((b||p)&&M!==window&&(o=o||M.parentNode,!c))do{if(o&&o.getBoundingClientRect&&(\"none\"!==R(o,\"transform\")||p&&\"static\"!==R(o,\"position\"))){var s=o.getBoundingClientRect();t-=s.top+parseInt(R(o,\"border-top-width\")),n-=s.left+parseInt(R(o,\"border-left-width\")),O=t+z.height,i=n+z.width;break}}while(o=o.parentNode);return e&&M!==window&&(e=(b=m(o||M))&&b.a,M=b&&b.d,b&&(O=(t/=M)+(r/=M),i=(n/=e)+(a/=e))),{top:t,left:n,bottom:O,right:i,width:a,height:r}}}function N(M,b,p){for(var e=x(M,!0),o=v(M)[b];e;){var z=v(e)[p];if(!(\"top\"===p||\"left\"===p?z<=o:o<=z))return e;if(e===L())break;e=x(e,!1)}return!1}function y(M,b,p,e){for(var o=0,z=0,t=M.children;z<t.length;){if(\"none\"!==t[z].style.display&&t[z]!==EM.ghost&&(e||t[z]!==EM.dragged)&&u(t[z],p.draggable,M,!1)){if(o===b)return t[z];o++}z++}return null}function B(M,b){for(var p=M.lastElementChild;p&&(p===EM.ghost||\"none\"===R(p,\"display\")||b&&!l(p,b));)p=p.previousElementSibling;return p||null}function X(M,b){var p=0;if(!M||!M.parentNode)return-1;for(;M=M.previousElementSibling;)\"TEMPLATE\"===M.nodeName.toUpperCase()||M===EM.clone||b&&!l(M,b)||p++;return p}function w(M){var b=0,p=0,e=L();if(M)do{var o=(z=m(M)).a,z=z.d}while(b+=M.scrollLeft*o,p+=M.scrollTop*z,M!==e&&(M=M.parentNode));return[b,p]}function x(M,b){if(!M||!M.getBoundingClientRect)return L();var p=M,e=!1;do{if(p.clientWidth<p.scrollWidth||p.clientHeight<p.scrollHeight){var o=R(p);if(p.clientWidth<p.scrollWidth&&(\"auto\"==o.overflowX||\"scroll\"==o.overflowX)||p.clientHeight<p.scrollHeight&&(\"auto\"==o.overflowY||\"scroll\"==o.overflowY)){if(!p.getBoundingClientRect||p===document.body)return L();if(e||b)return p;e=!0}}}while(p=p.parentNode);return L()}function T(M,b){return Math.round(M.top)===Math.round(b.top)&&Math.round(M.left)===Math.round(b.left)&&Math.round(M.height)===Math.round(b.height)&&Math.round(M.width)===Math.round(b.width)}function _(M,b){return function(){var p;f||(1===(p=arguments).length?M.call(this,p[0]):M.apply(this,p),f=setTimeout(function(){f=void 0},b))}}function k(M,b,p){M.scrollLeft+=b,M.scrollTop+=p}function S(M){var b=window.Polymer,p=window.jQuery||window.Zepto;return b&&b.dom?b.dom(M).cloneNode(!0):p?p(M).clone(!0)[0]:M.cloneNode(!0)}function C(M,b){R(M,\"position\",\"absolute\"),R(M,\"top\",b.top),R(M,\"left\",b.left),R(M,\"width\",b.width),R(M,\"height\",b.height)}function E(M){R(M,\"position\",\"\"),R(M,\"top\",\"\"),R(M,\"left\",\"\"),R(M,\"width\",\"\"),R(M,\"height\",\"\")}function D(M,b,p){var e={};return Array.from(M.children).forEach(function(o){var z;u(o,b.draggable,M,!1)&&!o.animated&&o!==p&&(z=v(o),e.left=Math.min(null!==(o=e.left)&&void 0!==o?o:1/0,z.left),e.top=Math.min(null!==(o=e.top)&&void 0!==o?o:1/0,z.top),e.right=Math.max(null!==(o=e.right)&&void 0!==o?o:-1/0,z.right),e.bottom=Math.max(null!==(o=e.bottom)&&void 0!==o?o:-1/0,z.bottom))}),e.width=e.right-e.left,e.height=e.bottom-e.top,e.x=e.left,e.y=e.top,e}var P=\"Sortable\"+(new Date).getTime();var I=[],F={initializeByDefault:!0},j={mount:function(M){for(var b in F)!F.hasOwnProperty(b)||b in M||(M[b]=F[b]);I.forEach(function(b){if(b.pluginName===M.pluginName)throw\"Sortable: Cannot mount plugin \".concat(M.pluginName,\" more than once\")}),I.push(M)},pluginEvent:function(M,p,e){var o=this;this.eventCanceled=!1,e.cancel=function(){o.eventCanceled=!0};var z=M+\"Global\";I.forEach(function(o){p[o.pluginName]&&(p[o.pluginName][z]&&p[o.pluginName][z](b({sortable:p},e)),p.options[o.pluginName]&&p[o.pluginName][M]&&p[o.pluginName][M](b({sortable:p},e)))})},initializePlugins:function(M,b,p,o){for(var z in I.forEach(function(o){var z=o.pluginName;(M.options[z]||o.initializeByDefault)&&((o=new o(M,b,M.options)).sortable=M,o.options=M.options,M[z]=o,e(p,o.defaults))}),M.options){var t;M.options.hasOwnProperty(z)&&void 0!==(t=this.modifyOption(M,z,M.options[z]))&&(M.options[z]=t)}},getEventProperties:function(M,b){var p={};return I.forEach(function(o){\"function\"==typeof o.eventProperties&&e(p,o.eventProperties.call(b[o.pluginName],M))}),p},modifyOption:function(M,b,p){var e;return I.forEach(function(o){M[o.pluginName]&&o.optionListeners&&\"function\"==typeof o.optionListeners[b]&&(e=o.optionListeners[b].call(M[o.pluginName],p))}),e}};function H(M){var p=M.sortable,e=M.rootEl,o=M.name,z=M.targetEl,t=M.cloneEl,O=M.toEl,i=M.fromEl,r=M.oldIndex,a=M.newIndex,s=M.oldDraggableIndex,A=M.newDraggableIndex,d=M.originalEvent,l=M.putSortable,q=M.extraEventProperties;if(p=p||e&&e[P]){var u,f=p.options;M=\"on\"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||c||n?(u=document.createEvent(\"Event\")).initEvent(o,!0,!0):u=new CustomEvent(o,{bubbles:!0,cancelable:!0}),u.to=O||e,u.from=i||e,u.item=z||e,u.clone=t,u.oldIndex=r,u.newIndex=a,u.oldDraggableIndex=s,u.newDraggableIndex=A,u.originalEvent=d,u.pullMode=l?l.lastPutMode:void 0;var W,h=b(b({},q),j.getEventProperties(o,p));for(W in h)u[W]=h[W];e&&e.dispatchEvent(u),f[M]&&f[M].call(p,u)}}function U(M,p){var e=(o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).evt,o=function(M,b){if(null==M)return{};var p,e=function(M,b){if(null==M)return{};for(var p,e={},o=Object.keys(M),z=0;z<o.length;z++)p=o[z],0<=b.indexOf(p)||(e[p]=M[p]);return e}(M,b);if(Object.getOwnPropertySymbols)for(var o=Object.getOwnPropertySymbols(M),z=0;z<o.length;z++)p=o[z],0<=b.indexOf(p)||Object.prototype.propertyIsEnumerable.call(M,p)&&(e[p]=M[p]);return e}(o,Y);j.pluginEvent.bind(EM)(M,p,b({dragEl:V,parentEl:$,ghostEl:K,rootEl:Q,nextEl:J,lastDownEl:Z,cloneEl:MM,cloneHidden:bM,dragStarted:AM,putSortable:cM,activeSortable:EM.active,originalEvent:e,oldIndex:pM,oldDraggableIndex:oM,newIndex:eM,newDraggableIndex:zM,hideGhostForTarget:_M,unhideGhostForTarget:kM,cloneNowHidden:function(){bM=!0},cloneNowShown:function(){bM=!1},dispatchSortableEvent:function(M){G({sortable:p,name:M,originalEvent:e})}},o))}var Y=[\"evt\"];function G(M){H(b({putSortable:cM,cloneEl:MM,targetEl:V,rootEl:Q,oldIndex:pM,oldDraggableIndex:oM,newIndex:eM,newDraggableIndex:zM},M))}var V,$,K,Q,J,Z,MM,bM,pM,eM,oM,zM,tM,cM,nM,OM,iM,rM,aM,sM,AM,dM,lM,qM,uM,fM=!1,WM=!1,hM=[],RM=!1,mM=!1,gM=[],LM=!1,vM=[],NM=\"undefined\"!=typeof document,yM=r,BM=n||c?\"cssFloat\":\"float\",XM=NM&&!a&&!r&&\"draggable\"in document.createElement(\"div\"),wM=function(){if(NM){if(c)return!1;var M=document.createElement(\"x\");return M.style.cssText=\"pointer-events:auto\",\"auto\"===M.style.pointerEvents}}(),xM=function(M,b){var p=R(M),e=parseInt(p.width)-parseInt(p.paddingLeft)-parseInt(p.paddingRight)-parseInt(p.borderLeftWidth)-parseInt(p.borderRightWidth),o=y(M,0,b),z=y(M,1,b),t=o&&R(o),c=z&&R(z),n=t&&parseInt(t.marginLeft)+parseInt(t.marginRight)+v(o).width;M=c&&parseInt(c.marginLeft)+parseInt(c.marginRight)+v(z).width;return\"flex\"===p.display?\"column\"===p.flexDirection||\"column-reverse\"===p.flexDirection?\"vertical\":\"horizontal\":\"grid\"===p.display?p.gridTemplateColumns.split(\" \").length<=1?\"vertical\":\"horizontal\":o&&t.float&&\"none\"!==t.float?(b=\"left\"===t.float?\"left\":\"right\",!z||\"both\"!==c.clear&&c.clear!==b?\"horizontal\":\"vertical\"):o&&(\"block\"===t.display||\"flex\"===t.display||\"table\"===t.display||\"grid\"===t.display||e<=n&&\"none\"===p[BM]||z&&\"none\"===p[BM]&&e<n+M)?\"vertical\":\"horizontal\"},TM=function(M){function b(M,p){return function(e,o,z,t){var c=e.options.group.name&&o.options.group.name&&e.options.group.name===o.options.group.name;return!(null!=M||!p&&!c)||null!=M&&!1!==M&&(p&&\"clone\"===M?M:\"function\"==typeof M?b(M(e,o,z,t),p)(e,o,z,t):(o=(p?e:o).options.group.name,!0===M||\"string\"==typeof M&&M===o||M.join&&-1<M.indexOf(o)))}}var e={},o=M.group;o&&\"object\"==p(o)||(o={name:o}),e.name=o.name,e.checkPull=b(o.pull,!0),e.checkPut=b(o.put),e.revertClone=o.revertClone,M.group=e},_M=function(){!wM&&K&&R(K,\"display\",\"none\")},kM=function(){!wM&&K&&R(K,\"display\",\"\")};function SM(M){if(V){M=M.touches?M.touches[0]:M;var b=(o=M.clientX,z=M.clientY,hM.some(function(M){if((e=M[P].options.emptyInsertThreshold)&&!B(M)){var b=v(M),p=o>=b.left-e&&o<=b.right+e,e=z>=b.top-e&&z<=b.bottom+e;return p&&e?t=M:void 0}}),t);if(b){var p,e={};for(p in M)M.hasOwnProperty(p)&&(e[p]=M[p]);e.target=e.rootEl=b,e.preventDefault=void 0,e.stopPropagation=void 0,b[P]._onDragOver(e)}}var o,z,t}function CM(M){V&&V.parentNode[P]._isOutsideThisEl(M.target)}function EM(M,p){if(!M||!M.nodeType||1!==M.nodeType)throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(M));this.el=M,this.options=p=e({},p),M[P]=this;var o,z,t={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(M.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return xM(M,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(M,b){M.setData(\"Text\",b.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==EM.supportPointer&&\"PointerEvent\"in window&&(!i||r),emptyInsertThreshold:5};for(o in j.initializePlugins(this,M,t),t)o in p||(p[o]=t[o]);for(z in TM(p),this)\"_\"===z.charAt(0)&&\"function\"==typeof this[z]&&(this[z]=this[z].bind(this));this.nativeDraggable=!p.forceFallback&&XM,this.nativeDraggable&&(this.options.touchStartThreshold=1),p.supportPointer?A(M,\"pointerdown\",this._onTapStart):(A(M,\"mousedown\",this._onTapStart),A(M,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(A(M,\"dragover\",this),A(M,\"dragenter\",this)),hM.push(this.el),p.store&&p.store.get&&this.sort(p.store.get(this)||[]),e(this,function(){var M,p=[];return{captureAnimationState:function(){p=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(M){var e,o;\"none\"!==R(M,\"display\")&&M!==EM.ghost&&(p.push({target:M,rect:v(M)}),e=b({},p[p.length-1].rect),!M.thisAnimationDuration||(o=m(M,!0))&&(e.top-=o.f,e.left-=o.e),M.fromRect=e)})},addAnimationState:function(M){p.push(M)},removeAnimationState:function(M){p.splice(function(M,b){for(var p in M)if(M.hasOwnProperty(p))for(var e in b)if(b.hasOwnProperty(e)&&b[e]===M[p][e])return Number(p);return-1}(p,{target:M}),1)},animateAll:function(b){var e=this;if(!this.options.animation)return clearTimeout(M),void(\"function\"==typeof b&&b());var o=!1,z=0;p.forEach(function(M){var b=0,p=M.target,t=p.fromRect,c=v(p),n=p.prevFromRect,O=p.prevToRect,i=M.rect,r=m(p,!0);r&&(c.top-=r.f,c.left-=r.e),p.toRect=c,p.thisAnimationDuration&&T(n,c)&&!T(t,c)&&(i.top-c.top)/(i.left-c.left)==(t.top-c.top)/(t.left-c.left)&&(M=i,r=n,n=O,O=e.options,b=Math.sqrt(Math.pow(r.top-M.top,2)+Math.pow(r.left-M.left,2))/Math.sqrt(Math.pow(r.top-n.top,2)+Math.pow(r.left-n.left,2))*O.animation),T(c,t)||(p.prevFromRect=t,p.prevToRect=c,b=b||e.options.animation,e.animate(p,i,c,b)),b&&(o=!0,z=Math.max(z,b),clearTimeout(p.animationResetTimer),p.animationResetTimer=setTimeout(function(){p.animationTime=0,p.prevFromRect=null,p.fromRect=null,p.prevToRect=null,p.thisAnimationDuration=null},b),p.thisAnimationDuration=b)}),clearTimeout(M),o?M=setTimeout(function(){\"function\"==typeof b&&b()},z):\"function\"==typeof b&&b(),p=[]},animate:function(M,b,p,e){var o,z;e&&(R(M,\"transition\",\"\"),R(M,\"transform\",\"\"),o=(z=m(this.el))&&z.a,z=z&&z.d,o=(b.left-p.left)/(o||1),z=(b.top-p.top)/(z||1),M.animatingX=!!o,M.animatingY=!!z,R(M,\"transform\",\"translate3d(\"+o+\"px,\"+z+\"px,0)\"),this.forRepaintDummy=M.offsetWidth,R(M,\"transition\",\"transform \"+e+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),R(M,\"transform\",\"translate3d(0,0,0)\"),\"number\"==typeof M.animated&&clearTimeout(M.animated),M.animated=setTimeout(function(){R(M,\"transition\",\"\"),R(M,\"transform\",\"\"),M.animated=!1,M.animatingX=!1,M.animatingY=!1},e))}}}())}function DM(M,b,p,e,o,z,t,O){var i,r,a=M[P],s=a.options.onMove;return!window.CustomEvent||c||n?(i=document.createEvent(\"Event\")).initEvent(\"move\",!0,!0):i=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}),i.to=b,i.from=M,i.dragged=p,i.draggedRect=e,i.related=o||b,i.relatedRect=z||v(b),i.willInsertAfter=O,i.originalEvent=t,M.dispatchEvent(i),s?s.call(a,i,t):r}function PM(M){M.draggable=!1}function IM(){LM=!1}function FM(M){return setTimeout(M,0)}function jM(M){return clearTimeout(M)}NM&&!a&&document.addEventListener(\"click\",function(M){if(WM)return M.preventDefault(),M.stopPropagation&&M.stopPropagation(),M.stopImmediatePropagation&&M.stopImmediatePropagation(),WM=!1},!0),EM.prototype={constructor:EM,_isOutsideThisEl:function(M){this.el.contains(M)||M===this.el||(dM=null)},_getDirection:function(M,b){return\"function\"==typeof this.options.direction?this.options.direction.call(this,M,b,V):this.options.direction},_onTapStart:function(M){if(M.cancelable){var b=this,p=this.el,e=this.options,o=e.preventOnFilter,z=M.type,t=M.touches&&M.touches[0]||M.pointerType&&\"touch\"===M.pointerType&&M,c=(t||M).target,n=M.target.shadowRoot&&(M.path&&M.path[0]||M.composedPath&&M.composedPath()[0])||c,O=e.filter;if(function(M){vM.length=0;for(var b=M.getElementsByTagName(\"input\"),p=b.length;p--;){var e=b[p];e.checked&&vM.push(e)}}(p),!V&&!(/mousedown|pointerdown/.test(z)&&0!==M.button||e.disabled)&&!n.isContentEditable&&(this.nativeDraggable||!i||!c||\"SELECT\"!==c.tagName.toUpperCase())&&!((c=u(c,e.draggable,p,!1))&&c.animated||Z===c)){if(pM=X(c),oM=X(c,e.draggable),\"function\"==typeof O){if(O.call(this,M,c,this))return G({sortable:b,rootEl:n,name:\"filter\",targetEl:c,toEl:p,fromEl:p}),U(\"filter\",b,{evt:M}),void(o&&M.preventDefault())}else if(O=O&&O.split(\",\").some(function(e){if(e=u(n,e.trim(),p,!1))return G({sortable:b,rootEl:e,name:\"filter\",targetEl:c,fromEl:p,toEl:p}),U(\"filter\",b,{evt:M}),!0}))return void(o&&M.preventDefault());e.handle&&!u(n,e.handle,p,!1)||this._prepareDragStart(M,t,c)}}},_prepareDragStart:function(M,b,p){var e,o=this,z=o.el,t=o.options,i=z.ownerDocument;p&&!V&&p.parentNode===z&&(e=v(p),Q=z,$=(V=p).parentNode,J=V.nextSibling,Z=p,tM=t.group,nM={target:EM.dragged=V,clientX:(b||M).clientX,clientY:(b||M).clientY},aM=nM.clientX-e.left,sM=nM.clientY-e.top,this._lastX=(b||M).clientX,this._lastY=(b||M).clientY,V.style[\"will-change\"]=\"all\",e=function(){U(\"delayEnded\",o,{evt:M}),EM.eventCanceled?o._onDrop():(o._disableDelayedDragEvents(),!O&&o.nativeDraggable&&(V.draggable=!0),o._triggerDragStart(M,b),G({sortable:o,name:\"choose\",originalEvent:M}),h(V,t.chosenClass,!0))},t.ignore.split(\",\").forEach(function(M){g(V,M.trim(),PM)}),A(i,\"dragover\",SM),A(i,\"mousemove\",SM),A(i,\"touchmove\",SM),t.supportPointer?(A(i,\"pointerup\",o._onDrop),this.nativeDraggable||A(i,\"pointercancel\",o._onDrop)):(A(i,\"mouseup\",o._onDrop),A(i,\"touchend\",o._onDrop),A(i,\"touchcancel\",o._onDrop)),O&&this.nativeDraggable&&(this.options.touchStartThreshold=4,V.draggable=!0),U(\"delayStart\",this,{evt:M}),!t.delay||t.delayOnTouchOnly&&!b||this.nativeDraggable&&(n||c)?e():EM.eventCanceled?this._onDrop():(t.supportPointer?(A(i,\"pointerup\",o._disableDelayedDrag),A(i,\"pointercancel\",o._disableDelayedDrag)):(A(i,\"mouseup\",o._disableDelayedDrag),A(i,\"touchend\",o._disableDelayedDrag),A(i,\"touchcancel\",o._disableDelayedDrag)),A(i,\"mousemove\",o._delayedDragTouchMoveHandler),A(i,\"touchmove\",o._delayedDragTouchMoveHandler),t.supportPointer&&A(i,\"pointermove\",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(e,t.delay)))},_delayedDragTouchMoveHandler:function(M){M=M.touches?M.touches[0]:M,Math.max(Math.abs(M.clientX-this._lastX),Math.abs(M.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){V&&PM(V),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var M=this.el.ownerDocument;d(M,\"mouseup\",this._disableDelayedDrag),d(M,\"touchend\",this._disableDelayedDrag),d(M,\"touchcancel\",this._disableDelayedDrag),d(M,\"pointerup\",this._disableDelayedDrag),d(M,\"pointercancel\",this._disableDelayedDrag),d(M,\"mousemove\",this._delayedDragTouchMoveHandler),d(M,\"touchmove\",this._delayedDragTouchMoveHandler),d(M,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(M,b){b=b||\"touch\"==M.pointerType&&M,!this.nativeDraggable||b?this.options.supportPointer?A(document,\"pointermove\",this._onTouchMove):A(document,b?\"touchmove\":\"mousemove\",this._onTouchMove):(A(V,\"dragend\",this),A(Q,\"dragstart\",this._onDragStart));try{document.selection?FM(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(M){}},_dragStarted:function(M,b){var p;fM=!1,Q&&V?(U(\"dragStarted\",this,{evt:b}),this.nativeDraggable&&A(document,\"dragover\",CM),p=this.options,M||h(V,p.dragClass,!1),h(V,p.ghostClass,!0),EM.active=this,M&&this._appendGhost(),G({sortable:this,name:\"start\",originalEvent:b})):this._nulling()},_emulateDragOver:function(){if(OM){this._lastX=OM.clientX,this._lastY=OM.clientY,_M();for(var M=document.elementFromPoint(OM.clientX,OM.clientY),b=M;M&&M.shadowRoot&&(M=M.shadowRoot.elementFromPoint(OM.clientX,OM.clientY))!==b;)b=M;if(V.parentNode[P]._isOutsideThisEl(M),b)do{if(b[P]&&b[P]._onDragOver({clientX:OM.clientX,clientY:OM.clientY,target:M,rootEl:b})&&!this.options.dragoverBubble)break}while(b=q(M=b));kM()}},_onTouchMove:function(M){if(nM){var b=(c=this.options).fallbackTolerance,p=c.fallbackOffset,e=M.touches?M.touches[0]:M,o=K&&m(K,!0),z=K&&o&&o.a,t=K&&o&&o.d,c=yM&&uM&&w(uM);z=(e.clientX-nM.clientX+p.x)/(z||1)+(c?c[0]-gM[0]:0)/(z||1),t=(e.clientY-nM.clientY+p.y)/(t||1)+(c?c[1]-gM[1]:0)/(t||1);if(!EM.active&&!fM){if(b&&Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))<b)return;this._onDragStart(M,!0)}K&&(o?(o.e+=z-(iM||0),o.f+=t-(rM||0)):o={a:1,b:0,c:0,d:1,e:z,f:t},o=\"matrix(\".concat(o.a,\",\").concat(o.b,\",\").concat(o.c,\",\").concat(o.d,\",\").concat(o.e,\",\").concat(o.f,\")\"),R(K,\"webkitTransform\",o),R(K,\"mozTransform\",o),R(K,\"msTransform\",o),R(K,\"transform\",o),iM=z,rM=t,OM=e),M.cancelable&&M.preventDefault()}},_appendGhost:function(){if(!K){var M=this.options.fallbackOnBody?document.body:Q,b=v(V,!0,yM,!0,M),p=this.options;if(yM){for(uM=M;\"static\"===R(uM,\"position\")&&\"none\"===R(uM,\"transform\")&&uM!==document;)uM=uM.parentNode;uM!==document.body&&uM!==document.documentElement?(uM===document&&(uM=L()),b.top+=uM.scrollTop,b.left+=uM.scrollLeft):uM=L(),gM=w(uM)}h(K=V.cloneNode(!0),p.ghostClass,!1),h(K,p.fallbackClass,!0),h(K,p.dragClass,!0),R(K,\"transition\",\"\"),R(K,\"transform\",\"\"),R(K,\"box-sizing\",\"border-box\"),R(K,\"margin\",0),R(K,\"top\",b.top),R(K,\"left\",b.left),R(K,\"width\",b.width),R(K,\"height\",b.height),R(K,\"opacity\",\"0.8\"),R(K,\"position\",yM?\"absolute\":\"fixed\"),R(K,\"zIndex\",\"100000\"),R(K,\"pointerEvents\",\"none\"),EM.ghost=K,M.appendChild(K),R(K,\"transform-origin\",aM/parseInt(K.style.width)*100+\"% \"+sM/parseInt(K.style.height)*100+\"%\")}},_onDragStart:function(M,b){var p=this,e=M.dataTransfer,o=p.options;U(\"dragStart\",this,{evt:M}),EM.eventCanceled?this._onDrop():(U(\"setupClone\",this),EM.eventCanceled||((MM=S(V)).removeAttribute(\"id\"),MM.draggable=!1,MM.style[\"will-change\"]=\"\",this._hideClone(),h(MM,this.options.chosenClass,!1),EM.clone=MM),p.cloneId=FM(function(){U(\"clone\",p),EM.eventCanceled||(p.options.removeCloneOnHide||Q.insertBefore(MM,V),p._hideClone(),G({sortable:p,name:\"clone\"}))}),b||h(V,o.dragClass,!0),b?(WM=!0,p._loopId=setInterval(p._emulateDragOver,50)):(d(document,\"mouseup\",p._onDrop),d(document,\"touchend\",p._onDrop),d(document,\"touchcancel\",p._onDrop),e&&(e.effectAllowed=\"move\",o.setData&&o.setData.call(p,e,V)),A(document,\"drop\",p),R(V,\"transform\",\"translateZ(0)\")),fM=!0,p._dragStartId=FM(p._dragStarted.bind(p,b,M)),A(document,\"selectstart\",p),AM=!0,window.getSelection().removeAllRanges(),i&&R(document.body,\"user-select\",\"none\"))},_onDragOver:function(M){var p,e,o,z,t,c=this.el,n=M.target,O=this.options,i=O.group,r=EM.active,a=tM===i,s=O.sort,A=cM||r,d=this,l=!1;if(!LM){if(void 0!==M.preventDefault&&M.cancelable&&M.preventDefault(),n=u(n,O.draggable,c,!0),E(\"dragOver\"),EM.eventCanceled)return l;if(V.contains(M.target)||n.animated&&n.animatingX&&n.animatingY||d._ignoreWhileAnimating===n)return F(!1);if(WM=!1,r&&!O.disabled&&(a?s||(e=$!==Q):cM===this||(this.lastPutMode=tM.checkPull(this,r,V,M))&&i.checkPut(this,r,V,M))){if(o=\"vertical\"===this._getDirection(M,n),p=v(V),E(\"dragOverValid\"),EM.eventCanceled)return l;if(e)return $=Q,I(),this._hideClone(),E(\"revert\"),EM.eventCanceled||(J?Q.insertBefore(V,J):Q.appendChild(V)),F(!0);var q=B(c,O.draggable);if(q&&(w=M,i=o,C=v(B((L=this).el,L.options.draggable)),L=D(L.el,L.options,K),!(i?w.clientX>L.right+10||w.clientY>C.bottom&&w.clientX>C.left:w.clientY>L.bottom+10||w.clientX>C.right&&w.clientY>C.top)||q.animated)){if(q&&(z=M,t=o,T=v(y((x=this).el,0,x.options,!0)),x=D(x.el,x.options,K),t?z.clientX<x.left-10||z.clientY<T.top&&z.clientX<T.right:z.clientY<x.top-10||z.clientY<T.bottom&&z.clientX<T.left)){if((_=y(c,0,O,!0))===V)return F(!1);if(g=v(n=_),!1!==DM(Q,c,V,p,n,g,M,!1))return I(),c.insertBefore(V,_),$=c,j(),F(!0)}else if(n.parentNode===c){var f,W,m,g=v(n),L=V.parentNode!==c,w=(w=V.animated&&V.toRect||p,C=n.animated&&n.toRect||g,x=(t=o)?w.left:w.top,z=t?w.right:w.bottom,T=t?w.width:w.height,_=t?C.left:C.top,w=t?C.right:C.bottom,C=t?C.width:C.height,!(x===_||z===w||x+T/2===_+C/2)),x=o?\"top\":\"left\",T=N(n,\"top\",\"top\")||N(V,\"top\",\"top\"),_=T?T.scrollTop:void 0;if(dM!==n&&(W=g[x],RM=!1,mM=!w&&O.invertSwap||L),0!==(f=function(M,b,p,e,o,z,t,c){var n=e?M.clientY:M.clientX,O=e?p.height:p.width;M=e?p.top:p.left,e=e?p.bottom:p.right,p=!1;if(!t)if(c&&qM<O*o){if(RM=!RM&&(1===lM?M+O*z/2<n:n<e-O*z/2)||RM)p=!0;else if(1===lM?n<M+qM:e-qM<n)return-lM}else if(M+O*(1-o)/2<n&&n<e-O*(1-o)/2)return function(M){return X(V)<X(M)?1:-1}(b);return(p=p||t)&&(n<M+O*z/2||e-O*z/2<n)?M+O/2<n?1:-1:0}(M,n,g,o,w?1:O.swapThreshold,null==O.invertedSwapThreshold?O.swapThreshold:O.invertedSwapThreshold,mM,dM===n)))for(var S=X(V);(m=$.children[S-=f])&&(\"none\"===R(m,\"display\")||m===K););if(0===f||m===n)return F(!1);lM=f;var C=(dM=n).nextElementSibling;L=!1;if(!1!==(w=DM(Q,c,V,p,n,g,M,L=1===f)))return 1!==w&&-1!==w||(L=1===w),LM=!0,setTimeout(IM,30),I(),L&&!C?c.appendChild(V):n.parentNode.insertBefore(V,L?C:n),T&&k(T,0,_-T.scrollTop),$=V.parentNode,void 0===W||mM||(qM=Math.abs(W-v(n)[x])),j(),F(!0)}}else{if(q===V)return F(!1);if((n=q&&c===M.target?q:n)&&(g=v(n)),!1!==DM(Q,c,V,p,n,g,M,!!n))return I(),q&&q.nextSibling?c.insertBefore(V,q.nextSibling):c.appendChild(V),$=c,j(),F(!0)}if(c.contains(V))return F(!1)}return!1}function E(z,t){U(z,d,b({evt:M,isOwner:a,axis:o?\"vertical\":\"horizontal\",revert:e,dragRect:p,targetRect:g,canSort:s,fromSortable:A,target:n,completed:F,onMove:function(b,e){return DM(Q,c,V,p,b,v(b),M,e)},changed:j},t))}function I(){E(\"dragOverAnimationCapture\"),d.captureAnimationState(),d!==A&&A.captureAnimationState()}function F(b){return E(\"dragOverCompleted\",{insertion:b}),b&&(a?r._hideClone():r._showClone(d),d!==A&&(h(V,(cM||r).options.ghostClass,!1),h(V,O.ghostClass,!0)),cM!==d&&d!==EM.active?cM=d:d===EM.active&&cM&&(cM=null),A===d&&(d._ignoreWhileAnimating=n),d.animateAll(function(){E(\"dragOverAnimationComplete\"),d._ignoreWhileAnimating=null}),d!==A&&(A.animateAll(),A._ignoreWhileAnimating=null)),(n===V&&!V.animated||n===c&&!n.animated)&&(dM=null),O.dragoverBubble||M.rootEl||n===document||(V.parentNode[P]._isOutsideThisEl(M.target),b||SM(M)),!O.dragoverBubble&&M.stopPropagation&&M.stopPropagation(),l=!0}function j(){eM=X(V),zM=X(V,O.draggable),G({sortable:d,name:\"change\",toEl:c,newIndex:eM,newDraggableIndex:zM,originalEvent:M})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){d(document,\"mousemove\",this._onTouchMove),d(document,\"touchmove\",this._onTouchMove),d(document,\"pointermove\",this._onTouchMove),d(document,\"dragover\",SM),d(document,\"mousemove\",SM),d(document,\"touchmove\",SM)},_offUpEvents:function(){var M=this.el.ownerDocument;d(M,\"mouseup\",this._onDrop),d(M,\"touchend\",this._onDrop),d(M,\"pointerup\",this._onDrop),d(M,\"pointercancel\",this._onDrop),d(M,\"touchcancel\",this._onDrop),d(document,\"selectstart\",this)},_onDrop:function(M){var b=this.el,p=this.options;eM=X(V),zM=X(V,p.draggable),U(\"drop\",this,{evt:M}),$=V&&V.parentNode,eM=X(V),zM=X(V,p.draggable),EM.eventCanceled||(RM=mM=fM=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),jM(this.cloneId),jM(this._dragStartId),this.nativeDraggable&&(d(document,\"drop\",this),d(b,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),i&&R(document.body,\"user-select\",\"\"),R(V,\"transform\",\"\"),M&&(AM&&(M.cancelable&&M.preventDefault(),p.dropBubble||M.stopPropagation()),K&&K.parentNode&&K.parentNode.removeChild(K),(Q===$||cM&&\"clone\"!==cM.lastPutMode)&&MM&&MM.parentNode&&MM.parentNode.removeChild(MM),V&&(this.nativeDraggable&&d(V,\"dragend\",this),PM(V),V.style[\"will-change\"]=\"\",AM&&!fM&&h(V,(cM||this).options.ghostClass,!1),h(V,this.options.chosenClass,!1),G({sortable:this,name:\"unchoose\",toEl:$,newIndex:null,newDraggableIndex:null,originalEvent:M}),Q!==$?(0<=eM&&(G({rootEl:$,name:\"add\",toEl:$,fromEl:Q,originalEvent:M}),G({sortable:this,name:\"remove\",toEl:$,originalEvent:M}),G({rootEl:$,name:\"sort\",toEl:$,fromEl:Q,originalEvent:M}),G({sortable:this,name:\"sort\",toEl:$,originalEvent:M})),cM&&cM.save()):eM!==pM&&0<=eM&&(G({sortable:this,name:\"update\",toEl:$,originalEvent:M}),G({sortable:this,name:\"sort\",toEl:$,originalEvent:M})),EM.active&&(null!=eM&&-1!==eM||(eM=pM,zM=oM),G({sortable:this,name:\"end\",toEl:$,originalEvent:M}),this.save())))),this._nulling()},_nulling:function(){U(\"nulling\",this),Q=V=$=K=J=MM=Z=bM=nM=OM=AM=eM=zM=pM=oM=dM=lM=cM=tM=EM.dragged=EM.ghost=EM.clone=EM.active=null,vM.forEach(function(M){M.checked=!0}),vM.length=iM=rM=0},handleEvent:function(M){switch(M.type){case\"drop\":case\"dragend\":this._onDrop(M);break;case\"dragenter\":case\"dragover\":V&&(this._onDragOver(M),function(M){M.dataTransfer&&(M.dataTransfer.dropEffect=\"move\"),M.cancelable&&M.preventDefault()}(M));break;case\"selectstart\":M.preventDefault()}},toArray:function(){for(var M,b=[],p=this.el.children,e=0,o=p.length,z=this.options;e<o;e++)u(M=p[e],z.draggable,this.el,!1)&&b.push(M.getAttribute(z.dataIdAttr)||function(M){for(var b=M.tagName+M.className+M.src+M.href+M.textContent,p=b.length,e=0;p--;)e+=b.charCodeAt(p);return e.toString(36)}(M));return b},sort:function(M,b){var p={},e=this.el;this.toArray().forEach(function(M,b){u(b=e.children[b],this.options.draggable,e,!1)&&(p[M]=b)},this),b&&this.captureAnimationState(),M.forEach(function(M){p[M]&&(e.removeChild(p[M]),e.appendChild(p[M]))}),b&&this.animateAll()},save:function(){var M=this.options.store;M&&M.set&&M.set(this)},closest:function(M,b){return u(M,b||this.options.draggable,this.el,!1)},option:function(M,b){var p=this.options;if(void 0===b)return p[M];var e=j.modifyOption(this,M,b);p[M]=void 0!==e?e:b,\"group\"===M&&TM(p)},destroy:function(){U(\"destroy\",this);var M=this.el;M[P]=null,d(M,\"mousedown\",this._onTapStart),d(M,\"touchstart\",this._onTapStart),d(M,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(d(M,\"dragover\",this),d(M,\"dragenter\",this)),Array.prototype.forEach.call(M.querySelectorAll(\"[draggable]\"),function(M){M.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),hM.splice(hM.indexOf(this.el),1),this.el=M=null},_hideClone:function(){bM||(U(\"hideClone\",this),EM.eventCanceled||(R(MM,\"display\",\"none\"),this.options.removeCloneOnHide&&MM.parentNode&&MM.parentNode.removeChild(MM),bM=!0))},_showClone:function(M){\"clone\"===M.lastPutMode?bM&&(U(\"showClone\",this),EM.eventCanceled||(V.parentNode!=Q||this.options.group.revertClone?J?Q.insertBefore(MM,J):Q.appendChild(MM):Q.insertBefore(MM,V),this.options.group.revertClone&&this.animate(V,MM),R(MM,\"display\",\"\"),bM=!1)):this._hideClone()}},NM&&A(document,\"touchmove\",function(M){(EM.active||fM)&&M.cancelable&&M.preventDefault()}),EM.utils={on:A,off:d,css:R,find:g,is:function(M,b){return!!u(M,b,M,!1)},extend:function(M,b){if(M&&b)for(var p in b)b.hasOwnProperty(p)&&(M[p]=b[p]);return M},throttle:_,closest:u,toggleClass:h,clone:S,index:X,nextTick:FM,cancelNextTick:jM,detectDirection:xM,getChild:y,expando:P},EM.get=function(M){return M[P]},EM.mount=function(){for(var M=arguments.length,p=new Array(M),e=0;e<M;e++)p[e]=arguments[e];(p=p[0].constructor===Array?p[0]:p).forEach(function(M){if(!M.prototype||!M.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(M));M.utils&&(EM.utils=b(b({},EM.utils),M.utils)),j.mount(M)})},EM.create=function(M,b){return new EM(M,b)};var HM,UM,YM,GM,VM,$M,KM=[],QM=!(EM.version=\"1.15.6\");function JM(){KM.forEach(function(M){clearInterval(M.pid)}),KM=[]}function ZM(){clearInterval($M)}var Mb,bb=_(function(M,b,p,e){if(b.scroll){var o,z=(M.touches?M.touches[0]:M).clientX,t=(M.touches?M.touches[0]:M).clientY,c=b.scrollSensitivity,n=b.scrollSpeed,O=L(),i=!1;UM!==p&&(UM=p,JM(),HM=b.scroll,o=b.scrollFn,!0===HM&&(HM=x(p,!0)));var r=0,a=HM;do{var s=a,A=(y=v(s)).top,d=y.bottom,l=y.left,q=y.right,u=y.width,f=y.height,W=void 0,h=s.scrollWidth,m=s.scrollHeight,g=R(s),N=s.scrollLeft,y=s.scrollTop,B=s===O?(W=u<h&&(\"auto\"===g.overflowX||\"scroll\"===g.overflowX||\"visible\"===g.overflowX),f<m&&(\"auto\"===g.overflowY||\"scroll\"===g.overflowY||\"visible\"===g.overflowY)):(W=u<h&&(\"auto\"===g.overflowX||\"scroll\"===g.overflowX),f<m&&(\"auto\"===g.overflowY||\"scroll\"===g.overflowY));N=W&&(Math.abs(q-z)<=c&&N+u<h)-(Math.abs(l-z)<=c&&!!N),y=B&&(Math.abs(d-t)<=c&&y+f<m)-(Math.abs(A-t)<=c&&!!y);if(!KM[r])for(var X=0;X<=r;X++)KM[X]||(KM[X]={});KM[r].vx==N&&KM[r].vy==y&&KM[r].el===s||(KM[r].el=s,KM[r].vx=N,KM[r].vy=y,clearInterval(KM[r].pid),0==N&&0==y||(i=!0,KM[r].pid=setInterval(function(){e&&0===this.layer&&EM.active._onTouchMove(VM);var b=KM[this.layer].vy?KM[this.layer].vy*n:0,p=KM[this.layer].vx?KM[this.layer].vx*n:0;\"function\"==typeof o&&\"continue\"!==o.call(EM.dragged.parentNode[P],p,b,M,VM,KM[this.layer].el)||k(KM[this.layer].el,p,b)}.bind({layer:r}),24))),r++}while(b.bubbleScroll&&a!==O&&(a=x(a,!1)));QM=i}},30);a=function(M){var b=M.originalEvent,p=M.putSortable,e=M.dragEl,o=M.activeSortable,z=M.dispatchSortableEvent,t=M.hideGhostForTarget;M=M.unhideGhostForTarget;b&&(o=p||o,t(),b=b.changedTouches&&b.changedTouches.length?b.changedTouches[0]:b,b=document.elementFromPoint(b.clientX,b.clientY),M(),o&&!o.el.contains(b)&&(z(\"spill\"),this.onSpill({dragEl:e,putSortable:p})))};function pb(){}function eb(){}pb.prototype={startIndex:null,dragStart:function(M){M=M.oldDraggableIndex,this.startIndex=M},onSpill:function(M){var b=M.dragEl,p=M.putSortable;this.sortable.captureAnimationState(),p&&p.captureAnimationState(),(M=y(this.sortable.el,this.startIndex,this.options))?this.sortable.el.insertBefore(b,M):this.sortable.el.appendChild(b),this.sortable.animateAll(),p&&p.animateAll()},drop:a},e(pb,{pluginName:\"revertOnSpill\"}),eb.prototype={onSpill:function(M){var b=M.dragEl;(M=M.putSortable||this.sortable).captureAnimationState(),b.parentNode&&b.parentNode.removeChild(b),M.animateAll()},drop:a},e(eb,{pluginName:\"removeOnSpill\"});var ob,zb,tb,cb,nb,Ob=[],ib=[],rb=!1,ab=!1,sb=!1;function Ab(M,b){ib.forEach(function(p,e){(e=b.children[p.sortableIndex+(M?Number(e):0)])?b.insertBefore(p,e):b.appendChild(p)})}function db(){Ob.forEach(function(M){M!==tb&&M.parentNode&&M.parentNode.removeChild(M)})}return EM.mount(new function(){function M(){for(var M in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)\"_\"===M.charAt(0)&&\"function\"==typeof this[M]&&(this[M]=this[M].bind(this))}return M.prototype={dragStarted:function(M){M=M.originalEvent,this.sortable.nativeDraggable?A(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?A(document,\"pointermove\",this._handleFallbackAutoScroll):M.touches?A(document,\"touchmove\",this._handleFallbackAutoScroll):A(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(M){M=M.originalEvent,this.options.dragOverBubble||M.rootEl||this._handleAutoScroll(M)},drop:function(){this.sortable.nativeDraggable?d(document,\"dragover\",this._handleAutoScroll):(d(document,\"pointermove\",this._handleFallbackAutoScroll),d(document,\"touchmove\",this._handleFallbackAutoScroll),d(document,\"mousemove\",this._handleFallbackAutoScroll)),ZM(),JM(),clearTimeout(f),f=void 0},nulling:function(){VM=UM=HM=QM=$M=YM=GM=null,KM.length=0},_handleFallbackAutoScroll:function(M){this._handleAutoScroll(M,!0)},_handleAutoScroll:function(M,b){var p,e=this,o=(M.touches?M.touches[0]:M).clientX,z=(M.touches?M.touches[0]:M).clientY,t=document.elementFromPoint(o,z);VM=M,b||this.options.forceAutoScrollFallback||n||c||i?(bb(M,this.options,t,b),p=x(t,!0),!QM||$M&&o===YM&&z===GM||($M&&ZM(),$M=setInterval(function(){var t=x(document.elementFromPoint(o,z),!0);t!==p&&(p=t,JM()),bb(M,e.options,t,b)},10),YM=o,GM=z)):this.options.bubbleScroll&&x(t,!0)!==L()?bb(M,this.options,x(t,!1),!1):JM()}},e(M,{pluginName:\"scroll\",initializeByDefault:!0})}),EM.mount(eb,pb),EM.mount(new function(){function M(){this.defaults={swapClass:\"sortable-swap-highlight\"}}return M.prototype={dragStart:function(M){M=M.dragEl,Mb=M},dragOverValid:function(M){var b=M.completed,p=M.target,e=M.onMove,o=M.activeSortable,z=M.changed,t=M.cancel;o.options.swap&&(M=this.sortable.el,o=this.options,p&&p!==M&&(M=Mb,Mb=!1!==e(p)?(h(p,o.swapClass,!0),p):null,M&&M!==Mb&&h(M,o.swapClass,!1)),z(),b(!0),t())},drop:function(M){var b,p,e=M.activeSortable,o=M.putSortable,z=M.dragEl,t=o||this.sortable,c=this.options;Mb&&h(Mb,c.swapClass,!1),Mb&&(c.swap||o&&o.options.swap)&&z!==Mb&&(t.captureAnimationState(),t!==e&&e.captureAnimationState(),p=Mb,M=(b=z).parentNode,c=p.parentNode,M&&c&&!M.isEqualNode(p)&&!c.isEqualNode(b)&&(o=X(b),z=X(p),M.isEqualNode(c)&&o<z&&z++,M.insertBefore(p,M.children[o]),c.insertBefore(b,c.children[z])),t.animateAll(),t!==e&&e.animateAll())},nulling:function(){Mb=null}},e(M,{pluginName:\"swap\",eventProperties:function(){return{swapItem:Mb}}})}),EM.mount(new function(){function M(M){for(var b in this)\"_\"===b.charAt(0)&&\"function\"==typeof this[b]&&(this[b]=this[b].bind(this));M.options.avoidImplicitDeselect||(M.options.supportPointer?A(document,\"pointerup\",this._deselectMultiDrag):(A(document,\"mouseup\",this._deselectMultiDrag),A(document,\"touchend\",this._deselectMultiDrag))),A(document,\"keydown\",this._checkKeyDown),A(document,\"keyup\",this._checkKeyUp),this.defaults={selectedClass:\"sortable-selected\",multiDragKey:null,avoidImplicitDeselect:!1,setData:function(b,p){var e=\"\";Ob.length&&zb===M?Ob.forEach(function(M,b){e+=(b?\", \":\"\")+M.textContent}):e=p.textContent,b.setData(\"Text\",e)}}}return M.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal:function(M){M=M.dragEl,tb=M},delayEnded:function(){this.isMultiDrag=~Ob.indexOf(tb)},setupClone:function(M){var b=M.sortable;M=M.cancel;if(this.isMultiDrag){for(var p=0;p<Ob.length;p++)ib.push(S(Ob[p])),ib[p].sortableIndex=Ob[p].sortableIndex,ib[p].draggable=!1,ib[p].style[\"will-change\"]=\"\",h(ib[p],this.options.selectedClass,!1),Ob[p]===tb&&h(ib[p],this.options.chosenClass,!1);b._hideClone(),M()}},clone:function(M){var b=M.sortable,p=M.rootEl,e=M.dispatchSortableEvent;M=M.cancel;this.isMultiDrag&&(this.options.removeCloneOnHide||Ob.length&&zb===b&&(Ab(!0,p),e(\"clone\"),M()))},showClone:function(M){var b=M.cloneNowShown,p=M.rootEl;M=M.cancel;this.isMultiDrag&&(Ab(!1,p),ib.forEach(function(M){R(M,\"display\",\"\")}),b(),nb=!1,M())},hideClone:function(M){var b=this,p=(M.sortable,M.cloneNowHidden);M=M.cancel;this.isMultiDrag&&(ib.forEach(function(M){R(M,\"display\",\"none\"),b.options.removeCloneOnHide&&M.parentNode&&M.parentNode.removeChild(M)}),p(),nb=!0,M())},dragStartGlobal:function(M){M.sortable,!this.isMultiDrag&&zb&&zb.multiDrag._deselectMultiDrag(),Ob.forEach(function(M){M.sortableIndex=X(M)}),Ob=Ob.sort(function(M,b){return M.sortableIndex-b.sortableIndex}),sb=!0},dragStarted:function(M){var b,p=this;M=M.sortable;this.isMultiDrag&&(this.options.sort&&(M.captureAnimationState(),this.options.animation&&(Ob.forEach(function(M){M!==tb&&R(M,\"position\",\"absolute\")}),b=v(tb,!1,!0,!0),Ob.forEach(function(M){M!==tb&&C(M,b)}),rb=ab=!0)),M.animateAll(function(){rb=ab=!1,p.options.animation&&Ob.forEach(function(M){E(M)}),p.options.sort&&db()}))},dragOver:function(M){var b=M.target,p=M.completed;M=M.cancel;ab&&~Ob.indexOf(b)&&(p(!1),M())},revert:function(M){var b,p,e=M.fromSortable,o=M.rootEl,z=M.sortable,t=M.dragRect;1<Ob.length&&(Ob.forEach(function(M){z.addAnimationState({target:M,rect:ab?v(M):t}),E(M),M.fromRect=t,e.removeAnimationState(M)}),ab=!1,b=!this.options.removeCloneOnHide,p=o,Ob.forEach(function(M,e){(e=p.children[M.sortableIndex+(b?Number(e):0)])?p.insertBefore(M,e):p.appendChild(M)}))},dragOverCompleted:function(M){var b,p=M.sortable,e=M.isOwner,o=M.insertion,z=M.activeSortable,t=M.parentEl,c=M.putSortable;M=this.options;o&&(e&&z._hideClone(),rb=!1,M.animation&&1<Ob.length&&(ab||!e&&!z.options.sort&&!c)&&(b=v(tb,!1,!0,!0),Ob.forEach(function(M){M!==tb&&(C(M,b),t.appendChild(M))}),ab=!0),e||(ab||db(),1<Ob.length?(e=nb,z._showClone(p),z.options.animation&&!nb&&e&&ib.forEach(function(M){z.addAnimationState({target:M,rect:cb}),M.fromRect=cb,M.thisAnimationDuration=null})):z._showClone(p)))},dragOverAnimationCapture:function(M){var b=M.dragRect,p=M.isOwner;M=M.activeSortable;Ob.forEach(function(M){M.thisAnimationDuration=null}),M.options.animation&&!p&&M.multiDrag.isMultiDrag&&(cb=e({},b),b=m(tb,!0),cb.top-=b.f,cb.left-=b.e)},dragOverAnimationComplete:function(){ab&&(ab=!1,db())},drop:function(M){var b,p,e,o,z,t,c,n=M.originalEvent,O=M.rootEl,i=M.parentEl,r=M.sortable,a=M.dispatchSortableEvent,s=M.oldIndex,A=(M=M.putSortable)||this.sortable;n&&(b=this.options,p=i.children,sb||(b.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),h(tb,b.selectedClass,!~Ob.indexOf(tb)),~Ob.indexOf(tb)?(Ob.splice(Ob.indexOf(tb),1),ob=null,H({sortable:r,rootEl:O,name:\"deselect\",targetEl:tb,originalEvent:n})):(Ob.push(tb),H({sortable:r,rootEl:O,name:\"select\",targetEl:tb,originalEvent:n}),n.shiftKey&&ob&&r.el.contains(ob)?(e=X(ob),o=X(tb),~e&&~o&&e!==o&&function(){for(var M,z=e<o?(M=e,o):(M=o,e+1),t=b.filter;M<z;M++)~Ob.indexOf(p[M])||u(p[M],b.draggable,i,!1)&&(t&&(\"function\"==typeof t?t.call(r,n,p[M],r):t.split(\",\").some(function(b){return u(p[M],b.trim(),i,!1)}))||(h(p[M],b.selectedClass,!0),Ob.push(p[M]),H({sortable:r,rootEl:O,name:\"select\",targetEl:p[M],originalEvent:n})))}()):ob=tb,zb=A)),sb&&this.isMultiDrag&&(ab=!1,(i[P].options.sort||i!==O)&&1<Ob.length&&(z=v(tb),t=X(tb,\":not(.\"+this.options.selectedClass+\")\"),!rb&&b.animation&&(tb.thisAnimationDuration=null),A.captureAnimationState(),rb||(b.animation&&(tb.fromRect=z,Ob.forEach(function(M){var b;M.thisAnimationDuration=null,M!==tb&&(b=ab?v(M):z,M.fromRect=b,A.addAnimationState({target:M,rect:b}))})),db(),Ob.forEach(function(M){p[t]?i.insertBefore(M,p[t]):i.appendChild(M),t++}),s===X(tb)&&(c=!1,Ob.forEach(function(M){M.sortableIndex!==X(M)&&(c=!0)}),c&&(a(\"update\"),a(\"sort\")))),Ob.forEach(function(M){E(M)}),A.animateAll()),zb=A),(O===i||M&&\"clone\"!==M.lastPutMode)&&ib.forEach(function(M){M.parentNode&&M.parentNode.removeChild(M)}))},nullingGlobal:function(){this.isMultiDrag=sb=!1,ib.length=0},destroyGlobal:function(){this._deselectMultiDrag(),d(document,\"pointerup\",this._deselectMultiDrag),d(document,\"mouseup\",this._deselectMultiDrag),d(document,\"touchend\",this._deselectMultiDrag),d(document,\"keydown\",this._checkKeyDown),d(document,\"keyup\",this._checkKeyUp)},_deselectMultiDrag:function(M){if(!(void 0!==sb&&sb||zb!==this.sortable||M&&u(M.target,this.options.draggable,this.sortable.el,!1)||M&&0!==M.button))for(;Ob.length;){var b=Ob[0];h(b,this.options.selectedClass,!1),Ob.shift(),H({sortable:this.sortable,rootEl:this.sortable.el,name:\"deselect\",targetEl:b,originalEvent:M})}},_checkKeyDown:function(M){M.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(M){M.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},e(M,{pluginName:\"multiDrag\",utils:{select:function(M){var b=M.parentNode[P];b&&b.options.multiDrag&&!~Ob.indexOf(M)&&(zb&&zb!==b&&(zb.multiDrag._deselectMultiDrag(),zb=b),h(M,b.options.selectedClass,!0),Ob.push(M))},deselect:function(M){var b=M.parentNode[P],p=Ob.indexOf(M);b&&b.options.multiDrag&&~p&&(h(M,b.options.selectedClass,!1),Ob.splice(p,1))}},eventProperties:function(){var M=this,b=[],p=[];return Ob.forEach(function(e){var o;b.push({multiDragElement:e,index:e.sortableIndex}),o=ab&&e!==tb?-1:ab?X(e,\":not(.\"+M.options.selectedClass+\")\"):X(e),p.push({multiDragElement:e,index:o})}),{items:o(Ob),clones:[].concat(ib),oldIndicies:b,newIndicies:p}},optionListeners:{multiDragKey:function(M){return\"ctrl\"===(M=M.toLowerCase())?M=\"Control\":1<M.length&&(M=M.charAt(0).toUpperCase()+M.substr(1)),M}}})}),EM}),function(){var M=null;window.PR_SHOULD_USE_CONTINUATION=!0,function(){function b(M,b,p,e){b&&(p(M={a:b,e:M}),e.push.apply(e,M.g))}function p(M){for(var b=void 0,p=M.firstChild;p;p=p.nextSibling){var e=p.nodeType;b=1===e?b?M:p:3===e&&f.test(p.nodeValue)?M:b}return b===M?void 0:b}function e(p,e){var o,z={};!function(){for(var b=p.concat(e),t=[],c={},n=0,O=b.length;n<O;++n){var i=b[n],r=i[3];if(r)for(var a=r.length;--a>=0;)z[r.charAt(a)]=i;r=\"\"+(i=i[1]),c.hasOwnProperty(r)||(t.push(i),c[r]=M)}t.push(/[\\S\\s]/),o=function(M){function b(M){var b=M.charCodeAt(0);if(92!==b)return b;var p=M.charAt(1);return(b=r[p])?b:\"0\"<=p&&p<=\"7\"?parseInt(M.substring(1),8):\"u\"===p||\"x\"===p?parseInt(M.substring(2),16):M.charCodeAt(1)}function p(M){return M<32?(M<16?\"\\\\x0\":\"\\\\x\")+M.toString(16):\"\\\\\"===(M=String.fromCharCode(M))||\"-\"===M||\"]\"===M||\"^\"===M?\"\\\\\"+M:M}function e(M){var e=M.substring(1,M.length-1).match(/\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\S\\s]|[^\\\\]/g),o=(M=[],[\"[\"]);(z=\"^\"===e[0])&&o.push(\"^\");for(var z=z?1:0,t=e.length;z<t;++z){var c,n=e[z];if(/\\\\[bdsw]/i.test(n))o.push(n);else n=b(n),z+2<t&&\"-\"===e[z+1]?(c=b(e[z+2]),z+=2):c=n,M.push([n,c]),c<65||n>122||(c<65||n>90||M.push([32|Math.max(65,n),32|Math.min(c,90)]),c<97||n>122||M.push([-33&Math.max(97,n),-33&Math.min(c,122)]))}for(M.sort(function(M,b){return M[0]-b[0]||b[1]-M[1]}),e=[],t=[],z=0;z<M.length;++z)(n=M[z])[0]<=t[1]+1?t[1]=Math.max(t[1],n[1]):e.push(t=n);for(z=0;z<e.length;++z)n=e[z],o.push(p(n[0])),n[1]>n[0]&&(n[1]+1>n[0]&&o.push(\"-\"),o.push(p(n[1])));return o.push(\"]\"),o.join(\"\")}function o(M){for(var b=M.source.match(/\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*]|\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\\\d+|\\\\[^\\dux]|\\(\\?[!:=]|[()^]|[^()[\\\\^]+/g),o=b.length,c=[],n=0,O=0;n<o;++n){var i=b[n];\"(\"===i?++O:\"\\\\\"===i.charAt(0)&&(i=+i.substring(1))&&(i<=O?c[i]=-1:b[n]=p(i))}for(n=1;n<c.length;++n)-1===c[n]&&(c[n]=++z);for(O=n=0;n<o;++n)\"(\"===(i=b[n])?c[++O]||(b[n]=\"(?:\"):\"\\\\\"===i.charAt(0)&&(i=+i.substring(1))&&i<=O&&(b[n]=\"\\\\\"+c[i]);for(n=0;n<o;++n)\"^\"===b[n]&&\"^\"!==b[n+1]&&(b[n]=\"\");if(M.ignoreCase&&t)for(n=0;n<o;++n)M=(i=b[n]).charAt(0),i.length>=2&&\"[\"===M?b[n]=e(i):\"\\\\\"!==M&&(b[n]=i.replace(/[A-Za-z]/g,function(M){return M=M.charCodeAt(0),\"[\"+String.fromCharCode(-33&M,32|M)+\"]\"}));return b.join(\"\")}for(var z=0,t=!1,c=!1,n=0,O=M.length;n<O;++n){var i=M[n];if(i.ignoreCase)c=!0;else if(/[a-z]/i.test(i.source.replace(/\\\\u[\\da-f]{4}|\\\\x[\\da-f]{2}|\\\\[^UXux]/gi,\"\"))){t=!0,c=!1;break}}var r={b:8,t:9,n:10,v:11,f:12,r:13},a=[];for(n=0,O=M.length;n<O;++n){if((i=M[n]).global||i.multiline)throw Error(\"\"+i);a.push(\"(?:\"+o(i)+\")\")}return RegExp(a.join(\"|\"),c?\"gi\":\"g\")}(t)}();var t=e.length;return function M(p){for(var n=p.e,O=[n,\"pln\"],i=0,r=p.a.match(o)||[],a={},s=0,A=r.length;s<A;++s){var d,l=r[s],q=a[l],u=void 0;if(\"string\"==typeof q)d=!1;else{var f=z[l.charAt(0)];if(f)u=l.match(f[1]),q=f[0];else{for(d=0;d<t;++d)if(f=e[d],u=l.match(f[1])){q=f[0];break}u||(q=\"pln\")}!(d=q.length>=5&&\"lang-\"===q.substring(0,5))||u&&\"string\"==typeof u[1]||(d=!1,q=\"src\"),d||(a[l]=q)}if(f=i,i+=l.length,d){d=u[1];var W=l.indexOf(d),h=W+d.length;u[2]&&(W=(h=l.length-u[2].length)-d.length),q=q.substring(5),b(n+f,l.substring(0,W),M,O),b(n+f+W,d,c(q,d),O),b(n+f+h,l.substring(h),M,O)}else O.push(n+f,q)}p.g=O}}function o(b){var p=[],o=[];b.tripleQuotedStrings?p.push([\"str\",/^(?:'''(?:[^'\\\\]|\\\\[\\S\\s]|''?(?=[^']))*(?:'''|$)|\"\"\"(?:[^\"\\\\]|\\\\[\\S\\s]|\"\"?(?=[^\"]))*(?:\"\"\"|$)|'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$))/,M,\"'\\\"\"]):b.multiLineStrings?p.push([\"str\",/^(?:'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)|`(?:[^\\\\`]|\\\\[\\S\\s])*(?:`|$))/,M,\"'\\\"`\"]):p.push([\"str\",/^(?:'(?:[^\\n\\r'\\\\]|\\\\.)*(?:'|$)|\"(?:[^\\n\\r\"\\\\]|\\\\.)*(?:\"|$))/,M,\"\\\"'\"]),b.verbatimStrings&&o.push([\"str\",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,M]);var z=b.hashComments;if(z&&(b.cStyleComments?(z>1?p.push([\"com\",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,M,\"#\"]):p.push([\"com\",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\\b|[^\\n\\r]*)/,M,\"#\"]),o.push([\"str\",/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h(?:h|pp|\\+\\+)?|[a-z]\\w*)>/,M])):p.push([\"com\",/^#[^\\n\\r]*/,M,\"#\"])),b.cStyleComments&&(o.push([\"com\",/^\\/\\/[^\\n\\r]*/,M]),o.push([\"com\",/^\\/\\*[\\S\\s]*?(?:\\*\\/|$)/,M])),z=b.regexLiterals){var t=(z=z>1?\"\":\"\\n\\r\")?\".\":\"[\\\\S\\\\s]\";o.push([\"lang-regex\",RegExp(\"^(?:^^\\\\.?|[+-]|[!=]=?=?|\\\\#|%=?|&&?=?|\\\\(|\\\\*=?|[+\\\\-]=|->|\\\\/=?|::?|<<?=?|>>?>?=?|,|;|\\\\?|@|\\\\[|~|{|\\\\^\\\\^?=?|\\\\|\\\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*(/(?=[^/*\"+z+\"])(?:[^/\\\\x5B\\\\x5C\"+z+\"]|\\\\x5C\"+t+\"|\\\\x5B(?:[^\\\\x5C\\\\x5D\"+z+\"]|\\\\x5C\"+t+\")*(?:\\\\x5D|$))+/)\")])}return(z=b.types)&&o.push([\"typ\",z]),(z=(\"\"+b.keywords).replace(/^ | $/g,\"\")).length&&o.push([\"kwd\",RegExp(\"^(?:\"+z.replace(/[\\s,]+/g,\"|\")+\")\\\\b\"),M]),p.push([\"pln\",/^\\s+/,M,\" \\r\\n\\t \"]),z=\"^.[^\\\\s\\\\w.$@'\\\"`/\\\\\\\\]*\",b.regexLiterals&&(z+=\"(?!s*/)\"),o.push([\"lit\",/^@[$_a-z][\\w$@]*/i,M],[\"typ\",/^(?:[@_]?[A-Z]+[a-z][\\w$@]*|\\w+_t\\b)/,M],[\"pln\",/^[$_a-z][\\w$@]*/i,M],[\"lit\",/^(?:0x[\\da-f]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+-]?\\d+)?)[a-z]*/i,M,\"0123456789\"],[\"pln\",/^\\\\[\\S\\s]?/,M],[\"pun\",RegExp(z),M]),e(p,o)}function z(M,b,p){function e(M){var b=M.nodeType;if(1!=b||z.test(M.className)){if((3==b||4==b)&&p){var n=M.nodeValue,O=n.match(t);O&&(b=n.substring(0,O.index),M.nodeValue=b,(n=n.substring(O.index+O[0].length))&&M.parentNode.insertBefore(c.createTextNode(n),M.nextSibling),o(M),b||M.parentNode.removeChild(M))}}else if(\"br\"===M.nodeName)o(M),M.parentNode&&M.parentNode.removeChild(M);else for(M=M.firstChild;M;M=M.nextSibling)e(M)}function o(M){for(;!M.nextSibling;)if(!(M=M.parentNode))return;var b;for(M=function M(b,p){var e=p?b.cloneNode(!1):b;if(o=b.parentNode){var o=M(o,1),z=b.nextSibling;o.appendChild(e);for(var t=z;t;t=z)z=t.nextSibling,o.appendChild(t)}return e}(M.nextSibling,0);(b=M.parentNode)&&1===b.nodeType;)M=b;O.push(M)}for(var z=/(?:^|\\s)nocode(?:\\s|$)/,t=/\\r\\n?|\\n/,c=M.ownerDocument,n=c.createElement(\"li\");M.firstChild;)n.appendChild(M.firstChild);for(var O=[n],i=0;i<O.length;++i)e(O[i]);b===(0|b)&&O[0].setAttribute(\"value\",b);var r=c.createElement(\"ol\");r.className=\"linenums\";b=Math.max(0,b-1|0)||0,i=0;for(var a=O.length;i<a;++i)(n=O[i]).className=\"L\"+(i+b)%10,n.firstChild||n.appendChild(c.createTextNode(\" \")),r.appendChild(n);M.appendChild(r)}function t(M,b){for(var p=b.length;--p>=0;){var e=b[p];h.hasOwnProperty(e)?r.console&&console.warn(\"cannot override language handler %s\",e):h[e]=M}}function c(M,b){return M&&h.hasOwnProperty(M)||(M=/^\\s*</.test(b)?\"default-markup\":\"default-code\"),h[M]}function n(M){var b=M.h;try{var p=function(M,b){var p=/(?:^|\\s)nocode(?:\\s|$)/,e=[],o=0,z=[],t=0;return function M(c){var n=c.nodeType;if(1==n){if(!p.test(c.className)){for(n=c.firstChild;n;n=n.nextSibling)M(n);\"br\"!==(n=c.nodeName.toLowerCase())&&\"li\"!==n||(e[t]=\"\\n\",z[t<<1]=o++,z[t++<<1|1]=c)}}else 3!=n&&4!=n||(n=c.nodeValue).length&&(n=b?n.replace(/\\r\\n?/g,\"\\n\"):n.replace(/[\\t\\n\\r ]+/g,\" \"),e[t]=n,z[t<<1]=o,o+=n.length,z[t++<<1|1]=c)}(M),{a:e.join(\"\").replace(/\\n$/,\"\"),d:z}}(M.c,M.i),e=p.a;M.a=e,M.d=p.d,M.e=0,c(b,e)(M);var o,z,t=(t=/\\bMSIE\\s(\\d+)/.exec(navigator.userAgent))&&+t[1]<=8,n=(b=/\\n/g,M.a),O=n.length,i=(p=0,M.d),a=i.length,s=(e=0,M.g),A=s.length,d=0;for(s[A]=O,z=o=0;z<A;)s[z]!==s[z+2]?(s[o++]=s[z++],s[o++]=s[z++]):z+=2;for(A=o,z=o=0;z<A;){for(var l=s[z],q=s[z+1],u=z+2;u+2<=A&&s[u+1]===q;)u+=2;s[o++]=l,s[o++]=q,z=u}s.length=o;var f,W=M.c;W&&(f=W.style.display,W.style.display=\"none\");try{for(;e<a;){var h,R=i[e+2]||O,m=s[d+2]||O,g=(u=Math.min(R,m),i[e+1]);if(1!==g.nodeType&&(h=n.substring(p,u))){t&&(h=h.replace(b,\"\\r\")),g.nodeValue=h;var L=g.ownerDocument,v=L.createElement(\"span\");v.className=s[d+1];var N=g.parentNode;N.replaceChild(v,g),v.appendChild(g),p<R&&(i[e+1]=g=L.createTextNode(n.substring(u,R)),N.insertBefore(g,v.nextSibling))}(p=u)>=R&&(e+=2),p>=m&&(d+=2)}}finally{W&&(W.style.display=f)}}catch(M){r.console&&console.log(M&&M.stack||M)}}var O,i,r=window,a=[O=[[i=[\"break,continue,do,else,for,if,return,while\"],\"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"],\"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof\"],\"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where\"],s=[O,\"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient\"],A=[s,\"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where\"],d=[i,\"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None\"],l=[i,\"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END\"],q=[i,\"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use\"],u=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)\\b/,f=/\\S/,W=o({keywords:[a,A,O=[O,\"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN\"],\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",d,l,i=[i,\"case,done,elif,esac,eval,fi,function,in,local,set,then,until\"]],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),h={};t(W,[\"default-code\"]),t(e([],[[\"pln\",/^[^<?]+/],[\"dec\",/^<!\\w[^>]*(?:>|$)/],[\"com\",/^<\\!--[\\S\\s]*?(?:--\\>|$)/],[\"lang-\",/^<\\?([\\S\\s]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\S\\s]+?)(?:%>|$)/],[\"pun\",/^(?:<[%?]|[%?]>)/],[\"lang-\",/^<xmp\\b[^>]*>([\\S\\s]+?)<\\/xmp\\b[^>]*>/i],[\"lang-js\",/^<script\\b[^>]*>([\\S\\s]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\S\\s]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i]]),[\"default-markup\",\"htm\",\"html\",\"mxml\",\"xhtml\",\"xml\",\"xsl\"]),t(e([[\"pln\",/^\\s+/,M,\" \\t\\r\\n\"],[\"atv\",/^(?:\"[^\"]*\"?|'[^']*'?)/,M,\"\\\"'\"]],[[\"tag\",/^^<\\/?[a-z](?:[\\w-.:]*\\w)?|\\/?>$/i],[\"atn\",/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],[\"lang-uq.val\",/^=\\s*([^\\s\"'>]*(?:[^\\s\"'/>]|\\/(?=\\s)))/],[\"pun\",/^[/<->]+/],[\"lang-js\",/^on\\w+\\s*=\\s*\"([^\"]+)\"/i],[\"lang-js\",/^on\\w+\\s*=\\s*'([^']+)'/i],[\"lang-js\",/^on\\w+\\s*=\\s*([^\\s\"'>]+)/i],[\"lang-css\",/^style\\s*=\\s*\"([^\"]+)\"/i],[\"lang-css\",/^style\\s*=\\s*'([^']+)'/i],[\"lang-css\",/^style\\s*=\\s*([^\\s\"'>]+)/i]]),[\"in.tag\"]),t(e([],[[\"atv\",/^[\\S\\s]+/]]),[\"uq.val\"]),t(o({keywords:a,hashComments:!0,cStyleComments:!0,types:u}),[\"c\",\"cc\",\"cpp\",\"cxx\",\"cyc\",\"m\"]),t(o({keywords:\"null,true,false\"}),[\"json\"]),t(o({keywords:A,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:u}),[\"cs\"]),t(o({keywords:s,cStyleComments:!0}),[\"java\"]),t(o({keywords:i,hashComments:!0,multiLineStrings:!0}),[\"bash\",\"bsh\",\"csh\",\"sh\"]),t(o({keywords:d,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),[\"cv\",\"py\",\"python\"]),t(o({keywords:\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),[\"perl\",\"pl\",\"pm\"]),t(o({keywords:l,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),[\"rb\",\"ruby\"]),t(o({keywords:O,cStyleComments:!0,regexLiterals:!0}),[\"javascript\",\"js\"]),t(o({keywords:\"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes\",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),[\"coffee\"]),t(o({keywords:q,cStyleComments:!0,multilineStrings:!0}),[\"rc\",\"rs\",\"rust\"]),t(e([],[[\"str\",/^[\\S\\s]+/]]),[\"regex\"]);var R=r.PR={createSimpleLexer:e,registerLangHandler:t,sourceDecorator:o,PR_ATTRIB_NAME:\"atn\",PR_ATTRIB_VALUE:\"atv\",PR_COMMENT:\"com\",PR_DECLARATION:\"dec\",PR_KEYWORD:\"kwd\",PR_LITERAL:\"lit\",PR_NOCODE:\"nocode\",PR_PLAIN:\"pln\",PR_PUNCTUATION:\"pun\",PR_SOURCE:\"src\",PR_STRING:\"str\",PR_TAG:\"tag\",PR_TYPE:\"typ\",prettyPrintOne:r.prettyPrintOne=function(M,b,p){var e=document.createElement(\"div\");return e.innerHTML=\"<pre>\"+M+\"</pre>\",e=e.firstChild,p&&z(e,p,!0),n({h:b,j:p,c:e,i:1}),e.innerHTML},prettyPrint:r.prettyPrint=function(b,e){for(var o=(t=e||document.body).ownerDocument||document,t=[t.getElementsByTagName(\"pre\"),t.getElementsByTagName(\"code\"),t.getElementsByTagName(\"xmp\")],c=[],O=0;O<t.length;++O)for(var i=0,a=t[O].length;i<a;++i)c.push(t[O][i]);t=M;var s=Date;s.now||(s={now:function(){return+new Date}});var A=0,d=/\\blang(?:uage)?-([\\w.]+)(?!\\S)/,l=/\\bprettyprint\\b/,q=/\\bprettyprinted\\b/,u=/pre|xmp/i,f=/^code$/i,W=/^(?:pre|code|xmp)$/i,h={};!function e(){for(var t=r.PR_SHOULD_USE_CONTINUATION?s.now()+250:1/0;A<c.length&&s.now()<t;A++){for(var O=c[A],i=h,a=O;a=a.previousSibling;){if((g=(7===(R=a.nodeType)||8===R)&&a.nodeValue)?!/^\\??prettify\\b/.test(g):3!==R||/\\S/.test(a.nodeValue))break;if(g){i={},g.replace(/\\b(\\w+)=([\\w%+\\-.:]+)/g,function(M,b,p){i[b]=p});break}}if(a=O.className,(i!==h||l.test(a))&&!q.test(a)){for(R=!1,g=O.parentNode;g;g=g.parentNode)if(W.test(g.tagName)&&g.className&&l.test(g.className)){R=!0;break}if(!R){var R,m;if(O.className+=\" prettyprinted\",!(R=i.lang))!(R=a.match(d))&&(m=p(O))&&f.test(m.tagName)&&(R=m.className.match(d)),R&&(R=R[1]);if(u.test(O.tagName))g=1;else{var g=O.currentStyle,L=o.defaultView;g=(g=g?g.whiteSpace:L&&L.getComputedStyle?L.getComputedStyle(O,M).getPropertyValue(\"white-space\"):0)&&\"pre\"===g.substring(0,3)}(L=\"true\"===(L=i.linenums)||+L)||(L=!!(L=a.match(/\\blinenums\\b(?::(\\d+))?/))&&(!L[1]||!L[1].length||+L[1])),L&&z(O,L,g),n({h:R,c:O,j:L,i:g})}}}A<c.length?setTimeout(e,250):\"function\"==typeof b&&b()}()}};\"function\"==typeof define&&define.amd&&define(\"google-code-prettify\",[],function(){return R})}()}(),function(M,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=b():\"function\"==typeof define&&define.amd?define(b):(M=\"undefined\"!=typeof globalThis?globalThis:M||self,function(){var p=M.Cookies,e=M.Cookies=b();e.noConflict=function(){return M.Cookies=p,e}}())}(this,function(){\"use strict\";function M(M){for(var b=1;b<arguments.length;b++){var p=arguments[b];for(var e in p)M[e]=p[e]}return M}var b=function b(p,e){function o(b,o,z){if(\"undefined\"!=typeof document){\"number\"==typeof(z=M({},e,z)).expires&&(z.expires=new Date(Date.now()+864e5*z.expires)),z.expires&&(z.expires=z.expires.toUTCString()),b=encodeURIComponent(b).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var t=\"\";for(var c in z)z[c]&&(t+=\"; \"+c,!0!==z[c]&&(t+=\"=\"+z[c].split(\";\")[0]));return document.cookie=b+\"=\"+p.write(o,b)+t}}return Object.create({set:o,get:function(M){if(\"undefined\"!=typeof document&&(!arguments.length||M)){for(var b=document.cookie?document.cookie.split(\"; \"):[],e={},o=0;o<b.length;o++){var z=b[o].split(\"=\"),t=z.slice(1).join(\"=\");try{var c=decodeURIComponent(z[0]);if(e[c]=p.read(t,c),M===c)break}catch(M){}}return M?e[M]:e}},remove:function(b,p){o(b,\"\",M({},p,{expires:-1}))},withAttributes:function(p){return b(this.converter,M({},this.attributes,p))},withConverter:function(p){return b(M({},this.converter,p),this.attributes)}},{attributes:{value:Object.freeze(e)},converter:{value:Object.freeze(p)}})}({read:function(M){return'\"'===M[0]&&(M=M.slice(1,-1)),M.replace(/(%[\\dA-F]{2})+/gi,decodeURIComponent)},write:function(M){return encodeURIComponent(M).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:\"/\"});return b}),function(M){\"function\"==typeof define&&define.amd?define([\"jquery\"],M):\"object\"==typeof module&&module.exports?module.exports=function(b,p){return void 0===p&&(p=\"undefined\"!=typeof window?require(\"jquery\"):require(\"jquery\")(b)),M(p),p}:M(jQuery)}(function(M){var b=function(){if(M&&M.fn&&M.fn.select2&&M.fn.select2.amd)var b=M.fn.select2.amd;var p;return function(){var M,p,e;b&&b.requirejs||(b?p=b:b={},function(b){var o,z,t,c,n={},O={},i={},r={},a=Object.prototype.hasOwnProperty,s=[].slice,A=/\\.js$/;function d(M,b){return a.call(M,b)}function l(M,b){var p,e,o,z,t,c,n,O,r,a,s,d=b&&b.split(\"/\"),l=i.map,q=l&&l[\"*\"]||{};if(M){for(t=(M=M.split(\"/\")).length-1,i.nodeIdCompat&&A.test(M[t])&&(M[t]=M[t].replace(A,\"\")),\".\"===M[0].charAt(0)&&d&&(M=d.slice(0,d.length-1).concat(M)),r=0;r<M.length;r++)if(\".\"===(s=M[r]))M.splice(r,1),r-=1;else if(\"..\"===s){if(0===r||1===r&&\"..\"===M[2]||\"..\"===M[r-1])continue;r>0&&(M.splice(r-1,2),r-=2)}M=M.join(\"/\")}if((d||q)&&l){for(r=(p=M.split(\"/\")).length;r>0;r-=1){if(e=p.slice(0,r).join(\"/\"),d)for(a=d.length;a>0;a-=1)if((o=l[d.slice(0,a).join(\"/\")])&&(o=o[e])){z=o,c=r;break}if(z)break;!n&&q&&q[e]&&(n=q[e],O=r)}!z&&n&&(z=n,c=O),z&&(p.splice(0,c,z),M=p.join(\"/\"))}return M}function q(M,p){return function(){var e=s.call(arguments,0);return\"string\"!=typeof e[0]&&1===e.length&&e.push(null),z.apply(b,e.concat([M,p]))}}function u(M){return function(b){n[M]=b}}function f(M){if(d(O,M)){var p=O[M];delete O[M],r[M]=!0,o.apply(b,p)}if(!d(n,M)&&!d(r,M))throw new Error(\"No \"+M);return n[M]}function W(M){var b,p=M?M.indexOf(\"!\"):-1;return p>-1&&(b=M.substring(0,p),M=M.substring(p+1,M.length)),[b,M]}function h(M){return M?W(M):[]}function R(M){return function(){return i&&i.config&&i.config[M]||{}}}t=function(M,b){var p,e,o=W(M),z=o[0],t=b[1];return M=o[1],z&&(p=f(z=l(z,t))),z?M=p&&p.normalize?p.normalize(M,(e=t,function(M){return l(M,e)})):l(M,t):(z=(o=W(M=l(M,t)))[0],M=o[1],z&&(p=f(z))),{f:z?z+\"!\"+M:M,n:M,pr:z,p:p}},c={require:function(M){return q(M)},exports:function(M){var b=n[M];return void 0!==b?b:n[M]={}},module:function(M){return{id:M,uri:\"\",exports:n[M],config:R(M)}}},o=function(M,p,e,o){var z,i,a,s,A,l,W,R=[],m=typeof e;if(l=h(o=o||M),\"undefined\"===m||\"function\"===m){for(p=!p.length&&e.length?[\"require\",\"exports\",\"module\"]:p,A=0;A<p.length;A+=1)if(\"require\"===(i=(s=t(p[A],l)).f))R[A]=c.require(M);else if(\"exports\"===i)R[A]=c.exports(M),W=!0;else if(\"module\"===i)z=R[A]=c.module(M);else if(d(n,i)||d(O,i)||d(r,i))R[A]=f(i);else{if(!s.p)throw new Error(M+\" missing \"+i);s.p.load(s.n,q(o,!0),u(i),{}),R[A]=n[i]}a=e?e.apply(n[M],R):void 0,M&&(z&&z.exports!==b&&z.exports!==n[M]?n[M]=z.exports:a===b&&W||(n[M]=a))}else M&&(n[M]=e)},M=p=z=function(M,p,e,n,O){if(\"string\"==typeof M)return c[M]?c[M](p):f(t(M,h(p)).f);if(!M.splice){if((i=M).deps&&z(i.deps,i.callback),!p)return;p.splice?(M=p,p=e,e=null):M=b}return p=p||function(){},\"function\"==typeof e&&(e=n,n=O),n?o(b,M,p,e):setTimeout(function(){o(b,M,p,e)},4),z},z.config=function(M){return z(M)},M._defined=n,(e=function(M,b,p){if(\"string\"!=typeof M)throw new Error(\"See almond README: incorrect module build, no module name\");b.splice||(p=b,b=[]),d(n,M)||d(O,M)||(O[M]=[M,b,p])}).amd={jQuery:!0}}(),b.requirejs=M,b.require=p,b.define=e)}(),b.define(\"almond\",function(){}),b.define(\"jquery\",[],function(){var b=M||$;return null==b&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),b}),b.define(\"select2/utils\",[\"jquery\"],function(M){var b={};function p(M){var b=M.prototype,p=[];for(var e in b){\"function\"==typeof b[e]&&(\"constructor\"!==e&&p.push(e))}return p}b.Extend=function(M,b){var p={}.hasOwnProperty;function e(){this.constructor=M}for(var o in b)p.call(b,o)&&(M[o]=b[o]);return e.prototype=b.prototype,M.prototype=new e,M.__super__=b.prototype,M},b.Decorate=function(M,b){var e=p(b),o=p(M);function z(){var p=Array.prototype.unshift,e=b.prototype.constructor.length,o=M.prototype.constructor;e>0&&(p.call(arguments,M.prototype.constructor),o=b.prototype.constructor),o.apply(this,arguments)}b.displayName=M.displayName,z.prototype=new function(){this.constructor=z};for(var t=0;t<o.length;t++){var c=o[t];z.prototype[c]=M.prototype[c]}for(var n=function(M){var p=function(){};M in z.prototype&&(p=z.prototype[M]);var e=b.prototype[M];return function(){return Array.prototype.unshift.call(arguments,p),e.apply(this,arguments)}},O=0;O<e.length;O++){var i=e[O];z.prototype[i]=n(i)}return z};var e=function(){this.listeners={}};e.prototype.on=function(M,b){this.listeners=this.listeners||{},M in this.listeners?this.listeners[M].push(b):this.listeners[M]=[b]},e.prototype.trigger=function(M){var b=Array.prototype.slice,p=b.call(arguments,1);this.listeners=this.listeners||{},null==p&&(p=[]),0===p.length&&p.push({}),p[0]._type=M,M in this.listeners&&this.invoke(this.listeners[M],b.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},e.prototype.invoke=function(M,b){for(var p=0,e=M.length;p<e;p++)M[p].apply(this,b)},b.Observable=e,b.generateChars=function(M){for(var b=\"\",p=0;p<M;p++){b+=Math.floor(36*Math.random()).toString(36)}return b},b.bind=function(M,b){return function(){M.apply(b,arguments)}},b._convertData=function(M){for(var b in M){var p=b.split(\"-\"),e=M;if(1!==p.length){for(var o=0;o<p.length;o++){var z=p[o];(z=z.substring(0,1).toLowerCase()+z.substring(1))in e||(e[z]={}),o==p.length-1&&(e[z]=M[b]),e=e[z]}delete M[b]}}return M},b.hasScroll=function(b,p){var e=M(p),o=p.style.overflowX,z=p.style.overflowY;return(o!==z||\"hidden\"!==z&&\"visible\"!==z)&&(\"scroll\"===o||\"scroll\"===z||(e.innerHeight()<p.scrollHeight||e.innerWidth()<p.scrollWidth))},b.escapeMarkup=function(M){var b={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#47;\"};return\"string\"!=typeof M?M:String(M).replace(/[&<>\"'\\/\\\\]/g,function(M){return b[M]})},b.__cache={};var o=0;return b.GetUniqueElementId=function(M){var p=M.getAttribute(\"data-select2-id\");return null!=p||(p=M.id?\"select2-data-\"+M.id:\"select2-data-\"+(++o).toString()+\"-\"+b.generateChars(4),M.setAttribute(\"data-select2-id\",p)),p},b.StoreData=function(M,p,e){var o=b.GetUniqueElementId(M);b.__cache[o]||(b.__cache[o]={}),b.__cache[o][p]=e},b.GetData=function(p,e){var o=b.GetUniqueElementId(p);return e?b.__cache[o]&&null!=b.__cache[o][e]?b.__cache[o][e]:M(p).data(e):b.__cache[o]},b.RemoveData=function(M){var p=b.GetUniqueElementId(M);null!=b.__cache[p]&&delete b.__cache[p],M.removeAttribute(\"data-select2-id\")},b.copyNonInternalCssClasses=function(M,b){var p=M.getAttribute(\"class\").trim().split(/\\s+/);p=p.filter(function(M){return 0===M.indexOf(\"select2-\")});var e=b.getAttribute(\"class\").trim().split(/\\s+/);e=e.filter(function(M){return 0!==M.indexOf(\"select2-\")});var o=p.concat(e);M.setAttribute(\"class\",o.join(\" \"))},b}),b.define(\"select2/results\",[\"jquery\",\"./utils\"],function(M,b){function p(M,b,e){this.$element=M,this.data=e,this.options=b,p.__super__.constructor.call(this)}return b.Extend(p,b.Observable),p.prototype.render=function(){var b=M('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');return this.options.get(\"multiple\")&&b.attr(\"aria-multiselectable\",\"true\"),this.$results=b,b},p.prototype.clear=function(){this.$results.empty()},p.prototype.displayMessage=function(b){var p=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var e=M('<li role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\"></li>'),o=this.options.get(\"translations\").get(b.message);e.append(p(o(b.args))),e[0].className+=\" select2-results__message\",this.$results.append(e)},p.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},p.prototype.append=function(M){this.hideLoading();var b=[];if(null!=M.results&&0!==M.results.length){M.results=this.sort(M.results);for(var p=0;p<M.results.length;p++){var e=M.results[p],o=this.option(e);b.push(o)}this.$results.append(b)}else 0===this.$results.children().length&&this.trigger(\"results:message\",{message:\"noResults\"})},p.prototype.position=function(M,b){b.find(\".select2-results\").append(M)},p.prototype.sort=function(M){return this.options.get(\"sorter\")(M)},p.prototype.highlightFirstItem=function(){var M=this.$results.find(\".select2-results__option--selectable\"),b=M.filter(\".select2-results__option--selected\");b.length>0?b.first().trigger(\"mouseenter\"):M.first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},p.prototype.setClasses=function(){var p=this;this.data.current(function(e){var o=e.map(function(M){return M.id.toString()});p.$results.find(\".select2-results__option--selectable\").each(function(){var p=M(this),e=b.GetData(this,\"data\"),z=\"\"+e.id;null!=e.element&&e.element.selected||null==e.element&&o.indexOf(z)>-1?(this.classList.add(\"select2-results__option--selected\"),p.attr(\"aria-selected\",\"true\")):(this.classList.remove(\"select2-results__option--selected\"),p.attr(\"aria-selected\",\"false\"))})})},p.prototype.showLoading=function(M){this.hideLoading();var b={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(M)},p=this.option(b);p.className+=\" loading-results\",this.$results.prepend(p)},p.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},p.prototype.option=function(p){var e=document.createElement(\"li\");e.classList.add(\"select2-results__option\"),e.classList.add(\"select2-results__option--selectable\");var o={role:\"option\"},z=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var t in(null!=p.element&&z.call(p.element,\":disabled\")||null==p.element&&p.disabled)&&(o[\"aria-disabled\"]=\"true\",e.classList.remove(\"select2-results__option--selectable\"),e.classList.add(\"select2-results__option--disabled\")),null==p.id&&e.classList.remove(\"select2-results__option--selectable\"),null!=p._resultId&&(e.id=p._resultId),p.title&&(e.title=p.title),p.children&&(o.role=\"group\",o[\"aria-label\"]=p.text,e.classList.remove(\"select2-results__option--selectable\"),e.classList.add(\"select2-results__option--group\")),o){var c=o[t];e.setAttribute(t,c)}if(p.children){var n=M(e),O=document.createElement(\"strong\");O.className=\"select2-results__group\",this.template(p,O);for(var i=[],r=0;r<p.children.length;r++){var a=p.children[r],s=this.option(a);i.push(s)}var A=M(\"<ul></ul>\",{class:\"select2-results__options select2-results__options--nested\",role:\"none\"});A.append(i),n.append(O),n.append(A)}else this.template(p,e);return b.StoreData(e,\"data\",p),e},p.prototype.bind=function(p,e){var o=this,z=p.id+\"-results\";this.$results.attr(\"id\",z),p.on(\"results:all\",function(M){o.clear(),o.append(M.data),p.isOpen()&&(o.setClasses(),o.highlightFirstItem())}),p.on(\"results:append\",function(M){o.append(M.data),p.isOpen()&&o.setClasses()}),p.on(\"query\",function(M){o.hideMessages(),o.showLoading(M)}),p.on(\"select\",function(){p.isOpen()&&(o.setClasses(),o.options.get(\"scrollAfterSelect\")&&o.highlightFirstItem())}),p.on(\"unselect\",function(){p.isOpen()&&(o.setClasses(),o.options.get(\"scrollAfterSelect\")&&o.highlightFirstItem())}),p.on(\"open\",function(){o.$results.attr(\"aria-expanded\",\"true\"),o.$results.attr(\"aria-hidden\",\"false\"),o.setClasses(),o.ensureHighlightVisible()}),p.on(\"close\",function(){o.$results.attr(\"aria-expanded\",\"false\"),o.$results.attr(\"aria-hidden\",\"true\"),o.$results.removeAttr(\"aria-activedescendant\")}),p.on(\"results:toggle\",function(){var M=o.getHighlightedResults();0!==M.length&&M.trigger(\"mouseup\")}),p.on(\"results:select\",function(){var M=o.getHighlightedResults();if(0!==M.length){var p=b.GetData(M[0],\"data\");M.hasClass(\"select2-results__option--selected\")?o.trigger(\"close\",{}):o.trigger(\"select\",{data:p})}}),p.on(\"results:previous\",function(){var M=o.getHighlightedResults(),b=o.$results.find(\".select2-results__option--selectable\"),p=b.index(M);if(!(p<=0)){var e=p-1;0===M.length&&(e=0);var z=b.eq(e);z.trigger(\"mouseenter\");var t=o.$results.offset().top,c=z.offset().top,n=o.$results.scrollTop()+(c-t);0===e?o.$results.scrollTop(0):c-t<0&&o.$results.scrollTop(n)}}),p.on(\"results:next\",function(){var M=o.getHighlightedResults(),b=o.$results.find(\".select2-results__option--selectable\"),p=b.index(M)+1;if(!(p>=b.length)){var e=b.eq(p);e.trigger(\"mouseenter\");var z=o.$results.offset().top+o.$results.outerHeight(!1),t=e.offset().top+e.outerHeight(!1),c=o.$results.scrollTop()+t-z;0===p?o.$results.scrollTop(0):t>z&&o.$results.scrollTop(c)}}),p.on(\"results:focus\",function(M){M.element[0].classList.add(\"select2-results__option--highlighted\"),M.element[0].setAttribute(\"aria-selected\",\"true\")}),p.on(\"results:message\",function(M){o.displayMessage(M)}),M.fn.mousewheel&&this.$results.on(\"mousewheel\",function(M){var b=o.$results.scrollTop(),p=o.$results.get(0).scrollHeight-b+M.deltaY,e=M.deltaY>0&&b-M.deltaY<=0,z=M.deltaY<0&&p<=o.$results.height();e?(o.$results.scrollTop(0),M.preventDefault(),M.stopPropagation()):z&&(o.$results.scrollTop(o.$results.get(0).scrollHeight-o.$results.height()),M.preventDefault(),M.stopPropagation())}),this.$results.on(\"mouseup\",\".select2-results__option--selectable\",function(p){var e=M(this),z=b.GetData(this,\"data\");e.hasClass(\"select2-results__option--selected\")?o.options.get(\"multiple\")?o.trigger(\"unselect\",{originalEvent:p,data:z}):o.trigger(\"close\",{}):o.trigger(\"select\",{originalEvent:p,data:z})}),this.$results.on(\"mouseenter\",\".select2-results__option--selectable\",function(p){var e=b.GetData(this,\"data\");o.getHighlightedResults().removeClass(\"select2-results__option--highlighted\").attr(\"aria-selected\",\"false\"),o.trigger(\"results:focus\",{data:e,element:M(this)})})},p.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},p.prototype.destroy=function(){this.$results.remove()},p.prototype.ensureHighlightVisible=function(){var M=this.getHighlightedResults();if(0!==M.length){var b=this.$results.find(\".select2-results__option--selectable\").index(M),p=this.$results.offset().top,e=M.offset().top,o=this.$results.scrollTop()+(e-p),z=e-p;o-=2*M.outerHeight(!1),b<=2?this.$results.scrollTop(0):(z>this.$results.outerHeight()||z<0)&&this.$results.scrollTop(o)}},p.prototype.template=function(b,p){var e=this.options.get(\"templateResult\"),o=this.options.get(\"escapeMarkup\"),z=e(b,p);null==z?p.style.display=\"none\":\"string\"==typeof z?p.innerHTML=o(z):M(p).append(z)},p}),b.define(\"select2/keys\",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define(\"select2/selection/base\",[\"jquery\",\"../utils\",\"../keys\"],function(M,b,p){function e(M,b){this.$element=M,this.options=b,e.__super__.constructor.call(this)}return b.Extend(e,b.Observable),e.prototype.render=function(){var p=M('<span class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\"></span>');return this._tabindex=0,null!=b.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=b.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),p.attr(\"title\",this.$element.attr(\"title\")),p.attr(\"tabindex\",this._tabindex),p.attr(\"aria-disabled\",\"false\"),this.$selection=p,p},e.prototype.bind=function(M,b){var e=this,o=M.id+\"-results\";this.container=M,this.$selection.on(\"focus\",function(M){e.trigger(\"focus\",M)}),this.$selection.on(\"blur\",function(M){e._handleBlur(M)}),this.$selection.on(\"keydown\",function(M){e.trigger(\"keypress\",M),M.which===p.SPACE&&M.preventDefault()}),M.on(\"results:focus\",function(M){e.$selection.attr(\"aria-activedescendant\",M.data._resultId)}),M.on(\"selection:update\",function(M){e.update(M.data)}),M.on(\"open\",function(){e.$selection.attr(\"aria-expanded\",\"true\"),e.$selection.attr(\"aria-owns\",o),e._attachCloseHandler(M)}),M.on(\"close\",function(){e.$selection.attr(\"aria-expanded\",\"false\"),e.$selection.removeAttr(\"aria-activedescendant\"),e.$selection.removeAttr(\"aria-owns\"),e.$selection.trigger(\"focus\"),e._detachCloseHandler(M)}),M.on(\"enable\",function(){e.$selection.attr(\"tabindex\",e._tabindex),e.$selection.attr(\"aria-disabled\",\"false\")}),M.on(\"disable\",function(){e.$selection.attr(\"tabindex\",\"-1\"),e.$selection.attr(\"aria-disabled\",\"true\")})},e.prototype._handleBlur=function(b){var p=this;window.setTimeout(function(){document.activeElement==p.$selection[0]||M.contains(p.$selection[0],document.activeElement)||p.trigger(\"blur\",b)},1)},e.prototype._attachCloseHandler=function(p){M(document.body).on(\"mousedown.select2.\"+p.id,function(p){var e=M(p.target).closest(\".select2\");M(\".select2.select2-container--open\").each(function(){this!=e[0]&&b.GetData(this,\"element\").select2(\"close\")})})},e.prototype._detachCloseHandler=function(b){M(document.body).off(\"mousedown.select2.\"+b.id)},e.prototype.position=function(M,b){b.find(\".selection\").append(M)},e.prototype.destroy=function(){this._detachCloseHandler(this.container)},e.prototype.update=function(M){throw new Error(\"The `update` method must be defined in child classes.\")},e.prototype.isEnabled=function(){return!this.isDisabled()},e.prototype.isDisabled=function(){return this.options.get(\"disabled\")},e}),b.define(\"select2/selection/single\",[\"jquery\",\"./base\",\"../utils\",\"../keys\"],function(M,b,p,e){function o(){o.__super__.constructor.apply(this,arguments)}return p.Extend(o,b),o.prototype.render=function(){var M=o.__super__.render.call(this);return M[0].classList.add(\"select2-selection--single\"),M.html('<span class=\"select2-selection__rendered\"></span><span class=\"select2-selection__arrow\" role=\"presentation\"><b role=\"presentation\"></b></span>'),M},o.prototype.bind=function(M,b){var p=this;o.__super__.bind.apply(this,arguments);var e=M.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",e).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",e),this.$selection.attr(\"aria-controls\",e),this.$selection.on(\"mousedown\",function(M){1===M.which&&p.trigger(\"toggle\",{originalEvent:M})}),this.$selection.on(\"focus\",function(M){}),this.$selection.on(\"blur\",function(M){}),M.on(\"focus\",function(b){M.isOpen()||p.$selection.trigger(\"focus\")})},o.prototype.clear=function(){var M=this.$selection.find(\".select2-selection__rendered\");M.empty(),M.removeAttr(\"title\")},o.prototype.display=function(M,b){var p=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(p(M,b))},o.prototype.selectionContainer=function(){return M(\"<span></span>\")},o.prototype.update=function(M){if(0!==M.length){var b=M[0],p=this.$selection.find(\".select2-selection__rendered\"),e=this.display(b,p);p.empty().append(e);var o=b.title||b.text;o?p.attr(\"title\",o):p.removeAttr(\"title\")}else this.clear()},o}),b.define(\"select2/selection/multiple\",[\"jquery\",\"./base\",\"../utils\"],function(M,b,p){function e(M,b){e.__super__.constructor.apply(this,arguments)}return p.Extend(e,b),e.prototype.render=function(){var M=e.__super__.render.call(this);return M[0].classList.add(\"select2-selection--multiple\"),M.html('<ul class=\"select2-selection__rendered\"></ul>'),M},e.prototype.bind=function(b,o){var z=this;e.__super__.bind.apply(this,arguments);var t=b.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",t),this.$selection.on(\"click\",function(M){z.trigger(\"toggle\",{originalEvent:M})}),this.$selection.on(\"click\",\".select2-selection__choice__remove\",function(b){if(!z.isDisabled()){var e=M(this).parent(),o=p.GetData(e[0],\"data\");z.trigger(\"unselect\",{originalEvent:b,data:o})}}),this.$selection.on(\"keydown\",\".select2-selection__choice__remove\",function(M){z.isDisabled()||M.stopPropagation()})},e.prototype.clear=function(){var M=this.$selection.find(\".select2-selection__rendered\");M.empty(),M.removeAttr(\"title\")},e.prototype.display=function(M,b){var p=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(p(M,b))},e.prototype.selectionContainer=function(){return M('<li class=\"select2-selection__choice\"><button type=\"button\" class=\"select2-selection__choice__remove\" tabindex=\"-1\"><span aria-hidden=\"true\">&times;</span></button><span class=\"select2-selection__choice__display\"></span></li>')},e.prototype.update=function(M){if(this.clear(),0!==M.length){for(var b=[],e=this.$selection.find(\".select2-selection__rendered\").attr(\"id\")+\"-choice-\",o=0;o<M.length;o++){var z=M[o],t=this.selectionContainer(),c=this.display(z,t),n=e+p.generateChars(4)+\"-\";z.id?n+=z.id:n+=p.generateChars(4),t.find(\".select2-selection__choice__display\").append(c).attr(\"id\",n);var O=z.title||z.text;O&&t.attr(\"title\",O);var i=this.options.get(\"translations\").get(\"removeItem\"),r=t.find(\".select2-selection__choice__remove\");r.attr(\"title\",i()),r.attr(\"aria-label\",i()),r.attr(\"aria-describedby\",n),p.StoreData(t[0],\"data\",z),b.push(t)}this.$selection.find(\".select2-selection__rendered\").append(b)}},e}),b.define(\"select2/selection/placeholder\",[],function(){function M(M,b,p){this.placeholder=this.normalizePlaceholder(p.get(\"placeholder\")),M.call(this,b,p)}return M.prototype.normalizePlaceholder=function(M,b){return\"string\"==typeof b&&(b={id:\"\",text:b}),b},M.prototype.createPlaceholder=function(M,b){var p=this.selectionContainer();p.html(this.display(b)),p[0].classList.add(\"select2-selection__placeholder\"),p[0].classList.remove(\"select2-selection__choice\");var e=b.title||b.text||p.text();return this.$selection.find(\".select2-selection__rendered\").attr(\"title\",e),p},M.prototype.update=function(M,b){var p=1==b.length&&b[0].id!=this.placeholder.id;if(b.length>1||p)return M.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(e)},M}),b.define(\"select2/selection/allowClear\",[\"jquery\",\"../keys\",\"../utils\"],function(M,b,p){function e(){}return e.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),null==this.placeholder&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",function(M){e._handleClear(M)}),b.on(\"keypress\",function(M){e._handleKeyboardClear(M,b)})},e.prototype._handleClear=function(M,b){if(!this.isDisabled()){var e=this.$selection.find(\".select2-selection__clear\");if(0!==e.length){b.stopPropagation();var o=p.GetData(e[0],\"data\"),z=this.$element.val();this.$element.val(this.placeholder.id);var t={data:o};if(this.trigger(\"clear\",t),t.prevented)this.$element.val(z);else{for(var c=0;c<o.length;c++)if(t={data:o[c]},this.trigger(\"unselect\",t),t.prevented)return void this.$element.val(z);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},e.prototype._handleKeyboardClear=function(M,p,e){e.isOpen()||p.which!=b.DELETE&&p.which!=b.BACKSPACE||this._handleClear(p)},e.prototype.update=function(b,e){if(b.call(this,e),this.$selection.find(\".select2-selection__clear\").remove(),this.$selection[0].classList.remove(\"select2-selection--clearable\"),!(this.$selection.find(\".select2-selection__placeholder\").length>0||0===e.length)){var o=this.$selection.find(\".select2-selection__rendered\").attr(\"id\"),z=this.options.get(\"translations\").get(\"removeAllItems\"),t=M('<button type=\"button\" class=\"select2-selection__clear\" tabindex=\"-1\"><span aria-hidden=\"true\">&times;</span></button>');t.attr(\"title\",z()),t.attr(\"aria-label\",z()),t.attr(\"aria-describedby\",o),p.StoreData(t[0],\"data\",e),this.$selection.prepend(t),this.$selection[0].classList.add(\"select2-selection--clearable\")}},e}),b.define(\"select2/selection/search\",[\"jquery\",\"../utils\",\"../keys\"],function(M,b,p){function e(M,b,p){M.call(this,b,p)}return e.prototype.render=function(b){var p=this.options.get(\"translations\").get(\"search\"),e=M('<span class=\"select2-search select2-search--inline\"><textarea class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" ></textarea></span>');this.$searchContainer=e,this.$search=e.find(\"textarea\"),this.$search.prop(\"autocomplete\",this.options.get(\"autocomplete\")),this.$search.attr(\"aria-label\",p());var o=b.call(this);return this._transferTabIndex(),o.append(this.$searchContainer),o},e.prototype.bind=function(M,e,o){var z=this,t=e.id+\"-results\",c=e.id+\"-container\";M.call(this,e,o),z.$search.attr(\"aria-describedby\",c),e.on(\"open\",function(){z.$search.attr(\"aria-controls\",t),z.$search.trigger(\"focus\")}),e.on(\"close\",function(){z.$search.val(\"\"),z.resizeSearch(),z.$search.removeAttr(\"aria-controls\"),z.$search.removeAttr(\"aria-activedescendant\"),z.$search.trigger(\"focus\")}),e.on(\"enable\",function(){z.$search.prop(\"disabled\",!1),z._transferTabIndex()}),e.on(\"disable\",function(){z.$search.prop(\"disabled\",!0)}),e.on(\"focus\",function(M){z.$search.trigger(\"focus\")}),e.on(\"results:focus\",function(M){M.data._resultId?z.$search.attr(\"aria-activedescendant\",M.data._resultId):z.$search.removeAttr(\"aria-activedescendant\")}),this.$selection.on(\"focusin\",\".select2-search--inline\",function(M){z.trigger(\"focus\",M)}),this.$selection.on(\"focusout\",\".select2-search--inline\",function(M){z._handleBlur(M)}),this.$selection.on(\"keydown\",\".select2-search--inline\",function(M){if(M.stopPropagation(),z.trigger(\"keypress\",M),z._keyUpPrevented=M.isDefaultPrevented(),M.which===p.BACKSPACE&&\"\"===z.$search.val()){var e=z.$selection.find(\".select2-selection__choice\").last();if(e.length>0){var o=b.GetData(e[0],\"data\");z.searchRemoveChoice(o),M.preventDefault()}}}),this.$selection.on(\"click\",\".select2-search--inline\",function(M){z.$search.val()&&M.stopPropagation()});var n=document.documentMode,O=n&&n<=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",function(M){O?z.$selection.off(\"input.search input.searchcheck\"):z.$selection.off(\"keyup.search\")}),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",function(M){if(O&&\"input\"===M.type)z.$selection.off(\"input.search input.searchcheck\");else{var b=M.which;b!=p.SHIFT&&b!=p.CTRL&&b!=p.ALT&&b!=p.TAB&&z.handleSearch(M)}})},e.prototype._transferTabIndex=function(M){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},e.prototype.createPlaceholder=function(M,b){this.$search.attr(\"placeholder\",b.text)},e.prototype.update=function(M,b){var p=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),M.call(this,b),this.resizeSearch(),p&&this.$search.trigger(\"focus\")},e.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var M=this.$search.val();this.trigger(\"query\",{term:M})}this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(M,b){this.trigger(\"unselect\",{data:b}),this.$search.val(b.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var M=\"100%\";\"\"===this.$search.attr(\"placeholder\")&&(M=.75*(this.$search.val().length+1)+\"em\");this.$search.css(\"width\",M)},e}),b.define(\"select2/selection/selectionCss\",[\"../utils\"],function(M){function b(){}return b.prototype.render=function(b){var p=b.call(this),e=this.options.get(\"selectionCssClass\")||\"\";return-1!==e.indexOf(\":all:\")&&(e=e.replace(\":all:\",\"\"),M.copyNonInternalCssClasses(p[0],this.$element[0])),p.addClass(e),p},b}),b.define(\"select2/selection/eventRelay\",[\"jquery\"],function(M){function b(){}return b.prototype.bind=function(b,p,e){var o=this,z=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],t=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];b.call(this,p,e),p.on(\"*\",function(b,p){if(-1!==z.indexOf(b)){p=p||{};var e=M.Event(\"select2:\"+b,{params:p});o.$element.trigger(e),-1!==t.indexOf(b)&&(p.prevented=e.isDefaultPrevented())}})},b}),b.define(\"select2/translation\",[\"jquery\",\"require\"],function(M,b){function p(M){this.dict=M||{}}return p.prototype.all=function(){return this.dict},p.prototype.get=function(M){return this.dict[M]},p.prototype.extend=function(b){this.dict=M.extend({},b.all(),this.dict)},p._cache={},p.loadPath=function(M){if(!(M in p._cache)){var e=b(M);p._cache[M]=e}return new p(p._cache[M])},p}),b.define(\"select2/diacritics\",[],function(){return{\"Ⓐ\":\"A\",\"Ａ\":\"A\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ầ\":\"A\",\"Ấ\":\"A\",\"Ẫ\":\"A\",\"Ẩ\":\"A\",\"Ã\":\"A\",\"Ā\":\"A\",\"Ă\":\"A\",\"Ằ\":\"A\",\"Ắ\":\"A\",\"Ẵ\":\"A\",\"Ẳ\":\"A\",\"Ȧ\":\"A\",\"Ǡ\":\"A\",\"Ä\":\"A\",\"Ǟ\":\"A\",\"Ả\":\"A\",\"Å\":\"A\",\"Ǻ\":\"A\",\"Ǎ\":\"A\",\"Ȁ\":\"A\",\"Ȃ\":\"A\",\"Ạ\":\"A\",\"Ậ\":\"A\",\"Ặ\":\"A\",\"Ḁ\":\"A\",\"Ą\":\"A\",\"Ⱥ\":\"A\",\"Ɐ\":\"A\",\"Ꜳ\":\"AA\",\"Æ\":\"AE\",\"Ǽ\":\"AE\",\"Ǣ\":\"AE\",\"Ꜵ\":\"AO\",\"Ꜷ\":\"AU\",\"Ꜹ\":\"AV\",\"Ꜻ\":\"AV\",\"Ꜽ\":\"AY\",\"Ⓑ\":\"B\",\"Ｂ\":\"B\",\"Ḃ\":\"B\",\"Ḅ\":\"B\",\"Ḇ\":\"B\",\"Ƀ\":\"B\",\"Ƃ\":\"B\",\"Ɓ\":\"B\",\"Ⓒ\":\"C\",\"Ｃ\":\"C\",\"Ć\":\"C\",\"Ĉ\":\"C\",\"Ċ\":\"C\",\"Č\":\"C\",\"Ç\":\"C\",\"Ḉ\":\"C\",\"Ƈ\":\"C\",\"Ȼ\":\"C\",\"Ꜿ\":\"C\",\"Ⓓ\":\"D\",\"Ｄ\":\"D\",\"Ḋ\":\"D\",\"Ď\":\"D\",\"Ḍ\":\"D\",\"Ḑ\":\"D\",\"Ḓ\":\"D\",\"Ḏ\":\"D\",\"Đ\":\"D\",\"Ƌ\":\"D\",\"Ɗ\":\"D\",\"Ɖ\":\"D\",\"Ꝺ\":\"D\",\"Ǳ\":\"DZ\",\"Ǆ\":\"DZ\",\"ǲ\":\"Dz\",\"ǅ\":\"Dz\",\"Ⓔ\":\"E\",\"Ｅ\":\"E\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ề\":\"E\",\"Ế\":\"E\",\"Ễ\":\"E\",\"Ể\":\"E\",\"Ẽ\":\"E\",\"Ē\":\"E\",\"Ḕ\":\"E\",\"Ḗ\":\"E\",\"Ĕ\":\"E\",\"Ė\":\"E\",\"Ë\":\"E\",\"Ẻ\":\"E\",\"Ě\":\"E\",\"Ȅ\":\"E\",\"Ȇ\":\"E\",\"Ẹ\":\"E\",\"Ệ\":\"E\",\"Ȩ\":\"E\",\"Ḝ\":\"E\",\"Ę\":\"E\",\"Ḙ\":\"E\",\"Ḛ\":\"E\",\"Ɛ\":\"E\",\"Ǝ\":\"E\",\"Ⓕ\":\"F\",\"Ｆ\":\"F\",\"Ḟ\":\"F\",\"Ƒ\":\"F\",\"Ꝼ\":\"F\",\"Ⓖ\":\"G\",\"Ｇ\":\"G\",\"Ǵ\":\"G\",\"Ĝ\":\"G\",\"Ḡ\":\"G\",\"Ğ\":\"G\",\"Ġ\":\"G\",\"Ǧ\":\"G\",\"Ģ\":\"G\",\"Ǥ\":\"G\",\"Ɠ\":\"G\",\"Ꞡ\":\"G\",\"Ᵹ\":\"G\",\"Ꝿ\":\"G\",\"Ⓗ\":\"H\",\"Ｈ\":\"H\",\"Ĥ\":\"H\",\"Ḣ\":\"H\",\"Ḧ\":\"H\",\"Ȟ\":\"H\",\"Ḥ\":\"H\",\"Ḩ\":\"H\",\"Ḫ\":\"H\",\"Ħ\":\"H\",\"Ⱨ\":\"H\",\"Ⱶ\":\"H\",\"Ɥ\":\"H\",\"Ⓘ\":\"I\",\"Ｉ\":\"I\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ĩ\":\"I\",\"Ī\":\"I\",\"Ĭ\":\"I\",\"İ\":\"I\",\"Ï\":\"I\",\"Ḯ\":\"I\",\"Ỉ\":\"I\",\"Ǐ\":\"I\",\"Ȉ\":\"I\",\"Ȋ\":\"I\",\"Ị\":\"I\",\"Į\":\"I\",\"Ḭ\":\"I\",\"Ɨ\":\"I\",\"Ⓙ\":\"J\",\"Ｊ\":\"J\",\"Ĵ\":\"J\",\"Ɉ\":\"J\",\"Ⓚ\":\"K\",\"Ｋ\":\"K\",\"Ḱ\":\"K\",\"Ǩ\":\"K\",\"Ḳ\":\"K\",\"Ķ\":\"K\",\"Ḵ\":\"K\",\"Ƙ\":\"K\",\"Ⱪ\":\"K\",\"Ꝁ\":\"K\",\"Ꝃ\":\"K\",\"Ꝅ\":\"K\",\"Ꞣ\":\"K\",\"Ⓛ\":\"L\",\"Ｌ\":\"L\",\"Ŀ\":\"L\",\"Ĺ\":\"L\",\"Ľ\":\"L\",\"Ḷ\":\"L\",\"Ḹ\":\"L\",\"Ļ\":\"L\",\"Ḽ\":\"L\",\"Ḻ\":\"L\",\"Ł\":\"L\",\"Ƚ\":\"L\",\"Ɫ\":\"L\",\"Ⱡ\":\"L\",\"Ꝉ\":\"L\",\"Ꝇ\":\"L\",\"Ꞁ\":\"L\",\"Ǉ\":\"LJ\",\"ǈ\":\"Lj\",\"Ⓜ\":\"M\",\"Ｍ\":\"M\",\"Ḿ\":\"M\",\"Ṁ\":\"M\",\"Ṃ\":\"M\",\"Ɱ\":\"M\",\"Ɯ\":\"M\",\"Ⓝ\":\"N\",\"Ｎ\":\"N\",\"Ǹ\":\"N\",\"Ń\":\"N\",\"Ñ\":\"N\",\"Ṅ\":\"N\",\"Ň\":\"N\",\"Ṇ\":\"N\",\"Ņ\":\"N\",\"Ṋ\":\"N\",\"Ṉ\":\"N\",\"Ƞ\":\"N\",\"Ɲ\":\"N\",\"Ꞑ\":\"N\",\"Ꞥ\":\"N\",\"Ǌ\":\"NJ\",\"ǋ\":\"Nj\",\"Ⓞ\":\"O\",\"Ｏ\":\"O\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Ồ\":\"O\",\"Ố\":\"O\",\"Ỗ\":\"O\",\"Ổ\":\"O\",\"Õ\":\"O\",\"Ṍ\":\"O\",\"Ȭ\":\"O\",\"Ṏ\":\"O\",\"Ō\":\"O\",\"Ṑ\":\"O\",\"Ṓ\":\"O\",\"Ŏ\":\"O\",\"Ȯ\":\"O\",\"Ȱ\":\"O\",\"Ö\":\"O\",\"Ȫ\":\"O\",\"Ỏ\":\"O\",\"Ő\":\"O\",\"Ǒ\":\"O\",\"Ȍ\":\"O\",\"Ȏ\":\"O\",\"Ơ\":\"O\",\"Ờ\":\"O\",\"Ớ\":\"O\",\"Ỡ\":\"O\",\"Ở\":\"O\",\"Ợ\":\"O\",\"Ọ\":\"O\",\"Ộ\":\"O\",\"Ǫ\":\"O\",\"Ǭ\":\"O\",\"Ø\":\"O\",\"Ǿ\":\"O\",\"Ɔ\":\"O\",\"Ɵ\":\"O\",\"Ꝋ\":\"O\",\"Ꝍ\":\"O\",\"Œ\":\"OE\",\"Ƣ\":\"OI\",\"Ꝏ\":\"OO\",\"Ȣ\":\"OU\",\"Ⓟ\":\"P\",\"Ｐ\":\"P\",\"Ṕ\":\"P\",\"Ṗ\":\"P\",\"Ƥ\":\"P\",\"Ᵽ\":\"P\",\"Ꝑ\":\"P\",\"Ꝓ\":\"P\",\"Ꝕ\":\"P\",\"Ⓠ\":\"Q\",\"Ｑ\":\"Q\",\"Ꝗ\":\"Q\",\"Ꝙ\":\"Q\",\"Ɋ\":\"Q\",\"Ⓡ\":\"R\",\"Ｒ\":\"R\",\"Ŕ\":\"R\",\"Ṙ\":\"R\",\"Ř\":\"R\",\"Ȑ\":\"R\",\"Ȓ\":\"R\",\"Ṛ\":\"R\",\"Ṝ\":\"R\",\"Ŗ\":\"R\",\"Ṟ\":\"R\",\"Ɍ\":\"R\",\"Ɽ\":\"R\",\"Ꝛ\":\"R\",\"Ꞧ\":\"R\",\"Ꞃ\":\"R\",\"Ⓢ\":\"S\",\"Ｓ\":\"S\",\"ẞ\":\"S\",\"Ś\":\"S\",\"Ṥ\":\"S\",\"Ŝ\":\"S\",\"Ṡ\":\"S\",\"Š\":\"S\",\"Ṧ\":\"S\",\"Ṣ\":\"S\",\"Ṩ\":\"S\",\"Ș\":\"S\",\"Ş\":\"S\",\"Ȿ\":\"S\",\"Ꞩ\":\"S\",\"Ꞅ\":\"S\",\"Ⓣ\":\"T\",\"Ｔ\":\"T\",\"Ṫ\":\"T\",\"Ť\":\"T\",\"Ṭ\":\"T\",\"Ț\":\"T\",\"Ţ\":\"T\",\"Ṱ\":\"T\",\"Ṯ\":\"T\",\"Ŧ\":\"T\",\"Ƭ\":\"T\",\"Ʈ\":\"T\",\"Ⱦ\":\"T\",\"Ꞇ\":\"T\",\"Ꜩ\":\"TZ\",\"Ⓤ\":\"U\",\"Ｕ\":\"U\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ũ\":\"U\",\"Ṹ\":\"U\",\"Ū\":\"U\",\"Ṻ\":\"U\",\"Ŭ\":\"U\",\"Ü\":\"U\",\"Ǜ\":\"U\",\"Ǘ\":\"U\",\"Ǖ\":\"U\",\"Ǚ\":\"U\",\"Ủ\":\"U\",\"Ů\":\"U\",\"Ű\":\"U\",\"Ǔ\":\"U\",\"Ȕ\":\"U\",\"Ȗ\":\"U\",\"Ư\":\"U\",\"Ừ\":\"U\",\"Ứ\":\"U\",\"Ữ\":\"U\",\"Ử\":\"U\",\"Ự\":\"U\",\"Ụ\":\"U\",\"Ṳ\":\"U\",\"Ų\":\"U\",\"Ṷ\":\"U\",\"Ṵ\":\"U\",\"Ʉ\":\"U\",\"Ⓥ\":\"V\",\"Ｖ\":\"V\",\"Ṽ\":\"V\",\"Ṿ\":\"V\",\"Ʋ\":\"V\",\"Ꝟ\":\"V\",\"Ʌ\":\"V\",\"Ꝡ\":\"VY\",\"Ⓦ\":\"W\",\"Ｗ\":\"W\",\"Ẁ\":\"W\",\"Ẃ\":\"W\",\"Ŵ\":\"W\",\"Ẇ\":\"W\",\"Ẅ\":\"W\",\"Ẉ\":\"W\",\"Ⱳ\":\"W\",\"Ⓧ\":\"X\",\"Ｘ\":\"X\",\"Ẋ\":\"X\",\"Ẍ\":\"X\",\"Ⓨ\":\"Y\",\"Ｙ\":\"Y\",\"Ỳ\":\"Y\",\"Ý\":\"Y\",\"Ŷ\":\"Y\",\"Ỹ\":\"Y\",\"Ȳ\":\"Y\",\"Ẏ\":\"Y\",\"Ÿ\":\"Y\",\"Ỷ\":\"Y\",\"Ỵ\":\"Y\",\"Ƴ\":\"Y\",\"Ɏ\":\"Y\",\"Ỿ\":\"Y\",\"Ⓩ\":\"Z\",\"Ｚ\":\"Z\",\"Ź\":\"Z\",\"Ẑ\":\"Z\",\"Ż\":\"Z\",\"Ž\":\"Z\",\"Ẓ\":\"Z\",\"Ẕ\":\"Z\",\"Ƶ\":\"Z\",\"Ȥ\":\"Z\",\"Ɀ\":\"Z\",\"Ⱬ\":\"Z\",\"Ꝣ\":\"Z\",\"ⓐ\":\"a\",\"ａ\":\"a\",\"ẚ\":\"a\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ầ\":\"a\",\"ấ\":\"a\",\"ẫ\":\"a\",\"ẩ\":\"a\",\"ã\":\"a\",\"ā\":\"a\",\"ă\":\"a\",\"ằ\":\"a\",\"ắ\":\"a\",\"ẵ\":\"a\",\"ẳ\":\"a\",\"ȧ\":\"a\",\"ǡ\":\"a\",\"ä\":\"a\",\"ǟ\":\"a\",\"ả\":\"a\",\"å\":\"a\",\"ǻ\":\"a\",\"ǎ\":\"a\",\"ȁ\":\"a\",\"ȃ\":\"a\",\"ạ\":\"a\",\"ậ\":\"a\",\"ặ\":\"a\",\"ḁ\":\"a\",\"ą\":\"a\",\"ⱥ\":\"a\",\"ɐ\":\"a\",\"ꜳ\":\"aa\",\"æ\":\"ae\",\"ǽ\":\"ae\",\"ǣ\":\"ae\",\"ꜵ\":\"ao\",\"ꜷ\":\"au\",\"ꜹ\":\"av\",\"ꜻ\":\"av\",\"ꜽ\":\"ay\",\"ⓑ\":\"b\",\"ｂ\":\"b\",\"ḃ\":\"b\",\"ḅ\":\"b\",\"ḇ\":\"b\",\"ƀ\":\"b\",\"ƃ\":\"b\",\"ɓ\":\"b\",\"ⓒ\":\"c\",\"ｃ\":\"c\",\"ć\":\"c\",\"ĉ\":\"c\",\"ċ\":\"c\",\"č\":\"c\",\"ç\":\"c\",\"ḉ\":\"c\",\"ƈ\":\"c\",\"ȼ\":\"c\",\"ꜿ\":\"c\",\"ↄ\":\"c\",\"ⓓ\":\"d\",\"ｄ\":\"d\",\"ḋ\":\"d\",\"ď\":\"d\",\"ḍ\":\"d\",\"ḑ\":\"d\",\"ḓ\":\"d\",\"ḏ\":\"d\",\"đ\":\"d\",\"ƌ\":\"d\",\"ɖ\":\"d\",\"ɗ\":\"d\",\"ꝺ\":\"d\",\"ǳ\":\"dz\",\"ǆ\":\"dz\",\"ⓔ\":\"e\",\"ｅ\":\"e\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ề\":\"e\",\"ế\":\"e\",\"ễ\":\"e\",\"ể\":\"e\",\"ẽ\":\"e\",\"ē\":\"e\",\"ḕ\":\"e\",\"ḗ\":\"e\",\"ĕ\":\"e\",\"ė\":\"e\",\"ë\":\"e\",\"ẻ\":\"e\",\"ě\":\"e\",\"ȅ\":\"e\",\"ȇ\":\"e\",\"ẹ\":\"e\",\"ệ\":\"e\",\"ȩ\":\"e\",\"ḝ\":\"e\",\"ę\":\"e\",\"ḙ\":\"e\",\"ḛ\":\"e\",\"ɇ\":\"e\",\"ɛ\":\"e\",\"ǝ\":\"e\",\"ⓕ\":\"f\",\"ｆ\":\"f\",\"ḟ\":\"f\",\"ƒ\":\"f\",\"ꝼ\":\"f\",\"ⓖ\":\"g\",\"ｇ\":\"g\",\"ǵ\":\"g\",\"ĝ\":\"g\",\"ḡ\":\"g\",\"ğ\":\"g\",\"ġ\":\"g\",\"ǧ\":\"g\",\"ģ\":\"g\",\"ǥ\":\"g\",\"ɠ\":\"g\",\"ꞡ\":\"g\",\"ᵹ\":\"g\",\"ꝿ\":\"g\",\"ⓗ\":\"h\",\"ｈ\":\"h\",\"ĥ\":\"h\",\"ḣ\":\"h\",\"ḧ\":\"h\",\"ȟ\":\"h\",\"ḥ\":\"h\",\"ḩ\":\"h\",\"ḫ\":\"h\",\"ẖ\":\"h\",\"ħ\":\"h\",\"ⱨ\":\"h\",\"ⱶ\":\"h\",\"ɥ\":\"h\",\"ƕ\":\"hv\",\"ⓘ\":\"i\",\"ｉ\":\"i\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ĩ\":\"i\",\"ī\":\"i\",\"ĭ\":\"i\",\"ï\":\"i\",\"ḯ\":\"i\",\"ỉ\":\"i\",\"ǐ\":\"i\",\"ȉ\":\"i\",\"ȋ\":\"i\",\"ị\":\"i\",\"į\":\"i\",\"ḭ\":\"i\",\"ɨ\":\"i\",\"ı\":\"i\",\"ⓙ\":\"j\",\"ｊ\":\"j\",\"ĵ\":\"j\",\"ǰ\":\"j\",\"ɉ\":\"j\",\"ⓚ\":\"k\",\"ｋ\":\"k\",\"ḱ\":\"k\",\"ǩ\":\"k\",\"ḳ\":\"k\",\"ķ\":\"k\",\"ḵ\":\"k\",\"ƙ\":\"k\",\"ⱪ\":\"k\",\"ꝁ\":\"k\",\"ꝃ\":\"k\",\"ꝅ\":\"k\",\"ꞣ\":\"k\",\"ⓛ\":\"l\",\"ｌ\":\"l\",\"ŀ\":\"l\",\"ĺ\":\"l\",\"ľ\":\"l\",\"ḷ\":\"l\",\"ḹ\":\"l\",\"ļ\":\"l\",\"ḽ\":\"l\",\"ḻ\":\"l\",\"ſ\":\"l\",\"ł\":\"l\",\"ƚ\":\"l\",\"ɫ\":\"l\",\"ⱡ\":\"l\",\"ꝉ\":\"l\",\"ꞁ\":\"l\",\"ꝇ\":\"l\",\"ǉ\":\"lj\",\"ⓜ\":\"m\",\"ｍ\":\"m\",\"ḿ\":\"m\",\"ṁ\":\"m\",\"ṃ\":\"m\",\"ɱ\":\"m\",\"ɯ\":\"m\",\"ⓝ\":\"n\",\"ｎ\":\"n\",\"ǹ\":\"n\",\"ń\":\"n\",\"ñ\":\"n\",\"ṅ\":\"n\",\"ň\":\"n\",\"ṇ\":\"n\",\"ņ\":\"n\",\"ṋ\":\"n\",\"ṉ\":\"n\",\"ƞ\":\"n\",\"ɲ\":\"n\",\"ŉ\":\"n\",\"ꞑ\":\"n\",\"ꞥ\":\"n\",\"ǌ\":\"nj\",\"ⓞ\":\"o\",\"ｏ\":\"o\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"ồ\":\"o\",\"ố\":\"o\",\"ỗ\":\"o\",\"ổ\":\"o\",\"õ\":\"o\",\"ṍ\":\"o\",\"ȭ\":\"o\",\"ṏ\":\"o\",\"ō\":\"o\",\"ṑ\":\"o\",\"ṓ\":\"o\",\"ŏ\":\"o\",\"ȯ\":\"o\",\"ȱ\":\"o\",\"ö\":\"o\",\"ȫ\":\"o\",\"ỏ\":\"o\",\"ő\":\"o\",\"ǒ\":\"o\",\"ȍ\":\"o\",\"ȏ\":\"o\",\"ơ\":\"o\",\"ờ\":\"o\",\"ớ\":\"o\",\"ỡ\":\"o\",\"ở\":\"o\",\"ợ\":\"o\",\"ọ\":\"o\",\"ộ\":\"o\",\"ǫ\":\"o\",\"ǭ\":\"o\",\"ø\":\"o\",\"ǿ\":\"o\",\"ɔ\":\"o\",\"ꝋ\":\"o\",\"ꝍ\":\"o\",\"ɵ\":\"o\",\"œ\":\"oe\",\"ƣ\":\"oi\",\"ȣ\":\"ou\",\"ꝏ\":\"oo\",\"ⓟ\":\"p\",\"ｐ\":\"p\",\"ṕ\":\"p\",\"ṗ\":\"p\",\"ƥ\":\"p\",\"ᵽ\":\"p\",\"ꝑ\":\"p\",\"ꝓ\":\"p\",\"ꝕ\":\"p\",\"ⓠ\":\"q\",\"ｑ\":\"q\",\"ɋ\":\"q\",\"ꝗ\":\"q\",\"ꝙ\":\"q\",\"ⓡ\":\"r\",\"ｒ\":\"r\",\"ŕ\":\"r\",\"ṙ\":\"r\",\"ř\":\"r\",\"ȑ\":\"r\",\"ȓ\":\"r\",\"ṛ\":\"r\",\"ṝ\":\"r\",\"ŗ\":\"r\",\"ṟ\":\"r\",\"ɍ\":\"r\",\"ɽ\":\"r\",\"ꝛ\":\"r\",\"ꞧ\":\"r\",\"ꞃ\":\"r\",\"ⓢ\":\"s\",\"ｓ\":\"s\",\"ß\":\"s\",\"ś\":\"s\",\"ṥ\":\"s\",\"ŝ\":\"s\",\"ṡ\":\"s\",\"š\":\"s\",\"ṧ\":\"s\",\"ṣ\":\"s\",\"ṩ\":\"s\",\"ș\":\"s\",\"ş\":\"s\",\"ȿ\":\"s\",\"ꞩ\":\"s\",\"ꞅ\":\"s\",\"ẛ\":\"s\",\"ⓣ\":\"t\",\"ｔ\":\"t\",\"ṫ\":\"t\",\"ẗ\":\"t\",\"ť\":\"t\",\"ṭ\":\"t\",\"ț\":\"t\",\"ţ\":\"t\",\"ṱ\":\"t\",\"ṯ\":\"t\",\"ŧ\":\"t\",\"ƭ\":\"t\",\"ʈ\":\"t\",\"ⱦ\":\"t\",\"ꞇ\":\"t\",\"ꜩ\":\"tz\",\"ⓤ\":\"u\",\"ｕ\":\"u\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ũ\":\"u\",\"ṹ\":\"u\",\"ū\":\"u\",\"ṻ\":\"u\",\"ŭ\":\"u\",\"ü\":\"u\",\"ǜ\":\"u\",\"ǘ\":\"u\",\"ǖ\":\"u\",\"ǚ\":\"u\",\"ủ\":\"u\",\"ů\":\"u\",\"ű\":\"u\",\"ǔ\":\"u\",\"ȕ\":\"u\",\"ȗ\":\"u\",\"ư\":\"u\",\"ừ\":\"u\",\"ứ\":\"u\",\"ữ\":\"u\",\"ử\":\"u\",\"ự\":\"u\",\"ụ\":\"u\",\"ṳ\":\"u\",\"ų\":\"u\",\"ṷ\":\"u\",\"ṵ\":\"u\",\"ʉ\":\"u\",\"ⓥ\":\"v\",\"ｖ\":\"v\",\"ṽ\":\"v\",\"ṿ\":\"v\",\"ʋ\":\"v\",\"ꝟ\":\"v\",\"ʌ\":\"v\",\"ꝡ\":\"vy\",\"ⓦ\":\"w\",\"ｗ\":\"w\",\"ẁ\":\"w\",\"ẃ\":\"w\",\"ŵ\":\"w\",\"ẇ\":\"w\",\"ẅ\":\"w\",\"ẘ\":\"w\",\"ẉ\":\"w\",\"ⱳ\":\"w\",\"ⓧ\":\"x\",\"ｘ\":\"x\",\"ẋ\":\"x\",\"ẍ\":\"x\",\"ⓨ\":\"y\",\"ｙ\":\"y\",\"ỳ\":\"y\",\"ý\":\"y\",\"ŷ\":\"y\",\"ỹ\":\"y\",\"ȳ\":\"y\",\"ẏ\":\"y\",\"ÿ\":\"y\",\"ỷ\":\"y\",\"ẙ\":\"y\",\"ỵ\":\"y\",\"ƴ\":\"y\",\"ɏ\":\"y\",\"ỿ\":\"y\",\"ⓩ\":\"z\",\"ｚ\":\"z\",\"ź\":\"z\",\"ẑ\":\"z\",\"ż\":\"z\",\"ž\":\"z\",\"ẓ\":\"z\",\"ẕ\":\"z\",\"ƶ\":\"z\",\"ȥ\":\"z\",\"ɀ\":\"z\",\"ⱬ\":\"z\",\"ꝣ\":\"z\",\"Ά\":\"Α\",\"Έ\":\"Ε\",\"Ή\":\"Η\",\"Ί\":\"Ι\",\"Ϊ\":\"Ι\",\"Ό\":\"Ο\",\"Ύ\":\"Υ\",\"Ϋ\":\"Υ\",\"Ώ\":\"Ω\",\"ά\":\"α\",\"έ\":\"ε\",\"ή\":\"η\",\"ί\":\"ι\",\"ϊ\":\"ι\",\"ΐ\":\"ι\",\"ό\":\"ο\",\"ύ\":\"υ\",\"ϋ\":\"υ\",\"ΰ\":\"υ\",\"ώ\":\"ω\",\"ς\":\"σ\",\"’\":\"'\"}}),b.define(\"select2/data/base\",[\"../utils\"],function(M){function b(M,p){b.__super__.constructor.call(this)}return M.Extend(b,M.Observable),b.prototype.current=function(M){throw new Error(\"The `current` method must be defined in child classes.\")},b.prototype.query=function(M,b){throw new Error(\"The `query` method must be defined in child classes.\")},b.prototype.bind=function(M,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,p){var e=b.id+\"-result-\";return e+=M.generateChars(4),null!=p.id?e+=\"-\"+p.id.toString():e+=\"-\"+M.generateChars(4),e},b}),b.define(\"select2/data/select\",[\"./base\",\"../utils\",\"jquery\"],function(M,b,p){function e(M,b){this.$element=M,this.options=b,e.__super__.constructor.call(this)}return b.Extend(e,M),e.prototype.current=function(M){var b=this;M(Array.prototype.map.call(this.$element[0].querySelectorAll(\":checked\"),function(M){return b.item(p(M))}))},e.prototype.select=function(M){var b=this;if(M.selected=!0,null!=M.element&&\"option\"===M.element.tagName.toLowerCase())return M.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");if(this.$element.prop(\"multiple\"))this.current(function(p){var e=[];(M=[M]).push.apply(M,p);for(var o=0;o<M.length;o++){var z=M[o].id;-1===e.indexOf(z)&&e.push(z)}b.$element.val(e),b.$element.trigger(\"input\").trigger(\"change\")});else{var p=M.id;this.$element.val(p),this.$element.trigger(\"input\").trigger(\"change\")}},e.prototype.unselect=function(M){var b=this;if(this.$element.prop(\"multiple\")){if(M.selected=!1,null!=M.element&&\"option\"===M.element.tagName.toLowerCase())return M.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current(function(p){for(var e=[],o=0;o<p.length;o++){var z=p[o].id;z!==M.id&&-1===e.indexOf(z)&&e.push(z)}b.$element.val(e),b.$element.trigger(\"input\").trigger(\"change\")})}},e.prototype.bind=function(M,b){var p=this;this.container=M,M.on(\"select\",function(M){p.select(M.data)}),M.on(\"unselect\",function(M){p.unselect(M.data)})},e.prototype.destroy=function(){this.$element.find(\"*\").each(function(){b.RemoveData(this)})},e.prototype.query=function(M,b){var e=[],o=this;this.$element.children().each(function(){if(\"option\"===this.tagName.toLowerCase()||\"optgroup\"===this.tagName.toLowerCase()){var b=p(this),z=o.item(b),t=o.matches(M,z);null!==t&&e.push(t)}}),b({results:e})},e.prototype.addOptions=function(M){this.$element.append(M)},e.prototype.option=function(M){var e;M.children?(e=document.createElement(\"optgroup\")).label=M.text:void 0!==(e=document.createElement(\"option\")).textContent?e.textContent=M.text:e.innerText=M.text,void 0!==M.id&&(e.value=M.id),M.disabled&&(e.disabled=!0),M.selected&&(e.selected=!0),M.title&&(e.title=M.title);var o=this._normalizeItem(M);return o.element=e,b.StoreData(e,\"data\",o),p(e)},e.prototype.item=function(M){var e={};if(null!=(e=b.GetData(M[0],\"data\")))return e;var o=M[0];if(\"option\"===o.tagName.toLowerCase())e={id:M.val(),text:M.text(),disabled:M.prop(\"disabled\"),selected:M.prop(\"selected\"),title:M.prop(\"title\")};else if(\"optgroup\"===o.tagName.toLowerCase()){e={text:M.prop(\"label\"),children:[],title:M.prop(\"title\")};for(var z=M.children(\"option\"),t=[],c=0;c<z.length;c++){var n=p(z[c]),O=this.item(n);t.push(O)}e.children=t}return(e=this._normalizeItem(e)).element=M[0],b.StoreData(M[0],\"data\",e),e},e.prototype._normalizeItem=function(M){M!==Object(M)&&(M={id:M,text:M});return null!=(M=p.extend({},{text:\"\"},M)).id&&(M.id=M.id.toString()),null!=M.text&&(M.text=M.text.toString()),null==M._resultId&&M.id&&null!=this.container&&(M._resultId=this.generateResultId(this.container,M)),p.extend({},{selected:!1,disabled:!1},M)},e.prototype.matches=function(M,b){return this.options.get(\"matcher\")(M,b)},e}),b.define(\"select2/data/array\",[\"./select\",\"../utils\",\"jquery\"],function(M,b,p){function e(M,b){this._dataToConvert=b.get(\"data\")||[],e.__super__.constructor.call(this,M,b)}return b.Extend(e,M),e.prototype.bind=function(M,b){e.__super__.bind.call(this,M,b),this.addOptions(this.convertToOptions(this._dataToConvert))},e.prototype.select=function(M){var b=this.$element.find(\"option\").filter(function(b,p){return p.value==M.id.toString()});0===b.length&&(b=this.option(M),this.addOptions(b)),e.__super__.select.call(this,M)},e.prototype.convertToOptions=function(M){var b=this,e=this.$element.find(\"option\"),o=e.map(function(){return b.item(p(this)).id}).get(),z=[];function t(M){return function(){return p(this).val()==M.id}}for(var c=0;c<M.length;c++){var n=this._normalizeItem(M[c]);if(o.indexOf(n.id)>=0){var O=e.filter(t(n)),i=this.item(O),r=p.extend(!0,{},n,i),a=this.option(r);O.replaceWith(a)}else{var s=this.option(n);if(n.children){var A=this.convertToOptions(n.children);s.append(A)}z.push(s)}}return z},e}),b.define(\"select2/data/ajax\",[\"./array\",\"../utils\",\"jquery\"],function(M,b,p){function e(M,b){this.ajaxOptions=this._applyDefaults(b.get(\"ajax\")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),e.__super__.constructor.call(this,M,b)}return b.Extend(e,M),e.prototype._applyDefaults=function(M){var b={data:function(M){return p.extend({},M,{q:M.term})},transport:function(M,b,e){var o=p.ajax(M);return o.then(b),o.fail(e),o}};return p.extend({},b,M,!0)},e.prototype.processResults=function(M){return M},e.prototype.query=function(M,b){var e=this;null!=this._request&&(\"function\"==typeof this._request.abort&&this._request.abort(),this._request=null);var o=p.extend({type:\"GET\"},this.ajaxOptions);function z(){var p=o.transport(o,function(p){var o=e.processResults(p,M);e.options.get(\"debug\")&&window.console&&console.error&&(o&&o.results&&Array.isArray(o.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),b(o)},function(){(!(\"status\"in p)||0!==p.status&&\"0\"!==p.status)&&e.trigger(\"results:message\",{message:\"errorLoading\"})});e._request=p}\"function\"==typeof o.url&&(o.url=o.url.call(this.$element,M)),\"function\"==typeof o.data&&(o.data=o.data.call(this.$element,M)),this.ajaxOptions.delay&&null!=M.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(z,this.ajaxOptions.delay)):z()},e}),b.define(\"select2/data/tags\",[\"jquery\"],function(M){function b(M,b,p){var e=p.get(\"tags\"),o=p.get(\"createTag\");void 0!==o&&(this.createTag=o);var z=p.get(\"insertTag\");if(void 0!==z&&(this.insertTag=z),M.call(this,b,p),Array.isArray(e))for(var t=0;t<e.length;t++){var c=e[t],n=this._normalizeItem(c),O=this.option(n);this.$element.append(O)}}return b.prototype.query=function(M,b,p){var e=this;this._removeOldTags(),null!=b.term&&null==b.page?M.call(this,b,function M(o,z){for(var t=o.results,c=0;c<t.length;c++){var n=t[c],O=null!=n.children&&!M({results:n.children},!0);if((n.text||\"\").toUpperCase()===(b.term||\"\").toUpperCase()||O)return!z&&(o.data=t,void p(o))}if(z)return!0;var i=e.createTag(b);if(null!=i){var r=e.option(i);r.attr(\"data-select2-tag\",\"true\"),e.addOptions([r]),e.insertTag(t,i)}o.results=t,p(o)}):M.call(this,b,p)},b.prototype.createTag=function(M,b){if(null==b.term)return null;var p=b.term.trim();return\"\"===p?null:{id:p,text:p}},b.prototype.insertTag=function(M,b,p){b.unshift(p)},b.prototype._removeOldTags=function(b){this.$element.find(\"option[data-select2-tag]\").each(function(){this.selected||M(this).remove()})},b}),b.define(\"select2/data/tokenizer\",[\"jquery\"],function(M){function b(M,b,p){var e=p.get(\"tokenizer\");void 0!==e&&(this.tokenizer=e),M.call(this,b,p)}return b.prototype.bind=function(M,b,p){M.call(this,b,p),this.$search=b.dropdown.$search||b.selection.$search||p.find(\".select2-search__field\")},b.prototype.query=function(b,p,e){var o=this;p.term=p.term||\"\";var z=this.tokenizer(p,this.options,function(b){var p=o._normalizeItem(b);if(!o.$element.find(\"option\").filter(function(){return M(this).val()===p.id}).length){var e=o.option(p);e.attr(\"data-select2-tag\",!0),o._removeOldTags(),o.addOptions([e])}!function(M){o.trigger(\"select\",{data:M})}(p)});z.term!==p.term&&(this.$search.length&&(this.$search.val(z.term),this.$search.trigger(\"focus\")),p.term=z.term),b.call(this,p,e)},b.prototype.tokenizer=function(b,p,e,o){for(var z=e.get(\"tokenSeparators\")||[],t=p.term,c=0,n=this.createTag||function(M){return{id:M.term,text:M.term}};c<t.length;){var O=t[c];if(-1!==z.indexOf(O)){var i=t.substr(0,c),r=n(M.extend({},p,{term:i}));null!=r?(o(r),t=t.substr(c+1)||\"\",c=0):c++}else c++}return{term:t}},b}),b.define(\"select2/data/minimumInputLength\",[],function(){function M(M,b,p){this.minimumInputLength=p.get(\"minimumInputLength\"),M.call(this,b,p)}return M.prototype.query=function(M,b,p){b.term=b.term||\"\",b.term.length<this.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):M.call(this,b,p)},M}),b.define(\"select2/data/maximumInputLength\",[],function(){function M(M,b,p){this.maximumInputLength=p.get(\"maximumInputLength\"),M.call(this,b,p)}return M.prototype.query=function(M,b,p){b.term=b.term||\"\",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):M.call(this,b,p)},M}),b.define(\"select2/data/maximumSelectionLength\",[],function(){function M(M,b,p){this.maximumSelectionLength=p.get(\"maximumSelectionLength\"),M.call(this,b,p)}return M.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on(\"select\",function(){e._checkIfMaximumSelected()})},M.prototype.query=function(M,b,p){var e=this;this._checkIfMaximumSelected(function(){M.call(e,b,p)})},M.prototype._checkIfMaximumSelected=function(M,b){var p=this;this.current(function(M){var e=null!=M?M.length:0;p.maximumSelectionLength>0&&e>=p.maximumSelectionLength?p.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:p.maximumSelectionLength}}):b&&b()})},M}),b.define(\"select2/dropdown\",[\"jquery\",\"./utils\"],function(M,b){function p(M,b){this.$element=M,this.options=b,p.__super__.constructor.call(this)}return b.Extend(p,b.Observable),p.prototype.render=function(){var b=M('<span class=\"select2-dropdown\"><span class=\"select2-results\"></span></span>');return b.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=b,b},p.prototype.bind=function(){},p.prototype.position=function(M,b){},p.prototype.destroy=function(){this.$dropdown.remove()},p}),b.define(\"select2/dropdown/search\",[\"jquery\"],function(M){function b(){}return b.prototype.render=function(b){var p=b.call(this),e=this.options.get(\"translations\").get(\"search\"),o=M('<span class=\"select2-search select2-search--dropdown\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></span>');return this.$searchContainer=o,this.$search=o.find(\"input\"),this.$search.prop(\"autocomplete\",this.options.get(\"autocomplete\")),this.$search.attr(\"aria-label\",e()),p.prepend(o),p},b.prototype.bind=function(b,p,e){var o=this,z=p.id+\"-results\";b.call(this,p,e),this.$search.on(\"keydown\",function(M){o.trigger(\"keypress\",M),o._keyUpPrevented=M.isDefaultPrevented()}),this.$search.on(\"input\",function(b){M(this).off(\"keyup\")}),this.$search.on(\"keyup input\",function(M){o.handleSearch(M)}),p.on(\"open\",function(){o.$search.attr(\"tabindex\",0),o.$search.attr(\"aria-controls\",z),o.$search.trigger(\"focus\"),window.setTimeout(function(){o.$search.trigger(\"focus\")},0)}),p.on(\"close\",function(){o.$search.attr(\"tabindex\",-1),o.$search.removeAttr(\"aria-controls\"),o.$search.removeAttr(\"aria-activedescendant\"),o.$search.val(\"\"),o.$search.trigger(\"blur\")}),p.on(\"focus\",function(){p.isOpen()||o.$search.trigger(\"focus\")}),p.on(\"results:all\",function(M){null!=M.query.term&&\"\"!==M.query.term||(o.showSearch(M)?o.$searchContainer[0].classList.remove(\"select2-search--hide\"):o.$searchContainer[0].classList.add(\"select2-search--hide\"))}),p.on(\"results:focus\",function(M){M.data._resultId?o.$search.attr(\"aria-activedescendant\",M.data._resultId):o.$search.removeAttr(\"aria-activedescendant\")})},b.prototype.handleSearch=function(M){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger(\"query\",{term:b})}this._keyUpPrevented=!1},b.prototype.showSearch=function(M,b){return!0},b}),b.define(\"select2/dropdown/hidePlaceholder\",[],function(){function M(M,b,p,e){this.placeholder=this.normalizePlaceholder(p.get(\"placeholder\")),M.call(this,b,p,e)}return M.prototype.append=function(M,b){b.results=this.removePlaceholder(b.results),M.call(this,b)},M.prototype.normalizePlaceholder=function(M,b){return\"string\"==typeof b&&(b={id:\"\",text:b}),b},M.prototype.removePlaceholder=function(M,b){for(var p=b.slice(0),e=b.length-1;e>=0;e--){var o=b[e];this.placeholder.id===o.id&&p.splice(e,1)}return p},M}),b.define(\"select2/dropdown/infiniteScroll\",[\"jquery\"],function(M){function b(M,b,p,e){this.lastParams={},M.call(this,b,p,e),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(M,b){this.$loadingMore.remove(),this.loading=!1,M.call(this,b),this.showLoadingMore(b)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},b.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on(\"query\",function(M){e.lastParams=M,e.loading=!0}),b.on(\"query:append\",function(M){e.lastParams=M,e.loading=!0}),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},b.prototype.loadMoreIfNeeded=function(){var b=M.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&b&&(this.$results.offset().top+this.$results.outerHeight(!1)+50>=this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)&&this.loadMore())},b.prototype.loadMore=function(){this.loading=!0;var b=M.extend({},{page:1},this.lastParams);b.page++,this.trigger(\"query:append\",b)},b.prototype.showLoadingMore=function(M,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=M('<li class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\"></li>'),p=this.options.get(\"translations\").get(\"loadingMore\");return b.html(p(this.lastParams)),b},b}),b.define(\"select2/dropdown/attachBody\",[\"jquery\",\"../utils\"],function(M,b){function p(b,p,e){this.$dropdownParent=M(e.get(\"dropdownParent\")||document.body),b.call(this,p,e)}return p.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on(\"open\",function(){e._showDropdown(),e._attachPositioningHandler(b),e._bindContainerResultHandlers(b)}),b.on(\"close\",function(){e._hideDropdown(),e._detachPositioningHandler(b)}),this.$dropdownContainer.on(\"mousedown\",function(M){M.stopPropagation()})},p.prototype.destroy=function(M){M.call(this),this.$dropdownContainer.remove()},p.prototype.position=function(M,b,p){b.attr(\"class\",p.attr(\"class\")),b[0].classList.remove(\"select2\"),b[0].classList.add(\"select2-container--open\"),b.css({position:\"absolute\",top:-999999}),this.$container=p},p.prototype.render=function(b){var p=M(\"<span></span>\"),e=b.call(this);return p.append(e),this.$dropdownContainer=p,p},p.prototype._hideDropdown=function(M){this.$dropdownContainer.detach()},p.prototype._bindContainerResultHandlers=function(M,b){if(!this._containerResultsHandlersBound){var p=this;b.on(\"results:all\",function(){p._positionDropdown(),p._resizeDropdown()}),b.on(\"results:append\",function(){p._positionDropdown(),p._resizeDropdown()}),b.on(\"results:message\",function(){p._positionDropdown(),p._resizeDropdown()}),b.on(\"select\",function(){p._positionDropdown(),p._resizeDropdown()}),b.on(\"unselect\",function(){p._positionDropdown(),p._resizeDropdown()}),this._containerResultsHandlersBound=!0}},p.prototype._attachPositioningHandler=function(p,e){var o=this,z=\"scroll.select2.\"+e.id,t=\"resize.select2.\"+e.id,c=\"orientationchange.select2.\"+e.id,n=this.$container.parents().filter(b.hasScroll);n.each(function(){b.StoreData(this,\"select2-scroll-position\",{x:M(this).scrollLeft(),y:M(this).scrollTop()})}),n.on(z,function(p){var e=b.GetData(this,\"select2-scroll-position\");M(this).scrollTop(e.y)}),M(window).on(z+\" \"+t+\" \"+c,function(M){o._positionDropdown(),o._resizeDropdown()})},p.prototype._detachPositioningHandler=function(p,e){var o=\"scroll.select2.\"+e.id,z=\"resize.select2.\"+e.id,t=\"orientationchange.select2.\"+e.id;this.$container.parents().filter(b.hasScroll).off(o),M(window).off(o+\" \"+z+\" \"+t)},p.prototype._positionDropdown=function(){var b=M(window),p=this.$dropdown[0].classList.contains(\"select2-dropdown--above\"),e=this.$dropdown[0].classList.contains(\"select2-dropdown--below\"),o=null,z=this.$container.offset();z.bottom=z.top+this.$container.outerHeight(!1);var t={height:this.$container.outerHeight(!1)};t.top=z.top,t.bottom=z.top+t.height;var c=this.$dropdown.outerHeight(!1),n=b.scrollTop(),O=b.scrollTop()+b.height(),i=n<z.top-c,r=O>z.bottom+c,a={left:z.left,top:t.bottom},s=this.$dropdownParent;\"static\"===s.css(\"position\")&&(s=s.offsetParent());var A={top:0,left:0};(M.contains(document.body,s[0])||s[0].isConnected)&&(A=s.offset()),a.top-=A.top,a.left-=A.left,p||e||(o=\"below\"),r||!i||p?!i&&r&&p&&(o=\"below\"):o=\"above\",(\"above\"==o||p&&\"below\"!==o)&&(a.top=t.top-A.top-c),null!=o&&(this.$dropdown[0].classList.remove(\"select2-dropdown--below\"),this.$dropdown[0].classList.remove(\"select2-dropdown--above\"),this.$dropdown[0].classList.add(\"select2-dropdown--\"+o),this.$container[0].classList.remove(\"select2-container--below\"),this.$container[0].classList.remove(\"select2-container--above\"),this.$container[0].classList.add(\"select2-container--\"+o)),this.$dropdownContainer.css(a)},p.prototype._resizeDropdown=function(){var M={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(M.minWidth=M.width,M.position=\"relative\",M.width=\"auto\"),this.$dropdown.css(M)},p.prototype._showDropdown=function(M){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},p}),b.define(\"select2/dropdown/minimumResultsForSearch\",[],function(){function M(b){for(var p=0,e=0;e<b.length;e++){var o=b[e];o.children?p+=M(o.children):p++}return p}function b(M,b,p,e){this.minimumResultsForSearch=p.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),M.call(this,b,p,e)}return b.prototype.showSearch=function(b,p){return!(M(p.data.results)<this.minimumResultsForSearch)&&b.call(this,p)},b}),b.define(\"select2/dropdown/selectOnClose\",[\"../utils\"],function(M){function b(){}return b.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on(\"close\",function(M){e._handleSelectOnClose(M)})},b.prototype._handleSelectOnClose=function(b,p){if(p&&null!=p.originalSelect2Event){var e=p.originalSelect2Event;if(\"select\"===e._type||\"unselect\"===e._type)return}var o=this.getHighlightedResults();if(!(o.length<1)){var z=M.GetData(o[0],\"data\");null!=z.element&&z.element.selected||null==z.element&&z.selected||this.trigger(\"select\",{data:z})}},b}),b.define(\"select2/dropdown/closeOnSelect\",[],function(){function M(){}return M.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on(\"select\",function(M){e._selectTriggered(M)}),b.on(\"unselect\",function(M){e._selectTriggered(M)})},M.prototype._selectTriggered=function(M,b){var p=b.originalEvent;p&&(p.ctrlKey||p.metaKey)||this.trigger(\"close\",{originalEvent:p,originalSelect2Event:b})},M}),b.define(\"select2/dropdown/dropdownCss\",[\"../utils\"],function(M){function b(){}return b.prototype.render=function(b){var p=b.call(this),e=this.options.get(\"dropdownCssClass\")||\"\";return-1!==e.indexOf(\":all:\")&&(e=e.replace(\":all:\",\"\"),M.copyNonInternalCssClasses(p[0],this.$element[0])),p.addClass(e),p},b}),b.define(\"select2/dropdown/tagsSearchHighlight\",[\"../utils\"],function(M){function b(){}return b.prototype.highlightFirstItem=function(b){var p=this.$results.find(\".select2-results__option--selectable:not(.select2-results__option--selected)\");if(p.length>0){var e=p.first(),o=M.GetData(e[0],\"data\").element;if(o&&o.getAttribute&&\"true\"===o.getAttribute(\"data-select2-tag\"))return void e.trigger(\"mouseenter\")}b.call(this)},b}),b.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(M){var b=M.input.length-M.maximum,p=\"Please delete \"+b+\" character\";return 1!=b&&(p+=\"s\"),p},inputTooShort:function(M){return\"Please enter \"+(M.minimum-M.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(M){var b=\"You can only select \"+M.maximum+\" item\";return 1!=M.maximum&&(b+=\"s\"),b},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"},removeItem:function(){return\"Remove item\"},search:function(){return\"Search\"}}}),b.define(\"select2/defaults\",[\"jquery\",\"./results\",\"./selection/single\",\"./selection/multiple\",\"./selection/placeholder\",\"./selection/allowClear\",\"./selection/search\",\"./selection/selectionCss\",\"./selection/eventRelay\",\"./utils\",\"./translation\",\"./diacritics\",\"./data/select\",\"./data/array\",\"./data/ajax\",\"./data/tags\",\"./data/tokenizer\",\"./data/minimumInputLength\",\"./data/maximumInputLength\",\"./data/maximumSelectionLength\",\"./dropdown\",\"./dropdown/search\",\"./dropdown/hidePlaceholder\",\"./dropdown/infiniteScroll\",\"./dropdown/attachBody\",\"./dropdown/minimumResultsForSearch\",\"./dropdown/selectOnClose\",\"./dropdown/closeOnSelect\",\"./dropdown/dropdownCss\",\"./dropdown/tagsSearchHighlight\",\"./i18n/en\"],function(M,b,p,e,o,z,t,c,n,O,i,r,a,s,A,d,l,q,u,f,W,h,R,m,g,L,v,N,y,B,X){function w(){this.reset()}return w.prototype.apply=function(i){if(null==(i=M.extend(!0,{},this.defaults,i)).dataAdapter&&(null!=i.ajax?i.dataAdapter=A:null!=i.data?i.dataAdapter=s:i.dataAdapter=a,i.minimumInputLength>0&&(i.dataAdapter=O.Decorate(i.dataAdapter,q)),i.maximumInputLength>0&&(i.dataAdapter=O.Decorate(i.dataAdapter,u)),i.maximumSelectionLength>0&&(i.dataAdapter=O.Decorate(i.dataAdapter,f)),i.tags&&(i.dataAdapter=O.Decorate(i.dataAdapter,d)),null==i.tokenSeparators&&null==i.tokenizer||(i.dataAdapter=O.Decorate(i.dataAdapter,l))),null==i.resultsAdapter&&(i.resultsAdapter=b,null!=i.ajax&&(i.resultsAdapter=O.Decorate(i.resultsAdapter,m)),null!=i.placeholder&&(i.resultsAdapter=O.Decorate(i.resultsAdapter,R)),i.selectOnClose&&(i.resultsAdapter=O.Decorate(i.resultsAdapter,v)),i.tags&&(i.resultsAdapter=O.Decorate(i.resultsAdapter,B))),null==i.dropdownAdapter){if(i.multiple)i.dropdownAdapter=W;else{var r=O.Decorate(W,h);i.dropdownAdapter=r}0!==i.minimumResultsForSearch&&(i.dropdownAdapter=O.Decorate(i.dropdownAdapter,L)),i.closeOnSelect&&(i.dropdownAdapter=O.Decorate(i.dropdownAdapter,N)),null!=i.dropdownCssClass&&(i.dropdownAdapter=O.Decorate(i.dropdownAdapter,y)),i.dropdownAdapter=O.Decorate(i.dropdownAdapter,g)}null==i.selectionAdapter&&(i.multiple?i.selectionAdapter=e:i.selectionAdapter=p,null!=i.placeholder&&(i.selectionAdapter=O.Decorate(i.selectionAdapter,o)),i.allowClear&&(i.selectionAdapter=O.Decorate(i.selectionAdapter,z)),i.multiple&&(i.selectionAdapter=O.Decorate(i.selectionAdapter,t)),null!=i.selectionCssClass&&(i.selectionAdapter=O.Decorate(i.selectionAdapter,c)),i.selectionAdapter=O.Decorate(i.selectionAdapter,n)),i.language=this._resolveLanguage(i.language),i.language.push(\"en\");for(var X=[],w=0;w<i.language.length;w++){var x=i.language[w];-1===X.indexOf(x)&&X.push(x)}return i.language=X,i.translations=this._processTranslations(i.language,i.debug),i},w.prototype.reset=function(){function b(M){return M.replace(/[^\\u0000-\\u007E]/g,function(M){return r[M]||M})}this.defaults={amdLanguageBase:\"./i18n/\",autocomplete:\"off\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:O.escapeMarkup,language:{},matcher:function p(e,o){if(null==e.term||\"\"===e.term.trim())return o;if(o.children&&o.children.length>0){for(var z=M.extend(!0,{},o),t=o.children.length-1;t>=0;t--){null==p(e,o.children[t])&&z.children.splice(t,1)}return z.children.length>0?z:p(e,z)}var c=b(o.text).toUpperCase(),n=b(e.term).toUpperCase();return c.indexOf(n)>-1?o:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(M){return M},templateResult:function(M){return M.text},templateSelection:function(M){return M.text},theme:\"default\",width:\"resolve\"}},w.prototype.applyFromElement=function(M,b){var p=M.language,e=this.defaults.language,o=b.prop(\"lang\"),z=b.closest(\"[lang]\").prop(\"lang\"),t=Array.prototype.concat.call(this._resolveLanguage(o),this._resolveLanguage(p),this._resolveLanguage(e),this._resolveLanguage(z));return M.language=t,M},w.prototype._resolveLanguage=function(b){if(!b)return[];if(M.isEmptyObject(b))return[];if(M.isPlainObject(b))return[b];var p;p=Array.isArray(b)?b:[b];for(var e=[],o=0;o<p.length;o++)if(e.push(p[o]),\"string\"==typeof p[o]&&p[o].indexOf(\"-\")>0){var z=p[o].split(\"-\")[0];e.push(z)}return e},w.prototype._processTranslations=function(b,p){for(var e=new i,o=0;o<b.length;o++){var z=new i,t=b[o];if(\"string\"==typeof t)try{z=i.loadPath(t)}catch(M){try{t=this.defaults.amdLanguageBase+t,z=i.loadPath(t)}catch(M){p&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+t+'\" could not be automatically loaded. A fallback will be used instead.')}}else z=M.isPlainObject(t)?new i(t):t;e.extend(z)}return e},w.prototype.set=function(b,p){var e={};e[M.camelCase(b)]=p;var o=O._convertData(e);M.extend(!0,this.defaults,o)},new w}),b.define(\"select2/options\",[\"jquery\",\"./defaults\",\"./utils\"],function(M,b,p){function e(M,p){this.options=M,null!=p&&this.fromElement(p),null!=p&&(this.options=b.applyFromElement(this.options,p)),this.options=b.apply(this.options)}return e.prototype.fromElement=function(b){var e=[\"select2\"];null==this.options.multiple&&(this.options.multiple=b.prop(\"multiple\")),null==this.options.disabled&&(this.options.disabled=b.prop(\"disabled\")),null==this.options.autocomplete&&b.prop(\"autocomplete\")&&(this.options.autocomplete=b.prop(\"autocomplete\")),null==this.options.dir&&(b.prop(\"dir\")?this.options.dir=b.prop(\"dir\"):b.closest(\"[dir]\").prop(\"dir\")?this.options.dir=b.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),b.prop(\"disabled\",this.options.disabled),b.prop(\"multiple\",this.options.multiple),p.GetData(b[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),p.StoreData(b[0],\"data\",p.GetData(b[0],\"select2Tags\")),p.StoreData(b[0],\"tags\",!0)),p.GetData(b[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),b.attr(\"ajax--url\",p.GetData(b[0],\"ajaxUrl\")),p.StoreData(b[0],\"ajax-Url\",p.GetData(b[0],\"ajaxUrl\")));var o={};function z(M,b){return b.toUpperCase()}for(var t=0;t<b[0].attributes.length;t++){var c=b[0].attributes[t].name,n=\"data-\";if(c.substr(0,5)==n){var O=c.substring(5),i=p.GetData(b[0],O);o[O.replace(/-([a-z])/g,z)]=i}}M.fn.jquery&&\"1.\"==M.fn.jquery.substr(0,2)&&b[0].dataset&&(o=M.extend(!0,{},b[0].dataset,o));var r=M.extend(!0,{},p.GetData(b[0]),o);for(var a in r=p._convertData(r))e.indexOf(a)>-1||(M.isPlainObject(this.options[a])?M.extend(this.options[a],r[a]):this.options[a]=r[a]);return this},e.prototype.get=function(M){return this.options[M]},e.prototype.set=function(M,b){this.options[M]=b},e}),b.define(\"select2/core\",[\"jquery\",\"./options\",\"./utils\",\"./keys\"],function(M,b,p,e){var o=function(M,e){null!=p.GetData(M[0],\"select2\")&&p.GetData(M[0],\"select2\").destroy(),this.$element=M,this.id=this._generateId(M),e=e||{},this.options=new b(e,M),o.__super__.constructor.call(this);var z=M.attr(\"tabindex\")||0;p.StoreData(M[0],\"old-tabindex\",z),M.attr(\"tabindex\",\"-1\");var t=this.options.get(\"dataAdapter\");this.dataAdapter=new t(M,this.options);var c=this.render();this._placeContainer(c);var n=this.options.get(\"selectionAdapter\");this.selection=new n(M,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,c);var O=this.options.get(\"dropdownAdapter\");this.dropdown=new O(M,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,c);var i=this.options.get(\"resultsAdapter\");this.results=new i(M,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var r=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(M){r.trigger(\"selection:update\",{data:M})}),M[0].classList.add(\"select2-hidden-accessible\"),M.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),p.StoreData(M[0],\"select2\",this),M.data(\"select2\",this)};return p.Extend(o,p.Observable),o.prototype._generateId=function(M){return\"select2-\"+(null!=M.attr(\"id\")?M.attr(\"id\"):null!=M.attr(\"name\")?M.attr(\"name\")+\"-\"+p.generateChars(2):p.generateChars(4)).replace(/(:|\\.|\\[|\\]|,)/g,\"\")},o.prototype._placeContainer=function(M){M.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get(\"width\"));null!=b&&M.css(\"width\",b)},o.prototype._resolveWidth=function(M,b){var p=/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(\"resolve\"==b){var e=this._resolveWidth(M,\"style\");return null!=e?e:this._resolveWidth(M,\"element\")}if(\"element\"==b){var o=M.outerWidth(!1);return o<=0?\"auto\":o+\"px\"}if(\"style\"==b){var z=M.attr(\"style\");if(\"string\"!=typeof z)return null;for(var t=z.split(\";\"),c=0,n=t.length;c<n;c+=1){var O=t[c].replace(/\\s/g,\"\").match(p);if(null!==O&&O.length>=1)return O[1]}return null}return\"computedstyle\"==b?window.getComputedStyle(M[0]).width:b},o.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},o.prototype._registerDomEvents=function(){var M=this;this.$element.on(\"change.select2\",function(){M.dataAdapter.current(function(b){M.trigger(\"selection:update\",{data:b})})}),this.$element.on(\"focus.select2\",function(b){M.trigger(\"focus\",b)}),this._syncA=p.bind(this._syncAttributes,this),this._syncS=p.bind(this._syncSubtree,this),this._observer=new window.MutationObserver(function(b){M._syncA(),M._syncS(b)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})},o.prototype._registerDataEvents=function(){var M=this;this.dataAdapter.on(\"*\",function(b,p){M.trigger(b,p)})},o.prototype._registerSelectionEvents=function(){var M=this,b=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",function(){M.toggleDropdown()}),this.selection.on(\"focus\",function(b){M.focus(b)}),this.selection.on(\"*\",function(p,e){-1===b.indexOf(p)&&M.trigger(p,e)})},o.prototype._registerDropdownEvents=function(){var M=this;this.dropdown.on(\"*\",function(b,p){M.trigger(b,p)})},o.prototype._registerResultsEvents=function(){var M=this;this.results.on(\"*\",function(b,p){M.trigger(b,p)})},o.prototype._registerEvents=function(){var M=this;this.on(\"open\",function(){M.$container[0].classList.add(\"select2-container--open\")}),this.on(\"close\",function(){M.$container[0].classList.remove(\"select2-container--open\")}),this.on(\"enable\",function(){M.$container[0].classList.remove(\"select2-container--disabled\")}),this.on(\"disable\",function(){M.$container[0].classList.add(\"select2-container--disabled\")}),this.on(\"blur\",function(){M.$container[0].classList.remove(\"select2-container--focus\")}),this.on(\"query\",function(b){M.isOpen()||M.trigger(\"open\",{}),this.dataAdapter.query(b,function(p){M.trigger(\"results:all\",{data:p,query:b})})}),this.on(\"query:append\",function(b){this.dataAdapter.query(b,function(p){M.trigger(\"results:append\",{data:p,query:b})})}),this.on(\"keypress\",function(b){var p=b.which;M.isOpen()?p===e.ESC||p===e.UP&&b.altKey?(M.close(b),b.preventDefault()):p===e.ENTER||p===e.TAB?(M.trigger(\"results:select\",{}),b.preventDefault()):p===e.SPACE&&b.ctrlKey?(M.trigger(\"results:toggle\",{}),b.preventDefault()):p===e.UP?(M.trigger(\"results:previous\",{}),b.preventDefault()):p===e.DOWN&&(M.trigger(\"results:next\",{}),b.preventDefault()):(p===e.ENTER||p===e.SPACE||p===e.DOWN&&b.altKey)&&(M.open(),b.preventDefault())})},o.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},o.prototype._isChangeMutation=function(M){var b=this;if(M.addedNodes&&M.addedNodes.length>0)for(var p=0;p<M.addedNodes.length;p++){if(M.addedNodes[p].selected)return!0}else{if(M.removedNodes&&M.removedNodes.length>0)return!0;if(Array.isArray(M))return M.some(function(M){return b._isChangeMutation(M)})}return!1},o.prototype._syncSubtree=function(M){var b=this._isChangeMutation(M),p=this;b&&this.dataAdapter.current(function(M){p.trigger(\"selection:update\",{data:M})})},o.prototype.trigger=function(M,b){var p=o.__super__.trigger,e={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(void 0===b&&(b={}),M in e){var z=e[M],t={prevented:!1,name:M,args:b};if(p.call(this,z,t),t.prevented)return void(b.prevented=!0)}p.call(this,M,b)},o.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},o.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},o.prototype.close=function(M){this.isOpen()&&this.trigger(\"close\",{originalEvent:M})},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get(\"disabled\")},o.prototype.isOpen=function(){return this.$container[0].classList.contains(\"select2-container--open\")},o.prototype.hasFocus=function(){return this.$container[0].classList.contains(\"select2-container--focus\")},o.prototype.focus=function(M){this.hasFocus()||(this.$container[0].classList.add(\"select2-container--focus\"),this.trigger(\"focus\",{}))},o.prototype.enable=function(M){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.'),null!=M&&0!==M.length||(M=[!0]);var b=!M[0];this.$element.prop(\"disabled\",b)},o.prototype.data=function(){this.options.get(\"debug\")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var M=[];return this.dataAdapter.current(function(b){M=b}),M},o.prototype.val=function(M){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==M||0===M.length)return this.$element.val();var b=M[0];Array.isArray(b)&&(b=b.map(function(M){return M.toString()})),this.$element.val(b).trigger(\"input\").trigger(\"change\")},o.prototype.destroy=function(){p.RemoveData(this.$container[0]),this.$container.remove(),this._observer.disconnect(),this._observer=null,this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",p.GetData(this.$element[0],\"old-tabindex\")),this.$element[0].classList.remove(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),p.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},o.prototype.render=function(){var b=M('<span class=\"select2 select2-container\"><span class=\"selection\"></span><span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span></span>');return b.attr(\"dir\",this.options.get(\"dir\")),this.$container=b,this.$container[0].classList.add(\"select2-container--\"+this.options.get(\"theme\")),p.StoreData(b[0],\"element\",this.$element),b},o}),b.define(\"select2/dropdown/attachContainer\",[],function(){function M(M,b,p){M.call(this,b,p)}return M.prototype.position=function(M,b,p){p.find(\".dropdown-wrapper\").append(b),b[0].classList.add(\"select2-dropdown--below\"),p[0].classList.add(\"select2-container--below\")},M}),b.define(\"select2/dropdown/stopPropagation\",[],function(){function M(){}return M.prototype.bind=function(M,b,p){M.call(this,b,p);this.$dropdown.on([\"blur\",\"change\",\"click\",\"dblclick\",\"focus\",\"focusin\",\"focusout\",\"input\",\"keydown\",\"keyup\",\"keypress\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseover\",\"mouseup\",\"search\",\"touchend\",\"touchstart\"].join(\" \"),function(M){M.stopPropagation()})},M}),b.define(\"select2/selection/stopPropagation\",[],function(){function M(){}return M.prototype.bind=function(M,b,p){M.call(this,b,p);this.$selection.on([\"blur\",\"change\",\"click\",\"dblclick\",\"focus\",\"focusin\",\"focusout\",\"input\",\"keydown\",\"keyup\",\"keypress\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseover\",\"mouseup\",\"search\",\"touchend\",\"touchstart\"].join(\" \"),function(M){M.stopPropagation()})},M}),p=function(M){var b,p,e=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],o=\"onwheel\"in document||document.documentMode>=9?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],z=Array.prototype.slice;if(M.event.fixHooks)for(var t=e.length;t;)M.event.fixHooks[e[--t]]=M.event.mouseHooks;var c=M.event.special.mousewheel={version:\"3.1.12\",setup:function(){if(this.addEventListener)for(var b=o.length;b;)this.addEventListener(o[--b],n,!1);else this.onmousewheel=n;M.data(this,\"mousewheel-line-height\",c.getLineHeight(this)),M.data(this,\"mousewheel-page-height\",c.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var b=o.length;b;)this.removeEventListener(o[--b],n,!1);else this.onmousewheel=null;M.removeData(this,\"mousewheel-line-height\"),M.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(b){var p=M(b),e=p[\"offsetParent\"in M.fn?\"offsetParent\":\"parent\"]();return e.length||(e=M(\"body\")),parseInt(e.css(\"fontSize\"),10)||parseInt(p.css(\"fontSize\"),10)||16},getPageHeight:function(b){return M(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function n(e){var o,t=e||window.event,n=z.call(arguments,1),r=0,a=0,s=0,A=0,d=0;if((e=M.event.fix(t)).type=\"mousewheel\",\"detail\"in t&&(s=-1*t.detail),\"wheelDelta\"in t&&(s=t.wheelDelta),\"wheelDeltaY\"in t&&(s=t.wheelDeltaY),\"wheelDeltaX\"in t&&(a=-1*t.wheelDeltaX),\"axis\"in t&&t.axis===t.HORIZONTAL_AXIS&&(a=-1*s,s=0),r=0===s?a:s,\"deltaY\"in t&&(r=s=-1*t.deltaY),\"deltaX\"in t&&(a=t.deltaX,0===s&&(r=-1*a)),0!==s||0!==a){if(1===t.deltaMode){var l=M.data(this,\"mousewheel-line-height\");r*=l,s*=l,a*=l}else if(2===t.deltaMode){var q=M.data(this,\"mousewheel-page-height\");r*=q,s*=q,a*=q}if(o=Math.max(Math.abs(s),Math.abs(a)),(!p||o<p)&&(p=o,i(t,o)&&(p/=40)),i(t,o)&&(r/=40,a/=40,s/=40),r=Math[r>=1?\"floor\":\"ceil\"](r/p),a=Math[a>=1?\"floor\":\"ceil\"](a/p),s=Math[s>=1?\"floor\":\"ceil\"](s/p),c.settings.normalizeOffset&&this.getBoundingClientRect){var u=this.getBoundingClientRect();A=e.clientX-u.left,d=e.clientY-u.top}return e.deltaX=a,e.deltaY=s,e.deltaFactor=p,e.offsetX=A,e.offsetY=d,e.deltaMode=0,n.unshift(e,r,a,s),b&&clearTimeout(b),b=setTimeout(O,200),(M.event.dispatch||M.event.handle).apply(this,n)}}function O(){p=null}function i(M,b){return c.settings.adjustOldDeltas&&\"mousewheel\"===M.type&&b%120==0}M.fn.extend({mousewheel:function(M){return M?this.bind(\"mousewheel\",M):this.trigger(\"mousewheel\")},unmousewheel:function(M){return this.unbind(\"mousewheel\",M)}})},\"function\"==typeof b.define&&b.define.amd?b.define(\"jquery-mousewheel\",[\"jquery\"],p):\"object\"==typeof exports?module.exports=p:p(M),b.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\"./select2/core\",\"./select2/defaults\",\"./select2/utils\"],function(M,b,p,e,o){if(null==M.fn.select2){var z=[\"open\",\"close\",\"destroy\"];M.fn.select2=function(b){if(\"object\"==typeof(b=b||{}))return this.each(function(){var e=M.extend(!0,{},b);new p(M(this),e)}),this;if(\"string\"==typeof b){var e,t=Array.prototype.slice.call(arguments,1);return this.each(function(){var M=o.GetData(this,\"select2\");null==M&&window.console&&console.error&&console.error(\"The select2('\"+b+\"') method was called on an element that is not using Select2.\"),e=M[b].apply(M,t)}),z.indexOf(b)>-1?this:e}throw new Error(\"Invalid arguments for Select2: \"+b)}}return null==M.fn.select2.defaults&&(M.fn.select2.defaults=e),p}),{define:b.define,require:b.require}}(),p=b.require(\"jquery.select2\");return M.fn.select2.amd=b,p}),function(M){\"function\"==typeof define&&define.amd?define([\"jquery\"],M):\"object\"==typeof exports?module.exports=M:M(jQuery)}(function(M){var b,p,e=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],o=\"onwheel\"in window.document||window.document.documentMode>=9?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],z=Array.prototype.slice;if(M.event.fixHooks)for(var t=e.length;t;)M.event.fixHooks[e[--t]]=M.event.mouseHooks;var c=M.event.special.mousewheel={version:\"3.2.0\",setup:function(){if(this.addEventListener)for(var b=o.length;b;)this.addEventListener(o[--b],n,!1);else this.onmousewheel=n;M.data(this,\"mousewheel-line-height\",c.getLineHeight(this)),M.data(this,\"mousewheel-page-height\",c.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var b=o.length;b;)this.removeEventListener(o[--b],n,!1);else this.onmousewheel=null;M.removeData(this,\"mousewheel-line-height\"),M.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(b){var p=M(b),e=p[\"offsetParent\"in M.fn?\"offsetParent\":\"parent\"]();return e.length||(e=M(\"body\")),parseInt(e.css(\"fontSize\"),10)||parseInt(p.css(\"fontSize\"),10)||16},getPageHeight:function(b){return M(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function n(e){var o,t=e||window.event,n=z.call(arguments,1),r=0,a=0,s=0;if((e=M.event.fix(t)).type=\"mousewheel\",\"detail\"in t&&(s=-1*t.detail),\"wheelDelta\"in t&&(s=t.wheelDelta),\"wheelDeltaY\"in t&&(s=t.wheelDeltaY),\"wheelDeltaX\"in t&&(a=-1*t.wheelDeltaX),\"axis\"in t&&t.axis===t.HORIZONTAL_AXIS&&(a=-1*s,s=0),r=0===s?a:s,\"deltaY\"in t&&(r=s=-1*t.deltaY),\"deltaX\"in t&&(a=t.deltaX,0===s&&(r=-1*a)),0!==s||0!==a){if(1===t.deltaMode){var A=M.data(this,\"mousewheel-line-height\");r*=A,s*=A,a*=A}else if(2===t.deltaMode){var d=M.data(this,\"mousewheel-page-height\");r*=d,s*=d,a*=d}if(o=Math.max(Math.abs(s),Math.abs(a)),(!p||o<p)&&(p=o,i(t,o)&&(p/=40)),i(t,o)&&(r/=40,a/=40,s/=40),r=Math[r>=1?\"floor\":\"ceil\"](r/p),a=Math[a>=1?\"floor\":\"ceil\"](a/p),s=Math[s>=1?\"floor\":\"ceil\"](s/p),c.settings.normalizeOffset&&this.getBoundingClientRect){var l=this.getBoundingClientRect();e.offsetX=e.clientX-l.left,e.offsetY=e.clientY-l.top}return e.deltaX=a,e.deltaY=s,e.deltaFactor=p,e.deltaMode=0,n.unshift(e,r,a,s),b&&window.clearTimeout(b),b=window.setTimeout(O,200),(M.event.dispatch||M.event.handle).apply(this,n)}}function O(){p=null}function i(M,b){return c.settings.adjustOldDeltas&&\"mousewheel\"===M.type&&b%120==0}M.fn.extend({mousewheel:function(M){return M?this.on(\"mousewheel\",M):this.trigger(\"mousewheel\")},unmousewheel:function(M){return this.off(\"mousewheel\",M)}})}),function(M,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=b():\"function\"==typeof define&&define.amd?define(b):M.moment=b()}(this,function(){\"use strict\";var M,b;function p(){return M.apply(null,arguments)}function e(M){return M instanceof Array||\"[object Array]\"===Object.prototype.toString.call(M)}function o(M){return null!=M&&\"[object Object]\"===Object.prototype.toString.call(M)}function z(M,b){return Object.prototype.hasOwnProperty.call(M,b)}function t(M){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(M).length;var b;for(b in M)if(z(M,b))return!1;return!0}function c(M){return void 0===M}function n(M){return\"number\"==typeof M||\"[object Number]\"===Object.prototype.toString.call(M)}function O(M){return M instanceof Date||\"[object Date]\"===Object.prototype.toString.call(M)}function i(M,b){var p,e=[],o=M.length;for(p=0;p<o;++p)e.push(b(M[p],p));return e}function r(M,b){for(var p in b)z(b,p)&&(M[p]=b[p]);return z(b,\"toString\")&&(M.toString=b.toString),z(b,\"valueOf\")&&(M.valueOf=b.valueOf),M}function a(M,b,p,e){return Tb(M,b,p,e,!0).utc()}function s(M){return null==M._pf&&(M._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),M._pf}function A(M){var p=null,e=!1,o=M._d&&!isNaN(M._d.getTime());return o&&(p=s(M),e=b.call(p.parsedDateParts,function(M){return null!=M}),o=p.overflow<0&&!p.empty&&!p.invalidEra&&!p.invalidMonth&&!p.invalidWeekday&&!p.weekdayMismatch&&!p.nullInput&&!p.invalidFormat&&!p.userInvalidated&&(!p.meridiem||p.meridiem&&e),M._strict&&(o=o&&0===p.charsLeftOver&&0===p.unusedTokens.length&&void 0===p.bigHour)),null!=Object.isFrozen&&Object.isFrozen(M)?o:(M._isValid=o,M._isValid)}function d(M){var b=a(NaN);return null!=M?r(s(b),M):s(b).userInvalidated=!0,b}b=Array.prototype.some?Array.prototype.some:function(M){var b,p=Object(this),e=p.length>>>0;for(b=0;b<e;b++)if(b in p&&M.call(this,p[b],b,p))return!0;return!1};var l=p.momentProperties=[],q=!1;function u(M,b){var p,e,o,z=l.length;if(c(b._isAMomentObject)||(M._isAMomentObject=b._isAMomentObject),c(b._i)||(M._i=b._i),c(b._f)||(M._f=b._f),c(b._l)||(M._l=b._l),c(b._strict)||(M._strict=b._strict),c(b._tzm)||(M._tzm=b._tzm),c(b._isUTC)||(M._isUTC=b._isUTC),c(b._offset)||(M._offset=b._offset),c(b._pf)||(M._pf=s(b)),c(b._locale)||(M._locale=b._locale),z>0)for(p=0;p<z;p++)c(o=b[e=l[p]])||(M[e]=o);return M}function f(M){u(this,M),this._d=new Date(null!=M._d?M._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===q&&(q=!0,p.updateOffset(this),q=!1)}function W(M){return M instanceof f||null!=M&&null!=M._isAMomentObject}function h(M){!1===p.suppressDeprecationWarnings&&\"undefined\"!=typeof console&&console.warn&&console.warn(\"Deprecation warning: \"+M)}function R(M,b){var e=!0;return r(function(){if(null!=p.deprecationHandler&&p.deprecationHandler(null,M),e){var o,t,c,n=[],O=arguments.length;for(t=0;t<O;t++){if(o=\"\",\"object\"==typeof arguments[t]){for(c in o+=\"\\n[\"+t+\"] \",arguments[0])z(arguments[0],c)&&(o+=c+\": \"+arguments[0][c]+\", \");o=o.slice(0,-2)}else o=arguments[t];n.push(o)}h(M+\"\\nArguments: \"+Array.prototype.slice.call(n).join(\"\")+\"\\n\"+(new Error).stack),e=!1}return b.apply(this,arguments)},b)}var m,g={};function L(M,b){null!=p.deprecationHandler&&p.deprecationHandler(M,b),g[M]||(h(b),g[M]=!0)}function v(M){return\"undefined\"!=typeof Function&&M instanceof Function||\"[object Function]\"===Object.prototype.toString.call(M)}function N(M,b){var p,e=r({},M);for(p in b)z(b,p)&&(o(M[p])&&o(b[p])?(e[p]={},r(e[p],M[p]),r(e[p],b[p])):null!=b[p]?e[p]=b[p]:delete e[p]);for(p in M)z(M,p)&&!z(b,p)&&o(M[p])&&(e[p]=r({},e[p]));return e}function y(M){null!=M&&this.set(M)}p.suppressDeprecationWarnings=!1,p.deprecationHandler=null,m=Object.keys?Object.keys:function(M){var b,p=[];for(b in M)z(M,b)&&p.push(b);return p};function B(M,b,p){var e=\"\"+Math.abs(M),o=b-e.length;return(M>=0?p?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,o)).toString().substr(1)+e}var X=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,w=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,x={},T={};function _(M,b,p,e){var o=e;\"string\"==typeof e&&(o=function(){return this[e]()}),M&&(T[M]=o),b&&(T[b[0]]=function(){return B(o.apply(this,arguments),b[1],b[2])}),p&&(T[p]=function(){return this.localeData().ordinal(o.apply(this,arguments),M)})}function k(M){return M.match(/\\[[\\s\\S]/)?M.replace(/^\\[|\\]$/g,\"\"):M.replace(/\\\\/g,\"\")}function S(M,b){return M.isValid()?(b=C(b,M.localeData()),x[b]=x[b]||function(M){var b,p,e=M.match(X);for(b=0,p=e.length;b<p;b++)T[e[b]]?e[b]=T[e[b]]:e[b]=k(e[b]);return function(b){var o,z=\"\";for(o=0;o<p;o++)z+=v(e[o])?e[o].call(b,M):e[o];return z}}(b),x[b](M)):M.localeData().invalidDate()}function C(M,b){var p=5;function e(M){return b.longDateFormat(M)||M}for(w.lastIndex=0;p>=0&&w.test(M);)M=M.replace(w,e),w.lastIndex=0,p-=1;return M}var E={D:\"date\",dates:\"date\",date:\"date\",d:\"day\",days:\"day\",day:\"day\",e:\"weekday\",weekdays:\"weekday\",weekday:\"weekday\",E:\"isoWeekday\",isoweekdays:\"isoWeekday\",isoweekday:\"isoWeekday\",DDD:\"dayOfYear\",dayofyears:\"dayOfYear\",dayofyear:\"dayOfYear\",h:\"hour\",hours:\"hour\",hour:\"hour\",ms:\"millisecond\",milliseconds:\"millisecond\",millisecond:\"millisecond\",m:\"minute\",minutes:\"minute\",minute:\"minute\",M:\"month\",months:\"month\",month:\"month\",Q:\"quarter\",quarters:\"quarter\",quarter:\"quarter\",s:\"second\",seconds:\"second\",second:\"second\",gg:\"weekYear\",weekyears:\"weekYear\",weekyear:\"weekYear\",GG:\"isoWeekYear\",isoweekyears:\"isoWeekYear\",isoweekyear:\"isoWeekYear\",w:\"week\",weeks:\"week\",week:\"week\",W:\"isoWeek\",isoweeks:\"isoWeek\",isoweek:\"isoWeek\",y:\"year\",years:\"year\",year:\"year\"};function D(M){return\"string\"==typeof M?E[M]||E[M.toLowerCase()]:void 0}function P(M){var b,p,e={};for(p in M)z(M,p)&&(b=D(p))&&(e[b]=M[p]);return e}var I={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};var F,j=/\\d/,H=/\\d\\d/,U=/\\d{3}/,Y=/\\d{4}/,G=/[+-]?\\d{6}/,V=/\\d\\d?/,$=/\\d\\d\\d\\d?/,K=/\\d\\d\\d\\d\\d\\d?/,Q=/\\d{1,3}/,J=/\\d{1,4}/,Z=/[+-]?\\d{1,6}/,MM=/\\d+/,bM=/[+-]?\\d+/,pM=/Z|[+-]\\d\\d:?\\d\\d/gi,eM=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,oM=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,zM=/^[1-9]\\d?/,tM=/^([1-9]\\d|\\d)/;function cM(M,b,p){F[M]=v(b)?b:function(M,e){return M&&p?p:b}}function nM(M,b){return z(F,M)?F[M](b._strict,b._locale):new RegExp(OM(M.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(M,b,p,e,o){return b||p||e||o})))}function OM(M){return M.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function iM(M){return M<0?Math.ceil(M)||0:Math.floor(M)}function rM(M){var b=+M,p=0;return 0!==b&&isFinite(b)&&(p=iM(b)),p}F={};var aM={};function sM(M,b){var p,e,o=b;for(\"string\"==typeof M&&(M=[M]),n(b)&&(o=function(M,p){p[b]=rM(M)}),e=M.length,p=0;p<e;p++)aM[M[p]]=o}function AM(M,b){sM(M,function(M,p,e,o){e._w=e._w||{},b(M,e._w,e,o)})}function dM(M,b,p){null!=b&&z(aM,M)&&aM[M](b,p._a,p,M)}function lM(M){return M%4==0&&M%100!=0||M%400==0}var qM=0,uM=1,fM=2,WM=3,hM=4,RM=5,mM=6,gM=7,LM=8;function vM(M){return lM(M)?366:365}_(\"Y\",0,0,function(){var M=this.year();return M<=9999?B(M,4):\"+\"+M}),_(0,[\"YY\",2],0,function(){return this.year()%100}),_(0,[\"YYYY\",4],0,\"year\"),_(0,[\"YYYYY\",5],0,\"year\"),_(0,[\"YYYYYY\",6,!0],0,\"year\"),cM(\"Y\",bM),cM(\"YY\",V,H),cM(\"YYYY\",J,Y),cM(\"YYYYY\",Z,G),cM(\"YYYYYY\",Z,G),sM([\"YYYYY\",\"YYYYYY\"],qM),sM(\"YYYY\",function(M,b){b[qM]=2===M.length?p.parseTwoDigitYear(M):rM(M)}),sM(\"YY\",function(M,b){b[qM]=p.parseTwoDigitYear(M)}),sM(\"Y\",function(M,b){b[qM]=parseInt(M,10)}),p.parseTwoDigitYear=function(M){return rM(M)+(rM(M)>68?1900:2e3)};var NM,yM=BM(\"FullYear\",!0);function BM(M,b){return function(e){return null!=e?(wM(this,M,e),p.updateOffset(this,b),this):XM(this,M)}}function XM(M,b){if(!M.isValid())return NaN;var p=M._d,e=M._isUTC;switch(b){case\"Milliseconds\":return e?p.getUTCMilliseconds():p.getMilliseconds();case\"Seconds\":return e?p.getUTCSeconds():p.getSeconds();case\"Minutes\":return e?p.getUTCMinutes():p.getMinutes();case\"Hours\":return e?p.getUTCHours():p.getHours();case\"Date\":return e?p.getUTCDate():p.getDate();case\"Day\":return e?p.getUTCDay():p.getDay();case\"Month\":return e?p.getUTCMonth():p.getMonth();case\"FullYear\":return e?p.getUTCFullYear():p.getFullYear();default:return NaN}}function wM(M,b,p){var e,o,z,t,c;if(M.isValid()&&!isNaN(p)){switch(e=M._d,o=M._isUTC,b){case\"Milliseconds\":return void(o?e.setUTCMilliseconds(p):e.setMilliseconds(p));case\"Seconds\":return void(o?e.setUTCSeconds(p):e.setSeconds(p));case\"Minutes\":return void(o?e.setUTCMinutes(p):e.setMinutes(p));case\"Hours\":return void(o?e.setUTCHours(p):e.setHours(p));case\"Date\":return void(o?e.setUTCDate(p):e.setDate(p));case\"FullYear\":break;default:return}z=p,t=M.month(),c=29!==(c=M.date())||1!==t||lM(z)?c:28,o?e.setUTCFullYear(z,t,c):e.setFullYear(z,t,c)}}function xM(M,b){if(isNaN(M)||isNaN(b))return NaN;var p,e=(b%(p=12)+p)%p;return M+=(b-e)/12,1===e?lM(M)?29:28:31-e%7%2}NM=Array.prototype.indexOf?Array.prototype.indexOf:function(M){var b;for(b=0;b<this.length;++b)if(this[b]===M)return b;return-1},_(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),_(\"MMM\",0,0,function(M){return this.localeData().monthsShort(this,M)}),_(\"MMMM\",0,0,function(M){return this.localeData().months(this,M)}),cM(\"M\",V,zM),cM(\"MM\",V,H),cM(\"MMM\",function(M,b){return b.monthsShortRegex(M)}),cM(\"MMMM\",function(M,b){return b.monthsRegex(M)}),sM([\"M\",\"MM\"],function(M,b){b[uM]=rM(M)-1}),sM([\"MMM\",\"MMMM\"],function(M,b,p,e){var o=p._locale.monthsParse(M,e,p._strict);null!=o?b[uM]=o:s(p).invalidMonth=M});var TM=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),_M=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),kM=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,SM=oM,CM=oM;function EM(M,b,p){var e,o,z,t=M.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],e=0;e<12;++e)z=a([2e3,e]),this._shortMonthsParse[e]=this.monthsShort(z,\"\").toLocaleLowerCase(),this._longMonthsParse[e]=this.months(z,\"\").toLocaleLowerCase();return p?\"MMM\"===b?-1!==(o=NM.call(this._shortMonthsParse,t))?o:null:-1!==(o=NM.call(this._longMonthsParse,t))?o:null:\"MMM\"===b?-1!==(o=NM.call(this._shortMonthsParse,t))||-1!==(o=NM.call(this._longMonthsParse,t))?o:null:-1!==(o=NM.call(this._longMonthsParse,t))||-1!==(o=NM.call(this._shortMonthsParse,t))?o:null}function DM(M,b){if(!M.isValid())return M;if(\"string\"==typeof b)if(/^\\d+$/.test(b))b=rM(b);else if(!n(b=M.localeData().monthsParse(b)))return M;var p=b,e=M.date();return e=e<29?e:Math.min(e,xM(M.year(),p)),M._isUTC?M._d.setUTCMonth(p,e):M._d.setMonth(p,e),M}function PM(M){return null!=M?(DM(this,M),p.updateOffset(this,!0),this):XM(this,\"Month\")}function IM(){function M(M,b){return b.length-M.length}var b,p,e,o,z=[],t=[],c=[];for(b=0;b<12;b++)p=a([2e3,b]),e=OM(this.monthsShort(p,\"\")),o=OM(this.months(p,\"\")),z.push(e),t.push(o),c.push(o),c.push(e);z.sort(M),t.sort(M),c.sort(M),this._monthsRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+z.join(\"|\")+\")\",\"i\")}function FM(M,b,p,e,o,z,t){var c;return M<100&&M>=0?(c=new Date(M+400,b,p,e,o,z,t),isFinite(c.getFullYear())&&c.setFullYear(M)):c=new Date(M,b,p,e,o,z,t),c}function jM(M){var b,p;return M<100&&M>=0?((p=Array.prototype.slice.call(arguments))[0]=M+400,b=new Date(Date.UTC.apply(null,p)),isFinite(b.getUTCFullYear())&&b.setUTCFullYear(M)):b=new Date(Date.UTC.apply(null,arguments)),b}function HM(M,b,p){var e=7+b-p;return-((7+jM(M,0,e).getUTCDay()-b)%7)+e-1}function UM(M,b,p,e,o){var z,t,c=1+7*(b-1)+(7+p-e)%7+HM(M,e,o);return c<=0?t=vM(z=M-1)+c:c>vM(M)?(z=M+1,t=c-vM(M)):(z=M,t=c),{year:z,dayOfYear:t}}function YM(M,b,p){var e,o,z=HM(M.year(),b,p),t=Math.floor((M.dayOfYear()-z-1)/7)+1;return t<1?e=t+GM(o=M.year()-1,b,p):t>GM(M.year(),b,p)?(e=t-GM(M.year(),b,p),o=M.year()+1):(o=M.year(),e=t),{week:e,year:o}}function GM(M,b,p){var e=HM(M,b,p),o=HM(M+1,b,p);return(vM(M)-e+o)/7}_(\"w\",[\"ww\",2],\"wo\",\"week\"),_(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),cM(\"w\",V,zM),cM(\"ww\",V,H),cM(\"W\",V,zM),cM(\"WW\",V,H),AM([\"w\",\"ww\",\"W\",\"WW\"],function(M,b,p,e){b[e.substr(0,1)]=rM(M)});function VM(M,b){return M.slice(b,7).concat(M.slice(0,b))}_(\"d\",0,\"do\",\"day\"),_(\"dd\",0,0,function(M){return this.localeData().weekdaysMin(this,M)}),_(\"ddd\",0,0,function(M){return this.localeData().weekdaysShort(this,M)}),_(\"dddd\",0,0,function(M){return this.localeData().weekdays(this,M)}),_(\"e\",0,0,\"weekday\"),_(\"E\",0,0,\"isoWeekday\"),cM(\"d\",V),cM(\"e\",V),cM(\"E\",V),cM(\"dd\",function(M,b){return b.weekdaysMinRegex(M)}),cM(\"ddd\",function(M,b){return b.weekdaysShortRegex(M)}),cM(\"dddd\",function(M,b){return b.weekdaysRegex(M)}),AM([\"dd\",\"ddd\",\"dddd\"],function(M,b,p,e){var o=p._locale.weekdaysParse(M,e,p._strict);null!=o?b.d=o:s(p).invalidWeekday=M}),AM([\"d\",\"e\",\"E\"],function(M,b,p,e){b[e]=rM(M)});var $M=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),KM=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),QM=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),JM=oM,ZM=oM,Mb=oM;function bb(M,b,p){var e,o,z,t=M.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],e=0;e<7;++e)z=a([2e3,1]).day(e),this._minWeekdaysParse[e]=this.weekdaysMin(z,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[e]=this.weekdaysShort(z,\"\").toLocaleLowerCase(),this._weekdaysParse[e]=this.weekdays(z,\"\").toLocaleLowerCase();return p?\"dddd\"===b?-1!==(o=NM.call(this._weekdaysParse,t))?o:null:\"ddd\"===b?-1!==(o=NM.call(this._shortWeekdaysParse,t))?o:null:-1!==(o=NM.call(this._minWeekdaysParse,t))?o:null:\"dddd\"===b?-1!==(o=NM.call(this._weekdaysParse,t))||-1!==(o=NM.call(this._shortWeekdaysParse,t))||-1!==(o=NM.call(this._minWeekdaysParse,t))?o:null:\"ddd\"===b?-1!==(o=NM.call(this._shortWeekdaysParse,t))||-1!==(o=NM.call(this._weekdaysParse,t))||-1!==(o=NM.call(this._minWeekdaysParse,t))?o:null:-1!==(o=NM.call(this._minWeekdaysParse,t))||-1!==(o=NM.call(this._weekdaysParse,t))||-1!==(o=NM.call(this._shortWeekdaysParse,t))?o:null}function pb(){function M(M,b){return b.length-M.length}var b,p,e,o,z,t=[],c=[],n=[],O=[];for(b=0;b<7;b++)p=a([2e3,1]).day(b),e=OM(this.weekdaysMin(p,\"\")),o=OM(this.weekdaysShort(p,\"\")),z=OM(this.weekdays(p,\"\")),t.push(e),c.push(o),n.push(z),O.push(e),O.push(o),O.push(z);t.sort(M),c.sort(M),n.sort(M),O.sort(M),this._weekdaysRegex=new RegExp(\"^(\"+O.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+n.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\")}function eb(){return this.hours()%12||12}function ob(M,b){_(M,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function zb(M,b){return b._meridiemParse}_(\"H\",[\"HH\",2],0,\"hour\"),_(\"h\",[\"hh\",2],0,eb),_(\"k\",[\"kk\",2],0,function(){return this.hours()||24}),_(\"hmm\",0,0,function(){return\"\"+eb.apply(this)+B(this.minutes(),2)}),_(\"hmmss\",0,0,function(){return\"\"+eb.apply(this)+B(this.minutes(),2)+B(this.seconds(),2)}),_(\"Hmm\",0,0,function(){return\"\"+this.hours()+B(this.minutes(),2)}),_(\"Hmmss\",0,0,function(){return\"\"+this.hours()+B(this.minutes(),2)+B(this.seconds(),2)}),ob(\"a\",!0),ob(\"A\",!1),cM(\"a\",zb),cM(\"A\",zb),cM(\"H\",V,tM),cM(\"h\",V,zM),cM(\"k\",V,zM),cM(\"HH\",V,H),cM(\"hh\",V,H),cM(\"kk\",V,H),cM(\"hmm\",$),cM(\"hmmss\",K),cM(\"Hmm\",$),cM(\"Hmmss\",K),sM([\"H\",\"HH\"],WM),sM([\"k\",\"kk\"],function(M,b,p){var e=rM(M);b[WM]=24===e?0:e}),sM([\"a\",\"A\"],function(M,b,p){p._isPm=p._locale.isPM(M),p._meridiem=M}),sM([\"h\",\"hh\"],function(M,b,p){b[WM]=rM(M),s(p).bigHour=!0}),sM(\"hmm\",function(M,b,p){var e=M.length-2;b[WM]=rM(M.substr(0,e)),b[hM]=rM(M.substr(e)),s(p).bigHour=!0}),sM(\"hmmss\",function(M,b,p){var e=M.length-4,o=M.length-2;b[WM]=rM(M.substr(0,e)),b[hM]=rM(M.substr(e,2)),b[RM]=rM(M.substr(o)),s(p).bigHour=!0}),sM(\"Hmm\",function(M,b,p){var e=M.length-2;b[WM]=rM(M.substr(0,e)),b[hM]=rM(M.substr(e))}),sM(\"Hmmss\",function(M,b,p){var e=M.length-4,o=M.length-2;b[WM]=rM(M.substr(0,e)),b[hM]=rM(M.substr(e,2)),b[RM]=rM(M.substr(o))});var tb=BM(\"Hours\",!0);var cb,nb={calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},longDateFormat:{LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},invalidDate:\"Invalid date\",ordinal:\"%d\",dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},months:TM,monthsShort:_M,week:{dow:0,doy:6},weekdays:$M,weekdaysMin:QM,weekdaysShort:KM,meridiemParse:/[ap]\\.?m?\\.?/i},Ob={},ib={};function rb(M,b){var p,e=Math.min(M.length,b.length);for(p=0;p<e;p+=1)if(M[p]!==b[p])return p;return e}function ab(M){return M?M.toLowerCase().replace(\"_\",\"-\"):M}function sb(M){var b=null;if(void 0===Ob[M]&&\"undefined\"!=typeof module&&module&&module.exports&&function(M){return!(!M||!M.match(\"^[^/\\\\\\\\]*$\"))}(M))try{b=cb._abbr,require(\"./locale/\"+M),Ab(b)}catch(b){Ob[M]=null}return Ob[M]}function Ab(M,b){var p;return M&&((p=c(b)?lb(M):db(M,b))?cb=p:\"undefined\"!=typeof console&&console.warn&&console.warn(\"Locale \"+M+\" not found. Did you forget to load it?\")),cb._abbr}function db(M,b){if(null!==b){var p,e=nb;if(b.abbr=M,null!=Ob[M])L(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),e=Ob[M]._config;else if(null!=b.parentLocale)if(null!=Ob[b.parentLocale])e=Ob[b.parentLocale]._config;else{if(null==(p=sb(b.parentLocale)))return ib[b.parentLocale]||(ib[b.parentLocale]=[]),ib[b.parentLocale].push({name:M,config:b}),null;e=p._config}return Ob[M]=new y(N(e,b)),ib[M]&&ib[M].forEach(function(M){db(M.name,M.config)}),Ab(M),Ob[M]}return delete Ob[M],null}function lb(M){var b;if(M&&M._locale&&M._locale._abbr&&(M=M._locale._abbr),!M)return cb;if(!e(M)){if(b=sb(M))return b;M=[M]}return function(M){for(var b,p,e,o,z=0;z<M.length;){for(b=(o=ab(M[z]).split(\"-\")).length,p=(p=ab(M[z+1]))?p.split(\"-\"):null;b>0;){if(e=sb(o.slice(0,b).join(\"-\")))return e;if(p&&p.length>=b&&rb(o,p)>=b-1)break;b--}z++}return cb}(M)}function qb(M){var b,p=M._a;return p&&-2===s(M).overflow&&(b=p[uM]<0||p[uM]>11?uM:p[fM]<1||p[fM]>xM(p[qM],p[uM])?fM:p[WM]<0||p[WM]>24||24===p[WM]&&(0!==p[hM]||0!==p[RM]||0!==p[mM])?WM:p[hM]<0||p[hM]>59?hM:p[RM]<0||p[RM]>59?RM:p[mM]<0||p[mM]>999?mM:-1,s(M)._overflowDayOfYear&&(b<qM||b>fM)&&(b=fM),s(M)._overflowWeeks&&-1===b&&(b=gM),s(M)._overflowWeekday&&-1===b&&(b=LM),s(M).overflow=b),M}var ub=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,fb=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,Wb=/Z|[+-]\\d\\d(?::?\\d\\d)?/,hb=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],Rb=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],mb=/^\\/?Date\\((-?\\d+)/i,gb=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,Lb={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function vb(M){var b,p,e,o,z,t,c=M._i,n=ub.exec(c)||fb.exec(c),O=hb.length,i=Rb.length;if(n){for(s(M).iso=!0,b=0,p=O;b<p;b++)if(hb[b][1].exec(n[1])){o=hb[b][0],e=!1!==hb[b][2];break}if(null==o)return void(M._isValid=!1);if(n[3]){for(b=0,p=i;b<p;b++)if(Rb[b][1].exec(n[3])){z=(n[2]||\" \")+Rb[b][0];break}if(null==z)return void(M._isValid=!1)}if(!e&&null!=z)return void(M._isValid=!1);if(n[4]){if(!Wb.exec(n[4]))return void(M._isValid=!1);t=\"Z\"}M._f=o+(z||\"\")+(t||\"\"),wb(M)}else M._isValid=!1}function Nb(M){var b=parseInt(M,10);return b<=49?2e3+b:b<=999?1900+b:b}function yb(M){var b,p,e,o,z,t,c,n,O=gb.exec(M._i.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\"));if(O){if(p=O[4],e=O[3],o=O[2],z=O[5],t=O[6],c=O[7],n=[Nb(p),_M.indexOf(e),parseInt(o,10),parseInt(z,10),parseInt(t,10)],c&&n.push(parseInt(c,10)),b=n,!function(M,b,p){return!M||KM.indexOf(M)===new Date(b[0],b[1],b[2]).getDay()||(s(p).weekdayMismatch=!0,p._isValid=!1,!1)}(O[1],b,M))return;M._a=b,M._tzm=function(M,b,p){if(M)return Lb[M];if(b)return 0;var e=parseInt(p,10),o=e%100;return(e-o)/100*60+o}(O[8],O[9],O[10]),M._d=jM.apply(null,M._a),M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),s(M).rfc2822=!0}else M._isValid=!1}function Bb(M,b,p){return null!=M?M:null!=b?b:p}function Xb(M){var b,e,o,z,t,c=[];if(!M._d){for(o=function(M){var b=new Date(p.now());return M._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}(M),M._w&&null==M._a[fM]&&null==M._a[uM]&&function(M){var b,p,e,o,z,t,c,n,O;b=M._w,null!=b.GG||null!=b.W||null!=b.E?(z=1,t=4,p=Bb(b.GG,M._a[qM],YM(_b(),1,4).year),e=Bb(b.W,1),((o=Bb(b.E,1))<1||o>7)&&(n=!0)):(z=M._locale._week.dow,t=M._locale._week.doy,O=YM(_b(),z,t),p=Bb(b.gg,M._a[qM],O.year),e=Bb(b.w,O.week),null!=b.d?((o=b.d)<0||o>6)&&(n=!0):null!=b.e?(o=b.e+z,(b.e<0||b.e>6)&&(n=!0)):o=z);e<1||e>GM(p,z,t)?s(M)._overflowWeeks=!0:null!=n?s(M)._overflowWeekday=!0:(c=UM(p,e,o,z,t),M._a[qM]=c.year,M._dayOfYear=c.dayOfYear)}(M),null!=M._dayOfYear&&(t=Bb(M._a[qM],o[qM]),(M._dayOfYear>vM(t)||0===M._dayOfYear)&&(s(M)._overflowDayOfYear=!0),e=jM(t,0,M._dayOfYear),M._a[uM]=e.getUTCMonth(),M._a[fM]=e.getUTCDate()),b=0;b<3&&null==M._a[b];++b)M._a[b]=c[b]=o[b];for(;b<7;b++)M._a[b]=c[b]=null==M._a[b]?2===b?1:0:M._a[b];24===M._a[WM]&&0===M._a[hM]&&0===M._a[RM]&&0===M._a[mM]&&(M._nextDay=!0,M._a[WM]=0),M._d=(M._useUTC?jM:FM).apply(null,c),z=M._useUTC?M._d.getUTCDay():M._d.getDay(),null!=M._tzm&&M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),M._nextDay&&(M._a[WM]=24),M._w&&void 0!==M._w.d&&M._w.d!==z&&(s(M).weekdayMismatch=!0)}}function wb(M){if(M._f!==p.ISO_8601)if(M._f!==p.RFC_2822){M._a=[],s(M).empty=!0;var b,e,o,z,t,c,n,O=\"\"+M._i,i=O.length,r=0;for(n=(o=C(M._f,M._locale).match(X)||[]).length,b=0;b<n;b++)z=o[b],(e=(O.match(nM(z,M))||[])[0])&&((t=O.substr(0,O.indexOf(e))).length>0&&s(M).unusedInput.push(t),O=O.slice(O.indexOf(e)+e.length),r+=e.length),T[z]?(e?s(M).empty=!1:s(M).unusedTokens.push(z),dM(z,e,M)):M._strict&&!e&&s(M).unusedTokens.push(z);s(M).charsLeftOver=i-r,O.length>0&&s(M).unusedInput.push(O),M._a[WM]<=12&&!0===s(M).bigHour&&M._a[WM]>0&&(s(M).bigHour=void 0),s(M).parsedDateParts=M._a.slice(0),s(M).meridiem=M._meridiem,M._a[WM]=function(M,b,p){var e;if(null==p)return b;return null!=M.meridiemHour?M.meridiemHour(b,p):null!=M.isPM?((e=M.isPM(p))&&b<12&&(b+=12),e||12!==b||(b=0),b):b}(M._locale,M._a[WM],M._meridiem),null!==(c=s(M).era)&&(M._a[qM]=M._locale.erasConvertYear(c,M._a[qM])),Xb(M),qb(M)}else yb(M);else vb(M)}function xb(M){var b=M._i,z=M._f;return M._locale=M._locale||lb(M._l),null===b||void 0===z&&\"\"===b?d({nullInput:!0}):(\"string\"==typeof b&&(M._i=b=M._locale.preparse(b)),W(b)?new f(qb(b)):(O(b)?M._d=b:e(z)?function(M){var b,p,e,o,z,t,c=!1,n=M._f.length;if(0===n)return s(M).invalidFormat=!0,void(M._d=new Date(NaN));for(o=0;o<n;o++)z=0,t=!1,b=u({},M),null!=M._useUTC&&(b._useUTC=M._useUTC),b._f=M._f[o],wb(b),A(b)&&(t=!0),z+=s(b).charsLeftOver,z+=10*s(b).unusedTokens.length,s(b).score=z,c?z<e&&(e=z,p=b):(null==e||z<e||t)&&(e=z,p=b,t&&(c=!0));r(M,p||b)}(M):z?wb(M):function(M){var b=M._i;c(b)?M._d=new Date(p.now()):O(b)?M._d=new Date(b.valueOf()):\"string\"==typeof b?function(M){var b=mb.exec(M._i);null===b?(vb(M),!1===M._isValid&&(delete M._isValid,yb(M),!1===M._isValid&&(delete M._isValid,M._strict?M._isValid=!1:p.createFromInputFallback(M)))):M._d=new Date(+b[1])}(M):e(b)?(M._a=i(b.slice(0),function(M){return parseInt(M,10)}),Xb(M)):o(b)?function(M){if(!M._d){var b=P(M._i),p=void 0===b.day?b.date:b.day;M._a=i([b.year,b.month,p,b.hour,b.minute,b.second,b.millisecond],function(M){return M&&parseInt(M,10)}),Xb(M)}}(M):n(b)?M._d=new Date(b):p.createFromInputFallback(M)}(M),A(M)||(M._d=null),M))}function Tb(M,b,p,z,c){var n,O={};return!0!==b&&!1!==b||(z=b,b=void 0),!0!==p&&!1!==p||(z=p,p=void 0),(o(M)&&t(M)||e(M)&&0===M.length)&&(M=void 0),O._isAMomentObject=!0,O._useUTC=O._isUTC=c,O._l=p,O._i=M,O._f=b,O._strict=z,(n=new f(qb(xb(O))))._nextDay&&(n.add(1,\"d\"),n._nextDay=void 0),n}function _b(M,b,p,e){return Tb(M,b,p,e,!1)}p.createFromInputFallback=R(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(M){M._d=new Date(M._i+(M._useUTC?\" UTC\":\"\"))}),p.ISO_8601=function(){},p.RFC_2822=function(){};var kb=R(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var M=_b.apply(null,arguments);return this.isValid()&&M.isValid()?M<this?this:M:d()}),Sb=R(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var M=_b.apply(null,arguments);return this.isValid()&&M.isValid()?M>this?this:M:d()});function Cb(M,b){var p,o;if(1===b.length&&e(b[0])&&(b=b[0]),!b.length)return _b();for(p=b[0],o=1;o<b.length;++o)b[o].isValid()&&!b[o][M](p)||(p=b[o]);return p}var Eb=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Db(M){var b=P(M),p=b.year||0,e=b.quarter||0,o=b.month||0,t=b.week||b.isoWeek||0,c=b.day||0,n=b.hour||0,O=b.minute||0,i=b.second||0,r=b.millisecond||0;this._isValid=function(M){var b,p,e=!1,o=Eb.length;for(b in M)if(z(M,b)&&(-1===NM.call(Eb,b)||null!=M[b]&&isNaN(M[b])))return!1;for(p=0;p<o;++p)if(M[Eb[p]]){if(e)return!1;parseFloat(M[Eb[p]])!==rM(M[Eb[p]])&&(e=!0)}return!0}(b),this._milliseconds=+r+1e3*i+6e4*O+1e3*n*60*60,this._days=+c+7*t,this._months=+o+3*e+12*p,this._data={},this._locale=lb(),this._bubble()}function Pb(M){return M instanceof Db}function Ib(M){return M<0?-1*Math.round(-1*M):Math.round(M)}function Fb(M,b){_(M,0,0,function(){var M=this.utcOffset(),p=\"+\";return M<0&&(M=-M,p=\"-\"),p+B(~~(M/60),2)+b+B(~~M%60,2)})}Fb(\"Z\",\":\"),Fb(\"ZZ\",\"\"),cM(\"Z\",eM),cM(\"ZZ\",eM),sM([\"Z\",\"ZZ\"],function(M,b,p){p._useUTC=!0,p._tzm=Hb(eM,M)});var jb=/([\\+\\-]|\\d\\d)/gi;function Hb(M,b){var p,e,o=(b||\"\").match(M);return null===o?null:0===(e=60*(p=((o[o.length-1]||[])+\"\").match(jb)||[\"-\",0,0])[1]+rM(p[2]))?0:\"+\"===p[0]?e:-e}function Ub(M,b){var e,o;return b._isUTC?(e=b.clone(),o=(W(M)||O(M)?M.valueOf():_b(M).valueOf())-e.valueOf(),e._d.setTime(e._d.valueOf()+o),p.updateOffset(e,!1),e):_b(M).local()}function Yb(M){return-Math.round(M._d.getTimezoneOffset())}function Gb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}p.updateOffset=function(){};var Vb=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,$b=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Kb(M,b){var p,e,o,t=M,c=null;return Pb(M)?t={ms:M._milliseconds,d:M._days,M:M._months}:n(M)||!isNaN(+M)?(t={},b?t[b]=+M:t.milliseconds=+M):(c=Vb.exec(M))?(p=\"-\"===c[1]?-1:1,t={y:0,d:rM(c[fM])*p,h:rM(c[WM])*p,m:rM(c[hM])*p,s:rM(c[RM])*p,ms:rM(Ib(1e3*c[mM]))*p}):(c=$b.exec(M))?(p=\"-\"===c[1]?-1:1,t={y:Qb(c[2],p),M:Qb(c[3],p),w:Qb(c[4],p),d:Qb(c[5],p),h:Qb(c[6],p),m:Qb(c[7],p),s:Qb(c[8],p)}):null==t?t={}:\"object\"==typeof t&&(\"from\"in t||\"to\"in t)&&(o=function(M,b){var p;if(!M.isValid()||!b.isValid())return{milliseconds:0,months:0};b=Ub(b,M),M.isBefore(b)?p=Jb(M,b):((p=Jb(b,M)).milliseconds=-p.milliseconds,p.months=-p.months);return p}(_b(t.from),_b(t.to)),(t={}).ms=o.milliseconds,t.M=o.months),e=new Db(t),Pb(M)&&z(M,\"_locale\")&&(e._locale=M._locale),Pb(M)&&z(M,\"_isValid\")&&(e._isValid=M._isValid),e}function Qb(M,b){var p=M&&parseFloat(M.replace(\",\",\".\"));return(isNaN(p)?0:p)*b}function Jb(M,b){var p={};return p.months=b.month()-M.month()+12*(b.year()-M.year()),M.clone().add(p.months,\"M\").isAfter(b)&&--p.months,p.milliseconds=+b-+M.clone().add(p.months,\"M\"),p}function Zb(M,b){return function(p,e){var o;return null===e||isNaN(+e)||(L(b,\"moment().\"+b+\"(period, number) is deprecated. Please use moment().\"+b+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),o=p,p=e,e=o),Mp(this,Kb(p,e),M),this}}function Mp(M,b,e,o){var z=b._milliseconds,t=Ib(b._days),c=Ib(b._months);M.isValid()&&(o=null==o||o,c&&DM(M,XM(M,\"Month\")+c*e),t&&wM(M,\"Date\",XM(M,\"Date\")+t*e),z&&M._d.setTime(M._d.valueOf()+z*e),o&&p.updateOffset(M,t||c))}Kb.fn=Db.prototype,Kb.invalid=function(){return Kb(NaN)};var bp=Zb(1,\"add\"),pp=Zb(-1,\"subtract\");function ep(M){return\"string\"==typeof M||M instanceof String}function op(M){return W(M)||O(M)||ep(M)||n(M)||function(M){var b=e(M),p=!1;b&&(p=0===M.filter(function(b){return!n(b)&&ep(M)}).length);return b&&p}(M)||function(M){var b,p,e=o(M)&&!t(M),c=!1,n=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],O=n.length;for(b=0;b<O;b+=1)p=n[b],c=c||z(M,p);return e&&c}(M)||null==M}function zp(M,b){if(M.date()<b.date())return-zp(b,M);var p=12*(b.year()-M.year())+(b.month()-M.month()),e=M.clone().add(p,\"months\");return-(p+(b-e<0?(b-e)/(e-M.clone().add(p-1,\"months\")):(b-e)/(M.clone().add(p+1,\"months\")-e)))||0}function tp(M){var b;return void 0===M?this._locale._abbr:(null!=(b=lb(M))&&(this._locale=b),this)}p.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",p.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var cp=R(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(M){return void 0===M?this.localeData():this.locale(M)});function np(){return this._locale}var Op=1e3,ip=6e4,rp=36e5,ap=126227808e5;function sp(M,b){return(M%b+b)%b}function Ap(M,b,p){return M<100&&M>=0?new Date(M+400,b,p)-ap:new Date(M,b,p).valueOf()}function dp(M,b,p){return M<100&&M>=0?Date.UTC(M+400,b,p)-ap:Date.UTC(M,b,p)}function lp(M,b){return b.erasAbbrRegex(M)}function qp(){var M,b,p,e,o,z=[],t=[],c=[],n=[],O=this.eras();for(M=0,b=O.length;M<b;++M)p=OM(O[M].name),e=OM(O[M].abbr),o=OM(O[M].narrow),t.push(p),z.push(e),c.push(o),n.push(p),n.push(e),n.push(o);this._erasRegex=new RegExp(\"^(\"+n.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+z.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+c.join(\"|\")+\")\",\"i\")}function up(M,b){_(0,[M,M.length],0,b)}function fp(M,b,p,e,o){var z;return null==M?YM(this,e,o).year:(b>(z=GM(M,e,o))&&(b=z),Wp.call(this,M,b,p,e,o))}function Wp(M,b,p,e,o){var z=UM(M,b,p,e,o),t=jM(z.year,0,z.dayOfYear);return this.year(t.getUTCFullYear()),this.month(t.getUTCMonth()),this.date(t.getUTCDate()),this}_(\"N\",0,0,\"eraAbbr\"),_(\"NN\",0,0,\"eraAbbr\"),_(\"NNN\",0,0,\"eraAbbr\"),_(\"NNNN\",0,0,\"eraName\"),_(\"NNNNN\",0,0,\"eraNarrow\"),_(\"y\",[\"y\",1],\"yo\",\"eraYear\"),_(\"y\",[\"yy\",2],0,\"eraYear\"),_(\"y\",[\"yyy\",3],0,\"eraYear\"),_(\"y\",[\"yyyy\",4],0,\"eraYear\"),cM(\"N\",lp),cM(\"NN\",lp),cM(\"NNN\",lp),cM(\"NNNN\",function(M,b){return b.erasNameRegex(M)}),cM(\"NNNNN\",function(M,b){return b.erasNarrowRegex(M)}),sM([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],function(M,b,p,e){var o=p._locale.erasParse(M,e,p._strict);o?s(p).era=o:s(p).invalidEra=M}),cM(\"y\",MM),cM(\"yy\",MM),cM(\"yyy\",MM),cM(\"yyyy\",MM),cM(\"yo\",function(M,b){return b._eraYearOrdinalRegex||MM}),sM([\"y\",\"yy\",\"yyy\",\"yyyy\"],qM),sM([\"yo\"],function(M,b,p,e){var o;p._locale._eraYearOrdinalRegex&&(o=M.match(p._locale._eraYearOrdinalRegex)),p._locale.eraYearOrdinalParse?b[qM]=p._locale.eraYearOrdinalParse(M,o):b[qM]=parseInt(M,10)}),_(0,[\"gg\",2],0,function(){return this.weekYear()%100}),_(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100}),up(\"gggg\",\"weekYear\"),up(\"ggggg\",\"weekYear\"),up(\"GGGG\",\"isoWeekYear\"),up(\"GGGGG\",\"isoWeekYear\"),cM(\"G\",bM),cM(\"g\",bM),cM(\"GG\",V,H),cM(\"gg\",V,H),cM(\"GGGG\",J,Y),cM(\"gggg\",J,Y),cM(\"GGGGG\",Z,G),cM(\"ggggg\",Z,G),AM([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(M,b,p,e){b[e.substr(0,2)]=rM(M)}),AM([\"gg\",\"GG\"],function(M,b,e,o){b[o]=p.parseTwoDigitYear(M)}),_(\"Q\",0,\"Qo\",\"quarter\"),cM(\"Q\",j),sM(\"Q\",function(M,b){b[uM]=3*(rM(M)-1)}),_(\"D\",[\"DD\",2],\"Do\",\"date\"),cM(\"D\",V,zM),cM(\"DD\",V,H),cM(\"Do\",function(M,b){return M?b._dayOfMonthOrdinalParse||b._ordinalParse:b._dayOfMonthOrdinalParseLenient}),sM([\"D\",\"DD\"],fM),sM(\"Do\",function(M,b){b[fM]=rM(M.match(V)[0])});var hp=BM(\"Date\",!0);_(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),cM(\"DDD\",Q),cM(\"DDDD\",U),sM([\"DDD\",\"DDDD\"],function(M,b,p){p._dayOfYear=rM(M)}),_(\"m\",[\"mm\",2],0,\"minute\"),cM(\"m\",V,tM),cM(\"mm\",V,H),sM([\"m\",\"mm\"],hM);var Rp=BM(\"Minutes\",!1);_(\"s\",[\"ss\",2],0,\"second\"),cM(\"s\",V,tM),cM(\"ss\",V,H),sM([\"s\",\"ss\"],RM);var mp,gp,Lp=BM(\"Seconds\",!1);for(_(\"S\",0,0,function(){return~~(this.millisecond()/100)}),_(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),_(0,[\"SSS\",3],0,\"millisecond\"),_(0,[\"SSSS\",4],0,function(){return 10*this.millisecond()}),_(0,[\"SSSSS\",5],0,function(){return 100*this.millisecond()}),_(0,[\"SSSSSS\",6],0,function(){return 1e3*this.millisecond()}),_(0,[\"SSSSSSS\",7],0,function(){return 1e4*this.millisecond()}),_(0,[\"SSSSSSSS\",8],0,function(){return 1e5*this.millisecond()}),_(0,[\"SSSSSSSSS\",9],0,function(){return 1e6*this.millisecond()}),cM(\"S\",Q,j),cM(\"SS\",Q,H),cM(\"SSS\",Q,U),mp=\"SSSS\";mp.length<=9;mp+=\"S\")cM(mp,MM);function vp(M,b){b[mM]=rM(1e3*(\"0.\"+M))}for(mp=\"S\";mp.length<=9;mp+=\"S\")sM(mp,vp);gp=BM(\"Milliseconds\",!1),_(\"z\",0,0,\"zoneAbbr\"),_(\"zz\",0,0,\"zoneName\");var Np=f.prototype;function yp(M){return M}Np.add=bp,Np.calendar=function(M,b){1===arguments.length&&(arguments[0]?op(arguments[0])?(M=arguments[0],b=void 0):function(M){var b,p=o(M)&&!t(M),e=!1,c=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"];for(b=0;b<c.length;b+=1)e=e||z(M,c[b]);return p&&e}(arguments[0])&&(b=arguments[0],M=void 0):(M=void 0,b=void 0));var e=M||_b(),c=Ub(e,this).startOf(\"day\"),n=p.calendarFormat(this,c)||\"sameElse\",O=b&&(v(b[n])?b[n].call(this,e):b[n]);return this.format(O||this.localeData().calendar(n,this,_b(e)))},Np.clone=function(){return new f(this)},Np.diff=function(M,b,p){var e,o,z;if(!this.isValid())return NaN;if(!(e=Ub(M,this)).isValid())return NaN;switch(o=6e4*(e.utcOffset()-this.utcOffset()),b=D(b)){case\"year\":z=zp(this,e)/12;break;case\"month\":z=zp(this,e);break;case\"quarter\":z=zp(this,e)/3;break;case\"second\":z=(this-e)/1e3;break;case\"minute\":z=(this-e)/6e4;break;case\"hour\":z=(this-e)/36e5;break;case\"day\":z=(this-e-o)/864e5;break;case\"week\":z=(this-e-o)/6048e5;break;default:z=this-e}return p?z:iM(z)},Np.endOf=function(M){var b,e;if(void 0===(M=D(M))||\"millisecond\"===M||!this.isValid())return this;switch(e=this._isUTC?dp:Ap,M){case\"year\":b=e(this.year()+1,0,1)-1;break;case\"quarter\":b=e(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":b=e(this.year(),this.month()+1,1)-1;break;case\"week\":b=e(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":b=e(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":b=e(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":b=this._d.valueOf(),b+=rp-sp(b+(this._isUTC?0:this.utcOffset()*ip),rp)-1;break;case\"minute\":b=this._d.valueOf(),b+=ip-sp(b,ip)-1;break;case\"second\":b=this._d.valueOf(),b+=Op-sp(b,Op)-1}return this._d.setTime(b),p.updateOffset(this,!0),this},Np.format=function(M){M||(M=this.isUtc()?p.defaultFormatUtc:p.defaultFormat);var b=S(this,M);return this.localeData().postformat(b)},Np.from=function(M,b){return this.isValid()&&(W(M)&&M.isValid()||_b(M).isValid())?Kb({to:this,from:M}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()},Np.fromNow=function(M){return this.from(_b(),M)},Np.to=function(M,b){return this.isValid()&&(W(M)&&M.isValid()||_b(M).isValid())?Kb({from:this,to:M}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()},Np.toNow=function(M){return this.to(_b(),M)},Np.get=function(M){return v(this[M=D(M)])?this[M]():this},Np.invalidAt=function(){return s(this).overflow},Np.isAfter=function(M,b){var p=W(M)?M:_b(M);return!(!this.isValid()||!p.isValid())&&(\"millisecond\"===(b=D(b)||\"millisecond\")?this.valueOf()>p.valueOf():p.valueOf()<this.clone().startOf(b).valueOf())},Np.isBefore=function(M,b){var p=W(M)?M:_b(M);return!(!this.isValid()||!p.isValid())&&(\"millisecond\"===(b=D(b)||\"millisecond\")?this.valueOf()<p.valueOf():this.clone().endOf(b).valueOf()<p.valueOf())},Np.isBetween=function(M,b,p,e){var o=W(M)?M:_b(M),z=W(b)?b:_b(b);return!!(this.isValid()&&o.isValid()&&z.isValid())&&((\"(\"===(e=e||\"()\")[0]?this.isAfter(o,p):!this.isBefore(o,p))&&(\")\"===e[1]?this.isBefore(z,p):!this.isAfter(z,p)))},Np.isSame=function(M,b){var p,e=W(M)?M:_b(M);return!(!this.isValid()||!e.isValid())&&(\"millisecond\"===(b=D(b)||\"millisecond\")?this.valueOf()===e.valueOf():(p=e.valueOf(),this.clone().startOf(b).valueOf()<=p&&p<=this.clone().endOf(b).valueOf()))},Np.isSameOrAfter=function(M,b){return this.isSame(M,b)||this.isAfter(M,b)},Np.isSameOrBefore=function(M,b){return this.isSame(M,b)||this.isBefore(M,b)},Np.isValid=function(){return A(this)},Np.lang=cp,Np.locale=tp,Np.localeData=np,Np.max=Sb,Np.min=kb,Np.parsingFlags=function(){return r({},s(this))},Np.set=function(M,b){if(\"object\"==typeof M){var p,e=function(M){var b,p=[];for(b in M)z(M,b)&&p.push({unit:b,priority:I[b]});return p.sort(function(M,b){return M.priority-b.priority}),p}(M=P(M)),o=e.length;for(p=0;p<o;p++)this[e[p].unit](M[e[p].unit])}else if(v(this[M=D(M)]))return this[M](b);return this},Np.startOf=function(M){var b,e;if(void 0===(M=D(M))||\"millisecond\"===M||!this.isValid())return this;switch(e=this._isUTC?dp:Ap,M){case\"year\":b=e(this.year(),0,1);break;case\"quarter\":b=e(this.year(),this.month()-this.month()%3,1);break;case\"month\":b=e(this.year(),this.month(),1);break;case\"week\":b=e(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":b=e(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":b=e(this.year(),this.month(),this.date());break;case\"hour\":b=this._d.valueOf(),b-=sp(b+(this._isUTC?0:this.utcOffset()*ip),rp);break;case\"minute\":b=this._d.valueOf(),b-=sp(b,ip);break;case\"second\":b=this._d.valueOf(),b-=sp(b,Op)}return this._d.setTime(b),p.updateOffset(this,!0),this},Np.subtract=pp,Np.toArray=function(){var M=this;return[M.year(),M.month(),M.date(),M.hour(),M.minute(),M.second(),M.millisecond()]},Np.toObject=function(){var M=this;return{years:M.year(),months:M.month(),date:M.date(),hours:M.hours(),minutes:M.minutes(),seconds:M.seconds(),milliseconds:M.milliseconds()}},Np.toDate=function(){return new Date(this.valueOf())},Np.toISOString=function(M){if(!this.isValid())return null;var b=!0!==M,p=b?this.clone().utc():this;return p.year()<0||p.year()>9999?S(p,b?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):v(Date.prototype.toISOString)?b?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace(\"Z\",S(p,\"Z\")):S(p,b?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")},Np.inspect=function(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var M,b,p,e=\"moment\",o=\"\";return this.isLocal()||(e=0===this.utcOffset()?\"moment.utc\":\"moment.parseZone\",o=\"Z\"),M=\"[\"+e+'(\"]',b=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",p=o+'[\")]',this.format(M+b+\"-MM-DD[T]HH:mm:ss.SSS\"+p)},\"undefined\"!=typeof Symbol&&null!=Symbol.for&&(Np[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),Np.toJSON=function(){return this.isValid()?this.toISOString():null},Np.toString=function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},Np.unix=function(){return Math.floor(this.valueOf()/1e3)},Np.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},Np.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},Np.eraName=function(){var M,b,p,e=this.localeData().eras();for(M=0,b=e.length;M<b;++M){if(p=this.clone().startOf(\"day\").valueOf(),e[M].since<=p&&p<=e[M].until)return e[M].name;if(e[M].until<=p&&p<=e[M].since)return e[M].name}return\"\"},Np.eraNarrow=function(){var M,b,p,e=this.localeData().eras();for(M=0,b=e.length;M<b;++M){if(p=this.clone().startOf(\"day\").valueOf(),e[M].since<=p&&p<=e[M].until)return e[M].narrow;if(e[M].until<=p&&p<=e[M].since)return e[M].narrow}return\"\"},Np.eraAbbr=function(){var M,b,p,e=this.localeData().eras();for(M=0,b=e.length;M<b;++M){if(p=this.clone().startOf(\"day\").valueOf(),e[M].since<=p&&p<=e[M].until)return e[M].abbr;if(e[M].until<=p&&p<=e[M].since)return e[M].abbr}return\"\"},Np.eraYear=function(){var M,b,e,o,z=this.localeData().eras();for(M=0,b=z.length;M<b;++M)if(e=z[M].since<=z[M].until?1:-1,o=this.clone().startOf(\"day\").valueOf(),z[M].since<=o&&o<=z[M].until||z[M].until<=o&&o<=z[M].since)return(this.year()-p(z[M].since).year())*e+z[M].offset;return this.year()},Np.year=yM,Np.isLeapYear=function(){return lM(this.year())},Np.weekYear=function(M){return fp.call(this,M,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)},Np.isoWeekYear=function(M){return fp.call(this,M,this.isoWeek(),this.isoWeekday(),1,4)},Np.quarter=Np.quarters=function(M){return null==M?Math.ceil((this.month()+1)/3):this.month(3*(M-1)+this.month()%3)},Np.month=PM,Np.daysInMonth=function(){return xM(this.year(),this.month())},Np.week=Np.weeks=function(M){var b=this.localeData().week(this);return null==M?b:this.add(7*(M-b),\"d\")},Np.isoWeek=Np.isoWeeks=function(M){var b=YM(this,1,4).week;return null==M?b:this.add(7*(M-b),\"d\")},Np.weeksInYear=function(){var M=this.localeData()._week;return GM(this.year(),M.dow,M.doy)},Np.weeksInWeekYear=function(){var M=this.localeData()._week;return GM(this.weekYear(),M.dow,M.doy)},Np.isoWeeksInYear=function(){return GM(this.year(),1,4)},Np.isoWeeksInISOWeekYear=function(){return GM(this.isoWeekYear(),1,4)},Np.date=hp,Np.day=Np.days=function(M){if(!this.isValid())return null!=M?this:NaN;var b=XM(this,\"Day\");return null!=M?(M=function(M,b){return\"string\"!=typeof M?M:isNaN(M)?\"number\"==typeof(M=b.weekdaysParse(M))?M:null:parseInt(M,10)}(M,this.localeData()),this.add(M-b,\"d\")):b},Np.weekday=function(M){if(!this.isValid())return null!=M?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==M?b:this.add(M-b,\"d\")},Np.isoWeekday=function(M){if(!this.isValid())return null!=M?this:NaN;if(null!=M){var b=function(M,b){return\"string\"==typeof M?b.weekdaysParse(M)%7||7:isNaN(M)?null:M}(M,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7},Np.dayOfYear=function(M){var b=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==M?b:this.add(M-b,\"d\")},Np.hour=Np.hours=tb,Np.minute=Np.minutes=Rp,Np.second=Np.seconds=Lp,Np.millisecond=Np.milliseconds=gp,Np.utcOffset=function(M,b,e){var o,z=this._offset||0;if(!this.isValid())return null!=M?this:NaN;if(null!=M){if(\"string\"==typeof M){if(null===(M=Hb(eM,M)))return this}else Math.abs(M)<16&&!e&&(M*=60);return!this._isUTC&&b&&(o=Yb(this)),this._offset=M,this._isUTC=!0,null!=o&&this.add(o,\"m\"),z!==M&&(!b||this._changeInProgress?Mp(this,Kb(M-z,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,p.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?z:Yb(this)},Np.utc=function(M){return this.utcOffset(0,M)},Np.local=function(M){return this._isUTC&&(this.utcOffset(0,M),this._isUTC=!1,M&&this.subtract(Yb(this),\"m\")),this},Np.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\"string\"==typeof this._i){var M=Hb(pM,this._i);null!=M?this.utcOffset(M):this.utcOffset(0,!0)}return this},Np.hasAlignedHourOffset=function(M){return!!this.isValid()&&(M=M?_b(M).utcOffset():0,(this.utcOffset()-M)%60==0)},Np.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Np.isLocal=function(){return!!this.isValid()&&!this._isUTC},Np.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},Np.isUtc=Gb,Np.isUTC=Gb,Np.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},Np.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},Np.dates=R(\"dates accessor is deprecated. Use date instead.\",hp),Np.months=R(\"months accessor is deprecated. Use month instead\",PM),Np.years=R(\"years accessor is deprecated. Use year instead\",yM),Np.zone=R(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",function(M,b){return null!=M?(\"string\"!=typeof M&&(M=-M),this.utcOffset(M,b),this):-this.utcOffset()}),Np.isDSTShifted=R(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",function(){if(!c(this._isDSTShifted))return this._isDSTShifted;var M,b={};return u(b,this),(b=xb(b))._a?(M=b._isUTC?a(b._a):_b(b._a),this._isDSTShifted=this.isValid()&&function(M,b,p){var e,o=Math.min(M.length,b.length),z=Math.abs(M.length-b.length),t=0;for(e=0;e<o;e++)(p&&M[e]!==b[e]||!p&&rM(M[e])!==rM(b[e]))&&t++;return t+z}(b._a,M.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted});var Bp=y.prototype;function Xp(M,b,p,e){var o=lb(),z=a().set(e,b);return o[p](z,M)}function wp(M,b,p){if(n(M)&&(b=M,M=void 0),M=M||\"\",null!=b)return Xp(M,b,p,\"month\");var e,o=[];for(e=0;e<12;e++)o[e]=Xp(M,e,p,\"month\");return o}function xp(M,b,p,e){\"boolean\"==typeof M?(n(b)&&(p=b,b=void 0),b=b||\"\"):(p=b=M,M=!1,n(b)&&(p=b,b=void 0),b=b||\"\");var o,z=lb(),t=M?z._week.dow:0,c=[];if(null!=p)return Xp(b,(p+t)%7,e,\"day\");for(o=0;o<7;o++)c[o]=Xp(b,(o+t)%7,e,\"day\");return c}Bp.calendar=function(M,b,p){var e=this._calendar[M]||this._calendar.sameElse;return v(e)?e.call(b,p):e},Bp.longDateFormat=function(M){var b=this._longDateFormat[M],p=this._longDateFormat[M.toUpperCase()];return b||!p?b:(this._longDateFormat[M]=p.match(X).map(function(M){return\"MMMM\"===M||\"MM\"===M||\"DD\"===M||\"dddd\"===M?M.slice(1):M}).join(\"\"),this._longDateFormat[M])},Bp.invalidDate=function(){return this._invalidDate},Bp.ordinal=function(M){return this._ordinal.replace(\"%d\",M)},Bp.preparse=yp,Bp.postformat=yp,Bp.relativeTime=function(M,b,p,e){var o=this._relativeTime[p];return v(o)?o(M,b,p,e):o.replace(/%d/i,M)},Bp.pastFuture=function(M,b){var p=this._relativeTime[M>0?\"future\":\"past\"];return v(p)?p(b):p.replace(/%s/i,b)},Bp.set=function(M){var b,p;for(p in M)z(M,p)&&(v(b=M[p])?this[p]=b:this[\"_\"+p]=b);this._config=M,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)},Bp.eras=function(M,b){var e,o,z,t=this._eras||lb(\"en\")._eras;for(e=0,o=t.length;e<o;++e){if(\"string\"==typeof t[e].since)z=p(t[e].since).startOf(\"day\"),t[e].since=z.valueOf();switch(typeof t[e].until){case\"undefined\":t[e].until=1/0;break;case\"string\":z=p(t[e].until).startOf(\"day\").valueOf(),t[e].until=z.valueOf()}}return t},Bp.erasParse=function(M,b,p){var e,o,z,t,c,n=this.eras();for(M=M.toUpperCase(),e=0,o=n.length;e<o;++e)if(z=n[e].name.toUpperCase(),t=n[e].abbr.toUpperCase(),c=n[e].narrow.toUpperCase(),p)switch(b){case\"N\":case\"NN\":case\"NNN\":if(t===M)return n[e];break;case\"NNNN\":if(z===M)return n[e];break;case\"NNNNN\":if(c===M)return n[e]}else if([z,t,c].indexOf(M)>=0)return n[e]},Bp.erasConvertYear=function(M,b){var e=M.since<=M.until?1:-1;return void 0===b?p(M.since).year():p(M.since).year()+(b-M.offset)*e},Bp.erasAbbrRegex=function(M){return z(this,\"_erasAbbrRegex\")||qp.call(this),M?this._erasAbbrRegex:this._erasRegex},Bp.erasNameRegex=function(M){return z(this,\"_erasNameRegex\")||qp.call(this),M?this._erasNameRegex:this._erasRegex},Bp.erasNarrowRegex=function(M){return z(this,\"_erasNarrowRegex\")||qp.call(this),M?this._erasNarrowRegex:this._erasRegex},Bp.months=function(M,b){return M?e(this._months)?this._months[M.month()]:this._months[(this._months.isFormat||kM).test(b)?\"format\":\"standalone\"][M.month()]:e(this._months)?this._months:this._months.standalone},Bp.monthsShort=function(M,b){return M?e(this._monthsShort)?this._monthsShort[M.month()]:this._monthsShort[kM.test(b)?\"format\":\"standalone\"][M.month()]:e(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},Bp.monthsParse=function(M,b,p){var e,o,z;if(this._monthsParseExact)return EM.call(this,M,b,p);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),e=0;e<12;e++){if(o=a([2e3,e]),p&&!this._longMonthsParse[e]&&(this._longMonthsParse[e]=new RegExp(\"^\"+this.months(o,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[e]=new RegExp(\"^\"+this.monthsShort(o,\"\").replace(\".\",\"\")+\"$\",\"i\")),p||this._monthsParse[e]||(z=\"^\"+this.months(o,\"\")+\"|^\"+this.monthsShort(o,\"\"),this._monthsParse[e]=new RegExp(z.replace(\".\",\"\"),\"i\")),p&&\"MMMM\"===b&&this._longMonthsParse[e].test(M))return e;if(p&&\"MMM\"===b&&this._shortMonthsParse[e].test(M))return e;if(!p&&this._monthsParse[e].test(M))return e}},Bp.monthsRegex=function(M){return this._monthsParseExact?(z(this,\"_monthsRegex\")||IM.call(this),M?this._monthsStrictRegex:this._monthsRegex):(z(this,\"_monthsRegex\")||(this._monthsRegex=CM),this._monthsStrictRegex&&M?this._monthsStrictRegex:this._monthsRegex)},Bp.monthsShortRegex=function(M){return this._monthsParseExact?(z(this,\"_monthsRegex\")||IM.call(this),M?this._monthsShortStrictRegex:this._monthsShortRegex):(z(this,\"_monthsShortRegex\")||(this._monthsShortRegex=SM),this._monthsShortStrictRegex&&M?this._monthsShortStrictRegex:this._monthsShortRegex)},Bp.week=function(M){return YM(M,this._week.dow,this._week.doy).week},Bp.firstDayOfYear=function(){return this._week.doy},Bp.firstDayOfWeek=function(){return this._week.dow},Bp.weekdays=function(M,b){var p=e(this._weekdays)?this._weekdays:this._weekdays[M&&!0!==M&&this._weekdays.isFormat.test(b)?\"format\":\"standalone\"];return!0===M?VM(p,this._week.dow):M?p[M.day()]:p},Bp.weekdaysMin=function(M){return!0===M?VM(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin},Bp.weekdaysShort=function(M){return!0===M?VM(this._weekdaysShort,this._week.dow):M?this._weekdaysShort[M.day()]:this._weekdaysShort},Bp.weekdaysParse=function(M,b,p){var e,o,z;if(this._weekdaysParseExact)return bb.call(this,M,b,p);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),e=0;e<7;e++){if(o=a([2e3,1]).day(e),p&&!this._fullWeekdaysParse[e]&&(this._fullWeekdaysParse[e]=new RegExp(\"^\"+this.weekdays(o,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[e]=new RegExp(\"^\"+this.weekdaysShort(o,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[e]=new RegExp(\"^\"+this.weekdaysMin(o,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[e]||(z=\"^\"+this.weekdays(o,\"\")+\"|^\"+this.weekdaysShort(o,\"\")+\"|^\"+this.weekdaysMin(o,\"\"),this._weekdaysParse[e]=new RegExp(z.replace(\".\",\"\"),\"i\")),p&&\"dddd\"===b&&this._fullWeekdaysParse[e].test(M))return e;if(p&&\"ddd\"===b&&this._shortWeekdaysParse[e].test(M))return e;if(p&&\"dd\"===b&&this._minWeekdaysParse[e].test(M))return e;if(!p&&this._weekdaysParse[e].test(M))return e}},Bp.weekdaysRegex=function(M){return this._weekdaysParseExact?(z(this,\"_weekdaysRegex\")||pb.call(this),M?this._weekdaysStrictRegex:this._weekdaysRegex):(z(this,\"_weekdaysRegex\")||(this._weekdaysRegex=JM),this._weekdaysStrictRegex&&M?this._weekdaysStrictRegex:this._weekdaysRegex)},Bp.weekdaysShortRegex=function(M){return this._weekdaysParseExact?(z(this,\"_weekdaysRegex\")||pb.call(this),M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(z(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=ZM),this._weekdaysShortStrictRegex&&M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},Bp.weekdaysMinRegex=function(M){return this._weekdaysParseExact?(z(this,\"_weekdaysRegex\")||pb.call(this),M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(z(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=Mb),this._weekdaysMinStrictRegex&&M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},Bp.isPM=function(M){return\"p\"===(M+\"\").toLowerCase().charAt(0)},Bp.meridiem=function(M,b,p){return M>11?p?\"pm\":\"PM\":p?\"am\":\"AM\"},Ab(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(M){var b=M%10;return M+(1===rM(M%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\")}}),p.lang=R(\"moment.lang is deprecated. Use moment.locale instead.\",Ab),p.langData=R(\"moment.langData is deprecated. Use moment.localeData instead.\",lb);var Tp=Math.abs;function _p(M,b,p,e){var o=Kb(b,p);return M._milliseconds+=e*o._milliseconds,M._days+=e*o._days,M._months+=e*o._months,M._bubble()}function kp(M){return M<0?Math.floor(M):Math.ceil(M)}function Sp(M){return 4800*M/146097}function Cp(M){return 146097*M/4800}function Ep(M){return function(){return this.as(M)}}var Dp=Ep(\"ms\"),Pp=Ep(\"s\"),Ip=Ep(\"m\"),Fp=Ep(\"h\"),jp=Ep(\"d\"),Hp=Ep(\"w\"),Up=Ep(\"M\"),Yp=Ep(\"Q\"),Gp=Ep(\"y\"),Vp=Dp;function $p(M){return function(){return this.isValid()?this._data[M]:NaN}}var Kp=$p(\"milliseconds\"),Qp=$p(\"seconds\"),Jp=$p(\"minutes\"),Zp=$p(\"hours\"),Me=$p(\"days\"),be=$p(\"months\"),pe=$p(\"years\");var ee=Math.round,oe={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ze(M,b,p,e,o){return o.relativeTime(b||1,!!p,M,e)}var te=Math.abs;function ce(M){return(M>0)-(M<0)||+M}function ne(){if(!this.isValid())return this.localeData().invalidDate();var M,b,p,e,o,z,t,c,n=te(this._milliseconds)/1e3,O=te(this._days),i=te(this._months),r=this.asSeconds();return r?(M=iM(n/60),b=iM(M/60),n%=60,M%=60,p=iM(i/12),i%=12,e=n?n.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",o=r<0?\"-\":\"\",z=ce(this._months)!==ce(r)?\"-\":\"\",t=ce(this._days)!==ce(r)?\"-\":\"\",c=ce(this._milliseconds)!==ce(r)?\"-\":\"\",o+\"P\"+(p?z+p+\"Y\":\"\")+(i?z+i+\"M\":\"\")+(O?t+O+\"D\":\"\")+(b||M||n?\"T\":\"\")+(b?c+b+\"H\":\"\")+(M?c+M+\"M\":\"\")+(n?c+e+\"S\":\"\")):\"P0D\"}var Oe=Db.prototype;return Oe.isValid=function(){return this._isValid},Oe.abs=function(){var M=this._data;return this._milliseconds=Tp(this._milliseconds),this._days=Tp(this._days),this._months=Tp(this._months),M.milliseconds=Tp(M.milliseconds),M.seconds=Tp(M.seconds),M.minutes=Tp(M.minutes),M.hours=Tp(M.hours),M.months=Tp(M.months),M.years=Tp(M.years),this},Oe.add=function(M,b){return _p(this,M,b,1)},Oe.subtract=function(M,b){return _p(this,M,b,-1)},Oe.as=function(M){if(!this.isValid())return NaN;var b,p,e=this._milliseconds;if(\"month\"===(M=D(M))||\"quarter\"===M||\"year\"===M)switch(b=this._days+e/864e5,p=this._months+Sp(b),M){case\"month\":return p;case\"quarter\":return p/3;case\"year\":return p/12}else switch(b=this._days+Math.round(Cp(this._months)),M){case\"week\":return b/7+e/6048e5;case\"day\":return b+e/864e5;case\"hour\":return 24*b+e/36e5;case\"minute\":return 1440*b+e/6e4;case\"second\":return 86400*b+e/1e3;case\"millisecond\":return Math.floor(864e5*b)+e;default:throw new Error(\"Unknown unit \"+M)}},Oe.asMilliseconds=Dp,Oe.asSeconds=Pp,Oe.asMinutes=Ip,Oe.asHours=Fp,Oe.asDays=jp,Oe.asWeeks=Hp,Oe.asMonths=Up,Oe.asQuarters=Yp,Oe.asYears=Gp,Oe.valueOf=Vp,Oe._bubble=function(){var M,b,p,e,o,z=this._milliseconds,t=this._days,c=this._months,n=this._data;return z>=0&&t>=0&&c>=0||z<=0&&t<=0&&c<=0||(z+=864e5*kp(Cp(c)+t),t=0,c=0),n.milliseconds=z%1e3,M=iM(z/1e3),n.seconds=M%60,b=iM(M/60),n.minutes=b%60,p=iM(b/60),n.hours=p%24,t+=iM(p/24),c+=o=iM(Sp(t)),t-=kp(Cp(o)),e=iM(c/12),c%=12,n.days=t,n.months=c,n.years=e,this},Oe.clone=function(){return Kb(this)},Oe.get=function(M){return M=D(M),this.isValid()?this[M+\"s\"]():NaN},Oe.milliseconds=Kp,Oe.seconds=Qp,Oe.minutes=Jp,Oe.hours=Zp,Oe.days=Me,Oe.weeks=function(){return iM(this.days()/7)},Oe.months=be,Oe.years=pe,Oe.humanize=function(M,b){if(!this.isValid())return this.localeData().invalidDate();var p,e,o=!1,z=oe;return\"object\"==typeof M&&(b=M,M=!1),\"boolean\"==typeof M&&(o=M),\"object\"==typeof b&&(z=Object.assign({},oe,b),null!=b.s&&null==b.ss&&(z.ss=b.s-1)),e=function(M,b,p,e){var o=Kb(M).abs(),z=ee(o.as(\"s\")),t=ee(o.as(\"m\")),c=ee(o.as(\"h\")),n=ee(o.as(\"d\")),O=ee(o.as(\"M\")),i=ee(o.as(\"w\")),r=ee(o.as(\"y\")),a=z<=p.ss&&[\"s\",z]||z<p.s&&[\"ss\",z]||t<=1&&[\"m\"]||t<p.m&&[\"mm\",t]||c<=1&&[\"h\"]||c<p.h&&[\"hh\",c]||n<=1&&[\"d\"]||n<p.d&&[\"dd\",n];return null!=p.w&&(a=a||i<=1&&[\"w\"]||i<p.w&&[\"ww\",i]),(a=a||O<=1&&[\"M\"]||O<p.M&&[\"MM\",O]||r<=1&&[\"y\"]||[\"yy\",r])[2]=b,a[3]=+M>0,a[4]=e,ze.apply(null,a)}(this,!o,z,p=this.localeData()),o&&(e=p.pastFuture(+this,e)),p.postformat(e)},Oe.toISOString=ne,Oe.toString=ne,Oe.toJSON=ne,Oe.locale=tp,Oe.localeData=np,Oe.toIsoString=R(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",ne),Oe.lang=cp,_(\"X\",0,0,\"unix\"),_(\"x\",0,0,\"valueOf\"),cM(\"x\",bM),cM(\"X\",/[+-]?\\d+(\\.\\d{1,3})?/),sM(\"X\",function(M,b,p){p._d=new Date(1e3*parseFloat(M))}),sM(\"x\",function(M,b,p){p._d=new Date(rM(M))}),p.version=\"2.30.1\",M=_b,p.fn=Np,p.min=function(){return Cb(\"isBefore\",[].slice.call(arguments,0))},p.max=function(){return Cb(\"isAfter\",[].slice.call(arguments,0))},p.now=function(){return Date.now?Date.now():+new Date},p.utc=a,p.unix=function(M){return _b(1e3*M)},p.months=function(M,b){return wp(M,b,\"months\")},p.isDate=O,p.locale=Ab,p.invalid=d,p.duration=Kb,p.isMoment=W,p.weekdays=function(M,b,p){return xp(M,b,p,\"weekdays\")},p.parseZone=function(){return _b.apply(null,arguments).parseZone()},p.localeData=lb,p.isDuration=Pb,p.monthsShort=function(M,b){return wp(M,b,\"monthsShort\")},p.weekdaysMin=function(M,b,p){return xp(M,b,p,\"weekdaysMin\")},p.defineLocale=db,p.updateLocale=function(M,b){if(null!=b){var p,e,o=nb;null!=Ob[M]&&null!=Ob[M].parentLocale?Ob[M].set(N(Ob[M]._config,b)):(null!=(e=sb(M))&&(o=e._config),b=N(o,b),null==e&&(b.abbr=M),(p=new y(b)).parentLocale=Ob[M],Ob[M]=p),Ab(M)}else null!=Ob[M]&&(null!=Ob[M].parentLocale?(Ob[M]=Ob[M].parentLocale,M===Ab()&&Ab(M)):null!=Ob[M]&&delete Ob[M]);return Ob[M]},p.locales=function(){return m(Ob)},p.weekdaysShort=function(M,b,p){return xp(M,b,p,\"weekdaysShort\")},p.normalizeUnits=D,p.relativeTimeRounding=function(M){return void 0===M?ee:\"function\"==typeof M&&(ee=M,!0)},p.relativeTimeThreshold=function(M,b){return void 0!==oe[M]&&(void 0===b?oe[M]:(oe[M]=b,\"s\"===M&&(oe.ss=b-1),!0))},p.calendarFormat=function(M,b){var p=M.diff(b,\"days\",!0);return p<-6?\"sameElse\":p<-1?\"lastWeek\":p<0?\"lastDay\":p<1?\"sameDay\":p<2?\"nextDay\":p<7?\"nextWeek\":\"sameElse\"},p.prototype=Np,p.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},p}),function(M,b){\"use strict\";\"object\"==typeof module&&module.exports?module.exports=b(require(\"moment\")):\"function\"==typeof define&&define.amd?define([\"moment\"],b):b(M.moment)}(this,function(M){\"use strict\";void 0===M.version&&M.default&&(M=M.default);var b,p={},e={},o={},z={},t={};M&&\"string\"==typeof M.version||X(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\");var c=M.version.split(\".\"),n=+c[0],O=+c[1];function i(M){return M>96?M-87:M>64?M-29:M-48}function r(M){var b=0,p=M.split(\".\"),e=p[0],o=p[1]||\"\",z=1,t=0,c=1;for(45===M.charCodeAt(0)&&(b=1,c=-1);b<e.length;b++)t=60*t+i(e.charCodeAt(b));for(b=0;b<o.length;b++)z/=60,t+=i(o.charCodeAt(b))*z;return t*c}function a(M){for(var b=0;b<M.length;b++)M[b]=r(M[b])}function s(M,b){var p,e=[];for(p=0;p<b.length;p++)e[p]=M[b[p]];return e}function A(M){var b=M.split(\"|\"),p=b[2].split(\" \"),e=b[3].split(\"\"),o=b[4].split(\" \");return a(p),a(e),a(o),function(M,b){for(var p=0;p<b;p++)M[p]=Math.round((M[p-1]||0)+6e4*M[p]);M[b-1]=1/0}(o,e.length),{name:b[0],abbrs:s(b[1].split(\" \"),e),offsets:s(p,e),untils:o,population:0|b[5]}}function d(M){M&&this._set(A(M))}function l(M,b){this.name=M,this.zones=b}function q(M){var b=M.toTimeString(),p=b.match(/\\([a-z ]+\\)/i);\"GMT\"===(p=p&&p[0]?(p=p[0].match(/[A-Z]/g))?p.join(\"\"):void 0:(p=b.match(/[A-Z]{3,5}/g))?p[0]:void 0)&&(p=void 0),this.at=+M,this.abbr=p,this.offset=M.getTimezoneOffset()}function u(M){this.zone=M,this.offsetScore=0,this.abbrScore=0}function f(M,b){for(var p,e;e=6e4*((b.at-M.at)/12e4|0);)(p=new q(new Date(M.at+e))).offset===M.offset?M=p:b=p;return M}function W(M,b){return M.offsetScore!==b.offsetScore?M.offsetScore-b.offsetScore:M.abbrScore!==b.abbrScore?M.abbrScore-b.abbrScore:M.zone.population!==b.zone.population?b.zone.population-M.zone.population:b.zone.name.localeCompare(M.zone.name)}function h(M,b){var p,e;for(a(b),p=0;p<b.length;p++)e=b[p],t[e]=t[e]||{},t[e][M]=!0}function R(M){var b,p,e,o,c=M.length,n={},O=[],i={};for(b=0;b<c;b++)if(e=M[b].offset,!i.hasOwnProperty(e)){for(p in o=t[e]||{})o.hasOwnProperty(p)&&(n[p]=!0);i[e]=!0}for(b in n)n.hasOwnProperty(b)&&O.push(z[b]);return O}function m(){try{var M=Intl.DateTimeFormat().resolvedOptions().timeZone;if(M&&M.length>3){var b=z[g(M)];if(b)return b;X(\"Moment Timezone found \"+M+\" from the Intl api, but did not have that data loaded.\")}}catch(M){}var p,e,o,t=function(){var M,b,p,e,o=(new Date).getFullYear()-2,z=new q(new Date(o,0,1)),t=z.offset,c=[z];for(e=1;e<48;e++)(p=new Date(o,e,1).getTimezoneOffset())!==t&&(M=f(z,b=new q(new Date(o,e,1))),c.push(M),c.push(new q(new Date(M.at+6e4))),z=b,t=p);for(e=0;e<4;e++)c.push(new q(new Date(o+e,0,1))),c.push(new q(new Date(o+e,6,1)));return c}(),c=t.length,n=R(t),O=[];for(e=0;e<n.length;e++){for(p=new u(v(n[e]),c),o=0;o<c;o++)p.scoreOffsetAt(t[o]);O.push(p)}return O.sort(W),O.length>0?O[0].zone.name:void 0}function g(M){return(M||\"\").toLowerCase().replace(/\\//g,\"_\")}function L(M){var b,e,o,t;for(\"string\"==typeof M&&(M=[M]),b=0;b<M.length;b++)t=g(e=(o=M[b].split(\"|\"))[0]),p[t]=M[b],z[t]=e,h(t,o[2].split(\" \"))}function v(M,b){M=g(M);var o,t=p[M];return t instanceof d?t:\"string\"==typeof t?(t=new d(t),p[M]=t,t):e[M]&&b!==v&&(o=v(e[M],v))?((t=p[M]=new d)._set(o),t.name=z[M],t):null}function N(M){var b,p,o,t;for(\"string\"==typeof M&&(M=[M]),b=0;b<M.length;b++)o=g((p=M[b].split(\"|\"))[0]),t=g(p[1]),e[o]=t,z[o]=p[0],e[t]=o,z[t]=p[1]}function y(M){L(M.zones),N(M.links),function(M){var b,p,e,z;if(M&&M.length)for(b=0;b<M.length;b++)p=(z=M[b].split(\"|\"))[0].toUpperCase(),e=z[1].split(\" \"),o[p]=new l(p,e)}(M.countries),w.dataVersion=M.version}function B(M){var b=\"X\"===M._f||\"x\"===M._f;return!(!M._a||void 0!==M._tzm||b)}function X(M){\"undefined\"!=typeof console&&\"function\"==typeof console.error&&console.error(M)}function w(b){var p,e=Array.prototype.slice.call(arguments,0,-1),o=arguments[arguments.length-1],z=M.utc.apply(null,e);return!M.isMoment(b)&&B(z)&&(p=v(o))&&z.add(p.parse(z),\"minutes\"),z.tz(o),z}(n<2||2===n&&O<6)&&X(\"Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js \"+M.version+\". See momentjs.com\"),d.prototype={_set:function(M){this.name=M.name,this.abbrs=M.abbrs,this.untils=M.untils,this.offsets=M.offsets,this.population=M.population},_index:function(M){var b;if((b=function(M,b){var p,e=b.length;if(M<b[0])return 0;if(e>1&&b[e-1]===1/0&&M>=b[e-2])return e-1;if(M>=b[e-1])return-1;for(var o=0,z=e-1;z-o>1;)b[p=Math.floor((o+z)/2)]<=M?o=p:z=p;return z}(+M,this.untils))>=0)return b},countries:function(){var M=this.name;return Object.keys(o).filter(function(b){return-1!==o[b].zones.indexOf(M)})},parse:function(M){var b,p,e,o,z=+M,t=this.offsets,c=this.untils,n=c.length-1;for(o=0;o<n;o++)if(b=t[o],p=t[o+1],e=t[o?o-1:o],b<p&&w.moveAmbiguousForward?b=p:b>e&&w.moveInvalidForward&&(b=e),z<c[o]-6e4*b)return t[o];return t[n]},abbr:function(M){return this.abbrs[this._index(M)]},offset:function(M){return X(\"zone.offset has been deprecated in favor of zone.utcOffset\"),this.offsets[this._index(M)]},utcOffset:function(M){return this.offsets[this._index(M)]}},u.prototype.scoreOffsetAt=function(M){this.offsetScore+=Math.abs(this.zone.utcOffset(M.at)-M.offset),this.zone.abbr(M.at).replace(/[^A-Z]/g,\"\")!==M.abbr&&this.abbrScore++},w.version=\"0.5.48\",w.dataVersion=\"\",w._zones=p,w._links=e,w._names=z,w._countries=o,w.add=L,w.link=N,w.load=y,w.zone=v,w.zoneExists=function M(b){return M.didShowError||(M.didShowError=!0,X(\"moment.tz.zoneExists('\"+b+\"') has been deprecated in favor of !moment.tz.zone('\"+b+\"')\")),!!v(b)},w.guess=function(M){return b&&!M||(b=m()),b},w.names=function(){var M,b=[];for(M in z)z.hasOwnProperty(M)&&(p[M]||p[e[M]])&&z[M]&&b.push(z[M]);return b.sort()},w.Zone=d,w.unpack=A,w.unpackBase60=r,w.needsOffset=B,w.moveInvalidForward=!0,w.moveAmbiguousForward=!1,w.countries=function(){return Object.keys(o)},w.zonesForCountry=function(M,b){var p;if(p=(p=M).toUpperCase(),!(M=o[p]||null))return null;var e=M.zones.sort();return b?e.map(function(M){return{name:M,offset:v(M).utcOffset(new Date)}}):e};var x,T=M.fn;function _(M){return function(){return this._z?this._z.abbr(this):M.call(this)}}function k(M){return function(){return this._z=null,M.apply(this,arguments)}}M.tz=w,M.defaultZone=null,M.updateOffset=function(b,p){var e,o=M.defaultZone;if(void 0===b._z&&(o&&B(b)&&!b._isUTC&&b.isValid()&&(b._d=M.utc(b._a)._d,b.utc().add(o.parse(b),\"minutes\")),b._z=o),b._z)if(e=b._z.utcOffset(b),Math.abs(e)<16&&(e/=60),void 0!==b.utcOffset){var z=b._z;b.utcOffset(-e,p),b._z=z}else b.zone(e,p)},T.tz=function(b,p){if(b){if(\"string\"!=typeof b)throw new Error(\"Time zone name must be a string, got \"+b+\" [\"+typeof b+\"]\");return this._z=v(b),this._z?M.updateOffset(this,p):X(\"Moment Timezone has no data for \"+b+\". See http://momentjs.com/timezone/docs/#/data-loading/.\"),this}if(this._z)return this._z.name},T.zoneName=_(T.zoneName),T.zoneAbbr=_(T.zoneAbbr),T.utc=k(T.utc),T.local=k(T.local),T.utcOffset=(x=T.utcOffset,function(){return arguments.length>0&&(this._z=null),x.apply(this,arguments)}),M.tz.setDefault=function(b){return(n<2||2===n&&O<9)&&X(\"Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js \"+M.version+\".\"),M.defaultZone=b?v(b):null,M};var S=M.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(S)?(S.push(\"_z\"),S.push(\"_a\")):S&&(S._z=null),y({version:\"2025b\",zones:[\"Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5\",\"Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5\",\"Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5\",\"Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6\",\"Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4\",\"Africa/Maputo|LMT CAT|-2a.i -20|01|-2sw2a.i|26e5\",\"Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6\",\"Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5\",\"Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3\",\"Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4\",\"Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5\",\"Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|\",\"Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5\",\"Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5\",\"Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5\",\"Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|\",\"Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5\",\"Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5\",\"Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326\",\"America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4\",\"America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5\",\"America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4\",\"America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|\",\"America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|\",\"America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|\",\"America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|\",\"America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|\",\"America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0|28e5\",\"America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5\",\"America/Bahia_Banderas|LMT MST CST MDT CDT|71 70 60 60 50|01213121313131313131313131313131313142424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3\",\"America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5\",\"America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4\",\"America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5\",\"America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3\",\"America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2\",\"America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5\",\"America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4\",\"America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2\",\"America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|LMT CST EST CDT EDT|5L.4 60 50 50 40|01213132431313131313131313131313131313131312|-1UQG0 2q3C0 2tx0 wgP0 1lb0 14p0 1lb0 14o0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5\",\"America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3\",\"America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\",\"America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|01213124242313131313131313131313131313131313131313131313131321313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5\",\"America/Coyhaique|LMT SMT -05 -04 -03|4M.g 4G.J 50 40 30|012131323232323232323434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvb.I MJbS.t fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0|\",\"America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5\",\"America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4\",\"America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8\",\"America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3\",\"America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2\",\"America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5\",\"America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5\",\"America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5\",\"America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3\",\"America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5\",\"America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mp0 8lz0 SN0 1cL0 pHB0 83r0 AU0 5MN0 1Rz0 38N0 Wn0 1qP0 11z0 1o10 11z0 3NA0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5\",\"America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5\",\"America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3\",\"America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3\",\"America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2\",\"America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2\",\"America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5\",\"America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5\",\"America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4\",\"America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4\",\"America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5\",\"America/Hermosillo|LMT MST CST MDT|7n.Q 70 60 60|01213121313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0|64e4\",\"America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2\",\"America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2\",\"America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4\",\"America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3\",\"America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5\",\"America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6\",\"America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6\",\"America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4\",\"America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5\",\"America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5\",\"America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4\",\"America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4\",\"America/Mazatlan|LMT MST CST MDT|75.E 70 60 60|01213121313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4\",\"America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2\",\"America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q3C0 24n0 wG10 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5\",\"America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2\",\"America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\",\"America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mxUf.k 2LHcf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2\",\"America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3\",\"America/Monterrey|LMT MST CST MDT CDT|6F.g 70 60 60 50|012131242424242424242424242424242424242424242424242424242424242|-1UQG0 dep0 8lz0 16p0 11z0 1dd0 2gmp0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5\",\"America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1qL0 11B0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5\",\"America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6\",\"America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2\",\"America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2\",\"America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3\",\"America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4\",\"America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4\",\"America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4\",\"America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|\",\"America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4\",\"America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2\",\"America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5\",\"America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4\",\"America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229\",\"America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4\",\"America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5\",\"America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5\",\"America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|012132323232323232323232323232323232323232323232323232323232323232323232323232323232323232121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 2pA0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452\",\"America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2\",\"America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4\",\"America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3\",\"America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5\",\"America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656\",\"America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642\",\"Antarctica/Casey|-00 +08 +11|0 -80 -b0|012121212121212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1 13bX|10\",\"Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70\",\"Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4\",\"Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1\",\"Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60\",\"Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\",\"Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"Antarctica/Rothera|-00 -03|0 30|01|gOo0|130\",\"Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5\",\"Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40\",\"Antarctica/Vostok|-00 +07 +05|0 -70 -50|01012|-tjA0 1rWh0 1Nj0 1aTv0|25\",\"Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5\",\"Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|0123232323232323232323212323232323232323232323232321|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 L4m0|15e5\",\"Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5\",\"Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3\",\"Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4\",\"Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4\",\"Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4\",\"Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|\",\"Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5\",\"Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4\",\"Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6\",\"Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|\",\"Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5\",\"Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4\",\"Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4\",\"Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6\",\"Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4\",\"Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6\",\"Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5\",\"Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6\",\"Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le80 1dnX0 1nfA0 Xld0|19e4\",\"Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5\",\"Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4\",\"Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|\",\"Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5\",\"Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4\",\"Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5c0 aVX0 BAM0|90e5\",\"Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5\",\"Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6\",\"Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4\",\"Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4\",\"Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5\",\"Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4\",\"Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6\",\"Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5\",\"Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5\",\"Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2\",\"Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5\",\"Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5\",\"Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4\",\"Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3\",\"Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5\",\"Asia/Manila|LMT LMT PST PDT JST|fU.8 -83.Q -80 -90 -90|012323432323232|-54m83.Q 2d8A3.Q 1urM0 un0 bW10 nb0 7qo0 1MM0 klB0 lz0 TwN0 1bb0 uNB0 rz0|24e6\",\"Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4\",\"Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4\",\"Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5\",\"Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5\",\"Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4\",\"Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4\",\"Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5\",\"Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 Mv90|\",\"Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4\",\"Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5\",\"Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4\",\"Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4\",\"Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6\",\"Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2\",\"Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5\",\"Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5\",\"Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5\",\"Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 Dc0 1iMu JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\",\"Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3\",\"Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6\",\"Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5\",\"Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2\",\"Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4\",\"Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5\",\"Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5\",\"Atlantic/Azores|LMT HMT -02 -01 +00 WET WEST|1G.E 1S.w 20 10 0 0 -10|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232323434343434343434343434356434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 CT90 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 Ap0 An0 wo0 Eo0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4\",\"Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3\",\"Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4\",\"Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4\",\"Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3\",\"Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 BJ90 1a00 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4\",\"Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30\",\"Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2\",\"Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5\",\"Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3\",\"Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4\",\"Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4\",\"Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368\",\"Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10\",\"Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5\",\"Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5\",\"Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5\",\"Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2\",\"Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5\",\"Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Etc/GMT-0|GMT|0|0||\",\"Etc/GMT-1|+01|-10|0||\",\"Etc/GMT-10|+10|-a0|0||\",\"Etc/GMT-11|+11|-b0|0||\",\"Etc/GMT-12|+12|-c0|0||\",\"Etc/GMT-13|+13|-d0|0||\",\"Etc/GMT-14|+14|-e0|0||\",\"Etc/GMT-2|+02|-20|0||\",\"Etc/GMT-3|+03|-30|0||\",\"Etc/GMT-4|+04|-40|0||\",\"Etc/GMT-5|+05|-50|0||\",\"Etc/GMT-6|+06|-60|0||\",\"Etc/GMT-7|+07|-70|0||\",\"Etc/GMT-8|+08|-80|0||\",\"Etc/GMT-9|+09|-90|0||\",\"Etc/GMT+1|-01|10|0||\",\"Etc/GMT+10|-10|a0|0||\",\"Etc/GMT+11|-11|b0|0||\",\"Etc/GMT+12|-12|c0|0||\",\"Etc/GMT+2|-02|20|0||\",\"Etc/GMT+3|-03|30|0||\",\"Etc/GMT+4|-04|40|0||\",\"Etc/GMT+5|-05|50|0||\",\"Etc/GMT+6|-06|60|0||\",\"Etc/GMT+7|-07|70|0||\",\"Etc/GMT+8|-08|80|0||\",\"Etc/GMT+9|-09|90|0||\",\"Etc/UTC|UTC|0|0||\",\"Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3\",\"Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5\",\"Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6\",\"Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5\",\"Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5\",\"Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5\",\"Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4\",\"Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4\",\"Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3\",\"Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4\",\"Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5\",\"Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4\",\"Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121212124121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 oiK0 1cM0 1cM0 1fB0 1cM0 1cM0 1cM0 1fA0 1a00 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5\",\"Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4\",\"Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5\",\"Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6\",\"Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6\",\"Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4\",\"Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5\",\"Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5\",\"Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|\",\"Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4\",\"Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4\",\"Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5\",\"Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5\",\"Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4\",\"Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5\",\"Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5\",\"Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4\",\"Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2\",\"Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4\",\"Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4\",\"Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3\",\"Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3\",\"Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4\",\"Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3\",\"Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1\",\"Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483\",\"Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4\",\"Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3\",\"Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3\",\"Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125\",\"Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4\",\"Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4\",\"Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2\",\"Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2\",\"Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2\",\"Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2\",\"Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3\",\"Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2\",\"Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3\",\"Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3\",\"Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56\",\"Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3\",\"Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4\",\"Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3\"],links:[\"Africa/Abidjan|Africa/Accra\",\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|Atlantic/Reykjavik\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Abidjan|Iceland\",\"Africa/Cairo|Egypt\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|US/Alaska\",\"America/Argentina/Buenos_Aires|America/Buenos_Aires\",\"America/Argentina/Catamarca|America/Argentina/ComodRivadavia\",\"America/Argentina/Catamarca|America/Catamarca\",\"America/Argentina/Cordoba|America/Cordoba\",\"America/Argentina/Cordoba|America/Rosario\",\"America/Argentina/Jujuy|America/Jujuy\",\"America/Argentina/Mendoza|America/Mendoza\",\"America/Chicago|CST6CDT\",\"America/Chicago|US/Central\",\"America/Denver|America/Shiprock\",\"America/Denver|MST7MDT\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Detroit|US/Michigan\",\"America/Edmonton|America/Yellowknife\",\"America/Edmonton|Canada/Mountain\",\"America/Fort_Wayne|America/Indiana/Indianapolis\",\"America/Fort_Wayne|America/Indianapolis\",\"America/Fort_Wayne|US/East-Indiana\",\"America/Godthab|America/Nuuk\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/Indiana/Knox|America/Knox_IN\",\"America/Indiana/Knox|US/Indiana-Starke\",\"America/Iqaluit|America/Pangnirtung\",\"America/Jamaica|Jamaica\",\"America/Kentucky/Louisville|America/Louisville\",\"America/Los_Angeles|PST8PDT\",\"America/Los_Angeles|US/Pacific\",\"America/Manaus|Brazil/West\",\"America/Mazatlan|Mexico/BajaSur\",\"America/Mexico_City|Mexico/General\",\"America/New_York|EST5EDT\",\"America/New_York|US/Eastern\",\"America/Noronha|Brazil/DeNoronha\",\"America/Panama|America/Atikokan\",\"America/Panama|America/Cayman\",\"America/Panama|America/Coral_Harbour\",\"America/Panama|EST\",\"America/Phoenix|America/Creston\",\"America/Phoenix|MST\",\"America/Phoenix|US/Arizona\",\"America/Puerto_Rico|America/Anguilla\",\"America/Puerto_Rico|America/Antigua\",\"America/Puerto_Rico|America/Aruba\",\"America/Puerto_Rico|America/Blanc-Sablon\",\"America/Puerto_Rico|America/Curacao\",\"America/Puerto_Rico|America/Dominica\",\"America/Puerto_Rico|America/Grenada\",\"America/Puerto_Rico|America/Guadeloupe\",\"America/Puerto_Rico|America/Kralendijk\",\"America/Puerto_Rico|America/Lower_Princes\",\"America/Puerto_Rico|America/Marigot\",\"America/Puerto_Rico|America/Montserrat\",\"America/Puerto_Rico|America/Port_of_Spain\",\"America/Puerto_Rico|America/St_Barthelemy\",\"America/Puerto_Rico|America/St_Kitts\",\"America/Puerto_Rico|America/St_Lucia\",\"America/Puerto_Rico|America/St_Thomas\",\"America/Puerto_Rico|America/St_Vincent\",\"America/Puerto_Rico|America/Tortola\",\"America/Puerto_Rico|America/Virgin\",\"America/Regina|Canada/Saskatchewan\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Tijuana|America/Ensenada\",\"America/Tijuana|America/Santa_Isabel\",\"America/Tijuana|Mexico/BajaNorte\",\"America/Toronto|America/Montreal\",\"America/Toronto|America/Nassau\",\"America/Toronto|America/Nipigon\",\"America/Toronto|America/Thunder_Bay\",\"America/Toronto|Canada/Eastern\",\"America/Vancouver|Canada/Pacific\",\"America/Whitehorse|Canada/Yukon\",\"America/Winnipeg|America/Rainy_River\",\"America/Winnipeg|Canada/Central\",\"Asia/Ashgabat|Asia/Ashkhabad\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Bangkok|Indian/Christmas\",\"Asia/Brunei|Asia/Kuching\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Dubai|Indian/Mahe\",\"Asia/Dubai|Indian/Reunion\",\"Asia/Ho_Chi_Minh|Asia/Saigon\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Macau|Asia/Macao\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Nicosia|Europe/Nicosia\",\"Asia/Qatar|Asia/Bahrain\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Rangoon|Indian/Cocos\",\"Asia/Riyadh|Antarctica/Syowa\",\"Asia/Riyadh|Asia/Aden\",\"Asia/Riyadh|Asia/Kuwait\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|PRC\",\"Asia/Taipei|ROC\",\"Asia/Tehran|Iran\",\"Asia/Thimphu|Asia/Thimbu\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Choibalsan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Urumqi|Asia/Kashgar\",\"Atlantic/Faroe|Atlantic/Faeroe\",\"Australia/Adelaide|Australia/South\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Broken_Hill|Australia/Yancowinna\",\"Australia/Darwin|Australia/North\",\"Australia/Hobart|Australia/Currie\",\"Australia/Hobart|Australia/Tasmania\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Melbourne|Australia/Victoria\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/NSW\",\"Etc/GMT-0|Etc/GMT\",\"Etc/GMT-0|Etc/GMT+0\",\"Etc/GMT-0|Etc/GMT0\",\"Etc/GMT-0|Etc/Greenwich\",\"Etc/GMT-0|GMT\",\"Etc/GMT-0|GMT+0\",\"Etc/GMT-0|GMT-0\",\"Etc/GMT-0|GMT0\",\"Etc/GMT-0|Greenwich\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Athens|EET\",\"Europe/Belgrade|Europe/Ljubljana\",\"Europe/Belgrade|Europe/Podgorica\",\"Europe/Belgrade|Europe/Sarajevo\",\"Europe/Belgrade|Europe/Skopje\",\"Europe/Belgrade|Europe/Zagreb\",\"Europe/Berlin|Arctic/Longyearbyen\",\"Europe/Berlin|Atlantic/Jan_Mayen\",\"Europe/Berlin|Europe/Copenhagen\",\"Europe/Berlin|Europe/Oslo\",\"Europe/Berlin|Europe/Stockholm\",\"Europe/Brussels|CET\",\"Europe/Brussels|Europe/Amsterdam\",\"Europe/Brussels|Europe/Luxembourg\",\"Europe/Brussels|MET\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Helsinki|Europe/Mariehamn\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Kiev|Europe/Kyiv\",\"Europe/Kiev|Europe/Uzhgorod\",\"Europe/Kiev|Europe/Zaporozhye\",\"Europe/Lisbon|Portugal\",\"Europe/Lisbon|WET\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|W-SU\",\"Europe/Paris|Europe/Monaco\",\"Europe/Prague|Europe/Bratislava\",\"Europe/Rome|Europe/San_Marino\",\"Europe/Rome|Europe/Vatican\",\"Europe/Warsaw|Poland\",\"Europe/Zurich|Europe/Busingen\",\"Europe/Zurich|Europe/Vaduz\",\"Indian/Maldives|Indian/Kerguelen\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Enderbury|Pacific/Kanton\",\"Pacific/Guadalcanal|Pacific/Pohnpei\",\"Pacific/Guadalcanal|Pacific/Ponape\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|HST\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kwajalein|Kwajalein\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Port_Moresby|Antarctica/DumontDUrville\",\"Pacific/Port_Moresby|Pacific/Chuuk\",\"Pacific/Port_Moresby|Pacific/Truk\",\"Pacific/Port_Moresby|Pacific/Yap\",\"Pacific/Tarawa|Pacific/Funafuti\",\"Pacific/Tarawa|Pacific/Majuro\",\"Pacific/Tarawa|Pacific/Wake\",\"Pacific/Tarawa|Pacific/Wallis\"],countries:[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Puerto_Rico America/Antigua\",\"AI|America/Puerto_Rico America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Asia/Singapore Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla Asia/Tokyo\",\"AW|America/Puerto_Rico America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Puerto_Rico America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Kuching Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Puerto_Rico America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Toronto America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston\",\"CC|Asia/Yangon Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Coyhaique America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Puerto_Rico America/Curacao\",\"CX|Asia/Bangkok Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Berlin Europe/Copenhagen\",\"DM|America/Puerto_Rico America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Puerto_Rico America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Abidjan Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Puerto_Rico America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Africa/Abidjan Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Puerto_Rico America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Puerto_Rico America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Brussels Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Paris Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Puerto_Rico America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Puerto_Rico America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana\",\"MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Brussels Europe/Amsterdam\",\"NO|Europe/Berlin Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Asia/Dubai Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Asia/Dubai Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Berlin Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Berlin Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Puerto_Rico America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Asia/Dubai Indian/Maldives Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Puerto_Rico America/Port_of_Spain\",\"TV|Pacific/Tarawa Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kyiv\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Puerto_Rico America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Puerto_Rico America/Tortola\",\"VI|America/Puerto_Rico America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Tarawa Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}),M}),function(M,b){\"use strict\";var p;if(\"object\"==typeof exports){try{p=require(\"moment\")}catch(M){}module.exports=b(p)}else\"function\"==typeof define&&define.amd?define(function(M){try{p=M(\"moment\")}catch(M){}return b(p)}):M.Pikaday=b(M.moment)}(this,function(M){\"use strict\";var b=\"function\"==typeof M,p=!!window.addEventListener,e=window.document,o=window.setTimeout,z=function(M,b,e,o){p?M.addEventListener(b,e,!!o):M.attachEvent(\"on\"+b,e)},t=function(M,b,e,o){p?M.removeEventListener(b,e,!!o):M.detachEvent(\"on\"+b,e)},c=function(M,b){return-1!==(\" \"+M.className+\" \").indexOf(\" \"+b+\" \")},n=function(M,b){c(M,b)||(M.className=\"\"===M.className?b:M.className+\" \"+b)},O=function(M,b){var p;M.className=(p=(\" \"+M.className+\" \").replace(\" \"+b+\" \",\" \")).trim?p.trim():p.replace(/^\\s+|\\s+$/g,\"\")},i=function(M){return/Array/.test(Object.prototype.toString.call(M))},r=function(M){return/Date/.test(Object.prototype.toString.call(M))&&!isNaN(M.getTime())},a=function(M){var b=M.getDay();return 0===b||6===b},s=function(M){return M%4==0&&M%100!=0||M%400==0},A=function(M,b){return[31,s(M)?29:28,31,30,31,30,31,31,30,31,30,31][b]},d=function(M){r(M)&&M.setHours(0,0,0,0)},l=function(M,b){return M.getTime()===b.getTime()},q=function(M,b,p){var e,o;for(e in b)(o=void 0!==M[e])&&\"object\"==typeof b[e]&&null!==b[e]&&void 0===b[e].nodeName?r(b[e])?p&&(M[e]=new Date(b[e].getTime())):i(b[e])?p&&(M[e]=b[e].slice(0)):M[e]=q({},b[e],p):!p&&o||(M[e]=b[e]);return M},u=function(M,b,p){var o;e.createEvent?((o=e.createEvent(\"HTMLEvents\")).initEvent(b,!0,!1),o=q(o,p),M.dispatchEvent(o)):e.createEventObject&&(o=e.createEventObject(),o=q(o,p),M.fireEvent(\"on\"+b,o))},f=function(M){return M.month<0&&(M.year-=Math.ceil(Math.abs(M.month)/12),M.month+=12),M.month>11&&(M.year+=Math.floor(Math.abs(M.month)/12),M.month-=12),M},W={field:null,bound:void 0,ariaLabel:\"Use the arrow keys to pick a date\",position:\"bottom left\",reposition:!0,format:\"YYYY-MM-DD\",toString:null,parse:null,defaultDate:null,setDefaultDate:!1,firstDay:0,firstWeekOfYearMinDays:4,formatStrict:!1,minDate:null,maxDate:null,yearRange:10,showWeekNumber:!1,pickWholeWeek:!1,minYear:0,maxYear:9999,minMonth:void 0,maxMonth:void 0,startRange:null,endRange:null,isRTL:!1,yearSuffix:\"\",showMonthAfterYear:!1,showDaysInNextAndPreviousMonths:!1,enableSelectionDaysInNextAndPreviousMonths:!1,numberOfMonths:1,mainCalendar:\"left\",container:void 0,blurFieldOnSelect:!0,i18n:{previousMonth:\"Previous Month\",nextMonth:\"Next Month\",months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],weekdays:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],weekdaysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"]},theme:null,events:[],onSelect:null,onOpen:null,onClose:null,onDraw:null,keyboardInput:!0},h=function(M,b,p){for(b+=M.firstDay;b>=7;)b-=7;return p?M.i18n.weekdaysShort[b]:M.i18n.weekdays[b]},R=function(M){var b=[],p=\"false\";if(M.isEmpty){if(!M.showDaysInNextAndPreviousMonths)return'<td class=\"is-empty\"></td>';b.push(\"is-outside-current-month\"),M.enableSelectionDaysInNextAndPreviousMonths||b.push(\"is-selection-disabled\")}return M.isDisabled&&b.push(\"is-disabled\"),M.isToday&&b.push(\"is-today\"),M.isSelected&&(b.push(\"is-selected\"),p=\"true\"),M.hasEvent&&b.push(\"has-event\"),M.isInRange&&b.push(\"is-inrange\"),M.isStartRange&&b.push(\"is-startrange\"),M.isEndRange&&b.push(\"is-endrange\"),'<td data-day=\"'+M.day+'\" class=\"'+b.join(\" \")+'\" aria-selected=\"'+p+'\"><button class=\"pika-button pika-day\" type=\"button\" data-pika-year=\"'+M.year+'\" data-pika-month=\"'+M.month+'\" data-pika-day=\"'+M.day+'\">'+M.day+\"</button></td>\"},m=function(p,e,o,z){var t=new Date(o,e,p),c=b?M(t).isoWeek():function(M,b){M.setHours(0,0,0,0);var p=M.getDate(),e=M.getDay(),o=b,z=o-1,t=function(M){return(M+7-1)%7};M.setDate(p+z-t(e));var c=new Date(M.getFullYear(),0,o),n=(M.getTime()-c.getTime())/864e5;return 1+Math.round((n-z+t(c.getDay()))/7)}(t,z);return'<td class=\"pika-week\">'+c+\"</td>\"},g=function(M,b,p,e){return'<tr class=\"pika-row'+(p?\" pick-whole-week\":\"\")+(e?\" is-selected\":\"\")+'\">'+(b?M.reverse():M).join(\"\")+\"</tr>\"},L=function(M,b,p,e,o,z){var t,c,n,O,r,a=M._o,s=p===a.minYear,A=p===a.maxYear,d='<div id=\"'+z+'\" class=\"pika-title\" role=\"heading\" aria-live=\"assertive\">',l=!0,q=!0;for(n=[],t=0;t<12;t++)n.push('<option value=\"'+(p===o?t-b:12+t-b)+'\"'+(t===e?' selected=\"selected\"':\"\")+(s&&t<a.minMonth||A&&t>a.maxMonth?' disabled=\"disabled\"':\"\")+\">\"+a.i18n.months[t]+\"</option>\");for(O='<div class=\"pika-label\">'+a.i18n.months[e]+'<select class=\"pika-select pika-select-month\" tabindex=\"-1\">'+n.join(\"\")+\"</select></div>\",i(a.yearRange)?(t=a.yearRange[0],c=a.yearRange[1]+1):(t=p-a.yearRange,c=1+p+a.yearRange),n=[];t<c&&t<=a.maxYear;t++)t>=a.minYear&&n.push('<option value=\"'+t+'\"'+(t===p?' selected=\"selected\"':\"\")+\">\"+t+\"</option>\");return r='<div class=\"pika-label\">'+p+a.yearSuffix+'<select class=\"pika-select pika-select-year\" tabindex=\"-1\">'+n.join(\"\")+\"</select></div>\",a.showMonthAfterYear?d+=r+O:d+=O+r,s&&(0===e||a.minMonth>=e)&&(l=!1),A&&(11===e||a.maxMonth<=e)&&(q=!1),0===b&&(d+='<button class=\"pika-prev'+(l?\"\":\" is-disabled\")+'\" type=\"button\">'+a.i18n.previousMonth+\"</button>\"),b===M._o.numberOfMonths-1&&(d+='<button class=\"pika-next'+(q?\"\":\" is-disabled\")+'\" type=\"button\">'+a.i18n.nextMonth+\"</button>\"),d+\"</div>\"},v=function(M,b,p){return'<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"'+p+'\">'+function(M){var b,p=[];for(M.showWeekNumber&&p.push(\"<th></th>\"),b=0;b<7;b++)p.push('<th scope=\"col\"><abbr title=\"'+h(M,b)+'\">'+h(M,b,!0)+\"</abbr></th>\");return\"<thead><tr>\"+(M.isRTL?p.reverse():p).join(\"\")+\"</tr></thead>\"}(M)+(\"<tbody>\"+b.join(\"\")+\"</tbody></table>\")},N=function(t){var n=this,O=n.config(t);n._onMouseDown=function(M){if(n._v){var b=(M=M||window.event).target||M.srcElement;if(b)if(c(b,\"is-disabled\")||(!c(b,\"pika-button\")||c(b,\"is-empty\")||c(b.parentNode,\"is-disabled\")?c(b,\"pika-prev\")?n.prevMonth():c(b,\"pika-next\")&&n.nextMonth():(n.setDate(new Date(b.getAttribute(\"data-pika-year\"),b.getAttribute(\"data-pika-month\"),b.getAttribute(\"data-pika-day\"))),O.bound&&o(function(){n.hide(),O.blurFieldOnSelect&&O.field&&O.field.blur()},100))),c(b,\"pika-select\"))n._c=!0;else{if(!M.preventDefault)return M.returnValue=!1,!1;M.preventDefault()}}},n._onChange=function(M){var b=(M=M||window.event).target||M.srcElement;b&&(c(b,\"pika-select-month\")?n.gotoMonth(b.value):c(b,\"pika-select-year\")&&n.gotoYear(b.value))},n._onKeyChange=function(M){if(M=M||window.event,n.isVisible())switch(M.keyCode){case 13:case 27:O.field&&O.field.blur();break;case 37:n.adjustDate(\"subtract\",1);break;case 38:n.adjustDate(\"subtract\",7);break;case 39:n.adjustDate(\"add\",1);break;case 40:n.adjustDate(\"add\",7);break;case 8:case 46:n.setDate(null)}},n._parseFieldValue=function(){if(O.parse)return O.parse(O.field.value,O.format);if(b){var p=M(O.field.value,O.format,O.formatStrict);return p&&p.isValid()?p.toDate():null}return new Date(Date.parse(O.field.value))},n._onInputChange=function(M){var b;M.firedBy!==n&&(b=n._parseFieldValue(),r(b)&&n.setDate(b),n._v||n.show())},n._onInputFocus=function(){n.show()},n._onInputClick=function(){n.show()},n._onInputBlur=function(){var M=e.activeElement;do{if(c(M,\"pika-single\"))return}while(M=M.parentNode);n._c||(n._b=o(function(){n.hide()},50)),n._c=!1},n._onClick=function(M){var b=(M=M||window.event).target||M.srcElement,e=b;if(b){!p&&c(b,\"pika-select\")&&(b.onchange||(b.setAttribute(\"onchange\",\"return;\"),z(b,\"change\",n._onChange)));do{if(c(e,\"pika-single\")||e===O.trigger)return}while(e=e.parentNode);n._v&&b!==O.trigger&&e!==O.trigger&&n.hide()}},n.el=e.createElement(\"div\"),n.el.className=\"pika-single\"+(O.isRTL?\" is-rtl\":\"\")+(O.theme?\" \"+O.theme:\"\"),z(n.el,\"mousedown\",n._onMouseDown,!0),z(n.el,\"touchend\",n._onMouseDown,!0),z(n.el,\"change\",n._onChange),O.keyboardInput&&z(e,\"keydown\",n._onKeyChange),O.field&&(O.container?O.container.appendChild(n.el):O.bound?e.body.appendChild(n.el):O.field.parentNode.insertBefore(n.el,O.field.nextSibling),z(O.field,\"change\",n._onInputChange),O.defaultDate||(O.defaultDate=n._parseFieldValue(),O.setDefaultDate=!0));var i=O.defaultDate;r(i)?O.setDefaultDate?n.setDate(i,!0):n.gotoDate(i):n.gotoDate(new Date),O.bound?(this.hide(),n.el.className+=\" is-bound\",z(O.trigger,\"click\",n._onInputClick),z(O.trigger,\"focus\",n._onInputFocus),z(O.trigger,\"blur\",n._onInputBlur)):this.show()};return N.prototype={config:function(M){this._o||(this._o=q({},W,!0));var b=q(this._o,M,!0);b.isRTL=!!b.isRTL,b.field=b.field&&b.field.nodeName?b.field:null,b.theme=\"string\"==typeof b.theme&&b.theme?b.theme:null,b.bound=!!(void 0!==b.bound?b.field&&b.bound:b.field),b.trigger=b.trigger&&b.trigger.nodeName?b.trigger:b.field,b.disableWeekends=!!b.disableWeekends,b.disableDayFn=\"function\"==typeof b.disableDayFn?b.disableDayFn:null;var p=parseInt(b.numberOfMonths,10)||1;if(b.numberOfMonths=p>4?4:p,r(b.minDate)||(b.minDate=!1),r(b.maxDate)||(b.maxDate=!1),b.minDate&&b.maxDate&&b.maxDate<b.minDate&&(b.maxDate=b.minDate=!1),b.minDate&&this.setMinDate(b.minDate),b.maxDate&&this.setMaxDate(b.maxDate),i(b.yearRange)){var e=(new Date).getFullYear()-10;b.yearRange[0]=parseInt(b.yearRange[0],10)||e,b.yearRange[1]=parseInt(b.yearRange[1],10)||e}else b.yearRange=Math.abs(parseInt(b.yearRange,10))||W.yearRange,b.yearRange>100&&(b.yearRange=100);return b},toString:function(p){return p=p||this._o.format,r(this._d)?this._o.toString?this._o.toString(this._d,p):b?M(this._d).format(p):this._d.toDateString():\"\"},getMoment:function(){return b?M(this._d):null},setMoment:function(p,e){b&&M.isMoment(p)&&this.setDate(p.toDate(),e)},getDate:function(){return r(this._d)?new Date(this._d.getTime()):null},setDate:function(M,b){if(!M)return this._d=null,this._o.field&&(this._o.field.value=\"\",u(this._o.field,\"change\",{firedBy:this})),this.draw();if(\"string\"==typeof M&&(M=new Date(Date.parse(M))),r(M)){var p=this._o.minDate,e=this._o.maxDate;r(p)&&M<p?M=p:r(e)&&M>e&&(M=e),this._d=new Date(M.getTime()),d(this._d),this.gotoDate(this._d),this._o.field&&(this._o.field.value=this.toString(),u(this._o.field,\"change\",{firedBy:this})),b||\"function\"!=typeof this._o.onSelect||this._o.onSelect.call(this,this.getDate())}},clear:function(){this.setDate(null)},gotoDate:function(M){var b=!0;if(r(M)){if(this.calendars){var p=new Date(this.calendars[0].year,this.calendars[0].month,1),e=new Date(this.calendars[this.calendars.length-1].year,this.calendars[this.calendars.length-1].month,1),o=M.getTime();e.setMonth(e.getMonth()+1),e.setDate(e.getDate()-1),b=o<p.getTime()||e.getTime()<o}b&&(this.calendars=[{month:M.getMonth(),year:M.getFullYear()}],\"right\"===this._o.mainCalendar&&(this.calendars[0].month+=1-this._o.numberOfMonths)),this.adjustCalendars()}},adjustDate:function(M,b){var p,e=this.getDate()||new Date,o=24*parseInt(b)*60*60*1e3;\"add\"===M?p=new Date(e.valueOf()+o):\"subtract\"===M&&(p=new Date(e.valueOf()-o)),this.setDate(p)},adjustCalendars:function(){this.calendars[0]=f(this.calendars[0]);for(var M=1;M<this._o.numberOfMonths;M++)this.calendars[M]=f({month:this.calendars[0].month+M,year:this.calendars[0].year});this.draw()},gotoToday:function(){this.gotoDate(new Date)},gotoMonth:function(M){isNaN(M)||(this.calendars[0].month=parseInt(M,10),this.adjustCalendars())},nextMonth:function(){this.calendars[0].month++,this.adjustCalendars()},prevMonth:function(){this.calendars[0].month--,this.adjustCalendars()},gotoYear:function(M){isNaN(M)||(this.calendars[0].year=parseInt(M,10),this.adjustCalendars())},setMinDate:function(M){M instanceof Date?(d(M),this._o.minDate=M,this._o.minYear=M.getFullYear(),this._o.minMonth=M.getMonth()):(this._o.minDate=W.minDate,this._o.minYear=W.minYear,this._o.minMonth=W.minMonth,this._o.startRange=W.startRange),this.draw()},setMaxDate:function(M){M instanceof Date?(d(M),this._o.maxDate=M,this._o.maxYear=M.getFullYear(),this._o.maxMonth=M.getMonth()):(this._o.maxDate=W.maxDate,this._o.maxYear=W.maxYear,this._o.maxMonth=W.maxMonth,this._o.endRange=W.endRange),this.draw()},setStartRange:function(M){this._o.startRange=M},setEndRange:function(M){this._o.endRange=M},draw:function(M){if(this._v||M){var b,p=this._o,e=p.minYear,z=p.maxYear,t=p.minMonth,c=p.maxMonth,n=\"\";this._y<=e&&(this._y=e,!isNaN(t)&&this._m<t&&(this._m=t)),this._y>=z&&(this._y=z,!isNaN(c)&&this._m>c&&(this._m=c));for(var O=0;O<p.numberOfMonths;O++)b=\"pika-title-\"+Math.random().toString(36).replace(/[^a-z]+/g,\"\").substr(0,2),n+='<div class=\"pika-lendar\">'+L(this,O,this.calendars[O].year,this.calendars[O].month,this.calendars[0].year,b)+this.render(this.calendars[O].year,this.calendars[O].month,b)+\"</div>\";this.el.innerHTML=n,p.bound&&\"hidden\"!==p.field.type&&o(function(){p.trigger.focus()},1),\"function\"==typeof this._o.onDraw&&this._o.onDraw(this),p.bound&&p.field.setAttribute(\"aria-label\",p.ariaLabel)}},adjustPosition:function(){var M,b,p,o,z,t,c,i,r,a,s,A;if(!this._o.container){if(this.el.style.position=\"absolute\",b=M=this._o.trigger,p=this.el.offsetWidth,o=this.el.offsetHeight,z=window.innerWidth||e.documentElement.clientWidth,t=window.innerHeight||e.documentElement.clientHeight,c=window.pageYOffset||e.body.scrollTop||e.documentElement.scrollTop,s=!0,A=!0,\"function\"==typeof M.getBoundingClientRect)i=(a=M.getBoundingClientRect()).left+window.pageXOffset,r=a.bottom+window.pageYOffset;else for(i=b.offsetLeft,r=b.offsetTop+b.offsetHeight;b=b.offsetParent;)i+=b.offsetLeft,r+=b.offsetTop;(this._o.reposition&&i+p>z||this._o.position.indexOf(\"right\")>-1&&i-p+M.offsetWidth>0)&&(i=i-p+M.offsetWidth,s=!1),(this._o.reposition&&r+o>t+c||this._o.position.indexOf(\"top\")>-1&&r-o-M.offsetHeight>0)&&(r=r-o-M.offsetHeight,A=!1),this.el.style.left=i+\"px\",this.el.style.top=r+\"px\",n(this.el,s?\"left-aligned\":\"right-aligned\"),n(this.el,A?\"bottom-aligned\":\"top-aligned\"),O(this.el,s?\"right-aligned\":\"left-aligned\"),O(this.el,A?\"top-aligned\":\"bottom-aligned\")}},render:function(M,b,p){var e=this._o,o=new Date,z=A(M,b),t=new Date(M,b,1).getDay(),c=[],n=[];d(o),e.firstDay>0&&(t-=e.firstDay)<0&&(t+=7);for(var O=0===b?11:b-1,i=11===b?0:b+1,s=0===b?M-1:M,q=11===b?M+1:M,u=A(s,O),f=z+t,W=f;W>7;)W-=7;f+=7-W;for(var h=!1,L=0,N=0;L<f;L++){var y=new Date(M,b,L-t+1),B=!!r(this._d)&&l(y,this._d),X=l(y,o),w=-1!==e.events.indexOf(y.toDateString()),x=L<t||L>=z+t,T=L-t+1,_=b,k=M,S=e.startRange&&l(e.startRange,y),C=e.endRange&&l(e.endRange,y),E=e.startRange&&e.endRange&&e.startRange<y&&y<e.endRange;x&&(L<t?(T=u+T,_=O,k=s):(T-=z,_=i,k=q));var D={day:T,month:_,year:k,hasEvent:w,isSelected:B,isToday:X,isDisabled:e.minDate&&y<e.minDate||e.maxDate&&y>e.maxDate||e.disableWeekends&&a(y)||e.disableDayFn&&e.disableDayFn(y),isEmpty:x,isStartRange:S,isEndRange:C,isInRange:E,showDaysInNextAndPreviousMonths:e.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:e.enableSelectionDaysInNextAndPreviousMonths};e.pickWholeWeek&&B&&(h=!0),n.push(R(D)),7===++N&&(e.showWeekNumber&&n.unshift(m(L-t,b,M,e.firstWeekOfYearMinDays)),c.push(g(n,e.isRTL,e.pickWholeWeek,h)),n=[],N=0,h=!1)}return v(e,c,p)},isVisible:function(){return this._v},show:function(){this.isVisible()||(this._v=!0,this.draw(),O(this.el,\"is-hidden\"),this._o.bound&&(z(e,\"click\",this._onClick),this.adjustPosition()),\"function\"==typeof this._o.onOpen&&this._o.onOpen.call(this))},hide:function(){var M=this._v;!1!==M&&(this._o.bound&&t(e,\"click\",this._onClick),this._o.container||(this.el.style.position=\"static\",this.el.style.left=\"auto\",this.el.style.top=\"auto\"),n(this.el,\"is-hidden\"),this._v=!1,void 0!==M&&\"function\"==typeof this._o.onClose&&this._o.onClose.call(this))},destroy:function(){var M=this._o;this.hide(),t(this.el,\"mousedown\",this._onMouseDown,!0),t(this.el,\"touchend\",this._onMouseDown,!0),t(this.el,\"change\",this._onChange),M.keyboardInput&&t(e,\"keydown\",this._onKeyChange),M.field&&(t(M.field,\"change\",this._onInputChange),M.bound&&(t(M.trigger,\"click\",this._onInputClick),t(M.trigger,\"focus\",this._onInputFocus),t(M.trigger,\"blur\",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}},N}),function(M,b){\"use strict\";\"object\"==typeof exports?b(require(\"jquery\"),require(\"pikaday\")):\"function\"==typeof define&&define.amd?define([\"jquery\",\"pikaday\"],b):b(M.jQuery,M.Pikaday)}(this,function(M,b){\"use strict\";M.fn.pikaday=function(){var p=arguments;return p&&p.length||(p=[{}]),this.each(function(){var e=M(this),o=e.data(\"pikaday\");if(o instanceof b)\"string\"==typeof p[0]&&\"function\"==typeof o[p[0]]&&(o[p[0]].apply(o,Array.prototype.slice.call(p,1)),\"destroy\"===p[0]&&e.removeData(\"pikaday\"));else if(\"object\"==typeof p[0]){var z=M.extend({},p[0]);z.field=e[0],e.data(\"pikaday\",new b(z))}})}}),function(){var M,b,p,e,o=window.jQuery,z=o(window),t=o(document),c=\"http://www.w3.org/2000/svg\",n=\"SVGAngle\"in window&&((p=document.createElement(\"div\")).innerHTML=\"<svg/>\",b=(p.firstChild&&p.firstChild.namespaceURI)==c,p.innerHTML=\"\",b),O=\"transition\"in(e=document.createElement(\"div\").style)||\"WebkitTransition\"in e||\"MozTransition\"in e||\"msTransition\"in e||\"OTransition\"in e,i=\"ontouchstart\"in window,r=\"mousedown\"+(i?\" touchstart\":\"\"),a=\"mousemove.clockpicker\"+(i?\" touchmove.clockpicker\":\"\"),s=\"mouseup.clockpicker\"+(i?\" touchend.clockpicker\":\"\"),A=navigator.vibrate?\"vibrate\":navigator.webkitVibrate?\"webkitVibrate\":null;function d(M){return document.createElementNS(c,M)}function l(M){return(M<10?\"0\":\"\")+M}var q=0;var u=100,f=80,W=13,h=O?350:1,R=['<div class=\"popover clockpicker-popover\">','<div class=\"arrow\"></div>','<div class=\"popover-title\">','<span class=\"clockpicker-span-hours text-primary\"></span>',\":\",'<span class=\"clockpicker-span-minutes\"></span> ','<span class=\"clockpicker-span-am-pm\"></span>',\"</div>\",'<div class=\"popover-content\">','<div class=\"clockpicker-plate\">','<div class=\"clockpicker-canvas\"></div>','<div class=\"clockpicker-dial clockpicker-hours\"></div>','<div class=\"clockpicker-dial clockpicker-minutes clockpicker-dial-out\"></div>',\"</div>\",'<span class=\"clockpicker-am-pm-block\">',\"</span>\",\"</div>\",\"</div>\"].join(\"\");function m(b,p){var e,z,c=o(R),O=c.find(\".clockpicker-plate\"),i=c.find(\".clockpicker-hours\"),A=c.find(\".clockpicker-minutes\"),m=c.find(\".clockpicker-am-pm-block\"),L=\"INPUT\"===b.prop(\"tagName\"),v=L?b:b.find(\"input\"),N=b.find(\".input-group-addon\"),y=this;if(this.id=(z=++q+\"\",(e=\"cp\")?e+z:z),this.element=b,this.options=p,this.isAppended=!1,this.isShown=!1,this.currentView=\"hours\",this.isInput=L,this.input=v,this.addon=N,this.popover=c,this.plate=O,this.hoursView=i,this.minutesView=A,this.amPmBlock=m,this.spanHours=c.find(\".clockpicker-span-hours\"),this.spanMinutes=c.find(\".clockpicker-span-minutes\"),this.spanAmPm=c.find(\".clockpicker-span-am-pm\"),this.amOrPm=\"PM\",p.twelvehour){var B=['<div class=\"clockpicker-am-pm-block\">','<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button clockpicker-am-button\">',\"AM</button>\",'<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button clockpicker-pm-button\">',\"PM</button>\",\"</div>\"].join(\"\");o(B);o('<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button am-button\">AM</button>').on(\"click\",function(){y.amOrPm=\"AM\",o(\".clockpicker-span-am-pm\").empty().append(\"AM\")}).appendTo(this.amPmBlock),o('<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button pm-button\">PM</button>').on(\"click\",function(){y.amOrPm=\"PM\",o(\".clockpicker-span-am-pm\").empty().append(\"PM\")}).appendTo(this.amPmBlock)}p.autoclose||o('<button type=\"button\" class=\"btn btn-sm btn-secondary btn-block clockpicker-button\">'+p.donetext+\"</button>\").click(o.proxy(this.done,this)).appendTo(c),\"top\"!==p.placement&&\"bottom\"!==p.placement&&\"auto\"!==p.placement||\"top\"!==p.align&&\"bottom\"!==p.align||(p.align=\"left\"),\"left\"!==p.placement&&\"right\"!==p.placement||\"left\"!==p.align&&\"right\"!==p.align||(p.align=\"top\"),c.addClass(p.placement),c.addClass(\"clockpicker-align-\"+p.align),this.spanHours.click(o.proxy(this.toggleView,this,\"hours\")),this.spanMinutes.click(o.proxy(this.toggleView,this,\"minutes\")),v.on(\"focus.clockpicker click.clockpicker\",o.proxy(this.show,this)),N.on(\"click.clockpicker\",o.proxy(this.toggle,this));var X,w,x,T,_=o('<div class=\"clockpicker-tick\"></div>');if(p.twelvehour)for(X=1;X<13;X+=1)w=_.clone(),x=X/6*Math.PI,T=f,w.css(\"font-size\",\"120%\"),w.css({left:u+Math.sin(x)*T-W,top:u-Math.cos(x)*T-W}),w.html(0===X?\"00\":X),i.append(w),w.on(r,S);else for(X=0;X<24;X+=1){w=_.clone(),x=X/6*Math.PI;var k=X>0&&X<13;T=k?54:f,w.css({left:u+Math.sin(x)*T-W,top:u-Math.cos(x)*T-W}),k&&w.addClass(\"tick-inner\"),w.html(0===X?\"00\":X),i.append(w),w.on(r,S)}for(X=0;X<60;X+=5)w=_.clone(),x=X/30*Math.PI,w.css({left:u+Math.sin(x)*f-W,top:u-Math.cos(x)*f-W}),w.html(l(X)),A.append(w),w.on(r,S);function S(b,e){var o=O.offset(),z=/^touch/.test(b.type),c=o.left+u,i=o.top+u,r=(z?b.originalEvent.touches[0]:b).pageX-c,A=(z?b.originalEvent.touches[0]:b).pageY-i,d=Math.sqrt(r*r+A*A),l=!1;if(!e||!(d<67||d>93)){b.preventDefault();var q=setTimeout(function(){M.addClass(\"clockpicker-moving\")},200);n&&O.append(y.canvas),y.setHand(r,A,!e,!0),t.off(a).on(a,function(M){M.preventDefault();var b=/^touch/.test(M.type),p=(b?M.originalEvent.touches[0]:M).pageX-c,e=(b?M.originalEvent.touches[0]:M).pageY-i;(l||p!==r||e!==A)&&(l=!0,y.setHand(p,e,!1,!0))}),t.off(s).on(s,function(b){t.off(s),b.preventDefault();var o=/^touch/.test(b.type),z=(o?b.originalEvent.changedTouches[0]:b).pageX-c,n=(o?b.originalEvent.changedTouches[0]:b).pageY-i;(e||l)&&z===r&&n===A&&y.setHand(z,n),\"hours\"===y.currentView?y.toggleView(\"minutes\",h/2):p.autoclose&&(y.minutesView.addClass(\"clockpicker-dial-out\"),setTimeout(function(){y.done()},h/2)),O.prepend(C),clearTimeout(q),M.removeClass(\"clockpicker-moving\"),t.off(a)})}}if(O.on(r,function(M){0===o(M.target).closest(\".clockpicker-tick\").length&&S(M,!0)}),n){var C=c.find(\".clockpicker-canvas\"),E=d(\"svg\");E.setAttribute(\"class\",\"clockpicker-svg\"),E.setAttribute(\"width\",200),E.setAttribute(\"height\",200);var D=d(\"g\");D.setAttribute(\"transform\",\"translate(100,100)\");var P=d(\"circle\");P.setAttribute(\"class\",\"clockpicker-canvas-bearing\"),P.setAttribute(\"cx\",0),P.setAttribute(\"cy\",0),P.setAttribute(\"r\",2);var I=d(\"line\");I.setAttribute(\"x1\",0),I.setAttribute(\"y1\",0);var F=d(\"circle\");F.setAttribute(\"class\",\"clockpicker-canvas-bg\"),F.setAttribute(\"r\",W);var j=d(\"circle\");j.setAttribute(\"class\",\"clockpicker-canvas-fg\"),j.setAttribute(\"r\",3.5),D.appendChild(I),D.appendChild(F),D.appendChild(j),D.appendChild(P),E.appendChild(D),C.append(E),this.hand=I,this.bg=F,this.fg=j,this.bearing=P,this.g=D,this.canvas=C}g(this.options.init)}function g(M){M&&\"function\"==typeof M&&M()}m.DEFAULTS={default:\"\",fromnow:0,placement:\"bottom\",align:\"left\",donetext:\"Done\",autoclose:!1,twelvehour:!1,vibrate:!0},m.prototype.toggle=function(){this[this.isShown?\"hide\":\"show\"]()},m.prototype.locate=function(){var M=this.element,b=this.popover,p=M.offset(),e=M.outerWidth(),o=M.outerHeight(),z=this.options.placement,t=this.options.align,c={},n=window.innerHeight||document.documentElement.clientHeight,O=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop;switch(b.show(),\"auto\"===z&&(z=p.top+b.outerHeight()>n+O?\"top\":\"bottom\"),z){case\"bottom\":c.top=p.top+o;break;case\"right\":c.left=p.left+e;break;case\"top\":c.top=p.top-b.outerHeight();break;case\"left\":c.left=p.left-b.outerWidth()}switch(t){case\"left\":c.left=p.left;break;case\"right\":c.left=p.left+e-b.outerWidth();break;case\"top\":c.top=p.top;break;case\"bottom\":c.top=p.top+o-b.outerHeight()}b.css(c)},m.prototype.show=function(b){if(!this.isShown){g(this.options.beforeShow);var p=this;this.isAppended||(M=o(document.body).append(this.popover),z.on(\"resize.clockpicker\"+this.id,function(){p.isShown&&p.locate()}),this.isAppended=!0);var e=(this.input.prop(\"value\")||this.options.default||\"\")+\"\";if(this.options.twelvehour){var c=e.split(\" \");c[1]&&(e=c[0],this.amOrPm=c[1])}if(\"now\"===(e=e.split(\":\"))[0]){var n=new Date(+new Date+this.options.fromnow);e=[n.getHours(),n.getMinutes()]}this.hours=+e[0]||0,this.minutes=+e[1]||0,this.spanHours.html(l(this.hours)),this.spanMinutes.html(l(this.minutes)),this.options.twelvehour&&this.spanAmPm.html(this.amOrPm),this.toggleView(\"hours\"),this.locate(),this.isShown=!0,t.on(\"click.clockpicker.\"+this.id+\" focusin.clockpicker.\"+this.id,function(M){var b=o(M.target);0===b.closest(p.popover).length&&0===b.closest(p.addon).length&&0===b.closest(p.input).length&&p.hide()}),t.on(\"keyup.clockpicker.\"+this.id,function(M){27===M.keyCode&&p.hide()}),g(this.options.afterShow)}},m.prototype.hide=function(){g(this.options.beforeHide),this.isShown=!1,t.off(\"click.clockpicker.\"+this.id+\" focusin.clockpicker.\"+this.id),t.off(\"keyup.clockpicker.\"+this.id),this.popover.hide(),g(this.options.afterHide)},m.prototype.toggleView=function(M,b){var p=!1;\"minutes\"===M&&\"visible\"===o(this.hoursView).css(\"visibility\")&&(g(this.options.beforeHourSelect),p=!0);var e=\"hours\"===M,z=e?this.hoursView:this.minutesView,t=e?this.minutesView:this.hoursView;this.currentView=M,this.spanHours.toggleClass(\"text-primary\",e),this.spanMinutes.toggleClass(\"text-primary\",!e),t.addClass(\"clockpicker-dial-out\"),z.css(\"visibility\",\"visible\").removeClass(\"clockpicker-dial-out\"),this.resetClock(b),clearTimeout(this.toggleViewTimer),this.toggleViewTimer=setTimeout(function(){t.css(\"visibility\",\"hidden\")},h),p&&g(this.options.afterHourSelect)},m.prototype.resetClock=function(M){var b=this.currentView,p=this[b],e=\"hours\"===b,o=p*(Math.PI/(e?6:30)),z=e&&p>0&&p<13?54:f,t=Math.sin(o)*z,c=-Math.cos(o)*z,O=this;n&&M?(O.canvas.addClass(\"clockpicker-canvas-out\"),setTimeout(function(){O.canvas.removeClass(\"clockpicker-canvas-out\"),O.setHand(t,c)},M)):this.setHand(t,c)},m.prototype.setHand=function(M,b,p,e){var z,t=Math.atan2(M,-b),c=\"hours\"===this.currentView,O=Math.PI/(c||p?6:30),i=Math.sqrt(M*M+b*b),r=this.options,a=c&&i<67,s=a?54:f;if(r.twelvehour&&(s=f),t<0&&(t=2*Math.PI+t),t=(z=Math.round(t/O))*O,r.twelvehour?c?0===z&&(z=12):(p&&(z*=5),60===z&&(z=0)):c?(12===z&&(z=0),z=a?0===z?12:z:0===z?0:z+12):(p&&(z*=5),60===z&&(z=0)),this[this.currentView]!==z&&A&&this.options.vibrate&&(this.vibrateTimer||(navigator[A](10),this.vibrateTimer=setTimeout(o.proxy(function(){this.vibrateTimer=null},this),100))),this[this.currentView]=z,this[c?\"spanHours\":\"spanMinutes\"].html(l(z)),n){e||!c&&z%5?(this.g.insertBefore(this.hand,this.bearing),this.g.insertBefore(this.bg,this.fg),this.bg.setAttribute(\"class\",\"clockpicker-canvas-bg clockpicker-canvas-bg-trans\")):(this.g.insertBefore(this.hand,this.bg),this.g.insertBefore(this.fg,this.bg),this.bg.setAttribute(\"class\",\"clockpicker-canvas-bg\"));var d=Math.sin(t)*s,q=-Math.cos(t)*s;this.hand.setAttribute(\"x2\",d),this.hand.setAttribute(\"y2\",q),this.bg.setAttribute(\"cx\",d),this.bg.setAttribute(\"cy\",q),this.fg.setAttribute(\"cx\",d),this.fg.setAttribute(\"cy\",q)}else this[c?\"hoursView\":\"minutesView\"].find(\".clockpicker-tick\").each(function(){var M=o(this);M.toggleClass(\"active\",z===+M.html())})},m.prototype.done=function(){g(this.options.beforeDone),this.hide();var M=this.input.prop(\"value\"),b=l(this.hours)+\":\"+l(this.minutes);this.options.twelvehour&&(b=b+\" \"+this.amOrPm),this.input.prop(\"value\",b),b!==M&&(this.input.triggerHandler(\"change\"),this.isInput||this.element.trigger(\"change\")),this.options.autoclose&&this.input.trigger(\"blur\"),g(this.options.afterDone)},m.prototype.remove=function(){this.element.removeData(\"clockpicker\"),this.input.off(\"focus.clockpicker click.clockpicker\"),this.addon.off(\"click.clockpicker\"),this.isShown&&this.hide(),this.isAppended&&(z.off(\"resize.clockpicker\"+this.id),this.popover.remove())},o.fn.clockpicker=function(M){var b=Array.prototype.slice.call(arguments,1);return this.each(function(){var p=o(this),e=p.data(\"clockpicker\");if(e)\"function\"==typeof e[M]&&e[M].apply(e,b);else{var z=o.extend({},m.DEFAULTS,p.data(),\"object\"==typeof M&&M);p.data(\"clockpicker\",new m(p,z))}})}}(),function(M,b){\"object\"==typeof exports&&exports&&\"string\"!=typeof exports.nodeName?b(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],b):(M.Mustache={},b(M.Mustache))}(this,function(M){var b=Object.prototype.toString,p=Array.isArray||function(M){return\"[object Array]\"===b.call(M)};function e(M){return\"function\"==typeof M}function o(M){return M.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\")}function z(M,b){return null!=M&&\"object\"==typeof M&&b in M}var t=RegExp.prototype.test;var c=/\\S/;function n(M){return!function(M,b){return t.call(M,b)}(c,M)}var O={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#x2F;\",\"`\":\"&#x60;\",\"=\":\"&#x3D;\"};var i=/\\s*/,r=/\\s+/,a=/\\s*=/,s=/\\s*\\}/,A=/#|\\^|\\/|>|\\{|&|=|!/;function d(M){this.string=M,this.tail=M,this.pos=0}function l(M,b){this.view=M,this.cache={\".\":this.view},this.parent=b}function q(){this.cache={}}d.prototype.eos=function(){return\"\"===this.tail},d.prototype.scan=function(M){var b=this.tail.match(M);if(!b||0!==b.index)return\"\";var p=b[0];return this.tail=this.tail.substring(p.length),this.pos+=p.length,p},d.prototype.scanUntil=function(M){var b,p=this.tail.search(M);switch(p){case-1:b=this.tail,this.tail=\"\";break;case 0:b=\"\";break;default:b=this.tail.substring(0,p),this.tail=this.tail.substring(p)}return this.pos+=b.length,b},l.prototype.push=function(M){return new l(M,this)},l.prototype.lookup=function(M){var b,p=this.cache;if(p.hasOwnProperty(M))b=p[M];else{for(var o,t,c=this,n=!1;c;){if(M.indexOf(\".\")>0)for(b=c.view,o=M.split(\".\"),t=0;null!=b&&t<o.length;)t===o.length-1&&(n=z(b,o[t])),b=b[o[t++]];else b=c.view[M],n=z(c.view,M);if(n)break;c=c.parent}p[M]=b}return e(b)&&(b=b.call(this.view)),b},q.prototype.clearCache=function(){this.cache={}},q.prototype.parse=function(b,e){var z=this.cache,t=z[b];return null==t&&(t=z[b]=function(b,e){if(!b)return[];var z,t,c,O=[],l=[],q=[],u=!1,f=!1;function W(){if(u&&!f)for(;q.length;)delete l[q.pop()];else q=[];u=!1,f=!1}function h(M){if(\"string\"==typeof M&&(M=M.split(r,2)),!p(M)||2!==M.length)throw new Error(\"Invalid tags: \"+M);z=new RegExp(o(M[0])+\"\\\\s*\"),t=new RegExp(\"\\\\s*\"+o(M[1])),c=new RegExp(\"\\\\s*\"+o(\"}\"+M[1]))}h(e||M.tags);for(var R,m,g,L,v,N,y=new d(b);!y.eos();){if(R=y.pos,g=y.scanUntil(z))for(var B=0,X=g.length;B<X;++B)n(L=g.charAt(B))?q.push(l.length):f=!0,l.push([\"text\",L,R,R+1]),R+=1,\"\\n\"===L&&W();if(!y.scan(z))break;if(u=!0,m=y.scan(A)||\"name\",y.scan(i),\"=\"===m?(g=y.scanUntil(a),y.scan(a),y.scanUntil(t)):\"{\"===m?(g=y.scanUntil(c),y.scan(s),y.scanUntil(t),m=\"&\"):g=y.scanUntil(t),!y.scan(t))throw new Error(\"Unclosed tag at \"+y.pos);if(v=[m,g,R,y.pos],l.push(v),\"#\"===m||\"^\"===m)O.push(v);else if(\"/\"===m){if(!(N=O.pop()))throw new Error('Unopened section \"'+g+'\" at '+R);if(N[1]!==g)throw new Error('Unclosed section \"'+N[1]+'\" at '+R)}else\"name\"===m||\"{\"===m||\"&\"===m?f=!0:\"=\"===m&&h(g)}if(N=O.pop())throw new Error('Unclosed section \"'+N[1]+'\" at '+y.pos);return function(M){for(var b,p=[],e=p,o=[],z=0,t=M.length;z<t;++z)switch((b=M[z])[0]){case\"#\":case\"^\":e.push(b),o.push(b),e=b[4]=[];break;case\"/\":o.pop()[5]=b[2],e=o.length>0?o[o.length-1][4]:p;break;default:e.push(b)}return p}(function(M){for(var b,p,e=[],o=0,z=M.length;o<z;++o)(b=M[o])&&(\"text\"===b[0]&&p&&\"text\"===p[0]?(p[1]+=b[1],p[3]=b[3]):(e.push(b),p=b));return e}(l))}(b,e)),t},q.prototype.render=function(M,b,p){var e=this.parse(M),o=b instanceof l?b:new l(b);return this.renderTokens(e,o,p,M)},q.prototype.renderTokens=function(M,b,p,e){for(var o,z,t,c=\"\",n=0,O=M.length;n<O;++n)t=void 0,\"#\"===(z=(o=M[n])[0])?t=this.renderSection(o,b,p,e):\"^\"===z?t=this.renderInverted(o,b,p,e):\">\"===z?t=this.renderPartial(o,b,p,e):\"&\"===z?t=this.unescapedValue(o,b):\"name\"===z?t=this.escapedValue(o,b):\"text\"===z&&(t=this.rawValue(o)),void 0!==t&&(c+=t);return c},q.prototype.renderSection=function(M,b,o,z){var t=this,c=\"\",n=b.lookup(M[1]);if(n){if(p(n))for(var O=0,i=n.length;O<i;++O)c+=this.renderTokens(M[4],b.push(n[O]),o,z);else if(\"object\"==typeof n||\"string\"==typeof n||\"number\"==typeof n)c+=this.renderTokens(M[4],b.push(n),o,z);else if(e(n)){if(\"string\"!=typeof z)throw new Error(\"Cannot use higher-order sections without the original template\");null!=(n=n.call(b.view,z.slice(M[3],M[5]),function(M){return t.render(M,b,o)}))&&(c+=n)}else c+=this.renderTokens(M[4],b,o,z);return c}},q.prototype.renderInverted=function(M,b,e,o){var z=b.lookup(M[1]);if(!z||p(z)&&0===z.length)return this.renderTokens(M[4],b,e,o)},q.prototype.renderPartial=function(M,b,p){if(p){var o=e(p)?p(M[1]):p[M[1]];return null!=o?this.renderTokens(this.parse(o),b,p,o):void 0}},q.prototype.unescapedValue=function(M,b){var p=b.lookup(M[1]);if(null!=p)return p},q.prototype.escapedValue=function(b,p){var e=p.lookup(b[1]);if(null!=e)return M.escape(e)},q.prototype.rawValue=function(M){return M[1]},M.name=\"mustache.js\",M.version=\"2.3.2\",M.tags=[\"{{\",\"}}\"];var u=new q;return M.clearCache=function(){return u.clearCache()},M.parse=function(M,b){return u.parse(M,b)},M.render=function(M,b,e){if(\"string\"!=typeof M)throw new TypeError('Invalid template! Template should be a \"string\" but \"'+((p(o=M)?\"array\":typeof o)+'\" was given as the first argument for mustache#render(template, view, partials)'));var o;return u.render(M,b,e)},M.to_html=function(b,p,o,z){var t=M.render(b,p,o);if(!e(z))return t;z(t)},M.escape=function(M){return String(M).replace(/[&<>\"'`=\\/]/g,function(M){return O[M]})},M.Scanner=d,M.Context=l,M.Writer=q,M}),function(M,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?b(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],b):b((M=\"undefined\"!=typeof globalThis?globalThis:M||self).Popper={})}(this,function(M){\"use strict\";function b(M){if(null==M)return window;if(\"[object Window]\"!==M.toString()){var b=M.ownerDocument;return b&&b.defaultView||window}return M}function p(M){return M instanceof b(M).Element||M instanceof Element}function e(M){return M instanceof b(M).HTMLElement||M instanceof HTMLElement}function o(M){return\"undefined\"!=typeof ShadowRoot&&(M instanceof b(M).ShadowRoot||M instanceof ShadowRoot)}var z=Math.max,t=Math.min,c=Math.round;function n(){var M=navigator.userAgentData;return null!=M&&M.brands&&Array.isArray(M.brands)?M.brands.map(function(M){return M.brand+\"/\"+M.version}).join(\" \"):navigator.userAgent}function O(){return!/^((?!chrome|android).)*safari/i.test(n())}function i(M,o,z){void 0===o&&(o=!1),void 0===z&&(z=!1);var t=M.getBoundingClientRect(),n=1,i=1;o&&e(M)&&(n=M.offsetWidth>0&&c(t.width)/M.offsetWidth||1,i=M.offsetHeight>0&&c(t.height)/M.offsetHeight||1);var r=(p(M)?b(M):window).visualViewport,a=!O()&&z,s=(t.left+(a&&r?r.offsetLeft:0))/n,A=(t.top+(a&&r?r.offsetTop:0))/i,d=t.width/n,l=t.height/i;return{width:d,height:l,top:A,right:s+d,bottom:A+l,left:s,x:s,y:A}}function r(M){var p=b(M);return{scrollLeft:p.pageXOffset,scrollTop:p.pageYOffset}}function a(M){return M?(M.nodeName||\"\").toLowerCase():null}function s(M){return((p(M)?M.ownerDocument:M.document)||window.document).documentElement}function A(M){return i(s(M)).left+r(M).scrollLeft}function d(M){return b(M).getComputedStyle(M)}function l(M){var b=d(M),p=b.overflow,e=b.overflowX,o=b.overflowY;return/auto|scroll|overlay|hidden/.test(p+o+e)}function q(M,p,o){void 0===o&&(o=!1);var z,t,n=e(p),O=e(p)&&function(M){var b=M.getBoundingClientRect(),p=c(b.width)/M.offsetWidth||1,e=c(b.height)/M.offsetHeight||1;return 1!==p||1!==e}(p),d=s(p),q=i(M,O,o),u={scrollLeft:0,scrollTop:0},f={x:0,y:0};return(n||!n&&!o)&&((\"body\"!==a(p)||l(d))&&(u=(z=p)!==b(z)&&e(z)?{scrollLeft:(t=z).scrollLeft,scrollTop:t.scrollTop}:r(z)),e(p)?((f=i(p,!0)).x+=p.clientLeft,f.y+=p.clientTop):d&&(f.x=A(d))),{x:q.left+u.scrollLeft-f.x,y:q.top+u.scrollTop-f.y,width:q.width,height:q.height}}function u(M){var b=i(M),p=M.offsetWidth,e=M.offsetHeight;return Math.abs(b.width-p)<=1&&(p=b.width),Math.abs(b.height-e)<=1&&(e=b.height),{x:M.offsetLeft,y:M.offsetTop,width:p,height:e}}function f(M){return\"html\"===a(M)?M:M.assignedSlot||M.parentNode||(o(M)?M.host:null)||s(M)}function W(M){return[\"html\",\"body\",\"#document\"].indexOf(a(M))>=0?M.ownerDocument.body:e(M)&&l(M)?M:W(f(M))}function h(M,p){var e;void 0===p&&(p=[]);var o=W(M),z=o===(null==(e=M.ownerDocument)?void 0:e.body),t=b(o),c=z?[t].concat(t.visualViewport||[],l(o)?o:[]):o,n=p.concat(c);return z?n:n.concat(h(f(c)))}function R(M){return[\"table\",\"td\",\"th\"].indexOf(a(M))>=0}function m(M){return e(M)&&\"fixed\"!==d(M).position?M.offsetParent:null}function g(M){for(var p=b(M),z=m(M);z&&R(z)&&\"static\"===d(z).position;)z=m(z);return z&&(\"html\"===a(z)||\"body\"===a(z)&&\"static\"===d(z).position)?p:z||function(M){var b=/firefox/i.test(n());if(/Trident/i.test(n())&&e(M)&&\"fixed\"===d(M).position)return null;var p=f(M);for(o(p)&&(p=p.host);e(p)&&[\"html\",\"body\"].indexOf(a(p))<0;){var z=d(p);if(\"none\"!==z.transform||\"none\"!==z.perspective||\"paint\"===z.contain||-1!==[\"transform\",\"perspective\"].indexOf(z.willChange)||b&&\"filter\"===z.willChange||b&&z.filter&&\"none\"!==z.filter)return p;p=p.parentNode}return null}(M)||p}var L=\"top\",v=\"bottom\",N=\"right\",y=\"left\",B=\"auto\",X=[L,v,N,y],w=\"start\",x=\"end\",T=\"viewport\",_=\"popper\",k=X.reduce(function(M,b){return M.concat([b+\"-\"+w,b+\"-\"+x])},[]),S=[].concat(X,[B]).reduce(function(M,b){return M.concat([b,b+\"-\"+w,b+\"-\"+x])},[]),C=[\"beforeRead\",\"read\",\"afterRead\",\"beforeMain\",\"main\",\"afterMain\",\"beforeWrite\",\"write\",\"afterWrite\"];function E(M){var b=new Map,p=new Set,e=[];function o(M){p.add(M.name),[].concat(M.requires||[],M.requiresIfExists||[]).forEach(function(M){if(!p.has(M)){var e=b.get(M);e&&o(e)}}),e.push(M)}return M.forEach(function(M){b.set(M.name,M)}),M.forEach(function(M){p.has(M.name)||o(M)}),e}function D(M,b){var p=b.getRootNode&&b.getRootNode();if(M.contains(b))return!0;if(p&&o(p)){var e=b;do{if(e&&M.isSameNode(e))return!0;e=e.parentNode||e.host}while(e)}return!1}function P(M){return Object.assign({},M,{left:M.x,top:M.y,right:M.x+M.width,bottom:M.y+M.height})}function I(M,e,o){return e===T?P(function(M,p){var e=b(M),o=s(M),z=e.visualViewport,t=o.clientWidth,c=o.clientHeight,n=0,i=0;if(z){t=z.width,c=z.height;var r=O();(r||!r&&\"fixed\"===p)&&(n=z.offsetLeft,i=z.offsetTop)}return{width:t,height:c,x:n+A(M),y:i}}(M,o)):p(e)?function(M,b){var p=i(M,!1,\"fixed\"===b);return p.top=p.top+M.clientTop,p.left=p.left+M.clientLeft,p.bottom=p.top+M.clientHeight,p.right=p.left+M.clientWidth,p.width=M.clientWidth,p.height=M.clientHeight,p.x=p.left,p.y=p.top,p}(e,o):P(function(M){var b,p=s(M),e=r(M),o=null==(b=M.ownerDocument)?void 0:b.body,t=z(p.scrollWidth,p.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),c=z(p.scrollHeight,p.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),n=-e.scrollLeft+A(M),O=-e.scrollTop;return\"rtl\"===d(o||p).direction&&(n+=z(p.clientWidth,o?o.clientWidth:0)-t),{width:t,height:c,x:n,y:O}}(s(M)))}function F(M,b,o,c){var n=\"clippingParents\"===b?function(M){var b=h(f(M)),o=[\"absolute\",\"fixed\"].indexOf(d(M).position)>=0&&e(M)?g(M):M;return p(o)?b.filter(function(M){return p(M)&&D(M,o)&&\"body\"!==a(M)}):[]}(M):[].concat(b),O=[].concat(n,[o]),i=O[0],r=O.reduce(function(b,p){var e=I(M,p,c);return b.top=z(e.top,b.top),b.right=t(e.right,b.right),b.bottom=t(e.bottom,b.bottom),b.left=z(e.left,b.left),b},I(M,i,c));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}function j(M){return M.split(\"-\")[0]}function H(M){return M.split(\"-\")[1]}function U(M){return[\"top\",\"bottom\"].indexOf(M)>=0?\"x\":\"y\"}function Y(M){var b,p=M.reference,e=M.element,o=M.placement,z=o?j(o):null,t=o?H(o):null,c=p.x+p.width/2-e.width/2,n=p.y+p.height/2-e.height/2;switch(z){case L:b={x:c,y:p.y-e.height};break;case v:b={x:c,y:p.y+p.height};break;case N:b={x:p.x+p.width,y:n};break;case y:b={x:p.x-e.width,y:n};break;default:b={x:p.x,y:p.y}}var O=z?U(z):null;if(null!=O){var i=\"y\"===O?\"height\":\"width\";switch(t){case w:b[O]=b[O]-(p[i]/2-e[i]/2);break;case x:b[O]=b[O]+(p[i]/2-e[i]/2)}}return b}function G(M){return Object.assign({},{top:0,right:0,bottom:0,left:0},M)}function V(M,b){return b.reduce(function(b,p){return b[p]=M,b},{})}function $(M,b){void 0===b&&(b={});var e=b,o=e.placement,z=void 0===o?M.placement:o,t=e.strategy,c=void 0===t?M.strategy:t,n=e.boundary,O=void 0===n?\"clippingParents\":n,r=e.rootBoundary,a=void 0===r?T:r,A=e.elementContext,d=void 0===A?_:A,l=e.altBoundary,q=void 0!==l&&l,u=e.padding,f=void 0===u?0:u,W=G(\"number\"!=typeof f?f:V(f,X)),h=d===_?\"reference\":_,R=M.rects.popper,m=M.elements[q?h:d],g=F(p(m)?m:m.contextElement||s(M.elements.popper),O,a,c),y=i(M.elements.reference),B=Y({reference:y,element:R,strategy:\"absolute\",placement:z}),w=P(Object.assign({},R,B)),x=d===_?w:y,k={top:g.top-x.top+W.top,bottom:x.bottom-g.bottom+W.bottom,left:g.left-x.left+W.left,right:x.right-g.right+W.right},S=M.modifiersData.offset;if(d===_&&S){var C=S[z];Object.keys(k).forEach(function(M){var b=[N,v].indexOf(M)>=0?1:-1,p=[L,v].indexOf(M)>=0?\"y\":\"x\";k[M]+=C[p]*b})}return k}var K={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function Q(){for(var M=arguments.length,b=new Array(M),p=0;p<M;p++)b[p]=arguments[p];return!b.some(function(M){return!(M&&\"function\"==typeof M.getBoundingClientRect)})}function J(M){void 0===M&&(M={});var b=M,e=b.defaultModifiers,o=void 0===e?[]:e,z=b.defaultOptions,t=void 0===z?K:z;return function(M,b,e){void 0===e&&(e=t);var z,c,n={placement:\"bottom\",orderedModifiers:[],options:Object.assign({},K,t),modifiersData:{},elements:{reference:M,popper:b},attributes:{},styles:{}},O=[],i=!1,r={state:n,setOptions:function(e){var z=\"function\"==typeof e?e(n.options):e;a(),n.options=Object.assign({},t,n.options,z),n.scrollParents={reference:p(M)?h(M):M.contextElement?h(M.contextElement):[],popper:h(b)};var c,i,s=function(M){var b=E(M);return C.reduce(function(M,p){return M.concat(b.filter(function(M){return M.phase===p}))},[])}((c=[].concat(o,n.options.modifiers),i=c.reduce(function(M,b){var p=M[b.name];return M[b.name]=p?Object.assign({},p,b,{options:Object.assign({},p.options,b.options),data:Object.assign({},p.data,b.data)}):b,M},{}),Object.keys(i).map(function(M){return i[M]})));return n.orderedModifiers=s.filter(function(M){return M.enabled}),n.orderedModifiers.forEach(function(M){var b=M.name,p=M.options,e=void 0===p?{}:p,o=M.effect;if(\"function\"==typeof o){var z=o({state:n,name:b,instance:r,options:e});O.push(z||function(){})}}),r.update()},forceUpdate:function(){if(!i){var M=n.elements,b=M.reference,p=M.popper;if(Q(b,p)){n.rects={reference:q(b,g(p),\"fixed\"===n.options.strategy),popper:u(p)},n.reset=!1,n.placement=n.options.placement,n.orderedModifiers.forEach(function(M){return n.modifiersData[M.name]=Object.assign({},M.data)});for(var e=0;e<n.orderedModifiers.length;e++)if(!0!==n.reset){var o=n.orderedModifiers[e],z=o.fn,t=o.options,c=void 0===t?{}:t,O=o.name;\"function\"==typeof z&&(n=z({state:n,options:c,name:O,instance:r})||n)}else n.reset=!1,e=-1}}},update:(z=function(){return new Promise(function(M){r.forceUpdate(),M(n)})},function(){return c||(c=new Promise(function(M){Promise.resolve().then(function(){c=void 0,M(z())})})),c}),destroy:function(){a(),i=!0}};if(!Q(M,b))return r;function a(){O.forEach(function(M){return M()}),O=[]}return r.setOptions(e).then(function(M){!i&&e.onFirstUpdate&&e.onFirstUpdate(M)}),r}}var Z={passive:!0},MM={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:function(M){var p=M.state,e=M.instance,o=M.options,z=o.scroll,t=void 0===z||z,c=o.resize,n=void 0===c||c,O=b(p.elements.popper),i=[].concat(p.scrollParents.reference,p.scrollParents.popper);return t&&i.forEach(function(M){M.addEventListener(\"scroll\",e.update,Z)}),n&&O.addEventListener(\"resize\",e.update,Z),function(){t&&i.forEach(function(M){M.removeEventListener(\"scroll\",e.update,Z)}),n&&O.removeEventListener(\"resize\",e.update,Z)}},data:{}},bM={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:function(M){var b=M.state,p=M.name;b.modifiersData[p]=Y({reference:b.rects.reference,element:b.rects.popper,strategy:\"absolute\",placement:b.placement})},data:{}},pM={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function eM(M){var p,e=M.popper,o=M.popperRect,z=M.placement,t=M.variation,n=M.offsets,O=M.position,i=M.gpuAcceleration,r=M.adaptive,a=M.roundOffsets,A=M.isFixed,l=n.x,q=void 0===l?0:l,u=n.y,f=void 0===u?0:u,W=\"function\"==typeof a?a({x:q,y:f}):{x:q,y:f};q=W.x,f=W.y;var h=n.hasOwnProperty(\"x\"),R=n.hasOwnProperty(\"y\"),m=y,B=L,X=window;if(r){var w=g(e),T=\"clientHeight\",_=\"clientWidth\";w===b(e)&&\"static\"!==d(w=s(e)).position&&\"absolute\"===O&&(T=\"scrollHeight\",_=\"scrollWidth\"),(z===L||(z===y||z===N)&&t===x)&&(B=v,f-=(A&&w===X&&X.visualViewport?X.visualViewport.height:w[T])-o.height,f*=i?1:-1),z!==y&&(z!==L&&z!==v||t!==x)||(m=N,q-=(A&&w===X&&X.visualViewport?X.visualViewport.width:w[_])-o.width,q*=i?1:-1)}var k,S=Object.assign({position:O},r&&pM),C=!0===a?function(M,b){var p=M.x,e=M.y,o=b.devicePixelRatio||1;return{x:c(p*o)/o||0,y:c(e*o)/o||0}}({x:q,y:f},b(e)):{x:q,y:f};return q=C.x,f=C.y,i?Object.assign({},S,((k={})[B]=R?\"0\":\"\",k[m]=h?\"0\":\"\",k.transform=(X.devicePixelRatio||1)<=1?\"translate(\"+q+\"px, \"+f+\"px)\":\"translate3d(\"+q+\"px, \"+f+\"px, 0)\",k)):Object.assign({},S,((p={})[B]=R?f+\"px\":\"\",p[m]=h?q+\"px\":\"\",p.transform=\"\",p))}var oM={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:function(M){var b=M.state,p=M.options,e=p.gpuAcceleration,o=void 0===e||e,z=p.adaptive,t=void 0===z||z,c=p.roundOffsets,n=void 0===c||c,O={placement:j(b.placement),variation:H(b.placement),popper:b.elements.popper,popperRect:b.rects.popper,gpuAcceleration:o,isFixed:\"fixed\"===b.options.strategy};null!=b.modifiersData.popperOffsets&&(b.styles.popper=Object.assign({},b.styles.popper,eM(Object.assign({},O,{offsets:b.modifiersData.popperOffsets,position:b.options.strategy,adaptive:t,roundOffsets:n})))),null!=b.modifiersData.arrow&&(b.styles.arrow=Object.assign({},b.styles.arrow,eM(Object.assign({},O,{offsets:b.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:n})))),b.attributes.popper=Object.assign({},b.attributes.popper,{\"data-popper-placement\":b.placement})},data:{}},zM={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:function(M){var b=M.state;Object.keys(b.elements).forEach(function(M){var p=b.styles[M]||{},o=b.attributes[M]||{},z=b.elements[M];e(z)&&a(z)&&(Object.assign(z.style,p),Object.keys(o).forEach(function(M){var b=o[M];!1===b?z.removeAttribute(M):z.setAttribute(M,!0===b?\"\":b)}))})},effect:function(M){var b=M.state,p={popper:{position:b.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(b.elements.popper.style,p.popper),b.styles=p,b.elements.arrow&&Object.assign(b.elements.arrow.style,p.arrow),function(){Object.keys(b.elements).forEach(function(M){var o=b.elements[M],z=b.attributes[M]||{},t=Object.keys(b.styles.hasOwnProperty(M)?b.styles[M]:p[M]).reduce(function(M,b){return M[b]=\"\",M},{});e(o)&&a(o)&&(Object.assign(o.style,t),Object.keys(z).forEach(function(M){o.removeAttribute(M)}))})}},requires:[\"computeStyles\"]},tM={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:function(M){var b=M.state,p=M.options,e=M.name,o=p.offset,z=void 0===o?[0,0]:o,t=S.reduce(function(M,p){return M[p]=function(M,b,p){var e=j(M),o=[y,L].indexOf(e)>=0?-1:1,z=\"function\"==typeof p?p(Object.assign({},b,{placement:M})):p,t=z[0],c=z[1];return t=t||0,c=(c||0)*o,[y,N].indexOf(e)>=0?{x:c,y:t}:{x:t,y:c}}(p,b.rects,z),M},{}),c=t[b.placement],n=c.x,O=c.y;null!=b.modifiersData.popperOffsets&&(b.modifiersData.popperOffsets.x+=n,b.modifiersData.popperOffsets.y+=O),b.modifiersData[e]=t}},cM={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function nM(M){return M.replace(/left|right|bottom|top/g,function(M){return cM[M]})}var OM={start:\"end\",end:\"start\"};function iM(M){return M.replace(/start|end/g,function(M){return OM[M]})}function rM(M,b){void 0===b&&(b={});var p=b,e=p.placement,o=p.boundary,z=p.rootBoundary,t=p.padding,c=p.flipVariations,n=p.allowedAutoPlacements,O=void 0===n?S:n,i=H(e),r=i?c?k:k.filter(function(M){return H(M)===i}):X,a=r.filter(function(M){return O.indexOf(M)>=0});0===a.length&&(a=r);var s=a.reduce(function(b,p){return b[p]=$(M,{placement:p,boundary:o,rootBoundary:z,padding:t})[j(p)],b},{});return Object.keys(s).sort(function(M,b){return s[M]-s[b]})}var aM={name:\"flip\",enabled:!0,phase:\"main\",fn:function(M){var b=M.state,p=M.options,e=M.name;if(!b.modifiersData[e]._skip){for(var o=p.mainAxis,z=void 0===o||o,t=p.altAxis,c=void 0===t||t,n=p.fallbackPlacements,O=p.padding,i=p.boundary,r=p.rootBoundary,a=p.altBoundary,s=p.flipVariations,A=void 0===s||s,d=p.allowedAutoPlacements,l=b.options.placement,q=j(l),u=n||(q!==l&&A?function(M){if(j(M)===B)return[];var b=nM(M);return[iM(M),b,iM(b)]}(l):[nM(l)]),f=[l].concat(u).reduce(function(M,p){return M.concat(j(p)===B?rM(b,{placement:p,boundary:i,rootBoundary:r,padding:O,flipVariations:A,allowedAutoPlacements:d}):p)},[]),W=b.rects.reference,h=b.rects.popper,R=new Map,m=!0,g=f[0],X=0;X<f.length;X++){var x=f[X],T=j(x),_=H(x)===w,k=[L,v].indexOf(T)>=0,S=k?\"width\":\"height\",C=$(b,{placement:x,boundary:i,rootBoundary:r,altBoundary:a,padding:O}),E=k?_?N:y:_?v:L;W[S]>h[S]&&(E=nM(E));var D=nM(E),P=[];if(z&&P.push(C[T]<=0),c&&P.push(C[E]<=0,C[D]<=0),P.every(function(M){return M})){g=x,m=!1;break}R.set(x,P)}if(m)for(var I=function(M){var b=f.find(function(b){var p=R.get(b);if(p)return p.slice(0,M).every(function(M){return M})});if(b)return g=b,\"break\"},F=A?3:1;F>0&&\"break\"!==I(F);F--);b.placement!==g&&(b.modifiersData[e]._skip=!0,b.placement=g,b.reset=!0)}},requiresIfExists:[\"offset\"],data:{_skip:!1}};function sM(M,b,p){return z(M,t(b,p))}var AM={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:function(M){var b=M.state,p=M.options,e=M.name,o=p.mainAxis,c=void 0===o||o,n=p.altAxis,O=void 0!==n&&n,i=p.boundary,r=p.rootBoundary,a=p.altBoundary,s=p.padding,A=p.tether,d=void 0===A||A,l=p.tetherOffset,q=void 0===l?0:l,f=$(b,{boundary:i,rootBoundary:r,padding:s,altBoundary:a}),W=j(b.placement),h=H(b.placement),R=!h,m=U(W),B=\"x\"===m?\"y\":\"x\",X=b.modifiersData.popperOffsets,x=b.rects.reference,T=b.rects.popper,_=\"function\"==typeof q?q(Object.assign({},b.rects,{placement:b.placement})):q,k=\"number\"==typeof _?{mainAxis:_,altAxis:_}:Object.assign({mainAxis:0,altAxis:0},_),S=b.modifiersData.offset?b.modifiersData.offset[b.placement]:null,C={x:0,y:0};if(X){if(c){var E,D=\"y\"===m?L:y,P=\"y\"===m?v:N,I=\"y\"===m?\"height\":\"width\",F=X[m],Y=F+f[D],G=F-f[P],V=d?-T[I]/2:0,K=h===w?x[I]:T[I],Q=h===w?-T[I]:-x[I],J=b.elements.arrow,Z=d&&J?u(J):{width:0,height:0},MM=b.modifiersData[\"arrow#persistent\"]?b.modifiersData[\"arrow#persistent\"].padding:{top:0,right:0,bottom:0,left:0},bM=MM[D],pM=MM[P],eM=sM(0,x[I],Z[I]),oM=R?x[I]/2-V-eM-bM-k.mainAxis:K-eM-bM-k.mainAxis,zM=R?-x[I]/2+V+eM+pM+k.mainAxis:Q+eM+pM+k.mainAxis,tM=b.elements.arrow&&g(b.elements.arrow),cM=tM?\"y\"===m?tM.clientTop||0:tM.clientLeft||0:0,nM=null!=(E=null==S?void 0:S[m])?E:0,OM=F+zM-nM,iM=sM(d?t(Y,F+oM-nM-cM):Y,F,d?z(G,OM):G);X[m]=iM,C[m]=iM-F}if(O){var rM,aM=\"x\"===m?L:y,AM=\"x\"===m?v:N,dM=X[B],lM=\"y\"===B?\"height\":\"width\",qM=dM+f[aM],uM=dM-f[AM],fM=-1!==[L,y].indexOf(W),WM=null!=(rM=null==S?void 0:S[B])?rM:0,hM=fM?qM:dM-x[lM]-T[lM]-WM+k.altAxis,RM=fM?dM+x[lM]+T[lM]-WM-k.altAxis:uM,mM=d&&fM?function(M,b,p){var e=sM(M,b,p);return e>p?p:e}(hM,dM,RM):sM(d?hM:qM,dM,d?RM:uM);X[B]=mM,C[B]=mM-dM}b.modifiersData[e]=C}},requiresIfExists:[\"offset\"]},dM={name:\"arrow\",enabled:!0,phase:\"main\",fn:function(M){var b,p=M.state,e=M.name,o=M.options,z=p.elements.arrow,t=p.modifiersData.popperOffsets,c=j(p.placement),n=U(c),O=[y,N].indexOf(c)>=0?\"height\":\"width\";if(z&&t){var i=function(M,b){return G(\"number\"!=typeof(M=\"function\"==typeof M?M(Object.assign({},b.rects,{placement:b.placement})):M)?M:V(M,X))}(o.padding,p),r=u(z),a=\"y\"===n?L:y,s=\"y\"===n?v:N,A=p.rects.reference[O]+p.rects.reference[n]-t[n]-p.rects.popper[O],d=t[n]-p.rects.reference[n],l=g(z),q=l?\"y\"===n?l.clientHeight||0:l.clientWidth||0:0,f=A/2-d/2,W=i[a],h=q-r[O]-i[s],R=q/2-r[O]/2+f,m=sM(W,R,h),B=n;p.modifiersData[e]=((b={})[B]=m,b.centerOffset=m-R,b)}},effect:function(M){var b=M.state,p=M.options.element,e=void 0===p?\"[data-popper-arrow]\":p;null!=e&&(\"string\"!=typeof e||(e=b.elements.popper.querySelector(e)))&&D(b.elements.popper,e)&&(b.elements.arrow=e)},requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function lM(M,b,p){return void 0===p&&(p={x:0,y:0}),{top:M.top-b.height-p.y,right:M.right-b.width+p.x,bottom:M.bottom-b.height+p.y,left:M.left-b.width-p.x}}function qM(M){return[L,N,v,y].some(function(b){return M[b]>=0})}var uM={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:function(M){var b=M.state,p=M.name,e=b.rects.reference,o=b.rects.popper,z=b.modifiersData.preventOverflow,t=$(b,{elementContext:\"reference\"}),c=$(b,{altBoundary:!0}),n=lM(t,e),O=lM(c,o,z),i=qM(n),r=qM(O);b.modifiersData[p]={referenceClippingOffsets:n,popperEscapeOffsets:O,isReferenceHidden:i,hasPopperEscaped:r},b.attributes.popper=Object.assign({},b.attributes.popper,{\"data-popper-reference-hidden\":i,\"data-popper-escaped\":r})}},fM=J({defaultModifiers:[MM,bM,oM,zM]}),WM=[MM,bM,oM,zM,tM,aM,AM,dM,uM],hM=J({defaultModifiers:WM});M.applyStyles=zM,M.arrow=dM,M.computeStyles=oM,M.createPopper=hM,M.createPopperLite=fM,M.defaultModifiers=WM,M.detectOverflow=$,M.eventListeners=MM,M.flip=aM,M.hide=uM,M.offset=tM,M.popperGenerator=J,M.popperOffsets=bM,M.preventOverflow=AM,Object.defineProperty(M,\"__esModule\",{value:!0})}),function(M){var b,p,e=\"0.5.4\",o=\"hasOwnProperty\",z=/[\\.\\/]/,t=/\\s*,\\s*/,c=function(M,b){return M-b},n={n:{}},O=function(){for(var M=0,b=this.length;M<b;M++)if(void 0!==this[M])return this[M]},i=function(){for(var M=this.length;--M;)if(void 0!==this[M])return this[M]},r=Object.prototype.toString,a=String,s=Array.isArray||function(M){return M instanceof Array||\"[object Array]\"==r.call(M)},A=function(M,e){var o,z=p,t=Array.prototype.slice.call(arguments,2),n=A.listeners(M),r=0,a=[],s={},d=[],l=b;d.firstDefined=O,d.lastDefined=i,b=M,p=0;for(var q=0,u=n.length;q<u;q++)\"zIndex\"in n[q]&&(a.push(n[q].zIndex),n[q].zIndex<0&&(s[n[q].zIndex]=n[q]));for(a.sort(c);a[r]<0;)if(o=s[a[r++]],d.push(o.apply(e,t)),p)return p=z,d;for(q=0;q<u;q++)if(\"zIndex\"in(o=n[q]))if(o.zIndex==a[r]){if(d.push(o.apply(e,t)),p)break;do{if((o=s[a[++r]])&&d.push(o.apply(e,t)),p)break}while(o)}else s[o.zIndex]=o;else if(d.push(o.apply(e,t)),p)break;return p=z,b=l,d};A._events=n,A.listeners=function(M){var b,p,e,o,t,c,O,i,r=s(M)?M:M.split(z),a=n,A=[a],d=[];for(o=0,t=r.length;o<t;o++){for(i=[],c=0,O=A.length;c<O;c++)for(p=[(a=A[c].n)[r[o]],a[\"*\"]],e=2;e--;)(b=p[e])&&(i.push(b),d=d.concat(b.f||[]));A=i}return d},A.separator=function(M){M?(M=\"[\"+(M=a(M).replace(/(?=[\\.\\^\\]\\[\\-])/g,\"\\\\\"))+\"]\",z=new RegExp(M)):z=/[\\.\\/]/},A.on=function(M,b){if(\"function\"!=typeof b)return function(){};for(var p=s(M)?s(M[0])?M:[M]:a(M).split(t),e=0,o=p.length;e<o;e++)(function(M){for(var p,e=s(M)?M:a(M).split(z),o=n,t=0,c=e.length;t<c;t++)o=(o=o.n).hasOwnProperty(e[t])&&o[e[t]]||(o[e[t]]={n:{}});for(o.f=o.f||[],t=0,c=o.f.length;t<c;t++)if(o.f[t]==b){p=!0;break}!p&&o.f.push(b)})(p[e]);return function(M){+M==+M&&(b.zIndex=+M)}},A.f=function(M){var b=[].slice.call(arguments,1);return function(){A.apply(null,[M,null].concat(b).concat([].slice.call(arguments,0)))}},A.stop=function(){p=1},A.nt=function(M){var p=s(b)?b.join(\".\"):b;return M?new RegExp(\"(?:\\\\.|\\\\/|^)\"+M+\"(?:\\\\.|\\\\/|$)\").test(p):p},A.nts=function(){return s(b)?b:b.split(z)},A.off=A.unbind=function(M,b){if(M){var p=s(M)?s(M[0])?M:[M]:a(M).split(t);if(p.length>1)for(var e=0,c=p.length;e<c;e++)A.off(p[e],b);else{p=s(M)?M:a(M).split(z);var O,i,r,d,l,q=[n],u=[];for(e=0,c=p.length;e<c;e++)for(d=0;d<q.length;d+=r.length-2){if(r=[d,1],O=q[d].n,\"*\"!=p[e])O[p[e]]&&(r.push(O[p[e]]),u.unshift({n:O,name:p[e]}));else for(i in O)O[o](i)&&(r.push(O[i]),u.unshift({n:O,name:i}));q.splice.apply(q,r)}for(e=0,c=q.length;e<c;e++)for(O=q[e];O.n;){if(b){if(O.f){for(d=0,l=O.f.length;d<l;d++)if(O.f[d]==b){O.f.splice(d,1);break}!O.f.length&&delete O.f}for(i in O.n)if(O.n[o](i)&&O.n[i].f){var f=O.n[i].f;for(d=0,l=f.length;d<l;d++)if(f[d]==b){f.splice(d,1);break}!f.length&&delete O.n[i].f}}else for(i in delete O.f,O.n)O.n[o](i)&&O.n[i].f&&delete O.n[i].f;O=O.n}M:for(e=0,c=u.length;e<c;e++){for(i in(O=u[e]).n[O.name].f)continue M;for(i in O.n[O.name].n)continue M;delete O.n[O.name]}}}else A._events=n={n:{}}},A.once=function(M,b){var p=function(){return A.off(M,p),b.apply(this,arguments)};return A.on(M,p)},A.version=e,A.toString=function(){return\"You are running Eve \"+e},M.eve=A,\"undefined\"!=typeof module&&module.exports?module.exports=A:\"function\"==typeof define&&define.amd?define(\"eve\",[],function(){return A}):M.eve=A}(\"undefined\"!=typeof window?window:this),function(M,b){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=b():\"function\"==typeof define&&define.amd?define([],b):\"object\"==typeof exports?exports.Raphael=b():M.Raphael=b()}(this,function(){return function(M){var b={};function p(e){if(b[e])return b[e].exports;var o=b[e]={exports:{},id:e,loaded:!1};return M[e].call(o.exports,o,o.exports,p),o.loaded=!0,o.exports}return p.m=M,p.c=b,p.p=\"\",p(0)}([function(M,b,p){var e,o;e=[p(1),p(3),p(4)],void 0===(o=function(M){return M}.apply(b,e))||(M.exports=o)},function(M,b,p){var e,o;e=[p(2)],o=function(M){function b(e){if(b.is(e,\"function\"))return p?e():M.on(\"raphael.DOMload\",e);if(b.is(e,B))return b._engine.create[r](b,e.splice(0,3+b.is(e[0],N))).add(e);var o=Array.prototype.slice.call(arguments,0);if(b.is(o[o.length-1],\"function\")){var z=o.pop();return p?z.call(b._engine.create[r](b,o)):M.on(\"raphael.DOMload\",function(){z.call(b._engine.create[r](b,o))})}return b._engine.create[r](b,arguments)}b.version=\"2.2.0\",b.eve=M;var p,e,o=/[, ]+/,z={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},t=/\\{(\\d+)\\}/g,c=\"hasOwnProperty\",n={doc:document,win:window},O={was:Object.prototype[c].call(n.win,\"Raphael\"),is:n.win.Raphael},i=function(){this.ca=this.customAttributes={}},r=\"apply\",a=\"concat\",s=\"ontouchstart\"in n.win||n.win.DocumentTouch&&n.doc instanceof DocumentTouch,A=\"\",d=\" \",l=String,q=\"split\",u=\"click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel\"[q](d),f={mousedown:\"touchstart\",mousemove:\"touchmove\",mouseup:\"touchend\"},W=l.prototype.toLowerCase,h=Math,R=h.max,m=h.min,g=h.abs,L=h.pow,v=h.PI,N=\"number\",y=\"string\",B=\"array\",X=Object.prototype.toString,w=(b._ISURL=/^url\\(['\"]?(.+?)['\"]?\\)$/i,/^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i),x={NaN:1,Infinity:1,\"-Infinity\":1},T=/^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,_=h.round,k=parseFloat,S=parseInt,C=l.prototype.toUpperCase,E=b._availableAttrs={\"arrow-end\":\"none\",\"arrow-start\":\"none\",blur:0,\"clip-rect\":\"0 0 1e9 1e9\",cursor:\"default\",cx:0,cy:0,fill:\"#fff\",\"fill-opacity\":1,font:'10px \"Arial\"',\"font-family\":'\"Arial\"',\"font-size\":\"10\",\"font-style\":\"normal\",\"font-weight\":400,gradient:0,height:0,href:\"http://raphaeljs.com/\",\"letter-spacing\":0,opacity:1,path:\"M0,0\",r:0,rx:0,ry:0,src:\"\",stroke:\"#000\",\"stroke-dasharray\":\"\",\"stroke-linecap\":\"butt\",\"stroke-linejoin\":\"butt\",\"stroke-miterlimit\":0,\"stroke-opacity\":1,\"stroke-width\":1,target:\"_blank\",\"text-anchor\":\"middle\",title:\"Raphael\",transform:\"\",width:0,x:0,y:0,class:\"\"},D=b._availableAnimAttrs={blur:N,\"clip-rect\":\"csv\",cx:N,cy:N,fill:\"colour\",\"fill-opacity\":N,\"font-size\":N,height:N,opacity:N,path:\"path\",r:N,rx:N,ry:N,stroke:\"colour\",\"stroke-opacity\":N,\"stroke-width\":N,transform:\"transform\",width:N,x:N,y:N},P=/[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/,I={hs:1,rg:1},F=/,?([achlmqrstvxz]),?/gi,j=/([achlmrqstvz])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/gi,H=/([rstm])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/gi,U=/(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/gi,Y=(b._radial_gradient=/^r(?:\\(([^,]+?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*([^\\)]+?)\\))?/,{}),G=function(M,b){return k(M)-k(b)},V=function(M){return M},$=b._rectPath=function(M,b,p,e,o){return o?[[\"M\",M+o,b],[\"l\",p-2*o,0],[\"a\",o,o,0,0,1,o,o],[\"l\",0,e-2*o],[\"a\",o,o,0,0,1,-o,o],[\"l\",2*o-p,0],[\"a\",o,o,0,0,1,-o,-o],[\"l\",0,2*o-e],[\"a\",o,o,0,0,1,o,-o],[\"z\"]]:[[\"M\",M,b],[\"l\",p,0],[\"l\",0,e],[\"l\",-p,0],[\"z\"]]},K=function(M,b,p,e){return null==e&&(e=p),[[\"M\",M,b],[\"m\",0,-e],[\"a\",p,e,0,1,1,0,2*e],[\"a\",p,e,0,1,1,0,-2*e],[\"z\"]]},Q=b._getPath={path:function(M){return M.attr(\"path\")},circle:function(M){var b=M.attrs;return K(b.cx,b.cy,b.r)},ellipse:function(M){var b=M.attrs;return K(b.cx,b.cy,b.rx,b.ry)},rect:function(M){var b=M.attrs;return $(b.x,b.y,b.width,b.height,b.r)},image:function(M){var b=M.attrs;return $(b.x,b.y,b.width,b.height)},text:function(M){var b=M._getBBox();return $(b.x,b.y,b.width,b.height)},set:function(M){var b=M._getBBox();return $(b.x,b.y,b.width,b.height)}},J=b.mapPath=function(M,b){if(!b)return M;var p,e,o,z,t,c,n;for(o=0,t=(M=yM(M)).length;o<t;o++)for(z=1,c=(n=M[o]).length;z<c;z+=2)p=b.x(n[z],n[z+1]),e=b.y(n[z],n[z+1]),n[z]=p,n[z+1]=e;return M};if(b._g=n,b.type=n.win.SVGAngle||n.doc.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")?\"SVG\":\"VML\",\"VML\"==b.type){var Z,MM=n.doc.createElement(\"div\");if(MM.innerHTML='<v:shape adj=\"1\"/>',(Z=MM.firstChild).style.behavior=\"url(#default#VML)\",!Z||\"object\"!=typeof Z.adj)return b.type=A;MM=null}function bM(M){if(\"function\"==typeof M||Object(M)!==M)return M;var b=new M.constructor;for(var p in M)M[c](p)&&(b[p]=bM(M[p]));return b}b.svg=!(b.vml=\"VML\"==b.type),b._Paper=i,b.fn=e=i.prototype=b.prototype,b._id=0,b.is=function(M,b){return\"finite\"==(b=W.call(b))?!x[c](+M):\"array\"==b?M instanceof Array:\"null\"==b&&null===M||b==typeof M&&null!==M||\"object\"==b&&M===Object(M)||\"array\"==b&&Array.isArray&&Array.isArray(M)||X.call(M).slice(8,-1).toLowerCase()==b},b.angle=function(M,p,e,o,z,t){if(null==z){var c=M-e,n=p-o;return c||n?(180+180*h.atan2(-n,-c)/v+360)%360:0}return b.angle(M,p,z,t)-b.angle(e,o,z,t)},b.rad=function(M){return M%360*v/180},b.deg=function(M){return Math.round(180*M/v%360*1e3)/1e3},b.snapTo=function(M,p,e){if(e=b.is(e,\"finite\")?e:10,b.is(M,B)){for(var o=M.length;o--;)if(g(M[o]-p)<=e)return M[o]}else{var z=p%(M=+M);if(z<e)return p-z;if(z>M-e)return p-z+M}return p};var pM,eM;b.createUUID=(pM=/[xy]/g,eM=function(M){var b=16*h.random()|0;return(\"x\"==M?b:3&b|8).toString(16)},function(){return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(pM,eM).toUpperCase()});b.setWindow=function(p){M(\"raphael.setWindow\",b,n.win,p),n.win=p,n.doc=n.win.document,b._engine.initWin&&b._engine.initWin(n.win)};var oM=function(M){if(b.vml){var p,e=/^\\s+|\\s+$/g;try{var o=new ActiveXObject(\"htmlfile\");o.write(\"<body>\"),o.close(),p=o.body}catch(M){p=createPopup().document.body}var z=p.createTextRange();oM=iM(function(M){try{p.style.color=l(M).replace(e,A);var b=z.queryCommandValue(\"ForeColor\");return\"#\"+(\"000000\"+(b=(255&b)<<16|65280&b|(16711680&b)>>>16).toString(16)).slice(-6)}catch(M){return\"none\"}})}else{var t=n.doc.createElement(\"i\");t.title=\"Raphaël Colour Picker\",t.style.display=\"none\",n.doc.body.appendChild(t),oM=iM(function(M){return t.style.color=M,n.doc.defaultView.getComputedStyle(t,A).getPropertyValue(\"color\")})}return oM(M)},zM=function(){return\"hsb(\"+[this.h,this.s,this.b]+\")\"},tM=function(){return\"hsl(\"+[this.h,this.s,this.l]+\")\"},cM=function(){return this.hex},nM=function(M,p,e){if(null==p&&b.is(M,\"object\")&&\"r\"in M&&\"g\"in M&&\"b\"in M&&(e=M.b,p=M.g,M=M.r),null==p&&b.is(M,y)){var o=b.getRGB(M);M=o.r,p=o.g,e=o.b}return(M>1||p>1||e>1)&&(M/=255,p/=255,e/=255),[M,p,e]},OM=function(M,p,e,o){var z={r:M*=255,g:p*=255,b:e*=255,hex:b.rgb(M,p,e),toString:cM};return b.is(o,\"finite\")&&(z.opacity=o),z};function iM(M,b,p){return function e(){var o=Array.prototype.slice.call(arguments,0),z=o.join(\"␀\"),t=e.cache=e.cache||{},n=e.count=e.count||[];return t[c](z)?(function(M,b){for(var p=0,e=M.length;p<e;p++)if(M[p]===b)return M.push(M.splice(p,1)[0])}(n,z),p?p(t[z]):t[z]):(n.length>=1e3&&delete t[n.shift()],n.push(z),t[z]=M[r](b,o),p?p(t[z]):t[z])}}b.color=function(M){var p;return b.is(M,\"object\")&&\"h\"in M&&\"s\"in M&&\"b\"in M?(p=b.hsb2rgb(M),M.r=p.r,M.g=p.g,M.b=p.b,M.hex=p.hex):b.is(M,\"object\")&&\"h\"in M&&\"s\"in M&&\"l\"in M?(p=b.hsl2rgb(M),M.r=p.r,M.g=p.g,M.b=p.b,M.hex=p.hex):(b.is(M,\"string\")&&(M=b.getRGB(M)),b.is(M,\"object\")&&\"r\"in M&&\"g\"in M&&\"b\"in M?(p=b.rgb2hsl(M),M.h=p.h,M.s=p.s,M.l=p.l,p=b.rgb2hsb(M),M.v=p.b):(M={hex:\"none\"}).r=M.g=M.b=M.h=M.s=M.v=M.l=-1),M.toString=cM,M},b.hsb2rgb=function(M,b,p,e){var o,z,t,c,n;return this.is(M,\"object\")&&\"h\"in M&&\"s\"in M&&\"b\"in M&&(p=M.b,b=M.s,e=M.o,M=M.h),c=(n=p*b)*(1-g((M=(M*=360)%360/60)%2-1)),o=z=t=p-n,OM(o+=[n,c,0,0,c,n][M=~~M],z+=[c,n,n,c,0,0][M],t+=[0,0,c,n,n,c][M],e)},b.hsl2rgb=function(M,b,p,e){var o,z,t,c,n;return this.is(M,\"object\")&&\"h\"in M&&\"s\"in M&&\"l\"in M&&(p=M.l,b=M.s,M=M.h),(M>1||b>1||p>1)&&(M/=360,b/=100,p/=100),c=(n=2*b*(p<.5?p:1-p))*(1-g((M=(M*=360)%360/60)%2-1)),o=z=t=p-n/2,OM(o+=[n,c,0,0,c,n][M=~~M],z+=[c,n,n,c,0,0][M],t+=[0,0,c,n,n,c][M],e)},b.rgb2hsb=function(M,b,p){var e,o;return M=(p=nM(M,b,p))[0],b=p[1],p=p[2],{h:((0==(o=(e=R(M,b,p))-m(M,b,p))?null:e==M?(b-p)/o:e==b?(p-M)/o+2:(M-b)/o+4)+360)%6*60/360,s:0==o?0:o/e,b:e,toString:zM}},b.rgb2hsl=function(M,b,p){var e,o,z,t;return M=(p=nM(M,b,p))[0],b=p[1],p=p[2],e=((o=R(M,b,p))+(z=m(M,b,p)))/2,{h:((0==(t=o-z)?null:o==M?(b-p)/t:o==b?(p-M)/t+2:(M-b)/t+4)+360)%6*60/360,s:0==t?0:e<.5?t/(2*e):t/(2-2*e),l:e,toString:tM}},b._path2string=function(){return this.join(\",\").replace(F,\"$1\")};b._preload=function(M,b){var p=n.doc.createElement(\"img\");p.style.cssText=\"position:absolute;left:-9999em;top:-9999em\",p.onload=function(){b.call(this),this.onload=null,n.doc.body.removeChild(this)},p.onerror=function(){n.doc.body.removeChild(this)},n.doc.body.appendChild(p),p.src=M};function rM(){return this.hex}function aM(M,b){for(var p=[],e=0,o=M.length;o-2*!b>e;e+=2){var z=[{x:+M[e-2],y:+M[e-1]},{x:+M[e],y:+M[e+1]},{x:+M[e+2],y:+M[e+3]},{x:+M[e+4],y:+M[e+5]}];b?e?o-4==e?z[3]={x:+M[0],y:+M[1]}:o-2==e&&(z[2]={x:+M[0],y:+M[1]},z[3]={x:+M[2],y:+M[3]}):z[0]={x:+M[o-2],y:+M[o-1]}:o-4==e?z[3]=z[2]:e||(z[0]={x:+M[e],y:+M[e+1]}),p.push([\"C\",(-z[0].x+6*z[1].x+z[2].x)/6,(-z[0].y+6*z[1].y+z[2].y)/6,(z[1].x+6*z[2].x-z[3].x)/6,(z[1].y+6*z[2].y-z[3].y)/6,z[2].x,z[2].y])}return p}b.getRGB=iM(function(M){if(!M||(M=l(M)).indexOf(\"-\")+1)return{r:-1,g:-1,b:-1,hex:\"none\",error:1,toString:rM};if(\"none\"==M)return{r:-1,g:-1,b:-1,hex:\"none\",toString:rM};!I[c](M.toLowerCase().substring(0,2))&&\"#\"!=M.charAt()&&(M=oM(M));var p,e,o,z,t,n,O=M.match(w);return O?(O[2]&&(o=S(O[2].substring(5),16),e=S(O[2].substring(3,5),16),p=S(O[2].substring(1,3),16)),O[3]&&(o=S((t=O[3].charAt(3))+t,16),e=S((t=O[3].charAt(2))+t,16),p=S((t=O[3].charAt(1))+t,16)),O[4]&&(n=O[4][q](P),p=k(n[0]),\"%\"==n[0].slice(-1)&&(p*=2.55),e=k(n[1]),\"%\"==n[1].slice(-1)&&(e*=2.55),o=k(n[2]),\"%\"==n[2].slice(-1)&&(o*=2.55),\"rgba\"==O[1].toLowerCase().slice(0,4)&&(z=k(n[3])),n[3]&&\"%\"==n[3].slice(-1)&&(z/=100)),O[5]?(n=O[5][q](P),p=k(n[0]),\"%\"==n[0].slice(-1)&&(p*=2.55),e=k(n[1]),\"%\"==n[1].slice(-1)&&(e*=2.55),o=k(n[2]),\"%\"==n[2].slice(-1)&&(o*=2.55),(\"deg\"==n[0].slice(-3)||\"°\"==n[0].slice(-1))&&(p/=360),\"hsba\"==O[1].toLowerCase().slice(0,4)&&(z=k(n[3])),n[3]&&\"%\"==n[3].slice(-1)&&(z/=100),b.hsb2rgb(p,e,o,z)):O[6]?(n=O[6][q](P),p=k(n[0]),\"%\"==n[0].slice(-1)&&(p*=2.55),e=k(n[1]),\"%\"==n[1].slice(-1)&&(e*=2.55),o=k(n[2]),\"%\"==n[2].slice(-1)&&(o*=2.55),(\"deg\"==n[0].slice(-3)||\"°\"==n[0].slice(-1))&&(p/=360),\"hsla\"==O[1].toLowerCase().slice(0,4)&&(z=k(n[3])),n[3]&&\"%\"==n[3].slice(-1)&&(z/=100),b.hsl2rgb(p,e,o,z)):((O={r:p,g:e,b:o,toString:rM}).hex=\"#\"+(16777216|o|e<<8|p<<16).toString(16).slice(1),b.is(z,\"finite\")&&(O.opacity=z),O)):{r:-1,g:-1,b:-1,hex:\"none\",error:1,toString:rM}},b),b.hsb=iM(function(M,p,e){return b.hsb2rgb(M,p,e).hex}),b.hsl=iM(function(M,p,e){return b.hsl2rgb(M,p,e).hex}),b.rgb=iM(function(M,b,p){function e(M){return M+.5|0}return\"#\"+(16777216|e(p)|e(b)<<8|e(M)<<16).toString(16).slice(1)}),b.getColor=function(M){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:M||.75},p=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),p.hex},b.getColor.reset=function(){delete this.start},b.parsePathString=function(M){if(!M)return null;var p=sM(M);if(p.arr)return WM(p.arr);var e={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},o=[];return b.is(M,B)&&b.is(M[0],B)&&(o=WM(M)),o.length||l(M).replace(j,function(M,b,p){var z=[],t=b.toLowerCase();if(p.replace(U,function(M,b){b&&z.push(+b)}),\"m\"==t&&z.length>2&&(o.push([b][a](z.splice(0,2))),t=\"l\",b=\"m\"==b?\"l\":\"L\"),\"r\"==t)o.push([b][a](z));else for(;z.length>=e[t]&&(o.push([b][a](z.splice(0,e[t]))),e[t]););}),o.toString=b._path2string,p.arr=WM(o),o},b.parseTransformString=iM(function(M){if(!M)return null;var p=[];return b.is(M,B)&&b.is(M[0],B)&&(p=WM(M)),p.length||l(M).replace(H,function(M,b,e){var o=[];W.call(b);e.replace(U,function(M,b){b&&o.push(+b)}),p.push([b][a](o))}),p.toString=b._path2string,p});var sM=function(M){var b=sM.ps=sM.ps||{};return b[M]?b[M].sleep=100:b[M]={sleep:100},setTimeout(function(){for(var p in b)b[c](p)&&p!=M&&(b[p].sleep--,!b[p].sleep&&delete b[p])}),b[M]};function AM(M,b,p,e,o){return M*(M*(-3*b+9*p-9*e+3*o)+6*b-12*p+6*e)-3*b+3*p}function dM(M,b,p,e,o,z,t,c,n){null==n&&(n=1);for(var O=(n=n>1?1:n<0?0:n)/2,i=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],r=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],a=0,s=0;s<12;s++){var A=O*i[s]+O,d=AM(A,M,p,o,t),l=AM(A,b,e,z,c),q=d*d+l*l;a+=r[s]*h.sqrt(q)}return O*a}function lM(M,b,p,e,o,z,t,c){if(!(R(M,p)<m(o,t)||m(M,p)>R(o,t)||R(b,e)<m(z,c)||m(b,e)>R(z,c))){var n=(M-p)*(z-c)-(b-e)*(o-t);if(n){var O=((M*e-b*p)*(o-t)-(M-p)*(o*c-z*t))/n,i=((M*e-b*p)*(z-c)-(b-e)*(o*c-z*t))/n,r=+O.toFixed(2),a=+i.toFixed(2);if(!(r<+m(M,p).toFixed(2)||r>+R(M,p).toFixed(2)||r<+m(o,t).toFixed(2)||r>+R(o,t).toFixed(2)||a<+m(b,e).toFixed(2)||a>+R(b,e).toFixed(2)||a<+m(z,c).toFixed(2)||a>+R(z,c).toFixed(2)))return{x:O,y:i}}}}function qM(M,p,e){var o=b.bezierBBox(M),z=b.bezierBBox(p);if(!b.isBBoxIntersect(o,z))return e?0:[];for(var t=dM.apply(0,M),c=dM.apply(0,p),n=R(~~(t/5),1),O=R(~~(c/5),1),i=[],r=[],a={},s=e?0:[],A=0;A<n+1;A++){var d=b.findDotsAtSegment.apply(b,M.concat(A/n));i.push({x:d.x,y:d.y,t:A/n})}for(A=0;A<O+1;A++)d=b.findDotsAtSegment.apply(b,p.concat(A/O)),r.push({x:d.x,y:d.y,t:A/O});for(A=0;A<n;A++)for(var l=0;l<O;l++){var q=i[A],u=i[A+1],f=r[l],W=r[l+1],h=g(u.x-q.x)<.001?\"y\":\"x\",L=g(W.x-f.x)<.001?\"y\":\"x\",v=lM(q.x,q.y,u.x,u.y,f.x,f.y,W.x,W.y);if(v){if(a[v.x.toFixed(4)]==v.y.toFixed(4))continue;a[v.x.toFixed(4)]=v.y.toFixed(4);var N=q.t+g((v[h]-q[h])/(u[h]-q[h]))*(u.t-q.t),y=f.t+g((v[L]-f[L])/(W[L]-f[L]))*(W.t-f.t);N>=0&&N<=1.001&&y>=0&&y<=1.001&&(e?s++:s.push({x:v.x,y:v.y,t1:m(N,1),t2:m(y,1)}))}}return s}function uM(M,p,e){M=b._path2curve(M),p=b._path2curve(p);for(var o,z,t,c,n,O,i,r,a,s,A=e?0:[],d=0,l=M.length;d<l;d++){var q=M[d];if(\"M\"==q[0])o=n=q[1],z=O=q[2];else{\"C\"==q[0]?(a=[o,z].concat(q.slice(1)),o=a[6],z=a[7]):(a=[o,z,o,z,n,O,n,O],o=n,z=O);for(var u=0,f=p.length;u<f;u++){var W=p[u];if(\"M\"==W[0])t=i=W[1],c=r=W[2];else{\"C\"==W[0]?(s=[t,c].concat(W.slice(1)),t=s[6],c=s[7]):(s=[t,c,t,c,i,r,i,r],t=i,c=r);var h=qM(a,s,e);if(e)A+=h;else{for(var R=0,m=h.length;R<m;R++)h[R].segment1=d,h[R].segment2=u,h[R].bez1=a,h[R].bez2=s;A=A.concat(h)}}}}}return A}b.findDotsAtSegment=function(M,b,p,e,o,z,t,c,n){var O=1-n,i=L(O,3),r=L(O,2),a=n*n,s=a*n,A=i*M+3*r*n*p+3*O*n*n*o+s*t,d=i*b+3*r*n*e+3*O*n*n*z+s*c,l=M+2*n*(p-M)+a*(o-2*p+M),q=b+2*n*(e-b)+a*(z-2*e+b),u=p+2*n*(o-p)+a*(t-2*o+p),f=e+2*n*(z-e)+a*(c-2*z+e),W=O*M+n*p,R=O*b+n*e,m=O*o+n*t,g=O*z+n*c,N=90-180*h.atan2(l-u,q-f)/v;return(l>u||q<f)&&(N+=180),{x:A,y:d,m:{x:l,y:q},n:{x:u,y:f},start:{x:W,y:R},end:{x:m,y:g},alpha:N}},b.bezierBBox=function(M,p,e,o,z,t,c,n){b.is(M,\"array\")||(M=[M,p,e,o,z,t,c,n]);var O=NM.apply(null,M);return{x:O.min.x,y:O.min.y,x2:O.max.x,y2:O.max.y,width:O.max.x-O.min.x,height:O.max.y-O.min.y}},b.isPointInsideBBox=function(M,b,p){return b>=M.x&&b<=M.x2&&p>=M.y&&p<=M.y2},b.isBBoxIntersect=function(M,p){var e=b.isPointInsideBBox;return e(p,M.x,M.y)||e(p,M.x2,M.y)||e(p,M.x,M.y2)||e(p,M.x2,M.y2)||e(M,p.x,p.y)||e(M,p.x2,p.y)||e(M,p.x,p.y2)||e(M,p.x2,p.y2)||(M.x<p.x2&&M.x>p.x||p.x<M.x2&&p.x>M.x)&&(M.y<p.y2&&M.y>p.y||p.y<M.y2&&p.y>M.y)},b.pathIntersection=function(M,b){return uM(M,b)},b.pathIntersectionNumber=function(M,b){return uM(M,b,1)},b.isPointInsidePath=function(M,p,e){var o=b.pathBBox(M);return b.isPointInsideBBox(o,p,e)&&uM(M,[[\"M\",p,e],[\"H\",o.x2+10]],1)%2==1},b._removedFactory=function(b){return function(){M(\"raphael.log\",null,\"Raphaël: you are calling to method “\"+b+\"” of removed object\",b)}};var fM=b.pathBBox=function(M){var b=sM(M);if(b.bbox)return bM(b.bbox);if(!M)return{x:0,y:0,width:0,height:0,x2:0,y2:0};for(var p,e=0,o=0,z=[],t=[],c=0,n=(M=yM(M)).length;c<n;c++)if(\"M\"==(p=M[c])[0])e=p[1],o=p[2],z.push(e),t.push(o);else{var O=NM(e,o,p[1],p[2],p[3],p[4],p[5],p[6]);z=z[a](O.min.x,O.max.x),t=t[a](O.min.y,O.max.y),e=p[5],o=p[6]}var i=m[r](0,z),s=m[r](0,t),A=R[r](0,z),d=R[r](0,t),l=A-i,q=d-s,u={x:i,y:s,x2:A,y2:d,width:l,height:q,cx:i+l/2,cy:s+q/2};return b.bbox=bM(u),u},WM=function(M){var p=bM(M);return p.toString=b._path2string,p},hM=b._pathToRelative=function(M){var p=sM(M);if(p.rel)return WM(p.rel);b.is(M,B)&&b.is(M&&M[0],B)||(M=b.parsePathString(M));var e=[],o=0,z=0,t=0,c=0,n=0;\"M\"==M[0][0]&&(t=o=M[0][1],c=z=M[0][2],n++,e.push([\"M\",o,z]));for(var O=n,i=M.length;O<i;O++){var r=e[O]=[],a=M[O];if(a[0]!=W.call(a[0]))switch(r[0]=W.call(a[0]),r[0]){case\"a\":r[1]=a[1],r[2]=a[2],r[3]=a[3],r[4]=a[4],r[5]=a[5],r[6]=+(a[6]-o).toFixed(3),r[7]=+(a[7]-z).toFixed(3);break;case\"v\":r[1]=+(a[1]-z).toFixed(3);break;case\"m\":t=a[1],c=a[2];default:for(var s=1,A=a.length;s<A;s++)r[s]=+(a[s]-(s%2?o:z)).toFixed(3)}else{r=e[O]=[],\"m\"==a[0]&&(t=a[1]+o,c=a[2]+z);for(var d=0,l=a.length;d<l;d++)e[O][d]=a[d]}var q=e[O].length;switch(e[O][0]){case\"z\":o=t,z=c;break;case\"h\":o+=+e[O][q-1];break;case\"v\":z+=+e[O][q-1];break;default:o+=+e[O][q-2],z+=+e[O][q-1]}}return e.toString=b._path2string,p.rel=WM(e),e},RM=b._pathToAbsolute=function(M){var p=sM(M);if(p.abs)return WM(p.abs);if(b.is(M,B)&&b.is(M&&M[0],B)||(M=b.parsePathString(M)),!M||!M.length)return[[\"M\",0,0]];var e=[],o=0,z=0,t=0,c=0,n=0;\"M\"==M[0][0]&&(t=o=+M[0][1],c=z=+M[0][2],n++,e[0]=[\"M\",o,z]);for(var O,i,r=3==M.length&&\"M\"==M[0][0]&&\"R\"==M[1][0].toUpperCase()&&\"Z\"==M[2][0].toUpperCase(),s=n,A=M.length;s<A;s++){if(e.push(O=[]),(i=M[s])[0]!=C.call(i[0]))switch(O[0]=C.call(i[0]),O[0]){case\"A\":O[1]=i[1],O[2]=i[2],O[3]=i[3],O[4]=i[4],O[5]=i[5],O[6]=+(i[6]+o),O[7]=+(i[7]+z);break;case\"V\":O[1]=+i[1]+z;break;case\"H\":O[1]=+i[1]+o;break;case\"R\":for(var d=[o,z][a](i.slice(1)),l=2,q=d.length;l<q;l++)d[l]=+d[l]+o,d[++l]=+d[l]+z;e.pop(),e=e[a](aM(d,r));break;case\"M\":t=+i[1]+o,c=+i[2]+z;default:for(l=1,q=i.length;l<q;l++)O[l]=+i[l]+(l%2?o:z)}else if(\"R\"==i[0])d=[o,z][a](i.slice(1)),e.pop(),e=e[a](aM(d,r)),O=[\"R\"][a](i.slice(-2));else for(var u=0,f=i.length;u<f;u++)O[u]=i[u];switch(O[0]){case\"Z\":o=t,z=c;break;case\"H\":o=O[1];break;case\"V\":z=O[1];break;case\"M\":t=O[O.length-2],c=O[O.length-1];default:o=O[O.length-2],z=O[O.length-1]}}return e.toString=b._path2string,p.abs=WM(e),e},mM=function(M,b,p,e){return[M,b,p,e,p,e]},gM=function(M,b,p,e,o,z){var t=1/3,c=2/3;return[t*M+c*p,t*b+c*e,t*o+c*p,t*z+c*e,o,z]},LM=function(M,b,p,e,o,z,t,c,n,O){var i,r=120*v/180,s=v/180*(+o||0),A=[],d=iM(function(M,b,p){return{x:M*h.cos(p)-b*h.sin(p),y:M*h.sin(p)+b*h.cos(p)}});if(O)y=O[0],B=O[1],L=O[2],N=O[3];else{M=(i=d(M,b,-s)).x,b=i.y,c=(i=d(c,n,-s)).x,n=i.y;h.cos(v/180*o),h.sin(v/180*o);var l=(M-c)/2,u=(b-n)/2,f=l*l/(p*p)+u*u/(e*e);f>1&&(p*=f=h.sqrt(f),e*=f);var W=p*p,R=e*e,m=(z==t?-1:1)*h.sqrt(g((W*R-W*u*u-R*l*l)/(W*u*u+R*l*l))),L=m*p*u/e+(M+c)/2,N=m*-e*l/p+(b+n)/2,y=h.asin(((b-N)/e).toFixed(9)),B=h.asin(((n-N)/e).toFixed(9));(y=M<L?v-y:y)<0&&(y=2*v+y),(B=c<L?v-B:B)<0&&(B=2*v+B),t&&y>B&&(y-=2*v),!t&&B>y&&(B-=2*v)}var X=B-y;if(g(X)>r){var w=B,x=c,T=n;B=y+r*(t&&B>y?1:-1),c=L+p*h.cos(B),n=N+e*h.sin(B),A=LM(c,n,p,e,o,0,t,x,T,[B,w,L,N])}X=B-y;var _=h.cos(y),k=h.sin(y),S=h.cos(B),C=h.sin(B),E=h.tan(X/4),D=4/3*p*E,P=4/3*e*E,I=[M,b],F=[M+D*k,b-P*_],j=[c+D*C,n-P*S],H=[c,n];if(F[0]=2*I[0]-F[0],F[1]=2*I[1]-F[1],O)return[F,j,H][a](A);for(var U=[],Y=0,G=(A=[F,j,H][a](A).join()[q](\",\")).length;Y<G;Y++)U[Y]=Y%2?d(A[Y-1],A[Y],s).y:d(A[Y],A[Y+1],s).x;return U},vM=function(M,b,p,e,o,z,t,c,n){var O=1-n;return{x:L(O,3)*M+3*L(O,2)*n*p+3*O*n*n*o+L(n,3)*t,y:L(O,3)*b+3*L(O,2)*n*e+3*O*n*n*z+L(n,3)*c}},NM=iM(function(M,b,p,e,o,z,t,c){var n,O=o-2*p+M-(t-2*o+p),i=2*(p-M)-2*(o-p),a=M-p,s=(-i+h.sqrt(i*i-4*O*a))/2/O,A=(-i-h.sqrt(i*i-4*O*a))/2/O,d=[b,c],l=[M,t];return g(s)>\"1e12\"&&(s=.5),g(A)>\"1e12\"&&(A=.5),s>0&&s<1&&(n=vM(M,b,p,e,o,z,t,c,s),l.push(n.x),d.push(n.y)),A>0&&A<1&&(n=vM(M,b,p,e,o,z,t,c,A),l.push(n.x),d.push(n.y)),O=z-2*e+b-(c-2*z+e),a=b-e,s=(-(i=2*(e-b)-2*(z-e))+h.sqrt(i*i-4*O*a))/2/O,A=(-i-h.sqrt(i*i-4*O*a))/2/O,g(s)>\"1e12\"&&(s=.5),g(A)>\"1e12\"&&(A=.5),s>0&&s<1&&(n=vM(M,b,p,e,o,z,t,c,s),l.push(n.x),d.push(n.y)),A>0&&A<1&&(n=vM(M,b,p,e,o,z,t,c,A),l.push(n.x),d.push(n.y)),{min:{x:m[r](0,l),y:m[r](0,d)},max:{x:R[r](0,l),y:R[r](0,d)}}}),yM=b._path2curve=iM(function(M,b){var p=!b&&sM(M);if(!b&&p.curve)return WM(p.curve);for(var e=RM(M),o=b&&RM(b),z={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},t={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},c=function(M,b,p){var e,o;if(!M)return[\"C\",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(M[0]in{T:1,Q:1})&&(b.qx=b.qy=null),M[0]){case\"M\":b.X=M[1],b.Y=M[2];break;case\"A\":M=[\"C\"][a](LM[r](0,[b.x,b.y][a](M.slice(1))));break;case\"S\":\"C\"==p||\"S\"==p?(e=2*b.x-b.bx,o=2*b.y-b.by):(e=b.x,o=b.y),M=[\"C\",e,o][a](M.slice(1));break;case\"T\":\"Q\"==p||\"T\"==p?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),M=[\"C\"][a](gM(b.x,b.y,b.qx,b.qy,M[1],M[2]));break;case\"Q\":b.qx=M[1],b.qy=M[2],M=[\"C\"][a](gM(b.x,b.y,M[1],M[2],M[3],M[4]));break;case\"L\":M=[\"C\"][a](mM(b.x,b.y,M[1],M[2]));break;case\"H\":M=[\"C\"][a](mM(b.x,b.y,M[1],b.y));break;case\"V\":M=[\"C\"][a](mM(b.x,b.y,b.x,M[1]));break;case\"Z\":M=[\"C\"][a](mM(b.x,b.y,b.X,b.Y))}return M},n=function(M,b){if(M[b].length>7){M[b].shift();for(var p=M[b];p.length;)i[b]=\"A\",o&&(s[b]=\"A\"),M.splice(b++,0,[\"C\"][a](p.splice(0,6)));M.splice(b,1),q=R(e.length,o&&o.length||0)}},O=function(M,b,p,z,t){M&&b&&\"M\"==M[t][0]&&\"M\"!=b[t][0]&&(b.splice(t,0,[\"M\",z.x,z.y]),p.bx=0,p.by=0,p.x=M[t][1],p.y=M[t][2],q=R(e.length,o&&o.length||0))},i=[],s=[],A=\"\",d=\"\",l=0,q=R(e.length,o&&o.length||0);l<q;l++){e[l]&&(A=e[l][0]),\"C\"!=A&&(i[l]=A,l&&(d=i[l-1])),e[l]=c(e[l],z,d),\"A\"!=i[l]&&\"C\"==A&&(i[l]=\"C\"),n(e,l),o&&(o[l]&&(A=o[l][0]),\"C\"!=A&&(s[l]=A,l&&(d=s[l-1])),o[l]=c(o[l],t,d),\"A\"!=s[l]&&\"C\"==A&&(s[l]=\"C\"),n(o,l)),O(e,o,z,t,l),O(o,e,t,z,l);var u=e[l],f=o&&o[l],W=u.length,h=o&&f.length;z.x=u[W-2],z.y=u[W-1],z.bx=k(u[W-4])||z.x,z.by=k(u[W-3])||z.y,t.bx=o&&(k(f[h-4])||t.x),t.by=o&&(k(f[h-3])||t.y),t.x=o&&f[h-2],t.y=o&&f[h-1]}return o||(p.curve=WM(e)),o?[e,o]:e},null,WM),BM=(b._parseDots=iM(function(M){for(var p=[],e=0,o=M.length;e<o;e++){var z={},t=M[e].match(/^([^:]*):?([\\d\\.]*)/);if(z.color=b.getRGB(t[1]),z.color.error)return null;z.opacity=z.color.opacity,z.color=z.color.hex,t[2]&&(z.offset=t[2]+\"%\"),p.push(z)}for(e=1,o=p.length-1;e<o;e++)if(!p[e].offset){for(var c=k(p[e-1].offset||0),n=0,O=e+1;O<o;O++)if(p[O].offset){n=p[O].offset;break}n||(n=100,O=o);for(var i=((n=k(n))-c)/(O-e+1);e<O;e++)c+=i,p[e].offset=c+\"%\"}return p}),b._tear=function(M,b){M==b.top&&(b.top=M.prev),M==b.bottom&&(b.bottom=M.next),M.next&&(M.next.prev=M.prev),M.prev&&(M.prev.next=M.next)}),XM=(b._tofront=function(M,b){b.top!==M&&(BM(M,b),M.next=null,M.prev=b.top,b.top.next=M,b.top=M)},b._toback=function(M,b){b.bottom!==M&&(BM(M,b),M.next=b.bottom,M.prev=null,b.bottom.prev=M,b.bottom=M)},b._insertafter=function(M,b,p){BM(M,p),b==p.top&&(p.top=M),b.next&&(b.next.prev=M),M.next=b.next,M.prev=b,b.next=M},b._insertbefore=function(M,b,p){BM(M,p),b==p.bottom&&(p.bottom=M),b.prev&&(b.prev.next=M),M.prev=b.prev,b.prev=M,M.next=b},b.toMatrix=function(M,b){var p=fM(M),e={_:{transform:A},getBBox:function(){return p}};return wM(e,b),e.matrix}),wM=(b.transformPath=function(M,b){return J(M,XM(M,b))},b._extractTransform=function(M,p){if(null==p)return M._.transform;p=l(p).replace(/\\.{3}|\\u2026/g,M._.transform||A);var e,o,z=b.parseTransformString(p),t=0,c=1,n=1,O=M._,i=new _M;if(O.transform=z||[],z)for(var r=0,a=z.length;r<a;r++){var s,d,q,u,f,W=z[r],h=W.length,R=l(W[0]).toLowerCase(),m=W[0]!=R,g=m?i.invert():0;\"t\"==R&&3==h?m?(s=g.x(0,0),d=g.y(0,0),q=g.x(W[1],W[2]),u=g.y(W[1],W[2]),i.translate(q-s,u-d)):i.translate(W[1],W[2]):\"r\"==R?2==h?(f=f||M.getBBox(1),i.rotate(W[1],f.x+f.width/2,f.y+f.height/2),t+=W[1]):4==h&&(m?(q=g.x(W[2],W[3]),u=g.y(W[2],W[3]),i.rotate(W[1],q,u)):i.rotate(W[1],W[2],W[3]),t+=W[1]):\"s\"==R?2==h||3==h?(f=f||M.getBBox(1),i.scale(W[1],W[h-1],f.x+f.width/2,f.y+f.height/2),c*=W[1],n*=W[h-1]):5==h&&(m?(q=g.x(W[3],W[4]),u=g.y(W[3],W[4]),i.scale(W[1],W[2],q,u)):i.scale(W[1],W[2],W[3],W[4]),c*=W[1],n*=W[2]):\"m\"==R&&7==h&&i.add(W[1],W[2],W[3],W[4],W[5],W[6]),O.dirtyT=1,M.matrix=i}M.matrix=i,O.sx=c,O.sy=n,O.deg=t,O.dx=e=i.e,O.dy=o=i.f,1==c&&1==n&&!t&&O.bbox?(O.bbox.x+=+e,O.bbox.y+=+o):O.dirtyT=1}),xM=function(M){var b=M[0];switch(b.toLowerCase()){case\"t\":return[b,0,0];case\"m\":return[b,1,0,0,1,0,0];case\"r\":return 4==M.length?[b,0,M[2],M[3]]:[b,0];case\"s\":return 5==M.length?[b,1,1,M[3],M[4]]:3==M.length?[b,1,1]:[b,1]}},TM=b._equaliseTransform=function(M,p){p=l(p).replace(/\\.{3}|\\u2026/g,M),M=b.parseTransformString(M)||[],p=b.parseTransformString(p)||[];for(var e,o,z,t,c=R(M.length,p.length),n=[],O=[],i=0;i<c;i++){if(z=M[i]||xM(p[i]),t=p[i]||xM(z),z[0]!=t[0]||\"r\"==z[0].toLowerCase()&&(z[2]!=t[2]||z[3]!=t[3])||\"s\"==z[0].toLowerCase()&&(z[3]!=t[3]||z[4]!=t[4]))return;for(n[i]=[],O[i]=[],e=0,o=R(z.length,t.length);e<o;e++)e in z&&(n[i][e]=z[e]),e in t&&(O[i][e]=t[e])}return{from:n,to:O}};function _M(M,b,p,e,o,z){null!=M?(this.a=+M,this.b=+b,this.c=+p,this.d=+e,this.e=+o,this.f=+z):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}b._getContainer=function(M,p,e,o){var z;if(null!=(z=null!=o||b.is(M,\"object\")?M:n.doc.getElementById(M)))return z.tagName?null==p?{container:z,width:z.style.pixelWidth||z.offsetWidth,height:z.style.pixelHeight||z.offsetHeight}:{container:z,width:p,height:e}:{container:1,x:M,y:p,width:e,height:o}},b.pathToRelative=hM,b._engine={},b.path2curve=yM,b.matrix=function(M,b,p,e,o,z){return new _M(M,b,p,e,o,z)},function(M){function p(M){return M[0]*M[0]+M[1]*M[1]}function e(M){var b=h.sqrt(p(M));M[0]&&(M[0]/=b),M[1]&&(M[1]/=b)}M.add=function(M,b,p,e,o,z){var t,c,n,O,i=[[],[],[]],r=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],a=[[M,p,o],[b,e,z],[0,0,1]];for(M&&M instanceof _M&&(a=[[M.a,M.c,M.e],[M.b,M.d,M.f],[0,0,1]]),t=0;t<3;t++)for(c=0;c<3;c++){for(O=0,n=0;n<3;n++)O+=r[t][n]*a[n][c];i[t][c]=O}this.a=i[0][0],this.b=i[1][0],this.c=i[0][1],this.d=i[1][1],this.e=i[0][2],this.f=i[1][2]},M.invert=function(){var M=this,b=M.a*M.d-M.b*M.c;return new _M(M.d/b,-M.b/b,-M.c/b,M.a/b,(M.c*M.f-M.d*M.e)/b,(M.b*M.e-M.a*M.f)/b)},M.clone=function(){return new _M(this.a,this.b,this.c,this.d,this.e,this.f)},M.translate=function(M,b){this.add(1,0,0,1,M,b)},M.scale=function(M,b,p,e){null==b&&(b=M),(p||e)&&this.add(1,0,0,1,p,e),this.add(M,0,0,b,0,0),(p||e)&&this.add(1,0,0,1,-p,-e)},M.rotate=function(M,p,e){M=b.rad(M),p=p||0,e=e||0;var o=+h.cos(M).toFixed(9),z=+h.sin(M).toFixed(9);this.add(o,z,-z,o,p,e),this.add(1,0,0,1,-p,-e)},M.x=function(M,b){return M*this.a+b*this.c+this.e},M.y=function(M,b){return M*this.b+b*this.d+this.f},M.get=function(M){return+this[l.fromCharCode(97+M)].toFixed(4)},M.toString=function(){return b.svg?\"matrix(\"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+\")\":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},M.toFilter=function(){return\"progid:DXImageTransform.Microsoft.Matrix(M11=\"+this.get(0)+\", M12=\"+this.get(2)+\", M21=\"+this.get(1)+\", M22=\"+this.get(3)+\", Dx=\"+this.get(4)+\", Dy=\"+this.get(5)+\", sizingmethod='auto expand')\"},M.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},M.split=function(){var M={};M.dx=this.e,M.dy=this.f;var o=[[this.a,this.c],[this.b,this.d]];M.scalex=h.sqrt(p(o[0])),e(o[0]),M.shear=o[0][0]*o[1][0]+o[0][1]*o[1][1],o[1]=[o[1][0]-o[0][0]*M.shear,o[1][1]-o[0][1]*M.shear],M.scaley=h.sqrt(p(o[1])),e(o[1]),M.shear/=M.scaley;var z=-o[0][1],t=o[1][1];return t<0?(M.rotate=b.deg(h.acos(t)),z<0&&(M.rotate=360-M.rotate)):M.rotate=b.deg(h.asin(z)),M.isSimple=!(+M.shear.toFixed(9)||M.scalex.toFixed(9)!=M.scaley.toFixed(9)&&M.rotate),M.isSuperSimple=!+M.shear.toFixed(9)&&M.scalex.toFixed(9)==M.scaley.toFixed(9)&&!M.rotate,M.noRotation=!+M.shear.toFixed(9)&&!M.rotate,M},M.toTransformString=function(M){var b=M||this[q]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?\"t\"+[b.dx,b.dy]:A)+(1!=b.scalex||1!=b.scaley?\"s\"+[b.scalex,b.scaley,0,0]:A)+(b.rotate?\"r\"+[b.rotate,0,0]:A)):\"m\"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(_M.prototype);for(var kM=function(){this.returnValue=!1},SM=function(){return this.originalEvent.preventDefault()},CM=function(){this.cancelBubble=!0},EM=function(){return this.originalEvent.stopPropagation()},DM=function(M){var b=n.doc.documentElement.scrollTop||n.doc.body.scrollTop,p=n.doc.documentElement.scrollLeft||n.doc.body.scrollLeft;return{x:M.clientX+p,y:M.clientY+b}},PM=n.doc.addEventListener?function(M,b,p,e){var o=function(M){var b=DM(M);return p.call(e,M,b.x,b.y)};if(M.addEventListener(b,o,!1),s&&f[b]){var z=function(b){for(var o=DM(b),z=b,t=0,c=b.targetTouches&&b.targetTouches.length;t<c;t++)if(b.targetTouches[t].target==M){(b=b.targetTouches[t]).originalEvent=z,b.preventDefault=SM,b.stopPropagation=EM;break}return p.call(e,b,o.x,o.y)};M.addEventListener(f[b],z,!1)}return function(){return M.removeEventListener(b,o,!1),s&&f[b]&&M.removeEventListener(f[b],z,!1),!0}}:n.doc.attachEvent?function(M,b,p,e){var o=function(M){M=M||n.win.event;var b=n.doc.documentElement.scrollTop||n.doc.body.scrollTop,o=n.doc.documentElement.scrollLeft||n.doc.body.scrollLeft,z=M.clientX+o,t=M.clientY+b;return M.preventDefault=M.preventDefault||kM,M.stopPropagation=M.stopPropagation||CM,p.call(e,M,z,t)};return M.attachEvent(\"on\"+b,o),function(){return M.detachEvent(\"on\"+b,o),!0}}:void 0,IM=[],FM=function(b){for(var p,e=b.clientX,o=b.clientY,z=n.doc.documentElement.scrollTop||n.doc.body.scrollTop,t=n.doc.documentElement.scrollLeft||n.doc.body.scrollLeft,c=IM.length;c--;){if(p=IM[c],s&&b.touches){for(var O,i=b.touches.length;i--;)if((O=b.touches[i]).identifier==p.el._drag.id){e=O.clientX,o=O.clientY,(b.originalEvent?b.originalEvent:b).preventDefault();break}}else b.preventDefault();var r,a=p.el.node,A=a.nextSibling,d=a.parentNode,l=a.style.display;n.win.opera&&d.removeChild(a),a.style.display=\"none\",r=p.el.paper.getElementByPoint(e,o),a.style.display=l,n.win.opera&&(A?d.insertBefore(a,A):d.appendChild(a)),r&&M(\"raphael.drag.over.\"+p.el.id,p.el,r),e+=t,o+=z,M(\"raphael.drag.move.\"+p.el.id,p.move_scope||p.el,e-p.el._drag.x,o-p.el._drag.y,e,o,b)}},jM=function(p){b.unmousemove(FM).unmouseup(jM);for(var e,o=IM.length;o--;)(e=IM[o]).el._drag={},M(\"raphael.drag.end.\"+e.el.id,e.end_scope||e.start_scope||e.move_scope||e.el,p);IM=[]},HM=b.el={},UM=u.length;UM--;)(function(M){b[M]=HM[M]=function(p,e){return b.is(p,\"function\")&&(this.events=this.events||[],this.events.push({name:M,f:p,unbind:PM(this.shape||this.node||n.doc,M,p,e||this)})),this},b[\"un\"+M]=HM[\"un\"+M]=function(p){for(var e=this.events||[],o=e.length;o--;)e[o].name!=M||!b.is(p,\"undefined\")&&e[o].f!=p||(e[o].unbind(),e.splice(o,1),!e.length&&delete this.events);return this}})(u[UM]);HM.data=function(p,e){var o=Y[this.id]=Y[this.id]||{};if(0==arguments.length)return o;if(1==arguments.length){if(b.is(p,\"object\")){for(var z in p)p[c](z)&&this.data(z,p[z]);return this}return M(\"raphael.data.get.\"+this.id,this,o[p],p),o[p]}return o[p]=e,M(\"raphael.data.set.\"+this.id,this,e,p),this},HM.removeData=function(M){return null==M?Y[this.id]={}:Y[this.id]&&delete Y[this.id][M],this},HM.getData=function(){return bM(Y[this.id]||{})},HM.hover=function(M,b,p,e){return this.mouseover(M,p).mouseout(b,e||p)},HM.unhover=function(M,b){return this.unmouseover(M).unmouseout(b)};var YM=[];HM.drag=function(p,e,o,z,t,c){function O(O){(O.originalEvent||O).preventDefault();var i=O.clientX,r=O.clientY,a=n.doc.documentElement.scrollTop||n.doc.body.scrollTop,A=n.doc.documentElement.scrollLeft||n.doc.body.scrollLeft;if(this._drag.id=O.identifier,s&&O.touches)for(var d,l=O.touches.length;l--;)if(d=O.touches[l],this._drag.id=d.identifier,d.identifier==this._drag.id){i=d.clientX,r=d.clientY;break}this._drag.x=i+A,this._drag.y=r+a,!IM.length&&b.mousemove(FM).mouseup(jM),IM.push({el:this,move_scope:z,start_scope:t,end_scope:c}),e&&M.on(\"raphael.drag.start.\"+this.id,e),p&&M.on(\"raphael.drag.move.\"+this.id,p),o&&M.on(\"raphael.drag.end.\"+this.id,o),M(\"raphael.drag.start.\"+this.id,t||z||this,O.clientX+A,O.clientY+a,O)}return this._drag={},YM.push({el:this,start:O}),this.mousedown(O),this},HM.onDragOver=function(b){b?M.on(\"raphael.drag.over.\"+this.id,b):M.unbind(\"raphael.drag.over.\"+this.id)},HM.undrag=function(){for(var p=YM.length;p--;)YM[p].el==this&&(this.unmousedown(YM[p].start),YM.splice(p,1),M.unbind(\"raphael.drag.*.\"+this.id));!YM.length&&b.unmousemove(FM).unmouseup(jM),IM=[]},e.circle=function(M,p,e){var o=b._engine.circle(this,M||0,p||0,e||0);return this.__set__&&this.__set__.push(o),o},e.rect=function(M,p,e,o,z){var t=b._engine.rect(this,M||0,p||0,e||0,o||0,z||0);return this.__set__&&this.__set__.push(t),t},e.ellipse=function(M,p,e,o){var z=b._engine.ellipse(this,M||0,p||0,e||0,o||0);return this.__set__&&this.__set__.push(z),z},e.path=function(M){M&&!b.is(M,y)&&!b.is(M[0],B)&&(M+=A);var p=b._engine.path(b.format[r](b,arguments),this);return this.__set__&&this.__set__.push(p),p},e.image=function(M,p,e,o,z){var t=b._engine.image(this,M||\"about:blank\",p||0,e||0,o||0,z||0);return this.__set__&&this.__set__.push(t),t},e.text=function(M,p,e){var o=b._engine.text(this,M||0,p||0,l(e));return this.__set__&&this.__set__.push(o),o},e.set=function(M){!b.is(M,\"array\")&&(M=Array.prototype.splice.call(arguments,0,arguments.length));var p=new ib(M);return this.__set__&&this.__set__.push(p),p.paper=this,p.type=\"set\",p},e.setStart=function(M){this.__set__=M||this.set()},e.setFinish=function(M){var b=this.__set__;return delete this.__set__,b},e.getSize=function(){var M=this.canvas.parentNode;return{width:M.offsetWidth,height:M.offsetHeight}},e.setSize=function(M,p){return b._engine.setSize.call(this,M,p)},e.setViewBox=function(M,p,e,o,z){return b._engine.setViewBox.call(this,M,p,e,o,z)},e.top=e.bottom=null,e.raphael=b;function GM(){return this.x+d+this.y+d+this.width+\" × \"+this.height}e.getElementByPoint=function(M,b){var p,e,o,z,t,c,O,i=this,r=i.canvas,a=n.doc.elementFromPoint(M,b);if(n.win.opera&&\"svg\"==a.tagName){var s=(e=(p=r).getBoundingClientRect(),o=p.ownerDocument,z=o.body,t=o.documentElement,c=t.clientTop||z.clientTop||0,O=t.clientLeft||z.clientLeft||0,{y:e.top+(n.win.pageYOffset||t.scrollTop||z.scrollTop)-c,x:e.left+(n.win.pageXOffset||t.scrollLeft||z.scrollLeft)-O}),A=r.createSVGRect();A.x=M-s.x,A.y=b-s.y,A.width=A.height=1;var d=r.getIntersectionList(A,null);d.length&&(a=d[d.length-1])}if(!a)return null;for(;a.parentNode&&a!=r.parentNode&&!a.raphael;)a=a.parentNode;return a==i.canvas.parentNode&&(a=r),a=a&&a.raphael?i.getById(a.raphaelid):null},e.getElementsByBBox=function(M){var p=this.set();return this.forEach(function(e){b.isBBoxIntersect(e.getBBox(),M)&&p.push(e)}),p},e.getById=function(M){for(var b=this.bottom;b;){if(b.id==M)return b;b=b.next}return null},e.forEach=function(M,b){for(var p=this.bottom;p;){if(!1===M.call(b,p))return this;p=p.next}return this},e.getElementsByPoint=function(M,b){var p=this.set();return this.forEach(function(e){e.isPointInside(M,b)&&p.push(e)}),p},HM.isPointInside=function(M,p){var e=this.realPath=Q[this.type](this);return this.attr(\"transform\")&&this.attr(\"transform\").length&&(e=b.transformPath(e,this.attr(\"transform\"))),b.isPointInsidePath(e,M,p)},HM.getBBox=function(M){if(this.removed)return{};var b=this._;return M?(!b.dirty&&b.bboxwt||(this.realPath=Q[this.type](this),b.bboxwt=fM(this.realPath),b.bboxwt.toString=GM,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&(!b.dirty&&this.realPath||(b.bboxwt=0,this.realPath=Q[this.type](this)),b.bbox=fM(J(this.realPath,this.matrix)),b.bbox.toString=GM,b.dirty=b.dirtyT=0),b.bbox)},HM.clone=function(){if(this.removed)return null;var M=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(M),M},HM.glow=function(M){if(\"text\"==this.type)return null;var b={width:((M=M||{}).width||10)+(+this.attr(\"stroke-width\")||1),fill:M.fill||!1,opacity:null==M.opacity?.5:M.opacity,offsetx:M.offsetx||0,offsety:M.offsety||0,color:M.color||\"#000\"},p=b.width/2,e=this.paper,o=e.set(),z=this.realPath||Q[this.type](this);z=this.matrix?J(z,this.matrix):z;for(var t=1;t<p+1;t++)o.push(e.path(z).attr({stroke:b.color,fill:b.fill?b.color:\"none\",\"stroke-linejoin\":\"round\",\"stroke-linecap\":\"round\",\"stroke-width\":+(b.width/p*t).toFixed(3),opacity:+(b.opacity/p).toFixed(3)}));return o.insertBefore(this).translate(b.offsetx,b.offsety)};var VM=function(M,p,e,o,z,t,c,n,O){return null==O?dM(M,p,e,o,z,t,c,n):b.findDotsAtSegment(M,p,e,o,z,t,c,n,function(M,b,p,e,o,z,t,c,n){if(!(n<0||dM(M,b,p,e,o,z,t,c)<n)){var O,i=.5,r=1-i;for(O=dM(M,b,p,e,o,z,t,c,r);g(O-n)>.01;)O=dM(M,b,p,e,o,z,t,c,r+=(O<n?1:-1)*(i/=2));return r}}(M,p,e,o,z,t,c,n,O))},$M=function(M,p){return function(e,o,z){for(var t,c,n,O,i,r=\"\",a={},s=0,A=0,d=(e=yM(e)).length;A<d;A++){if(\"M\"==(n=e[A])[0])t=+n[1],c=+n[2];else{if(s+(O=VM(t,c,n[1],n[2],n[3],n[4],n[5],n[6]))>o){if(p&&!a.start){if(r+=[\"C\"+(i=VM(t,c,n[1],n[2],n[3],n[4],n[5],n[6],o-s)).start.x,i.start.y,i.m.x,i.m.y,i.x,i.y],z)return r;a.start=r,r=[\"M\"+i.x,i.y+\"C\"+i.n.x,i.n.y,i.end.x,i.end.y,n[5],n[6]].join(),s+=O,t=+n[5],c=+n[6];continue}if(!M&&!p)return{x:(i=VM(t,c,n[1],n[2],n[3],n[4],n[5],n[6],o-s)).x,y:i.y,alpha:i.alpha}}s+=O,t=+n[5],c=+n[6]}r+=n.shift()+n}return a.end=r,(i=M?s:p?a:b.findDotsAtSegment(t,c,n[0],n[1],n[2],n[3],n[4],n[5],1)).alpha&&(i={x:i.x,y:i.y,alpha:i.alpha}),i}},KM=$M(1),QM=$M(),JM=$M(0,1);b.getTotalLength=KM,b.getPointAtLength=QM,b.getSubpath=function(M,b,p){if(this.getTotalLength(M)-p<1e-6)return JM(M,b).end;var e=JM(M,p,1);return b?JM(e,b).end:e},HM.getTotalLength=function(){var M=this.getPath();if(M)return this.node.getTotalLength?this.node.getTotalLength():KM(M)},HM.getPointAtLength=function(M){var b=this.getPath();if(b)return QM(b,M)},HM.getPath=function(){var M,p=b._getPath[this.type];if(\"text\"!=this.type&&\"set\"!=this.type)return p&&(M=p(this)),M},HM.getSubpath=function(M,p){var e=this.getPath();if(e)return b.getSubpath(e,M,p)};var ZM=b.easing_formulas={linear:function(M){return M},\"<\":function(M){return L(M,1.7)},\">\":function(M){return L(M,.48)},\"<>\":function(M){var b=.48-M/1.04,p=h.sqrt(.1734+b*b),e=p-b,o=-p-b,z=L(g(e),1/3)*(e<0?-1:1)+L(g(o),1/3)*(o<0?-1:1)+.5;return 3*(1-z)*z*z+z*z*z},backIn:function(M){var b=1.70158;return M*M*((b+1)*M-b)},backOut:function(M){var b=1.70158;return(M-=1)*M*((b+1)*M+b)+1},elastic:function(M){return M==!!M?M:L(2,-10*M)*h.sin(2*v*(M-.075)/.3)+1},bounce:function(M){var b=7.5625,p=2.75;return M<1/p?b*M*M:M<2/p?b*(M-=1.5/p)*M+.75:M<2.5/p?b*(M-=2.25/p)*M+.9375:b*(M-=2.625/p)*M+.984375}};ZM.easeIn=ZM[\"ease-in\"]=ZM[\"<\"],ZM.easeOut=ZM[\"ease-out\"]=ZM[\">\"],ZM.easeInOut=ZM[\"ease-in-out\"]=ZM[\"<>\"],ZM[\"back-in\"]=ZM.backIn,ZM[\"back-out\"]=ZM.backOut;var Mb=[],bb=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(M){setTimeout(M,16)},pb=function(){for(var p=+new Date,e=0;e<Mb.length;e++){var o=Mb[e];if(!o.el.removed&&!o.paused){var z,t,n=p-o.start,O=o.ms,i=o.easing,r=o.from,s=o.diff,A=o.to,l=(o.t,o.el),q={},u={};if(o.initstatus?(n=(o.initstatus*o.anim.top-o.prev)/(o.percent-o.prev)*O,o.status=o.initstatus,delete o.initstatus,o.stop&&Mb.splice(e--,1)):o.status=(o.prev+(o.percent-o.prev)*(n/O))/o.anim.top,!(n<0))if(n<O){var f=i(n/O);for(var W in r)if(r[c](W)){switch(D[W]){case N:z=+r[W]+f*O*s[W];break;case\"colour\":z=\"rgb(\"+[eb(_(r[W].r+f*O*s[W].r)),eb(_(r[W].g+f*O*s[W].g)),eb(_(r[W].b+f*O*s[W].b))].join(\",\")+\")\";break;case\"path\":z=[];for(var h=0,R=r[W].length;h<R;h++){z[h]=[r[W][h][0]];for(var m=1,g=r[W][h].length;m<g;m++)z[h][m]=+r[W][h][m]+f*O*s[W][h][m];z[h]=z[h].join(d)}z=z.join(d);break;case\"transform\":if(s[W].real)for(z=[],h=0,R=r[W].length;h<R;h++)for(z[h]=[r[W][h][0]],m=1,g=r[W][h].length;m<g;m++)z[h][m]=r[W][h][m]+f*O*s[W][h][m];else{var L=function(M){return+r[W][M]+f*O*s[W][M]};z=[[\"m\",L(0),L(1),L(2),L(3),L(4),L(5)]]}break;case\"csv\":if(\"clip-rect\"==W)for(z=[],h=4;h--;)z[h]=+r[W][h]+f*O*s[W][h];break;default:var v=[][a](r[W]);for(z=[],h=l.paper.customAttributes[W].length;h--;)z[h]=+v[h]+f*O*s[W][h]}q[W]=z}l.attr(q),function(b,p,e){setTimeout(function(){M(\"raphael.anim.frame.\"+b,p,e)})}(l.id,l,o.anim)}else{if(function(p,e,o){setTimeout(function(){M(\"raphael.anim.frame.\"+e.id,e,o),M(\"raphael.anim.finish.\"+e.id,e,o),b.is(p,\"function\")&&p.call(e)})}(o.callback,l,o.anim),l.attr(A),Mb.splice(e--,1),o.repeat>1&&!o.next){for(t in A)A[c](t)&&(u[t]=o.totalOrigin[t]);o.el.attr(u),tb(o.anim,o.el,o.anim.percents[0],null,o.totalOrigin,o.repeat-1)}o.next&&!o.stop&&tb(o.anim,o.el,o.next,null,o.totalOrigin,o.repeat)}}}Mb.length&&bb(pb)},eb=function(M){return M>255?255:M<0?0:M};function ob(M,b,p,e,o,z){var t=3*b,c=3*(e-b)-t,n=1-t-c,O=3*p,i=3*(o-p)-O,r=1-O-i;function a(M){return((n*M+c)*M+t)*M}return function(M,b){var p=function(M,b){var p,e,o,z,O,i;for(o=M,i=0;i<8;i++){if(z=a(o)-M,g(z)<b)return o;if(g(O=(3*n*o+2*c)*o+t)<1e-6)break;o-=z/O}if(e=1,o=M,o<(p=0))return p;if(o>e)return e;for(;p<e;){if(z=a(o),g(z-M)<b)return o;M>z?p=o:e=o,o=(e-p)/2+p}return o}(M,b);return((r*p+i)*p+O)*p}(M,1/(200*z))}function zb(M,b){var p=[],e={};if(this.ms=b,this.times=1,M){for(var o in M)M[c](o)&&(e[k(o)]=M[o],p.push(k(o)));p.sort(G)}this.anim=e,this.top=p[p.length-1],this.percents=p}function tb(p,e,z,t,n,O){z=k(z);var i,r,s,A,d,u,f=p.ms,W={},h={},R={};if(t)for(g=0,L=Mb.length;g<L;g++){var m=Mb[g];if(m.el.id==e.id&&m.anim==p){m.percent!=z?(Mb.splice(g,1),s=1):r=m,e.attr(m.totalOrigin);break}}else t=+h;for(var g=0,L=p.percents.length;g<L;g++){if(p.percents[g]==z||p.percents[g]>t*p.top){z=p.percents[g],d=p.percents[g-1]||0,f=f/p.top*(z-d),A=p.percents[g+1],i=p.anim[z];break}t&&e.attr(p.anim[p.percents[g]])}if(i){if(r)r.initstatus=t,r.start=new Date-r.ms*t;else{for(var v in i)if(i[c](v)&&(D[c](v)||e.paper.customAttributes[c](v)))switch(W[v]=e.attr(v),null==W[v]&&(W[v]=E[v]),h[v]=i[v],D[v]){case N:R[v]=(h[v]-W[v])/f;break;case\"colour\":W[v]=b.getRGB(W[v]);var y=b.getRGB(h[v]);R[v]={r:(y.r-W[v].r)/f,g:(y.g-W[v].g)/f,b:(y.b-W[v].b)/f};break;case\"path\":var B=yM(W[v],h[v]),X=B[1];for(W[v]=B[0],R[v]=[],g=0,L=W[v].length;g<L;g++){R[v][g]=[0];for(var w=1,x=W[v][g].length;w<x;w++)R[v][g][w]=(X[g][w]-W[v][g][w])/f}break;case\"transform\":var _=e._,S=TM(_[v],h[v]);if(S)for(W[v]=S.from,h[v]=S.to,R[v]=[],R[v].real=!0,g=0,L=W[v].length;g<L;g++)for(R[v][g]=[W[v][g][0]],w=1,x=W[v][g].length;w<x;w++)R[v][g][w]=(h[v][g][w]-W[v][g][w])/f;else{var C=e.matrix||new _M,P={_:{transform:_.transform},getBBox:function(){return e.getBBox(1)}};W[v]=[C.a,C.b,C.c,C.d,C.e,C.f],wM(P,h[v]),h[v]=P._.transform,R[v]=[(P.matrix.a-C.a)/f,(P.matrix.b-C.b)/f,(P.matrix.c-C.c)/f,(P.matrix.d-C.d)/f,(P.matrix.e-C.e)/f,(P.matrix.f-C.f)/f]}break;case\"csv\":var I=l(i[v])[q](o),F=l(W[v])[q](o);if(\"clip-rect\"==v)for(W[v]=F,R[v]=[],g=F.length;g--;)R[v][g]=(I[g]-W[v][g])/f;h[v]=I;break;default:for(I=[][a](i[v]),F=[][a](W[v]),R[v]=[],g=e.paper.customAttributes[v].length;g--;)R[v][g]=((I[g]||0)-(F[g]||0))/f}var j=i.easing,H=b.easing_formulas[j];if(!H)if((H=l(j).match(T))&&5==H.length){var U=H;H=function(M){return ob(M,+U[1],+U[2],+U[3],+U[4],f)}}else H=V;if(m={anim:p,percent:z,timestamp:u=i.start||p.start||+new Date,start:u+(p.del||0),status:0,initstatus:t||0,stop:!1,ms:f,easing:H,from:W,diff:R,to:h,el:e,callback:i.callback,prev:d,next:A,repeat:O||p.times,origin:e.attr(),totalOrigin:n},Mb.push(m),t&&!r&&!s&&(m.stop=!0,m.start=new Date-f*t,1==Mb.length))return pb();s&&(m.start=new Date-m.ms*t),1==Mb.length&&bb(pb)}M(\"raphael.anim.start.\"+e.id,e,p)}}function cb(M){for(var b=0;b<Mb.length;b++)Mb[b].el.paper==M&&Mb.splice(b--,1)}HM.animateWith=function(M,p,e,o,z,t){var c=this;if(c.removed)return t&&t.call(c),c;var n=e instanceof zb?e:b.animation(e,o,z,t);tb(n,c,n.percents[0],null,c.attr());for(var O=0,i=Mb.length;O<i;O++)if(Mb[O].anim==p&&Mb[O].el==M){Mb[i-1].start=Mb[O].start;break}return c},HM.onAnimation=function(b){return b?M.on(\"raphael.anim.frame.\"+this.id,b):M.unbind(\"raphael.anim.frame.\"+this.id),this},zb.prototype.delay=function(M){var b=new zb(this.anim,this.ms);return b.times=this.times,b.del=+M||0,b},zb.prototype.repeat=function(M){var b=new zb(this.anim,this.ms);return b.del=this.del,b.times=h.floor(R(M,0))||1,b},b.animation=function(M,p,e,o){if(M instanceof zb)return M;!b.is(e,\"function\")&&e||(o=o||e||null,e=null),M=Object(M),p=+p||0;var z,t,n={};for(t in M)M[c](t)&&k(t)!=t&&k(t)+\"%\"!=t&&(z=!0,n[t]=M[t]);if(z)return e&&(n.easing=e),o&&(n.callback=o),new zb({100:n},p);if(o){var O=0;for(var i in M){var r=S(i);M[c](i)&&r>O&&(O=r)}!M[O+=\"%\"].callback&&(M[O].callback=o)}return new zb(M,p)},HM.animate=function(M,p,e,o){var z=this;if(z.removed)return o&&o.call(z),z;var t=M instanceof zb?M:b.animation(M,p,e,o);return tb(t,z,t.percents[0],null,z.attr()),z},HM.setTime=function(M,b){return M&&null!=b&&this.status(M,m(b,M.ms)/M.ms),this},HM.status=function(M,b){var p,e,o=[],z=0;if(null!=b)return tb(M,this,-1,m(b,1)),this;for(p=Mb.length;z<p;z++)if((e=Mb[z]).el.id==this.id&&(!M||e.anim==M)){if(M)return e.status;o.push({anim:e.anim,status:e.status})}return M?0:o},HM.pause=function(b){for(var p=0;p<Mb.length;p++)Mb[p].el.id!=this.id||b&&Mb[p].anim!=b||!1!==M(\"raphael.anim.pause.\"+this.id,this,Mb[p].anim)&&(Mb[p].paused=!0);return this},HM.resume=function(b){for(var p=0;p<Mb.length;p++)if(Mb[p].el.id==this.id&&(!b||Mb[p].anim==b)){var e=Mb[p];!1!==M(\"raphael.anim.resume.\"+this.id,this,e.anim)&&(delete e.paused,this.status(e.anim,e.status))}return this},HM.stop=function(b){for(var p=0;p<Mb.length;p++)Mb[p].el.id!=this.id||b&&Mb[p].anim!=b||!1!==M(\"raphael.anim.stop.\"+this.id,this,Mb[p].anim)&&Mb.splice(p--,1);return this},M.on(\"raphael.remove\",cb),M.on(\"raphael.clear\",cb),HM.toString=function(){return\"Raphaël’s object\"};var nb,Ob,ib=function(M){if(this.items=[],this.length=0,this.type=\"set\",M)for(var b=0,p=M.length;b<p;b++)!M[b]||M[b].constructor!=HM.constructor&&M[b].constructor!=ib||(this[this.items.length]=this.items[this.items.length]=M[b],this.length++)},rb=ib.prototype;for(var ab in rb.push=function(){for(var M,b,p=0,e=arguments.length;p<e;p++)!(M=arguments[p])||M.constructor!=HM.constructor&&M.constructor!=ib||(this[b=this.items.length]=this.items[b]=M,this.length++);return this},rb.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},rb.forEach=function(M,b){for(var p=0,e=this.items.length;p<e;p++)if(!1===M.call(b,this.items[p],p))return this;return this},HM)HM[c](ab)&&(rb[ab]=function(M){return function(){var b=arguments;return this.forEach(function(p){p[M][r](p,b)})}}(ab));return rb.attr=function(M,p){if(M&&b.is(M,B)&&b.is(M[0],\"object\"))for(var e=0,o=M.length;e<o;e++)this.items[e].attr(M[e]);else for(var z=0,t=this.items.length;z<t;z++)this.items[z].attr(M,p);return this},rb.clear=function(){for(;this.length;)this.pop()},rb.splice=function(M,b,p){M=M<0?R(this.length+M,0):M,b=R(0,m(this.length-M,b));var e,o=[],z=[],t=[];for(e=2;e<arguments.length;e++)t.push(arguments[e]);for(e=0;e<b;e++)z.push(this[M+e]);for(;e<this.length-M;e++)o.push(this[M+e]);var c=t.length;for(e=0;e<c+o.length;e++)this.items[M+e]=this[M+e]=e<c?t[e]:o[e-c];for(e=this.items.length=this.length-=b-c;this[e];)delete this[e++];return new ib(z)},rb.exclude=function(M){for(var b=0,p=this.length;b<p;b++)if(this[b]==M)return this.splice(b,1),!0},rb.animate=function(M,p,e,o){(b.is(e,\"function\")||!e)&&(o=e||null);var z,t,c=this.items.length,n=c,O=this;if(!c)return this;o&&(t=function(){! --c&&o.call(O)}),e=b.is(e,y)?e:t;var i=b.animation(M,p,e,t);for(z=this.items[--n].animate(i);n--;)this.items[n]&&!this.items[n].removed&&this.items[n].animateWith(z,i,i),this.items[n]&&!this.items[n].removed||c--;return this},rb.insertAfter=function(M){for(var b=this.items.length;b--;)this.items[b].insertAfter(M);return this},rb.getBBox=function(){for(var M=[],b=[],p=[],e=[],o=this.items.length;o--;)if(!this.items[o].removed){var z=this.items[o].getBBox();M.push(z.x),b.push(z.y),p.push(z.x+z.width),e.push(z.y+z.height)}return{x:M=m[r](0,M),y:b=m[r](0,b),x2:p=R[r](0,p),y2:e=R[r](0,e),width:p-M,height:e-b}},rb.clone=function(M){M=this.paper.set();for(var b=0,p=this.items.length;b<p;b++)M.push(this.items[b].clone());return M},rb.toString=function(){return\"Raphaël‘s set\"},rb.glow=function(M){var b=this.paper.set();return this.forEach(function(p,e){var o=p.glow(M);null!=o&&o.forEach(function(M,p){b.push(M)})}),b},rb.isPointInside=function(M,b){var p=!1;return this.forEach(function(e){if(e.isPointInside(M,b))return p=!0,!1}),p},b.registerFont=function(M){if(!M.face)return M;this.fonts=this.fonts||{};var b={w:M.w,face:{},glyphs:{}},p=M.face[\"font-family\"];for(var e in M.face)M.face[c](e)&&(b.face[e]=M.face[e]);if(this.fonts[p]?this.fonts[p].push(b):this.fonts[p]=[b],!M.svg)for(var o in b.face[\"units-per-em\"]=S(M.face[\"units-per-em\"],10),M.glyphs)if(M.glyphs[c](o)){var z=M.glyphs[o];if(b.glyphs[o]={w:z.w,k:{},d:z.d&&\"M\"+z.d.replace(/[mlcxtrv]/g,function(M){return{l:\"L\",c:\"C\",x:\"z\",t:\"m\",r:\"l\",v:\"c\"}[M]||\"M\"})+\"z\"},z.k)for(var t in z.k)z[c](t)&&(b.glyphs[o].k[t]=z.k[t])}return M},e.getFont=function(M,p,e,o){if(o=o||\"normal\",e=e||\"normal\",p=+p||{normal:400,bold:700,lighter:300,bolder:800}[p]||400,b.fonts){var z,t=b.fonts[M];if(!t){var n=new RegExp(\"(^|\\\\s)\"+M.replace(/[^\\w\\d\\s+!~.:_-]/g,A)+\"(\\\\s|$)\",\"i\");for(var O in b.fonts)if(b.fonts[c](O)&&n.test(O)){t=b.fonts[O];break}}if(t)for(var i=0,r=t.length;i<r&&((z=t[i]).face[\"font-weight\"]!=p||z.face[\"font-style\"]!=e&&z.face[\"font-style\"]||z.face[\"font-stretch\"]!=o);i++);return z}},e.print=function(M,p,e,z,t,c,n,O){c=c||\"middle\",n=R(m(n||0,1),-1),O=R(m(O||1,3),1);var i,r=l(e)[q](A),a=0,s=0,d=A;if(b.is(z,\"string\")&&(z=this.getFont(z)),z){i=(t||16)/z.face[\"units-per-em\"];for(var u=z.face.bbox[q](o),f=+u[0],W=u[3]-u[1],h=0,g=+u[1]+(\"baseline\"==c?W+ +z.face.descent:W/2),L=0,v=r.length;L<v;L++){if(\"\\n\"==r[L])a=0,y=0,s=0,h+=W*O;else{var N=s&&z.glyphs[r[L-1]]||{},y=z.glyphs[r[L]];a+=s?(N.w||z.w)+(N.k&&N.k[r[L]]||0)+z.w*n:0,s=1}y&&y.d&&(d+=b.transformPath(y.d,[\"t\",a*i,h*i,\"s\",i,i,f,g,\"t\",(M-f)/i,(p-g)/i]))}}return this.path(d).attr({fill:\"#000\",stroke:\"none\"})},e.add=function(M){if(b.is(M,\"array\"))for(var p,e=this.set(),o=0,t=M.length;o<t;o++)p=M[o]||{},z[c](p.type)&&e.push(this[p.type]().attr(p));return e},b.format=function(M,p){var e=b.is(p,B)?[0][a](p):arguments;return M&&b.is(M,y)&&e.length-1&&(M=M.replace(t,function(M,b){return null==e[++b]?A:e[b]})),M||A},b.fullfill=(nb=/\\{([^\\}]+)\\}/g,Ob=/(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g,function(M,b){return String(M).replace(nb,function(M,p){return function(M,b,p){var e=p;return b.replace(Ob,function(M,b,p,o,z){b=b||o,e&&(b in e&&(e=e[b]),\"function\"==typeof e&&z&&(e=e()))}),e=(null==e||e==p?M:e)+\"\"}(M,p,b)})}),b.ninja=function(){if(O.was)n.win.Raphael=O.is;else{window.Raphael=void 0;try{delete window.Raphael}catch(M){}}return b},b.st=rb,M.on(\"raphael.DOMload\",function(){p=!0}),function(M,p,e){null==M.readyState&&M.addEventListener&&(M.addEventListener(p,e=function(){M.removeEventListener(p,e,!1),M.readyState=\"complete\"},!1),M.readyState=\"loading\"),function p(){/in/.test(M.readyState)?setTimeout(p,9):b.eve(\"raphael.DOMload\")}()}(document,\"DOMContentLoaded\"),b}.apply(b,e),void 0===o||(M.exports=o)},function(M,b,p){var e,o,z,t,c,n,O,i,r,a,s,A,d,l;t=\"0.5.0\",c=\"hasOwnProperty\",n=/[\\.\\/]/,O=/\\s*,\\s*/,i=function(M,b){return M-b},r={n:{}},a=function(){for(var M=0,b=this.length;M<b;M++)if(void 0!==this[M])return this[M]},s=function(){for(var M=this.length;--M;)if(void 0!==this[M])return this[M]},A=Object.prototype.toString,d=String,l=Array.isArray||function(M){return M instanceof Array||\"[object Array]\"==A.call(M)},eve=function(M,b){var p,e=z,t=Array.prototype.slice.call(arguments,2),c=eve.listeners(M),n=0,O=[],r={},A=[],d=o;A.firstDefined=a,A.lastDefined=s,o=M,z=0;for(var l=0,q=c.length;l<q;l++)\"zIndex\"in c[l]&&(O.push(c[l].zIndex),c[l].zIndex<0&&(r[c[l].zIndex]=c[l]));for(O.sort(i);O[n]<0;)if(p=r[O[n++]],A.push(p.apply(b,t)),z)return z=e,A;for(l=0;l<q;l++)if(\"zIndex\"in(p=c[l]))if(p.zIndex==O[n]){if(A.push(p.apply(b,t)),z)break;do{if((p=r[O[++n]])&&A.push(p.apply(b,t)),z)break}while(p)}else r[p.zIndex]=p;else if(A.push(p.apply(b,t)),z)break;return z=e,o=d,A},eve._events=r,eve.listeners=function(M){var b,p,e,o,z,t,c,O,i=l(M)?M:M.split(n),a=r,s=[a],A=[];for(o=0,z=i.length;o<z;o++){for(O=[],t=0,c=s.length;t<c;t++)for(p=[(a=s[t].n)[i[o]],a[\"*\"]],e=2;e--;)(b=p[e])&&(O.push(b),A=A.concat(b.f||[]));s=O}return A},eve.separator=function(M){M?(M=\"[\"+(M=d(M).replace(/(?=[\\.\\^\\]\\[\\-])/g,\"\\\\\"))+\"]\",n=new RegExp(M)):n=/[\\.\\/]/},eve.on=function(M,b){if(\"function\"!=typeof b)return function(){};for(var p=l(M)?l(M[0])?M:[M]:d(M).split(O),e=0,o=p.length;e<o;e++)(function(M){for(var p,e=l(M)?M:d(M).split(n),o=r,z=0,t=e.length;z<t;z++)o=(o=o.n).hasOwnProperty(e[z])&&o[e[z]]||(o[e[z]]={n:{}});for(o.f=o.f||[],z=0,t=o.f.length;z<t;z++)if(o.f[z]==b){p=!0;break}!p&&o.f.push(b)})(p[e]);return function(M){+M==+M&&(b.zIndex=+M)}},eve.f=function(M){var b=[].slice.call(arguments,1);return function(){eve.apply(null,[M,null].concat(b).concat([].slice.call(arguments,0)))}},eve.stop=function(){z=1},eve.nt=function(M){var b=l(o)?o.join(\".\"):o;return M?new RegExp(\"(?:\\\\.|\\\\/|^)\"+M+\"(?:\\\\.|\\\\/|$)\").test(b):b},eve.nts=function(){return l(o)?o:o.split(n)},eve.off=eve.unbind=function(M,b){if(M){var p=l(M)?l(M[0])?M:[M]:d(M).split(O);if(p.length>1)for(var e=0,o=p.length;e<o;e++)eve.off(p[e],b);else{p=l(M)?M:d(M).split(n);var z,t,i,a,s,A=[r];for(e=0,o=p.length;e<o;e++)for(a=0;a<A.length;a+=i.length-2){if(i=[a,1],z=A[a].n,\"*\"!=p[e])z[p[e]]&&i.push(z[p[e]]);else for(t in z)z[c](t)&&i.push(z[t]);A.splice.apply(A,i)}for(e=0,o=A.length;e<o;e++)for(z=A[e];z.n;){if(b){if(z.f){for(a=0,s=z.f.length;a<s;a++)if(z.f[a]==b){z.f.splice(a,1);break}!z.f.length&&delete z.f}for(t in z.n)if(z.n[c](t)&&z.n[t].f){var q=z.n[t].f;for(a=0,s=q.length;a<s;a++)if(q[a]==b){q.splice(a,1);break}!q.length&&delete z.n[t].f}}else for(t in delete z.f,z.n)z.n[c](t)&&z.n[t].f&&delete z.n[t].f;z=z.n}}}else eve._events=r={n:{}}},eve.once=function(M,b){var p=function(){return eve.off(M,p),b.apply(this,arguments)};return eve.on(M,p)},eve.version=t,eve.toString=function(){return\"You are running Eve \"+t},void 0!==M&&M.exports?M.exports=eve:void 0===(e=function(){return eve}.apply(b,[]))||(M.exports=e)},function(M,b,p){var e,o;e=[p(1)],o=function(M){if(!M||M.svg){var b=\"hasOwnProperty\",p=String,e=parseFloat,o=parseInt,z=Math,t=z.max,c=z.abs,n=z.pow,O=/[, ]+/,i=M.eve,r=\"\",a=\" \",s=\"http://www.w3.org/1999/xlink\",A={block:\"M5,0 0,2.5 5,5z\",classic:\"M5,0 0,2.5 5,5 3.5,3 3.5,2z\",diamond:\"M2.5,0 5,2.5 2.5,5 0,2.5z\",open:\"M6,1 1,3.5 6,6\",oval:\"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z\"},d={};M.toString=function(){return\"Your browser supports SVG.\\nYou are running Raphaël \"+this.version};var l=function(e,o){if(o)for(var z in\"string\"==typeof e&&(e=l(e)),o)o[b](z)&&(\"xlink:\"==z.substring(0,6)?e.setAttributeNS(s,z.substring(6),p(o[z])):e.setAttribute(z,p(o[z])));else(e=M._g.doc.createElementNS(\"http://www.w3.org/2000/svg\",e)).style&&(e.style.webkitTapHighlightColor=\"rgba(0,0,0,0)\");return e},q=function(b,o){var O=\"linear\",i=b.id+o,a=.5,s=.5,A=b.node,d=b.paper,q=A.style,f=M._g.doc.getElementById(i);if(!f){if(o=(o=p(o).replace(M._radial_gradient,function(M,b,p){if(O=\"radial\",b&&p){a=e(b);var o=2*((s=e(p))>.5)-1;n(a-.5,2)+n(s-.5,2)>.25&&(s=z.sqrt(.25-n(a-.5,2))*o+.5)&&.5!=s&&(s=s.toFixed(5)-1e-5*o)}return r})).split(/\\s*\\-\\s*/),\"linear\"==O){var W=o.shift();if(W=-e(W),isNaN(W))return null;var h=[0,0,z.cos(M.rad(W)),z.sin(M.rad(W))],R=1/(t(c(h[2]),c(h[3]))||1);h[2]*=R,h[3]*=R,h[2]<0&&(h[0]=-h[2],h[2]=0),h[3]<0&&(h[1]=-h[3],h[3]=0)}var m=M._parseDots(o);if(!m)return null;if(i=i.replace(/[\\(\\)\\s,\\xb0#]/g,\"_\"),b.gradient&&i!=b.gradient.id&&(d.defs.removeChild(b.gradient),delete b.gradient),!b.gradient){f=l(O+\"Gradient\",{id:i}),b.gradient=f,l(f,\"radial\"==O?{fx:a,fy:s}:{x1:h[0],y1:h[1],x2:h[2],y2:h[3],gradientTransform:b.matrix.invert()}),d.defs.appendChild(f);for(var g=0,L=m.length;g<L;g++)f.appendChild(l(\"stop\",{offset:m[g].offset?m[g].offset:g?\"100%\":\"0%\",\"stop-color\":m[g].color||\"#fff\",\"stop-opacity\":isFinite(m[g].opacity)?m[g].opacity:1}))}}return l(A,{fill:u(i),opacity:1,\"fill-opacity\":1}),q.fill=r,q.opacity=1,q.fillOpacity=1,1},u=function(M){if((b=document.documentMode)&&(9===b||10===b))return\"url('#\"+M+\"')\";var b,p=document.location;return\"url('\"+(p.protocol+\"//\"+p.host+p.pathname+p.search)+\"#\"+M+\"')\"},f=function(M){var b=M.getBBox(1);l(M.pattern,{patternTransform:M.matrix.invert()+\" translate(\"+b.x+\",\"+b.y+\")\"})},W=function(e,o,z){if(\"path\"==e.type){for(var t,c,n,O,i,a=p(o).toLowerCase().split(\"-\"),s=e.paper,q=z?\"end\":\"start\",u=e.node,f=e.attrs,W=f[\"stroke-width\"],h=a.length,R=\"classic\",m=3,g=3,L=5;h--;)switch(a[h]){case\"block\":case\"classic\":case\"oval\":case\"diamond\":case\"open\":case\"none\":R=a[h];break;case\"wide\":g=5;break;case\"narrow\":g=2;break;case\"long\":m=5;break;case\"short\":m=2}if(\"open\"==R?(m+=2,g+=2,L+=2,n=1,O=z?4:1,i={fill:\"none\",stroke:f.stroke}):(O=n=m/2,i={fill:f.stroke,stroke:\"none\"}),e._.arrows?z?(e._.arrows.endPath&&d[e._.arrows.endPath]--,e._.arrows.endMarker&&d[e._.arrows.endMarker]--):(e._.arrows.startPath&&d[e._.arrows.startPath]--,e._.arrows.startMarker&&d[e._.arrows.startMarker]--):e._.arrows={},\"none\"!=R){var v=\"raphael-marker-\"+R,N=\"raphael-marker-\"+q+R+m+g+\"-obj\"+e.id;M._g.doc.getElementById(v)?d[v]++:(s.defs.appendChild(l(l(\"path\"),{\"stroke-linecap\":\"round\",d:A[R],id:v})),d[v]=1);var y,B=M._g.doc.getElementById(N);B?(d[N]++,y=B.getElementsByTagName(\"use\")[0]):(B=l(l(\"marker\"),{id:N,markerHeight:g,markerWidth:m,orient:\"auto\",refX:O,refY:g/2}),y=l(l(\"use\"),{\"xlink:href\":\"#\"+v,transform:(z?\"rotate(180 \"+m/2+\" \"+g/2+\") \":r)+\"scale(\"+m/L+\",\"+g/L+\")\",\"stroke-width\":(1/((m/L+g/L)/2)).toFixed(4)}),B.appendChild(y),s.defs.appendChild(B),d[N]=1),l(y,i);var X=n*(\"diamond\"!=R&&\"oval\"!=R);z?(t=e._.arrows.startdx*W||0,c=M.getTotalLength(f.path)-X*W):(t=X*W,c=M.getTotalLength(f.path)-(e._.arrows.enddx*W||0)),(i={})[\"marker-\"+q]=\"url(#\"+N+\")\",(c||t)&&(i.d=M.getSubpath(f.path,t,c)),l(u,i),e._.arrows[q+\"Path\"]=v,e._.arrows[q+\"Marker\"]=N,e._.arrows[q+\"dx\"]=X,e._.arrows[q+\"Type\"]=R,e._.arrows[q+\"String\"]=o}else z?(t=e._.arrows.startdx*W||0,c=M.getTotalLength(f.path)-t):(t=0,c=M.getTotalLength(f.path)-(e._.arrows.enddx*W||0)),e._.arrows[q+\"Path\"]&&l(u,{d:M.getSubpath(f.path,t,c)}),delete e._.arrows[q+\"Path\"],delete e._.arrows[q+\"Marker\"],delete e._.arrows[q+\"dx\"],delete e._.arrows[q+\"Type\"],delete e._.arrows[q+\"String\"];for(i in d)if(d[b](i)&&!d[i]){var w=M._g.doc.getElementById(i);w&&w.parentNode.removeChild(w)}}},h={\"-\":[3,1],\".\":[1,1],\"-.\":[3,1,1,1],\"-..\":[3,1,1,1,1,1],\". \":[1,3],\"- \":[4,3],\"--\":[8,3],\"- .\":[4,3,1,3],\"--.\":[8,3,1,3],\"--..\":[8,3,1,3,1,3]},R=function(M,b,e){if(b=h[p(b).toLowerCase()]){for(var o=M.attrs[\"stroke-width\"]||\"1\",z={round:o,square:o,butt:0}[M.attrs[\"stroke-linecap\"]||e[\"stroke-linecap\"]]||0,t=[],c=b.length;c--;)t[c]=b[c]*o+(c%2?1:-1)*z;l(M.node,{\"stroke-dasharray\":t.join(\",\")})}else l(M.node,{\"stroke-dasharray\":\"none\"})},m=function(e,z){var n=e.node,i=e.attrs,a=n.style.visibility;for(var A in n.style.visibility=\"hidden\",z)if(z[b](A)){if(!M._availableAttrs[b](A))continue;var d=z[A];switch(i[A]=d,A){case\"blur\":e.blur(d);break;case\"title\":var u=n.getElementsByTagName(\"title\");if(u.length&&(u=u[0]))u.firstChild.nodeValue=d;else{u=l(\"title\");var h=M._g.doc.createTextNode(d);u.appendChild(h),n.appendChild(u)}break;case\"href\":case\"target\":var m=n.parentNode;if(\"a\"!=m.tagName.toLowerCase()){var L=l(\"a\");m.insertBefore(L,n),L.appendChild(n),m=L}\"target\"==A?m.setAttributeNS(s,\"show\",\"blank\"==d?\"new\":d):m.setAttributeNS(s,A,d);break;case\"cursor\":n.style.cursor=d;break;case\"transform\":e.transform(d);break;case\"arrow-start\":W(e,d);break;case\"arrow-end\":W(e,d,1);break;case\"clip-rect\":var v=p(d).split(O);if(4==v.length){e.clip&&e.clip.parentNode.parentNode.removeChild(e.clip.parentNode);var N=l(\"clipPath\"),y=l(\"rect\");N.id=M.createUUID(),l(y,{x:v[0],y:v[1],width:v[2],height:v[3]}),N.appendChild(y),e.paper.defs.appendChild(N),l(n,{\"clip-path\":\"url(#\"+N.id+\")\"}),e.clip=y}if(!d){var B=n.getAttribute(\"clip-path\");if(B){var X=M._g.doc.getElementById(B.replace(/(^url\\(#|\\)$)/g,r));X&&X.parentNode.removeChild(X),l(n,{\"clip-path\":r}),delete e.clip}}break;case\"path\":\"path\"==e.type&&(l(n,{d:d?i.path=M._pathToAbsolute(d):\"M0,0\"}),e._.dirty=1,e._.arrows&&(\"startString\"in e._.arrows&&W(e,e._.arrows.startString),\"endString\"in e._.arrows&&W(e,e._.arrows.endString,1)));break;case\"width\":if(n.setAttribute(A,d),e._.dirty=1,!i.fx)break;A=\"x\",d=i.x;case\"x\":i.fx&&(d=-i.x-(i.width||0));case\"rx\":if(\"rx\"==A&&\"rect\"==e.type)break;case\"cx\":n.setAttribute(A,d),e.pattern&&f(e),e._.dirty=1;break;case\"height\":if(n.setAttribute(A,d),e._.dirty=1,!i.fy)break;A=\"y\",d=i.y;case\"y\":i.fy&&(d=-i.y-(i.height||0));case\"ry\":if(\"ry\"==A&&\"rect\"==e.type)break;case\"cy\":n.setAttribute(A,d),e.pattern&&f(e),e._.dirty=1;break;case\"r\":\"rect\"==e.type?l(n,{rx:d,ry:d}):n.setAttribute(A,d),e._.dirty=1;break;case\"src\":\"image\"==e.type&&n.setAttributeNS(s,\"href\",d);break;case\"stroke-width\":1==e._.sx&&1==e._.sy||(d/=t(c(e._.sx),c(e._.sy))||1),n.setAttribute(A,d),i[\"stroke-dasharray\"]&&R(e,i[\"stroke-dasharray\"],z),e._.arrows&&(\"startString\"in e._.arrows&&W(e,e._.arrows.startString),\"endString\"in e._.arrows&&W(e,e._.arrows.endString,1));break;case\"stroke-dasharray\":R(e,d,z);break;case\"fill\":var w=p(d).match(M._ISURL);if(w){N=l(\"pattern\");var x=l(\"image\");N.id=M.createUUID(),l(N,{x:0,y:0,patternUnits:\"userSpaceOnUse\",height:1,width:1}),l(x,{x:0,y:0,\"xlink:href\":w[1]}),N.appendChild(x),function(b){M._preload(w[1],function(){var M=this.offsetWidth,p=this.offsetHeight;l(b,{width:M,height:p}),l(x,{width:M,height:p})})}(N),e.paper.defs.appendChild(N),l(n,{fill:\"url(#\"+N.id+\")\"}),e.pattern=N,e.pattern&&f(e);break}var T=M.getRGB(d);if(T.error){if((\"circle\"==e.type||\"ellipse\"==e.type||\"r\"!=p(d).charAt())&&q(e,d)){if(\"opacity\"in i||\"fill-opacity\"in i){var _=M._g.doc.getElementById(n.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g,r));if(_){var k=_.getElementsByTagName(\"stop\");l(k[k.length-1],{\"stop-opacity\":(\"opacity\"in i?i.opacity:1)*(\"fill-opacity\"in i?i[\"fill-opacity\"]:1)})}}i.gradient=d,i.fill=\"none\";break}}else delete z.gradient,delete i.gradient,!M.is(i.opacity,\"undefined\")&&M.is(z.opacity,\"undefined\")&&l(n,{opacity:i.opacity}),!M.is(i[\"fill-opacity\"],\"undefined\")&&M.is(z[\"fill-opacity\"],\"undefined\")&&l(n,{\"fill-opacity\":i[\"fill-opacity\"]});T[b](\"opacity\")&&l(n,{\"fill-opacity\":T.opacity>1?T.opacity/100:T.opacity});case\"stroke\":T=M.getRGB(d),n.setAttribute(A,T.hex),\"stroke\"==A&&T[b](\"opacity\")&&l(n,{\"stroke-opacity\":T.opacity>1?T.opacity/100:T.opacity}),\"stroke\"==A&&e._.arrows&&(\"startString\"in e._.arrows&&W(e,e._.arrows.startString),\"endString\"in e._.arrows&&W(e,e._.arrows.endString,1));break;case\"gradient\":(\"circle\"==e.type||\"ellipse\"==e.type||\"r\"!=p(d).charAt())&&q(e,d);break;case\"opacity\":i.gradient&&!i[b](\"stroke-opacity\")&&l(n,{\"stroke-opacity\":d>1?d/100:d});case\"fill-opacity\":if(i.gradient){(_=M._g.doc.getElementById(n.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g,r)))&&(k=_.getElementsByTagName(\"stop\"),l(k[k.length-1],{\"stop-opacity\":d}));break}default:\"font-size\"==A&&(d=o(d,10)+\"px\");var S=A.replace(/(\\-.)/g,function(M){return M.substring(1).toUpperCase()});n.style[S]=d,e._.dirty=1,n.setAttribute(A,d)}}g(e,z),n.style.visibility=a},g=function(e,z){if(\"text\"==e.type&&(z[b](\"text\")||z[b](\"font\")||z[b](\"font-size\")||z[b](\"x\")||z[b](\"y\"))){var t=e.attrs,c=e.node,n=c.firstChild?o(M._g.doc.defaultView.getComputedStyle(c.firstChild,r).getPropertyValue(\"font-size\"),10):10;if(z[b](\"text\")){for(t.text=z.text;c.firstChild;)c.removeChild(c.firstChild);for(var O,i=p(z.text).split(\"\\n\"),a=[],s=0,A=i.length;s<A;s++)O=l(\"tspan\"),s&&l(O,{dy:1.2*n,x:t.x}),O.appendChild(M._g.doc.createTextNode(i[s])),c.appendChild(O),a[s]=O}else for(s=0,A=(a=c.getElementsByTagName(\"tspan\")).length;s<A;s++)s?l(a[s],{dy:1.2*n,x:t.x}):l(a[0],{dy:0});l(c,{x:t.x,y:t.y}),e._.dirty=1;var d=e._getBBox(),q=t.y-(d.y+d.height/2);q&&M.is(q,\"finite\")&&l(a[0],{dy:q})}},L=function(M){return M.parentNode&&\"a\"===M.parentNode.tagName.toLowerCase()?M.parentNode:M},v=function(b,p){this[0]=this.node=b,b.raphael=!0,this.id=(\"0000\"+(Math.random()*Math.pow(36,5)|0).toString(36)).slice(-5),b.raphaelid=this.id,this.matrix=M.matrix(),this.realPath=null,this.paper=p,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!p.bottom&&(p.bottom=this),this.prev=p.top,p.top&&(p.top.next=this),p.top=this,this.next=null},N=M.el;v.prototype=N,N.constructor=v,M._engine.path=function(M,b){var p=l(\"path\");b.canvas&&b.canvas.appendChild(p);var e=new v(p,b);return e.type=\"path\",m(e,{fill:\"none\",stroke:\"#000\",path:M}),e},N.rotate=function(M,b,o){if(this.removed)return this;if((M=p(M).split(O)).length-1&&(b=e(M[1]),o=e(M[2])),M=e(M[0]),null==o&&(b=o),null==b||null==o){var z=this.getBBox(1);b=z.x+z.width/2,o=z.y+z.height/2}return this.transform(this._.transform.concat([[\"r\",M,b,o]])),this},N.scale=function(M,b,o,z){if(this.removed)return this;if((M=p(M).split(O)).length-1&&(b=e(M[1]),o=e(M[2]),z=e(M[3])),M=e(M[0]),null==b&&(b=M),null==z&&(o=z),null==o||null==z)var t=this.getBBox(1);return o=null==o?t.x+t.width/2:o,z=null==z?t.y+t.height/2:z,this.transform(this._.transform.concat([[\"s\",M,b,o,z]])),this},N.translate=function(M,b){return this.removed||((M=p(M).split(O)).length-1&&(b=e(M[1])),M=e(M[0])||0,b=+b||0,this.transform(this._.transform.concat([[\"t\",M,b]]))),this},N.transform=function(p){var e=this._;if(null==p)return e.transform;if(M._extractTransform(this,p),this.clip&&l(this.clip,{transform:this.matrix.invert()}),this.pattern&&f(this),this.node&&l(this.node,{transform:this.matrix}),1!=e.sx||1!=e.sy){var o=this.attrs[b](\"stroke-width\")?this.attrs[\"stroke-width\"]:1;this.attr({\"stroke-width\":o})}return this},N.hide=function(){return this.removed||(this.node.style.display=\"none\"),this},N.show=function(){return this.removed||(this.node.style.display=\"\"),this},N.remove=function(){var b=L(this.node);if(!this.removed&&b.parentNode){var p=this.paper;for(var e in p.__set__&&p.__set__.exclude(this),i.unbind(\"raphael.*.*.\"+this.id),this.gradient&&p.defs.removeChild(this.gradient),M._tear(this,p),b.parentNode.removeChild(b),this.removeData(),this)this[e]=\"function\"==typeof this[e]?M._removedFactory(e):null;this.removed=!0}},N._getBBox=function(){if(\"none\"==this.node.style.display){this.show();var M=!0}var b,p=!1;this.paper.canvas.parentElement?b=this.paper.canvas.parentElement.style:this.paper.canvas.parentNode&&(b=this.paper.canvas.parentNode.style),b&&\"none\"==b.display&&(p=!0,b.display=\"\");var e={};try{e=this.node.getBBox()}catch(M){e={x:this.node.clientLeft,y:this.node.clientTop,width:this.node.clientWidth,height:this.node.clientHeight}}finally{e=e||{},p&&(b.display=\"none\")}return M&&this.hide(),e},N.attr=function(p,e){if(this.removed)return this;if(null==p){var o={};for(var z in this.attrs)this.attrs[b](z)&&(o[z]=this.attrs[z]);return o.gradient&&\"none\"==o.fill&&(o.fill=o.gradient)&&delete o.gradient,o.transform=this._.transform,o}if(null==e&&M.is(p,\"string\")){if(\"fill\"==p&&\"none\"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if(\"transform\"==p)return this._.transform;for(var t=p.split(O),c={},n=0,r=t.length;n<r;n++)(p=t[n])in this.attrs?c[p]=this.attrs[p]:M.is(this.paper.customAttributes[p],\"function\")?c[p]=this.paper.customAttributes[p].def:c[p]=M._availableAttrs[p];return r-1?c:c[t[0]]}if(null==e&&M.is(p,\"array\")){for(c={},n=0,r=p.length;n<r;n++)c[p[n]]=this.attr(p[n]);return c}if(null!=e){var a={};a[p]=e}else null!=p&&M.is(p,\"object\")&&(a=p);for(var s in a)i(\"raphael.attr.\"+s+\".\"+this.id,this,a[s]);for(s in this.paper.customAttributes)if(this.paper.customAttributes[b](s)&&a[b](s)&&M.is(this.paper.customAttributes[s],\"function\")){var A=this.paper.customAttributes[s].apply(this,[].concat(a[s]));for(var d in this.attrs[s]=a[s],A)A[b](d)&&(a[d]=A[d])}return m(this,a),this},N.toFront=function(){if(this.removed)return this;var b=L(this.node);b.parentNode.appendChild(b);var p=this.paper;return p.top!=this&&M._tofront(this,p),this},N.toBack=function(){if(this.removed)return this;var b=L(this.node),p=b.parentNode;p.insertBefore(b,p.firstChild),M._toback(this,this.paper);this.paper;return this},N.insertAfter=function(b){if(this.removed||!b)return this;var p=L(this.node),e=L(b.node||b[b.length-1].node);return e.nextSibling?e.parentNode.insertBefore(p,e.nextSibling):e.parentNode.appendChild(p),M._insertafter(this,b,this.paper),this},N.insertBefore=function(b){if(this.removed||!b)return this;var p=L(this.node),e=L(b.node||b[0].node);return e.parentNode.insertBefore(p,e),M._insertbefore(this,b,this.paper),this},N.blur=function(b){var p=this;if(0!==+b){var e=l(\"filter\"),o=l(\"feGaussianBlur\");p.attrs.blur=b,e.id=M.createUUID(),l(o,{stdDeviation:+b||1.5}),e.appendChild(o),p.paper.defs.appendChild(e),p._blur=e,l(p.node,{filter:\"url(#\"+e.id+\")\"})}else p._blur&&(p._blur.parentNode.removeChild(p._blur),delete p._blur,delete p.attrs.blur),p.node.removeAttribute(\"filter\");return p},M._engine.circle=function(M,b,p,e){var o=l(\"circle\");M.canvas&&M.canvas.appendChild(o);var z=new v(o,M);return z.attrs={cx:b,cy:p,r:e,fill:\"none\",stroke:\"#000\"},z.type=\"circle\",l(o,z.attrs),z},M._engine.rect=function(M,b,p,e,o,z){var t=l(\"rect\");M.canvas&&M.canvas.appendChild(t);var c=new v(t,M);return c.attrs={x:b,y:p,width:e,height:o,rx:z||0,ry:z||0,fill:\"none\",stroke:\"#000\"},c.type=\"rect\",l(t,c.attrs),c},M._engine.ellipse=function(M,b,p,e,o){var z=l(\"ellipse\");M.canvas&&M.canvas.appendChild(z);var t=new v(z,M);return t.attrs={cx:b,cy:p,rx:e,ry:o,fill:\"none\",stroke:\"#000\"},t.type=\"ellipse\",l(z,t.attrs),t},M._engine.image=function(M,b,p,e,o,z){var t=l(\"image\");l(t,{x:p,y:e,width:o,height:z,preserveAspectRatio:\"none\"}),t.setAttributeNS(s,\"href\",b),M.canvas&&M.canvas.appendChild(t);var c=new v(t,M);return c.attrs={x:p,y:e,width:o,height:z,src:b},c.type=\"image\",c},M._engine.text=function(b,p,e,o){var z=l(\"text\");b.canvas&&b.canvas.appendChild(z);var t=new v(z,b);return t.attrs={x:p,y:e,\"text-anchor\":\"middle\",text:o,\"font-family\":M._availableAttrs[\"font-family\"],\"font-size\":M._availableAttrs[\"font-size\"],stroke:\"none\",fill:\"#000\"},t.type=\"text\",m(t,t.attrs),t},M._engine.setSize=function(M,b){return this.width=M||this.width,this.height=b||this.height,this.canvas.setAttribute(\"width\",this.width),this.canvas.setAttribute(\"height\",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},M._engine.create=function(){var b=M._getContainer.apply(0,arguments),p=b&&b.container,e=b.x,o=b.y,z=b.width,t=b.height;if(!p)throw new Error(\"SVG container not found.\");var c,n=l(\"svg\"),O=\"overflow:hidden;\";return e=e||0,o=o||0,l(n,{height:t=t||342,version:1.1,width:z=z||512,xmlns:\"http://www.w3.org/2000/svg\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\"}),1==p?(n.style.cssText=O+\"position:absolute;left:\"+e+\"px;top:\"+o+\"px\",M._g.doc.body.appendChild(n),c=1):(n.style.cssText=O+\"position:relative\",p.firstChild?p.insertBefore(n,p.firstChild):p.appendChild(n)),(p=new M._Paper).width=z,p.height=t,p.canvas=n,p.clear(),p._left=p._top=0,c&&(p.renderfix=function(){}),p.renderfix(),p},M._engine.setViewBox=function(M,b,p,e,o){i(\"raphael.setViewBox\",this,this._viewBox,[M,b,p,e,o]);var z,c,n=this.getSize(),O=t(p/n.width,e/n.height),r=this.top,s=o?\"xMidYMid meet\":\"xMinYMin\";for(null==M?(this._vbSize&&(O=1),delete this._vbSize,z=\"0 0 \"+this.width+a+this.height):(this._vbSize=O,z=M+a+b+a+p+a+e),l(this.canvas,{viewBox:z,preserveAspectRatio:s});O&&r;)c=\"stroke-width\"in r.attrs?r.attrs[\"stroke-width\"]:1,r.attr({\"stroke-width\":c}),r._.dirty=1,r._.dirtyT=1,r=r.prev;return this._viewBox=[M,b,p,e,!!o],this},M.prototype.renderfix=function(){var M,b=this.canvas,p=b.style;try{M=b.getScreenCTM()||b.createSVGMatrix()}catch(p){M=b.createSVGMatrix()}var e=-M.e%1,o=-M.f%1;(e||o)&&(e&&(this._left=(this._left+e)%1,p.left=this._left+\"px\"),o&&(this._top=(this._top+o)%1,p.top=this._top+\"px\"))},M.prototype.clear=function(){M.eve(\"raphael.clear\",this);for(var b=this.canvas;b.firstChild;)b.removeChild(b.firstChild);this.bottom=this.top=null,(this.desc=l(\"desc\")).appendChild(M._g.doc.createTextNode(\"Created with Raphaël \"+M.version)),b.appendChild(this.desc),b.appendChild(this.defs=l(\"defs\"))},M.prototype.remove=function(){for(var b in i(\"raphael.remove\",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this)this[b]=\"function\"==typeof this[b]?M._removedFactory(b):null};var y=M.st;for(var B in N)N[b](B)&&!y[b](B)&&(y[B]=function(M){return function(){var b=arguments;return this.forEach(function(p){p[M].apply(p,b)})}}(B))}}.apply(b,e),void 0===o||(M.exports=o)},function(M,b,p){var e,o;e=[p(1)],o=function(M){if(!M||M.vml){var b=\"hasOwnProperty\",p=String,e=parseFloat,o=Math,z=o.round,t=o.max,c=o.min,n=o.abs,O=\"fill\",i=/[, ]+/,r=M.eve,a=\" \",s=\"\",A={M:\"m\",L:\"l\",C:\"c\",Z:\"x\",m:\"t\",l:\"r\",c:\"v\",z:\"x\"},d=/([clmz]),?([^clmz]*)/gi,l=/ progid:\\S+Blur\\([^\\)]+\\)/g,q=/-?[^,\\s-]+/g,u=\"position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)\",f=21600,W={path:1,rect:1,image:1},h={circle:1,ellipse:1},R=function(b,p,e){var o=M.matrix();return o.rotate(-b,.5,.5),{dx:o.x(p,e),dy:o.y(p,e)}},m=function(M,b,p,e,o,z){var t=M._,c=M.matrix,i=t.fillpos,r=M.node,s=r.style,A=1,d=\"\",l=f/b,q=f/p;if(s.visibility=\"hidden\",b&&p){if(r.coordsize=n(l)+a+n(q),s.rotation=z*(b*p<0?-1:1),z){var u=R(z,e,o);e=u.dx,o=u.dy}if(b<0&&(d+=\"x\"),p<0&&(d+=\" y\")&&(A=-1),s.flip=d,r.coordorigin=e*-l+a+o*-q,i||t.fillsize){var W=r.getElementsByTagName(O);W=W&&W[0],r.removeChild(W),i&&(u=R(z,c.x(i[0],i[1]),c.y(i[0],i[1])),W.position=u.dx*A+a+u.dy*A),t.fillsize&&(W.size=t.fillsize[0]*n(b)+a+t.fillsize[1]*n(p)),r.appendChild(W)}s.visibility=\"visible\"}};M.toString=function(){return\"Your browser doesn’t support SVG. Falling down to VML.\\nYou are running Raphaël \"+this.version};var g,L=function(M,b,e){for(var o=p(b).toLowerCase().split(\"-\"),z=e?\"end\":\"start\",t=o.length,c=\"classic\",n=\"medium\",O=\"medium\";t--;)switch(o[t]){case\"block\":case\"classic\":case\"oval\":case\"diamond\":case\"open\":case\"none\":c=o[t];break;case\"wide\":case\"narrow\":O=o[t];break;case\"long\":case\"short\":n=o[t]}var i=M.node.getElementsByTagName(\"stroke\")[0];i[z+\"arrow\"]=c,i[z+\"arrowlength\"]=n,i[z+\"arrowwidth\"]=O},v=function(o,n){o.attrs=o.attrs||{};var r=o.node,l=o.attrs,u=r.style,R=W[o.type]&&(n.x!=l.x||n.y!=l.y||n.width!=l.width||n.height!=l.height||n.cx!=l.cx||n.cy!=l.cy||n.rx!=l.rx||n.ry!=l.ry||n.r!=l.r),v=h[o.type]&&(l.cx!=n.cx||l.cy!=n.cy||l.r!=n.r||l.rx!=n.rx||l.ry!=n.ry),y=o;for(var B in n)n[b](B)&&(l[B]=n[B]);if(R&&(l.path=M._getPath[o.type](o),o._.dirty=1),n.href&&(r.href=n.href),n.title&&(r.title=n.title),n.target&&(r.target=n.target),n.cursor&&(u.cursor=n.cursor),\"blur\"in n&&o.blur(n.blur),(n.path&&\"path\"==o.type||R)&&(r.path=function(b){var e=/[ahqstv]/gi,o=M._pathToAbsolute;if(p(b).match(e)&&(o=M._path2curve),e=/[clmz]/g,o==M._pathToAbsolute&&!p(b).match(e)){var t=p(b).replace(d,function(M,b,p){var e=[],o=\"m\"==b.toLowerCase(),t=A[b];return p.replace(q,function(M){o&&2==e.length&&(t+=e+A[\"m\"==b?\"l\":\"L\"],e=[]),e.push(z(M*f))}),t+e});return t}var c,n,O=o(b);t=[];for(var i=0,r=O.length;i<r;i++){c=O[i],\"z\"==(n=O[i][0].toLowerCase())&&(n=\"x\");for(var l=1,u=c.length;l<u;l++)n+=z(c[l]*f)+(l!=u-1?\",\":s);t.push(n)}return t.join(a)}(~p(l.path).toLowerCase().indexOf(\"r\")?M._pathToAbsolute(l.path):l.path),o._.dirty=1,\"image\"==o.type&&(o._.fillpos=[l.x,l.y],o._.fillsize=[l.width,l.height],m(o,1,1,0,0,0))),\"transform\"in n&&o.transform(n.transform),v){var X=+l.cx,w=+l.cy,x=+l.rx||+l.r||0,T=+l.ry||+l.r||0;r.path=M.format(\"ar{0},{1},{2},{3},{4},{1},{4},{1}x\",z((X-x)*f),z((w-T)*f),z((X+x)*f),z((w+T)*f),z(X*f)),o._.dirty=1}if(\"clip-rect\"in n){var _=p(n[\"clip-rect\"]).split(i);if(4==_.length){_[2]=+_[2]+ +_[0],_[3]=+_[3]+ +_[1];var k=r.clipRect||M._g.doc.createElement(\"div\"),S=k.style;S.clip=M.format(\"rect({1}px {2}px {3}px {0}px)\",_),r.clipRect||(S.position=\"absolute\",S.top=0,S.left=0,S.width=o.paper.width+\"px\",S.height=o.paper.height+\"px\",r.parentNode.insertBefore(k,r),k.appendChild(r),r.clipRect=k)}n[\"clip-rect\"]||r.clipRect&&(r.clipRect.style.clip=\"auto\")}if(o.textpath){var C=o.textpath.style;n.font&&(C.font=n.font),n[\"font-family\"]&&(C.fontFamily='\"'+n[\"font-family\"].split(\",\")[0].replace(/^['\"]+|['\"]+$/g,s)+'\"'),n[\"font-size\"]&&(C.fontSize=n[\"font-size\"]),n[\"font-weight\"]&&(C.fontWeight=n[\"font-weight\"]),n[\"font-style\"]&&(C.fontStyle=n[\"font-style\"])}if(\"arrow-start\"in n&&L(y,n[\"arrow-start\"]),\"arrow-end\"in n&&L(y,n[\"arrow-end\"],1),null!=n.opacity||null!=n.fill||null!=n.src||null!=n.stroke||null!=n[\"stroke-width\"]||null!=n[\"stroke-opacity\"]||null!=n[\"fill-opacity\"]||null!=n[\"stroke-dasharray\"]||null!=n[\"stroke-miterlimit\"]||null!=n[\"stroke-linejoin\"]||null!=n[\"stroke-linecap\"]){var E=r.getElementsByTagName(O);if(!(E=E&&E[0])&&(E=g(O)),\"image\"==o.type&&n.src&&(E.src=n.src),n.fill&&(E.on=!0),null!=E.on&&\"none\"!=n.fill&&null!==n.fill||(E.on=!1),E.on&&n.fill){var D=p(n.fill).match(M._ISURL);if(D){E.parentNode==r&&r.removeChild(E),E.rotate=!0,E.src=D[1],E.type=\"tile\";var P=o.getBBox(1);E.position=P.x+a+P.y,o._.fillpos=[P.x,P.y],M._preload(D[1],function(){o._.fillsize=[this.offsetWidth,this.offsetHeight]})}else E.color=M.getRGB(n.fill).hex,E.src=s,E.type=\"solid\",M.getRGB(n.fill).error&&(y.type in{circle:1,ellipse:1}||\"r\"!=p(n.fill).charAt())&&N(y,n.fill,E)&&(l.fill=\"none\",l.gradient=n.fill,E.rotate=!1)}if(\"fill-opacity\"in n||\"opacity\"in n){var I=((+l[\"fill-opacity\"]+1||2)-1)*((+l.opacity+1||2)-1)*((+M.getRGB(n.fill).o+1||2)-1);I=c(t(I,0),1),E.opacity=I,E.src&&(E.color=\"none\")}r.appendChild(E);var F=r.getElementsByTagName(\"stroke\")&&r.getElementsByTagName(\"stroke\")[0],j=!1;!F&&(j=F=g(\"stroke\")),(n.stroke&&\"none\"!=n.stroke||n[\"stroke-width\"]||null!=n[\"stroke-opacity\"]||n[\"stroke-dasharray\"]||n[\"stroke-miterlimit\"]||n[\"stroke-linejoin\"]||n[\"stroke-linecap\"])&&(F.on=!0),(\"none\"==n.stroke||null===n.stroke||null==F.on||0==n.stroke||0==n[\"stroke-width\"])&&(F.on=!1);var H=M.getRGB(n.stroke);F.on&&n.stroke&&(F.color=H.hex),I=((+l[\"stroke-opacity\"]+1||2)-1)*((+l.opacity+1||2)-1)*((+H.o+1||2)-1);var U=.75*(e(n[\"stroke-width\"])||1);if(I=c(t(I,0),1),null==n[\"stroke-width\"]&&(U=l[\"stroke-width\"]),n[\"stroke-width\"]&&(F.weight=U),U&&U<1&&(I*=U)&&(F.weight=1),F.opacity=I,n[\"stroke-linejoin\"]&&(F.joinstyle=n[\"stroke-linejoin\"]||\"miter\"),F.miterlimit=n[\"stroke-miterlimit\"]||8,n[\"stroke-linecap\"]&&(F.endcap=\"butt\"==n[\"stroke-linecap\"]?\"flat\":\"square\"==n[\"stroke-linecap\"]?\"square\":\"round\"),\"stroke-dasharray\"in n){var Y={\"-\":\"shortdash\",\".\":\"shortdot\",\"-.\":\"shortdashdot\",\"-..\":\"shortdashdotdot\",\". \":\"dot\",\"- \":\"dash\",\"--\":\"longdash\",\"- .\":\"dashdot\",\"--.\":\"longdashdot\",\"--..\":\"longdashdotdot\"};F.dashstyle=Y[b](n[\"stroke-dasharray\"])?Y[n[\"stroke-dasharray\"]]:s}j&&r.appendChild(F)}if(\"text\"==y.type){y.paper.canvas.style.display=s;var G=y.paper.span,V=l.font&&l.font.match(/\\d+(?:\\.\\d*)?(?=px)/);u=G.style,l.font&&(u.font=l.font),l[\"font-family\"]&&(u.fontFamily=l[\"font-family\"]),l[\"font-weight\"]&&(u.fontWeight=l[\"font-weight\"]),l[\"font-style\"]&&(u.fontStyle=l[\"font-style\"]),V=e(l[\"font-size\"]||V&&V[0])||10,u.fontSize=100*V+\"px\",y.textpath.string&&(G.innerHTML=p(y.textpath.string).replace(/</g,\"&#60;\").replace(/&/g,\"&#38;\").replace(/\\n/g,\"<br>\"));var $=G.getBoundingClientRect();y.W=l.w=($.right-$.left)/100,y.H=l.h=($.bottom-$.top)/100,y.X=l.x,y.Y=l.y+y.H/2,(\"x\"in n||\"y\"in n)&&(y.path.v=M.format(\"m{0},{1}l{2},{1}\",z(l.x*f),z(l.y*f),z(l.x*f)+1));for(var K=[\"x\",\"y\",\"text\",\"font\",\"font-family\",\"font-weight\",\"font-style\",\"font-size\"],Q=0,J=K.length;Q<J;Q++)if(K[Q]in n){y._.dirty=1;break}switch(l[\"text-anchor\"]){case\"start\":y.textpath.style[\"v-text-align\"]=\"left\",y.bbx=y.W/2;break;case\"end\":y.textpath.style[\"v-text-align\"]=\"right\",y.bbx=-y.W/2;break;default:y.textpath.style[\"v-text-align\"]=\"center\",y.bbx=0}y.textpath.style[\"v-text-kern\"]=!0}},N=function(b,z,t){b.attrs=b.attrs||{};b.attrs;var c=Math.pow,n=\"linear\",O=\".5 .5\";if(b.attrs.gradient=z,z=(z=p(z).replace(M._radial_gradient,function(M,b,p){return n=\"radial\",b&&p&&(b=e(b),p=e(p),c(b-.5,2)+c(p-.5,2)>.25&&(p=o.sqrt(.25-c(b-.5,2))*(2*(p>.5)-1)+.5),O=b+a+p),s})).split(/\\s*\\-\\s*/),\"linear\"==n){var i=z.shift();if(i=-e(i),isNaN(i))return null}var r=M._parseDots(z);if(!r)return null;if(b=b.shape||b.node,r.length){b.removeChild(t),t.on=!0,t.method=\"none\",t.color=r[0].color,t.color2=r[r.length-1].color;for(var A=[],d=0,l=r.length;d<l;d++)r[d].offset&&A.push(r[d].offset+a+r[d].color);t.colors=A.length?A.join():\"0% \"+t.color,\"radial\"==n?(t.type=\"gradientTitle\",t.focus=\"100%\",t.focussize=\"0 0\",t.focusposition=O,t.angle=0):(t.type=\"gradient\",t.angle=(270-i)%360),b.appendChild(t)}return 1},y=function(b,p){this[0]=this.node=b,b.raphael=!0,this.id=M._oid++,b.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=p,this.matrix=M.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!p.bottom&&(p.bottom=this),this.prev=p.top,p.top&&(p.top.next=this),p.top=this,this.next=null},B=M.el;y.prototype=B,B.constructor=y,B.transform=function(b){if(null==b)return this._.transform;var e,o=this.paper._viewBoxShift,z=o?\"s\"+[o.scale,o.scale]+\"-1-1t\"+[o.dx,o.dy]:s;o&&(e=b=p(b).replace(/\\.{3}|\\u2026/g,this._.transform||s)),M._extractTransform(this,z+b);var t,c=this.matrix.clone(),n=this.skew,O=this.node,i=~p(this.attrs.fill).indexOf(\"-\"),r=!p(this.attrs.fill).indexOf(\"url(\");if(c.translate(1,1),r||i||\"image\"==this.type)if(n.matrix=\"1 0 0 1\",n.offset=\"0 0\",t=c.split(),i&&t.noRotation||!t.isSimple){O.style.filter=c.toFilter();var A=this.getBBox(),d=this.getBBox(1),l=A.x-d.x,q=A.y-d.y;O.coordorigin=l*-f+a+q*-f,m(this,1,1,l,q,0)}else O.style.filter=s,m(this,t.scalex,t.scaley,t.dx,t.dy,t.rotate);else O.style.filter=s,n.matrix=p(c),n.offset=c.offset();return null!==e&&(this._.transform=e,M._extractTransform(this,e)),this},B.rotate=function(M,b,o){if(this.removed)return this;if(null!=M){if((M=p(M).split(i)).length-1&&(b=e(M[1]),o=e(M[2])),M=e(M[0]),null==o&&(b=o),null==b||null==o){var z=this.getBBox(1);b=z.x+z.width/2,o=z.y+z.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([[\"r\",M,b,o]])),this}},B.translate=function(M,b){return this.removed||((M=p(M).split(i)).length-1&&(b=e(M[1])),M=e(M[0])||0,b=+b||0,this._.bbox&&(this._.bbox.x+=M,this._.bbox.y+=b),this.transform(this._.transform.concat([[\"t\",M,b]]))),this},B.scale=function(M,b,o,z){if(this.removed)return this;if((M=p(M).split(i)).length-1&&(b=e(M[1]),o=e(M[2]),z=e(M[3]),isNaN(o)&&(o=null),isNaN(z)&&(z=null)),M=e(M[0]),null==b&&(b=M),null==z&&(o=z),null==o||null==z)var t=this.getBBox(1);return o=null==o?t.x+t.width/2:o,z=null==z?t.y+t.height/2:z,this.transform(this._.transform.concat([[\"s\",M,b,o,z]])),this._.dirtyT=1,this},B.hide=function(){return!this.removed&&(this.node.style.display=\"none\"),this},B.show=function(){return!this.removed&&(this.node.style.display=s),this},B.auxGetBBox=M.el.getBBox,B.getBBox=function(){var M=this.auxGetBBox();if(this.paper&&this.paper._viewBoxShift){var b={},p=1/this.paper._viewBoxShift.scale;return b.x=M.x-this.paper._viewBoxShift.dx,b.x*=p,b.y=M.y-this.paper._viewBoxShift.dy,b.y*=p,b.width=M.width*p,b.height=M.height*p,b.x2=b.x+b.width,b.y2=b.y+b.height,b}return M},B._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},B.remove=function(){if(!this.removed&&this.node.parentNode){for(var b in this.paper.__set__&&this.paper.__set__.exclude(this),M.eve.unbind(\"raphael.*.*.\"+this.id),M._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape),this)this[b]=\"function\"==typeof this[b]?M._removedFactory(b):null;this.removed=!0}},B.attr=function(p,e){if(this.removed)return this;if(null==p){var o={};for(var z in this.attrs)this.attrs[b](z)&&(o[z]=this.attrs[z]);return o.gradient&&\"none\"==o.fill&&(o.fill=o.gradient)&&delete o.gradient,o.transform=this._.transform,o}if(null==e&&M.is(p,\"string\")){if(p==O&&\"none\"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var t=p.split(i),c={},n=0,a=t.length;n<a;n++)(p=t[n])in this.attrs?c[p]=this.attrs[p]:M.is(this.paper.customAttributes[p],\"function\")?c[p]=this.paper.customAttributes[p].def:c[p]=M._availableAttrs[p];return a-1?c:c[t[0]]}if(this.attrs&&null==e&&M.is(p,\"array\")){for(c={},n=0,a=p.length;n<a;n++)c[p[n]]=this.attr(p[n]);return c}var s;for(var A in null!=e&&((s={})[p]=e),null==e&&M.is(p,\"object\")&&(s=p),s)r(\"raphael.attr.\"+A+\".\"+this.id,this,s[A]);if(s){for(A in this.paper.customAttributes)if(this.paper.customAttributes[b](A)&&s[b](A)&&M.is(this.paper.customAttributes[A],\"function\")){var d=this.paper.customAttributes[A].apply(this,[].concat(s[A]));for(var l in this.attrs[A]=s[A],d)d[b](l)&&(s[l]=d[l])}s.text&&\"text\"==this.type&&(this.textpath.string=s.text),v(this,s)}return this},B.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&M._tofront(this,this.paper),this},B.toBack=function(){return this.removed||this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),M._toback(this,this.paper)),this},B.insertAfter=function(b){return this.removed||(b.constructor==M.st.constructor&&(b=b[b.length-1]),b.node.nextSibling?b.node.parentNode.insertBefore(this.node,b.node.nextSibling):b.node.parentNode.appendChild(this.node),M._insertafter(this,b,this.paper)),this},B.insertBefore=function(b){return this.removed||(b.constructor==M.st.constructor&&(b=b[0]),b.node.parentNode.insertBefore(this.node,b.node),M._insertbefore(this,b,this.paper)),this},B.blur=function(b){var p=this.node.runtimeStyle,e=p.filter;return e=e.replace(l,s),0!==+b?(this.attrs.blur=b,p.filter=e+a+\" progid:DXImageTransform.Microsoft.Blur(pixelradius=\"+(+b||1.5)+\")\",p.margin=M.format(\"-{0}px 0 0 -{0}px\",z(+b||1.5))):(p.filter=e,p.margin=0,delete this.attrs.blur),this},M._engine.path=function(M,b){var p=g(\"shape\");p.style.cssText=u,p.coordsize=f+a+f,p.coordorigin=b.coordorigin;var e=new y(p,b),o={fill:\"none\",stroke:\"#000\"};M&&(o.path=M),e.type=\"path\",e.path=[],e.Path=s,v(e,o),b.canvas&&b.canvas.appendChild(p);var z=g(\"skew\");return z.on=!0,p.appendChild(z),e.skew=z,e.transform(s),e},M._engine.rect=function(b,p,e,o,z,t){var c=M._rectPath(p,e,o,z,t),n=b.path(c),O=n.attrs;return n.X=O.x=p,n.Y=O.y=e,n.W=O.width=o,n.H=O.height=z,O.r=t,O.path=c,n.type=\"rect\",n},M._engine.ellipse=function(M,b,p,e,o){var z=M.path();z.attrs;return z.X=b-e,z.Y=p-o,z.W=2*e,z.H=2*o,z.type=\"ellipse\",v(z,{cx:b,cy:p,rx:e,ry:o}),z},M._engine.circle=function(M,b,p,e){var o=M.path();o.attrs;return o.X=b-e,o.Y=p-e,o.W=o.H=2*e,o.type=\"circle\",v(o,{cx:b,cy:p,r:e}),o},M._engine.image=function(b,p,e,o,z,t){var c=M._rectPath(e,o,z,t),n=b.path(c).attr({stroke:\"none\"}),i=n.attrs,r=n.node,a=r.getElementsByTagName(O)[0];return i.src=p,n.X=i.x=e,n.Y=i.y=o,n.W=i.width=z,n.H=i.height=t,i.path=c,n.type=\"image\",a.parentNode==r&&r.removeChild(a),a.rotate=!0,a.src=p,a.type=\"tile\",n._.fillpos=[e,o],n._.fillsize=[z,t],r.appendChild(a),m(n,1,1,0,0,0),n},M._engine.text=function(b,e,o,t){var c=g(\"shape\"),n=g(\"path\"),O=g(\"textpath\");e=e||0,o=o||0,t=t||\"\",n.v=M.format(\"m{0},{1}l{2},{1}\",z(e*f),z(o*f),z(e*f)+1),n.textpathok=!0,O.string=p(t),O.on=!0,c.style.cssText=u,c.coordsize=f+a+f,c.coordorigin=\"0 0\";var i=new y(c,b),r={fill:\"#000\",stroke:\"none\",font:M._availableAttrs.font,text:t};i.shape=c,i.path=n,i.textpath=O,i.type=\"text\",i.attrs.text=p(t),i.attrs.x=e,i.attrs.y=o,i.attrs.w=1,i.attrs.h=1,v(i,r),c.appendChild(O),c.appendChild(n),b.canvas.appendChild(c);var A=g(\"skew\");return A.on=!0,c.appendChild(A),i.skew=A,i.transform(s),i},M._engine.setSize=function(b,p){var e=this.canvas.style;return this.width=b,this.height=p,b==+b&&(b+=\"px\"),p==+p&&(p+=\"px\"),e.width=b,e.height=p,e.clip=\"rect(0 \"+b+\" \"+p+\" 0)\",this._viewBox&&M._engine.setViewBox.apply(this,this._viewBox),this},M._engine.setViewBox=function(b,p,e,o,z){M.eve(\"raphael.setViewBox\",this,this._viewBox,[b,p,e,o,z]);var t,c,n=this.getSize(),O=n.width,i=n.height;return z&&(e*(t=i/o)<O&&(b-=(O-e*t)/2/t),o*(c=O/e)<i&&(p-=(i-o*c)/2/c)),this._viewBox=[b,p,e,o,!!z],this._viewBoxShift={dx:-b,dy:-p,scale:n},this.forEach(function(M){M.transform(\"...\")}),this},M._engine.initWin=function(M){var b=M.document;b.styleSheets.length<31?b.createStyleSheet().addRule(\".rvml\",\"behavior:url(#default#VML)\"):b.styleSheets[0].addRule(\".rvml\",\"behavior:url(#default#VML)\");try{!b.namespaces.rvml&&b.namespaces.add(\"rvml\",\"urn:schemas-microsoft-com:vml\"),g=function(M){return b.createElement(\"<rvml:\"+M+' class=\"rvml\">')}}catch(M){g=function(M){return b.createElement(\"<\"+M+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">')}}},M._engine.initWin(M._g.win),M._engine.create=function(){var b=M._getContainer.apply(0,arguments),p=b.container,e=b.height,o=b.width,z=b.x,t=b.y;if(!p)throw new Error(\"VML container not found.\");var c=new M._Paper,n=c.canvas=M._g.doc.createElement(\"div\"),O=n.style;return z=z||0,t=t||0,o=o||512,e=e||342,c.width=o,c.height=e,o==+o&&(o+=\"px\"),e==+e&&(e+=\"px\"),c.coordsize=\"21600000 21600000\",c.coordorigin=\"0 0\",c.span=M._g.doc.createElement(\"span\"),c.span.style.cssText=\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;\",n.appendChild(c.span),O.cssText=M.format(\"top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden\",o,e),1==p?(M._g.doc.body.appendChild(n),O.left=z+\"px\",O.top=t+\"px\",O.position=\"absolute\"):p.firstChild?p.insertBefore(n,p.firstChild):p.appendChild(n),c.renderfix=function(){},c},M.prototype.clear=function(){M.eve(\"raphael.clear\",this),this.canvas.innerHTML=s,this.span=M._g.doc.createElement(\"span\"),this.span.style.cssText=\"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;\",this.canvas.appendChild(this.span),this.bottom=this.top=null},M.prototype.remove=function(){for(var b in M.eve(\"raphael.remove\",this),this.canvas.parentNode.removeChild(this.canvas),this)this[b]=\"function\"==typeof this[b]?M._removedFactory(b):null;return!0};var X=M.st;for(var w in B)B[b](w)&&!X[b](w)&&(X[w]=function(M){return function(){var b=arguments;return this.forEach(function(p){p[M].apply(p,b)})}}(w))}}.apply(b,e),void 0===o||(M.exports=o)}])}),function(M){M.color={},M.color.make=function(b,p,e,o){var z={};return z.r=b||0,z.g=p||0,z.b=e||0,z.a=null!=o?o:1,z.add=function(M,b){for(var p=0;p<M.length;++p)z[M.charAt(p)]+=b;return z.normalize()},z.scale=function(M,b){for(var p=0;p<M.length;++p)z[M.charAt(p)]*=b;return z.normalize()},z.toString=function(){return z.a>=1?\"rgb(\"+[z.r,z.g,z.b].join(\",\")+\")\":\"rgba(\"+[z.r,z.g,z.b,z.a].join(\",\")+\")\"},z.normalize=function(){function M(M,b,p){return b<M?M:b>p?p:b}return z.r=M(0,parseInt(z.r),255),z.g=M(0,parseInt(z.g),255),z.b=M(0,parseInt(z.b),255),z.a=M(0,z.a,1),z},z.clone=function(){return M.color.make(z.r,z.b,z.g,z.a)},z.normalize()},M.color.extract=function(b,p){var e;do{if(\"\"!=(e=b.css(p).toLowerCase())&&\"transparent\"!=e)break;b=b.parent()}while(!M.nodeName(b.get(0),\"body\"));return\"rgba(0, 0, 0, 0)\"==e&&(e=\"transparent\"),M.color.parse(e)},M.color.parse=function(p){var e,o=M.color.make;if(e=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(p))return o(parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3],10));if(e=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(p))return o(parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3],10),parseFloat(e[4]));if(e=/rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(p))return o(2.55*parseFloat(e[1]),2.55*parseFloat(e[2]),2.55*parseFloat(e[3]));if(e=/rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(p))return o(2.55*parseFloat(e[1]),2.55*parseFloat(e[2]),2.55*parseFloat(e[3]),parseFloat(e[4]));if(e=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(p))return o(parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16));if(e=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(p))return o(parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16));var z=M.trim(p).toLowerCase();return\"transparent\"==z?o(255,255,255,0):o((e=b[z]||[0,0,0])[0],e[1],e[2])};var b={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}}(jQuery),function(M){var b=Object.prototype.hasOwnProperty;function p(b,p){var e=p.children(\".\"+b)[0];if(null==e&&((e=document.createElement(\"canvas\")).className=b,M(e).css({direction:\"ltr\",position:\"absolute\",left:0,top:0}).appendTo(p),!e.getContext)){if(!window.G_vmlCanvasManager)throw new Error(\"Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.\");e=window.G_vmlCanvasManager.initElement(e)}this.element=e;var o=this.context=e.getContext(\"2d\"),z=window.devicePixelRatio||1,t=o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1;this.pixelRatio=z/t,this.resize(p.width(),p.height()),this.textContainer=null,this.text={},this._textCache={}}function e(b,e,o,z){var t=[],c={colors:[\"#edc240\",\"#afd8f8\",\"#cb4b4b\",\"#4da74d\",\"#9440ed\"],legend:{show:!0,noColumns:1,labelFormatter:null,labelBoxBorderColor:\"#ccc\",container:null,position:\"ne\",margin:5,backgroundColor:null,backgroundOpacity:.85,sorted:null},xaxis:{show:null,position:\"bottom\",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:\"left\"},xaxes:[],yaxes:[],series:{points:{show:!1,radius:3,lineWidth:2,fill:!0,fillColor:\"#ffffff\",symbol:\"circle\"},lines:{lineWidth:2,fill:!1,fillColor:null,steps:!1},bars:{show:!1,lineWidth:2,barWidth:1,fill:!0,fillColor:null,align:\"left\",horizontal:!1,zero:!0},shadowSize:3,highlightColor:null},grid:{show:!0,aboveData:!1,color:\"#545454\",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:\"#f4f4f4\",markingsLineWidth:2,clickable:!1,hoverable:!1,autoHighlight:!0,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1e3/60},hooks:{}},n=null,O=null,i=null,r=null,a=null,s=[],A=[],d={left:0,right:0,top:0,bottom:0},l=0,q=0,u={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},f=this;function W(M,b){b=[f].concat(b);for(var p=0;p<M.length;++p)M[p].apply(this,b)}function h(b){t=function(b){for(var p=[],e=0;e<b.length;++e){var o=M.extend(!0,{},c.series);null!=b[e].data?(o.data=b[e].data,delete b[e].data,M.extend(!0,o,b[e]),b[e].data=o.data):o.data=b[e],p.push(o)}return p}(b),function(){var b,p=t.length,e=-1;for(b=0;b<t.length;++b){var o=t[b].color;null!=o&&(p--,\"number\"==typeof o&&o>e&&(e=o))}p<=e&&(p=e+1);var z,n=[],O=c.colors,i=O.length,r=0;for(b=0;b<p;b++)z=M.color.parse(O[b%i]||\"#666\"),b%i==0&&b&&(r=r>=0?r<.5?-r-.2:0:-r),n[b]=z.scale(\"rgb\",1+r);var a,d=0;for(b=0;b<t.length;++b){if(null==(a=t[b]).color?(a.color=n[d].toString(),++d):\"number\"==typeof a.color&&(a.color=n[a.color].toString()),null==a.lines.show){var l,q=!0;for(l in a)if(a[l]&&a[l].show){q=!1;break}q&&(a.lines.show=!0)}null==a.lines.zero&&(a.lines.zero=!!a.lines.fill),a.xaxis=L(s,R(a,\"x\")),a.yaxis=L(A,R(a,\"y\"))}}(),function(){var b,p,e,o,z,c,n,O,i,r,a,s,A=Number.POSITIVE_INFINITY,d=Number.NEGATIVE_INFINITY,l=Number.MAX_VALUE;function q(M,b,p){b<M.datamin&&b!=-l&&(M.datamin=b),p>M.datamax&&p!=l&&(M.datamax=p)}for(M.each(m(),function(M,b){b.datamin=A,b.datamax=d,b.used=!1}),b=0;b<t.length;++b)(z=t[b]).datapoints={points:[]},W(u.processRawData,[z,z.data,z.datapoints]);for(b=0;b<t.length;++b){if(a=(z=t[b]).data,!(s=z.datapoints.format)){if((s=[]).push({x:!0,number:!0,required:!0}),s.push({y:!0,number:!0,required:!0}),z.bars.show||z.lines.show&&z.lines.fill){var f=!!(z.bars.show&&z.bars.zero||z.lines.show&&z.lines.zero);s.push({y:!0,number:!0,required:!1,defaultValue:0,autoscale:f}),z.bars.horizontal&&(delete s[s.length-1].y,s[s.length-1].x=!0)}z.datapoints.format=s}if(null==z.datapoints.pointsize){z.datapoints.pointsize=s.length,n=z.datapoints.pointsize,c=z.datapoints.points;var h=z.lines.show&&z.lines.steps;for(z.xaxis.used=z.yaxis.used=!0,p=e=0;p<a.length;++p,e+=n){var R=null==(r=a[p]);if(!R)for(o=0;o<n;++o)O=r[o],(i=s[o])&&(i.number&&null!=O&&(O=+O,isNaN(O)?O=null:O==1/0?O=l:O==-1/0&&(O=-l)),null==O&&(i.required&&(R=!0),null!=i.defaultValue&&(O=i.defaultValue))),c[e+o]=O;if(R)for(o=0;o<n;++o)null!=(O=c[e+o])&&(i=s[o]).autoscale&&(i.x&&q(z.xaxis,O,O),i.y&&q(z.yaxis,O,O)),c[e+o]=null;else if(h&&e>0&&null!=c[e-n]&&c[e-n]!=c[e]&&c[e-n+1]!=c[e+1]){for(o=0;o<n;++o)c[e+n+o]=c[e+o];c[e+1]=c[e-n+1],e+=n}}}}for(b=0;b<t.length;++b)z=t[b],W(u.processDatapoints,[z,z.datapoints]);for(b=0;b<t.length;++b){c=(z=t[b]).datapoints.points,n=z.datapoints.pointsize,s=z.datapoints.format;var g=A,L=A,v=d,N=d;for(p=0;p<c.length;p+=n)if(null!=c[p])for(o=0;o<n;++o)O=c[p+o],(i=s[o])&&!1!==i.autoscale&&O!=l&&O!=-l&&(i.x&&(O<g&&(g=O),O>v&&(v=O)),i.y&&(O<L&&(L=O),O>N&&(N=O)));if(z.bars.show){var y;switch(z.bars.align){case\"left\":y=0;break;case\"right\":y=-z.bars.barWidth;break;case\"center\":y=-z.bars.barWidth/2;break;default:throw new Error(\"Invalid bar alignment: \"+z.bars.align)}z.bars.horizontal?(L+=y,N+=y+z.bars.barWidth):(g+=y,v+=y+z.bars.barWidth)}q(z.xaxis,g,v),q(z.yaxis,L,N)}M.each(m(),function(M,b){b.datamin==A&&(b.datamin=null),b.datamax==d&&(b.datamax=null)})}()}function R(M,b){var p=M[b+\"axis\"];return\"object\"==typeof p&&(p=p.n),\"number\"!=typeof p&&(p=1),p}function m(){return M.grep(s.concat(A),function(M){return M})}function g(M){var b,p,e={};for(b=0;b<s.length;++b)(p=s[b])&&p.used&&(e[\"x\"+p.n]=p.c2p(M.left));for(b=0;b<A.length;++b)(p=A[b])&&p.used&&(e[\"y\"+p.n]=p.c2p(M.top));return void 0!==e.x1&&(e.x=e.x1),void 0!==e.y1&&(e.y=e.y1),e}function L(b,p){return b[p-1]||(b[p-1]={n:p,direction:b==s?\"x\":\"y\",options:M.extend(!0,{},b==s?c.xaxis:c.yaxis)}),b[p-1]}function v(b){var p,e=b.labelWidth,o=b.labelHeight,z=b.options.position,t=b.options.tickLength,O=c.grid.axisMargin,i=c.grid.labelMargin,r=\"x\"==b.direction?s:A,a=M.grep(r,function(M){return M&&M.options.position==z&&M.reserveSpace});M.inArray(b,a)==a.length-1&&(O=0),p=0==M.inArray(b,a),null==t&&(t=p?\"full\":5),isNaN(+t)||(i+=+t),\"x\"==b.direction?(o+=i,\"bottom\"==z?(d.bottom+=o+O,b.box={top:n.height-d.bottom,height:o}):(b.box={top:d.top+O,height:o},d.top+=o+O)):(e+=i,\"left\"==z?(b.box={left:d.left+O,width:e},d.left+=e+O):(d.right+=e+O,b.box={left:n.width-d.right,width:e})),b.position=z,b.tickLength=t,b.box.padding=i,b.innermost=p}function N(){var p,e=m(),o=c.grid.show;for(var z in d){var O=c.grid.margin||0;d[z]=\"number\"==typeof O?O:O[z]||0}for(var z in W(u.processOffset,[d]),d)\"object\"==typeof c.grid.borderWidth?d[z]+=o?c.grid.borderWidth[z]:0:d[z]+=o?c.grid.borderWidth:0;if(M.each(e,function(M,b){b.show=b.options.show,null==b.show&&(b.show=b.used),b.reserveSpace=b.show||b.options.reserveSpace,function(M){var b=M.options,p=+(null!=b.min?b.min:M.datamin),e=+(null!=b.max?b.max:M.datamax),o=e-p;if(0==o){var z=0==e?1:.01;null==b.min&&(p-=z),null!=b.max&&null==b.min||(e+=z)}else{var t=b.autoscaleMargin;null!=t&&(null==b.min&&(p-=o*t)<0&&null!=M.datamin&&M.datamin>=0&&(p=0),null==b.max&&(e+=o*t)>0&&null!=M.datamax&&M.datamax<=0&&(e=0))}M.min=p,M.max=e}(b)}),o){var i=M.grep(e,function(M){return M.reserveSpace});for(M.each(i,function(b,p){!function(b){var p,e=b.options;p=\"number\"==typeof e.ticks&&e.ticks>0?e.ticks:.3*Math.sqrt(\"x\"==b.direction?n.width:n.height);var o=(b.max-b.min)/p,z=-Math.floor(Math.log(o)/Math.LN10),t=e.tickDecimals;null!=t&&z>t&&(z=t);var c,O=Math.pow(10,-z),i=o/O;i<1.5?c=1:i<3?(c=2,i>2.25&&(null==t||z+1<=t)&&(c=2.5,++z)):c=i<7.5?5:10;c*=O,null!=e.minTickSize&&c<e.minTickSize&&(c=e.minTickSize);if(b.delta=o,b.tickDecimals=Math.max(0,null!=t?t:z),b.tickSize=e.tickSize||c,\"time\"==e.mode&&!b.tickGenerator)throw new Error(\"Time mode requires the flot.time plugin.\");b.tickGenerator||(b.tickGenerator=function(M){var b,p,e,o=[],z=(p=M.min,(e=M.tickSize)*Math.floor(p/e)),t=0,c=Number.NaN;do{b=c,c=z+t*M.tickSize,o.push(c),++t}while(c<M.max&&c!=b);return o},b.tickFormatter=function(M,b){var p=b.tickDecimals?Math.pow(10,b.tickDecimals):1,e=\"\"+Math.round(M*p)/p;if(null!=b.tickDecimals){var o=e.indexOf(\".\"),z=-1==o?0:e.length-o-1;if(z<b.tickDecimals)return(z?e:e+\".\")+(\"\"+p).substr(1,b.tickDecimals-z)}return e});M.isFunction(e.tickFormatter)&&(b.tickFormatter=function(M,b){return\"\"+e.tickFormatter(M,b)});if(null!=e.alignTicksWithAxis){var r=(\"x\"==b.direction?s:A)[e.alignTicksWithAxis-1];if(r&&r.used&&r!=b){var a=b.tickGenerator(b);if(a.length>0&&(null==e.min&&(b.min=Math.min(b.min,a[0])),null==e.max&&a.length>1&&(b.max=Math.max(b.max,a[a.length-1]))),b.tickGenerator=function(M){var b,p,e=[];for(p=0;p<r.ticks.length;++p)b=(r.ticks[p].v-r.min)/(r.max-r.min),b=M.min+b*(M.max-M.min),e.push(b);return e},!b.mode&&null==e.tickDecimals){var d=Math.max(0,1-Math.floor(Math.log(b.delta)/Math.LN10)),l=b.tickGenerator(b);l.length>1&&/\\..*0$/.test((l[1]-l[0]).toFixed(d))||(b.tickDecimals=d)}}}}(p),function(b){var p,e,o=b.options.ticks,z=[];null==o||\"number\"==typeof o&&o>0?z=b.tickGenerator(b):o&&(z=M.isFunction(o)?o(b):o);for(b.ticks=[],p=0;p<z.length;++p){var t=null,c=z[p];\"object\"==typeof c?(e=+c[0],c.length>1&&(t=c[1])):e=+c,null==t&&(t=b.tickFormatter(e,b)),isNaN(e)||b.ticks.push({v:e,label:t})}}(p),function(M,b){M.options.autoscaleMargin&&b.length>0&&(null==M.options.min&&(M.min=Math.min(M.min,b[0].v)),null==M.options.max&&b.length>1&&(M.max=Math.max(M.max,b[b.length-1].v)))}(p,p.ticks),function(M){for(var b=M.options,p=M.ticks||[],e=b.labelWidth||0,o=b.labelHeight||0,z=e||\"x\"==M.direction?Math.floor(n.width/(p.length||1)):null,t=M.direction+\"Axis \"+M.direction+M.n+\"Axis\",c=\"flot-\"+M.direction+\"-axis flot-\"+M.direction+M.n+\"-axis \"+t,O=b.font||\"flot-tick-label tickLabel\",i=0;i<p.length;++i){var r=p[i];if(r.label){var a=n.getTextInfo(c,r.label,O,null,z);e=Math.max(e,a.width),o=Math.max(o,a.height)}}M.labelWidth=b.labelWidth||e,M.labelHeight=b.labelHeight||o}(p)}),p=i.length-1;p>=0;--p)v(i[p]);!function(){var b,p=c.grid.minBorderMargin,e={x:0,y:0};if(null==p)for(p=0,b=0;b<t.length;++b)p=Math.max(p,2*(t[b].points.radius+t[b].points.lineWidth/2));e.x=e.y=Math.ceil(p),M.each(m(),function(M,b){var p=b.direction;b.reserveSpace&&(e[p]=Math.ceil(Math.max(e[p],(\"x\"==p?b.labelWidth:b.labelHeight)/2)))}),d.left=Math.max(e.x,d.left),d.right=Math.max(e.x,d.right),d.top=Math.max(e.y,d.top),d.bottom=Math.max(e.y,d.bottom)}(),M.each(i,function(M,b){!function(M){\"x\"==M.direction?(M.box.left=d.left-M.labelWidth/2,M.box.width=n.width-d.left-d.right+M.labelWidth):(M.box.top=d.top-M.labelHeight/2,M.box.height=n.height-d.bottom-d.top+M.labelHeight)}(b)})}l=n.width-d.left-d.right,q=n.height-d.bottom-d.top,M.each(e,function(M,b){!function(M){function b(M){return M}var p,e,o=M.options.transform||b,z=M.options.inverseTransform;\"x\"==M.direction?(p=M.scale=l/Math.abs(o(M.max)-o(M.min)),e=Math.min(o(M.max),o(M.min))):(p=-(p=M.scale=q/Math.abs(o(M.max)-o(M.min))),e=Math.max(o(M.max),o(M.min))),M.p2c=o==b?function(M){return(M-e)*p}:function(M){return(o(M)-e)*p},M.c2p=z?function(M){return z(e+M/p)}:function(M){return e+M/p}}(b)}),o&&M.each(m(),function(M,b){if(b.show&&0!=b.ticks.length){var p,e,o,z,t,c=b.box,O=b.direction+\"Axis \"+b.direction+b.n+\"Axis\",i=\"flot-\"+b.direction+\"-axis flot-\"+b.direction+b.n+\"-axis \"+O,r=b.options.font||\"flot-tick-label tickLabel\";n.removeText(i);for(var a=0;a<b.ticks.length;++a)!(p=b.ticks[a]).label||p.v<b.min||p.v>b.max||(\"x\"==b.direction?(z=\"center\",e=d.left+b.p2c(p.v),\"bottom\"==b.position?o=c.top+c.padding:(o=c.top+c.height-c.padding,t=\"bottom\")):(t=\"middle\",o=d.top+b.p2c(p.v),\"left\"==b.position?(e=c.left+c.width-c.padding,z=\"right\"):e=c.left+c.padding),n.addText(i,e,o,p.label,r,null,null,z,t))}}),function(){if(b.find(\".legend\").remove(),!c.legend.show)return;for(var p,e,o=[],z=[],n=!1,O=c.legend.labelFormatter,i=0;i<t.length;++i)(p=t[i]).label&&(e=O?O(p.label,p):p.label)&&z.push({label:e,color:p.color});if(c.legend.sorted)if(M.isFunction(c.legend.sorted))z.sort(c.legend.sorted);else if(\"reverse\"==c.legend.sorted)z.reverse();else{var r=\"descending\"!=c.legend.sorted;z.sort(function(M,b){return M.label==b.label?0:M.label<b.label!=r?1:-1})}for(i=0;i<z.length;++i){var a=z[i];i%c.legend.noColumns==0&&(n&&o.push(\"</tr>\"),o.push(\"<tr>\"),n=!0),o.push('<td class=\"legendColorBox\"><div style=\"border:1px solid '+c.legend.labelBoxBorderColor+';padding:1px\"><div style=\"width:4px;height:0;border:5px solid '+a.color+';overflow:hidden\"></div></div></td><td class=\"legendLabel\">'+a.label+\"</td>\")}n&&o.push(\"</tr>\");if(0==o.length)return;var s='<table style=\"font-size:smaller;color:'+c.grid.color+'\">'+o.join(\"\")+\"</table>\";if(null!=c.legend.container)M(c.legend.container).html(s);else{var A=\"\",l=c.legend.position,q=c.legend.margin;null==q[0]&&(q=[q,q]),\"n\"==l.charAt(0)?A+=\"top:\"+(q[1]+d.top)+\"px;\":\"s\"==l.charAt(0)&&(A+=\"bottom:\"+(q[1]+d.bottom)+\"px;\"),\"e\"==l.charAt(1)?A+=\"right:\"+(q[0]+d.right)+\"px;\":\"w\"==l.charAt(1)&&(A+=\"left:\"+(q[0]+d.left)+\"px;\");var u=M('<div class=\"legend\">'+s.replace('style=\"','style=\"position:absolute;'+A+\";\")+\"</div>\").appendTo(b);if(0!=c.legend.backgroundOpacity){var f=c.legend.backgroundColor;null==f&&((f=(f=c.grid.backgroundColor)&&\"string\"==typeof f?M.color.parse(f):M.color.extract(u,\"background-color\")).a=1,f=f.toString());var W=u.children();M('<div style=\"position:absolute;width:'+W.width()+\"px;height:\"+W.height()+\"px;\"+A+\"background-color:\"+f+';\"> </div>').prependTo(u).css(\"opacity\",c.legend.backgroundOpacity)}}}()}function y(){n.clear(),W(u.drawBackground,[r]);var M=c.grid;M.show&&M.backgroundColor&&(r.save(),r.translate(d.left,d.top),r.fillStyle=G(c.grid.backgroundColor,q,0,\"rgba(255, 255, 255, 0)\"),r.fillRect(0,0,l,q),r.restore()),M.show&&!M.aboveData&&X();for(var b=0;b<t.length;++b)W(u.drawSeries,[r,t[b]]),w(t[b]);W(u.draw,[r]),M.show&&M.aboveData&&X(),n.render(),P()}function B(M,b){for(var p,e,o,z,t=m(),c=0;c<t.length;++c)if((p=t[c]).direction==b&&(M[z=b+p.n+\"axis\"]||1!=p.n||(z=b+\"axis\"),M[z])){e=M[z].from,o=M[z].to;break}if(M[z]||(p=\"x\"==b?s[0]:A[0],e=M[b+\"1\"],o=M[b+\"2\"]),null!=e&&null!=o&&e>o){var n=e;e=o,o=n}return{from:e,to:o,axis:p}}function X(){var b,p,e,o;r.save(),r.translate(d.left,d.top);var z=c.grid.markings;if(z)for(M.isFunction(z)&&((p=f.getAxes()).xmin=p.xaxis.min,p.xmax=p.xaxis.max,p.ymin=p.yaxis.min,p.ymax=p.yaxis.max,z=z(p)),b=0;b<z.length;++b){var t=z[b],n=B(t,\"x\"),O=B(t,\"y\");null==n.from&&(n.from=n.axis.min),null==n.to&&(n.to=n.axis.max),null==O.from&&(O.from=O.axis.min),null==O.to&&(O.to=O.axis.max),n.to<n.axis.min||n.from>n.axis.max||O.to<O.axis.min||O.from>O.axis.max||(n.from=Math.max(n.from,n.axis.min),n.to=Math.min(n.to,n.axis.max),O.from=Math.max(O.from,O.axis.min),O.to=Math.min(O.to,O.axis.max),n.from==n.to&&O.from==O.to||(n.from=n.axis.p2c(n.from),n.to=n.axis.p2c(n.to),O.from=O.axis.p2c(O.from),O.to=O.axis.p2c(O.to),n.from==n.to||O.from==O.to?(r.beginPath(),r.strokeStyle=t.color||c.grid.markingsColor,r.lineWidth=t.lineWidth||c.grid.markingsLineWidth,r.moveTo(n.from,O.from),r.lineTo(n.to,O.to),r.stroke()):(r.fillStyle=t.color||c.grid.markingsColor,r.fillRect(n.from,O.to,n.to-n.from,O.from-O.to))))}p=m(),e=c.grid.borderWidth;for(var i=0;i<p.length;++i){var a,s,A,u,W=p[i],h=W.box,R=W.tickLength;if(W.show&&0!=W.ticks.length){for(r.lineWidth=1,\"x\"==W.direction?(a=0,s=\"full\"==R?\"top\"==W.position?0:q:h.top-d.top+(\"top\"==W.position?h.height:0)):(s=0,a=\"full\"==R?\"left\"==W.position?0:l:h.left-d.left+(\"left\"==W.position?h.width:0)),W.innermost||(r.strokeStyle=W.options.color,r.beginPath(),A=u=0,\"x\"==W.direction?A=l+1:u=q+1,1==r.lineWidth&&(\"x\"==W.direction?s=Math.floor(s)+.5:a=Math.floor(a)+.5),r.moveTo(a,s),r.lineTo(a+A,s+u),r.stroke()),r.strokeStyle=W.options.tickColor,r.beginPath(),b=0;b<W.ticks.length;++b){var g=W.ticks[b].v;A=u=0,isNaN(g)||g<W.min||g>W.max||\"full\"==R&&(\"object\"==typeof e&&e[W.position]>0||e>0)&&(g==W.min||g==W.max)||(\"x\"==W.direction?(a=W.p2c(g),u=\"full\"==R?-q:R,\"top\"==W.position&&(u=-u)):(s=W.p2c(g),A=\"full\"==R?-l:R,\"left\"==W.position&&(A=-A)),1==r.lineWidth&&(\"x\"==W.direction?a=Math.floor(a)+.5:s=Math.floor(s)+.5),r.moveTo(a,s),r.lineTo(a+A,s+u))}r.stroke()}}e&&(o=c.grid.borderColor,\"object\"==typeof e||\"object\"==typeof o?(\"object\"!=typeof e&&(e={top:e,right:e,bottom:e,left:e}),\"object\"!=typeof o&&(o={top:o,right:o,bottom:o,left:o}),e.top>0&&(r.strokeStyle=o.top,r.lineWidth=e.top,r.beginPath(),r.moveTo(0-e.left,0-e.top/2),r.lineTo(l,0-e.top/2),r.stroke()),e.right>0&&(r.strokeStyle=o.right,r.lineWidth=e.right,r.beginPath(),r.moveTo(l+e.right/2,0-e.top),r.lineTo(l+e.right/2,q),r.stroke()),e.bottom>0&&(r.strokeStyle=o.bottom,r.lineWidth=e.bottom,r.beginPath(),r.moveTo(l+e.right,q+e.bottom/2),r.lineTo(0,q+e.bottom/2),r.stroke()),e.left>0&&(r.strokeStyle=o.left,r.lineWidth=e.left,r.beginPath(),r.moveTo(0-e.left/2,q+e.bottom),r.lineTo(0-e.left/2,0),r.stroke())):(r.lineWidth=e,r.strokeStyle=c.grid.borderColor,r.strokeRect(-e/2,-e/2,l+e,q+e))),r.restore()}function w(M){M.lines.show&&function(M){function b(M,b,p,e,o){var z=M.points,t=M.pointsize,c=null,n=null;r.beginPath();for(var O=t;O<z.length;O+=t){var i=z[O-t],a=z[O-t+1],s=z[O],A=z[O+1];if(null!=i&&null!=s){if(a<=A&&a<o.min){if(A<o.min)continue;i=(o.min-a)/(A-a)*(s-i)+i,a=o.min}else if(A<=a&&A<o.min){if(a<o.min)continue;s=(o.min-a)/(A-a)*(s-i)+i,A=o.min}if(a>=A&&a>o.max){if(A>o.max)continue;i=(o.max-a)/(A-a)*(s-i)+i,a=o.max}else if(A>=a&&A>o.max){if(a>o.max)continue;s=(o.max-a)/(A-a)*(s-i)+i,A=o.max}if(i<=s&&i<e.min){if(s<e.min)continue;a=(e.min-i)/(s-i)*(A-a)+a,i=e.min}else if(s<=i&&s<e.min){if(i<e.min)continue;A=(e.min-i)/(s-i)*(A-a)+a,s=e.min}if(i>=s&&i>e.max){if(s>e.max)continue;a=(e.max-i)/(s-i)*(A-a)+a,i=e.max}else if(s>=i&&s>e.max){if(i>e.max)continue;A=(e.max-i)/(s-i)*(A-a)+a,s=e.max}i==c&&a==n||r.moveTo(e.p2c(i)+b,o.p2c(a)+p),c=s,n=A,r.lineTo(e.p2c(s)+b,o.p2c(A)+p)}}r.stroke()}function p(M,b,p){for(var e=M.points,o=M.pointsize,z=Math.min(Math.max(0,p.min),p.max),t=0,c=!1,n=1,O=0,i=0;!(o>0&&t>e.length+o);){var a=e[(t+=o)-o],s=e[t-o+n],A=e[t],d=e[t+n];if(c){if(o>0&&null!=a&&null==A){i=t,o=-o,n=2;continue}if(o<0&&t==O+o){r.fill(),c=!1,n=1,t=O=i+(o=-o);continue}}if(null!=a&&null!=A){if(a<=A&&a<b.min){if(A<b.min)continue;s=(b.min-a)/(A-a)*(d-s)+s,a=b.min}else if(A<=a&&A<b.min){if(a<b.min)continue;d=(b.min-a)/(A-a)*(d-s)+s,A=b.min}if(a>=A&&a>b.max){if(A>b.max)continue;s=(b.max-a)/(A-a)*(d-s)+s,a=b.max}else if(A>=a&&A>b.max){if(a>b.max)continue;d=(b.max-a)/(A-a)*(d-s)+s,A=b.max}if(c||(r.beginPath(),r.moveTo(b.p2c(a),p.p2c(z)),c=!0),s>=p.max&&d>=p.max)r.lineTo(b.p2c(a),p.p2c(p.max)),r.lineTo(b.p2c(A),p.p2c(p.max));else if(s<=p.min&&d<=p.min)r.lineTo(b.p2c(a),p.p2c(p.min)),r.lineTo(b.p2c(A),p.p2c(p.min));else{var l=a,q=A;s<=d&&s<p.min&&d>=p.min?(a=(p.min-s)/(d-s)*(A-a)+a,s=p.min):d<=s&&d<p.min&&s>=p.min&&(A=(p.min-s)/(d-s)*(A-a)+a,d=p.min),s>=d&&s>p.max&&d<=p.max?(a=(p.max-s)/(d-s)*(A-a)+a,s=p.max):d>=s&&d>p.max&&s<=p.max&&(A=(p.max-s)/(d-s)*(A-a)+a,d=p.max),a!=l&&r.lineTo(b.p2c(l),p.p2c(s)),r.lineTo(b.p2c(a),p.p2c(s)),r.lineTo(b.p2c(A),p.p2c(d)),A!=q&&(r.lineTo(b.p2c(A),p.p2c(d)),r.lineTo(b.p2c(q),p.p2c(d)))}}}}r.save(),r.translate(d.left,d.top),r.lineJoin=\"round\";var e=M.lines.lineWidth,o=M.shadowSize;if(e>0&&o>0){r.lineWidth=o,r.strokeStyle=\"rgba(0,0,0,0.1)\";var z=Math.PI/18;b(M.datapoints,Math.sin(z)*(e/2+o/2),Math.cos(z)*(e/2+o/2),M.xaxis,M.yaxis),r.lineWidth=o/2,b(M.datapoints,Math.sin(z)*(e/2+o/4),Math.cos(z)*(e/2+o/4),M.xaxis,M.yaxis)}r.lineWidth=e,r.strokeStyle=M.color;var t=T(M.lines,M.color,0,q);t&&(r.fillStyle=t,p(M.datapoints,M.xaxis,M.yaxis));e>0&&b(M.datapoints,0,0,M.xaxis,M.yaxis);r.restore()}(M),M.bars.show&&function(M){function b(b,p,e,o,z,t,c){for(var n=b.points,O=b.pointsize,i=0;i<n.length;i+=O)null!=n[i]&&x(n[i],n[i+1],n[i+2],p,e,o,z,t,c,r,M.bars.horizontal,M.bars.lineWidth)}var p;switch(r.save(),r.translate(d.left,d.top),r.lineWidth=M.bars.lineWidth,r.strokeStyle=M.color,M.bars.align){case\"left\":p=0;break;case\"right\":p=-M.bars.barWidth;break;case\"center\":p=-M.bars.barWidth/2;break;default:throw new Error(\"Invalid bar alignment: \"+M.bars.align)}var e=M.bars.fill?function(b,p){return T(M.bars,M.color,b,p)}:null;b(M.datapoints,p,p+M.bars.barWidth,0,e,M.xaxis,M.yaxis),r.restore()}(M),M.points.show&&function(M){function b(M,b,p,e,o,z,t,c){for(var n=M.points,O=M.pointsize,i=0;i<n.length;i+=O){var a=n[i],s=n[i+1];null==a||a<z.min||a>z.max||s<t.min||s>t.max||(r.beginPath(),a=z.p2c(a),s=t.p2c(s)+e,\"circle\"==c?r.arc(a,s,b,0,o?Math.PI:2*Math.PI,!1):c(r,a,s,b,o),r.closePath(),p&&(r.fillStyle=p,r.fill()),r.stroke())}}r.save(),r.translate(d.left,d.top);var p=M.points.lineWidth,e=M.shadowSize,o=M.points.radius,z=M.points.symbol;0==p&&(p=1e-4);if(p>0&&e>0){var t=e/2;r.lineWidth=t,r.strokeStyle=\"rgba(0,0,0,0.1)\",b(M.datapoints,o,null,t+t/2,!0,M.xaxis,M.yaxis,z),r.strokeStyle=\"rgba(0,0,0,0.2)\",b(M.datapoints,o,null,t/2,!0,M.xaxis,M.yaxis,z)}r.lineWidth=p,r.strokeStyle=M.color,b(M.datapoints,o,T(M.points,M.color),0,!1,M.xaxis,M.yaxis,z),r.restore()}(M)}function x(M,b,p,e,o,z,t,c,n,O,i,r){var a,s,A,d,l,q,u,f,W;i?(f=q=u=!0,l=!1,d=b+e,A=b+o,(s=M)<(a=p)&&(W=s,s=a,a=W,l=!0,q=!1)):(l=q=u=!0,f=!1,a=M+e,s=M+o,(d=b)<(A=p)&&(W=d,d=A,A=W,f=!0,u=!1)),s<c.min||a>c.max||d<n.min||A>n.max||(a<c.min&&(a=c.min,l=!1),s>c.max&&(s=c.max,q=!1),A<n.min&&(A=n.min,f=!1),d>n.max&&(d=n.max,u=!1),a=c.p2c(a),A=n.p2c(A),s=c.p2c(s),d=n.p2c(d),t&&(O.beginPath(),O.moveTo(a,A),O.lineTo(a,d),O.lineTo(s,d),O.lineTo(s,A),O.fillStyle=t(A,d),O.fill()),r>0&&(l||q||u||f)&&(O.beginPath(),O.moveTo(a,A+z),l?O.lineTo(a,d+z):O.moveTo(a,d+z),u?O.lineTo(s,d+z):O.moveTo(s,d+z),q?O.lineTo(s,A+z):O.moveTo(s,A+z),f?O.lineTo(a,A+z):O.moveTo(a,A+z),O.stroke()))}function T(b,p,e,o){var z=b.fill;if(!z)return null;if(b.fillColor)return G(b.fillColor,e,o,p);var t=M.color.parse(p);return t.a=\"number\"==typeof z?z:.4,t.normalize(),t.toString()}f.setData=h,f.setupGrid=N,f.draw=y,f.getPlaceholder=function(){return b},f.getCanvas=function(){return n.element},f.getPlotOffset=function(){return d},f.width=function(){return l},f.height=function(){return q},f.offset=function(){var M=i.offset();return M.left+=d.left,M.top+=d.top,M},f.getData=function(){return t},f.getAxes=function(){var b={};return M.each(s.concat(A),function(M,p){p&&(b[p.direction+(1!=p.n?p.n:\"\")+\"axis\"]=p)}),b},f.getXAxes=function(){return s},f.getYAxes=function(){return A},f.c2p=g,f.p2c=function(M){var b,p,e,o={};for(b=0;b<s.length;++b)if((p=s[b])&&p.used&&(null==M[e=\"x\"+p.n]&&1==p.n&&(e=\"x\"),null!=M[e])){o.left=p.p2c(M[e]);break}for(b=0;b<A.length;++b)if((p=A[b])&&p.used&&(null==M[e=\"y\"+p.n]&&1==p.n&&(e=\"y\"),null!=M[e])){o.top=p.p2c(M[e]);break}return o},f.getOptions=function(){return c},f.highlight=F,f.unhighlight=j,f.triggerRedrawOverlay=P,f.pointOffset=function(M){return{left:parseInt(s[R(M,\"x\")-1].p2c(+M.x)+d.left,10),top:parseInt(A[R(M,\"y\")-1].p2c(+M.y)+d.top,10)}},f.shutdown=function(){k&&clearTimeout(k);i.unbind(\"mousemove\",S),i.unbind(\"mouseleave\",C),i.unbind(\"click\",E),W(u.shutdown,[i])},f.resize=function(){var M=b.width(),p=b.height();n.resize(M,p),O.resize(M,p)},f.hooks=u,function(){for(var b={Canvas:p},e=0;e<z.length;++e){var o=z[e];o.init(f,b),o.options&&M.extend(!0,c,o.options)}}(),function(p){M.extend(!0,c,p),p&&p.colors&&(c.colors=p.colors);null==c.xaxis.color&&(c.xaxis.color=M.color.parse(c.grid.color).scale(\"a\",.22).toString());null==c.yaxis.color&&(c.yaxis.color=M.color.parse(c.grid.color).scale(\"a\",.22).toString());null==c.xaxis.tickColor&&(c.xaxis.tickColor=c.grid.tickColor||c.xaxis.color);null==c.yaxis.tickColor&&(c.yaxis.tickColor=c.grid.tickColor||c.yaxis.color);null==c.grid.borderColor&&(c.grid.borderColor=c.grid.color);null==c.grid.tickColor&&(c.grid.tickColor=M.color.parse(c.grid.color).scale(\"a\",.22).toString());var e,o,z,t={style:b.css(\"font-style\"),size:Math.round(.8*(+b.css(\"font-size\").replace(\"px\",\"\")||13)),variant:b.css(\"font-variant\"),weight:b.css(\"font-weight\"),family:b.css(\"font-family\")};for(t.lineHeight=1.15*t.size,z=c.xaxes.length||1,e=0;e<z;++e)(o=c.xaxes[e])&&!o.tickColor&&(o.tickColor=o.color),o=M.extend(!0,{},c.xaxis,o),c.xaxes[e]=o,o.font&&(o.font=M.extend({},t,o.font),o.font.color||(o.font.color=o.color));for(z=c.yaxes.length||1,e=0;e<z;++e)(o=c.yaxes[e])&&!o.tickColor&&(o.tickColor=o.color),o=M.extend(!0,{},c.yaxis,o),c.yaxes[e]=o,o.font&&(o.font=M.extend({},t,o.font),o.font.color||(o.font.color=o.color));c.xaxis.noTicks&&null==c.xaxis.ticks&&(c.xaxis.ticks=c.xaxis.noTicks);c.yaxis.noTicks&&null==c.yaxis.ticks&&(c.yaxis.ticks=c.yaxis.noTicks);c.x2axis&&(c.xaxes[1]=M.extend(!0,{},c.xaxis,c.x2axis),c.xaxes[1].position=\"top\");c.y2axis&&(c.yaxes[1]=M.extend(!0,{},c.yaxis,c.y2axis),c.yaxes[1].position=\"right\");c.grid.coloredAreas&&(c.grid.markings=c.grid.coloredAreas);c.grid.coloredAreasColor&&(c.grid.markingsColor=c.grid.coloredAreasColor);c.lines&&M.extend(!0,c.series.lines,c.lines);c.points&&M.extend(!0,c.series.points,c.points);c.bars&&M.extend(!0,c.series.bars,c.bars);null!=c.shadowSize&&(c.series.shadowSize=c.shadowSize);null!=c.highlightColor&&(c.series.highlightColor=c.highlightColor);for(e=0;e<c.xaxes.length;++e)L(s,e+1).options=c.xaxes[e];for(e=0;e<c.yaxes.length;++e)L(A,e+1).options=c.yaxes[e];for(var n in u)c.hooks[n]&&c.hooks[n].length&&(u[n]=u[n].concat(c.hooks[n]));W(u.processOptions,[c])}(o),function(){b.css(\"padding\",0).children(\":not(.flot-base,.flot-overlay)\").remove(),\"static\"==b.css(\"position\")&&b.css(\"position\",\"relative\");n=new p(\"flot-base\",b),O=new p(\"flot-overlay\",b),r=n.context,a=O.context,i=M(O.element).unbind();var e=b.data(\"plot\");e&&(e.shutdown(),O.clear());b.data(\"plot\",f)}(),h(e),N(),y(),function(){c.grid.hoverable&&(i.mousemove(S),i.bind(\"mouseleave\",C));c.grid.clickable&&i.click(E);W(u.bindEvents,[i])}();var _=[],k=null;function S(M){c.grid.hoverable&&D(\"plothover\",M,function(M){return 0!=M.hoverable})}function C(M){c.grid.hoverable&&D(\"plothover\",M,function(M){return!1})}function E(M){D(\"plotclick\",M,function(M){return 0!=M.clickable})}function D(M,p,e){var o=i.offset(),z=p.pageX-o.left-d.left,n=p.pageY-o.top-d.top,O=g({left:z,top:n});O.pageX=p.pageX,O.pageY=p.pageY;var r=function(M,b,p){var e,o,z,n=c.grid.mouseActiveRadius,O=n*n+1,i=null;for(e=t.length-1;e>=0;--e)if(p(t[e])){var r=t[e],a=r.xaxis,s=r.yaxis,A=r.datapoints.points,d=a.c2p(M),l=s.c2p(b),q=n/a.scale,u=n/s.scale;if(z=r.datapoints.pointsize,a.options.inverseTransform&&(q=Number.MAX_VALUE),s.options.inverseTransform&&(u=Number.MAX_VALUE),r.lines.show||r.points.show)for(o=0;o<A.length;o+=z){var f=A[o],W=A[o+1];if(null!=f&&!(f-d>q||f-d<-q||W-l>u||W-l<-u)){var h=Math.abs(a.p2c(f)-M),R=Math.abs(s.p2c(W)-b),m=h*h+R*R;m<O&&(O=m,i=[e,o/z])}}if(r.bars.show&&!i){var g=\"left\"==r.bars.align?0:-r.bars.barWidth/2,L=g+r.bars.barWidth;for(o=0;o<A.length;o+=z){f=A[o],W=A[o+1];var v=A[o+2];null!=f&&(t[e].bars.horizontal?d<=Math.max(v,f)&&d>=Math.min(v,f)&&l>=W+g&&l<=W+L:d>=f+g&&d<=f+L&&l>=Math.min(v,W)&&l<=Math.max(v,W))&&(i=[e,o/z])}}}return i?(e=i[0],o=i[1],z=t[e].datapoints.pointsize,{datapoint:t[e].datapoints.points.slice(o*z,(o+1)*z),dataIndex:o,series:t[e],seriesIndex:e}):null}(z,n,e);if(r&&(r.pageX=parseInt(r.series.xaxis.p2c(r.datapoint[0])+o.left+d.left,10),r.pageY=parseInt(r.series.yaxis.p2c(r.datapoint[1])+o.top+d.top,10)),c.grid.autoHighlight){for(var a=0;a<_.length;++a){var s=_[a];s.auto!=M||r&&s.series==r.series&&s.point[0]==r.datapoint[0]&&s.point[1]==r.datapoint[1]||j(s.series,s.point)}r&&F(r.series,r.datapoint,M)}b.trigger(M,[O,r])}function P(){var M=c.interaction.redrawOverlayInterval;-1!=M?k||(k=setTimeout(I,M)):I()}function I(){var M,b;for(k=null,a.save(),O.clear(),a.translate(d.left,d.top),M=0;M<_.length;++M)(b=_[M]).series.bars.show?Y(b.series,b.point):U(b.series,b.point);a.restore(),W(u.drawOverlay,[a])}function F(M,b,p){if(\"number\"==typeof M&&(M=t[M]),\"number\"==typeof b){var e=M.datapoints.pointsize;b=M.datapoints.points.slice(e*b,e*(b+1))}var o=H(M,b);-1==o?(_.push({series:M,point:b,auto:p}),P()):p||(_[o].auto=!1)}function j(M,b){if(null==M&&null==b)return _=[],void P();if(\"number\"==typeof M&&(M=t[M]),\"number\"==typeof b){var p=M.datapoints.pointsize;b=M.datapoints.points.slice(p*b,p*(b+1))}var e=H(M,b);-1!=e&&(_.splice(e,1),P())}function H(M,b){for(var p=0;p<_.length;++p){var e=_[p];if(e.series==M&&e.point[0]==b[0]&&e.point[1]==b[1])return p}return-1}function U(b,p){var e=p[0],o=p[1],z=b.xaxis,t=b.yaxis,c=\"string\"==typeof b.highlightColor?b.highlightColor:M.color.parse(b.color).scale(\"a\",.5).toString();if(!(e<z.min||e>z.max||o<t.min||o>t.max)){var n=b.points.radius+b.points.lineWidth/2;a.lineWidth=n,a.strokeStyle=c;var O=1.5*n;e=z.p2c(e),o=t.p2c(o),a.beginPath(),\"circle\"==b.points.symbol?a.arc(e,o,O,0,2*Math.PI,!1):b.points.symbol(a,e,o,O,!1),a.closePath(),a.stroke()}}function Y(b,p){var e=\"string\"==typeof b.highlightColor?b.highlightColor:M.color.parse(b.color).scale(\"a\",.5).toString(),o=e,z=\"left\"==b.bars.align?0:-b.bars.barWidth/2;a.lineWidth=b.bars.lineWidth,a.strokeStyle=e,x(p[0],p[1],p[2]||0,z,z+b.bars.barWidth,0,function(){return o},b.xaxis,b.yaxis,a,b.bars.horizontal,b.bars.lineWidth)}function G(b,p,e,o){if(\"string\"==typeof b)return b;for(var z=r.createLinearGradient(0,e,0,p),t=0,c=b.colors.length;t<c;++t){var n=b.colors[t];if(\"string\"!=typeof n){var O=M.color.parse(o);null!=n.brightness&&(O=O.scale(\"rgb\",n.brightness)),null!=n.opacity&&(O.a*=n.opacity),n=O.toString()}z.addColorStop(t/(c-1),n)}return z}}p.prototype.resize=function(M,b){if(M<=0||b<=0)throw new Error(\"Invalid dimensions for plot, width = \"+M+\", height = \"+b);var p=this.element,e=this.context,o=this.pixelRatio;this.width!=M&&(p.width=M*o,p.style.width=M+\"px\",this.width=M),this.height!=b&&(p.height=b*o,p.style.height=b+\"px\",this.height=b),e.restore(),e.save(),e.scale(o,o)},p.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},p.prototype.render=function(){var M=this._textCache;for(var p in M)if(b.call(M,p)){var e=this.getTextLayer(p),o=M[p];for(var z in e.hide(),o)if(b.call(o,z)){var t=o[z];for(var c in t)if(b.call(t,c)){for(var n,O=t[c].positions,i=0;n=O[i];i++)n.active?n.rendered||(e.append(n.element),n.rendered=!0):(O.splice(i--,1),n.rendered&&n.element.detach());0==O.length&&delete t[c]}}e.show()}},p.prototype.getTextLayer=function(b){var p=this.text[b];return null==p&&(null==this.textContainer&&(this.textContainer=M(\"<div class='flot-text'></div>\").css({position:\"absolute\",top:0,left:0,bottom:0,right:0,\"font-size\":\"smaller\",color:\"#545454\"}).insertAfter(this.element)),p=this.text[b]=M(\"<div></div>\").addClass(b).css({position:\"absolute\",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)),p},p.prototype.getTextInfo=function(b,p,e,o,z){var t,c,n,O;if(p=\"\"+p,t=\"object\"==typeof e?e.style+\" \"+e.variant+\" \"+e.weight+\" \"+e.size+\"px/\"+e.lineHeight+\"px \"+e.family:e,null==(c=this._textCache[b])&&(c=this._textCache[b]={}),null==(n=c[t])&&(n=c[t]={}),null==(O=n[p])){var i=M(\"<div></div>\").html(p).css({position:\"absolute\",\"max-width\":z,top:-9999}).appendTo(this.getTextLayer(b));\"object\"==typeof e?i.css({font:t,color:e.color}):\"string\"==typeof e&&i.addClass(e),O=n[p]={width:i.outerWidth(!0),height:i.outerHeight(!0),element:i,positions:[]},i.detach()}return O},p.prototype.addText=function(M,b,p,e,o,z,t,c,n){var O=this.getTextInfo(M,e,o,z,t),i=O.positions;\"center\"==c?b-=O.width/2:\"right\"==c&&(b-=O.width),\"middle\"==n?p-=O.height/2:\"bottom\"==n&&(p-=O.height);for(var r,a=0;r=i[a];a++)if(r.x==b&&r.y==p)return void(r.active=!0);r={active:!0,rendered:!1,element:i.length?O.element.clone():O.element,x:b,y:p},i.push(r),r.element.css({top:Math.round(p),left:Math.round(b),\"text-align\":c})},p.prototype.removeText=function(M,p,e,o,z,t){if(null==o){var c=this._textCache[M];if(null!=c)for(var n in c)if(b.call(c,n)){var O=c[n];for(var i in O)if(b.call(O,i))for(var r=O[i].positions,a=0;s=r[a];a++)s.active=!1}}else{var s;for(r=this.getTextInfo(M,o,z,t).positions,a=0;s=r[a];a++)s.x==p&&s.y==e&&(s.active=!1)}},M.plot=function(b,p,o){return new e(M(b),p,o,M.plot.plugins)},M.plot.version=\"0.8.2-alpha\",M.plot.plugins=[],M.fn.plot=function(b,p){return this.each(function(){M.plot(this,b,p)})}}(jQuery),function(M){var b=function(M){this.tipPosition={x:0,y:0},this.init(M)};b.prototype.init=function(b){var p=this;b.hooks.bindEvents.push(function(b,e){if(p.plotOptions=b.getOptions(),!1!==p.plotOptions.tooltip&&void 0!==p.plotOptions.tooltip){p.tooltipOptions=p.plotOptions.tooltipOpts;var o=p.getDomElement();M(b.getPlaceholder()).bind(\"plothover\",function(M,b,e){var z;e?(z=p.stringFormat(p.tooltipOptions.content,e),o.html(z),p.updateTooltipPosition({x:b.pageX,y:b.pageY}),o.css({left:p.tipPosition.x+p.tooltipOptions.shifts.x,top:p.tipPosition.y+p.tooltipOptions.shifts.y}).show(),\"function\"==typeof p.tooltipOptions.onHover&&p.tooltipOptions.onHover(e,o)):o.hide().html(\"\")}),e.mousemove(function(M){var b={};b.x=M.pageX,b.y=M.pageY,p.updateTooltipPosition(b)})}})},b.prototype.getDomElement=function(){var b;return M(\"#flotTip\").length>0?b=M(\"#flotTip\"):((b=M(\"<div />\").attr(\"id\",\"flotTip\")).appendTo(\"body\").hide().css({position:\"absolute\"}),this.tooltipOptions.defaultTheme&&b.css({background:\"#fff\",\"z-index\":\"100\",padding:\"0.4em 0.6em\",\"border-radius\":\"0.5em\",\"font-size\":\"0.8em\",border:\"1px solid #111\",display:\"inline-block\",\"white-space\":\"nowrap\"})),b},b.prototype.updateTooltipPosition=function(b){var p=M(\"#flotTip\").outerWidth()+this.tooltipOptions.shifts.x,e=M(\"#flotTip\").outerHeight()+this.tooltipOptions.shifts.y;b.x-M(window).scrollLeft()>M(window).innerWidth()-p&&(b.x-=p),b.y-M(window).scrollTop()>M(window).innerHeight()-e&&(b.y-=e),this.tipPosition.x=b.x,this.tipPosition.y=b.y},b.prototype.stringFormat=function(M,b){var p=/%x\\.{0,1}(\\d{0,})/,e=/%y\\.{0,1}(\\d{0,})/;return\"function\"==typeof M&&(M=M(b.series.data[b.dataIndex][0],b.series.data[b.dataIndex][1])),void 0!==b.series.percent&&(M=this.adjustValPrecision(/%p\\.{0,1}(\\d{0,})/,M,b.series.percent)),void 0!==b.series.label&&(M=M.replace(/%s/,b.series.label)),this.isTimeMode(\"xaxis\",b)&&this.isXDateFormat(b)&&(M=M.replace(p,this.timestampToDate(b.series.data[b.dataIndex][0],this.tooltipOptions.xDateFormat))),this.isTimeMode(\"yaxis\",b)&&this.isYDateFormat(b)&&(M=M.replace(e,this.timestampToDate(b.series.data[b.dataIndex][1],this.tooltipOptions.yDateFormat))),\"number\"==typeof b.series.data[b.dataIndex][0]&&(M=this.adjustValPrecision(p,M,b.series.data[b.dataIndex][0])),\"number\"==typeof b.series.data[b.dataIndex][1]&&(M=this.adjustValPrecision(e,M,b.series.data[b.dataIndex][1])),void 0!==b.series.xaxis.tickFormatter&&(M=M.replace(p,b.series.xaxis.tickFormatter(b.series.data[b.dataIndex][0],b.series.xaxis))),void 0!==b.series.yaxis.tickFormatter&&(M=M.replace(e,b.series.yaxis.tickFormatter(b.series.data[b.dataIndex][1],b.series.yaxis))),M},b.prototype.isTimeMode=function(M,b){return void 0!==b.series[M].options.mode&&\"time\"===b.series[M].options.mode},b.prototype.isXDateFormat=function(M){return void 0!==this.tooltipOptions.xDateFormat&&null!==this.tooltipOptions.xDateFormat},b.prototype.isYDateFormat=function(M){return void 0!==this.tooltipOptions.yDateFormat&&null!==this.tooltipOptions.yDateFormat},b.prototype.timestampToDate=function(b,p){var e=new Date(b);return M.plot.formatDate(e,p)},b.prototype.adjustValPrecision=function(M,b,p){var e;return null!==b.match(M)&&\"\"!==RegExp.$1&&(e=RegExp.$1,p=p.toFixed(e),b=b.replace(M,p)),b};M.plot.plugins.push({init:function(M){new b(M)},options:{tooltip:!1,tooltipOpts:{content:\"%s | X: %x | Y: %y\",xDateFormat:null,yDateFormat:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(M,b){}}},name:\"tooltip\",version:\"0.6.1\"})}(jQuery),function(M){M.plot.plugins.push({init:function(b){function p(){var M=b.getPlaceholder();0!=M.width()&&0!=M.height()&&(b.resize(),b.setupGrid(),b.draw())}b.hooks.bindEvents.push(function(b,e){M(window).bind(\"resize\",p)}),b.hooks.shutdown.push(function(b,e){M(window).unbind(\"resize\",p)})},options:{},name:\"resize\",version:\"1.0\"})}(jQuery),function(M){function b(M,b){return b*Math.floor(M/b)}function p(M,b,p,e){if(\"function\"==typeof M.strftime)return M.strftime(b);var o,z=function(M,b){return b=\"\"+(null==b?\"0\":b),1==(M=\"\"+M).length?b+M:M},t=[],c=!1,n=M.getHours(),O=n<12;null==p&&(p=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]),null==e&&(e=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"]),o=n>12?n-12:0==n?12:n;for(var i=0;i<b.length;++i){var r=b.charAt(i);if(c){switch(r){case\"a\":r=\"\"+e[M.getDay()];break;case\"b\":r=\"\"+p[M.getMonth()];break;case\"d\":r=z(M.getDate());break;case\"e\":r=z(M.getDate(),\" \");break;case\"h\":case\"H\":r=z(n);break;case\"I\":r=z(o);break;case\"l\":r=z(o,\" \");break;case\"m\":r=z(M.getMonth()+1);break;case\"M\":r=z(M.getMinutes());break;case\"q\":r=\"\"+(Math.floor(M.getMonth()/3)+1);break;case\"S\":r=z(M.getSeconds());break;case\"y\":r=z(M.getFullYear()%100);break;case\"Y\":r=\"\"+M.getFullYear();break;case\"p\":r=O?\"am\":\"pm\";break;case\"P\":r=O?\"AM\":\"PM\";break;case\"w\":r=\"\"+M.getDay()}t.push(r),c=!1}else\"%\"==r?c=!0:t.push(r)}return t.join(\"\")}function e(M){function b(M,b,p,e){M[b]=function(){return p[e].apply(p,arguments)}}var p={date:M};null!=M.strftime&&b(p,\"strftime\",M,\"strftime\"),b(p,\"getTime\",M,\"getTime\"),b(p,\"setTime\",M,\"setTime\");for(var e=[\"Date\",\"Day\",\"FullYear\",\"Hours\",\"Milliseconds\",\"Minutes\",\"Month\",\"Seconds\"],o=0;o<e.length;o++)b(p,\"get\"+e[o],M,\"getUTC\"+e[o]),b(p,\"set\"+e[o],M,\"setUTC\"+e[o]);return p}function o(M,b){if(\"browser\"==b.timezone)return new Date(M);if(b.timezone&&\"utc\"!=b.timezone){if(\"undefined\"!=typeof timezoneJS&&void 0!==timezoneJS.Date){var p=new timezoneJS.Date;return p.setTimezone(b.timezone),p.setTime(M),p}return e(new Date(M))}return e(new Date(M))}var z={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,quarter:7776e6,year:525949.2*60*1e3},t=[[1,\"second\"],[2,\"second\"],[5,\"second\"],[10,\"second\"],[30,\"second\"],[1,\"minute\"],[2,\"minute\"],[5,\"minute\"],[10,\"minute\"],[30,\"minute\"],[1,\"hour\"],[2,\"hour\"],[4,\"hour\"],[8,\"hour\"],[12,\"hour\"],[1,\"day\"],[2,\"day\"],[3,\"day\"],[.25,\"month\"],[.5,\"month\"],[1,\"month\"],[2,\"month\"]],c=t.concat([[3,\"month\"],[6,\"month\"],[1,\"year\"]]),n=t.concat([[1,\"quarter\"],[2,\"quarter\"],[1,\"year\"]]);M.plot.plugins.push({init:function(e){e.hooks.processOptions.push(function(e,t){M.each(e.getAxes(),function(M,e){var t=e.options;\"time\"==t.mode&&(e.tickGenerator=function(M){var p=[],e=o(M.min,t),O=0,i=t.tickSize&&\"quarter\"===t.tickSize[1]||t.minTickSize&&\"quarter\"===t.minTickSize[1]?n:c;null!=t.minTickSize&&(O=\"number\"==typeof t.tickSize?t.tickSize:t.minTickSize[0]*z[t.minTickSize[1]]);for(var r=0;r<i.length-1&&!(M.delta<(i[r][0]*z[i[r][1]]+i[r+1][0]*z[i[r+1][1]])/2&&i[r][0]*z[i[r][1]]>=O);++r);var a=i[r][0],s=i[r][1];if(\"year\"==s){if(null!=t.minTickSize&&\"year\"==t.minTickSize[1])a=Math.floor(t.minTickSize[0]);else{var A=Math.pow(10,Math.floor(Math.log(M.delta/z.year)/Math.LN10)),d=M.delta/z.year/A;a=d<1.5?1:d<3?2:d<7.5?5:10,a*=A}a<1&&(a=1)}M.tickSize=t.tickSize||[a,s];var l=M.tickSize[0];s=M.tickSize[1];var q=l*z[s];\"second\"==s?e.setSeconds(b(e.getSeconds(),l)):\"minute\"==s?e.setMinutes(b(e.getMinutes(),l)):\"hour\"==s?e.setHours(b(e.getHours(),l)):\"month\"==s?e.setMonth(b(e.getMonth(),l)):\"quarter\"==s?e.setMonth(3*b(e.getMonth()/3,l)):\"year\"==s&&e.setFullYear(b(e.getFullYear(),l)),e.setMilliseconds(0),q>=z.minute&&e.setSeconds(0),q>=z.hour&&e.setMinutes(0),q>=z.day&&e.setHours(0),q>=4*z.day&&e.setDate(1),q>=2*z.month&&e.setMonth(b(e.getMonth(),3)),q>=2*z.quarter&&e.setMonth(b(e.getMonth(),6)),q>=z.year&&e.setMonth(0);var u,f=0,W=Number.NaN;do{if(u=W,W=e.getTime(),p.push(W),\"month\"==s||\"quarter\"==s)if(l<1){e.setDate(1);var h=e.getTime();e.setMonth(e.getMonth()+(\"quarter\"==s?3:1));var R=e.getTime();e.setTime(W+f*z.hour+(R-h)*l),f=e.getHours(),e.setHours(0)}else e.setMonth(e.getMonth()+l*(\"quarter\"==s?3:1));else\"year\"==s?e.setFullYear(e.getFullYear()+l):e.setTime(W+q)}while(W<M.max&&W!=u);return p},e.tickFormatter=function(M,b){var e=o(M,b.options);if(null!=t.timeformat)return p(e,t.timeformat,t.monthNames,t.dayNames);var c=b.options.tickSize&&\"quarter\"==b.options.tickSize[1]||b.options.minTickSize&&\"quarter\"==b.options.minTickSize[1],n=b.tickSize[0]*z[b.tickSize[1]],O=b.max-b.min,i=t.twelveHourClock?\" %p\":\"\",r=t.twelveHourClock?\"%I\":\"%H\";return p(e,n<z.minute?r+\":%M:%S\"+i:n<z.day?O<2*z.day?r+\":%M\"+i:\"%b %d \"+r+\":%M\"+i:n<z.month?\"%b %d\":c&&n<z.quarter||!c&&n<z.year?O<z.year?\"%b\":\"%b %Y\":c&&n<z.year?O<z.year?\"Q%q\":\"Q%q %Y\":\"%Y\",t.monthNames,t.dayNames)})})})},options:{xaxis:{timezone:null,timeformat:null,twelveHourClock:!1,monthNames:null}},name:\"time\",version:\"1.0\"}),M.plot.formatDate=p}(jQuery),function(M,b,p,e){var o={drag:!0,drop:!0,exclude:\"\",nested:!0,vertical:!0},z={afterMove:function(M,b,p){},containerPath:\"\",containerSelector:\"ol, ul\",distance:0,delay:0,handle:\"\",itemPath:\"\",itemSelector:\"li\",bodyClass:\"dragging\",draggedClass:\"dragged\",isValidTarget:function(M,b){return!0},onCancel:function(M,b,p,e){},onDrag:function(M,b,p,e){M.css(b),e.preventDefault()},onDragStart:function(b,p,e,o){b.css({height:b.outerHeight(),width:b.outerWidth()}),b.addClass(p.group.options.draggedClass),M(\"body\").addClass(p.group.options.bodyClass)},onDrop:function(b,p,e,o){b.removeClass(p.group.options.draggedClass).removeAttr(\"style\"),M(\"body\").removeClass(p.group.options.bodyClass)},onMousedown:function(M,b,p){if(!p.target.nodeName.match(/^(input|select|textarea)$/i))return p.type.match(/^mouse/)&&p.preventDefault(),!0},placeholderClass:\"placeholder\",placeholder:'<li class=\"placeholder\"></li>',pullPlaceholder:!0,serialize:function(b,p,e){var o=M.extend({},b.data());return e?[p]:(p[0]&&(o.children=p),delete o.subContainers,delete o.sortable,o)},tolerance:0},t={},c=0,n={left:0,top:0,bottom:0,right:0},O={start:\"touchstart.sortable mousedown.sortable\",drop:\"touchend.sortable touchcancel.sortable mouseup.sortable\",drag:\"touchmove.sortable mousemove.sortable\",scroll:\"scroll.sortable\"},i=\"subContainers\";function r(M,b){return Math.max(0,M[0]-b[0],b[0]-M[1])+Math.max(0,M[2]-b[1],b[1]-M[3])}function a(b,p,e,o){var z=b.length,t=o?\"offset\":\"position\";for(e=e||0;z--;){var c=b[z].el?b[z].el:M(b[z]),n=c[t]();n.left+=parseInt(c.css(\"margin-left\"),10),n.top+=parseInt(c.css(\"margin-top\"),10),p[z]=[n.left-e,n.left+c.outerWidth()+e,n.top-e,n.top+c.outerHeight()+e]}}function s(M,b){var p=b.offset();return{left:M.left-p.left,top:M.top-p.top}}function A(M,b,p){b=[b.left,b.top],p=p&&[p.left,p.top];for(var e,o=M.length,z=[];o--;)e=M[o],z[o]=[o,r(e,b),p&&r(e,p)];return z=z.sort(function(M,b){return b[1]-M[1]||b[2]-M[2]||b[0]-M[0]})}function d(b){this.options=M.extend({},z,b),this.containers=[],this.options.rootGroup||(this.scrollProxy=M.proxy(this.scroll,this),this.dragProxy=M.proxy(this.drag,this),this.dropProxy=M.proxy(this.drop,this),this.placeholder=M(this.options.placeholder),b.isValidTarget||(this.options.isValidTarget=e))}function l(b,p){this.el=b,this.options=M.extend({},o,p),this.group=d.get(this.options),this.rootGroup=this.options.rootGroup||this.group,this.handle=this.rootGroup.options.handle||this.rootGroup.options.itemSelector;var e=this.rootGroup.options.itemPath;this.target=e?this.el.find(e):this.el,this.target.on(O.start,this.handle,M.proxy(this.dragInit,this)),this.options.drop&&this.group.containers.push(this)}d.get=function(M){return t[M.group]||(M.group===e&&(M.group=c++),t[M.group]=new d(M)),t[M.group]},d.prototype={dragInit:function(b,p){this.$document=M(p.el[0].ownerDocument);var e=M(b.target).closest(this.options.itemSelector);if(e.length){if(this.item=e,this.itemContainer=p,this.item.is(this.options.exclude)||!this.options.onMousedown(this.item,z.onMousedown,b))return;this.setPointer(b),this.toggleListeners(\"on\"),this.setupDelayTimer(),this.dragInitDone=!0}},drag:function(M){if(!this.dragging){if(!this.distanceMet(M)||!this.delayMet)return;this.options.onDragStart(this.item,this.itemContainer,z.onDragStart,M),this.item.before(this.placeholder),this.dragging=!0}this.setPointer(M),this.options.onDrag(this.item,s(this.pointer,this.item.offsetParent()),z.onDrag,M);var b=this.getPointer(M),p=this.sameResultBox,o=this.options.tolerance;(!p||p.top-o>b.top||p.bottom+o<b.top||p.left-o>b.left||p.right+o<b.left)&&(this.searchValidTarget()||(this.placeholder.detach(),this.lastAppendedItem=e))},drop:function(M){this.toggleListeners(\"off\"),this.dragInitDone=!1,this.dragging&&(this.placeholder.closest(\"html\")[0]?this.placeholder.before(this.item).detach():this.options.onCancel(this.item,this.itemContainer,z.onCancel,M),this.options.onDrop(this.item,this.getContainer(this.item),z.onDrop,M),this.clearDimensions(),this.clearOffsetParent(),this.lastAppendedItem=this.sameResultBox=e,this.dragging=!1)},searchValidTarget:function(M,b){M||(M=this.relativePointer||this.pointer,b=this.lastRelativePointer||this.lastPointer);for(var p=A(this.getContainerDimensions(),M,b),o=p.length;o--;){var z=p[o][0];if(!p[o][1]||this.options.pullPlaceholder){var t=this.containers[z];if(!t.disabled){if(!this.$getOffsetParent()){var c=t.getItemOffsetParent();M=s(M,c),b=s(b,c)}if(t.searchValidTarget(M,b))return!0}}}this.sameResultBox&&(this.sameResultBox=e)},movePlaceholder:function(M,b,p,e){var o=this.lastAppendedItem;!e&&o&&o[0]===b[0]||(b[p](this.placeholder),this.lastAppendedItem=b,this.sameResultBox=e,this.options.afterMove(this.placeholder,M,b))},getContainerDimensions:function(){return this.containerDimensions||a(this.containers,this.containerDimensions=[],this.options.tolerance,!this.$getOffsetParent()),this.containerDimensions},getContainer:function(M){return M.closest(this.options.containerSelector).data(p)},$getOffsetParent:function(){if(this.offsetParent===e){var M=this.containers.length-1,b=this.containers[M].getItemOffsetParent();if(!this.options.rootGroup)for(;M--;)if(b[0]!=this.containers[M].getItemOffsetParent()[0]){b=!1;break}this.offsetParent=b}return this.offsetParent},setPointer:function(M){var b=this.getPointer(M);if(this.$getOffsetParent()){var p=s(b,this.$getOffsetParent());this.lastRelativePointer=this.relativePointer,this.relativePointer=p}this.lastPointer=this.pointer,this.pointer=b},distanceMet:function(M){var b=this.getPointer(M);return Math.max(Math.abs(this.pointer.left-b.left),Math.abs(this.pointer.top-b.top))>=this.options.distance},getPointer:function(M){var b=M.originalEvent,p=M.originalEvent.touches&&M.originalEvent.touches[0]||{};return{left:M.pageX||b.pageX||p.pageX,top:M.pageY||b.pageY||p.pageY}},setupDelayTimer:function(){var M=this;this.delayMet=!this.options.delay,this.delayMet||(clearTimeout(this._mouseDelayTimer),this._mouseDelayTimer=setTimeout(function(){M.delayMet=!0},this.options.delay))},scroll:function(M){this.clearDimensions(),this.clearOffsetParent()},toggleListeners:function(b){var p=this;M.each([\"drag\",\"drop\",\"scroll\"],function(M,e){p.$document[b](O[e],p[e+\"Proxy\"])})},clearOffsetParent:function(){this.offsetParent=e},clearDimensions:function(){this.traverse(function(M){M._clearDimensions()})},traverse:function(M){M(this);for(var b=this.containers.length;b--;)this.containers[b].traverse(M)},_clearDimensions:function(){this.containerDimensions=e},_destroy:function(){t[this.options.group]=e}},l.prototype={dragInit:function(M){var b=this.rootGroup;!this.disabled&&!b.dragInitDone&&this.options.drag&&this.isValidDrag(M)&&b.dragInit(M,this)},isValidDrag:function(M){return 1==M.which||\"touchstart\"==M.type&&1==M.originalEvent.touches.length},searchValidTarget:function(M,b){var p=A(this.getItemDimensions(),M,b),e=p.length,o=this.rootGroup,z=!o.options.isValidTarget||o.options.isValidTarget(o.item,this);if(!e&&z)return o.movePlaceholder(this,this.target,\"append\"),!0;for(;e--;){var t=p[e][0];if(!p[e][1]&&this.hasChildGroup(t)){if(this.getContainerGroup(t).searchValidTarget(M,b))return!0}else if(z)return this.movePlaceholder(t,M),!0}},movePlaceholder:function(b,p){var e=M(this.items[b]),o=this.itemDimensions[b],z=\"after\",t=e.outerWidth(),c=e.outerHeight(),O=e.offset(),i={left:O.left,right:O.left+t,top:O.top,bottom:O.top+c};if(this.options.vertical){var r=(o[2]+o[3])/2;p.top<=r?(z=\"before\",i.bottom-=c/2):i.top+=c/2}else{var a=(o[0]+o[1])/2;p.left<=a?(z=\"before\",i.right-=t/2):i.left+=t/2}this.hasChildGroup(b)&&(i=n),this.rootGroup.movePlaceholder(this,e,z,i)},getItemDimensions:function(){return this.itemDimensions||(this.items=this.$getChildren(this.el,\"item\").filter(\":not(.\"+this.group.options.placeholderClass+\", .\"+this.group.options.draggedClass+\")\").get(),a(this.items,this.itemDimensions=[],this.options.tolerance)),this.itemDimensions},getItemOffsetParent:function(){var M=this.el;return\"relative\"===M.css(\"position\")||\"absolute\"===M.css(\"position\")||\"fixed\"===M.css(\"position\")?M:M.offsetParent()},hasChildGroup:function(M){return this.options.nested&&this.getContainerGroup(M)},getContainerGroup:function(b){var o=M.data(this.items[b],i);if(o===e){var z=this.$getChildren(this.items[b],\"container\");if(o=!1,z[0]){var t=M.extend({},this.options,{rootGroup:this.rootGroup,group:c++});o=z[p](t).data(p).group}M.data(this.items[b],i,o)}return o},$getChildren:function(b,p){var e=this.rootGroup.options,o=e[p+\"Path\"],z=e[p+\"Selector\"];return b=M(b),o&&(b=b.find(o)),b.children(z)},_serialize:function(b,p){var e=this,o=p?\"item\":\"container\",z=this.$getChildren(b,o).not(this.options.exclude).map(function(){return e._serialize(M(this),!p)}).get();return this.rootGroup.options.serialize(b,z,p)},traverse:function(b){M.each(this.items||[],function(p){var e=M.data(this,i);e&&e.traverse(b)}),b(this)},_clearDimensions:function(){this.itemDimensions=e},_destroy:function(){var b=this;this.target.off(O.start,this.handle),this.el.removeData(p),this.options.drop&&(this.group.containers=M.grep(this.group.containers,function(M){return M!=b})),M.each(this.items||[],function(){M.removeData(this,i)})}};var q={enable:function(){this.traverse(function(M){M.disabled=!1})},disable:function(){this.traverse(function(M){M.disabled=!0})},serialize:function(){return this._serialize(this.el,!0)},refresh:function(){this.traverse(function(M){M._clearDimensions()})},destroy:function(){this.traverse(function(M){M._destroy()})}};M.extend(l.prototype,q),M.fn[p]=function(b){var o=Array.prototype.slice.call(arguments,1);return this.map(function(){var z=M(this),t=z.data(p);return t&&q[b]?q[b].apply(t,o)||this:(t||b!==e&&\"object\"!=typeof b||z.data(p,new l(z,b)),this)})}}(jQuery,window,\"jqSortable\");\n"
  },
  {
    "path": "modules/backend/assets/js/vueapp/vue-application.js",
    "content": "/**\n * Structure:\n * <div data-control=\"vue-app\">\n *     <div data-control=\"vue-container\"></div>\n *     <div data-control=\"vue-container\"></div>\n *     <div data-control=\"vue-container\"></div>\n * </div>\n */\n\nclass VueApp extends oc.ControlBase\n{\n    init() {\n        this.methods = {};\n        this.containers = {};\n        this.state = Vue.reactive({});\n        this.vueApps = {};\n\n        this.state.processing = false;\n        this.state.eventBus = Vue.markRaw(mitt());\n\n        this.registerMethod('onCommand', this.onCommand);\n    }\n\n    connect() {\n        this.element.vueAppInstance = this;\n        this.loadLangMessagesInternal();\n        this.loadInitialStateInternal();\n    }\n\n    disconnect() {\n        this.element.vueAppInstance = null;\n        for (const name in this.methods) {\n            this.methods[name] = null;\n        }\n    }\n\n    registerState(name, value) {\n        if (name.constructor === {}.constructor) {\n            for (const key in name) {\n                this.registerState(key, name[key]);\n            }\n        }\n        else if (this.state[name] === undefined) {\n            this.state[name] = value;\n        }\n    }\n\n    getState(name, defaultVal) {\n        return this.state[name] || defaultVal;\n    }\n\n    getMethod(name) {\n        return this.methods[name];\n    }\n\n    registerMethod(name, fn) {\n        this.methods[name] = fn;\n    }\n\n    createContainer(control, element) {\n        if (!this.element.isConnected) {\n            return;\n        }\n\n        const self = this;\n        const { app, vm } = oc.mountVueApp(element, {\n            data() {\n                return {\n                    state: self.state,\n                };\n            },\n            methods: this.methods\n        });\n\n        const controlName = this.getContainerNameFromControl(control);\n        this.containers[controlName] = vm;\n        this.vueApps[controlName] = app;\n\n        if (element.vueContainerInstance) {\n            element.vueContainerInstance.vm = vm;\n            element.vueContainerInstance.app = app;\n        }\n    }\n\n    destroyContainer(control) {\n        const controlName = this.getContainerNameFromControl(control);\n\n        if (this.vueApps[controlName]) {\n            this.vueApps[controlName].unmount();\n            this.vueApps[controlName] = null;\n        }\n\n        this.containers[controlName] = null;\n    }\n\n    getContainerNameFromControl(control) {\n        return control.element.dataset.control.replace(/-./g, x => x[1].toUpperCase());\n    }\n\n    isFormCommand(command) {\n        let parts = command.split(':');\n        return parts.length === 2 && parts[0] === 'form';\n    }\n\n    /**\n     * Handles commands starting with the \"form:\" prefix.\n     * All other commands must be handled in a child class.\n     * @param String command\n     * @param Boolean isHotkey\n     * @param Event ev\n     */\n    async onCommand(command, isHotkey, ev, targetElement, customData) {\n        let parts = command.split(':');\n        if (parts.length == 2 && parts[0] !== 'form') {\n            throw new Error('Unknown command: ' + command);\n        }\n\n        const ajaxHandler = parts[1];\n        let requestConfig = {};\n        let customDataOptions = customData || {};\n\n        if (customDataOptions.request) {\n            requestConfig = customData.request;\n        }\n\n        if (customDataOptions.confirm) {\n            try {\n                await oc.confirmPromise(customDataOptions.confirm);\n            }\n            catch (error) {\n                return Promise.reject();\n            }\n        }\n\n        this.state.processing = true;\n\n        return oc.request(targetElement, ajaxHandler, {\n                ...requestConfig\n            })\n            .finally(() => {\n                this.state.processing = false;\n            });\n    }\n\n    loadInitialStateInternal() {\n        const stateElements = this.element.querySelectorAll('[data-vue-state]');\n        stateElements.forEach(stateElement => {\n            const stateIndex = stateElement.getAttribute('data-vue-state') || 'initial';\n            const stateValue = JSON.parse(stateElement.innerHTML);\n            this.state[stateIndex] = {\n                ...($.oc.vueUtils.getCleanObject(this.state[stateIndex] || {})),\n                ...stateValue\n            };\n        });\n    }\n\n    loadLangMessagesInternal() {\n        const langElements = this.element.querySelectorAll('[data-vue-lang]');\n        langElements.forEach(langElement => {\n            oc.lang.set(JSON.parse(langElement.innerHTML));\n        });\n    }\n\n    static getFromElement(element) {\n        const appEl = element.closest('[data-control=\"vue-app\"]');\n        if (appEl && appEl.vueAppInstance) {\n            return appEl.vueAppInstance;\n        }\n    }\n}\n\noc.registerControl('vue-app', VueApp);\n\noc.VueApp = VueApp;\n"
  },
  {
    "path": "modules/backend/assets/js/vueapp/vue-control-base.js",
    "content": "/**\n * Structure:\n * <div data-control=\"vue-container\">\n *     <div data-vue-template>\n *         <template></template>\n *     </div>\n *     <script type=\"text/template\" data-vue-state=\"initial\">\n *         {...json...}\n *     </script>\n * </div>\n */\nexport class VueControlBase extends oc.ControlBase\n{\n    registerMethod(name, callback) {\n        this.app.registerMethod(name, this.proxy(callback));\n    }\n\n    registerState(name, value) {\n        this.app.registerState(name, value);\n    }\n\n    // Overrides\n\n    initBefore() {\n        super.initBefore();\n        this.app = oc.VueApp.getFromElement(this.element);\n        this.state = this.app.state;\n        this.containers = this.app.containers;\n    }\n\n    connectAfter() {\n        this.vueContainerInstance = this;\n        super.connectAfter();\n        this.initContainerInternal();\n    }\n\n    disconnectAfter() {\n        this.destroyContainerInternal();\n        super.disconnectAfter();\n        this.vueContainerInstance = null;\n    }\n\n    // Internals\n\n    initContainerInternal() {\n        this.vueElement = this.element.querySelector('[data-vue-template]');\n        if (!this.vueElement) {\n            throw new Error('Missing an element with data-vue-template');\n        }\n\n        oc.pageReady().then(() => {\n            this.app.createContainer(this, this.vueElement);\n        });\n    }\n\n    destroyContainerInternal() {\n        this.app.destroyContainer(this);\n    }\n}\n\noc.registerControl('vue-container', VueControlBase);\n\n// Global for backward compatibility\noc.VueControlBase = VueControlBase;\n\nexport default VueControlBase;\n"
  },
  {
    "path": "modules/backend/assets/less/.gitignore",
    "content": "*.css"
  },
  {
    "path": "modules/backend/assets/less/controls/backend-toolbar-buttons.less",
    "content": ".backend-toolbar-button-focus() {\n    &:focus:not([disabled]) {\n        background: @toolbar-focus-bg;\n    }\n}\n\n.backend-toolbar-button .badge {\n    display: block;\n    z-index: 9;\n    width: 8px;\n    height: 8px;\n    position: absolute;\n    top: 5px;\n    right: -3px;\n    border-radius: 50%;\n    background-color: #dd1100;\n    padding: 0;\n}\n\nbutton,\na {\n    &.backend-toolbar-button {\n        .backend-toolbar-button();\n    }\n}\n\n@media (hover: hover) {\n    button,\n    a {\n        &.backend-toolbar-button {\n            .backend-toolbar-button-focus();\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/color-mode-selector.less",
    "content": "div.control-simplelist.is-selectable-box.color-mode-selector {\n    margin-left: 0;\n    margin-top: 10px;\n    border: none;\n    margin-bottom: -16px;\n\n    ul {\n        margin-bottom: 0;\n    }\n\n    li {\n        margin: 0 16px 16px 0;\n        width: 215px;\n\n        &.active .color-mode-box {\n            border-color: @brand-accent;\n        }\n\n        .heading {\n            margin: 0;\n            text-align: left;\n            padding: 18px 17px;\n        }\n    }\n\n    .color-mode-box {\n        display: block;\n        border: 2px solid @border-color;\n        background: @input-bg;\n        border-radius: 10px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/common.less",
    "content": "//\n// Common control styles\n// --------------------------------------------------\n\n.oc-progress-bar {\n    background-color: var(--oc-accent, #0076ff);\n}\n\n//\n// The scroll panel can host a scrollbar control. It has a right border that covers\n// the scrollbar to satisfy the design requirements.\n//\n.control-scrollpanel {\n    position: relative;\n    background: @tertiary-bg;\n\n    .control-scrollbar {\n        &.vertical > .scrollbar-scrollbar {\n            right: 0;\n        }\n    }\n}\n\n.tooltip {\n    .tooltip-inner {\n        text-align: left;\n        padding: 5px 8px;\n    }\n\n    &.show {\n        opacity: 1;\n    }\n}\n\n//\n// General Status Indicator\n//\n\n.status-indicator {\n    width: 10px;\n    height: 10px;\n    border-radius: 20px;\n    display: inline-block;\n    margin-right: 3px;\n    border: 1px solid rgba(var(--bs-body-bg-rgb), 0.9);\n}\n\n//\n// Logos\n//\n\n.oc-logo-white {\n    background-image: url(../images/october-logo-white.svg);\n    background-position: 50% 50%;\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n.oc-logo,\n.october-cms-logo-grey {\n    background-image: url(../images/october-logo.svg);\n    background-position: 50% 50%;\n    background-repeat: no-repeat;\n    background-size: contain;\n}\n\n.layout.control-tabs.oc-logo-transparent:not(.has-tabs),\n.flex-layout-column.oc-logo-transparent:not(.has-tabs),\n.layout-cell.oc-logo-transparent {\n    background-size: auto 38px;\n    background-repeat: no-repeat;\n    background-image: url(../images/october-logo.svg);\n    background-position: 50% 50%;\n    position: relative;\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/filelist.less",
    "content": "@filelist-active:                      @brand-selection;\n@filelist-active-text:                 #ffffff;\n@filelist-active-border:               @brand-primary;\n@filelist-norecords-text:              #666666;\n@filelist-norecords-bg:                #eeeeee;\n@filelist-cb-border:                   #cccccc;\n@filelist-title-hero:                  @primary-color;\n@filelist-hero-item-bg:                @primary-bg;\n@filelist-hero-item-border:            @toolbar-border;\n@filelist-hero-hover-bg:               @dropdown-hover-bg;\n@filelist-hero-hover-text:             @dropdown-hover-color;\n@filelist-hero-active-bg:              @dropdown-active-bg;\n@filelist-hero-active-text:            @dropdown-hover-color;\n\n//\n// File list control\n// --------------------------------------------------\n\n.control-filelist {\n    .listPaddings (@level, @offset-base) when (@level > 0) {\n        > li.group {\n            > ul {\n                > li > a {\n                    padding-left: (@level+2)*@offset-base;\n                    margin-left: -1*@level*@offset-base;\n                }\n\n                .listPaddings(@level - 1, @offset-base);\n            }\n        }\n    }\n    .listPaddings (0, 27px) {}\n\n    p.no-data {\n        padding: 22px 0;\n        margin: 0;\n        color: @filelist-norecords-text;\n        font-size: @font-size-base;\n        text-align: center;\n        font-weight: normal;\n        border-radius: @border-radius-base;\n    }\n\n    ul {\n        padding: 0;\n        margin: 0;\n\n        li {\n            font-weight: normal;\n            line-height: 150%;\n            position: relative;\n            list-style: none;\n\n            a:hover {\n                background: @toolbar-hover-bg;\n            }\n\n            &.active > a {\n                background: @filelist-active;\n                position: relative;\n\n                span.title, span.description {\n                    color: @filelist-active-text;\n                }\n            }\n\n            a {\n                display: block;\n                padding: 10px 45px 10px 20px;\n                outline: none;\n\n                &:hover, &:focus, &:active {\n                    text-decoration: none;\n                }\n\n                span {\n                    display: block;\n\n                    &.title {\n                        font-weight: normal;\n                        color: @toolbar-color;\n                        font-size: @font-size-base;\n                    }\n\n                    &.description {\n                        color: @primary-color;\n                        font-size: @font-size-base - 2;\n                        white-space: nowrap;\n                        font-weight: normal;\n                        overflow: hidden;\n                        text-overflow: ellipsis;\n\n                        strong {\n                            color: @toolbar-color;\n                            font-weight: normal;\n                        }\n                    }\n                }\n            }\n\n            &.group {\n                > h4, > div.group > h4 {\n                    font-weight: normal;\n                    font-size: @font-size-base;\n                    margin-top: 0;\n                    margin-bottom: 0;\n                    position: relative;\n\n                    a {\n                        padding: 10px 20px 10px 53px;\n                        color: @toolbar-color;\n                        position: relative;\n                        outline: none;\n\n                        &:hover { background: transparent; }\n\n                        &:before, &:after {\n                            width: 10px;\n                            height: 10px;\n                            display: block;\n                            position: absolute;\n                            top: 1px;\n                        }\n\n                        &:after {\n                            left: 33px;\n                            top: 9px;\n                            .icon(@icon-folder);\n                            color: @color-list-icon;\n                            font-size: 16px;\n                        }\n\n                        &:before {\n                            left: 20px;\n                            top: 9px;\n                            color: @color-list-arrow;\n                            .icon(@icon-caret-right);\n                            transform: rotate(90deg) translate(5px, 0);\n                            transition: all 0.1s ease;\n                        }\n                    }\n                }\n\n                > ul {\n                    > li > a {\n                        padding-left: 52px;\n                    }\n\n                    > li.group {\n                        padding-left: 20px;\n                    }\n\n                    .listPaddings(10, 27px);\n                }\n\n                &[data-status=collapsed] {\n                    > h4 a:before, > div.group > h4 a:before {\n                        transform: rotate(0deg) translate(3px, 0);\n                    }\n\n                    & > ul, & > div.subitems {\n                        display: none;\n                    }\n                }\n            }\n\n            > div.controls {\n                position: absolute;\n                right: 19px;\n                top: 6px;\n\n                .dropdown {\n                    width: 14px;\n                    height: 21px;\n\n                    &.open a.control {\n                        display: block!important;\n                        &:before {\n                            visibility: visible;\n                            display: block;\n                        }\n                    }\n                }\n\n                a.control {\n                    color: @toolbar-color;\n                    font-size: @font-size-base;\n                    visibility: hidden;\n                    overflow: hidden;\n                    width: 14px;\n                    height: 21px;\n                    display: none;\n                    text-decoration: none;\n                    cursor: pointer;\n                    padding: 0;\n                    opacity: 0.5;\n                    &:before {\n                        visibility: visible;\n                        display: block;\n                        margin-right: 0;\n                    }\n\n                    &:hover {\n                        opacity: 1;\n                    }\n                }\n            }\n\n            &:hover {\n                > div.controls, > a.control {\n                    display: block!important;\n\n                    > a.control {\n                        display: block!important;\n                    }\n                }\n            }\n\n            .checkbox {\n                position: absolute;\n                top: -5px;\n                right: 0;\n\n                label {\n                    margin-right: 0;\n\n                    &:before {\n                        border-color: @filelist-cb-border;\n                    }\n                }\n            }\n        }\n    }\n\n    &.single-line {\n        ul {\n            li a span.title {\n                text-overflow: ellipsis;\n                overflow: hidden;\n                white-space: nowrap;\n            }\n        }\n    }\n\n    //\n    // Templates have emphasis\n    //\n\n    &.filelist-hero {\n        .a-hover() {\n            background: @filelist-hero-hover-bg;\n            border-bottom: 1px solid @filelist-hero-hover-bg !important;\n            span.title, span.description {\n                color: @filelist-hero-hover-text !important;\n            }\n\n            .list-icon {\n                color: @filelist-hero-hover-text !important;\n            }\n        }\n\n        .a-active() {\n            background: @filelist-hero-active-bg;\n            border-bottom: 1px solid @filelist-hero-active-bg !important;\n\n            span.title, span.description {\n                color: @filelist-hero-active-text !important;\n            }\n\n            .list-icon {\n                color: @filelist-hero-active-text !important;\n            }\n        }\n\n        ul {\n            li {\n                background: @filelist-hero-item-bg;\n                border-bottom: none;\n\n                > a {\n                    padding: 11px 45px 10px 50px;\n                    font-size: @font-size-base - 1;\n                    border-bottom: 1px solid @filelist-hero-item-border;\n\n                    span.title {\n                        font-size: @font-size-base;\n                        font-weight: normal;\n                        color: @filelist-title-hero;\n                    }\n\n                    span.description {\n                        font-size: @font-size-base - 1;\n                    }\n\n                    .list-icon {\n                        position: absolute;\n                        left: 14px;\n                        top: 9px;\n                        font-size: 22px;\n                        color: #b7c0c2;\n                    }\n\n                    .list-description {\n                        position: absolute;\n                        right: 12px;\n                        top: 50%;\n                        transform: translateY(-50%);\n                        font-size: 16px;\n                        color: @primary-color;\n                        cursor: help;\n                        opacity: 0.7;\n                        transition: opacity 0.15s ease;\n\n                        &:hover {\n                            opacity: 1;\n                        }\n                    }\n\n                    &:hover {\n                        .a-hover();\n\n                        .list-description {\n                            color: @filelist-hero-hover-text;\n                        }\n                    }\n\n                    &:active {\n                        .a-active();\n\n                        .list-description {\n                            color: @filelist-hero-active-text;\n                        }\n                    }\n                }\n\n                .checkbox {\n                    top: -4px;\n                    right: 0;\n                }\n\n                &.no-description {\n                    .list-icon {\n                        top: 10px;\n                    }\n                }\n\n                &.has-description > a {\n                    padding-right: 40px;\n                }\n\n                &.active {\n                    > a {\n                        border-bottom: 1px solid @filelist-active;\n\n                        &:after {\n                            display: none;\n                        }\n\n                        > span.borders {\n                            &:before {\n                                content: ' ';\n                                position: absolute;\n                                width: 100%;\n                                height: 1px;\n                                display: block;\n                                left: 0;\n                                background-color: @filelist-active;\n                            }\n\n                            &:before {top: -1px;}\n                        }\n\n                        &:hover > span.borders:before {\n                            background-color: @filelist-hero-hover-bg;\n                        }\n\n                        &:active > span.borders:before {\n                            background-color: @filelist-hero-active-bg;\n                        }\n\n                        span.title, span.description {\n                            color: @filelist-hero-active-text !important;\n                        }\n\n                        .list-icon {\n                            color: @filelist-hero-active-text !important;\n                        }\n                    }\n                }\n\n                > h4 {\n                    padding-top: 7px;\n                    padding-bottom: 6px;\n                    border-bottom: 1px solid @filelist-hero-item-border;\n                }\n\n                > div.controls {\n                    display: none;\n                    position: absolute;\n                    right: 16px;\n                    top: 15px;\n\n                    > a.control {\n                        width: 16px;\n                        height: 23px;\n                        background: transparent;\n                        overflow: hidden;\n                        display: inline-block;\n                        color: @filelist-hero-hover-text!important;\n                        padding: 0;\n\n                        &:before {\n                            font-size: 17px;\n                        }\n                    }\n                }\n\n                &:hover > div.controls {\n                    display: block;\n                }\n\n                &.separator {\n                    position: relative;\n                    border-bottom: 1px solid @border-color;\n                    padding: 12px 15px 13px 15px;\n\n                    &:before {\n                        z-index: 31;\n                        .triangle(down, 19px, 11px, @primary-bg);\n                        position: absolute;\n                        left: 13px;\n                        bottom: -8px;\n                    }\n\n                    &:after {\n                        z-index: 30;\n                        .triangle(down, 17px, 9px, @border-color);\n                        position: absolute;\n                        left: 14px;\n                        bottom: -9px;\n                    }\n\n                    h5 {\n                        color: @heading-color;\n                        font-size: @font-size-base;\n                        margin: 0;\n                        font-weight: normal;\n                        padding: 0;\n                    }\n                }\n            }\n\n            > li.group {\n                > ul > li > a {\n                    padding-left: 66px;\n                }\n            }\n        }\n\n        &.single-level {\n            ul li:hover {\n                background: @filelist-hero-hover-bg;\n\n                > a {\n                    .a-hover();\n                }\n            }\n            ul li:active {\n                background: @filelist-hero-active-bg;\n\n                > a {\n                    .a-active();\n                }\n            }\n        }\n    }\n}\n\n.control-filelist.snippet-list {\n    li > a {\n        position: relative;\n        color: @toolbar-color;\n\n        &:before {\n            .icon-OctoFont();\n            content: @icon-code-snippet;\n            font-size: 19.5px;\n\n            position: absolute;\n            width: 17px;\n            height: 19px;\n            left: 18px;\n            top: 12px;\n        }\n\n        &:hover {\n            &:before {\n                color: @filelist-hero-hover-text;\n            }\n        }\n    }\n\n    li.group ul li > a:before {\n        left: 34px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/menu-mode-selector.less",
    "content": "div.control-simplelist.is-selectable-box.menu-mode-selector {\n    margin-left: 0;\n    margin-top: 10px;\n    border: none;\n\n    li {\n        margin: 0 16px 16px 0;\n        width: 175px;\n\n        &.active .menu-mode-box {\n            border-color: @brand-accent;\n        }\n\n        .heading {\n            margin: 0;\n            text-align: left;\n            padding: 18px 17px;\n        }\n    }\n\n    .menu-mode-box {\n        display: block;\n        border: 2px solid @border-color;\n        background: @input-bg;\n        border-radius: 10px;\n\n        .mode-image {\n            display: block;\n            height: 42px;\n            border-bottom: 1px solid @border-color;\n            position: relative;\n\n            &:before {\n                position: absolute;\n                left: 17px;\n            }\n        }\n\n        &.menu-mode-box-inline .mode-image:before {\n            .backend-icon-sprite-pseudo(131px, 10px, 0, 100px);\n            top: 15px;\n        }\n\n        &.menu-mode-box-text .mode-image:before {\n            .backend-icon-sprite-pseudo(137px, 6px, 0, 120px);\n            top: 17px;\n        }\n\n        &.menu-mode-box-tiles .mode-image:before {\n            .backend-icon-sprite-pseudo(126px, 20px, 0, 139px);\n            top: 10px;\n        }\n\n        &.menu-mode-box-icons .mode-image:before {\n            .backend-icon-sprite-pseudo(79px, 10px, 61px, 169px);\n            top: 15px;\n        }\n\n        &.menu-mode-box-collapsed .mode-image {\n            &:before {\n                .backend-icon-sprite-pseudo(35px, 10px, 0, 170px);\n                top: 15px;\n            }\n\n            &:after {\n                position: absolute;\n                right: 17px;\n                top: 13px;\n                .backend-icon-sprite-pseudo(10px, 16px, 44px, 167px);\n            }\n        }\n\n        &.menu-mode-box-left {\n            height: 98px;\n\n            .mode-image {\n                width: 42px;\n                height: 93px;\n                float: left;\n                border-bottom: none;\n                border-right: 1px solid @border-color;\n\n                &:before {\n                    top: 17px;\n                    .backend-icon-sprite-pseudo(10px, 56px, 148px, 100px);\n                }\n            }\n\n            .heading {\n                margin-left: 42px;\n                text-align: left;\n                padding: 18px 17px;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/namevaluelist.less",
    "content": "table.name-value-list {\n    border-collapse: collapse;\n    font-size: 13px;\n\n    th, td {\n        padding: 4px 0 4px 0;\n        vertical-align: top;\n    }\n\n    tr:first-child {\n        th, td {\n            padding-top: 0;\n        }\n    }\n\n    th {\n        font-weight: 600;\n        color: @primary-color;\n        padding-right: 15px;\n        text-transform: uppercase;\n    }\n\n    td {\n        color: @text-color;\n        word-wrap: break-word;\n    }\n}"
  },
  {
    "path": "modules/backend/assets/less/controls/onboarding.less",
    "content": "/* Custom Modal */\n.modal-content .onboarding-modal {\n    margin: -1px;\n    border-radius: 15px;\n\n    .modal-header {\n        height: 132px;\n        border-bottom: none;\n\n        background-image: url('../images/license-header.png');\n        background-size: cover;\n        background-repeat: no-repeat;\n\n        .onboarding-logo {\n            width: 248px;\n            height: 41px;\n        }\n\n        .btn-close {\n            position: absolute;\n            width: 19px;\n            height: 19px;\n            top: 15px;\n            right: 15px;\n            border: none;\n            background-color: transparent;\n            background-image: url('../images/license-header-close.png');\n            background-size: cover;\n            background-size: 20px 20px;\n            opacity: 1;\n        }\n    }\n\n    .modal-footer {\n        .btn {\n            border-radius: 44px;\n        }\n    }\n}\n\n/* Custom Watermark */\nbody.onboarding-popup-visible {\n    .onboarding-popup-collapsed {\n        display: none;\n    }\n}\n\n.onboarding-popup-collapsed {\n    display: block;\n    position: fixed;\n    cursor: pointer;\n    width: 60px;\n    height: 60px;\n    right: 55px;\n    bottom: 40px;\n    border-radius: 60px;\n    background-color: #E67E21;\n    z-index: 1049;\n\n    &:after {\n        content: '';\n        width: 30px;\n        height: 40px;\n        position: absolute;\n        top: 10px;\n        left: 15px;\n        background-image: url('../images/october-leaf-white.svg');\n        background-size: cover;\n    }\n\n    > div {\n        position: absolute;\n        width: 70px;\n        height: 70px;\n        left: -5px;\n        top: -5px;\n        transform: rotate(0);\n        display: none;\n\n        &:before {\n            content: '';\n            width: 38px;\n            height: 38px;\n            position: absolute;\n            bottom: -4px;\n            right: -1px;\n            opacity: 1;\n            background-image: url('../images/license-spinner.png');\n            background-size: 39px 39px;\n        }\n    }\n\n    &.onboarding-popup-just-collapsed > div {\n        transform: rotate(720deg);\n        transition: transform 2s linear;\n\n        &:before {\n            opacity: 0;\n            transition: opacity 0.5s;\n            transition-delay: 1s;\n        }\n    }\n\n    &.onboarding-popup-collapse-animation-start > div {\n        display: block;\n    }\n}\n\n@media (max-height: 740px) {\n    .onboarding-popup-collapsed {\n        right: 35px;\n        bottom: 10px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/panels.less",
    "content": "@panel-border-color: @primary-border;\n\n// @deprecated div.panel is used by builder\ndiv.panel,\ndiv.media-panel {\n    padding: 20px;\n\n    &.no-padding {\n        padding: 0;\n    }\n\n    &.padding-top {\n        padding-top: 20px;\n    }\n\n    &.padding-less {\n        padding: 15px;\n    }\n\n    &.transparent {\n        background: transparent;\n    }\n\n    &.border-left {\n        border-left: 1px solid @panel-border-color;\n    }\n\n    &.border-right {\n        border-right: 1px solid @panel-border-color;\n    }\n\n    &.border-bottom {\n        border-bottom: 1px solid @panel-border-color;\n    }\n\n    &.border-top {\n        border-top: 1px solid @panel-border-color;\n    }\n\n    // Panel sections\n    h3.section,\n    > label {\n        color: @primary-color;\n        font-size: 13px;\n        font-weight: 600;\n    }\n\n    > label {\n        margin-bottom: 5px;\n    }\n\n    // Selector group\n    .nav.selector-group {\n        margin: 0 -20px 20px -20px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/reportwidgets.less",
    "content": "// @deprecated\n.report-widget {\n    padding: 15px;\n    background: @popup-bg;\n    box-sizing: border-box;\n    border-radius: @border-radius-large;\n    font-size: @font-size-base;\n\n    h3 {\n        font-size: @font-size-base;\n        color: @color-report-widget-title;\n        text-transform: uppercase;\n        font-weight: 600;\n        margin-top: 0;\n        margin-bottom: 30px;\n    }\n\n    .height-100 { height: 100px; }\n    .height-200 { height: 200px; }\n    .height-300 { height: 300px; }\n    .height-400 { height: 400px; }\n    .height-500 { height: 500px; }\n\n    p.report-description {\n        margin-bottom: 0;\n        margin-top: 15px;\n        font-size: 12px;\n        line-height: 190%;\n        color: @color-report-widget-description;\n    }\n\n    a:not(.btn) {\n        color: @color-report-widget-link;\n        text-decoration: none;\n        &:hover {\n            color: @link-color;\n            text-decoration: none;\n        }\n    }\n\n    p.flash-message.static {\n        margin-bottom: 0;\n    }\n\n    .icon-circle, .icon-circle-full {\n        &.success { color: @brand-success; }\n        &.primary { color: @brand-primary; }\n        &.warning { color: @brand-warning; }\n        &.danger { color: @brand-danger; }\n        &.info { color: @brand-info; }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/scrollable-panel.less",
    "content": ".scrollable-panel-container {\n    position: relative;\n    &:before {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 0;\n        background: transparent url(../images/scrollable-panel-shadow.png) repeat-x left top;\n        transition: height 0.1s, width 0.1s;\n    }\n\n    &.scrolled {\n        &:before {\n            height: 9px;\n        }\n    }\n\n    &.horizontal {\n        &:before {\n            top: 0;\n            width: 0;\n            height: 100%;\n        }\n    }\n\n    &.horizontal.scrolled:before {\n        &:before {\n            width: 9px;\n            background: transparent url(../images/scrollable-panel-shadow-horizontal.png) repeat-x left top;\n        }\n    }\n\n    .scrollable {\n        position: absolute;\n        left: 0;\n        top: 0;\n        height: 100%;\n        width: 100%;\n    }\n}"
  },
  {
    "path": "modules/backend/assets/less/controls/scrollbar.less",
    "content": "//\n// Scrollbar\n// --------------------------------------------------\n\n.drag-noselect {\n    user-select: none;\n}\n\n@scrollbar-thumb-size: 6px;\n\n.control-scrollbar {\n    position: relative;\n    overflow: hidden;\n    height: 100%;\n\n    >.scrollbar-scrollbar {\n        position: absolute;\n        z-index: 100;\n        .scrollbar-track {\n            background-color: @color-scrollbar-track;\n            position: relative;\n            .border-radius(5px);\n\n            .scrollbar-thumb {\n                background-color: @color-scrollbar-thumb;\n                .border-radius(5px);\n                cursor: pointer;\n                overflow: hidden;\n                position: absolute;\n            }\n        }\n\n        &.disabled {\n            display: none !important;\n        }\n    }\n\n    &.vertical {\n        >.scrollbar-scrollbar {\n            right: 0;\n            margin-right: 5px;\n            width: @scrollbar-thumb-size;\n            .scrollbar-track {\n                height: 100%;\n                width: @scrollbar-thumb-size;\n                .scrollbar-thumb {\n                    height: 20px;\n                    width: @scrollbar-thumb-size;\n                    top: 0;\n                    left: 0;\n                }\n            }\n\n            &:active, &:hover {\n                width: @scrollbar-thumb-size + 2px;\n                .transition(width .3s);\n                .scrollbar-track,\n                .scrollbar-thumb {\n                    width: @scrollbar-thumb-size + 2px;\n                    .transition(width .3s);\n                }\n            }\n        }\n    }\n\n    &.horizontal {\n        >.scrollbar-scrollbar {\n            margin: 0 0 5px;\n            clear: both;\n            height: @scrollbar-thumb-size;\n            .scrollbar-track {\n                width: 100%;\n                height: @scrollbar-thumb-size;\n                .scrollbar-thumb {\n                    height: @scrollbar-thumb-size;\n                    margin: 2px 0;\n                    left: 0;\n                    top: 0;\n                }\n            }\n\n            &:active, &:hover {\n                height: @scrollbar-thumb-size + 2px;\n                .transition(height .3s);\n                .scrollbar-track,\n                .scrollbar-thumb {\n                    height: @scrollbar-thumb-size + 2px;\n                    .transition(height .3s);\n                }\n            }\n        }\n    }\n}\n\n@media (pointer: coarse) {\n    .control-scrollbar {\n        overflow: auto;\n    }\n}\n\n.no-touch .control-scrollbar {\n    >.scrollbar-scrollbar {\n        opacity: 0;\n        .transition(opacity 0.3s);\n    }\n\n    &:active >.scrollbar-scrollbar,\n    &:hover >.scrollbar-scrollbar {opacity: 1;}\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/scrollpad.less",
    "content": ".scrollpad-scrollbar-size-tester {\n    width: 50px;\n    height: 50px;\n    overflow-y: scroll;\n    position: absolute;\n    top: -200px;\n    left: -200px;\n\n    div {\n        height: 100px;\n    }\n\n    &::-webkit-scrollbar {\n        width: 0;\n        height: 0;\n    }\n}\n\ndiv.control-scrollpad {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    overflow: hidden;\n\n    > div {\n        overflow: hidden;\n        overflow-y: scroll;\n        height: 100%;\n\n        &::-webkit-scrollbar {\n            width: 0;\n            height: 0;\n        }\n    }\n\n    &[data-direction=horizontal] > div {\n        overflow-x: scroll;\n        overflow-y: hidden;\n        width: 100%;\n\n        &::-webkit-scrollbar {\n            width: auto;\n            height: 0;\n        }\n    }\n\n    > .scrollpad-scrollbar {\n        z-index: 199; // Be careful here\n        position: absolute;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        width: 11px;\n        background-color: @color-scrollbar-track;\n        opacity: 0;\n        overflow: hidden;\n        .border-radius(5px);\n        .transition(opacity 0.3s);\n\n        .drag-handle {\n            position: absolute;\n            right: 2px;\n            min-height: 10px;\n            width: 7px;\n            background-color: @color-scrollbar-thumb;\n            .border-radius(5px);\n        }\n\n        &:hover {\n            opacity: .7;\n            transition: opacity 0 linear;\n        }\n\n        &[data-visible] {\n            opacity: .7;\n        }\n\n        &[data-hidden] {\n            display: none;\n        }\n    }\n\n    &[data-direction=horizontal] > .scrollpad-scrollbar {\n        top: auto;\n        left: 0;\n        width: auto;\n        height: 11px;\n\n        .drag-handle {\n            right: auto;\n            top: 2px;\n            height: 7px;\n            min-height: 0;\n            min-width: 10px;\n            width: auto;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/selector-group.less",
    "content": ".nav.selector-group {\n    font-size: 13px;\n    letter-spacing: 0.01em;\n    margin-bottom: 20px;\n\n    li {\n        padding: 0 3px;\n        margin: 0;\n\n        a {\n            padding: 7px 20px 7px 23px;\n            color: @toolbar-color;\n            border-radius: @border-radius-base;\n\n            &:hover {\n                background-color: @toolbar-focus-bg;\n            }\n        }\n\n        &.active {\n            a {\n                background: @brand-selection;\n                padding-left: 20px;\n                color: white;\n            }\n        }\n\n        i[class^=\"icon-\"] {\n            font-size: 17px;\n            margin-right: 6px;\n            position: relative;\n            top: 1px;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/sidenav-tree.less",
    "content": "/* @deprecated v4 -sg */\n@settings-icon-size:     22px;\n@settings-color:         var(--oc-settings-color);\n@settings-bg:            var(--oc-settings-bg);\n@settings-item:          var(--oc-settings-item);\n@settings-active-color:  var(--oc-settings-active-color);\n@settings-active-bg:     var(--oc-settings-active-bg);\n@settings-hover-bg:      var(--oc-settings-hover-bg);\n\n@settings-back-link-color: white;\n@settings-back-link-bg:    var(--bs-secondary);\n\nhtml .sidenav-tree {\n    background: @settings-bg;\n}\n\n.sidenav-tree {\n    width: 300px;\n    flex-shrink: 0;\n    border-right: 1px solid @primary-border;\n\n    // .scrollbar-scrollbar {\n    //     display: none !important;\n    // }\n\n    .sidenav-tree-scroll-canvas {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n\n    .settings-search-toolbar-item  {\n        display: block;\n        background: @input-bg;\n        position: relative;\n\n        &:before {\n            display: block;\n            width: 15px;\n            height: 15px;\n            position: absolute;\n            background-position: -238px 0;\n            top: 13px;\n            right: 15px;\n            font-size: 0;\n        }\n\n        input.form-control {\n            border: none;\n            outline: none;\n            padding: 1px 35px 1px 10px;\n            border-bottom: 1px solid @primary-border;\n            height: 40px;\n            background: transparent;\n            border-radius: 0;\n\n            &.search {\n                background-position: right -78px;\n            }\n        }\n    }\n\n    ul {\n        padding: 0;\n        margin: 0;\n        list-style: none;\n    }\n\n    div.scrollbar-thumb {\n        background: rgba(0,0,0,.2) !important;\n    }\n\n    ul.top-level > li {\n        &[data-status=collapsed] {\n            > div.group {\n                h3:before {\n                    transform: rotate(0deg) translate(2px, -2px);\n                }\n\n                // Hide triangle\n                &:before, &:after {\n                    display: none;\n                }\n            }\n\n            ul {\n                display: none;\n            }\n        }\n\n        > div.group {\n            position: relative;\n            position: sticky;\n            top: 0;\n            z-index: 1;\n\n            h3 {\n                user-select: none;\n                font-size: @font-size-base;\n                font-weight: 600;\n                padding: 9px 15px 7px 25px;\n                margin: 0;\n                position: relative;\n                cursor: pointer;\n\n                &:before {\n                    display: block;\n                    position: absolute;\n                    width: 10px;\n                    height: 10px;\n                    left: 10px;\n                    top: 10px;\n                    .icon(@icon-angle-right);\n                    transform: rotate(90deg) translate(5px, -3px);\n                    transition: all 0.1s ease;\n                    font-size: 16px;\n                }\n            }\n        }\n\n        > ul {\n            li {\n                padding: 5px;\n\n                a {\n                    display: block;\n                    position: relative;\n                    padding: 10px 5px 15px 44px;\n                    text-decoration: none !important;\n                    border-radius: @border-radius-large;\n\n                    i {\n                        position: absolute;\n                        left: 11px;\n                        top: 11px;\n                        font-size: @settings-icon-size;\n                    }\n\n                    span {\n                        display: block;\n                        line-height: 150%;\n\n                        &.header {\n                            margin-bottom: 3px;\n                        }\n\n                        &.description {\n                            font-size: .875em;\n                        }\n                    }\n                }\n\n                a:hover,\n                &.active a {\n                    opacity: 1;\n                    text-decoration: none;\n                }\n            }\n        }\n    }\n}\n\n.system-home-link {\n    display: block;\n    padding: 13px 15px;\n    background: @settings-back-link-bg;\n    color: @settings-back-link-color;\n    font-size: 14px;\n    line-height: 14px;\n    text-decoration: none;\n\n    i {\n        display: inline-block;\n        margin-right: 10px;\n\n        &:before {\n            .backend-icon-sprite-pseudo(24px, 11px, 52px, 0);\n        }\n    }\n\n    &:hover {\n        color: @settings-back-link-color;\n        text-decoration: none;\n    }\n\n    &.back-link-other {\n        display: none;\n        margin-bottom: 20px;\n    }\n\n    @media (max-width: @screen-sm) {\n        &.back-link-other {\n            display: block;\n        }\n    }\n}\n\n.layout-container {\n    .system-home-link.back-link-other {\n        margin: -@padding-standard -@padding-standard @padding-standard -@padding-standard;\n    }\n}\n\nbody.slim-container {\n    .layout-container {\n        .system-home-link.back-link-other {\n            margin: -@padding-standard 0 @padding-standard 0;\n        }\n    }\n}\n\nbody.compact-container {\n    .layout-container {\n        .system-home-link.back-link-other {\n            margin: 0;\n        }\n    }\n}\n\n@media (max-width: @screen-sm) {\n    .sidenav-tree {\n        border-right: none;\n        width: 100%;\n        height: auto;\n        display: none !important;\n    }\n\n    body.has-sidenav-tree {\n        #layout-body {\n            display: block;\n        }\n    }\n}\n\n// Expanded\n\nbody.sidenav-tree-expanded {\n    #layout-body {\n       display: none !important;\n    }\n\n    .sidenav-tree {\n        display: block !important;\n        margin: 0 auto;\n        border-right: none;\n        border-left: none;\n        flex-shrink: inherit;\n\n        width: 100%;\n        padding: 30px 10px 50px 10px;\n\n        .scrollbar-scrollbar {\n            display: none !important;\n        }\n\n        .system-home-link {\n            display: none !important;\n        }\n\n        .sidenav-tree-scroll-canvas {\n            position: relative;\n        }\n\n        ul.top-level > li > div.group {\n            margin-top: 10px;\n\n            h3 {\n                background: transparent;\n            }\n        }\n\n        ul.top-level > li > ul {\n            display: flex;\n            flex-direction: row;\n            flex-wrap: wrap;\n            justify-content: flex-start;\n            align-items: stretch;\n            align-content: stretch;\n\n            > li {\n                display: inline-block;\n                padding: 10px;\n                width: 350px;\n\n                a {\n                    background: @settings-item;\n                    padding-top: 12px;\n                    padding-right: 15px;\n                    padding-bottom: 15px;\n                    padding-left: 54px;\n                    min-height: 100px;\n                    height: 100%;\n                    overflow: hidden;\n\n                    i {\n                        top: 15px;\n                        left: 12px;\n                        font-size: 28px;\n                    }\n                }\n\n                a:hover {\n                    background: @settings-hover-bg;\n                }\n            }\n        }\n    }\n\n    .settings-search-toolbar-item {\n        margin: 0px 10px 10px 10px;\n        border-radius: 20px !important;\n\n        input.form-control {\n            border: 1px solid @input-border;\n            border-radius: 20px !important;\n            padding-left: 15px;\n            line-height: 40px;\n            height: 40px;\n\n            &:focus {\n                border-color: @input-border-focus;\n            }\n        }\n    }\n}\n\n// Item Styling\n\n.sidenav-tree ul.top-level > li {\n    > div.group h3 {\n        color: @settings-color;\n\n        &:before {\n            color: @settings-color;\n        }\n    }\n}\n\n.sidenav-tree ul.top-level > li > ul li {\n    a {\n        color: @settings-color;\n\n        span.header {\n            color: @settings-color;\n        }\n\n        span.description {\n            color: @settings-color;\n            opacity: .7;\n        }\n    }\n\n    a:hover {\n        background: @settings-hover-bg;\n        color: @settings-color;\n\n        span.header {\n            color: @settings-color;\n        }\n\n        span.description {\n            color: @settings-color;\n            opacity: 1;\n        }\n    }\n\n    &.active a {\n        color: @settings-active-color;\n        background: @settings-active-bg;\n\n        span.header {\n            color: @settings-active-color;\n        }\n\n        span.description {\n            color: @settings-active-color;\n            opacity: 1;\n        }\n    }\n}\n\n@media (max-width: @screen-sm) {\n    .sidenav-tree-expanded {\n        .sidenav-tree {\n            > .sidenav-tree-content {\n                // display: table !important;\n            }\n        }\n\n        #layout-body {\n            display: none !important;\n        }\n    }\n}\n\n@media (max-width: @screen-xs-max) {\n    body.sidenav-tree-expanded {\n        .sidenav-tree {\n            width: 100%;\n\n            ul.top-level > li > ul > li {\n                width: 100%;\n            }\n        }\n    }\n}\n\n//\n// Singular mode\n//\n\nbody:not(.sidenav-tree-expanded) .sidenav-tree {\n    .is-inactive-group {\n        display: none;\n    }\n\n    &.is-searching {\n        .is-inactive-group {\n            display: block;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/simplelist.less",
    "content": "//\n// Simple List\n// --------------------------------------------------\n// Usage (bullets):\n//   <div class=\"control-simplelist\">\n//       <ul>\n//           <li>Hello friend</li>\n//       </ul>\n//   </div>\n//\n// With icons (no bullets):\n//   <div class=\"control-simplelist with-icons\">\n//       <ul>\n//           <li class=\"oc-icon-check\">Hello friend</li>\n//       </ul>\n//   </div>\n//\n// With checkboxes:\n//   <div class=\"control-simplelist with-checkboxes\">\n//       <ul>\n//           <li>\n//               <div class=\"form-check\">\n//                   <input class=\"form-check-input\" id=\"checkbox-example1\" name=\"checkbox\" value=\"1\" type=\"checkbox\">\n//                   <label class=\"form-check-label\" for=\"checkbox-example1\"> Dodge Viper</label>\n//               </div>\n//           </li>\n//       </ul>\n//   </div>\n//\n// Divided (basic):\n//   <div class=\"control-simplelist is-divided\">\n//       <ul>\n//           <li>Hello friend</li>\n//       </ul>\n//   </div>\n//\n// Selectable:\n//   <div class=\"control-simplelist is-selectable\">\n//       <ul>\n//           <li>\n//               <a href=\"#\">\n//                   <h5 class=\"heading\">Hello friend</h5>\n//                   <p class=\"description\">Something cool over here</p>\n//               </a>\n//           </li>\n//       </ul>\n//   </div>\n//\n// Selectable (box):\n//   <div class=\"control-simplelist is-selectable-box\">\n//       <ul>\n//           <li>\n//               <a href=\"#\">\n//                   <div class=\"box\">\n//                       <div class=\"image\"><i class=\"icon-user\"></i></div>\n//                   </div>\n//                   <h5 class=\"heading\">Hello friend</h5>\n//                   <p class=\"description\">Something cool over here</p>\n//               </a>\n//           </li>\n//       </ul>\n//   </div>\n//\n\n.control-simplelist {\n    padding: 20px 20px 2px 20px;\n    margin-bottom: @padding-standard;\n    border: 1px solid @input-border;\n    background: @input-bg;\n    .border-radius(@border-radius-base);\n\n    ul { padding-left: 15px; }\n\n    &.form-control {\n        ul { margin-bottom: 0; }\n        li {\n            padding-top: 5px;\n            padding-bottom: 5px;\n        }\n    }\n\n    &.with-icons,\n    &.with-checkboxes,\n    &.is-divided,\n    &.is-selectable {\n        ul {\n            list-style-type: none;\n            padding-left: 0;\n        }\n    }\n\n    &.with-icons {\n        li > i {\n            margin-right: 5px;\n        }\n    }\n\n    &.with-checkboxes {\n        li {\n            div.custom-checkbox,\n            div.form-check {\n                display: inline-block;\n            }\n\n            &:first-child {\n                margin-top: 0;\n            }\n\n            &:last-child {\n                div.custom-checkbox,\n                div.form-check {\n                    margin-bottom: 0;\n\n                    label {\n                        margin-bottom: 5px;\n                    }\n                }\n            }\n        }\n    }\n\n    &.is-sortable {\n        li {\n            position: relative;\n            padding: 2px 0 2px 24px;\n        }\n\n        li .drag-handle {\n            width: 24px;\n            height: 24px;\n            cursor: move;\n            text-align: center;\n            color: @toolbar-color;\n            background: @toolbar-bg;\n            border-radius: 3px;\n            text-decoration: none;\n\n            position: absolute;\n            top: 1px;\n            left: -6px;\n\n            > i {\n                font-size: 24px;\n            }\n        }\n\n        li.sortable-chosen.sortable-ghost {\n            position: relative;\n            .drag-handle {\n                background: @toolbar-focus-bg;\n            }\n        }\n    }\n\n    &.is-scrollable {\n        height: 200px;\n        &.size-tiny { min-height: @size-tiny + 200; }\n        &.size-small { min-height: @size-small + 200; }\n        &.size-large { min-height: @size-large + 200; }\n        &.size-huge { min-height: @size-huge + 200; }\n        &.size-giant { min-height: @size-giant + 200; }\n    }\n\n    &.is-divided,\n    &.is-selectable,\n    &.is-selectable-box {\n        padding: 0;\n\n        li {\n            .heading {\n                font-size: 14px;\n                font-weight: 600;\n                margin-top: 10px;\n            }\n\n            .description {}\n        }\n    }\n\n    &.is-divided,\n    &.is-selectable {\n        li {\n            padding: 5px 10px;\n            border-bottom: 1px solid @border-color;\n\n            &:last-child {\n                border-bottom: none;\n            }\n        }\n    }\n\n    &.is-selectable {\n        li {\n            a {\n                padding: 5px 10px;\n                margin: -5px -10px;\n                display: block;\n                color: @text-color;\n            }\n            &:hover {\n                background: @brand-primary;\n                cursor: pointer;\n                &, a, .heading, .description { color: white; }\n                a { text-decoration: none; }\n            }\n            &.active {\n                a {\n                    background: #f0f0f0;\n                    &:hover {\n                        background: @brand-primary;\n                    }\n                }\n            }\n        }\n    }\n\n    &.is-selectable-box {\n        padding-top: 15px;\n        margin-bottom: 0;\n        background: transparent;\n\n        &.is-flush {\n            padding: 0;\n            margin-left: -8px;\n            ul { padding-left: 0; }\n        }\n\n        li {\n            width: 155px;\n            margin: 8px;\n            display: inline-block;\n            text-align: center;\n            vertical-align: top;\n\n            a {\n                text-decoration: none;\n                display: block;\n                color: @text-color;\n\n                .box {\n                    display: block;\n                    width: 155px;\n                    height: 155px;\n                    border: 3px solid rgba(0,0,0,.1);\n                    position: relative;\n                    background: @input-bg;\n                    .transition(border .3s ease);\n                }\n\n                .image {\n                    display: block;\n                    width: 56px;\n                    height: 56px;\n                    position: absolute;\n                    top: 50%;\n                    left: 50%;\n                    margin-top: -28px;\n                    margin-left: -28px;\n\n                    > i {\n                        font-size: 56px;\n                        color: rgba(0,0,0,.25);\n                    }\n                }\n\n                .heading {\n                    margin: 7px 0;\n                    padding: 0;\n                }\n\n                .description {\n                    font-size: 12px;\n                }\n\n                &:hover {\n                    .box {\n                        border-color: rgba(0,0,0,.2);\n                    }\n\n                    .image > i {\n                        color: rgba(0,0,0,.45);\n                    }\n                }\n            }\n        }\n\n        li.active a {\n            .box {\n                border-color: @brand-selection;\n            }\n\n            .image > i {\n                color: rgba(0,0,0,.45);\n            }\n        }\n    }\n}\n\n.list-preview .control-simplelist {\n    &.is-selectable {\n        ul {\n            margin-bottom: 0;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/snackbars.less",
    "content": ".october-snackbar {\n    padding: 14px 40px 0 16px;\n    background: @color-snackbar;\n    font-size: @font-size-base;\n    border-radius: 4px;\n    box-shadow: 0 1px 3px rgba(0,0,0,0.3);\n    max-width: 100%;\n    margin-right: 16px;\n    position: fixed;\n    z-index: @zindex-snackbar;\n    left: 16px;\n    bottom: 16px;\n    color: white;\n    opacity: 0;\n\n    &.enter {\n        transition: opacity 0.2s;\n    }\n\n    &.show-snackbar {\n        opacity: 1;\n    }\n\n    .snackbar-label {\n        float: left;\n        margin-right: 16px;\n        margin-bottom: 14px;\n    }\n\n    button {\n        outline: none;\n        -webkit-appearance: none;\n        background: transparent;\n        border-radius: 3px;\n        border: none;\n        color: @color-alert;\n        font-weight: 600;\n\n        &:focus {\n            background: @background-color-focus-dark;\n        }\n    }\n\n    .snackbar-dismiss {\n        .backend-hide-text();\n        width: 22px;\n        height: 22px;\n        position: absolute;\n        right: 10px;\n        top: 14px;\n\n        &:before {\n            content: '';\n            width: 7px;\n            height: 7px;\n            left: 7px;\n            top: 8px;\n            display: block;\n            position: absolute;\n            .backend-icon-sprite(156px, 10px);\n        }\n    }\n\n    .snackbar-action {\n        float: left;\n        margin: 0 0 14px -8px;\n        padding: 1px 8px;\n        text-transform: uppercase;\n    }\n}"
  },
  {
    "path": "modules/backend/assets/less/controls/svg-icons.less",
    "content": ".svg-icon-container {\n    img.svg-icon {\n        display: inline-block;\n    }\n\n    &.svg-active-effects {\n        img.svg-icon {\n            filter: grayscale(100%);\n        }\n\n        &.active {\n            img.svg-icon {\n                filter: none;\n            }\n        }\n    }\n}\n\nbody:not(.drag) {\n    .svg-icon-container {\n        &.svg-active-effects:hover {\n            img.svg-icon {\n                filter: none;\n            }\n        }\n    }\n}\n\n// SVG colorization (unused but useful research -sg)\n/*\n\nSet variables (sepia offset -30deg)\n--oc-mainnav-hue: unit(hue(@brand-mainnav-bg)-30, deg);\n--oc-mainnav-saturation: 300%;\n\nUse filter\nfilter: sepia(100%) hue-rotate(var(--oc-mainnav-hue)) saturate(var(--oc-mainnav-saturation));\n\nBase variables (grayscale)\n--oc-mainnav-hue: -30deg; // sepia offset: unit(hue(#000)-30, deg)\n--oc-mainnav-saturation: 0%;\n\n*/\n"
  },
  {
    "path": "modules/backend/assets/less/controls/tooltips.less",
    "content": ".october-tooltip {\n    display: inline-block;\n    padding: @tooltip-padding;\n    position: absolute;\n    border-radius: @tooltip-border-radius;\n    max-width: @tooltip-max-width;\n    transition: opacity 0.15s ease-out, transform 0.15s ease-out;\n    transform: scale(1);\n    opacity: 1;\n    color: @tooltip-color;\n    background: @tooltip-bg;\n    font-size: @tooltip-font-size;\n    line-height: 140%;\n    z-index: @zindex-tooltip;\n\n    .tooltip-hotkey {\n        display: inline-block;\n        margin-left: 5px;\n        letter-spacing: 1px;\n\n        &:empty {\n            display: none;\n        }\n\n        i {\n            font-style: normal;\n            margin-left: 5px;\n            padding: 0 2px;\n            display: inline-block;\n            border-radius: 3px;\n            background: rgba(255, 255, 255, 0.11);\n            color: rgba(255, 255, 255, 0.6);\n\n            &:last-child {\n                margin-right: -3px;\n            }\n        }\n    }\n\n    &.tooltip-hidden {\n        display: none;\n    }\n\n    &.tooltip-invisible {\n        opacity: 0;\n        transform: scale(0.95);\n    }\n}\n\n#flotTip, #chart-tooltip {\n    white-space: nowrap;\n    padding: @tooltip-padding;\n    background: @tooltip-bg;\n    position: absolute;\n    z-index: @zindex-tooltip;\n    color: @tooltip-color;\n    border-radius: @tooltip-border-radius;\n    font-size: @tooltip-font-size;\n    opacity: @tooltip-opacity;\n}\n"
  },
  {
    "path": "modules/backend/assets/less/controls/tree-path.less",
    "content": "ul.tree-path {\n    list-style: none;\n    padding: 0;\n    margin-bottom: 0;\n\n    li {\n        display: inline-block;\n        margin-right: 1px;\n        font-size: 13px;\n\n        &:after {\n            .icon(@icon-angle-right);\n            display: inline-block;\n            font-size: 13px;\n            margin-left: 5px;\n            position: relative;\n            top: 1px;\n            color: #95a5a6;\n        }\n\n        &:last-child {\n            a {\n                cursor: default;\n            }\n\n            &:after {\n                display: none;\n            }\n        }\n\n        &.go-up {\n            font-size: 12px;\n            margin-right: 7px;\n\n            a {\n                color: #95a5a6;\n\n                &:hover {\n                    color: @link-color;\n                }\n            }\n\n            &:after {\n                display: none;\n            }\n        }\n\n        &.root a {\n            font-weight: 600;\n            color: @primary-color;\n        }\n\n        a {\n            color: #95a5a6;\n\n            &:hover {\n                text-decoration: none;\n            }\n        }\n    }\n}"
  },
  {
    "path": "modules/backend/assets/less/controls/treelist.less",
    "content": "//\n// Tree List\n// --------------------------------------------------\n\n.control-treelist {\n    ol {\n        padding: 0;\n        margin: 0;\n        list-style: none;\n\n        ol {\n            margin: 0;\n            margin-left: 15px;\n            padding-left: 15px;\n            border-left: 1px solid #dbdee0;\n        }\n    }\n\n    > ol > li > div.record:before {\n        display: none;\n    }\n\n    li {\n        margin: 0;\n        padding: 0;\n        > div.record {\n            margin: 0;\n            font-size: @font-size-base;\n            margin-bottom: 5px;\n            position: relative;\n            display: block;\n\n            &:before {\n                color: #bdc3c7;\n                .icon(@icon-circle);\n                font-size: 6px;\n                position: absolute;\n                left: -18px;\n                top: 11px;\n            }\n\n            > a.move {\n                display: inline-block;\n                padding: 7px 0 7px 10px;\n                text-decoration: none;\n                color: #bdc3c7;\n                &:hover {\n                    color: @color-list-hover-bg;\n                }\n                &:before { .icon(@icon-bars); }\n            }\n            > span {\n                color: @color-list-text;\n                display: inline-block;\n                padding: 7px 15px 7px 5px;\n            }\n        }\n\n        &.dragged {\n            position: absolute;\n            z-index: 2000;\n            width: auto !important; // Prevent browser scrollbars\n            height: auto !important;\n            > div.record {\n                opacity: .5;\n                background: @color-list-hover-bg !important;\n                > a.move:before, > span { color: white; }\n\n                &:before {\n                    display: none;\n                }\n            }\n        }\n\n        &.placeholder {\n            display: inline-block;\n            position: relative;\n            background: @color-list-hover-bg !important;\n            height: 25px;\n            margin-bottom: 5px;\n            &:before {\n                display: block;\n                position: absolute;\n                .icon(@icon-chevron-left);\n                color: #d35714;\n                left: -10px;\n                top: 8px;\n                z-index: 2000;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/core/animations.less",
    "content": "//\n// Fade In\n//\n\n@-webkit-keyframes fadeIn {\n    0% {\n        opacity: 0;\n    }\n\n    100% {\n        opacity: 1;\n    }\n}\n\n@keyframes fadeIn {\n    0% {\n        opacity: 0;\n    }\n\n    100% {\n        opacity: 1;\n    }\n}\n\n.fadeIn {\n    -webkit-animation-name: fadeIn;\n    animation-name: fadeIn;\n}\n\n//\n// Fade In Down\n//\n\n@-webkit-keyframes fadeInDown {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n\n    100% {\n        opacity: 1;\n        -webkit-transform: none;\n        transform: none;\n    }\n}\n\n@keyframes fadeInDown {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -100%, 0);\n        -ms-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n\n    100% {\n        opacity: 1;\n        -webkit-transform: none;\n        -ms-transform: none;\n        transform: none;\n    }\n}\n\n.fadeInDown {\n    -webkit-animation-name: fadeInDown;\n    animation-name: fadeInDown;\n}\n\n//\n// Fade In Left\n//\n\n@-webkit-keyframes fadeInLeft {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n\n    100% {\n        opacity: 1;\n        -webkit-transform: none;\n        transform: none;\n    }\n}\n\n@keyframes fadeInLeft {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        -ms-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n\n    100% {\n        opacity: 1;\n        -webkit-transform: none;\n        -ms-transform: none;\n        transform: none;\n    }\n}\n\n.fadeInLeft {\n    -webkit-animation-name: fadeInLeft;\n    animation-name: fadeInLeft;\n}\n\n//\n// Fade In Right\n//\n\n@-webkit-keyframes fadeInRight {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n\n    100% {\n        opacity: 1;\n        -webkit-transform: none;\n        transform: none;\n    }\n}\n\n@keyframes fadeInRight {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0);\n        -ms-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n\n    100% {\n        opacity: 1;\n        -webkit-transform: none;\n        -ms-transform: none;\n        transform: none;\n    }\n}\n\n.fadeInRight {\n    -webkit-animation-name: fadeInRight;\n    animation-name: fadeInRight;\n}\n\n//\n// Fade In Up\n//\n\n@-webkit-keyframes fadeInUp {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n\n    100% {\n        opacity: 1;\n        -webkit-transform: none;\n        transform: none;\n    }\n}\n\n@keyframes fadeInUp {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 100%, 0);\n        -ms-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n\n    100% {\n        opacity: 1;\n        -webkit-transform: none;\n        -ms-transform: none;\n        transform: none;\n    }\n}\n\n.fadeInUp {\n    -webkit-animation-name: fadeInUp;\n    animation-name: fadeInUp;\n}\n\n//\n// Fade Out\n//\n\n@-webkit-keyframes fadeOut {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n    }\n}\n\n@keyframes fadeOut {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n    }\n}\n\n.fadeOut {\n    -webkit-animation-name: fadeOut;\n    animation-name: fadeOut;\n}\n\n//\n// Fade Out Down\n//\n\n@-webkit-keyframes fadeOutDown {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n}\n\n@keyframes fadeOutDown {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 100%, 0);\n        -ms-transform: translate3d(0, 100%, 0);\n        transform: translate3d(0, 100%, 0);\n    }\n}\n\n.fadeOutDown {\n    -webkit-animation-name: fadeOutDown;\n    animation-name: fadeOutDown;\n}\n\n//\n// Fade Out Left\n//\n\n@-webkit-keyframes fadeOutLeft {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n}\n\n@keyframes fadeOutLeft {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(-100%, 0, 0);\n        -ms-transform: translate3d(-100%, 0, 0);\n        transform: translate3d(-100%, 0, 0);\n    }\n}\n\n.fadeOutLeft {\n    -webkit-animation-name: fadeOutLeft;\n    animation-name: fadeOutLeft;\n}\n\n//\n// Fade Out Right\n//\n\n@-webkit-keyframes fadeOutRight {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n}\n\n@keyframes fadeOutRight {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(100%, 0, 0);\n        -ms-transform: translate3d(100%, 0, 0);\n        transform: translate3d(100%, 0, 0);\n    }\n}\n\n.fadeOutRight {\n    -webkit-animation-name: fadeOutRight;\n    animation-name: fadeOutRight;\n}\n\n//\n// Fade Out Up\n//\n\n@-webkit-keyframes fadeOutUp {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n}\n\n@keyframes fadeOutUp {\n    0% {\n        opacity: 1;\n    }\n\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, -100%, 0);\n        -ms-transform: translate3d(0, -100%, 0);\n        transform: translate3d(0, -100%, 0);\n    }\n}\n\n.fadeOutUp {\n    -webkit-animation-name: fadeOutUp;\n    animation-name: fadeOutUp;\n}\n\n//\n// Fade Cycle\n//\n\n@-webkit-keyframes fadeCycle {\n    0% {\n        opacity: 1;\n    }\n\n    50% {\n        opacity: .5;\n    }\n\n    100% {\n        opacity: 1;\n    }\n}\n\n@keyframes fadeCycle {\n    0% {\n        opacity: 1;\n    }\n\n    50% {\n        opacity: .5;\n    }\n\n    100% {\n        opacity: 1;\n    }\n}\n\n.fadeCycle {\n    -webkit-animation: fadeCycle 2s infinite;\n    -moz-animation: fadeCycle 2s infinite;\n    animation: fadeCycle 2s infinite;\n}\n"
  },
  {
    "path": "modules/backend/assets/less/core/base-editor-styles.less",
    "content": "@import \"boot.less\";\n\n@blockquote-level1-color: #5e35b1;\n@blockquote-level2-color: #00bcd4;\n@blockquote-level3-color: #43a047;\n@editor-text-color: #000;\n\na {\n    text-decoration: underline;\n    color: @link-color;\n}\n\nh1 {\n    font-size: 34px;\n    font-weight: normal;\n    margin-bottom: 20px;\n}\n\nh2 {\n    font-size: 26px;\n    font-weight: normal;\n    margin-bottom: 20px;\n}\n\nh3 {\n    font-size: 21px;\n    font-weight: normal;\n    margin-bottom: 20px;\n}\n\nh4 {\n    font-size: 18px;\n    font-weight: normal;\n    margin: 20px 0;\n}\n\nh5 {\n    font-size: 16px;\n    font-weight: normal;\n    color: #434343;\n}\n\nstrong {\n    font-weight: 700;\n}\n\npre {\n    white-space: pre-wrap;\n    word-wrap: break-word;\n    padding: 5px 10px;\n    border-radius: 4px;\n}\n\ncode {\n    background: #eee;\n    padding: 0px 3px 2px;\n    display: inline-block;\n    border-radius: 4px;\n}\n\nblockquote {\n    border-left: solid 2px @blockquote-level1-color;\n    margin-left: 0;\n    padding-left: 5px;\n    color: @blockquote-level1-color;\n    font-size: inherit;\n\n    blockquote {\n        border-color: @blockquote-level2-color;\n        color: @blockquote-level2-color;\n\n        blockquote {\n            border-color: @blockquote-level3-color;\n            color: @blockquote-level3-color;\n        }\n    }\n}\n\ntable {\n    border: none;\n    border-collapse: collapse;\n    empty-cells: show;\n    max-width: 100%;\n    margin-bottom: 10px;\n\n    td,\n    th {\n        border: 1px solid #ddd;\n        padding: 5px;\n\n        &:empty {\n            height: 20px;\n        }\n    }\n\n    th {\n        background: mix(white, @editor-text-color, 90%);\n    }\n}\n\nhr {\n    clear: both;\n    user-select: none;\n    page-break-after: always;\n}\n"
  },
  {
    "path": "modules/backend/assets/less/core/boot.less",
    "content": "//\n// Boots the Core LESS\n//\n// Includes non-output LESS files such as mixins and variables\n//\n\n@import \"variables/variables.less\";\n@import \"variables/variables.global.less\";\n@import \"variables/variables.form.less\";\n@import \"variables/variables.list.less\";\n@import \"variables/variables.zindex.less\";\n\n@import \"mixins/mixins.less\";\n@import \"mixins/mixins.css3.less\";\n@import \"mixins/mixins.gradient.less\";\n@import \"mixins/mixins.triangle.less\";\n@import \"mixins/mixins.utility.less\";\n@import \"mixins/mixins.backend-toolbar.less\";\n\n// Elements\n@import \"../../foundation/elements/icons/icons.mixins.less\";\n@import \"../../foundation/elements/icons/icons.variables.less\";\n@import \"../../foundation/elements/backendicons/backendicons.mixins.less\";\n"
  },
  {
    "path": "modules/backend/assets/less/core/mixins/mixins.backend-toolbar.less",
    "content": ".backend-toolbar-button() {\n    line-height: inherit;\n    display: inline-block;\n    color: inherit;\n    padding: 0 6px;\n    min-width: 40px;\n    text-align: center;\n    text-decoration: none !important;\n    border-radius: 4px;\n    outline: none;\n    box-shadow: none;\n    -webkit-appearance: none;\n    border: none;\n    background: transparent;\n\n    &.control-button {\n        color: @toolbar-color;\n        font-size: @font-size-base;\n        margin-right: 8px;\n        line-height: 30px;\n    }\n\n    &.icon-only {\n        min-width: 30px;\n    }\n\n    &[disabled] {\n        cursor: default;\n\n        > i,\n        > span,\n        &:after {\n            opacity: 0.5;\n        }\n    }\n\n    i {\n        display: inline-block;\n        position: relative;\n        font-size: 16px;\n        top: 1px;\n\n        + span.button-label {\n            margin-left: 6px;\n        }\n    }\n\n    &:not([disabled]):hover {\n        background: @toolbar-hover-bg;\n    }\n\n    &:not([disabled]):focus {\n        background: @toolbar-focus-bg;\n    }\n\n    &.has-menu {\n        &:after {\n            .icon-OctoFont();\n            content: @icon-angle-down-arrow;\n            font-size: 16px;\n            vertical-align: middle;\n            margin-left: 0;\n            margin-right: -3px;\n            position: relative;\n            top: -1px;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/core/mixins/mixins.css3.less",
    "content": "// Border radius\n//\n.border-radius(@radius) {\n  -webkit-border-radius: @radius;\n     -moz-border-radius: @radius;\n          border-radius: @radius;\n}\n\n// Single side border-radius\n.border-top-radius(@radius) {\n  border-top-right-radius: @radius;\n   border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n  border-bottom-right-radius: @radius;\n     border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n   border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n  border-bottom-left-radius: @radius;\n     border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n//   supported browsers that have box shadow capabilities now support the\n//   standard `box-shadow` property.\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n  -webkit-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n          transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9 only\n          transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n  -webkit-transform: scale(@ratio, @ratio-y);\n      -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n          transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9 only\n          transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n  -webkit-transform: skew(@x, @y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n          transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9 only\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9 only\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n      -ms-transform-origin: @origin; // IE9 only\n          transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n          animation: @animation;\n}\n.animation-name(@name) {\n  -webkit-animation-name: @name;\n          animation-name: @name;\n}\n.animation-duration(@duration) {\n  -webkit-animation-duration: @duration;\n          animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n  -webkit-animation-timing-function: @timing-function;\n          animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n  -webkit-animation-delay: @delay;\n          animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n  -webkit-animation-iteration-count: @iteration-count;\n          animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n  -webkit-animation-direction: @direction;\n          animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n          user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n  resize: @direction; // Options: horizontal, vertical, both\n  overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n          hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n  opacity: @opacity;\n}\n\n// Universal transform\n// --------------------------------------------------\n\n.transform(@transform) {\n  -webkit-transform: @transform;\n      -ms-transform: @transform; // IE9+\n          transform: @transform;\n}\n\n// Transformations\n//\n\n.scaleAxes(@x, @y) {\n  -webkit-transform: scale(@x, @y);\n          transform: scale(@x, @y);\n}\n"
  },
  {
    "path": "modules/backend/assets/less/core/mixins/mixins.gradient.less",
    "content": "// Gradients\n// --------------------------------------------------\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard\n    background-repeat: repeat-x;\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard\n    background-repeat: repeat-x;\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/core/mixins/mixins.less",
    "content": ".svg-fix-load() {\n    /* Fix for SVG icons not rendering on initial page load until repaint (hover, move, etc) */\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n}\n\n.backend-hide-text() {\n    font-size: 0;\n    color: transparent;\n}\n"
  },
  {
    "path": "modules/backend/assets/less/core/mixins/mixins.triangle.less",
    "content": "// Triangles\n// --------------------------------------------------\n\n.triangle-base() {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n}\n.triangle(@direction, @width, @height, @color) when (@direction = up) {\n    .triangle-base();\n    border-left: (@width/2) solid transparent;\n    border-right: (@width/2) solid transparent;\n    border-bottom: @height solid @color;\n}\n.triangle(@direction, @width, @height, @color) when (@direction = down) {\n    .triangle-base();\n    border-left: (@width/2) solid transparent;\n    border-right: (@width/2) solid transparent;\n    border-top: @height solid @color;\n    border-bottom-width: 0;\n}\n.triangle(@direction, @width, @height, @color) when (@direction = left) {\n    .triangle-base();\n    border-top: (@height/2) solid transparent;\n    border-bottom: (@height/2) solid transparent;\n    border-right: @width solid @color;\n}\n.triangle(@direction, @width, @height, @color) when (@direction = right) {\n    .triangle-base();\n    border-top: (@height/2) solid transparent;\n    border-bottom: (@height/2) solid transparent;\n    border-left: @width solid @color;\n}\n"
  },
  {
    "path": "modules/backend/assets/less/core/mixins/mixins.utility.less",
    "content": "// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n.clearfix() {\n    &:before,\n    &:after {\n        content: \" \"; // 1\n        display: table; // 2\n    }\n    &:after {\n        clear: both;\n    }\n}\n\n// WebKit-style focus\n.tab-focus() {\n    // Default\n    outline: thin dotted;\n    // WebKit\n    outline: 5px auto -webkit-focus-ring-color;\n    outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n    width: @width;\n    height: @height;\n}\n.square(@size) {\n    .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n    &::-moz-placeholder           { color: @color;   // Firefox\n                                                                    opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n    &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\n    &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n    font: ~\"0/0\" a;\n    color: transparent;\n    text-shadow: none;\n    background-color: transparent;\n    border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n    .hide-text();\n}\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n    background-image: url(\"@{file-1x}\");\n\n    @media\n    only screen and (-webkit-min-device-pixel-ratio: 2),\n    only screen and (   min--moz-device-pixel-ratio: 2),\n    only screen and (     -o-min-device-pixel-ratio: 2/1),\n    only screen and (        min-device-pixel-ratio: 2),\n    only screen and (                min-resolution: 192dpi),\n    only screen and (                min-resolution: 2dppx) {\n        background-image: url(\"@{file-2x}\");\n        background-size: @width-1x @height-1x;\n    }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n    display: block !important;\n    table&  { display: table; }\n    tr&     { display: table-row !important; }\n    th&,\n    td&     { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n    display: none !important;\n}\n"
  },
  {
    "path": "modules/backend/assets/less/core/utility.less",
    "content": "// Floats\n// -------------------------\n\n.clearfix {\n    .clearfix();\n}\n.center-block {\n    .center-block();\n}\n.pull-right {\n    float: right !important;\n}\n.pull-left {\n    float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n.oc-hide {\n    display: none !important;\n}\n\n.oc-show {\n    display: block !important;\n}\n\n.oc-invisible {\n    visibility: hidden;\n}\n\n.text-hide {\n    .text-hide();\n}\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n    display: none !important;\n    visibility: hidden !important;\n}\n\n//\n// Typography\n// --------------------------------------------------\n\n.t-ww { word-wrap: break-word; word-break: break-word; }\n.t-nw { white-space: nowrap; }\n\n//\n// Width\n// --------------------------------------------------\n\n.w-0    { width: 0 !important; }\n.w-60   { width: 60px !important; }\n.w-120  { width: 120px !important; }\n.w-130  { width: 130px !important; }\n.w-140  { width: 140px !important; }\n.w-150  { width: 150px !important; }\n.w-200  { width: 200px !important; }\n.w-300  { width: 300px !important; }\n.w-350  { width: 350px !important; }\n\n.mw-400 { max-width: 400px !important; }\n.mw-450 { max-width: 450px !important; }\n.mw-500 { max-width: 500px !important; }\n.mw-550 { max-width: 550px !important; }\n.mw-600 { max-width: 600px !important; }\n.mw-650 { max-width: 650px !important; }\n.mw-700 { max-width: 700px !important; }\n.mw-750 { max-width: 750px !important; }\n.mw-800 { max-width: 800px !important; }\n.mw-850 { max-width: 850px !important; }\n.mw-900 { max-width: 900px !important; }\n.mw-950 { max-width: 950px !important; }\n.mw-1000 { max-width: 1000px !important; }\n.mw-1050 { max-width: 1050px !important; }\n.mw-1100 { max-width: 1100px !important; }\n.mw-1150 { max-width: 1150px !important; }\n.mw-1200 { max-width: 1200px !important; }\n.mw-1250 { max-width: 1250px !important; }\n.mw-1400 { max-width: 1400px !important; }\n.mw-auto { max-width: auto !important; }\n"
  },
  {
    "path": "modules/backend/assets/less/core/variables/variables.form.less",
    "content": "\n//\n// Forms\n// --------------------------------------------------\n\n@input-border-radius:            4px;\n@input-border-fade:              darken(#cfd7e1, 10%);\n@input-box-shadow:               none;\n@input-focus-box-shadow:         0 0 0 0.25rem rgba(53, 66, 91, 0.1);\n\n@input-color-placeholder:        #cccccc;\n@input-color-disabled:           @color-grey-2;\n\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n@input-group-addon-bg:           @gray-lighter;\n@input-group-addon-border-color: @input-border;\n\n@label-font-size: 1rem;\n@input-font-size: 1rem;\n\n@input-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n\n@form-breakpoint-min: 770px;\n@form-breakpoint-max: (@form-breakpoint-min - 1);\n\n@color-form-required-asterisk:  @brand-danger;\n@color-form-field-bg:           #ffffff;\n@color-form-field-icon:         #bdbdbd;\n"
  },
  {
    "path": "modules/backend/assets/less/core/variables/variables.global.less",
    "content": "// Breakpoints\n// --------------------------------------------------\n\n// Extra small screen\n@screen-xs-min: 576px;\n\n// Small screen / tablet\n@screen-sm-min: 768px;\n\n// Medium screen / desktop\n@screen-md-min: 992px;\n\n// Large screen / wide desktop\n@screen-lg-min: 1200px;\n\n// Extra large screen\n@screen-xl-min: 1400px;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max: (@screen-sm-min - 1);\n@screen-sm-max: (@screen-md-min - 1);\n@screen-md-max: (@screen-lg-min - 1);\n@screen-lg-max: (@screen-xl-min - 1);\n\n//\n// Breakpoints (@deprecated)\n// --------------------------------------------------\n\n@screen-xs:                  @screen-xs-min;\n@screen-phone:               @screen-xs-min;\n@screen-sm:                  @screen-sm-min;\n@screen-tablet:              @screen-sm-min;\n@screen-md:                  @screen-md-min;\n@screen-desktop:             @screen-md-min;\n@screen-lg:                  @screen-lg-min;\n@screen-lg-desktop:          @screen-lg-min;\n\n//\n// Typography\n// --------------------------------------------------\n\n@font-family-sans-serif:  sans-serif;\n@font-family-serif:       serif;\n@font-family-monospace:   monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n@line-height-base:        1.428571429; // 20/14\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n@headings-font-family:    inherit;\n@headings-font-weight:    400;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n@component-offset-horizontal: 180px;\n@abbr-border-color:           @gray-light;\n@headings-small-color:        @gray-light;\n@blockquote-small-color:      @gray-light;\n@blockquote-font-size:        (@font-size-base * 1.25);\n@blockquote-border-color:     @gray-lighter;\n@page-header-border-color:    @gray-lighter;\n@dl-horizontal-offset:        @component-offset-horizontal;\n@hr-border:                   @gray-lighter;\n\n//\n// Sizes\n// --------------------------------------------------\n@size-tiny:  50px;\n@size-small: 100px;\n@size-large: 200px;\n@size-huge:  250px;\n@size-giant: 350px;\n\n//\n// Colors\n// --------------------------------------------------\n\n@color-focus:            @color-grey-2;\n\n@gray-darker:            lighten(#000, 13.5%); // #222\n@gray-dark:              lighten(#000, 20%);   // #333\n@gray:                   lighten(#000, 33.5%); // #555\n@gray-light:             #98A0A0;\n@gray-lighter:           lighten(#000, 93.5%); // #eee\n\n@state-success-text:     #3c763d;\n@state-success-bg:       #dff0d8;\n@state-success-border:   darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:        #31708f;\n@state-info-bg:          #d9edf7;\n@state-info-border:      darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:     #8a6d3b;\n@state-warning-bg:       #fcf8e3;\n@state-warning-border:   darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:      #a94442;\n@state-danger-bg:        #f2dede;\n@state-danger-border:    darken(spin(@state-danger-bg, -10), 5%);\n\n//\n// New October UI Kit colors\n//\n@color-grey-1: #35425b;\n@color-grey-2: #72809d;\n@color-grey-3: #d7e1eA;\n@color-grey-4: #f0f4f8;\n@color-grey-3-light: #e9edf3;\n\n@color-text-grey-1: #536061;\n@color-text-grey-4: #5E6D8C;\n\n@primary-darker: #5A5CEF;\n\n@color-grey-6: #95A5A6;\n@color-grey-6-darker: #899C9D;\n\n@color-grey-7: #2C3E4F;\n@color-alert: #FFD422;\n\n@background-color-focus: rgba(215,225,234,0.7);\n@background-color-focus-dark: rgba(215,225,234,0.2);\n@outline-focus-shadow: ~\"0 0 0px 2px rgba(0,0,0,0.15)\";\n\n@box-shadow-z1: ~\"-2px 2px 5px rgba(67, 86, 100, 0.12)\";\n@box-shadow-z2: ~\"0 0 32px rgba(67, 86, 100, 0.2)\";\n@box-shadow-symmetrical-z2: ~\"0 16px 32px rgba(67, 86, 100, 0.2)\";\n\n@mobile-dropdown-shadow: ~\"0 0 10px rgba(0, 0, 0, 0.1)\";\n\n//\n// General\n// --------------------------------------------------\n@padding-standard:          20px;\n\n@padding-base-vertical:     8px;\n@padding-base-horizontal:   13px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       3px;\n@padding-xs-horizontal:     7px;\n\n@line-height-large:         1.3333333; // extra decimals for Win 8.1 Chrome\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n@component-active-color:    #fff;\n@component-active-bg:       @brand-primary;\n\n@caret-width-base:          4px;\n@caret-width-large:         5px;\n\n@overlay-box-shadow: ~\"0 1px 6px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.24)\";\n@overlay-background: rgba(0, 0, 0, @backdrop-opacity);\n"
  },
  {
    "path": "modules/backend/assets/less/core/variables/variables.less",
    "content": "//\n// Paths\n// --------------------------------------------------\n\n@font-path: \"../font\";\n@image-path: \"../images\";\n@type-font-path: \"../font\";\n\n//\n// Override UI variables\n// --------------------------------------------------\n\n@font-family-base:       var(--bs-body-font-family);\n@body-bg:                var(--bs-body-bg);\n@text-color:             var(--bs-body-color);\n@text-muted:             var(--bs-secondary-color);\n@link-color:             var(--bs-link-color);\n@link-hover-color:       var(--bs-link-hover-color);\n@heading-color:          var(--bs-heading-color);\n@emphasis-color:         var(--bs-emphasis-color);\n@border-color:           var(--bs-border-color);\n@popup-bg:               var(--oc-popup-bg);\n@popup-border:           var(--oc-popup-border);\n@backdrop-opacity:       var(--bs-backdrop-opacity);\n\n//\n// Primary Colors\n// --------------------------------------------------\n\n@brand-primary:           var(--bs-primary);\n@brand-secondary:         var(--bs-secondary);\n@brand-success:           var(--bs-success);\n@brand-info:              var(--bs-info);\n@brand-warning:           var(--bs-warning);\n@brand-danger:            var(--bs-danger);\n@brand-light:             var(--bs-light);\n@brand-dark:              var(--bs-dark);\n\n@brand-accent:            var(--oc-accent);\n@brand-selection:         var(--oc-selection);\n@brand-selection-text:    var(--oc-selection-text);\n\n@primary-color:           var(--oc-primary-color);\n@primary-border:          var(--oc-primary-border);\n@primary-bg:              var(--oc-primary-bg);\n\n@secondary-color:         var(--bs-secondary-color);\n@secondary-bg:            var(--bs-secondary-bg);\n@secondary-bg-alt:        var(--oc-secondary-bg); // Used by secondary button\n\n@tertiary-color:          var(--bs-tertiary-color);\n@tertiary-bg:             var(--bs-tertiary-bg);\n\n//\n// Form Variables\n// --------------------------------------------------\n\n@input-bg:                 var(--oc-form-control-bg);\n@input-disabled-bg:        var(--oc-form-control-disabled-bg);\n@input-disabled-color:     var(--oc-form-control-disabled-color);\n@input-placeholder-color:  var(--bs-tertiary-color);\n@input-color:              var(--bs-body-color);\n@input-border:             var(--bs-border-color);\n@input-border-focus:       var(--oc-border-focus);\n@input-translatable-color: var(--oc-input-translatable-color);\n@input-translatable-bg:    var(--oc-input-translatable-bg);\n@input-selection-color:    var(--oc-input-selection-color);\n@input-selection-bg:       var(--oc-input-selection-bg);\n\n//\n// Component Variables\n// --------------------------------------------------\n\n@mainnav-color:           var(--oc-mainnav-color);\n@mainnav-bg:              var(--oc-mainnav-bg);\n@mainnav-icon-color:      var(--oc-mainnav-icon-color);\n\n@sidebar-color:           var(--oc-sidebar-color);\n@sidebar-bg:              var(--oc-sidebar-bg);\n@sidebar-active-color:    var(--oc-sidebar-active-color);\n@sidebar-active-bg:       var(--oc-sidebar-active-bg);\n@sidebar-active-border:   var(--oc-sidebar-active-border);\n@sidebar-hover-bg:        var(--oc-sidebar-hover-bg);\n\n@editor-bg:               var(--oc-editor-bg);\n@editor-section-color:    var(--oc-editor-section-color);\n@editor-section-bg:       var(--oc-editor-section-bg);\n@editor-tab-color:        var(--oc-editor-tab-color);\n@editor-tab-bg:           var(--oc-editor-tab-bg);\n@editor-tab-active-color: var(--oc-editor-tab-active-color);\n@editor-tab-active-bg:    var(--oc-editor-tab-active-bg);\n\n@document-toolbar-bg:     var(--oc-document-toolbar-bg);\n@document-tabs-bg:        var(--oc-document-tabs-bg);\n@document-content-bg:     var(--oc-document-content-bg);\n@document-ruler-color:    var(--oc-document-ruler-color);\n@document-ruler-bg:       var(--oc-document-ruler-bg);\n@document-ruler-tick:     var(--oc-document-ruler-tick);\n\n@toolbar-color:           var(--oc-toolbar-color);\n@toolbar-bg:              var(--oc-toolbar-bg);\n@toolbar-border:          var(--oc-toolbar-border);\n@toolbar-hover-color:     var(--oc-toolbar-hover-color);\n@toolbar-hover-bg:        var(--oc-toolbar-hover-bg);\n@toolbar-focus-bg:        var(--oc-toolbar-hover-bg);\n\n@tab-color:               var(--oc-tab-color);\n@tab-bg:                  var(--oc-tab-bg);\n@tab-active-color:        var(--oc-tab-active-color);\n@tab-border:              var(--oc-tab-border);\n@tab-hover-bg:            var(--oc-tab-hover-bg);\n\n@dropdown-bg:             var(--bs-modal-bg);\n@dropdown-hover-color:    var(--oc-dropdown-hover-color);\n@dropdown-hover-bg:       var(--oc-dropdown-hover-bg);\n@dropdown-active-bg:      var(--oc-dropdown-active-bg);\n@dropdown-trigger-bg:     var(--oc-dropdown-trigger-bg);\n@dropdown-trigger-color:  var(--oc-dropdown-trigger-color);\n@dropdown-trigger-border: var(--oc-dropdown-trigger-border);\n\n//\n// Colors\n// --------------------------------------------------\n\n@color-footer:                               rgba(255,255,255,.8);\n@color-footer-border:                        #dfdfdf;\n@color-footer-text:                          #666666;\n\n@color-scrollbar-track:                      transparent;\n@color-scrollbar-thumb:                      rgba(0,0,0,.35);\n@color-scrollpanel-border:                   #efefef;\n@color-scroll-indicator:                     #bbbbbb;\n\n@color-outer-muted-text:                     rgba(255,255,255,.44);\n\n@color-breadcrumb-text-active:               #9da3a7;\n@color-breadcrumb-text:                      #9B9B9B;\n@color-breadcrumb-background:                #2b343d;\n\n@color-sortable-caret:                       #999999;\n@color-sortable-active:                      @brand-secondary;\n\n@color-report-widget-title:                  #7e8c8d;\n@color-report-widget-control-inactive:       #b6b6b6;\n@color-report-widget-description:            @color-report-widget-title;\n@color-report-widget-link:                   @color-report-widget-title;\n\n@color-snackbar:                             #323232;\n\n//\n// Sizes\n// --------------------------------------------------\n\n@size-tiny:  50px;\n@size-small: 100px;\n@size-large: 200px;\n@size-huge:  250px;\n@size-giant: 350px;\n\n//\n// Media breakpoints\n// --------------------------------------------------\n\n@menu-breakpoint-min:           769px;\n@menu-breakpoint-max:           (@menu-breakpoint-min - 1);\n@mobile-breakpoint-max:         414px;\n\n//\n// Document UI\n// --------------------------------------------------\n\n@document-ui-base-padding: 20px;\n\n//\n// Close icons\n// --------------------------------------------------\n\n@close-font-weight:           bold;\n@close-color:                 var(--bs-emphasis-color);\n@close-text-shadow:           0 1px 0 var(--bs-body-bg);\n"
  },
  {
    "path": "modules/backend/assets/less/core/variables/variables.list.less",
    "content": "//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n@table-cell-padding:            8px;\n@table-condensed-cell-padding:  5px;\n\n@table-bg:                      transparent;\n@table-bg-accent:               #f9f9f9;\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               #FFF5CB;\n\n@table-border-color:            #ddd;\n\n@color-list-active:             #dddddd;\n@color-list-hover:              #dddddd;\n@color-list-active-border:      @brand-primary;\n@color-list-arrow:              #cfcfcf;\n@color-list-icon:               #a1aab1;\n@color-list-parent-bg:          #ffffff;\n@color-list-nav-arrow:          #34495e;\n@color-list-head-bg:            @color-grey-4;\n@color-list-progress-bg:        #0181b9;\n@color-list-border:             #D4D8DA;\n@color-list-row-border:         #ECF0F1;\n@color-list-head-border:        @primary-border;\n@color-list-border-light:       @color-grey-3;\n@color-list-text-head:          @color-grey-1;\n@color-list-text:               var(--bs-table-color);\n@color-list-text-active:        #000000;\n@color-list-text-tree:          var(--bs-table-color);\n@color-list-stripe-active:      @brand-primary;\n@color-list-accent:             #F7F9FB;\n@color-list-norecords-text:     @secondary-color;\n@color-list-hover-bg:           @background-color-focus;\n@color-list-hover-bg-active:    darken(@table-bg-active, 5%);\n@color-list-hover-text:         @color-list-text-active;\n@color-list-active-bg:          @color-grey-3;\n@color-list-active-text:        @color-list-text-active;\n@color-list-active-sort:        #c63e26;\n@color-list-grid:               #E4E7E8;\n@color-list-container-bg:       #ffffff;\n\n@color-status-list-text:        #7e8c8d;\n"
  },
  {
    "path": "modules/backend/assets/less/core/variables/variables.zindex.less",
    "content": "//\n// \"Windex\" Z-Index Window Manager\n// --------------------------------------------------\n\n//\n// Z-Index frequencies:\n//\n// 0-100      - Primary layer (body / content)\n// 100-200    - Primary menus / dropdowns\n//\n// 300-400    - Secondary layer (full screen)\n// 400-500    - Secondary menus / dropdowns\n//\n// 500-600    - Tertiary layer (popups)\n// 600-700    - Tertiary menus / dropdowns\n//\n// 1000-10000 - Reserved for frequency manager\n//\n// 10000+     - Always on top\n//\n\n//\n// Z-Indexes\n// --------------------------------------------------\n\n// Primary\n@zindex-filter:            10;\n@zindex-button:            10;\n@zindex-form:              10;\n@zindex-checkbox:          10;\n@zindex-breadcrumb:        10;\n@zindex-chart:             10;\n@zindex-tab:               10;\n@zindex-loader:            10;\n@zindex-navbar:            100;\n@zindex-navbar-fixed:      110;\n\n// Secondary\n@zindex-fullscreen:        300;\n\n// Tertiary\n@zindex-modal-background:  500;\n@zindex-modal:             600;\n@zindex-popover:           600;\n@zindex-dropdown:          600;\n\n// Always on top\n@zindex-inspector:         10000;\n@zindex-datepicker:        10100;\n@zindex-flashmessage:      10300;\n@zindex-select:            10400;\n@zindex-alert:             10500;\n@zindex-snackbar:          10600;\n@zindex-tooltip:           10700;\n"
  },
  {
    "path": "modules/backend/assets/less/layout/fancylayout.less",
    "content": "@color-fancy-master-tabs-bg:                 var(--oc-fancy-tabs-bg);\n@color-fancy-master-tabs-active-text:        @text-color;\n@color-fancy-master-tabs-inactive-text:      rgba(255, 255, 255, .5);\n@color-fancy-master-panel-bg:                @brand-secondary;\n\n@color-fancy-secondary-tabs-bg:              @body-bg;\n@color-fancy-secondary-tabs-active-text:     @text-color;\n@color-fancy-secondary-tabs-inactive-text:   @color-text-grey-1;\n\n@color-fancy-primary-tabs-bg:                #7F8C8D;\n@color-fancy-primary-tabs-inactive-text:     @color-text-grey-1;\n@color-fancy-primary-tabs-active-text:       @text-color;\n@color-fancy-primary-tabs-active-bg:         @body-bg;\n@color-fancy-primary-tabs-inactive-bg:       #d5d9d8;\n\n@color-fancy-form-tabless-fields-bg:         @body-bg;\n@color-fancy-form-label:                     @primary-color;\n@color-fancy-form-text:                      @text-color;\n@color-fancy-form-text-selection:            @brand-secondary;\n@color-fancy-form-placeholder:               rgba(0, 0, 0, .5);\n@color-fancy-form-inactive-tab:              transparent;\n\n:root, [data-bs-theme=\"light\"] {\n    --oc-fancy-tabs-bg: @brand-secondary;\n}\n\n[data-bs-theme=\"dark\"] {\n    --oc-fancy-tabs-bg: var(--oc-editor-tab-bg);\n}\n\nbody.breadcrumb-fancy .control-breadcrumb,\n.control-breadcrumb.breadcrumb-fancy {\n    margin-bottom: 0;\n    margin-left: 15px;\n    margin-top: 10px;\n    margin-bottom: 10px;\n}\n\n.fancy-layout {\n    //\n    // Fancy form tabs\n    //\n\n    .tab-collapse-icon {\n        position: absolute;\n        display: block;\n        text-decoration: none;\n        outline: none;\n        opacity: .6;\n        transition: all 0.3s;\n        font-size: 12px;\n        color: @color-fancy-master-tabs-active-text;\n        right: 11px;\n\n        &:hover {\n            text-decoration: none;\n            opacity: 1;\n        }\n\n        &.primary {\n            color: @color-fancy-secondary-tabs-bg;\n            bottom: -25px;\n            z-index: 100;\n            .scaleAxes(1, -1);\n\n            i {\n                position: relative;\n                display: block;\n            }\n        }\n\n        // Disable for v2\n        &.tabless {\n            display: none;\n        }\n    }\n\n    .control-tabs, &.control-tabs {\n        &.master-tabs {\n            &:before, &:after {\n                top: 13px;\n                font-size: 14px;\n                color: @color-fancy-master-tabs-inactive-text;\n            }\n            &:before { left: 8px; }\n            &:after { right: 8px; }\n            &.scroll-before:before { color: @color-fancy-master-tabs-active-text; }\n            &.scroll-after:after { color: @color-fancy-master-tabs-active-text; }\n\n            > div > div.tabs-container {\n                background: @color-fancy-master-tabs-bg;\n                padding-left: 20px;\n                padding-right: 20px;\n\n                > ul.nav-tabs {\n                    margin-left: -8px;\n                    > li {\n                        margin-left: -5px;\n                        padding-top: 3px;\n\n                        span.tab-close {\n                            top: 14px;\n                            right: -5px;\n                            left: auto;\n                            z-index: 110;\n                            font-family: sans-serif;\n                            color: rgba(255, 255, 255, 0.3);\n\n                            i {\n                                top: 4px;\n                                right: 1px;\n                                font-style: normal;\n                                font-weight: bold;\n                                font-size: 16px;\n\n                            }\n\n                            &:hover {\n                                color: white !important;\n                            }\n                        }\n\n                        a {\n                            border-bottom: none;\n                            background: transparent;\n                            font-size: 14px;\n                            color: @color-fancy-master-tabs-inactive-text;\n                            padding: 6px 0 0 24px!important;\n                            overflow: visible;\n                            text-decoration: none;\n\n                            &:hover  {\n                                color: white;\n                            }\n\n                            > span.title {\n                                position: relative;\n                                display: inline-block;\n                                padding: 12px 5px 0 5px;\n                                height: 38px;\n                                font-size: 14px;\n                                z-index: 100;\n                                background-color: @color-fancy-form-inactive-tab;\n\n                                &:before, &:after {\n                                    content: ' ';\n                                    position: absolute;\n                                    width: 20px;\n                                    display: block;\n                                    height: 37px;\n                                    top: 0;\n                                    z-index: 100;\n                                    background-color: @color-fancy-form-inactive-tab;\n                                }\n\n                                &:before {\n                                    left: -14px;\n                                    border-radius: 8px 0 0 0;\n                                    transform: skewX(-10deg);\n\n                                }\n\n                                &:after {\n                                    right: -14px;\n                                    border-radius: 0 8px 0 0;\n                                    transform: skewX(10deg);\n                                }\n\n                                span {\n                                    border-top: none;\n                                    padding: 0;\n                                    margin-top: 0;\n                                    overflow: visible;\n                                }\n                            }\n\n                            &:before {\n                                z-index: 110;\n                                position: absolute;\n                                top: 18px;\n                                left: 22px;\n                            }\n\n                            &[class*=icon] > span.title {\n                                padding-left: 18px;\n                            }\n                        }\n\n                        &.active {\n                            top: 1px;\n\n                            a {\n                                z-index: 107;\n                                color: @color-fancy-master-tabs-active-text;\n                            }\n\n                            span.tab-close {\n                                color: rgba(var(--bs-body-color-rgb), 0.3);\n                                &:hover {\n                                    color: @color-fancy-master-tabs-active-text !important;\n                                }\n                            }\n\n                            a > span.title {\n                                background-color: @color-fancy-form-tabless-fields-bg;\n                                z-index: 105;\n                                &:before {\n                                    z-index: 107;\n                                    background-color: @color-fancy-form-tabless-fields-bg;\n                                }\n                                &:after {\n                                    background-color: @color-fancy-form-tabless-fields-bg;\n                                    z-index: 107;\n                                }\n                            }\n                        }\n\n                        &[data-modified] {\n                            span.tab-close i {\n                                top: 5px;\n                                .hide-text();\n                                color: inherit;\n\n                                &:before {\n                                    .icon(@icon-circle-full);\n                                    font-size: 9px;\n                                }\n                            }\n                        }\n\n                        &:first-child {\n                            margin-left: 0;\n                        }\n                    }\n                }\n            }\n\n            &[data-closable] {\n                > div > div.tabs-container {\n                    > ul.nav-tabs {\n                        > li {\n                            a > span.title {\n                                padding-right: 10px;\n                            }\n                        }\n                    }\n                }\n            }\n\n            &.has-tabs {\n                &:before, &:after {display: block;}\n            }\n        }\n\n        &.secondary-tabs {\n            // Target horizontal scroll indicators\n            &:before {\n                left: 5px;\n            }\n            &:after {\n                right: 5px;\n            }\n            > div > ul.nav-tabs {\n                position: relative;\n                border-top: 1px solid @primary-border;\n                background: @color-fancy-secondary-tabs-bg;\n                padding-top: 10px;\n\n                &:before {\n                    position: absolute;\n                    bottom: 0;\n                    height: 1px;\n                    width: 100%;\n                    z-index: @zindex-tab - 1;\n                    content: ' ';\n                    border-bottom: 2px solid @primary-border;\n                }\n\n                > li {\n                    border-right: none;\n                    padding-right: 0;\n                    margin-right: -10px;\n                    vertical-align: top;\n\n                    a {\n                        font-size: @font-size-base;\n                        font-weight: 600;\n                        padding-bottom: 3px;\n                        margin: 0;\n                        position: relative;\n                        top: -1px;\n                        z-index: @zindex-tab + 1;\n                        background: transparent;\n                        overflow: visible;\n                        border-bottom: 1px solid transparent;\n\n                        span {\n                            position: relative;\n                            display: inline-block;\n                            padding: 4px 25px 0px;\n                            .box-sizing(border-box);\n\n                            &:before, &:after {\n                                content: '';\n                                display: none;\n                                border-top: 2px solid @primary-border;\n                                position: absolute;\n                                background: transparent;\n                                top: 0;\n                                z-index: -1;\n                                width: 20px;\n                                bottom: -2px;\n                                transform-origin: bottom;\n                            }\n\n                            &:before {\n                                left: 0;\n                                border-left: 2px solid @primary-border;\n                                .border-radius(8px 0 0 0);\n                                .transform( ~'skewX(-10deg)');\n                            }\n\n                            &:after {\n                                right: 0;\n                                border-right: 2px solid @primary-border;\n                                .border-radius(0 8px 0 0);\n                                .transform( ~'skewX(10deg)');\n                            }\n\n                            span {\n                                border-top: 2px solid transparent;\n                                margin-top: -4px;\n                                padding-left: 0;\n                                padding-right: 0;\n                                padding-top: 7px;\n                            }\n                        }\n                    }\n\n                    &:hover {\n                        a {\n                            color: @color-fancy-secondary-tabs-active-text;\n                        }\n                    }\n\n                    &:first-child {\n                        // Will cause issues when first child is hidden\n                        padding-left: 10px;\n                    }\n\n                    &:last-child {\n                        margin-right: 0;\n                    }\n\n                    &.active {\n                        a {\n                            z-index: @zindex-tab + 3;\n                            top: 0;\n\n                            > span.title {\n                                // z-index: @zindex-tab + 2;\n                                border-top-color: @primary-border;\n\n                                &:before, &:after {\n                                    display: block;\n                                    border-color: @primary-border;\n                                }\n\n                                span {\n                                    border-top-color: @primary-border;\n                                }\n                            }\n\n                            &:before {\n                                position: absolute;\n                                bottom: -1px;\n                                height: 2.2px;\n                                right: 2px;\n                                left: 2px;\n                                content: ' ';\n                                background-color: @color-fancy-secondary-tabs-bg;\n                            }\n                        }\n\n                        &.tab-content-bg {\n                            a  {\n                                span.title {\n                                    &:before, &:after {\n                                        background-color: @body-bg;\n                                    }\n\n                                    span {\n                                        background-color: @body-bg;\n                                        margin-left: -6px;\n                                        padding-left: 6px;\n                                        margin-right: -6px;\n                                        padding-right: 6px;\n                                        margin-bottom: -6px;\n                                        padding-bottom: 6px;\n                                    }\n                                }\n\n                                &:before {\n                                    background-color: @body-bg;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n\n            .tab-collapse-icon {\n                .tab-collapse-icon();\n\n                &.primary {\n                    color: @color-fancy-master-tabs-active-text;\n                    top: 15px;\n                    right: 11px;\n                    bottom: auto;\n                }\n            }\n\n            &.primary-collapsed {\n                .tab-collapse-icon.primary {\n                    .scaleAxes(1, 1);\n                }\n            }\n        }\n\n        &.primary-tabs {\n            border-top: 1px solid @primary-border;\n\n            &.master-area {\n                > div > ul.nav-tabs {\n                    .transition(background-color 0.5s);\n                    background: @body-bg;\n                }\n            }\n\n            > div > ul.nav-tabs {\n                background: @color-fancy-primary-tabs-bg;\n                margin-left: 0 !important;\n                margin-right: 0 !important;\n\n                &:before {\n                    border-bottom-width: 1px;\n                }\n\n                > li {\n                    background: transparent;\n                    border: none;\n                    margin-right: -8px;\n\n                    &:first-child {\n                        margin-left: -15px;\n                    }\n\n                    a {\n                        background: transparent;\n                        border: none;\n                        padding: 3px 10px 3px;\n                        font-size: 14px;\n                        font-weight: 400;\n                        color: @color-fancy-primary-tabs-inactive-text;\n                        top: 2px;\n\n                        span.title {\n                            border-bottom: 2px solid transparent;\n                            border-top: none;\n                            padding: 0 7px 6px;\n\n                            &:before, &:after {\n                                display: none !important;\n                            }\n\n                            span {\n                                border-width: 0;\n                                vertical-align: top;\n                            }\n                        }\n\n                        &:before {\n                            top: 2px;\n                            bottom: -6px;\n                        }\n                    }\n\n                    &.active {\n                        a {\n                            color: @color-fancy-primary-tabs-active-text;\n                            font-weight: 600;\n                            &:before {\n                                display: none;\n                            }\n\n                            span.title {\n                                border-bottom-color: @brand-primary;\n                            }\n                        }\n                    }\n                }\n            }\n\n            > .tab-content > .tab-pane {\n                padding: @padding-standard @padding-standard 0 @padding-standard;\n\n                &.pane-compact {\n                    padding: 0;\n                }\n            }\n\n            &.collapsed {\n                display: none;\n            }\n        }\n\n        &.has-tabs {\n            > div.tab-content {\n                background: @body-bg;\n            }\n        }\n\n        > div.tab-content {\n            > div.tab-pane {\n                padding: 0;\n\n                &.padded-pane {\n                    padding: @padding-standard @padding-standard 0 @padding-standard;\n                }\n            }\n        }\n    }\n\n    //\n    // Forms and buttons\n    //\n\n    .form-tabless-fields:not(.not-fancy) {\n        .clearfix();\n        position: relative;\n        background: @color-fancy-form-tabless-fields-bg;\n        padding: 10px 15px 0 15px;\n\n        label {\n            text-transform: uppercase;\n            font-size: 12px;\n            color: @color-fancy-form-label;\n            margin-bottom: 0;\n        }\n\n        input[type=text] {\n            background: transparent;\n            border: none;\n            color: @color-fancy-form-text;\n            font-size: 24px;\n            font-weight: 400;\n            height: auto;\n            padding: 0;\n            box-shadow: none;\n            border: 1px solid transparent;\n\n            &:focus, &:hover {\n                border: 1px solid @primary-border;\n            }\n        }\n\n        .form-group {\n            padding-bottom: 0;\n\n            &.is-required {\n                > label:after {\n                    display: none;\n                }\n            }\n\n            .form-translatable {\n                position: absolute;\n                margin: 0;\n                right: 3px;\n                top: 28px;\n            }\n        }\n\n        .tab-collapse-icon {\n            .tab-collapse-icon();\n            &.tabless {\n                top: 14px;\n            }\n        }\n\n        &.collapsed {\n            padding: 5px 23px 0 10px;\n\n            .tab-collapse-icon {\n                &.tabless {\n                    .scaleAxes(1, -1);\n                }\n            }\n\n            .form-group:not(.collapse-visible) {\n                display: none;\n            }\n\n            .form-buttons {\n                margin-left: 10px;\n                padding-bottom: 0;\n            }\n        }\n\n        .loading-indicator-container {\n            .loading-indicator {\n                background-color: @color-fancy-form-tabless-fields-bg;\n                color: @color-fancy-form-label;\n                > span, > div {\n                    margin-left: 15px;\n                }\n            }\n        }\n    }\n\n    .form-buttons {\n        margin-top: 10px;\n        padding-top: 5px;\n        padding-bottom: 3px;\n        margin-left: -15px;\n        margin-right: -15px;\n        padding-left: 10px;\n        padding-right: 10px;\n        border-top: 1px solid @primary-border;\n\n        &.loading-indicator-container.in-progress {\n            overflow: hidden;\n        }\n\n        .btn {\n            padding: 6px;\n            margin-right: 8px;\n            background: transparent;\n            color: @toolbar-color;\n            font-size: @font-size-base;\n            font-weight: normal;\n            box-shadow: none;\n\n            &:before {\n                margin-right: 2px;\n            }\n\n            &:hover {\n                background: @toolbar-focus-bg;\n            }\n\n            &:last-child {\n                margin-right: 0;\n            }\n\n            &[class^=\"oc-icon-\"],\n            &[class*=\" oc-icon-\"] {\n                &:before {\n                    opacity: 1;\n                }\n            }\n        }\n    }\n\n    form.oc-data-changed {\n        .btn.save {\n            opacity: 1;\n        }\n    }\n\n    //\n    // Code editor\n    //\n\n    .field-codeeditor {\n        border: none !important;\n        .border-radius(0);\n\n        .editor-code {\n            .border-radius(0);\n        }\n    }\n\n    //\n    // Markdown Editor (Legacy)\n    //\n    .field-markdowneditor {\n        border: none !important;\n    }\n\n    //\n    // Rich editor\n    //\n\n    .field-richeditor {\n        border: none;\n\n        &, .fr-toolbar, .fr-wrapper {\n            .border-radius(0);\n            .border-top-radius(0);\n        }\n    }\n\n    .secondary-content-tabs .field-richeditor {\n        .fr-toolbar {\n            background: @body-bg;\n        }\n    }\n}\n\nbody.side-panel-not-fixed {\n    .fancy-layout {\n        .field-richeditor {\n            border-left: none;\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "modules/backend/assets/less/layout/flexlayout.less",
    "content": ".flex-layout-column {\n    display: flex;\n    flex-direction: column;\n\n    &.absolute {\n        position: absolute !important;\n    }\n\n    &.fill-container {\n        position: absolute;\n        left: 0;\n        top: 0;\n        width: 100%;\n        height: 100%;\n    }\n}\n\n.flex-layout-row {\n    display: flex;\n    flex-direction: row;\n}\n\n.flex-layout-column, .flex-layout-row {\n    &.justify-center {\n        justify-content: center;\n    }\n    &.align-center {\n        align-items: center;\n        align-content: center;\n    }\n\n    &.full-height {\n        min-height: 100%;\n        // height: 100%;\n    }\n\n    &.full-width {\n        width: 100%;\n    }\n\n    &.full-height-strict {\n        height: 100%;\n    }\n}\n\n.flex-layout-item {\n    margin: 0;\n    &.fix { flex: 0 0 auto; }\n    &.stretch { flex: 1 1 auto; }\n    &.stretch-constrain { flex: 1; }\n    &.center { align-self: center; }\n\n    &.relative { position: relative; }\n\n    &.layout-container { max-width: none; }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/flyout.less",
    "content": ".flyout-container {\n    > .flyout-content {\n        overflow: hidden;\n        width: 0;\n        left: 0!important;\n        transition: width 0.1s;\n    }\n}\n\n.flyout-overlay {\n    width: 100%;\n    height: 100%;\n    top: 0;\n    z-index: 5000;\n    position: absolute;\n    background-color: rgba(0,0,0,0);\n    transition: background-color 0.3s;\n}\n\n.flyout-toggle {\n    position: absolute;\n    top: 20px;\n    left: 0;\n    width: 23px;\n    height: 25px;\n    background: @color-grey-1;\n    cursor: pointer;\n    .border-right-radius(4px);\n    color: #bdc3c7;\n    font-size: 10px;\n\n    i {\n        margin: 7px 0 0 6px;\n        display: inline-block;\n    }\n\n    &:hover i {\n        color: #ffffff;\n    }\n}\n\nbody.flyout-visible {\n    overflow: hidden;\n\n    .flyout-overlay {\n        background-color: rgba(0,0,0,0.3);\n    }\n}\n\n// Proxy container\n#layout-sidenav-responsive.has-toggle {\n    position: relative;\n\n    ul.nav {\n        padding-left: 35px;\n    }\n    .flyout-toggle {\n        top: 18px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/footer.less",
    "content": "@footer-zindex: 100;\n@footer-height: 60;\n\n#layout-footer {\n    width: 100%;\n    z-index: @footer-zindex;\n    height: @footer-height + 0px;\n    position: fixed;\n    bottom: 0;\n    color: @color-footer-text;\n    background-color: @color-footer;\n    border-top: 1px solid @color-footer-border;\n\n    .brand, .tagline {\n        margin: 10px;\n        height: (@footer-height - 20) + 0px;\n        line-height: (@footer-height - 20) + 0px;\n    }\n\n    .brand {\n        float: left;\n        font-size: 16px;\n        .logo { margin: 0 10px; }\n        .name { }\n    }\n\n    .tagline {\n        float: right;\n        p { color: lighten(@color-footer-text, 20%); }\n    }\n}\n\n"
  },
  {
    "path": "modules/backend/assets/less/layout/form-with-sidebar.less",
    "content": ".form-with-sidebar {\n    .form-with-sidebar-canvas {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n\n    > .form-sidebar {\n        width: 300px;\n        background: var(--bs-tertiary-bg);\n        border-left: 1px solid @primary-border;\n    }\n\n    &.sidebar-width-350 > .form-sidebar { width: 350px; }\n    &.sidebar-width-400 > .form-sidebar { width: 400px; }\n    &.sidebar-width-450 > .form-sidebar { width: 450px; }\n    &.sidebar-width-500 > .form-sidebar { width: 500px; }\n    &.sidebar-width-550 > .form-sidebar { width: 550px; }\n    &.sidebar-width-600 > .form-sidebar { width: 600px; }\n    &.sidebar-width-650 > .form-sidebar { width: 650px; }\n    &.sidebar-width-700 > .form-sidebar { width: 700px; }\n    &.sidebar-width-750 > .form-sidebar { width: 750px; }\n}\n\n@media (max-width: @screen-md) {\n    .form-with-sidebar {\n        flex-direction: column-reverse;\n\n        .form-with-sidebar-canvas {\n            position: relative;\n        }\n\n        > .form-contents {\n            height: auto;\n\n            .control-breadcrumb {\n                display: none;\n            }\n        }\n\n        > .form-sidebar {\n            width: 100% !important;\n            height: auto;\n            border-left: none;\n            border-bottom: 1px solid @primary-border;\n\n            .control-scrollbar {\n                overflow: visible;\n                height: auto;\n\n                .scrollbar-scrollbar {\n                    display: none !important;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/formdocumentlayout.less",
    "content": ".form-document-layout {\n    .control-tabs.primary-tabs:not(.is-nested) {\n        > div > ul.nav-tabs {\n            padding: 13px 0;\n            background: @document-tabs-bg;\n            border-bottom: 1px solid @primary-border;\n\n            &:before {\n                display: none;\n            }\n\n            > li {\n                border-right: 1px solid @primary-border;\n                border-bottom: none;\n                margin: 0!important;\n                padding: 0;\n\n                &:first-child {\n                    margin-left: -12px!important;\n                }\n\n                &:last-child {\n                    border-right: none;\n                }\n\n                a {\n                    padding: 2px 12px 0;\n                    height: 24px;\n                    border: none;\n                    top: 0;\n\n                    &:before {\n                        display: none;\n                    }\n\n                    > span.title {\n                        padding: 0;\n                        margin: 0;\n\n                        &:before, &:after {\n                            display: none;\n                        }\n\n                        > span {\n                            &:before, &:after {\n                                display: none;\n                            }\n\n                            margin: 0;\n                            padding: 0;\n                            border-top: none;\n                            color: inherit;\n                            background-color: transparent;\n                        }\n                    }\n                }\n\n                &.active a {\n                    color: @brand-primary;\n                }\n            }\n        }\n\n        // Do not display primary tabs if there is just one tab\n        &[data-single-tab] {\n            > div > ul.nav-tabs {\n                display: none!important;\n            }\n        }\n    }\n\n    .document-header .form-tabless-fields {\n        .form-group.primary-title-field {\n            .form-label, .form-translatable {\n                display: none;\n            }\n\n            .form-control {\n                display: block;\n                font-size: 24px;\n                width: 100%;\n                border: 1px solid @body-bg;\n                outline: none;\n                background: transparent;\n                color: @input-color;\n                padding: 1px;\n\n                &:not([disabled]):hover,\n                &:not([disabled]):focus {\n                    border: 1px solid @input-border;\n                    box-shadow: none;\n                }\n            }\n            span.form-control {\n                opacity: .5;\n            }\n        }\n    }\n\n    div.primary-tabs-container > div > .layout-row {\n        display: table-cell;\n\n        .tab-pane.is-adaptive {\n            padding-top: 0;\n        }\n    }\n\n    .component-backend-document .document-progress-indicator {\n        z-index: 1;\n    }\n\n    .form-group.span-adaptive {\n        margin-left: -@padding-standard;\n        margin-right: -@padding-standard;\n\n        > .form-label, > .form-translatable {\n            display: none;\n        }\n    }\n\n    .record-management-controls {\n        padding-left: 20px;\n        padding-bottom: 20px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/layout.less",
    "content": ":root, [data-bs-theme=\"light\"] {\n    --oc-page-size-outer-bg: var(--bs-tertiary-bg);\n    --oc-page-size-inner-bg: var(--bs-body-bg);\n    --oc-page-size-border: var(--bs-border-color);\n}\n\n[data-bs-theme=\"dark\"] {\n    --oc-page-size-outer-bg: var(--bs-tertiary-bg);\n    --oc-page-size-inner-bg: var(--bs-body-bg);\n    --oc-page-size-border: var(--bs-border-color);\n}\n\n//\n// Common layout elements\n// --------------------------------------------------\n\n@media (pointer: fine) {\n    body.drag * {\n        cursor: grab !important;\n    }\n}\n\n// Used by sortable plugin\nbody.dragging, body.dragging * {\n    cursor: move !important;\n}\n\nbody.loading, body.loading * {\n    cursor: wait !important;\n}\n\nbody.no-select {\n    user-select: none;\n    cursor: default !important;\n}\n\n//\n// Layout canvas\n//\n\nhtml,\nbody {\n    height: 100%;\n    font-size: 14px;\n    line-height: 1.42857143;\n    /* The html and body elements cannot have any padding or margin. */\n}\n\nbody {\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\nbody.has-page-size {\n    background: var(--oc-page-size-outer-bg);\n    #layout-body {\n        background: var(--oc-page-size-inner-bg);\n    }\n    &.has-sidenav-tree {\n        #layout-body {\n            border-right: 1px solid var(--oc-page-size-border);\n        }\n    }\n}\n\n#layout-canvas {\n    min-height: 100%;\n    height: 100%;\n}\n\n#layout-body {\n    // Stops content escaping the flex box\n    width: 0;\n}\n\n.layout-container, .padded-container {\n    padding: @padding-standard @padding-standard 0 @padding-standard;\n\n    // Container to sit flush to the element above\n    .container-flush {\n        padding-top: 0;\n    }\n\n    .padded-container-inset {\n        margin-left: -@padding-standard;\n        margin-right: -@padding-standard;\n    }\n}\n\n.whiteboard {\n    background: white;\n}\n\n[data-bs-theme=\"dark\"] .whiteboard {\n    background: #181a1e;\n}\n\n.layout-fill-container {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n//\n// Calculated fixed width\n//\n\n[data-calculate-width] {\n    > form, > div {\n        display: inline-block;\n    }\n}\n\n//\n// Layout styles\n//\n\nbody.compact-container {\n    .layout-container { padding: 0 !important; }\n}\n\nbody.slim-container {\n    .layout-container { padding-left: 0 !important; padding-right: 0 !important; }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/mainmenu.items.less",
    "content": "@color-sidebarnav-counter-bg:                #ff3e1d;\n@color-sidebarnav-counter-text:              #ffffff;\n\nul.mainmenu-items {\n    padding: 0;\n    margin: 0;\n    font-size: 0;\n    white-space: nowrap;\n    user-select: none;\n\n    > li.mainmenu-item {\n        display: block;\n    }\n}\n\n.mainmenu-item {\n    display: inline-block;\n    position: relative;\n    vertical-align: top;\n    user-select: none;\n\n    > a,\n    > .mainmenu-item-container {\n        // height: define in subclass;\n        // padding: define in subclass;\n\n        display: flex;\n        flex-direction: row;\n        align-items: baseline;\n        text-decoration: none!important;\n        outline: none;\n        color: @mainnav-color;\n\n        &:after {\n            opacity: .5;\n        }\n    }\n\n    .nav-label {\n        opacity: .5;\n        font-size: @font-size-base;\n        white-space: nowrap;\n        text-overflow: ellipsis;\n        flex: 1 1 auto;\n    }\n\n    .nav-icon {\n        opacity: .5;\n        position: absolute; // Don't let icon fonts height affect the layout\n        top: 0;\n\n        display: inline-block;\n        height: 100%;\n        color: @mainnav-icon-color;\n\n        // line-height: define in subclass;\n        // left: define in subclass;\n        // width: define in subclass;\n\n        .svg-icon {\n            // height: define in subclass;\n            // width: define in subclass;\n\n            .svg-fix-load();\n            position: relative;\n        }\n\n        i {\n            // line-height: define in subclass;\n            // font-size: define in subclass;\n\n            vertical-align: middle;\n            display: block;\n            height: 100%;\n\n            &:before {\n                position: relative;\n\n                // top: define in subclass;\n            }\n        }\n    }\n\n    span.counter {\n        flex: 0 0 auto;\n        position: relative;\n        top: 1px;\n        padding: 2px 2px;\n        background-color: @color-sidebarnav-counter-bg;\n        color: @color-sidebarnav-counter-text;\n        font-size: 14px;\n        line-height: 100%;\n        opacity: 1;\n        border-radius: 4px;\n        transform: scale(1);\n        transition: transform 0.3s;\n        margin-left: 6px;\n\n        &.empty {\n            transform: scale(0);\n            opacity: 0;\n            padding: 0;\n            margin-left: 0!important;\n        }\n    }\n\n\n    &.has-subitems {\n        > a:after,\n        > .mainmenu-item-container:after {\n            // .backend-icon-sprite-pseudo(define in subclass);\n            display: inline-block;\n        }\n\n        span.counter {\n            right: 17px\n        }\n    }\n\n\n    &.mainmenu-account {\n        .nav-icon {\n            opacity: 1;\n            width: 42px;\n        }\n    }\n\n    &.active, &.active-dropdown {\n        .nav-label, .nav-icon, > a:after {\n            opacity: 1;\n        }\n    }\n\n    &.has-solidicon .nav-icon {\n        opacity: 1;\n    }\n}\n\nbody:not(.drag) {\n    .mainmenu-item:hover {\n        .nav-label, .nav-icon, > a:after {\n            opacity: 1;\n        }\n    }\n\n    ul.mainmenu-items.hover-effects {\n        li > a {\n            &:hover {\n                background: @brand-primary;\n                color: white;\n            }\n        }\n    }\n}\n\n@media (pointer: coarse) {\n    .mainmenu-item {\n        .nav-label {\n            font-size: @font-size-base + 2;\n        }\n    }\n}"
  },
  {
    "path": "modules/backend/assets/less/layout/mainmenu.left.less",
    "content": "@mainmenu-mode-left-width: 63px;\n\n.left-side-menu-container {\n    display: none !important;\n    width: @mainmenu-mode-left-width;\n\n    .layout-mainmenu {\n        position: fixed;\n        height: 100%;\n        width: @mainmenu-mode-left-width;\n\n        .main-menu-container {\n            position: absolute;\n            width: 100%;\n            height: 100%;\n\n            .navbar {\n                position: absolute;\n                padding-right: 0;\n                width: 100%;\n                height: 100%;\n\n                flex-direction: column;\n\n                &.control-toolbar {\n                    padding-bottom: 0;\n\n                    [data-control=toolbar] {\n                        width: auto;\n                    }\n\n                    .toolbar-item {\n                        padding-right: 0;\n                        padding-bottom: 20px;\n\n                        &:last-child {\n                            padding-bottom: 0;\n                        }\n\n                        &:before {\n                            display: none;\n                        }\n\n                        &:after {\n                            content: '';\n                            position: absolute;\n                            bottom: -5px;\n                            left: 0;\n                            width: 100%;\n                            height: 9px;\n                            top: auto;\n                            display: block!important;\n                            background: transparent url(../../images/scrollable-panel-shadow.png) repeat-x left top;\n                            transition: opacity 0.1s;\n                            opacity: 0;\n                        }\n\n                        &.scroll-after:after {\n                            opacity: 1;\n                        }\n\n                        &.fix-width:after {\n                            display: none !important;\n                        }\n                    }\n\n                    [data-control=\"toolbar\"] {\n                        height: 100%;\n                    }\n                }\n\n                ul.mainmenu-items[data-main-menu] {\n                    margin-left: 10px;\n\n                    &.mainmenu-general {\n                        margin-left: 15px;\n                    }\n\n                    &.mainmenu-extras > li.mainmenu-item.mainmenu-preview {\n                        > a {\n                            padding-left: 0;\n\n                            &:after {\n                                top: 27px;\n                                right: 15px;\n                            }\n\n                            .nav-label {\n                                padding-left: 13px;\n                            }\n\n                            .nav-icon {\n                                left: 5px;\n                                position: static;\n                                width: 40px;\n\n                                i {\n                                    position: relative;\n                                    top: -15px;\n                                    width: 40px;\n                                }\n                            }\n\n                            .nav-icon .nav-colorpicker {\n                                top: 5px;\n                            }\n                        }\n                    }\n\n                    > li.mainmenu-item {\n                        display: block;\n                        margin-right: 0;\n                        margin-bottom: 15px;\n                        text-align: center;\n\n                        &.mainmenu-toggle {\n                            display: none;\n                        }\n\n                        &.mainmenu-account {\n                            .nav-label {\n                                position: relative;\n                                top: 5px;\n                                padding-left: 11px;\n                            }\n\n                            > a:after {\n                                top: 17px;\n                                right: 15px;\n                            }\n\n                            .nav-label, > a:after {\n                                display: none;\n                            }\n                        }\n\n                        .nav-icon i {\n                            display: inline-block;\n                        }\n\n                        .nav-label {\n                            padding-left: 10px;\n                            text-align: left;\n                            // visibility: hidden;\n                            display: none;\n                        }\n\n                        > a {\n                            padding-right: 15px;\n                            width: 100%;\n\n                            > span.counter {\n                                left: -20px;\n                            }\n\n                            &:after {\n                                top: 18.4px;\n                                // visibility: hidden;\n                                display: none;\n                            }\n                        }\n\n                        &.has-subitems > a:after {\n                            transform: rotate(-90deg);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    &.width-check {\n        .layout-mainmenu .main-menu-container .navbar.control-toolbar {\n            div[data-control=\"toolbar\"] {\n                width: auto !important;\n            }\n\n            ul.mainmenu-items[data-main-menu] > li.mainmenu-item {\n                .nav-label, > a:after {\n                    visibility: hidden;\n                    display: block;\n                }\n            }\n        }\n    }\n}\n\nbody.reveal-left-side-menu {\n    .left-side-menu-container {\n        .layout-mainmenu {\n            z-index: @zindex-popover - 1;\n            box-shadow: 10px 0 10px rgba(0,0,0,0.2);\n\n            .main-menu-container .navbar {\n                [data-control=\"toolbar\"] {\n                    width: 100%;\n                }\n\n                ul.mainmenu-items[data-main-menu] {\n                    > li.mainmenu-item {\n                        .nav-label {\n                            // visibility: visible;\n                            display: block;\n                        }\n\n                        a:after {\n                            // visibility: visible;\n                            display: block;\n                        }\n\n                        > a > span.counter {\n                            left: -10px;\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\nbody.left-menu-submenu-displayed {\n    overflow: hidden;\n\n    ul.mainmenu-items.mainmenu-submenu-dropdown {\n        box-shadow: 10px 0 15px rgba(0, 0, 0, 0.3);\n        border-bottom-left-radius: 0;\n        border-top-right-radius: 6px;\n        margin-top: 10px;\n\n        li {\n            &:last-child {\n                margin-bottom: 6px;\n            }\n\n            &:first-child {\n                margin-top: 6px;\n            }\n        }\n    }\n}\n\nbody.main-menu-left {\n    .left-side-menu-container {\n        display: block !important;\n    }\n}\n\ndiv.mainmenu-leftmenu-overlay {\n    &:extend(div.mainmenu-submenu-overlay);\n    z-index: @zindex-popover - 2!important;\n}"
  },
  {
    "path": "modules/backend/assets/less/layout/mainmenu.less",
    "content": "//\n// Top navigation bar\n// --------------------------------------------------\n\n@mainmenu-mode-tile-height: 78px;\n@mainmenu-mode-inline-height: 70px;\n\ndiv.mainmenu-account-avatar {\n    overflow: hidden;\n    border-radius: 9px;\n    border: 1px solid rgba(236, 240, 241, 0.1);\n    display: inline-block;\n    width: 42px;\n    height: 42px;\n    vertical-align: middle;\n\n    img {\n        width: 42px;\n        height: 42px;\n        display: block;\n    }\n}\n\n.mainmenu-account {\n    &.active-dropdown div.mainmenu-account-avatar {\n        box-shadow: 0 0 4px 0 @link-color;\n    }\n}\n\n.layout-mainmenu {\n    .control-toolbar .toolbar-item.toolbar-primary {\n        &:before { left: 0; }\n        &:after { right: 0; }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/mainmenu.logo.less",
    "content": ":root {\n    --oc-nav-logo-offset-top: -2px;\n    --oc-nav-logo-offset-start: 0;\n    --oc-nav-logo-opacity: .5;\n}\n\n.layout-mainmenu .navbar.has-logo {\n    .toolbar-logo {\n        position: relative;\n    }\n\n    ul.mainmenu-items[data-main-menu] {\n        margin-left: 10px;\n        li.is-dashboard {\n            display: none;\n        }\n    }\n\n    .toolbar-item.toolbar-primary {\n        &:before { left: -5px; }\n    }\n\n    &.navbar-mode-tile {\n        .mainmenu-logo {\n            padding-top: 20px;\n        }\n    }\n}\n\n.mainmenu-logo {\n    display: block;\n    padding-top: 15px;\n    padding-left: 20px;\n    padding-right: 10px;\n    .nav-logo {\n        height: 40px;\n        position: relative;\n        top: var(--oc-nav-logo-offset-top);\n        left: var(--oc-nav-logo-offset-start);\n        opacity: var(--oc-nav-logo-opacity);\n    }\n\n    &.active, &.active-dropdown, &:hover {\n        .nav-logo {\n            opacity: 1;\n        }\n    }\n}\n\n@media (max-width: @screen-sm) {\n    .mainmenu-logo {\n        display: none;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/mainmenu.responsive.less",
    "content": "#layout-mainmenu-responsive-container {\n    position: fixed;\n    top: 0;\n    right: 0;\n    width: 0;\n    max-width: 100%;\n    height: 100%;\n    z-index: @zindex-popover + 1;\n    overflow: hidden;\n    transition: width .25s ease-in-out;\n\n    nav.responsive-menu-pane {\n        z-index: @zindex-popover + 2;\n        background-color: @mainnav-bg;\n        transition: margin .25s ease-in-out;\n        position: absolute;\n        top: 0;\n        right: 0;\n        width: 100%;\n        height: 100%;\n        border-left: 1px solid rgba(255,255,255,0.1);\n        // margin-right: -100%;\n\n        display: flex;\n        flex-direction: column;\n\n        &.mainmenu-pane {\n            box-shadow: -10px 0 10px rgba(0,0,0,0.2);\n        }\n\n        .menu-header {\n            padding: 25px;\n            flex: 0 0 auto;\n\n            .mainmenu-item {\n                .mainmenu-item-container {\n                    padding-left: 50px;\n                    white-space: nowrap;\n\n                    .nav-icon {\n                        left: 0;\n                    }\n\n                    .company-name, .user-name {\n                        text-overflow: ellipsis;\n                        overflow: hidden;\n                    }\n\n                    .company-name {\n                        font-size: @font-size-base + 2;\n                    }\n\n                    .user-name {\n                        color: rgba(255,255,255,.7);\n                        cursor: pointer;\n\n                        &:hover {\n                            color: @mainnav-color;\n                        }\n                    }\n                }\n\n                > a {\n                    cursor: default;\n                    pointer-events: none;\n                    padding: 7px 10px 7px 43px;\n\n                    .nav-icon {\n                        line-height: 34px;\n                        left: 0;\n                        width: 30px;\n\n                        .svg-icon {\n                            height: 30px;\n                            width: 30px;\n                        }\n\n                        i {\n                            line-height: inherit;\n                            font-size: 30px;\n                        }\n                    }\n\n                    .counter {\n                        display: none;\n                    }\n\n                    .nav-label {\n                        display: block;\n                        overflow: hidden;\n                        width: 100%;\n                    }\n                }\n\n                &.has-subitems{\n                    .mainmenu-item-container:after {\n                        bottom: 4px;\n                        cursor: pointer;\n                    }\n                }\n            }\n\n            &.has-back-link {\n                .mainmenu-item {\n                    margin-left: 36px;\n                }\n\n                .go-back-link {\n                    display: block;\n                    width: 24px;\n                    height: 34px;\n                    position: absolute;\n                    left: 25px;\n                    top: 24px;\n                    z-index: @zindex-popover + 3;\n                    .hide-text();\n\n                    &:after {\n                        .backend-icon-sprite-pseudo(24px, 11px, 52px, 0);\n                        position: absolute;\n                        left: 0;\n                        top: 12px;\n                    }\n                }\n            }\n\n            .close-link {\n                display: none;\n                position: absolute;\n                width: 24px;\n                height: 24px;\n                left: 19px;\n                top: 33px;\n                .hide-text();\n                z-index: @zindex-popover + 3;\n\n                &:after {\n                    .backend-icon-sprite-pseudo(11px, 11px, 96px, 0);\n                    position: absolute;\n                    left: 6px;\n                    top: 7px;\n                }\n            }\n        }\n\n        .scrollable-panel-container {\n            flex: 1 1 auto;\n        }\n\n        .mainmenu-item {\n            &.has-subitems {\n                > a, > .mainmenu-item-container {\n                    padding-right: 30px;\n\n                    &:after {\n                        .backend-icon-sprite-pseudo(24px, 11px, 22px, 0);\n                        position: absolute;\n                        right: 0;\n                        // bottom: xxx;\n                    }\n                }\n            }\n        }\n\n        .mainmenu-items {\n            &.scrollable {\n                overflow: hidden;\n            }\n\n            > .mainmenu-item {\n                margin-bottom: 6px;\n\n                > a {\n                    padding: 7px 25px 7px 60px;\n                }\n\n                &.has-subitems > a {\n                    padding-right: 55px;\n\n                    &:after {\n                        right: 25px;\n                        top: 11px;\n                    }\n                }\n\n                .nav-label {\n                    display: block;\n                    overflow: hidden;\n                }\n\n                .nav-icon {\n                    left: 25px;\n                    width: 20px;\n                    line-height: 34px;\n\n                    .svg-icon {\n                        width: 24px;\n                    }\n\n                    i {\n                        font-size: 24px;\n                        line-height: inherit;\n                    }\n                }\n\n                .counter {\n                    top: 0;\n                }\n            }\n        }\n\n        &.submenu-pane {\n            z-index: @zindex-popover + 3;\n            margin-right: -100%;\n            box-shadow: none;\n\n            .menu-header {\n                &[data-submenu-index=account] {\n                    .go-back-link {\n                        top: 30px;\n                    }\n\n                    .mainmenu-item {\n                        height: 42px;\n                    }\n                }\n\n                .mainmenu-item {\n                    .mainmenu-item-container {\n                        .company-name {\n                            display: none;\n                        }\n\n                        .user-name {\n                            color: @mainnav-color;\n                            position: relative;\n                            top: 11px;\n                            cursor: default;\n                        }\n                    }\n                }\n            }\n\n            .mainmenu-item.section-user-title {\n                display: none;\n            }\n\n            .mainmenu-item {\n                &.divider {\n                    height: 1px;\n                    margin: 5px 0;\n                    background: rgba(255, 255, 255, 0.1);\n                }\n\n                &.section-title {\n                    color: white;\n                    padding: 7px 17px;\n                    white-space: nowrap;\n                    font-weight: 600;\n\n                    .nav-label {\n                        opacity: .5;\n                        margin-right: 0;\n                        display: block;\n                        overflow: hidden;\n                        max-width: 250px;\n                        vertical-align: middle;\n                    }\n                }\n            }\n        }\n    }\n}\n\nbody.responsive-submenu-displayed {\n    #layout-mainmenu-responsive-container .responsive-menu-pane {\n        &.mainmenu-pane {\n            margin-right: 100%;\n        }\n\n        &.submenu-pane {\n            margin-right: 0;\n        }\n    }\n}\n\nbody.responsive-menu-displayed {\n    overflow: hidden;\n\n    #layout-mainmenu-responsive-container {\n        width: 300px;\n        box-shadow: -10px 0 10px rgba(0,0,0,0.2);\n    }\n}\n\n@media (pointer: coarse) {\n    #layout-mainmenu-responsive-container {\n        nav.responsive-menu-pane {\n            .mainmenu-items {\n                > .mainmenu-item {\n                    margin-bottom: 12px;\n\n                    .nav-icon {\n                        line-height: 38px;\n                    }\n                }\n            }\n\n            &.mainmenu-pane .menu-header {\n                padding-left: 60px;\n\n                .close-link {\n                    display: block;\n                }\n            }\n        }\n    }\n}\n\n@media (max-width: @mobile-breakpoint-max) {\n    body.responsive-menu-displayed {\n        #layout-mainmenu-responsive-container {\n            width: @mobile-breakpoint-max;\n        }\n    }\n}"
  },
  {
    "path": "modules/backend/assets/less/layout/mainmenu.submenu.dropdown.less",
    "content": "ul.mainmenu-items.mainmenu-submenu-dropdown {\n    display: none;\n    position: absolute;\n    background: @mainnav-bg;\n    box-shadow: 0 10px 15px rgba(0, 0, 0, 0.3);\n    z-index: @zindex-popover+1;\n    border-bottom-left-radius: 6px;\n    border-bottom-right-radius: 6px;\n    user-select: none;\n    padding: 0;\n    margin: 0;\n\n    &.show {\n        display: block;\n    }\n\n    > li.mainmenu-item {\n        a {\n            padding: 7px 17px 7px 47px;\n        }\n\n        .nav-label, .nav-icon {\n            opacity: 1;\n        }\n\n        .nav-icon {\n            left: 17px;\n            width: 20px;\n            line-height: 34px;\n\n            .svg-icon {\n                width: 20px;\n            }\n\n            i {\n                font-size: 20px;\n                line-height: inherit;\n            }\n        }\n\n        span.counter {\n            font-size: 12px;\n            padding: 2px 3px;\n            margin: 2px 0 0 10px;\n        }\n\n        &:last-child {\n            margin-bottom: 6px;\n        }\n\n        &.divider {\n            height: 1px;\n            margin: 5px 0;\n            background: rgba(255, 255, 255, 0.1);\n        }\n\n        &.section-title {\n            color: white;\n            padding: 7px 17px;\n            white-space: nowrap;\n            font-weight: 600;\n\n            .nav-label {\n                margin-right: 0;\n                display: block;\n                overflow: hidden;\n                max-width: 250px;\n                vertical-align: middle;\n            }\n        }\n    }\n\n    // Selectable bullets\n    > li.mainmenu-item.has-bullet {\n        &.is-selected {\n            a:before {\n                content: \"\";\n                background-color: white;\n                border-radius: 10px;\n\n                position: absolute;\n                top: 50%;\n                left: 21px;\n                height: 8px;\n                width: 8px;\n                margin-top: -4px;\n            }\n        }\n    }\n\n    // Flags used in dropdowns\n    > li.mainmenu-item.has-flag {\n        .nav-label {\n            padding-right: 25px;\n        }\n\n        .nav-icon.nav-icon-flag {\n            top: 2px;\n            left: auto;\n            right: 17px;\n            i {\n                opacity: 1;\n                font-size: 14px;\n                display: inline-block;\n                height: 14px;\n                border-radius: 2px;\n                box-shadow: inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), 0.2);\n            }\n        }\n    }\n}\n\ndiv.mainmenu-submenu-overlay {\n    position: fixed;\n    z-index: @zindex-popover;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    display: none;\n    background: rgba(0,0,0,0.01);\n    opacity: 0.01;\n\n    &.show {\n        display: block;\n    }\n}\n\n@media (pointer: coarse) {\n    ul.mainmenu-items {\n        &.mainmenu-submenu-dropdown {\n            > li.mainmenu-item {\n                .nav-icon {\n                    line-height: 38px;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/mainmenu.top.less",
    "content": ".layout-mainmenu {\n    .navbar {\n        padding: 0 20px 0 0;\n        height: @mainmenu-mode-inline-height;\n        background-color: @mainnav-bg;\n\n        [data-control=\"toolbar\"] {\n            position: absolute;\n        }\n\n        ul.mainmenu-items[data-main-menu] {\n            margin-left: 20px;\n            margin-top: 7px;\n\n            > li.mainmenu-item {\n                display: inline-block;\n                margin-right: 15px;\n\n                &:last-child {\n                    margin-right: 0;\n                }\n\n                > a {\n                    height: 50px;\n                    padding: 15px 10px 0 38px;\n                }\n\n                &.has-subitems {\n                    .nav-label {\n                        padding-right: 17px;\n                    }\n\n                    > a:after {\n                        .icon-OctoFont();\n                        content: @icon-angle-down-arrow;\n                        position: absolute;\n                        right: 6px;\n                        top: 19.4px;\n                        font-size: 19.5px;\n                    }\n                }\n\n                .nav-label {\n                    font-size: @font-size-base + 2;\n                }\n\n                .nav-icon {\n                    line-height: 52px;\n                    left: 0;\n                    width: 30px;\n                    text-align: center;\n\n                    .svg-icon {\n                        height: 30px;\n                        width: 30px;\n                    }\n\n                    i {\n                        line-height: inherit;\n                        font-size: 30px;\n                    }\n                }\n\n                .nav-icon .nav-colorpicker {\n                    width: 0;\n                    height: 0;\n                    background-color: transparent;\n                    border-right-color: var(--background-color);\n                    border-bottom-color: var(--background-color);\n                    border-top-color: var(--foreground-color);\n                    border-left-color: var(--foreground-color);\n                    border-width: 10px;\n                    border-style: solid;\n                    border-radius: 20px;\n                    display: inline-block;\n                    position: relative;\n                    top: 10px;\n\n                    &:after {\n                        content: \"\";\n                        top: -10px;\n                        left: -10px;\n                        width: 20px;\n                        height: 20px;\n                        position: absolute;\n                        box-shadow: inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), 0.2);\n                        border-radius: 20px;\n                    }\n                }\n\n                &.mainmenu-preview > a {\n                    padding-left: 34px;\n                }\n\n                &.mainmenu-preview:not(.has-nolabel) > a {\n                    padding-right: 15px;\n                    &:after {\n                        right: 11px;\n                    }\n                }\n\n                &.mainmenu-taskbar > a {\n                    padding-right: 0;\n                }\n            }\n\n            &.mainmenu-extras {\n                margin-left: 10px;\n\n                > li.mainmenu-item {\n                    &.mainmenu-taskbar,\n                    &.mainmenu-preview {\n                        margin-right: 0;\n\n                        .nav-icon {\n                            left: 0;\n\n                            i {\n                                font-size: 20px;\n\n                                &:before {\n                                    top: 1px;\n                                }\n                            }\n                        }\n                    }\n\n                    &.mainmenu-account {\n                        margin-right: 0;\n\n                        > a {\n                            padding: 0;\n                            margin-top: 2px;\n                            width: 42px;\n\n                            // Hide caret\n                            &:after {\n                                display: none;\n                            }\n                        }\n\n                        .nav-icon {\n                            left: 0;\n                            width: auto;\n                            position: static;\n                        }\n                    }\n                }\n\n                li.mainmenu-toggle {\n                    display: none;\n                }\n            }\n        }\n    }\n}\n\n@media (min-width: @screen-sm-min) {\n    .layout-mainmenu .navbar {\n        &.navbar-mode-icons {\n            ul.mainmenu-items[data-main-menu] {\n                > li.mainmenu-item.has-subitems > a:after,\n                .nav-label {\n                    display: none;\n                }\n                .nav-icon {\n                    text-align: center;\n                }\n            }\n        }\n        &.navbar-mode-tile {\n            height: @mainmenu-mode-tile-height;\n\n            ul.mainmenu-items[data-main-menu] {\n                margin-top: 0;\n\n                > li.mainmenu-item {\n                    text-align: center;\n\n                    > a {\n                        padding: 11px 15px 10px;\n                        height: auto;\n                        display: block;\n                    }\n\n                    .nav-label {\n                        display: block;\n                        overflow: hidden;\n                        max-width: 150px;\n                    }\n\n                    &.has-subitems {\n                        .nav-label {\n                            padding-right: 17px;\n                        }\n\n                        a:after {\n                            margin: 0;\n                            top: auto;\n                            right: 11px;\n                            bottom: 8.9px\n                        }\n                    }\n\n                    .nav-icon {\n                        display: block;\n                        height: 30px;\n                        width: auto;\n                        position: static;\n                        line-height: 1;\n                        margin-bottom: 4px;\n\n                        .svg-icon, i {\n                            display: inline-block;\n                        }\n\n                        i:before {\n                            margin-right: 0;\n                        }\n                    }\n\n                    .nav-icon .nav-colorpicker {\n                        top: 7px;\n                    }\n\n                    span.counter {\n                        margin: 0;\n                        position: absolute;\n                        top: 8px;\n                        left: 50%;\n                    }\n\n                    &.mainmenu-account {\n                        > a {\n                            padding: 12px 0 0 0;\n                            margin-top: 1px;\n                            width: auto;\n                        }\n\n                        .nav-icon {\n                            height: auto;\n                        }\n\n                        div.mainmenu-account-avatar {\n                            width: 52px;\n                            height: 52px;\n\n                            img {\n                                width: 50px;\n                                height: 50px;\n                            }\n                        }\n                    }\n\n                    &.mainmenu-preview.has-nolabel {\n                        > a {\n                            width: auto;\n                            margin-top: 14px;\n                        }\n                    }\n                }\n            }\n        }\n\n        &.navbar-mode-text {\n            ul.mainmenu-items.mainmenu-general > li.mainmenu-item {\n                > a {\n                    padding: 15px 10px 0 10px;\n                }\n\n                .nav-icon {\n                    display: none;\n                }\n            }\n        }\n    }\n}\n\n.main-menu-collapse() {\n    ul.mainmenu-items.mainmenu-general > li.mainmenu-item {\n        &:not(.active) {\n            display: none;\n        }\n\n        > a {\n            cursor: default;\n            pointer-events: none;\n        }\n\n        span.counter,\n        &.has-subitems > a:after {\n            display: none;\n        }\n    }\n\n    ul.mainmenu-items[data-main-menu] {\n        &.mainmenu-extras {\n            li.mainmenu-toggle {\n                display: inline-block;\n                margin-right: -10px;\n\n                > a {\n                    .hide-text();\n                    width: 50px;\n                    position: relative;\n                    opacity: .7;\n\n                    &:before {\n                        .backend-icon-sprite-pseudo(20px, 18px, 0, 0);\n                        position: absolute;\n                        top: 19px;\n                        left: 18px;\n                    }\n\n                    &:hover {\n                        opacity: 1;\n                    }\n                }\n            }\n        }\n    }\n}\n\n@media (max-width: @screen-xs-max) {\n    #layout-mainmenu {\n        .navbar {\n            .main-menu-collapse();\n        }\n    }\n}\n\n#layout-mainmenu .navbar.navbar-mode-collapse {\n    .main-menu-collapse();\n}\n\nbody.main-menu-left {\n    #layout-mainmenu .main-menu-container {\n        display: none;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/outerlayout.less",
    "content": "\n// Layout for \"Outside\" pages, such as the Login screen\n//\n\nhtml body.outer {\n    background: white;\n}\n\nbody.outer {\n    .outer-form-cell {\n        width: 350px;\n        padding: @padding-standard * 2;\n        border-right: 1px solid #ECF0F1;\n        vertical-align: top;\n    }\n\n    .outer-theme-cell {\n        background-color: #FEF6EB;\n        vertical-align: middle;\n        text-align: center;\n        overflow: hidden;\n\n        img {\n            display: inline-block;\n            margin: 0 auto;\n        }\n    }\n\n    h1 {\n        margin: 0 0 20px 0;\n        padding: 0;\n        text-align: center;\n        .hide-text();\n\n        img {\n            max-width: 180px;\n            width: 100%;\n            display: inline-block;\n        }\n    }\n\n    .outer-form-container {\n        margin: 0 auto;\n\n        p {\n            color: @color-grey-7;\n        }\n\n        h2 {\n            font-size: 22px;\n            font-family: @font-family-serif;\n            margin: 0;\n            padding: 10px 0 30px 0;\n            color: @color-grey-7;\n            text-align: center;\n\n            &:empty {\n                padding: 0;\n            }\n\n            &:after {\n                content: '';\n                display: block;\n                height: 2px;\n                width: 60px;\n                margin: 30px auto 20px;\n                background: @color-text-grey-1;\n            }\n        }\n\n        .forgot-password {\n            margin-top: 8px;\n\n            a {\n                color: @color-text-grey-1;\n                text-decoration: underline;\n            }\n        }\n\n        // Fix for some third-party plugins\n        //\n        .horizontal-form {\n            input.form-control {\n                margin-bottom: 20px;\n            }\n\n            + .pull-right.forgot-password {\n                margin-top: -47px;\n                position: relative;\n            }\n        }\n    }\n}\n\nbody.outer.setup .outer-form-cell {\n    width: 500px;\n}\n\n@media (max-width: @screen-xs) {\n    body.outer {\n        .outer-form-cell {\n            width: 100% !important;\n        }\n\n        .outer-theme-cell {\n            display: none;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/sidenav-responsive.less",
    "content": ".layout-sidenav.sidenav-responsive {\n    position: static;\n    height: 60px;\n\n    ul {\n        padding: 13px 20px 0 20px;\n        overflow: visible;\n\n        > li.mainmenu-item {\n            display: inline-block;\n            margin: 0 10px 0 0;\n\n            > a span.counter {\n                position: relative;\n                top: 0;\n                right: 0;\n            }\n\n            &.divider {\n                height: 60px;\n                width: 1.4px;\n                margin: -13px 10px 0 0;\n                border-left: 1px solid @border-color;\n\n                + .section-title {\n                    margin-left: -10px;\n                }\n            }\n\n            &.sidebar-button {\n                margin-bottom: 0;\n                margin-right: 25px;\n\n                > a {\n                    margin: 0;\n                    height: 34px;\n                    padding: 7px 33px 0 13px;\n\n                    .nav-icon {\n                        top: 0;\n                    }\n                }\n            }\n        }\n\n        > li.mainmenu-item:not(.sidebar-button) {\n            > a {\n                border-radius: 20px;\n                padding: 7px 10px 7px 41px;\n\n                .nav-icon {\n                    left: 15px;\n                }\n            }\n\n            &.active {\n                > a {\n                    border-left: none;\n                }\n            }\n        }\n    }\n}\n\n.responsive-sidebar-toolbar {\n    background: @sidebar-bg;\n\n    &:before, &:after {\n        display: none !important;\n    }\n}\n\n.secondary-nav > .control-toolbar {\n    padding-bottom: 0;\n}\n\n.secondary-nav {\n    display: none;\n}\n\nbody:not(.drag) {\n    .layout-sidenav.sidenav-responsive {\n        ul > li.mainmenu-item:not(.sidebar-button) > a:hover {\n            background: @sidebar-hover-bg;\n        }\n    }\n}\n\nbody.sidenav-responsive {\n    .secondary-nav {\n        display: block;\n    }\n}\n\n@media (max-width: @screen-xs-max) {\n    .secondary-nav {\n        display: block;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/sidenav.less",
    "content": "//\n// Side navigation bar\n// --------------------------------------------------\n\n.layout-sidenav-container {\n    > .layout-sidenav-spacer {\n        position: relative;\n        height: 100%;\n        width: 240px;\n    }\n}\n\nnav.layout-sidenav {\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    box-sizing: border-box;\n    font-size: @font-size-base;\n    background: @sidebar-bg;\n\n    ul {\n        position: relative;\n        margin: 0;\n        padding: 25px 25px 25px 0;\n        height: 100%;\n        overflow: hidden;\n\n        > li.mainmenu-item {\n            margin: 0 0 10px 0;\n\n            > a {\n                padding: 7px 10px 7px 58px;\n                border-top-right-radius: 20px;\n                border-bottom-right-radius: 20px;\n                margin: 0;\n                transition: padding 0.1s;\n\n                display: flex;\n                flex-direction: row;\n\n                &:hover {\n                    background: transparent;\n                }\n\n                .nav-icon {\n                    left: 25px;\n                    width: 20px;\n                    line-height: 34px;\n                    opacity: 1;\n                    text-align: center;\n\n                    .svg-icon {\n                        width: 20px;\n\n                        -webkit-filter: grayscale(100%) invert(100%);\n                        filter: grayscale(100%) invert(100%);\n                    }\n\n                    i {\n                        font-size: 20px;\n                        line-height: inherit;\n                        color: @sidebar-color;\n                    }\n                }\n\n                .nav-label {\n                    color: @sidebar-color;\n                    font-size: @font-size-base;\n                    opacity: 1;\n                    overflow: hidden;\n                }\n\n                span.counter {\n                    position: absolute;\n                    top: 10px;\n                    right: 10px;\n                    font-size: 12px;\n                    transition: all 0.1s;\n                }\n            }\n\n            &.has-counter > a {\n                padding-right: 25px;\n            }\n\n            &:last-child {\n                margin-bottom: 0;\n            }\n\n            &.divider {\n                height: 1px;\n                margin: 5px 0 10px;\n                background: @primary-border;\n                margin-right: -25px;\n            }\n\n            &.section-title {\n                color: @sidebar-color;\n                padding: 7px 0 7px 17px;\n                white-space: nowrap;\n                font-weight: 600;\n                margin-bottom: 0;\n                transition: margin 0.1s ease-in-out;\n                transition-delay: .25s;\n\n                .nav-label {\n                    opacity: 1;\n                    margin-right: 0;\n                    display: block;\n                    overflow: hidden;\n                    max-width: 250px;\n                    vertical-align: middle;\n                }\n            }\n\n            &.active {\n                > a {\n                    background: @sidebar-active-bg !important;\n                    border-left: 3px solid @sidebar-active-border;\n                    padding-left: 55px;\n\n                    .nav-label {\n                        color: @sidebar-active-color;\n                        font-weight: 600;\n                    }\n\n                    .nav-icon {\n                        opacity: 1;\n\n                        i {\n                            color: @sidebar-active-color;\n                        }\n                    }\n                }\n            }\n\n            &.sidebar-button {\n                margin-bottom: 25px;\n\n                > a {\n                    margin-left: 15px;\n                    background: @brand-primary;\n                    padding: 9px 38px 0 13px;\n                    border-radius: 5px;\n                    transition: all 0.1s ease-in-out;\n                    transition-property: border-radius, padding;\n                    height: 40px;\n                    box-shadow: 0 0 10px rgba(0, 0, 0, 0.27);\n                    min-width: 40px;\n\n                    &:hover {\n                        background: @primary-darker;\n                    }\n\n                    &:active {\n                        box-shadow: none;\n                    }\n\n                    .nav-icon {\n                        transition: width 0.1s ease-in-out;\n                        transition-delay: .25s;\n                        width: 40px;\n                        top: 3px;\n                        right: 0;\n                        left: auto;\n                        text-align: center;\n\n                        .svg-icon, i {\n                            color: white;\n                        }\n                    }\n\n                    .nav-label {\n                        transition: opacity 0.1s ease-in-out;\n                        transition-delay: .25s;\n                        opacity: 1;\n                        color: white;\n                        font-weight: 600;\n                    }\n                }\n\n                &.active > a {\n                    background: @brand-primary !important;\n\n                    &:hover {\n                        background: @primary-darker !important;\n                    }\n                }\n            }\n        }\n    }\n}\n\n@media (max-width: @screen-md-max) {\n    .layout-sidenav-container > .layout-sidenav-spacer {\n        width: 70px;\n    }\n\n    #layout-sidenav {\n        transition: width 0.1s, box-shadow 0.1s ease-in-out;\n        box-shadow: none;\n    }\n\n    #layout-sidenav:not(:hover) {\n        ul {\n            > li.mainmenu-item {\n                > a {\n                    padding-right: 0;\n\n                    .nav-label {\n                        visibility: hidden;\n                    }\n\n                    span.counter {\n                        top: -8px;\n                        right: 1px;\n                    }\n                }\n\n                &.section-title {\n                    transition: none;\n                    margin-right: -15px;\n                }\n\n                &.sidebar-button > a {\n                    margin-left: 15px;\n                    border-radius: 25px;\n                    width: 40px;\n                    padding: 9px 13px 0 0;\n\n                    .nav-label {\n                        transition: none;\n                        opacity: 0;\n                    }\n\n                    .nav-icon {\n                        transition: none;\n                        width: 20px;\n                    }\n                }\n            }\n        }\n    }\n\n    #layout-sidenav:hover {\n        z-index: 20;\n        width: 240px;\n        box-shadow: 5px 0 5px rgba(0,0,0,0.1);\n        transition-delay: .25s;\n\n        ul > li.mainmenu-item > a {\n            transition-delay: .25s;\n        }\n\n        ul > li.mainmenu-item > a span.counter {\n            top: 9px;\n            right: 10px;\n            transition-delay: .25s;\n        }\n    }\n}\n\nbody:not(.drag) {\n    #layout-sidenav {\n        ul > li.mainmenu-item:not(.sidebar-button) > a:hover {\n            background: @sidebar-hover-bg;\n        }\n    }\n}\n\n.hide-sidenav() {\n    .layout-sidenav-container {\n        display: none!important;\n    }\n}\n\nbody.sidenav-responsive {\n    .hide-sidenav();\n}\n\n@media (max-width: @screen-xs-max) {\n    .hide-sidenav();\n}\n"
  },
  {
    "path": "modules/backend/assets/less/layout/sidepanel.less",
    "content": "//\n// Side panel\n// --------------------------------------------------\n\n#layout-side-panel {\n    border-right: 1px solid @primary-border;\n\n    .sidepanel-content-header {\n        background: @color-grey-3;\n        font-size: 15px;\n        padding: 12px 20px 13px;\n        position: relative;\n    }\n}\n\nbody.display-side-panel {\n    #layout-side-panel {\n        display: block;\n        position: absolute;\n        // This needs to be higher than the dropdown overlay, otherwise the\n        // mouseout event fires and sidebar hides when opening a dropdown.\n        z-index: @zindex-dropdown;\n        width: 350px;\n        border-right: none;\n        .box-shadow(3px 0px 3px 0 rgba(0, 0, 0, 0.1));\n    }\n}\n\n[data-bs-theme=\"dark\"] {\n    #layout-side-panel .sidepanel-content-header {\n        background: @secondary-bg;\n    }\n}\n"
  },
  {
    "path": "modules/backend/assets/less/october.less",
    "content": "//\n// Boot\n//\n\n@import \"core/boot.less\";\n@import \"core/utility.less\";\n@import \"core/animations.less\";\n\n//\n// Backend Components\n//\n\n@import \"../foundation/controls/build.less\";\n@import \"../foundation/elements/build.less\";\n@import \"../foundation/migrate/build.less\";\n\n//\n// Global Widgets\n//\n\n@import \"../../widgets/lists/assets/less/list.less\";\n@import \"../../widgets/filter/assets/less/filter.less\";\n@import \"../../widgets/form/assets/less/form.less\";\n\n//\n// October Controls\n//\n\n@import \"core/boot.less\";\n@import \"controls/simplelist.less\";\n@import \"controls/scrollbar.less\";\n@import \"controls/scrollable-panel.less\";\n@import \"controls/filelist.less\";\n@import \"controls/common.less\";\n@import \"controls/reportwidgets.less\";\n@import \"controls/treelist.less\";\n@import \"controls/sidenav-tree.less\";\n@import \"controls/panels.less\";\n@import \"controls/selector-group.less\";\n@import \"controls/tree-path.less\";\n@import \"controls/namevaluelist.less\";\n@import \"controls/scrollpad.less\";\n@import \"controls/svg-icons.less\";\n@import \"controls/snackbars.less\";\n@import \"controls/tooltips.less\";\n@import \"controls/backend-toolbar-buttons.less\";\n@import \"controls/menu-mode-selector.less\";\n@import \"controls/color-mode-selector.less\";\n@import \"controls/onboarding.less\";\n\n// Layout\n@import \"layout/layout.less\";\n@import \"layout/flexlayout.less\";\n@import \"layout/mainmenu.items.less\";\n@import \"layout/mainmenu.top.less\";\n@import \"layout/mainmenu.less\";\n@import \"layout/mainmenu.left.less\";\n@import \"layout/mainmenu.submenu.dropdown.less\";\n@import \"layout/mainmenu.responsive.less\";\n@import \"layout/mainmenu.logo.less\";\n@import \"layout/sidenav.less\";\n@import \"layout/sidenav-responsive.less\";\n@import \"layout/sidepanel.less\";\n@import \"layout/footer.less\";\n@import \"layout/outerlayout.less\";\n@import \"layout/fancylayout.less\";\n@import \"layout/formdocumentlayout.less\";\n@import \"layout/form-with-sidebar.less\";\n@import \"layout/flyout.less\";\n"
  },
  {
    "path": "modules/backend/assets/vendor/daterangepicker/README.md",
    "content": "# Date Range Picker\n\n![Improvely.com](https://i.imgur.com/UTRlaar.png)\n\nThis date range picker component creates a dropdown menu from which a user can\nselect a range of dates. I created it while building the UI for [Improvely](http://www.improvely.com), \nwhich needed a way to select date ranges for reports.\n\nFeatures include limiting the selectable date range, localizable strings and date formats,\na single date picker mode, a time picker, and predefined date ranges.\n\n## [Documentation and Live Usage Examples](http://www.daterangepicker.com)\n\n## [See It In a Live Application](https://awio.iljmp.com/5/drpdemogh)\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2012-2019 Dan Grossman\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "modules/backend/assets/vendor/daterangepicker/daterangepicker.css",
    "content": ".daterangepicker {\n  position: absolute;\n  color: inherit;\n  background-color: #fff;\n  border-radius: 4px;\n  border: 1px solid #ddd;\n  width: 278px;\n  max-width: none;\n  padding: 0;\n  margin-top: 7px;\n  top: 100px;\n  left: 20px;\n  z-index: 3001;\n  display: none;\n  font-family: arial;\n  font-size: 15px;\n  line-height: 1em;\n}\n\n.daterangepicker:before, .daterangepicker:after {\n  position: absolute;\n  display: inline-block;\n  border-bottom-color: rgba(0, 0, 0, 0.2);\n  content: '';\n}\n\n.daterangepicker:before {\n  top: -7px;\n  border-right: 7px solid transparent;\n  border-left: 7px solid transparent;\n  border-bottom: 7px solid #ccc;\n}\n\n.daterangepicker:after {\n  top: -6px;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid #fff;\n  border-left: 6px solid transparent;\n}\n\n.daterangepicker.opensleft:before {\n  right: 9px;\n}\n\n.daterangepicker.opensleft:after {\n  right: 10px;\n}\n\n.daterangepicker.openscenter:before {\n  left: 0;\n  right: 0;\n  width: 0;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.daterangepicker.openscenter:after {\n  left: 0;\n  right: 0;\n  width: 0;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.daterangepicker.opensright:before {\n  left: 9px;\n}\n\n.daterangepicker.opensright:after {\n  left: 10px;\n}\n\n.daterangepicker.drop-up {\n  margin-top: -7px;\n}\n\n.daterangepicker.drop-up:before {\n  top: initial;\n  bottom: -7px;\n  border-bottom: initial;\n  border-top: 7px solid #ccc;\n}\n\n.daterangepicker.drop-up:after {\n  top: initial;\n  bottom: -6px;\n  border-bottom: initial;\n  border-top: 6px solid #fff;\n}\n\n.daterangepicker.single .daterangepicker .ranges, .daterangepicker.single .drp-calendar {\n  float: none;\n}\n\n.daterangepicker.single .drp-selected {\n  display: none;\n}\n\n.daterangepicker.show-calendar .drp-calendar {\n  display: block;\n}\n\n.daterangepicker.show-calendar .drp-buttons {\n  display: block;\n}\n\n.daterangepicker.auto-apply .drp-buttons {\n  display: none;\n}\n\n.daterangepicker .drp-calendar {\n  display: none;\n  max-width: 270px;\n}\n\n.daterangepicker .drp-calendar.left {\n  padding: 8px 0 8px 8px;\n}\n\n.daterangepicker .drp-calendar.right {\n  padding: 8px;\n}\n\n.daterangepicker .drp-calendar.single .calendar-table {\n  border: none;\n}\n\n.daterangepicker .calendar-table .next span, .daterangepicker .calendar-table .prev span {\n  color: #fff;\n  border: solid black;\n  border-width: 0 2px 2px 0;\n  border-radius: 0;\n  display: inline-block;\n  padding: 3px;\n}\n\n.daterangepicker .calendar-table .next span {\n  transform: rotate(-45deg);\n  -webkit-transform: rotate(-45deg);\n}\n\n.daterangepicker .calendar-table .prev span {\n  transform: rotate(135deg);\n  -webkit-transform: rotate(135deg);\n}\n\n.daterangepicker .calendar-table th, .daterangepicker .calendar-table td {\n  white-space: nowrap;\n  text-align: center;\n  vertical-align: middle;\n  min-width: 32px;\n  width: 32px;\n  height: 24px;\n  line-height: 24px;\n  font-size: 12px;\n  border-radius: 4px;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  cursor: pointer;\n}\n\n.daterangepicker .calendar-table {\n  border: 1px solid #fff;\n  border-radius: 4px;\n  background-color: #fff;\n}\n\n.daterangepicker .calendar-table table {\n  width: 100%;\n  margin: 0;\n  border-spacing: 0;\n  border-collapse: collapse;\n}\n\n.daterangepicker td.available:hover, .daterangepicker th.available:hover {\n  background-color: #eee;\n  border-color: transparent;\n  color: inherit;\n}\n\n.daterangepicker td.week, .daterangepicker th.week {\n  font-size: 80%;\n  color: #ccc;\n}\n\n.daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {\n  background-color: #fff;\n  border-color: transparent;\n  color: #999;\n}\n\n.daterangepicker td.in-range {\n  background-color: #ebf4f8;\n  border-color: transparent;\n  color: #000;\n  border-radius: 0;\n}\n\n.daterangepicker td.start-date {\n  border-radius: 4px 0 0 4px;\n}\n\n.daterangepicker td.end-date {\n  border-radius: 0 4px 4px 0;\n}\n\n.daterangepicker td.start-date.end-date {\n  border-radius: 4px;\n}\n\n.daterangepicker td.active, .daterangepicker td.active:hover {\n  background-color: #357ebd;\n  border-color: transparent;\n  color: #fff;\n}\n\n.daterangepicker th.month {\n  width: auto;\n}\n\n.daterangepicker td.disabled, .daterangepicker option.disabled {\n  color: #999;\n  cursor: not-allowed;\n  text-decoration: line-through;\n}\n\n.daterangepicker select.monthselect, .daterangepicker select.yearselect {\n  font-size: 12px;\n  padding: 1px;\n  height: auto;\n  margin: 0;\n  cursor: default;\n}\n\n.daterangepicker select.monthselect {\n  margin-right: 2%;\n  width: 56%;\n}\n\n.daterangepicker select.yearselect {\n  width: 40%;\n}\n\n.daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {\n  width: 50px;\n  margin: 0 auto;\n  background: #eee;\n  border: 1px solid #eee;\n  padding: 2px;\n  outline: 0;\n  font-size: 12px;\n}\n\n.daterangepicker .calendar-time {\n  text-align: center;\n  margin: 4px auto 0 auto;\n  line-height: 30px;\n  position: relative;\n}\n\n.daterangepicker .calendar-time select.disabled {\n  color: #ccc;\n  cursor: not-allowed;\n}\n\n.daterangepicker .drp-buttons {\n  clear: both;\n  text-align: right;\n  padding: 8px;\n  border-top: 1px solid #ddd;\n  display: none;\n  line-height: 12px;\n  vertical-align: middle;\n}\n\n.daterangepicker .drp-selected {\n  display: inline-block;\n  font-size: 12px;\n  padding-right: 8px;\n}\n\n.daterangepicker .drp-buttons .btn {\n  margin-left: 8px;\n  font-size: 12px;\n  font-weight: bold;\n  padding: 4px 8px;\n}\n\n.daterangepicker.show-ranges.single.rtl .drp-calendar.left {\n  border-right: 1px solid #ddd;\n}\n\n.daterangepicker.show-ranges.single.ltr .drp-calendar.left {\n  border-left: 1px solid #ddd;\n}\n\n.daterangepicker.show-ranges.rtl .drp-calendar.right {\n  border-right: 1px solid #ddd;\n}\n\n.daterangepicker.show-ranges.ltr .drp-calendar.left {\n  border-left: 1px solid #ddd;\n}\n\n.daterangepicker .ranges {\n  float: none;\n  text-align: left;\n  margin: 0;\n}\n\n.daterangepicker.show-calendar .ranges {\n  margin-top: 8px;\n}\n\n.daterangepicker .ranges ul {\n  list-style: none;\n  margin: 0 auto;\n  padding: 0;\n  width: 100%;\n}\n\n.daterangepicker .ranges li {\n  font-size: 12px;\n  padding: 8px 12px;\n  cursor: pointer;\n}\n\n.daterangepicker .ranges li:hover {\n  background-color: #eee;\n}\n\n.daterangepicker .ranges li.active {\n  background-color: #08c;\n  color: #fff;\n}\n\n/*  Larger Screen Styling */\n@media (min-width: 564px) {\n  .daterangepicker {\n    width: auto;\n  }\n\n  .daterangepicker .ranges ul {\n    width: 140px;\n  }\n\n  .daterangepicker.single .ranges ul {\n    width: 100%;\n  }\n\n  .daterangepicker.single .drp-calendar.left {\n    clear: none;\n  }\n\n  .daterangepicker.single .ranges, .daterangepicker.single .drp-calendar {\n    float: left;\n  }\n\n  .daterangepicker {\n    direction: ltr;\n    text-align: left;\n  }\n\n  .daterangepicker .drp-calendar.left {\n    clear: left;\n    margin-right: 0;\n  }\n\n  .daterangepicker .drp-calendar.left .calendar-table {\n    border-right: none;\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n\n  .daterangepicker .drp-calendar.right {\n    margin-left: 0;\n  }\n\n  .daterangepicker .drp-calendar.right .calendar-table {\n    border-left: none;\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n\n  .daterangepicker .drp-calendar.left .calendar-table {\n    padding-right: 8px;\n  }\n\n  .daterangepicker .ranges, .daterangepicker .drp-calendar {\n    float: left;\n  }\n}\n\n@media (min-width: 730px) {\n  .daterangepicker .ranges {\n    width: auto;\n  }\n\n  .daterangepicker .ranges {\n    float: left;\n  }\n\n  .daterangepicker.rtl .ranges {\n    float: right;\n  }\n\n  .daterangepicker .drp-calendar.left {\n    clear: none !important;\n  }\n}\n"
  },
  {
    "path": "modules/backend/assets/vendor/daterangepicker/daterangepicker.js",
    "content": "/**\n* @version: 3.0.5\n* @author: Dan Grossman http://www.dangrossman.info/\n* @copyright: Copyright (c) 2012-2019 Dan Grossman. All rights reserved.\n* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php\n* @website: http://www.daterangepicker.com/\n*/\n// Following the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js\n(function (root, factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Make globaly available as well\n        define(['moment', 'jquery'], function (moment, jquery) {\n            if (!jquery.fn) jquery.fn = {}; // webpack server rendering\n            if (typeof moment !== 'function' && moment.default) moment = moment.default\n            return factory(moment, jquery);\n        });\n    } else if (typeof module === 'object' && module.exports) {\n        // Node / Browserify\n        //isomorphic issue\n        var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined;\n        if (!jQuery) {\n            jQuery = require('jquery');\n            if (!jQuery.fn) jQuery.fn = {};\n        }\n        var moment = (typeof window != 'undefined' && typeof window.moment != 'undefined') ? window.moment : require('moment');\n        module.exports = factory(moment, jQuery);\n    } else {\n        // Browser globals\n        root.daterangepicker = factory(root.moment, root.jQuery);\n    }\n}(this, function(moment, $) {\n    var DateRangePicker = function(element, options, cb) {\n\n        //default settings for options\n        this.parentEl = 'body';\n        this.element = $(element);\n        this.startDate = moment().startOf('day');\n        this.endDate = moment().endOf('day');\n        this.minDate = false;\n        this.maxDate = false;\n        this.maxSpan = false;\n        this.autoApply = false;\n        this.singleDatePicker = false;\n        this.showDropdowns = false;\n        this.minYear = moment().subtract(100, 'year').format('YYYY');\n        this.maxYear = moment().add(100, 'year').format('YYYY');\n        this.showWeekNumbers = false;\n        this.showISOWeekNumbers = false;\n        this.showCustomRangeLabel = true;\n        this.timePicker = false;\n        this.timePicker24Hour = false;\n        this.timePickerIncrement = 1;\n        this.timePickerSeconds = false;\n        this.linkedCalendars = true;\n        this.autoUpdateInput = true;\n        this.alwaysShowCalendars = false;\n        this.ranges = {};\n\n        this.opens = 'right';\n        if (this.element.hasClass('pull-right'))\n            this.opens = 'left';\n\n        this.drops = 'down';\n        if (this.element.hasClass('dropup'))\n            this.drops = 'up';\n\n        this.buttonClasses = 'btn btn-sm';\n        this.applyButtonClasses = 'btn-primary';\n        this.cancelButtonClasses = 'btn-default';\n\n        this.locale = {\n            direction: 'ltr',\n            format: moment.localeData().longDateFormat('L'),\n            separator: ' - ',\n            applyLabel: 'Apply',\n            cancelLabel: 'Cancel',\n            weekLabel: 'W',\n            customRangeLabel: 'Custom Range',\n            daysOfWeek: moment.weekdaysMin(),\n            monthNames: moment.monthsShort(),\n            firstDay: moment.localeData().firstDayOfWeek()\n        };\n\n        this.callback = function() { };\n\n        //some state information\n        this.isShowing = false;\n        this.leftCalendar = {};\n        this.rightCalendar = {};\n\n        //custom options from user\n        if (typeof options !== 'object' || options === null)\n            options = {};\n\n        //allow setting options with data attributes\n        //data-api options will be overwritten with custom javascript options\n        options = $.extend(this.element.data(), options);\n\n        //html template for the picker UI\n        if (typeof options.template !== 'string' && !(options.template instanceof $))\n            options.template =\n            '<div class=\"daterangepicker\">' +\n                '<div class=\"ranges\"></div>' +\n                '<div class=\"drp-calendar left\">' +\n                    '<div class=\"calendar-table\"></div>' +\n                    '<div class=\"calendar-time\"></div>' +\n                '</div>' +\n                '<div class=\"drp-calendar right\">' +\n                    '<div class=\"calendar-table\"></div>' +\n                    '<div class=\"calendar-time\"></div>' +\n                '</div>' +\n                '<div class=\"drp-buttons\">' +\n                    '<span class=\"drp-selected\"></span>' +\n                    '<button class=\"cancelBtn\" type=\"button\"></button>' +\n                    '<button class=\"applyBtn\" disabled=\"disabled\" type=\"button\"></button> ' +\n                '</div>' +\n            '</div>';\n\n        this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);\n        this.container = $(options.template).appendTo(this.parentEl);\n\n        //\n        // handle all the possible options overriding defaults\n        //\n\n        if (typeof options.locale === 'object') {\n\n            if (typeof options.locale.direction === 'string')\n                this.locale.direction = options.locale.direction;\n\n            if (typeof options.locale.format === 'string')\n                this.locale.format = options.locale.format;\n\n            if (typeof options.locale.separator === 'string')\n                this.locale.separator = options.locale.separator;\n\n            if (typeof options.locale.daysOfWeek === 'object')\n                this.locale.daysOfWeek = options.locale.daysOfWeek.slice();\n\n            if (typeof options.locale.monthNames === 'object')\n              this.locale.monthNames = options.locale.monthNames.slice();\n\n            if (typeof options.locale.firstDay === 'number')\n              this.locale.firstDay = options.locale.firstDay;\n\n            if (typeof options.locale.applyLabel === 'string')\n              this.locale.applyLabel = options.locale.applyLabel;\n\n            if (typeof options.locale.cancelLabel === 'string')\n              this.locale.cancelLabel = options.locale.cancelLabel;\n\n            if (typeof options.locale.weekLabel === 'string')\n              this.locale.weekLabel = options.locale.weekLabel;\n\n            if (typeof options.locale.customRangeLabel === 'string'){\n                //Support unicode chars in the custom range name.\n                var elem = document.createElement('textarea');\n                elem.innerHTML = options.locale.customRangeLabel;\n                var rangeHtml = elem.value;\n                this.locale.customRangeLabel = rangeHtml;\n            }\n        }\n        this.container.addClass(this.locale.direction);\n\n        if (typeof options.startDate === 'string')\n            this.startDate = moment(options.startDate, this.locale.format);\n\n        if (typeof options.endDate === 'string')\n            this.endDate = moment(options.endDate, this.locale.format);\n\n        if (typeof options.minDate === 'string')\n            this.minDate = moment(options.minDate, this.locale.format);\n\n        if (typeof options.maxDate === 'string')\n            this.maxDate = moment(options.maxDate, this.locale.format);\n\n        if (typeof options.startDate === 'object')\n            this.startDate = moment(options.startDate);\n\n        if (typeof options.endDate === 'object')\n            this.endDate = moment(options.endDate);\n\n        if (typeof options.minDate === 'object')\n            this.minDate = moment(options.minDate);\n\n        if (typeof options.maxDate === 'object')\n            this.maxDate = moment(options.maxDate);\n\n        // sanity check for bad options\n        if (this.minDate && this.startDate.isBefore(this.minDate))\n            this.startDate = this.minDate.clone();\n\n        // sanity check for bad options\n        if (this.maxDate && this.endDate.isAfter(this.maxDate))\n            this.endDate = this.maxDate.clone();\n\n        if (typeof options.applyButtonClasses === 'string')\n            this.applyButtonClasses = options.applyButtonClasses;\n\n        if (typeof options.applyClass === 'string') //backwards compat\n            this.applyButtonClasses = options.applyClass;\n\n        if (typeof options.cancelButtonClasses === 'string')\n            this.cancelButtonClasses = options.cancelButtonClasses;\n\n        if (typeof options.cancelClass === 'string') //backwards compat\n            this.cancelButtonClasses = options.cancelClass;\n\n        if (typeof options.maxSpan === 'object')\n            this.maxSpan = options.maxSpan;\n\n        if (typeof options.dateLimit === 'object') //backwards compat\n            this.maxSpan = options.dateLimit;\n\n        if (typeof options.opens === 'string')\n            this.opens = options.opens;\n\n        if (typeof options.drops === 'string')\n            this.drops = options.drops;\n\n        if (typeof options.showWeekNumbers === 'boolean')\n            this.showWeekNumbers = options.showWeekNumbers;\n\n        if (typeof options.showISOWeekNumbers === 'boolean')\n            this.showISOWeekNumbers = options.showISOWeekNumbers;\n\n        if (typeof options.buttonClasses === 'string')\n            this.buttonClasses = options.buttonClasses;\n\n        if (typeof options.buttonClasses === 'object')\n            this.buttonClasses = options.buttonClasses.join(' ');\n\n        if (typeof options.showDropdowns === 'boolean')\n            this.showDropdowns = options.showDropdowns;\n\n        if (typeof options.minYear === 'number')\n            this.minYear = options.minYear;\n\n        if (typeof options.maxYear === 'number')\n            this.maxYear = options.maxYear;\n\n        if (typeof options.showCustomRangeLabel === 'boolean')\n            this.showCustomRangeLabel = options.showCustomRangeLabel;\n\n        if (typeof options.singleDatePicker === 'boolean') {\n            this.singleDatePicker = options.singleDatePicker;\n            if (this.singleDatePicker)\n                this.endDate = this.startDate.clone();\n        }\n\n        if (typeof options.timePicker === 'boolean')\n            this.timePicker = options.timePicker;\n\n        if (typeof options.timePickerSeconds === 'boolean')\n            this.timePickerSeconds = options.timePickerSeconds;\n\n        if (typeof options.timePickerIncrement === 'number')\n            this.timePickerIncrement = options.timePickerIncrement;\n\n        if (typeof options.timePicker24Hour === 'boolean')\n            this.timePicker24Hour = options.timePicker24Hour;\n\n        if (typeof options.autoApply === 'boolean')\n            this.autoApply = options.autoApply;\n\n        if (typeof options.autoUpdateInput === 'boolean')\n            this.autoUpdateInput = options.autoUpdateInput;\n\n        if (typeof options.linkedCalendars === 'boolean')\n            this.linkedCalendars = options.linkedCalendars;\n\n        if (typeof options.isInvalidDate === 'function')\n            this.isInvalidDate = options.isInvalidDate;\n\n        if (typeof options.isCustomDate === 'function')\n            this.isCustomDate = options.isCustomDate;\n\n        if (typeof options.alwaysShowCalendars === 'boolean')\n            this.alwaysShowCalendars = options.alwaysShowCalendars;\n\n        // update day names order to firstDay\n        if (this.locale.firstDay != 0) {\n            var iterator = this.locale.firstDay;\n            while (iterator > 0) {\n                this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());\n                iterator--;\n            }\n        }\n\n        var start, end, range;\n\n        //if no start/end dates set, check if an input element contains initial values\n        if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {\n            if ($(this.element).is(':text')) {\n                var val = $(this.element).val(),\n                    split = val.split(this.locale.separator);\n\n                start = end = null;\n\n                if (split.length == 2) {\n                    start = moment(split[0], this.locale.format);\n                    end = moment(split[1], this.locale.format);\n                } else if (this.singleDatePicker && val !== \"\") {\n                    start = moment(val, this.locale.format);\n                    end = moment(val, this.locale.format);\n                }\n                if (start !== null && end !== null) {\n                    this.setStartDate(start);\n                    this.setEndDate(end);\n                }\n            }\n        }\n\n        if (typeof options.ranges === 'object') {\n            for (range in options.ranges) {\n\n                if (typeof options.ranges[range][0] === 'string')\n                    start = moment(options.ranges[range][0], this.locale.format);\n                else\n                    start = moment(options.ranges[range][0]);\n\n                if (typeof options.ranges[range][1] === 'string')\n                    end = moment(options.ranges[range][1], this.locale.format);\n                else\n                    end = moment(options.ranges[range][1]);\n\n                // If the start or end date exceed those allowed by the minDate or maxSpan\n                // options, shorten the range to the allowable period.\n                if (this.minDate && start.isBefore(this.minDate))\n                    start = this.minDate.clone();\n\n                var maxDate = this.maxDate;\n                if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate))\n                    maxDate = start.clone().add(this.maxSpan);\n                if (maxDate && end.isAfter(maxDate))\n                    end = maxDate.clone();\n\n                // If the end of the range is before the minimum or the start of the range is\n                // after the maximum, don't display this range option at all.\n                if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day'))\n                  || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))\n                    continue;\n\n                //Support unicode chars in the range names.\n                var elem = document.createElement('textarea');\n                elem.innerHTML = range;\n                var rangeHtml = elem.value;\n\n                this.ranges[rangeHtml] = [start, end];\n            }\n\n            var list = '<ul>';\n            for (range in this.ranges) {\n                list += '<li data-range-key=\"' + range + '\">' + range + '</li>';\n            }\n            if (this.showCustomRangeLabel) {\n                list += '<li data-range-key=\"' + this.locale.customRangeLabel + '\">' + this.locale.customRangeLabel + '</li>';\n            }\n            list += '</ul>';\n            this.container.find('.ranges').prepend(list);\n        }\n\n        if (typeof cb === 'function') {\n            this.callback = cb;\n        }\n\n        if (!this.timePicker) {\n            this.startDate = this.startDate.startOf('day');\n            this.endDate = this.endDate.endOf('day');\n            this.container.find('.calendar-time').hide();\n        }\n\n        //can't be used together for now\n        if (this.timePicker && this.autoApply)\n            this.autoApply = false;\n\n        if (this.autoApply) {\n            this.container.addClass('auto-apply');\n        }\n\n        if (typeof options.ranges === 'object')\n            this.container.addClass('show-ranges');\n\n        if (this.singleDatePicker) {\n            this.container.addClass('single');\n            this.container.find('.drp-calendar.left').addClass('single');\n            this.container.find('.drp-calendar.left').show();\n            this.container.find('.drp-calendar.right').hide();\n            if (!this.timePicker) {\n                this.container.addClass('auto-apply');\n            }\n        }\n\n        if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {\n            this.container.addClass('show-calendar');\n        }\n\n        this.container.addClass('opens' + this.opens);\n\n        //apply CSS classes and labels to buttons\n        this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);\n        if (this.applyButtonClasses.length)\n            this.container.find('.applyBtn').addClass(this.applyButtonClasses);\n        if (this.cancelButtonClasses.length)\n            this.container.find('.cancelBtn').addClass(this.cancelButtonClasses);\n        this.container.find('.applyBtn').html(this.locale.applyLabel);\n        this.container.find('.cancelBtn').html(this.locale.cancelLabel);\n\n        //\n        // event listeners\n        //\n\n        this.container.find('.drp-calendar')\n            .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))\n            .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))\n            .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))\n            .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))\n            .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))\n            .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))\n            .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this))\n\n        this.container.find('.ranges')\n            .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this))\n\n        this.container.find('.drp-buttons')\n            .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))\n            .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this))\n\n        if (this.element.is('input') || this.element.is('button')) {\n            this.element.on({\n                'click.daterangepicker': $.proxy(this.show, this),\n                'focus.daterangepicker': $.proxy(this.show, this),\n                'keyup.daterangepicker': $.proxy(this.elementChanged, this),\n                'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility\n            });\n        } else {\n            this.element.on('click.daterangepicker', $.proxy(this.toggle, this));\n            this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this));\n        }\n\n        //\n        // if attached to a text input, set the initial value\n        //\n\n        this.updateElement();\n\n    };\n\n    DateRangePicker.prototype = {\n\n        constructor: DateRangePicker,\n\n        setStartDate: function(startDate) {\n            if (typeof startDate === 'string')\n                this.startDate = moment(startDate, this.locale.format);\n\n            if (typeof startDate === 'object')\n                this.startDate = moment(startDate);\n\n            if (!this.timePicker)\n                this.startDate = this.startDate.startOf('day');\n\n            if (this.timePicker && this.timePickerIncrement)\n                this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n\n            if (this.minDate && this.startDate.isBefore(this.minDate)) {\n                this.startDate = this.minDate.clone();\n                if (this.timePicker && this.timePickerIncrement)\n                    this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n            }\n\n            if (this.maxDate && this.startDate.isAfter(this.maxDate)) {\n                this.startDate = this.maxDate.clone();\n                if (this.timePicker && this.timePickerIncrement)\n                    this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n            }\n\n            if (!this.isShowing)\n                this.updateElement();\n\n            this.updateMonthsInView();\n        },\n\n        setEndDate: function(endDate) {\n            if (typeof endDate === 'string')\n                this.endDate = moment(endDate, this.locale.format);\n\n            if (typeof endDate === 'object')\n                this.endDate = moment(endDate);\n\n            if (!this.timePicker)\n                this.endDate = this.endDate.endOf('day');\n\n            if (this.timePicker && this.timePickerIncrement)\n                this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n\n            if (this.endDate.isBefore(this.startDate))\n                this.endDate = this.startDate.clone();\n\n            if (this.maxDate && this.endDate.isAfter(this.maxDate))\n                this.endDate = this.maxDate.clone();\n\n            if (this.maxSpan && this.startDate.clone().add(this.maxSpan).isBefore(this.endDate))\n                this.endDate = this.startDate.clone().add(this.maxSpan);\n\n            this.previousRightTime = this.endDate.clone();\n\n            this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n\n            if (!this.isShowing)\n                this.updateElement();\n\n            this.updateMonthsInView();\n        },\n\n        isInvalidDate: function() {\n            return false;\n        },\n\n        isCustomDate: function() {\n            return false;\n        },\n\n        updateView: function() {\n            if (this.timePicker) {\n                this.renderTimePicker('left');\n                this.renderTimePicker('right');\n                if (!this.endDate) {\n                    this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled');\n                } else {\n                    this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled');\n                }\n            }\n            if (this.endDate)\n                this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n            this.updateMonthsInView();\n            this.updateCalendars();\n            this.updateFormInputs();\n        },\n\n        updateMonthsInView: function() {\n            if (this.endDate) {\n\n                //if both dates are visible already, do nothing\n                if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&\n                    (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\n                    &&\n                    (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))\n                    ) {\n                    return;\n                }\n\n                this.leftCalendar.month = this.startDate.clone().date(2);\n                if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {\n                    this.rightCalendar.month = this.endDate.clone().date(2);\n                } else {\n                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n                }\n\n            } else {\n                if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {\n                    this.leftCalendar.month = this.startDate.clone().date(2);\n                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\n                }\n            }\n            if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {\n              this.rightCalendar.month = this.maxDate.clone().date(2);\n              this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');\n            }\n        },\n\n        updateCalendars: function() {\n\n            if (this.timePicker) {\n                var hour, minute, second;\n                if (this.endDate) {\n                    hour = parseInt(this.container.find('.left .hourselect').val(), 10);\n                    minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\n                    if (isNaN(minute)) {\n                        minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);\n                    }\n                    second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.left .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                } else {\n                    hour = parseInt(this.container.find('.right .hourselect').val(), 10);\n                    minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\n                    if (isNaN(minute)) {\n                        minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);\n                    }\n                    second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.right .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                }\n                this.leftCalendar.month.hour(hour).minute(minute).second(second);\n                this.rightCalendar.month.hour(hour).minute(minute).second(second);\n            }\n\n            this.renderCalendar('left');\n            this.renderCalendar('right');\n\n            //highlight any predefined range matching the current start and end dates\n            this.container.find('.ranges li').removeClass('active');\n            if (this.endDate == null) return;\n\n            this.calculateChosenLabel();\n        },\n\n        renderCalendar: function(side) {\n\n            //\n            // Build the matrix of dates that will populate the calendar\n            //\n\n            var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;\n            var month = calendar.month.month();\n            var year = calendar.month.year();\n            var hour = calendar.month.hour();\n            var minute = calendar.month.minute();\n            var second = calendar.month.second();\n            var daysInMonth = moment([year, month]).daysInMonth();\n            var firstDay = moment([year, month, 1]);\n            var lastDay = moment([year, month, daysInMonth]);\n            var lastMonth = moment(firstDay).subtract(1, 'month').month();\n            var lastYear = moment(firstDay).subtract(1, 'month').year();\n            var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();\n            var dayOfWeek = firstDay.day();\n\n            //initialize a 6 rows x 7 columns array for the calendar\n            var calendar = [];\n            calendar.firstDay = firstDay;\n            calendar.lastDay = lastDay;\n\n            for (var i = 0; i < 6; i++) {\n                calendar[i] = [];\n            }\n\n            //populate the calendar with date objects\n            var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\n            if (startDay > daysInLastMonth)\n                startDay -= 7;\n\n            if (dayOfWeek == this.locale.firstDay)\n                startDay = daysInLastMonth - 6;\n\n            var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);\n\n            var col, row;\n            for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {\n                if (i > 0 && col % 7 === 0) {\n                    col = 0;\n                    row++;\n                }\n                calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\n                curDate.hour(12);\n\n                if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {\n                    calendar[row][col] = this.minDate.clone();\n                }\n\n                if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {\n                    calendar[row][col] = this.maxDate.clone();\n                }\n\n            }\n\n            //make the calendar object available to hoverDate/clickDate\n            if (side == 'left') {\n                this.leftCalendar.calendar = calendar;\n            } else {\n                this.rightCalendar.calendar = calendar;\n            }\n\n            //\n            // Display the calendar\n            //\n\n            var minDate = side == 'left' ? this.minDate : this.startDate;\n            var maxDate = this.maxDate;\n            var selected = side == 'left' ? this.startDate : this.endDate;\n            var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'};\n\n            var html = '<table class=\"table-condensed\">';\n            html += '<thead>';\n            html += '<tr>';\n\n            // add empty cell for week number\n            if (this.showWeekNumbers || this.showISOWeekNumbers)\n                html += '<th></th>';\n\n            if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {\n                html += '<th class=\"prev available\"><span></span></th>';\n            } else {\n                html += '<th></th>';\n            }\n\n            var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(\" YYYY\");\n\n            if (this.showDropdowns) {\n                var currentMonth = calendar[1][1].month();\n                var currentYear = calendar[1][1].year();\n                var maxYear = (maxDate && maxDate.year()) || (this.maxYear);\n                var minYear = (minDate && minDate.year()) || (this.minYear);\n                var inMinYear = currentYear == minYear;\n                var inMaxYear = currentYear == maxYear;\n\n                var monthHtml = '<select class=\"monthselect\">';\n                for (var m = 0; m < 12; m++) {\n                    if ((!inMinYear || (minDate && m >= minDate.month())) && (!inMaxYear || (maxDate && m <= maxDate.month()))) {\n                        monthHtml += \"<option value='\" + m + \"'\" +\n                            (m === currentMonth ? \" selected='selected'\" : \"\") +\n                            \">\" + this.locale.monthNames[m] + \"</option>\";\n                    } else {\n                        monthHtml += \"<option value='\" + m + \"'\" +\n                            (m === currentMonth ? \" selected='selected'\" : \"\") +\n                            \" disabled='disabled'>\" + this.locale.monthNames[m] + \"</option>\";\n                    }\n                }\n                monthHtml += \"</select>\";\n\n                var yearHtml = '<select class=\"yearselect\">';\n                for (var y = minYear; y <= maxYear; y++) {\n                    yearHtml += '<option value=\"' + y + '\"' +\n                        (y === currentYear ? ' selected=\"selected\"' : '') +\n                        '>' + y + '</option>';\n                }\n                yearHtml += '</select>';\n\n                dateHtml = monthHtml + yearHtml;\n            }\n\n            html += '<th colspan=\"5\" class=\"month\">' + dateHtml + '</th>';\n            if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {\n                html += '<th class=\"next available\"><span></span></th>';\n            } else {\n                html += '<th></th>';\n            }\n\n            html += '</tr>';\n            html += '<tr>';\n\n            // add week number label\n            if (this.showWeekNumbers || this.showISOWeekNumbers)\n                html += '<th class=\"week\">' + this.locale.weekLabel + '</th>';\n\n            $.each(this.locale.daysOfWeek, function(index, dayOfWeek) {\n                html += '<th>' + dayOfWeek + '</th>';\n            });\n\n            html += '</tr>';\n            html += '</thead>';\n            html += '<tbody>';\n\n            //adjust maxDate to reflect the maxSpan setting in order to\n            //grey out end dates beyond the maxSpan\n            if (this.endDate == null && this.maxSpan) {\n                var maxLimit = this.startDate.clone().add(this.maxSpan).endOf('day');\n                if (!maxDate || maxLimit.isBefore(maxDate)) {\n                    maxDate = maxLimit;\n                }\n            }\n\n            for (var row = 0; row < 6; row++) {\n                html += '<tr>';\n\n                // add week number\n                if (this.showWeekNumbers)\n                    html += '<td class=\"week\">' + calendar[row][0].week() + '</td>';\n                else if (this.showISOWeekNumbers)\n                    html += '<td class=\"week\">' + calendar[row][0].isoWeek() + '</td>';\n\n                for (var col = 0; col < 7; col++) {\n\n                    var classes = [];\n\n                    //highlight today's date\n                    if (calendar[row][col].isSame(new Date(), \"day\"))\n                        classes.push('today');\n\n                    //highlight weekends\n                    if (calendar[row][col].isoWeekday() > 5)\n                        classes.push('weekend');\n\n                    //grey out the dates in other months displayed at beginning and end of this calendar\n                    if (calendar[row][col].month() != calendar[1][1].month())\n                        classes.push('off', 'ends');\n\n                    //don't allow selection of dates before the minimum date\n                    if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))\n                        classes.push('off', 'disabled');\n\n                    //don't allow selection of dates after the maximum date\n                    if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))\n                        classes.push('off', 'disabled');\n\n                    //don't allow selection of date if a custom function decides it's invalid\n                    if (this.isInvalidDate(calendar[row][col]))\n                        classes.push('off', 'disabled');\n\n                    //highlight the currently selected start date\n                    if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))\n                        classes.push('active', 'start-date');\n\n                    //highlight the currently selected end date\n                    if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))\n                        classes.push('active', 'end-date');\n\n                    //highlight dates in-between the selected dates\n                    if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)\n                        classes.push('in-range');\n\n                    //apply custom classes for this date\n                    var isCustom = this.isCustomDate(calendar[row][col]);\n                    if (isCustom !== false) {\n                        if (typeof isCustom === 'string')\n                            classes.push(isCustom);\n                        else\n                            Array.prototype.push.apply(classes, isCustom);\n                    }\n\n                    var cname = '', disabled = false;\n                    for (var i = 0; i < classes.length; i++) {\n                        cname += classes[i] + ' ';\n                        if (classes[i] == 'disabled')\n                            disabled = true;\n                    }\n                    if (!disabled)\n                        cname += 'available';\n\n                    html += '<td class=\"' + cname.replace(/^\\s+|\\s+$/g, '') + '\" data-title=\"' + 'r' + row + 'c' + col + '\">' + calendar[row][col].date() + '</td>';\n\n                }\n                html += '</tr>';\n            }\n\n            html += '</tbody>';\n            html += '</table>';\n\n            this.container.find('.drp-calendar.' + side + ' .calendar-table').html(html);\n\n        },\n\n        renderTimePicker: function(side) {\n\n            // Don't bother updating the time picker if it's currently disabled\n            // because an end date hasn't been clicked yet\n            if (side == 'right' && !this.endDate) return;\n\n            var html, selected, minDate, maxDate = this.maxDate;\n\n            if (this.maxSpan && (!this.maxDate || this.startDate.clone().add(this.maxSpan).isBefore(this.maxDate)))\n                maxDate = this.startDate.clone().add(this.maxSpan);\n\n            if (side == 'left') {\n                selected = this.startDate.clone();\n                minDate = this.minDate;\n            } else if (side == 'right') {\n                selected = this.endDate.clone();\n                minDate = this.startDate;\n\n                //Preserve the time already selected\n                var timeSelector = this.container.find('.drp-calendar.right .calendar-time');\n                if (timeSelector.html() != '') {\n\n                    selected.hour(!isNaN(selected.hour()) ? selected.hour() : timeSelector.find('.hourselect option:selected').val());\n                    selected.minute(!isNaN(selected.minute()) ? selected.minute() : timeSelector.find('.minuteselect option:selected').val());\n                    selected.second(!isNaN(selected.second()) ? selected.second() : timeSelector.find('.secondselect option:selected').val());\n\n                    if (!this.timePicker24Hour) {\n                        var ampm = timeSelector.find('.ampmselect option:selected').val();\n                        if (ampm === 'PM' && selected.hour() < 12)\n                            selected.hour(selected.hour() + 12);\n                        if (ampm === 'AM' && selected.hour() === 12)\n                            selected.hour(0);\n                    }\n\n                }\n\n                if (selected.isBefore(this.startDate))\n                    selected = this.startDate.clone();\n\n                if (maxDate && selected.isAfter(maxDate))\n                    selected = maxDate.clone();\n\n            }\n\n            //\n            // hours\n            //\n\n            html = '<select class=\"hourselect\">';\n\n            var start = this.timePicker24Hour ? 0 : 1;\n            var end = this.timePicker24Hour ? 23 : 12;\n\n            for (var i = start; i <= end; i++) {\n                var i_in_24 = i;\n                if (!this.timePicker24Hour)\n                    i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i);\n\n                var time = selected.clone().hour(i_in_24);\n                var disabled = false;\n                if (minDate && time.minute(59).isBefore(minDate))\n                    disabled = true;\n                if (maxDate && time.minute(0).isAfter(maxDate))\n                    disabled = true;\n\n                if (i_in_24 == selected.hour() && !disabled) {\n                    html += '<option value=\"' + i + '\" selected=\"selected\">' + i + '</option>';\n                } else if (disabled) {\n                    html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + i + '</option>';\n                } else {\n                    html += '<option value=\"' + i + '\">' + i + '</option>';\n                }\n            }\n\n            html += '</select> ';\n\n            //\n            // minutes\n            //\n\n            html += ': <select class=\"minuteselect\">';\n\n            for (var i = 0; i < 60; i += this.timePickerIncrement) {\n                var padded = i < 10 ? '0' + i : i;\n                var time = selected.clone().minute(i);\n\n                var disabled = false;\n                if (minDate && time.second(59).isBefore(minDate))\n                    disabled = true;\n                if (maxDate && time.second(0).isAfter(maxDate))\n                    disabled = true;\n\n                if (selected.minute() == i && !disabled) {\n                    html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\n                } else if (disabled) {\n                    html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\n                } else {\n                    html += '<option value=\"' + i + '\">' + padded + '</option>';\n                }\n            }\n\n            html += '</select> ';\n\n            //\n            // seconds\n            //\n\n            if (this.timePickerSeconds) {\n                html += ': <select class=\"secondselect\">';\n\n                for (var i = 0; i < 60; i++) {\n                    var padded = i < 10 ? '0' + i : i;\n                    var time = selected.clone().second(i);\n\n                    var disabled = false;\n                    if (minDate && time.isBefore(minDate))\n                        disabled = true;\n                    if (maxDate && time.isAfter(maxDate))\n                        disabled = true;\n\n                    if (selected.second() == i && !disabled) {\n                        html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + '</option>';\n                    } else if (disabled) {\n                        html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + '</option>';\n                    } else {\n                        html += '<option value=\"' + i + '\">' + padded + '</option>';\n                    }\n                }\n\n                html += '</select> ';\n            }\n\n            //\n            // AM/PM\n            //\n\n            if (!this.timePicker24Hour) {\n                html += '<select class=\"ampmselect\">';\n\n                var am_html = '';\n                var pm_html = '';\n\n                if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))\n                    am_html = ' disabled=\"disabled\" class=\"disabled\"';\n\n                if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))\n                    pm_html = ' disabled=\"disabled\" class=\"disabled\"';\n\n                if (selected.hour() >= 12) {\n                    html += '<option value=\"AM\"' + am_html + '>AM</option><option value=\"PM\" selected=\"selected\"' + pm_html + '>PM</option>';\n                } else {\n                    html += '<option value=\"AM\" selected=\"selected\"' + am_html + '>AM</option><option value=\"PM\"' + pm_html + '>PM</option>';\n                }\n\n                html += '</select>';\n            }\n\n            this.container.find('.drp-calendar.' + side + ' .calendar-time').html(html);\n\n        },\n\n        updateFormInputs: function() {\n\n            if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {\n                this.container.find('button.applyBtn').removeAttr('disabled');\n            } else {\n                this.container.find('button.applyBtn').attr('disabled', 'disabled');\n            }\n\n        },\n\n        move: function() {\n            var parentOffset = { top: 0, left: 0 },\n                containerTop;\n            var parentRightEdge = $(window).width();\n            if (!this.parentEl.is('body')) {\n                parentOffset = {\n                    top: this.parentEl.offset().top - this.parentEl.scrollTop(),\n                    left: this.parentEl.offset().left - this.parentEl.scrollLeft()\n                };\n                parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;\n            }\n\n            if (this.drops == 'up')\n                containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\n            else\n                containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\n\n            // Force the container to it's actual width\n            this.container.css({\n              top: 0,\n              left: 0,\n              right: 'auto'\n            });\n            var containerWidth = this.container.outerWidth();\n\n            this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('drop-up');\n\n            if (this.opens == 'left') {\n                var containerRight = parentRightEdge - this.element.offset().left - this.element.outerWidth();\n                if (containerWidth + containerRight > $(window).width()) {\n                    this.container.css({\n                        top: containerTop,\n                        right: 'auto',\n                        left: 9\n                    });\n                } else {\n                    this.container.css({\n                        top: containerTop,\n                        right: containerRight,\n                        left: 'auto'\n                    });\n                }\n            } else if (this.opens == 'center') {\n                var containerLeft = this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2\n                                        - containerWidth / 2;\n                if (containerLeft < 0) {\n                    this.container.css({\n                        top: containerTop,\n                        right: 'auto',\n                        left: 9\n                    });\n                } else if (containerLeft + containerWidth > $(window).width()) {\n                    this.container.css({\n                        top: containerTop,\n                        left: 'auto',\n                        right: 0\n                    });\n                } else {\n                    this.container.css({\n                        top: containerTop,\n                        left: containerLeft,\n                        right: 'auto'\n                    });\n                }\n            } else {\n                var containerLeft = this.element.offset().left - parentOffset.left;\n                if (containerLeft + containerWidth > $(window).width()) {\n                    this.container.css({\n                        top: containerTop,\n                        left: 'auto',\n                        right: 0\n                    });\n                } else {\n                    this.container.css({\n                        top: containerTop,\n                        left: containerLeft,\n                        right: 'auto'\n                    });\n                }\n            }\n        },\n\n        show: function(e) {\n            if (this.isShowing) return;\n\n            // Create a click proxy that is private to this instance of datepicker, for unbinding\n            this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this);\n\n            // Bind global datepicker mousedown for hiding and\n            $(document)\n              .on('mousedown.daterangepicker', this._outsideClickProxy)\n              // also support mobile devices\n              .on('touchend.daterangepicker', this._outsideClickProxy)\n              // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them\n              .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)\n              // and also close when focus changes to outside the picker (eg. tabbing between controls)\n              .on('focusin.daterangepicker', this._outsideClickProxy);\n\n            // Reposition the picker if the window is resized while it's open\n            $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this));\n\n            this.oldStartDate = this.startDate.clone();\n            this.oldEndDate = this.endDate.clone();\n            this.previousRightTime = this.endDate.clone();\n\n            this.updateView();\n            this.container.show();\n            this.move();\n            this.element.trigger('show.daterangepicker', this);\n            this.isShowing = true;\n        },\n\n        hide: function(e) {\n            if (!this.isShowing) return;\n\n            //incomplete date selection, revert to last values\n            if (!this.endDate) {\n                this.startDate = this.oldStartDate.clone();\n                this.endDate = this.oldEndDate.clone();\n            }\n\n            //if a new date range was selected, invoke the user callback function\n            if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))\n                this.callback(this.startDate.clone(), this.endDate.clone(), this.chosenLabel);\n\n            //if picker is attached to a text input, update it\n            this.updateElement();\n\n            $(document).off('.daterangepicker');\n            $(window).off('.daterangepicker');\n            this.container.hide();\n            this.element.trigger('hide.daterangepicker', this);\n            this.isShowing = false;\n        },\n\n        toggle: function(e) {\n            if (this.isShowing) {\n                this.hide();\n            } else {\n                this.show();\n            }\n        },\n\n        outsideClick: function(e) {\n            var target = $(e.target);\n            // if the page is clicked anywhere except within the daterangerpicker/button\n            // itself then call this.hide()\n            if (\n                // ie modal dialog fix\n                e.type == \"focusin\" ||\n                target.closest(this.element).length ||\n                target.closest(this.container).length ||\n                target.closest('.calendar-table').length\n                ) return;\n            this.hide();\n            this.element.trigger('outsideClick.daterangepicker', this);\n        },\n\n        showCalendars: function() {\n            this.container.addClass('show-calendar');\n            this.move();\n            this.element.trigger('showCalendar.daterangepicker', this);\n        },\n\n        hideCalendars: function() {\n            this.container.removeClass('show-calendar');\n            this.element.trigger('hideCalendar.daterangepicker', this);\n        },\n\n        clickRange: function(e) {\n            var label = e.target.getAttribute('data-range-key');\n            this.chosenLabel = label;\n            if (label == this.locale.customRangeLabel) {\n                this.showCalendars();\n            } else {\n                var dates = this.ranges[label];\n                this.startDate = dates[0];\n                this.endDate = dates[1];\n\n                if (!this.timePicker) {\n                    this.startDate.startOf('day');\n                    this.endDate.endOf('day');\n                }\n\n                if (!this.alwaysShowCalendars)\n                    this.hideCalendars();\n                this.clickApply();\n            }\n        },\n\n        clickPrev: function(e) {\n            var cal = $(e.target).parents('.drp-calendar');\n            if (cal.hasClass('left')) {\n                this.leftCalendar.month.subtract(1, 'month');\n                if (this.linkedCalendars)\n                    this.rightCalendar.month.subtract(1, 'month');\n            } else {\n                this.rightCalendar.month.subtract(1, 'month');\n            }\n            this.updateCalendars();\n        },\n\n        clickNext: function(e) {\n            var cal = $(e.target).parents('.drp-calendar');\n            if (cal.hasClass('left')) {\n                this.leftCalendar.month.add(1, 'month');\n            } else {\n                this.rightCalendar.month.add(1, 'month');\n                if (this.linkedCalendars)\n                    this.leftCalendar.month.add(1, 'month');\n            }\n            this.updateCalendars();\n        },\n\n        hoverDate: function(e) {\n\n            //ignore dates that can't be selected\n            if (!$(e.target).hasClass('available')) return;\n\n            var title = $(e.target).attr('data-title');\n            var row = title.substr(1, 1);\n            var col = title.substr(3, 1);\n            var cal = $(e.target).parents('.drp-calendar');\n            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n\n            //highlight the dates between the start date and the date being hovered as a potential end date\n            var leftCalendar = this.leftCalendar;\n            var rightCalendar = this.rightCalendar;\n            var startDate = this.startDate;\n            if (!this.endDate) {\n                this.container.find('.drp-calendar tbody td').each(function(index, el) {\n\n                    //skip week numbers, only look at dates\n                    if ($(el).hasClass('week')) return;\n\n                    var title = $(el).attr('data-title');\n                    var row = title.substr(1, 1);\n                    var col = title.substr(3, 1);\n                    var cal = $(el).parents('.drp-calendar');\n                    var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];\n\n                    if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {\n                        $(el).addClass('in-range');\n                    } else {\n                        $(el).removeClass('in-range');\n                    }\n\n                });\n            }\n\n        },\n\n        clickDate: function(e) {\n\n            if (!$(e.target).hasClass('available')) return;\n\n            var title = $(e.target).attr('data-title');\n            var row = title.substr(1, 1);\n            var col = title.substr(3, 1);\n            var cal = $(e.target).parents('.drp-calendar');\n            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n\n            //\n            // this function needs to do a few things:\n            // * alternate between selecting a start and end date for the range,\n            // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date\n            // * if autoapply is enabled, and an end date was chosen, apply the selection\n            // * if single date picker mode, and time picker isn't enabled, apply the selection immediately\n            // * if one of the inputs above the calendars was focused, cancel that manual input\n            //\n\n            if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start\n                if (this.timePicker) {\n                    var hour = parseInt(this.container.find('.left .hourselect').val(), 10);\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.left .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                    var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);\n                    if (isNaN(minute)) {\n                        minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);\n                    }\n                    var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;\n                    date = date.clone().hour(hour).minute(minute).second(second);\n                }\n                this.endDate = null;\n                this.setStartDate(date.clone());\n            } else if (!this.endDate && date.isBefore(this.startDate)) {\n                //special case: clicking the same date for start/end,\n                //but the time of the end date is before the start date\n                this.setEndDate(this.startDate.clone());\n            } else { // picking end\n                if (this.timePicker) {\n                    var hour = parseInt(this.container.find('.right .hourselect').val(), 10);\n                    if (!this.timePicker24Hour) {\n                        var ampm = this.container.find('.right .ampmselect').val();\n                        if (ampm === 'PM' && hour < 12)\n                            hour += 12;\n                        if (ampm === 'AM' && hour === 12)\n                            hour = 0;\n                    }\n                    var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);\n                    if (isNaN(minute)) {\n                        minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);\n                    }\n                    var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;\n                    date = date.clone().hour(hour).minute(minute).second(second);\n                }\n                this.setEndDate(date.clone());\n                if (this.autoApply) {\n                  this.calculateChosenLabel();\n                  this.clickApply();\n                }\n            }\n\n            if (this.singleDatePicker) {\n                this.setEndDate(this.startDate);\n                if (!this.timePicker)\n                    this.clickApply();\n            }\n\n            this.updateView();\n\n            //This is to cancel the blur event handler if the mouse was in one of the inputs\n            e.stopPropagation();\n\n        },\n\n        calculateChosenLabel: function () {\n            var customRange = true;\n            var i = 0;\n            for (var range in this.ranges) {\n              if (this.timePicker) {\n                    var format = this.timePickerSeconds ? \"YYYY-MM-DD HH:mm:ss\" : \"YYYY-MM-DD HH:mm\";\n                    //ignore times when comparing dates if time picker seconds is not enabled\n                    if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) {\n                        customRange = false;\n                        this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');\n                        break;\n                    }\n                } else {\n                    //ignore times when comparing dates if time picker is not enabled\n                    if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {\n                        customRange = false;\n                        this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');\n                        break;\n                    }\n                }\n                i++;\n            }\n            if (customRange) {\n                if (this.showCustomRangeLabel) {\n                    this.chosenLabel = this.container.find('.ranges li:last').addClass('active').attr('data-range-key');\n                } else {\n                    this.chosenLabel = null;\n                }\n                this.showCalendars();\n            }\n        },\n\n        clickApply: function(e) {\n            this.hide();\n            this.element.trigger('apply.daterangepicker', this);\n        },\n\n        clickCancel: function(e) {\n            this.startDate = this.oldStartDate;\n            this.endDate = this.oldEndDate;\n            this.hide();\n            this.element.trigger('cancel.daterangepicker', this);\n        },\n\n        monthOrYearChanged: function(e) {\n            var isLeft = $(e.target).closest('.drp-calendar').hasClass('left'),\n                leftOrRight = isLeft ? 'left' : 'right',\n                cal = this.container.find('.drp-calendar.'+leftOrRight);\n\n            // Month must be Number for new moment versions\n            var month = parseInt(cal.find('.monthselect').val(), 10);\n            var year = cal.find('.yearselect').val();\n\n            if (!isLeft) {\n                if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {\n                    month = this.startDate.month();\n                    year = this.startDate.year();\n                }\n            }\n\n            if (this.minDate) {\n                if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {\n                    month = this.minDate.month();\n                    year = this.minDate.year();\n                }\n            }\n\n            if (this.maxDate) {\n                if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {\n                    month = this.maxDate.month();\n                    year = this.maxDate.year();\n                }\n            }\n\n            if (isLeft) {\n                this.leftCalendar.month.month(month).year(year);\n                if (this.linkedCalendars)\n                    this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');\n            } else {\n                this.rightCalendar.month.month(month).year(year);\n                if (this.linkedCalendars)\n                    this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');\n            }\n            this.updateCalendars();\n        },\n\n        timeChanged: function(e) {\n\n            var cal = $(e.target).closest('.drp-calendar'),\n                isLeft = cal.hasClass('left');\n\n            var hour = parseInt(cal.find('.hourselect').val(), 10);\n            var minute = parseInt(cal.find('.minuteselect').val(), 10);\n            if (isNaN(minute)) {\n                minute = parseInt(cal.find('.minuteselect option:last').val(), 10);\n            }\n            var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;\n\n            if (!this.timePicker24Hour) {\n                var ampm = cal.find('.ampmselect').val();\n                if (ampm === 'PM' && hour < 12)\n                    hour += 12;\n                if (ampm === 'AM' && hour === 12)\n                    hour = 0;\n            }\n\n            if (isLeft) {\n                var start = this.startDate.clone();\n                start.hour(hour);\n                start.minute(minute);\n                start.second(second);\n                this.setStartDate(start);\n                if (this.singleDatePicker) {\n                    this.endDate = this.startDate.clone();\n                } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {\n                    this.setEndDate(start.clone());\n                }\n            } else if (this.endDate) {\n                var end = this.endDate.clone();\n                end.hour(hour);\n                end.minute(minute);\n                end.second(second);\n                this.setEndDate(end);\n            }\n\n            //update the calendars so all clickable dates reflect the new time component\n            this.updateCalendars();\n\n            //update the form inputs above the calendars with the new time\n            this.updateFormInputs();\n\n            //re-render the time pickers because changing one selection can affect what's enabled in another\n            this.renderTimePicker('left');\n            this.renderTimePicker('right');\n\n        },\n\n        elementChanged: function() {\n            if (!this.element.is('input')) return;\n            if (!this.element.val().length) return;\n\n            var dateString = this.element.val().split(this.locale.separator),\n                start = null,\n                end = null;\n\n            if (dateString.length === 2) {\n                start = moment(dateString[0], this.locale.format);\n                end = moment(dateString[1], this.locale.format);\n            }\n\n            if (this.singleDatePicker || start === null || end === null) {\n                start = moment(this.element.val(), this.locale.format);\n                end = start;\n            }\n\n            if (!start.isValid() || !end.isValid()) return;\n\n            this.setStartDate(start);\n            this.setEndDate(end);\n            this.updateView();\n        },\n\n        keydown: function(e) {\n            //hide on tab or enter\n            if ((e.keyCode === 9) || (e.keyCode === 13)) {\n                this.hide();\n            }\n\n            //hide on esc and prevent propagation\n            if (e.keyCode === 27) {\n                e.preventDefault();\n                e.stopPropagation();\n\n                this.hide();\n            }\n        },\n\n        updateElement: function() {\n            if (this.element.is('input') && this.autoUpdateInput) {\n                var newValue = this.startDate.format(this.locale.format);\n                if (!this.singleDatePicker) {\n                    newValue += this.locale.separator + this.endDate.format(this.locale.format);\n                }\n                if (newValue !== this.element.val()) {\n                    this.element.val(newValue).trigger('change');\n                }\n            }\n        },\n\n        remove: function() {\n            this.container.remove();\n            this.element.off('.daterangepicker');\n            this.element.removeData();\n        }\n\n    };\n\n    $.fn.daterangepicker = function(options, callback) {\n        var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options);\n        this.each(function() {\n            var el = $(this);\n            if (el.data('daterangepicker'))\n                el.data('daterangepicker').remove();\n            el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback));\n        });\n        return this;\n    };\n\n    return DateRangePicker;\n\n}));\n"
  },
  {
    "path": "modules/backend/behaviors/FormController.php",
    "content": "<?php namespace Backend\\Behaviors;\n\nuse Str;\nuse App;\nuse Lang;\nuse Flash;\nuse Event;\nuse Redirect;\nuse Backend;\nuse BackendAuth;\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\ControllerBehavior;\nuse October\\Rain\\Router\\Helper as RouterHelper;\nuse ApplicationException;\nuse ForbiddenException;\nuse Exception;\n\n/**\n * FormController adds features for working with backend forms. This behavior will inject\n * CRUD actions to the controller -- including create, update and preview -- along with\n * some relevant AJAX handlers.\n *\n * Each action supports a custom context code, allowing fields to be displayed or hidden\n * on a contextual basis, as specified by the form field definitions or some other\n * custom logic.\n *\n * This behavior is implemented in the controller like so:\n *\n *     public $implement = [\n *         \\Backend\\Behaviors\\FormController::class,\n *     ];\n *\n *     public $formConfig = 'config_form.yaml';\n *\n * The `$formConfig` property makes reference to the form configuration\n * values as either a YAML file, located in the controller view directory,\n * or directly as a PHP array.\n *\n * @see https://docs.octobercms.com/4.x/extend/forms/form-controller.html Form Controller Documentation\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FormController extends ControllerBehavior\n{\n    use \\Backend\\Traits\\FormModelSaver;\n    use \\Backend\\Behaviors\\FormController\\HasMultisite;\n    use \\Backend\\Behaviors\\FormController\\HasMultisiteGroup;\n    use \\Backend\\Behaviors\\FormController\\HasOverrides;\n    use \\Backend\\Behaviors\\FormController\\HasFormDesigns;\n    use \\Backend\\Behaviors\\FormController\\HasRenderers;\n\n    /**\n     * @var \\Backend\\Classes\\Controller|FormController controller reference\n     */\n    protected $controller;\n\n    /**\n     * @var \\Backend\\Widgets\\Form formWidget object\n     */\n    protected $formWidget;\n\n    /**\n     * @inheritDoc\n     */\n    protected $requiredProperties = ['formConfig'];\n\n    /**\n     * @var array requiredConfig that must exist when applying the primary config file\n     */\n    protected $requiredConfig = ['modelClass', 'form'];\n\n    /**\n     * @var array actions visible in context of the controller\n     */\n    protected $actions = ['create', 'update', 'preview'];\n\n    /**\n     * @var string context to pass to the form widget\n     */\n    protected $context;\n\n    /**\n     * @var Model model used by the form\n     */\n    protected $model;\n\n    /**\n     * @var array customMessages contains default messages that you can override\n     */\n    protected $customMessages = [\n        'notFound' => \"Form record with an ID of :id could not be found.\",\n        'flashCreate' => \":name Created\",\n        'flashUpdate' => \":name Updated\",\n        'flashDelete' => \":name Deleted\",\n    ];\n\n    /**\n     * __construct the behavior\n     * @param Backend\\Classes\\Controller $controller\n     */\n    public function __construct($controller)\n    {\n        parent::__construct($controller);\n\n        // Build configuration\n        $this->setConfig($controller->formConfig, $this->requiredConfig);\n\n        if (!$this->isPopupDesign()) {\n            $this->hidePopupDesign();\n        }\n    }\n\n    /**\n     * beforeDisplay fires before the page is displayed and AJAX is executed.\n     */\n    public function beforeDisplay()\n    {\n        if ($this->isPopupDesign()) {\n            $this->beforeDisplayPopup();\n        }\n    }\n\n    /**\n     * initForm initializes the form configuration against a model and context value.\n     * This will process the configuration found in the `$formConfig` property\n     * and prepare the Form widget, which is the underlying tool used for\n     * actually rendering the form. The model used by this form is passed\n     * to this behavior via this method as the first argument.\n     *\n     * @see Backend\\Widgets\\Form\n     * @param October\\Rain\\Database\\Model $model\n     * @param string $context Form context\n     * @return void\n     */\n    public function initForm($model, $context = null)\n    {\n        if ($context !== null) {\n            $this->context = $context;\n        }\n\n        $context = $this->formGetContext();\n        $formConfig = $this->config = $this->controller->formGetConfig();\n\n        // Each page can supply a unique form definition, if desired\n        $formFields = $this->getConfig(\"{$context}[form]\", $formConfig->form);\n\n        $config = $this->makeConfig($formFields);\n        $config->model = $model;\n        $config->arrayName = class_basename($model);\n        $config->context = $this->getConfig(\"{$context}[context]\", $context);\n        $config->surveyMode = $this->isSurveyDesign();\n        $config->sessionKey = post('_form_session_key');\n        $config->horizontalMode = $this->isHorizontalForm();\n\n        // Make Form Widget and apply extensions\n        $this->formWidget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $config);\n\n        // Setup the default preview mode on form initialization if the context is preview\n        if ($config->context === 'preview') {\n            $this->formWidget->previewMode = true;\n        }\n\n        $this->formWidget->bindEvent('form.extendFieldsBefore', function () {\n            $this->controller->formExtendFieldsBefore($this->formWidget);\n        });\n\n        $this->formWidget->bindEvent('form.extendFields', function ($fields) {\n            $this->controller->formExtendFields($this->formWidget, $fields);\n        });\n\n        $this->formWidget->bindEvent('form.beforeRefresh', function ($holder) {\n            $result = $this->controller->formExtendRefreshData($this->formWidget, $holder->data);\n            if (is_array($result)) {\n                $holder->data = $result;\n            }\n        });\n\n        $this->formWidget->bindEvent('form.refreshFields', function ($fields) {\n            return $this->controller->formExtendRefreshFields($this->formWidget, $fields);\n        });\n\n        $this->formWidget->bindEvent('form.refresh', function ($result) {\n            return $this->controller->formExtendRefreshResults($this->formWidget, $result);\n        });\n\n        $this->formWidget->bindToController();\n\n        // Detected Relation controller behavior\n        if ($this->controller->isClassExtendedWith(\\Backend\\Behaviors\\RelationController::class)) {\n            $this->controller->initRelation($model);\n        }\n\n        $this->prepareVars($model);\n        $this->model = $model;\n    }\n\n    /**\n     * Prepares commonly used view data.\n     * @param October\\Rain\\Database\\Model $model\n     */\n    protected function prepareVars($model)\n    {\n        $this->controller->vars['formModel'] = $model;\n        $this->controller->vars['formContext'] = $this->formGetContext();\n        $this->controller->vars['formRecordName'] = Lang::get($this->getConfig('name', 'backend::lang.model.name'));\n        $this->controller->vars['formSidebarWidth'] = $this->getDesignFormSize('sidebarSize');\n    }\n\n    //\n    // Create\n    //\n\n    /**\n     * create controller action used for creating new model records.\n     *\n     * @param string $context Form context\n     * @return void\n     */\n    public function create($context = null)\n    {\n        if (!$this->controller->formCheckPermission('modelCreate')) {\n            throw new ForbiddenException;\n        }\n\n        try {\n            $this->context = $context ?: $this->getConfig('create[context]', FormField::CONTEXT_CREATE);\n            $this->controller->bodyClass ??= $this->getDesignBodyClass();\n            $this->controller->pageSize ??= $this->getDesignFormSize();\n            $this->controller->pageTitle ??= $this->getLang('create[title]', 'backend::lang.form.create_title');\n\n            $model = $this->controller->formCreateModelObject();\n            $model = $this->controller->formExtendModel($model) ?: $model;\n\n            $this->initForm($model);\n        }\n        catch (Exception $ex) {\n            $this->controller->handleError($ex);\n        }\n    }\n\n    /**\n     * create_onSave AJAX handler called from the create action and\n     * primarily used for creating new records.\n     *\n     * This handler will invoke the unique controller overrides\n     * `formBeforeCreate` and `formAfterCreate`.\n     *\n     * @param string $context Form context\n     * @return mixed\n     */\n    public function create_onSave($context = null)\n    {\n        if (!$this->controller->formCheckPermission('modelCreate')) {\n            throw new ForbiddenException;\n        }\n\n        $this->context = $context ?: $this->getConfig('create[context]', FormField::CONTEXT_CREATE);\n\n        $model = $this->controller->formCreateModelObject();\n        $model = $this->controller->formExtendModel($model) ?: $model;\n\n        $this->initForm($model);\n\n        $this->controller->formBeforeSave($model);\n        $this->controller->formBeforeCreate($model);\n        $this->controller->fireSystemEvent('backend.form.beforeSave', [$model]);\n        $this->controller->fireSystemEvent('backend.form.beforeCreate', [$model]);\n\n        $this->performSaveOnModel(\n            $model,\n            $this->formWidget->getSaveData(),\n            ['sessionKey' => $this->formWidget->getSessionKey(), 'propagate' => true]\n        );\n\n        $this->controller->formAfterSave($model);\n        $this->controller->formAfterCreate($model);\n        $this->controller->fireSystemEvent('backend.form.afterSave', [$model]);\n        $this->controller->fireSystemEvent('backend.form.afterCreate', [$model]);\n\n        Flash::success($this->getCustomLang('flashCreate'));\n\n        if ($redirect = $this->makeRedirect('create', $model)) {\n            return $redirect;\n        }\n    }\n\n    /**\n     * create_onCancel AJAX handler called from the create action and\n     * used for aborting record creation\n     *\n     * This handler will invoke the unique controller override\n     * `formAfterCancel`.\n     *\n     * @return mixed\n     */\n    public function create_onCancel($context = null)\n    {\n        $this->context = $context ?: $this->getConfig('create[context]', FormField::CONTEXT_CREATE);\n\n        $model = $this->controller->formCreateModelObject();\n        $model = $this->controller->formExtendModel($model) ?: $model;\n\n        $this->initForm($model);\n\n        $model->cancelDeferred($this->formWidget->getSessionKey());\n\n        $this->controller->formAfterCancel($model);\n        $this->controller->fireSystemEvent('backend.form.afterCancel', [$model]);\n\n        if ($redirect = $this->makeRedirect('cancel')) {\n            return $redirect;\n        }\n    }\n\n    //\n    // Update\n    //\n\n    /**\n     * update controller action used for updating existing model records.\n     * This action takes a record identifier (primary key of the model)\n     * to locate the record used for sourcing the existing form values.\n     *\n     * @param int $recordId Record identifier\n     * @param string $context Form context\n     * @return void\n     */\n    public function update($recordId = null, $context = null)\n    {\n        if (!$this->controller->formCheckPermission('modelUpdate')) {\n            throw new ForbiddenException;\n        }\n\n        try {\n            $this->context = $context ?: $this->getConfig('update[context]', FormField::CONTEXT_UPDATE);\n            $this->controller->bodyClass ??= $this->getDesignBodyClass();\n            $this->controller->pageSize ??= $this->getDesignFormSize();\n            $this->controller->pageTitle ??= $this->getLang('update[title]', 'backend::lang.form.update_title');\n\n            $model = $this->controller->formFindModelObject($recordId);\n\n            // Multisite\n            if ($this->controller->formHasMultisite($model)) {\n                if ($redirect = $this->makeMultisiteRedirect('create', $model)) {\n                    return $redirect;\n                }\n\n                $this->addHandlerToSiteSwitcher();\n            }\n\n            $this->initForm($model);\n        }\n        catch (Exception $ex) {\n            $this->controller->handleError($ex);\n        }\n    }\n\n    /**\n     * update_onSave AJAX handler called from the update action and\n     * primarily used for updating existing records.\n     *\n     * This handler will invoke the unique controller overrides\n     * `formBeforeUpdate` and `formAfterUpdate`.\n     *\n     * @param int $recordId Record identifier\n     * @param string $context Form context\n     * @return mixed\n     */\n    public function update_onSave($recordId = null, $context = null)\n    {\n        if (!$this->controller->formCheckPermission('modelUpdate')) {\n            throw new ForbiddenException;\n        }\n\n        $this->context = $context ?: $this->getConfig('update[context]', FormField::CONTEXT_UPDATE);\n        $model = $this->controller->formFindModelObject($recordId);\n        $this->initForm($model);\n\n        $this->controller->formBeforeSave($model);\n        $this->controller->formBeforeUpdate($model);\n        $this->controller->fireSystemEvent('backend.form.beforeSave', [$model]);\n        $this->controller->fireSystemEvent('backend.form.beforeUpdate', [$model]);\n\n        $this->performSaveOnModel(\n            $model,\n            $this->formWidget->getSaveData(),\n            ['sessionKey' => $this->formWidget->getSessionKey(), 'propagate' => true]\n        );\n\n        $this->controller->formAfterSave($model);\n        $this->controller->formAfterUpdate($model);\n        $this->controller->fireSystemEvent('backend.form.afterSave', [$model]);\n        $this->controller->fireSystemEvent('backend.form.afterUpdate', [$model]);\n\n        Flash::success($this->getCustomLang('flashUpdate'));\n\n        if ($redirect = $this->makeRedirect('update', $model)) {\n            return $redirect;\n        }\n    }\n\n    /**\n     * update_onDelete AJAX handler called from the update action and\n     * used for deleting existing records.\n     *\n     * This handler will invoke the unique controller override\n     * `formAfterDelete`.\n     *\n     * @param int $recordId Record identifier\n     * @return mixed\n     */\n    public function update_onDelete($recordId = null)\n    {\n        if (!$this->controller->formCheckPermission('modelDelete')) {\n            throw new ForbiddenException;\n        }\n\n        $this->context = $this->getConfig('update[context]', FormField::CONTEXT_UPDATE);\n        $model = $this->controller->formFindModelObject($recordId);\n        $this->initForm($model);\n\n        $model->delete();\n\n        $this->controller->formAfterDelete($model);\n        $this->controller->fireSystemEvent('backend.form.afterDelete', [$model]);\n\n        Flash::success($this->getCustomLang('flashDelete'));\n\n        if ($redirect = $this->makeRedirect('delete', $model)) {\n            return $redirect;\n        }\n    }\n\n    /**\n     * update_onCancel AJAX handler called from the update action and\n     * used for aborting existing record updates.\n     *\n     * This handler will invoke the unique controller override\n     * `formAfterCancel`.\n     *\n     * @param int $recordId Record identifier\n     * @return mixed\n     */\n    public function update_onCancel($recordId = null)\n    {\n        $this->context = $this->getConfig('update[context]', FormField::CONTEXT_UPDATE);\n        $model = $this->controller->formFindModelObject($recordId);\n        $this->initForm($model);\n\n        $model->cancelDeferred($this->formWidget->getSessionKey());\n\n        $this->controller->formAfterCancel($model);\n        $this->controller->fireSystemEvent('backend.form.afterCancel', [$model]);\n\n        if ($redirect = $this->makeRedirect('cancel')) {\n            return $redirect;\n        }\n    }\n\n    //\n    // Preview\n    //\n\n    /**\n     * preview controller action used for viewing existing model records.\n     * This action takes a record identifier (primary key of the model)\n     * to locate the record used for sourcing the existing preview data.\n     *\n     * @param int $recordId Record identifier\n     * @param string $context Form context\n     * @return void\n     */\n    public function preview($recordId = null, $context = null)\n    {\n        if (!$this->controller->formCheckPermission('modelPreview')) {\n            throw new ForbiddenException;\n        }\n\n        try {\n            $this->context = $context ?: $this->getConfig('preview[context]', FormField::CONTEXT_PREVIEW);\n            $this->controller->bodyClass ??= $this->getDesignBodyClass();\n            $this->controller->pageSize ??= $this->getDesignFormSize();\n            $this->controller->pageTitle ??= $this->getLang('preview[title]', 'backend::lang.form.preview_title');\n\n            $model = $this->controller->formFindModelObject($recordId);\n\n            // Multisite\n            if ($this->controller->formHasMultisite($model)) {\n                if ($redirect = $this->makeMultisiteRedirect('preview', $model)) {\n                    return $redirect;\n                }\n\n                $this->addHandlerToSiteSwitcher();\n            }\n\n            $this->initForm($model);\n        }\n        catch (Exception $ex) {\n            $this->controller->handleError($ex);\n        }\n    }\n\n    //\n    // Utils\n    //\n\n    /**\n     * formRender the prepared form markup. This method is usually called from a view file.\n     *\n     *     <?= $this->formRender() ?>\n     *\n     * The first argument supports an array of render options. The supported\n     * options can be found via the `render` method of the Form widget class.\n     *\n     *     <?= $this->formRender(['preview' => true, 'section' => 'primary']) ?>\n     *\n     * @see Backend\\Widgets\\Form\n     * @param array $options Render options\n     * @return string Rendered HTML for the form.\n     */\n    public function formRender($options = [])\n    {\n        if (!$this->formWidget) {\n            throw new ApplicationException(Lang::get('backend::lang.form.behavior_not_ready'));\n        }\n\n        // Sections provided by the behavior, then use the widget as fallback\n        $section = strtolower($options['section'] ?? '');\n        switch ($section) {\n            case 'buttons':\n                return $this->formMakePartial($this->isPopupDesign() ? 'popup_buttons' : 'buttons');\n        }\n\n        return $this->formWidget->render($options);\n    }\n\n    /**\n     * formRenderDesign renders a preset form design as either:\n     * basic, custom, sidebar, document, popup\n     */\n    public function formRenderDesign($options = [])\n    {\n        if ($this->controller->hasFatalError()) {\n            return $this->formMakePartial($this->isPopupDesign() ? 'popup_error' : 'error', [\n                'fatalError' => $this->controller->getFatalError()\n            ]);\n        }\n\n        if (!isset($options['displayMode'])) {\n            $options['displayMode'] = $this->getDesignDisplayMode();\n        }\n\n        $this->vars['options'] = $options;\n\n        $displayMode = strtolower($options['displayMode'] ?? 'basic');\n        switch ($displayMode) {\n            case 'popup':\n            case 'sidebar':\n            case 'document':\n                return $this->formMakePartial(\"mode_{$displayMode}\");\n\n            case 'custom':\n                return $this->formRender();\n\n            default:\n                return $this->formMakePartial('mode_basic');\n        }\n    }\n\n    /**\n     * formMakePartial is a controller accessor for making partials within this behavior.\n     * @param string $partial\n     * @param array $params\n     * @return string\n     */\n    public function formMakePartial($partial, $params = [])\n    {\n        $contents = $this->controller->makePartial('form_'.$partial, $params + $this->vars, false);\n        if (!$contents) {\n            $contents = $this->makePartial($partial, $params);\n        }\n\n        return $contents;\n    }\n\n    /**\n     * formGetModel returns the model initialized by this form behavior.\n     * The model will be provided by one of the page actions or AJAX\n     * handlers via the `initForm` method.\n     *\n     * @return \\October\\Rain\\Database\\Model\n     */\n    public function formGetModel()\n    {\n        return $this->model;\n    }\n\n    /**\n     * formGetContext returns the active form context, either obtained from the postback\n     * variable called `form_context` or detected from the configuration,\n     * or routing parameters.\n     *\n     * @return string\n     */\n    public function formGetContext()\n    {\n        return post('form_context') ?: $this->context;\n    }\n\n    /**\n     * createModel internal method used to prepare the form model object.\n     *\n     * @return \\October\\Rain\\Database\\Model\n     */\n    protected function createModel()\n    {\n        return App::make($this->config->modelClass);\n    }\n\n    /**\n     * makeRedirect returns a Redirect object based on supplied context and parses\n     * the model primary key.\n     *\n     * @param string $context Redirect context, eg: create, update, delete\n     * @param Model $model The active model to parse in it's ID and attributes.\n     * @return Redirect\n     */\n    public function makeRedirect($context = null, $model = null, $queryParams = [])\n    {\n        $redirectUrl = null;\n        if (post('close') && !ends_with($context, '-close')) {\n            $context .= '-close';\n        }\n\n        if (post('refresh', false)) {\n            return Redirect::refresh();\n        }\n\n        if (post('redirect', true)) {\n            $redirectUrl = $this->getRedirectUrl($context);\n        }\n\n        if ($model && $redirectUrl) {\n            $redirectUrl = RouterHelper::replaceParameters($model, $redirectUrl);\n        }\n\n        $url = $this->controller->formGetRedirectUrl($context, $model);\n        if ($url) {\n            $redirectUrl = $url;\n        }\n\n        if (!$redirectUrl) {\n            return null;\n        }\n\n        if ($queryParams) {\n            $redirectUrl .= '?' . http_build_query($queryParams);\n        }\n\n        if (starts_with($redirectUrl, ['//', 'http://', 'https://'])) {\n            $redirect = Redirect::to($redirectUrl);\n        }\n        else {\n            $redirect = Backend::redirect($redirectUrl);\n        }\n\n        return $redirect;\n    }\n\n    /**\n     * getRedirectUrl is an internal method that returns a redirect URL from the config\n     * based on supplied context. Otherwise the default redirect is used.\n     *\n     * @param string $context Redirect context, eg: create, update, delete.\n     * @return string\n     */\n    protected function getRedirectUrl($context = null)\n    {\n        $redirectContext = explode('-', $context, 2)[0];\n        $redirectSource = ends_with($context, '-close') ? 'redirectClose' : 'redirect';\n\n        // Get the redirect for the provided context\n        $redirects = [$context => $this->getConfig(\"{$redirectContext}[{$redirectSource}]\", '')];\n\n        // Assign the default redirect afterwards to prevent the\n        // source for the default redirect being default[redirect]\n        $redirects['default'] = $this->getConfig('defaultRedirect', '');\n\n        if (empty($redirects[$context])) {\n            return $redirects['default'];\n        }\n\n        return $redirects[$context];\n    }\n\n    /**\n     * getLang parses in some default variables to a language string defined in config.\n     *\n     * @param string $name Configuration property containing the language string\n     * @param string $default A default language string to use if the config is not found\n     * @param array $extras Any extra params to include in the language string variables\n     * @return string The translated string.\n     */\n    protected function getLang($name, $default = null, $extras = [])\n    {\n        $name = $this->getConfig($name, $default);\n\n        $vars = $extras + [\n            'name' => Lang::get($this->getConfig('name', 'backend::lang.model.name'))\n        ];\n\n        return Lang::get($name, $vars);\n    }\n\n    /**\n     * getCustomLang parses custom messages provided by the config\n     */\n    protected function getCustomLang(string $name, ?string $default = null, array $extras = []): string\n    {\n        $foundKey = $this->getConfig(\"{$this->context}[customMessages][{$name}]\");\n\n        // @deprecated messages can be local to the config\n        if ($foundKey === null) {\n            $foundKey = $this->getConfig(\"{$this->context}[{$name}]\");\n        }\n\n        if ($foundKey === null) {\n            $foundKey = $this->getConfig(\"customMessages[{$name}]\");\n        }\n\n        // @deprecated flashSave overrides flashCreate and flashUpdate\n        if ($foundKey === null && in_array($name, ['flashCreate', 'flashUpdate'])) {\n            return $this->getCustomLang('flashSave', $this->customMessages[$name], $extras);\n        }\n\n        if ($foundKey === null) {\n            $foundKey = $default;\n        }\n\n        if ($foundKey === null) {\n            $foundKey = $this->customMessages[$name] ?? '???';\n        }\n\n        $vars = $extras + [\n            'name' => Lang::get($this->getConfig('name', 'backend::lang.model.name'))\n        ];\n\n        return Lang::get($foundKey, $vars);\n    }\n\n    //\n    // Pass-through Helpers\n    //\n\n    /**\n     * formGetWidget returns the form widget used by this behavior.\n     *\n     * @return Backend\\Widgets\\Form\n     */\n    public function formGetWidget()\n    {\n        return $this->formWidget;\n    }\n\n    /**\n     * formGetId returns a unique ID for the form widget used by this behavior.\n     * This is useful for dealing with identifiers in the markup.\n     *\n     *     <div id=\"<?= $this->formGetId()\">...</div>\n     *\n     * A suffix may be used passed as the first argument to reuse\n     * the identifier in other areas.\n     *\n     *     <button id=\"<?= $this->formGetId('button')\">...</button>\n     *\n     * @param string $suffix\n     * @return string\n     */\n    public function formGetId($suffix = null)\n    {\n        return $this->formWidget->getId($suffix);\n    }\n\n    /**\n     * formGetSessionKey is a helper to get the form session key.\n     * @return string\n     */\n    public function formGetSessionKey()\n    {\n        return $this->formWidget->getSessionKey();\n    }\n\n    /**\n     * formGetConfig returns the configuration used by this behavior. You may override this\n     * method in your controller as an alternative to defining a formConfig property.\n     * @return object\n     */\n    public function formGetConfig()\n    {\n        $config = $this->config;\n\n        $config->modelClass = Str::normalizeClassName($config->modelClass);\n\n        return $config;\n    }\n\n    /**\n     * formSetSaveValue will override the save values passed to the form. Set the value\n     * to null to omit the field from the dataset.\n     */\n    public function formSetSaveValue($key, $value)\n    {\n        $this->formWidget->setSaveDataOverride($key, $value);\n    }\n\n    /**\n     * formCheckPermission checks if a custom permission has been specified\n     */\n    public function formCheckPermission(string $name)\n    {\n        $foundKey = $this->getConfig(\"permissions[{$name}]\");\n\n        return $foundKey ? BackendAuth::userHasAccess($foundKey) : true;\n    }\n\n    //\n    // Overrides\n    //\n\n    /**\n     * formFindModelObject finds a Model record by its primary identifier, used by update\n     * actions. This logic can be changed by overriding it in the controller.\n     * @param string $recordId\n     * @return Model\n     */\n    public function formFindModelObject($recordId)\n    {\n        if (!strlen($recordId)) {\n            throw new ApplicationException($this->getCustomLang('notFound', 'backend::lang.form.missing_id'));\n        }\n\n        $model = $this->controller->formCreateModelObject();\n\n        // Prepare query and find model record\n        $query = $model->newQuery();\n\n        // Remove multisite restriction\n        if ($this->controller->formHasMultisite($model)) {\n            $query->withSites();\n        }\n        elseif ($this->controller->formHasMultisiteGroup($model)) {\n            $query->withSiteGroups();\n        }\n\n        $this->controller->formExtendQuery($query);\n        $result = $query->find($recordId);\n\n        if (!$result) {\n            throw new ApplicationException($this->getCustomLang('notFound', null, [\n                'class' => get_class($model), 'id' => $recordId\n            ]));\n        }\n\n        $result = $this->controller->formExtendModel($result) ?: $result;\n\n        return $result;\n    }\n\n    /**\n     * extendFormFields is a static helper for extending form fields\n     * @deprecated for best performance, use Event class directly, see docs\n     * @link https://docs.octobercms.com/4.x/extend/forms/form-controller.html#extending-form-fields\n     */\n    public static function extendFormFields($callback)\n    {\n        $calledClass = self::getCalledExtensionClass();\n        Event::listen('backend.form.extendFields', function ($widget) use ($calledClass, $callback) {\n            if (!is_a($widget->getController(), $calledClass)) {\n                return;\n            }\n\n            call_user_func_array($callback, [$widget, $widget->model, $widget->getContext()]);\n        });\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/ImportExportController.php",
    "content": "<?php namespace Backend\\Behaviors;\n\nuse App;\nuse Lang;\nuse Backend;\nuse BackendAuth;\nuse Backend\\Classes\\ControllerBehavior;\nuse Illuminate\\Database\\Eloquent\\MassAssignmentException;\nuse ApplicationException;\nuse ForbiddenException;\nuse Exception;\n\n/**\n * ImportExportController adds features for importing and exporting data.\n *\n * This behavior is implemented in the controller like so:\n *\n *     public $implement = [\n *         \\Backend\\Behaviors\\ImportExportController::class,\n *     ];\n *\n *     public $importExportConfig = 'config_import_export.yaml';\n *\n * The `$importExportConfig` property makes reference to the configuration\n * values as either a YAML file, located in the controller view directory,\n * or directly as a PHP array.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ImportExportController extends ControllerBehavior\n{\n    use \\Backend\\Behaviors\\ImportExportController\\ActionImport;\n    use \\Backend\\Behaviors\\ImportExportController\\ActionExport;\n    use \\Backend\\Behaviors\\ImportExportController\\HasListExport;\n    use \\Backend\\Behaviors\\ImportExportController\\CanFormatCsv;\n    use \\Backend\\Behaviors\\ImportExportController\\CanFormatJson;\n\n    /**\n     * @inheritDoc\n     */\n    protected $requiredProperties = ['importExportConfig'];\n\n    /**\n     * @var array requiredConfig values that must exist when applying the primary config file.\n     */\n    protected $requiredConfig = [];\n\n    /**\n     * @var array actions visible in context of the controller\n     */\n    protected $actions = ['import', 'export', 'download'];\n\n    /**\n     * __construct the behavior\n     * @param Backend\\Classes\\Controller $controller\n     */\n    public function __construct($controller)\n    {\n        parent::__construct($controller);\n\n        // Build configuration\n        $this->setConfig($controller->importExportConfig, $this->requiredConfig);\n    }\n\n    /**\n     * beforeDisplay fires before the page is displayed and AJAX is executed.\n     */\n    public function beforeDisplay()\n    {\n        if ($this->controller->getAction() === 'import') {\n            $this->beforeDisplayImport();\n        }\n        elseif ($this->controller->getAction() === 'export') {\n            $this->beforeDisplayExport();\n        }\n    }\n\n    /**\n     * beforeDisplayImport loads the import form widgets\n     */\n    public function beforeDisplayImport()\n    {\n        if ($this->importUploadFormWidget = $this->makeImportUploadFormWidget()) {\n            $this->importUploadFormWidget->bindToController();\n        }\n\n        if ($this->importOptionsFormWidget = $this->makeImportOptionsFormWidget()) {\n            $this->importOptionsFormWidget->bindToController();\n        }\n    }\n\n    /**\n     * beforeDisplayExport loads the export form widgets\n     */\n    public function beforeDisplayExport()\n    {\n        if ($this->exportFormatFormWidget = $this->makeExportFormatFormWidget()) {\n            $this->exportFormatFormWidget->bindToController();\n        }\n\n        if ($this->exportOptionsFormWidget = $this->makeExportOptionsFormWidget()) {\n            $this->exportOptionsFormWidget->bindToController();\n        }\n    }\n\n    //\n    // Import\n    //\n\n    /**\n     * import action\n     */\n    public function import()\n    {\n        if ($response = $this->checkPermissionsForType('import')) {\n            return $response;\n        }\n\n        $this->addJs('js/october.import.js');\n        $this->addCss('css/import.css');\n\n        $this->controller->pageTitle = $this->controller->pageTitle\n            ?: Lang::get($this->getConfig('import[title]', 'Import Records'));\n\n        $this->prepareImportVars();\n    }\n\n    /**\n     * onImport\n     */\n    public function onImport()\n    {\n        try {\n            $this->actionImport();\n        }\n        catch (MassAssignmentException $ex) {\n            $this->controller->handleError(new ApplicationException(Lang::get(\n                'backend::lang.model.mass_assignment_failed',\n                ['attribute' => $ex->getMessage()]\n            )));\n        }\n        catch (Exception $ex) {\n            $this->controller->handleError($ex);\n        }\n\n        return $this->importExportMakePartial('import_result_form');\n    }\n\n    /**\n     * onImportLoadColumnSampleForm\n     */\n    public function onImportLoadColumnSampleForm()\n    {\n        $this->actionImportLoadColumnSampleForm();\n\n        return $this->importExportMakePartial('column_sample_form');\n    }\n\n    /**\n     * onImportLoadForm\n     */\n    public function onImportLoadForm()\n    {\n        try {\n            if (!$this->isCustomFileFormat()) {\n                $this->checkRequiredImportColumns();\n            }\n        }\n        catch (Exception $ex) {\n            $this->controller->handleError($ex);\n        }\n\n        return $this->importExportMakePartial('import_form');\n    }\n\n    //\n    // Export\n    //\n\n    /**\n     * export action\n     */\n    public function export()\n    {\n        if ($response = $this->checkPermissionsForType('export')) {\n            return $response;\n        }\n\n        if ($response = $this->checkUseListExportMode()) {\n            return $response;\n        }\n\n        $this->addJs('js/october.export.js');\n        $this->addCss('css/export.css');\n\n        $this->controller->pageTitle = $this->controller->pageTitle\n            ?: Lang::get($this->getConfig('export[title]', 'Export Records'));\n\n        $this->prepareExportVars();\n    }\n\n    /**\n     * download action\n     */\n    public function download($name, $outputName = null)\n    {\n        $this->controller->pageTitle = $this->controller->pageTitle\n            ?: Lang::get($this->getConfig('export[title]', 'Export Records'));\n\n        return $this->exportGetModel()->download($name, $outputName);\n    }\n\n    /**\n     * onExport\n     */\n    public function onExport()\n    {\n        try {\n            $this->actionExport();\n        }\n        catch (MassAssignmentException $ex) {\n            $this->controller->handleError(new ApplicationException(Lang::get(\n                'backend::lang.model.mass_assignment_failed',\n                ['attribute' => $ex->getMessage()]\n            )));\n        }\n        catch (Exception $ex) {\n            $this->controller->handleError($ex);\n        }\n\n        return $this->importExportMakePartial('export_result_form');\n    }\n\n    /**\n     * onExportLoadForm\n     */\n    public function onExportLoadForm()\n    {\n        return $this->importExportMakePartial('export_form');\n    }\n\n    //\n    // Internals\n    //\n\n    /**\n     * importExportMakePartial controller accessor for making partials within this behavior.\n     * @param string $partial\n     * @param array $params\n     * @return string Partial contents\n     */\n    public function importExportMakePartial($partial, $params = [])\n    {\n        $contents = $this->controller->makePartial('import_export_'.$partial, $params + $this->vars, false);\n\n        if (!$contents) {\n            $contents = $this->makePartial($partial, $params);\n        }\n\n        return $contents;\n    }\n\n    /**\n     * checkPermissionsForType checks to see if the import/export is controlled by permissions\n     * and if the logged in user has permissions.\n     */\n    protected function checkPermissionsForType($type)\n    {\n        if (\n            ($permissions = $this->getConfig($type.'[permissions]')) &&\n            (!BackendAuth::getUser()->hasAnyAccess((array) $permissions))\n        ) {\n            throw new ForbiddenException;\n        }\n    }\n\n    /**\n     * makeOptionsFormWidgetForType\n     */\n    protected function makeOptionsFormWidgetForType($type)\n    {\n        if (!$this->getConfig($type)) {\n            return null;\n        }\n\n        $fieldConfig = $this->getConfig($type.'[form]');\n        if ($fieldConfig !== null) {\n            $widgetConfig = $this->makeConfig($fieldConfig);\n            $widgetConfig->model = $this->getModelForType($type);\n            $widgetConfig->alias = $type.'OptionsForm';\n            $widgetConfig->arrayName = ucfirst($type).'Options';\n\n            return $this->makeWidget(\\Backend\\Widgets\\Form::class, $widgetConfig);\n        }\n\n        return null;\n    }\n\n    /**\n     * getModelForType\n     */\n    protected function getModelForType($type)\n    {\n        $cacheProperty = $type.'Model';\n\n        if ($this->{$cacheProperty} !== null) {\n            return $this->{$cacheProperty};\n        }\n\n        $modelClass = $this->getConfig($type.'[modelClass]');\n        if (!$modelClass) {\n            throw new ApplicationException(__(\"Please specify the modelClass property for :type\", [\n                'type' => $type\n            ]));\n        }\n\n        $model = App::make($modelClass);\n        $this->controller->importExportExtendModel($model);\n\n        return $this->{$cacheProperty} = $model;\n    }\n\n    /**\n     * makeListColumns\n     */\n    protected function makeListColumns($config, $model)\n    {\n        $config = $this->makeConfig($config);\n        $config->model = $model;\n\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Lists::class, $config);\n        $columns = $widget->getColumns();\n\n        if (!isset($columns) || !is_array($columns)) {\n            return null;\n        }\n\n        $result = [];\n        foreach ($columns as $attribute => $column) {\n            $result[$attribute] = $column->label;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getRedirectUrlForType\n     */\n    protected function getRedirectUrlForType($type = null)\n    {\n        $redirect = $this->getConfig($type.'[redirect]');\n\n        if ($redirect !== null) {\n            return $redirect ? Backend::url($redirect) : 'javascript:;';\n        }\n\n        return $this->controller->actionUrl($type);\n    }\n\n    /**\n     * getFormatOptionsForPost returns the file format options from postback. This method\n     * can be used to define presets.\n     */\n    protected function getFormatOptionsForPost(): array\n    {\n        $defaults = [\n            'file_format' => 'json',\n            'format_delimiter' => ',',\n            'format_enclosure' => '\"',\n            'format_escape' => '\\\\',\n            'format_encoding' => 'UTF-8',\n            'first_row_titles' => true,\n        ];\n\n        return [\n            'file_format' => post('file_format', $this->getConfig('defaultFormatOptions[fileFormat]', $defaults['file_format'])),\n            'format_delimiter' => post('format_delimiter', $this->getConfig('defaultFormatOptions[delimiter]', $defaults['format_delimiter'])),\n            'format_enclosure' => post('format_enclosure', $this->getConfig('defaultFormatOptions[enclosure]', $defaults['format_enclosure'])),\n            'format_escape' => post('format_escape', $this->getConfig('defaultFormatOptions[escape]', $defaults['format_escape'])),\n            'format_encoding' => post('format_encoding', $this->getConfig('defaultFormatOptions[encoding]', $defaults['format_encoding'])),\n            'first_row_titles' => post('first_row_titles', $this->getConfig('defaultFormatOptions[firstRowTitles]', $defaults['first_row_titles'])),\n        ];\n    }\n\n    /**\n     * getFormatOptionsForModel returns the file format options used by models.\n     */\n    protected function getFormatOptionsForModel(): array\n    {\n        $options = [\n            'fileFormat' => post('file_format', $this->getConfig('defaultFormatOptions[fileFormat]')),\n            'delimiter' => post('format_delimiter', $this->getConfig('defaultFormatOptions[delimiter]')),\n            'enclosure' => post('format_enclosure', $this->getConfig('defaultFormatOptions[enclosure]')),\n            'escape' => post('format_escape', $this->getConfig('defaultFormatOptions[escape]')),\n            'encoding' => post('format_encoding', $this->getConfig('defaultFormatOptions[encoding]')),\n            'firstRowTitles' => (bool) post('first_row_titles', $this->getConfig('defaultFormatOptions[firstRowTitles]', true)),\n            'customJson' => $this->getConfig('defaultFormatOptions[customJson]'),\n        ];\n\n        if ($options['fileFormat'] !== 'csv_custom') {\n            $options['delimiter'] = null;\n            $options['enclosure'] = null;\n            $options['escape'] = null;\n            $options['encoding'] = null;\n        }\n\n        return $options;\n    }\n\n    /**\n     * isCustomFileFormat returns true if the process is using a custom format\n     * via `customJson` or otherwise.\n     */\n    protected function isCustomFileFormat()\n    {\n        if (!$fileFormat = post('file_format', 'json')) {\n            return false;\n        }\n\n        if ($fileFormat !== 'json') {\n            return false;\n        }\n\n        return (bool) $this->getFormatOptionsForModel()['customJson'];\n    }\n\n    //\n    // Overrides\n    //\n\n    /**\n     * importExportGetFileName\n     * @return string\n     */\n    public function importExportGetFileName()\n    {\n        return $this->exportFileName;\n    }\n\n    /**\n     * importExportExtendModel\n     * @param Model $model\n     * @return Model\n     */\n    public function importExportExtendModel($model)\n    {\n        return $model;\n    }\n\n    /**\n     * importExportExtendColumns\n     */\n    public function importExportExtendColumns($columns, $context = null)\n    {\n        return $columns;\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/ListController.php",
    "content": "<?php namespace Backend\\Behaviors;\n\nuse App;\nuse Lang;\nuse Event;\nuse Flash;\nuse BackendAuth;\nuse ApplicationException;\nuse Backend\\Classes\\ControllerBehavior;\nuse ForbiddenException;\n\n/**\n * ListController adds features for working with backend lists\n *\n * This behavior is implemented in the controller like so:\n *\n *     public $implement = [\n *         \\Backend\\Behaviors\\ListController::class,\n *     ];\n *\n *     public $listConfig = 'config_list.yaml';\n *\n * The `$listConfig` property makes reference to the list configuration\n * values as either a YAML file, located in the controller view directory,\n * or directly as a PHP array.\n *\n * @see https://docs.octobercms.com/4.x/extend/lists/list-controller.html List Controller Documentation\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ListController extends ControllerBehavior\n{\n    use \\Backend\\Behaviors\\ListController\\HasOverrides;\n\n    /**\n     * @var array listDefinitions are keys for alias and value for configuration.\n     */\n    protected $listDefinitions;\n\n    /**\n     * @var string primaryDefinition list alias to use. Default: list\n     */\n    protected $primaryDefinition;\n\n    /**\n     * @var array listConfig are keys for alias and value for config objects.\n     */\n    protected $listConfig = [];\n\n    /**\n     * @var \\Backend\\Classes\\WidgetBase[] listWidgets reference to the list widget object.\n     */\n    protected $listWidgets = [];\n\n    /**\n     * @var \\Backend\\Classes\\WidgetBase[] toolbarWidgets reference to the toolbar widget objects.\n     */\n    protected $toolbarWidgets = [];\n\n    /**\n     * @var \\Backend\\Classes\\WidgetBase[] filterWidgets reference to the filter widget objects.\n     */\n    protected $filterWidgets = [];\n\n    /**\n     * @var array requiredProperties in the controller\n     */\n    protected $requiredProperties = ['listConfig'];\n\n    /**\n     * @var array requiredConfig values that must exist when applying the primary config file.\n     * - modelClass: Class name for the model\n     * - list: List column definitions\n     */\n    protected $requiredConfig = ['modelClass', 'list'];\n\n    /**\n     * @var array actions visible in context of the controller\n     */\n    protected $actions = ['index'];\n\n    /**\n     * __construct the behavior\n     * @param \\Backend\\Classes\\Controller $controller\n     */\n    public function __construct($controller)\n    {\n        parent::__construct($controller);\n\n        // Extract list definitions\n        if (is_array($controller->listConfig)) {\n            $this->listDefinitions = $controller->listConfig;\n            $this->primaryDefinition = key($this->listDefinitions);\n        }\n        else {\n            $this->listDefinitions = ['list' => $controller->listConfig];\n            $this->primaryDefinition = 'list';\n        }\n\n        // Build configuration\n        $this->setConfig($this->listDefinitions[$this->primaryDefinition], $this->requiredConfig);\n    }\n\n    /**\n     * makeLists creates all the list widgets based on the definitions.\n     * @return array\n     */\n    public function makeLists()\n    {\n        foreach ($this->listDefinitions as $definition => $config) {\n            $this->listWidgets[$definition] = $this->makeList($definition);\n        }\n\n        return $this->listWidgets;\n    }\n\n    /**\n     * makeList prepares the widgets used by this action\n     * @return \\Backend\\Classes\\WidgetBase\n     */\n    public function makeList($definition = null)\n    {\n        if (!$definition || !isset($this->listDefinitions[$definition])) {\n            $definition = $this->primaryDefinition;\n        }\n\n        $listConfig = $this->config = $this->controller->listGetConfig($definition);\n\n        // Create the model\n        $model = $this->createModel();\n        $model = $this->controller->listExtendModel($model, $definition);\n\n        // Prepare the list widget\n        $widgetConfig = $this->makeConfig($listConfig->list);\n        $widgetConfig->model = $model;\n        $widgetConfig->alias = $listConfig->widgetAlias ?? $definition;\n\n        // Prepare the columns configuration\n        $configFieldsToTransfer = [\n            'recordUrl',\n            'recordOnClick',\n            'recordsPerPage',\n            'perPageOptions',\n            'showPageNumbers',\n            'noRecordsMessage',\n            'defaultSort',\n            'showSorting',\n            'showSetup',\n            'expandLastColumn',\n            'showCheckboxes',\n            'customViewPath',\n            'customPageName',\n        ];\n\n        foreach ($configFieldsToTransfer as $field) {\n            if (isset($listConfig->{$field})) {\n                $widgetConfig->{$field} = $listConfig->{$field};\n            }\n        }\n\n        // List Widget with extensibility\n        $structureConfig = $this->makeListStructureConfig($widgetConfig, $listConfig);\n        if ($structureConfig) {\n            $widget = $this->makeWidget(\\Backend\\Widgets\\ListStructure::class, $structureConfig);\n        }\n        else {\n            $widget = $this->makeWidget(\\Backend\\Widgets\\Lists::class, $widgetConfig);\n        }\n\n        $widget->bindEvent('list.extendColumns', function () use ($widget) {\n            $this->controller->listExtendColumns($widget);\n        });\n\n        $widget->bindEvent('list.extendQueryBefore', function ($query) use ($definition) {\n            $this->controller->listExtendQueryBefore($query, $definition);\n        });\n\n        $widget->bindEvent('list.extendQuery', function ($query) use ($definition) {\n            $this->controller->listExtendQuery($query, $definition);\n        });\n\n        $widget->bindEvent('list.extendSortColumn', function ($query, $sortColumn, $sortDirection) use ($definition) {\n            $this->controller->listExtendSortColumn($query, $sortColumn, $sortDirection, $definition);\n        });\n\n        $widget->bindEvent('list.extendRecords', function ($records) use ($definition) {\n            return $this->controller->listExtendRecords($records, $definition);\n        });\n\n        $widget->bindEvent('list.injectRowClass', function ($record) use ($definition) {\n            return $this->controller->listInjectRowClass($record, $definition);\n        });\n\n        $widget->bindEvent('list.overrideColumnValue', function ($record, $column, $value) use ($definition) {\n            return $this->controller->listOverrideColumnValue($record, $column->columnName, $definition);\n        });\n\n        $widget->bindEvent('list.overrideHeaderValue', function ($column, $value) use ($definition) {\n            return $this->controller->listOverrideHeaderValue($column->columnName, $definition);\n        });\n\n        $widget->bindEvent('list.overrideRecordAction', function ($record, $url, $onClick) use ($definition) {\n            return $this->controller->listOverrideRecordUrl($record, $definition);\n        });\n\n        $widget->bindEvent('list.reorderStructure', function ($record) use ($definition) {\n            return $this->controller->listAfterReorder($record, $definition);\n        });\n\n        $widget->bindEvent('list.refresh', function ($result) use ($widget, $definition) {\n            return $this->controller->listExtendRefreshResults($widget, $result, $definition);\n        });\n\n        $widget->bindToController();\n\n        // Prepare the toolbar widget (optional)\n        if (isset($listConfig->toolbar)) {\n            $toolbarConfig = $this->makeConfig($listConfig->toolbar);\n            $toolbarConfig->alias = $widget->alias . 'Toolbar';\n            $toolbarWidget = $this->makeWidget(\\Backend\\Widgets\\Toolbar::class, $toolbarConfig);\n            $toolbarWidget->listWidgetId = $widget->getId();\n            $toolbarWidget->cssClasses[] = 'list-header';\n\n            // Pass the list setup AJAX handler to the toolbar\n            if (isset($listConfig->showSetup) && $listConfig->showSetup) {\n                $toolbarWidget->setupHandler = $widget->getEventHandler('onLoadSetup');\n            }\n\n            // Link the Search Widget to the List Widget\n            if ($searchWidget = $toolbarWidget->getSearchWidget()) {\n                $searchWidget->bindEvent('search.submit', function () use ($widget, $searchWidget) {\n                    $widget->setSearchTerm($searchWidget->getActiveTerm(), true);\n                    return $widget->onRefresh();\n                });\n\n                // Pass search options\n                $widget->setSearchOptions([\n                    'mode' => $searchWidget->mode,\n                    'scope' => $searchWidget->scope,\n                ]);\n\n                // Find predefined search term\n                $widget->setSearchTerm($searchWidget->getActiveTerm());\n            }\n\n            // Bind to controller\n            $toolbarWidget->bindToController();\n\n            $this->toolbarWidgets[$definition] = $toolbarWidget;\n        }\n\n        // Prepare the filter widget (optional)\n        if (isset($listConfig->filter)) {\n            $widget->cssClasses[] = 'list-flush';\n\n            $filterConfig = $this->makeConfig($listConfig->filter);\n            $filterConfig->model = $model;\n            $filterConfig->alias = $widget->alias . 'Filter';\n            $filterConfig->customPageName = $listConfig->customPageName ?? null;\n            $filterWidget = $this->makeWidget(\\Backend\\Widgets\\Filter::class, $filterConfig);\n\n            // Filter the list when the scopes are changed\n            $filterWidget->bindEvent('filter.update', function() use ($widget) {\n                return $widget->onFilter();\n            });\n\n            // Filter Widget with extensibility\n            $filterWidget->bindEvent('filter.extendScopes', function() use ($filterWidget) {\n                $this->controller->listFilterExtendScopes($filterWidget);\n            });\n\n            // Extend the query of the list of options\n            $filterWidget->bindEvent('filter.extendQuery', function($query, $scope) {\n                $this->controller->listFilterExtendQuery($query, $scope);\n            });\n\n            // Apply predefined filter values\n            $widget->addFilter([$filterWidget, 'applyAllScopesToQuery']);\n\n            // Bind to controller\n            $filterWidget->bindToController();\n\n            $this->filterWidgets[$definition] = $filterWidget;\n        }\n\n        return $widget;\n    }\n\n    /**\n     * makeListStructureConfig\n     */\n    protected function makeListStructureConfig(object $widgetConfig, object $config): ?object\n    {\n        // @deprecated old API\n        if (isset($config->showTree)) {\n            $widgetConfig->showTree = $config->showTree;\n            $widgetConfig->treeExpanded = $config->treeExpanded ?? false;\n            $widgetConfig->showReorder = false;\n            if (!isset($config->structure)) {\n                return $widgetConfig;\n            }\n        }\n\n        // New API\n        if (isset($config->structure)) {\n            return $this->mergeConfig($widgetConfig, $config->structure);\n        }\n\n        return null;\n    }\n\n    /**\n     * index controller action\n     * @return void\n     */\n    public function index()\n    {\n        if (!$this->controller->pageTitle) {\n            $this->controller->pageTitle = Lang::get($this->getConfig(\n                'title',\n                'backend::lang.list.default_title'\n            ));\n        }\n\n        $this->controller->bodyClass ??= 'slim-container';\n\n        $this->makeLists();\n    }\n\n    /**\n     * index_onDelete bulk deletes records.\n     * @return void\n     */\n    public function index_onDelete()\n    {\n        if (method_exists($this->controller, 'onDelete')) {\n            return call_user_func_array([$this->controller, 'onDelete'], func_get_args());\n        }\n\n        // Establish the list definition\n        $definition = post('definition', $this->primaryDefinition);\n\n        if (!isset($this->listDefinitions[$definition])) {\n            throw new ApplicationException(Lang::get('backend::lang.list.missing_parent_definition', compact('definition')));\n        }\n\n        $this->config = $this->controller->listGetConfig($definition);\n\n        // Check conditions for deletion\n        if (!$this->listCanDeleteRecords()) {\n            throw new ForbiddenException;\n        }\n\n        // Validate checked identifiers\n        $checkedIds = post('checked');\n\n        if (!$checkedIds || !is_array($checkedIds) || !count($checkedIds)) {\n            Flash::error(Lang::get('backend::lang.list.delete_selected_empty'));\n            return $this->controller->listRefresh();\n        }\n\n        // Create the model\n        $model = $this->createModel();\n        $model = $this->controller->listExtendModel($model, $definition);\n\n        // Create the query\n        $query = $model->newQuery();\n        $this->controller->listExtendQueryBefore($query, $definition);\n\n        $query->whereIn($model->getQualifiedKeyName(), $checkedIds);\n        $this->controller->listExtendQuery($query, $definition);\n\n        // Delete records\n        $records = $query->get();\n\n        if ($records->count()) {\n            foreach ($records as $record) {\n                $record->delete();\n            }\n\n            Flash::success(Lang::get('backend::lang.list.delete_selected_success'));\n        }\n        else {\n            Flash::error(Lang::get('backend::lang.list.delete_selected_empty'));\n        }\n\n        return $this->controller->listRefresh($definition);\n    }\n\n    /**\n     * listCanDeleteRecords determines if records can be deleted from the list\n     */\n    protected function listCanDeleteRecords(): bool\n    {\n        if (!$this->getConfig('showCheckboxes')) {\n            return false;\n        }\n\n        if ($requiredPermission = $this->getConfig('requiredPermissions[recordDelete]')) {\n            return BackendAuth::userHasAccess($requiredPermission);\n        }\n\n        return true;\n    }\n\n    /**\n     * createModel is an internal method used to prepare the list model object.\n     * @return \\October\\Rain\\Database\\Model\n     */\n    protected function createModel()\n    {\n        return App::make($this->config->modelClass);\n    }\n\n    /**\n     * listRender renders the widget collection.\n     * @param  string $definition Optional list definition.\n     * @return string Rendered HTML for the list.\n     */\n    public function listRender($definition = null)\n    {\n        if (!count($this->listWidgets)) {\n            throw new ApplicationException(Lang::get('backend::lang.list.behavior_not_ready'));\n        }\n\n        if (!$definition || !isset($this->listDefinitions[$definition])) {\n            $definition = $this->primaryDefinition;\n        }\n\n        $vars = [\n            'toolbar' => null,\n            'filter' => null,\n            'list' => null,\n        ];\n\n        if (isset($this->toolbarWidgets[$definition])) {\n            $vars['toolbar'] = $this->toolbarWidgets[$definition];\n        }\n\n        if (isset($this->filterWidgets[$definition])) {\n            $vars['filter'] = $this->filterWidgets[$definition];\n        }\n\n        $vars['list'] = $this->listWidgets[$definition];\n\n        return $this->listMakePartial('container', $vars);\n    }\n\n    /**\n     * listMakePartial is a controller accessor for making partials within this behavior.\n     * @param string $partial\n     * @param array $params\n     * @return string Partial contents\n     */\n    public function listMakePartial($partial, $params = [])\n    {\n        $contents = $this->controller->makePartial('list_'.$partial, $params + $this->vars, false);\n        if (!$contents) {\n            $contents = $this->makePartial($partial, $params);\n        }\n\n        return $contents;\n    }\n\n    /**\n     * listRefresh refreshes the list container only, useful for returning in custom AJAX requests.\n     * @param  string $definition Optional list definition.\n     * @return array The list element selector as the key, and the list contents are the value.\n     */\n    public function listRefresh($definition = null)\n    {\n        if (!count($this->listWidgets)) {\n            $this->makeLists();\n        }\n\n        if (!$definition || !isset($this->listDefinitions[$definition])) {\n            $definition = $this->primaryDefinition;\n        }\n\n        return $this->listWidgets[$definition]->onRefresh();\n    }\n\n    /**\n     * listGetWidget returns the widget used by this behavior.\n     * @return \\Backend\\Classes\\WidgetBase\n     */\n    public function listGetWidget($definition = null)\n    {\n        if (!$definition) {\n            $definition = $this->primaryDefinition;\n        }\n\n        return array_get($this->listWidgets, $definition);\n    }\n\n    /**\n     * listGetFilterWidget returns the filter widget used by this behavior.\n     * @return \\Backend\\Classes\\WidgetBase\n     */\n    public function listGetFilterWidget($definition = null)\n    {\n        if (!$definition) {\n            $definition = $this->primaryDefinition;\n        }\n\n        return array_get($this->filterWidgets, $definition);\n    }\n\n    /**\n     * listGetToolbarWidget returns the toolbar widget used by this behavior.\n     * @return \\Backend\\Classes\\WidgetBase\n     */\n    public function listGetToolbarWidget($definition = null)\n    {\n        if (!$definition) {\n            $definition = $this->primaryDefinition;\n        }\n\n        return array_get($this->toolbarWidgets, $definition);\n    }\n\n    /**\n     * listGetId returns a unique ID for the list widget used by this behavior.\n     * This is useful for dealing with identifiers in the markup.\n     *\n     *     <div id=\"<?= $this->listGetId()\">...</div>\n     *\n     * A suffix may be used passed as the first argument to reuse\n     * the identifier in other areas.\n     *\n     *     <button id=\"<?= $this->listGetId('button')\">...</button>\n     *\n     * @param string $suffix\n     * @return string\n     */\n    public function listGetId($suffix = null, $definition = null)\n    {\n        return $this->listGetWidget($definition)->getId($suffix);\n    }\n\n    /**\n     * listGetConfig returns the configuration used by this behavior. You may override this\n     * method in your controller as an alternative to defining a listConfig property.\n     * @return object|null\n     */\n    public function listGetConfig($definition = null)\n    {\n        if (!$definition) {\n            $definition = $this->primaryDefinition;\n        }\n\n        $config = array_get($this->listConfig, $definition);\n\n        if (!$config) {\n            $config = $this->listConfig[$definition] = $this->makeConfig($this->listDefinitions[$definition], $this->requiredConfig);\n        }\n\n        return $config;\n    }\n\n    //\n    // Overrides\n    //\n\n    /**\n     * extendListColumns is a static helper for extending list columns.\n     * @deprecated for best performance, use Event class directly, see docs\n     * @link https://docs.octobercms.com/4.x/extend/lists/list-controller.html#extending-column-definitions\n     */\n    public static function extendListColumns($callback)\n    {\n        $calledClass = self::getCalledExtensionClass();\n        Event::listen('backend.list.extendColumns', function ($widget) use ($calledClass, $callback) {\n            if (!is_a($widget->getController(), $calledClass)) {\n                return;\n            }\n            call_user_func_array($callback, [$widget, $widget->model]);\n        });\n    }\n\n    /**\n     * extendListFilterScopes is a static helper for extending filter scopes.\n     * @deprecated for best performance, use Event class directly, see docs\n     * @link https://docs.octobercms.com/4.x/extend/lists/list-controller.html#extending-filter-scopes\n     */\n    public static function extendListFilterScopes($callback)\n    {\n        $calledClass = self::getCalledExtensionClass();\n        Event::listen('backend.filter.extendScopes', function ($widget) use ($calledClass, $callback) {\n            if (!is_a($widget->getController(), $calledClass)) {\n                return;\n            }\n            call_user_func_array($callback, [$widget]);\n        });\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/RelationController.php",
    "content": "<?php namespace Backend\\Behaviors;\n\nuse Lang;\nuse Flash;\nuse Request;\nuse Form as FormHelper;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\ControllerBehavior;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOneOrMany;\nuse October\\Rain\\Database\\Model;\nuse ApplicationException;\n\n/**\n * RelationController uses a combination of lists and forms for managing Model relations.\n *\n * This behavior is implemented in the controller like so:\n *\n *     public $implement = [\n *         \\Backend\\Behaviors\\RelationController::class,\n *     ];\n *\n *     public $relationConfig = 'config_relation.yaml';\n *\n * The `$relationConfig` property makes reference to the configuration\n * values as either a YAML file, located in the controller view directory,\n * or directly as a PHP array.\n *\n * @see https://docs.octobercms.com/4.x/extend/forms/relation-controller.html Relation Controller Documentation\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RelationController extends ControllerBehavior\n{\n    use \\Backend\\Traits\\FormModelSaver;\n    use \\Backend\\Behaviors\\RelationController\\HasOverrides;\n    use \\Backend\\Behaviors\\RelationController\\HasViewMode;\n    use \\Backend\\Behaviors\\RelationController\\HasManageMode;\n    use \\Backend\\Behaviors\\RelationController\\HasPivotMode;\n    use \\Backend\\Behaviors\\RelationController\\HasExtraConfig;\n    use \\Backend\\Behaviors\\RelationController\\HasNestedRelations;\n\n    /**\n     * @var const PARAM_FIELD postback parameter for the active relationship field\n     */\n    const PARAM_FIELD = '_relation_field';\n\n    /**\n     * @var const PARAM_EXTRA_CONFIG postback parameter for read only mode\n     */\n    const PARAM_EXTRA_CONFIG = '_relation_extra_config';\n\n    /**\n     * @var Backend\\Widgets\\Search searchWidget\n     */\n    protected $searchWidget;\n\n    /**\n     * @var Backend\\Widgets\\Toolbar toolbarWidget\n     */\n    protected $toolbarWidget;\n\n    /**\n     * @var array requiredProperties\n     */\n    protected $requiredProperties = [];\n\n    /**\n     * @var array requiredRelationProperties that must exist for each relationship definition\n     */\n    protected $requiredRelationProperties = ['label'];\n\n    /**\n     * @var array requiredConfig that must exist when applying the primary config file\n     */\n    protected $requiredConfig = [];\n\n    /**\n     * @var array actions visible in context of the controller\n     */\n    protected $actions = [];\n\n    /**\n     * @var object originalConfig values\n     */\n    protected $originalConfig;\n\n    /**\n     * @var bool initialized informs if everything is ready\n     */\n    protected $initialized = false;\n\n    /**\n     * @var string relationType\n     */\n    public $relationType;\n\n    /**\n     * @var string relationName\n     */\n    public $relationName;\n\n    /**\n     * @var Model relationModel\n     */\n    public $relationModel;\n\n    /**\n     * @var Model relationParent\n     */\n    public $relationParent;\n\n    /**\n     * @var Model relationObject\n     */\n    public $relationObject;\n\n    /**\n     * @var Model model used as parent of the relationship\n     */\n    protected $model;\n\n    /**\n     * @var string field for the relationship as defined in the configuration\n     */\n    protected $field;\n\n    /**\n     * @var string alias is something unique to pass to widgets\n     */\n    protected $alias;\n\n    /**\n     * @var array toolbarButtons to display in view mode.\n     */\n    protected $toolbarButtons;\n\n    /**\n     * @var string eventTarget that triggered an AJAX event (button, list)\n     */\n    protected $eventTarget;\n\n    /**\n     * @var string sessionKey used by forms for deferred bindings\n     */\n    public $sessionKey;\n\n    /**\n     * @var string relationSessionKey used for binding relations\n     */\n    public $relationSessionKey;\n\n    /**\n     * @var bool|null readOnly disables the ability to add, update, delete or create relations\n     */\n    public $readOnly = null;\n\n    /**\n     * @var bool deferredBinding defers all binding actions using a session key\n     */\n    public $deferredBinding = false;\n\n    /**\n     * @var string popupSize as, either giant, huge, large, small, tiny or adaptive\n     */\n    public $popupSize = 'huge';\n\n    /**\n     * @var string externalToolbarAppState defines a mount point for the editor toolbar.\n     * Must include a module name that exports the Vue application and a state element name.\n     * Format: stateElementName\n     * Only works in Vue applications and form document layouts.\n     */\n    public $externalToolbarAppState;\n\n    /**\n     * @var array customMessages contains default messages that you can override\n     */\n    protected $customMessages = [\n        'buttonCreate' => \"Create :name\",\n        'buttonCreateForm' => \"Create\",\n        'buttonCancelForm' => \"Cancel\",\n        'buttonCloseForm' => \"Close\",\n        'buttonUpdate' => \"Update :name\",\n        'buttonUpdateForm' => \"Update\",\n        'buttonAdd' => \"Add :name\",\n        'buttonAddMany' => \"Add Selected\",\n        'buttonAddForm' => \"Add\",\n        'buttonLink' => \"Link :name\",\n        'buttonDelete' => \"Delete\",\n        'buttonDeleteMany' => \"Delete Selected\",\n        'buttonRemove' => \"Remove\",\n        'buttonRemoveMany' => \"Remove Selected\",\n        'buttonUnlink' => \"Unlink\",\n        'buttonUnlinkMany' => \"Unlink Selected\",\n        'confirmDelete' => \"Are you sure?\",\n        'confirmUnlink' => \"Are you sure?\",\n        'titlePreviewForm' => \"Preview :name\",\n        'titleCreateForm' => \"Create :name\",\n        'titleUpdateForm' => \"Update :name\",\n        'titleLinkForm' => \"Link a New :name\",\n        'titleAddForm' => \"Add a New :name\",\n        'titlePivotForm' => \"Related :name Data\",\n        'flashCreate' => \":name Created\",\n        'flashUpdate' => \":name Updated\",\n        'flashDelete' => \":name Deleted\",\n        'flashAdd' => \":name Added\",\n        'flashLink' => \":name Linked\",\n        'flashRemove' => \":name Removed\",\n        'flashUnlink' => \":name Unlinked\",\n    ];\n\n    /**\n     * __construct the behavior\n     * @param Backend\\Classes\\Controller $controller\n     */\n    public function __construct($controller)\n    {\n        parent::__construct($controller);\n\n        // Build configuration\n        $this->setConfig($controller->relationConfig ?? [], $this->requiredConfig);\n    }\n\n    /**\n     * beforeDisplay fires before the page is displayed and AJAX is executed.\n     */\n    public function beforeDisplay()\n    {\n        $this->addJs('js/october.relation.js');\n        $this->addCss('css/relation.css');\n    }\n\n    /**\n     * validateField validates the supplied field and initializes the relation manager.\n     * @param string $field The relationship field.\n     * @return string The active field name.\n     */\n    protected function validateField($field = null)\n    {\n        $field = $field ?: post(self::PARAM_FIELD);\n\n        if ($field && $field !== $this->field) {\n            $this->initRelation($this->model, $field);\n        }\n\n        if (!$field && !$this->field) {\n            throw new ApplicationException(Lang::get('backend::lang.relation.missing_definition', compact('field')));\n        }\n\n        return $field ?: $this->field;\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['relationLabel'] = $this->config->label ?: $this->field;\n        $this->vars['relationField'] = $this->field;\n        $this->vars['relationPopupSize'] = $this->popupSize;\n        $this->vars['relationReadOnly'] = $this->readOnly;\n        $this->vars['relationType'] = $this->relationType;\n        $this->vars['relationSearchWidget'] = $this->searchWidget;\n        $this->vars['relationToolbarWidget'] = $this->toolbarWidget;\n        $this->vars['relationToolbarButtons'] = $this->toolbarButtons;\n        $this->vars['relationSessionKey'] = $this->relationSessionKey;\n        $this->vars['relationExtraConfig'] = $this->extraConfig;\n\n        // Manage\n        $this->vars['relationManageId'] = $this->manageId;\n        $this->vars['relationManageTitle'] = $this->manageTitle;\n        $this->vars['relationManageFilterWidget'] = $this->manageFilterWidget;\n        $this->vars['relationManageFormWidget'] = $this->manageFormWidget;\n        $this->vars['relationManageListWidget'] = $this->manageListWidget;\n        $this->vars['relationManageModel'] = $this->manageModel;\n        $this->vars['relationManageMode'] = $this->manageMode;\n\n        // View\n        $this->vars['relationViewFilterWidget'] = $this->viewFilterWidget;\n        $this->vars['relationViewFormWidget'] = $this->viewFormWidget;\n        $this->vars['relationViewListWidget'] = $this->viewListWidget;\n        $this->vars['relationViewModel'] = $this->viewModel;\n        $this->vars['relationViewMode'] = $this->viewMode;\n\n        // Pivot\n        $this->vars['relationPivotId'] = $this->pivotId;\n        $this->vars['relationPivotTitle'] = $this->pivotTitle;\n        $this->vars['relationPivotWidget'] = $this->pivotWidget;\n\n        // Misc\n        $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState;\n        $this->vars['formSessionKey'] = post('_form_session_key', post('_session_key', FormHelper::getSessionKey()));\n\n        // @deprecated\n        $this->vars['relationManageWidget'] = $this->relationGetManageWidget();\n        $this->vars['relationViewWidget'] = $this->relationGetViewWidget();\n    }\n\n    /**\n     * beforeAjax is needed because each AJAX request must initialize the\n     * relation's field name (_relation_field).\n     */\n    protected function beforeAjax()\n    {\n        if ($this->initialized) {\n            return;\n        }\n\n        if ($fatalError = $this->controller->getFatalError()) {\n            throw new ApplicationException($fatalError);\n        }\n\n        $this->validateField();\n        $this->setExtraConfigForChain();\n        $this->prepareVars();\n        $this->initialized = true;\n    }\n\n    //\n    // Interface\n    //\n\n    /**\n     * initRelation prepares the widgets used by this behavior\n     * @param Model $model\n     * @param string $field\n     * @return void\n     */\n    public function initRelation($model, $field = null)\n    {\n        if ($extraConfig = post(self::PARAM_EXTRA_CONFIG)) {\n            $this->setExtraConfig($extraConfig);\n            $this->initNestedRelation($model, $field);\n        }\n\n        $this->initRelationInternal($model, $field);\n    }\n\n    /**\n     * initRelationInternal is an internal method for initRelation\n     * @param Model $model\n     * @param string $field\n     * @return void\n     */\n    protected function initRelationInternal($model, $field = null)\n    {\n        if ($this->originalConfig === null) {\n            $this->originalConfig = $this->controller->relationGetConfig();\n        }\n\n        if ($field === null) {\n            $field = post(self::PARAM_FIELD);\n        }\n\n        $this->config = $this->originalConfig;\n        $this->model = $model;\n        $this->field = $field;\n\n        if (!$field) {\n            return;\n        }\n\n        if (!$this->model) {\n            throw new ApplicationException(Lang::get('backend::lang.relation.missing_model', [\n                'class' => get_class($this->controller),\n            ]));\n        }\n\n        if (!$this->model instanceof Model) {\n            throw new ApplicationException(Lang::get('backend::lang.model.invalid_class', [\n                'model' => get_class($this->model),\n                'class' => get_class($this->controller),\n            ]));\n        }\n\n        // Configuration details\n        if (!$this->relationHasField($field)) {\n            throw new ApplicationException(Lang::get('backend::lang.relation.missing_definition', compact('field')));\n        }\n\n        $this->applyExtraConfig($field);\n        $this->alias = camel_case('relation ' . HtmlHelper::nameToId($field));\n        $this->config = $this->makeConfig($this->originalConfig->{$field}, $this->requiredRelationProperties);\n        $this->controller->relationExtendConfig($this->config, $this->field, $this->model);\n        $this->manageId = $this->getManageIdForField($field);\n        $this->pivotId = post('pivot_id');\n        $this->foreignId = post('foreign_id');\n        [$this->sessionKey, $this->relationSessionKey] = $this->getSessionKeysForField($field);\n\n        // Relationship details\n        [$nestedModel, $nestedField] = $this->makeNestedRelationModel($this->model, $this->config->valueFrom ?? $field);\n        if (!$nestedModel->hasRelation($nestedField)) {\n            throw new ApplicationException(Lang::get('backend::lang.model.missing_relation', ['class' => get_class($nestedModel), 'relation' => $nestedField]));\n        }\n\n        $this->relationParent = $nestedModel;\n        $this->relationName = $nestedField;\n        $this->relationType = $nestedModel->getRelationType($nestedField);\n        $this->relationObject = $nestedModel->{$nestedField}();\n        $this->relationModel = $this->relationObject instanceof HasOneOrMany\n            ? $this->relationObject->make()\n            : $this->relationObject->getRelated();\n\n        $this->readOnly = $this->getConfig('readOnly');\n        $this->popupSize = $this->getConfig('popupSize', 950);\n        $this->externalToolbarAppState = $this->getConfig('externalToolbarAppState');\n        $this->eventTarget = $this->evalEventTarget();\n        $this->deferredBinding = $this->evalDeferredBinding();\n        $this->viewMode = $this->evalViewMode();\n        $this->manageMode = $this->evalManageMode();\n        $this->manageTitle = $this->evalManageTitle();\n        $this->pivotTitle = $this->evalPivotTitle();\n        $this->toolbarButtons = $this->evalToolbarButtons();\n\n        // Toolbar widget\n        if ($this->toolbarWidget = $this->makeToolbarWidget()) {\n            $this->toolbarWidget->bindToController();\n        }\n\n        // Search widget\n        if ($this->searchWidget = $this->makeSearchWidget()) {\n            $this->searchWidget->bindToController();\n        }\n\n        // View widgets\n        if ($this->viewFilterWidget = $this->makeFilterWidgetFor('view')) {\n            $this->controller->relationExtendViewFilterWidget($this->viewFilterWidget, $this->field, $this->model);\n            $this->viewFilterWidget->bindToController();\n        }\n\n        if ($this->viewListWidget = $this->makeViewListWidget()) {\n            $this->controller->relationExtendViewListWidget($this->viewListWidget, $this->field, $this->model);\n            $this->controller->relationExtendViewWidget($this->viewListWidget, $this->field, $this->model);\n            $this->viewListWidget->bindToController();\n        }\n\n        if ($this->viewFormWidget = $this->makeViewFormWidget()) {\n            $this->controller->relationExtendViewFormWidget($this->viewFormWidget, $this->field, $this->model);\n            $this->controller->relationExtendViewWidget($this->viewFormWidget, $this->field, $this->model);\n            $this->viewFormWidget->bindToController();\n        }\n\n        // Manage widgets\n        if ($this->manageFilterWidget = $this->makeFilterWidgetFor('manage')) {\n            $this->controller->relationExtendManageFilterWidget($this->manageFilterWidget, $this->field, $this->model);\n            $this->manageFilterWidget->bindToController();\n        }\n\n        if ($this->manageListWidget = $this->makeManageListWidget()) {\n            $this->controller->relationExtendManageListWidget($this->manageListWidget, $this->field, $this->model);\n            $this->controller->relationExtendManageWidget($this->manageListWidget, $this->field, $this->model);\n            $this->manageListWidget->bindToController();\n        }\n\n        if ($this->manageFormWidget = $this->makeManageFormWidget()) {\n            $this->controller->relationExtendManageFormWidget($this->manageFormWidget, $this->field, $this->model);\n            $this->controller->relationExtendManageWidget($this->manageFormWidget, $this->field, $this->model);\n            $this->manageFormWidget->bindToController();\n        }\n\n        // Pivot widget\n        if ($this->pivotWidget = $this->makePivotFormWidget()) {\n            $this->controller->relationExtendPivotFormWidget($this->pivotWidget, $this->field, $this->model);\n            $this->controller->relationExtendPivotWidget($this->pivotWidget, $this->field, $this->model);\n            $this->pivotWidget->bindToController();\n        }\n    }\n\n    /**\n     * relationHasField\n     */\n    public function relationHasField(string $field): bool\n    {\n        if ($this->originalConfig === null) {\n            $this->config = $this->originalConfig = $this->controller->relationGetConfig();\n        }\n\n        return (bool) ($this->originalConfig->{$field} ?? false);\n    }\n\n    /**\n     * relationRegisterField registers a new relation dynamically\n     */\n    public function relationRegisterField(string $relationName, array $config)\n    {\n        if ($this->originalConfig === null) {\n            $this->config = $this->originalConfig = $this->controller->relationGetConfig();\n        }\n\n        $this->originalConfig->{$relationName} = $config;\n    }\n\n    /**\n     * relationRender renders the relationship manager.\n     * @param string $field The relationship field.\n     * @param array $options\n     * @return string Rendered HTML for the relationship manager.\n     */\n    public function relationRender($field = null, $options = [])\n    {\n        if ($field === null) {\n            $field = $this->field;\n        }\n\n        // Session key\n        if (is_string($options)) {\n            $options = ['sessionKey' => $options];\n        }\n\n        if (isset($options['sessionKey'])) {\n            $this->sessionKey = $options['sessionKey'];\n        }\n\n        // Apply options and extra config\n        $allowConfig = ['readOnly', 'readOnlyDefault', 'recordUrl', 'recordOnClick'];\n        $extraConfig = array_only($options, $allowConfig);\n        $this->setExtraConfigForRender($extraConfig);\n        $this->applyExtraConfig($field);\n\n        // Initialize\n        $this->validateField($field);\n        $this->prepareVars();\n\n        // Determine the partial to use based on the supplied section option\n        $section = strtolower($options['section'] ?? '');\n        return match ($section) {\n            'toolbar' => $this->toolbarWidget?->render(),\n            'view' => $this->relationMakePartial('view'),\n            default => $this->relationMakePartial('container'),\n        };\n    }\n\n    /**\n     * relationRefresh refreshes the relation container only, useful for returning in custom AJAX requests.\n     * @param  string $field Relation definition.\n     * @return array The relation element selector as the key, and the relation view contents are the value.\n     */\n    public function relationRefresh($field = null)\n    {\n        $field = $this->validateField($field);\n\n        $result = ['#'.$this->relationGetId('view') => $this->relationRenderView($field)];\n        if ($toolbar = $this->relationRenderToolbar($field)) {\n            $result['#'.$this->relationGetId('toolbar')] = $toolbar;\n        }\n\n        if ($eventResult = $this->controller->relationExtendRefreshResults($field)) {\n            $result = $eventResult + $result;\n        }\n\n        return $result;\n    }\n\n    /**\n     * relationRenderToolbar renders the toolbar only.\n     * @param string $field The relationship field.\n     * @return string Rendered HTML for the toolbar.\n     */\n    public function relationRenderToolbar($field = null)\n    {\n        return $this->relationRender($field, ['section' => 'toolbar']);\n    }\n\n    /**\n     * relationRenderView renders the view only.\n     * @param string $field The relationship field.\n     * @return string Rendered HTML for the view.\n     */\n    public function relationRenderView($field = null)\n    {\n        return $this->relationRender($field, ['section' => 'view']);\n    }\n\n    /**\n     * relationMakePartial is a controller accessor for making partials within this behavior.\n     * @param string $partial\n     * @param array $params\n     * @return string Partial contents\n     */\n    public function relationMakePartial($partial, $params = [])\n    {\n        $contents = $this->controller->makePartial('relation_'.$partial, $params + $this->vars, false);\n        if (!$contents) {\n            $contents = $this->makePartial($partial, $params);\n        }\n\n        return $contents;\n    }\n\n    /**\n     * relationGetId returns a unique ID for this relation and field combination.\n     * @param string $suffix A suffix to use with the identifier.\n     * @return string\n     */\n    public function relationGetId($suffix = null)\n    {\n        $id = class_basename($this);\n        if ($this->field) {\n            $id .= '-' . HtmlHelper::nameToId($this->field);\n        }\n\n        if ($suffix !== null) {\n            $id .= '-' . $suffix;\n        }\n\n        return $this->controller->getId($id);\n    }\n\n    /**\n     * relationGetSessionKey returns the active session key for relation binding.\n     */\n    public function relationGetSessionKey()\n    {\n        return $this->relationSessionKey;\n    }\n\n    /**\n     * relationGetConfig returns the configuration used by this behavior. You may override this\n     * method in your controller as an alternative to defining a relationConfig property.\n     * @return object\n     */\n    public function relationGetConfig()\n    {\n        return $this->config;\n    }\n\n    /**\n     * relationGetMessage is a public API for accessing custom messages\n     */\n    public function relationGetMessage(string $code): string\n    {\n        return $this->getCustomLang($code);\n    }\n\n    //\n    // Widgets\n    //\n\n    /**\n     * makeFilterWidgetFor\n     * @param $type string Either 'manage' or 'view'\n     * @return \\Backend\\Classes\\WidgetBase|null\n     */\n    protected function makeFilterWidgetFor($type)\n    {\n        if (!$this->getConfig($type . '[filter]')) {\n            return null;\n        }\n\n        $filterConfig = $this->makeConfig($this->getConfig(\"{$type}[filter]\"));\n        $filterConfig->model = $this->relationModel;\n        $filterConfig->alias = $this->alias . ucfirst($type) . 'Filter';\n        $filterConfig->customPageName = $this->getConfig(\"{$type}[customPageName]\", false);\n        $filterWidget = $this->makeWidget(\\Backend\\Widgets\\Filter::class, $filterConfig);\n\n        return $filterWidget;\n    }\n\n    /**\n     * makeToolbarWidget\n     */\n    protected function makeToolbarWidget()\n    {\n        $defaultConfig = [];\n\n        // Add buttons to toolbar\n        $defaultButtons = null;\n\n        if (!$this->readOnly && $this->toolbarButtons) {\n            $defaultButtons = '~/modules/backend/behaviors/relationcontroller/partials/_toolbar.php';\n        }\n\n        $defaultConfig['buttons'] = $this->getConfig('view[toolbarPartial]', $defaultButtons);\n\n        // Make config\n        $toolbarConfig = $this->makeConfig($this->getConfig('toolbar', $defaultConfig));\n        $toolbarConfig->alias = $this->alias . 'Toolbar';\n\n        // Add search to toolbar\n        $useSearch = $this->viewMode === 'multi' && $this->getConfig('view[showSearch]');\n\n        if ($useSearch) {\n            $toolbarConfig->search = [\n                'prompt' => 'backend::lang.list.search_prompt'\n            ];\n        }\n\n        // No buttons, no search should mean no toolbar\n        if (empty($toolbarConfig->search) && empty($toolbarConfig->buttons)) {\n            return;\n        }\n\n        $toolbarWidget = $this->makeWidget(\\Backend\\Widgets\\Toolbar::class, $toolbarConfig);\n        $toolbarWidget->cssClasses[] = 'list-header';\n\n        return $toolbarWidget;\n    }\n\n    /**\n     * makeSearchWidget\n     */\n    protected function makeSearchWidget()\n    {\n        if (!$this->getConfig('manage[showSearch]')) {\n            return null;\n        }\n\n        $config = $this->makeConfig();\n        $config->alias = $this->alias . 'ManageSearch';\n        $config->growable = false;\n        $config->prompt = 'backend::lang.list.search_prompt';\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Search::class, $config);\n        $widget->cssClasses[] = 'recordfinder-search';\n\n        // Persist the search term across AJAX requests only\n        if (!Request::ajax()) {\n            $widget->setActiveTerm(null);\n        }\n\n        return $widget;\n    }\n\n    //\n    // Helpers\n    //\n\n    /**\n     * findExistingRelationIds returns the existing record IDs for the relation.\n     */\n    protected function findExistingRelationIds($checkIds = null)\n    {\n        $foreignKeyName = $this->relationModel->getQualifiedKeyName();\n\n        $results = $this->relationObject\n            ->getBaseQuery()\n            ->select($foreignKeyName);\n\n        if ($checkIds !== null && is_array($checkIds) && count($checkIds)) {\n            $results = $results->whereIn($foreignKeyName, $checkIds);\n        }\n\n        return $results->pluck($foreignKeyName)->all();\n    }\n\n    /**\n     * evalDeferredBinding\n     */\n    protected function evalDeferredBinding(): bool\n    {\n        if ($this->relationType === 'hasManyThrough') {\n            return false;\n        }\n\n        return $this->getConfig('deferredBinding') || !$this->relationParent->exists;\n    }\n\n    /**\n     * evalToolbarButtons determines the default buttons based on the model relationship type.\n     */\n    protected function evalToolbarButtons(): array\n    {\n        $buttons = $this->getConfig('view[toolbarButtons]');\n\n        if ($buttons === false) {\n            return [];\n        }\n        elseif (is_string($buttons)) {\n            return array_map('trim', explode('|', $buttons));\n        }\n        elseif (is_array($buttons)) {\n            return $buttons;\n        }\n\n        if ($this->manageMode === 'pivot') {\n            return ['add', 'remove'];\n        }\n\n        switch ($this->relationType) {\n            case 'hasMany':\n            case 'morphMany':\n                return ['create', 'delete'];\n\n            case 'belongsToMany':\n            case 'morphedByMany':\n            case 'morphToMany':\n                return ['create', 'add', 'delete', 'remove'];\n\n            case 'hasOne':\n            case 'morphOne':\n            case 'belongsTo':\n                return ['create', 'update', 'link', 'delete', 'unlink'];\n\n            case 'hasManyThrough':\n                return [];\n        }\n\n        return [];\n    }\n\n    /**\n     * evalFormContext determines supplied form context\n     */\n    protected function evalFormContext($mode = 'manage', $exists = false)\n    {\n        $config = $this->config->{$mode} ?? [];\n\n        $context = FormField::CONTEXT_CREATE;\n\n        if ($exists) {\n            $context = FormField::CONTEXT_UPDATE;\n        }\n\n        if ($this->readOnly) {\n            $context = FormField::CONTEXT_PREVIEW;\n        }\n\n        if ($configContext = array_get($config, 'context')) {\n            $context = is_array($configContext)\n                ? array_get($configContext, $context, $context)\n                : $configContext;\n        }\n\n        return $context;\n    }\n\n    /**\n     * makeConfigForMode returns the configuration for a mode (view, manage, pivot) for an\n     * expected type (list, form) and uses fallback configuration\n     */\n    protected function makeConfigForMode($mode = 'view', $type = 'list')\n    {\n        $config = null;\n\n        // Look for $this->config->view['list']\n        if (\n            isset($this->config->{$mode}) &&\n            array_key_exists($type, $this->config->{$mode})\n        ) {\n            $config = $this->config->{$mode}[$type];\n        }\n        // Look for $this->config->list\n        elseif (isset($this->config->{$type})) {\n            $config = $this->config->{$type};\n        }\n\n        // Apply substitutes:\n        // - view.list => manage.list\n        if ($config === null) {\n            if ($mode === 'manage' && $type === 'list') {\n                return $this->makeConfigForMode('view', $type);\n            }\n\n            return false;\n        }\n\n        return $this->makeConfig($config);\n    }\n\n    /**\n     * getCustomLang parses custom messages provided by the config\n     */\n    protected function getCustomLang(string $name, ?string $default = null, array $extras = []): string\n    {\n        $foundKey = $this->getConfig(\"customMessages[{$name}]\");\n\n        if ($foundKey === null) {\n            $foundKey = $this->originalConfig->customMessages[$name] ?? null;\n        }\n\n        if ($foundKey === null) {\n            $foundKey = $default;\n        }\n\n        if ($foundKey === null) {\n            $foundKey = $this->customMessages[$name] ?? '???';\n        }\n\n        $vars = $extras + [\n            'name' => Lang::get($this->getConfig('label', $this->field))\n        ];\n\n        return Lang::get($foundKey, $vars);\n    }\n\n    /**\n     * showFlashMessage displays a flash message if its found\n     */\n    protected function showFlashMessage(string $message): void\n    {\n        if (!$this->useFlashMessages()) {\n            return;\n        }\n\n        if ($message = $this->getCustomLang($message)) {\n            Flash::success($message);\n        }\n    }\n\n    /**\n     * useFlashMessages determines if flash messages should be used\n     */\n    protected function useFlashMessages(): bool\n    {\n        $useFlash = $this->getConfig('showFlash');\n\n        if ($useFlash === null) {\n            $useFlash = $this->originalConfig->showFlash ?? null;\n        }\n\n        if ($useFlash === null) {\n            $useFlash = true;\n        }\n\n        return $useFlash;\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/ReorderController.php",
    "content": "<?php namespace Backend\\Behaviors;\n\nuse Lang;\nuse Backend;\nuse ApplicationException;\nuse Backend\\Classes\\ControllerBehavior;\n\n/**\n * ReorderController is deprecated\n * @deprecated see ListController with structure config\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ReorderController extends ControllerBehavior\n{\n    /**\n     * @inheritDoc\n     */\n    protected $requiredProperties = ['reorderConfig'];\n\n    /**\n     * @var array Configuration values that must exist when applying the primary config file.\n     */\n    protected $requiredConfig = ['modelClass'];\n\n    /**\n     * @var array Visible actions in context of the controller\n     */\n    protected $actions = ['reorder'];\n\n    /**\n     * @var Model Import model\n     */\n    public $model;\n\n    /**\n     * @var string Model attribute to use for the display name\n     */\n    public $nameFrom = 'name';\n\n    /**\n     * @var bool Display parent/child relationships in the list.\n     */\n    protected $showTree = false;\n\n    /**\n     * @var string Reordering mode.\n     * - simple: October\\Rain\\Database\\Traits\\Sortable\n     * - nested: October\\Rain\\Database\\Traits\\NestedTree\n     */\n    protected $sortMode;\n\n    /**\n     * @var Backend\\Classes\\WidgetBase Reference to the widget used for the toolbar.\n     */\n    protected $toolbarWidget;\n\n    /**\n     * __construct the behavior\n     * @param Backend\\Classes\\Controller $controller\n     */\n    public function __construct($controller)\n    {\n        parent::__construct($controller);\n\n        /*\n         * Build configuration\n         */\n        $this->config = $this->makeConfig($this->controller->reorderConfig, $this->requiredConfig);\n\n        /*\n         * Populate from config\n         */\n        $this->nameFrom = $this->getConfig('nameFrom', $this->nameFrom);\n    }\n\n    /**\n     * beforeDisplay fires before the page is displayed and AJAX is executed.\n     */\n    public function beforeDisplay()\n    {\n        /*\n         * Widgets\n         */\n        if ($this->toolbarWidget = $this->makeToolbarWidget()) {\n            $this->toolbarWidget->bindToController();\n        }\n    }\n\n    //\n    // Controller actions\n    //\n\n    public function reorder()\n    {\n        $this->addJs('js/october.reorder.js');\n\n        $this->controller->pageTitle = $this->controller->pageTitle\n            ?: Lang::get($this->getConfig('title', 'backend::lang.reorder.default_title'));\n\n        $this->validateModel();\n        $this->prepareVars();\n    }\n\n    //\n    // AJAX\n    //\n\n    public function onReorder()\n    {\n        $model = $this->validateModel();\n\n        /*\n         * Simple\n         */\n        if ($this->sortMode == 'simple') {\n            if (\n                (!$ids = post('record_ids')) ||\n                (!$orders = post('sort_orders'))\n            ) {\n                return;\n            }\n\n            $model->setSortableOrder($ids, $orders);\n        }\n        /*\n         * Nested set\n         */\n        elseif ($this->sortMode == 'nested') {\n            $sourceNode = $model->find(post('sourceNode'));\n            $targetNode = post('targetNode') ? $model->find(post('targetNode')) : null;\n\n            if ($sourceNode == $targetNode) {\n                return;\n            }\n\n            switch (post('position')) {\n                case 'before':\n                    $sourceNode->moveBefore($targetNode);\n                    break;\n\n                case 'after':\n                    $sourceNode->moveAfter($targetNode);\n                    break;\n\n                case 'child':\n                    $sourceNode->makeChildOf($targetNode);\n                    break;\n\n                default:\n                    $sourceNode->makeRoot();\n                    break;\n            }\n        }\n    }\n\n    //\n    // Reordering\n    //\n\n    /**\n     * Prepares common form data\n     */\n    protected function prepareVars()\n    {\n        $this->vars['reorderRecords'] = $this->getRecords();\n        $this->vars['reorderModel'] = $this->model;\n        $this->vars['reorderSortMode'] = $this->sortMode;\n        $this->vars['reorderShowTree'] = $this->showTree;\n        $this->vars['reorderToolbarWidget'] = $this->toolbarWidget;\n    }\n\n    public function reorderRender()\n    {\n        return $this->reorderMakePartial('container');\n    }\n\n    public function reorderGetModel()\n    {\n        if ($this->model !== null) {\n            return $this->model;\n        }\n\n        $modelClass = $this->getConfig('modelClass');\n\n        if (!$modelClass) {\n            throw new ApplicationException('Please specify the modelClass property for reordering');\n        }\n\n        return $this->model = new $modelClass;\n    }\n\n    /**\n     * Returns the display name for a record.\n     * @return string\n     */\n    public function reorderGetRecordName($record)\n    {\n        return $record->{$this->nameFrom};\n    }\n\n    /**\n     * validateModel validates the supplied form model.\n     */\n    protected function validateModel()\n    {\n        $model = $this->controller->reorderGetModel();\n        $modelTraits = class_uses($model);\n\n        if (isset($modelTraits[\\October\\Rain\\Database\\Traits\\Sortable::class])) {\n            $this->sortMode = 'simple';\n        }\n        elseif (isset($modelTraits[\\October\\Rain\\Database\\Traits\\NestedTree::class])) {\n            $this->sortMode = 'nested';\n            $this->showTree = true;\n        }\n        else {\n            throw new ApplicationException('The model must implement the NestedTree or Sortable traits.');\n        }\n\n        return $model;\n    }\n\n    /**\n     * Returns all the records from the supplied model.\n     * @return Collection\n     */\n    protected function getRecords()\n    {\n        $records = null;\n        $model = $this->controller->reorderGetModel();\n        $query = $model->newQuery();\n\n        $this->controller->reorderExtendQuery($query);\n\n        if ($this->sortMode == 'simple') {\n            $records = $query\n                ->orderBy($model->getSortOrderColumn())\n                ->get()\n            ;\n        }\n        elseif ($this->sortMode == 'nested') {\n            $records = $query->getNested();\n        }\n\n        return $records;\n    }\n\n    /**\n     * Extend the query used for finding reorder records. Extra conditions\n     * can be applied to the query, for example, $query->withTrashed();\n     * @param October\\Rain\\Database\\Builder $query\n     * @return void\n     */\n    public function reorderExtendQuery($query)\n    {\n    }\n\n    //\n    // Widgets\n    //\n\n    protected function makeToolbarWidget()\n    {\n        if ($toolbarConfig = $this->getConfig('toolbar')) {\n            $toolbarConfig = $this->makeConfig($toolbarConfig);\n            $toolbarWidget = $this->makeWidget(\\Backend\\Widgets\\Toolbar::class, $toolbarConfig);\n        }\n        else {\n            $toolbarWidget = null;\n        }\n\n        return $toolbarWidget;\n    }\n\n    //\n    // Helpers\n    //\n\n    /**\n     * Controller accessor for making partials within this behavior.\n     * @param string $partial\n     * @param array $params\n     * @return string Partial contents\n     */\n    public function reorderMakePartial($partial, $params = [])\n    {\n        $contents = $this->controller->makePartial(\n            'reorder_' . $partial,\n            $params + $this->vars,\n            false\n        );\n\n        if (!$contents) {\n            $contents = $this->makePartial($partial, $params);\n        }\n\n        return $contents;\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/UserPreferencesModel.php",
    "content": "<?php namespace Backend\\Behaviors;\n\nuse System\\Behaviors\\SettingsModel;\nuse Backend\\Models\\UserPreference;\n\n/**\n * UserPreferencesModel extension, identical to System\\Behaviors\\SettingsModel\n * except values are set against the logged in user's preferences via Backend\\Models\\UserPreference\n *\n * Add this the model class definition:\n *\n *     public $implement = [\\Backend\\Behaviors\\UserPreferencesModel::class];\n *     public $settingsCode = 'author.plugin::code';\n *     public $settingsFields = 'fields.yaml';\n *\n * @todo This class will be deprecated soon\n * @see Backend\\Models\\UserPreferenceModel\n */\nclass UserPreferencesModel extends SettingsModel\n{\n    /**\n     * @var array Internal cache of model objects.\n     */\n    private static $instances = [];\n\n    /**\n     * Constructor\n     */\n    public function __construct($model)\n    {\n        parent::__construct($model);\n\n        $this->model->setTable('backend_user_preferences');\n    }\n\n    /**\n     * Create an instance of the settings model, intended as a static method\n     */\n    public function instance()\n    {\n        if (isset(self::$instances[$this->recordCode])) {\n            return self::$instances[$this->recordCode];\n        }\n\n        $item = $this->getSettingsRecord();\n        if (!$item) {\n            $this->model->initSettingsData();\n            $item = $this->model;\n        }\n\n        return self::$instances[$this->recordCode] = $item;\n    }\n\n    /**\n     * Checks if the model has been set up previously, intended as a static method\n     */\n    public function isConfigured()\n    {\n        return $this->getSettingsRecord() !== null;\n    }\n\n    /**\n     * Returns the raw Model record that stores the settings.\n     * @return Model\n     */\n    public function getSettingsRecord()\n    {\n        $item = UserPreference::forUser();\n        $record = $item\n            ->scopeApplyKeyAndUser($this->model, $this->recordCode, $item->userContext)\n            ->remember(1440, $this->getCacheKey())\n            ->first();\n\n        return $record ?: null;\n    }\n\n    /**\n     * Before the model is saved, ensure the record code is set\n     * and the jsonable field values\n     */\n    public function beforeModelSave()\n    {\n        $preferences = UserPreference::forUser();\n        [$namespace, $group, $item] = $preferences->parseKey($this->recordCode);\n        $this->model->item = $item;\n        $this->model->group = $group;\n        $this->model->namespace = $namespace;\n        $this->model->user_id = $preferences->userContext->id;\n\n        if ($this->fieldValues) {\n            $this->model->value = $this->fieldValues;\n        }\n    }\n\n    /**\n     * Checks if a key is legitimate or should be added to\n     * the field value collection\n     */\n    protected function isKeyAllowed($key)\n    {\n        /*\n         * Let the core columns through\n         */\n        if ($key == 'namespace' || $key == 'group') {\n            return true;\n        }\n\n        return parent::isKeyAllowed($key);\n    }\n\n    /**\n     * Returns a cache key for this record.\n     */\n    protected function getCacheKey()\n    {\n        $item = UserPreference::forUser();\n        $userId = $item->userContext ? $item->userContext->id : 0;\n        return $this->recordCode.'-userpreference-'.$userId;\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/HasFormDesigns.php",
    "content": "<?php namespace Backend\\Behaviors\\FormController;\n\nuse Backend;\nuse ApplicationException;\n\n/**\n * HasFormDesigns\n */\ntrait HasFormDesigns\n{\n    /**\n     * getDesignDisplayMode returns the display mode taken from the form configuration,\n     * defaults to `basic` display mode.\n     */\n    protected function getDesignDisplayMode()\n    {\n        return $this->getConfig(\n            \"{$this->context}[design][displayMode]\",\n            $this->getConfig('design[displayMode]')\n        ) ?: 'basic';\n    }\n\n    /**\n     * getDesignFormSize returns the page size taken from the form configuration,\n     * can also specify a custom configuration name, e.g. `sidebarSize`.\n     */\n    protected function getDesignFormSize($name = 'size')\n    {\n        $value = $this->getConfig(\n            \"{$this->context}[design][{$name}]\",\n            $this->getConfig(\"design[{$name}]\")\n        ) ?: 'auto';\n\n        return Backend::sizeToPixels($value) ?: null;\n    }\n\n    /**\n     * getDesignBodyClass\n     */\n    protected function getDesignBodyClass()\n    {\n        if ($this->getDesignDisplayMode() === 'sidebar') {\n            return 'compact-container';\n        }\n\n        return null;\n    }\n\n    /**\n     * isHorizontalForm\n     */\n    protected function isHorizontalForm(): bool\n    {\n        if ($this->getConfig(\"{$this->context}[design][horizontalMode]\", $this->getConfig('design[horizontalMode]'))) {\n            return true;\n        }\n\n        return $this->getDesignDisplayMode() === 'survey';\n    }\n\n    /**\n     * isSurveyDesign\n     */\n    protected function isSurveyDesign(): bool\n    {\n        if ($this->getConfig(\"{$this->context}[design][surveyMode]\", $this->getConfig('design[surveyMode]'))) {\n            return true;\n        }\n\n        return $this->getDesignDisplayMode() === 'survey';\n    }\n\n    /**\n     * isPopupDesign\n     */\n    protected function isPopupDesign(): bool\n    {\n        return $this->getDesignDisplayMode() === 'popup';\n    }\n\n    /**\n     * beforeDisplayPopup\n     */\n    protected function beforeDisplayPopup()\n    {\n        $updateId = $this->getPopupFormRecordId();\n\n        // Emulate the form action\n        if (post('form_popup_flag')) {\n            if ($updateId) {\n                $this->update($updateId);\n            }\n            else {\n                $this->create();\n            }\n            return;\n        }\n\n        // Initialize the model for relation AJAX requests inside popup forms\n        // this is needed since bindToPopups doesn't propagate far enough, so\n        // this could be removed if that ability was improved to go further.\n        if ($this->controller->isClassExtendedWith(\\Backend\\Behaviors\\RelationController::class)) {\n            $this->controller->initRelation($this->controller->formCreateModelObject());\n        }\n    }\n\n    /**\n     * hidePopupDesign\n     */\n    protected function hidePopupDesign()\n    {\n        $this->extensionHideMethod('index_onPopupLoadForm');\n        $this->extensionHideMethod('index_onPopupSave');\n        $this->extensionHideMethod('index_onPopupDelete');\n        $this->extensionHideMethod('index_onPopupCancel');\n    }\n\n    /**\n     * index_onPopupLoadForm\n     */\n    public function index_onLoadPopupForm()\n    {\n        if (!$this->isPopupDesign()) {\n            throw new ApplicationException(__(\"This form is not using a popup design.\"));\n        }\n\n        if ($id = $this->getPopupFormRecordId()) {\n            $this->update($id);\n            $this->vars['popupTitle'] = $this->getLang('update[title]', 'backend::lang.form.update_title');\n            $this->vars['recordId'] = $id;\n        }\n        else {\n            $this->create();\n            $this->vars['popupTitle'] = $this->getLang('create[title]', 'backend::lang.form.create_title');\n        }\n\n        $this->vars['popupSize'] = $this->controller->pageSize;\n        return $this->formRenderDesign();\n    }\n\n    /**\n     * index_onSave\n     */\n    public function index_onPopupSave()\n    {\n        if ($id = $this->getPopupFormRecordId()) {\n            $this->update_onSave($id);\n        }\n        else {\n            $this->create_onSave();\n        }\n\n        return $this->controller->listRefresh();\n    }\n\n    /**\n     * index_onPopupCancel\n     */\n    public function index_onPopupCancel()\n    {\n        if ($id = $this->getPopupFormRecordId()) {\n            $this->update_onCancel($id);\n        }\n        else {\n            $this->create_onCancel();\n        }\n    }\n\n    /**\n     * index_onPopupDelete\n     */\n    public function index_onPopupDelete()\n    {\n        if ($id = $this->getPopupFormRecordId()) {\n            $this->update_onDelete($id);\n        }\n\n        return $this->controller->listRefresh();\n    }\n\n    /**\n     * getPopupFormRecordId returns the target identifier for the record,\n     * contained within the `form_record_id` postback value. The value is\n     * decoded since HTML attributes are escaped and it may be a string.\n     */\n    protected function getPopupFormRecordId(): string\n    {\n        return urldecode((string) post('form_record_id'));\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/HasMultisite.php",
    "content": "<?php namespace Backend\\Behaviors\\FormController;\n\nuse Site;\n\n/**\n * HasMultisite contains logic for managing multisite records\n */\ntrait HasMultisite\n{\n    /**\n     * formHasMultisite\n     */\n    public function formHasMultisite($model)\n    {\n        return $model &&\n            $model->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n            $model->isMultisiteEnabled();\n    }\n\n    /**\n     * makeMultisiteRedirect\n     */\n    public function makeMultisiteRedirect($context = null, $model = null)\n    {\n        if (!$model || !$this->controller->formHasMultisite($model)) {\n            return;\n        }\n\n        $activeSiteId = Site::getSiteIdFromContext();\n        if ((int) $model->site_id === (int) $activeSiteId) {\n            return;\n        }\n\n        $otherModel = $model->findOrCreateForSite($activeSiteId);\n\n        return $this->makeRedirect($context, $otherModel, ['_site_id' => $activeSiteId]);\n    }\n\n    /**\n     * onSwitchSite\n     */\n    public function onSwitchSite($recordId = null)\n    {\n        $result = [];\n\n        $siteId = post('site_id');\n        $model = $this->controller->formFindModelObject($recordId);\n        if (!$siteId || !$model) {\n            return $result;\n        }\n\n        $otherModel = $model->findForSite($siteId);\n\n        // Model missing or trashed\n        $showConfirm = !$otherModel || (\n            $otherModel->isClassInstanceOf(\\October\\Contracts\\Database\\SoftDeleteInterface::class) &&\n            $otherModel->trashed()\n        );\n\n        if ($showConfirm) {\n            $result['confirm'] = __('A record does not exist for the selected site. Create one?');\n        }\n\n        return $result;\n    }\n\n    /**\n     * addHandlerToSiteSwitcher\n     */\n    protected function addHandlerToSiteSwitcher()\n    {\n        $siteSwitcher = $this->getWidget('siteSwitcher');\n        if (!$siteSwitcher) {\n            return;\n        }\n\n        $siteSwitcher->setSwitchHandler('onSwitchSite');\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/HasMultisiteGroup.php",
    "content": "<?php namespace Backend\\Behaviors\\FormController;\n\n/**\n * HasMultisiteGroup contains logic for managing multisite group records.\n *\n * Unlike HasMultisite which handles per-site record switching, this concern\n * handles models scoped by site_group_id (tenant). The site group\n * context determines which records are visible, and language/translation\n * is handled separately by the Translate plugin.\n */\ntrait HasMultisiteGroup\n{\n    /**\n     * formHasMultisiteGroup checks if a model uses site group scoping\n     */\n    public function formHasMultisiteGroup($model)\n    {\n        return $model &&\n            $model->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteGroupInterface::class) &&\n            $model->isMultisiteGroupEnabled();\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/HasOverrides.php",
    "content": "<?php namespace Backend\\Behaviors\\FormController;\n\nuse Backend;\n\n/**\n * HasOverrides in the controller\n */\ntrait HasOverrides\n{\n    /**\n     * formGetRedirectUrl returns a URL based on supplied context,\n     * relative URLs are treated as backend URLs\n     * @param string $context\n     * @param \\Model $model\n     * @return string\n     */\n    public function formGetRedirectUrl($context = null, $model = null)\n    {\n    }\n\n    /**\n     * formBeforeSave is called before the creation or updating form is saved\n     * @param \\Model\n     */\n    public function formBeforeSave($model)\n    {\n        /**\n         * @event backend.form.beforeSave\n         * Called before the form model is saved\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.beforeSave', function ((\\Backend\\Classes\\Controller) $controller, (\\Model) $model) {\n         *         $model->slug = Str::slug($model->name);\n         *     });\n         *\n         */\n    }\n\n    /**\n     * formAfterSave is called after the creation or updating form is saved\n     * @param \\Model\n     */\n    public function formAfterSave($model)\n    {\n        /**\n         * @event backend.form.afterSave\n         * Called after the form model is saved\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.afterSave', function ((\\Backend\\Classes\\Controller) $controller, (\\Model) $model) {\n         *         $model->slug = Str::slug($model->name);\n         *     });\n         *\n         */\n    }\n\n    /**\n     * formBeforeCreate is called before the creation form is saved\n     * @param \\Model\n     */\n    public function formBeforeCreate($model)\n    {\n        /**\n         * @event backend.form.beforeCreate\n         * Called before the form model is created\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.beforeCreate', function ((\\Backend\\Classes\\Controller) $controller, (\\Model) $model) {\n         *         $model->slug = Str::slug($model->name);\n         *     });\n         *\n         */\n    }\n\n    /**\n     * formAfterCreate is called after the creation form is saved\n     * @param \\Model\n     */\n    public function formAfterCreate($model)\n    {\n        /**\n         * @event backend.form.afterCreate\n         * Called after the form model is created\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.afterCreate', function ((\\Backend\\Classes\\Controller) $controller, (\\Model) $model) {\n         *         $model->slug = Str::slug($model->name);\n         *     });\n         *\n         */\n    }\n\n    /**\n     * formBeforeUpdate is called before the updating form is saved\n     * @param \\Model\n     */\n    public function formBeforeUpdate($model)\n    {\n        /**\n         * @event backend.form.beforeUpdate\n         * Called before the form model is updated\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.beforeUpdate', function ((\\Backend\\Classes\\Controller) $controller, (\\Model) $model) {\n         *         $model->slug = Str::slug($model->name);\n         *     });\n         *\n         */\n    }\n\n    /**\n     * formAfterUpdate is called after the updating form is saved\n     * @param \\Model\n     */\n    public function formAfterUpdate($model)\n    {\n        /**\n         * @event backend.form.afterUpdate\n         * Called after the form model is updated\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.afterUpdate', function ((\\Backend\\Classes\\Controller) $controller, (\\Model) $model) {\n         *         $model->slug = Str::slug($model->name);\n         *     });\n         *\n         */\n    }\n\n    /**\n     * formAfterDelete called after the form model is deleted\n     * @param \\Model\n     */\n    public function formAfterDelete($model)\n    {\n        /**\n         * @event backend.form.afterDelete\n         * Called after the form model is deleted\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.afterDelete', function ((\\Backend\\Classes\\Controller) $controller, (\\Model) $model) {\n         *         // Delete other records\n         *     });\n         *\n         */\n    }\n\n    /**\n     * formAfterCancel called after the user has cancelled the form\n     * @param \\Model\n     */\n    public function formAfterCancel($model)\n    {\n        /**\n         * @event backend.form.afterCancel\n         * Called after the form model has deferred binding cancelled\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.afterCancel', function ((\\Backend\\Classes\\Controller) $controller, (\\Model) $model) {\n         *         // Delete other records\n         *     });\n         *\n         */\n    }\n\n    /**\n     * formCreateModelObject creates a new instance of a form model. This logic can\n     * be changed by overriding it in the controller.\n     * @return Model\n     */\n    public function formCreateModelObject()\n    {\n        return $this->createModel();\n    }\n\n    /**\n     * formExtendFieldsBefore is called before the form fields are defined\n     * @param \\Backend\\Widgets\\Form $host The hosting form widget\n     * @return void\n     */\n    public function formExtendFieldsBefore($host)\n    {\n    }\n\n    /**\n     * formExtendFields is called after the form fields are defined\n     * @param \\Backend\\Widgets\\Form $host The hosting form widget\n     * @param \\October\\Rain\\Element\\ElementHolder|array $fields Array of all defined form field objects (\\Backend\\Classes\\FormField)\n     * @return void\n     */\n    public function formExtendFields($host, $fields)\n    {\n    }\n\n    /**\n     * formExtendRefreshData is called before the form is refreshed, should return an array\n     * of additional save data.\n     * @param \\Backend\\Widgets\\Form $host The hosting form widget\n     * @param array $saveData Current save data\n     * @return array\n     */\n    public function formExtendRefreshData($host, $saveData)\n    {\n    }\n\n    /**\n     * formExtendRefreshFields is called when the form is refreshed, giving the opportunity\n     * to modify the form fields.\n     * @param \\Backend\\Widgets\\Form $host The hosting form widget\n     * @param array $fields Current form fields\n     * @return array\n     */\n    public function formExtendRefreshFields($host, $fields)\n    {\n    }\n\n    /**\n     * formExtendRefreshResults is called after the form is refreshed, should return an\n     * array of additional result parameters.\n     * @param \\Backend\\Widgets\\Form $host The hosting form widget\n     * @param array $result Current result parameters.\n     * @return array\n     */\n    public function formExtendRefreshResults($host, $result)\n    {\n    }\n\n    /**\n     * formExtendModel extends the supplied model used by create and update actions, the model can\n     * be altered by overriding it in the controller.\n     * @param \\Model $model\n     * @return Model\n     */\n    public function formExtendModel($model)\n    {\n    }\n\n    /**\n     * formExtendQuery extends the query used for finding the form model. Extra conditions\n     * can be applied to the query, for example, $query->withTrashed();\n     * @param October\\Rain\\Database\\Builder $query\n     * @return void\n     */\n    public function formExtendQuery($query)\n    {\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/HasRenderers.php",
    "content": "<?php namespace Backend\\Behaviors\\FormController;\n\nuse SystemException;\n\n/**\n * HasRenderers\n */\ntrait HasRenderers\n{\n    /**\n     * formRenderField is a view helper to render a single form field.\n     *\n     *     <?= $this->formRenderField('field_name') ?>\n     *\n     * @param string $name Field name\n     * @param array $options (e.g. ['useContainer'=>false])\n     * @return string HTML markup\n     */\n    public function formRenderField($name, $options = [])\n    {\n        return $this->formWidget->renderField($name, $options);\n    }\n\n    /**\n     * formRefreshField is a view helper to render a field from AJAX based on their field names.\n     * @param array|string $names\n     */\n    public function formRefreshFields($names): array\n    {\n        $result = [];\n\n        foreach ((array) $names as $name) {\n            if (!$fieldObject = $this->formWidget->getField($name)) {\n                throw new SystemException(\"Field {$name} was not found in the form definitions.\");\n            }\n\n            $result['#' . $fieldObject->getId('group')] = $this->formRenderField($name, ['useContainer' => false]);\n        }\n\n        return $result;\n    }\n\n    /**\n     * formRenderPreview is a view helper to render the form in preview mode.\n     *\n     *     <?= $this->formRenderPreview() ?>\n     *\n     * @return string The form HTML markup.\n     */\n    public function formRenderPreview()\n    {\n        return $this->formWidget->render(['preview' => true]);\n    }\n\n    /**\n     * formHasOutsideFields is a view helper to check if a form tab has fields in the\n     * non-tabbed section (outside fields).\n     *\n     *     <?php if ($this->formHasOutsideFields()): ?>\n     *         <!-- Do something -->\n     *     <?php endif ?>\n     *\n     * @return bool\n     */\n    public function formHasOutsideFields()\n    {\n        return $this->formWidget->getTab('outside')->hasFields();\n    }\n\n    /**\n     * formRenderOutsideFields is a view helper to render the form fields belonging to the\n     * non-tabbed section (outside form fields).\n     *\n     *     <?= $this->formRenderOutsideFields() ?>\n     *\n     * @return string HTML markup\n     */\n    public function formRenderOutsideFields($options = [])\n    {\n        return $this->formWidget->render(['section' => 'outside'] + $options);\n    }\n\n    /**\n     * formHasPrimaryTabs is a view helper to check if a form tab has fields in the\n     * primary tab section.\n     *\n     *     <?php if ($this->formHasPrimaryTabs()): ?>\n     *         <!-- Do something -->\n     *     <?php endif ?>\n     *\n     * @return bool\n     */\n    public function formHasPrimaryTabs()\n    {\n        return $this->formWidget->getTab('primary')->hasFields();\n    }\n\n    /**\n     * formRenderPrimaryTabs is a view helper to render the form fields belonging to the\n     * primary tabs section.\n     *\n     *     <?= $this->formRenderPrimaryTabs() ?>\n     *\n     * @return string HTML markup\n     */\n    public function formRenderPrimaryTabs($options = [])\n    {\n        return $this->formWidget->render(['section' => 'primary'] + $options);\n    }\n\n    /**\n     * formRenderPrimaryTab renders the contents of a primary tab\n     */\n    public function formRenderPrimaryTab($tabName, $options = [])\n    {\n        return $this->formWidget->renderTab($tabName, $options);\n    }\n\n    /**\n     * formHasSecondaryTabs is a view helper to check if a form tab has fields in the\n     * secondary tab section.\n     *\n     *     <?php if ($this->formHasSecondaryTabs()): ?>\n     *         <!-- Do something -->\n     *     <?php endif ?>\n     *\n     * @return bool\n     */\n    public function formHasSecondaryTabs()\n    {\n        return $this->formWidget->getTab('secondary')->hasFields();\n    }\n\n    /**\n     * formRenderSecondaryTabs is a view helper to render the form fields belonging to the\n     * secondary tabs section.\n     *\n     *     <?= $this->formRenderPrimaryTabs() ?>\n     *\n     * @return string HTML markup\n     */\n    public function formRenderSecondaryTabs($options = [])\n    {\n        return $this->formWidget->render(['section' => 'secondary'] + $options);\n    }\n\n    /**\n     * formRenderSecondaryTab renders the contents of a secondary tab\n     */\n    public function formRenderSecondaryTab($tabName, $options = [])\n    {\n        return $this->formWidget->renderTab($tabName, ['secondaryTab' => true] + $options);\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/partials/_buttons.php",
    "content": "<div>\n    <?php if (!$this->formGetModel()->exists): ?>\n        <?= Ui::ajaxButton(\n            label: __(\"Create\"),\n            handler: 'onSave',\n            primary: true,\n            hotkey: ['ctrl+s', 'cmd+s'],\n            dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n        ) ?>\n\n        <?= Ui::ajaxButton(\n            label: __(\"Create & Close\"),\n            handler: 'onSave',\n            secondary: true,\n            hotkey: ['ctrl+enter', 'cmd+enter'],\n            dataBrowserRedirectBack: true,\n            dataRequestData: \"close: true\",\n            dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n        ) ?>\n    <?php else: ?>\n        <?= Ui::ajaxButton(\n            label: __(\"Save\"),\n            handler: 'onSave',\n            primary: true,\n            hotkey: ['ctrl+s', 'cmd+s'],\n            dataRequestData: \"redirect: false\",\n            dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n        ) ?>\n\n        <?= Ui::ajaxButton(\n            label: __(\"Save & Close\"),\n            handler: 'onSave',\n            secondary: true,\n            hotkey: ['ctrl+enter', 'cmd+enter'],\n            dataBrowserRedirectBack: true,\n            dataRequestData: \"close: true\",\n            dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n        ) ?>\n\n        <?php if ($this->formCheckPermission('modelDelete')): ?>\n            <?= Ui::iconButton(\n                label: __(\"Delete\"),\n                icon: 'oc-icon-delete',\n                handler: 'onDelete',\n                danger: true,\n                hotkey: ['shift+option+d'],\n                class: 'pull-right',\n                dataBrowserRedirectBack: true,\n                dataRequestConfirm: __(\"Delete this record?\"),\n                dataRequestMessage: __(\"Deleting :name...\", ['name' => $formRecordName])\n            ) ?>\n        <?php endif ?>\n    <?php endif ?>\n\n    <span class=\"btn-text\">\n        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n        <?= Ui::ajaxButton(\n            label: __(\"Cancel\"),\n            handler: 'onCancel',\n            hotkey: ['shift+option+c'],\n            href: 'javascript:;',\n            class: 'btn-link p-0',\n            dataBrowserRedirectBack: true,\n            dataRequestData: \"close: true\",\n            dataRequestMessage: __(\"Loading...\")\n        ) ?>\n    </span>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/partials/_error.php",
    "content": "<div class=\"form-fatal-error\">\n    <p class=\"flash-message static error\">\n        <?= e($fatalError) ?>\n    </p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Previous Page\"),\n            href: Backend::url($this->formGetConfig()->defaultRedirect ?? ''),\n            icon: 'icon-arrow-left',\n            secondary: true,\n            dataBrowserRedirectBack: true\n        ) ?>\n    </p>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/partials/_mode_basic.php",
    "content": "<?php\n    $isHorizontal = $this->formGetWidget()->horizontalMode;\n?>\n<?= Form::open(['class' => 'd-flex flex-column h-100 design-basic']) ?>\n\n    <?= Block::placeholder('form:before-form') ?>\n\n    <div class=\"flex-grow-1\">\n        <?= $this->formRender($options) ?>\n    </div>\n\n    <?= Block::placeholder('form:after-form') ?>\n\n    <?php if ($this->formGetContext() !== 'preview'): ?>\n        <div class=\"form-buttons pt-3 <?= $isHorizontal ? 'is-horizontal' : '' ?>\">\n            <div data-control=\"loader-container\">\n                <?= $this->formRender(['section' => 'buttons']) ?>\n            </div>\n        </div>\n    <?php endif ?>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/partials/_mode_popup.php",
    "content": "<?= Form::open([\n    'id' => $this->formGetId('managePopup'),\n    'data-popup-size' => $popupSize ?? 950\n]) ?>\n    <input type=\"hidden\" name=\"form_popup_flag\" value=\"1\" />\n    <input type=\"hidden\" name=\"form_record_id\" value=\"<?= $recordId ?? '' ?>\" />\n\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= e($popupTitle ?? '') ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n\n    <div class=\"modal-body\">\n        <?= $this->formRender() ?>\n    </div>\n\n    <div class=\"modal-footer\">\n        <div class=\"form-buttons\">\n            <?= $this->formRender(['section' => 'buttons']) ?>\n        </div>\n    </div>\n\n<?= Form::close() ?>\n\n<script>\n    oc.popup.focusFirstInput('#<?= $this->formGetId('managePopup') ?>');\n    oc.popup.bindToPopups('#<?= $this->formGetId('managePopup') ?>', {\n        form_popup_flag: 1,\n        form_record_id: '<?= $recordId ?? '' ?>'\n    });\n</script>\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/partials/_mode_sidebar.php",
    "content": "<?php\n    $isHorizontal = $this->formGetWidget()->horizontalMode;\n?>\n<?php Block::put('form-contents') ?>\n\n    <?= Block::placeholder('form:before-form') ?>\n\n    <div class=\"layout-row\">\n        <?= $this->formRenderOutsideFields(['useContainer' => false]) ?>\n        <?= $this->formRenderPrimaryTabs(['useContainer' => false]) ?>\n    </div>\n\n    <?= Block::placeholder('form:after-form') ?>\n\n    <?php if ($this->formGetContext() !== 'preview'): ?>\n        <div class=\"form-buttons pt-3 <?= $isHorizontal ? 'is-horizontal' : '' ?>\">\n            <div data-control=\"loader-container\">\n                <?= $this->formRender(['section' => 'buttons']) ?>\n            </div>\n        </div>\n    <?php endif ?>\n<?php Block::endPut() ?>\n\n<?php Block::put('form-sidebar') ?>\n    <div class=\"hide-tabs\">\n        <?= $this->formRenderSecondaryTabs(['useContainer' => false]) ?>\n    </div>\n<?php Block::endPut() ?>\n\n<?php Block::put('body') ?>\n    <?= Form::open(['class'=>'position-relative h-100']) ?>\n        <div\n            id=\"<?= $this->formGetId() ?>\"\n            data-control=\"formwidget\"\n            data-refresh-handler=\"<?= $this->formGetWidget()->getEventHandler('onRefresh') ?>\"\n            class=\"form-widget form-elements layout <?= $isHorizontal ? 'form-horizontal' : '' ?>\"\n            role=\"form\">\n            <?= $this->makeLayout('form-with-sidebar', ['sidebarWidth' => $formSidebarWidth]) ?>\n        </div>\n    <?= Form::close() ?>\n<?php Block::endPut() ?>\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/partials/_popup_buttons.php",
    "content": "<?php\n    $isPreview = $this->formGetWidget()->previewMode;\n?>\n<div>\n    <?php if ($isPreview): ?>\n        <?= Ui::button(\n            label: __(\"Close\"),\n            dataDismiss: 'popup'\n        ) ?>\n    <?php else: ?>\n        <?php if (!$this->formGetModel()->exists): ?>\n            <?= Ui::ajaxButton(\n                label: __(\"Create\"),\n                handler: 'onPopupSave',\n                primary: true,\n                hotkey: ['ctrl+s', 'cmd+s'],\n                dataRequestData: \"redirect: false\",\n                dataPopupLoadIndicator: true\n            ) ?>\n        <?php else: ?>\n            <?= Ui::ajaxButton(\n                label: __(\"Save\"),\n                handler: 'onPopupSave',\n                primary: true,\n                hotkey: ['ctrl+s', 'cmd+s'],\n                dataRequestData: \"redirect: false\",\n                dataPopupLoadIndicator: true\n            ) ?>\n\n            <?php if ($this->formCheckPermission('modelDelete')): ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Delete\"),\n                    handler: 'onPopupDelete',\n                    class: 'btn-danger pull-right',\n                    icon: 'icon-delete',\n                    dataRequestConfirm: __(\"Delete this record?\"),\n                    dataPopupLoadIndicator: true\n                ) ?>\n            <?php endif ?>\n        <?php endif ?>\n\n        <span class=\"btn-text\">\n            <span class=\"button-separator\"><?= __(\"or\") ?></span>\n            <?= Ui::ajaxButton(\n                label: __(\"Cancel\"),\n                handler: 'onPopupCancel',\n                class: 'btn-link p-0',\n                dataBrowserRedirectBack: true,\n                dataRequestData: \"close: true\",\n                dataDismiss: 'popup'\n            ) ?>\n        </span>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/formcontroller/partials/_popup_error.php",
    "content": "<div class=\"modal-body\">\n    <p class=\"flash-message static error\"><?= e($fatalError) ?></p>\n</div>\n<div class=\"modal-footer\">\n    <?= Ui::button(__(\"Close\"))->dismissPopup() ?>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/ActionExport.php",
    "content": "<?php namespace Backend\\Behaviors\\ImportExportController;\n\nuse Lang;\nuse File;\nuse Backend;\nuse ApplicationException;\n\n/**\n * ActionExport contains logic for exports\n */\ntrait ActionExport\n{\n    /**\n     * @var Model exportModel\n     */\n    public $exportModel;\n\n    /**\n     * @var array exportColumns configuration.\n     */\n    public $exportColumns;\n\n    /**\n     * @var string exportFileName used for export output.\n     */\n    protected $exportFileName;\n\n    /**\n     * @var Backend\\Classes\\WidgetBase exportFormatFormWidget reference to the widget used for standard export options.\n     */\n    protected $exportFormatFormWidget;\n\n    /**\n     * @var Backend\\Classes\\WidgetBase exportOptionsFormWidget reference to the widget used for custom export options.\n     */\n    protected $exportOptionsFormWidget;\n\n    /**\n     * actionExport handles the export action logic\n     */\n    protected function actionExport()\n    {\n        $model = $this->exportGetModel();\n        $columns = $this->processExportColumnsFromPost();\n\n        if ($optionData = post('ExportOptions')) {\n            $model->fill($optionData);\n        }\n\n        $exportOptions = $this->getFormatOptionsForModel();\n        $exportOptions['sessionKey'] = $this->exportFormatFormWidget->getSessionKey();\n\n        $model->file_format = $exportOptions['fileFormat'] ?? 'json';\n        $reference = $model->export($columns, $exportOptions);\n\n        $fileUrl = $this->controller->actionUrl(\n            'download',\n            $reference.'/'.$this->makeExportFileName($model->file_format)\n        );\n\n        $this->vars['fileUrl'] = $fileUrl;\n        $this->vars['returnUrl'] = $this->getRedirectUrlForType('export');\n    }\n\n    /**\n     * makeExportFileName\n     */\n    protected function makeExportFileName($mode = 'json')\n    {\n        // Locate filename\n        $fileName = $this->controller->importExportGetFileName();\n        if (!$fileName) {\n            $fileName = $this->getConfig('export[fileName]', 'export');\n        }\n\n        // Remove extension\n        $fileName = File::name($fileName);\n\n        $extension = 'csv';\n        if ($mode === 'json') {\n            $extension = 'json';\n        }\n\n        return $fileName . '.' . $extension;\n    }\n\n    /**\n     * prepareExportVars for the view data.\n     * @return void\n     */\n    public function prepareExportVars()\n    {\n        $this->vars['exportFormatFormWidget'] = $this->exportFormatFormWidget;\n        $this->vars['exportOptionsFormWidget'] = $this->exportOptionsFormWidget;\n        $this->vars['exportColumns'] = $this->getExportColumns();\n        $this->vars['exportCustomFormat'] = $this->isCustomFileFormat();\n\n        // Make these variables available to widgets\n        $this->controller->vars += $this->vars;\n    }\n\n    /**\n     * exportRender\n     */\n    public function exportRender()\n    {\n        return $this->importExportMakePartial('container_export');\n    }\n\n    /**\n     * exportGetModel\n     */\n    public function exportGetModel()\n    {\n        return $this->getModelForType('export');\n    }\n\n    /**\n     * getExportColumns\n     */\n    protected function getExportColumns()\n    {\n        if ($this->exportColumns !== null) {\n            return $this->exportColumns;\n        }\n\n        $columnConfig = $this->getConfig('export[list]');\n\n        $columns = $this->makeListColumns($columnConfig, $this->exportGetModel());\n\n        $columns = $this->controller->importExportExtendColumns($columns, 'export');\n\n        if (empty($columns)) {\n            throw new ApplicationException(__(\"Please specify some columns to export.\"));\n        }\n\n        return $this->exportColumns = $columns;\n    }\n\n    /**\n     * makeExportFormatFormWidget\n     */\n    protected function makeExportFormatFormWidget()\n    {\n        if (!$this->getConfig('export') || $this->getConfig('export[useList]')) {\n            return null;\n        }\n\n        $widgetConfig = $this->makeConfig('~/modules/backend/behaviors/importexportcontroller/partials/fields_export.yaml');\n        $widgetConfig->model = $this->exportGetModel();\n        $widgetConfig->alias = 'exportUploadForm';\n\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $widgetConfig);\n\n        // Set presets\n        $widget->setFormValues($this->getFormatOptionsForPost());\n\n        // Reset data on refresh\n        $widget->bindEvent('form.beforeRefresh', function ($holder) {\n            $holder->data = [];\n        });\n\n        return $widget;\n    }\n\n    /**\n     * makeExportOptionsFormWidget\n     */\n    protected function makeExportOptionsFormWidget()\n    {\n        $widget = $this->makeOptionsFormWidgetForType('export');\n\n        if (!$widget && $this->exportFormatFormWidget) {\n            $stepSection = $this->exportFormatFormWidget->getField('step3_section');\n            $stepSection->hidden = true;\n        }\n\n        return $widget;\n    }\n\n    /**\n     * processExportColumnsFromPost\n     */\n    protected function processExportColumnsFromPost()\n    {\n        $visibleColumns = post('visible_columns', []);\n        $columns = post('export_columns', []);\n\n        foreach ($columns as $key => $columnName) {\n            if (!isset($visibleColumns[$columnName])) {\n                unset($columns[$key]);\n            }\n        }\n\n        $result = [];\n        $definitions = $this->getExportColumns();\n\n        foreach ($columns as $column) {\n            if (isset($definitions[$column])) {\n                $result[$column] = $definitions[$column];\n            }\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/ActionImport.php",
    "content": "<?php namespace Backend\\Behaviors\\ImportExportController;\n\nuse Str;\nuse Lang;\nuse Backend;\nuse ApplicationException;\n\n/**\n * ActionImport contains logic for imports\n */\ntrait ActionImport\n{\n    /**\n     * @var Model importModel\n     */\n    public $importModel;\n\n    /**\n     * @var array importColumns configuration.\n     */\n    public $importColumns;\n\n    /**\n     * @var Backend\\Classes\\WidgetBase importUploadFormWidget reference to the widget used for uploading import file.\n     */\n    protected $importUploadFormWidget;\n\n    /**\n     * @var Backend\\Classes\\WidgetBase importOptionsFormWidget reference to the widget used for specifying import options.\n     */\n    protected $importOptionsFormWidget;\n\n    /**\n     * actionImport handles the import action logic\n     */\n    public function actionImport()\n    {\n        $model = $this->importGetModel();\n        $matches = post('column_match', []);\n\n        if ($optionData = post('ImportOptions')) {\n            $model->fill($optionData);\n        }\n\n        $importOptions = $this->getFormatOptionsForModel();\n        $importOptions['sessionKey'] = $this->importUploadFormWidget->getSessionKey();\n\n        $model->file_format = $importOptions['fileFormat'] ?? 'json';\n        $model->import($matches, $importOptions);\n\n        $this->vars['importResults'] = $model->getResultStats();\n        $this->vars['returnUrl'] = $this->getRedirectUrlForType('import');\n        $this->vars['sourceIndexOffset'] = $this->getImportSourceIndexOffset($importOptions['firstRowTitles']);\n    }\n\n    /**\n     * actionImportLoadColumnSampleForm\n     */\n    public function actionImportLoadColumnSampleForm()\n    {\n        if (($columnId = post('file_column_id', false)) === false) {\n            throw new ApplicationException(__(\"Missing column identifier\"));\n        }\n\n        $columns = $this->getImportFileColumns();\n        if (!array_key_exists($columnId, $columns)) {\n            throw new ApplicationException(__(\"Unknown column\"));\n        }\n\n        $path = $this->getImportFilePath();\n\n        if (!$fileFormat = post('file_format', 'json')) {\n            return null;\n        }\n\n        if ($fileFormat === 'json') {\n            $data = $this->getImportSampleColumnsFromJson($path, (int) $columnId);\n        }\n        else {\n            $data = $this->getImportSampleColumnsFromCsv($path, (int) $columnId);\n        }\n\n        // Clean up data\n        foreach ($data as $index => $sample) {\n            $data[$index] = Str::limit($sample, 100);\n            if (!strlen($data[$index])) {\n                unset($data[$index]);\n            }\n        }\n\n        $this->vars['columnName'] = array_get($columns, $columnId);\n        $this->vars['columnData'] = $data;\n    }\n\n    /**\n     * prepareImportVars for the view data.\n     */\n    public function prepareImportVars()\n    {\n        $this->vars['importUploadFormWidget'] = $this->importUploadFormWidget;\n        $this->vars['importOptionsFormWidget'] = $this->importOptionsFormWidget;\n        $this->vars['importDbColumns'] = $this->getImportDbColumns();\n        $this->vars['importFileColumns'] = $this->getImportFileColumns();\n        $this->vars['importCustomFormat'] = $this->isCustomFileFormat();\n\n        // Make these variables available to widgets\n        $this->controller->vars += $this->vars;\n    }\n\n    /**\n     * importRender\n     */\n    public function importRender()\n    {\n        return $this->importExportMakePartial('container_import');\n    }\n\n    /**\n     * importGetModel\n     */\n    public function importGetModel()\n    {\n        return $this->getModelForType('import');\n    }\n\n    /**\n     * getImportDbColumns\n     */\n    protected function getImportDbColumns()\n    {\n        if ($this->importColumns !== null) {\n            return $this->importColumns;\n        }\n\n        $columnConfig = $this->getConfig('import[list]');\n\n        $columns = $this->makeListColumns($columnConfig, $this->importGetModel());\n\n        $columns = $this->controller->importExportExtendColumns($columns, 'import');\n\n        if (empty($columns)) {\n            throw new ApplicationException(__(\"Please specify some columns to import.\"));\n        }\n\n        return $this->importColumns = $columns;\n    }\n\n    /**\n     * getImportFileColumns\n     */\n    protected function getImportFileColumns()\n    {\n        if (!$path = $this->getImportFilePath()) {\n            return null;\n        }\n\n        if (!$fileFormat = post('file_format', 'json')) {\n            return null;\n        }\n\n        if ($fileFormat === 'json') {\n            return $this->getImportFileColumnsFromJson($path);\n        }\n        else {\n            return $this->getImportFileColumnsFromCsv($path);\n        }\n    }\n\n    /**\n     * getImportSourceIndexOffset to add to the reported row number in status messages\n     *\n     * @param bool $firstRowTitles Whether or not the first row contains column titles\n     * @return int $offset\n     */\n    protected function getImportSourceIndexOffset($firstRowTitles)\n    {\n        return $firstRowTitles ? 2 : 1;\n    }\n\n    /**\n     * makeImportUploadFormWidget\n     */\n    protected function makeImportUploadFormWidget()\n    {\n        if (!$this->getConfig('import')) {\n            return null;\n        }\n\n        $widgetConfig = $this->makeConfig('~/modules/backend/behaviors/importexportcontroller/partials/fields_import.yaml');\n        $widgetConfig->model = $this->importGetModel();\n        $widgetConfig->alias = 'importUploadForm';\n\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $widgetConfig);\n\n        // Set presets\n        $widget->setFormValues($this->getFormatOptionsForPost());\n\n        // Reset data on refresh\n        $widget->bindEvent('form.beforeRefresh', function ($holder) {\n            $holder->data = [];\n        });\n\n        return $widget;\n    }\n\n    /**\n     * makeImportOptionsFormWidget\n     */\n    protected function makeImportOptionsFormWidget()\n    {\n        $widget = $this->makeOptionsFormWidgetForType('import');\n\n        if (!$widget && $this->importUploadFormWidget) {\n            $stepSection = $this->importUploadFormWidget->getField('step3_section');\n            $stepSection->hidden = true;\n        }\n\n        return $widget;\n    }\n\n    /**\n     * getImportFilePath\n     */\n    protected function getImportFilePath()\n    {\n        return $this\n            ->importGetModel()\n            ->getImportFilePath($this->importUploadFormWidget->getSessionKey());\n    }\n\n    /**\n     * importIsColumnRequired\n     */\n    public function importIsColumnRequired($columnName)\n    {\n        $model = $this->importGetModel();\n\n        return $model->isAttributeRequired($columnName);\n    }\n\n    /**\n     * checkRequiredImportColumns\n     */\n    protected function checkRequiredImportColumns()\n    {\n        if (!$matches = post('column_match', [])) {\n            throw new ApplicationException(__(\"Please match some columns first.\"));\n        }\n\n        $dbColumns = $this->getImportDbColumns();\n        foreach ($dbColumns as $column => $label) {\n            if (!$this->importIsColumnRequired($column)) {\n                continue;\n            }\n\n            $found = false;\n            foreach ($matches as $matchedColumns) {\n                if (in_array($column, $matchedColumns)) {\n                    $found = true;\n                    break;\n                }\n            }\n\n            if (!$found) {\n                throw new ApplicationException(__(\"Please specify a match for the required field :label.\", [\n                    'label' => __($label)\n                ]));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/CanFormatCsv.php",
    "content": "<?php namespace Backend\\Behaviors\\ImportExportController;\n\nuse League\\Csv\\Statement as CsvStatement;\nuse League\\Csv\\Writer as CsvWriter;\nuse League\\Csv\\CharsetConverter;\nuse Backend\\Behaviors\\ImportExportController\\TranscodeFilter;\nuse League\\Csv\\Reader as CsvReader;\nuse ApplicationException;\nuse SplTempFileObject;\n\n/**\n * CanFormatCsv contains logic for CSV files\n */\ntrait CanFormatCsv\n{\n    /**\n     * getImportFileColumnsFromCsv path\n     */\n    protected function getImportFileColumnsFromCsv($path)\n    {\n        $reader = $this->createCsvReader($path);\n        $firstRow = $reader->fetchOne(0);\n\n        if (!post('first_row_titles')) {\n            array_walk($firstRow, function (&$value, $key) {\n                $value = 'Column #'.($key + 1);\n            });\n        }\n\n        // Prevents unfriendly error to be thrown due to bad encoding at response time.\n        if (json_encode($firstRow) === false) {\n            throw new ApplicationException(__(\"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\"));\n        }\n\n        return $firstRow;\n    }\n\n    /**\n     * getImportSampleColumnsFromCsv\n     */\n    protected function getImportSampleColumnsFromCsv($path, $columnIndex)\n    {\n        $reader = $this->createCsvReader($path);\n\n        if (post('first_row_titles')) {\n            $reader->setHeaderOffset(0);\n        }\n\n        $result = (new CsvStatement)\n            ->limit(50)\n            ->process($reader)\n            ->fetchColumnByOffset((int) $columnIndex)\n        ;\n\n        $data = iterator_to_array($result, false);\n\n        return $data;\n    }\n\n    /**\n     * createCsvReader creates a new CSV reader with options selected by the user\n     */\n    protected function createCsvReader(string $path): CsvReader\n    {\n        $reader = CsvReader::createFromPath($path);\n        $options = $this->getFormatOptionsForModel();\n\n        if ($options['delimiter'] !== null) {\n            $reader->setDelimiter($options['delimiter']);\n        }\n\n        if ($options['enclosure'] !== null) {\n            $reader->setEnclosure($options['enclosure']);\n        }\n\n        if ($options['escape'] !== null) {\n            $reader->setEscape($options['escape']);\n        }\n\n        if (\n            $options['encoding'] !== null &&\n            $reader->supportsStreamFilterOnRead()\n        ) {\n            $reader->addStreamFilter(sprintf(\n                '%s%s:%s',\n                TranscodeFilter::FILTER_NAME,\n                strtolower($options['encoding']),\n                'utf-8'\n            ));\n        }\n\n        return $reader;\n    }\n\n    /**\n     * exportFromListAsCsv\n     */\n    protected function exportFromListAsCsv($widget, $options): string\n    {\n        // Parse defaults\n        $options = array_merge([\n            'firstRowTitles' => true,\n            'useOutput' => false,\n            'fileName' => 'export.csv',\n            'delimiter' => null,\n            'enclosure' => null,\n            'escape' => null,\n            'encoding' => null\n        ], $options);\n\n        // Prepare CSV\n        $csv = CsvWriter::createFromString();\n        $csv->setOutputBOM(CsvWriter::BOM_UTF8);\n\n        if ($options['delimiter'] !== null) {\n            $csv->setDelimiter($options['delimiter']);\n        }\n\n        if ($options['enclosure'] !== null) {\n            $csv->setEnclosure($options['enclosure']);\n        }\n\n        if ($options['escape'] !== null) {\n            $csv->setEscape($options['escape']);\n        }\n\n        if (\n            $options['encoding'] !== null &&\n            $csv->supportsStreamFilterOnWrite()\n        ) {\n            CharsetConverter::addTo($csv, 'UTF-8', $options['encoding']);\n        }\n\n        // Locate columns from widget\n        $columns = $widget->getVisibleColumns();\n\n        // Add headers\n        if ($options['firstRowTitles']) {\n            $headers = [];\n            foreach ($columns as $column) {\n                $headers[] = $widget->getHeaderValue($column);\n            }\n            $csv->insertOne($headers);\n        }\n\n        // Add records\n        $getter = $this->getConfig('export[useList][raw]', false)\n            ? 'getColumnValueRaw'\n            : 'getColumnValue';\n\n        $query = $widget->prepareQuery();\n        $results = $query->get();\n\n        if ($event = $widget->fireSystemEvent('backend.list.extendRecords', [&$results])) {\n            $results = $event;\n        }\n\n        foreach ($results as $result) {\n            $record = [];\n            foreach ($columns as $column) {\n                $value = $widget->$getter($result, $column);\n                if (is_array($value)) {\n                    $value = implode('|', $value);\n                }\n                $record[] = $value;\n            }\n            $csv->insertOne($record);\n        }\n\n        // Output\n        if ($options['useOutput']) {\n            $csv->output($options['fileName']);\n        }\n\n        return $csv->toString();\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/CanFormatJson.php",
    "content": "<?php namespace Backend\\Behaviors\\ImportExportController;\n\nuse File;\n\n/**\n * CanFormatJson contains logic for JSON files\n */\ntrait CanFormatJson\n{\n    /**\n     * getImportFileColumnsFromJson\n     */\n    protected function getImportFileColumnsFromJson($path)\n    {\n        $jsonPath = File::get($path);\n\n        $contents = json_decode($jsonPath, true);\n\n        if ($contents === null) {\n            return [];\n        }\n\n        if (!is_array($contents)) {\n            return [];\n        }\n\n        $firstRow = array_first($contents);\n        if (!is_array($firstRow)) {\n            return [];\n        }\n\n        return array_keys($firstRow);\n    }\n\n    /**\n     * getImportSampleColumnsFromJson\n     */\n    protected function getImportSampleColumnsFromJson($path, $columnIndex)\n    {\n        $jsonPath = File::get($path);\n\n        $contents = json_decode($jsonPath, true);\n\n        $result = [];\n\n        $limit = 0;\n        foreach ($contents as $content) {\n            $count = 0;\n            foreach ($content as $key => $val) {\n                if ($count === $columnIndex) {\n                    $result[] = $val;\n                    break;\n                }\n                $count++;\n            }\n            $limit++;\n\n            if ($limit > 50) {\n                break;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * exportFromListAsJson\n     */\n    protected function exportFromListAsJson($widget, $options): string\n    {\n        $jsonResult = [];\n\n        // Locate columns from widget\n        $columns = $widget->getVisibleColumns();\n\n        // Add records\n        $getter = $this->getConfig('export[useList][raw]', false)\n            ? 'getColumnValueRaw'\n            : 'getColumnValue';\n\n        $query = $widget->prepareQuery();\n        $results = $query->get();\n\n        if ($event = $widget->fireSystemEvent('backend.list.extendRecords', [&$results])) {\n            $results = $event;\n        }\n\n        foreach ($results as $result) {\n            $record = [];\n            foreach ($columns as $column) {\n                $value = $widget->$getter($result, $column);\n                if (is_array($value)) {\n                    $value = implode('|', $value);\n                }\n                $record[] = $value;\n            }\n            $jsonResult[] = $record;\n        }\n\n        return json_encode($jsonResult, JSON_PRETTY_PRINT);\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/HasListExport.php",
    "content": "<?php namespace Backend\\Behaviors\\ImportExportController;\n\nuse Lang;\nuse Response;\nuse ApplicationException;\n\n/**\n * HasListExport contains logic for imports\n */\ntrait HasListExport\n{\n    /**\n     * checkUseListExportMode\n     */\n    protected function checkUseListExportMode()\n    {\n        if (!$useList = $this->getConfig('export[useList]')) {\n            return false;\n        }\n\n        if (!$this->controller->isClassExtendedWith(\\Backend\\Behaviors\\ListController::class)) {\n            throw new ApplicationException(__(\"You must implement the controller behavior ListController with the export 'useList' option enabled.\"));\n        }\n\n        if (is_array($useList)) {\n            $listDefinition = array_get($useList, 'definition');\n        }\n        else {\n            $listDefinition = $useList;\n        }\n\n        return $this->exportFromList($listDefinition);\n    }\n\n    /**\n     * exportFromList outputs the list results as a CSV export.\n     * @param string $definition\n     * @param array $options\n     */\n    public function exportFromList($definition = null, $options = [])\n    {\n        $lists = $this->controller->makeLists();\n        $widget = $lists[$definition] ?? reset($lists);\n\n        // Parse options\n        $options = array_merge([\n            'fileFormat' => $this->getConfig('defaultFormatOptions[fileFormat]', 'csv'),\n            'delimiter' => $this->getConfig('defaultFormatOptions[delimiter]', ','),\n            'enclosure' => $this->getConfig('defaultFormatOptions[enclosure]', '\"'),\n            'escape' => $this->getConfig('defaultFormatOptions[escape]', '\\\\'),\n            'encoding' => $this->getConfig('defaultFormatOptions[encoding]', 'utf-8'),\n        ], $options);\n\n        // Prepare output\n        $fileFormat = $options['fileFormat'];\n        $filename = e($this->makeExportFileName($fileFormat));\n\n        // JSON\n        if ($fileFormat === 'json') {\n            return Response::make(\n                $this->exportFromListAsJson($widget, $options),\n                200,\n                [\n                    'Content-Type' => 'application/json',\n                    'Content-Disposition' => sprintf('%s; filename=\"%s\"', 'attachment', $filename)\n                ]\n            );\n        }\n\n        // CSV\n        return Response::make(\n            $this->exportFromListAsCsv($widget, $options),\n            200,\n            [\n                'Content-Type' => 'text/csv',\n                'Content-Transfer-Encoding' => 'binary',\n                'Content-Disposition' => sprintf('%s; filename=\"%s\"', 'attachment', $filename)\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/TranscodeFilter.php",
    "content": "<?php namespace Backend\\Behaviors\\ImportExportController;\n\nuse php_user_filter;\n\n// phpcs:ignoreFile\nstream_filter_register(TranscodeFilter::FILTER_NAME . \"*\", TranscodeFilter::class);\n\n/**\n * TranscodeFilter converts CSV source files from one encoding to another.\n */\nclass TranscodeFilter extends php_user_filter\n{\n    const FILTER_NAME = 'october.csv.transcode.';\n\n    /**\n     * @var string encodingFrom\n     */\n    protected $encodingFrom = 'auto';\n\n    /**\n     * @var string encodingTo\n     */\n    protected $encodingTo;\n\n    /**\n     * filter\n     */\n    public function filter($in, $out, &$consumed, $closing): int\n    {\n        while ($resource = stream_bucket_make_writeable($in)) {\n            $resource->data = @mb_convert_encoding(\n                $resource->data,\n                $this->encodingTo,\n                $this->encodingFrom\n            );\n\n            $consumed += $resource->datalen;\n\n            stream_bucket_append($out, $resource);\n        }\n\n        return PSFS_PASS_ON;\n    }\n\n    /**\n     * onCreate\n     */\n    public function onCreate(): bool\n    {\n        if (strpos($this->filtername, self::FILTER_NAME) !== 0) {\n            return false;\n        }\n\n        $params = substr($this->filtername, strlen(self::FILTER_NAME));\n        if (!preg_match('/^([-\\w]+)(:([-\\w]+))?$/', $params, $matches)) {\n            return false;\n        }\n\n        if (isset($matches[1])) {\n            $this->encodingFrom = $matches[1];\n        }\n\n        $this->encodingTo = mb_internal_encoding();\n        if (isset($matches[3])) {\n            $this->encodingTo = $matches[3];\n        }\n\n        $this->params['locale'] = setlocale(LC_CTYPE, '0');\n        if (stripos($this->params['locale'], 'UTF-8') === false) {\n            setlocale(LC_CTYPE, 'en_US.UTF-8');\n        }\n\n        return true;\n    }\n\n    /**\n     * onClose\n     */\n    public function onClose(): void\n    {\n        setlocale(LC_CTYPE, $this->params['locale']);\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/assets/css/export.css",
    "content": ".export-behavior .export-columns{padding-bottom:0}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/assets/css/import.css",
    "content": ".import-behavior ul{list-style:none;margin:0;padding:0}.import-behavior ul li{font-size:13px}.import-behavior ul li.placeholder{display:block;position:relative}.import-behavior ul li.dragged{box-shadow:0 3px 6px rgba(0,0,0,.075);position:absolute;z-index:2000}.import-behavior .import-db-columns,.import-behavior .import-file-columns{background:var(--bs-tertiary-bg);height:400px;overflow:auto;padding:5px}.import-behavior .import-db-columns>ul{min-height:380px}.import-behavior .import-file-columns .upload-prompt{display:block;left:0;margin-top:-10px;position:absolute;right:0;text-align:center;top:50%}.import-behavior .import-column-bindings>ul>li,.import-behavior .import-db-columns>ul>li{cursor:pointer}.import-behavior .import-db-columns>ul>li,.import-behavior .import-file-columns>ul>li,.import-behavior ul li.dragged{background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:3px;margin-bottom:5px}.import-behavior .import-db-columns>ul>li div.import-column-name>span,.import-behavior .import-db-columns>ul>li>span,.import-behavior .import-file-columns>ul>li div.import-column-name>span,.import-behavior .import-file-columns>ul>li>span,.import-behavior ul li.dragged div.import-column-name>span,.import-behavior ul li.dragged>span{display:block;padding:8px 8px 8px 12px}.import-behavior .import-db-columns>ul>li .column-icon{color:#ccc;left:-3px;position:relative}.import-behavior .import-db-columns>ul>li:hover .column-icon{color:#4da7e8}.import-behavior .import-db-columns>ul>li.is-required .column-icon{color:#ab2a1c}.import-behavior .import-file-columns>ul>li:after,.import-behavior .import-file-columns>ul>li:before{content:\" \";display:table}.import-behavior .import-file-columns>ul>li:after{clear:both}.import-behavior .import-file-columns>ul>li.is-ignored{display:none}.import-behavior .import-file-columns>ul>li .column-success-icon{display:none;left:-2px;position:relative;width:15px}.import-behavior .import-file-columns>ul>li.is-matched .column-success-icon{display:inline-block}.import-behavior .import-file-columns>ul>li.is-matched .column-ignore-button{display:none!important}.import-behavior .import-file-columns>ul div.import-column-name{float:left;width:45%}.import-behavior .import-file-columns>ul div.import-column-name>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.import-behavior .import-file-columns>ul div.import-column-name a.column-label{color:var(--bs-body-color)}.import-behavior .import-file-columns>ul div.import-column-name a.column-ignore-button{background:var(--bs-secondary-bg);border-radius:15px;color:var(--bs-secondary-color);display:inline-block;font-size:10px;height:15px;left:-3px;position:relative;text-align:center;text-decoration:none;top:-1px;width:15px}.import-behavior .import-file-columns>ul div.import-column-name a.column-ignore-button:hover{background:#ab2a1c;color:#fff}.import-behavior .import-file-columns>ul .import-column-bindings>ul{float:right;width:55%}.import-behavior .import-column-bindings>ul{background:var(--bs-secondary-bg);min-height:34px;position:relative}.import-behavior .import-column-bindings>ul:after{border-bottom:17px solid transparent;border-left:18px solid var(--oc-form-control-bg);border-top:17px solid transparent;content:\"\";display:block;height:0;left:0;position:absolute;top:0;width:0}.import-behavior .import-column-bindings>ul:before{color:var(--bs-tertiary-color);content:attr(data-empty-text);padding:8px 8px 8px 28px;position:absolute}.import-behavior .import-column-bindings>ul>li .column-icon{color:var(--bs-body-color);float:right;margin:3px}.import-behavior .import-column-bindings>ul>li:hover .column-icon{color:var(--bs-emphasis-color)}.import-behavior .import-column-bindings>ul>li:not(.dragged){background:var(--bs-secondary-bg);color:var(--bs-emphasis-color);position:relative}.import-behavior .import-column-bindings>ul>li:not(.dragged)>span{display:block;padding:8px 8px 8px 28px}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/assets/js/october.export.js",
    "content": "/*\n * Scripts for the Export controller behavior.\n */\n+function ($) { \"use strict\";\n\n    var ExportBehavior = function() {\n\n        this.processExport = function () {\n            var $form = $('#exportColumns').closest('form');\n\n            $form.request('onExport', {\n                success: function(data) {\n                    $('#exportContainer').html(data.result);\n                    oc.Events.dispatch('render');\n                }\n            })\n        }\n\n    }\n\n    $.oc.exportBehavior = new ExportBehavior;\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/assets/js/october.import.js",
    "content": "/*\n * Scripts for the Import controller behavior.\n */\n+function ($) { \"use strict\";\n\n    var ImportBehavior = function() {\n\n        this.processImport = function () {\n            var $form = $('#importColumnMatcher').closest('form');\n\n            $form.request('onImport', {\n                success: function(data) {\n                    $('#importContainer').html(data.result);\n                    oc.Events.dispatch('render');\n                }\n            });\n        }\n\n        this.loadFileColumnSample = function(el) {\n            var $el = $(el),\n                $column = $el.closest('[data-column-id]'),\n                columnId = $column.data('column-id');\n\n            $el.popup({\n                handler: 'onImportLoadColumnSampleForm',\n                extraData: {\n                    file_column_id: columnId\n                }\n            });\n        }\n\n        this.bindColumnSorting = function() {\n            var sortableOptions = {\n                group: 'import-fields',\n                onEnd: $.proxy(this.onDropColumn, this)\n            };\n\n            $('#importDbColumns > ul, .import-column-bindings > ul').each(function() {\n                var oldSortable = $(this).data('oc.sortable');\n                if (oldSortable) {\n                    oldSortable.destroy();\n                }\n\n                $(this).data('oc.sortable', Sortable.create(this, sortableOptions));\n            });\n        }\n\n        this.onDropColumn = function (event) {\n            var\n                $dbItem = $(event.item),\n                $fileColumns = $('#importFileColumns'),\n                $fileItem,\n                isMatch = $.contains($fileColumns.get(0), $dbItem.get(0)),\n                matchColumnId;\n\n            // Has a previous match?\n            matchColumnId = $dbItem.data('column-matched-id')\n            if (matchColumnId !== null) {\n                $fileItem = $('[data-column-id='+matchColumnId+']', $fileColumns);\n                this.toggleMatchState($fileItem);\n            }\n\n            // Is a new match?\n            if (isMatch) {\n                $fileItem = $dbItem.closest('[data-column-id]');\n                this.matchColumn($dbItem, $fileItem);\n            }\n            else {\n                this.unmatchColumn($dbItem);\n            }\n        }\n\n        this.toggleMatchState = function ($container) {\n            var hasItems = !!$('.import-column-bindings li', $container).length;\n            $container.toggleClass('is-matched', hasItems);\n        }\n\n        this.ignoreFileColumn = function(el) {\n            var $el = $(el),\n                $column = $el.closest('[data-column-id]');\n\n            $column.addClass('is-ignored');\n            $('#showIgnoredColumnsButton').removeClass('disabled');\n        }\n\n        this.showIgnoredColumns = function() {\n            $('#importFileColumns li.is-ignored').removeClass('is-ignored');\n            $('#showIgnoredColumnsButton').addClass('disabled');\n        }\n\n        this.autoMatchColumns = function() {\n            var self = this,\n                fileColumns = {},\n                $this,\n                name,\n                label;\n\n            $('#importFileColumns li').each(function() {\n                $this = $(this);\n                name = $.trim($('.column-label', $this).text());\n                fileColumns[name] = $this;\n            });\n\n            $('#importDbColumns li').each(function() {\n                $this = $(this);\n                label = $.trim($('> span', $this).text());\n                name = $this.data('column-name');\n\n                var matchedColumn = fileColumns[name] || fileColumns[label];\n                if (matchedColumn) {\n                    $this.appendTo($('.import-column-bindings > ul', matchedColumn));\n                    self.matchColumn($this, matchedColumn);\n                }\n            });\n        }\n\n        this.matchColumn = function($dbItem, $fileItem) {\n            var matchColumnId = $fileItem.data('column-id'),\n                dbColumnName = $dbItem.data('column-name'),\n                $dbItemMatchInput = $('[data-column-match-input]', $dbItem);\n\n            this.toggleMatchState($fileItem);\n\n            $dbItem.data('column-matched-id', matchColumnId);\n            $dbItemMatchInput.attr('name', 'column_match['+matchColumnId+'][]');\n            $dbItemMatchInput.attr('value', dbColumnName);\n        }\n\n        this.unmatchColumn = function($dbItem) {\n            var $dbItemMatchInput = $('[data-column-match-input]', $dbItem);\n\n            $dbItem.removeData('column-matched-id');\n            $dbItemMatchInput.attr('name', '');\n            $dbItemMatchInput.attr('value', '');\n        }\n    }\n\n    $.oc.importBehavior = new ImportBehavior;\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/assets/less/export.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n.export-behavior {\n    .export-columns {\n        // background: @primary-bg;\n        // padding: @padding-standard;\n        padding-bottom: 0;\n        // max-height: 400px;\n        // overflow: auto;\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/assets/less/import.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n@columns-bg: @tertiary-bg;\n@column-label-color: @text-color;\n@column-item-bg: @input-bg;\n@column-item-border: @input-border;\n\n@bound-color: @emphasis-color;\n@bound-bg: @secondary-bg;\n\n@unbound-color: @tertiary-color;\n@unbound-bg: @secondary-bg;\n\n@column-padding: 8px;\n@column-font-size: 13px;\n\n.import-behavior {\n    ul {\n        margin: 0;\n        padding: 0;\n        list-style: none;\n\n        li {\n            font-size: @column-font-size;\n        }\n\n        li.placeholder {\n            display: block;\n            position: relative;\n        }\n\n        li.dragged {\n            position: absolute;\n            z-index: 2000;\n            .box-shadow(0 3px 6px rgba(0,0,0,.075));\n        }\n    }\n\n    .import-file-columns,\n    .import-db-columns {\n        height: 400px;\n        background: @columns-bg;\n        padding: 5px;\n        overflow: auto;\n    }\n\n    .import-db-columns {\n        > ul {\n            min-height: 380px;\n        }\n    }\n\n    .import-file-columns {\n        .upload-prompt {\n            display: block;\n            text-align: center;\n            position: absolute;\n            top: 50%;\n            left: 0;\n            right: 0;\n            margin-top: -10px;\n        }\n    }\n\n    .import-column-bindings > ul > li,\n    .import-db-columns > ul > li {\n        cursor: pointer;\n    }\n\n    ul li.dragged,\n    .import-file-columns > ul > li,\n    .import-db-columns > ul > li {\n        background: @column-item-bg;\n        border: 1px solid @column-item-border;\n        border-radius: 3px;\n        margin-bottom: 5px;\n\n        div.import-column-name > span,\n        > span {\n            display: block;\n            padding: @column-padding;\n            padding-left: (@column-padding * 1.5);\n        }\n    }\n\n    .import-db-columns > ul {\n        > li {\n            .column-icon {\n                color: #ccc;\n                position: relative;\n                left: -3px;\n            }\n            &:hover .column-icon {\n                color: #4da7e8;\n            }\n\n            &.is-required {\n                .column-icon {\n                    color: #ab2a1c;\n                }\n            }\n        }\n    }\n\n    .import-file-columns > ul {\n        > li {\n            .clearfix;\n\n            &.is-ignored {\n                display: none;\n            }\n\n            .column-success-icon {\n                display: none;\n                position: relative;\n                left: -2px;\n                width: 15px;\n            }\n\n            &.is-matched {\n                .column-success-icon {\n                    display: inline-block;\n                }\n                .column-ignore-button {\n                    display: none !important;\n                }\n            }\n        }\n\n        div.import-column-name {\n            float: left;\n            width: 45%;\n\n            > span {\n                white-space: nowrap;\n                overflow: hidden;\n                text-overflow: ellipsis;\n            }\n\n            a.column-label {\n                color: @column-label-color;\n            }\n\n            a.column-ignore-button {\n                color: @secondary-color;\n                background: @secondary-bg;\n                font-size: 10px;\n                border-radius: 15px;\n                display: inline-block;\n                text-decoration: none;\n                width: 15px;\n                height: 15px;\n                text-align: center;\n                position: relative;\n                top: -1px;\n                left: -3px;\n                &:hover {\n                    color: white;\n                    background: #ab2a1c;\n                }\n            }\n        }\n\n        .import-column-bindings > ul {\n            float: right;\n            width: 55%;\n        }\n    }\n\n    .import-column-bindings > ul {\n        background: @unbound-bg;\n        position: relative;\n        min-height: (@column-padding * 2) + 18px;\n\n        &:after {\n            .triangle(right, 18px, (@column-padding * 2) + 18px, @column-item-bg);\n            position: absolute;\n            top: 0;\n            left: 0;\n        }\n\n        &:before {\n            position: absolute;\n            padding: @column-padding;\n            padding-left: 28px;\n            content: attr(data-empty-text);\n            color: @unbound-color;\n        }\n\n        > li {\n            .column-icon {\n                color: @text-color;\n                float: right;\n                margin: 3px;\n            }\n\n            &:hover {\n                .column-icon {\n                    color: @emphasis-color;\n                }\n            }\n        }\n\n        > li:not(.dragged) {\n            color: @bound-color;\n            background: @bound-bg;\n            position: relative;\n\n            > span {\n                display: block;\n                padding: @column-padding;\n                padding-left: 28px;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_column_sample_form.php",
    "content": "<div class=\"modal-header\">\n    <h4 class=\"modal-title\"><?= e(__('Column preview')) ?></h4>\n    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n</div>\n<div class=\"modal-body\">\n    <p>\n        <?= e(__('Column')) ?>:\n        <strong><?= $columnName ?></strong>\n    </p>\n    <div class=\"list-preview\">\n        <div class=\"control-simplelist is-divided is-scrollable size-small\" data-control=\"simplelist\">\n            <ul>\n                <?php foreach ($columnData as $sample): ?>\n                    <li class=\"oc-icon-file\">\n                        <?= e($sample) ?>\n                    </li>\n                <?php endforeach ?>\n            </ul>\n        </div>\n    </div>\n</div>\n<div class=\"modal-footer\">\n    <button\n        type=\"button\"\n        class=\"btn btn-secondary\"\n        data-dismiss=\"popup\">\n        <?= e(trans('backend::lang.form.close')) ?>\n    </button>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_container_export.php",
    "content": "<div class=\"export-behavior\">\n\n    <?= $exportFormatFormWidget->render() ?>\n\n    <?php if ($exportOptionsFormWidget): ?>\n        <?= $exportOptionsFormWidget->render() ?>\n    <?php endif ?>\n\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_container_import.php",
    "content": "<div class=\"import-behavior\">\n\n    <?= $importUploadFormWidget->render() ?>\n\n    <?php if ($importOptionsFormWidget): ?>\n        <?= $importOptionsFormWidget->render() ?>\n    <?php endif ?>\n\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_export_columns.php",
    "content": "<div id=\"exportColumns\">\n    <?php if (!$exportCustomFormat): ?>\n        <label class=\"form-label\">\n            <?= __(\"Columns\") ?>\n        </label>\n        <div class=\"export-columns\">\n            <div class=\"control-simplelist with-checkboxes is-sortable\" data-control=\"simplelist\">\n                <ul>\n                    <?php foreach ($exportColumns as $key => $column): ?>\n                        <li>\n                            <span class=\"drag-handle\" title=\"<?= __(\"Reorder\") ?>\">\n                                <i class=\"icon-list-reorder\"></i>\n                            </span>\n                            <div class=\"form-check\">\n                                <input\n                                    type=\"hidden\"\n                                    name=\"export_columns[]\"\n                                    value=\"<?= $key ?>\" />\n                                <input\n                                    class=\"form-check-input\"\n                                    id=\"<?= $this->getId('exportCheckbox-'.$key) ?>\"\n                                    name=\"visible_columns[<?= $key ?>]\"\n                                    value=\"1\"\n                                    checked=\"checked\"\n                                    type=\"checkbox\" />\n                                <label\n                                    class=\"form-check-label\"\n                                    for=\"<?= $this->getId('exportCheckbox-'.$key) ?>\">\n                                        <?= e(__($column)) ?>\n                                </label>\n                            </div>\n                        </li>\n                    <?php endforeach ?>\n                </ul>\n            </div>\n        </div>\n    <?php else: ?>\n        <p>\n            <?= __(\"A custom schema is used for this file format.\") ?>\n        </p>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_export_form.php",
    "content": "<div id=\"exportFormPopup\">\n    <?php if (!$this->fatalError): ?>\n\n        <?= Form::open(['id' => 'exportForm']) ?>\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\"><?= __(\"Export progress\") ?></h4>\n            </div>\n\n            <div id=\"exportContainer\">\n                <div class=\"modal-body\">\n\n                    <div class=\"loading-indicator-container\">\n                        <p>&nbsp;</p>\n                        <div class=\"loading-indicator is-transparent\">\n                            <div><?= __(\"Processing\") ?></div>\n                            <span></span>\n                        </div>\n                    </div>\n                    <p>&nbsp;</p>\n\n                </div>\n            </div>\n        <?= Form::close() ?>\n\n        <script>\n            $('#exportFormPopup').on('popupComplete', function() {\n                $.oc.exportBehavior.processExport();\n            });\n        </script>\n\n    <?php else: ?>\n\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e(__('Export error')) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n        <div class=\"modal-body\">\n            <p class=\"flash-message static error\"><?= e($this->fatalError) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <button\n                type=\"button\"\n                class=\"btn btn-secondary\"\n                data-dismiss=\"popup\">\n                <?= e(trans('backend::lang.form.close')) ?>\n            </button>\n        </div>\n\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_export_result_form.php",
    "content": "<?php if (!$this->fatalError): ?>\n\n    <div class=\"modal-body\">\n        <p>\n            <?= __(\"File export process completed!\") ?>\n            <?= __(\"The browser will now redirect to the file download.\") ?>\n        </p>\n    </div>\n    <div class=\"modal-footer\">\n        <a\n            href=\"<?= $returnUrl ?>\"\n            class=\"btn btn-success\"\n            data-dismiss=\"popup\">\n            <?= __(\"Complete\") ?>\n        </a>\n        <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            data-dismiss=\"popup\">\n            <?= __(\"Close\") ?>\n        </button>\n    </div>\n\n    <script> window.location = '<?= $fileUrl ?>'; </script>\n\n<?php else: ?>\n\n    <div class=\"modal-body\">\n        <p class=\"flash-message static error\"><?= e($this->fatalError) ?></p>\n    </div>\n    <div class=\"modal-footer\">\n        <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            data-dismiss=\"popup\">\n            <?= __(\"Close\") ?>\n        </button>\n    </div>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_import_column_matcher.php",
    "content": "<div id=\"importColumnMatcher\">\n    <?php if (!$importCustomFormat): ?>\n        <div class=\"form-group\">\n            <?= $this->importExportMakePartial('import_toolbar') ?>\n        </div>\n\n        <div class=\"row\">\n            <div class=\"col-md-6\">\n                <div class=\"form-group\">\n                    <label class=\"form-label\">\n                        <?= __(\"File columns\") ?>\n                    </label>\n                    <?= $this->importExportMakePartial('import_file_columns') ?>\n                </div>\n            </div>\n            <div class=\"col-md-6\">\n                <div class=\"form-group\">\n                    <label class=\"form-label\">\n                        <?= __(\"Database fields\") ?>\n                    </label>\n                    <?= $this->importExportMakePartial('import_db_columns') ?>\n                </div>\n            </div>\n        </div>\n    <?php else: ?>\n        <p>\n            <?= __(\"A custom schema is used for this file format.\") ?>\n        </p>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_import_db_columns.php",
    "content": "<div class=\"import-db-columns\" id=\"importDbColumns\">\n    <ul>\n        <?php foreach ($importDbColumns as $column => $label): ?>\n            <?php\n                $isRequired = $this->importIsColumnRequired($column);\n                $iconName = $isRequired ? 'icon-asterisk' : 'icon-link';\n            ?>\n            <li\n                class=\"<?= $isRequired ? 'is-required' : '' ?>\"\n                data-column-name=\"<?= e($column) ?>\">\n                <span>\n                    <i class=\"column-icon <?= $iconName ?>\"></i>\n                    <?= e(__($label)) ?>\n                </span>\n                <input type=\"hidden\" data-column-match-input />\n            </li>\n        <?php endforeach ?>\n    </ul>\n</div>\n\n<script>\n    addEventListener('render', function() {\n        $.oc.importBehavior.bindColumnSorting();\n    });\n</script>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_import_file_columns.php",
    "content": "<div class=\"import-file-columns\" id=\"importFileColumns\">\n    <?php if ($importFileColumns): ?>\n        <ul>\n            <?php foreach ($importFileColumns as $index => $column): ?>\n                <li data-column-id=\"<?= $index ?>\">\n                    <div class=\"import-column-name\">\n                        <span>\n                            <i class=\"column-success-icon text-success icon-check\"></i>\n                            <a\n                                href=\"javascript:;\"\n                                class=\"column-ignore-button\"\n                                data-toggle=\"tooltip\"\n                                data-delay=\"300\"\n                                data-placement=\"right\"\n                                title=\"<?= __(\"Ignore this column\") ?>\"\n                                onclick=\"$.oc.importBehavior.ignoreFileColumn(this)\"\n                            >\n                                <i class=\"icon-close\"></i>\n                            </a>\n                            <a\n                                href=\"javascript:;\"\n                                class=\"column-label\"\n                                onclick=\"$.oc.importBehavior.loadFileColumnSample(this)\"\n                            >\n                                <?= $column ?>\n                            </a>\n                        </span>\n                    </div>\n                    <div class=\"import-column-bindings\">\n                        <ul data-empty-text=\"<?= __(\"Drop column here...\") ?>\"></ul>\n                    </div>\n                </li>\n            <?php endforeach ?>\n        </ul>\n    <?php else: ?>\n        <p class=\"upload-prompt\">\n            <?= __(\"Please upload a valid CSV file.\") ?>\n        </p>\n    <?php endif ?>\n</div>\n\n<script>\n    addEventListener('render', function() {\n        $.oc.importBehavior.bindColumnSorting();\n    });\n</script>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_import_form.php",
    "content": "<div id=\"importFormPopup\">\n    <?php if (!$this->fatalError): ?>\n\n        <?= Form::open(['id' => 'importForm']) ?>\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\"><?= __(\"Import progress\") ?></h4>\n            </div>\n\n            <div id=\"importContainer\">\n                <div class=\"modal-body\">\n\n                    <div class=\"loading-indicator-container\">\n                        <p>&nbsp;</p>\n                        <div class=\"loading-indicator is-transparent\">\n                            <div><?= __(\"Processing\") ?></div>\n                            <span></span>\n                        </div>\n                    </div>\n                    <p>&nbsp;</p>\n\n                </div>\n            </div>\n        <?= Form::close() ?>\n\n        <script>\n            $('#importFormPopup').on('popupComplete', function() {\n                $.oc.importBehavior.processImport();\n            });\n        </script>\n\n    <?php else: ?>\n\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e(__('Import error')) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n        <div class=\"modal-body\">\n            <p class=\"flash-message static error\"><?= e($this->fatalError) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <button\n                type=\"button\"\n                class=\"btn btn-secondary\"\n                data-dismiss=\"popup\">\n                <?= e(trans('backend::lang.form.close')) ?>\n            </button>\n        </div>\n\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_import_result_form.php",
    "content": "<?php if (!$this->fatalError): ?>\n\n    <div class=\"modal-body\">\n\n        <div class=\"scoreboard\">\n            <div data-control=\"toolbar\">\n                <div class=\"scoreboard-item title-value\">\n                    <h4><?= __(\"Created\") ?></h4>\n                    <p><?= $importResults->created ?></p>\n                </div>\n                <div class=\"scoreboard-item title-value\">\n                    <h4><?= __(\"Updated\") ?></h4>\n                    <p><?= $importResults->updated ?></p>\n                </div>\n                <?php if ($importResults->skippedCount): ?>\n                    <div class=\"scoreboard-item title-value\">\n                        <h4><?= __(\"Skipped\") ?></h4>\n                        <p><?= $importResults->skippedCount ?></p>\n                    </div>\n                <?php endif ?>\n                <?php if ($importResults->warningCount): ?>\n                    <div class=\"scoreboard-item title-value\">\n                        <h4><?= __(\"Warnings\") ?></h4>\n                        <p><?= $importResults->warningCount ?></p>\n                    </div>\n                <?php endif ?>\n                <div class=\"scoreboard-item title-value\">\n                    <h4><?= __(\"Errors\") ?></h4>\n                    <p><?= $importResults->errorCount ?></p>\n                </div>\n            </div>\n        </div>\n\n        <?php if ($importResults->hasMessages): ?>\n            <?php\n                $tabs = [\n                    'skipped' => __(\"Skipped Rows\"),\n                    'warnings' => __(\"Warnings\"),\n                    'errors' => __(\"Errors\"),\n                ];\n\n                if (!$importResults->skippedCount) unset($tabs['skipped']);\n                if (!$importResults->warningCount) unset($tabs['warnings']);\n                if (!$importResults->errorCount) unset($tabs['errors']);\n            ?>\n            <div class=\"control-tabs secondary-tabs\" data-control=\"tab\">\n                <ul class=\"nav nav-tabs\">\n                    <?php $count = 0; foreach ($tabs as $code => $tab): ?>\n                        <li class=\"<?= $count++ == 0 ? 'active' : '' ?>\">\n                            <a href=\"#importTab<?= $code ?>\">\n                                <?= $tab ?>\n                            </a>\n                        </li>\n                    <?php endforeach ?>\n                </ul>\n                <div class=\"tab-content\">\n                    <?php $count = 0; foreach ($tabs as $code => $tab): ?>\n                        <div class=\"tab-pane <?= $count++ == 0 ? 'active' : '' ?>\">\n                            <div class=\"control-simplelist is-divided is-scrollable size-small\" data-control=\"simplelist\">\n                                <ul>\n                                    <?php foreach ($importResults->{$code} as $row => $message): ?>\n                                        <li>\n                                            <strong><?= e(trans('backend::lang.import_export.row', ['row' => $row + $sourceIndexOffset])) ?></strong>\n                                            - <?= e($message) ?>\n                                        </li>\n                                    <?php endforeach ?>\n                                </ul>\n                            </div>\n                        </div>\n                    <?php endforeach ?>\n                </div>\n            </div>\n        <?php endif ?>\n\n    </div>\n    <div class=\"modal-footer\">\n        <a\n            href=\"<?= $returnUrl ?>\"\n            class=\"btn btn-success\"\n            data-dismiss=\"popup\">\n            <?= __(\"Complete\") ?>\n        </a>\n        <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            data-dismiss=\"popup\">\n            <?= __(\"Close\") ?>\n        </button>\n    </div>\n\n<?php else: ?>\n\n    <div class=\"modal-body\">\n        <p class=\"flash-message static error\"><?= e($this->fatalError) ?></p>\n    </div>\n    <div class=\"modal-footer\">\n        <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            data-dismiss=\"popup\">\n            <?= __(\"Close\") ?>\n        </button>\n    </div>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/_import_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <a\n        href=\"javascript:;\"\n        id=\"showIgnoredColumnsButton\"\n        class=\"btn btn-sm btn-secondary oc-icon-eye disabled\"\n        onclick=\"$.oc.importBehavior.showIgnoredColumns()\">\n        <?= __(\"Show Ignored Columns\") ?>\n    </a>\n    <a\n        href=\"javascript:;\"\n        id=\"autoMatchColumnsButton\"\n        class=\"btn btn-sm btn-secondary oc-icon-bullseye\"\n        onclick=\"$.oc.importBehavior.autoMatchColumns()\">\n        <?= __(\"Auto Match Columns\") ?>\n    </a>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/fields_export.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    step1_section:\n        label: \"1. Export output format\"\n        type: section\n\n    file_format:\n        label: File Format\n        type: dropdown\n        options:\n            json: JSON\n            csv: CSV\n            csv_custom: CSV Custom\n        span: left\n\n    format_delimiter:\n        label: Delimiter Character\n        span: left\n        trigger:\n            action: show\n            condition: value[csv_custom]\n            field: file_format\n\n    format_enclosure:\n        label: Enclosure Character\n        span: auto\n        trigger:\n            action: show\n            condition: value[csv_custom]\n            field: file_format\n\n    format_escape:\n        label: Escape Character\n        span: auto\n        trigger:\n            action: show\n            condition: value[csv_custom]\n            field: file_format\n\n    format_encoding:\n        label: File Encoding\n        span: auto\n        type: dropdown\n        trigger:\n            action: show\n            condition: value[csv_custom]\n            field: file_format\n\n    step2_section:\n        label: 2. Select columns to export\n        type: section\n\n    export_columns:\n        type: partial\n        path: ~/modules/backend/behaviors/importexportcontroller/partials/_export_columns.php\n        span: left\n        dependsOn: file_format\n\n    step3_section:\n        label: 3. Set export options\n        type: section\n"
  },
  {
    "path": "modules/backend/behaviors/importexportcontroller/partials/fields_import.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    step1_section:\n        label: \"1. Upload an Import File\"\n        type: section\n\n    file_format:\n        label: File Format\n        type: dropdown\n        options:\n            json: JSON\n            csv: CSV\n            csv_custom: CSV Custom\n        span: right\n\n    import_file:\n        label: Import File\n        type: fileupload\n        mode: file\n        span: left\n        fileTypes: [csv, json]\n        useCaption: false\n\n    format_delimiter:\n        label: Delimiter Character\n        span: left\n        trigger:\n            action: show\n            condition: value[csv_custom]\n            field: file_format\n\n    format_enclosure:\n        label: Enclosure Character\n        span: auto\n        trigger:\n            action: show\n            condition: value[csv_custom]\n            field: file_format\n\n    format_escape:\n        label: Escape Character\n        span: auto\n        trigger:\n            action: show\n            condition: value[csv_custom]\n            field: file_format\n\n    format_encoding:\n        label: File Encoding\n        span: auto\n        type: dropdown\n        trigger:\n            action: show\n            condition: value[csv_custom]\n            field: file_format\n\n    first_row_titles:\n        label: First row contains column titles\n        comment: Leave this checked if the first row in the CSV is used as the column titles.\n        type: checkbox\n        span: left\n        trigger:\n            action: show\n            condition: value[csv][csv_custom]\n            field: file_format\n\n    step2_section:\n        label: \"2. Match the File Columns to Database Fields\"\n        type: section\n\n    column_matcher:\n        type: partial\n        path: ~/modules/backend/behaviors/importexportcontroller/partials/_import_column_matcher.php\n        dependsOn: [import_file, file_format, first_row_titles, format_delimiter, format_enclosure, format_escape, format_encoding]\n\n    step3_section:\n        label: \"3. Set Import Options\"\n        type: section\n"
  },
  {
    "path": "modules/backend/behaviors/listcontroller/HasOverrides.php",
    "content": "<?php namespace Backend\\Behaviors\\ListController;\n\n/**\n * HasOverrides in the controller\n */\ntrait HasOverrides\n{\n    /**\n     * listExtendColumns is called after the list columns are defined.\n     * @param \\Backend\\Widgets\\List $host The hosting list widget\n     * @return void\n     */\n    public function listExtendColumns($host)\n    {\n    }\n\n    /**\n     * listFilterExtendScopes is called after the filter scopes are defined.\n     * @param \\Backend\\Widgets\\Filter $host The hosting filter widget\n     * @return void\n     */\n    public function listFilterExtendScopes($host)\n    {\n    }\n\n    /**\n     * listExtendModel controller override: Extend supplied model\n     * @param Model $model\n     * @return Model\n     */\n    public function listExtendModel($model, $definition = null)\n    {\n        return $model;\n    }\n\n    /**\n     * listExtendQueryBefore controller override: Extend the query used for populating the list\n     * before the default query is processed.\n     * @param \\October\\Rain\\Database\\Builder $query\n     */\n    public function listExtendQueryBefore($query, $definition = null)\n    {\n    }\n\n    /**\n     * listExtendQuery controller override: Extend the query used for populating the list\n     * after the default query is processed.\n     * @param \\October\\Rain\\Database\\Builder $query\n     */\n    public function listExtendQuery($query, $definition = null)\n    {\n    }\n\n    /**\n     * listExtendSortColumn controller override: Customize the sort column and direction\n     * to include secondary sorting columns if necessary\n     * @param \\October\\Rain\\Database\\Builder $query\n     */\n    public function listExtendSortColumn($query, $sortColumn, $sortDirection, $definition = null)\n    {\n    }\n\n    /**\n     * listExtendRecords controller override: Extend the records used for populating the list\n     * after the query is processed.\n     * @param Illuminate\\Contracts\\Pagination\\LengthAwarePaginator|Illuminate\\Database\\Eloquent\\Collection $records\n     */\n    public function listExtendRecords($records, $definition = null)\n    {\n    }\n\n    /**\n     * listFilterExtendQuery controller override: Extend the query used for populating the filter\n     * options before the default query is processed.\n     * @param \\October\\Rain\\Database\\Builder $query\n     * @param array $scope\n     */\n    public function listFilterExtendQuery($query, $scope)\n    {\n    }\n\n    /**\n     * listInjectRowClass returns a CSS class name for a list row (<tr class=\"...\">).\n     * @param  Model $record The populated model used for the column\n     * @param  string $definition List definition (optional)\n     * @return string CSS class name\n     */\n    public function listInjectRowClass($record, $definition = null)\n    {\n    }\n\n    /**\n     * listOverrideColumnValue replaces a table column value (<td>...</td>)\n     * @param  Model $record The populated model used for the column\n     * @param  string $columnName The column name to override\n     * @param  string $definition List definition (optional)\n     * @return string HTML view\n     */\n    public function listOverrideColumnValue($record, $columnName, $definition = null)\n    {\n    }\n\n    /**\n     * listOverrideHeaderValue replaces the entire table header contents (<th>...</th>) with custom HTML\n     * @param  string $columnName The column name to override\n     * @param  string $definition List definition (optional)\n     * @return string HTML view\n     */\n    public function listOverrideHeaderValue($columnName, $definition = null)\n    {\n    }\n\n    /**\n     * listOverrideRecordUrl overrides the record url for the given record\n     * @param \\October\\Rain\\Database\\Model $record\n     * @param string|null $definition List definition (optional)\n     * @return string|array|void New url or complex directive\n     */\n    public function listOverrideRecordUrl($record, $definition = null)\n    {\n    }\n\n    /**\n     * listAfterReorder is called after the list record structure is reordered\n     * @param \\October\\Rain\\Database\\Model $record\n     * @param string|null $definition List definition (optional)\n     */\n    public function listAfterReorder($record, $definition = null)\n    {\n    }\n\n    /**\n     * listExtendRefreshResults is called when the list is refreshed using AJAX,\n     * and should return an array of additional partial updates.\n     * @param Backend\\Widgets\\List $host\n     * @param array $result\n     * @param  string $definition List definition (optional)\n     * @return array\n     */\n    public function listExtendRefreshResults($host, $result, $definition = null)\n    {\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/listcontroller/partials/_container.php",
    "content": "<?php if ($toolbar): ?>\n    <?= $toolbar->render() ?>\n<?php endif ?>\n\n<div class=\"list-widget-container\">\n    <?php if ($filter): ?>\n        <?= $filter->render() ?>\n    <?php endif ?>\n\n    <?= $list->render() ?>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/HasExtraConfig.php",
    "content": "<?php namespace Backend\\Behaviors\\RelationController;\n\n/**\n * HasExtraConfig implements state for the relation controller\n */\ntrait HasExtraConfig\n{\n    /**\n     * @var array extraConfig as a final state\n     */\n    protected $extraConfig = [];\n\n    /**\n     * @var string extraConfigChain provided by the relationship chain\n     */\n    protected $extraConfigChain = [];\n\n    /**\n     * @var string extraConfigRender provided by the relationRender method\n     */\n    protected $extraConfigRender = [];\n\n    /**\n     * @var bool bumpSessionKeys is used to create a new session for forms\n     */\n    protected $bumpSessionKeys = false;\n\n    /**\n     * setExtraConfigForChain returns extra config with the relation chain, encoded\n     */\n    protected function setExtraConfigForChain()\n    {\n        if ($this->bumpSessionKeys) {\n            $this->relationSessionKey = $this->sessionKey;\n            $this->sessionKey = str_random(40);\n        }\n\n        $extraConfig = $this->extraConfig;\n        $extraConfig['chain'][] = $this->field;\n        $extraConfig['manageIds'][$this->field] = $this->manageId;\n        $extraConfig['sessionKeys'][$this->field] = [$this->sessionKey, $this->relationSessionKey];\n\n        $this->extraConfigChain = $this->extraConfig = $extraConfig;\n    }\n\n    /**\n     * setExtraConfigForRender comes from the render call method\n     */\n    protected function setExtraConfigForRender($config)\n    {\n        $this->extraConfigRender = $config;\n\n        $this->setExtraConfig($config);\n    }\n\n    /**\n     * setExtraConfig usually comes from the postback variable\n     */\n    protected function setExtraConfig($config)\n    {\n        if (is_string($config)) {\n            $config = json_decode($config, true);\n        }\n\n        if (!is_array($config)) {\n            $config = [];\n        }\n\n        $this->extraConfig = array_merge(\n            $config,\n            $this->extraConfigChain,\n            $this->extraConfigRender\n        );\n    }\n\n    /**\n     * applyExtraConfig\n     */\n    protected function applyExtraConfig($field = null)\n    {\n        if (!$field) {\n            $field = $this->field;\n        }\n\n        $config = $this->extraConfig;\n\n        $originalConfig = $this->originalConfig->{$field} ?? null;\n        if (!$config || !$originalConfig) {\n            return;\n        }\n\n        // readOnlyDefault is used by the relation widget to apply a soft\n        // default value, i.e. where a value is otherwise unspecified.\n        // In order of application: 1. default 2. config 3. render\n        if (\n            array_key_exists('readOnlyDefault', $config) &&\n            !array_key_exists('readOnly', $config) &&\n            !array_key_exists('readOnly', $originalConfig)\n        ) {\n            $config['readOnly'] = $config['readOnlyDefault'];\n        }\n\n        $parsedConfig = array_only($config, ['readOnly']);\n        $parsedConfig['view'] = array_only($config, ['recordUrl', 'recordOnClick']);\n\n        $this->originalConfig->{$field} = array_replace_recursive(\n            $originalConfig,\n            $parsedConfig\n        );\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/HasManageMode.php",
    "content": "<?php namespace Backend\\Behaviors\\RelationController;\n\nuse Lang;\nuse Request;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasOneOrMany;\nuse Backend\\Widgets\\Form as FormWidget;\nuse Backend\\Widgets\\Lists as ListWidget;\nuse ApplicationException;\n\n/**\n * HasManageMode contains logic for managing related records\n */\ntrait HasManageMode\n{\n    /**\n     * @var ListWidget|null manageListWidget used for managing as a list\n     */\n    protected $manageListWidget;\n\n    /**\n     * @var FormWidget|null manageFormWidget used for managing as a form\n     */\n    protected $manageFormWidget;\n\n    /**\n     * @var Model manageModel is a reference to the model used for manage form\n     */\n    protected $manageModel;\n\n    /**\n     * @var \\Backend\\Widgets\\Filter manageFilterWidget\n     */\n    protected $manageFilterWidget;\n\n    /**\n     * @var string manageTitle used for the manage popup\n     */\n    protected $manageTitle;\n\n    /**\n     * @var string manageMode of relation as list, form, or pivot\n     */\n    protected $manageMode;\n\n    /**\n     * @var int manageId is the primary id of an existing relation record\n     */\n    protected $manageId;\n\n    /**\n     * relationGetManageFormWidget returns the manage form widget used by this behavior\n     */\n    public function relationGetManageFormWidget(): ?FormWidget\n    {\n        return $this->manageFormWidget;\n    }\n\n    /**\n     * relationGetManageListWidget returns the manage list widget used by this behavior\n     */\n    public function relationGetManageListWidget(): ?ListWidget\n    {\n        return $this->manageListWidget;\n    }\n\n    /**\n     * relationGetManageWidget returns the manage widget used by this behavior\n     * @deprecated use relationGetManageListWidget or relationGetManageFormWidget\n     * @return \\Backend\\Classes\\WidgetBase\n     */\n    public function relationGetManageWidget()\n    {\n        // Multiple (has many, belongs to many)\n        if ($this->manageMode === 'list' || $this->manageMode === 'pivot') {\n            return $this->manageListWidget;\n        }\n\n        // Single (belongs to, has one)\n        if ($this->manageMode === 'form') {\n            return $this->manageFormWidget;\n        }\n\n        return null;\n    }\n\n    /**\n     * makeManageListWidget prepares the list widget for management\n     */\n    protected function makeManageListWidget(): ?ListWidget\n    {\n        if (!$config = $this->makeConfigForMode('manage', 'list')) {\n            return null;\n        }\n\n        $this->manageModel = $this->relationModel;\n\n        $isPivot = $this->manageMode === 'pivot';\n\n        $config->model = $this->manageModel;\n        $config->alias = $this->alias . 'ManageList';\n        $config->showSetup = $this->getConfig('manage[showSetup]', false);\n        $config->showCheckboxes = $this->getConfig('manage[showCheckboxes]', !$isPivot);\n        $config->showSorting = $this->getConfig('manage[showSorting]', !$isPivot);\n        $config->defaultSort = $this->getConfig('manage[defaultSort]');\n        $config->recordsPerPage = $this->getConfig('manage[recordsPerPage]');\n        $config->customPageName = $this->getConfig('manage[customPageName]', false);\n        $config->recordOnClick = $this->getConfig('manage[recordOnClick]');\n\n        if ($this->viewMode === 'single') {\n            $config->showCheckboxes = false;\n            $config->recordOnClick ??= sprintf(\n                \"oc.relationBehavior.clickManageListRecord(this, ':%s', '%s', '%s')\",\n                $this->manageModel->getKeyName(),\n                $this->relationGetId(),\n                $this->relationSessionKey\n            );\n        }\n        elseif ($config->showCheckboxes) {\n            $config->recordOnClick ??= \"oc.relationBehavior.toggleListCheckbox(this)\";\n        }\n        elseif ($isPivot) {\n            $config->recordOnClick ??= sprintf(\n                \"oc.relationBehavior.clickManagePivotListRecord(this, ':%s', '%s', '%s')\",\n                $this->manageModel->getKeyName(),\n                $this->relationGetId(),\n                $this->relationSessionKey\n            );\n        }\n\n        $widget = $this->makeWidget(ListWidget::class, $config);\n\n        // Apply defined constraints\n        if ($sqlConditions = $this->getConfig('manage[conditions]')) {\n            $widget->bindEvent('list.extendQueryBefore', function ($query) use ($sqlConditions) {\n                $query->whereRaw($sqlConditions);\n            });\n        }\n        elseif ($scopeMethod = $this->getConfig('manage[scope]')) {\n            $widget->bindEvent('list.extendQueryBefore', function ($query) use ($scopeMethod) {\n                $query->$scopeMethod($this->relationParent);\n            });\n        }\n        else {\n            $widget->bindEvent('list.extendQueryBefore', function ($query) {\n                $this->relationObject->addDefinedConstraintsToQuery($query);\n\n                // Reset any orders that come from the definition since they may\n                // reference the pivot table that isn't included in this query\n                if (in_array($this->relationType, ['belongsToMany', 'morphedByMany', 'morphToMany'])) {\n                    $query->getQuery()->reorder();\n                }\n            });\n        }\n\n        // Link the Search Widget to the List Widget\n        if ($this->searchWidget) {\n            $this->searchWidget->bindEvent('search.submit', function () use ($widget) {\n                $widget->setSearchTerm($this->searchWidget->getActiveTerm());\n                return $widget->onRefresh();\n            });\n\n            // Pass search options\n            $widget->setSearchOptions([\n                'mode' => $this->getConfig('manage[searchMode]'),\n                'scope' => $this->getConfig('manage[searchScope]'),\n            ]);\n\n            // Persist the search term across AJAX requests only\n            if (Request::ajax()) {\n                $widget->setSearchTerm($this->searchWidget->getActiveTerm());\n            }\n        }\n\n        // Link the Filter Widget to the List Widget\n        if ($this->manageFilterWidget) {\n            $this->manageFilterWidget->bindEvent('filter.update', function () use ($widget) {\n                return $widget->onFilter();\n            });\n\n            // Apply predefined filter values\n            $widget->addFilter([$this->manageFilterWidget, 'applyAllScopesToQuery']);\n        }\n\n        // Exclude existing relationships for non-incrementing pivots\n        if (!$this->isPivotIncrementing()) {\n            $widget->bindEvent('list.extendQuery', function ($query) {\n                if (count($existingIds = $this->findExistingRelationIds())) {\n                    $query->whereNotIn($this->manageModel->getQualifiedKeyName(), $existingIds);\n                }\n            });\n        }\n\n        return $widget;\n    }\n\n    /**\n     * makeManageFormWidget prepares the form widget for management\n     */\n    protected function makeManageFormWidget(): ?FormWidget\n    {\n        if (!$config = $this->makeConfigForMode('manage', 'form')) {\n            return null;\n        }\n\n        $this->manageModel = $this->relationModel;\n\n        // Existing record\n        if ($this->manageId) {\n            $this->manageModel = $this->findManageModelObject($this->manageId);\n\n            if (!$this->manageModel) {\n                throw new ApplicationException(Lang::get('backend::lang.model.not_found', [\n                    'class' => get_class($this->relationModel),\n                    'id' => $this->manageId,\n                ]));\n            }\n        }\n\n        $config->model = $this->manageModel;\n        $config->arrayName = class_basename($this->relationModel);\n        $config->context = $this->evalFormContext('manage', !!$this->manageId);\n        $config->alias = $this->alias . 'ManageForm';\n        $config->parentFieldName = $this->field;\n\n        $widget = $this->makeWidget(FormWidget::class, $config);\n\n        return $widget;\n    }\n\n    /**\n     * onRelationManageForm\n     */\n    public function onRelationManageForm()\n    {\n        // The form should not share its session key with the parent\n        $this->bumpSessionKeys = true;\n\n        $this->beforeAjax();\n\n        if ($this->manageMode === 'form' && !$this->manageFormWidget) {\n            throw new ApplicationException(\"Missing configuration for [manage.{$this->manageMode}] in RelationController definition [{$this->field}].\");\n        }\n\n        if ($this->manageMode !== 'form' && !$this->manageListWidget) {\n            throw new ApplicationException(\"Missing configuration for [manage.{$this->manageMode}] in RelationController definition [{$this->field}].\");\n        }\n\n        // Updating an existing record\n        if ($this->manageMode === 'pivot' && ($this->manageId || $this->pivotId)) {\n            return $this->onRelationManagePivotForm();\n        }\n\n        $this->vars['newSessionKey'] = $this->sessionKey;\n\n        return $this->relationMakePartial('manage_' . $this->manageMode);\n    }\n\n    /**\n     * onRelationManageCreate a new related model\n     */\n    public function onRelationManageCreate()\n    {\n        $this->beforeAjax();\n\n        $saveData = $this->manageFormWidget->getSaveData();\n        $sessionKey = $this->deferredBinding ? $this->relationSessionKey : null;\n        $parentModel = $this->relationObject->getParent();\n        $newModel = $this->relationModel;\n\n        $this->controller->relationBeforeSave($this->field, $newModel);\n        $this->controller->relationBeforeCreate($this->field, $newModel);\n\n        $modelsToSave = $this->prepareModelsToSave($newModel, $saveData);\n        foreach ($modelsToSave as $modelToSave) {\n            $modelToSave->save(['sessionKey' => $this->manageFormWidget->getSessionKey(), 'propagate' => true]);\n        }\n\n        // No need to add relationships that have a valid association via HasOneOrMany::make\n        if (!$this->relationObject instanceof HasOneOrMany || !$parentModel->exists) {\n            $this->relationObject->add($newModel, $sessionKey);\n        }\n\n        // Belongs To won't save when using add() so it should occur if the conditions are right.\n        if ($this->relationType === 'belongsTo' && $parentModel->exists && !$this->deferredBinding) {\n            $parentModel->save();\n        }\n\n        // Display updated form\n        if ($this->viewMode === 'single') {\n            $this->viewFormWidget->model = $newModel;\n            $this->viewFormWidget->setFormValues($saveData);\n        }\n\n        $this->controller->relationAfterSave($this->field, $newModel);\n        $this->controller->relationAfterCreate($this->field, $newModel);\n\n        $this->showFlashMessage('flashCreate');\n\n        return $this->relationRefresh();\n    }\n\n    /**\n     * onRelationManageUpdate an existing related model's fields\n     */\n    public function onRelationManageUpdate()\n    {\n        $this->beforeAjax();\n\n        $saveData = $this->manageFormWidget->getSaveData();\n\n        $this->controller->relationBeforeSave($this->field, $this->manageModel);\n        $this->controller->relationBeforeUpdate($this->field, $this->manageModel);\n\n        $modelsToSave = $this->prepareModelsToSave($this->manageModel, $saveData);\n        foreach ($modelsToSave as $modelToSave) {\n            $modelToSave->save(['sessionKey' => $this->manageFormWidget->getSessionKey(), 'propagate' => true]);\n        }\n\n        // Display updated form\n        if ($this->viewMode === 'single') {\n            $this->viewFormWidget->setFormValues($saveData);\n        }\n\n        $this->controller->relationAfterSave($this->field, $this->manageModel);\n        $this->controller->relationAfterUpdate($this->field, $this->manageModel);\n\n        $this->showFlashMessage('flashUpdate');\n\n        return $this->relationRefresh();\n    }\n\n    /**\n     * onRelationManageDelete an existing related model completely\n     */\n    public function onRelationManageDelete()\n    {\n        $this->beforeAjax();\n\n        $deletedModels = [];\n\n        // Multiple (has many, belongs to many)\n        if ($this->viewMode === 'multi') {\n            if (($checkedIds = post('checked')) && is_array($checkedIds)) {\n                foreach ($checkedIds as $relationId) {\n                    if ($pivotKey = $this->isPivotIncrementing()) {\n                        $obj = $this->relationObject->wherePivot($pivotKey, $relationId)->first();\n                    }\n                    else {\n                        $obj = $this->findManageModelObject($relationId);\n                    }\n\n                    if (!$obj) {\n                        continue;\n                    }\n\n                    $obj->delete();\n                    $deletedModels[] = $obj;\n                }\n            }\n        }\n        // Single (belongs to, has one)\n        elseif ($this->viewMode === 'single') {\n            $relatedModel = $this->viewModel;\n            if ($relatedModel->exists) {\n                $relatedModel->delete();\n                $deletedModels[] = $relatedModel;\n            }\n\n            $this->resetViewWidgetModel();\n            $this->viewModel = $this->relationModel;\n        }\n\n        $this->controller->relationAfterDelete($this->field, $deletedModels);\n\n        $this->showFlashMessage('flashDelete');\n\n        return $this->relationRefresh();\n    }\n\n    /**\n     * onRelationManageAdd an existing related model to the primary model\n     */\n    public function onRelationManageAdd()\n    {\n        $this->beforeAjax();\n\n        $recordId = post('record_id');\n        $sessionKey = $this->deferredBinding ? $this->relationSessionKey : null;\n\n        // Add\n        if ($this->viewMode === 'multi') {\n            $checkedIds = $recordId ? [$recordId] : $this->manageListWidget->getAllCheckedIds();\n\n            if (is_array($checkedIds)) {\n                // Remove existing relations from the array\n                $existingIds = $this->findExistingRelationIds($checkedIds);\n                $checkedIds = array_diff($checkedIds, $existingIds);\n                $foreignKeyName = $this->relationModel->getKeyName();\n\n                $models = $this->relationModel->whereIn($foreignKeyName, $checkedIds)->get();\n\n                $this->controller->relationBeforeAdd($this->field, $models);\n\n                foreach ($models as $model) {\n                    $this->relationObject->add($model, $sessionKey);\n                }\n\n                $this->controller->relationAfterAdd($this->field, $models);\n            }\n\n            $this->showFlashMessage('flashAdd');\n        }\n        // Link\n        elseif ($this->viewMode === 'single') {\n            if ($recordId && ($model = $this->findManageModelObject($recordId))) {\n                $this->relationObject->add($model, $sessionKey);\n                $this->viewFormWidget->setFormValues($model->attributes);\n\n                // Belongs To won't save when using add() so it should occur if the conditions are right.\n                if ($this->relationType === 'belongsTo' && !$this->deferredBinding) {\n                    $parentModel = $this->relationObject->getParent();\n                    if ($parentModel->exists) {\n                        $parentModel->save();\n                    }\n                }\n            }\n\n            $this->showFlashMessage('flashLink');\n        }\n\n        return $this->relationRefresh();\n    }\n\n    /**\n     * onRelationManageRemove an existing related model from the primary model\n     */\n    public function onRelationManageRemove()\n    {\n        $this->beforeAjax();\n\n        $recordId = post('record_id');\n        $sessionKey = $this->deferredBinding ? $this->relationSessionKey : null;\n        $relatedModel = $this->relationModel;\n\n        // Remove\n        if ($this->viewMode === 'multi') {\n            $checkedIds = $recordId ? [$recordId] : post('checked');\n\n            if (is_array($checkedIds)) {\n                if ($pivotKey = $this->isPivotIncrementing()) {\n                    $models = $this->relationObject->wherePivotIn($pivotKey, $checkedIds)->get();\n                }\n                else {\n                    $foreignKeyName = $relatedModel->getKeyName();\n                    $models = $relatedModel->whereIn($foreignKeyName, $checkedIds)->get();\n                }\n\n                $this->controller->relationBeforeRemove($this->field, $models);\n\n                foreach ($models as $model) {\n                    $this->relationObject->remove($model, $sessionKey);\n                }\n\n                $this->controller->relationAfterRemove($this->field, $models);\n            }\n\n            $this->showFlashMessage('flashRemove');\n        }\n        // Unlink\n        elseif ($this->viewMode === 'single') {\n            if ($this->relationType === 'belongsTo') {\n                $this->relationObject->dissociate();\n                $this->relationObject->getParent()->save();\n            }\n            elseif ($this->relationType === 'hasOne' || $this->relationType === 'morphOne') {\n                if ($obj = $this->findManageModelObject($recordId)) {\n                    $this->relationObject->remove($obj, $sessionKey);\n                }\n                elseif ($this->viewModel->exists) {\n                    $this->relationObject->remove($this->viewModel, $sessionKey);\n                }\n            }\n\n            $this->resetViewWidgetModel();\n\n            $this->showFlashMessage('flashUnlink');\n        }\n\n        return $this->relationRefresh();\n    }\n\n    /**\n     * evalManageTitle determines the management mode popup title\n     */\n    protected function evalManageTitle(): string\n    {\n        if ($customTitle = $this->getConfig('manage[title]')) {\n            return Lang::get($customTitle);\n        }\n\n        switch ($this->manageMode) {\n            case 'pivot':\n            case 'list':\n                if ($this->eventTarget === 'button-link') {\n                    return $this->getCustomLang('titleLinkForm');\n                }\n                else {\n                    return $this->getCustomLang('titleAddForm');\n                }\n            case 'form':\n                if ($this->readOnly) {\n                    return $this->getCustomLang('titlePreviewForm');\n                }\n                elseif ($this->manageId) {\n                    return $this->getCustomLang('titleUpdateForm');\n                }\n                else {\n                    return $this->getCustomLang('titleCreateForm');\n                }\n        }\n\n        return '';\n    }\n\n    /**\n     * evalManageMode determines the management mode based on the relation type and settings\n     * @return string\n     */\n    protected function evalManageMode()\n    {\n        switch ($this->eventTarget) {\n            case 'button-create':\n            case 'button-update':\n                return 'form';\n\n            case 'button-link':\n                return 'list';\n        }\n\n        switch ($this->relationType) {\n            case 'belongsTo':\n                return 'list';\n\n            case 'morphToMany':\n            case 'morphedByMany':\n            case 'belongsToMany':\n                if (isset($this->config->pivot)) {\n                    return 'pivot';\n                }\n                elseif ($this->eventTarget === 'list') {\n                    return 'form';\n                }\n                else {\n                    return 'list';\n                }\n\n            case 'hasOne':\n            case 'morphOne':\n            case 'hasMany':\n            case 'morphMany':\n            case 'hasManyThrough':\n                if ($this->eventTarget === 'button-add') {\n                    return 'list';\n                }\n\n                return 'form';\n        }\n    }\n\n    /**\n     * findManageModelObject for the current field\n     */\n    protected function findManageModelObject($recordId)\n    {\n        if (!strlen($recordId)) {\n            return null;\n        }\n\n        $query = $this->relationModel->newQuery();\n\n        $this->controller->relationExtendManageFormQuery($this->field, $query);\n\n        return $query->find($recordId);\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/HasNestedRelations.php",
    "content": "<?php namespace Backend\\Behaviors\\RelationController;\n\nuse Form as FormHelper;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\n\n/**\n * HasNestedRelations implements nested relation chains\n */\ntrait HasNestedRelations\n{\n    /**\n     * @var array manageIds provided by the relationship chain\n     */\n    protected $manageIds = [];\n\n    /**\n     * @var array sessionKeys provided by the relationship chain\n     */\n    protected $sessionKeys = [];\n\n    /**\n     * getSessionKeysForField returns a session key for saving a form and for binding a relation,\n     * the result is an array with [formSessionKey, relationSessionKey]\n     */\n    protected function getSessionKeysForField($field): array\n    {\n        if (isset($this->sessionKeys[$field])) {\n            return $this->sessionKeys[$field];\n        }\n\n        if ($configSessionKey = $this->getConfig('sessionKey')) {\n            return $this->sessionKeys[$field] = [$configSessionKey, $configSessionKey];\n        }\n\n        $sessionKey = post('_session_key', FormHelper::getSessionKey());\n        $relationSessionKey = post('_relation_session_key', $sessionKey);\n\n        return $this->sessionKeys[$field] = [$sessionKey, $relationSessionKey];\n    }\n\n    /**\n     * getManageIdForField\n     */\n    protected function getManageIdForField($field)\n    {\n        // Field checksum for manage id\n        if ($field === post('_relation_field') && ($manageId = post('manage_id', -1)) !== -1) {\n            return $this->manageIds[$field] = $manageId;\n        }\n\n        if (isset($this->manageIds[$field])) {\n            return $this->manageIds[$field];\n        }\n\n        return null;\n    }\n\n    /**\n     * initNestedRelation checks the extra configuration for a relationship chain\n     * and binds the manage forms to the controller, which may contain additional\n     * relation definitions via the relation form widget.\n     */\n    protected function initNestedRelation($model, $parentField)\n    {\n        // Process session keys\n        $sessionKeys = $this->extraConfig['sessionKeys'] ?? [];\n        foreach ($sessionKeys as $field => $keys) {\n            if (is_array($keys)) {\n                $this->sessionKeys[$field] = $keys;\n            }\n        }\n\n        // Process manage IDs\n        $manageIds = $this->extraConfig['manageIds'] ?? [];\n        foreach ($manageIds as $field => $id) {\n            $this->manageIds[$field] = $id;\n        }\n\n        // Process nesting chain\n        $checked = [];\n        $checked[$parentField] = true;\n        $chain = $this->extraConfig['chain'] ?? [];\n        foreach ($chain as $field) {\n            if (!$field || isset($checked[$field])) {\n                continue;\n            }\n\n            $this->initRelationInternal($model, $field);\n            $checked[$field] = true;\n        }\n    }\n\n    /**\n     * makeNestedRelationModel resolves a relation based on a nested field name\n     * E.g: model[relation1][relation2] → $model->relation1()->relation2()\n     */\n    protected function makeNestedRelationModel($model, $field)\n    {\n        if (!str_contains($field, '[') || !str_contains($field, ']')) {\n            return [$model, $field];\n        }\n\n        if ($result = $this->resolveNestedRelationModelFromManageId($model, $field)) {\n            return $result;\n        }\n\n        if ($result = $this->resolveNestedRelationModelFromModelRelationship($model, $field)) {\n            return $result;\n        }\n\n        // Fallback with an empty related model\n        return $this->resolveNestedRelationModelFromDefault($model, $field);\n    }\n\n    /**\n     * resolveNestedRelationModelFromModelRelationship returns a nested relation model\n     * locating it using `array_get` to resolve the value\n     */\n    protected function resolveNestedRelationModelFromModelRelationship($model, $field): ?array\n    {\n        $parts = HtmlHelper::nameToArray($field);\n        $lastField = array_pop($parts);\n\n        // Custom array_get() function to look for [id:x] segments\n        $arrayGet = function($model, $parts, $default = null) {\n            foreach ($parts as $segment) {\n                $isPrimaryKey = str_starts_with($segment, 'id:');\n                if ($isPrimaryKey) {\n                    $segment = ltrim($segment, 'id:');\n                }\n\n                if ($isPrimaryKey && $model instanceof \\Illuminate\\Support\\Collection) {\n                    $model = $model->find($segment);\n                }\n                else {\n                    $model = array_get($model, $segment);\n                }\n\n                // Prevents an empty collection resolving as true here\n                if ($model instanceof \\Illuminate\\Support\\Collection && $model->isEmpty()) {\n                    return $default;\n                }\n\n                if (!$model) {\n                    return $default;\n                }\n            }\n\n            return $model;\n        };\n\n        if ($lookupModel = $arrayGet($model, $parts)) {\n            return [$lookupModel, $lastField];\n        }\n\n        return null;\n    }\n\n    /**\n     * resolveNestedRelationModelFromManageId returns a resolved relation with a single hop\n     */\n    protected function resolveNestedRelationModelFromManageId($model, $field): ?array\n    {\n        // Looking for a direct hop up, so pop off the end\n        $parts = HtmlHelper::nameToArray($field);\n        array_pop($parts);\n\n        // Rebuild the field name with the end popped off\n        $parentField = array_shift($parts);\n        if ($parts) {\n            $parentField .= '['.implode('][', $parts).']';\n        }\n\n        // Locate the parent in the manage IDs, populate the model if possible\n        if (array_key_exists($parentField, $this->manageIds)) {\n            [$lastModel, $lastField] = $this->resolveNestedRelationModelFromDefault($model, $field);\n\n            if (\n                ($parentId = $this->manageIds[$parentField]) &&\n                ($manageModel = $lastModel->find($parentId))\n            ) {\n                $lastModel = $manageModel;\n            }\n\n            return [$lastModel, $lastField];\n        }\n\n        return null;\n    }\n\n    /**\n     * resolveNestedRelationModelFromDefault\n     */\n    protected function resolveNestedRelationModelFromDefault($model, $field): array\n    {\n        $parts = array_filter(HtmlHelper::nameToArray($field), function($val) {\n            return !is_numeric(ltrim($val, 'id:'));\n        });\n\n        $lastModel = $model;\n        $lastField = array_pop($parts);\n        while ($rootField = array_shift($parts)) {\n            $lastModel = $lastModel->$rootField()->getRelated();\n        }\n\n        return [$lastModel, $lastField];\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/HasOverrides.php",
    "content": "<?php namespace Backend\\Behaviors\\RelationController;\n\n/**\n * HasOverrides in the controller\n */\ntrait HasOverrides\n{\n    /**\n     * relationBeforeSave is called before the creation or updating form is saved\n     * @param string $field\n     * @param \\Model $model\n     */\n    public function relationBeforeSave($field, $model)\n    {\n    }\n\n    /**\n     * relationAfterSave is called after the creation or updating form is saved\n     * @param string $field\n     * @param \\Model $model\n     */\n    public function relationAfterSave($field, $model)\n    {\n    }\n\n    /**\n     * relationBeforeCreate is called before the creation form is saved\n     * @param string $field\n     * @param \\Model $model\n     */\n    public function relationBeforeCreate($field, $model)\n    {\n    }\n\n    /**\n     * relationAfterCreate is called after the creation form is saved\n     * @param string $field\n     * @param \\Model $model\n     */\n    public function relationAfterCreate($field, $model)\n    {\n    }\n\n    /**\n     * relationBeforeUpdate is called before the updating form is saved\n     * @param string $field\n     * @param \\Model $model\n     */\n    public function relationBeforeUpdate($field, $model)\n    {\n    }\n\n    /**\n     * relationAfterUpdate is called after the updating form is saved\n     * @param string $field\n     * @param \\Model $model\n     */\n    public function relationAfterUpdate($field, $model)\n    {\n    }\n\n    /**\n     * relationAfterDelete called after the related models are deleted\n     * @param string $field\n     * @param iterable $models\n     */\n    public function relationAfterDelete($field, $models)\n    {\n    }\n\n    /**\n     * relationBeforeAdd is called before the adding related models\n     * @param string $field\n     * @param iterable $models\n     */\n    public function relationBeforeAdd($field, $models)\n    {\n    }\n\n    /**\n     * relationAfterAdd is called after the adding related models\n     * @param string $field\n     * @param iterable $models\n     */\n    public function relationAfterAdd($field, $models)\n    {\n    }\n\n    /**\n     * relationBeforeRemove is called before the removing related models\n     * @param string $field\n     * @param iterable $models\n     */\n    public function relationBeforeRemove($field, $models)\n    {\n    }\n\n    /**\n     * relationAfterRemove is called after the removing related models\n     * @param string $field\n     * @param iterable $models\n     */\n    public function relationAfterRemove($field, $models)\n    {\n    }\n\n    /**\n     * relationAfterCancel called after the user has cancelled the form\n     * @param string $field\n     * @param \\Model $model\n     */\n    public function relationAfterCancel($field, $model)\n    {\n    }\n\n    /**\n     * relationExtendConfig provides an opportunity to manipulate the field configuration.\n     * @param object $config\n     * @param string $field\n     * @param \\October\\Rain\\Database\\Model $model\n     */\n    public function relationExtendConfig($config, $field, $model)\n    {\n    }\n\n    /**\n     * relationExtendManageFormQuery extends the query used for finding the form model. Extra conditions\n     * can be applied to the query, for example, $query->withTrashed();\n     * @param \\October\\Rain\\Database\\Builder $query\n     * @return void\n     */\n    public function relationExtendManageFormQuery($field, $query)\n    {\n    }\n\n    /**\n     * relationExtendViewListWidget provides an opportunity to manipulate the view widget.\n     * @param \\Backend\\Widgets\\List $widget\n     * @param string $field\n     * @param \\October\\Rain\\Database\\Model $model\n     */\n    public function relationExtendViewListWidget($widget, $field, $model)\n    {\n    }\n\n    /**\n     * relationExtendViewFormWidget provides an opportunity to manipulate the manage widget.\n     * @param \\Backend\\Widgets\\Form $widget\n     * @param string $field\n     * @param \\October\\Rain\\Database\\Model $model\n     */\n    public function relationExtendViewFormWidget($widget, $field, $model)\n    {\n    }\n\n    /**\n     * relationExtendManageListWidget provides an opportunity to manipulate the view widget.\n     * @param \\Backend\\Widgets\\List $widget\n     * @param string $field\n     * @param \\October\\Rain\\Database\\Model $model\n     */\n    public function relationExtendManageListWidget($widget, $field, $model)\n    {\n    }\n\n    /**\n     * relationExtendManageFormWidget provides an opportunity to manipulate the manage widget.\n     * @param \\Backend\\Widgets\\Form $widget\n     * @param string $field\n     * @param \\October\\Rain\\Database\\Model $model\n     */\n    public function relationExtendManageFormWidget($widget, $field, $model)\n    {\n    }\n\n    /**\n     * relationExtendPivotWidget provides an opportunity to manipulate the pivot widget.\n     * @param \\Backend\\Widgets\\Form $widget\n     * @param string $field\n     * @param \\October\\Rain\\Database\\Model $model\n     */\n    public function relationExtendPivotFormWidget($widget, $field, $model)\n    {\n    }\n\n    /**\n     * relationExtendManageFilterWidget provides an opportunity to manipulate the manage filter widget.\n     * @param \\Backend\\Widgets\\Filter $widget\n     * @param string $field\n     * @param \\October\\Rain\\Database\\Model $model\n     */\n    public function relationExtendManageFilterWidget($widget, $field, $model)\n    {\n    }\n\n    /**\n     * relationExtendViewFilterWidget provides an opportunity to manipulate the view filter widget.\n     * @param \\Backend\\Widgets\\Filter $widget\n     * @param string $field\n     * @param \\October\\Rain\\Database\\Model $model\n     */\n    public function relationExtendViewFilterWidget($widget, $field, $model)\n    {\n    }\n\n    /**\n     * relationExtendRefreshResults is needed because the view widget is often\n     * refreshed when the manage widget makes a change, you can use this method\n     * to inject additional containers when this process occurs. Return an array\n     * with the extra values to send to the browser, eg:\n     *\n     * return ['#myCounter' => 'Total records: 6'];\n     *\n     * @param string $field\n     * @return array\n     */\n    public function relationExtendRefreshResults($field)\n    {\n    }\n\n    /**\n     * @deprecated use relationExtendViewListWidget or relationExtendViewFormWidget\n     */\n    public function relationExtendViewWidget($widget, $field, $model)\n    {\n    }\n\n    /**\n     * @deprecated use relationExtendManageListWidget or relationExtendManageFormWidget\n     */\n    public function relationExtendManageWidget($widget, $field, $model)\n    {\n    }\n\n    /**\n     * @deprecated use relationExtendPivotFormWidget\n     */\n    public function relationExtendPivotWidget($widget, $field, $model)\n    {\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/HasPivotMode.php",
    "content": "<?php namespace Backend\\Behaviors\\RelationController;\n\nuse Db;\nuse Lang;\nuse ApplicationException;\nuse Backend\\Widgets\\Form as FormWidget;\nuse Exception;\n\n/**\n * HasPivotMode contains logic for managing pivot records\n */\ntrait HasPivotMode\n{\n    /**\n     * @var Backend\\Classes\\WidgetBase pivotWidget for relations with pivot data\n     */\n    protected $pivotWidget;\n\n    /**\n     * @var Model pivotModel is a reference to the model used for pivot form\n     */\n    protected $pivotModel;\n\n    /**\n     * @var string pivotTitle used for the pivot popup\n     */\n    protected $pivotTitle;\n\n    /**\n     * @var int pivotId of a pivot record using an incrementing id\n     */\n    protected $pivotId;\n\n    /**\n     * @var int foreignId of a selected pivot record\n     */\n    protected $foreignId;\n\n    /**\n     * makePivotFormWidget return a form widget based on pivot configuration\n     */\n    protected function makePivotFormWidget(): ?FormWidget\n    {\n        if ($this->manageMode !== 'pivot') {\n            return null;\n        }\n\n        if (!$config = $this->makeConfigForMode('pivot', 'form')) {\n            return null;\n        }\n\n        $config->model = $this->relationModel;\n        $config->arrayName = class_basename($this->relationModel);\n        $config->context = $this->evalFormContext('pivot', !!$this->manageId);\n        $config->alias = $this->alias . 'ManagePivotForm';\n\n        $foreignKeyName = $this->relationModel->getQualifiedKeyName();\n\n        // Incrementing pivot record\n        if ($this->pivotId && ($pivotKey = $this->isPivotIncrementing())) {\n            $this->pivotModel = $this->relationObject->wherePivot($pivotKey, $this->pivotId)->first();\n\n            if ($this->pivotModel) {\n                $config->model = $this->pivotModel;\n            }\n            else {\n                throw new ApplicationException(Lang::get('backend::lang.model.not_found', [\n                    'class' => get_class($this->relationObject->newPivot()),\n                    'id' => $this->pivotId,\n                ]));\n            }\n        }\n        // Existing record\n        elseif ($this->manageId) {\n            $this->pivotModel = $this->relationObject->where($foreignKeyName, $this->manageId)->first();\n\n            if ($this->pivotModel) {\n                $config->model = $this->pivotModel;\n            }\n            else {\n                throw new ApplicationException(Lang::get('backend::lang.model.not_found', [\n                    'class' => get_class($config->model),\n                    'id' => $this->manageId,\n                ]));\n            }\n        }\n        // New record\n        else {\n            if ($this->foreignId) {\n                $foreignModel = $this->relationModel\n                    ->whereIn($foreignKeyName, (array) $this->foreignId)\n                    ->first();\n\n                if ($foreignModel) {\n                    $foreignModel->exists = false;\n                    $config->model = $foreignModel;\n                }\n            }\n\n            $config->model->setRelation('pivot', $this->relationObject->newPivot());\n        }\n\n        return $this->makeWidget(FormWidget::class, $config);\n    }\n\n    /**\n     * onRelationManageAddPivot adds multiple items using a single pivot form.\n     */\n    public function onRelationManageAddPivot()\n    {\n        return $this->onRelationManagePivotForm();\n    }\n\n    /**\n     * onRelationManagePivotForm\n     */\n    public function onRelationManagePivotForm()\n    {\n        $this->beforeAjax();\n\n        if (!$this->pivotWidget) {\n            throw new ApplicationException(\"Missing configuration for [pivot.form] in RelationController definition [{$this->field}].\");\n        }\n\n        $this->vars['foreignId'] = $this->foreignId ?: post('checked');\n\n        return $this->relationMakePartial('pivot_form');\n    }\n\n    /**\n     * onRelationManagePivotCreate\n     */\n    public function onRelationManagePivotCreate()\n    {\n        $this->beforeAjax();\n\n        // If the pivot model fails for some reason, abort the sync\n        Db::transaction(function () {\n            // Add the checked IDs to the pivot table\n            $foreignIds = (array) $this->foreignId;\n            $saveData = (array) $this->pivotWidget->getSaveData();\n            $pivotData = $this->getPivotDataForAttach($saveData);\n\n            // Two methods are used to synchronize the records, the first inserts records in\n            // bulk but may encounter collisions. The fallback adds records one at a time\n            // and checks for collisions with existing records.\n            try {\n                $this->relationObject->attach($foreignIds, $pivotData);\n            }\n            catch (Exception $ex) {\n                $this->relationObject->sync(array_fill_keys($foreignIds, $pivotData), false);\n            }\n\n            // Find newly attached models to save with deferred binding and nesting\n            $foreignKeyName = $this->relationModel->getQualifiedKeyName();\n            if ($pivotKey = $this->isPivotIncrementing()) {\n                // Must guess the models here since there is no way to fetch the last incrementing IDs\n                $hydratedModels = $this->relationObject\n                    ->whereIn($foreignKeyName, $foreignIds)\n                    ->limit(count($foreignIds))\n                    ->orderBy($this->relationObject->qualifyPivotColumn($pivotKey), 'desc')\n                    ->get();\n            }\n            else {\n                $hydratedModels = $this->relationObject->whereIn($foreignKeyName, $foreignIds)->get();\n            }\n\n            // Save data to models\n            foreach ($hydratedModels as $hydratedModel) {\n                $modelsToSave = $this->prepareModelsToSave($hydratedModel, $saveData);\n                foreach ($modelsToSave as $modelToSave) {\n                    $modelToSave->save(['sessionKey' => $this->pivotWidget->getSessionKey()]);\n                }\n            }\n        });\n\n        $this->showFlashMessage('flashAdd');\n\n        return ['#'.$this->relationGetId('view') => $this->relationRenderView()];\n    }\n\n    /**\n     * onRelationManagePivotUpdate\n     */\n    public function onRelationManagePivotUpdate()\n    {\n        $this->beforeAjax();\n\n        // Save data to model\n        $saveData = $this->pivotWidget->getSaveData();\n        $modelsToSave = $this->prepareModelsToSave($this->pivotModel, $saveData);\n\n        foreach ($modelsToSave as $modelToSave) {\n            $modelToSave->save(['sessionKey' => $this->pivotWidget->getSessionKey()]);\n        }\n\n        $this->showFlashMessage('flashUpdate');\n\n        return ['#'.$this->relationGetId('view') => $this->relationRenderView()];\n    }\n\n    /**\n     * evalPivotTitle determines the pivot mode popup title\n     */\n    protected function evalPivotTitle(): string\n    {\n        if ($customTitle = $this->getConfig('pivot[title]')) {\n            return $customTitle;\n        }\n\n        return $this->getCustomLang('titlePivotForm');\n    }\n\n    /**\n     * getPivotDataForAttach returns either a list of IDs to sync, or an associative\n     * array with sync keys and pivot attributes as values.\n     *\n     * This method only exists to send the pivot attributes to the `model.relation.attach`\n     * event. The attributes are set and saved a second time via the regular life cycle.\n     * Eloquent should not send it to SQL twice if the attributes are an exact match.\n     */\n    protected function getPivotDataForAttach(array $saveData): array\n    {\n        if (!isset($saveData['pivot']) || !is_array($saveData['pivot'])) {\n            return [];\n        }\n\n        $pivotModel = $this->relationObject->newPivot();\n        $this->setModelAttributes($pivotModel, $saveData['pivot']);\n\n        // Emulate save events for attribute manipulation\n        $pivotModel->fireEvent('model.beforeSave');\n        $pivotModel->fireEvent('model.beforeCreate');\n        $pivotModel->fireEvent('model.beforeSaveDone');\n\n        $pivotData = $pivotModel->getAttributes();\n        if (!$pivotData) {\n            return [];\n        }\n\n        return $pivotData;\n    }\n\n    /**\n     * isPivotIncrementing\n     */\n    protected function isPivotIncrementing()\n    {\n        if ($this->manageMode !== 'pivot') {\n            return false;\n        }\n\n        $definition = $this->relationParent->getRelationDefinition($this->relationName);\n        if (!isset($definition['pivotModel'])) {\n            return false;\n        }\n\n        if (is_string($pivotKey = $definition['pivotKey'] ?? null)) {\n            return $pivotKey;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/HasViewMode.php",
    "content": "<?php namespace Backend\\Behaviors\\RelationController;\n\nuse Request;\nuse October\\Rain\\Database\\Model;\nuse Backend\\Widgets\\Form as FormWidget;\nuse Backend\\Widgets\\Lists as ListWidget;\nuse Backend\\Widgets\\ListStructure as ListStructureWidget;\n\n/**\n * HasViewMode contains logic for viewing related records\n */\ntrait HasViewMode\n{\n    /**\n     * @var ListWidget|null viewListWidget used for viewing as a list\n     */\n    protected $viewListWidget;\n\n    /**\n     * @var FormWidget|null viewFormWidget used for viewing as a form\n     */\n    protected $viewFormWidget;\n\n    /**\n     * @var \\Backend\\Widgets\\Filter viewFilterWidget\n     */\n    protected $viewFilterWidget;\n\n    /**\n     * @var Model viewModel is a reference to the model used for viewing (form only)\n     */\n    protected $viewModel;\n\n    /**\n     * @var string viewMode if relation has many (multi) or has one (single)\n     */\n    protected $viewMode;\n\n    /**\n     * relationGetManageFormWidget returns the manage form widget used by this behavior\n     */\n    public function relationGetViewFormWidget(): ?FormWidget\n    {\n        return $this->viewFormWidget;\n    }\n\n    /**\n     * relationGetViewListWidget returns the manage list widget used by this behavior\n     */\n    public function relationGetViewListWidget(): ?ListWidget\n    {\n        return $this->viewListWidget;\n    }\n\n    /**\n     * relationGetViewWidget returns the view widget used by this behavior\n     * @deprecated use relationGetViewListWidget or relationGetViewFormWidget\n     * @return \\Backend\\Classes\\WidgetBase\n     */\n    public function relationGetViewWidget()\n    {\n        // Multiple (has many, belongs to many)\n        if ($this->viewMode === 'multi') {\n            return $this->viewListWidget;\n        }\n\n        // Single (belongs to, has one)\n        if ($this->viewMode === 'single') {\n            return $this->viewFormWidget;\n        }\n\n        return null;\n    }\n\n    /**\n     * makeViewListWidget prepares the list widget for viewing\n     */\n    protected function makeViewListWidget(): ?ListWidget\n    {\n        if ($this->viewMode !== 'multi') {\n            return null;\n        }\n\n        if (!$config = $this->makeConfigForMode('view', 'list')) {\n            return null;\n        }\n\n        $this->viewModel = $this->relationModel;\n\n        $isPivot = in_array($this->relationType, ['belongsToMany', 'morphedByMany', 'morphToMany']);\n        $isPivotIncrementing = $this->isPivotIncrementing();\n\n        $config->model = $this->viewModel;\n        $config->alias = $this->alias . 'ViewList';\n        $config->showSetup = $this->getConfig('view[showSetup]', false);\n        $config->showSorting = $this->getConfig('view[showSorting]', true);\n        $config->defaultSort = $this->getConfig('view[defaultSort]');\n        $config->recordsPerPage = $this->getConfig('view[recordsPerPage]');\n        $config->showCheckboxes = $this->getConfig('view[showCheckboxes]', !$this->readOnly);\n        $config->recordUrl = $this->getConfig('view[recordUrl]', null);\n        $config->customViewPath = $this->getConfig('view[customViewPath]', null);\n        $config->customPageName = $this->getConfig('view[customPageName]', camel_case(class_basename($this->relationModel).'Page'));\n        $config->pivotMode = $isPivotIncrementing;\n\n        if ($isPivotIncrementing) {\n            $defaultOnClick = sprintf(\n                \"oc.relationBehavior.clickViewPivotListRecord(this, ':%s', '%s', '%s')\",\n                $isPivotIncrementing,\n                $this->relationGetId(),\n                $this->relationSessionKey\n            );\n        }\n        else {\n            $defaultOnClick = sprintf(\n                \"oc.relationBehavior.clickViewListRecord(this, ':%s', '%s', '%s')\",\n                $this->viewModel->getKeyName(),\n                $this->relationGetId(),\n                $this->relationSessionKey\n            );\n        }\n\n        if ($config->recordUrl) {\n            $defaultOnClick = null;\n        }\n        elseif (\n            !$this->makeConfigForMode('manage', 'form') &&\n            !$this->makeConfigForMode('pivot', 'form')\n        ) {\n            $defaultOnClick = null;\n        }\n\n        $config->recordOnClick = $this->getConfig('view[recordOnClick]', $defaultOnClick);\n\n        if ($emptyMessage = $this->getConfig('emptyMessage')) {\n            $config->noRecordsMessage = $emptyMessage;\n        }\n\n        if ($isPivot) {\n            $this->viewModel->setRelation('pivot', $this->relationObject->newPivot());\n        }\n\n        // Make structure enabled widget\n        $structureConfig = $this->makeListStructureConfig($config);\n        if ($structureConfig) {\n            $widget = $this->makeWidget(ListStructureWidget::class, $structureConfig);\n        }\n        else {\n            $widget = $this->makeWidget(ListWidget::class, $config);\n        }\n\n        // Linkage for JS plugins\n        if ($this->toolbarWidget) {\n            $this->toolbarWidget->listWidgetId = $widget->getId();\n\n            // Pass the list setup AJAX handler to the toolbar\n            if ($config->showSetup) {\n                $this->toolbarWidget->setupHandler = $widget->getEventHandler('onLoadSetup');\n            }\n        }\n\n        // Custom structure reordering logic\n        if (\n            $this->relationParent->isClassInstanceOf(\\October\\Contracts\\Database\\SortableRelationInterface::class) &&\n            $this->relationParent->isSortableRelation($this->relationName)\n        ) {\n            $widget->bindEvent('list.beforeReorderStructure', function () {\n                // Set sort orders in deferred bindings as well\n                if ($this->deferredBinding) {\n                    $this->relationParent->sessionKey = $this->relationSessionKey;\n                }\n                $this->relationParent->setSortableRelationOrder($this->relationName, post('sort_orders'), true);\n                return false;\n            }, -1);\n        }\n\n        // Apply defined constraints\n        if ($sqlConditions = $this->getConfig('view[conditions]')) {\n            $widget->bindEvent('list.extendQueryBefore', function ($query) use ($sqlConditions) {\n                $query->whereRaw($sqlConditions);\n            });\n        }\n        elseif ($scopeMethod = $this->getConfig('view[scope]')) {\n            $widget->bindEvent('list.extendQueryBefore', function ($query) use ($scopeMethod) {\n                $query->$scopeMethod($this->relationParent);\n            });\n        }\n        else {\n            $widget->bindEvent('list.extendQueryBefore', function ($query) {\n                $this->relationObject->addDefinedConstraintsToQuery($query);\n            });\n        }\n\n        // Constrain the query by the relationship and deferred items\n        $widget->bindEvent('list.extendQuery', function (&$query) use ($isPivot) {\n            $this->relationObject->setQuery($query);\n\n            $sessionKey = $this->deferredBinding ? $this->relationSessionKey : null;\n            if ($sessionKey) {\n                $this->relationObject->withDeferredQuery(null, $sessionKey);\n            }\n            elseif ($this->relationParent->exists) {\n                $this->relationObject->addConstraints();\n            }\n\n            // Allows pivot data to enter the fray by replacing the query\n            if ($isPivot) {\n                $this->relationObject->setQuery($query->getQuery());\n                $query = $this->relationObject;\n            }\n        });\n\n        // Constrain the list by the search widget, if available\n        if (\n            $this->toolbarWidget &&\n            $this->getConfig('view[showSearch]') &&\n            $searchWidget = $this->toolbarWidget->getSearchWidget()\n        ) {\n            $searchWidget->bindEvent('search.submit', function () use ($widget, $searchWidget) {\n                $widget->setSearchTerm($searchWidget->getActiveTerm());\n                return $widget->onRefresh();\n            });\n\n            // Pass search options\n            $widget->setSearchOptions([\n                'mode' => $this->getConfig('view[searchMode]'),\n                'scope' => $this->getConfig('view[searchScope]'),\n            ]);\n\n            // Persist the search term across AJAX requests only\n            if (Request::ajax()) {\n                $widget->setSearchTerm($searchWidget->getActiveTerm());\n            }\n            else {\n                $searchWidget->setActiveTerm(null);\n            }\n        }\n\n        // Link the Filter Widget to the List Widget\n        if ($this->viewFilterWidget) {\n            $this->viewFilterWidget->bindEvent('filter.update', function () use ($widget) {\n                return $widget->onFilter();\n            });\n\n            // Apply predefined filter values\n            $widget->addFilter([$this->viewFilterWidget, 'applyAllScopesToQuery']);\n        }\n\n        return $widget;\n    }\n\n    /**\n     * makeViewFormWidget prepares the form widget for viewing\n     */\n    protected function makeViewFormWidget(): ?FormWidget\n    {\n        if ($this->viewMode !== 'single') {\n            return null;\n        }\n\n        if (!$config = $this->makeConfigForMode('view', 'form')) {\n            return null;\n        }\n\n        $this->viewModel = $this->relationObject->getResults()\n            ?: $this->relationModel;\n\n        $config->model = $this->viewModel;\n        $config->arrayName = class_basename($this->relationModel);\n        $config->context = 'relation';\n        $config->alias = $this->alias . 'ViewForm';\n\n        $widget = $this->makeWidget(FormWidget::class, $config);\n        $widget->previewMode = true;\n\n        return $widget;\n    }\n\n    /**\n     * makeListStructureConfig\n     */\n    protected function makeListStructureConfig(object $config): ?object\n    {\n        $structureConfig = $this->makeConfigForMode('view', 'structure');\n        if (!$structureConfig) {\n            return null;\n        }\n\n        if (\n            $this->relationParent->isClassInstanceOf(\\October\\Contracts\\Database\\SortableRelationInterface::class) &&\n            $this->relationParent->isSortableRelation($this->relationName)\n        ) {\n            $structureConfig->includeSortOrders = true;\n        }\n\n        return $this->mergeConfig($config, $structureConfig);\n    }\n\n    //\n    // AJAX (Buttons)\n    //\n\n    /**\n     * onRelationButtonAdd\n     */\n    public function onRelationButtonAdd()\n    {\n        return $this->onRelationManageForm();\n    }\n\n    /**\n     * onRelationButtonCreate\n     */\n    public function onRelationButtonCreate()\n    {\n        return $this->onRelationManageForm();\n    }\n\n    /**\n     * onRelationButtonDelete\n     */\n    public function onRelationButtonDelete()\n    {\n        return $this->onRelationManageDelete();\n    }\n\n    /**\n     * onRelationButtonLink\n     */\n    public function onRelationButtonLink()\n    {\n        return $this->onRelationManageForm();\n    }\n\n    /**\n     * onRelationButtonUnlink\n     */\n    public function onRelationButtonUnlink()\n    {\n        return $this->onRelationManageRemove();\n    }\n\n    /**\n     * onRelationButtonRemove\n     */\n    public function onRelationButtonRemove()\n    {\n        return $this->onRelationManageRemove();\n    }\n\n    /**\n     * onRelationButtonUpdate\n     */\n    public function onRelationButtonUpdate()\n    {\n        return $this->onRelationManageForm();\n    }\n\n    //\n    // AJAX (List events)\n    //\n\n    /**\n     * onRelationClickManageList\n     */\n    public function onRelationClickManageList()\n    {\n        return $this->onRelationManageAdd();\n    }\n\n    /**\n     * onRelationClickManageListPivot\n     */\n    public function onRelationClickManageListPivot()\n    {\n        return $this->onRelationManagePivotForm();\n    }\n\n    /**\n     * onRelationClickViewList\n     */\n    public function onRelationClickViewList()\n    {\n        return $this->onRelationManageForm();\n    }\n\n    /**\n     * onRelationClickViewListPivot\n     */\n    public function onRelationClickViewListPivot()\n    {\n        return $this->onRelationManageForm();\n    }\n\n    /**\n     * evalEventTarget determines the source of an AJAX event used for determining\n     * the manage mode state. See the `evalManageMode` method.\n     * @return string\n     */\n    protected function evalEventTarget()\n    {\n        switch ($this->controller->getAjaxHandler()) {\n            case 'onRelationButtonAdd':\n                return 'button-add';\n\n            case 'onRelationButtonCreate':\n                return 'button-create';\n\n            case 'onRelationButtonLink':\n                return 'button-link';\n\n            case 'onRelationButtonUpdate':\n                return 'button-update';\n\n            case 'onRelationClickViewList':\n                return 'list';\n\n            default:\n                return '';\n        }\n    }\n\n    /**\n     * evalViewMode determines the view mode based on the model relationship type\n     * @return string\n     */\n    protected function evalViewMode()\n    {\n        if ($viewMode = $this->getConfig('manage[viewMode]')) {\n            return $viewMode;\n        }\n\n        switch ($this->relationType) {\n            case 'hasMany':\n            case 'morphMany':\n            case 'morphToMany':\n            case 'morphedByMany':\n            case 'belongsToMany':\n            case 'hasManyThrough':\n                return 'multi';\n\n            case 'hasOne':\n            case 'morphOne':\n            case 'belongsTo':\n                return 'single';\n\n            default:\n                return '';\n        }\n    }\n\n    /**\n     * resetViewWidgetModel is an internal method used when deleting singular relationships\n     */\n    protected function resetViewWidgetModel()\n    {\n        $this->viewFormWidget->model = $this->relationModel;\n        $this->viewFormWidget->setFormValues([]);\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/assets/css/relation.css",
    "content": ".relation-behavior.relation-view-multi,.relation-behavior.relation-view-single{background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:4px;margin-bottom:20px;overflow:hidden}.relation-behavior.relation-view-multi .control-filter,.relation-behavior.relation-view-single .control-filter{border-top:none}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar{border-bottom:1px solid var(--oc-border-color);padding:0}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .loading-indicator-container.size-input-text .loading-indicator>span,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .loading-indicator-container.size-input-text .loading-indicator>span{top:7px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .toolbar-item.toolbar-primary,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .toolbar-item.toolbar-primary{padding:3px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .search-input-container:before,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .search-input-container:before{right:10px;top:11px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .search-input-container .form-control,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .search-input-container .form-control{border-bottom:none;border-radius:0;border-right:none;border-top:none;padding-bottom:8px;padding-top:8px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .toolbar-item.toolbar-setup,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .toolbar-item.toolbar-setup{border-left:1px solid var(--oc-border-color);width:35px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .toolbar-item.toolbar-setup a>span,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .toolbar-item.toolbar-setup a>span{margin-left:5px}.relation-behavior.relation-view-multi .control-list,.relation-behavior.relation-view-single .control-list{border:none;margin-bottom:0}.relation-behavior.relation-view-single{background:transparent}.relation-behavior.relation-view-single .relation-toolbar .control-toolbar{background:var(--oc-form-control-bg);border-bottom:1px solid var(--oc-toolbar-border)}.relation-behavior.relation-view-single>.relation-manager{padding:20px 20px 0}.widget-field.span-adaptive>.relation-widget .relation-behavior{border-left:none;border-radius:0;border-right:none;border-top:none}.widget-field.span-adaptive>.relation-widget .relation-behavior .relation-toolbar{display:none}.widget-field>.relation-widget .relation-behavior{margin-bottom:0}.relation-behavior{margin-bottom:20px}.relation-behavior .control-list{border:1px solid #eee}.relation-behavior .control-list thead>tr>th{border-top:none!important;border-color:#eee}.relation-behavior .control-list table.table.data{border-bottom:none}.relation-behavior .control-list .list-content+.list-footer{border-top:1px solid var(--bs-border-color)}.relation-behavior .control-list .list-footer .pagination{--bs-pagination-bg:var(--oc-form-control-bg)}.relation-behavior .control-toolbar{padding:0 20px 20px}.relation-behavior .control-toolbar .toolbar-item.toolbar-primary:before{left:0}.relation-behavior .control-toolbar .toolbar-item.toolbar-primary:after{right:0}.relation-behavior .control-toolbar .toolbar-item .form-control.search{padding-bottom:5px;padding-top:5px}.relation-behavior .control-toolbar .loading-indicator-container.size-input-text{min-height:0}.relation-behavior .control-toolbar .loading-indicator-container.size-input-text .loading-indicator>span{top:4px}.relation-behavior .list-header{padding:0!important}.relation-behavior .control-list:last-child>table{margin-bottom:0}.relation-flush .control-list{border-top:none}.relation-inset{margin-left:-20px;margin-right:-20px}.form-group>.relation-behavior .control-toolbar{padding:0 0 10px}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/assets/js/october.relation.js",
    "content": "/*\n * Scripts for the Relation controller behavior.\n */\n+function ($) { \"use strict\";\n\n    class RelationBehavior extends oc.ControlBase\n    {\n        static instanceCounter = 0;\n\n        init() {\n            this.instanceNumber = ++this.constructor.instanceCounter;\n        }\n\n        connect() {\n            this.listen('trigger:after-update', this.extendExternalToolbar);\n\n            // External toolbar\n            oc.pageReady().then(() => {\n                this.initToolbarExtensionPoint();\n                this.mountExternalToolbarEventBusEvents();\n                this.extendExternalToolbar();\n            });\n        }\n\n        disconnect() {\n        }\n\n        initToolbarExtensionPoint() {\n            if (!this.config.externalToolbarAppState) {\n                return;\n            }\n\n            const point = $.oc.vueUtils.getToolbarExtensionPoint(\n                this.config.externalToolbarAppState,\n                this.element\n            );\n\n            if (point) {\n                this.toolbarExtensionPoint = point.state;\n                this.externalToolbarEventBusObj = point.bus;\n            }\n        }\n\n        mountExternalToolbarEventBusEvents() {\n            if (!this.externalToolbarEventBusObj) {\n                return;\n            }\n\n            this.externalToolbarEventBusObj.on('toolbarcmd', this.proxy(this.onToolbarExternalCommand));\n            this.externalToolbarEventBusObj.on('extendapptoolbar', this.proxy(this.extendExternalToolbar));\n        }\n\n        unmountExternalToolbarEventBusEvents() {\n            if (!this.externalToolbarEventBusObj) {\n                return;\n            }\n\n            this.externalToolbarEventBusObj.off('toolbarcmd', this.proxy(this.onToolbarExternalCommand));\n            this.externalToolbarEventBusObj.off('extendapptoolbar', this.proxy(this.extendExternalToolbar));\n        }\n\n        onToolbarExternalCommand(ev) {\n            var $el = $(this.element);\n            var cmdPrefix = 'relationcontroller-toolbar-' + this.instanceNumber + '-';\n\n            if (ev.command.substring(0, cmdPrefix.length) != cmdPrefix) {\n                return;\n            }\n\n            var buttonClassName = ev.command.substring(cmdPrefix.length),\n                $toolbar = $el.find('.relation-toolbar .control-toolbar'),\n                $button = $toolbar.find('[class=\"'+buttonClassName+'\"]');\n\n            $button.get(0).click(ev.ev);\n        }\n\n        extendExternalToolbar() {\n            var $el = $(this.element);\n            if (!$el.is(\":visible\") || !this.toolbarExtensionPoint) {\n                return;\n            }\n\n            this.toolbarExtensionPoint.splice(0, this.toolbarExtensionPoint.length);\n\n            this.toolbarExtensionPoint.push({\n                type: 'separator'\n            });\n\n            var $buttons = $el.find('.relation-toolbar .control-toolbar .btn');\n\n            $buttons.each((index, button) => {\n                var $button = $(button),\n                    $icon = $button.find('i[class^=icon]');\n\n                this.toolbarExtensionPoint.push(\n                    {\n                        type: 'button',\n                        icon: $icon.attr('class'),\n                        label: $button.text(),\n                        command: 'relationcontroller-toolbar-' + this.instanceNumber + '-' + $button.attr('class'),\n                        disabled: $button.attr('disabled') !== undefined\n                    }\n                );\n            });\n        }\n\n        static toggleListCheckbox(el) {\n            $(el).closest('.control-list').listWidget('toggleChecked', [el]);\n        }\n\n        static clickViewListRecord(target, recordId, relationId, sessionKey) {\n            var newPopup = $(target),\n                $container = $('#'+relationId),\n                requestData = paramToObj('data-request-data', $container.data('request-data'));\n\n            newPopup.popup({\n                handler: 'onRelationClickViewList',\n                extraData: $.extend({}, requestData, {\n                    'manage_id': recordId,\n                    '_relation_session_key': sessionKey\n                })\n            });\n        }\n\n        static clickViewPivotListRecord(target, recordId, relationId, sessionKey) {\n            var newPopup = $(target),\n                $container = $('#'+relationId),\n                requestData = paramToObj('data-request-data', $container.data('request-data'));\n\n            newPopup.popup({\n                handler: 'onRelationClickViewListPivot',\n                extraData: $.extend({}, requestData, {\n                    'pivot_id': recordId,\n                    '_relation_session_key': sessionKey\n                })\n            });\n        }\n\n        static clickManageListRecord(target, recordId, relationId, sessionKey) {\n            var oldPopup = $('#relationManagePopup'),\n                $container = $('#'+relationId),\n                requestData = paramToObj('data-request-data', $container.data('request-data'));\n\n            $(target).request('onRelationClickManageList', {\n                data: $.extend({}, requestData, {\n                    'record_id': recordId,\n                    '_relation_session_key': sessionKey\n                })\n            })\n            .done(() => {\n                if (requestData['_relation_field']) {\n                    this.changed(requestData['_relation_field'], 'added');\n                }\n            });\n\n            oldPopup.popup('hide');\n        }\n\n        static clickManagePivotListRecord(target, foreignId, relationId, sessionKey) {\n            var oldPopup = $('#relationManagePivotPopup'),\n                newPopup = $(target),\n                $container = $('#'+relationId),\n                requestData = paramToObj('data-request-data', $container.data('request-data'));\n\n            if (oldPopup.length) {\n                oldPopup.popup('hide');\n            }\n\n            newPopup.popup({\n                handler: 'onRelationClickManageListPivot',\n                extraData: $.extend({}, requestData, {\n                    'foreign_id': foreignId,\n                    '_relation_session_key': sessionKey\n                })\n            });\n        }\n\n        // This function is called every time a record is created, added, removed\n        // or deleted using the relation widget. It triggers the change.oc.formwidget\n        // event to notify other elements on the page about the changed form state.\n        static changed(relationId, event) {\n            $('[data-field-name=\"' + relationId + '\"]').trigger('change.oc.formwidget', { event: event });\n        }\n\n        // @deprecated use oc.popup.bindToPopups\n        static bindToPopups(container, vars) {\n            return oc.popup.bindToPopups(container, vars);\n        }\n    }\n\n    function paramToObj(name, value) {\n        if (value === undefined) value = ''\n        if (typeof value == 'object') return value\n\n        try {\n            return oc.parseJSON(\"{\" + value + \"}\")\n        }\n        catch (e) {\n            throw new Error('Error parsing the '+name+' attribute value. '+e)\n        }\n    }\n\n    oc.registerControl('relation-controller', RelationBehavior);\n\n    oc.relationBehavior = RelationBehavior;\n\n    // @deprecated\n    $.oc.relationBehavior = RelationBehavior;\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/assets/less/relation.field.less",
    "content": ".widget-field.span-adaptive > .relation-widget {\n    .relation-behavior {\n        border-top: none;\n        border-left: none;\n        border-right: none;\n        border-radius: 0;\n\n        .relation-toolbar {\n            display: none;\n        }\n    }\n}\n\n.widget-field > .relation-widget {\n    .relation-behavior {\n        margin-bottom: 0;\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/assets/less/relation.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n@color-relation-border: #eeeeee;\n\n@import \"relation.ui.less\";\n@import \"relation.field.less\";\n\n.relation-behavior {\n    margin-bottom: 20px;\n\n    .control-list {\n        border: 1px solid @color-relation-border;\n\n        thead > tr > th {\n            border-top: none !important;\n            border-color: @color-relation-border;\n        }\n\n        table.table.data {\n            border-bottom: none;\n        }\n\n        .list-content + .list-footer {\n            border-top: 1px solid @input-border;\n        }\n\n        .list-footer .pagination {\n            --bs-pagination-bg: @input-bg;\n        }\n    }\n\n    .control-toolbar {\n        padding: 0 20px 20px 20px;\n\n        .toolbar-item.toolbar-primary {\n            &:before { left: 0; }\n            &:after { right: 0; }\n        }\n\n        .toolbar-item .form-control.search {\n            padding-top: 5px;\n            padding-bottom: 5px;\n        }\n\n        .loading-indicator-container.size-input-text {\n            min-height: 0;\n            .loading-indicator > span {\n                top: 4px;\n            }\n        }\n    }\n\n    .list-header {\n        padding: 0 !important;\n    }\n\n    .control-list:last-child > table {\n        margin-bottom: 0;\n    }\n}\n\n// Relation manager to sit flush to the element above\n.relation-flush {\n    .control-list {\n        border-top: none;\n    }\n}\n\n// Relation manager to sit inset the standard padding (20px)\n.relation-inset {\n    margin-left: -20px;\n    margin-right: -20px;\n}\n\n// Displayed in a form field\n.form-group > .relation-behavior {\n    .control-toolbar {\n        padding: 0 0 10px 0;\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/assets/less/relation.ui.less",
    "content": ".relation-behavior {\n\n    &.relation-view-multi, &.relation-view-single {\n        border: 1px solid @input-border;\n        border-radius: @input-border-radius;\n        // border-top: 1px solid @input-border;\n        // border-bottom: 1px solid @input-border;\n        margin-bottom: 20px;\n        background: @input-bg;\n        overflow: hidden;\n\n        .relation-manager {\n            // border-top: 1px solid var(--oc-border-color);\n        }\n\n        .control-filter {\n            border-top: none;\n        }\n\n        .relation-toolbar .control-toolbar {\n            padding: 0;\n            border-bottom: 1px solid var(--oc-border-color);\n\n            .loading-indicator-container.size-input-text .loading-indicator > span {\n                top: 7px;\n            }\n\n            .toolbar-item.toolbar-primary {\n                padding: 3px;\n            }\n\n            .search-input-container {\n                &:before {\n                    right: 10px;\n                    top: 11px;\n                }\n\n                .form-control {\n                    border-radius: 0;\n                    border-top: none;\n                    border-bottom: none;\n                    border-right: none;\n                    padding-top: 8px;\n                    padding-bottom: 8px;\n                }\n            }\n\n            .toolbar-item.toolbar-setup {\n                border-left: 1px solid var(--oc-border-color);\n                width: 35px;\n                a > span {\n                    margin-left: 5px;\n                }\n            }\n        }\n\n        .control-list {\n            margin-bottom: 0;\n            border: none;\n        }\n    }\n\n    &.relation-view-single {\n        background: transparent;\n\n        .relation-toolbar .control-toolbar {\n            background: @input-bg;\n            border-bottom: 1px solid @toolbar-border;\n        }\n\n        > .relation-manager {\n            padding: 20px 20px 0 20px;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_button_add.php",
    "content": "<a\n    data-control=\"popup\"\n    data-handler=\"onRelationButtonAdd\"\n    href=\"javascript:;\"\n    class=\"btn btn-sm btn-secondary relation-button-add\"\n>\n    <i class=\"icon-list-add\"></i> <?= e($this->relationGetMessage('buttonAdd')) ?>\n</a>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_button_create.php",
    "content": "<a\n    data-control=\"popup\"\n    data-handler=\"onRelationButtonCreate\"\n    data-request-data=\"manage_id: null\"\n    href=\"javascript:;\"\n    class=\"btn btn-sm btn-secondary relation-button-create\"\n>\n    <i class=\"icon-create\"></i> <?= e($this->relationGetMessage('buttonCreate')) ?>\n</a>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_button_delete.php",
    "content": "<?php if ($relationViewMode == 'single'): ?>\n    <button\n        class=\"btn btn-sm btn-secondary relation-button-delete\"\n        data-request=\"onRelationButtonDelete\"\n        data-request-confirm=\"<?= e($this->relationGetMessage('confirmDelete')) ?>\"\n        data-request-success=\"oc.relationBehavior.changed('<?= e($relationField) ?>', 'deleted')\"\n        data-stripe-load-indicator\n    >\n        <i class=\"icon-delete\"></i> <?= e($this->relationGetMessage('buttonDelete')) ?>\n    </button>\n<?php else: ?>\n    <button\n        class=\"btn btn-sm btn-secondary relation-button-delete\"\n        disabled=\"disabled\"\n        data-request=\"onRelationButtonDelete\"\n        data-request-confirm=\"<?= e($this->relationGetMessage('confirmDelete')) ?>\"\n        data-request-success=\"oc.relationBehavior.changed('<?= e($relationField) ?>', 'deleted')\"\n        data-list-checked-trigger\n        data-list-checked-request\n        data-stripe-load-indicator\n    >\n        <i class=\"icon-delete\"></i> <?= e($this->relationGetMessage('buttonDeleteMany')) ?> <span data-list-checked-counter></span>\n    </button>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_button_link.php",
    "content": "<a\n    data-control=\"popup\"\n    data-handler=\"onRelationButtonLink\"\n    href=\"javascript:;\"\n    class=\"btn btn-sm btn-secondary relation-button-link\"\n>\n    <i class=\"icon-link\"></i> <?= e($this->relationGetMessage('buttonLink')) ?>\n</a>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_button_remove.php",
    "content": "<?php if ($relationViewMode == 'single'): ?>\n    <button\n        class=\"btn btn-sm btn-secondary relation-button-remove\"\n        data-request=\"onRelationButtonRemove\"\n        data-request-success=\"oc.relationBehavior.changed('<?= e($relationField) ?>', 'removed')\"\n        data-stripe-load-indicator\n    >\n        <i class=\"icon-list-remove\"></i> <?= e($this->relationGetMessage('buttonRemove')) ?>\n    </button>\n<?php else: ?>\n    <button\n        class=\"btn btn-sm btn-secondary relation-button-remove\"\n        disabled=\"disabled\"\n        data-request=\"onRelationButtonRemove\"\n        data-request-success=\"oc.relationBehavior.changed('<?= e($relationField) ?>', 'removed')\"\n        data-list-checked-trigger\n        data-list-checked-request\n        data-stripe-load-indicator\n    >\n        <i class=\"icon-list-remove\"></i> <?= e($this->relationGetMessage('buttonRemoveMany')) ?> <span data-list-checked-counter></span>\n    </button>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_button_unlink.php",
    "content": "<?php if ($relationViewMode == 'single'): ?>\n    <button\n        class=\"btn btn-sm btn-secondary relation-button-unlink\"\n        data-request=\"onRelationButtonUnlink\"\n        data-request-success=\"oc.relationBehavior.changed('<?= e($relationField) ?>', 'removed')\"\n        data-request-confirm=\"<?= e($this->relationGetMessage('confirmUnlink')) ?>\"\n        data-stripe-load-indicator\n    >\n        <i class=\"icon-unlink\"></i> <?= e($this->relationGetMessage('buttonUnlink')) ?>\n    </button>\n<?php else: ?>\n    <button\n        class=\"btn btn-sm btn-secondary relation-button-unlink\"\n        disabled=\"disabled\"\n        data-request=\"onRelationButtonUnlink\"\n        data-request-success=\"oc.relationBehavior.changed('<?= e($relationField) ?>', 'removed')\"\n        data-request-confirm=\"<?= e($this->relationGetMessage('confirmUnlink')) ?>\"\n        data-list-checked-trigger\n        data-list-checked-request\n        data-stripe-load-indicator\n    >\n        <i class=\"icon-unlink\"></i> <?= e($this->relationGetMessage('buttonUnlinkMany')) ?> <span data-list-checked-counter></span>\n    </button>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_button_update.php",
    "content": "<a\n    data-control=\"popup\"\n    data-handler=\"onRelationButtonUpdate\"\n    data-request-data=\"manage_id: '<?= $relationManageId ?>'\"\n    href=\"javascript:;\"\n    class=\"btn btn-sm btn-secondary relation-button-update\"\n>\n    <i class=\"icon-settings\"></i> <?= e($this->relationGetMessage('buttonUpdate')) ?>\n</a>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_container.php",
    "content": "<div\n    id=\"<?= $this->relationGetId() ?>\"\n    data-control=\"relation-controller\"\n    data-request-data=\"_relation_field: '<?= $relationField ?>', _relation_extra_config: '<?= e(json_encode($relationExtraConfig)) ?>'\"\n    class=\"relation-behavior relation-view-<?= $relationViewMode ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n>\n\n    <?php if ($toolbar = $this->relationRenderToolbar()): ?>\n        <!-- Relation Toolbar -->\n        <div id=\"<?= $this->relationGetId('toolbar') ?>\" class=\"relation-toolbar\">\n            <?= $toolbar ?>\n        </div>\n    <?php endif ?>\n\n    <!-- Relation View -->\n    <div id=\"<?= $this->relationGetId('view') ?>\" class=\"relation-manager\">\n        <?= $this->relationRenderView() ?>\n    </div>\n\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_manage_form.php",
    "content": "<div\n    id=\"<?= $relationManageFormWidget->getId('managePopup') ?>\"\n    data-popup-size=\"<?= $relationPopupSize ?? 950 ?>\"\n>\n    <?php if ($relationManageId): ?>\n\n        <?= Form::ajax('onRelationManageUpdate', [\n            'sessionKey' => $newSessionKey,\n            'data-popup-load-indicator' => true,\n            'data-request-success' => \"oc.relationBehavior.changed('\" . e($relationField) . \"', 'updated')\",\n        ]) ?>\n            <!-- Passable fields -->\n            <input type=\"hidden\" name=\"_relation_field\" value=\"<?= $relationField ?>\" />\n            <input type=\"hidden\" name=\"_relation_extra_config\" value=\"<?= e(json_encode($relationExtraConfig)) ?>\" />\n            <input type=\"hidden\" name=\"_form_session_key\" value=\"<?= $formSessionKey ?>\" />\n\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\"><?= e($relationManageTitle) ?></h4>\n                <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n            </div>\n\n            <div class=\"modal-body\">\n                <?= $relationManageFormWidget->render(['preview' => $relationReadOnly]) ?>\n            </div>\n\n            <div class=\"modal-footer\">\n                <?php if ($relationReadOnly): ?>\n                    <button\n                        type=\"button\"\n                        class=\"btn btn-secondary\"\n                        data-dismiss=\"popup\">\n                        <?= e($this->relationGetMessage('buttonCloseForm')) ?>\n                    </button>\n                <?php else: ?>\n                    <button\n                        type=\"submit\"\n                        class=\"btn btn-primary\">\n                        <?= e($this->relationGetMessage('buttonUpdateForm')) ?>\n                    </button>\n                    <span class=\"btn-text\">\n                        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                        <a\n                            href=\"javascript:;\"\n                            class=\"btn btn-link p-0\"\n                            data-dismiss=\"popup\">\n                            <?= e($this->relationGetMessage('buttonCancelForm')) ?>\n                        </a>\n                    </span>\n                <?php endif ?>\n            </div>\n        <?= Form::close() ?>\n\n    <?php else: ?>\n\n        <?= Form::ajax('onRelationManageCreate', [\n            'sessionKey' => $newSessionKey,\n            'data-popup-load-indicator' => true,\n            'data-request-success' => \"oc.relationBehavior.changed('\" . e($relationField) . \"', 'created')\",\n        ]) ?>\n            <!-- Passable fields -->\n            <input type=\"hidden\" name=\"_relation_field\" value=\"<?= $relationField ?>\" />\n            <input type=\"hidden\" name=\"_relation_extra_config\" value=\"<?= e(json_encode($relationExtraConfig)) ?>\" />\n            <input type=\"hidden\" name=\"_form_session_key\" value=\"<?= $formSessionKey ?>\" />\n\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\"><?= e($relationManageTitle) ?></h4>\n                <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n            </div>\n\n            <div class=\"modal-body\">\n                <?= $relationManageFormWidget->render() ?>\n            </div>\n\n            <div class=\"modal-footer\">\n                <button\n                    type=\"submit\"\n                    class=\"btn btn-primary\">\n                    <?= e($this->relationGetMessage('buttonCreateForm')) ?>\n                </button>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <a\n                        href=\"javascript:;\"\n                        class=\"btn btn-link p-0\"\n                        data-dismiss=\"popup\">\n                        <?= e($this->relationGetMessage('buttonCancelForm')) ?>\n                    </a>\n                </span>\n            </div>\n        <?= Form::close() ?>\n\n    <?php endif ?>\n\n</div>\n\n<script>\n    oc.popup.bindToPopups('#<?= $relationManageFormWidget->getId(\"managePopup\") ?>', {\n        _relation_field: '<?= $relationField ?>',\n        _relation_extra_config: '<?= e(json_encode($relationExtraConfig)) ?>',\n        _form_session_key: '<?= $formSessionKey ?>'\n    });\n</script>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_manage_list.php",
    "content": "<div\n    id=\"relationManagePopup\"\n    data-popup-size=\"<?= $relationPopupSize ?? 950 ?>\"\n>\n    <?= Form::open() ?>\n        <input type=\"hidden\" name=\"_relation_field\" value=\"<?= $relationField ?>\" />\n        <input type=\"hidden\" name=\"_relation_extra_config\" value=\"<?= e(json_encode($relationExtraConfig)) ?>\" />\n\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e($relationManageTitle) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n\n        <div class=\"list-flush\" data-list-linkage=\"<?= $relationManageListWidget->getId() ?>\">\n            <?php if ($relationSearchWidget): ?>\n                <?= $relationSearchWidget->render() ?>\n            <?php endif ?>\n            <?php if ($relationManageFilterWidget): ?>\n                <?= $relationManageFilterWidget->render() ?>\n            <?php endif ?>\n            <?= $relationManageListWidget->render() ?>\n        </div>\n\n        <div class=\"modal-footer\">\n            <?php if ($relationManageListWidget->showCheckboxes): ?>\n                <button\n                    type=\"button\"\n                    class=\"btn btn-primary\"\n                    data-request=\"onRelationManageAdd\"\n                    data-dismiss=\"popup\"\n                    data-request-success=\"oc.relationBehavior.changed('<?= e($relationField) ?>', 'added')\"\n                    data-stripe-load-indicator>\n                    <?= e($this->relationGetMessage('buttonAddMany')) ?>\n                </button>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <a\n                        href=\"javascript:;\"\n                        class=\"btn btn-link p-0\"\n                        data-dismiss=\"popup\">\n                        <?= e($this->relationGetMessage('buttonCancelForm')) ?>\n                    </a>\n                </span>\n            <?php else: ?>\n                <button\n                    type=\"button\"\n                    class=\"btn btn-secondary me-auto\"\n                    data-dismiss=\"popup\">\n                    <?= e($this->relationGetMessage('buttonCloseForm')) ?>\n                </button>\n            <?php endif ?>\n            <?php if ($relationManageListWidget->showSetup): ?>\n                <button\n                    class=\"btn btn-circle btn-secondary ms-auto\"\n                    title=\"<?= __(\"List Setup\") ?>\"\n                    data-handler=\"<?= $relationManageListWidget->getEventHandler('onLoadSetup') ?>\"\n                    data-control=\"popup\"\n                    type=\"button\">\n                        <i class=\"icon-text-format-ul\"></i>\n                </button>\n            <?php endif ?>\n        </div>\n    <?= Form::close() ?>\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_manage_pivot.php",
    "content": "<div\n    id=\"relationManagePivotPopup\"\n    data-popup-size=\"<?= $relationPopupSize ?? 950 ?>\"\n>\n    <?= Form::open() ?>\n        <input type=\"hidden\" name=\"_relation_field\" value=\"<?= $relationField ?>\" />\n        <input type=\"hidden\" name=\"_relation_extra_config\" value=\"<?= e(json_encode($relationExtraConfig)) ?>\" />\n\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e($relationManageTitle) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n        <?php if (!$relationSearchWidget): ?>\n            <div class=\"modal-body py-3\">\n                <p class=\"mb-0 text-muted\"><?= e(trans('backend::lang.relation.help')) ?></p>\n            </div>\n        <?php endif ?>\n        <div class=\"list-flush\">\n            <?php if ($relationSearchWidget): ?>\n                <?= $relationSearchWidget->render() ?>\n            <?php endif ?>\n            <?php if ($relationManageFilterWidget): ?>\n                <?= $relationManageFilterWidget->render() ?>\n            <?php endif ?>\n            <?= $relationManageListWidget->render() ?>\n        </div>\n\n        <div class=\"modal-footer\">\n            <?php if ($relationManageListWidget->showCheckboxes): ?>\n                <button\n                    type=\"button\"\n                    class=\"btn btn-primary\"\n                    data-control=\"popup\"\n                    data-handler=\"onRelationManageAddPivot\"\n                    data-dismiss=\"popup\"\n                    data-stripe-load-indicator>\n                    <?= e($this->relationGetMessage('buttonAddMany')) ?>\n                </button>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <a\n                        href=\"javascript:;\"\n                        class=\"btn btn-link p-0\"\n                        data-dismiss=\"popup\">\n                        <?= e($this->relationGetMessage('buttonCancelForm')) ?>\n                    </a>\n                </span>\n            <?php else: ?>\n                <button\n                    type=\"button\"\n                    class=\"btn btn-secondary\"\n                    data-dismiss=\"popup\">\n                    <?= e($this->relationGetMessage('buttonCloseForm')) ?>\n                </button>\n            <?php endif ?>\n        </div>\n    <?= Form::close() ?>\n</div>\n<script>\n    setTimeout(\n        function() { $('#relationManagePivotPopup input.form-control:first').focus() },\n        310\n    );\n</script>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_pivot_form.php",
    "content": "<div\n    id=\"<?= $relationPivotWidget->getId('pivotPopup') ?>\"\n    data-popup-size=\"<?= $relationPopupSize ?? 950 ?>\"\n>\n    <?php if ($relationManageId || $relationPivotId): ?>\n\n        <?= Form::ajax('onRelationManagePivotUpdate', [\n            'data-popup-load-indicator' => true,\n            'data-request-success' => \"oc.relationBehavior.changed('\" . e($relationField) . \"', 'updated')\",\n        ]) ?>\n\n            <!-- Passable fields -->\n            <input type=\"hidden\" name=\"_relation_field\" value=\"<?= $relationField ?>\" />\n            <input type=\"hidden\" name=\"_relation_extra_config\" value=\"<?= e(json_encode($relationExtraConfig)) ?>\" />\n            <?php if ($relationPivotId): ?>\n                <input type=\"hidden\" name=\"pivot_id\" value=\"<?= $relationPivotId ?>\" />\n            <?php endif ?>\n\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\"><?= e($relationPivotTitle) ?></h4>\n                <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n            </div>\n            <div class=\"modal-body\">\n                <?= $relationPivotWidget->render(['preview' => $relationReadOnly]) ?>\n            </div>\n            <div class=\"modal-footer\">\n                <?php if ($relationReadOnly): ?>\n                    <button\n                        type=\"button\"\n                        class=\"btn btn-secondary\"\n                        data-dismiss=\"popup\">\n                        <?= e($this->relationGetMessage('buttonCloseForm')) ?>\n                    </button>\n                <?php else: ?>\n                    <button\n                        type=\"submit\"\n                        class=\"btn btn-primary\">\n                        <?= __(\"Update\") ?>\n                    </button>\n                    <span class=\"btn-text\">\n                        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                        <a\n                            href=\"javascript:;\"\n                            class=\"btn btn-link p-0\"\n                            data-dismiss=\"popup\">\n                            <?= e($this->relationGetMessage('buttonCancelForm')) ?>\n                        </a>\n                    </span>\n                <?php endif ?>\n            </div>\n\n        <?= Form::close() ?>\n\n    <?php else: ?>\n\n        <?= Form::ajax('onRelationManagePivotCreate', [\n            'data-popup-load-indicator' => true,\n            'data-request-success' => \"oc.relationBehavior.changed('\" . e($relationField) . \"', 'created')\",\n        ]) ?>\n\n            <!-- Passable fields -->\n            <input type=\"hidden\" name=\"_relation_field\" value=\"<?= $relationField ?>\" />\n            <input type=\"hidden\" name=\"_relation_extra_config\" value=\"<?= e(json_encode($relationExtraConfig)) ?>\" />\n            <?php foreach ((array) $foreignId as $fid): ?>\n                <input type=\"hidden\" name=\"foreign_id[]\" value=\"<?= $fid ?>\" />\n            <?php endforeach ?>\n\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\"><?= e($relationPivotTitle) ?></h4>\n                <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n            </div>\n            <div class=\"modal-body\">\n                <?= $relationPivotWidget->render() ?>\n            </div>\n            <div class=\"modal-footer\">\n                <button\n                    type=\"submit\"\n                    class=\"btn btn-primary\">\n                    <?= e($this->relationGetMessage('buttonAddForm')) ?>\n                </button>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <a\n                        href=\"javascript:;\"\n                        class=\"btn btn-link p-0\"\n                        data-dismiss=\"popup\">\n                        <?= e($this->relationGetMessage('buttonCancelForm')) ?>\n                    </a>\n                </span>\n            </div>\n\n        <?= Form::close() ?>\n\n    <?php endif ?>\n\n</div>\n\n<script>\n    oc.popup.bindToPopups('#<?= $relationPivotWidget->getId(\"pivotPopup\") ?>', {\n        _relation_field: '<?= $relationField ?>'\n    });\n</script>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n\n    <?php foreach ($relationToolbarButtons as $button): ?>\n\n        <?php if ($button == 'update'): ?>\n            <?= $this->relationMakePartial('button_update', [\n                'relationManageId' => $relationManageId ?: $relationViewModel->getKey()\n            ]) ?>\n        <?php else: ?>\n            <?= $this->relationMakePartial('button_'.$button) ?>\n        <?php endif ?>\n\n    <?php endforeach ?>\n\n</div>\n"
  },
  {
    "path": "modules/backend/behaviors/relationcontroller/partials/_view.php",
    "content": "<?php if ($relationViewFilterWidget): ?>\n    <?= $relationViewFilterWidget->render() ?>\n<?php endif ?>\n\n<?php if ($relationViewMode === 'single'): ?>\n    <?= $relationViewFormWidget->render() ?>\n<?php else: ?>\n    <?= $relationViewListWidget->render() ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/behaviors/reordercontroller/assets/js/october.reorder.js",
    "content": "/*\n * Scripts for the Reorder controller behavior.\n *\n * The following functions are observed:\n * - Simple sorting: Post back the original sort orders and the new ordered identifiers.\n * - Nested sorting: Post back source and target nodes IDs and the move positioning.\n */\n+function ($) { \"use strict\";\n\n    var ReorderBehavior = function() {\n\n        this.sortMode = null\n\n        this.simpleSortOrders = []\n\n        this.initSorting = function (mode) {\n            this.sortMode = mode;\n\n            if (mode == 'simple') {\n                this.initSortingSimple();\n            }\n\n            $('#reorderTreeList').on('move.oc.treelist', $.proxy(this.processReorder, this));\n        }\n\n        this.processReorder = function(ev, sortData){\n            var postData\n\n            if (this.sortMode == 'simple') {\n                postData = { sort_orders: this.simpleSortOrders }\n            }\n            else if (this.sortMode == 'nested') {\n                postData = this.getNestedMoveData(sortData)\n            }\n\n            $('#reorderTreeList').request('onReorder', {\n                data: postData\n            })\n        }\n\n        this.getNestedMoveData = function (sortData) {\n            var\n                $el,\n                $item = sortData.item,\n                moveData = {\n                    targetNode: 0,\n                    sourceNode: $item.data('recordId'),\n                    position: 'root'\n                }\n\n            if (($el = $item.next()) && $el.length) {\n                moveData.position = 'before'\n            }\n            else if (($el = $item.prev()) && $el.length) {\n                moveData.position = 'after'\n            }\n            else if (($el = $item.parents('li:first')) && $el.length) {\n                moveData.position = 'child'\n            }\n\n            if ($el.length) {\n                moveData.targetNode = $el.data('recordId')\n            }\n\n            return moveData\n        }\n\n        this.initSortingSimple = function () {\n            var sortOrders = [];\n\n            $('#reorderTreeList li').each(function(){\n                sortOrders.push($(this).data('recordSortOrder'));\n            });\n\n            this.simpleSortOrders = sortOrders;\n        }\n    }\n\n    $.oc.reorderBehavior = new ReorderBehavior;\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/behaviors/reordercontroller/partials/_container.htm",
    "content": "<?php if ($reorderToolbarWidget): ?>\n    <!-- Reorder Toolbar -->\n    <div id=\"<?= $this->getId('reorderToolbar') ?>\" class=\"reorder-toolbar\">\n        <?= $reorderToolbarWidget->render() ?>\n    </div>\n<?php endif ?>\n\n<!-- Reorder List -->\n<?= Form::open() ?>\n    <div\n        id=\"reorderTreeList\"\n        class=\"control-treelist\"\n        data-control=\"treelist\"\n        <?= $reorderShowTree ? '' : 'data-nested=\"0\"' ?>\n        data-handle=\"<?= $reorderShowTree ? 'a.move' : '> li > .record > a.move' ?>\"\n        data-stripe-load-indicator>\n        <?php if ($reorderRecords): ?>\n            <ol id=\"reorderRecords\">\n                <?= $this->reorderMakePartial('records', ['records' => $reorderRecords]) ?>\n            </ol>\n        <?php else: ?>\n            <p><?= Lang::get('backend::lang.reorder.no_records') ?></p>\n        <?php endif ?>\n    </div>\n<?= Form::close() ?>\n\n<script>\n    addEventListener('render', function() {\n        $.oc.reorderBehavior.initSorting('<?= $reorderSortMode ?>');\n    });\n</script>\n"
  },
  {
    "path": "modules/backend/behaviors/reordercontroller/partials/_records.htm",
    "content": "<?php foreach ($records as $record): ?>\n\n    <li data-record-id=\"<?= $record->getKey() ?>\"\n        <?php if ($reorderSortMode === 'simple'): ?>\n            data-record-sort-order=\"<?= $record->{$record->getSortOrderColumn()} ?>\"\n        <?php endif ?>\n    >\n        <div class=\"record\">\n            <a href=\"javascript:;\" class=\"move\"></a>\n            <span><?= e($this->reorderGetRecordName($record)) ?></span>\n            <input name=\"record_ids[]\" type=\"hidden\" value=\"<?= $record->getKey() ?>\" />\n        </div>\n\n        <?php if ($reorderShowTree): ?>\n            <ol>\n                <?php if ($record->children): ?>\n                    <?= $this->reorderMakePartial('records', ['records' => $record->children]) ?>\n                <?php endif ?>\n            </ol>\n        <?php endif ?>\n    </li>\n\n<?php endforeach ?>\n"
  },
  {
    "path": "modules/backend/classes/AuthManager.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse October\\Rain\\Auth\\Manager as RainAuthManager;\n\n/**\n * AuthManager is backend authentication manager.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass AuthManager extends RainAuthManager\n{\n    /**\n     * {@inheritdoc}\n     */\n    protected static $instance;\n\n    /**\n     * {@inheritdoc}\n     */\n    protected $sessionKey = 'admin_auth';\n\n    /**\n     * {@inheritdoc}\n     */\n    protected $userModel = \\Backend\\Models\\User::class;\n\n    /**\n     * @var string roleModel class\n     */\n    protected $roleModel = \\Backend\\Models\\UserRole::class;\n\n    /**\n     * {@inheritdoc}\n     */\n    protected $groupModel = \\Backend\\Models\\UserGroup::class;\n\n    /**\n     * {@inheritdoc}\n     */\n    protected $throttleModel = \\Backend\\Models\\UserThrottle::class;\n\n    /**\n     * {@inheritdoc}\n     */\n    protected $requireActivation = false;\n\n    /**\n     * userHasAccess is identical to User::hasAccess\n     */\n    public function userHasAccess($permissions, $all = true)\n    {\n        if ($user = $this->getUser()) {\n            return $user->hasAccess($permissions, $all);\n        }\n\n        return false;\n    }\n\n    /**\n     * userHasAccess is identical to User::hasPermission\n     */\n    public function userHasPermission($permissions, $all = true)\n    {\n        if ($user = $this->getUser()) {\n            return $user->hasPermission($permissions, $all);\n        }\n\n        return false;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    protected function createUserModelQuery()\n    {\n        return parent::createUserModelQuery()->withTrashed();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    protected function validateUserModel($user)\n    {\n        if (!$user instanceof $this->userModel) {\n            return false;\n        }\n\n        if ($user->deleted_at !== null) {\n            return false;\n        }\n\n        return $user;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/BackendController.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse App;\nuse Site;\nuse File;\nuse View;\nuse System;\nuse Request;\nuse Response;\nuse Illuminate\\Routing\\Controller as ControllerBase;\nuse October\\Rain\\Router\\Helper as RouterHelper;\nuse System\\Classes\\PluginManager;\nuse Closure;\n\n/**\n * BackendController is the master controller for all back-end pages.\n * All requests that are prefixed with the backend URI pattern are sent here,\n * then the next URI segments are analyzed and the request is routed to the\n * relevant back-end controller.\n *\n * For example, a request with the URL `/backend/acme/blog/posts` will look\n * for the `Posts` controller inside the `Acme.Blog` plugin.\n *\n * @see Backend\\Classes\\Controller Base class for back-end controllers\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass BackendController extends ControllerBase\n{\n    use \\October\\Rain\\Extension\\ExtendableTrait;\n\n    /**\n     * @var array Behaviors implemented by this controller.\n     */\n    public $implement;\n\n    /**\n     * @var string Allows early access to page action.\n     */\n    public static $action;\n\n    /**\n     * @var array Allows early access to page parameters.\n     */\n    public static $params;\n\n    /**\n     * __construct a new BackendController instance\n     */\n    public function __construct()\n    {\n        $this->extendableConstruct();\n    }\n\n    /**\n     * extend this object properties upon construction\n     */\n    public static function extend(Closure $callback)\n    {\n        self::extendableExtendCallback($callback);\n    }\n\n    /**\n     * run finds and serves the requested backend controller\n     * If the controller cannot be found, returns the Cms page with the URL /404.\n     * If the /404 page doesn't exist, returns the system 404 page.\n     * @param string $url Specifies the requested page URL.\n     * If the parameter is omitted, the current URL used.\n     * @return string Returns the processed page content.\n     */\n    public function run($url = null)\n    {\n        $params = RouterHelper::segmentizeUrl($url);\n\n        // Database check\n        if (!App::hasDatabase()) {\n            return System::checkDebugMode()\n                ? Response::make(View::make('backend::no_database'), 200)\n                : $this->runPageNotFound();\n        }\n\n        // Locate edit site\n        $this->findEditSite();\n\n        // Look for App or Module controller\n        $module = $params[0] ?? 'backend';\n        $controller = $params[1] ?? 'index';\n        $isApp = strtolower($module) === 'app';\n        $controllerClass = \"{$module}\\\\Controllers\\\\{$controller}\";\n        $controllerBase = $isApp ? base_path() : base_path('modules');\n\n        // Store the current context\n        self::$action = $params[2] ?? 'index';\n        self::$params = array_slice($params, 3);\n\n        if ($controllerObj = $this->findController(\n            $controllerClass,\n            self::$action,\n            $controllerBase\n        )) {\n            if (!$isApp && !System::hasModule(ucfirst($module))) {\n                return Response::make(View::make('backend::404'), 404);\n            }\n\n            return $controllerObj->run(self::$action, self::$params);\n        }\n\n        // Look for Plugin controller using hint segment\n        $hint = $params[0] ?? null;\n        $namespace = PluginManager::instance()->getPluginHints()[$hint] ?? null;\n        if ($namespace && str_contains($namespace, '.')) {\n            [$author, $plugin] = explode('.', strtolower($namespace));\n            $controller = $params[1] ?? 'index';\n            $controllerClass = \"{$author}\\\\{$plugin}\\Controllers\\\\{$controller}\";\n\n            // Store the current context\n            self::$action = $params[2] ?? 'index';\n            self::$params = array_slice($params, 3);\n\n            if ($controllerObj = $this->findController(\n                $controllerClass,\n                self::$action,\n                plugins_path()\n            )) {\n                return $controllerObj->run(self::$action, self::$params);\n            }\n        }\n\n        // Look for a Plugin controller\n        if (count($params) >= 2) {\n            [$author, $plugin] = $params;\n            $controller = $params[2] ?? 'index';\n            $controllerClass = \"{$author}\\\\{$plugin}\\Controllers\\\\{$controller}\";\n\n            // Store the current context\n            self::$action = $params[3] ?? 'index';\n            self::$params = array_slice($params, 4);\n\n            if ($controllerObj = $this->findController(\n                $controllerClass,\n                self::$action,\n                plugins_path()\n            )) {\n                if (PluginManager::instance()->isDisabled(ucfirst($author).'.'.ucfirst($plugin))) {\n                    return Response::make(View::make('backend::404'), 404);\n                }\n\n                return $controllerObj->run(self::$action, self::$params);\n            }\n        }\n\n        // Fall back to CMS controller\n        return $this->runPageNotFound();\n    }\n\n    /**\n     * findEditSite locates the edit site based on the current request\n     */\n    protected function findEditSite()\n    {\n        if (!Site::hasAnyEditSite()) {\n            return;\n        }\n\n        if ($id = get('_site_id')) {\n            Site::applyEditSiteId($id);\n        }\n        elseif ($id = Request::header('X_SITE_ID')) {\n            Site::applyEditSiteId($id);\n        }\n        elseif ($site = Site::getEditSiteFromRequest()) {\n            Site::applyEditSite($site);\n        }\n    }\n\n    /**\n     * runPageNotFound display a CMS 404 page, if one is available. For security reasons,\n     * the backend 404 page is not used unless an admin session is found, this prevents\n     * random discovery of the admin panel URL by crawlers or bots.\n     */\n    protected function runPageNotFound()\n    {\n        if (System::hasModule('Cms') && !\\BackendAuth::getUser()) {\n            return \\Cms::pageNotFound();\n        }\n\n        return Response::make(View::make('backend::404'), 404);\n    }\n\n    /**\n     * findController is used internally to find a backend controller with a\n     * callable action method\n     * @param string $controller Specifies a method name to execute.\n     * @param string $action Specifies a method name to execute.\n     * @param string $inPath Base path for class file location.\n     * @return ControllerBase|false Returns the backend controller object\n     */\n    protected function findController($controller, $action, $inPath)\n    {\n        // Workaround: Composer does not support case insensitivity.\n        if (!class_exists($controller)) {\n            $controllerFile = $inPath.'/'.strtolower(str_replace('\\\\', '/', $controller)) . '.php';\n            if (\n                strpos($controllerFile, '..') !== false ||\n                strpos($controllerFile, './') !== false ||\n                strpos($controllerFile, '//') !== false\n            ) {\n                return false;\n            }\n\n            if ($controllerFile = File::existsInsensitive($controllerFile)) {\n                include_once $controllerFile;\n            }\n        }\n\n        if (!class_exists($controller)) {\n            return false;\n        }\n\n        $controllerObj = App::make($controller);\n\n        // Parse the action now that the controller class is loaded\n        self::$action = $this->parseAction($controllerObj, $action);\n\n        if ($controllerObj->actionExists(self::$action)) {\n            return $controllerObj;\n        }\n\n        return false;\n    }\n\n    /**\n     * parseAction processes the action name, since dashes are not supported in PHP methods.\n     * WildcardControllers keep the original action name since it is used as a parameter.\n     */\n    protected function parseAction($controller, string $actionName): string\n    {\n        if ($controller instanceof WildcardController) {\n            return $actionName;\n        }\n\n        if (strpos($actionName, '-') === false) {\n            return $actionName;\n        }\n\n        return snake_case(camel_case($actionName));\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/Controller.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Site;\nuse Lang;\nuse View;\nuse Flash;\nuse Config;\nuse System;\nuse Request;\nuse Backend;\nuse Redirect;\nuse Response;\nuse BackendAuth;\nuse Backend\\Models\\UserPreference;\nuse Backend\\Models\\Preference as BackendPreference;\nuse October\\Rain\\Exception\\SystemException;\nuse October\\Rain\\Exception\\ValidationException;\nuse October\\Rain\\Exception\\ApplicationException;\nuse October\\Rain\\Extension\\Extendable;\nuse Illuminate\\Database\\Eloquent\\MassAssignmentException;\nuse Larajax\\Exceptions\\ComponentNotFound;\nuse Larajax\\Exceptions\\HandlerNameInvalid;\nuse Larajax\\Exceptions\\HandlerNotFound;\nuse Larajax\\Contracts\\AjaxControllerInterface;\nuse ForbiddenException;\nuse Throwable;\n\n/**\n * Controller is a backend base controller class used by all Backend controllers\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Controller extends Extendable implements AjaxControllerInterface\n{\n    use \\System\\Traits\\ViewMaker;\n    use \\System\\Traits\\AssetMaker;\n    use \\System\\Traits\\ConfigMaker;\n    use \\System\\Traits\\EventEmitter;\n    use \\System\\Traits\\ResponseMaker;\n    use \\System\\Traits\\DependencyMaker;\n    use \\System\\Traits\\SecurityController;\n    use \\Backend\\Traits\\VueMaker;\n    use \\Backend\\Traits\\ErrorMaker;\n    use \\Backend\\Traits\\WidgetMaker;\n    use \\Larajax\\Traits\\AjaxController;\n\n    /**\n     * @var object user reference to administrator.\n     */\n    protected $user;\n\n    /**\n     * @var \\Larajax\\Classes\\ComponentContainer widget is a collection of WidgetBase classes used on this page.\n     */\n    public $widget;\n\n    /**\n     * @var bool suppressView prevents the automatic view display.\n     */\n    public $suppressView = false;\n\n    /**\n     * @var array params used by the router.\n     */\n    protected $params;\n\n    /**\n     * @var string action being called in the page\n     */\n    protected $action;\n\n    /**\n     * @var string actionView to render, defaults to action name\n     */\n    protected $actionView;\n\n    /**\n     * @var array publicActions available without authentication.\n     */\n    protected $publicActions = [];\n\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    protected $requiredPermissions = [];\n\n    /**\n     * @var string pageTitle\n     */\n    public $pageTitle;\n\n    /**\n     * @var mixed pageSize defines the maximum page size\n     */\n    public $pageSize;\n\n    /**\n     * @var string pageTitleTemplate\n     */\n    public $pageTitleTemplate;\n\n    /**\n     * @var string bodyClass property used for customizing the layout on a controller basis.\n     */\n    public $bodyClass;\n\n    /**\n     * @var mixed turboRouter for the AJAX framework. Supported values:\n     * - true: enables turbo (outputs visit-control=enable)\n     * - false: disables turbo (no turbo meta tags)\n     * - string: shorthand for visit-control value, e.g. 'reload', 'disable'\n     * - array: each key maps to a turbo-{key} meta tag, e.g. ['visit-control' => 'reload']\n     */\n    public $turboRouter;\n\n    /**\n     * @deprecated use $turboRouter instead\n     */\n    public $turboVisitControl;\n\n    /**\n     * @var array hiddenActions are methods that cannot be called as actions.\n     */\n    public $hiddenActions = [\n        'run'\n    ];\n\n    /**\n     * @var array guarded methods that cannot be called as actions.\n     */\n    protected $guarded = [];\n\n    /**\n     * __construct the controller.\n     */\n    public function __construct()\n    {\n        if (!is_array($this->implement)) {\n            $this->implement = [];\n        }\n\n        // Establish component container\n        $this->widget = $this->componentContainer = new \\Larajax\\Classes\\ComponentContainer($this);\n\n        // Allow early access to route data.\n        $this->action = BackendController::$action;\n        $this->params = BackendController::$params;\n\n        // Apply $guarded methods to hidden actions\n        $this->hiddenActions = array_merge($this->hiddenActions, $this->guarded);\n\n        // Define layout and view paths\n        $this->layout = $this->layout ?: 'default';\n        $this->layoutPath = Skin::getActive()->getLayoutPaths();\n        $this->viewPath = $this->configPath = $this->guessViewPath();\n\n        // Add layout paths from the plugin / module context\n        $relativePath = dirname(dirname(strtolower(str_replace('\\\\', '/', get_called_class()))));\n        $this->layoutPath[] = \"~/modules/{$relativePath}/layouts\";\n        $this->layoutPath[] = \"~/plugins/{$relativePath}/layouts\";\n\n        // Enable turbo router\n        if (Config::get('backend.turbo_router', false)) {\n            $this->turboRouter ??= true;\n        }\n\n        // Create a new instance of the admin user\n        $this->user = BackendAuth::getUser();\n\n        // Site switcher\n        if ($this->user && Site::hasAnyEditSite()) {\n            (new \\Backend\\Widgets\\SiteSwitcher($this))->bindToController();\n        }\n\n        // Impersonate backend role\n        if ($this->user && BackendAuth::isRoleImpersonator()) {\n            (new \\Backend\\Widgets\\RoleImpersonator($this))->bindToController();\n        }\n\n        // Boot behavior constructors\n        parent::__construct();\n    }\n\n    /**\n     * beforeDisplay is a method to override in your controller as a way to execute logic before\n     * each action executes. It is preferred over placing logic in the constructor\n     */\n    public function beforeDisplay()\n    {\n    }\n\n    /**\n     * run executes the controller action\n     * @param string $action The action name.\n     * @param array $params Routing parameters to pass to the action.\n     * @return mixed The action result.\n     */\n    public function run($action = null, $params = [])\n    {\n        $this->action = $action;\n        $this->params = $params;\n\n        // Check security token.\n        // @see \\System\\Traits\\SecurityController\n        if (!$this->verifyCsrfToken()) {\n            return Request::ajax()\n                ? ajax()->error(Lang::get('system::lang.page.invalid_token.label'), 403)->reload()\n                : Backend::redirectGuest('backend/auth');\n        }\n\n        // Check forced HTTPS protocol.\n        // @see \\System\\Traits\\SecurityController\n        if (!$this->verifyForceSecure()) {\n            return Redirect::secure(Request::path());\n        }\n\n        // Check that user is logged in and has permission to view this page\n        if (!$this->isPublicAction($action)) {\n            // Not logged in, redirect to login screen or show ajax error.\n            if (!BackendAuth::check()) {\n                return Request::ajax()\n                    ? ajax()->error(Lang::get('backend::lang.page.access_denied.label'), 403)\n                    : Backend::redirectGuest('backend/auth');\n            }\n\n            // Check general permission to backend\n            if (!BackendAuth::userHasAccess('general.backend')) {\n                throw new ForbiddenException;\n            }\n\n            // Check access groups against the page definition\n            if ($this->requiredPermissions && !$this->user->hasAnyAccess($this->requiredPermissions)) {\n                throw new ForbiddenException;\n            }\n\n            if (System::hasModule('Cms') && \\Cms\\Models\\MaintenanceSetting::isEnabledForBackend()) {\n                return View::make('backend::in_maintenance');\n            }\n\n            if ($this->user->hasPasswordExpired() && !$this instanceof \\Backend\\Controllers\\AuthGates) {\n                return Backend::redirect('backend/authgates/expired');\n            }\n        }\n\n        // Logic hook for all actions\n        if ($hook = $this->beforeDisplay()) {\n            return $hook;\n        }\n\n        /**\n         * @event backend.page.beforeDisplay\n         * Provides an opportunity to override backend page content\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.page.beforeDisplay', function ((\\Backend\\Classes\\Controller) $backendController, (string) $action, (array) $params) {\n         *         traceLog('redirect all backend pages to google');\n         *         return Redirect::to('https://google.com');\n         *     });\n         *\n         * Or\n         *\n         *     $backendController->bindEvent('page.beforeDisplay', function ((string) $action, (array) $params) {\n         *         traceLog('redirect all backend pages to google');\n         *         return Redirect::to('https://google.com');\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('backend.page.beforeDisplay', [$action, $params])) {\n            return $event;\n        }\n\n        // Register Vue components used on every page\n        $this->registerVueComponent(\\Backend\\VueComponents\\Modal::class);\n\n        // Set the admin preference locale\n        BackendPreference::setAppLocale();\n        BackendPreference::setAppFallbackLocale();\n\n        // Execute page action or AJAX event\n        if ($ajaxResponse = $this->execAjaxHandlers()) {\n            $result = $ajaxResponse;\n        }\n        else {\n            $result = $this->execPageAction($action, $params);\n        }\n\n        // Prepare and return response\n        // @see \\System\\Traits\\ResponseMaker\n        return $this->makeResponse($result);\n    }\n\n    /**\n     * actionExists is used internally to determines whether an action with the specified name exists.\n     *\n     * - Action must be a class public method.\n     * - Action name can not be prefixed with the underscore character.\n     * - Action name must be lowercase.\n     * - Action must not appear in hiddenActions.\n     *\n     * @param string $name Specifies the action name.\n     * @param bool $internal Allow protected actions.\n     * @return bool\n     */\n    public function actionExists($name, $internal = false)\n    {\n        // Must have length, not start with underscore and actually exist\n        if (!strlen($name) || substr($name, 0, 1) === '_' || !$this->methodExists($name)) {\n            return false;\n        }\n\n        // Only allow lowercase actions\n        if (strtolower($name) !== $name) {\n            return false;\n        }\n\n        // Checks hidden actions\n        foreach ($this->hiddenActions as $method) {\n            if (strtolower($name) === strtolower($method)) {\n                return false;\n            }\n        }\n\n        // Internal method check\n        $ownMethod = method_exists($this, $name);\n        if ($ownMethod) {\n            $methodInfo = new \\ReflectionMethod($this, $name);\n            $public = $methodInfo->isPublic();\n            if ($public) {\n                return true;\n            }\n        }\n\n        if ($internal && (($ownMethod && $methodInfo->isProtected()) || !$ownMethod)) {\n            return true;\n        }\n\n        if (!$ownMethod) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * actionUrl returns a URL for this controller and supplied action.\n     */\n    public function actionUrl($action = null, $path = null)\n    {\n        if ($action === null) {\n            $action = $this->action;\n        }\n\n        $class = get_called_class();\n        $uriPath = dirname(dirname(strtolower(str_replace('\\\\', '/', $class))));\n        $controllerName = strtolower(class_basename($class));\n\n        $url = $uriPath.'/'.$controllerName.'/'.$action;\n        if ($path) {\n            $url .= '/'.$path;\n        }\n\n        return Backend::url($url);\n    }\n\n    /**\n     * pageAction invokes the current controller action without rendering a view.\n     */\n    public function pageAction()\n    {\n        if (!$this->action) {\n            return;\n        }\n\n        $this->suppressView = true;\n        $this->execPageAction($this->action, $this->params);\n    }\n\n    /**\n     * This method is used internally.\n     * Invokes the controller action and loads the corresponding view.\n     * @param string $actionName Specifies a action name to execute.\n     * @param array $parameters A list of the action parameters.\n     */\n    protected function execPageAction($actionName, $parameters)\n    {\n        $result = null;\n\n        if (!$this->actionExists($actionName)) {\n            if (System::checkDebugMode()) {\n                throw new SystemException(sprintf(\n                    \"Action %s is not found in the controller %s\",\n                    $actionName,\n                    get_class($this)\n                ));\n            }\n            else {\n                Response::make(View::make('backend::404'), 404);\n            }\n        }\n\n        // Execute the action\n        $result = $this->makeCallMethod($this, $actionName, $parameters);\n\n        // Expecting \\Response and \\RedirectResponse\n        if ($result instanceof \\Symfony\\Component\\HttpFoundation\\Response) {\n            return $result;\n        }\n\n        // No page title\n        if (!$this->pageTitle) {\n            $this->pageTitle = Lang::get('backend::lang.page.untitled');\n        }\n\n        // Load the view\n        if (!$this->suppressView && $result === null) {\n            return $this->makeView($this->actionView ?: $actionName);\n        }\n\n        return $this->makeViewContent($result);\n    }\n\n    /**\n     * onAjax generic handler\n     */\n    public function onAjax()\n    {\n    }\n\n    /**\n     * getAjaxHandler returns the AJAX handler for the current request, if available.\n     * @return string\n     */\n    public function getAjaxHandler()\n    {\n        $request = $this->getAjaxRequest();\n\n        if ($request->hasAjaxHandler()) {\n            return $request->qualifiedHandler;\n        }\n\n        return null;\n    }\n\n    /**\n     * makePartialForAjax proxies to makePartial\n     * @see \\Larajax\\Traits\\AjaxController\n     */\n    protected function makePartialForAjax($partial)\n    {\n        if (!preg_match('/^(?!.*\\/\\/)[a-z0-9\\_][a-z0-9\\_\\-\\/]*$/i', $partial)) {\n            throw new ApplicationException(Lang::get('backend::lang.partial.invalid_name', ['name'=>e($partial)]));\n        }\n\n        return $this->makePartial($partial);\n    }\n\n    /**\n     * makeCallForAjax proxies to makeCallMethod\n     * @see \\Larajax\\Traits\\AjaxController\n     */\n    protected function makeCallForAjax($callable, $parameters)\n    {\n        [$instance, $method] = $callable;\n\n        if ($instance instanceof \\Backend\\Classes\\WidgetBase) {\n            $this->addViewPath($instance->getViewPaths());\n\n            $result = $this->makeCallMethod($instance, $method, $parameters);\n\n            $this->vars = $instance->vars + $this->vars;\n\n            return $result;\n        }\n\n        return $this->makeCallMethod($instance, $method, $parameters);\n    }\n\n    /**\n     * execAjaxHandlers is used internally and invokes a controller event handler and\n     * loads the supplied partials.\n     */\n    protected function execAjaxHandlers()\n    {\n        $handler = $this->getAjaxHandler();\n        if (!$handler) {\n            return null;\n        }\n\n        try {\n            try {\n                // Execute the page action so behaviors and widgets are initialized\n                $this->pageAction();\n\n                if ($this->fatalError) {\n                    throw new ApplicationException($this->fatalError);\n                }\n\n                /**\n                 * @event backend.ajax.beforeRunHandler\n                 * Provides an opportunity to modify an AJAX request\n                 *\n                 * The parameter provided is `$handler` (the requested AJAX handler to be run)\n                 *\n                 * Example usage (forwards AJAX handlers to a backend widget):\n                 *\n                 *     Event::listen('backend.ajax.beforeRunHandler', function ((\\Backend\\Classes\\Controller) $controller, (string) $handler) {\n                 *         if (strpos($handler, '::')) {\n                 *             [$componentAlias, $handlerName] = explode('::', $handler);\n                 *             if ($componentAlias === $this->getBackendWidgetAlias()) {\n                 *                 return $this->backendControllerProxy->runAjaxHandler($handler);\n                 *             }\n                 *         }\n                 *     });\n                 *\n                 * Or\n                 *\n                 *     $this->controller->bindEvent('ajax.beforeRunHandler', function ((string) $handler) {\n                 *         if (strpos($handler, '::')) {\n                 *             [$componentAlias, $handlerName] = explode('::', $handler);\n                 *             if ($componentAlias === $this->getBackendWidgetAlias()) {\n                 *                 return $this->backendControllerProxy->runAjaxHandler($handler);\n                 *             }\n                 *         }\n                 *     });\n                 *\n                 */\n                if ($event = $this->fireSystemEvent('backend.ajax.beforeRunHandler', [$handler])) {\n                    $response = ajax()::wrap($event);\n                }\n                else {\n                    $response = $this->callAjaxAction($this->action, $this->params);\n                }\n            }\n            catch (ComponentNotFound $ex) {\n                throw new ApplicationException(Lang::get('backend::lang.widget.not_bound', ['name'=>$this->getAjaxRequest()->component]));\n            }\n            catch (HandlerNameInvalid $ex) {\n                throw new ApplicationException(Lang::get('backend::lang.ajax_handler.invalid_name', ['name'=>$handler]));\n            }\n            catch (HandlerNotFound $ex) {\n                throw new ApplicationException(Lang::get('backend::lang.ajax_handler.not_found', ['name'=>e($handler)]));\n            }\n            catch (MassAssignmentException $ex) {\n                throw new ApplicationException(Lang::get('backend::lang.model.mass_assignment_failed', ['attribute' => $ex->getMessage()]));\n            }\n        }\n        catch (ValidationException $ex) {\n            Flash::error($ex->getMessage());\n            $response = ajax()->invalidFields($ex->errors());\n        }\n        catch (Throwable $ex) {\n            $response = ajax()->exception($ex);\n        }\n\n        if ($this->hasAssetsDefined()) {\n            foreach ($this->getAssetPathsWithAttributes() as $type => $paths) {\n                $response->asset($type, $paths);\n            }\n        }\n\n        $response = $this->outputVueComponentsForAjax($response);\n\n        if (!$response->isRedirect() && Flash::check()) {\n            $response->update([\n                '#layout-flash-messages' => $this->makeLayoutPartial('flash_messages')\n            ]);\n        }\n\n        return $response;\n    }\n\n    //\n    // Getters\n    //\n\n    /**\n     * getParams returns the action parameters\n     */\n    public function getParams()\n    {\n        return $this->params;\n    }\n\n    /**\n     * getAction returns the action name\n     */\n    public function getAction()\n    {\n        return $this->action;\n    }\n\n    /**\n     * getPublicActions returns the controllers public actions\n     */\n    public function getPublicActions()\n    {\n        return $this->publicActions;\n    }\n\n    /**\n     * isPublicAction returns true if the current action is public\n     */\n    public function isPublicAction(?string $action): bool\n    {\n        if (!$action) {\n            return false;\n        }\n\n        return in_array($action, $this->publicActions);\n    }\n\n    /**\n     * getId returns a unique ID for the controller and route. Useful in creating HTML markup.\n     */\n    public function getId($suffix = null)\n    {\n        $id = class_basename(get_called_class()) . '-' . $this->action;\n        if ($suffix !== null) {\n            $id .= '-' . $suffix;\n        }\n\n        return $id;\n    }\n\n    //\n    // Hints\n    //\n\n    /**\n     * makeHintPartial renders a hint partial, used for displaying informative information that\n     * can be hidden by the user. If you don't want to render a partial, you can\n     * supply content via the 'content' key of $params.\n     * @param  string $name    Unique key name\n     * @param  string $partial Reference to content (partial name)\n     * @param  array  $params  Extra parameters\n     * @return string\n     */\n    public function makeHintPartial($name, $partial = null, $params = [])\n    {\n        if (is_array($partial)) {\n            $params = $partial;\n            $partial = null;\n        }\n\n        if (!$partial) {\n            $partial = array_get($params, 'partial', $name);\n        }\n\n        return $this->makeLayoutPartial('hint', [\n            'hintName' => $name,\n            'hintPartial' => $partial,\n            'hintContent' => array_get($params, 'content'),\n            'hintParams' => $params\n        ] + $params);\n    }\n\n    /**\n     * onHideBackendHint ajax handler to hide a backend hint, once hidden the partial\n     * will no longer display for the user.\n     * @return void\n     */\n    public function onHideBackendHint()\n    {\n        if (!$name = post('name')) {\n            throw new ApplicationException('Missing a hint name.');\n        }\n\n        $preferences = UserPreference::forUser();\n        $hiddenHints = $preferences->get('backend::hints.hidden', []);\n        $hiddenHints[$name] = 1;\n\n        $preferences->set('backend::hints.hidden', $hiddenHints);\n    }\n\n    /**\n     * isBackendHintHidden checks if a hint has been hidden by the user.\n     * @param  string $name Unique key name\n     * @return bool\n     */\n    public function isBackendHintHidden($name)\n    {\n        $hiddenHints = UserPreference::forUser()->get('backend::hints.hidden', []);\n        return array_key_exists($name, $hiddenHints);\n    }\n\n    //\n    // Turbo\n    //\n\n    /**\n     * getTurboMetaTags returns an array of turbo meta tag definitions\n     * based on the $turboRouter property configuration.\n     */\n    public function getTurboMetaTags(): array\n    {\n        $turboRouter = $this->turboRouter;\n\n        // Fallback to deprecated property\n        if ($turboRouter === null && $this->turboVisitControl !== null) {\n            $turboRouter = $this->turboVisitControl === 'disable'\n                ? false\n                : ['visit-control' => $this->turboVisitControl];\n        }\n\n        // Disabled\n        if ($turboRouter === null || $turboRouter === false) {\n            return [];\n        }\n\n        // Simple enable\n        if ($turboRouter === true) {\n            $turboRouter = ['visit-control' => 'enable'];\n        }\n\n        // String shorthand, e.g. 'reload' → ['visit-control' => 'reload']\n        if (is_string($turboRouter)) {\n            $turboRouter = ['visit-control' => $turboRouter];\n        }\n\n        // Default turbo-root\n        if (!isset($turboRouter['root'])) {\n            $turboRouter['root'] = \\Backend::baseUrl();\n        }\n\n        // Build meta tags\n        $tags = [];\n        foreach ($turboRouter as $key => $value) {\n            $tags[] = ['name' => \"turbo-{$key}\", 'content' => $value];\n        }\n\n        return $tags;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/ControllerBehavior.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Lang;\nuse ApplicationException;\nuse October\\Rain\\Extension\\ExtensionBase;\nuse System\\Traits\\ViewMaker;\n\n/**\n * ControllerBehavior base class\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ControllerBehavior extends ExtensionBase\n{\n    use \\Backend\\Traits\\WidgetMaker;\n    use \\Backend\\Traits\\SessionMaker;\n    use \\System\\Traits\\AssetMaker;\n    use \\System\\Traits\\ConfigMaker;\n    use \\System\\Traits\\ViewMaker {\n        ViewMaker::makeFileContents as localMakeFileContents;\n    }\n\n    /**\n     * @var object config supplied.\n     */\n    protected $config;\n\n    /**\n     * @var \\Backend\\Classes\\Controller controller reference.\n     */\n    protected $controller;\n\n    /**\n     * @var array requiredProperties that must exist in the controller using this behavior.\n     */\n    protected $requiredProperties = [];\n\n    /**\n     * @var array actions visible in context of the controller. Only takes effect if it is an array\n     */\n    protected $actions;\n\n    /**\n     * __construct the behavior\n     */\n    public function __construct($controller)\n    {\n        $this->controller = $controller;\n        $this->viewPath = $this->configPath = $this->guessViewPath('/partials');\n        $this->assetPath = $this->guessViewPath('/assets', true);\n\n        // Validate controller properties\n        foreach ($this->requiredProperties as $property) {\n            if (!isset($controller->{$property})) {\n                throw new ApplicationException(Lang::get('system::lang.behavior.missing_property', [\n                    'class' => get_class($controller),\n                    'property' => $property,\n                    'behavior' => get_called_class()\n                ]));\n            }\n        }\n\n        // Hide all methods that aren't explicitly listed as actions\n        if (is_array($this->actions)) {\n            $this->hideAction(array_diff(get_class_methods(get_class($this)), $this->actions));\n        }\n\n        // Constructor logic that is protected by authentication\n        $controller->bindEvent('page.beforeDisplay', function() {\n            $this->beforeDisplay();\n        });\n    }\n\n    /**\n     * beforeDisplay fires before the page is displayed and AJAX is executed.\n     */\n    public function beforeDisplay()\n    {\n    }\n\n    /**\n     * setConfig sets the configuration values\n     * @param mixed $config   Config object or array\n     * @param array $required Required config items\n     */\n    public function setConfig($config, $required = [])\n    {\n        $this->config = $this->makeConfig($config, $required);\n    }\n\n    /**\n     * getConfig is a safe accessor for configuration values\n     * @param string $name Config name, supports array names like \"field[key]\"\n     * @param mixed $default Default value if nothing is found\n     * @return string\n     */\n    public function getConfig($name = null, $default = null)\n    {\n        if (!$this->config) {\n            return $default;\n        }\n\n        return $this->getConfigValueFrom($this->config, $name, $default);\n    }\n\n    /**\n     * hideAction protects a public method from being available as an controller action.\n     * These methods could be defined in a controller to override a behavior default action.\n     * Such methods should be defined as public, to allow the behavior object to access it.\n     * By default public methods of a controller are considered as actions.\n     * To prevent this occurrence, methods should be hidden by using this method.\n     * @param mixed $methodName Specifies a method name.\n     */\n    protected function hideAction($methodName)\n    {\n        if (!is_array($methodName)) {\n            $methodName = [$methodName];\n        }\n\n        $this->controller->hiddenActions = array_merge($this->controller->hiddenActions, $methodName);\n    }\n\n    /**\n     * makeFileContents makes all views in context of the controller, not the behavior.\n     * @param string $filePath Absolute path to the view file.\n     * @param array $extraParams Parameters that should be available to the view.\n     * @return string\n     */\n    public function makeFileContents($filePath, $extraParams = [])\n    {\n        $this->controller->vars = array_merge($this->controller->vars, $this->vars);\n\n        return $this->controller->makeFileContents($filePath, $extraParams);\n    }\n\n    /**\n     * @deprecated\n     */\n    protected function controllerMethodExists($methodName)\n    {\n        return method_exists($this->controller, $methodName);\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/FilterScope.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Arr;\nuse Lang;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse October\\Rain\\Element\\Filter\\ScopeDefinition;\nuse Illuminate\\Support\\Collection;\nuse SystemException;\n\n/**\n * FilterScope is a translation of the filter scope configuration\n *\n * @method ScopeDefinition arrayName(string $arrayName) arrayName if the scope element names should be contained in an array.\n * @method ScopeDefinition idPrefix(string $prefix) idPrefix to the scope identifier so it can be totally unique.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FilterScope extends ScopeDefinition\n{\n    /**\n     * getOptionsFromModel looks at the model for defined options.\n     */\n    public function getOptionsFromModel($model, $scopeOptions)\n    {\n        // Method name\n        if (is_string($scopeOptions)) {\n            $scopeOptions = $this->getOptionsFromModelAsString($model, $scopeOptions);\n        }\n\n        // Cast collections to array\n        if ($scopeOptions instanceof Collection) {\n            $scopeOptions = $scopeOptions->all();\n        }\n\n        // Always be an array\n        if ($scopeOptions === null) {\n            return $scopeOptions = [];\n        }\n\n        return $scopeOptions;\n    }\n\n    /**\n     * getOptionsFromModelAsString where options are an explicit method reference\n     */\n    protected function getOptionsFromModelAsString($model, string $methodName)\n    {\n        // Calling via ClassName::method\n        if (\n            strpos($methodName, '::') !== false &&\n            ($staticMethod = explode('::', $methodName)) &&\n            count($staticMethod) === 2 &&\n            is_callable($staticMethod)\n        ) {\n            $scopeOptions = $staticMethod($model, $this);\n\n            if (!is_array($scopeOptions)) {\n                throw new SystemException(Lang::get('backend::lang.field.options_static_method_invalid_value', [\n                    'class' => $staticMethod[0],\n                    'method' => $staticMethod[1]\n                ]));\n            }\n        }\n        // Calling via $model->method\n        else {\n            if (!$this->objectMethodExists($model, $methodName)) {\n                throw new SystemException(Lang::get('backend::lang.filter.options_method_not_exists', [\n                    'model' => get_class($model),\n                    'method' => $methodName,\n                    'filter' => $this->fieldName\n                ]));\n            }\n\n            $scopeOptions = $model->$methodName($this);\n        }\n\n        return $scopeOptions;\n    }\n\n    /**\n     * applyScopeMethodToQuery\n     */\n    public function applyScopeMethodToQuery($query, $methodName = null)\n    {\n        if (!$methodName) {\n            $methodName = $this->modelScope;\n        }\n\n        // Calling via ClassName::method\n        if (\n            is_string($methodName) &&\n            strpos($methodName, '::') !== false &&\n            ($staticMethod = explode('::', $methodName)) &&\n            count($staticMethod) === 2 &&\n            is_callable($staticMethod)\n        ) {\n            $methodName = $staticMethod;\n        }\n\n        // Calling via query builder\n        if (is_string($methodName)) {\n            $query->$methodName($this);\n        }\n        // Calling via callable\n        else {\n            $methodName($query, $this);\n        }\n    }\n\n    /**\n     * getName returns a value suitable for the scope name property.\n     * @param  string $arrayName\n     * @return string\n     */\n    public function getName($arrayName = null)\n    {\n        if ($arrayName === null) {\n            $arrayName = $this->arrayName;\n        }\n\n        if ($arrayName) {\n            return $arrayName.'['.implode('][', HtmlHelper::nameToArray($this->scopeName)).']';\n        }\n\n        return $this->scopeName;\n    }\n\n    /**\n     * getId returns a value suitable for the scope id property.\n     */\n    public function getId($suffix = null)\n    {\n        $id = 'scope';\n        $id .= '-'.$this->scopeName;\n\n        if ($suffix) {\n            $id .= '-'.$suffix;\n        }\n\n        if ($this->idPrefix) {\n            $id = $this->idPrefix . '-' . $id;\n        }\n\n        return HtmlHelper::nameToId($id);\n    }\n\n    /**\n     * getDefaultScopeValue returns a fully qualified scope default value\n     */\n    public function getDefaultScopeValue()\n    {\n        $defaults = $this->defaults;\n        if ($defaults === null) {\n            return null;\n        }\n\n        // Basic value\n        if (is_scalar($defaults)) {\n            return ['value' => $defaults];\n        }\n\n        // Invalid value\n        if (!is_array($defaults)) {\n            return null;\n        }\n\n        // Numerical array\n        if (Arr::isList($defaults)) {\n            return ['value' => $defaults];\n        }\n\n        // Associative array\n        return $defaults;\n    }\n\n    /**\n     * objectMethodExists is an internal helper for method existence checks.\n     * @param  object $object\n     * @param  string $method\n     */\n    protected function objectMethodExists($object, $method): bool\n    {\n        if (method_exists($object, 'methodExists')) {\n            return $object->methodExists($method);\n        }\n\n        return method_exists($object, $method);\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/FilterWidgetBase.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Backend\\Classes\\FilterScope;\n\n/**\n * FilterWidgetBase class contains widgets used specifically for filters\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class FilterWidgetBase extends WidgetBase\n{\n    /**\n     * @var \\October\\Rain\\Database\\Model|null model is the related model object for the filter.\n     */\n    public $model;\n\n    /**\n     * @var bool isJsonable determines if the filtered column is stored as JSON in the database.\n     */\n    public $isJsonable;\n\n    /**\n     * @var FilterScope filterScope object containing general filter scope information.\n     */\n    protected $filterScope;\n\n    /**\n     * @var string scopeName contains the raw scope name\n     */\n    protected $scopeName;\n\n    /**\n     * @var string valueFrom contains the attribute value source\n     */\n    protected $valueFrom;\n\n    /**\n     * @var Backend\\Widgets\\Filter parentFilter that contains this scope\n     */\n    protected $parentFilter = null;\n\n    /**\n     * __construct\n     * @param Controller $controller\n     * @param FilterScope $filterScope\n     * @param array $configuration\n     */\n    public function __construct($controller, $filterScope, $configuration = [])\n    {\n        $this->filterScope = $filterScope;\n        $this->scopeName = $filterScope->scopeName;\n        $this->valueFrom = $filterScope->valueFrom ?: $this->scopeName;\n        $this->config = $this->makeConfig($configuration);\n\n        $this->fillFromConfig([\n            'model',\n            'isJsonable',\n            'parentFilter',\n        ]);\n\n        parent::__construct($controller, $configuration);\n    }\n\n    /**\n     * getParentFilter retrieves the parent form for this formwidget\n     * @return Backend\\Widgets\\Filter|null\n     */\n    public function getParentFilter()\n    {\n        return $this->parentFilter;\n    }\n\n    /**\n     * renderForm the form to use for filtering\n     */\n    public function renderForm()\n    {\n    }\n\n    /**\n     * getScopeName returns the HTML element field name for this widget, used for\n     * capturing user input, passed back to the getSaveValue method when saving.\n     * @return string\n     */\n    public function getScopeName()\n    {\n        return $this->filterScope->getName();\n    }\n\n    /**\n     * getLoadValue returns the value for this form field,\n     * supports nesting via HTML array.\n     * @return string\n     */\n    public function getLoadValue()\n    {\n        return $this->filterScope->scopeValue;\n    }\n\n    /**\n     * getHeaderValue looks up the scope header\n     */\n    public function getHeaderValue()\n    {\n        return $this->getParentFilter()->getHeaderValue($this->filterScope);\n    }\n\n    /**\n     * getActiveValue\n     */\n    public function getActiveValue()\n    {\n        if (post('clearScope')) {\n            return null;\n        }\n\n        return post($this->getScopeName(), post(\"Filter\"));\n    }\n\n    /**\n     * getFilterScope\n     */\n    public function getFilterScope()\n    {\n        return $this->filterScope;\n    }\n\n    /**\n     * applyScopeToQuery\n     */\n    public function applyScopeToQuery($query)\n    {\n    }\n\n    /**\n     * hasPostValue\n     */\n    protected function hasPostValue($name): bool\n    {\n        $value = post(\n            $this->getScopeName() . \"[{$name}]\",\n            post(\"Filter[{$name}]\")\n        );\n\n        return strlen(trim((string) $value)) > 0;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/FormField.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Str;\nuse Arr;\nuse Site;\nuse Html;\nuse Lang;\nuse October\\Rain\\Database\\Model;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse October\\Rain\\Element\\Form\\FieldDefinition;\nuse Illuminate\\Support\\Collection;\nuse SystemException;\nuse Exception;\n\n/**\n * FormField definition is a translation of the form field configuration\n *\n * @method FormField arrayName(string $arrayName) arrayName if the field element names should be contained in an array.\n * @method FormField idPrefix(string $idPrefix) idPrefix to the field identifier so it can be totally unique.\n * @method FormField context(string $context) Specifies contextual visibility of this form field.\n * @method FormField required(bool $required) Specifies if this field is mandatory.\n * @method FormField translatable(bool $translatable) Specifies if this field supports translated values.\n * @method FormField stretch(bool $stretch) Specifies if this field stretch to fit the page height.\n * @method FormField attributes(array $attributes) Contains a list of attributes specified in the field configuration.\n * @method FormField containerAttributes(array $containerAttributes) Contains a list of attributes for the field container.\n * @method FormField cssClass(string $cssClass) Specifies a CSS class to attach to the field container.\n * @method FormField path(string $path) Specifies a path for partial-type fields.\n * @method FormField dependsOn(array $dependsOn) Other field names this field depends on, when the other fields are modified, this field will update.\n * @method FormField changeHandler(string $changeHandler) AJAX handler for the change event.\n * @method FormField trigger(array $trigger) Other field names this field can be triggered by, see the Trigger API documentation.\n * @method FormField preset(array $preset) Other field names text is converted in to a URL, slug or file name value in this field.\n * @method FormField permissions(array $permissions) permissions needed to view this field\n * @method FormField valueTrans(bool $valueTrans) valueTrans determines if display values (model attributes) should be translated\n * @method FormField tooltip(array|string $tooltip) tooltip to display next to the field label, as an array supports: title, placement, icon, isHtml\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FormField extends FieldDefinition\n{\n    /**\n     * @var int Value returned when the form field should not contribute any save data.\n     */\n    const NO_SAVE_DATA = -1;\n\n    /**\n     * @var string A special character in yaml config files to indicate a field higher in hierarchy\n     */\n    const HIERARCHY_UP = '^';\n\n    /**\n     * @var string Field contexts\n     */\n    const CONTEXT_CREATE = 'create';\n    const CONTEXT_UPDATE = 'update';\n    const CONTEXT_PREVIEW = 'preview';\n    const CONTEXT_REFRESH = 'refresh';\n\n    /**\n     * __construct using old and new interface\n     */\n    public function __construct($config = [], $label = null)\n    {\n        // @deprecated old API\n        if (!is_array($config)) {\n            return parent::__construct([\n                'fieldName' => $config,\n                'label' => $label\n            ]);\n        }\n\n        parent::__construct($config);\n    }\n\n    /**\n     * initDefaultValues for this field\n     */\n    protected function initDefaultValues()\n    {\n        parent::initDefaultValues();\n\n        $this\n            ->valueTrans(true)\n            ->attributes([])\n        ;\n    }\n\n    /**\n     * isSelected determines if the provided value matches this field's value.\n     * @param string $value\n     * @return bool\n     */\n    public function isSelected($value = true)\n    {\n        if ($this->value === null) {\n            return false;\n        }\n\n        return (string) $value === (string) $this->value;\n    }\n\n    /**\n     * hasAttribute checks if the field has the supplied [unfiltered] attribute.\n     * @param  string $name\n     * @param  string $position\n     * @return bool\n     */\n    public function hasAttribute($name, $position = 'field')\n    {\n        $posKey = $position === 'container' ? 'containerAttributes' : 'attributes';\n\n        if (!isset($this->config[$posKey])) {\n            return false;\n        }\n\n        return array_key_exists($name, $this->config[$posKey]);\n    }\n\n    /**\n     * getAttributes returns the attributes for this field at a given position.\n     * @param  string $position\n     * @return array\n     */\n    public function getAttributes($position = 'field', $htmlBuild = true)\n    {\n        $posKey = $position === 'container' ? 'containerAttributes' : 'attributes';\n\n        $result = $this->config[$posKey] ?? [];\n        $result = $this->filterAttributes($result, $position);\n\n        return $htmlBuild ? Html::attributes($result) : $result;\n    }\n\n    /**\n     * filterAttributes adds any circumstantial attributes to the field based on other\n     * settings, such as the 'disabled' option.\n     * @param  array $attributes\n     * @param  string $position\n     * @return array\n     */\n    protected function filterAttributes($attributes, $position = 'field')\n    {\n        $position = strtolower($position);\n\n        $attributes = $this->filterTriggerAttributes($attributes, $position);\n        $attributes = $this->filterPresetAttributes($attributes, $position);\n\n        if ($position === 'field' && $this->disabled) {\n            $attributes = $attributes + ['disabled' => 'disabled'];\n        }\n\n        if ($position === 'field' && $this->autoFocus) {\n            $attributes = $attributes + ['autofocus' => 'autofocus'];\n        }\n\n        if ($position === 'field' && $this->readOnly) {\n            $attributes = $attributes + ['readonly' => 'readonly'];\n\n            if ($this->type === 'checkbox' || $this->type === 'switch') {\n                $attributes = $attributes + ['onclick' => 'return false;'];\n            }\n        }\n\n        return $attributes;\n    }\n\n    /**\n     * filterTriggerAttributes adds attributes used specifically by the Trigger API\n     * @param  array $attributes\n     * @param  string $position\n     * @return array\n     */\n    protected function filterTriggerAttributes($attributes, $position = 'field')\n    {\n        if (!$this->trigger || !is_array($this->trigger)) {\n            return $attributes;\n        }\n\n        $triggerAction = array_get($this->trigger, 'action');\n        $triggerField = array_get($this->trigger, 'field');\n        $triggerCondition = array_get($this->trigger, 'condition');\n        $triggerForm = $this->arrayName;\n        $triggerMulti = '';\n\n        // Apply these to container\n        if (in_array($triggerAction, ['hide', 'show']) && $position !== 'container') {\n            return $attributes;\n        }\n\n        // Apply these to field/input\n        if (in_array($triggerAction, ['enable', 'disable', 'empty']) && $position !== 'field') {\n            return $attributes;\n        }\n\n        // Reduce the field reference for the trigger condition field\n        $triggerFieldParentLevel = Str::getPrecedingSymbols($triggerField, self::HIERARCHY_UP);\n        if ($triggerFieldParentLevel > 0) {\n            // Remove the preceding symbols from the trigger field name\n            $triggerField = substr($triggerField, $triggerFieldParentLevel);\n            $triggerForm = HtmlHelper::reduceNameHierarchy($triggerForm, $triggerFieldParentLevel);\n        }\n\n        // Preserve multi field types\n        if (Str::endsWith($triggerField, '[]')) {\n            $triggerField = substr($triggerField, 0, -2);\n            $triggerMulti = '[]';\n        }\n\n        // Final compilation\n        if ($this->arrayName) {\n            $fullTriggerField = $triggerForm.'['.implode('][', HtmlHelper::nameToArray($triggerField)).']'.$triggerMulti;\n        }\n        else {\n            $fullTriggerField = $triggerField.$triggerMulti;\n        }\n\n        $newAttributes = [\n            'data-trigger' => '[name=\"'.$fullTriggerField.'\"]',\n            'data-trigger-action' => $triggerAction,\n            'data-trigger-condition' => $triggerCondition,\n            'data-trigger-closest-parent' => 'form, div[data-control=\"formwidget\"]'\n        ];\n\n        return $attributes + $newAttributes;\n    }\n\n    /**\n     * filterPresetAttributes adds attributes used specifically by the Input Preset API\n     * @param  array $attributes\n     * @param  string $position\n     * @return array\n     */\n    protected function filterPresetAttributes($attributes, $position = 'field')\n    {\n        if (!$this->preset || $position !== 'field') {\n            return $attributes;\n        }\n\n        if (!is_array($this->preset)) {\n            $this->preset = ['field' => $this->preset, 'type' => 'slug'];\n        }\n\n        $presetField = array_get($this->preset, 'field');\n        $presetType = array_get($this->preset, 'type');\n\n        if ($this->arrayName) {\n            $fullPresetField = $this->arrayName.'['.implode('][', HtmlHelper::nameToArray($presetField)).']';\n        }\n        else {\n            $fullPresetField = $presetField;\n        }\n\n        $newAttributes = [\n            'data-input-preset' => '[name=\"'.$fullPresetField.'\"]',\n            'data-input-preset-type' => $presetType,\n            'data-input-preset-closest-parent' => 'form'\n        ];\n\n        if ($prefixInput = array_get($this->preset, 'prefixInput')) {\n            $newAttributes['data-input-preset-prefix-input'] = $prefixInput;\n        }\n\n        return $attributes + $newAttributes;\n    }\n\n    /**\n     * getName returns a value suitable for the field name property. The array name is taken\n     * from the field or can be specified in the arguments.\n     * @param  string $arrayName\n     * @return string\n     */\n    public function getName($arrayName = null)\n    {\n        if ($arrayName === null) {\n            $arrayName = $this->arrayName;\n        }\n\n        if ($arrayName) {\n            return $arrayName.'['.implode('][', HtmlHelper::nameToArray($this->fieldName)).']';\n        }\n\n        return $this->fieldName;\n    }\n\n    /**\n     * getId returns a value suitable for the field id property.\n     * @param  string $suffix Specify a suffix string\n     * @return string\n     */\n    public function getId($suffix = null)\n    {\n        $id = 'field';\n        if ($this->arrayName) {\n            $id .= '-'.$this->arrayName;\n        }\n\n        $id .= '-'.$this->fieldName;\n\n        if ($suffix) {\n            $id .= '-'.$suffix;\n        }\n\n        if ($this->idPrefix) {\n            $id = $this->idPrefix . '-' . $id;\n        }\n\n        return HtmlHelper::nameToId($id);\n    }\n\n    /**\n     * getDisplayValue checks to see if display values (model attributes) should be translated,\n     * and also escapes the value\n     */\n    public function getDisplayValue($value)\n    {\n        if ($this->valueTrans) {\n            return e(__($value));\n        }\n\n        return e($value);\n    }\n\n    /**\n     * getTranslatableMessage\n     */\n    public function getTranslatableMessage(): string\n    {\n        if ($editSite = Site::getEditSite()) {\n            return e($editSite->name);\n        }\n\n        return '';\n    }\n\n    /**\n     * getCallableMethodFromValue checks for a string \"Class::method\" or as an\n     * array [Class, method] usually from a YAML definition\n     */\n    public function getCallableMethodFromValue($value): ?array\n    {\n        if (\n            is_string($value) &&\n            count($staticMethod = explode('::', $value)) === 2 &&\n            is_callable($value)\n        ) {\n            return $staticMethod;\n        }\n\n        if (\n            is_array($value) &&\n            count($value) === 2 &&\n            Arr::isList($value)\n        ) {\n            return $value;\n        }\n\n        return null;\n    }\n\n    /**\n     * getValueFromData returns this fields value from a supplied data set, which can be\n     * an array or a model or another generic collection.\n     * @param mixed $data\n     * @param mixed $default\n     * @return mixed\n     */\n    public function getValueFromData($data, $default = null)\n    {\n        $fieldName = $this->valueFrom ?: $this->fieldName;\n        return $this->getFieldNameFromData($fieldName, $data, $default);\n    }\n\n    /**\n     * getDefaultFromData returns the default value for this field, the supplied data is used\n     * to source data when defaultFrom is specified.\n     * @param mixed $data\n     * @return mixed\n     */\n    public function getDefaultFromData($data)\n    {\n        if ($this->defaultFrom) {\n            return $this->getFieldNameFromData($this->defaultFrom, $data);\n        }\n\n        if ($this->defaults !== '') {\n            return $this->defaults;\n        }\n\n        return null;\n    }\n\n    /**\n     * resolveModelAttribute returns the final model and attribute name of a nested attribute. Eg:\n     *\n     *     [$model, $attribute] = $this->resolveAttribute('person[phone]');\n     *\n     * @param  string $attribute\n     * @return array\n     */\n    public function resolveModelAttribute($model, $attribute = null)\n    {\n        return $this->resolveModelAttributeInternal($model, $attribute);\n    }\n\n    /**\n     * nearestModelAttribute returns the nearest model and attribute name of a nested attribute,\n     * which is useful for checking if an attribute is jsonable or a relation.\n     */\n    public function nearestModelAttribute($model, $attribute = null)\n    {\n        return $this->resolveModelAttributeInternal($model, $attribute, [\n            'nearMatch' => true,\n            'objectOnly' => true\n        ]);\n    }\n\n    /**\n     * resolveModelAttributeInternal is an internal method resolver for resolveModelAttribute\n     */\n    protected function resolveModelAttributeInternal($model, $attribute = null, $options = [])\n    {\n        extract(array_merge([\n            'objectOnly' => false,\n            'nearMatch' => false\n        ], $options));\n\n        if ($attribute === null) {\n            $attribute = $this->valueFrom ?: $this->fieldName;\n        }\n\n        $parts = is_array($attribute) ? $attribute : HtmlHelper::nameToArray($attribute);\n        $last = array_pop($parts);\n\n        foreach ($parts as $part) {\n            if ($objectOnly && !is_object($model->{$part})) {\n                if ($nearMatch) {\n                    return [$model, $part];\n                }\n\n                continue;\n            }\n\n            $model = $model->{$part};\n        }\n\n        return [$model, $last];\n    }\n\n    /**\n     * getFieldNameFromData is an internal method to extract the value of a field name\n     * from a data set.\n     * @param string $fieldName\n     * @param mixed $data\n     * @param mixed $default\n     * @return mixed\n     */\n    protected function getFieldNameFromData($fieldName, $data, $default = null)\n    {\n        // Array field name, eg: field[key][key2][key3]\n        $keyParts = HtmlHelper::nameToArray($fieldName);\n        $lastField = end($keyParts);\n        $result = $data;\n\n        // Loop the field key parts and build a value.\n        // To support relations only the last field should return the\n        // relation value, all others will look up the relation object as normal.\n        foreach ($keyParts as $key) {\n            if ($result instanceof Model && $result->hasRelation($key)) {\n                if ($key === $lastField) {\n                    $result = $result->getRelationSimpleValue($key) ?: $default;\n                }\n                else {\n                    $result = $result->{$key};\n                }\n            }\n            elseif (is_array($result)) {\n                if (!array_key_exists($key, $result)) {\n                    return $default;\n                }\n                $result = $result[$key];\n            }\n            else {\n                if (!isset($result->{$key})) {\n                    return $default;\n                }\n                $result = $result->{$key};\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * getOptionsFromModel looks at the model for defined options.\n     */\n    public function getOptionsFromModel($model, $fieldOptions, $data)\n    {\n        // Preset\n        if (is_string($fieldOptions) && str_starts_with($fieldOptions, 'preset:')) {\n            $fieldOptions = \\System\\Classes\\PresetManager::instance()->getPreset($fieldOptions);\n        }\n        // Method name\n        elseif (is_string($fieldOptions)) {\n            $fieldOptions = $this->getOptionsFromModelAsString($model, $fieldOptions, $data);\n        }\n        // Default collection\n        elseif ($fieldOptions === null || $fieldOptions === true) {\n            $fieldOptions = $this->getOptionsFromModelAsDefault($model, $data);\n        }\n\n        // Cast collections to array\n        if ($fieldOptions instanceof Collection) {\n            $fieldOptions = $fieldOptions->all();\n        }\n\n        return $fieldOptions;\n    }\n\n    /**\n     * getOptionsFromModelAsString where options are an explicit method reference\n     */\n    protected function getOptionsFromModelAsString($model, string $methodName, $data)\n    {\n        // Calling via ClassName::method\n        if ($callableMethod = $this->getCallableMethodFromValue($methodName)) {\n            $fieldOptions = $callableMethod($model, $this);\n\n            if (!is_array($fieldOptions)) {\n                throw new SystemException(Lang::get('backend::lang.field.options_static_method_invalid_value', [\n                    'class' => $callableMethod[0],\n                    'method' => $callableMethod[1]\n                ]));\n            }\n        }\n        // Calling via $model->method\n        else {\n            if (!$this->objectMethodExists($model, $methodName)) {\n                throw new SystemException(Lang::get('backend::lang.field.options_method_not_exists', [\n                    'model' => get_class($model),\n                    'method' => $methodName,\n                    'field' => $this->fieldName\n                ]));\n            }\n\n            $fieldOptions = $model->$methodName($this->value, $this->fieldName, $data);\n        }\n\n        return $fieldOptions;\n    }\n\n    /**\n     * getOptionsFromModelAsDefault refers to the model method or any of its behaviors\n     */\n    protected function getOptionsFromModelAsDefault($model, $data)\n    {\n        try {\n            [$model, $attribute] = $this->resolveModelAttributeInternal($model, $this->fieldName, ['objectOnly' => true]);\n        }\n        catch (Exception $ex) {\n            throw new SystemException(Lang::get('backend::lang.field.options_method_invalid_model', [\n                'model' => get_class($model),\n                'field' => $this->fieldName\n            ]));\n        }\n\n        $methodName = 'get'.studly_case($attribute).'Options';\n        if (\n            !$this->objectMethodExists($model, $methodName) &&\n            !$this->objectMethodExists($model, 'getDropdownOptions')\n        ) {\n            throw new SystemException(Lang::get('backend::lang.field.options_method_not_exists', [\n                'model' => get_class($model),\n                'method' => $methodName,\n                'field' => $this->fieldName\n            ]));\n        }\n\n        if ($this->objectMethodExists($model, $methodName)) {\n            $fieldOptions = $model->$methodName($this->value, $data);\n        }\n        else {\n            $fieldOptions = $model->getDropdownOptions($attribute, $this->value, $data);\n        }\n\n        return $fieldOptions;\n    }\n\n    /**\n     * objectMethodExists is an internal helper for method existence checks.\n     *\n     * @param  object $object\n     * @param  string $method\n     * @return boolean\n     */\n    protected function objectMethodExists($object, $method)\n    {\n        if (method_exists($object, 'methodExists')) {\n            return $object->methodExists($method);\n        }\n\n        return method_exists($object, $method);\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/FormTabs.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Str;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse October\\Rain\\Element\\Form\\FieldsetDefinition;\n\n/**\n * FormTabs is a fieldset definition for backend tabs\n *\n * @method FormTabs section(string $section) section specifies the form section these tabs belong to\n * @method FormTabs lazy(array $lazy) lazy is the names of tabs to lazy load\n * @method FormTabs adaptive(array $adaptive) adaptive is the names of tabs that use the entire screen space\n * @method FormTabs defaultTab(string $defaultTab) defaultTab is default tab label to use when none is specified\n * @method FormTabs activeTab(string $activeTab) activeTab is the selected tab when the form first loads, name or index.\n * @method FormTabs icons(array $icons) icons lists of icons for their corresponding tabs\n * @method FormTabs stretch(bool $stretch) stretch should these tabs stretch to the bottom of the page layout\n * @method FormTabs cssClass(string $cssClass) cssClass specifies a CSS class to attach to the tab container\n * @method FormTabs paneCssClass(array $paneCssClass) paneCssClass specifies a CSS class to an individual tab pane\n * @method FormTabs linkable(bool $linkable) linkable means tab gets url fragment to be linkable\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FormTabs extends FieldsetDefinition\n{\n    const SECTION_OUTSIDE = 'outside';\n    const SECTION_PRIMARY = 'primary';\n    const SECTION_SECONDARY = 'secondary';\n\n    /**\n     * initDefaultValues for this scope\n     */\n    protected function initDefaultValues()\n    {\n        parent::initDefaultValues();\n\n        $this\n            ->section(self::SECTION_OUTSIDE)\n            ->defaultTab('backend::lang.form.undefined_tab')\n            ->linkable()\n            ->icons([])\n            ->lazy([])\n            ->adaptive([])\n        ;\n    }\n\n    /**\n     * evalConfig\n     */\n    public function evalConfig(array $config)\n    {\n        if (isset($config['section']) && $config['section'] === self::SECTION_OUTSIDE) {\n            $this->suppressTabs();\n        }\n    }\n\n    /**\n     * isLazy checks if a tab should be lazy loaded\n     */\n    public function isLazy($tabName): bool\n    {\n        return in_array($tabName, $this->config['lazy']);\n    }\n\n    /**\n     * addLazy flags a tab to be lazy loaded\n     */\n    public function addLazy($tabName)\n    {\n        $this->config['lazy'] = array_merge((array) $this->config['lazy'], (array) $tabName);\n    }\n\n    /**\n     * isAdaptive checks if a tab uses adaptive sizing\n     */\n    public function isAdaptive($tabName): bool\n    {\n        return in_array($tabName, $this->config['adaptive']);\n    }\n\n    /**\n     * addAdaptive flags a tab to use adaptive sizing\n     */\n    public function addAdaptive($tabName)\n    {\n        $this->config['adaptive'] = array_merge((array) $this->config['adaptive'], (array) $tabName);\n    }\n\n    /**\n     * getIcon returns an icon for the tab based on the tab's name\n     * @param string $name\n     * @return string\n     */\n    public function getIcon($name)\n    {\n        if (!empty($this->config['icons'][$name])) {\n            return $this->config['icons'][$name];\n        }\n    }\n\n    /**\n     * getPaneCssClass returns a tab pane CSS class\n     * @param string $index\n     * @param string $label\n     * @return string\n     */\n    public function getPaneCssClass($index = null, $label = null)\n    {\n        if (!isset($this->config['paneCssClass'])) {\n            return '';\n        }\n\n        if (is_string($this->config['paneCssClass'])) {\n            return $this->config['paneCssClass'];\n        }\n\n        if ($index !== null && isset($this->config['paneCssClass'][$index])) {\n            return $this->config['paneCssClass'][$index];\n        }\n\n        if ($label !== null && isset($this->config['paneCssClass'][$label])) {\n            return $this->config['paneCssClass'][$label];\n        }\n\n        return $this->config['paneCssClass']['*'] ?? '';\n    }\n\n    /**\n     * setPaneCssClass appends a CSS class to the tab pane\n     */\n    public function setPaneCssClass($tabNameOrIndex, string $cssClass, bool $overwrite = false)\n    {\n        if (is_string($this->config['paneCssClass'])) {\n            $this->config['paneCssClass'] = ['*' => $this->config['paneCssClass']];\n        }\n\n        if ($overwrite) {\n            $this->config['paneCssClass'][$tabNameOrIndex] = $cssClass;\n        }\n        else {\n            $currentValue = $this->config['paneCssClass'][$tabNameOrIndex] ?? '';\n            $this->config['paneCssClass'][$tabNameOrIndex] = trim($currentValue . ' ' . $cssClass);\n        }\n    }\n\n    /**\n     * isPaneActive returns a tab pane CSS class\n     */\n    public function isPaneActive($index = null, $label = null): bool\n    {\n        if ($this->activeTab === null) {\n            return $index === 1;\n        }\n\n        if ($index !== null && $this->activeTab === $index) {\n            return true;\n        }\n\n        if ($label !== null && $this->activeTab === $label) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * getPaneAnchorId returns a value suitable for the pane id property.\n     * @return string\n     */\n    public function getPaneAnchorId($index = null, $label = null)\n    {\n        $id = $this->section . 'tab';\n\n        if ($this->linkable) {\n            $id .= '-' . (Str::slug(__($label)) ?: $index);\n        }\n        else {\n            $id .= '-' . $index;\n        }\n\n        return HtmlHelper::nameToId($id);\n    }\n\n    /**\n     * getPaneId\n     */\n    public function getPaneId($tabName)\n    {\n        if ($id = $this->getIdentifier($tabName)) {\n            return \"pane-{$id}\";\n        }\n\n        return null;\n    }\n\n    /**\n     * getTabId\n     */\n    public function getTabId($tabName)\n    {\n        if ($id = $this->getIdentifier($tabName)) {\n            return \"tab-{$id}\";\n        }\n\n        return null;\n    }\n\n    /**\n     * getIdentifier returns an API identifier for the specified tab\n     */\n    public function getIdentifier($tabName): ?string\n    {\n        return $this->config['identifiers'][$tabName] ?? null;\n    }\n\n    /**\n     * addIdentifier adds a new API identifier for the specified tab\n     */\n    public function addIdentifier($tabName, $identifier)\n    {\n        $this->config['identifiers'][$tabName] = $identifier;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/FormWidgetBase.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse October\\Rain\\Html\\Helper as HtmlHelper;\n\n/**\n * FormWidgetBase class contains widgets used specifically for forms\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class FormWidgetBase extends WidgetBase\n{\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var \\October\\Rain\\Database\\Model model object for the form.\n     */\n    public $model;\n\n    /**\n     * @var array data containing field values, if none supplied model should be used.\n     */\n    public $data;\n\n    /**\n     * @var string sessionKey for the active session, used for editing forms and deferred bindings.\n     */\n    public $sessionKey;\n\n    /**\n     * @var string sessionKeySuffix adds some extra uniqueness to the session key.\n     */\n    public $sessionKeySuffix;\n\n    /**\n     * @var bool previewMode renders this form with uneditable preview data.\n     */\n    public $previewMode = false;\n\n    /**\n     * @var bool showLabels determines if this form field should display comments and labels.\n     */\n    public $showLabels = true;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @var FormField formField object containing general form field information.\n     */\n    protected $formField;\n\n    /**\n     * @var \\Backend\\Widgets\\Form The parent form that contains this field\n     */\n    protected $parentForm = null;\n\n    /**\n     * @var string fieldName\n     */\n    protected $fieldName;\n\n    /**\n     * @var string Model attribute to get/set value from.\n     */\n    protected $valueFrom;\n\n    /**\n     * __construct\n     * @param Controller $controller\n     * @param FormField $formField\n     * @param array $configuration\n     */\n    public function __construct($controller, $formField, $configuration = [])\n    {\n        $this->formField = $formField;\n        $this->fieldName = $formField->fieldName;\n        $this->valueFrom = $formField->valueFrom ?: $this->fieldName;\n\n        $this->config = $this->makeConfig($configuration);\n\n        $this->fillFromConfig([\n            'model',\n            'data',\n            'sessionKey',\n            'sessionKeySuffix',\n            'previewMode',\n            'showLabels',\n            'parentForm',\n        ]);\n\n        parent::__construct($controller, $configuration);\n    }\n\n    /**\n     * getParentForm retrieves the parent form for this formwidget\n     * @return \\Backend\\Widgets\\Form|null\n     */\n    public function getParentForm()\n    {\n        return $this->parentForm;\n    }\n\n    /**\n     * getFieldName returns the HTML element field name for this widget, used for\n     * capturing user input, passed back to the getSaveValue method when saving.\n     * @return string\n     */\n    public function getFieldName()\n    {\n        return $this->formField->getName();\n    }\n\n    /**\n     * getId returns a unique ID for this widget. Useful in creating HTML markup.\n     */\n    public function getId($suffix = null)\n    {\n        $id = parent::getId($suffix);\n        $id .= '-' . $this->fieldName;\n        return HtmlHelper::nameToId($id);\n    }\n\n    /**\n     * getSaveValue processes the postback value for this widget. If the value is omitted from\n     * postback data, the form widget will be skipped.\n     * @param mixed $value The existing value for this widget.\n     * @return string The new value for this widget.\n     */\n    public function getSaveValue($value)\n    {\n        return $value;\n    }\n\n    /**\n     * getLoadValue returns the value for this form field,\n     * supports nesting via HTML array.\n     * @return string\n     */\n    public function getLoadValue()\n    {\n        if ($this->formField->value !== null) {\n            return $this->formField->value;\n        }\n\n        $defaultValue = $this->model && !$this->model->exists\n            ? $this->formField->getDefaultFromData($this->data ?: $this->model)\n            : null;\n\n        return $this->formField->getValueFromData($this->data ?: $this->model, $defaultValue);\n    }\n\n    /**\n     * resetFormValue from the form field, triggered by the parent form calling `setFormValues`\n     * and the new value is in the formField object `value` property.\n     */\n    public function resetFormValue()\n    {\n    }\n\n    /**\n     * getSessionKey returns the active session key, including suffix.\n     * @return string\n     */\n    public function getSessionKey()\n    {\n        return $this->sessionKey . $this->sessionKeySuffix;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/ListColumn.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse October\\Rain\\Database\\Model;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse October\\Rain\\Element\\Lists\\ColumnDefinition;\n\n/**\n * ListColumn definition is a translation of the list column configuration\n *\n * @method ListColumn valueFrom(string $valueFrom) valueFrom is a model attribute to use for the accessed value\n * @method ListColumn displayFrom(string $displayFrom) displayFrom is a model attribute to use for the displayed value\n * @method ListColumn defaults(string $defaults) defaults specifies a default value when value is empty\n * @method ListColumn sqlSelect(string $sqlSelect) sqlSelect is a custom SQL for selecting this record display value, the `@` symbol is replaced with the table name.\n * @method ListColumn relation(string $relation) Relation name, if this column represents a model relationship.\n * @method ListColumn relationCount(bool $relationCount) Count mode to display the number of related records.\n * @method ListColumn relationWith(string $relationWith) Eager load this dot-notated relation definition with the list query.\n * @method ListColumn width(string $width) sets the column width, can be specified in percents (10%) or pixels (50px).\n * @method ListColumn cssClass(string $cssClass) Specify a CSS class to attach to the list cell element.\n * @method ListColumn headCssClass(string $headCssClass) Specify a CSS class to attach to the list header cell element.\n * @method ListColumn format(string $format) Specify a format or style for the column value, such as a Date.\n * @method ListColumn path(string $path) Specifies a path for partial-type fields.\n * @method ListColumn sortableDefault(string $sortableDefault) sortableDefault makes the field sorted by default, either as asc or desc.\n * @method ListColumn valueTrans(bool $valueTrans) valueTrans determines if display values (model attributes) should be translated\n * @method ListColumn tooltip(array|string $tooltip) tooltip to display next to the column header, as an array supports: title, placement, icon, isHtml\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ListColumn extends ColumnDefinition\n{\n    /**\n     * __construct using old and new interface\n     */\n    public function __construct($config = [], $label = null)\n    {\n        // @deprecated old API\n        if (!is_array($config)) {\n            return parent::__construct([\n                'columnName' => $config,\n                'label' => $label\n            ]);\n        }\n\n        parent::__construct($config);\n    }\n\n    /**\n     * initDefaultValues for this field\n     */\n    protected function initDefaultValues()\n    {\n        parent::initDefaultValues();\n\n        $this\n            ->valueTrans(true)\n        ;\n    }\n\n    /**\n     * evalConfig\n     */\n    public function evalConfig(array $config)\n    {\n        if (isset($config['select'])) {\n            // @deprecated use below\n            $this->sqlSelect($config['select']);\n            // $this->sqlSelect(array_pull($config, 'select'));\n        }\n\n        if (isset($config['default'])) {\n            $this->defaults($config['default']);\n        }\n    }\n\n    /**\n     * select\n     */\n    public function select($column)\n    {\n        $this->sqlSelect($column);\n    }\n\n    /**\n     * getName returns a HTML valid name for the column name.\n     * @return string\n     */\n    public function getName()\n    {\n        return HtmlHelper::nameToId($this->columnName);\n    }\n\n    /**\n     * getId returns a value suitable for the column id property.\n     * @param  string $suffix Specify a suffix string\n     * @return string\n     */\n    public function getId($suffix = null)\n    {\n        $id = 'column';\n\n        $id .= '-'.$this->columnName;\n\n        if ($suffix) {\n            $id .= '-'.$suffix;\n        }\n\n        return HtmlHelper::nameToId($id);\n    }\n\n    /**\n     * getDisplayValue checks to see if display values (model attributes) should be translated,\n     * and also escapes the value\n     */\n    public function getDisplayValue($value)\n    {\n        if ($this->valueTrans) {\n            return e(__($value));\n        }\n\n        return e($value);\n    }\n\n    /**\n     * getAlignClass returns the column specific alignment css class.\n     * @return string\n     */\n    public function getAlignClass()\n    {\n        return $this->align ? 'list-cell-align-' . $this->align : '';\n    }\n\n    /**\n     * useRelationCount\n     */\n    public function useRelationCount(): bool\n    {\n        if (!$this->relation) {\n            return false;\n        }\n\n        // @deprecated use relationCount instead\n        if (($value = $this->getConfig('useRelationCount')) !== null) {\n            return $value;\n        }\n\n        return (bool) $this->relationCount;\n    }\n\n    /**\n     * getValueFromData returns this columns value from a supplied data set, which can be\n     * an array or a model or another generic collection.\n     * @param mixed $data\n     * @param mixed $default\n     * @return mixed\n     */\n    public function getValueFromData($data, $default = null)\n    {\n        $columnName = $this->valueFrom ?: $this->columnName;\n\n        return $this->getColumnNameFromData($columnName, $data, $default);\n    }\n\n    /**\n     * Internal method to extract the value of a column name from a data set.\n     * @param string $columnName\n     * @param mixed $data\n     * @param mixed $default\n     * @return mixed\n     */\n    protected function getColumnNameFromData($columnName, $data, $default = null)\n    {\n        /*\n         * Array column name, eg: column[key][key2][key3]\n         */\n        $keyParts = HtmlHelper::nameToArray($columnName);\n        $result = $data;\n\n        /*\n         * Loop the column key parts and build a value.\n         * To support relations only the last column should return the\n         * relation value, all others will look up the relation object as normal.\n         */\n        foreach ($keyParts as $key) {\n            if ($result instanceof Model && $result->hasRelation($key)) {\n                $result = $result->{$key};\n            }\n            else {\n                if (is_array($result) && array_key_exists($key, $result)) {\n                    $result = $result[$key];\n                }\n                elseif ($result instanceof Model) {\n                    $result = $result->getAttribute($key);\n                    if ($result === null) {\n                        return $default;\n                    }\n                }\n                elseif (!isset($result->{$key})) {\n                    return $default;\n                }\n                else {\n                    $result = $result->{$key};\n                }\n            }\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/LoginCustomization.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Url;\nuse Backend\\Models\\BrandSetting;\nuse Exception;\nuse File;\n\n/**\n * LoginCustomization\n */\nclass LoginCustomization\n{\n    /**\n     * getCustomizationVariables\n     */\n    public static function getCustomizationVariables($controller)\n    {\n        $result = [];\n\n        try {\n            $result['logo'] = BrandSetting::getLogo();\n        }\n        catch (Exception $ex) {\n            $result['logo'] = BrandSetting::getDefaultLogo();\n        }\n\n        if (!$result['logo']) {\n            $result['logo'] = Url::asset('/modules/backend/assets/images/october-logo.svg');\n        }\n\n        $result['loginCustomization'] = BrandSetting::getLoginPageCustomization();\n\n        $defaultImageNum = rand(1, 5);\n        $result['defaultImage1x'] = $defaultImageNum.'.png';\n        $result['defaultImage2x'] = $defaultImageNum.'@2x.png';\n\n        return (object)$result;\n    }\n\n    public static function getGeneratedImageData()\n    {\n        $index = rand(1, 7);\n\n        $basePath = base_path() . '/modules/backend/assets/images/october-login-ai-generated/';\n        $backgroundPath = $basePath . $index . '/background.css';\n\n        return (object)[\n            'img' => $index.'/image.png',\n            'background' => File::get($backgroundPath)\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/MainMenuItem.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Html;\nuse October\\Rain\\Element\\Navigation\\ItemDefinition;\n\n/**\n * MainMenuItem\n *\n * @method MainMenuItem owner(string $owner) owner\n * @method MainMenuItem iconSvg(null|string $iconSvg) iconSvg\n * @method MainMenuItem counter(mixed $counter) counter\n * @method MainMenuItem counterLabel(null|string $counterLabel) counterLabel\n * @method MainMenuItem attributes(array $attributes) attributes\n * @method MainMenuItem permissions(array $permissions) permissions\n * @method MainMenuItem sideMenu(SideMenuItem[] $sideMenu) sideMenu\n * @method MainMenuItem useDropdown(bool $useDropdown) useDropdown\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MainMenuItem extends ItemDefinition\n{\n    /**\n     * initDefaultValues for this scope\n     */\n    protected function initDefaultValues()\n    {\n        parent::initDefaultValues();\n\n        $this\n            ->order(500)\n            ->permissions([])\n            ->sideMenu([])\n            ->useDropdown(true)\n        ;\n    }\n\n    /**\n     * addPermission\n     * @param string $permission\n     * @param array $definition\n     */\n    public function addPermission(string $permission, array $definition)\n    {\n        $this->config['permissions'][$permission] = $definition;\n    }\n\n    /**\n     * addSideMenuItem\n     * @param SideMenuItem $sideMenu\n     */\n    public function addSideMenuItem(SideMenuItem $sideMenu)\n    {\n        $this->config['sideMenu'][$sideMenu->code] = $sideMenu;\n    }\n\n    /**\n     * getSideMenuItem\n     */\n    public function getSideMenuItem(string $code): ?SideMenuItem\n    {\n        return $this->config['sideMenu'][$code] ?? null;\n    }\n\n    /**\n     * removeSideMenuItem\n     * @param string $code\n     */\n    public function removeSideMenuItem(string $code)\n    {\n        unset($this->config['sideMenu'][$code]);\n    }\n\n    /**\n     * itemAttributes returns HTML attributes for the list item\n     */\n    public function itemAttributes(): string\n    {\n        if ($this->attributes === null) {\n            return '';\n        }\n\n        return Html::attributes(array_except($this->attributes, ['target']));\n    }\n\n    /**\n     * linkAttributes returns HTML for the anchor link\n     */\n    public function linkAttributes(): string\n    {\n        if (!isset($this->attributes['target'])) {\n            return '';\n        }\n\n        return Html::attributes(array_only($this->attributes, ['target']));\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/NavigationManager.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse App;\nuse Log;\nuse Event;\nuse System;\nuse BackendAuth;\nuse System\\Classes\\PluginManager;\nuse SystemException;\nuse Throwable;\n\n/**\n * NavigationManager manages the backend navigation.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass NavigationManager\n{\n    use \\Backend\\Classes\\NavigationManager\\HasNavigationContext;\n    use \\Backend\\Classes\\NavigationManager\\HasTailorNavigationContext;\n\n    const ITEM_TYPE_ADD_BUTTON = 'add-button';\n\n    /**\n     * @var MainMenuItem[]|null items contains a list of registered items.\n     */\n    protected $items;\n\n    /**\n     * @var array|null menuDisplayTree\n     */\n    protected $menuDisplayTree;\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('backend.menu');\n    }\n\n    /**\n     * registerCallback function that defines menu items.\n     * The callback function should register menu items by calling the manager's\n     * `registerMenuItems` method. The manager instance is passed to the callback\n     * function as an argument. Usage:\n     *\n     *     BackendMenu::registerCallback(function ($manager) {\n     *         $manager->registerMenuItems([...]);\n     *     });\n     *\n     * @deprecated this will be removed in a later version\n     * @param callable $callback A callable function.\n     */\n    public function registerCallback(callable $callback)\n    {\n        App::extendInstance('backend.menu', $callback);\n    }\n\n    /**\n     * init this class items\n     */\n    public function init()\n    {\n        if ($this->items === null) {\n            $this->loadItems();\n        }\n    }\n\n    /**\n     * loadItems from modules and plugins\n     */\n    protected function loadItems()\n    {\n        $this->items = [];\n\n        // Load module items\n        foreach (System::listModules() as $module) {\n            if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                $items = $provider->registerNavigation();\n                if (is_array($items)) {\n                    $this->registerMenuItems('October.'.$module, $items);\n                }\n            }\n        }\n\n        // Load plugin items, prevent system crashes\n        foreach (PluginManager::instance()->getPlugins() as $id => $plugin) {\n            try {\n                $items = $plugin->registerNavigation();\n                if (is_array($items)) {\n                    $this->registerMenuItems($id, $items);\n                }\n            }\n            catch (Throwable $ex) {\n                Log::error($ex);\n            }\n        }\n\n        // Load app items\n        if ($app = App::getProvider(\\App\\Provider::class)) {\n            $items = $app->registerNavigation();\n            if (is_array($items)) {\n                $this->registerMenuItems('October.App', $items);\n            }\n        }\n\n        /**\n         * @event backend.menu.extendItems\n         * Provides an opportunity to manipulate the backend navigation\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.menu.extendItems', function ((\\Backend\\Classes\\NavigationManager) $manager) {\n         *         $manager->addMainMenuItems(...)\n         *         $manager->addSideMenuItems(...)\n         *         $manager->removeMainMenuItem(...)\n         *     });\n         *\n         */\n        Event::fire('backend.menu.extendItems', [$this]);\n\n        // Sort menu items\n        uasort($this->items, static function ($a, $b) {\n            return (int) $a->order - (int) $b->order;\n        });\n\n        // Filter items user lacks permission for\n        $user = BackendAuth::getUser();\n        $this->items = $this->filterItemPermissions($user, $this->items);\n\n        foreach ($this->items as $item) {\n            $sideMenu = $item->sideMenu;\n            if (!$sideMenu || !count($sideMenu)) {\n                continue;\n            }\n\n            // Apply incremental default orders\n            $orderCount = 0;\n            foreach ($sideMenu as $sideMenuItem) {\n                if ($sideMenuItem->order !== -1) {\n                    continue;\n                }\n                $sideMenuItem->order = ($orderCount += 100);\n            }\n\n            // Sort side menu items\n            uasort($sideMenu, static function ($a, $b) {\n                return $a->order - $b->order;\n            });\n\n            // Filter items user lacks permission for\n            $item->sideMenu($this->filterItemPermissions($user, $sideMenu));\n        }\n    }\n\n    /**\n     * registerMenuItems for the back-end menu items.\n     * The argument is an array of the main menu items. The array keys represent the\n     * menu item codes, specific for the plugin/module. Each element in the\n     * array should be an associative array with the following keys:\n     * - label - specifies the menu label localization string key, required.\n     * - icon - an icon name from the Font Awesome icon collection, required.\n     * - url - the back-end relative URL the menu item should point to, required.\n     * - permissions - an array of permissions the back-end user should have, optional.\n     *   The item will be displayed if the user has any of the specified permissions.\n     * - order - a position of the item in the menu, optional.\n     * - counter - an optional numeric value to output near the menu icon. The value should be\n     *   a number or a callable returning a number.\n     * - counterLabel - an optional string value to describe the numeric reference in counter.\n     * - sideMenu - an array of side menu items, optional. If provided, the array items\n     *   should represent the side menu item code, and each value should be an associative\n     *   array with the following keys:\n     *      - label - specifies the menu label localization string key, required.\n     *      - icon - an icon name from the Font Awesome icon collection, required.\n     *      - url - the back-end relative URL the menu item should point to, required.\n     *      - attributes - an array of attributes and values to apply to the menu item, optional.\n     *      - permissions - an array of permissions the back-end user should have, optional.\n     *      - counter - an optional numeric value to output near the menu icon. The value should be\n     *        a number or a callable returning a number.\n     *      - counterLabel - an optional string value to describe the numeric reference in counter.\n     * @param string $owner Specifies the menu items owner plugin or module in the format Author.Plugin.\n     * @param array $definitions An array of the menu item definitions.\n     */\n    public function registerMenuItems($owner, array $definitions)\n    {\n        $this->init();\n\n        $this->addMainMenuItems($owner, $definitions);\n    }\n\n    /**\n     * addMainMenuItems dynamically adds an array of main menu items.\n     * @param string $owner\n     * @param array  $definitions\n     */\n    public function addMainMenuItems($owner, array $definitions)\n    {\n        foreach ($definitions as $code => $definition) {\n            $this->addMainMenuItem($owner, $code, $definition);\n        }\n    }\n\n    /**\n     * addMainMenuItem dynamically adds a single main menu item.\n     * @param string $owner\n     * @param string $code\n     * @param array  $definition\n     */\n    public function addMainMenuItem($owner, $code, array $definition)\n    {\n        if ($this->items === null) {\n            throw new SystemException('Unable to add navigation items before they are loaded.');\n        }\n\n        $itemKey = $this->makeItemKey($owner, $code);\n\n        if (isset($this->items[$itemKey])) {\n            $definition = array_merge(\n                $this->items[$itemKey]->toArray(),\n                $definition\n            );\n        }\n\n        $item = array_merge($definition, [\n            'code'  => $code,\n            'owner' => $owner\n        ]);\n\n        $sideMenu = array_pull($item, 'sideMenu');\n\n        $this->items[$itemKey] = $this->defineMainMenuItem($item);\n\n        if (is_array($sideMenu)) {\n            $this->addSideMenuItems($owner, $code, $sideMenu);\n        }\n    }\n\n    /**\n     * defineMainMenuItem\n     */\n    protected function defineMainMenuItem(array $config): MainMenuItem\n    {\n        return (new MainMenuItem)->useConfig($config);\n    }\n\n    /**\n     * getMainMenuItem returns a main menu item\n     */\n    public function getMainMenuItem(string $owner, string $code): ?MainMenuItem\n    {\n        $itemKey = $this->makeItemKey($owner, $code);\n\n        return $this->items[$itemKey] ?? null;\n    }\n\n    /**\n     * removeMainMenuItem removes a single main menu item\n     * @param $owner\n     * @param $code\n     */\n    public function removeMainMenuItem($owner, $code)\n    {\n        if ($this->items === null) {\n            throw new SystemException('Unable to remove navigation items before they are loaded.');\n        }\n\n        $itemKey = $this->makeItemKey($owner, $code);\n\n        unset($this->items[$itemKey]);\n    }\n\n    /**\n     * addSideMenuItems dynamically adds an array of side menu items\n     * @param string $owner\n     * @param string $code\n     * @param array  $definitions\n     */\n    public function addSideMenuItems($owner, $code, array $definitions)\n    {\n        foreach ($definitions as $sideCode => $definition) {\n            if (is_array($definition)) {\n                $this->addSideMenuItem($owner, $code, $sideCode, $definition);\n            }\n        }\n    }\n\n    /**\n     * addSideMenuItem dynamically add a single side menu item\n     * @param string $owner\n     * @param string $code\n     * @param string $sideCode\n     * @param array $definition\n     * @return bool\n     */\n    public function addSideMenuItem($owner, $code, $sideCode, array $definition)\n    {\n        if ($this->items === null) {\n            throw new SystemException('Unable to add navigation items before they are loaded.');\n        }\n\n        $itemKey = $this->makeItemKey($owner, $code);\n\n        if (!isset($this->items[$itemKey])) {\n            return false;\n        }\n\n        $mainItem = $this->items[$itemKey];\n\n        $definition = array_merge($definition, [\n            'code'  => $sideCode,\n            'owner' => $owner\n        ]);\n\n        if (isset($mainItem->sideMenu[$sideCode])) {\n            $definition = array_merge(\n                $mainItem->sideMenu[$sideCode]->toArray(),\n                $definition\n            );\n        }\n\n        $item = $this->defineSideMenuItem($definition);\n\n        $this->items[$itemKey]->addSideMenuItem($item);\n\n        return true;\n    }\n\n    /**\n     * defineSideMenuItem\n     */\n    protected function defineSideMenuItem(array $config): SideMenuItem\n    {\n        return (new SideMenuItem)->useConfig($config);\n    }\n\n    /**\n     * getSideMenuItem returns a side menu item\n     */\n    public function getSideMenuItem(string $owner, string $code, string $sideCode): ?SideMenuItem\n    {\n        return $this->getMainMenuItem($owner, $code)?->getSideMenuItem($sideCode);\n    }\n\n    /**\n     * removeSideMenuItems with multiple codes\n     * @param string $owner\n     * @param string $code\n     * @param array  $sideCodes\n     * @return void\n     */\n    public function removeSideMenuItems($owner, $code, $sideCodes)\n    {\n        foreach ($sideCodes as $sideCode) {\n            $this->removeSideMenuItem($owner, $code, $sideCode);\n        }\n    }\n\n    /**\n     * removeSideMenuItem removes a single main menu item\n     * @param string $owner\n     * @param string $code\n     * @param string $sideCode\n     * @return bool\n     */\n    public function removeSideMenuItem($owner, $code, $sideCode)\n    {\n        if ($this->items === null) {\n            throw new SystemException('Unable to remove navigation items before they are loaded.');\n        }\n\n        $itemKey = $this->makeItemKey($owner, $code);\n        if (!isset($this->items[$itemKey])) {\n            return false;\n        }\n\n        $mainItem = $this->items[$itemKey];\n        $mainItem->removeSideMenuItem($sideCode);\n        return true;\n    }\n\n    /**\n     * listMainMenuItems returns a list of the main menu items.\n     * @return array\n     */\n    public function listMainMenuItems()\n    {\n        $this->init();\n\n        foreach ($this->items as $item) {\n            if ($item->counter === false) {\n                continue;\n            }\n\n            // Counter specified\n            $item->counter = $this->getCallableCounterValue($item);\n\n            // Guess counter from sub items\n            if ($item->counter === null && ($sideItems = $this->listSideMenuItems($item->owner, $item->code))) {\n                $subCount = 0;\n                foreach ($sideItems as $sideItem) {\n                    if ($sideItem->counter !== null) {\n                        $subCount += $sideItem->counter;\n                    }\n                }\n                if ($subCount > 0) {\n                    $item->counter = $subCount;\n                }\n            }\n        }\n\n        return $this->items;\n    }\n\n    /**\n     * listSideMenuItems returns a list of side menu items for the currently active main menu item.\n     * The currently active main menu item is set with the setContext methods.\n     * @param null $owner\n     * @param null $code\n     * @return SideMenuItem[]\n     * @throws SystemException\n     */\n    public function listSideMenuItems($owner = null, $code = null)\n    {\n        $this->init();\n\n        $activeItem = null;\n\n        if ($owner !== null && $code !== null) {\n            $activeItem = $this->items[$this->makeItemKey($owner, $code)] ?? null;\n        }\n        else {\n            foreach ($this->listMainMenuItems() as $item) {\n                if ($this->isMainMenuItemActive($item)) {\n                    $activeItem = $item;\n                    break;\n                }\n            }\n        }\n\n        if (!$activeItem) {\n            return [];\n        }\n\n        $items = $activeItem->sideMenu;\n\n        // Process counters\n        foreach ($items as $item) {\n            $item->counter = $this->getCallableCounterValue($item);\n        }\n\n        return $items;\n    }\n\n    /**\n     * listMainMenuItemsWithSubitems prepares data for displaying the top menu and side\n     * (collapsable) menu. Uses caching to avoid running counter functions twice.\n     */\n    public function listMainMenuItemsWithSubitems()\n    {\n        if ($this->menuDisplayTree !== null) {\n            return $this->menuDisplayTree;\n        }\n\n        $mainMenuItems = $this->listMainMenuItems();\n        $this->menuDisplayTree = [];\n\n        foreach ($mainMenuItems as $mainMenuItem) {\n            $subMenuItems = $this->listSideMenuItems($mainMenuItem->owner, $mainMenuItem->code);\n\n            $this->menuDisplayTree[] = (object)[\n                'mainMenuItem' => $mainMenuItem,\n                'subMenuItems' => $subMenuItems,\n                'subMenuHasDropdown' => $mainMenuItem->useDropdown && count($subMenuItems)\n            ];\n        }\n\n        return $this->menuDisplayTree;\n    }\n\n    /**\n     * listMainMenuSubItems uses cached result of listMainMenuItemsWithSubitems to return\n     * submenu items and avoid duplicate counter calls.\n     */\n    public function listMainMenuSubItems()\n    {\n        $allItems = $this->listMainMenuItemsWithSubitems();\n\n        foreach ($allItems as $itemInfo) {\n            if ($this->isMainMenuItemActive($itemInfo->mainMenuItem)) {\n                return $itemInfo->subMenuItems;\n            }\n        }\n\n        return [];\n    }\n\n    /**\n     * getActiveMainMenuItem returns the currently active main menu item\n     * @return null|MainMenuItem $item Returns the item object or null.\n     * @throws SystemException\n     */\n    public function getActiveMainMenuItem()\n    {\n        foreach ($this->listMainMenuItems() as $item) {\n            if ($this->isMainMenuItemActive($item)) {\n                return $item;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * getCallableCounterValue returns the counter value for a menu item\n     */\n    protected function getCallableCounterValue($item)\n    {\n        $counterValue = $item->counter;\n\n        if (empty($counterValue)) {\n            return null;\n        }\n\n        if (is_int($counterValue)) {\n            return $counterValue;\n        }\n\n        if (\n            is_string($counterValue) &&\n            strpos($counterValue, '::') !== false &&\n            ($staticMethod = explode('::', $counterValue)) &&\n            count($staticMethod) === 2 &&\n            is_callable($staticMethod)\n        ) {\n            return $staticMethod($item);\n        }\n\n        if (is_callable($counterValue)) {\n            return $counterValue($item);\n        }\n\n        return (int) $item->counter;\n    }\n\n    /**\n     * filterItemPermissions removes menu items from an array if the supplied user lacks permission.\n     * @param \\Backend\\Models\\User $user A user object\n     * @param MainMenuItem[]|SideMenuItem[] $items A collection of menu items\n     * @return array The filtered menu items\n     */\n    protected function filterItemPermissions($user, array $items)\n    {\n        if (!$user) {\n            return $items;\n        }\n\n        $items = array_filter($items, static function ($item) use ($user) {\n            if (!$item->permissions || !count($item->permissions)) {\n                return true;\n            }\n\n            return $user->hasAnyAccess($item->permissions);\n        });\n\n        return $items;\n    }\n\n    /**\n     * makeItemKey is an internal method to make a unique key for an item.\n     * @param string $owner\n     * @param string $code\n     * @return string\n     */\n    protected function makeItemKey($owner, $code)\n    {\n        return strtoupper($owner).'.'.strtoupper($code);\n    }\n\n    /**\n     * resetCache resets any memory or cache involved with the sites\n     */\n    public function resetCache()\n    {\n        $this->items = null;\n        $this->menuDisplayTree = null;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/ReportWidgetBase.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Backend\\Classes\\DashReport;\n\n/**\n * @deprecated use Dashboard\\Classes\\ReportWidgetBase\n */\nabstract class ReportWidgetBase extends \\Dashboard\\Classes\\ReportWidgetBase\n{\n}\n"
  },
  {
    "path": "modules/backend/classes/RoleManager.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse App;\nuse Event;\nuse System;\nuse System\\Classes\\PluginManager;\nuse October\\Rain\\Exception\\SystemException;\n\n/**\n * RoleManager manages the backend roles and permissions.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RoleManager\n{\n    /**\n     * @var array|null permissions registered.\n     */\n    protected $permissions;\n\n    /**\n     * @var array|null permissionRoles is a list of registered permission roles.\n     */\n    protected $permissionRoles;\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('backend.roles');\n    }\n\n    /**\n     * registerCallback registers a callback function that defines authentication permissions.\n     * The callback function should register permissions by calling the manager's\n     * registerPermissions() function. The manager instance is passed to the\n     * callback function as an argument. Usage:\n     *\n     *     RoleManager::registerCallback(function ($manager) {\n     *         $manager->registerPermissions([...]);\n     *     });\n     *\n     * @deprecated this will be removed in a later version\n     * @param callable $callback A callable function.\n     */\n    public function registerCallback(callable $callback)\n    {\n        App::extendInstance('backend.roles', $callback);\n    }\n\n    /**\n     * init this class items\n     */\n    public function init()\n    {\n        if ($this->permissions === null) {\n            $this->loadPermissions();\n        }\n    }\n\n    /**\n     * loadItems from modules and plugins\n     */\n    protected function loadPermissions()\n    {\n        $this->permissions = [];\n\n        // Load module items\n        foreach (System::listModules() as $module) {\n            if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                $items = $provider->registerPermissions();\n                if (is_array($items)) {\n                    $this->registerPermissions('October.'.$module, $items);\n                }\n            }\n        }\n\n        // Load plugin items\n        foreach (PluginManager::instance()->getPlugins() as $id => $plugin) {\n            $items = $plugin->registerPermissions();\n            if (is_array($items)) {\n                $this->registerPermissions($id, $items);\n            }\n        }\n\n        // Load app items\n        if ($app = App::getProvider(\\App\\Provider::class)) {\n            $items = $app->registerPermissions();\n            if (is_array($items)) {\n                $this->registerPermissions('October.App', $items);\n            }\n        }\n\n        /**\n         * @event backend.roles.extendPermissions\n         * Provides an opportunity to manipulate the permissions\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.roles.extendPermissions', function ((\\Backend\\Classes\\RoleManager) $manager) {\n         *         $manager->registerPermissions(...)\n         *     });\n         *\n         */\n        Event::fire('backend.roles.extendPermissions', [$this]);\n\n        // Sort permission items\n        usort($this->permissions, function ($a, $b) {\n            if ($a->order === $b->order) {\n                return 0;\n            }\n\n            return $a->order > $b->order ? 1 : -1;\n        });\n    }\n\n    /**\n     * registerPermissions registers the back-end permission items.\n     * The argument is an array of the permissions. The array keys represent the\n     * permission codes, specific for the plugin/module. Each element in the\n     * array should be an associative array with the following keys:\n     * - label - specifies the menu label localization string key, required.\n     * - order - a position of the item in the menu, optional.\n     * - comment - a brief comment that describes the permission, optional.\n     * - tab - assign this permission to a tabbed group, optional.\n     * @param string $owner Specifies the permissions' owner plugin or module in the format Author.Plugin\n     * @param array $definitions An array of the menu item definitions.\n     */\n    public function registerPermissions($owner, array $definitions)\n    {\n        $this->init();\n\n        foreach ($definitions as $code => $definition) {\n            if ($definition && is_array($definition)) {\n                $permission = new RolePermission(array_merge($definition, [\n                    'code' => $code,\n                    'owner' => $owner\n                ]));\n\n                $this->permissions[] = $permission;\n            }\n        }\n    }\n\n    /**\n     * removePermission removes a single back-end permission. Where owner specifies the\n     * permissions' owner plugin or module in the format Author.Plugin. Where code is\n     * the permission to remove.\n     */\n    public function removePermission(string $owner, string $code)\n    {\n        if ($this->permissions === null) {\n            throw new SystemException('Unable to remove permissions before they are loaded.');\n        }\n\n        $ownerPermissions = array_filter($this->permissions, function ($permission) use ($owner) {\n            return $permission->owner === $owner;\n        });\n\n        foreach ($ownerPermissions as $key => $permission) {\n            if ($permission->code === $code) {\n                unset($this->permissions[$key]);\n            }\n        }\n    }\n\n    /**\n     * listPermissions returns a list of the registered permissions items.\n     */\n    public function listPermissions(): array\n    {\n        $this->init();\n\n        return $this->permissions;\n    }\n\n    /**\n     * listPermissionsForUser returns permissions that the user has access to.\n     */\n    public function listPermissionsForUser($user): array\n    {\n        return array_filter($this->listPermissions(), function($permission) use ($user) {\n            return $user->hasAccess($permission->code);\n        });\n    }\n\n    /**\n     * listPermissionsForRole returns an array of registered permissions belonging to a\n     * given role code.\n     * @param string $role\n     * @param bool $includeOrphans\n     */\n    public function listPermissionsForRole($role, $includeOrphans = true): array\n    {\n        if ($this->permissionRoles === null) {\n            $this->permissionRoles = [];\n\n            foreach ($this->listPermissions() as $permission) {\n                if ($permission->roles) {\n                    foreach ((array) $permission->roles as $_role) {\n                        $this->permissionRoles[$_role][$permission->code] = 1;\n                    }\n                }\n                else {\n                    $this->permissionRoles['*'][$permission->code] = 1;\n                }\n            }\n        }\n\n        $result = $this->permissionRoles[$role] ?? [];\n\n        if ($includeOrphans) {\n            $result += $this->permissionRoles['*'] ?? [];\n        }\n\n        return $result;\n    }\n\n    /**\n     * hasPermissionsForRole checks if the user has the permissions for a role.\n     */\n    public function hasPermissionsForRole($role): bool\n    {\n        return !!$this->listPermissionsForRole($role, false);\n    }\n\n    /**\n     * resetCache resets any memory or cache involved with the sites\n     */\n    public function resetCache()\n    {\n        $this->permissions = null;\n        $this->permissionRoles = null;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/RolePermission.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse October\\Rain\\Element\\ElementBase;\n\n/**\n * RolePermission\n *\n * @method RolePermission code(string $code) code\n * @method RolePermission label(string $label) label\n * @method RolePermission comment(string $comment) comment\n * @method RolePermission children(array $children) children\n * @method RolePermission roles(array $roles) roles\n * @method RolePermission order(int $order) order\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RolePermission extends ElementBase\n{\n    /**\n     * initDefaultValues override method\n     */\n    protected function initDefaultValues()\n    {\n        $this->order(500);\n    }\n\n    /**\n     * addChild\n     */\n    public function addChild($permission): static\n    {\n        $children = $this->children;\n\n        $children[$permission->code] = $permission;\n\n        $this->children($children);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/SettingsController.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse System;\nuse BackendMenu;\nuse System\\Classes\\SettingsManager;\n\n/**\n * SettingsController is used for settings pages\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SettingsController extends Controller\n{\n    /**\n     * @var string settingsItemCode determines the settings code\n     */\n    public $settingsItemCode;\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        BackendMenu::setContext('October.System', 'system', 'settings');\n\n        SettingsManager::setContext($this->findSettingsContextFromClass($this), $this->settingsItemCode);\n\n        parent::__construct();\n    }\n\n    /**\n     * findSettingsContextFromClass converts a controller class to a plugin code,\n     * if the author code is a module name, then we assume it is a module.\n     */\n    protected function findSettingsContextFromClass()\n    {\n        $classNameArray = explode('\\\\', get_class($this));\n\n        $authorCode = array_shift($classNameArray);\n        $pluginCode = array_shift($classNameArray);\n\n        if (System::hasModule($authorCode)) {\n            return 'October.'.$authorCode;\n        }\n\n        return $authorCode.'.'.$pluginCode;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/SideMenuItem.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse Html;\nuse October\\Rain\\Element\\Navigation\\ItemDefinition;\n\n/**\n * SideMenuItem\n *\n * @method SideMenuItem owner(string $owner) owner\n * @method SideMenuItem iconSvg(null|string $iconSvg) iconSvg\n * @method SideMenuItem counter(null|int|callable $counter) counter\n * @method SideMenuItem counterLabel(null|string $counterLabel) counterLabel\n * @method SideMenuItem attributes(array $attributes) attributes\n * @method SideMenuItem permissions(array $permissions) permissions\n * @method SideMenuItem itemType(string $itemType) itemType\n * @method SideMenuItem visibleOn(string|array $visibleOn) visibleOn another side menu item code\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SideMenuItem extends ItemDefinition\n{\n    /**\n     * initDefaultValues for this scope\n     */\n    protected function initDefaultValues()\n    {\n        parent::initDefaultValues();\n\n        $this\n            ->attributes([])\n            ->permissions([])\n        ;\n    }\n\n    /**\n     * addAttribute\n     * @param null|string|int $attribute\n     * @param null|string|array $value\n     */\n    public function addAttribute($attribute, $value)\n    {\n        $this->config['attributes'][$attribute] = $value;\n    }\n\n    /**\n     * removeAttribute\n     */\n    public function removeAttribute($attribute)\n    {\n        unset($this->config['attributes'][$attribute]);\n    }\n\n    /**\n     * addPermission\n     * @deprecated recommend not using this method until v4 when signature is fixed\n     * should be a non-associative array\n     */\n    public function addPermission(string $permission, array $definition)\n    {\n        $this->config['permissions'][$permission] = $definition;\n    }\n\n    /**\n     * removePermission\n     * @deprecated recommend not using this method until v4 when signature is fixed\n     * should spin over every value and remove via located key\n     * @param string $permission\n     * @return void\n     */\n    public function removePermission(string $permission)\n    {\n        unset($this->config['permissions'][$permission]);\n    }\n\n    /**\n     * itemAttributes returns HTML attributes for the list item\n     */\n    public function itemAttributes(): string\n    {\n        if ($this->attributes === null) {\n            return '';\n        }\n\n        return Html::attributes(array_except($this->attributes, ['target']));\n    }\n\n    /**\n     * linkAttributes returns HTML for the anchor link\n     */\n    public function linkAttributes(): string\n    {\n        if (!isset($this->attributes['target'])) {\n            return '';\n        }\n\n        return Html::attributes(array_only($this->attributes, ['target']));\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/Skin.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse File;\nuse Config;\nuse October\\Rain\\Router\\Helper as RouterHelper;\n\n/**\n * Skin Base class is used for defining skins.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class Skin\n{\n    /**\n     * Returns information about this skin, including name and description.\n     */\n    abstract public function skinDetails();\n\n    /**\n     * @var string skinPath is the absolute path to this skin.\n     */\n    public $skinPath;\n\n    /**\n     * @var string publicSkinPath to this skin.\n     */\n    public $publicSkinPath;\n\n    /**\n     * @var string defaultSkinPath, usually the root level of modules/backend.\n     */\n    public $defaultSkinPath;\n\n    /**\n     * @var string defaultPublicSkinPath\n     */\n    public $defaultPublicSkinPath;\n\n    /**\n     * @var Skin skinCache of the active skin.\n     */\n    private static $skinCache;\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        $this->defaultSkinPath = base_path() . '/modules/backend';\n\n        /*\n         * Guess the skin path\n         */\n        $class = get_called_class();\n        $classFolder = strtolower(class_basename($class));\n        $classFile = realpath(dirname(File::fromClass($class)));\n        $this->skinPath = $classFile\n            ? $classFile . '/' . $classFolder\n            : $this->defaultSkinPath;\n\n        $this->publicSkinPath = File::localToPublic($this->skinPath);\n        $this->defaultPublicSkinPath = File::localToPublic($this->defaultSkinPath);\n    }\n\n    /**\n     * getPath looks up a path to a skin-based file, if it doesn't exist, the default path is used.\n     * @param  string  $path\n     * @param  boolean $isPublic\n     * @return string\n     */\n    public function getPath($path = null, $isPublic = false)\n    {\n        $path = RouterHelper::normalizeUrl($path);\n        $assetFile = $this->skinPath . $path;\n\n        if (File::isFile($assetFile)) {\n            return $isPublic\n                ? $this->publicSkinPath . $path\n                : $this->skinPath . $path;\n        }\n\n        return $isPublic\n            ? $this->defaultPublicSkinPath . $path\n            : $this->defaultSkinPath . $path;\n    }\n\n    /**\n     * getLayoutPaths returns an array of paths where skin layouts can be found.\n     * @return array\n     */\n    public function getLayoutPaths()\n    {\n        return [$this->skinPath.'/layouts', $this->defaultSkinPath.'/layouts'];\n    }\n\n    /**\n     * getActive returns the active skin.\n     */\n    public static function getActive()\n    {\n        if (self::$skinCache !== null) {\n            return self::$skinCache;\n        }\n\n        $skinClass = Config::get('backend.skin', \\Backend\\Skins\\Standard::class);\n        $skinObject = new $skinClass();\n        return self::$skinCache = $skinObject;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/VueComponentBase.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse File;\nuse SystemException;\nuse October\\Rain\\Extension\\Extendable;\nuse Backend\\Classes\\Controller;\n\n/**\n * VueComponentBase class.\n *\n * Each component must include two files:\n *   vuecomponents/mycomponents\n *   - partials/_mycomponents.php\n *   - assets/js/mycomponents.js\n *\n * The optional CSS file is loaded automatically if presented:\n *   vuecomponents/mycomponents\n *   - assets/css/mycomponents.css\n *\n * Components can have subcomponents. Each subcomponent\n * must be presented with a JavaScript file and partial.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class VueComponentBase extends Extendable\n{\n    use \\System\\Traits\\ViewMaker;\n    use \\System\\Traits\\AssetMaker;\n\n    /**\n     * @var \\Backend\\Classes\\Controller controller object\n     */\n    protected $controller;\n\n    /**\n     * @var string componentName is the Vue component tag name.\n     * Must be defined in each component class.\n     */\n    protected $componentName;\n\n    /**\n     * @var array require Vue component class names for this component.\n     */\n    protected $require = [];\n\n    /**\n     * @var array subcomponents this component provides\n     */\n    private $subcomponents = [];\n\n    /**\n     * @var array esmModules are JavaScript-only ESM modules (no template)\n     */\n    private $esmModules = [];\n\n    /**\n     * __construct\n     * @param \\Backend\\Classes\\Controller $controller\n     */\n    public function __construct(Controller $controller)\n    {\n        $this->controller = $controller;\n        $this->viewPath = $this->guessViewPath('/partials');\n        $this->assetPath = $this->guessViewPath('/assets', true);\n\n        // Prepare assets used by this widget.\n        $this->loadDependencyAssets();\n        $this->loadDefaultAssets();\n        $this->loadAssets();\n        $this->registerSubcomponents();\n        $this->prepareVars();\n\n        parent::__construct();\n    }\n\n    /**\n     * render the default component partial.\n     */\n    public function render()\n    {\n        return $this->makePartial($this->getComponentBaseName());\n    }\n\n    /**\n     * renderSubcomponent\n     */\n    public function renderSubcomponent($name)\n    {\n        if (!array_key_exists($name, $this->subcomponents)) {\n            throw new SystemException(sprintf('Subcomponent not registered: %s', $name));\n        }\n\n        return $this->makePartial($name);\n    }\n\n    /**\n     * getDependencies\n     */\n    public function getDependencies()\n    {\n        return $this->require;\n    }\n\n    /**\n     * getSubcomponents\n     */\n    public function getSubcomponents()\n    {\n        return array_keys($this->subcomponents);\n    }\n\n    /**\n     * getEsmModules returns JS-only ESM modules (no templates)\n     */\n    public function getEsmModules()\n    {\n        return array_keys($this->esmModules);\n    }\n\n    /**\n     * getEsmModulePath returns the ESM module path for this component.\n     * By default, derived from the component's asset path.\n     */\n    public function getEsmModulePath(): string\n    {\n        $baseName = $this->getComponentBaseName();\n        return $this->assetPath . \"/js/{$baseName}.js\";\n    }\n\n    /**\n     * getSubcomponentEsmPath returns the ESM path for a specific subcomponent.\n     */\n    public function getSubcomponentEsmPath(string $name): string\n    {\n        return $this->assetPath . \"/js/{$name}.js\";\n    }\n\n    /**\n     * loadDefaultAssets adds the default CSS file for this component.\n     * JavaScript is loaded via ESM imports in VueMaker::outputVueComponentTemplates()\n     */\n    protected function loadDefaultAssets()\n    {\n        $baseName = $this->getComponentBaseName();\n\n        $cssPath = \"css/{$baseName}.css\";\n        if (File::exists(base_path($this->assetPath.'/'.$cssPath))) {\n            $this->addCss($cssPath);\n        }\n    }\n\n    /**\n     * prepareVars required by the component's partials\n     */\n    protected function prepareVars()\n    {\n    }\n\n    /**\n     * loadAssets adds component specific asset files. Use $this->addJs() and\n     * $this->addCss() to register new assets to include on the page.\n     * The default component script and CSS file are loaded automatically.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n    }\n\n    /**\n     * loadDependencyAssets adds dependency assets required for the component.\n     * This method is called before the component's default resources are loaded.\n     * Use $this->addJs() and $this->addCss() to register new assets to include\n     * on the page.\n     * @return void\n     */\n    protected function loadDependencyAssets()\n    {\n    }\n\n    /**\n     * getComponentBaseName\n     */\n    protected function getComponentBaseName()\n    {\n        $classNameArray = explode('\\\\', get_class($this));\n        return strtolower(end($classNameArray));\n    }\n\n    /**\n     * getComponentName returns the Vue component tag name.\n     */\n    public function getComponentName(): string\n    {\n        if (!$this->componentName) {\n            throw new SystemException(sprintf(\n                'Vue component [%s] must define a $componentName property.',\n                get_class($this)\n            ));\n        }\n\n        return $this->componentName;\n    }\n\n    /**\n     * getSubcomponentName returns the Vue component tag name for a subcomponent.\n     */\n    public function getSubcomponentName(string $subcomponent): string\n    {\n        return $this->getComponentName() . '-' . $subcomponent;\n    }\n\n    /**\n     * registerSubcomponent adds a subcomponent.\n     * @param string $name The component name.\n     * A JavaScript file and partial with the same name must exist.\n     * JavaScript is loaded via ESM imports in VueMaker::outputVueComponentTemplates()\n     */\n    protected function registerSubcomponent($name)\n    {\n        $name = strtolower($name);\n        $this->subcomponents[$name] = true;\n    }\n\n    /**\n     * registerEsmModule adds a JavaScript-only ESM module (no template).\n     * Use this for utility/helper modules that don't have Vue templates.\n     * @param string $name The module name (without .js extension).\n     */\n    protected function registerEsmModule($name)\n    {\n        $name = strtolower($name);\n        $this->esmModules[$name] = true;\n    }\n\n    /**\n     * registerSubcomponents\n     */\n    protected function registerSubcomponents()\n    {\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/WidgetBase.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse October\\Rain\\Extension\\Extendable;\nuse Larajax\\Contracts\\ViewComponentInterface;\nuse stdClass;\n\n/**\n * WidgetBase class\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class WidgetBase extends Extendable implements ViewComponentInterface\n{\n    use \\System\\Traits\\ViewMaker;\n    use \\System\\Traits\\AssetMaker;\n    use \\System\\Traits\\ConfigMaker;\n    use \\System\\Traits\\EventEmitter;\n    use \\Backend\\Traits\\ErrorMaker;\n    use \\Backend\\Traits\\WidgetMaker;\n    use \\Backend\\Traits\\SessionMaker;\n    use \\Larajax\\Traits\\ViewComponent;\n\n    /**\n     * @var string defaultAlias to identify this widget.\n     */\n    protected $defaultAlias = 'widget';\n\n    /**\n     * __construct the widget\n     * @param \\Backend\\Classes\\Controller $controller\n     * @param array $configuration Proactive configuration definition.\n     */\n    public function __construct($controller, $config = [])\n    {\n        $this->controller = $controller;\n        $this->viewPath = $this->configPath = $this->guessViewPath('/partials');\n        $this->assetPath = $this->guessViewPath('/assets', true);\n\n        // Apply configuration values to a new config object, if a parent\n        // constructor hasn't done it already.\n        if ($this->config === null) {\n            $this->config = $this->makeConfig($config);\n        }\n\n        // If no alias is set by the configuration.\n        if (!isset($this->alias)) {\n            $this->alias = $this->config->alias ?? $this->defaultAlias;\n        }\n\n        // Prepare assets used by this widget.\n        $this->loadAssets();\n\n        parent::__construct();\n\n        // Initialize the widget.\n        if (!$this->getConfig('noInit', false)) {\n            $this->init();\n        }\n    }\n\n    /**\n     * init the widget, called by the constructor and free from its parameters.\n     * @return void\n     */\n    public function init()\n    {\n    }\n\n    /**\n     * render the widget's primary contents.\n     * @return string HTML markup supplied by this widget.\n     */\n    public function render()\n    {\n    }\n\n    /**\n     * loadAssets adds widget specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n    }\n\n    /**\n     * fillFromConfig transfers config values stored inside the $config property directly\n     * on to the root object properties. If no properties are defined\n     * all config will be transferred if it finds a matching property.\n     * @param array $properties\n     * @return void\n     */\n    protected function fillFromConfig($properties = null)\n    {\n        if ($properties === null) {\n            $properties = array_keys((array) $this->config);\n        }\n\n        foreach ($properties as $property) {\n            if (property_exists($this, $property)) {\n                $this->{$property} = $this->getConfig($property, $this->{$property});\n            }\n        }\n    }\n\n    /**\n     * getId returns a unique ID for this widget. Useful in creating HTML markup.\n     * @param string $suffix An extra string to append to the ID.\n     * @return string A unique identifier.\n     */\n    public function getId($suffix = null)\n    {\n        $id = class_basename(get_called_class());\n\n        if ($this->alias !== $this->defaultAlias) {\n            $id .= '-' . $this->alias;\n        }\n\n        if ($suffix !== null) {\n            $id .= '-' . $suffix;\n        }\n\n        return HtmlHelper::nameToId($id);\n    }\n\n    /**\n     * getEventHandler returns a fully qualified event handler name for this widget.\n     * @param string $name The ajax event handler name.\n     * @return string\n     */\n    public function getEventHandler($name)\n    {\n        return $this->alias . '::' . $name;\n    }\n\n    /**\n     * getConfig is a safe accessor for configuration values\n     * @param string $name Config name, supports array names like \"field[key]\"\n     * @param mixed $default Default value if nothing is found\n     * @return string\n     */\n    public function getConfig($name = null, $default = null)\n    {\n        if (!$this->config) {\n            return $default;\n        }\n\n        return $this->getConfigValueFrom($this->config, $name, $default);\n    }\n\n    /**\n     * getController returns the controller using this widget.\n     */\n    public function getController()\n    {\n        return $this->controller;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/WidgetManager.php",
    "content": "<?php namespace Backend\\Classes;\n\nuse App;\nuse System\\Classes\\PluginManager;\n\n/**\n * WidgetManager\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass WidgetManager\n{\n    use \\Backend\\Classes\\WidgetManager\\HasFormWidgets;\n    use \\Backend\\Classes\\WidgetManager\\HasFilterWidgets;\n    use \\Backend\\Classes\\WidgetManager\\HasReportWidgets;\n\n    /**\n     * @var \\System\\Classes\\PluginManager pluginManager\n     */\n    protected $pluginManager;\n\n    /**\n     * __construct this class\n     */\n    public function __construct()\n    {\n        $this->pluginManager = PluginManager::instance();\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('backend.widgets');\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/WildcardController.php",
    "content": "<?php namespace Backend\\Classes;\n\n/**\n * WildcardController is used for controllers with a single action\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass WildcardController extends Controller\n{\n    /**\n     * run the action that is always index\n     */\n    public function run($action = null, $params = [])\n    {\n        if ($action !== 'index') {\n            $params = array_merge([$action], $params);\n        }\n\n        return parent::run('index', $params);\n    }\n\n    /**\n     * actionExists is always true for wildcards\n     */\n    public function actionExists($name, $internal = false)\n    {\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/navigationmanager/HasNavigationContext.php",
    "content": "<?php namespace Backend\\Classes\\NavigationManager;\n\n/**\n * HasNavigationContext\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasNavigationContext\n{\n    /**\n     * @var string contextOwner\n     */\n    protected $contextOwner;\n\n    /**\n     * @var string contextMainMenuItemCode\n     */\n    protected $contextMainMenuItemCode;\n\n    /**\n     * @var string contextSideMenuItemCode\n     */\n    protected $contextSideMenuItemCode;\n\n    /**\n     * @var array contextSidenavPartials\n     */\n    protected $contextSidenavPartials = [];\n\n    /**\n     * setContext sets the navigation context for the current controller. The function sets\n     * the navigation owner, main menu item code and the side menu item code (optional).\n     * The navigation owner is in the format of Author.Plugin or Module name.\n     * @param string $owner\n     * @param string $mainMenuItemCode\n     * @param string $sideMenuItemCode\n     */\n    public function setContext($owner, $mainMenuItemCode, $sideMenuItemCode = null)\n    {\n        $this->setContextOwner($owner);\n        $this->setContextMainMenu($mainMenuItemCode);\n        $this->setContextSideMenu($sideMenuItemCode);\n    }\n\n    /**\n     * setContextOwner sets the navigation context owner.\n     * The navigation owner is in the format of Author.Plugin or Module name.\n     * @param string $owner\n     */\n    public function setContextOwner($owner)\n    {\n        $this->contextOwner = $owner;\n    }\n\n    /**\n     * setContextMainMenu specifies a code of the main menu item in the current\n     * navigation context.\n     * @param string $mainMenuItemCode\n     */\n    public function setContextMainMenu($mainMenuItemCode)\n    {\n        $this->contextMainMenuItemCode = $mainMenuItemCode;\n    }\n\n    /**\n     * setContextSideMenu specifies a code of the side menu item in the current navigation context.\n     * If the code is set to TRUE, the first item will be flagged as active.\n     * @param string $sideMenuItemCode\n     */\n    public function setContextSideMenu($sideMenuItemCode)\n    {\n        $this->contextSideMenuItemCode = $sideMenuItemCode;\n    }\n\n    /**\n     * getContext returns information about the current navigation context.\n     * @return mixed Returns an object with the following fields:\n     * - mainMenuCode\n     * - sideMenuCode\n     * - owner\n     */\n    public function getContext()\n    {\n        return (object)[\n            'mainMenuCode' => $this->contextMainMenuItemCode,\n            'sideMenuCode' => $this->contextSideMenuItemCode,\n            'owner' => $this->contextOwner\n        ];\n    }\n\n    /**\n     * isMainMenuItemActive determines if a main menu item is active.\n     * Returns true if the menu item is active.\n     * @param \\Backend\\Classes\\MainMenuItem $item\n     * @return bool\n     */\n    public function isMainMenuItemActive($item)\n    {\n        return $this->contextOwner === $item->owner && $this->contextMainMenuItemCode === $item->code;\n    }\n\n    /**\n     * isDashboardItemActive determines if the dashboard is active.\n     * @return bool\n     */\n    public function isDashboardItemActive()\n    {\n        return $this->contextOwner === 'October.Dashboard' && $this->contextMainMenuItemCode === 'dashboard';\n    }\n\n    /**\n     * isSideMenuItemActive determines if a side menu item is active.\n     * @param SideMenuItem $item\n     */\n    public function isSideMenuItemActive($item): bool\n    {\n        if ($this->contextSideMenuItemCode === true) {\n            $this->contextSideMenuItemCode = null;\n            return true;\n        }\n\n        return $this->contextOwner === $item->owner && $this->contextSideMenuItemCode === $item->code;\n    }\n\n\n    /**\n     * isSideMenuItemActive determines if a side menu item is active.\n     * @param SideMenuItem $item\n     */\n    public function isSideMenuItemVisible($item): bool\n    {\n        if (!$item->visibleOn) {\n            return true;\n        }\n\n        if ($this->contextOwner === $item->owner && in_array($this->contextSideMenuItemCode, (array) $item->visibleOn)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * registerContextSidenavPartial registers a special side navigation partial for a specific\n     * main menu. The sidenav partial replaces the standard side navigation.\n     * @param string $owner Specifies the navigation owner in the format Vendor/Module.\n     * @param string $mainMenuItemCode Specifies the main menu item code.\n     * @param string $partial Specifies the partial name.\n     */\n    public function registerContextSidenavPartial($owner, $mainMenuItemCode, $partial)\n    {\n        $this->contextSidenavPartials[$owner.$mainMenuItemCode] = $partial;\n    }\n\n    /**\n     * getContextSidenavPartial returns the side navigation partial for a specific main menu\n     * previously registered with the registerContextSidenavPartial() method.\n     * @param string $owner Specifies the navigation owner in the format Vendor/Module.\n     * @param string $mainMenuItemCode Specifies the main menu item code.\n     * @return mixed Returns the partial name or null.\n     */\n    public function getContextSidenavPartial($owner, $mainMenuItemCode)\n    {\n        $key = $owner.$mainMenuItemCode;\n\n        return $this->contextSidenavPartials[$key] ?? null;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/navigationmanager/HasTailorNavigationContext.php",
    "content": "<?php namespace Backend\\Classes\\NavigationManager;\n\nuse System;\nuse Tailor\\Classes\\BlueprintIndexer;\n\n/**\n * HasTailorNavigationContext\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasTailorNavigationContext\n{\n    /**\n     * setTailorContextUuid\n     */\n    public function setTailorContextUuid(string $uuid, ?string $sideMenuItemCode = null)\n    {\n        if (!System::hasModule('Tailor')) {\n            return;\n        }\n\n        $blueprint = BlueprintIndexer::instance()->find($uuid);\n        if (!$blueprint) {\n            return;\n        }\n\n        $this->setContext(\n            'October.Tailor',\n            $blueprint->getNavigationCodeName(),\n            $sideMenuItemCode\n        );\n    }\n\n    /**\n     * setTailorContext\n     */\n    public function setTailorContext(string $handle, ?string $sideMenuItemCode = null)\n    {\n        if (!System::hasModule('Tailor')) {\n            return;\n        }\n\n        $blueprint = BlueprintIndexer::instance()->findByHandle($handle);\n        if (!$blueprint) {\n            return;\n        }\n\n        $this->setContext(\n            'October.Tailor',\n            $blueprint->getNavigationCodeName(),\n            $sideMenuItemCode\n        );\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/widgetmanager/HasFilterWidgets.php",
    "content": "<?php namespace Backend\\Classes\\WidgetManager;\n\nuse App;\nuse Str;\nuse System;\n\n/**\n * HasFilterWidgets\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasFilterWidgets\n{\n    /**\n     * @var array filterWidgets\n     */\n    protected $filterWidgets;\n\n    /**\n     * @var array filterWidgetCallbacks cache\n     */\n    protected $filterWidgetCallbacks = [];\n\n    /**\n     * @var array filterWidgetHints keyed by their code.\n     * Stored in the form of ['filterwidgetcode' => 'FilterWidgetClass'].\n     */\n    protected $filterWidgetHints;\n\n    /**\n     * listFilterWidgets returns a list of registered filter widgets.\n     * @return array Array keys are class names.\n     */\n    public function listFilterWidgets()\n    {\n        if ($this->filterWidgets === null) {\n            $this->filterWidgets = [];\n\n            // Load external widgets\n            foreach ($this->filterWidgetCallbacks as $callback) {\n                $callback($this);\n            }\n\n            // Load module items\n            foreach (System::listModules() as $module) {\n                if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                    $widgets = $provider->registerFilterWidgets();\n                    if (is_array($widgets)) {\n                        foreach ($widgets as $className => $widgetInfo) {\n                            $this->registerFilterWidget($className, $widgetInfo);\n                        }\n                    }\n                }\n            }\n\n            // Load plugin widgets\n            foreach ($this->pluginManager->getPlugins() as $plugin) {\n                $widgets = $plugin->registerFilterWidgets();\n                if (!is_array($widgets)) {\n                    continue;\n                }\n\n                foreach ($widgets as $className => $widgetInfo) {\n                    $this->registerFilterWidget($className, $widgetInfo);\n                }\n            }\n\n            // Load app widgets\n            if ($app = App::getProvider(\\App\\Provider::class)) {\n                $widgets = $app->registerFilterWidgets();\n                if (is_array($widgets)) {\n                    foreach ($widgets as $className => $widgetInfo) {\n                        $this->registerFilterWidget($className, $widgetInfo);\n                    }\n                }\n            }\n        }\n\n        return $this->filterWidgets;\n    }\n\n    /**\n     * getFilterWidgets returns the raw array of registered filter widgets.\n     * @return array Array keys are class names.\n     */\n    public function getFilterWidgets()\n    {\n        return $this->filterWidgets;\n    }\n\n    /*\n     * registerFilterWidget registers a single filter widget.\n     */\n    public function registerFilterWidget($className, $widgetInfo)\n    {\n        if (!is_array($widgetInfo)) {\n            $widgetInfo = ['code' => $widgetInfo];\n        }\n\n        $widgetCode = $widgetInfo['code'] ?? null;\n\n        if (!$widgetCode) {\n            $widgetCode = Str::getClassId($className);\n        }\n\n        $this->filterWidgets[$className] = $widgetInfo;\n        $this->filterWidgetHints[$widgetCode] = $className;\n    }\n\n    /**\n     * registerFilterWidgets manually registers filter widget for consideration. Usage:\n     *\n     *     WidgetManager::registerFilterWidgets(function ($manager) {\n     *         $manager->registerFilterWidget(\\Backend\\FilterWidgets\\DateRange::class, 'daterange');\n     *     });\n     *\n     */\n    public function registerFilterWidgets(callable $definitions)\n    {\n        $this->filterWidgetCallbacks[] = $definitions;\n    }\n\n    /**\n     * resolveFilterWidget returns a class name from a filter widget code\n     * Normalizes a class name or converts an code to its class name.\n     * Returns the class name resolved, or the original name.\n     * @param string $name\n     * @return string\n     */\n    public function resolveFilterWidget($name)\n    {\n        if ($this->filterWidgets === null) {\n            $this->listFilterWidgets();\n        }\n\n        $hints = $this->filterWidgetHints;\n\n        if (isset($hints[$name])) {\n            return $hints[$name];\n        }\n\n        $_name = Str::normalizeClassName($name);\n        if (isset($this->filterWidgets[$_name])) {\n            return $_name;\n        }\n\n        return $name;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/widgetmanager/HasFormWidgets.php",
    "content": "<?php namespace Backend\\Classes\\WidgetManager;\n\nuse App;\nuse Str;\nuse System;\n\n/**\n * HasFormWidgets\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasFormWidgets\n{\n    /**\n     * @var array formWidgets stored in the form of ['FormWidgetClass' => $formWidgetInfo]\n     */\n    protected $formWidgets;\n\n    /**\n     * @var array formWidgetCallbacks cache\n     */\n    protected $formWidgetCallbacks = [];\n\n    /**\n     * @var array formWidgetHints keyed by their code.\n     * Stored in the form of ['formwidgetcode' => 'FormWidgetClass'].\n     */\n    protected $formWidgetHints;\n\n    /**\n     * listFormWidgets returns a list of registered form widgets.\n     * @return array Array keys are class names.\n     */\n    public function listFormWidgets()\n    {\n        if ($this->formWidgets === null) {\n            $this->formWidgets = [];\n\n            // Load external widgets\n            foreach ($this->formWidgetCallbacks as $callback) {\n                $callback($this);\n            }\n\n            // Load module items\n            foreach (System::listModules() as $module) {\n                if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                    $widgets = $provider->registerFormWidgets();\n                    if (is_array($widgets)) {\n                        foreach ($widgets as $className => $widgetInfo) {\n                            $this->registerFormWidget($className, $widgetInfo);\n                        }\n                    }\n                }\n            }\n\n            // Load plugin widgets\n            foreach ($this->pluginManager->getPlugins() as $plugin) {\n                $widgets = $plugin->registerFormWidgets();\n                if (!is_array($widgets)) {\n                    continue;\n                }\n\n                foreach ($widgets as $className => $widgetInfo) {\n                    $this->registerFormWidget($className, $widgetInfo);\n                }\n            }\n\n            // Load app widgets\n            if ($app = App::getProvider(\\App\\Provider::class)) {\n                $widgets = $app->registerFormWidgets();\n                if (is_array($widgets)) {\n                    foreach ($widgets as $className => $widgetInfo) {\n                        $this->registerFormWidget($className, $widgetInfo);\n                    }\n                }\n            }\n        }\n\n        return $this->formWidgets;\n    }\n\n    /**\n     * registerFormWidget registers a single form widget.\n     * @param string $className Widget class name.\n     * @param array $widgetInfo Registration information, can contain a `code` key.\n     * @return void\n     */\n    public function registerFormWidget($className, $widgetInfo = null)\n    {\n        if (!is_array($widgetInfo)) {\n            $widgetInfo = ['code' => $widgetInfo];\n        }\n\n        $widgetCode = $widgetInfo['code'] ?? null;\n\n        if (!$widgetCode) {\n            $widgetCode = Str::getClassId($className);\n        }\n\n        $this->formWidgets[$className] = $widgetInfo;\n        $this->formWidgetHints[$widgetCode] = $className;\n    }\n\n    /**\n     * registerFormWidgets manually registers form widget for consideration. Usage:\n     *\n     *     WidgetManager::registerFormWidgets(function ($manager) {\n     *         $manager->registerFormWidget(\\Backend\\FormWidgets\\CodeEditor::class, 'codeeditor');\n     *     });\n     *\n     */\n    public function registerFormWidgets(callable $definitions)\n    {\n        $this->formWidgetCallbacks[] = $definitions;\n    }\n\n    /**\n     * resolveFormWidget returns a class name from a form widget code\n     * Normalizes a class name or converts an code to its class name.\n     * Returns the class name resolved, or the original name.\n     * @param string $name\n     * @return string\n     */\n    public function resolveFormWidget($name)\n    {\n        if ($this->formWidgets === null) {\n            $this->listFormWidgets();\n        }\n\n        $hints = $this->formWidgetHints;\n\n        if (isset($hints[$name])) {\n            return $hints[$name];\n        }\n\n        $_name = Str::normalizeClassName($name);\n        if (isset($this->formWidgets[$_name])) {\n            return $_name;\n        }\n\n        return $name;\n    }\n}\n"
  },
  {
    "path": "modules/backend/classes/widgetmanager/HasReportWidgets.php",
    "content": "<?php namespace Backend\\Classes\\WidgetManager;\n\nuse App;\nuse Str;\nuse Event;\nuse System;\nuse BackendAuth;\nuse SystemException;\n\n/**\n * HasReportWidgets\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasReportWidgets\n{\n    /**\n     * @var array reportWidgets\n     */\n    protected $reportWidgets;\n\n    /**\n     * @var array reportWidgetCallbacks cache\n     */\n    protected $reportWidgetCallbacks = [];\n\n    /**\n     * @var array reportWidgetHints keyed by their code.\n     * Stored in the report of ['reportwidgetcode' => 'FormWidgetClass'].\n     */\n    protected $reportWidgetHints;\n\n    /**\n     * listReportWidgets returns a list of registered report widgets.\n     * @return array Array keys are class names.\n     */\n    public function listReportWidgets()\n    {\n        if ($this->reportWidgets === null) {\n            $this->reportWidgets = [];\n\n            // Load external widgets\n            foreach ($this->reportWidgetCallbacks as $callback) {\n                $callback($this);\n            }\n\n            // Load module items\n            foreach (System::listModules() as $module) {\n                if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                    $widgets = $provider->registerReportWidgets();\n                    if (is_array($widgets)) {\n                        foreach ($widgets as $className => $widgetInfo) {\n                            $this->registerReportWidget($className, $widgetInfo);\n                        }\n                    }\n                }\n            }\n\n            // Load plugin widgets\n            foreach ($this->pluginManager->getPlugins() as $plugin) {\n                $widgets = $plugin->registerReportWidgets();\n                if (!is_array($widgets)) {\n                    continue;\n                }\n\n                foreach ($widgets as $className => $widgetInfo) {\n                    $this->registerReportWidget($className, $widgetInfo);\n                }\n            }\n\n            // Load app widgets\n            if ($app = App::getProvider(\\App\\Provider::class)) {\n                $widgets = $app->registerReportWidgets();\n                if (is_array($widgets)) {\n                    foreach ($widgets as $className => $widgetInfo) {\n                        $this->registerReportWidget($className, $widgetInfo);\n                    }\n                }\n            }\n        }\n\n        /**\n         * @event system.reportwidgets.extendItems\n         * Enables adding or removing report widgets.\n         *\n         * You will have access to the WidgetManager instance and be able to call the appropriate methods\n         * $manager->registerReportWidget();\n         * $manager->removeReportWidget();\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.reportwidgets.extendItems', function ($manager) {\n         *          $manager->removeReportWidget('Acme\\ReportWidgets\\YourWidget');\n         *     });\n         *\n         */\n        Event::fire('system.reportwidgets.extendItems', [$this]);\n\n        $user = BackendAuth::getUser();\n        foreach ($this->reportWidgets as $widget => $config) {\n            if (!empty($config['permissions'])) {\n                if (!$user->hasAccess($config['permissions'], false)) {\n                    unset($this->reportWidgets[$widget]);\n                }\n            }\n        }\n\n        return $this->reportWidgets;\n    }\n\n    /**\n     * getReportWidgets returns the raw array of registered report widgets.\n     * @return array Array keys are class names.\n     */\n    public function getReportWidgets()\n    {\n        return $this->reportWidgets;\n    }\n\n    /*\n     * registerReportWidget registers a single report widget.\n     */\n    public function registerReportWidget($className, $widgetInfo)\n    {\n        if (!is_array($widgetInfo)) {\n            $widgetInfo = ['code' => $widgetInfo];\n        }\n\n        $widgetCode = $widgetInfo['code'] ?? null;\n\n        if (!$widgetCode) {\n            $widgetCode = Str::getClassId($className);\n        }\n\n        $this->reportWidgets[$className] = $widgetInfo;\n        $this->reportWidgetHints[$widgetCode] = $className;\n    }\n\n    /**\n     * registerReportWidgets manually registers report widget for consideration. Usage:\n     *\n     *     WidgetManager::registerReportWidgets(function ($manager) {\n     *         $manager->registerReportWidget(\\RainLab\\GoogleAnalytics\\ReportWidgets\\TrafficOverview::class, [\n     *             'name' => 'Google Analytics traffic overview',\n     *             'context' => 'dashboard'\n     *         ]);\n     *     });\n     *\n     */\n    public function registerReportWidgets(callable $definitions)\n    {\n        $this->reportWidgetCallbacks[] = $definitions;\n    }\n\n    /**\n     * resolveReportWidget returns a class name from a report widget code\n     * Normalizes a class name or converts an code to its class name.\n     * Returns the class name resolved, or the original name.\n     * @param string $name\n     * @return string\n     */\n    public function resolveReportWidget($name)\n    {\n        if ($this->reportWidgets === null) {\n            $this->listReportWidgets();\n        }\n\n        $hints = $this->reportWidgetHints;\n\n        if (isset($hints[$name])) {\n            return $hints[$name];\n        }\n\n        $_name = Str::normalizeClassName($name);\n        if (isset($this->reportWidgets[$_name])) {\n            return $_name;\n        }\n\n        return $name;\n    }\n\n    /**\n     * removeReportWidget removes a registered ReportWidget.\n     * @param string $className Widget class name.\n     * @return void\n     */\n    public function removeReportWidget($className)\n    {\n        if (!$this->reportWidgets) {\n            throw new SystemException('Unable to remove a widget before widgets are loaded.');\n        }\n\n        unset($this->reportWidgets[$className]);\n    }\n}\n"
  },
  {
    "path": "modules/backend/composer.json",
    "content": "{\n    \"name\": \"october/backend\",\n    \"type\": \"october-module\",\n    \"description\": \"Backend module for October CMS\",\n    \"homepage\": \"https://octobercms.com\",\n    \"keywords\": [\"october cms\", \"october\", \"backend\"],\n    \"authors\": [\n        {\n            \"name\": \"Alexey Bobkov\",\n            \"email\": \"aleksey.bobkov@gmail.com\"\n        },\n        {\n            \"name\": \"Samuel Georges\",\n            \"email\": \"daftspunky@gmail.com\"\n        }\n    ]\n}\n"
  },
  {
    "path": "modules/backend/controllers/AccessLogs.php",
    "content": "<?php namespace Backend\\Controllers;\n\nuse Backend;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\SettingsManager;\n\n/**\n * Access Logs controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass AccessLogs extends Controller\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\ListController::class\n    ];\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array Permissions required to view this page.\n     */\n    public $requiredPermissions = ['utilities.logs'];\n\n    /**\n     * Constructor.\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.Backend', 'access_logs');\n    }\n\n    public function index_onRefresh()\n    {\n        return $this->listRefresh();\n    }\n}\n"
  },
  {
    "path": "modules/backend/controllers/Auth.php",
    "content": "<?php namespace Backend\\Controllers;\n\nuse App;\nuse Log;\nuse Mail;\nuse Flash;\nuse System;\nuse Config;\nuse Backend;\nuse Request;\nuse Validator;\nuse BackendAuth;\nuse Backend\\Models\\AccessLog;\nuse Backend\\Classes\\Controller;\nuse Backend\\Models\\User as UserModel;\nuse System\\Classes\\UpdateManager;\nuse ApplicationException;\nuse ValidationException;\nuse NotFoundException;\nuse Exception;\n\n/**\n * Auth is the backend authentication controller\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass Auth extends Controller\n{\n    /**\n     * @var array publicActions defines controller actions visible to unauthenticated users\n     */\n    protected $publicActions = [\n        'index',\n        'signin',\n        'signout',\n        'restore',\n        'reset',\n        'migrate',\n        'setup'\n    ];\n\n    /**\n     * @var array vueComponents classes to implement\n     */\n    public $vueComponents = [];\n\n    /**\n     * __construct is the constructor\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        $this->layout = 'auth';\n    }\n\n    /**\n     * index is the default route, redirects to signin or migrate\n     */\n    public function index()\n    {\n        if ($this->checkAdminAccounts()) {\n            return Backend::redirect('backend/auth/migrate');\n        }\n        else {\n            return Backend::redirect('backend/auth/signin');\n        }\n    }\n\n    /**\n     * signin displays the log in page\n     */\n    public function signin()\n    {\n        $this->bodyClass = 'signin';\n\n        // Clear Cache and any previous data to fix invalid security token issue\n        $this->setResponseHeader('Cache-Control', 'no-cache, no-store, must-revalidate');\n\n        try {\n            if ($this->checkPostbackFlag()) {\n                return $this->handleSubmitSignin();\n            }\n        }\n        catch (Exception $ex) {\n            Flash::error($ex->getMessage());\n        }\n    }\n\n    /**\n     * handleSubmitSignin handles the submission of the sign in form\n     */\n    protected function handleSubmitSignin()\n    {\n        $rules = [\n            'login' => 'required|between:2,255',\n            'password' => 'required|between:4,255'\n        ];\n\n        $validation = Validator::make(post(), $rules, [], [\n            'login' => __('Username'),\n            'password' => __('Password'),\n        ]);\n\n        if ($validation->fails()) {\n            throw new ValidationException($validation);\n        }\n\n        // Determine remember policy\n        $remember = Config::get('backend.force_remember');\n\n        if ($remember === null) {\n            $remember = post('remember');\n        }\n\n        // Authenticate user\n        $user = BackendAuth::authenticate([\n            'login' => post('login'),\n            'password' => post('password')\n        ], (bool) $remember);\n\n        // Log the sign in event\n        AccessLog::add($user);\n\n        // Redirect to the intended page after successful sign in\n        return Backend::redirectIntended('backend');\n    }\n\n    /**\n     * signout logs out a backend user\n     */\n    public function signout()\n    {\n        BackendAuth::logout();\n\n        // Add HTTP Header 'Clear Site Data' to purge all sensitive data upon signout\n        if (Request::secure()) {\n            $this->setResponseHeader(\n                'Clear-Site-Data',\n                'cache, cookies, storage, executionContexts'\n            );\n        }\n\n        return Backend::redirect('backend');\n    }\n\n    /**\n     * restore displays a page to request a password reset verification code\n     */\n    public function restore()\n    {\n        if (!$this->checkCanReset()) {\n            throw new NotFoundException;\n        }\n\n        try {\n            if ($this->checkPostbackFlag()) {\n                return $this->handleSubmitRestore();\n            }\n        }\n        catch (Exception $ex) {\n            Flash::error($ex->getMessage());\n        }\n    }\n\n    /**\n     * handleSubmitRestore submits the restore form\n     */\n    protected function handleSubmitRestore()\n    {\n        $rules = [\n            'login' => 'required|between:2,255'\n        ];\n\n        $validation = Validator::make(post(), $rules, [], ['login' => __('Username')]);\n\n        if ($validation->fails()) {\n            throw new ValidationException($validation);\n        }\n\n        $user = BackendAuth::findUserByLogin(post('login'));\n\n        if (!$user) {\n            // For security reasons, only show detailed error when debug mode is on\n            if (System::checkDebugMode()) {\n                throw new ValidationException([\n                    'login' => __(\"A user could not be found with a login value of ':login'\", ['login' => post('login')])\n                ]);\n            }\n        }\n        else {\n            // User found, send reset email\n            $code = $user->getResetPasswordCode();\n            $link = Backend::url('backend/auth/reset/' . $user->id . '/' . $code);\n\n            $data = [\n                'name' => $user->full_name,\n                'link' => $link,\n            ];\n\n            Mail::send('backend:restore', $data, function ($message) use ($user) {\n                $message->to($user->email, $user->full_name)->subject(__('Password Reset'));\n            });\n        }\n\n        Flash::success(__('If your account was found, a message has been sent to your email address with instructions.'));\n        return Backend::redirect('backend/auth/signin');\n    }\n\n    /**\n     * reset backend user password using verification code\n     */\n    public function reset($userId = null, $code = null)\n    {\n        if (!$this->checkCanReset()) {\n            throw new NotFoundException;\n        }\n\n        try {\n            if ($this->checkPostbackFlag()) {\n                return $this->handleSubmitReset();\n            }\n\n            if (!$userId || !$code) {\n                throw new ApplicationException(__('Invalid password reset data supplied. Please try again!'));\n            }\n        }\n        catch (Exception $ex) {\n            Flash::error($ex->getMessage());\n        }\n\n        $this->vars['code'] = $code;\n        $this->vars['id'] = $userId;\n    }\n\n    /**\n     * handleSubmitReset submits the reset form\n     */\n    protected function handleSubmitReset()\n    {\n        if (!post('id') || !post('code')) {\n            throw new ApplicationException(__('Invalid password reset data supplied. Please try again!'));\n        }\n\n        $rules = [\n            'password' => 'required|between:4,255'\n        ];\n\n        $validation = Validator::make(post(), $rules, [], [\n            'password' => __('Password'),\n        ]);\n\n        if ($validation->fails()) {\n            throw new ValidationException($validation);\n        }\n\n        $code = post('code');\n        $user = BackendAuth::findUserById(post('id'));\n\n        if (!$user || !$user->checkResetPasswordCode($code)) {\n            throw new ApplicationException(__('Invalid password reset data supplied. Please try again!'));\n        }\n\n        // Validate password against policy\n        $user->validatePasswordPolicy(post('password'));\n\n        if (!$user->attemptResetPassword($code, post('password'))) {\n            throw new ApplicationException(__('Unable to reset your password!'));\n        }\n\n        // Clear the code used to reset the password\n        $user->clearResetPassword();\n\n        // Clear throttles\n        BackendAuth::clearThrottleForUserId($user->id);\n\n        Flash::success(__('Password has been reset. You may now sign in.'));\n\n        return Backend::redirect('backend/auth/signin');\n    }\n\n    /**\n     * setup will allow a user to create the first admin account\n     */\n    public function setup()\n    {\n        $this->bodyClass = 'setup';\n\n        if (!$this->checkAdminAccounts()) {\n            return Backend::redirect('backend/auth/signin');\n        }\n\n        try {\n            if ($this->checkPostbackFlag()) {\n                return $this->handleSubmitSetup();\n            }\n        }\n        catch (Exception $ex) {\n            Flash::error($ex->getMessage());\n        }\n    }\n\n    /**\n     * handleSubmitSetup creates a new admin\n     */\n    protected function handleSubmitSetup()\n    {\n        if (!$this->checkAdminAccounts()) {\n            return Backend::redirect('backend/auth/signin');\n        }\n\n        // Validate user input\n        $rules = [\n            'first_name' => 'required',\n            'last_name' => 'required',\n            'email' => 'required|between:6,255|email|unique:backend_users',\n            'login' => 'required|between:2,255|unique:backend_users',\n            'password' => 'required:create|between:4,255|confirmed',\n            'password_confirmation' => 'required_with:password|between:4,255'\n        ];\n\n        $validation = Validator::make(post(), $rules, [], [\n            'first_name' => __('First name'),\n            'last_name' => __('Last name'),\n            'email' => __('Email'),\n            'login' => __('Username'),\n            'password' => __('Password'),\n            'password_confirmation' => __('Confirm Password'),\n        ]);\n\n        if ($validation->fails()) {\n            throw new ValidationException($validation);\n        }\n\n        // Validate password against policy\n        (new UserModel)->validatePasswordPolicy(post('password'));\n\n        // Create user and sign in\n        $user = UserModel::createDefaultAdmin(post());\n        BackendAuth::login($user);\n\n        // Redirect\n        Flash::success(__('Welcome to your Administration Area, :name', ['name' => e(post('first_name'))]));\n        return Backend::redirectIntended('backend');\n    }\n\n    /**\n     * migrate shows a progress bar while the database migrates\n     */\n    public function migrate()\n    {\n        $this->bodyClass = 'setup';\n\n        if (!$this->checkAdminAccounts()) {\n            return Backend::redirect('backend/auth/signin');\n        }\n    }\n\n    /**\n     * migrate_onMigrate migrates the database\n     */\n    public function migrate_onMigrate()\n    {\n        if (!$this->checkAdminAccounts()) {\n            return Backend::redirect('backend/auth/signin');\n        }\n\n        try {\n            UpdateManager::instance()->update();\n        }\n        catch (Exception $ex) {\n            Log::error($ex);\n            Flash::error($ex->getMessage());\n        }\n\n        return Backend::redirect('backend/auth/setup');\n    }\n\n    /**\n     * checkPostbackFlag checks to see if the form has been submitted\n     */\n    protected function checkPostbackFlag(): bool\n    {\n        return Request::method() === 'POST' && post('postback');\n    }\n\n    /**\n     * checkAdminAccounts will determine if this is a new installation\n     */\n    protected function checkAdminAccounts(): bool\n    {\n        // Debug mode must be turned on\n        if (!System::checkDebugMode()) {\n            return false;\n        }\n\n        // There must be no admin accounts, with database migrated\n        if (System::hasDatabase() && UserModel::count() > 0) {\n            return false;\n        }\n\n        // Ensures database hasn't fallen over\n        if (!App::hasDatabase()) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * checkCanReset password via self service\n     */\n    protected function checkCanReset(): bool\n    {\n        return (bool) Config::get('backend.password_policy.allow_reset', true);\n    }\n}\n"
  },
  {
    "path": "modules/backend/controllers/AuthGates.php",
    "content": "<?php namespace Backend\\Controllers;\n\nuse Flash;\nuse Backend;\nuse Request;\nuse Validator;\nuse BackendAuth;\nuse Backend\\Classes\\Controller;\nuse ApplicationException;\nuse ValidationException;\n\n/**\n * AuthGates is authentication services for the logged in users, isolated from the Auth controller\n * for security reasons, which has public actions, but also gated from all other protected actions.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass AuthGates extends Controller\n{\n    /**\n     * @var array vueComponents classes to implement\n     */\n    public $vueComponents = [];\n\n    /**\n     * __construct is the constructor\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        $this->layout = 'auth';\n    }\n\n    /**\n     * expired shows a password reset screen when the password has expired\n     */\n    public function expired()\n    {\n    }\n\n    /**\n     * expired_onSubmit submits the expired password form\n     */\n    protected function expired_onSubmit()\n    {\n        $rules = [\n            'current_password' => 'required|between:4,255',\n            'password' => 'required|between:4,255|confirmed|different:current_password',\n            'password_confirmation' => 'required_with:password|between:4,255'\n        ];\n\n        $validation = Validator::make(post(), $rules, [], [\n            'current_password' => __(\"Current Password\"),\n            'password' => __(\"New Password\"),\n            'password_confirmation' => __(\"Confirm Password\"),\n        ]);\n\n        if ($validation->fails()) {\n            throw new ValidationException($validation);\n        }\n\n        $user = $this->user;\n\n        if (!$user || !$user->checkPassword(post('current_password'))) {\n            throw new ApplicationException(__(\"Current password does not match. Please try again!\"));\n        }\n\n        // Validate password against policy\n        $user->validatePasswordPolicy(post('password'));\n\n        // Reset the user password and clear any code used to reset the password\n        $user->password = post('password');\n        $user->password_changed_at = $user->freshTimestamp();\n        $user->is_password_expired = false;\n        $user->reset_password_code = null;\n        $user->forceSave();\n\n        // Clear throttles\n        BackendAuth::clearThrottleForUserId($user->id);\n\n        Flash::success(__(\"Password has been reset. You may now sign in.\"));\n\n        return Backend::redirect('backend/auth/signin');\n    }\n}\n"
  },
  {
    "path": "modules/backend/controllers/Files.php",
    "content": "<?php namespace Backend\\Controllers;\n\nuse View;\nuse Event;\nuse Cache;\nuse Config;\nuse Backend;\nuse Response;\nuse System\\Models\\File as FileModel;\nuse Backend\\Classes\\Controller;\nuse ApplicationException;\nuse ForbiddenException;\nuse Exception;\n\n/**\n * Files controller used for delivering protected system files, and generating URLs\n * for accessing them.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Files extends Controller\n{\n    /**\n     * get will output a file, or fall back on the 404 page\n     */\n    public function get($code = null)\n    {\n        try {\n            return $this->findFileObject($code)->output();\n        }\n        catch (ForbiddenException $ex) {\n            throw $ex;\n        }\n        catch (Exception $ex) {\n        }\n\n        return Response::make(View::make('backend::404'), 404);\n    }\n\n    /**\n     * thumb will output a thumbnail, or fall back on the 404 page\n     */\n    public function thumb($code = null, $width = 100, $height = 100, $mode = 'auto', $extension = 'auto')\n    {\n        try {\n            return $this->findFileObject($code)->outputThumb(\n                $width,\n                $height,\n                compact('mode', 'extension')\n            );\n        }\n        catch (ForbiddenException $ex) {\n            throw $ex;\n        }\n        catch (Exception $ex) {\n        }\n\n        return Response::make(View::make('backend::404'), 404);\n    }\n\n    /**\n     * getTemporaryUrl attempts to return a redirect to a temporary URL to the asset instead\n     * of streaming the asset - if supported\n     *\n     * @param System|Models\\File $file\n     * @param string|null $path Optional, defaults to the getDiskPath() of the file\n     * @return string|null\n     */\n    protected static function getTemporaryUrl($file, $path = null)\n    {\n        // Get the disk and adapter used\n        $url = null;\n        $disk = $file->getDisk();\n        $adapter = $disk->getAdapter();\n\n        if (class_exists('\\League\\Flysystem\\Cached\\CachedAdapter') && $adapter instanceof \\League\\Flysystem\\Cached\\CachedAdapter) {\n            $adapter = $adapter->getAdapter();\n        }\n\n        if (\n            (class_exists('\\League\\Flysystem\\AwsS3v3\\AwsS3V3Adapter') && $adapter instanceof \\League\\Flysystem\\AwsS3v3\\AwsS3V3Adapter) ||\n            (class_exists('\\League\\Flysystem\\Rackspace\\RackspaceAdapter') && $adapter instanceof \\League\\Flysystem\\Rackspace\\RackspaceAdapter) ||\n            method_exists($adapter, 'getTemporaryUrl')\n        ) {\n            if (empty($path)) {\n                $path = $file->getDiskPath();\n            }\n\n            // Check to see if the URL has already been generated\n            $pathKey = 'backend.file:' . $path;\n            $url = Cache::get($pathKey);\n\n            // The AWS S3 storage drivers will return a valid temporary URL\n            // even if the file does not exist\n            if (!$url && $disk->exists($path)) {\n                $expires = now()->addSeconds(Config::get('filesystems.disks.uploads.ttl', 3600));\n                $url = Cache::remember($pathKey, $expires, function () use ($disk, $path, $expires) {\n                    return $disk->temporaryUrl($path, $expires);\n                });\n            }\n        }\n\n        return $url;\n    }\n\n    /**\n     * getDownloadUrl returns the URL for downloading a system file.\n     * @param $file System\\Models\\File\n     * @return string\n     */\n    public static function getDownloadUrl($file)\n    {\n        if ($url = static::getTemporaryUrl($file)) {\n            return $url;\n        }\n\n        return Backend::url('backend/files/get/' . self::getUniqueCode($file));\n    }\n\n    /**\n     * Returns the URL for downloading a system file.\n     * @param $file System\\Models\\File\n     * @param $width int\n     * @param $height int\n     * @param $options array\n     * @return string\n     */\n    public static function getThumbUrl($file, $width, $height, $options)\n    {\n        if ($url = static::getTemporaryUrl($file, $file->getDiskPath($file->getThumbFilename($width, $height, $options)))) {\n            return $url;\n        }\n\n        return Backend::url('backend/files/thumb/' . self::getUniqueCode($file)) . '/' . $width . '/' . $height . '/' . $options['mode'] . '/' . $options['extension'];\n    }\n\n    /**\n     * Returns a unique code used for masking the file identifier.\n     * @param $file System\\Models\\File\n     * @return string\n     */\n    public static function getUniqueCode($file)\n    {\n        if (!$file) {\n            return null;\n        }\n\n        $hash = md5($file->file_name . '!' . $file->disk_name);\n        return base64_encode($file->id . '!' . $hash);\n    }\n\n    /**\n     * findFileObject locates a file model based on the unique code.\n     * @param $code string\n     * @return System\\Models\\File\n     */\n    protected function findFileObject($code)\n    {\n        if (!$code) {\n            throw new ApplicationException('Missing code');\n        }\n\n        $parts = explode('!', base64_decode($code));\n        if (count($parts) < 2) {\n            throw new ApplicationException('Invalid code');\n        }\n\n        [$id, $hash] = $parts;\n\n        if (!$file = FileModel::find((int) $id)) {\n            throw new ApplicationException('File not found');\n        }\n\n        // Ensure that the file model utilized for this request is\n        // the one specified in the relationship configuration\n        if ($file->attachment) {\n            $fileModel = $file->attachment->{$file->field}()->getRelated();\n\n            // Only attempt to get file model through its assigned class\n            // when the assigned class differs from the default one that\n            // the file has already been loaded from\n            if (get_class($file) !== get_class($fileModel)) {\n                $file = $fileModel->find($file->id);\n            }\n        }\n\n        $verifyCode = self::getUniqueCode($file);\n        if ($code != $verifyCode) {\n            throw new ApplicationException('Invalid hash');\n        }\n\n        /**\n         * @event backend.files.get\n         * Fires before a file is output.\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.files.get', function ((\\System\\Models\\File) $file) {\n         *         // Block access to this file\n         *         return false;\n         *\n         *         // Or signal access denied\n         *         throw new \\ForbiddenException;\n         *     });\n         *\n         */\n        $response = Event::fire('backend.files.get', [$file], true);\n        if ($response === false) {\n            throw new ApplicationException('File access halted');\n        }\n\n        return $file;\n    }\n}\n"
  },
  {
    "path": "modules/backend/controllers/Index.php",
    "content": "<?php namespace Backend\\Controllers;\n\nuse View;\nuse Response;\nuse Redirect;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\n\n/**\n * Index controller for the dashboard\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Index extends Controller\n{\n    /**\n     * index controller action\n     */\n    public function index()\n    {\n        if ($first = array_first(BackendMenu::listMainMenuItems())) {\n            return Redirect::intended($first->url);\n        }\n\n        return Response::make(View::make('backend::404'), 404);\n    }\n}\n"
  },
  {
    "path": "modules/backend/controllers/Preferences.php",
    "content": "<?php namespace Backend\\Controllers;\n\nuse Lang;\nuse Flash;\nuse Backend;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\SettingsManager;\nuse Backend\\Models\\Preference as PreferenceModel;\n\n/**\n * Preferences controller\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass Preferences extends Controller\n{\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class\n    ];\n\n    /**\n     * @var array formConfig `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    public $requiredPermissions = ['preferences'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        $this->addCss('/modules/backend/formwidgets/codeeditor/assets/css/codeeditor.css');\n        $this->addJs('/modules/backend/formwidgets/codeeditor/assets/js/build-min.js');\n        $this->addJs('/modules/backend/assets/js/preferences/preferences.js');\n\n        BackendMenu::setContext('October.System', 'system', 'mysettings');\n        SettingsManager::setContext('October.Backend', 'preferences');\n    }\n\n    /**\n     * index\n     */\n    public function index()\n    {\n        $this->pageTitle = \"Backend Preferences\";\n        $this->asExtension('FormController')->update();\n    }\n\n    /**\n     * formExtendFields removes the code editor tab if there is no permission.\n     */\n    public function formExtendFields($form)\n    {\n        if (!$this->user->hasAccess('preferences.code_editor')) {\n            $form->removeTab('Code Editor');\n        }\n    }\n\n    /**\n     * index_onSave\n     */\n    public function index_onSave()\n    {\n        return $this->asExtension('FormController')->update_onSave();\n    }\n\n    /**\n     * index_onResetDefault\n     */\n    public function index_onResetDefault()\n    {\n        $model = $this->formFindModelObject();\n        $model->resetDefault();\n\n        Flash::success(Lang::get('backend::lang.form.reset_success'));\n\n        return Backend::redirect('backend/preferences');\n    }\n\n    /**\n     * formFindModelObject\n     */\n    public function formFindModelObject()\n    {\n        return PreferenceModel::instance();\n    }\n}\n"
  },
  {
    "path": "modules/backend/controllers/UserGroups.php",
    "content": "<?php namespace Backend\\Controllers;\n\nuse Backend\\Classes\\SettingsController;\n\n/**\n * UserGroups controller\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass UserGroups extends SettingsController\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n        \\Backend\\Behaviors\\ListController::class,\n        \\Backend\\Behaviors\\RelationController::class\n    ];\n\n    /**\n     * @var array formConfig for `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array listConfig for `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array relationConfig for `RelationController` configuration.\n     */\n    public $relationConfig = 'config_relation.yaml';\n\n    /**\n     * @var array Permissions required to view this page.\n     */\n    public $requiredPermissions = ['admins.groups'];\n\n    /**\n     * @var string settingsItemCode determines the settings code\n     */\n    public $settingsItemCode = 'admingroups';\n}\n"
  },
  {
    "path": "modules/backend/controllers/UserRoles.php",
    "content": "<?php namespace Backend\\Controllers;\n\nuse Backend;\nuse BackendAuth;\nuse Backend\\Classes\\SettingsController;\nuse Config;\nuse ForbiddenException;\n\n/**\n * UserRoles controller\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass UserRoles extends SettingsController\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n        \\Backend\\Behaviors\\ListController::class\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array Permissions required to view this page.\n     */\n    public $requiredPermissions = ['admins.roles'];\n\n    /**\n     * @var string settingsItemCode determines the settings code\n     */\n    public $settingsItemCode = 'adminroles';\n\n    /**\n     * onImpersonateRole\n     */\n    public function onImpersonateRole($roleId = null)\n    {\n        if ($role = $this->formFindModelObject($roleId)) {\n            BackendAuth::impersonateRole($role);\n        }\n\n        return Backend::redirect('');\n    }\n\n    /**\n     * listExtendQuery\n     */\n    public function listExtendQuery($query)\n    {\n        $this->applyRankPermissionsToQuery($query);\n    }\n\n    /**\n     * formExtendQuery\n     */\n    public function formExtendQuery($query)\n    {\n        $this->applyRankPermissionsToQuery($query);\n    }\n\n    /**\n     * applyRankPermissionsToQuery\n     */\n    protected function applyRankPermissionsToQuery($query)\n    {\n        // Super users have no restrictions\n        if ($this->user->isSuperUser()) {\n            return;\n        }\n\n        // Fetch user role, including impersonation\n        $userRole = $this->user->getRoleImpersonation() ?: $this->user->role;\n\n        // User has no role and therefore cannot manage roles\n        if (!$userRole || !$userRole->sort_order) {\n            $query->whereRaw('1 = 2');\n            return;\n        }\n\n        $query->where(\n            'sort_order',\n            $this->allowPeerManagement() ? '>=' : '>',\n            $userRole->sort_order\n        );\n    }\n\n    /**\n     * allowPeerManagement returns true if users can manage other peers\n     */\n    public function allowPeerManagement(): bool\n    {\n        return Config::get('backend.user_peer_management', false);\n    }\n}\n"
  },
  {
    "path": "modules/backend/controllers/Users.php",
    "content": "<?php namespace Backend\\Controllers;\n\nuse Lang;\nuse Flash;\nuse Config;\nuse System;\nuse Backend;\nuse Redirect;\nuse BackendAuth;\nuse Backend\\Models\\UserRole;\nuse Backend\\Models\\UserGroup;\nuse Backend\\Classes\\SettingsController;\nuse ForbiddenException;\n\n/**\n * Users controller for backend users\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass Users extends SettingsController\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n        \\Backend\\Behaviors\\ListController::class\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array Permissions required to view this page.\n     */\n    public $requiredPermissions = ['admins.manage'];\n\n    /**\n     * @var string HTML body tag class\n     */\n    public $bodyClass = 'compact-container';\n\n    /**\n     * @var string settingsItemCode determines the settings code\n     */\n    public $settingsItemCode = 'administrators';\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        if ($this->isMyAccount()) {\n            $this->requiredPermissions = null;\n        }\n    }\n\n    /**\n     * index controller action\n     * @return void\n     */\n    public function index()\n    {\n        $this->bodyClass = 'slim-container';\n\n        return $this->asExtension('ListController')->index();\n    }\n\n    /**\n     * formExtendFields adds available permission fields to the User form.\n     * Mark default groups as checked for new Users.\n     */\n    public function formExtendFields($form)\n    {\n        // Remove permissions on own account\n        if ($this->isMyAccount()) {\n            $form->removeField('role');\n            $form->removeField('permissions');\n            return;\n        }\n\n        // Add super user flag\n        if ($this->user->isSuperUser()) {\n            $form->addField('is_superuser')\n                ->context(['create', 'update'])\n                ->tab('backend::lang.user.permissions')\n                ->label('backend::lang.user.superuser')\n                ->comment('backend::lang.user.superuser_comment')\n                ->displayAs('switch');\n        }\n\n        // Manage other admins\n        if ($form->getContext() !== 'create' && !BackendAuth::userHasAccess('admins.manage.other_admins')) {\n            $form->removeField('password');\n            $form->removeField('password_confirmation');\n            $form->getField('email')->disabled();\n        }\n\n        // Filter the role options to those below rank\n        if (!$this->user->isSuperUser()) {\n            $form->getField('role')->options(function() {\n                return $this->getRankedRoleOptions();\n            });\n        }\n\n        // Mark default groups\n        if (!$form->model->exists) {\n            $defaultGroupIds = UserGroup::where('is_new_user_default', true)->pluck('id')->all();\n\n            if ($groupField = $form->getField('groups')) {\n                $groupField->value($defaultGroupIds);\n            }\n        }\n    }\n\n    /**\n     * listExtendQuery extends the list query to hide superusers if the current user is not a superuser themselves\n     */\n    public function listExtendQuery($query)\n    {\n        $this->applyRankPermissionsToQuery($query);\n    }\n\n    /**\n     * listFilterExtendScopes prevents non-superusers from even seeing the is_superuser filter\n     */\n    public function listFilterExtendScopes($filterWidget)\n    {\n        if (!$this->user->isSuperUser()) {\n            $filterWidget->removeScope('is_superuser');\n        }\n    }\n\n    /**\n     * listInjectRowClass strikes out deleted records\n     */\n    public function listInjectRowClass($record, $definition = null)\n    {\n        if ($record->trashed()) {\n            return 'strike';\n        }\n    }\n\n    /**\n     * formExtendModel\n     */\n    public function formExtendModel($model)\n    {\n        if (!$this->user->isSuperUser() && !$this->isMyAccount()) {\n            $model->addValidationRule('role', 'required');\n        }\n    }\n\n    /**\n     * formExtendQuery extends the form query to prevent non-superusers from accessing superusers at all\n     */\n    public function formExtendQuery($query)\n    {\n        $this->applyRankPermissionsToQuery($query);\n\n        // Ensure soft-deleted records can still be managed\n        $query->withTrashed();\n    }\n\n    /**\n     * formBeforeSave\n     */\n    public function formBeforeSave($model)\n    {\n        // Prevent outranked roles from being selected\n        if (\n            !$this->user->isSuperUser() &&\n            ($role = UserRole::find(post('User[role]')))\n        ) {\n            if (\n                !$this->user->role ||\n                ($this->allowPeerManagement()\n                    ? $role->sort_order < $this->user->role->sort_order\n                    : $role->sort_order <= $this->user->role->sort_order)\n            ) {\n                throw new ForbiddenException;\n            }\n        }\n    }\n\n    /**\n     * formBeforeCreate\n     */\n    public function formBeforeCreate($model)\n    {\n        // In production, we assume the user creating the new user is not the\n        // new user so password must always be reset for security reasons\n        if (!System::checkDebugMode()) {\n            $model->is_password_expired = true;\n        }\n    }\n\n    /**\n     * getRoleOptions returns available role options\n     */\n    protected function getRankedRoleOptions()\n    {\n        $user = BackendAuth::getUser();\n        if (!$user || !$user->role || !$user->role->sort_order) {\n            return [];\n        }\n\n        $roles = UserRole::where(\n            'sort_order',\n            $this->allowPeerManagement() ? '>=' : '>',\n            $user->role->sort_order\n        )->get();\n\n        $result = [];\n        foreach ($roles as $role) {\n            $result[$role->id] = [$role->name, $role->description];\n        }\n\n        return $result;\n    }\n\n    /**\n     * applyRankPermissionsToQuery\n     */\n    protected function applyRankPermissionsToQuery($query)\n    {\n        // Super users have no restrictions\n        if ($this->user->isSuperUser()) {\n            return;\n        }\n\n        // Hide super users\n        $query->where('is_superuser', false);\n\n        // Hide users above rank, not including self\n        $query->where(function($q) {\n            $q->where('id', $this->user->id);\n\n            if ($this->user->role && $this->user->role->sort_order) {\n                $q->orWhereHas('role', function($q) {\n                    $q->where(\n                        'sort_order',\n                        $this->allowPeerManagement() ? '>=' : '>',\n                        $this->user->role->sort_order\n                    );\n                });\n            }\n        });\n    }\n\n    /**\n     * update controller\n     */\n    public function update($recordId, $context = null)\n    {\n        // Users cannot edit themselves, only use My Settings\n        if (!$this->isMyAccount() && $recordId == $this->user->id) {\n            return Backend::redirect('backend/users/myaccount');\n        }\n\n        return $this->asExtension('FormController')->update($recordId, $context);\n    }\n\n    /**\n     * update_onRestore handles restoring users\n     */\n    public function update_onRestore($recordId)\n    {\n        $this->formFindModelObject($recordId)->restore();\n\n        Flash::success(Lang::get('backend::lang.form.restore_success', ['name' => Lang::get('backend::lang.user.name')]));\n\n        return Redirect::refresh();\n    }\n\n    /**\n     * myaccount controller\n     */\n    public function myaccount()\n    {\n        $this->pageTitle = \"My Account\";\n\n        return $this->update($this->user->id, 'myaccount');\n    }\n\n    /**\n     * myaccount_onSave proxies the update onSave event\n     */\n    public function myaccount_onSave()\n    {\n        $result = $this->asExtension('FormController')->update_onSave($this->user->id, 'myaccount');\n\n        // If the password or login name has been updated, reauthenticate the user\n        $loginChanged = $this->user->login != post('User[login]');\n        $passwordChanged = strlen(post('User[password]'));\n\n        if ($loginChanged || $passwordChanged) {\n            // Determine remember policy\n            $remember = Config::get('backend.force_remember');\n            if ($remember === null) {\n                $remember = BackendAuth::hasRemember();\n            }\n\n            BackendAuth::login($this->user->reload(), (bool) $remember);\n        }\n\n        return $result;\n    }\n\n    /**\n     * allowPeerManagement returns true if users can manage other peers\n     */\n    protected function allowPeerManagement(): bool\n    {\n        return Config::get('backend.user_peer_management', false);\n    }\n\n    /**\n     * isMyAccount returns true if self managing\n     */\n    protected function isMyAccount(): bool\n    {\n        return $this->action == 'myaccount';\n    }\n}\n"
  },
  {
    "path": "modules/backend/controllers/accesslogs/_hint.php",
    "content": "<p>\n    <?= __('This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.', ['days' => 60]) ?>\n</p>\n"
  },
  {
    "path": "modules/backend/controllers/accesslogs/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::ajaxButton(\n        label: __(\"Refresh\"),\n        handler: 'onRefresh',\n        icon: 'oc-icon-refresh',\n        primary: true,\n        dataRequestMessage: __(\"Updating...\")\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/backend/controllers/accesslogs/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: Access Log\nlist: ~/modules/backend/models/accesslog/columns.yaml\nfilter: ~/modules/backend/models/accesslog/scopes.yaml\nmodelClass: Backend\\Models\\AccessLog\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 30\nshowSetup: true\ndefaultSort:\n    column: created_at\n    direction: desc\n\ntoolbar:\n    buttons: list_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n\n"
  },
  {
    "path": "modules/backend/controllers/accesslogs/index.php",
    "content": "<div class=\"padded-container container-flush\">\n    <?= $this->makeHintPartial('backend_accesslogs_hint', 'hint') ?>\n</div>\n\n<?= $this->listRender() ?>\n"
  },
  {
    "path": "modules/backend/controllers/auth/migrate.php",
    "content": "<h2><?= __(\"Getting Ready\") ?></h2>\n\n<div class=\"progress bar-loading-indicator\" id=\"executeLoadingBar\">\n    <div class=\"progress-bar\"></div>\n</div>\n\n<div class=\"loading-indicator-container\">\n    <div data-wait-longer=\"<?= __(\"Just a few more minutes\") ?>...\" class=\"mt-2 text-center\"><?= __(\"Migrating Database\") ?>...</div>\n</div>\n\n<script>\n    jQuery(function() {\n        var waitLonger = setTimeout(function() {\n            $('[data-wait-longer]').text($('[data-wait-longer]').data('wait-longer'));\n            $('#executeLoadingBar').addClass('fadeCycle');\n        }, 80 * 1000);\n\n        $.request('onMigrate').done(function(data) {\n            clearTimeout(waitLonger);\n        });\n    });\n</script>\n"
  },
  {
    "path": "modules/backend/controllers/auth/reset.php",
    "content": "<h2><?= __(\"Password Reset\") ?></h2>\n\n<?= Form::open() ?>\n    <input type=\"hidden\" name=\"postback\" value=\"1\" />\n    <input type=\"hidden\" name=\"id\" value=\"<?= e($id) ?>\" />\n    <input type=\"hidden\" name=\"code\" value=\"<?= e($code) ?>\" />\n\n    <p><?= __('Please enter a new password.') ?></p>\n\n    <div class=\"form-elements\" role=\"form\">\n\n        <!-- Password -->\n        <div class=\"form-group\">\n            <label class=\"form-label\" for=\"password-input\">\n                <?= __('Password') ?>\n            </label>\n\n            <input\n                type=\"password\"\n                name=\"password\"\n                id=\"password-input\"\n                value=\"\"\n                class=\"form-control password\"\n                autocomplete=\"off\"\n                maxlength=\"255\" />\n        </div>\n\n        <!-- Submit Login -->\n        <button type=\"submit\" class=\"btn btn-primary\">\n            <?= __('Reset') ?>\n        </button>\n\n        <p class=\"pull-right forgot-password\">\n            <a href=\"<?= Backend::url('backend/auth') ?>\" class=\"text-muted\">\n                <?= e(trans('backend::lang.form.cancel')) ?>\n            </a>\n        </p>\n    </div>\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/backend/controllers/auth/restore.php",
    "content": "<h2><?= __('Password Restore') ?></h2>\n\n<?= Form::open() ?>\n    <input type=\"hidden\" name=\"postback\" value=\"1\" />\n\n    <p><?= __('Please enter your login to restore the password.') ?></p>\n\n    <div class=\"form-elements\" role=\"form\">\n\n        <!-- Username -->\n        <div class=\"form-group\">\n            <label class=\"form-label\" for=\"login-input\">\n                <?= __('Username') ?>\n            </label>\n\n            <input\n                type=\"text\"\n                name=\"login\"\n                id=\"login-input\"\n                value=\"<?= e(post('login')) ?>\"\n                class=\"form-control\"\n                placeholder=\"\"\n                autocomplete=\"off\"\n                maxlength=\"255\" />\n        </div>\n\n        <button type=\"submit\" class=\"btn btn-primary restore-button\">\n            <?= __('Restore') ?>\n        </button>\n\n        <p class=\"pull-right forgot-password\">\n            <a href=\"<?= Backend::url('backend/auth') ?>\" class=\"text-muted\">\n                <?= e(trans('backend::lang.form.cancel')) ?>\n            </a>\n        </p>\n    </div>\n<?= Form::close() ?>\n\n<?= $this->fireViewEvent('backend.auth.extendRestoreView') ?>\n"
  },
  {
    "path": "modules/backend/controllers/auth/setup.php",
    "content": "<h2><?= __('Create Account') ?></h2>\n\n<?= Form::open() ?>\n    <input type=\"hidden\" name=\"postback\" value=\"1\" />\n\n    <p><?= __(\"Please create a new account for logging in to the Administration Area.\") ?></p>\n\n    <div class=\"form-elements\" role=\"form\">\n        <div class=\"form-group text-field span-left\">\n            <label class=\"form-label\" for=\"adminFirstName\"><?= __(\"First Name\") ?></label>\n            <input\n                id=\"adminFirstName\"\n                type=\"text\"\n                name=\"first_name\"\n                class=\"form-control\"\n                value=\"<?= e(post('first_name')) ?>\"\n                placeholder=\"eg: Admin\"\n            />\n        </div>\n\n        <div class=\"form-group text-field span-right\">\n            <label class=\"form-label\" for=\"adminLastName\"><?= __(\"Last Name\") ?></label>\n            <input\n                id=\"adminLastName\"\n                type=\"text\"\n                name=\"last_name\"\n                class=\"form-control\"\n                value=\"<?= e(post('last_name')) ?>\"\n                placeholder=\"eg: Person\"\n            />\n        </div>\n\n        <div class=\"form-group text-field span-full\">\n            <label class=\"form-label\" for=\"adminEmail\"><?= __(\"Email Address\") ?></label>\n            <input\n                id=\"adminEmail\"\n                type=\"text\"\n                name=\"email\"\n                class=\"form-control\"\n                value=\"<?= e(post('email')) ?>\"\n                placeholder=\"eg: admin@domain.tld\"\n                onkeyup=\"suggestUsernameForSetup(this)\"\n            />\n        </div>\n\n        <div class=\"form-group text-field span-full\">\n            <label class=\"form-label\" for=\"adminLogin\"><?= __(\"Pick a Username\") ?></label>\n            <input\n                id=\"adminLogin\"\n                type=\"text\"\n                name=\"login\"\n                class=\"form-control\"\n                value=\"<?= e(post('login')) ?>\"\n                placeholder=\"eg: myusername\"\n            />\n        </div>\n\n        <div class=\"form-group text-field span-left\">\n            <label class=\"form-label\" for=\"adminPassword\"><?= __(\"Enter New Password\") ?></label>\n            <input\n                id=\"adminPassword\"\n                type=\"password\"\n                name=\"password\"\n                class=\"form-control\"\n                value=\"\"\n            />\n        </div>\n\n        <div class=\"form-group text-field span-right\">\n            <label class=\"form-label\" for=\"adminConfirmPassword\"><?= __(\"Confirm Password\") ?></label>\n            <input\n                id=\"adminConfirmPassword\"\n                type=\"password\"\n                name=\"password_confirmation\"\n                class=\"form-control\"\n                value=\"\"\n            />\n        </div>\n\n        <!-- Submit Form -->\n        <button type=\"submit\" class=\"btn btn-primary pull-right\">\n            <?= __(\"Create Account\") ?>\n        </button>\n    </div>\n\n<?= Form::close() ?>\n\n<script>\n    // Suggest a custom username\n    function suggestUsernameForSetup(el) {\n        var email = el.value,\n            username = email.slice(0, email.indexOf('@'));\n\n        document.querySelectorAll('input[name=\"login\"]').forEach(function(input) {\n            input.placeholder = 'eg: ' + (username || 'myusername');\n        });\n    }\n</script>\n"
  },
  {
    "path": "modules/backend/controllers/auth/signin.php",
    "content": "<h2><?= e(Backend\\Models\\BrandSetting::get('app_tagline')) ?></h2>\n\n<p><?= e(Backend\\Models\\BrandSetting::get('login_prompt')) ?></p>\n\n<?= Form::open() ?>\n    <input type=\"hidden\" name=\"postback\" value=\"1\" />\n\n    <div class=\"form-elements\" role=\"form\">\n        <!-- Login -->\n        <div class=\"form-group\">\n            <label class=\"form-label\" for=\"login-input\">\n                <?= __('Username') ?>\n            </label>\n\n            <input\n                type=\"text\"\n                name=\"login\"\n                value=\"<?= e(post('login')) ?>\"\n                class=\"form-control\"\n                id=\"login-input\"\n                autocomplete=\"off\"\n                maxlength=\"255\" />\n        </div>\n\n        <!-- Password -->\n        <div class=\"form-group\">\n            <label class=\"form-label\" for=\"password-input\">\n                <?= __('Password') ?>\n            </label>\n\n            <input\n                type=\"password\"\n                name=\"password\"\n                value=\"\"\n                id=\"password-input\"\n                class=\"form-control\"\n                autocomplete=\"off\"\n                maxlength=\"255\" />\n        </div>\n\n        <?php if (Config::get('backend.force_remember') === null): ?>\n            <!-- Remember Checkbox -->\n            <div class=\"form-group\">\n                <div class=\"form-check\">\n                    <input\n                        class=\"form-check-input\"\n                        type=\"checkbox\"\n                        id=\"remember\"\n                        name=\"remember\"\n                        <?= post('remember') ? 'checked' : '' ?> />\n                    <label class=\"form-check-label\" for=\"remember\">\n                        <?= __('Stay logged in') ?>\n                    </label>\n                </div>\n            </div>\n        <?php endif ?>\n\n        <!-- Submit Login -->\n        <button type=\"submit\" class=\"btn btn-primary login-button\">\n            <?= __('Login') ?>\n        </button>\n\n        <?php if (Config::get('backend.password_policy.allow_reset', true) === true): ?>\n            <!-- Forgot password? -->\n            <p class=\"pull-right forgot-password\">\n                <a href=\"<?= Backend::url('backend/auth/restore') ?>\">\n                    <?= __('Forgot password?') ?>\n                </a>\n            </p>\n        <?php endif ?>\n\n    </div>\n<?= Form::close() ?>\n\n<?= $this->fireViewEvent('backend.auth.extendSigninView') ?>\n"
  },
  {
    "path": "modules/backend/controllers/authgates/expired.php",
    "content": "<h2><?= __(\"Password Reset\") ?></h2>\n\n<?= Form::ajax('onSubmit') ?>\n    <p><?= __(\"Your password has expired, please create a new one for security reasons.\") ?></p>\n\n    <div class=\"form-elements\" role=\"form\">\n\n        <!-- Current Password -->\n        <div class=\"form-group\">\n            <label class=\"form-label\" for=\"currentPasswordInput\">\n                <?= __(\"Current Password\") ?>\n            </label>\n\n            <input\n                type=\"password\"\n                name=\"current_password\"\n                id=\"currentPasswordInput\"\n                value=\"<?= e(post('current_password')) ?>\"\n                class=\"form-control password\"\n                autocomplete=\"off\"\n                maxlength=\"255\" />\n        </div>\n\n        <!-- Password -->\n        <div class=\"form-group\">\n            <label class=\"form-label\" for=\"passwordInput\">\n                <?= __(\"New Password\") ?>\n            </label>\n\n            <input\n                type=\"password\"\n                name=\"password\"\n                id=\"passwordInput\"\n                value=\"<?= e(post('password')) ?>\"\n                class=\"form-control password\"\n                autocomplete=\"off\"\n                maxlength=\"255\" />\n        </div>\n\n        <!-- Confirm Password -->\n        <div class=\"form-group\">\n            <label class=\"form-label\" for=\"passwordConfirmationInput\">\n                <?= __(\"Confirm Password\") ?>\n            </label>\n\n            <input\n                type=\"password\"\n                name=\"password_confirmation\"\n                id=\"passwordConfirmationInput\"\n                value=\"<?= e(post('password_confirmation')) ?>\"\n                class=\"form-control password\"\n                autocomplete=\"off\"\n                maxlength=\"255\" />\n        </div>\n\n        <!-- Submit Login -->\n        <button type=\"submit\" class=\"btn btn-primary\">\n            <?= __(\"Reset\") ?>\n        </button>\n\n        <p class=\"pull-right forgot-password\">\n            <a href=\"<?= Backend::url('backend/auth/signout') ?>\" class=\"text-muted\">\n                <?= e(trans('backend::lang.account.sign_out')) ?>\n            </a>\n        </p>\n    </div>\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/backend/controllers/preferences/_example_code.php",
    "content": "form, fieldset, h5, h6, pre, blockquote, ol, dl, dt, dd, address, dd, dtm, div, td, th, hr {\n    margin: 0;\n    padding: 0;\n}\n\nbody {\n    background-color: white;\n    font: 62.5% Helvetica, Arial, Tahoma, Verdana, Helvetica, sans-serif;\n}\n\np {\n    font-size: 12px;\n}\n"
  },
  {
    "path": "modules/backend/controllers/preferences/_field_editor_preview.php",
    "content": "<div\n      id=\"editorpreferencesCodeeditor\"\n      class=\"field-codeeditor size-large position-relative h-100\"\n      data-control=\"codeeditor\"\n      data-font-size=\"<?= $model->editor_font_size ?>\"\n      data-word-wrap=\"<?= $model->editor_word_wrap ?>\"\n      data-code-folding=\"<?= $model->editor_code_folding ?>\"\n      data-tab-size=\"<?= $model->editor_tab_size ?>\"\n      data-theme=\"<?= $model->editor_theme ?>\"\n      data-show-invisibles=\"<?= $model->editor_show_invisibles ?>\"\n      data-highlight-active-line=\"<?= $model->editor_highlight_active_line ?>\"\n      data-use-soft-tabs=\"<?= !$model->editor_use_hard_tabs ?>\"\n      data-autocompletion=\"<?= $model->editor_autocompletion ?>\"\n      data-display-indent-guides=\"<?= $model->editor_display_indent_guides ?>\"\n      data-show-print-margin=\"<?= $model->editor_show_print_margin ?>\"\n      data-show-gutter=\"<?= $model->editor_show_gutter ? 'true' : 'false' ?>\"\n      data-language=\"css\"\n      data-margin=\"0\"\n      data-vendor-path=\"<?= Url::to('/modules/backend/formwidgets/codeeditor/assets/vendor/ace') ?>/\">\n      <textarea name=\"editorpreferences_codeeditor\"><?= e($this->makePartial('example_code')) ?></textarea>\n</div>\n"
  },
  {
    "path": "modules/backend/controllers/preferences/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\nname: \"Backend Preferences\"\nform: ~/modules/backend/models/preference/fields.yaml\nmodelClass: Backend\\Models\\Preference\ndefaultRedirect: system/settings\n"
  },
  {
    "path": "modules/backend/controllers/preferences/index.php",
    "content": "<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons\">\n            <div data-control=\"loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Save Changes\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestData: \"redirect: false\",\n                    dataRequestMessage: __(\"Saving...\")\n                ) ?>\n\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <?= Ui::button(\n                        label: __(\"Cancel\"),\n                        href: Backend::url('system/settings'),\n                        class: 'btn-link p-0'\n                    ) ?>\n                </span>\n\n                <span class=\"pull-right btn-text\">\n                    <?= Ui::ajaxButton(\n                        label: __(\"Reset to Default\"),\n                        handler: 'onResetDefault',\n                        class: 'btn-link p-0',\n                        dataRequestData: \"redirect: false\",\n                        dataRequestConfirm: __(\"Are you sure?\"),\n                        dataRequestMessage: __(\"Resetting...\")\n                    ) ?>\n                </span>\n            </div>\n        </div>\n    <?= Form::close() ?>\n\n<?php else: ?>\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to System Settings\"),\n            href: Backend::url('system/settings'),\n            secondary: true\n        ) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/controllers/usergroups/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::button(\n        label: __(\"New Group\"),\n        href: Backend::url('backend/usergroups/create'),\n        icon: 'oc-icon-plus',\n        primary: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/backend/controllers/usergroups/_relation_users.php",
    "content": "\n<?= $this->relationRender('users') ?>\n"
  },
  {
    "path": "modules/backend/controllers/usergroups/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\nname: backend::lang.user.group.name\nform: ~/modules/backend/models/usergroup/fields.yaml\nmodelClass: Backend\\Models\\UserGroup\ndefaultRedirect: backend/usergroups\n\ncreate:\n    redirect: backend/usergroups/update/:id\n    redirectClose: backend/usergroups\n\nupdate:\n    redirect: backend/usergroups\n    redirectClose: backend/usergroups\n"
  },
  {
    "path": "modules/backend/controllers/usergroups/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: backend::lang.user.group.list_title\nlist: ~/modules/backend/models/usergroup/columns.yaml\nmodelClass: Backend\\Models\\UserGroup\nrecordUrl: backend/usergroups/update/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 25\nshowSetup: true\n\ntoolbar:\n    buttons: list_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n"
  },
  {
    "path": "modules/backend/controllers/usergroups/config_relation.yaml",
    "content": "# ===================================\n#  Relation Behavior Config\n# ===================================\n\nusers:\n    label: backend::lang.user.group.users_count\n    list: ~/modules/backend/models/user/columns.yaml\n    view:\n        toolbarButtons: add|remove\n"
  },
  {
    "path": "modules/backend/controllers/usergroups/create.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('backend/usergroups') ?>\"><?= __(\"Team Groups\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Create\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Create & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Groups List\"),\n            href: Backend::url('backend/usergroups'),\n            secondary: true\n        ) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/controllers/usergroups/index.php",
    "content": "\n<?= $this->listRender() ?>\n"
  },
  {
    "path": "modules/backend/controllers/usergroups/update.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('backend/usergroups') ?>\"><?= __(\"Team Groups\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Save\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestData: \"redirect: false\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Save & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::iconButton(\n                    label: __(\"Delete\"),\n                    icon: 'oc-icon-delete',\n                    handler: 'onDelete',\n                    danger: true,\n                    class: 'pull-right',\n                    dataRequestConfirm: __(\"Are you sure?\"),\n                    dataRequestMessage: __(\"Deleting :name...\", ['name' => $formRecordName])\n                ) ?>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Groups List\"),\n            href: Backend::url('backend/usergroups'),\n            secondary: true\n        ) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/controllers/userroles/_action_view_as.php",
    "content": "\n<div class=\"field-action\">\n    <div class=\"row\">\n        <div class=\"col-md-8\">\n            <h5><?= __(\"View As Role\") ?></h5>\n            <p><?= __(\"This lets you test the actions this role can perform.\") ?></p>\n        </div>\n        <div class=\"col-md-4\">\n            <div class=\"field-action-button\">\n                <?= Ui::ajaxButton(\n                    label: __(\"View As Role\"),\n                    handler: 'onImpersonateRole',\n                    secondary: true,\n                    dataStripeLoadIndicator: true\n                ) ?>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/controllers/userroles/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::button(\n        label: __(\"New Role\"),\n        href: Backend::url('backend/userroles/create'),\n        icon: 'oc-icon-plus',\n        primary: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/backend/controllers/userroles/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\nname: backend::lang.user.role.name\nform: ~/modules/backend/models/userrole/fields.yaml\nmodelClass: Backend\\Models\\UserRole\ndefaultRedirect: backend/userroles\n\ncreate:\n    redirect: backend/userroles/update/:id\n    redirectClose: backend/userroles\n\nupdate:\n    redirect: backend/userroles\n    redirectClose: backend/userroles\n"
  },
  {
    "path": "modules/backend/controllers/userroles/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: backend::lang.user.role.list_title\nlist: ~/modules/backend/models/userrole/columns.yaml\nmodelClass: Backend\\Models\\UserRole\nrecordUrl: backend/userroles/update/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 25\nshowSetup: true\nexpandLastColumn: true\n\nstructure:\n    showTree: false\n    showReorder: true\n    maxDepth: 1\n\ntoolbar:\n    buttons: list_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n"
  },
  {
    "path": "modules/backend/controllers/userroles/create.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('backend/userroles') ?>\"><?= __(\"Role Permissions\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Create\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Create & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Roles List\"),\n            href: Backend::url('backend/userroles'),\n            secondary: true\n        ) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/controllers/userroles/index.php",
    "content": "\n<?= $this->listRender() ?>\n"
  },
  {
    "path": "modules/backend/controllers/userroles/update.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('backend/userroles') ?>\"><?= __(\"Role Permissions\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Save\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestData: \"redirect: false\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Save & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::iconButton(\n                    label: __(\"Delete\"),\n                    icon: 'oc-icon-delete',\n                    handler: 'onDelete',\n                    danger: true,\n                    class: 'pull-right',\n                    dataRequestConfirm: __(\"Are you sure?\"),\n                    dataRequestMessage: __(\"Deleting :name...\", ['name' => $formRecordName])\n                ) ?>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Roles List\"),\n            href: Backend::url('backend/userroles'),\n            secondary: true\n        ) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/controllers/users/_hint_trashed.php",
    "content": "<div class=\"layout-row min-size\">\n    <div class=\"callout callout-danger\">\n        <div class=\"header\">\n            <i class=\"icon-trash\"></i>\n            <h3><?= e(trans('backend::lang.user.trashed_hint_title')) ?></h3>\n            <p><?= e(trans('backend::lang.user.trashed_hint_desc')) ?></p>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/controllers/users/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?php if (BackendAuth::userHasAccess('admins.manage.create')): ?>\n        <?= Ui::button(\n            label: __(\"New Administrator\"),\n            href: Backend::url('backend/users/create'),\n            icon: 'oc-icon-plus',\n            primary: true\n        ) ?>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/controllers/users/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\nname: backend::lang.user.name\nform: ~/modules/backend/models/user/fields.yaml\nmodelClass: Backend\\Models\\User\ndefaultRedirect: backend/users\n\ncreate:\n    redirect: backend/users/update/:id\n    redirectClose: backend/users\n\nupdate:\n    redirect: backend/users\n    redirectClose: backend/users\n\npermissions:\n    modelCreate: admins.manage.create\n    modelDelete: admins.manage.delete\n"
  },
  {
    "path": "modules/backend/controllers/users/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: backend::lang.user.list_title\nlist: ~/modules/backend/models/user/columns.yaml\nfilter: ~/modules/backend/models/user/scopes.yaml\nmodelClass: Backend\\Models\\User\nrecordUrl: backend/users/update/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 20\nshowSetup: true\n# showCheckboxes: true\n\ntoolbar:\n    buttons: list_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n"
  },
  {
    "path": "modules/backend/controllers/users/create.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('backend/users') ?>\"><?= __(\"Administrators\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?php Block::put('form-contents') ?>\n        <div class=\"layout\">\n\n            <div class=\"layout-row\">\n                <?= $this->formRenderOutsideFields() ?>\n                <?= $this->formRenderPrimaryTabs() ?>\n            </div>\n\n            <div class=\"form-buttons\">\n                <div data-control=\"loader-container\" class=\"control-loader-container\">\n                    <?= Ui::ajaxButton(\n                        label: __(\"Create\"),\n                        handler: 'onSave',\n                        primary: true,\n                        hotkey: ['ctrl+s', 'cmd+s'],\n                        dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                    ) ?>\n                    <?= Ui::ajaxButton(\n                        label: __(\"Create & Close\"),\n                        handler: 'onSave',\n                        secondary: true,\n                        hotkey: ['ctrl+enter', 'cmd+enter'],\n                        dataRequestData: \"close: true\",\n                        dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                    ) ?>\n                    <span class=\"btn-text\">\n                        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                        <?= Ui::button(\n                            label: __(\"Cancel\"),\n                            href: Backend::url('backend/users'),\n                            class: 'btn-link p-0'\n                        ) ?>\n                    </span>\n                </div>\n            </div>\n\n        </div>\n    <?php Block::endPut() ?>\n\n    <?php Block::put('form-sidebar') ?>\n        <div class=\"hide-tabs\"><?= $this->formRenderSecondaryTabs() ?></div>\n    <?php Block::endPut() ?>\n\n    <?php Block::put('body') ?>\n        <?= Form::open(['class'=>'position-relative h-100']) ?>\n            <?= $this->makeLayout('form-with-sidebar') ?>\n        <?= Form::close() ?>\n    <?php Block::endPut() ?>\n\n<?php else: ?>\n    <nav class=\"control-breadcrumb\">\n        <?= Block::placeholder('breadcrumb') ?>\n    </nav>\n    <div class=\"padded-container\">\n        <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n        <p>\n            <?= Ui::button(\n                label: __(\"Return to Admins List\"),\n                href: Backend::url('backend/users'),\n                secondary: true\n            ) ?>\n        </p>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/controllers/users/index.php",
    "content": "\n<?= $this->listRender() ?>\n"
  },
  {
    "path": "modules/backend/controllers/users/myaccount.php",
    "content": "<?php if ($this->user->hasAccess('admins.manage')): ?>\n    <?php Block::put('breadcrumb') ?>\n        <ol class=\"breadcrumb\">\n            <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('backend/users') ?>\"><?= __(\"Administrators\") ?></a></li>\n            <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n        </ol>\n    <?php Block::endPut() ?>\n<?php endif ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?php Block::put('form-contents') ?>\n        <div class=\"layout\">\n\n            <div class=\"layout-row\">\n                <?= $this->formRenderOutsideFields() ?>\n                <?= $this->formRenderPrimaryTabs() ?>\n            </div>\n\n            <div class=\"form-buttons\">\n                <div data-control=\"loader-container\" class=\"control-loader-container\">\n                    <?= Ui::ajaxButton(\n                        label: __(\"Save\"),\n                        handler: 'onSave',\n                        primary: true,\n                        hotkey: ['ctrl+s', 'cmd+s'],\n                        dataRequestData: \"redirect: false\",\n                        dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                    ) ?>\n                    <?php if ($this->user->hasAccess('admins.manage')): ?>\n                        <?= Ui::ajaxButton(\n                            label: __(\"Save & Close\"),\n                            handler: 'onSave',\n                            secondary: true,\n                            hotkey: ['ctrl+enter', 'cmd+enter'],\n                            dataRequestData: \"close: true\",\n                            dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                        ) ?>\n                    <?php endif ?>\n                </div>\n            </div>\n\n        </div>\n    <?php Block::endPut() ?>\n\n    <?php Block::put('form-sidebar') ?>\n        <div class=\"hide-tabs\"><?= $this->formRenderSecondaryTabs() ?></div>\n    <?php Block::endPut() ?>\n\n    <?php Block::put('body') ?>\n        <?= Form::open(['class'=>'position-relative h-100']) ?>\n            <?= $this->makeLayout('form-with-sidebar') ?>\n        <?= Form::close() ?>\n    <?php Block::endPut() ?>\n\n<?php else: ?>\n    <nav class=\"control-breadcrumb\">\n        <?= Block::placeholder('breadcrumb') ?>\n    </nav>\n    <div class=\"padded-container\">\n        <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n        <p>\n            <?= Ui::button(\n                label: __(\"Return to Admins List\"),\n                href: Backend::url('backend/users'),\n                secondary: true\n            ) ?>\n        </p>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/controllers/users/update.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('backend/users') ?>\"><?= __(\"Administrators\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?php Block::put('form-contents') ?>\n        <?php if ($formModel->trashed()): ?>\n            <?= $this->makePartial('hint_trashed') ?>\n        <?php endif ?>\n\n        <div class=\"layout\">\n\n            <div class=\"layout-row\">\n                <?= $this->formRenderOutsideFields() ?>\n                <?= $this->formRenderPrimaryTabs() ?>\n            </div>\n\n            <div class=\"form-buttons\">\n                <div data-control=\"loader-container\" class=\"control-loader-container\">\n                    <?= Ui::ajaxButton(\n                        label: __(\"Save\"),\n                        handler: 'onSave',\n                        primary: true,\n                        hotkey: ['ctrl+s', 'cmd+s'],\n                        dataRequestData: \"redirect: false\",\n                        dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                    ) ?>\n                    <?= Ui::ajaxButton(\n                        label: __(\"Save & Close\"),\n                        handler: 'onSave',\n                        secondary: true,\n                        hotkey: ['ctrl+enter', 'cmd+enter'],\n                        dataRequestData: \"close: true\",\n                        dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                    ) ?>\n                    <span class=\"btn-text\">\n                        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                        <?= Ui::button(\n                            label: __(\"Cancel\"),\n                            href: Backend::url('backend/users'),\n                            class: 'btn-link p-0'\n                        ) ?>\n                    </span>\n                    <?php if (BackendAuth::userHasAccess('admins.manage.delete')): ?>\n                        <?php if ($formModel->trashed()): ?>\n                            <?= Ui::iconButton(\n                                label: __(\"Restore\"),\n                                icon: 'oc-icon-user-plus',\n                                handler: 'onRestore',\n                                class: 'info pull-right',\n                                dataRequestConfirm: __(\"Are you sure?\"),\n                                dataRequestMessage: __(\"Restoring :name...\", ['name' => $formRecordName])\n                            ) ?>\n                        <?php else: ?>\n                            <?= Ui::iconButton(\n                                label: __(\"Delete\"),\n                                icon: 'oc-icon-delete',\n                                handler: 'onDelete',\n                                danger: true,\n                                class: 'pull-right',\n                                dataRequestConfirm: __(\"Are you sure?\"),\n                                dataRequestMessage: __(\"Deleting :name...\", ['name' => $formRecordName])\n                            ) ?>\n                        <?php endif ?>\n                    <?php endif ?>\n                </div>\n            </div>\n\n        </div>\n    <?php Block::endPut() ?>\n\n    <?php Block::put('form-sidebar') ?>\n        <div class=\"hide-tabs\"><?= $this->formRenderSecondaryTabs() ?></div>\n    <?php Block::endPut() ?>\n\n    <?php Block::put('body') ?>\n        <?= Form::open(['class'=>'position-relative h-100']) ?>\n            <?= $this->makeLayout('form-with-sidebar') ?>\n        <?= Form::close() ?>\n    <?php Block::endPut() ?>\n\n<?php else: ?>\n    <nav class=\"control-breadcrumb\">\n        <?= Block::placeholder('breadcrumb') ?>\n    </nav>\n    <div class=\"padded-container\">\n        <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n        <p>\n            <?= Ui::button(\n                label: __(\"Return to Admins List\"),\n                href: Backend::url('backend/users'),\n                secondary: true\n            ) ?>\n        </p>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/database/migrations/2013_10_01_000001_Db_Backend_Users.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('backend_users', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('first_name')->nullable();\n            $table->string('last_name')->nullable();\n            $table->string('login')->unique('login_unique')->index('login_index');\n            $table->string('email')->unique('email_unique');\n            $table->string('password');\n            $table->string('activation_code')->nullable()->index('act_code_index');\n            $table->string('persist_code')->nullable();\n            $table->string('reset_password_code')->nullable()->index('reset_code_index');\n            $table->mediumText('permissions')->nullable();\n            $table->boolean('is_activated')->default(false);\n            $table->boolean('is_superuser')->default(false);\n            $table->timestamp('activated_at')->nullable();\n            $table->timestamp('last_login')->nullable();\n            $table->timestamp('deleted_at')->nullable();\n            $table->integer('role_id')->unsigned()->nullable()->index('admin_role_index');\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('backend_users');\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2013_10_01_000002_Db_Backend_User_Groups.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('backend_user_groups', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->unique('name_unique');\n            $table->string('code')->nullable()->index('code_index');\n            $table->text('description')->nullable();\n            $table->boolean('is_new_user_default')->default(false);\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('backend_user_groups');\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2013_10_01_000003_Db_Backend_Users_Groups.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('backend_users_groups', function (Blueprint $table) {\n            $table->integer('user_id')->unsigned();\n            $table->integer('user_group_id')->unsigned();\n            $table->primary(['user_id', 'user_group_id'], 'user_group');\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('backend_users_groups');\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2013_10_01_000004_Db_Backend_User_Throttle.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('backend_user_throttle', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id')->unsigned()->nullable()->index();\n            $table->string('ip_address')->nullable()->index();\n            $table->integer('attempts')->default(0);\n            $table->timestamp('last_attempt_at')->nullable();\n            $table->boolean('is_suspended')->default(0);\n            $table->timestamp('suspended_at')->nullable();\n            $table->boolean('is_banned')->default(0);\n            $table->timestamp('banned_at')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('backend_user_throttle');\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2014_01_04_000005_Db_Backend_User_Preferences.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('backend_user_preferences', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id')->unsigned();\n            $table->string('namespace', 100);\n            $table->string('group', 50);\n            $table->string('item', 150);\n            $table->text('value')->nullable();\n            $table->index(['user_id', 'namespace', 'group', 'item'], 'user_item_index');\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('backend_user_preferences');\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2014_10_01_000006_Db_Backend_Access_Log.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('backend_access_log', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id')->unsigned();\n            $table->string('ip_address')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('backend_access_log');\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2017_10_01_000010_Db_Backend_User_Roles.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('backend_user_roles', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->unique('role_unique');\n            $table->string('code')->nullable()->index('role_code_index');\n            $table->string('color_background')->nullable();\n            $table->text('description')->nullable();\n            $table->mediumText('permissions')->nullable();\n            $table->boolean('is_system')->default(0);\n            $table->integer('sort_order')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('backend_user_roles');\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2018_12_16_000011_Db_Backend_Add_Deleted_At.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        if (!Schema::hasColumn('backend_users', 'deleted_at')) {\n            Schema::table('backend_users', function (Blueprint $table) {\n                $table->timestamp('deleted_at')->nullable()->after('updated_at');\n            });\n        }\n    }\n\n    public function down()\n    {\n        if (Schema::hasColumn('backend_users', 'deleted_at')) {\n            Schema::table('backend_users', function (Blueprint $table) {\n                $table->dropColumn('deleted_at');\n            });\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2022_10_01_000012_Db_Backend_User_Roles_Sortable.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        if (!Schema::hasColumns('backend_user_roles', ['sort_order', 'color_background'])) {\n            Schema::table('backend_user_roles', function (Blueprint $table) {\n                $table->integer('sort_order')->nullable();\n                $table->string('color_background')->nullable();\n            });\n        }\n    }\n\n    public function down()\n    {\n        if (Schema::hasColumn('backend_user_roles', 'sort_order')) {\n            Schema::dropColumns('backend_user_roles', 'sort_order');\n        }\n\n        if (Schema::hasColumn('backend_user_roles', 'color_background')) {\n            Schema::dropColumns('backend_user_roles', 'color_background');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2023_10_01_000013_Db_Add_Site_To_Preferences.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::table('backend_user_preferences', function (Blueprint $table) {\n            $table->integer('site_id')->nullable()->unsigned();\n            $table->integer('site_root_id')->nullable()->unsigned();\n        });\n    }\n\n    public function down()\n    {\n        if (Schema::hasColumn('backend_user_preferences', 'site_id')) {\n            Schema::dropColumns('backend_user_preferences', 'site_id');\n        }\n\n        if (Schema::hasColumn('backend_user_preferences', 'site_root_id')) {\n            Schema::dropColumns('backend_user_preferences', 'site_root_id');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2023_10_01_000014_Db_Add_User_Expired_Password.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::table('backend_users', function (Blueprint $table) {\n            $table->boolean('is_password_expired')->default(false);\n            $table->timestamp('password_changed_at')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::table('backend_users', function (Blueprint $table) {\n            $table->dropColumn('is_password_expired');\n            $table->dropColumn('password_changed_at');\n        });\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/migrations/2024_10_01_000017_Db_Migrate_v4_0_0.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::dropIfExists('backend_dashboards');\n        Schema::dropIfExists('backend_report_data_cache');\n    }\n\n    public function down()\n    {\n    }\n};\n"
  },
  {
    "path": "modules/backend/database/seeds/DatabaseSeeder.php",
    "content": "<?php namespace Backend\\Database\\Seeds;\n\nuse Seeder;\nuse Model;\n\n/**\n * DatabaseSeeder\n */\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * run the database seeds.\n     */\n    public function run()\n    {\n        Model::unguard();\n\n        $this->call(\\Backend\\Database\\Seeds\\SeedSetupAdmin::class, true);\n\n        // @vuedashboard\n        // $this->call(\\Backend\\Database\\Seeds\\DefaultDashboard::class, true);\n\n        Model::reguard();\n    }\n}\n"
  },
  {
    "path": "modules/backend/database/seeds/SeedSetupAdmin.php",
    "content": "<?php namespace Backend\\Database\\Seeds;\n\nuse Seeder;\nuse Backend\\Models\\UserRole;\nuse Backend\\Models\\UserGroup;\n\n/**\n * SeedSetupAdmin\n */\nclass SeedSetupAdmin extends Seeder\n{\n    public function run()\n    {\n        UserRole::create([\n            'name' => 'Developer',\n            'code' => UserRole::CODE_DEVELOPER,\n            'description' => 'Site administrator with access to developer tools.',\n            'color_background' => '#3498db',\n            'sort_order' => 1\n        ]);\n\n        UserRole::create([\n            'name' => 'Publisher',\n            'code' => UserRole::CODE_PUBLISHER,\n            'description' => 'Site editor with access to publishing tools.',\n            'color_background' => '#1abc9c',\n            'sort_order' => 2\n        ]);\n\n        UserGroup::create([\n            'name' => 'Owners',\n            'code' => UserGroup::CODE_OWNERS,\n            'description' => 'Default group for website owners.',\n            'is_new_user_default' => false\n        ]);\n    }\n}\n"
  },
  {
    "path": "modules/backend/facades/Backend.php",
    "content": "<?php namespace Backend\\Facades;\n\nuse October\\Rain\\Support\\Facade;\n\n/**\n * Backend facade\n *\n * @method static string assetVersion()\n * @method static string uri()\n * @method static string url(string $path = null, mixed $parameters = [], bool|null $secure = null)\n * @method static string baseUrl(string $path = null)\n * @method static string skinAsset(string $path = null)\n * @method static \\Illuminate\\Http\\RedirectResponse redirect(string $path, int $status = 302, array $headers = [], bool|null $secure = null)\n * @method static \\Illuminate\\Http\\RedirectResponse redirectGuest(string $path, int $status = 302, array $headers = [], bool|null $secure = null)\n * @method static \\Illuminate\\Http\\RedirectResponse redirectIntended(string $path, int $status = 302, array $headers = [], bool|null $secure = null)\n * @method static \\Carbon\\Carbon makeCarbon(mixed $value, bool $throwException = true)\n * @method static string date(mixed $dateTime, array $options = [])\n * @method static string dateTime(mixed $dateTime, array $options = [])\n * @method static int sizeToPixels(mixed $size)\n *\n * @see \\Backend\\Helpers\\Backend\n */\nclass Backend extends Facade\n{\n    /**\n     * getFacadeAccessor returns the registered name of the component\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'backend.helper';\n    }\n}\n"
  },
  {
    "path": "modules/backend/facades/BackendAuth.php",
    "content": "<?php namespace Backend\\Facades;\n\nuse October\\Rain\\Support\\Facade;\n\n/**\n * BackendAuth\n * @see \\Backend\\Classes\\AuthManager\n */\nclass BackendAuth extends Facade\n{\n    /**\n     * getFacadeAccessor returns the registered name of the component\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'backend.auth';\n    }\n}\n"
  },
  {
    "path": "modules/backend/facades/BackendMenu.php",
    "content": "<?php namespace Backend\\Facades;\n\nuse October\\Rain\\Support\\Facade;\n\n/**\n * BackendMenu\n *\n * @method static void setContext(string $owner, string $mainMenuItemCode, string $sideMenuItemCode = null)\n * @method static void setContextOwner(string $owner)\n * @method static void setContextMainMenu(string $mainMenuItemCode)\n * @method static void setContextSideMenu(string $sideMenuItemCode)\n * @method static void setTailorContext(string $handle, string $sideMenuItemCode = null)\n * @method static void setTailorContextUuid(string $uuid, string $sideMenuItemCode = null)\n * @method static bool isMainMenuItemActive(\\Backend\\Classes\\MainMenuItem $item)\n * @method static bool isSideMenuItemActive(\\Backend\\Classes\\SideMenuItem $item)\n * @method static bool isDashboardItemActive()\n * @method static object getContext()\n *\n * @see \\Backend\\Classes\\NavigationManager\n */\nclass BackendMenu extends Facade\n{\n    /**\n     * getFacadeAccessor returns the registered name of the component\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'backend.menu';\n    }\n}\n"
  },
  {
    "path": "modules/backend/facades/BackendUi.php",
    "content": "<?php namespace Backend\\Facades;\n\nuse October\\Rain\\Support\\Facade;\n\n/**\n * @deprecated see System\\Facades\\Ui\n */\nclass BackendUi extends Facade\n{\n    /**\n     * getFacadeAccessor returns the registered name of the component\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'system.ui';\n    }\n}\n"
  },
  {
    "path": "modules/backend/filterwidgets/Date.php",
    "content": "<?php namespace Backend\\FilterWidgets;\n\nuse Db;\nuse DbDongle;\nuse Date as DateFacade;\nuse Backend\\Classes\\FilterWidgetBase;\nuse Exception;\n\n/**\n * Date filter\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Date extends FilterWidgetBase\n{\n    const CONDITION_EQUALS = 'equals';\n    const CONDITION_NOT_EQUALS = 'notEquals';\n    const CONDITION_BETWEEN = 'between';\n    const CONDITION_BEFORE = 'before';\n    const CONDITION_AFTER = 'after';\n\n    /**\n     * init\n     */\n    public function init()\n    {\n        $scope = $this->filterScope;\n\n        if (!$scope->conditions) {\n            $scope->conditions = [\n                self::CONDITION_EQUALS => true,\n                self::CONDITION_NOT_EQUALS => true,\n                self::CONDITION_BETWEEN => true,\n                self::CONDITION_BEFORE => true,\n                self::CONDITION_AFTER => true\n            ];\n        }\n\n        if (!$scope->minDate) {\n            $scope->minDate = '1970-01-01';\n        }\n\n        if (!$scope->maxDate) {\n            $scope->maxDate = '2199-12-31';\n        }\n\n        if (!$scope->firstDay) {\n            $scope->firstDay = 0;\n        }\n\n        if (!$scope->yearRange) {\n            $scope->yearRange = 10;\n        }\n\n        if ($scope->useTimezone === null) {\n            $scope->useTimezone = true;\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/datefilter.js');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('date');\n    }\n\n    /**\n     * renderForm the form to use for filtering\n     */\n    public function renderForm()\n    {\n        $this->prepareVars();\n        return $this->makePartial('date_form');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['scope'] = $this->filterScope;\n    }\n\n    /**\n     * getActiveValue\n     */\n    public function getActiveValue()\n    {\n        if (post('clearScope')) {\n            return null;\n        }\n\n        $value = post('Filter');\n        $condition = post('Filter[condition]');\n\n        if ($condition === self::CONDITION_BETWEEN) {\n            if (!$this->hasPostValue('beforeRaw') && !$this->hasPostValue('afterRaw')) {\n                return null;\n            }\n\n            if (!$this->hasPostValue('beforeRaw')) {\n                $value['value'] = post('Filter[after]');\n                $value['valueRaw'] = post('Filter[afterRaw]');\n                $value['condition'] = self::CONDITION_AFTER;\n            }\n            elseif (!$this->hasPostValue('afterRaw')) {\n                $value['value'] = post('Filter[before]');\n                $value['valueRaw'] = post('Filter[beforeRaw]');\n                $value['condition'] = self::CONDITION_BEFORE;\n            }\n        }\n        else {\n            if (!$this->hasPostValue('valueRaw')) {\n                return null;\n            }\n        }\n\n        return $value;\n    }\n\n    /**\n     * applyScopeToQuery\n     */\n    public function applyScopeToQuery($query)\n    {\n        $scope = $this->filterScope;\n\n        // Scope\n        if ($scope->modelScope) {\n            $scope->applyScopeMethodToQuery($query);\n            return;\n        }\n\n        // Condition\n        $scopeConditions = (array) $scope->conditions;\n        $activeCondition = $scope->condition;\n\n        // Raw SQL query\n        $sqlCondition = $scopeConditions[$activeCondition] ?? null;\n        if (is_string($sqlCondition)) {\n            // @deprecated adapt legacy format\n            $sqlCondition = str_replace([\"':filtered'\", \"':value'\", \"':valueDate'\", \"':after'\", \"':afterDate'\", \"':before'\", \"':beforeDate'\"], [':value', ':value', ':valueDate', ':after', ':afterDate', ':before', ':beforeDate'], $sqlCondition);\n\n            $query->whereRaw(DbDongle::parse($sqlCondition, [\n                'value' => $this->parseDate($scope->value),\n                'valueDate' => $this->parseDate($scope->value, ['isDateOnly' => true]),\n                'after' => $this->parseDate($scope->after),\n                'afterDate' => $this->parseDate($scope->after, ['isDateOnly' => true]),\n                'before' => $this->parseDate($scope->before),\n                'beforeDate' => $this->parseDate($scope->before, ['isDateOnly' => true]),\n            ]));\n            return;\n        }\n\n        // Default query\n        if ($activeCondition === self::CONDITION_EQUALS) {\n            $query\n                ->where($this->valueFrom, '>=', $this->parseDate($scope->value, ['returnObject' => true]))\n                ->where($this->valueFrom, '<=', $this->parseDate($scope->value, ['returnObject' => true, 'isEndOfDay' => true]));\n            return;\n        }\n\n        if ($activeCondition === self::CONDITION_NOT_EQUALS) {\n            $query\n                ->where(function($query) use ($scope) {\n                    $query\n                        ->where($this->valueFrom, '>', $this->parseDate($scope->value, ['returnObject' => true, 'isEndOfDay' => true]))\n                        ->orWhere($this->valueFrom, '<', $this->parseDate($scope->value, ['returnObject' => true]));\n                });\n            return;\n        }\n\n        if ($activeCondition === self::CONDITION_BETWEEN) {\n            $query\n                ->where($this->valueFrom, '>=', $this->parseDate($scope->after, ['returnObject' => true]))\n                ->where($this->valueFrom, '<=', $this->parseDate($scope->before, ['returnObject' => true]));\n            return;\n        }\n\n        if ($activeCondition === self::CONDITION_AFTER) {\n            $query->where($this->valueFrom, '>=', $this->parseDate($scope->value, ['returnObject' => true]));\n            return;\n        }\n\n        if ($activeCondition === self::CONDITION_BEFORE) {\n            $query->where($this->valueFrom, '<=', $this->parseDate($scope->value, ['returnObject' => true]));\n            return;\n        }\n    }\n\n    /**\n     * parseDate for SQL\n     */\n    public function parseDate($value, array $options = [])\n    {\n        extract(array_merge([\n            'isDateOnly' => false,\n            'isEndOfDay' => false,\n            'returnObject' => false,\n        ], $options));\n\n        try {\n            if (is_int($value)) {\n                $date = DateFacade::createFromTimestamp($value);\n            }\n            elseif (strtolower($value) === 'now') {\n                $date = DateFacade::now()->startOfDay();\n            }\n            else {\n                $date = DateFacade::parse($value);\n            }\n\n            if ($isEndOfDay) {\n                $date = $date->copy()->addDay()->addMinutes(-1);\n            }\n\n            if ($returnObject) {\n                return $date;\n            }\n\n            if ($isDateOnly) {\n                return $date->format('Y-m-d');\n            }\n\n            return $date->format('Y-m-d H:i:s');\n        }\n        catch (Exception $ex) {\n            if ($returnObject) {\n                return $value;\n            }\n\n            return Db::getPdo()->quote($value);\n        }\n    }\n\n    /**\n     * getConditionLang\n     */\n    public function getConditionLang($condition)\n    {\n        switch ($condition) {\n            case self::CONDITION_EQUALS:\n                return __('is equal to');\n\n            case self::CONDITION_NOT_EQUALS:\n                return __('not equal to');\n\n            case self::CONDITION_BETWEEN:\n                return __('is between');\n\n            case self::CONDITION_BEFORE:\n                return __('is before');\n\n            case self::CONDITION_AFTER:\n                return __('is after');\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/filterwidgets/Group.php",
    "content": "<?php namespace Backend\\FilterWidgets;\n\nuse Db;\nuse Str;\nuse Lang;\nuse DbDongle;\nuse Backend\\Classes\\FilterWidgetBase;\nuse October\\Rain\\Element\\ElementHolder;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse ApplicationException;\n\n/**\n * Group filter\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Group extends FilterWidgetBase\n{\n    const MODE_EXCLUDE = 'exclude';\n    const MODE_INCLUDE = 'include';\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/groupfilter.js');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('group');\n    }\n\n    /**\n     * renderForm the form to use for filtering\n     */\n    public function renderForm()\n    {\n        $this->prepareVars();\n        return $this->makePartial('group_form');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['scope'] = $this->filterScope;\n    }\n\n    /**\n     * getActiveValue\n     */\n    public function getActiveValue()\n    {\n        if (post('clearScope')) {\n            return null;\n        }\n\n        $value = post('Filter');\n        if (!$this->hasPostValue('value')) {\n            return null;\n        }\n\n        $value['value'] = json_decode($value['value'], true);\n        if (!$value['value']) {\n            return null;\n        }\n\n        // @deprecated this is to keep support with v1 API where values were inside the keys\n        $value['value'] = array_combine($value['value'], $value['value']);\n\n        return $value;\n    }\n\n    /**\n     * applyScopeToQuery\n     */\n    public function applyScopeToQuery($query)\n    {\n        $scope = $this->filterScope;\n\n        // Scope\n        if ($scope->modelScope) {\n            $scope->applyScopeMethodToQuery($query);\n            return;\n        }\n\n        // Active value\n        $activeValue = (array) $scope->value;\n        if (!count($activeValue)) {\n            return;\n        }\n\n        // Raw SQL query\n        $sqlCondition = $scope->conditions;\n        if (is_string($sqlCondition)) {\n            $filtered = implode(',', array_build($activeValue, function ($key, $_value) {\n                return [$key, Db::getPdo()->quote($_value)];\n            }));\n\n            $query->whereRaw(DbDongle::parse(strtr($sqlCondition, [\n                ':filtered' => $filtered,\n                ':value' => $filtered,\n            ])));\n            return;\n        }\n\n        // Check for null existence check\n        if (($nullKey = array_search(null, $activeValue)) !== false) {\n            unset($activeValue[$nullKey]);\n        }\n\n        // Default query\n        $activeField = HtmlHelper::nameToDot($this->valueFrom);\n        if ($this->model) {\n            $action = $scope->mode === static::MODE_EXCLUDE ? 'whereDoesntHave' : 'whereHas';\n            $query->{$action}($activeField, function($q) use ($activeValue) {\n                $q->whereIn($q->getModel()->getQualifiedKeyName(), $activeValue);\n            });\n\n            if ($nullKey !== false) {\n                $query->orDoesntHave($activeField);\n            }\n        }\n        elseif ($this->isJsonable) {\n            $action = $scope->mode === static::MODE_EXCLUDE ? 'whereJsonDoesntContain' : 'whereJsonContains';\n            $query->{$action}($this->valueFrom, array_values($activeValue));\n        }\n        else {\n            $action = $scope->mode === static::MODE_EXCLUDE ? 'whereNotIn' : 'whereIn';\n            $query->{$action}($this->valueFrom, $activeValue);\n\n            if ($nullKey !== false) {\n                $query->orWhereNull($this->valueFrom);\n            }\n        }\n    }\n\n    /**\n     * onGetGroupOptions\n     */\n    public function onGetGroupOptions()\n    {\n        $scope = $this->filterScope;\n        $searchQuery = post('search');\n\n        $available = $this->getAvailableOptions($searchQuery);\n        $active = $searchQuery ? [] : $this->filterActiveOptions((array) $scope->value, $available);\n\n        return [\n            'options' => [\n                'available' => $this->optionsToAjax($available),\n                'active' => $this->optionsToAjax($active),\n            ]\n        ];\n    }\n\n    /**\n     * getAvailableOptions returns the available options a scope can use, either from the\n     * model relation or from a supplied array. Optionally apply a search constraint\n     * to the options\n     */\n    protected function getAvailableOptions(?string $searchQuery = null): array\n    {\n        $available = [];\n        $scope = $this->filterScope;\n\n        if ($scope->options || $scope->optionsMethod) {\n            $available = $this->getOptionsFromArray($searchQuery);\n        }\n        else {\n            $nameColumn = $scope->nameFrom;\n            $options = $this->getOptionsFromModel($searchQuery);\n\n            foreach ($options as $option) {\n                $available[$option->getKey()] = $option->{$nameColumn};\n            }\n        }\n\n        if ($scope->emptyOption) {\n            $available = ['' => Lang::get($scope->emptyOption)] + $available;\n        }\n\n        return $available;\n    }\n\n    /**\n     * filterActiveOptions removes any already selected options from the available options,\n     * returns a newly built array\n     */\n    protected function filterActiveOptions(array $activeKeys, array $availableOptions): array\n    {\n        $active = [];\n        foreach ($availableOptions as $id => $option) {\n            if (!in_array($id, $activeKeys)) {\n                continue;\n            }\n\n            $active[$id] = $option;\n        }\n\n        return $active;\n    }\n\n    /**\n     * getOptionsFromModel looks at the model for defined scope items.\n     * @return Collection\n     */\n    protected function getOptionsFromModel($searchQuery = null)\n    {\n        $scope = $this->filterScope;\n        $model = $this->model;\n        $query = $model->newQuery();\n        $query->limit(200);\n\n        // Apply a model scope to the options query\n        if ($scope->optionsScope) {\n            $scope->applyScopeMethodToQuery($query, $scope->optionsScope);\n        }\n\n        // Extensibility\n        $this->getParentFilter()->extendScopeModelQuery($scope, $query);\n\n        if (!$searchQuery) {\n            // If scope has active filter(s) run additional query and merge it with base query\n            if ($scope->value) {\n                $modelIds = array_keys((array) $scope->value);\n                $activeOptions = $model->newQuery()->findMany($modelIds);\n            }\n\n            $modelOptions = isset($activeOptions)\n                ? $query->get()->merge($activeOptions)\n                : $query->get();\n\n            return $modelOptions;\n        }\n\n        $searchFields = [$model->getKeyName(), $scope->nameFrom];\n\n        return $query->searchWhere($searchQuery, $searchFields)->get();\n    }\n\n    /**\n     * getOptionsFromArray looks at the defined set of options for scope items, or the model method.\n     * @return array\n     */\n    protected function getOptionsFromArray($searchQuery = null)\n    {\n        // Load the data\n        $model = $this->model;\n        $scope = $this->filterScope;\n        $options = $scope->optionsMethod ?: $scope->options;\n\n        // Calling via ClassName::method\n        if (is_string($options)) {\n            if (\n                count($staticMethod = explode('::', $options)) === 2 &&\n                is_callable($staticMethod)\n            ) {\n                $options = $staticMethod($model, $scope);\n\n                if (!is_array($options)) {\n                    throw new ApplicationException(Lang::get('backend::lang.field.options_static_method_invalid_value', [\n                        'class' => $staticMethod[0],\n                        'method' => $staticMethod[1]\n                    ]));\n                }\n            }\n            // Calling via $model->method\n            else {\n                $methodName = $options;\n\n                if (!$model->methodExists($methodName)) {\n                    throw new ApplicationException(Lang::get('backend::lang.filter.options_method_not_exists', [\n                        'model'  => get_class($model),\n                        'method' => $methodName,\n                        'filter' => $scope->scopeName\n                    ]));\n                }\n\n                // For passing to events\n                // @deprecated v4 review this interface to closer resemble the form field\n                // interface (FormField and FilterScope)\n                $holder = new ElementHolder($this->getParentFilter()->getScopes());\n                $options = $model->$methodName($holder);\n            }\n        }\n\n        if (!is_array($options)) {\n            $options = [];\n        }\n\n        // Apply the search\n        $searchQuery = Str::lower($searchQuery);\n        if (strlen($searchQuery)) {\n            $options = $this->filterOptionsBySearch($options, $searchQuery);\n        }\n\n        return $options;\n    }\n\n    /**\n     * filterOptionsBySearch filters an array of options by a search term.\n     * @param array $options\n     * @param string $query\n     * @return array\n     */\n    protected function filterOptionsBySearch($options, $query)\n    {\n        $filteredOptions = [];\n\n        $optionMatchesSearch = function ($words, $option) {\n            foreach ($words as $word) {\n                $word = trim($word);\n                if (!strlen($word)) {\n                    continue;\n                }\n\n                if (!Str::contains(Str::lower($option), $word)) {\n                    return false;\n                }\n            }\n\n            return true;\n        };\n\n        // Exact\n        foreach ($options as $index => $option) {\n            if (Str::is(Str::lower($option), $query)) {\n                $filteredOptions[$index] = $option;\n                unset($options[$index]);\n            }\n        }\n\n        // Fuzzy\n        $words = explode(' ', $query);\n        foreach ($options as $index => $option) {\n            if ($optionMatchesSearch($words, $option)) {\n                $filteredOptions[$index] = $option;\n            }\n        }\n\n        return $filteredOptions;\n    }\n\n    /**\n     * optionsToAjax converts a key/pair array to a named array {id: 1, name: 'Foobar'}\n     */\n    protected function optionsToAjax(array $options): array\n    {\n        $processed = [];\n\n        foreach ($options as $id => $result) {\n            $name = is_array($result) ? ($result[0] ?? '') : $result;\n            $processed[] = ['id' => $id, 'name' => __($name)];\n        }\n\n        return $processed;\n    }\n}\n"
  },
  {
    "path": "modules/backend/filterwidgets/Number.php",
    "content": "<?php namespace Backend\\FilterWidgets;\n\nuse Db;\nuse DbDongle;\nuse Backend\\Classes\\FilterWidgetBase;\n\n/**\n * Number filter\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Number extends FilterWidgetBase\n{\n    const CONDITION_EQUALS = 'equals';\n    const CONDITION_BETWEEN = 'between';\n    const CONDITION_GREATER = 'greater';\n    const CONDITION_LESSER = 'lesser';\n\n    /**\n     * init\n     */\n    public function init()\n    {\n        $scope = $this->filterScope;\n\n        if (!$scope->conditions) {\n            $scope->conditions = [\n                self::CONDITION_EQUALS => true,\n                self::CONDITION_BETWEEN => true,\n                self::CONDITION_GREATER => true,\n                self::CONDITION_LESSER => true\n            ];\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('number');\n    }\n\n    /**\n     * renderForm the form to use for filtering\n     */\n    public function renderForm()\n    {\n        $this->prepareVars();\n        return $this->makePartial('number_form');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['scope'] = $this->filterScope;\n    }\n\n    /**\n     * getActiveValue\n     */\n    public function getActiveValue()\n    {\n        if (post('clearScope')) {\n            return null;\n        }\n\n        $value = post('Filter');\n        $condition = post('Filter[condition]');\n\n        if ($condition === self::CONDITION_BETWEEN) {\n            if (!$this->hasPostValue('min') && !$this->hasPostValue('max')) {\n                return null;\n            }\n\n            if (!$this->hasPostValue('min')) {\n                $value['value'] = post('Filter[max]');\n                $value['condition'] = self::CONDITION_LESSER;\n            }\n            elseif (!$this->hasPostValue('max')) {\n                $value['value'] = post('Filter[min]');\n                $value['condition'] = self::CONDITION_GREATER;\n            }\n        }\n        else {\n            if (!$this->hasPostValue('value')) {\n                return null;\n            }\n        }\n\n        return $value;\n    }\n\n    /**\n     * applyScopeToQuery\n     */\n    public function applyScopeToQuery($query)\n    {\n        $scope = $this->filterScope;\n\n        // Scope\n        if ($scope->modelScope) {\n            $scope->applyScopeMethodToQuery($query);\n            return;\n        }\n\n        // Condition\n        $scopeConditions = (array) $scope->conditions;\n        $activeCondition = $scope->condition;\n\n        // Raw SQL query\n        $sqlCondition = $scopeConditions[$activeCondition] ?? null;\n        if (is_string($sqlCondition)) {\n            $query->whereRaw(DbDongle::parse(strtr($sqlCondition, [\n                ':filtered' => $this->parseNumber($scope->value),\n                ':value' => $this->parseNumber($scope->value),\n                ':min' => $this->parseNumber($scope->min),\n                ':max' => $this->parseNumber($scope->max),\n            ])));\n            return;\n        }\n\n        // Default query\n        if ($activeCondition === self::CONDITION_EQUALS) {\n            $query->where($this->valueFrom, $scope->value);\n            return;\n        }\n\n        if ($activeCondition === self::CONDITION_BETWEEN) {\n            $query\n                ->where($this->valueFrom, '>=', $scope->min)\n                ->where($this->valueFrom, '<=', $scope->max);\n            return;\n        }\n\n        if ($activeCondition === self::CONDITION_GREATER) {\n            $query->where($this->valueFrom, '>=', $scope->value);\n            return;\n        }\n\n        if ($activeCondition === self::CONDITION_LESSER) {\n            $query->where($this->valueFrom, '<=', $scope->value);\n            return;\n        }\n    }\n\n    /**\n     * parseNumber for SQL\n     */\n    public function parseNumber($value, array $options = [])\n    {\n        if (!is_numeric($value)) {\n            return '';\n        }\n\n        // Arithmetic operator\n        return +$value;\n    }\n\n    /**\n     * getConditionLang\n     */\n    public function getConditionLang($condition)\n    {\n        switch ($condition) {\n            case self::CONDITION_EQUALS:\n                return __('is equal to');\n\n            case self::CONDITION_BETWEEN:\n                return __('is between');\n\n            case self::CONDITION_GREATER:\n                return __('is greater than');\n\n            case self::CONDITION_LESSER:\n                return __('is less than');\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/filterwidgets/Text.php",
    "content": "<?php namespace Backend\\FilterWidgets;\n\nuse Db;\nuse DbDongle;\nuse Backend\\Classes\\FilterWidgetBase;\n\n/**\n * Text filter\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Text extends FilterWidgetBase\n{\n    const CONDITION_EQUALS = 'equals';\n    const CONDITION_CONTAINS = 'contains';\n\n    /**\n     * init\n     */\n    public function init()\n    {\n        $scope = $this->filterScope;\n\n        if (!$scope->conditions) {\n            $scope->conditions = [\n                self::CONDITION_EQUALS => true,\n                self::CONDITION_CONTAINS => true\n            ];\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('text');\n    }\n\n    /**\n     * renderForm the form to use for filtering\n     */\n    public function renderForm()\n    {\n        $this->prepareVars();\n        return $this->makePartial('text_form');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['scope'] = $this->filterScope;\n    }\n\n    /**\n     * getActiveValue\n     */\n    public function getActiveValue()\n    {\n        if (post('clearScope')) {\n            return null;\n        }\n\n        if (!$this->hasPostValue('value')) {\n            return null;\n        }\n\n        return post('Filter');\n    }\n\n    /**\n     * applyScopeToQuery\n     */\n    public function applyScopeToQuery($query)\n    {\n        $scope = $this->filterScope;\n\n        // Scope\n        if ($scope->modelScope) {\n            $scope->applyScopeMethodToQuery($query);\n            return;\n        }\n\n        // Condition\n        $scopeConditions = (array) $scope->conditions;\n        $activeCondition = $scope->condition;\n        $activeValue = $scope->value;\n\n        // Raw SQL query\n        $sqlCondition = $scopeConditions[$activeCondition] ?? null;\n        if (is_string($sqlCondition)) {\n            $query->whereRaw(DbDongle::parse($sqlCondition, [\n                'value' => $activeValue,\n            ]));\n            return;\n        }\n\n        // Default query\n        if ($activeCondition === self::CONDITION_CONTAINS) {\n            $query->where($this->valueFrom, 'LIKE', '%'.$activeValue.'%');\n            return;\n        }\n\n        $query->where($this->valueFrom, $activeValue);\n    }\n\n    /**\n     * getConditionLang\n     */\n    public function getConditionLang($condition)\n    {\n        switch ($condition) {\n            case self::CONDITION_EQUALS:\n                return __('is equal to');\n\n            case self::CONDITION_CONTAINS:\n                return __('contains');\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/filterwidgets/date/assets/js/datefilter.js",
    "content": "/*\n * DateFilter plugin\n *\n * Data attributes:\n * - data-control=\"datefilter\" - enables the plugin on an element\n * - data-data-locker=\"input#locker\" - Input element to store and restore the chosen color\n *\n * JavaScript API:\n * $('div#someElement').dateFilter({ dataLocker: 'input#locker' })\n *\n * Dependencies:\n * - Some other plugin (filename.js)\n */\n\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype;\n\n    var DateFilter = function(element, options) {\n        this.options = options;\n        this.$el = $(element);\n        this.$pickers = $('[data-datepicker]', this.$el);\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        Base.call(this);\n        this.init();\n    }\n\n    DateFilter.prototype = Object.create(BaseProto);\n    DateFilter.prototype.constructor = DateFilter;\n\n    DateFilter.DEFAULTS = {\n\n    }\n\n    DateFilter.prototype.init = function() {\n        this.dbDateTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n        this.dbDateFormat = 'YYYY-MM-DD';\n\n        this.initRegion();\n        this.initDatePickers();\n    }\n\n    DateFilter.prototype.initDatePickers = function() {\n        var self = this,\n            scopeData = this.$el.data('scope-data');\n\n        this.$pickers.each(function(index, datepicker) {\n            var $datepicker = $(datepicker),\n                defaultValue = self.getDatePickerValue($datepicker);\n\n            var pikadayOptions = {\n                minDate: new Date(scopeData.minDate),\n                maxDate: new Date(scopeData.maxDate),\n                firstDay: scopeData.firstDay,\n                yearRange: scopeData.yearRange,\n                showWeekNumber: scopeData.showWeekNumber,\n                setDefaultDate: defaultValue !== '' ? defaultValue.toDate() : '',\n                format: self.getDateFormat(),\n                i18n: self.getLang('datepicker'),\n                onSelect: function() {\n                    self.onSelectDatePicker.call(self, this, $datepicker);\n                }\n            }\n\n            if (defaultValue !== '') {\n                $datepicker.val(defaultValue.format(self.getDateFormat()));\n            }\n\n            $datepicker.pikaday(pikadayOptions);\n        });\n    }\n\n    DateFilter.prototype.onSelectDatePicker = function(datepicker, $input) {\n        var pickerMoment = datepicker.getMoment(),\n            pickerValue = pickerMoment.format(this.dbDateTimeFormat);\n\n        // Convert from user preference to UTC\n        var momentObj = moment\n            .tz(pickerValue, this.dbDateTimeFormat, this.timezone)\n            .tz(this.appTimezone);\n\n        var lockerValue = momentObj.format(this.dbDateTimeFormat);\n\n        this.setDataLocker($input, lockerValue);\n    }\n\n    DateFilter.prototype.getDatePickerValue = function($datepicker) {\n        var rawValue = $datepicker.val();\n        if (rawValue !== '') {\n            rawValue = this.makeMoment(rawValue, this.getDateFormat());\n        }\n\n        // Look at the locker for the default value\n        if (!rawValue) {\n            rawValue = this.getDataLocker($datepicker)\n            if (rawValue !== '') {\n                rawValue = this.makeMoment(rawValue, this.dbDateFormat);\n            }\n        }\n\n        return rawValue;\n    }\n\n    DateFilter.prototype.makeMoment = function(value, format) {\n        if (value === 'now') {\n            return moment();\n        }\n\n        return moment(value, format);\n    }\n\n    DateFilter.prototype.getDataLocker = function(picker) {\n        var $picker = $(picker),\n            $locker = $('#' + $picker.data('datepicker-target'));\n\n        return $locker.val();\n    }\n\n    DateFilter.prototype.setDataLocker = function(picker, value) {\n        var $picker = $(picker),\n            $locker = $('#' + $picker.data('datepicker-target'));\n\n        $locker.val(value);\n    }\n\n    DateFilter.prototype.initRegion = function() {\n        this.locale = $('meta[name=\"backend-locale\"]').attr('content');\n        this.timezone = $('meta[name=\"backend-timezone\"]').attr('content');\n        this.appTimezone = $('meta[name=\"app-timezone\"]').attr('content');\n\n        if (!this.appTimezone) {\n            this.appTimezone = 'UTC';\n        }\n\n        if (!this.timezone) {\n            this.timezone = 'UTC';\n        }\n\n        // Set both timezones to UTC to disable converting between them\n        var scopeData = this.$el.data('scope-data');\n        if (!scopeData.useTimezone) {\n            this.appTimezone = 'UTC';\n            this.timezone = 'UTC';\n        }\n    }\n\n    DateFilter.prototype.dispose = function() {\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n        this.$el.removeData('oc.datefilter');\n\n        this.$el = null;\n        this.options = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    DateFilter.prototype.getDateFormat = function () {\n        if (this.locale) {\n            return moment()\n                .locale(this.locale)\n                .localeData()\n                .longDateFormat('l');\n        }\n\n        return this.dbDateFormat;\n    }\n\n    DateFilter.prototype.getLang = function(name, defaultValue) {\n        if ($.oc === undefined || $.oc.lang === undefined) {\n            return defaultValue;\n        }\n\n        return $.oc.lang.get(name, defaultValue);\n    }\n\n    // DATEFILTER PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.dateFilter;\n\n    $.fn.dateFilter = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n        this.each(function () {\n            var $this = $(this);\n            var data = $this.data('oc.datefilter');\n            var options = $.extend({}, DateFilter.DEFAULTS, $this.data(), typeof option == 'object' && option);\n            if (!data) $this.data('oc.datefilter', (data = new DateFilter(this, options)));\n            if (typeof option == 'string') result = data[option].apply(data, args);\n            if (typeof result != 'undefined') return false;\n        });\n\n        return result ? result : this;\n    }\n\n    $.fn.dateFilter.Constructor = DateFilter;\n\n    // DATEFILTER NO CONFLICT\n    // =================\n\n    $.fn.dateFilter.noConflict = function () {\n        $.fn.dateFilter = old;\n        return this;\n    }\n\n    // DATEFILTER DATA-API\n    // ===============\n\n    $(document).render(function() {\n        $('[data-control=\"datefilter\"]').dateFilter();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/filterwidgets/date/partials/_date.php",
    "content": "<a\n    href=\"javascript:;\"\n    class=\"filter-scope <?= $scope->scopeValue ? 'active' : '' ?>\"\n    data-scope-name=\"<?= $scope->scopeName ?>\"\n>\n    <span class=\"filter-label\"><?= e($this->getHeaderValue()) ?></span>\n    <?php if ($scope->scopeValue): ?>\n        <span class=\"filter-setting\">1</span>\n    <?php endif ?>\n</a>\n"
  },
  {
    "path": "modules/backend/filterwidgets/date/partials/_date_form.php",
    "content": "<div\n    data-control=\"datefilter\"\n    class=\"filter-box loading-indicator-container size-input-text\"\n    data-scope-data=\"<?= e(json_encode([\n        'minDate' => $scope->minDate,\n        'maxDate' => $scope->maxDate,\n        'firstDay' => $scope->firstDay,\n        'yearRange' => $scope->yearRange,\n        'showWeekNumber' => $scope->showWeekNumber,\n        'useTimezone' => $scope->useTimezone,\n    ])) ?>\"\n>\n    <?php if (is_array($scope->conditions) && count($scope->conditions) === 1): ?>\n        <?php foreach ($scope->conditions as $condition => $value): ?>\n            <div class=\"filter-facet\">\n                <div class=\"facet-item\">\n                    <input type=\"hidden\" name=\"Filter[condition]\" value=\"<?= $condition ?>\" />\n                    <span><?= $this->getConditionLang($condition) ?></span>\n                </div>\n                <?php if ($condition === 'between'): ?>\n                    <?= $this->makePartial('item_between') ?>\n                <?php else: ?>\n                    <?= $this->makePartial('item_single') ?>\n                <?php endif ?>\n            </div>\n        <?php endforeach ?>\n    <?php else: ?>\n        <div class=\"filter-facet\">\n            <div class=\"facet-item is-grow\">\n                <select name=\"Filter[condition]\" class=\"form-control form-control-sm custom-select select-no-search\">\n                    <?php foreach ((array) $scope->conditions as $condition => $value): ?>\n                        <option\n                            value=\"<?= $condition ?>\"\n                            <?= $scope->condition === $condition ? 'selected=\"selected\"' : '' ?>\n                        ><?= $this->getConditionLang($condition) ?></option>\n                    <?php endforeach ?>\n                </select>\n            </div>\n        </div>\n        <div class=\"filter-facet\"\n            data-trigger=\"[name='Filter[condition]']\"\n            data-trigger-action=\"hide\"\n            data-trigger-condition=\"value[between]\"\n            data-trigger-closest-parent=\"form\">\n            <div class=\"facet-item\">\n                <span>└─</span>\n            </div>\n            <?= $this->makePartial('item_single') ?>\n        </div>\n        <div class=\"filter-facet\"\n            data-trigger=\"[name='Filter[condition]']\"\n            data-trigger-action=\"show\"\n            data-trigger-condition=\"value[between]\"\n            data-trigger-closest-parent=\"form\">\n            <div class=\"facet-item\">\n                <span>└─</span>\n            </div>\n            <?= $this->makePartial('item_between') ?>\n        </div>\n    <?php endif ?>\n\n    <div class=\"filter-buttons\">\n        <button class=\"btn btn-sm btn-primary\" data-filter-action=\"apply\">\n            <?= __(\"Apply\") ?>\n        </button>\n        <div class=\"flex-grow-1\"></div>\n        <button class=\"btn btn-sm btn-secondary\" data-filter-action=\"clear\">\n            <?= __(\"Clear\") ?>\n        </button>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/filterwidgets/date/partials/_item_between.php",
    "content": "<div class=\"facet-item\">\n    <div class=\"input-with-icon size-sm right-align\">\n        <i class=\"icon icon-calendar\"></i>\n        <input\n            type=\"text\"\n            name=\"Filter[afterRaw]\"\n            value=\"<?= e($scope->afterRaw) ?>\"\n            class=\"form-control form-control-sm popup-allow-focus w-120\"\n            autocomplete=\"off\"\n            data-datepicker\n            data-datepicker-target=\"<?= $scope->getId('after') ?>\" />\n        <input\n            type=\"hidden\"\n            name=\"Filter[after]\"\n            id=\"<?= $scope->getId('after') ?>\"\n            value=\"<?= e($scope->after) ?>\"\n            />\n    </div>\n</div>\n<div class=\"facet-item\">\n    <span><?= __('and') ?></span>\n</div>\n<div class=\"facet-item\">\n    <div class=\"input-with-icon size-sm right-align\">\n        <i class=\"icon icon-calendar\"></i>\n        <input\n            type=\"text\"\n            name=\"Filter[beforeRaw]\"\n            value=\"<?= e($scope->beforeRaw) ?>\"\n            class=\"form-control form-control-sm popup-allow-focus w-120\"\n            autocomplete=\"off\"\n            data-datepicker\n            data-datepicker-target=\"<?= $scope->getId('before') ?>\" />\n        <input\n            type=\"hidden\"\n            name=\"Filter[before]\"\n            id=\"<?= $scope->getId('before') ?>\"\n            value=\"<?= e($scope->before) ?>\"\n            />\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/filterwidgets/date/partials/_item_single.php",
    "content": "<div class=\"facet-item\">\n    <div class=\"input-with-icon size-sm right-align w-120\">\n        <i class=\"icon icon-calendar\"></i>\n        <input\n            type=\"text\"\n            name=\"Filter[valueRaw]\"\n            value=\"<?= e($scope->valueRaw) ?>\"\n            class=\"form-control form-control-sm popup-allow-focus\"\n            autocomplete=\"off\"\n            data-datepicker\n            data-datepicker-target=\"<?= $scope->getId('value') ?>\" />\n        <input\n            type=\"hidden\"\n            name=\"Filter[value]\"\n            id=\"<?= $scope->getId('value') ?>\"\n            value=\"<?= e($scope->value) ?>\"\n        />\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/filterwidgets/group/assets/js/groupfilter.js",
    "content": "/*\n * GroupFilter plugin\n *\n * Data attributes:\n * - data-control=\"groupfilter\" - enables the plugin on an element\n * - data-data-locker=\"input#locker\" - Input element to store and restore the chosen color\n *\n * JavaScript API:\n * $('div#someElement').groupFilter({ dataLocker: 'input#locker' })\n *\n * Dependencies:\n * - Some other plugin (filename.js)\n */\n\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype;\n\n    var GroupFilter = function(element, options) {\n        this.options = options;\n        this.$el = $(element);\n        this.$dataLocker = $('[data-groupfilter-datalocker]:first', this.$el);\n\n        this.scopeValues = [];\n        this.scopeAvailable = [];\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        Base.call(this);\n        this.init();\n    }\n\n    GroupFilter.prototype = Object.create(BaseProto);\n    GroupFilter.prototype.constructor = GroupFilter;\n\n    GroupFilter.DEFAULTS = {\n        optionsHandler: null,\n        groupTemplate: null\n    }\n\n    GroupFilter.prototype.init = function() {\n        this.$el.on('click', '.filter-items > ul > li', this.proxy(this.onSelectItem));\n        this.$el.on('click', '.filter-active-items > ul > li', this.proxy(this.onDeselectItem));\n        this.$el.on('ajaxDone', 'input.filter-search-input', this.proxy(this.onSearchAjaxDone));\n\n        this.renderFilter();\n        this.focusSearch();\n\n        this.scopeValues = this.getDataLockerValue();\n    }\n\n    GroupFilter.prototype.dispose = function() {\n        this.$el.off('click', '.filter-items > ul > li', this.proxy(this.onSelectItem));\n        this.$el.off('click', '.filter-active-items > ul > li', this.proxy(this.onDeselectItem));\n        this.$el.off('ajaxDone', 'input.filter-search-input', this.proxy(this.onSearchAjaxDone));\n\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n        this.$el.removeData('oc.groupfilter');\n\n        this.$el = null;\n        this.options = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    GroupFilter.prototype.onSearchAjaxDone = function(ev, context, data) {\n        this.filterAvailable(data.options.available);\n    }\n\n    GroupFilter.prototype.onSelectItem = function(ev) {\n        var $item = $(ev.target).closest('li');\n        this.selectItem($item);\n    }\n\n    GroupFilter.prototype.onDeselectItem = function(ev) {\n        var $item = $(ev.target).closest('li');\n        this.selectItem($item, true);\n    }\n\n    GroupFilter.prototype.selectItem = function($item, isDeselect) {\n        var itemId = $item.data('item-id'),\n            $otherContainer = isDeselect\n            ? $item.closest('.control-filter-popover').find('.filter-items:first > ul')\n            : $item.closest('.control-filter-popover').find('.filter-active-items:first > ul');\n\n        if (isDeselect) {\n            $(`[data-item-id=\"${itemId}\"]`, $otherContainer).removeClass('oc-hide');\n            $item.remove();\n        }\n        else {\n            $item\n                .clone()\n                .addClass('animate-enter')\n                .prependTo($otherContainer)\n                .one('animationend', function() {\n                    $(this).removeClass('animate-enter');\n                });\n\n            $item.addClass('oc-hide');\n        }\n\n        var active = this.scopeValues,\n            available = this.scopeAvailable,\n            fromItems = isDeselect ? active : available,\n            testFunc = function(active){ return active.id == itemId },\n            item = $.grep(fromItems, testFunc).pop(),\n            filtered = $.grep(fromItems, testFunc, true);\n\n        if (!item) {\n            item = { 'id': itemId, 'name': $item.text() };\n        }\n\n        if (isDeselect) {\n            this.scopeValues = filtered;\n            this.scopeAvailable.push(item);\n        }\n        else {\n            this.scopeAvailable = filtered;\n            this.scopeValues.push(item);\n        }\n\n        this.setDataLockerValue();\n\n        this.focusSearch();\n    }\n\n    GroupFilter.prototype.getDataLockerValue = function() {\n        var lockerVal = this.$dataLocker.val();\n        return lockerVal ? JSON.parse(lockerVal) : [];\n    }\n\n    GroupFilter.prototype.setDataLockerValue = function() {\n        var ids = [];\n\n        $.each(this.scopeValues, function(key, val) {\n            ids.push(val.id);\n        });\n\n        this.$dataLocker.val(JSON.stringify(ids));\n    }\n\n    GroupFilter.prototype.focusSearch = function() {\n        if ('ontouchstart' in window || navigator.maxTouchPoints > 0) {\n            return;\n        }\n\n        var $input = $('input.filter-search-input', this.$el),\n            length = $input.val().length;\n\n        $input.focus();\n        $input.get(0).setSelectionRange(length, length);\n    }\n\n    GroupFilter.prototype.renderFilter = function() {\n        var self = this,\n            data = {\n                loading: true,\n                optionsHandler: this.options.optionsHandler\n            };\n\n        $('[data-groupfilter-container]', this.$el)\n            .html(Mustache.render(this.getGroupTemplate(), data));\n\n        this.$el.request(this.options.optionsHandler, {\n            success: function(data) {\n                this.success(data);\n                self.fillOptions(data.options);\n            }\n        });\n    }\n\n    GroupFilter.prototype.fillOptions = function(data) {\n        if (!data.active) {\n            data.active = [];\n        }\n\n        if (!data.available) {\n            data.available = [];\n        }\n\n        this.scopeValues = data.active;\n        this.scopeAvailable = data.available;\n\n        // Inject available\n        var $container = $('.filter-items > ul:first', this.$el).empty();\n        this.addItemsToListElement($container, data.available, data.active);\n\n        // Inject active\n        var $container = $('.filter-active-items > ul:first', this.$el);\n        this.addItemsToListElement($container, data.active);\n    }\n\n    GroupFilter.prototype.filterAvailable = function(available) {\n        if (!this.scopeValues) {\n            return;\n        }\n\n        var $container = $('.filter-items > ul', this.$el).empty();\n        this.addItemsToListElement($container, available, this.scopeValues);\n    }\n\n    GroupFilter.prototype.addItemsToListElement = function($ul, items, selectedItems) {\n        $.each(items, function(key, obj) {\n            var item = $('<li />')\n                .attr('data-item-id', obj.id)\n                .append(\n                    $('<a />')\n                        .attr('href', 'javascript:;')\n                        .text(obj.name)\n                );\n\n            $ul.append(item);\n        });\n\n        if (selectedItems) {\n            $.each(selectedItems, function (key, obj) {\n                $(`[data-item-id=\"${obj.id}\"]`, $ul).addClass('oc-hide');\n            });\n        }\n    }\n\n    GroupFilter.prototype.getGroupTemplate = function() {\n        return $(this.options.groupTemplate).html();\n    }\n\n    // GROUPFILTER PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.groupFilter\n\n    $.fn.groupFilter = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.groupfilter')\n            var options = $.extend({}, GroupFilter.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.groupfilter', (data = new GroupFilter(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        })\n\n        return result ? result : this\n    }\n\n    $.fn.groupFilter.Constructor = GroupFilter\n\n    // GROUPFILTER NO CONFLICT\n    // =================\n\n    $.fn.groupFilter.noConflict = function () {\n        $.fn.groupFilter = old\n        return this\n    }\n\n    // GROUPFILTER DATA-API\n    // ===============\n\n    $(document).render(function() {\n        $('[data-control=\"groupfilter\"]').groupFilter()\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/filterwidgets/group/partials/_group.php",
    "content": "<a\n    href=\"javascript:;\"\n    class=\"filter-scope <?= $scope->scopeValue ? 'active' : '' ?>\"\n    data-scope-name=\"<?= $scope->scopeName ?>\"\n>\n    <span class=\"filter-label\"><?= e($this->getHeaderValue()) ?></span>\n    <?php if ($scope->scopeValue): ?>\n        <span class=\"filter-setting\"><?= count((array) $scope->value) ?></span>\n    <?php endif ?>\n</a>\n"
  },
  {
    "path": "modules/backend/filterwidgets/group/partials/_group_form.php",
    "content": "<div\n    data-control=\"groupfilter\"\n    data-options-handler=\"<?= $this->getEventHandler('onGetGroupOptions') ?>\"\n    data-group-template=\"#<?= $this->getId('groupTemplate') ?>\"\n>\n    <input\n        type=\"hidden\"\n        name=\"Filter[value]\"\n        value=\"<?= $scope->value ? e(json_encode($scope->value)) : '' ?>\"\n        data-groupfilter-datalocker />\n    <div data-groupfilter-container></div>\n</div>\n\n<script type=\"text/template\" id=\"<?= $this->getId('groupTemplate') ?>\">\n    <?php if ($scope->matchMode === 'toggle' || $scope->matchMode === true): ?>\n        <div class=\"filter-mode\">\n            <div class=\"control-balloon-selector form-control-sm d-block p-2\" data-control=\"balloon-selector\">\n                <ul class=\"d-block m-0\">\n                    <li\n                        class=\"w-50 text-center <?= !$scope->mode || $scope->mode === 'include' ? 'active' : '' ?>\"\n                        data-value=\"include\">\n                        <i class=\"icon-plus me-1\"></i> <?= __(\"Includes\") ?>\n                    </li>\n                    <li\n                        class=\"w-50 text-center <?= $scope->mode === 'exclude' ? 'active' : '' ?>\"\n                        data-value=\"exclude\">\n                        <i class=\"icon-minus me-1\"></i> <?= __(\"Excludes\") ?>\n                    </li>\n                </ul>\n                <input type=\"hidden\" name=\"Filter[mode]\" value=\"<?= $scope->mode ?: 'include' ?>\">\n            </div>\n        </div>\n    <?php else: ?>\n        <input type=\"hidden\" name=\"Filter[mode]\" value=\"<?= $scope->matchMode ?: 'include' ?>\">\n    <?php endif ?>\n    <div class=\"filter-search search-input-container storm-icon-pseudo loading-indicator-container size-input-text\">\n        <input\n            type=\"text\"\n            name=\"search\"\n            autocomplete=\"off\"\n            class=\"filter-search-input form-control popup-allow-focus\"\n            data-request=\"{{ optionsHandler }}\"\n            data-load-indicator-opaque\n            data-load-indicator\n            data-track-input />\n        <div class=\"filter-items\">\n            <ul>\n                {{#available}}\n                    <li data-item-id=\"{{ id }}\"><a href=\"javascript:;\">{{ name }}</a></li>\n                {{/available}}\n                {{#loading}}\n                    <li class=\"loading\"><span></span></li>\n                {{/loading}}\n            </ul>\n        </div>\n        <div class=\"filter-active-items\">\n            <ul>\n                {{#active}}\n                    <li data-item-id=\"{{ id }}\"><a href=\"javascript:;\">{{ name }}</a></li>\n                {{/active}}\n            </ul>\n        </div>\n        <div class=\"filter-buttons\">\n            <button class=\"btn btn-sm btn-primary\" data-filter-action=\"apply\">\n                <?= __(\"Apply\") ?>\n            </button>\n            <div class=\"flex-grow-1\"></div>\n            <button class=\"btn btn-sm btn-secondary\" data-filter-action=\"clear\">\n                <?= __(\"Clear\") ?>\n            </button>\n        </div>\n    </div>\n</script>\n"
  },
  {
    "path": "modules/backend/filterwidgets/number/partials/_item_between.php",
    "content": "<div class=\"facet-item\">\n    <input\n        name=\"Filter[min]\"\n        type=\"number\"\n        value=\"<?= e($scope->min) ?>\"\n        class=\"form-control form-control-sm popup-allow-focus w-90\"\n        autocomplete=\"off\" />\n</div>\n<div class=\"facet-item\">\n    <span><?= __('and') ?></span>\n</div>\n<div class=\"facet-item\">\n    <input\n        name=\"Filter[max]\"\n        type=\"number\"\n        value=\"<?= e($scope->max) ?>\"\n        class=\"form-control form-control-sm popup-allow-focus w-90\"\n        autocomplete=\"off\" />\n</div>\n"
  },
  {
    "path": "modules/backend/filterwidgets/number/partials/_item_single.php",
    "content": "<div class=\"facet-item\">\n    <input\n        name=\"Filter[value]\"\n        type=\"number\"\n        value=\"<?= e($scope->value) ?>\"\n        class=\"form-control form-control-sm popup-allow-focus w-90\"\n        autocomplete=\"off\" />\n</div>\n"
  },
  {
    "path": "modules/backend/filterwidgets/number/partials/_number.php",
    "content": "<a\n    href=\"javascript:;\"\n    class=\"filter-scope <?= $scope->scopeValue ? 'active' : '' ?>\"\n    data-scope-name=\"<?= $scope->scopeName ?>\"\n>\n    <span class=\"filter-label\"><?= e($this->getHeaderValue()) ?></span>\n    <?php if ($scope->scopeValue): ?>\n        <span class=\"filter-setting\">1</span>\n    <?php endif ?>\n</a>\n"
  },
  {
    "path": "modules/backend/filterwidgets/number/partials/_number_form.php",
    "content": "<div class=\"filter-box loading-indicator-container size-input-text\">\n    <?php if (is_array($scope->conditions) && count($scope->conditions) === 1): ?>\n        <?php foreach ($scope->conditions as $condition => $value): ?>\n            <div class=\"filter-facet\">\n                <div class=\"facet-item\">\n                    <input type=\"hidden\" name=\"Filter[condition]\" value=\"<?= $condition ?>\" />\n                    <span><?= $this->getConditionLang($condition) ?></span>\n                </div>\n                <?php if ($condition === 'between'): ?>\n                    <?= $this->makePartial('item_between') ?>\n                <?php else: ?>\n                    <?= $this->makePartial('item_single') ?>\n                <?php endif ?>\n            </div>\n        <?php endforeach ?>\n    <?php else: ?>\n        <div class=\"filter-facet\">\n            <div class=\"facet-item is-grow\">\n                <select name=\"Filter[condition]\" class=\"form-control form-control-sm custom-select select-no-search\">\n                    <?php foreach ((array) $scope->conditions as $condition => $value): ?>\n                        <option\n                            value=\"<?= $condition ?>\"\n                            <?= $scope->condition === $condition ? 'selected=\"selected\"' : '' ?>\n                        ><?= $this->getConditionLang($condition) ?></option>\n                    <?php endforeach ?>\n                </select>\n            </div>\n        </div>\n        <div class=\"filter-facet\"\n            data-trigger=\"[name='Filter[condition]']\"\n            data-trigger-action=\"hide\"\n            data-trigger-condition=\"value[between]\"\n            data-trigger-closest-parent=\"form\">\n            <div class=\"facet-item\">\n                <span>└─</span>\n            </div>\n            <?= $this->makePartial('item_single') ?>\n        </div>\n        <div class=\"filter-facet\"\n            data-trigger=\"[name='Filter[condition]']\"\n            data-trigger-action=\"show\"\n            data-trigger-condition=\"value[between]\"\n            data-trigger-closest-parent=\"form\">\n            <div class=\"facet-item\">\n                <span>└─</span>\n            </div>\n            <?= $this->makePartial('item_between') ?>\n        </div>\n    <?php endif ?>\n\n    <div class=\"filter-buttons\">\n        <button class=\"btn btn-sm btn-primary\" data-filter-action=\"apply\">\n            <?= __(\"Apply\") ?>\n        </button>\n        <div class=\"flex-grow-1\"></div>\n        <button class=\"btn btn-sm btn-secondary\" data-filter-action=\"clear\">\n            <?= __(\"Clear\") ?>\n        </button>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/filterwidgets/text/partials/_item_single.php",
    "content": "<div class=\"facet-item is-grow\">\n    <input\n        name=\"Filter[value]\"\n        value=\"<?= e($scope->value) ?>\"\n        class=\"form-control form-control-sm popup-allow-focus\"\n        autocomplete=\"off\"\n        placeholder=\"\" />\n</div>\n"
  },
  {
    "path": "modules/backend/filterwidgets/text/partials/_text.php",
    "content": "<a\n    href=\"javascript:;\"\n    class=\"filter-scope <?= $scope->scopeValue ? 'active' : '' ?>\"\n    data-scope-name=\"<?= $scope->scopeName ?>\"\n>\n    <span class=\"filter-label\"><?= e($this->getHeaderValue()) ?></span>\n    <?php if ($scope->scopeValue): ?>\n        <span class=\"filter-setting\">1</span>\n    <?php endif ?>\n</a>\n"
  },
  {
    "path": "modules/backend/filterwidgets/text/partials/_text_form.php",
    "content": "<div class=\"filter-box loading-indicator-container size-input-text\">\n    <?php if (is_array($scope->conditions) && count($scope->conditions) === 1): ?>\n        <?php foreach ($scope->conditions as $condition => $value): ?>\n            <div class=\"filter-facet\">\n                <div class=\"facet-item\">\n                    <input type=\"hidden\" name=\"Filter[condition]\" value=\"<?= $condition ?>\" />\n                    <span><?= $this->getConditionLang($condition) ?></span>\n                </div>\n                <?= $this->makePartial('item_single') ?>\n            </div>\n        <?php endforeach ?>\n    <?php else: ?>\n        <div class=\"filter-facet\">\n            <div class=\"facet-item is-grow\">\n                <select name=\"Filter[condition]\" class=\"form-control form-control-sm custom-select select-no-search\">\n                    <?php foreach ((array) $scope->conditions as $condition => $value): ?>\n                        <option\n                            value=\"<?= $condition ?>\"\n                            <?= $scope->condition === $condition ? 'selected=\"selected\"' : '' ?>\n                        ><?= $this->getConditionLang($condition) ?></option>\n                    <?php endforeach ?>\n                </select>\n            </div>\n        </div>\n        <div class=\"filter-facet\">\n            <div class=\"facet-item\">\n                <span>└─</span>\n            </div>\n            <?= $this->makePartial('item_single') ?>\n        </div>\n    <?php endif ?>\n\n    <div class=\"filter-buttons\">\n        <button class=\"btn btn-sm btn-primary\" data-filter-action=\"apply\">\n            <?= __(\"Apply\") ?>\n        </button>\n        <div class=\"flex-grow-1\"></div>\n        <button class=\"btn btn-sm btn-secondary\" data-filter-action=\"clear\">\n            <?= __(\"Clear\") ?>\n        </button>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/CodeEditor.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Backend\\Models\\Preference as BackendPreference;\nuse Backend\\Classes\\FormWidgetBase;\n\n/**\n * CodeEditor renders a field for editing code\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CodeEditor extends FormWidgetBase\n{\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string language code to display (php, twig)\n     */\n    public $language = 'php';\n\n    /**\n     * @var bool showGutter determines whether the gutter is visible.\n     */\n    public $showGutter = true;\n\n    /**\n     * @var string wordWrap mode: off, fluid, 40, 80.\n     */\n    public $wordWrap = 'fluid';\n\n    /**\n     * @var string codeFolding mode: manual, markbegin, markbeginend.\n     */\n    public $codeFolding = 'manual';\n\n    /**\n     * @var bool autoClosing automatically close tags and special characters,\n     * like quotation marks, parenthesis, or brackets.\n     */\n    public $autoClosing = true;\n\n    /**\n     * @var bool useSoftTabs indicates whether the the editor uses spaces for indentation.\n     */\n    public $useSoftTabs = true;\n\n    /**\n     * @var bool tabSize sets the size of the indentation.\n     */\n    public $tabSize = 4;\n\n    /**\n     * @var int fontSize sets the font size.\n     */\n    public $fontSize = 12;\n\n    /**\n     * @var int margin sets the editor margin size.\n     */\n    public $margin = 0;\n\n    /**\n     * @var string theme to use.\n     */\n    public $theme = 'twilight';\n\n    /**\n     * @var bool showInvisibles characters.\n     */\n    public $showInvisibles = false;\n\n    /**\n     * @var bool highlightActiveLine highlights the active line.\n     */\n    public $highlightActiveLine = true;\n\n    /**\n     * @var bool readOnly, if true, the editor is set to read-only mode\n     */\n    public $readOnly = false;\n\n    /**\n     * @var string autocompletion mode: manual, basic, live.\n     */\n    public $autocompletion = 'manual';\n\n    /**\n     * @var bool enableSnippets ,if true, the editor activate use Snippets\n     */\n    public $enableSnippets = true;\n\n    /**\n     * @var bool displayIndentGuides, if true, the editor show Indent Guides\n     */\n    public $displayIndentGuides = true;\n\n    /**\n     * @var bool showPrintMargin, if true, the editor show Print Margin\n     */\n    public $showPrintMargin = false;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'codeeditor';\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->applyEditorPreferences();\n\n        if ($this->formField->disabled) {\n            $this->readOnly = true;\n        }\n\n        $this->fillFromConfig([\n            'language',\n            'showGutter',\n            'wordWrap',\n            'codeFolding',\n            'autoClosing',\n            'useSoftTabs',\n            'tabSize',\n            'fontSize',\n            'margin',\n            'theme',\n            'showInvisibles',\n            'highlightActiveLine',\n            'readOnly',\n            'autocompletion',\n            'enableSnippets',\n            'displayIndentGuides',\n            'showPrintMargin'\n        ]);\n\n        // Normalize boolean values for wordWrap\n        if ($this->wordWrap === true || $this->wordWrap === '1') {\n            $this->wordWrap = 'fluid';\n        }\n        elseif ($this->wordWrap === false || $this->wordWrap === '0') {\n            $this->wordWrap = 'off';\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('codeeditor');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['fontSize'] = $this->fontSize;\n        $this->vars['wordWrap'] = $this->wordWrap;\n        $this->vars['codeFolding'] = $this->codeFolding;\n        $this->vars['autoClosing'] = $this->autoClosing;\n        $this->vars['tabSize'] = $this->tabSize;\n        $this->vars['theme'] = $this->theme;\n        $this->vars['showInvisibles'] = $this->showInvisibles;\n        $this->vars['highlightActiveLine'] = $this->highlightActiveLine;\n        $this->vars['useSoftTabs'] = $this->useSoftTabs;\n        $this->vars['showGutter'] = $this->showGutter;\n        $this->vars['language'] = $this->language;\n        $this->vars['margin'] = $this->margin;\n        $this->vars['stretch'] = $this->formField->stretch;\n        $this->vars['size'] = $this->formField->size;\n        $this->vars['readOnly'] = $this->readOnly;\n        $this->vars['autocompletion'] = $this->autocompletion;\n        $this->vars['enableSnippets'] = $this->enableSnippets;\n        $this->vars['displayIndentGuides'] = $this->displayIndentGuides;\n        $this->vars['showPrintMargin'] = $this->showPrintMargin;\n\n        $this->vars['value'] = $this->getLoadValue();\n        $this->vars['name'] = $this->getFieldName();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/codeeditor.css');\n        $this->addJs('js/build-min.js');\n    }\n\n    /**\n     * Looks at the user preferences and overrides any set values.\n     * @return void\n     */\n    protected function applyEditorPreferences()\n    {\n        // Load the editor system settings\n        $preferences = BackendPreference::instance();\n\n        $this->fontSize = $preferences->editor_font_size;\n        $this->wordWrap = $preferences->editor_word_wrap;\n        $this->codeFolding = $preferences->editor_code_folding;\n        $this->autoClosing = $preferences->editor_auto_closing;\n        $this->tabSize = $preferences->editor_tab_size;\n        $this->theme = $preferences->editor_theme;\n        $this->showInvisibles = $preferences->editor_show_invisibles;\n        $this->highlightActiveLine = $preferences->editor_highlight_active_line;\n        $this->useSoftTabs = !$preferences->editor_use_hard_tabs;\n        $this->showGutter = $preferences->editor_show_gutter;\n        $this->autocompletion = $preferences->editor_autocompletion;\n        $this->displayIndentGuides = $preferences->editor_display_indent_guides;\n        $this->showPrintMargin = $preferences->editor_show_print_margin;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/ColorPicker.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Lang;\nuse Backend\\Classes\\FormWidgetBase;\nuse ApplicationException;\n\n/**\n * ColorPicker renders a color picker field.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ColorPicker extends FormWidgetBase\n{\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var array availableColors by default\n     */\n    public $availableColors = [\n        '#1abc9c', '#16a085',\n        '#2ecc71', '#27ae60',\n        '#3498db', '#2980b9',\n        '#9b59b6', '#8e44ad',\n        '#34495e', '#2b3e50',\n        '#f1c40f', '#f39c12',\n        '#e67e22', '#d35400',\n        '#e74c3c', '#c0392b',\n        '#ecf0f1', '#bdc3c7',\n        '#95a5a6', '#7f8c8d',\n    ];\n\n    /**\n     * @var bool allowEmpty value\n     */\n    public $allowEmpty = false;\n\n    /**\n     * @var bool allowCustom value\n     */\n    public $allowCustom = true;\n\n    /**\n     * @var bool showAlpha opacity slider\n     */\n    public $showAlpha = false;\n\n    /**\n     * @var bool|null showInput displays an input and disables the available colors.\n     */\n    public $showInput;\n\n    /**\n     * @var bool readOnly if true, the color picker is set to read-only mode\n     */\n    public $readOnly = false;\n\n    /**\n     * @var bool disabled if true, the color picker is set to disabled mode\n     */\n    public $disabled = false;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'colorpicker';\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'availableColors',\n            'allowCustom',\n            'allowEmpty',\n            'showInput',\n            'showAlpha',\n            'readOnly',\n            'disabled',\n        ]);\n\n        // @deprecated remove default colors with showInput true as default (v4)\n        // when colors provided, even as empty array, showInput becomes false -sg\n        if ($this->availableColors === false && $this->showInput === null) {\n            $this->showInput = true;\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('colorpicker');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['name'] = $this->getFieldName();\n        $this->vars['value'] = $value = $this->getLoadValue();\n        $this->vars['availableColors'] = $availableColors = $this->getAvailableColors();\n        $this->vars['allowCustom'] = $this->allowCustom;\n        $this->vars['allowEmpty'] = $this->allowEmpty;\n        $this->vars['showAlpha'] = $this->showAlpha;\n        $this->vars['showInput'] = $this->showInput;\n        $this->vars['readOnly'] = $this->readOnly;\n        $this->vars['disabled'] = $this->disabled;\n        $this->vars['isCustomColor'] = !in_array($value, $availableColors);\n    }\n\n    /**\n     * getAvailableColors as a list of available colors.\n     */\n    protected function getAvailableColors(): array\n    {\n        $availableColors = $this->availableColors;\n        if (is_array($availableColors)) {\n            return $availableColors;\n        }\n\n        if (is_string($availableColors) && strlen($availableColors)) {\n            if (!$this->model->methodExists($availableColors)) {\n                throw new ApplicationException(Lang::get('backend::lang.field.colors_method_not_exists', [\n                    'model' => get_class($this->model),\n                    'method' => $availableColors,\n                    'field' => $this->formField->fieldName\n                ]));\n            }\n\n            // @deprecated just pass form field here -sg\n            return (array) $this->model->{$availableColors}(\n                $this->formField->fieldName,\n                $this->formField->value,\n                $this->formField->config\n            );\n        }\n\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('vendor/spectrum/spectrum.css');\n        $this->addJs('vendor/spectrum/spectrum.js');\n        $this->addCss('css/colorpicker.css');\n        $this->addJs('js/colorpicker.js');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        if (!strlen($value)) {\n            return null;\n        }\n\n        return $this->parseAsHex($value);\n    }\n\n    /**\n     * parseAsHex ensures saved value is a valid hex color\n     */\n    protected function parseAsHex($value)\n    {\n        return '#' . preg_replace(\"/[^a-zA-Z0-9]+/\", '', $value);\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/DataTable.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Lang;\nuse Backend\\Classes\\FormWidgetBase;\n\n/**\n * Data Table\n * Renders a table field.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DataTable extends FormWidgetBase\n{\n    use \\Backend\\FormWidgets\\DataTable\\LegacyDataTable;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string Table size\n     */\n    public $size = 'large';\n\n    /**\n     * @var bool Allow rows to be sorted\n     * @todo Not implemented...\n     */\n    public $rowSorting = false;\n\n    /**\n     * @var bool useLegacy uses legacy Table widget instead of Handsontable\n     */\n    public $useLegacy = false;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'datatable';\n\n    /**\n     * @var array Processed columns\n     */\n    protected $processedColumns = [];\n\n    /**\n     * @var array Columns requiring AJAX options\n     */\n    protected $ajaxColumns = [];\n\n    /**\n     * @var array Column dependencies\n     */\n    protected $columnDependencies = [];\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        if ($this->useLegacy) {\n            return;\n        }\n\n        $this->addCss('css/datatable-handsontable.css');\n        $this->addJs('js/datatable-handsontable.js', ['type' => 'module']);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'size',\n            'rowSorting',\n            'useLegacy',\n        ]);\n\n        if ($this->useLegacy) {\n            $this->table = $this->makeLegacyTableWidget();\n            $this->table->bindToController();\n        }\n        else {\n            $this->processColumns();\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        if ($this->useLegacy) {\n            return $this->makePartial('datatable');\n        }\n\n        return $this->makePartial('datatable_handsontable');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        if ($this->useLegacy) {\n            $this->prepareLegacyVars();\n        }\n        else {\n            $this->vars['name'] = $this->getFieldName();\n            $this->vars['value'] = $this->getLoadValue() ?: [];\n            $this->vars['columns'] = $this->processedColumns;\n            $this->vars['colHeaders'] = array_column($this->processedColumns, 'title');\n            $this->vars['ajaxColumns'] = $this->ajaxColumns;\n            $this->vars['columnDependencies'] = $this->columnDependencies;\n            $this->vars['hotOptions'] = $this->buildOptions();\n            $this->vars['adding'] = $this->formField->getConfig('adding', true);\n            $this->vars['deleting'] = $this->formField->getConfig('deleting', true);\n            $this->vars['toolbar'] = $this->formField->getConfig('toolbar', true);\n            $this->vars['searching'] = $this->formField->getConfig('searching', false);\n            $this->vars['csvExport'] = $this->formField->getConfig('csvExport', false);\n            $this->vars['csvImport'] = $this->formField->getConfig('csvImport', false);\n        }\n    }\n\n    //\n    // Column Processing\n    //\n\n    /**\n     * processColumns processes column definitions into Handsontable format\n     */\n    protected function processColumns()\n    {\n        $columns = $this->formField->getConfig('columns', []);\n\n        foreach ($columns as $columnName => $config) {\n            $config = (array) $config;\n            $column = $this->buildColumn($columnName, $config);\n            $this->processedColumns[] = $column;\n\n            if ($this->columnNeedsAjax($config)) {\n                $this->ajaxColumns[] = $columnName;\n            }\n\n            if (isset($config['dependsOn'])) {\n                $this->columnDependencies[$columnName] = $config['dependsOn'];\n            }\n        }\n    }\n\n    /**\n     * buildColumn builds a single column config for Handsontable\n     */\n    protected function buildColumn(string $name, array $config): array\n    {\n        $column = [\n            'data' => $name,\n            'title' => isset($config['title']) ? Lang::get($config['title']) : $name,\n            'readOnly' => $config['readOnly'] ?? false,\n        ];\n\n        if (isset($config['width'])) {\n            $column['width'] = (int) str_replace('px', '', $config['width']);\n        }\n\n        $type = $config['type'] ?? 'string';\n        $column = array_merge($column, $this->getTypeConfig($type, $config));\n\n        if (isset($config['validation'])) {\n            $column['_validation'] = $config['validation'];\n        }\n\n        return $column;\n    }\n\n    /**\n     * getTypeConfig maps DataTable column types to Handsontable types\n     */\n    protected function getTypeConfig(string $type, array $config): array\n    {\n        switch ($type) {\n            case 'checkbox':\n                return ['type' => 'checkbox'];\n\n            case 'dropdown':\n                $strict = ($config['strict'] ?? true) !== false;\n                $typeConfig = [\n                    'type' => $strict ? 'dropdown' : 'autocomplete',\n                    'strict' => $strict,\n                    'filter' => !$strict,\n                ];\n                if (isset($config['options']) && is_array($config['options'])) {\n                    $typeConfig['source'] = array_values($config['options']);\n                    $typeConfig['_optionMap'] = $config['options'];\n                }\n                return $typeConfig;\n\n            case 'autocomplete':\n                return ['type' => 'autocomplete', 'strict' => false, 'filter' => true];\n\n            case 'date':\n                return [\n                    'type' => 'date',\n                    'dateFormat' => $config['dateFormat'] ?? 'YYYY-MM-DD',\n                    'correctFormat' => true,\n                ];\n\n            case 'time':\n                return [\n                    'type' => 'time',\n                    'timeFormat' => $config['timeFormat'] ?? 'HH:mm',\n                    'correctFormat' => true,\n                ];\n\n            case 'numeric':\n                return ['type' => 'numeric'];\n\n            default:\n                return ['type' => 'text'];\n        }\n    }\n\n    /**\n     * columnNeedsAjax determines if a column needs AJAX-loaded options\n     */\n    protected function columnNeedsAjax(array $config): bool\n    {\n        $type = $config['type'] ?? 'string';\n        if (!in_array($type, ['dropdown', 'autocomplete'])) {\n            return false;\n        }\n\n        return !isset($config['options']) || is_string($config['options']);\n    }\n\n    /**\n     * buildOptions builds the global Handsontable configuration\n     */\n    protected function buildOptions(): array\n    {\n        $sorting = $this->formField->getConfig('sorting', false);\n        $searching = $this->formField->getConfig('searching', false);\n        $height = $this->formField->getConfig('height', false);\n\n        $options = [\n            'licenseKey' => 'non-commercial-and-evaluation',\n            'rowHeaders' => false,\n            'manualColumnResize' => true,\n            'manualRowMove' => $sorting,\n            'stretchH' => 'all',\n            'preventOverflow' => 'horizontal',\n            'autoWrapRow' => true,\n            'autoWrapCol' => true,\n            'undo' => true,\n            'minRows' => 1,\n            'rowHeights' => 30,\n            'height' => $height ?: 'auto',\n            'search' => $searching,\n        ];\n\n        return $options;\n    }\n\n    //\n    // AJAX Handlers\n    //\n\n    /**\n     * onGetDropdownOptions handles AJAX requests for dropdown/autocomplete options\n     */\n    public function onGetDropdownOptions()\n    {\n        $column = post('column');\n        $rowData = post('rowData', []);\n\n        $methodName = 'get' . studly_case($this->fieldName) . 'DataTableOptions';\n\n        if ($this->model->methodExists($methodName)) {\n            return ['options' => $this->model->$methodName($column, $rowData)];\n        }\n\n        if ($this->model->methodExists('getDataTableOptions')) {\n            return ['options' => $this->model->getDataTableOptions($this->fieldName, $column, $rowData)];\n        }\n\n        return ['options' => []];\n    }\n\n    //\n    // Data Handling\n    //\n\n    /**\n     * @inheritDoc\n     */\n    public function getLoadValue()\n    {\n        if ($this->useLegacy) {\n            return $this->getLegacyLoadValue();\n        }\n\n        return (array) parent::getLoadValue();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        if ($this->useLegacy) {\n            return $this->getLegacySaveValue($value);\n        }\n\n        return json_decode($value, true) ?: [];\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/DatePicker.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Carbon\\Carbon;\nuse Backend\\Classes\\FormWidgetBase;\nuse System\\Helpers\\DateTime as DateTimeHelper;\n\n/**\n * DatePicker renders a date picker field\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DatePicker extends FormWidgetBase\n{\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var bool mode for display. Values: datetime, date, time\n     */\n    public $mode = 'datetime';\n\n    /**\n     * @var string format provides an explicit date display format\n     */\n    public $format;\n\n    /**\n     * @var string minDate the minimum/earliest date that can be selected.\n     * eg: 2000-01-01\n     */\n    public $minDate;\n\n    /**\n     * @var string maxDate the maximum/latest date that can be selected.\n     * eg: 2020-12-31\n     */\n    public $maxDate;\n\n    /**\n     * @var string yearRange number of years either side or array of upper/lower range\n     * eg: 10 or [1900,1999]\n     */\n    public $yearRange;\n\n    /**\n     * @var string|array disableDays are days that cannot be selected. Value can be a number\n     * to represent Sunday (0) to Saturday (6), or an explicit date (2024-10-01).\n     */\n    public $disableDays;\n\n    /**\n     * @var int firstDay of the week\n     * eg: 0 (Sunday), 1 (Monday), 2 (Tuesday), etc.\n     */\n    public $firstDay = 0;\n\n    /**\n     * @var bool twelveHour clock\n     */\n    public $twelveHour = false;\n\n    /**\n     * @var bool hoursOnly removes the need to select minutes\n     */\n    public $hoursOnly = false;\n\n    /**\n     * @var bool showWeekNumber at head of row\n     */\n    public $showWeekNumber = false;\n\n    /**\n     * @var bool useTimezone will convert the date and time to the user preference\n     */\n    public $useTimezone = true;\n\n    /**\n     * @var bool defaultTimeMidnight If the time picker is enabled but the time value is not provided fallback to 00:00.\n     * If this option is disabled, the default time is the current time.\n     */\n    public $defaultTimeMidnight = false;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'datepicker';\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'format',\n            'mode',\n            'minDate',\n            'maxDate',\n            'yearRange',\n            'disableDays',\n            'firstDay',\n            'twelveHour',\n            'hoursOnly',\n            'showWeekNumber',\n            'useTimezone',\n            'defaultTimeMidnight'\n        ]);\n\n        $this->mode = strtolower($this->mode);\n\n        // @deprecated API\n        if ($this->getConfig('ignoreTimezone', false)) {\n            $this->useTimezone = false;\n        }\n\n        if ($this->mode === 'time' || $this->mode === 'date') {\n            $this->useTimezone = false;\n        }\n\n        if ($this->minDate !== null) {\n            $this->minDate = is_int($this->minDate)\n                ? Carbon::createFromTimestamp($this->minDate)\n                : Carbon::parse($this->minDate);\n        }\n\n        if ($this->maxDate !== null) {\n            $this->maxDate = is_int($this->maxDate)\n                ? Carbon::createFromTimestamp($this->maxDate)\n                : Carbon::parse($this->maxDate);\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('datepicker');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        if ($value = $this->getLoadValue()) {\n            $value = DateTimeHelper::makeCarbon($value, false);\n            $value = $value instanceof Carbon ? $value->toDateTimeString() : $value;\n        }\n\n        $this->vars['name'] = $this->getFieldName();\n        $this->vars['value'] = $value ?: '';\n        $this->vars['field'] = $this->formField;\n        $this->vars['mode'] = $this->mode;\n        $this->vars['minDate'] = $this->minDate;\n        $this->vars['maxDate'] = $this->maxDate;\n        $this->vars['yearRange'] = $this->yearRange;\n        $this->vars['disableDays'] = $this->getDisableDaysString();\n        $this->vars['firstDay'] = $this->firstDay;\n        $this->vars['twelveHour'] = $this->twelveHour;\n        $this->vars['hoursOnly'] = $this->hoursOnly;\n        $this->vars['showWeekNumber'] = $this->showWeekNumber;\n        $this->vars['useTimezone'] = $this->useTimezone;\n        $this->vars['format'] = $this->format;\n        $this->vars['formatMoment'] = $this->getDateFormatMoment();\n        $this->vars['formatAlias'] = $this->getDateFormatAlias();\n        $this->vars['defaultTimeMidnight'] = $this->defaultTimeMidnight;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        if (!strlen($value)) {\n            return null;\n        }\n\n        return $value;\n    }\n\n    /**\n     * resetFormValue from the form field\n     */\n    public function resetFormValue()\n    {\n        // Transfer approved config\n        $this->minDate = $this->formField->minDate;\n        $this->maxDate = $this->formField->maxDate;\n        $this->yearRange = $this->formField->yearRange;\n        $this->firstDay = $this->formField->firstDay;\n        $this->twelveHour = $this->formField->twelveHour;\n        $this->hoursOnly = $this->formField->hoursOnly;\n        $this->showWeekNumber = $this->formField->showWeekNumber;\n        $this->disableDays = $this->formField->disableDays;\n    }\n\n    /**\n     * getDateFormatMoment converts PHP format to JS format\n     */\n    protected function getDateFormatMoment()\n    {\n        if ($this->format) {\n            return DateTimeHelper::momentFormat($this->format);\n        }\n    }\n\n    /**\n     * getDisableDaysString allows setting the disableDays property as a string\n     * that refers to a callable method\n     */\n    protected function getDisableDaysString()\n    {\n        if ($callableMethod = $this->formField->getCallableMethodFromValue($this->disableDays)) {\n            return $callableMethod($this->model);\n        }\n\n        return $this->disableDays;\n    }\n\n    /*\n     * getDateFormatAlias displays alias, used by preview mode\n     */\n    protected function getDateFormatAlias()\n    {\n        if ($this->format) {\n            return null;\n        }\n\n        if ($this->mode == 'time') {\n            return 'time';\n        }\n        elseif ($this->mode == 'date') {\n            return 'dateLong';\n        }\n        else {\n            return 'dateTimeLong';\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/FileUpload.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Input;\nuse System;\nuse Response;\nuse Validator;\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\FormWidgetBase;\nuse System\\Models\\File as FileModel;\nuse October\\Rain\\Filesystem\\Definitions as FileDefinitions;\nuse ApplicationException;\nuse ValidationException;\nuse Exception;\n\n/**\n * FileUpload renders a form file uploader field.\n *\n * Supported options:\n *\n  *    file:\n *        label: Some file\n *        type: fileupload\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FileUpload extends FormWidgetBase\n{\n    use \\Backend\\Traits\\FormModelSaver;\n    use \\Backend\\Traits\\FormModelWidget;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var int imageWidth for preview\n     */\n    public $imageWidth = 190;\n\n    /**\n     * @var int imageHeight for preview\n     */\n    public $imageHeight = 190;\n\n    /**\n     * @var mixed fileTypes accepted\n     */\n    public $fileTypes = false;\n\n    /**\n     * @var mixed mimeTypes accepted\n     */\n    public $mimeTypes = false;\n\n    /**\n     * @var mixed maxFilesize allowed (MB)\n     */\n    public $maxFilesize;\n\n    /**\n     * @var mixed maxFiles allowed\n     */\n    public $maxFiles;\n\n    /**\n     * @var string Defines a mount point for the editor toolbar.\n     * Must include a module name that exports the Vue application and a state element name.\n     * Format: stateElementName\n     * Only works in Vue applications and form document layouts.\n     */\n    public $externalToolbarAppState = null;\n\n    /**\n     * @var array thumbOptions used for generating thumbnails\n     */\n    public $thumbOptions = [\n        'mode' => 'auto',\n        'extension' => 'auto'\n    ];\n\n    /**\n     * @var boolean useCaption allows the user to set a caption\n     */\n    public $useCaption = true;\n\n    /**\n     * @var bool deferredBinding defers the upload action using a session key\n     */\n    public $deferredBinding = true;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'fileupload';\n\n    /**\n     * @var \\Backend\\Widgets\\Form configFormWidget is the embedded form for modifying the\n     * properties of the selected file.\n     */\n    protected $configFormWidget;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->maxFilesize = $this->getUploadMaxFilesize();\n\n        $this->fillFromConfig([\n            'imageWidth',\n            'imageHeight',\n            'fileTypes',\n            'maxFilesize',\n            'maxFiles',\n            'mimeTypes',\n            'thumbOptions',\n            'useCaption',\n            'deferredBinding',\n            'externalToolbarAppState'\n        ]);\n\n        // @deprecated API\n        if ($this->getConfig('attachOnUpload') === true) {\n            $this->deferredBinding = false;\n        }\n\n        if ($this->formField->disabled) {\n            $this->previewMode = true;\n        }\n\n        if (post('fileupload_flag')) {\n            $this->getConfigFormWidget();\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('fileupload');\n    }\n\n    /**\n     * prepareVars for the view data\n     */\n    protected function prepareVars()\n    {\n        if ($this->formField->disabled) {\n            $this->previewMode = true;\n        }\n\n        if ($this->previewMode) {\n            $this->useCaption = false;\n        }\n\n        $maxPhpSetting = $this->getUploadMaxFilesize();\n        if ($maxPhpSetting && $this->maxFilesize > $maxPhpSetting) {\n            throw new ApplicationException('Maximum allowed size for uploaded files: ' . $maxPhpSetting);\n        }\n\n        $this->vars['name'] = $this->getFieldName();\n        $this->vars['fileList'] = $fileList = $this->getFileList();\n        $this->vars['singleFile'] = $fileList->first();\n        $this->vars['size'] = $this->formField->size;\n        $this->vars['displayMode'] = $this->getDisplayMode();\n        $this->vars['emptyIcon'] = $this->getConfig('emptyIcon', 'icon-upload');\n        $this->vars['imageHeight'] = $this->imageHeight;\n        $this->vars['imageWidth'] = $this->imageWidth;\n        $this->vars['acceptedFileTypes'] = $this->getAcceptedFileTypes(true);\n        $this->vars['maxFilesize'] = $this->maxFilesize;\n        $this->vars['maxFiles'] = $this->maxFiles;\n        $this->vars['cssDimensions'] = $this->getCssDimensions();\n        $this->vars['useCaption'] = $this->useCaption;\n        $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState;\n    }\n\n    /**\n     * getFileRecord for this request, returns false if none available\n     * @return System\\Models\\File|bool\n     */\n    protected function getFileRecord()\n    {\n        $record = false;\n\n        if ($fileId = post('file_id')) {\n            $record = $this->getRelationModel()->find($fileId) ?: false;\n        }\n\n        return $record;\n    }\n\n    /**\n     * getConfigFormWidget for the instantiated Form widget\n     */\n    public function getConfigFormWidget()\n    {\n        if ($this->configFormWidget) {\n            return $this->configFormWidget;\n        }\n\n        $config = $this->makeConfig('~/modules/system/models/file/fields.yaml');\n        $config->model = $this->getFileRecord() ?: $this->getRelationModel();\n        $config->alias = $this->alias . $this->defaultAlias;\n        $config->arrayName = 'FileUploadWidget';\n\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $config);\n        $widget->bindToController();\n\n        return $this->configFormWidget = $widget;\n    }\n\n    /**\n     * getFileList returns a list of associated files\n     */\n    protected function getFileList()\n    {\n        if ($eagerList = $this->getFileListFromRelation()) {\n            $list = $eagerList;\n        }\n        else {\n            $list = $this\n                ->getRelationObject()\n                ->withDeferred($this->getSessionKey())\n                ->orderBy('sort_order')\n                ->get()\n            ;\n        }\n\n        // Decorate each file with thumb and custom download path\n        $list->each(function ($file) {\n            $this->decorateFileAttributes($file);\n        });\n\n        return $list;\n    }\n\n    /**\n     * getFileListFromRelation loads the file list from the model relation in memory\n     * only if the request is not in a postback state\n     */\n    protected function getFileListFromRelation()\n    {\n        // Field name for this widget detected in postback\n        if (post($this->getFieldName()) !== null) {\n            return;\n        }\n\n        [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n        if (!$model->hasRelation($attribute)) {\n            return;\n        }\n\n        $value = $model->{$attribute};\n        if (!$value) {\n            return $model->newCollection();\n        }\n\n        if ($model->isRelationTypeSingular($attribute)) {\n            return $model->newCollection([$value]);\n        }\n\n        return $value;\n    }\n\n    /**\n     * getDisplayMode for the file upload. Eg: file-multi, image-single, etc\n     * @return string\n     */\n    protected function getDisplayMode()\n    {\n        $mode = $this->getConfig('mode', 'image');\n\n        if (str_contains($mode, '-')) {\n            return $mode;\n        }\n\n        $mode .= $this->isRelationTypeSingular() ? '-single' : '-multi';\n\n        return $mode;\n    }\n\n    /**\n     * getCssDimensions returns the CSS dimensions for the uploaded image,\n     * uses auto where no dimension is provided.\n     */\n    protected function getCssDimensions(): string\n    {\n        if (!$this->imageWidth && !$this->imageHeight) {\n            return '';\n        }\n\n        $cssDimensions = '';\n\n        if ($this->imageWidth && !$this->imageHeight) {\n            $cssDimensions .= 'width: '.$this->imageWidth.'px;';\n        }\n\n        if ($this->imageHeight && !$this->imageWidth) {\n            $cssDimensions .= 'height: '.$this->imageHeight.'px;';\n        }\n\n        return $cssDimensions;\n    }\n\n    /**\n     * getAcceptedFileTypes returns the specified accepted file types, or the\n     * default based on the mode. Image mode will return:\n     * - jpg,jpeg,bmp,png,gif,svg\n     * @return string\n     */\n    public function getAcceptedFileTypes($includeDot = false)\n    {\n        $types = $this->fileTypes;\n\n        if ($types === false) {\n            $definitionCode = starts_with($this->getDisplayMode(), 'image')\n                ? 'image_extensions'\n                : 'default_extensions';\n\n            $types = implode(',', FileDefinitions::get($definitionCode));\n        }\n\n        if (!$types || $types === '*') {\n            return null;\n        }\n\n        if (!is_array($types)) {\n            $types = explode(',', $types);\n        }\n\n        if (System::checkSafeMode()) {\n            $types = array_filter($types, function ($value) {\n                return !in_array(strtolower(trim($value, ' .')), ['less', 'sass', 'scss']);\n            });\n        }\n\n        $types = array_map(function ($value) use ($includeDot) {\n            $value = trim($value);\n\n            if (substr($value, 0, 1) == '.') {\n                $value = substr($value, 1);\n            }\n\n            if ($includeDot) {\n                $value = '.'.$value;\n            }\n\n            return $value;\n        }, $types);\n\n        return implode(',', $types);\n    }\n\n    /**\n     * onRemoveAttachment removes a file attachment\n     */\n    public function onRemoveAttachment()\n    {\n        $fileModel = $this->getRelationModel();\n        if (($fileId = post('file_id')) && ($file = $fileModel::find($fileId))) {\n            $this->getRelationObject()->remove($file, $this->getSessionKey());\n        }\n    }\n\n    /**\n     * onSortAttachments sorts file attachments\n     */\n    public function onSortAttachments()\n    {\n        if ($sortData = post('sortOrder')) {\n            asort($sortData);\n            $ids = array_keys($sortData);\n            $orders = array_values($sortData);\n\n            $fileModel = $this->getRelationModel();\n            $fileModel->setSortableOrder($ids, $orders);\n        }\n    }\n\n    /**\n     * onLoadAttachmentConfig loads the configuration form for an attachment,\n     * allowing title and description to be set\n     */\n    public function onLoadAttachmentConfig()\n    {\n        $file = $this->getFileRecord();\n        if (!$file) {\n            throw new ApplicationException('Unable to find file, it may no longer exist');\n        }\n\n        $file = $this->decorateFileAttributes($file);\n\n        $this->vars['file'] = $file;\n        $this->vars['displayMode'] = $this->getDisplayMode();\n        $this->vars['cssDimensions'] = $this->getCssDimensions();\n        $this->vars['configFormWidget'] = $this->getConfigFormWidget();\n\n        return $this->makePartial('config_form');\n    }\n\n    /**\n     * onSaveAttachmentConfig commits the changes of the attachment configuration form\n     */\n    public function onSaveAttachmentConfig()\n    {\n        try {\n            $formWidget = $this->getConfigFormWidget();\n\n            $file = $formWidget->getModel();\n            if (!$file) {\n                throw new ApplicationException('Unable to find file, it may no longer exist');\n            }\n\n            $this->performSaveOnModel($file, $formWidget->getSaveData(), $formWidget->getSessionKey());\n\n            return [\n                'displayName' => $file->title ?: $file->file_name,\n                'description' => trim($file->description)\n            ];\n        }\n        catch (Exception $ex) {\n            return json_encode(['error' => $ex->getMessage()]);\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/fileupload.css');\n        $this->addJs('js/fileupload.js');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        return FormField::NO_SAVE_DATA;\n    }\n\n    /**\n     * onUpload handler for the server-side processing of uploaded files\n     */\n    public function onUpload()\n    {\n        try {\n            if (!Input::hasFile('file_data')) {\n                throw new ApplicationException('File missing from request');\n            }\n\n            $fileModel = $this->getRelationModel();\n            $uploadedFile = files('file_data');\n\n            $validationRules = ['max:'.($this->maxFilesize * 1024)];\n            if ($fileTypes = $this->getAcceptedFileTypes()) {\n                $validationRules[] = 'extensions:'.$fileTypes;\n            }\n\n            if ($this->mimeTypes) {\n                $validationRules[] = 'mimes:'.$this->mimeTypes;\n            }\n\n            $validation = Validator::make(\n                ['file_data' => $uploadedFile],\n                ['file_data' => $validationRules]\n            );\n\n            if ($validation->fails()) {\n                throw new ValidationException($validation);\n            }\n\n            if (!$uploadedFile->isValid()) {\n                throw new ApplicationException('File is not valid');\n            }\n\n            $fileRelation = $this->getRelationObject();\n\n            // Check and clean vector files\n            // @deprecated v4 this should be moved to a post processing method on the file model\n            $extension = strtolower($uploadedFile->getClientOriginalExtension());\n            // @deprecated media.clean_vectors set default to true in v4\n            if ($extension === 'svg' && \\Config::get('media.clean_vectors', false)) {\n                // getRealPath() can be empty for some environments (IIS)\n                $realPath = empty(trim($uploadedFile->getRealPath()))\n                    ? $uploadedFile->getPath() . DIRECTORY_SEPARATOR . $uploadedFile->getFileName()\n                    : $uploadedFile->getRealPath();\n\n                \\File::put($realPath, \\Html::cleanVector(\\File::get($realPath)));\n            }\n\n            $file = $fileModel;\n            $file->data = $uploadedFile;\n            $file->is_public = $fileRelation->isPublic();\n            $file->save();\n\n            // Determine the session key and if deferred binding should be used\n            $parent = $fileRelation->getParent();\n            $attachOnUpload = $this->deferredBinding === false && $parent && $parent->exists;\n            $sessionKey = $attachOnUpload ? null : $this->getSessionKey();\n\n            // Attach the file\n            $fileRelation->add($file, $sessionKey);\n\n            $file = $this->decorateFileAttributes($file);\n\n            $result = [\n                'id' => $file->id,\n                'thumb' => $file->thumbUrl,\n                'path' => $file->pathUrl\n            ];\n\n            $response = Response::make($result, 200);\n        }\n        catch (Exception $ex) {\n            $response = Response::make($ex->getMessage(), 400);\n        }\n\n        return $response;\n    }\n\n    /**\n     * decorateFileAttributes adds the bespoke attributes used\n     * internally by this widget. Added attributes are:\n     * - thumbUrl\n     * - pathUrl\n     * @return System\\Models\\File\n     */\n    protected function decorateFileAttributes($file)\n    {\n        $path = $thumb = $file->getPath();\n\n        if ($this->shouldGenerateThumb()) {\n            $thumb = $file->getThumb($this->imageWidth, $this->imageHeight, $this->thumbOptions);\n        }\n\n        $file->pathUrl = $path;\n        $file->thumbUrl = $thumb;\n\n        return $file;\n    }\n\n    /**\n     * shouldGenerateThumb determines if the resizer should be used\n     */\n    protected function shouldGenerateThumb()\n    {\n        if ($this->thumbOptions === false) {\n            return false;\n        }\n\n        return $this->imageWidth || $this->imageHeight;\n    }\n\n    /**\n     * getUploadMaxFilesize returns max upload filesize in MB\n     */\n    protected function getUploadMaxFilesize(): float\n    {\n        return FileModel::getMaxFilesize() / 1024;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/MarkdownEditor.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Backend\\Classes\\FormWidgetBase;\nuse BackendAuth;\nuse Markdown;\n\n/**\n * MarkdownEditor renders a markdown editor field.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MarkdownEditor extends FormWidgetBase\n{\n    //\n    // Legacy properties\n    //\n\n    /**\n     * @var string Display mode: split, tab.\n     */\n    public $mode = 'tab';\n\n    /**\n     * @var bool Render preview with safe markdown.\n     */\n    public $safe = false;\n\n    /**\n     * @var bool The Legacy mode disables the Vue integration.\n     */\n    public $legacyMode = false;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var bool sideBySide window by default.\n     */\n    public $sideBySide = false;\n\n    /**\n     * @var string Defines a mount point for the editor toolbar.\n     * Must include a module name that exports the Vue application and a state element name.\n     * Format: stateElementName\n     * Only works in Vue applications and form document layouts.\n     */\n    public $externalToolbarAppState = null;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'markdown';\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'mode',\n            'safe',\n            'legacyMode',\n            'sideBySide',\n            'externalToolbarAppState'\n        ]);\n\n        if (!$this->legacyMode) {\n            $this->controller->registerVueComponent(\\Backend\\VueComponents\\DocumentMarkdownEditor::class);\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('markdowneditor');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['mode'] = $this->mode;\n        $this->vars['legacyMode'] = $this->legacyMode;\n        $this->vars['sideBySide'] = $this->sideBySide;\n        $this->vars['stretch'] = $this->formField->stretch;\n        $this->vars['size'] = $this->formField->size;\n        $this->vars['name'] = $this->getFieldName();\n        $this->vars['value'] = $this->getLoadValue();\n        $this->vars['useMediaManager'] = BackendAuth::userHasAccess('media.library');\n        $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/markdowneditor.css');\n        $this->addJs('js/markdowneditor.js', ['type' => 'module']);\n        $this->addJs('/modules/backend/formwidgets/codeeditor/assets/js/build-min.js');\n    }\n\n    public function onRefresh()\n    {\n        $value = (string) post($this->getFieldName());\n        $previewHtml = $this->safe\n            ? Markdown::parseIndent($value)\n            : Markdown::parse($value);\n\n        return [\n            'preview' => $previewHtml\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/NestedForm.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\FormWidgetBase;\nuse October\\Rain\\Database\\Model;\nuse October\\Rain\\Exception\\ValidationException;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\n\n/**\n * NestedForm widget\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass NestedForm extends FormWidgetBase\n{\n    use \\Backend\\Traits\\FormModelSaver;\n    use \\Backend\\Traits\\FormModelWidget;\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'nestedform';\n\n    /**\n     * @var array form configuration\n     */\n    public $form;\n\n    /**\n     * @var bool showPanel defines if the nested form is styled like a panel\n     */\n    public $showPanel = true;\n\n    /**\n     * @var bool defaultCreate will create a new record when the form loads, useful\n     * for associating relations within the nested form\n     */\n    public $defaultCreate = false;\n\n    /**\n     * @var bool useRelation will instruct the widget to look for a relationship\n     */\n    protected $useRelation = false;\n\n    /**\n     * @var \\Backend\\Widgets\\Form formWidget reference\n     */\n    protected $formWidget;\n\n    /**\n     * @var \\Model relatedRecord when using a relation\n     */\n    protected $relatedRecord;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'form',\n            'showPanel',\n            'defaultCreate'\n        ]);\n\n        if ($this->formField->disabled) {\n            $this->previewMode = true;\n        }\n\n        $this->processRelationMode();\n\n        $this->makeNestedFormWidget();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('nestedform');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->formWidget->previewMode = $this->previewMode;\n    }\n\n    /**\n     * loadAssets\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/nestedform.css');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        if ($this->useRelation) {\n            return $this->processSaveForRelation($value);\n        }\n\n        return $this->formWidget->getSaveData();\n    }\n\n    /**\n     * resetFormValue from the form field\n     */\n    public function resetFormValue()\n    {\n        $this->formWidget->setFormValues($this->formField->value);\n    }\n\n    /**\n     * processSaveForRelation\n     * @param array $value\n     * @return array|null\n     */\n    protected function processSaveForRelation($value)\n    {\n        // Give form field widgets an opportunity to process the data\n        $widget = $this->formWidget;\n        $saveData = $widget->getSaveData();\n\n        // Save data to the model\n        $model = $widget->model;\n\n        $modelsToSave = $this->prepareModelsToSave($model, $saveData);\n\n        foreach ($modelsToSave as $attrChain => $modelToSave) {\n            try {\n                $modelToSave->save(['sessionKey' => $widget->getSessionKeyWithSuffix()]);\n            }\n            catch (ValidationException $ve) {\n                $ve->setFieldPrefix(array_merge(\n                    HtmlHelper::nameToArray($this->valueFrom),\n                    $attrChain ? explode('.', $attrChain) : []\n                ));\n                throw $ve;\n            }\n        }\n\n        return FormField::NO_SAVE_DATA;\n    }\n\n    /**\n     * makeNestedFormWidget creates a form widget\n     */\n    protected function makeNestedFormWidget()\n    {\n        $config = $this->makeConfig($this->form);\n\n        if ($this->useRelation) {\n            $config->model = $this->getLoadValueFromRelation();\n        }\n        else {\n            $config->model = $this->model;\n            $config->data = $this->getLoadValue() ?: [];\n            $config->isNested = true;\n        }\n\n        $config->alias = $this->alias . $this->defaultAlias;\n        $config->context = $this->formField->context;\n        $config->arrayName = $this->getFieldName();\n        $config->sessionKey = $this->sessionKey;\n        $config->sessionKeySuffix = $this->sessionKeySuffix;\n        $config->parentFieldName = $this->formField->fieldName;\n\n        $this->tagTabbedFormFields($config->tabs);\n        $this->tagTabbedFormFields($config->secondaryTabs);\n\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $config);\n        $widget->previewMode = $this->previewMode;\n        $widget->bindToController();\n\n        $this->formWidget = $widget;\n    }\n\n    /**\n     * tagTabbedFormFields adds is-nested CSS class to tabs\n     */\n    protected function tagTabbedFormFields(&$config)\n    {\n        if (!$config) {\n            return;\n        }\n\n        if (isset($config['cssClass'])) {\n            $config['cssClass'] = $config['cssClass'] . ' is-nested';\n        }\n        else {\n            $config['cssClass'] = 'is-nested';\n        }\n    }\n\n    /**\n     * getLoadValueFromRelation\n     */\n    protected function getLoadValueFromRelation()\n    {\n        if ($this->relatedRecord !== null) {\n            return $this->relatedRecord;\n        }\n\n        $this->relatedRecord = $this->getRelationObject()\n            ->withDeferred($this->getSessionKey())\n            ->first()\n        ;\n\n        if (!$this->relatedRecord) {\n            $this->relatedRecord = $this->createRelationByDefault();\n        }\n\n        return $this->relatedRecord;\n    }\n\n    /**\n     * createRelationByDefault\n     */\n    protected function createRelationByDefault()\n    {\n        $model = $this->getRelationModel();\n\n        if ($this->defaultCreate) {\n            $model->save(['force' => true]);\n\n            $this->getRelationObject()->add($model, $this->getSessionKey());\n        }\n\n        return $model;\n    }\n\n    /**\n     * processRelationMode\n     */\n    protected function processRelationMode()\n    {\n        [$model, $attribute] = $this->nearestModelAttribute($this->valueFrom);\n\n        if ($model instanceof Model && $model->hasRelation($attribute)) {\n            $this->useRelation = true;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/PaletteEditor.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\FormWidgetBase;\n\n/**\n * PaletteEditor is used by the system internally on the Backend / Customize Backend page.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PaletteEditor extends FormWidgetBase\n{\n    use \\Backend\\Models\\BrandSetting\\HasPalettes;\n\n    /**\n     * @var string colorModeFrom is the field name to source the color mode from\n     */\n    public $colorModeFrom = 'color_mode';\n\n    /**\n     * @var \\Backend\\Widgets\\Form colorsFormWidget reference\n     */\n    protected $colorsFormWidget;\n\n    const PRESET_DEFAULT = 'default';\n    const PRESET_CUSTOM = 'custom';\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'colorModeFrom',\n        ]);\n\n        $this->makeColorsFormWidget();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('paletteeditor');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['field'] = $this->formField;\n        $this->vars['presetValue'] = $this->getPresetValue();\n        $this->vars['colorModeField'] = $this->getColorModeField();\n        $this->vars['colorModeValue'] = $this->getColorModeValue();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/paletteeditor.css');\n        $this->addJs('js/paletteeditor.js');\n    }\n\n    /**\n     * getSaveValue\n     */\n    public function getSaveValue($value)\n    {\n        if ($this->getColorModeValue() === 'light') {\n            $lightColors = post('PaletteEditor[palette]');\n            $darkColors = $this->getPaletteValue('dark');\n        }\n        else {\n            $darkColors = post('PaletteEditor[palette]');\n            $lightColors = $this->getPaletteValue('light');\n        }\n\n        // Ensure saved value are valid hex colors\n        $parseAsHex = function($arr) {\n            array_walk_recursive($arr, function(&$value) {\n                $value = '#' . preg_replace(\"/[^a-zA-Z0-9]+/\", '', $value);\n            });\n            return $arr;\n        };\n\n        return [\n            'preset' => (string) $value,\n            'light' => $parseAsHex((array) $lightColors),\n            'dark' => $parseAsHex((array) $darkColors)\n        ];\n    }\n\n    /**\n     * getPresetDefinitions returns everything we know about the palette state\n     */\n    protected function getPresetDefinitions(): array\n    {\n        return array_merge(\n            $this->getPaletteDefinitions(),\n            [\n                'custom' => [\n                    'light' => $this->getLoadValue()['light'] ?? [],\n                    'dark' => $this->getLoadValue()['dark'] ?? []\n                ]\n            ]\n        );\n    }\n\n    /**\n     * getPresetValue\n     */\n    protected function getPresetValue(): string\n    {\n        return $this->getLoadValue()['preset'] ?? self::PRESET_DEFAULT;\n    }\n\n    /**\n     * getColorModeValue returns the color mode value (externally)\n     */\n    protected function getColorModeValue(): string\n    {\n        $colorMode = post(\n            'PaletteEditor[color_mode]',\n            $this->model->{$this->colorModeFrom} ?? 'light'\n        );\n\n        if ($colorMode === 'auto') {\n            $colorMode = $_COOKIE['admin_color_mode_setting'] ?? 'light';\n        }\n\n        if (!in_array($colorMode, ['light', 'dark'])) {\n            $colorMode = 'light';\n        }\n\n        return $colorMode;\n    }\n\n    /**\n     * getPaletteValue\n     */\n    protected function getPaletteValue(?string $mode = null): array\n    {\n        if ($mode === null) {\n            $mode = $this->getColorModeValue();\n        }\n\n        return $this->getLoadValue()[$mode] ?? $this->getPaletteColors()[$mode];\n    }\n\n    /**\n     * getColorModeField\n     */\n    protected function getColorModeField(): FormField\n    {\n        return $this->getParentForm()->getField($this->colorModeFrom);\n    }\n\n    /**\n     * makeColorsFormWidget creates a form widget\n     */\n    protected function makeColorsFormWidget()\n    {\n        $config = $this->makeConfig(base_path('modules/backend/formwidgets/paletteeditor/partials/fields_colors.yaml'));\n\n        $config->model = $this->model;\n        $config->data = ['palette' => $this->getPaletteValue()];\n        $config->isNested = true;\n\n        $config->alias = $this->alias . $this->defaultAlias;\n        $config->context = $this->formField->context;\n        $config->arrayName = 'PaletteEditor';\n        $config->sessionKey = $this->sessionKey;\n\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $config);\n        $widget->bindToController();\n\n        $this->colorsFormWidget = $widget;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/PermissionEditor.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Backend\\Classes\\RoleManager;\nuse Backend\\Classes\\FormWidgetBase;\nuse BackendAuth;\n\n/**\n * PermissionEditor is used by the system internally on the System / Administrators pages.\n *\n * Available Modes:\n *\n * - radio: Default mode, used by user-level permissions.\n *   Provides three-state control over each available permission. States are\n *      -1: Explicitly deny the permission\n *      0: Inherit the permission's value from a parent source (User inherits from Role)\n *      1: Explicitly grant the permission\n *\n * - checkbox: Used to define permissions for roles. Intended to define a base of what permissions are available\n *   Provides two state control over each available permission. States are\n *      1: Explicitly allow the permission\n *      null: If the checkbox is not ticked, the permission will not be sent to the server and will not be stored.\n *      This is interpreted as the permission not being present and thus not allowed\n *\n * - switch: Used to define overriding permissions in a simpler UX than the radio.\n *   Provides two state control over each available permission. States are\n *      1: Explicitly allow the permission\n *     -1: Explicitly deny the permission\n *\n * Although users are still not allowed to modify permissions that they themselves do not have access to,\n * available permissions can be defined in the form of an array of permission codes to allow:\n *\n *     availablePermissions: ['some.author.permission', 'some.other.permission', 'etc.some.system.permission']\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PermissionEditor extends FormWidgetBase\n{\n    /**\n     * @var \\Backend\\Models\\User user\n     */\n    protected $user;\n\n    /**\n     * @var string Mode to display the permission editor with. Available options: radio, checkbox, switch\n     */\n    public $mode = 'radio';\n\n    /**\n     * @var array Permission codes to allow to be interacted with through this widget\n     */\n    public $availablePermissions;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'mode',\n            'availablePermissions',\n        ]);\n\n        $this->user = BackendAuth::getUser();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('permissioneditor');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        if ($this->formField->disabled) {\n            $this->previewMode = true;\n        }\n\n        $permissionsData = $this->formField->getValueFromData($this->model);\n        if (!is_array($permissionsData)) {\n            $permissionsData = [];\n        }\n\n        $this->vars['mode'] = $this->mode;\n        $this->vars['permissions'] = $this->getViewPermissions();\n        $this->vars['baseFieldName'] = $this->getFieldName();\n        $this->vars['permissionsData'] = $permissionsData;\n        $this->vars['field'] = $this->formField;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        if ($this->user->isSuperUser()) {\n            return is_array($value) ? $value : [];\n        }\n\n        return $this->getSaveValueSecure($value);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/permissioneditor.css');\n        $this->addJs('js/permissioneditor.js', ['type' => 'module']);\n    }\n\n    /**\n     * getSaveValueSecure returns a safely parsed set of permissions, ensuring the user cannot\n     * elevate their own permissions or permissions of another user above their own.\n     *\n     * @param string $value\n     * @return array\n     */\n    protected function getSaveValueSecure($value)\n    {\n        $newPermissions = is_array($value) ? array_map('intval', $value) : [];\n\n        if (!$newPermissions) {\n            return [];\n        }\n\n        $existingPermissions = $this->model->permissions ?: [];\n\n        $allowedPermissions = array_map(function ($permissionObject) {\n            return $permissionObject->code;\n        }, $this->getFilteredPermissions());\n\n        foreach ($newPermissions as $permission => $code) {\n            if (in_array($permission, $allowedPermissions)) {\n                $existingPermissions[$permission] = $code;\n            }\n        }\n\n        return $existingPermissions;\n    }\n\n    /**\n     * getFilteredPermissions returns the available permissions, removing those that\n     * the logged-in user does not have access to. In the format of:\n     *\n     *     ['permission-tab' => $arrayOfAllowedPermissionObjects]\n     *\n     * @return array\n     */\n    protected function getFilteredPermissions()\n    {\n        $permissions = RoleManager::instance()->listPermissionsForUser($this->user);\n\n        if (!is_array($this->availablePermissions)) {\n            return $permissions;\n        }\n\n        return array_filter($permissions, function ($permission) {\n            return $permission->code && in_array($permission->code, $this->availablePermissions);\n        });\n    }\n\n    /**\n     * getViewPermissions\n     */\n    protected function getViewPermissions()\n    {\n        $permissions = $this->getFilteredPermissions();\n        $permissions = $this->makeTabbedPermissions($permissions);\n        $permissions = array_map(function($tabbed) {\n            return $this->makeNestedPermissions($tabbed);\n        }, $permissions);\n\n        return $permissions;\n    }\n\n    /**\n     * makeTabbedPermissions\n     */\n    protected function makeTabbedPermissions($permissions)\n    {\n        $tabs = [];\n\n        foreach ($permissions as $permission) {\n            $tab = $permission->tab ?? 'backend::lang.form.undefined_tab';\n\n            if (!array_key_exists($tab, $tabs)) {\n                $tabs[$tab] = [];\n            }\n\n            $tabs[$tab][$permission->code] = $permission;\n        }\n\n        return $tabs;\n    }\n\n    /**\n     * makeNestedPermissions\n     */\n    protected function makeNestedPermissions($permissions)\n    {\n        $forget = [];\n\n        foreach ($permissions as $permission) {\n            $code = $permission->code;\n            $parentCode = substr($code, 0, strrpos($code, '.'));\n\n            if (isset($permissions[$parentCode])) {\n                $permissions[$parentCode]->addChild($permission);\n                $forget[] = $code;\n            }\n        }\n\n        array_forget($permissions, $forget);\n\n        return $permissions;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/RecordFinder.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Lang;\nuse ApplicationException;\nuse Backend\\Classes\\FormWidgetBase;\nuse Illuminate\\Database\\Eloquent\\Collection;\n\n/**\n * RecordFinder renders a record finder field\n *\n *    user:\n *        label: User\n *        type: recordfinder\n *        list: ~/plugins/rainlab/user/models/user/columns.yaml\n *        recordsPerPage: 10\n *        title: Find Record\n *        keyFrom: id\n *        nameFrom: name\n *        descriptionFrom: email\n *        conditions: email = \"bob@example.com\"\n *        modelScope: whereActive\n *        searchMode: all\n *        searchScope: searchUsers\n *        useRelation: false\n *        modelClass: RainLab\\User\\Models\\User\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RecordFinder extends FormWidgetBase\n{\n    use \\Backend\\Traits\\FormModelWidget;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string keyFrom is the field name to use for key\n     */\n    public $keyFrom;\n\n    /**\n     * @var string nameFrom is the relation column to display for the name\n     */\n    public $nameFrom = 'name';\n\n    /**\n     * @var string descriptionFrom is the relation column to display for the description\n     */\n    public $descriptionFrom;\n\n    /**\n     * @var string title text to display for the title of the popup list form\n     */\n    public $title = 'backend::lang.recordfinder.find_record';\n\n    /**\n     * @var int recordsPerPage is the maximum rows to display for each page\n     */\n    public $recordsPerPage = 10;\n\n    /**\n     * @var string modelScope uses a custom scope method for the list query.\n     */\n    public $modelScope;\n\n    /**\n     * @var string conditions filters the relation using a raw where query statement.\n     */\n    public $conditions;\n\n    /**\n     * @var mixed defaultSort column to look for.\n     */\n    public $defaultSort;\n\n    /**\n     * @var bool showSetup in the search list.\n     */\n    public $showSetup = false;\n\n    /**\n     * @var bool|array|null structure configuration in the search list.\n     */\n    public $structure = null;\n\n    /**\n     * @var string searchMode if searching the records, specifies a policy to use.\n     * - all: result must contain all words\n     * - any: result can contain any word\n     * - exact: result must contain the exact phrase\n     */\n    public $searchMode;\n\n    /**\n     * @var bool inlineOptions displays the field with buttons alongside the selected record\n     * with an assumed amount of horizontal space to accommodate it. Disable this mode\n     * if horizontal space is limited.\n     */\n    public $inlineOptions = true;\n\n    /**\n     * @var string searchScope uses a custom scope method for performing searches.\n     */\n    public $searchScope;\n\n    /**\n     * @var boolean useRelation flag for using the name of the field as a relation\n     * name to interact with directly on the parent model. Default: true. Disable\n     * to return just the selected model's ID\n     */\n    public $useRelation = true;\n\n    /**\n     * @var string modelClass of the model to use for listing records when\n     * useRelation = false\n     */\n    public $modelClass;\n\n    /**\n     * @var string popupSize as, either giant, huge, large, small, tiny or adaptive\n     */\n    public $popupSize = 'huge';\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'recordfinder';\n\n    /**\n     * @var Model relationModel\n     */\n    public $relationModel;\n\n    /**\n     * @var string|int relationKeyValue\n     */\n    protected $relationKeyValue = -1;\n\n    /**\n     * @var \\Backend\\Widgets\\Lists listWidget reference to the widget used for viewing (list or form).\n     */\n    protected $listWidget;\n\n    /**\n     * @var \\Backend\\Widgets\\Search searchWidget reference to the widget used for searching\n     */\n    protected $searchWidget;\n\n    /**\n     * @var \\Backend\\Widgets\\Filter filterWidget reference to the widget used for filtering\n     */\n    protected $filterWidget;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'title',\n            'keyFrom',\n            'nameFrom',\n            'descriptionFrom',\n            'modelScope',\n            'defaultSort',\n            'showSetup',\n            'structure',\n            'conditions',\n            'inlineOptions',\n            'searchMode',\n            'searchScope',\n            'recordsPerPage',\n            'useRelation',\n            'modelClass',\n            'popupSize',\n        ]);\n\n        if (isset($this->config->scope)) {\n            $this->modelScope = $this->config->scope;\n        }\n\n        if (!$this->useRelation && !class_exists($this->modelClass)) {\n            throw new ApplicationException(Lang::get('backend::lang.recordfinder.invalid_model_class', ['modelClass' => $this->modelClass]));\n        }\n\n        if (!post('recordfinder_flag')) {\n            return;\n        }\n\n        $this->listWidget = $this->makeListWidget();\n        $this->listWidget->bindToController();\n\n        // Search widget\n        if ($this->searchWidget = $this->makeSearchWidget()) {\n            $this->listWidget->setSearchTerm($this->searchWidget->getActiveTerm());\n\n            // Link the Search Widget to the List Widget\n            $this->searchWidget->bindEvent('search.submit', function () {\n                $this->listWidget->setSearchTerm($this->searchWidget->getActiveTerm());\n                return $this->listWidget->onRefresh();\n            });\n\n            $this->searchWidget->bindToController();\n        }\n\n        // Filter widget\n        if ($this->filterWidget = $this->makeFilterWidget()) {\n            $this->listWidget->addFilter([$this->filterWidget, 'applyAllScopesToQuery']);\n\n            // Filter the list when the scopes are changed\n            $this->filterWidget->bindEvent('filter.update', function() {\n                return $this->listWidget->onFilter();\n            });\n\n            $this->filterWidget->bindToController();\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/recordfinder.css');\n        $this->addJs('js/recordfinder.js', ['type' => 'module']);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('container');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->relationModel = $this->getLoadValue();\n\n        if ($this->formField->disabled) {\n            $this->previewMode = true;\n        }\n\n        $this->vars['displayMode'] = $this->inlineOptions ? 'single' : 'multi';\n        $this->vars['popupSize'] = $this->popupSize;\n        $this->vars['value'] = $this->getKeyValue();\n        $this->vars['field'] = $this->formField;\n        $this->vars['nameValue'] = $this->getNameValue();\n        $this->vars['descriptionValue'] = $this->getDescriptionValue();\n        $this->vars['listWidget'] = $this->listWidget;\n        $this->vars['searchWidget'] = $this->searchWidget;\n        $this->vars['filterWidget'] = $this->filterWidget;\n        $this->vars['title'] = $this->title;\n    }\n\n    /**\n     * onRefresh AJAX handler\n     */\n    public function onRefresh()\n    {\n        $value = post($this->getFieldName());\n\n        $this->setKeyValue($value);\n\n        $this->prepareVars();\n\n        return ['#'.$this->getId('container') => $this->makePartial('recordfinder')];\n    }\n\n    /**\n     * onClearRecord AJAX handler\n     */\n    public function onClearRecord()\n    {\n        $this->setKeyValue(null);\n\n        $this->prepareVars();\n\n        return ['#'.$this->getId('container') => $this->makePartial('recordfinder')];\n    }\n\n    /**\n     * onFindRecord AJAX handler\n     */\n    public function onFindRecord()\n    {\n        $this->prepareVars();\n\n        // Purge the search term stored in session\n        if ($this->searchWidget) {\n            $this->listWidget->setSearchTerm(null);\n            $this->searchWidget->setActiveTerm(null);\n        }\n\n        return $this->makePartial('recordfinder_form');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        return strlen($value) ? $value : null;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getLoadValue()\n    {\n        $value = null;\n\n        if ($this->useRelation) {\n            [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n            if ($model !== null) {\n                $value = $model->{$attribute};\n            }\n\n            // Multi support\n            if ($value instanceof Collection) {\n                $value = $value->first();\n            }\n        }\n        else {\n            $value = parent::getLoadValue();\n            if ($value) {\n                $value = $this->modelClass::where($this->getKeyFromAttributeName(), $value)->first();\n            }\n        }\n\n        return $value;\n    }\n\n    /**\n     * setKeyValue\n     */\n    public function setKeyValue($value)\n    {\n        $this->relationKeyValue = $value;\n\n        if ($this->useRelation) {\n            [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n            $model->{$attribute} = $value;\n        }\n        else {\n            $this->formField->value = $value;\n        }\n    }\n\n    /**\n     * getKeyValue\n     */\n    public function getKeyValue()\n    {\n        if ($this->relationKeyValue !== -1) {\n            return $this->relationKeyValue;\n        }\n\n        if (!$this->relationModel) {\n            return null;\n        }\n\n        return $this->useRelation\n            ? $this->relationModel->{$this->getKeyFromAttributeName()}\n            : $this->formField->value;\n    }\n\n    /**\n     * getKeyFromAttributeName\n     */\n    protected function getKeyFromAttributeName()\n    {\n        if ($this->keyFrom) {\n            return $this->keyFrom;\n        }\n\n        if (!$this->useRelation) {\n            return 'id';\n        }\n\n        $relationType = $this->getRelationType();\n        $relationObject = $this->getRelationObject();\n\n        // Relations can specify a custom local or foreign \"other\" key,\n        // which can be detected and implemented here automatically.\n        if (in_array($relationType, ['belongsTo'])) {\n            $primaryKeyName = $relationObject->getOwnerKeyName();\n        }\n        elseif (in_array($relationType, ['hasMany', 'hasOne', 'belongsToMany', 'morphedByMany', 'morphToMany'])) {\n            $primaryKeyName = $relationObject->getRelatedKeyName();\n        }\n        else {\n            $primaryKeyName = $this->getRelationModel()->getKeyName();\n        }\n\n        return $primaryKeyName;\n    }\n\n    /**\n     * getNameValue\n     */\n    public function getNameValue()\n    {\n        if (!$this->relationModel || !$this->nameFrom) {\n            return null;\n        }\n\n        return $this->relationModel->{$this->nameFrom};\n    }\n\n    /**\n     * getDescriptionValue\n     */\n    public function getDescriptionValue()\n    {\n        if (!$this->relationModel || !$this->descriptionFrom) {\n            return null;\n        }\n\n        return $this->relationModel->{$this->descriptionFrom};\n    }\n\n    /**\n     * makeListWidget\n     */\n    protected function makeListWidget()\n    {\n        $config = $this->makeConfig($this->getConfig('list'));\n        $config->model = $this->useRelation ? $this->getRelationModel() : new $this->modelClass;\n        $config->alias = $this->alias . 'List';\n        $config->showSetup = $this->showSetup;\n        $config->showCheckboxes = false;\n        $config->defaultSort = $this->defaultSort;\n        $config->recordsPerPage = $this->recordsPerPage;\n        $config->recordOnClick = sprintf(\"oc.fetchControl(document.getElementById('%s'), 'recordfinder').updateRecord(this, ':\" . $this->getKeyFromAttributeName() . \"')\", $this->getId());\n\n        // Structure support\n        $structureConfig = $this->makeListStructureConfig($config);\n        if ($structureConfig) {\n            $widget = $this->makeWidget(\\Backend\\Widgets\\ListStructure::class, $structureConfig);\n        }\n        else {\n            $widget = $this->makeWidget(\\Backend\\Widgets\\Lists::class, $config);\n        }\n\n        $widget->setSearchOptions([\n            'mode' => $this->searchMode,\n            'scope' => $this->searchScope,\n        ]);\n\n        if ($sqlConditions = $this->conditions) {\n            $widget->bindEvent('list.extendQueryBefore', function ($query) use ($sqlConditions) {\n                $query->whereRaw($sqlConditions);\n            });\n        }\n        elseif ($scopeMethod = $this->modelScope) {\n            $widget->bindEvent('list.extendQueryBefore', function ($query) use ($scopeMethod) {\n                if ($callableMethod = $this->formField->getCallableMethodFromValue($scopeMethod)) {\n                    $callableMethod($query, $this->model);\n                }\n                elseif (is_string($scopeMethod)) {\n                    $query->$scopeMethod($this->model);\n                }\n            });\n        }\n        else {\n            if ($this->useRelation) {\n                $widget->bindEvent('list.extendQueryBefore', function ($query) {\n                    $this->getRelationObject()->addDefinedConstraintsToQuery($query);\n                });\n            }\n        }\n\n        return $widget;\n    }\n\n    /**\n     * makeListStructureConfig\n     */\n    protected function makeListStructureConfig($config)\n    {\n        if ($this->structure === false) {\n            return null;\n        }\n\n        $structureConfig = [];\n        if (is_array($this->structure)) {\n            $structureConfig = $this->structure;\n        }\n        elseif ($this->structure === true) {\n            $structureConfig['showTree'] = true;\n        }\n        elseif (\n            ($model = $config->model) &&\n            $model->isClassInstanceOf(\\October\\Contracts\\Database\\TreeInterface::class)\n        ) {\n            $structureConfig['showTree'] = true;\n        }\n\n        // Force read-only mode\n        if ($structureConfig) {\n            $structureConfig = ['showReorder' => false] + $structureConfig;\n            return $this->mergeConfig($config, $structureConfig);\n        }\n\n        return null;\n    }\n\n    /**\n     * makeSearchWidget\n     */\n    protected function makeSearchWidget()\n    {\n        $config = $this->makeConfig();\n        $config->alias = $this->alias . 'Search';\n        $config->growable = false;\n        $config->prompt = 'backend::lang.list.search_prompt';\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Search::class, $config);\n        $widget->cssClasses[] = 'recordfinder-search';\n        return $widget;\n    }\n\n    /**\n     * makeFilterWidget\n     */\n    protected function makeFilterWidget()\n    {\n        $filterConfig = $this->getConfig('filter');\n        if (!$filterConfig) {\n            return null;\n        }\n\n        $config = $this->makeConfig($filterConfig);\n        $config->model = $this->useRelation ? $this->getRelationModel() : new $this->modelClass;\n        $config->alias = $this->alias . 'Filter';\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Filter::class, $config);\n        $widget->cssClasses[] = 'recordfinder-filter';\n        return $widget;\n    }\n\n    /**\n     * resetFormValue from the form field\n     */\n    public function resetFormValue()\n    {\n        $this->setKeyValue($this->formField->value);\n\n        // Transfer approved config\n        $this->modelScope = $this->formField->modelScope ?: $this->formField->scope;\n        $this->conditions = $this->formField->conditions;\n        $this->defaultSort = $this->formField->defaultSort;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/Relation.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse DbDongle;\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\FormWidgetBase;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse SystemException;\n\n/**\n * Relation renders a field pre-populated with a belongsTo and belongsToHasMany relation\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Relation extends FormWidgetBase\n{\n    use \\Backend\\Traits\\FormModelWidget;\n    use \\Backend\\Traits\\FormModelSaver;\n    use \\Backend\\FormWidgets\\Relation\\HasQuickCreate;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var bool readOnly if the sensitive field cannot be edited, but can be toggled\n     */\n    public $readOnly = false;\n\n    /**\n     * @var string nameFrom is the model column to use for the name reference\n     */\n    public $nameFrom = 'name';\n\n    /**\n     * @var string sqlSelect is the custom SQL column selection to use for the name reference\n     */\n    public $sqlSelect;\n\n    /**\n     * @var string emptyOption to use if the relation is singular (belongsTo)\n     */\n    public $emptyOption;\n\n    /**\n     * @var string modelScope method for the list query.\n     */\n    public $modelScope;\n\n    /**\n     * @var string conditions filters the relation using a raw where query statement.\n     */\n    public $conditions;\n\n    /**\n     * @var mixed defaultSort column to look for.\n     */\n    public $defaultSort;\n\n    /**\n     * @var mixed excludeFrom identifiers from the specified model attribute.\n     */\n    public $excludeFrom;\n\n    /**\n     * @var bool useController to completely replace this widget the `RelationController` behavior.\n     */\n    public $useController;\n\n    /**\n     * @var array useControllerConfig manually configures the `RelationController` behavior.\n     */\n    public $useControllerConfig;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'relation';\n\n    /**\n     * @var FormField renderFormField object used for rendering a simple field type\n     */\n    public $renderFormField;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'readOnly',\n            'nameFrom',\n            'emptyOption',\n            'defaultSort',\n            'excludeFrom',\n            'modelScope',\n            'conditions',\n            'quickCreate',\n        ]);\n\n        if (isset($this->config->select)) {\n            $this->sqlSelect = $this->config->select;\n        }\n\n        if (isset($this->config->scope)) {\n            $this->modelScope = $this->config->scope;\n        }\n\n        $this->useControllerConfig = (array) ($this->config->controller ?? []);\n\n        $this->useController = $this->evalUseController($this->config->useController ?? true);\n\n        $this->initQuickCreate();\n    }\n\n    /**\n     * bindToController ensures manual relation controller configuration is applied.\n     */\n    public function bindToController()\n    {\n        $this->defineRelationControllerConfig();\n        parent::bindToController();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->loadQuickCreateAssets();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        return $this->makePartial('relation');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['field'] = $this->makeRenderFormField();\n    }\n\n    /**\n     * makeRenderFormField for rendering a simple field type\n     */\n    protected function makeRenderFormField()\n    {\n        if ($this->useController) {\n            return null;\n        }\n\n        $field = clone $this->formField;\n        [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n\n        $relationObject = $this->getRelationObject();\n        $relationType = $model->getRelationType($attribute);\n        $relationModel = $model->makeRelation($attribute);\n        $query = $relationModel->newQuery();\n\n        if (in_array($relationType, ['belongsToMany', 'morphedByMany', 'morphToMany', 'hasMany'])) {\n            $field->type = 'checkboxlist';\n        }\n        elseif (in_array($relationType, ['belongsTo', 'hasOne', 'morphOne'])) {\n            $field->type = 'dropdown';\n        }\n        else {\n            throw new SystemException(\"Could not translate relation type '{$relationType}' to a valid field type\");\n        }\n\n        // Sort the query using configuration\n        if ($this->defaultSort) {\n            $this->applyDefaultSortToQuery($query);\n        }\n\n        // Exclude values from the specified parent model attribute\n        if ($this->excludeFrom) {\n            $query->whereNotIn($relationModel->getKeyName(), (array) $model->{$this->excludeFrom});\n        }\n        // It is safe to assume that if the model and related model are of\n        // the exact same class, then it cannot be related to itself\n        elseif ($model->exists && ($relationModel->getTable() === $model->getTable())) {\n            $query->where($relationModel->getKeyName(), '<>', $model->getKey());\n        }\n\n        if ($sqlConditions = $this->conditions) {\n            $query->whereRaw(DbDongle::parse($sqlConditions, $model->attributes));\n        }\n        elseif ($scopeMethod = $this->modelScope) {\n            if ($callableMethod = $this->formField->getCallableMethodFromValue($scopeMethod)) {\n                $callableMethod($query, $model);\n            }\n            elseif (is_string($scopeMethod)) {\n                $query->$scopeMethod($model);\n            }\n        }\n        else {\n            $relationObject->addDefinedConstraintsToQuery($query);\n\n            // Reset any orders that come from the definition since they may\n            // reference the pivot table that isn't included in this query\n            if (in_array($relationType, ['belongsToMany', 'morphedByMany', 'morphToMany'])) {\n                $query->getQuery()->reorder();\n\n                // Re-apply defaultSort since it references valid columns\n                if ($this->defaultSort) {\n                    $this->applyDefaultSortToQuery($query);\n                }\n            }\n        }\n\n        // Determine if the model uses a tree trait\n        $usesTree = $relationModel->isClassInstanceOf(\\October\\Contracts\\Database\\TreeInterface::class);\n\n        // The \"sqlSelect\" config takes precedence over \"nameFrom\".\n        // A virtual column called \"selection\" will contain the result.\n        // Tree models must select all columns to return parent columns, etc.\n        if ($this->sqlSelect) {\n            $nameFrom = 'selection';\n            $selectColumn = $usesTree ? '*' : $relationModel->getKeyName();\n            $selectSql = $this->sqlSelect;\n            $result = $query->select($selectColumn, DbDongle::raw($selectSql . ' as ' . $nameFrom));\n        }\n        else {\n            // If the attribute is a getter, load all the models in to memory so it\n            // can be retrieved. This impacts performance so we try to avoid it.\n            // Otherwise, assume the name is taken from a database column.\n            $nameFrom = $this->nameFrom;\n            if ($relationModel->hasGetMutator($nameFrom) || $relationModel->hasAttributeMutator($nameFrom)) {\n                $result = $query->get();\n            }\n            else {\n                $result = $query;\n            }\n        }\n\n        // Relations can specify a custom local or foreign \"other\" key,\n        // which can be detected and implemented here automatically.\n        if (in_array($relationType, ['belongsTo'])) {\n            $primaryKeyName = $relationObject->getOwnerKeyName();\n        }\n        elseif (in_array($relationType, ['hasMany', 'hasOne', 'belongsToMany', 'morphedByMany', 'morphToMany'])) {\n            $primaryKeyName = $relationObject->getRelatedKeyName();\n        }\n        else {\n            $primaryKeyName = $relationModel->getKeyName();\n        }\n\n        // Set options on form field\n        if ($usesTree) {\n            $field->options = $this->makeFieldOptionsForTree(\n                $result,\n                $nameFrom,\n                $primaryKeyName\n            );\n        }\n        else {\n            $field->options = $result->pluck($nameFrom, $primaryKeyName)->all();\n        }\n\n        // Add quick create option to dropdown\n        if ($this->hasQuickCreate()) {\n            $field->options = $this->addQuickCreateOption($field->options);\n        }\n\n        return $this->renderFormField = $field;\n    }\n\n    /**\n     * makeFieldOptionsForTree\n     */\n    protected function makeFieldOptionsForTree($items, $nameFrom, $primaryKeyName)\n    {\n        // When conditions or scopes filter the query, parent nodes may be excluded\n        // from results. Preserve these orphaned children instead of discarding them.\n        $removeOrphans = !$this->conditions && !$this->modelScope;\n\n        if ($items instanceof \\October\\Rain\\Database\\TreeCollection) {\n            $items = $items->toNested($removeOrphans);\n        }\n        elseif (!$items instanceof \\Illuminate\\Database\\Eloquent\\Collection) {\n            $items = $items->get()->toNested($removeOrphans);\n        }\n\n        $options = [];\n\n        foreach ($items as $item) {\n            $newItem = [\n                'label' => $item->{$nameFrom},\n                'value' => $item->{$primaryKeyName},\n            ];\n\n            $childItems = $item->getChildren();\n            if ($childItems->count() > 0) {\n                $newItem['children'] = $this->makeFieldOptionsForTree(\n                    $childItems,\n                    $nameFrom,\n                    $primaryKeyName\n                );\n            }\n\n            $options[$item->{$primaryKeyName}] = $newItem;\n        }\n\n        return $options;\n    }\n\n    /**\n     * applyDefaultSortToQuery\n     */\n    protected function applyDefaultSortToQuery($query)\n    {\n        if (is_string($this->defaultSort)) {\n            $query->orderBy($this->defaultSort, 'desc');\n        }\n        elseif (is_array($this->defaultSort) && isset($this->defaultSort['column'])) {\n            $query->orderBy($this->defaultSort['column'], $this->defaultSort['direction'] ?? 'desc');\n        }\n    }\n\n    /**\n     * evalUseController determines if the relation controller is usable and returns the default\n     * preference if it can be used.\n     */\n    protected function evalUseController(bool $defaultPref): bool\n    {\n        if ($this->useControllerConfig) {\n            return true;\n        }\n\n        if (!$this->controller->isClassExtendedWith(\\Backend\\Behaviors\\RelationController::class)) {\n            return false;\n        }\n\n        if (!is_string($this->valueFrom)) {\n            return false;\n        }\n\n        if (!$this->controller->relationHasField($this->getRelationControllerFieldName())) {\n            return false;\n        }\n\n        return $defaultPref;\n    }\n\n    /**\n     * defineRelationControllerConfig\n     */\n    protected function defineRelationControllerConfig()\n    {\n        if (!$this->useController || !$this->useControllerConfig) {\n            return;\n        }\n\n        if (!$this->controller->isClassExtendedWith(\\Backend\\Behaviors\\RelationController::class)) {\n            $this->controller->extendClassWith(\\Backend\\Behaviors\\RelationController::class);\n            $this->controller->asExtension('RelationController')->beforeDisplay();\n        }\n\n        $controllerConfig = $this->useControllerConfig;\n\n        if (!isset($controllerConfig['readOnly']) && $this->readOnly === true) {\n            $controllerConfig['readOnly'] = $this->readOnly;\n        }\n\n        if (!isset($controllerConfig['sessionKey'])) {\n            $controllerConfig['sessionKey'] = $this->getParentForm()?->getSessionKeyWithSuffix();\n        }\n\n        $this->controller->relationRegisterField($this->getRelationControllerFieldName(), $controllerConfig);\n    }\n\n    /**\n     * getRelationControllerFieldName\n     */\n    protected function getRelationControllerFieldName()\n    {\n        $relationName = $this->valueFrom;\n\n        if ($parentFieldName = $this->getParentForm()?->parentFieldName) {\n            $relationName = $parentFieldName . '['.implode('][', HtmlHelper::nameToArray($relationName)).']';\n        }\n\n        return $relationName;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        if (is_string($value) && !strlen($value)) {\n            return null;\n        }\n\n        if (is_array($value) && !count($value)) {\n            return null;\n        }\n\n        return $value;\n    }\n\n    /**\n     * resetFormValue from the form field\n     */\n    public function resetFormValue()\n    {\n        // Transfer approved config\n        $this->modelScope = $this->formField->modelScope ?: $this->formField->scope;\n        $this->conditions = $this->formField->conditions;\n        $this->defaultSort = $this->formField->defaultSort;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/Repeater.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\FormWidgetBase;\n\n/**\n * Repeater Form Widget\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Repeater extends FormWidgetBase\n{\n    use \\Backend\\Traits\\FormModelSaver;\n    use \\Backend\\Traits\\FormModelWidget;\n    use \\Backend\\FormWidgets\\Repeater\\HasJsonStore;\n    use \\Backend\\FormWidgets\\Repeater\\HasRelationStore;\n\n    const MODE_ACCORDION = 'accordion';\n    const MODE_BUILDER = 'builder';\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var array form field configuration\n     */\n    public $form;\n\n    /**\n     * @var array groups configuration\n     */\n    public $groups;\n\n    /**\n     * @var string prompt text for adding new items\n     */\n    public $prompt = \"Add New Item\";\n\n    /**\n     * @var bool showReorder allows the user to reorder the items\n     */\n    public $showReorder = true;\n\n    /**\n     * @var bool showDuplicate allow the user to duplicate an item\n     */\n    public $showDuplicate = true;\n\n    /**\n     * @var string titleFrom field name to use for the title of collapsed items\n     */\n    public $titleFrom = false;\n\n    /**\n     * @var string groupKeyFrom attribute stored along with the saved data\n     */\n    public $groupKeyFrom = '_group';\n\n    /**\n     * @var int minItems required. Pre-displays those items when not using groups\n     */\n    public $minItems;\n\n    /**\n     * @var int maxItems permitted\n     */\n    public $maxItems;\n\n    /**\n     * @var string displayMode constant\n     */\n    public $displayMode;\n\n    /**\n     * @var bool itemsExpanded will expand the repeater item by default, otherwise\n     * they will be collapsed and only select one at a time when clicking the header.\n     */\n    public $itemsExpanded = true;\n\n    /**\n     * @var bool useTabs for the form fields.\n     */\n    public $useTabs = false;\n\n    /**\n     * @var string Defines a mount point for the editor toolbar.\n     * Must include a module name that exports the Vue application and a state element name.\n     * Format: stateElementName\n     * Only works in Vue applications and form document layouts.\n     */\n    public $externalToolbarAppState = null;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'repeater';\n\n    /**\n     * @var array indexMeta data associated to each field, organised by index\n     */\n    protected $indexMeta = [];\n\n    /**\n     * @var array formWidgets collection\n     */\n    protected $formWidgets = [];\n\n    /**\n     * @var bool onAddItemCalled sets the create context for default values\n     */\n    protected static $onAddItemCalled;\n\n    /**\n     * @var bool useGroups\n     */\n    protected $useGroups = false;\n\n    /**\n     * @var bool useRelation\n     */\n    protected $useRelation = false;\n\n    /**\n     * @var array relatedRecords when using a relation\n     */\n    protected $relatedRecords;\n\n    /**\n     * @var array groupDefinitions\n     */\n    protected $groupDefinitions = [];\n\n    /**\n     * @var boolean isLoaded is true when the request is made via postback\n     */\n    protected $isLoaded = false;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'form',\n            'groups',\n            'prompt',\n            'displayMode',\n            'itemsExpanded',\n            'showReorder',\n            'showDuplicate',\n            'titleFrom',\n            'groupKeyFrom',\n            'minItems',\n            'maxItems',\n            'useTabs',\n            'externalToolbarAppState'\n        ]);\n\n        if ($this->formField->disabled) {\n            $this->previewMode = true;\n        }\n\n        $this->processGroupMode();\n\n        $this->processRelationMode();\n\n        $this->processLoadedState();\n\n        $this->processLegacyConfig();\n\n        $this->processItems();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('repeater');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        if ($this->previewMode) {\n            foreach ($this->formWidgets as $widget) {\n                $widget->previewMode = true;\n            }\n        }\n\n        $this->vars['name'] = $this->getFieldName();\n        $this->vars['displayMode'] = $this->getDisplayMode();\n        $this->vars['itemsExpanded'] = $this->itemsExpanded;\n        $this->vars['prompt'] = $this->prompt;\n        $this->vars['formWidgets'] = $this->formWidgets;\n        $this->vars['titleFrom'] = $this->titleFrom;\n        $this->vars['groupKeyFrom'] = $this->groupKeyFrom;\n        $this->vars['minItems'] = $this->minItems;\n        $this->vars['maxItems'] = $this->maxItems;\n        $this->vars['useRelation'] = $this->useRelation;\n        $this->vars['useGroups'] = $this->useGroups;\n        $this->vars['groupDefinitions'] = $this->groupDefinitions;\n        $this->vars['showReorder'] = $this->showReorder;\n        $this->vars['showDuplicate'] = $this->showDuplicate;\n        $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/repeater.css');\n        $this->addJs('js/repeater.accordion.js', ['type' => 'module']);\n        $this->addJs('js/repeater.builder.js', ['type' => 'module']);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        return $this->processSaveValue($value);\n    }\n\n    /**\n     * resetFormValue from the form field\n     */\n    public function resetFormValue()\n    {\n        // Transfer approved config\n        $this->minItems = $this->formField->minItems;\n        $this->maxItems = $this->formField->maxItems;\n\n        // Reprocess widgets\n        $this->formWidgets = [];\n        $this->processItems();\n\n        // Reprocess related items\n        $this->relatedRecords = null;\n    }\n\n    /**\n     * processLoadedState is special logic that occurs during a postback,\n     * the form field value is set directly from the postback data, this occurs\n     * during initialization so that nested form widgets can be bound to the controller.\n     */\n    protected function processLoadedState()\n    {\n        if (!post($this->alias . '_loaded')) {\n            return;\n        }\n\n        $this->formField->value = $this->getLoadedValueFromPost();\n        $this->isLoaded = true;\n    }\n\n    /**\n     * getLoadedValueFromPost returns the loaded value from postback with indexes intact\n     */\n    protected function getLoadedValueFromPost()\n    {\n        return post($this->formField->getName());\n    }\n\n    /**\n     * processLegacyConfig converts deprecated options to latest\n     */\n    protected function processLegacyConfig()\n    {\n        if ($style = $this->getConfig('style')) {\n            if ($style === 'accordion' || $style === 'collapsed') {\n                $this->itemsExpanded = false;\n            }\n        }\n    }\n\n    /**\n     * processSaveValue splices in some meta data (group and index values) to the dataset\n     * @param array $value\n     * @return array|null\n     */\n    protected function processSaveValue($value)\n    {\n        return $this->useRelation\n            ? $this->processSaveForRelation($value)\n            : $this->processSaveForJson($value);\n    }\n\n    /**\n     * processItems processes data and applies it to the form widgets\n     */\n    protected function processItems()\n    {\n        if ($this->useRelation) {\n            $this->processItemsForRelation();\n        }\n        else {\n            $this->processItemsForJson();\n        }\n    }\n\n    /**\n     * makeItemFormWidget creates a form widget based on a field index and optional group code\n     * @param int|string $index\n     * @param string $groupCode\n     * @param int|string $fromIndex\n     * @return \\Backend\\Widgets\\Form\n     */\n    protected function makeItemFormWidget($index = 0, $groupCode = null, $fromIndex = null)\n    {\n        $configDefinition = $this->useGroups\n            ? $this->getGroupFormFieldConfig($groupCode)\n            : $this->form;\n\n        $config = $this->makeConfig($configDefinition);\n\n        // Duplicate\n        $dataIndex = $fromIndex !== null ? $fromIndex : $index;\n\n        if ($this->useRelation) {\n            $config->model = $this->getModelFromIndex($index);\n            $indexName = ($modelKey = $config->model->getKey()) ? \"id:{$modelKey}\" : $index;\n        }\n        else {\n            $config->model = $this->model;\n            $config->data = $this->getValueFromIndex($dataIndex);\n            $config->isNested = true;\n            $indexName = $index;\n        }\n\n        $config->alias = $this->alias . 'Form' . $index;\n        $config->context = self::$onAddItemCalled ? FormField::CONTEXT_CREATE : FormField::CONTEXT_UPDATE;\n        $config->arrayName = $this->getFieldName().'['.$index.']';\n        $config->sessionKey = $this->sessionKey;\n        $config->sessionKeySuffix = $this->sessionKeySuffix . \"-{$index}\";\n        $config->parentFieldName = $this->formField->fieldName . \"[{$indexName}]\";\n\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $config);\n        $widget->previewMode = $this->previewMode;\n\n        $this->indexMeta[$index] = [\n            'groupCode' => $groupCode\n        ];\n\n        // Convert to tabbed config\n        $useTabs = isset($config->useTabs) ? $config->useTabs : $this->useTabs;\n        if ($useTabs) {\n            $widget->bindEvent('form.extendFields', function() use ($widget) {\n                $this->moveTabbedFormFields($widget, 'outside', 'secondary');\n            });\n        }\n\n        $widget->bindToController();\n\n        return $this->formWidgets[$index] = $widget;\n    }\n\n    /**\n     * moveTabbedFormFields from one tab to another\n     */\n    protected function moveTabbedFormFields($widget, $fromTab, $toTab)\n    {\n        $from = $widget->getTab($fromTab);\n        $to = $widget->getTab($toTab);\n\n        foreach ($from->getAllFields() as $name => $field) {\n            $to->addField($name, $field);\n            $from->removeField($name);\n        }\n    }\n\n    /**\n     * getValueFromIndex returns the data at a given index\n     * @param int|string $index\n     */\n    protected function getValueFromIndex($index)\n    {\n        $data = $this->getLoadValue();\n\n        return $data[$index] ?? [];\n    }\n\n    /**\n     * getDisplayMode for the repeater\n     */\n    protected function getDisplayMode(): string\n    {\n        return in_array($this->displayMode, [static::MODE_ACCORDION, static::MODE_BUILDER])\n            ? $this->displayMode\n            : static::MODE_ACCORDION;\n    }\n\n    //\n    // AJAX handlers\n    //\n\n    /**\n     * onAddItem handler\n     */\n    public function onAddItem()\n    {\n        self::$onAddItemCalled = true;\n\n        $this->prepareParentModelData();\n\n        $groupCode = post('_repeater_group');\n\n        if ($this->useRelation) {\n            $index = $this->createRelationAtIndex($groupCode)->getKey();\n        }\n        else {\n            $index = $this->getNextIndex();\n        }\n\n        $this->prepareVars();\n        $this->vars['widget'] = $this->makeItemFormWidget($index, $groupCode);\n        $this->vars['indexValue'] = $index;\n\n        $itemContainer = '@#' . $this->getId('items');\n\n        return [\n            $itemContainer => $this->makePartial('repeater_item')\n        ];\n    }\n\n    /**\n     * onDuplicateItem\n     */\n    public function onDuplicateItem()\n    {\n        $fromIndex = post('_repeater_index');\n        $groupCode = post('_repeater_group');\n\n        if ($this->useRelation) {\n            // Relation must be saved to replicate\n            $this->processSaveForRelation([$fromIndex => $this->getValueFromIndex($fromIndex)]);\n\n            // Duplicate the model with replication\n            $toIndex = $this->duplicateRelationAtIndex($fromIndex, $groupCode)->getKey();\n        }\n        else {\n            $toIndex = $this->getNextIndex();\n        }\n\n        $this->prepareVars();\n        $this->vars['widget'] = $this->makeItemFormWidget($toIndex, $groupCode, $fromIndex);\n        $this->vars['indexValue'] = $toIndex;\n\n        $itemContainer = '@#' . $this->getId('items');\n\n        return [\n            'result' => ['duplicateIndex' => $toIndex],\n            $itemContainer => $this->makePartial('repeater_item')\n        ];\n    }\n\n    /**\n     * onRemoveItem\n     */\n    public function onRemoveItem()\n    {\n        if (!$this->useRelation) {\n            return;\n        }\n\n        // Delete related records\n        $deletedItems = (array) post('_repeater_items');\n        foreach ($deletedItems as $item) {\n            $index = $item['repeater_index'] ?? null;\n            if ($index !== null) {\n                $this->deleteRelationAtIndex($index);\n            }\n        }\n    }\n\n    /**\n     * onRefresh\n     */\n    public function onRefresh()\n    {\n        $this->prepareParentModelData();\n\n        $index = post('_repeater_index');\n        $group = post('_repeater_group');\n\n        $widget = $this->makeItemFormWidget($index, $group);\n\n        return $widget->onRefresh();\n    }\n\n    /**\n     * getNextIndex determines the next available index number for assigning to a\n     * new repeater item\n     */\n    protected function getNextIndex(): int\n    {\n        $data = $this->getLoadedValueFromPost();\n\n        if (is_array($data) && count($data)) {\n            return max(array_keys($data)) + 1;\n        }\n\n        return 0;\n    }\n\n    /**\n     * prepareParentModelData will ensure the parent model has its form data set\n     * to provide context for newly created items or refreshed existing items.\n     */\n    protected function prepareParentModelData()\n    {\n        // This code is used since it is more efficient than calling setFormValues()\n        // on the form widget, switching to this could be useful if form field value\n        // context is needed in the future.\n        if (($form = $this->getParentForm()) && !$form->isNested) {\n            $this->prepareModelsToSave($form->getModel(), $form->getSaveData());\n        }\n    }\n\n    //\n    // Group Mode\n    //\n\n    /**\n     * getGroupFormFieldConfig returns the form field configuration for a group, identified by code\n     * @param string $code\n     * @return array|null\n     */\n    protected function getGroupFormFieldConfig($code)\n    {\n        if (!$code) {\n            return null;\n        }\n\n        $config = array_get($this->groupDefinitions, $code);\n\n        if (!isset($config['fields'])) {\n            return null;\n        }\n\n        return $config;\n    }\n\n    /**\n     * processGroupMode processes features related to group mode\n     */\n    protected function processGroupMode()\n    {\n        $palette = [];\n        $groups = $this->groups;\n        $this->useGroups = (bool) $groups;\n\n        if ($this->useGroups) {\n            if (is_string($groups)) {\n                $groups = $this->makeConfig($groups);\n            }\n\n            foreach ($groups as $code => $config) {\n                if (str_starts_with($code, '_')) {\n                    continue;\n                }\n\n                if (is_string($config)) {\n                    $config = $this->makeConfig($config);\n                }\n\n                $palette[$code] = ['code' => $code] + ((array) $config) + [\n                    'name' => '',\n                    'icon' => 'icon-square',\n                    'description' => '',\n                    'titleFrom' => '',\n                    'fields' => [],\n                ];\n            }\n\n            $this->groupDefinitions = $palette;\n        }\n    }\n\n    /**\n     * getGroupCodeFromIndex returns a field group code from its index\n     * @param int|string $index\n     */\n    public function getGroupCodeFromIndex($index): string\n    {\n        return (string) array_get($this->indexMeta, $index.'.groupCode');\n    }\n\n    /**\n     * getGroupItemConfig returns the group config from its unique code\n     * @param string $groupCode\n     * @param ?string $name\n     */\n    public function getGroupItemConfig($groupCode, $name = null, $default = null)\n    {\n        return array_get($this->groupDefinitions, $groupCode.'.'.$name, $default);\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/RichEditor.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse App;\nuse Config;\nuse BackendAuth;\nuse Backend\\Classes\\FormWidgetBase;\nuse Backend\\Models\\EditorSetting;\n\n/**\n * RichEditor renders a rich content editor field.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RichEditor extends FormWidgetBase\n{\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var bool Determines whether content has HEAD and HTML tags.\n     */\n    public $fullPage = false;\n\n    /**\n     * @var bool Determines whether content has HEAD and HTML tags.\n     */\n    public $toolbarButtons;\n\n    /**\n     * @var bool If true, the editor is set to read-only mode\n     */\n    public $readOnly = false;\n\n    /**\n     * @var bool The Legacy mode disables the Vue integration.\n     */\n    public $legacyMode = false;\n\n    /**\n     * @var bool showMargins includes resizable document margins.\n     * Only works in Vue applications and form document layouts.\n     */\n    public $showMargins = false;\n\n    /**\n     * @var bool useLineBreaks uses line breaks instead of paragraph wrappers for each new line.\n     */\n    public $useLineBreaks = false;\n\n    /**\n     * @var string Defines a mount point for the editor toolbar.\n     * Must include a module name that exports the Vue application and a state element name.\n     * Format: stateElementName\n     * Only works in Vue applications and form document layouts.\n     */\n    public $externalToolbarAppState = null;\n\n    /**\n     * @var array|null editorOptions configured in the Froala editor. For example:\n     *\n     * - imageDefaultWidth: Sets the default width of the image when it is inserted in the rich text editor. Setting it to `0` will not set any width.\n     * - imageDefaultAlign: Sets the default image alignment when it is inserted in the rich text editor. Possible values are `left`, `center` and `right`.\n     * - imageDefaultDisplay: Sets the default display for an image when is is inserted in the rich text. Possible options are: `inline` and `block`.\n     */\n    public $editorOptions = null;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'richeditor';\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        if ($this->formField->disabled) {\n            $this->readOnly = true;\n        }\n\n        $this->fillFromConfig([\n            'fullPage',\n            'readOnly',\n            'toolbarButtons',\n            'legacyMode',\n            'showMargins',\n            'useLineBreaks',\n            'editorOptions',\n            'externalToolbarAppState',\n            'externalToolbarEventBus'\n        ]);\n\n        if (!$this->legacyMode) {\n            $this->controller->registerVueComponent(\\Backend\\VueComponents\\RichEditorDocumentConnector::class);\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('richeditor');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['field'] = $this->formField;\n        $this->vars['editorLang'] = $this->getValidEditorLang();\n        $this->vars['editorOptions'] = $this->getValidEditorOptions();\n        $this->vars['fullPage'] = $this->fullPage;\n        $this->vars['useLineBreaks'] = $this->useLineBreaks;\n        $this->vars['stretch'] = $this->formField->stretch;\n        $this->vars['size'] = $this->formField->size;\n        $this->vars['readOnly'] = $this->readOnly;\n        $this->vars['showMargins'] = $this->showMargins;\n        $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState;\n        $this->vars['name'] = $this->getFieldName();\n        $this->vars['value'] = $this->getLoadValue();\n        $this->vars['toolbarButtons'] = $this->evalToolbarButtons();\n        $this->vars['useMediaManager'] = BackendAuth::userHasAccess('media.library');\n        $this->vars['legacyMode'] = $this->legacyMode;\n\n        $this->vars['globalToolbarButtons'] = EditorSetting::getConfigured('html_toolbar_buttons');\n        $this->vars['allowEmptyTags'] = EditorSetting::getConfigured('html_allow_empty_tags');\n        $this->vars['allowTags'] = EditorSetting::getConfigured('html_allow_tags');\n        $this->vars['allowAttrs'] = EditorSetting::getConfigured('html_allow_attrs');\n        $this->vars['noWrapTags'] = EditorSetting::getConfigured('html_no_wrap_tags');\n        $this->vars['removeTags'] = EditorSetting::getConfigured('html_remove_tags');\n        $this->vars['lineBreakerTags'] = EditorSetting::getConfigured('html_line_breaker_tags');\n\n        $this->vars['imageStyles'] = EditorSetting::getConfiguredStyles('html_style_image');\n        $this->vars['linkStyles'] = EditorSetting::getConfiguredStyles('html_style_link');\n        $this->vars['paragraphFormats'] = EditorSetting::getConfiguredFormats('html_paragraph_formats');\n        $this->vars['paragraphStyles'] = EditorSetting::getConfiguredStyles('html_style_paragraph');\n        $this->vars['inlineStyles'] = EditorSetting::getConfiguredStyles('html_style_inline');\n        $this->vars['tableStyles'] = EditorSetting::getConfiguredStyles('html_style_table');\n        $this->vars['tableCellStyles'] = EditorSetting::getConfiguredStyles('html_style_table_cell');\n    }\n\n    /**\n     * evalToolbarButtons to use based on config.\n     * @return string\n     */\n    protected function evalToolbarButtons()\n    {\n        $buttons = $this->toolbarButtons;\n\n        if (is_string($buttons)) {\n            $buttons = array_map(function ($button) {\n                return strlen($button) ? $button : '|';\n            }, explode('|', $buttons));\n        }\n\n        return $buttons;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/richeditor.css');\n        $this->addJs('js/richeditor.js', ['type' => 'module']);\n        $this->addJs('/modules/backend/formwidgets/codeeditor/assets/js/build-min.js');\n    }\n\n    /**\n     * getValidEditorLang returns a proposed language code for Froala.\n     */\n    protected function getValidEditorLang(): ?string\n    {\n        $locale = App::getLocale();\n\n        // English is baked in\n        if ($locale !== 'en') {\n            return str_replace('-', '_', strtolower($locale));\n        }\n\n        return null;\n    }\n\n    /**\n     * getValidEditorOptions returns custom editor options passed directly to the JS control\n     */\n    protected function getValidEditorOptions(): array\n    {\n        $config = [];\n\n        if (is_array($this->editorOptions)) {\n            $config += $this->editorOptions;\n        }\n\n        if (\n            Config::get('editor.html_defaults.enabled', false) &&\n            is_array($fileConfig = Config::get('editor.html_defaults.editor_options'))\n        ) {\n            $config += $fileConfig;\n        }\n\n        return $config;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/Sensitive.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse Backend\\Classes\\FormWidgetBase;\n\n/**\n * Sensitive widget renders a password field that can be optionally made visible\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Sensitive extends FormWidgetBase\n{\n    /**\n     * @var bool readOnly if the sensitive field cannot be edited, but can be toggled\n     */\n    public $readOnly = false;\n\n    /**\n     * @var bool disabled if the sensitive field is disabled\n     */\n    public $disabled = false;\n\n    /**\n     * @var bool allowCopy if a button will be available to copy the value\n     */\n    public $allowCopy = false;\n\n    /**\n     * @var string displayMode determines how the widget is displayed. Modes: text, textarea\n     */\n    public $displayMode = 'text';\n\n    /**\n     * @var string hiddenPlaceholder string used as a placeholder for an unrevealed sensitive value\n     */\n    public $hiddenPlaceholder = '__hidden__';\n\n    /**\n     * @var bool hideOnTabChange if the sensitive input will be hidden if the user changes to another tab\n     */\n    public $hideOnTabChange = true;\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'sensitive';\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'readOnly',\n            'disabled',\n            'allowCopy',\n            'hiddenPlaceholder',\n            'hideOnTabChange',\n        ]);\n\n        $this->displayMode = isset($this->config->mode) && in_array($this->config->mode, ['text', 'textarea'])\n            ? $this->config->mode\n            : 'text';\n\n        if ($this->formField->disabled || $this->formField->readOnly) {\n            $this->previewMode = true;\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        return $this->makePartial('sensitive');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['readOnly'] = $this->readOnly;\n        $this->vars['disabled'] = $this->disabled;\n        $this->vars['hasValue'] = !empty($this->getLoadValue());\n        $this->vars['allowCopy'] = $this->allowCopy;\n        $this->vars['hiddenPlaceholder'] = $this->hiddenPlaceholder;\n        $this->vars['hideOnTabChange'] = $this->hideOnTabChange;\n        $this->vars['displayMode'] = $this->displayMode;\n    }\n\n    /**\n     * onShowValue reveals the value of a hidden, unmodified sensitive field\n     */\n    public function onShowValue()\n    {\n        return [\n            'value' => $this->getLoadValue()\n        ];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        if ($value === $this->hiddenPlaceholder) {\n            $value = $this->getLoadValue();\n        }\n\n        return $value;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/sensitive.css');\n        $this->addJs('js/sensitive.js');\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/TagList.php",
    "content": "<?php namespace Backend\\FormWidgets;\n\nuse October\\Rain\\Database\\Model;\nuse Backend\\Classes\\FormWidgetBase;\n\n/**\n * Tag List Form Widget\n */\nclass TagList extends FormWidgetBase\n{\n    use \\Backend\\Traits\\FormModelWidget;\n    use \\Backend\\FormWidgets\\TagList\\HasStringStore;\n    use \\Backend\\FormWidgets\\TagList\\HasRelationStore;\n\n    const MODE_ARRAY = 'array';\n    const MODE_STRING = 'string';\n    const MODE_RELATION = 'relation';\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string separator for tags: space, comma.\n     */\n    public $separator = 'comma';\n\n    /**\n     * @var bool customTags allowed to be entered manually by the user.\n     */\n    public $customTags = false;\n\n    /**\n     * @var bool useKey instead of value for saving and reading data.\n     */\n    public $useKey = true;\n\n    /**\n     * @var mixed options settings. Set to true to get from model.\n     */\n    public $options;\n\n    /**\n     * @var string mode for the return value. Values: string, array, relation.\n     */\n    public $mode;\n\n    /**\n     * @var string nameFrom if mode is relation, model column to use for the name reference.\n     */\n    public $nameFrom = 'name';\n\n    /**\n     * @var string placeholder for empty TagList widget\n     */\n    public $placeholder = '';\n\n    /**\n     * @var int maxItems permitted\n     */\n    public $maxItems;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @var bool useOptions if they are supplied by the model or array\n     */\n    protected $useOptions = false;\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'taglist';\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'separator',\n            'customTags',\n            'options',\n            'mode',\n            'nameFrom',\n            'maxItems',\n            'useKey',\n            'placeholder'\n        ]);\n\n        // Keys cannot be used with custom tags\n        if ($this->customTags) {\n            $this->useKey = false;\n        }\n\n        $this->processMode();\n\n        $this->useOptions = $this->formField->hasOptions();\n    }\n\n    /**\n     * processMode\n     */\n    protected function processMode()\n    {\n        // Set by config\n        if ($this->mode !== null) {\n            return;\n        }\n\n        [$model, $attribute] = $this->nearestModelAttribute($this->valueFrom);\n\n        if ($model instanceof Model && $model->hasRelation($attribute)) {\n            $this->mode = static::MODE_RELATION;\n            return;\n        }\n\n        if ($model instanceof Model && $model->isJsonable($attribute)) {\n            $this->mode = static::MODE_ARRAY;\n            return;\n        }\n\n        $this->mode = static::MODE_STRING;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        return $this->makePartial('taglist');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['placeholder'] = $this->placeholder;\n        $this->vars['maxItems'] = $this->maxItems;\n        $this->vars['useKey'] = $this->useKey;\n        $this->vars['field'] = $this->formField;\n        $this->vars['selectedValues'] = $this->getLoadValue();\n        $this->vars['customSeparators'] = $this->getCustomSeparators();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getSaveValue($value)\n    {\n        if ($this->mode === static::MODE_RELATION) {\n            return $this->processSaveForRelation($value);\n        }\n\n        if ($this->mode === static::MODE_STRING) {\n            return $this->processSaveForString($value);\n        }\n\n        return $value;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getLoadValue()\n    {\n        $value = parent::getLoadValue();\n\n        if ($this->mode === static::MODE_RELATION) {\n            return $this->getLoadValueFromRelation($value);\n        }\n\n        if (!is_array($value) && $this->mode === static::MODE_STRING) {\n            return $this->getLoadValueFromString($value);\n        }\n\n        return $value;\n    }\n\n    /**\n     * getFieldOptions returns defined field options, or from the relation if available.\n     * @return array\n     */\n    public function getFieldOptions()\n    {\n        $options = [];\n\n        if ($this->useOptions) {\n            $options = $this->formField->options();\n        }\n        elseif ($this->mode === static::MODE_RELATION) {\n            $options = $this->getFieldOptionsForRelation();\n        }\n\n        return $options;\n    }\n\n    /**\n     * getKeylessOptions returns a flat set of options when useKey is false\n     */\n    public function getKeylessOptions(array $selectedValues, array $fieldOptions): array\n    {\n        $result = [];\n\n        foreach ($fieldOptions as $option) {\n            if ($flatValue = $option->label) {\n                $result[$flatValue] = $flatValue;\n            }\n        }\n\n        foreach ($selectedValues as $value) {\n            $result[$value] = $value;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getPreviewOptions generates options for display in read only modes\n     */\n    public function getPreviewOptions(array $selectedValues, array $fieldOptions): array\n    {\n        $displayOptions = [];\n\n        foreach ($fieldOptions as $key => $option) {\n            if (\n                ($this->useKey && in_array($key, $selectedValues)) ||\n                (!$this->useKey && in_array($option->label, $selectedValues))\n            ) {\n                $displayOptions[] = $option;\n            }\n        }\n\n        return $displayOptions;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/css/codeeditor.css",
    "content": ".field-codeeditor{border:2px solid var(--bs-border-color);border-radius:4px;position:relative;width:100%}.field-codeeditor textarea{opacity:0}.field-codeeditor.editor-focus{border:2px solid var(--oc-border-focus)}.field-codeeditor.size-tiny{min-height:50px}.field-codeeditor.size-small{min-height:100px}.field-codeeditor.size-large{min-height:200px}.field-codeeditor.size-huge{min-height:250px}.field-codeeditor.size-giant{min-height:350px}.field-codeeditor .ace_search{color:var(--bs-body-color);font-family:sans-serif;font-size:14px;z-index:13}.field-codeeditor .ace_search .ace_search_form.ace_nomatch{outline:none!important}.field-codeeditor .ace_search .ace_search_form.ace_nomatch .ace_search_field{border:.0625rem solid red;box-shadow:0 0 .1875rem .125rem red;position:relative;z-index:1}.field-codeeditor .editor-code{border-radius:4px}.field-codeeditor .editor-toolbar{background:rgba(0,0,0,.8);border:none;border-radius:5px;bottom:10px;padding:0 5px;position:absolute;right:25px;z-index:10}.field-codeeditor .editor-toolbar:before{display:none}.field-codeeditor .editor-toolbar ul>li,.field-codeeditor .editor-toolbar>ul{list-style-type:none;margin:0;padding:0}.field-codeeditor .editor-toolbar>ul>li{float:left}.field-codeeditor .editor-toolbar>ul>li .tooltip.left{margin-right:25px}.field-codeeditor .editor-toolbar>ul>li>a{color:#666;display:block;font-size:20px;height:25px;text-align:center;text-decoration:none;text-shadow:0 0 5px #000;width:25px}.field-codeeditor .editor-toolbar>ul>li>a>abbr{background-color:transparent;border:0;color:transparent;font:0/0 a;position:absolute;text-shadow:none}.field-codeeditor .editor-toolbar>ul>li>a>i{display:block;opacity:1}.field-codeeditor .editor-toolbar>ul>li>a>i:before{font-size:15px}.field-codeeditor .editor-toolbar>ul>li>a:focus>i,.field-codeeditor .editor-toolbar>ul>li>a:hover>i{color:#fff;opacity:1}.field-codeeditor.editor-fullscreen{border-radius:0;border-width:0;height:100%;left:0;position:fixed!important;top:0;z-index:301}.field-codeeditor.editor-fullscreen .editor-toolbar{z-index:302}.field-codeeditor.editor-fullscreen .editor-code{border-radius:0}.field-codeeditor.editor-fullscreen .ace_search{z-index:303}\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/js/build-min.js",
    "content": "var _=function(){var e=this,t=e._,r={},n=Array.prototype,i=Object.prototype,o=Function.prototype,s=n.slice,a=n.unshift,l=i.toString,c=i.hasOwnProperty,u=n.forEach,d=n.map,g=n.reduce,h=n.reduceRight,m=n.filter,p=n.every,_=n.some,f=n.indexOf,b=n.lastIndexOf,y=Array.isArray,x=Object.keys,v=o.bind,w=function(e){return new M(e)};\"undefined\"!=typeof exports?(\"undefined\"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):e._=w,w.VERSION=\"1.3.3\";var k=w.each=w.forEach=function(e,t,n){if(null!=e)if(u&&e.forEach===u)e.forEach(t,n);else if(e.length===+e.length){for(var i=0,o=e.length;i<o;i++)if(i in e&&t.call(n,e[i],i,e)===r)return}else for(var s in e)if(w.has(e,s)&&t.call(n,e[s],s,e)===r)return};w.map=w.collect=function(e,t,r){var n=[];return null==e?n:d&&e.map===d?e.map(t,r):(k(e,function(e,i,o){n[n.length]=t.call(r,e,i,o)}),e.length===+e.length&&(n.length=e.length),n)},w.reduce=w.foldl=w.inject=function(e,t,r,n){var i=arguments.length>2;if(null==e&&(e=[]),g&&e.reduce===g)return n&&(t=w.bind(t,n)),i?e.reduce(t,r):e.reduce(t);if(k(e,function(e,o,s){i?r=t.call(n,r,e,o,s):(r=e,i=!0)}),!i)throw new TypeError(\"Reduce of empty array with no initial value\");return r},w.reduceRight=w.foldr=function(e,t,r,n){var i=arguments.length>2;if(null==e&&(e=[]),h&&e.reduceRight===h)return n&&(t=w.bind(t,n)),i?e.reduceRight(t,r):e.reduceRight(t);var o=w.toArray(e).reverse();return n&&!i&&(t=w.bind(t,n)),i?w.reduce(o,t,r,n):w.reduce(o,t)},w.find=w.detect=function(e,t,r){var n;return C(e,function(e,i,o){if(t.call(r,e,i,o))return n=e,!0}),n},w.filter=w.select=function(e,t,r){var n=[];return null==e?n:m&&e.filter===m?e.filter(t,r):(k(e,function(e,i,o){t.call(r,e,i,o)&&(n[n.length]=e)}),n)},w.reject=function(e,t,r){var n=[];return null==e||k(e,function(e,i,o){t.call(r,e,i,o)||(n[n.length]=e)}),n},w.every=w.all=function(e,t,n){var i=!0;return null==e?i:p&&e.every===p?e.every(t,n):(k(e,function(e,o,s){if(!(i=i&&t.call(n,e,o,s)))return r}),!!i)};var C=w.some=w.any=function(e,t,n){t||(t=w.identity);var i=!1;return null==e?i:_&&e.some===_?e.some(t,n):(k(e,function(e,o,s){if(i||(i=t.call(n,e,o,s)))return r}),!!i)};w.include=w.contains=function(e,t){var r=!1;return null==e?r:f&&e.indexOf===f?-1!=e.indexOf(t):r=C(e,function(e){return e===t})},w.invoke=function(e,t){var r=s.call(arguments,2);return w.map(e,function(e){return(w.isFunction(t)?t||e:e[t]).apply(e,r)})},w.pluck=function(e,t){return w.map(e,function(e){return e[t]})},w.max=function(e,t,r){if(!t&&w.isArray(e)&&e[0]===+e[0])return Math.max.apply(Math,e);if(!t&&w.isEmpty(e))return-1/0;var n={computed:-1/0};return k(e,function(e,i,o){var s=t?t.call(r,e,i,o):e;s>=n.computed&&(n={value:e,computed:s})}),n.value},w.min=function(e,t,r){if(!t&&w.isArray(e)&&e[0]===+e[0])return Math.min.apply(Math,e);if(!t&&w.isEmpty(e))return 1/0;var n={computed:1/0};return k(e,function(e,i,o){var s=t?t.call(r,e,i,o):e;s<n.computed&&(n={value:e,computed:s})}),n.value},w.shuffle=function(e){var t,r=[];return k(e,function(e,n,i){t=Math.floor(Math.random()*(n+1)),r[n]=r[t],r[t]=e}),r},w.sortBy=function(e,t,r){var n=w.isFunction(t)?t:function(e){return e[t]};return w.pluck(w.map(e,function(e,t,i){return{value:e,criteria:n.call(r,e,t,i)}}).sort(function(e,t){var r=e.criteria,n=t.criteria;return void 0===r?1:void 0===n||r<n?-1:r>n?1:0}),\"value\")},w.groupBy=function(e,t){var r={},n=w.isFunction(t)?t:function(e){return e[t]};return k(e,function(e,t){var i=n(e,t);(r[i]||(r[i]=[])).push(e)}),r},w.sortedIndex=function(e,t,r){r||(r=w.identity);for(var n=0,i=e.length;n<i;){var o=n+i>>1;r(e[o])<r(t)?n=o+1:i=o}return n},w.toArray=function(e){return e?w.isArray(e)||w.isArguments(e)?s.call(e):e.toArray&&w.isFunction(e.toArray)?e.toArray():w.values(e):[]},w.size=function(e){return w.isArray(e)?e.length:w.keys(e).length},w.first=w.head=w.take=function(e,t,r){return null==t||r?e[0]:s.call(e,0,t)},w.initial=function(e,t,r){return s.call(e,0,e.length-(null==t||r?1:t))},w.last=function(e,t,r){return null==t||r?e[e.length-1]:s.call(e,Math.max(e.length-t,0))},w.rest=w.tail=function(e,t,r){return s.call(e,null==t||r?1:t)},w.compact=function(e){return w.filter(e,function(e){return!!e})},w.flatten=function(e,t){return w.reduce(e,function(e,r){return w.isArray(r)?e.concat(t?r:w.flatten(r)):(e[e.length]=r,e)},[])},w.without=function(e){return w.difference(e,s.call(arguments,1))},w.uniq=w.unique=function(e,t,r){var n=r?w.map(e,r):e,i=[];return e.length<3&&(t=!0),w.reduce(n,function(r,n,o){return(t?w.last(r)===n&&r.length:w.include(r,n))||(r.push(n),i.push(e[o])),r},[]),i},w.union=function(){return w.uniq(w.flatten(arguments,!0))},w.intersection=w.intersect=function(e){var t=s.call(arguments,1);return w.filter(w.uniq(e),function(e){return w.every(t,function(t){return w.indexOf(t,e)>=0})})},w.difference=function(e){var t=w.flatten(s.call(arguments,1),!0);return w.filter(e,function(e){return!w.include(t,e)})},w.zip=function(){for(var e=s.call(arguments),t=w.max(w.pluck(e,\"length\")),r=new Array(t),n=0;n<t;n++)r[n]=w.pluck(e,\"\"+n);return r},w.indexOf=function(e,t,r){if(null==e)return-1;var n,i;if(r)return e[n=w.sortedIndex(e,t)]===t?n:-1;if(f&&e.indexOf===f)return e.indexOf(t);for(n=0,i=e.length;n<i;n++)if(n in e&&e[n]===t)return n;return-1},w.lastIndexOf=function(e,t){if(null==e)return-1;if(b&&e.lastIndexOf===b)return e.lastIndexOf(t);for(var r=e.length;r--;)if(r in e&&e[r]===t)return r;return-1},w.range=function(e,t,r){arguments.length<=1&&(t=e||0,e=0),r=arguments[2]||1;for(var n=Math.max(Math.ceil((t-e)/r),0),i=0,o=new Array(n);i<n;)o[i++]=e,e+=r;return o};var A=function(){};function S(e,t,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return e===t;if(e._chain&&(e=e._wrapped),t._chain&&(t=t._wrapped),e.isEqual&&w.isFunction(e.isEqual))return e.isEqual(t);if(t.isEqual&&w.isFunction(t.isEqual))return t.isEqual(e);var n=l.call(e);if(n!=l.call(t))return!1;switch(n){case\"[object String]\":return e==String(t);case\"[object Number]\":return e!=+e?t!=+t:0==e?1/e==1/t:e==+t;case\"[object Date]\":case\"[object Boolean]\":return+e==+t;case\"[object RegExp]\":return e.source==t.source&&e.global==t.global&&e.multiline==t.multiline&&e.ignoreCase==t.ignoreCase}if(\"object\"!=typeof e||\"object\"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==e)return!0;r.push(e);var o=0,s=!0;if(\"[object Array]\"==n){if(s=(o=e.length)==t.length)for(;o--&&(s=o in e==o in t&&S(e[o],t[o],r)););}else{if(\"constructor\"in e!=\"constructor\"in t||e.constructor!=t.constructor)return!1;for(var a in e)if(w.has(e,a)&&(o++,!(s=w.has(t,a)&&S(e[a],t[a],r))))break;if(s){for(a in t)if(w.has(t,a)&&!o--)break;s=!o}}return r.pop(),s}w.bind=function(e,t){var r,n;if(e.bind===v&&v)return v.apply(e,s.call(arguments,1));if(!w.isFunction(e))throw new TypeError;return n=s.call(arguments,2),r=function(){if(!(this instanceof r))return e.apply(t,n.concat(s.call(arguments)));A.prototype=e.prototype;var i=new A,o=e.apply(i,n.concat(s.call(arguments)));return Object(o)===o?o:i}},w.bindAll=function(e){var t=s.call(arguments,1);return 0==t.length&&(t=w.functions(e)),k(t,function(t){e[t]=w.bind(e[t],e)}),e},w.memoize=function(e,t){var r={};return t||(t=w.identity),function(){var n=t.apply(this,arguments);return w.has(r,n)?r[n]:r[n]=e.apply(this,arguments)}},w.delay=function(e,t){var r=s.call(arguments,2);return setTimeout(function(){return e.apply(null,r)},t)},w.defer=function(e){return w.delay.apply(w,[e,1].concat(s.call(arguments,1)))},w.throttle=function(e,t){var r,n,i,o,s,a,l=w.debounce(function(){s=o=!1},t);return function(){r=this,n=arguments;return i||(i=setTimeout(function(){i=null,s&&e.apply(r,n),l()},t)),o?s=!0:a=e.apply(r,n),l(),o=!0,a}},w.debounce=function(e,t,r){var n;return function(){var i=this,o=arguments;r&&!n&&e.apply(i,o),clearTimeout(n),n=setTimeout(function(){n=null,r||e.apply(i,o)},t)}},w.once=function(e){var t,r=!1;return function(){return r?t:(r=!0,t=e.apply(this,arguments))}},w.wrap=function(e,t){return function(){var r=[e].concat(s.call(arguments,0));return t.apply(this,r)}},w.compose=function(){var e=arguments;return function(){for(var t=arguments,r=e.length-1;r>=0;r--)t=[e[r].apply(this,t)];return t[0]}},w.after=function(e,t){return e<=0?t():function(){if(--e<1)return t.apply(this,arguments)}},w.keys=x||function(e){if(e!==Object(e))throw new TypeError(\"Invalid object\");var t=[];for(var r in e)w.has(e,r)&&(t[t.length]=r);return t},w.values=function(e){return w.map(e,w.identity)},w.functions=w.methods=function(e){var t=[];for(var r in e)w.isFunction(e[r])&&t.push(r);return t.sort()},w.extend=function(e){return k(s.call(arguments,1),function(t){for(var r in t)e[r]=t[r]}),e},w.pick=function(e){var t={};return k(w.flatten(s.call(arguments,1)),function(r){r in e&&(t[r]=e[r])}),t},w.defaults=function(e){return k(s.call(arguments,1),function(t){for(var r in t)null==e[r]&&(e[r]=t[r])}),e},w.clone=function(e){return w.isObject(e)?w.isArray(e)?e.slice():w.extend({},e):e},w.tap=function(e,t){return t(e),e},w.isEqual=function(e,t){return S(e,t,[])},w.isEmpty=function(e){if(null==e)return!0;if(w.isArray(e)||w.isString(e))return 0===e.length;for(var t in e)if(w.has(e,t))return!1;return!0},w.isElement=function(e){return!(!e||1!=e.nodeType)},w.isArray=y||function(e){return\"[object Array]\"==l.call(e)},w.isObject=function(e){return e===Object(e)},w.isArguments=function(e){return\"[object Arguments]\"==l.call(e)},w.isArguments(arguments)||(w.isArguments=function(e){return!(!e||!w.has(e,\"callee\"))}),w.isFunction=function(e){return\"[object Function]\"==l.call(e)},w.isString=function(e){return\"[object String]\"==l.call(e)},w.isNumber=function(e){return\"[object Number]\"==l.call(e)},w.isFinite=function(e){return w.isNumber(e)&&isFinite(e)},w.isNaN=function(e){return e!=e},w.isBoolean=function(e){return!0===e||!1===e||\"[object Boolean]\"==l.call(e)},w.isDate=function(e){return\"[object Date]\"==l.call(e)},w.isRegExp=function(e){return\"[object RegExp]\"==l.call(e)},w.isNull=function(e){return null===e},w.isUndefined=function(e){return void 0===e},w.has=function(e,t){return c.call(e,t)},w.noConflict=function(){return e._=t,this},w.identity=function(e){return e},w.times=function(e,t,r){for(var n=0;n<e;n++)t.call(r,n)},w.escape=function(e){return(\"\"+e).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#x27;\").replace(/\\//g,\"&#x2F;\")},w.result=function(e,t){if(null==e)return null;var r=e[t];return w.isFunction(r)?r.call(e):r},w.mixin=function(e){k(w.functions(e),function(t){q(t,w[t]=e[t])})};var E=0;w.uniqueId=function(e){var t=E++;return e?e+t:t},w.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g};var F=/.^/,R={\"\\\\\":\"\\\\\",\"'\":\"'\",r:\"\\r\",n:\"\\n\",t:\"\\t\",u2028:\"\\u2028\",u2029:\"\\u2029\"};for(var $ in R)R[R[$]]=$;var T=/\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g,D=/\\\\(\\\\|'|r|n|t|u2028|u2029)/g,L=function(e){return e.replace(D,function(e,t){return R[t]})};w.template=function(e,t,r){r=w.defaults(r||{},w.templateSettings);var n=\"__p+='\"+e.replace(T,function(e){return\"\\\\\"+R[e]}).replace(r.escape||F,function(e,t){return\"'+\\n_.escape(\"+L(t)+\")+\\n'\"}).replace(r.interpolate||F,function(e,t){return\"'+\\n(\"+L(t)+\")+\\n'\"}).replace(r.evaluate||F,function(e,t){return\"';\\n\"+L(t)+\"\\n;__p+='\"})+\"';\\n\";r.variable||(n=\"with(obj||{}){\\n\"+n+\"}\\n\"),n=\"var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\\n\"+n+\"return __p;\\n\";var i=new Function(r.variable||\"obj\",\"_\",n);if(t)return i(t,w);var o=function(e){return i.call(this,e,w)};return o.source=\"function(\"+(r.variable||\"obj\")+\"){\\n\"+n+\"}\",o},w.chain=function(e){return w(e).chain()};var M=function(e){this._wrapped=e};w.prototype=M.prototype;var B=function(e,t){return t?w(e).chain():e},q=function(e,t){M.prototype[e]=function(){var e=s.call(arguments);return a.call(e,this._wrapped),B(t.apply(w,e),this._chain)}};return w.mixin(w),k([\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=n[e];M.prototype[e]=function(){var r=this._wrapped;t.apply(r,arguments);var n=r.length;return\"shift\"!=e&&\"splice\"!=e||0!==n||delete r[0],B(r,this._chain)}}),k([\"concat\",\"join\",\"slice\"],function(e){var t=n[e];M.prototype[e]=function(){return B(t.apply(this._wrapped,arguments),this._chain)}}),M.prototype.chain=function(){return this._chain=!0,this},M.prototype.value=function(){return this._wrapped},w}.call({}),emmet=function(e){var t=\"html\";if(void 0===_)try{_=e.require(\"underscore\")}catch(e){}if(void 0===_)throw\"Cannot access to Underscore.js lib\";var r={_:_},n=function(){};var i=null;function o(e){return!(e in r)&&i&&i(e),r[e]}return{define:function(e,t){e in r||(r[e]=_.isFunction(t)?this.exec(t):t)},require:o,exec:function(t,r){return t.call(r||e,_.bind(o,this),_,this)},extend:function(e,t){var r=function(e,t,r){var i;return i=t&&t.hasOwnProperty(\"constructor\")?t.constructor:function(){e.apply(this,arguments)},_.extend(i,e),n.prototype=e.prototype,i.prototype=new n,t&&_.extend(i.prototype,t),r&&_.extend(i,r),i.prototype.constructor=i,i.__super__=e.prototype,i}(this,e,t);return r.extend=this.extend,e.hasOwnProperty(\"toString\")&&(r.prototype.toString=e.toString),r},expandAbbreviation:function(e,r,n,i){if(!e)return\"\";r=r||t;var s=o(\"filters\"),a=o(\"abbreviationParser\");n=o(\"profile\").get(n,r),o(\"tabStops\").resetTabstopIndex();var l=s.extractFromAbbreviation(e),c=a.parse(l[0],{syntax:r,contextNode:i}),u=s.composeList(r,n,l[1]);return s.apply(c,u,n),c.toString()},defaultSyntax:function(){return t},defaultProfile:function(){return\"plain\"},log:function(){e.console&&e.console.log&&e.console.log.apply(e.console,arguments)},setModuleLoader:function(e){i=e}}}(this);\"undefined\"!=typeof exports&&(\"undefined\"!=typeof module&&module.exports&&(exports=module.exports=emmet),exports.emmet=emmet),\"undefined\"!=typeof define&&define(\"emmet\",[],emmet),emmet.define(\"abbreviationParser\",function(e,t){var r=/^[\\w\\-\\$\\:@\\!%]+\\+?$/i,n=/[\\w\\-:\\$@]/,i={\"[\":\"]\",\"(\":\")\",\"{\":\"}\"},o=Array.prototype.splice,s=[],a=[],l=[];function c(e){this.parent=null,this.children=[],this._attributes=[],this.abbreviation=\"\",this.counter=1,this._name=null,this._text=\"\",this.repeatCount=1,this.hasImplicitRepeat=!1,this._data={},this.start=\"\",this.end=\"\",this.content=\"\",this.padding=\"\"}function u(e){return e.substring(1,e.length-1)}function d(e,t){for(var r;r=e.next();)if(r===t)return!0;return!1}function g(r){r=e(\"utils\").trim(r);for(var n,o=new c,s=o.addChild(),a=e(\"stringStream\").create(r),l=1e3;!a.eol()&&--l>0;)switch(a.peek()){case\"(\":if(a.start=a.pos,!a.skipToPair(\"(\",\")\"))throw'Invalid abbreviation: mo matching \")\" found for character at '+a.pos;var d=g(u(a.current()));(n=a.match(/^\\*(\\d+)?/,!0))&&s._setRepeat(n[1]),t.each(d.children,function(e){s.addChild(e)});break;case\">\":s=s.addChild(),a.next();break;case\"+\":s=s.parent.addChild(),a.next();break;case\"^\":var h=s.parent||s;s=(h.parent||h).addChild(),a.next();break;default:a.start=a.pos,a.eatWhile(function(e){if(\"[\"==e||\"{\"==e){if(a.skipToPair(e,i[e]))return a.backUp(1),!0;throw'Invalid abbreviation: mo matching \"'+i[e]+'\" found for character at '+a.pos}if(\"+\"==e){a.next();var t=a.eol()||~\"+>^*\".indexOf(a.peek());return a.backUp(1),t}return\"(\"!=e&&f(e)}),s.setAbbreviation(a.current()),a.start=a.pos}if(l<1)throw\"Endless loop detected\";return o}function h(t,r){t=e(\"utils\").trim(t);var i=[],o=e(\"stringStream\").create(t);for(o.eatSpace();!o.eol()&&(o.start=o.pos,o.eatWhile(n));){var s=o.current(),a=\"\";if(\"=\"==o.peek()){o.next(),o.start=o.pos;var l=o.peek();if('\"'==l||\"'\"==l){if(o.next(),!d(o,l))throw\"Invalid attribute value\";a=(a=o.current()).substring(1,a.length-1)}else{if(!o.eatWhile(/[^\\s\\]]/))throw\"Invalid attribute value\";a=o.current()}}i.push({name:s,value:a}),o.eatSpace()}return i}function m(e){e=t.map(e,function(e){return t.clone(e)});var r={};return t.filter(e,function(e){if(!(e.name in r))return r[e.name]=e;var t=r[e.name];return\"class\"==e.name.toLowerCase()?t.value+=(t.value.length?\" \":\"\")+e.value:t.value=e.value,!1})}function p(e){for(var r,n,i,o=e.children.length-1;o>=0;o--)if((n=e.children[o]).isRepeating())for(i=r=n.repeatCount,n.repeatCount=1,n.updateProperty(\"counter\",1),n.updateProperty(\"maxCount\",i);--r>0;)n.parent.addChild(n.clone(),o+1).updateProperty(\"counter\",r+1).updateProperty(\"maxCount\",i);return t.each(e.children,p),e}function _(e){for(var r=e.children.length-1;r>=0;r--){var n=e.children[r];n.isGroup()?n.replace(_(n).children):n.isEmpty()&&n.remove()}return t.each(e.children,_),e}function f(e){var t=e.charCodeAt(0);return t>64&&t<91||t>96&&t<123||t>47&&t<58||-1!=\"#.*:$-_!@|%\".indexOf(e)}return c.prototype={addChild:function(e,r){return(e=e||new c).parent=this,t.isUndefined(r)?this.children.push(e):this.children.splice(r,0,e),e},clone:function(){var e=new c;return t.each([\"abbreviation\",\"counter\",\"_name\",\"_text\",\"repeatCount\",\"hasImplicitRepeat\",\"start\",\"end\",\"content\",\"padding\"],function(t){e[t]=this[t]},this),e._attributes=t.map(this._attributes,function(e){return t.clone(e)}),e._data=t.clone(this._data),e.children=t.map(this.children,function(t){return(t=t.clone()).parent=e,t}),e},remove:function(){return this.parent&&(this.parent.children=t.without(this.parent.children,this)),this},replace:function(){var e=this.parent,r=t.indexOf(e.children,this),n=t.flatten(arguments);o.apply(e.children,[r,1].concat(n)),t.each(n,function(t){t.parent=e})},updateProperty:function(e,r){return this[e]=r,t.each(this.children,function(t){t.updateProperty(e,r)}),this},find:function(e){return this.findAll(e)[0]},findAll:function(e){if(!t.isFunction(e)){var r=e.toLowerCase();e=function(e){return e.name().toLowerCase()==r}}var n=[];return t.each(this.children,function(t){e(t)&&n.push(t),n=n.concat(t.findAll(e))}),t.compact(n)},data:function(t,r){return 2==arguments.length&&(this._data[t]=r,\"resource\"==t&&e(\"elements\").is(r,\"snippet\")&&(this.content=r.data,this._text&&(this.content=e(\"abbreviationUtils\").insertChildContent(r.data,this._text)))),this._data[t]},name:function(){var t=this.matchedResource();return e(\"elements\").is(t,\"element\")?t.name:this._name},attributeList:function(){var r=[],n=this.matchedResource();return e(\"elements\").is(n,\"element\")&&t.isArray(n.attributes)&&(r=r.concat(n.attributes)),m(r.concat(this._attributes))},attribute:function(e,r){if(2==arguments.length){var n=t.indexOf(t.pluck(this._attributes,\"name\"),e.toLowerCase());~n?this._attributes[n].value=r:this._attributes.push({name:e,value:r})}return(t.find(this.attributeList(),function(t){return t.name==e})||{}).value},matchedResource:function(){return this.data(\"resource\")},index:function(){return this.parent?t.indexOf(this.parent.children,this):-1},_setRepeat:function(e){e?this.repeatCount=parseInt(e,10)||1:this.hasImplicitRepeat=!0},setAbbreviation:function(t){var o=this;t=(t=t||\"\").replace(/\\*(\\d+)?$/,function(e,t){return o._setRepeat(t),\"\"}),this.abbreviation=t;var s=function(t){if(!~t.indexOf(\"{\"))return null;var r=e(\"stringStream\").create(t);for(;!r.eol();)switch(r.peek()){case\"[\":case\"(\":r.skipToPair(r.peek(),i[r.peek()]);break;case\"{\":return r.start=r.pos,r.skipToPair(\"{\",\"}\"),{element:t.substring(0,r.start),text:u(r.current())};default:r.next()}}(t);s&&(t=s.element,this.content=this._text=s.text);var a=function(t){var r=[],i={\"#\":\"id\",\".\":\"class\"},o=null,s=e(\"stringStream\").create(t);for(;!s.eol();)switch(s.peek()){case\"#\":case\".\":null===o&&(o=s.pos);var a=i[s.peek()];s.next(),s.start=s.pos,s.eatWhile(n),r.push({name:a,value:s.current()});break;case\"[\":if(null===o&&(o=s.pos),s.start=s.pos,!s.skipToPair(\"[\",\"]\"))throw\"Invalid attribute set definition\";r=r.concat(h(u(s.current())));break;default:s.next()}return r.length?{element:t.substring(0,o),attributes:m(r)}:null}(t);if(a&&(t=a.element,this._attributes=a.attributes),this._name=t,this._name&&!r.test(this._name))throw\"Invalid abbreviation\"},toString:function(){var r=e(\"utils\"),n=this.start,i=this.end,o=this.content,s=this;t.each(l,function(e){n=e(n,s,\"start\"),o=e(o,s,\"content\"),i=e(i,s,\"end\")});var a=t.map(this.children,function(e){return e.toString()}).join(\"\");return o=e(\"abbreviationUtils\").insertChildContent(o,a,{keepVariable:!1}),n+r.padString(o,this.padding)+i},hasEmptyChildren:function(){return!!t.find(this.children,function(e){return e.isEmpty()})},hasImplicitName:function(){return!this._name&&!this.isTextNode()},isGroup:function(){return!this.abbreviation},isEmpty:function(){return!this.abbreviation&&!this.children.length},isRepeating:function(){return this.repeatCount>1||this.hasImplicitRepeat},isTextNode:function(){return!this.name()&&!this.attributeList().length},isElement:function(){return!this.isEmpty()&&!this.isTextNode()},deepestChild:function(){if(!this.children.length)return null;for(var e=this;e.children.length;)e=t.last(e.children);return e}},l.push(function(t,r){return e(\"utils\").replaceCounter(t,r.counter,r.maxCount)}),{parse:function(e,r){r=r||{};var n=g(e);if(r.contextNode){n._name=r.contextNode.name;var i={};t.each(n._attributes,function(e){i[e.name]=e}),t.each(r.contextNode.attributes,function(e){e.name in i?i[e.name].value=e.value:(e=t.clone(e),n._attributes.push(e),i[e.name]=e)})}return t.each(s,function(e){e(n,r)}),n=_(p(n)),t.each(a,function(e){e(n,r)}),n},AbbreviationNode:c,addPreprocessor:function(e){t.include(s,e)||s.push(e)},removeFilter:function(e){preprocessor=t.without(s,e)},addPostprocessor:function(e){t.include(a,e)||a.push(e)},removePostprocessor:function(e){a=t.without(a,e)},addOutputProcessor:function(e){t.include(l,e)||l.push(e)},removeOutputProcessor:function(e){l=t.without(l,e)},isAllowedChar:function(e){return f(e=String(e))||~\">+^[](){}\".indexOf(e)}}}),emmet.exec(function(e,t){function r(n,i){var o=e(\"resources\"),s=e(\"elements\"),a=e(\"abbreviationParser\");t.each(t.clone(n.children),function(e){var n=o.getMatchedResource(e,i);if(t.isString(n))e.data(\"resource\",s.create(\"snippet\",n));else if(s.is(n,\"reference\")){var l=a.parse(n.data,{syntax:i});if(e.repeatCount>1){var c=l.findAll(function(e){return e.hasImplicitRepeat});t.each(c,function(t){t.repeatCount=e.repeatCount,t.hasImplicitRepeat=!1})}var u=l.deepestChild();u&&t.each(e.children,function(e){u.addChild(e)}),t.each(l.children,function(r){t.each(e.attributeList(),function(e){r.attribute(e.name,e.value)})}),e.replace(l.children)}else e.data(\"resource\",n);r(e,i)})}e(\"abbreviationParser\").addPreprocessor(function(e,t){r(e,t.syntax||emmet.defaultSyntax())})}),emmet.exec(function(e,t){var r=e(\"abbreviationParser\");function n(t){for(var r=e(\"range\"),n=[],i=e(\"stringStream\").create(t);!i.eol();){if(\"\\\\\"==i.peek())i.next();else if(i.start=i.pos,i.match(\"$#\",!0)){n.push(r.create(i.start,\"$#\"));continue}i.next()}return n}function i(r,i){var o=e(\"utils\"),s=n(r);return s.reverse(),t.each(s,function(e){r=o.replaceSubstring(r,i,e)}),r}function o(e){return!!n(e.content).length||!!t.find(e.attributeList(),function(e){return!!n(e.value).length})}function s(r,n,s){var a=r.findAll(function(e){return o(e)});if(o(r)&&a.unshift(r),a.length)t.each(a,function(e){e.content=i(e.content,n),t.each(e._attributes,function(e){e.value=i(e.value,n)})});else{var l=r.deepestChild()||r;l.content=s?n:e(\"abbreviationUtils\").insertChildContent(l.content,n)}}r.addPreprocessor(function(r,n){if(n.pastedContent){var i=e(\"utils\"),o=t.map(i.splitByLines(n.pastedContent,!0),i.trim);r.findAll(function(e){if(e.hasImplicitRepeat)return e.data(\"paste\",o),e.repeatCount=o.length})}}),r.addPostprocessor(function(e,r){!e.findAll(function(e){var r=e.data(\"paste\"),n=\"\";return t.isArray(r)?n=r[e.counter-1]:t.isFunction(r)?n=r(e.counter-1,e.content):r&&(n=r),n&&s(e,n,!!e.data(\"pasteOverwrites\")),e.data(\"paste\",null),!!r}).length&&r.pastedContent&&s(e,r.pastedContent)})}),emmet.exec(function(e,t){e(\"abbreviationParser\").addPostprocessor(function r(n){var i=e(\"tagName\");return t.each(n.children,function(e){(e.hasImplicitName()||e.data(\"forceNameResolving\"))&&(e._name=i.resolve(e.parent.name())),r(e)}),n})}),emmet.define(\"cssParser\",function(e,t){var r,n,i,o,s=[];function a(e){return void 0!==e}function l(){return{char:r.chnum,line:r.linenum}}function c(e,t,n){var i=r,o=n||{};s.push({charstart:a(o.char)?o.char:i.chnum,charend:a(o.charend)?o.charend:i.chnum,linestart:a(o.line)?o.line:i.linenum,lineend:a(o.lineend)?o.lineend:i.linenum,value:e,type:t||e})}function u(e,t){var n=r,i=t||{},o=a(i.char)?i.char:n.chnum;return{name:\"ParseError\",message:e+\" at line \"+((a(i.line)?i.line:n.linenum)+1)+\" char \"+(o+1),walker:n,tokens:s}}function d(e){var t=r,n=t.ch,s=l(),a=e?e+n:n;for(n=t.nextChar(),e&&(s.char-=e.length);i(n)||o(n);)a+=n,n=t.nextChar();c(a,\"identifier\",s)}function g(){var e=r.ch;if(\" \"===e||\"\\t\"===e)return function(){for(var e=r.ch,t=\"\",n=l();\" \"===e||\"\\t\"===e;)t+=e,e=r.nextChar();c(t,\"white\",n)}();if(\"/\"===e)return function(){var e,t=r,n=t.ch,i=n,o=l();if(\"/\"===(e=t.nextChar())){i+=e;for(var s=t.peek();s&&\"\\n\"!==s;)i+=e,e=t.nextChar(),s=t.peek()}else{if(\"*\"!==e)return o.charend=o.char,o.lineend=o.line,c(i,i,o);for(;\"*\"!==n||\"/\"!==e;)i+=e,n=e,e=t.nextChar()}i+=e,t.nextChar(),c(i,\"comment\",o)}();if('\"'===e||\"'\"===e)return function(){var e,t=r,n=t.ch,i=n,o=n,s=l();for(n=t.nextChar();n!==i;){if(\"\\n\"===n){if(\"\\\\\"!==(e=t.nextChar()))throw u(\"Unterminated string\",s);o+=n+e}else o+=\"\\\\\"===n?n+t.nextChar():n;n=t.nextChar()}o+=n,t.nextChar(),c(o,\"string\",s)}();if(\"(\"===e)return function(){var e=r,t=e.ch,n=0,i=t,o=l();for(t=e.nextChar();\")\"!==t&&!n;){if(\"(\"===t)n++;else if(\")\"===t)n--;else if(!1===t)throw u(\"Unterminated brace\",o);i+=t,t=e.nextChar()}i+=t,e.nextChar(),c(i,\"brace\",o)}();if(\"-\"===e||\".\"===e||o(e))return function(){var e,t=r,n=t.ch,i=l(),s=n,a=\".\"===s;if(n=t.nextChar(),e=!o(n),a&&e)return i.charend=i.char,i.lineend=i.line,c(s,\".\",i);if(\"-\"===s&&e)return d(\"-\");for(;!1!==n&&(o(n)||!a&&\".\"===n);)\".\"===n&&(a=!0),s+=n,n=t.nextChar();c(s,\"number\",i)}();if(i(e))return d();if(n(e))return function(){var e=r,t=e.ch,i=l(),o=t,s=e.nextChar();if(\"=\"===s&&n(o,!0))return c(o+=s,\"match\",i),void e.nextChar();i.charend=i.char+1,i.lineend=i.line,c(o,o,i)}();if(\"\\n\"===e)return c(\"line\"),void r.nextChar();throw u(\"Unrecognized character\")}return r={lines:null,total_lines:0,linenum:-1,line:\"\",ch:\"\",chnum:-1,init:function(e){var t=r;t.lines=e.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\").split(\"\\n\"),t.total_lines=t.lines.length,t.chnum=-1,t.linenum=-1,t.ch=\"\",t.line=\"\",t.nextLine(),t.nextChar()},nextLine:function(){var e=this;return e.linenum+=1,e.total_lines<=e.linenum?e.line=!1:e.line=e.lines[e.linenum],-1!==e.chnum&&(e.chnum=0),e.line},nextChar:function(){var e=this;for(e.chnum+=1;\"\"===e.line.charAt(e.chnum);)return!1===this.nextLine()?(e.ch=!1,!1):(e.chnum=-1,e.ch=\"\\n\",\"\\n\");return e.ch=e.line.charAt(e.chnum),e.ch},peek:function(){return this.line.charAt(this.chnum+1)}},i=function(e){return\"&\"==e||\"_\"===e||\"-\"===e||e>=\"a\"&&e<=\"z\"||e>=\"A\"&&e<=\"Z\"},o=function(e){return!1!==e&&e>=\"0\"&&e<=\"9\"},n=function(){for(var e=\"{}[]()+*=.,;:>~|\\\\%$#@^!\".split(\"\"),t=\"*^|$~\".split(\"\"),r={},n={},i=0;i<e.length;i+=1)r[e[i]]=!0;for(i=0;i<t.length;i+=1)n[t[i]]=!0;return function(e,t){return t?!!n[e]:!!r[e]}}(),{lex:function(e){for(r.init(e),s=[];!1!==r.ch;)g();return s},parse:function(e){var r=0;return t.map(this.lex(e),function(t){return\"line\"==t.type&&(t.value=function(e,t){return\"\\r\"==e.charAt(t)&&\"\\n\"==e.charAt(t+1)?\"\\r\\n\":e.charAt(t)}(e,r)),{type:t.type,start:r,end:r+=t.value.length}})},toSource:function(e){for(var t,r=0,n=e.length,i=\"\";r<n;r+=1)\"line\"===(t=e[r]).type?i+=\"\\n\":i+=t.value;return i}}}),emmet.define(\"xmlParser\",function(e,t){var r={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!0,allowMissing:!0},n=null,i=null;function o(e,t){function r(r){return t.tokenize=r,r(e,t)}var o=e.next();if(\"<\"==o){if(e.eat(\"!\"))return e.eat(\"[\")?e.match(\"CDATA[\")?r(a(\"atom\",\"]]>\")):null:e.match(\"--\")?r(a(\"comment\",\"--\\x3e\")):e.match(\"DOCTYPE\",!0,!0)?(e.eatWhile(/[\\w\\._\\-]/),r(l(1))):null;if(e.eat(\"?\"))return e.eatWhile(/[\\w\\._\\-]/),t.tokenize=a(\"meta\",\"?>\"),\"meta\";var c;for(i=e.eat(\"/\")?\"closeTag\":\"openTag\",e.eatSpace(),n=\"\";c=e.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/);)n+=c;return t.tokenize=s,\"tag\"}return\"&\"==o?(e.eat(\"#\")?e.eat(\"x\")?e.eatWhile(/[a-fA-F\\d]/)&&e.eat(\";\"):e.eatWhile(/[\\d]/)&&e.eat(\";\"):e.eatWhile(/[\\w\\.\\-:]/)&&e.eat(\";\"))?\"atom\":\"error\":(e.eatWhile(/[^&<]/),\"text\")}function s(e,t){var r,n=e.next();return\">\"==n||\"/\"==n&&e.eat(\">\")?(t.tokenize=o,i=\">\"==n?\"endTag\":\"selfcloseTag\",\"tag\"):\"=\"==n?(i=\"equals\",null):/[\\'\\\"]/.test(n)?(t.tokenize=(r=n,function(e,t){for(;!e.eol();)if(e.next()==r){t.tokenize=s;break}return\"string\"}),t.tokenize(e,t)):(e.eatWhile(/[^\\s\\u00a0=<>\\\"\\'\\/?]/),\"word\")}function a(e,t){return function(r,n){for(;!r.eol();){if(r.match(t)){n.tokenize=o;break}r.next()}return e}}function l(e){return function(t,r){for(var n;null!=(n=t.next());){if(\"<\"==n)return r.tokenize=l(e+1),r.tokenize(t,r);if(\">\"==n){if(1==e){r.tokenize=o;break}return r.tokenize=l(e-1),r.tokenize(t,r)}}return\"meta\"}}var c,u=null;function d(){for(var e=arguments.length-1;e>=0;e--)u.cc.push(arguments[e])}function g(){return d.apply(null,arguments),!0}function h(){u.context&&(u.context=u.context.prev)}function m(e){if(\"openTag\"==e)return u.tagName=n,g(_,(i=u.startOfLine,function(e){return\"selfcloseTag\"==e||\"endTag\"==e&&r.autoSelfClosers.hasOwnProperty(u.tagName.toLowerCase())?(p(u.tagName.toLowerCase()),g()):\"endTag\"==e?(p(u.tagName.toLowerCase()),function(e,t){var n=r.doNotIndent.hasOwnProperty(e)||u.context&&u.context.noIndent;u.context={prev:u.context,tagName:e,indent:u.indented,startOfLine:t,noIndent:n}}(u.tagName,i),g()):g()}));if(\"closeTag\"==e){var t=!1;return u.context?u.context.tagName!=n&&(r.implicitlyClosed.hasOwnProperty(u.context.tagName.toLowerCase())&&h(),t=!u.context||u.context.tagName!=n):t=!0,t&&(c=\"error\"),g(function(e){return function(t){return e&&(c=\"error\"),\"endTag\"==t?(h(),g()):(c=\"error\",g(arguments.callee))}}(t))}var i;return g()}function p(e){for(var t;;){if(!u.context)return;if(t=u.context.tagName.toLowerCase(),!r.contextGrabbers.hasOwnProperty(t)||!r.contextGrabbers[t].hasOwnProperty(e))return;h()}}function _(e){return\"word\"==e?(c=\"attribute\",g(f,_)):\"endTag\"==e||\"selfcloseTag\"==e?d():(c=\"error\",g(_))}function f(e){return\"equals\"==e?g(b,_):(r.allowMissing||(c=\"error\"),\"endTag\"==e||\"selfcloseTag\"==e?d():g())}function b(e){return\"string\"==e?g(y):\"word\"==e&&r.allowUnquoted?(c=\"string\",g()):(c=\"error\",\"endTag\"==e||\"selfCloseTag\"==e?d():g())}function y(e){return\"string\"==e?g(y):d()}function x(e,t){if(e.sol()&&(t.startOfLine=!0,t.indented=0),e.eatSpace())return null;c=i=n=null;var r=t.tokenize(e,t);if(t.type=i,(r||i)&&\"comment\"!=r)for(u=t;;){if((t.cc.pop()||m)(i||r))break}return t.startOfLine=!1,c||r}return{parse:function(t,r){r=r||0;for(var n={tokenize:o,cc:[],indented:0,startOfLine:!0,tagName:null,context:null},i=e(\"stringStream\").create(t),s=[];!i.eol();)s.push({type:x(i,n),start:i.start+r,end:i.pos+r}),i.start=i.pos;return s}}}),emmet.define(\"string-score\",function(e,t){return{score:function(e,t,r){if(e==t)return 1;if(\"\"==t)return 0;for(var n,i,o,s,a,l,c,u,d,g=0,h=t.length,m=e.length,p=1,_=0;_<h;++_){if(l=t.charAt(_),c=e.indexOf(l.toLowerCase()),u=e.indexOf(l.toUpperCase()),-1===(a=(d=Math.min(c,u))>-1?d:Math.max(c,u))){if(r){p+=1-r;continue}return 0}s=.1,e[a]===l&&(s+=.1),0===a?(s+=.6,0===_&&(n=1)):\" \"===e.charAt(a-1)&&(s+=.8),e=e.substring(a+1,m),g+=s}return o=((i=g/h)*(h/m)+i)/2,o/=p,n&&o+.15<1&&(o+=.15),o}}}),emmet.define(\"utils\",function(e,t){var r=\"${0}\";function n(e){this._data=[],this.length=0,e&&this.append(e)}return n.prototype={append:function(e){this._data.push(e),this.length+=e.length},toString:function(){return this._data.join(\"\")},valueOf:function(){return this.toString()}},{reTag:/<\\/?[\\w:\\-]+(?:\\s+[\\w\\-:]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*\\s*(\\/?)>$/,endsWithTag:function(e){return this.reTag.test(e)},isNumeric:function(e){return\"string\"==typeof e&&(e=e.charCodeAt(0)),e&&e>47&&e<58},trim:function(e){return(e||\"\").replace(/^\\s+|\\s+$/g,\"\")},getNewline:function(){var r=e(\"resources\");if(!r)return\"\\n\";var n=r.getVariable(\"newline\");return t.isString(n)?n:\"\\n\"},setNewline:function(t){var r=e(\"resources\");r.setVariable(\"newline\",t),r.setVariable(\"nl\",t)},splitByLines:function(e,r){var n=this.getNewline(),i=(e||\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\n\\r/g,\"\\n\").replace(/\\r/g,\"\\n\").replace(/\\n/g,n).split(n);return r&&(i=t.filter(i,function(e){return e.length&&!!this.trim(e)},this)),i},normalizeNewline:function(e){return this.splitByLines(e).join(this.getNewline())},repeatString:function(e,t){for(var r=[],n=0;n<t;n++)r.push(e);return r.join(\"\")},getStringsPads:function(e){var r=t.map(e,function(e){return t.isString(e)?e.length:+e}),n=t.max(r);return t.map(r,function(e){var t=n-e;return t?this.repeatString(\" \",t):\"\"},this)},padString:function(r,n){var i=t.isNumber(n)?this.repeatString(e(\"resources\").getVariable(\"indentation\")||\"\\t\",n):n,o=[],s=this.splitByLines(r),a=this.getNewline();o.push(s[0]);for(var l=1;l<s.length;l++)o.push(a+i+s[l]);return o.join(\"\")},zeroPadString:function(e,t){for(var r=\"\",n=e.length;t>n++;)r+=\"0\";return r+e},unindentString:function(e,t){for(var r=this.splitByLines(e),n=0;n<r.length;n++)0==r[n].search(t)&&(r[n]=r[n].substr(t.length));return r.join(this.getNewline())},replaceUnescapedSymbol:function(e,r,n){for(var i=0,o=e.length,s=r.length,a=0;i<o;)if(\"\\\\\"==e.charAt(i))i+=s+1;else if(e.substr(i,s)==r){var l=s;a++;var c=n;if(t.isFunction(n)){var u=n(e,r,i,a);u?(l=u[0].length,c=u[1]):c=!1}if(!1===c){i++;continue}o=(e=e.substring(0,i)+c+e.substring(i+l)).length,i+=c.length}else i++;return e},replaceVariables:function(r,n){n=n||{};var i=t.isFunction(n)?n:function(e,t){return t in n?n[t]:null},o=e(\"resources\");return e(\"tabStops\").processText(r,{variable:function(e){var r=i(e.token,e.name,e);return null===r&&(r=o.getVariable(e.name)),(null===r||t.isUndefined(r))&&(r=e.token),r}})},replaceCounter:function(e,r,n){e=String(e),r=String(r),/^\\-?\\d+$/.test(r)&&(r=+r);var i=this;return this.replaceUnescapedSymbol(e,\"$\",function(e,o,s,a){if(\"{\"==e.charAt(s+1)||i.isNumeric(e.charAt(s+1)))return!1;for(var l=s+1;\"$\"==e.charAt(l)&&\"{\"!=e.charAt(l+1);)l++;var c,u=l-s,d=0,g=!1;return(c=e.substr(l).match(/^@(\\-?)(\\d*)/))&&(l+=c[0].length,c[1]&&(g=!0),d=parseInt(c[2]||1)-1),g&&n&&t.isNumber(r)&&(r=n-r+1),r+=d,[e.substring(s,l),i.zeroPadString(r+\"\",u)]})},matchesTag:function(e){return this.reTag.test(e||\"\")},escapeText:function(e){return e.replace(/([\\$\\\\])/g,\"\\\\$1\")},unescapeText:function(e){return e.replace(/\\\\(.)/g,\"$1\")},getCaretPlaceholder:function(){return t.isFunction(r)?r.apply(this,arguments):r},setCaretPlaceholder:function(e){r=e},getLinePadding:function(e){return(e.match(/^(\\s+)/)||[\"\"])[0]},getLinePaddingFromPosition:function(e,t){var r=this.findNewlineBounds(e,t);return this.getLinePadding(r.substring(e))},escapeForRegexp:function(e){var t=new RegExp(\"[.*+?|()\\\\[\\\\]{}\\\\\\\\]\",\"g\");return e.replace(t,\"\\\\$&\")},prettifyNumber:function(e,t){return e.toFixed(void 0===t?2:t).replace(/\\.?0+$/,\"\")},stringBuilder:function(e){return new n(e)},replaceSubstring:function(e,r,n,i){return t.isObject(n)&&\"end\"in n&&(i=n.end,n=n.start),t.isString(i)&&(i=n+i.length),t.isUndefined(i)&&(i=n),n<0||n>e.length?e:e.substring(0,n)+r+e.substring(i)},narrowToNonSpace:function(t,r,n){for(var i=e(\"range\").create(r,n),o=/[\\s\\n\\r\\u00a0]/;i.start<i.end&&o.test(t.charAt(i.start));)i.start++;for(;i.end>i.start;)if(i.end--,!o.test(t.charAt(i.end))){i.end++;break}return i},findNewlineBounds:function(t,r){for(var n=t.length,i=0,o=n-1,s=r-1;s>0;s--){if(\"\\n\"==(l=t.charAt(s))||\"\\r\"==l){i=s+1;break}}for(var a=r;a<n;a++){var l;if(\"\\n\"==(l=t.charAt(a))||\"\\r\"==l){o=a;break}}return e(\"range\").create(i,o-i)},deepMerge:function(){var e,r,n,i,o,s,a=arguments[0]||{},l=1,c=arguments.length;for(t.isObject(a)||t.isFunction(a)||(a={});l<c;l++)if(null!=(e=arguments[l]))for(r in e)n=a[r],a!==(i=e[r])&&(i&&(t.isObject(i)||(o=t.isArray(i)))?(o?(o=!1,s=n&&t.isArray(n)?n:[]):s=n&&t.isObject(n)?n:{},a[r]=this.deepMerge(s,i)):void 0!==i&&(a[r]=i));return a}}}),emmet.define(\"range\",function(e,t){function r(e,t,r){switch(r){case\"eq\":case\"==\":return e===t;case\"lt\":case\"<\":return e<t;case\"lte\":case\"<=\":return e<=t;case\"gt\":case\">\":return e>t;case\"gte\":case\">=\":return e>=t}}function n(e,r){t.isObject(e)&&\"start\"in e?(this.start=Math.min(e.start,e.end),this.end=Math.max(e.start,e.end)):t.isArray(e)?(this.start=e[0],this.end=e[1]):(r=t.isString(r)?r.length:+r,this.start=e,this.end=e+r)}return n.prototype={length:function(){return Math.abs(this.end-this.start)},equal:function(e){return this.cmp(e,\"eq\",\"eq\")},shift:function(e){return this.start+=e,this.end+=e,this},overlap:function(e){return e.start<=this.end&&e.end>=this.start},intersection:function(e){if(this.overlap(e)){var t=Math.max(e.start,this.start);return new n(t,Math.min(e.end,this.end)-t)}return null},union:function(e){if(this.overlap(e)){var t=Math.min(e.start,this.start);return new n(t,Math.max(e.end,this.end)-t)}return null},inside:function(e){return this.cmp(e,\"lte\",\"gt\")},contains:function(e){return this.cmp(e,\"lt\",\"gt\")},include:function(e){return this.cmp(loc,\"lte\",\"gte\")},cmp:function(e,t,i){var o,s;return e instanceof n?(o=e.start,s=e.end):o=s=e,r(this.start,o,t||\"<=\")&&r(this.end,s,i||\">\")},substring:function(e){return this.length()>0?e.substring(this.start,this.end):\"\"},clone:function(){return new n(this.start,this.length())},toArray:function(){return[this.start,this.end]},toString:function(){return\"{\"+this.start+\", \"+this.length()+\"}\"}},{create:function(e,r){return t.isUndefined(e)||null===e?null:e instanceof n?e:(t.isObject(e)&&\"start\"in e&&\"end\"in e&&(r=e.end-e.start,e=e.start),new n(e,r))},create2:function(e,r){return t.isNumber(e)&&t.isNumber(r)&&(r-=e),this.create(e,r)}}}),emmet.define(\"handlerList\",function(e,t){function r(){this._list=[]}return r.prototype={add:function(e,r){this._list.push(t.extend({order:0},r||{},{fn:e}))},remove:function(e){this._list=t.without(this._list,t.find(this._list,function(t){return t.fn===e}))},list:function(){return t.sortBy(this._list,\"order\").reverse()},listFn:function(){return t.pluck(this.list(),\"fn\")},exec:function(e,r){r=r||[];var n=null;return t.find(this.list(),function(t){if((n=t.fn.apply(t,r))!==e)return!0}),n}},{create:function(){return new r}}}),emmet.define(\"tokenIterator\",function(e,t){function r(e){this.tokens=e,this._position=0,this.reset()}return r.prototype={next:function(){if(this.hasNext()){var e=this.tokens[++this._i];return this._position=e.start,e}return null},current:function(){return this.tokens[this._i]},position:function(){return this._position},hasNext:function(){return this._i<this._il-1},reset:function(){this._i=-1,this._il=this.tokens.length},item:function(){return this.tokens[this._i]},itemNext:function(){return this.tokens[this._i+1]},itemPrev:function(){return this.tokens[this._i-1]},nextUntil:function(e,r){for(var n,i=t.isString(e)?function(t){return t.type==e}:e;(n=this.next())&&(r&&r.call(this,n),!i.call(this,n)););}},{create:function(e){return new r(e)}}}),emmet.define(\"stringStream\",function(e,t){function r(e){this.pos=this.start=0,this.string=e}return r.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return 0==this.pos},peek:function(){return this.string.charAt(this.pos)},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(e){var t=this.string.charAt(this.pos);if(\"string\"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},eatWhile:function(e){for(var t=this.pos;this.eat(e););return this.pos>t},eatSpace:function(){for(var e=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},skipToPair:function(e,t){for(var r,n=0,i=this.pos,o=this.string.length;i<o;)if((r=this.string.charAt(i++))==e)n++;else if(r==t&&--n<1)return this.pos=i,!0;return!1},backUp:function(e){this.pos-=e},match:function(e,t,r){if(\"string\"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&!1!==t&&(this.pos+=n[0].length),n}var i=r?function(e){return e.toLowerCase()}:function(e){return e};if(i(this.string).indexOf(i(e),this.pos)==this.pos)return!1!==t&&(this.pos+=e.length),!0},current:function(){return this.string.slice(this.start,this.pos)}},{create:function(e){return new r(e)}}}),emmet.define(\"resources\",function(e,t){var r=\"system\",n={},i=/^<(\\w+\\:?[\\w\\-]*)((?:\\s+[\\w\\:\\-]+\\s*=\\s*(['\"]).*?\\3)*)\\s*(\\/?)>/,o={},s={},a=e(\"handlerList\").create();function l(t,r,n){var o,s;return o=r,r=(s=e(\"utils\")).replaceUnescapedSymbol(o,\"|\",s.getCaretPlaceholder()),\"snippets\"==n?e(\"elements\").create(\"snippet\",r):\"abbreviations\"==n?function(t,r){t=e(\"utils\").trim(t);var n,o=e(\"elements\");return(n=i.exec(r))?o.create(\"element\",n[1],n[2],\"/\"==n[4]):o.create(\"reference\",r)}(t,r):void 0}function c(e){return e.replace(/:$/,\"\").replace(/:/g,\"-\")}return{setVocabulary:function(e,t){n={},t==r?o=e:s=e},getVocabulary:function(e){return e==r?o:s},getMatchedResource:function(e,r){return a.exec(null,t.toArray(arguments))||this.findSnippet(r,e.name())},getVariable:function(e){return(this.getSection(\"variables\")||{})[e]},setVariable:function(e,t){var r=this.getVocabulary(\"user\")||{};\"variables\"in r||(r.variables={}),r.variables[e]=t,this.setVocabulary(r,\"user\")},hasSyntax:function(e){return e in this.getVocabulary(\"user\")||e in this.getVocabulary(r)},addResolver:function(e,t){a.add(e,t)},removeResolver:function(e){a.remove(e)},getSection:function(r){if(!r)return null;r in n||(n[r]=e(\"utils\").deepMerge({},o[r],s[r]));for(var i,a=n[r],l=t.rest(arguments);a&&(i=l.shift());){if(!(i in a))return null;a=a[i]}return a},findItem:function(e,t){for(var r=this.getSection(e);r;){if(t in r)return r[t];r=this.getSection(r.extends)}},findSnippet:function(e,r,n){if(!e||!r)return null;n=n||[];var i=[r];~r.indexOf(\"-\")&&i.push(r.replace(/\\-/g,\":\"));var o=this.getSection(e),s=null;return t.find([\"snippets\",\"abbreviations\"],function(r){var n=this.getSection(e,r);if(n)return t.find(i,function(e){if(n[e])return s=l(e,n[e],r)})},this),n.push(e),s||!o.extends||t.include(n,o.extends)?s:this.findSnippet(o.extends,r,n)},fuzzyFindSnippet:function(r,n,i){i=i||.3;var o=this.getAllSnippets(r),s=e(\"string-score\");n=c(n);var a=t.map(o,function(e,t){return{key:t,score:s.score(e.nk,n,.1)}}),l=t.last(t.sortBy(a,\"score\"));if(l&&l.score>=i)return o[l.key].parsedValue},getAllSnippets:function(e){var r=\"all-\"+e;if(!n[r]){var i=[],o=e,s=[];do{var a=this.getSection(o);if(!a)break;t.each([\"snippets\",\"abbreviations\"],function(e){var r={};t.each(a[e]||null,function(t,n){r[n]={nk:c(n),value:t,parsedValue:l(n,t,e),type:e}}),i.push(r)}),s.push(o),o=a.extends}while(o&&!t.include(s,o));n[r]=t.extend.apply(t,i.reverse())}return n[r]}}}),emmet.define(\"actions\",function(e,t,r){var n={};function i(t){return e(\"utils\").trim(t.charAt(0).toUpperCase()+t.substring(1).replace(/_[a-z]/g,function(e){return\" \"+e.charAt(1).toUpperCase()}))}return{add:function(e,t,r){e=e.toLowerCase(),(r=r||{}).label||(r.label=i(e)),n[e]={name:e,fn:t,options:r}},get:function(e){return n[e.toLowerCase()]},run:function(e,r){t.isArray(r)||(r=t.rest(arguments));var n=this.get(e);return n?n.fn.apply(emmet,r):(emmet.log('Action \"%s\" is not defined',e),!1)},getAll:function(){return n},getList:function(){return t.values(this.getAll())},getMenu:function(e){var r=[];return e=e||[],t.each(this.getList(),function(n){if(!n.options.hidden&&!t.include(e,n.name)){var o=i(n.name),s=r;if(n.options.label){var a,l,c=n.options.label.split(\"/\");for(o=c.pop();a=c.shift();)(l=t.find(s,function(e){return\"submenu\"==e.type&&e.name==a}))||(l={name:a,type:\"submenu\",items:[]},s.push(l)),s=l.items}s.push({type:\"action\",name:n.name,label:o})}}),r},getActionNameForMenuTitle:function(e,r){var n=null;return t.find(r||this.getMenu(),function(t){return\"action\"!=t.type?n=this.getActionNameForMenuTitle(e,t.items):t.label==e||t.name==e?n=t.name:void 0},this),n||null}}}),emmet.define(\"profile\",function(e,t){var r={},n={tag_case:\"asis\",attr_case:\"asis\",attr_quotes:\"double\",tag_nl:\"decide\",tag_nl_leaf:!1,place_cursor:!0,indent:!0,inline_break:3,self_closing_tag:\"xhtml\",filters:\"\",extraFilters:\"\"};function i(e){t.extend(this,n,e)}function o(e,t){switch(String(t||\"\").toLowerCase()){case\"lower\":return e.toLowerCase();case\"upper\":return e.toUpperCase()}return e}function s(e,t){return r[e.toLowerCase()]=new i(t)}function a(){s(\"xhtml\"),s(\"html\",{self_closing_tag:!1}),s(\"xml\",{self_closing_tag:!0,tag_nl:!0}),s(\"plain\",{tag_nl:!1,indent:!1,place_cursor:!1}),s(\"line\",{tag_nl:!1,indent:!1,extraFilters:\"s\"})}return i.prototype={tagName:function(e){return o(e,this.tag_case)},attributeName:function(e){return o(e,this.attr_case)},attributeQuote:function(){return\"single\"==this.attr_quotes?\"'\":'\"'},selfClosing:function(e){return\"xhtml\"==this.self_closing_tag?\" /\":!0===this.self_closing_tag?\"/\":\"\"},cursor:function(){return this.place_cursor?e(\"utils\").getCaretPlaceholder():\"\"}},a(),{create:function(e,r){return 2==arguments.length?s(e,r):new i(t.defaults(e||{},n))},get:function(n,o){if(!n&&o){var s=e(\"resources\").findItem(o,\"profile\");s&&(n=s)}return n?n instanceof i?n:t.isString(n)&&n.toLowerCase()in r?r[n.toLowerCase()]:this.create(n):r.plain},remove:function(e){(e=(e||\"\").toLowerCase())in r&&delete r[e]},reset:function(){r={},a()},stringCase:o}}),emmet.define(\"editorUtils\",function(e,t){return{isInsideTag:function(e,t){for(var r=t;r>-1&&\"<\"!=e.charAt(r);)r--;if(-1!=r){var n=/^<\\/?\\w[\\w\\:\\-]*.*?>/.exec(e.substring(r));if(n&&t>r&&t<r+n[0].length)return!0}return!1},outputInfo:function(e,t,r){return r=r||e.getProfileName(),{syntax:String(t||e.getSyntax()),profile:r||null,content:String(e.getContent())}},unindent:function(t,r){return e(\"utils\").unindentString(r,this.getCurrentLinePadding(t))},getCurrentLinePadding:function(t){return e(\"utils\").getLinePadding(t.getCurrentLine())}}}),emmet.define(\"actionUtils\",function(e,t){return{mimeTypes:{gif:\"image/gif\",png:\"image/png\",jpg:\"image/jpeg\",jpeg:\"image/jpeg\",svg:\"image/svg+xml\",html:\"text/html\",htm:\"text/html\"},extractAbbreviation:function(t){for(var r=t.length,n=-1,i=0,o=0,s=0,a=e(\"utils\"),l=e(\"abbreviationParser\");;){if(--r<0){n=0;break}var c=t.charAt(r);if(\"]\"==c)o++;else if(\"[\"==c){if(!o){n=r+1;break}o--}else if(\"}\"==c)s++;else if(\"{\"==c){if(!s){n=r+1;break}s--}else if(\")\"==c)i++;else if(\"(\"==c){if(!i){n=r+1;break}i--}else{if(o||s)continue;if(!l.isAllowedChar(c)||\">\"==c&&a.endsWithTag(t.substring(0,r+1))){n=r+1;break}}}return-1==n||s||o||i?\"\":t.substring(n).replace(/^[\\*\\+\\>\\^]+/,\"\")},getImageSize:function(e){var t=function(){return e.charCodeAt(r++)};if(\"PNG\\r\\n\u001a\\n\"===e.substr(0,8)){var r=e.indexOf(\"IHDR\")+4;return{width:t()<<24|t()<<16|t()<<8|t(),height:t()<<24|t()<<16|t()<<8|t()}}if(\"GIF8\"===e.substr(0,4))return r=6,{width:t()|t()<<8,height:t()|t()<<8};if(\"ÿØ\"===e.substr(0,2)){r=2;for(var n=e.length;r<n;){if(255!=t())return;var i=t();if(218==i)break;var o=t()<<8|t();if(!(!(i>=192&&i<=207)||4&i||8&i))return r+=1,{height:t()<<8|t(),width:t()<<8|t()};r+=o-2}}},captureContext:function(r){if(String(r.getSyntax())in{html:1,xml:1,xsl:1}){var n=String(r.getContent()),i=e(\"htmlMatcher\").find(n,r.getCaretPos());if(i&&\"tag\"==i.type){var o=i.open,s={name:o.name,attributes:[]},a=e(\"xmlEditTree\").parse(o.range.substring(n));return a&&(s.attributes=t.map(a.getAll(),function(e){return{name:e.name(),value:e.value()}})),s}}return null},findExpressionBounds:function(t,r){for(var n=String(t.getContent()),i=n.length,o=t.getCaretPos()-1,s=o+1;o>=0&&r(n.charAt(o),o,n);)o--;for(;s<i&&r(n.charAt(s),s,n);)s++;if(s>o)return e(\"range\").create([++o,s])},compoundUpdate:function(e,t){if(t){var r=e.getSelectionRange();return e.replaceContent(t.data,t.start,t.end,!0),e.createSelection(t.caret,t.caret+r.end-r.start),!0}return!1},detectSyntax:function(t,r){var n=r||\"html\";return e(\"resources\").hasSyntax(n)||(n=\"html\"),\"html\"==n&&(this.isStyle(t)||this.isInlineCSS(t))&&(n=\"css\"),n},detectProfile:function(t){var r=t.getSyntax();if(n=e(\"resources\").findItem(r,\"profile\"))return n;switch(r){case\"xml\":case\"xsl\":return\"xml\";case\"css\":if(this.isInlineCSS(t))return\"line\";break;case\"html\":var n;return(n=e(\"resources\").getVariable(\"profile\"))||(n=this.isXHTML(t)?\"xhtml\":\"html\"),n}return\"xhtml\"},isXHTML:function(e){return-1!=e.getContent().search(/<!DOCTYPE[^>]+XHTML/i)},isStyle:function(t){var r=String(t.getContent()),n=t.getCaretPos(),i=e(\"htmlMatcher\").tag(r,n);return i&&\"style\"==i.open.name.toLowerCase()&&i.innerRange.cmp(n,\"lte\",\"gte\")},isInlineCSS:function(t){var r=String(t.getContent()),n=t.getCaretPos(),i=e(\"xmlEditTree\").parseFromPosition(r,n,!0);if(i){var o=i.itemFromPosition(n,!0);return o&&\"style\"==o.name().toLowerCase()&&o.valueRange(!0).cmp(n,\"lte\",\"gte\")}return!1}}}),emmet.define(\"abbreviationUtils\",function(e,t){return{isSnippet:function(t){return e(\"elements\").is(t.matchedResource(),\"snippet\")},isUnary:function(e){if(e.children.length||e._text||this.isSnippet(e))return!1;var t=e.matchedResource();return t&&t.is_empty},isInline:function(t){return t.isTextNode()||!t.name()||e(\"tagName\").isInlineLevel(t.name())},isBlock:function(e){return this.isSnippet(e)||!this.isInline(e)},isSnippet:function(t){return e(\"elements\").is(t.matchedResource(),\"snippet\")},hasTagsInContent:function(t){return e(\"utils\").matchesTag(t.content)},hasBlockChildren:function(e){return this.hasTagsInContent(e)&&this.isBlock(e)||t.any(e.children,function(e){return this.isBlock(e)},this)},insertChildContent:function(r,n,i){i=t.extend({keepVariable:!0,appendIfNoChild:!0},i||{});var o=!1,s=e(\"utils\");return r=s.replaceVariables(r,function(e,t,a){var l=e;return\"child\"==t&&(l=s.padString(n,s.getLinePaddingFromPosition(r,a.start)),o=!0,i.keepVariable&&(l+=e)),l}),!o&&i.appendIfNoChild&&(r+=n),r}}}),emmet.define(\"base64\",function(e,t){var r=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{encode:function(e){for(var t,n,i,o,s,a,l,c,u,d=[],g=0,h=e.length,m=r;g<h;)o=(t=255&e.charCodeAt(g++))>>2,s=(3&t)<<4|(n=255&(c=e.charCodeAt(g++)))>>4,a=(15&n)<<2|(i=255&(u=e.charCodeAt(g++)))>>6,l=63&i,isNaN(c)?a=l=64:isNaN(u)&&(l=64),d.push(m.charAt(o)+m.charAt(s)+m.charAt(a)+m.charAt(l));return d.join(\"\")},decode:function(e){var t,n,i,o,s,a,l=0,c=0,u=[],d=r,g=e.length;if(!e)return e;e+=\"\";do{t=(a=d.indexOf(e.charAt(l++))<<18|d.indexOf(e.charAt(l++))<<12|(o=d.indexOf(e.charAt(l++)))<<6|(s=d.indexOf(e.charAt(l++))))>>16&255,n=a>>8&255,i=255&a,u[c++]=64==o?String.fromCharCode(t):64==s?String.fromCharCode(t,n):String.fromCharCode(t,n,i)}while(l<g);return u.join(\"\")}}}),emmet.define(\"htmlMatcher\",function(e,t){var r=/^<([\\w\\:\\-]+)((?:\\s+[\\w\\-:]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/,n=/^<\\/([\\w\\:\\-]+)[^>]*>/;function i(r,n){return{range:e(\"range\").create(r,t.isNumber(n)?n-r:n[0]),type:\"comment\"}}function o(t){var i,o={};return{open:function(e){var t=this.matches(e);return t&&\"open\"==t.type?t:null},close:function(e){var t=this.matches(e);return t&&\"close\"==t.type?t:null},matches:function(s){var a=\"p\"+s;if(!(a in o)&&\"<\"==t.charAt(s)){var l=t.slice(s);(i=l.match(r))?o[a]=function(t,r){return{name:r[1],selfClose:!!r[3],range:e(\"range\").create(t,r[0]),type:\"open\"}}(s,i):(i=l.match(n))?o[a]=function(t,r){return{name:r[1],range:e(\"range\").create(t,r[0]),type:\"close\"}}(s,i):o[a]=!1}return o[a]},text:function(){return t}}}function s(e,t,r){return e.substring(t,t+r.length)==r}function a(e,r){for(var n=[],i=null,o=r.text(),a=e.range.end,l=o.length;a<l;a++){if(s(o,a,\"\\x3c!--\"))for(var c=a;c<l;c++)if(s(o,c,\"--\\x3e\")){a=c+3;break}if(i=r.matches(a))if(\"open\"!=i.type||i.selfClose){if(\"close\"==i.type){if(!n.length)return i.name==e.name?i:null;if(t.last(n)==i.name)n.pop();else{for(var u=!1;n.length&&!u;){n.pop()==i.name&&(u=!0)}if(!n.length&&!u)return i.name==e.name?i:null}}}else n.push(i.name)}}return{find:function(t,r){for(var n=e(\"range\"),l=o(t),c=null,u=null,d=r;d>=0;d--)if(c=l.open(d)){if(c.selfClose){if(c.range.cmp(r,\"lt\",\"gt\"))break;continue}if(u=a(c,l)){if(n.create2(c.range.start,u.range.end).contains(r))break}else if(c.range.contains(r))break;c=null}else if(s(t,d,\"--\\x3e\")){for(var g=d-1;g>=0&&!s(t,g,\"--\\x3e\");g--)if(s(t,g,\"\\x3c!--\")){d=g;break}}else if(s(t,d,\"\\x3c!--\")){g=d+4;for(var h=t.length;g<h;g++)if(s(t,g,\"--\\x3e\")){g+=3;break}c=i(d,g);break}if(c){var m=null,p=null;if(u?(m=n.create2(c.range.start,u.range.end),p=n.create2(c.range.end,u.range.start)):m=p=n.create2(c.range.start,c.range.end),\"comment\"==c.type){var _=m.substring(t);p.start+=_.length-_.replace(/^<\\!--\\s*/,\"\").length,p.end-=_.length-_.replace(/\\s*-->$/,\"\").length}return{open:c,close:u,type:\"comment\"==c.type?\"comment\":\"tag\",innerRange:p,innerContent:function(){return this.innerRange.substring(t)},outerRange:m,outerContent:function(){return this.outerRange.substring(t)},range:p.length()&&p.cmp(r,\"lte\",\"gte\")?p:m,content:function(){return this.range.substring(t)},source:t}}},tag:function(e,t){var r=this.find(e,t);if(r&&\"tag\"==r.type)return r}}}),emmet.define(\"tabStops\",function(e,t){var r=100,n=0,i={replaceCarets:!1,escape:function(e){return\"\\\\\"+e},tabstop:function(e){return e.token},variable:function(e){return e.token}};return e(\"abbreviationParser\").addOutputProcessor(function(t,r,i){var o=0,s=e(\"tabStops\"),a=e(\"utils\"),l={tabstop:function(e){var t=parseInt(e.group);return 0==t?\"${0}\":(t>o&&(o=t),e.placeholder?\"${\"+(t+n)+\":\"+s.processText(e.placeholder,l)+\"}\":\"${\"+(t+n)+\"}\")}};return t=s.processText(t,l),t=a.replaceVariables(t,s.variablesResolver(r)),n+=o+1,t}),{extract:function(r,n){var o=e(\"utils\"),s={carets:\"\"},a=[];(n=t.extend({},i,n,{tabstop:function(e){var t=e.token,r=\"\";return\"cursor\"==e.placeholder?a.push({start:e.start,end:e.start+t.length,group:\"carets\",value:\"\"}):(\"placeholder\"in e&&(s[e.group]=e.placeholder),e.group in s&&(r=s[e.group]),a.push({start:e.start,end:e.start+t.length,group:e.group,value:r})),t}})).replaceCarets&&(r=r.replace(new RegExp(o.escapeForRegexp(o.getCaretPlaceholder()),\"g\"),\"${0:cursor}\")),r=this.processText(r,n);var l=o.stringBuilder(),c=0,u=t.map(a,function(e){l.append(r.substring(c,e.start));var t=l.length,n=s[e.group]||\"\";return l.append(n),c=e.end,{group:e.group,start:t,end:t+n.length}});return l.append(r.substring(c)),{text:l.toString(),tabstops:t.sortBy(u,\"start\")}},processText:function(r,n){n=t.extend({},i,n);for(var o,s,a,l=e(\"utils\").stringBuilder(),c=e(\"stringStream\").create(r);o=c.next();)if(\"\\\\\"!=o||c.eol()){if(a=o,\"$\"==o)if(c.start=c.pos-1,s=c.match(/^[0-9]+/))a=n.tabstop({start:l.length,group:c.current().substr(1),token:c.current()});else if(s=c.match(/^\\{([a-z_\\-][\\w\\-]*)\\}/))a=n.variable({start:l.length,name:s[1],token:c.current()});else if(s=c.match(/^\\{([0-9]+)(:.+?)?\\}/,!1)){c.skipToPair(\"{\",\"}\");var u={start:l.length,group:s[1],token:c.current()},d=u.token.substring(u.group.length+2,u.token.length-1);d&&(u.placeholder=d.substr(1)),a=n.tabstop(u)}l.append(a)}else l.append(n.escape(c.next()));return l.toString()},upgrade:function(e,r){var n=0,i={tabstop:function(e){var t=parseInt(e.group);return t>n&&(n=t),e.placeholder?\"${\"+(t+r)+\":\"+e.placeholder+\"}\":\"${\"+(t+r)+\"}\"}};return t.each([\"start\",\"end\",\"content\"],function(t){e[t]=this.processText(e[t],i)},this),n},variablesResolver:function(n){var i={},o=e(\"resources\");return function(s,a){if(\"child\"==a)return s;if(\"cursor\"==a)return e(\"utils\").getCaretPlaceholder();var l=n.attribute(a);if(!t.isUndefined(l)&&l!==s)return l;var c=o.getVariable(a);return c||(i[a]||(i[a]=r++),\"${\"+i[a]+\":\"+a+\"}\")}},resetTabstopIndex:function(){n=0,r=100}}}),emmet.define(\"preferences\",function(e,t){var r={},n={},i=null,o=null;return{define:function(e,r,i){var o=e;t.isString(e)&&((o={})[e]={value:r,description:i}),t.each(o,function(e,r){var i;n[r]=(i=e,t.isObject(i)&&\"value\"in i&&t.keys(i).length<3?e:{value:e})})},set:function(e,i){var o=e;t.isString(e)&&((o={})[e]=i),t.each(o,function(e,i){if(!(i in n))throw'Property \"'+i+'\" is not defined. You should define it first with `define` method of current module';if(e!==n[i].value){switch(typeof n[i].value){case\"boolean\":o=e,e=t.isString(o)?\"yes\"==(o=o.toLowerCase())||\"true\"==o||\"1\"==o:!!o;break;case\"number\":e=parseInt(e+\"\",10)||0;break;default:null!==e&&(e+=\"\")}r[i]=e}else i in r&&delete r[i];var o})},get:function(e){return e in r?r[e]:e in n?n[e].value:void 0},getArray:function(r){var n=this.get(r);return t.isUndefined(n)||null===n||\"\"===n?null:(n=t.map(n.split(\",\"),e(\"utils\").trim)).length?n:null},getDict:function(e){var r={};return t.each(this.getArray(e),function(e){var t=e.split(\":\");r[t[0]]=t[1]}),r},description:function(e){return e in n?n[e].description:void 0},remove:function(e){t.isArray(e)||(e=[e]),t.each(e,function(e){e in r&&delete r[e],e in n&&delete n[e]})},list:function(){return t.map(t.keys(n).sort(),function(e){return{name:e,value:this.get(e),type:typeof n[e].value,description:n[e].description}},this)},load:function(e){t.each(e,function(e,t){this.set(t,e)},this)},exportModified:function(){return t.clone(r)},reset:function(){r={}},_startTest:function(){i=n,o=r,n={},r={}},_stopTest:function(){n=i,r=o}}}),emmet.define(\"filters\",function(e,t){var r={},n=\"html\";function i(e){return e?t.isString(e)?e.split(/[\\|,]/g):e:[]}return{add:function(e,t){r[e]=t},apply:function(n,o,s){var a=e(\"utils\");return s=e(\"profile\").get(s),t.each(i(o),function(e){var t=a.trim(e.toLowerCase());t&&t in r&&(n=r[t](n,s))}),n},composeList:function(t,r,o){var s=i((r=e(\"profile\").get(r)).filters||e(\"resources\").findItem(t,\"filters\")||n);return r.extraFilters&&(s=s.concat(i(r.extraFilters))),o&&(s=s.concat(i(o))),s&&s.length||(s=i(n)),s},extractFromAbbreviation:function(e){var t=\"\";return[e=e.replace(/\\|([\\w\\|\\-]+)$/,function(e,r){return t=r,\"\"}),i(t)]}}}),emmet.define(\"elements\",function(e,t){var r={},n=/([\\w\\-:]+)\\s*=\\s*(['\"])(.*?)\\2/g,i={add:function(e,t){var n=this;r[e]=function(){var r=t.apply(n,arguments);return r&&(r.type=e),r}},get:function(e){return r[e]},create:function(e){var t=[].slice.call(arguments,1),r=this.get(e);return r?r.apply(this,t):null},is:function(e,t){return e&&e.type===t}};function o(e){return{data:e}}return i.add(\"element\",function(e,r,i){var o={name:e,is_empty:!!i};if(r)if(o.attributes=[],t.isArray(r))o.attributes=r;else if(t.isString(r))for(var s;s=n.exec(r);)o.attributes.push({name:s[1],value:s[3]});else t.each(r,function(e,t){o.attributes.push({name:t,value:e})});return o}),i.add(\"snippet\",o),i.add(\"reference\",o),i.add(\"empty\",function(){return{}}),i}),emmet.define(\"editTree\",function(e,t,r){var n=e(\"range\").create;function i(e,r){this.options=t.extend({offset:0},r),this.source=e,this._children=[],this._positions={name:0},this.initialize.apply(this,arguments)}function o(e,t,r){this.parent=e,this._name=t.value,this._value=r?r.value:\"\",this._positions={name:t.start,value:r?r.start:-1},this.initialize.apply(this,arguments)}return i.extend=r.extend,i.prototype={initialize:function(){},_updateSource:function(r,i,o){var s=n(i,t.isUndefined(o)?0:o-i),a=r.length-s.length(),l=function(e){t.each(e,function(t,r){t>=s.end&&(e[r]+=a)})};l(this._positions),t.each(this.list(),function(e){l(e._positions)}),this.source=e(\"utils\").replaceSubstring(this.source,r,s)},add:function(e,t,r){var n=new o(e,t);return this._children.push(n),n},get:function(e){return t.isNumber(e)?this.list()[e]:t.isString(e)?t.find(this.list(),function(t){return t.name()===e}):e},getAll:function(e){t.isArray(e)||(e=[e]);var r=[],n=[];return t.each(e,function(e){t.isString(e)?r.push(e):t.isNumber(e)&&n.push(e)}),t.filter(this.list(),function(e,i){return t.include(n,i)||t.include(r,e.name())})},value:function(e,r,n){var i=this.get(e);return i?i.value(r):t.isUndefined(r)?void 0:this.add(e,r,n)},values:function(e){return t.map(this.getAll(e),function(e){return e.value()})},remove:function(e){var r=this.get(e);r&&(this._updateSource(\"\",r.fullRange()),this._children=t.without(this._children,r))},list:function(){return this._children},indexOf:function(e){return t.indexOf(this.list(),this.get(e))},name:function(e){return t.isUndefined(e)||this._name===(e=String(e))||(this._updateSource(e,this._positions.name,this._positions.name+this._name.length),this._name=e),this._name},nameRange:function(e){return n(this._positions.name+(e?this.options.offset:0),this.name())},range:function(e){return n(e?this.options.offset:0,this.toString())},itemFromPosition:function(e,r){return t.find(this.list(),function(t){return t.range(r).inside(e)})},toString:function(){return this.source}},o.extend=r.extend,o.prototype={initialize:function(){},_pos:function(e,t){return e+(t?this.parent.options.offset:0)},value:function(e){return t.isUndefined(e)||this._value===(e=String(e))||(this.parent._updateSource(e,this.valueRange()),this._value=e),this._value},name:function(e){return t.isUndefined(e)||this._name===(e=String(e))||(this.parent._updateSource(e,this.nameRange()),this._name=e),this._name},namePosition:function(e){return this._pos(this._positions.name,e)},valuePosition:function(e){return this._pos(this._positions.value,e)},range:function(e){return n(this.namePosition(e),this.toString())},fullRange:function(e){return this.range(e)},nameRange:function(e){return n(this.namePosition(e),this.name())},valueRange:function(e){return n(this.valuePosition(e),this.value())},toString:function(){return this.name()+this.value()},valueOf:function(){return this.toString()}},{EditContainer:i,EditElement:o,createToken:function(e,t,r){var n={start:e||0,value:t||\"\",type:r};return n.end=n.start+n.value.length,n}}}),emmet.define(\"cssEditTree\",function(e,t){var r={styleBefore:\"\\n\\t\",styleSeparator:\": \",offset:0};function n(t,r){return e(\"range\").create(t,r)}function i(e,r){var n=[\"white\",\"line\"];if(!(2&~(r=r||3)))for(;e.length&&t.include(n,t.last(e).type);)e.pop();if(!(1&~r))for(;e.length&&t.include(n,e[0].type);)e.shift();return e}function o(e){var r,o,s,a=[\"white\",\"line\",\":\"],l=[];for(e.nextUntil(function(e){return!t.include(a,this.itemNext().type)}),o=e.current().end;r=e.next();){if(\"}\"==r.type||\";\"==r.type)return i(l,1|(\"}\"==r.type?2:0)),l.length?(o=l[0].start,s=t.last(l).end):s=o,n(o,s-o);l.push(r)}if(l.length)return n(l[0].start,t.last(l).end-l[0].start)}function s(r){var i,o=e(\"stringStream\").create(r),s=[],a=/[\\s\\u00a0,]/,l=function(){o.next(),s.push(n(o.start,o.current())),o.start=o.pos};for(o.eatSpace(),o.start=o.pos;i=o.next();)if('\"'==i||\"'\"==i){if(o.next(),!o.skipTo(i))break;l()}else if(\"(\"==i){if(o.backUp(1),!o.skipToPair(\"(\",\")\"))break;o.backUp(1),l()}else a.test(i)&&(s.push(n(o.start,o.current().length-1)),o.eatWhile(a),o.start=o.pos);return l(),t.chain(s).filter(function(e){return!!e.length()}).uniq(!1,function(e){return e.toString()}).value()}function a(e){for(var t=e.tokens,r=e._i+1,n=t.length;r<n;r++){if(\":\"==t[r].type)return!0;if(\"identifier\"==t[r].type||\"line\"==t[r].type)return!1}return!1}var l=e(\"editTree\").EditContainer.extend({initialize:function(s,l){t.defaults(this.options,r);var u,d,g,h=e(\"editTree\"),m=e(\"tokenIterator\").create(e(\"cssParser\").parse(s)),p=function(e){for(var r,o,s=[],a=e.position();(r=e.next())&&\"{\"!=r.type;)s.push(r);return i(s),s.length?(a=s[0].start,o=t.last(s).end):o=a,n(a,o-a)}(m);if(this._positions.name=p.start,this._name=p.substring(s),!m.current()||\"{\"!=m.current().type)throw\"Invalid CSS rule\";for(this._positions.contentStart=m.position()+1;g=m.next();)if(\"identifier\"==g.type&&a(m)){u=n(g),d=o(m);var _=m.current()&&\";\"==m.current().type?n(m.current()):n(d.end,0);this._children.push(new c(this,h.createToken(u.start,u.substring(s)),h.createToken(d.start,d.substring(s)),h.createToken(_.start,_.substring(s))))}this._saveStyle()},_saveStyle:function(){var r=this._positions.contentStart,n=this.source,i=e(\"utils\");t.each(this.list(),function(e){e.styleBefore=n.substring(r,e.namePosition());var o=i.splitByLines(e.styleBefore);o.length>1&&(e.styleBefore=\"\\n\"+t.last(o)),e.styleSeparator=n.substring(e.nameRange().end,e.valuePosition()),e.styleBefore=t.last(e.styleBefore.split(\"*/\")),e.styleSeparator=e.styleSeparator.replace(/\\/\\*.*?\\*\\//g,\"\"),r=e.range().end})},add:function(r,n,i){var o=this.list(),s=this._positions.contentStart,a=t.pick(this.options,\"styleBefore\",\"styleSeparator\"),l=e(\"editTree\");t.isUndefined(i)&&(i=o.length);var u=o[i];u?s=u.fullRange().start:(u=o[i-1])&&(u.end(\";\"),s=u.range().end),u&&(a=t.pick(u,\"styleBefore\",\"styleSeparator\"));var d=l.createToken(s+a.styleBefore.length,r),g=l.createToken(d.end+a.styleSeparator.length,n),h=new c(this,d,g,l.createToken(g.end,\";\"));return t.extend(h,a),this._updateSource(h.styleBefore+h.toString(),s),this._children.splice(i,0,h),h}}),c=e(\"editTree\").EditElement.extend({initialize:function(e,t,r,n){this.styleBefore=e.options.styleBefore,this.styleSeparator=e.options.styleSeparator,this._end=n.value,this._positions.end=n.start},valueParts:function(e){var r=s(this.value());if(e){var n=this.valuePosition(!0);t.each(r,function(e){e.shift(n)})}return r},end:function(e){return t.isUndefined(e)||this._end===e||(this.parent._updateSource(e,this._positions.end,this._positions.end+this._end.length),this._end=e),this._end},fullRange:function(e){var t=this.range(e);return t.start-=this.styleBefore.length,t},toString:function(){return this.name()+this.styleSeparator+this.value()+this.end()}});return{parse:function(e,t){return new l(e,t)},parseFromPosition:function(e,t,r){var n=this.extractRule(e,t,r);return n&&n.inside(t)?this.parse(n.substring(e),{offset:n.start}):null},extractRule:function(t,r,n){for(var i,o=\"\",s=t.length,a=r,l=-1;a>=0;){if(\"{\"==(i=t.charAt(a))){l=a;break}if(\"}\"==i&&!n){a++;break}a--}for(;a<s;){if(\"{\"==(i=t.charAt(a)))l=a;else if(\"}\"==i){-1!=l&&(o=t.substring(l,a+1));break}a++}if(o){a=l-1;for(var c;a>=0&&(i=t.charAt(a),-1==\"{}/\\\\<>\\n\\r\".indexOf(i));)a--;return c=t.substring(a+1,l).replace(/^[\\s\\n\\r]+/m,\"\"),e(\"range\").create(l-c.length,o.length+c.length)}return null},baseName:function(e){return e.replace(/^\\s*\\-\\w+\\-/,\"\")},findParts:s}}),emmet.define(\"xmlEditTree\",function(e,t){var r={styleBefore:\" \",styleSeparator:\"=\",styleQuote:'\"',offset:0},n=/^<([\\w\\:\\-]+)((?:\\s+[\\w\\-:]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/m,i=e(\"editTree\").EditContainer.extend({initialize:function(n,i){t.defaults(this.options,r),this._positions.name=1;var s=null,a=e(\"xmlParser\").parse(n),l=e(\"range\");t.each(a,function(e){switch(e.value=l.create(e).substring(n),e.type){case\"tag\":/^<[^\\/]+/.test(e.value)&&(this._name=e.value.substring(1));break;case\"attribute\":s&&this._children.push(new o(this,s)),s=e;break;case\"string\":this._children.push(new o(this,s,e)),s=null}},this),s&&this._children.push(new o(this,s)),this._saveStyle()},_saveStyle:function(){var e=this.nameRange().end,r=this.source;t.each(this.list(),function(t){t.styleBefore=r.substring(e,t.namePosition()),-1!==t.valuePosition()&&(t.styleSeparator=r.substring(t.namePosition()+t.name().length,t.valuePosition()-t.styleQuote.length)),e=t.range().end})},add:function(r,n,i){var s=this.list(),a=this.nameRange().end,l=e(\"editTree\"),c=t.pick(this.options,\"styleBefore\",\"styleSeparator\",\"styleQuote\");t.isUndefined(i)&&(i=s.length);var u=s[i];u?a=u.fullRange().start:(u=s[i-1])&&(a=u.range().end),u&&(c=t.pick(u,\"styleBefore\",\"styleSeparator\",\"styleQuote\")),n=c.styleQuote+n+c.styleQuote;var d=new o(this,l.createToken(a+c.styleBefore.length,r),l.createToken(a+c.styleBefore.length+r.length+c.styleSeparator.length,n));return t.extend(d,c),this._updateSource(d.styleBefore+d.toString(),a),this._children.splice(i,0,d),d}}),o=e(\"editTree\").EditElement.extend({initialize:function(e,t,r){this.styleBefore=e.options.styleBefore,this.styleSeparator=e.options.styleSeparator;var n=\"\",i=e.options.styleQuote;r&&('\"'==(i=(n=r.value).charAt(0))||\"'\"==i?n=n.substring(1):i=\"\",i&&n.charAt(n.length-1)==i&&(n=n.substring(0,n.length-1))),this.styleQuote=i,this._value=n,this._positions.value=r?r.start+i.length:-1},fullRange:function(e){var t=this.range(e);return t.start-=this.styleBefore.length,t},toString:function(){return this.name()+this.styleSeparator+this.styleQuote+this.value()+this.styleQuote}});return{parse:function(e,t){return new i(e,t)},parseFromPosition:function(e,t,r){var n=this.extractTag(e,t,r);return n&&n.inside(t)?this.parse(n.substring(e),{offset:n.start}):null},extractTag:function(t,r,i){var o,s=t.length,a=e(\"range\"),l=Math.min(2e3,s),c=null,u=function(e){var r;if(\"<\"==t.charAt(e)&&(r=t.substr(e,l).match(n)))return a.create(e,r[0])};for(o=r;o>=0&&!(c=u(o));o--);if(c&&(c.inside(r)||i))return c;if(!c&&i)return null;for(o=r;o<s;o++)if(c=u(o))return c}}}),emmet.define(\"expandAbbreviation\",function(e,t){var r=e(\"handlerList\").create(),n=null,i=e(\"actions\");return i.add(\"expand_abbreviation\",function(n,i,o){var s=t.toArray(arguments),a=e(\"editorUtils\").outputInfo(n,i,o);return s[1]=a.syntax,s[2]=a.profile,r.exec(!1,s)}),i.add(\"expand_abbreviation_with_tab\",function(t,r,n){var o=t.getSelection(),s=e(\"resources\").getVariable(\"indentation\");if(o){var a=e(\"utils\"),l=e(\"range\").create(t.getSelectionRange()),c=a.padString(o,s);t.replaceContent(s+\"${0}\",t.getCaretPos());var u=e(\"range\").create(t.getCaretPos(),l.length());return t.replaceContent(c,u.start,u.end,!0),t.createSelection(u.start,u.start+c.length),!0}return i.run(\"expand_abbreviation\",t,r,n)||t.replaceContent(s,t.getCaretPos()),!0},{hidden:!0}),r.add(function(t,r,i){var o=t.getSelectionRange().end,s=n.findAbbreviation(t);if(s){var a=emmet.expandAbbreviation(s,r,i,e(\"actionUtils\").captureContext(t));if(a)return t.replaceContent(a,o-s.length,o),!0}return!1},{order:-1}),n={addHandler:function(e,t){r.add(e,t)},removeHandler:function(e){r.remove(e,options)},findAbbreviation:function(t){var r=e(\"range\").create(t.getSelectionRange()),n=String(t.getContent());if(r.length())return r.substring(n);var i=t.getCurrentLineRange();return e(\"actionUtils\").extractAbbreviation(n.substring(i.start,r.start))}}}),emmet.define(\"wrapWithAbbreviation\",function(e,t){var r=null;return e(\"actions\").add(\"wrap_with_abbreviation\",function(t,n,i,o){var s=e(\"editorUtils\").outputInfo(t,i,o),a=e(\"utils\"),l=e(\"editorUtils\");if(!(n=n||t.prompt(\"Enter abbreviation\")))return null;n=String(n);var c=e(\"range\").create(t.getSelectionRange());if(!c.length()){var u=e(\"htmlMatcher\").tag(s.content,c.start);if(!u)return!1;c=a.narrowToNonSpace(s.content,u.range)}var d=a.escapeText(c.substring(s.content)),g=r.wrap(n,l.unindent(t,d),s.syntax,s.profile,e(\"actionUtils\").captureContext(t));return!!g&&(t.replaceContent(g,c.start,c.end),!0)}),r={wrap:function(t,r,n,i,o){var s=e(\"filters\"),a=e(\"utils\");n=n||emmet.defaultSyntax(),i=e(\"profile\").get(i,n),e(\"tabStops\").resetTabstopIndex();var l=s.extractFromAbbreviation(t),c=e(\"abbreviationParser\").parse(l[0],{syntax:n,pastedContent:r,contextNode:o});if(c){var u=s.composeList(n,i,l[1]);return s.apply(c,u,i),a.replaceVariables(c.toString())}return null}}}),emmet.exec(function(e,t){function r(r){var i=e(\"range\").create(r.getSelectionRange()),o=e(\"editorUtils\").outputInfo(r);if(!i.length()){var s=e(\"cssEditTree\").parseFromPosition(o.content,r.getCaretPos());if(s){var a=function(e,r){var n=r-(e.options.offset||0),i=/^[\\s\\n\\r]/;return t.find(e.list(),function(t){return t.range().end===n?i.test(e.source.charAt(n)):t.range().inside(n)})}(s,r.getCaretPos());i=a?a.range(!0):e(\"range\").create(s.nameRange(!0).start,s.source)}}return i.length()||(i=e(\"range\").create(r.getCurrentLineRange()),e(\"utils\").narrowToNonSpace(o.content,i)),n(r,\"/*\",\"*/\",i)}function n(t,r,n,i){var o=e(\"editorUtils\"),s=o.outputInfo(t).content,a=t.getCaretPos(),l=null,c=e(\"utils\");var u=function(t,r,n,i){for(var o=-1,s=-1,a=function(e,r){return t.substr(r,e.length)==e};r--;)if(a(n,r)){o=r;break}if(-1!=o){r=o;for(var l=t.length;l>=r++;)if(a(i,r)){s=r+i.length;break}}return-1!=o&&-1!=s?e(\"range\").create(o,s-o):null}(s,a,r,n);return u&&u.overlap(i)?l=(i=u).substring(s).replace(new RegExp(\"^\"+c.escapeForRegexp(r)+\"\\\\s*\"),function(e){return a-=e.length,\"\"}).replace(new RegExp(\"\\\\s*\"+c.escapeForRegexp(n)+\"$\"),\"\"):(l=r+\" \"+i.substring(s).replace(new RegExp(c.escapeForRegexp(r)+\"\\\\s*|\\\\s*\"+c.escapeForRegexp(n),\"g\"),\"\")+\" \"+n,a+=r.length+1),null!==l&&(l=c.escapeText(l),t.setCaretPos(i.start),t.replaceContent(o.unindent(t,l),i.start,i.end),t.setCaretPos(a),!0)}e(\"actions\").add(\"toggle_comment\",function(t){var i=e(\"editorUtils\").outputInfo(t);if(\"css\"==i.syntax){var o=t.getCaretPos(),s=e(\"htmlMatcher\").tag(i.content,o);s&&s.open.range.inside(o)&&(i.syntax=\"html\")}return\"css\"==i.syntax?r(t):function(t){var r=e(\"range\").create(t.getSelectionRange()),i=e(\"editorUtils\").outputInfo(t);if(!r.length()){var o=e(\"htmlMatcher\").tag(i.content,t.getCaretPos());o&&(r=o.outerRange)}return n(t,\"\\x3c!--\",\"--\\x3e\",r)}(t)})}),emmet.exec(function(e,t){function r(e,t,r){t=t||1,r=r||0;var n=e.getCaretPos()+r,i=String(e.getContent()),o=i.length,s=-1,a=/^\\s+$/;function l(e){for(var t=e;t>=0;){var r=i.charAt(t);if(\"\\n\"==r||\"\\r\"==r)break;t--}return i.substring(t,e)}for(;n<=o&&n>=0;){n+=t;var c=i.charAt(n),u=i.charAt(n+1),d=i.charAt(n-1);switch(c){case'\"':case\"'\":u==c&&\"=\"==d&&(s=n+1);break;case\">\":\"<\"==u&&(s=n+1);break;case\"\\n\":case\"\\r\":a.test(l(n-1))&&(s=n)}if(-1!=s)break}return s}var n=e(\"actions\");n.add(\"prev_edit_point\",function(e){var t=e.getCaretPos(),n=r(e,-1);return n==t&&(n=r(e,-1,-2)),-1!=n&&(e.setCaretPos(n),!0)},{label:\"Previous Edit Point\"}),n.add(\"next_edit_point\",function(e){var t=r(e,1);return-1!=t&&(e.setCaretPos(t),!0)})}),emmet.exec(function(e,t){var r=/^<([\\w\\:\\-]+)((?:\\s+[\\w\\-:]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/;function n(t,r,n,i){for(var o,s,a=e(\"range\"),l=e(\"editorUtils\").outputInfo(t).content,c=l.length,u=a.create(-1,0),d=a.create(t.getSelectionRange()),g=d.start,h=1e5;g>=0&&g<c&&--h>0;){if(o=n(l,g,r)){if(u.equal(o))break;if(u=o.clone(),s=i(o.substring(l),o.start,d.clone()))return t.createSelection(s.start,s.end),!0;g=r?o.start:o.end-1}g+=r?-1:1}return!1}function i(e){var t=!0;return n(e,!1,function(e,r){return t?(t=!1,function(e,t){var r;for(;t>=0;){if(r=a(e,t))return r;t--}return null}(e,r)):a(e,r)},function(e,t,r){return s(e,t,r,!1)})}function o(r,n,i){i=i||0;var o,s,a=e(\"range\"),c=[],u=-1,d=\"\",g=\"\";return t.each(n,function(t){switch(t.type){case\"tag\":s=r.substring(t.start,t.end),/^<[\\w\\:\\-]/.test(s)&&c.push(a.create({start:t.start+1,end:t.end}));break;case\"attribute\":u=t.start,d=r.substring(t.start,t.end);break;case\"string\":c.push(a.create(u,t.end-u)),o=a.create(t),l((g=o.substring(r)).charAt(0))&&o.start++,l(g.charAt(g.length-1))&&o.end--,c.push(o),\"class\"==d&&(c=c.concat(function(t,r){r=r||0;var n,i=[],o=e(\"stringStream\").create(t),s=e(\"range\");o.eatSpace(),o.start=o.pos;for(;n=o.next();)/[\\s\\u00a0]/.test(n)&&(i.push(s.create(o.start+r,o.pos-o.start-1)),o.eatSpace(),o.start=o.pos);return i.push(s.create(o.start+r,o.pos-o.start)),i}(o.substring(r),o.start)))}}),t.each(c,function(e){e.shift(i)}),t.chain(c).filter(function(e){return!!e.length()}).uniq(!1,function(e){return e.toString()}).value()}function s(r,n,i,s){var a=o(r,e(\"xmlParser\").parse(r),n);s&&a.reverse();var l=t.find(a,function(e){return e.equal(i)});if(l){var c=t.indexOf(a,l);return c<a.length-1?a[c+1]:null}if(s)return t.find(a,function(e){return e.start<i.start});if(!l){var u=t.filter(a,function(e){return e.inside(i.end)});if(u.length>1)return u[1]}return t.find(a,function(e){return e.end>i.end})}function a(t,n){var i;if(\"<\"==t.charAt(n)&&(i=t.substring(n,t.length).match(r)))return e(\"range\").create(n,i[0])}function l(e){return'\"'==e||\"'\"==e}function c(r){var n=r.valueRange(!0),i=[r.range(!0),n],o=e(\"stringStream\"),s=e(\"cssEditTree\"),a=e(\"range\"),l=r.value();return t.each(r.valueParts(),function(e){var r=e.clone();i.push(r.shift(n.start));var c=o.create(e.substring(l));if(c.match(/^[\\w\\-]+\\(/,!0)){c.start=c.pos,c.skipToPair(\"(\",\")\");var u=c.current();i.push(a.create(r.start+c.start,u)),t.each(s.findParts(u),function(e){i.push(a.create(r.start+c.start+e.start,e.substring(u)))})}}),t.chain(i).filter(function(e){return!!e.length()}).uniq(!1,function(e){return e.toString()}).value()}function u(e,r,n){var i,o,s,a,l=null,u=null,d=e.list();for(n?(d.reverse(),s=function(e){return e.range(!0).start<=r.start},a=function(e){return e.start<r.start}):(s=function(e){return e.range(!0).end>=r.end},a=function(e){return e.end>r.start});l=t.find(d,s);){if(i=c(l),n&&i.reverse(),u=t.find(i,function(e){return e.equal(r)})){if((o=t.indexOf(i,u))!=i.length-1){u=i[o+1];break}}else{var g=t.filter(i,function(e){return e.inside(r.end)});if(g.length>1){u=g[1];break}if(u=t.find(i,a))break}u=null,r.start=r.end=n?l.range(!0).start-1:l.range(!0).end+1}return u}function d(t,r,n){var i=e(\"cssEditTree\").parse(t,{offset:r}),o=i.nameRange(!0);return n.end<o.end?o:u(i,n,!1)}function g(t,r,n){var i=e(\"cssEditTree\").parse(t,{offset:r}),o=u(i,n,!0);if(!o){var s=i.nameRange(!0);if(n.start>s.start)return s}return o}var h=e(\"actions\");h.add(\"select_next_item\",function(t){return\"css\"==t.getSyntax()?function(t){return n(t,!1,e(\"cssEditTree\").extractRule,d)}(t):i(t)}),h.add(\"select_previous_item\",function(t){return\"css\"==t.getSyntax()?function(t){return n(t,!0,e(\"cssEditTree\").extractRule,g)}(t):function(e){return n(e,!0,a,function(e,t,r){return s(e,t,r,!0)})}(t)})}),emmet.exec(function(e,t){var r=e(\"actions\"),n=e(\"htmlMatcher\"),i=null;function o(t,r){r=String((r||\"out\").toLowerCase());var o=e(\"editorUtils\").outputInfo(t),s=e(\"range\").create(t.getSelectionRange()),a=o.content;if(i&&!i.range.equal(s)&&(i=null),i&&s.length())if(\"in\"==r){if(\"tag\"==i.type&&!i.close)return!1;if(i.range.equal(i.outerRange))i.range=i.innerRange;else{var l=e(\"utils\").narrowToNonSpace(a,i.innerRange);(i=n.find(a,l.start+1))&&i.range.equal(s)&&i.outerRange.equal(s)&&(i.range=i.innerRange)}}else(!i.innerRange.equal(i.outerRange)&&i.range.equal(i.innerRange)&&s.equal(i.range)||(i=n.find(a,s.start))&&i.range.equal(s)&&i.innerRange.equal(s))&&(i.range=i.outerRange);else i=n.find(a,s.start);return i&&!i.range.equal(s)?(t.createSelection(i.range.start,i.range.end),!0):(i=null,!1)}r.add(\"match_pair\",o,{hidden:!0}),r.add(\"match_pair_inward\",function(e){return o(e,\"in\")},{label:\"HTML/Match Pair Tag (inward)\"}),r.add(\"match_pair_outward\",function(e){return o(e,\"out\")},{label:\"HTML/Match Pair Tag (outward)\"}),r.add(\"matching_pair\",function(e){var t=String(e.getContent()),r=e.getCaretPos();\"<\"==t.charAt(r)&&r++;var i=n.tag(t,r);return!(!i||!i.close)&&(i.open.range.inside(r)?e.setCaretPos(i.close.range.start):e.setCaretPos(i.open.range.start),!0)},{label:\"HTML/Go To Matching Tag Pair\"})}),emmet.exec(function(e,t){e(\"actions\").add(\"remove_tag\",function(t){var r=e(\"utils\"),n=e(\"editorUtils\").outputInfo(t),i=e(\"htmlMatcher\").tag(n.content,t.getCaretPos());if(i){if(i.close){var o=r.narrowToNonSpace(n.content,i.innerRange),s=r.findNewlineBounds(n.content,o.start),a=r.getLinePadding(s.substring(n.content)),l=o.substring(n.content);l=r.unindentString(l,a),t.replaceContent(r.getCaretPlaceholder()+r.escapeText(l),i.outerRange.start,i.outerRange.end)}else t.replaceContent(r.getCaretPlaceholder(),i.range.start,i.range.end);return!0}return!1},{label:\"HTML/Remove Tag\"})}),emmet.exec(function(e,t){e(\"actions\").add(\"split_join_tag\",function(t,r){var n=e(\"htmlMatcher\"),i=e(\"editorUtils\").outputInfo(t,null,r),o=e(\"profile\").get(i.profile),s=n.tag(i.content,t.getCaretPos());return!!s&&(s.close?function(t,r,n){var i=e(\"utils\"),o=r.selfClosing()||\" /\",s=n.open.range.substring(n.source).replace(/\\s*>$/,o+\">\"),a=t.getCaretPos();return s.length+n.outerRange.start<a&&(a=s.length+n.outerRange.start),s=i.escapeText(s),t.replaceContent(s,n.outerRange.start,n.outerRange.end),t.setCaretPos(a),!0}(t,o,s):function(t,r,n){var i=e(\"utils\"),o=i.getNewline(),s=e(\"resources\").getVariable(\"indentation\"),a=t.getCaretPos(),l=!0===r.tag_nl?o+s+o:\"\",c=n.outerContent().replace(/\\s*\\/>$/,\">\");return a=n.outerRange.start+c.length,c+=l+\"</\"+n.open.name+\">\",c=i.escapeText(c),t.replaceContent(c,n.outerRange.start,n.outerRange.end),t.setCaretPos(a),!0}(t,o,s))},{label:\"HTML/Split\\\\Join Tag Declaration\"})}),emmet.define(\"reflectCSSValue\",function(e,t){var r=e(\"handlerList\").create();function n(t,r){var n=function(t,r,n,i){var o=e(\"cssEditTree\"),s=e(\"utils\");if(t=o.baseName(t),n=o.baseName(n),\"opacity\"==t&&\"filter\"==n)return i.replace(/opacity=[^)]*/i,\"opacity=\"+Math.floor(100*parseFloat(r)));if(\"filter\"==t&&\"opacity\"==n){var a=r.match(/opacity=([^)]*)/i);return a?s.prettifyNumber(parseInt(a[1])/100):i}return r}(t.name(),t.value(),r.name(),r.value());r.value(n)}return e(\"actions\").add(\"reflect_css_value\",function(t){return\"css\"==t.getSyntax()&&e(\"actionUtils\").compoundUpdate(t,function(t){var n=e(\"cssEditTree\"),i=e(\"editorUtils\").outputInfo(t),o=t.getCaretPos(),s=n.parseFromPosition(i.content,o);if(!s)return;var a=s.itemFromPosition(o,!0);if(!a)return;var l=s.source,c=s.options.offset,u=o-c-a.range().start;if(r.exec(!1,[a]),l!==s.source)return{data:s.source,start:c,end:c+l.length,caret:c+a.range().start+u}}(t))},{label:\"CSS/Reflect Value\"}),r.add(function(r){var i,o,s,a=(i=r.name(),s=\"^(?:\\\\-\\\\w+\\\\-)?\",\"opacity\"==(i=e(\"cssEditTree\").baseName(i))||\"filter\"==i?new RegExp(s+\"(?:opacity|filter)$\"):(o=i.match(/^border-radius-(top|bottom)(left|right)/))?new RegExp(s+\"(?:\"+i+\"|border-\"+o[1]+\"-\"+o[2]+\"-radius)$\"):(o=i.match(/^border-(top|bottom)-(left|right)-radius/))?new RegExp(s+\"(?:\"+i+\"|border-radius-\"+o[1]+o[2]+\")$\"):new RegExp(s+i+\"$\"));t.each(r.parent.list(),function(e){a.test(e.name())&&n(r,e)})},{order:-1}),{addHandler:function(e,t){r.add(e,t)},removeHandler:function(e){r.remove(e,options)}}}),emmet.exec(function(e,t){e(\"actions\").add(\"evaluate_math_expression\",function(t){var r=e(\"actionUtils\"),n=e(\"utils\"),i=String(t.getContent()),o=e(\"range\").create(t.getSelectionRange());if(o.length()||(o=r.findExpressionBounds(t,function(e){return n.isNumeric(e)||-1!=\".+-*/\\\\\".indexOf(e)})),o&&o.length()){var s=o.substring(i);s=s.replace(/([\\d\\.\\-]+)\\\\([\\d\\.\\-]+)/g,\"Math.round($1/$2)\");try{var a=n.prettifyNumber(new Function(\"return \"+s)());return t.replaceContent(a,o.start,o.end),t.setCaretPos(o.start+a.length),!0}catch(e){}}return!1},{label:\"Numbers/Evaluate Math Expression\"})}),emmet.exec(function(e,t){var r=e(\"actions\");t.each([1,-1,10,-10,.1,-.1],function(n){var i=n>0?\"increment\":\"decrement\";r.add(i+\"_number_by_\"+String(Math.abs(n)).replace(\".\",\"\").substring(0,2),function(r){return function(r,n){var i=e(\"utils\"),o=e(\"actionUtils\"),s=!1,a=!1,l=o.findExpressionBounds(r,function(e,t,r){return!!i.isNumeric(e)||(\".\"==e?!!i.isNumeric(r.charAt(t+1))&&!a&&(a=!0):\"-\"==e&&!s&&(s=!0))});if(l&&l.length()){var c=l.substring(String(r.getContent())),u=parseFloat(c);if(!t.isNaN(u)){if(u=i.prettifyNumber(u+n),/^(\\-?)0+[1-9]/.test(c)){var d=\"\";RegExp.$1&&(d=\"-\",u=u.substring(1));var g=u.split(\".\");g[0]=i.zeroPadString(g[0],function(e){return~(e=e.replace(/^\\-/,\"\")).indexOf(\".\")?e.split(\".\")[0].length:e.length}(c)),u=d+g.join(\".\")}return r.replaceContent(u,l.start,l.end),r.createSelection(l.start,l.start+u.length),!0}}return!1}(r,n)},{label:\"Numbers/\"+i.charAt(0).toUpperCase()+i.substring(1)+\" number by \"+Math.abs(n)})})}),emmet.exec(function(e,t){var r=e(\"actions\"),n=e(\"preferences\");n.define(\"css.closeBraceIndentation\",\"\\n\",\"Indentation before closing brace of CSS rule. Some users prefere indented closing brace of CSS rule for better readability. This preference’s value will be automatically inserted before closing brace when user adds newline in newly created CSS rule (e.g. when “Insert formatted linebreak” action will be performed in CSS file). If you’re such user, you may want to write put a value like <code>\\\\n\\\\t</code> in this preference.\"),r.add(\"insert_formatted_line_break_only\",function(r){var i=e(\"utils\"),o=e(\"resources\"),s=e(\"editorUtils\").outputInfo(r),a=r.getCaretPos(),l=i.getNewline();if(t.include([\"html\",\"xml\",\"xsl\"],s.syntax)){var c=o.getVariable(\"indentation\"),u=e(\"htmlMatcher\").tag(s.content,a);if(u&&!u.innerRange.length())return r.replaceContent(l+c+i.getCaretPlaceholder()+l,a),!0}else if(\"css\"==s.syntax){var d=s.content;if(a&&\"{\"==d.charAt(a-1)){var g=n.get(\"css.closeBraceIndentation\"),h=(c=o.getVariable(\"indentation\"),\"}\"==d.charAt(a));if(!h)for(var m,p=a,_=d.length;p<_&&\"{\"!=(m=d.charAt(p));p++)if(\"}\"==m){g=\"\",h=!0;break}h||(g+=\"}\");var f=l+c+i.getCaretPlaceholder()+g;return r.replaceContent(f,a),!0}}return!1},{hidden:!0}),r.add(\"insert_formatted_line_break\",function(t){if(!r.run(\"insert_formatted_line_break_only\",t)){for(var n,i=e(\"utils\"),o=e(\"editorUtils\").getCurrentLinePadding(t),s=String(t.getContent()),a=t.getCaretPos(),l=s.length,c=i.getNewline(),u=\"\",d=t.getCurrentLineRange().end+1;d<l&&(\" \"==(n=s.charAt(d))||\"\\t\"==n);d++)u+=n;u.length>o.length?t.replaceContent(c+u,a,a,!0):t.replaceContent(c,a)}return!0},{hidden:!0})}),emmet.exec(function(e,t){e(\"actions\").add(\"merge_lines\",function(t){var r=e(\"htmlMatcher\"),n=e(\"utils\"),i=e(\"editorUtils\").outputInfo(t),o=e(\"range\").create(t.getSelectionRange());if(!o.length()){var s=r.find(i.content,t.getCaretPos());s&&(o=s.outerRange)}if(o.length()){for(var a=o.substring(i.content),l=n.splitByLines(a),c=1;c<l.length;c++)l[c]=l[c].replace(/^\\s+/,\"\");var u=(a=l.join(\"\").replace(/\\s{2,}/,\" \")).length;return a=n.escapeText(a),t.replaceContent(a,o.start,o.end),t.createSelection(o.start,o.start+u),!0}return!1})}),emmet.exec(function(e,t){function r(e,t,r){return r=r||0,t.charAt(r)==e.charAt(0)&&t.substr(r,e.length)==e}e(\"actions\").add(\"encode_decode_data_url\",function(t){var n=String(t.getSelection()),i=t.getCaretPos();if(!n)for(var o,s=String(t.getContent());i-- >=0;){if(r(\"src=\",s,i)){(o=s.substr(i).match(/^(src=([\"'])?)([^'\"<>\\s]+)\\1?/))&&(n=o[3],i+=o[1].length);break}if(r(\"url(\",s,i)){(o=s.substr(i).match(/^(url\\((['\"])?)([^'\"\\)\\s]+)\\1?/))&&(n=o[3],i+=o[1].length);break}}return!!n&&(r(\"data:\",n)?function(t,r,n){var i=String(t.prompt(\"Enter path to file (absolute or relative)\"));if(!i)return!1;var o=e(\"file\"),s=o.createPath(t.getFilePath(),i);if(!s)throw\"Can't save file\";return o.save(s,e(\"base64\").decode(r.replace(/^data\\:.+?;.+?,/,\"\"))),t.replaceContent(\"$0\"+i,n,n+r.length),!0}(t,n,i):function(t,r,n){var i=e(\"file\"),o=e(\"actionUtils\"),s=t.getFilePath(),a=\"application/octet-stream\";if(null===s)throw\"You should save your file before using this action\";var l=i.locateFile(s,r);if(null===l)throw\"Can't find \"+r+\" file\";return i.read(l,function(s,c){if(s)throw\"Unable to read \"+l+\": \"+s;var u=e(\"base64\").encode(String(c));if(!u)throw\"Can't encode file content to base64\";u=\"data:\"+(o.mimeTypes[String(i.getExt(l))]||a)+\";base64,\"+u,t.replaceContent(\"$0\"+u,n,n+r.length)}),!0}(t,n,i))},{label:\"Encode\\\\Decode data:URL image\"})}),emmet.exec(function(e,t){function r(t,r,n){var i,o=e(\"actionUtils\");if(r){if(/^data:/.test(r))return i=e(\"base64\").decode(r.replace(/^data\\:.+?;.+?,/,\"\")),n(o.getImageSize(i));var s=e(\"file\"),a=s.locateFile(t.getFilePath(),r);if(null===a)throw\"Can't find \"+r+\" file\";s.read(a,function(e,t){if(e)throw\"Unable to read \"+a+\": \"+e;t=String(t),n(o.getImageSize(t))})}}e(\"actions\").add(\"update_image_size\",function(n){return t.include([\"css\",\"less\",\"scss\"],String(n.getSyntax()))?function(n){var i=n.getCaretPos(),o=e(\"editorUtils\").outputInfo(n),s=e(\"cssEditTree\").parseFromPosition(o.content,i,!0);if(s){var a,l=s.itemFromPosition(i,!0);l&&(a=/url\\(([\"']?)(.+?)\\1\\)/i.exec(l.value()||\"\"))&&r(n,a[2],function(r){if(r){var o=s.range(!0);s.value(\"width\",r.width+\"px\"),s.value(\"height\",r.height+\"px\",s.indexOf(\"width\")+1),e(\"actionUtils\").compoundUpdate(n,t.extend(o,{data:s.toString(),caret:i}))}})}}(n):function(n){var i=n.getCaretPos(),o=e(\"editorUtils\").outputInfo(n),s=e(\"xmlEditTree\").parseFromPosition(o.content,i,!0);s&&\"img\"==(s.name()||\"\").toLowerCase()&&r(n,s.value(\"src\"),function(r){if(r){var o=s.range(!0);s.value(\"width\",r.width),s.value(\"height\",r.height,s.indexOf(\"width\")+1),e(\"actionUtils\").compoundUpdate(n,t.extend(o,{data:s.toString(),caret:i}))}})}(n),!0})}),emmet.define(\"cssResolver\",function(e,t){var r=null,n={prefix:\"emmet\",obsolete:!1,transformName:function(e){return\"-\"+this.prefix+\"-\"+e},properties:function(){return e=\"css.\"+this.prefix+\"Properties\",r=s.getArray(e),t.each(s.getArray(e+\"Addon\"),function(e){\"-\"==e.charAt(0)?r=t.without(r,e.substr(1)):(\"+\"==e.charAt(0)&&(e=e.substr(1)),r.push(e))}),r||[];var e,r},supports:function(e){return t.include(this.properties(),e)}},i={},o=\"${1};\",s=e(\"preferences\");s.define(\"css.valueSeparator\",\": \",\"Defines a symbol that should be placed between CSS property and value when expanding CSS abbreviations.\"),s.define(\"css.propertyEnd\",\";\",\"Defines a symbol that should be placed at the end of CSS property  when expanding CSS abbreviations.\"),s.define(\"stylus.valueSeparator\",\" \",\"Defines a symbol that should be placed between CSS property and value when expanding CSS abbreviations in Stylus dialect.\"),s.define(\"stylus.propertyEnd\",\"\",\"Defines a symbol that should be placed at the end of CSS property  when expanding CSS abbreviations in Stylus dialect.\"),s.define(\"sass.propertyEnd\",\"\",\"Defines a symbol that should be placed at the end of CSS property  when expanding CSS abbreviations in SASS dialect.\"),s.define(\"css.autoInsertVendorPrefixes\",!0,\"Automatically generate vendor-prefixed copies of expanded CSS property. By default, Emmet will generate vendor-prefixed properties only when you put dash before abbreviation (e.g. <code>-bxsh</code>). With this option enabled, you don’t need dashes before abbreviations: Emmet will produce vendor-prefixed properties for you.\");var a=t.template(\"A comma-separated list of CSS properties that may have <code><%= vendor %></code> vendor prefix. This list is used to generate a list of prefixed properties when expanding <code>-property</code> abbreviations. Empty list means that all possible CSS values may have <code><%= vendor %></code> prefix.\"),l=t.template(\"A comma-separated list of <em>additional</em> CSS properties for <code>css.<%= vendor %>Preperties</code> preference. You should use this list if you want to add or remove a few CSS properties to original set. To add a new property, simply write its name, to remove it, precede property with hyphen.<br>For example, to add <em>foo</em> property and remove <em>border-radius</em> one, the preference value will look like this: <code>foo, -border-radius</code>.\");function c(e){var t=e&&e.charCodeAt(0);return e&&\".\"==e||t>47&&t<58}function u(t){return!~(t=e(\"utils\").trim(t)).indexOf(\"/*\")&&!/[\\n\\r]/.test(t)&&(!!/^[a-z0-9\\-]+\\s*\\:/i.test(t)&&2==(t=e(\"tabStops\").processText(t,{replaceCarets:!0,tabstop:function(){return\"value\"}})).split(\":\").length)}function d(t){return\"-\"!=t.charAt(0)||/^\\-[\\.\\d]/.test(t)||(t=t.replace(/^\\-+/,\"\")),\"#\"==t.charAt(0)?function(t){var r=t.replace(/^#+/,\"\")||\"0\";if(\"t\"==r.toLowerCase())return\"transparent\";var n=e(\"utils\").repeatString,i=null;switch(r.length){case 1:i=n(r,6);break;case 2:i=n(r,3);break;case 3:i=r.charAt(0)+r.charAt(0)+r.charAt(1)+r.charAt(1)+r.charAt(2)+r.charAt(2);break;case 4:i=r+r.substr(0,2);break;case 5:i=r+r.charAt(0);break;default:i=r.substr(0,6)}if(s.get(\"css.color.short\")){var o=i.split(\"\");o[0]==o[1]&&o[2]==o[3]&&o[4]==o[5]&&(i=o[0]+o[2]+o[4])}switch(s.get(\"css.color.case\")){case\"upper\":i=i.toUpperCase();break;case\"lower\":i=i.toLowerCase()}return\"#\"+i}(t):g(t)}function g(e){var t=s.getDict(\"css.keywordAliases\");return e in t?t[e]:e}function h(e){return t.include(s.getArray(\"css.keywords\"),g(e))}function m(e,r){var n=i[r];return n||(n=t.find(i,function(e){return e.prefix==r})),n&&n.supports(e)}function p(e,r){t.isString(r)&&(r={prefix:r}),i[e]=t.extend({},n,r)}function _(e,r){if(r){var n=s.get(r+\".\"+e);if(!t.isUndefined(n))return n}return s.get(\"css.\"+e)}function f(r,n,i){return t.isString(r)||(r=r.data),u(r)?(n&&(~r.indexOf(\";\")?r=r.split(\";\").join(\" !important;\"):r+=\" !important\"),function(t,r){var n=t.indexOf(\":\");return(t=t.substring(0,n).replace(/\\s+$/,\"\")+_(\"valueSeparator\",r)+e(\"utils\").trim(t.substring(n+1))).replace(/\\s*;\\s*$/,_(\"propertyEnd\",r))}(r,i)):r}t.each({webkit:\"animation, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, appearance, backface-visibility, background-clip, background-composite, background-origin, background-size, border-fit, border-horizontal-spacing, border-image, border-vertical-spacing, box-align, box-direction, box-flex, box-flex-group, box-lines, box-ordinal-group, box-orient, box-pack, box-reflect, box-shadow, color-correction, column-break-after, column-break-before, column-break-inside, column-count, column-gap, column-rule-color, column-rule-style, column-rule-width, column-span, column-width, dashboard-region, font-smoothing, highlight, hyphenate-character, hyphenate-limit-after, hyphenate-limit-before, hyphens, line-box-contain, line-break, line-clamp, locale, margin-before-collapse, margin-after-collapse, marquee-direction, marquee-increment, marquee-repetition, marquee-style, mask-attachment, mask-box-image, mask-box-image-outset, mask-box-image-repeat, mask-box-image-slice, mask-box-image-source, mask-box-image-width, mask-clip, mask-composite, mask-image, mask-origin, mask-position, mask-repeat, mask-size, nbsp-mode, perspective, perspective-origin, rtl-ordering, text-combine, text-decorations-in-effect, text-emphasis-color, text-emphasis-position, text-emphasis-style, text-fill-color, text-orientation, text-security, text-stroke-color, text-stroke-width, transform, transition, transform-origin, transform-style, transition-delay, transition-duration, transition-property, transition-timing-function, user-drag, user-modify, user-select, writing-mode, svg-shadow, box-sizing, border-radius\",moz:\"animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, appearance, backface-visibility, background-inline-policy, binding, border-bottom-colors, border-image, border-left-colors, border-right-colors, border-top-colors, box-align, box-direction, box-flex, box-ordinal-group, box-orient, box-pack, box-shadow, box-sizing, column-count, column-gap, column-rule-color, column-rule-style, column-rule-width, column-width, float-edge, font-feature-settings, font-language-override, force-broken-image-icon, hyphens, image-region, orient, outline-radius-bottomleft, outline-radius-bottomright, outline-radius-topleft, outline-radius-topright, perspective, perspective-origin, stack-sizing, tab-size, text-blink, text-decoration-color, text-decoration-line, text-decoration-style, text-size-adjust, transform, transform-origin, transform-style, transition, transition-delay, transition-duration, transition-property, transition-timing-function, user-focus, user-input, user-modify, user-select, window-shadow, background-clip, border-radius\",ms:\"accelerator, backface-visibility, background-position-x, background-position-y, behavior, block-progression, box-align, box-direction, box-flex, box-line-progression, box-lines, box-ordinal-group, box-orient, box-pack, content-zoom-boundary, content-zoom-boundary-max, content-zoom-boundary-min, content-zoom-chaining, content-zoom-snap, content-zoom-snap-points, content-zoom-snap-type, content-zooming, filter, flow-from, flow-into, font-feature-settings, grid-column, grid-column-align, grid-column-span, grid-columns, grid-layer, grid-row, grid-row-align, grid-row-span, grid-rows, high-contrast-adjust, hyphenate-limit-chars, hyphenate-limit-lines, hyphenate-limit-zone, hyphens, ime-mode, interpolation-mode, layout-flow, layout-grid, layout-grid-char, layout-grid-line, layout-grid-mode, layout-grid-type, line-break, overflow-style, perspective, perspective-origin, perspective-origin-x, perspective-origin-y, scroll-boundary, scroll-boundary-bottom, scroll-boundary-left, scroll-boundary-right, scroll-boundary-top, scroll-chaining, scroll-rails, scroll-snap-points-x, scroll-snap-points-y, scroll-snap-type, scroll-snap-x, scroll-snap-y, scrollbar-arrow-color, scrollbar-base-color, scrollbar-darkshadow-color, scrollbar-face-color, scrollbar-highlight-color, scrollbar-shadow-color, scrollbar-track-color, text-align-last, text-autospace, text-justify, text-kashida-space, text-overflow, text-size-adjust, text-underline-position, touch-action, transform, transform-origin, transform-origin-x, transform-origin-y, transform-origin-z, transform-style, transition, transition-delay, transition-duration, transition-property, transition-timing-function, user-select, word-break, word-wrap, wrap-flow, wrap-margin, wrap-through, writing-mode\",o:\"dashboard-region, animation, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, border-image, link, link-source, object-fit, object-position, tab-size, table-baseline, transform, transform-origin, transition, transition-delay, transition-duration, transition-property, transition-timing-function, accesskey, input-format, input-required, marquee-dir, marquee-loop, marquee-speed, marquee-style\"},function(e,t){s.define(\"css.\"+t+\"Properties\",e,a({vendor:t})),s.define(\"css.\"+t+\"PropertiesAddon\",\"\",l({vendor:t}))}),s.define(\"css.unitlessProperties\",\"z-index, line-height, opacity, font-weight, zoom\",\"The list of properties whose values ​​must not contain units.\"),s.define(\"css.intUnit\",\"px\",\"Default unit for integer values\"),s.define(\"css.floatUnit\",\"em\",\"Default unit for float values\"),s.define(\"css.keywords\",\"auto, inherit\",\"A comma-separated list of valid keywords that can be used in CSS abbreviations.\"),s.define(\"css.keywordAliases\",\"a:auto, i:inherit, s:solid, da:dashed, do:dotted, t:transparent\",\"A comma-separated list of keyword aliases, used in CSS abbreviation. Each alias should be defined as <code>alias:keyword_name</code>.\"),s.define(\"css.unitAliases\",\"e:em, p:%, x:ex, r:rem\",\"A comma-separated list of unit aliases, used in CSS abbreviation. Each alias should be defined as <code>alias:unit_value</code>.\"),s.define(\"css.color.short\",!0,\"Should color values like <code>#ffffff</code> be shortened to <code>#fff</code> after abbreviation with color was expanded.\"),s.define(\"css.color.case\",\"keep\",\"Letter case of color values generated by abbreviations with color (like <code>c#0</code>). Possible values are <code>upper</code>, <code>lower</code> and <code>keep</code>.\"),s.define(\"css.fuzzySearch\",!0,\"Enable fuzzy search among CSS snippet names. When enabled, every <em>unknown</em> snippet will be scored against available snippet names (not values or CSS properties!). The match with best score will be used to resolve snippet value. For example, with this preference enabled, the following abbreviations are equal: <code>ov:h</code> == <code>ov-h</code> == <code>o-h</code> == <code>oh</code>\"),s.define(\"css.fuzzySearchMinScore\",.3,\"The minium score (from 0 to 1) that fuzzy-matched abbreviation should achive. Lower values may produce many false-positive matches, higher values may reduce possible matches.\"),s.define(\"css.alignVendor\",!1,\"If set to <code>true</code>, all generated vendor-prefixed properties will be aligned by real property name.\"),p(\"w\",{prefix:\"webkit\"}),p(\"m\",{prefix:\"moz\"}),p(\"s\",{prefix:\"ms\"}),p(\"o\",{prefix:\"o\"});var b=[\"css\",\"less\",\"sass\",\"scss\",\"stylus\"];e(\"resources\").addResolver(function(e,n){return t.include(b,n)&&e.isElement()?r.expandToSnippet(e.abbreviation,n):null});var y=e(\"expandAbbreviation\");return y.addHandler(function(e,r,n){if(!t.include(b,r))return!1;var i=e.getSelectionRange().end,o=y.findAbbreviation(e);if(o){var s=emmet.expandAbbreviation(o,r,n);if(s){var a=i-o.length,l=i;return\";\"==e.getContent().charAt(i)&&\";\"==s.charAt(s.length-1)&&l++,e.replaceContent(s,a,l),!0}}return!1}),r={addPrefix:p,supportsPrefix:m,prefixed:function(e,t){return m(e,t)?\"-\"+t+\"-\"+e:e},listPrefixes:function(){return t.map(i,function(e){return e.prefix})},getPrefix:function(e){return i[e]},removePrefix:function(e){e in i&&delete i[e]},extractPrefixes:function(e){if(\"-\"!=e.charAt(0))return{property:e,prefixes:null};for(var t,r=1,n=e.length,o=[];r<n;){if(\"-\"==(t=e.charAt(r))){r++;break}if(!(t in i)){o.length=0,r=1;break}o.push(t),r++}return r==n-1&&(r=1,o.length=1),{property:e.substring(r),prefixes:o.length?o:\"all\"}},findValuesInAbbreviation:function(t,r){r=r||\"css\";for(var n,i=0,o=t.length,s=\"\";i<o;){if(c(n=t.charAt(i))||\"#\"==n||\"-\"==n&&c(t.charAt(i+1))){s=t.substring(i);break}i++}for(var a=t.substring(0,t.length-s.length),l=e(\"resources\"),u=[];~a.indexOf(\"-\")&&!l.findSnippet(r,a);){var d=a.split(\"-\"),g=d.pop();if(!h(g))break;u.unshift(g),a=d.join(\"-\")}return u.join(\"-\")+s},parseValues:function(r){for(var n=e(\"stringStream\").create(r),i=[],o=null;o=n.next();)\"#\"==o?(n.match(/^t|[0-9a-f]+/i,!0),i.push(n.current())):\"-\"==o?((h(t.last(i))||n.start&&c(r.charAt(n.start-1)))&&(n.start=n.pos),n.match(/^\\-?[0-9]*(\\.[0-9]+)?[a-z%\\.]*/,!0),i.push(n.current())):(n.match(/^[0-9]*(\\.[0-9]*)?[a-z%]*/,!0),i.push(n.current())),n.start=n.pos;return t.map(t.compact(i),d)},extractValues:function(e){var t=this.findValuesInAbbreviation(e);return t?{property:e.substring(0,e.length-t.length).replace(/-$/,\"\"),values:this.parseValues(t)}:{property:e,values:null}},normalizeValue:function(e,r){r=(r||\"\").toLowerCase();var n=s.getArray(\"css.unitlessProperties\");return e.replace(/^(\\-?[0-9\\.]+)([a-z]*)$/,function(e,i,o){return o||\"0\"!=i&&!t.include(n,r)?o?i+(a=o,l=s.getDict(\"css.unitAliases\"),a in l?l[a]:a):i.replace(/\\.$/,\"\")+s.get(~i.indexOf(\".\")?\"css.floatUnit\":\"css.intUnit\"):i;var a,l})},expand:function(r,n,a){a=a||\"css\";var l,c=e(\"resources\"),d=s.get(\"css.autoInsertVendorPrefixes\");(l=/^(.+)\\!$/.test(r))&&(r=RegExp.$1);var g=c.findSnippet(a,r);if(g&&!d)return f(g,l,a);var h=this.extractPrefixes(r),p=this.extractValues(h.property),_=t.extend(h,p);if(g?_.values=null:g=c.findSnippet(a,_.property),!g&&s.get(\"css.fuzzySearch\")&&(g=c.fuzzyFindSnippet(a,_.property,parseFloat(s.get(\"css.fuzzySearchMinScore\")))),g?t.isString(g)||(g=g.data):g=_.property+\":\"+o,!u(g))return g;var b=this.splitSnippet(g),y=[];!n&&_.values&&(n=t.map(_.values,function(e){return this.normalizeValue(e,b.name)},this).join(\" \")+\";\"),b.value=n||b.value;var x,v=\"all\"==_.prefixes||!_.prefixes&&d?function(e,r){var n=[];return t.each(i,function(t,r){m(e,r)&&n.push(r)}),n.length||r||t.each(i,function(e,t){e.obsolete||n.push(t)}),n}(b.name,d&&\"all\"!=_.prefixes):_.prefixes,w=[];if(t.each(v,function(e){e in i&&(x=i[e].transformName(b.name),w.push(x),y.push(f(x+\":\"+b.value,l,a)))}),y.push(f(b.name+\":\"+b.value,l,a)),w.push(b.name),s.get(\"css.alignVendor\")){var k=e(\"utils\").getStringsPads(w);y=t.map(y,function(e,t){return k[t]+e})}return y},expandToSnippet:function(e,r){var n=this.expand(e,null,r);return t.isArray(n)?n.join(\"\\n\"):t.isString(n)?String(n):n.data},splitSnippet:function(t){var r=e(\"utils\");if(-1==(t=r.trim(t)).indexOf(\":\"))return{name:t,value:o};var n=t.split(\":\");return{name:r.trim(n.shift()),value:r.trim(n.join(\":\")).replace(/^(\\$\\{0\\}|\\$0)(\\s*;?)$/,\"${1}$2\")}},getSyntaxPreference:_,transformSnippet:f}}),emmet.define(\"cssGradient\",function(e,t){var r=[\"top\",\"to bottom\",\"0deg\"],n=null,i=[\"css\",\"less\",\"sass\",\"scss\",\"stylus\",\"styl\"],o=/\\d+deg/i,s=/top|bottom|left|right/i,a=e(\"preferences\");function l(t){return e(\"utils\").trim(t).replace(/\\s+/g,\" \")}function c(e){e=l(e);var t=null;if(e=e.replace(/^(\\w+\\(.+?\\))\\s*/,function(e,r){return t=r,\"\"}),!t){var r=e.split(\" \");t=r[0],e=r[1]||\"\"}var n={color:t};return e&&e.replace(/^(\\-?[\\d\\.]+)([a-z%]+)?$/,function(e,t,r){n.position=t,~t.indexOf(\".\")?r=\"\":r||(r=\"%\"),r&&(n.unit=r)}),n}function u(e){if(e=function(e){var r=parseFloat(e);if(!t.isNaN(r))switch(r%360){case 0:return\"left\";case 90:return\"bottom\";case 180:return\"right\";case 240:return\"top\"}return e}(e),o.test(e))throw\"The direction is an angle that can’t be converted.\";var r=function(t){return~e.indexOf(t)?\"100%\":\"0\"};return r(\"right\")+\" \"+r(\"bottom\")+\", \"+r(\"left\")+\" \"+r(\"top\")}function d(e){var r=a.getArray(\"css.gradient.prefixes\"),n=r?t.map(r,function(t){return\"-\"+t+\"-\"+e}):[];return n.push(e),n}function g(r,i){var o=[],s=e(\"cssResolver\");return a.get(\"css.gradient.fallback\")&&~i.toLowerCase().indexOf(\"background\")&&o.push({name:\"background-color\",value:\"${1:\"+r.colorStops[0].color+\"}\"}),t.each(a.getArray(\"css.gradient.prefixes\"),function(e){var t=s.prefixed(i,e);if(\"webkit\"==e&&a.get(\"css.gradient.oldWebkit\"))try{o.push({name:t,value:n.oldWebkitLinearGradient(r)})}catch(e){}o.push({name:t,value:n.toString(r,e)})}),o.sort(function(e,t){return t.name.length-e.name.length})}function h(e){var r=e.value(),i=null,o=t.find(e.valueParts(),function(e){return i=n.parse(e.substring(r))});return o&&i?{gradient:i,valueRange:o}:null}function m(r,n){var i=null,o=e(\"cssEditTree\").parseFromPosition(r,n,!0);return o&&((i=o.itemFromPosition(n,!0))||(i=t.find(o.list(),function(e){return e.range(!0).end==n}))),{rule:o,property:i}}return a.define(\"css.gradient.prefixes\",\"webkit, moz, o\",\"A comma-separated list of vendor-prefixes for which values should be generated.\"),a.define(\"css.gradient.oldWebkit\",!0,\"Generate gradient definition for old Webkit implementations\"),a.define(\"css.gradient.omitDefaultDirection\",!0,\"Do not output default direction definition in generated gradients.\"),a.define(\"css.gradient.defaultProperty\",\"background-image\",\"When gradient expanded outside CSS value context, it will produce properties with this name.\"),a.define(\"css.gradient.fallback\",!1,\"With this option enabled, CSS gradient generator will produce <code>background-color</code> property with gradient first color as fallback for old browsers.\"),e(\"expandAbbreviation\").addHandler(function(r,o,s){var l=e(\"editorUtils\").outputInfo(r,o,s);if(!t.include(i,l.syntax))return!1;var c=r.getCaretPos(),u=l.content,p=m(u,c);if(p.property){var _=h(p.property);if(_){var f=p.rule.options.offset||0,b=f+p.rule.toString().length;if(/[\\n\\r]/.test(p.property.value())){var y=p.property.valueRange(!0).start+_.valueRange.end,x=m(u=e(\"utils\").replaceSubstring(u,\";\",y),c);x.property&&(_=h(x.property),p=x)}p.property.end(\";\");var v=function(r,n){var i=e(\"resources\"),o=e(\"preferences\"),s=i.findSnippet(n,r);if(!s&&o.get(\"css.fuzzySearch\")&&(s=i.fuzzyFindSnippet(n,r,parseFloat(o.get(\"css.fuzzySearchMinScore\")))),s)return t.isString(s)||(s=s.data),e(\"cssResolver\").splitSnippet(s).name}(p.property.name(),o);return v&&p.property.name(v),function(r,i,o){var s=r.parent,a=e(\"utils\"),l=e(\"preferences\").get(\"css.alignVendor\"),c=r.styleSeparator,u=r.styleBefore;if(t.each(s.getAll(d(r.name())),function(e){e!=r&&/gradient/i.test(e.value())&&(e.styleSeparator.length<c.length&&(c=e.styleSeparator),e.styleBefore.length<u.length&&(u=e.styleBefore),s.remove(e))}),l){if(u!=r.styleBefore){var h=r.fullRange();s._updateSource(u,h.start,h.start+r.styleBefore.length),r.styleBefore=u}c!=r.styleSeparator&&(s._updateSource(c,r.nameRange().end,r.valueRange().start),r.styleSeparator=c)}var m,p=r.value();o||(o=e(\"range\").create(0,r.value())),r.value((m=n.toString(i),a.replaceSubstring(p,m,o)+\"${2}\"));var _=g(i,r.name());if(l){var f=t.pluck(_,\"value\"),b=t.pluck(_,\"name\");f.push(r.value()),b.push(r.name());var y=a.getStringsPads(t.map(f,function(e){return e.substring(0,e.indexOf(\"(\"))})),x=a.getStringsPads(b);r.name(t.last(x)+r.name()),t.each(_,function(e,t){e.name=x[t]+e.name,e.value=y[t]+e.value}),r.value(t.last(y)+r.value())}t.each(_,function(e){s.add(e.name,e.value,s.indexOf(r))})}(p.property,_.gradient,_.valueRange),r.replaceContent(p.rule.toString(),f,b,!0),!0}}return function(r,i){var o=a.get(\"css.gradient.defaultProperty\");if(!o)return!1;var s=String(r.getContent()),l=e(\"range\").create(r.getCurrentLineRange()),c=l.substring(s).replace(/^\\s+/,function(e){return l.start+=e.length,\"\"}).replace(/\\s+$/,function(e){return l.end-=e.length,\"\"}),u=e(\"cssResolver\"),d=n.parse(c);if(d){var h=g(d,o);h.push({name:o,value:n.toString(d)+\"${2}\"});var m=u.getSyntaxPreference(\"valueSeparator\",i),p=u.getSyntaxPreference(\"propertyEnd\",i);if(e(\"preferences\").get(\"css.alignVendor\")){var _=e(\"utils\").getStringsPads(t.map(h,function(e){return e.value.substring(0,e.value.indexOf(\"(\"))}));t.each(h,function(e,t){e.value=_[t]+e.value})}return h=t.map(h,function(e){return e.name+m+e.value+p}),r.replaceContent(h.join(\"\\n\"),l.start,l.end),!0}return!1}(r,o)}),e(\"reflectCSSValue\").addHandler(function(r){var i=e(\"utils\"),o=h(r);if(!o)return!1;var s=r.value(),a=function(e){return i.replaceSubstring(s,e,o.valueRange)};return t.each(r.parent.getAll(d(r.name())),function(e){if(e!==r){var t=e.value().match(/^\\s*(\\-([a-z]+)\\-)?linear\\-gradient/);t?e.value(a(n.toString(o.gradient,t[2]||\"\"))):(t=e.value().match(/\\s*\\-webkit\\-gradient/))&&e.value(a(n.oldWebkitLinearGradient(o.gradient)))}}),!0}),n={parse:function(n){var i=null;return e(\"utils\").trim(n).replace(/^([\\w\\-]+)\\((.+?)\\)$/,function(n,a,u){return\"linear-gradient\"==(a=a.toLowerCase().replace(/^\\-[a-z]+\\-/,\"\"))||\"lg\"==a?(i=function(n){for(var i,a=r[0],u=e(\"stringStream\").create(e(\"utils\").trim(n)),d=[];i=u.next();)\",\"==u.peek()?(d.push(u.current()),u.next(),u.eatSpace(),u.start=u.pos):\"(\"==i&&u.skipTo(\")\");return d.push(u.current()),(d=t.compact(t.map(d,l))).length?((o.test(d[0])||s.test(d[0]))&&(a=d.shift()),{type:\"linear\",direction:a,colorStops:t.map(d,c)}):null}(u),\"\"):n}),i},oldWebkitLinearGradient:function(e){if(t.isString(e)&&(e=this.parse(e)),!e)return null;var r=t.map(e.colorStops,t.clone);return t.each(r,function(e){if(\"position\"in e){if(!~e.position.indexOf(\".\")&&\"%\"!=e.unit)throw\"Can't convert color stop '\"+(e.position+(e.unit||\"\"))+\"'\";e.position=parseFloat(e.position)/(\"%\"==e.unit?100:1)}}),function(e){var r=0;t.each(e,function(n,i){if(!i)return n.position=n.position||0;if(i!=e.length-1||\"position\"in n||(n.position=1),\"position\"in n){var o=e[r].position||0,s=(n.position-o)/(i-r);t.each(e.slice(r,i),function(e,t){e.position=o+s*t}),r=i}})}(r),r=t.map(r,function(e,t){return e.position||t?1==e.position&&t==r.length-1?\"to(\"+e.color+\")\":\"color-stop(\"+e.position.toFixed(2).replace(/\\.?0+$/,\"\")+\", \"+e.color+\")\":\"from(\"+e.color+\")\"}),\"-webkit-gradient(linear, \"+u(e.direction)+\", \"+r.join(\", \")+\")\"},toString:function(e,n){if(\"linear\"==e.type){var i=(n?\"-\"+n+\"-\":\"\")+\"linear-gradient\",o=t.map(e.colorStops,function(e){return e.color+(\"position\"in e?\" \"+e.position+(e.unit||\"\"):\"\")});return!e.direction||a.get(\"css.gradient.omitDefaultDirection\")&&t.include(r,e.direction)||o.unshift(e.direction),i+\"(\"+o.join(\", \")+\")\"}}}}),emmet.exec(function(e,t){var r=e(\"handlerList\").create(),n=e(\"resources\");t.extend(n,{addGenerator:function(e,n,i){t.isString(e)&&(e=new RegExp(e)),r.add(function(t,r){var i;return(i=e.exec(t.name()))?n(i,t,r):null},i)}}),n.addResolver(function(e,n){return r.exec(null,t.toArray(arguments))})}),emmet.define(\"tagName\",function(e,t){var r={empty:[],blockLevel:\"address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,link,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul,h1,h2,h3,h4,h5,h6\".split(\",\"),inlineLevel:\"a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var\".split(\",\")},n={p:\"span\",ul:\"li\",ol:\"li\",table:\"tr\",tr:\"td\",tbody:\"tr\",thead:\"tr\",tfoot:\"tr\",colgroup:\"col\",select:\"option\",optgroup:\"option\",audio:\"source\",video:\"source\",object:\"param\",map:\"area\"};return{resolve:function(e){return(e=(e||\"\").toLowerCase())in n?this.getMapping(e):this.isInlineLevel(e)?\"span\":\"div\"},getMapping:function(e){return n[e.toLowerCase()]},isInlineLevel:function(e){return this.isTypeOf(e,\"inlineLevel\")},isBlockLevel:function(e){return this.isTypeOf(e,\"blockLevel\")},isEmptyElement:function(e){return this.isTypeOf(e,\"empty\")},isTypeOf:function(e,n){return t.include(r[n],e)},addMapping:function(e,t){n[e]=t},removeMapping:function(e){e in n&&delete n[e]},addElementToCollection:function(e,n){r[n]||(r[n]=[]);var i=this.getCollection(n);t.include(i,e)||i.push(e)},removeElementFromCollection:function(e,n){n in r&&(r[n]=t.without(this.getCollection(n),e))},getCollection:function(e){return r[e]}}}),emmet.exec(function(e,t){var r=e(\"preferences\");r.define(\"bem.elementSeparator\",\"__\",\"Class name’s element separator.\"),r.define(\"bem.modifierSeparator\",\"_\",\"Class name’s modifier separator.\"),r.define(\"bem.shortElementPrefix\",\"-\",\"Symbol for describing short “block-element” notation. Class names prefixed with this symbol will be treated as element name for parent‘s block name. Each symbol instance traverses one level up in parsed tree for block name lookup. Empty value will disable short notation.\");var n=!1;function i(){return{element:r.get(\"bem.elementSeparator\"),modifier:r.get(\"bem.modifierSeparator\")}}function o(n){if(e(\"abbreviationUtils\").isSnippet(n))return n;n.__bem={block:\"\",element:\"\",modifier:\"\"};var o=function(t){var n=e(\"utils\");t=(\" \"+(t||\"\")+\" \").replace(/\\s+/g,\" \");var o=r.get(\"bem.shortElementPrefix\");if(o){var s=new RegExp(\"\\\\s(\"+n.escapeForRegexp(o)+\"+)\",\"g\");t=t.replace(s,function(e,t){return\" \"+n.repeatString(i().element,t.length)})}return n.trim(t)}(n.attribute(\"class\")).split(\" \"),a=/^[a-z]\\-/i;return n.__bem.block=t.find(o,function(e){return a.test(e)}),n.__bem.block||(a=/^[a-z]/i,n.__bem.block=t.find(o,function(e){return a.test(e)})||\"\"),o=t.chain(o).map(function(e){return function(e,t){e=s(e,t,\"element\"),e=s(e,t,\"modifier\");var r=\"\",n=\"\",o=\"\",a=i();if(~e.indexOf(a.element)){var l=e.split(a.element),c=l[1].split(a.modifier);r=l[0],n=c.shift(),o=c.join(a.modifier)}else if(~e.indexOf(a.modifier)){var u=e.split(a.modifier);r=u.shift(),o=u.join(a.modifier)}if(r||n||o){r||(r=t.__bem.block);var d=r,g=[];return n?(d+=a.element+n,g.push(d)):g.push(d),o&&g.push(d+a.modifier+o),t.__bem.block=r,t.__bem.element=n,t.__bem.modifier=o,g}return e}(e,n)}).flatten().uniq().value().join(\" \"),o&&n.attribute(\"class\",o),n}function s(e,t,r){var n=i(),o=new RegExp(\"^(\"+n[r]+\")+\",\"g\");if(o.test(e)){for(var s=0,a=e.replace(o,function(e,t){return s=e.length/n[r].length,\"\"}),l=t;l.parent&&s--;)l=l.parent;if(l&&l.__bem||(l=t),l&&l.__bem){var c=l.__bem.block;return\"modifier\"==r&&l.__bem.element&&(c+=n.element+l.__bem.element),c+n[r]+a}}return e}function a(r,i){r.name&&o(r);var s=e(\"abbreviationUtils\");return t.each(r.children,function(e){a(e,i),!s.isSnippet(e)&&e.start&&(n=!0)}),r}e(\"filters\").add(\"bem\",function(t,r){return n=!1,t=a(t,r),n&&(t=e(\"filters\").apply(t,\"html\",r)),t})}),emmet.exec(function(e,t){var r=e(\"preferences\");function n(i,o,s){var a=e(\"abbreviationUtils\");return t.each(i.children,function(i){a.isBlock(i)&&function(n,i,o){var s=e(\"utils\"),a=r.get(\"filter.commentTrigger\");if(\"*\"!=a&&!t.find(a.split(\",\"),function(e){return!!n.attribute(s.trim(e))}))return;var l={node:n,name:n.name(),padding:n.parent?n.parent.padding:\"\",attr:function(e,t,r){var i=n.attribute(e);return i?(t||\"\")+i+(r||\"\"):\"\"}},c=s.normalizeNewline(i?i(l):\"\"),u=s.normalizeNewline(o?o(l):\"\");n.start=n.start.replace(/</,c+\"<\"),n.end=n.end.replace(/>/,\">\"+u)}(i,o,s),n(i,o,s)}),i}r.define(\"filter.commentAfter\",'\\n\\x3c!-- /<%= attr(\"id\", \"#\") %><%= attr(\"class\", \".\") %> --\\x3e',\"A definition of comment that should be placed <i>after</i> matched element when <code>comment</code> filter is applied. This definition is an ERB-style template passed to <code>_.template()</code> function (see Underscore.js docs for details). In template context, the following properties and functions are availabe:\\n<ul><li><code>attr(name, before, after)</code> – a function that outputsspecified attribute value concatenated with <code>before</code> and <code>after</code> strings. If attribute doesn't exists, the empty string will be returned.</li><li><code>node</code> – current node (instance of <code>AbbreviationNode</code>)</li><li><code>name</code> – name of current tag</li><li><code>padding</code> – current string padding, can be used for formatting</li></ul>\"),r.define(\"filter.commentBefore\",\"\",\"A definition of comment that should be placed <i>before</i> matched element when <code>comment</code> filter is applied. For more info, read description of <code>filter.commentAfter</code> property\"),r.define(\"filter.commentTrigger\",\"id, class\",\"A comma-separated list of attribute names that should exist in abbreviatoin where comment should be added. If you wish to add comment for every element, set this option to <code>*</code>\"),e(\"filters\").add(\"c\",function(e){return n(e,t.template(r.get(\"filter.commentBefore\")),t.template(r.get(\"filter.commentAfter\")))})}),emmet.exec(function(e,t){var r={\"<\":\"&lt;\",\">\":\"&gt;\",\"&\":\"&amp;\"};function n(e){return e.replace(/([<>&])/g,function(e,t){return r[t]})}e(\"filters\").add(\"e\",function e(r){return t.each(r.children,function(t){t.start=n(t.start),t.end=n(t.end),t.content=n(t.content),e(t)}),r})}),emmet.exec(function(e,t){var r=e(\"preferences\");function n(e){return e.parent&&!e.parent.parent&&!e.index()}function i(t,r){var n=e(\"abbreviationUtils\");return!(!0!==r.tag_nl&&!n.isBlock(t))||!(!t.parent||!r.inline_break)&&o(t.parent,r)}function o(r,n){var i=0,o=e(\"abbreviationUtils\");return!!t.find(r.children,function(e){if(e.isTextNode()||!o.isInline(e)?i=0:o.isInline(e)&&i++,i>=n.inline_break)return!0})}function s(s,a,l){s.start=s.end=\"%s\";var c,u=e(\"utils\"),d=e(\"abbreviationUtils\"),g=d.isUnary(s),h=u.getNewline(),m=(c=s,t.include(r.getArray(\"format.noIndentTags\")||[],c.name())?\"\":e(\"resources\").getVariable(\"indentation\"));if(!1!==a.tag_nl){var p=!0===a.tag_nl&&(a.tag_nl_leaf||s.children.length);p||(p=t.include(r.getArray(\"format.forceIndentationForTags\")||[],s.name())),s.isTextNode()||(i(s,a)?(n(s)||d.isSnippet(s.parent)&&!s.index()||(s.start=h+s.start),(d.hasBlockChildren(s)||function(e,t){return e.children.length&&i(e.children[0],t)}(s,a)||p&&!g)&&(s.end=h+s.end),(d.hasTagsInContent(s)||p&&!s.children.length&&!g)&&(s.start+=h+m)):d.isInline(s)&&function(t){return t.parent&&e(\"abbreviationUtils\").hasBlockChildren(t.parent)}(s)&&!n(s)?s.start=h+s.start:d.isInline(s)&&function(r,n){var i=e(\"abbreviationUtils\");return!!t.any(r.children,function(e){return!i.isSnippet(e)&&!i.isInline(e)})||o(r,n)}(s,a)&&(s.end=h+s.end),s.padding=m)}return s}r.define(\"format.noIndentTags\",\"html\",\"A comma-separated list of tag names that should not get inner indentation.\"),r.define(\"format.forceIndentationForTags\",\"body\",\"A comma-separated list of tag names that should <em>always</em> get inner indentation.\"),e(\"filters\").add(\"_format\",function r(o,a,l){l=l||0;var c=e(\"abbreviationUtils\");return t.each(o.children,function(t){c.isSnippet(t)?function(t,r){t.start=t.end=\"\",!n(t)&&!1!==r.tag_nl&&i(t,r)&&(!function(e){return!e.parent}(t.parent)&&e(\"abbreviationUtils\").isInline(t.parent)||(t.start=e(\"utils\").getNewline()+t.start))}(t,a):s(t,a),r(t,a,l+1)}),o})}),emmet.exec(function(e,t){function r(r,n){var i=\"\",o=[],s=n.attributeQuote(),a=n.cursor();return t.each(r.attributeList(),function(t){var r,l=n.attributeName(t.name);switch(l.toLowerCase()){case\"id\":i+=\"#\"+(t.value||a);break;case\"class\":i+=\".\"+(r=t.value||a,e(\"utils\").trim(r).replace(/\\s+/g,\".\"));break;default:o.push(\":\"+l+\" => \"+s+(t.value||a)+s)}}),o.length&&(i+=\"{\"+o.join(\", \")+\"}\"),i}e(\"filters\").add(\"haml\",function n(i,o,s){s=s||0;var a=e(\"abbreviationUtils\");return s||(i=e(\"filters\").apply(i,\"_format\",o)),t.each(i.children,function(t){a.isSnippet(t)||function(t,n){if(!t.parent)return t;var i,o=e(\"abbreviationUtils\"),s=e(\"utils\"),a=r(t,n),l=n.cursor(),c=o.isUnary(t),u=n.self_closing_tag&&c?\"/\":\"\",d=\"%\"+n.tagName(t.name());\"%div\"==d.toLowerCase()&&a&&-1==a.indexOf(\"{\")&&(d=\"\"),t.end=\"\",i=d+a+u+\" \",t.start=s.replaceSubstring(t.start,i,t.start.indexOf(\"%s\"),\"%s\"),t.children.length||c||(t.start+=l)}(t,o),n(t,o,s+1)}),i})}),emmet.exec(function(e,t){function r(r,n,i){if(!r.parent)return r;var o=e(\"abbreviationUtils\"),s=e(\"utils\"),a=function(e,r){var n=r.attributeQuote(),i=r.cursor();return t.map(e.attributeList(),function(e){return\" \"+r.attributeName(e.name)+\"=\"+n+(e.value||i)+n}).join(\"\")}(r,n),l=n.cursor(),c=o.isUnary(r),u=\"\",d=\"\";if(!r.isTextNode()){var g=n.tagName(r.name());c?(u=\"<\"+g+a+n.selfClosing()+\">\",r.end=\"\"):(u=\"<\"+g+a+\">\",d=\"</\"+g+\">\")}var h=\"%s\";return r.start=s.replaceSubstring(r.start,u,r.start.indexOf(h),h),r.end=s.replaceSubstring(r.end,d,r.end.indexOf(h),h),r.children.length||c||~r.content.indexOf(l)||e(\"tabStops\").extract(r.content).tabstops.length||(r.start+=l),r}e(\"filters\").add(\"html\",function n(i,o,s){s=s||0;var a=e(\"abbreviationUtils\");return s||(i=e(\"filters\").apply(i,\"_format\",o)),t.each(i.children,function(e){a.isSnippet(e)||r(e,o),n(e,o,s+1)}),i})}),emmet.exec(function(e,t){var r=/^\\s+/,n=/[\\n\\r]/g;e(\"filters\").add(\"s\",function i(o,s,a){var l=e(\"abbreviationUtils\");return t.each(o.children,function(e){l.isSnippet(e)||(e.start=e.start.replace(r,\"\"),e.end=e.end.replace(r,\"\")),e.start=e.start.replace(n,\"\"),e.end=e.end.replace(n,\"\"),e.content=e.content.replace(n,\"\"),i(e)}),o})}),emmet.exec(function(e,t){function r(e,n){return t.each(e.children,function(e){e.content&&(e.content=e.content.replace(n,\"\")),r(e,n)}),e}e(\"preferences\").define(\"filter.trimRegexp\",\"[\\\\s|\\\\u00a0]*[\\\\d|#|\\\\-|*|\\\\u2022]+\\\\.?\\\\s*\",\"Regular expression used to remove list markers (numbers, dashes, bullets, etc.) in <code>t</code> (trim) filter. The trim filter is useful for wrapping with abbreviation lists, pased from other documents (for example, Word documents).\"),e(\"filters\").add(\"t\",function(t){return r(t,new RegExp(e(\"preferences\").get(\"filter.trimRegexp\")))})}),emmet.exec(function(e,t){var r={\"xsl:variable\":1,\"xsl:with-param\":1};e(\"filters\").add(\"xsl\",function n(i){var o=e(\"abbreviationUtils\");return t.each(i.children,function(e){var t;!o.isSnippet(e)&&(e.name()||\"\").toLowerCase()in r&&e.children.length&&((t=e).start=t.start.replace(/\\s+select\\s*=\\s*(['\"]).*?\\1/,\"\")),n(e)}),i})}),emmet.define(\"lorem\",function(e,t){var r={en:{common:[\"lorem\",\"ipsum\",\"dolor\",\"sit\",\"amet\",\"consectetur\",\"adipisicing\",\"elit\"],words:[\"exercitationem\",\"perferendis\",\"perspiciatis\",\"laborum\",\"eveniet\",\"sunt\",\"iure\",\"nam\",\"nobis\",\"eum\",\"cum\",\"officiis\",\"excepturi\",\"odio\",\"consectetur\",\"quasi\",\"aut\",\"quisquam\",\"vel\",\"eligendi\",\"itaque\",\"non\",\"odit\",\"tempore\",\"quaerat\",\"dignissimos\",\"facilis\",\"neque\",\"nihil\",\"expedita\",\"vitae\",\"vero\",\"ipsum\",\"nisi\",\"animi\",\"cumque\",\"pariatur\",\"velit\",\"modi\",\"natus\",\"iusto\",\"eaque\",\"sequi\",\"illo\",\"sed\",\"ex\",\"et\",\"voluptatibus\",\"tempora\",\"veritatis\",\"ratione\",\"assumenda\",\"incidunt\",\"nostrum\",\"placeat\",\"aliquid\",\"fuga\",\"provident\",\"praesentium\",\"rem\",\"necessitatibus\",\"suscipit\",\"adipisci\",\"quidem\",\"possimus\",\"voluptas\",\"debitis\",\"sint\",\"accusantium\",\"unde\",\"sapiente\",\"voluptate\",\"qui\",\"aspernatur\",\"laudantium\",\"soluta\",\"amet\",\"quo\",\"aliquam\",\"saepe\",\"culpa\",\"libero\",\"ipsa\",\"dicta\",\"reiciendis\",\"nesciunt\",\"doloribus\",\"autem\",\"impedit\",\"minima\",\"maiores\",\"repudiandae\",\"ipsam\",\"obcaecati\",\"ullam\",\"enim\",\"totam\",\"delectus\",\"ducimus\",\"quis\",\"voluptates\",\"dolores\",\"molestiae\",\"harum\",\"dolorem\",\"quia\",\"voluptatem\",\"molestias\",\"magni\",\"distinctio\",\"omnis\",\"illum\",\"dolorum\",\"voluptatum\",\"ea\",\"quas\",\"quam\",\"corporis\",\"quae\",\"blanditiis\",\"atque\",\"deserunt\",\"laboriosam\",\"earum\",\"consequuntur\",\"hic\",\"cupiditate\",\"quibusdam\",\"accusamus\",\"ut\",\"rerum\",\"error\",\"minus\",\"eius\",\"ab\",\"ad\",\"nemo\",\"fugit\",\"officia\",\"at\",\"in\",\"id\",\"quos\",\"reprehenderit\",\"numquam\",\"iste\",\"fugiat\",\"sit\",\"inventore\",\"beatae\",\"repellendus\",\"magnam\",\"recusandae\",\"quod\",\"explicabo\",\"doloremque\",\"aperiam\",\"consequatur\",\"asperiores\",\"commodi\",\"optio\",\"dolor\",\"labore\",\"temporibus\",\"repellat\",\"veniam\",\"architecto\",\"est\",\"esse\",\"mollitia\",\"nulla\",\"a\",\"similique\",\"eos\",\"alias\",\"dolore\",\"tenetur\",\"deleniti\",\"porro\",\"facere\",\"maxime\",\"corrupti\"]},ru:{common:[\"далеко-далеко\",\"за\",\"словесными\",\"горами\",\"в стране\",\"гласных\",\"и согласных\",\"живут\",\"рыбные\",\"тексты\"],words:[\"вдали\",\"от всех\",\"они\",\"буквенных\",\"домах\",\"на берегу\",\"семантика\",\"большого\",\"языкового\",\"океана\",\"маленький\",\"ручеек\",\"даль\",\"журчит\",\"по всей\",\"обеспечивает\",\"ее\",\"всеми\",\"необходимыми\",\"правилами\",\"эта\",\"парадигматическая\",\"страна\",\"которой\",\"жаренные\",\"предложения\",\"залетают\",\"прямо\",\"рот\",\"даже\",\"всемогущая\",\"пунктуация\",\"не\",\"имеет\",\"власти\",\"над\",\"рыбными\",\"текстами\",\"ведущими\",\"безорфографичный\",\"образ\",\"жизни\",\"однажды\",\"одна\",\"маленькая\",\"строчка\",\"рыбного\",\"текста\",\"имени\",\"lorem\",\"ipsum\",\"решила\",\"выйти\",\"большой\",\"мир\",\"грамматики\",\"великий\",\"оксмокс\",\"предупреждал\",\"о\",\"злых\",\"запятых\",\"диких\",\"знаках\",\"вопроса\",\"коварных\",\"точках\",\"запятой\",\"но\",\"текст\",\"дал\",\"сбить\",\"себя\",\"толку\",\"он\",\"собрал\",\"семь\",\"своих\",\"заглавных\",\"букв\",\"подпоясал\",\"инициал\",\"за\",\"пояс\",\"пустился\",\"дорогу\",\"взобравшись\",\"первую\",\"вершину\",\"курсивных\",\"гор\",\"бросил\",\"последний\",\"взгляд\",\"назад\",\"силуэт\",\"своего\",\"родного\",\"города\",\"буквоград\",\"заголовок\",\"деревни\",\"алфавит\",\"подзаголовок\",\"своего\",\"переулка\",\"грустный\",\"реторический\",\"вопрос\",\"скатился\",\"его\",\"щеке\",\"продолжил\",\"свой\",\"путь\",\"дороге\",\"встретил\",\"рукопись\",\"она\",\"предупредила\",\"моей\",\"все\",\"переписывается\",\"несколько\",\"раз\",\"единственное\",\"что\",\"меня\",\"осталось\",\"это\",\"приставка\",\"возвращайся\",\"ты\",\"лучше\",\"свою\",\"безопасную\",\"страну\",\"послушавшись\",\"рукописи\",\"наш\",\"продолжил\",\"свой\",\"путь\",\"вскоре\",\"ему\",\"повстречался\",\"коварный\",\"составитель\",\"рекламных\",\"текстов\",\"напоивший\",\"языком\",\"речью\",\"заманивший\",\"свое\",\"агенство\",\"которое\",\"использовало\",\"снова\",\"снова\",\"своих\",\"проектах\",\"если\",\"переписали\",\"то\",\"живет\",\"там\",\"до\",\"сих\",\"пор\"]}},n=e(\"preferences\");function i(e,t){return Math.round(Math.random()*(t-e)+e)}function o(e,r){for(var n=e.length,o=Math.min(n,r),s=[];s.length<o;){var a=i(0,n-1);t.include(s,a)||s.push(a)}return t.map(s,function(t){return e[t]})}function s(e,r){return e.length&&(e[0]=e[0].charAt(0).toUpperCase()+e[0].substring(1)),e.join(\" \")+(r||(n=\"?!...\",t.isString(n)?n.charAt(i(0,n.length-1)):n[i(0,n.length-1)]));var n}function a(e){var r=e.length,n=0;n=r>3&&r<=6?i(0,1):r>6&&r<=12?i(0,2):i(1,4),t.each(t.range(n),function(t){t<e.length-1&&(e[t]+=\",\")})}return n.define(\"lorem.defaultLang\",\"en\"),e(\"abbreviationParser\").addPreprocessor(function(e,t){var l,c=/^(?:lorem|lipsum)([a-z]{2})?(\\d*)$/i;e.findAll(function(e){if(e._name&&(l=e._name.match(c))){var t=l[2]||30,u=l[1]||n.get(\"lorem.defaultLang\")||\"en\";e._name=\"\",e.data(\"forceNameResolving\",e.isRepeating()||e.attributeList().length),e.data(\"pasteOverwrites\",!0),e.data(\"paste\",function(e,n){return function(e,t,n){var l=r[e];if(!l)return\"\";var c,u=[],d=0;t=parseInt(t,10),n&&l.common&&((c=l.common.slice(0,t)).length>5&&(c[4]+=\",\"),d+=c.length,u.push(s(c,\".\")));for(;d<t;)d+=(c=o(l.words,Math.min(i(3,12)*i(1,5),t-d))).length,a(c),u.push(s(c));return u.join(\" \")}(u,t,!e)})}})}),{addLang:function(e,n){t.isString(n)?n={words:t.compact(n.split(\" \"))}:t.isArray(n)&&(n={words:n}),r[e]=n}}}),emmet.define(\"bootstrap\",function(e,t){var r=e(\"resources\"),n=r.getVocabulary(\"user\")||{};r.setVocabulary(e(\"utils\").deepMerge(n,{variables:{lang:\"en\",locale:\"en-US\",charset:\"UTF-8\",indentation:\"\\t\",newline:\"\\n\"},css:{filters:\"html\",snippets:{\"@i\":\"@import url(|);\",\"@import\":\"@import url(|);\",\"@m\":\"@media ${1:screen} {\\n\\t|\\n}\",\"@media\":\"@media ${1:screen} {\\n\\t|\\n}\",\"@f\":\"@font-face {\\n\\tfont-family:|;\\n\\tsrc:url(|);\\n}\",\"@f+\":\"@font-face {\\n\\tfont-family: '${1:FontName}';\\n\\tsrc: url('${2:FileName}.eot');\\n\\tsrc: url('${2:FileName}.eot?#iefix') format('embedded-opentype'),\\n\\t\\t url('${2:FileName}.woff') format('woff'),\\n\\t\\t url('${2:FileName}.ttf') format('truetype'),\\n\\t\\t url('${2:FileName}.svg#${1:FontName}') format('svg');\\n\\tfont-style: ${3:normal};\\n\\tfont-weight: ${4:normal};\\n}\",\"@kf\":\"@-webkit-keyframes ${1:identifier} {\\n\\t${2:from} { ${3} }${6}\\n\\t${4:to} { ${5} }\\n}\\n@-o-keyframes ${1:identifier} {\\n\\t${2:from} { ${3} }${6}\\n\\t${4:to} { ${5} }\\n}\\n@-moz-keyframes ${1:identifier} {\\n\\t${2:from} { ${3} }${6}\\n\\t${4:to} { ${5} }\\n}\\n@keyframes ${1:identifier} {\\n\\t${2:from} { ${3} }${6}\\n\\t${4:to} { ${5} }\\n}\",anim:\"animation:|;\",\"anim-\":\"animation:${1:name} ${2:duration} ${3:timing-function} ${4:delay} ${5:iteration-count} ${6:direction} ${7:fill-mode};\",animdel:\"animation-delay:${1:time};\",animdir:\"animation-direction:${1:normal};\",\"animdir:n\":\"animation-direction:normal;\",\"animdir:r\":\"animation-direction:reverse;\",\"animdir:a\":\"animation-direction:alternate;\",\"animdir:ar\":\"animation-direction:alternate-reverse;\",animdur:\"animation-duration:${1:0}s;\",animfm:\"animation-fill-mode:${1:both};\",\"animfm:f\":\"animation-fill-mode:forwards;\",\"animfm:b\":\"animation-fill-mode:backwards;\",\"animfm:bt\":\"animation-fill-mode:both;\",\"animfm:bh\":\"animation-fill-mode:both;\",animic:\"animation-iteration-count:${1:1};\",\"animic:i\":\"animation-iteration-count:infinite;\",animn:\"animation-name:${1:none};\",animps:\"animation-play-state:${1:running};\",\"animps:p\":\"animation-play-state:paused;\",\"animps:r\":\"animation-play-state:running;\",animtf:\"animation-timing-function:${1:linear};\",\"animtf:e\":\"animation-timing-function:ease;\",\"animtf:ei\":\"animation-timing-function:ease-in;\",\"animtf:eo\":\"animation-timing-function:ease-out;\",\"animtf:eio\":\"animation-timing-function:ease-in-out;\",\"animtf:l\":\"animation-timing-function:linear;\",\"animtf:cb\":\"animation-timing-function:cubic-bezier(${1:0.1}, ${2:0.7}, ${3:1.0}, ${3:0.1});\",ap:\"appearance:${none};\",\"!\":\"!important\",pos:\"position:${1:relative};\",\"pos:s\":\"position:static;\",\"pos:a\":\"position:absolute;\",\"pos:r\":\"position:relative;\",\"pos:f\":\"position:fixed;\",t:\"top:|;\",\"t:a\":\"top:auto;\",r:\"right:|;\",\"r:a\":\"right:auto;\",b:\"bottom:|;\",\"b:a\":\"bottom:auto;\",l:\"left:|;\",\"l:a\":\"left:auto;\",z:\"z-index:|;\",\"z:a\":\"z-index:auto;\",fl:\"float:${1:left};\",\"fl:n\":\"float:none;\",\"fl:l\":\"float:left;\",\"fl:r\":\"float:right;\",cl:\"clear:${1:both};\",\"cl:n\":\"clear:none;\",\"cl:l\":\"clear:left;\",\"cl:r\":\"clear:right;\",\"cl:b\":\"clear:both;\",colm:\"columns:|;\",colmc:\"column-count:|;\",colmf:\"column-fill:|;\",colmg:\"column-gap:|;\",colmr:\"column-rule:|;\",colmrc:\"column-rule-color:|;\",colmrs:\"column-rule-style:|;\",colmrw:\"column-rule-width:|;\",colms:\"column-span:|;\",colmw:\"column-width:|;\",d:\"display:${1:block};\",\"d:n\":\"display:none;\",\"d:b\":\"display:block;\",\"d:i\":\"display:inline;\",\"d:ib\":\"display:inline-block;\",\"d:ib+\":\"display: inline-block;\\n*display: inline;\\n*zoom: 1;\",\"d:li\":\"display:list-item;\",\"d:ri\":\"display:run-in;\",\"d:cp\":\"display:compact;\",\"d:tb\":\"display:table;\",\"d:itb\":\"display:inline-table;\",\"d:tbcp\":\"display:table-caption;\",\"d:tbcl\":\"display:table-column;\",\"d:tbclg\":\"display:table-column-group;\",\"d:tbhg\":\"display:table-header-group;\",\"d:tbfg\":\"display:table-footer-group;\",\"d:tbr\":\"display:table-row;\",\"d:tbrg\":\"display:table-row-group;\",\"d:tbc\":\"display:table-cell;\",\"d:rb\":\"display:ruby;\",\"d:rbb\":\"display:ruby-base;\",\"d:rbbg\":\"display:ruby-base-group;\",\"d:rbt\":\"display:ruby-text;\",\"d:rbtg\":\"display:ruby-text-group;\",v:\"visibility:${1:hidden};\",\"v:v\":\"visibility:visible;\",\"v:h\":\"visibility:hidden;\",\"v:c\":\"visibility:collapse;\",ov:\"overflow:${1:hidden};\",\"ov:v\":\"overflow:visible;\",\"ov:h\":\"overflow:hidden;\",\"ov:s\":\"overflow:scroll;\",\"ov:a\":\"overflow:auto;\",ovx:\"overflow-x:${1:hidden};\",\"ovx:v\":\"overflow-x:visible;\",\"ovx:h\":\"overflow-x:hidden;\",\"ovx:s\":\"overflow-x:scroll;\",\"ovx:a\":\"overflow-x:auto;\",ovy:\"overflow-y:${1:hidden};\",\"ovy:v\":\"overflow-y:visible;\",\"ovy:h\":\"overflow-y:hidden;\",\"ovy:s\":\"overflow-y:scroll;\",\"ovy:a\":\"overflow-y:auto;\",ovs:\"overflow-style:${1:scrollbar};\",\"ovs:a\":\"overflow-style:auto;\",\"ovs:s\":\"overflow-style:scrollbar;\",\"ovs:p\":\"overflow-style:panner;\",\"ovs:m\":\"overflow-style:move;\",\"ovs:mq\":\"overflow-style:marquee;\",zoo:\"zoom:1;\",zm:\"zoom:1;\",cp:\"clip:|;\",\"cp:a\":\"clip:auto;\",\"cp:r\":\"clip:rect(${1:top} ${2:right} ${3:bottom} ${4:left});\",bxz:\"box-sizing:${1:border-box};\",\"bxz:cb\":\"box-sizing:content-box;\",\"bxz:bb\":\"box-sizing:border-box;\",bxsh:\"box-shadow:${1:inset }${2:hoff} ${3:voff} ${4:blur} ${5:color};\",\"bxsh:r\":\"box-shadow:${1:inset }${2:hoff} ${3:voff} ${4:blur} ${5:spread }rgb(${6:0}, ${7:0}, ${8:0});\",\"bxsh:ra\":\"box-shadow:${1:inset }${2:h} ${3:v} ${4:blur} ${5:spread }rgba(${6:0}, ${7:0}, ${8:0}, .${9:5});\",\"bxsh:n\":\"box-shadow:none;\",m:\"margin:|;\",\"m:a\":\"margin:auto;\",mt:\"margin-top:|;\",\"mt:a\":\"margin-top:auto;\",mr:\"margin-right:|;\",\"mr:a\":\"margin-right:auto;\",mb:\"margin-bottom:|;\",\"mb:a\":\"margin-bottom:auto;\",ml:\"margin-left:|;\",\"ml:a\":\"margin-left:auto;\",p:\"padding:|;\",pt:\"padding-top:|;\",pr:\"padding-right:|;\",pb:\"padding-bottom:|;\",pl:\"padding-left:|;\",w:\"width:|;\",\"w:a\":\"width:auto;\",h:\"height:|;\",\"h:a\":\"height:auto;\",maw:\"max-width:|;\",\"maw:n\":\"max-width:none;\",mah:\"max-height:|;\",\"mah:n\":\"max-height:none;\",miw:\"min-width:|;\",mih:\"min-height:|;\",mar:\"max-resolution:${1:res};\",mir:\"min-resolution:${1:res};\",ori:\"orientation:|;\",\"ori:l\":\"orientation:landscape;\",\"ori:p\":\"orientation:portrait;\",ol:\"outline:|;\",\"ol:n\":\"outline:none;\",olo:\"outline-offset:|;\",olw:\"outline-width:|;\",\"olw:tn\":\"outline-width:thin;\",\"olw:m\":\"outline-width:medium;\",\"olw:tc\":\"outline-width:thick;\",ols:\"outline-style:|;\",\"ols:n\":\"outline-style:none;\",\"ols:dt\":\"outline-style:dotted;\",\"ols:ds\":\"outline-style:dashed;\",\"ols:s\":\"outline-style:solid;\",\"ols:db\":\"outline-style:double;\",\"ols:g\":\"outline-style:groove;\",\"ols:r\":\"outline-style:ridge;\",\"ols:i\":\"outline-style:inset;\",\"ols:o\":\"outline-style:outset;\",olc:\"outline-color:#${1:000};\",\"olc:i\":\"outline-color:invert;\",bd:\"border:|;\",\"bd+\":\"border:${1:1px} ${2:solid} ${3:#000};\",\"bd:n\":\"border:none;\",bdbk:\"border-break:${1:close};\",\"bdbk:c\":\"border-break:close;\",bdcl:\"border-collapse:|;\",\"bdcl:c\":\"border-collapse:collapse;\",\"bdcl:s\":\"border-collapse:separate;\",bdc:\"border-color:#${1:000};\",\"bdc:t\":\"border-color:transparent;\",bdi:\"border-image:url(|);\",\"bdi:n\":\"border-image:none;\",bdti:\"border-top-image:url(|);\",\"bdti:n\":\"border-top-image:none;\",bdri:\"border-right-image:url(|);\",\"bdri:n\":\"border-right-image:none;\",bdbi:\"border-bottom-image:url(|);\",\"bdbi:n\":\"border-bottom-image:none;\",bdli:\"border-left-image:url(|);\",\"bdli:n\":\"border-left-image:none;\",bdci:\"border-corner-image:url(|);\",\"bdci:n\":\"border-corner-image:none;\",\"bdci:c\":\"border-corner-image:continue;\",bdtli:\"border-top-left-image:url(|);\",\"bdtli:n\":\"border-top-left-image:none;\",\"bdtli:c\":\"border-top-left-image:continue;\",bdtri:\"border-top-right-image:url(|);\",\"bdtri:n\":\"border-top-right-image:none;\",\"bdtri:c\":\"border-top-right-image:continue;\",bdbri:\"border-bottom-right-image:url(|);\",\"bdbri:n\":\"border-bottom-right-image:none;\",\"bdbri:c\":\"border-bottom-right-image:continue;\",bdbli:\"border-bottom-left-image:url(|);\",\"bdbli:n\":\"border-bottom-left-image:none;\",\"bdbli:c\":\"border-bottom-left-image:continue;\",bdf:\"border-fit:${1:repeat};\",\"bdf:c\":\"border-fit:clip;\",\"bdf:r\":\"border-fit:repeat;\",\"bdf:sc\":\"border-fit:scale;\",\"bdf:st\":\"border-fit:stretch;\",\"bdf:ow\":\"border-fit:overwrite;\",\"bdf:of\":\"border-fit:overflow;\",\"bdf:sp\":\"border-fit:space;\",bdlen:\"border-length:|;\",\"bdlen:a\":\"border-length:auto;\",bdsp:\"border-spacing:|;\",bds:\"border-style:|;\",\"bds:n\":\"border-style:none;\",\"bds:h\":\"border-style:hidden;\",\"bds:dt\":\"border-style:dotted;\",\"bds:ds\":\"border-style:dashed;\",\"bds:s\":\"border-style:solid;\",\"bds:db\":\"border-style:double;\",\"bds:dtds\":\"border-style:dot-dash;\",\"bds:dtdtds\":\"border-style:dot-dot-dash;\",\"bds:w\":\"border-style:wave;\",\"bds:g\":\"border-style:groove;\",\"bds:r\":\"border-style:ridge;\",\"bds:i\":\"border-style:inset;\",\"bds:o\":\"border-style:outset;\",bdw:\"border-width:|;\",bdtw:\"border-top-width:|;\",bdrw:\"border-right-width:|;\",bdbw:\"border-bottom-width:|;\",bdlw:\"border-left-width:|;\",bdt:\"border-top:|;\",bt:\"border-top:|;\",\"bdt+\":\"border-top:${1:1px} ${2:solid} ${3:#000};\",\"bdt:n\":\"border-top:none;\",bdts:\"border-top-style:|;\",\"bdts:n\":\"border-top-style:none;\",bdtc:\"border-top-color:#${1:000};\",\"bdtc:t\":\"border-top-color:transparent;\",bdr:\"border-right:|;\",br:\"border-right:|;\",\"bdr+\":\"border-right:${1:1px} ${2:solid} ${3:#000};\",\"bdr:n\":\"border-right:none;\",bdrst:\"border-right-style:|;\",\"bdrst:n\":\"border-right-style:none;\",bdrc:\"border-right-color:#${1:000};\",\"bdrc:t\":\"border-right-color:transparent;\",bdb:\"border-bottom:|;\",bb:\"border-bottom:|;\",\"bdb+\":\"border-bottom:${1:1px} ${2:solid} ${3:#000};\",\"bdb:n\":\"border-bottom:none;\",bdbs:\"border-bottom-style:|;\",\"bdbs:n\":\"border-bottom-style:none;\",bdbc:\"border-bottom-color:#${1:000};\",\"bdbc:t\":\"border-bottom-color:transparent;\",bdl:\"border-left:|;\",bl:\"border-left:|;\",\"bdl+\":\"border-left:${1:1px} ${2:solid} ${3:#000};\",\"bdl:n\":\"border-left:none;\",bdls:\"border-left-style:|;\",\"bdls:n\":\"border-left-style:none;\",bdlc:\"border-left-color:#${1:000};\",\"bdlc:t\":\"border-left-color:transparent;\",bdrs:\"border-radius:|;\",bdtrrs:\"border-top-right-radius:|;\",bdtlrs:\"border-top-left-radius:|;\",bdbrrs:\"border-bottom-right-radius:|;\",bdblrs:\"border-bottom-left-radius:|;\",bg:\"background:#${1:000};\",\"bg+\":\"background:${1:#fff} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\",\"bg:n\":\"background:none;\",\"bg:ie\":\"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1:x}.png',sizingMethod='${2:crop}');\",bgc:\"background-color:#${1:fff};\",\"bgc:t\":\"background-color:transparent;\",bgi:\"background-image:url(|);\",\"bgi:n\":\"background-image:none;\",bgr:\"background-repeat:|;\",\"bgr:n\":\"background-repeat:no-repeat;\",\"bgr:x\":\"background-repeat:repeat-x;\",\"bgr:y\":\"background-repeat:repeat-y;\",\"bgr:sp\":\"background-repeat:space;\",\"bgr:rd\":\"background-repeat:round;\",bga:\"background-attachment:|;\",\"bga:f\":\"background-attachment:fixed;\",\"bga:s\":\"background-attachment:scroll;\",bgp:\"background-position:${1:0} ${2:0};\",bgpx:\"background-position-x:|;\",bgpy:\"background-position-y:|;\",bgbk:\"background-break:|;\",\"bgbk:bb\":\"background-break:bounding-box;\",\"bgbk:eb\":\"background-break:each-box;\",\"bgbk:c\":\"background-break:continuous;\",bgcp:\"background-clip:${1:padding-box};\",\"bgcp:bb\":\"background-clip:border-box;\",\"bgcp:pb\":\"background-clip:padding-box;\",\"bgcp:cb\":\"background-clip:content-box;\",\"bgcp:nc\":\"background-clip:no-clip;\",bgo:\"background-origin:|;\",\"bgo:pb\":\"background-origin:padding-box;\",\"bgo:bb\":\"background-origin:border-box;\",\"bgo:cb\":\"background-origin:content-box;\",bgsz:\"background-size:|;\",\"bgsz:a\":\"background-size:auto;\",\"bgsz:ct\":\"background-size:contain;\",\"bgsz:cv\":\"background-size:cover;\",c:\"color:#${1:000};\",\"c:r\":\"color:rgb(${1:0}, ${2:0}, ${3:0});\",\"c:ra\":\"color:rgba(${1:0}, ${2:0}, ${3:0}, .${4:5});\",cm:\"/* |${child} */\",cnt:\"content:'|';\",\"cnt:n\":\"content:normal;\",\"cnt:oq\":\"content:open-quote;\",\"cnt:noq\":\"content:no-open-quote;\",\"cnt:cq\":\"content:close-quote;\",\"cnt:ncq\":\"content:no-close-quote;\",\"cnt:a\":\"content:attr(|);\",\"cnt:c\":\"content:counter(|);\",\"cnt:cs\":\"content:counters(|);\",tbl:\"table-layout:|;\",\"tbl:a\":\"table-layout:auto;\",\"tbl:f\":\"table-layout:fixed;\",cps:\"caption-side:|;\",\"cps:t\":\"caption-side:top;\",\"cps:b\":\"caption-side:bottom;\",ec:\"empty-cells:|;\",\"ec:s\":\"empty-cells:show;\",\"ec:h\":\"empty-cells:hide;\",lis:\"list-style:|;\",\"lis:n\":\"list-style:none;\",lisp:\"list-style-position:|;\",\"lisp:i\":\"list-style-position:inside;\",\"lisp:o\":\"list-style-position:outside;\",list:\"list-style-type:|;\",\"list:n\":\"list-style-type:none;\",\"list:d\":\"list-style-type:disc;\",\"list:c\":\"list-style-type:circle;\",\"list:s\":\"list-style-type:square;\",\"list:dc\":\"list-style-type:decimal;\",\"list:dclz\":\"list-style-type:decimal-leading-zero;\",\"list:lr\":\"list-style-type:lower-roman;\",\"list:ur\":\"list-style-type:upper-roman;\",lisi:\"list-style-image:|;\",\"lisi:n\":\"list-style-image:none;\",q:\"quotes:|;\",\"q:n\":\"quotes:none;\",\"q:ru\":\"quotes:'\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C';\",\"q:en\":\"quotes:'\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019';\",ct:\"content:|;\",\"ct:n\":\"content:normal;\",\"ct:oq\":\"content:open-quote;\",\"ct:noq\":\"content:no-open-quote;\",\"ct:cq\":\"content:close-quote;\",\"ct:ncq\":\"content:no-close-quote;\",\"ct:a\":\"content:attr(|);\",\"ct:c\":\"content:counter(|);\",\"ct:cs\":\"content:counters(|);\",coi:\"counter-increment:|;\",cor:\"counter-reset:|;\",va:\"vertical-align:${1:top};\",\"va:sup\":\"vertical-align:super;\",\"va:t\":\"vertical-align:top;\",\"va:tt\":\"vertical-align:text-top;\",\"va:m\":\"vertical-align:middle;\",\"va:bl\":\"vertical-align:baseline;\",\"va:b\":\"vertical-align:bottom;\",\"va:tb\":\"vertical-align:text-bottom;\",\"va:sub\":\"vertical-align:sub;\",ta:\"text-align:${1:left};\",\"ta:l\":\"text-align:left;\",\"ta:c\":\"text-align:center;\",\"ta:r\":\"text-align:right;\",\"ta:j\":\"text-align:justify;\",\"ta-lst\":\"text-align-last:|;\",\"tal:a\":\"text-align-last:auto;\",\"tal:l\":\"text-align-last:left;\",\"tal:c\":\"text-align-last:center;\",\"tal:r\":\"text-align-last:right;\",td:\"text-decoration:${1:none};\",\"td:n\":\"text-decoration:none;\",\"td:u\":\"text-decoration:underline;\",\"td:o\":\"text-decoration:overline;\",\"td:l\":\"text-decoration:line-through;\",te:\"text-emphasis:|;\",\"te:n\":\"text-emphasis:none;\",\"te:ac\":\"text-emphasis:accent;\",\"te:dt\":\"text-emphasis:dot;\",\"te:c\":\"text-emphasis:circle;\",\"te:ds\":\"text-emphasis:disc;\",\"te:b\":\"text-emphasis:before;\",\"te:a\":\"text-emphasis:after;\",th:\"text-height:|;\",\"th:a\":\"text-height:auto;\",\"th:f\":\"text-height:font-size;\",\"th:t\":\"text-height:text-size;\",\"th:m\":\"text-height:max-size;\",ti:\"text-indent:|;\",\"ti:-\":\"text-indent:-9999px;\",tj:\"text-justify:|;\",\"tj:a\":\"text-justify:auto;\",\"tj:iw\":\"text-justify:inter-word;\",\"tj:ii\":\"text-justify:inter-ideograph;\",\"tj:ic\":\"text-justify:inter-cluster;\",\"tj:d\":\"text-justify:distribute;\",\"tj:k\":\"text-justify:kashida;\",\"tj:t\":\"text-justify:tibetan;\",tov:\"text-overflow:${ellipsis};\",\"tov:e\":\"text-overflow:ellipsis;\",\"tov:c\":\"text-overflow:clip;\",to:\"text-outline:|;\",\"to+\":\"text-outline:${1:0} ${2:0} ${3:#000};\",\"to:n\":\"text-outline:none;\",tr:\"text-replace:|;\",\"tr:n\":\"text-replace:none;\",tt:\"text-transform:${1:uppercase};\",\"tt:n\":\"text-transform:none;\",\"tt:c\":\"text-transform:capitalize;\",\"tt:u\":\"text-transform:uppercase;\",\"tt:l\":\"text-transform:lowercase;\",tw:\"text-wrap:|;\",\"tw:n\":\"text-wrap:normal;\",\"tw:no\":\"text-wrap:none;\",\"tw:u\":\"text-wrap:unrestricted;\",\"tw:s\":\"text-wrap:suppress;\",tsh:\"text-shadow:${1:hoff} ${2:voff} ${3:blur} ${4:#000};\",\"tsh:r\":\"text-shadow:${1:h} ${2:v} ${3:blur} rgb(${4:0}, ${5:0}, ${6:0});\",\"tsh:ra\":\"text-shadow:${1:h} ${2:v} ${3:blur} rgba(${4:0}, ${5:0}, ${6:0}, .${7:5});\",\"tsh+\":\"text-shadow:${1:0} ${2:0} ${3:0} ${4:#000};\",\"tsh:n\":\"text-shadow:none;\",trf:\"transform:|;\",\"trf:skx\":\"transform: skewX(${1:angle});\",\"trf:sky\":\"transform: skewY(${1:angle});\",\"trf:sc\":\"transform: scale(${1:x}, ${2:y});\",\"trf:scx\":\"transform: scaleX(${1:x});\",\"trf:scy\":\"transform: scaleY(${1:y});\",\"trf:r\":\"transform: rotate(${1:angle});\",\"trf:t\":\"transform: translate(${1:x}, ${2:y});\",\"trf:tx\":\"transform: translateX(${1:x});\",\"trf:ty\":\"transform: translateY(${1:y});\",trfo:\"transform-origin:|;\",trfs:\"transform-style:${1:preserve-3d};\",trs:\"transition:${1:prop} ${2:time};\",trsde:\"transition-delay:${1:time};\",trsdu:\"transition-duration:${1:time};\",trsp:\"transition-property:${1:prop};\",trstf:\"transition-timing-function:${1:tfunc};\",lh:\"line-height:|;\",whs:\"white-space:|;\",\"whs:n\":\"white-space:normal;\",\"whs:p\":\"white-space:pre;\",\"whs:nw\":\"white-space:nowrap;\",\"whs:pw\":\"white-space:pre-wrap;\",\"whs:pl\":\"white-space:pre-line;\",whsc:\"white-space-collapse:|;\",\"whsc:n\":\"white-space-collapse:normal;\",\"whsc:k\":\"white-space-collapse:keep-all;\",\"whsc:l\":\"white-space-collapse:loose;\",\"whsc:bs\":\"white-space-collapse:break-strict;\",\"whsc:ba\":\"white-space-collapse:break-all;\",wob:\"word-break:|;\",\"wob:n\":\"word-break:normal;\",\"wob:k\":\"word-break:keep-all;\",\"wob:ba\":\"word-break:break-all;\",wos:\"word-spacing:|;\",wow:\"word-wrap:|;\",\"wow:nm\":\"word-wrap:normal;\",\"wow:n\":\"word-wrap:none;\",\"wow:u\":\"word-wrap:unrestricted;\",\"wow:s\":\"word-wrap:suppress;\",\"wow:b\":\"word-wrap:break-word;\",wm:\"writing-mode:${1:lr-tb};\",\"wm:lrt\":\"writing-mode:lr-tb;\",\"wm:lrb\":\"writing-mode:lr-bt;\",\"wm:rlt\":\"writing-mode:rl-tb;\",\"wm:rlb\":\"writing-mode:rl-bt;\",\"wm:tbr\":\"writing-mode:tb-rl;\",\"wm:tbl\":\"writing-mode:tb-lr;\",\"wm:btl\":\"writing-mode:bt-lr;\",\"wm:btr\":\"writing-mode:bt-rl;\",lts:\"letter-spacing:|;\",\"lts-n\":\"letter-spacing:normal;\",f:\"font:|;\",\"f+\":\"font:${1:1em} ${2:Arial,sans-serif};\",fw:\"font-weight:|;\",\"fw:n\":\"font-weight:normal;\",\"fw:b\":\"font-weight:bold;\",\"fw:br\":\"font-weight:bolder;\",\"fw:lr\":\"font-weight:lighter;\",fs:\"font-style:${italic};\",\"fs:n\":\"font-style:normal;\",\"fs:i\":\"font-style:italic;\",\"fs:o\":\"font-style:oblique;\",fv:\"font-variant:|;\",\"fv:n\":\"font-variant:normal;\",\"fv:sc\":\"font-variant:small-caps;\",fz:\"font-size:|;\",fza:\"font-size-adjust:|;\",\"fza:n\":\"font-size-adjust:none;\",ff:\"font-family:|;\",\"ff:s\":\"font-family:serif;\",\"ff:ss\":\"font-family:sans-serif;\",\"ff:c\":\"font-family:cursive;\",\"ff:f\":\"font-family:fantasy;\",\"ff:m\":\"font-family:monospace;\",\"ff:a\":'font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;',\"ff:t\":'font-family: \"Times New Roman\", Times, Baskerville, Georgia, serif;',\"ff:v\":\"font-family: Verdana, Geneva, sans-serif;\",fef:\"font-effect:|;\",\"fef:n\":\"font-effect:none;\",\"fef:eg\":\"font-effect:engrave;\",\"fef:eb\":\"font-effect:emboss;\",\"fef:o\":\"font-effect:outline;\",fem:\"font-emphasize:|;\",femp:\"font-emphasize-position:|;\",\"femp:b\":\"font-emphasize-position:before;\",\"femp:a\":\"font-emphasize-position:after;\",fems:\"font-emphasize-style:|;\",\"fems:n\":\"font-emphasize-style:none;\",\"fems:ac\":\"font-emphasize-style:accent;\",\"fems:dt\":\"font-emphasize-style:dot;\",\"fems:c\":\"font-emphasize-style:circle;\",\"fems:ds\":\"font-emphasize-style:disc;\",fsm:\"font-smooth:|;\",\"fsm:a\":\"font-smooth:auto;\",\"fsm:n\":\"font-smooth:never;\",\"fsm:aw\":\"font-smooth:always;\",fst:\"font-stretch:|;\",\"fst:n\":\"font-stretch:normal;\",\"fst:uc\":\"font-stretch:ultra-condensed;\",\"fst:ec\":\"font-stretch:extra-condensed;\",\"fst:c\":\"font-stretch:condensed;\",\"fst:sc\":\"font-stretch:semi-condensed;\",\"fst:se\":\"font-stretch:semi-expanded;\",\"fst:e\":\"font-stretch:expanded;\",\"fst:ee\":\"font-stretch:extra-expanded;\",\"fst:ue\":\"font-stretch:ultra-expanded;\",op:\"opacity:|;\",\"op+\":\"opacity: $1;\\nfilter: alpha(opacity=$2);\",\"op:ie\":\"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\",\"op:ms\":\"-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';\",rsz:\"resize:|;\",\"rsz:n\":\"resize:none;\",\"rsz:b\":\"resize:both;\",\"rsz:h\":\"resize:horizontal;\",\"rsz:v\":\"resize:vertical;\",cur:\"cursor:${pointer};\",\"cur:a\":\"cursor:auto;\",\"cur:d\":\"cursor:default;\",\"cur:c\":\"cursor:crosshair;\",\"cur:ha\":\"cursor:hand;\",\"cur:he\":\"cursor:help;\",\"cur:m\":\"cursor:move;\",\"cur:p\":\"cursor:pointer;\",\"cur:t\":\"cursor:text;\",pgbb:\"page-break-before:|;\",\"pgbb:au\":\"page-break-before:auto;\",\"pgbb:al\":\"page-break-before:always;\",\"pgbb:l\":\"page-break-before:left;\",\"pgbb:r\":\"page-break-before:right;\",pgbi:\"page-break-inside:|;\",\"pgbi:au\":\"page-break-inside:auto;\",\"pgbi:av\":\"page-break-inside:avoid;\",pgba:\"page-break-after:|;\",\"pgba:au\":\"page-break-after:auto;\",\"pgba:al\":\"page-break-after:always;\",\"pgba:l\":\"page-break-after:left;\",\"pgba:r\":\"page-break-after:right;\",orp:\"orphans:|;\",us:\"user-select:${none};\",wid:\"widows:|;\",wfsm:\"-webkit-font-smoothing:${antialiased};\",\"wfsm:a\":\"-webkit-font-smoothing:antialiased;\",\"wfsm:s\":\"-webkit-font-smoothing:subpixel-antialiased;\",\"wfsm:sa\":\"-webkit-font-smoothing:subpixel-antialiased;\",\"wfsm:n\":\"-webkit-font-smoothing:none;\"}},html:{filters:\"html\",profile:\"html\",snippets:{\"!!!\":\"<!doctype html>\",\"!!!4t\":'<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">',\"!!!4s\":'<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">',\"!!!xt\":'<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">',\"!!!xs\":'<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">',\"!!!xxs\":'<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">',c:\"\\x3c!-- |${child} --\\x3e\",\"cc:ie6\":\"\\x3c!--[if lte IE 6]>\\n\\t${child}|\\n<![endif]--\\x3e\",\"cc:ie\":\"\\x3c!--[if IE]>\\n\\t${child}|\\n<![endif]--\\x3e\",\"cc:noie\":\"\\x3c!--[if !IE]>\\x3c!--\\x3e\\n\\t${child}|\\n\\x3c!--<![endif]--\\x3e\"},abbreviations:{\"!\":\"html:5\",a:'<a href=\"\">',\"a:link\":'<a href=\"http://|\">',\"a:mail\":'<a href=\"mailto:|\">',abbr:'<abbr title=\"\">',acronym:'<acronym title=\"\">',base:'<base href=\"\" />',basefont:\"<basefont/>\",br:\"<br/>\",frame:\"<frame/>\",hr:\"<hr/>\",bdo:'<bdo dir=\"\">',\"bdo:r\":'<bdo dir=\"rtl\">',\"bdo:l\":'<bdo dir=\"ltr\">',col:\"<col/>\",link:'<link rel=\"stylesheet\" href=\"\" />',\"link:css\":'<link rel=\"stylesheet\" href=\"${1:style}.css\" />',\"link:print\":'<link rel=\"stylesheet\" href=\"${1:print}.css\" media=\"print\" />',\"link:favicon\":'<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"${1:favicon.ico}\" />',\"link:touch\":'<link rel=\"apple-touch-icon\" href=\"${1:favicon.png}\" />',\"link:rss\":'<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"${1:rss.xml}\" />',\"link:atom\":'<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Atom\" href=\"${1:atom.xml}\" />',meta:\"<meta/>\",\"meta:utf\":'<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\" />',\"meta:win\":'<meta http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1251\" />',\"meta:vp\":'<meta name=\"viewport\" content=\"width=${1:device-width}, user-scalable=${2:no}, initial-scale=${3:1.0}, maximum-scale=${4:1.0}, minimum-scale=${5:1.0}\" />',\"meta:compat\":'<meta http-equiv=\"X-UA-Compatible\" content=\"${1:IE=7}\" />',style:\"<style>\",script:\"<script>\",\"script:src\":'<script src=\"\">',img:'<img src=\"\" alt=\"\" />',iframe:'<iframe src=\"\" frameborder=\"0\">',embed:'<embed src=\"\" type=\"\" />',object:'<object data=\"\" type=\"\">',param:'<param name=\"\" value=\"\" />',map:'<map name=\"\">',area:'<area shape=\"\" coords=\"\" href=\"\" alt=\"\" />',\"area:d\":'<area shape=\"default\" href=\"\" alt=\"\" />',\"area:c\":'<area shape=\"circle\" coords=\"\" href=\"\" alt=\"\" />',\"area:r\":'<area shape=\"rect\" coords=\"\" href=\"\" alt=\"\" />',\"area:p\":'<area shape=\"poly\" coords=\"\" href=\"\" alt=\"\" />',form:'<form action=\"\">',\"form:get\":'<form action=\"\" method=\"get\">',\"form:post\":'<form action=\"\" method=\"post\">',label:'<label for=\"\">',input:'<input type=\"${1:text}\" />',inp:'<input type=\"${1:text}\" name=\"\" id=\"\" />',\"input:hidden\":\"input[type=hidden name]\",\"input:h\":\"input:hidden\",\"input:text\":\"inp\",\"input:t\":\"inp\",\"input:search\":\"inp[type=search]\",\"input:email\":\"inp[type=email]\",\"input:url\":\"inp[type=url]\",\"input:password\":\"inp[type=password]\",\"input:p\":\"input:password\",\"input:datetime\":\"inp[type=datetime]\",\"input:date\":\"inp[type=date]\",\"input:datetime-local\":\"inp[type=datetime-local]\",\"input:month\":\"inp[type=month]\",\"input:week\":\"inp[type=week]\",\"input:time\":\"inp[type=time]\",\"input:number\":\"inp[type=number]\",\"input:color\":\"inp[type=color]\",\"input:checkbox\":\"inp[type=checkbox]\",\"input:c\":\"input:checkbox\",\"input:radio\":\"inp[type=radio]\",\"input:r\":\"input:radio\",\"input:range\":\"inp[type=range]\",\"input:file\":\"inp[type=file]\",\"input:f\":\"input:file\",\"input:submit\":'<input type=\"submit\" value=\"\" />',\"input:s\":\"input:submit\",\"input:image\":'<input type=\"image\" src=\"\" alt=\"\" />',\"input:i\":\"input:image\",\"input:button\":'<input type=\"button\" value=\"\" />',\"input:b\":\"input:button\",isindex:\"<isindex/>\",\"input:reset\":\"input:button[type=reset]\",select:'<select name=\"\" id=\"\">',\"select:disabled\":\"select[disabled]\",\"select:d\":\"select[disabled]\",option:'<option value=\"\">',textarea:'<textarea name=\"\" id=\"\" cols=\"${1:30}\" rows=\"${2:10}\">',marquee:'<marquee behavior=\"\" direction=\"\">',\"menu:context\":\"menu[type=context]>\",\"menu:c\":\"menu:context\",\"menu:toolbar\":\"menu[type=toolbar]>\",\"menu:t\":\"menu:toolbar\",video:'<video src=\"\">',audio:'<audio src=\"\">',\"html:xml\":'<html xmlns=\"http://www.w3.org/1999/xhtml\">',keygen:\"<keygen/>\",command:\"<command/>\",\"button:submit\":\"button[type=submit]\",\"button:s\":\"button[type=submit]\",\"button:reset\":\"button[type=reset]\",\"button:r\":\"button[type=reset]\",\"button:disabled\":\"button[disabled]\",\"button:d\":\"button[disabled]\",\"fieldset:disabled\":\"fieldset[disabled]\",\"fieldset:d\":\"fieldset[disabled]\",bq:\"blockquote\",acr:\"acronym\",fig:\"figure\",figc:\"figcaption\",ifr:\"iframe\",emb:\"embed\",obj:\"object\",src:\"source\",cap:\"caption\",colg:\"colgroup\",fst:\"fieldset\",\"fst:d\":\"fieldset[disabled]\",btn:\"button\",\"btn:b\":\"button[type=button]\",\"btn:r\":\"button[type=reset]\",\"btn:s\":\"button[type=submit]\",\"btn:d\":\"button[disabled]\",optg:\"optgroup\",opt:\"option\",tarea:\"textarea\",leg:\"legend\",sect:\"section\",art:\"article\",hdr:\"header\",ftr:\"footer\",adr:\"address\",dlg:\"dialog\",str:\"strong\",prog:\"progress\",fset:\"fieldset\",\"fset:d\":\"fieldset[disabled]\",datag:\"datagrid\",datal:\"datalist\",kg:\"keygen\",out:\"output\",det:\"details\",cmd:\"command\",doc:\"html>(head>meta[charset=UTF-8]+title{${1:Document}})+body\",doc4:'html>(head>meta[http-equiv=\"Content-Type\" content=\"text/html;charset=${charset}\"]+title{${1:Document}})+body',\"html:4t\":\"!!!4t+doc4[lang=${lang}]\",\"html:4s\":\"!!!4s+doc4[lang=${lang}]\",\"html:xt\":\"!!!xt+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]\",\"html:xs\":\"!!!xs+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]\",\"html:xxs\":\"!!!xxs+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]\",\"html:5\":\"!!!+doc[lang=${lang}]\",\"ol+\":\"ol>li\",\"ul+\":\"ul>li\",\"dl+\":\"dl>dt+dd\",\"map+\":\"map>area\",\"table+\":\"table>tr>td\",\"colgroup+\":\"colgroup>col\",\"colg+\":\"colgroup>col\",\"tr+\":\"tr>td\",\"select+\":\"select>option\",\"optgroup+\":\"optgroup>option\",\"optg+\":\"optgroup>option\"}},xml:{extends:\"html\",profile:\"xml\",filters:\"html\"},xsl:{extends:\"html\",profile:\"xml\",filters:\"html, xsl\",abbreviations:{tm:'<xsl:template match=\"\" mode=\"\">',tmatch:\"tm\",tn:'<xsl:template name=\"\">',tname:\"tn\",call:'<xsl:call-template name=\"\"/>',ap:'<xsl:apply-templates select=\"\" mode=\"\"/>',api:\"<xsl:apply-imports/>\",imp:'<xsl:import href=\"\"/>',inc:'<xsl:include href=\"\"/>',ch:\"<xsl:choose>\",\"xsl:when\":'<xsl:when test=\"\">',wh:\"xsl:when\",ot:\"<xsl:otherwise>\",if:'<xsl:if test=\"\">',par:'<xsl:param name=\"\">',pare:'<xsl:param name=\"\" select=\"\"/>',var:'<xsl:variable name=\"\">',vare:'<xsl:variable name=\"\" select=\"\"/>',wp:'<xsl:with-param name=\"\" select=\"\"/>',key:'<xsl:key name=\"\" match=\"\" use=\"\"/>',elem:'<xsl:element name=\"\">',attr:'<xsl:attribute name=\"\">',attrs:'<xsl:attribute-set name=\"\">',cp:'<xsl:copy select=\"\"/>',co:'<xsl:copy-of select=\"\"/>',val:'<xsl:value-of select=\"\"/>',each:'<xsl:for-each select=\"\">',for:\"each\",tex:\"<xsl:text></xsl:text>\",com:\"<xsl:comment>\",msg:'<xsl:message terminate=\"no\">',fall:\"<xsl:fallback>\",num:'<xsl:number value=\"\"/>',nam:'<namespace-alias stylesheet-prefix=\"\" result-prefix=\"\"/>',pres:'<xsl:preserve-space elements=\"\"/>',strip:'<xsl:strip-space elements=\"\"/>',proc:'<xsl:processing-instruction name=\"\">',sort:'<xsl:sort select=\"\" order=\"\"/>',\"choose+\":\"xsl:choose>xsl:when+xsl:otherwise\",xsl:\"!!!+xsl:stylesheet[version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform]>{\\n|}\"},snippets:{\"!!!\":'<?xml version=\"1.0\" encoding=\"UTF-8\"?>'}},haml:{filters:\"haml\",extends:\"html\",profile:\"xml\"},scss:{extends:\"css\"},sass:{extends:\"css\"},less:{extends:\"css\"},stylus:{extends:\"css\"},styl:{extends:\"stylus\"}}),\"user\")}),function(){var e=function(){return this}();e||\"undefined\"==typeof window||(e=window);var t=function(e,r,n){\"string\"==typeof e?(2==arguments.length&&(n=r),t.modules[e]||(t.payloads[e]=n,t.modules[e]=null)):t.original?t.original.apply(this,arguments):(console.error(\"dropping module because define wasn't a string.\"),console.trace())};t.modules={},t.payloads={};var r,n,i=function(e,t,r){if(\"string\"==typeof t){var n=a(e,t);if(null!=n)return r&&r(),n}else if(\"[object Array]\"===Object.prototype.toString.call(t)){for(var i=[],s=0,l=t.length;s<l;++s){var c=a(e,t[s]);if(null==c&&o.original)return;i.push(c)}return r&&r.apply(null,i)||!0}},o=function(e,t){var r=i(\"\",e,t);return null==r&&o.original?o.original.apply(this,arguments):r},s=function(e,t){if(-1!==t.indexOf(\"!\")){var r=t.split(\"!\");return s(e,r[0])+\"!\"+s(e,r[1])}if(\".\"==t.charAt(0))for(t=e.split(\"/\").slice(0,-1).join(\"/\")+\"/\"+t;-1!==t.indexOf(\".\")&&n!=t;){var n=t;t=t.replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}return t},a=function(e,r){r=s(e,r);var n=t.modules[r];if(!n){if(\"function\"==typeof(n=t.payloads[r])){var o={},a={id:r,uri:\"\",exports:o,packaged:!0};o=n(function(e,t){return i(r,e,t)},o,a)||a.exports,t.modules[r]=o,delete t.payloads[r]}n=t.modules[r]=o||n}return n};n=e,(r=\"ace\")&&(e[r]||(e[r]={}),n=e[r]),n.define&&n.define.packaged||(t.original=n.define,n.define=t,n.define.packaged=!0),n.require&&n.require.packaged||(o.original=n.require,n.require=o,n.require.packaged=!0)}(),ace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n,i={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},o=void 0===i.exec.call(/()??/,\"\")[1],s=(n=/^/g,i.test.call(n,\"\"),!n.lastIndex);s&&o||(RegExp.prototype.exec=function(e){var t,r,n,a=i.exec.apply(this,arguments);if(\"string\"==typeof e&&a){if(!o&&a.length>1&&function(e,t,r){if(Array.prototype.indexOf)return e.indexOf(t,r);for(var n=r||0;n<e.length;n++)if(e[n]===t)return n;return-1}(a,\"\")>-1&&(r=RegExp(this.source,i.replace.call(((n=this).global?\"g\":\"\")+(n.ignoreCase?\"i\":\"\")+(n.multiline?\"m\":\"\")+(n.extended?\"x\":\"\")+(n.sticky?\"y\":\"\"),\"g\",\"\")),i.replace.call(e.slice(a.index),r,function(){for(var e=1;e<arguments.length-2;e++)void 0===arguments[e]&&(a[e]=void 0)})),this._xregexp&&this._xregexp.captureNames)for(var l=1;l<a.length;l++)(t=this._xregexp.captureNames[l-1])&&(a[t]=a[l]);!s&&this.global&&!a[0].length&&this.lastIndex>a.index&&this.lastIndex--}return a},s||(RegExp.prototype.test=function(e){var t=i.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,r){function n(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if(\"function\"!=typeof t)throw new TypeError(\"Function.prototype.bind called on incompatible \"+t);var r=g.call(arguments,1),i=function(){if(this instanceof i){var n=t.apply(this,r.concat(g.call(arguments)));return Object(n)===n?n:this}return t.apply(e,r.concat(g.call(arguments)))};return t.prototype&&(n.prototype=t.prototype,i.prototype=new n,n.prototype=null),i});var i,o,s,a,l,c=Function.prototype.call,u=Array.prototype,d=Object.prototype,g=u.slice,h=c.bind(d.toString),m=c.bind(d.hasOwnProperty);if((l=m(d,\"__defineGetter__\"))&&(i=c.bind(d.__defineGetter__),o=c.bind(d.__defineSetter__),s=c.bind(d.__lookupGetter__),a=c.bind(d.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,r=[];if(r.splice.apply(r,e(20)),r.splice.apply(r,e(26)),t=r.length,r.splice(5,0,\"XXX\"),r.length,t+1==r.length)return!0}()){var p=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?p.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(g.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var r=this.length;e>0?e>r&&(e=r):null==e?e=0:e<0&&(e=Math.max(r+e,0)),e+t<r||(t=r-e);var n=this.slice(e,e+t),i=g.call(arguments,2),o=i.length;if(e===r)o&&this.push.apply(this,i);else{var s=Math.min(t,r-e),a=e+s,l=a+o-s,c=r-a,u=r-s;if(l<a)for(var d=0;d<c;++d)this[l+d]=this[a+d];else if(l>a)for(d=c;d--;)this[l+d]=this[a+d];if(o&&e===u)this.length=u,this.push.apply(this,i);else for(this.length=u+o,d=0;d<o;++d)this[e+d]=i[d]}return n};Array.isArray||(Array.isArray=function(e){return\"[object Array]\"==h(e)});var _,f,b=Object(\"a\"),y=\"a\"!=b[0]||!(0 in b);if(Array.prototype.forEach||(Array.prototype.forEach=function(e){var t=D(this),r=y&&\"[object String]\"==h(this)?this.split(\"\"):t,n=arguments[1],i=-1,o=r.length>>>0;if(\"[object Function]\"!=h(e))throw new TypeError;for(;++i<o;)i in r&&e.call(n,r[i],i,t)}),Array.prototype.map||(Array.prototype.map=function(e){var t=D(this),r=y&&\"[object String]\"==h(this)?this.split(\"\"):t,n=r.length>>>0,i=Array(n),o=arguments[1];if(\"[object Function]\"!=h(e))throw new TypeError(e+\" is not a function\");for(var s=0;s<n;s++)s in r&&(i[s]=e.call(o,r[s],s,t));return i}),Array.prototype.filter||(Array.prototype.filter=function(e){var t,r=D(this),n=y&&\"[object String]\"==h(this)?this.split(\"\"):r,i=n.length>>>0,o=[],s=arguments[1];if(\"[object Function]\"!=h(e))throw new TypeError(e+\" is not a function\");for(var a=0;a<i;a++)a in n&&(t=n[a],e.call(s,t,a,r)&&o.push(t));return o}),Array.prototype.every||(Array.prototype.every=function(e){var t=D(this),r=y&&\"[object String]\"==h(this)?this.split(\"\"):t,n=r.length>>>0,i=arguments[1];if(\"[object Function]\"!=h(e))throw new TypeError(e+\" is not a function\");for(var o=0;o<n;o++)if(o in r&&!e.call(i,r[o],o,t))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(e){var t=D(this),r=y&&\"[object String]\"==h(this)?this.split(\"\"):t,n=r.length>>>0,i=arguments[1];if(\"[object Function]\"!=h(e))throw new TypeError(e+\" is not a function\");for(var o=0;o<n;o++)if(o in r&&e.call(i,r[o],o,t))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(e){var t=D(this),r=y&&\"[object String]\"==h(this)?this.split(\"\"):t,n=r.length>>>0;if(\"[object Function]\"!=h(e))throw new TypeError(e+\" is not a function\");if(!n&&1==arguments.length)throw new TypeError(\"reduce of empty array with no initial value\");var i,o=0;if(arguments.length>=2)i=arguments[1];else for(;;){if(o in r){i=r[o++];break}if(++o>=n)throw new TypeError(\"reduce of empty array with no initial value\")}for(;o<n;o++)o in r&&(i=e.call(void 0,i,r[o],o,t));return i}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(e){var t=D(this),r=y&&\"[object String]\"==h(this)?this.split(\"\"):t,n=r.length>>>0;if(\"[object Function]\"!=h(e))throw new TypeError(e+\" is not a function\");if(!n&&1==arguments.length)throw new TypeError(\"reduceRight of empty array with no initial value\");var i,o=n-1;if(arguments.length>=2)i=arguments[1];else for(;;){if(o in r){i=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}do{o in this&&(i=e.call(void 0,i,r[o],o,t))}while(o--);return i}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=y&&\"[object String]\"==h(this)?this.split(\"\"):D(this),r=t.length>>>0;if(!r)return-1;var n=0;for(arguments.length>1&&(n=T(arguments[1])),n=n>=0?n:Math.max(0,r+n);n<r;n++)if(n in t&&t[n]===e)return n;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(e){var t=y&&\"[object String]\"==h(this)?this.split(\"\"):D(this),r=t.length>>>0;if(!r)return-1;var n=r-1;for(arguments.length>1&&(n=Math.min(n,T(arguments[1]))),n=n>=0?n:r-Math.abs(n);n>=0;n--)if(n in t&&e===t[n])return n;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:d)}),!Object.getOwnPropertyDescriptor){Object.getOwnPropertyDescriptor=function(e,t){if(\"object\"!=typeof e&&\"function\"!=typeof e||null===e)throw new TypeError(\"Object.getOwnPropertyDescriptor called on a non-object: \"+e);if(m(e,t)){var r;if(r={enumerable:!0,configurable:!0},l){var n=e.__proto__;e.__proto__=d;var i=s(e,t),o=a(e,t);if(e.__proto__=n,i||o)return i&&(r.get=i),o&&(r.set=o),r}return r.value=e[t],r}}}(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create)||(_=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var r;if(null===e)r=_();else{if(\"object\"!=typeof e)throw new TypeError(\"typeof prototype[\"+typeof e+\"] != 'object'\");var n=function(){};n.prototype=e,(r=new n).__proto__=e}return void 0!==t&&Object.defineProperties(r,t),r});function x(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(e){}}if(Object.defineProperty){var v=x({}),w=\"undefined\"==typeof document||x(document.createElement(\"div\"));if(!v||!w)var k=Object.defineProperty}if(!Object.defineProperty||k){Object.defineProperty=function(e,t,r){if(\"object\"!=typeof e&&\"function\"!=typeof e||null===e)throw new TypeError(\"Object.defineProperty called on non-object: \"+e);if(\"object\"!=typeof r&&\"function\"!=typeof r||null===r)throw new TypeError(\"Property description must be an object: \"+r);if(k)try{return k.call(Object,e,t,r)}catch(e){}if(m(r,\"value\"))if(l&&(s(e,t)||a(e,t))){var n=e.__proto__;e.__proto__=d,delete e[t],e[t]=r.value,e.__proto__=n}else e[t]=r.value;else{if(!l)throw new TypeError(\"getters & setters can not be defined on this javascript engine\");m(r,\"get\")&&i(e,t,r.get),m(r,\"set\")&&o(e,t,r.set)}return e}}Object.defineProperties||(Object.defineProperties=function(e,t){for(var r in t)m(t,r)&&Object.defineProperty(e,r,t[r]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze(function(){})}catch(e){Object.freeze=(f=Object.freeze,function(e){return\"function\"==typeof e?e:f(e)})}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;for(var t=\"\";m(e,t);)t+=\"?\";e[t]=!0;var r=m(e,t);return delete e[t],r}),!Object.keys){var C=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],S=A.length;for(var E in{toString:null})C=!1;Object.keys=function(e){if(\"object\"!=typeof e&&\"function\"!=typeof e||null===e)throw new TypeError(\"Object.keys called on a non-object\");var t=[];for(var r in e)m(e,r)&&t.push(r);if(C)for(var n=0,i=S;n<i;n++){var o=A[n];m(e,o)&&t.push(o)}return t}}Date.now||(Date.now=function(){return(new Date).getTime()});var F=\"\\t\\n\\v\\f\\r   ᠎             　\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||F.trim()){F=\"[\"+F+\"]\";var R=new RegExp(\"^\"+F+F+\"*\"),$=new RegExp(F+F+\"*$\");String.prototype.trim=function(){return String(this).replace(R,\"\").replace($,\"\")}}function T(e){return(e=+e)!=e?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}var D=function(e){if(null==e)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}}),ace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"],function(e,t,r){\"use strict\";e(\"./regexp\"),e(\"./es5-shim\")}),ace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName(\"head\")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||\"http://www.w3.org/1999/xhtml\",e):document.createElement(e)},t.hasCssClass=function(e,t){return-1!==(e.className+\"\").split(/\\s+/g).indexOf(t)},t.addCssClass=function(e,r){t.hasCssClass(e,r)||(e.className+=\" \"+r)},t.removeCssClass=function(e,t){for(var r=e.className.split(/\\s+/g);;){var n=r.indexOf(t);if(-1==n)break;r.splice(n,1)}e.className=r.join(\" \")},t.toggleCssClass=function(e,t){for(var r=e.className.split(/\\s+/g),n=!0;;){var i=r.indexOf(t);if(-1==i)break;n=!1,r.splice(i,1)}return n&&r.push(t),e.className=r.join(\" \"),n},t.setCssClass=function(e,r,n){n?t.addCssClass(e,r):t.removeCssClass(e,r)},t.hasCssString=function(e,t){var r,n=0;if((t=t||document).createStyleSheet&&(r=t.styleSheets)){for(;n<r.length;)if(r[n++].owningElement.id===e)return!0}else if(r=t.getElementsByTagName(\"style\"))for(;n<r.length;)if(r[n++].id===e)return!0;return!1},t.importCssString=function(e,r,n){if(n=n||document,r&&t.hasCssString(r,n))return null;var i;r&&(e+=\"\\n/*# sourceURL=ace/css/\"+r+\" */\"),n.createStyleSheet?((i=n.createStyleSheet()).cssText=e,r&&(i.owningElement.id=r)):((i=t.createElement(\"style\")).appendChild(n.createTextNode(e)),r&&(i.id=r),t.getDocumentHead(n).appendChild(i))},t.importCssStylsheet=function(e,r){if(r.createStyleSheet)r.createStyleSheet(e);else{var n=t.createElement(\"link\");n.rel=\"stylesheet\",n.href=e,t.getDocumentHead(r).appendChild(n)}},t.getInnerWidth=function(e){return parseInt(t.computedStyle(e,\"paddingLeft\"),10)+parseInt(t.computedStyle(e,\"paddingRight\"),10)+e.clientWidth},t.getInnerHeight=function(e){return parseInt(t.computedStyle(e,\"paddingTop\"),10)+parseInt(t.computedStyle(e,\"paddingBottom\"),10)+e.clientHeight},t.scrollbarWidth=function(e){var r=t.createElement(\"ace_inner\");r.style.width=\"100%\",r.style.minWidth=\"0px\",r.style.height=\"200px\",r.style.display=\"block\";var n=t.createElement(\"ace_outer\"),i=n.style;i.position=\"absolute\",i.left=\"-10000px\",i.overflow=\"hidden\",i.width=\"200px\",i.minWidth=\"0px\",i.height=\"150px\",i.display=\"block\",n.appendChild(r);var o=e.documentElement;o.appendChild(n);var s=r.offsetWidth;i.overflow=\"scroll\";var a=r.offsetWidth;return s==a&&(a=n.clientWidth),o.removeChild(n),s-a},\"undefined\"!=typeof document?(void 0!==window.pageYOffset?(t.getPageScrollTop=function(){return window.pageYOffset},t.getPageScrollLeft=function(){return window.pageXOffset}):(t.getPageScrollTop=function(){return document.body.scrollTop},t.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?t.computedStyle=function(e,t){return t?(window.getComputedStyle(e,\"\")||{})[t]||\"\":window.getComputedStyle(e,\"\")||{}}:t.computedStyle=function(e,t){return t?e.currentStyle[t]:e.currentStyle},t.setInnerHtml=function(e,t){var r=e.cloneNode(!1);return r.innerHTML=t,e.parentNode.replaceChild(r,e),r},\"textContent\"in document.documentElement?(t.setInnerText=function(e,t){e.textContent=t},t.getInnerText=function(e){return e.textContent}):(t.setInnerText=function(e,t){e.innerText=t},t.getInnerText=function(e){return e.innerText}),t.getParentWindow=function(e){return e.defaultView||e.parentWindow}):t.importCssString=function(){}}),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var r in t)e[r]=t[r];return e},t.implement=function(e,r){t.mixin(e,r)}}),ace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"],function(e,t,r){\"use strict\";e(\"./fixoldbrowsers\");var n=e(\"./oop\"),i=function(){var e,t,r={MODIFIER_KEYS:{16:\"Shift\",17:\"Ctrl\",18:\"Alt\",224:\"Meta\"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,super:8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",\"-13\":\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:\" \",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",59:\";\",61:\"=\",65:\"a\",66:\"b\",67:\"c\",68:\"d\",69:\"e\",70:\"f\",71:\"g\",72:\"h\",73:\"i\",74:\"j\",75:\"k\",76:\"l\",77:\"m\",78:\"n\",79:\"o\",80:\"p\",81:\"q\",82:\"r\",83:\"s\",84:\"t\",85:\"u\",86:\"v\",87:\"w\",88:\"x\",89:\"y\",90:\"z\",107:\"+\",109:\"-\",110:\".\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",111:\"/\",106:\"*\"}};for(t in r.FUNCTION_KEYS)e=r.FUNCTION_KEYS[t].toLowerCase(),r[e]=parseInt(t,10);for(t in r.PRINTABLE_KEYS)e=r.PRINTABLE_KEYS[t].toLowerCase(),r[e]=parseInt(t,10);return n.mixin(r,r.MODIFIER_KEYS),n.mixin(r,r.PRINTABLE_KEYS),n.mixin(r,r.FUNCTION_KEYS),r.enter=r.return,r.escape=r.esc,r.del=r.delete,r[173]=\"-\",function(){for(var e=[\"cmd\",\"ctrl\",\"alt\",\"shift\"],t=Math.pow(2,e.length);t--;)r.KEY_MODS[t]=e.filter(function(e){return t&r.KEY_MODS[e]}).join(\"-\")+\"-\"}(),r.KEY_MODS[0]=\"\",r.KEY_MODS[-1]=\"input-\",r}();n.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return\"string\"!=typeof t&&(t=String.fromCharCode(e)),t.toLowerCase()}}),ace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";if(t.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS},\"object\"==typeof navigator){var n=(navigator.platform.match(/mac|win|linux/i)||[\"other\"])[0].toLowerCase(),i=navigator.userAgent;t.isWin=\"win\"==n,t.isMac=\"mac\"==n,t.isLinux=\"linux\"==n,t.isIE=\"Microsoft Internet Explorer\"==navigator.appName||navigator.appName.indexOf(\"MSAppHost\")>=0?parseFloat((i.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&\"Gecko\"===window.navigator.product,t.isOldGecko=t.isGecko&&parseInt((i.match(/rv:(\\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&\"[object Opera]\"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(i.split(\"WebKit/\")[1])||void 0,t.isChrome=parseFloat(i.split(\" Chrome/\")[1])||void 0,t.isAIR=i.indexOf(\"AdobeAIR\")>=0,t.isIPad=i.indexOf(\"iPad\")>=0,t.isTouchPad=i.indexOf(\"TouchPad\")>=0,t.isChromeOS=i.indexOf(\" CrOS \")>=0}}),ace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,r){\"use strict\";var n=e(\"./keys\"),i=e(\"./useragent\"),o=null,s=0;t.addListener=function(e,t,r){if(e.addEventListener)return e.addEventListener(t,r,!1);if(e.attachEvent){var n=function(){r.call(e,window.event)};r._wrapper=n,e.attachEvent(\"on\"+t,n)}},t.removeListener=function(e,t,r){if(e.removeEventListener)return e.removeEventListener(t,r,!1);e.detachEvent&&e.detachEvent(\"on\"+t,r._wrapper||r)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return\"dblclick\"==e.type?0:\"contextmenu\"==e.type||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,r,n){function i(e){r&&r(e),n&&n(e),t.removeListener(document,\"mousemove\",r,!0),t.removeListener(document,\"mouseup\",i,!0),t.removeListener(document,\"dragstart\",i,!0)}return t.addListener(document,\"mousemove\",r,!0),t.addListener(document,\"mouseup\",i,!0),t.addListener(document,\"dragstart\",i,!0),i},t.addTouchMoveListener=function(e,r){var n,i;\"ontouchmove\"in e&&(t.addListener(e,\"touchstart\",function(e){var t=e.changedTouches[0];n=t.clientX,i=t.clientY}),t.addListener(e,\"touchmove\",function(e){var t=e.changedTouches[0];e.wheelX=-(t.clientX-n)/1,e.wheelY=-(t.clientY-i)/1,n=t.clientX,i=t.clientY,r(e)}))},t.addMouseWheelListener=function(e,r){\"onmousewheel\"in e?t.addListener(e,\"mousewheel\",function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),r(e)}):\"onwheel\"in e?t.addListener(e,\"wheel\",function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}r(e)}):t.addListener(e,\"DOMMouseScroll\",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),r(e)})},t.addMultiMouseDownListener=function(e,r,n,o){var s,a,l,c=0,u={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};function d(e){if(0!==t.getButton(e)?c=0:e.detail>1?++c>4&&(c=1):c=1,i.isIE){var d=Math.abs(e.clientX-s)>5||Math.abs(e.clientY-a)>5;l&&!d||(c=1),l&&clearTimeout(l),l=setTimeout(function(){l=null},r[c-1]||600),1==c&&(s=e.clientX,a=e.clientY)}if(e._clicks=c,n[o](\"mousedown\",e),c>4)c=0;else if(c>1)return n[o](u[c],e)}function g(e){c=2,l&&clearTimeout(l),l=setTimeout(function(){l=null},r[c-1]||600),n[o](\"mousedown\",e),n[o](u[c],e)}Array.isArray(e)||(e=[e]),e.forEach(function(e){t.addListener(e,\"mousedown\",d),i.isOldIE&&t.addListener(e,\"dblclick\",g)})};var a=i.isMac&&i.isOpera&&!(\"KeyboardEvent\"in window)?function(e){return(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function l(e,t,r){var l=a(t);if(!i.isMac&&o){if(t.getModifierState&&(t.getModifierState(\"OS\")||t.getModifierState(\"Win\"))&&(l|=8),o.altGr){if(!(3&~l))return;o.altGr=0}if(18===r||17===r){var c=\"location\"in t?t.location:t.keyLocation;if(17===r&&1===c)1==o[r]&&(s=t.timeStamp);else if(18===r&&3===l&&2===c){t.timeStamp-s<50&&(o.altGr=!0)}}}if((r in n.MODIFIER_KEYS&&(r=-1),8&l&&r>=91&&r<=93&&(r=-1),!l&&13===r)&&(3===(c=\"location\"in t?t.location:t.keyLocation)&&(e(t,l,-r),t.defaultPrevented)))return;if(i.isChromeOS&&8&l){if(e(t,l,r),t.defaultPrevented)return;l&=-9}return!!(l||r in n.FUNCTION_KEYS||r in n.PRINTABLE_KEYS)&&e(t,l,r)}function c(){o=Object.create(null)}if(t.getModifierString=function(e){return n.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,r){var n=t.addListener;if(i.isOldGecko||i.isOpera&&!(\"KeyboardEvent\"in window)){var s=null;n(e,\"keydown\",function(e){s=e.keyCode}),n(e,\"keypress\",function(e){return l(r,e,s)})}else{var a=null;n(e,\"keydown\",function(e){o[e.keyCode]=(o[e.keyCode]||0)+1;var t=l(r,e,e.keyCode);return a=e.defaultPrevented,t}),n(e,\"keypress\",function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)}),n(e,\"keyup\",function(e){o[e.keyCode]=null}),o||(c(),n(window,\"focus\",c))}},\"object\"==typeof window&&window.postMessage&&!i.isOldIE){t.nextTick=function(e,r){r=r||window;var n=\"zero-timeout-message-1\";t.addListener(r,\"message\",function i(o){o.data==n&&(t.stopPropagation(o),t.removeListener(r,\"message\",i),e())}),r.postMessage(n,\"*\")}}t.nextFrame=\"object\"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){for(var r=\"\";t>0;)1&t&&(r+=e),(t>>=1)&&(e+=e);return r};var n=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(n,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var r in e)t[r]=e[r];return t},t.copyArray=function(e){for(var t=[],r=0,n=e.length;r<n;r++)e[r]&&\"object\"==typeof e[r]?t[r]=this.copyObject(e[r]):t[r]=e[r];return t},t.deepCopy=function e(t){if(\"object\"!=typeof t||!t)return t;var r;if(Array.isArray(t)){r=[];for(var n=0;n<t.length;n++)r[n]=e(t[n]);return r}if(\"[object Object]\"!==Object.prototype.toString.call(t))return t;for(var n in r={},t)r[n]=e(t[n]);return r},t.arrayToMap=function(e){for(var t={},r=0;r<e.length;r++)t[e[r]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var r in e)t[r]=e[r];return t},t.arrayRemove=function(e,t){for(var r=0;r<=e.length;r++)t===e[r]&&e.splice(r,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var r=[];return e.replace(t,function(e){r.push({offset:arguments[arguments.length-2],length:e.length})}),r},t.deferredCall=function(e){var t=null,r=function(){t=null,e()},n=function(e){return n.cancel(),t=setTimeout(r,e||0),n};return n.schedule=n,n.call=function(){return this.cancel(),e(),n},n.cancel=function(){return clearTimeout(t),t=null,n},n.isPending=function(){return t},n},t.delayedCall=function(e,t){var r=null,n=function(){r=null,e()},i=function(e){null==r&&(r=setTimeout(n,e||t))};return i.delay=function(e){r&&clearTimeout(r),r=setTimeout(n,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){r&&clearTimeout(r),r=null},i.isPending=function(){return r},i}}),ace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n=e(\"../lib/event\"),i=e(\"../lib/useragent\"),o=e(\"../lib/dom\"),s=e(\"../lib/lang\"),a=i.isChrome<18,l=i.isIE;t.TextInput=function(e,t){var r=o.createElement(\"textarea\");r.className=\"ace_text-input\",i.isTouchPad&&r.setAttribute(\"x-palm-disable-auto-cap\",!0),r.setAttribute(\"wrap\",\"off\"),r.setAttribute(\"autocorrect\",\"off\"),r.setAttribute(\"autocapitalize\",\"off\"),r.setAttribute(\"spellcheck\",!1),r.style.opacity=\"0\",i.isOldIE&&(r.style.top=\"-1000px\"),e.insertBefore(r,e.firstChild);var c=\"\u0001\u0001\",u=!1,d=!1,g=!1,h=\"\",m=!0;try{var p=document.activeElement===r}catch(e){}n.addListener(r,\"blur\",function(e){t.onBlur(e),p=!1}),n.addListener(r,\"focus\",function(e){p=!0,t.onFocus(e),b()}),this.focus=function(){if(h)return r.focus();var e=r.style.top;r.style.position=\"fixed\",r.style.top=\"0px\",r.focus(),setTimeout(function(){r.style.position=\"\",\"0px\"==r.style.top&&(r.style.top=e)},0)},this.blur=function(){r.blur()},this.isFocused=function(){return p};var _=s.delayedCall(function(){p&&b(m)}),f=s.delayedCall(function(){g||(r.value=c,p&&b())});function b(e){if(!g){if(g=!0,A)t=0,n=e?0:r.value.length-1;else var t=e?2:1,n=2;try{r.setSelectionRange(t,n)}catch(e){}g=!1}}function y(){g||(r.value=c,i.isWebKit&&f.schedule())}i.isWebKit||t.addEventListener(\"changeSelection\",function(){t.selection.isEmpty()!=m&&(m=!m,_.schedule())}),y(),p&&t.onFocus();var x=function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length};if(!r.setSelectionRange&&r.createTextRange&&(r.setSelectionRange=function(e,t){var r=this.createTextRange();r.collapse(!0),r.moveStart(\"character\",e),r.moveEnd(\"character\",t),r.select()},x=function(e){try{var t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&t.text==e.value}),i.isOldIE){var v=!1,w=function(e){if(!v){var t=r.value;if(!g&&t&&t!=c){if(e&&t==c[0])return k.schedule();E(t),v=!0,y(),v=!1}}},k=s.delayedCall(w);n.addListener(r,\"propertychange\",w);var C={13:1,27:1};n.addListener(r,\"keyup\",function(e){if(!g||r.value&&!C[e.keyCode]||setTimeout(I,0),(r.value.charCodeAt(0)||0)<129)return k.call();g?q():B()}),n.addListener(r,\"keydown\",function(e){k.schedule(50)})}var A=null;this.setInputHandler=function(e){A=e},this.getInputHandler=function(){return A};var S=!1,E=function(e){A&&(e=A(e),A=null),d?(b(),e&&t.onPaste(e),d=!1):e==c.charAt(0)?S?t.execCommand(\"del\",{source:\"ace\"}):t.execCommand(\"backspace\",{source:\"ace\"}):(e.substring(0,2)==c?e=e.substr(2):e.charAt(0)==c.charAt(0)?e=e.substr(1):e.charAt(e.length-1)==c.charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)==c.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),S&&(S=!1)},F=function(e){if(!g){var t=r.value;E(t),y()}},R=function(e,t,r){var n=e.clipboardData||window.clipboardData;if(n&&!a){var i=l||r?\"Text\":\"text/plain\";try{return t?!1!==n.setData(i,t):n.getData(i)}catch(e){if(!r)return R(e,t,!0)}}},$=function(e,i){var o=t.getCopyText();if(!o)return n.preventDefault(e);R(e,o)?(i?t.onCut():t.onCopy(),n.preventDefault(e)):(u=!0,r.value=o,r.select(),setTimeout(function(){u=!1,y(),b(),i?t.onCut():t.onCopy()}))},T=function(e){$(e,!0)},D=function(e){$(e,!1)},L=function(e){var o=R(e);\"string\"==typeof o?(o&&t.onPaste(o,e),i.isIE&&setTimeout(b),n.preventDefault(e)):(r.value=\"\",d=!0)};n.addCommandKeyListener(r,t.onCommandKey.bind(t)),n.addListener(r,\"select\",function(e){u?u=!1:x(r)?(t.selectAll(),b()):A&&b(t.selection.isEmpty())}),n.addListener(r,\"input\",F),n.addListener(r,\"cut\",T),n.addListener(r,\"copy\",D),n.addListener(r,\"paste\",L),\"oncut\"in r&&\"oncopy\"in r&&\"onpaste\"in r||n.addListener(e,\"keydown\",function(e){if((!i.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:D(e);break;case 86:L(e);break;case 88:T(e)}});var M,B=function(e){g||!t.onCompositionStart||t.$readOnly||((g={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(q,0),t.on(\"mousedown\",I),g.canUndo&&!t.selection.isEmpty()&&(t.insert(\"\"),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())},q=function(){if(g&&t.onCompositionUpdate&&!t.$readOnly){var e=r.value.replace(/\\x01/g,\"\");if(g.lastValue!==e&&(t.onCompositionUpdate(e),g.lastValue&&t.undo(),g.canUndo&&(g.lastValue=e),g.lastValue)){var n=t.selection.getRange();t.insert(g.lastValue),t.session.markUndoGroup(),g.range=t.selection.getRange(),t.selection.setRange(n),t.selection.clearSelection()}}},I=function(e){if(t.onCompositionEnd&&!t.$readOnly){var n=g;g=!1;var o=setTimeout(function(){o=null;var e=r.value.replace(/\\x01/g,\"\");g||(e==n.lastValue?y():!n.lastValue&&e&&(y(),E(e)))});A=function(e){return o&&clearTimeout(o),(e=e.replace(/\\x01/g,\"\"))==n.lastValue?\"\":(n.lastValue&&o&&t.undo(),e)},t.onCompositionEnd(),t.removeListener(\"mousedown\",I),\"compositionend\"==e.type&&n.range&&t.selection.setRange(n.range),i.isChrome&&i.isChrome>=53&&F()}},z=s.delayedCall(q,50);function O(){clearTimeout(M),M=setTimeout(function(){h&&(r.style.cssText=h,h=\"\"),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())},i.isOldIE?200:0)}n.addListener(r,\"compositionstart\",B),i.isGecko?n.addListener(r,\"text\",function(){z.schedule()}):(n.addListener(r,\"keyup\",function(){z.schedule()}),n.addListener(r,\"keydown\",function(){z.schedule()})),n.addListener(r,\"compositionend\",I),this.getElement=function(){return r},this.setReadOnly=function(e){r.readOnly=e},this.onContextMenu=function(e){S=!0,b(t.selection.isEmpty()),t._emit(\"nativecontextmenu\",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,s){if(s||!i.isOldIE){h||(h=r.style.cssText),r.style.cssText=(s?\"z-index:100000;\":\"\")+\"height:\"+r.style.height+\";\"+(i.isIE?\"opacity:0.1;\":\"\");var a=t.container.getBoundingClientRect(),l=o.computedStyle(t.container),c=a.top+(parseInt(l.borderTopWidth)||0),u=a.left+(parseInt(a.borderLeftWidth)||0),d=a.bottom-c-r.clientHeight-2,g=function(e){r.style.left=e.clientX-u-2+\"px\",r.style.top=Math.min(e.clientY-c-2,d)+\"px\"};g(e),\"mousedown\"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(M),i.isWin&&!i.isOldIE&&n.capture(t.container,g,O))}},this.onContextMenuClose=O;var P=function(e){t.textInput.onContextMenu(e),O()};n.addListener(r,\"mouseup\",P),n.addListener(r,\"mousedown\",function(e){e.preventDefault(),O()}),n.addListener(t.renderer.scroller,\"contextmenu\",P),n.addListener(r,\"contextmenu\",P)}}),ace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,r){\"use strict\";e(\"../lib/dom\"),e(\"../lib/event\"),e(\"../lib/useragent\");function n(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(e)),t.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(e)),t.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(e)),t.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(e)),t.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(e)),t.setDefaultHandler(\"touchmove\",this.onTouchMove.bind(e));[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"].forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,\"getLineRange\"),e.selectByWords=this.extendSelectionBy.bind(e,\"getWordRange\")}function i(e,t){if(e.start.row==e.end.row)var r=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)r=2*t.row-e.start.row-e.end.row;else var r=t.column-4;return r<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),r=e.getDocumentPosition();this.mousedownEvent=e;var n=this.editor,i=e.getButton();if(0!==i){var o=n.getSelectionRange().isEmpty();return n.$blockScrolling++,(o||1==i)&&n.selection.moveToPosition(r),n.$blockScrolling--,void(2==i&&n.textInput.onContextMenu(e.domEvent))}return this.mousedownEvent.time=Date.now(),!t||n.isFocused()||(n.focus(),!this.$focusTimout||this.$clickSelection||n.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(r,e.domEvent._clicks>1),e.preventDefault()):(this.setState(\"focusWait\"),void this.captureMouse(e))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var r=this.editor;r.$blockScrolling++,this.mousedownEvent.getShiftKey()?r.selection.selectToPosition(e):t||r.selection.moveToPosition(e),t||this.select(),r.renderer.scroller.setCapture&&r.renderer.scroller.setCapture(),r.setStyle(\"ace_selecting\"),this.setState(\"select\"),r.$blockScrolling--},this.select=function(){var e,t=this.editor,r=t.renderer.screenToTextCoordinates(this.x,this.y);if(t.$blockScrolling++,this.$clickSelection){var n=this.$clickSelection.comparePoint(r);if(-1==n)e=this.$clickSelection.end;else if(1==n)e=this.$clickSelection.start;else{var o=i(this.$clickSelection,r);r=o.cursor,e=o.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(r),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,r=this.editor,n=r.renderer.screenToTextCoordinates(this.x,this.y),o=r.selection[e](n.row,n.column);if(r.$blockScrolling++,this.$clickSelection){var s=this.$clickSelection.comparePoint(o.start),a=this.$clickSelection.comparePoint(o.end);if(-1==s&&a<=0)t=this.$clickSelection.end,o.end.row==n.row&&o.end.column==n.column||(n=o.start);else if(1==a&&s>=0)t=this.$clickSelection.start,o.start.row==n.row&&o.start.column==n.column||(n=o.end);else if(-1==s&&1==a)n=o.end,t=o.start;else{var l=i(this.$clickSelection,n);n=l.cursor,t=l.anchor}r.selection.setSelectionAnchor(t.row,t.column)}r.selection.selectToPosition(n),r.$blockScrolling--,r.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle(\"ace_selecting\"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e,t,r,n,i=(e=this.mousedownEvent.x,t=this.mousedownEvent.y,r=this.x,n=this.y,Math.sqrt(Math.pow(r-e,2)+Math.pow(n-t,2))),o=Date.now();(i>0||o-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),r=this.editor,n=r.session.getBracketRange(t);n?(n.isEmpty()&&(n.start.column--,n.end.column++),this.setState(\"select\")):(n=r.selection.getWordRange(t.row,t.column),this.setState(\"selectByWords\")),this.$clickSelection=n,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),r=this.editor;this.setState(\"selectByLines\");var n=r.getSelectionRange();n.isMultiLine()&&n.contains(t.row,t.column)?(this.$clickSelection=r.selection.getLineRange(n.start.row),this.$clickSelection.end=r.selection.getLineRange(n.end.row).end):this.$clickSelection=r.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState(\"selectAll\")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=e.domEvent.timeStamp,r=t-(this.$lastScrollTime||0),n=this.editor;return n.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed)||r<200?(this.$lastScrollTime=t,n.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}},this.onTouchMove=function(e){var t=e.domEvent.timeStamp,r=t-(this.$lastScrollTime||0),n=this.editor;if(n.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed)||r<200)return this.$lastScrollTime=t,n.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()}}).call(n.prototype),t.DefaultHandlers=n}),ace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],function(e,t,r){\"use strict\";e(\"./lib/oop\");var n=e(\"./lib/dom\");function i(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=n.createElement(\"div\"),this.$element.className=\"ace_tooltip\",this.$element.style.display=\"none\",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){n.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+\"px\",this.getElement().style.top=t+\"px\"},this.setClassName=function(e){n.addCssClass(this.getElement(),e)},this.show=function(e,t,r){null!=e&&this.setText(e),null!=t&&null!=r&&this.setPosition(t,r),this.isOpen||(this.getElement().style.display=\"block\",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display=\"none\",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(i.prototype),t.Tooltip=i}),ace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],function(e,t,r){\"use strict\";var n=e(\"../lib/dom\"),i=e(\"../lib/oop\"),o=e(\"../lib/event\"),s=e(\"../tooltip\").Tooltip;function a(e){s.call(this,e)}i.inherits(a,s),function(){this.setPosition=function(e,t){var r=window.innerWidth||document.documentElement.clientWidth,n=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),o=this.getHeight();(e+=15)+i>r&&(e-=e+i-r),(t+=15)+o>n&&(t-=20+o),s.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=function(e){var t,r,i,s=e.editor,l=s.renderer.$gutterLayer,c=new a(s.container);function u(){t&&(t=clearTimeout(t)),i&&(c.hide(),i=null,s._signal(\"hideGutterTooltip\",c),s.removeEventListener(\"mousewheel\",u))}function d(e){c.setPosition(e.x,e.y)}e.editor.setDefaultHandler(\"guttermousedown\",function(t){if(s.isFocused()&&0==t.getButton()&&\"foldWidgets\"!=l.getRegion(t)){var r=t.getDocumentPosition().row,n=s.session.selection;if(t.getShiftKey())n.selectTo(r,0);else{if(2==t.domEvent.detail)return s.selectAll(),t.preventDefault();e.$clickSelection=s.selection.getLineRange(r)}return e.setState(\"selectByLines\"),e.captureMouse(t),t.preventDefault()}}),e.editor.setDefaultHandler(\"guttermousemove\",function(o){var a=o.domEvent.target||o.domEvent.srcElement;if(n.hasCssClass(a,\"ace_fold-widget\"))return u();i&&e.$tooltipFollowsMouse&&d(o),r=o,t||(t=setTimeout(function(){t=null,r&&!e.isMousePressed?function(){var t=r.getDocumentPosition().row,n=l.$annotations[t];if(!n)return u();if(t==s.session.getLength()){var o=s.renderer.pixelToScreenCoordinates(0,r.y).row,a=r.$pos;if(o>s.session.documentToScreenRow(a.row,a.column))return u()}if(i!=n)if(i=n.text.join(\"<br/>\"),c.setHtml(i),c.show(),s._signal(\"showGutterTooltip\",c),s.on(\"mousewheel\",u),e.$tooltipFollowsMouse)d(r);else{var g=r.domEvent.target.getBoundingClientRect(),h=c.getElement().style;h.left=g.right+\"px\",h.top=g.bottom+\"px\"}}():u()},50))}),o.addListener(s.renderer.$gutter,\"mouseout\",function(e){r=null,i&&!t&&(t=setTimeout(function(){t=null,u()},50))}),s.on(\"changeSession\",u)}}),ace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,r){\"use strict\";var n=e(\"../lib/event\"),i=e(\"../lib/useragent\"),o=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){n.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){n.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return n.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(o.prototype)}),ace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,r){\"use strict\";var n=e(\"../lib/dom\"),i=e(\"../lib/event\"),o=e(\"../lib/useragent\");function s(e){var t=e.editor,r=n.createElement(\"img\");r.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",o.isOpera&&(r.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\");[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"].forEach(function(t){e[t]=this[t]},this),t.addEventListener(\"mousedown\",this.onMouseDown.bind(e));var s,l,c,u,d,g,h,m,p,_,f,b=t.container,y=0;function x(){var e=g;(function(e,r){var n=Date.now(),i=!r||e.row!=r.row,o=!r||e.column!=r.column;!_||i||o?(t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,_=n,f={x:l,y:c}):a(f.x,f.y,l,c)>5?_=null:n-_>=200&&(t.renderer.scrollCursorIntoView(),_=null)})(g=t.renderer.screenToTextCoordinates(l,c),e),function(e,r){var n=Date.now(),i=t.renderer.layerConfig.lineHeight,o=t.renderer.layerConfig.characterWidth,s=t.renderer.scroller.getBoundingClientRect(),a={x:{left:l-s.left,right:s.right-l},y:{top:c-s.top,bottom:s.bottom-c}},u=Math.min(a.x.left,a.x.right),d=Math.min(a.y.top,a.y.bottom),g={row:e.row,column:e.column};u/o<=2&&(g.column+=a.x.left<a.x.right?-3:2),d/i<=1&&(g.row+=a.y.top<a.y.bottom?-1:1);var h=e.row!=g.row,m=e.column!=g.column,_=!r||e.row!=r.row;h||m&&!_?p?n-p>=200&&t.renderer.scrollCursorIntoView(g):p=n:p=null}(g,e)}function v(){d=t.selection.toOrientedRange(),s=t.session.addMarker(d,\"ace_selection\",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(u),x(),u=setInterval(x,20),y=0,i.addListener(document,\"mousemove\",C)}function w(){clearInterval(u),t.session.removeMarker(s),s=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(d),t.$blockScrolling-=1,t.isFocused()&&!m&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),d=null,g=null,y=0,p=null,_=null,i.removeListener(document,\"mousemove\",C)}this.onDragStart=function(e){if(this.cancelDrag||!b.draggable){var n=this;return setTimeout(function(){n.startSelect(),n.captureMouse(e)},0),e.preventDefault()}d=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?\"copy\":\"copyMove\",o.isOpera&&(t.container.appendChild(r),r.scrollTop=0),i.setDragImage&&i.setDragImage(r,0,0),o.isOpera&&t.container.removeChild(r),i.clearData(),i.setData(\"Text\",t.session.getTextRange()),m=!0,this.setState(\"drag\")},this.onDragEnd=function(e){if(b.draggable=!1,m=!1,this.setState(null),!t.getReadOnly()){var r=e.dataTransfer.dropEffect;h||\"move\"!=r||t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\")},this.onDragEnter=function(e){if(!t.getReadOnly()&&A(e.dataTransfer))return l=e.clientX,c=e.clientY,s||v(),y++,e.dataTransfer.dropEffect=h=S(e),i.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&A(e.dataTransfer))return l=e.clientX,c=e.clientY,s||(v(),y++),null!==k&&(k=null),e.dataTransfer.dropEffect=h=S(e),i.preventDefault(e)},this.onDragLeave=function(e){if(--y<=0&&s)return w(),h=null,i.preventDefault(e)},this.onDrop=function(e){if(g){var r=e.dataTransfer;if(m)switch(h){case\"move\":d=d.contains(g.row,g.column)?{start:g,end:g}:t.moveText(d,g);break;case\"copy\":d=t.moveText(d,g,!0)}else{var n=r.getData(\"Text\");d={start:g,end:t.session.insert(g,n)},t.focus(),h=null}return w(),i.preventDefault(e)}},i.addListener(b,\"dragstart\",this.onDragStart.bind(e)),i.addListener(b,\"dragend\",this.onDragEnd.bind(e)),i.addListener(b,\"dragenter\",this.onDragEnter.bind(e)),i.addListener(b,\"dragover\",this.onDragOver.bind(e)),i.addListener(b,\"dragleave\",this.onDragLeave.bind(e)),i.addListener(b,\"drop\",this.onDrop.bind(e));var k=null;function C(){null==k&&(k=setTimeout(function(){null!=k&&s&&w()},20))}function A(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return\"text/plain\"==e||\"Text\"==e})}function S(e){var t=[\"copy\",\"copymove\",\"all\",\"uninitialized\"],r=o.isMac?e.altKey:e.ctrlKey,n=\"uninitialized\";try{n=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var i=\"none\";return r&&t.indexOf(n)>=0?i=\"copy\":[\"move\",\"copymove\",\"linkmove\",\"all\",\"uninitialized\"].indexOf(n)>=0?i=\"move\":t.indexOf(n)>=0&&(i=\"copy\"),i}}function a(e,t,r,n){return Math.sqrt(Math.pow(r-e,2)+Math.pow(n-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle(\"ace_dragging\");var t=o.isWin?\"default\":\"move\";e.renderer.setCursorStyle(t),this.setState(\"dragReady\")},this.onMouseDrag=function(e){var t=this.editor.container;o.isIE&&\"dragReady\"==this.state&&(a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&t.dragDrop());\"dragWait\"===this.state&&(a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition())))},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,r=e.inSelection(),n=e.getButton();if(1===(e.domEvent.detail||1)&&0===n&&r){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var i=e.domEvent.target||e.domEvent.srcElement;if(\"unselectable\"in i&&(i.unselectable=\"on\"),t.getDragDelay()){if(o.isWebKit)this.cancelDrag=!0,t.container.draggable=!0;this.setState(\"dragWait\")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(s.prototype),t.DragdropHandler=s}),ace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,r){\"use strict\";var n=e(\"./dom\");t.get=function(e,t){var r=new XMLHttpRequest;r.open(\"GET\",e,!0),r.onreadystatechange=function(){4===r.readyState&&t(r.responseText)},r.send(null)},t.loadScript=function(e,t){var r=n.getDocumentHead(),i=document.createElement(\"script\");i.src=e,r.appendChild(i),i.onload=i.onreadystatechange=function(e,r){!r&&i.readyState&&\"loaded\"!=i.readyState&&\"complete\"!=i.readyState||(i=i.onload=i.onreadystatechange=null,r||t())}},t.qualifyURL=function(e){var t=document.createElement(\"a\");return t.href=e,t.href}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n={},i=function(){this.propagationStopped=!0},o=function(){this.defaultPrevented=!0};n._emit=n._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var r=this._eventRegistry[e]||[],n=this._defaultHandlers[e];if(r.length||n){\"object\"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=o),r=r.slice();for(var s=0;s<r.length&&(r[s](t,this),!t.propagationStopped);s++);return n&&!t.defaultPrevented?n(t,this):void 0}},n._signal=function(e,t){var r=(this._eventRegistry||{})[e];if(r){r=r.slice();for(var n=0;n<r.length;n++)r[n](t,this)}},n.once=function(e,t){var r=this;t&&this.addEventListener(e,function n(){r.removeEventListener(e,n),t.apply(null,arguments)})},n.setDefaultHandler=function(e,t){var r=this._defaultHandlers;if(r||(r=this._defaultHandlers={_disabled_:{}}),r[e]){var n=r[e],i=r._disabled_[e];i||(r._disabled_[e]=i=[]),i.push(n);var o=i.indexOf(t);-1!=o&&i.splice(o,1)}r[e]=t},n.removeDefaultHandler=function(e,t){var r=this._defaultHandlers;if(r){var n=r._disabled_[e];if(r[e]==t){r[e];n&&this.setDefaultHandler(e,n.pop())}else if(n){var i=n.indexOf(t);-1!=i&&n.splice(i,1)}}},n.on=n.addEventListener=function(e,t,r){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];return n||(n=this._eventRegistry[e]=[]),-1==n.indexOf(t)&&n[r?\"unshift\":\"push\"](t),t},n.off=n.removeListener=n.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];if(r){var n=r.indexOf(t);-1!==n&&r.splice(n,1)}},n.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=n}),ace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,r){var n=e(\"./oop\"),i=e(\"./event_emitter\").EventEmitter,o={setOptions:function(e){Object.keys(e).forEach(function(t){this.setOption(t,e[t])},this)},getOptions:function(e){var t={};return e?Array.isArray(e)||(t=e,e=Object.keys(t)):e=Object.keys(this.$options),e.forEach(function(e){t[e]=this.getOption(e)},this),t},setOption:function(e,t){if(this[\"$\"+e]!==t){var r=this.$options[e];if(!r)return s('misspelled option \"'+e+'\"');if(r.forwardTo)return this[r.forwardTo]&&this[r.forwardTo].setOption(e,t);r.handlesSet||(this[\"$\"+e]=t),r&&r.set&&r.set.call(this,t)}},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this[\"$\"+e]:s('misspelled option \"'+e+'\"')}};function s(e){\"undefined\"!=typeof console&&console.warn&&console.warn.apply(console,arguments)}function a(e,t){var r=new Error(e);r.data=t,\"object\"==typeof console&&console.error&&console.error(r),setTimeout(function(){throw r})}var l=function(){this.$defaultOptions={}};(function(){n.implement(this,i),this.defineOptions=function(e,t,r){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(r).forEach(function(t){var n=r[t];\"string\"==typeof n&&(n={forwardTo:n}),n.name||(n.name=t),e.$options[n.name]=n,\"initialValue\"in n&&(e[\"$\"+n.name]=n.initialValue)}),n.implement(e,o),this},this.resetOptions=function(e){Object.keys(e.$options).forEach(function(t){var r=e.$options[t];\"value\"in r&&e.setOption(t,r.value)})},this.setDefaultValue=function(e,t,r){var n=this.$defaultOptions[e]||(this.$defaultOptions[e]={});n[t]&&(n.forwardTo?this.setDefaultValue(n.forwardTo,t,r):n[t].value=r)},this.setDefaultValues=function(e,t){Object.keys(t).forEach(function(r){this.setDefaultValue(e,r,t[r])},this)},this.warn=s,this.reportError=a}).call(l.prototype),t.AppConfig=l}),ace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"],function(e,t,r){var n=e(\"./lib/lang\"),i=(e(\"./lib/oop\"),e(\"./lib/net\")),o=e(\"./lib/app_config\").AppConfig;r.exports=t=new o;var s=function(){return this||\"undefined\"!=typeof window&&window}(),a={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:\"\",suffix:\".js\",$moduleUrls:{}};function l(n){if(s&&s.document){a.packaged=n||e.packaged||r.packaged||s.define&&define.packaged;for(var i={},o=\"\",l=document.currentScript||document._currentScript,u=(l&&l.ownerDocument||document).getElementsByTagName(\"script\"),d=0;d<u.length;d++){var g=u[d],h=g.src||g.getAttribute(\"src\");if(h){for(var m=g.attributes,p=0,_=m.length;p<_;p++){var f=m[p];0===f.name.indexOf(\"data-ace-\")&&(i[c(f.name.replace(/^data-ace-/,\"\"))]=f.value)}var b=h.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);b&&(o=b[1])}}for(var y in o&&(i.base=i.base||o,i.packaged=!0),i.basePath=i.base,i.workerPath=i.workerPath||i.base,i.modePath=i.modePath||i.base,i.themePath=i.themePath||i.base,delete i.base,i)void 0!==i[y]&&t.set(y,i[y])}}function c(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCase()})}t.get=function(e){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);return a[e]},t.set=function(e,t){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);a[e]=t},t.all=function(){return n.copyObject(a)},t.moduleUrl=function(e,t){if(a.$moduleUrls[e])return a.$moduleUrls[e];var r=e.split(\"/\"),n=\"snippets\"==(t=t||r[r.length-2]||\"\")?\"/\":\"-\",i=r[r.length-1];if(\"worker\"==t&&\"-\"==n){var o=new RegExp(\"^\"+t+\"[\\\\-_]|[\\\\-_]\"+t+\"$\",\"g\");i=i.replace(o,\"\")}(!i||i==t)&&r.length>1&&(i=r[r.length-2]);var s=a[t+\"Path\"];return null==s?s=a.basePath:\"/\"==n&&(t=n=\"\"),s&&\"/\"!=s.slice(-1)&&(s+=\"/\"),s+t+n+i+this.get(\"suffix\")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(r,n){var o,s;Array.isArray(r)&&(s=r[0],r=r[1]);try{o=e(r)}catch(e){}if(o&&!t.$loading[r])return n&&n(o);if(t.$loading[r]||(t.$loading[r]=[]),t.$loading[r].push(n),!(t.$loading[r].length>1)){var a=function(){e([r],function(e){t._emit(\"load.module\",{name:r,module:e});var n=t.$loading[r];t.$loading[r]=null,n.forEach(function(t){t&&t(e)})})};if(!t.get(\"packaged\"))return a();i.loadScript(t.moduleUrl(r,s),a)}},l(!0),t.init=l}),ace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"],function(e,t,r){\"use strict\";var n=e(\"../lib/event\"),i=e(\"../lib/useragent\"),o=e(\"./default_handlers\").DefaultHandlers,s=e(\"./default_gutter_handler\").GutterHandler,a=e(\"./mouse_event\").MouseEvent,l=e(\"./dragdrop_handler\").DragdropHandler,c=e(\"../config\"),u=function(e){var t=this;this.editor=e,new o(this),new s(this),new l(this);var r=function(t){(!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement()))&&window.focus(),e.focus()},a=e.renderer.getMouseEventTarget();n.addListener(a,\"click\",this.onMouseEvent.bind(this,\"click\")),n.addListener(a,\"mousemove\",this.onMouseMove.bind(this,\"mousemove\")),n.addMultiMouseDownListener([a,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,\"onMouseEvent\"),n.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,\"mousewheel\")),n.addTouchMoveListener(e.container,this.onTouchMove.bind(this,\"touchmove\"));var c=e.renderer.$gutter;n.addListener(c,\"mousedown\",this.onMouseEvent.bind(this,\"guttermousedown\")),n.addListener(c,\"click\",this.onMouseEvent.bind(this,\"gutterclick\")),n.addListener(c,\"dblclick\",this.onMouseEvent.bind(this,\"gutterdblclick\")),n.addListener(c,\"mousemove\",this.onMouseEvent.bind(this,\"guttermousemove\")),n.addListener(a,\"mousedown\",r),n.addListener(c,\"mousedown\",r),i.isIE&&e.renderer.scrollBarV&&(n.addListener(e.renderer.scrollBarV.element,\"mousedown\",r),n.addListener(e.renderer.scrollBarH.element,\"mousedown\",r)),e.on(\"mousemove\",function(r){if(!t.state&&!t.$dragDelay&&t.$dragEnabled){var n=e.renderer.screenToTextCoordinates(r.x,r.y),i=e.session.selection.getRange(),o=e.renderer;!i.isEmpty()&&i.insideStart(n.row,n.column)?o.setCursorStyle(\"default\"):o.setCursorStyle(\"\")}})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new a(t,this.editor))},this.onMouseMove=function(e,t){var r=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;r&&r.length&&this.editor._emit(e,new a(t,this.editor))},this.onMouseWheel=function(e,t){var r=new a(t,this.editor);r.speed=2*this.$scrollSpeed,r.wheelX=t.wheelX,r.wheelY=t.wheelY,this.editor._emit(e,r)},this.onTouchMove=function(e,t){var r=new a(t,this.editor);r.speed=1,r.wheelX=t.wheelX,r.wheelY=t.wheelY,this.editor._emit(e,r)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var r=this.editor.renderer;r.$keepTextAreaAtCursor&&(r.$keepTextAreaAtCursor=null);var o=this,s=function(e){if(e){if(i.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new a(e,o.editor),o.$mouseMoved=!0}},l=function(e){clearInterval(u),c(),o[o.state+\"End\"]&&o[o.state+\"End\"](e),o.state=\"\",null==r.$keepTextAreaAtCursor&&(r.$keepTextAreaAtCursor=!0,r.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent(\"mouseup\",e)},c=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(i.isOldIE&&\"dblclick\"==e.domEvent.type)return setTimeout(function(){l(e)});o.$onCaptureMouseMove=s,o.releaseMouse=n.capture(this.editor.container,s,l);var u=setInterval(c,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){t&&t.domEvent&&\"contextmenu\"!=t.domEvent.type||(this.editor.off(\"nativecontextmenu\",e),t&&t.domEvent&&n.stopEvent(t.domEvent))}.bind(this);setTimeout(e,10),this.editor.on(\"nativecontextmenu\",e)}}).call(u.prototype),c.defineOptions(u.prototype,\"mouseHandler\",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=u}),ace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";t.FoldHandler=function(e){e.on(\"click\",function(t){var r=t.getDocumentPosition(),n=e.session,i=n.getFoldAt(r.row,r.column,1);i&&(t.getAccelKey()?n.removeFold(i):n.expandFold(i),t.stop())}),e.on(\"gutterclick\",function(t){if(\"foldWidgets\"==e.renderer.$gutterLayer.getRegion(t)){var r=t.getDocumentPosition().row,n=e.session;n.foldWidgets&&n.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on(\"gutterdblclick\",function(t){if(\"foldWidgets\"==e.renderer.$gutterLayer.getRegion(t)){var r=t.getDocumentPosition().row,n=e.session,i=n.getParentFoldRangeData(r,!0),o=i.range||i.firstRange;if(o){r=o.start.row;var s=n.getFoldAt(r,n.getLine(r).length,1);s?n.removeFold(s):(n.addFold(\"...\",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}}),ace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"],function(e,t,r){\"use strict\";var n=e(\"../lib/keys\"),i=e(\"../lib/event\"),o=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){for(;t[t.length-1]&&t[t.length-1]!=this.$defaultHandler;)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){if(e){\"function\"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e);var r=this.$handlers.indexOf(e);-1!=r&&this.$handlers.splice(r,1),null==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==r&&e.attach&&e.attach(this.$editor)}},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(r){return r.getStatusText&&r.getStatusText(t,e)||\"\"}).filter(Boolean).join(\" \")},this.$callKeyboardHandlers=function(e,t,r,n){for(var o,s=!1,a=this.$editor.commands,l=this.$handlers.length;l--&&!((o=this.$handlers[l].handleKeyboard(this.$data,e,t,r,n))&&o.command&&((s=\"null\"==o.command||a.exec(o.command,this.$editor,o.args,n))&&n&&-1!=e&&1!=o.passEvent&&1!=o.command.passEvent&&i.stopEvent(n),s)););return s||-1!=e||(o={command:\"insertstring\"},s=a.exec(\"insertstring\",this.$editor,t)),s&&this.$editor._signal&&this.$editor._signal(\"keyboardActivity\",o),s},this.onCommandKey=function(e,t,r){var i=n.keyCodeToString(r);this.$callKeyboardHandlers(t,i,r,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(o.prototype),t.KeyBinding=o}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n=function(e,t,r,n){this.start={row:e,column:t},this.end={row:r,column:n}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,r=e.end,n=e.start;return 1==(t=this.compare(r.row,r.column))?1==(t=this.compare(n.row,n.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(n.row,n.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){\"object\"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){\"object\"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&(!this.isEnd(e,t)&&!this.isStart(e,t))},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:t<this.start.column?-1:t>this.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var r={row:t+1,column:0};else if(this.end.row<e)r={row:e,column:0};if(this.start.row>t)var i={row:t+1,column:0};else if(this.start.row<e)i={row:e,column:0};return n.fromPoints(i||this.start,r||this.end)},this.extend=function(e,t){var r=this.compare(e,t);if(0==r)return this;if(-1==r)var i={row:e,column:t};else var o={row:e,column:t};return n.fromPoints(i||this.start,o||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return n.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new n(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new n(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),r=e.documentToScreenPosition(this.end);return new n(t.row,t.column,r.row,r.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(n.prototype),n.fromPoints=function(e,t){return new n(e.row,e.column,t.row,t.column)},n.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},n.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=n}),ace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"./lib/oop\"),i=e(\"./lib/lang\"),o=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./range\").Range,a=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.lead=this.selectionLead=this.doc.createAnchor(0,0),this.anchor=this.selectionAnchor=this.doc.createAnchor(0,0);var t=this;this.lead.on(\"change\",function(e){t._emit(\"changeCursor\"),t.$isEmpty||t._emit(\"changeSelection\"),t.$keepDesiredColumnOnChange||e.old.column==e.value.column||(t.$desiredColumn=null)}),this.selectionAnchor.on(\"change\",function(){t.$isEmpty||t._emit(\"changeSelection\")})};(function(){n.implement(this,o),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.isEmpty()&&this.getRange().isMultiLine()},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.anchor.setPosition(e,t),this.$isEmpty&&(this.$isEmpty=!1,this._emit(\"changeSelection\"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.shiftSelection=function(e){if(this.$isEmpty)this.moveCursorTo(this.lead.row,this.lead.column+e);else{var t=this.getSelectionAnchor(),r=this.getSelectionLead(),n=this.isBackwards();n&&0===t.column||this.setSelectionAnchor(t.row,t.column+e),(n||0!==r.column)&&this.$moveSelection(function(){this.moveCursorTo(r.row,r.column+e)})}},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?s.fromPoints(t,t):this.isBackwards()?s.fromPoints(t,e):s.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit(\"changeSelection\"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(void 0===t){var r=e||this.lead;e=r.row,t=r.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var r,n=\"number\"==typeof e?e:this.lead.row,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,!0===t?new s(n,0,r,this.session.getLine(r).length):new s(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var r=this.session.getTabSize();this.session.isTabStop(t)&&this.doc.getLine(t.row).slice(t.column-r,t.column).split(\" \").length-1==r?this.moveCursorBy(0,-r):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var r=this.session.getTabSize();t=this.lead;this.session.isTabStop(t)&&this.doc.getLine(t.row).slice(t.column,t.column+r).split(\" \").length-1==r?this.moveCursorBy(0,r):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,r=this.session.documentToScreenRow(e,t),n=this.session.screenToDocumentPosition(r,0),i=this.session.getDisplayLine(e,null,n.row,n.column).match(/^\\s*/);i[0].length==t||this.session.$useEmacsStyleLineStart||(n.column+=i[0].length),this.moveCursorToPosition(n)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var r=this.session.getLine(t.row);if(t.column==r.length){var n=r.search(/\\s+$/);n>0&&(t.column=n)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,r=this.doc.getLine(e),n=r.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var i=this.session.getFoldAt(e,t,1);if(i)this.moveCursorTo(i.end.row,i.end.column);else{if(this.session.nonTokenRe.exec(n)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,n=r.substring(t)),t>=r.length)return this.moveCursorTo(e,r.length),this.moveCursorRight(),void(e<this.doc.getLength()-1&&this.moveCursorWordRight());this.session.tokenRe.exec(n)&&(t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)}},this.moveCursorLongWordLeft=function(){var e,t=this.lead.row,r=this.lead.column;if(e=this.session.getFoldAt(t,r,-1))this.moveCursorTo(e.start.row,e.start.column);else{var n=this.session.getFoldStringAt(t,r,-1);null==n&&(n=this.doc.getLine(t).substring(0,r));var o=i.stringReverse(n);if(this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0,this.session.nonTokenRe.exec(o)&&(r-=this.session.nonTokenRe.lastIndex,o=o.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0),r<=0)return this.moveCursorTo(t,0),this.moveCursorLeft(),void(t>0&&this.moveCursorWordLeft());this.session.tokenRe.exec(o)&&(r-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,r)}},this.$shortWordEndIndex=function(e){var t,r=0,n=/\\s/,i=this.session.tokenRe;if(i.lastIndex=0,this.session.tokenRe.exec(e))r=this.session.tokenRe.lastIndex;else{for(;(t=e[r])&&n.test(t);)r++;if(r<1)for(i.lastIndex=0;(t=e[r])&&!i.test(t);)if(i.lastIndex=0,r++,n.test(t)){if(r>2){r--;break}for(;(t=e[r])&&n.test(t);)r++;if(r>2)break}}return i.lastIndex=0,r},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,r=this.doc.getLine(e),n=r.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==r.length){var o=this.doc.getLength();do{e++,n=this.doc.getLine(e)}while(e<o&&/^\\s*$/.test(n));/^\\s+/.test(n)||(n=\"\"),t=0}var s=this.$shortWordEndIndex(n);this.moveCursorTo(e,t+s)},this.moveCursorShortWordLeft=function(){var e,t=this.lead.row,r=this.lead.column;if(e=this.session.getFoldAt(t,r,-1))return this.moveCursorTo(e.start.row,e.start.column);var n=this.session.getLine(t).substring(0,r);if(0===r){do{t--,n=this.doc.getLine(t)}while(t>0&&/^\\s*$/.test(n));r=n.length,/\\s+$/.test(n)||(n=\"\")}var o=i.stringReverse(n),s=this.$shortWordEndIndex(o);return this.moveCursorTo(t,r-s)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var r=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(this.$desiredColumn?r.column=this.$desiredColumn:this.$desiredColumn=r.column);var n=this.session.screenToDocumentPosition(r.row+e,r.column);0!==e&&0===t&&n.row===this.lead.row&&n.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[n.row]&&(n.row>0||e>0)&&n.row++,this.moveCursorTo(n.row,n.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,r){var n=this.session.getFoldAt(e,t,1);n&&(e=n.start.row,t=n.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,r||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,r){var n=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(n.row,n.column,r)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var r=this.getCursor();return s.fromPoints(t,r)}catch(e){return s.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else(e=this.getRange()).isBackwards=this.isBackwards();return e},this.fromJSON=function(e){if(null==e.start){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var r=s.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(r.cursor=r.start),this.addRange(r,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a}),ace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],function(e,t,r){\"use strict\";var n=e(\"./config\"),i=2e3,o=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var r=this.states[t],n=[],i=0,o=this.matchMappings[t]={defaultToken:\"text\"},s=\"g\",a=[],l=0;l<r.length;l++){var c=r[l];if(c.defaultToken&&(o.defaultToken=c.defaultToken),c.caseInsensitive&&(s=\"gi\"),null!=c.regex){c.regex instanceof RegExp&&(c.regex=c.regex.toString().slice(1,-1));var u=c.regex,d=new RegExp(\"(?:(\"+u+\")|(.))\").exec(\"a\").length-2;Array.isArray(c.token)?1==c.token.length||1==d?c.token=c.token[0]:d-1!=c.token.length?(this.reportError(\"number of classes and regexp groups doesn't match\",{rule:c,groupCount:d-1}),c.token=c.token[0]):(c.tokenArray=c.token,c.token=null,c.onMatch=this.$arrayTokens):\"function\"!=typeof c.token||c.onMatch||(c.onMatch=d>1?this.$applyToken:c.token),d>1&&(/\\\\\\d/.test(c.regex)?u=c.regex.replace(/\\\\([0-9]+)/g,function(e,t){return\"\\\\\"+(parseInt(t,10)+i+1)}):(d=1,u=this.removeCapturingGroups(c.regex)),c.splitRegex||\"string\"==typeof c.token||a.push(c)),o[i]=l,i+=d,n.push(u),c.onMatch||(c.onMatch=null)}}n.length||(o[0]=0,n.push(\"$\")),a.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,s)},this),this.regExps[t]=new RegExp(\"(\"+n.join(\")|(\")+\")|($)\",s)}};(function(){this.$setMaxTokenCount=function(e){i=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),r=this.token.apply(this,t);if(\"string\"==typeof r)return[{type:r,value:e}];for(var n=[],i=0,o=r.length;i<o;i++)t[i]&&(n[n.length]={type:r[i],value:t[i]});return n},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return\"text\";for(var r=[],n=this.tokenArray,i=0,o=n.length;i<o;i++)t[i+1]&&(r[r.length]={type:n[i],value:t[i+1]});return r},this.removeCapturingGroups=function(e){return e.replace(/\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,function(e,t){return t?\"(?:\":e})},this.createSplitterRegexp=function(e,t){if(-1!=e.indexOf(\"(?=\")){var r=0,n=!1,i={};e.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g,function(e,t,o,s,a,l){return n?n=\"]\"!=a:a?n=!0:s?(r==i.stack&&(i.end=l+1,i.stack=-1),r--):o&&(r++,1!=o.length&&(i.stack=r,i.start=l)),e}),null!=i.end&&/^\\)*$/.test(e.substr(i.end))&&(e=e.substring(0,i.start)+e.substr(i.end))}return\"^\"!=e.charAt(0)&&(e=\"^\"+e),\"$\"!=e.charAt(e.length-1)&&(e+=\"$\"),new RegExp(e,(t||\"\").replace(\"g\",\"\"))},this.getLineTokens=function(e,t){if(t&&\"string\"!=typeof t){var r=t.slice(0);\"#tmp\"===(t=r[0])&&(r.shift(),t=r.shift())}else r=[];var n=t||\"start\",o=this.states[n];o||(n=\"start\",o=this.states[n]);var s=this.matchMappings[n],a=this.regExps[n];a.lastIndex=0;for(var l,c=[],u=0,d=0,g={type:null,value:\"\"};l=a.exec(e);){var h=s.defaultToken,m=null,p=l[0],_=a.lastIndex;if(_-p.length>u){var f=e.substring(u,_-p.length);g.type==h?g.value+=f:(g.type&&c.push(g),g={type:h,value:f})}for(var b=0;b<l.length-2;b++)if(void 0!==l[b+1]){h=(m=o[s[b]]).onMatch?m.onMatch(p,n,r):m.token,m.next&&(n=\"string\"==typeof m.next?m.next:m.next(n,r),(o=this.states[n])||(this.reportError(\"state doesn't exist\",n),n=\"start\",o=this.states[n]),s=this.matchMappings[n],u=_,(a=this.regExps[n]).lastIndex=_);break}if(p)if(\"string\"==typeof h)m&&!1===m.merge||g.type!==h?(g.type&&c.push(g),g={type:h,value:p}):g.value+=p;else if(h){g.type&&c.push(g),g={type:null,value:\"\"};for(b=0;b<h.length;b++)c.push(h[b])}if(u==e.length)break;if(u=_,d++>i){for(d>2*e.length&&this.reportError(\"infinite loop with in ace tokenizer\",{startState:t,line:e});u<e.length;)g.type&&c.push(g),g={value:e.substring(u,u+=2e3),type:\"overflow\"};n=\"start\",r=[];break}}return g.type&&c.push(g),r.length>1&&r[0]!==n&&r.unshift(\"#tmp\",n),{tokens:c,state:r.length?r:n}},this.reportError=n.reportError}).call(o.prototype),t.Tokenizer=o}),ace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n=e(\"../lib/lang\"),i=function(){this.$rules={start:[{token:\"empty_line\",regex:\"^$\"},{defaultToken:\"text\"}]}};(function(){this.addRules=function(e,t){if(t)for(var r in e){for(var n=e[r],i=0;i<n.length;i++){var o=n[i];(o.next||o.onMatch)&&(\"string\"==typeof o.next&&0!==o.next.indexOf(t)&&(o.next=t+o.next),o.nextState&&0!==o.nextState.indexOf(t)&&(o.nextState=t+o.nextState))}this.$rules[t+r]=n}else for(var r in e)this.$rules[r]=e[r]},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,r,i,o){var s=\"function\"==typeof e?(new e).getRules():e;if(i)for(var a=0;a<i.length;a++)i[a]=t+i[a];else for(var l in i=[],s)i.push(t+l);if(this.addRules(s,t),r){var c=Array.prototype[o?\"push\":\"unshift\"];for(a=0;a<i.length;a++)c.apply(this.$rules[i[a]],n.deepCopy(r))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds};var e=function(e,t){return(\"start\"!=e||t.length)&&t.unshift(this.nextState,e),this.nextState},t=function(e,t){return t.shift(),t.shift()||\"start\"};this.normalizeRules=function(){var r=0,n=this.$rules;Object.keys(n).forEach(function i(o){var s=n[o];s.processed=!0;for(var a=0;a<s.length;a++){var l=s[a],c=null;Array.isArray(l)&&(c=l,l={}),!l.regex&&l.start&&(l.regex=l.start,l.next||(l.next=[]),l.next.push({defaultToken:l.token},{token:l.token+\".end\",regex:l.end||l.start,next:\"pop\"}),l.token=l.token+\".start\",l.push=!0);var u=l.next||l.push;if(u&&Array.isArray(u)){var d=l.stateName;d||(\"string\"!=typeof(d=l.token)&&(d=d[0]||\"\"),n[d]&&(d+=r++)),n[d]=u,l.next=d,i(d)}else\"pop\"==u&&(l.next=t);if(l.push&&(l.nextState=l.next||l.push,l.next=e,delete l.push),l.rules)for(var g in l.rules)n[g]?n[g].push&&n[g].push.apply(n[g],l.rules[g]):n[g]=l.rules[g];var h=\"string\"==typeof l?l:\"string\"==typeof l.include?l.include:\"\";if(h&&(c=n[h]),c){var m=[a,1].concat(c);l.noEscape&&(m=m.filter(function(e){return!e.next})),s.splice.apply(s,m),a--}l.keywordMap&&(l.token=this.createKeywordMapper(l.keywordMap,l.defaultToken||\"text\",l.caseInsensitive),delete l.defaultToken)}},this)},this.createKeywordMapper=function(e,t,r,n){var i=Object.create(null);return Object.keys(e).forEach(function(t){var o=e[t];r&&(o=o.toLowerCase());for(var s=o.split(n||\"|\"),a=s.length;a--;)i[s[a]]=t}),Object.getPrototypeOf(i)&&(i.__proto__=null),this.$keywordList=Object.keys(i),e=null,r?function(e){return i[e.toLowerCase()]||t}:function(e){return i[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(i.prototype),t.TextHighlightRules=i}),ace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n=function(){this.$behaviours={}};(function(){this.add=function(e,t,r){switch(void 0){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=r},this.addBehaviours=function(e){for(var t in e)for(var r in e[t])this.add(t,r,e[t][r])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if(\"function\"==typeof e)var r=(new e).getBehaviours(t);else r=e.getBehaviours(t);this.addBehaviours(r)},this.getBehaviours=function(e){if(e){for(var t={},r=0;r<e.length;r++)this.$behaviours[e[r]]&&(t[e[r]]=this.$behaviours[e[r]]);return t}return this.$behaviours}}).call(n.prototype),t.Behaviour=n}),ace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n=function(e,t,r){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var n=e.getTokenAt(t,r);this.$tokenIndex=n?n.index:-1};(function(){this.stepBackward=function(){for(this.$tokenIndex-=1;this.$tokenIndex<0;){if(this.$row-=1,this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){var e;for(this.$tokenIndex+=1;this.$tokenIndex>=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,r=e[t].start;if(void 0!==r)return r;for(r=0;t>0;)r+=e[t-=1].value.length;return r},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}}}).call(n.prototype),t.TokenIterator=n}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n,i=e(\"../../lib/oop\"),o=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,a=e(\"../../lib/lang\"),l=[\"text\",\"paren.rparen\",\"punctuation.operator\"],c=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],u={},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return n=u[t];n=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},g=function(e,t,r,n){var i=e.end.row-e.start.row;return{text:r+t+n,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},h=function(){this.add(\"braces\",\"insertion\",function(e,t,r,i,o){var s=r.getCursorPosition(),l=i.doc.getLine(s.row);if(\"{\"==o){d(r);var c=r.getSelectionRange(),u=i.doc.getTextRange(c);if(\"\"!==u&&\"{\"!==u&&r.getWrapBehavioursEnabled())return g(c,u,\"{\",\"}\");if(h.isSaneInsertion(r,i))return/[\\]\\}\\)]/.test(l[s.column])||r.inMultiSelectMode?(h.recordAutoInsert(r,i,\"}\"),{text:\"{}\",selection:[1,1]}):(h.recordMaybeInsert(r,i,\"{\"),{text:\"{\",selection:[1,1]})}else if(\"}\"==o){if(d(r),\"}\"==l.substring(s.column,s.column+1))if(null!==i.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row})&&h.isAutoInsertedClosing(s,l,o))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}else{if(\"\\n\"==o||\"\\r\\n\"==o){d(r);var m=\"\";if(h.isMaybeInsertedClosing(s,l)&&(m=a.stringRepeat(\"}\",n.maybeInsertedBrackets),h.clearMaybeInsertedClosing()),\"}\"===l.substring(s.column,s.column+1)){var p=i.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!p)return null;var _=this.$getIndent(i.getLine(p.row))}else{if(!m)return void h.clearMaybeInsertedClosing();_=this.$getIndent(l)}var f=_+i.getTabString();return{text:\"\\n\"+f+\"\\n\"+_+m,selection:[1,f.length,1,f.length]}}h.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,r,i,o){var s=i.doc.getTextRange(o);if(!o.isMultiLine()&&\"{\"==s){if(d(r),\"}\"==i.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,r,n,i){if(\"(\"==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(\"\"!==s&&r.getWrapBehavioursEnabled())return g(o,s,\"(\",\")\");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,\")\"),{text:\"()\",selection:[1,1]}}else if(\")\"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(\")\"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(\")\",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}),this.add(\"parens\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&\"(\"==o&&(d(r),\")\"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add(\"brackets\",\"insertion\",function(e,t,r,n,i){if(\"[\"==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(\"\"!==s&&r.getWrapBehavioursEnabled())return g(o,s,\"[\",\"]\");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,\"]\"),{text:\"[]\",selection:[1,1]}}else if(\"]\"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(\"]\"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(\"]\",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}),this.add(\"brackets\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&\"[\"==o&&(d(r),\"]\"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add(\"string_dquotes\",\"insertion\",function(e,t,r,n,i){if('\"'==i||\"'\"==i){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(i))return;d(r);var o=i,s=r.getSelectionRange(),a=n.doc.getTextRange(s);if(\"\"!==a&&\"'\"!==a&&'\"'!=a&&r.getWrapBehavioursEnabled())return g(s,a,o,o);if(!a){var l=r.getCursorPosition(),c=n.doc.getLine(l.row),u=c.substring(l.column-1,l.column),h=c.substring(l.column,l.column+1),m=n.getTokenAt(l.row,l.column),p=n.getTokenAt(l.row,l.column+1);if(\"\\\\\"==u&&m&&/escape/.test(m.type))return null;var _,f=m&&/string|escape/.test(m.type),b=!p||/string|escape/.test(p.type);if(h==o)(_=f!==b)&&/string\\.end/.test(p.type)&&(_=!1);else{if(f&&!b)return null;if(f&&b)return null;var y=n.$mode.tokenRe;y.lastIndex=0;var x=y.test(u);y.lastIndex=0;var v=y.test(u);if(x||v)return null;if(h&&!/[\\s;,.})\\]\\\\]/.test(h))return null;_=!0}return{text:_?o+o:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('\"'==o||\"'\"==o)&&(d(r),n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o))return i.end.column++,i})};h.isSaneInsertion=function(e,t){var r=e.getCursorPosition(),n=new s(t,r.row,r.column);if(!this.$matchTokenType(n.getCurrentToken()||\"text\",l)){var i=new s(t,r.row,r.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==r.row||this.$matchTokenType(n.getCurrentToken()||\"text\",c)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isAutoInsertedClosing(i,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=i.row,n.autoInsertedLineEnd=r+o.substr(i.column),n.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isMaybeInsertedClosing(i,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=i.row,n.maybeInsertedLineStart=o.substr(0,i.column)+r,n.maybeInsertedLineEnd=o.substr(i.column),n.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,r){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&r===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},i.inherits(h,o),t.CstyleBehaviour=h}),ace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";t.packages={},function(e){var r=/\\w{4}/g;for(var n in e)t.packages[n]=e[n].replace(r,\"\\\\u$&\")}({L:\"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",Ll:\"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",Lu:\"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",Lt:\"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",Lm:\"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",Lo:\"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",M:\"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",Mn:\"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",Mc:\"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",Me:\"0488048906DE20DD-20E020E2-20E4A670-A672\",N:\"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nd:\"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nl:\"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",No:\"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",P:\"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",Pd:\"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",Ps:\"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",Pe:\"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",Pi:\"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",Pf:\"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",Pc:\"005F203F20402054FE33FE34FE4D-FE4FFF3F\",Po:\"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",S:\"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",Sm:\"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",Sc:\"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",Sk:\"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",So:\"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",Z:\"002000A01680180E2000-200A20282029202F205F3000\",Zs:\"002000A01680180E2000-200A202F205F3000\",Zl:\"2028\",Zp:\"2029\",C:\"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",Cc:\"0000-001F007F-009F\",Cf:\"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",Co:\"E000-F8FF\",Cs:\"D800-DFFF\",Cn:\"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"})}),ace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../tokenizer\").Tokenizer,i=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,s=e(\"../unicode\"),a=e(\"../lib/lang\"),l=e(\"../token_iterator\").TokenIterator,c=e(\"../range\").Range,u=function(){this.HighlightRules=i};(function(){this.$defaultBehaviour=new o,this.tokenRe=new RegExp(\"^[\"+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+\"\\\\$_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+\"\\\\$_]|\\\\s])+\",\"g\"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new n(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart=\"\",this.blockComment=\"\",this.toggleCommentLines=function(e,t,r,n){var i=t.doc,o=!0,s=!0,l=1/0,c=t.getTabSize(),u=!1;if(this.lineCommentStart){if(Array.isArray(this.lineCommentStart))p=this.lineCommentStart.map(a.escapeRegExp).join(\"|\"),h=this.lineCommentStart[0];else p=a.escapeRegExp(this.lineCommentStart),h=this.lineCommentStart;p=new RegExp(\"^(\\\\s*)(?:\"+p+\") ?\"),u=t.getUseSoftTabs();b=function(e,t){var r=e.match(p);if(r){var n=r[1].length,o=r[0].length;g(e,n,o)||\" \"!=r[0][o-1]||o--,i.removeInLine(t,n,o)}};var d=h+\" \",g=(f=function(e,t){o&&!/\\S/.test(e)||(g(e,l,l)?i.insertInLine({row:t,column:l},d):i.insertInLine({row:t,column:l},h))},y=function(e,t){return p.test(e)},function(e,t,r){for(var n=0;t--&&\" \"==e.charAt(t);)n++;if(n%c!=0)return!1;for(n=0;\" \"==e.charAt(r++);)n++;return c>2?n%c!=c-1:n%c==0})}else{if(!this.blockComment)return!1;var h=this.blockComment.start,m=this.blockComment.end,p=new RegExp(\"^(\\\\s*)(?:\"+a.escapeRegExp(h)+\")\"),_=new RegExp(\"(?:\"+a.escapeRegExp(m)+\")\\\\s*$\"),f=function(e,t){y(e,t)||o&&!/\\S/.test(e)||(i.insertInLine({row:t,column:e.length},m),i.insertInLine({row:t,column:l},h))},b=function(e,t){var r;(r=e.match(_))&&i.removeInLine(t,e.length-r[0].length,e.length),(r=e.match(p))&&i.removeInLine(t,r[1].length,r[0].length)},y=function(e,r){if(p.test(e))return!0;for(var n=t.getTokens(r),i=0;i<n.length;i++)if(\"comment\"===n[i].type)return!0}}function x(e){for(var t=r;t<=n;t++)e(i.getLine(t),t)}var v=1/0;x(function(e,t){var r=e.search(/\\S/);-1!==r?(r<l&&(l=r),s&&!y(e,t)&&(s=!1)):v>e.length&&(v=e.length)}),l==1/0&&(l=v,o=!1,s=!1),u&&l%c!=0&&(l=Math.floor(l/c)*c),x(s?b:f)},this.toggleBlockComment=function(e,t,r,n){var i=this.blockComment;if(i){!i.start&&i[0]&&(i=i[0]);var o,s,a=(p=new l(t,n.row,n.column)).getCurrentToken(),u=(t.selection,t.selection.toOrientedRange());if(a&&/comment/.test(a.type)){for(var d,g;a&&/comment/.test(a.type);){if(-1!=(_=a.value.indexOf(i.start))){var h=p.getCurrentTokenRow(),m=p.getCurrentTokenColumn()+_;d=new c(h,m,h,m+i.start.length);break}a=p.stepBackward()}var p;for(a=(p=new l(t,n.row,n.column)).getCurrentToken();a&&/comment/.test(a.type);){var _;if(-1!=(_=a.value.indexOf(i.end))){h=p.getCurrentTokenRow(),m=p.getCurrentTokenColumn()+_;g=new c(h,m,h,m+i.end.length);break}a=p.stepForward()}g&&t.remove(g),d&&(t.remove(d),o=d.start.row,s=-i.start.length)}else s=i.start.length,o=r.start.row,t.insert(r.end,i.end),t.insert(r.start,i.start);u.start.row==o&&(u.start.column+=s),u.end.row==o&&(u.end.column+=s),t.selection.fromOrientedRange(u)}},this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.autoOutdent=function(e,t,r){},this.$getIndent=function(e){return e.match(/^\\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var r=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(t=0;t<r.length;t++)(function(e){var n=r[t],i=e[n];e[r[t]]=function(){return this.$delegator(n,arguments,i)}})(this)},this.$delegator=function(e,t,r){var n=t[0];\"string\"!=typeof n&&(n=n[0]);for(var i=0;i<this.$embeds.length;i++)if(this.$modes[this.$embeds[i]]){var o=n.split(this.$embeds[i]);if(!o[0]&&o[1]){t[0]=o[1];var s=this.$modes[this.$embeds[i]];return s[e].apply(s,t)}}var a=r.apply(this,t);return r?a:void 0},this.transformAction=function(e,t,r,n,i){if(this.$behaviour){var o=this.$behaviour.getBehaviours();for(var s in o)if(o[s][t]){var a=o[s][t].apply(this,arguments);if(a)return a}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,r=[];for(var n in t)for(var i=t[n],o=0,s=i.length;o<s;o++)if(\"string\"==typeof i[o].token)/keyword|support|storage/.test(i[o].token)&&r.push(i[o].regex);else if(\"object\"==typeof i[o].token)for(var a=0,l=i[o].token.length;a<l;a++)if(/keyword|support|storage/.test(i[o].token[a])){n=i[o].regex.match(/\\(.+?\\)/g)[a];r.push(n.substr(1,n.length-2))}this.completionKeywords=r}return e?r.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,r,n){return(this.$keywordList||this.$createKeywordList()).map(function(e){return{name:e,value:e,score:0,meta:\"keyword\"}})},this.$id=\"ace/mode/text\"}).call(u.prototype),t.Mode=u}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";t.applyDelta=function(e,t,r){var n=t.start.row,i=t.start.column,o=e[n]||\"\";switch(t.action){case\"insert\":if(1===t.lines.length)e[n]=o.substring(0,i)+t.lines[0]+o.substring(i);else{var s=[n,1].concat(t.lines);e.splice.apply(e,s),e[n]=o.substring(0,i)+e[n],e[n+t.lines.length-1]+=o.substring(i)}break;case\"remove\":var a=t.end.column,l=t.end.row;n===l?e[n]=o.substring(0,i)+o.substring(a):e.splice(n,l-n+1,o.substring(0,i)+e[l].substring(a))}}}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,r){\"use strict\";var n=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,o=t.Anchor=function(e,t,r){this.$onChange=this.onChange.bind(this),this.attach(e),void 0===r?this.setPosition(t.row,t.column):this.setPosition(t,r)};(function(){function e(e,t,r){var n=r?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&n}n.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(t){if(!(t.start.row==t.end.row&&t.start.row!=this.row||t.start.row>this.row)){var r=function(t,r,n){var i=\"insert\"==t.action,o=(i?1:-1)*(t.end.row-t.start.row),s=(i?1:-1)*(t.end.column-t.start.column),a=t.start,l=i?a:t.end;if(e(r,a,n))return{row:r.row,column:r.column};if(e(l,r,!n))return{row:r.row+o,column:r.column+(r.row==l.row?s:0)};return{row:a.row,column:a.column}}(t,{row:this.row,column:this.column},this.$insertRight);this.setPosition(r.row,r.column,!0)}},this.setPosition=function(e,t,r){var n;if(n=r?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=n.row||this.column!=n.column){var i={row:this.row,column:this.column};this.row=n.row,this.column=n.column,this._signal(\"change\",{old:i,value:n})}},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var r={};return e>=this.document.getLength()?(r.row=Math.max(0,this.document.getLength()-1),r.column=this.document.getLine(r.row).length):e<0?(r.row=0,r.column=0):(r.row=e,r.column=Math.min(this.document.getLine(r.row).length,Math.max(0,t))),t<0&&(r.column=0),r}}).call(o.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,r){\"use strict\";var n=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,o=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./range\").Range,a=e(\"./anchor\").Anchor,l=function(e){this.$lines=[\"\"],0===e.length?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){n.implement(this,o),this.setValue=function(e){var t=this.getLength()-1;this.remove(new s(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0===\"aaa\".split(/a/).length?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal(\"changeNewLineMode\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return\"\\r\\n\"==e||\"\\r\"==e||\"\\n\"==e},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||\"\").substring(e.start.column);var r=t.length-1;e.end.row-e.start.row==r&&(t[r]=t[r].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var r=this.clippedPos(e.row,e.column),n=this.pos(e.row,e.column+t.length);return this.applyDelta({start:r,end:n,action:\"insert\",lines:[t]},!0),this.clonePos(n)},this.clippedPos=function(e,t){var r=this.getLength();void 0===e?e=r:e<0?e=0:e>=r&&(e=r-1,t=void 0);var n=this.getLine(e);return null==t&&(t=n.length),{row:e,column:t=Math.min(Math.max(t,0),n.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var r=0;(e=Math.min(Math.max(e,0),this.getLength()))<this.getLength()?(t=t.concat([\"\"]),r=0):(t=[\"\"].concat(t),e--,r=this.$lines[e].length),this.insertMergedLines({row:e,column:r},t)},this.insertMergedLines=function(e,t){var r=this.clippedPos(e.row,e.column),n={row:r.row+t.length-1,column:(1==t.length?r.column:0)+t[t.length-1].length};return this.applyDelta({start:r,end:n,action:\"insert\",lines:t}),this.clonePos(n)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),r=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:r,action:\"remove\",lines:this.getLinesForRange({start:t,end:r})}),this.clonePos(t)},this.removeInLine=function(e,t,r){var n=this.clippedPos(e,t),i=this.clippedPos(e,r);return this.applyDelta({start:n,end:i,action:\"remove\",lines:this.getLinesForRange({start:n,end:i})},!0),this.clonePos(n)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1);var r=(t=Math.min(Math.max(0,t),this.getLength()-1))==this.getLength()-1&&e>0,n=t<this.getLength()-1,i=r?e-1:e,o=r?this.getLine(i).length:0,a=n?t+1:t,l=n?0:this.getLine(a).length,c=new s(i,o,a,l),u=this.$lines.slice(e,t+1);return this.applyDelta({start:c.start,end:c.end,action:\"remove\",lines:this.getLinesForRange(c)}),u},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){return e instanceof s||(e=s.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var r=\"insert\"==e.action;(r?e.lines.length<=1&&!e.lines[0]:!s.comparePoints(e.start,e.end))||(r&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){for(var r=e.lines,n=r.length,i=e.start.row,o=e.start.column,s=0,a=0;;){s=a,a+=t-1;var l=r.slice(s,a);if(a>n){e.lines=l,e.start.row=i+s,e.start.column=o;break}l.push(\"\"),this.applyDelta({start:this.pos(i+s,o),end:this.pos(i+a,o=0),action:e.action,lines:l},!0)}},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:\"insert\"==e.action?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var r=this.$lines||this.getAllLines(),n=this.getNewLineCharacter().length,i=t||0,o=r.length;i<o;i++)if((e-=r[i].length+n)<0)return{row:i,column:e+r[i].length+n};return{row:o-1,column:r[o-1].length}},this.positionToIndex=function(e,t){for(var r=this.$lines||this.getAllLines(),n=this.getNewLineCharacter().length,i=0,o=Math.min(e.row,r.length),s=t||0;s<o;++s)i+=r[s].length+n;return i+e.column}}).call(l.prototype),t.Document=l}),ace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,r){\"use strict\";var n=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,o=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var r=this;this.$worker=function(){if(r.running){for(var e=new Date,t=r.currentLine,n=-1,i=r.doc,o=t;r.lines[t];)t++;var s=i.getLength(),a=0;for(r.running=!1;t<s;){r.$tokenizeRow(t),n=t;do{t++}while(r.lines[t]);if(++a%5==0&&new Date-e>20){r.running=setTimeout(r.$worker,20);break}}r.currentLine=t,o<=n&&r.fireUpdateEvent(o,n)}}};(function(){n.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var r={first:e,last:t};this._signal(\"update\",{data:r})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,r=e.end.row-t;if(0===r)this.lines[t]=null;else if(\"remove\"==e.action)this.lines.splice(t,r+1,null),this.states.splice(t,r+1,null);else{var n=Array(r+1);n.unshift(t,1),this.lines.splice.apply(this.lines,n),this.states.splice.apply(this.states,n)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||\"start\"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),r=this.states[e-1],n=this.tokenizer.getLineTokens(t,r,e);return this.states[e]+\"\"!=n.state+\"\"?(this.states[e]=n.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=n.tokens}}).call(o.prototype),t.BackgroundTokenizer=o}),ace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"./lib/lang\"),i=(e(\"./lib/oop\"),e(\"./range\").Range),o=function(e,t,r){this.setRegexp(e),this.clazz=t,this.type=r||\"text\"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+\"\"!=e+\"\"&&(this.regExp=e,this.cache=[])},this.update=function(e,t,r,o){if(this.regExp)for(var s=o.firstRow,a=o.lastRow,l=s;l<=a;l++){var c=this.cache[l];null==c&&((c=n.getMatchOffsets(r.getLine(l),this.regExp)).length>this.MAX_RANGES&&(c=c.slice(0,this.MAX_RANGES)),c=c.map(function(e){return new i(l,e.offset,l,e.offset+e.length)}),this.cache[l]=c.length?c:\"\");for(var u=c.length;u--;)t.drawSingleLineMarker(e,c[u].toScreenRange(r),this.clazz,o)}}}).call(o.prototype),t.SearchHighlight=o}),ace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range;function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var r=t[t.length-1];this.range=new n(t[0].start.row,t[0].start.column,r.end.row,r.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,r){var n,i,o=0,s=this.folds,a=!0;null==t&&(t=this.end.row,r=this.end.column);for(var l=0;l<s.length;l++){if(-1==(i=(n=s[l]).range.compareStart(t,r)))return void e(null,t,r,o,a);if(!e(null,n.start.row,n.start.column,o,a)&&e(n.placeholder,n.start.row,n.start.column,o)||0===i)return;a=!n.sameRow,o=n.end.column}e(null,t,r,o,a)},this.getNextFoldTo=function(e,t){for(var r,n,i=0;i<this.folds.length;i++){if(-1==(n=(r=this.folds[i]).range.compareEnd(e,t)))return{fold:r,kind:\"after\"};if(0===n)return{fold:r,kind:\"inside\"}}return null},this.addRemoveChars=function(e,t,r){var n,i,o=this.getNextFoldTo(e,t);if(o)if(n=o.fold,\"inside\"==o.kind&&n.start.column!=t&&n.start.row!=e)window.console&&window.console.log(e,t,n);else if(n.start.row==e){var s=(i=this.folds).indexOf(n);for(0===s&&(this.start.column+=r);s<i.length;s++){if((n=i[s]).start.column+=r,!n.sameRow)return;n.end.column+=r}this.end.column+=r}},this.split=function(e,t){var r=this.getNextFoldTo(e,t);if(!r||\"inside\"==r.kind)return null;var n=r.fold,o=this.folds,s=this.foldData,a=o.indexOf(n),l=o[a-1];this.end.row=l.end.row,this.end.column=l.end.column;var c=new i(s,o=o.splice(a,o.length-a));return s.splice(s.indexOf(this)+1,0,c),c},this.merge=function(e){for(var t=e.folds,r=0;r<t.length;r++)this.addFold(t[r]);var n=this.foldData;n.splice(n.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+\": [\"];return this.folds.forEach(function(t){e.push(\"  \"+t.toString())}),e.push(\"]\"),e.join(\"\\n\")},this.idxToPosition=function(e){for(var t=0,r=0;r<this.folds.length;r++){var n=this.folds[r];if((e-=n.start.column-t)<0)return{row:n.start.row,column:n.start.column+e};if((e-=n.placeholder.length)<0)return n.start;t=n.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(i.prototype),t.FoldLine=i}),ace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"./range\").Range.comparePoints,i=function(){this.ranges=[]};(function(){this.comparePoints=n,this.pointIndex=function(e,t,r){for(var i=this.ranges,o=r||0;o<i.length;o++){var s=i[o],a=n(e,s.end);if(!(a>0)){var l=n(e,s.start);return 0===a?t&&0!==l?-o-2:o:l>0||0===l&&!t?o:-o-1}}return-o-1},this.add=function(e){var t=!e.isEmpty(),r=this.pointIndex(e.start,t);r<0&&(r=-r-1);var n=this.pointIndex(e.end,t,r);return n<0?n=-n-1:n++,this.ranges.splice(r,n-r,e)},this.addList=function(e){for(var t=[],r=e.length;r--;)t.push.apply(t,this.add(e[r]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){for(var e,t=[],r=this.ranges,i=(r=r.sort(function(e,t){return n(e.start,t.start)}))[0],o=1;o<r.length;o++){e=i,i=r[o];var s=n(e.end,i.start);s<0||(0!=s||e.isEmpty()||i.isEmpty())&&(n(e.end,i.end)<0&&(e.end.row=i.end.row,e.end.column=i.end.column),r.splice(o,1),t.push(i),i=e,o--)}return this.ranges=r,t},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var r=this.ranges;if(r[0].start.row>t||r[r.length-1].start.row<e)return[];var n=this.pointIndex({row:e,column:0});n<0&&(n=-n-1);var i=this.pointIndex({row:t,column:0},n);i<0&&(i=-i-1);for(var o=[],s=n;s<i;s++)o.push(r[s]);return o},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on(\"change\",this.onChange)},this.detach=function(){this.session&&(this.session.removeListener(\"change\",this.onChange),this.session=null)},this.$onChange=function(e){if(\"insert\"==e.action)var t=e.start,r=e.end;else r=e.start,t=e.end;for(var n=t.row,i=r.row-n,o=-t.column+r.column,s=this.ranges,a=0,l=s.length;a<l;a++){if(!((c=s[a]).end.row<n)){if(c.start.row>n)break;if(c.start.row==n&&c.start.column>=t.column&&(c.start.column==t.column&&this.$insertRight||(c.start.column+=o,c.start.row+=i)),c.end.row==n&&c.end.column>=t.column){if(c.end.column==t.column&&this.$insertRight)continue;c.end.column==t.column&&o>0&&a<l-1&&c.end.column>c.start.column&&c.end.column==s[a+1].start.column&&(c.end.column-=o),c.end.column+=o,c.end.row+=i}}}if(0!=i&&a<l)for(;a<l;a++){var c;(c=s[a]).start.row+=i,c.end.row+=i}}}).call(i.prototype),t.RangeList=i}),ace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"],function(e,t,r){\"use strict\";e(\"../range\").Range;var n=e(\"../range_list\").RangeList,i=e(\"../lib/oop\"),o=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]};function s(e,t){e.row-=t.row,0==e.row&&(e.column-=t.column)}function a(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row}i.inherits(o,n),function(){this.toString=function(){return'\"'+this.placeholder+'\" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach(function(t){t.setFoldLine(e)})},this.clone=function(){var e=this.range.clone(),t=new o(e,this.placeholder);return this.subFolds.forEach(function(e){t.subFolds.push(e.clone())}),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(!this.range.isEqual(e)){if(!this.range.containsRange(e))throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);var t,r;t=e,r=this.start,s(t.start,r),s(t.end,r);for(var n=e.start.row,i=e.start.column,o=0,a=-1;o<this.subFolds.length&&1==(a=this.subFolds[o].range.compare(n,i));o++);var l=this.subFolds[o];if(0==a)return l.addSubFold(e);n=e.range.end.row,i=e.range.end.column;var c=o;for(a=-1;c<this.subFolds.length&&1==(a=this.subFolds[c].range.compare(n,i));c++);this.subFolds[c];if(0==a)throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);this.subFolds.splice(o,c-o,e);return e.setFoldLine(this.foldLine),e}},this.restoreRange=function(e){return function(e,t){a(e.start,t),a(e.end,t)}(e,this.start)}}.call(o.prototype)}),ace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=e(\"./fold_line\").FoldLine,o=e(\"./fold\").Fold,s=e(\"../token_iterator\").TokenIterator;t.Folding=function(){this.getFoldAt=function(e,t,r){var n=this.getFoldLine(e);if(!n)return null;for(var i=n.folds,o=0;o<i.length;o++){var s=i[o];if(s.range.contains(e,t)){if(1==r&&s.range.isEnd(e,t))continue;if(-1==r&&s.range.isStart(e,t))continue;return s}}},this.getFoldsInRange=function(e){var t=e.start,r=e.end,n=this.$foldData,i=[];t.column+=1,r.column-=1;for(var o=0;o<n.length;o++){var s=n[o].range.compareRange(e);if(2!=s){if(-2==s)break;for(var a=n[o].folds,l=0;l<a.length;l++){var c=a[l];if(-2==(s=c.range.compareRange(e)))break;if(2!=s){if(42==s)break;i.push(c)}}}}return t.column-=1,r.column+=1,i},this.getFoldsInRangeList=function(e){if(Array.isArray(e)){var t=[];e.forEach(function(e){t=t.concat(this.getFoldsInRange(e))},this)}else t=this.getFoldsInRange(e);return t},this.getAllFolds=function(){for(var e=[],t=this.$foldData,r=0;r<t.length;r++)for(var n=0;n<t[r].folds.length;n++)e.push(t[r].folds[n]);return e},this.getFoldStringAt=function(e,t,r,n){if(!(n=n||this.getFoldLine(e)))return null;for(var i,o,s={end:{column:0}},a=0;a<n.folds.length;a++){var l=(o=n.folds[a]).range.compareEnd(e,t);if(-1==l){i=this.getLine(o.start.row).substring(s.end.column,o.start.column);break}if(0===l)return null;s=o}return i||(i=this.getLine(o.start.row).substring(s.end.column)),-1==r?i.substring(0,t-s.end.column):1==r?i.substring(t-s.end.column):i},this.getFoldLine=function(e,t){var r=this.$foldData,n=0;for(t&&(n=r.indexOf(t)),-1==n&&(n=0);n<r.length;n++){var i=r[n];if(i.start.row<=e&&i.end.row>=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var r=this.$foldData,n=0;for(t&&(n=r.indexOf(t)),-1==n&&(n=0);n<r.length;n++){var i=r[n];if(i.end.row>=e)return i}return null},this.getFoldedRowCount=function(e,t){for(var r=this.$foldData,n=t-e+1,i=0;i<r.length;i++){var o=r[i],s=o.end.row,a=o.start.row;if(s>=t){a<t&&(a>=e?n-=t-a:n=0);break}s>=e&&(n-=a>=e?s-a:s-e+1)}return n},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var r,n=this.$foldData,s=!1;e instanceof o?r=e:(r=new o(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(r.range);var a=r.start.row,l=r.start.column,c=r.end.row,u=r.end.column;if(!(a<c||a==c&&l<=u-2))throw new Error(\"The range has to be at least 2 characters width\");var d=this.getFoldAt(a,l,1),g=this.getFoldAt(c,u,-1);if(d&&g==d)return d.addSubFold(r);d&&!d.range.isStart(a,l)&&this.removeFold(d),g&&!g.range.isEnd(c,u)&&this.removeFold(g);var h=this.getFoldsInRange(r.range);h.length>0&&(this.removeFolds(h),h.forEach(function(e){r.addSubFold(e)}));for(var m=0;m<n.length;m++){var p=n[m];if(c==p.start.row){p.addFold(r),s=!0;break}if(a==p.end.row){if(p.addFold(r),s=!0,!r.sameRow){var _=n[m+1];if(_&&_.start.row==c){p.merge(_);break}}break}if(c<=p.start.row)break}return s||(p=this.$addFoldLine(new i(this.$foldData,r))),this.$useWrapMode?this.$updateWrapData(p.start.row,p.start.row):this.$updateRowLengthCache(p.start.row,p.start.row),this.$modified=!0,this._signal(\"changeFold\",{data:r,action:\"add\"}),r},this.addFolds=function(e){e.forEach(function(e){this.addFold(e)},this)},this.removeFold=function(e){var t=e.foldLine,r=t.start.row,n=t.end.row,i=this.$foldData,o=t.folds;if(1==o.length)i.splice(i.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))o.pop(),t.end.row=o[o.length-1].end.row,t.end.column=o[o.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))o.shift(),t.start.row=o[0].start.row,t.start.column=o[0].start.column;else if(e.sameRow)o.splice(o.indexOf(e),1);else{var s=t.split(e.start.row,e.start.column);(o=s.folds).shift(),s.start.row=o[0].start.row,s.start.column=o[0].start.column}this.$updating||(this.$useWrapMode?this.$updateWrapData(r,n):this.$updateRowLengthCache(r,n)),this.$modified=!0,this._signal(\"changeFold\",{data:e,action:\"remove\"})},this.removeFolds=function(e){for(var t=[],r=0;r<e.length;r++)t.push(e[r]);t.forEach(function(e){this.removeFold(e)},this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach(function(t){e.restoreRange(t),this.addFold(t)},this),e.collapseChildren>0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var r,i;if(null==e?(r=new n(0,0,this.getLength(),0),t=!0):r=\"number\"==typeof e?new n(e,0,e,this.getLine(e).length):\"row\"in e?n.fromPoints(e,e):e,i=this.getFoldsInRangeList(r),t)this.removeFolds(i);else for(var o=i;o.length;)this.expandFolds(o),o=this.getFoldsInRangeList(r);if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var r=this.getFoldLine(e,t);return r?r.end.row:e},this.getRowFoldStart=function(e,t){var r=this.getFoldLine(e,t);return r?r.start.row:e},this.getFoldDisplayLine=function(e,t,r,n,i){null==n&&(n=e.start.row),null==i&&(i=0),null==t&&(t=e.end.row),null==r&&(r=this.getLine(t).length);var o=this.doc,s=\"\";return e.walk(function(e,t,r,a){if(!(t<n)){if(t==n){if(r<i)return;a=Math.max(i,a)}s+=null!=e?e:o.getLine(t).substring(a,r)}},t,r),s},this.getDisplayLine=function(e,t,r,n){var i,o=this.getFoldLine(e);return o?this.getFoldDisplayLine(o,e,t,r,n):(i=this.doc.getLine(e)).substring(n||0,t||i.length)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map(function(t){var r=t.folds.map(function(e){return e.clone()});return new i(e,r)})},this.toggleFold=function(e){var t,r,n=this.selection.getRange();if(n.isEmpty()){var i=n.start;if(t=this.getFoldAt(i.row,i.column))return void this.expandFold(t);(r=this.findMatchingBracket(i))?1==n.comparePoint(r)?n.end=r:(n.start=r,n.start.column++,n.end.column--):(r=this.findMatchingBracket({row:i.row,column:i.column+1}))?(1==n.comparePoint(r)?n.end=r:n.start=r,n.start.column++):n=this.getCommentFoldRange(i.row,i.column)||n}else{var o=this.getFoldsInRange(n);if(e&&o.length)return void this.expandFolds(o);1==o.length&&(t=o[0])}if(t||(t=this.getFoldAt(n.start.row,n.start.column)),t&&t.range.toString()==n.toString())this.expandFold(t);else{var s=\"...\";if(!n.isMultiLine()){if((s=this.getTextRange(n)).length<4)return;s=s.trim().substring(0,2)+\"..\"}this.addFold(s,n)}},this.getCommentFoldRange=function(e,t,r){var i=new s(this,e,t),o=i.getCurrentToken();if(o&&/^comment|string/.test(o.type)){var a=new n,l=new RegExp(o.type.replace(/\\..*/,\"\\\\.\"));if(1!=r){do{o=i.stepBackward()}while(o&&l.test(o.type));i.stepForward()}if(a.start.row=i.getCurrentTokenRow(),a.start.column=i.getCurrentTokenColumn()+2,i=new s(this,e,t),-1!=r){do{o=i.stepForward()}while(o&&l.test(o.type));o=i.stepBackward()}else o=i.getCurrentToken();return a.end.row=i.getCurrentTokenRow(),a.end.column=i.getCurrentTokenColumn()+o.value.length-2,a}},this.foldAll=function(e,t,r){null==r&&(r=1e5);var n=this.foldWidgets;if(n){t=t||this.getLength();for(var i=e=e||0;i<t;i++)if(null==n[i]&&(n[i]=this.getFoldWidget(i)),\"start\"==n[i]){var o=this.getFoldWidgetRange(i);if(o&&o.isMultiLine()&&o.end.row<=t&&o.start.row>=e){i=o.end.row;try{var s=this.addFold(\"...\",o);s&&(s.collapseChildren=r)}catch(e){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle=\"markbegin\",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error(\"invalid fold style: \"+e+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");if(this.$foldStyle!=e){this.$foldStyle=e,\"manual\"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off(\"change\",this.$updateFoldWidgets),this.off(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets),this._signal(\"changeAnnotation\"),e&&\"manual\"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on(\"change\",this.$updateFoldWidgets),this.on(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var r=this.foldWidgets;if(!r||t&&r[e])return{};for(var n,i=e-1;i>=0;){var o=r[i];if(null==o&&(o=r[i]=this.getFoldWidget(i)),\"start\"==o){var s=this.getFoldWidgetRange(i);if(n||(n=s),s&&s.end.row>=e)break}i--}return{range:-1!==i&&s,firstRange:n}},this.onFoldWidgetClick=function(e,t){var r={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,r)){var n=t.target||t.srcElement;n&&/ace_fold-widget/.test(n.className)&&(n.className+=\" ace_invalid\")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var r=this.getFoldWidget(e),n=this.getLine(e),i=\"end\"===r?-1:1,o=this.getFoldAt(e,-1===i?0:n.length,i);if(o)return t.children||t.all?this.removeFold(o):this.expandFold(o),o;var s=this.getFoldWidgetRange(e,!0);if(s&&!s.isMultiLine()&&(o=this.getFoldAt(s.start.row,s.start.column,1))&&s.isEqual(o.range))return this.removeFold(o),o;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var l=a.range.start.row+1,c=a.range.end.row;this.foldAll(l,c,t.all?1e4:0)}else t.children?(c=s?s.end.row:this.getLength(),this.foldAll(e+1,c,t.all?1e4:0)):s&&(t.all&&(s.collapseChildren=1e4),this.addFold(\"...\",s));return s}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var r=this.$toggleFoldWidget(t,{});if(!r){var n=this.getParentFoldRangeData(t,!0);if(r=n.range||n.firstRange){t=r.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold(\"...\",r)}}},this.updateFoldWidgets=function(e){var t=e.start.row,r=e.end.row-t;if(0===r)this.foldWidgets[t]=null;else if(\"remove\"==e.action)this.foldWidgets.splice(t,r+1,null);else{var n=Array(r+1);n.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,n)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}}),ace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../token_iterator\").TokenIterator,i=e(\"../range\").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var r=t||this.getLine(e.row).charAt(e.column-1);if(\"\"==r)return null;var n=r.match(/([\\(\\[\\{])|([\\)\\]\\}])/);return n?n[1]?this.$findClosingBracket(n[1],e):this.$findOpeningBracket(n[2],e):null},this.getBracketRange=function(e){var t,r=this.getLine(e.row),n=!0,o=r.charAt(e.column-1),s=o&&o.match(/([\\(\\[\\{])|([\\)\\]\\}])/);if(s||(o=r.charAt(e.column),e={row:e.row,column:e.column+1},s=o&&o.match(/([\\(\\[\\{])|([\\)\\]\\}])/),n=!1),!s)return null;if(s[1]){if(!(a=this.$findClosingBracket(s[1],e)))return null;t=i.fromPoints(e,a),n||(t.end.column++,t.start.column--),t.cursor=t.end}else{var a;if(!(a=this.$findOpeningBracket(s[2],e)))return null;t=i.fromPoints(a,e),n||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\"},this.$findOpeningBracket=function(e,t,r){var i=this.$brackets[e],o=1,s=new n(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){r||(r=new RegExp(\"(\\\\.?\"+a.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end)\\b/,\"(?:start|begin|end)\")+\")+\"));for(var l=t.column-s.getCurrentTokenColumn()-2,c=a.value;;){for(;l>=0;){var u=c.charAt(l);if(u==i){if(0==(o-=1))return{row:s.getCurrentTokenRow(),column:l+s.getCurrentTokenColumn()}}else u==e&&(o+=1);l-=1}do{a=s.stepBackward()}while(a&&!r.test(a.type));if(null==a)break;l=(c=a.value).length-1}return null}},this.$findClosingBracket=function(e,t,r){var i=this.$brackets[e],o=1,s=new n(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){r||(r=new RegExp(\"(\\\\.?\"+a.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:start|begin)\\b/,\"(?:start|begin|end)\")+\")+\"));for(var l=t.column-s.getCurrentTokenColumn();;){for(var c=a.value,u=c.length;l<u;){var d=c.charAt(l);if(d==i){if(0==(o-=1))return{row:s.getCurrentTokenRow(),column:l+s.getCurrentTokenColumn()}}else d==e&&(o+=1);l+=1}do{a=s.stepForward()}while(a&&!r.test(a.type));if(null==a)break;l=0}return null}}}}),ace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"],function(e,t,r){\"use strict\";var n=e(\"./lib/oop\"),i=e(\"./lib/lang\"),o=e(\"./config\"),s=e(\"./lib/event_emitter\").EventEmitter,a=e(\"./selection\").Selection,l=e(\"./mode/text\").Mode,c=e(\"./range\").Range,u=e(\"./document\").Document,d=e(\"./background_tokenizer\").BackgroundTokenizer,g=e(\"./search_highlight\").SearchHighlight,h=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.id=\"session\"+ ++h.$uid,this.$foldData.toString=function(){return this.join(\"\\n\")},this.on(\"changeFold\",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this),\"object\"==typeof e&&e.getLine||(e=new u(e)),this.setDocument(e),this.selection=new a(this),o.resetOptions(this),this.setMode(t),o._signal(\"session\",this)};(function(){n.implement(this,s),this.setDocument=function(e){this.doc&&this.doc.removeListener(\"change\",this.$onChange),this.doc=e,e.on(\"change\",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e)return this.$docRowCache=[],void(this.$screenRowCache=[]);var t=this.$docRowCache.length,r=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>r&&(this.$docRowCache.splice(r,t),this.$screenRowCache.splice(r,t))},this.$getRowCacheIndex=function(e,t){for(var r=0,n=e.length-1;r<=n;){var i=r+n>>1,o=e[i];if(t>o)r=i+1;else{if(!(t<o))return i;n=i-1}}return r-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){this.$modified=!0,this.$resetRowCache(e.start.row);var t=this.$updateInternalDataOnChange(e);this.$fromUndo||!this.$undoManager||e.ignore||(this.$deltasDoc.push(e),t&&0!=t.length&&this.$deltasFold.push({action:\"removeFolds\",folds:t}),this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(e),this._signal(\"change\",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var r,n=this.bgTokenizer.getTokens(e),i=0;if(null==t)o=n.length-1,i=this.getLine(e).length;else for(var o=0;o<n.length&&!((i+=n[o].value.length)>=t);o++);return(r=n[o])?(r.index=o,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:\"fold\",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:\"doc\",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:\"aceupdate\",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(\" \",this.getTabSize()):\"\\t\"},this.setUseSoftTabs=function(e){this.setOption(\"useSoftTabs\",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption(\"tabSize\",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption(\"overwrite\",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=\"\"),this.$decorations[e]+=\" \"+t,this._signal(\"changeBreakpoint\",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||\"\").replace(\" \"+t,\"\"),this._signal(\"changeBreakpoint\",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]=\"ace_breakpoint\";this._signal(\"changeBreakpoint\",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal(\"changeBreakpoint\",{})},this.setBreakpoint=function(e,t){void 0===t&&(t=\"ace_breakpoint\"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.addMarker=function(e,t,r,n){var i=this.$markerId++,o={range:e,type:r||\"line\",renderer:\"function\"==typeof r?r:null,clazz:t,inFront:!!n,id:i};return n?(this.$frontMarkers[i]=o,this._signal(\"changeFrontMarker\")):(this.$backMarkers[i]=o,this._signal(\"changeBackMarker\")),i},this.addDynamicMarker=function(e,t){if(e.update){var r=this.$markerId++;return e.id=r,e.inFront=!!t,t?(this.$frontMarkers[r]=e,this._signal(\"changeFrontMarker\")):(this.$backMarkers[r]=e,this._signal(\"changeBackMarker\")),e}},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(t){var r=t.inFront?this.$frontMarkers:this.$backMarkers;t&&(delete r[e],this._signal(t.inFront?\"changeFrontMarker\":\"changeBackMarker\"))}},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new g(null,\"ace_selected-word\",\"text\");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,r,n){\"number\"!=typeof t&&(r=t,t=e),r||(r=\"ace_step\");var i=new c(e,0,t,1/0);return i.id=this.addMarker(i,r,\"fullLine\",n),i},this.setAnnotations=function(e){this.$annotations=e,this._signal(\"changeAnnotation\",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r?\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\"},this.getWordRange=function(e,t){var r=this.getLine(e),n=!1;if(t>0&&(n=!!r.charAt(t-1).match(this.tokenRe)),n||(n=!!r.charAt(t).match(this.tokenRe)),n)var i=this.tokenRe;else if(/^\\s+$/.test(r.slice(t-1,t+1)))i=/\\s/;else i=this.nonTokenRe;var o=t;if(o>0){do{o--}while(o>=0&&r.charAt(o).match(i));o++}for(var s=t;s<r.length&&r.charAt(s).match(i);)s++;return new c(e,o,e,s)},this.getAWordRange=function(e,t){for(var r=this.getWordRange(e,t),n=this.getLine(r.end.row);n.charAt(r.end.column).match(/[ \\t]/);)r.end.column+=1;return r},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption(\"useWorker\",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._signal(\"tokenizerUpdate\",e)},this.$modes={},this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&\"object\"==typeof e){if(e.getTokenizer)return this.$onChangeMode(e);var r=e,n=r.path}else n=e||\"ace/mode/text\";if(this.$modes[\"ace/mode/text\"]||(this.$modes[\"ace/mode/text\"]=new l),this.$modes[n]&&!r)return this.$onChangeMode(this.$modes[n]),void(t&&t());this.$modeId=n,o.loadModule([\"mode\",n],function(e){if(this.$modeId!==n)return t&&t();this.$modes[n]&&!r?this.$onChangeMode(this.$modes[n]):e&&e.Mode&&(e=new e.Mode(r),r||(this.$modes[n]=e,e.$id=n),this.$onChangeMode(e)),t&&t()}.bind(this)),this.$mode||this.$onChangeMode(this.$modes[\"ace/mode/text\"],!0)},this.$onChangeMode=function(e,t){if(t||(this.$modeId=e.$id),this.$mode!==e){this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker();var r=e.getTokenizer();if(void 0!==r.addEventListener){var n=this.onReloadTokenizer.bind(this);r.addEventListener(\"update\",n)}if(this.bgTokenizer)this.bgTokenizer.setTokenizer(r);else{this.bgTokenizer=new d(r);var i=this;this.bgTokenizer.addEventListener(\"update\",function(e){i._signal(\"tokenizerUpdate\",e)})}this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit(\"changeMode\"))}},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){o.warn(\"Could not load worker\",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){this.$scrollTop===e||isNaN(e)||(this.$scrollTop=e,this._signal(\"changeScrollTop\",e))},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){this.$scrollLeft===e||isNaN(e)||(this.$scrollLeft=e,this._signal(\"changeScrollLeft\",e))},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(null!=this.lineWidgetsWidth)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach(function(t){t&&t.screenWidth>e&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),r=this.$rowLengthCache,n=0,i=0,o=this.$foldData[i],s=o?o.start.row:1/0,a=t.length,l=0;l<a;l++){if(l>s){if((l=o.end.row+1)>=a)break;s=(o=this.$foldData[i++])?o.start.row:1/0}null==r[l]&&(r[l]=this.$getStringScreenWidth(t[l])[0]),r[l]>n&&(n=r[l])}this.screenWidth=n}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var r=null,n=e.length-1;-1!=n;n--){var i=e[n];\"doc\"==i.group?(this.doc.revertDeltas(i.deltas),r=this.$getUndoSelection(i.deltas,!0,r)):i.deltas.forEach(function(e){this.addFolds(e.folds)},this)}return this.$fromUndo=!1,r&&this.$undoSelect&&!t&&this.selection.setSelectionRange(r),r}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var r=null,n=0;n<e.length;n++){var i=e[n];\"doc\"==i.group&&(this.doc.applyDeltas(i.deltas),r=this.$getUndoSelection(i.deltas,!1,r))}return this.$fromUndo=!1,r&&this.$undoSelect&&!t&&this.selection.setSelectionRange(r),r}},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t,r){function n(e){return t?\"insert\"!==e.action:\"insert\"===e.action}var i,o,s=e[0];n(s)?i=c.fromPoints(s.start,s.end):i=c.fromPoints(s.start,s.start);for(var a=1;a<e.length;a++)n(s=e[a])?(o=s.start,-1==i.compare(o.row,o.column)&&i.setStart(o),o=s.end,1==i.compare(o.row,o.column)&&i.setEnd(o),!0):(o=s.start,-1==i.compare(o.row,o.column)&&(i=c.fromPoints(s.start,s.start)),!1);if(null!=r){0===c.comparePoints(r.start,i.start)&&(r.start.column+=i.end.column-i.start.column,r.end.column+=i.end.column-i.start.column);var l=r.compareRange(i);1==l?i.setStart(r.start):-1==l&&i.setEnd(r.end)}return i},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,r){var n=this.getTextRange(e),i=this.getFoldsInRange(e),o=c.fromPoints(t,t);if(!r){this.remove(e);var s=e.start.row-e.end.row;(u=s?-e.end.column:e.start.column-e.end.column)&&(o.start.row==e.end.row&&o.start.column>e.end.column&&(o.start.column+=u),o.end.row==e.end.row&&o.end.column>e.end.column&&(o.end.column+=u)),s&&o.start.row>=e.end.row&&(o.start.row+=s,o.end.row+=s)}if(o.end=this.insert(o.start,n),i.length){var a=e.start,l=o.start,u=(s=l.row-a.row,l.column-a.column);this.addFolds(i.map(function(e){return(e=e.clone()).start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=s,e.end.row+=s,e}))}return o},this.indentRows=function(e,t,r){r=r.replace(/\\t/g,this.getTabString());for(var n=e;n<=t;n++)this.doc.insertInLine({row:n,column:0},r)},this.outdentRows=function(e){for(var t=e.collapseRows(),r=new c(0,0,0,0),n=this.getTabSize(),i=t.start.row;i<=t.end.row;++i){var o=this.getLine(i);r.start.row=i,r.end.row=i;for(var s=0;s<n&&\" \"==o.charAt(s);++s);s<n&&\"\\t\"==o.charAt(s)?(r.start.column=s,r.end.column=s+1):(r.start.column=0,r.end.column=s),this.remove(r)}},this.$moveLines=function(e,t,r){if(e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t),r<0){if((i=this.getRowFoldStart(e+r))<0)return 0;var n=i-e}else if(r>0){var i;if((i=this.getRowFoldEnd(t+r))>this.doc.getLength()-1)return 0;n=i-t}else{e=this.$clipRowToDocument(e);n=(t=this.$clipRowToDocument(t))-e+1}var o=new c(e,0,t,Number.MAX_VALUE),s=this.getFoldsInRange(o).map(function(e){return(e=e.clone()).start.row+=n,e.end.row+=n,e}),a=0==r?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+n,a),s.length&&this.addFolds(s),n},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var r=this.doc.getLength();e>=r?(e=r-1,t=this.doc.getLine(r-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal(\"changeWrapMode\")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$useWrapMode&&this._signal(\"changeWrapMode\"))},this.adjustWrapLimit=function(e,t){var r=this.$wrapLimitRange;r.max<0&&(r={min:t,max:t});var n=this.$constrainWrapLimit(e,r.min,r.max);return n!=this.$wrapLimit&&n>1&&(this.$wrapLimit=n,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal(\"changeWrapLimit\")),!0)},this.$constrainWrapLimit=function(e,t,r){return t&&(e=Math.max(t,e)),r&&(e=Math.min(r,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,r=e.action,n=e.start,i=e.end,o=n.row,s=i.row,a=s-o,l=null;if(this.$updating=!0,0!=a)if(\"remove\"===r){this[t?\"$wrapData\":\"$rowLengthCache\"].splice(o,a);var c=this.$foldData;l=this.getFoldsInRange(e),this.removeFolds(l);var u=0;if(p=this.getFoldLine(i.row)){p.addRemoveChars(i.row,i.column,n.column-i.column),p.shiftRow(-a);var d=this.getFoldLine(o);d&&d!==p&&(d.merge(p),p=d),u=c.indexOf(p)+1}for(;u<c.length;u++){(p=c[u]).start.row>=i.row&&p.shiftRow(-a)}s=o}else{var g=Array(a);g.unshift(o,0);var h=t?this.$wrapData:this.$rowLengthCache;h.splice.apply(h,g);c=this.$foldData,u=0;if(p=this.getFoldLine(o)){var m=p.range.compareInside(n.row,n.column);0==m?(p=p.split(n.row,n.column))&&(p.shiftRow(a),p.addRemoveChars(s,0,i.column-n.column)):-1==m&&(p.addRemoveChars(o,0,i.column-n.column),p.shiftRow(a)),u=c.indexOf(p)+1}for(;u<c.length;u++){var p;(p=c[u]).start.row>=o&&p.shiftRow(a)}}else a=Math.abs(e.start.column-e.end.column),\"remove\"===r&&(l=this.getFoldsInRange(e),this.removeFolds(l),a=-a),(p=this.getFoldLine(o))&&p.addRemoveChars(o,n.column,a);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error(\"doc.getLength() and $wrapData.length have to be the same!\"),this.$updating=!1,t?this.$updateWrapData(o,s):this.$updateRowLengthCache(o,s),l},this.$updateRowLengthCache=function(e,t,r){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(r,n){var i,o,s=this.doc.getAllLines(),a=this.getTabSize(),l=this.$wrapData,c=this.$wrapLimit,u=r;for(n=Math.min(n,s.length-1);u<=n;)(o=this.getFoldLine(u,o))?(i=[],o.walk(function(r,n,o,a){var l;if(null!=r){(l=this.$getDisplayTokens(r,i.length))[0]=e;for(var c=1;c<l.length;c++)l[c]=t}else l=this.$getDisplayTokens(s[n].substring(a,o),i.length);i=i.concat(l)}.bind(this),o.end.row,s[o.end.row].length+1),l[o.start.row]=this.$computeWrapSplits(i,c,a),u=o.end.row+1):(i=this.$getDisplayTokens(s[u]),l[u]=this.$computeWrapSplits(i,c,a),u++)};var e=3,t=4;function r(e){return!(e<4352)&&(e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(r,n,i){if(0==r.length)return[];var o=[],s=r.length,a=0,l=0,c=this.$wrapAsCode,u=this.$indentedSoftWrap,d=n<=Math.max(2*i,8)||!1===u?0:Math.floor(n/2);function g(e){var t=r.slice(a,e),n=t.length;t.join(\"\").replace(/12/g,function(){n-=1}).replace(/2/g,function(){n-=1}),o.length||(h=function(){var e=0;if(0===d)return e;if(u)for(var t=0;t<r.length;t++){var n=r[t];if(10==n)e+=1;else{if(11!=n){if(12==n)continue;break}e+=i}}return c&&!1!==u&&(e+=i),Math.min(e,d)}(),o.indent=h),l+=n,o.push(l),a=e}for(var h=0;s-a>n-h;){var m=a+n-h;if(r[m-1]>=10&&r[m]>=10)g(m);else if(r[m]!=e&&r[m]!=t){for(var p=Math.max(m-(n-(n>>2)),a-1);m>p&&r[m]<e;)m--;if(c){for(;m>p&&r[m]<e;)m--;for(;m>p&&9==r[m];)m--}else for(;m>p&&r[m]<10;)m--;m>p?g(++m):(2==r[m=a+n]&&m--,g(m-h))}else{for(;m!=a-1&&r[m]!=e;m--);if(m>a){g(m);continue}for(m=a+n;m<r.length&&r[m]==t;m++);if(m==r.length)break;g(m)}}return o},this.$getDisplayTokens=function(e,t){var n,i=[];t=t||0;for(var o=0;o<e.length;o++){var s=e.charCodeAt(o);if(9==s){n=this.getScreenTabSize(i.length+t),i.push(11);for(var a=1;a<n;a++)i.push(12)}else 32==s?i.push(10):s>39&&s<48||s>57&&s<64?i.push(9):s>=4352&&r(s)?i.push(1,2):i.push(1)}return i},this.$getStringScreenWidth=function(e,t,n){if(0==t)return[0,0];var i,o;for(null==t&&(t=1/0),n=n||0,o=0;o<e.length&&(9==(i=e.charCodeAt(o))?n+=this.getScreenTabSize(n):i>=4352&&r(i)?n+=2:n+=1,!(n>t));o++);return[n,o]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),r=this.$wrapData[t.row];return r.length&&r[0]<t.column?r.indent:0}return 0},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var r=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(r)},this.getDocumentLastRowColumnPosition=function(e,t){var r=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(r,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:void 0},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t){if(e<0)return{row:0,column:0};var r,n,i=0,o=0,s=0,a=0,l=this.$screenRowCache,c=this.$getRowCacheIndex(l,e),u=l.length;if(u&&c>=0){s=l[c],i=this.$docRowCache[c];var d=e>l[u-1]}else d=!u;for(var g=this.getLength()-1,h=this.getNextFoldLine(i),m=h?h.start.row:1/0;s<=e&&!(s+(a=this.getRowLength(i))>e||i>=g);)s+=a,++i>m&&(i=h.end.row+1,m=(h=this.getNextFoldLine(i,h))?h.start.row:1/0),d&&(this.$docRowCache.push(i),this.$screenRowCache.push(s));if(h&&h.start.row<=i)r=this.getFoldDisplayLine(h),i=h.start.row;else{if(s+a<=e||i>g)return{row:g,column:this.getLine(g).length};r=this.getLine(i),h=null}var p=0;if(this.$useWrapMode){var _=this.$wrapData[i];if(_){var f=Math.floor(e-s);n=_[f],f>0&&_.length&&(p=_.indent,o=_[f-1]||_[_.length-1],r=r.substring(o))}}return o+=this.$getStringScreenWidth(r,t-p)[1],this.$useWrapMode&&o>=n&&(o=n-1),h?h.idxToPosition(o):{row:i,column:o}},this.documentToScreenPosition=function(e,t){if(void 0===t)var r=this.$clipPositionToDocument(e.row,e.column);else r=this.$clipPositionToDocument(e,t);e=r.row,t=r.column;var n,i=0,o=null;(n=this.getFoldAt(e,t,1))&&(e=n.start.row,t=n.start.column);var s,a=0,l=this.$docRowCache,c=this.$getRowCacheIndex(l,e),u=l.length;if(u&&c>=0){a=l[c],i=this.$screenRowCache[c];var d=e>l[u-1]}else d=!u;for(var g=this.getNextFoldLine(a),h=g?g.start.row:1/0;a<e;){if(a>=h){if((s=g.end.row+1)>e)break;h=(g=this.getNextFoldLine(s,g))?g.start.row:1/0}else s=a+1;i+=this.getRowLength(a),a=s,d&&(this.$docRowCache.push(a),this.$screenRowCache.push(i))}var m=\"\";g&&a>=h?(m=this.getFoldDisplayLine(g,e,t),o=g.start.row):(m=this.getLine(e).substring(0,t),o=e);var p=0;if(this.$useWrapMode){var _=this.$wrapData[o];if(_){for(var f=0;m.length>=_[f];)i++,f++;m=m.substring(_[f-1]||0,m.length),p=f>0?_.indent:0}}return{row:i,column:p+this.$getStringScreenWidth(m)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var r=this.$wrapData.length,n=0,i=(a=0,(t=this.$foldData[a++])?t.start.row:1/0);n<r;){var o=this.$wrapData[n];e+=o?o.length+1:1,++n>i&&(n=t.end.row+1,i=(t=this.$foldData[a++])?t.start.row:1/0)}else{e=this.getLength();for(var s=this.$foldData,a=0;a<s.length;a++)e-=(t=s[a]).end.row-t.start.row}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){this.$enableVarChar&&(this.$getStringScreenWidth=function(t,r,n){if(0===r)return[0,0];var i,o;for(r||(r=1/0),n=n||0,o=0;o<t.length&&!((n+=\"\\t\"===(i=t.charAt(o))?this.getScreenTabSize(n):e.getCharacterWidth(i))>r);o++);return[n,o]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(h.prototype),e(\"./edit_session/folding\").Folding.call(h.prototype),e(\"./edit_session/bracket_match\").BracketMatch.call(h.prototype),o.defineOptions(h.prototype,\"session\",{wrap:{set:function(e){if(e&&\"off\"!=e?\"free\"==e?e=!0:\"printMargin\"==e?e=-1:\"string\"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t=\"number\"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?\"printMargin\":this.getWrapLimitRange().min?this.$wrap:\"free\":\"off\"},handlesSet:!0},wrapMethod:{set:function(e){(e=\"auto\"==e?\"text\"!=this.$mode.type:\"text\"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:\"auto\"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){isNaN(e)||this.$tabSize===e||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal(\"changeTabSize\"))},initialValue:4,handlesSet:!0},overwrite:{set:function(e){this._signal(\"changeOverwrite\")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=h}),ace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"./lib/lang\"),i=e(\"./lib/oop\"),o=e(\"./range\").Range,s=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return n.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,r=this.$matchIterator(e,t);if(!r)return!1;var n=null;return r.forEach(function(e,r,i){if(e.start)n=e;else{var s=e.offset+(i||0);if(n=new o(r,s,r,s+e.length),!e.length&&t.start&&t.start.start&&0!=t.skipCurrent&&n.isEqual(t.start))return n=null,!1}return!0}),n},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var r=t.range,i=r?e.getLines(r.start.row,r.end.row):e.doc.getAllLines(),s=[],a=t.re;if(t.$isMultiLine){var l,c=a.length,u=i.length-c;e:for(var d=a.offset||0;d<=u;d++){for(var g=0;g<c;g++)if(-1==i[d+g].search(a[g]))continue e;var h=i[d],m=i[d+c-1],p=h.length-h.match(a[0])[0].length,_=m.match(a[c-1])[0].length;l&&l.end.row===d&&l.end.column>p||(s.push(l=new o(d,p,d+c-1,_)),c>2&&(d=d+c-2))}}else for(var f=0;f<i.length;f++){var b=n.getMatchOffsets(i[f],a);for(g=0;g<b.length;g++){var y=b[g];s.push(new o(f,y.offset,f,y.offset+y.length))}}if(r){var x=r.start.column,v=r.start.column;for(f=0,g=s.length-1;f<g&&s[f].start.column<x&&s[f].start.row==r.start.row;)f++;for(;f<g&&s[g].end.column>v&&s[g].end.row==r.end.row;)g--;for(s=s.slice(f,g+1),f=0,g=s.length;f<g;f++)s[f].start.row+=r.start.row,s[f].end.row+=r.start.row}return s},this.replace=function(e,t){var r=this.$options,n=this.$assembleRegExp(r);if(r.$isMultiLine)return t;if(n){var i=n.exec(e);if(!i||i[0].length!=e.length)return null;if(t=e.replace(n,t),r.preserveCase){t=t.split(\"\");for(var o=Math.min(e.length,e.length);o--;){var s=e[o];s&&s.toLowerCase()!=s?t[o]=t[o].toUpperCase():t[o]=t[o].toLowerCase()}t=t.join(\"\")}return t}},this.$matchIterator=function(e,t){var r,i=this.$assembleRegExp(t);if(!i)return!1;if(t.$isMultiLine)var s=i.length,a=function(t,n,a){var l=t.search(i[0]);if(-1!=l){for(var c=1;c<s;c++)if(-1==(t=e.getLine(n+c)).search(i[c]))return;var u=t.match(i[s-1])[0].length,d=new o(n,l,n+s-1,u);return 1==i.offset?(d.start.row--,d.start.column=Number.MAX_VALUE):a&&(d.start.column+=a),!!r(d)||void 0}};else if(t.backwards)a=function(e,t,o){for(var s=n.getMatchOffsets(e,i),a=s.length-1;a>=0;a--)if(r(s[a],t,o))return!0};else a=function(e,t,o){for(var s=n.getMatchOffsets(e,i),a=0;a<s.length;a++)if(r(s[a],t,o))return!0};var l=this.$lineIterator(e,t);return{forEach:function(e){r=e,l.forEach(a)}}},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var r=e.needle;if(!e.needle)return e.re=!1;e.regExp||(r=n.escapeRegExp(r)),e.wholeWord&&(r=function(e,t){function r(e){return/\\w/.test(e)||t.regExp?\"\\\\b\":\"\"}return r(e[0])+e+r(e[e.length-1])}(r,e));var i=e.caseSensitive?\"gm\":\"gmi\";if(e.$isMultiLine=!t&&/[\\n\\r]/.test(r),e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(r,i);try{var o=new RegExp(r,i)}catch(e){o=!1}return e.re=o},this.$assembleMultilineRegExp=function(e,t){for(var r=e.replace(/\\r\\n|\\r|\\n/g,\"$\\n^\").split(\"\\n\"),n=[],i=0;i<r.length;i++)try{n.push(new RegExp(r[i],t))}catch(e){return!1}return\"\"==r[0]?(n.shift(),n.offset=1):n.offset=0,n},this.$lineIterator=function(e,t){var r=1==t.backwards,n=0!=t.skipCurrent,i=t.range,o=t.start;o||(o=i?i[r?\"end\":\"start\"]:e.selection.getRange()),o.start&&(o=o[n!=r?\"end\":\"start\"]);var s=i?i.start.row:0,a=i?i.end.row:e.getLength()-1;return{forEach:r?function(r){var n=o.row;if(!r(e.getLine(n).substring(0,o.column),n)){for(n--;n>=s;n--)if(r(e.getLine(n),n))return;if(0!=t.wrap)for(n=a,s=o.row;n>=s;n--)if(r(e.getLine(n),n))return}}:function(r){var n=o.row;if(!r(e.getLine(n).substr(o.column),n,o.column)){for(n+=1;n<=a;n++)if(r(e.getLine(n),n))return;if(0!=t.wrap)for(n=s,a=o.row;n<=a;n++)if(r(e.getLine(n),n))return}}}}}).call(s.prototype),t.Search=s}),ace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,r){\"use strict\";var n=e(\"../lib/keys\"),i=e(\"../lib/useragent\"),o=n.KEY_MODS;function s(e,t){this.platform=t||(i.isMac?\"mac\":\"win\"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){s.call(this,e,t),this.$singleCommand=!1}a.prototype=s.prototype,function(){function e(e){return\"object\"==typeof e&&e.bindKey&&e.bindKey.position||0}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var r=e&&(\"string\"==typeof e?e:e.name);e=this.commands[r],t||delete this.commands[r];var n=this.commandKeyBinding;for(var i in n){var o=n[i];if(o==e)delete n[i];else if(Array.isArray(o)){var s=o.indexOf(e);-1!=s&&(o.splice(s,1),1==o.length&&(n[i]=o[0]))}}},this.bindKey=function(e,t,r){if(\"object\"==typeof e&&e&&(null==r&&(r=e.position),e=e[this.platform]),e)return\"function\"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split(\"|\").forEach(function(e){var n=\"\";if(-1!=e.indexOf(\" \")){var i=e.split(/\\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),r=o[t.hashId]+t.key;n+=(n?\" \":\"\")+r,this._addCommandToBinding(n,\"chainKeys\")},this),n+=\" \"}var s=this.parseKeys(e),a=o[s.hashId]+s.key;this._addCommandToBinding(n+a,t,r)},this)},this._addCommandToBinding=function(t,r,n){var i,o=this.commandKeyBinding;if(r)if(!o[t]||this.$singleCommand)o[t]=r;else{Array.isArray(o[t])?-1!=(i=o[t].indexOf(r))&&o[t].splice(i,1):o[t]=[o[t]],\"number\"!=typeof n&&(n=n||r.isDefault?-100:e(r));var s=o[t];for(i=0;i<s.length;i++){if(e(s[i])>n)break}s.splice(i,0,r)}else delete o[t]},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var r=e[t];if(r){if(\"string\"==typeof r)return this.bindKey(r,t);\"function\"==typeof r&&(r={exec:r}),\"object\"==typeof r&&(r.name||(r.name=t),this.addCommand(r))}},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(e){return e}),r=t.pop(),i=n[r];if(n.FUNCTION_KEYS[i])r=n.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:r,hashId:-1};if(1==t.length&&\"shift\"==t[0])return{key:r.toUpperCase(),hashId:-1}}for(var o=0,s=t.length;s--;){var a=n.KEY_MODS[t[s]];if(null==a)return\"undefined\"!=typeof console&&console.error(\"invalid modifier \"+t[s]+\" in \"+e),!1;o|=a}return{key:r,hashId:o}},this.findKeyCommand=function(e,t){var r=o[e]+t;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,r,n){if(!(n<0)){var i=o[t]+r,s=this.commandKeyBinding[i];return e.$keyChain&&(e.$keyChain+=\" \"+i,s=this.commandKeyBinding[e.$keyChain]||s),!s||\"chainKeys\"!=s&&\"chainKeys\"!=s[s.length-1]?(e.$keyChain&&(t&&4!=t||1!=r.length?(-1==t||n>0)&&(e.$keyChain=\"\"):e.$keyChain=e.$keyChain.slice(0,-i.length-1)),{command:s}):(e.$keyChain=e.$keyChain||i,{command:\"null\"})}},this.getStatusText=function(e,t){return t.$keyChain||\"\"}}.call(s.prototype),t.HashHandler=s,t.MultiHashHandler=a}),ace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../keyboard/hash_handler\").MultiHashHandler,o=e(\"../lib/event_emitter\").EventEmitter,s=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler(\"exec\",function(e){return e.command.exec(e.editor,e.args||{})})};n.inherits(s,i),function(){n.implement(this,o),this.exec=function(e,t,r){if(Array.isArray(e)){for(var n=e.length;n--;)if(this.exec(e[n],t,r))return!0;return!1}if(\"string\"==typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var i={editor:t,command:e,args:r};return i.returnValue=this._emit(\"exec\",i),this._signal(\"afterExec\",i),!1!==i.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit(\"changeStatus\"),this.recording?(this.macro.pop(),this.removeEventListener(\"exec\",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on(\"exec\",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){\"string\"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map(function(e){return\"string\"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(s.prototype),t.CommandManager=s}),ace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../lib/lang\"),i=e(\"../config\"),o=e(\"../range\").Range;function s(e,t){return{win:e,mac:t}}t.commands=[{name:\"showSettingsMenu\",bindKey:s(\"Ctrl-,\",\"Command-,\"),exec:function(e){i.loadModule(\"ace/ext/settings_menu\",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:\"goToNextError\",bindKey:s(\"Alt-E\",\"F4\"),exec:function(e){i.loadModule(\"ace/ext/error_marker\",function(t){t.showErrorMarker(e,1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"goToPreviousError\",bindKey:s(\"Alt-Shift-E\",\"Shift-F4\"),exec:function(e){i.loadModule(\"ace/ext/error_marker\",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"selectall\",bindKey:s(\"Ctrl-A\",\"Command-A\"),exec:function(e){e.selectAll()},readOnly:!0},{name:\"centerselection\",bindKey:s(null,\"Ctrl-L\"),exec:function(e){e.centerSelection()},readOnly:!0},{name:\"gotoline\",bindKey:s(\"Ctrl-L\",\"Command-L\"),exec:function(e){var t=parseInt(prompt(\"Enter line number:\"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:\"fold\",bindKey:s(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"unfold\",bindKey:s(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleFoldWidget\",bindKey:s(\"F2\",\"F2\"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleParentFoldWidget\",bindKey:s(\"Alt-F2\",\"Alt-F2\"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"foldall\",bindKey:s(null,\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAll()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldOther\",bindKey:s(\"Alt-0\",\"Command-Option-0\"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:\"center\",readOnly:!0},{name:\"unfoldall\",bindKey:s(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(e){e.session.unfold()},scrollIntoView:\"center\",readOnly:!0},{name:\"findnext\",bindKey:s(\"Ctrl-K\",\"Command-G\"),exec:function(e){e.findNext()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"findprevious\",bindKey:s(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(e){e.findPrevious()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"selectOrFindNext\",bindKey:s(\"Alt-K\",\"Ctrl-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:\"selectOrFindPrevious\",bindKey:s(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:\"find\",bindKey:s(\"Ctrl-F\",\"Command-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e)})},readOnly:!0},{name:\"overwrite\",bindKey:\"Insert\",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:\"selecttostart\",bindKey:s(\"Ctrl-Shift-Home\",\"Command-Shift-Home|Command-Shift-Up\"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",bindKey:s(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(e){e.navigateFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",bindKey:s(\"Shift-Up\",\"Shift-Up|Ctrl-Shift-P\"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golineup\",bindKey:s(\"Up\",\"Up|Ctrl-P\"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttoend\",bindKey:s(\"Ctrl-Shift-End\",\"Command-Shift-End|Command-Shift-Down\"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",bindKey:s(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(e){e.navigateFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",bindKey:s(\"Shift-Down\",\"Shift-Down|Ctrl-Shift-N\"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golinedown\",bindKey:s(\"Down\",\"Down|Ctrl-N\"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordleft\",bindKey:s(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordleft\",bindKey:s(\"Ctrl-Left\",\"Option-Left\"),exec:function(e){e.navigateWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolinestart\",bindKey:s(\"Alt-Shift-Left\",\"Command-Shift-Left|Ctrl-Shift-A\"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolinestart\",bindKey:s(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(e){e.navigateLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectleft\",bindKey:s(\"Shift-Left\",\"Shift-Left|Ctrl-Shift-B\"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoleft\",bindKey:s(\"Left\",\"Left|Ctrl-B\"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordright\",bindKey:s(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordright\",bindKey:s(\"Ctrl-Right\",\"Option-Right\"),exec:function(e){e.navigateWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolineend\",bindKey:s(\"Alt-Shift-Right\",\"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolineend\",bindKey:s(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(e){e.navigateLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectright\",bindKey:s(\"Shift-Right\",\"Shift-Right\"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoright\",bindKey:s(\"Right\",\"Right|Ctrl-F\"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectpagedown\",bindKey:\"Shift-PageDown\",exec:function(e){e.selectPageDown()},readOnly:!0},{name:\"pagedown\",bindKey:s(null,\"Option-PageDown\"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:\"gotopagedown\",bindKey:s(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:\"selectpageup\",bindKey:\"Shift-PageUp\",exec:function(e){e.selectPageUp()},readOnly:!0},{name:\"pageup\",bindKey:s(null,\"Option-PageUp\"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:\"gotopageup\",bindKey:\"PageUp\",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:\"scrollup\",bindKey:s(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"scrolldown\",bindKey:s(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"selectlinestart\",bindKey:\"Shift-Home\",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectlineend\",bindKey:\"Shift-End\",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"togglerecording\",bindKey:s(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:\"replaymacro\",bindKey:s(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:\"jumptomatching\",bindKey:s(\"Ctrl-P\",\"Ctrl-P\"),exec:function(e){e.jumpToMatching()},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"selecttomatching\",bindKey:s(\"Ctrl-Shift-P\",\"Ctrl-Shift-P\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"expandToMatching\",bindKey:s(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"passKeysToBrowser\",bindKey:s(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:\"copy\",exec:function(e){},readOnly:!0},{name:\"cut\",exec:function(e){var t=e.getSelectionRange();e._emit(\"cut\",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"paste\",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:\"cursor\"},{name:\"removeline\",bindKey:s(\"Ctrl-D\",\"Command-D\"),exec:function(e){e.removeLines()},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",bindKey:s(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(e){e.duplicateSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",bindKey:s(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(e){e.sortLines()},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",bindKey:s(\"Ctrl-/\",\"Command-/\"),exec:function(e){e.toggleCommentLines()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",bindKey:s(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(e){e.toggleBlockComment()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",bindKey:s(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(e){e.modifyNumber(1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",bindKey:s(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",bindKey:s(\"Ctrl-H\",\"Command-Option-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e,!0)})}},{name:\"undo\",bindKey:s(\"Ctrl-Z\",\"Command-Z\"),exec:function(e){e.undo()}},{name:\"redo\",bindKey:s(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(e){e.redo()}},{name:\"copylinesup\",bindKey:s(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(e){e.copyLinesUp()},scrollIntoView:\"cursor\"},{name:\"movelinesup\",bindKey:s(\"Alt-Up\",\"Option-Up\"),exec:function(e){e.moveLinesUp()},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",bindKey:s(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(e){e.copyLinesDown()},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",bindKey:s(\"Alt-Down\",\"Option-Down\"),exec:function(e){e.moveLinesDown()},scrollIntoView:\"cursor\"},{name:\"del\",bindKey:s(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(e){e.remove(\"right\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",bindKey:s(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(e){e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",bindKey:s(\"Shift-Delete\",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",bindKey:s(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(e){e.removeToLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",bindKey:s(\"Alt-Delete\",\"Ctrl-K\"),exec:function(e){e.removeToLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",bindKey:s(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(e){e.removeWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",bindKey:s(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(e){e.removeWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",bindKey:s(\"Shift-Tab\",\"Shift-Tab\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",bindKey:s(\"Tab\",\"Tab\"),exec:function(e){e.indent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",bindKey:s(\"Ctrl-[\",\"Ctrl-[\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",bindKey:s(\"Ctrl-]\",\"Ctrl-]\"),exec:function(e){e.blockIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",exec:function(e,t){e.insert(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",exec:function(e,t){e.insert(n.stringRepeat(t.text||\"\",t.times||1))},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",bindKey:s(null,\"Ctrl-O\"),exec:function(e){e.splitLine()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",bindKey:s(\"Ctrl-T\",\"Ctrl-T\"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:\"cursor\"},{name:\"touppercase\",bindKey:s(\"Ctrl-U\",\"Ctrl-U\"),exec:function(e){e.toUpperCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",bindKey:s(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(e){e.toLowerCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"expandtoline\",bindKey:s(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"joinlines\",bindKey:s(null,null),exec:function(e){for(var t=e.selection.isBackwards(),r=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),s=e.session.doc.getLine(r.row).length,a=e.session.doc.getTextRange(e.selection.getRange()).replace(/\\n\\s*/,\" \").length,l=e.session.doc.getLine(r.row),c=r.row+1;c<=i.row+1;c++){var u=n.stringTrimLeft(n.stringTrimRight(e.session.doc.getLine(c)));0!==u.length&&(u=\" \"+u),l+=u}i.row+1<e.session.doc.getLength()-1&&(l+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new o(r.row,0,i.row+2,0),l),a>0?(e.selection.moveCursorTo(r.row,r.column),e.selection.selectTo(r.row,r.column+a)):(s=e.session.doc.getLine(r.row).length>s?s+1:s,e.selection.moveCursorTo(r.row,s))},multiSelectAction:\"forEach\",readOnly:!0},{name:\"invertSelection\",bindKey:s(null,null),exec:function(e){var t=e.session.doc.getLength()-1,r=e.session.doc.getLine(t).length,n=e.selection.rangeList.ranges,i=[];n.length<1&&(n=[e.selection.getRange()]);for(var s=0;s<n.length;s++)s==n.length-1&&(n[s].end.row===t&&n[s].end.column===r||i.push(new o(n[s].end.row,n[s].end.column,t,r))),0===s?0===n[s].start.row&&0===n[s].start.column||i.push(new o(0,0,n[s].start.row,n[s].start.column)):i.push(new o(n[s-1].end.row,n[s-1].end.column,n[s].start.row,n[s].start.column));e.exitMultiSelectMode(),e.clearSelection();for(s=0;s<i.length;s++)e.selection.addRange(i[s],!1)},readOnly:!0,scrollIntoView:\"none\"}]}),ace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";e(\"./lib/fixoldbrowsers\");var n=e(\"./lib/oop\"),i=e(\"./lib/dom\"),o=e(\"./lib/lang\"),s=e(\"./lib/useragent\"),a=e(\"./keyboard/textinput\").TextInput,l=e(\"./mouse/mouse_handler\").MouseHandler,c=e(\"./mouse/fold_handler\").FoldHandler,u=e(\"./keyboard/keybinding\").KeyBinding,d=e(\"./edit_session\").EditSession,g=e(\"./search\").Search,h=e(\"./range\").Range,m=e(\"./lib/event_emitter\").EventEmitter,p=e(\"./commands/command_manager\").CommandManager,_=e(\"./commands/default_commands\").commands,f=e(\"./config\"),b=e(\"./token_iterator\").TokenIterator,y=function(e,t){var r=e.getContainerElement();this.container=r,this.renderer=e,this.commands=new p(s.isMac?\"mac\":\"win\",_),this.textInput=new a(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.keyBinding=new u(this),this.$mouseHandler=new l(this),new c(this),this.$blockScrolling=0,this.$search=(new g).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on(\"exec\",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=o.delayedCall(function(){this._signal(\"input\",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on(\"change\",function(e,t){t._$emitInputEvent.schedule(31)}),this.setSession(t||new d(\"\")),f.resetOptions(this),f._signal(\"editor\",this)};(function(){n.implement(this,m),this.$initOperationListeners=function(){this.selections=[],this.commands.on(\"exec\",this.startOperation.bind(this),!0),this.commands.on(\"afterExec\",this.endOperation.bind(this),!0),this.$opResetTimer=o.delayedCall(this.endOperation.bind(this)),this.on(\"change\",function(){this.curOp||this.startOperation(),this.curOp.docChanged=!0}.bind(this),!0),this.on(\"changeSelection\",function(){this.curOp||this.startOperation(),this.curOp.selectionChanged=!0}.bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.command.name&&void 0!==this.curOp.command.scrollIntoView&&this.$blockScrolling++},this.endOperation=function(e){if(this.curOp){if(e&&!1===e.returnValue)return this.curOp=null;this._signal(\"beforeEndOperation\");var t=this.curOp.command;t.name&&this.$blockScrolling>0&&this.$blockScrolling--;var r=t&&t.scrollIntoView;if(r){switch(r){case\"center-animate\":r=\"animate\";case\"center\":this.renderer.scrollCursorIntoView(null,.5);break;case\"animate\":case\"cursor\":this.renderer.scrollCursorIntoView();break;case\"selectionPart\":var n=this.selection.getRange(),i=this.renderer.layerConfig;(n.start.row>=i.lastRow||n.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}\"animate\"==r&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,r=this.$mergeableCommands,n=t.command&&e.command.name==t.command.name;if(\"insertstring\"==e.command.name){var i=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),n=n&&this.mergeNextCommand&&(!/\\s/.test(i)||/\\s/.test(t.args)),this.mergeNextCommand=!0}else n=n&&-1!==r.indexOf(e.command.name);\"always\"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(n=!1),n?this.session.mergeUndoDeltas=!0:-1!==r.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&\"string\"==typeof e){this.$keybindingId=e;var r=this;f.loadModule([\"keybinding\",e],function(n){r.$keybindingId==e&&r.keyBinding.setKeyboardHandler(n&&n.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off(\"change\",this.$onDocumentChange),this.session.off(\"changeMode\",this.$onChangeMode),this.session.off(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.session.off(\"changeTabSize\",this.$onChangeTabSize),this.session.off(\"changeWrapLimit\",this.$onChangeWrapLimit),this.session.off(\"changeWrapMode\",this.$onChangeWrapMode),this.session.off(\"changeFold\",this.$onChangeFold),this.session.off(\"changeFrontMarker\",this.$onChangeFrontMarker),this.session.off(\"changeBackMarker\",this.$onChangeBackMarker),this.session.off(\"changeBreakpoint\",this.$onChangeBreakpoint),this.session.off(\"changeAnnotation\",this.$onChangeAnnotation),this.session.off(\"changeOverwrite\",this.$onCursorChange),this.session.off(\"changeScrollTop\",this.$onScrollTopChange),this.session.off(\"changeScrollLeft\",this.$onScrollLeftChange);var r=this.session.getSelection();r.off(\"changeCursor\",this.$onCursorChange),r.off(\"changeSelection\",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on(\"change\",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on(\"changeMode\",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on(\"changeTabSize\",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on(\"changeWrapLimit\",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on(\"changeWrapMode\",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on(\"changeFold\",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on(\"changeFrontMarker\",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on(\"changeBackMarker\",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on(\"changeBreakpoint\",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on(\"changeAnnotation\",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on(\"changeOverwrite\",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on(\"changeScrollTop\",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on(\"changeScrollLeft\",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on(\"changeCursor\",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on(\"changeSelection\",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal(\"changeSession\",{session:e,oldSession:t}),this.curOp=null,t&&t._signal(\"changeEditor\",{oldEditor:this}),e&&e._signal(\"changeEditor\",{editor:this})}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption(\"fontSize\")||i.computedStyle(this.container,\"fontSize\")},this.setFontSize=function(e){this.setOption(\"fontSize\",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var r=t.findMatchingBracket(e.getCursorPosition());if(r)var n=new h(r.row,r.column,r.row,r.column+1);else if(t.$mode.getMatching)n=t.$mode.getMatching(e.session);n&&(t.$bracketHighlight=t.addMarker(n,\"ace_bracket\",\"text\"))}},50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var r=e.getCursorPosition(),n=new b(e.session,r.row,r.column),i=n.getCurrentToken();if(!i||!/\\b(?:tag-open|tag-name)/.test(i.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==i.type.indexOf(\"tag-open\")||(i=n.stepForward())){var o=i.value,s=0,a=n.stepBackward();if(\"<\"==a.value)do{a=i,(i=n.stepForward())&&i.value===o&&-1!==i.type.indexOf(\"tag-name\")&&(\"<\"===a.value?s++:\"</\"===a.value&&s--)}while(i&&s>=0);else{do{i=a,a=n.stepBackward(),i&&i.value===o&&-1!==i.type.indexOf(\"tag-name\")&&(\"<\"===a.value?s++:\"</\"===a.value&&s--)}while(a&&s<=0);n.stepForward()}if(!i)return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);var l=n.getCurrentTokenRow(),c=n.getCurrentTokenColumn(),u=new h(l,c,l,c+i.value.length),d=t.$backMarkers[t.$tagHighlight];t.$tagHighlight&&null!=d&&0!==u.compareRange(d.range)&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),u&&!t.$tagHighlight&&(t.$tagHighlight=t.addMarker(u,\"ace_bracket\",\"text\"))}}},50)}},this.focus=function(){var e=this;setTimeout(function(){e.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){this.$isFocused||(this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit(\"focus\",e))},this.onBlur=function(e){this.$isFocused&&(this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit(\"blur\",e))},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=this.session.$useWrapMode,r=e.start.row==e.end.row?e.end.row:1/0;this.renderer.updateLines(e.start.row,r,t),this._signal(\"change\",e),this.$cursorChange(),this.$updateHighlightActiveLine()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$blockScrolling||(f.warn(\"Automatically scrolling cursor into view after selection change\",\"this will be disabled in the next version\",\"set editor.$blockScrolling = Infinity to disable this message\"),this.renderer.scrollCursorIntoView()),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine(),this._signal(\"changeSelection\")},this.$updateHighlightActiveLine=function(){var e,t=this.getSession();if(this.$highlightActiveLine&&(\"line\"==this.$selectionStyle&&this.selection.isMultiLine()||(e=this.getCursorPosition()),!this.renderer.$maxLines||1!==this.session.getLength()||this.renderer.$minLines>1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var r=new h(e.row,e.column,e.row,1/0);r.id=t.addMarker(r,\"ace_active-line\",\"screenLine\"),t.$highlightLineMarker=r}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal(\"changeBackMarker\"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var r=this.selection.getRange(),n=this.getSelectionStyle();t.$selectionMarker=t.addMarker(r,\"ace_selection\",n)}var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal(\"changeSelection\")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var r=t.start.column-1,n=t.end.column+1,i=e.getLine(t.start.row),o=i.length,s=i.substring(Math.max(r,0),Math.min(n,o));if(!(r>=0&&/^[\\w\\d]/.test(s)||n<=o&&/[\\w\\d]$/.test(s)))if(s=i.substring(t.start.column,t.end.column),/^[\\w\\d]+$/.test(s))return this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s})}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit(\"changeMode\",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal(\"copy\",e),e},this.onCopy=function(){this.commands.exec(\"copy\",this)},this.onCut=function(){this.commands.exec(\"cut\",this)},this.onPaste=function(e,t){var r={text:e,event:t};this.commands.exec(\"paste\",this,r)},this.$handlePaste=function(e){\"string\"==typeof e&&(e={text:e}),this._signal(\"paste\",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var r=t.split(/\\r\\n|\\r|\\n/),n=this.selection.rangeList.ranges;if(r.length>n.length||r.length<2||!r[1])return this.commands.exec(\"insertstring\",this,t);for(var i=n.length;i--;){var o=n[i];o.isEmpty()||this.session.remove(o),this.session.insert(o.start,r[i])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var r=this.session,n=r.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var o=n.transformAction(r.getState(i.row),\"insertion\",this,r,e);o&&(e!==o.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=o.text)}if(\"\\t\"==e&&(e=this.session.getTabString()),this.selection.isEmpty()){if(this.session.getOverwrite()){(s=new h.fromPoints(i,i)).end.column+=e.length,this.session.remove(s)}}else{var s=this.getSelectionRange();i=this.session.remove(s),this.clearSelection()}if(\"\\n\"==e||\"\\r\\n\"==e){var a=r.getLine(i.row);if(i.column>a.search(/\\S|$/)){var l=a.substr(i.column).search(/\\S|$/);r.doc.removeInLine(i.row,i.column,i.column+l)}}this.clearSelection();var c=i.column,u=r.getState(i.row),d=(a=r.getLine(i.row),n.checkOutdent(u,a,e));r.insert(i,e);if(o&&o.selection&&(2==o.selection.length?this.selection.setSelectionRange(new h(i.row,c+o.selection[0],i.row,c+o.selection[1])):this.selection.setSelectionRange(new h(i.row+o.selection[0],o.selection[1],i.row+o.selection[2],o.selection[3]))),r.getDocument().isNewLine(e)){var g=n.getNextLineIndent(u,a.slice(0,i.column),r.getTabString());r.insert({row:i.row+1,column:0},g)}d&&n.autoOutdent(u,r,i.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,r){this.keyBinding.onCommandKey(e,t,r)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption(\"scrollSpeed\",e)},this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\")},this.setDragDelay=function(e){this.setOption(\"dragDelay\",e)},this.getDragDelay=function(){return this.getOption(\"dragDelay\")},this.setSelectionStyle=function(e){this.setOption(\"selectionStyle\",e)},this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\")},this.setHighlightActiveLine=function(e){this.setOption(\"highlightActiveLine\",e)},this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\")},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.setHighlightSelectedWord=function(e){this.setOption(\"highlightSelectedWord\",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption(\"readOnly\",e)},this.getReadOnly=function(){return this.getOption(\"readOnly\")},this.setBehavioursEnabled=function(e){this.setOption(\"behavioursEnabled\",e)},this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\")},this.setWrapBehavioursEnabled=function(e){this.setOption(\"wrapBehavioursEnabled\",e)},this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\")},this.setShowFoldWidgets=function(e){this.setOption(\"showFoldWidgets\",e)},this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.remove=function(e){this.selection.isEmpty()&&(\"left\"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var r=this.session,n=r.getState(t.start.row),i=r.getMode().transformAction(n,\"deletion\",this,r,t);if(0===t.end.column){var o=r.getTextRange(t);if(\"\\n\"==o[o.length-1]){var s=r.getLine(t.end.row);/^\\s+$/.test(s)&&(t.end.column=s.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert(\"\\n\"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var r,n,i=this.session.getLine(e.row);t<i.length?(r=i.charAt(t)+i.charAt(t-1),n=new h(e.row,t-1,e.row,t+1)):(r=i.charAt(t-1)+i.charAt(t-2),n=new h(e.row,t-2,e.row,t)),this.session.replace(n,r)}}},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),r=this.session.getTextRange(t);this.session.replace(t,r.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),r=this.session.getTextRange(t);this.session.replace(t,r.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(!(t.start.row<t.end.row)){if(t.start.column<t.end.column){var r=e.getTextRange(t);if(!/^\\s+$/.test(r)){u=this.$getSelectedRows();return void e.indentRows(u.first,u.last,\"\\t\")}}var n=e.getLine(t.start.row),i=t.start,s=e.getTabSize(),a=e.documentToScreenColumn(i.row,i.column);if(this.session.getUseSoftTabs())var l=s-a%s,c=o.stringRepeat(\" \",l);else{for(l=a%s;\" \"==n[t.start.column-1]&&l;)t.start.column--,l--;this.selection.setSelectionRange(t),c=\"\\t\"}return this.insert(c)}var u=this.$getSelectedRows();e.indentRows(u.first,u.last,\"\\t\")},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,\"\\t\")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){var e=this.$getSelectedRows(),t=this.session,r=[];for(i=e.first;i<=e.last;i++)r.push(t.getLine(i));r.sort(function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0});for(var n=new h(0,0,0,0),i=e.first;i<=e.last;i++){var o=t.getLine(i);n.start.row=i,n.end.row=i,n.end.column=o.length,t.replace(n,r[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),r=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,r,e)},this.getNumberAt=function(e,t){var r=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;r.lastIndex=0;for(var n=this.session.getLine(e);r.lastIndex<t;){var i=r.exec(n);if(i.index<=t&&i.index+i[0].length>=t)return{value:i[0],start:i.index,end:i.index+i[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,r=this.selection.getCursor().column,n=new h(t,r-1,t,r),i=this.session.getTextRange(n);if(!isNaN(parseFloat(i))&&isFinite(i)){var o=this.getNumberAt(t,r);if(o){var s=o.value.indexOf(\".\")>=0?o.start+o.value.indexOf(\".\")+1:o.end,a=o.start+o.value.length-s,l=parseFloat(o.value);l*=Math.pow(10,a),s!==o.end&&r<s?e*=Math.pow(10,o.end-r-1):e*=Math.pow(10,o.end-r),l+=e;var c=(l/=Math.pow(10,a)).toFixed(a),u=new h(t,o.start,t,o.end);this.session.replace(u,c),this.moveCursorTo(t,Math.max(o.start+1,r+c.length-o.value.length))}}},this.removeLines=function(){var e=this.$getSelectedRows();this.session.removeFullLines(e.first,e.last),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,r=e.getRange(),n=e.isBackwards();if(r.isEmpty()){var i=r.start.row;t.duplicateLines(i,i)}else{var o=n?r.start:r.end,s=t.insert(o,t.getTextRange(r),!1);r.start=o,r.end=s,e.setSelectionRange(r,n)}},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,r){return this.session.moveText(e,t,r)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var r,n,i=this.selection;if(!i.inMultiSelectMode||this.inVirtualSelectionMode){var o=i.toOrientedRange();r=this.$getSelectedRows(o),n=this.session.$moveLines(r.first,r.last,t?0:e),t&&-1==e&&(n=0),o.moveBy(n,0),i.fromOrientedRange(o)}else{var s=i.rangeList.ranges;i.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;for(var a=0,l=0,c=s.length,u=0;u<c;u++){var d=u;s[u].moveBy(a,0);for(var g=(r=this.$getSelectedRows(s[u])).first,h=r.last;++u<c;){l&&s[u].moveBy(l,0);var m=this.$getSelectedRows(s[u]);if(t&&m.first!=h)break;if(!t&&m.first>h+1)break;h=m.last}for(u--,a=this.session.$moveLines(g,h,t?0:e),t&&-1==e&&(d=u+1);d<=u;)s[d].moveBy(a,0),d++;t||(a=0),l+=a}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var r=this.renderer,n=this.renderer.layerConfig,i=e*Math.floor(n.height/n.lineHeight);this.$blockScrolling++,!0===t?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):!1===t&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),this.$blockScrolling--;var o=r.scrollTop;r.scrollBy(0,i*n.lineHeight),null!=t&&r.scrollCursorIntoView(null,.5),r.animateScrolling(o)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,r,n){this.renderer.scrollToLine(e,t,r,n)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var r=this.getCursorPosition(),n=new b(this.session,r.row,r.column),i=n.getCurrentToken(),o=i||n.stepForward();if(o){var s,a,l=!1,c={},u=r.column-o.start,d={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(o.value.match(/[{}()\\[\\]]/g)){for(;u<o.value.length&&!l;u++)if(d[o.value[u]])switch(a=d[o.value[u]]+\".\"+o.type.replace(\"rparen\",\"lparen\"),isNaN(c[a])&&(c[a]=0),o.value[u]){case\"(\":case\"[\":case\"{\":c[a]++;break;case\")\":case\"]\":case\"}\":c[a]--,-1===c[a]&&(s=\"bracket\",l=!0)}}else o&&-1!==o.type.indexOf(\"tag-name\")&&(isNaN(c[o.value])&&(c[o.value]=0),\"<\"===i.value?c[o.value]++:\"</\"===i.value&&c[o.value]--,-1===c[o.value]&&(s=\"tag\",l=!0));l||(i=o,o=n.stepForward(),u=0)}while(o&&!l);if(s){var g,m;if(\"bracket\"===s)(g=this.session.getBracketRange(r))||(m=(g=new h(n.getCurrentTokenRow(),n.getCurrentTokenColumn()+u-1,n.getCurrentTokenRow(),n.getCurrentTokenColumn()+u-1)).start,(t||m.row===r.row&&Math.abs(m.column-r.column)<2)&&(g=this.session.getBracketRange(m)));else if(\"tag\"===s){if(!o||-1===o.type.indexOf(\"tag-name\"))return;var p=o.value;if(0===(g=new h(n.getCurrentTokenRow(),n.getCurrentTokenColumn()-2,n.getCurrentTokenRow(),n.getCurrentTokenColumn()-2)).compare(r.row,r.column)){l=!1;do{o=i,(i=n.stepBackward())&&(-1!==i.type.indexOf(\"tag-close\")&&g.setEnd(n.getCurrentTokenRow(),n.getCurrentTokenColumn()+1),o.value===p&&-1!==o.type.indexOf(\"tag-name\")&&(\"<\"===i.value?c[p]++:\"</\"===i.value&&c[p]--,0===c[p]&&(l=!0)))}while(i&&!l)}o&&o.type.indexOf(\"tag-name\")&&(m=g.start).row==r.row&&Math.abs(m.column-r.column)<2&&(m=g.end)}(m=g&&g.cursor||m)&&(e?g&&t?this.selection.setRange(g):g&&g.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(m.row,m.column):this.selection.moveTo(m.row,m.column))}}},this.gotoLine=function(e,t,r){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.$blockScrolling+=1,this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.$blockScrolling-=1,this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,r)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorLeft();else{var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateRight=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorRight();else{var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var r=this.$search.find(this.session),n=0;return r?(this.$tryReplace(r,e)&&(n=1),null!==r&&(this.selection.setSelectionRange(r),this.renderer.scrollSelectionIntoView(r.start,r.end)),n):n},this.replaceAll=function(e,t){t&&this.$search.set(t);var r=this.$search.findAll(this.session),n=0;if(!r.length)return n;this.$blockScrolling+=1;var i=this.getSelectionRange();this.selection.moveTo(0,0);for(var o=r.length-1;o>=0;--o)this.$tryReplace(r[o],e)&&n++;return this.selection.setSelectionRange(i),this.$blockScrolling-=1,n},this.$tryReplace=function(e,t){var r=this.session.getTextRange(e);return null!==(t=this.$search.replace(r,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,r){t||(t={}),\"string\"==typeof e||e instanceof RegExp?t.needle=e:\"object\"==typeof e&&n.mixin(t,e);var i=this.selection.getRange();null==t.needle&&((e=this.session.getTextRange(i)||this.$search.$options.needle)||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var o=this.$search.find(this.session);return t.preventScroll?o:o?(this.revealRange(o,r),o):(t.backwards?i.start=i.end:i.end=i.start,void this.selection.setRange(i))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var r=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(r)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal(\"destroy\",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,r=this,n=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement(\"div\"));var i=this.$scrollAnchor;i.style.cssText=\"position:absolute\",this.container.insertBefore(i,this.container.firstChild);var o=this.on(\"changeSelection\",function(){n=!0}),s=this.renderer.on(\"beforeRender\",function(){n&&(t=r.renderer.container.getBoundingClientRect())}),a=this.renderer.on(\"afterRender\",function(){if(n&&t&&(r.isFocused()||r.searchBox&&r.searchBox.isFocused())){var e=r.renderer,o=e.$cursorLayer.$pixelPos,s=e.layerConfig,a=o.top-s.offset;null!=(n=o.top>=0&&a+t.top<0||!(o.top<s.height&&o.top+t.top+s.lineHeight>window.innerHeight)&&null)&&(i.style.top=a+\"px\",i.style.left=o.left+\"px\",i.style.height=s.lineHeight+\"px\",i.scrollIntoView(n)),n=t=null}});this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off(\"changeSelection\",o),this.renderer.off(\"afterRender\",a),this.renderer.off(\"beforeRender\",s))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||\"ace\",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&\"wide\"!=e,i.setCssClass(t.element,\"ace_slim-cursors\",/slim/.test(e)))}}).call(y.prototype),f.defineOptions(y.prototype,\"editor\",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal(\"changeSelectionStyle\",{data:e})},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[!1,!0,\"always\"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",showLineNumbers:\"renderer\",showGutter:\"renderer\",displayIndentGuides:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",indentedSoftWrap:\"session\",foldStyle:\"session\",mode:\"session\"}),t.Editor=y}),ace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e.lines.length?null:e.lines,text:1==e.lines.length?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function r(e,t){for(var r=new Array(e.length),n=0;n<e.length;n++){for(var i=e[n],o={group:i.group,deltas:new Array(i.length)},s=0;s<i.deltas.length;s++){var a=i.deltas[s];o.deltas[s]=t(a)}r[n]=o}return r}this.execute=function(e){var t=e.args[0];this.$doc=e.args[1],e.merge&&this.hasUndo()&&(this.dirtyCounter--,t=this.$undoStack.pop().concat(t)),this.$undoStack.push(t),this.$redoStack=[],this.dirtyCounter<0&&(this.dirtyCounter=NaN),this.dirtyCounter++},this.undo=function(e){var t=this.$undoStack.pop(),r=null;return t&&(r=this.$doc.undoChanges(t,e),this.$redoStack.push(t),this.dirtyCounter--),r},this.redo=function(e){var t=this.$redoStack.pop(),r=null;return t&&(r=this.$doc.redoChanges(this.$deserializeDeltas(t),e),this.$undoStack.push(t),this.dirtyCounter++),r},this.reset=function(){this.$undoStack=[],this.$redoStack=[],this.dirtyCounter=0},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(t){return r(t,e)},this.$deserializeDeltas=function(e){return r(e,t)}}).call(n.prototype),t.UndoManager=n}),ace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"],function(e,t,r){\"use strict\";var n=e(\"../lib/dom\"),i=e(\"../lib/oop\"),o=e(\"../lib/lang\"),s=e(\"../lib/event_emitter\").EventEmitter,a=function(e){this.element=n.createElement(\"div\"),this.element.className=\"ace_layer ace_gutter-layer\",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){i.implement(this,s),this.setSession=function(e){this.session&&this.session.removeEventListener(\"change\",this.$updateAnnotations),this.session=e,e&&e.on(\"change\",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.addGutterDecoration\"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.removeGutterDecoration\"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var r=e[t],n=r.row,i=this.$annotations[n];i||(i=this.$annotations[n]={text:[]});var s=r.text;s=s?o.escapeHTML(s):r.html||\"\",-1===i.text.indexOf(s)&&i.text.push(s);var a=r.type;\"error\"==a?i.className=\" ace_error\":\"warning\"==a&&\" ace_error\"!=i.className?i.className=\" ace_warning\":\"info\"!=a||i.className||(i.className=\" ace_info\")}},this.$updateAnnotations=function(e){if(this.$annotations.length){var t=e.start.row,r=e.end.row-t;if(0===r);else if(\"remove\"==e.action)this.$annotations.splice(t,r+1,null);else{var n=new Array(r+1);n.unshift(t,1),this.$annotations.splice.apply(this.$annotations,n)}}},this.update=function(e){for(var t=this.session,r=e.firstRow,i=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1),o=t.getNextFoldLine(r),s=o?o.start.row:1/0,a=this.$showFoldWidgets&&t.foldWidgets,l=t.$breakpoints,c=t.$decorations,u=t.$firstLineNumber,d=0,g=t.gutterRenderer||this.$renderer,h=null,m=-1,p=r;;){if(p>s&&(p=o.end.row+1,s=(o=t.getNextFoldLine(p,o))?o.start.row:1/0),p>i){for(;this.$cells.length>m+1;)h=this.$cells.pop(),this.element.removeChild(h.element);break}(h=this.$cells[++m])||((h={element:null,textNode:null,foldWidget:null}).element=n.createElement(\"div\"),h.textNode=document.createTextNode(\"\"),h.element.appendChild(h.textNode),this.element.appendChild(h.element),this.$cells[m]=h);var _=\"ace_gutter-cell \";if(l[p]&&(_+=l[p]),c[p]&&(_+=c[p]),this.$annotations[p]&&(_+=this.$annotations[p].className),h.element.className!=_&&(h.element.className=_),(b=t.getRowLength(p)*e.lineHeight+\"px\")!=h.element.style.height&&(h.element.style.height=b),a){var f=a[p];null==f&&(f=a[p]=t.getFoldWidget(p))}if(f){h.foldWidget||(h.foldWidget=n.createElement(\"span\"),h.element.appendChild(h.foldWidget));_=\"ace_fold-widget ace_\"+f;\"start\"==f&&p==s&&p<o.end.row?_+=\" ace_closed\":_+=\" ace_open\",h.foldWidget.className!=_&&(h.foldWidget.className=_);var b=e.lineHeight+\"px\";h.foldWidget.style.height!=b&&(h.foldWidget.style.height=b)}else h.foldWidget&&(h.element.removeChild(h.foldWidget),h.foldWidget=null);var y=d=g?g.getText(t,p):p+u;y!=h.textNode.data&&(h.textNode.data=y),p++}this.element.style.height=e.minHeight+\"px\",(this.$fixedWidth||t.$useWrapMode)&&(d=t.getLength()+u);var x=g?g.getWidth(t,d,e):d.toString().length*e.characterWidth,v=this.$padding||this.$computePadding();(x+=v.left+v.right)===this.gutterWidth||isNaN(x)||(this.gutterWidth=x,this.element.style.width=Math.ceil(this.gutterWidth)+\"px\",this._emit(\"changeGutterWidth\",x))},this.$fixedWidth=!1,this.$showLineNumbers=!0,this.$renderer=\"\",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return\"\"},getText:function(){return\"\"}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?n.addCssClass(this.element,\"ace_folding-enabled\"):n.removeCssClass(this.element,\"ace_folding-enabled\"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=n.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=parseInt(e.paddingLeft)+1||0,this.$padding.right=parseInt(e.paddingRight)||0,this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),r=this.element.getBoundingClientRect();return e.x<t.left+r.left?\"markers\":this.$showFoldWidgets&&e.x>r.right-t.right?\"foldWidgets\":void 0}}).call(a.prototype),t.Gutter=a}),ace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=e(\"../lib/dom\"),o=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_marker-layer\",e.appendChild(this.element)};(function(){function e(e,t,r,n){return(e?1:0)|(t?2:0)|(r?4:0)|(n?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){if(e=e||this.config){this.config=e;var t=[];for(var r in this.markers){var n=this.markers[r];if(n.range){var i=n.range.clipRows(e.firstRow,e.lastRow);if(!i.isEmpty())if(i=i.toScreenRange(this.session),n.renderer){var o=this.$getTop(i.start.row,e),s=this.$padding+i.start.column*e.characterWidth;n.renderer(t,i,s,o,e)}else\"fullLine\"==n.type?this.drawFullLineMarker(t,i,n.clazz,e):\"screenLine\"==n.type?this.drawScreenLineMarker(t,i,n.clazz,e):i.isMultiLine()?\"text\"==n.type?this.drawTextMarker(t,i,n.clazz,e):this.drawMultiLineMarker(t,i,n.clazz,e):this.drawSingleLineMarker(t,i,n.clazz+\" ace_start ace_br15\",e)}else n.update(t,this,this.session,e)}this.element.innerHTML=t.join(\"\")}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,r,i,o,s){for(var a=this.session,l=r.start.row,c=r.end.row,u=l,d=0,g=0,h=a.getScreenLastRowColumn(u),m=new n(u,r.start.column,u,g);u<=c;u++)m.start.row=m.end.row=u,m.start.column=u==l?r.start.column:a.getRowWrapIndent(u),m.end.column=h,d=g,g=h,h=u+1<c?a.getScreenLastRowColumn(u+1):u==c?0:r.end.column,this.drawSingleLineMarker(t,m,i+(u==l?\" ace_start\":\"\")+\" ace_br\"+e(u==l||u==l+1&&r.start.column,d<g,g>h,u==c),o,u==c?0:1,s)},this.drawMultiLineMarker=function(e,t,r,n,i){var o=this.$padding,s=n.lineHeight,a=this.$getTop(t.start.row,n),l=o+t.start.column*n.characterWidth;i=i||\"\",e.push(\"<div class='\",r,\" ace_br1 ace_start' style='\",\"height:\",s,\"px;\",\"right:0;\",\"top:\",a,\"px;\",\"left:\",l,\"px;\",i,\"'></div>\"),a=this.$getTop(t.end.row,n);var c=t.end.column*n.characterWidth;if(e.push(\"<div class='\",r,\" ace_br12' style='\",\"height:\",s,\"px;\",\"width:\",c,\"px;\",\"top:\",a,\"px;\",\"left:\",o,\"px;\",i,\"'></div>\"),!((s=(t.end.row-t.start.row-1)*n.lineHeight)<=0)){a=this.$getTop(t.start.row+1,n);var u=(t.start.column?1:0)|(t.end.column?0:8);e.push(\"<div class='\",r,u?\" ace_br\"+u:\"\",\"' style='\",\"height:\",s,\"px;\",\"right:0;\",\"top:\",a,\"px;\",\"left:\",o,\"px;\",i,\"'></div>\")}},this.drawSingleLineMarker=function(e,t,r,n,i,o){var s=n.lineHeight,a=(t.end.column+(i||0)-t.start.column)*n.characterWidth,l=this.$getTop(t.start.row,n),c=this.$padding+t.start.column*n.characterWidth;e.push(\"<div class='\",r,\"' style='\",\"height:\",s,\"px;\",\"width:\",a,\"px;\",\"top:\",l,\"px;\",\"left:\",c,\"px;\",o||\"\",\"'></div>\")},this.drawFullLineMarker=function(e,t,r,n,i){var o=this.$getTop(t.start.row,n),s=n.lineHeight;t.start.row!=t.end.row&&(s+=this.$getTop(t.end.row,n)-o),e.push(\"<div class='\",r,\"' style='\",\"height:\",s,\"px;\",\"top:\",o,\"px;\",\"left:0;right:0;\",i||\"\",\"'></div>\")},this.drawScreenLineMarker=function(e,t,r,n,i){var o=this.$getTop(t.start.row,n),s=n.lineHeight;e.push(\"<div class='\",r,\"' style='\",\"height:\",s,\"px;\",\"top:\",o,\"px;\",\"left:0;right:0;\",i||\"\",\"'></div>\")}}).call(o.prototype),t.Marker=o}),ace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/dom\"),o=e(\"../lib/lang\"),s=(e(\"../lib/useragent\"),e(\"../lib/event_emitter\").EventEmitter),a=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_text-layer\",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){n.implement(this,s),this.EOF_CHAR=\"¶\",this.EOL_CHAR_LF=\"¬\",this.EOL_CHAR_CRLF=\"¤\",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR=\"—\",this.SPACE_CHAR=\"·\",this.$padding=0,this.$updateEolChar=function(){var e=\"\\n\"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding=\"0 \"+e+\"px\"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on(\"changeCharacterSize\",function(e){this._signal(\"changeCharacterSize\",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],r=1;r<e+1;r++)this.showInvisibles?t.push(\"<span class='ace_invisible ace_invisible_tab'>\"+o.stringRepeat(this.TAB_CHAR,r)+\"</span>\"):t.push(o.stringRepeat(\" \",r));if(this.displayIndentGuides){this.$indentGuideRe=/\\s\\S| \\t|\\t |\\s$/;var n=\"ace_indent-guide\",i=\"\",s=\"\";if(this.showInvisibles){n+=\" ace_invisible\",i=\" ace_invisible_space\",s=\" ace_invisible_tab\";var a=o.stringRepeat(this.SPACE_CHAR,this.tabSize),l=o.stringRepeat(this.TAB_CHAR,this.tabSize)}else l=a=o.stringRepeat(\" \",this.tabSize);this.$tabStrings[\" \"]=\"<span class='\"+n+i+\"'>\"+a+\"</span>\",this.$tabStrings[\"\\t\"]=\"<span class='\"+n+s+\"'>\"+l+\"</span>\"}},this.updateLines=function(e,t,r){this.config.lastRow==e.lastRow&&this.config.firstRow==e.firstRow||this.scrollLines(e),this.config=e;for(var n=Math.max(t,e.firstRow),i=Math.min(r,e.lastRow),o=this.element.childNodes,s=0,a=e.firstRow;a<n;a++){if(l=this.session.getFoldLine(a)){if(l.containsRow(n)){n=l.start.row;break}a=l.end.row}s++}a=n;for(var l,c=(l=this.session.getNextFoldLine(a))?l.start.row:1/0;a>c&&(a=l.end.row+1,c=(l=this.session.getNextFoldLine(a,l))?l.start.row:1/0),!(a>i);){var u=o[s++];if(u){var d=[];this.$renderLine(d,a,!this.$useLineGroups(),a==c&&l),u.style.height=e.lineHeight*this.session.getRowLength(a)+\"px\",u.innerHTML=d.join(\"\")}a++}},this.scrollLines=function(e){var t=this.config;if(this.config=e,!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);var r=this.element;if(t.firstRow<e.firstRow)for(var n=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);n>0;n--)r.removeChild(r.firstChild);if(t.lastRow>e.lastRow)for(n=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);n>0;n--)r.removeChild(r.lastChild);if(e.firstRow<t.firstRow){var i=this.$renderLinesFragment(e,e.firstRow,t.firstRow-1);r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)}if(e.lastRow>t.lastRow){i=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);r.appendChild(i)}},this.$renderLinesFragment=function(e,t,r){for(var n=this.element.ownerDocument.createDocumentFragment(),o=t,s=this.session.getNextFoldLine(o),a=s?s.start.row:1/0;o>a&&(o=s.end.row+1,a=(s=this.session.getNextFoldLine(o,s))?s.start.row:1/0),!(o>r);){var l=i.createElement(\"div\"),c=[];if(this.$renderLine(c,o,!1,o==a&&s),l.innerHTML=c.join(\"\"),this.$useLineGroups())l.className=\"ace_line_group\",n.appendChild(l),l.style.height=e.lineHeight*this.session.getRowLength(o)+\"px\";else for(;l.firstChild;)n.appendChild(l.firstChild);o++}return n},this.update=function(e){this.config=e;for(var t=[],r=e.firstRow,n=e.lastRow,i=r,o=this.session.getNextFoldLine(i),s=o?o.start.row:1/0;i>s&&(i=o.end.row+1,s=(o=this.session.getNextFoldLine(i,o))?o.start.row:1/0),!(i>n);)this.$useLineGroups()&&t.push(\"<div class='ace_line_group' style='height:\",e.lineHeight*this.session.getRowLength(i),\"px'>\"),this.$renderLine(t,i,!1,i==s&&o),this.$useLineGroups()&&t.push(\"</div>\"),i++;this.element.innerHTML=t.join(\"\")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,r,n){var i=this,s=n.replace(/\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g,function(e,r,n,s,a){if(r)return i.showInvisibles?\"<span class='ace_invisible ace_invisible_space'>\"+o.stringRepeat(i.SPACE_CHAR,e.length)+\"</span>\":e;if(\"&\"==e)return\"&#38;\";if(\"<\"==e)return\"&#60;\";if(\">\"==e)return\"&#62;\";if(\"\\t\"==e){var l=i.session.getScreenTabSize(t+s);return t+=l-1,i.$tabStrings[l]}if(\"　\"==e){var c=i.showInvisibles?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\",u=i.showInvisibles?i.SPACE_CHAR:\"\";return t+=1,\"<span class='\"+c+\"' style='width:\"+2*i.config.characterWidth+\"px'>\"+u+\"</span>\"}return n?\"<span class='ace_invisible ace_invisible_space ace_invalid'>\"+i.SPACE_CHAR+\"</span>\":(t+=1,\"<span class='ace_cjk' style='width:\"+2*i.config.characterWidth+\"px'>\"+e+\"</span>\")});if(this.$textToken[r.type])e.push(s);else{var a=\"ace_\"+r.type.replace(/\\./g,\" ace_\"),l=\"\";\"fold\"==r.type&&(l=\" style='width:\"+r.value.length*this.config.characterWidth+\"px;' \"),e.push(\"<span class='\",a,\"'\",l,\">\",s,\"</span>\")}return t+n.length},this.renderIndentGuide=function(e,t,r){var n=t.search(this.$indentGuideRe);return n<=0||n>=r?t:\" \"==t[0]?(n-=n%this.tabSize,e.push(o.stringRepeat(this.$tabStrings[\" \"],n/this.tabSize)),t.substr(n)):\"\\t\"==t[0]?(e.push(o.stringRepeat(this.$tabStrings[\"\\t\"],n)),t.substr(n)):t},this.$renderWrappedLine=function(e,t,r,n){for(var i=0,s=0,a=r[0],l=0,c=0;c<t.length;c++){var u=t[c],d=u.value;if(0==c&&this.displayIndentGuides){if(i=d.length,!(d=this.renderIndentGuide(e,d,a)))continue;i-=d.length}if(i+d.length<a)l=this.$renderToken(e,l,u,d),i+=d.length;else{for(;i+d.length>=a;)l=this.$renderToken(e,l,u,d.substring(0,a-i)),d=d.substring(a-i),i=a,n||e.push(\"</div>\",\"<div class='ace_line' style='height:\",this.config.lineHeight,\"px'>\"),e.push(o.stringRepeat(\" \",r.indent)),l=0,a=r[++s]||Number.MAX_VALUE;0!=d.length&&(i+=d.length,l=this.$renderToken(e,l,u,d))}}},this.$renderSimpleLine=function(e,t){var r=0,n=t[0],i=n.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(r=this.$renderToken(e,r,n,i));for(var o=1;o<t.length;o++)i=(n=t[o]).value,r=this.$renderToken(e,r,n,i)},this.$renderLine=function(e,t,r,n){if(n||0==n||(n=this.session.getFoldLine(t)),n)var i=this.$getFoldLineTokens(t,n);else i=this.session.getTokens(t);if(r||e.push(\"<div class='ace_line' style='height:\",this.config.lineHeight*(this.$useLineGroups()?1:this.session.getRowLength(t)),\"px'>\"),i.length){var o=this.session.getRowSplitData(t);o&&o.length?this.$renderWrappedLine(e,i,o,r):this.$renderSimpleLine(e,i)}this.showInvisibles&&(n&&(t=n.end.row),e.push(\"<span class='ace_invisible ace_invisible_eol'>\",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,\"</span>\")),r||e.push(\"</div>\")},this.$getFoldLineTokens=function(e,t){var r=this.session,n=[];var i=r.getTokens(e);return t.walk(function(e,t,o,s,a){null!=e?n.push({type:\"fold\",value:e}):(a&&(i=r.getTokens(t)),i.length&&function(e,t,r){for(var i=0,o=0;o+e[i].value.length<t;)if(o+=e[i].value.length,++i==e.length)return;for(o!=t&&((s=e[i].value.substring(t-o)).length>r-t&&(s=s.substring(0,r-t)),n.push({type:e[i].type,value:s}),o=t+s.length,i+=1);o<r&&i<e.length;){var s;(s=e[i].value).length+o>r?n.push({type:e[i].type,value:s.substring(0,r-o)}):n.push(e[i]),o+=s.length,i+=1}}(i,s,o))},t.end.row,this.session.getLine(t.end.row).length),n},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a}),ace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,r){\"use strict\";var n,i=e(\"../lib/dom\"),o=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_cursor-layer\",e.appendChild(this.element),void 0===n&&(n=!(\"opacity\"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),i.addCssClass(this.element,\"ace_hidden-cursors\"),this.$updateCursors=(n?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){for(var t=this.cursors,r=t.length;r--;)t[r].style.visibility=e?\"\":\"hidden\"},this.$updateOpacity=function(e){for(var t=this.cursors,r=t.length;r--;)t[r].style.opacity=e?\"\":\"0\"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e==this.smoothBlinking||n||(this.smoothBlinking=e,i.setCssClass(this.element,\"ace_smooth-blinking\",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=i.createElement(\"div\");return e.className=\"ace_cursor\",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,i.addCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,i.removeCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&i.removeCssClass(this.element,\"ace_smooth-blinking\"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){i.addCssClass(this.element,\"ace_smooth-blinking\")}.bind(this));var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var r=this.session.documentToScreenPosition(e);return{left:this.$padding+r.column*this.config.characterWidth,top:(r.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,r=0,n=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]);r=0;for(var i=t.length;r<i;r++){var o=this.getPixelPosition(t[r].cursor,!0);if(!((o.top>e.height+e.offset||o.top<0)&&r>1)){var s=(this.cursors[n++]||this.addCursor()).style;this.drawCursor?this.drawCursor(s,o,e,t[r],this.session):(s.left=o.left+\"px\",s.top=o.top+\"px\",s.width=e.characterWidth+\"px\",s.height=e.lineHeight+\"px\")}}for(;this.cursors.length>n;)this.removeCursor();var a=this.session.getOverwrite();this.$setOverwrite(a),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?i.addCssClass(this.element,\"ace_overwrite-cursors\"):i.removeCssClass(this.element,\"ace_overwrite-cursors\"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(o.prototype),t.Cursor=o}),ace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],function(e,t,r){\"use strict\";var n=e(\"./lib/oop\"),i=e(\"./lib/dom\"),o=e(\"./lib/event\"),s=e(\"./lib/event_emitter\").EventEmitter,a=32768,l=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix,this.inner=i.createElement(\"div\"),this.inner.className=\"ace_scrollbar-inner\",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,o.addListener(this.element,\"scroll\",this.onScroll.bind(this)),o.addListener(this.element,\"mousedown\",o.preventDefault)};(function(){n.implement(this,s),this.setVisible=function(e){this.element.style.display=e?\"\":\"none\",this.isVisible=e,this.coeff=1}}).call(l.prototype);var c=function(e,t){l.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\"};n.inherits(c,l),function(){this.classSuffix=\"-v\",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit(\"scroll\",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(e){this.element.style.height=e+\"px\"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>a?(this.coeff=a/e,e=a):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+\"px\"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(c.prototype);var u=function(e,t){l.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\"};n.inherits(u,l),function(){this.classSuffix=\"-h\",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit(\"scroll\",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+\"px\"},this.setInnerWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(u.prototype),t.ScrollBar=c,t.ScrollBarV=c,t.ScrollBarH=u,t.VScrollBar=c,t.HScrollBar=u}),ace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],function(e,t,r){\"use strict\";var n=e(\"./lib/event\"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){if(this.changes=this.changes|e,!this.pending&&this.changes){this.pending=!0;var t=this;n.nextFrame(function(){var e;for(t.pending=!1;e=t.changes;)t.changes=0,t.onRender(e)},this.window)}}}).call(i.prototype),t.RenderLoop=i}),ace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(e,t,r){var n=e(\"../lib/oop\"),i=e(\"../lib/dom\"),o=e(\"../lib/lang\"),s=e(\"../lib/useragent\"),a=e(\"../lib/event_emitter\").EventEmitter,l=0,c=t.FontMetrics=function(e){this.el=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),l||this.$testFractionalRect(),this.$measureNode.innerHTML=o.stringRepeat(\"X\",l),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){n.implement(this,a),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=i.createElement(\"div\");this.$setMeasureNodeStyles(e.style),e.style.width=\"0.2px\",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;l=t>0&&t<1?50:100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height=\"auto\",e.left=e.top=\"0px\",e.visibility=\"hidden\",e.position=\"absolute\",e.whiteSpace=\"pre\",s.isIE<8?e[\"font-family\"]=\"inherit\":e.font=\"inherit\",e.overflow=t?\"hidden\":\"visible\"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight=\"bold\";var t=this.$measureSizes();this.$measureNode.style.fontWeight=\"\",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit(\"changeCharacterSize\",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval(function(){e.checkForSizeChanges()},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===l){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var t={height:e.height,width:e.width/l}}else t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/l};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=o.stringRepeat(e,l),this.$main.getBoundingClientRect().width/l},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(c.prototype)}),ace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"],function(e,t,r){\"use strict\";var n=e(\"./lib/oop\"),i=e(\"./lib/dom\"),o=e(\"./config\"),s=e(\"./lib/useragent\"),a=e(\"./layer/gutter\").Gutter,l=e(\"./layer/marker\").Marker,c=e(\"./layer/text\").Text,u=e(\"./layer/cursor\").Cursor,d=e(\"./scrollbar\").HScrollBar,g=e(\"./scrollbar\").VScrollBar,h=e(\"./renderloop\").RenderLoop,m=e(\"./layer/font_metrics\").FontMetrics,p=e(\"./lib/event_emitter\").EventEmitter;i.importCssString('.ace_editor {position: relative;overflow: hidden;font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'source-code-pro\\', monospace;direction: ltr;text-align: left;}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \\'\\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_editor.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block;   }.ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius    : 3px;}.ace_br2 {border-top-right-radius   : 3px;}.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}',\"ace_editor.css\");var _=function(e,t){var r=this;this.container=e||i.createElement(\"div\"),this.$keepTextAreaAtCursor=!s.isOldIE,i.addCssClass(this.container,\"ace_editor\"),this.setTheme(t),this.$gutter=i.createElement(\"div\"),this.$gutter.className=\"ace_gutter\",this.container.appendChild(this.$gutter),this.scroller=i.createElement(\"div\"),this.scroller.className=\"ace_scroller\",this.container.appendChild(this.scroller),this.content=i.createElement(\"div\"),this.content.className=\"ace_content\",this.scroller.appendChild(this.content),this.$gutterLayer=new a(this.$gutter),this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this)),this.$markerBack=new l(this.content);var n=this.$textLayer=new c(this.content);this.canvas=n.element,this.$markerFront=new l(this.content),this.$cursorLayer=new u(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new g(this.container,this),this.scrollBarH=new d(this.container,this),this.scrollBarV.addEventListener(\"scroll\",function(e){r.$scrollAnimation||r.session.setScrollTop(e.data-r.scrollMargin.top)}),this.scrollBarH.addEventListener(\"scroll\",function(e){r.$scrollAnimation||r.session.setScrollLeft(e.data-r.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new m(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener(\"changeCharacterSize\",function(e){r.updateCharacterSize(),r.onResize(!0,r.gutterWidth,r.$size.width,r.$size.height),r._signal(\"changeCharacterSize\",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new h(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),o.resetOptions(this),o._emit(\"renderer\",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,n.implement(this,p),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle(\"ace_nobold\",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode))},this.updateLines=function(e,t,r){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t},this.$changedLines.lastRow<this.layerConfig.firstRow){if(!r)return;this.$changedLines.lastRow=this.layerConfig.lastRow}this.$changedLines.firstRow>this.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,r,n){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;n||(n=i.clientHeight||i.scrollHeight),r||(r=i.clientWidth||i.scrollWidth);var o=this.$updateCachedSize(e,t,r,n);if(!this.$size.scrollerHeight||!r&&!n)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(o|this.$changes,!0):this.$loop.schedule(o|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,r,n){n-=this.$extraHeight||0;var i=0,o=this.$size,s={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};return n&&(e||o.height!=n)&&(o.height=n,i|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\",i|=this.CHANGE_SCROLL),r&&(e||o.width!=r)&&(i|=this.CHANGE_SIZE,o.width=r,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+\"px\",o.scrollerWidth=Math.max(0,r-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+\"px\",this.scroller.style.bottom=this.scrollBarH.getHeight()+\"px\",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(i|=this.CHANGE_FULL)),o.$dirty=!r||!n,i&&this._signal(\"resize\",s),i},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption(\"animatedScroll\",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption(\"showInvisibles\",e)},this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\")},this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\")},this.setDisplayIndentGuides=function(e){this.setOption(\"displayIndentGuides\",e)},this.setShowPrintMargin=function(e){this.setOption(\"showPrintMargin\",e)},this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\")},this.setPrintMarginColumn=function(e){this.setOption(\"printMarginColumn\",e)},this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\")},this.getShowGutter=function(){return this.getOption(\"showGutter\")},this.setShowGutter=function(e){return this.setOption(\"showGutter\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var r=this.session.selection.getCursor();r.column=0,e=this.$cursorLayer.getPixelPosition(r,!0),t*=this.session.getRowLength(r.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+\"px\",this.$gutterLineHighlight.style.height=t+\"px\"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=i.createElement(\"div\");e.className=\"ace_layer ace_print-margin-layer\",this.$printMarginEl=i.createElement(\"div\"),this.$printMarginEl.className=\"ace_print-margin\",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+\"px\",t.visibility=this.$showPrintMargin?\"visible\":\"hidden\",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,r=this.$cursorLayer.$pixelPos.left;t-=e.offset;var n=this.textarea.style,i=this.lineHeight;if(t<0||t>e.height-i)n.top=n.left=\"0\";else{var o=this.characterWidth;if(this.$composition){var s=this.textarea.value.replace(/^\\x01+/,\"\");o*=this.session.$getStringScreenWidth(s)[0]+2,i+=2}(r-=this.scrollLeft)>this.$size.scrollerWidth-o&&(r=this.$size.scrollerWidth-o),r+=this.gutterWidth,n.height=i+\"px\",n.width=o+\"px\",n.left=Math.min(r,this.$size.scrollerWidth-o)+\"px\",n.top=Math.min(t,this.$size.height-i)+\"px\"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,r,n){var i=this.scrollMargin;i.top=0|e,i.bottom=0|t,i.right=0|n,i.left=0|r,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption(\"hScrollBarAlwaysVisible\",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption(\"vScrollBarAlwaysVisible\",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal(\"beforeRender\");var r=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig(),r.firstRow!=this.layerConfig.firstRow&&r.firstRowScreen==this.layerConfig.firstRowScreen){var n=this.scrollTop+(r.firstRow-this.layerConfig.firstRow)*this.lineHeight;n>0&&(this.scrollTop=n,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}r=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-r.offset+\"px\",this.content.style.marginTop=-r.offset+\"px\",this.content.style.width=r.width+2*this.$padding+\"px\",this.content.style.height=r.minHeight+\"px\"}if(e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+\"px\",this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\"),e&this.CHANGE_FULL)return this.$textLayer.update(r),this.$showGutter&&this.$gutterLayer.update(r),this.$markerBack.update(r),this.$markerFront.update(r),this.$cursorLayer.update(r),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal(\"afterRender\");if(e&this.CHANGE_SCROLL)return e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(r):this.$textLayer.scrollLines(r),this.$showGutter&&this.$gutterLayer.update(r),this.$markerBack.update(r),this.$markerFront.update(r),this.$cursorLayer.update(r),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal(\"afterRender\");e&this.CHANGE_TEXT?(this.$textLayer.update(r),this.$showGutter&&this.$gutterLayer.update(r)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(r):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(r),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(r),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(r),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(r),this._signal(\"afterRender\")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,r=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(r+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&r>this.$maxPixelHeight&&(r=this.$maxPixelHeight);var n=e>t;if(r!=this.desiredHeight||this.$size.height!=this.desiredHeight||n!=this.$vScroll){n!=this.$vScroll&&(this.$vScroll=n,this.scrollBarV.setVisible(n));var i=this.container.clientWidth;this.container.style.height=r+\"px\",this.$updateCachedSize(!0,this.$gutterWidth,i,r),this.desiredHeight=r,this._signal(\"autosize\")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,r=t.height<=2*this.lineHeight,n=this.session.getScreenLength()*this.lineHeight,i=this.$getLongestLine(),o=!r&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-i-2*this.$padding<0),s=this.$horizScroll!==o;s&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var l=this.scrollTop%this.lineHeight,c=t.scrollerHeight+this.lineHeight,u=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;n+=u;var d=this.scrollMargin;this.session.setScrollTop(Math.max(-d.top,Math.min(this.scrollTop,n-t.scrollerHeight+d.bottom))),this.session.setScrollLeft(Math.max(-d.left,Math.min(this.scrollLeft,i+2*this.$padding-t.scrollerWidth+d.right)));var g=!r&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-n+u<0||this.scrollTop>d.top),h=a!==g;h&&(this.$vScroll=g,this.scrollBarV.setVisible(g));var m,p,_=Math.ceil(c/this.lineHeight)-1,f=Math.max(0,Math.round((this.scrollTop-l)/this.lineHeight)),b=f+_,y=this.lineHeight;f=e.screenToDocumentRow(f,0);var x=e.getFoldLine(f);x&&(f=x.start.row),m=e.documentToScreenRow(f,0),p=e.getRowLength(f)*y,b=Math.min(e.screenToDocumentRow(b,0),e.getLength()-1),c=t.scrollerHeight+e.getRowLength(b)*y+p,l=this.scrollTop-m*y;var v=0;return this.layerConfig.width!=i&&(v=this.CHANGE_H_SCROLL),(s||h)&&(v=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal(\"scrollbarVisibilityChanged\"),h&&(i=this.$getLongestLine())),this.layerConfig={width:i,padding:this.$padding,firstRow:f,firstRowScreen:m,lastRow:b,lineHeight:y,characterWidth:this.characterWidth,minHeight:c,maxHeight:n,offset:l,gutterOffset:y?Math.max(0,Math.ceil((l+t.height-t.scrollerHeight)/y)):0,height:this.$size.scrollerHeight},v},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var r=this.layerConfig;if(!(e>r.lastRow+1||t<r.firstRow))return t===1/0?(this.$showGutter&&this.$gutterLayer.update(r),void this.$textLayer.update(r)):(this.$textLayer.updateLines(r,e,t),!0)},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,r){this.scrollCursorIntoView(e,r),this.scrollCursorIntoView(t,r)},this.scrollCursorIntoView=function(e,t,r){if(0!==this.$size.scrollerHeight){var n=this.$cursorLayer.getPixelPosition(e),i=n.left,o=n.top,s=r&&r.top||0,a=r&&r.bottom||0,l=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;l+s>o?(t&&l+s>o+this.lineHeight&&(o-=t*this.$size.scrollerHeight),0===o&&(o=-this.scrollMargin.top),this.session.setScrollTop(o)):l+this.$size.scrollerHeight-a<o+this.lineHeight&&(t&&l+this.$size.scrollerHeight-a<o-this.lineHeight&&(o+=t*this.$size.scrollerHeight),this.session.setScrollTop(o+this.lineHeight-this.$size.scrollerHeight));var c=this.scrollLeft;c>i?(i<this.$padding+2*this.layerConfig.characterWidth&&(i=-this.scrollMargin.left),this.session.setScrollLeft(i)):c+this.$size.scrollerWidth<i+this.characterWidth?this.session.setScrollLeft(Math.round(i+this.characterWidth-this.$size.scrollerWidth)):c<=this.$padding&&i-c<this.characterWidth&&this.session.setScrollLeft(0)}},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){\"number\"==typeof e&&(e={row:e,column:0});var r=this.$cursorLayer.getPixelPosition(e),n=this.$size.scrollerHeight-this.lineHeight,i=r.top-n*(t||0);return this.session.setScrollTop(i),i},this.STEPS=8,this.$calcSteps=function(e,t){var r=0,n=this.STEPS,i=[],o=function(e,t,r){return r*(Math.pow(e-1,3)+1)+t};for(r=0;r<n;++r)i.push(o(r/this.STEPS,e,t-e));return i},this.scrollToLine=function(e,t,r,n){var i=this.$cursorLayer.getPixelPosition({row:e,column:0}).top;t&&(i-=this.$size.scrollerHeight/2);var o=this.scrollTop;this.session.setScrollTop(i),!1!==r&&this.animateScrolling(o,n)},this.animateScrolling=function(e,t){var r=this.scrollTop;if(this.$animatedScroll){var n=this;if(e!=r){if(this.$scrollAnimation){var i=this.$scrollAnimation.steps;if(i.length&&(e=i[0])==r)return}var o=n.$calcSteps(e,r);this.$scrollAnimation={from:e,to:r,steps:o},clearInterval(this.$timer),n.session.setScrollTop(o.shift()),n.session.$scrollTop=r,this.$timer=setInterval(function(){o.length?(n.session.setScrollTop(o.shift()),n.session.$scrollTop=r):null!=r?(n.session.$scrollTop=-1,n.session.setScrollTop(r),r=null):(n.$timer=clearInterval(n.$timer),n.$scrollAnimation=null,t&&t())},10)}}},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){return t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top||(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0)))},this.pixelToScreenCoordinates=function(e,t){var r=this.scroller.getBoundingClientRect(),n=(e+this.scrollLeft-r.left-this.$padding)/this.characterWidth,i=Math.floor((t+this.scrollTop-r.top)/this.lineHeight),o=Math.round(n);return{row:i,column:o,side:n-o>0?1:-1}},this.screenToTextCoordinates=function(e,t){var r=this.scroller.getBoundingClientRect(),n=Math.round((e+this.scrollLeft-r.left-this.$padding)/this.characterWidth),i=(t+this.scrollTop-r.top)/this.lineHeight;return this.session.screenToDocumentPosition(i,Math.max(n,0))},this.textToScreenCoordinates=function(e,t){var r=this.scroller.getBoundingClientRect(),n=this.session.documentToScreenPosition(e,t),i=this.$padding+Math.round(n.column*this.characterWidth),o=n.row*this.lineHeight;return{pageX:r.left+i-this.scrollLeft,pageY:r.top+o-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,\"ace_focus\")},this.visualizeBlur=function(){i.removeCssClass(this.container,\"ace_focus\")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=\"\",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(i.removeCssClass(this.textarea,\"ace_composition\"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(e,t){var r=this;if(this.$themeId=e,r._dispatchEvent(\"themeChange\",{theme:e}),e&&\"string\"!=typeof e)s(e);else{var n=e||this.$options.theme.initialValue;o.loadModule([\"theme\",n],s)}function s(n){if(r.$themeId!=e)return t&&t();if(!n||!n.cssClass)throw new Error(\"couldn't load module \"+e+\" or it didn't call define\");i.importCssString(n.cssText,n.cssClass,r.container.ownerDocument),r.theme&&i.removeCssClass(r.container,r.theme.cssClass);var o=\"padding\"in n?n.padding:\"padding\"in(r.theme||{})?4:r.$padding;r.$padding&&o!=r.$padding&&r.setPadding(o),r.$theme=n.cssClass,r.theme=n,i.addCssClass(r.container,n.cssClass),i.setCssClass(r.container,\"ace_dark\",n.isDark),r.$size&&(r.$size.width=0,r.$updateSizeAsync()),r._dispatchEvent(\"themeLoaded\",{theme:n}),t&&t()}},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(_.prototype),o.defineOptions(_.prototype,\"renderer\",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){\"number\"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?\"block\":\"none\",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,\"ace_fade-fold-widgets\",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=i.createElement(\"div\"),this.$gutterLineHighlight.className=\"ace_gutter-active-line\",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=e?\"\":\"none\",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){\"number\"==typeof e&&(e+=\"px\"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0,this.$scrollPastEnd!=e&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:\"./theme/textmate\",handlesSet:!0}}),t.VirtualRenderer=_}),ace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/net\"),o=e(\"../lib/event_emitter\").EventEmitter,s=e(\"../config\"),a=function(t,r,n,i){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),s.get(\"packaged\")||!e.toUrl)i=i||s.moduleUrl(r,\"worker\");else{var o=this.$normalizePath;i=i||o(e.toUrl(\"ace/worker/worker.js\",null,\"_\"));var a={};t.forEach(function(t){a[t]=o(e.toUrl(t,null,\"_\").replace(/(\\.js)?(\\?.*)?$/,\"\"))})}try{this.$worker=new Worker(i)}catch(e){if(!(e instanceof window.DOMException))throw e;var l=this.$workerBlob(i),c=window.URL||window.webkitURL,u=c.createObjectURL(l);this.$worker=new Worker(u),c.revokeObjectURL(u)}this.$worker.postMessage({init:!0,tlns:a,module:r,classname:n}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){n.implement(this,o),this.onMessage=function(e){var t=e.data;switch(t.type){case\"event\":this._signal(t.name,{data:t.data});break;case\"call\":var r=this.callbacks[t.id];r&&(r(t.data),delete this.callbacks[t.id]);break;case\"error\":this.reportError(t.data);break;case\"log\":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal(\"terminate\",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off(\"change\",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,r){if(r){var n=this.callbackId++;this.callbacks[n]=r,t.push(n)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(e){console.error(e.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call(\"setValue\",[e.getValue()]),e.on(\"change\",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),\"insert\"==e.action?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call(\"setValue\",[this.$doc.getValue()]):this.emit(\"change\",{data:e}))},this.$workerBlob=function(e){var t=\"importScripts('\"+i.qualifyURL(e)+\"');\";try{return new Blob([t],{type:\"application/javascript\"})}catch(e){var r=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder);return r.append(t),r.getBlob(\"application/javascript\")}}}).call(a.prototype);var l=function(e,t,r){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var n=null,i=!1,a=Object.create(o),l=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){l.messageBuffer.push(e),n&&(i?setTimeout(c):c())},this.setEmitSync=function(e){i=e};var c=function(){var e=l.messageBuffer.shift();e.command?n[e.command].apply(n,e.args):e.event&&a._signal(e.event,e.data)};a.postMessage=function(e){l.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:\"call\",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:\"event\",name:e,data:t})},s.loadModule([\"worker\",t],function(e){for(n=new e[r](a);l.messageBuffer.length;)c()})};l.prototype=a.prototype,t.UIWorkerClient=l,t.WorkerClient=a}),ace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],function(e,t,r){\"use strict\";var n=e(\"./range\").Range,i=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./lib/oop\"),s=function(e,t,r,n,i,o){var s=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=o,this.$onUpdate=this.onUpdate.bind(this),this.doc.on(\"change\",this.$onUpdate),this.$others=n,this.$onCursorChange=function(){setTimeout(function(){s.onCursorChange()})},this.$pos=r;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on(\"changeCursor\",this.$onCursorChange)};(function(){o.implement(this,i),this.setup=function(){var e=this,t=this.doc,r=this.session;this.selectionBefore=r.selection.toJSON(),r.selection.inMultiSelectMode&&r.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=r.addMarker(new n(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(r){var n=t.createAnchor(r.row,r.column);n.$insertRight=!0,n.detach(),e.others.push(n)}),r.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(r){r.markerId=e.addMarker(new n(r.row,r.column,r.row,r.column+t.length),t.othersClass,null,!1)})}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)}},this.onUpdate=function(e){if(this.$updating)return this.updateAnchors(e);var t=e;if(t.start.row===t.end.row&&t.start.row===this.pos.row){this.$updating=!0;var r=\"insert\"===e.action?t.end.column-t.start.column:t.start.column-t.end.column,i=t.start.column>=this.pos.column&&t.start.column<=this.pos.column+this.length+1,o=t.start.column-this.pos.column;if(this.updateAnchors(e),i&&(this.length+=r),i&&!this.session.$fromUndo)if(\"insert\"===e.action)for(var s=this.others.length-1;s>=0;s--){var a={row:(l=this.others[s]).row,column:l.column+o};this.doc.insertMergedLines(a,e.lines)}else if(\"remove\"===e.action)for(s=this.others.length-1;s>=0;s--){var l;a={row:(l=this.others[s]).row,column:l.column+o};this.doc.remove(new n(a.row,a.column,a.row,a.column-r))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,r=function(r,i){t.removeMarker(r.markerId),r.markerId=t.addMarker(new n(r.row,r.column,r.row,r.column+e.length),i,null,!1)};r(this.pos,this.mainClass);for(var i=this.others.length;i--;)r(this.others[i],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit(\"cursorEnter\",e)):(this.hideOtherMarkers(),this._emit(\"cursorLeave\",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener(\"change\",this.$onUpdate),this.session.selection.removeEventListener(\"changeCursor\",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,r=0;r<t;r++)e.undo(!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}}).call(s.prototype),t.PlaceHolder=s}),ace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,r){var n=e(\"../lib/event\"),i=e(\"../lib/useragent\");function o(e,t){return e.row==t.row&&e.column==t.column}t.onMouseDown=function(e){var t=e.domEvent,r=t.altKey,s=t.shiftKey,a=t.ctrlKey,l=e.getAccelKey(),c=e.getButton();if(a&&i.isMac&&(c=t.button),e.editor.inMultiSelectMode&&2==c)e.editor.textInput.onContextMenu(e.domEvent);else if(a||r||l){if(0===c){var u,d=e.editor,g=d.selection,h=d.inMultiSelectMode,m=e.getDocumentPosition(),p=g.getCursor(),_=e.inSelection()||g.isEmpty()&&o(m,p),f=e.x,b=e.y,y=d.session,x=d.renderer.pixelToScreenCoordinates(f,b),v=x;if(d.$mouseHandler.$enableJumpToDef)a&&r||l&&r?u=s?\"block\":\"add\":r&&d.$blockSelectEnabled&&(u=\"block\");else if(l&&!r){if(u=\"add\",!h&&s)return}else r&&d.$blockSelectEnabled&&(u=\"block\");if(u&&i.isMac&&t.ctrlKey&&d.$mouseHandler.cancelContextMenu(),\"add\"==u){if(!h&&_)return;if(!h){var w=g.toOrientedRange();d.addSelectionMarker(w)}var k=g.rangeList.rangeAtPoint(m);d.$blockScrolling++,d.inVirtualSelectionMode=!0,s&&(k=null,w=g.ranges[0]||w,d.removeSelectionMarker(w)),d.once(\"mouseup\",function(){var e=g.toOrientedRange();k&&e.isEmpty()&&o(k.cursor,e.cursor)?g.substractPoint(e.cursor):(s?g.substractPoint(w.cursor):w&&(d.removeSelectionMarker(w),g.addRange(w)),g.addRange(e)),d.$blockScrolling--,d.inVirtualSelectionMode=!1})}else if(\"block\"==u){var C;e.stop(),d.inVirtualSelectionMode=!0;var A=[];d.$blockScrolling++,h&&!l?g.toSingleRange():!h&&l&&(C=g.toOrientedRange(),d.addSelectionMarker(C)),s?x=y.documentToScreenPosition(g.lead):g.moveToPosition(m),d.$blockScrolling--,v={row:-1,column:-1};var S=function(){var e=d.renderer.pixelToScreenCoordinates(f,b),t=y.screenToDocumentPosition(e.row,e.column);o(v,e)&&o(t,g.lead)||(v=e,d.$blockScrolling++,d.selection.moveToPosition(t),d.renderer.scrollCursorIntoView(),d.removeSelectionMarkers(A),A=g.rectangularRangeBlock(v,x),d.$mouseHandler.$clickSelection&&1==A.length&&A[0].isEmpty()&&(A[0]=d.$mouseHandler.$clickSelection.clone()),A.forEach(d.addSelectionMarker,d),d.updateSelectionMarkers(),d.$blockScrolling--)};n.capture(d.container,function(e){f=e.clientX,b=e.clientY},function(e){clearInterval(E),d.removeSelectionMarkers(A),A.length||(A=[g.toOrientedRange()]),d.$blockScrolling++,C&&(d.removeSelectionMarker(C),g.toSingleRange(C));for(var t=0;t<A.length;t++)g.addRange(A[t]);d.inVirtualSelectionMode=!1,d.$mouseHandler.$clickSelection=null,d.$blockScrolling--});var E=setInterval(function(){S()},20);return e.preventDefault()}}}else 0===c&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode()}}),ace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"],function(e,t,r){t.defaultCommands=[{name:\"addCursorAbove\",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:\"Ctrl-Alt-Up\",mac:\"Ctrl-Alt-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelow\",exec:function(e){e.selectMoreLines(1)},bindKey:{win:\"Ctrl-Alt-Down\",mac:\"Ctrl-Alt-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorAboveSkipCurrent\",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Up\",mac:\"Ctrl-Alt-Shift-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelowSkipCurrent\",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Down\",mac:\"Ctrl-Alt-Shift-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreBefore\",exec:function(e){e.selectMore(-1)},bindKey:{win:\"Ctrl-Alt-Left\",mac:\"Ctrl-Alt-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreAfter\",exec:function(e){e.selectMore(1)},bindKey:{win:\"Ctrl-Alt-Right\",mac:\"Ctrl-Alt-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextBefore\",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Left\",mac:\"Ctrl-Alt-Shift-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextAfter\",exec:function(e){e.selectMore(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Right\",mac:\"Ctrl-Alt-Shift-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"splitIntoLines\",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:\"Ctrl-Alt-L\",mac:\"Ctrl-Alt-L\"},readOnly:!0},{name:\"alignCursors\",exec:function(e){e.alignCursors()},bindKey:{win:\"Ctrl-Alt-A\",mac:\"Ctrl-Alt-A\"},scrollIntoView:\"cursor\"},{name:\"findAll\",exec:function(e){e.findAll()},bindKey:{win:\"Ctrl-Alt-K\",mac:\"Ctrl-Alt-G\"},scrollIntoView:\"cursor\",readOnly:!0}],t.multiSelectCommands=[{name:\"singleSelection\",bindKey:\"esc\",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:\"cursor\",readOnly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var n=e(\"../keyboard/hash_handler\").HashHandler;t.keyboardHandler=new n(t.multiSelectCommands)}),ace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"],function(e,t,r){var n=e(\"./range_list\").RangeList,i=e(\"./range\").Range,o=e(\"./selection\").Selection,s=e(\"./mouse/multi_select_handler\").onMouseDown,a=e(\"./lib/event\"),l=e(\"./lib/lang\"),c=e(\"./commands/multi_select_commands\");t.commands=c.defaultCommands.concat(c.multiSelectCommands);var u=new(0,e(\"./search\").Search);var d=e(\"./edit_session\").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(d.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(e){if(!this.inMultiSelectMode&&0===this.rangeCount){var r=this.toOrientedRange();if(this.rangeList.add(r),this.rangeList.add(e),2!=this.rangeList.ranges.length)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(r),this.$onAddRange(r)}e.cursor||(e.cursor=e.end);var n=this.rangeList.add(e);return this.$onAddRange(e),n.length&&this.$onRemoveRange(n),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal(\"multiSelect\"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal(\"addRange\",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var r=e.length;r--;){var n=this.ranges.indexOf(e[r]);this.ranges.splice(n,1)}this._signal(\"removeRange\",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal(\"singleSelect\"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new n,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],r=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(r,t.cursor==t.start)}else{r=this.getRange();var n=this.isBackwards(),o=r.start.row,s=r.end.row;if(o==s){if(n)var a=r.end,l=r.start;else a=r.start,l=r.end;return this.addRange(i.fromPoints(l,l)),void this.addRange(i.fromPoints(a,a))}var c=[],u=this.getLineRange(o,!0);u.start.column=r.start.column,c.push(u);for(var d=o+1;d<s;d++)c.push(this.getLineRange(d,!0));(u=this.getLineRange(s,!0)).end.column=r.end.column,c.push(u),c.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],r=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(r,t.cursor==t.start)}else{var n=this.session.documentToScreenPosition(this.selectionLead),o=this.session.documentToScreenPosition(this.selectionAnchor);this.rectangularRangeBlock(n,o).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,r){var n=[],o=e.column<t.column;if(o)var s=e.column,a=t.column;else s=t.column,a=e.column;var l=e.row<t.row;if(l)var c=e.row,u=t.row;else c=t.row,u=e.row;s<0&&(s=0),c<0&&(c=0),c==u&&(r=!0);for(var d=c;d<=u;d++){var g=i.fromPoints(this.session.screenToDocumentPosition(d,s),this.session.screenToDocumentPosition(d,a));if(g.isEmpty()){if(m&&h(g.end,m))break;var m=g.end}g.cursor=o?g.start:g.end,n.push(g)}if(l&&n.reverse(),!r){for(var p=n.length-1;n[p].isEmpty()&&p>0;)p--;if(p>0)for(var _=0;n[_].isEmpty();)_++;for(var f=p;f>=_;f--)n[f].isEmpty()&&n.splice(f,1)}return n}}.call(o.prototype);var g=e(\"./editor\").Editor;function h(e,t){return e.row==t.row&&e.column==t.column}function m(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on(\"changeSession\",e.$multiselectOnSessionChange),e.on(\"mousedown\",s),e.commands.addCommands(c.defaultCommands),function(e){var t=e.textInput.getElement(),r=!1;function n(t){r&&(e.renderer.setMouseCursor(\"\"),r=!1)}a.addListener(t,\"keydown\",function(t){var i=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&i?r||(e.renderer.setMouseCursor(\"crosshair\"),r=!0):r&&n()}),a.addListener(t,\"keyup\",n),a.addListener(t,\"blur\",n)}(e))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,\"ace_selection\",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,r=e.length;r--;){var n=e[r];if(n.marker){this.session.removeMarker(n.marker);var i=t.indexOf(n);-1!=i&&t.splice(i,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle(\"ace_multiselect\"),this.keyBinding.addKeyboardHandler(c.keyboardHandler),this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle(\"ace_multiselect\"),this.keyBinding.removeKeyboardHandler(c.keyboardHandler),this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit(\"changeSelection\"))},this.$onMultiSelectExec=function(e){var t=e.command,r=e.editor;if(r.multiSelect){if(t.multiSelectAction)\"forEach\"==t.multiSelectAction?n=r.forEachSelection(t,e.args):\"forEachLine\"==t.multiSelectAction?n=r.forEachSelection(t,e.args,!0):\"single\"==t.multiSelectAction?(r.exitMultiSelectMode(),n=t.exec(r,e.args||{})):n=t.multiSelectAction(r,e.args||{});else{var n=t.exec(r,e.args||{});r.multiSelect.addRange(r.multiSelect.toOrientedRange()),r.multiSelect.mergeOverlappingRanges()}return n}},this.forEachSelection=function(e,t,r){if(!this.inVirtualSelectionMode){var n,i=r&&r.keepOrder,s=1==r||r&&r.$byLines,a=this.session,l=this.selection,c=l.rangeList,u=(i?l:c).ranges;if(!u.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var d=l._eventRegistry;l._eventRegistry={};var g=new o(a);this.inVirtualSelectionMode=!0;for(var h=u.length;h--;){if(s)for(;h>0&&u[h].start.row==u[h-1].end.row;)h--;g.fromOrientedRange(u[h]),g.index=h,this.selection=a.selection=g;var m=e.exec?e.exec(this,t||{}):e(this,t||{});n||void 0===m||(n=m),g.toOrientedRange(u[h])}g.detach(),this.selection=a.selection=l,this.inVirtualSelectionMode=!1,l._eventRegistry=d,l.mergeOverlappingRanges();var p=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),p&&p.from==p.to&&this.renderer.animateScrolling(p.from),n}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,r=[],n=0;n<t.length;n++)r.push(this.session.getTextRange(t[n]));var i=this.session.getDocument().getNewLineCharacter();(e=r.join(i)).length==(r.length-1)*i.length&&(e=\"\")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var r=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&t==this.multiSelect.anchor)return;var n=t==this.multiSelect.anchor?r.cursor==r.start?r.end:r.start:r.cursor;n.row==t.row&&this.session.$clipPositionToDocument(n.row,n.column).column==t.column||this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange())}},this.findAll=function(e,t,r){if((t=t||{}).needle=e||t.needle,null==t.needle){var n=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(n)}this.$search.set(t);var i=this.$search.findAll(this.session);if(!i.length)return 0;this.$blockScrolling+=1;var o=this.multiSelect;r||o.toSingleRange(i[0]);for(var s=i.length;s--;)o.addRange(i[s],!0);return n&&o.rangeList.rangeAtPoint(n.start)&&o.addRange(n,!0),this.$blockScrolling-=1,i.length},this.selectMoreLines=function(e,t){var r=this.selection.toOrientedRange(),n=r.cursor==r.end,o=this.session.documentToScreenPosition(r.cursor);this.selection.$desiredColumn&&(o.column=this.selection.$desiredColumn);var s,a=this.session.screenToDocumentPosition(o.row+e,o.column);if(r.isEmpty())c=a;else var l=this.session.documentToScreenPosition(n?r.end:r.start),c=this.session.screenToDocumentPosition(l.row+e,l.column);n?(s=i.fromPoints(a,c)).cursor=s.start:(s=i.fromPoints(c,a)).cursor=s.end;if(s.desiredColumn=o.column,this.selection.inMultiSelectMode){if(t)var u=r.cursor}else this.selection.addRange(r);this.selection.addRange(s),u&&this.selection.substractPoint(u)},this.transposeSelections=function(e){for(var t=this.session,r=t.multiSelect,n=r.ranges,i=n.length;i--;){if((a=n[i]).isEmpty()){var o=t.getWordRange(a.start.row,a.start.column);a.start.row=o.start.row,a.start.column=o.start.column,a.end.row=o.end.row,a.end.column=o.end.column}}r.mergeOverlappingRanges();var s=[];for(i=n.length;i--;){var a=n[i];s.unshift(t.getTextRange(a))}e<0?s.unshift(s.pop()):s.push(s.shift());for(i=n.length;i--;){o=(a=n[i]).clone();t.replace(a,s[i]),a.start.row=o.start.row,a.start.column=o.start.column}},this.selectMore=function(e,t,r){var n=this.session,i=n.multiSelect.toOrientedRange();if(!i.isEmpty()||((i=n.getWordRange(i.start.row,i.start.column)).cursor=-1==e?i.start:i.end,this.multiSelect.addRange(i),!r)){var o=n.getTextRange(i),s=function(e,t,r){return u.$options.wrap=!0,u.$options.needle=t,u.$options.backwards=-1==r,u.find(e)}(n,o,e);s&&(s.cursor=-1==e?s.start:s.end,this.$blockScrolling+=1,this.session.unfold(s),this.multiSelect.addRange(s),this.$blockScrolling-=1,this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(i.cursor)}},this.alignCursors=function(){var e=this.session,t=e.multiSelect,r=t.ranges,n=-1,o=r.filter(function(e){if(e.cursor.row==n)return!0;n=e.cursor.row});if(r.length&&o.length!=r.length-1){o.forEach(function(e){t.substractPoint(e.cursor)});var s=0,a=1/0,c=r.map(function(t){var r=t.cursor,n=e.getLine(r.row).substr(r.column).search(/\\S/g);return-1==n&&(n=0),r.column>s&&(s=r.column),n<a&&(a=n),n});r.forEach(function(t,r){var n=t.cursor,o=s-n.column,u=c[r]-a;o>u?e.insert(n,l.stringRepeat(\" \",o-u)):e.remove(new i(n.row,n.column,n.row,n.column-o+u)),t.start.column=t.end.column=s,t.start.row=t.end.row=n.row,t.cursor=t.end}),t.fromOrientedRange(r[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var u=this.selection.getRange(),d=u.start.row,g=u.end.row,h=d==g;if(h){var m,p=this.session.getLength();do{m=this.session.getLine(g)}while(/[=:]/.test(m)&&++g<p);do{m=this.session.getLine(d)}while(/[=:]/.test(m)&&--d>0);d<0&&(d=0),g>=p&&(g=p-1)}var _=this.session.removeFullLines(d,g);_=this.$reAlignText(_,h),this.session.insert({row:d,column:0},_.join(\"\\n\")+\"\\n\"),h||(u.start.column=0,u.end.column=_[_.length-1].length),this.selection.setRange(u)}},this.$reAlignText=function(e,t){var r,n,i,o=!0,s=!0;return e.map(function(e){var t=e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);return t?null==r?(r=t[1].length,n=t[2].length,i=t[3].length,t):(r+n+i!=t[1].length+t[2].length+t[3].length&&(s=!1),r!=t[1].length&&(o=!1),r>t[1].length&&(r=t[1].length),n<t[2].length&&(n=t[2].length),i>t[3].length&&(i=t[3].length),t):[e]}).map(t?c:o?s?function(e){return e[2]?a(r+n-e[2].length)+e[2]+a(i)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}:c:function(e){return e[2]?a(r)+e[2]+a(i)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]});function a(e){return l.stringRepeat(\" \",e)}function c(e){return e[2]?a(r)+e[2]+a(n-e[2].length+i)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}}}).call(g.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var r=e.oldSession;r&&(r.multiSelect.off(\"addRange\",this.$onAddRange),r.multiSelect.off(\"removeRange\",this.$onRemoveRange),r.multiSelect.off(\"multiSelect\",this.$onMultiSelect),r.multiSelect.off(\"singleSelect\",this.$onSingleSelect),r.multiSelect.lead.off(\"change\",this.$checkMultiselectChange),r.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange)),t&&(t.multiSelect.on(\"addRange\",this.$onAddRange),t.multiSelect.on(\"removeRange\",this.$onRemoveRange),t.multiSelect.on(\"multiSelect\",this.$onMultiSelect),t.multiSelect.on(\"singleSelect\",this.$onSingleSelect),t.multiSelect.lead.on(\"change\",this.$checkMultiselectChange),t.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e(\"./config\").defineOptions(g.prototype,\"editor\",{enableMultiselect:{set:function(e){m(this),e?(this.on(\"changeSession\",this.$multiselectOnSessionChange),this.on(\"mousedown\",s)):(this.off(\"changeSession\",this.$multiselectOnSessionChange),this.off(\"mousedown\",s))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),ace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../../range\").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);return this.foldingStartMarker.test(n)?\"start\":\"markbeginend\"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(n)?\"end\":\"\"},this.getFoldWidgetRange=function(e,t,r){return null},this.indentationBlock=function(e,t,r){var i=/\\S/,o=e.getLine(t),s=o.search(i);if(-1!=s){for(var a=r||o.length,l=e.getLength(),c=t,u=t;++t<l;){var d=e.getLine(t).search(i);if(-1!=d){if(d<=s)break;u=t}}if(u>c){var g=e.getLine(u).length;return new n(c,a,u,g)}}},this.openingBracketBlock=function(e,t,r,i,o){var s={row:r,column:i+1},a=e.$findClosingBracket(t,s,o);if(a){var l=e.foldWidgets[a.row];return null==l&&(l=e.getFoldWidget(a.row)),\"start\"==l&&a.row>s.row&&(a.row--,a.column=e.getLine(a.row).length),n.fromPoints(s,a)}},this.closingBracketBlock=function(e,t,r,i,o){var s={row:r,column:i},a=e.$findOpeningBracket(t,s);if(a)return a.column++,s.column--,n.fromPoints(a,s)}}).call(i.prototype)}),ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,r){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',e(\"../lib/dom\").importCssString(t.cssText,t.cssClass)}),ace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"],function(e,t,r){\"use strict\";e(\"./lib/oop\");var n=e(\"./lib/dom\");e(\"./range\").Range;function i(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on(\"change\",this.updateOnChange),this.session.on(\"changeFold\",this.updateOnFold),this.session.on(\"changeEditor\",this.$onChangeEditor)}(function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on(\"beforeRender\",this.measureWidgets),e.renderer.on(\"afterRender\",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off(\"beforeRender\",this.measureWidgets),t.renderer.off(\"afterRender\",this.renderWidgets);var r=this.session.lineWidgets;r&&r.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})}},this.updateOnFold=function(e,t){var r=t.lineWidgets;if(r&&e.action){for(var n=e.data,i=n.start.row,o=n.end.row,s=\"add\"==e.action,a=i+1;a<o;a++)r[a]&&(r[a].hidden=s);r[o]&&(s?r[i]?r[o].hidden=s:r[i]=r[o]:(r[i]==r[o]&&(r[i]=void 0),r[o].hidden=s))}},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(t){var r=e.start.row,n=e.end.row-r;if(0===n);else if(\"remove\"==e.action){t.splice(r+1,n).forEach(function(e){e&&this.removeLineWidget(e)},this),this.$updateRows()}else{var i=new Array(n);i.unshift(r,0),t.splice.apply(t,i),this.$updateRows()}}},this.$updateRows=function(){var e=this.session.lineWidgets;if(e){var t=!0;e.forEach(function(e,r){if(e)for(t=!1,e.row=r;e.$oldWidget;)e.$oldWidget.row=r,e=e.$oldWidget}),t&&(this.session.lineWidgets=null)}},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength()));var t=this.session.lineWidgets[e.row];t&&(e.$oldWidget=t,t.el&&t.el.parentNode&&(t.el.parentNode.removeChild(t.el),t._inDocument=!1)),this.session.lineWidgets[e.row]=e,e.session=this.session;var r=this.editor.renderer;e.html&&!e.el&&(e.el=n.createElement(\"div\"),e.el.innerHTML=e.html),e.el&&(n.addCssClass(e.el,\"ace_lineWidgetContainer\"),e.el.style.position=\"absolute\",e.el.style.zIndex=5,r.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),null==e.pixelHeight&&(e.pixelHeight=e.el.offsetHeight),null==e.rowCount&&(e.rowCount=e.pixelHeight/r.layerConfig.lineHeight);var i=this.session.getFoldAt(e.row,0);if(e.$fold=i,i){var o=this.session.lineWidgets;e.row!=i.end.row||o[i.start.row]?e.hidden=!0:o[i.start.row]=e}return this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,r),this.onWidgetChanged(e),e},this.removeLineWidget=function(e){if(e._inDocument=!1,e.session=null,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el),e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(e){}if(this.session.lineWidgets){var t=this.session.lineWidgets[e.row];if(t==e)this.session.lineWidgets[e.row]=e.$oldWidget,e.$oldWidget&&this.onWidgetChanged(e.$oldWidget);else for(;t;){if(t.$oldWidget==e){t.$oldWidget=e.$oldWidget;break}t=t.$oldWidget}}this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows()},this.getWidgetsAtRow=function(e){for(var t=this.session.lineWidgets,r=t&&t[e],n=[];r;)n.push(r),r=r.$oldWidget;return n},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var r=this.session._changedWidgets,n=t.layerConfig;if(r&&r.length){for(var i=1/0,o=0;o<r.length;o++){var s=r[o];if(s&&s.el&&s.session==this.session){if(!s._inDocument){if(this.session.lineWidgets[s.row]!=s)continue;s._inDocument=!0,t.container.appendChild(s.el)}s.h=s.el.offsetHeight,s.fixedWidth||(s.w=s.el.offsetWidth,s.screenWidth=Math.ceil(s.w/n.characterWidth));var a=s.h/n.lineHeight;s.coverLine&&(a-=this.session.getRowLineCount(s.row))<0&&(a=0),s.rowCount!=a&&(s.rowCount=a,s.row<i&&(i=s.row))}}i!=1/0&&(this.session._emit(\"changeFold\",{data:{start:{row:i}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]}},this.renderWidgets=function(e,t){var r=t.layerConfig,n=this.session.lineWidgets;if(n){for(var i=Math.min(this.firstRow,r.firstRow),o=Math.max(this.lastRow,r.lastRow,n.length);i>0&&!n[i];)i--;this.firstRow=r.firstRow,this.lastRow=r.lastRow,t.$cursorLayer.config=r;for(var s=i;s<=o;s++){var a=n[s];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+\"px\";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var l=t.$cursorLayer.getPixelPosition({row:s,column:0},!0).top;a.coverLine||(l+=r.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=l-r.offset+\"px\";var c=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(c-=t.scrollLeft),a.el.style.left=c+\"px\",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=r.width+2*r.padding+\"px\"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+\"px\":a.el.style.right=\"\"}}}}}).call(i.prototype),t.LineWidgets=i}),ace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../line_widgets\").LineWidgets,i=e(\"../lib/dom\"),o=e(\"../range\").Range;t.showErrorMarker=function(e,t){var r=e.session;r.widgetManager||(r.widgetManager=new n(r),r.widgetManager.attach(e));var s=e.getCursorPosition(),a=s.row,l=r.widgetManager.getWidgetsAtRow(a).filter(function(e){return\"errorMarker\"==e.type})[0];l?l.destroy():a-=t;var c,u=function(e,t,r){var n=e.getAnnotations().sort(o.comparePoints);if(n.length){var i=function(e,t,r){for(var n=0,i=e.length-1;n<=i;){var o=n+i>>1,s=r(t,e[o]);if(s>0)n=o+1;else{if(!(s<0))return o;i=o-1}}return-(n+1)}(n,{row:t,column:-1},o.comparePoints);i<0&&(i=-i-1),i>=n.length?i=r>0?0:n.length-1:0===i&&r<0&&(i=n.length-1);var s=n[i];if(s&&r){if(s.row===t){do{s=n[i+=r]}while(s&&s.row===t);if(!s)return n.slice()}var a=[];t=s.row;do{a[r<0?\"unshift\":\"push\"](s),s=n[i+=r]}while(s&&s.row==t);return a.length&&a}}}(r,a,t);if(u){var d=u[0];s.column=(d.pos&&\"number\"!=typeof d.column?d.pos.sc:d.column)||0,s.row=d.row,c=e.renderer.$gutterLayer.$annotations[s.row]}else{if(l)return;c={text:[\"Looks good!\"],className:\"ace_ok\"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var g={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement(\"div\"),type:\"errorMarker\"},h=g.el.appendChild(i.createElement(\"div\")),m=g.el.appendChild(i.createElement(\"div\"));m.className=\"error_widget_arrow \"+c.className;var p=e.renderer.$cursorLayer.getPixelPosition(s).left;m.style.left=p+e.renderer.gutterWidth-5+\"px\",g.el.className=\"error_widget_wrapper\",h.className=\"error_widget \"+c.className,h.innerHTML=c.text.join(\"<br>\"),h.appendChild(i.createElement(\"div\"));var _=function(e,t,r){if(0===t&&(\"esc\"===r||\"return\"===r))return g.destroy(),{command:\"null\"}};g.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(_),r.widgetManager.removeLineWidget(g),e.off(\"changeSelection\",g.destroy),e.off(\"changeSession\",g.destroy),e.off(\"mouseup\",g.destroy),e.off(\"change\",g.destroy))},e.keyBinding.addKeyboardHandler(_),e.on(\"changeSelection\",g.destroy),e.on(\"changeSession\",g.destroy),e.on(\"mouseup\",g.destroy),e.on(\"change\",g.destroy),e.session.widgetManager.addLineWidget(g),g.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:g.el.offsetHeight})},i.importCssString(\"    .error_widget_wrapper {        background: inherit;        color: inherit;        border:none    }    .error_widget {        border-top: solid 2px;        border-bottom: solid 2px;        margin: 5px 0;        padding: 10px 40px;        white-space: pre-wrap;    }    .error_widget.ace_error, .error_widget_arrow.ace_error{        border-color: #ff5a5a    }    .error_widget.ace_warning, .error_widget_arrow.ace_warning{        border-color: #F1D817    }    .error_widget.ace_info, .error_widget_arrow.ace_info{        border-color: #5a5a5a    }    .error_widget.ace_ok, .error_widget_arrow.ace_ok{        border-color: #5aaa5a    }    .error_widget_arrow {        position: absolute;        border: solid 5px;        border-top-color: transparent!important;        border-right-color: transparent!important;        border-left-color: transparent!important;        top: -5px;    }\",\"\")}),ace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],function(e,t,r){\"use strict\";e(\"./lib/fixoldbrowsers\");var n=e(\"./lib/dom\"),i=e(\"./lib/event\"),o=e(\"./editor\").Editor,s=e(\"./edit_session\").EditSession,a=e(\"./undomanager\").UndoManager,l=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.require=e,\"function\"==typeof define&&(t.define=define),t.edit=function(e){if(\"string\"==typeof e){var r=e;if(!(e=document.getElementById(r)))throw new Error(\"ace.edit can't find div #\"+r)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var s=\"\";if(e&&/input|textarea/i.test(e.tagName)){var a=e;s=a.value,e=n.createElement(\"pre\"),a.parentNode.replaceChild(e,a)}else e&&(s=n.getInnerText(e),e.innerHTML=\"\");var c=t.createEditSession(s),u=new o(new l(e));u.setSession(c);var d={document:c,editor:u,onResize:u.resize.bind(u,null)};return a&&(d.textarea=a),i.addListener(window,\"resize\",d.onResize),u.on(\"destroy\",function(){i.removeListener(window,\"resize\",d.onResize),d.editor.container.env=null}),u.container.env=u.env=d,u},t.createEditSession=function(e,t){var r=new s(e,t);return r.setUndoManager(new a),r},t.EditSession=s,t.UndoManager=a,t.version=\"1.2.6\"}),ace.require([\"ace/ace\"],function(e){for(var t in e&&(e.config.init(!0),e.define=ace.define),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t])}),ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"],function(e,t,r){\"use strict\";var n=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./lib/lang\"),s=e(\"./range\").Range,a=e(\"./anchor\").Anchor,l=e(\"./keyboard/hash_handler\").HashHandler,c=e(\"./tokenizer\").Tokenizer,u=s.comparePoints,d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){n.implement(this,i),this.getTokenizer=function(){function e(e,t,r){return e=e.substr(1),/^\\d+$/.test(e)&&!r.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}return d.$tokenizer=new c({start:[{regex:/:/,onMatch:function(e,t,r){return r.length&&r[0].expectIf?(r[0].expectIf=!1,r[0].elseBranch=r[0],[r[0]]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,r){var n=e[1];return\"}\"==n&&r.length||-1!=\"`$\\\\\".indexOf(n)?e=n:r.inFormatString&&(\"n\"==n||\"t\"==n?e=\"\\n\":-1!=\"ulULE\".indexOf(n)&&(e={changeCase:n,local:n>\"a\"})),[e]}},{regex:/}/,onMatch:function(e,t,r){return[r.length?r.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,r,n){var i=e(t.substr(1),0,n);return n.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,r){r[0].choices=e.slice(1,-1).split(\",\")},next:\"start\"},{regex:\"/(\"+t(\"/\")+\"+)/(?:(\"+t(\"/\")+\"*)/)(\\\\w*):?\",onMatch:function(e,t,r){var n=r[0];return n.fmtString=e,e=this.splitRegex.exec(e),n.guard=e[1],n.fmt=e[2],n.flag=e[3],\"\"},next:\"start\"},{regex:\"`\"+t(\"`\")+\"*`\",onMatch:function(e,t,r){return r[0].code=e.splice(1,-1),\"\"},next:\"start\"},{regex:\"\\\\?\",onMatch:function(e,t,r){r[0]&&(r[0].expectIf=!0)},next:\"start\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:\"/(\"+t(\"/\")+\"+)/\",token:\"regex\"},{regex:\"\",onMatch:function(e,t,r){r.inFormatString=!0},next:\"start\"}]}),d.prototype.getTokenizer=function(){return d.$tokenizer},d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\\d+$/.test(t)){var r=t.substr(1);return(this.variables[t[0]+\"__\"]||{})[r]}if(/^\\d+$/.test(t))return(this.variables.__||{})[t];if(t=t.replace(/^TM_/,\"\"),e){var n=e.session;switch(t){case\"CURRENT_WORD\":var i=n.getWordRange();case\"SELECTION\":case\"SELECTED_TEXT\":return n.getTextRange(i);case\"CURRENT_LINE\":return n.getLine(e.getCursorPosition().row);case\"PREV_LINE\":return n.getLine(e.getCursorPosition().row-1);case\"LINE_INDEX\":return e.getCursorPosition().column;case\"LINE_NUMBER\":return e.getCursorPosition().row+1;case\"SOFT_TABS\":return n.getUseSoftTabs()?\"YES\":\"NO\";case\"TAB_SIZE\":return n.getTabSize();case\"FILENAME\":case\"FILEPATH\":return\"\";case\"FULLNAME\":return\"Ace\"}}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||\"\":this.$getDefaultValue(e,t)||\"\"},this.tmStrFormat=function(e,t,r){var n=t.flag||\"\",i=t.guard;i=new RegExp(i,n.replace(/[^gi]/,\"\"));var o=this.tokenizeTmSnippet(t.fmt,\"formatString\"),s=this,a=e.replace(i,function(){s.variables.__=arguments;for(var e=s.resolveVariables(o,r),t=\"E\",n=0;n<e.length;n++){var i=e[n];if(\"object\"==typeof i)if(e[n]=\"\",i.changeCase&&i.local){var a=e[n+1];a&&\"string\"==typeof a&&(\"u\"==i.changeCase?e[n]=a[0].toUpperCase():e[n]=a[0].toLowerCase(),e[n+1]=a.substr(1))}else i.changeCase&&(t=i.changeCase);else\"U\"==t?e[n]=i.toUpperCase():\"L\"==t&&(e[n]=i.toLowerCase())}return e.join(\"\")});return this.variables.__=null,a},this.resolveVariables=function(e,t){for(var r=[],n=0;n<e.length;n++){var i=e[n];if(\"string\"==typeof i)r.push(i);else{if(\"object\"!=typeof i)continue;if(i.skip)s(i);else{if(i.processed<n)continue;if(i.text){var o=this.getVariableValue(t,i.text);o&&i.fmtString&&(o=this.tmStrFormat(o,i)),i.processed=n,null==i.expectIf?o&&(r.push(o),s(i)):o?i.skip=i.elseBranch:s(i)}else(null!=i.tabstopId||null!=i.changeCase)&&r.push(i)}}}function s(t){var r=e.indexOf(t,n+1);-1!=r&&(n=r)}return r},this.insertSnippetForSelection=function(e,t){var r=e.getCursorPosition(),n=e.session.getLine(r.row),i=e.session.getTabString(),o=n.match(/^\\s*/)[0];r.column<o.length&&(o=o.slice(0,r.column)),t=t.replace(/\\r/g,\"\");var s=this.tokenizeTmSnippet(t);s=(s=this.resolveVariables(s,e)).map(function(e){return\"\\n\"==e?e+o:\"string\"==typeof e?e.replace(/\\t/g,i):e});var a=[];s.forEach(function(e,t){if(\"object\"==typeof e){var r=e.tabstopId,n=a[r];if(n||((n=a[r]=[]).index=r,n.value=\"\"),-1===n.indexOf(e)){n.push(e);var i=s.indexOf(e,t+1);if(-1!==i){var o=s.slice(t+1,i);o.some(function(e){return\"object\"==typeof e})&&!n.value?n.value=o:!o.length||n.value&&\"string\"==typeof n.value||(n.value=o.join(\"\"))}}}}),a.forEach(function(e){e.length=0});var l={};function c(e){for(var t=[],r=0;r<e.length;r++){var n=e[r];if(\"object\"==typeof n){if(l[n.tabstopId])continue;n=t[e.lastIndexOf(n,r-1)]||{tabstopId:n.tabstopId}}t[r]=n}return t}for(var u=0;u<s.length;u++){var d=s[u];if(\"object\"==typeof d){var h=d.tabstopId,m=s.indexOf(d,u+1);if(l[h])l[h]===d&&(l[h]=null);else{var p=a[h],_=\"string\"==typeof p.value?[p.value]:c(p.value);_.unshift(u+1,Math.max(0,m-u)),_.push(d),l[h]=d,s.splice.apply(s,_),-1===p.indexOf(d)&&p.push(d)}}}var f=0,b=0,y=\"\";s.forEach(function(e){if(\"string\"==typeof e){var t=e.split(\"\\n\");t.length>1?(b=t[t.length-1].length,f+=t.length-1):b+=e.length,y+=e}else e.start?e.end={row:f,column:b}:e.start={row:f,column:b}});var x=e.getSelectionRange(),v=e.session.replace(x,y),w=new g(e),k=e.inVirtualSelectionMode&&e.selection.index;w.addTabstops(a,x.start,v,k)},this.insertSnippet=function(e,t){var r=this;if(e.inVirtualSelectionMode)return r.insertSnippetForSelection(e,t);e.forEachSelection(function(){r.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";if(\"html\"===(t=t.split(\"/\").pop())||\"php\"===t){\"php\"!==t||e.session.$mode.inlinePhp||(t=\"html\");var r=e.getCursorPosition(),n=e.session.getState(r.row);\"object\"==typeof n&&(n=n[0]),n.substring&&(\"js-\"==n.substring(0,3)?t=\"javascript\":\"css-\"==n.substring(0,4)?t=\"css\":\"php-\"==n.substring(0,4)&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),r=[t],n=this.snippetMap;return n[t]&&n[t].includeScopes&&r.push.apply(r,n[t].includeScopes),r.push(\"_\"),r},this.expandWithTab=function(e,t){var r=this,n=e.forEachSelection(function(){return r.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return n&&e.tabstopManager&&e.tabstopManager.tabNext(),n},this.expandSnippetForSelection=function(e,t){var r,n=e.getCursorPosition(),i=e.session.getLine(n.row),o=i.substring(0,n.column),s=i.substr(n.column),a=this.snippetMap;return this.getActiveScopes(e).some(function(e){var t=a[e];return t&&(r=this.findMatchingSnippet(t,o,s)),!!r},this),!!r&&(t&&t.dryRun||(e.session.doc.removeInLine(n.row,n.column-r.replaceBefore.length,n.column+r.replaceAfter.length),this.variables.M__=r.matchBefore,this.variables.T__=r.matchAfter,this.insertSnippetForSelection(e,r.content),this.variables.M__=this.variables.T__=null),!0)},this.findMatchingSnippet=function(e,t,r){for(var n=e.length;n--;){var i=e[n];if((!i.startRe||i.startRe.test(t))&&((!i.endRe||i.endRe.test(r))&&(i.startRe||i.endRe)))return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(r):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(r)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){var r=this.snippetMap,n=this.snippetNameMap,i=this;function s(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function a(e,t,r){return e=s(e),t=s(t),r?(e=t+e)&&\"$\"!=e[e.length-1]&&(e+=\"$\"):(e+=t)&&\"^\"!=e[0]&&(e=\"^\"+e),new RegExp(e)}function l(e){e.scope||(e.scope=t||\"_\"),t=e.scope,r[t]||(r[t]=[],n[t]={});var s=n[t];if(e.name){var l=s[e.name];l&&i.unregister(l),s[e.name]=e}r[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=o.escapeRegExp(e.tabTrigger)),(e.trigger||e.guard||e.endTrigger||e.endGuard)&&(e.startRe=a(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,\"\",!0),e.endRe=a(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,\"\",!0))}e||(e=[]),e&&e.content?l(e):Array.isArray(e)&&e.forEach(l),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){var r=this.snippetMap,n=this.snippetNameMap;function i(e){var i=n[e.scope||t];if(i&&i[e.name]){delete i[e.name];var o=r[e.scope||t],s=o&&o.indexOf(e);s>=0&&o.splice(s,1)}}e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");for(var t,r=[],n={},i=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;t=i.exec(e);){if(t[1])try{n=JSON.parse(t[1]),r.push(n)}catch(e){}if(t[4])n.content=t[4].replace(/^\\t/gm,\"\"),r.push(n),n={};else{var o=t[2],s=t[3];if(\"regex\"==o){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(s)[1],n.trigger=a.exec(s)[1],n.endTrigger=a.exec(s)[1],n.endGuard=a.exec(s)[1]}else\"snippet\"==o?(n.tabTrigger=s.match(/^\\S*/)[0],n.name||(n.name=s)):n[o]=s}}return r},this.getSnippetByName=function(e,t){var r,n=this.snippetNameMap;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(d.prototype);var g=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=o.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=\"r\"==e.action[0],r=e.start,n=e.end,i=r.row,o=n.row-i,s=n.column-r.column;if(t&&(o=-o,s=-s),!this.$inChange&&t){var a=this.selectedTabstop,l=a&&!a.some(function(e){return u(e.start,r)<=0&&u(e.end,n)>=0});if(l)return this.detach()}for(var c=this.ranges,d=0;d<c.length;d++){var g=c[d];g.end.row<r.row||(t&&u(r,g.start)<0&&u(n,g.end)>0?(this.removeRange(g),d--):(g.start.row==i&&g.start.column>r.column&&(g.start.column+=s),g.end.row==i&&g.end.column>=r.column&&(g.end.column+=s),g.start.row>=i&&(g.start.row+=o),g.end.row>=i&&(g.end.row+=o),u(g.start,g.end)>0&&this.removeRange(g)))}c.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(e&&e.hasLinkedRanges){this.$inChange=!0;for(var r=this.editor.session,n=r.getTextRange(e.firstNonLinked),i=e.length;i--;){var o=e[i];if(o.linked){var s=t.snippetManager.tmStrFormat(n,o.original);r.replace(o,s)}}this.$inChange=!1}},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(this.editor){for(var e=this.editor.selection.lead,t=this.editor.selection.anchor,r=this.editor.selection.isEmpty(),n=this.ranges.length;n--;)if(!this.ranges[n].linked){var i=this.ranges[n].contains(e.row,e.column),o=r||this.ranges[n].contains(t.row,t.column);if(i&&o)return}this.detach()}},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,r=this.index+(e||1);(r=Math.min(Math.max(r,1),t))==t&&(r=0),this.selectTabstop(r),0===r&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];if(t&&this.addTabstopMarkers(t),this.index=e,(t=this.tabstops[this.index])&&t.length){if(this.selectedTabstop=t,this.editor.inVirtualSelectionMode)this.editor.selection.setRange(t.firstNonLinked);else{var r=this.editor.multiSelect;r.toSingleRange(t.firstNonLinked.clone());for(var n=t.length;n--;)t.hasLinkedRanges&&t[n].linked||r.addRange(t[n].clone(),!0);r.ranges[0]&&r.addRange(r.ranges[0].clone())}this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)}},this.addTabstops=function(e,t,r){if(this.$openTabstops||(this.$openTabstops=[]),!e[0]){var n=s.fromPoints(r,r);p(n.start,t),p(n.end,t),e[0]=[n],e[0].index=0}var i=[this.index+1,0],o=this.ranges;e.forEach(function(e,r){for(var n=this.$openTabstops[r]||e,a=e.length;a--;){var l=e[a],c=s.fromPoints(l.start,l.end||l.start);m(c.start,t),m(c.end,t),c.original=l,c.tabstop=n,o.push(c),n!=e?n.unshift(c):n[a]=c,l.fmtString?(c.linked=!0,n.hasLinkedRanges=!0):n.firstNonLinked||(n.firstNonLinked=c)}n.firstNonLinked||(n.hasLinkedRanges=!1),n===e&&(i.push(n),this.$openTabstops[r]=n),this.addTabstopMarkers(n)},this),i.length>2&&(this.tabstops.length&&i.push(i.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,i))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(-1!=(t=this.tabstops.indexOf(e.tabstop))&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new l,this.keyboardHandler.bindKeys({Tab:function(e){t.snippetManager&&t.snippetManager.expandWithTab(e)||e.tabstopManager.tabNext(1)},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(g.prototype);var h={};h.onChange=a.prototype.onChange,h.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},h.update=function(e,t,r){this.$insertRight=r,this.pos=e,this.onChange(t)};var m=function(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row},p=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e(\"./lib/dom\").importCssString(\".ace_snippet-marker {    -moz-box-sizing: border-box;    box-sizing: border-box;    background: rgba(194, 193, 208, 0.09);    border: 1px dotted rgba(211, 208, 235, 0.62);    position: absolute;}\"),t.snippetManager=new d;var _=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,r){return t.snippetManager.insertSnippet(this,e,r)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(_.prototype)}),ace.define(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"resources\",\"resources\",\"tabStops\",\"resources\",\"utils\",\"actions\",\"ace/config\",\"ace/config\"],function(e,t,r){\"use strict\";var n,i,o=e(\"ace/keyboard/hash_handler\").HashHandler,s=e(\"ace/editor\").Editor,a=e(\"ace/snippets\").snippetManager,l=e(\"ace/range\").Range;function c(){}c.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),n||(n=window.emmet),(n.resources||n.require(\"resources\")).setVariable(\"indentation\",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var r=this.ace.session.doc;this.ace.selection.setRange({start:r.indexToPosition(e),end:r.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,r=e.session.getLine(t).length,n=e.session.doc.positionToIndex({row:t,column:0});return{start:n,end:n+r}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,r,n){null==r&&(r=null==t?this.getContent().length:t),null==t&&(t=0);var i=this.ace,o=i.session.doc,s=l.fromPoints(o.indexToPosition(t),o.indexToPosition(r));i.session.remove(s),s.end=s.start,e=this.$updateTabstops(e),a.insertSnippet(i,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split(\"/\").pop();if(\"html\"==e||\"php\"==e){var t=this.ace.getCursorPosition(),r=this.ace.session.getState(t.row);\"string\"!=typeof r&&(r=r[0]),r&&((r=r.split(\"-\")).length>1?e=r[0]:\"php\"==e&&(e=\"html\"))}return e},getProfileName:function(){var e=n.resources||n.require(\"resources\");switch(this.getSyntax()){case\"css\":return\"css\";case\"xml\":case\"xsl\":return\"xml\";case\"html\":var t=e.getVariable(\"profile\");return t||(t=-1!=this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i)?\"xhtml\":\"html\"),t;default:var r=this.ace.session.$mode;return r.emmetConfig&&r.emmetConfig.profile||\"xhtml\"}},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return\"\"},$updateTabstops:function(e){var t=0,r=null,i=n.tabStops||n.require(\"tabStops\"),o=(n.resources||n.require(\"resources\")).getVocabulary(\"user\"),s={tabstop:function(e){var n=parseInt(e.group,10),o=0===n;o?n=++t:n+=1e3;var a=e.placeholder;a&&(a=i.processText(a,s));var l=\"${\"+n+(a?\":\"+a:\"\")+\"}\";return o&&(r=[e.start,l]),l},escape:function(e){return\"$\"==e?\"\\\\$\":\"\\\\\"==e?\"\\\\\\\\\":e}};if(e=i.processText(e,s),o.variables.insert_final_tabstop&&!/\\$\\{0\\}$/.test(e))e+=\"${0}\";else if(r){e=(n.utils?n.utils.common:n.require(\"utils\")).replaceSubstring(e,\"${0}\",r[0],r[1])}return e}};var u={expand_abbreviation:{mac:\"ctrl+alt+e\",win:\"alt+e\"},match_pair_outward:{mac:\"ctrl+d\",win:\"ctrl+,\"},match_pair_inward:{mac:\"ctrl+j\",win:\"ctrl+shift+0\"},matching_pair:{mac:\"ctrl+alt+j\",win:\"alt+j\"},next_edit_point:\"alt+right\",prev_edit_point:\"alt+left\",toggle_comment:{mac:\"command+/\",win:\"ctrl+/\"},split_join_tag:{mac:\"shift+command+'\",win:\"shift+ctrl+`\"},remove_tag:{mac:\"command+'\",win:\"shift+ctrl+;\"},evaluate_math_expression:{mac:\"shift+command+y\",win:\"shift+ctrl+y\"},increment_number_by_1:\"ctrl+up\",decrement_number_by_1:\"ctrl+down\",increment_number_by_01:\"alt+up\",decrement_number_by_01:\"alt+down\",increment_number_by_10:{mac:\"alt+command+up\",win:\"shift+alt+up\"},decrement_number_by_10:{mac:\"alt+command+down\",win:\"shift+alt+down\"},select_next_item:{mac:\"shift+command+.\",win:\"shift+ctrl+.\"},select_previous_item:{mac:\"shift+command+,\",win:\"shift+ctrl+,\"},reflect_css_value:{mac:\"shift+command+r\",win:\"shift+ctrl+r\"},encode_decode_data_url:{mac:\"shift+ctrl+d\",win:\"ctrl+'\"},expand_abbreviation_with_tab:\"Tab\",wrap_with_abbreviation:{mac:\"shift+ctrl+a\",win:\"shift+ctrl+a\"}},d=new c;for(var g in t.commands=new o,t.runEmmetCommand=function e(t){try{d.setupContext(t);var r=n.actions||n.require(\"actions\");if(\"expand_abbreviation_with_tab\"==this.action){if(!t.selection.isEmpty())return!1;var i=t.selection.lead,o=t.session.getTokenAt(i.row,i.column);if(o&&/\\btag\\b/.test(o.type))return!1}if(\"wrap_with_abbreviation\"==this.action)return setTimeout(function(){r.run(\"wrap_with_abbreviation\",d)},0);var s=r.run(this.action,d)}catch(r){if(!n)return m(e.bind(this,t)),!0;t._signal(\"changeStatus\",\"string\"==typeof r?r:r.message),console.log(r),s=!1}return s},u)t.commands.addCommand({name:\"emmet:\"+g,action:g,bindKey:u[g],exec:t.runEmmetCommand,multiSelectAction:\"forEach\"});t.updateCommands=function(e,r){r?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){if(!e)return!1;if(e.emmetConfig)return!0;var t=e.$id||e;return/css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(t)},t.isAvailable=function(e,r){if(/(evaluate_math_expression|expand_abbreviation)$/.test(r))return!0;var n=e.session.$mode,i=t.isSupportedMode(n);if(i&&n.$modes)try{d.setupContext(e),/js|php/.test(d.getSyntax())&&(i=!1)}catch(e){}return i};var h=function(e,r){var n=r;if(n){var i=t.isSupportedMode(n.session.$mode);!1===e.enableEmmet&&(i=!1),i&&m(),t.updateCommands(n,i)}},m=function(t){\"string\"==typeof i&&e(\"ace/config\").loadModule(i,function(){i=null,t&&t()})};t.AceEmmetEditor=c,e(\"ace/config\").defineOptions(s.prototype,\"editor\",{enableEmmet:{set:function(e){this[e?\"on\":\"removeListener\"](\"changeMode\",h),h({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){\"string\"==typeof e?i=e:n=e}}),ace.require([\"ace/ext/emmet\"],function(){}),ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"],function(e,t,r){\"use strict\";var n=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./lib/lang\"),s=e(\"./range\").Range,a=e(\"./anchor\").Anchor,l=e(\"./keyboard/hash_handler\").HashHandler,c=e(\"./tokenizer\").Tokenizer,u=s.comparePoints,d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){n.implement(this,i),this.getTokenizer=function(){function e(e,t,r){return e=e.substr(1),/^\\d+$/.test(e)&&!r.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}return d.$tokenizer=new c({start:[{regex:/:/,onMatch:function(e,t,r){return r.length&&r[0].expectIf?(r[0].expectIf=!1,r[0].elseBranch=r[0],[r[0]]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,r){var n=e[1];return\"}\"==n&&r.length||-1!=\"`$\\\\\".indexOf(n)?e=n:r.inFormatString&&(\"n\"==n||\"t\"==n?e=\"\\n\":-1!=\"ulULE\".indexOf(n)&&(e={changeCase:n,local:n>\"a\"})),[e]}},{regex:/}/,onMatch:function(e,t,r){return[r.length?r.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,r,n){var i=e(t.substr(1),0,n);return n.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,r){r[0].choices=e.slice(1,-1).split(\",\")},next:\"start\"},{regex:\"/(\"+t(\"/\")+\"+)/(?:(\"+t(\"/\")+\"*)/)(\\\\w*):?\",onMatch:function(e,t,r){var n=r[0];return n.fmtString=e,e=this.splitRegex.exec(e),n.guard=e[1],n.fmt=e[2],n.flag=e[3],\"\"},next:\"start\"},{regex:\"`\"+t(\"`\")+\"*`\",onMatch:function(e,t,r){return r[0].code=e.splice(1,-1),\"\"},next:\"start\"},{regex:\"\\\\?\",onMatch:function(e,t,r){r[0]&&(r[0].expectIf=!0)},next:\"start\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:\"/(\"+t(\"/\")+\"+)/\",token:\"regex\"},{regex:\"\",onMatch:function(e,t,r){r.inFormatString=!0},next:\"start\"}]}),d.prototype.getTokenizer=function(){return d.$tokenizer},d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\\d+$/.test(t)){var r=t.substr(1);return(this.variables[t[0]+\"__\"]||{})[r]}if(/^\\d+$/.test(t))return(this.variables.__||{})[t];if(t=t.replace(/^TM_/,\"\"),e){var n=e.session;switch(t){case\"CURRENT_WORD\":var i=n.getWordRange();case\"SELECTION\":case\"SELECTED_TEXT\":return n.getTextRange(i);case\"CURRENT_LINE\":return n.getLine(e.getCursorPosition().row);case\"PREV_LINE\":return n.getLine(e.getCursorPosition().row-1);case\"LINE_INDEX\":return e.getCursorPosition().column;case\"LINE_NUMBER\":return e.getCursorPosition().row+1;case\"SOFT_TABS\":return n.getUseSoftTabs()?\"YES\":\"NO\";case\"TAB_SIZE\":return n.getTabSize();case\"FILENAME\":case\"FILEPATH\":return\"\";case\"FULLNAME\":return\"Ace\"}}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||\"\":this.$getDefaultValue(e,t)||\"\"},this.tmStrFormat=function(e,t,r){var n=t.flag||\"\",i=t.guard;i=new RegExp(i,n.replace(/[^gi]/,\"\"));var o=this.tokenizeTmSnippet(t.fmt,\"formatString\"),s=this,a=e.replace(i,function(){s.variables.__=arguments;for(var e=s.resolveVariables(o,r),t=\"E\",n=0;n<e.length;n++){var i=e[n];if(\"object\"==typeof i)if(e[n]=\"\",i.changeCase&&i.local){var a=e[n+1];a&&\"string\"==typeof a&&(\"u\"==i.changeCase?e[n]=a[0].toUpperCase():e[n]=a[0].toLowerCase(),e[n+1]=a.substr(1))}else i.changeCase&&(t=i.changeCase);else\"U\"==t?e[n]=i.toUpperCase():\"L\"==t&&(e[n]=i.toLowerCase())}return e.join(\"\")});return this.variables.__=null,a},this.resolveVariables=function(e,t){for(var r=[],n=0;n<e.length;n++){var i=e[n];if(\"string\"==typeof i)r.push(i);else{if(\"object\"!=typeof i)continue;if(i.skip)s(i);else{if(i.processed<n)continue;if(i.text){var o=this.getVariableValue(t,i.text);o&&i.fmtString&&(o=this.tmStrFormat(o,i)),i.processed=n,null==i.expectIf?o&&(r.push(o),s(i)):o?i.skip=i.elseBranch:s(i)}else(null!=i.tabstopId||null!=i.changeCase)&&r.push(i)}}}function s(t){var r=e.indexOf(t,n+1);-1!=r&&(n=r)}return r},this.insertSnippetForSelection=function(e,t){var r=e.getCursorPosition(),n=e.session.getLine(r.row),i=e.session.getTabString(),o=n.match(/^\\s*/)[0];r.column<o.length&&(o=o.slice(0,r.column)),t=t.replace(/\\r/g,\"\");var s=this.tokenizeTmSnippet(t);s=(s=this.resolveVariables(s,e)).map(function(e){return\"\\n\"==e?e+o:\"string\"==typeof e?e.replace(/\\t/g,i):e});var a=[];s.forEach(function(e,t){if(\"object\"==typeof e){var r=e.tabstopId,n=a[r];if(n||((n=a[r]=[]).index=r,n.value=\"\"),-1===n.indexOf(e)){n.push(e);var i=s.indexOf(e,t+1);if(-1!==i){var o=s.slice(t+1,i);o.some(function(e){return\"object\"==typeof e})&&!n.value?n.value=o:!o.length||n.value&&\"string\"==typeof n.value||(n.value=o.join(\"\"))}}}}),a.forEach(function(e){e.length=0});var l={};function c(e){for(var t=[],r=0;r<e.length;r++){var n=e[r];if(\"object\"==typeof n){if(l[n.tabstopId])continue;n=t[e.lastIndexOf(n,r-1)]||{tabstopId:n.tabstopId}}t[r]=n}return t}for(var u=0;u<s.length;u++){var d=s[u];if(\"object\"==typeof d){var h=d.tabstopId,m=s.indexOf(d,u+1);if(l[h])l[h]===d&&(l[h]=null);else{var p=a[h],_=\"string\"==typeof p.value?[p.value]:c(p.value);_.unshift(u+1,Math.max(0,m-u)),_.push(d),l[h]=d,s.splice.apply(s,_),-1===p.indexOf(d)&&p.push(d)}}}var f=0,b=0,y=\"\";s.forEach(function(e){if(\"string\"==typeof e){var t=e.split(\"\\n\");t.length>1?(b=t[t.length-1].length,f+=t.length-1):b+=e.length,y+=e}else e.start?e.end={row:f,column:b}:e.start={row:f,column:b}});var x=e.getSelectionRange(),v=e.session.replace(x,y),w=new g(e),k=e.inVirtualSelectionMode&&e.selection.index;w.addTabstops(a,x.start,v,k)},this.insertSnippet=function(e,t){var r=this;if(e.inVirtualSelectionMode)return r.insertSnippetForSelection(e,t);e.forEachSelection(function(){r.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";if(\"html\"===(t=t.split(\"/\").pop())||\"php\"===t){\"php\"!==t||e.session.$mode.inlinePhp||(t=\"html\");var r=e.getCursorPosition(),n=e.session.getState(r.row);\"object\"==typeof n&&(n=n[0]),n.substring&&(\"js-\"==n.substring(0,3)?t=\"javascript\":\"css-\"==n.substring(0,4)?t=\"css\":\"php-\"==n.substring(0,4)&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),r=[t],n=this.snippetMap;return n[t]&&n[t].includeScopes&&r.push.apply(r,n[t].includeScopes),r.push(\"_\"),r},this.expandWithTab=function(e,t){var r=this,n=e.forEachSelection(function(){return r.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return n&&e.tabstopManager&&e.tabstopManager.tabNext(),n},this.expandSnippetForSelection=function(e,t){var r,n=e.getCursorPosition(),i=e.session.getLine(n.row),o=i.substring(0,n.column),s=i.substr(n.column),a=this.snippetMap;return this.getActiveScopes(e).some(function(e){var t=a[e];return t&&(r=this.findMatchingSnippet(t,o,s)),!!r},this),!!r&&(t&&t.dryRun||(e.session.doc.removeInLine(n.row,n.column-r.replaceBefore.length,n.column+r.replaceAfter.length),this.variables.M__=r.matchBefore,this.variables.T__=r.matchAfter,this.insertSnippetForSelection(e,r.content),this.variables.M__=this.variables.T__=null),!0)},this.findMatchingSnippet=function(e,t,r){for(var n=e.length;n--;){var i=e[n];if((!i.startRe||i.startRe.test(t))&&((!i.endRe||i.endRe.test(r))&&(i.startRe||i.endRe)))return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(r):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(r)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){var r=this.snippetMap,n=this.snippetNameMap,i=this;function s(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function a(e,t,r){return e=s(e),t=s(t),r?(e=t+e)&&\"$\"!=e[e.length-1]&&(e+=\"$\"):(e+=t)&&\"^\"!=e[0]&&(e=\"^\"+e),new RegExp(e)}function l(e){e.scope||(e.scope=t||\"_\"),t=e.scope,r[t]||(r[t]=[],n[t]={});var s=n[t];if(e.name){var l=s[e.name];l&&i.unregister(l),s[e.name]=e}r[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=o.escapeRegExp(e.tabTrigger)),(e.trigger||e.guard||e.endTrigger||e.endGuard)&&(e.startRe=a(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,\"\",!0),e.endRe=a(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,\"\",!0))}e||(e=[]),e&&e.content?l(e):Array.isArray(e)&&e.forEach(l),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){var r=this.snippetMap,n=this.snippetNameMap;function i(e){var i=n[e.scope||t];if(i&&i[e.name]){delete i[e.name];var o=r[e.scope||t],s=o&&o.indexOf(e);s>=0&&o.splice(s,1)}}e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");for(var t,r=[],n={},i=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;t=i.exec(e);){if(t[1])try{n=JSON.parse(t[1]),r.push(n)}catch(e){}if(t[4])n.content=t[4].replace(/^\\t/gm,\"\"),r.push(n),n={};else{var o=t[2],s=t[3];if(\"regex\"==o){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(s)[1],n.trigger=a.exec(s)[1],n.endTrigger=a.exec(s)[1],n.endGuard=a.exec(s)[1]}else\"snippet\"==o?(n.tabTrigger=s.match(/^\\S*/)[0],n.name||(n.name=s)):n[o]=s}}return r},this.getSnippetByName=function(e,t){var r,n=this.snippetNameMap;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(d.prototype);var g=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=o.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=\"r\"==e.action[0],r=e.start,n=e.end,i=r.row,o=n.row-i,s=n.column-r.column;if(t&&(o=-o,s=-s),!this.$inChange&&t){var a=this.selectedTabstop,l=a&&!a.some(function(e){return u(e.start,r)<=0&&u(e.end,n)>=0});if(l)return this.detach()}for(var c=this.ranges,d=0;d<c.length;d++){var g=c[d];g.end.row<r.row||(t&&u(r,g.start)<0&&u(n,g.end)>0?(this.removeRange(g),d--):(g.start.row==i&&g.start.column>r.column&&(g.start.column+=s),g.end.row==i&&g.end.column>=r.column&&(g.end.column+=s),g.start.row>=i&&(g.start.row+=o),g.end.row>=i&&(g.end.row+=o),u(g.start,g.end)>0&&this.removeRange(g)))}c.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(e&&e.hasLinkedRanges){this.$inChange=!0;for(var r=this.editor.session,n=r.getTextRange(e.firstNonLinked),i=e.length;i--;){var o=e[i];if(o.linked){var s=t.snippetManager.tmStrFormat(n,o.original);r.replace(o,s)}}this.$inChange=!1}},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(this.editor){for(var e=this.editor.selection.lead,t=this.editor.selection.anchor,r=this.editor.selection.isEmpty(),n=this.ranges.length;n--;)if(!this.ranges[n].linked){var i=this.ranges[n].contains(e.row,e.column),o=r||this.ranges[n].contains(t.row,t.column);if(i&&o)return}this.detach()}},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,r=this.index+(e||1);(r=Math.min(Math.max(r,1),t))==t&&(r=0),this.selectTabstop(r),0===r&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];if(t&&this.addTabstopMarkers(t),this.index=e,(t=this.tabstops[this.index])&&t.length){if(this.selectedTabstop=t,this.editor.inVirtualSelectionMode)this.editor.selection.setRange(t.firstNonLinked);else{var r=this.editor.multiSelect;r.toSingleRange(t.firstNonLinked.clone());for(var n=t.length;n--;)t.hasLinkedRanges&&t[n].linked||r.addRange(t[n].clone(),!0);r.ranges[0]&&r.addRange(r.ranges[0].clone())}this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)}},this.addTabstops=function(e,t,r){if(this.$openTabstops||(this.$openTabstops=[]),!e[0]){var n=s.fromPoints(r,r);p(n.start,t),p(n.end,t),e[0]=[n],e[0].index=0}var i=[this.index+1,0],o=this.ranges;e.forEach(function(e,r){for(var n=this.$openTabstops[r]||e,a=e.length;a--;){var l=e[a],c=s.fromPoints(l.start,l.end||l.start);m(c.start,t),m(c.end,t),c.original=l,c.tabstop=n,o.push(c),n!=e?n.unshift(c):n[a]=c,l.fmtString?(c.linked=!0,n.hasLinkedRanges=!0):n.firstNonLinked||(n.firstNonLinked=c)}n.firstNonLinked||(n.hasLinkedRanges=!1),n===e&&(i.push(n),this.$openTabstops[r]=n),this.addTabstopMarkers(n)},this),i.length>2&&(this.tabstops.length&&i.push(i.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,i))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(-1!=(t=this.tabstops.indexOf(e.tabstop))&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new l,this.keyboardHandler.bindKeys({Tab:function(e){t.snippetManager&&t.snippetManager.expandWithTab(e)||e.tabstopManager.tabNext(1)},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(g.prototype);var h={};h.onChange=a.prototype.onChange,h.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},h.update=function(e,t,r){this.$insertRight=r,this.pos=e,this.onChange(t)};var m=function(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row},p=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e(\"./lib/dom\").importCssString(\".ace_snippet-marker {    -moz-box-sizing: border-box;    box-sizing: border-box;    background: rgba(194, 193, 208, 0.09);    border: 1px dotted rgba(211, 208, 235, 0.62);    position: absolute;}\"),t.snippetManager=new d;var _=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,r){return t.snippetManager.insertSnippet(this,e,r)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(_.prototype)}),ace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"],function(e,t,r){\"use strict\";var n=e(\"../virtual_renderer\").VirtualRenderer,i=e(\"../editor\").Editor,o=e(\"../range\").Range,s=e(\"../lib/event\"),a=e(\"../lib/lang\"),l=e(\"../lib/dom\"),c=function(e){var t=new n(e);t.$maxLines=4;var r=new i(t);return r.setHighlightActiveLine(!1),r.setShowPrintMargin(!1),r.renderer.setShowGutter(!1),r.renderer.setHighlightGutterLine(!1),r.$mouseHandler.$focusWaitTimout=0,r.$highlightTagPending=!0,r};l.importCssString(\".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {    background-color: #CAD6FA;    z-index: 1;}.ace_editor.ace_autocomplete .ace_line-hover {    border: 1px solid #abbffe;    margin-top: -1px;    background: rgba(233,233,253,0.4);}.ace_editor.ace_autocomplete .ace_line-hover {    position: absolute;    z-index: 2;}.ace_editor.ace_autocomplete .ace_scroller {   background: none;   border: none;   box-shadow: none;}.ace_rightAlignedText {    color: gray;    display: inline-block;    position: absolute;    right: 4px;    text-align: right;    z-index: -1;}.ace_editor.ace_autocomplete .ace_completion-highlight{    color: #000;    text-shadow: 0 0 0.01em;}.ace_editor.ace_autocomplete {    width: 280px;    z-index: 200000;    background: #fbfbfb;    color: #444;    border: 1px lightgray solid;    position: fixed;    box-shadow: 2px 3px 5px rgba(0,0,0,.2);    line-height: 1.4;}\"),t.AcePopup=function(e){var t=l.createElement(\"div\"),r=new c(t);e&&e.appendChild(t),t.style.display=\"none\",r.renderer.content.style.cursor=\"default\",r.renderer.setStyle(\"ace_autocomplete\"),r.setOption(\"displayIndentGuides\",!1),r.setOption(\"dragDelay\",150);var n,i=function(){};r.focus=i,r.$isFocused=!0,r.renderer.$cursorLayer.restartTimer=i,r.renderer.$cursorLayer.element.style.opacity=0,r.renderer.$maxLines=8,r.renderer.$keepTextAreaAtCursor=!1,r.setHighlightActiveLine(!1),r.session.highlight(\"\"),r.session.$searchHighlight.clazz=\"ace_highlight-marker\",r.on(\"mousedown\",function(e){var t=e.getDocumentPosition();r.selection.moveToPosition(t),d.start.row=d.end.row=t.row,e.stop()});var u=new o(-1,0,-1,1/0),d=new o(-1,0,-1,1/0);d.id=r.session.addMarker(d,\"ace_active-line\",\"fullLine\"),r.setSelectOnHover=function(e){e?u.id&&(r.session.removeMarker(u.id),u.id=null):u.id=r.session.addMarker(u,\"ace_line-hover\",\"fullLine\")},r.setSelectOnHover(!1),r.on(\"mousemove\",function(e){if(n){if(n.x!=e.x||n.y!=e.y){(n=e).scrollTop=r.renderer.scrollTop;var t=n.getDocumentPosition().row;u.start.row!=t&&(u.id||r.setRow(t),h(t))}}else n=e}),r.renderer.on(\"beforeRender\",function(){if(n&&-1!=u.start.row){n.$pos=null;var e=n.getDocumentPosition().row;u.id||r.setRow(e),h(e,!0)}}),r.renderer.on(\"afterRender\",function(){var e=r.getRow(),t=r.renderer.$textLayer,n=t.element.childNodes[e-t.config.firstRow];n!=t.selectedNode&&(t.selectedNode&&l.removeCssClass(t.selectedNode,\"ace_selected\"),t.selectedNode=n,n&&l.addCssClass(n,\"ace_selected\"))});var g=function(){h(-1)},h=function(e,t){e!==u.start.row&&(u.start.row=u.end.row=e,t||r.session._emit(\"changeBackMarker\"),r._emit(\"changeHoverMarker\"))};r.getHoveredRow=function(){return u.start.row},s.addListener(r.container,\"mouseout\",g),r.on(\"hide\",g),r.on(\"changeSelection\",g),r.session.doc.getLength=function(){return r.data.length},r.session.doc.getLine=function(e){var t=r.data[e];return\"string\"==typeof t?t:t&&t.value||\"\"};var m=r.session.bgTokenizer;return m.$tokenizeRow=function(e){var t=r.data[e],n=[];if(!t)return n;\"string\"==typeof t&&(t={value:t}),t.caption||(t.caption=t.value||t.name);for(var i,o,s=-1,a=0;a<t.caption.length;a++)o=t.caption[a],s!==(i=t.matchMask&1<<a?1:0)?(n.push({type:t.className||(i?\"completion-highlight\":\"\"),value:o}),s=i):n[n.length-1].value+=o;if(t.meta){var l=r.renderer.$size.scrollerWidth/r.renderer.layerConfig.characterWidth,c=t.meta;c.length+t.caption.length>l-2&&(c=c.substr(0,l-t.caption.length-3)+\"…\"),n.push({type:\"rightAlignedText\",value:c})}return n},m.$updateOnChange=i,m.start=i,r.session.$computeWidth=function(){return this.screenWidth=0},r.$blockScrolling=1/0,r.isOpen=!1,r.isTopdown=!1,r.data=[],r.setData=function(e){r.setValue(a.stringRepeat(\"\\n\",e.length),-1),r.data=e||[],r.setRow(0)},r.getData=function(e){return r.data[e]},r.getRow=function(){return d.start.row},r.setRow=function(e){e=Math.max(0,Math.min(this.data.length,e)),d.start.row!=e&&(r.selection.clearSelection(),d.start.row=d.end.row=e||0,r.session._emit(\"changeBackMarker\"),r.moveCursorTo(e||0,0),r.isOpen&&r._signal(\"select\"))},r.on(\"changeSelection\",function(){r.isOpen&&r.setRow(r.selection.lead.row),r.renderer.scrollCursorIntoView()}),r.hide=function(){this.container.style.display=\"none\",this._signal(\"hide\"),r.isOpen=!1},r.show=function(e,t,i){var o=this.container,s=window.innerHeight,a=window.innerWidth,l=this.renderer,c=l.$maxLines*t*1.4,u=e.top+this.$borderSize;u>s/2&&!i&&u+t+c>s?(l.$maxPixelHeight=u-2*this.$borderSize,o.style.top=\"\",o.style.bottom=s-u+\"px\",r.isTopdown=!1):(u+=t,l.$maxPixelHeight=s-u-.2*t,o.style.top=u+\"px\",o.style.bottom=\"\",r.isTopdown=!0),o.style.display=\"\",this.renderer.$textLayer.checkForSizeChanges();var d=e.left;d+o.offsetWidth>a&&(d=a-o.offsetWidth),o.style.left=d+\"px\",this._signal(\"show\"),n=null,r.isOpen=!0},r.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},r.$imageSize=0,r.$borderSize=1,r}}),ace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";t.parForEach=function(e,t,r){var n=0,i=e.length;0===i&&r();for(var o=0;o<i;o++)t(e[o],function(e,t){++n===i&&r(e,t)})};var n=/[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;t.retrievePrecedingIdentifier=function(e,t,r){r=r||n;for(var i=[],o=t-1;o>=0&&r.test(e[o]);o--)i.push(e[o]);return i.reverse().join(\"\")},t.retrieveFollowingIdentifier=function(e,t,r){r=r||n;for(var i=[],o=t;o<e.length&&r.test(e[o]);o++)i.push(e[o]);return i},t.getCompletionPrefix=function(e){var t,r=e.getCursorPosition(),n=e.session.getLine(r.row);return e.completers.forEach(function(e){e.identifierRegexps&&e.identifierRegexps.forEach(function(e){!t&&e&&(t=this.retrievePrecedingIdentifier(n,r.column,e))}.bind(this))}.bind(this)),t||this.retrievePrecedingIdentifier(n,r.column)}}),ace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\"],function(e,t,r){\"use strict\";var n=e(\"./keyboard/hash_handler\").HashHandler,i=e(\"./autocomplete/popup\").AcePopup,o=e(\"./autocomplete/util\"),s=(e(\"./lib/event\"),e(\"./lib/lang\")),a=e(\"./lib/dom\"),l=e(\"./snippets\").snippetManager,c=function(){this.autoInsert=!1,this.autoSelect=!0,this.exactMatch=!1,this.gatherCompletionsId=0,this.keyboardHandler=new n,this.keyboardHandler.bindKeys(this.commands),this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.changeTimer=s.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=s.delayedCall(this.updateDocTooltip.bind(this),50)};(function(){this.$init=function(){return this.popup=new i(document.body||document.documentElement),this.popup.on(\"click\",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on(\"show\",this.tooltipTimer.bind(null,null)),this.popup.on(\"select\",this.tooltipTimer.bind(null,null)),this.popup.on(\"changeHoverMarker\",this.tooltipTimer.bind(null,null)),this.popup},this.getPopup=function(){return this.popup||this.$init()},this.openPopup=function(e,t,r){this.popup||this.$init(),this.popup.setData(this.completions.filtered),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var n=e.renderer;if(this.popup.setRow(this.autoSelect?0:-1),r)r&&!t&&this.detach();else{this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize());var i=n.layerConfig.lineHeight,o=n.$cursorLayer.getPixelPosition(this.base,!0);o.left-=this.popup.getTextLeftOffset();var s=e.container.getBoundingClientRect();o.top+=s.top-n.layerConfig.offset,o.left+=s.left-e.renderer.scrollLeft,o.left+=n.gutterWidth,this.popup.show(o,i)}},this.detach=function(){this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off(\"changeSelection\",this.changeListener),this.editor.off(\"blur\",this.blurListener),this.editor.off(\"mousedown\",this.mousedownListener),this.editor.off(\"mousewheel\",this.mousewheelListener),this.changeTimer.cancel(),this.hideDocTooltip(),this.gatherCompletionsId+=1,this.popup&&this.popup.isOpen&&this.popup.hide(),this.base&&this.base.detach(),this.activated=!1,this.completions=this.base=null},this.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.column<this.base.column)&&this.detach(),this.activated?this.changeTimer.schedule():this.detach()},this.blurListener=function(e){e.relatedTarget&&\"A\"==e.relatedTarget.nodeName&&e.relatedTarget.href&&window.open(e.relatedTarget.href,\"_blank\");var t=document.activeElement,r=this.editor.textInput.getElement(),n=e.relatedTarget&&e.relatedTarget==this.tooltipNode,i=this.popup&&this.popup.container;t==r||t.parentNode==i||n||t==this.tooltipNode||e.relatedTarget==r||this.detach()},this.mousedownListener=function(e){this.detach()},this.mousewheelListener=function(e){this.detach()},this.goTo=function(e){var t=this.popup.getRow(),r=this.popup.session.getLength()-1;switch(e){case\"up\":t=t<=0?r:t-1;break;case\"down\":t=t>=r?-1:t+1;break;case\"start\":t=0;break;case\"end\":t=r}this.popup.setRow(t)},this.insertMatch=function(e,t){if(e||(e=this.popup.getData(this.popup.getRow())),!e)return!1;if(e.completer&&e.completer.insertMatch)e.completer.insertMatch(this.editor,e);else{if(this.completions.filterText)for(var r,n=this.editor.selection.getAllRanges(),i=0;r=n[i];i++)r.start.column-=this.completions.filterText.length,this.editor.session.remove(r);e.snippet?l.insertSnippet(this.editor,e.snippet):this.editor.execCommand(\"insertstring\",e.value||e)}this.detach()},this.commands={Up:function(e){e.completer.goTo(\"up\")},Down:function(e){e.completer.goTo(\"down\")},\"Ctrl-Up|Ctrl-Home\":function(e){e.completer.goTo(\"start\")},\"Ctrl-Down|Ctrl-End\":function(e){e.completer.goTo(\"end\")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},\"Shift-Return\":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(t||e.tabstopManager)return t;e.completer.goTo(\"down\")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},this.gatherCompletions=function(e,t){var r=e.getSession(),n=e.getCursorPosition(),i=(r.getLine(n.row),o.getCompletionPrefix(e));this.base=r.doc.createAnchor(n.row,n.column-i.length),this.base.$insertRight=!0;var s=[],a=e.completers.length;return e.completers.forEach(function(o,l){o.getCompletions(e,r,n,i,function(n,o){!n&&o&&(s=s.concat(o));var l=e.getCursorPosition();r.getLine(l.row);t(null,{prefix:i,matches:s,finished:0===--a})})}),!0},this.showPopup=function(e){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on(\"changeSelection\",this.changeListener),e.on(\"blur\",this.blurListener),e.on(\"mousedown\",this.mousedownListener),e.on(\"mousewheel\",this.mousewheelListener),this.updateCompletions()},this.updateCompletions=function(e){if(e&&this.base&&this.completions){var t=this.editor.getCursorPosition(),r=this.editor.session.getTextRange({start:this.base,end:t});if(r==this.completions.filterText)return;return this.completions.setFilter(r),this.completions.filtered.length?1!=this.completions.filtered.length||this.completions.filtered[0].value!=r||this.completions.filtered[0].snippet?void this.openPopup(this.editor,r,e):this.detach():this.detach()}var n=this.gatherCompletionsId;this.gatherCompletions(this.editor,function(t,r){var i=function(){if(r.finished)return this.detach()}.bind(this),o=r.prefix,s=r&&r.matches;if(!s||!s.length)return i();if(0===o.indexOf(r.prefix)&&n==this.gatherCompletionsId){this.completions=new u(s),this.exactMatch&&(this.completions.exactMatch=!0),this.completions.setFilter(o);var a=this.completions.filtered;return a.length&&(1!=a.length||a[0].value!=o||a[0].snippet)?this.autoInsert&&1==a.length&&r.finished?this.insertMatch(a[0]):void this.openPopup(this.editor,o,e):i()}}.bind(this))},this.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},this.updateDocTooltip=function(){var e=this.popup,t=e.data,r=t&&(t[e.getHoveredRow()]||t[e.getRow()]),n=null;return r&&this.editor&&this.popup.isOpen?(this.editor.completers.some(function(e){return e.getDocTooltip&&(n=e.getDocTooltip(r)),n}),n||(n=r),\"string\"==typeof n&&(n={docText:n}),n&&(n.docHTML||n.docText)?void this.showDocTooltip(n):this.hideDocTooltip()):this.hideDocTooltip()},this.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=a.createElement(\"div\"),this.tooltipNode.className=\"ace_tooltip ace_doc-tooltip\",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents=\"auto\",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var r=this.popup,n=r.container.getBoundingClientRect();t.style.top=r.container.style.top,t.style.bottom=r.container.style.bottom,window.innerWidth-n.right<320?(t.style.right=window.innerWidth-n.left+\"px\",t.style.left=\"\"):(t.style.left=n.right+1+\"px\",t.style.right=\"\"),t.style.display=\"block\"},this.hideDocTooltip=function(){if(this.tooltipTimer.cancel(),this.tooltipNode){var e=this.tooltipNode;this.editor.isFocused()||document.activeElement!=e||this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)}}}).call(c.prototype),c.startCommand={name:\"startAutocomplete\",exec:function(e){e.completer||(e.completer=new c),e.completer.autoInsert=!1,e.completer.autoSelect=!0,e.completer.showPopup(e),e.completer.cancelContextMenu()},bindKey:\"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"};var u=function(e,t){this.all=e,this.filtered=e,this.filterText=t||\"\",this.exactMatch=!1};(function(){this.setFilter=function(e){if(e.length>this.filterText&&0===e.lastIndexOf(this.filterText,0))var t=this.filtered;else t=this.all;this.filterText=e,t=(t=this.filterCompletions(t,this.filterText)).sort(function(e,t){return t.exactMatch-e.exactMatch||t.score-e.score});var r=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t!==r&&(r=t,!0)}),this.filtered=t},this.filterCompletions=function(e,t){var r=[],n=t.toUpperCase(),i=t.toLowerCase();e:for(var o,s=0;o=e[s];s++){var a=o.value||o.caption||o.snippet;if(a){var l,c,u=-1,d=0,g=0;if(this.exactMatch){if(t!==a.substr(0,t.length))continue e}else for(var h=0;h<t.length;h++){var m=a.indexOf(i[h],u+1),p=a.indexOf(n[h],u+1);if((l=m>=0&&(p<0||m<p)?m:p)<0)continue e;(c=l-u-1)>0&&(-1===u&&(g+=10),g+=c),d|=1<<l,u=l}o.matchMask=d,o.exactMatch=g?0:1,o.score=(o.score||0)-g,r.push(o)}}return r}}).call(u.prototype),t.Autocomplete=c,t.FilteredList=u}),ace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){var n=e(\"../range\").Range,i=/[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;function o(e,t){var r=function(e,t){return e.getTextRange(n.fromPoints({row:0,column:0},t)).split(i).length-1}(e,t),o=e.getValue().split(i),s=Object.create(null),a=o[r];return o.forEach(function(e,t){if(e&&e!==a){var n=Math.abs(r-t),i=o.length-n;s[e]?s[e]=Math.max(i,s[e]):s[e]=i}}),s}t.getCompletions=function(e,t,r,n,i){var s=o(t,r);i(null,Object.keys(s).map(function(e){return{caption:e,value:e,score:s[e],meta:\"local\"}}))}}),ace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"],function(e,t,r){\"use strict\";var n=e(\"../snippets\").snippetManager,i=e(\"../autocomplete\").Autocomplete,o=e(\"../config\"),s=e(\"../lib/lang\"),a=e(\"../autocomplete/util\"),l=e(\"../autocomplete/text_completer\"),c={getCompletions:function(e,t,r,n,i){if(t.$mode.completer)return t.$mode.completer.getCompletions(e,t,r,n,i);var o=e.session.getState(r.row);i(null,t.$mode.getCompletions(o,t,r,n))}},u={getCompletions:function(e,t,r,i,o){var s=n.snippetMap,a=[];n.getActiveScopes(e).forEach(function(e){for(var t=s[e]||[],r=t.length;r--;){var n=t[r],i=n.name||n.tabTrigger;i&&a.push({caption:i,snippet:n.content,meta:n.tabTrigger&&!n.name?n.tabTrigger+\"⇥ \":\"snippet\",type:\"snippet\"})}},this),o(null,a)},getDocTooltip:function(e){\"snippet\"!=e.type||e.docHTML||(e.docHTML=[\"<b>\",s.escapeHTML(e.caption),\"</b>\",\"<hr></hr>\",s.escapeHTML(e.snippet)].join(\"\"))}},d=[u,l,c];t.setCompleters=function(e){d.length=0,e&&d.push.apply(d,e)},t.addCompleter=function(e){d.push(e)},t.textCompleter=l,t.keyWordCompleter=c,t.snippetCompleter=u;var g={name:\"expandSnippet\",exec:function(e){return n.expandWithTab(e)},bindKey:\"Tab\"},h=function(e,t){m(t.session.$mode)},m=function(e){var t=e.$id;n.files||(n.files={}),p(t),e.modes&&e.modes.forEach(m)},p=function(e){if(e&&!n.files[e]){var t=e.replace(\"mode\",\"snippets\");n.files[e]={},o.loadModule(t,function(t){t&&(n.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=n.parseSnippetFile(t.snippetText)),n.register(t.snippets||[],t.scope),t.includeScopes&&(n.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){p(\"ace/mode/\"+e)})))})}},_=function(e){var t=e.editor,r=t.completer&&t.completer.activated;if(\"backspace\"===e.command.name)r&&!a.getCompletionPrefix(t)&&t.completer.detach();else if(\"insertstring\"===e.command.name){a.getCompletionPrefix(t)&&!r&&(t.completer||(t.completer=new i),t.completer.autoInsert=!1,t.completer.showPopup(t))}},f=e(\"../editor\").Editor;e(\"../config\").defineOptions(f.prototype,\"editor\",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:d),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:d),this.commands.on(\"afterExec\",_)):this.commands.removeListener(\"afterExec\",_)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(g),this.on(\"changeMode\",h),h(0,this)):(this.commands.removeCommand(g),this.off(\"changeMode\",h))},value:!1}})}),ace.require([\"ace/ext/language_tools\"],function(){}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},o.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},o.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},o.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=o}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=(e(\"../lib/lang\"),e(\"./text_highlight_rules\").TextHighlightRules),o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",s=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",l=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",c=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",u=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",d=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",g=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",h=function(){var e=this.createKeywordMapper({\"support.function\":s,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":l,\"support.constant.fonts\":c},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+u+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:u},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:d},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:g},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,s=\"[a-zA-Z\\\\$_¡-￿][a-zA-Z\\\\d\\\\$_¡-￿]*\",a=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),c(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+s+\")(\\\\.)(prototype)(\\\\.)(\"+s+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+s+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:s},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:s},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),c(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:s},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,r){if(this.next=\"{\"==e?this.nextState:\"\",\"{\"==e&&r.length)r.unshift(\"start\",t);else if(\"}\"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf(\"string\")||-1!=this.next.indexOf(\"jsx\")))return\"paren.quasi.end\";return\"{\"==e?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),e&&e.noJSX||l.call(this)),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};function l(){var e=s.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,r){var n=\"/\"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:\"meta.tag.punctuation.\"+(1==n?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,n)},{type:\"meta.tag.tag-name.xml\",value:e.substr(n)}]},regex:\"</?\"+e,next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var r={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[r,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},r,c(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function c(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=\"[_:a-zA-ZÀ-￿][-_:.a-zA-Z0-9À-￿]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"--\\x3e\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===o&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,r){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+r+\".tag-name.xml\"],regex:\"(<)(\"+r+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[r+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,r){return r.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+r+\".tag-name.xml\"],regex:\"(</)(\"+r+\"(?=\\\\s|>|$))\",next:r+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),n.inherits(o,i),t.XmlHighlightRules=o}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./css_highlight_rules\").CssHighlightRules,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,a=e(\"./xml_highlight_rules\").XmlHighlightRules,l=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),c=function(){a.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var r=l[t];return[\"meta.tag.punctuation.\"+(\"<\"==e?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(r?\".\"+r:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(o,\"css-\",\"style\"),this.embedTagRules(new s({noJSX:!0}).getRules(),\"js-\",\"script\"),this.constructor===c&&this.normalizeRules()};n.inherits(c,a),t.HtmlHighlightRules=c}),ace.define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,a=e(\"./html_highlight_rules\").HtmlHighlightRules,l=function(){var e=o,t=i.arrayToMap(\"abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type\".split(\"|\")),r=i.arrayToMap(\"abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|public|static|switch|throw|trait|try|use|var|while|xor\".split(\"|\")),n=(i.arrayToMap(\"die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset\".split(\"|\")),i.arrayToMap(\"true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__\".split(\"|\"))),s=i.arrayToMap(\"$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv\".split(\"|\")),a=(i.arrayToMap(\"key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase\".split(\"|\")),i.arrayToMap(\"cfunction|old_function\".split(\"|\")),i.arrayToMap([]));this.$rules={start:[{token:\"comment\",regex:/(?:#|\\/\\/)(?:[^?]|\\?[^>])*/},e.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language\",regex:\"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"},{token:[\"keyword\",\"text\",\"support.class\"],regex:\"\\\\b(new)(\\\\s+)(\\\\w+)\"},{token:[\"support.class\",\"keyword.operator\"],regex:\"\\\\b(\\\\w+)(::)\"},{token:\"constant.language\",regex:\"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"},{token:function(e){return r.hasOwnProperty(e)?\"keyword\":n.hasOwnProperty(e)?\"constant.language\":s.hasOwnProperty(e)?\"variable.language\":a.hasOwnProperty(e)?\"invalid.illegal\":t.hasOwnProperty(e)?\"support.function\":\"debugger\"==e?\"invalid.deprecated\":e.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/)?\"variable\":\"identifier\"},regex:/[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{onMatch:function(e,t,r){return\"'\"!=(e=e.substr(3))[0]&&'\"'!=e[0]||(e=e.slice(1,-1)),r.unshift(this.next,e),\"markup.list\"},regex:/<<<(?:\\w+|'\\w+'|\"\\w+\")$/,next:\"heredoc\"},{token:\"keyword.operator\",regex:\"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],heredoc:[{onMatch:function(e,t,r){return r[1]!=e?\"string\":(r.shift(),r.shift(),\"markup.list\")},regex:\"^\\\\w+(?=;?$)\",next:\"start\"},{token:\"string\",regex:\".*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"constant.language.escape\",regex:'\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:\"variable\",regex:/\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/},{token:\"variable\",regex:/\\$\\{[^\"\\}]+\\}?/},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string\",regex:\"'\",next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(o,\"doc-\",[o.getEndRule(\"start\")])};n.inherits(l,s);var c=function(){a.call(this);var e=[{token:\"support.php_tag\",regex:\"<\\\\?(?:php|=)?\",push:\"php-start\"}];for(var t in this.$rules)this.$rules[t].unshift.apply(this.$rules[t],e);this.embedRules(l,\"php-\",[{token:\"support.php_tag\",regex:\"\\\\?>\",next:\"pop\"}],[\"start\"]),this.normalizeRules()};n.inherits(c,a),t.PhpHighlightRules=c,t.PhpLangHighlightRules=l}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\\s*\\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n={abs:[\"int abs(int number)\",\"Return the absolute value of the number\"],acos:[\"float acos(float number)\",\"Return the arc cosine of the number in radians\"],acosh:[\"float acosh(float number)\",\"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"],addGlob:[\"bool addGlob(string pattern[,int flags [, array options]])\",\"Add files matching the glob pattern. See php's glob for the pattern syntax.\"],addPattern:[\"bool addPattern(string pattern[, string path [, array options]])\",\"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"],addcslashes:[\"string addcslashes(string str, string charlist)\",\"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"],addslashes:[\"string addslashes(string str)\",\"Escapes single quote, double quotes and backslash characters in a string with backslashes\"],apache_child_terminate:[\"bool apache_child_terminate(void)\",\"Terminate apache process after this request\"],apache_get_modules:[\"array apache_get_modules(void)\",\"Get a list of loaded Apache modules\"],apache_get_version:[\"string apache_get_version(void)\",\"Fetch Apache version\"],apache_getenv:[\"bool apache_getenv(string variable [, bool walk_to_top])\",\"Get an Apache subprocess_env variable\"],apache_lookup_uri:[\"object apache_lookup_uri(string URI)\",\"Perform a partial request of the given URI to obtain information about it\"],apache_note:[\"string apache_note(string note_name [, string note_value])\",\"Get and set Apache request notes\"],apache_request_auth_name:[\"string apache_request_auth_name()\",\"\"],apache_request_auth_type:[\"string apache_request_auth_type()\",\"\"],apache_request_discard_request_body:[\"long apache_request_discard_request_body()\",\"\"],apache_request_err_headers_out:[\"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all headers that go out in case of an error or a subrequest\"],apache_request_headers:[\"array apache_request_headers(void)\",\"Fetch all HTTP request headers\"],apache_request_headers_in:[\"array apache_request_headers_in()\",\"* fetch all incoming request headers\"],apache_request_headers_out:[\"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\"* fetch all outgoing request headers\"],apache_request_is_initial_req:[\"bool apache_request_is_initial_req()\",\"\"],apache_request_log_error:[\"boolean apache_request_log_error(string message, [long facility])\",\"\"],apache_request_meets_conditions:[\"long apache_request_meets_conditions()\",\"\"],apache_request_remote_host:[\"int apache_request_remote_host([int type])\",\"\"],apache_request_run:[\"long apache_request_run()\",\"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"],apache_request_satisfies:[\"long apache_request_satisfies()\",\"\"],apache_request_server_port:[\"int apache_request_server_port()\",\"\"],apache_request_set_etag:[\"void apache_request_set_etag()\",\"\"],apache_request_set_last_modified:[\"void apache_request_set_last_modified()\",\"\"],apache_request_some_auth_required:[\"bool apache_request_some_auth_required()\",\"\"],apache_request_sub_req_lookup_file:[\"object apache_request_sub_req_lookup_file(string file)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_sub_req_lookup_uri:[\"object apache_request_sub_req_lookup_uri(string uri)\",\"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"],apache_request_sub_req_method_uri:[\"object apache_request_sub_req_method_uri(string method, string uri)\",\"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"],apache_request_update_mtime:[\"long apache_request_update_mtime([int dependency_mtime])\",\"\"],apache_reset_timeout:[\"bool apache_reset_timeout(void)\",\"Reset the Apache write timer\"],apache_response_headers:[\"array apache_response_headers(void)\",\"Fetch all HTTP response headers\"],apache_setenv:[\"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\"Set an Apache subprocess_env variable\"],array_change_key_case:[\"array array_change_key_case(array input [, int case=CASE_LOWER])\",\"Retuns an array with all string keys lowercased [or uppercased]\"],array_chunk:[\"array array_chunk(array input, int size [, bool preserve_keys])\",\"Split array into chunks\"],array_combine:[\"array array_combine(array keys, array values)\",\"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"],array_count_values:[\"array array_count_values(array input)\",\"Return the value as key and the frequency of that value in input as value\"],array_diff:[\"array array_diff(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"],array_diff_assoc:[\"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"],array_diff_key:[\"array array_diff_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"],array_diff_uassoc:[\"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"],array_diff_ukey:[\"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"],array_fill:[\"array array_fill(int start_key, int num, mixed val)\",\"Create an array containing num elements starting with index start_key each initialized to val\"],array_fill_keys:[\"array array_fill_keys(array keys, mixed val)\",\"Create an array using the elements of the first parameter as keys each initialized to val\"],array_filter:[\"array array_filter(array input [, mixed callback])\",\"Filters elements from the array via the callback.\"],array_flip:[\"array array_flip(array input)\",\"Return array with key <-> value flipped\"],array_intersect:[\"array array_intersect(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments\"],array_intersect_assoc:[\"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"],array_intersect_key:[\"array array_intersect_key(array arr1, array arr2 [, array ...])\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"],array_intersect_uassoc:[\"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"],array_intersect_ukey:[\"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"],array_key_exists:[\"bool array_key_exists(mixed key, array search)\",\"Checks if the given key or index exists in the array\"],array_keys:[\"array array_keys(array input [, mixed search_value[, bool strict]])\",\"Return just the keys from the input array, optionally only for the specified search_value\"],array_map:[\"array array_map(mixed callback, array input1 [, array input2 ,...])\",\"Applies the callback to the elements in given arrays.\"],array_merge:[\"array array_merge(array arr1, array arr2 [, array ...])\",\"Merges elements from passed arrays into one array\"],array_merge_recursive:[\"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\"Recursively merges elements from passed arrays into one array\"],array_multisort:[\"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"],array_pad:[\"array array_pad(array input, int pad_size, mixed pad_value)\",\"Returns a copy of input array padded with pad_value to size pad_size\"],array_pop:[\"mixed array_pop(array stack)\",\"Pops an element off the end of the array\"],array_product:[\"mixed array_product(array input)\",\"Returns the product of the array entries\"],array_push:[\"int array_push(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the end of the array\"],array_rand:[\"mixed array_rand(array input [, int num_req])\",\"Return key/keys for random entry/entries in the array\"],array_reduce:[\"mixed array_reduce(array input, mixed callback [, mixed initial])\",\"Iteratively reduce the array to a single value via the callback.\"],array_replace:[\"array array_replace(array arr1, array arr2 [, array ...])\",\"Replaces elements from passed arrays into one array\"],array_replace_recursive:[\"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\"Recursively replaces elements from passed arrays into one array\"],array_reverse:[\"array array_reverse(array input [, bool preserve keys])\",\"Return input as a new array with the order of the entries reversed\"],array_search:[\"mixed array_search(mixed needle, array haystack [, bool strict])\",\"Searches the array for a given value and returns the corresponding key if successful\"],array_shift:[\"mixed array_shift(array stack)\",\"Pops an element off the beginning of the array\"],array_slice:[\"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\"Returns elements specified by offset and length\"],array_splice:[\"array array_splice(array input, int offset [, int length [, array replacement]])\",\"Removes the elements designated by offset and length and replace them with supplied array\"],array_sum:[\"mixed array_sum(array input)\",\"Returns the sum of the array entries\"],array_udiff:[\"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"],array_udiff_assoc:[\"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"],array_udiff_uassoc:[\"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"],array_uintersect:[\"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"],array_uintersect_assoc:[\"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"],array_uintersect_uassoc:[\"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"],array_unique:[\"array array_unique(array input [, int sort_flags])\",\"Removes duplicate values from array\"],array_unshift:[\"int array_unshift(array stack, mixed var [, mixed ...])\",\"Pushes elements onto the beginning of the array\"],array_values:[\"array array_values(array input)\",\"Return just the values from the input array\"],array_walk:[\"bool array_walk(array input, string funcname [, mixed userdata])\",\"Apply a user function to every member of an array\"],array_walk_recursive:[\"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\"Apply a user function recursively to every member of an array\"],arsort:[\"bool arsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order and maintain index association\"],asin:[\"float asin(float number)\",\"Returns the arc sine of the number in radians\"],asinh:[\"float asinh(float number)\",\"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"],asort:[\"bool asort(array &array_arg [, int sort_flags])\",\"Sort an array and maintain index association\"],assert:[\"int assert(string|bool assertion)\",\"Checks if assertion is false\"],assert_options:[\"mixed assert_options(int what [, mixed value])\",\"Set/get the various assert flags\"],atan:[\"float atan(float number)\",\"Returns the arc tangent of the number in radians\"],atan2:[\"float atan2(float y, float x)\",\"Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x\"],atanh:[\"float atanh(float number)\",\"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"],attachIterator:[\"void attachIterator(Iterator iterator[, mixed info])\",\"Attach a new iterator\"],base64_decode:[\"string base64_decode(string str[, bool strict])\",\"Decodes string using MIME base64 algorithm\"],base64_encode:[\"string base64_encode(string str)\",\"Encodes string using MIME base64 algorithm\"],base_convert:[\"string base_convert(string number, int frombase, int tobase)\",\"Converts a number in a string from any base <= 36 to any base <= 36\"],basename:[\"string basename(string path [, string suffix])\",\"Returns the filename component of the path\"],bcadd:[\"string bcadd(string left_operand, string right_operand [, int scale])\",\"Returns the sum of two arbitrary precision numbers\"],bccomp:[\"int bccomp(string left_operand, string right_operand [, int scale])\",\"Compares two arbitrary precision numbers\"],bcdiv:[\"string bcdiv(string left_operand, string right_operand [, int scale])\",\"Returns the quotient of two arbitrary precision numbers (division)\"],bcmod:[\"string bcmod(string left_operand, string right_operand)\",\"Returns the modulus of the two arbitrary precision operands\"],bcmul:[\"string bcmul(string left_operand, string right_operand [, int scale])\",\"Returns the multiplication of two arbitrary precision numbers\"],bcpow:[\"string bcpow(string x, string y [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another\"],bcpowmod:[\"string bcpowmod(string x, string y, string mod [, int scale])\",\"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"],bcscale:[\"bool bcscale(int scale)\",\"Sets default scale parameter for all bc math functions\"],bcsqrt:[\"string bcsqrt(string operand [, int scale])\",\"Returns the square root of an arbitray precision number\"],bcsub:[\"string bcsub(string left_operand, string right_operand [, int scale])\",\"Returns the difference between two arbitrary precision numbers\"],bin2hex:[\"string bin2hex(string data)\",\"Converts the binary representation of data to hex\"],bind_textdomain_codeset:[\"string bind_textdomain_codeset (string domain, string codeset)\",\"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"],bindec:[\"int bindec(string binary_number)\",\"Returns the decimal equivalent of the binary number\"],bindtextdomain:[\"string bindtextdomain(string domain_name, string dir)\",\"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"],birdstep_autocommit:[\"bool birdstep_autocommit(int index)\",\"\"],birdstep_close:[\"bool birdstep_close(int id)\",\"\"],birdstep_commit:[\"bool birdstep_commit(int index)\",\"\"],birdstep_connect:[\"int birdstep_connect(string server, string user, string pass)\",\"\"],birdstep_exec:[\"int birdstep_exec(int index, string exec_str)\",\"\"],birdstep_fetch:[\"bool birdstep_fetch(int index)\",\"\"],birdstep_fieldname:[\"string birdstep_fieldname(int index, int col)\",\"\"],birdstep_fieldnum:[\"int birdstep_fieldnum(int index)\",\"\"],birdstep_freeresult:[\"bool birdstep_freeresult(int index)\",\"\"],birdstep_off_autocommit:[\"bool birdstep_off_autocommit(int index)\",\"\"],birdstep_result:[\"mixed birdstep_result(int index, mixed col)\",\"\"],birdstep_rollback:[\"bool birdstep_rollback(int index)\",\"\"],bzcompress:[\"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\"Compresses a string into BZip2 encoded data\"],bzdecompress:[\"string bzdecompress(string source [, int small])\",\"Decompresses BZip2 compressed data\"],bzerrno:[\"int bzerrno(resource bz)\",\"Returns the error number\"],bzerror:[\"array bzerror(resource bz)\",\"Returns the error number and error string in an associative array\"],bzerrstr:[\"string bzerrstr(resource bz)\",\"Returns the error string\"],bzopen:[\"resource bzopen(string|int file|fp, string mode)\",\"Opens a new BZip2 stream\"],bzread:[\"string bzread(resource bz[, int length])\",\"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"],cal_days_in_month:[\"int cal_days_in_month(int calendar, int month, int year)\",\"Returns the number of days in a month for a given year and calendar\"],cal_from_jd:[\"array cal_from_jd(int jd, int calendar)\",\"Converts from Julian Day Count to a supported calendar and return extended information\"],cal_info:[\"array cal_info([int calendar])\",\"Returns information about a particular calendar\"],cal_to_jd:[\"int cal_to_jd(int calendar, int month, int day, int year)\",\"Converts from a supported calendar to Julian Day Count\"],call_user_func:[\"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],call_user_func_array:[\"mixed call_user_func_array(string function_name, array parameters)\",\"Call a user function which is the first parameter with the arguments contained in array\"],call_user_method:[\"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\"Call a user method on a specific object or class\"],call_user_method_array:[\"mixed call_user_method_array(string method_name, mixed object, array params)\",\"Call a user method on a specific object or class using a parameter array\"],ceil:[\"float ceil(float number)\",\"Returns the next highest integer value of the number\"],chdir:[\"bool chdir(string directory)\",\"Change the current directory\"],checkdate:[\"bool checkdate(int month, int day, int year)\",\"Returns true(1) if it is a valid date in gregorian calendar\"],chgrp:[\"bool chgrp(string filename, mixed group)\",\"Change file group\"],chmod:[\"bool chmod(string filename, int mode)\",\"Change file mode\"],chown:[\"bool chown (string filename, mixed user)\",\"Change file owner\"],chr:[\"string chr(int ascii)\",\"Converts ASCII code to a character\"],chroot:[\"bool chroot(string directory)\",\"Change root directory\"],chunk_split:[\"string chunk_split(string str [, int chunklen [, string ending]])\",\"Returns split line\"],class_alias:[\"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\"Creates an alias for user defined class\"],class_exists:[\"bool class_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],class_implements:[\"array class_implements(mixed what [, bool autoload ])\",\"Return all classes and interfaces implemented by SPL\"],class_parents:[\"array class_parents(object instance [, boolean autoload = true])\",\"Return an array containing the names of all parent classes\"],clearstatcache:[\"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\"Clear file stat cache\"],closedir:[\"void closedir([resource dir_handle])\",\"Close directory connection identified by the dir_handle\"],closelog:[\"bool closelog(void)\",\"Close connection to system logger\"],collator_asort:[\"bool collator_asort( Collator $coll, array(string) $arr )\",\"* Sort array using specified collator, maintaining index association.\"],collator_compare:[\"int collator_compare( Collator $coll, string $str1, string $str2 )\",\"* Compare two strings.\"],collator_create:[\"Collator collator_create( string $locale )\",\"* Create collator.\"],collator_get_attribute:[\"int collator_get_attribute( Collator $coll, int $attr )\",\"* Get collation attribute value.\"],collator_get_error_code:[\"int collator_get_error_code( Collator $coll )\",\"* Get collator's last error code.\"],collator_get_error_message:[\"string collator_get_error_message( Collator $coll )\",\"* Get text description for collator's last error code.\"],collator_get_locale:[\"string collator_get_locale( Collator $coll, int $type )\",\"* Gets the locale name of the collator.\"],collator_get_sort_key:[\"bool collator_get_sort_key( Collator $coll, string $str )\",\"* Get a sort key for a string from a Collator. }}}\"],collator_get_strength:[\"int collator_get_strength(Collator coll)\",\"* Returns the current collation strength.\"],collator_set_attribute:[\"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\"* Set collation attribute.\"],collator_set_strength:[\"bool collator_set_strength(Collator coll, int strength)\",\"* Set the collation strength.\"],collator_sort:[\"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\"* Sort array using specified collator.\"],collator_sort_with_sort_keys:[\"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"],com_create_guid:[\"string com_create_guid()\",\"Generate a globally unique identifier (GUID)\"],com_event_sink:[\"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\"Connect events from a COM object to a PHP object\"],com_get_active_object:[\"object com_get_active_object(string progid [, int code_page ])\",\"Returns a handle to an already running instance of a COM object\"],com_load_typelib:[\"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\"Loads a Typelibrary and registers its constants\"],com_message_pump:[\"bool com_message_pump([int timeoutms])\",\"Process COM messages, sleeping for up to timeoutms milliseconds\"],com_print_typeinfo:[\"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\"Print out a PHP class definition for a dispatchable interface\"],compact:[\"array compact(mixed var_names [, mixed ...])\",\"Creates a hash containing variables and their values\"],compose_locale:[\"static string compose_locale($array)\",\"* Creates a locale by combining the parts of locale-ID passed  * }}}\"],confirm_extname_compiled:[\"string confirm_extname_compiled(string arg)\",\"Return a string to confirm that the module is compiled in\"],connection_aborted:[\"int connection_aborted(void)\",\"Returns true if client disconnected\"],connection_status:[\"int connection_status(void)\",\"Returns the connection status bitfield\"],constant:[\"mixed constant(string const_name)\",\"Given the name of a constant this function will return the constant's associated value\"],convert_cyr_string:[\"string convert_cyr_string(string str, string from, string to)\",\"Convert from one Cyrillic character set to another\"],convert_uudecode:[\"string convert_uudecode(string data)\",\"decode a uuencoded string\"],convert_uuencode:[\"string convert_uuencode(string data)\",\"uuencode a string\"],copy:[\"bool copy(string source_file, string destination_file [, resource context])\",\"Copy a file\"],cos:[\"float cos(float number)\",\"Returns the cosine of the number in radians\"],cosh:[\"float cosh(float number)\",\"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2\"],count:[\"int count(mixed var [, int mode])\",\"Count the number of elements in a variable (usually an array)\"],count_chars:[\"mixed count_chars(string input [, int mode])\",\"Returns info about what characters are used in input\"],crc32:[\"string crc32(string str)\",\"Calculate the crc32 polynomial of a string\"],create_function:[\"string create_function(string args, string code)\",\"Creates an anonymous function, and returns its name (funny, eh?)\"],crypt:[\"string crypt(string str [, string salt])\",\"Hash a string\"],ctype_alnum:[\"bool ctype_alnum(mixed c)\",\"Checks for alphanumeric character(s)\"],ctype_alpha:[\"bool ctype_alpha(mixed c)\",\"Checks for alphabetic character(s)\"],ctype_cntrl:[\"bool ctype_cntrl(mixed c)\",\"Checks for control character(s)\"],ctype_digit:[\"bool ctype_digit(mixed c)\",\"Checks for numeric character(s)\"],ctype_graph:[\"bool ctype_graph(mixed c)\",\"Checks for any printable character(s) except space\"],ctype_lower:[\"bool ctype_lower(mixed c)\",\"Checks for lowercase character(s)\"],ctype_print:[\"bool ctype_print(mixed c)\",\"Checks for printable character(s)\"],ctype_punct:[\"bool ctype_punct(mixed c)\",\"Checks for any printable character which is not whitespace or an alphanumeric character\"],ctype_space:[\"bool ctype_space(mixed c)\",\"Checks for whitespace character(s)\"],ctype_upper:[\"bool ctype_upper(mixed c)\",\"Checks for uppercase character(s)\"],ctype_xdigit:[\"bool ctype_xdigit(mixed c)\",\"Checks for character(s) representing a hexadecimal digit\"],curl_close:[\"void curl_close(resource ch)\",\"Close a cURL session\"],curl_copy_handle:[\"resource curl_copy_handle(resource ch)\",\"Copy a cURL handle along with all of it's preferences\"],curl_errno:[\"int curl_errno(resource ch)\",\"Return an integer containing the last error number\"],curl_error:[\"string curl_error(resource ch)\",\"Return a string contain the last error for the current session\"],curl_exec:[\"bool curl_exec(resource ch)\",\"Perform a cURL session\"],curl_getinfo:[\"mixed curl_getinfo(resource ch [, int option])\",\"Get information regarding a specific transfer\"],curl_init:[\"resource curl_init([string url])\",\"Initialize a cURL session\"],curl_multi_add_handle:[\"int curl_multi_add_handle(resource mh, resource ch)\",\"Add a normal cURL handle to a cURL multi handle\"],curl_multi_close:[\"void curl_multi_close(resource mh)\",\"Close a set of cURL handles\"],curl_multi_exec:[\"int curl_multi_exec(resource mh, int &still_running)\",\"Run the sub-connections of the current cURL handle\"],curl_multi_getcontent:[\"string curl_multi_getcontent(resource ch)\",\"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"],curl_multi_info_read:[\"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\"Get information about the current transfers\"],curl_multi_init:[\"resource curl_multi_init(void)\",\"Returns a new cURL multi handle\"],curl_multi_remove_handle:[\"int curl_multi_remove_handle(resource mh, resource ch)\",\"Remove a multi handle from a set of cURL handles\"],curl_multi_select:[\"int curl_multi_select(resource mh[, double timeout])\",'Get all the sockets associated with the cURL extension, which can then be \"selected\"'],curl_setopt:[\"bool curl_setopt(resource ch, int option, mixed value)\",\"Set an option for a cURL transfer\"],curl_setopt_array:[\"bool curl_setopt_array(resource ch, array options)\",\"Set an array of option for a cURL transfer\"],curl_version:[\"array curl_version([int version])\",\"Return cURL version information.\"],current:[\"mixed current(array array_arg)\",\"Return the element currently pointed to by the internal array pointer\"],date:[\"string date(string format [, long timestamp])\",\"Format a local date/time\"],date_add:[\"DateTime date_add(DateTime object, DateInterval interval)\",\"Adds an interval to the current date in object.\"],date_create:[\"DateTime date_create([string time[, DateTimeZone object]])\",\"Returns new DateTime object\"],date_create_from_format:[\"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\"Returns new DateTime object formatted according to the specified format\"],date_date_set:[\"DateTime date_date_set(DateTime object, long year, long month, long day)\",\"Sets the date.\"],date_default_timezone_get:[\"string date_default_timezone_get()\",\"Gets the default timezone used by all date/time functions in a script\"],date_default_timezone_set:[\"bool date_default_timezone_set(string timezone_identifier)\",\"Sets the default timezone used by all date/time functions in a script\"],date_diff:[\"DateInterval date_diff(DateTime object [, bool absolute])\",\"Returns the difference between two DateTime objects.\"],date_format:[\"string date_format(DateTime object, string format)\",\"Returns date formatted according to given format\"],date_get_last_errors:[\"array date_get_last_errors()\",\"Returns the warnings and errors found while parsing a date/time string.\"],date_interval_create_from_date_string:[\"DateInterval date_interval_create_from_date_string(string time)\",\"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"],date_interval_format:[\"string date_interval_format(DateInterval object, string format)\",\"Formats the interval.\"],date_isodate_set:[\"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\"Sets the ISO date.\"],date_modify:[\"DateTime date_modify(DateTime object, string modify)\",\"Alters the timestamp.\"],date_offset_get:[\"long date_offset_get(DateTime object)\",\"Returns the DST offset.\"],date_parse:[\"array date_parse(string date)\",\"Returns associative array with detailed info about given date\"],date_parse_from_format:[\"array date_parse_from_format(string format, string date)\",\"Returns associative array with detailed info about given date\"],date_sub:[\"DateTime date_sub(DateTime object, DateInterval interval)\",\"Subtracts an interval to the current date in object.\"],date_sun_info:[\"array date_sun_info(long time, float latitude, float longitude)\",\"Returns an array with information about sun set/rise and twilight begin/end\"],date_sunrise:[\"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunrise for a given day and location\"],date_sunset:[\"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\"Returns time of sunset for a given day and location\"],date_time_set:[\"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\"Sets the time.\"],date_timestamp_get:[\"long date_timestamp_get(DateTime object)\",\"Gets the Unix timestamp.\"],date_timestamp_set:[\"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\"Sets the date and time based on an Unix timestamp.\"],date_timezone_get:[\"DateTimeZone date_timezone_get(DateTime object)\",\"Return new DateTimeZone object relative to give DateTime\"],date_timezone_set:[\"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\"Sets the timezone for the DateTime object.\"],datefmt_create:[\"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\"* Create formatter.\"],datefmt_format:[\"string datefmt_format( [mixed]int $args or array $args )\",\"* Format the time value as a string. }}}\"],datefmt_get_calendar:[\"string datefmt_get_calendar( IntlDateFormatter $mf )\",\"* Get formatter calendar.\"],datefmt_get_datetype:[\"string datefmt_get_datetype( IntlDateFormatter $mf )\",\"* Get formatter datetype.\"],datefmt_get_error_code:[\"int datefmt_get_error_code( IntlDateFormatter $nf )\",\"* Get formatter's last error code.\"],datefmt_get_error_message:[\"string datefmt_get_error_message( IntlDateFormatter $coll )\",\"* Get text description for formatter's last error code.\"],datefmt_get_locale:[\"string datefmt_get_locale(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_get_pattern:[\"string datefmt_get_pattern( IntlDateFormatter $mf )\",\"* Get formatter pattern.\"],datefmt_get_timetype:[\"string datefmt_get_timetype( IntlDateFormatter $mf )\",\"* Get formatter timetype.\"],datefmt_get_timezone_id:[\"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\"* Get formatter timezone_id.\"],datefmt_isLenient:[\"string datefmt_isLenient(IntlDateFormatter $mf)\",\"* Get formatter locale.\"],datefmt_localtime:[\"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\"* Parse the string $value to a localtime array  }}}\"],datefmt_parse:[\"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"],datefmt_setLenient:[\"string datefmt_setLenient(IntlDateFormatter $mf)\",\"* Set formatter lenient.\"],datefmt_set_calendar:[\"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\"* Set formatter calendar.\"],datefmt_set_pattern:[\"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],datefmt_set_timezone_id:[\"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\"* Set formatter timezone_id.\"],dba_close:[\"void dba_close(resource handle)\",\"Closes database\"],dba_delete:[\"bool dba_delete(string key, resource handle)\",\"Deletes the entry associated with key    If inifile: remove all other key lines\"],dba_exists:[\"bool dba_exists(string key, resource handle)\",\"Checks, if the specified key exists\"],dba_fetch:[\"string dba_fetch(string key, [int skip ,] resource handle)\",\"Fetches the data associated with key\"],dba_firstkey:[\"string dba_firstkey(resource handle)\",\"Resets the internal key pointer and returns the first key\"],dba_handlers:[\"array dba_handlers([bool full_info])\",\"List configured database handlers\"],dba_insert:[\"bool dba_insert(string key, string value, resource handle)\",\"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"],dba_key_split:[\"array|false dba_key_split(string key)\",\"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"],dba_list:[\"array dba_list()\",\"List opened databases\"],dba_nextkey:[\"string dba_nextkey(resource handle)\",\"Returns the next key\"],dba_open:[\"resource dba_open(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode\"],dba_optimize:[\"bool dba_optimize(resource handle)\",\"Optimizes (e.g. clean up, vacuum) database\"],dba_popen:[\"resource dba_popen(string path, string mode [, string handlername, string ...])\",\"Opens path using the specified handler in mode persistently\"],dba_replace:[\"bool dba_replace(string key, string value, resource handle)\",\"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"],dba_sync:[\"bool dba_sync(resource handle)\",\"Synchronizes database\"],dcgettext:[\"string dcgettext(string domain_name, string msgid, long category)\",\"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"],dcngettext:[\"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\"Plural version of dcgettext()\"],debug_backtrace:[\"array debug_backtrace([bool provide_object])\",\"Return backtrace as array\"],debug_print_backtrace:[\"void debug_print_backtrace(void) */\",\"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);   /* skip debug_backtrace()\"],debug_zval_dump:[\"void debug_zval_dump(mixed var)\",\"Dumps a string representation of an internal zend value to output.\"],decbin:[\"string decbin(int decimal_number)\",\"Returns a string containing a binary representation of the number\"],dechex:[\"string dechex(int decimal_number)\",\"Returns a string containing a hexadecimal representation of the given number\"],decoct:[\"string decoct(int decimal_number)\",\"Returns a string containing an octal representation of the given number\"],define:[\"bool define(string constant_name, mixed value, boolean case_insensitive=false)\",\"Define a new constant\"],define_syslog_variables:[\"void define_syslog_variables(void)\",\"Initializes all syslog-related variables\"],defined:[\"bool defined(string constant_name)\",\"Check whether a constant exists\"],deg2rad:[\"float deg2rad(float number)\",\"Converts the number in degrees to the radian equivalent\"],dgettext:[\"string dgettext(string domain_name, string msgid)\",\"Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist\"],die:[\"void die([mixed status])\",\"Output a message and terminate the current script\"],dir:[\"object dir(string directory[, resource context])\",\"Directory class with properties, handle and class and methods read, rewind and close\"],dirname:[\"string dirname(string path)\",\"Returns the directory name component of the path\"],disk_free_space:[\"float disk_free_space(string path)\",\"Get free disk space for filesystem that path is on\"],disk_total_space:[\"float disk_total_space(string path)\",\"Get total disk space for filesystem that path is on\"],display_disabled_function:[\"void display_disabled_function(void)\",\"Dummy function which displays an error when a disabled function is called.\"],dl:[\"int dl(string extension_filename)\",\"Load a PHP extension at runtime\"],dngettext:[\"string dngettext (string domain, string msgid1, string msgid2, int count)\",\"Plural version of dgettext()\"],dns_check_record:[\"bool dns_check_record(string host [, string type])\",\"Check DNS records corresponding to a given Internet host name or IP address\"],dns_get_mx:[\"bool dns_get_mx(string hostname, array mxhosts [, array weight])\",\"Get MX records corresponding to a given Internet host name\"],dns_get_record:[\"array|false dns_get_record(string hostname [, int type[, array authns, array addtl]])\",\"Get any Resource Record corresponding to a given Internet host name\"],dom_attr_is_id:[\"boolean dom_attr_is_id();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-isId Since: DOM Level 3\"],dom_characterdata_append_data:[\"void dom_characterdata_append_data(string arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-32791A2F Since:\"],dom_characterdata_delete_data:[\"void dom_characterdata_delete_data(int offset, int count);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7C603781 Since:\"],dom_characterdata_insert_data:[\"void dom_characterdata_insert_data(int offset, string arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3EDB695F Since:\"],dom_characterdata_replace_data:[\"void dom_characterdata_replace_data(int offset, int count, string arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-E5CBA7FB Since:\"],dom_characterdata_substring_data:[\"string dom_characterdata_substring_data(int offset, int count);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6531BCCF Since:\"],dom_document_adopt_node:[\"DOMNode dom_document_adopt_node(DOMNode source);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-adoptNode Since: DOM Level 3\"],dom_document_create_attribute:[\"DOMAttr dom_document_create_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1084891198 Since:\"],dom_document_create_attribute_ns:[\"DOMAttr dom_document_create_attribute_ns(string namespaceURI, string qualifiedName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrAttrNS Since: DOM Level 2\"],dom_document_create_cdatasection:[\"DOMCdataSection dom_document_create_cdatasection(string data);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D26C0AF8 Since:\"],dom_document_create_comment:[\"DOMComment dom_document_create_comment(string data);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1334481328 Since:\"],dom_document_create_document_fragment:[\"DOMDocumentFragment dom_document_create_document_fragment();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-35CB04B5 Since:\"],dom_document_create_element:[\"DOMElement dom_document_create_element(string tagName [, string value]);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-2141741547 Since:\"],dom_document_create_element_ns:[\"DOMElement dom_document_create_element_ns(string namespaceURI, string qualifiedName [,string value]);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrElNS Since: DOM Level 2\"],dom_document_create_entity_reference:[\"DOMEntityReference dom_document_create_entity_reference(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-392B75AE Since:\"],dom_document_create_processing_instruction:[\"DOMProcessingInstruction dom_document_create_processing_instruction(string target, string data);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-135944439 Since:\"],dom_document_create_text_node:[\"DOMText dom_document_create_text_node(string data);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1975348127 Since:\"],dom_document_get_element_by_id:[\"DOMElement dom_document_get_element_by_id(string elementId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBId Since: DOM Level 2\"],dom_document_get_elements_by_tag_name:[\"DOMNodeList dom_document_get_elements_by_tag_name(string tagname);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C9094 Since:\"],dom_document_get_elements_by_tag_name_ns:[\"DOMNodeList dom_document_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBTNNS Since: DOM Level 2\"],dom_document_import_node:[\"DOMNode dom_document_import_node(DOMNode importedNode, boolean deep);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Core-Document-importNode Since: DOM Level 2\"],dom_document_load:[\"DOMNode dom_document_load(string source [, int options]);\",\"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-load Since: DOM Level 3\"],dom_document_load_html:[\"DOMNode dom_document_load_html(string source);\",\"Since: DOM extended\"],dom_document_load_html_file:[\"DOMNode dom_document_load_html_file(string source);\",\"Since: DOM extended\"],dom_document_loadxml:[\"DOMNode dom_document_loadxml(string source [, int options]);\",\"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-loadXML Since: DOM Level 3\"],dom_document_normalize_document:[\"void dom_document_normalize_document();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-normalizeDocument Since: DOM Level 3\"],dom_document_relaxNG_validate_file:[\"boolean dom_document_relaxNG_validate_file(string filename); */\",\"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file\"],dom_document_relaxNG_validate_xml:[\"boolean dom_document_relaxNG_validate_xml(string source); */\",\"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml\"],dom_document_rename_node:[\"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"],dom_document_save:[\"int dom_document_save(string file);\",\"Convenience method to save to file\"],dom_document_save_html:[\"string dom_document_save_html();\",\"Convenience method to output as html\"],dom_document_save_html_file:[\"int dom_document_save_html_file(string file);\",\"Convenience method to save to file as html\"],dom_document_savexml:[\"string dom_document_savexml([node n]);\",\"URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"],dom_document_schema_validate:[\"boolean dom_document_schema_validate(string source); */\",\"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate\"],dom_document_schema_validate_file:[\"boolean dom_document_schema_validate_file(string filename); */\",\"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file\"],dom_document_validate:[\"boolean dom_document_validate();\",\"Since: DOM extended\"],dom_document_xinclude:[\"int dom_document_xinclude([int options])\",\"Substitutues xincludes in a DomDocument\"],dom_domconfiguration_can_set_parameter:[\"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"],dom_domconfiguration_get_parameter:[\"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:\"],dom_domconfiguration_set_parameter:[\"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:\"],dom_domerrorhandler_handle_error:[\"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"],dom_domimplementation_create_document:[\"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"],dom_domimplementation_create_document_type:[\"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"],dom_domimplementation_get_feature:[\"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"],dom_domimplementation_has_feature:[\"boolean dom_domimplementation_has_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:\"],dom_domimplementationlist_item:[\"domdomimplementation dom_domimplementationlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:\"],dom_domimplementationsource_get_domimplementation:[\"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:\"],dom_domimplementationsource_get_domimplementations:[\"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:\"],dom_domstringlist_item:[\"domstring dom_domstringlist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:\"],dom_element_get_attribute:[\"string dom_element_get_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:\"],dom_element_get_attribute_node:[\"DOMAttr dom_element_get_attribute_node(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:\"],dom_element_get_attribute_node_ns:[\"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"],dom_element_get_attribute_ns:[\"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"],dom_element_get_elements_by_tag_name:[\"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:\"],dom_element_get_elements_by_tag_name_ns:[\"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"],dom_element_has_attribute:[\"boolean dom_element_has_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"],dom_element_has_attribute_ns:[\"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"],dom_element_remove_attribute:[\"void dom_element_remove_attribute(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"],dom_element_remove_attribute_node:[\"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:\"],dom_element_remove_attribute_ns:[\"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"],dom_element_set_attribute:[\"void dom_element_set_attribute(string name, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:\"],dom_element_set_attribute_node:[\"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:\"],dom_element_set_attribute_node_ns:[\"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"],dom_element_set_attribute_ns:[\"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"],dom_element_set_id_attribute:[\"void dom_element_set_id_attribute(string name, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"],dom_element_set_id_attribute_node:[\"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"],dom_element_set_id_attribute_ns:[\"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"],dom_import_simplexml:[\"somNode dom_import_simplexml(sxeobject node)\",\"Get a simplexml_element object from dom to allow for processing\"],dom_namednodemap_get_named_item:[\"DOMNode dom_namednodemap_get_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:\"],dom_namednodemap_get_named_item_ns:[\"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"],dom_namednodemap_item:[\"DOMNode dom_namednodemap_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:\"],dom_namednodemap_remove_named_item:[\"DOMNode dom_namednodemap_remove_named_item(string name);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:\"],dom_namednodemap_remove_named_item_ns:[\"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"],dom_namednodemap_set_named_item:[\"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:\"],dom_namednodemap_set_named_item_ns:[\"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"],dom_namelist_get_name:[\"string dom_namelist_get_name(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:\"],dom_namelist_get_namespace_uri:[\"string dom_namelist_get_namespace_uri(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:\"],dom_node_append_child:[\"DomNode dom_node_append_child(DomNode newChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:\"],dom_node_clone_node:[\"DomNode dom_node_clone_node(boolean deep);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"],dom_node_compare_document_position:[\"short dom_node_compare_document_position(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"],dom_node_get_feature:[\"DomNode dom_node_get_feature(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"],dom_node_get_user_data:[\"mixed dom_node_get_user_data(string key);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"],dom_node_has_attributes:[\"boolean dom_node_has_attributes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"],dom_node_has_child_nodes:[\"boolean dom_node_has_child_nodes();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:\"],dom_node_insert_before:[\"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:\"],dom_node_is_default_namespace:[\"boolean dom_node_is_default_namespace(string namespaceURI);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"],dom_node_is_equal_node:[\"boolean dom_node_is_equal_node(DomNode arg);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"],dom_node_is_same_node:[\"boolean dom_node_is_same_node(DomNode other);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"],dom_node_is_supported:[\"boolean dom_node_is_supported(string feature, string version);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"],dom_node_lookup_namespace_uri:[\"string dom_node_lookup_namespace_uri(string prefix);\",\"URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"],dom_node_lookup_prefix:[\"string dom_node_lookup_prefix(string namespaceURI);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"],dom_node_normalize:[\"void dom_node_normalize();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:\"],dom_node_remove_child:[\"DomNode dom_node_remove_child(DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:\"],dom_node_replace_child:[\"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:\"],dom_node_set_user_data:[\"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"],dom_nodelist_item:[\"DOMNode dom_nodelist_item(int index);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:\"],dom_string_extend_find_offset16:[\"int dom_string_extend_find_offset16(int offset32);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"],dom_string_extend_find_offset32:[\"int dom_string_extend_find_offset32(int offset16);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"],dom_text_is_whitespace_in_element_content:[\"boolean dom_text_is_whitespace_in_element_content();\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"],dom_text_replace_whole_text:[\"DOMText dom_text_replace_whole_text(string content);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"],dom_text_split_text:[\"DOMText dom_text_split_text(int offset);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:\"],dom_userdatahandler_handle:[\"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:\"],dom_xpath_evaluate:[\"mixed dom_xpath_evaluate(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate\"],dom_xpath_query:[\"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */\",\"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query\"],dom_xpath_register_ns:[\"boolean dom_xpath_register_ns(string prefix, string uri); */\",'PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Oss\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid XPath Context\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } /* }}}'],dom_xpath_register_php_functions:[\"void dom_xpath_register_php_functions() */\",'PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"a\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } /* }}} end dom_xpath_register_php_functions'],each:[\"array each(array arr)\",\"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"],easter_date:[\"int easter_date([int year])\",\"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"],easter_days:[\"int easter_days([int year, [int method]])\",\"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"],echo:[\"void echo(string arg1 [, string ...])\",\"Output one or more strings\"],empty:[\"bool empty( mixed var )\",\"Determine whether a variable is empty\"],enchant_broker_describe:[\"array enchant_broker_describe(resource broker)\",\"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"],enchant_broker_dict_exists:[\"bool enchant_broker_dict_exists(resource broker, string tag)\",\"Wether a dictionary exists or not. Using non-empty tag\"],enchant_broker_free:[\"boolean enchant_broker_free(resource broker)\",\"Destroys the broker object and its dictionnaries\"],enchant_broker_free_dict:[\"resource enchant_broker_free_dict(resource dict)\",\"Free the dictionary resource\"],enchant_broker_get_dict_path:[\"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\"Get the directory path for a given backend, works with ispell and myspell\"],enchant_broker_get_error:[\"string enchant_broker_get_error(resource broker)\",\"Returns the last error of the broker\"],enchant_broker_init:[\"resource enchant_broker_init()\",\"create a new broker object capable of requesting\"],enchant_broker_list_dicts:[\"string enchant_broker_list_dicts(resource broker)\",\"Lists the dictionaries available for the given broker\"],enchant_broker_request_dict:[\"resource enchant_broker_request_dict(resource broker, string tag)\",'create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\"en_US\", \"de_DE\", ...)'],enchant_broker_request_pwl_dict:[\"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"],enchant_broker_set_dict_path:[\"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\"Set the directory path for a given backend, works with ispell and myspell\"],enchant_broker_set_ordering:[\"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\"Declares a preference of dictionaries to use for the language  described/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"],enchant_dict_add_to_personal:[\"void enchant_dict_add_to_personal(resource dict, string word)\",\"add 'word' to personal word list\"],enchant_dict_add_to_session:[\"void enchant_dict_add_to_session(resource dict, string word)\",\"add 'word' to this spell-checking session\"],enchant_dict_check:[\"bool enchant_dict_check(resource dict, string word)\",\"If the word is correctly spelled return true, otherwise return false\"],enchant_dict_describe:[\"array enchant_dict_describe(resource dict)\",\"Describes an individual dictionary 'dict'\"],enchant_dict_get_error:[\"string enchant_dict_get_error(resource dict)\",\"Returns the last error of the current spelling-session\"],enchant_dict_is_in_session:[\"bool enchant_dict_is_in_session(resource dict, string word)\",\"whether or not 'word' exists in this spelling-session\"],enchant_dict_quick_check:[\"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"],enchant_dict_store_replacement:[\"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"],enchant_dict_suggest:[\"array enchant_dict_suggest(resource dict, string word)\",\"Will return a list of values if any of those pre-conditions are not met.\"],end:[\"mixed end(array array_arg)\",\"Advances array argument's internal pointer to the last element and return it\"],ereg:[\"int ereg(string pattern, string string [, array registers])\",\"Regular expression match\"],ereg_replace:[\"string ereg_replace(string pattern, string replacement, string string)\",\"Replace regular expression\"],eregi:[\"int eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match\"],eregi_replace:[\"string eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression\"],error_get_last:[\"array error_get_last()\",\"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"],error_log:[\"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\"Send an error message somewhere\"],error_reporting:[\"int error_reporting([int new_error_level])\",\"Return the current error_reporting level, and if an argument was passed - change to the new level\"],escapeshellarg:[\"string escapeshellarg(string arg)\",\"Quote and escape an argument for use in a shell command\"],escapeshellcmd:[\"string escapeshellcmd(string command)\",\"Escape shell metacharacters\"],exec:[\"string exec(string command [, array &output [, int &return_value]])\",\"Execute an external program\"],exif_imagetype:[\"int exif_imagetype(string imagefile)\",\"Get the type of an image\"],exif_read_data:[\"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\"Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails\"],exif_tagname:[\"string exif_tagname(index)\",\"Get headername for index or false if not defined\"],exif_thumbnail:[\"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\"Reads the embedded thumbnail\"],exit:[\"void exit([mixed status])\",\"Output a message and terminate the current script\"],exp:[\"float exp(float number)\",\"Returns e raised to the power of the number\"],explode:[\"array explode(string separator, string str [, int limit])\",\"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"],expm1:[\"float expm1(float number)\",\"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"],extension_loaded:[\"bool extension_loaded(string extension_name)\",\"Returns true if the named extension is loaded\"],extract:[\"int extract(array var_array [, int extract_type [, string prefix]])\",\"Imports variables into symbol table from an array\"],ezmlm_hash:[\"int ezmlm_hash(string addr)\",\"Calculate EZMLM list hash value.\"],fclose:[\"bool fclose(resource fp)\",\"Close an open file pointer\"],feof:[\"bool feof(resource fp)\",\"Test for end-of-file on a file pointer\"],fflush:[\"bool fflush(resource fp)\",\"Flushes output\"],fgetc:[\"string fgetc(resource fp)\",\"Get a character from file pointer\"],fgetcsv:[\"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\"Get line from file pointer and parse for CSV fields\"],fgets:[\"string fgets(resource fp[, int length])\",\"Get a line from file pointer\"],fgetss:[\"string fgetss(resource fp [, int length [, string allowable_tags]])\",\"Get a line from file pointer and strip HTML tags\"],file:[\"array file(string filename [, int flags[, resource context]])\",\"Read entire file into an array\"],file_exists:[\"bool file_exists(string filename)\",\"Returns true if filename exists\"],file_get_contents:[\"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\"Read the entire file into a string\"],file_put_contents:[\"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\"Write/Create a file with contents data and return the number of bytes written\"],fileatime:[\"int fileatime(string filename)\",\"Get last access time of file\"],filectime:[\"int filectime(string filename)\",\"Get inode modification time of file\"],filegroup:[\"int filegroup(string filename)\",\"Get file group\"],fileinode:[\"int fileinode(string filename)\",\"Get file inode\"],filemtime:[\"int filemtime(string filename)\",\"Get last modification time of file\"],fileowner:[\"int fileowner(string filename)\",\"Get file owner\"],fileperms:[\"int fileperms(string filename)\",\"Get file permissions\"],filesize:[\"int filesize(string filename)\",\"Get file size\"],filetype:[\"string filetype(string filename)\",\"Get file type\"],filter_has_var:[\"mixed filter_has_var(constant type, string variable_name)\",\"* Returns true if the variable with the name 'name' exists in source.\"],filter_input:[\"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\"* Returns the filtered variable 'name'* from source `type`.\"],filter_input_array:[\"mixed filter_input_array(constant type, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],filter_var:[\"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\"* Returns the filtered version of the vriable.\"],filter_var_array:[\"mixed filter_var_array(array data, [, mixed options]])\",\"* Returns an array with all arguments defined in 'definition'.\"],finfo_buffer:[\"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\"Return infromation about a string buffer.\"],finfo_close:[\"resource finfo_close(resource finfo)\",\"Close fileinfo resource.\"],finfo_file:[\"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\"Return information about a file.\"],finfo_open:[\"resource finfo_open([int options [, string arg]])\",\"Create a new fileinfo resource.\"],finfo_set_flags:[\"bool finfo_set_flags(resource finfo, int options)\",\"Set libmagic configuration options.\"],floatval:[\"float floatval(mixed var)\",\"Get the float value of a variable\"],flock:[\"bool flock(resource fp, int operation [, int &wouldblock])\",\"Portable file locking\"],floor:[\"float floor(float number)\",\"Returns the next lowest integer value from the number\"],flush:[\"void flush(void)\",\"Flush the output buffer\"],fmod:[\"float fmod(float x, float y)\",\"Returns the remainder of dividing x by y as a float\"],fnmatch:[\"bool fnmatch(string pattern, string filename [, int flags])\",\"Match filename against pattern\"],fopen:[\"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\"Open a file or a URL and return a file pointer\"],forward_static_call:[\"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\"Call a user function which is the first parameter\"],fpassthru:[\"int fpassthru(resource fp)\",\"Output all remaining data from a file pointer\"],fprintf:[\"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string into a stream\"],fputcsv:[\"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\"Format line as CSV and write to file pointer\"],fread:[\"string fread(resource fp, int length)\",\"Binary-safe file read\"],frenchtojd:[\"int frenchtojd(int month, int day, int year)\",\"Converts a french republic calendar date to julian day count\"],fscanf:[\"mixed fscanf(resource stream, string format [, string ...])\",\"Implements a mostly ANSI compatible fscanf()\"],fseek:[\"int fseek(resource fp, int offset [, int whence])\",\"Seek on a file pointer\"],fsockopen:[\"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open Internet or Unix domain socket connection\"],fstat:[\"array fstat(resource fp)\",\"Stat() on a filehandle\"],ftell:[\"int ftell(resource fp)\",\"Get file pointer's read/write position\"],ftok:[\"int ftok(string pathname, string proj)\",\"Convert a pathname and a project identifier to a System V IPC key\"],ftp_alloc:[\"bool ftp_alloc(resource stream, int size[, &response])\",\"Attempt to allocate space on the remote FTP server\"],ftp_cdup:[\"bool ftp_cdup(resource stream)\",\"Changes to the parent directory\"],ftp_chdir:[\"bool ftp_chdir(resource stream, string directory)\",\"Changes directories\"],ftp_chmod:[\"int ftp_chmod(resource stream, int mode, string filename)\",\"Sets permissions on a file\"],ftp_close:[\"bool ftp_close(resource stream)\",\"Closes the FTP stream\"],ftp_connect:[\"resource ftp_connect(string host [, int port [, int timeout]])\",\"Opens a FTP stream\"],ftp_delete:[\"bool ftp_delete(resource stream, string file)\",\"Deletes a file\"],ftp_exec:[\"bool ftp_exec(resource stream, string command)\",\"Requests execution of a program on the FTP server\"],ftp_fget:[\"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server and writes it to an open file\"],ftp_fput:[\"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server\"],ftp_get:[\"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server and writes it to a local file\"],ftp_get_option:[\"mixed ftp_get_option(resource stream, int option)\",\"Gets an FTP option\"],ftp_login:[\"bool ftp_login(resource stream, string username, string password)\",\"Logs into the FTP server\"],ftp_mdtm:[\"int ftp_mdtm(resource stream, string filename)\",\"Returns the last modification time of the file, or -1 on error\"],ftp_mkdir:[\"string ftp_mkdir(resource stream, string directory)\",\"Creates a directory and returns the absolute path for the new directory or false on error\"],ftp_nb_continue:[\"int ftp_nb_continue(resource stream)\",\"Continues retrieving/sending a file nbronously\"],ftp_nb_fget:[\"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\"Retrieves a file from the FTP server asynchronly and writes it to an open file\"],ftp_nb_fput:[\"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\"Stores a file from an open file to the FTP server nbronly\"],ftp_nb_get:[\"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\"Retrieves a file from the FTP server nbhronly and writes it to a local file\"],ftp_nb_put:[\"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_nlist:[\"array ftp_nlist(resource stream, string directory)\",\"Returns an array of filenames in the given directory\"],ftp_pasv:[\"bool ftp_pasv(resource stream, bool pasv)\",\"Turns passive mode on or off\"],ftp_put:[\"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\"Stores a file on the FTP server\"],ftp_pwd:[\"string ftp_pwd(resource stream)\",\"Returns the present working directory\"],ftp_raw:[\"array ftp_raw(resource stream, string command)\",\"Sends a literal command to the FTP server\"],ftp_rawlist:[\"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\"Returns a detailed listing of a directory as an array of output lines\"],ftp_rename:[\"bool ftp_rename(resource stream, string src, string dest)\",\"Renames the given file to a new path\"],ftp_rmdir:[\"bool ftp_rmdir(resource stream, string directory)\",\"Removes a directory\"],ftp_set_option:[\"bool ftp_set_option(resource stream, int option, mixed value)\",\"Sets an FTP option\"],ftp_site:[\"bool ftp_site(resource stream, string cmd)\",\"Sends a SITE command to the server\"],ftp_size:[\"int ftp_size(resource stream, string filename)\",\"Returns the size of the file, or -1 on error\"],ftp_ssl_connect:[\"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\"Opens a FTP-SSL stream\"],ftp_systype:[\"string ftp_systype(resource stream)\",\"Returns the system type identifier\"],ftruncate:[\"bool ftruncate(resource fp, int size)\",\"Truncate file to 'size' length\"],func_get_arg:[\"mixed func_get_arg(int arg_num)\",\"Get the $arg_num'th argument that was passed to the function\"],func_get_args:[\"array func_get_args()\",\"Get an array of the arguments that were passed to the function\"],func_num_args:[\"int func_num_args(void)\",\"Get the number of arguments that were passed to the function\"],function_exists:[\"bool function_exists(string function_name)\",\"Checks if the function exists\"],fwrite:[\"int fwrite(resource fp, string str [, int length])\",\"Binary-safe file write\"],gc_collect_cycles:[\"int gc_collect_cycles(void)\",\"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"],gc_disable:[\"void gc_disable(void)\",\"Deactivates the circular reference collector\"],gc_enable:[\"void gc_enable(void)\",\"Activates the circular reference collector\"],gc_enabled:[\"void gc_enabled(void)\",\"Returns status of the circular reference collector\"],gd_info:[\"array gd_info()\",\"\"],getKeywords:[\"static array getKeywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"],get_browser:[\"mixed get_browser([string browser_name [, bool return_array]])\",\"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"],get_called_class:[\"string get_called_class()\",'Retrieves the \"Late Static Binding\" class name'],get_cfg_var:[\"mixed get_cfg_var(string option_name)\",\"Get the value of a PHP configuration option\"],get_class:[\"string get_class([object object])\",\"Retrieves the class name\"],get_class_methods:[\"array get_class_methods(mixed class)\",\"Returns an array of method names for class or class instance.\"],get_class_vars:[\"array get_class_vars(string class_name)\",\"Returns an array of default properties of the class.\"],get_current_user:[\"string get_current_user(void)\",\"Get the name of the owner of the current PHP script\"],get_declared_classes:[\"array get_declared_classes()\",\"Returns an array of all declared classes.\"],get_declared_interfaces:[\"array get_declared_interfaces()\",\"Returns an array of all declared interfaces.\"],get_defined_constants:[\"array get_defined_constants([bool categorize])\",\"Return an array containing the names and values of all defined constants\"],get_defined_functions:[\"array get_defined_functions(void)\",\"Returns an array of all defined functions\"],get_defined_vars:[\"array get_defined_vars(void)\",\"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"],get_display_language:[\"static string get_display_language($locale[, $in_locale = null])\",\"* gets the language for the $locale in $in_locale or default_locale\"],get_display_name:[\"static string get_display_name($locale[, $in_locale = null])\",\"* gets the name for the $locale in $in_locale or default_locale\"],get_display_region:[\"static string get_display_region($locale, $in_locale = null)\",\"* gets the region for the $locale in $in_locale or default_locale\"],get_display_script:[\"static string get_display_script($locale, $in_locale = null)\",\"* gets the script for the $locale in $in_locale or default_locale\"],get_extension_funcs:[\"array get_extension_funcs(string extension_name)\",\"Returns an array with the names of functions belonging to the named extension\"],get_headers:[\"array get_headers(string url[, int format])\",\"fetches all the headers sent by the server in response to a HTTP request\"],get_html_translation_table:[\"array get_html_translation_table([int table [, int quote_style]])\",\"Returns the internal translation table used by htmlspecialchars and htmlentities\"],get_include_path:[\"string get_include_path()\",\"Get the current include_path configuration option\"],get_included_files:[\"array get_included_files(void)\",\"Returns an array with the file names that were include_once()'d\"],get_loaded_extensions:[\"array get_loaded_extensions([bool zend_extensions])\",\"Return an array containing names of loaded extensions\"],get_magic_quotes_gpc:[\"int get_magic_quotes_gpc(void)\",\"Get the current active configuration setting of magic_quotes_gpc\"],get_magic_quotes_runtime:[\"int get_magic_quotes_runtime(void)\",\"Get the current active configuration setting of magic_quotes_runtime\"],get_meta_tags:[\"array get_meta_tags(string filename [, bool use_include_path])\",\"Extracts all meta tag content attributes from a file and returns an array\"],get_object_vars:[\"array get_object_vars(object obj)\",\"Returns an array of object properties\"],get_parent_class:[\"string get_parent_class([mixed object])\",\"Retrieves the parent class name for object or class or current scope.\"],get_resource_type:[\"string get_resource_type(resource res)\",\"Get the resource type name for a given resource\"],getallheaders:[\"array getallheaders(void)\",\"\"],getcwd:[\"mixed getcwd(void)\",\"Gets the current directory\"],getdate:[\"array getdate([int timestamp])\",\"Get date/time information\"],getenv:[\"string getenv(string varname)\",\"Get the value of an environment variable\"],gethostbyaddr:[\"string gethostbyaddr(string ip_address)\",\"Get the Internet host name corresponding to a given IP address\"],gethostbyname:[\"string gethostbyname(string hostname)\",\"Get the IP address corresponding to a given Internet host name\"],gethostbynamel:[\"array gethostbynamel(string hostname)\",\"Return a list of IP addresses that a given hostname resolves to.\"],gethostname:[\"string gethostname()\",\"Get the host name of the current machine\"],getimagesize:[\"array getimagesize(string imagefile [, array info])\",\"Get the size of an image as 4-element array\"],getlastmod:[\"int getlastmod(void)\",\"Get time of last page modification\"],getmygid:[\"int getmygid(void)\",\"Get PHP script owner's GID\"],getmyinode:[\"int getmyinode(void)\",\"Get the inode of the current script being parsed\"],getmypid:[\"int getmypid(void)\",\"Get current process ID\"],getmyuid:[\"int getmyuid(void)\",\"Get PHP script owner's UID\"],getopt:[\"array getopt(string options [, array longopts])\",\"Get options from the command line argument list\"],getprotobyname:[\"int getprotobyname(string name)\",\"Returns protocol number associated with name as per /etc/protocols\"],getprotobynumber:[\"string getprotobynumber(int proto)\",\"Returns protocol name associated with protocol number proto\"],getrandmax:[\"int getrandmax(void)\",\"Returns the maximum value a random number can have\"],getrusage:[\"array getrusage([int who])\",\"Returns an array of usage statistics\"],getservbyname:[\"int getservbyname(string service, string protocol)\",'Returns port associated with service. Protocol must be \"tcp\" or \"udp\"'],getservbyport:[\"string getservbyport(int port, string protocol)\",'Returns service name associated with port. Protocol must be \"tcp\" or \"udp\"'],gettext:[\"string gettext(string msgid)\",\"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"],gettimeofday:[\"array gettimeofday([bool get_as_float])\",\"Returns the current time as array\"],gettype:[\"string gettype(mixed var)\",\"Returns the type of the variable\"],glob:[\"array glob(string pattern [, int flags])\",\"Find pathnames matching a pattern\"],gmdate:[\"string gmdate(string format [, long timestamp])\",\"Format a GMT date/time\"],gmmktime:[\"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a GMT date\"],gmp_abs:[\"resource gmp_abs(resource a)\",\"Calculates absolute value\"],gmp_add:[\"resource gmp_add(resource a, resource b)\",\"Add a and b\"],gmp_and:[\"resource gmp_and(resource a, resource b)\",\"Calculates logical AND of a and b\"],gmp_clrbit:[\"void gmp_clrbit(resource &a, int index)\",\"Clears bit in a\"],gmp_cmp:[\"int gmp_cmp(resource a, resource b)\",\"Compares two numbers\"],gmp_com:[\"resource gmp_com(resource a)\",\"Calculates one's complement of a\"],gmp_div_q:[\"resource gmp_div_q(resource a, resource b [, int round])\",\"Divide a by b, returns quotient only\"],gmp_div_qr:[\"array gmp_div_qr(resource a, resource b [, int round])\",\"Divide a by b, returns quotient and reminder\"],gmp_div_r:[\"resource gmp_div_r(resource a, resource b [, int round])\",\"Divide a by b, returns reminder only\"],gmp_divexact:[\"resource gmp_divexact(resource a, resource b)\",\"Divide a by b using exact division algorithm\"],gmp_fact:[\"resource gmp_fact(int a)\",\"Calculates factorial function\"],gmp_gcd:[\"resource gmp_gcd(resource a, resource b)\",\"Computes greatest common denominator (gcd) of a and b\"],gmp_gcdext:[\"array gmp_gcdext(resource a, resource b)\",\"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"],gmp_hamdist:[\"int gmp_hamdist(resource a, resource b)\",\"Calculates hamming distance between a and b\"],gmp_init:[\"resource gmp_init(mixed number [, int base])\",\"Initializes GMP number\"],gmp_intval:[\"int gmp_intval(resource gmpnumber)\",\"Gets signed long value of GMP number\"],gmp_invert:[\"resource gmp_invert(resource a, resource b)\",\"Computes the inverse of a modulo b\"],gmp_jacobi:[\"int gmp_jacobi(resource a, resource b)\",\"Computes Jacobi symbol\"],gmp_legendre:[\"int gmp_legendre(resource a, resource b)\",\"Computes Legendre symbol\"],gmp_mod:[\"resource gmp_mod(resource a, resource b)\",\"Computes a modulo b\"],gmp_mul:[\"resource gmp_mul(resource a, resource b)\",\"Multiply a and b\"],gmp_neg:[\"resource gmp_neg(resource a)\",\"Negates a number\"],gmp_nextprime:[\"resource gmp_nextprime(resource a)\",\"Finds next prime of a\"],gmp_or:[\"resource gmp_or(resource a, resource b)\",\"Calculates logical OR of a and b\"],gmp_perfect_square:[\"bool gmp_perfect_square(resource a)\",\"Checks if a is an exact square\"],gmp_popcount:[\"int gmp_popcount(resource a)\",\"Calculates the population count of a\"],gmp_pow:[\"resource gmp_pow(resource base, int exp)\",\"Raise base to power exp\"],gmp_powm:[\"resource gmp_powm(resource base, resource exp, resource mod)\",\"Raise base to power exp and take result modulo mod\"],gmp_prob_prime:[\"int gmp_prob_prime(resource a[, int reps])\",'Checks if a is \"probably prime\"'],gmp_random:[\"resource gmp_random([int limiter])\",\"Gets random number\"],gmp_scan0:[\"int gmp_scan0(resource a, int start)\",\"Finds first zero bit\"],gmp_scan1:[\"int gmp_scan1(resource a, int start)\",\"Finds first non-zero bit\"],gmp_setbit:[\"void gmp_setbit(resource &a, int index[, bool set_clear])\",\"Sets or clear bit in a\"],gmp_sign:[\"int gmp_sign(resource a)\",\"Gets the sign of the number\"],gmp_sqrt:[\"resource gmp_sqrt(resource a)\",\"Takes integer part of square root of a\"],gmp_sqrtrem:[\"array gmp_sqrtrem(resource a)\",\"Square root with remainder\"],gmp_strval:[\"string gmp_strval(resource gmpnumber [, int base])\",\"Gets string representation of GMP number\"],gmp_sub:[\"resource gmp_sub(resource a, resource b)\",\"Subtract b from a\"],gmp_testbit:[\"bool gmp_testbit(resource a, int index)\",\"Tests if bit is set in a\"],gmp_xor:[\"resource gmp_xor(resource a, resource b)\",\"Calculates logical exclusive OR of a and b\"],gmstrftime:[\"string gmstrftime(string format [, int timestamp])\",\"Format a GMT/UCT time/date according to locale settings\"],grapheme_extract:[\"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\"Function to extract a sequence of default grapheme clusters\"],grapheme_stripos:[\"int grapheme_stripos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another, ignoring case differences\"],grapheme_stristr:[\"string grapheme_stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_strlen:[\"int grapheme_strlen(string str)\",\"Get number of graphemes in a string\"],grapheme_strpos:[\"int grapheme_strpos(string haystack, string needle [, int offset ])\",\"Find position of first occurrence of a string within another\"],grapheme_strripos:[\"int grapheme_strripos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another, ignoring case\"],grapheme_strrpos:[\"int grapheme_strrpos(string haystack, string needle [, int offset])\",\"Find position of last occurrence of a string within another\"],grapheme_strstr:[\"string grapheme_strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],grapheme_substr:[\"string grapheme_substr(string str, int start [, int length])\",\"Returns part of a string\"],gregoriantojd:[\"int gregoriantojd(int month, int day, int year)\",\"Converts a gregorian calendar date to julian day count\"],gzcompress:[\"string gzcompress(string data [, int level])\",\"Gzip-compress a string\"],gzdeflate:[\"string gzdeflate(string data [, int level])\",\"Gzip-compress a string\"],gzencode:[\"string gzencode(string data [, int level [, int encoding_mode]])\",\"GZ encode a string\"],gzfile:[\"array gzfile(string filename [, int use_include_path])\",\"Read und uncompress entire .gz-file into an array\"],gzinflate:[\"string gzinflate(string data [, int length])\",\"Unzip a gzip-compressed string\"],gzopen:[\"resource gzopen(string filename, string mode [, int use_include_path])\",\"Open a .gz-file and return a .gz-file pointer\"],gzuncompress:[\"string gzuncompress(string data [, int length])\",\"Unzip a gzip-compressed string\"],hash:[\"string hash(string algo, string data[, bool raw_output = false])\",\"Generate a hash of a given input string Returns lowercase hexits by default\"],hash_algos:[\"array hash_algos(void)\",\"Return a list of registered hashing algorithms\"],hash_copy:[\"resource hash_copy(resource context)\",\"Copy hash resource\"],hash_file:[\"string hash_file(string algo, string filename[, bool raw_output = false])\",\"Generate a hash of a given file Returns lowercase hexits by default\"],hash_final:[\"string hash_final(resource context[, bool raw_output=false])\",\"Output resulting digest\"],hash_hmac:[\"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"],hash_hmac_file:[\"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"],hash_init:[\"resource hash_init(string algo[, int options, string key])\",\"Initialize a hashing context\"],hash_update:[\"bool hash_update(resource context, string data)\",\"Pump data into the hashing algorithm\"],hash_update_file:[\"bool hash_update_file(resource context, string filename[, resource context])\",\"Pump data into the hashing algorithm from a file\"],hash_update_stream:[\"int hash_update_stream(resource context, resource handle[, integer length])\",\"Pump data into the hashing algorithm from an open stream\"],header:[\"void header(string header [, bool replace, [int http_response_code]])\",\"Sends a raw HTTP header\"],header_remove:[\"void header_remove([string name])\",\"Removes an HTTP header previously set using header()\"],headers_list:[\"array headers_list(void)\",\"Return list of headers to be sent / already sent\"],headers_sent:[\"bool headers_sent([string &$file [, int &$line]])\",\"Returns true if headers have already been sent, false otherwise\"],hebrev:[\"string hebrev(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text\"],hebrevc:[\"string hebrevc(string str [, int max_chars_per_line])\",\"Converts logical Hebrew text to visual text with newline conversion\"],hexdec:[\"int hexdec(string hexadecimal_number)\",\"Returns the decimal equivalent of the hexadecimal number\"],highlight_file:[\"bool highlight_file(string file_name [, bool return] )\",\"Syntax highlight a source file\"],highlight_string:[\"bool highlight_string(string string [, bool return] )\",\"Syntax highlight a string or optionally return it\"],html_entity_decode:[\"string html_entity_decode(string string [, int quote_style][, string charset])\",\"Convert all HTML entities to their applicable characters\"],htmlentities:[\"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert all applicable characters to HTML entities\"],htmlspecialchars:[\"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\"Convert special characters to HTML entities\"],htmlspecialchars_decode:[\"string htmlspecialchars_decode(string string [, int quote_style])\",\"Convert special HTML entities back to characters\"],http_build_query:[\"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\"Generates a form-encoded query string from an associative array or object.\"],hypot:[\"float hypot(float num1, float num2)\",\"Returns sqrt(num1*num1 + num2*num2)\"],ibase_add_user:[\"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Add a user to security database\"],ibase_affected_rows:[\"int ibase_affected_rows( [ resource link_identifier ] )\",\"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"],ibase_backup:[\"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\"Initiates a backup task in the service manager and returns immediately\"],ibase_blob_add:[\"bool ibase_blob_add(resource blob_handle, string data)\",\"Add data into created blob\"],ibase_blob_cancel:[\"bool ibase_blob_cancel(resource blob_handle)\",\"Cancel creating blob\"],ibase_blob_close:[\"string ibase_blob_close(resource blob_handle)\",\"Close blob\"],ibase_blob_create:[\"resource ibase_blob_create([resource link_identifier])\",\"Create blob for adding data\"],ibase_blob_echo:[\"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\"Output blob contents to browser\"],ibase_blob_get:[\"string ibase_blob_get(resource blob_handle, int len)\",\"Get len bytes data from open blob\"],ibase_blob_import:[\"string ibase_blob_import([ resource link_identifier, ] resource file)\",\"Create blob, copy file in it, and close it\"],ibase_blob_info:[\"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\"Return blob length and other useful info\"],ibase_blob_open:[\"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\"Open blob for retrieving data parts\"],ibase_close:[\"bool ibase_close([resource link_identifier])\",\"Close an InterBase connection\"],ibase_commit:[\"bool ibase_commit( resource link_identifier )\",\"Commit transaction\"],ibase_commit_ret:[\"bool ibase_commit_ret( resource link_identifier )\",\"Commit transaction and retain the transaction context\"],ibase_connect:[\"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a connection to an InterBase database\"],ibase_db_info:[\"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\"Request statistics about a database\"],ibase_delete_user:[\"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Delete a user from security database\"],ibase_drop_db:[\"bool ibase_drop_db([resource link_identifier])\",\"Drop an InterBase database\"],ibase_errcode:[\"int ibase_errcode(void)\",\"Return error code\"],ibase_errmsg:[\"string ibase_errmsg(void)\",\"Return error message\"],ibase_execute:[\"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a previously prepared query\"],ibase_fetch_assoc:[\"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_fetch_object:[\"object ibase_fetch_object(resource result [, int fetch_flags])\",\"Fetch a object from the results of a query\"],ibase_fetch_row:[\"array ibase_fetch_row(resource result [, int fetch_flags])\",\"Fetch a row  from the results of a query\"],ibase_field_info:[\"array ibase_field_info(resource query_result, int field_number)\",\"Get information about a field\"],ibase_free_event_handler:[\"bool ibase_free_event_handler(resource event)\",\"Frees the event handler set by ibase_set_event_handler()\"],ibase_free_query:[\"bool ibase_free_query(resource query)\",\"Free memory used by a query\"],ibase_free_result:[\"bool ibase_free_result(resource result)\",\"Free the memory used by a result\"],ibase_gen_id:[\"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\"Increments the named generator and returns its new value\"],ibase_maintain_db:[\"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\"Execute a maintenance command on the database server\"],ibase_modify_user:[\"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\"Modify a user in security database\"],ibase_name_result:[\"bool ibase_name_result(resource result, string name)\",\"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"],ibase_num_fields:[\"int ibase_num_fields(resource query_result)\",\"Get the number of fields in result\"],ibase_num_params:[\"int ibase_num_params(resource query)\",\"Get the number of params in a prepared query\"],ibase_num_rows:[\"int ibase_num_rows( resource result_identifier )\",\"Return the number of rows that are available in a result\"],ibase_param_info:[\"array ibase_param_info(resource query, int field_number)\",\"Get information about a parameter\"],ibase_pconnect:[\"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\"Open a persistent connection to an InterBase database\"],ibase_prepare:[\"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\"Prepare a query for later execution\"],ibase_query:[\"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\"Execute a query\"],ibase_restore:[\"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\"Initiates a restore task in the service manager and returns immediately\"],ibase_rollback:[\"bool ibase_rollback( resource link_identifier )\",\"Rollback transaction\"],ibase_rollback_ret:[\"bool ibase_rollback_ret( resource link_identifier )\",\"Rollback transaction and retain the transaction context\"],ibase_server_info:[\"string ibase_server_info(resource service_handle, int action)\",\"Request information about a database server\"],ibase_service_attach:[\"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\"Connect to the service manager\"],ibase_service_detach:[\"bool ibase_service_detach(resource service_handle)\",\"Disconnect from the service manager\"],ibase_set_event_handler:[\"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\"Register the callback for handling each of the named events\"],ibase_trans:[\"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\"Start a transaction over one or several databases\"],ibase_wait_event:[\"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"],iconv:[\"string iconv(string in_charset, string out_charset, string str)\",\"Returns str converted to the out_charset character set\"],iconv_get_encoding:[\"mixed iconv_get_encoding([string type])\",\"Get internal encoding and output encoding for ob_iconv_handler()\"],iconv_mime_decode:[\"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\"Decodes a mime header field\"],iconv_mime_decode_headers:[\"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\"Decodes multiple mime header fields\"],iconv_mime_encode:[\"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\"Composes a mime header field with field_name and field_value in a specified scheme\"],iconv_set_encoding:[\"bool iconv_set_encoding(string type, string charset)\",\"Sets internal encoding and output encoding for ob_iconv_handler()\"],iconv_strlen:[\"int iconv_strlen(string str [, string charset])\",\"Returns the character count of str\"],iconv_strpos:[\"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\"Finds position of first occurrence of needle within part of haystack beginning with offset\"],iconv_strrpos:[\"int iconv_strrpos(string haystack, string needle [, string charset])\",\"Finds position of last occurrence of needle within part of haystack beginning with offset\"],iconv_substr:[\"string iconv_substr(string str, int offset, [int length, string charset])\",\"Returns specified part of a string\"],idate:[\"int idate(string format [, int timestamp])\",\"Format a local time/date as integer\"],idn_to_ascii:[\"int idn_to_ascii(string domain[, int options])\",\"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"],idn_to_utf8:[\"int idn_to_utf8(string domain[, int options])\",\"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"],ignore_user_abort:[\"int ignore_user_abort([string value])\",\"Set whether we want to ignore a user abort event or not\"],image2wbmp:[\"bool image2wbmp(resource im [, string filename [, int threshold]])\",\"Output WBMP image to browser or file\"],image_type_to_extension:[\"string image_type_to_extension(int imagetype [, bool include_dot])\",\"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],image_type_to_mime_type:[\"string image_type_to_mime_type(int imagetype)\",\"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"],imagealphablending:[\"bool imagealphablending(resource im, bool on)\",\"Turn alpha blending mode on or off for the given image\"],imageantialias:[\"bool imageantialias(resource im, bool on)\",\"Should antialiased functions used or not\"],imagearc:[\"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\"Draw a partial ellipse\"],imagechar:[\"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\"Draw a character\"],imagecharup:[\"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\"Draw a character rotated 90 degrees counter-clockwise\"],imagecolorallocate:[\"int imagecolorallocate(resource im, int red, int green, int blue)\",\"Allocate a color for an image\"],imagecolorallocatealpha:[\"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\"Allocate a color with an alpha level.  Works for true color and palette based images\"],imagecolorat:[\"int imagecolorat(resource im, int x, int y)\",\"Get the index of the color of a pixel\"],imagecolorclosest:[\"int imagecolorclosest(resource im, int red, int green, int blue)\",\"Get the index of the closest color to the specified color\"],imagecolorclosestalpha:[\"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\"Find the closest matching colour with alpha transparency\"],imagecolorclosesthwb:[\"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\"Get the index of the color which has the hue, white and blackness nearest to the given color\"],imagecolordeallocate:[\"bool imagecolordeallocate(resource im, int index)\",\"De-allocate a color for an image\"],imagecolorexact:[\"int imagecolorexact(resource im, int red, int green, int blue)\",\"Get the index of the specified color\"],imagecolorexactalpha:[\"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\"Find exact match for colour with transparency\"],imagecolormatch:[\"bool imagecolormatch(resource im1, resource im2)\",\"Makes the colors of the palette version of an image more closely match the true color version\"],imagecolorresolve:[\"int imagecolorresolve(resource im, int red, int green, int blue)\",\"Get the index of the specified color or its closest possible alternative\"],imagecolorresolvealpha:[\"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\"Resolve/Allocate a colour with an alpha level.  Works for true colour and palette based images\"],imagecolorset:[\"void imagecolorset(resource im, int col, int red, int green, int blue)\",\"Set the color for the specified palette index\"],imagecolorsforindex:[\"array imagecolorsforindex(resource im, int col)\",\"Get the colors for an index\"],imagecolorstotal:[\"int imagecolorstotal(resource im)\",\"Find out the number of colors in an image's palette\"],imagecolortransparent:[\"int imagecolortransparent(resource im [, int col])\",\"Define a color as transparent\"],imageconvolution:[\"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\"Apply a 3x3 convolution matrix, using coefficient div and offset\"],imagecopy:[\"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\"Copy part of an image\"],imagecopymerge:[\"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopymergegray:[\"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\"Merge one part of an image with another\"],imagecopyresampled:[\"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image using resampling to help ensure clarity\"],imagecopyresized:[\"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\"Copy and resize part of an image\"],imagecreate:[\"resource imagecreate(int x_size, int y_size)\",\"Create a new image\"],imagecreatefromgd:[\"resource imagecreatefromgd(string filename)\",\"Create a new image from GD file or URL\"],imagecreatefromgd2:[\"resource imagecreatefromgd2(string filename)\",\"Create a new image from GD2 file or URL\"],imagecreatefromgd2part:[\"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\"Create a new image from a given part of GD2 file or URL\"],imagecreatefromgif:[\"resource imagecreatefromgif(string filename)\",\"Create a new image from GIF file or URL\"],imagecreatefromjpeg:[\"resource imagecreatefromjpeg(string filename)\",\"Create a new image from JPEG file or URL\"],imagecreatefrompng:[\"resource imagecreatefrompng(string filename)\",\"Create a new image from PNG file or URL\"],imagecreatefromstring:[\"resource imagecreatefromstring(string image)\",\"Create a new image from the image stream in the string\"],imagecreatefromwbmp:[\"resource imagecreatefromwbmp(string filename)\",\"Create a new image from WBMP file or URL\"],imagecreatefromxbm:[\"resource imagecreatefromxbm(string filename)\",\"Create a new image from XBM file or URL\"],imagecreatefromxpm:[\"resource imagecreatefromxpm(string filename)\",\"Create a new image from XPM file or URL\"],imagecreatetruecolor:[\"resource imagecreatetruecolor(int x_size, int y_size)\",\"Create a new true color image\"],imagedashedline:[\"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a dashed line\"],imagedestroy:[\"bool imagedestroy(resource im)\",\"Destroy an image\"],imageellipse:[\"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefill:[\"bool imagefill(resource im, int x, int y, int col)\",\"Flood fill\"],imagefilledarc:[\"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\"Draw a filled partial ellipse\"],imagefilledellipse:[\"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\"Draw an ellipse\"],imagefilledpolygon:[\"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\"Draw a filled polygon\"],imagefilledrectangle:[\"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a filled rectangle\"],imagefilltoborder:[\"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\"Flood fill to specific color\"],imagefilter:[\"bool imagefilter(resource src_im, int filtertype, [args] )\",\"Applies Filter an image using a custom angle\"],imagefontheight:[\"int imagefontheight(int font)\",\"Get font height\"],imagefontwidth:[\"int imagefontwidth(int font)\",\"Get font width\"],imageftbbox:[\"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\"Give the bounding box of a text using fonts via freetype2\"],imagefttext:[\"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\"Write text to the image using fonts via freetype2\"],imagegammacorrect:[\"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\"Apply a gamma correction to a GD image\"],imagegd:[\"bool imagegd(resource im [, string filename])\",\"Output GD image to browser or file\"],imagegd2:[\"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\"Output GD2 image to browser or file\"],imagegif:[\"bool imagegif(resource im [, string filename])\",\"Output GIF image to browser or file\"],imagegrabscreen:[\"resource imagegrabscreen()\",\"Grab a screenshot\"],imagegrabwindow:[\"resource imagegrabwindow(int window_handle [, int client_area])\",\"Grab a window or its client area using a windows handle (HWND property in COM instance)\"],imageinterlace:[\"int imageinterlace(resource im [, int interlace])\",\"Enable or disable interlace\"],imageistruecolor:[\"bool imageistruecolor(resource im)\",\"return true if the image uses truecolor\"],imagejpeg:[\"bool imagejpeg(resource im [, string filename [, int quality]])\",\"Output JPEG image to browser or file\"],imagelayereffect:[\"bool imagelayereffect(resource im, int effect)\",\"Set the alpha blending flag to use the bundled libgd layering effects\"],imageline:[\"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a line\"],imageloadfont:[\"int imageloadfont(string filename)\",\"Load a new font\"],imagepalettecopy:[\"void imagepalettecopy(resource dst, resource src)\",\"Copy the palette from the src image onto the dst image\"],imagepng:[\"bool imagepng(resource im [, string filename])\",\"Output PNG image to browser or file\"],imagepolygon:[\"bool imagepolygon(resource im, array point, int num_points, int col)\",\"Draw a polygon\"],imagepsbbox:[\"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\"Return the bounding box needed by a string if rasterized\"],imagepscopyfont:[\"int imagepscopyfont(int font_index)\",\"Make a copy of a font for purposes like extending or reenconding\"],imagepsencodefont:[\"bool imagepsencodefont(resource font_index, string filename)\",\"To change a fonts character encoding vector\"],imagepsextendfont:[\"bool imagepsextendfont(resource font_index, float extend)\",\"Extend or or condense (if extend < 1) a font\"],imagepsfreefont:[\"bool imagepsfreefont(resource font_index)\",\"Free memory used by a font\"],imagepsloadfont:[\"resource imagepsloadfont(string pathname)\",\"Load a new font from specified file\"],imagepsslantfont:[\"bool imagepsslantfont(resource font_index, float slant)\",\"Slant a font\"],imagepstext:[\"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\"Rasterize a string over an image\"],imagerectangle:[\"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\"Draw a rectangle\"],imagerotate:[\"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\"Rotate an image using a custom angle\"],imagesavealpha:[\"bool imagesavealpha(resource im, bool on)\",\"Include alpha channel to a saved image\"],imagesetbrush:[\"bool imagesetbrush(resource image, resource brush)\",'Set the brush image to $brush when filling $image with the \"IMG_COLOR_BRUSHED\" color'],imagesetpixel:[\"bool imagesetpixel(resource im, int x, int y, int col)\",\"Set a single pixel\"],imagesetstyle:[\"bool imagesetstyle(resource im, array styles)\",\"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"],imagesetthickness:[\"bool imagesetthickness(resource im, int thickness)\",\"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"],imagesettile:[\"bool imagesettile(resource image, resource tile)\",'Set the tile image to $tile when filling $image with the \"IMG_COLOR_TILED\" color'],imagestring:[\"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\"Draw a string horizontally\"],imagestringup:[\"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\"Draw a string vertically - rotated 90 degrees counter-clockwise\"],imagesx:[\"int imagesx(resource im)\",\"Get image width\"],imagesy:[\"int imagesy(resource im)\",\"Get image height\"],imagetruecolortopalette:[\"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"],imagettfbbox:[\"array imagettfbbox(float size, float angle, string font_file, string text)\",\"Give the bounding box of a text using TrueType fonts\"],imagettftext:[\"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\"Write text to the image using a TrueType font\"],imagetypes:[\"int imagetypes(void)\",\"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"],imagewbmp:[\"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\"Output WBMP image to browser or file\"],imagexbm:[\"int imagexbm(int im, string filename [, int foreground])\",\"Output XBM image to browser or file\"],imap_8bit:[\"string imap_8bit(string text)\",\"Convert an 8-bit string to a quoted-printable string\"],imap_alerts:[\"array imap_alerts(void)\",\"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"],imap_append:[\"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\"Append a new message to a specified mailbox\"],imap_base64:[\"string imap_base64(string text)\",\"Decode BASE64 encoded text\"],imap_binary:[\"string imap_binary(string text)\",\"Convert an 8bit string to a base64 string\"],imap_body:[\"string imap_body(resource stream_id, int msg_no [, int options])\",\"Read the message body\"],imap_bodystruct:[\"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\"Read the structure of a specified body section of a specific message\"],imap_check:[\"object imap_check(resource stream_id)\",\"Get mailbox properties\"],imap_clearflag_full:[\"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Clears flags on messages\"],imap_close:[\"bool imap_close(resource stream_id [, int options])\",\"Close an IMAP stream\"],imap_createmailbox:[\"bool imap_createmailbox(resource stream_id, string mailbox)\",\"Create a new mailbox\"],imap_delete:[\"bool imap_delete(resource stream_id, int msg_no [, int options])\",\"Mark a message for deletion\"],imap_deletemailbox:[\"bool imap_deletemailbox(resource stream_id, string mailbox)\",\"Delete a mailbox\"],imap_errors:[\"array imap_errors(void)\",\"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"],imap_expunge:[\"bool imap_expunge(resource stream_id)\",\"Permanently delete all messages marked for deletion\"],imap_fetch_overview:[\"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\"Read an overview of the information in the headers of the given message sequence\"],imap_fetchbody:[\"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\"Get a specific body section\"],imap_fetchheader:[\"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\"Get the full unfiltered header for a message\"],imap_fetchstructure:[\"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\"Read the full structure of a message\"],imap_gc:[\"bool imap_gc(resource stream_id, int flags)\",\"This function garbage collects (purges) the cache of entries of a specific type.\"],imap_get_quota:[\"array imap_get_quota(resource stream_id, string qroot)\",\"Returns the quota set to the mailbox account qroot\"],imap_get_quotaroot:[\"array imap_get_quotaroot(resource stream_id, string mbox)\",\"Returns the quota set to the mailbox account mbox\"],imap_getacl:[\"array imap_getacl(resource stream_id, string mailbox)\",\"Gets the ACL for a given mailbox\"],imap_getmailboxes:[\"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"],imap_getsubscribed:[\"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"],imap_headerinfo:[\"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\"Read the headers of the message\"],imap_headers:[\"array imap_headers(resource stream_id)\",\"Returns headers for all messages in a mailbox\"],imap_last_error:[\"string imap_last_error(void)\",\"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"],imap_list:[\"array imap_list(resource stream_id, string ref, string pattern)\",\"Read the list of mailboxes\"],imap_listscan:[\"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\"Read list of mailboxes containing a certain string\"],imap_lsub:[\"array imap_lsub(resource stream_id, string ref, string pattern)\",\"Return a list of subscribed mailboxes\"],imap_mail:[\"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\"Send an email message\"],imap_mail_compose:[\"string imap_mail_compose(array envelope, array body)\",\"Create a MIME message based on given envelope and body sections\"],imap_mail_copy:[\"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\"Copy specified message to a mailbox\"],imap_mail_move:[\"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\"Move specified message to a mailbox\"],imap_mailboxmsginfo:[\"object imap_mailboxmsginfo(resource stream_id)\",\"Returns info about the current mailbox\"],imap_mime_header_decode:[\"array imap_mime_header_decode(string str)\",\"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"],imap_msgno:[\"int imap_msgno(resource stream_id, int unique_msg_id)\",\"Get the sequence number associated with a UID\"],imap_mutf7_to_utf8:[\"string imap_mutf7_to_utf8(string in)\",\"Decode a modified UTF-7 string to UTF-8\"],imap_num_msg:[\"int imap_num_msg(resource stream_id)\",\"Gives the number of messages in the current mailbox\"],imap_num_recent:[\"int imap_num_recent(resource stream_id)\",\"Gives the number of recent messages in current mailbox\"],imap_open:[\"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\"Open an IMAP stream to a mailbox\"],imap_ping:[\"bool imap_ping(resource stream_id)\",\"Check if the IMAP stream is still active\"],imap_qprint:[\"string imap_qprint(string text)\",\"Convert a quoted-printable string to an 8-bit string\"],imap_renamemailbox:[\"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\"Rename a mailbox\"],imap_reopen:[\"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\"Reopen an IMAP stream to a new mailbox\"],imap_rfc822_parse_adrlist:[\"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\"Parses an address string\"],imap_rfc822_parse_headers:[\"object imap_rfc822_parse_headers(string headers [, string default_host])\",\"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"],imap_rfc822_write_address:[\"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\"Returns a properly formatted email address given the mailbox, host, and personal info\"],imap_savebody:['bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \"\"[, int options = 0]])',\"Save a specific body section to a file\"],imap_search:[\"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\"Return a list of messages matching the given criteria\"],imap_set_quota:[\"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\"Will set the quota for qroot mailbox\"],imap_setacl:[\"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\"Sets the ACL for a given mailbox\"],imap_setflag_full:[\"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\"Sets flags on messages\"],imap_sort:[\"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\"Sort an array of message headers, optionally including only messages that meet specified criteria.\"],imap_status:[\"object imap_status(resource stream_id, string mailbox, int options)\",\"Get status info from a mailbox\"],imap_subscribe:[\"bool imap_subscribe(resource stream_id, string mailbox)\",\"Subscribe to a mailbox\"],imap_thread:[\"array imap_thread(resource stream_id [, int options])\",\"Return threaded by REFERENCES tree\"],imap_timeout:[\"mixed imap_timeout(int timeout_type [, int timeout])\",\"Set or fetch imap timeout\"],imap_uid:[\"int imap_uid(resource stream_id, int msg_no)\",\"Get the unique message id associated with a standard sequential message number\"],imap_undelete:[\"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\"Remove the delete flag from a message\"],imap_unsubscribe:[\"bool imap_unsubscribe(resource stream_id, string mailbox)\",\"Unsubscribe from a mailbox\"],imap_utf7_decode:[\"string imap_utf7_decode(string buf)\",\"Decode a modified UTF-7 string\"],imap_utf7_encode:[\"string imap_utf7_encode(string buf)\",\"Encode a string in modified UTF-7\"],imap_utf8:[\"string imap_utf8(string mime_encoded_text)\",\"Convert a mime-encoded text to UTF-8\"],imap_utf8_to_mutf7:[\"string imap_utf8_to_mutf7(string in)\",\"Encode a UTF-8 string to modified UTF-7\"],implode:[\"string implode([string glue,] array pieces)\",\"Joins array elements placing glue string between items and return one string\"],import_request_variables:[\"bool import_request_variables(string types [, string prefix])\",\"Import GET/POST/Cookie variables into the global scope\"],in_array:[\"bool in_array(mixed needle, array haystack [, bool strict])\",\"Checks if the given value exists in the array\"],include:[\"bool include(string path)\",\"Includes and evaluates the specified file\"],include_once:[\"bool include_once(string path)\",\"Includes and evaluates the specified file\"],inet_ntop:[\"string inet_ntop(string in_addr)\",\"Converts a packed inet address to a human readable IP address string\"],inet_pton:[\"string inet_pton(string ip_address)\",\"Converts a human readable IP address to a packed binary string\"],ini_get:[\"string ini_get(string varname)\",\"Get a configuration option\"],ini_get_all:[\"array ini_get_all([string extension[, bool details = true]])\",\"Get all configuration options\"],ini_restore:[\"void ini_restore(string varname)\",\"Restore the value of a configuration option specified by varname\"],ini_set:[\"string ini_set(string varname, string newvalue)\",\"Set a configuration option, returns false on error and the old value of the configuration option on success\"],interface_exists:[\"bool interface_exists(string classname [, bool autoload])\",\"Checks if the class exists\"],intl_error_name:[\"string intl_error_name()\",\"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"],intl_get_error_code:[\"int intl_get_error_code()\",\"* Get code of the last occured error.\"],intl_get_error_message:[\"string intl_get_error_message()\",\"* Get text description of the last occured error.\"],intl_is_failure:[\"bool intl_is_failure()\",\"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"],intval:[\"int intval(mixed var [, int base])\",\"Get the integer value of a variable using the optional base for the conversion\"],ip2long:[\"int ip2long(string ip_address)\",\"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"],iptcembed:[\"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\"Embed binary IPTC data into a JPEG image.\"],iptcparse:[\"array iptcparse(string iptcdata)\",\"Parse binary IPTC-data into associative array\"],is_a:[\"bool is_a(object object, string class_name)\",\"Returns true if the object is of this class or has this class as one of its parents\"],is_array:[\"bool is_array(mixed var)\",\"Returns true if variable is an array\"],is_bool:[\"bool is_bool(mixed var)\",\"Returns true if variable is a boolean\"],is_callable:[\"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\"Returns true if var is callable.\"],is_dir:[\"bool is_dir(string filename)\",\"Returns true if file is directory\"],is_executable:[\"bool is_executable(string filename)\",\"Returns true if file is executable\"],is_file:[\"bool is_file(string filename)\",\"Returns true if file is a regular file\"],is_finite:[\"bool is_finite(float val)\",\"Returns whether argument is finite\"],is_float:[\"bool is_float(mixed var)\",\"Returns true if variable is float point\"],is_infinite:[\"bool is_infinite(float val)\",\"Returns whether argument is infinite\"],is_link:[\"bool is_link(string filename)\",\"Returns true if file is symbolic link\"],is_long:[\"bool is_long(mixed var)\",\"Returns true if variable is a long (integer)\"],is_nan:[\"bool is_nan(float val)\",\"Returns whether argument is not a number\"],is_null:[\"bool is_null(mixed var)\",\"Returns true if variable is null\"],is_numeric:[\"bool is_numeric(mixed value)\",\"Returns true if value is a number or a numeric string\"],is_object:[\"bool is_object(mixed var)\",\"Returns true if variable is an object\"],is_readable:[\"bool is_readable(string filename)\",\"Returns true if file can be read\"],is_resource:[\"bool is_resource(mixed var)\",\"Returns true if variable is a resource\"],is_scalar:[\"bool is_scalar(mixed value)\",\"Returns true if value is a scalar\"],is_string:[\"bool is_string(mixed var)\",\"Returns true if variable is a string\"],is_subclass_of:[\"bool is_subclass_of(object object, string class_name)\",\"Returns true if the object has this class as one of its parents\"],is_uploaded_file:[\"bool is_uploaded_file(string path)\",\"Check if file was created by rfc1867 upload\"],is_writable:[\"bool is_writable(string filename)\",\"Returns true if file can be written\"],isset:[\"bool isset(mixed var [, mixed var])\",\"Determine whether a variable is set\"],iterator_apply:[\"int iterator_apply(Traversable it, mixed function [, mixed params])\",\"Calls a function for every element in an iterator\"],iterator_count:[\"int iterator_count(Traversable it)\",\"Count the elements in an iterator\"],iterator_to_array:[\"array iterator_to_array(Traversable it [, bool use_keys = true])\",\"Copy the iterator into an array\"],jddayofweek:[\"mixed jddayofweek(int juliandaycount [, int mode])\",\"Returns name or number of day of week from julian day count\"],jdmonthname:[\"string jdmonthname(int juliandaycount, int mode)\",\"Returns name of month for julian day count\"],jdtofrench:[\"string jdtofrench(int juliandaycount)\",\"Converts a julian day count to a french republic calendar date\"],jdtogregorian:[\"string jdtogregorian(int juliandaycount)\",\"Converts a julian day count to a gregorian calendar date\"],jdtojewish:[\"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\"Converts a julian day count to a jewish calendar date\"],jdtojulian:[\"string jdtojulian(int juliandaycount)\",\"Convert a julian day count to a julian calendar date\"],jdtounix:[\"int jdtounix(int jday)\",\"Convert Julian Day to UNIX timestamp\"],jewishtojd:[\"int jewishtojd(int month, int day, int year)\",\"Converts a jewish calendar date to a julian day count\"],join:[\"string join(array src, string glue)\",\"An alias for implode\"],jpeg2wbmp:[\"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert JPEG image to WBMP image\"],json_decode:[\"mixed json_decode(string json [, bool assoc [, long depth]])\",\"Decodes the JSON representation into a PHP value\"],json_encode:[\"string json_encode(mixed data [, int options])\",\"Returns the JSON representation of a value\"],json_last_error:[\"int json_last_error()\",\"Returns the error code of the last json_decode().\"],juliantojd:[\"int juliantojd(int month, int day, int year)\",\"Converts a julian calendar date to julian day count\"],key:[\"mixed key(array array_arg)\",\"Return the key of the element currently pointed to by the internal array pointer\"],krsort:[\"bool krsort(array &array_arg [, int sort_flags])\",\"Sort an array by key value in reverse order\"],ksort:[\"bool ksort(array &array_arg [, int sort_flags])\",\"Sort an array by key\"],lcfirst:[\"string lcfirst(string str)\",\"Make a string's first character lowercase\"],lcg_value:[\"float lcg_value()\",\"Returns a value from the combined linear congruential generator\"],lchgrp:[\"bool lchgrp(string filename, mixed group)\",\"Change symlink group\"],ldap_8859_to_t61:[\"string ldap_8859_to_t61(string value)\",\"Translate 8859 characters to t61 characters\"],ldap_add:[\"bool ldap_add(resource link, string dn, array entry)\",\"Add entries to LDAP directory\"],ldap_bind:[\"bool ldap_bind(resource link [, string dn [, string password]])\",\"Bind to LDAP directory\"],ldap_compare:[\"bool ldap_compare(resource link, string dn, string attr, string value)\",\"Determine if an entry has a specific value for one of its attributes\"],ldap_connect:[\"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\"Connect to an LDAP server\"],ldap_count_entries:[\"int ldap_count_entries(resource link, resource result)\",\"Count the number of entries in a search result\"],ldap_delete:[\"bool ldap_delete(resource link, string dn)\",\"Delete an entry from a directory\"],ldap_dn2ufn:[\"string ldap_dn2ufn(string dn)\",\"Convert DN to User Friendly Naming format\"],ldap_err2str:[\"string ldap_err2str(int errno)\",\"Convert error number to error string\"],ldap_errno:[\"int ldap_errno(resource link)\",\"Get the current ldap error number\"],ldap_error:[\"string ldap_error(resource link)\",\"Get the current ldap error string\"],ldap_explode_dn:[\"array ldap_explode_dn(string dn, int with_attrib)\",\"Splits DN into its component parts\"],ldap_first_attribute:[\"string ldap_first_attribute(resource link, resource result_entry)\",\"Return first attribute\"],ldap_first_entry:[\"resource ldap_first_entry(resource link, resource result)\",\"Return first result id\"],ldap_first_reference:[\"resource ldap_first_reference(resource link, resource result)\",\"Return first reference\"],ldap_free_result:[\"bool ldap_free_result(resource result)\",\"Free result memory\"],ldap_get_attributes:[\"array ldap_get_attributes(resource link, resource result_entry)\",\"Get attributes from a search result entry\"],ldap_get_dn:[\"string ldap_get_dn(resource link, resource result_entry)\",\"Get the DN of a result entry\"],ldap_get_entries:[\"array ldap_get_entries(resource link, resource result)\",\"Get all result entries\"],ldap_get_option:[\"bool ldap_get_option(resource link, int option, mixed retval)\",\"Get the current value of various session-wide parameters\"],ldap_get_values_len:[\"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\"Get all values with lengths from a result entry\"],ldap_list:[\"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Single-level search\"],ldap_mod_add:[\"bool ldap_mod_add(resource link, string dn, array entry)\",\"Add attribute values to current\"],ldap_mod_del:[\"bool ldap_mod_del(resource link, string dn, array entry)\",\"Delete attribute values\"],ldap_mod_replace:[\"bool ldap_mod_replace(resource link, string dn, array entry)\",\"Replace attribute values with new ones\"],ldap_next_attribute:[\"string ldap_next_attribute(resource link, resource result_entry)\",\"Get the next attribute in result\"],ldap_next_entry:[\"resource ldap_next_entry(resource link, resource result_entry)\",\"Get next result entry\"],ldap_next_reference:[\"resource ldap_next_reference(resource link, resource reference_entry)\",\"Get next reference\"],ldap_parse_reference:[\"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\"Extract information from reference entry\"],ldap_parse_result:[\"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\"Extract information from result\"],ldap_read:[\"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Read an entry\"],ldap_rename:[\"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\"Modify the name of an entry\"],ldap_sasl_bind:[\"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\"Bind to LDAP directory using SASL\"],ldap_search:[\"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\"Search LDAP tree under base_dn\"],ldap_set_option:[\"bool ldap_set_option(resource link, int option, mixed newval)\",\"Set the value of various session-wide parameters\"],ldap_set_rebind_proc:[\"bool ldap_set_rebind_proc(resource link, string callback)\",\"Set a callback function to do re-binds on referral chasing.\"],ldap_sort:[\"bool ldap_sort(resource link, resource result, string sortfilter)\",\"Sort LDAP result entries\"],ldap_start_tls:[\"bool ldap_start_tls(resource link)\",\"Start TLS\"],ldap_t61_to_8859:[\"string ldap_t61_to_8859(string value)\",\"Translate t61 characters to 8859 characters\"],ldap_unbind:[\"bool ldap_unbind(resource link)\",\"Unbind from LDAP directory\"],leak:[\"void leak(int num_bytes=3)\",\"Cause an intentional memory leak, for testing/debugging purposes\"],levenshtein:[\"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\"Calculate Levenshtein distance between two strings\"],libxml_clear_errors:[\"void libxml_clear_errors()\",\"Clear last error from libxml\"],libxml_disable_entity_loader:[\"bool libxml_disable_entity_loader([boolean disable])\",\"Disable/Enable ability to load external entities\"],libxml_get_errors:[\"object libxml_get_errors()\",\"Retrieve array of errors\"],libxml_get_last_error:[\"object libxml_get_last_error()\",\"Retrieve last error from libxml\"],libxml_set_streams_context:[\"void libxml_set_streams_context(resource streams_context)\",\"Set the streams context for the next libxml document load or write\"],libxml_use_internal_errors:[\"bool libxml_use_internal_errors([boolean use_errors])\",\"Disable libxml errors and allow user to fetch error information as needed\"],link:[\"int link(string target, string link)\",\"Create a hard link\"],linkinfo:[\"int linkinfo(string filename)\",\"Returns the st_dev field of the UNIX C stat structure describing the link\"],litespeed_request_headers:[\"array litespeed_request_headers(void)\",\"Fetch all HTTP request headers\"],litespeed_response_headers:[\"array litespeed_response_headers(void)\",\"Fetch all HTTP response headers\"],locale_accept_from_http:[\"string locale_accept_from_http(string $http_accept)\",null],locale_canonicalize:[\"static string locale_canonicalize(Locale $loc, string $locale)\",\"* @param string $locale The locale string to canonicalize\"],locale_filter_matches:[\"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"],locale_get_all_variants:[\"static array locale_get_all_variants($locale)\",\"* gets an array containing the list of variants, or null\"],locale_get_default:[\"static string locale_get_default( )\",\"Get default locale\"],locale_get_keywords:[\"static array locale_get_keywords(string $locale) {\",\"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"],locale_get_primary_language:[\"static string locale_get_primary_language($locale)\",\"* gets the primary language for the $locale\"],locale_get_region:[\"static string locale_get_region($locale)\",\"* gets the region for the $locale\"],locale_get_script:[\"static string locale_get_script($locale)\",\"* gets the script for the $locale\"],locale_lookup:[\"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\"* Searchs the items in $langtag for the best match to the language * range\"],locale_set_default:[\"static string locale_set_default( string $locale )\",\"Set default locale\"],localeconv:[\"array localeconv(void)\",\"Returns numeric formatting information based on the current locale\"],localtime:[\"array localtime([int timestamp [, bool associative_array]])\",\"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"],log:[\"float log(float number, [float base])\",\"Returns the natural logarithm of the number, or the base log if base is specified\"],log10:[\"float log10(float number)\",\"Returns the base-10 logarithm of the number\"],log1p:[\"float log1p(float number)\",\"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"],long2ip:[\"string long2ip(int proper_address)\",\"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"],lstat:[\"array lstat(string filename)\",\"Give information about a file or symbolic link\"],ltrim:[\"string ltrim(string str [, string character_mask])\",\"Strips whitespace from the beginning of a string\"],mail:[\"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"Send an email message\"],max:[\"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the highest value in an array or a series of arguments\"],mb_check_encoding:[\"bool mb_check_encoding([string var[, string encoding]])\",\"Check if the string is valid for the specified encoding\"],mb_convert_case:[\"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\"Returns a case-folded version of sourcestring\"],mb_convert_encoding:[\"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\"Returns converted string in desired encoding\"],mb_convert_kana:[\"string mb_convert_kana(string str [, string option] [, string encoding])\",\"Conversion between full-width character and half-width character (Japanese)\"],mb_convert_variables:[\"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\"Converts the string resource in variables to desired encoding\"],mb_decode_mimeheader:[\"string mb_decode_mimeheader(string string)\",'Decodes the MIME \"encoded-word\" in the string'],mb_decode_numericentity:[\"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\"Converts HTML numeric entities to character code\"],mb_detect_encoding:[\"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\"Encodings of the given string is returned (as a string)\"],mb_detect_order:[\"bool|array mb_detect_order([mixed encoding-list])\",\"Sets the current detect_order or Return the current detect_order as a array\"],mb_encode_mimeheader:[\"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",'Converts the string to MIME \"encoded-word\" in the format of =?charset?(B|Q)?encoded_string?='],mb_encode_numericentity:[\"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\"Converts specified characters to HTML numeric entities\"],mb_encoding_aliases:[\"array mb_encoding_aliases(string encoding)\",\"Returns an array of the aliases of a given encoding name\"],mb_ereg:[\"int mb_ereg(string pattern, string string [, array registers])\",\"Regular expression match for multibyte string\"],mb_ereg_match:[\"bool mb_ereg_match(string pattern, string string [,string option])\",\"Regular expression match for multibyte string\"],mb_ereg_replace:[\"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\"Replace regular expression for multibyte string\"],mb_ereg_search:[\"bool mb_ereg_search([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_getpos:[\"int mb_ereg_search_getpos(void)\",\"Get search start position\"],mb_ereg_search_getregs:[\"array mb_ereg_search_getregs(void)\",\"Get matched substring of the last time\"],mb_ereg_search_init:[\"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\"Initialize string and regular expression for search.\"],mb_ereg_search_pos:[\"array mb_ereg_search_pos([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_regs:[\"array mb_ereg_search_regs([string pattern[, string option]])\",\"Regular expression search for multibyte string\"],mb_ereg_search_setpos:[\"bool mb_ereg_search_setpos(int position)\",\"Set search start position\"],mb_eregi:[\"int mb_eregi(string pattern, string string [, array registers])\",\"Case-insensitive regular expression match for multibyte string\"],mb_eregi_replace:[\"string mb_eregi_replace(string pattern, string replacement, string string)\",\"Case insensitive replace regular expression for multibyte string\"],mb_get_info:[\"mixed mb_get_info([string type])\",\"Returns the current settings of mbstring\"],mb_http_input:[\"mixed mb_http_input([string type])\",\"Returns the input encoding\"],mb_http_output:[\"string mb_http_output([string encoding])\",\"Sets the current output_encoding or returns the current output_encoding as a string\"],mb_internal_encoding:[\"string mb_internal_encoding([string encoding])\",\"Sets the current internal encoding or Returns the current internal encoding as a string\"],mb_language:[\"string mb_language([string language])\",\"Sets the current language or Returns the current language as a string\"],mb_list_encodings:[\"mixed mb_list_encodings()\",\"Returns an array of all supported entity encodings\"],mb_output_handler:[\"string mb_output_handler(string contents, int status)\",\"Returns string in output buffer converted to the http_output encoding\"],mb_parse_str:[\"bool mb_parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],mb_preferred_mime_name:[\"string mb_preferred_mime_name(string encoding)\",\"Return the preferred MIME name (charset) as a string\"],mb_regex_encoding:[\"string mb_regex_encoding([string encoding])\",\"Returns the current encoding for regex as a string.\"],mb_regex_set_options:[\"string mb_regex_set_options([string options])\",\"Set or get the default options for mbregex functions\"],mb_send_mail:[\"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\"*  Sends an email message with MIME scheme\"],mb_split:[\"array mb_split(string pattern, string string [, int limit])\",\"split multibyte string into array by regular expression\"],mb_strcut:[\"string mb_strcut(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_strimwidth:[\"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\"Trim the string in terminal width\"],mb_stripos:[\"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of first occurrence of a string within another, case insensitive\"],mb_stristr:[\"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another, case insensitive\"],mb_strlen:[\"int mb_strlen(string str [, string encoding])\",\"Get character numbers of a string\"],mb_strpos:[\"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of first occurrence of a string within another\"],mb_strrchr:[\"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another\"],mb_strrichr:[\"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds the last occurrence of a character in a string within another, case insensitive\"],mb_strripos:[\"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\"Finds position of last occurrence of a string within another, case insensitive\"],mb_strrpos:[\"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\"Find position of last occurrence of a string within another\"],mb_strstr:[\"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\"Finds first occurrence of a string within another\"],mb_strtolower:[\"string mb_strtolower(string sourcestring [, string encoding])\",\"*  Returns a lowercased version of sourcestring\"],mb_strtoupper:[\"string mb_strtoupper(string sourcestring [, string encoding])\",\"*  Returns a uppercased version of sourcestring\"],mb_strwidth:[\"int mb_strwidth(string str [, string encoding])\",\"Gets terminal width of a string\"],mb_substitute_character:[\"mixed mb_substitute_character([mixed substchar])\",\"Sets the current substitute_character or returns the current substitute_character\"],mb_substr:[\"string mb_substr(string str, int start [, int length [, string encoding]])\",\"Returns part of a string\"],mb_substr_count:[\"int mb_substr_count(string haystack, string needle [, string encoding])\",\"Count the number of substring occurrences\"],mcrypt_cbc:[\"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\"CBC crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_cfb:[\"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\"CFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_create_iv:[\"string mcrypt_create_iv(int size, int source)\",\"Create an initialization vector (IV)\"],mcrypt_decrypt:[\"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_ecb:[\"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\"ECB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_enc_get_algorithms_name:[\"string mcrypt_enc_get_algorithms_name(resource td)\",\"Returns the name of the algorithm specified by the descriptor td\"],mcrypt_enc_get_block_size:[\"int mcrypt_enc_get_block_size(resource td)\",\"Returns the block size of the cipher specified by the descriptor td\"],mcrypt_enc_get_iv_size:[\"int mcrypt_enc_get_iv_size(resource td)\",\"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_key_size:[\"int mcrypt_enc_get_key_size(resource td)\",\"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"],mcrypt_enc_get_modes_name:[\"string mcrypt_enc_get_modes_name(resource td)\",\"Returns the name of the mode specified by the descriptor td\"],mcrypt_enc_get_supported_key_sizes:[\"array mcrypt_enc_get_supported_key_sizes(resource td)\",\"This function decrypts the crypttext\"],mcrypt_enc_is_block_algorithm:[\"bool mcrypt_enc_is_block_algorithm(resource td)\",\"Returns TRUE if the alrogithm is a block algorithms\"],mcrypt_enc_is_block_algorithm_mode:[\"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_enc_is_block_mode:[\"bool mcrypt_enc_is_block_mode(resource td)\",\"Returns TRUE if the mode outputs blocks\"],mcrypt_enc_self_test:[\"int mcrypt_enc_self_test(resource td)\",\"This function runs the self test on the algorithm specified by the descriptor td\"],mcrypt_encrypt:[\"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],mcrypt_generic:[\"string mcrypt_generic(resource td, string data)\",\"This function encrypts the plaintext\"],mcrypt_generic_deinit:[\"bool mcrypt_generic_deinit(resource td)\",\"This function terminates encrypt specified by the descriptor td\"],mcrypt_generic_init:[\"int mcrypt_generic_init(resource td, string key, string iv)\",\"This function initializes all buffers for the specific module\"],mcrypt_get_block_size:[\"int mcrypt_get_block_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_get_cipher_name:[\"string mcrypt_get_cipher_name(string cipher)\",\"Get the key size of cipher\"],mcrypt_get_iv_size:[\"int mcrypt_get_iv_size(string cipher, string module)\",\"Get the IV size of cipher (Usually the same as the blocksize)\"],mcrypt_get_key_size:[\"int mcrypt_get_key_size(string cipher, string module)\",\"Get the key size of cipher\"],mcrypt_list_algorithms:[\"array mcrypt_list_algorithms([string lib_dir])\",'List all algorithms in \"module_dir\"'],mcrypt_list_modes:[\"array mcrypt_list_modes([string lib_dir])\",'List all modes \"module_dir\"'],mcrypt_module_close:[\"bool mcrypt_module_close(resource td)\",\"Free the descriptor td\"],mcrypt_module_get_algo_block_size:[\"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\"Returns the block size of the algorithm\"],mcrypt_module_get_algo_key_size:[\"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\"Returns the maximum supported key size of the algorithm\"],mcrypt_module_get_supported_key_sizes:[\"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\"This function decrypts the crypttext\"],mcrypt_module_is_block_algorithm:[\"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\"Returns TRUE if the algorithm is a block algorithm\"],mcrypt_module_is_block_algorithm_mode:[\"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode is for use with block algorithms\"],mcrypt_module_is_block_mode:[\"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\"Returns TRUE if the mode outputs blocks of bytes\"],mcrypt_module_open:[\"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\"Opens the module of the algorithm and the mode to be used\"],mcrypt_module_self_test:[\"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",'Does a self test of the module \"module\"'],mcrypt_ofb:[\"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\"OFB crypt/decrypt data using key key with cipher cipher starting with iv\"],md5:[\"string md5(string str, [ bool raw_output])\",\"Calculate the md5 hash of a string\"],md5_file:[\"string md5_file(string filename [, bool raw_output])\",\"Calculate the md5 hash of given filename\"],mdecrypt_generic:[\"string mdecrypt_generic(resource td, string data)\",\"This function decrypts the plaintext\"],memory_get_peak_usage:[\"int memory_get_peak_usage([real_usage])\",\"Returns the peak allocated by PHP memory\"],memory_get_usage:[\"int memory_get_usage([real_usage])\",\"Returns the allocated by PHP memory\"],metaphone:[\"string metaphone(string text[, int phones])\",\"Break english phrases down into their phonemes\"],method_exists:[\"bool method_exists(object object, string method)\",\"Checks if the class method exists\"],mhash:[\"string mhash(int hash, string data [, string key])\",\"Hash data with hash\"],mhash_count:[\"int mhash_count(void)\",\"Gets the number of available hashes\"],mhash_get_block_size:[\"int mhash_get_block_size(int hash)\",\"Gets the block size of hash\"],mhash_get_hash_name:[\"string mhash_get_hash_name(int hash)\",\"Gets the name of hash\"],mhash_keygen_s2k:[\"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\"Generates a key using hash functions\"],microtime:[\"mixed microtime([bool get_as_float])\",\"Returns either a string or a float containing the current time in seconds and microseconds\"],mime_content_type:[\"string mime_content_type(string filename|resource stream)\",\"Return content-type for file\"],min:[\"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Return the lowest value in an array or a series of arguments\"],mkdir:[\"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\"Create a directory\"],mktime:[\"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\"Get UNIX timestamp for a date\"],money_format:[\"string money_format(string format , float value)\",\"Convert monetary value(s) to string\"],move_uploaded_file:[\"bool move_uploaded_file(string path, string new_path)\",\"Move a file if and only if it was created by an upload\"],msg_get_queue:[\"resource msg_get_queue(int key [, int perms])\",\"Attach to a message queue\"],msg_queue_exists:[\"bool msg_queue_exists(int key)\",\"Check wether a message queue exists\"],msg_receive:[\"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_remove_queue:[\"bool msg_remove_queue(resource queue)\",\"Destroy the queue\"],msg_send:[\"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\"Send a message of type msgtype (must be > 0) to a message queue\"],msg_set_queue:[\"bool msg_set_queue(resource queue, array data)\",\"Set information for a message queue\"],msg_stat_queue:[\"array msg_stat_queue(resource queue)\",\"Returns information about a message queue\"],msgfmt_create:[\"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\"* Create formatter.\"],msgfmt_format:[\"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\"* Format a message.\"],msgfmt_format_message:[\"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\"* Format a message.\"],msgfmt_get_error_code:[\"int msgfmt_get_error_code( MessageFormatter $nf )\",\"* Get formatter's last error code.\"],msgfmt_get_error_message:[\"string msgfmt_get_error_message( MessageFormatter $coll )\",\"* Get text description for formatter's last error code.\"],msgfmt_get_locale:[\"string msgfmt_get_locale(MessageFormatter $mf)\",\"* Get formatter locale.\"],msgfmt_get_pattern:[\"string msgfmt_get_pattern( MessageFormatter $mf )\",\"* Get formatter pattern.\"],msgfmt_parse:[\"array msgfmt_parse( MessageFormatter $nf, string $source )\",\"* Parse a message.\"],msgfmt_set_pattern:[\"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\"* Set formatter pattern.\"],mssql_bind:[\"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\"Adds a parameter to a stored procedure or a remote stored procedure\"],mssql_close:[\"bool mssql_close([resource conn_id])\",\"Closes a connection to a MS-SQL server\"],mssql_connect:[\"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a connection to a MS-SQL server\"],mssql_data_seek:[\"bool mssql_data_seek(resource result_id, int offset)\",\"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"],mssql_execute:[\"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\"Executes a stored procedure on a MS-SQL server database\"],mssql_fetch_array:[\"array mssql_fetch_array(resource result_id [, int result_type])\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_assoc:[\"array mssql_fetch_assoc(resource result_id)\",\"Returns an associative array of the current row in the result set specified by result_id\"],mssql_fetch_batch:[\"int mssql_fetch_batch(resource result_index)\",\"Returns the next batch of records\"],mssql_fetch_field:[\"object mssql_fetch_field(resource result_id [, int offset])\",\"Gets information about certain fields in a query result\"],mssql_fetch_object:[\"object mssql_fetch_object(resource result_id)\",\"Returns a pseudo-object of the current row in the result set specified by result_id\"],mssql_fetch_row:[\"array mssql_fetch_row(resource result_id)\",\"Returns an array of the current row in the result set specified by result_id\"],mssql_field_length:[\"int mssql_field_length(resource result_id [, int offset])\",\"Get the length of a MS-SQL field\"],mssql_field_name:[\"string mssql_field_name(resource result_id [, int offset])\",\"Returns the name of the field given by offset in the result set given by result_id\"],mssql_field_seek:[\"bool mssql_field_seek(resource result_id, int offset)\",\"Seeks to the specified field offset\"],mssql_field_type:[\"string mssql_field_type(resource result_id [, int offset])\",\"Returns the type of a field\"],mssql_free_result:[\"bool mssql_free_result(resource result_index)\",\"Free a MS-SQL result index\"],mssql_free_statement:[\"bool mssql_free_statement(resource result_index)\",\"Free a MS-SQL statement index\"],mssql_get_last_message:[\"string mssql_get_last_message(void)\",\"Gets the last message from the MS-SQL server\"],mssql_guid_string:[\"string mssql_guid_string(string binary [,bool short_format])\",\"Converts a 16 byte binary GUID to a string\"],mssql_init:[\"int mssql_init(string sp_name [, resource conn_id])\",\"Initializes a stored procedure or a remote stored procedure\"],mssql_min_error_severity:[\"void mssql_min_error_severity(int severity)\",\"Sets the lower error severity\"],mssql_min_message_severity:[\"void mssql_min_message_severity(int severity)\",\"Sets the lower message severity\"],mssql_next_result:[\"bool mssql_next_result(resource result_id)\",\"Move the internal result pointer to the next result\"],mssql_num_fields:[\"int mssql_num_fields(resource mssql_result_index)\",\"Returns the number of fields fetched in from the result id specified\"],mssql_num_rows:[\"int mssql_num_rows(resource mssql_result_index)\",\"Returns the number of rows fetched in from the result id specified\"],mssql_pconnect:[\"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\"Establishes a persistent connection to a MS-SQL server\"],mssql_query:[\"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\"Perform an SQL query on a MS-SQL server database\"],mssql_result:[\"string mssql_result(resource result_id, int row, mixed field)\",\"Returns the contents of one cell from a MS-SQL result set\"],mssql_rows_affected:[\"int mssql_rows_affected(resource conn_id)\",\"Returns the number of records affected by the query\"],mssql_select_db:[\"bool mssql_select_db(string database_name [, resource conn_id])\",\"Select a MS-SQL database\"],mt_getrandmax:[\"int mt_getrandmax(void)\",\"Returns the maximum value a random number from Mersenne Twister can have\"],mt_rand:[\"int mt_rand([int min, int max])\",\"Returns a random number from Mersenne Twister\"],mt_srand:[\"void mt_srand([int seed])\",\"Seeds Mersenne Twister random number generator\"],mysql_affected_rows:[\"int mysql_affected_rows([int link_identifier])\",\"Gets number of affected rows in previous MySQL operation\"],mysql_client_encoding:[\"string mysql_client_encoding([int link_identifier])\",\"Returns the default character set for the current connection\"],mysql_close:[\"bool mysql_close([int link_identifier])\",\"Close a MySQL connection\"],mysql_connect:[\"resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\"Opens a connection to a MySQL Server\"],mysql_create_db:[\"bool mysql_create_db(string database_name [, int link_identifier])\",\"Create a MySQL database\"],mysql_data_seek:[\"bool mysql_data_seek(resource result, int row_number)\",\"Move internal result pointer\"],mysql_db_query:[\"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_drop_db:[\"bool mysql_drop_db(string database_name [, int link_identifier])\",\"Drops (delete) a MySQL database\"],mysql_errno:[\"int mysql_errno([int link_identifier])\",\"Returns the number of the error message from previous MySQL operation\"],mysql_error:[\"string mysql_error([int link_identifier])\",\"Returns the text of the error message from previous MySQL operation\"],mysql_escape_string:[\"string mysql_escape_string(string to_be_escaped)\",\"Escape string for mysql query\"],mysql_fetch_array:[\"array mysql_fetch_array(resource result [, int result_type])\",\"Fetch a result row as an array (associative, numeric or both)\"],mysql_fetch_assoc:[\"array mysql_fetch_assoc(resource result)\",\"Fetch a result row as an associative array\"],mysql_fetch_field:[\"object mysql_fetch_field(resource result [, int field_offset])\",\"Gets column information from a result and return as an object\"],mysql_fetch_lengths:[\"array mysql_fetch_lengths(resource result)\",\"Gets max data size of each column in a result\"],mysql_fetch_object:[\"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysql_fetch_row:[\"array mysql_fetch_row(resource result)\",\"Gets a result row as an enumerated array\"],mysql_field_flags:[\"string mysql_field_flags(resource result, int field_offset)\",\"Gets the flags associated with the specified field in a result\"],mysql_field_len:[\"int mysql_field_len(resource result, int field_offset)\",\"Returns the length of the specified field\"],mysql_field_name:[\"string mysql_field_name(resource result, int field_index)\",\"Gets the name of the specified field in a result\"],mysql_field_seek:[\"bool mysql_field_seek(resource result, int field_offset)\",\"Sets result pointer to a specific field offset\"],mysql_field_table:[\"string mysql_field_table(resource result, int field_offset)\",\"Gets name of the table the specified field is in\"],mysql_field_type:[\"string mysql_field_type(resource result, int field_offset)\",\"Gets the type of the specified field in a result\"],mysql_free_result:[\"bool mysql_free_result(resource result)\",\"Free result memory\"],mysql_get_client_info:[\"string mysql_get_client_info(void)\",\"Returns a string that represents the client library version\"],mysql_get_host_info:[\"string mysql_get_host_info([int link_identifier])\",\"Returns a string describing the type of connection in use, including the server host name\"],mysql_get_proto_info:[\"int mysql_get_proto_info([int link_identifier])\",\"Returns the protocol version used by current connection\"],mysql_get_server_info:[\"string mysql_get_server_info([int link_identifier])\",\"Returns a string that represents the server version number\"],mysql_info:[\"string mysql_info([int link_identifier])\",\"Returns a string containing information about the most recent query\"],mysql_insert_id:[\"int mysql_insert_id([int link_identifier])\",\"Gets the ID generated from the previous INSERT operation\"],mysql_list_dbs:[\"resource mysql_list_dbs([int link_identifier])\",\"List databases available on a MySQL server\"],mysql_list_fields:[\"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\"List MySQL result fields\"],mysql_list_processes:[\"resource mysql_list_processes([int link_identifier])\",\"Returns a result set describing the current server threads\"],mysql_list_tables:[\"resource mysql_list_tables(string database_name [, int link_identifier])\",\"List tables in a MySQL database\"],mysql_num_fields:[\"int mysql_num_fields(resource result)\",\"Gets number of fields in a result\"],mysql_num_rows:[\"int mysql_num_rows(resource result)\",\"Gets number of rows in a result\"],mysql_pconnect:[\"resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])\",\"Opens a persistent connection to a MySQL Server\"],mysql_ping:[\"bool mysql_ping([int link_identifier])\",\"Ping a server connection. If no connection then reconnect.\"],mysql_query:[\"resource mysql_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL\"],mysql_real_escape_string:[\"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysql_result:[\"mixed mysql_result(resource result, int row [, mixed field])\",\"Gets result data\"],mysql_select_db:[\"bool mysql_select_db(string database_name [, int link_identifier])\",\"Selects a MySQL database\"],mysql_set_charset:[\"bool mysql_set_charset(string csname [, int link_identifier])\",\"sets client character set\"],mysql_stat:[\"string mysql_stat([int link_identifier])\",\"Returns a string containing status information\"],mysql_thread_id:[\"int mysql_thread_id([int link_identifier])\",\"Returns the thread id of current connection\"],mysql_unbuffered_query:[\"resource mysql_unbuffered_query(string query [, int link_identifier])\",\"Sends an SQL query to MySQL, without fetching and buffering the result rows\"],mysqli_affected_rows:[\"mixed mysqli_affected_rows(object link)\",\"Get number of affected rows in previous MySQL operation\"],mysqli_autocommit:[\"bool mysqli_autocommit(object link, bool mode)\",\"Turn auto commit on or of\"],mysqli_cache_stats:[\"array mysqli_cache_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_change_user:[\"bool mysqli_change_user(object link, string user, string password, string database)\",\"Change logged-in user of the active connection\"],mysqli_character_set_name:[\"string mysqli_character_set_name(object link)\",\"Returns the name of the character set used for this connection\"],mysqli_close:[\"bool mysqli_close(object link)\",\"Close connection\"],mysqli_commit:[\"bool mysqli_commit(object link)\",\"Commit outstanding actions and close transaction\"],mysqli_connect:[\"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\"Open a connection to a mysql server\"],mysqli_connect_errno:[\"int mysqli_connect_errno(void)\",\"Returns the numerical value of the error message from last connect command\"],mysqli_connect_error:[\"string mysqli_connect_error(void)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_data_seek:[\"bool mysqli_data_seek(object result, int offset)\",\"Move internal result pointer\"],mysqli_debug:[\"void mysqli_debug(string debug)\",\"\"],mysqli_dump_debug_info:[\"bool mysqli_dump_debug_info(object link)\",\"\"],mysqli_embedded_server_end:[\"void mysqli_embedded_server_end(void)\",\"\"],mysqli_embedded_server_start:[\"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\"initialize and start embedded server\"],mysqli_errno:[\"int mysqli_errno(object link)\",\"Returns the numerical value of the error message from previous MySQL operation\"],mysqli_error:[\"string mysqli_error(object link)\",\"Returns the text of the error message from previous MySQL operation\"],mysqli_fetch_all:[\"mixed mysqli_fetch_all (object result [,int resulttype])\",\"Fetches all result rows as an associative array, a numeric array, or both\"],mysqli_fetch_array:[\"mixed mysqli_fetch_array (object result [,int resulttype])\",\"Fetch a result row as an associative array, a numeric array, or both\"],mysqli_fetch_assoc:[\"mixed mysqli_fetch_assoc (object result)\",\"Fetch a result row as an associative array\"],mysqli_fetch_field:[\"mixed mysqli_fetch_field (object result)\",\"Get column information from a result and return as an object\"],mysqli_fetch_field_direct:[\"mixed mysqli_fetch_field_direct (object result, int offset)\",\"Fetch meta-data for a single field\"],mysqli_fetch_fields:[\"mixed mysqli_fetch_fields (object result)\",\"Return array of objects containing field meta-data\"],mysqli_fetch_lengths:[\"mixed mysqli_fetch_lengths (object result)\",\"Get the length of each output in a result\"],mysqli_fetch_object:[\"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\"Fetch a result row as an object\"],mysqli_fetch_row:[\"array mysqli_fetch_row (object result)\",\"Get a result row as an enumerated array\"],mysqli_field_count:[\"int mysqli_field_count(object link)\",\"Fetch the number of fields returned by the last query for the given link\"],mysqli_field_seek:[\"int mysqli_field_seek(object result, int fieldnr)\",\"Set result pointer to a specified field offset\"],mysqli_field_tell:[\"int mysqli_field_tell(object result)\",\"Get current field offset of result pointer\"],mysqli_free_result:[\"void mysqli_free_result(object result)\",\"Free query result memory for the given result handle\"],mysqli_get_charset:[\"object mysqli_get_charset(object link)\",\"returns a character set object\"],mysqli_get_client_info:[\"string mysqli_get_client_info(void)\",\"Get MySQL client info\"],mysqli_get_client_stats:[\"array mysqli_get_client_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_client_version:[\"int mysqli_get_client_version(void)\",\"Get MySQL client info\"],mysqli_get_connection_stats:[\"array mysqli_get_connection_stats(void)\",\"Returns statistics about the zval cache\"],mysqli_get_host_info:[\"string mysqli_get_host_info (object link)\",\"Get MySQL host info\"],mysqli_get_proto_info:[\"int mysqli_get_proto_info(object link)\",\"Get MySQL protocol information\"],mysqli_get_server_info:[\"string mysqli_get_server_info(object link)\",\"Get MySQL server info\"],mysqli_get_server_version:[\"int mysqli_get_server_version(object link)\",\"Return the MySQL version for the server referenced by the given link\"],mysqli_get_warnings:[\"object mysqli_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } /* }}}'],mysqli_info:[\"string mysqli_info(object link)\",\"Get information about the most recent query\"],mysqli_init:[\"resource mysqli_init(void)\",\"Initialize mysqli and return a resource for use with mysql_real_connect\"],mysqli_insert_id:[\"mixed mysqli_insert_id(object link)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_kill:[\"bool mysqli_kill(object link, int processid)\",\"Kill a mysql process on the server\"],mysqli_link_construct:[\"object mysqli_link_construct()\",\"\"],mysqli_more_results:[\"bool mysqli_more_results(object link)\",\"check if there any more query results from a multi query\"],mysqli_multi_query:[\"bool mysqli_multi_query(object link, string query)\",\"allows to execute multiple queries\"],mysqli_next_result:[\"bool mysqli_next_result(object link)\",\"read next result from multi_query\"],mysqli_num_fields:[\"int mysqli_num_fields(object result)\",\"Get number of fields in result\"],mysqli_num_rows:[\"mixed mysqli_num_rows(object result)\",\"Get number of rows in result\"],mysqli_options:[\"bool mysqli_options(object link, int flags, mixed values)\",\"Set options\"],mysqli_ping:[\"bool mysqli_ping(object link)\",\"Ping a server connection or reconnect if there is no connection\"],mysqli_poll:[\"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\"Poll connections\"],mysqli_prepare:[\"mixed mysqli_prepare(object link, string query)\",\"Prepare a SQL statement for execution\"],mysqli_query:[\"mixed mysqli_query(object link, string query [,int resultmode]) */\",'PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Os|l\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Empty query\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid value for resultmode\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   /* no result set - not a SELECT'],mysqli_real_connect:[\"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\"Open a connection to a mysql server\"],mysqli_real_escape_string:[\"string mysqli_real_escape_string(object link, string escapestr)\",\"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"],mysqli_real_query:[\"bool mysqli_real_query(object link, string query)\",\"Binary-safe version of mysql_query()\"],mysqli_reap_async_query:[\"int mysqli_reap_async_query(object link)\",\"Poll connections\"],mysqli_refresh:[\"bool mysqli_refresh(object link, long options)\",\"Flush tables or caches, or reset replication server information\"],mysqli_report:[\"bool mysqli_report(int flags)\",\"sets report level\"],mysqli_rollback:[\"bool mysqli_rollback(object link)\",\"Undo actions from current transaction\"],mysqli_select_db:[\"bool mysqli_select_db(object link, string dbname)\",\"Select a MySQL database\"],mysqli_set_charset:[\"bool mysqli_set_charset(object link, string csname)\",\"sets client character set\"],mysqli_set_local_infile_default:[\"void mysqli_set_local_infile_default(object link)\",\"unsets user defined handler for load local infile command\"],mysqli_set_local_infile_handler:[\"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\"Set callback functions for LOAD DATA LOCAL INFILE\"],mysqli_sqlstate:[\"string mysqli_sqlstate(object link)\",\"Returns the SQLSTATE error from previous MySQL operation\"],mysqli_ssl_set:[\"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\"\"],mysqli_stat:[\"mixed mysqli_stat(object link)\",\"Get current system status\"],mysqli_stmt_affected_rows:[\"mixed mysqli_stmt_affected_rows(object stmt)\",\"Return the number of rows affected in the last query for the given link\"],mysqli_stmt_attr_get:[\"int mysqli_stmt_attr_get(object stmt, long attr)\",\"\"],mysqli_stmt_attr_set:[\"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\"\"],mysqli_stmt_bind_param:[\"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\"Bind variables to a prepared statement as parameters\"],mysqli_stmt_bind_result:[\"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\"Bind variables to a prepared statement for result storage\"],mysqli_stmt_close:[\"bool mysqli_stmt_close(object stmt)\",\"Close statement\"],mysqli_stmt_data_seek:[\"void mysqli_stmt_data_seek(object stmt, int offset)\",\"Move internal result pointer\"],mysqli_stmt_errno:[\"int mysqli_stmt_errno(object stmt)\",\"\"],mysqli_stmt_error:[\"string mysqli_stmt_error(object stmt)\",\"\"],mysqli_stmt_execute:[\"bool mysqli_stmt_execute(object stmt)\",\"Execute a prepared statement\"],mysqli_stmt_fetch:[\"mixed mysqli_stmt_fetch(object stmt)\",\"Fetch results from a prepared statement into the bound variables\"],mysqli_stmt_field_count:[\"int mysqli_stmt_field_count(object stmt) {\",\"Return the number of result columns for the given statement\"],mysqli_stmt_free_result:[\"void mysqli_stmt_free_result(object stmt)\",\"Free stored result memory for the given statement handle\"],mysqli_stmt_get_result:[\"object mysqli_stmt_get_result(object link)\",\"Buffer result set on client\"],mysqli_stmt_get_warnings:[\"object mysqli_stmt_get_warnings(object link) */\",'PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \"mysqli_stmt\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_stmt_init:[\"mixed mysqli_stmt_init(object link)\",\"Initialize statement object\"],mysqli_stmt_insert_id:[\"mixed mysqli_stmt_insert_id(object stmt)\",\"Get the ID generated from the previous INSERT operation\"],mysqli_stmt_next_result:[\"bool mysqli_stmt_next_result(object link)\",\"read next result from multi_query\"],mysqli_stmt_num_rows:[\"mixed mysqli_stmt_num_rows(object stmt)\",\"Return the number of rows in statements result set\"],mysqli_stmt_param_count:[\"int mysqli_stmt_param_count(object stmt)\",\"Return the number of parameter for the given statement\"],mysqli_stmt_prepare:[\"bool mysqli_stmt_prepare(object stmt, string query)\",\"prepare server side statement with query\"],mysqli_stmt_reset:[\"bool mysqli_stmt_reset(object stmt)\",\"reset a prepared statement\"],mysqli_stmt_result_metadata:[\"mixed mysqli_stmt_result_metadata(object stmt)\",\"return result set from statement\"],mysqli_stmt_send_long_data:[\"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\"\"],mysqli_stmt_sqlstate:[\"string mysqli_stmt_sqlstate(object stmt)\",\"\"],mysqli_stmt_store_result:[\"bool mysqli_stmt_store_result(stmt)\",\"\"],mysqli_store_result:[\"object mysqli_store_result(object link)\",\"Buffer result set on client\"],mysqli_thread_id:[\"int mysqli_thread_id(object link)\",\"Return the current thread ID\"],mysqli_thread_safe:[\"bool mysqli_thread_safe(void)\",\"Return whether thread safety is given or not\"],mysqli_use_result:[\"mixed mysqli_use_result(object link)\",\"Directly retrieve query results - do not buffer results on client side\"],mysqli_warning_count:[\"int mysqli_warning_count (object link)\",\"Return number of warnings from the last query for the given link\"],natcasesort:[\"void natcasesort(array &array_arg)\",\"Sort an array using case-insensitive natural sort\"],natsort:[\"void natsort(array &array_arg)\",\"Sort an array using natural sort\"],next:[\"mixed next(array array_arg)\",\"Move array argument's internal pointer to the next element and return it\"],ngettext:[\"string ngettext(string MSGID1, string MSGID2, int N)\",\"Plural version of gettext()\"],nl2br:[\"string nl2br(string str [, bool is_xhtml])\",\"Converts newlines to HTML line breaks\"],nl_langinfo:[\"string nl_langinfo(int item)\",\"Query language and locale information\"],normalizer_is_normalize:[\"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\"* Test if a string is in a given normalization form.\"],normalizer_normalize:[\"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\"* Normalize a string.\"],nsapi_request_headers:[\"array nsapi_request_headers(void)\",\"Get all headers from the request\"],nsapi_response_headers:[\"array nsapi_response_headers(void)\",\"Get all headers from the response\"],nsapi_virtual:[\"bool nsapi_virtual(string uri)\",\"Perform an NSAPI sub-request\"],number_format:[\"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\"Formats a number with grouped thousands\"],numfmt_create:[\"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\"* Create number formatter.\"],numfmt_format:[\"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\"* Format a number.\"],numfmt_format_currency:[\"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\"* Format a number as currency.\"],numfmt_get_attribute:[\"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_get_error_code:[\"int numfmt_get_error_code( NumberFormatter $nf )\",\"* Get formatter's last error code.\"],numfmt_get_error_message:[\"string numfmt_get_error_message( NumberFormatter $nf )\",\"* Get text description for formatter's last error code.\"],numfmt_get_locale:[\"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\"* Get formatter locale.\"],numfmt_get_pattern:[\"string numfmt_get_pattern( NumberFormatter $nf )\",\"* Get formatter pattern.\"],numfmt_get_symbol:[\"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\"* Get formatter symbol value.\"],numfmt_get_text_attribute:[\"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\"* Get formatter attribute value.\"],numfmt_parse:[\"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\"* Parse a number.\"],numfmt_parse_currency:[\"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\"* Parse a number as currency.\"],numfmt_parse_message:[\"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\"* Parse a message.\"],numfmt_set_attribute:[\"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\"* Get formatter attribute value.\"],numfmt_set_pattern:[\"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\"* Set formatter pattern.\"],numfmt_set_symbol:[\"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\"* Set formatter symbol value.\"],numfmt_set_text_attribute:[\"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\"* Get formatter attribute value.\"],ob_clean:[\"bool ob_clean(void)\",\"Clean (delete) the current output buffer\"],ob_end_clean:[\"bool ob_end_clean(void)\",\"Clean the output buffer, and delete current output buffer\"],ob_end_flush:[\"bool ob_end_flush(void)\",\"Flush (send) the output buffer, and delete current output buffer\"],ob_flush:[\"bool ob_flush(void)\",\"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"],ob_get_clean:[\"bool ob_get_clean(void)\",\"Get current buffer contents and delete current output buffer\"],ob_get_contents:[\"string ob_get_contents(void)\",\"Return the contents of the output buffer\"],ob_get_flush:[\"bool ob_get_flush(void)\",\"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"],ob_get_length:[\"int ob_get_length(void)\",\"Return the length of the output buffer\"],ob_get_level:[\"int ob_get_level(void)\",\"Return the nesting level of the output buffer\"],ob_get_status:[\"false|array ob_get_status([bool full_status])\",\"Return the status of the active or all output buffers\"],ob_gzhandler:[\"string ob_gzhandler(string str, int mode)\",\"Encode str based on accept-encoding setting - designed to be called from ob_start()\"],ob_iconv_handler:[\"string ob_iconv_handler(string contents, int status)\",\"Returns str in output buffer converted to the iconv.output_encoding character set\"],ob_implicit_flush:[\"void ob_implicit_flush([int flag])\",\"Turn implicit flush on/off and is equivalent to calling flush() after every output call\"],ob_list_handlers:[\"false|array ob_list_handlers()\",\"*  List all output_buffers in an array\"],ob_start:[\"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\"Turn on Output Buffering (specifying an optional output handler).\"],oci_bind_array_by_name:[\"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\"Bind a PHP array to an Oracle PL/SQL type by name\"],oci_bind_by_name:[\"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\"Bind a PHP variable to an Oracle placeholder by name\"],oci_cancel:[\"bool oci_cancel(resource stmt)\",\"Cancel reading from a cursor\"],oci_close:[\"bool oci_close(resource connection)\",\"Disconnect from database\"],oci_collection_append:[\"bool oci_collection_append(string value)\",\"Append an object to the collection\"],oci_collection_assign:[\"bool oci_collection_assign(object from)\",\"Assign a collection from another existing collection\"],oci_collection_element_assign:[\"bool oci_collection_element_assign(int index, string val)\",\"Assign element val to collection at index ndx\"],oci_collection_element_get:[\"string oci_collection_element_get(int ndx)\",\"Retrieve the value at collection index ndx\"],oci_collection_max:[\"int oci_collection_max()\",\"Return the max value of a collection. For a varray this is the maximum length of the array\"],oci_collection_size:[\"int oci_collection_size()\",\"Return the size of a collection\"],oci_collection_trim:[\"bool oci_collection_trim(int num)\",\"Trim num elements from the end of a collection\"],oci_commit:[\"bool oci_commit(resource connection)\",\"Commit the current context\"],oci_connect:[\"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_define_by_name:[\"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\"Define a PHP variable to an Oracle column by name\"],oci_error:[\"array oci_error([resource stmt|connection|global])\",\"Return the last error of stmt|connection|global. If no error happened returns false.\"],oci_execute:[\"bool oci_execute(resource stmt [, int mode])\",\"Execute a parsed statement\"],oci_fetch:[\"bool oci_fetch(resource stmt)\",\"Prepare a new row of data for reading\"],oci_fetch_all:[\"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\"Fetch all rows of result data into an array\"],oci_fetch_array:[\"array oci_fetch_array( resource stmt [, int mode ])\",\"Fetch a result row as an array\"],oci_fetch_assoc:[\"array oci_fetch_assoc( resource stmt )\",\"Fetch a result row as an associative array\"],oci_fetch_object:[\"object oci_fetch_object( resource stmt )\",\"Fetch a result row as an object\"],oci_fetch_row:[\"array oci_fetch_row( resource stmt )\",\"Fetch a result row as an enumerated array\"],oci_field_is_null:[\"bool oci_field_is_null(resource stmt, int col)\",\"Tell whether a column is NULL\"],oci_field_name:[\"string oci_field_name(resource stmt, int col)\",\"Tell the name of a column\"],oci_field_precision:[\"int oci_field_precision(resource stmt, int col)\",\"Tell the precision of a column\"],oci_field_scale:[\"int oci_field_scale(resource stmt, int col)\",\"Tell the scale of a column\"],oci_field_size:[\"int oci_field_size(resource stmt, int col)\",\"Tell the maximum data size of a column\"],oci_field_type:[\"mixed oci_field_type(resource stmt, int col)\",\"Tell the data type of a column\"],oci_field_type_raw:[\"int oci_field_type_raw(resource stmt, int col)\",\"Tell the raw oracle data type of a column\"],oci_free_collection:[\"bool oci_free_collection()\",\"Deletes collection object\"],oci_free_descriptor:[\"bool oci_free_descriptor()\",\"Deletes large object description\"],oci_free_statement:[\"bool oci_free_statement(resource stmt)\",\"Free all resources associated with a statement\"],oci_internal_debug:[\"void oci_internal_debug(int onoff)\",\"Toggle internal debugging output for the OCI extension\"],oci_lob_append:[\"bool oci_lob_append( object lob )\",\"Appends data from a LOB to another LOB\"],oci_lob_close:[\"bool oci_lob_close()\",\"Closes lob descriptor\"],oci_lob_copy:[\"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\"Copies data from a LOB to another LOB\"],oci_lob_eof:[\"bool oci_lob_eof()\",\"Checks if EOF is reached\"],oci_lob_erase:[\"int oci_lob_erase( [ int offset [, int length ] ] )\",\"Erases a specified portion of the internal LOB, starting at a specified offset\"],oci_lob_export:[\"bool oci_lob_export([string filename [, int start [, int length]]])\",\"Writes a large object into a file\"],oci_lob_flush:[\"bool oci_lob_flush( [ int flag ] )\",\"Flushes the LOB buffer\"],oci_lob_import:[\"bool oci_lob_import( string filename )\",\"Loads file into a LOB\"],oci_lob_is_equal:[\"bool oci_lob_is_equal( object lob1, object lob2 )\",\"Tests to see if two LOB/FILE locators are equal\"],oci_lob_load:[\"string oci_lob_load()\",\"Loads a large object\"],oci_lob_read:[\"string oci_lob_read( int length )\",\"Reads particular part of a large object\"],oci_lob_rewind:[\"bool oci_lob_rewind()\",\"Rewind pointer of a LOB\"],oci_lob_save:[\"bool oci_lob_save( string data [, int offset ])\",\"Saves a large object\"],oci_lob_seek:[\"bool oci_lob_seek( int offset [, int whence ])\",\"Moves the pointer of a LOB\"],oci_lob_size:[\"int oci_lob_size()\",\"Returns size of a large object\"],oci_lob_tell:[\"int oci_lob_tell()\",\"Tells LOB pointer position\"],oci_lob_truncate:[\"bool oci_lob_truncate( [ int length ])\",\"Truncates a LOB\"],oci_lob_write:[\"int oci_lob_write( string string [, int length ])\",\"Writes data to current position of a LOB\"],oci_lob_write_temporary:[\"bool oci_lob_write_temporary(string var [, int lob_type])\",\"Writes temporary blob\"],oci_new_collection:[\"object oci_new_collection(resource connection, string tdo [, string schema])\",\"Initialize a new collection\"],oci_new_connect:[\"resource oci_new_connect(string user, string pass [, string db])\",\"Connect to an Oracle database and log on. Returns a new session.\"],oci_new_cursor:[\"resource oci_new_cursor(resource connection)\",\"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"],oci_new_descriptor:[\"object oci_new_descriptor(resource connection [, int type])\",\"Initialize a new empty descriptor LOB/FILE (LOB is default)\"],oci_num_fields:[\"int oci_num_fields(resource stmt)\",\"Return the number of result columns in a statement\"],oci_num_rows:[\"int oci_num_rows(resource stmt)\",\"Return the row count of an OCI statement\"],oci_parse:[\"resource oci_parse(resource connection, string query)\",\"Parse a query and return a statement\"],oci_password_change:[\"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\"Changes the password of an account\"],oci_pconnect:[\"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"],oci_result:[\"string oci_result(resource stmt, mixed column)\",\"Return a single column of result data\"],oci_rollback:[\"bool oci_rollback(resource connection)\",\"Rollback the current context\"],oci_server_version:[\"string oci_server_version(resource connection)\",\"Return a string containing server version information\"],oci_set_action:[\"bool oci_set_action(resource connection, string value)\",\"Sets the action attribute on the connection\"],oci_set_client_identifier:[\"bool oci_set_client_identifier(resource connection, string value)\",\"Sets the client identifier attribute on the connection\"],oci_set_client_info:[\"bool oci_set_client_info(resource connection, string value)\",\"Sets the client info attribute on the connection\"],oci_set_edition:[\"bool oci_set_edition(string value)\",\"Sets the edition attribute for all subsequent connections created\"],oci_set_module_name:[\"bool oci_set_module_name(resource connection, string value)\",\"Sets the module attribute on the connection\"],oci_set_prefetch:[\"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"],oci_statement_type:[\"string oci_statement_type(resource stmt)\",\"Return the query type of an OCI statement\"],ocifetchinto:[\"int ocifetchinto(resource stmt, array &output [, int mode])\",\"Fetch a row of result data into an array\"],ocigetbufferinglob:[\"bool ocigetbufferinglob()\",\"Returns current state of buffering for a LOB\"],ocisetbufferinglob:[\"bool ocisetbufferinglob( boolean flag )\",\"Enables/disables buffering for a LOB\"],octdec:[\"int octdec(string octal_number)\",\"Returns the decimal equivalent of an octal string\"],odbc_autocommit:[\"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\"Toggle autocommit mode or get status\"],odbc_binmode:[\"bool odbc_binmode(int result_id, int mode)\",\"Handle binary column data\"],odbc_close:[\"void odbc_close(resource connection_id)\",\"Close an ODBC connection\"],odbc_close_all:[\"void odbc_close_all(void)\",\"Close all ODBC connections\"],odbc_columnprivileges:[\"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"],odbc_columns:[\"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\"Returns a result identifier that can be used to fetch a list of column names in specified tables\"],odbc_commit:[\"bool odbc_commit(resource connection_id)\",\"Commit an ODBC transaction\"],odbc_connect:[\"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\"Connect to a datasource\"],odbc_cursor:[\"string odbc_cursor(resource result_id)\",\"Get cursor name\"],odbc_data_source:[\"array odbc_data_source(resource connection_id, int fetch_type)\",\"Return information about the currently connected data source\"],odbc_error:[\"string odbc_error([resource connection_id])\",\"Get the last error code\"],odbc_errormsg:[\"string odbc_errormsg([resource connection_id])\",\"Get the last error message\"],odbc_exec:[\"resource odbc_exec(resource connection_id, string query [, int flags])\",\"Prepare and execute an SQL statement\"],odbc_execute:[\"bool odbc_execute(resource result_id [, array parameters_array])\",\"Execute a prepared statement\"],odbc_fetch_array:[\"array odbc_fetch_array(int result [, int rownumber])\",\"Fetch a result row as an associative array\"],odbc_fetch_into:[\"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\"Fetch one result row into an array\"],odbc_fetch_object:[\"object odbc_fetch_object(int result [, int rownumber])\",\"Fetch a result row as an object\"],odbc_fetch_row:[\"bool odbc_fetch_row(resource result_id [, int row_number])\",\"Fetch a row\"],odbc_field_len:[\"int odbc_field_len(resource result_id, int field_number)\",\"Get the length (precision) of a column\"],odbc_field_name:[\"string odbc_field_name(resource result_id, int field_number)\",\"Get a column name\"],odbc_field_num:[\"int odbc_field_num(resource result_id, string field_name)\",\"Return column number\"],odbc_field_scale:[\"int odbc_field_scale(resource result_id, int field_number)\",\"Get the scale of a column\"],odbc_field_type:[\"string odbc_field_type(resource result_id, int field_number)\",\"Get the datatype of a column\"],odbc_foreignkeys:[\"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"],odbc_free_result:[\"bool odbc_free_result(resource result_id)\",\"Free resources associated with a result\"],odbc_gettypeinfo:[\"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\"Returns a result identifier containing information about data types supported by the data source\"],odbc_longreadlen:[\"bool odbc_longreadlen(int result_id, int length)\",\"Handle LONG columns\"],odbc_next_result:[\"bool odbc_next_result(resource result_id)\",\"Checks if multiple results are avaiable\"],odbc_num_fields:[\"int odbc_num_fields(resource result_id)\",\"Get number of columns in a result\"],odbc_num_rows:[\"int odbc_num_rows(resource result_id)\",\"Get number of rows in a result\"],odbc_pconnect:[\"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\"Establish a persistent connection to a datasource\"],odbc_prepare:[\"resource odbc_prepare(resource connection_id, string query)\",\"Prepares a statement for execution\"],odbc_primarykeys:[\"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\"Returns a result identifier listing the column names that comprise the primary key for a table\"],odbc_procedurecolumns:[\"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"],odbc_procedures:[\"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\"Returns a result identifier containg the list of procedure names in a datasource\"],odbc_result:[\"mixed odbc_result(resource result_id, mixed field)\",\"Get result data\"],odbc_result_all:[\"int odbc_result_all(resource result_id [, string format])\",\"Print result as HTML table\"],odbc_rollback:[\"bool odbc_rollback(resource connection_id)\",\"Rollback a transaction\"],odbc_setoption:[\"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\"Sets connection or statement options\"],odbc_specialcolumns:[\"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"],odbc_statistics:[\"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"],odbc_tableprivileges:[\"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\"Returns a result identifier containing a list of tables and the privileges associated with each table\"],odbc_tables:[\"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\"Call the SQLTables function\"],opendir:[\"mixed opendir(string path[, resource context])\",\"Open a directory and return a dir_handle\"],openlog:[\"bool openlog(string ident, int option, int facility)\",\"Open connection to system logger\"],openssl_csr_export:[\"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\"Exports a CSR to file or a var\"],openssl_csr_export_to_file:[\"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\"Exports a CSR to file\"],openssl_csr_get_public_key:[\"mixed openssl_csr_get_public_key(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_get_subject:[\"mixed openssl_csr_get_subject(mixed csr)\",\"Returns the subject of a CERT or FALSE on error\"],openssl_csr_new:[\"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\"Generates a privkey and CSR\"],openssl_csr_sign:[\"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\"Signs a cert with another CERT\"],openssl_decrypt:[\"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\"Takes raw or base64 encoded string and dectupt it using given method and key\"],openssl_dh_compute_key:[\"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\"Computes shared sicret for public value of remote DH key and local DH key\"],openssl_digest:[\"string openssl_digest(string data, string method [, bool raw_output=false])\",\"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"],openssl_encrypt:[\"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\"Encrypts given data with given method and key, returns raw or base64 encoded string\"],openssl_error_string:[\"mixed openssl_error_string(void)\",\"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"],openssl_get_cipher_methods:[\"array openssl_get_cipher_methods([bool aliases = false])\",\"Return array of available cipher methods\"],openssl_get_md_methods:[\"array openssl_get_md_methods([bool aliases = false])\",\"Return array of available digest methods\"],openssl_open:[\"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\"Opens data\"],openssl_pkcs12_export:[\"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS12 to a var\"],openssl_pkcs12_export_to_file:[\"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\"Creates and exports a PKCS to file\"],openssl_pkcs12_read:[\"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\"Parses a PKCS12 to an array\"],openssl_pkcs7_decrypt:[\"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\"Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"],openssl_pkcs7_encrypt:[\"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"],openssl_pkcs7_sign:[\"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\"Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"],openssl_pkcs7_verify:[\"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"],openssl_pkey_export:[\"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\"Gets an exportable representation of a key into a string or file\"],openssl_pkey_export_to_file:[\"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\"Gets an exportable representation of a key into a file\"],openssl_pkey_free:[\"void openssl_pkey_free(int key)\",\"Frees a key\"],openssl_pkey_get_details:[\"resource openssl_pkey_get_details(resource key)\",\"returns an array with the key details (bits, pkey, type)\"],openssl_pkey_get_private:[\"int openssl_pkey_get_private(string key [, string passphrase])\",\"Gets private keys\"],openssl_pkey_get_public:[\"int openssl_pkey_get_public(mixed cert)\",\"Gets public key from X.509 certificate\"],openssl_pkey_new:[\"resource openssl_pkey_new([array configargs])\",\"Generates a new private key\"],openssl_private_decrypt:[\"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\"Decrypts data with private key\"],openssl_private_encrypt:[\"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with private key\"],openssl_public_decrypt:[\"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\"Decrypts data with public key\"],openssl_public_encrypt:[\"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\"Encrypts data with public key\"],openssl_random_pseudo_bytes:[\"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\"Returns a string of the length specified filled with random pseudo bytes\"],openssl_seal:[\"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\"Seals data\"],openssl_sign:[\"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\"Signs data\"],openssl_verify:[\"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\"Verifys data\"],openssl_x509_check_private_key:[\"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\"Checks if a private key corresponds to a CERT\"],openssl_x509_checkpurpose:[\"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"],openssl_x509_export:[\"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_export_to_file:[\"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\"Exports a CERT to file or a var\"],openssl_x509_free:[\"void openssl_x509_free(resource x509)\",\"Frees X.509 certificates\"],openssl_x509_parse:[\"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\"Returns an array of the fields/values of the CERT\"],openssl_x509_read:[\"resource openssl_x509_read(mixed cert)\",\"Reads X.509 certificates\"],ord:[\"int ord(string character)\",\"Returns ASCII value of character\"],output_add_rewrite_var:[\"bool output_add_rewrite_var(string name, string value)\",\"Add URL rewriter values\"],output_reset_rewrite_vars:[\"bool output_reset_rewrite_vars(void)\",\"Reset(clear) URL rewriter values\"],pack:[\"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\"Takes one or more arguments and packs them into a binary string according to the format argument\"],parse_ini_file:[\"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\"Parse configuration file\"],parse_ini_string:[\"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\"Parse configuration string\"],parse_locale:[\"static array parse_locale($locale)\",\"* parses a locale-id into an array the different parts of it\"],parse_str:[\"void parse_str(string encoded_string [, array result])\",\"Parses GET/POST/COOKIE data and sets global variables\"],parse_url:[\"mixed parse_url(string url, [int url_component])\",\"Parse a URL and return its components\"],passthru:[\"void passthru(string command [, int &return_value])\",\"Execute an external program and display raw output\"],pathinfo:[\"array pathinfo(string path[, int options])\",\"Returns information about a certain string\"],pclose:[\"int pclose(resource fp)\",\"Close a file pointer opened by popen()\"],pcnlt_sigwaitinfo:[\"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\"Synchronously wait for queued signals\"],pcntl_alarm:[\"int pcntl_alarm(int seconds)\",\"Set an alarm clock for delivery of a signal\"],pcntl_exec:[\"bool pcntl_exec(string path [, array args [, array envs]])\",\"Executes specified program in current process space as defined by exec(2)\"],pcntl_fork:[\"int pcntl_fork(void)\",\"Forks the currently running process following the same behavior as the UNIX fork() system call\"],pcntl_getpriority:[\"int pcntl_getpriority([int pid [, int process_identifier]])\",\"Get the priority of any process\"],pcntl_setpriority:[\"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\"Change the priority of any process\"],pcntl_signal:[\"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\"Assigns a system signal handler to a PHP function\"],pcntl_signal_dispatch:[\"bool pcntl_signal_dispatch()\",\"Dispatch signals to signal handlers\"],pcntl_sigprocmask:[\"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\"Examine and change blocked signals\"],pcntl_sigtimedwait:[\"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\"Wait for queued signals\"],pcntl_wait:[\"int pcntl_wait(int &status)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_waitpid:[\"int pcntl_waitpid(int pid, int &status, int options)\",\"Waits on or returns the status of a forked child as defined by the waitpid() system call\"],pcntl_wexitstatus:[\"int pcntl_wexitstatus(int status)\",\"Returns the status code of a child's exit\"],pcntl_wifexited:[\"bool pcntl_wifexited(int status)\",\"Returns true if the child status code represents a successful exit\"],pcntl_wifsignaled:[\"bool pcntl_wifsignaled(int status)\",\"Returns true if the child status code represents a process that was terminated due to a signal\"],pcntl_wifstopped:[\"bool pcntl_wifstopped(int status)\",\"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"],pcntl_wstopsig:[\"int pcntl_wstopsig(int status)\",\"Returns the number of the signal that caused the process to stop who's status code is passed\"],pcntl_wtermsig:[\"int pcntl_wtermsig(int status)\",\"Returns the number of the signal that terminated the process who's status code is passed\"],pdo_drivers:[\"array pdo_drivers()\",\"Return array of available PDO drivers\"],pfsockopen:[\"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\"Open persistent Internet or Unix domain socket connection\"],pg_affected_rows:[\"int pg_affected_rows(resource result)\",\"Returns the number of affected tuples\"],pg_cancel_query:[\"bool pg_cancel_query(resource connection)\",\"Cancel request\"],pg_client_encoding:[\"string pg_client_encoding([resource connection])\",\"Get the current client encoding\"],pg_close:[\"bool pg_close([resource connection])\",\"Close a PostgreSQL connection\"],pg_connect:[\"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a PostgreSQL connection\"],pg_connection_busy:[\"bool pg_connection_busy(resource connection)\",\"Get connection is busy or not\"],pg_connection_reset:[\"bool pg_connection_reset(resource connection)\",\"Reset connection (reconnect)\"],pg_connection_status:[\"int pg_connection_status(resource connnection)\",\"Get connection status\"],pg_convert:[\"array pg_convert(resource db, string table, array values[, int options])\",\"Check and convert values for PostgreSQL SQL statement\"],pg_copy_from:[\"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\"Copy table from array\"],pg_copy_to:[\"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\"Copy table to array\"],pg_dbname:[\"string pg_dbname([resource connection])\",\"Get the database name\"],pg_delete:[\"mixed pg_delete(resource db, string table, array ids[, int options])\",\"Delete records has ids (id=>value)\"],pg_end_copy:[\"bool pg_end_copy([resource connection])\",\"Sync with backend. Completes the Copy command\"],pg_escape_bytea:[\"string pg_escape_bytea([resource connection,] string data)\",\"Escape binary for bytea type\"],pg_escape_string:[\"string pg_escape_string([resource connection,] string data)\",\"Escape string for text/char type\"],pg_execute:[\"resource pg_execute([resource connection,] string stmtname, array params)\",\"Execute a prepared query\"],pg_fetch_all:[\"array pg_fetch_all(resource result)\",\"Fetch all rows into array\"],pg_fetch_all_columns:[\"array pg_fetch_all_columns(resource result [, int column_number])\",\"Fetch all rows into array\"],pg_fetch_array:[\"array pg_fetch_array(resource result [, int row [, int result_type]])\",\"Fetch a row as an array\"],pg_fetch_assoc:[\"array pg_fetch_assoc(resource result [, int row])\",\"Fetch a row as an assoc array\"],pg_fetch_object:[\"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\"Fetch a row as an object\"],pg_fetch_result:[\"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\"Returns values from a result identifier\"],pg_fetch_row:[\"array pg_fetch_row(resource result [, int row [, int result_type]])\",\"Get a row as an enumerated array\"],pg_field_is_null:[\"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\"Test if a field is NULL\"],pg_field_name:[\"string pg_field_name(resource result, int field_number)\",\"Returns the name of the field\"],pg_field_num:[\"int pg_field_num(resource result, string field_name)\",\"Returns the field number of the named field\"],pg_field_prtlen:[\"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\"Returns the printed length\"],pg_field_size:[\"int pg_field_size(resource result, int field_number)\",\"Returns the internal size of the field\"],pg_field_table:[\"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\"Returns the name of the table field belongs to, or table's oid if oid_only is true\"],pg_field_type:[\"string pg_field_type(resource result, int field_number)\",\"Returns the type name for the given field\"],pg_field_type_oid:[\"string pg_field_type_oid(resource result, int field_number)\",\"Returns the type oid for the given field\"],pg_free_result:[\"bool pg_free_result(resource result)\",\"Free result memory\"],pg_get_notify:[\"array pg_get_notify([resource connection[, result_type]])\",\"Get asynchronous notification\"],pg_get_pid:[\"int pg_get_pid([resource connection)\",\"Get backend(server) pid\"],pg_get_result:[\"resource pg_get_result(resource connection)\",\"Get asynchronous query result\"],pg_host:[\"string pg_host([resource connection])\",\"Returns the host name associated with the connection\"],pg_insert:[\"mixed pg_insert(resource db, string table, array values[, int options])\",\"Insert values (filed=>value) to table\"],pg_last_error:[\"string pg_last_error([resource connection])\",\"Get the error message string\"],pg_last_notice:[\"string pg_last_notice(resource connection)\",\"Returns the last notice set by the backend\"],pg_last_oid:[\"string pg_last_oid(resource result)\",\"Returns the last object identifier\"],pg_lo_close:[\"bool pg_lo_close(resource large_object)\",\"Close a large object\"],pg_lo_create:[\"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\"Create a large object\"],pg_lo_export:[\"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\"Export large object direct to filesystem\"],pg_lo_import:[\"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\"Import large object direct from filesystem\"],pg_lo_open:[\"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\"Open a large object and return fd\"],pg_lo_read:[\"string pg_lo_read(resource large_object [, int len])\",\"Read a large object\"],pg_lo_read_all:[\"int pg_lo_read_all(resource large_object)\",\"Read a large object and send straight to browser\"],pg_lo_seek:[\"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\"Seeks position of large object\"],pg_lo_tell:[\"int pg_lo_tell(resource large_object)\",\"Returns current position of large object\"],pg_lo_unlink:[\"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\"Delete a large object\"],pg_lo_write:[\"int pg_lo_write(resource large_object, string buf [, int len])\",\"Write a large object\"],pg_meta_data:[\"array pg_meta_data(resource db, string table)\",\"Get meta_data\"],pg_num_fields:[\"int pg_num_fields(resource result)\",\"Return the number of fields in the result\"],pg_num_rows:[\"int pg_num_rows(resource result)\",\"Return the number of rows in the result\"],pg_options:[\"string pg_options([resource connection])\",\"Get the options associated with the connection\"],pg_parameter_status:[\"string|false pg_parameter_status([resource connection,] string param_name)\",\"Returns the value of a server parameter\"],pg_pconnect:[\"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\"Open a persistent PostgreSQL connection\"],pg_ping:[\"bool pg_ping([resource connection])\",\"Ping database. If connection is bad, try to reconnect.\"],pg_port:[\"int pg_port([resource connection])\",\"Return the port number associated with the connection\"],pg_prepare:[\"resource pg_prepare([resource connection,] string stmtname, string query)\",\"Prepare a query for future execution\"],pg_put_line:[\"bool pg_put_line([resource connection,] string query)\",\"Send null-terminated string to backend server\"],pg_query:[\"resource pg_query([resource connection,] string query)\",\"Execute a query\"],pg_query_params:[\"resource pg_query_params([resource connection,] string query, array params)\",\"Execute a query\"],pg_result_error:[\"string pg_result_error(resource result)\",\"Get error message associated with result\"],pg_result_error_field:[\"string pg_result_error_field(resource result, int fieldcode)\",\"Get error message field associated with result\"],pg_result_seek:[\"bool pg_result_seek(resource result, int offset)\",\"Set internal row offset\"],pg_result_status:[\"mixed pg_result_status(resource result[, long result_type])\",\"Get status of query result\"],pg_select:[\"mixed pg_select(resource db, string table, array ids[, int options])\",\"Select records that has ids (id=>value)\"],pg_send_execute:[\"bool pg_send_execute(resource connection, string stmtname, array params)\",\"Executes prevriously prepared stmtname asynchronously\"],pg_send_prepare:[\"bool pg_send_prepare(resource connection, string stmtname, string query)\",\"Asynchronously prepare a query for future execution\"],pg_send_query:[\"bool pg_send_query(resource connection, string query)\",\"Send asynchronous query\"],pg_send_query_params:[\"bool pg_send_query_params(resource connection, string query, array params)\",\"Send asynchronous parameterized query\"],pg_set_client_encoding:[\"int pg_set_client_encoding([resource connection,] string encoding)\",\"Set client encoding\"],pg_set_error_verbosity:[\"int pg_set_error_verbosity([resource connection,] int verbosity)\",\"Set error verbosity\"],pg_trace:[\"bool pg_trace(string filename [, string mode [, resource connection]])\",\"Enable tracing a PostgreSQL connection\"],pg_transaction_status:[\"int pg_transaction_status(resource connnection)\",\"Get transaction status\"],pg_tty:[\"string pg_tty([resource connection])\",\"Return the tty name associated with the connection\"],pg_unescape_bytea:[\"string pg_unescape_bytea(string data)\",\"Unescape binary for bytea type\"],pg_untrace:[\"bool pg_untrace([resource connection])\",\"Disable tracing of a PostgreSQL connection\"],pg_update:[\"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\"Update table using values (field=>value) and ids (id=>value)\"],pg_version:[\"array pg_version([resource connection])\",\"Returns an array with client, protocol and server version (when available)\"],php_egg_logo_guid:[\"string php_egg_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_ini_loaded_file:[\"string php_ini_loaded_file(void)\",\"Return the actual loaded ini filename\"],php_ini_scanned_files:[\"string php_ini_scanned_files(void)\",\"Return comma-separated string of .ini files parsed from the additional ini dir\"],php_logo_guid:[\"string php_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_real_logo_guid:[\"string php_real_logo_guid(void)\",\"Return the special ID used to request the PHP logo in phpinfo screens\"],php_sapi_name:[\"string php_sapi_name(void)\",\"Return the current SAPI module name\"],php_snmpv3:[\"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"],php_strip_whitespace:[\"string php_strip_whitespace(string file_name)\",\"Return source with stripped comments and whitespace\"],php_uname:[\"string php_uname(void)\",\"Return information about the system PHP was built on\"],phpcredits:[\"void phpcredits([int flag])\",\"Prints the list of people who've contributed to the PHP project\"],phpinfo:[\"void phpinfo([int what])\",\"Output a page of useful information about PHP and the current request\"],phpversion:[\"string phpversion([string extension])\",\"Return the current PHP version\"],pi:[\"float pi(void)\",\"Returns an approximation of pi\"],png2wbmp:[\"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\"Convert PNG image to WBMP image\"],popen:[\"resource popen(string command, string mode)\",\"Execute a command and open either a read or a write pipe to it\"],posix_access:[\"bool posix_access(string file [, int mode])\",\"Determine accessibility of a file (POSIX.1 5.6.3)\"],posix_ctermid:[\"string posix_ctermid(void)\",\"Generate terminal path name (POSIX.1, 4.7.1)\"],posix_get_last_error:[\"int posix_get_last_error(void)\",\"Retrieve the error number set by the last posix function which failed.\"],posix_getcwd:[\"string posix_getcwd(void)\",\"Get working directory pathname (POSIX.1, 5.2.2)\"],posix_getegid:[\"int posix_getegid(void)\",\"Get the current effective group id (POSIX.1, 4.2.1)\"],posix_geteuid:[\"int posix_geteuid(void)\",\"Get the current effective user id (POSIX.1, 4.2.1)\"],posix_getgid:[\"int posix_getgid(void)\",\"Get the current group id (POSIX.1, 4.2.1)\"],posix_getgrgid:[\"array posix_getgrgid(long gid)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgrnam:[\"array posix_getgrnam(string groupname)\",\"Group database access (POSIX.1, 9.2.1)\"],posix_getgroups:[\"array posix_getgroups(void)\",\"Get supplementary group id's (POSIX.1, 4.2.3)\"],posix_getlogin:[\"string posix_getlogin(void)\",\"Get user name (POSIX.1, 4.2.4)\"],posix_getpgid:[\"int posix_getpgid(void)\",\"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"],posix_getpgrp:[\"int posix_getpgrp(void)\",\"Get current process group id (POSIX.1, 4.3.1)\"],posix_getpid:[\"int posix_getpid(void)\",\"Get the current process id (POSIX.1, 4.1.1)\"],posix_getppid:[\"int posix_getppid(void)\",\"Get the parent process id (POSIX.1, 4.1.1)\"],posix_getpwnam:[\"array posix_getpwnam(string groupname)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getpwuid:[\"array posix_getpwuid(long uid)\",\"User database access (POSIX.1, 9.2.2)\"],posix_getrlimit:[\"array posix_getrlimit(void)\",\"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"],posix_getsid:[\"int posix_getsid(void)\",\"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"],posix_getuid:[\"int posix_getuid(void)\",\"Get the current user id (POSIX.1, 4.2.1)\"],posix_initgroups:[\"bool posix_initgroups(string name, int base_group_id)\",\"Calculate the group access list for the user specified in name.\"],posix_isatty:[\"bool posix_isatty(int fd)\",\"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"],posix_kill:[\"bool posix_kill(int pid, int sig)\",\"Send a signal to a process (POSIX.1, 3.3.2)\"],posix_mkfifo:[\"bool posix_mkfifo(string pathname, int mode)\",\"Make a FIFO special file (POSIX.1, 5.4.2)\"],posix_mknod:[\"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\"Make a special or ordinary file (POSIX.1)\"],posix_setegid:[\"bool posix_setegid(long uid)\",\"Set effective group id\"],posix_seteuid:[\"bool posix_seteuid(long uid)\",\"Set effective user id\"],posix_setgid:[\"bool posix_setgid(int uid)\",\"Set group id (POSIX.1, 4.2.2)\"],posix_setpgid:[\"bool posix_setpgid(int pid, int pgid)\",\"Set process group id for job control (POSIX.1, 4.3.3)\"],posix_setsid:[\"int posix_setsid(void)\",\"Create session and set process group id (POSIX.1, 4.3.2)\"],posix_setuid:[\"bool posix_setuid(long uid)\",\"Set user id (POSIX.1, 4.2.2)\"],posix_strerror:[\"string posix_strerror(int errno)\",\"Retrieve the system error message associated with the given errno.\"],posix_times:[\"array posix_times(void)\",\"Get process times (POSIX.1, 4.5.2)\"],posix_ttyname:[\"string posix_ttyname(int fd)\",\"Determine terminal device name (POSIX.1, 4.7.2)\"],posix_uname:[\"array posix_uname(void)\",\"Get system name (POSIX.1, 4.4.1)\"],pow:[\"number pow(number base, number exponent)\",\"Returns base raised to the power of exponent. Returns integer result when possible\"],preg_filter:[\"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement and only return matches.\"],preg_grep:[\"array preg_grep(string regex, array input [, int flags])\",\"Searches array and returns entries which match regex\"],preg_last_error:[\"int preg_last_error()\",\"Returns the error code of the last regexp execution.\"],preg_match:[\"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\"Perform a Perl-style regular expression match\"],preg_match_all:[\"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\"Perform a Perl-style global regular expression match\"],preg_quote:[\"string preg_quote(string str [, string delim_char])\",\"Quote regular expression characters plus an optional character\"],preg_replace:[\"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement.\"],preg_replace_callback:[\"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\"Perform Perl-style regular expression replacement using replacement callback.\"],preg_split:[\"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\"Split string into an array using a perl-style regular expression as a delimiter\"],prev:[\"mixed prev(array array_arg)\",\"Move array argument's internal pointer to the previous element and return it\"],print:[\"int print(string arg)\",\"Output a string\"],print_r:[\"mixed print_r(mixed var [, bool return])\",\"Prints out or returns information about the specified variable\"],printf:[\"int printf(string format [, mixed arg1 [, mixed ...]])\",\"Output a formatted string\"],proc_close:[\"int proc_close(resource process)\",\"close a process opened by proc_open\"],proc_get_status:[\"array proc_get_status(resource process)\",\"get information about a process opened by proc_open\"],proc_nice:[\"bool proc_nice(int priority)\",\"Change the priority of the current process\"],proc_open:[\"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\"Run a process with more control over it's file descriptors\"],proc_terminate:[\"bool proc_terminate(resource process [, long signal])\",\"kill a process opened by proc_open\"],property_exists:[\"bool property_exists(mixed object_or_class, string property_name)\",\"Checks if the object or class has a property\"],pspell_add_to_personal:[\"bool pspell_add_to_personal(int pspell, string word)\",\"Adds a word to a personal list\"],pspell_add_to_session:[\"bool pspell_add_to_session(int pspell, string word)\",\"Adds a word to the current session\"],pspell_check:[\"bool pspell_check(int pspell, string word)\",\"Returns true if word is valid\"],pspell_clear_session:[\"bool pspell_clear_session(int pspell)\",\"Clears the current session\"],pspell_config_create:[\"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\"Create a new config to be used later to create a manager\"],pspell_config_data_dir:[\"bool pspell_config_data_dir(int conf, string directory)\",\"location of language data files\"],pspell_config_dict_dir:[\"bool pspell_config_dict_dir(int conf, string directory)\",\"location of the main word list\"],pspell_config_ignore:[\"bool pspell_config_ignore(int conf, int ignore)\",\"Ignore words <= n chars\"],pspell_config_mode:[\"bool pspell_config_mode(int conf, long mode)\",\"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"],pspell_config_personal:[\"bool pspell_config_personal(int conf, string personal)\",\"Use a personal dictionary for this config\"],pspell_config_repl:[\"bool pspell_config_repl(int conf, string repl)\",\"Use a personal dictionary with replacement pairs for this config\"],pspell_config_runtogether:[\"bool pspell_config_runtogether(int conf, bool runtogether)\",\"Consider run-together words as valid components\"],pspell_config_save_repl:[\"bool pspell_config_save_repl(int conf, bool save)\",\"Save replacement pairs when personal list is saved for this config\"],pspell_new:[\"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary\"],pspell_new_config:[\"int pspell_new_config(int config)\",\"Load a dictionary based on the given config\"],pspell_new_personal:[\"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\"Load a dictionary with a personal wordlist\"],pspell_save_wordlist:[\"bool pspell_save_wordlist(int pspell)\",\"Saves the current (personal) wordlist\"],pspell_store_replacement:[\"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\"Notify the dictionary of a user-selected replacement\"],pspell_suggest:[\"array pspell_suggest(int pspell, string word)\",\"Returns array of suggestions\"],putenv:[\"bool putenv(string setting)\",\"Set the value of an environment variable\"],quoted_printable_decode:[\"string quoted_printable_decode(string str)\",\"Convert a quoted-printable string to an 8 bit string\"],quoted_printable_encode:[\"string quoted_printable_encode(string str) */\",'PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \"s\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}'],quotemeta:[\"string quotemeta(string str)\",\"Quotes meta characters\"],rad2deg:[\"float rad2deg(float number)\",\"Converts the radian number to the equivalent number in degrees\"],rand:[\"int rand([int min, int max])\",\"Returns a random number\"],range:[\"array range(mixed low, mixed high[, int step])\",\"Create an array containing the range of integers or characters from low to high (inclusive)\"],rawurldecode:[\"string rawurldecode(string str)\",\"Decodes URL-encodes string\"],rawurlencode:[\"string rawurlencode(string str)\",\"URL-encodes string\"],readdir:[\"string readdir([resource dir_handle])\",\"Read directory entry from dir_handle\"],readfile:[\"int readfile(string filename [, bool use_include_path[, resource context]])\",\"Output a file or a URL\"],readgzfile:[\"int readgzfile(string filename [, int use_include_path])\",\"Output a .gz-file\"],readline:[\"string readline([string prompt])\",\"Reads a line\"],readline_add_history:[\"bool readline_add_history(string prompt)\",\"Adds a line to the history\"],readline_callback_handler_install:[\"void readline_callback_handler_install(string prompt, mixed callback)\",\"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"],readline_callback_handler_remove:[\"bool readline_callback_handler_remove()\",\"Removes a previously installed callback handler and restores terminal settings\"],readline_callback_read_char:[\"void readline_callback_read_char()\",\"Informs the readline callback interface that a character is ready for input\"],readline_clear_history:[\"bool readline_clear_history(void)\",\"Clears the history\"],readline_completion_function:[\"bool readline_completion_function(string funcname)\",\"Readline completion function?\"],readline_info:[\"mixed readline_info([string varname [, string newvalue]])\",\"Gets/sets various internal readline variables.\"],readline_list_history:[\"array readline_list_history(void)\",\"Lists the history\"],readline_on_new_line:[\"void readline_on_new_line(void)\",\"Inform readline that the cursor has moved to a new line\"],readline_read_history:[\"bool readline_read_history([string filename])\",\"Reads the history\"],readline_redisplay:[\"void readline_redisplay(void)\",\"Ask readline to redraw the display\"],readline_write_history:[\"bool readline_write_history([string filename])\",\"Writes the history\"],readlink:[\"string readlink(string filename)\",\"Return the target of a symbolic link\"],realpath:[\"string realpath(string path)\",\"Return the resolved path\"],realpath_cache_get:[\"bool realpath_cache_get()\",\"Get current size of realpath cache\"],realpath_cache_size:[\"bool realpath_cache_size()\",\"Get current size of realpath cache\"],recode_file:[\"bool recode_file(string request, resource input, resource output)\",\"Recode file input into file output according to request\"],recode_string:[\"string recode_string(string request, string str)\",\"Recode string str according to request string\"],register_shutdown_function:[\"void register_shutdown_function(string function_name)\",\"Register a user-level function to be called on request termination\"],register_tick_function:[\"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\"Registers a tick callback function\"],rename:[\"bool rename(string old_name, string new_name[, resource context])\",\"Rename a file\"],require:[\"bool require(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],require_once:[\"bool require_once(string path)\",\"Includes and evaluates the specified file, erroring if the file cannot be included\"],reset:[\"mixed reset(array array_arg)\",\"Set array argument's internal pointer to the first element and return it\"],restore_error_handler:[\"void restore_error_handler(void)\",\"Restores the previously defined error handler function\"],restore_exception_handler:[\"void restore_exception_handler(void)\",\"Restores the previously defined exception handler function\"],restore_include_path:[\"void restore_include_path()\",\"Restore the value of the include_path configuration option\"],rewind:[\"bool rewind(resource fp)\",\"Rewind the position of a file pointer\"],rewinddir:[\"void rewinddir([resource dir_handle])\",\"Rewind dir_handle back to the start\"],rmdir:[\"bool rmdir(string dirname[, resource context])\",\"Remove a directory\"],round:[\"float round(float number [, int precision [, int mode]])\",\"Returns the number rounded to specified precision\"],rsort:[\"bool rsort(array &array_arg [, int sort_flags])\",\"Sort an array in reverse order\"],rtrim:[\"string rtrim(string str [, string character_mask])\",\"Removes trailing whitespace\"],scandir:[\"array scandir(string dir [, int sorting_order [, resource context]])\",\"List files & directories inside the specified path\"],sem_acquire:[\"bool sem_acquire(resource id)\",\"Acquires the semaphore with the given id, blocking if necessary\"],sem_get:[\"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"],sem_release:[\"bool sem_release(resource id)\",\"Releases the semaphore with the given id\"],sem_remove:[\"bool sem_remove(resource id)\",\"Removes semaphore from Unix systems\"],serialize:[\"string serialize(mixed variable)\",\"Returns a string representation of variable (which can later be unserialized)\"],session_cache_expire:[\"int session_cache_expire([int new_cache_expire])\",\"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"],session_cache_limiter:[\"string session_cache_limiter([string new_cache_limiter])\",\"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"],session_decode:[\"bool session_decode(string data)\",\"Deserializes data and reinitializes the variables\"],session_destroy:[\"bool session_destroy(void)\",\"Destroy the current session and all data associated with it\"],session_encode:[\"string session_encode(void)\",\"Serializes the current setup and returns the serialized representation\"],session_get_cookie_params:[\"array session_get_cookie_params(void)\",\"Return the session cookie parameters\"],session_id:[\"string session_id([string newid])\",\"Return the current session id. If newid is given, the session id is replaced with newid\"],session_is_registered:[\"bool session_is_registered(string varname)\",\"Checks if a variable is registered in session\"],session_module_name:[\"string session_module_name([string newname])\",\"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"],session_name:[\"string session_name([string newname])\",\"Return the current session name. If newname is given, the session name is replaced with newname\"],session_regenerate_id:[\"bool session_regenerate_id([bool delete_old_session])\",\"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"],session_register:[\"bool session_register(mixed var_names [, mixed ...])\",\"Adds varname(s) to the list of variables which are freezed at the session end\"],session_save_path:[\"string session_save_path([string newname])\",\"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"],session_set_cookie_params:[\"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\"Set session cookie parameters\"],session_set_save_handler:[\"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\"Sets user-level functions\"],session_start:[\"bool session_start(void)\",\"Begin session - reinitializes freezed variables, registers browsers etc\"],session_unregister:[\"bool session_unregister(string varname)\",\"Removes varname from the list of variables which are freezed at the session end\"],session_unset:[\"void session_unset(void)\",\"Unset all registered variables\"],session_write_close:[\"void session_write_close(void)\",\"Write session data and end session\"],set_error_handler:[\"string set_error_handler(string error_handler [, int error_types])\",\"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"],set_exception_handler:[\"string set_exception_handler(callable exception_handler)\",\"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"],set_include_path:[\"string set_include_path(string new_include_path)\",\"Sets the include_path configuration option\"],set_magic_quotes_runtime:[\"bool set_magic_quotes_runtime(int new_setting)\",\"Set the current active configuration setting of magic_quotes_runtime and return previous\"],set_time_limit:[\"bool set_time_limit(int seconds)\",\"Sets the maximum time a script can run\"],setcookie:[\"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie\"],setlocale:[\"string setlocale(mixed category, string locale [, string ...])\",\"Set locale information\"],setrawcookie:[\"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\"Send a cookie with no url encoding of the value\"],settype:[\"bool settype(mixed var, string type)\",\"Set the type of the variable\"],sha1:[\"string sha1(string str [, bool raw_output])\",\"Calculate the sha1 hash of a string\"],sha1_file:[\"string sha1_file(string filename [, bool raw_output])\",\"Calculate the sha1 hash of given filename\"],shell_exec:[\"string shell_exec(string cmd)\",\"Execute command via shell and return complete output as string\"],shm_attach:[\"int shm_attach(int key [, int memsize [, int perm]])\",\"Creates or open a shared memory segment\"],shm_detach:[\"bool shm_detach(resource shm_identifier)\",\"Disconnects from shared memory segment\"],shm_get_var:[\"mixed shm_get_var(resource id, int variable_key)\",\"Returns a variable from shared memory\"],shm_has_var:[\"bool shm_has_var(resource id, int variable_key)\",\"Checks whether a specific entry exists\"],shm_put_var:[\"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\"Inserts or updates a variable in shared memory\"],shm_remove:[\"bool shm_remove(resource shm_identifier)\",\"Removes shared memory from Unix systems\"],shm_remove_var:[\"bool shm_remove_var(resource id, int variable_key)\",\"Removes variable from shared memory\"],shmop_close:[\"void shmop_close (int shmid)\",\"closes a shared memory segment\"],shmop_delete:[\"bool shmop_delete (int shmid)\",\"mark segment for deletion\"],shmop_open:[\"int shmop_open (int key, string flags, int mode, int size)\",\"gets and attaches a shared memory segment\"],shmop_read:[\"string shmop_read (int shmid, int start, int count)\",\"reads from a shm segment\"],shmop_size:[\"int shmop_size (int shmid)\",\"returns the shm size\"],shmop_write:[\"int shmop_write (int shmid, string data, int offset)\",\"writes to a shared memory segment\"],shuffle:[\"bool shuffle(array array_arg)\",\"Randomly shuffle the contents of an array\"],similar_text:[\"int similar_text(string str1, string str2 [, float percent])\",\"Calculates the similarity between two strings\"],simplexml_import_dom:[\"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\"Get a simplexml_element object from dom to allow for processing\"],simplexml_load_file:[\"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a filename and return a simplexml_element object to allow for processing\"],simplexml_load_string:[\"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\"Load a string and return a simplexml_element object to allow for processing\"],sin:[\"float sin(float number)\",\"Returns the sine of the number in radians\"],sinh:[\"float sinh(float number)\",\"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2\"],sleep:[\"void sleep(int seconds)\",\"Delay for a given number of seconds\"],smfi_addheader:[\"bool smfi_addheader(string headerf, string headerv)\",\"Adds a header to the current message.\"],smfi_addrcpt:[\"bool smfi_addrcpt(string rcpt)\",\"Add a recipient to the message envelope.\"],smfi_chgheader:[\"bool smfi_chgheader(string headerf, string headerv)\",\"Changes a header's value for the current message.\"],smfi_delrcpt:[\"bool smfi_delrcpt(string rcpt)\",\"Removes the named recipient from the current message's envelope.\"],smfi_getsymval:[\"string smfi_getsymval(string macro)\",\"Returns the value of the given macro or NULL if the macro is not defined.\"],smfi_replacebody:[\"bool smfi_replacebody(string body)\",\"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"],smfi_setflags:[\"void smfi_setflags(long flags)\",\"Sets the flags describing the actions the filter may take.\"],smfi_setreply:[\"bool smfi_setreply(string rcode, string xcode, string message)\",\"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"],smfi_settimeout:[\"void smfi_settimeout(long timeout)\",\"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"],snmp2_get:[\"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_getnext:[\"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmp2_real_walk:[\"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmp2_set:[\"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmp2_walk:[\"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],snmp3_get:[\"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_getnext:[\"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_real_walk:[\"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_set:[\"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp3_walk:[\"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\"Fetch the value of a SNMP object\"],snmp_get_quick_print:[\"bool snmp_get_quick_print(void)\",\"Return the current status of quick_print\"],snmp_get_valueretrieval:[\"int snmp_get_valueretrieval()\",\"Return the method how the SNMP values will be returned\"],snmp_read_mib:[\"int snmp_read_mib(string filename)\",\"Reads and parses a MIB file into the active MIB tree.\"],snmp_set_enum_print:[\"void snmp_set_enum_print(int enum_print)\",\"Return all values that are enums with their enum value instead of the raw integer\"],snmp_set_oid_output_format:[\"void snmp_set_oid_output_format(int oid_format)\",\"Set the OID output format.\"],snmp_set_quick_print:[\"void snmp_set_quick_print(int quick_print)\",\"Return all objects including their respective object id withing the specified one\"],snmp_set_valueretrieval:[\"void snmp_set_valueretrieval(int method)\",\"Specify the method how the SNMP values will be returned\"],snmpget:[\"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmpgetnext:[\"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\"Fetch a SNMP object\"],snmprealwalk:[\"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects including their respective object id withing the specified one\"],snmpset:[\"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\"Set the value of a SNMP object\"],snmpwalk:[\"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\"Return all objects under the specified object id\"],socket_accept:[\"resource socket_accept(resource socket)\",\"Accepts a connection on the listening socket fd\"],socket_bind:[\"bool socket_bind(resource socket, string addr [, int port])\",\"Binds an open socket to a listening port, port is only specified in AF_INET family.\"],socket_clear_error:[\"void socket_clear_error([resource socket])\",\"Clears the error on the socket or the last error code.\"],socket_close:[\"void socket_close(resource socket)\",\"Closes a file descriptor\"],socket_connect:[\"bool socket_connect(resource socket, string addr [, int port])\",\"Opens a connection to addr:port on the socket specified by socket\"],socket_create:[\"resource socket_create(int domain, int type, int protocol)\",\"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"],socket_create_listen:[\"resource socket_create_listen(int port[, int backlog])\",\"Opens a socket on port to accept connections\"],socket_create_pair:[\"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\"Creates a pair of indistinguishable sockets and stores them in fds.\"],socket_get_option:[\"mixed socket_get_option(resource socket, int level, int optname)\",\"Gets socket options for the socket\"],socket_getpeername:[\"bool socket_getpeername(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_getsockname:[\"bool socket_getsockname(resource socket, string &addr[, int &port])\",\"Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.\"],socket_last_error:[\"int socket_last_error([resource socket])\",\"Returns the last socket error (either the last used or the provided socket resource)\"],socket_listen:[\"bool socket_listen(resource socket[, int backlog])\",\"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"],socket_read:[\"string socket_read(resource socket, int length [, int type])\",\"Reads a maximum of length bytes from socket\"],socket_recv:[\"int socket_recv(resource socket, string &buf, int len, int flags)\",\"Receives data from a connected socket\"],socket_recvfrom:[\"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\"Receives data from a socket, connected or not\"],socket_select:[\"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"],socket_send:[\"int socket_send(resource socket, string buf, int len, int flags)\",\"Sends data to a connected socket\"],socket_sendto:[\"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\"Sends a message to a socket, whether it is connected or not\"],socket_set_block:[\"bool socket_set_block(resource socket)\",\"Sets blocking mode on a socket resource\"],socket_set_nonblock:[\"bool socket_set_nonblock(resource socket)\",\"Sets nonblocking mode on a socket resource\"],socket_set_option:[\"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\"Sets socket options for the socket\"],socket_shutdown:[\"bool socket_shutdown(resource socket[, int how])\",\"Shuts down a socket for receiving, sending, or both.\"],socket_strerror:[\"string socket_strerror(int errno)\",\"Returns a string describing an error\"],socket_write:[\"int socket_write(resource socket, string buf[, int length])\",\"Writes the buffer to the socket resource, length is optional\"],solid_fetch_prev:[\"bool solid_fetch_prev(resource result_id)\",\"\"],sort:[\"bool sort(array &array_arg [, int sort_flags])\",\"Sort an array\"],soundex:[\"string soundex(string str)\",\"Calculate the soundex key of a string\"],spl_autoload:[\"void spl_autoload(string class_name [, string file_extensions])\",\"Default implementation for __autoload()\"],spl_autoload_call:[\"void spl_autoload_call(string class_name)\",\"Try all registerd autoload function to load the requested class\"],spl_autoload_extensions:[\"string spl_autoload_extensions([string file_extensions])\",\"Register and return default file extensions for spl_autoload\"],spl_autoload_functions:[\"false|array spl_autoload_functions()\",\"Return all registered __autoload() functionns\"],spl_autoload_register:['bool spl_autoload_register([mixed autoload_function = \"spl_autoload\" [, throw = true [, prepend]]])',\"Register given function as __autoload() implementation\"],spl_autoload_unregister:[\"bool spl_autoload_unregister(mixed autoload_function)\",\"Unregister given function as __autoload() implementation\"],spl_classes:[\"array spl_classes()\",\"Return an array containing the names of all clsses and interfaces defined in SPL\"],spl_object_hash:[\"string spl_object_hash(object obj)\",\"Return hash id for given object\"],split:[\"array split(string pattern, string string [, int limit])\",\"Split string into array by regular expression\"],spliti:[\"array spliti(string pattern, string string [, int limit])\",\"Split string into array by regular expression case-insensitive\"],sprintf:[\"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\"Return a formatted string\"],sql_regcase:[\"string sql_regcase(string string)\",\"Make regular expression for case insensitive match\"],sqlite_array_query:[\"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\"Executes a query against a given database and returns an array of arrays.\"],sqlite_busy_timeout:[\"void sqlite_busy_timeout(resource db, int ms)\",\"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"],sqlite_changes:[\"int sqlite_changes(resource db)\",\"Returns the number of rows that were changed by the most recent SQL statement.\"],sqlite_close:[\"void sqlite_close(resource db)\",\"Closes an open sqlite database.\"],sqlite_column:[\"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\"Fetches a column from the current row of a result set.\"],sqlite_create_aggregate:[\"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\"Registers an aggregate function for queries.\"],sqlite_create_function:[\"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",'Registers a \"regular\" function for queries.'],sqlite_current:[\"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the current row from a result set as an array.\"],sqlite_error_string:[\"string sqlite_error_string(int error_code)\",\"Returns the textual description of an error code.\"],sqlite_escape_string:[\"string sqlite_escape_string(string item)\",\"Escapes a string for use as a query parameter.\"],sqlite_exec:[\"boolean sqlite_exec(string query, resource db[, string &error_message])\",\"Executes a result-less query against a given database\"],sqlite_factory:[\"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"],sqlite_fetch_all:[\"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\"Fetches all rows from a result set as an array of arrays.\"],sqlite_fetch_array:[\"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\"Fetches the next row from a result set as an array.\"],sqlite_fetch_column_types:[\"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\"Return an array of column types from a particular table.\"],sqlite_fetch_object:[\"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\"Fetches the next row from a result set as an object.\"],sqlite_fetch_single:[\"string sqlite_fetch_single(resource result [, bool decode_binary])\",\"Fetches the first column of a result set as a string.\"],sqlite_field_name:[\"string sqlite_field_name(resource result, int field_index)\",\"Returns the name of a particular field of a result set.\"],sqlite_has_prev:[\"bool sqlite_has_prev(resource result)\",\"* Returns whether a previous row is available.\"],sqlite_key:[\"int sqlite_key(resource result)\",\"Return the current row index of a buffered result.\"],sqlite_last_error:[\"int sqlite_last_error(resource db)\",\"Returns the error code of the last error for a database.\"],sqlite_last_insert_rowid:[\"int sqlite_last_insert_rowid(resource db)\",\"Returns the rowid of the most recently inserted row.\"],sqlite_libencoding:[\"string sqlite_libencoding()\",\"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"],sqlite_libversion:[\"string sqlite_libversion()\",\"Returns the version of the linked SQLite library.\"],sqlite_next:[\"bool sqlite_next(resource result)\",\"Seek to the next row number of a result set.\"],sqlite_num_fields:[\"int sqlite_num_fields(resource result)\",\"Returns the number of fields in a result set.\"],sqlite_num_rows:[\"int sqlite_num_rows(resource result)\",\"Returns the number of rows in a buffered result set.\"],sqlite_open:[\"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\"Opens a SQLite database. Will create the database if it does not exist.\"],sqlite_popen:[\"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"],sqlite_prev:[\"bool sqlite_prev(resource result)\",\"* Seek to the previous row number of a result set.\"],sqlite_query:[\"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\"Executes a query against a given database and returns a result handle.\"],sqlite_rewind:[\"bool sqlite_rewind(resource result)\",\"Seek to the first row number of a buffered result set.\"],sqlite_seek:[\"bool sqlite_seek(resource result, int row)\",\"Seek to a particular row number of a buffered result set.\"],sqlite_single_query:[\"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\"Executes a query and returns either an array for one single column or the value of the first row.\"],sqlite_udf_decode_binary:[\"string sqlite_udf_decode_binary(string data)\",\"Decode binary encoding on a string parameter passed to an UDF.\"],sqlite_udf_encode_binary:[\"string sqlite_udf_encode_binary(string data)\",\"Apply binary encoding (if required) to a string to return from an UDF.\"],sqlite_unbuffered_query:[\"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\"Executes a query that does not prefetch and buffer all data.\"],sqlite_valid:[\"bool sqlite_valid(resource result)\",\"Returns whether more rows are available.\"],sqrt:[\"float sqrt(float number)\",\"Returns the square root of the number\"],srand:[\"void srand([int seed])\",\"Seeds random number generator\"],sscanf:[\"mixed sscanf(string str, string format [, string ...])\",\"Implements an ANSI C compatible sscanf\"],stat:[\"array stat(string filename)\",\"Give information about a file\"],str_getcsv:[\"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\"Parse a CSV string into an array\"],str_ireplace:[\"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace / case-insensitive\"],str_pad:[\"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\"Returns input string padded on the left or right to specified length with pad_string\"],str_repeat:[\"string str_repeat(string input, int mult)\",\"Returns the input string repeat mult times\"],str_replace:[\"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\"Replaces all occurrences of search in haystack with replace\"],str_rot13:[\"string str_rot13(string str)\",\"Perform the rot13 transform on a string\"],str_shuffle:[\"void str_shuffle(string str)\",\"Shuffles string. One permutation of all possible is created\"],str_split:[\"array str_split(string str [, int split_length])\",\"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"],str_word_count:[\"mixed str_word_count(string str, [int format [, string charlist]])\",'Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, \\'word\\' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \"\\'\" and \"-\" characters.'],strcasecmp:[\"int strcasecmp(string str1, string str2)\",\"Binary safe case-insensitive string comparison\"],strchr:[\"string strchr(string haystack, string needle)\",\"An alias for strstr\"],strcmp:[\"int strcmp(string str1, string str2)\",\"Binary safe string comparison\"],strcoll:[\"int strcoll(string str1, string str2)\",\"Compares two strings using the current locale\"],strcspn:[\"int strcspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"],stream_bucket_append:[\"void stream_bucket_append(resource brigade, resource bucket)\",\"Append bucket to brigade\"],stream_bucket_make_writeable:[\"object stream_bucket_make_writeable(resource brigade)\",\"Return a bucket object from the brigade for operating on\"],stream_bucket_new:[\"resource stream_bucket_new(resource stream, string buffer)\",\"Create a new bucket for use on the current stream\"],stream_bucket_prepend:[\"void stream_bucket_prepend(resource brigade, resource bucket)\",\"Prepend bucket to brigade\"],stream_context_create:[\"resource stream_context_create([array options[, array params]])\",\"Create a file context and optionally set parameters\"],stream_context_get_default:[\"resource stream_context_get_default([array options])\",\"Get a handle on the default file/stream context and optionally set parameters\"],stream_context_get_options:[\"array stream_context_get_options(resource context|resource stream)\",\"Retrieve options for a stream/wrapper/context\"],stream_context_get_params:[\"array stream_context_get_params(resource context|resource stream)\",\"Get parameters of a file context\"],stream_context_set_default:[\"resource stream_context_set_default(array options)\",\"Set default file/stream context, returns the context as a resource\"],stream_context_set_option:[\"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\"Set an option for a wrapper\"],stream_context_set_params:[\"bool stream_context_set_params(resource context|resource stream, array options)\",\"Set parameters for a file context\"],stream_copy_to_stream:[\"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\"Reads up to maxlen bytes from source stream and writes them to dest stream.\"],stream_filter_append:[\"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Append a filter to a stream\"],stream_filter_prepend:[\"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\"Prepend a filter to a stream\"],stream_filter_register:[\"bool stream_filter_register(string filtername, string classname)\",\"Registers a custom filter handler class\"],stream_filter_remove:[\"bool stream_filter_remove(resource stream_filter)\",\"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"],stream_get_contents:[\"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"],stream_get_filters:[\"array stream_get_filters(void)\",\"Returns a list of registered filters\"],stream_get_line:[\"string stream_get_line(resource stream, int maxlen [, string ending])\",\"Read up to maxlen bytes from a stream or until the ending string is found\"],stream_get_meta_data:[\"array stream_get_meta_data(resource fp)\",\"Retrieves header/meta data from streams/file pointers\"],stream_get_transports:[\"array stream_get_transports()\",\"Retrieves list of registered socket transports\"],stream_get_wrappers:[\"array stream_get_wrappers()\",\"Retrieves list of registered stream wrappers\"],stream_is_local:[\"bool stream_is_local(resource stream|string url)\",\"\"],stream_resolve_include_path:[\"string stream_resolve_include_path(string filename)\",\"Determine what file will be opened by calls to fopen() with a relative path\"],stream_select:[\"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"],stream_set_blocking:[\"bool stream_set_blocking(resource socket, int mode)\",\"Set blocking/non-blocking mode on a socket or stream\"],stream_set_timeout:[\"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\"Set timeout on stream read to seconds + microseonds\"],stream_set_write_buffer:[\"int stream_set_write_buffer(resource fp, int buffer)\",\"Set file write buffer\"],stream_socket_accept:[\"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\"Accept a client connection from a server socket\"],stream_socket_client:[\"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\"Open a client connection to a remote address\"],stream_socket_enable_crypto:[\"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\"Enable or disable a specific kind of crypto on the stream\"],stream_socket_get_name:[\"string stream_socket_get_name(resource stream, bool want_peer)\",\"Returns either the locally bound or remote name for a socket stream\"],stream_socket_pair:[\"array stream_socket_pair(int domain, int type, int protocol)\",\"Creates a pair of connected, indistinguishable socket streams\"],stream_socket_recvfrom:[\"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\"Receives data from a socket stream\"],stream_socket_sendto:[\"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"],stream_socket_server:[\"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\"Create a server socket bound to localaddress\"],stream_socket_shutdown:[\"int stream_socket_shutdown(resource stream, int how)\",\"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"],stream_supports_lock:[\"bool stream_supports_lock(resource stream)\",\"Tells wether the stream supports locking through flock().\"],stream_wrapper_register:[\"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\"Registers a custom URL protocol handler class\"],stream_wrapper_restore:[\"bool stream_wrapper_restore(string protocol)\",\"Restore the original protocol handler, overriding if necessary\"],stream_wrapper_unregister:[\"bool stream_wrapper_unregister(string protocol)\",\"Unregister a wrapper for the life of the current request.\"],strftime:[\"string strftime(string format [, int timestamp])\",\"Format a local time/date according to locale settings\"],strip_tags:[\"string strip_tags(string str [, string allowable_tags])\",\"Strips HTML and PHP tags from a string\"],stripcslashes:[\"string stripcslashes(string str)\",\"Strips backslashes from a string. Uses C-style conventions\"],stripos:[\"int stripos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another, case insensitive\"],stripslashes:[\"string stripslashes(string str)\",\"Strips backslashes from a string\"],stristr:[\"string stristr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another, case insensitive\"],strlen:[\"int strlen(string str)\",\"Get string length\"],strnatcasecmp:[\"int strnatcasecmp(string s1, string s2)\",\"Returns the result of case-insensitive string comparison using 'natural' algorithm\"],strnatcmp:[\"int strnatcmp(string s1, string s2)\",\"Returns the result of string comparison using 'natural' algorithm\"],strncasecmp:[\"int strncasecmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strncmp:[\"int strncmp(string str1, string str2, int len)\",\"Binary safe string comparison\"],strpbrk:[\"array strpbrk(string haystack, string char_list)\",\"Search a string for any of a set of characters\"],strpos:[\"int strpos(string haystack, string needle [, int offset])\",\"Finds position of first occurrence of a string within another\"],strptime:[\"string strptime(string timestamp, string format)\",\"Parse a time/date generated with strftime()\"],strrchr:[\"string strrchr(string haystack, string needle)\",\"Finds the last occurrence of a character in a string within another\"],strrev:[\"string strrev(string str)\",\"Reverse a string\"],strripos:[\"int strripos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strrpos:[\"int strrpos(string haystack, string needle [, int offset])\",\"Finds position of last occurrence of a string within another string\"],strspn:[\"int strspn(string str, string mask [, start [, len]])\",\"Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"],strstr:[\"string strstr(string haystack, string needle[, bool part])\",\"Finds first occurrence of a string within another\"],strtok:[\"string strtok([string str,] string token)\",\"Tokenize a string\"],strtolower:[\"string strtolower(string str)\",\"Makes a string lowercase\"],strtotime:[\"int strtotime(string time [, int now ])\",\"Convert string representation of date and time to a timestamp\"],strtoupper:[\"string strtoupper(string str)\",\"Makes a string uppercase\"],strtr:[\"string strtr(string str, string from[, string to])\",\"Translates characters in str using given translation tables\"],strval:[\"string strval(mixed var)\",\"Get the string value of a variable\"],substr:[\"string substr(string str, int start [, int length])\",\"Returns part of a string\"],substr_compare:[\"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"],substr_count:[\"int substr_count(string haystack, string needle [, int offset [, int length]])\",\"Returns the number of times a substring occurs in the string\"],substr_replace:[\"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\"Replaces part of a string with another string\"],sybase_affected_rows:[\"int sybase_affected_rows([resource link_id])\",\"Get number of affected rows in last query\"],sybase_close:[\"bool sybase_close([resource link_id])\",\"Close Sybase connection\"],sybase_connect:[\"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\"Open Sybase server connection\"],sybase_data_seek:[\"bool sybase_data_seek(resource result, int offset)\",\"Move internal row pointer\"],sybase_deadlock_retry_count:[\"void sybase_deadlock_retry_count(int retry_count)\",\"Sets deadlock retry count\"],sybase_fetch_array:[\"array sybase_fetch_array(resource result)\",\"Fetch row as array\"],sybase_fetch_assoc:[\"array sybase_fetch_assoc(resource result)\",\"Fetch row as array without numberic indices\"],sybase_fetch_field:[\"object sybase_fetch_field(resource result [, int offset])\",\"Get field information\"],sybase_fetch_object:[\"object sybase_fetch_object(resource result [, mixed object])\",\"Fetch row as object\"],sybase_fetch_row:[\"array sybase_fetch_row(resource result)\",\"Get row as enumerated array\"],sybase_field_seek:[\"bool sybase_field_seek(resource result, int offset)\",\"Set field offset\"],sybase_free_result:[\"bool sybase_free_result(resource result)\",\"Free result memory\"],sybase_get_last_message:[\"string sybase_get_last_message(void)\",\"Returns the last message from server (over min_message_severity)\"],sybase_min_client_severity:[\"void sybase_min_client_severity(int severity)\",\"Sets minimum client severity\"],sybase_min_server_severity:[\"void sybase_min_server_severity(int severity)\",\"Sets minimum server severity\"],sybase_num_fields:[\"int sybase_num_fields(resource result)\",\"Get number of fields in result\"],sybase_num_rows:[\"int sybase_num_rows(resource result)\",\"Get number of rows in result\"],sybase_pconnect:[\"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\"Open persistent Sybase connection\"],sybase_query:[\"int sybase_query(string query [, resource link_id])\",\"Send Sybase query\"],sybase_result:[\"string sybase_result(resource result, int row, mixed field)\",\"Get result data\"],sybase_select_db:[\"bool sybase_select_db(string database [, resource link_id])\",\"Select Sybase database\"],sybase_set_message_handler:[\"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"],sybase_unbuffered_query:[\"int sybase_unbuffered_query(string query [, resource link_id])\",\"Send Sybase query\"],symlink:[\"int symlink(string target, string link)\",\"Create a symbolic link\"],sys_get_temp_dir:[\"string sys_get_temp_dir()\",\"Returns directory path used for temporary files\"],sys_getloadavg:[\"array sys_getloadavg()\",\"\"],syslog:[\"bool syslog(int priority, string message)\",\"Generate a system log message\"],system:[\"int system(string command [, int &return_value])\",\"Execute an external program and display output\"],tan:[\"float tan(float number)\",\"Returns the tangent of the number in radians\"],tanh:[\"float tanh(float number)\",\"Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)\"],tempnam:[\"string tempnam(string dir, string prefix)\",\"Create a unique filename in a directory\"],textdomain:[\"string textdomain(string domain)\",'Set the textdomain to \"domain\". Returns the current domain'],tidy_access_count:[\"int tidy_access_count()\",\"Returns the Number of Tidy accessibility warnings encountered for specified document.\"],tidy_clean_repair:[\"boolean tidy_clean_repair()\",\"Execute configured cleanup and repair operations on parsed markup\"],tidy_config_count:[\"int tidy_config_count()\",\"Returns the Number of Tidy configuration errors encountered for specified document.\"],tidy_diagnose:[\"boolean tidy_diagnose()\",\"Run configured diagnostics on parsed and repaired markup.\"],tidy_error_count:[\"int tidy_error_count()\",\"Returns the Number of Tidy errors encountered for specified document.\"],tidy_get_body:[\"TidyNode tidy_get_body(resource tidy)\",\"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"],tidy_get_config:[\"array tidy_get_config()\",\"Get current Tidy configuarion\"],tidy_get_error_buffer:[\"string tidy_get_error_buffer([boolean detailed])\",\"Return warnings and errors which occured parsing the specified document\"],tidy_get_head:[\"TidyNode tidy_get_head()\",\"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"],tidy_get_html:[\"TidyNode tidy_get_html()\",\"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"],tidy_get_html_ver:[\"int tidy_get_html_ver()\",\"Get the Detected HTML version for the specified document.\"],tidy_get_opt_doc:[\"string tidy_get_opt_doc(tidy resource, string optname)\",\"Returns the documentation for the given option name\"],tidy_get_output:[\"string tidy_get_output()\",\"Return a string representing the parsed tidy markup\"],tidy_get_release:[\"string tidy_get_release()\",\"Get release date (version) for Tidy library\"],tidy_get_root:[\"TidyNode tidy_get_root()\",\"Returns a TidyNode Object representing the root of the tidy parse tree\"],tidy_get_status:[\"int tidy_get_status()\",\"Get status of specfied document.\"],tidy_getopt:[\"mixed tidy_getopt(string option)\",\"Returns the value of the specified configuration option for the tidy document.\"],tidy_is_xhtml:[\"boolean tidy_is_xhtml()\",\"Indicates if the document is a XHTML document.\"],tidy_is_xml:[\"boolean tidy_is_xml()\",\"Indicates if the document is a generic (non HTML/XHTML) XML document.\"],tidy_parse_file:[\"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\"Parse markup in file or URI\"],tidy_parse_string:[\"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\"Parse a document stored in a string\"],tidy_repair_file:[\"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\"Repair a file using an optionally provided configuration file\"],tidy_repair_string:[\"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\"Repair a string using an optionally provided configuration file\"],tidy_warning_count:[\"int tidy_warning_count()\",\"Returns the Number of Tidy warnings encountered for specified document.\"],time:[\"int time(void)\",\"Return current UNIX timestamp\"],time_nanosleep:[\"mixed time_nanosleep(long seconds, long nanoseconds)\",\"Delay for a number of seconds and nano seconds\"],time_sleep_until:[\"mixed time_sleep_until(float timestamp)\",\"Make the script sleep until the specified time\"],timezone_abbreviations_list:[\"array timezone_abbreviations_list()\",\"Returns associative array containing dst, offset and the timezone name\"],timezone_identifiers_list:[\"array timezone_identifiers_list([long what[, string country]])\",\"Returns numerically index array with all timezone identifiers.\"],timezone_location_get:[\"array timezone_location_get()\",\"Returns location information for a timezone, including country code, latitude/longitude and comments\"],timezone_name_from_abbr:[\"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\"Returns the timezone name from abbrevation\"],timezone_name_get:[\"string timezone_name_get(DateTimeZone object)\",\"Returns the name of the timezone.\"],timezone_offset_get:[\"long timezone_offset_get(DateTimeZone object, DateTime object)\",\"Returns the timezone offset.\"],timezone_open:[\"DateTimeZone timezone_open(string timezone)\",\"Returns new DateTimeZone object\"],timezone_transitions_get:[\"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"],timezone_version_get:[\"array timezone_version_get()\",\"Returns the Olson database version number.\"],tmpfile:[\"resource tmpfile(void)\",\"Create a temporary file that will be deleted automatically after use\"],token_get_all:[\"array token_get_all(string source)\",\"\"],token_name:[\"string token_name(int type)\",\"\"],touch:[\"bool touch(string filename [, int time [, int atime]])\",\"Set modification time of file\"],trigger_error:[\"void trigger_error(string messsage [, int error_type])\",\"Generates a user-level error/warning/notice message\"],trim:[\"string trim(string str [, string character_mask])\",\"Strips whitespace from the beginning and end of a string\"],uasort:[\"bool uasort(array array_arg, string cmp_function)\",\"Sort an array with a user-defined comparison function and maintain index association\"],ucfirst:[\"string ucfirst(string str)\",\"Make a string's first character lowercase\"],ucwords:[\"string ucwords(string str)\",\"Uppercase the first character of every word in a string\"],uksort:[\"bool uksort(array array_arg, string cmp_function)\",\"Sort an array by keys using a user-defined comparison function\"],umask:[\"int umask([int mask])\",\"Return or change the umask\"],uniqid:[\"string uniqid([string prefix [, bool more_entropy]])\",\"Generates a unique ID\"],unixtojd:[\"int unixtojd([int timestamp])\",\"Convert UNIX timestamp to Julian Day\"],unlink:[\"bool unlink(string filename[, context context])\",\"Delete a file\"],unpack:[\"array unpack(string format, string input)\",\"Unpack binary string into named array elements according to format argument\"],unregister_tick_function:[\"void unregister_tick_function(string function_name)\",\"Unregisters a tick callback function\"],unserialize:[\"mixed unserialize(string variable_representation)\",\"Takes a string representation of variable and recreates it\"],unset:[\"void unset (mixed var [, mixed var])\",\"Unset a given variable\"],urldecode:[\"string urldecode(string str)\",\"Decodes URL-encoded string\"],urlencode:[\"string urlencode(string str)\",\"URL-encodes string\"],usleep:[\"void usleep(int micro_seconds)\",\"Delay for a given number of micro seconds\"],usort:[\"bool usort(array array_arg, string cmp_function)\",\"Sort an array by values using a user-defined comparison function\"],utf8_decode:[\"string utf8_decode(string data)\",\"Converts a UTF-8 encoded string to ISO-8859-1\"],utf8_encode:[\"string utf8_encode(string data)\",\"Encodes an ISO-8859-1 string to UTF-8\"],var_dump:[\"void var_dump(mixed var)\",\"Dumps a string representation of variable to output\"],var_export:[\"mixed var_export(mixed var [, bool return])\",\"Outputs or returns a string representation of a variable\"],variant_abs:[\"mixed variant_abs(mixed left)\",\"Returns the absolute value of a variant\"],variant_add:[\"mixed variant_add(mixed left, mixed right)\",'\"Adds\" two variant values together and returns the result'],variant_and:[\"mixed variant_and(mixed left, mixed right)\",\"performs a bitwise AND operation between two variants and returns the result\"],variant_cast:[\"object variant_cast(object variant, int type)\",\"Convert a variant into a new variant object of another type\"],variant_cat:[\"mixed variant_cat(mixed left, mixed right)\",\"concatenates two variant values together and returns the result\"],variant_cmp:[\"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\"Compares two variants\"],variant_date_from_timestamp:[\"object variant_date_from_timestamp(int timestamp)\",\"Returns a variant date representation of a unix timestamp\"],variant_date_to_timestamp:[\"int variant_date_to_timestamp(object variant)\",\"Converts a variant date/time value to unix timestamp\"],variant_div:[\"mixed variant_div(mixed left, mixed right)\",\"Returns the result from dividing two variants\"],variant_eqv:[\"mixed variant_eqv(mixed left, mixed right)\",\"Performs a bitwise equivalence on two variants\"],variant_fix:[\"mixed variant_fix(mixed left)\",\"Returns the integer part ? of a variant\"],variant_get_type:[\"int variant_get_type(object variant)\",\"Returns the VT_XXX type code for a variant\"],variant_idiv:[\"mixed variant_idiv(mixed left, mixed right)\",\"Converts variants to integers and then returns the result from dividing them\"],variant_imp:[\"mixed variant_imp(mixed left, mixed right)\",\"Performs a bitwise implication on two variants\"],variant_int:[\"mixed variant_int(mixed left)\",\"Returns the integer portion of a variant\"],variant_mod:[\"mixed variant_mod(mixed left, mixed right)\",\"Divides two variants and returns only the remainder\"],variant_mul:[\"mixed variant_mul(mixed left, mixed right)\",\"multiplies the values of the two variants and returns the result\"],variant_neg:[\"mixed variant_neg(mixed left)\",\"Performs logical negation on a variant\"],variant_not:[\"mixed variant_not(mixed left)\",\"Performs bitwise not negation on a variant\"],variant_or:[\"mixed variant_or(mixed left, mixed right)\",\"Performs a logical disjunction on two variants\"],variant_pow:[\"mixed variant_pow(mixed left, mixed right)\",\"Returns the result of performing the power function with two variants\"],variant_round:[\"mixed variant_round(mixed left, int decimals)\",\"Rounds a variant to the specified number of decimal places\"],variant_set:[\"void variant_set(object variant, mixed value)\",\"Assigns a new value for a variant object\"],variant_set_type:[\"void variant_set_type(object variant, int type)\",'Convert a variant into another type.  Variant is modified \"in-place\"'],variant_sub:[\"mixed variant_sub(mixed left, mixed right)\",\"subtracts the value of the right variant from the left variant value and returns the result\"],variant_xor:[\"mixed variant_xor(mixed left, mixed right)\",\"Performs a logical exclusion on two variants\"],version_compare:[\"int version_compare(string ver1, string ver2 [, string oper])\",'Compares two \"PHP-standardized\" version number strings'],vfprintf:[\"int vfprintf(resource stream, string format, array args)\",\"Output a formatted string into a stream\"],virtual:[\"bool virtual(string filename)\",\"Perform an Apache sub-request\"],vprintf:[\"int vprintf(string format, array args)\",\"Output a formatted string\"],vsprintf:[\"string vsprintf(string format, array args)\",\"Return a formatted string\"],wddx_add_vars:[\"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\"Serializes given variables and adds them to packet given by packet_id\"],wddx_deserialize:[\"mixed wddx_deserialize(mixed packet)\",\"Deserializes given packet and returns a PHP value\"],wddx_packet_end:[\"string wddx_packet_end(resource packet_id)\",\"Ends specified WDDX packet and returns the string containing the packet\"],wddx_packet_start:[\"resource wddx_packet_start([string comment])\",\"Starts a WDDX packet with optional comment and returns the packet id\"],wddx_serialize_value:[\"string wddx_serialize_value(mixed var [, string comment])\",\"Creates a new packet and serializes the given value\"],wddx_serialize_vars:[\"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\"Creates a new packet and serializes given variables into a struct\"],wordwrap:[\"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\"Wraps buffer to selected number of characters using string break char\"],xml_error_string:[\"string xml_error_string(int code)\",\"Get XML parser error string\"],xml_get_current_byte_index:[\"int xml_get_current_byte_index(resource parser)\",\"Get current byte index for an XML parser\"],xml_get_current_column_number:[\"int xml_get_current_column_number(resource parser)\",\"Get current column number for an XML parser\"],xml_get_current_line_number:[\"int xml_get_current_line_number(resource parser)\",\"Get current line number for an XML parser\"],xml_get_error_code:[\"int xml_get_error_code(resource parser)\",\"Get XML parser error code\"],xml_parse:[\"int xml_parse(resource parser, string data [, int isFinal])\",\"Start parsing an XML document\"],xml_parse_into_struct:[\"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\"Parsing a XML document\"],xml_parser_create:[\"resource xml_parser_create([string encoding])\",\"Create an XML parser\"],xml_parser_create_ns:[\"resource xml_parser_create_ns([string encoding [, string sep]])\",\"Create an XML parser\"],xml_parser_free:[\"int xml_parser_free(resource parser)\",\"Free an XML parser\"],xml_parser_get_option:[\"int xml_parser_get_option(resource parser, int option)\",\"Get options from an XML parser\"],xml_parser_set_option:[\"int xml_parser_set_option(resource parser, int option, mixed value)\",\"Set options in an XML parser\"],xml_set_character_data_handler:[\"int xml_set_character_data_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_default_handler:[\"int xml_set_default_handler(resource parser, string hdl)\",\"Set up default handler\"],xml_set_element_handler:[\"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\"Set up start and end element handlers\"],xml_set_end_namespace_decl_handler:[\"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_external_entity_ref_handler:[\"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\"Set up external entity reference handler\"],xml_set_notation_decl_handler:[\"int xml_set_notation_decl_handler(resource parser, string hdl)\",\"Set up notation declaration handler\"],xml_set_object:[\"int xml_set_object(resource parser, object &obj)\",\"Set up object which should be used for callbacks\"],xml_set_processing_instruction_handler:[\"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\"Set up processing instruction (PI) handler\"],xml_set_start_namespace_decl_handler:[\"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\"Set up character data handler\"],xml_set_unparsed_entity_decl_handler:[\"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\"Set up unparsed entity declaration handler\"],xmlrpc_decode:[\"array xmlrpc_decode(string xml [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_decode_request:[\"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\"Decodes XML into native PHP types\"],xmlrpc_encode:[\"string xmlrpc_encode(mixed value)\",\"Generates XML for a PHP value\"],xmlrpc_encode_request:[\"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\"Generates XML for a method request\"],xmlrpc_get_type:[\"string xmlrpc_get_type(mixed value)\",\"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"],xmlrpc_is_fault:[\"bool xmlrpc_is_fault(array)\",\"Determines if an array value represents an XMLRPC fault.\"],xmlrpc_parse_method_descriptions:[\"array xmlrpc_parse_method_descriptions(string xml)\",\"Decodes XML into a list of method descriptions\"],xmlrpc_server_add_introspection_data:[\"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\"Adds introspection documentation\"],xmlrpc_server_call_method:[\"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\"Parses XML requests and call methods\"],xmlrpc_server_create:[\"resource xmlrpc_server_create(void)\",\"Creates an xmlrpc server\"],xmlrpc_server_destroy:[\"int xmlrpc_server_destroy(resource server)\",\"Destroys server resources\"],xmlrpc_server_register_introspection_callback:[\"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\"Register a PHP function to generate documentation\"],xmlrpc_server_register_method:[\"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\"Register a PHP function to handle method matching method_name\"],xmlrpc_set_type:[\"bool xmlrpc_set_type(string value, string type)\",\"Sets xmlrpc type, base64 or datetime, for a PHP string value\"],xmlwriter_end_attribute:[\"bool xmlwriter_end_attribute(resource xmlwriter)\",\"End attribute - returns FALSE on error\"],xmlwriter_end_cdata:[\"bool xmlwriter_end_cdata(resource xmlwriter)\",\"End current CDATA - returns FALSE on error\"],xmlwriter_end_comment:[\"bool xmlwriter_end_comment(resource xmlwriter)\",\"Create end comment - returns FALSE on error\"],xmlwriter_end_document:[\"bool xmlwriter_end_document(resource xmlwriter)\",\"End current document - returns FALSE on error\"],xmlwriter_end_dtd:[\"bool xmlwriter_end_dtd(resource xmlwriter)\",\"End current DTD - returns FALSE on error\"],xmlwriter_end_dtd_attlist:[\"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\"End current DTD AttList - returns FALSE on error\"],xmlwriter_end_dtd_element:[\"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\"End current DTD element - returns FALSE on error\"],xmlwriter_end_dtd_entity:[\"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\"End current DTD Entity - returns FALSE on error\"],xmlwriter_end_element:[\"bool xmlwriter_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_end_pi:[\"bool xmlwriter_end_pi(resource xmlwriter)\",\"End current PI - returns FALSE on error\"],xmlwriter_flush:[\"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\"Output current buffer\"],xmlwriter_full_end_element:[\"bool xmlwriter_full_end_element(resource xmlwriter)\",\"End current element - returns FALSE on error\"],xmlwriter_open_memory:[\"resource xmlwriter_open_memory()\",\"Create new xmlwriter using memory for string output\"],xmlwriter_open_uri:[\"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\"Create new xmlwriter using source uri for output\"],xmlwriter_output_memory:[\"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\"Output current buffer as string\"],xmlwriter_set_indent:[\"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\"Toggle indentation on/off - returns FALSE on error\"],xmlwriter_set_indent_string:[\"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\"Set string used for indenting - returns FALSE on error\"],xmlwriter_start_attribute:[\"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\"Create start attribute - returns FALSE on error\"],xmlwriter_start_attribute_ns:[\"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced attribute - returns FALSE on error\"],xmlwriter_start_cdata:[\"bool xmlwriter_start_cdata(resource xmlwriter)\",\"Create start CDATA tag - returns FALSE on error\"],xmlwriter_start_comment:[\"bool xmlwriter_start_comment(resource xmlwriter)\",\"Create start comment - returns FALSE on error\"],xmlwriter_start_document:[\"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\"Create document tag - returns FALSE on error\"],xmlwriter_start_dtd:[\"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\"Create start DTD tag - returns FALSE on error\"],xmlwriter_start_dtd_attlist:[\"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\"Create start DTD AttList - returns FALSE on error\"],xmlwriter_start_dtd_element:[\"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\"Create start DTD element - returns FALSE on error\"],xmlwriter_start_dtd_entity:[\"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\"Create start DTD Entity - returns FALSE on error\"],xmlwriter_start_element:[\"bool xmlwriter_start_element(resource xmlwriter, string name)\",\"Create start element tag - returns FALSE on error\"],xmlwriter_start_element_ns:[\"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\"Create start namespaced element tag - returns FALSE on error\"],xmlwriter_start_pi:[\"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\"Create start PI tag - returns FALSE on error\"],xmlwriter_text:[\"bool xmlwriter_text(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xmlwriter_write_attribute:[\"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\"Write full attribute - returns FALSE on error\"],xmlwriter_write_attribute_ns:[\"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\"Write full namespaced attribute - returns FALSE on error\"],xmlwriter_write_cdata:[\"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\"Write full CDATA tag - returns FALSE on error\"],xmlwriter_write_comment:[\"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\"Write full comment tag - returns FALSE on error\"],xmlwriter_write_dtd:[\"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\"Write full DTD tag - returns FALSE on error\"],xmlwriter_write_dtd_attlist:[\"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\"Write full DTD AttList tag - returns FALSE on error\"],xmlwriter_write_dtd_element:[\"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\"Write full DTD element tag - returns FALSE on error\"],xmlwriter_write_dtd_entity:[\"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\"Write full DTD Entity tag - returns FALSE on error\"],xmlwriter_write_element:[\"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\"Write full element tag - returns FALSE on error\"],xmlwriter_write_element_ns:[\"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\"Write full namesapced element tag - returns FALSE on error\"],xmlwriter_write_pi:[\"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\"Write full PI tag - returns FALSE on error\"],xmlwriter_write_raw:[\"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\"Write text - returns FALSE on error\"],xsl_xsltprocessor_get_parameter:[\"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_has_exslt_support:[\"bool xsl_xsltprocessor_has_exslt_support();\",\"\"],xsl_xsltprocessor_import_stylesheet:[\"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_register_php_functions:[\"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\"\"],xsl_xsltprocessor_remove_parameter:[\"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\"\"],xsl_xsltprocessor_set_parameter:[\"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\"\"],xsl_xsltprocessor_set_profiling:[\"bool xsl_xsltprocessor_set_profiling(string filename) */\",'PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s!\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } /* }}} end xsl_xsltprocessor_set_profiling'],xsl_xsltprocessor_transform_to_doc:[\"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\"URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:\"],xsl_xsltprocessor_transform_to_uri:[\"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\"\"],xsl_xsltprocessor_transform_to_xml:[\"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\"\"],zend_logo_guid:[\"string zend_logo_guid(void)\",\"Return the special ID used to request the Zend logo in phpinfo screens\"],zend_version:[\"string zend_version(void)\",\"Get the version of the Zend Engine\"],zip_close:[\"void zip_close(resource zip)\",\"Close a Zip archive\"],zip_entry_close:[\"void zip_entry_close(resource zip_ent)\",\"Close a zip entry\"],zip_entry_compressedsize:[\"int zip_entry_compressedsize(resource zip_entry)\",\"Return the compressed size of a ZZip entry\"],zip_entry_compressionmethod:[\"string zip_entry_compressionmethod(resource zip_entry)\",\"Return a string containing the compression method used on a particular entry\"],zip_entry_filesize:[\"int zip_entry_filesize(resource zip_entry)\",\"Return the actual filesize of a ZZip entry\"],zip_entry_name:[\"string zip_entry_name(resource zip_entry)\",\"Return the name given a ZZip entry\"],zip_entry_open:[\"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\"Open a Zip File, pointed by the resource entry\"],zip_entry_read:[\"mixed zip_entry_read(resource zip_entry [, int len])\",\"Read from an open directory entry\"],zip_open:[\"resource zip_open(string filename)\",\"Create new zip using source uri for output\"],zip_read:[\"resource zip_read(resource zip)\",\"Returns the next file in the archive\"],zlib_get_coding_type:[\"string zlib_get_coding_type(void)\",\"Returns the coding type used for output compression\"]},i={$_COOKIE:{type:\"array\"},$_ENV:{type:\"array\"},$_FILES:{type:\"array\"},$_GET:{type:\"array\"},$_POST:{type:\"array\"},$_REQUEST:{type:\"array\"},$_SERVER:{type:\"array\",value:{DOCUMENT_ROOT:1,GATEWAY_INTERFACE:1,HTTP_ACCEPT:1,HTTP_ACCEPT_CHARSET:1,HTTP_ACCEPT_ENCODING:1,HTTP_ACCEPT_LANGUAGE:1,HTTP_CONNECTION:1,HTTP_HOST:1,HTTP_REFERER:1,HTTP_USER_AGENT:1,PATH_TRANSLATED:1,PHP_SELF:1,QUERY_STRING:1,REMOTE_ADDR:1,REMOTE_PORT:1,REQUEST_METHOD:1,REQUEST_URI:1,SCRIPT_FILENAME:1,SCRIPT_NAME:1,SERVER_ADMIN:1,SERVER_NAME:1,SERVER_PORT:1,SERVER_PROTOCOL:1,SERVER_SIGNATURE:1,SERVER_SOFTWARE:1}},$_SESSION:{type:\"array\"},$GLOBALS:{type:\"array\"}};var o=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if(\"identifier\"===i.type)return this.getFunctionCompletions(e,t,r,n);if(function(e,t){return e.type.lastIndexOf(t)>-1}(i,\"variable\"))return this.getVariableCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return\"string\"===i.type&&/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(o)?this.getArrayKeyCompletions(e,t,r,n):[]},this.getFunctionCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+\"($0)\",meta:\"php function\",score:Number.MAX_VALUE,docHTML:n[e][1]}})},this.getVariableCompletions=function(e,t,r,n){return Object.keys(i).map(function(e){return{caption:e,value:e,meta:\"php variable\",score:Number.MAX_VALUE}})},this.getArrayKeyCompletions=function(e,t,r,n){var o=t.getLine(r.row).substr(0,r.column).match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];if(!i[o])return[];var s=[];return\"array\"===i[o].type&&i[o].value&&(s=Object.keys(i[o].value)),s.map(function(e){return{caption:e,value:e,meta:\"php array key\",score:Number.MAX_VALUE}})}}).call(o.prototype),t.PhpCompletions=o}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n,i=e(\"../../lib/oop\"),o=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,a=e(\"../../lib/lang\"),l=[\"text\",\"paren.rparen\",\"punctuation.operator\"],c=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],u={},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return n=u[t];n=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},g=function(e,t,r,n){var i=e.end.row-e.start.row;return{text:r+t+n,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},h=function(){this.add(\"braces\",\"insertion\",function(e,t,r,i,o){var s=r.getCursorPosition(),l=i.doc.getLine(s.row);if(\"{\"==o){d(r);var c=r.getSelectionRange(),u=i.doc.getTextRange(c);if(\"\"!==u&&\"{\"!==u&&r.getWrapBehavioursEnabled())return g(c,u,\"{\",\"}\");if(h.isSaneInsertion(r,i))return/[\\]\\}\\)]/.test(l[s.column])||r.inMultiSelectMode?(h.recordAutoInsert(r,i,\"}\"),{text:\"{}\",selection:[1,1]}):(h.recordMaybeInsert(r,i,\"{\"),{text:\"{\",selection:[1,1]})}else if(\"}\"==o){if(d(r),\"}\"==l.substring(s.column,s.column+1))if(null!==i.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row})&&h.isAutoInsertedClosing(s,l,o))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}else{if(\"\\n\"==o||\"\\r\\n\"==o){d(r);var m=\"\";if(h.isMaybeInsertedClosing(s,l)&&(m=a.stringRepeat(\"}\",n.maybeInsertedBrackets),h.clearMaybeInsertedClosing()),\"}\"===l.substring(s.column,s.column+1)){var p=i.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!p)return null;var _=this.$getIndent(i.getLine(p.row))}else{if(!m)return void h.clearMaybeInsertedClosing();_=this.$getIndent(l)}var f=_+i.getTabString();return{text:\"\\n\"+f+\"\\n\"+_+m,selection:[1,f.length,1,f.length]}}h.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,r,i,o){var s=i.doc.getTextRange(o);if(!o.isMultiLine()&&\"{\"==s){if(d(r),\"}\"==i.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,r,n,i){if(\"(\"==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(\"\"!==s&&r.getWrapBehavioursEnabled())return g(o,s,\"(\",\")\");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,\")\"),{text:\"()\",selection:[1,1]}}else if(\")\"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(\")\"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(\")\",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}),this.add(\"parens\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&\"(\"==o&&(d(r),\")\"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add(\"brackets\",\"insertion\",function(e,t,r,n,i){if(\"[\"==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(\"\"!==s&&r.getWrapBehavioursEnabled())return g(o,s,\"[\",\"]\");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,\"]\"),{text:\"[]\",selection:[1,1]}}else if(\"]\"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(\"]\"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(\"]\",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}),this.add(\"brackets\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&\"[\"==o&&(d(r),\"]\"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add(\"string_dquotes\",\"insertion\",function(e,t,r,n,i){if('\"'==i||\"'\"==i){d(r);var o=i,s=r.getSelectionRange(),a=n.doc.getTextRange(s);if(\"\"!==a&&\"'\"!==a&&'\"'!=a&&r.getWrapBehavioursEnabled())return g(s,a,o,o);if(!a){var l=r.getCursorPosition(),c=n.doc.getLine(l.row),u=c.substring(l.column-1,l.column),h=c.substring(l.column,l.column+1),m=n.getTokenAt(l.row,l.column),p=n.getTokenAt(l.row,l.column+1);if(\"\\\\\"==u&&m&&/escape/.test(m.type))return null;var _,f=m&&/string|escape/.test(m.type),b=!p||/string|escape/.test(p.type);if(h==o)_=f!==b;else{if(f&&!b)return null;if(f&&b)return null;var y=n.$mode.tokenRe;y.lastIndex=0;var x=y.test(u);y.lastIndex=0;var v=y.test(u);if(x||v)return null;if(h&&!/[\\s;,.})\\]\\\\]/.test(h))return null;_=!0}return{text:_?o+o:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('\"'==o||\"'\"==o)&&(d(r),n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o))return i.end.column++,i})};h.isSaneInsertion=function(e,t){var r=e.getCursorPosition(),n=new s(t,r.row,r.column);if(!this.$matchTokenType(n.getCurrentToken()||\"text\",l)){var i=new s(t,r.row,r.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==r.row||this.$matchTokenType(n.getCurrentToken()||\"text\",c)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isAutoInsertedClosing(i,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=i.row,n.autoInsertedLineEnd=r+o.substr(i.column),n.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isMaybeInsertedClosing(i,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=i.row,n.maybeInsertedLineStart=o.substr(0,i.column)+r,n.maybeInsertedLineEnd=o.substr(i.column),n.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,r){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&r===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},i.inherits(h,o),t.CstyleBehaviour=h}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return\"\";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?\"start\":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\\s*$/),o=e.getLength(),s=r,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=(e(\"../range\").Range,e(\"../worker/worker_client\").WorkerClient),l=e(\"./behaviour/cstyle\").CstyleBehaviour,c=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&\"comment\"==o[o.length-1].type)return n;if(\"start\"==e||\"no_regex\"==e)(a=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/))&&(n+=r);else if(\"doc-start\"==e){if(\"start\"==s||\"no_regex\"==s)return\"\";var a;(a=t.match(/^\\s*(\\/?)\\*/))&&(a[1]&&(n+=\" \"),n+=\"* \")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(u.prototype),t.Mode=u}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},float:{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e)if(\"string\"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if(\"ruleset\"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+\": $0\",meta:\"property\",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\\w\\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&\"object\"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../behaviour\").Behaviour,e(\"./cstyle\").CstyleBehaviour),o=e(\"../../token_iterator\").TokenIterator,s=function(){this.inherit(i),this.add(\"colon\",\"insertion\",function(e,t,r,n,i){if(\":\"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\\s+/)&&(l=a.stepBackward()),l&&\"support.type\"===l.type){var c=n.doc.getLine(s.row);if(\":\"===c.substring(s.column,s.column+1))return{text:\"\",selection:[1,1]};if(!c.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&\":\"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\\s+/)&&(c=l.stepBackward()),c&&\"support.type\"===c.type)if(\";\"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add(\"semicolon\",\"insertion\",function(e,t,r,n,i){if(\";\"===i){var o=r.getCursorPosition();if(\";\"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:\"\",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./css_highlight_rules\").CssHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../worker/worker_client\").WorkerClient,l=e(\"./css_completions\").CssCompletions,c=e(\"./behaviour/css\").CssBehaviour,u=e(\"./folding/cstyle\").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&\"comment\"==i[i.length-1].type||t.match(/^.*\\{\\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(d.prototype),t.Mode=d}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,o=e(\"../../token_iterator\").TokenIterator;e(\"../../lib/lang\");function s(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,r,n,i){if('\"'==i||\"'\"==i){var a=i,l=n.doc.getTextRange(r.getSelectionRange());if(\"\"!==l&&\"'\"!==l&&'\"'!=l&&r.getWrapBehavioursEnabled())return{text:a+l+a,selection:!1};var c=r.getCursorPosition(),u=n.doc.getLine(c.row).substring(c.column,c.column+1),d=new o(n,c.row,c.column),g=d.getCurrentToken();if(u==a&&(s(g,\"attribute-value\")||s(g,\"string\")))return{text:\"\",selection:[1,1]};if(g||(g=d.stepBackward()),!g)return;for(;s(g,\"tag-whitespace\")||s(g,\"whitespace\");)g=d.stepBackward();var h=!u||u.match(/\\s/);if(s(g,\"attribute-equals\")&&(h||\">\"==u)||s(g,\"decl-attribute-equals\")&&(h||\"?\"==u))return{text:a+a,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('\"'==o||\"'\"==o)&&n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o)return i.end.column++,i}),this.add(\"autoclosing\",\"insertion\",function(e,t,r,n,i){if(\">\"==i){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken()||l.stepBackward();if(!c||!(s(c,\"tag-name\")||s(c,\"tag-whitespace\")||s(c,\"attribute-name\")||s(c,\"attribute-equals\")||s(c,\"attribute-value\")))return;if(s(c,\"reference.attribute-value\"))return;if(s(c,\"attribute-value\")){var u=c.value.charAt(0);if('\"'==u||\"'\"==u){var d=c.value.charAt(c.value.length-1),g=l.getCurrentTokenColumn()+c.value.length;if(g>a.column||g==a.column&&u!=d)return}}for(;!s(c,\"tag-name\");)c=l.stepBackward();var h=l.getCurrentTokenRow(),m=l.getCurrentTokenColumn();if(s(l.stepBackward(),\"end-tag-open\"))return;var p=c.value;if(h==a.row&&(p=p.substring(0,a.column-m)),this.voidElements.hasOwnProperty(p.toLowerCase()))return;return{text:\"></\"+p+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,r,n,i){if(\"\\n\"==i){var s=r.getCursorPosition(),a=n.getLine(s.row),l=new o(n,s.row,s.column),c=l.getCurrentToken();if(c&&-1!==c.type.indexOf(\"tag-close\")){if(\"/>\"==c.value)return;for(;c&&-1===c.type.indexOf(\"tag-name\");)c=l.stepBackward();if(!c)return;var u=c.value,d=l.getCurrentTokenRow();if(!(c=l.stepBackward())||-1!==c.type.indexOf(\"end-tag\"))return;if(this.voidElements&&!this.voidElements[u]){var g=n.getTokenAt(s.row,s.column+1),h=(a=n.getLine(d),this.$getIndent(a)),m=h+n.getTabString();return g&&\"</\"===g.value?{text:\"\\n\"+m+\"\\n\"+h,selection:[1,m.length,1,m.length]}:{text:\"\\n\"+m}}}}})};n.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};n.inherits(o,i),function(){this.$getMode=function(e){for(var t in\"string\"!=typeof e&&(e=e[0]),this.subModes)if(0===e.indexOf(t))return this.subModes[t];return null},this.$tryMode=function(e,t,r,n){var i=this.$getMode(e);return i?i.getFoldWidget(t,r,n):\"\"},this.getFoldWidget=function(e,t,r){return this.$tryMode(e.getState(r-1),e,t,r)||this.$tryMode(e.getState(r),e,t,r)||this.defaultMode.getFoldWidget(e,t,r)},this.getFoldWidgetRange=function(e,t,r){var n=this.$getMode(e.getState(r-1));return n&&n.getFoldWidget(e,t,r)||(n=this.$getMode(e.getState(r))),n&&n.getFoldWidget(e,t,r)||(n=this.defaultMode),n.getFoldWidgetRange(e,t,r)}}.call(o.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../../lib/lang\"),e(\"../../range\").Range),o=e(\"./fold_mode\").FoldMode,s=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=n.mixin({},this.voidElements),t&&n.mixin(this.optionalEndTags,t)};n.inherits(a,o);var l=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};function c(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}(function(){this.getFoldWidget=function(e,t,r){var n=this._getFirstTagInLine(e,r);return n?n.closing||!n.tagName&&n.selfClosing?\"markbeginend\"==t?\"end\":\"\":!n.tagName||n.selfClosing||this.voidElements.hasOwnProperty(n.tagName.toLowerCase())||this._findEndTagInLine(e,r,n.tagName,n.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){for(var r=e.getTokens(t),n=new l,i=0;i<r.length;i++){var o=r[i];if(c(o,\"tag-open\")){if(n.end.column=n.start.column+o.value.length,n.closing=c(o,\"end-tag-open\"),!(o=r[++i]))return null;for(n.tagName=o.value,n.end.column+=o.value.length,i++;i<r.length;i++)if(o=r[i],n.end.column+=o.value.length,c(o,\"tag-close\")){n.selfClosing=\"/>\"==o.value;break}return n}if(c(o,\"tag-close\"))return n.selfClosing=\"/>\"==o.value,n;n.start.column+=o.value.length}return null},this._findEndTagInLine=function(e,t,r,n){for(var i=e.getTokens(t),o=0,s=0;s<i.length;s++){var a=i[s];if(!((o+=a.value.length)<n)&&c(a,\"end-tag-open\")&&(a=i[s+1])&&a.value==r)return!0}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,\"tag-open\"))r.closing=c(t,\"end-tag-open\"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn();else if(c(t,\"tag-name\"))r.tagName=t.value;else if(c(t,\"tag-close\"))return r.selfClosing=\"/>\"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),r}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,\"tag-open\"))return r.closing=c(t,\"end-tag-open\"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn(),e.stepBackward(),r;c(t,\"tag-name\")?r.tagName=t.value:c(t,\"tag-close\")&&(r.selfClosing=\"/>\"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){for(;e.length;){var r=e[e.length-1];if(t&&r.tagName!=t.tagName){if(this.optionalEndTags.hasOwnProperty(r.tagName)){e.pop();continue}return null}return e.pop()}},this.getFoldWidgetRange=function(e,t,r){var n=this._getFirstTagInLine(e,r);if(!n)return null;var o,a=[];if(n.closing||n.selfClosing){c=new s(e,r,n.end.column);for(var l={row:r,column:n.start.column};o=this._readTagBackward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing)a.push(o);else if(this._pop(a,o),0==a.length)return o.start.column+=o.tagName.length+2,o.start.row==o.end.row&&o.start.column<o.end.column&&(o.start.column=o.end.column),i.fromPoints(o.start,l)}}else{var c=new s(e,r,n.start.column),u={row:r,column:n.start.column+n.tagName.length+2};for(n.start.row==n.end.row&&(u.column=n.end.column);o=this._readTagForward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing){if(this._pop(a,o),0==a.length)return i.fromPoints(u,o.start)}else a.push(o)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,o=e(\"./xml\").FoldMode,s=e(\"./cstyle\").FoldMode,a=t.FoldMode=function(e,t){i.call(this,new o(e,t),{\"js-\":new s,\"css-\":new s})};n.inherits(a,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"].concat([\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"]),o={html:{manifest:1},head:{},title:{},base:{href:1,target:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},noscript:{href:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},section:{},nav:{},article:{pubdate:1},aside:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},header:{},footer:{},address:{},main:{},p:{},hr:{},pre:{},blockquote:{cite:1},ol:{start:1,reversed:1},ul:{},li:{value:1},dl:{},dt:{},dd:{},figure:{},figcaption:{},div:{},a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},em:{},strong:{},small:{},s:{},cite:{},q:{cite:1},dfn:{},abbr:{},data:{},time:{datetime:1},code:{},var:{},samp:{},kbd:{},sub:{},sup:{},i:{},b:{},u:{},mark:{},ruby:{},rt:{},rp:{},bdi:{},bdo:{},span:{},br:{},wbr:{},ins:{cite:1,datetime:1},del:{cite:1,datetime:1},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},embed:{src:1,height:1,width:1,type:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},param:{name:1,value:1},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},source:{src:1,type:1,media:1},track:{kind:1,src:1,srclang:1,label:1,default:1},canvas:{width:1,height:1},map:{name:1},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},svg:{},math:{},table:{summary:1},caption:{},colgroup:{span:1},col:{span:1},tbody:{},thead:{},tfoot:{},tr:{},td:{headers:1,rowspan:1,colspan:1},th:{headers:1,rowspan:1,colspan:1,scope:1},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},fieldset:{disabled:1,form:1,name:1},legend:{},label:{form:1,for:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},datalist:{},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},output:{for:1,form:1,name:1},progress:{value:1,max:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},details:{open:1},summary:{},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},menu:{type:1,label:1},dialog:{open:1}},s=Object.keys(o);function a(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,\"tag-name\");)i=r.stepBackward();if(i)return i.value}var c=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if(a(i,\"tag-name\")||a(i,\"tag-open\")||a(i,\"end-tag-open\"))return this.getTagCompletions(e,t,r,n);if(a(i,\"tag-whitespace\")||a(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,r,n);if(a(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return/&[A-z]*$/i.test(o)?this.getHTMLEntityCompletions(e,t,r,n):[]},this.getTagCompletions=function(e,t,r,n){return s.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompletions=function(e,t,r,n){var s=l(t,r);if(!s)return[];var a=i;return s in o&&(a=a.concat(Object.keys(o[s]))),a.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})},this.getAttributeValueCompletions=function(e,t,r,i){var s=l(t,r),c=function(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,\"attribute-name\");)i=r.stepBackward();if(i)return i.value}(t,r);if(!s)return[];var u=[];return s in o&&c in o[s]&&\"object\"==typeof o[s][c]&&(u=Object.keys(o[s][c])),u.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:Number.MAX_VALUE}})},this.getHTMLEntityCompletions=function(e,t,r,n){return[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"].map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./text\").Mode,s=e(\"./javascript\").Mode,a=e(\"./css\").Mode,l=e(\"./html_highlight_rules\").HtmlHighlightRules,c=e(\"./behaviour/xml\").XmlBehaviour,u=e(\"./folding/html\").FoldMode,d=e(\"./html_completions\").HtmlCompletions,g=e(\"../worker/worker_client\").WorkerClient,h=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],m=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],p=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=l,this.$behaviour=new c,this.$completer=new d,this.createModeDelegates({\"js-\":s,\"css-\":a}),this.foldingRules=new u(this.voidElements,i.arrayToMap(m))};n.inherits(p,o),function(){this.blockComment={start:\"\\x3c!--\",end:\"--\\x3e\"},this.voidElements=i.arrayToMap(h),this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){if(this.constructor==p){var t=new g([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t}},this.$id=\"ace/mode/html\"}.call(p.prototype),t.Mode=p}),ace.define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./php_highlight_rules\").PhpHighlightRules,s=e(\"./php_highlight_rules\").PhpLangHighlightRules,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,l=(e(\"../range\").Range,e(\"../worker/worker_client\").WorkerClient),c=e(\"./php_completions\").PhpCompletions,u=e(\"./behaviour/cstyle\").CstyleBehaviour,d=e(\"./folding/cstyle\").FoldMode,g=e(\"../unicode\"),h=e(\"./html\").Mode,m=e(\"./javascript\").Mode,p=e(\"./css\").Mode,_=function(e){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new u,this.$completer=new c,this.foldingRules=new d};n.inherits(_,i),function(){this.tokenRe=new RegExp(\"^[\"+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+\"_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+\"_]|s])+\",\"g\"),this.lineCommentStart=[\"//\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&\"comment\"==o[o.length-1].type)return n;if(\"start\"==e)(a=t.match(/^.*[\\{\\(\\[\\:]\\s*$/))&&(n+=r);else if(\"doc-start\"==e){if(\"doc-start\"!=s)return\"\";var a;(a=t.match(/^\\s*(\\/?)\\*/))&&(a[1]&&(n+=\" \"),n+=\"* \")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.$id=\"ace/mode/php-inline\"}.call(_.prototype);var f=function(e){if(e&&e.inline){var t=new _;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}h.call(this),this.HighlightRules=o,this.createModeDelegates({\"js-\":m,\"css-\":p,\"php-\":_}),this.foldingRules.subModes[\"php-\"]=new d};n.inherits(f,h),function(){this.createWorker=function(e){var t=new l([\"ace\"],\"ace/mode/php_worker\",\"PhpWorker\");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call(\"setOptions\",[{inline:!0}]),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/php\"}.call(f.prototype),t.Mode=f}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},o.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},o.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},o.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=o}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,s=\"[a-zA-Z\\\\$_¡-￿][a-zA-Z\\\\d\\\\$_¡-￿]*\",a=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),c(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+s+\")(\\\\.)(prototype)(\\\\.)(\"+s+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+s+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:s},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:s},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),c(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:s},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,r){if(this.next=\"{\"==e?this.nextState:\"\",\"{\"==e&&r.length)r.unshift(\"start\",t);else if(\"}\"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf(\"string\")||-1!=this.next.indexOf(\"jsx\")))return\"paren.quasi.end\";return\"{\"==e?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),e&&e.noJSX||l.call(this)),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};function l(){var e=s.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,r){var n=\"/\"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:\"meta.tag.punctuation.\"+(1==n?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,n)},{type:\"meta.tag.tag-name.xml\",value:e.substr(n)}]},regex:\"</?\"+e,next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var r={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[r,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},r,c(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function c(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\\s*\\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n,i=e(\"../../lib/oop\"),o=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,a=e(\"../../lib/lang\"),l=[\"text\",\"paren.rparen\",\"punctuation.operator\"],c=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],u={},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return n=u[t];n=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},g=function(e,t,r,n){var i=e.end.row-e.start.row;return{text:r+t+n,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},h=function(){this.add(\"braces\",\"insertion\",function(e,t,r,i,o){var s=r.getCursorPosition(),l=i.doc.getLine(s.row);if(\"{\"==o){d(r);var c=r.getSelectionRange(),u=i.doc.getTextRange(c);if(\"\"!==u&&\"{\"!==u&&r.getWrapBehavioursEnabled())return g(c,u,\"{\",\"}\");if(h.isSaneInsertion(r,i))return/[\\]\\}\\)]/.test(l[s.column])||r.inMultiSelectMode?(h.recordAutoInsert(r,i,\"}\"),{text:\"{}\",selection:[1,1]}):(h.recordMaybeInsert(r,i,\"{\"),{text:\"{\",selection:[1,1]})}else if(\"}\"==o){if(d(r),\"}\"==l.substring(s.column,s.column+1))if(null!==i.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row})&&h.isAutoInsertedClosing(s,l,o))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}else{if(\"\\n\"==o||\"\\r\\n\"==o){d(r);var m=\"\";if(h.isMaybeInsertedClosing(s,l)&&(m=a.stringRepeat(\"}\",n.maybeInsertedBrackets),h.clearMaybeInsertedClosing()),\"}\"===l.substring(s.column,s.column+1)){var p=i.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!p)return null;var _=this.$getIndent(i.getLine(p.row))}else{if(!m)return void h.clearMaybeInsertedClosing();_=this.$getIndent(l)}var f=_+i.getTabString();return{text:\"\\n\"+f+\"\\n\"+_+m,selection:[1,f.length,1,f.length]}}h.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,r,i,o){var s=i.doc.getTextRange(o);if(!o.isMultiLine()&&\"{\"==s){if(d(r),\"}\"==i.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,r,n,i){if(\"(\"==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(\"\"!==s&&r.getWrapBehavioursEnabled())return g(o,s,\"(\",\")\");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,\")\"),{text:\"()\",selection:[1,1]}}else if(\")\"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(\")\"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(\")\",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}),this.add(\"parens\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&\"(\"==o&&(d(r),\")\"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add(\"brackets\",\"insertion\",function(e,t,r,n,i){if(\"[\"==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(\"\"!==s&&r.getWrapBehavioursEnabled())return g(o,s,\"[\",\"]\");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,\"]\"),{text:\"[]\",selection:[1,1]}}else if(\"]\"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(\"]\"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(\"]\",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}),this.add(\"brackets\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&\"[\"==o&&(d(r),\"]\"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add(\"string_dquotes\",\"insertion\",function(e,t,r,n,i){if('\"'==i||\"'\"==i){d(r);var o=i,s=r.getSelectionRange(),a=n.doc.getTextRange(s);if(\"\"!==a&&\"'\"!==a&&'\"'!=a&&r.getWrapBehavioursEnabled())return g(s,a,o,o);if(!a){var l=r.getCursorPosition(),c=n.doc.getLine(l.row),u=c.substring(l.column-1,l.column),h=c.substring(l.column,l.column+1),m=n.getTokenAt(l.row,l.column),p=n.getTokenAt(l.row,l.column+1);if(\"\\\\\"==u&&m&&/escape/.test(m.type))return null;var _,f=m&&/string|escape/.test(m.type),b=!p||/string|escape/.test(p.type);if(h==o)_=f!==b;else{if(f&&!b)return null;if(f&&b)return null;var y=n.$mode.tokenRe;y.lastIndex=0;var x=y.test(u);y.lastIndex=0;var v=y.test(u);if(x||v)return null;if(h&&!/[\\s;,.})\\]\\\\]/.test(h))return null;_=!0}return{text:_?o+o:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('\"'==o||\"'\"==o)&&(d(r),n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o))return i.end.column++,i})};h.isSaneInsertion=function(e,t){var r=e.getCursorPosition(),n=new s(t,r.row,r.column);if(!this.$matchTokenType(n.getCurrentToken()||\"text\",l)){var i=new s(t,r.row,r.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==r.row||this.$matchTokenType(n.getCurrentToken()||\"text\",c)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isAutoInsertedClosing(i,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=i.row,n.autoInsertedLineEnd=r+o.substr(i.column),n.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isMaybeInsertedClosing(i,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=i.row,n.maybeInsertedLineStart=o.substr(0,i.column)+r,n.maybeInsertedLineEnd=o.substr(i.column),n.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,r){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&r===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},i.inherits(h,o),t.CstyleBehaviour=h}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return\"\";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?\"start\":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\\s*$/),o=e.getLength(),s=r,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=(e(\"../range\").Range,e(\"../worker/worker_client\").WorkerClient),l=e(\"./behaviour/cstyle\").CstyleBehaviour,c=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&\"comment\"==o[o.length-1].type)return n;if(\"start\"==e||\"no_regex\"==e)(a=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/))&&(n+=r);else if(\"doc-start\"==e){if(\"start\"==s||\"no_regex\"==s)return\"\";var a;(a=t.match(/^\\s*(\\/?)\\*/))&&(a[1]&&(n+=\" \"),n+=\"* \")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(u.prototype),t.Mode=u}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=(e(\"../lib/lang\"),e(\"./text_highlight_rules\").TextHighlightRules),o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",s=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",l=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",c=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",u=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",d=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",g=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",h=function(){var e=this.createKeywordMapper({\"support.function\":s,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":l,\"support.constant.fonts\":c},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+u+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:u},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:d},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:g},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},float:{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e)if(\"string\"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if(\"ruleset\"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+\": $0\",meta:\"property\",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\\w\\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&\"object\"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../behaviour\").Behaviour,e(\"./cstyle\").CstyleBehaviour),o=e(\"../../token_iterator\").TokenIterator,s=function(){this.inherit(i),this.add(\"colon\",\"insertion\",function(e,t,r,n,i){if(\":\"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\\s+/)&&(l=a.stepBackward()),l&&\"support.type\"===l.type){var c=n.doc.getLine(s.row);if(\":\"===c.substring(s.column,s.column+1))return{text:\"\",selection:[1,1]};if(!c.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&\":\"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\\s+/)&&(c=l.stepBackward()),c&&\"support.type\"===c.type)if(\";\"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add(\"semicolon\",\"insertion\",function(e,t,r,n,i){if(\";\"===i){var o=r.getCursorPosition();if(\";\"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:\"\",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./css_highlight_rules\").CssHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../worker/worker_client\").WorkerClient,l=e(\"./css_completions\").CssCompletions,c=e(\"./behaviour/css\").CssBehaviour,u=e(\"./folding/cstyle\").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&\"comment\"==i[i.length-1].type||t.match(/^.*\\{\\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(d.prototype),t.Mode=d}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=\"[_:a-zA-ZÀ-￿][-_:.a-zA-Z0-9À-￿]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"--\\x3e\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===o&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,r){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+r+\".tag-name.xml\"],regex:\"(<)(\"+r+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[r+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,r){return r.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+r+\".tag-name.xml\"],regex:\"(</)(\"+r+\"(?=\\\\s|>|$))\",next:r+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),n.inherits(o,i),t.XmlHighlightRules=o}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./css_highlight_rules\").CssHighlightRules,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,a=e(\"./xml_highlight_rules\").XmlHighlightRules,l=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),c=function(){a.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var r=l[t];return[\"meta.tag.punctuation.\"+(\"<\"==e?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(r?\".\"+r:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(o,\"css-\",\"style\"),this.embedTagRules(new s({noJSX:!0}).getRules(),\"js-\",\"script\"),this.constructor===c&&this.normalizeRules()};n.inherits(c,a),t.HtmlHighlightRules=c}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,o=e(\"../../token_iterator\").TokenIterator;e(\"../../lib/lang\");function s(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,r,n,i){if('\"'==i||\"'\"==i){var a=i,l=n.doc.getTextRange(r.getSelectionRange());if(\"\"!==l&&\"'\"!==l&&'\"'!=l&&r.getWrapBehavioursEnabled())return{text:a+l+a,selection:!1};var c=r.getCursorPosition(),u=n.doc.getLine(c.row).substring(c.column,c.column+1),d=new o(n,c.row,c.column),g=d.getCurrentToken();if(u==a&&(s(g,\"attribute-value\")||s(g,\"string\")))return{text:\"\",selection:[1,1]};if(g||(g=d.stepBackward()),!g)return;for(;s(g,\"tag-whitespace\")||s(g,\"whitespace\");)g=d.stepBackward();var h=!u||u.match(/\\s/);if(s(g,\"attribute-equals\")&&(h||\">\"==u)||s(g,\"decl-attribute-equals\")&&(h||\"?\"==u))return{text:a+a,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('\"'==o||\"'\"==o)&&n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o)return i.end.column++,i}),this.add(\"autoclosing\",\"insertion\",function(e,t,r,n,i){if(\">\"==i){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken()||l.stepBackward();if(!c||!(s(c,\"tag-name\")||s(c,\"tag-whitespace\")||s(c,\"attribute-name\")||s(c,\"attribute-equals\")||s(c,\"attribute-value\")))return;if(s(c,\"reference.attribute-value\"))return;if(s(c,\"attribute-value\")){var u=c.value.charAt(0);if('\"'==u||\"'\"==u){var d=c.value.charAt(c.value.length-1),g=l.getCurrentTokenColumn()+c.value.length;if(g>a.column||g==a.column&&u!=d)return}}for(;!s(c,\"tag-name\");)c=l.stepBackward();var h=l.getCurrentTokenRow(),m=l.getCurrentTokenColumn();if(s(l.stepBackward(),\"end-tag-open\"))return;var p=c.value;if(h==a.row&&(p=p.substring(0,a.column-m)),this.voidElements.hasOwnProperty(p.toLowerCase()))return;return{text:\"></\"+p+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,r,n,i){if(\"\\n\"==i){var s=r.getCursorPosition(),a=n.getLine(s.row),l=new o(n,s.row,s.column),c=l.getCurrentToken();if(c&&-1!==c.type.indexOf(\"tag-close\")){if(\"/>\"==c.value)return;for(;c&&-1===c.type.indexOf(\"tag-name\");)c=l.stepBackward();if(!c)return;var u=c.value,d=l.getCurrentTokenRow();if(!(c=l.stepBackward())||-1!==c.type.indexOf(\"end-tag\"))return;if(this.voidElements&&!this.voidElements[u]){var g=n.getTokenAt(s.row,s.column+1),h=(a=n.getLine(d),this.$getIndent(a)),m=h+n.getTabString();return g&&\"</\"===g.value?{text:\"\\n\"+m+\"\\n\"+h,selection:[1,m.length,1,m.length]}:{text:\"\\n\"+m}}}}})};n.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};n.inherits(o,i),function(){this.$getMode=function(e){for(var t in\"string\"!=typeof e&&(e=e[0]),this.subModes)if(0===e.indexOf(t))return this.subModes[t];return null},this.$tryMode=function(e,t,r,n){var i=this.$getMode(e);return i?i.getFoldWidget(t,r,n):\"\"},this.getFoldWidget=function(e,t,r){return this.$tryMode(e.getState(r-1),e,t,r)||this.$tryMode(e.getState(r),e,t,r)||this.defaultMode.getFoldWidget(e,t,r)},this.getFoldWidgetRange=function(e,t,r){var n=this.$getMode(e.getState(r-1));return n&&n.getFoldWidget(e,t,r)||(n=this.$getMode(e.getState(r))),n&&n.getFoldWidget(e,t,r)||(n=this.defaultMode),n.getFoldWidgetRange(e,t,r)}}.call(o.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../../lib/lang\"),e(\"../../range\").Range),o=e(\"./fold_mode\").FoldMode,s=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=n.mixin({},this.voidElements),t&&n.mixin(this.optionalEndTags,t)};n.inherits(a,o);var l=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};function c(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}(function(){this.getFoldWidget=function(e,t,r){var n=this._getFirstTagInLine(e,r);return n?n.closing||!n.tagName&&n.selfClosing?\"markbeginend\"==t?\"end\":\"\":!n.tagName||n.selfClosing||this.voidElements.hasOwnProperty(n.tagName.toLowerCase())||this._findEndTagInLine(e,r,n.tagName,n.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){for(var r=e.getTokens(t),n=new l,i=0;i<r.length;i++){var o=r[i];if(c(o,\"tag-open\")){if(n.end.column=n.start.column+o.value.length,n.closing=c(o,\"end-tag-open\"),!(o=r[++i]))return null;for(n.tagName=o.value,n.end.column+=o.value.length,i++;i<r.length;i++)if(o=r[i],n.end.column+=o.value.length,c(o,\"tag-close\")){n.selfClosing=\"/>\"==o.value;break}return n}if(c(o,\"tag-close\"))return n.selfClosing=\"/>\"==o.value,n;n.start.column+=o.value.length}return null},this._findEndTagInLine=function(e,t,r,n){for(var i=e.getTokens(t),o=0,s=0;s<i.length;s++){var a=i[s];if(!((o+=a.value.length)<n)&&c(a,\"end-tag-open\")&&(a=i[s+1])&&a.value==r)return!0}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,\"tag-open\"))r.closing=c(t,\"end-tag-open\"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn();else if(c(t,\"tag-name\"))r.tagName=t.value;else if(c(t,\"tag-close\"))return r.selfClosing=\"/>\"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),r}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,\"tag-open\"))return r.closing=c(t,\"end-tag-open\"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn(),e.stepBackward(),r;c(t,\"tag-name\")?r.tagName=t.value:c(t,\"tag-close\")&&(r.selfClosing=\"/>\"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){for(;e.length;){var r=e[e.length-1];if(t&&r.tagName!=t.tagName){if(this.optionalEndTags.hasOwnProperty(r.tagName)){e.pop();continue}return null}return e.pop()}},this.getFoldWidgetRange=function(e,t,r){var n=this._getFirstTagInLine(e,r);if(!n)return null;var o,a=[];if(n.closing||n.selfClosing){c=new s(e,r,n.end.column);for(var l={row:r,column:n.start.column};o=this._readTagBackward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing)a.push(o);else if(this._pop(a,o),0==a.length)return o.start.column+=o.tagName.length+2,o.start.row==o.end.row&&o.start.column<o.end.column&&(o.start.column=o.end.column),i.fromPoints(o.start,l)}}else{var c=new s(e,r,n.start.column),u={row:r,column:n.start.column+n.tagName.length+2};for(n.start.row==n.end.row&&(u.column=n.end.column);o=this._readTagForward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing){if(this._pop(a,o),0==a.length)return i.fromPoints(u,o.start)}else a.push(o)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,o=e(\"./xml\").FoldMode,s=e(\"./cstyle\").FoldMode,a=t.FoldMode=function(e,t){i.call(this,new o(e,t),{\"js-\":new s,\"css-\":new s})};n.inherits(a,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"].concat([\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"]),o={html:{manifest:1},head:{},title:{},base:{href:1,target:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},noscript:{href:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},section:{},nav:{},article:{pubdate:1},aside:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},header:{},footer:{},address:{},main:{},p:{},hr:{},pre:{},blockquote:{cite:1},ol:{start:1,reversed:1},ul:{},li:{value:1},dl:{},dt:{},dd:{},figure:{},figcaption:{},div:{},a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},em:{},strong:{},small:{},s:{},cite:{},q:{cite:1},dfn:{},abbr:{},data:{},time:{datetime:1},code:{},var:{},samp:{},kbd:{},sub:{},sup:{},i:{},b:{},u:{},mark:{},ruby:{},rt:{},rp:{},bdi:{},bdo:{},span:{},br:{},wbr:{},ins:{cite:1,datetime:1},del:{cite:1,datetime:1},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},embed:{src:1,height:1,width:1,type:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},param:{name:1,value:1},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},source:{src:1,type:1,media:1},track:{kind:1,src:1,srclang:1,label:1,default:1},canvas:{width:1,height:1},map:{name:1},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},svg:{},math:{},table:{summary:1},caption:{},colgroup:{span:1},col:{span:1},tbody:{},thead:{},tfoot:{},tr:{},td:{headers:1,rowspan:1,colspan:1},th:{headers:1,rowspan:1,colspan:1,scope:1},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},fieldset:{disabled:1,form:1,name:1},legend:{},label:{form:1,for:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},datalist:{},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},output:{for:1,form:1,name:1},progress:{value:1,max:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},details:{open:1},summary:{},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},menu:{type:1,label:1},dialog:{open:1}},s=Object.keys(o);function a(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,\"tag-name\");)i=r.stepBackward();if(i)return i.value}var c=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if(a(i,\"tag-name\")||a(i,\"tag-open\")||a(i,\"end-tag-open\"))return this.getTagCompletions(e,t,r,n);if(a(i,\"tag-whitespace\")||a(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,r,n);if(a(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return/&[A-z]*$/i.test(o)?this.getHTMLEntityCompletions(e,t,r,n):[]},this.getTagCompletions=function(e,t,r,n){return s.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompletions=function(e,t,r,n){var s=l(t,r);if(!s)return[];var a=i;return s in o&&(a=a.concat(Object.keys(o[s]))),a.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})},this.getAttributeValueCompletions=function(e,t,r,i){var s=l(t,r),c=function(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,\"attribute-name\");)i=r.stepBackward();if(i)return i.value}(t,r);if(!s)return[];var u=[];return s in o&&c in o[s]&&\"object\"==typeof o[s][c]&&(u=Object.keys(o[s][c])),u.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:Number.MAX_VALUE}})},this.getHTMLEntityCompletions=function(e,t,r,n){return[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"].map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./text\").Mode,s=e(\"./javascript\").Mode,a=e(\"./css\").Mode,l=e(\"./html_highlight_rules\").HtmlHighlightRules,c=e(\"./behaviour/xml\").XmlBehaviour,u=e(\"./folding/html\").FoldMode,d=e(\"./html_completions\").HtmlCompletions,g=e(\"../worker/worker_client\").WorkerClient,h=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],m=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],p=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=l,this.$behaviour=new c,this.$completer=new d,this.createModeDelegates({\"js-\":s,\"css-\":a}),this.foldingRules=new u(this.voidElements,i.arrayToMap(m))};n.inherits(p,o),function(){this.blockComment={start:\"\\x3c!--\",end:\"--\\x3e\"},this.voidElements=i.arrayToMap(h),this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){if(this.constructor==p){var t=new g([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t}},this.$id=\"ace/mode/html\"}.call(p.prototype),t.Mode=p}),ace.define(\"ace/mode/twig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=(e(\"../lib/lang\"),e(\"./html_highlight_rules\").HtmlHighlightRules),o=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){i.call(this);var e=\"autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim\";e=e+\"|end\"+e.replace(/\\|/g,\"|end\");var t=this.createKeywordMapper({\"keyword.control.twig\":e,\"support.function.twig\":[\"abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode\",\"attribute|constant|cycle|date|dump|parent|random|range|template_from_string\",\"constant|divisibleby|sameas|defined|empty|even|iterable|odd\"].join(\"|\"),\"keyword.operator.twig\":\"b-and|b-xor|b-or|in|is|and|or|not\",\"constant.language.twig\":\"null|none|true|false\"},\"identifier\");for(var r in this.$rules)this.$rules[r].unshift({token:\"variable.other.readwrite.local.twig\",regex:\"\\\\{\\\\{-?\",push:\"twig-start\"},{token:\"meta.tag.twig\",regex:\"\\\\{%-?\",push:\"twig-start\"},{token:\"comment.block.twig\",regex:\"\\\\{#-?\",push:\"twig-comment\"});this.$rules[\"twig-comment\"]=[{token:\"comment.block.twig\",regex:\".*-?#\\\\}\",next:\"pop\"}],this.$rules[\"twig-start\"]=[{token:\"variable.other.readwrite.local.twig\",regex:\"-?\\\\}\\\\}\",next:\"pop\"},{token:\"meta.tag.twig\",regex:\"-?%\\\\}\",next:\"pop\"},{token:\"string\",regex:\"'\",next:\"twig-qstring\"},{token:\"string\",regex:'\"',next:\"twig-qqstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:t,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator.assignment\",regex:\"=|~\"},{token:\"keyword.operator.comparison\",regex:\"==|!=|<|>|>=|<=|===\"},{token:\"keyword.operator.arithmetic\",regex:\"\\\\+|-|/|%|//|\\\\*|\\\\*\\\\*\"},{token:\"keyword.operator.other\",regex:\"\\\\.\\\\.|\\\\|\"},{token:\"punctuation.operator\",regex:/\\?|\\:|\\,|\\;|\\./},{token:\"paren.lparen\",regex:/[\\[\\({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"text\",regex:\"\\\\s+\"}],this.$rules[\"twig-qqstring\"]=[{token:\"constant.language.escape\",regex:/\\\\[\\\\\"$#ntr]|#{[^\"}]*}/},{token:\"string\",regex:'\"',next:\"twig-start\"},{defaultToken:\"string\"}],this.$rules[\"twig-qstring\"]=[{token:\"constant.language.escape\",regex:/\\\\[\\\\'ntr]}/},{token:\"string\",regex:\"'\",next:\"twig-start\"},{defaultToken:\"string\"}],this.normalizeRules()};n.inherits(s,o),t.TwigHighlightRules=s}),ace.define(\"ace/mode/twig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/twig_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./html\").Mode,o=e(\"./twig_highlight_rules\").TwigHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=function(){i.call(this),this.HighlightRules=o,this.$outdent=new s};n.inherits(a,i),function(){this.blockComment={start:\"{#\",end:\"#}\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens;i.state;if(o.length&&\"comment\"==o[o.length-1].type)return n;\"start\"==e&&(t.match(/^.*[\\{\\(\\[]\\s*$/)&&(n+=r));return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.$id=\"ace/mode/twig\"}.call(a.prototype),t.Mode=a}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},o.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},o.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},o.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=o}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,s=\"[a-zA-Z\\\\$_¡-￿][a-zA-Z\\\\d\\\\$_¡-￿]*\",a=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),c(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+s+\")(\\\\.)(prototype)(\\\\.)(\"+s+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+s+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:s},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:s},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),c(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:s},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,r){if(this.next=\"{\"==e?this.nextState:\"\",\"{\"==e&&r.length)r.unshift(\"start\",t);else if(\"}\"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf(\"string\")||-1!=this.next.indexOf(\"jsx\")))return\"paren.quasi.end\";return\"{\"==e?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),e&&0==e.jsx||l.call(this)),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};function l(){var e=s.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,r){var n=\"/\"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:\"meta.tag.punctuation.\"+(1==n?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,n)},{type:\"meta.tag.tag-name.xml\",value:e.substr(n)}]},regex:\"</?\"+e,next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var r={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[r,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},r,c(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function c(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\\s*\\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return\"\";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?\"start\":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\\s*$/),o=e.getLength(),s=r,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../worker/worker_client\").WorkerClient,l=e(\"./behaviour/cstyle\").CstyleBehaviour,c=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&\"comment\"==o[o.length-1].type)return n;if(\"start\"==e||\"no_regex\"==e)(a=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/))&&(n+=r);else if(\"doc-start\"==e){if(\"start\"==s||\"no_regex\"==s)return\"\";var a;(a=t.match(/^\\s*(\\/?)\\*/))&&(a[1]&&(n+=\" \"),n+=\"* \")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(u.prototype),t.Mode=u}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=\"[_:a-zA-ZÀ-￿][-_:.a-zA-Z0-9À-￿]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"--\\x3e\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===o&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,r){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+r+\".tag-name.xml\"],regex:\"(<)(\"+r+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[r+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,r){return r.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+r+\".tag-name.xml\"],regex:\"(</)(\"+r+\"(?=\\\\s|>|$))\",next:r+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),n.inherits(o,i),t.XmlHighlightRules=o}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,o=e(\"../../token_iterator\").TokenIterator;e(\"../../lib/lang\");function s(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,r,n,i){if('\"'==i||\"'\"==i){var a=i,l=n.doc.getTextRange(r.getSelectionRange());if(\"\"!==l&&\"'\"!==l&&'\"'!=l&&r.getWrapBehavioursEnabled())return{text:a+l+a,selection:!1};var c=r.getCursorPosition(),u=n.doc.getLine(c.row).substring(c.column,c.column+1),d=new o(n,c.row,c.column),g=d.getCurrentToken();if(u==a&&(s(g,\"attribute-value\")||s(g,\"string\")))return{text:\"\",selection:[1,1]};if(g||(g=d.stepBackward()),!g)return;for(;s(g,\"tag-whitespace\")||s(g,\"whitespace\");)g=d.stepBackward();var h=!u||u.match(/\\s/);if(s(g,\"attribute-equals\")&&(h||\">\"==u)||s(g,\"decl-attribute-equals\")&&(h||\"?\"==u))return{text:a+a,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('\"'==o||\"'\"==o)&&n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o)return i.end.column++,i}),this.add(\"autoclosing\",\"insertion\",function(e,t,r,n,i){if(\">\"==i){var a=r.getSelectionRange().start,l=new o(n,a.row,a.column),c=l.getCurrentToken()||l.stepBackward();if(!c||!(s(c,\"tag-name\")||s(c,\"tag-whitespace\")||s(c,\"attribute-name\")||s(c,\"attribute-equals\")||s(c,\"attribute-value\")))return;if(s(c,\"reference.attribute-value\"))return;if(s(c,\"attribute-value\")){var u=c.value.charAt(0);if('\"'==u||\"'\"==u){var d=c.value.charAt(c.value.length-1),g=l.getCurrentTokenColumn()+c.value.length;if(g>a.column||g==a.column&&u!=d)return}}for(;!s(c,\"tag-name\");)if(\"<\"==(c=l.stepBackward()).value){c=l.stepForward();break}var h=l.getCurrentTokenRow(),m=l.getCurrentTokenColumn();if(s(l.stepBackward(),\"end-tag-open\"))return;var p=c.value;if(h==a.row&&(p=p.substring(0,a.column-m)),this.voidElements.hasOwnProperty(p.toLowerCase()))return;return{text:\"></\"+p+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,r,n,i){if(\"\\n\"==i){var s=r.getCursorPosition(),a=n.getLine(s.row),l=new o(n,s.row,s.column),c=l.getCurrentToken();if(c&&-1!==c.type.indexOf(\"tag-close\")){if(\"/>\"==c.value)return;for(;c&&-1===c.type.indexOf(\"tag-name\");)c=l.stepBackward();if(!c)return;var u=c.value,d=l.getCurrentTokenRow();if(!(c=l.stepBackward())||-1!==c.type.indexOf(\"end-tag\"))return;if(this.voidElements&&!this.voidElements[u]){var g=n.getTokenAt(s.row,s.column+1),h=(a=n.getLine(d),this.$getIndent(a)),m=h+n.getTabString();return g&&\"</\"===g.value?{text:\"\\n\"+m+\"\\n\"+h,selection:[1,m.length,1,m.length]}:{text:\"\\n\"+m}}}}})};n.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../../lib/lang\"),e(\"../../range\").Range),o=e(\"./fold_mode\").FoldMode,s=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=n.mixin({},this.voidElements),t&&n.mixin(this.optionalEndTags,t)};n.inherits(a,o);var l=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};function c(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}(function(){this.getFoldWidget=function(e,t,r){var n=this._getFirstTagInLine(e,r);return n?n.closing||!n.tagName&&n.selfClosing?\"markbeginend\"==t?\"end\":\"\":!n.tagName||n.selfClosing||this.voidElements.hasOwnProperty(n.tagName.toLowerCase())||this._findEndTagInLine(e,r,n.tagName,n.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){for(var r=e.getTokens(t),n=new l,i=0;i<r.length;i++){var o=r[i];if(c(o,\"tag-open\")){if(n.end.column=n.start.column+o.value.length,n.closing=c(o,\"end-tag-open\"),!(o=r[++i]))return null;for(n.tagName=o.value,n.end.column+=o.value.length,i++;i<r.length;i++)if(o=r[i],n.end.column+=o.value.length,c(o,\"tag-close\")){n.selfClosing=\"/>\"==o.value;break}return n}if(c(o,\"tag-close\"))return n.selfClosing=\"/>\"==o.value,n;n.start.column+=o.value.length}return null},this._findEndTagInLine=function(e,t,r,n){for(var i=e.getTokens(t),o=0,s=0;s<i.length;s++){var a=i[s];if(!((o+=a.value.length)<n)&&c(a,\"end-tag-open\")&&(a=i[s+1])&&a.value==r)return!0}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,\"tag-open\"))r.closing=c(t,\"end-tag-open\"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn();else if(c(t,\"tag-name\"))r.tagName=t.value;else if(c(t,\"tag-close\"))return r.selfClosing=\"/>\"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),r}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,\"tag-open\"))return r.closing=c(t,\"end-tag-open\"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn(),e.stepBackward(),r;c(t,\"tag-name\")?r.tagName=t.value:c(t,\"tag-close\")&&(r.selfClosing=\"/>\"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){for(;e.length;){var r=e[e.length-1];if(t&&r.tagName!=t.tagName){if(this.optionalEndTags.hasOwnProperty(r.tagName)){e.pop();continue}return null}return e.pop()}},this.getFoldWidgetRange=function(e,t,r){var n=this._getFirstTagInLine(e,r);if(!n)return null;var o,a=[];if(n.closing||n.selfClosing){c=new s(e,r,n.end.column);for(var l={row:r,column:n.start.column};o=this._readTagBackward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing)a.push(o);else if(this._pop(a,o),0==a.length)return o.start.column+=o.tagName.length+2,o.start.row==o.end.row&&o.start.column<o.end.column&&(o.start.column=o.end.column),i.fromPoints(o.start,l)}}else{var c=new s(e,r,n.start.column),u={row:r,column:n.start.column+n.tagName.length+2};for(n.start.row==n.end.row&&(u.column=n.end.column);o=this._readTagForward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing){if(this._pop(a,o),0==a.length)return i.fromPoints(u,o.start)}else a.push(o)}}}}).call(a.prototype)}),ace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./text\").Mode,s=e(\"./xml_highlight_rules\").XmlHighlightRules,a=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/xml\").FoldMode,c=e(\"../worker/worker_client\").WorkerClient,u=function(){this.HighlightRules=s,this.$behaviour=new a,this.foldingRules=new l};n.inherits(u,o),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"\\x3c!--\",end:\"--\\x3e\"},this.createWorker=function(e){var t=new c([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(u.prototype),t.Mode=u}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=(e(\"../lib/lang\"),e(\"./text_highlight_rules\").TextHighlightRules),o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",s=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",l=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",c=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",u=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",d=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",g=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",h=function(){var e=this.createKeywordMapper({\"support.function\":s,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":l,\"support.constant.fonts\":c},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+u+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:u},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:d},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:g},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},float:{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e)if(\"string\"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if(\"ruleset\"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+\": $0\",meta:\"property\",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\\w\\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&\"object\"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../behaviour\").Behaviour,e(\"./cstyle\").CstyleBehaviour),o=e(\"../../token_iterator\").TokenIterator,s=function(){this.inherit(i),this.add(\"colon\",\"insertion\",function(e,t,r,n,i){if(\":\"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\\s+/)&&(l=a.stepBackward()),l&&\"support.type\"===l.type){var c=n.doc.getLine(s.row);if(\":\"===c.substring(s.column,s.column+1))return{text:\"\",selection:[1,1]};if(!c.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&\":\"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\\s+/)&&(c=l.stepBackward()),c&&\"support.type\"===c.type)if(\";\"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add(\"semicolon\",\"insertion\",function(e,t,r,n,i){if(\";\"===i){var o=r.getCursorPosition();if(\";\"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:\"\",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./css_highlight_rules\").CssHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../worker/worker_client\").WorkerClient,l=e(\"./css_completions\").CssCompletions,c=e(\"./behaviour/css\").CssBehaviour,u=e(\"./folding/cstyle\").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&\"comment\"==i[i.length-1].type||t.match(/^.*\\{\\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(d.prototype),t.Mode=d}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./css_highlight_rules\").CssHighlightRules,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,a=e(\"./xml_highlight_rules\").XmlHighlightRules,l=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),c=function(){a.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var r=l[t];return[\"meta.tag.punctuation.\"+(\"<\"==e?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(r?\".\"+r:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(o,\"css-\",\"style\"),this.embedTagRules(new s({jsx:!1}).getRules(),\"js-\",\"script\"),this.constructor===c&&this.normalizeRules()};n.inherits(c,a),t.HtmlHighlightRules=c}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};n.inherits(o,i),function(){this.$getMode=function(e){for(var t in\"string\"!=typeof e&&(e=e[0]),this.subModes)if(0===e.indexOf(t))return this.subModes[t];return null},this.$tryMode=function(e,t,r,n){var i=this.$getMode(e);return i?i.getFoldWidget(t,r,n):\"\"},this.getFoldWidget=function(e,t,r){return this.$tryMode(e.getState(r-1),e,t,r)||this.$tryMode(e.getState(r),e,t,r)||this.defaultMode.getFoldWidget(e,t,r)},this.getFoldWidgetRange=function(e,t,r){var n=this.$getMode(e.getState(r-1));return n&&n.getFoldWidget(e,t,r)||(n=this.$getMode(e.getState(r))),n&&n.getFoldWidget(e,t,r)||(n=this.defaultMode),n.getFoldWidgetRange(e,t,r)}}.call(o.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,o=e(\"./xml\").FoldMode,s=e(\"./cstyle\").FoldMode,a=t.FoldMode=function(e,t){i.call(this,new o(e,t),{\"js-\":new s,\"css-\":new s})};n.inherits(a,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"].concat([\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"]),o={html:{manifest:1},head:{},title:{},base:{href:1,target:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},noscript:{href:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},section:{},nav:{},article:{pubdate:1},aside:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},header:{},footer:{},address:{},main:{},p:{},hr:{},pre:{},blockquote:{cite:1},ol:{start:1,reversed:1},ul:{},li:{value:1},dl:{},dt:{},dd:{},figure:{},figcaption:{},div:{},a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},em:{},strong:{},small:{},s:{},cite:{},q:{cite:1},dfn:{},abbr:{},data:{},time:{datetime:1},code:{},var:{},samp:{},kbd:{},sub:{},sup:{},i:{},b:{},u:{},mark:{},ruby:{},rt:{},rp:{},bdi:{},bdo:{},span:{},br:{},wbr:{},ins:{cite:1,datetime:1},del:{cite:1,datetime:1},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},embed:{src:1,height:1,width:1,type:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},param:{name:1,value:1},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},source:{src:1,type:1,media:1},track:{kind:1,src:1,srclang:1,label:1,default:1},canvas:{width:1,height:1},map:{name:1},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},svg:{},math:{},table:{summary:1},caption:{},colgroup:{span:1},col:{span:1},tbody:{},thead:{},tfoot:{},tr:{},td:{headers:1,rowspan:1,colspan:1},th:{headers:1,rowspan:1,colspan:1,scope:1},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},fieldset:{disabled:1,form:1,name:1},legend:{},label:{form:1,for:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},datalist:{},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},output:{for:1,form:1,name:1},progress:{value:1,max:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},details:{open:1},summary:{},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},menu:{type:1,label:1},dialog:{open:1}},s=Object.keys(o);function a(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,\"tag-name\");)i=r.stepBackward();if(i)return i.value}var c=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if(a(i,\"tag-name\")||a(i,\"tag-open\")||a(i,\"end-tag-open\"))return this.getTagCompletions(e,t,r,n);if(a(i,\"tag-whitespace\")||a(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,r,n);if(a(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return/&[a-z]*$/i.test(o)?this.getHTMLEntityCompletions(e,t,r,n):[]},this.getTagCompletions=function(e,t,r,n){return s.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompletions=function(e,t,r,n){var s=l(t,r);if(!s)return[];var a=i;return s in o&&(a=a.concat(Object.keys(o[s]))),a.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})},this.getAttributeValueCompletions=function(e,t,r,i){var s=l(t,r),c=function(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,\"attribute-name\");)i=r.stepBackward();if(i)return i.value}(t,r);if(!s)return[];var u=[];return s in o&&c in o[s]&&\"object\"==typeof o[s][c]&&(u=Object.keys(o[s][c])),u.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:Number.MAX_VALUE}})},this.getHTMLEntityCompletions=function(e,t,r,n){return[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"].map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./text\").Mode,s=e(\"./javascript\").Mode,a=e(\"./css\").Mode,l=e(\"./html_highlight_rules\").HtmlHighlightRules,c=e(\"./behaviour/xml\").XmlBehaviour,u=e(\"./folding/html\").FoldMode,d=e(\"./html_completions\").HtmlCompletions,g=e(\"../worker/worker_client\").WorkerClient,h=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],m=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],p=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=l,this.$behaviour=new c,this.$completer=new d,this.createModeDelegates({\"js-\":s,\"css-\":a}),this.foldingRules=new u(this.voidElements,i.arrayToMap(m))};n.inherits(p,o),function(){this.blockComment={start:\"\\x3c!--\",end:\"--\\x3e\"},this.voidElements=i.arrayToMap(h),this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){if(this.constructor==p){var t=new g([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t}},this.$id=\"ace/mode/html\"}.call(p.prototype),t.Mode=p}),ace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,a=e(\"./xml_highlight_rules\").XmlHighlightRules,l=e(\"./html_highlight_rules\").HtmlHighlightRules,c=e(\"./css_highlight_rules\").CssHighlightRules,u=function(e){return\"(?:[^\"+i.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"};function d(e,t){return{token:\"support.function\",regex:\"^\\\\s*```\"+e+\"\\\\s*$\",push:t+\"start\"}}var g=function(){l.call(this),this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s*[^ #]|\\s+#.)/,next:\"header\"},d(\"(?:javascript|js)\",\"jscode-\"),d(\"xml\",\"xmlcode-\"),d(\"html\",\"htmlcode-\"),d(\"css\",\"csscode-\"),{token:\"support.function\",regex:\"^\\\\s*```\\\\s*\\\\S*(?:{.*?\\\\})?\\\\s*$\",next:\"githubblock\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+u(\"]\")+\")(\\\\]\\\\s*\\\\[)(\"+u(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\[)(\"+u(\"]\")+')(\\\\]\\\\()((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)(\\\\s*\"'+u('\"')+'\"\\\\s*)?(\\\\))'},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},{token:\"support.function\",regex:\"^\\\\s*```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$\",next:\"githubblock\"},{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"start\"},{token:\"support.function\",regex:\".+\"}]}),this.embedRules(s,\"jscode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(l,\"htmlcode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(c,\"csscode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(a,\"xmlcode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.normalizeRules()};n.inherits(g,o),t.MarkdownHighlightRules=g}),ace.define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,o=e(\"../../range\").Range,s=t.FoldMode=function(){};n.inherits(s,i),function(){this.foldingStartMarker=/^(?:[=-]+\\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);return this.foldingStartMarker.test(n)?\"`\"==n[0]&&\"start\"==e.bgTokenizer.getState(r)?\"end\":\"start\":\"\"},this.getFoldWidgetRange=function(e,t,r){var n=e.getLine(r),i=n.length,s=e.getLength(),a=r,l=r;if(n.match(this.foldingStartMarker)){if(\"`\"==n[0]){if(\"start\"!==e.bgTokenizer.getState(r)){for(;++r<s&&!(\"`\"==(n=e.getLine(r))[0]&\"```\"==n.substring(0,3)););return new o(a,i,r,0)}for(;r-- >0&&!(\"`\"==(n=e.getLine(r))[0]&\"```\"==n.substring(0,3)););return new o(r,n.length,a,0)}var c,u=\"markup.heading\";if(h(r)){for(var d=m();++r<s;){if(h(r))if(m()>=d)break}if((l=r-(c&&-1!=[\"=\",\"-\"].indexOf(c.value[0])?2:1))>a)for(;l>a&&/^\\s*$/.test(e.getLine(l));)l--;if(l>a){var g=e.getLine(l).length;return new o(a,i,l,g)}}}function h(t){return(c=e.getTokens(t)[0])&&0===c.type.lastIndexOf(u,0)}function m(){var e=c.value[0];return\"=\"==e?6:\"-\"==e?5:7-c.value.search(/[^#]/)}}}.call(s.prototype)}),ace.define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./javascript\").Mode,s=e(\"./xml\").Mode,a=e(\"./html\").Mode,l=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,c=e(\"./folding/markdown\").FoldMode,u=function(){this.HighlightRules=l,this.createModeDelegates({\"js-\":o,\"xml-\":s,\"html-\":a}),this.foldingRules=new c,this.$behaviour=this.$defaultBehaviour};n.inherits(u,i),function(){this.type=\"text\",this.blockComment={start:\"\\x3c!--\",end:\"--\\x3e\"},this.getNextLineIndent=function(e,t,r){if(\"listblock\"==e){var n=/^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(t);if(!n)return\"\";var i=n[2];return i||(i=parseInt(n[3],10)+1+\".\"),n[1]+i+n[4]}return this.$getIndent(t)},this.$id=\"ace/mode/markdown\"}.call(u.prototype),t.Mode=u}),ace.define(\"ace/mode/plain_text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./behaviour\").Behaviour,a=function(){this.HighlightRules=o,this.$behaviour=new s};n.inherits(a,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,r){return\"\"},this.$id=\"ace/mode/plain_text\"}.call(a.prototype),t.Mode=a}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},o.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},o.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},o.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=o}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,s=\"[a-zA-Z\\\\$_¡-￿][a-zA-Z\\\\d\\\\$_¡-￿]*\",a=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),c(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+s+\")(\\\\.)(prototype)(\\\\.)(\"+s+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+s+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:s},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:s},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),c(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:s},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,r){if(this.next=\"{\"==e?this.nextState:\"\",\"{\"==e&&r.length)r.unshift(\"start\",t);else if(\"}\"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf(\"string\")||-1!=this.next.indexOf(\"jsx\")))return\"paren.quasi.end\";return\"{\"==e?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),e&&0==e.jsx||l.call(this)),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};function l(){var e=s.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,r){var n=\"/\"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:\"meta.tag.punctuation.\"+(1==n?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,n)},{type:\"meta.tag.tag-name.xml\",value:e.substr(n)}]},regex:\"</?\"+e,next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var r={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[r,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},r,c(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function c(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\\s*\\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return\"\";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?\"start\":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\\s*$/),o=e.getLength(),s=r,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../worker/worker_client\").WorkerClient,l=e(\"./behaviour/cstyle\").CstyleBehaviour,c=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&\"comment\"==o[o.length-1].type)return n;if(\"start\"==e||\"no_regex\"==e)(a=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/))&&(n+=r);else if(\"doc-start\"==e){if(\"start\"==s||\"no_regex\"==s)return\"\";var a;(a=t.match(/^\\s*(\\/?)\\*/))&&(a[1]&&(n+=\" \"),n+=\"* \")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(u.prototype),t.Mode=u}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=(e(\"../lib/lang\"),e(\"./text_highlight_rules\").TextHighlightRules),o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",s=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",l=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",c=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",u=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",d=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",g=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",h=function(){var e=this.createKeywordMapper({\"support.function\":s,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":l,\"support.constant.fonts\":c},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+u+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:u},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:d},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:g},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},float:{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e)if(\"string\"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if(\"ruleset\"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+\": $0\",meta:\"property\",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\\w\\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&\"object\"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../behaviour\").Behaviour,e(\"./cstyle\").CstyleBehaviour),o=e(\"../../token_iterator\").TokenIterator,s=function(){this.inherit(i),this.add(\"colon\",\"insertion\",function(e,t,r,n,i){if(\":\"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\\s+/)&&(l=a.stepBackward()),l&&\"support.type\"===l.type){var c=n.doc.getLine(s.row);if(\":\"===c.substring(s.column,s.column+1))return{text:\"\",selection:[1,1]};if(!c.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&\":\"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\\s+/)&&(c=l.stepBackward()),c&&\"support.type\"===c.type)if(\";\"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add(\"semicolon\",\"insertion\",function(e,t,r,n,i){if(\";\"===i){var o=r.getCursorPosition();if(\";\"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:\"\",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./css_highlight_rules\").CssHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../worker/worker_client\").WorkerClient,l=e(\"./css_completions\").CssCompletions,c=e(\"./behaviour/css\").CssBehaviour,u=e(\"./folding/cstyle\").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&\"comment\"==i[i.length-1].type||t.match(/^.*\\{\\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(d.prototype),t.Mode=d}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=\"[_:a-zA-ZÀ-￿][-_:.a-zA-Z0-9À-￿]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"--\\x3e\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===o&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,r){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+r+\".tag-name.xml\"],regex:\"(<)(\"+r+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[r+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,r){return r.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+r+\".tag-name.xml\"],regex:\"(</)(\"+r+\"(?=\\\\s|>|$))\",next:r+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),n.inherits(o,i),t.XmlHighlightRules=o}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./css_highlight_rules\").CssHighlightRules,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,a=e(\"./xml_highlight_rules\").XmlHighlightRules,l=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),c=function(){a.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var r=l[t];return[\"meta.tag.punctuation.\"+(\"<\"==e?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(r?\".\"+r:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(o,\"css-\",\"style\"),this.embedTagRules(new s({jsx:!1}).getRules(),\"js-\",\"script\"),this.constructor===c&&this.normalizeRules()};n.inherits(c,a),t.HtmlHighlightRules=c}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,o=e(\"../../token_iterator\").TokenIterator;e(\"../../lib/lang\");function s(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,r,n,i){if('\"'==i||\"'\"==i){var a=i,l=n.doc.getTextRange(r.getSelectionRange());if(\"\"!==l&&\"'\"!==l&&'\"'!=l&&r.getWrapBehavioursEnabled())return{text:a+l+a,selection:!1};var c=r.getCursorPosition(),u=n.doc.getLine(c.row).substring(c.column,c.column+1),d=new o(n,c.row,c.column),g=d.getCurrentToken();if(u==a&&(s(g,\"attribute-value\")||s(g,\"string\")))return{text:\"\",selection:[1,1]};if(g||(g=d.stepBackward()),!g)return;for(;s(g,\"tag-whitespace\")||s(g,\"whitespace\");)g=d.stepBackward();var h=!u||u.match(/\\s/);if(s(g,\"attribute-equals\")&&(h||\">\"==u)||s(g,\"decl-attribute-equals\")&&(h||\"?\"==u))return{text:a+a,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('\"'==o||\"'\"==o)&&n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o)return i.end.column++,i}),this.add(\"autoclosing\",\"insertion\",function(e,t,r,n,i){if(\">\"==i){var a=r.getSelectionRange().start,l=new o(n,a.row,a.column),c=l.getCurrentToken()||l.stepBackward();if(!c||!(s(c,\"tag-name\")||s(c,\"tag-whitespace\")||s(c,\"attribute-name\")||s(c,\"attribute-equals\")||s(c,\"attribute-value\")))return;if(s(c,\"reference.attribute-value\"))return;if(s(c,\"attribute-value\")){var u=c.value.charAt(0);if('\"'==u||\"'\"==u){var d=c.value.charAt(c.value.length-1),g=l.getCurrentTokenColumn()+c.value.length;if(g>a.column||g==a.column&&u!=d)return}}for(;!s(c,\"tag-name\");)if(\"<\"==(c=l.stepBackward()).value){c=l.stepForward();break}var h=l.getCurrentTokenRow(),m=l.getCurrentTokenColumn();if(s(l.stepBackward(),\"end-tag-open\"))return;var p=c.value;if(h==a.row&&(p=p.substring(0,a.column-m)),this.voidElements.hasOwnProperty(p.toLowerCase()))return;return{text:\"></\"+p+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,r,n,i){if(\"\\n\"==i){var s=r.getCursorPosition(),a=n.getLine(s.row),l=new o(n,s.row,s.column),c=l.getCurrentToken();if(c&&-1!==c.type.indexOf(\"tag-close\")){if(\"/>\"==c.value)return;for(;c&&-1===c.type.indexOf(\"tag-name\");)c=l.stepBackward();if(!c)return;var u=c.value,d=l.getCurrentTokenRow();if(!(c=l.stepBackward())||-1!==c.type.indexOf(\"end-tag\"))return;if(this.voidElements&&!this.voidElements[u]){var g=n.getTokenAt(s.row,s.column+1),h=(a=n.getLine(d),this.$getIndent(a)),m=h+n.getTabString();return g&&\"</\"===g.value?{text:\"\\n\"+m+\"\\n\"+h,selection:[1,m.length,1,m.length]}:{text:\"\\n\"+m}}}}})};n.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};n.inherits(o,i),function(){this.$getMode=function(e){for(var t in\"string\"!=typeof e&&(e=e[0]),this.subModes)if(0===e.indexOf(t))return this.subModes[t];return null},this.$tryMode=function(e,t,r,n){var i=this.$getMode(e);return i?i.getFoldWidget(t,r,n):\"\"},this.getFoldWidget=function(e,t,r){return this.$tryMode(e.getState(r-1),e,t,r)||this.$tryMode(e.getState(r),e,t,r)||this.defaultMode.getFoldWidget(e,t,r)},this.getFoldWidgetRange=function(e,t,r){var n=this.$getMode(e.getState(r-1));return n&&n.getFoldWidget(e,t,r)||(n=this.$getMode(e.getState(r))),n&&n.getFoldWidget(e,t,r)||(n=this.defaultMode),n.getFoldWidgetRange(e,t,r)}}.call(o.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../../lib/lang\"),e(\"../../range\").Range),o=e(\"./fold_mode\").FoldMode,s=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=n.mixin({},this.voidElements),t&&n.mixin(this.optionalEndTags,t)};n.inherits(a,o);var l=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};function c(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}(function(){this.getFoldWidget=function(e,t,r){var n=this._getFirstTagInLine(e,r);return n?n.closing||!n.tagName&&n.selfClosing?\"markbeginend\"==t?\"end\":\"\":!n.tagName||n.selfClosing||this.voidElements.hasOwnProperty(n.tagName.toLowerCase())||this._findEndTagInLine(e,r,n.tagName,n.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){for(var r=e.getTokens(t),n=new l,i=0;i<r.length;i++){var o=r[i];if(c(o,\"tag-open\")){if(n.end.column=n.start.column+o.value.length,n.closing=c(o,\"end-tag-open\"),!(o=r[++i]))return null;for(n.tagName=o.value,n.end.column+=o.value.length,i++;i<r.length;i++)if(o=r[i],n.end.column+=o.value.length,c(o,\"tag-close\")){n.selfClosing=\"/>\"==o.value;break}return n}if(c(o,\"tag-close\"))return n.selfClosing=\"/>\"==o.value,n;n.start.column+=o.value.length}return null},this._findEndTagInLine=function(e,t,r,n){for(var i=e.getTokens(t),o=0,s=0;s<i.length;s++){var a=i[s];if(!((o+=a.value.length)<n)&&c(a,\"end-tag-open\")&&(a=i[s+1])&&a.value==r)return!0}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,\"tag-open\"))r.closing=c(t,\"end-tag-open\"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn();else if(c(t,\"tag-name\"))r.tagName=t.value;else if(c(t,\"tag-close\"))return r.selfClosing=\"/>\"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),r}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,\"tag-open\"))return r.closing=c(t,\"end-tag-open\"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn(),e.stepBackward(),r;c(t,\"tag-name\")?r.tagName=t.value:c(t,\"tag-close\")&&(r.selfClosing=\"/>\"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){for(;e.length;){var r=e[e.length-1];if(t&&r.tagName!=t.tagName){if(this.optionalEndTags.hasOwnProperty(r.tagName)){e.pop();continue}return null}return e.pop()}},this.getFoldWidgetRange=function(e,t,r){var n=this._getFirstTagInLine(e,r);if(!n)return null;var o,a=[];if(n.closing||n.selfClosing){c=new s(e,r,n.end.column);for(var l={row:r,column:n.start.column};o=this._readTagBackward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing)a.push(o);else if(this._pop(a,o),0==a.length)return o.start.column+=o.tagName.length+2,o.start.row==o.end.row&&o.start.column<o.end.column&&(o.start.column=o.end.column),i.fromPoints(o.start,l)}}else{var c=new s(e,r,n.start.column),u={row:r,column:n.start.column+n.tagName.length+2};for(n.start.row==n.end.row&&(u.column=n.end.column);o=this._readTagForward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing){if(this._pop(a,o),0==a.length)return i.fromPoints(u,o.start)}else a.push(o)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,o=e(\"./xml\").FoldMode,s=e(\"./cstyle\").FoldMode,a=t.FoldMode=function(e,t){i.call(this,new o(e,t),{\"js-\":new s,\"css-\":new s})};n.inherits(a,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"].concat([\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"]),o={html:{manifest:1},head:{},title:{},base:{href:1,target:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{\"text/css\":1,\"image/png\":1,\"image/jpeg\":1,\"image/gif\":1},sizes:1},meta:{\"http-equiv\":{\"content-type\":1},name:{description:1,keywords:1},content:{\"text/html; charset=UTF-8\":1},charset:1},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},script:{charset:1,type:{\"text/javascript\":1},src:1,defer:1,async:1},noscript:{href:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},section:{},nav:{},article:{pubdate:1},aside:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},header:{},footer:{},address:{},main:{},p:{},hr:{},pre:{},blockquote:{cite:1},ol:{start:1,reversed:1},ul:{},li:{value:1},dl:{},dt:{},dd:{},figure:{},figcaption:{},div:{},a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},em:{},strong:{},small:{},s:{},cite:{},q:{cite:1},dfn:{},abbr:{},data:{},time:{datetime:1},code:{},var:{},samp:{},kbd:{},sub:{},sup:{},i:{},b:{},u:{},mark:{},ruby:{},rt:{},rp:{},bdi:{},bdo:{},span:{},br:{},wbr:{},ins:{cite:1,datetime:1},del:{cite:1,datetime:1},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},iframe:{name:1,src:1,height:1,width:1,sandbox:{\"allow-same-origin\":1,\"allow-top-navigation\":1,\"allow-forms\":1,\"allow-scripts\":1},seamless:{seamless:1}},embed:{src:1,height:1,width:1,type:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},param:{name:1,value:1},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},source:{src:1,type:1,media:1},track:{kind:1,src:1,srclang:1,label:1,default:1},canvas:{width:1,height:1},map:{name:1},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},svg:{},math:{},table:{summary:1},caption:{},colgroup:{span:1},col:{span:1},tbody:{},thead:{},tfoot:{},tr:{},td:{headers:1,rowspan:1,colspan:1},th:{headers:1,rowspan:1,colspan:1,scope:1},form:{\"accept-charset\":1,action:1,autocomplete:1,enctype:{\"multipart/form-data\":1,\"application/x-www-form-urlencoded\":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},fieldset:{disabled:1,form:1,name:1},legend:{},label:{form:1,for:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,\"datetime-local\":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{\"application/x-www-form-urlencoded\":1,\"multipart/form-data\":1,\"text/plain\":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},datalist:{},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},output:{for:1,form:1,name:1},progress:{value:1,max:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},details:{open:1},summary:{},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},menu:{type:1,label:1},dialog:{open:1}},s=Object.keys(o);function a(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,\"tag-name\");)i=r.stepBackward();if(i)return i.value}var c=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if(a(i,\"tag-name\")||a(i,\"tag-open\")||a(i,\"end-tag-open\"))return this.getTagCompletions(e,t,r,n);if(a(i,\"tag-whitespace\")||a(i,\"attribute-name\"))return this.getAttributeCompletions(e,t,r,n);if(a(i,\"attribute-value\"))return this.getAttributeValueCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return/&[a-z]*$/i.test(o)?this.getHTMLEntityCompletions(e,t,r,n):[]},this.getTagCompletions=function(e,t,r,n){return s.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompletions=function(e,t,r,n){var s=l(t,r);if(!s)return[];var a=i;return s in o&&(a=a.concat(Object.keys(o[s]))),a.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})},this.getAttributeValueCompletions=function(e,t,r,i){var s=l(t,r),c=function(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,\"attribute-name\");)i=r.stepBackward();if(i)return i.value}(t,r);if(!s)return[];var u=[];return s in o&&c in o[s]&&\"object\"==typeof o[s][c]&&(u=Object.keys(o[s][c])),u.map(function(e){return{caption:e,snippet:e,meta:\"attribute value\",score:Number.MAX_VALUE}})},this.getHTMLEntityCompletions=function(e,t,r,n){return[\"Aacute;\",\"aacute;\",\"Acirc;\",\"acirc;\",\"acute;\",\"AElig;\",\"aelig;\",\"Agrave;\",\"agrave;\",\"alefsym;\",\"Alpha;\",\"alpha;\",\"amp;\",\"and;\",\"ang;\",\"Aring;\",\"aring;\",\"asymp;\",\"Atilde;\",\"atilde;\",\"Auml;\",\"auml;\",\"bdquo;\",\"Beta;\",\"beta;\",\"brvbar;\",\"bull;\",\"cap;\",\"Ccedil;\",\"ccedil;\",\"cedil;\",\"cent;\",\"Chi;\",\"chi;\",\"circ;\",\"clubs;\",\"cong;\",\"copy;\",\"crarr;\",\"cup;\",\"curren;\",\"Dagger;\",\"dagger;\",\"dArr;\",\"darr;\",\"deg;\",\"Delta;\",\"delta;\",\"diams;\",\"divide;\",\"Eacute;\",\"eacute;\",\"Ecirc;\",\"ecirc;\",\"Egrave;\",\"egrave;\",\"empty;\",\"emsp;\",\"ensp;\",\"Epsilon;\",\"epsilon;\",\"equiv;\",\"Eta;\",\"eta;\",\"ETH;\",\"eth;\",\"Euml;\",\"euml;\",\"euro;\",\"exist;\",\"fnof;\",\"forall;\",\"frac12;\",\"frac14;\",\"frac34;\",\"frasl;\",\"Gamma;\",\"gamma;\",\"ge;\",\"gt;\",\"hArr;\",\"harr;\",\"hearts;\",\"hellip;\",\"Iacute;\",\"iacute;\",\"Icirc;\",\"icirc;\",\"iexcl;\",\"Igrave;\",\"igrave;\",\"image;\",\"infin;\",\"int;\",\"Iota;\",\"iota;\",\"iquest;\",\"isin;\",\"Iuml;\",\"iuml;\",\"Kappa;\",\"kappa;\",\"Lambda;\",\"lambda;\",\"lang;\",\"laquo;\",\"lArr;\",\"larr;\",\"lceil;\",\"ldquo;\",\"le;\",\"lfloor;\",\"lowast;\",\"loz;\",\"lrm;\",\"lsaquo;\",\"lsquo;\",\"lt;\",\"macr;\",\"mdash;\",\"micro;\",\"middot;\",\"minus;\",\"Mu;\",\"mu;\",\"nabla;\",\"nbsp;\",\"ndash;\",\"ne;\",\"ni;\",\"not;\",\"notin;\",\"nsub;\",\"Ntilde;\",\"ntilde;\",\"Nu;\",\"nu;\",\"Oacute;\",\"oacute;\",\"Ocirc;\",\"ocirc;\",\"OElig;\",\"oelig;\",\"Ograve;\",\"ograve;\",\"oline;\",\"Omega;\",\"omega;\",\"Omicron;\",\"omicron;\",\"oplus;\",\"or;\",\"ordf;\",\"ordm;\",\"Oslash;\",\"oslash;\",\"Otilde;\",\"otilde;\",\"otimes;\",\"Ouml;\",\"ouml;\",\"para;\",\"part;\",\"permil;\",\"perp;\",\"Phi;\",\"phi;\",\"Pi;\",\"pi;\",\"piv;\",\"plusmn;\",\"pound;\",\"Prime;\",\"prime;\",\"prod;\",\"prop;\",\"Psi;\",\"psi;\",\"quot;\",\"radic;\",\"rang;\",\"raquo;\",\"rArr;\",\"rarr;\",\"rceil;\",\"rdquo;\",\"real;\",\"reg;\",\"rfloor;\",\"Rho;\",\"rho;\",\"rlm;\",\"rsaquo;\",\"rsquo;\",\"sbquo;\",\"Scaron;\",\"scaron;\",\"sdot;\",\"sect;\",\"shy;\",\"Sigma;\",\"sigma;\",\"sigmaf;\",\"sim;\",\"spades;\",\"sub;\",\"sube;\",\"sum;\",\"sup;\",\"sup1;\",\"sup2;\",\"sup3;\",\"supe;\",\"szlig;\",\"Tau;\",\"tau;\",\"there4;\",\"Theta;\",\"theta;\",\"thetasym;\",\"thinsp;\",\"THORN;\",\"thorn;\",\"tilde;\",\"times;\",\"trade;\",\"Uacute;\",\"uacute;\",\"uArr;\",\"uarr;\",\"Ucirc;\",\"ucirc;\",\"Ugrave;\",\"ugrave;\",\"uml;\",\"upsih;\",\"Upsilon;\",\"upsilon;\",\"Uuml;\",\"uuml;\",\"weierp;\",\"Xi;\",\"xi;\",\"Yacute;\",\"yacute;\",\"yen;\",\"Yuml;\",\"yuml;\",\"Zeta;\",\"zeta;\",\"zwj;\",\"zwnj;\"].map(function(e){return{caption:e,snippet:e,meta:\"html entity\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./text\").Mode,s=e(\"./javascript\").Mode,a=e(\"./css\").Mode,l=e(\"./html_highlight_rules\").HtmlHighlightRules,c=e(\"./behaviour/xml\").XmlBehaviour,u=e(\"./folding/html\").FoldMode,d=e(\"./html_completions\").HtmlCompletions,g=e(\"../worker/worker_client\").WorkerClient,h=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],m=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],p=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=l,this.$behaviour=new c,this.$completer=new d,this.createModeDelegates({\"js-\":s,\"css-\":a}),this.foldingRules=new u(this.voidElements,i.arrayToMap(m))};n.inherits(p,o),function(){this.blockComment={start:\"\\x3c!--\",end:\"--\\x3e\"},this.voidElements=i.arrayToMap(h),this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){if(this.constructor==p){var t=new g([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t}},this.$id=\"ace/mode/html\"}.call(p.prototype),t.Mode=p}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=(e(\"../lib/lang\"),e(\"./text_highlight_rules\").TextHighlightRules),o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",s=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",l=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",c=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",u=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",d=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",g=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",h=function(){var e=this.createKeywordMapper({\"support.function\":s,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":l,\"support.constant.fonts\":c},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+u+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:u},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:d},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:g},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./css_highlight_rules\"),s=function(){var e=\"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|or|and|when|not\",t=e.split(\"|\"),r=o.supportType.split(\"|\"),n=this.createKeywordMapper({\"support.constant\":o.supportConstant,keyword:e,\"support.constant.color\":o.supportConstantColor,\"support.constant.fonts\":o.supportConstantFonts},\"identifier\",!0),i=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+i+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:i},{token:[\"support.function\",\"paren.lparen\",\"string\",\"paren.rparen\"],regex:\"(url)(\\\\()(.*)(\\\\))\"},{token:[\"support.function\",\"paren.lparen\"],regex:\"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"},{token:function(e){return t.indexOf(e.toLowerCase())>-1?\"keyword\":\"variable\"},regex:\"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"},{token:\"variable\",regex:\"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"},{token:function(e,t){return r.indexOf(e.toLowerCase())>-1?[\"support.type.property\",\"text\"]:[\"support.type.unknownProperty\",\"text\"]},regex:\"([a-z0-9-_]+)(\\\\s*:)\"},{token:\"keyword\",regex:\"&\"},{token:n,regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z_][a-z0-9-_]*\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};n.inherits(s,i),t.LessHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\\s*\\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../behaviour\").Behaviour,e(\"./cstyle\").CstyleBehaviour),o=e(\"../../token_iterator\").TokenIterator,s=function(){this.inherit(i),this.add(\"colon\",\"insertion\",function(e,t,r,n,i){if(\":\"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\\s+/)&&(l=a.stepBackward()),l&&\"support.type\"===l.type){var c=n.doc.getLine(s.row);if(\":\"===c.substring(s.column,s.column+1))return{text:\"\",selection:[1,1]};if(!c.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&\":\"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\\s+/)&&(c=l.stepBackward()),c&&\"support.type\"===c.type)if(\";\"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add(\"semicolon\",\"insertion\",function(e,t,r,n,i){if(\";\"===i){var o=r.getCursorPosition();if(\";\"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:\"\",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},float:{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e)if(\"string\"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if(\"ruleset\"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+\": $0\",meta:\"property\",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\\w\\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&\"object\"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return\"\";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?\"start\":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\\s*$/),o=e.getLength(),s=r,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./less_highlight_rules\").LessHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"./behaviour/css\").CssBehaviour,l=e(\"./css_completions\").CssCompletions,c=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new a,this.$completer=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&\"comment\"==i[i.length-1].type||t.match(/^.*\\{\\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(\"ruleset\",t,r,n)},this.$id=\"ace/mode/less\"}.call(u.prototype),t.Mode=u}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=(e(\"../lib/lang\"),e(\"./text_highlight_rules\").TextHighlightRules),o=t.supportType=\"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\",s=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",l=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",c=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",u=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",d=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",g=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",h=function(){var e=this.createKeywordMapper({\"support.function\":s,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":l,\"support.constant.fonts\":c},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+u+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:u},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:d},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:g},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\\s*\\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"],function(e,t,r){\"use strict\";var n={background:{\"#$0\":1},\"background-color\":{\"#$0\":1,transparent:1,fixed:1},\"background-image\":{\"url('/$0')\":1},\"background-repeat\":{repeat:1,\"repeat-x\":1,\"repeat-y\":1,\"no-repeat\":1,inherit:1},\"background-position\":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},\"background-attachment\":{scroll:1,fixed:1},\"background-size\":{cover:1,contain:1},\"background-clip\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},\"background-origin\":{\"border-box\":1,\"padding-box\":1,\"content-box\":1},border:{\"solid $0\":1,\"dashed $0\":1,\"dotted $0\":1,\"#$0\":1},\"border-color\":{\"#$0\":1},\"border-style\":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},\"border-collapse\":{collapse:1,separate:1},bottom:{px:1,em:1,\"%\":1},clear:{left:1,right:1,both:1,none:1},color:{\"#$0\":1,\"rgb(#$00,0,0)\":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,\"n-resize\":1,\"ne-resize\":1,\"e-resize\":1,\"se-resize\":1,\"s-resize\":1,\"sw-resize\":1,\"w-resize\":1,\"nw-resize\":1},display:{none:1,block:1,inline:1,\"inline-block\":1,\"table-cell\":1},\"empty-cells\":{show:1,hide:1},float:{left:1,right:1,none:1},\"font-family\":{Arial:2,\"Comic Sans MS\":2,Consolas:2,\"Courier New\":2,Courier:2,Georgia:2,Monospace:2,\"Sans-Serif\":2,\"Segoe UI\":2,Tahoma:2,\"Times New Roman\":2,\"Trebuchet MS\":2,Verdana:1},\"font-size\":{px:1,em:1,\"%\":1},\"font-weight\":{bold:1,normal:1},\"font-style\":{italic:1,normal:1},\"font-variant\":{normal:1,\"small-caps\":1},height:{px:1,em:1,\"%\":1},left:{px:1,em:1,\"%\":1},\"letter-spacing\":{normal:1},\"line-height\":{normal:1},\"list-style-type\":{none:1,disc:1,circle:1,square:1,decimal:1,\"decimal-leading-zero\":1,\"lower-roman\":1,\"upper-roman\":1,\"lower-greek\":1,\"lower-latin\":1,\"upper-latin\":1,georgian:1,\"lower-alpha\":1,\"upper-alpha\":1},margin:{px:1,em:1,\"%\":1},\"margin-right\":{px:1,em:1,\"%\":1},\"margin-left\":{px:1,em:1,\"%\":1},\"margin-top\":{px:1,em:1,\"%\":1},\"margin-bottom\":{px:1,em:1,\"%\":1},\"max-height\":{px:1,em:1,\"%\":1},\"max-width\":{px:1,em:1,\"%\":1},\"min-height\":{px:1,em:1,\"%\":1},\"min-width\":{px:1,em:1,\"%\":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},\"overflow-x\":{hidden:1,visible:1,auto:1,scroll:1},\"overflow-y\":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,\"%\":1},\"padding-top\":{px:1,em:1,\"%\":1},\"padding-right\":{px:1,em:1,\"%\":1},\"padding-bottom\":{px:1,em:1,\"%\":1},\"padding-left\":{px:1,em:1,\"%\":1},\"page-break-after\":{auto:1,always:1,avoid:1,left:1,right:1},\"page-break-before\":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,\"%\":1},\"table-layout\":{fixed:1,auto:1},\"text-decoration\":{none:1,underline:1,\"line-through\":1,blink:1},\"text-align\":{left:1,right:1,center:1,justify:1},\"text-transform\":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,\"%\":1},\"vertical-align\":{top:1,bottom:1},visibility:{hidden:1,visible:1},\"white-space\":{nowrap:1,normal:1,pre:1,\"pre-line\":1,\"pre-wrap\":1},width:{px:1,em:1,\"%\":1},\"word-spacing\":{normal:1},filter:{\"alpha(opacity=$0100)\":1},\"text-shadow\":{\"$02px 2px 2px #777\":1},\"text-overflow\":{\"ellipsis-word\":1,clip:1,ellipsis:1},\"-moz-border-radius\":1,\"-moz-border-radius-topright\":1,\"-moz-border-radius-bottomright\":1,\"-moz-border-radius-topleft\":1,\"-moz-border-radius-bottomleft\":1,\"-webkit-border-radius\":1,\"-webkit-border-top-right-radius\":1,\"-webkit-border-top-left-radius\":1,\"-webkit-border-bottom-right-radius\":1,\"-webkit-border-bottom-left-radius\":1,\"-moz-box-shadow\":1,\"-webkit-box-shadow\":1,transform:{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-moz-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1},\"-webkit-transform\":{\"rotate($00deg)\":1,\"skew($00deg)\":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement(\"c\").style;for(var t in e)if(\"string\"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return\"-\"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if(\"ruleset\"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\\w\\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+\": $0\",meta:\"property\",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\\w\\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&\"object\"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:\"property value\",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../behaviour\").Behaviour,e(\"./cstyle\").CstyleBehaviour),o=e(\"../../token_iterator\").TokenIterator,s=function(){this.inherit(i),this.add(\"colon\",\"insertion\",function(e,t,r,n,i){if(\":\"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\\s+/)&&(l=a.stepBackward()),l&&\"support.type\"===l.type){var c=n.doc.getLine(s.row);if(\":\"===c.substring(s.column,s.column+1))return{text:\"\",selection:[1,1]};if(!c.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&\":\"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\\s+/)&&(c=l.stepBackward()),c&&\"support.type\"===c.type)if(\";\"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add(\"semicolon\",\"insertion\",function(e,t,r,n,i){if(\";\"===i){var o=r.getCursorPosition();if(\";\"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:\"\",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return\"\";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?\"start\":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\\s*$/),o=e.getLength(),s=r,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./css_highlight_rules\").CssHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../worker/worker_client\").WorkerClient,l=e(\"./css_completions\").CssCompletions,c=e(\"./behaviour/css\").CssBehaviour,u=e(\"./folding/cstyle\").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&\"comment\"==i[i.length-1].type||t.match(/^.*\\{\\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(d.prototype),t.Mode=d}),ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=i.arrayToMap(function(){for(var e=\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\".split(\"|\"),t=\"appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius\".split(\"|\"),r=\"azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index\".split(\"|\"),n=[],i=0,o=e.length;i<o;i++)Array.prototype.push.apply(n,(e[i]+t.join(\"|\"+e[i])).split(\"|\"));return Array.prototype.push.apply(n,t),Array.prototype.push.apply(n,r),n}()),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute\".split(\"|\")),r=i.arrayToMap(\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero\".split(\"|\")),n=i.arrayToMap(\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\".split(\"|\")),o=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),s=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":o.hasOwnProperty(i)?\"keyword\":r.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":n.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":s.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};n.inherits(s,o),t.ScssHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\\s*\\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,r){\"use strict\";var n,i=e(\"../../lib/oop\"),o=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,a=e(\"../../lib/lang\"),l=[\"text\",\"paren.rparen\",\"punctuation.operator\"],c=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],u={},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return n=u[t];n=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},g=function(e,t,r,n){var i=e.end.row-e.start.row;return{text:r+t+n,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},h=function(){this.add(\"braces\",\"insertion\",function(e,t,r,i,o){var s=r.getCursorPosition(),l=i.doc.getLine(s.row);if(\"{\"==o){d(r);var c=r.getSelectionRange(),u=i.doc.getTextRange(c);if(\"\"!==u&&\"{\"!==u&&r.getWrapBehavioursEnabled())return g(c,u,\"{\",\"}\");if(h.isSaneInsertion(r,i))return/[\\]\\}\\)]/.test(l[s.column])||r.inMultiSelectMode?(h.recordAutoInsert(r,i,\"}\"),{text:\"{}\",selection:[1,1]}):(h.recordMaybeInsert(r,i,\"{\"),{text:\"{\",selection:[1,1]})}else if(\"}\"==o){if(d(r),\"}\"==l.substring(s.column,s.column+1))if(null!==i.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row})&&h.isAutoInsertedClosing(s,l,o))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}else{if(\"\\n\"==o||\"\\r\\n\"==o){d(r);var m=\"\";if(h.isMaybeInsertedClosing(s,l)&&(m=a.stringRepeat(\"}\",n.maybeInsertedBrackets),h.clearMaybeInsertedClosing()),\"}\"===l.substring(s.column,s.column+1)){var p=i.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!p)return null;var _=this.$getIndent(i.getLine(p.row))}else{if(!m)return void h.clearMaybeInsertedClosing();_=this.$getIndent(l)}var f=_+i.getTabString();return{text:\"\\n\"+f+\"\\n\"+_+m,selection:[1,f.length,1,f.length]}}h.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,r,i,o){var s=i.doc.getTextRange(o);if(!o.isMultiLine()&&\"{\"==s){if(d(r),\"}\"==i.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,r,n,i){if(\"(\"==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(\"\"!==s&&r.getWrapBehavioursEnabled())return g(o,s,\"(\",\")\");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,\")\"),{text:\"()\",selection:[1,1]}}else if(\")\"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(\")\"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(\")\",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}),this.add(\"parens\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&\"(\"==o&&(d(r),\")\"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add(\"brackets\",\"insertion\",function(e,t,r,n,i){if(\"[\"==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(\"\"!==s&&r.getWrapBehavioursEnabled())return g(o,s,\"[\",\"]\");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,\"]\"),{text:\"[]\",selection:[1,1]}}else if(\"]\"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(\"]\"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(\"]\",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}),this.add(\"brackets\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&\"[\"==o&&(d(r),\"]\"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add(\"string_dquotes\",\"insertion\",function(e,t,r,n,i){if('\"'==i||\"'\"==i){d(r);var o=i,s=r.getSelectionRange(),a=n.doc.getTextRange(s);if(\"\"!==a&&\"'\"!==a&&'\"'!=a&&r.getWrapBehavioursEnabled())return g(s,a,o,o);if(!a){var l=r.getCursorPosition(),c=n.doc.getLine(l.row),u=c.substring(l.column-1,l.column),h=c.substring(l.column,l.column+1),m=n.getTokenAt(l.row,l.column),p=n.getTokenAt(l.row,l.column+1);if(\"\\\\\"==u&&m&&/escape/.test(m.type))return null;var _,f=m&&/string|escape/.test(m.type),b=!p||/string|escape/.test(p.type);if(h==o)_=f!==b;else{if(f&&!b)return null;if(f&&b)return null;var y=n.$mode.tokenRe;y.lastIndex=0;var x=y.test(u);y.lastIndex=0;var v=y.test(u);if(x||v)return null;if(h&&!/[\\s;,.})\\]\\\\]/.test(h))return null;_=!0}return{text:_?o+o:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('\"'==o||\"'\"==o)&&(d(r),n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o))return i.end.column++,i})};h.isSaneInsertion=function(e,t){var r=e.getCursorPosition(),n=new s(t,r.row,r.column);if(!this.$matchTokenType(n.getCurrentToken()||\"text\",l)){var i=new s(t,r.row,r.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==r.row||this.$matchTokenType(n.getCurrentToken()||\"text\",c)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isAutoInsertedClosing(i,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=i.row,n.autoInsertedLineEnd=r+o.substr(i.column),n.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isMaybeInsertedClosing(i,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=i.row,n.maybeInsertedLineStart=o.substr(0,i.column)+r,n.maybeInsertedLineEnd=o.substr(i.column),n.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,r){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&r===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},i.inherits(h,o),t.CstyleBehaviour=h}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=(e(\"../behaviour\").Behaviour,e(\"./cstyle\").CstyleBehaviour),o=e(\"../../token_iterator\").TokenIterator,s=function(){this.inherit(i),this.add(\"colon\",\"insertion\",function(e,t,r,n,i){if(\":\"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\\s+/)&&(l=a.stepBackward()),l&&\"support.type\"===l.type){var c=n.doc.getLine(s.row);if(\":\"===c.substring(s.column,s.column+1))return{text:\"\",selection:[1,1]};if(!c.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&\":\"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\\s+/)&&(c=l.stepBackward()),c&&\"support.type\"===c.type)if(\";\"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add(\"semicolon\",\"insertion\",function(e,t,r,n,i){if(\";\"===i){var o=r.getCursorPosition();if(\";\"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:\"\",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return\"\";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?\"start\":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\\s*$/),o=e.getLength(),s=r,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./scss_highlight_rules\").ScssHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"./behaviour/css\").CssBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new a,this.foldingRules=new l};n.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&\"comment\"==i[i.length-1].type||t.match(/^.*\\{\\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.$id=\"ace/mode/scss\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"../lib/lang\"),o=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=i.arrayToMap(function(){for(var e=\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\".split(\"|\"),t=\"appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius\".split(\"|\"),r=\"azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index\".split(\"|\"),n=[],i=0,o=e.length;i<o;i++)Array.prototype.push.apply(n,(e[i]+t.join(\"|\"+e[i])).split(\"|\"));return Array.prototype.push.apply(n,t),Array.prototype.push.apply(n,r),n}()),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute\".split(\"|\")),r=i.arrayToMap(\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero\".split(\"|\")),n=i.arrayToMap(\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\".split(\"|\")),o=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),s=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),a=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:a+\"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:a},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":o.hasOwnProperty(i)?\"keyword\":r.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":n.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":s.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};n.inherits(s,o),t.ScssHighlightRules=s}),ace.define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=(e(\"../lib/lang\"),e(\"./scss_highlight_rules\").ScssHighlightRules),o=function(){i.call(this);var e=this.$rules.start;\"comment\"==e[1].token&&(e.splice(1,1,{onMatch:function(e,t,r){return r.unshift(this.next,-1,e.length-2,t),\"comment\"},regex:/^\\s*\\/\\*/,next:\"comment\"},{token:\"error.invalid\",regex:\"/\\\\*|[{;}]\"},{token:\"support.type\",regex:/^\\s*:[\\w\\-]+\\s/}),this.$rules.comment=[{regex:/^\\s*/,onMatch:function(e,t,r){return-1===r[1]&&(r[1]=Math.max(r[2],e.length-1)),e.length<=r[1]?(r.shift(),r.shift(),r.shift(),this.next=r.shift(),\"text\"):(this.next=\"\",\"comment\")},next:\"start\"},{defaultToken:\"comment\"}])};n.inherits(o,i),t.SassHighlightRules=o}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,o=e(\"../../range\").Range,s=t.FoldMode=function(){};n.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,r){var n=this.indentationBlock(e,r);if(n)return n;var i=/\\S/,s=e.getLine(r),a=s.search(i);if(-1!=a&&\"#\"==s[a]){for(var l=s.length,c=e.getLength(),u=r,d=r;++r<c;){var g=(s=e.getLine(r)).search(i);if(-1!=g){if(\"#\"!=s[g])break;d=r}}if(d>u){var h=e.getLine(d).length;return new o(u,l,d,h)}}},this.getFoldWidget=function(e,t,r){var n=e.getLine(r),i=n.search(/\\S/),o=e.getLine(r+1),s=e.getLine(r-1),a=s.search(/\\S/),l=o.search(/\\S/);if(-1==i)return e.foldWidgets[r-1]=-1!=a&&a<l?\"start\":\"\",\"\";if(-1==a){if(i==l&&\"#\"==n[i]&&\"#\"==o[i])return e.foldWidgets[r-1]=\"\",e.foldWidgets[r+1]=\"\",\"start\"}else if(a==i&&\"#\"==n[i]&&\"#\"==s[i]&&-1==e.getLine(r-2).search(/\\S/))return e.foldWidgets[r-1]=\"start\",e.foldWidgets[r+1]=\"\",\"\";return e.foldWidgets[r-1]=-1!=a&&a<i?\"start\":\"\",i<l?\"start\":\"\"}}.call(s.prototype)}),ace.define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./sass_highlight_rules\").SassHighlightRules,s=e(\"./folding/coffee\").FoldMode,a=function(){this.HighlightRules=o,this.foldingRules=new s};n.inherits(a,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/sass\"}.call(a.prototype),t.Mode=a}),ace.define(\"ace/mode/yaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"list.markup\",regex:/^(?:-{3}|\\.{3})\\s*(?=#|$)/},{token:\"list.markup\",regex:/^\\s*[\\-?](?:$|\\s)/},{token:\"constant\",regex:\"!![\\\\w//]+\"},{token:\"constant.language\",regex:\"[&\\\\*][a-zA-Z0-9-_]+\"},{token:[\"meta.tag\",\"keyword\"],regex:/^(\\s*\\w.*?)(\\:(?:\\s+|$))/},{token:[\"meta.tag\",\"keyword\"],regex:/(\\w+?)(\\s*\\:(?:\\s+|$))/},{token:\"keyword.operator\",regex:\"<<\\\\w*:\\\\w*\"},{token:\"keyword.operator\",regex:\"-\\\\s*(?=[{])\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"[|>][-+\\\\d\\\\s]*$\",next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)/},{token:\"constant.numeric\",regex:/[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/},{token:\"constant.language.boolean\",regex:\"(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"}],qqstring:[{token:\"string\",regex:\"(?=(?:(?:\\\\\\\\.)|(?:[^:]))*?:)\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};n.inherits(o,i),t.YamlHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\\s*\\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,o=e(\"../../range\").Range,s=t.FoldMode=function(){};n.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,r){var n=this.indentationBlock(e,r);if(n)return n;var i=/\\S/,s=e.getLine(r),a=s.search(i);if(-1!=a&&\"#\"==s[a]){for(var l=s.length,c=e.getLength(),u=r,d=r;++r<c;){var g=(s=e.getLine(r)).search(i);if(-1!=g){if(\"#\"!=s[g])break;d=r}}if(d>u){var h=e.getLine(d).length;return new o(u,l,d,h)}}},this.getFoldWidget=function(e,t,r){var n=e.getLine(r),i=n.search(/\\S/),o=e.getLine(r+1),s=e.getLine(r-1),a=s.search(/\\S/),l=o.search(/\\S/);if(-1==i)return e.foldWidgets[r-1]=-1!=a&&a<l?\"start\":\"\",\"\";if(-1==a){if(i==l&&\"#\"==n[i]&&\"#\"==o[i])return e.foldWidgets[r-1]=\"\",e.foldWidgets[r+1]=\"\",\"start\"}else if(a==i&&\"#\"==n[i]&&\"#\"==s[i]&&-1==e.getLine(r-2).search(/\\S/))return e.foldWidgets[r-1]=\"start\",e.foldWidgets[r+1]=\"\",\"\";return e.foldWidgets[r-1]=-1!=a&&a<i?\"start\":\"\",i<l?\"start\":\"\"}}.call(s.prototype)}),ace.define(\"ace/mode/yaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/yaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./yaml_highlight_rules\").YamlHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=o,this.$outdent=new s,this.foldingRules=new a};n.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t);\"start\"==e&&(t.match(/^.*[\\{\\(\\[]\\s*$/)&&(n+=r));return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.$id=\"ace/mode/yaml\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},o.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},o.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},o.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=o}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,s=\"[a-zA-Z\\\\$_¡-￿][a-zA-Z\\\\d\\\\$_¡-￿]*\",a=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),r=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[i.getStartRule(\"doc-start\"),c(\"no_regex\"),{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+s+\")(\\\\.)(prototype)(\\\\.)(\"+s+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+s+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\\\b\",next:\"start\"},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:s},{token:\"punctuation.operator\",regex:/[.](?![.])/,next:\"property\"},{token:\"keyword.operator\",regex:/--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],property:[{token:\"text\",regex:\"\\\\s+\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+s+\")(\\\\.)(\"+s+\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"punctuation.operator\",regex:/[.](?![.])/},{token:\"support.function\",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:\"support.function.dom\",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:\"support.constant\",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:\"identifier\",regex:s},{regex:\"\",token:\"empty\",next:\"no_regex\"}],start:[i.getStartRule(\"doc-start\"),c(\"start\"),{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:s},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],qqstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:r},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,r){if(this.next=\"{\"==e?this.nextState:\"\",\"{\"==e&&r.length)r.unshift(\"start\",t);else if(\"}\"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf(\"string\")||-1!=this.next.indexOf(\"jsx\")))return\"paren.quasi.end\";return\"{\"==e?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:r},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),e&&0==e.jsx||l.call(this)),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};function l(){var e=s.replace(\"\\\\d\",\"\\\\d\\\\-\"),t={onMatch:function(e,t,r){var n=\"/\"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:\"meta.tag.punctuation.\"+(1==n?\"\":\"end-\")+\"tag-open.xml\",value:e.slice(0,n)},{type:\"meta.tag.tag-name.xml\",value:e.substr(n)}]},regex:\"</?\"+e,next:\"jsxAttributes\",nextState:\"jsx\"};this.$rules.start.unshift(t);var r={regex:\"{\",token:\"paren.quasi.start\",push:\"start\"};this.$rules.jsx=[r,t,{include:\"reference\"},{defaultToken:\"string\"}],this.$rules.jsxAttributes=[{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||\"start\",[{type:this.token,value:e}]},nextState:\"jsx\"},r,c(\"jsxAttributes\"),{token:\"entity.other.attribute-name.xml\",regex:e},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"},{token:\"string.attribute-value.xml\",regex:\"'\",stateName:\"jsx_attr_q\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',stateName:\"jsx_attr_qq\",push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"reference\"},{defaultToken:\"string.attribute-value.xml\"}]},t],this.$rules.reference=[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}]}function c(e){return[{token:\"comment\",regex:/\\/\\*/,next:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]},{token:\"comment\",regex:\"\\\\/\\\\/\",next:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:e||\"pop\"},{defaultToken:\"comment\",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,r){\"use strict\";var n=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\\s+$/.test(e)&&/^\\s*\\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\\s*\\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,r){\"use strict\";var n=e(\"../../lib/oop\"),i=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return\"\";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?\"start\":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):\"all\"!=t&&(a=null)),a}if(\"markbegin\"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,\"all\",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\\s*$/),o=e.getLength(),s=r,a=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,r){\"use strict\";var n=e(\"../lib/oop\"),i=e(\"./text\").Mode,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../worker/worker_client\").WorkerClient,l=e(\"./behaviour/cstyle\").CstyleBehaviour,c=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&\"comment\"==o[o.length-1].type)return n;if(\"start\"==e||\"no_regex\"==e)(a=t.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/))&&(n+=r);else if(\"doc-start\"==e){if(\"start\"==s||\"no_regex\"==s)return\"\";var a;(a=t.match(/^\\s*(\\/?)\\*/))&&(a[1]&&(n+=\" \"),n+=\"* \")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(u.prototype),t.Mode=u}),function(e){\"use strict\";var t=e.oc.foundation.base,r=t.prototype,n=function(r,n){t.call(this),this.options=n,this.$el=e(r),this.$textarea=this.$el.find(\">textarea:first\"),this.$toolbar=this.$el.find(\">.editor-toolbar:first\"),this.$code=null,this.editor=null,this.$form=null,this.isFullscreen=!1,this.$fullscreenEnable=this.$toolbar.find(\"li.fullscreen-enable\"),this.$fullscreenDisable=this.$toolbar.find(\"li.fullscreen-disable\"),this.$searchboxEnable=this.$toolbar.find(\"li.searchbox-enable\"),this.$replaceboxEnable=this.$toolbar.find(\"li.replacebox-enable\"),e.oc.foundation.controlUtils.markDisposable(r),this.init(),this.$el.trigger(\"oc.codeEditorReady\")};(n.prototype=Object.create(r)).constructor=n,n.DEFAULTS={fontSize:12,wordWrap:\"off\",codeFolding:\"manual\",autocompletion:\"manual\",tabSize:4,theme:\"textmate\",showInvisibles:!0,highlightActiveLine:!0,useSoftTabs:!0,autoCloseTags:!0,showGutter:!0,enableEmmet:!0,language:\"php\",margin:0,vendorPath:\"/\",showPrintMargin:!1,highlightSelectedWord:!1,hScrollBarAlwaysVisible:!1,readOnly:!1},n.prototype.init=function(){this.$el.attr(\"id\")||this.$el.attr(\"id\",\"element-\"+Math.random().toString(36).substring(7)),this.$code=e(\"<div />\").addClass(\"editor-code\").attr(\"id\",this.$el.attr(\"id\")+\"-code\").css({position:\"absolute\",top:0,right:0,bottom:0,left:0}).appendTo(this.$el);var t=this.editor=ace.edit(this.$code.attr(\"id\")),r=this.options,n=this.$el.closest(\"form\");t.$blockScrolling=1/0,this.$form=n,this.$textarea.hide(),t.getSession().setValue(this.$textarea.val()),t.on(\"change\",this.proxy(this.onChange)),n.on(\"oc.beforeRequest\",this.proxy(this.onBeforeRequest)),e(window).on(\"resize\",this.proxy(this.onResize)),e(window).on(\"oc.updateUi\",this.proxy(this.onResize)),this.$el.one(\"dispose-control\",this.proxy(this.dispose)),oc.AssetManager.load({js:[r.vendorPath+\"/theme-\"+r.theme+\".js\"]},function(){if(t){t.setTheme(\"ace/theme/\"+r.theme);var e=\"php\"===r.language;t.getSession().setMode({path:\"ace/mode/\"+r.language,inline:e})}}),t.wrapper=this,t.setShowInvisibles(r.showInvisibles),t.setBehavioursEnabled(r.autoCloseTags),t.setHighlightActiveLine(r.highlightActiveLine),t.renderer.setShowGutter(r.showGutter),t.renderer.setShowPrintMargin(r.showPrintMargin),t.setHighlightSelectedWord(r.highlightSelectedWord),t.renderer.setHScrollBarAlwaysVisible(r.hScrollBarAlwaysVisible),t.setDisplayIndentGuides(r.displayIndentGuides),t.getSession().setUseSoftTabs(r.useSoftTabs),t.getSession().setTabSize(r.tabSize),t.setReadOnly(r.readOnly),t.getSession().setFoldStyle(r.codeFolding),t.setFontSize(r.fontSize),t.on(\"blur\",this.proxy(this.onBlur)),t.on(\"focus\",this.proxy(this.onFocus)),this.setWordWrap(r.wordWrap),ace.require(\"ace/config\").set(\"basePath\",this.options.vendorPath),t.setOptions({enableEmmet:r.enableEmmet,enableBasicAutocompletion:\"basic\"===r.autocompletion,enableLiveAutocompletion:\"live\"===r.autocompletion}),t.renderer.setScrollMargin(r.margin,r.margin,0,0),t.renderer.setPadding(r.margin),this.$toolbar.find(\">ul>li>a\").each(function(){var t=e(this).find(\">abbr\"),r=t.text()+\" (<strong>\"+t.attr(\"title\")+\"</strong>)\";e(this).attr(\"title\",r)}).tooltip({delay:500,placement:\"top\",html:!0}),this.$fullscreenDisable.hide(),this.$fullscreenEnable.on(\"click.codeeditor\",\">a\",e.proxy(this.toggleFullscreen,this)),this.$fullscreenDisable.on(\"click.codeeditor\",\">a\",e.proxy(this.toggleFullscreen,this)),this.$searchboxEnable.on(\"click.codeeditor\",\">a\",e.proxy(this.showSearchbox,this)),this.$replaceboxEnable.on(\"click.codeeditor\",\">a\",e.proxy(this.showReplacebox,this)),this.$el.hotKey({hotkey:\"esc\",callback:this.proxy(this.onEscape)}),t.commands.addCommand({name:\"toggleFullscreen\",bindKey:{win:\"Ctrl+Shift+F\",mac:\"Ctrl+Shift+F\"},exec:e.proxy(this.toggleFullscreen,this),readOnly:!0})},n.prototype.dispose=function(){null!==this.$el&&(this.unregisterHandlers(),this.disposeAttachedControls(),this.$el=null,this.$textarea=null,this.$toolbar=null,this.$code=null,this.$fullscreenEnable=null,this.$fullscreenDisable=null,this.$searchboxEnable=null,this.$replaceboxEnable=null,this.$form=null,this.options=null,r.dispose.call(this))},n.prototype.disposeAttachedControls=function(){this.editor.destroy();for(var e=Object.keys(this.editor.renderer),t=0,r=e.length;t<r;t++)this.editor.renderer[e[t]]=null;for(t=0,r=(e=Object.keys(this.editor)).length;t<r;t++)this.editor[e[t]]=null;this.editor=null,this.$toolbar.find(\">ul>li>a\").tooltip(\"dispose\"),this.$el.removeData(\"oc.codeEditor\"),this.$el.hotKey(\"dispose\")},n.prototype.unregisterHandlers=function(){this.editor.off(\"change\",this.proxy(this.onChange)),this.editor.off(\"blur\",this.proxy(this.onBlur)),this.editor.off(\"focus\",this.proxy(this.onFocus)),this.$fullscreenEnable.off(\".codeeditor\"),this.$fullscreenDisable.off(\".codeeditor\"),this.$form.off(\"oc.beforeRequest\",this.proxy(this.onBeforeRequest)),this.$el.off(\"dispose-control\",this.proxy(this.dispose)),e(window).off(\"resize\",this.proxy(this.onResize)),e(window).off(\"oc.updateUi\",this.proxy(this.onResize))},n.prototype.onBeforeRequest=function(){this.$textarea.val(this.editor.getSession().getValue())},n.prototype.onChange=function(){this.$form.trigger(\"change\"),this.$textarea.trigger(\"oc.codeEditorChange\")},n.prototype.onResize=function(){this.editor.resize()},n.prototype.onBlur=function(){this.$el.removeClass(\"editor-focus\")},n.prototype.onFocus=function(){this.$el.addClass(\"editor-focus\")},n.prototype.onEscape=function(){this.isFullscreen&&this.toggleFullscreen()},n.prototype.setWordWrap=function(e){var t=this.editor.getSession(),r=this.editor.renderer;switch(e+\"\"){default:case\"off\":t.setUseWrapMode(!1),r.setPrintMarginColumn(80);break;case\"40\":t.setUseWrapMode(!0),t.setWrapLimitRange(40,40),r.setPrintMarginColumn(40);break;case\"80\":t.setUseWrapMode(!0),t.setWrapLimitRange(80,80),r.setPrintMarginColumn(80);break;case\"fluid\":t.setUseWrapMode(!0),t.setWrapLimitRange(null,null),r.setPrintMarginColumn(80)}},n.prototype.setTheme=function(e){var t=this;oc.AssetManager.load({js:[this.options.vendorPath+\"/theme-\"+e+\".js\"]},function(){t.editor.setTheme(\"ace/theme/\"+e)})},n.prototype.getContent=function(){return this.editor.getSession().getValue()},n.prototype.setContent=function(e){this.editor.getSession().setValue(e)},n.prototype.getEditorObject=function(){return this.editor},n.prototype.getToolbar=function(){return this.$toolbar},n.prototype.toggleFullscreen=function(){this.$el.toggleClass(\"editor-fullscreen\"),this.$fullscreenEnable.toggle(),this.$fullscreenDisable.toggle(),this.isFullscreen=this.$el.hasClass(\"editor-fullscreen\"),this.isFullscreen?e(\"body\").css({overflow:\"hidden\"}):e(\"body\").css({overflow:\"inherit\"}),this.editor.resize(),this.editor.focus()},n.prototype.showSearchbox=function(){this.editor.execCommand(\"find\"),this.editor.resize(),this.editor.focus()},n.prototype.showReplacebox=function(){this.editor.execCommand(\"replace\"),this.editor.resize(),this.editor.focus()};var i=e.fn.codeEditor;e.fn.codeEditor=function(t){var r,i=Array.prototype.slice.call(arguments,1);return this.each(function(){var o=e(this),s=o.data(\"oc.codeEditor\"),a=e.extend({},n.DEFAULTS,o.data(),\"object\"==typeof t&&t);if(s||o.data(\"oc.codeEditor\",s=new n(this,a)),\"string\"==typeof t&&(r=s[t].apply(s,i)),void 0!==r)return!1}),r||this},e.fn.codeEditor.Constructor=n,void 0===e.oc&&(e.oc={}),e.oc.codeEditorExtensionModes={htm:\"html\",html:\"html\",md:\"markdown\",txt:\"plain_text\",js:\"javascript\",less:\"less\",scss:\"scss\",sass:\"sass\",css:\"css\"},e.fn.codeEditor.noConflict=function(){return e.fn.codeEditor=i,this},e(document).render(function(){e('[data-control=\"codeeditor\"]').codeEditor()}),function(t){if(t.ace&&\"function\"==typeof t.ace.require){var r=t.ace.require(\"ace/ext/emmet\");if(r&&r.AceEmmetEditor&&r.AceEmmetEditor.prototype.getSyntax){var n=r.AceEmmetEditor.prototype.getSyntax;r.AceEmmetEditor.prototype.getSyntax=function(){var t=e.proxy(n,this)();return\"twig\"==t?\"html\":t}}}}(window)}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/js/codeeditor.js",
    "content": "/*\n * Code editor form field control\n *\n * Data attributes:\n * - data-control=\"codeeditor\" - enables the code editor plugin\n * - data-vendor-path=\"/\" - sets the path to find Ace editor files\n * - data-language=\"php\" - set the coding language used\n * - data-theme=\"textmate\" - the colour scheme and theme\n *\n * JavaScript API:\n * $('textarea').codeEditor({ vendorPath: '/', language: 'php '})\n *\n * Dependancies:\n * - Ace Editor (ace.js)\n */\n\n+function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    // CODEEDITOR CLASS DEFINITION\n    // ============================\n\n    var CodeEditor = function(element, options) {\n        Base.call(this);\n\n        this.options   = options;\n        this.$el       = $(element);\n        this.$textarea = this.$el.find('>textarea:first');\n        this.$toolbar  = this.$el.find('>.editor-toolbar:first');\n        this.$code     = null;\n        this.editor    = null;\n        this.$form     = null;\n\n        // Toolbar links\n        this.isFullscreen = false;\n        this.$fullscreenEnable = this.$toolbar.find('li.fullscreen-enable');\n        this.$fullscreenDisable = this.$toolbar.find('li.fullscreen-disable');\n        this.$searchboxEnable = this.$toolbar.find('li.searchbox-enable');\n        this.$replaceboxEnable = this.$toolbar.find('li.replacebox-enable');\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n\n        this.init();\n\n        this.$el.trigger('oc.codeEditorReady');\n    }\n\n    CodeEditor.prototype = Object.create(BaseProto)\n    CodeEditor.prototype.constructor = CodeEditor\n\n    CodeEditor.DEFAULTS = {\n        fontSize: 12,\n        wordWrap: 'off',\n        codeFolding: 'manual',\n        autocompletion: 'manual',\n        tabSize: 4,\n        theme: 'textmate',\n        showInvisibles: true,\n        highlightActiveLine: true,\n        useSoftTabs: true,\n        autoCloseTags: true,\n        showGutter: true,\n        enableEmmet: true,\n        language: 'php',\n        margin: 0,\n        vendorPath: '/',\n        showPrintMargin: false,\n        highlightSelectedWord: false,\n        hScrollBarAlwaysVisible: false,\n        readOnly: false\n    }\n\n    CodeEditor.prototype.init = function (){\n        // Control must have an identifier\n        if (!this.$el.attr('id')) {\n            this.$el.attr('id', 'element-' + Math.random().toString(36).substring(7))\n        }\n\n        // Create code container\n        this.$code = $('<div />')\n            .addClass('editor-code')\n            .attr('id', this.$el.attr('id') + '-code')\n            .css({\n                position: 'absolute',\n                top: 0,\n                right: 0,\n                bottom: 0,\n                left: 0\n            })\n            .appendTo(this.$el)\n\n        // Initialize ACE editor\n        var editor = this.editor = ace.edit(this.$code.attr('id')),\n            options = this.options,\n            $form = this.$el.closest('form');\n\n        // Fixes a weird notice about scrolling\n        editor.$blockScrolling = Infinity\n\n        this.$form = $form\n\n        this.$textarea.hide();\n        editor.getSession().setValue(this.$textarea.val())\n\n        editor.on('change', this.proxy(this.onChange))\n        $form.on('oc.beforeRequest', this.proxy(this.onBeforeRequest))\n        $(window).on('resize', this.proxy(this.onResize))\n        $(window).on('oc.updateUi', this.proxy(this.onResize))\n        this.$el.one('dispose-control', this.proxy(this.dispose))\n\n        // Set theme, anticipated languages should be preloaded\n        oc.AssetManager.load({\n            js:[\n                options.vendorPath + '/theme-' + options.theme + '.js'\n            ]\n        }, function() {\n            if (editor) {\n                editor.setTheme('ace/theme/' + options.theme);\n                var inline = options.language === 'php';\n                editor.getSession().setMode({ path: 'ace/mode/'+options.language, inline: inline });\n            }\n        });\n\n        // Config editor\n        editor.wrapper = this;\n        editor.setShowInvisibles(options.showInvisibles);\n        editor.setBehavioursEnabled(options.autoCloseTags);\n        editor.setHighlightActiveLine(options.highlightActiveLine);\n        editor.renderer.setShowGutter(options.showGutter);\n        editor.renderer.setShowPrintMargin(options.showPrintMargin);\n        editor.setHighlightSelectedWord(options.highlightSelectedWord);\n        editor.renderer.setHScrollBarAlwaysVisible(options.hScrollBarAlwaysVisible);\n        editor.setDisplayIndentGuides(options.displayIndentGuides);\n        editor.getSession().setUseSoftTabs(options.useSoftTabs);\n        editor.getSession().setTabSize(options.tabSize);\n        editor.setReadOnly(options.readOnly);\n        editor.getSession().setFoldStyle(options.codeFolding);\n        editor.setFontSize(options.fontSize);\n        editor.on('blur', this.proxy(this.onBlur));\n        editor.on('focus', this.proxy(this.onFocus));\n        this.setWordWrap(options.wordWrap);\n\n        // Set the vendor path for Ace's require path\n        ace.require('ace/config').set('basePath', this.options.vendorPath);\n\n        editor.setOptions({\n            enableEmmet: options.enableEmmet,\n            enableBasicAutocompletion: options.autocompletion === 'basic',\n            enableLiveAutocompletion: options.autocompletion === 'live'\n        });\n\n        editor.renderer.setScrollMargin(options.margin, options.margin, 0, 0);\n        editor.renderer.setPadding(options.margin);\n\n        // Toolbar\n        this.$toolbar.find('>ul>li>a')\n            .each(function(){\n                var abbr = $(this).find('>abbr'),\n                    label = abbr.text(),\n                    help = abbr.attr('title'),\n                    title = label + ' (<strong>' + help + '</strong>)';\n\n                $(this).attr('title', title)\n            })\n            .tooltip({\n                delay: 500,\n                placement: 'top',\n                html: true\n            })\n        ;\n\n        this.$fullscreenDisable.hide()\n        this.$fullscreenEnable.on('click.codeeditor', '>a', $.proxy(this.toggleFullscreen, this))\n        this.$fullscreenDisable.on('click.codeeditor', '>a', $.proxy(this.toggleFullscreen, this))\n        this.$searchboxEnable.on('click.codeeditor', '>a', $.proxy(this.showSearchbox, this))\n        this.$replaceboxEnable.on('click.codeeditor', '>a', $.proxy(this.showReplacebox, this))\n\n        // Hotkeys\n        this.$el.hotKey({\n            hotkey: 'esc',\n            callback: this.proxy(this.onEscape)\n        });\n\n        editor.commands.addCommand({\n            name: 'toggleFullscreen',\n            bindKey: { win: 'Ctrl+Shift+F', mac: 'Ctrl+Shift+F' },\n            exec: $.proxy(this.toggleFullscreen, this),\n            readOnly: true\n        });\n    }\n\n    CodeEditor.prototype.dispose = function() {\n        if (this.$el === null) {\n            return;\n        }\n\n        this.unregisterHandlers();\n        this.disposeAttachedControls();\n\n        this.$el = null;\n        this.$textarea = null;\n        this.$toolbar = null;\n        this.$code = null;\n        this.$fullscreenEnable = null;\n        this.$fullscreenDisable = null;\n        this.$searchboxEnable = null;\n        this.$replaceboxEnable = null;\n        this.$form = null;\n        this.options = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    CodeEditor.prototype.disposeAttachedControls = function() {\n        this.editor.destroy();\n\n        var keys = Object.keys(this.editor.renderer);\n        for (var i=0, len=keys.length; i<len; i++) {\n            this.editor.renderer[keys[i]] = null;\n        }\n\n        keys = Object.keys(this.editor);\n        for (var i=0, len=keys.length; i<len; i++) {\n            this.editor[keys[i]] = null;\n        }\n\n        this.editor = null;\n\n        this.$toolbar.find('>ul>li>a').tooltip('dispose');\n        this.$el.removeData('oc.codeEditor');\n        this.$el.hotKey('dispose');\n    }\n\n    CodeEditor.prototype.unregisterHandlers = function() {\n        this.editor.off('change', this.proxy(this.onChange));\n        this.editor.off('blur', this.proxy(this.onBlur));\n        this.editor.off('focus', this.proxy(this.onFocus));\n\n        this.$fullscreenEnable.off('.codeeditor');\n        this.$fullscreenDisable.off('.codeeditor');\n        this.$form.off('oc.beforeRequest', this.proxy(this.onBeforeRequest));\n\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n\n        $(window).off('resize', this.proxy(this.onResize));\n        $(window).off('oc.updateUi', this.proxy(this.onResize));\n    }\n\n    CodeEditor.prototype.onBeforeRequest = function() {\n        this.$textarea.val(this.editor.getSession().getValue())\n    }\n\n    CodeEditor.prototype.onChange = function() {\n        this.$form.trigger('change')\n        this.$textarea.trigger('oc.codeEditorChange')\n    }\n\n    CodeEditor.prototype.onResize = function() {\n        this.editor.resize()\n    }\n\n    CodeEditor.prototype.onBlur = function() {\n        this.$el.removeClass('editor-focus')\n    }\n\n    CodeEditor.prototype.onFocus = function() {\n        this.$el.addClass('editor-focus')\n    }\n\n    CodeEditor.prototype.onEscape = function() {\n        this.isFullscreen && this.toggleFullscreen()\n    }\n\n    CodeEditor.prototype.setWordWrap = function(mode) {\n        var session = this.editor.getSession(),\n            renderer = this.editor.renderer\n\n        switch (mode + '') {\n            default:\n            case 'off':\n                session.setUseWrapMode(false);\n                renderer.setPrintMarginColumn(80);\n            break\n            case '40':\n                session.setUseWrapMode(true);\n                session.setWrapLimitRange(40, 40);\n                renderer.setPrintMarginColumn(40);\n            break\n            case '80':\n                session.setUseWrapMode(true);\n                session.setWrapLimitRange(80, 80);\n                renderer.setPrintMarginColumn(80);\n            break\n            case 'fluid':\n                session.setUseWrapMode(true);\n                session.setWrapLimitRange(null, null);\n                renderer.setPrintMarginColumn(80);\n            break\n        }\n    }\n\n    CodeEditor.prototype.setTheme = function(theme) {\n        var self = this;\n        oc.AssetManager.load({\n            js:[\n                this.options.vendorPath + '/theme-' + theme + '.js'\n            ]\n        }, function(){\n            self.editor.setTheme('ace/theme/' + theme)\n        });\n    }\n\n    CodeEditor.prototype.getContent = function() {\n        return this.editor.getSession().getValue();\n    }\n\n    CodeEditor.prototype.setContent = function(html) {\n        this.editor.getSession().setValue(html);\n    }\n\n    CodeEditor.prototype.getEditorObject = function() {\n        return this.editor;\n    }\n\n    CodeEditor.prototype.getToolbar = function() {\n        return this.$toolbar;\n    }\n\n    CodeEditor.prototype.toggleFullscreen = function() {\n        this.$el.toggleClass('editor-fullscreen');\n        this.$fullscreenEnable.toggle();\n        this.$fullscreenDisable.toggle();\n\n        this.isFullscreen = this.$el.hasClass('editor-fullscreen');\n\n        if (this.isFullscreen) {\n            $('body').css({ overflow: 'hidden' });\n        }\n        else {\n            $('body').css({ overflow: 'inherit' });\n        }\n\n        this.editor.resize();\n        this.editor.focus();\n    }\n\n    CodeEditor.prototype.showSearchbox = function() {\n        this.editor.execCommand('find');\n        this.editor.resize();\n        this.editor.focus();\n    }\n\n    CodeEditor.prototype.showReplacebox = function() {\n        this.editor.execCommand('replace');\n        this.editor.resize();\n        this.editor.focus();\n    }\n\n    // CODEEDITOR PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.codeEditor\n\n    $.fn.codeEditor = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.codeEditor')\n            var options = $.extend({}, CodeEditor.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.codeEditor', (data = new CodeEditor(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        })\n\n        return result ? result : this\n    }\n\n    $.fn.codeEditor.Constructor = CodeEditor\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    $.oc.codeEditorExtensionModes = {\n        'htm': 'html',\n        'html': 'html',\n        'md': 'markdown',\n        'txt': 'plain_text',\n        'js': 'javascript',\n        'less': 'less',\n        'scss': 'scss',\n        'sass': 'sass',\n        'css': 'css'\n    }\n\n    // CODEEDITOR NO CONFLICT\n    // =================\n\n    $.fn.codeEditor.noConflict = function () {\n        $.fn.codeEditor = old\n        return this\n    }\n\n    // CODEEDITOR DATA-API\n    // ===============\n    $(document).render(function () {\n        $('[data-control=\"codeeditor\"]').codeEditor()\n    });\n\n    // FIX EMMET HTML WHEN SYNTAX IS TWIG\n    // ==================================\n\n    +function (exports) {\n        if (exports.ace && typeof exports.ace.require == 'function') {\n            var emmetExt = exports.ace.require('ace/ext/emmet')\n\n            if (emmetExt && emmetExt.AceEmmetEditor && emmetExt.AceEmmetEditor.prototype.getSyntax) {\n                var coreGetSyntax = emmetExt.AceEmmetEditor.prototype.getSyntax\n\n                emmetExt.AceEmmetEditor.prototype.getSyntax = function () {\n                    var $syntax = $.proxy(coreGetSyntax, this)()\n                    return $syntax == 'twig' ? 'html' : $syntax\n                };\n            }\n        }\n    }(window)\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/less/codeeditor.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n.field-codeeditor {\n    width: 100%;\n    position: relative;\n    border: 2px solid @input-border;\n    .border-radius(@border-radius-base);\n    textarea { opacity: 0; }\n\n    &.editor-focus { border: 2px solid @input-border-focus; }\n\n    &.size-tiny { min-height: @size-tiny; }\n    &.size-small { min-height: @size-small; }\n    &.size-large { min-height: @size-large; }\n    &.size-huge { min-height: @size-huge; }\n    &.size-giant { min-height: @size-giant; }\n\n    .ace_search {\n        font-family: @font-family-base;\n        font-size: 14px;\n        color: @text-color;\n        z-index: @zindex-form + 3;\n\n        // Fixes double focus on search box\n        .ace_search_form.ace_nomatch {\n            outline: none !important;\n\n            .ace_search_field {\n                border: .0625rem solid red;\n                -webkit-box-shadow: 0 0 .1875rem .125rem red;\n                box-shadow: 0 0 .1875rem .125rem red;\n                z-index: 1;\n                position: relative;\n            }\n        }\n    }\n\n    .editor-code {\n        .border-radius(@border-radius-base);\n    }\n\n    .editor-toolbar {\n        position: absolute;\n        padding: 0 5px;\n        bottom: 10px;\n        right: 25px;\n        z-index: @zindex-form;\n        background: rgba(0,0,0,.8);\n        border-radius: 5px;\n\n        // Conflict with easymde\n        border: none;\n        &:before {\n            display: none;\n        }\n\n        > ul, ul > li { list-style-type: none; padding: 0; margin: 0; }\n        > ul > li {\n            float: left;\n\n            .tooltip.left {\n                margin-right: 25px;\n            }\n        }\n        > ul > li > a {\n            display: block;\n            height: 25px;\n            width: 25px;\n            color: #666;\n            font-size: 20px;\n            text-align: center;\n            text-decoration: none;\n            text-shadow: 0 0 5px #000;\n\n            > abbr {\n                position: absolute;\n                .text-hide();\n            }\n            > i {\n                opacity: 1;\n                display: block;\n                &:before {\n                    font-size: 15px;\n                }\n            }\n            &:hover, &:focus {\n                > i {\n                    opacity: 1;\n                    color: #fff;\n                }\n            }\n        }\n    }\n\n    &.editor-fullscreen {\n        z-index: @zindex-fullscreen + 1;\n        position: fixed !important;\n        top: 0;\n        left: 0;\n        height: 100%;\n        border-width: 0;\n        .border-radius(0);\n        .editor-toolbar {\n            z-index: @zindex-fullscreen + 2;\n        }\n        .editor-code { .border-radius(0); }\n        .ace_search { z-index: @zindex-fullscreen + 3; }\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/ace.js",
    "content": "/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n    return;\n\n\nvar define = function(module, deps, payload) {\n    if (typeof module !== \"string\") {\n        if (define.original)\n            define.original.apply(this, arguments);\n        else {\n            console.error(\"dropping module because define wasn\\'t a string.\");\n            console.trace();\n        }\n        return;\n    }\n    if (arguments.length == 2)\n        payload = deps;\n    if (!define.modules[module]) {\n        define.payloads[module] = payload;\n        define.modules[module] = null;\n    }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n    if (typeof module === \"string\") {\n        var payload = lookup(parentId, module);\n        if (payload != undefined) {\n            callback && callback();\n            return payload;\n        }\n    } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n        var params = [];\n        for (var i = 0, l = module.length; i < l; ++i) {\n            var dep = lookup(parentId, module[i]);\n            if (dep == undefined && require.original)\n                return;\n            params.push(dep);\n        }\n        return callback && callback.apply(null, params) || true;\n    }\n};\n\nvar require = function(module, callback) {\n    var packagedModule = _require(\"\", module, callback);\n    if (packagedModule == undefined && require.original)\n        return require.original.apply(this, arguments);\n    return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = base + \"/\" + moduleName;\n\n        while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n    moduleName = normalizeModule(parentId, moduleName);\n\n    var module = define.modules[moduleName];\n    if (!module) {\n        module = define.payloads[moduleName];\n        if (typeof module === 'function') {\n            var exports = {};\n            var mod = {\n                id: moduleName,\n                uri: '',\n                exports: exports,\n                packaged: true\n            };\n\n            var req = function(module, callback) {\n                return _require(moduleName, module, callback);\n            };\n\n            var returnValue = module(req, exports, mod);\n            exports = returnValue || mod.exports;\n            define.modules[moduleName] = exports;\n            delete define.payloads[moduleName];\n        }\n        module = define.modules[moduleName] = exports || module;\n    }\n    return module;\n};\n\nfunction exportAce(ns) {\n    var root = global;\n    if (ns) {\n        if (!global[ns])\n            global[ns] = {};\n        root = global[ns];\n    }\n\n    if (!root.define || !root.define.packaged) {\n        define.original = root.define;\n        root.define = define;\n        root.define.packaged = true;\n    }\n\n    if (!root.require || !root.require.packaged) {\n        require.original = root.require;\n        root.require = require;\n        root.require.packaged = true;\n    }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\n    var real = {\n            exec: RegExp.prototype.exec,\n            test: RegExp.prototype.test,\n            match: String.prototype.match,\n            replace: String.prototype.replace,\n            split: String.prototype.split\n        },\n        compliantExecNpcg = real.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n        compliantLastIndexIncrement = function () {\n            var x = /^/g;\n            real.test.call(x, \"\");\n            return !x.lastIndex;\n        }();\n\n    if (compliantLastIndexIncrement && compliantExecNpcg)\n        return;\n    RegExp.prototype.exec = function (str) {\n        var match = real.exec.apply(this, arguments),\n            name, r2;\n        if ( typeof(str) == 'string' && match) {\n            if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n                r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), \"g\", \"\"));\n                real.replace.call(str.slice(match.index), r2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined)\n                            match[i] = undefined;\n                    }\n                });\n            }\n            if (this._xregexp && this._xregexp.captureNames) {\n                for (var i = 1; i < match.length; i++) {\n                    name = this._xregexp.captureNames[i - 1];\n                    if (name)\n                       match[name] = match[i];\n                }\n            }\n            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n        }\n        return match;\n    };\n    if (!compliantLastIndexIncrement) {\n        RegExp.prototype.test = function (str) {\n            var match = real.exec.call(this, str);\n            if (match && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n            return !!match;\n        };\n    }\n\n    function getNativeFlags (regex) {\n        return (regex.global     ? \"g\" : \"\") +\n               (regex.ignoreCase ? \"i\" : \"\") +\n               (regex.multiline  ? \"m\" : \"\") +\n               (regex.extended   ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n               (regex.sticky     ? \"y\" : \"\");\n    }\n\n    function indexOf (array, item, from) {\n        if (Array.prototype.indexOf) // Use the native array method if available\n            return array.indexOf(item, from);\n        for (var i = from || 0; i < array.length; i++) {\n            if (array[i] === item)\n                return i;\n        }\n        return -1;\n    }\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./regexp\");\nrequire(\"./es5-shim\");\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\nexports.getDocumentHead = function(doc) {\n    if (!doc)\n        doc = document;\n    return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n}\n\nexports.createElement = function(tag, ns) {\n    return document.createElementNS ?\n           document.createElementNS(ns || XHTML_NS, tag) :\n           document.createElement(tag);\n};\n\nexports.hasCssClass = function(el, name) {\n    var classes = (el.className + \"\").split(/\\s+/g);\n    return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function(el, name) {\n    if (!exports.hasCssClass(el, name)) {\n        el.className += \" \" + name;\n    }\n};\nexports.removeCssClass = function(el, name) {\n    var classes = el.className.split(/\\s+/g);\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        classes.splice(index, 1);\n    }\n    el.className = classes.join(\" \");\n};\n\nexports.toggleCssClass = function(el, name) {\n    var classes = el.className.split(/\\s+/g), add = true;\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        add = false;\n        classes.splice(index, 1);\n    }\n    if (add)\n        classes.push(name);\n\n    el.className = classes.join(\" \");\n    return add;\n};\nexports.setCssClass = function(node, className, include) {\n    if (include) {\n        exports.addCssClass(node, className);\n    } else {\n        exports.removeCssClass(node, className);\n    }\n};\n\nexports.hasCssString = function(id, doc) {\n    var index = 0, sheets;\n    doc = doc || document;\n\n    if (doc.createStyleSheet && (sheets = doc.styleSheets)) {\n        while (index < sheets.length)\n            if (sheets[index++].owningElement.id === id) return true;\n    } else if ((sheets = doc.getElementsByTagName(\"style\"))) {\n        while (index < sheets.length)\n            if (sheets[index++].id === id) return true;\n    }\n\n    return false;\n};\n\nexports.importCssString = function importCssString(cssText, id, doc) {\n    doc = doc || document;\n    if (id && exports.hasCssString(id, doc))\n        return null;\n    \n    var style;\n    \n    if (id)\n        cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n    \n    if (doc.createStyleSheet) {\n        style = doc.createStyleSheet();\n        style.cssText = cssText;\n        if (id)\n            style.owningElement.id = id;\n    } else {\n        style = exports.createElement(\"style\");\n        style.appendChild(doc.createTextNode(cssText));\n        if (id)\n            style.id = id;\n\n        exports.getDocumentHead(doc).appendChild(style);\n    }\n};\n\nexports.importCssStylsheet = function(uri, doc) {\n    if (doc.createStyleSheet) {\n        doc.createStyleSheet(uri);\n    } else {\n        var link = exports.createElement('link');\n        link.rel = 'stylesheet';\n        link.href = uri;\n\n        exports.getDocumentHead(doc).appendChild(link);\n    }\n};\n\nexports.getInnerWidth = function(element) {\n    return (\n        parseInt(exports.computedStyle(element, \"paddingLeft\"), 10) +\n        parseInt(exports.computedStyle(element, \"paddingRight\"), 10) + \n        element.clientWidth\n    );\n};\n\nexports.getInnerHeight = function(element) {\n    return (\n        parseInt(exports.computedStyle(element, \"paddingTop\"), 10) +\n        parseInt(exports.computedStyle(element, \"paddingBottom\"), 10) +\n        element.clientHeight\n    );\n};\n\nexports.scrollbarWidth = function(document) {\n    var inner = exports.createElement(\"ace_inner\");\n    inner.style.width = \"100%\";\n    inner.style.minWidth = \"0px\";\n    inner.style.height = \"200px\";\n    inner.style.display = \"block\";\n\n    var outer = exports.createElement(\"ace_outer\");\n    var style = outer.style;\n\n    style.position = \"absolute\";\n    style.left = \"-10000px\";\n    style.overflow = \"hidden\";\n    style.width = \"200px\";\n    style.minWidth = \"0px\";\n    style.height = \"150px\";\n    style.display = \"block\";\n\n    outer.appendChild(inner);\n\n    var body = document.documentElement;\n    body.appendChild(outer);\n\n    var noScrollbar = inner.offsetWidth;\n\n    style.overflow = \"scroll\";\n    var withScrollbar = inner.offsetWidth;\n\n    if (noScrollbar == withScrollbar) {\n        withScrollbar = outer.clientWidth;\n    }\n\n    body.removeChild(outer);\n\n    return noScrollbar-withScrollbar;\n};\n\nif (typeof document == \"undefined\") {\n    exports.importCssString = function() {};\n    return;\n}\n\nif (window.pageYOffset !== undefined) {\n    exports.getPageScrollTop = function() {\n        return window.pageYOffset;\n    };\n\n    exports.getPageScrollLeft = function() {\n        return window.pageXOffset;\n    };\n}\nelse {\n    exports.getPageScrollTop = function() {\n        return document.body.scrollTop;\n    };\n\n    exports.getPageScrollLeft = function() {\n        return document.body.scrollLeft;\n    };\n}\n\nif (window.getComputedStyle)\n    exports.computedStyle = function(element, style) {\n        if (style)\n            return (window.getComputedStyle(element, \"\") || {})[style] || \"\";\n        return window.getComputedStyle(element, \"\") || {};\n    };\nelse\n    exports.computedStyle = function(element, style) {\n        if (style)\n            return element.currentStyle[style];\n        return element.currentStyle;\n    };\nexports.setInnerHtml = function(el, innerHtml) {\n    var element = el.cloneNode(false);//document.createElement(\"div\");\n    element.innerHTML = innerHtml;\n    el.parentNode.replaceChild(element, el);\n    return element;\n};\n\nif (\"textContent\" in document.documentElement) {\n    exports.setInnerText = function(el, innerText) {\n        el.textContent = innerText;\n    };\n\n    exports.getInnerText = function(el) {\n        return el.textContent;\n    };\n}\nelse {\n    exports.setInnerText = function(el, innerText) {\n        el.innerText = innerText;\n    };\n\n    exports.getInnerText = function(el) {\n        return el.innerText;\n    };\n}\n\nexports.getParentWindow = function(document) {\n    return document.defaultView || document.parentWindow;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./fixoldbrowsers\");\n\nvar oop = require(\"./oop\");\nvar Keys = (function() {\n    var ret = {\n        MODIFIER_KEYS: {\n            16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'\n        },\n\n        KEY_MODS: {\n            \"ctrl\": 1, \"alt\": 2, \"option\" : 2, \"shift\": 4,\n            \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8\n        },\n\n        FUNCTION_KEYS : {\n            8  : \"Backspace\",\n            9  : \"Tab\",\n            13 : \"Return\",\n            19 : \"Pause\",\n            27 : \"Esc\",\n            32 : \"Space\",\n            33 : \"PageUp\",\n            34 : \"PageDown\",\n            35 : \"End\",\n            36 : \"Home\",\n            37 : \"Left\",\n            38 : \"Up\",\n            39 : \"Right\",\n            40 : \"Down\",\n            44 : \"Print\",\n            45 : \"Insert\",\n            46 : \"Delete\",\n            96 : \"Numpad0\",\n            97 : \"Numpad1\",\n            98 : \"Numpad2\",\n            99 : \"Numpad3\",\n            100: \"Numpad4\",\n            101: \"Numpad5\",\n            102: \"Numpad6\",\n            103: \"Numpad7\",\n            104: \"Numpad8\",\n            105: \"Numpad9\",\n            '-13': \"NumpadEnter\",\n            112: \"F1\",\n            113: \"F2\",\n            114: \"F3\",\n            115: \"F4\",\n            116: \"F5\",\n            117: \"F6\",\n            118: \"F7\",\n            119: \"F8\",\n            120: \"F9\",\n            121: \"F10\",\n            122: \"F11\",\n            123: \"F12\",\n            144: \"Numlock\",\n            145: \"Scrolllock\"\n        },\n\n        PRINTABLE_KEYS: {\n           32: ' ',  48: '0',  49: '1',  50: '2',  51: '3',  52: '4', 53:  '5',\n           54: '6',  55: '7',  56: '8',  57: '9',  59: ';',  61: '=', 65:  'a',\n           66: 'b',  67: 'c',  68: 'd',  69: 'e',  70: 'f',  71: 'g', 72:  'h',\n           73: 'i',  74: 'j',  75: 'k',  76: 'l',  77: 'm',  78: 'n', 79:  'o',\n           80: 'p',  81: 'q',  82: 'r',  83: 's',  84: 't',  85: 'u', 86:  'v',\n           87: 'w',  88: 'x',  89: 'y',  90: 'z', 107: '+', 109: '-', 110: '.',\n          186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n          219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*'\n        }\n    };\n    var name, i;\n    for (i in ret.FUNCTION_KEYS) {\n        name = ret.FUNCTION_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n    for (i in ret.PRINTABLE_KEYS) {\n        name = ret.PRINTABLE_KEYS[i].toLowerCase();\n        ret[name] = parseInt(i, 10);\n    }\n    oop.mixin(ret, ret.MODIFIER_KEYS);\n    oop.mixin(ret, ret.PRINTABLE_KEYS);\n    oop.mixin(ret, ret.FUNCTION_KEYS);\n    ret.enter = ret[\"return\"];\n    ret.escape = ret.esc;\n    ret.del = ret[\"delete\"];\n    ret[173] = '-';\n    \n    (function() {\n        var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n        for (var i = Math.pow(2, mods.length); i--;) {            \n            ret.KEY_MODS[i] = mods.filter(function(x) {\n                return i & ret.KEY_MODS[x];\n            }).join(\"-\") + \"-\";\n        }\n    })();\n\n    ret.KEY_MODS[0] = \"\";\n    ret.KEY_MODS[-1] = \"input-\";\n\n    return ret;\n})();\noop.mixin(exports, Keys);\n\nexports.keyCodeToString = function(keyCode) {\n    var keyString = Keys[keyCode];\n    if (typeof keyString != \"string\")\n        keyString = String.fromCharCode(keyCode);\n    return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nexports.OS = {\n    LINUX: \"LINUX\",\n    MAC: \"MAC\",\n    WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function() {\n    if (exports.isMac) {\n        return exports.OS.MAC;\n    } else if (exports.isLinux) {\n        return exports.OS.LINUX;\n    } else {\n        return exports.OS.WINDOWS;\n    }\n};\nif (typeof navigator != \"object\")\n    return;\n\nvar os = (navigator.platform.match(/mac|win|linux/i) || [\"other\"])[0].toLowerCase();\nvar ua = navigator.userAgent;\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE = \n    (navigator.appName == \"Microsoft Internet Explorer\" || navigator.appName.indexOf(\"MSAppHost\") >= 0)\n    ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1])\n    : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]); // for ie\n    \nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === \"Gecko\";\nexports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\\d+)/)||[])[1], 10) < 4;\nexports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isIPad = ua.indexOf(\"iPad\") >= 0;\n\nexports.isTouchPad = ua.indexOf(\"TouchPad\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\nexports.addListener = function(elem, type, callback) {\n    if (elem.addEventListener) {\n        return elem.addEventListener(type, callback, false);\n    }\n    if (elem.attachEvent) {\n        var wrapper = function() {\n            callback.call(elem, window.event);\n        };\n        callback._wrapper = wrapper;\n        elem.attachEvent(\"on\" + type, wrapper);\n    }\n};\n\nexports.removeListener = function(elem, type, callback) {\n    if (elem.removeEventListener) {\n        return elem.removeEventListener(type, callback, false);\n    }\n    if (elem.detachEvent) {\n        elem.detachEvent(\"on\" + type, callback._wrapper || callback);\n    }\n};\nexports.stopEvent = function(e) {\n    exports.stopPropagation(e);\n    exports.preventDefault(e);\n    return false;\n};\n\nexports.stopPropagation = function(e) {\n    if (e.stopPropagation)\n        e.stopPropagation();\n    else\n        e.cancelBubble = true;\n};\n\nexports.preventDefault = function(e) {\n    if (e.preventDefault)\n        e.preventDefault();\n    else\n        e.returnValue = false;\n};\nexports.getButton = function(e) {\n    if (e.type == \"dblclick\")\n        return 0;\n    if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n        return 2;\n    if (e.preventDefault) {\n        return e.button;\n    }\n    else {\n        return {1:0, 2:2, 4:1}[e.button];\n    }\n};\n\nexports.capture = function(el, eventHandler, releaseCaptureHandler) {\n    function onMouseUp(e) {\n        eventHandler && eventHandler(e);\n        releaseCaptureHandler && releaseCaptureHandler(e);\n\n        exports.removeListener(document, \"mousemove\", eventHandler, true);\n        exports.removeListener(document, \"mouseup\", onMouseUp, true);\n        exports.removeListener(document, \"dragstart\", onMouseUp, true);\n    }\n\n    exports.addListener(document, \"mousemove\", eventHandler, true);\n    exports.addListener(document, \"mouseup\", onMouseUp, true);\n    exports.addListener(document, \"dragstart\", onMouseUp, true);\n    \n    return onMouseUp;\n};\n\nexports.addTouchMoveListener = function (el, callback) {\n    if (\"ontouchmove\" in el) {\n        var startx, starty;\n        exports.addListener(el, \"touchstart\", function (e) {\n            var touchObj = e.changedTouches[0];\n            startx = touchObj.clientX;\n            starty = touchObj.clientY;\n        });\n        exports.addListener(el, \"touchmove\", function (e) {\n            var factor = 1,\n            touchObj = e.changedTouches[0];\n\n            e.wheelX = -(touchObj.clientX - startx) / factor;\n            e.wheelY = -(touchObj.clientY - starty) / factor;\n\n            startx = touchObj.clientX;\n            starty = touchObj.clientY;\n\n            callback(e);\n        });\n    } \n};\n\nexports.addMouseWheelListener = function(el, callback) {\n    if (\"onmousewheel\" in el) {\n        exports.addListener(el, \"mousewheel\", function(e) {\n            var factor = 8;\n            if (e.wheelDeltaX !== undefined) {\n                e.wheelX = -e.wheelDeltaX / factor;\n                e.wheelY = -e.wheelDeltaY / factor;\n            } else {\n                e.wheelX = 0;\n                e.wheelY = -e.wheelDelta / factor;\n            }\n            callback(e);\n        });\n    } else if (\"onwheel\" in el) {\n        exports.addListener(el, \"wheel\",  function(e) {\n            var factor = 0.35;\n            switch (e.deltaMode) {\n                case e.DOM_DELTA_PIXEL:\n                    e.wheelX = e.deltaX * factor || 0;\n                    e.wheelY = e.deltaY * factor || 0;\n                    break;\n                case e.DOM_DELTA_LINE:\n                case e.DOM_DELTA_PAGE:\n                    e.wheelX = (e.deltaX || 0) * 5;\n                    e.wheelY = (e.deltaY || 0) * 5;\n                    break;\n            }\n            \n            callback(e);\n        });\n    } else {\n        exports.addListener(el, \"DOMMouseScroll\", function(e) {\n            if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n                e.wheelX = (e.detail || 0) * 5;\n                e.wheelY = 0;\n            } else {\n                e.wheelX = 0;\n                e.wheelY = (e.detail || 0) * 5;\n            }\n            callback(e);\n        });\n    }\n};\n\nexports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) {\n    var clicks = 0;\n    var startX, startY, timer; \n    var eventNames = {\n        2: \"dblclick\",\n        3: \"tripleclick\",\n        4: \"quadclick\"\n    };\n\n    function onMousedown(e) {\n        if (exports.getButton(e) !== 0) {\n            clicks = 0;\n        } else if (e.detail > 1) {\n            clicks++;\n            if (clicks > 4)\n                clicks = 1;\n        } else {\n            clicks = 1;\n        }\n        if (useragent.isIE) {\n            var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n            if (!timer || isNewClick)\n                clicks = 1;\n            if (timer)\n                clearTimeout(timer);\n            timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\n\n            if (clicks == 1) {\n                startX = e.clientX;\n                startY = e.clientY;\n            }\n        }\n        \n        e._clicks = clicks;\n\n        eventHandler[callbackName](\"mousedown\", e);\n\n        if (clicks > 4)\n            clicks = 0;\n        else if (clicks > 1)\n            return eventHandler[callbackName](eventNames[clicks], e);\n    }\n    function onDblclick(e) {\n        clicks = 2;\n        if (timer)\n            clearTimeout(timer);\n        timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600);\n        eventHandler[callbackName](\"mousedown\", e);\n        eventHandler[callbackName](eventNames[clicks], e);\n    }\n    if (!Array.isArray(elements))\n        elements = [elements];\n    elements.forEach(function(el) {\n        exports.addListener(el, \"mousedown\", onMousedown);\n        if (useragent.isOldIE)\n            exports.addListener(el, \"dblclick\", onDblclick);\n    });\n};\n\nvar getModifierHash = useragent.isMac && useragent.isOpera && !(\"KeyboardEvent\" in window)\n    ? function(e) {\n        return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);\n    }\n    : function(e) {\n        return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n    };\n\nexports.getModifierString = function(e) {\n    return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n    var hashId = getModifierHash(e);\n\n    if (!useragent.isMac && pressedKeys) {\n        if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n            hashId |= 8;\n        if (pressedKeys.altGr) {\n            if ((3 & hashId) != 3)\n                pressedKeys.altGr = 0;\n            else\n                return;\n        }\n        if (keyCode === 18 || keyCode === 17) {\n            var location = \"location\" in e ? e.location : e.keyLocation;\n            if (keyCode === 17 && location === 1) {\n                if (pressedKeys[keyCode] == 1)\n                    ts = e.timeStamp;\n            } else if (keyCode === 18 && hashId === 3 && location === 2) {\n                var dt = e.timeStamp - ts;\n                if (dt < 50)\n                    pressedKeys.altGr = true;\n            }\n        }\n    }\n    \n    if (keyCode in keys.MODIFIER_KEYS) {\n        keyCode = -1;\n    }\n    if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) {\n        keyCode = -1;\n    }\n    \n    if (!hashId && keyCode === 13) {\n        var location = \"location\" in e ? e.location : e.keyLocation;\n        if (location === 3) {\n            callback(e, hashId, -keyCode);\n            if (e.defaultPrevented)\n                return;\n        }\n    }\n    \n    if (useragent.isChromeOS && hashId & 8) {\n        callback(e, hashId, keyCode);\n        if (e.defaultPrevented)\n            return;\n        else\n            hashId &= ~8;\n    }\n    if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n        return false;\n    }\n    \n    return callback(e, hashId, keyCode);\n}\n\n\nexports.addCommandKeyListener = function(el, callback) {\n    var addListener = exports.addListener;\n    if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n        var lastKeyDownKeyCode = null;\n        addListener(el, \"keydown\", function(e) {\n            lastKeyDownKeyCode = e.keyCode;\n        });\n        addListener(el, \"keypress\", function(e) {\n            return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n        });\n    } else {\n        var lastDefaultPrevented = null;\n\n        addListener(el, \"keydown\", function(e) {\n            pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n            var result = normalizeCommandKeys(callback, e, e.keyCode);\n            lastDefaultPrevented = e.defaultPrevented;\n            return result;\n        });\n\n        addListener(el, \"keypress\", function(e) {\n            if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n                exports.stopEvent(e);\n                lastDefaultPrevented = null;\n            }\n        });\n\n        addListener(el, \"keyup\", function(e) {\n            pressedKeys[e.keyCode] = null;\n        });\n\n        if (!pressedKeys) {\n            resetPressedKeys();\n            addListener(window, \"focus\", resetPressedKeys);\n        }\n    }\n};\nfunction resetPressedKeys() {\n    pressedKeys = Object.create(null);\n}\n\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n    var postMessageId = 1;\n    exports.nextTick = function(callback, win) {\n        win = win || window;\n        var messageName = \"zero-timeout-message-\" + postMessageId;\n        exports.addListener(win, \"message\", function listener(e) {\n            if (e.data == messageName) {\n                exports.stopPropagation(e);\n                exports.removeListener(win, \"message\", listener);\n                callback();\n            }\n        });\n        win.postMessage(messageName, \"*\");\n    };\n}\n\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n    || window.mozRequestAnimationFrame\n    || window.webkitRequestAnimationFrame\n    || window.msRequestAnimationFrame\n    || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n    exports.nextFrame = exports.nextFrame.bind(window);\nelse\n    exports.nextFrame = function(callback) {\n        setTimeout(callback, 17);\n    };\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    \n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return str.replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE =  useragent.isIE;\n\nvar TextInput = function(parentNode, host) {\n    var text = dom.createElement(\"textarea\");\n    text.className = \"ace_text-input\";\n\n    if (useragent.isTouchPad)\n        text.setAttribute(\"x-palm-disable-auto-cap\", true);\n\n    text.setAttribute(\"wrap\", \"off\");\n    text.setAttribute(\"autocorrect\", \"off\");\n    text.setAttribute(\"autocapitalize\", \"off\");\n    text.setAttribute(\"spellcheck\", false);\n\n    text.style.opacity = \"0\";\n    if (useragent.isOldIE) text.style.top = \"-1000px\";\n    parentNode.insertBefore(text, parentNode.firstChild);\n\n    var PLACEHOLDER = \"\\x01\\x01\";\n\n    var copied = false;\n    var pasted = false;\n    var inComposition = false;\n    var tempStyle = '';\n    var isSelectionEmpty = true;\n    try { var isFocused = document.activeElement === text; } catch(e) {}\n    \n    event.addListener(text, \"blur\", function(e) {\n        host.onBlur(e);\n        isFocused = false;\n    });\n    event.addListener(text, \"focus\", function(e) {\n        isFocused = true;\n        host.onFocus(e);\n        resetSelection();\n    });\n    this.focus = function() {\n        if (tempStyle) return text.focus();\n        var top = text.style.top;\n        text.style.position = \"fixed\";\n        text.style.top = \"0px\";\n        text.focus();\n        setTimeout(function() {\n            text.style.position = \"\";\n            if (text.style.top == \"0px\")\n                text.style.top = top;\n        }, 0);\n    };\n    this.blur = function() {\n        text.blur();\n    };\n    this.isFocused = function() {\n        return isFocused;\n    };\n    var syncSelection = lang.delayedCall(function() {\n        isFocused && resetSelection(isSelectionEmpty);\n    });\n    var syncValue = lang.delayedCall(function() {\n         if (!inComposition) {\n            text.value = PLACEHOLDER;\n            isFocused && resetSelection();\n         }\n    });\n\n    function resetSelection(isEmpty) {\n        if (inComposition)\n            return;\n        inComposition = true;\n        \n        if (inputHandler) {\n            selectionStart = 0;\n            selectionEnd = isEmpty ? 0 : text.value.length - 1;\n        } else {\n            var selectionStart = isEmpty ? 2 : 1;\n            var selectionEnd = 2;\n        }\n        try {\n            text.setSelectionRange(selectionStart, selectionEnd);\n        } catch(e){}\n        \n        inComposition = false;\n    }\n\n    function resetValue() {\n        if (inComposition)\n            return;\n        text.value = PLACEHOLDER;\n        if (useragent.isWebKit)\n            syncValue.schedule();\n    }\n\n    useragent.isWebKit || host.addEventListener('changeSelection', function() {\n        if (host.selection.isEmpty() != isSelectionEmpty) {\n            isSelectionEmpty = !isSelectionEmpty;\n            syncSelection.schedule();\n        }\n    });\n\n    resetValue();\n    if (isFocused)\n        host.onFocus();\n\n\n    var isAllSelected = function(text) {\n        return text.selectionStart === 0 && text.selectionEnd === text.value.length;\n    };\n    if (!text.setSelectionRange && text.createTextRange) {\n        text.setSelectionRange = function(selectionStart, selectionEnd) {\n            var range = this.createTextRange();\n            range.collapse(true);\n            range.moveStart('character', selectionStart);\n            range.moveEnd('character', selectionEnd);\n            range.select();\n        };\n        isAllSelected = function(text) {\n            try {\n                var range = text.ownerDocument.selection.createRange();\n            }catch(e) {}\n            if (!range || range.parentElement() != text) return false;\n                return range.text == text.value;\n        }\n    }\n    if (useragent.isOldIE) {\n        var inPropertyChange = false;\n        var onPropertyChange = function(e){\n            if (inPropertyChange)\n                return;\n            var data = text.value;\n            if (inComposition || !data || data == PLACEHOLDER)\n                return;\n            if (e && data == PLACEHOLDER[0])\n                return syncProperty.schedule();\n\n            sendText(data);\n            inPropertyChange = true;\n            resetValue();\n            inPropertyChange = false;\n        };\n        var syncProperty = lang.delayedCall(onPropertyChange);\n        event.addListener(text, \"propertychange\", onPropertyChange);\n\n        var keytable = { 13:1, 27:1 };\n        event.addListener(text, \"keyup\", function (e) {\n            if (inComposition && (!text.value || keytable[e.keyCode]))\n                setTimeout(onCompositionEnd, 0);\n            if ((text.value.charCodeAt(0)||0) < 129) {\n                return syncProperty.call();\n            }\n            inComposition ? onCompositionUpdate() : onCompositionStart();\n        });\n        event.addListener(text, \"keydown\", function (e) {\n            syncProperty.schedule(50);\n        });\n    }\n\n    var onSelect = function(e) {\n        if (copied) {\n            copied = false;\n        } else if (isAllSelected(text)) {\n            host.selectAll();\n            resetSelection();\n        } else if (inputHandler) {\n            resetSelection(host.selection.isEmpty());\n        }\n    };\n\n    var inputHandler = null;\n    this.setInputHandler = function(cb) {inputHandler = cb};\n    this.getInputHandler = function() {return inputHandler};\n    var afterContextMenu = false;\n    \n    var sendText = function(data) {\n        if (inputHandler) {\n            data = inputHandler(data);\n            inputHandler = null;\n        }\n        if (pasted) {\n            resetSelection();\n            if (data)\n                host.onPaste(data);\n            pasted = false;\n        } else if (data == PLACEHOLDER.charAt(0)) {\n            if (afterContextMenu)\n                host.execCommand(\"del\", {source: \"ace\"});\n            else // some versions of android do not fire keydown when pressing backspace\n                host.execCommand(\"backspace\", {source: \"ace\"});\n        } else {\n            if (data.substring(0, 2) == PLACEHOLDER)\n                data = data.substr(2);\n            else if (data.charAt(0) == PLACEHOLDER.charAt(0))\n                data = data.substr(1);\n            else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n                data = data.slice(0, -1);\n            if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0))\n                data = data.slice(0, -1);\n            \n            if (data)\n                host.onTextInput(data);\n        }\n        if (afterContextMenu)\n            afterContextMenu = false;\n    };\n    var onInput = function(e) {\n        if (inComposition)\n            return;\n        var data = text.value;\n        sendText(data);\n        resetValue();\n    };\n    \n    var handleClipboardData = function(e, data, forceIEMime) {\n        var clipboardData = e.clipboardData || window.clipboardData;\n        if (!clipboardData || BROKEN_SETDATA)\n            return;\n        var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n        try {\n            if (data) {\n                return clipboardData.setData(mime, data) !== false;\n            } else {\n                return clipboardData.getData(mime);\n            }\n        } catch(e) {\n            if (!forceIEMime)\n                return handleClipboardData(e, data, true);\n        }\n    };\n\n    var doCopy = function(e, isCut) {\n        var data = host.getCopyText();\n        if (!data)\n            return event.preventDefault(e);\n\n        if (handleClipboardData(e, data)) {\n            isCut ? host.onCut() : host.onCopy();\n            event.preventDefault(e);\n        } else {\n            copied = true;\n            text.value = data;\n            text.select();\n            setTimeout(function(){\n                copied = false;\n                resetValue();\n                resetSelection();\n                isCut ? host.onCut() : host.onCopy();\n            });\n        }\n    };\n    \n    var onCut = function(e) {\n        doCopy(e, true);\n    };\n    \n    var onCopy = function(e) {\n        doCopy(e, false);\n    };\n    \n    var onPaste = function(e) {\n        var data = handleClipboardData(e);\n        if (typeof data == \"string\") {\n            if (data)\n                host.onPaste(data, e);\n            if (useragent.isIE)\n                setTimeout(resetSelection);\n            event.preventDefault(e);\n        }\n        else {\n            text.value = \"\";\n            pasted = true;\n        }\n    };\n\n    event.addCommandKeyListener(text, host.onCommandKey.bind(host));\n\n    event.addListener(text, \"select\", onSelect);\n\n    event.addListener(text, \"input\", onInput);\n\n    event.addListener(text, \"cut\", onCut);\n    event.addListener(text, \"copy\", onCopy);\n    event.addListener(text, \"paste\", onPaste);\n    if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)){\n        event.addListener(parentNode, \"keydown\", function(e) {\n            if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n                return;\n\n            switch (e.keyCode) {\n                case 67:\n                    onCopy(e);\n                    break;\n                case 86:\n                    onPaste(e);\n                    break;\n                case 88:\n                    onCut(e);\n                    break;\n            }\n        });\n    }\n    var onCompositionStart = function(e) {\n        if (inComposition || !host.onCompositionStart || host.$readOnly) \n            return;\n        inComposition = {};\n        inComposition.canUndo = host.session.$undoManager;\n        host.onCompositionStart();\n        setTimeout(onCompositionUpdate, 0);\n        host.on(\"mousedown\", onCompositionEnd);\n        if (inComposition.canUndo && !host.selection.isEmpty()) {\n            host.insert(\"\");\n            host.session.markUndoGroup();\n            host.selection.clearSelection();\n        }\n        host.session.markUndoGroup();\n    };\n\n    var onCompositionUpdate = function() {\n        if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n            return;\n        var val = text.value.replace(/\\x01/g, \"\");\n        if (inComposition.lastValue === val) return;\n        \n        host.onCompositionUpdate(val);\n        if (inComposition.lastValue)\n            host.undo();\n        if (inComposition.canUndo)\n            inComposition.lastValue = val;\n        if (inComposition.lastValue) {\n            var r = host.selection.getRange();\n            host.insert(inComposition.lastValue);\n            host.session.markUndoGroup();\n            inComposition.range = host.selection.getRange();\n            host.selection.setRange(r);\n            host.selection.clearSelection();\n        }\n    };\n\n    var onCompositionEnd = function(e) {\n        if (!host.onCompositionEnd || host.$readOnly) return;\n        var c = inComposition;\n        inComposition = false;\n        var timer = setTimeout(function() {\n            timer = null;\n            var str = text.value.replace(/\\x01/g, \"\");\n            if (inComposition)\n                return;\n            else if (str == c.lastValue)\n                resetValue();\n            else if (!c.lastValue && str) {\n                resetValue();\n                sendText(str);\n            }\n        });\n        inputHandler = function compositionInputHandler(str) {\n            if (timer)\n                clearTimeout(timer);\n            str = str.replace(/\\x01/g, \"\");\n            if (str == c.lastValue)\n                return \"\";\n            if (c.lastValue && timer)\n                host.undo();\n            return str;\n        };\n        host.onCompositionEnd();\n        host.removeListener(\"mousedown\", onCompositionEnd);\n        if (e.type == \"compositionend\" && c.range) {\n            host.selection.setRange(c.range);\n        }\n        if (useragent.isChrome && useragent.isChrome >= 53) {\n          onInput();\n        }\n    };\n    \n    \n\n    var syncComposition = lang.delayedCall(onCompositionUpdate, 50);\n\n    event.addListener(text, \"compositionstart\", onCompositionStart);\n    if (useragent.isGecko) {\n        event.addListener(text, \"text\", function(){syncComposition.schedule()});\n    } else {\n        event.addListener(text, \"keyup\", function(){syncComposition.schedule()});\n        event.addListener(text, \"keydown\", function(){syncComposition.schedule()});\n    }\n    event.addListener(text, \"compositionend\", onCompositionEnd);\n\n    this.getElement = function() {\n        return text;\n    };\n\n    this.setReadOnly = function(readOnly) {\n       text.readOnly = readOnly;\n    };\n\n    this.onContextMenu = function(e) {\n        afterContextMenu = true;\n        resetSelection(host.selection.isEmpty());\n        host._emit(\"nativecontextmenu\", {target: host, domEvent: e});\n        this.moveToMouse(e, true);\n    };\n    \n    this.moveToMouse = function(e, bringToFront) {\n        if (!bringToFront && useragent.isOldIE)\n            return;\n        if (!tempStyle)\n            tempStyle = text.style.cssText;\n        text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n            + \"height:\" + text.style.height + \";\"\n            + (useragent.isIE ? \"opacity:0.1;\" : \"\");\n\n        var rect = host.container.getBoundingClientRect();\n        var style = dom.computedStyle(host.container);\n        var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n        var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n        var maxTop = rect.bottom - top - text.clientHeight -2;\n        var move = function(e) {\n            text.style.left = e.clientX - left - 2 + \"px\";\n            text.style.top = Math.min(e.clientY - top - 2, maxTop) + \"px\";\n        }; \n        move(e);\n\n        if (e.type != \"mousedown\")\n            return;\n\n        if (host.renderer.$keepTextAreaAtCursor)\n            host.renderer.$keepTextAreaAtCursor = null;\n\n        clearTimeout(closeTimeout);\n        if (useragent.isWin && !useragent.isOldIE)\n            event.capture(host.container, move, onContextMenuClose);\n    };\n\n    this.onContextMenuClose = onContextMenuClose;\n    var closeTimeout;\n    function onContextMenuClose() {\n        clearTimeout(closeTimeout);\n        closeTimeout = setTimeout(function () {\n            if (tempStyle) {\n                text.style.cssText = tempStyle;\n                tempStyle = '';\n            }\n            if (host.renderer.$keepTextAreaAtCursor == null) {\n                host.renderer.$keepTextAreaAtCursor = true;\n                host.renderer.$moveTextAreaToCursor();\n            }\n        }, useragent.isOldIE ? 200 : 0);\n    }\n\n    var onContextMenu = function(e) {\n        host.textInput.onContextMenu(e);\n        onContextMenuClose();\n    };\n    event.addListener(text, \"mouseup\", onContextMenu);\n    event.addListener(text, \"mousedown\", function(e) {\n        e.preventDefault();\n        onContextMenuClose();\n    });\n    event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu);\n    event.addListener(text, \"contextmenu\", onContextMenu);\n};\n\nexports.TextInput = TextInput;\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\n\nfunction DefaultHandlers(mouseHandler) {\n    mouseHandler.$clickSelection = null;\n\n    var editor = mouseHandler.editor;\n    editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n    editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n    editor.setDefaultHandler(\"touchmove\", this.onTouchMove.bind(mouseHandler));\n\n    var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n        \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n    exports.forEach(function(x) {\n        mouseHandler[x] = this[x];\n    }, this);\n\n    mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n    mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n    this.onMouseDown = function(ev) {\n        var inSelection = ev.inSelection();\n        var pos = ev.getDocumentPosition();\n        this.mousedownEvent = ev;\n        var editor = this.editor;\n\n        var button = ev.getButton();\n        if (button !== 0) {\n            var selectionRange = editor.getSelectionRange();\n            var selectionEmpty = selectionRange.isEmpty();\n            editor.$blockScrolling++;\n            if (selectionEmpty || button == 1)\n                editor.selection.moveToPosition(pos);\n            editor.$blockScrolling--;\n            if (button == 2)\n                editor.textInput.onContextMenu(ev.domEvent);\n            return; // stopping event here breaks contextmenu on ff mac\n        }\n\n        this.mousedownEvent.time = Date.now();\n        if (inSelection && !editor.isFocused()) {\n            editor.focus();\n            if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) {\n                this.setState(\"focusWait\");\n                this.captureMouse(ev);\n                return;\n            }\n        }\n\n        this.captureMouse(ev);\n        this.startSelect(pos, ev.domEvent._clicks > 1);\n        return ev.preventDefault();\n    };\n\n    this.startSelect = function(pos, waitForClickSelection) {\n        pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var editor = this.editor;\n        editor.$blockScrolling++;\n        if (this.mousedownEvent.getShiftKey())\n            editor.selection.selectToPosition(pos);\n        else if (!waitForClickSelection)\n            editor.selection.moveToPosition(pos);\n        if (!waitForClickSelection)\n            this.select();\n        if (editor.renderer.scroller.setCapture) {\n            editor.renderer.scroller.setCapture();\n        }\n        editor.setStyle(\"ace_selecting\");\n        this.setState(\"select\");\n        editor.$blockScrolling--;\n    };\n\n    this.select = function() {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        editor.$blockScrolling++;\n        if (this.$clickSelection) {\n            var cmp = this.$clickSelection.comparePoint(cursor);\n\n            if (cmp == -1) {\n                anchor = this.$clickSelection.end;\n            } else if (cmp == 1) {\n                anchor = this.$clickSelection.start;\n            } else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.$blockScrolling--;\n        editor.renderer.scrollCursorIntoView();\n    };\n\n    this.extendSelectionBy = function(unitName) {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var range = editor.selection[unitName](cursor.row, cursor.column);\n        editor.$blockScrolling++;\n        if (this.$clickSelection) {\n            var cmpStart = this.$clickSelection.comparePoint(range.start);\n            var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n            if (cmpStart == -1 && cmpEnd <= 0) {\n                anchor = this.$clickSelection.end;\n                if (range.end.row != cursor.row || range.end.column != cursor.column)\n                    cursor = range.start;\n            } else if (cmpEnd == 1 && cmpStart >= 0) {\n                anchor = this.$clickSelection.start;\n                if (range.start.row != cursor.row || range.start.column != cursor.column)\n                    cursor = range.end;\n            } else if (cmpStart == -1 && cmpEnd == 1) {\n                cursor = range.end;\n                anchor = range.start;\n            } else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.$blockScrolling--;\n        editor.renderer.scrollCursorIntoView();\n    };\n\n    this.selectEnd =\n    this.selectAllEnd =\n    this.selectByWordsEnd =\n    this.selectByLinesEnd = function() {\n        this.$clickSelection = null;\n        this.editor.unsetStyle(\"ace_selecting\");\n        if (this.editor.renderer.scroller.releaseCapture) {\n            this.editor.renderer.scroller.releaseCapture();\n        }\n    };\n\n    this.focusWait = function() {\n        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n        var time = Date.now();\n\n        if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout)\n            this.startSelect(this.mousedownEvent.getDocumentPosition());\n    };\n\n    this.onDoubleClick = function(ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        var session = editor.session;\n\n        var range = session.getBracketRange(pos);\n        if (range) {\n            if (range.isEmpty()) {\n                range.start.column--;\n                range.end.column++;\n            }\n            this.setState(\"select\");\n        } else {\n            range = editor.selection.getWordRange(pos.row, pos.column);\n            this.setState(\"selectByWords\");\n        }\n        this.$clickSelection = range;\n        this.select();\n    };\n\n    this.onTripleClick = function(ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n\n        this.setState(\"selectByLines\");\n        var range = editor.getSelectionRange();\n        if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n            this.$clickSelection = editor.selection.getLineRange(range.start.row);\n            this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n        } else {\n            this.$clickSelection = editor.selection.getLineRange(pos.row);\n        }\n        this.select();\n    };\n\n    this.onQuadClick = function(ev) {\n        var editor = this.editor;\n\n        editor.selectAll();\n        this.$clickSelection = editor.getSelectionRange();\n        this.setState(\"selectAll\");\n    };\n\n    this.onMouseWheel = function(ev) {\n        if (ev.getAccelKey())\n            return;\n        if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n            ev.wheelX = ev.wheelY;\n            ev.wheelY = 0;\n        }\n\n        var t = ev.domEvent.timeStamp;\n        var dt = t - (this.$lastScrollTime||0);\n        \n        var editor = this.editor;\n        var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n        if (isScrolable || dt < 200) {\n            this.$lastScrollTime = t;\n            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n            return ev.stop();\n        }\n    };\n    \n    this.onTouchMove = function (ev) {\n        var t = ev.domEvent.timeStamp;\n        var dt = t - (this.$lastScrollTime || 0);\n\n        var editor = this.editor;\n        var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n        if (isScrolable || dt < 200) {\n            this.$lastScrollTime = t;\n            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n            return ev.stop();\n        }\n    };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nfunction calcRangeOrientation(range, cursor) {\n    if (range.start.row == range.end.row)\n        var cmp = 2 * cursor.column - range.start.column - range.end.column;\n    else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n        var cmp = cursor.column - 4;\n    else\n        var cmp = 2 * cursor.row - range.start.row - range.end.row;\n\n    if (cmp < 0)\n        return {cursor: range.start, anchor: range.end};\n    else\n        return {cursor: range.end, anchor: range.start};\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n    this.isOpen = false;\n    this.$element = null;\n    this.$parentNode = parentNode;\n}\n\n(function() {\n    this.$init = function() {\n        this.$element = dom.createElement(\"div\");\n        this.$element.className = \"ace_tooltip\";\n        this.$element.style.display = \"none\";\n        this.$parentNode.appendChild(this.$element);\n        return this.$element;\n    };\n    this.getElement = function() {\n        return this.$element || this.$init();\n    };\n    this.setText = function(text) {\n        dom.setInnerText(this.getElement(), text);\n    };\n    this.setHtml = function(html) {\n        this.getElement().innerHTML = html;\n    };\n    this.setPosition = function(x, y) {\n        this.getElement().style.left = x + \"px\";\n        this.getElement().style.top = y + \"px\";\n    };\n    this.setClassName = function(className) {\n        dom.addCssClass(this.getElement(), className);\n    };\n    this.show = function(text, x, y) {\n        if (text != null)\n            this.setText(text);\n        if (x != null && y != null)\n            this.setPosition(x, y);\n        if (!this.isOpen) {\n            this.getElement().style.display = \"block\";\n            this.isOpen = true;\n        }\n    };\n\n    this.hide = function() {\n        if (this.isOpen) {\n            this.getElement().style.display = \"none\";\n            this.isOpen = false;\n        }\n    };\n    this.getHeight = function() {\n        return this.getElement().offsetHeight;\n    };\n    this.getWidth = function() {\n        return this.getElement().offsetWidth;\n    };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var gutter = editor.renderer.$gutterLayer;\n    var tooltip = new GutterTooltip(editor.container);\n\n    mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n        if (!editor.isFocused() || e.getButton() != 0)\n            return;\n        var gutterRegion = gutter.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\")\n            return;\n\n        var row = e.getDocumentPosition().row;\n        var selection = editor.session.selection;\n\n        if (e.getShiftKey())\n            selection.selectTo(row, 0);\n        else {\n            if (e.domEvent.detail == 2) {\n                editor.selectAll();\n                return e.preventDefault();\n            }\n            mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n        }\n        mouseHandler.setState(\"selectByLines\");\n        mouseHandler.captureMouse(e);\n        return e.preventDefault();\n    });\n\n\n    var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n    function showTooltip() {\n        var row = mouseEvent.getDocumentPosition().row;\n        var annotation = gutter.$annotations[row];\n        if (!annotation)\n            return hideTooltip();\n\n        var maxRow = editor.session.getLength();\n        if (row == maxRow) {\n            var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n            var pos = mouseEvent.$pos;\n            if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n                return hideTooltip();\n        }\n\n        if (tooltipAnnotation == annotation)\n            return;\n        tooltipAnnotation = annotation.text.join(\"<br/>\");\n\n        tooltip.setHtml(tooltipAnnotation);\n        tooltip.show();\n        editor._signal(\"showGutterTooltip\", tooltip);\n        editor.on(\"mousewheel\", hideTooltip);\n\n        if (mouseHandler.$tooltipFollowsMouse) {\n            moveTooltip(mouseEvent);\n        } else {\n            var gutterElement = mouseEvent.domEvent.target;\n            var rect = gutterElement.getBoundingClientRect();\n            var style = tooltip.getElement().style;\n            style.left = rect.right + \"px\";\n            style.top = rect.bottom + \"px\";\n        }\n    }\n\n    function hideTooltip() {\n        if (tooltipTimeout)\n            tooltipTimeout = clearTimeout(tooltipTimeout);\n        if (tooltipAnnotation) {\n            tooltip.hide();\n            tooltipAnnotation = null;\n            editor._signal(\"hideGutterTooltip\", tooltip);\n            editor.removeEventListener(\"mousewheel\", hideTooltip);\n        }\n    }\n\n    function moveTooltip(e) {\n        tooltip.setPosition(e.x, e.y);\n    }\n\n    mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function(e) {\n        var target = e.domEvent.target || e.domEvent.srcElement;\n        if (dom.hasCssClass(target, \"ace_fold-widget\"))\n            return hideTooltip();\n\n        if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n            moveTooltip(e);\n\n        mouseEvent = e;\n        if (tooltipTimeout)\n            return;\n        tooltipTimeout = setTimeout(function() {\n            tooltipTimeout = null;\n            if (mouseEvent && !mouseHandler.isMousePressed)\n                showTooltip();\n            else\n                hideTooltip();\n        }, 50);\n    });\n\n    event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n        mouseEvent = null;\n        if (!tooltipAnnotation || tooltipTimeout)\n            return;\n\n        tooltipTimeout = setTimeout(function() {\n            tooltipTimeout = null;\n            hideTooltip();\n        }, 50);\n    });\n    \n    editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n    Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n    this.setPosition = function(x, y) {\n        var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n        var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n        var width = this.getWidth();\n        var height = this.getHeight();\n        x += 15;\n        y += 15;\n        if (x + width > windowWidth) {\n            x -= (x + width) - windowWidth;\n        }\n        if (y + height > windowHeight) {\n            y -= 20 + height;\n        }\n        Tooltip.prototype.setPosition.call(this, x, y);\n    };\n\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n    this.domEvent = domEvent;\n    this.editor = editor;\n    \n    this.x = this.clientX = domEvent.clientX;\n    this.y = this.clientY = domEvent.clientY;\n\n    this.$pos = null;\n    this.$inSelection = null;\n    \n    this.propagationStopped = false;\n    this.defaultPrevented = false;\n};\n\n(function() {  \n    \n    this.stopPropagation = function() {\n        event.stopPropagation(this.domEvent);\n        this.propagationStopped = true;\n    };\n    \n    this.preventDefault = function() {\n        event.preventDefault(this.domEvent);\n        this.defaultPrevented = true;\n    };\n    \n    this.stop = function() {\n        this.stopPropagation();\n        this.preventDefault();\n    };\n    this.getDocumentPosition = function() {\n        if (this.$pos)\n            return this.$pos;\n        \n        this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n        return this.$pos;\n    };\n    this.inSelection = function() {\n        if (this.$inSelection !== null)\n            return this.$inSelection;\n            \n        var editor = this.editor;\n        \n\n        var selectionRange = editor.getSelectionRange();\n        if (selectionRange.isEmpty())\n            this.$inSelection = false;\n        else {\n            var pos = this.getDocumentPosition();\n            this.$inSelection = selectionRange.contains(pos.row, pos.column);\n        }\n\n        return this.$inSelection;\n    };\n    this.getButton = function() {\n        return event.getButton(this.domEvent);\n    };\n    this.getShiftKey = function() {\n        return this.domEvent.shiftKey;\n    };\n    \n    this.getAccelKey = useragent.isMac\n        ? function() { return this.domEvent.metaKey; }\n        : function() { return this.domEvent.ctrlKey; };\n    \n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n    var editor = mouseHandler.editor;\n\n    var blankImage = dom.createElement(\"img\");\n    blankImage.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n    if (useragent.isOpera)\n        blankImage.style.cssText = \"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\";\n\n    var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n     exports.forEach(function(x) {\n         mouseHandler[x] = this[x];\n    }, this);\n    editor.addEventListener(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\n\n    var mouseTarget = editor.container;\n    var dragSelectionMarker, x, y;\n    var timerId, range;\n    var dragCursor, counter = 0;\n    var dragOperation;\n    var isInternal;\n    var autoScrollStartTime;\n    var cursorMovedTime;\n    var cursorPointOnCaretMoved;\n\n    this.onDragStart = function(e) {\n        if (this.cancelDrag || !mouseTarget.draggable) {\n            var self = this;\n            setTimeout(function(){\n                self.startSelect();\n                self.captureMouse(e);\n            }, 0);\n            return e.preventDefault();\n        }\n        range = editor.getSelectionRange();\n\n        var dataTransfer = e.dataTransfer;\n        dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n        if (useragent.isOpera) {\n            editor.container.appendChild(blankImage);\n            blankImage.scrollTop = 0;\n        }\n        dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);\n        if (useragent.isOpera) {\n            editor.container.removeChild(blankImage);\n        }\n        dataTransfer.clearData();\n        dataTransfer.setData(\"Text\", editor.session.getTextRange());\n\n        isInternal = true;\n        this.setState(\"drag\");\n    };\n\n    this.onDragEnd = function(e) {\n        mouseTarget.draggable = false;\n        isInternal = false;\n        this.setState(null);\n        if (!editor.getReadOnly()) {\n            var dropEffect = e.dataTransfer.dropEffect;\n            if (!dragOperation && dropEffect == \"move\")\n                editor.session.remove(editor.getSelectionRange());\n            editor.renderer.$cursorLayer.setBlinking(true);\n        }\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n    };\n\n    this.onDragEnter = function(e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker)\n            addDragMarker();\n        counter++;\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n\n    this.onDragOver = function(e) {\n        if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n            return;\n        x = e.clientX;\n        y = e.clientY;\n        if (!dragSelectionMarker) {\n            addDragMarker();\n            counter++;\n        }\n        if (onMouseMoveTimer !== null)\n            onMouseMoveTimer = null;\n\n        e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n        return event.preventDefault(e);\n    };\n\n    this.onDragLeave = function(e) {\n        counter--;\n        if (counter <= 0 && dragSelectionMarker) {\n            clearDragMarker();\n            dragOperation = null;\n            return event.preventDefault(e);\n        }\n    };\n\n    this.onDrop = function(e) {\n        if (!dragCursor)\n            return;\n        var dataTransfer = e.dataTransfer;\n        if (isInternal) {\n            switch (dragOperation) {\n                case \"move\":\n                    if (range.contains(dragCursor.row, dragCursor.column)) {\n                        range = {\n                            start: dragCursor,\n                            end: dragCursor\n                        };\n                    } else {\n                        range = editor.moveText(range, dragCursor);\n                    }\n                    break;\n                case \"copy\":\n                    range = editor.moveText(range, dragCursor, true);\n                    break;\n            }\n        } else {\n            var dropData = dataTransfer.getData('Text');\n            range = {\n                start: dragCursor,\n                end: editor.session.insert(dragCursor, dropData)\n            };\n            editor.focus();\n            dragOperation = null;\n        }\n        clearDragMarker();\n        return event.preventDefault(e);\n    };\n\n    event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler));\n    event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler));\n    event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler));\n\n    function scrollCursorIntoView(cursor, prevCursor) {\n        var now = Date.now();\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        var hMovement = !prevCursor || cursor.column != prevCursor.column;\n        if (!cursorMovedTime || vMovement || hMovement) {\n            editor.$blockScrolling += 1;\n            editor.moveCursorToPosition(cursor);\n            editor.$blockScrolling -= 1;\n            cursorMovedTime = now;\n            cursorPointOnCaretMoved = {x: x, y: y};\n        } else {\n            var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n            if (distance > SCROLL_CURSOR_HYSTERESIS) {\n                cursorMovedTime = null;\n            } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n                editor.renderer.scrollCursorIntoView();\n                cursorMovedTime = null;\n            }\n        }\n    }\n\n    function autoScroll(cursor, prevCursor) {\n        var now = Date.now();\n        var lineHeight = editor.renderer.layerConfig.lineHeight;\n        var characterWidth = editor.renderer.layerConfig.characterWidth;\n        var editorRect = editor.renderer.scroller.getBoundingClientRect();\n        var offsets = {\n           x: {\n               left: x - editorRect.left,\n               right: editorRect.right - x\n           },\n           y: {\n               top: y - editorRect.top,\n               bottom: editorRect.bottom - y\n           }\n        };\n        var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n        var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n        var scrollCursor = {row: cursor.row, column: cursor.column};\n        if (nearestXOffset / characterWidth <= 2) {\n            scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n        }\n        if (nearestYOffset / lineHeight <= 1) {\n            scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n        }\n        var vScroll = cursor.row != scrollCursor.row;\n        var hScroll = cursor.column != scrollCursor.column;\n        var vMovement = !prevCursor || cursor.row != prevCursor.row;\n        if (vScroll || (hScroll && !vMovement)) {\n            if (!autoScrollStartTime)\n                autoScrollStartTime = now;\n            else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n                editor.renderer.scrollCursorIntoView(scrollCursor);\n        } else {\n            autoScrollStartTime = null;\n        }\n    }\n\n    function onDragInterval() {\n        var prevCursor = dragCursor;\n        dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n        scrollCursorIntoView(dragCursor, prevCursor);\n        autoScroll(dragCursor, prevCursor);\n    }\n\n    function addDragMarker() {\n        range = editor.selection.toOrientedRange();\n        dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n        editor.clearSelection();\n        if (editor.isFocused())\n            editor.renderer.$cursorLayer.setBlinking(false);\n        clearInterval(timerId);\n        onDragInterval();\n        timerId = setInterval(onDragInterval, 20);\n        counter = 0;\n        event.addListener(document, \"mousemove\", onMouseMove);\n    }\n\n    function clearDragMarker() {\n        clearInterval(timerId);\n        editor.session.removeMarker(dragSelectionMarker);\n        dragSelectionMarker = null;\n        editor.$blockScrolling += 1;\n        editor.selection.fromOrientedRange(range);\n        editor.$blockScrolling -= 1;\n        if (editor.isFocused() && !isInternal)\n            editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly());\n        range = null;\n        dragCursor = null;\n        counter = 0;\n        autoScrollStartTime = null;\n        cursorMovedTime = null;\n        event.removeListener(document, \"mousemove\", onMouseMove);\n    }\n    var onMouseMoveTimer = null;\n    function onMouseMove() {\n        if (onMouseMoveTimer == null) {\n            onMouseMoveTimer = setTimeout(function() {\n                if (onMouseMoveTimer != null && dragSelectionMarker)\n                    clearDragMarker();\n            }, 20);\n        }\n    }\n\n    function canAccept(dataTransfer) {\n        var types = dataTransfer.types;\n        return !types || Array.prototype.some.call(types, function(type) {\n            return type == 'text/plain' || type == 'Text';\n        });\n    }\n\n    function getDropEffect(e) {\n        var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n        var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n        var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n        var effectAllowed = \"uninitialized\";\n        try {\n            effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n        } catch (e) {}\n        var dropEffect = \"none\";\n\n        if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n        else if (moveAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"move\";\n        else if (copyAllowed.indexOf(effectAllowed) >= 0)\n            dropEffect = \"copy\";\n\n        return dropEffect;\n    }\n}\n\n(function() {\n\n    this.dragWait = function() {\n        var interval = Date.now() - this.mousedownEvent.time;\n        if (interval > this.editor.getDragDelay())\n            this.startDrag();\n    };\n\n    this.dragWaitEnd = function() {\n        var target = this.editor.container;\n        target.draggable = false;\n        this.startSelect(this.mousedownEvent.getDocumentPosition());\n        this.selectEnd();\n    };\n\n    this.dragReadyEnd = function(e) {\n        this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly());\n        this.editor.unsetStyle(\"ace_dragging\");\n        this.editor.renderer.setCursorStyle(\"\");\n        this.dragWaitEnd();\n    };\n\n    this.startDrag = function(){\n        this.cancelDrag = false;\n        var editor = this.editor;\n        var target = editor.container;\n        target.draggable = true;\n        editor.renderer.$cursorLayer.setBlinking(false);\n        editor.setStyle(\"ace_dragging\");\n        var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n        editor.renderer.setCursorStyle(cursorStyle);\n        this.setState(\"dragReady\");\n    };\n\n    this.onMouseDrag = function(e) {\n        var target = this.editor.container;\n        if (useragent.isIE && this.state == \"dragReady\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 3)\n                target.dragDrop();\n        }\n        if (this.state === \"dragWait\") {\n            var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n            if (distance > 0) {\n                target.draggable = false;\n                this.startSelect(this.mousedownEvent.getDocumentPosition());\n            }\n        }\n    };\n\n    this.onMouseDown = function(e) {\n        if (!this.$dragEnabled)\n            return;\n        this.mousedownEvent = e;\n        var editor = this.editor;\n\n        var inSelection = e.inSelection();\n        var button = e.getButton();\n        var clickCount = e.domEvent.detail || 1;\n        if (clickCount === 1 && button === 0 && inSelection) {\n            if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n                return;\n            this.mousedownEvent.time = Date.now();\n            var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n            if (\"unselectable\" in eventTarget)\n                eventTarget.unselectable = \"on\";\n            if (editor.getDragDelay()) {\n                if (useragent.isWebKit) {\n                    this.cancelDrag = true;\n                    var mouseTarget = editor.container;\n                    mouseTarget.draggable = true;\n                }\n                this.setState(\"dragWait\");\n            } else {\n                this.startDrag();\n            }\n            this.captureMouse(e, this.onMouseDrag.bind(this));\n            e.defaultPrevented = true;\n        }\n    };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\n\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./dom\");\n\nexports.get = function (url, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(xhr.responseText);\n        }\n    };\n    xhr.send(null);\n};\n\nexports.loadScript = function(path, callback) {\n    var head = dom.getDocumentHead();\n    var s = document.createElement('script');\n\n    s.src = path;\n    head.appendChild(s);\n\n    s.onload = s.onreadystatechange = function(_, isAbort) {\n        if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n            s = s.onload = s.onreadystatechange = null;\n            if (!isAbort)\n                callback();\n        }\n    };\n};\nexports.qualifyURL = function(url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.href;\n}\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    callback && this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        var old = handlers[eventName];\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"no use strict\";\n\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\n\nvar optionsProvider = {\n    setOptions: function(optList) {\n        Object.keys(optList).forEach(function(key) {\n            this.setOption(key, optList[key]);\n        }, this);\n    },\n    getOptions: function(optionNames) {\n        var result = {};\n        if (!optionNames) {\n            optionNames = Object.keys(this.$options);\n        } else if (!Array.isArray(optionNames)) {\n            result = optionNames;\n            optionNames = Object.keys(result);\n        }\n        optionNames.forEach(function(key) {\n            result[key] = this.getOption(key);\n        }, this);\n        return result;\n    },\n    setOption: function(name, value) {\n        if (this[\"$\" + name] === value)\n            return;\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n\n        if (!opt.handlesSet)\n            this[\"$\" + name] = value;\n        if (opt && opt.set)\n            opt.set.call(this, value);\n    },\n    getOption: function(name) {\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n        return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n    }\n};\n\nfunction warn(message) {\n    if (typeof console != \"undefined\" && console.warn)\n        console.warn.apply(console, arguments);\n}\n\nfunction reportError(msg, data) {\n    var e = new Error(msg);\n    e.data = data;\n    if (typeof console == \"object\" && console.error)\n        console.error(e);\n    setTimeout(function() { throw e; });\n}\n\nvar AppConfig = function() {\n    this.$defaultOptions = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    this.defineOptions = function(obj, path, options) {\n        if (!obj.$options)\n            this.$defaultOptions[path] = obj.$options = {};\n\n        Object.keys(options).forEach(function(key) {\n            var opt = options[key];\n            if (typeof opt == \"string\")\n                opt = {forwardTo: opt};\n\n            opt.name || (opt.name = key);\n            obj.$options[opt.name] = opt;\n            if (\"initialValue\" in opt)\n                obj[\"$\" + opt.name] = opt.initialValue;\n        });\n        oop.implement(obj, optionsProvider);\n\n        return this;\n    };\n\n    this.resetOptions = function(obj) {\n        Object.keys(obj.$options).forEach(function(key) {\n            var opt = obj.$options[key];\n            if (\"value\" in opt)\n                obj.setOption(key, opt.value);\n        });\n    };\n\n    this.setDefaultValue = function(path, name, value) {\n        var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n        if (opts[name]) {\n            if (opts.forwardTo)\n                this.setDefaultValue(opts.forwardTo, name, value);\n            else\n                opts[name].value = value;\n        }\n    };\n\n    this.setDefaultValues = function(path, optionHash) {\n        Object.keys(optionHash).forEach(function(key) {\n            this.setDefaultValue(path, key, optionHash[key]);\n        }, this);\n    };\n    \n    this.warn = warn;\n    this.reportError = reportError;\n    \n}).call(AppConfig.prototype);\n\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"], function(require, exports, module) {\n\"no use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar net = require(\"./lib/net\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\n\nmodule.exports = exports = new AppConfig();\n\nvar global = (function() {\n    return this || typeof window != \"undefined\" && window;\n})();\n\nvar options = {\n    packaged: false,\n    workerPath: null,\n    modePath: null,\n    themePath: null,\n    basePath: \"\",\n    suffix: \".js\",\n    $moduleUrls: {}\n};\n\nexports.get = function(key) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n\n    return options[key];\n};\n\nexports.set = function(key, value) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n\n    options[key] = value;\n};\n\nexports.all = function() {\n    return lang.copyObject(options);\n};\nexports.moduleUrl = function(name, component) {\n    if (options.$moduleUrls[name])\n        return options.$moduleUrls[name];\n\n    var parts = name.split(\"/\");\n    component = component || parts[parts.length - 2] || \"\";\n    var sep = component == \"snippets\" ? \"/\" : \"-\";\n    var base = parts[parts.length - 1];\n    if (component == \"worker\" && sep == \"-\") {\n        var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n        base = base.replace(re, \"\");\n    }\n\n    if ((!base || base == component) && parts.length > 1)\n        base = parts[parts.length - 2];\n    var path = options[component + \"Path\"];\n    if (path == null) {\n        path = options.basePath;\n    } else if (sep == \"/\") {\n        component = sep = \"\";\n    }\n    if (path && path.slice(-1) != \"/\")\n        path += \"/\";\n    return path + component + sep + base + this.get(\"suffix\");\n};\n\nexports.setModuleUrl = function(name, subst) {\n    return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n    var module, moduleType;\n    if (Array.isArray(moduleName)) {\n        moduleType = moduleName[0];\n        moduleName = moduleName[1];\n    }\n\n    try {\n        module = require(moduleName);\n    } catch (e) {}\n    if (module && !exports.$loading[moduleName])\n        return onLoad && onLoad(module);\n\n    if (!exports.$loading[moduleName])\n        exports.$loading[moduleName] = [];\n\n    exports.$loading[moduleName].push(onLoad);\n\n    if (exports.$loading[moduleName].length > 1)\n        return;\n\n    var afterLoad = function() {\n        require([moduleName], function(module) {\n            exports._emit(\"load.module\", {name: moduleName, module: module});\n            var listeners = exports.$loading[moduleName];\n            exports.$loading[moduleName] = null;\n            listeners.forEach(function(onLoad) {\n                onLoad && onLoad(module);\n            });\n        });\n    };\n\n    if (!exports.get(\"packaged\"))\n        return afterLoad();\n    net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n};\ninit(true);function init(packaged) {\n\n    if (!global || !global.document)\n        return;\n    \n    options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged);\n\n    var scriptOptions = {};\n    var scriptUrl = \"\";\n    var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n    var currentDocument = currentScript && currentScript.ownerDocument || document;\n    \n    var scripts = currentDocument.getElementsByTagName(\"script\");\n    for (var i=0; i<scripts.length; i++) {\n        var script = scripts[i];\n\n        var src = script.src || script.getAttribute(\"src\");\n        if (!src)\n            continue;\n\n        var attributes = script.attributes;\n        for (var j=0, l=attributes.length; j < l; j++) {\n            var attr = attributes[j];\n            if (attr.name.indexOf(\"data-ace-\") === 0) {\n                scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n            }\n        }\n\n        var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n        if (m)\n            scriptUrl = m[1];\n    }\n\n    if (scriptUrl) {\n        scriptOptions.base = scriptOptions.base || scriptUrl;\n        scriptOptions.packaged = true;\n    }\n\n    scriptOptions.basePath = scriptOptions.base;\n    scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n    scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n    scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n    delete scriptOptions.base;\n\n    for (var key in scriptOptions)\n        if (typeof scriptOptions[key] !== \"undefined\")\n            exports.set(key, scriptOptions[key]);\n}\n\nexports.init = init;\n\nfunction deHyphenate(str) {\n    return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar config = require(\"../config\");\n\nvar MouseHandler = function(editor) {\n    var _self = this;\n    this.editor = editor;\n\n    new DefaultHandlers(this);\n    new DefaultGutterHandler(this);\n    new DragdropHandler(this);\n\n    var focusEditor = function(e) {\n        var windowBlurred = !document.hasFocus || !document.hasFocus()\n            || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement())\n        if (windowBlurred)\n            window.focus();\n        editor.focus();\n    };\n\n    var mouseTarget = editor.renderer.getMouseEventTarget();\n    event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"));\n    event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"));\n    event.addMultiMouseDownListener([\n        mouseTarget,\n        editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n        editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n        editor.textInput && editor.textInput.getElement()\n    ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\");\n    event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"));\n    event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, \"touchmove\"));\n\n    var gutterEl = editor.renderer.$gutter;\n    event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"));\n    event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"));\n    event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"));\n    event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"));\n\n    event.addListener(mouseTarget, \"mousedown\", focusEditor);\n    event.addListener(gutterEl, \"mousedown\", focusEditor);\n    if (useragent.isIE && editor.renderer.scrollBarV) {\n        event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor);\n        event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor);\n    }\n\n    editor.on(\"mousemove\", function(e){\n        if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n            return;\n\n        var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n        var range = editor.session.selection.getRange();\n        var renderer = editor.renderer;\n\n        if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n            renderer.setCursorStyle(\"default\");\n        } else {\n            renderer.setCursorStyle(\"\");\n        }\n    });\n};\n\n(function() {\n    this.onMouseEvent = function(name, e) {\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n\n    this.onMouseMove = function(name, e) {\n        var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n        if (!listeners || !listeners.length)\n            return;\n\n        this.editor._emit(name, new MouseEvent(e, this.editor));\n    };\n\n    this.onMouseWheel = function(name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n\n        this.editor._emit(name, mouseEvent);\n    };\n    \n    this.onTouchMove = function (name, e) {\n        var mouseEvent = new MouseEvent(e, this.editor);\n        mouseEvent.speed = 1;//this.$scrollSpeed * 2;\n        mouseEvent.wheelX = e.wheelX;\n        mouseEvent.wheelY = e.wheelY;\n        this.editor._emit(name, mouseEvent);\n    };\n\n    this.setState = function(state) {\n        this.state = state;\n    };\n\n    this.captureMouse = function(ev, mouseMoveHandler) {\n        this.x = ev.x;\n        this.y = ev.y;\n\n        this.isMousePressed = true;\n        var renderer = this.editor.renderer;\n        if (renderer.$keepTextAreaAtCursor)\n            renderer.$keepTextAreaAtCursor = null;\n\n        var self = this;\n        var onMouseMove = function(e) {\n            if (!e) return;\n            if (useragent.isWebKit && !e.which && self.releaseMouse)\n                return self.releaseMouse();\n\n            self.x = e.clientX;\n            self.y = e.clientY;\n            mouseMoveHandler && mouseMoveHandler(e);\n            self.mouseEvent = new MouseEvent(e, self.editor);\n            self.$mouseMoved = true;\n        };\n\n        var onCaptureEnd = function(e) {\n            clearInterval(timerId);\n            onCaptureInterval();\n            self[self.state + \"End\"] && self[self.state + \"End\"](e);\n            self.state = \"\";\n            if (renderer.$keepTextAreaAtCursor == null) {\n                renderer.$keepTextAreaAtCursor = true;\n                renderer.$moveTextAreaToCursor();\n            }\n            self.isMousePressed = false;\n            self.$onCaptureMouseMove = self.releaseMouse = null;\n            e && self.onMouseEvent(\"mouseup\", e);\n        };\n\n        var onCaptureInterval = function() {\n            self[self.state] && self[self.state]();\n            self.$mouseMoved = false;\n        };\n\n        if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n            return setTimeout(function() {onCaptureEnd(ev);});\n        }\n\n        self.$onCaptureMouseMove = onMouseMove;\n        self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n        var timerId = setInterval(onCaptureInterval, 20);\n    };\n    this.releaseMouse = null;\n    this.cancelContextMenu = function() {\n        var stop = function(e) {\n            if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n                return;\n            this.editor.off(\"nativecontextmenu\", stop);\n            if (e && e.domEvent)\n                event.stopEvent(e.domEvent);\n        }.bind(this);\n        setTimeout(stop, 10);\n        this.editor.on(\"nativecontextmenu\", stop);\n    };\n}).call(MouseHandler.prototype);\n\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n    scrollSpeed: {initialValue: 2},\n    dragDelay: {initialValue: (useragent.isMac ? 150 : 0)},\n    dragEnabled: {initialValue: true},\n    focusTimout: {initialValue: 0},\n    tooltipFollowsMouse: {initialValue: true}\n});\n\n\nexports.MouseHandler = MouseHandler;\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction FoldHandler(editor) {\n\n    editor.on(\"click\", function(e) {\n        var position = e.getDocumentPosition();\n        var session = editor.session;\n        var fold = session.getFoldAt(position.row, position.column, 1);\n        if (fold) {\n            if (e.getAccelKey())\n                session.removeFold(fold);\n            else\n                session.expandFold(fold);\n\n            e.stop();\n        }\n    });\n\n    editor.on(\"gutterclick\", function(e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            if (session.foldWidgets && session.foldWidgets[row])\n                editor.session.onFoldWidgetClick(row, e);\n            if (!editor.isFocused())\n                editor.focus();\n            e.stop();\n        }\n    });\n\n    editor.on(\"gutterdblclick\", function(e) {\n        var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n        if (gutterRegion == \"foldWidgets\") {\n            var row = e.getDocumentPosition().row;\n            var session = editor.session;\n            var data = session.getParentFoldRangeData(row, true);\n            var range = data.range || data.firstRange;\n\n            if (range) {\n                row = range.start.row;\n                var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n                if (fold) {\n                    session.removeFold(fold);\n                } else {\n                    session.addFold(\"...\", range);\n                    editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0});\n                }\n            }\n            e.stop();\n        }\n    });\n}\n\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil  = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\n\nvar KeyBinding = function(editor) {\n    this.$editor = editor;\n    this.$data = {editor: editor};\n    this.$handlers = [];\n    this.setDefaultHandler(editor.commands);\n};\n\n(function() {\n    this.setDefaultHandler = function(kb) {\n        this.removeKeyboardHandler(this.$defaultHandler);\n        this.$defaultHandler = kb;\n        this.addKeyboardHandler(kb, 0);\n    };\n\n    this.setKeyboardHandler = function(kb) {\n        var h = this.$handlers;\n        if (h[h.length - 1] == kb)\n            return;\n\n        while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n            this.removeKeyboardHandler(h[h.length - 1]);\n\n        this.addKeyboardHandler(kb, 1);\n    };\n\n    this.addKeyboardHandler = function(kb, pos) {\n        if (!kb)\n            return;\n        if (typeof kb == \"function\" && !kb.handleKeyboard)\n            kb.handleKeyboard = kb;\n        var i = this.$handlers.indexOf(kb);\n        if (i != -1)\n            this.$handlers.splice(i, 1);\n\n        if (pos == undefined)\n            this.$handlers.push(kb);\n        else\n            this.$handlers.splice(pos, 0, kb);\n\n        if (i == -1 && kb.attach)\n            kb.attach(this.$editor);\n    };\n\n    this.removeKeyboardHandler = function(kb) {\n        var i = this.$handlers.indexOf(kb);\n        if (i == -1)\n            return false;\n        this.$handlers.splice(i, 1);\n        kb.detach && kb.detach(this.$editor);\n        return true;\n    };\n\n    this.getKeyboardHandler = function() {\n        return this.$handlers[this.$handlers.length - 1];\n    };\n    \n    this.getStatusText = function() {\n        var data = this.$data;\n        var editor = data.editor;\n        return this.$handlers.map(function(h) {\n            return h.getStatusText && h.getStatusText(editor, data) || \"\";\n        }).filter(Boolean).join(\" \");\n    };\n\n    this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\n        var toExecute;\n        var success = false;\n        var commands = this.$editor.commands;\n\n        for (var i = this.$handlers.length; i--;) {\n            toExecute = this.$handlers[i].handleKeyboard(\n                this.$data, hashId, keyString, keyCode, e\n            );\n            if (!toExecute || !toExecute.command)\n                continue;\n            if (toExecute.command == \"null\") {\n                success = true;\n            } else {\n                success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n            }\n            if (success && e && hashId != -1 && \n                toExecute.passEvent != true && toExecute.command.passEvent != true\n            ) {\n                event.stopEvent(e);\n            }\n            if (success)\n                break;\n        }\n        \n        if (!success && hashId == -1) {\n            toExecute = {command: \"insertstring\"};\n            success = commands.exec(\"insertstring\", this.$editor, keyString);\n        }\n        \n        if (success && this.$editor._signal)\n            this.$editor._signal(\"keyboardActivity\", toExecute);\n        \n        return success;\n    };\n\n    this.onCommandKey = function(e, hashId, keyCode) {\n        var keyString = keyUtil.keyCodeToString(keyCode);\n        this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n    };\n\n    this.onTextInput = function(text) {\n        this.$callKeyboardHandlers(-1, text);\n    };\n\n}).call(KeyBinding.prototype);\n\nexports.KeyBinding = KeyBinding;\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\n        else\n            return new Range(this.start.row, 0, this.end.row, 0)\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = function(session) {\n    this.session = session;\n    this.doc = session.getDocument();\n\n    this.clearSelection();\n    this.lead = this.selectionLead = this.doc.createAnchor(0, 0);\n    this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0);\n\n    var self = this;\n    this.lead.on(\"change\", function(e) {\n        self._emit(\"changeCursor\");\n        if (!self.$isEmpty)\n            self._emit(\"changeSelection\");\n        if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n            self.$desiredColumn = null;\n    });\n\n    this.selectionAnchor.on(\"change\", function() {\n        if (!self.$isEmpty)\n            self._emit(\"changeSelection\");\n    });\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.isEmpty = function() {\n        return (this.$isEmpty || (\n            this.anchor.row == this.lead.row &&\n            this.anchor.column == this.lead.column\n        ));\n    };\n    this.isMultiLine = function() {\n        if (this.isEmpty()) {\n            return false;\n        }\n\n        return this.getRange().isMultiLine();\n    };\n    this.getCursor = function() {\n        return this.lead.getPosition();\n    };\n    this.setSelectionAnchor = function(row, column) {\n        this.anchor.setPosition(row, column);\n\n        if (this.$isEmpty) {\n            this.$isEmpty = false;\n            this._emit(\"changeSelection\");\n        }\n    };\n    this.getSelectionAnchor = function() {\n        if (this.$isEmpty)\n            return this.getSelectionLead();\n        else\n            return this.anchor.getPosition();\n    };\n    this.getSelectionLead = function() {\n        return this.lead.getPosition();\n    };\n    this.shiftSelection = function(columns) {\n        if (this.$isEmpty) {\n            this.moveCursorTo(this.lead.row, this.lead.column + columns);\n            return;\n        }\n\n        var anchor = this.getSelectionAnchor();\n        var lead = this.getSelectionLead();\n\n        var isBackwards = this.isBackwards();\n\n        if (!isBackwards || anchor.column !== 0)\n            this.setSelectionAnchor(anchor.row, anchor.column + columns);\n\n        if (isBackwards || lead.column !== 0) {\n            this.$moveSelection(function() {\n                this.moveCursorTo(lead.row, lead.column + columns);\n            });\n        }\n    };\n    this.isBackwards = function() {\n        var anchor = this.anchor;\n        var lead = this.lead;\n        return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n    };\n    this.getRange = function() {\n        var anchor = this.anchor;\n        var lead = this.lead;\n\n        if (this.isEmpty())\n            return Range.fromPoints(lead, lead);\n\n        if (this.isBackwards()) {\n            return Range.fromPoints(lead, anchor);\n        }\n        else {\n            return Range.fromPoints(anchor, lead);\n        }\n    };\n    this.clearSelection = function() {\n        if (!this.$isEmpty) {\n            this.$isEmpty = true;\n            this._emit(\"changeSelection\");\n        }\n    };\n    this.selectAll = function() {\n        var lastRow = this.doc.getLength() - 1;\n        this.setSelectionAnchor(0, 0);\n        this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length);\n    };\n    this.setRange =\n    this.setSelectionRange = function(range, reverse) {\n        if (reverse) {\n            this.setSelectionAnchor(range.end.row, range.end.column);\n            this.selectTo(range.start.row, range.start.column);\n        } else {\n            this.setSelectionAnchor(range.start.row, range.start.column);\n            this.selectTo(range.end.row, range.end.column);\n        }\n        if (this.getRange().isEmpty())\n            this.$isEmpty = true;\n        this.$desiredColumn = null;\n    };\n\n    this.$moveSelection = function(mover) {\n        var lead = this.lead;\n        if (this.$isEmpty)\n            this.setSelectionAnchor(lead.row, lead.column);\n\n        mover.call(this);\n    };\n    this.selectTo = function(row, column) {\n        this.$moveSelection(function() {\n            this.moveCursorTo(row, column);\n        });\n    };\n    this.selectToPosition = function(pos) {\n        this.$moveSelection(function() {\n            this.moveCursorToPosition(pos);\n        });\n    };\n    this.moveTo = function(row, column) {\n        this.clearSelection();\n        this.moveCursorTo(row, column);\n    };\n    this.moveToPosition = function(pos) {\n        this.clearSelection();\n        this.moveCursorToPosition(pos);\n    };\n    this.selectUp = function() {\n        this.$moveSelection(this.moveCursorUp);\n    };\n    this.selectDown = function() {\n        this.$moveSelection(this.moveCursorDown);\n    };\n    this.selectRight = function() {\n        this.$moveSelection(this.moveCursorRight);\n    };\n    this.selectLeft = function() {\n        this.$moveSelection(this.moveCursorLeft);\n    };\n    this.selectLineStart = function() {\n        this.$moveSelection(this.moveCursorLineStart);\n    };\n    this.selectLineEnd = function() {\n        this.$moveSelection(this.moveCursorLineEnd);\n    };\n    this.selectFileEnd = function() {\n        this.$moveSelection(this.moveCursorFileEnd);\n    };\n    this.selectFileStart = function() {\n        this.$moveSelection(this.moveCursorFileStart);\n    };\n    this.selectWordRight = function() {\n        this.$moveSelection(this.moveCursorWordRight);\n    };\n    this.selectWordLeft = function() {\n        this.$moveSelection(this.moveCursorWordLeft);\n    };\n    this.getWordRange = function(row, column) {\n        if (typeof column == \"undefined\") {\n            var cursor = row || this.lead;\n            row = cursor.row;\n            column = cursor.column;\n        }\n        return this.session.getWordRange(row, column);\n    };\n    this.selectWord = function() {\n        this.setSelectionRange(this.getWordRange());\n    };\n    this.selectAWord = function() {\n        var cursor = this.getCursor();\n        var range = this.session.getAWordRange(cursor.row, cursor.column);\n        this.setSelectionRange(range);\n    };\n\n    this.getLineRange = function(row, excludeLastChar) {\n        var rowStart = typeof row == \"number\" ? row : this.lead.row;\n        var rowEnd;\n\n        var foldLine = this.session.getFoldLine(rowStart);\n        if (foldLine) {\n            rowStart = foldLine.start.row;\n            rowEnd = foldLine.end.row;\n        } else {\n            rowEnd = rowStart;\n        }\n        if (excludeLastChar === true)\n            return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n        else\n            return new Range(rowStart, 0, rowEnd + 1, 0);\n    };\n    this.selectLine = function() {\n        this.setSelectionRange(this.getLineRange());\n    };\n    this.moveCursorUp = function() {\n        this.moveCursorBy(-1, 0);\n    };\n    this.moveCursorDown = function() {\n        this.moveCursorBy(1, 0);\n    };\n    this.moveCursorLeft = function() {\n        var cursor = this.lead.getPosition(),\n            fold;\n\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n        } else if (cursor.column === 0) {\n            if (cursor.row > 0) {\n                this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(\" \").length-1 == tabSize)\n                this.moveCursorBy(0, -tabSize);\n            else\n                this.moveCursorBy(0, -1);\n        }\n    };\n    this.moveCursorRight = function() {\n        var cursor = this.lead.getPosition(),\n            fold;\n        if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n        }\n        else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n            if (this.lead.row < this.doc.getLength() - 1) {\n                this.moveCursorTo(this.lead.row + 1, 0);\n            }\n        }\n        else {\n            var tabSize = this.session.getTabSize();\n            var cursor = this.lead;\n            if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(\" \").length-1 == tabSize)\n                this.moveCursorBy(0, tabSize);\n            else\n                this.moveCursorBy(0, 1);\n        }\n    };\n    this.moveCursorLineStart = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var screenRow = this.session.documentToScreenRow(row, column);\n        var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n        var beforeCursor = this.session.getDisplayLine(\n            row, null, firstColumnPosition.row,\n            firstColumnPosition.column\n        );\n\n        var leadingSpace = beforeCursor.match(/^\\s*/);\n        if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n            firstColumnPosition.column += leadingSpace[0].length;\n        this.moveCursorToPosition(firstColumnPosition);\n    };\n    this.moveCursorLineEnd = function() {\n        var lead = this.lead;\n        var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n        if (this.lead.column == lineEnd.column) {\n            var line = this.session.getLine(lineEnd.row);\n            if (lineEnd.column == line.length) {\n                var textEnd = line.search(/\\s+$/);\n                if (textEnd > 0)\n                    lineEnd.column = textEnd;\n            }\n        }\n\n        this.moveCursorTo(lineEnd.row, lineEnd.column);\n    };\n    this.moveCursorFileEnd = function() {\n        var row = this.doc.getLength() - 1;\n        var column = this.doc.getLine(row).length;\n        this.moveCursorTo(row, column);\n    };\n    this.moveCursorFileStart = function() {\n        this.moveCursorTo(0, 0);\n    };\n    this.moveCursorLongWordRight = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n\n        var match;\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            this.moveCursorTo(fold.end.row, fold.end.column);\n            return;\n        }\n        if (match = this.session.nonTokenRe.exec(rightOfCursor)) {\n            column += this.session.nonTokenRe.lastIndex;\n            this.session.nonTokenRe.lastIndex = 0;\n            rightOfCursor = line.substring(column);\n        }\n        if (column >= line.length) {\n            this.moveCursorTo(row, line.length);\n            this.moveCursorRight();\n            if (row < this.doc.getLength() - 1)\n                this.moveCursorWordRight();\n            return;\n        }\n        if (match = this.session.tokenRe.exec(rightOfCursor)) {\n            column += this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n\n        this.moveCursorTo(row, column);\n    };\n    this.moveCursorLongWordLeft = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1)) {\n            this.moveCursorTo(fold.start.row, fold.start.column);\n            return;\n        }\n\n        var str = this.session.getFoldStringAt(row, column, -1);\n        if (str == null) {\n            str = this.doc.getLine(row).substring(0, column);\n        }\n\n        var leftOfCursor = lang.stringReverse(str);\n        var match;\n        this.session.nonTokenRe.lastIndex = 0;\n        this.session.tokenRe.lastIndex = 0;\n        if (match = this.session.nonTokenRe.exec(leftOfCursor)) {\n            column -= this.session.nonTokenRe.lastIndex;\n            leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n            this.session.nonTokenRe.lastIndex = 0;\n        }\n        if (column <= 0) {\n            this.moveCursorTo(row, 0);\n            this.moveCursorLeft();\n            if (row > 0)\n                this.moveCursorWordLeft();\n            return;\n        }\n        if (match = this.session.tokenRe.exec(leftOfCursor)) {\n            column -= this.session.tokenRe.lastIndex;\n            this.session.tokenRe.lastIndex = 0;\n        }\n\n        this.moveCursorTo(row, column);\n    };\n\n    this.$shortWordEndIndex = function(rightOfCursor) {\n        var match, index = 0, ch;\n        var whitespaceRe = /\\s/;\n        var tokenRe = this.session.tokenRe;\n\n        tokenRe.lastIndex = 0;\n        if (match = this.session.tokenRe.exec(rightOfCursor)) {\n            index = this.session.tokenRe.lastIndex;\n        } else {\n            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                index ++;\n\n            if (index < 1) {\n                tokenRe.lastIndex = 0;\n                 while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n                    tokenRe.lastIndex = 0;\n                    index ++;\n                    if (whitespaceRe.test(ch)) {\n                        if (index > 2) {\n                            index--;\n                            break;\n                        } else {\n                            while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n                                index ++;\n                            if (index > 2)\n                                break;\n                        }\n                    }\n                }\n            }\n        }\n        tokenRe.lastIndex = 0;\n\n        return index;\n    };\n\n    this.moveCursorShortWordRight = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n        var line = this.doc.getLine(row);\n        var rightOfCursor = line.substring(column);\n\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold)\n            return this.moveCursorTo(fold.end.row, fold.end.column);\n\n        if (column == line.length) {\n            var l = this.doc.getLength();\n            do {\n                row++;\n                rightOfCursor = this.doc.getLine(row);\n            } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n            if (!/^\\s+/.test(rightOfCursor))\n                rightOfCursor = \"\";\n            column = 0;\n        }\n\n        var index = this.$shortWordEndIndex(rightOfCursor);\n\n        this.moveCursorTo(row, column + index);\n    };\n\n    this.moveCursorShortWordLeft = function() {\n        var row = this.lead.row;\n        var column = this.lead.column;\n\n        var fold;\n        if (fold = this.session.getFoldAt(row, column, -1))\n            return this.moveCursorTo(fold.start.row, fold.start.column);\n\n        var line = this.session.getLine(row).substring(0, column);\n        if (column === 0) {\n            do {\n                row--;\n                line = this.doc.getLine(row);\n            } while (row > 0 && /^\\s*$/.test(line));\n\n            column = line.length;\n            if (!/\\s+$/.test(line))\n                line = \"\";\n        }\n\n        var leftOfCursor = lang.stringReverse(line);\n        var index = this.$shortWordEndIndex(leftOfCursor);\n\n        return this.moveCursorTo(row, column - index);\n    };\n\n    this.moveCursorWordRight = function() {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordRight();\n        else\n            this.moveCursorShortWordRight();\n    };\n\n    this.moveCursorWordLeft = function() {\n        if (this.session.$selectLongWords)\n            this.moveCursorLongWordLeft();\n        else\n            this.moveCursorShortWordLeft();\n    };\n    this.moveCursorBy = function(rows, chars) {\n        var screenPos = this.session.documentToScreenPosition(\n            this.lead.row,\n            this.lead.column\n        );\n\n        if (chars === 0) {\n            if (this.$desiredColumn)\n                screenPos.column = this.$desiredColumn;\n            else\n                this.$desiredColumn = screenPos.column;\n        }\n\n        var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column);\n        \n        if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n            if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) {\n                if (docPos.row > 0 || rows > 0)\n                    docPos.row++;\n            }\n        }\n        this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n    };\n    this.moveCursorToPosition = function(position) {\n        this.moveCursorTo(position.row, position.column);\n    };\n    this.moveCursorTo = function(row, column, keepDesiredColumn) {\n        var fold = this.session.getFoldAt(row, column, 1);\n        if (fold) {\n            row = fold.start.row;\n            column = fold.start.column;\n        }\n\n        this.$keepDesiredColumnOnChange = true;\n        this.lead.setPosition(row, column);\n        this.$keepDesiredColumnOnChange = false;\n\n        if (!keepDesiredColumn)\n            this.$desiredColumn = null;\n    };\n    this.moveCursorToScreen = function(row, column, keepDesiredColumn) {\n        var pos = this.session.screenToDocumentPosition(row, column);\n        this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n    };\n    this.detach = function() {\n        this.lead.detach();\n        this.anchor.detach();\n        this.session = this.doc = null;\n    };\n\n    this.fromOrientedRange = function(range) {\n        this.setSelectionRange(range, range.cursor == range.start);\n        this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n    };\n\n    this.toOrientedRange = function(range) {\n        var r = this.getRange();\n        if (range) {\n            range.start.column = r.start.column;\n            range.start.row = r.start.row;\n            range.end.column = r.end.column;\n            range.end.row = r.end.row;\n        } else {\n            range = r;\n        }\n\n        range.cursor = this.isBackwards() ? range.start : range.end;\n        range.desiredColumn = this.$desiredColumn;\n        return range;\n    };\n    this.getRangeOfMovements = function(func) {\n        var start = this.getCursor();\n        try {\n            func(this);\n            var end = this.getCursor();\n            return Range.fromPoints(start,end);\n        } catch(e) {\n            return Range.fromPoints(start,start);\n        } finally {\n            this.moveCursorToPosition(start);\n        }\n    };\n\n    this.toJSON = function() {\n        if (this.rangeCount) {\n            var data = this.ranges.map(function(r) {\n                var r1 = r.clone();\n                r1.isBackwards = r.cursor == r.start;\n                return r1;\n            });\n        } else {\n            var data = this.getRange();\n            data.isBackwards = this.isBackwards();\n        }\n        return data;\n    };\n\n    this.fromJSON = function(data) {\n        if (data.start == undefined) {\n            if (this.rangeList) {\n                this.toSingleRange(data[0]);\n                for (var i = data.length; i--; ) {\n                    var r = Range.fromPoints(data[i].start, data[i].end);\n                    if (data[i].isBackwards)\n                        r.cursor = r.start;\n                    this.addRange(r, true);\n                }\n                return;\n            } else\n                data = data[0];\n        }\n        if (this.rangeList)\n            this.toSingleRange(data);\n        this.setSelectionRange(data, data.isBackwards);\n    };\n\n    this.isEqual = function(data) {\n        if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n            return false;\n        if (!data.length || !this.ranges)\n            return this.getRange().isEqual(data);\n\n        for (var i = this.ranges.length; i--; ) {\n            if (!this.ranges[i].isEqual(data[i]))\n                return false;\n        }\n        return true;\n    };\n\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n    this.states = rules;\n\n    this.regExps = {};\n    this.matchMappings = {};\n    for (var key in this.states) {\n        var state = this.states[key];\n        var ruleRegExps = [];\n        var matchTotal = 0;\n        var mapping = this.matchMappings[key] = {defaultToken: \"text\"};\n        var flag = \"g\";\n\n        var splitterRurles = [];\n        for (var i = 0; i < state.length; i++) {\n            var rule = state[i];\n            if (rule.defaultToken)\n                mapping.defaultToken = rule.defaultToken;\n            if (rule.caseInsensitive)\n                flag = \"gi\";\n            if (rule.regex == null)\n                continue;\n\n            if (rule.regex instanceof RegExp)\n                rule.regex = rule.regex.toString().slice(1, -1);\n            var adjustedregex = rule.regex;\n            var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n            if (Array.isArray(rule.token)) {\n                if (rule.token.length == 1 || matchcount == 1) {\n                    rule.token = rule.token[0];\n                } else if (matchcount - 1 != rule.token.length) {\n                    this.reportError(\"number of classes and regexp groups doesn't match\", { \n                        rule: rule,\n                        groupCount: matchcount - 1\n                    });\n                    rule.token = rule.token[0];\n                } else {\n                    rule.tokenArray = rule.token;\n                    rule.token = null;\n                    rule.onMatch = this.$arrayTokens;\n                }\n            } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n                if (matchcount > 1)\n                    rule.onMatch = this.$applyToken;\n                else\n                    rule.onMatch = rule.token;\n            }\n\n            if (matchcount > 1) {\n                if (/\\\\\\d/.test(rule.regex)) {\n                    adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function(match, digit) {\n                        return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n                    });\n                } else {\n                    matchcount = 1;\n                    adjustedregex = this.removeCapturingGroups(rule.regex);\n                }\n                if (!rule.splitRegex && typeof rule.token != \"string\")\n                    splitterRurles.push(rule); // flag will be known only at the very end\n            }\n\n            mapping[matchTotal] = i;\n            matchTotal += matchcount;\n\n            ruleRegExps.push(adjustedregex);\n            if (!rule.onMatch)\n                rule.onMatch = null;\n        }\n        \n        if (!ruleRegExps.length) {\n            mapping[0] = 0;\n            ruleRegExps.push(\"$\");\n        }\n        \n        splitterRurles.forEach(function(rule) {\n            rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n        }, this);\n\n        this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n    }\n};\n\n(function() {\n    this.$setMaxTokenCount = function(m) {\n        MAX_TOKEN_COUNT = m | 0;\n    };\n    \n    this.$applyToken = function(str) {\n        var values = this.splitRegex.exec(str).slice(1);\n        var types = this.token.apply(this, values);\n        if (typeof types === \"string\")\n            return [{type: types, value: str}];\n\n        var tokens = [];\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i]\n                };\n        }\n        return tokens;\n    };\n\n    this.$arrayTokens = function(str) {\n        if (!str)\n            return [];\n        var values = this.splitRegex.exec(str);\n        if (!values)\n            return \"text\";\n        var tokens = [];\n        var types = this.tokenArray;\n        for (var i = 0, l = types.length; i < l; i++) {\n            if (values[i + 1])\n                tokens[tokens.length] = {\n                    type: types[i],\n                    value: values[i + 1]\n                };\n        }\n        return tokens;\n    };\n\n    this.removeCapturingGroups = function(src) {\n        var r = src.replace(\n            /\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,\n            function(x, y) {return y ? \"(?:\" : x;}\n        );\n        return r;\n    };\n\n    this.createSplitterRegexp = function(src, flag) {\n        if (src.indexOf(\"(?=\") != -1) {\n            var stack = 0;\n            var inChClass = false;\n            var lastCapture = {};\n            src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function(\n                m, esc, parenOpen, parenClose, square, index\n            ) {\n                if (inChClass) {\n                    inChClass = square != \"]\";\n                } else if (square) {\n                    inChClass = true;\n                } else if (parenClose) {\n                    if (stack == lastCapture.stack) {\n                        lastCapture.end = index+1;\n                        lastCapture.stack = -1;\n                    }\n                    stack--;\n                } else if (parenOpen) {\n                    stack++;\n                    if (parenOpen.length != 1) {\n                        lastCapture.stack = stack\n                        lastCapture.start = index;\n                    }\n                }\n                return m;\n            });\n\n            if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n                src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n        }\n        if (src.charAt(0) != \"^\") src = \"^\" + src;\n        if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n        \n        return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n    };\n    this.getLineTokens = function(line, startState) {\n        if (startState && typeof startState != \"string\") {\n            var stack = startState.slice(0);\n            startState = stack[0];\n            if (startState === \"#tmp\") {\n                stack.shift()\n                startState = stack.shift()\n            }\n        } else\n            var stack = [];\n\n        var currentState = startState || \"start\";\n        var state = this.states[currentState];\n        if (!state) {\n            currentState = \"start\";\n            state = this.states[currentState];\n        }\n        var mapping = this.matchMappings[currentState];\n        var re = this.regExps[currentState];\n        re.lastIndex = 0;\n\n        var match, tokens = [];\n        var lastIndex = 0;\n        var matchAttempts = 0;\n\n        var token = {type: null, value: \"\"};\n\n        while (match = re.exec(line)) {\n            var type = mapping.defaultToken;\n            var rule = null;\n            var value = match[0];\n            var index = re.lastIndex;\n\n            if (index - value.length > lastIndex) {\n                var skipped = line.substring(lastIndex, index - value.length);\n                if (token.type == type) {\n                    token.value += skipped;\n                } else {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: type, value: skipped};\n                }\n            }\n\n            for (var i = 0; i < match.length-2; i++) {\n                if (match[i + 1] === undefined)\n                    continue;\n\n                rule = state[mapping[i]];\n\n                if (rule.onMatch)\n                    type = rule.onMatch(value, currentState, stack);\n                else\n                    type = rule.token;\n\n                if (rule.next) {\n                    if (typeof rule.next == \"string\") {\n                        currentState = rule.next;\n                    } else {\n                        currentState = rule.next(currentState, stack);\n                    }\n                    \n                    state = this.states[currentState];\n                    if (!state) {\n                        this.reportError(\"state doesn't exist\", currentState);\n                        currentState = \"start\";\n                        state = this.states[currentState];\n                    }\n                    mapping = this.matchMappings[currentState];\n                    lastIndex = index;\n                    re = this.regExps[currentState];\n                    re.lastIndex = index;\n                }\n                break;\n            }\n\n            if (value) {\n                if (typeof type === \"string\") {\n                    if ((!rule || rule.merge !== false) && token.type === type) {\n                        token.value += value;\n                    } else {\n                        if (token.type)\n                            tokens.push(token);\n                        token = {type: type, value: value};\n                    }\n                } else if (type) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {type: null, value: \"\"};\n                    for (var i = 0; i < type.length; i++)\n                        tokens.push(type[i]);\n                }\n            }\n\n            if (lastIndex == line.length)\n                break;\n\n            lastIndex = index;\n\n            if (matchAttempts++ > MAX_TOKEN_COUNT) {\n                if (matchAttempts > 2 * line.length) {\n                    this.reportError(\"infinite loop with in ace tokenizer\", {\n                        startState: startState,\n                        line: line\n                    });\n                }\n                while (lastIndex < line.length) {\n                    if (token.type)\n                        tokens.push(token);\n                    token = {\n                        value: line.substring(lastIndex, lastIndex += 2000),\n                        type: \"overflow\"\n                    };\n                }\n                currentState = \"start\";\n                stack = [];\n                break;\n            }\n        }\n\n        if (token.type)\n            tokens.push(token);\n        \n        if (stack.length > 1) {\n            if (stack[0] !== currentState)\n                stack.unshift(\"#tmp\", currentState);\n        }\n        return {\n            tokens : tokens,\n            state : stack.length ? stack : currentState\n        };\n    };\n    \n    this.reportError = config.reportError;\n    \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"empty_line\",\n            regex : '^$'\n        }, {\n            defaultToken : \"text\"\n        }]\n    };\n};\n\n(function() {\n\n    this.addRules = function(rules, prefix) {\n        if (!prefix) {\n            for (var key in rules)\n                this.$rules[key] = rules[key];\n            return;\n        }\n        for (var key in rules) {\n            var state = rules[key];\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                if (rule.next || rule.onMatch) {\n                    if (typeof rule.next == \"string\") {\n                        if (rule.next.indexOf(prefix) !== 0)\n                            rule.next = prefix + rule.next;\n                    }\n                    if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n                        rule.nextState = prefix + rule.nextState;\n                }\n            }\n            this.$rules[prefix + key] = state;\n        }\n    };\n\n    this.getRules = function() {\n        return this.$rules;\n    };\n\n    this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n        var embedRules = typeof HighlightRules == \"function\"\n            ? new HighlightRules().getRules()\n            : HighlightRules;\n        if (states) {\n            for (var i = 0; i < states.length; i++)\n                states[i] = prefix + states[i];\n        } else {\n            states = [];\n            for (var key in embedRules)\n                states.push(prefix + key);\n        }\n\n        this.addRules(embedRules, prefix);\n\n        if (escapeRules) {\n            var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n            for (var i = 0; i < states.length; i++)\n                addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n        }\n\n        if (!this.$embeds)\n            this.$embeds = [];\n        this.$embeds.push(prefix);\n    };\n\n    this.getEmbeds = function() {\n        return this.$embeds;\n    };\n\n    var pushState = function(currentState, stack) {\n        if (currentState != \"start\" || stack.length)\n            stack.unshift(this.nextState, currentState);\n        return this.nextState;\n    };\n    var popState = function(currentState, stack) {\n        stack.shift();\n        return stack.shift() || \"start\";\n    };\n\n    this.normalizeRules = function() {\n        var id = 0;\n        var rules = this.$rules;\n        function processState(key) {\n            var state = rules[key];\n            state.processed = true;\n            for (var i = 0; i < state.length; i++) {\n                var rule = state[i];\n                var toInsert = null;\n                if (Array.isArray(rule)) {\n                    toInsert = rule;\n                    rule = {};\n                }\n                if (!rule.regex && rule.start) {\n                    rule.regex = rule.start;\n                    if (!rule.next)\n                        rule.next = [];\n                    rule.next.push({\n                        defaultToken: rule.token\n                    }, {\n                        token: rule.token + \".end\",\n                        regex: rule.end || rule.start,\n                        next: \"pop\"\n                    });\n                    rule.token = rule.token + \".start\";\n                    rule.push = true;\n                }\n                var next = rule.next || rule.push;\n                if (next && Array.isArray(next)) {\n                    var stateName = rule.stateName;\n                    if (!stateName)  {\n                        stateName = rule.token;\n                        if (typeof stateName != \"string\")\n                            stateName = stateName[0] || \"\";\n                        if (rules[stateName])\n                            stateName += id++;\n                    }\n                    rules[stateName] = next;\n                    rule.next = stateName;\n                    processState(stateName);\n                } else if (next == \"pop\") {\n                    rule.next = popState;\n                }\n\n                if (rule.push) {\n                    rule.nextState = rule.next || rule.push;\n                    rule.next = pushState;\n                    delete rule.push;\n                }\n\n                if (rule.rules) {\n                    for (var r in rule.rules) {\n                        if (rules[r]) {\n                            if (rules[r].push)\n                                rules[r].push.apply(rules[r], rule.rules[r]);\n                        } else {\n                            rules[r] = rule.rules[r];\n                        }\n                    }\n                }\n                var includeName = typeof rule == \"string\"\n                    ? rule\n                    : typeof rule.include == \"string\"\n                    ? rule.include\n                    : \"\";\n                if (includeName) {\n                    toInsert = rules[includeName];\n                }\n\n                if (toInsert) {\n                    var args = [i, 1].concat(toInsert);\n                    if (rule.noEscape)\n                        args = args.filter(function(x) {return !x.next;});\n                    state.splice.apply(state, args);\n                    i--;\n                }\n                \n                if (rule.keywordMap) {\n                    rule.token = this.createKeywordMapper(\n                        rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n                    );\n                    delete rule.defaultToken;\n                }\n            }\n        }\n        Object.keys(rules).forEach(processState, this);\n    };\n\n    this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) {\n        var keywords = Object.create(null);\n        Object.keys(map).forEach(function(className) {\n            var a = map[className];\n            if (ignoreCase)\n                a = a.toLowerCase();\n            var list = a.split(splitChar || \"|\");\n            for (var i = list.length; i--; )\n                keywords[list[i]] = className;\n        });\n        if (Object.getPrototypeOf(keywords)) {\n            keywords.__proto__ = null;\n        }\n        this.$keywordList = Object.keys(keywords);\n        map = null;\n        return ignoreCase\n            ? function(value) {return keywords[value.toLowerCase()] || defaultToken }\n            : function(value) {return keywords[value] || defaultToken };\n    };\n\n    this.getKeywords = function() {\n        return this.$keywords;\n    };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n   this.$behaviours = {};\n};\n\n(function () {\n\n    this.add = function (name, action, callback) {\n        switch (undefined) {\n          case this.$behaviours:\n              this.$behaviours = {};\n          case this.$behaviours[name]:\n              this.$behaviours[name] = {};\n        }\n        this.$behaviours[name][action] = callback;\n    }\n    \n    this.addBehaviours = function (behaviours) {\n        for (var key in behaviours) {\n            for (var action in behaviours[key]) {\n                this.add(key, action, behaviours[key][action]);\n            }\n        }\n    }\n    \n    this.remove = function (name) {\n        if (this.$behaviours && this.$behaviours[name]) {\n            delete this.$behaviours[name];\n        }\n    }\n    \n    this.inherit = function (mode, filter) {\n        if (typeof mode === \"function\") {\n            var behaviours = new mode().getBehaviours(filter);\n        } else {\n            var behaviours = mode.getBehaviours(filter);\n        }\n        this.addBehaviours(behaviours);\n    }\n    \n    this.getBehaviours = function (filter) {\n        if (!filter) {\n            return this.$behaviours;\n        } else {\n            var ret = {}\n            for (var i = 0; i < filter.length; i++) {\n                if (this.$behaviours[filter[i]]) {\n                    ret[filter[i]] = this.$behaviours[filter[i]];\n                }\n            }\n            return ret;\n        }\n    }\n\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar TokenIterator = function(session, initialRow, initialColumn) {\n    this.$session = session;\n    this.$row = initialRow;\n    this.$rowTokens = session.getTokens(initialRow);\n\n    var token = session.getTokenAt(initialRow, initialColumn);\n    this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n    this.stepBackward = function() {\n        this.$tokenIndex -= 1;\n        \n        while (this.$tokenIndex < 0) {\n            this.$row -= 1;\n            if (this.$row < 0) {\n                this.$row = 0;\n                return null;\n            }\n                \n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = this.$rowTokens.length - 1;\n        }\n            \n        return this.$rowTokens[this.$tokenIndex];\n    };   \n    this.stepForward = function() {\n        this.$tokenIndex += 1;\n        var rowCount;\n        while (this.$tokenIndex >= this.$rowTokens.length) {\n            this.$row += 1;\n            if (!rowCount)\n                rowCount = this.$session.getLength();\n            if (this.$row >= rowCount) {\n                this.$row = rowCount - 1;\n                return null;\n            }\n\n            this.$rowTokens = this.$session.getTokens(this.$row);\n            this.$tokenIndex = 0;\n        }\n            \n        return this.$rowTokens[this.$tokenIndex];\n    };      \n    this.getCurrentToken = function () {\n        return this.$rowTokens[this.$tokenIndex];\n    };      \n    this.getCurrentTokenRow = function () {\n        return this.$row;\n    };     \n    this.getCurrentTokenColumn = function() {\n        var rowTokens = this.$rowTokens;\n        var tokenIndex = this.$tokenIndex;\n        var column = rowTokens[tokenIndex].start;\n        if (column !== undefined)\n            return column;\n            \n        column = 0;\n        while (tokenIndex > 0) {\n            tokenIndex -= 1;\n            column += rowTokens[tokenIndex].value.length;\n        }\n        \n        return column;  \n    };\n    this.getCurrentTokenPosition = function() {\n        return {row: this.$row, column: this.getCurrentTokenColumn()};\n    };\n            \n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar initContext = function(editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = {rangeCount: editor.multiSelect.rangeCount};\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n                0,\n                selection.start.column + 1,\n                rowDiff,\n                selection.end.column + (rowDiff ? 0 : 1)\n            ]\n    };\n};\n\nvar CstyleBehaviour = function() {\n    this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                } else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n                if (!openBracePos)\n                     return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            } else if (closing) {\n                var next_indent = this.$getIndent(line);\n            } else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        } else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n\n    this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            } else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n\n    this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) \n                return;\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            } else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column-1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                \n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                \n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                \n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                    if (pair && /string\\.end/.test(rightToken.type))\n                        pair = false;\n                } else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(leftChar);\n                    if (isWordBefore || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1,1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n};\n\n    \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isMaybeInsertedClosing(cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nexports.packages = {};\n\naddUnicodePackage({\n    L:  \"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n    Ll: \"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",\n    Lu: \"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",\n    Lt: \"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",\n    Lm: \"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",\n    Lo: \"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",\n    M:  \"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",\n    Mn: \"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",\n    Mc: \"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",\n    Me: \"0488048906DE20DD-20E020E2-20E4A670-A672\",\n    N:  \"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n    Nd: \"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",\n    Nl: \"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",\n    No: \"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",\n    P:  \"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",\n    Pd: \"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",\n    Ps: \"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",\n    Pe: \"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",\n    Pi: \"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",\n    Pf: \"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",\n    Pc: \"005F203F20402054FE33FE34FE4D-FE4FFF3F\",\n    Po: \"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",\n    S:  \"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",\n    Sm: \"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",\n    Sc: \"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",\n    Sk: \"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",\n    So: \"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",\n    Z:  \"002000A01680180E2000-200A20282029202F205F3000\",\n    Zs: \"002000A01680180E2000-200A202F205F3000\",\n    Zl: \"2028\",\n    Zp: \"2029\",\n    C:  \"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",\n    Cc: \"0000-001F007F-009F\",\n    Cf: \"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",\n    Co: \"E000-F8FF\",\n    Cs: \"D800-DFFF\",\n    Cn: \"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"\n});\n\nfunction addUnicodePackage (pack) {\n    var codePoint = /\\w{4}/g;\n    for (var name in pack)\n        exports.packages[name] = pack[name].replace(codePoint, \"\\\\u$&\");\n}\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\nvar Mode = function() {\n    this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n    this.$defaultBehaviour = new CstyleBehaviour();\n\n    this.tokenRe = new RegExp(\"^[\"\n        + unicode.packages.L\n        + unicode.packages.Mn + unicode.packages.Mc\n        + unicode.packages.Nd\n        + unicode.packages.Pc + \"\\\\$_]+\", \"g\"\n    );\n\n    this.nonTokenRe = new RegExp(\"^(?:[^\"\n        + unicode.packages.L\n        + unicode.packages.Mn + unicode.packages.Mc\n        + unicode.packages.Nd\n        + unicode.packages.Pc + \"\\\\$_]|\\\\s])+\", \"g\"\n    );\n\n    this.getTokenizer = function() {\n        if (!this.$tokenizer) {\n            this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n            this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n        }\n        return this.$tokenizer;\n    };\n\n    this.lineCommentStart = \"\";\n    this.blockComment = \"\";\n\n    this.toggleCommentLines = function(state, session, startRow, endRow) {\n        var doc = session.doc;\n\n        var ignoreBlankLines = true;\n        var shouldRemove = true;\n        var minIndent = Infinity;\n        var tabSize = session.getTabSize();\n        var insertAtTabStop = false;\n\n        if (!this.lineCommentStart) {\n            if (!this.blockComment)\n                return false;\n            var lineCommentStart = this.blockComment.start;\n            var lineCommentEnd = this.blockComment.end;\n            var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n            var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n            var comment = function(line, i) {\n                if (testRemove(line, i))\n                    return;\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    doc.insertInLine({row: i, column: line.length}, lineCommentEnd);\n                    doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n                }\n            };\n\n            var uncomment = function(line, i) {\n                var m;\n                if (m = line.match(regexpEnd))\n                    doc.removeInLine(i, line.length - m[0].length, line.length);\n                if (m = line.match(regexpStart))\n                    doc.removeInLine(i, m[1].length, m[0].length);\n            };\n\n            var testRemove = function(line, row) {\n                if (regexpStart.test(line))\n                    return true;\n                var tokens = session.getTokens(row);\n                for (var i = 0; i < tokens.length; i++) {\n                    if (tokens[i].type === \"comment\")\n                        return true;\n                }\n            };\n        } else {\n            if (Array.isArray(this.lineCommentStart)) {\n                var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n                var lineCommentStart = this.lineCommentStart[0];\n            } else {\n                var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n                var lineCommentStart = this.lineCommentStart;\n            }\n            regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n            \n            insertAtTabStop = session.getUseSoftTabs();\n\n            var uncomment = function(line, i) {\n                var m = line.match(regexpStart);\n                if (!m) return;\n                var start = m[1].length, end = m[0].length;\n                if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n                    end--;\n                doc.removeInLine(i, start, end);\n            };\n            var commentWithSpace = lineCommentStart + \" \";\n            var comment = function(line, i) {\n                if (!ignoreBlankLines || /\\S/.test(line)) {\n                    if (shouldInsertSpace(line, minIndent, minIndent))\n                        doc.insertInLine({row: i, column: minIndent}, commentWithSpace);\n                    else\n                        doc.insertInLine({row: i, column: minIndent}, lineCommentStart);\n                }\n            };\n            var testRemove = function(line, i) {\n                return regexpStart.test(line);\n            };\n            \n            var shouldInsertSpace = function(line, before, after) {\n                var spaces = 0;\n                while (before-- && line.charAt(before) == \" \")\n                    spaces++;\n                if (spaces % tabSize != 0)\n                    return false;\n                var spaces = 0;\n                while (line.charAt(after++) == \" \")\n                    spaces++;\n                if (tabSize > 2)\n                    return spaces % tabSize != tabSize - 1;\n                else\n                    return spaces % tabSize == 0;\n                return true;\n            };\n        }\n\n        function iter(fun) {\n            for (var i = startRow; i <= endRow; i++)\n                fun(doc.getLine(i), i);\n        }\n\n\n        var minEmptyLength = Infinity;\n        iter(function(line, i) {\n            var indent = line.search(/\\S/);\n            if (indent !== -1) {\n                if (indent < minIndent)\n                    minIndent = indent;\n                if (shouldRemove && !testRemove(line, i))\n                    shouldRemove = false;\n            } else if (minEmptyLength > line.length) {\n                minEmptyLength = line.length;\n            }\n        });\n\n        if (minIndent == Infinity) {\n            minIndent = minEmptyLength;\n            ignoreBlankLines = false;\n            shouldRemove = false;\n        }\n\n        if (insertAtTabStop && minIndent % tabSize != 0)\n            minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n        iter(shouldRemove ? uncomment : comment);\n    };\n\n    this.toggleBlockComment = function(state, session, range, cursor) {\n        var comment = this.blockComment;\n        if (!comment)\n            return;\n        if (!comment.start && comment[0])\n            comment = comment[0];\n\n        var iterator = new TokenIterator(session, cursor.row, cursor.column);\n        var token = iterator.getCurrentToken();\n\n        var sel = session.selection;\n        var initialRange = session.selection.toOrientedRange();\n        var startRow, colDiff;\n\n        if (token && /comment/.test(token.type)) {\n            var startRange, endRange;\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.start);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    startRange = new Range(row, column, row, column + comment.start.length);\n                    break;\n                }\n                token = iterator.stepBackward();\n            }\n\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            while (token && /comment/.test(token.type)) {\n                var i = token.value.indexOf(comment.end);\n                if (i != -1) {\n                    var row = iterator.getCurrentTokenRow();\n                    var column = iterator.getCurrentTokenColumn() + i;\n                    endRange = new Range(row, column, row, column + comment.end.length);\n                    break;\n                }\n                token = iterator.stepForward();\n            }\n            if (endRange)\n                session.remove(endRange);\n            if (startRange) {\n                session.remove(startRange);\n                startRow = startRange.start.row;\n                colDiff = -comment.start.length;\n            }\n        } else {\n            colDiff = comment.start.length;\n            startRow = range.start.row;\n            session.insert(range.end, comment.end);\n            session.insert(range.start, comment.start);\n        }\n        if (initialRange.start.row == startRow)\n            initialRange.start.column += colDiff;\n        if (initialRange.end.row == startRow)\n            initialRange.end.column += colDiff;\n        session.selection.fromOrientedRange(initialRange);\n    };\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n    this.createWorker = function(session) {\n        return null;\n    };\n\n    this.createModeDelegates = function (mapping) {\n        this.$embeds = [];\n        this.$modes = {};\n        for (var i in mapping) {\n            if (mapping[i]) {\n                this.$embeds.push(i);\n                this.$modes[i] = new mapping[i]();\n            }\n        }\n\n        var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n            \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n        for (var i = 0; i < delegations.length; i++) {\n            (function(scope) {\n              var functionName = delegations[i];\n              var defaultHandler = scope[functionName];\n              scope[delegations[i]] = function() {\n                  return this.$delegator(functionName, arguments, defaultHandler);\n              };\n            }(this));\n        }\n    };\n\n    this.$delegator = function(method, args, defaultHandler) {\n        var state = args[0];\n        if (typeof state != \"string\")\n            state = state[0];\n        for (var i = 0; i < this.$embeds.length; i++) {\n            if (!this.$modes[this.$embeds[i]]) continue;\n\n            var split = state.split(this.$embeds[i]);\n            if (!split[0] && split[1]) {\n                args[0] = split[1];\n                var mode = this.$modes[this.$embeds[i]];\n                return mode[method].apply(mode, args);\n            }\n        }\n        var ret = defaultHandler.apply(this, args);\n        return defaultHandler ? ret : undefined;\n    };\n\n    this.transformAction = function(state, action, editor, session, param) {\n        if (this.$behaviour) {\n            var behaviours = this.$behaviour.getBehaviours();\n            for (var key in behaviours) {\n                if (behaviours[key][action]) {\n                    var ret = behaviours[key][action].apply(this, arguments);\n                    if (ret) {\n                        return ret;\n                    }\n                }\n            }\n        }\n    };\n    \n    this.getKeywords = function(append) {\n        if (!this.completionKeywords) {\n            var rules = this.$tokenizer.rules;\n            var completionKeywords = [];\n            for (var rule in rules) {\n                var ruleItr = rules[rule];\n                for (var r = 0, l = ruleItr.length; r < l; r++) {\n                    if (typeof ruleItr[r].token === \"string\") {\n                        if (/keyword|support|storage/.test(ruleItr[r].token))\n                            completionKeywords.push(ruleItr[r].regex);\n                    }\n                    else if (typeof ruleItr[r].token === \"object\") {\n                        for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {    \n                            if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n                                var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n                                completionKeywords.push(rule.substr(1, rule.length - 2));\n                            }\n                        }\n                    }\n                }\n            }\n            this.completionKeywords = completionKeywords;\n        }\n        if (!append)\n            return this.$keywordList;\n        return completionKeywords.concat(this.$keywordList || []);\n    };\n    \n    this.$createKeywordList = function() {\n        if (!this.$highlightRules)\n            this.getTokenizer();\n        return this.$keywordList = this.$highlightRules.$keywordList || [];\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var keywords = this.$keywordList || this.$createKeywordList();\n        return keywords.map(function(word) {\n            return {\n                name: word,\n                value: word,\n                score: 0,\n                meta: \"keyword\"\n            };\n        });\n    };\n\n    this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n}\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000)\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        applyDelta(this.$lines, delta, doNotValidate);\n        this._signal(\"change\", delta);\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        var from = 0, to = 0;\n        do {\n            from = to;\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            if (to > l) {\n                delta.lines = chunk;\n                delta.start.row = row + from;\n                delta.start.column = column;\n                break;\n            }\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        } while(true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: lines[l-1].length};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n    this.running = false;\n    this.lines = [];\n    this.states = [];\n    this.currentLine = 0;\n    this.tokenizer = tokenizer;\n\n    var self = this;\n\n    this.$worker = function() {\n        if (!self.running) { return; }\n\n        var workerStart = new Date();\n        var currentLine = self.currentLine;\n        var endLine = -1;\n        var doc = self.doc;\n\n        var startLine = currentLine;\n        while (self.lines[currentLine])\n            currentLine++;\n        \n        var len = doc.getLength();\n        var processedLines = 0;\n        self.running = false;\n        while (currentLine < len) {\n            self.$tokenizeRow(currentLine);\n            endLine = currentLine;\n            do {\n                currentLine++;\n            } while (self.lines[currentLine]);\n            processedLines ++;\n            if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {                \n                self.running = setTimeout(self.$worker, 20);\n                break;\n            }\n        }\n        self.currentLine = currentLine;\n        \n        if (startLine <= endLine)\n            self.fireUpdateEvent(startLine, endLine);\n    };\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n    this.setTokenizer = function(tokenizer) {\n        this.tokenizer = tokenizer;\n        this.lines = [];\n        this.states = [];\n\n        this.start(0);\n    };\n    this.setDocument = function(doc) {\n        this.doc = doc;\n        this.lines = [];\n        this.states = [];\n\n        this.stop();\n    };\n    this.fireUpdateEvent = function(firstRow, lastRow) {\n        var data = {\n            first: firstRow,\n            last: lastRow\n        };\n        this._signal(\"update\", {data: data});\n    };\n    this.start = function(startRow) {\n        this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n        this.lines.splice(this.currentLine, this.lines.length);\n        this.states.splice(this.currentLine, this.states.length);\n\n        this.stop();\n        this.running = setTimeout(this.$worker, 700);\n    };\n    \n    this.scheduleStart = function() {\n        if (!this.running)\n            this.running = setTimeout(this.$worker, 700);\n    }\n\n    this.$updateOnChange = function(delta) {\n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n\n        if (len === 0) {\n            this.lines[startRow] = null;\n        } else if (delta.action == \"remove\") {\n            this.lines.splice(startRow, len + 1, null);\n            this.states.splice(startRow, len + 1, null);\n        } else {\n            var args = Array(len + 1);\n            args.unshift(startRow, 1);\n            this.lines.splice.apply(this.lines, args);\n            this.states.splice.apply(this.states, args);\n        }\n\n        this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n        this.stop();\n    };\n    this.stop = function() {\n        if (this.running)\n            clearTimeout(this.running);\n        this.running = false;\n    };\n    this.getTokens = function(row) {\n        return this.lines[row] || this.$tokenizeRow(row);\n    };\n    this.getState = function(row) {\n        if (this.currentLine == row)\n            this.$tokenizeRow(row);\n        return this.states[row] || \"start\";\n    };\n\n    this.$tokenizeRow = function(row) {\n        var line = this.doc.getLine(row);\n        var state = this.states[row - 1];\n\n        var data = this.tokenizer.getLineTokens(line, state, row);\n\n        if (this.states[row] + \"\" !== data.state + \"\") {\n            this.states[row] = data.state;\n            this.lines[row + 1] = null;\n            if (this.currentLine > row + 1)\n                this.currentLine = row + 1;\n        } else if (this.currentLine == row) {\n            this.currentLine = row + 1;\n        }\n\n        return this.lines[row] = data.tokens;\n    };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n    this.setRegexp(regExp);\n    this.clazz = clazz;\n    this.type = type || \"text\";\n};\n\n(function() {\n    this.MAX_RANGES = 500;\n    \n    this.setRegexp = function(regExp) {\n        if (this.regExp+\"\" == regExp+\"\")\n            return;\n        this.regExp = regExp;\n        this.cache = [];\n    };\n\n    this.update = function(html, markerLayer, session, config) {\n        if (!this.regExp)\n            return;\n        var start = config.firstRow, end = config.lastRow;\n\n        for (var i = start; i <= end; i++) {\n            var ranges = this.cache[i];\n            if (ranges == null) {\n                ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n                if (ranges.length > this.MAX_RANGES)\n                    ranges = ranges.slice(0, this.MAX_RANGES);\n                ranges = ranges.map(function(match) {\n                    return new Range(i, match.offset, i, match.offset + match.length);\n                });\n                this.cache[i] = ranges.length ? ranges : \"\";\n            }\n\n            for (var j = ranges.length; j --; ) {\n                markerLayer.drawSingleLineMarker(\n                    html, ranges[j].toScreenRange(session), this.clazz, config);\n            }\n        }\n    };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n    this.foldData = foldData;\n    if (Array.isArray(folds)) {\n        this.folds = folds;\n    } else {\n        folds = this.folds = [ folds ];\n    }\n\n    var last = folds[folds.length - 1];\n    this.range = new Range(folds[0].start.row, folds[0].start.column,\n                           last.end.row, last.end.column);\n    this.start = this.range.start;\n    this.end   = this.range.end;\n\n    this.folds.forEach(function(fold) {\n        fold.setFoldLine(this);\n    }, this);\n}\n\n(function() {\n    this.shiftRow = function(shift) {\n        this.start.row += shift;\n        this.end.row += shift;\n        this.folds.forEach(function(fold) {\n            fold.start.row += shift;\n            fold.end.row += shift;\n        });\n    };\n\n    this.addFold = function(fold) {\n        if (fold.sameRow) {\n            if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n                throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n            }\n            this.folds.push(fold);\n            this.folds.sort(function(a, b) {\n                return -a.range.compareEnd(b.start.row, b.start.column);\n            });\n            if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n                this.end.row = fold.end.row;\n                this.end.column =  fold.end.column;\n            } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n                this.start.row = fold.start.row;\n                this.start.column = fold.start.column;\n            }\n        } else if (fold.start.row == this.end.row) {\n            this.folds.push(fold);\n            this.end.row = fold.end.row;\n            this.end.column = fold.end.column;\n        } else if (fold.end.row == this.start.row) {\n            this.folds.unshift(fold);\n            this.start.row = fold.start.row;\n            this.start.column = fold.start.column;\n        } else {\n            throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n        }\n        fold.foldLine = this;\n    };\n\n    this.containsRow = function(row) {\n        return row >= this.start.row && row <= this.end.row;\n    };\n\n    this.walk = function(callback, endRow, endColumn) {\n        var lastEnd = 0,\n            folds = this.folds,\n            fold,\n            cmp, stop, isNewRow = true;\n\n        if (endRow == null) {\n            endRow = this.end.row;\n            endColumn = this.end.column;\n        }\n\n        for (var i = 0; i < folds.length; i++) {\n            fold = folds[i];\n\n            cmp = fold.range.compareStart(endRow, endColumn);\n            if (cmp == -1) {\n                callback(null, endRow, endColumn, lastEnd, isNewRow);\n                return;\n            }\n\n            stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n            stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n            if (stop || cmp === 0) {\n                return;\n            }\n            isNewRow = !fold.sameRow;\n            lastEnd = fold.end.column;\n        }\n        callback(null, endRow, endColumn, lastEnd, isNewRow);\n    };\n\n    this.getNextFoldTo = function(row, column) {\n        var fold, cmp;\n        for (var i = 0; i < this.folds.length; i++) {\n            fold = this.folds[i];\n            cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                return {\n                    fold: fold,\n                    kind: \"after\"\n                };\n            } else if (cmp === 0) {\n                return {\n                    fold: fold,\n                    kind: \"inside\"\n                };\n            }\n        }\n        return null;\n    };\n\n    this.addRemoveChars = function(row, column, len) {\n        var ret = this.getNextFoldTo(row, column),\n            fold, folds;\n        if (ret) {\n            fold = ret.fold;\n            if (ret.kind == \"inside\"\n                && fold.start.column != column\n                && fold.start.row != row)\n            {\n                window.console && window.console.log(row, column, fold);\n            } else if (fold.start.row == row) {\n                folds = this.folds;\n                var i = folds.indexOf(fold);\n                if (i === 0) {\n                    this.start.column += len;\n                }\n                for (i; i < folds.length; i++) {\n                    fold = folds[i];\n                    fold.start.column += len;\n                    if (!fold.sameRow) {\n                        return;\n                    }\n                    fold.end.column += len;\n                }\n                this.end.column += len;\n            }\n        }\n    };\n\n    this.split = function(row, column) {\n        var pos = this.getNextFoldTo(row, column);\n        \n        if (!pos || pos.kind == \"inside\")\n            return null;\n            \n        var fold = pos.fold;\n        var folds = this.folds;\n        var foldData = this.foldData;\n        \n        var i = folds.indexOf(fold);\n        var foldBefore = folds[i - 1];\n        this.end.row = foldBefore.end.row;\n        this.end.column = foldBefore.end.column;\n        folds = folds.splice(i, folds.length - i);\n\n        var newFoldLine = new FoldLine(foldData, folds);\n        foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n        return newFoldLine;\n    };\n\n    this.merge = function(foldLineNext) {\n        var folds = foldLineNext.folds;\n        for (var i = 0; i < folds.length; i++) {\n            this.addFold(folds[i]);\n        }\n        var foldData = this.foldData;\n        foldData.splice(foldData.indexOf(foldLineNext), 1);\n    };\n\n    this.toString = function() {\n        var ret = [this.range.toString() + \": [\" ];\n\n        this.folds.forEach(function(fold) {\n            ret.push(\"  \" + fold.toString());\n        });\n        ret.push(\"]\");\n        return ret.join(\"\\n\");\n    };\n\n    this.idxToPosition = function(idx) {\n        var lastFoldEndColumn = 0;\n\n        for (var i = 0; i < this.folds.length; i++) {\n            var fold = this.folds[i];\n\n            idx -= fold.start.column - lastFoldEndColumn;\n            if (idx < 0) {\n                return {\n                    row: fold.start.row,\n                    column: fold.start.column + idx\n                };\n            }\n\n            idx -= fold.placeholder.length;\n            if (idx < 0) {\n                return fold.start;\n            }\n\n            lastFoldEndColumn = fold.end.column;\n        }\n\n        return {\n            row: this.end.row,\n            column: this.end.column + idx\n        };\n    };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n    this.ranges = [];\n};\n\n(function() {\n    this.comparePoints = comparePoints;\n\n    this.pointIndex = function(pos, excludeEdges, startIndex) {\n        var list = this.ranges;\n\n        for (var i = startIndex || 0; i < list.length; i++) {\n            var range = list[i];\n            var cmpEnd = comparePoints(pos, range.end);\n            if (cmpEnd > 0)\n                continue;\n            var cmpStart = comparePoints(pos, range.start);\n            if (cmpEnd === 0)\n                return excludeEdges && cmpStart !== 0 ? -i-2 : i;\n            if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n                return i;\n\n            return -i-1;\n        }\n        return -i - 1;\n    };\n\n    this.add = function(range) {\n        var excludeEdges = !range.isEmpty();\n        var startIndex = this.pointIndex(range.start, excludeEdges);\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n\n        var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n        else\n            endIndex++;\n        return this.ranges.splice(startIndex, endIndex - startIndex, range);\n    };\n\n    this.addList = function(list) {\n        var removed = [];\n        for (var i = list.length; i--; ) {\n            removed.push.apply(removed, this.add(list[i]));\n        }\n        return removed;\n    };\n\n    this.substractPoint = function(pos) {\n        var i = this.pointIndex(pos);\n\n        if (i >= 0)\n            return this.ranges.splice(i, 1);\n    };\n    this.merge = function() {\n        var removed = [];\n        var list = this.ranges;\n        \n        list = list.sort(function(a, b) {\n            return comparePoints(a.start, b.start);\n        });\n        \n        var next = list[0], range;\n        for (var i = 1; i < list.length; i++) {\n            range = next;\n            next = list[i];\n            var cmp = comparePoints(range.end, next.start);\n            if (cmp < 0)\n                continue;\n\n            if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n                continue;\n\n            if (comparePoints(range.end, next.end) < 0) {\n                range.end.row = next.end.row;\n                range.end.column = next.end.column;\n            }\n\n            list.splice(i, 1);\n            removed.push(next);\n            next = range;\n            i--;\n        }\n        \n        this.ranges = list;\n\n        return removed;\n    };\n\n    this.contains = function(row, column) {\n        return this.pointIndex({row: row, column: column}) >= 0;\n    };\n\n    this.containsPoint = function(pos) {\n        return this.pointIndex(pos) >= 0;\n    };\n\n    this.rangeAtPoint = function(pos) {\n        var i = this.pointIndex(pos);\n        if (i >= 0)\n            return this.ranges[i];\n    };\n\n\n    this.clipRows = function(startRow, endRow) {\n        var list = this.ranges;\n        if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n            return [];\n\n        var startIndex = this.pointIndex({row: startRow, column: 0});\n        if (startIndex < 0)\n            startIndex = -startIndex - 1;\n        var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex);\n        if (endIndex < 0)\n            endIndex = -endIndex - 1;\n\n        var clipped = [];\n        for (var i = startIndex; i < endIndex; i++) {\n            clipped.push(list[i]);\n        }\n        return clipped;\n    };\n\n    this.removeAll = function() {\n        return this.ranges.splice(0, this.ranges.length);\n    };\n\n    this.attach = function(session) {\n        if (this.session)\n            this.detach();\n\n        this.session = session;\n        this.onChange = this.$onChange.bind(this);\n\n        this.session.on('change', this.onChange);\n    };\n\n    this.detach = function() {\n        if (!this.session)\n            return;\n        this.session.removeListener('change', this.onChange);\n        this.session = null;\n    };\n\n    this.$onChange = function(delta) {\n        if (delta.action == \"insert\"){\n            var start = delta.start;\n            var end = delta.end;\n        } else {\n            var end = delta.start;\n            var start = delta.end;\n        }\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n\n        var colDiff = -start.column + end.column;\n        var ranges = this.ranges;\n\n        for (var i = 0, n = ranges.length; i < n; i++) {\n            var r = ranges[i];\n            if (r.end.row < startRow)\n                continue;\n            if (r.start.row > startRow)\n                break;\n\n            if (r.start.row == startRow && r.start.column >= start.column ) {\n                if (r.start.column == start.column && this.$insertRight) {\n                } else {\n                    r.start.column += colDiff;\n                    r.start.row += lineDif;\n                }\n            }\n            if (r.end.row == startRow && r.end.column >= start.column) {\n                if (r.end.column == start.column && this.$insertRight) {\n                    continue;\n                }\n                if (r.end.column == start.column && colDiff > 0 && i < n - 1) {                \n                    if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column)\n                        r.end.column -= colDiff;\n                }\n                r.end.column += colDiff;\n                r.end.row += lineDif;\n            }\n        }\n\n        if (lineDif != 0 && i < n) {\n            for (; i < n; i++) {\n                var r = ranges[i];\n                r.start.row += lineDif;\n                r.end.row += lineDif;\n            }\n        }\n    };\n\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\")\nvar Fold = exports.Fold = function(range, placeholder) {\n    this.foldLine = null;\n    this.placeholder = placeholder;\n    this.range = range;\n    this.start = range.start;\n    this.end = range.end;\n\n    this.sameRow = range.start.row == range.end.row;\n    this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n    this.toString = function() {\n        return '\"' + this.placeholder + '\" ' + this.range.toString();\n    };\n\n    this.setFoldLine = function(foldLine) {\n        this.foldLine = foldLine;\n        this.subFolds.forEach(function(fold) {\n            fold.setFoldLine(foldLine);\n        });\n    };\n\n    this.clone = function() {\n        var range = this.range.clone();\n        var fold = new Fold(range, this.placeholder);\n        this.subFolds.forEach(function(subFold) {\n            fold.subFolds.push(subFold.clone());\n        });\n        fold.collapseChildren = this.collapseChildren;\n        return fold;\n    };\n\n    this.addSubFold = function(fold) {\n        if (this.range.isEqual(fold))\n            return;\n\n        if (!this.range.containsRange(fold))\n            throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n        consumeRange(fold, this.start);\n\n        var row = fold.start.row, column = fold.start.column;\n        for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n            cmp = this.subFolds[i].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterStart = this.subFolds[i];\n\n        if (cmp == 0)\n            return afterStart.addSubFold(fold);\n        var row = fold.range.end.row, column = fold.range.end.column;\n        for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n            cmp = this.subFolds[j].range.compare(row, column);\n            if (cmp != 1)\n                break;\n        }\n        var afterEnd = this.subFolds[j];\n\n        if (cmp == 0)\n            throw new Error(\"A fold can't intersect already existing fold\" + fold.range + this.range);\n\n        var consumedFolds = this.subFolds.splice(i, j - i, fold);\n        fold.setFoldLine(this.foldLine);\n\n        return fold;\n    };\n    \n    this.restoreRange = function(range) {\n        return restoreRange(range, this.start);\n    };\n\n}).call(Fold.prototype);\n\nfunction consumePoint(point, anchor) {\n    point.row -= anchor.row;\n    if (point.row == 0)\n        point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n    consumePoint(range.start, anchor);\n    consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n    if (point.row == 0)\n        point.column += anchor.column;\n    point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n    restorePoint(range.start, anchor);\n    restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n    this.getFoldAt = function(row, column, side) {\n        var foldLine = this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n\n        var folds = foldLine.folds;\n        for (var i = 0; i < folds.length; i++) {\n            var fold = folds[i];\n            if (fold.range.contains(row, column)) {\n                if (side == 1 && fold.range.isEnd(row, column)) {\n                    continue;\n                } else if (side == -1 && fold.range.isStart(row, column)) {\n                    continue;\n                }\n                return fold;\n            }\n        }\n    };\n    this.getFoldsInRange = function(range) {\n        var start = range.start;\n        var end = range.end;\n        var foldLines = this.$foldData;\n        var foundFolds = [];\n\n        start.column += 1;\n        end.column -= 1;\n\n        for (var i = 0; i < foldLines.length; i++) {\n            var cmp = foldLines[i].range.compareRange(range);\n            if (cmp == 2) {\n                continue;\n            }\n            else if (cmp == -2) {\n                break;\n            }\n\n            var folds = foldLines[i].folds;\n            for (var j = 0; j < folds.length; j++) {\n                var fold = folds[j];\n                cmp = fold.range.compareRange(range);\n                if (cmp == -2) {\n                    break;\n                } else if (cmp == 2) {\n                    continue;\n                } else\n                if (cmp == 42) {\n                    break;\n                }\n                foundFolds.push(fold);\n            }\n        }\n        start.column -= 1;\n        end.column += 1;\n\n        return foundFolds;\n    };\n\n    this.getFoldsInRangeList = function(ranges) {\n        if (Array.isArray(ranges)) {\n            var folds = [];\n            ranges.forEach(function(range) {\n                folds = folds.concat(this.getFoldsInRange(range));\n            }, this);\n        } else {\n            var folds = this.getFoldsInRange(ranges);\n        }\n        return folds;\n    };\n    this.getAllFolds = function() {\n        var folds = [];\n        var foldLines = this.$foldData;\n        \n        for (var i = 0; i < foldLines.length; i++)\n            for (var j = 0; j < foldLines[i].folds.length; j++)\n                folds.push(foldLines[i].folds[j]);\n\n        return folds;\n    };\n    this.getFoldStringAt = function(row, column, trim, foldLine) {\n        foldLine = foldLine || this.getFoldLine(row);\n        if (!foldLine)\n            return null;\n\n        var lastFold = {\n            end: { column: 0 }\n        };\n        var str, fold;\n        for (var i = 0; i < foldLine.folds.length; i++) {\n            fold = foldLine.folds[i];\n            var cmp = fold.range.compareEnd(row, column);\n            if (cmp == -1) {\n                str = this\n                    .getLine(fold.start.row)\n                    .substring(lastFold.end.column, fold.start.column);\n                break;\n            }\n            else if (cmp === 0) {\n                return null;\n            }\n            lastFold = fold;\n        }\n        if (!str)\n            str = this.getLine(fold.start.row).substring(lastFold.end.column);\n\n        if (trim == -1)\n            return str.substring(0, column - lastFold.end.column);\n        else if (trim == 1)\n            return str.substring(column - lastFold.end.column);\n        else\n            return str;\n    };\n\n    this.getFoldLine = function(docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n                return foldLine;\n            } else if (foldLine.end.row > docRow) {\n                return null;\n            }\n        }\n        return null;\n    };\n    this.getNextFoldLine = function(docRow, startFoldLine) {\n        var foldData = this.$foldData;\n        var i = 0;\n        if (startFoldLine)\n            i = foldData.indexOf(startFoldLine);\n        if (i == -1)\n            i = 0;\n        for (i; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (foldLine.end.row >= docRow) {\n                return foldLine;\n            }\n        }\n        return null;\n    };\n\n    this.getFoldedRowCount = function(first, last) {\n        var foldData = this.$foldData, rowCount = last-first+1;\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i],\n                end = foldLine.end.row,\n                start = foldLine.start.row;\n            if (end >= last) {\n                if (start < last) {\n                    if (start >= first)\n                        rowCount -= last-start;\n                    else\n                        rowCount = 0; // in one fold\n                }\n                break;\n            } else if (end >= first){\n                if (start >= first) // fold inside range\n                    rowCount -=  end-start;\n                else\n                    rowCount -=  end-first+1;\n            }\n        }\n        return rowCount;\n    };\n\n    this.$addFoldLine = function(foldLine) {\n        this.$foldData.push(foldLine);\n        this.$foldData.sort(function(a, b) {\n            return a.start.row - b.start.row;\n        });\n        return foldLine;\n    };\n    this.addFold = function(placeholder, range) {\n        var foldData = this.$foldData;\n        var added = false;\n        var fold;\n        \n        if (placeholder instanceof Fold)\n            fold = placeholder;\n        else {\n            fold = new Fold(range, placeholder);\n            fold.collapseChildren = range.collapseChildren;\n        }\n        this.$clipRangeToDocument(fold.range);\n\n        var startRow = fold.start.row;\n        var startColumn = fold.start.column;\n        var endRow = fold.end.row;\n        var endColumn = fold.end.column;\n        if (!(startRow < endRow || \n            startRow == endRow && startColumn <= endColumn - 2))\n            throw new Error(\"The range has to be at least 2 characters width\");\n\n        var startFold = this.getFoldAt(startRow, startColumn, 1);\n        var endFold = this.getFoldAt(endRow, endColumn, -1);\n        if (startFold && endFold == startFold)\n            return startFold.addSubFold(fold);\n\n        if (startFold && !startFold.range.isStart(startRow, startColumn))\n            this.removeFold(startFold);\n        \n        if (endFold && !endFold.range.isEnd(endRow, endColumn))\n            this.removeFold(endFold);\n        var folds = this.getFoldsInRange(fold.range);\n        if (folds.length > 0) {\n            this.removeFolds(folds);\n            folds.forEach(function(subFold) {\n                fold.addSubFold(subFold);\n            });\n        }\n\n        for (var i = 0; i < foldData.length; i++) {\n            var foldLine = foldData[i];\n            if (endRow == foldLine.start.row) {\n                foldLine.addFold(fold);\n                added = true;\n                break;\n            } else if (startRow == foldLine.end.row) {\n                foldLine.addFold(fold);\n                added = true;\n                if (!fold.sameRow) {\n                    var foldLineNext = foldData[i + 1];\n                    if (foldLineNext && foldLineNext.start.row == endRow) {\n                        foldLine.merge(foldLineNext);\n                        break;\n                    }\n                }\n                break;\n            } else if (endRow <= foldLine.start.row) {\n                break;\n            }\n        }\n\n        if (!added)\n            foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\n        if (this.$useWrapMode)\n            this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n        else\n            this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"add\" });\n\n        return fold;\n    };\n\n    this.addFolds = function(folds) {\n        folds.forEach(function(fold) {\n            this.addFold(fold);\n        }, this);\n    };\n\n    this.removeFold = function(fold) {\n        var foldLine = fold.foldLine;\n        var startRow = foldLine.start.row;\n        var endRow = foldLine.end.row;\n\n        var foldLines = this.$foldData;\n        var folds = foldLine.folds;\n        if (folds.length == 1) {\n            foldLines.splice(foldLines.indexOf(foldLine), 1);\n        } else\n        if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n            folds.pop();\n            foldLine.end.row = folds[folds.length - 1].end.row;\n            foldLine.end.column = folds[folds.length - 1].end.column;\n        } else\n        if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n            folds.shift();\n            foldLine.start.row = folds[0].start.row;\n            foldLine.start.column = folds[0].start.column;\n        } else\n        if (fold.sameRow) {\n            folds.splice(folds.indexOf(fold), 1);\n        } else\n        {\n            var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n            folds = newFoldLine.folds;\n            folds.shift();\n            newFoldLine.start.row = folds[0].start.row;\n            newFoldLine.start.column = folds[0].start.column;\n        }\n\n        if (!this.$updating) {\n            if (this.$useWrapMode)\n                this.$updateWrapData(startRow, endRow);\n            else\n                this.$updateRowLengthCache(startRow, endRow);\n        }\n        this.$modified = true;\n        this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n    };\n\n    this.removeFolds = function(folds) {\n        var cloneFolds = [];\n        for (var i = 0; i < folds.length; i++) {\n            cloneFolds.push(folds[i]);\n        }\n\n        cloneFolds.forEach(function(fold) {\n            this.removeFold(fold);\n        }, this);\n        this.$modified = true;\n    };\n\n    this.expandFold = function(fold) {\n        this.removeFold(fold);\n        fold.subFolds.forEach(function(subFold) {\n            fold.restoreRange(subFold);\n            this.addFold(subFold);\n        }, this);\n        if (fold.collapseChildren > 0) {\n            this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1);\n        }\n        fold.subFolds = [];\n    };\n\n    this.expandFolds = function(folds) {\n        folds.forEach(function(fold) {\n            this.expandFold(fold);\n        }, this);\n    };\n\n    this.unfold = function(location, expandInner) {\n        var range, folds;\n        if (location == null) {\n            range = new Range(0, 0, this.getLength(), 0);\n            expandInner = true;\n        } else if (typeof location == \"number\")\n            range = new Range(location, 0, location, this.getLine(location).length);\n        else if (\"row\" in location)\n            range = Range.fromPoints(location, location);\n        else\n            range = location;\n        \n        folds = this.getFoldsInRangeList(range);\n        if (expandInner) {\n            this.removeFolds(folds);\n        } else {\n            var subFolds = folds;\n            while (subFolds.length) {\n                this.expandFolds(subFolds);\n                subFolds = this.getFoldsInRangeList(range);\n            }\n        }\n        if (folds.length)\n            return folds;\n    };\n    this.isRowFolded = function(docRow, startFoldRow) {\n        return !!this.getFoldLine(docRow, startFoldRow);\n    };\n\n    this.getRowFoldEnd = function(docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.end.row : docRow;\n    };\n\n    this.getRowFoldStart = function(docRow, startFoldRow) {\n        var foldLine = this.getFoldLine(docRow, startFoldRow);\n        return foldLine ? foldLine.start.row : docRow;\n    };\n\n    this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) {\n        if (startRow == null)\n            startRow = foldLine.start.row;\n        if (startColumn == null)\n            startColumn = 0;\n        if (endRow == null)\n            endRow = foldLine.end.row;\n        if (endColumn == null)\n            endColumn = this.getLine(endRow).length;\n        var doc = this.doc;\n        var textLine = \"\";\n\n        foldLine.walk(function(placeholder, row, column, lastColumn) {\n            if (row < startRow)\n                return;\n            if (row == startRow) {\n                if (column < startColumn)\n                    return;\n                lastColumn = Math.max(startColumn, lastColumn);\n            }\n\n            if (placeholder != null) {\n                textLine += placeholder;\n            } else {\n                textLine += doc.getLine(row).substring(lastColumn, column);\n            }\n        }, endRow, endColumn);\n        return textLine;\n    };\n\n    this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n        var foldLine = this.getFoldLine(row);\n\n        if (!foldLine) {\n            var line;\n            line = this.doc.getLine(row);\n            return line.substring(startColumn || 0, endColumn || line.length);\n        } else {\n            return this.getFoldDisplayLine(\n                foldLine, row, endColumn, startRow, startColumn);\n        }\n    };\n\n    this.$cloneFoldData = function() {\n        var fd = [];\n        fd = this.$foldData.map(function(foldLine) {\n            var folds = foldLine.folds.map(function(fold) {\n                return fold.clone();\n            });\n            return new FoldLine(fd, folds);\n        });\n\n        return fd;\n    };\n\n    this.toggleFold = function(tryToUnfold) {\n        var selection = this.selection;\n        var range = selection.getRange();\n        var fold;\n        var bracketPos;\n\n        if (range.isEmpty()) {\n            var cursor = range.start;\n            fold = this.getFoldAt(cursor.row, cursor.column);\n\n            if (fold) {\n                this.expandFold(fold);\n                return;\n            } else if (bracketPos = this.findMatchingBracket(cursor)) {\n                if (range.comparePoint(bracketPos) == 1) {\n                    range.end = bracketPos;\n                } else {\n                    range.start = bracketPos;\n                    range.start.column++;\n                    range.end.column--;\n                }\n            } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) {\n                if (range.comparePoint(bracketPos) == 1)\n                    range.end = bracketPos;\n                else\n                    range.start = bracketPos;\n\n                range.start.column++;\n            } else {\n                range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n            }\n        } else {\n            var folds = this.getFoldsInRange(range);\n            if (tryToUnfold && folds.length) {\n                this.expandFolds(folds);\n                return;\n            } else if (folds.length == 1 ) {\n                fold = folds[0];\n            }\n        }\n\n        if (!fold)\n            fold = this.getFoldAt(range.start.row, range.start.column);\n\n        if (fold && fold.range.toString() == range.toString()) {\n            this.expandFold(fold);\n            return;\n        }\n\n        var placeholder = \"...\";\n        if (!range.isMultiLine()) {\n            placeholder = this.getTextRange(range);\n            if (placeholder.length < 4)\n                return;\n            placeholder = placeholder.trim().substring(0, 2) + \"..\";\n        }\n\n        this.addFold(placeholder, range);\n    };\n\n    this.getCommentFoldRange = function(row, column, dir) {\n        var iterator = new TokenIterator(this, row, column);\n        var token = iterator.getCurrentToken();\n        if (token && /^comment|string/.test(token.type)) {\n            var range = new Range();\n            var re = new RegExp(token.type.replace(/\\..*/, \"\\\\.\"));\n            if (dir != 1) {\n                do {\n                    token = iterator.stepBackward();\n                } while (token && re.test(token.type));\n                iterator.stepForward();\n            }\n            \n            range.start.row = iterator.getCurrentTokenRow();\n            range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n            iterator = new TokenIterator(this, row, column);\n            \n            if (dir != -1) {\n                do {\n                    token = iterator.stepForward();\n                } while (token && re.test(token.type));\n                token = iterator.stepBackward();\n            } else\n                token = iterator.getCurrentToken();\n\n            range.end.row = iterator.getCurrentTokenRow();\n            range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n            return range;\n        }\n    };\n\n    this.foldAll = function(startRow, endRow, depth) {\n        if (depth == undefined)\n            depth = 100000; // JSON.stringify doesn't hanle Infinity\n        var foldWidgets = this.foldWidgets;\n        if (!foldWidgets)\n            return; // mode doesn't support folding\n        endRow = endRow || this.getLength();\n        startRow = startRow || 0;\n        for (var row = startRow; row < endRow; row++) {\n            if (foldWidgets[row] == null)\n                foldWidgets[row] = this.getFoldWidget(row);\n            if (foldWidgets[row] != \"start\")\n                continue;\n\n            var range = this.getFoldWidgetRange(row);\n            if (range && range.isMultiLine()\n                && range.end.row <= endRow\n                && range.start.row >= startRow\n            ) {\n                row = range.end.row;\n                try {\n                    var fold = this.addFold(\"...\", range);\n                    if (fold)\n                        fold.collapseChildren = depth;\n                } catch(e) {}\n            }\n        }\n    };\n    this.$foldStyles = {\n        \"manual\": 1,\n        \"markbegin\": 1,\n        \"markbeginend\": 1\n    };\n    this.$foldStyle = \"markbegin\";\n    this.setFoldStyle = function(style) {\n        if (!this.$foldStyles[style])\n            throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n        \n        if (this.$foldStyle == style)\n            return;\n\n        this.$foldStyle = style;\n        \n        if (style == \"manual\")\n            this.unfold();\n        var mode = this.$foldMode;\n        this.$setFolding(null);\n        this.$setFolding(mode);\n    };\n\n    this.$setFolding = function(foldMode) {\n        if (this.$foldMode == foldMode)\n            return;\n            \n        this.$foldMode = foldMode;\n        \n        this.off('change', this.$updateFoldWidgets);\n        this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n        this._signal(\"changeAnnotation\");\n        \n        if (!foldMode || this.$foldStyle == \"manual\") {\n            this.foldWidgets = null;\n            return;\n        }\n        \n        this.foldWidgets = [];\n        this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n        this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n        \n        this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n        this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n        this.on('change', this.$updateFoldWidgets);\n        this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n    };\n\n    this.getParentFoldRangeData = function (row, ignoreCurrent) {\n        var fw = this.foldWidgets;\n        if (!fw || (ignoreCurrent && fw[row]))\n            return {};\n\n        var i = row - 1, firstRange;\n        while (i >= 0) {\n            var c = fw[i];\n            if (c == null)\n                c = fw[i] = this.getFoldWidget(i);\n\n            if (c == \"start\") {\n                var range = this.getFoldWidgetRange(i);\n                if (!firstRange)\n                    firstRange = range;\n                if (range && range.end.row >= row)\n                    break;\n            }\n            i--;\n        }\n\n        return {\n            range: i !== -1 && range,\n            firstRange: firstRange\n        };\n    };\n\n    this.onFoldWidgetClick = function(row, e) {\n        e = e.domEvent;\n        var options = {\n            children: e.shiftKey,\n            all: e.ctrlKey || e.metaKey,\n            siblings: e.altKey\n        };\n        \n        var range = this.$toggleFoldWidget(row, options);\n        if (!range) {\n            var el = (e.target || e.srcElement);\n            if (el && /ace_fold-widget/.test(el.className))\n                el.className += \" ace_invalid\";\n        }\n    };\n    \n    this.$toggleFoldWidget = function(row, options) {\n        if (!this.getFoldWidget)\n            return;\n        var type = this.getFoldWidget(row);\n        var line = this.getLine(row);\n\n        var dir = type === \"end\" ? -1 : 1;\n        var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n        if (fold) {\n            if (options.children || options.all)\n                this.removeFold(fold);\n            else\n                this.expandFold(fold);\n            return fold;\n        }\n\n        var range = this.getFoldWidgetRange(row, true);\n        if (range && !range.isMultiLine()) {\n            fold = this.getFoldAt(range.start.row, range.start.column, 1);\n            if (fold && range.isEqual(fold.range)) {\n                this.removeFold(fold);\n                return fold;\n            }\n        }\n        \n        if (options.siblings) {\n            var data = this.getParentFoldRangeData(row);\n            if (data.range) {\n                var startRow = data.range.start.row + 1;\n                var endRow = data.range.end.row;\n            }\n            this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n        } else if (options.children) {\n            endRow = range ? range.end.row : this.getLength();\n            this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n        } else if (range) {\n            if (options.all) \n                range.collapseChildren = 10000;\n            this.addFold(\"...\", range);\n        }\n        \n        return range;\n    };\n    \n    \n    \n    this.toggleFoldWidget = function(toggleParent) {\n        var row = this.selection.getCursor().row;\n        row = this.getRowFoldStart(row);\n        var range = this.$toggleFoldWidget(row, {});\n        \n        if (range)\n            return;\n        var data = this.getParentFoldRangeData(row, true);\n        range = data.range || data.firstRange;\n        \n        if (range) {\n            row = range.start.row;\n            var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n            if (fold) {\n                this.removeFold(fold);\n            } else {\n                this.addFold(\"...\", range);\n            }\n        }\n    };\n\n    this.updateFoldWidgets = function(delta) {\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n\n        if (len === 0) {\n            this.foldWidgets[firstRow] = null;\n        } else if (delta.action == 'remove') {\n            this.foldWidgets.splice(firstRow, len + 1, null);\n        } else {\n            var args = Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.foldWidgets.splice.apply(this.foldWidgets, args);\n        }\n    };\n    this.tokenizerUpdateFoldWidgets = function(e) {\n        var rows = e.data;\n        if (rows.first != rows.last) {\n            if (this.foldWidgets.length > rows.first)\n                this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n        }\n    };\n}\n\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n    this.findMatchingBracket = function(position, chr) {\n        if (position.column == 0) return null;\n\n        var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n        if (charBeforeCursor == \"\") return null;\n\n        var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match)\n            return null;\n\n        if (match[1])\n            return this.$findClosingBracket(match[1], position);\n        else\n            return this.$findOpeningBracket(match[2], position);\n    };\n    \n    this.getBracketRange = function(pos) {\n        var line = this.getLine(pos.row);\n        var before = true, range;\n\n        var chr = line.charAt(pos.column-1);\n        var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n        if (!match) {\n            chr = line.charAt(pos.column);\n            pos = {row: pos.row, column: pos.column + 1};\n            match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n            before = false;\n        }\n        if (!match)\n            return null;\n\n        if (match[1]) {\n            var bracketPos = this.$findClosingBracket(match[1], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(pos, bracketPos);\n            if (!before) {\n                range.end.column++;\n                range.start.column--;\n            }\n            range.cursor = range.end;\n        } else {\n            var bracketPos = this.$findOpeningBracket(match[2], pos);\n            if (!bracketPos)\n                return null;\n            range = Range.fromPoints(bracketPos, pos);\n            if (!before) {\n                range.start.column++;\n                range.end.column--;\n            }\n            range.cursor = range.start;\n        }\n        \n        return range;\n    };\n\n    this.$brackets = {\n        \")\": \"(\",\n        \"(\": \")\",\n        \"]\": \"[\",\n        \"[\": \"]\",\n        \"{\": \"}\",\n        \"}\": \"{\"\n    };\n\n    this.$findOpeningBracket = function(bracket, position, typeRe) {\n        var openBracket = this.$brackets[bracket];\n        var depth = 1;\n\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n        \n         if (!typeRe){\n            typeRe = new RegExp(\n                \"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n                    .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n                + \")+\"\n            );\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n        var value = token.value;\n        \n        while (true) {\n        \n            while (valueIndex >= 0) {\n                var chr = value.charAt(valueIndex);\n                if (chr == openBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return {row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn()};\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex -= 1;\n            }\n            do {\n                token = iterator.stepBackward();\n            } while (token && !typeRe.test(token.type));\n\n            if (token == null)\n                break;\n                \n            value = token.value;\n            valueIndex = value.length - 1;\n        }\n        \n        return null;\n    };\n\n    this.$findClosingBracket = function(bracket, position, typeRe) {\n        var closingBracket = this.$brackets[bracket];\n        var depth = 1;\n\n        var iterator = new TokenIterator(this, position.row, position.column);\n        var token = iterator.getCurrentToken();\n        if (!token)\n            token = iterator.stepForward();\n        if (!token)\n            return;\n\n        if (!typeRe){\n            typeRe = new RegExp(\n                \"(\\\\.?\" +\n                token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n                    .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n                + \")+\"\n            );\n        }\n        var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n        while (true) {\n\n            var value = token.value;\n            var valueLength = value.length;\n            while (valueIndex < valueLength) {\n                var chr = value.charAt(valueIndex);\n                if (chr == closingBracket) {\n                    depth -= 1;\n                    if (depth == 0) {\n                        return {row: iterator.getCurrentTokenRow(),\n                            column: valueIndex + iterator.getCurrentTokenColumn()};\n                    }\n                }\n                else if (chr == bracket) {\n                    depth += 1;\n                }\n                valueIndex += 1;\n            }\n            do {\n                token = iterator.stepForward();\n            } while (token && !typeRe.test(token.type));\n\n            if (token == null)\n                break;\n\n            valueIndex = 0;\n        }\n        \n        return null;\n    };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\nvar EditSession = function(text, mode) {\n    this.$breakpoints = [];\n    this.$decorations = [];\n    this.$frontMarkers = {};\n    this.$backMarkers = {};\n    this.$markerId = 1;\n    this.$undoSelect = true;\n\n    this.$foldData = [];\n    this.id = \"session\" + (++EditSession.$uid);\n    this.$foldData.toString = function() {\n        return this.join(\"\\n\");\n    };\n    this.on(\"changeFold\", this.onChangeFold.bind(this));\n    this.$onChange = this.onChange.bind(this);\n\n    if (typeof text != \"object\" || !text.getLine)\n        text = new Document(text);\n\n    this.setDocument(text);\n    this.selection = new Selection(this);\n\n    config.resetOptions(this);\n    this.setMode(mode);\n    config._signal(\"session\", this);\n};\n\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setDocument = function(doc) {\n        if (this.doc)\n            this.doc.removeListener(\"change\", this.$onChange);\n\n        this.doc = doc;\n        doc.on(\"change\", this.$onChange);\n\n        if (this.bgTokenizer)\n            this.bgTokenizer.setDocument(this.getDocument());\n\n        this.resetCaches();\n    };\n    this.getDocument = function() {\n        return this.doc;\n    };\n    this.$resetRowCache = function(docRow) {\n        if (!docRow) {\n            this.$docRowCache = [];\n            this.$screenRowCache = [];\n            return;\n        }\n        var l = this.$docRowCache.length;\n        var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n        if (l > i) {\n            this.$docRowCache.splice(i, l);\n            this.$screenRowCache.splice(i, l);\n        }\n    };\n\n    this.$getRowCacheIndex = function(cacheArray, val) {\n        var low = 0;\n        var hi = cacheArray.length - 1;\n\n        while (low <= hi) {\n            var mid = (low + hi) >> 1;\n            var c = cacheArray[mid];\n\n            if (val > c)\n                low = mid + 1;\n            else if (val < c)\n                hi = mid - 1;\n            else\n                return mid;\n        }\n\n        return low -1;\n    };\n\n    this.resetCaches = function() {\n        this.$modified = true;\n        this.$wrapData = [];\n        this.$rowLengthCache = [];\n        this.$resetRowCache(0);\n        if (this.bgTokenizer)\n            this.bgTokenizer.start(0);\n    };\n\n    this.onChangeFold = function(e) {\n        var fold = e.data;\n        this.$resetRowCache(fold.start.row);\n    };\n\n    this.onChange = function(delta) {\n        this.$modified = true;\n\n        this.$resetRowCache(delta.start.row);\n\n        var removedFolds = this.$updateInternalDataOnChange(delta);\n        if (!this.$fromUndo && this.$undoManager && !delta.ignore) {\n            this.$deltasDoc.push(delta);\n            if (removedFolds && removedFolds.length != 0) {\n                this.$deltasFold.push({\n                    action: \"removeFolds\",\n                    folds:  removedFolds\n                });\n            }\n\n            this.$informUndoManager.schedule();\n        }\n\n        this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n        this._signal(\"change\", delta);\n    };\n    this.setValue = function(text) {\n        this.doc.setValue(text);\n        this.selection.moveTo(0, 0);\n\n        this.$resetRowCache(0);\n        this.$deltas = [];\n        this.$deltasDoc = [];\n        this.$deltasFold = [];\n        this.setUndoManager(this.$undoManager);\n        this.getUndoManager().reset();\n    };\n    this.getValue =\n    this.toString = function() {\n        return this.doc.getValue();\n    };\n    this.getSelection = function() {\n        return this.selection;\n    };\n    this.getState = function(row) {\n        return this.bgTokenizer.getState(row);\n    };\n    this.getTokens = function(row) {\n        return this.bgTokenizer.getTokens(row);\n    };\n    this.getTokenAt = function(row, column) {\n        var tokens = this.bgTokenizer.getTokens(row);\n        var token, c = 0;\n        if (column == null) {\n            i = tokens.length - 1;\n            c = this.getLine(row).length;\n        } else {\n            for (var i = 0; i < tokens.length; i++) {\n                c += tokens[i].value.length;\n                if (c >= column)\n                    break;\n            }\n        }\n        token = tokens[i];\n        if (!token)\n            return null;\n        token.index = i;\n        token.start = c - token.value.length;\n        return token;\n    };\n    this.setUndoManager = function(undoManager) {\n        this.$undoManager = undoManager;\n        this.$deltas = [];\n        this.$deltasDoc = [];\n        this.$deltasFold = [];\n\n        if (this.$informUndoManager)\n            this.$informUndoManager.cancel();\n\n        if (undoManager) {\n            var self = this;\n\n            this.$syncInformUndoManager = function() {\n                self.$informUndoManager.cancel();\n\n                if (self.$deltasFold.length) {\n                    self.$deltas.push({\n                        group: \"fold\",\n                        deltas: self.$deltasFold\n                    });\n                    self.$deltasFold = [];\n                }\n\n                if (self.$deltasDoc.length) {\n                    self.$deltas.push({\n                        group: \"doc\",\n                        deltas: self.$deltasDoc\n                    });\n                    self.$deltasDoc = [];\n                }\n\n                if (self.$deltas.length > 0) {\n                    undoManager.execute({\n                        action: \"aceupdate\",\n                        args: [self.$deltas, self],\n                        merge: self.mergeUndoDeltas\n                    });\n                }\n                self.mergeUndoDeltas = false;\n                self.$deltas = [];\n            };\n            this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n        }\n    };\n    this.markUndoGroup = function() {\n        if (this.$syncInformUndoManager)\n            this.$syncInformUndoManager();\n    };\n    \n    this.$defaultUndoManager = {\n        undo: function() {},\n        redo: function() {},\n        reset: function() {}\n    };\n    this.getUndoManager = function() {\n        return this.$undoManager || this.$defaultUndoManager;\n    };\n    this.getTabString = function() {\n        if (this.getUseSoftTabs()) {\n            return lang.stringRepeat(\" \", this.getTabSize());\n        } else {\n            return \"\\t\";\n        }\n    };\n    this.setUseSoftTabs = function(val) {\n        this.setOption(\"useSoftTabs\", val);\n    };\n    this.getUseSoftTabs = function() {\n        return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n    };\n    this.setTabSize = function(tabSize) {\n        this.setOption(\"tabSize\", tabSize);\n    };\n    this.getTabSize = function() {\n        return this.$tabSize;\n    };\n    this.isTabStop = function(position) {\n        return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n    };\n\n    this.$overwrite = false;\n    this.setOverwrite = function(overwrite) {\n        this.setOption(\"overwrite\", overwrite);\n    };\n    this.getOverwrite = function() {\n        return this.$overwrite;\n    };\n    this.toggleOverwrite = function() {\n        this.setOverwrite(!this.$overwrite);\n    };\n    this.addGutterDecoration = function(row, className) {\n        if (!this.$decorations[row])\n            this.$decorations[row] = \"\";\n        this.$decorations[row] += \" \" + className;\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.removeGutterDecoration = function(row, className) {\n        this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.getBreakpoints = function() {\n        return this.$breakpoints;\n    };\n    this.setBreakpoints = function(rows) {\n        this.$breakpoints = [];\n        for (var i=0; i<rows.length; i++) {\n            this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n        }\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.clearBreakpoints = function() {\n        this.$breakpoints = [];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.setBreakpoint = function(row, className) {\n        if (className === undefined)\n            className = \"ace_breakpoint\";\n        if (className)\n            this.$breakpoints[row] = className;\n        else\n            delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.clearBreakpoint = function(row) {\n        delete this.$breakpoints[row];\n        this._signal(\"changeBreakpoint\", {});\n    };\n    this.addMarker = function(range, clazz, type, inFront) {\n        var id = this.$markerId++;\n\n        var marker = {\n            range : range,\n            type : type || \"line\",\n            renderer: typeof type == \"function\" ? type : null,\n            clazz : clazz,\n            inFront: !!inFront,\n            id: id\n        };\n\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        } else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n\n        return id;\n    };\n    this.addDynamicMarker = function(marker, inFront) {\n        if (!marker.update)\n            return;\n        var id = this.$markerId++;\n        marker.id = id;\n        marker.inFront = !!inFront;\n\n        if (inFront) {\n            this.$frontMarkers[id] = marker;\n            this._signal(\"changeFrontMarker\");\n        } else {\n            this.$backMarkers[id] = marker;\n            this._signal(\"changeBackMarker\");\n        }\n\n        return marker;\n    };\n    this.removeMarker = function(markerId) {\n        var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n        if (!marker)\n            return;\n\n        var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n        if (marker) {\n            delete (markers[markerId]);\n            this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n        }\n    };\n    this.getMarkers = function(inFront) {\n        return inFront ? this.$frontMarkers : this.$backMarkers;\n    };\n\n    this.highlight = function(re) {\n        if (!this.$searchHighlight) {\n            var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n            this.$searchHighlight = this.addDynamicMarker(highlight);\n        }\n        this.$searchHighlight.setRegexp(re);\n    };\n    this.highlightLines = function(startRow, endRow, clazz, inFront) {\n        if (typeof endRow != \"number\") {\n            clazz = endRow;\n            endRow = startRow;\n        }\n        if (!clazz)\n            clazz = \"ace_step\";\n\n        var range = new Range(startRow, 0, endRow, Infinity);\n        range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n        return range;\n    };\n    this.setAnnotations = function(annotations) {\n        this.$annotations = annotations;\n        this._signal(\"changeAnnotation\", {});\n    };\n    this.getAnnotations = function() {\n        return this.$annotations || [];\n    };\n    this.clearAnnotations = function() {\n        this.setAnnotations([]);\n    };\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r?\\n)/m);\n        if (match) {\n            this.$autoNewLine = match[1];\n        } else {\n            this.$autoNewLine = \"\\n\";\n        }\n    };\n    this.getWordRange = function(row, column) {\n        var line = this.getLine(row);\n\n        var inToken = false;\n        if (column > 0)\n            inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n        if (!inToken)\n            inToken = !!line.charAt(column).match(this.tokenRe);\n\n        if (inToken)\n            var re = this.tokenRe;\n        else if (/^\\s+$/.test(line.slice(column-1, column+1)))\n            var re = /\\s/;\n        else\n            var re = this.nonTokenRe;\n\n        var start = column;\n        if (start > 0) {\n            do {\n                start--;\n            }\n            while (start >= 0 && line.charAt(start).match(re));\n            start++;\n        }\n\n        var end = column;\n        while (end < line.length && line.charAt(end).match(re)) {\n            end++;\n        }\n\n        return new Range(row, start, row, end);\n    };\n    this.getAWordRange = function(row, column) {\n        var wordRange = this.getWordRange(row, column);\n        var line = this.getLine(wordRange.end.row);\n\n        while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n            wordRange.end.column += 1;\n        }\n        return wordRange;\n    };\n    this.setNewLineMode = function(newLineMode) {\n        this.doc.setNewLineMode(newLineMode);\n    };\n    this.getNewLineMode = function() {\n        return this.doc.getNewLineMode();\n    };\n    this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n    this.getUseWorker = function() { return this.$useWorker; };\n    this.onReloadTokenizer = function(e) {\n        var rows = e.data;\n        this.bgTokenizer.start(rows.first);\n        this._signal(\"tokenizerUpdate\", e);\n    };\n\n    this.$modes = {};\n    this.$mode = null;\n    this.$modeId = null;\n    this.setMode = function(mode, cb) {\n        if (mode && typeof mode === \"object\") {\n            if (mode.getTokenizer)\n                return this.$onChangeMode(mode);\n            var options = mode;\n            var path = options.path;\n        } else {\n            path = mode || \"ace/mode/text\";\n        }\n        if (!this.$modes[\"ace/mode/text\"])\n            this.$modes[\"ace/mode/text\"] = new TextMode();\n\n        if (this.$modes[path] && !options) {\n            this.$onChangeMode(this.$modes[path]);\n            cb && cb();\n            return;\n        }\n        this.$modeId = path;\n        config.loadModule([\"mode\", path], function(m) {\n            if (this.$modeId !== path)\n                return cb && cb();\n            if (this.$modes[path] && !options) {\n                this.$onChangeMode(this.$modes[path]);\n            } else if (m && m.Mode) {\n                m = new m.Mode(options);\n                if (!options) {\n                    this.$modes[path] = m;\n                    m.$id = path;\n                }\n                this.$onChangeMode(m);\n            }\n            cb && cb();\n        }.bind(this));\n        if (!this.$mode)\n            this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n    };\n\n    this.$onChangeMode = function(mode, $isPlaceholder) {\n        if (!$isPlaceholder)\n            this.$modeId = mode.$id;\n        if (this.$mode === mode) \n            return;\n\n        this.$mode = mode;\n\n        this.$stopWorker();\n\n        if (this.$useWorker)\n            this.$startWorker();\n\n        var tokenizer = mode.getTokenizer();\n\n        if(tokenizer.addEventListener !== undefined) {\n            var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n            tokenizer.addEventListener(\"update\", onReloadTokenizer);\n        }\n\n        if (!this.bgTokenizer) {\n            this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n            var _self = this;\n            this.bgTokenizer.addEventListener(\"update\", function(e) {\n                _self._signal(\"tokenizerUpdate\", e);\n            });\n        } else {\n            this.bgTokenizer.setTokenizer(tokenizer);\n        }\n\n        this.bgTokenizer.setDocument(this.getDocument());\n\n        this.tokenRe = mode.tokenRe;\n        this.nonTokenRe = mode.nonTokenRe;\n\n        \n        if (!$isPlaceholder) {\n            if (mode.attachToSession)\n                mode.attachToSession(this);\n            this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n            this.$setFolding(mode.foldingRules);\n            this.bgTokenizer.start(0);\n            this._emit(\"changeMode\");\n        }\n    };\n\n    this.$stopWorker = function() {\n        if (this.$worker) {\n            this.$worker.terminate();\n            this.$worker = null;\n        }\n    };\n\n    this.$startWorker = function() {\n        try {\n            this.$worker = this.$mode.createWorker(this);\n        } catch (e) {\n            config.warn(\"Could not load worker\", e);\n            this.$worker = null;\n        }\n    };\n    this.getMode = function() {\n        return this.$mode;\n    };\n\n    this.$scrollTop = 0;\n    this.setScrollTop = function(scrollTop) {\n        if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n            return;\n\n        this.$scrollTop = scrollTop;\n        this._signal(\"changeScrollTop\", scrollTop);\n    };\n    this.getScrollTop = function() {\n        return this.$scrollTop;\n    };\n\n    this.$scrollLeft = 0;\n    this.setScrollLeft = function(scrollLeft) {\n        if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n            return;\n\n        this.$scrollLeft = scrollLeft;\n        this._signal(\"changeScrollLeft\", scrollLeft);\n    };\n    this.getScrollLeft = function() {\n        return this.$scrollLeft;\n    };\n    this.getScreenWidth = function() {\n        this.$computeWidth();\n        if (this.lineWidgets) \n            return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n        return this.screenWidth;\n    };\n    \n    this.getLineWidgetMaxWidth = function() {\n        if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n        var width = 0;\n        this.lineWidgets.forEach(function(w) {\n            if (w && w.screenWidth > width)\n                width = w.screenWidth;\n        });\n        return this.lineWidgetWidth = width;\n    };\n\n    this.$computeWidth = function(force) {\n        if (this.$modified || force) {\n            this.$modified = false;\n\n            if (this.$useWrapMode)\n                return this.screenWidth = this.$wrapLimit;\n\n            var lines = this.doc.getAllLines();\n            var cache = this.$rowLengthCache;\n            var longestScreenLine = 0;\n            var foldIndex = 0;\n            var foldLine = this.$foldData[foldIndex];\n            var foldStart = foldLine ? foldLine.start.row : Infinity;\n            var len = lines.length;\n\n            for (var i = 0; i < len; i++) {\n                if (i > foldStart) {\n                    i = foldLine.end.row + 1;\n                    if (i >= len)\n                        break;\n                    foldLine = this.$foldData[foldIndex++];\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n\n                if (cache[i] == null)\n                    cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n                if (cache[i] > longestScreenLine)\n                    longestScreenLine = cache[i];\n            }\n            this.screenWidth = longestScreenLine;\n        }\n    };\n    this.getLine = function(row) {\n        return this.doc.getLine(row);\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.doc.getLines(firstRow, lastRow);\n    };\n    this.getLength = function() {\n        return this.doc.getLength();\n    };\n    this.getTextRange = function(range) {\n        return this.doc.getTextRange(range || this.selection.getRange());\n    };\n    this.insert = function(position, text) {\n        return this.doc.insert(position, text);\n    };\n    this.remove = function(range) {\n        return this.doc.remove(range);\n    };\n    this.removeFullLines = function(firstRow, lastRow){\n        return this.doc.removeFullLines(firstRow, lastRow);\n    };\n    this.undoChanges = function(deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n\n        this.$fromUndo = true;\n        var lastUndoRange = null;\n        for (var i = deltas.length - 1; i != -1; i--) {\n            var delta = deltas[i];\n            if (delta.group == \"doc\") {\n                this.doc.revertDeltas(delta.deltas);\n                lastUndoRange =\n                    this.$getUndoSelection(delta.deltas, true, lastUndoRange);\n            } else {\n                delta.deltas.forEach(function(foldDelta) {\n                    this.addFolds(foldDelta.folds);\n                }, this);\n            }\n        }\n        this.$fromUndo = false;\n        lastUndoRange &&\n            this.$undoSelect &&\n            !dontSelect &&\n            this.selection.setSelectionRange(lastUndoRange);\n        return lastUndoRange;\n    };\n    this.redoChanges = function(deltas, dontSelect) {\n        if (!deltas.length)\n            return;\n\n        this.$fromUndo = true;\n        var lastUndoRange = null;\n        for (var i = 0; i < deltas.length; i++) {\n            var delta = deltas[i];\n            if (delta.group == \"doc\") {\n                this.doc.applyDeltas(delta.deltas);\n                lastUndoRange =\n                    this.$getUndoSelection(delta.deltas, false, lastUndoRange);\n            }\n        }\n        this.$fromUndo = false;\n        lastUndoRange &&\n            this.$undoSelect &&\n            !dontSelect &&\n            this.selection.setSelectionRange(lastUndoRange);\n        return lastUndoRange;\n    };\n    this.setUndoSelect = function(enable) {\n        this.$undoSelect = enable;\n    };\n\n    this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) {\n        function isInsert(delta) {\n            return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n        }\n\n        var delta = deltas[0];\n        var range, point;\n        var lastDeltaIsInsert = false;\n        if (isInsert(delta)) {\n            range = Range.fromPoints(delta.start, delta.end);\n            lastDeltaIsInsert = true;\n        } else {\n            range = Range.fromPoints(delta.start, delta.start);\n            lastDeltaIsInsert = false;\n        }\n\n        for (var i = 1; i < deltas.length; i++) {\n            delta = deltas[i];\n            if (isInsert(delta)) {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range.setStart(point);\n                }\n                point = delta.end;\n                if (range.compare(point.row, point.column) == 1) {\n                    range.setEnd(point);\n                }\n                lastDeltaIsInsert = true;\n            } else {\n                point = delta.start;\n                if (range.compare(point.row, point.column) == -1) {\n                    range = Range.fromPoints(delta.start, delta.start);\n                }\n                lastDeltaIsInsert = false;\n            }\n        }\n        if (lastUndoRange != null) {\n            if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {\n                lastUndoRange.start.column += range.end.column - range.start.column;\n                lastUndoRange.end.column += range.end.column - range.start.column;\n            }\n\n            var cmp = lastUndoRange.compareRange(range);\n            if (cmp == 1) {\n                range.setStart(lastUndoRange.start);\n            } else if (cmp == -1) {\n                range.setEnd(lastUndoRange.end);\n            }\n        }\n\n        return range;\n    };\n    this.replace = function(range, text) {\n        return this.doc.replace(range, text);\n    };\n    this.moveText = function(fromRange, toPosition, copy) {\n        var text = this.getTextRange(fromRange);\n        var folds = this.getFoldsInRange(fromRange);\n\n        var toRange = Range.fromPoints(toPosition, toPosition);\n        if (!copy) {\n            this.remove(fromRange);\n            var rowDiff = fromRange.start.row - fromRange.end.row;\n            var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n            if (collDiff) {\n                if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n                    toRange.start.column += collDiff;\n                if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n                    toRange.end.column += collDiff;\n            }\n            if (rowDiff && toRange.start.row >= fromRange.end.row) {\n                toRange.start.row += rowDiff;\n                toRange.end.row += rowDiff;\n            }\n        }\n\n        toRange.end = this.insert(toRange.start, text);\n        if (folds.length) {\n            var oldStart = fromRange.start;\n            var newStart = toRange.start;\n            var rowDiff = newStart.row - oldStart.row;\n            var collDiff = newStart.column - oldStart.column;\n            this.addFolds(folds.map(function(x) {\n                x = x.clone();\n                if (x.start.row == oldStart.row)\n                    x.start.column += collDiff;\n                if (x.end.row == oldStart.row)\n                    x.end.column += collDiff;\n                x.start.row += rowDiff;\n                x.end.row += rowDiff;\n                return x;\n            }));\n        }\n\n        return toRange;\n    };\n    this.indentRows = function(startRow, endRow, indentString) {\n        indentString = indentString.replace(/\\t/g, this.getTabString());\n        for (var row=startRow; row<=endRow; row++)\n            this.doc.insertInLine({row: row, column: 0}, indentString);\n    };\n    this.outdentRows = function (range) {\n        var rowRange = range.collapseRows();\n        var deleteRange = new Range(0, 0, 0, 0);\n        var size = this.getTabSize();\n\n        for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n            var line = this.getLine(i);\n\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            for (var j = 0; j < size; ++j)\n                if (line.charAt(j) != ' ')\n                    break;\n            if (j < size && line.charAt(j) == '\\t') {\n                deleteRange.start.column = j;\n                deleteRange.end.column = j + 1;\n            } else {\n                deleteRange.start.column = 0;\n                deleteRange.end.column = j;\n            }\n            this.remove(deleteRange);\n        }\n    };\n\n    this.$moveLines = function(firstRow, lastRow, dir) {\n        firstRow = this.getRowFoldStart(firstRow);\n        lastRow = this.getRowFoldEnd(lastRow);\n        if (dir < 0) {\n            var row = this.getRowFoldStart(firstRow + dir);\n            if (row < 0) return 0;\n            var diff = row-firstRow;\n        } else if (dir > 0) {\n            var row = this.getRowFoldEnd(lastRow + dir);\n            if (row > this.doc.getLength()-1) return 0;\n            var diff = row-lastRow;\n        } else {\n            firstRow = this.$clipRowToDocument(firstRow);\n            lastRow = this.$clipRowToDocument(lastRow);\n            var diff = lastRow - firstRow + 1;\n        }\n\n        var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n        var folds = this.getFoldsInRange(range).map(function(x){\n            x = x.clone();\n            x.start.row += diff;\n            x.end.row += diff;\n            return x;\n        });\n        \n        var lines = dir == 0\n            ? this.doc.getLines(firstRow, lastRow)\n            : this.doc.removeFullLines(firstRow, lastRow);\n        this.doc.insertFullLines(firstRow+diff, lines);\n        folds.length && this.addFolds(folds);\n        return diff;\n    };\n    this.moveLinesUp = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, -1);\n    };\n    this.moveLinesDown = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 1);\n    };\n    this.duplicateLines = function(firstRow, lastRow) {\n        return this.$moveLines(firstRow, lastRow, 0);\n    };\n\n\n    this.$clipRowToDocument = function(row) {\n        return Math.max(0, Math.min(row, this.doc.getLength()-1));\n    };\n\n    this.$clipColumnToRow = function(row, column) {\n        if (column < 0)\n            return 0;\n        return Math.min(this.doc.getLine(row).length, column);\n    };\n\n\n    this.$clipPositionToDocument = function(row, column) {\n        column = Math.max(0, column);\n\n        if (row < 0) {\n            row = 0;\n            column = 0;\n        } else {\n            var len = this.doc.getLength();\n            if (row >= len) {\n                row = len - 1;\n                column = this.doc.getLine(len-1).length;\n            } else {\n                column = Math.min(this.doc.getLine(row).length, column);\n            }\n        }\n\n        return {\n            row: row,\n            column: column\n        };\n    };\n\n    this.$clipRangeToDocument = function(range) {\n        if (range.start.row < 0) {\n            range.start.row = 0;\n            range.start.column = 0;\n        } else {\n            range.start.column = this.$clipColumnToRow(\n                range.start.row,\n                range.start.column\n            );\n        }\n\n        var len = this.doc.getLength() - 1;\n        if (range.end.row > len) {\n            range.end.row = len;\n            range.end.column = this.doc.getLine(len).length;\n        } else {\n            range.end.column = this.$clipColumnToRow(\n                range.end.row,\n                range.end.column\n            );\n        }\n        return range;\n    };\n    this.$wrapLimit = 80;\n    this.$useWrapMode = false;\n    this.$wrapLimitRange = {\n        min : null,\n        max : null\n    };\n    this.setUseWrapMode = function(useWrapMode) {\n        if (useWrapMode != this.$useWrapMode) {\n            this.$useWrapMode = useWrapMode;\n            this.$modified = true;\n            this.$resetRowCache(0);\n            if (useWrapMode) {\n                var len = this.getLength();\n                this.$wrapData = Array(len);\n                this.$updateWrapData(0, len - 1);\n            }\n\n            this._signal(\"changeWrapMode\");\n        }\n    };\n    this.getUseWrapMode = function() {\n        return this.$useWrapMode;\n    };\n    this.setWrapLimitRange = function(min, max) {\n        if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n            this.$wrapLimitRange = { min: min, max: max };\n            this.$modified = true;\n            if (this.$useWrapMode)\n                this._signal(\"changeWrapMode\");\n        }\n    };\n    this.adjustWrapLimit = function(desiredLimit, $printMargin) {\n        var limits = this.$wrapLimitRange;\n        if (limits.max < 0)\n            limits = {min: $printMargin, max: $printMargin};\n        var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n        if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n            this.$wrapLimit = wrapLimit;\n            this.$modified = true;\n            if (this.$useWrapMode) {\n                this.$updateWrapData(0, this.getLength() - 1);\n                this.$resetRowCache(0);\n                this._signal(\"changeWrapLimit\");\n            }\n            return true;\n        }\n        return false;\n    };\n\n    this.$constrainWrapLimit = function(wrapLimit, min, max) {\n        if (min)\n            wrapLimit = Math.max(min, wrapLimit);\n\n        if (max)\n            wrapLimit = Math.min(max, wrapLimit);\n\n        return wrapLimit;\n    };\n    this.getWrapLimit = function() {\n        return this.$wrapLimit;\n    };\n    this.setWrapLimit = function (limit) {\n        this.setWrapLimitRange(limit, limit);\n    };\n    this.getWrapLimitRange = function() {\n        return {\n            min : this.$wrapLimitRange.min,\n            max : this.$wrapLimitRange.max\n        };\n    };\n\n    this.$updateInternalDataOnChange = function(delta) {\n        var useWrapMode = this.$useWrapMode;\n        var action = delta.action;\n        var start = delta.start;\n        var end = delta.end;\n        var firstRow = start.row;\n        var lastRow = end.row;\n        var len = lastRow - firstRow;\n        var removedFolds = null;\n        \n        this.$updating = true;\n        if (len != 0) {\n            if (action === \"remove\") {\n                this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n                var foldLines = this.$foldData;\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n\n                var foldLine = this.getFoldLine(end.row);\n                var idx = 0;\n                if (foldLine) {\n                    foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n                    foldLine.shiftRow(-len);\n\n                    var foldLineBefore = this.getFoldLine(firstRow);\n                    if (foldLineBefore && foldLineBefore !== foldLine) {\n                        foldLineBefore.merge(foldLine);\n                        foldLine = foldLineBefore;\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= end.row) {\n                        foldLine.shiftRow(-len);\n                    }\n                }\n\n                lastRow = firstRow;\n            } else {\n                var args = Array(len);\n                args.unshift(firstRow, 0);\n                var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache\n                arr.splice.apply(arr, args);\n                var foldLines = this.$foldData;\n                var foldLine = this.getFoldLine(firstRow);\n                var idx = 0;\n                if (foldLine) {\n                    var cmp = foldLine.range.compareInside(start.row, start.column);\n                    if (cmp == 0) {\n                        foldLine = foldLine.split(start.row, start.column);\n                        if (foldLine) {\n                            foldLine.shiftRow(len);\n                            foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n                        }\n                    } else\n                    if (cmp == -1) {\n                        foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n                        foldLine.shiftRow(len);\n                    }\n                    idx = foldLines.indexOf(foldLine) + 1;\n                }\n\n                for (idx; idx < foldLines.length; idx++) {\n                    var foldLine = foldLines[idx];\n                    if (foldLine.start.row >= firstRow) {\n                        foldLine.shiftRow(len);\n                    }\n                }\n            }\n        } else {\n            len = Math.abs(delta.start.column - delta.end.column);\n            if (action === \"remove\") {\n                removedFolds = this.getFoldsInRange(delta);\n                this.removeFolds(removedFolds);\n\n                len = -len;\n            }\n            var foldLine = this.getFoldLine(firstRow);\n            if (foldLine) {\n                foldLine.addRemoveChars(firstRow, start.column, len);\n            }\n        }\n\n        if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n            console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n        }\n        this.$updating = false;\n\n        if (useWrapMode)\n            this.$updateWrapData(firstRow, lastRow);\n        else\n            this.$updateRowLengthCache(firstRow, lastRow);\n\n        return removedFolds;\n    };\n\n    this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n        this.$rowLengthCache[firstRow] = null;\n        this.$rowLengthCache[lastRow] = null;\n    };\n\n    this.$updateWrapData = function(firstRow, lastRow) {\n        var lines = this.doc.getAllLines();\n        var tabSize = this.getTabSize();\n        var wrapData = this.$wrapData;\n        var wrapLimit = this.$wrapLimit;\n        var tokens;\n        var foldLine;\n\n        var row = firstRow;\n        lastRow = Math.min(lastRow, lines.length - 1);\n        while (row <= lastRow) {\n            foldLine = this.getFoldLine(row, foldLine);\n            if (!foldLine) {\n                tokens = this.$getDisplayTokens(lines[row]);\n                wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row ++;\n            } else {\n                tokens = [];\n                foldLine.walk(function(placeholder, row, column, lastColumn) {\n                        var walkTokens;\n                        if (placeholder != null) {\n                            walkTokens = this.$getDisplayTokens(\n                                            placeholder, tokens.length);\n                            walkTokens[0] = PLACEHOLDER_START;\n                            for (var i = 1; i < walkTokens.length; i++) {\n                                walkTokens[i] = PLACEHOLDER_BODY;\n                            }\n                        } else {\n                            walkTokens = this.$getDisplayTokens(\n                                lines[row].substring(lastColumn, column),\n                                tokens.length);\n                        }\n                        tokens = tokens.concat(walkTokens);\n                    }.bind(this),\n                    foldLine.end.row,\n                    lines[foldLine.end.row].length + 1\n                );\n\n                wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n                row = foldLine.end.row + 1;\n            }\n        }\n    };\n    var CHAR = 1,\n        CHAR_EXT = 2,\n        PLACEHOLDER_START = 3,\n        PLACEHOLDER_BODY =  4,\n        PUNCTUATION = 9,\n        SPACE = 10,\n        TAB = 11,\n        TAB_SPACE = 12;\n\n\n    this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n        if (tokens.length == 0) {\n            return [];\n        }\n\n        var splits = [];\n        var displayLength = tokens.length;\n        var lastSplit = 0, lastDocSplit = 0;\n\n        var isCode = this.$wrapAsCode;\n\n        var indentedSoftWrap = this.$indentedSoftWrap;\n        var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n            || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n        function getWrapIndent() {\n            var indentation = 0;\n            if (maxIndent === 0)\n                return indentation;\n            if (indentedSoftWrap) {\n                for (var i = 0; i < tokens.length; i++) {\n                    var token = tokens[i];\n                    if (token == SPACE)\n                        indentation += 1;\n                    else if (token == TAB)\n                        indentation += tabSize;\n                    else if (token == TAB_SPACE)\n                        continue;\n                    else\n                        break;\n                }\n            }\n            if (isCode && indentedSoftWrap !== false)\n                indentation += tabSize;\n            return Math.min(indentation, maxIndent);\n        }\n        function addSplit(screenPos) {\n            var displayed = tokens.slice(lastSplit, screenPos);\n            var len = displayed.length;\n            displayed.join(\"\")\n                .replace(/12/g, function() {\n                    len -= 1;\n                })\n                .replace(/2/g, function() {\n                    len -= 1;\n                });\n\n            if (!splits.length) {\n                indent = getWrapIndent();\n                splits.indent = indent;\n            }\n            lastDocSplit += len;\n            splits.push(lastDocSplit);\n            lastSplit = screenPos;\n        }\n        var indent = 0;\n        while (displayLength - lastSplit > wrapLimit - indent) {\n            var split = lastSplit + wrapLimit - indent;\n            if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n                addSplit(split);\n                continue;\n            }\n            if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n                for (split; split != lastSplit - 1; split--) {\n                    if (tokens[split] == PLACEHOLDER_START) {\n                        break;\n                    }\n                }\n                if (split > lastSplit) {\n                    addSplit(split);\n                    continue;\n                }\n                split = lastSplit + wrapLimit;\n                for (split; split < tokens.length; split++) {\n                    if (tokens[split] != PLACEHOLDER_BODY) {\n                        break;\n                    }\n                }\n                if (split == tokens.length) {\n                    break;  // Breaks the while-loop.\n                }\n                addSplit(split);\n                continue;\n            }\n            var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1);\n            while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                split --;\n            }\n            if (isCode) {\n                while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n                    split --;\n                }\n                while (split > minSplit && tokens[split] == PUNCTUATION) {\n                    split --;\n                }\n            } else {\n                while (split > minSplit && tokens[split] < SPACE) {\n                    split --;\n                }\n            }\n            if (split > minSplit) {\n                addSplit(++split);\n                continue;\n            }\n            split = lastSplit + wrapLimit;\n            if (tokens[split] == CHAR_EXT)\n                split--;\n            addSplit(split - indent);\n        }\n        return splits;\n    };\n    this.$getDisplayTokens = function(str, offset) {\n        var arr = [];\n        var tabSize;\n        offset = offset || 0;\n\n        for (var i = 0; i < str.length; i++) {\n            var c = str.charCodeAt(i);\n            if (c == 9) {\n                tabSize = this.getScreenTabSize(arr.length + offset);\n                arr.push(TAB);\n                for (var n = 1; n < tabSize; n++) {\n                    arr.push(TAB_SPACE);\n                }\n            }\n            else if (c == 32) {\n                arr.push(SPACE);\n            } else if((c > 39 && c < 48) || (c > 57 && c < 64)) {\n                arr.push(PUNCTUATION);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                arr.push(CHAR, CHAR_EXT);\n            } else {\n                arr.push(CHAR);\n            }\n        }\n        return arr;\n    };\n    this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n        if (maxScreenColumn == 0)\n            return [0, 0];\n        if (maxScreenColumn == null)\n            maxScreenColumn = Infinity;\n        screenColumn = screenColumn || 0;\n\n        var c, column;\n        for (column = 0; column < str.length; column++) {\n            c = str.charCodeAt(column);\n            if (c == 9) {\n                screenColumn += this.getScreenTabSize(screenColumn);\n            }\n            else if (c >= 0x1100 && isFullWidth(c)) {\n                screenColumn += 2;\n            } else {\n                screenColumn += 1;\n            }\n            if (screenColumn > maxScreenColumn) {\n                break;\n            }\n        }\n\n        return [screenColumn, column];\n    };\n\n    this.lineWidgets = null;\n    this.getRowLength = function(row) {\n        if (this.lineWidgets)\n            var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else \n            h = 0\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1 + h;\n        } else {\n            return this.$wrapData[row].length + 1 + h;\n        }\n    };\n    this.getRowLineCount = function(row) {\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1;\n        } else {\n            return this.$wrapData[row].length + 1;\n        }\n    };\n\n    this.getRowWrapIndent = function(screenRow) {\n        if (this.$useWrapMode) {\n            var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n            var splits = this.$wrapData[pos.row];\n            return splits.length && splits[0] < pos.column ? splits.indent : 0;\n        } else {\n            return 0;\n        }\n    }\n    this.getScreenLastRowColumn = function(screenRow) {\n        var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n        return this.documentToScreenColumn(pos.row, pos.column);\n    };\n    this.getDocumentLastRowColumn = function(docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.getScreenLastRowColumn(screenRow);\n    };\n    this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n        var screenRow = this.documentToScreenRow(docRow, docColumn);\n        return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n    };\n    this.getRowSplitData = function(row) {\n        if (!this.$useWrapMode) {\n            return undefined;\n        } else {\n            return this.$wrapData[row];\n        }\n    };\n    this.getScreenTabSize = function(screenColumn) {\n        return this.$tabSize - screenColumn % this.$tabSize;\n    };\n\n\n    this.screenToDocumentRow = function(screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).row;\n    };\n\n\n    this.screenToDocumentColumn = function(screenRow, screenColumn) {\n        return this.screenToDocumentPosition(screenRow, screenColumn).column;\n    };\n    this.screenToDocumentPosition = function(screenRow, screenColumn) {\n        if (screenRow < 0)\n            return {row: 0, column: 0};\n\n        var line;\n        var docRow = 0;\n        var docColumn = 0;\n        var column;\n        var row = 0;\n        var rowLength = 0;\n\n        var rowCache = this.$screenRowCache;\n        var i = this.$getRowCacheIndex(rowCache, screenRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var docRow = this.$docRowCache[i];\n            var doCache = screenRow > rowCache[l - 1];\n        } else {\n            var doCache = !l;\n        }\n\n        var maxRow = this.getLength() - 1;\n        var foldLine = this.getNextFoldLine(docRow);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (row <= screenRow) {\n            rowLength = this.getRowLength(docRow);\n            if (row + rowLength > screenRow || docRow >= maxRow) {\n                break;\n            } else {\n                row += rowLength;\n                docRow++;\n                if (docRow > foldStart) {\n                    docRow = foldLine.end.row+1;\n                    foldLine = this.getNextFoldLine(docRow, foldLine);\n                    foldStart = foldLine ? foldLine.start.row : Infinity;\n                }\n            }\n\n            if (doCache) {\n                this.$docRowCache.push(docRow);\n                this.$screenRowCache.push(row);\n            }\n        }\n\n        if (foldLine && foldLine.start.row <= docRow) {\n            line = this.getFoldDisplayLine(foldLine);\n            docRow = foldLine.start.row;\n        } else if (row + rowLength <= screenRow || docRow > maxRow) {\n            return {\n                row: maxRow,\n                column: this.getLine(maxRow).length\n            };\n        } else {\n            line = this.getLine(docRow);\n            foldLine = null;\n        }\n        var wrapIndent = 0;\n        if (this.$useWrapMode) {\n            var splits = this.$wrapData[docRow];\n            if (splits) {\n                var splitIndex = Math.floor(screenRow - row);\n                column = splits[splitIndex];\n                if(splitIndex > 0 && splits.length) {\n                    wrapIndent = splits.indent;\n                    docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n                    line = line.substring(docColumn);\n                }\n            }\n        }\n\n        docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n        if (this.$useWrapMode && docColumn >= column)\n            docColumn = column - 1;\n\n        if (foldLine)\n            return foldLine.idxToPosition(docColumn);\n\n        return {row: docRow, column: docColumn};\n    };\n    this.documentToScreenPosition = function(docRow, docColumn) {\n        if (typeof docColumn === \"undefined\")\n            var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n        else\n            pos = this.$clipPositionToDocument(docRow, docColumn);\n\n        docRow = pos.row;\n        docColumn = pos.column;\n\n        var screenRow = 0;\n        var foldStartRow = null;\n        var fold = null;\n        fold = this.getFoldAt(docRow, docColumn, 1);\n        if (fold) {\n            docRow = fold.start.row;\n            docColumn = fold.start.column;\n        }\n\n        var rowEnd, row = 0;\n\n\n        var rowCache = this.$docRowCache;\n        var i = this.$getRowCacheIndex(rowCache, docRow);\n        var l = rowCache.length;\n        if (l && i >= 0) {\n            var row = rowCache[i];\n            var screenRow = this.$screenRowCache[i];\n            var doCache = docRow > rowCache[l - 1];\n        } else {\n            var doCache = !l;\n        }\n\n        var foldLine = this.getNextFoldLine(row);\n        var foldStart = foldLine ?foldLine.start.row :Infinity;\n\n        while (row < docRow) {\n            if (row >= foldStart) {\n                rowEnd = foldLine.end.row + 1;\n                if (rowEnd > docRow)\n                    break;\n                foldLine = this.getNextFoldLine(rowEnd, foldLine);\n                foldStart = foldLine ?foldLine.start.row :Infinity;\n            }\n            else {\n                rowEnd = row + 1;\n            }\n\n            screenRow += this.getRowLength(row);\n            row = rowEnd;\n\n            if (doCache) {\n                this.$docRowCache.push(row);\n                this.$screenRowCache.push(screenRow);\n            }\n        }\n        var textLine = \"\";\n        if (foldLine && row >= foldStart) {\n            textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n            foldStartRow = foldLine.start.row;\n        } else {\n            textLine = this.getLine(docRow).substring(0, docColumn);\n            foldStartRow = docRow;\n        }\n        var wrapIndent = 0;\n        if (this.$useWrapMode) {\n            var wrapRow = this.$wrapData[foldStartRow];\n            if (wrapRow) {\n                var screenRowOffset = 0;\n                while (textLine.length >= wrapRow[screenRowOffset]) {\n                    screenRow ++;\n                    screenRowOffset++;\n                }\n                textLine = textLine.substring(\n                    wrapRow[screenRowOffset - 1] || 0, textLine.length\n                );\n                wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n            }\n        }\n\n        return {\n            row: screenRow,\n            column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n        };\n    };\n    this.documentToScreenColumn = function(row, docColumn) {\n        return this.documentToScreenPosition(row, docColumn).column;\n    };\n    this.documentToScreenRow = function(docRow, docColumn) {\n        return this.documentToScreenPosition(docRow, docColumn).row;\n    };\n    this.getScreenLength = function() {\n        var screenRows = 0;\n        var fold = null;\n        if (!this.$useWrapMode) {\n            screenRows = this.getLength();\n            var foldData = this.$foldData;\n            for (var i = 0; i < foldData.length; i++) {\n                fold = foldData[i];\n                screenRows -= fold.end.row - fold.start.row;\n            }\n        } else {\n            var lastRow = this.$wrapData.length;\n            var row = 0, i = 0;\n            var fold = this.$foldData[i++];\n            var foldStart = fold ? fold.start.row :Infinity;\n\n            while (row < lastRow) {\n                var splits = this.$wrapData[row];\n                screenRows += splits ? splits.length + 1 : 1;\n                row ++;\n                if (row > foldStart) {\n                    row = fold.end.row+1;\n                    fold = this.$foldData[i++];\n                    foldStart = fold ?fold.start.row :Infinity;\n                }\n            }\n        }\n        if (this.lineWidgets)\n            screenRows += this.$getWidgetScreenLength();\n\n        return screenRows;\n    };\n    this.$setFontMetrics = function(fm) {\n        if (!this.$enableVarChar) return;\n        this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {\n            if (maxScreenColumn === 0)\n                return [0, 0];\n            if (!maxScreenColumn)\n                maxScreenColumn = Infinity;\n            screenColumn = screenColumn || 0;\n            \n            var c, column;\n            for (column = 0; column < str.length; column++) {\n                c = str.charAt(column);\n                if (c === \"\\t\") {\n                    screenColumn += this.getScreenTabSize(screenColumn);\n                } else {\n                    screenColumn += fm.getCharacterWidth(c);\n                }\n                if (screenColumn > maxScreenColumn) {\n                    break;\n                }\n            }\n            \n            return [screenColumn, column];\n        };\n    };\n    \n    this.destroy = function() {\n        if (this.bgTokenizer) {\n            this.bgTokenizer.setDocument(null);\n            this.bgTokenizer = null;\n        }\n        this.$stopWorker();\n    };\n    function isFullWidth(c) {\n        if (c < 0x1100)\n            return false;\n        return c >= 0x1100 && c <= 0x115F ||\n               c >= 0x11A3 && c <= 0x11A7 ||\n               c >= 0x11FA && c <= 0x11FF ||\n               c >= 0x2329 && c <= 0x232A ||\n               c >= 0x2E80 && c <= 0x2E99 ||\n               c >= 0x2E9B && c <= 0x2EF3 ||\n               c >= 0x2F00 && c <= 0x2FD5 ||\n               c >= 0x2FF0 && c <= 0x2FFB ||\n               c >= 0x3000 && c <= 0x303E ||\n               c >= 0x3041 && c <= 0x3096 ||\n               c >= 0x3099 && c <= 0x30FF ||\n               c >= 0x3105 && c <= 0x312D ||\n               c >= 0x3131 && c <= 0x318E ||\n               c >= 0x3190 && c <= 0x31BA ||\n               c >= 0x31C0 && c <= 0x31E3 ||\n               c >= 0x31F0 && c <= 0x321E ||\n               c >= 0x3220 && c <= 0x3247 ||\n               c >= 0x3250 && c <= 0x32FE ||\n               c >= 0x3300 && c <= 0x4DBF ||\n               c >= 0x4E00 && c <= 0xA48C ||\n               c >= 0xA490 && c <= 0xA4C6 ||\n               c >= 0xA960 && c <= 0xA97C ||\n               c >= 0xAC00 && c <= 0xD7A3 ||\n               c >= 0xD7B0 && c <= 0xD7C6 ||\n               c >= 0xD7CB && c <= 0xD7FB ||\n               c >= 0xF900 && c <= 0xFAFF ||\n               c >= 0xFE10 && c <= 0xFE19 ||\n               c >= 0xFE30 && c <= 0xFE52 ||\n               c >= 0xFE54 && c <= 0xFE66 ||\n               c >= 0xFE68 && c <= 0xFE6B ||\n               c >= 0xFF01 && c <= 0xFF60 ||\n               c >= 0xFFE0 && c <= 0xFFE6;\n    }\n\n}).call(EditSession.prototype);\n\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\nconfig.defineOptions(EditSession.prototype, \"session\", {\n    wrap: {\n        set: function(value) {\n            if (!value || value == \"off\")\n                value = false;\n            else if (value == \"free\")\n                value = true;\n            else if (value == \"printMargin\")\n                value = -1;\n            else if (typeof value == \"string\")\n                value = parseInt(value, 10) || false;\n\n            if (this.$wrap == value)\n                return;\n            this.$wrap = value;\n            if (!value) {\n                this.setUseWrapMode(false);\n            } else {\n                var col = typeof value == \"number\" ? value : null;\n                this.setWrapLimitRange(col, col);\n                this.setUseWrapMode(true);\n            }\n        },\n        get: function() {\n            if (this.getUseWrapMode()) {\n                if (this.$wrap == -1)\n                    return \"printMargin\";\n                if (!this.getWrapLimitRange().min)\n                    return \"free\";\n                return this.$wrap;\n            }\n            return \"off\";\n        },\n        handlesSet: true\n    },    \n    wrapMethod: {\n        set: function(val) {\n            val = val == \"auto\"\n                ? this.$mode.type != \"text\"\n                : val != \"text\";\n            if (val != this.$wrapAsCode) {\n                this.$wrapAsCode = val;\n                if (this.$useWrapMode) {\n                    this.$modified = true;\n                    this.$resetRowCache(0);\n                    this.$updateWrapData(0, this.getLength() - 1);\n                }\n            }\n        },\n        initialValue: \"auto\"\n    },\n    indentedSoftWrap: { initialValue: true },\n    firstLineNumber: {\n        set: function() {this._signal(\"changeBreakpoint\");},\n        initialValue: 1\n    },\n    useWorker: {\n        set: function(useWorker) {\n            this.$useWorker = useWorker;\n\n            this.$stopWorker();\n            if (useWorker)\n                this.$startWorker();\n        },\n        initialValue: true\n    },\n    useSoftTabs: {initialValue: true},\n    tabSize: {\n        set: function(tabSize) {\n            if (isNaN(tabSize) || this.$tabSize === tabSize) return;\n\n            this.$modified = true;\n            this.$rowLengthCache = [];\n            this.$tabSize = tabSize;\n            this._signal(\"changeTabSize\");\n        },\n        initialValue: 4,\n        handlesSet: true\n    },\n    overwrite: {\n        set: function(val) {this._signal(\"changeOverwrite\");},\n        initialValue: false\n    },\n    newLineMode: {\n        set: function(val) {this.doc.setNewLineMode(val)},\n        get: function() {return this.doc.getNewLineMode()},\n        handlesSet: true\n    },\n    mode: {\n        set: function(val) { this.setMode(val) },\n        get: function() { return this.$modeId }\n    }\n});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar Search = function() {\n    this.$options = {};\n};\n\n(function() {\n    this.set = function(options) {\n        oop.mixin(this.$options, options);\n        return this;\n    };\n    this.getOptions = function() {\n        return lang.copyObject(this.$options);\n    };\n    this.setOptions = function(options) {\n        this.$options = options;\n    };\n    this.find = function(session) {\n        var options = this.$options;\n        var iterator = this.$matchIterator(session, options);\n        if (!iterator)\n            return false;\n\n        var firstRange = null;\n        iterator.forEach(function(range, row, offset) {\n            if (!range.start) {\n                var column = range.offset + (offset || 0);\n                firstRange = new Range(row, column, row, column + range.length);\n                if (!range.length && options.start && options.start.start\n                    && options.skipCurrent != false && firstRange.isEqual(options.start)\n                ) {\n                    firstRange = null;\n                    return false;\n                }\n            } else\n                firstRange = range;\n            return true;\n        });\n\n        return firstRange;\n    };\n    this.findAll = function(session) {\n        var options = this.$options;\n        if (!options.needle)\n            return [];\n        this.$assembleRegExp(options);\n\n        var range = options.range;\n        var lines = range\n            ? session.getLines(range.start.row, range.end.row)\n            : session.doc.getAllLines();\n\n        var ranges = [];\n        var re = options.re;\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var maxRow = lines.length - len;\n            var prevRange;\n            outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n                for (var j = 0; j < len; j++)\n                    if (lines[row + j].search(re[j]) == -1)\n                        continue outer;\n                \n                var startLine = lines[row];\n                var line = lines[row + len - 1];\n                var startIndex = startLine.length - startLine.match(re[0])[0].length;\n                var endIndex = line.match(re[len - 1])[0].length;\n                \n                if (prevRange && prevRange.end.row === row &&\n                    prevRange.end.column > startIndex\n                ) {\n                    continue;\n                }\n                ranges.push(prevRange = new Range(\n                    row, startIndex, row + len - 1, endIndex\n                ));\n                if (len > 2)\n                    row = row + len - 2;\n            }\n        } else {\n            for (var i = 0; i < lines.length; i++) {\n                var matches = lang.getMatchOffsets(lines[i], re);\n                for (var j = 0; j < matches.length; j++) {\n                    var match = matches[j];\n                    ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n                }\n            }\n        }\n\n        if (range) {\n            var startColumn = range.start.column;\n            var endColumn = range.start.column;\n            var i = 0, j = ranges.length - 1;\n            while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n                i++;\n\n            while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n                j--;\n            \n            ranges = ranges.slice(i, j + 1);\n            for (i = 0, j = ranges.length; i < j; i++) {\n                ranges[i].start.row += range.start.row;\n                ranges[i].end.row += range.start.row;\n            }\n        }\n\n        return ranges;\n    };\n    this.replace = function(input, replacement) {\n        var options = this.$options;\n\n        var re = this.$assembleRegExp(options);\n        if (options.$isMultiLine)\n            return replacement;\n\n        if (!re)\n            return;\n\n        var match = re.exec(input);\n        if (!match || match[0].length != input.length)\n            return null;\n        \n        replacement = input.replace(re, replacement);\n        if (options.preserveCase) {\n            replacement = replacement.split(\"\");\n            for (var i = Math.min(input.length, input.length); i--; ) {\n                var ch = input[i];\n                if (ch && ch.toLowerCase() != ch)\n                    replacement[i] = replacement[i].toUpperCase();\n                else\n                    replacement[i] = replacement[i].toLowerCase();\n            }\n            replacement = replacement.join(\"\");\n        }\n        \n        return replacement;\n    };\n\n    this.$matchIterator = function(session, options) {\n        var re = this.$assembleRegExp(options);\n        if (!re)\n            return false;\n\n        var callback;\n        if (options.$isMultiLine) {\n            var len = re.length;\n            var matchIterator = function(line, row, offset) {\n                var startIndex = line.search(re[0]);\n                if (startIndex == -1)\n                    return;\n                for (var i = 1; i < len; i++) {\n                    line = session.getLine(row + i);\n                    if (line.search(re[i]) == -1)\n                        return;\n                }\n\n                var endIndex = line.match(re[len - 1])[0].length;\n\n                var range = new Range(row, startIndex, row + len - 1, endIndex);\n                if (re.offset == 1) {\n                    range.start.row--;\n                    range.start.column = Number.MAX_VALUE;\n                } else if (offset)\n                    range.start.column += offset;\n\n                if (callback(range))\n                    return true;\n            };\n        } else if (options.backwards) {\n            var matchIterator = function(line, row, startIndex) {\n                var matches = lang.getMatchOffsets(line, re);\n                for (var i = matches.length-1; i >= 0; i--)\n                    if (callback(matches[i], row, startIndex))\n                        return true;\n            };\n        } else {\n            var matchIterator = function(line, row, startIndex) {\n                var matches = lang.getMatchOffsets(line, re);\n                for (var i = 0; i < matches.length; i++)\n                    if (callback(matches[i], row, startIndex))\n                        return true;\n            };\n        }\n        \n        var lineIterator = this.$lineIterator(session, options);\n\n        return {\n            forEach: function(_callback) {\n                callback = _callback;\n                lineIterator.forEach(matchIterator);\n            }\n        };\n    };\n\n    this.$assembleRegExp = function(options, $disableFakeMultiline) {\n        if (options.needle instanceof RegExp)\n            return options.re = options.needle;\n\n        var needle = options.needle;\n\n        if (!options.needle)\n            return options.re = false;\n\n        if (!options.regExp)\n            needle = lang.escapeRegExp(needle);\n\n        if (options.wholeWord)\n            needle = addWordBoundary(needle, options);\n\n        var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n        options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n        if (options.$isMultiLine)\n            return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n        try {\n            var re = new RegExp(needle, modifier);\n        } catch(e) {\n            re = false;\n        }\n        return options.re = re;\n    };\n\n    this.$assembleMultilineRegExp = function(needle, modifier) {\n        var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n        var re = [];\n        for (var i = 0; i < parts.length; i++) try {\n            re.push(new RegExp(parts[i], modifier));\n        } catch(e) {\n            return false;\n        }\n        if (parts[0] == \"\") {\n            re.shift();\n            re.offset = 1;\n        } else {\n            re.offset = 0;\n        }\n        return re;\n    };\n\n    this.$lineIterator = function(session, options) {\n        var backwards = options.backwards == true;\n        var skipCurrent = options.skipCurrent != false;\n\n        var range = options.range;\n        var start = options.start;\n        if (!start)\n            start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n         \n        if (start.start)\n            start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n        var firstRow = range ? range.start.row : 0;\n        var lastRow = range ? range.end.row : session.getLength() - 1;\n\n        var forEach = backwards ? function(callback) {\n                var row = start.row;\n\n                var line = session.getLine(row).substring(0, start.column);\n                if (callback(line, row))\n                    return;\n\n                for (row--; row >= firstRow; row--)\n                    if (callback(session.getLine(row), row))\n                        return;\n\n                if (options.wrap == false)\n                    return;\n\n                for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n                    if (callback(session.getLine(row), row))\n                        return;\n            } : function(callback) {\n                var row = start.row;\n\n                var line = session.getLine(row).substr(start.column);\n                if (callback(line, row, start.column))\n                    return;\n\n                for (row = row+1; row <= lastRow; row++)\n                    if (callback(session.getLine(row), row))\n                        return;\n\n                if (options.wrap == false)\n                    return;\n\n                for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n                    if (callback(session.getLine(row), row))\n                        return;\n            };\n        \n        return {forEach: forEach};\n    };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n    function wordBoundary(c) {\n        if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n        return \"\";\n    }\n    return wordBoundary(needle[0]) + needle\n        + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n    this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n    this.commands = {};\n    this.commandKeyBinding = {};\n    this.addCommands(config);\n    this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n    HashHandler.call(this, config, platform);\n    this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n    \n\n    this.addCommand = function(command) {\n        if (this.commands[command.name])\n            this.removeCommand(command);\n\n        this.commands[command.name] = command;\n\n        if (command.bindKey)\n            this._buildKeyHash(command);\n    };\n\n    this.removeCommand = function(command, keepCommand) {\n        var name = command && (typeof command === 'string' ? command : command.name);\n        command = this.commands[name];\n        if (!keepCommand)\n            delete this.commands[name];\n        var ckb = this.commandKeyBinding;\n        for (var keyId in ckb) {\n            var cmdGroup = ckb[keyId];\n            if (cmdGroup == command) {\n                delete ckb[keyId];\n            } else if (Array.isArray(cmdGroup)) {\n                var i = cmdGroup.indexOf(command);\n                if (i != -1) {\n                    cmdGroup.splice(i, 1);\n                    if (cmdGroup.length == 1)\n                        ckb[keyId] = cmdGroup[0];\n                }\n            }\n        }\n    };\n\n    this.bindKey = function(key, command, position) {\n        if (typeof key == \"object\" && key) {\n            if (position == undefined)\n                position = key.position;\n            key = key[this.platform];\n        }\n        if (!key)\n            return;\n        if (typeof command == \"function\")\n            return this.addCommand({exec: command, bindKey: key, name: command.name || key});\n        \n        key.split(\"|\").forEach(function(keyPart) {\n            var chain = \"\";\n            if (keyPart.indexOf(\" \") != -1) {\n                var parts = keyPart.split(/\\s+/);\n                keyPart = parts.pop();\n                parts.forEach(function(keyPart) {\n                    var binding = this.parseKeys(keyPart);\n                    var id = KEY_MODS[binding.hashId] + binding.key;\n                    chain += (chain ? \" \" : \"\") + id;\n                    this._addCommandToBinding(chain, \"chainKeys\");\n                }, this);\n                chain += \" \";\n            }\n            var binding = this.parseKeys(keyPart);\n            var id = KEY_MODS[binding.hashId] + binding.key;\n            this._addCommandToBinding(chain + id, command, position);\n        }, this);\n    };\n    \n    function getPosition(command) {\n        return typeof command == \"object\" && command.bindKey\n            && command.bindKey.position || 0;\n    }\n    this._addCommandToBinding = function(keyId, command, position) {\n        var ckb = this.commandKeyBinding, i;\n        if (!command) {\n            delete ckb[keyId];\n        } else if (!ckb[keyId] || this.$singleCommand) {\n            ckb[keyId] = command;\n        } else {\n            if (!Array.isArray(ckb[keyId])) {\n                ckb[keyId] = [ckb[keyId]];\n            } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n                ckb[keyId].splice(i, 1);\n            }\n\n            if (typeof position != \"number\") {\n                if (position || command.isDefault)\n                    position = -100;\n                else\n                   position = getPosition(command);\n            }\n            var commands = ckb[keyId];\n            for (i = 0; i < commands.length; i++) {\n                var other = commands[i];\n                var otherPos = getPosition(other);\n                if (otherPos > position)\n                    break;\n            }\n            commands.splice(i, 0, command);\n        }\n    };\n\n    this.addCommands = function(commands) {\n        commands && Object.keys(commands).forEach(function(name) {\n            var command = commands[name];\n            if (!command)\n                return;\n            \n            if (typeof command === \"string\")\n                return this.bindKey(command, name);\n\n            if (typeof command === \"function\")\n                command = { exec: command };\n\n            if (typeof command !== \"object\")\n                return;\n\n            if (!command.name)\n                command.name = name;\n\n            this.addCommand(command);\n        }, this);\n    };\n\n    this.removeCommands = function(commands) {\n        Object.keys(commands).forEach(function(name) {\n            this.removeCommand(commands[name]);\n        }, this);\n    };\n\n    this.bindKeys = function(keyList) {\n        Object.keys(keyList).forEach(function(key) {\n            this.bindKey(key, keyList[key]);\n        }, this);\n    };\n\n    this._buildKeyHash = function(command) {\n        this.bindKey(command.bindKey, command);\n    };\n    this.parseKeys = function(keys) {\n        var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x});\n        var key = parts.pop();\n\n        var keyCode = keyUtil[key];\n        if (keyUtil.FUNCTION_KEYS[keyCode])\n            key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n        else if (!parts.length)\n            return {key: key, hashId: -1};\n        else if (parts.length == 1 && parts[0] == \"shift\")\n            return {key: key.toUpperCase(), hashId: -1};\n\n        var hashId = 0;\n        for (var i = parts.length; i--;) {\n            var modifier = keyUtil.KEY_MODS[parts[i]];\n            if (modifier == null) {\n                if (typeof console != \"undefined\")\n                    console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n                return false;\n            }\n            hashId |= modifier;\n        }\n        return {key: key, hashId: hashId};\n    };\n\n    this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n        var key = KEY_MODS[hashId] + keyString;\n        return this.commandKeyBinding[key];\n    };\n\n    this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n        if (keyCode < 0) return;\n        var key = KEY_MODS[hashId] + keyString;\n        var command = this.commandKeyBinding[key];\n        if (data.$keyChain) {\n            data.$keyChain += \" \" + key;\n            command = this.commandKeyBinding[data.$keyChain] || command;\n        }\n        \n        if (command) {\n            if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n                data.$keyChain = data.$keyChain || key;\n                return {command: \"null\"};\n            }\n        }\n        \n        if (data.$keyChain) {\n            if ((!hashId || hashId == 4) && keyString.length == 1)\n                data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n            else if (hashId == -1 || keyCode > 0)\n                data.$keyChain = \"\"; // reset keyChain\n        }\n        return {command: command};\n    };\n    \n    this.getStatusText = function(editor, data) {\n        return data.$keyChain || \"\";\n    };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n    MultiHashHandler.call(this, commands, platform);\n    this.byName = this.commands;\n    this.setDefaultHandler(\"exec\", function(e) {\n        return e.command.exec(e.editor, e.args || {});\n    });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.exec = function(command, editor, args) {\n        if (Array.isArray(command)) {\n            for (var i = command.length; i--; ) {\n                if (this.exec(command[i], editor, args)) return true;\n            }\n            return false;\n        }\n        \n        if (typeof command === \"string\")\n            command = this.commands[command];\n\n        if (!command)\n            return false;\n\n        if (editor && editor.$readOnly && !command.readOnly)\n            return false;\n\n        var e = {editor: editor, command: command, args: args};\n        e.returnValue = this._emit(\"exec\", e);\n        this._signal(\"afterExec\", e);\n\n        return e.returnValue === false ? false : true;\n    };\n\n    this.toggleRecording = function(editor) {\n        if (this.$inReplay)\n            return;\n\n        editor && editor._emit(\"changeStatus\");\n        if (this.recording) {\n            this.macro.pop();\n            this.removeEventListener(\"exec\", this.$addCommandToMacro);\n\n            if (!this.macro.length)\n                this.macro = this.oldMacro;\n\n            return this.recording = false;\n        }\n        if (!this.$addCommandToMacro) {\n            this.$addCommandToMacro = function(e) {\n                this.macro.push([e.command, e.args]);\n            }.bind(this);\n        }\n\n        this.oldMacro = this.macro;\n        this.macro = [];\n        this.on(\"exec\", this.$addCommandToMacro);\n        return this.recording = true;\n    };\n\n    this.replay = function(editor) {\n        if (this.$inReplay || !this.macro)\n            return;\n\n        if (this.recording)\n            return this.toggleRecording(editor);\n\n        try {\n            this.$inReplay = true;\n            this.macro.forEach(function(x) {\n                if (typeof x == \"string\")\n                    this.exec(x, editor);\n                else\n                    this.exec(x[0], editor, x[1]);\n            }, this);\n        } finally {\n            this.$inReplay = false;\n        }\n    };\n\n    this.trimMacro = function(m) {\n        return m.map(function(x){\n            if (typeof x[0] != \"string\")\n                x[0] = x[0].name;\n            if (!x[1])\n                x = x[0];\n            return x;\n        });\n    };\n\n}).call(CommandManager.prototype);\n\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\n\nfunction bindKey(win, mac) {\n    return {win: win, mac: mac};\n}\nexports.commands = [{\n    name: \"showSettingsMenu\",\n    bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/settings_menu\", function(module) {\n            module.init(editor);\n            editor.showSettingsMenu();\n        });\n    },\n    readOnly: true\n}, {\n    name: \"goToNextError\",\n    bindKey: bindKey(\"Alt-E\", \"F4\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/error_marker\", function(module) {\n            module.showErrorMarker(editor, 1);\n        });\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"goToPreviousError\",\n    bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/error_marker\", function(module) {\n            module.showErrorMarker(editor, -1);\n        });\n    },\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"selectall\",\n    bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n    exec: function(editor) { editor.selectAll(); },\n    readOnly: true\n}, {\n    name: \"centerselection\",\n    bindKey: bindKey(null, \"Ctrl-L\"),\n    exec: function(editor) { editor.centerSelection(); },\n    readOnly: true\n}, {\n    name: \"gotoline\",\n    bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n    exec: function(editor) {\n        var line = parseInt(prompt(\"Enter line number:\"), 10);\n        if (!isNaN(line)) {\n            editor.gotoLine(line);\n        }\n    },\n    readOnly: true\n}, {\n    name: \"fold\",\n    bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n    exec: function(editor) { editor.session.toggleFold(false); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"unfold\",\n    bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n    exec: function(editor) { editor.session.toggleFold(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"toggleFoldWidget\",\n    bindKey: bindKey(\"F2\", \"F2\"),\n    exec: function(editor) { editor.session.toggleFoldWidget(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"toggleParentFoldWidget\",\n    bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n    exec: function(editor) { editor.session.toggleFoldWidget(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"foldall\",\n    bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n    exec: function(editor) { editor.session.foldAll(); },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"foldOther\",\n    bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n    exec: function(editor) { \n        editor.session.foldAll();\n        editor.session.unfold(editor.selection.getAllRanges());\n    },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"unfoldall\",\n    bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n    exec: function(editor) { editor.session.unfold(); },\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"findnext\",\n    bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n    exec: function(editor) { editor.findNext(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"findprevious\",\n    bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n    exec: function(editor) { editor.findPrevious(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"center\",\n    readOnly: true\n}, {\n    name: \"selectOrFindNext\",\n    bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n    exec: function(editor) {\n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        else\n            editor.findNext(); \n    },\n    readOnly: true\n}, {\n    name: \"selectOrFindPrevious\",\n    bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n    exec: function(editor) { \n        if (editor.selection.isEmpty())\n            editor.selection.selectWord();\n        else\n            editor.findPrevious();\n    },\n    readOnly: true\n}, {\n    name: \"find\",\n    bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor)});\n    },\n    readOnly: true\n}, {\n    name: \"overwrite\",\n    bindKey: \"Insert\",\n    exec: function(editor) { editor.toggleOverwrite(); },\n    readOnly: true\n}, {\n    name: \"selecttostart\",\n    bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n    exec: function(editor) { editor.getSelection().selectFileStart(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"gotostart\",\n    bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n    exec: function(editor) { editor.navigateFileStart(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"selectup\",\n    bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n    exec: function(editor) { editor.getSelection().selectUp(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"golineup\",\n    bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n    exec: function(editor, args) { editor.navigateUp(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttoend\",\n    bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n    exec: function(editor) { editor.getSelection().selectFileEnd(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"gotoend\",\n    bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n    exec: function(editor) { editor.navigateFileEnd(); },\n    multiSelectAction: \"forEach\",\n    readOnly: true,\n    scrollIntoView: \"animate\",\n    aceCommandGroup: \"fileJump\"\n}, {\n    name: \"selectdown\",\n    bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n    exec: function(editor) { editor.getSelection().selectDown(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"golinedown\",\n    bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n    exec: function(editor, args) { editor.navigateDown(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectwordleft\",\n    bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n    exec: function(editor) { editor.getSelection().selectWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotowordleft\",\n    bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n    exec: function(editor) { editor.navigateWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttolinestart\",\n    bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n    exec: function(editor) { editor.getSelection().selectLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotolinestart\",\n    bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n    exec: function(editor) { editor.navigateLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectleft\",\n    bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n    exec: function(editor) { editor.getSelection().selectLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotoleft\",\n    bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n    exec: function(editor, args) { editor.navigateLeft(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectwordright\",\n    bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n    exec: function(editor) { editor.getSelection().selectWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotowordright\",\n    bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n    exec: function(editor) { editor.navigateWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selecttolineend\",\n    bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n    exec: function(editor) { editor.getSelection().selectLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotolineend\",\n    bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n    exec: function(editor) { editor.navigateLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectright\",\n    bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n    exec: function(editor) { editor.getSelection().selectRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"gotoright\",\n    bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n    exec: function(editor, args) { editor.navigateRight(args.times); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectpagedown\",\n    bindKey: \"Shift-PageDown\",\n    exec: function(editor) { editor.selectPageDown(); },\n    readOnly: true\n}, {\n    name: \"pagedown\",\n    bindKey: bindKey(null, \"Option-PageDown\"),\n    exec: function(editor) { editor.scrollPageDown(); },\n    readOnly: true\n}, {\n    name: \"gotopagedown\",\n    bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n    exec: function(editor) { editor.gotoPageDown(); },\n    readOnly: true\n}, {\n    name: \"selectpageup\",\n    bindKey: \"Shift-PageUp\",\n    exec: function(editor) { editor.selectPageUp(); },\n    readOnly: true\n}, {\n    name: \"pageup\",\n    bindKey: bindKey(null, \"Option-PageUp\"),\n    exec: function(editor) { editor.scrollPageUp(); },\n    readOnly: true\n}, {\n    name: \"gotopageup\",\n    bindKey: \"PageUp\",\n    exec: function(editor) { editor.gotoPageUp(); },\n    readOnly: true\n}, {\n    name: \"scrollup\",\n    bindKey: bindKey(\"Ctrl-Up\", null),\n    exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n    readOnly: true\n}, {\n    name: \"scrolldown\",\n    bindKey: bindKey(\"Ctrl-Down\", null),\n    exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n    readOnly: true\n}, {\n    name: \"selectlinestart\",\n    bindKey: \"Shift-Home\",\n    exec: function(editor) { editor.getSelection().selectLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectlineend\",\n    bindKey: \"Shift-End\",\n    exec: function(editor) { editor.getSelection().selectLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"togglerecording\",\n    bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n    exec: function(editor) { editor.commands.toggleRecording(editor); },\n    readOnly: true\n}, {\n    name: \"replaymacro\",\n    bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n    exec: function(editor) { editor.commands.replay(editor); },\n    readOnly: true\n}, {\n    name: \"jumptomatching\",\n    bindKey: bindKey(\"Ctrl-P\", \"Ctrl-P\"),\n    exec: function(editor) { editor.jumpToMatching(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"selecttomatching\",\n    bindKey: bindKey(\"Ctrl-Shift-P\", \"Ctrl-Shift-P\"),\n    exec: function(editor) { editor.jumpToMatching(true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"expandToMatching\",\n    bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n    exec: function(editor) { editor.jumpToMatching(true, true); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"animate\",\n    readOnly: true\n}, {\n    name: \"passKeysToBrowser\",\n    bindKey: bindKey(null, null),\n    exec: function() {},\n    passEvent: true,\n    readOnly: true\n}, {\n    name: \"copy\",\n    exec: function(editor) {\n    },\n    readOnly: true\n},\n{\n    name: \"cut\",\n    exec: function(editor) {\n        var range = editor.getSelectionRange();\n        editor._emit(\"cut\", range);\n\n        if (!editor.selection.isEmpty()) {\n            editor.session.remove(range);\n            editor.clearSelection();\n        }\n    },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"paste\",\n    exec: function(editor, args) {\n        editor.$handlePaste(args);\n    },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removeline\",\n    bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n    exec: function(editor) { editor.removeLines(); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEachLine\"\n}, {\n    name: \"duplicateSelection\",\n    bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n    exec: function(editor) { editor.duplicateSelection(); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"sortlines\",\n    bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n    exec: function(editor) { editor.sortLines(); },\n    scrollIntoView: \"selection\",\n    multiSelectAction: \"forEachLine\"\n}, {\n    name: \"togglecomment\",\n    bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n    exec: function(editor) { editor.toggleCommentLines(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"toggleBlockComment\",\n    bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n    exec: function(editor) { editor.toggleBlockComment(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"modifyNumberUp\",\n    bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n    exec: function(editor) { editor.modifyNumber(1); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"modifyNumberDown\",\n    bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n    exec: function(editor) { editor.modifyNumber(-1); },\n    scrollIntoView: \"cursor\",\n    multiSelectAction: \"forEach\"\n}, {\n    name: \"replace\",\n    bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n    exec: function(editor) {\n        config.loadModule(\"ace/ext/searchbox\", function(e) {e.Search(editor, true)});\n    }\n}, {\n    name: \"undo\",\n    bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n    exec: function(editor) { editor.undo(); }\n}, {\n    name: \"redo\",\n    bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n    exec: function(editor) { editor.redo(); }\n}, {\n    name: \"copylinesup\",\n    bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n    exec: function(editor) { editor.copyLinesUp(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"movelinesup\",\n    bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n    exec: function(editor) { editor.moveLinesUp(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"copylinesdown\",\n    bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n    exec: function(editor) { editor.copyLinesDown(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"movelinesdown\",\n    bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n    exec: function(editor) { editor.moveLinesDown(); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"del\",\n    bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n    exec: function(editor) { editor.remove(\"right\"); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"backspace\",\n    bindKey: bindKey(\n        \"Shift-Backspace|Backspace\",\n        \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n    ),\n    exec: function(editor) { editor.remove(\"left\"); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"cut_or_delete\",\n    bindKey: bindKey(\"Shift-Delete\", null),\n    exec: function(editor) { \n        if (editor.selection.isEmpty()) {\n            editor.remove(\"left\");\n        } else {\n            return false;\n        }\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolinestart\",\n    bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n    exec: function(editor) { editor.removeToLineStart(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removetolineend\",\n    bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K\"),\n    exec: function(editor) { editor.removeToLineEnd(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removewordleft\",\n    bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n    exec: function(editor) { editor.removeWordLeft(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"removewordright\",\n    bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n    exec: function(editor) { editor.removeWordRight(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"outdent\",\n    bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n    exec: function(editor) { editor.blockOutdent(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"indent\",\n    bindKey: bindKey(\"Tab\", \"Tab\"),\n    exec: function(editor) { editor.indent(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"blockoutdent\",\n    bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n    exec: function(editor) { editor.blockOutdent(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"blockindent\",\n    bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n    exec: function(editor) { editor.blockIndent(); },\n    multiSelectAction: \"forEachLine\",\n    scrollIntoView: \"selectionPart\"\n}, {\n    name: \"insertstring\",\n    exec: function(editor, str) { editor.insert(str); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"inserttext\",\n    exec: function(editor, args) {\n        editor.insert(lang.stringRepeat(args.text  || \"\", args.times || 1));\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"splitline\",\n    bindKey: bindKey(null, \"Ctrl-O\"),\n    exec: function(editor) { editor.splitLine(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"transposeletters\",\n    bindKey: bindKey(\"Ctrl-T\", \"Ctrl-T\"),\n    exec: function(editor) { editor.transposeLetters(); },\n    multiSelectAction: function(editor) {editor.transposeSelections(1); },\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"touppercase\",\n    bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n    exec: function(editor) { editor.toUpperCase(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"tolowercase\",\n    bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n    exec: function(editor) { editor.toLowerCase(); },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"expandtoline\",\n    bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n    exec: function(editor) {\n        var range = editor.selection.getRange();\n\n        range.start.column = range.end.column = 0;\n        range.end.row++;\n        editor.selection.setRange(range, false);\n    },\n    multiSelectAction: \"forEach\",\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"joinlines\",\n    bindKey: bindKey(null, null),\n    exec: function(editor) {\n        var isBackwards = editor.selection.isBackwards();\n        var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n        var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n        var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n        var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n        var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n        var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n        for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n            var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n            if (curLine.length !== 0) {\n                curLine = \" \" + curLine;\n            }\n            insertLine += curLine;\n        }\n\n        if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n            insertLine += editor.session.doc.getNewLineCharacter();\n        }\n\n        editor.clearSelection();\n        editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n        if (selectedCount > 0) {\n            editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n            editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n        } else {\n            firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n            editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n        }\n    },\n    multiSelectAction: \"forEach\",\n    readOnly: true\n}, {\n    name: \"invertSelection\",\n    bindKey: bindKey(null, null),\n    exec: function(editor) {\n        var endRow = editor.session.doc.getLength() - 1;\n        var endCol = editor.session.doc.getLine(endRow).length;\n        var ranges = editor.selection.rangeList.ranges;\n        var newRanges = [];\n        if (ranges.length < 1) {\n            ranges = [editor.selection.getRange()];\n        }\n\n        for (var i = 0; i < ranges.length; i++) {\n            if (i == (ranges.length - 1)) {\n                if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n                    newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n                }\n            }\n\n            if (i === 0) {\n                if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n                    newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n                }\n            } else {\n                newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column));\n            }\n        }\n\n        editor.exitMultiSelectMode();\n        editor.clearSelection();\n\n        for(var i = 0; i < newRanges.length; i++) {\n            editor.selection.addRange(newRanges[i], false);\n        }\n    },\n    readOnly: true,\n    scrollIntoView: \"none\"\n}];\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar Editor = function(renderer, session) {\n    var container = renderer.getContainerElement();\n    this.container = container;\n    this.renderer = renderer;\n\n    this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n    this.textInput  = new TextInput(renderer.getTextAreaContainer(), this);\n    this.renderer.textarea = this.textInput.getElement();\n    this.keyBinding = new KeyBinding(this);\n    this.$mouseHandler = new MouseHandler(this);\n    new FoldHandler(this);\n\n    this.$blockScrolling = 0;\n    this.$search = new Search().set({\n        wrap: true\n    });\n\n    this.$historyTracker = this.$historyTracker.bind(this);\n    this.commands.on(\"exec\", this.$historyTracker);\n\n    this.$initOperationListeners();\n    \n    this._$emitInputEvent = lang.delayedCall(function() {\n        this._signal(\"input\", {});\n        if (this.session && this.session.bgTokenizer)\n            this.session.bgTokenizer.scheduleStart();\n    }.bind(this));\n    \n    this.on(\"change\", function(_, _self) {\n        _self._$emitInputEvent.schedule(31);\n    });\n\n    this.setSession(session || new EditSession(\"\"));\n    config.resetOptions(this);\n    config._signal(\"editor\", this);\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.$initOperationListeners = function() {\n        function last(a) {return a[a.length - 1]}\n\n        this.selections = [];\n        this.commands.on(\"exec\", this.startOperation.bind(this), true);\n        this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\n        this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this));\n\n        this.on(\"change\", function() {\n            this.curOp || this.startOperation();\n            this.curOp.docChanged = true;\n        }.bind(this), true);\n\n        this.on(\"changeSelection\", function() {\n            this.curOp || this.startOperation();\n            this.curOp.selectionChanged = true;\n        }.bind(this), true);\n    };\n\n    this.curOp = null;\n    this.prevOp = {};\n    this.startOperation = function(commadEvent) {\n        if (this.curOp) {\n            if (!commadEvent || this.curOp.command)\n                return;\n            this.prevOp = this.curOp;\n        }\n        if (!commadEvent) {\n            this.previousCommand = null;\n            commadEvent = {};\n        }\n\n        this.$opResetTimer.schedule();\n        this.curOp = {\n            command: commadEvent.command || {},\n            args: commadEvent.args,\n            scrollTop: this.renderer.scrollTop\n        };\n        if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined)\n            this.$blockScrolling++;\n    };\n\n    this.endOperation = function(e) {\n        if (this.curOp) {\n            if (e && e.returnValue === false)\n                return this.curOp = null;\n            this._signal(\"beforeEndOperation\");\n            var command = this.curOp.command;\n            if (command.name && this.$blockScrolling > 0)\n                this.$blockScrolling--;\n            var scrollIntoView = command && command.scrollIntoView;\n            if (scrollIntoView) {\n                switch (scrollIntoView) {\n                    case \"center-animate\":\n                        scrollIntoView = \"animate\";\n                    case \"center\":\n                        this.renderer.scrollCursorIntoView(null, 0.5);\n                        break;\n                    case \"animate\":\n                    case \"cursor\":\n                        this.renderer.scrollCursorIntoView();\n                        break;\n                    case \"selectionPart\":\n                        var range = this.selection.getRange();\n                        var config = this.renderer.layerConfig;\n                        if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n                            this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n                        }\n                        break;\n                    default:\n                        break;\n                }\n                if (scrollIntoView == \"animate\")\n                    this.renderer.animateScrolling(this.curOp.scrollTop);\n            }\n            \n            this.prevOp = this.curOp;\n            this.curOp = null;\n        }\n    };\n    this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n    this.$historyTracker = function(e) {\n        if (!this.$mergeUndoDeltas)\n            return;\n\n        var prev = this.prevOp;\n        var mergeableCommands = this.$mergeableCommands;\n        var shouldMerge = prev.command && (e.command.name == prev.command.name);\n        if (e.command.name == \"insertstring\") {\n            var text = e.args;\n            if (this.mergeNextCommand === undefined)\n                this.mergeNextCommand = true;\n\n            shouldMerge = shouldMerge\n                && this.mergeNextCommand // previous command allows to coalesce with\n                && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n            this.mergeNextCommand = true;\n        } else {\n            shouldMerge = shouldMerge\n                && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n        }\n\n        if (\n            this.$mergeUndoDeltas != \"always\"\n            && Date.now() - this.sequenceStartTime > 2000\n        ) {\n            shouldMerge = false; // the sequence is too long\n        }\n\n        if (shouldMerge)\n            this.session.mergeUndoDeltas = true;\n        else if (mergeableCommands.indexOf(e.command.name) !== -1)\n            this.sequenceStartTime = Date.now();\n    };\n    this.setKeyboardHandler = function(keyboardHandler, cb) {\n        if (keyboardHandler && typeof keyboardHandler === \"string\") {\n            this.$keybindingId = keyboardHandler;\n            var _self = this;\n            config.loadModule([\"keybinding\", keyboardHandler], function(module) {\n                if (_self.$keybindingId == keyboardHandler)\n                    _self.keyBinding.setKeyboardHandler(module && module.handler);\n                cb && cb();\n            });\n        } else {\n            this.$keybindingId = null;\n            this.keyBinding.setKeyboardHandler(keyboardHandler);\n            cb && cb();\n        }\n    };\n    this.getKeyboardHandler = function() {\n        return this.keyBinding.getKeyboardHandler();\n    };\n    this.setSession = function(session) {\n        if (this.session == session)\n            return;\n        if (this.curOp) this.endOperation();\n        this.curOp = {};\n\n        var oldSession = this.session;\n        if (oldSession) {\n            this.session.off(\"change\", this.$onDocumentChange);\n            this.session.off(\"changeMode\", this.$onChangeMode);\n            this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n            this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n            this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n            this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n            this.session.off(\"changeFold\", this.$onChangeFold);\n            this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n            this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n            this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n            this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n            this.session.off(\"changeOverwrite\", this.$onCursorChange);\n            this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n            this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n\n            var selection = this.session.getSelection();\n            selection.off(\"changeCursor\", this.$onCursorChange);\n            selection.off(\"changeSelection\", this.$onSelectionChange);\n        }\n\n        this.session = session;\n        if (session) {\n            this.$onDocumentChange = this.onDocumentChange.bind(this);\n            session.on(\"change\", this.$onDocumentChange);\n            this.renderer.setSession(session);\n    \n            this.$onChangeMode = this.onChangeMode.bind(this);\n            session.on(\"changeMode\", this.$onChangeMode);\n    \n            this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n            session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n    \n            this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n            session.on(\"changeTabSize\", this.$onChangeTabSize);\n    \n            this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n            session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n    \n            this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n            session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n    \n            this.$onChangeFold = this.onChangeFold.bind(this);\n            session.on(\"changeFold\", this.$onChangeFold);\n    \n            this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n            this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n    \n            this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n            this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n    \n            this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n            this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n    \n            this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n            this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n    \n            this.$onCursorChange = this.onCursorChange.bind(this);\n            this.session.on(\"changeOverwrite\", this.$onCursorChange);\n    \n            this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n            this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n    \n            this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n            this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n    \n            this.selection = session.getSelection();\n            this.selection.on(\"changeCursor\", this.$onCursorChange);\n    \n            this.$onSelectionChange = this.onSelectionChange.bind(this);\n            this.selection.on(\"changeSelection\", this.$onSelectionChange);\n    \n            this.onChangeMode();\n    \n            this.$blockScrolling += 1;\n            this.onCursorChange();\n            this.$blockScrolling -= 1;\n    \n            this.onScrollTopChange();\n            this.onScrollLeftChange();\n            this.onSelectionChange();\n            this.onChangeFrontMarker();\n            this.onChangeBackMarker();\n            this.onChangeBreakpoint();\n            this.onChangeAnnotation();\n            this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n            this.renderer.updateFull();\n        } else {\n            this.selection = null;\n            this.renderer.setSession(session);\n        }\n\n        this._signal(\"changeSession\", {\n            session: session,\n            oldSession: oldSession\n        });\n        \n        this.curOp = null;\n        \n        oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n        session && session._signal(\"changeEditor\", {editor: this});\n    };\n    this.getSession = function() {\n        return this.session;\n    };\n    this.setValue = function(val, cursorPos) {\n        this.session.doc.setValue(val);\n\n        if (!cursorPos)\n            this.selectAll();\n        else if (cursorPos == 1)\n            this.navigateFileEnd();\n        else if (cursorPos == -1)\n            this.navigateFileStart();\n\n        return val;\n    };\n    this.getValue = function() {\n        return this.session.getValue();\n    };\n    this.getSelection = function() {\n        return this.selection;\n    };\n    this.resize = function(force) {\n        this.renderer.onResize(force);\n    };\n    this.setTheme = function(theme, cb) {\n        this.renderer.setTheme(theme, cb);\n    };\n    this.getTheme = function() {\n        return this.renderer.getTheme();\n    };\n    this.setStyle = function(style) {\n        this.renderer.setStyle(style);\n    };\n    this.unsetStyle = function(style) {\n        this.renderer.unsetStyle(style);\n    };\n    this.getFontSize = function () {\n        return this.getOption(\"fontSize\") ||\n           dom.computedStyle(this.container, \"fontSize\");\n    };\n    this.setFontSize = function(size) {\n        this.setOption(\"fontSize\", size);\n    };\n\n    this.$highlightBrackets = function() {\n        if (this.session.$bracketHighlight) {\n            this.session.removeMarker(this.session.$bracketHighlight);\n            this.session.$bracketHighlight = null;\n        }\n\n        if (this.$highlightPending) {\n            return;\n        }\n        var self = this;\n        this.$highlightPending = true;\n        setTimeout(function() {\n            self.$highlightPending = false;\n            var session = self.session;\n            if (!session || !session.bgTokenizer) return;\n            var pos = session.findMatchingBracket(self.getCursorPosition());\n            if (pos) {\n                var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);\n            } else if (session.$mode.getMatching) {\n                var range = session.$mode.getMatching(self.session);\n            }\n            if (range)\n                session.$bracketHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n        }, 50);\n    };\n    this.$highlightTags = function() {\n        if (this.$highlightTagPending)\n            return;\n        var self = this;\n        this.$highlightTagPending = true;\n        setTimeout(function() {\n            self.$highlightTagPending = false;\n            \n            var session = self.session;\n            if (!session || !session.bgTokenizer) return;\n            \n            var pos = self.getCursorPosition();\n            var iterator = new TokenIterator(self.session, pos.row, pos.column);\n            var token = iterator.getCurrentToken();\n            \n            if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n                return;\n            }\n            \n            if (token.type.indexOf(\"tag-open\") != -1) {\n                token = iterator.stepForward();\n                if (!token)\n                    return;\n            }\n            \n            var tag = token.value;\n            var depth = 0;\n            var prevToken = iterator.stepBackward();\n            \n            if (prevToken.value == '<'){\n                do {\n                    prevToken = token;\n                    token = iterator.stepForward();\n                    \n                    if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                        if (prevToken.value === '<'){\n                            depth++;\n                        } else if (prevToken.value === '</'){\n                            depth--;\n                        }\n                    }\n                    \n                } while (token && depth >= 0);\n            } else {\n                do {\n                    token = prevToken;\n                    prevToken = iterator.stepBackward();\n                    \n                    if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                        if (prevToken.value === '<') {\n                            depth++;\n                        } else if (prevToken.value === '</') {\n                            depth--;\n                        }\n                    }\n                } while (prevToken && depth <= 0);\n                iterator.stepForward();\n            }\n            \n            if (!token) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n                return;\n            }\n            \n            var row = iterator.getCurrentTokenRow();\n            var column = iterator.getCurrentTokenColumn();\n            var range = new Range(row, column, row, column+token.value.length);\n            var sbm = session.$backMarkers[session.$tagHighlight];\n            if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n                session.removeMarker(session.$tagHighlight);\n                session.$tagHighlight = null;\n            }\n            \n            if (range && !session.$tagHighlight)\n                session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n        }, 50);\n    };\n    this.focus = function() {\n        var _self = this;\n        setTimeout(function() {\n            _self.textInput.focus();\n        });\n        this.textInput.focus();\n    };\n    this.isFocused = function() {\n        return this.textInput.isFocused();\n    };\n    this.blur = function() {\n        this.textInput.blur();\n    };\n    this.onFocus = function(e) {\n        if (this.$isFocused)\n            return;\n        this.$isFocused = true;\n        this.renderer.showCursor();\n        this.renderer.visualizeFocus();\n        this._emit(\"focus\", e);\n    };\n    this.onBlur = function(e) {\n        if (!this.$isFocused)\n            return;\n        this.$isFocused = false;\n        this.renderer.hideCursor();\n        this.renderer.visualizeBlur();\n        this._emit(\"blur\", e);\n    };\n\n    this.$cursorChange = function() {\n        this.renderer.updateCursor();\n    };\n    this.onDocumentChange = function(delta) {\n        var wrap = this.session.$useWrapMode;\n        var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n        this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n        this._signal(\"change\", delta);\n        this.$cursorChange();\n        this.$updateHighlightActiveLine();\n    };\n\n    this.onTokenizerUpdate = function(e) {\n        var rows = e.data;\n        this.renderer.updateLines(rows.first, rows.last);\n    };\n\n\n    this.onScrollTopChange = function() {\n        this.renderer.scrollToY(this.session.getScrollTop());\n    };\n\n    this.onScrollLeftChange = function() {\n        this.renderer.scrollToX(this.session.getScrollLeft());\n    };\n    this.onCursorChange = function() {\n        this.$cursorChange();\n\n        if (!this.$blockScrolling) {\n            config.warn(\"Automatically scrolling cursor into view after selection change\",\n                \"this will be disabled in the next version\",\n                \"set editor.$blockScrolling = Infinity to disable this message\"\n            );\n            this.renderer.scrollCursorIntoView();\n        }\n\n        this.$highlightBrackets();\n        this.$highlightTags();\n        this.$updateHighlightActiveLine();\n        this._signal(\"changeSelection\");\n    };\n\n    this.$updateHighlightActiveLine = function() {\n        var session = this.getSession();\n\n        var highlight;\n        if (this.$highlightActiveLine) {\n            if ((this.$selectionStyle != \"line\" || !this.selection.isMultiLine()))\n                highlight = this.getCursorPosition();\n            if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n                highlight = false;\n        }\n\n        if (session.$highlightLineMarker && !highlight) {\n            session.removeMarker(session.$highlightLineMarker.id);\n            session.$highlightLineMarker = null;\n        } else if (!session.$highlightLineMarker && highlight) {\n            var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n            range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n            session.$highlightLineMarker = range;\n        } else if (highlight) {\n            session.$highlightLineMarker.start.row = highlight.row;\n            session.$highlightLineMarker.end.row = highlight.row;\n            session.$highlightLineMarker.start.column = highlight.column;\n            session._signal(\"changeBackMarker\");\n        }\n    };\n\n    this.onSelectionChange = function(e) {\n        var session = this.session;\n\n        if (session.$selectionMarker) {\n            session.removeMarker(session.$selectionMarker);\n        }\n        session.$selectionMarker = null;\n\n        if (!this.selection.isEmpty()) {\n            var range = this.selection.getRange();\n            var style = this.getSelectionStyle();\n            session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n        } else {\n            this.$updateHighlightActiveLine();\n        }\n\n        var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n        this.session.highlight(re);\n\n        this._signal(\"changeSelection\");\n    };\n\n    this.$getSelectionHighLightRegexp = function() {\n        var session = this.session;\n\n        var selection = this.getSelectionRange();\n        if (selection.isEmpty() || selection.isMultiLine())\n            return;\n\n        var startOuter = selection.start.column - 1;\n        var endOuter = selection.end.column + 1;\n        var line = session.getLine(selection.start.row);\n        var lineCols = line.length;\n        var needle = line.substring(Math.max(startOuter, 0),\n                                    Math.min(endOuter, lineCols));\n        if ((startOuter >= 0 && /^[\\w\\d]/.test(needle)) ||\n            (endOuter <= lineCols && /[\\w\\d]$/.test(needle)))\n            return;\n\n        needle = line.substring(selection.start.column, selection.end.column);\n        if (!/^[\\w\\d]+$/.test(needle))\n            return;\n\n        var re = this.$search.$assembleRegExp({\n            wholeWord: true,\n            caseSensitive: true,\n            needle: needle\n        });\n\n        return re;\n    };\n\n\n    this.onChangeFrontMarker = function() {\n        this.renderer.updateFrontMarkers();\n    };\n\n    this.onChangeBackMarker = function() {\n        this.renderer.updateBackMarkers();\n    };\n\n\n    this.onChangeBreakpoint = function() {\n        this.renderer.updateBreakpoints();\n    };\n\n    this.onChangeAnnotation = function() {\n        this.renderer.setAnnotations(this.session.getAnnotations());\n    };\n\n\n    this.onChangeMode = function(e) {\n        this.renderer.updateText();\n        this._emit(\"changeMode\", e);\n    };\n\n\n    this.onChangeWrapLimit = function() {\n        this.renderer.updateFull();\n    };\n\n    this.onChangeWrapMode = function() {\n        this.renderer.onResize(true);\n    };\n\n\n    this.onChangeFold = function() {\n        this.$updateHighlightActiveLine();\n        this.renderer.updateFull();\n    };\n    this.getSelectedText = function() {\n        return this.session.getTextRange(this.getSelectionRange());\n    };\n    this.getCopyText = function() {\n        var text = this.getSelectedText();\n        this._signal(\"copy\", text);\n        return text;\n    };\n    this.onCopy = function() {\n        this.commands.exec(\"copy\", this);\n    };\n    this.onCut = function() {\n        this.commands.exec(\"cut\", this);\n    };\n    this.onPaste = function(text, event) {\n        var e = {text: text, event: event};\n        this.commands.exec(\"paste\", this, e);\n    };\n    \n    this.$handlePaste = function(e) {\n        if (typeof e == \"string\") \n            e = {text: e};\n        this._signal(\"paste\", e);\n        var text = e.text;\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n            this.insert(text);\n        } else {\n            var lines = text.split(/\\r\\n|\\r|\\n/);\n            var ranges = this.selection.rangeList.ranges;\n    \n            if (lines.length > ranges.length || lines.length < 2 || !lines[1])\n                return this.commands.exec(\"insertstring\", this, text);\n    \n            for (var i = ranges.length; i--;) {\n                var range = ranges[i];\n                if (!range.isEmpty())\n                    this.session.remove(range);\n    \n                this.session.insert(range.start, lines[i]);\n            }\n        }\n    };\n\n    this.execCommand = function(command, args) {\n        return this.commands.exec(command, this, args);\n    };\n    this.insert = function(text, pasted) {\n        var session = this.session;\n        var mode = session.getMode();\n        var cursor = this.getCursorPosition();\n\n        if (this.getBehavioursEnabled() && !pasted) {\n            var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n            if (transform) {\n                if (text !== transform.text) {\n                    this.session.mergeUndoDeltas = false;\n                    this.$mergeNextCommand = false;\n                }\n                text = transform.text;\n\n            }\n        }\n        \n        if (text == \"\\t\")\n            text = this.session.getTabString();\n        if (!this.selection.isEmpty()) {\n            var range = this.getSelectionRange();\n            cursor = this.session.remove(range);\n            this.clearSelection();\n        }\n        else if (this.session.getOverwrite()) {\n            var range = new Range.fromPoints(cursor, cursor);\n            range.end.column += text.length;\n            this.session.remove(range);\n        }\n\n        if (text == \"\\n\" || text == \"\\r\\n\") {\n            var line = session.getLine(cursor.row);\n            if (cursor.column > line.search(/\\S|$/)) {\n                var d = line.substr(cursor.column).search(/\\S|$/);\n                session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n            }\n        }\n        this.clearSelection();\n\n        var start = cursor.column;\n        var lineState = session.getState(cursor.row);\n        var line = session.getLine(cursor.row);\n        var shouldOutdent = mode.checkOutdent(lineState, line, text);\n        var end = session.insert(cursor, text);\n\n        if (transform && transform.selection) {\n            if (transform.selection.length == 2) { // Transform relative to the current column\n                this.selection.setSelectionRange(\n                    new Range(cursor.row, start + transform.selection[0],\n                              cursor.row, start + transform.selection[1]));\n            } else { // Transform relative to the current row.\n                this.selection.setSelectionRange(\n                    new Range(cursor.row + transform.selection[0],\n                              transform.selection[1],\n                              cursor.row + transform.selection[2],\n                              transform.selection[3]));\n            }\n        }\n\n        if (session.getDocument().isNewLine(text)) {\n            var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n\n            session.insert({row: cursor.row+1, column: 0}, lineIndent);\n        }\n        if (shouldOutdent)\n            mode.autoOutdent(lineState, session, cursor.row);\n    };\n\n    this.onTextInput = function(text) {\n        this.keyBinding.onTextInput(text);\n    };\n\n    this.onCommandKey = function(e, hashId, keyCode) {\n        this.keyBinding.onCommandKey(e, hashId, keyCode);\n    };\n    this.setOverwrite = function(overwrite) {\n        this.session.setOverwrite(overwrite);\n    };\n    this.getOverwrite = function() {\n        return this.session.getOverwrite();\n    };\n    this.toggleOverwrite = function() {\n        this.session.toggleOverwrite();\n    };\n    this.setScrollSpeed = function(speed) {\n        this.setOption(\"scrollSpeed\", speed);\n    };\n    this.getScrollSpeed = function() {\n        return this.getOption(\"scrollSpeed\");\n    };\n    this.setDragDelay = function(dragDelay) {\n        this.setOption(\"dragDelay\", dragDelay);\n    };\n    this.getDragDelay = function() {\n        return this.getOption(\"dragDelay\");\n    };\n    this.setSelectionStyle = function(val) {\n        this.setOption(\"selectionStyle\", val);\n    };\n    this.getSelectionStyle = function() {\n        return this.getOption(\"selectionStyle\");\n    };\n    this.setHighlightActiveLine = function(shouldHighlight) {\n        this.setOption(\"highlightActiveLine\", shouldHighlight);\n    };\n    this.getHighlightActiveLine = function() {\n        return this.getOption(\"highlightActiveLine\");\n    };\n    this.setHighlightGutterLine = function(shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n\n    this.getHighlightGutterLine = function() {\n        return this.getOption(\"highlightGutterLine\");\n    };\n    this.setHighlightSelectedWord = function(shouldHighlight) {\n        this.setOption(\"highlightSelectedWord\", shouldHighlight);\n    };\n    this.getHighlightSelectedWord = function() {\n        return this.$highlightSelectedWord;\n    };\n\n    this.setAnimatedScroll = function(shouldAnimate){\n        this.renderer.setAnimatedScroll(shouldAnimate);\n    };\n\n    this.getAnimatedScroll = function(){\n        return this.renderer.getAnimatedScroll();\n    };\n    this.setShowInvisibles = function(showInvisibles) {\n        this.renderer.setShowInvisibles(showInvisibles);\n    };\n    this.getShowInvisibles = function() {\n        return this.renderer.getShowInvisibles();\n    };\n\n    this.setDisplayIndentGuides = function(display) {\n        this.renderer.setDisplayIndentGuides(display);\n    };\n\n    this.getDisplayIndentGuides = function() {\n        return this.renderer.getDisplayIndentGuides();\n    };\n    this.setShowPrintMargin = function(showPrintMargin) {\n        this.renderer.setShowPrintMargin(showPrintMargin);\n    };\n    this.getShowPrintMargin = function() {\n        return this.renderer.getShowPrintMargin();\n    };\n    this.setPrintMarginColumn = function(showPrintMargin) {\n        this.renderer.setPrintMarginColumn(showPrintMargin);\n    };\n    this.getPrintMarginColumn = function() {\n        return this.renderer.getPrintMarginColumn();\n    };\n    this.setReadOnly = function(readOnly) {\n        this.setOption(\"readOnly\", readOnly);\n    };\n    this.getReadOnly = function() {\n        return this.getOption(\"readOnly\");\n    };\n    this.setBehavioursEnabled = function (enabled) {\n        this.setOption(\"behavioursEnabled\", enabled);\n    };\n    this.getBehavioursEnabled = function () {\n        return this.getOption(\"behavioursEnabled\");\n    };\n    this.setWrapBehavioursEnabled = function (enabled) {\n        this.setOption(\"wrapBehavioursEnabled\", enabled);\n    };\n    this.getWrapBehavioursEnabled = function () {\n        return this.getOption(\"wrapBehavioursEnabled\");\n    };\n    this.setShowFoldWidgets = function(show) {\n        this.setOption(\"showFoldWidgets\", show);\n\n    };\n    this.getShowFoldWidgets = function() {\n        return this.getOption(\"showFoldWidgets\");\n    };\n\n    this.setFadeFoldWidgets = function(fade) {\n        this.setOption(\"fadeFoldWidgets\", fade);\n    };\n\n    this.getFadeFoldWidgets = function() {\n        return this.getOption(\"fadeFoldWidgets\");\n    };\n    this.remove = function(dir) {\n        if (this.selection.isEmpty()){\n            if (dir == \"left\")\n                this.selection.selectLeft();\n            else\n                this.selection.selectRight();\n        }\n\n        var range = this.getSelectionRange();\n        if (this.getBehavioursEnabled()) {\n            var session = this.session;\n            var state = session.getState(range.start.row);\n            var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n            if (range.end.column === 0) {\n                var text = session.getTextRange(range);\n                if (text[text.length - 1] == \"\\n\") {\n                    var line = session.getLine(range.end.row);\n                    if (/^\\s+$/.test(line)) {\n                        range.end.column = line.length;\n                    }\n                }\n            }\n            if (new_range)\n                range = new_range;\n        }\n\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    this.removeWordRight = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectWordRight();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeWordLeft = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectWordLeft();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeToLineStart = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectLineStart();\n\n        this.session.remove(this.getSelectionRange());\n        this.clearSelection();\n    };\n    this.removeToLineEnd = function() {\n        if (this.selection.isEmpty())\n            this.selection.selectLineEnd();\n\n        var range = this.getSelectionRange();\n        if (range.start.column == range.end.column && range.start.row == range.end.row) {\n            range.end.column = 0;\n            range.end.row++;\n        }\n\n        this.session.remove(range);\n        this.clearSelection();\n    };\n    this.splitLine = function() {\n        if (!this.selection.isEmpty()) {\n            this.session.remove(this.getSelectionRange());\n            this.clearSelection();\n        }\n\n        var cursor = this.getCursorPosition();\n        this.insert(\"\\n\");\n        this.moveCursorToPosition(cursor);\n    };\n    this.transposeLetters = function() {\n        if (!this.selection.isEmpty()) {\n            return;\n        }\n\n        var cursor = this.getCursorPosition();\n        var column = cursor.column;\n        if (column === 0)\n            return;\n\n        var line = this.session.getLine(cursor.row);\n        var swap, range;\n        if (column < line.length) {\n            swap = line.charAt(column) + line.charAt(column-1);\n            range = new Range(cursor.row, column-1, cursor.row, column+1);\n        }\n        else {\n            swap = line.charAt(column-1) + line.charAt(column-2);\n            range = new Range(cursor.row, column-2, cursor.row, column);\n        }\n        this.session.replace(range, swap);\n    };\n    this.toLowerCase = function() {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toLowerCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    this.toUpperCase = function() {\n        var originalRange = this.getSelectionRange();\n        if (this.selection.isEmpty()) {\n            this.selection.selectWord();\n        }\n\n        var range = this.getSelectionRange();\n        var text = this.session.getTextRange(range);\n        this.session.replace(range, text.toUpperCase());\n        this.selection.setSelectionRange(originalRange);\n    };\n    this.indent = function() {\n        var session = this.session;\n        var range = this.getSelectionRange();\n\n        if (range.start.row < range.end.row) {\n            var rows = this.$getSelectedRows();\n            session.indentRows(rows.first, rows.last, \"\\t\");\n            return;\n        } else if (range.start.column < range.end.column) {\n            var text = session.getTextRange(range);\n            if (!/^\\s+$/.test(text)) {\n                var rows = this.$getSelectedRows();\n                session.indentRows(rows.first, rows.last, \"\\t\");\n                return;\n            }\n        }\n        \n        var line = session.getLine(range.start.row);\n        var position = range.start;\n        var size = session.getTabSize();\n        var column = session.documentToScreenColumn(position.row, position.column);\n\n        if (this.session.getUseSoftTabs()) {\n            var count = (size - column % size);\n            var indentString = lang.stringRepeat(\" \", count);\n        } else {\n            var count = column % size;\n            while (line[range.start.column - 1] == \" \" && count) {\n                range.start.column--;\n                count--;\n            }\n            this.selection.setSelectionRange(range);\n            indentString = \"\\t\";\n        }\n        return this.insert(indentString);\n    };\n    this.blockIndent = function() {\n        var rows = this.$getSelectedRows();\n        this.session.indentRows(rows.first, rows.last, \"\\t\");\n    };\n    this.blockOutdent = function() {\n        var selection = this.session.getSelection();\n        this.session.outdentRows(selection.getRange());\n    };\n    this.sortLines = function() {\n        var rows = this.$getSelectedRows();\n        var session = this.session;\n\n        var lines = [];\n        for (i = rows.first; i <= rows.last; i++)\n            lines.push(session.getLine(i));\n\n        lines.sort(function(a, b) {\n            if (a.toLowerCase() < b.toLowerCase()) return -1;\n            if (a.toLowerCase() > b.toLowerCase()) return 1;\n            return 0;\n        });\n\n        var deleteRange = new Range(0, 0, 0, 0);\n        for (var i = rows.first; i <= rows.last; i++) {\n            var line = session.getLine(i);\n            deleteRange.start.row = i;\n            deleteRange.end.row = i;\n            deleteRange.end.column = line.length;\n            session.replace(deleteRange, lines[i-rows.first]);\n        }\n    };\n    this.toggleCommentLines = function() {\n        var state = this.session.getState(this.getCursorPosition().row);\n        var rows = this.$getSelectedRows();\n        this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n    };\n\n    this.toggleBlockComment = function() {\n        var cursor = this.getCursorPosition();\n        var state = this.session.getState(cursor.row);\n        var range = this.getSelectionRange();\n        this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n    };\n    this.getNumberAt = function(row, column) {\n        var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n        _numberRx.lastIndex = 0;\n\n        var s = this.session.getLine(row);\n        while (_numberRx.lastIndex < column) {\n            var m = _numberRx.exec(s);\n            if(m.index <= column && m.index+m[0].length >= column){\n                var number = {\n                    value: m[0],\n                    start: m.index,\n                    end: m.index+m[0].length\n                };\n                return number;\n            }\n        }\n        return null;\n    };\n    this.modifyNumber = function(amount) {\n        var row = this.selection.getCursor().row;\n        var column = this.selection.getCursor().column;\n        var charRange = new Range(row, column-1, row, column);\n\n        var c = this.session.getTextRange(charRange);\n        if (!isNaN(parseFloat(c)) && isFinite(c)) {\n            var nr = this.getNumberAt(row, column);\n            if (nr) {\n                var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n                var decimals = nr.start + nr.value.length - fp;\n\n                var t = parseFloat(nr.value);\n                t *= Math.pow(10, decimals);\n\n\n                if(fp !== nr.end && column < fp){\n                    amount *= Math.pow(10, nr.end - column - 1);\n                } else {\n                    amount *= Math.pow(10, nr.end - column);\n                }\n\n                t += amount;\n                t /= Math.pow(10, decimals);\n                var nnr = t.toFixed(decimals);\n                var replaceRange = new Range(row, nr.start, row, nr.end);\n                this.session.replace(replaceRange, nnr);\n                this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length));\n\n            }\n        }\n    };\n    this.removeLines = function() {\n        var rows = this.$getSelectedRows();\n        this.session.removeFullLines(rows.first, rows.last);\n        this.clearSelection();\n    };\n\n    this.duplicateSelection = function() {\n        var sel = this.selection;\n        var doc = this.session;\n        var range = sel.getRange();\n        var reverse = sel.isBackwards();\n        if (range.isEmpty()) {\n            var row = range.start.row;\n            doc.duplicateLines(row, row);\n        } else {\n            var point = reverse ? range.start : range.end;\n            var endPoint = doc.insert(point, doc.getTextRange(range), false);\n            range.start = point;\n            range.end = endPoint;\n\n            sel.setSelectionRange(range, reverse);\n        }\n    };\n    this.moveLinesDown = function() {\n        this.$moveLines(1, false);\n    };\n    this.moveLinesUp = function() {\n        this.$moveLines(-1, false);\n    };\n    this.moveText = function(range, toPosition, copy) {\n        return this.session.moveText(range, toPosition, copy);\n    };\n    this.copyLinesUp = function() {\n        this.$moveLines(-1, true);\n    };\n    this.copyLinesDown = function() {\n        this.$moveLines(1, true);\n    };\n    this.$moveLines = function(dir, copy) {\n        var rows, moved;\n        var selection = this.selection;\n        if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n            var range = selection.toOrientedRange();\n            rows = this.$getSelectedRows(range);\n            moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n            if (copy && dir == -1) moved = 0;\n            range.moveBy(moved, 0);\n            selection.fromOrientedRange(range);\n        } else {\n            var ranges = selection.rangeList.ranges;\n            selection.rangeList.detach(this.session);\n            this.inVirtualSelectionMode = true;\n            \n            var diff = 0;\n            var totalDiff = 0;\n            var l = ranges.length;\n            for (var i = 0; i < l; i++) {\n                var rangeIndex = i;\n                ranges[i].moveBy(diff, 0);\n                rows = this.$getSelectedRows(ranges[i]);\n                var first = rows.first;\n                var last = rows.last;\n                while (++i < l) {\n                    if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n                    var subRows = this.$getSelectedRows(ranges[i]);\n                    if (copy && subRows.first != last)\n                        break;\n                    else if (!copy && subRows.first > last + 1)\n                        break;\n                    last = subRows.last;\n                }\n                i--;\n                diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n                if (copy && dir == -1) rangeIndex = i + 1;\n                while (rangeIndex <= i) {\n                    ranges[rangeIndex].moveBy(diff, 0);\n                    rangeIndex++;\n                }\n                if (!copy) diff = 0;\n                totalDiff += diff;\n            }\n            \n            selection.fromOrientedRange(selection.ranges[0]);\n            selection.rangeList.attach(this.session);\n            this.inVirtualSelectionMode = false;\n        }\n    };\n    this.$getSelectedRows = function(range) {\n        range = (range || this.getSelectionRange()).collapseRows();\n\n        return {\n            first: this.session.getRowFoldStart(range.start.row),\n            last: this.session.getRowFoldEnd(range.end.row)\n        };\n    };\n\n    this.onCompositionStart = function(text) {\n        this.renderer.showComposition(this.getCursorPosition());\n    };\n\n    this.onCompositionUpdate = function(text) {\n        this.renderer.setCompositionText(text);\n    };\n\n    this.onCompositionEnd = function() {\n        this.renderer.hideComposition();\n    };\n    this.getFirstVisibleRow = function() {\n        return this.renderer.getFirstVisibleRow();\n    };\n    this.getLastVisibleRow = function() {\n        return this.renderer.getLastVisibleRow();\n    };\n    this.isRowVisible = function(row) {\n        return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n    };\n    this.isRowFullyVisible = function(row) {\n        return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n    };\n    this.$getVisibleRowCount = function() {\n        return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n    };\n\n    this.$moveByPage = function(dir, select) {\n        var renderer = this.renderer;\n        var config = this.renderer.layerConfig;\n        var rows = dir * Math.floor(config.height / config.lineHeight);\n\n        this.$blockScrolling++;\n        if (select === true) {\n            this.selection.$moveSelection(function(){\n                this.moveCursorBy(rows, 0);\n            });\n        } else if (select === false) {\n            this.selection.moveCursorBy(rows, 0);\n            this.selection.clearSelection();\n        }\n        this.$blockScrolling--;\n\n        var scrollTop = renderer.scrollTop;\n\n        renderer.scrollBy(0, rows * config.lineHeight);\n        if (select != null)\n            renderer.scrollCursorIntoView(null, 0.5);\n\n        renderer.animateScrolling(scrollTop);\n    };\n    this.selectPageDown = function() {\n        this.$moveByPage(1, true);\n    };\n    this.selectPageUp = function() {\n        this.$moveByPage(-1, true);\n    };\n    this.gotoPageDown = function() {\n       this.$moveByPage(1, false);\n    };\n    this.gotoPageUp = function() {\n        this.$moveByPage(-1, false);\n    };\n    this.scrollPageDown = function() {\n        this.$moveByPage(1);\n    };\n    this.scrollPageUp = function() {\n        this.$moveByPage(-1);\n    };\n    this.scrollToRow = function(row) {\n        this.renderer.scrollToRow(row);\n    };\n    this.scrollToLine = function(line, center, animate, callback) {\n        this.renderer.scrollToLine(line, center, animate, callback);\n    };\n    this.centerSelection = function() {\n        var range = this.getSelectionRange();\n        var pos = {\n            row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n            column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n        };\n        this.renderer.alignCursor(pos, 0.5);\n    };\n    this.getCursorPosition = function() {\n        return this.selection.getCursor();\n    };\n    this.getCursorPositionScreen = function() {\n        return this.session.documentToScreenPosition(this.getCursorPosition());\n    };\n    this.getSelectionRange = function() {\n        return this.selection.getRange();\n    };\n    this.selectAll = function() {\n        this.$blockScrolling += 1;\n        this.selection.selectAll();\n        this.$blockScrolling -= 1;\n    };\n    this.clearSelection = function() {\n        this.selection.clearSelection();\n    };\n    this.moveCursorTo = function(row, column) {\n        this.selection.moveCursorTo(row, column);\n    };\n    this.moveCursorToPosition = function(pos) {\n        this.selection.moveCursorToPosition(pos);\n    };\n    this.jumpToMatching = function(select, expand) {\n        var cursor = this.getCursorPosition();\n        var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n        var prevToken = iterator.getCurrentToken();\n        var token = prevToken || iterator.stepForward();\n\n        if (!token) return;\n        var matchType;\n        var found = false;\n        var depth = {};\n        var i = cursor.column - token.start;\n        var bracketType;\n        var brackets = {\n            \")\": \"(\",\n            \"(\": \"(\",\n            \"]\": \"[\",\n            \"[\": \"[\",\n            \"{\": \"{\",\n            \"}\": \"{\"\n        };\n        \n        do {\n            if (token.value.match(/[{}()\\[\\]]/g)) {\n                for (; i < token.value.length && !found; i++) {\n                    if (!brackets[token.value[i]]) {\n                        continue;\n                    }\n\n                    bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n                    if (isNaN(depth[bracketType])) {\n                        depth[bracketType] = 0;\n                    }\n\n                    switch (token.value[i]) {\n                        case '(':\n                        case '[':\n                        case '{':\n                            depth[bracketType]++;\n                            break;\n                        case ')':\n                        case ']':\n                        case '}':\n                            depth[bracketType]--;\n\n                            if (depth[bracketType] === -1) {\n                                matchType = 'bracket';\n                                found = true;\n                            }\n                        break;\n                    }\n                }\n            }\n            else if (token && token.type.indexOf('tag-name') !== -1) {\n                if (isNaN(depth[token.value])) {\n                    depth[token.value] = 0;\n                }\n                \n                if (prevToken.value === '<') {\n                    depth[token.value]++;\n                }\n                else if (prevToken.value === '</') {\n                    depth[token.value]--;\n                }\n                \n                if (depth[token.value] === -1) {\n                    matchType = 'tag';\n                    found = true;\n                }\n            }\n\n            if (!found) {\n                prevToken = token;\n                token = iterator.stepForward();\n                i = 0;\n            }\n        } while (token && !found);\n        if (!matchType)\n            return;\n\n        var range, pos;\n        if (matchType === 'bracket') {\n            range = this.session.getBracketRange(cursor);\n            if (!range) {\n                range = new Range(\n                    iterator.getCurrentTokenRow(),\n                    iterator.getCurrentTokenColumn() + i - 1,\n                    iterator.getCurrentTokenRow(),\n                    iterator.getCurrentTokenColumn() + i - 1\n                );\n                pos = range.start;\n                if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\n                    range = this.session.getBracketRange(pos);\n            }\n        }\n        else if (matchType === 'tag') {\n            if (token && token.type.indexOf('tag-name') !== -1) \n                var tag = token.value;\n            else\n                return;\n\n            range = new Range(\n                iterator.getCurrentTokenRow(),\n                iterator.getCurrentTokenColumn() - 2,\n                iterator.getCurrentTokenRow(),\n                iterator.getCurrentTokenColumn() - 2\n            );\n            if (range.compare(cursor.row, cursor.column) === 0) {\n                found = false;\n                do {\n                    token = prevToken;\n                    prevToken = iterator.stepBackward();\n                    \n                    if (prevToken) {\n                        if (prevToken.type.indexOf('tag-close') !== -1) {\n                            range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n                        }\n\n                        if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n                            if (prevToken.value === '<') {\n                                depth[tag]++;\n                            }\n                            else if (prevToken.value === '</') {\n                                depth[tag]--;\n                            }\n                            \n                            if (depth[tag] === 0)\n                                found = true;\n                        }\n                    }\n                } while (prevToken && !found);\n            }\n            if (token && token.type.indexOf('tag-name')) {\n                pos = range.start;\n                if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\n                    pos = range.end;\n            }\n        }\n\n        pos = range && range.cursor || pos;\n        if (pos) {\n            if (select) {\n                if (range && expand) {\n                    this.selection.setRange(range);\n                } else if (range && range.isEqual(this.getSelectionRange())) {\n                    this.clearSelection();\n                } else {\n                    this.selection.selectTo(pos.row, pos.column);\n                }\n            } else {\n                this.selection.moveTo(pos.row, pos.column);\n            }\n        }\n    };\n    this.gotoLine = function(lineNumber, column, animate) {\n        this.selection.clearSelection();\n        this.session.unfold({row: lineNumber - 1, column: column || 0});\n\n        this.$blockScrolling += 1;\n        this.exitMultiSelectMode && this.exitMultiSelectMode();\n        this.moveCursorTo(lineNumber - 1, column || 0);\n        this.$blockScrolling -= 1;\n\n        if (!this.isRowFullyVisible(lineNumber - 1))\n            this.scrollToLine(lineNumber - 1, true, animate);\n    };\n    this.navigateTo = function(row, column) {\n        this.selection.moveTo(row, column);\n    };\n    this.navigateUp = function(times) {\n        if (this.selection.isMultiLine() && !this.selection.isBackwards()) {\n            var selectionStart = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionStart);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(-times || -1, 0);\n    };\n    this.navigateDown = function(times) {\n        if (this.selection.isMultiLine() && this.selection.isBackwards()) {\n            var selectionEnd = this.selection.anchor.getPosition();\n            return this.moveCursorToPosition(selectionEnd);\n        }\n        this.selection.clearSelection();\n        this.selection.moveCursorBy(times || 1, 0);\n    };\n    this.navigateLeft = function(times) {\n        if (!this.selection.isEmpty()) {\n            var selectionStart = this.getSelectionRange().start;\n            this.moveCursorToPosition(selectionStart);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorLeft();\n            }\n        }\n        this.clearSelection();\n    };\n    this.navigateRight = function(times) {\n        if (!this.selection.isEmpty()) {\n            var selectionEnd = this.getSelectionRange().end;\n            this.moveCursorToPosition(selectionEnd);\n        }\n        else {\n            times = times || 1;\n            while (times--) {\n                this.selection.moveCursorRight();\n            }\n        }\n        this.clearSelection();\n    };\n    this.navigateLineStart = function() {\n        this.selection.moveCursorLineStart();\n        this.clearSelection();\n    };\n    this.navigateLineEnd = function() {\n        this.selection.moveCursorLineEnd();\n        this.clearSelection();\n    };\n    this.navigateFileEnd = function() {\n        this.selection.moveCursorFileEnd();\n        this.clearSelection();\n    };\n    this.navigateFileStart = function() {\n        this.selection.moveCursorFileStart();\n        this.clearSelection();\n    };\n    this.navigateWordRight = function() {\n        this.selection.moveCursorWordRight();\n        this.clearSelection();\n    };\n    this.navigateWordLeft = function() {\n        this.selection.moveCursorWordLeft();\n        this.clearSelection();\n    };\n    this.replace = function(replacement, options) {\n        if (options)\n            this.$search.set(options);\n\n        var range = this.$search.find(this.session);\n        var replaced = 0;\n        if (!range)\n            return replaced;\n\n        if (this.$tryReplace(range, replacement)) {\n            replaced = 1;\n        }\n        if (range !== null) {\n            this.selection.setSelectionRange(range);\n            this.renderer.scrollSelectionIntoView(range.start, range.end);\n        }\n\n        return replaced;\n    };\n    this.replaceAll = function(replacement, options) {\n        if (options) {\n            this.$search.set(options);\n        }\n\n        var ranges = this.$search.findAll(this.session);\n        var replaced = 0;\n        if (!ranges.length)\n            return replaced;\n\n        this.$blockScrolling += 1;\n\n        var selection = this.getSelectionRange();\n        this.selection.moveTo(0, 0);\n\n        for (var i = ranges.length - 1; i >= 0; --i) {\n            if(this.$tryReplace(ranges[i], replacement)) {\n                replaced++;\n            }\n        }\n\n        this.selection.setSelectionRange(selection);\n        this.$blockScrolling -= 1;\n\n        return replaced;\n    };\n\n    this.$tryReplace = function(range, replacement) {\n        var input = this.session.getTextRange(range);\n        replacement = this.$search.replace(input, replacement);\n        if (replacement !== null) {\n            range.end = this.session.replace(range, replacement);\n            return range;\n        } else {\n            return null;\n        }\n    };\n    this.getLastSearchOptions = function() {\n        return this.$search.getOptions();\n    };\n    this.find = function(needle, options, animate) {\n        if (!options)\n            options = {};\n\n        if (typeof needle == \"string\" || needle instanceof RegExp)\n            options.needle = needle;\n        else if (typeof needle == \"object\")\n            oop.mixin(options, needle);\n\n        var range = this.selection.getRange();\n        if (options.needle == null) {\n            needle = this.session.getTextRange(range)\n                || this.$search.$options.needle;\n            if (!needle) {\n                range = this.session.getWordRange(range.start.row, range.start.column);\n                needle = this.session.getTextRange(range);\n            }\n            this.$search.set({needle: needle});\n        }\n\n        this.$search.set(options);\n        if (!options.start)\n            this.$search.set({start: range});\n\n        var newRange = this.$search.find(this.session);\n        if (options.preventScroll)\n            return newRange;\n        if (newRange) {\n            this.revealRange(newRange, animate);\n            return newRange;\n        }\n        if (options.backwards)\n            range.start = range.end;\n        else\n            range.end = range.start;\n        this.selection.setRange(range);\n    };\n    this.findNext = function(options, animate) {\n        this.find({skipCurrent: true, backwards: false}, options, animate);\n    };\n    this.findPrevious = function(options, animate) {\n        this.find(options, {skipCurrent: true, backwards: true}, animate);\n    };\n\n    this.revealRange = function(range, animate) {\n        this.$blockScrolling += 1;\n        this.session.unfold(range);\n        this.selection.setSelectionRange(range);\n        this.$blockScrolling -= 1;\n\n        var scrollTop = this.renderer.scrollTop;\n        this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n        if (animate !== false)\n            this.renderer.animateScrolling(scrollTop);\n    };\n    this.undo = function() {\n        this.$blockScrolling++;\n        this.session.getUndoManager().undo();\n        this.$blockScrolling--;\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    this.redo = function() {\n        this.$blockScrolling++;\n        this.session.getUndoManager().redo();\n        this.$blockScrolling--;\n        this.renderer.scrollCursorIntoView(null, 0.5);\n    };\n    this.destroy = function() {\n        this.renderer.destroy();\n        this._signal(\"destroy\", this);\n        if (this.session) {\n            this.session.destroy();\n        }\n    };\n    this.setAutoScrollEditorIntoView = function(enable) {\n        if (!enable)\n            return;\n        var rect;\n        var self = this;\n        var shouldScroll = false;\n        if (!this.$scrollAnchor)\n            this.$scrollAnchor = document.createElement(\"div\");\n        var scrollAnchor = this.$scrollAnchor;\n        scrollAnchor.style.cssText = \"position:absolute\";\n        this.container.insertBefore(scrollAnchor, this.container.firstChild);\n        var onChangeSelection = this.on(\"changeSelection\", function() {\n            shouldScroll = true;\n        });\n        var onBeforeRender = this.renderer.on(\"beforeRender\", function() {\n            if (shouldScroll)\n                rect = self.renderer.container.getBoundingClientRect();\n        });\n        var onAfterRender = this.renderer.on(\"afterRender\", function() {\n            if (shouldScroll && rect && (self.isFocused()\n                || self.searchBox && self.searchBox.isFocused())\n            ) {\n                var renderer = self.renderer;\n                var pos = renderer.$cursorLayer.$pixelPos;\n                var config = renderer.layerConfig;\n                var top = pos.top - config.offset;\n                if (pos.top >= 0 && top + rect.top < 0) {\n                    shouldScroll = true;\n                } else if (pos.top < config.height &&\n                    pos.top + rect.top + config.lineHeight > window.innerHeight) {\n                    shouldScroll = false;\n                } else {\n                    shouldScroll = null;\n                }\n                if (shouldScroll != null) {\n                    scrollAnchor.style.top = top + \"px\";\n                    scrollAnchor.style.left = pos.left + \"px\";\n                    scrollAnchor.style.height = config.lineHeight + \"px\";\n                    scrollAnchor.scrollIntoView(shouldScroll);\n                }\n                shouldScroll = rect = null;\n            }\n        });\n        this.setAutoScrollEditorIntoView = function(enable) {\n            if (enable)\n                return;\n            delete this.setAutoScrollEditorIntoView;\n            this.off(\"changeSelection\", onChangeSelection);\n            this.renderer.off(\"afterRender\", onAfterRender);\n            this.renderer.off(\"beforeRender\", onBeforeRender);\n        };\n    };\n\n\n    this.$resetCursorStyle = function() {\n        var style = this.$cursorStyle || \"ace\";\n        var cursorLayer = this.renderer.$cursorLayer;\n        if (!cursorLayer)\n            return;\n        cursorLayer.setSmoothBlinking(/smooth/.test(style));\n        cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n        dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n    };\n\n}).call(Editor.prototype);\n\n\n\nconfig.defineOptions(Editor.prototype, \"editor\", {\n    selectionStyle: {\n        set: function(style) {\n            this.onSelectionChange();\n            this._signal(\"changeSelectionStyle\", {data: style});\n        },\n        initialValue: \"line\"\n    },\n    highlightActiveLine: {\n        set: function() {this.$updateHighlightActiveLine();},\n        initialValue: true\n    },\n    highlightSelectedWord: {\n        set: function(shouldHighlight) {this.$onSelectionChange();},\n        initialValue: true\n    },\n    readOnly: {\n        set: function(readOnly) {\n            this.$resetCursorStyle(); \n        },\n        initialValue: false\n    },\n    cursorStyle: {\n        set: function(val) { this.$resetCursorStyle(); },\n        values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n        initialValue: \"ace\"\n    },\n    mergeUndoDeltas: {\n        values: [false, true, \"always\"],\n        initialValue: true\n    },\n    behavioursEnabled: {initialValue: true},\n    wrapBehavioursEnabled: {initialValue: true},\n    autoScrollEditorIntoView: {\n        set: function(val) {this.setAutoScrollEditorIntoView(val)}\n    },\n    keyboardHandler: {\n        set: function(val) { this.setKeyboardHandler(val); },\n        get: function() { return this.keybindingId; },\n        handlesSet: true\n    },\n\n    hScrollBarAlwaysVisible: \"renderer\",\n    vScrollBarAlwaysVisible: \"renderer\",\n    highlightGutterLine: \"renderer\",\n    animatedScroll: \"renderer\",\n    showInvisibles: \"renderer\",\n    showPrintMargin: \"renderer\",\n    printMarginColumn: \"renderer\",\n    printMargin: \"renderer\",\n    fadeFoldWidgets: \"renderer\",\n    showFoldWidgets: \"renderer\",\n    showLineNumbers: \"renderer\",\n    showGutter: \"renderer\",\n    displayIndentGuides: \"renderer\",\n    fontSize: \"renderer\",\n    fontFamily: \"renderer\",\n    maxLines: \"renderer\",\n    minLines: \"renderer\",\n    scrollPastEnd: \"renderer\",\n    fixedWidthGutter: \"renderer\",\n    theme: \"renderer\",\n\n    scrollSpeed: \"$mouseHandler\",\n    dragDelay: \"$mouseHandler\",\n    dragEnabled: \"$mouseHandler\",\n    focusTimout: \"$mouseHandler\",\n    tooltipFollowsMouse: \"$mouseHandler\",\n\n    firstLineNumber: \"session\",\n    overwrite: \"session\",\n    newLineMode: \"session\",\n    useWorker: \"session\",\n    useSoftTabs: \"session\",\n    tabSize: \"session\",\n    wrap: \"session\",\n    indentedSoftWrap: \"session\",\n    foldStyle: \"session\",\n    mode: \"session\"\n});\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n    this.reset();\n};\n\n(function() {\n    this.execute = function(options) {\n        var deltaSets = options.args[0];\n        this.$doc  = options.args[1];\n        if (options.merge && this.hasUndo()){\n            this.dirtyCounter--;\n            deltaSets = this.$undoStack.pop().concat(deltaSets);\n        }\n        this.$undoStack.push(deltaSets);\n        this.$redoStack = [];\n        if (this.dirtyCounter < 0) {\n            this.dirtyCounter = NaN;\n        }\n        this.dirtyCounter++;\n    };\n    this.undo = function(dontSelect) {\n        var deltaSets = this.$undoStack.pop();\n        var undoSelectionRange = null;\n        if (deltaSets) {\n            undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect);\n            this.$redoStack.push(deltaSets);\n            this.dirtyCounter--;\n        }\n\n        return undoSelectionRange;\n    };\n    this.redo = function(dontSelect) {\n        var deltaSets = this.$redoStack.pop();\n        var redoSelectionRange = null;\n        if (deltaSets) {\n            redoSelectionRange =\n                this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect);\n            this.$undoStack.push(deltaSets);\n            this.dirtyCounter++;\n        }\n        return redoSelectionRange;\n    };\n    this.reset = function() {\n        this.$undoStack = [];\n        this.$redoStack = [];\n        this.dirtyCounter = 0;\n    };\n    this.hasUndo = function() {\n        return this.$undoStack.length > 0;\n    };\n    this.hasRedo = function() {\n        return this.$redoStack.length > 0;\n    };\n    this.markClean = function() {\n        this.dirtyCounter = 0;\n    };\n    this.isClean = function() {\n        return this.dirtyCounter === 0;\n    };\n    this.$serializeDeltas = function(deltaSets) {\n        return cloneDeltaSetsObj(deltaSets, $serializeDelta);\n    };\n    this.$deserializeDeltas = function(deltaSets) {\n        return cloneDeltaSetsObj(deltaSets, $deserializeDelta);\n    };\n    \n    function $serializeDelta(delta){\n        return {\n            action: delta.action,\n            start: delta.start,\n            end: delta.end,\n            lines: delta.lines.length == 1 ? null : delta.lines,\n            text: delta.lines.length == 1 ? delta.lines[0] : null\n        };\n    }\n        \n    function $deserializeDelta(delta) {\n        return {\n            action: delta.action,\n            start: delta.start,\n            end: delta.end,\n            lines: delta.lines || [delta.text]\n        };\n    }\n    \n    function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) {\n        var deltaSets_new = new Array(deltaSets_old.length);\n        for (var i = 0; i < deltaSets_old.length; i++) {\n            var deltaSet_old = deltaSets_old[i];\n            var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)};\n            \n            for (var j = 0; j < deltaSet_old.deltas.length; j++) {\n                var delta_old = deltaSet_old.deltas[j];\n                deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old);\n            }\n            \n            deltaSets_new[i] = deltaSet_new;\n        }\n        return deltaSets_new;\n    }\n    \n}).call(UndoManager.prototype);\n\nexports.UndoManager = UndoManager;\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar Gutter = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_gutter-layer\";\n    parentEl.appendChild(this.element);\n    this.setShowFoldWidgets(this.$showFoldWidgets);\n    \n    this.gutterWidth = 0;\n\n    this.$annotations = [];\n    this.$updateAnnotations = this.$updateAnnotations.bind(this);\n\n    this.$cells = [];\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.setSession = function(session) {\n        if (this.session)\n            this.session.removeEventListener(\"change\", this.$updateAnnotations);\n        this.session = session;\n        if (session)\n            session.on(\"change\", this.$updateAnnotations);\n    };\n\n    this.addGutterDecoration = function(row, className){\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n        this.session.addGutterDecoration(row, className);\n    };\n\n    this.removeGutterDecoration = function(row, className){\n        if (window.console)\n            console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n        this.session.removeGutterDecoration(row, className);\n    };\n\n    this.setAnnotations = function(annotations) {\n        this.$annotations = [];\n        for (var i = 0; i < annotations.length; i++) {\n            var annotation = annotations[i];\n            var row = annotation.row;\n            var rowInfo = this.$annotations[row];\n            if (!rowInfo)\n                rowInfo = this.$annotations[row] = {text: []};\n           \n            var annoText = annotation.text;\n            annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n            if (rowInfo.text.indexOf(annoText) === -1)\n                rowInfo.text.push(annoText);\n\n            var type = annotation.type;\n            if (type == \"error\")\n                rowInfo.className = \" ace_error\";\n            else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n                rowInfo.className = \" ace_warning\";\n            else if (type == \"info\" && (!rowInfo.className))\n                rowInfo.className = \" ace_info\";\n        }\n    };\n\n    this.$updateAnnotations = function (delta) {\n        if (!this.$annotations.length)\n            return;\n        var firstRow = delta.start.row;\n        var len = delta.end.row - firstRow;\n        if (len === 0) {\n        } else if (delta.action == 'remove') {\n            this.$annotations.splice(firstRow, len + 1, null);\n        } else {\n            var args = new Array(len + 1);\n            args.unshift(firstRow, 1);\n            this.$annotations.splice.apply(this.$annotations, args);\n        }\n    };\n\n    this.update = function(config) {\n        var session = this.session;\n        var firstRow = config.firstRow;\n        var lastRow = Math.min(config.lastRow + config.gutterOffset,  // needed to compensate for hor scollbar\n            session.getLength() - 1);\n        var fold = session.getNextFoldLine(firstRow);\n        var foldStart = fold ? fold.start.row : Infinity;\n        var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n        var breakpoints = session.$breakpoints;\n        var decorations = session.$decorations;\n        var firstLineNumber = session.$firstLineNumber;\n        var lastLineNumber = 0;\n        \n        var gutterRenderer = session.gutterRenderer || this.$renderer;\n\n        var cell = null;\n        var index = -1;\n        var row = firstRow;\n        while (true) {\n            if (row > foldStart) {\n                row = fold.end.row + 1;\n                fold = session.getNextFoldLine(row, fold);\n                foldStart = fold ? fold.start.row : Infinity;\n            }\n            if (row > lastRow) {\n                while (this.$cells.length > index + 1) {\n                    cell = this.$cells.pop();\n                    this.element.removeChild(cell.element);\n                }\n                break;\n            }\n\n            cell = this.$cells[++index];\n            if (!cell) {\n                cell = {element: null, textNode: null, foldWidget: null};\n                cell.element = dom.createElement(\"div\");\n                cell.textNode = document.createTextNode('');\n                cell.element.appendChild(cell.textNode);\n                this.element.appendChild(cell.element);\n                this.$cells[index] = cell;\n            }\n\n            var className = \"ace_gutter-cell \";\n            if (breakpoints[row])\n                className += breakpoints[row];\n            if (decorations[row])\n                className += decorations[row];\n            if (this.$annotations[row])\n                className += this.$annotations[row].className;\n            if (cell.element.className != className)\n                cell.element.className = className;\n\n            var height = session.getRowLength(row) * config.lineHeight + \"px\";\n            if (height != cell.element.style.height)\n                cell.element.style.height = height;\n\n            if (foldWidgets) {\n                var c = foldWidgets[row];\n                if (c == null)\n                    c = foldWidgets[row] = session.getFoldWidget(row);\n            }\n\n            if (c) {\n                if (!cell.foldWidget) {\n                    cell.foldWidget = dom.createElement(\"span\");\n                    cell.element.appendChild(cell.foldWidget);\n                }\n                var className = \"ace_fold-widget ace_\" + c;\n                if (c == \"start\" && row == foldStart && row < fold.end.row)\n                    className += \" ace_closed\";\n                else\n                    className += \" ace_open\";\n                if (cell.foldWidget.className != className)\n                    cell.foldWidget.className = className;\n\n                var height = config.lineHeight + \"px\";\n                if (cell.foldWidget.style.height != height)\n                    cell.foldWidget.style.height = height;\n            } else {\n                if (cell.foldWidget) {\n                    cell.element.removeChild(cell.foldWidget);\n                    cell.foldWidget = null;\n                }\n            }\n            \n            var text = lastLineNumber = gutterRenderer\n                ? gutterRenderer.getText(session, row)\n                : row + firstLineNumber;\n            if (text != cell.textNode.data)\n                cell.textNode.data = text;\n\n            row++;\n        }\n\n        this.element.style.height = config.minHeight + \"px\";\n\n        if (this.$fixedWidth || session.$useWrapMode)\n            lastLineNumber = session.getLength() + firstLineNumber;\n\n        var gutterWidth = gutterRenderer \n            ? gutterRenderer.getWidth(session, lastLineNumber, config)\n            : lastLineNumber.toString().length * config.characterWidth;\n        \n        var padding = this.$padding || this.$computePadding();\n        gutterWidth += padding.left + padding.right;\n        if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n            this.gutterWidth = gutterWidth;\n            this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n            this._emit(\"changeGutterWidth\", gutterWidth);\n        }\n    };\n\n    this.$fixedWidth = false;\n    \n    this.$showLineNumbers = true;\n    this.$renderer = \"\";\n    this.setShowLineNumbers = function(show) {\n        this.$renderer = !show && {\n            getWidth: function() {return \"\"},\n            getText: function() {return \"\"}\n        };\n    };\n    \n    this.getShowLineNumbers = function() {\n        return this.$showLineNumbers;\n    };\n    \n    this.$showFoldWidgets = true;\n    this.setShowFoldWidgets = function(show) {\n        if (show)\n            dom.addCssClass(this.element, \"ace_folding-enabled\");\n        else\n            dom.removeCssClass(this.element, \"ace_folding-enabled\");\n\n        this.$showFoldWidgets = show;\n        this.$padding = null;\n    };\n    \n    this.getShowFoldWidgets = function() {\n        return this.$showFoldWidgets;\n    };\n\n    this.$computePadding = function() {\n        if (!this.element.firstChild)\n            return {left: 0, right: 0};\n        var style = dom.computedStyle(this.element.firstChild);\n        this.$padding = {};\n        this.$padding.left = parseInt(style.paddingLeft) + 1 || 0;\n        this.$padding.right = parseInt(style.paddingRight) || 0;\n        return this.$padding;\n    };\n\n    this.getRegion = function(point) {\n        var padding = this.$padding || this.$computePadding();\n        var rect = this.element.getBoundingClientRect();\n        if (point.x < padding.left + rect.left)\n            return \"markers\";\n        if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n            return \"foldWidgets\";\n    };\n\n}).call(Gutter.prototype);\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_marker-layer\";\n    parentEl.appendChild(this.element);\n};\n\n(function() {\n\n    this.$padding = 0;\n\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n    };\n    this.setSession = function(session) {\n        this.session = session;\n    };\n    \n    this.setMarkers = function(markers) {\n        this.markers = markers;\n    };\n\n    this.update = function(config) {\n        var config = config || this.config;\n        if (!config)\n            return;\n\n        this.config = config;\n\n\n        var html = [];\n        for (var key in this.markers) {\n            var marker = this.markers[key];\n\n            if (!marker.range) {\n                marker.update(html, this, this.session, config);\n                continue;\n            }\n\n            var range = marker.range.clipRows(config.firstRow, config.lastRow);\n            if (range.isEmpty()) continue;\n\n            range = range.toScreenRange(this.session);\n            if (marker.renderer) {\n                var top = this.$getTop(range.start.row, config);\n                var left = this.$padding + range.start.column * config.characterWidth;\n                marker.renderer(html, range, left, top, config);\n            } else if (marker.type == \"fullLine\") {\n                this.drawFullLineMarker(html, range, marker.clazz, config);\n            } else if (marker.type == \"screenLine\") {\n                this.drawScreenLineMarker(html, range, marker.clazz, config);\n            } else if (range.isMultiLine()) {\n                if (marker.type == \"text\")\n                    this.drawTextMarker(html, range, marker.clazz, config);\n                else\n                    this.drawMultiLineMarker(html, range, marker.clazz, config);\n            } else {\n                this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n            }\n        }\n        this.element.innerHTML = html.join(\"\");\n    };\n\n    this.$getTop = function(row, layerConfig) {\n        return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n    };\n\n    function getBorderClass(tl, tr, br, bl) {\n        return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n    }\n    this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) {\n        var session = this.session;\n        var start = range.start.row;\n        var end = range.end.row;\n        var row = start;\n        var prev = 0; \n        var curr = 0;\n        var next = session.getScreenLastRowColumn(row);\n        var lineRange = new Range(row, range.start.column, row, curr);\n        for (; row <= end; row++) {\n            lineRange.start.row = lineRange.end.row = row;\n            lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n            lineRange.end.column = next;\n            prev = curr;\n            curr = next;\n            next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n            this.drawSingleLineMarker(stringBuilder, lineRange, \n                clazz + (row == start  ? \" ace_start\" : \"\") + \" ace_br\"\n                    + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\n                layerConfig, row == end ? 0 : 1, extraStyle);\n        }\n    };\n    this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var padding = this.$padding;\n        var height = config.lineHeight;\n        var top = this.$getTop(range.start.row, config);\n        var left = padding + range.start.column * config.characterWidth;\n        extraStyle = extraStyle || \"\";\n\n        stringBuilder.push(\n            \"<div class='\", clazz, \" ace_br1 ace_start' style='\",\n            \"height:\", height, \"px;\",\n            \"right:0;\",\n            \"top:\", top, \"px;\",\n            \"left:\", left, \"px;\", extraStyle, \"'></div>\"\n        );\n        top = this.$getTop(range.end.row, config);\n        var width = range.end.column * config.characterWidth;\n\n        stringBuilder.push(\n            \"<div class='\", clazz, \" ace_br12' style='\",\n            \"height:\", height, \"px;\",\n            \"width:\", width, \"px;\",\n            \"top:\", top, \"px;\",\n            \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n        );\n        height = (range.end.row - range.start.row - 1) * config.lineHeight;\n        if (height <= 0)\n            return;\n        top = this.$getTop(range.start.row + 1, config);\n        \n        var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n        stringBuilder.push(\n            \"<div class='\", clazz, (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"' style='\",\n            \"height:\", height, \"px;\",\n            \"right:0;\",\n            \"top:\", top, \"px;\",\n            \"left:\", padding, \"px;\", extraStyle, \"'></div>\"\n        );\n    };\n    this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) {\n        var height = config.lineHeight;\n        var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n\n        var top = this.$getTop(range.start.row, config);\n        var left = this.$padding + range.start.column * config.characterWidth;\n\n        stringBuilder.push(\n            \"<div class='\", clazz, \"' style='\",\n            \"height:\", height, \"px;\",\n            \"width:\", width, \"px;\",\n            \"top:\", top, \"px;\",\n            \"left:\", left, \"px;\", extraStyle || \"\", \"'></div>\"\n        );\n    };\n\n    this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n        if (range.start.row != range.end.row)\n            height += this.$getTop(range.end.row, config) - top;\n\n        stringBuilder.push(\n            \"<div class='\", clazz, \"' style='\",\n            \"height:\", height, \"px;\",\n            \"top:\", top, \"px;\",\n            \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n        );\n    };\n    \n    this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n        var top = this.$getTop(range.start.row, config);\n        var height = config.lineHeight;\n\n        stringBuilder.push(\n            \"<div class='\", clazz, \"' style='\",\n            \"height:\", height, \"px;\",\n            \"top:\", top, \"px;\",\n            \"left:0;right:0;\", extraStyle || \"\", \"'></div>\"\n        );\n    };\n\n}).call(Marker.prototype);\n\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar Text = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_text-layer\";\n    parentEl.appendChild(this.element);\n    this.$updateEolChar = this.$updateEolChar.bind(this);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n\n    this.EOF_CHAR = \"\\xB6\";\n    this.EOL_CHAR_LF = \"\\xAC\";\n    this.EOL_CHAR_CRLF = \"\\xa4\";\n    this.EOL_CHAR = this.EOL_CHAR_LF;\n    this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n    this.SPACE_CHAR = \"\\xB7\";\n    this.$padding = 0;\n\n    this.$updateEolChar = function() {\n        var EOL_CHAR = this.session.doc.getNewLineCharacter() == \"\\n\"\n           ? this.EOL_CHAR_LF\n           : this.EOL_CHAR_CRLF;\n        if (this.EOL_CHAR != EOL_CHAR) {\n            this.EOL_CHAR = EOL_CHAR;\n            return true;\n        }\n    }\n\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n        this.element.style.padding = \"0 \" + padding + \"px\";\n    };\n\n    this.getLineHeight = function() {\n        return this.$fontMetrics.$characterSize.height || 0;\n    };\n\n    this.getCharacterWidth = function() {\n        return this.$fontMetrics.$characterSize.width || 0;\n    };\n    \n    this.$setFontMetrics = function(measure) {\n        this.$fontMetrics = measure;\n        this.$fontMetrics.on(\"changeCharacterSize\", function(e) {\n            this._signal(\"changeCharacterSize\", e);\n        }.bind(this));\n        this.$pollSizeChanges();\n    }\n\n    this.checkForSizeChanges = function() {\n        this.$fontMetrics.checkForSizeChanges();\n    };\n    this.$pollSizeChanges = function() {\n        return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n    };\n    this.setSession = function(session) {\n        this.session = session;\n        if (session)\n            this.$computeTabString();\n    };\n\n    this.showInvisibles = false;\n    this.setShowInvisibles = function(showInvisibles) {\n        if (this.showInvisibles == showInvisibles)\n            return false;\n\n        this.showInvisibles = showInvisibles;\n        this.$computeTabString();\n        return true;\n    };\n\n    this.displayIndentGuides = true;\n    this.setDisplayIndentGuides = function(display) {\n        if (this.displayIndentGuides == display)\n            return false;\n\n        this.displayIndentGuides = display;\n        this.$computeTabString();\n        return true;\n    };\n\n    this.$tabStrings = [];\n    this.onChangeTabSize =\n    this.$computeTabString = function() {\n        var tabSize = this.session.getTabSize();\n        this.tabSize = tabSize;\n        var tabStr = this.$tabStrings = [0];\n        for (var i = 1; i < tabSize + 1; i++) {\n            if (this.showInvisibles) {\n                tabStr.push(\"<span class='ace_invisible ace_invisible_tab'>\"\n                    + lang.stringRepeat(this.TAB_CHAR, i)\n                    + \"</span>\");\n            } else {\n                tabStr.push(lang.stringRepeat(\" \", i));\n            }\n        }\n        if (this.displayIndentGuides) {\n            this.$indentGuideRe =  /\\s\\S| \\t|\\t |\\s$/;\n            var className = \"ace_indent-guide\";\n            var spaceClass = \"\";\n            var tabClass = \"\";\n            if (this.showInvisibles) {\n                className += \" ace_invisible\";\n                spaceClass = \" ace_invisible_space\";\n                tabClass = \" ace_invisible_tab\";\n                var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);\n                var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize);\n            } else{\n                var spaceContent = lang.stringRepeat(\" \", this.tabSize);\n                var tabContent = spaceContent;\n            }\n\n            this.$tabStrings[\" \"] = \"<span class='\" + className + spaceClass + \"'>\" + spaceContent + \"</span>\";\n            this.$tabStrings[\"\\t\"] = \"<span class='\" + className + tabClass + \"'>\" + tabContent + \"</span>\";\n        }\n    };\n\n    this.updateLines = function(config, firstRow, lastRow) {\n        if (this.config.lastRow != config.lastRow ||\n            this.config.firstRow != config.firstRow) {\n            this.scrollLines(config);\n        }\n        this.config = config;\n\n        var first = Math.max(firstRow, config.firstRow);\n        var last = Math.min(lastRow, config.lastRow);\n\n        var lineElements = this.element.childNodes;\n        var lineElementsIdx = 0;\n\n        for (var row = config.firstRow; row < first; row++) {\n            var foldLine = this.session.getFoldLine(row);\n            if (foldLine) {\n                if (foldLine.containsRow(first)) {\n                    first = foldLine.start.row;\n                    break;\n                } else {\n                    row = foldLine.end.row;\n                }\n            }\n            lineElementsIdx ++;\n        }\n\n        var row = first;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row :Infinity;\n            }\n            if (row > last)\n                break;\n\n            var lineElement = lineElements[lineElementsIdx++];\n            if (lineElement) {\n                var html = [];\n                this.$renderLine(\n                    html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false\n                );\n                lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n                lineElement.innerHTML = html.join(\"\");\n            }\n            row++;\n        }\n    };\n\n    this.scrollLines = function(config) {\n        var oldConfig = this.config;\n        this.config = config;\n\n        if (!oldConfig || oldConfig.lastRow < config.firstRow)\n            return this.update(config);\n\n        if (config.lastRow < oldConfig.firstRow)\n            return this.update(config);\n\n        var el = this.element;\n        if (oldConfig.firstRow < config.firstRow)\n            for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--)\n                el.removeChild(el.firstChild);\n\n        if (oldConfig.lastRow > config.lastRow)\n            for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--)\n                el.removeChild(el.lastChild);\n\n        if (config.firstRow < oldConfig.firstRow) {\n            var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1);\n            if (el.firstChild)\n                el.insertBefore(fragment, el.firstChild);\n            else\n                el.appendChild(fragment);\n        }\n\n        if (config.lastRow > oldConfig.lastRow) {\n            var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow);\n            el.appendChild(fragment);\n        }\n    };\n\n    this.$renderLinesFragment = function(config, firstRow, lastRow) {\n        var fragment = this.element.ownerDocument.createDocumentFragment();\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row : Infinity;\n            }\n            if (row > lastRow)\n                break;\n\n            var container = dom.createElement(\"div\");\n\n            var html = [];\n            this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n            container.innerHTML = html.join(\"\");\n            if (this.$useLineGroups()) {\n                container.className = 'ace_line_group';\n                fragment.appendChild(container);\n                container.style.height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n\n            } else {\n                while(container.firstChild)\n                    fragment.appendChild(container.firstChild);\n            }\n\n            row++;\n        }\n        return fragment;\n    };\n\n    this.update = function(config) {\n        this.config = config;\n\n        var html = [];\n        var firstRow = config.firstRow, lastRow = config.lastRow;\n\n        var row = firstRow;\n        var foldLine = this.session.getNextFoldLine(row);\n        var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n        while (true) {\n            if (row > foldStart) {\n                row = foldLine.end.row+1;\n                foldLine = this.session.getNextFoldLine(row, foldLine);\n                foldStart = foldLine ? foldLine.start.row :Infinity;\n            }\n            if (row > lastRow)\n                break;\n\n            if (this.$useLineGroups())\n                html.push(\"<div class='ace_line_group' style='height:\", config.lineHeight*this.session.getRowLength(row), \"px'>\")\n\n            this.$renderLine(html, row, false, row == foldStart ? foldLine : false);\n\n            if (this.$useLineGroups())\n                html.push(\"</div>\"); // end the line group\n\n            row++;\n        }\n        this.element.innerHTML = html.join(\"\");\n    };\n\n    this.$textToken = {\n        \"text\": true,\n        \"rparen\": true,\n        \"lparen\": true\n    };\n\n    this.$renderToken = function(stringBuilder, screenColumn, token, value) {\n        var self = this;\n        var replaceReg = /\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF\\uFFF9-\\uFFFC])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g;\n        var replaceFunc = function(c, a, b, tabIdx, idx4) {\n            if (a) {\n                return self.showInvisibles\n                    ? \"<span class='ace_invisible ace_invisible_space'>\" + lang.stringRepeat(self.SPACE_CHAR, c.length) + \"</span>\"\n                    : c;\n            } else if (c == \"&\") {\n                return \"&#38;\";\n            } else if (c == \"<\") {\n                return \"&#60;\";\n            } else if (c == \">\") {\n                return \"&#62;\";\n            } else if (c == \"\\t\") {\n                var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx);\n                screenColumn += tabSize - 1;\n                return self.$tabStrings[tabSize];\n            } else if (c == \"\\u3000\") {\n                var classToUse = self.showInvisibles ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n                var space = self.showInvisibles ? self.SPACE_CHAR : \"\";\n                screenColumn += 1;\n                return \"<span class='\" + classToUse + \"' style='width:\" +\n                    (self.config.characterWidth * 2) +\n                    \"px'>\" + space + \"</span>\";\n            } else if (b) {\n                return \"<span class='ace_invisible ace_invisible_space ace_invalid'>\" + self.SPACE_CHAR + \"</span>\";\n            } else {\n                screenColumn += 1;\n                return \"<span class='ace_cjk' style='width:\" +\n                    (self.config.characterWidth * 2) +\n                    \"px'>\" + c + \"</span>\";\n            }\n        };\n\n        var output = value.replace(replaceReg, replaceFunc);\n\n        if (!this.$textToken[token.type]) {\n            var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n            var style = \"\";\n            if (token.type == \"fold\")\n                style = \" style='width:\" + (token.value.length * this.config.characterWidth) + \"px;' \";\n            stringBuilder.push(\"<span class='\", classes, \"'\", style, \">\", output, \"</span>\");\n        }\n        else {\n            stringBuilder.push(output);\n        }\n        return screenColumn + value.length;\n    };\n\n    this.renderIndentGuide = function(stringBuilder, value, max) {\n        var cols = value.search(this.$indentGuideRe);\n        if (cols <= 0 || cols >= max)\n            return value;\n        if (value[0] == \" \") {\n            cols -= cols % this.tabSize;\n            stringBuilder.push(lang.stringRepeat(this.$tabStrings[\" \"], cols/this.tabSize));\n            return value.substr(cols);\n        } else if (value[0] == \"\\t\") {\n            stringBuilder.push(lang.stringRepeat(this.$tabStrings[\"\\t\"], cols));\n            return value.substr(cols);\n        }\n        return value;\n    };\n\n    this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) {\n        var chars = 0;\n        var split = 0;\n        var splitChars = splits[0];\n        var screenColumn = 0;\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            var value = token.value;\n            if (i == 0 && this.displayIndentGuides) {\n                chars = value.length;\n                value = this.renderIndentGuide(stringBuilder, value, splitChars);\n                if (!value)\n                    continue;\n                chars -= value.length;\n            }\n\n            if (chars + value.length < splitChars) {\n                screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n                chars += value.length;\n            } else {\n                while (chars + value.length >= splitChars) {\n                    screenColumn = this.$renderToken(\n                        stringBuilder, screenColumn,\n                        token, value.substring(0, splitChars - chars)\n                    );\n                    value = value.substring(splitChars - chars);\n                    chars = splitChars;\n\n                    if (!onlyContents) {\n                        stringBuilder.push(\"</div>\",\n                            \"<div class='ace_line' style='height:\",\n                            this.config.lineHeight, \"px'>\"\n                        );\n                    }\n\n                    stringBuilder.push(lang.stringRepeat(\"\\xa0\", splits.indent));\n\n                    split ++;\n                    screenColumn = 0;\n                    splitChars = splits[split] || Number.MAX_VALUE;\n                }\n                if (value.length != 0) {\n                    chars += value.length;\n                    screenColumn = this.$renderToken(\n                        stringBuilder, screenColumn, token, value\n                    );\n                }\n            }\n        }\n    };\n\n    this.$renderSimpleLine = function(stringBuilder, tokens) {\n        var screenColumn = 0;\n        var token = tokens[0];\n        var value = token.value;\n        if (this.displayIndentGuides)\n            value = this.renderIndentGuide(stringBuilder, value);\n        if (value)\n            screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n        for (var i = 1; i < tokens.length; i++) {\n            token = tokens[i];\n            value = token.value;\n            screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value);\n        }\n    };\n    this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) {\n        if (!foldLine && foldLine != false)\n            foldLine = this.session.getFoldLine(row);\n\n        if (foldLine)\n            var tokens = this.$getFoldLineTokens(row, foldLine);\n        else\n            var tokens = this.session.getTokens(row);\n\n\n        if (!onlyContents) {\n            stringBuilder.push(\n                \"<div class='ace_line' style='height:\", \n                    this.config.lineHeight * (\n                        this.$useLineGroups() ? 1 :this.session.getRowLength(row)\n                    ), \"px'>\"\n            );\n        }\n\n        if (tokens.length) {\n            var splits = this.session.getRowSplitData(row);\n            if (splits && splits.length)\n                this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents);\n            else\n                this.$renderSimpleLine(stringBuilder, tokens);\n        }\n\n        if (this.showInvisibles) {\n            if (foldLine)\n                row = foldLine.end.row\n\n            stringBuilder.push(\n                \"<span class='ace_invisible ace_invisible_eol'>\",\n                row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,\n                \"</span>\"\n            );\n        }\n        if (!onlyContents)\n            stringBuilder.push(\"</div>\");\n    };\n\n    this.$getFoldLineTokens = function(row, foldLine) {\n        var session = this.session;\n        var renderTokens = [];\n\n        function addTokens(tokens, from, to) {\n            var idx = 0, col = 0;\n            while ((col + tokens[idx].value.length) < from) {\n                col += tokens[idx].value.length;\n                idx++;\n\n                if (idx == tokens.length)\n                    return;\n            }\n            if (col != from) {\n                var value = tokens[idx].value.substring(from - col);\n                if (value.length > (to - from))\n                    value = value.substring(0, to - from);\n\n                renderTokens.push({\n                    type: tokens[idx].type,\n                    value: value\n                });\n\n                col = from + value.length;\n                idx += 1;\n            }\n\n            while (col < to && idx < tokens.length) {\n                var value = tokens[idx].value;\n                if (value.length + col > to) {\n                    renderTokens.push({\n                        type: tokens[idx].type,\n                        value: value.substring(0, to - col)\n                    });\n                } else\n                    renderTokens.push(tokens[idx]);\n                col += value.length;\n                idx += 1;\n            }\n        }\n\n        var tokens = session.getTokens(row);\n        foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) {\n            if (placeholder != null) {\n                renderTokens.push({\n                    type: \"fold\",\n                    value: placeholder\n                });\n            } else {\n                if (isNewRow)\n                    tokens = session.getTokens(row);\n\n                if (tokens.length)\n                    addTokens(tokens, lastColumn, column);\n            }\n        }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n        return renderTokens;\n    };\n\n    this.$useLineGroups = function() {\n        return this.session.getUseWrapMode();\n    };\n\n    this.destroy = function() {\n        clearInterval(this.$pollSizeChangesTimer);\n        if (this.$measureNode)\n            this.$measureNode.parentNode.removeChild(this.$measureNode);\n        delete this.$measureNode;\n    };\n\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar isIE8;\n\nvar Cursor = function(parentEl) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_layer ace_cursor-layer\";\n    parentEl.appendChild(this.element);\n    \n    if (isIE8 === undefined)\n        isIE8 = !(\"opacity\" in this.element.style);\n\n    this.isVisible = false;\n    this.isBlinking = true;\n    this.blinkInterval = 1000;\n    this.smoothBlinking = false;\n\n    this.cursors = [];\n    this.cursor = this.addCursor();\n    dom.addCssClass(this.element, \"ace_hidden-cursors\");\n    this.$updateCursors = (isIE8\n        ? this.$updateVisibility\n        : this.$updateOpacity).bind(this);\n};\n\n(function() {\n    \n    this.$updateVisibility = function(val) {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--; )\n            cursors[i].style.visibility = val ? \"\" : \"hidden\";\n    };\n    this.$updateOpacity = function(val) {\n        var cursors = this.cursors;\n        for (var i = cursors.length; i--; )\n            cursors[i].style.opacity = val ? \"\" : \"0\";\n    };\n    \n\n    this.$padding = 0;\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n    };\n\n    this.setSession = function(session) {\n        this.session = session;\n    };\n\n    this.setBlinking = function(blinking) {\n        if (blinking != this.isBlinking){\n            this.isBlinking = blinking;\n            this.restartTimer();\n        }\n    };\n\n    this.setBlinkInterval = function(blinkInterval) {\n        if (blinkInterval != this.blinkInterval){\n            this.blinkInterval = blinkInterval;\n            this.restartTimer();\n        }\n    };\n\n    this.setSmoothBlinking = function(smoothBlinking) {\n        if (smoothBlinking != this.smoothBlinking && !isIE8) {\n            this.smoothBlinking = smoothBlinking;\n            dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n            this.$updateCursors(true);\n            this.$updateCursors = (this.$updateOpacity).bind(this);\n            this.restartTimer();\n        }\n    };\n\n    this.addCursor = function() {\n        var el = dom.createElement(\"div\");\n        el.className = \"ace_cursor\";\n        this.element.appendChild(el);\n        this.cursors.push(el);\n        return el;\n    };\n\n    this.removeCursor = function() {\n        if (this.cursors.length > 1) {\n            var el = this.cursors.pop();\n            el.parentNode.removeChild(el);\n            return el;\n        }\n    };\n\n    this.hideCursor = function() {\n        this.isVisible = false;\n        dom.addCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n\n    this.showCursor = function() {\n        this.isVisible = true;\n        dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n        this.restartTimer();\n    };\n\n    this.restartTimer = function() {\n        var update = this.$updateCursors;\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n        if (this.smoothBlinking) {\n            dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n        }\n        \n        update(true);\n\n        if (!this.isBlinking || !this.blinkInterval || !this.isVisible)\n            return;\n\n        if (this.smoothBlinking) {\n            setTimeout(function(){\n                dom.addCssClass(this.element, \"ace_smooth-blinking\");\n            }.bind(this));\n        }\n        \n        var blink = function(){\n            this.timeoutId = setTimeout(function() {\n                update(false);\n            }, 0.6 * this.blinkInterval);\n        }.bind(this);\n\n        this.intervalId = setInterval(function() {\n            update(true);\n            blink();\n        }, this.blinkInterval);\n\n        blink();\n    };\n\n    this.getPixelPosition = function(position, onScreen) {\n        if (!this.config || !this.session)\n            return {left : 0, top : 0};\n\n        if (!position)\n            position = this.session.selection.getCursor();\n        var pos = this.session.documentToScreenPosition(position);\n        var cursorLeft = this.$padding + pos.column * this.config.characterWidth;\n        var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n            this.config.lineHeight;\n\n        return {left : cursorLeft, top : cursorTop};\n    };\n\n    this.update = function(config) {\n        this.config = config;\n\n        var selections = this.session.$selectionMarkers;\n        var i = 0, cursorIndex = 0;\n\n        if (selections === undefined || selections.length === 0){\n            selections = [{cursor: null}];\n        }\n\n        for (var i = 0, n = selections.length; i < n; i++) {\n            var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n            if ((pixelPos.top > config.height + config.offset ||\n                 pixelPos.top < 0) && i > 1) {\n                continue;\n            }\n\n            var style = (this.cursors[cursorIndex++] || this.addCursor()).style;\n            \n            if (!this.drawCursor) {\n                style.left = pixelPos.left + \"px\";\n                style.top = pixelPos.top + \"px\";\n                style.width = config.characterWidth + \"px\";\n                style.height = config.lineHeight + \"px\";\n            } else {\n                this.drawCursor(style, pixelPos, config, selections[i], this.session);\n            }\n        }\n        while (this.cursors.length > cursorIndex)\n            this.removeCursor();\n\n        var overwrite = this.session.getOverwrite();\n        this.$setOverwrite(overwrite);\n        this.$pixelPos = pixelPos;\n        this.restartTimer();\n    };\n    \n    this.drawCursor = null;\n\n    this.$setOverwrite = function(overwrite) {\n        if (overwrite != this.overwrite) {\n            this.overwrite = overwrite;\n            if (overwrite)\n                dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n            else\n                dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n        }\n    };\n\n    this.destroy = function() {\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeoutId);\n    };\n\n}).call(Cursor.prototype);\n\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function(parent) {\n    this.element = dom.createElement(\"div\");\n    this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\n    this.inner = dom.createElement(\"div\");\n    this.inner.className = \"ace_scrollbar-inner\";\n    this.element.appendChild(this.inner);\n\n    parent.appendChild(this.element);\n\n    this.setVisible(false);\n    this.skipEvent = false;\n\n    event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n    event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n\n    this.setVisible = function(isVisible) {\n        this.element.style.display = isVisible ? \"\" : \"none\";\n        this.isVisible = isVisible;\n        this.coeff = 1;\n    };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollTop = 0;\n    this.scrollHeight = 0;\n    renderer.$scrollbarWidth = \n    this.width = dom.scrollbarWidth(parent.ownerDocument);\n    this.inner.style.width =\n    this.element.style.width = (this.width || 15) + 5 + \"px\";\n};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n    this.classSuffix = '-v';\n    this.onScroll = function() {\n        if (!this.skipEvent) {\n            this.scrollTop = this.element.scrollTop;\n            if (this.coeff != 1) {\n                var h = this.element.clientHeight / this.scrollHeight;\n                this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n            }\n            this._emit(\"scroll\", {data: this.scrollTop});\n        }\n        this.skipEvent = false;\n    };\n    this.getWidth = function() {\n        return this.isVisible ? this.width : 0;\n    };\n    this.setHeight = function(height) {\n        this.element.style.height = height + \"px\";\n    };\n    this.setInnerHeight = \n    this.setScrollHeight = function(height) {\n        this.scrollHeight = height;\n        if (height > MAX_SCROLL_H) {\n            this.coeff = MAX_SCROLL_H / height;\n            height = MAX_SCROLL_H;\n        } else if (this.coeff != 1) {\n            this.coeff = 1\n        }\n        this.inner.style.height = height + \"px\";\n    };\n    this.setScrollTop = function(scrollTop) {\n        if (this.scrollTop != scrollTop) {\n            this.skipEvent = true;\n            this.scrollTop = scrollTop;\n            this.element.scrollTop = scrollTop * this.coeff;\n        }\n    };\n\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n    ScrollBar.call(this, parent);\n    this.scrollLeft = 0;\n    this.height = renderer.$scrollbarWidth;\n    this.inner.style.height =\n    this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n    this.classSuffix = '-h';\n    this.onScroll = function() {\n        if (!this.skipEvent) {\n            this.scrollLeft = this.element.scrollLeft;\n            this._emit(\"scroll\", {data: this.scrollLeft});\n        }\n        this.skipEvent = false;\n    };\n    this.getHeight = function() {\n        return this.isVisible ? this.height : 0;\n    };\n    this.setWidth = function(width) {\n        this.element.style.width = width + \"px\";\n    };\n    this.setInnerWidth = function(width) {\n        this.inner.style.width = width + \"px\";\n    };\n    this.setScrollWidth = function(width) {\n        this.inner.style.width = width + \"px\";\n    };\n    this.setScrollLeft = function(scrollLeft) {\n        if (this.scrollLeft != scrollLeft) {\n            this.skipEvent = true;\n            this.scrollLeft = this.element.scrollLeft = scrollLeft;\n        }\n    };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"./lib/event\");\n\n\nvar RenderLoop = function(onRender, win) {\n    this.onRender = onRender;\n    this.pending = false;\n    this.changes = 0;\n    this.window = win || window;\n};\n\n(function() {\n\n\n    this.schedule = function(change) {\n        this.changes = this.changes | change;\n        if (!this.pending && this.changes) {\n            this.pending = true;\n            var _self = this;\n            event.nextFrame(function() {\n                _self.pending = false;\n                var changes;\n                while (changes = _self.changes) {\n                    _self.changes = 0;\n                    _self.onRender(changes);\n                }\n            }, this.window);\n        }\n    };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CHAR_COUNT = 0;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n    this.el = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.el.style, true);\n    \n    this.$main = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$main.style);\n    \n    this.$measureNode = dom.createElement(\"div\");\n    this.$setMeasureNodeStyles(this.$measureNode.style);\n    \n    \n    this.el.appendChild(this.$main);\n    this.el.appendChild(this.$measureNode);\n    parentEl.appendChild(this.el);\n    \n    if (!CHAR_COUNT)\n        this.$testFractionalRect();\n    this.$measureNode.innerHTML = lang.stringRepeat(\"X\", CHAR_COUNT);\n    \n    this.$characterSize = {width: 0, height: 0};\n    this.checkForSizeChanges();\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n        \n    this.$characterSize = {width: 0, height: 0};\n    \n    this.$testFractionalRect = function() {\n        var el = dom.createElement(\"div\");\n        this.$setMeasureNodeStyles(el.style);\n        el.style.width = \"0.2px\";\n        document.documentElement.appendChild(el);\n        var w = el.getBoundingClientRect().width;\n        if (w > 0 && w < 1)\n            CHAR_COUNT = 50;\n        else\n            CHAR_COUNT = 100;\n        el.parentNode.removeChild(el);\n    };\n    \n    this.$setMeasureNodeStyles = function(style, isRoot) {\n        style.width = style.height = \"auto\";\n        style.left = style.top = \"0px\";\n        style.visibility = \"hidden\";\n        style.position = \"absolute\";\n        style.whiteSpace = \"pre\";\n\n        if (useragent.isIE < 8) {\n            style[\"font-family\"] = \"inherit\";\n        } else {\n            style.font = \"inherit\";\n        }\n        style.overflow = isRoot ? \"hidden\" : \"visible\";\n    };\n\n    this.checkForSizeChanges = function() {\n        var size = this.$measureSizes();\n        if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n            this.$measureNode.style.fontWeight = \"bold\";\n            var boldSize = this.$measureSizes();\n            this.$measureNode.style.fontWeight = \"\";\n            this.$characterSize = size;\n            this.charSizes = Object.create(null);\n            this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n            this._emit(\"changeCharacterSize\", {data: size});\n        }\n    };\n\n    this.$pollSizeChanges = function() {\n        if (this.$pollSizeChangesTimer)\n            return this.$pollSizeChangesTimer;\n        var self = this;\n        return this.$pollSizeChangesTimer = setInterval(function() {\n            self.checkForSizeChanges();\n        }, 500);\n    };\n    \n    this.setPolling = function(val) {\n        if (val) {\n            this.$pollSizeChanges();\n        } else if (this.$pollSizeChangesTimer) {\n            clearInterval(this.$pollSizeChangesTimer);\n            this.$pollSizeChangesTimer = 0;\n        }\n    };\n\n    this.$measureSizes = function() {\n        if (CHAR_COUNT === 50) {\n            var rect = null;\n            try { \n               rect = this.$measureNode.getBoundingClientRect();\n            } catch(e) {\n               rect = {width: 0, height:0 };\n            }\n            var size = {\n                height: rect.height,\n                width: rect.width / CHAR_COUNT\n            };\n        } else {\n            var size = {\n                height: this.$measureNode.clientHeight,\n                width: this.$measureNode.clientWidth / CHAR_COUNT\n            };\n        }\n        if (size.width === 0 || size.height === 0)\n            return null;\n        return size;\n    };\n\n    this.$measureCharWidth = function(ch) {\n        this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT);\n        var rect = this.$main.getBoundingClientRect();\n        return rect.width / CHAR_COUNT;\n    };\n    \n    this.getCharacterWidth = function(ch) {\n        var w = this.charSizes[ch];\n        if (w === undefined) {\n            w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n        }\n        return w;\n    };\n\n    this.destroy = function() {\n        clearInterval(this.$pollSizeChangesTimer);\n        if (this.el && this.el.parentNode)\n            this.el.parentNode.removeChild(this.el);\n    };\n\n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar config = require(\"./config\");\nvar useragent = require(\"./lib/useragent\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \".ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ntext-indent: -1em;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: inherit;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\ntext-indent: 0;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\n-webkit-transition: opacity 0.18s;\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_editor.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\n-moz-box-sizing: border-box;\\\n-webkit-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block;   \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\n-webkit-transition: opacity 0.4s ease 0.05s;\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\n-webkit-transition: opacity 0.05s ease 0.05s;\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_br1 {border-top-left-radius    : 3px;}\\\n.ace_br2 {border-top-right-radius   : 3px;}\\\n.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}\\\n.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}\\\n.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\\n.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\\n.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}\\\n.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n\";\n\ndom.importCssString(editorCss, \"ace_editor.css\");\n\nvar VirtualRenderer = function(container, theme) {\n    var _self = this;\n\n    this.container = container || dom.createElement(\"div\");\n    this.$keepTextAreaAtCursor = !useragent.isOldIE;\n\n    dom.addCssClass(this.container, \"ace_editor\");\n\n    this.setTheme(theme);\n\n    this.$gutter = dom.createElement(\"div\");\n    this.$gutter.className = \"ace_gutter\";\n    this.container.appendChild(this.$gutter);\n\n    this.scroller = dom.createElement(\"div\");\n    this.scroller.className = \"ace_scroller\";\n    this.container.appendChild(this.scroller);\n\n    this.content = dom.createElement(\"div\");\n    this.content.className = \"ace_content\";\n    this.scroller.appendChild(this.content);\n\n    this.$gutterLayer = new GutterLayer(this.$gutter);\n    this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n    this.$markerBack = new MarkerLayer(this.content);\n\n    var textLayer = this.$textLayer = new TextLayer(this.content);\n    this.canvas = textLayer.element;\n\n    this.$markerFront = new MarkerLayer(this.content);\n\n    this.$cursorLayer = new CursorLayer(this.content);\n    this.$horizScroll = false;\n    this.$vScroll = false;\n\n    this.scrollBar = \n    this.scrollBarV = new VScrollBar(this.container, this);\n    this.scrollBarH = new HScrollBar(this.container, this);\n    this.scrollBarV.addEventListener(\"scroll\", function(e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n    });\n    this.scrollBarH.addEventListener(\"scroll\", function(e) {\n        if (!_self.$scrollAnimation)\n            _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n    });\n\n    this.scrollTop = 0;\n    this.scrollLeft = 0;\n\n    this.cursorPos = {\n        row : 0,\n        column : 0\n    };\n\n    this.$fontMetrics = new FontMetrics(this.container);\n    this.$textLayer.$setFontMetrics(this.$fontMetrics);\n    this.$textLayer.addEventListener(\"changeCharacterSize\", function(e) {\n        _self.updateCharacterSize();\n        _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n        _self._signal(\"changeCharacterSize\", e);\n    });\n\n    this.$size = {\n        width: 0,\n        height: 0,\n        scrollerHeight: 0,\n        scrollerWidth: 0,\n        $dirty: true\n    };\n\n    this.layerConfig = {\n        width : 1,\n        padding : 0,\n        firstRow : 0,\n        firstRowScreen: 0,\n        lastRow : 0,\n        lineHeight : 0,\n        characterWidth : 0,\n        minHeight : 1,\n        maxHeight : 1,\n        offset : 0,\n        height : 1,\n        gutterOffset: 1\n    };\n    \n    this.scrollMargin = {\n        left: 0,\n        right: 0,\n        top: 0,\n        bottom: 0,\n        v: 0,\n        h: 0\n    };\n\n    this.$loop = new RenderLoop(\n        this.$renderChanges.bind(this),\n        this.container.ownerDocument.defaultView\n    );\n    this.$loop.schedule(this.CHANGE_FULL);\n\n    this.updateCharacterSize();\n    this.setPadding(4);\n    config.resetOptions(this);\n    config._emit(\"renderer\", this);\n};\n\n(function() {\n\n    this.CHANGE_CURSOR = 1;\n    this.CHANGE_MARKER = 2;\n    this.CHANGE_GUTTER = 4;\n    this.CHANGE_SCROLL = 8;\n    this.CHANGE_LINES = 16;\n    this.CHANGE_TEXT = 32;\n    this.CHANGE_SIZE = 64;\n    this.CHANGE_MARKER_BACK = 128;\n    this.CHANGE_MARKER_FRONT = 256;\n    this.CHANGE_FULL = 512;\n    this.CHANGE_H_SCROLL = 1024;\n\n    oop.implement(this, EventEmitter);\n\n    this.updateCharacterSize = function() {\n        if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n            this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n            this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n        }\n\n        this.layerConfig.characterWidth =\n        this.characterWidth = this.$textLayer.getCharacterWidth();\n        this.layerConfig.lineHeight =\n        this.lineHeight = this.$textLayer.getLineHeight();\n        this.$updatePrintMargin();\n    };\n    this.setSession = function(session) {\n        if (this.session)\n            this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n            \n        this.session = session;\n        if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n            session.setScrollTop(-this.scrollMargin.top);\n\n        this.$cursorLayer.setSession(session);\n        this.$markerBack.setSession(session);\n        this.$markerFront.setSession(session);\n        this.$gutterLayer.setSession(session);\n        this.$textLayer.setSession(session);\n        if (!session)\n            return;\n        \n        this.$loop.schedule(this.CHANGE_FULL);\n        this.session.$setFontMetrics(this.$fontMetrics);\n        this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n        \n        this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n        this.onChangeNewLineMode()\n        this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n    };\n    this.updateLines = function(firstRow, lastRow, force) {\n        if (lastRow === undefined)\n            lastRow = Infinity;\n\n        if (!this.$changedLines) {\n            this.$changedLines = {\n                firstRow: firstRow,\n                lastRow: lastRow\n            };\n        }\n        else {\n            if (this.$changedLines.firstRow > firstRow)\n                this.$changedLines.firstRow = firstRow;\n\n            if (this.$changedLines.lastRow < lastRow)\n                this.$changedLines.lastRow = lastRow;\n        }\n        if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n            if (force)\n                this.$changedLines.lastRow = this.layerConfig.lastRow;\n            else\n                return;\n        }\n        if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n            return;\n        this.$loop.schedule(this.CHANGE_LINES);\n    };\n\n    this.onChangeNewLineMode = function() {\n        this.$loop.schedule(this.CHANGE_TEXT);\n        this.$textLayer.$updateEolChar();\n    };\n    \n    this.onChangeTabSize = function() {\n        this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n        this.$textLayer.onChangeTabSize();\n    };\n    this.updateText = function() {\n        this.$loop.schedule(this.CHANGE_TEXT);\n    };\n    this.updateFull = function(force) {\n        if (force)\n            this.$renderChanges(this.CHANGE_FULL, true);\n        else\n            this.$loop.schedule(this.CHANGE_FULL);\n    };\n    this.updateFontSize = function() {\n        this.$textLayer.checkForSizeChanges();\n    };\n\n    this.$changes = 0;\n    this.$updateSizeAsync = function() {\n        if (this.$loop.pending)\n            this.$size.$dirty = true;\n        else\n            this.onResize();\n    };\n    this.onResize = function(force, gutterWidth, width, height) {\n        if (this.resizing > 2)\n            return;\n        else if (this.resizing > 0)\n            this.resizing++;\n        else\n            this.resizing = force ? 1 : 0;\n        var el = this.container;\n        if (!height)\n            height = el.clientHeight || el.scrollHeight;\n        if (!width)\n            width = el.clientWidth || el.scrollWidth;\n        var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n\n        \n        if (!this.$size.scrollerHeight || (!width && !height))\n            return this.resizing = 0;\n\n        if (force)\n            this.$gutterLayer.$padding = null;\n\n        if (force)\n            this.$renderChanges(changes | this.$changes, true);\n        else\n            this.$loop.schedule(changes | this.$changes);\n\n        if (this.resizing)\n            this.resizing = 0;\n        this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null;\n    };\n    \n    this.$updateCachedSize = function(force, gutterWidth, width, height) {\n        height -= (this.$extraHeight || 0);\n        var changes = 0;\n        var size = this.$size;\n        var oldSize = {\n            width: size.width,\n            height: size.height,\n            scrollerHeight: size.scrollerHeight,\n            scrollerWidth: size.scrollerWidth\n        };\n        if (height && (force || size.height != height)) {\n            size.height = height;\n            changes |= this.CHANGE_SIZE;\n\n            size.scrollerHeight = size.height;\n            if (this.$horizScroll)\n                size.scrollerHeight -= this.scrollBarH.getHeight();\n            this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n            changes = changes | this.CHANGE_SCROLL;\n        }\n\n        if (width && (force || size.width != width)) {\n            changes |= this.CHANGE_SIZE;\n            size.width = width;\n            \n            if (gutterWidth == null)\n                gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n            \n            this.gutterWidth = gutterWidth;\n            \n            this.scrollBarH.element.style.left = \n            this.scroller.style.left = gutterWidth + \"px\";\n            size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth());           \n            \n            this.scrollBarH.element.style.right = \n            this.scroller.style.right = this.scrollBarV.getWidth() + \"px\";\n            this.scroller.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n            if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force)\n                changes |= this.CHANGE_FULL;\n        }\n        \n        size.$dirty = !width || !height;\n\n        if (changes)\n            this._signal(\"resize\", oldSize);\n\n        return changes;\n    };\n\n    this.onGutterResize = function() {\n        var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n        if (gutterWidth != this.gutterWidth)\n            this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n        if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        } else if (this.$size.$dirty) {\n            this.$loop.schedule(this.CHANGE_FULL);\n        } else {\n            this.$computeLayerConfig();\n            this.$loop.schedule(this.CHANGE_MARKER);\n        }\n    };\n    this.adjustWrapLimit = function() {\n        var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n        var limit = Math.floor(availableWidth / this.characterWidth);\n        return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n    };\n    this.setAnimatedScroll = function(shouldAnimate){\n        this.setOption(\"animatedScroll\", shouldAnimate);\n    };\n    this.getAnimatedScroll = function() {\n        return this.$animatedScroll;\n    };\n    this.setShowInvisibles = function(showInvisibles) {\n        this.setOption(\"showInvisibles\", showInvisibles);\n    };\n    this.getShowInvisibles = function() {\n        return this.getOption(\"showInvisibles\");\n    };\n    this.getDisplayIndentGuides = function() {\n        return this.getOption(\"displayIndentGuides\");\n    };\n\n    this.setDisplayIndentGuides = function(display) {\n        this.setOption(\"displayIndentGuides\", display);\n    };\n    this.setShowPrintMargin = function(showPrintMargin) {\n        this.setOption(\"showPrintMargin\", showPrintMargin);\n    };\n    this.getShowPrintMargin = function() {\n        return this.getOption(\"showPrintMargin\");\n    };\n    this.setPrintMarginColumn = function(showPrintMargin) {\n        this.setOption(\"printMarginColumn\", showPrintMargin);\n    };\n    this.getPrintMarginColumn = function() {\n        return this.getOption(\"printMarginColumn\");\n    };\n    this.getShowGutter = function(){\n        return this.getOption(\"showGutter\");\n    };\n    this.setShowGutter = function(show){\n        return this.setOption(\"showGutter\", show);\n    };\n\n    this.getFadeFoldWidgets = function(){\n        return this.getOption(\"fadeFoldWidgets\")\n    };\n\n    this.setFadeFoldWidgets = function(show) {\n        this.setOption(\"fadeFoldWidgets\", show);\n    };\n\n    this.setHighlightGutterLine = function(shouldHighlight) {\n        this.setOption(\"highlightGutterLine\", shouldHighlight);\n    };\n\n    this.getHighlightGutterLine = function() {\n        return this.getOption(\"highlightGutterLine\");\n    };\n\n    this.$updateGutterLineHighlight = function() {\n        var pos = this.$cursorLayer.$pixelPos;\n        var height = this.layerConfig.lineHeight;\n        if (this.session.getUseWrapMode()) {\n            var cursor = this.session.selection.getCursor();\n            cursor.column = 0;\n            pos = this.$cursorLayer.getPixelPosition(cursor, true);\n            height *= this.session.getRowLength(cursor.row);\n        }\n        this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + \"px\";\n        this.$gutterLineHighlight.style.height = height + \"px\";\n    };\n\n    this.$updatePrintMargin = function() {\n        if (!this.$showPrintMargin && !this.$printMarginEl)\n            return;\n\n        if (!this.$printMarginEl) {\n            var containerEl = dom.createElement(\"div\");\n            containerEl.className = \"ace_layer ace_print-margin-layer\";\n            this.$printMarginEl = dom.createElement(\"div\");\n            this.$printMarginEl.className = \"ace_print-margin\";\n            containerEl.appendChild(this.$printMarginEl);\n            this.content.insertBefore(containerEl, this.content.firstChild);\n        }\n\n        var style = this.$printMarginEl.style;\n        style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + \"px\";\n        style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n        \n        if (this.session && this.session.$wrap == -1)\n            this.adjustWrapLimit();\n    };\n    this.getContainerElement = function() {\n        return this.container;\n    };\n    this.getMouseEventTarget = function() {\n        return this.scroller;\n    };\n    this.getTextAreaContainer = function() {\n        return this.container;\n    };\n    this.$moveTextAreaToCursor = function() {\n        if (!this.$keepTextAreaAtCursor)\n            return;\n        var config = this.layerConfig;\n        var posTop = this.$cursorLayer.$pixelPos.top;\n        var posLeft = this.$cursorLayer.$pixelPos.left;\n        posTop -= config.offset;\n\n        var style = this.textarea.style;\n        var h = this.lineHeight;\n        if (posTop < 0 || posTop > config.height - h) {\n            style.top = style.left = \"0\";\n            return;\n        }\n\n        var w = this.characterWidth;\n        if (this.$composition) {\n            var val = this.textarea.value.replace(/^\\x01+/, \"\");\n            w *= (this.session.$getStringScreenWidth(val)[0]+2);\n            h += 2;\n        }\n        posLeft -= this.scrollLeft;\n        if (posLeft > this.$size.scrollerWidth - w)\n            posLeft = this.$size.scrollerWidth - w;\n\n        posLeft += this.gutterWidth;\n        style.height = h + \"px\";\n        style.width = w + \"px\";\n        style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + \"px\";\n        style.top = Math.min(posTop, this.$size.height - h) + \"px\";\n    };\n    this.getFirstVisibleRow = function() {\n        return this.layerConfig.firstRow;\n    };\n    this.getFirstFullyVisibleRow = function() {\n        return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n    };\n    this.getLastFullyVisibleRow = function() {\n        var config = this.layerConfig;\n        var lastRow = config.lastRow\n        var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n        if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n            return lastRow - 1;\n        return lastRow;\n    };\n    this.getLastVisibleRow = function() {\n        return this.layerConfig.lastRow;\n    };\n\n    this.$padding = null;\n    this.setPadding = function(padding) {\n        this.$padding = padding;\n        this.$textLayer.setPadding(padding);\n        this.$cursorLayer.setPadding(padding);\n        this.$markerFront.setPadding(padding);\n        this.$markerBack.setPadding(padding);\n        this.$loop.schedule(this.CHANGE_FULL);\n        this.$updatePrintMargin();\n    };\n    \n    this.setScrollMargin = function(top, bottom, left, right) {\n        var sm = this.scrollMargin;\n        sm.top = top|0;\n        sm.bottom = bottom|0;\n        sm.right = right|0;\n        sm.left = left|0;\n        sm.v = sm.top + sm.bottom;\n        sm.h = sm.left + sm.right;\n        if (sm.top && this.scrollTop <= 0 && this.session)\n            this.session.setScrollTop(-sm.top);\n        this.updateFull();\n    };\n    this.getHScrollBarAlwaysVisible = function() {\n        return this.$hScrollBarAlwaysVisible;\n    };\n    this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n        this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n    };\n    this.getVScrollBarAlwaysVisible = function() {\n        return this.$vScrollBarAlwaysVisible;\n    };\n    this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n        this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n    };\n\n    this.$updateScrollBarV = function() {\n        var scrollHeight = this.layerConfig.maxHeight;\n        var scrollerHeight = this.$size.scrollerHeight;\n        if (!this.$maxLines && this.$scrollPastEnd) {\n            scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n            if (this.scrollTop > scrollHeight - scrollerHeight) {\n                scrollHeight = this.scrollTop + scrollerHeight;\n                this.scrollBarV.scrollTop = null;\n            }\n        }\n        this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n        this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n    };\n    this.$updateScrollBarH = function() {\n        this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n        this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n    };\n    \n    this.$frozen = false;\n    this.freeze = function() {\n        this.$frozen = true;\n    };\n    \n    this.unfreeze = function() {\n        this.$frozen = false;\n    };\n\n    this.$renderChanges = function(changes, force) {\n        if (this.$changes) {\n            changes |= this.$changes;\n            this.$changes = 0;\n        }\n        if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n            this.$changes |= changes;\n            return; \n        } \n        if (this.$size.$dirty) {\n            this.$changes |= changes;\n            return this.onResize(true);\n        }\n        if (!this.lineHeight) {\n            this.$textLayer.checkForSizeChanges();\n        }\n        \n        this._signal(\"beforeRender\");\n        var config = this.layerConfig;\n        if (changes & this.CHANGE_FULL ||\n            changes & this.CHANGE_SIZE ||\n            changes & this.CHANGE_TEXT ||\n            changes & this.CHANGE_LINES ||\n            changes & this.CHANGE_SCROLL ||\n            changes & this.CHANGE_H_SCROLL\n        ) {\n            changes |= this.$computeLayerConfig();\n            if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n                var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n                if (st > 0) {\n                    this.scrollTop = st;\n                    changes = changes | this.CHANGE_SCROLL;\n                    changes |= this.$computeLayerConfig();\n                }\n            }\n            config = this.layerConfig;\n            this.$updateScrollBarV();\n            if (changes & this.CHANGE_H_SCROLL)\n                this.$updateScrollBarH();\n            this.$gutterLayer.element.style.marginTop = (-config.offset) + \"px\";\n            this.content.style.marginTop = (-config.offset) + \"px\";\n            this.content.style.width = config.width + 2 * this.$padding + \"px\";\n            this.content.style.height = config.minHeight + \"px\";\n        }\n        if (changes & this.CHANGE_H_SCROLL) {\n            this.content.style.marginLeft = -this.scrollLeft + \"px\";\n            this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n        }\n        if (changes & this.CHANGE_FULL) {\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this.$highlightGutterLine && this.$updateGutterLineHighlight();\n            this._signal(\"afterRender\");\n            return;\n        }\n        if (changes & this.CHANGE_SCROLL) {\n            if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n                this.$textLayer.update(config);\n            else\n                this.$textLayer.scrollLines(config);\n\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n            this.$markerBack.update(config);\n            this.$markerFront.update(config);\n            this.$cursorLayer.update(config);\n            this.$highlightGutterLine && this.$updateGutterLineHighlight();\n            this.$moveTextAreaToCursor();\n            this._signal(\"afterRender\");\n            return;\n        }\n\n        if (changes & this.CHANGE_TEXT) {\n            this.$textLayer.update(config);\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_LINES) {\n            if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n        else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(config);\n        }\n\n        if (changes & this.CHANGE_CURSOR) {\n            this.$cursorLayer.update(config);\n            this.$moveTextAreaToCursor();\n            this.$highlightGutterLine && this.$updateGutterLineHighlight();\n        }\n\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n            this.$markerFront.update(config);\n        }\n\n        if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n            this.$markerBack.update(config);\n        }\n\n        this._signal(\"afterRender\");\n    };\n\n    \n    this.$autosize = function() {\n        var height = this.session.getScreenLength() * this.lineHeight;\n        var maxHeight = this.$maxLines * this.lineHeight;\n        var desiredHeight = Math.min(maxHeight, \n            Math.max((this.$minLines || 1) * this.lineHeight, height)\n        ) + this.scrollMargin.v + (this.$extraHeight || 0);\n        if (this.$horizScroll)\n            desiredHeight += this.scrollBarH.getHeight();\n        if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n            desiredHeight = this.$maxPixelHeight;\n        var vScroll = height > maxHeight;\n        \n        if (desiredHeight != this.desiredHeight ||\n            this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n            if (vScroll != this.$vScroll) {\n                this.$vScroll = vScroll;\n                this.scrollBarV.setVisible(vScroll);\n            }\n            \n            var w = this.container.clientWidth;\n            this.container.style.height = desiredHeight + \"px\";\n            this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n            this.desiredHeight = desiredHeight;\n            \n            this._signal(\"autosize\");\n        }\n    };\n    \n    this.$computeLayerConfig = function() {\n        var session = this.session;\n        var size = this.$size;\n        \n        var hideScrollbars = size.height <= 2 * this.lineHeight;\n        var screenLines = this.session.getScreenLength();\n        var maxHeight = screenLines * this.lineHeight;\n\n        var longestLine = this.$getLongestLine();\n        \n        var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n            size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\n        var hScrollChanged = this.$horizScroll !== horizScroll;\n        if (hScrollChanged) {\n            this.$horizScroll = horizScroll;\n            this.scrollBarH.setVisible(horizScroll);\n        }\n        var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n        if (this.$maxLines && this.lineHeight > 1)\n            this.$autosize();\n\n        var offset = this.scrollTop % this.lineHeight;\n        var minHeight = size.scrollerHeight + this.lineHeight;\n        \n        var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n            ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n            : 0;\n        maxHeight += scrollPastEnd;\n        \n        var sm = this.scrollMargin;\n        this.session.setScrollTop(Math.max(-sm.top,\n            Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n        this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n            longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n        \n        var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n            size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n        var vScrollChanged = vScrollBefore !== vScroll;\n        if (vScrollChanged) {\n            this.$vScroll = vScroll;\n            this.scrollBarV.setVisible(vScroll);\n        }\n\n        var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n        var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n        var lastRow = firstRow + lineCount;\n        var firstRowScreen, firstRowHeight;\n        var lineHeight = this.lineHeight;\n        firstRow = session.screenToDocumentRow(firstRow, 0);\n        var foldLine = session.getFoldLine(firstRow);\n        if (foldLine) {\n            firstRow = foldLine.start.row;\n        }\n\n        firstRowScreen = session.documentToScreenRow(firstRow, 0);\n        firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n        lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n        minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n                                                firstRowHeight;\n\n        offset = this.scrollTop - firstRowScreen * lineHeight;\n\n        var changes = 0;\n        if (this.layerConfig.width != longestLine) \n            changes = this.CHANGE_H_SCROLL;\n        if (hScrollChanged || vScrollChanged) {\n            changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n            this._signal(\"scrollbarVisibilityChanged\");\n            if (vScrollChanged)\n                longestLine = this.$getLongestLine();\n        }\n        \n        this.layerConfig = {\n            width : longestLine,\n            padding : this.$padding,\n            firstRow : firstRow,\n            firstRowScreen: firstRowScreen,\n            lastRow : lastRow,\n            lineHeight : lineHeight,\n            characterWidth : this.characterWidth,\n            minHeight : minHeight,\n            maxHeight : maxHeight,\n            offset : offset,\n            gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n            height : this.$size.scrollerHeight\n        };\n\n        return changes;\n    };\n\n    this.$updateLines = function() {\n        var firstRow = this.$changedLines.firstRow;\n        var lastRow = this.$changedLines.lastRow;\n        this.$changedLines = null;\n\n        var layerConfig = this.layerConfig;\n\n        if (firstRow > layerConfig.lastRow + 1) { return; }\n        if (lastRow < layerConfig.firstRow) { return; }\n        if (lastRow === Infinity) {\n            if (this.$showGutter)\n                this.$gutterLayer.update(layerConfig);\n            this.$textLayer.update(layerConfig);\n            return;\n        }\n        this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n        return true;\n    };\n\n    this.$getLongestLine = function() {\n        var charCount = this.session.getScreenWidth();\n        if (this.showInvisibles && !this.session.$useWrapMode)\n            charCount += 1;\n\n        return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n    };\n    this.updateFrontMarkers = function() {\n        this.$markerFront.setMarkers(this.session.getMarkers(true));\n        this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n    };\n    this.updateBackMarkers = function() {\n        this.$markerBack.setMarkers(this.session.getMarkers());\n        this.$loop.schedule(this.CHANGE_MARKER_BACK);\n    };\n    this.addGutterDecoration = function(row, className){\n        this.$gutterLayer.addGutterDecoration(row, className);\n    };\n    this.removeGutterDecoration = function(row, className){\n        this.$gutterLayer.removeGutterDecoration(row, className);\n    };\n    this.updateBreakpoints = function(rows) {\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    this.setAnnotations = function(annotations) {\n        this.$gutterLayer.setAnnotations(annotations);\n        this.$loop.schedule(this.CHANGE_GUTTER);\n    };\n    this.updateCursor = function() {\n        this.$loop.schedule(this.CHANGE_CURSOR);\n    };\n    this.hideCursor = function() {\n        this.$cursorLayer.hideCursor();\n    };\n    this.showCursor = function() {\n        this.$cursorLayer.showCursor();\n    };\n\n    this.scrollSelectionIntoView = function(anchor, lead, offset) {\n        this.scrollCursorIntoView(anchor, offset);\n        this.scrollCursorIntoView(lead, offset);\n    };\n    this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n        if (this.$size.scrollerHeight === 0)\n            return;\n\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n        var left = pos.left;\n        var top = pos.top;\n        \n        var topMargin = $viewMargin && $viewMargin.top || 0;\n        var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n        \n        var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n        \n        if (scrollTop + topMargin > top) {\n            if (offset && scrollTop + topMargin > top + this.lineHeight)\n                top -= offset * this.$size.scrollerHeight;\n            if (top === 0)\n                top = -this.scrollMargin.top;\n            this.session.setScrollTop(top);\n        } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n            if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top -  this.lineHeight)\n                top += offset * this.$size.scrollerHeight;\n            this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight);\n        }\n\n        var scrollLeft = this.scrollLeft;\n\n        if (scrollLeft > left) {\n            if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n                left = -this.scrollMargin.left;\n            this.session.setScrollLeft(left);\n        } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n            this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n        } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n            this.session.setScrollLeft(0);\n        }\n    };\n    this.getScrollTop = function() {\n        return this.session.getScrollTop();\n    };\n    this.getScrollLeft = function() {\n        return this.session.getScrollLeft();\n    };\n    this.getScrollTopRow = function() {\n        return this.scrollTop / this.lineHeight;\n    };\n    this.getScrollBottomRow = function() {\n        return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n    };\n    this.scrollToRow = function(row) {\n        this.session.setScrollTop(row * this.lineHeight);\n    };\n\n    this.alignCursor = function(cursor, alignment) {\n        if (typeof cursor == \"number\")\n            cursor = {row: cursor, column: 0};\n\n        var pos = this.$cursorLayer.getPixelPosition(cursor);\n        var h = this.$size.scrollerHeight - this.lineHeight;\n        var offset = pos.top - h * (alignment || 0);\n\n        this.session.setScrollTop(offset);\n        return offset;\n    };\n\n    this.STEPS = 8;\n    this.$calcSteps = function(fromValue, toValue){\n        var i = 0;\n        var l = this.STEPS;\n        var steps = [];\n\n        var func  = function(t, x_min, dx) {\n            return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n        };\n\n        for (i = 0; i < l; ++i)\n            steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n        return steps;\n    };\n    this.scrollToLine = function(line, center, animate, callback) {\n        var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0});\n        var offset = pos.top;\n        if (center)\n            offset -= this.$size.scrollerHeight / 2;\n\n        var initialScroll = this.scrollTop;\n        this.session.setScrollTop(offset);\n        if (animate !== false)\n            this.animateScrolling(initialScroll, callback);\n    };\n\n    this.animateScrolling = function(fromValue, callback) {\n        var toValue = this.scrollTop;\n        if (!this.$animatedScroll)\n            return;\n        var _self = this;\n        \n        if (fromValue == toValue)\n            return;\n        \n        if (this.$scrollAnimation) {\n            var oldSteps = this.$scrollAnimation.steps;\n            if (oldSteps.length) {\n                fromValue = oldSteps[0];\n                if (fromValue == toValue)\n                    return;\n            }\n        }\n        \n        var steps = _self.$calcSteps(fromValue, toValue);\n        this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n        clearInterval(this.$timer);\n\n        _self.session.setScrollTop(steps.shift());\n        _self.session.$scrollTop = toValue;\n        this.$timer = setInterval(function() {\n            if (steps.length) {\n                _self.session.setScrollTop(steps.shift());\n                _self.session.$scrollTop = toValue;\n            } else if (toValue != null) {\n                _self.session.$scrollTop = -1;\n                _self.session.setScrollTop(toValue);\n                toValue = null;\n            } else {\n                _self.$timer = clearInterval(_self.$timer);\n                _self.$scrollAnimation = null;\n                callback && callback();\n            }\n        }, 10);\n    };\n    this.scrollToY = function(scrollTop) {\n        if (this.scrollTop !== scrollTop) {\n            this.$loop.schedule(this.CHANGE_SCROLL);\n            this.scrollTop = scrollTop;\n        }\n    };\n    this.scrollToX = function(scrollLeft) {\n        if (this.scrollLeft !== scrollLeft)\n            this.scrollLeft = scrollLeft;\n        this.$loop.schedule(this.CHANGE_H_SCROLL);\n    };\n    this.scrollTo = function(x, y) {\n        this.session.setScrollTop(y);\n        this.session.setScrollLeft(y);\n    };\n    this.scrollBy = function(deltaX, deltaY) {\n        deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n        deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n    };\n    this.isScrollableBy = function(deltaX, deltaY) {\n        if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n           return true;\n        if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n            - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n           return true;\n        if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n            return true;\n        if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n            - this.layerConfig.width < -1 + this.scrollMargin.right)\n           return true;\n    };\n\n    this.pixelToScreenCoordinates = function(x, y) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n\n        var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth;\n        var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n        var col = Math.round(offset);\n\n        return {row: row, column: col, side: offset - col > 0 ? 1 : -1};\n    };\n\n    this.screenToTextCoordinates = function(x, y) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n\n        var col = Math.round(\n            (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth\n        );\n\n        var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight;\n\n        return this.session.screenToDocumentPosition(row, Math.max(col, 0));\n    };\n    this.textToScreenCoordinates = function(row, column) {\n        var canvasPos = this.scroller.getBoundingClientRect();\n        var pos = this.session.documentToScreenPosition(row, column);\n\n        var x = this.$padding + Math.round(pos.column * this.characterWidth);\n        var y = pos.row * this.lineHeight;\n\n        return {\n            pageX: canvasPos.left + x - this.scrollLeft,\n            pageY: canvasPos.top + y - this.scrollTop\n        };\n    };\n    this.visualizeFocus = function() {\n        dom.addCssClass(this.container, \"ace_focus\");\n    };\n    this.visualizeBlur = function() {\n        dom.removeCssClass(this.container, \"ace_focus\");\n    };\n    this.showComposition = function(position) {\n        if (!this.$composition)\n            this.$composition = {\n                keepTextAreaAtCursor: this.$keepTextAreaAtCursor,\n                cssText: this.textarea.style.cssText\n            };\n\n        this.$keepTextAreaAtCursor = true;\n        dom.addCssClass(this.textarea, \"ace_composition\");\n        this.textarea.style.cssText = \"\";\n        this.$moveTextAreaToCursor();\n    };\n    this.setCompositionText = function(text) {\n        this.$moveTextAreaToCursor();\n    };\n    this.hideComposition = function() {\n        if (!this.$composition)\n            return;\n\n        dom.removeCssClass(this.textarea, \"ace_composition\");\n        this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor;\n        this.textarea.style.cssText = this.$composition.cssText;\n        this.$composition = null;\n    };\n    this.setTheme = function(theme, cb) {\n        var _self = this;\n        this.$themeId = theme;\n        _self._dispatchEvent('themeChange',{theme:theme});\n\n        if (!theme || typeof theme == \"string\") {\n            var moduleName = theme || this.$options.theme.initialValue;\n            config.loadModule([\"theme\", moduleName], afterLoad);\n        } else {\n            afterLoad(theme);\n        }\n\n        function afterLoad(module) {\n            if (_self.$themeId != theme)\n                return cb && cb();\n            if (!module || !module.cssClass)\n                throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n            dom.importCssString(\n                module.cssText,\n                module.cssClass,\n                _self.container.ownerDocument\n            );\n\n            if (_self.theme)\n                dom.removeCssClass(_self.container, _self.theme.cssClass);\n\n            var padding = \"padding\" in module ? module.padding \n                : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n            if (_self.$padding && padding != _self.$padding)\n                _self.setPadding(padding);\n            _self.$theme = module.cssClass;\n\n            _self.theme = module;\n            dom.addCssClass(_self.container, module.cssClass);\n            dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n            if (_self.$size) {\n                _self.$size.width = 0;\n                _self.$updateSizeAsync();\n            }\n\n            _self._dispatchEvent('themeLoaded', {theme:module});\n            cb && cb();\n        }\n    };\n    this.getTheme = function() {\n        return this.$themeId;\n    };\n    this.setStyle = function(style, include) {\n        dom.setCssClass(this.container, style, include !== false);\n    };\n    this.unsetStyle = function(style) {\n        dom.removeCssClass(this.container, style);\n    };\n    \n    this.setCursorStyle = function(style) {\n        if (this.scroller.style.cursor != style)\n            this.scroller.style.cursor = style;\n    };\n    this.setMouseCursor = function(cursorStyle) {\n        this.scroller.style.cursor = cursorStyle;\n    };\n    this.destroy = function() {\n        this.$textLayer.destroy();\n        this.$cursorLayer.destroy();\n    };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n    animatedScroll: {initialValue: false},\n    showInvisibles: {\n        set: function(value) {\n            if (this.$textLayer.setShowInvisibles(value))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: false\n    },\n    showPrintMargin: {\n        set: function() { this.$updatePrintMargin(); },\n        initialValue: true\n    },\n    printMarginColumn: {\n        set: function() { this.$updatePrintMargin(); },\n        initialValue: 80\n    },\n    printMargin: {\n        set: function(val) {\n            if (typeof val == \"number\")\n                this.$printMarginColumn = val;\n            this.$showPrintMargin = !!val;\n            this.$updatePrintMargin();\n        },\n        get: function() {\n            return this.$showPrintMargin && this.$printMarginColumn; \n        }\n    },\n    showGutter: {\n        set: function(show){\n            this.$gutter.style.display = show ? \"block\" : \"none\";\n            this.$loop.schedule(this.CHANGE_FULL);\n            this.onGutterResize();\n        },\n        initialValue: true\n    },\n    fadeFoldWidgets: {\n        set: function(show) {\n            dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n        },\n        initialValue: false\n    },\n    showFoldWidgets: {\n        set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)},\n        initialValue: true\n    },\n    showLineNumbers: {\n        set: function(show) {\n            this.$gutterLayer.setShowLineNumbers(show);\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        },\n        initialValue: true\n    },\n    displayIndentGuides: {\n        set: function(show) {\n            if (this.$textLayer.setDisplayIndentGuides(show))\n                this.$loop.schedule(this.CHANGE_TEXT);\n        },\n        initialValue: true\n    },\n    highlightGutterLine: {\n        set: function(shouldHighlight) {\n            if (!this.$gutterLineHighlight) {\n                this.$gutterLineHighlight = dom.createElement(\"div\");\n                this.$gutterLineHighlight.className = \"ace_gutter-active-line\";\n                this.$gutter.appendChild(this.$gutterLineHighlight);\n                return;\n            }\n\n            this.$gutterLineHighlight.style.display = shouldHighlight ? \"\" : \"none\";\n            if (this.$cursorLayer.$pixelPos)\n                this.$updateGutterLineHighlight();\n        },\n        initialValue: false,\n        value: true\n    },\n    hScrollBarAlwaysVisible: {\n        set: function(val) {\n            if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    vScrollBarAlwaysVisible: {\n        set: function(val) {\n            if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n                this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: false\n    },\n    fontSize:  {\n        set: function(size) {\n            if (typeof size == \"number\")\n                size = size + \"px\";\n            this.container.style.fontSize = size;\n            this.updateFontSize();\n        },\n        initialValue: 12\n    },\n    fontFamily: {\n        set: function(name) {\n            this.container.style.fontFamily = name;\n            this.updateFontSize();\n        }\n    },\n    maxLines: {\n        set: function(val) {\n            this.updateFull();\n        }\n    },\n    minLines: {\n        set: function(val) {\n            this.updateFull();\n        }\n    },\n    maxPixelHeight: {\n        set: function(val) {\n            this.updateFull();\n        },\n        initialValue: 0\n    },\n    scrollPastEnd: {\n        set: function(val) {\n            val = +val || 0;\n            if (this.$scrollPastEnd == val)\n                return;\n            this.$scrollPastEnd = val;\n            this.$loop.schedule(this.CHANGE_SCROLL);\n        },\n        initialValue: 0,\n        handlesSet: true\n    },\n    fixedWidthGutter: {\n        set: function(val) {\n            this.$gutterLayer.$fixedWidth = !!val;\n            this.$loop.schedule(this.CHANGE_GUTTER);\n        }\n    },\n    theme: {\n        set: function(val) { this.setTheme(val) },\n        get: function() { return this.$themeId || this.theme; },\n        initialValue: \"./theme/textmate\",\n        handlesSet: true\n    }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nvar WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {\n    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.onMessage = this.onMessage.bind(this);\n    if (require.nameToUrl && !require.toUrl)\n        require.toUrl = require.nameToUrl;\n    \n    if (config.get(\"packaged\") || !require.toUrl) {\n        workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n    } else {\n        var normalizePath = this.$normalizePath;\n        workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n        var tlns = {};\n        topLevelNamespaces.forEach(function(ns) {\n            tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n        });\n    }\n\n    try {\n        this.$worker = new Worker(workerUrl);\n    } catch(e) {\n        if (e instanceof window.DOMException) {\n            var blob = this.$workerBlob(workerUrl);\n            var URL = window.URL || window.webkitURL;\n            var blobURL = URL.createObjectURL(blob);\n\n            this.$worker = new Worker(blobURL);\n            URL.revokeObjectURL(blobURL);\n        } else {\n            throw e;\n        }\n    }\n    this.$worker.postMessage({\n        init : true,\n        tlns : tlns,\n        module : mod,\n        classname : classname\n    });\n\n    this.callbackId = 1;\n    this.callbacks = {};\n\n    this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n    oop.implement(this, EventEmitter);\n\n    this.onMessage = function(e) {\n        var msg = e.data;\n        switch(msg.type) {\n            case \"event\":\n                this._signal(msg.name, {data: msg.data});\n                break;\n            case \"call\":\n                var callback = this.callbacks[msg.id];\n                if (callback) {\n                    callback(msg.data);\n                    delete this.callbacks[msg.id];\n                }\n                break;\n            case \"error\":\n                this.reportError(msg.data);\n                break;\n            case \"log\":\n                window.console && console.log && console.log.apply(console, msg.data);\n                break;\n        }\n    };\n    \n    this.reportError = function(err) {\n        window.console && console.error && console.error(err);\n    };\n\n    this.$normalizePath = function(path) {\n        return net.qualifyURL(path);\n    };\n\n    this.terminate = function() {\n        this._signal(\"terminate\", {});\n        this.deltaQueue = null;\n        this.$worker.terminate();\n        this.$worker = null;\n        if (this.$doc)\n            this.$doc.off(\"change\", this.changeListener);\n        this.$doc = null;\n    };\n\n    this.send = function(cmd, args) {\n        this.$worker.postMessage({command: cmd, args: args});\n    };\n\n    this.call = function(cmd, args, callback) {\n        if (callback) {\n            var id = this.callbackId++;\n            this.callbacks[id] = callback;\n            args.push(id);\n        }\n        this.send(cmd, args);\n    };\n\n    this.emit = function(event, data) {\n        try {\n            this.$worker.postMessage({event: event, data: {data: data.data}});\n        }\n        catch(ex) {\n            console.error(ex.stack);\n        }\n    };\n\n    this.attachToDocument = function(doc) {\n        if(this.$doc)\n            this.terminate();\n\n        this.$doc = doc;\n        this.call(\"setValue\", [doc.getValue()]);\n        doc.on(\"change\", this.changeListener);\n    };\n\n    this.changeListener = function(delta) {\n        if (!this.deltaQueue) {\n            this.deltaQueue = [];\n            setTimeout(this.$sendDeltaQueue, 0);\n        }\n        if (delta.action == \"insert\")\n            this.deltaQueue.push(delta.start, delta.lines);\n        else\n            this.deltaQueue.push(delta.start, delta.end);\n    };\n\n    this.$sendDeltaQueue = function() {\n        var q = this.deltaQueue;\n        if (!q) return;\n        this.deltaQueue = null;\n        if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n            this.call(\"setValue\", [this.$doc.getValue()]);\n        } else\n            this.emit(\"change\", {data: q});\n    };\n\n    this.$workerBlob = function(workerUrl) {\n        var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n        try {\n            return new Blob([script], {\"type\": \"application/javascript\"});\n        } catch (e) { // Backwards-compatibility\n            var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n            var blobBuilder = new BlobBuilder();\n            blobBuilder.append(script);\n            return blobBuilder.getBlob(\"application/javascript\");\n        }\n    };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n    this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.callbackId = 1;\n    this.callbacks = {};\n    this.messageBuffer = [];\n\n    var main = null;\n    var emitSync = false;\n    var sender = Object.create(EventEmitter);\n    var _self = this;\n\n    this.$worker = {};\n    this.$worker.terminate = function() {};\n    this.$worker.postMessage = function(e) {\n        _self.messageBuffer.push(e);\n        if (main) {\n            if (emitSync)\n                setTimeout(processNext);\n            else\n                processNext();\n        }\n    };\n    this.setEmitSync = function(val) { emitSync = val };\n\n    var processNext = function() {\n        var msg = _self.messageBuffer.shift();\n        if (msg.command)\n            main[msg.command].apply(main, msg.args);\n        else if (msg.event)\n            sender._signal(msg.event, msg.data);\n    };\n\n    sender.postMessage = function(msg) {\n        _self.onMessage({data: msg});\n    };\n    sender.callback = function(data, callbackId) {\n        this.postMessage({type: \"call\", id: callbackId, data: data});\n    };\n    sender.emit = function(name, data) {\n        this.postMessage({type: \"event\", name: name, data: data});\n    };\n\n    config.loadModule([\"worker\", mod], function(Main) {\n        main = new Main[classname](sender);\n        while (_self.messageBuffer.length)\n            processNext();\n    });\n};\n\nUIWorkerClient.prototype = WorkerClient.prototype;\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\n\nvar PlaceHolder = function(session, length, pos, others, mainClass, othersClass) {\n    var _self = this;\n    this.length = length;\n    this.session = session;\n    this.doc = session.getDocument();\n    this.mainClass = mainClass;\n    this.othersClass = othersClass;\n    this.$onUpdate = this.onUpdate.bind(this);\n    this.doc.on(\"change\", this.$onUpdate);\n    this.$others = others;\n    \n    this.$onCursorChange = function() {\n        setTimeout(function() {\n            _self.onCursorChange();\n        });\n    };\n    \n    this.$pos = pos;\n    var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1};\n    this.$undoStackDepth = undoStack.length;\n    this.setup();\n\n    session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setup = function() {\n        var _self = this;\n        var doc = this.doc;\n        var session = this.session;\n        \n        this.selectionBefore = session.selection.toJSON();\n        if (session.selection.inMultiSelectMode)\n            session.selection.toSingleRange();\n\n        this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n        var pos = this.pos;\n        pos.$insertRight = true;\n        pos.detach();\n        pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n        this.others = [];\n        this.$others.forEach(function(other) {\n            var anchor = doc.createAnchor(other.row, other.column);\n            anchor.$insertRight = true;\n            anchor.detach();\n            _self.others.push(anchor);\n        });\n        session.setUndoSelect(false);\n    };\n    this.showOtherMarkers = function() {\n        if (this.othersActive) return;\n        var session = this.session;\n        var _self = this;\n        this.othersActive = true;\n        this.others.forEach(function(anchor) {\n            anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false);\n        });\n    };\n    this.hideOtherMarkers = function() {\n        if (!this.othersActive) return;\n        this.othersActive = false;\n        for (var i = 0; i < this.others.length; i++) {\n            this.session.removeMarker(this.others[i].markerId);\n        }\n    };\n    this.onUpdate = function(delta) {\n        if (this.$updating)\n            return this.updateAnchors(delta);\n            \n        var range = delta;\n        if (range.start.row !== range.end.row) return;\n        if (range.start.row !== this.pos.row) return;\n        this.$updating = true;\n        var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n        var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n        var distanceFromStart = range.start.column - this.pos.column;\n        \n        this.updateAnchors(delta);\n        \n        if (inMainRange)\n            this.length += lengthDiff;\n\n        if (inMainRange && !this.session.$fromUndo) {\n            if (delta.action === 'insert') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n                    this.doc.insertMergedLines(newPos, delta.lines);\n                }\n            } else if (delta.action === 'remove') {\n                for (var i = this.others.length - 1; i >= 0; i--) {\n                    var otherPos = this.others[i];\n                    var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart};\n                    this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n                }\n            }\n        }\n        \n        this.$updating = false;\n        this.updateMarkers();\n    };\n    \n    this.updateAnchors = function(delta) {\n        this.pos.onChange(delta);\n        for (var i = this.others.length; i--;)\n            this.others[i].onChange(delta);\n        this.updateMarkers();\n    };\n    \n    this.updateMarkers = function() {\n        if (this.$updating)\n            return;\n        var _self = this;\n        var session = this.session;\n        var updateMarker = function(pos, className) {\n            session.removeMarker(pos.markerId);\n            pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false);\n        };\n        updateMarker(this.pos, this.mainClass);\n        for (var i = this.others.length; i--;)\n            updateMarker(this.others[i], this.othersClass);\n    };\n\n    this.onCursorChange = function(event) {\n        if (this.$updating || !this.session) return;\n        var pos = this.session.selection.getCursor();\n        if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n            this.showOtherMarkers();\n            this._emit(\"cursorEnter\", event);\n        } else {\n            this.hideOtherMarkers();\n            this._emit(\"cursorLeave\", event);\n        }\n    };    \n    this.detach = function() {\n        this.session.removeMarker(this.pos && this.pos.markerId);\n        this.hideOtherMarkers();\n        this.doc.removeEventListener(\"change\", this.$onUpdate);\n        this.session.selection.removeEventListener(\"changeCursor\", this.$onCursorChange);\n        this.session.setUndoSelect(true);\n        this.session = null;\n    };\n    this.cancel = function() {\n        if (this.$undoStackDepth === -1)\n            return;\n        var undoManager = this.session.getUndoManager();\n        var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n        for (var i = 0; i < undosRequired; i++) {\n            undoManager.undo(true);\n        }\n        if (this.selectionBefore)\n            this.session.selection.fromJSON(this.selectionBefore);\n    };\n}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\n\nfunction onMouseDown(e) {\n    var ev = e.domEvent;\n    var alt = ev.altKey;\n    var shift = ev.shiftKey;\n    var ctrl = ev.ctrlKey;\n    var accel = e.getAccelKey();\n    var button = e.getButton();\n    \n    if (ctrl && useragent.isMac)\n        button = ev.button;\n\n    if (e.editor.inMultiSelectMode && button == 2) {\n        e.editor.textInput.onContextMenu(e.domEvent);\n        return;\n    }\n    \n    if (!ctrl && !alt && !accel) {\n        if (button === 0 && e.editor.inMultiSelectMode)\n            e.editor.exitMultiSelectMode();\n        return;\n    }\n    \n    if (button !== 0)\n        return;\n\n    var editor = e.editor;\n    var selection = editor.selection;\n    var isMultiSelect = editor.inMultiSelectMode;\n    var pos = e.getDocumentPosition();\n    var cursor = selection.getCursor();\n    var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n\n    var mouseX = e.x, mouseY = e.y;\n    var onMouseSelection = function(e) {\n        mouseX = e.clientX;\n        mouseY = e.clientY;\n    };\n    \n    var session = editor.session;\n    var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n    var screenCursor = screenAnchor;\n    \n    var selectionMode;\n    if (editor.$mouseHandler.$enableJumpToDef) {\n        if (ctrl && alt || accel && alt)\n            selectionMode = shift ? \"block\" : \"add\";\n        else if (alt && editor.$blockSelectEnabled)\n            selectionMode = \"block\";\n    } else {\n        if (accel && !alt) {\n            selectionMode = \"add\";\n            if (!isMultiSelect && shift)\n                return;\n        } else if (alt && editor.$blockSelectEnabled) {\n            selectionMode = \"block\";\n        }\n    }\n    \n    if (selectionMode && useragent.isMac && ev.ctrlKey) {\n        editor.$mouseHandler.cancelContextMenu();\n    }\n\n    if (selectionMode == \"add\") {\n        if (!isMultiSelect && inSelection)\n            return; // dragging\n\n        if (!isMultiSelect) {\n            var range = selection.toOrientedRange();\n            editor.addSelectionMarker(range);\n        }\n\n        var oldRange = selection.rangeList.rangeAtPoint(pos);\n        \n        \n        editor.$blockScrolling++;\n        editor.inVirtualSelectionMode = true;\n        \n        if (shift) {\n            oldRange = null;\n            range = selection.ranges[0] || range;\n            editor.removeSelectionMarker(range);\n        }\n        editor.once(\"mouseup\", function() {\n            var tmpSel = selection.toOrientedRange();\n\n            if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n                selection.substractPoint(tmpSel.cursor);\n            else {\n                if (shift) {\n                    selection.substractPoint(range.cursor);\n                } else if (range) {\n                    editor.removeSelectionMarker(range);\n                    selection.addRange(range);\n                }\n                selection.addRange(tmpSel);\n            }\n            editor.$blockScrolling--;\n            editor.inVirtualSelectionMode = false;\n        });\n\n    } else if (selectionMode == \"block\") {\n        e.stop();\n        editor.inVirtualSelectionMode = true;        \n        var initialRange;\n        var rectSel = [];\n        var blockSelect = function() {\n            var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n            var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);\n\n            if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n                return;\n            screenCursor = newCursor;\n            \n            editor.$blockScrolling++;\n            editor.selection.moveToPosition(cursor);\n            editor.renderer.scrollCursorIntoView();\n\n            editor.removeSelectionMarkers(rectSel);\n            rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n            if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n                rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n            rectSel.forEach(editor.addSelectionMarker, editor);\n            editor.updateSelectionMarkers();\n            editor.$blockScrolling--;\n        };\n        editor.$blockScrolling++;\n        if (isMultiSelect && !accel) {\n            selection.toSingleRange();\n        } else if (!isMultiSelect && accel) {\n            initialRange = selection.toOrientedRange();\n            editor.addSelectionMarker(initialRange);\n        }\n        \n        if (shift)\n            screenAnchor = session.documentToScreenPosition(selection.lead);            \n        else\n            selection.moveToPosition(pos);\n        editor.$blockScrolling--;\n        \n        screenCursor = {row: -1, column: -1};\n\n        var onMouseSelectionEnd = function(e) {\n            clearInterval(timerId);\n            editor.removeSelectionMarkers(rectSel);\n            if (!rectSel.length)\n                rectSel = [selection.toOrientedRange()];\n            editor.$blockScrolling++;\n            if (initialRange) {\n                editor.removeSelectionMarker(initialRange);\n                selection.toSingleRange(initialRange);\n            }\n            for (var i = 0; i < rectSel.length; i++)\n                selection.addRange(rectSel[i]);\n            editor.inVirtualSelectionMode = false;\n            editor.$mouseHandler.$clickSelection = null;\n            editor.$blockScrolling--;\n        };\n\n        var onSelectionInterval = blockSelect;\n\n        event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n        var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n        return e.preventDefault();\n    }\n}\n\n\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module) {\nexports.defaultCommands = [{\n    name: \"addCursorAbove\",\n    exec: function(editor) { editor.selectMoreLines(-1); },\n    bindKey: {win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorBelow\",\n    exec: function(editor) { editor.selectMoreLines(1); },\n    bindKey: {win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorAboveSkipCurrent\",\n    exec: function(editor) { editor.selectMoreLines(-1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"addCursorBelowSkipCurrent\",\n    exec: function(editor) { editor.selectMoreLines(1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectMoreBefore\",\n    exec: function(editor) { editor.selectMore(-1); },\n    bindKey: {win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectMoreAfter\",\n    exec: function(editor) { editor.selectMore(1); },\n    bindKey: {win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectNextBefore\",\n    exec: function(editor) { editor.selectMore(-1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"selectNextAfter\",\n    exec: function(editor) { editor.selectMore(1, true); },\n    bindKey: {win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}, {\n    name: \"splitIntoLines\",\n    exec: function(editor) { editor.multiSelect.splitIntoLines(); },\n    bindKey: {win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\"},\n    readOnly: true\n}, {\n    name: \"alignCursors\",\n    exec: function(editor) { editor.alignCursors(); },\n    bindKey: {win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\"},\n    scrollIntoView: \"cursor\"\n}, {\n    name: \"findAll\",\n    exec: function(editor) { editor.findAll(); },\n    bindKey: {win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\"},\n    scrollIntoView: \"cursor\",\n    readOnly: true\n}];\nexports.multiSelectCommands = [{\n    name: \"singleSelection\",\n    bindKey: \"esc\",\n    exec: function(editor) { editor.exitMultiSelectMode(); },\n    scrollIntoView: \"cursor\",\n    readOnly: true,\n    isAvailable: function(editor) {return editor && editor.inMultiSelectMode}\n}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\n\nfunction find(session, needle, dir) {\n    search.$options.wrap = true;\n    search.$options.needle = needle;\n    search.$options.backwards = dir == -1;\n    return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function() {\n    this.getSelectionMarkers = function() {\n        return this.$selectionMarkers;\n    };\n}).call(EditSession.prototype);\n(function() {\n    this.ranges = null;\n    this.rangeList = null;\n    this.addRange = function(range, $blockChangeEvents) {\n        if (!range)\n            return;\n\n        if (!this.inMultiSelectMode && this.rangeCount === 0) {\n            var oldRange = this.toOrientedRange();\n            this.rangeList.add(oldRange);\n            this.rangeList.add(range);\n            if (this.rangeList.ranges.length != 2) {\n                this.rangeList.removeAll();\n                return $blockChangeEvents || this.fromOrientedRange(range);\n            }\n            this.rangeList.removeAll();\n            this.rangeList.add(oldRange);\n            this.$onAddRange(oldRange);\n        }\n\n        if (!range.cursor)\n            range.cursor = range.end;\n\n        var removed = this.rangeList.add(range);\n\n        this.$onAddRange(range);\n\n        if (removed.length)\n            this.$onRemoveRange(removed);\n\n        if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n            this._signal(\"multiSelect\");\n            this.inMultiSelectMode = true;\n            this.session.$undoSelect = false;\n            this.rangeList.attach(this.session);\n        }\n\n        return $blockChangeEvents || this.fromOrientedRange(range);\n    };\n\n    this.toSingleRange = function(range) {\n        range = range || this.ranges[0];\n        var removed = this.rangeList.removeAll();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n\n        range && this.fromOrientedRange(range);\n    };\n    this.substractPoint = function(pos) {\n        var removed = this.rangeList.substractPoint(pos);\n        if (removed) {\n            this.$onRemoveRange(removed);\n            return removed[0];\n        }\n    };\n    this.mergeOverlappingRanges = function() {\n        var removed = this.rangeList.merge();\n        if (removed.length)\n            this.$onRemoveRange(removed);\n        else if(this.ranges[0])\n            this.fromOrientedRange(this.ranges[0]);\n    };\n\n    this.$onAddRange = function(range) {\n        this.rangeCount = this.rangeList.ranges.length;\n        this.ranges.unshift(range);\n        this._signal(\"addRange\", {range: range});\n    };\n\n    this.$onRemoveRange = function(removed) {\n        this.rangeCount = this.rangeList.ranges.length;\n        if (this.rangeCount == 1 && this.inMultiSelectMode) {\n            var lastRange = this.rangeList.ranges.pop();\n            removed.push(lastRange);\n            this.rangeCount = 0;\n        }\n\n        for (var i = removed.length; i--; ) {\n            var index = this.ranges.indexOf(removed[i]);\n            this.ranges.splice(index, 1);\n        }\n\n        this._signal(\"removeRange\", {ranges: removed});\n\n        if (this.rangeCount === 0 && this.inMultiSelectMode) {\n            this.inMultiSelectMode = false;\n            this._signal(\"singleSelect\");\n            this.session.$undoSelect = true;\n            this.rangeList.detach(this.session);\n        }\n\n        lastRange = lastRange || this.ranges[0];\n        if (lastRange && !lastRange.isEqual(this.getRange()))\n            this.fromOrientedRange(lastRange);\n    };\n    this.$initRangeList = function() {\n        if (this.rangeList)\n            return;\n\n        this.rangeList = new RangeList();\n        this.ranges = [];\n        this.rangeCount = 0;\n    };\n    this.getAllRanges = function() {\n        return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n    };\n\n    this.splitIntoLines = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        } else {\n            var range = this.getRange();\n            var isBackwards = this.isBackwards();\n            var startRow = range.start.row;\n            var endRow = range.end.row;\n            if (startRow == endRow) {\n                if (isBackwards)\n                    var start = range.end, end = range.start;\n                else\n                    var start = range.start, end = range.end;\n                \n                this.addRange(Range.fromPoints(end, end));\n                this.addRange(Range.fromPoints(start, start));\n                return;\n            }\n\n            var rectSel = [];\n            var r = this.getLineRange(startRow, true);\n            r.start.column = range.start.column;\n            rectSel.push(r);\n\n            for (var i = startRow + 1; i < endRow; i++)\n                rectSel.push(this.getLineRange(i, true));\n\n            r = this.getLineRange(endRow, true);\n            r.end.column = range.end.column;\n            rectSel.push(r);\n\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n    this.toggleBlockSelection = function () {\n        if (this.rangeCount > 1) {\n            var ranges = this.rangeList.ranges;\n            var lastRange = ranges[ranges.length - 1];\n            var range = Range.fromPoints(ranges[0].start, lastRange.end);\n\n            this.toSingleRange();\n            this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n        } else {\n            var cursor = this.session.documentToScreenPosition(this.selectionLead);\n            var anchor = this.session.documentToScreenPosition(this.selectionAnchor);\n\n            var rectSel = this.rectangularRangeBlock(cursor, anchor);\n            rectSel.forEach(this.addRange, this);\n        }\n    };\n    this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) {\n        var rectSel = [];\n\n        var xBackwards = screenCursor.column < screenAnchor.column;\n        if (xBackwards) {\n            var startColumn = screenCursor.column;\n            var endColumn = screenAnchor.column;\n        } else {\n            var startColumn = screenAnchor.column;\n            var endColumn = screenCursor.column;\n        }\n\n        var yBackwards = screenCursor.row < screenAnchor.row;\n        if (yBackwards) {\n            var startRow = screenCursor.row;\n            var endRow = screenAnchor.row;\n        } else {\n            var startRow = screenAnchor.row;\n            var endRow = screenCursor.row;\n        }\n\n        if (startColumn < 0)\n            startColumn = 0;\n        if (startRow < 0)\n            startRow = 0;\n\n        if (startRow == endRow)\n            includeEmptyLines = true;\n\n        for (var row = startRow; row <= endRow; row++) {\n            var range = Range.fromPoints(\n                this.session.screenToDocumentPosition(row, startColumn),\n                this.session.screenToDocumentPosition(row, endColumn)\n            );\n            if (range.isEmpty()) {\n                if (docEnd && isSamePoint(range.end, docEnd))\n                    break;\n                var docEnd = range.end;\n            }\n            range.cursor = xBackwards ? range.start : range.end;\n            rectSel.push(range);\n        }\n\n        if (yBackwards)\n            rectSel.reverse();\n\n        if (!includeEmptyLines) {\n            var end = rectSel.length - 1;\n            while (rectSel[end].isEmpty() && end > 0)\n                end--;\n            if (end > 0) {\n                var start = 0;\n                while (rectSel[start].isEmpty())\n                    start++;\n            }\n            for (var i = end; i >= start; i--) {\n                if (rectSel[i].isEmpty())\n                    rectSel.splice(i, 1);\n            }\n        }\n\n        return rectSel;\n    };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.updateSelectionMarkers = function() {\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n    this.addSelectionMarker = function(orientedRange) {\n        if (!orientedRange.cursor)\n            orientedRange.cursor = orientedRange.end;\n\n        var style = this.getSelectionStyle();\n        orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\n        this.session.$selectionMarkers.push(orientedRange);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n        return orientedRange;\n    };\n    this.removeSelectionMarker = function(range) {\n        if (!range.marker)\n            return;\n        this.session.removeMarker(range.marker);\n        var index = this.session.$selectionMarkers.indexOf(range);\n        if (index != -1)\n            this.session.$selectionMarkers.splice(index, 1);\n        this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n    };\n\n    this.removeSelectionMarkers = function(ranges) {\n        var markerList = this.session.$selectionMarkers;\n        for (var i = ranges.length; i--; ) {\n            var range = ranges[i];\n            if (!range.marker)\n                continue;\n            this.session.removeMarker(range.marker);\n            var index = markerList.indexOf(range);\n            if (index != -1)\n                markerList.splice(index, 1);\n        }\n        this.session.selectionMarkerCount = markerList.length;\n    };\n\n    this.$onAddRange = function(e) {\n        this.addSelectionMarker(e.range);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onRemoveRange = function(e) {\n        this.removeSelectionMarkers(e.ranges);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onMultiSelect = function(e) {\n        if (this.inMultiSelectMode)\n            return;\n        this.inMultiSelectMode = true;\n\n        this.setStyle(\"ace_multiselect\");\n        this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n        this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n    };\n\n    this.$onSingleSelect = function(e) {\n        if (this.session.multiSelect.inVirtualMode)\n            return;\n        this.inMultiSelectMode = false;\n\n        this.unsetStyle(\"ace_multiselect\");\n        this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n        this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n        this.renderer.updateCursor();\n        this.renderer.updateBackMarkers();\n        this._emit(\"changeSelection\");\n    };\n\n    this.$onMultiSelectExec = function(e) {\n        var command = e.command;\n        var editor = e.editor;\n        if (!editor.multiSelect)\n            return;\n        if (!command.multiSelectAction) {\n            var result = command.exec(editor, e.args || {});\n            editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n            editor.multiSelect.mergeOverlappingRanges();\n        } else if (command.multiSelectAction == \"forEach\") {\n            result = editor.forEachSelection(command, e.args);\n        } else if (command.multiSelectAction == \"forEachLine\") {\n            result = editor.forEachSelection(command, e.args, true);\n        } else if (command.multiSelectAction == \"single\") {\n            editor.exitMultiSelectMode();\n            result = command.exec(editor, e.args || {});\n        } else {\n            result = command.multiSelectAction(editor, e.args || {});\n        }\n        return result;\n    }; \n    this.forEachSelection = function(cmd, args, options) {\n        if (this.inVirtualSelectionMode)\n            return;\n        var keepOrder = options && options.keepOrder;\n        var $byLines = options == true || options && options.$byLines\n        var session = this.session;\n        var selection = this.selection;\n        var rangeList = selection.rangeList;\n        var ranges = (keepOrder ? selection : rangeList).ranges;\n        var result;\n        \n        if (!ranges.length)\n            return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n        \n        var reg = selection._eventRegistry;\n        selection._eventRegistry = {};\n\n        var tmpSel = new Selection(session);\n        this.inVirtualSelectionMode = true;\n        for (var i = ranges.length; i--;) {\n            if ($byLines) {\n                while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n                    i--;\n            }\n            tmpSel.fromOrientedRange(ranges[i]);\n            tmpSel.index = i;\n            this.selection = session.selection = tmpSel;\n            var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n            if (!result && cmdResult !== undefined)\n                result = cmdResult;\n            tmpSel.toOrientedRange(ranges[i]);\n        }\n        tmpSel.detach();\n\n        this.selection = session.selection = selection;\n        this.inVirtualSelectionMode = false;\n        selection._eventRegistry = reg;\n        selection.mergeOverlappingRanges();\n        \n        var anim = this.renderer.$scrollAnimation;\n        this.onCursorChange();\n        this.onSelectionChange();\n        if (anim && anim.from == anim.to)\n            this.renderer.animateScrolling(anim.from);\n        \n        return result;\n    };\n    this.exitMultiSelectMode = function() {\n        if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n            return;\n        this.multiSelect.toSingleRange();\n    };\n\n    this.getSelectedText = function() {\n        var text = \"\";\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var ranges = this.multiSelect.rangeList.ranges;\n            var buf = [];\n            for (var i = 0; i < ranges.length; i++) {\n                buf.push(this.session.getTextRange(ranges[i]));\n            }\n            var nl = this.session.getDocument().getNewLineCharacter();\n            text = buf.join(nl);\n            if (text.length == (buf.length - 1) * nl.length)\n                text = \"\";\n        } else if (!this.selection.isEmpty()) {\n            text = this.session.getTextRange(this.getSelectionRange());\n        }\n        return text;\n    };\n    \n    this.$checkMultiselectChange = function(e, anchor) {\n        if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n            var range = this.multiSelect.ranges[0];\n            if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n                return;\n            var pos = anchor == this.multiSelect.anchor\n                ? range.cursor == range.start ? range.end : range.start\n                : range.cursor;\n            if (pos.row != anchor.row \n                || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n                this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n        }\n    };\n    this.findAll = function(needle, options, additive) {\n        options = options || {};\n        options.needle = needle || options.needle;\n        if (options.needle == undefined) {\n            var range = this.selection.isEmpty()\n                ? this.selection.getWordRange()\n                : this.selection.getRange();\n            options.needle = this.session.getTextRange(range);\n        }    \n        this.$search.set(options);\n        \n        var ranges = this.$search.findAll(this.session);\n        if (!ranges.length)\n            return 0;\n\n        this.$blockScrolling += 1;\n        var selection = this.multiSelect;\n\n        if (!additive)\n            selection.toSingleRange(ranges[0]);\n\n        for (var i = ranges.length; i--; )\n            selection.addRange(ranges[i], true);\n        if (range && selection.rangeList.rangeAtPoint(range.start))\n            selection.addRange(range, true);\n        \n        this.$blockScrolling -= 1;\n\n        return ranges.length;\n    };\n    this.selectMoreLines = function(dir, skip) {\n        var range = this.selection.toOrientedRange();\n        var isBackwards = range.cursor == range.end;\n\n        var screenLead = this.session.documentToScreenPosition(range.cursor);\n        if (this.selection.$desiredColumn)\n            screenLead.column = this.selection.$desiredColumn;\n\n        var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n        if (!range.isEmpty()) {\n            var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n            var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n        } else {\n            var anchor = lead;\n        }\n\n        if (isBackwards) {\n            var newRange = Range.fromPoints(lead, anchor);\n            newRange.cursor = newRange.start;\n        } else {\n            var newRange = Range.fromPoints(anchor, lead);\n            newRange.cursor = newRange.end;\n        }\n\n        newRange.desiredColumn = screenLead.column;\n        if (!this.selection.inMultiSelectMode) {\n            this.selection.addRange(range);\n        } else {\n            if (skip)\n                var toRemove = range.cursor;\n        }\n\n        this.selection.addRange(newRange);\n        if (toRemove)\n            this.selection.substractPoint(toRemove);\n    };\n    this.transposeSelections = function(dir) {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var all = sel.ranges;\n\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            if (range.isEmpty()) {\n                var tmp = session.getWordRange(range.start.row, range.start.column);\n                range.start.row = tmp.start.row;\n                range.start.column = tmp.start.column;\n                range.end.row = tmp.end.row;\n                range.end.column = tmp.end.column;\n            }\n        }\n        sel.mergeOverlappingRanges();\n\n        var words = [];\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            words.unshift(session.getTextRange(range));\n        }\n\n        if (dir < 0)\n            words.unshift(words.pop());\n        else\n            words.push(words.shift());\n\n        for (var i = all.length; i--; ) {\n            var range = all[i];\n            var tmp = range.clone();\n            session.replace(range, words[i]);\n            range.start.row = tmp.start.row;\n            range.start.column = tmp.start.column;\n        }\n    };\n    this.selectMore = function(dir, skip, stopAtFirst) {\n        var session = this.session;\n        var sel = session.multiSelect;\n\n        var range = sel.toOrientedRange();\n        if (range.isEmpty()) {\n            range = session.getWordRange(range.start.row, range.start.column);\n            range.cursor = dir == -1 ? range.start : range.end;\n            this.multiSelect.addRange(range);\n            if (stopAtFirst)\n                return;\n        }\n        var needle = session.getTextRange(range);\n\n        var newRange = find(session, needle, dir);\n        if (newRange) {\n            newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n            this.$blockScrolling += 1;\n            this.session.unfold(newRange);\n            this.multiSelect.addRange(newRange);\n            this.$blockScrolling -= 1;\n            this.renderer.scrollCursorIntoView(null, 0.5);\n        }\n        if (skip)\n            this.multiSelect.substractPoint(range.cursor);\n    };\n    this.alignCursors = function() {\n        var session = this.session;\n        var sel = session.multiSelect;\n        var ranges = sel.ranges;\n        var row = -1;\n        var sameRowRanges = ranges.filter(function(r) {\n            if (r.cursor.row == row)\n                return true;\n            row = r.cursor.row;\n        });\n        \n        if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n            var range = this.selection.getRange();\n            var fr = range.start.row, lr = range.end.row;\n            var guessRange = fr == lr;\n            if (guessRange) {\n                var max = this.session.getLength();\n                var line;\n                do {\n                    line = this.session.getLine(lr);\n                } while (/[=:]/.test(line) && ++lr < max);\n                do {\n                    line = this.session.getLine(fr);\n                } while (/[=:]/.test(line) && --fr > 0);\n                \n                if (fr < 0) fr = 0;\n                if (lr >= max) lr = max - 1;\n            }\n            var lines = this.session.removeFullLines(fr, lr);\n            lines = this.$reAlignText(lines, guessRange);\n            this.session.insert({row: fr, column: 0}, lines.join(\"\\n\") + \"\\n\");\n            if (!guessRange) {\n                range.start.column = 0;\n                range.end.column = lines[lines.length - 1].length;\n            }\n            this.selection.setRange(range);\n        } else {\n            sameRowRanges.forEach(function(r) {\n                sel.substractPoint(r.cursor);\n            });\n\n            var maxCol = 0;\n            var minSpace = Infinity;\n            var spaceOffsets = ranges.map(function(r) {\n                var p = r.cursor;\n                var line = session.getLine(p.row);\n                var spaceOffset = line.substr(p.column).search(/\\S/g);\n                if (spaceOffset == -1)\n                    spaceOffset = 0;\n\n                if (p.column > maxCol)\n                    maxCol = p.column;\n                if (spaceOffset < minSpace)\n                    minSpace = spaceOffset;\n                return spaceOffset;\n            });\n            ranges.forEach(function(r, i) {\n                var p = r.cursor;\n                var l = maxCol - p.column;\n                var d = spaceOffsets[i] - minSpace;\n                if (l > d)\n                    session.insert(p, lang.stringRepeat(\" \", l - d));\n                else\n                    session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n\n                r.start.column = r.end.column = maxCol;\n                r.start.row = r.end.row = p.row;\n                r.cursor = r.end;\n            });\n            sel.fromOrientedRange(ranges[0]);\n            this.renderer.updateCursor();\n            this.renderer.updateBackMarkers();\n        }\n    };\n\n    this.$reAlignText = function(lines, forceLeft) {\n        var isLeftAligned = true, isRightAligned = true;\n        var startW, textW, endW;\n\n        return lines.map(function(line) {\n            var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n            if (!m)\n                return [line];\n\n            if (startW == null) {\n                startW = m[1].length;\n                textW = m[2].length;\n                endW = m[3].length;\n                return m;\n            }\n\n            if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n                isRightAligned = false;\n            if (startW != m[1].length)\n                isLeftAligned = false;\n\n            if (startW > m[1].length)\n                startW = m[1].length;\n            if (textW < m[2].length)\n                textW = m[2].length;\n            if (endW > m[3].length)\n                endW = m[3].length;\n\n            return m;\n        }).map(forceLeft ? alignLeft :\n            isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n        function spaces(n) {\n            return lang.stringRepeat(\" \", n);\n        }\n\n        function alignLeft(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(textW - m[2].length + endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function alignRight(m) {\n            return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n                + spaces(endW, \" \")\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n        function unAlign(m) {\n            return !m[2] ? m[0] : spaces(startW) + m[2]\n                + spaces(endW)\n                + m[4].replace(/^([=:])\\s+/, \"$1 \");\n        }\n    };\n}).call(Editor.prototype);\n\n\nfunction isSamePoint(p1, p2) {\n    return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function(e) {\n    var session = e.session;\n    if (session && !session.multiSelect) {\n        session.$selectionMarkers = [];\n        session.selection.$initRangeList();\n        session.multiSelect = session.selection;\n    }\n    this.multiSelect = session && session.multiSelect;\n\n    var oldSession = e.oldSession;\n    if (oldSession) {\n        oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n        oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n        oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n        oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n        oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n        oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n    }\n\n    if (session) {\n        session.multiSelect.on(\"addRange\", this.$onAddRange);\n        session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n        session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n        session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n        session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n        session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n    }\n\n    if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n        if (session.selection.inMultiSelectMode)\n            this.$onMultiSelect();\n        else\n            this.$onSingleSelect();\n    }\n};\nfunction MultiSelect(editor) {\n    if (editor.$multiselectOnSessionChange)\n        return;\n    editor.$onAddRange = editor.$onAddRange.bind(editor);\n    editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n    editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n    editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n    editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n    editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n\n    editor.$multiselectOnSessionChange(editor);\n    editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n    editor.on(\"mousedown\", onMouseDown);\n    editor.commands.addCommands(commands.defaultCommands);\n\n    addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n    var el = editor.textInput.getElement();\n    var altCursor = false;\n    event.addListener(el, \"keydown\", function(e) {\n        var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n        if (editor.$blockSelectEnabled && altDown) {\n            if (!altCursor) {\n                editor.renderer.setMouseCursor(\"crosshair\");\n                altCursor = true;\n            }\n        } else if (altCursor) {\n            reset();\n        }\n    });\n\n    event.addListener(el, \"keyup\", reset);\n    event.addListener(el, \"blur\", reset);\n    function reset(e) {\n        if (altCursor) {\n            editor.renderer.setMouseCursor(\"\");\n            altCursor = false;\n        }\n    }\n}\n\nexports.MultiSelect = MultiSelect;\n\n\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n    enableMultiselect: {\n        set: function(val) {\n            MultiSelect(this);\n            if (val) {\n                this.on(\"changeSession\", this.$multiselectOnSessionChange);\n                this.on(\"mousedown\", onMouseDown);\n            } else {\n                this.off(\"changeSession\", this.$multiselectOnSessionChange);\n                this.off(\"mousedown\", onMouseDown);\n            }\n        },\n        value: true\n    },\n    enableBlockSelect: {\n        set: function(val) {\n            this.$blockSelectEnabled = val;\n        },\n        value: true\n    }\n});\n\n\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\n    this.foldingStartMarker = null;\n    this.foldingStopMarker = null;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (this.foldingStartMarker.test(line))\n            return \"start\";\n        if (foldStyle == \"markbeginend\"\n                && this.foldingStopMarker\n                && this.foldingStopMarker.test(line))\n            return \"end\";\n        return \"\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        return null;\n    };\n\n    this.indentationBlock = function(session, row, column) {\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1)\n            return;\n\n        var startColumn = column || line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            var level = session.getLine(row).search(re);\n\n            if (level == -1)\n                continue;\n\n            if (level <= startLevel)\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n\n    this.openingBracketBlock = function(session, bracket, row, column, typeRe) {\n        var start = {row: row, column: column + 1};\n        var end = session.$findClosingBracket(bracket, start, typeRe);\n        if (!end)\n            return;\n\n        var fw = session.foldWidgets[end.row];\n        if (fw == null)\n            fw = session.getFoldWidget(end.row);\n\n        if (fw == \"start\" && end.row > start.row) {\n            end.row --;\n            end.column = session.getLine(end.row).length;\n        }\n        return Range.fromPoints(start, end);\n    };\n\n    this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n        var end = {row: row, column: column};\n        var start = session.$findOpeningBracket(bracket, end);\n\n        if (!start)\n            return;\n\n        start.column++;\n        end.column--;\n\n        return  Range.fromPoints(start, end);\n    };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\n\n\nfunction LineWidgets(session) {\n    this.session = session;\n    this.session.widgetManager = this;\n    this.session.getRowLength = this.getRowLength;\n    this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n    this.updateOnChange = this.updateOnChange.bind(this);\n    this.renderWidgets = this.renderWidgets.bind(this);\n    this.measureWidgets = this.measureWidgets.bind(this);\n    this.session._changedWidgets = [];\n    this.$onChangeEditor = this.$onChangeEditor.bind(this);\n    \n    this.session.on(\"change\", this.updateOnChange);\n    this.session.on(\"changeFold\", this.updateOnFold);\n    this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n    this.getRowLength = function(row) {\n        var h;\n        if (this.lineWidgets)\n            h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n        else \n            h = 0;\n        if (!this.$useWrapMode || !this.$wrapData[row]) {\n            return 1 + h;\n        } else {\n            return this.$wrapData[row].length + 1 + h;\n        }\n    };\n\n    this.$getWidgetScreenLength = function() {\n        var screenRows = 0;\n        this.lineWidgets.forEach(function(w){\n            if (w && w.rowCount && !w.hidden)\n                screenRows += w.rowCount;\n        });\n        return screenRows;\n    };    \n    \n    this.$onChangeEditor = function(e) {\n        this.attach(e.editor);\n    };\n    \n    this.attach = function(editor) {\n        if (editor  && editor.widgetManager && editor.widgetManager != this)\n            editor.widgetManager.detach();\n\n        if (this.editor == editor)\n            return;\n\n        this.detach();\n        this.editor = editor;\n        \n        if (editor) {\n            editor.widgetManager = this;\n            editor.renderer.on(\"beforeRender\", this.measureWidgets);\n            editor.renderer.on(\"afterRender\", this.renderWidgets);\n        }\n    };\n    this.detach = function(e) {\n        var editor = this.editor;\n        if (!editor)\n            return;\n        \n        this.editor = null;\n        editor.widgetManager = null;\n        \n        editor.renderer.off(\"beforeRender\", this.measureWidgets);\n        editor.renderer.off(\"afterRender\", this.renderWidgets);\n        var lineWidgets = this.session.lineWidgets;\n        lineWidgets && lineWidgets.forEach(function(w) {\n            if (w && w.el && w.el.parentNode) {\n                w._inDocument = false;\n                w.el.parentNode.removeChild(w.el);\n            }\n        });\n    };\n\n    this.updateOnFold = function(e, session) {\n        var lineWidgets = session.lineWidgets;\n        if (!lineWidgets || !e.action)\n            return;\n        var fold = e.data;\n        var start = fold.start.row;\n        var end = fold.end.row;\n        var hide = e.action == \"add\";\n        for (var i = start + 1; i < end; i++) {\n            if (lineWidgets[i])\n                lineWidgets[i].hidden = hide;\n        }\n        if (lineWidgets[end]) {\n            if (hide) {\n                if (!lineWidgets[start])\n                    lineWidgets[start] = lineWidgets[end];\n                else\n                    lineWidgets[end].hidden = hide;\n            } else {\n                if (lineWidgets[start] == lineWidgets[end])\n                    lineWidgets[start] = undefined;\n                lineWidgets[end].hidden = hide;\n            }\n        }\n    };\n    \n    this.updateOnChange = function(delta) {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets) return;\n        \n        var startRow = delta.start.row;\n        var len = delta.end.row - startRow;\n\n        if (len === 0) {\n        } else if (delta.action == 'remove') {\n            var removed = lineWidgets.splice(startRow + 1, len);\n            removed.forEach(function(w) {\n                w && this.removeLineWidget(w);\n            }, this);\n            this.$updateRows();\n        } else {\n            var args = new Array(len);\n            args.unshift(startRow, 0);\n            lineWidgets.splice.apply(lineWidgets, args);\n            this.$updateRows();\n        }\n    };\n    \n    this.$updateRows = function() {\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets) return;\n        var noWidgets = true;\n        lineWidgets.forEach(function(w, i) {\n            if (w) {\n                noWidgets = false;\n                w.row = i;\n                while (w.$oldWidget) {\n                    w.$oldWidget.row = i;\n                    w = w.$oldWidget;\n                }\n            }\n        });\n        if (noWidgets)\n            this.session.lineWidgets = null;\n    };\n\n    this.addLineWidget = function(w) {\n        if (!this.session.lineWidgets)\n            this.session.lineWidgets = new Array(this.session.getLength());\n        \n        var old = this.session.lineWidgets[w.row];\n        if (old) {\n            w.$oldWidget = old;\n            if (old.el && old.el.parentNode) {\n                old.el.parentNode.removeChild(old.el);\n                old._inDocument = false;\n            }\n        }\n            \n        this.session.lineWidgets[w.row] = w;\n        \n        w.session = this.session;\n        \n        var renderer = this.editor.renderer;\n        if (w.html && !w.el) {\n            w.el = dom.createElement(\"div\");\n            w.el.innerHTML = w.html;\n        }\n        if (w.el) {\n            dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n            w.el.style.position = \"absolute\";\n            w.el.style.zIndex = 5;\n            renderer.container.appendChild(w.el);\n            w._inDocument = true;\n        }\n        \n        if (!w.coverGutter) {\n            w.el.style.zIndex = 3;\n        }\n        if (w.pixelHeight == null) {\n            w.pixelHeight = w.el.offsetHeight;\n        }\n        if (w.rowCount == null) {\n            w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n        }\n        \n        var fold = this.session.getFoldAt(w.row, 0);\n        w.$fold = fold;\n        if (fold) {\n            var lineWidgets = this.session.lineWidgets;\n            if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n                lineWidgets[fold.start.row] = w;\n            else\n                w.hidden = true;\n        }\n            \n        this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n        \n        this.$updateRows();\n        this.renderWidgets(null, renderer);\n        this.onWidgetChanged(w);\n        return w;\n    };\n    \n    this.removeLineWidget = function(w) {\n        w._inDocument = false;\n        w.session = null;\n        if (w.el && w.el.parentNode)\n            w.el.parentNode.removeChild(w.el);\n        if (w.editor && w.editor.destroy) try {\n            w.editor.destroy();\n        } catch(e){}\n        if (this.session.lineWidgets) {\n            var w1 = this.session.lineWidgets[w.row]\n            if (w1 == w) {\n                this.session.lineWidgets[w.row] = w.$oldWidget;\n                if (w.$oldWidget)\n                    this.onWidgetChanged(w.$oldWidget);\n            } else {\n                while (w1) {\n                    if (w1.$oldWidget == w) {\n                        w1.$oldWidget = w.$oldWidget;\n                        break;\n                    }\n                    w1 = w1.$oldWidget;\n                }\n            }\n        }\n        this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n        this.$updateRows();\n    };\n    \n    this.getWidgetsAtRow = function(row) {\n        var lineWidgets = this.session.lineWidgets;\n        var w = lineWidgets && lineWidgets[row];\n        var list = [];\n        while (w) {\n            list.push(w);\n            w = w.$oldWidget;\n        }\n        return list;\n    };\n    \n    this.onWidgetChanged = function(w) {\n        this.session._changedWidgets.push(w);\n        this.editor && this.editor.renderer.updateFull();\n    };\n    \n    this.measureWidgets = function(e, renderer) {\n        var changedWidgets = this.session._changedWidgets;\n        var config = renderer.layerConfig;\n        \n        if (!changedWidgets || !changedWidgets.length) return;\n        var min = Infinity;\n        for (var i = 0; i < changedWidgets.length; i++) {\n            var w = changedWidgets[i];\n            if (!w || !w.el) continue;\n            if (w.session != this.session) continue;\n            if (!w._inDocument) {\n                if (this.session.lineWidgets[w.row] != w)\n                    continue;\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            \n            w.h = w.el.offsetHeight;\n            \n            if (!w.fixedWidth) {\n                w.w = w.el.offsetWidth;\n                w.screenWidth = Math.ceil(w.w / config.characterWidth);\n            }\n            \n            var rowCount = w.h / config.lineHeight;\n            if (w.coverLine) {\n                rowCount -= this.session.getRowLineCount(w.row);\n                if (rowCount < 0)\n                    rowCount = 0;\n            }\n            if (w.rowCount != rowCount) {\n                w.rowCount = rowCount;\n                if (w.row < min)\n                    min = w.row;\n            }\n        }\n        if (min != Infinity) {\n            this.session._emit(\"changeFold\", {data:{start:{row: min}}});\n            this.session.lineWidgetWidth = null;\n        }\n        this.session._changedWidgets = [];\n    };\n    \n    this.renderWidgets = function(e, renderer) {\n        var config = renderer.layerConfig;\n        var lineWidgets = this.session.lineWidgets;\n        if (!lineWidgets)\n            return;\n        var first = Math.min(this.firstRow, config.firstRow);\n        var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n        \n        while (first > 0 && !lineWidgets[first])\n            first--;\n        \n        this.firstRow = config.firstRow;\n        this.lastRow = config.lastRow;\n\n        renderer.$cursorLayer.config = config;\n        for (var i = first; i <= last; i++) {\n            var w = lineWidgets[i];\n            if (!w || !w.el) continue;\n            if (w.hidden) {\n                w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n                continue;\n            }\n            if (!w._inDocument) {\n                w._inDocument = true;\n                renderer.container.appendChild(w.el);\n            }\n            var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top;\n            if (!w.coverLine)\n                top += config.lineHeight * this.session.getRowLineCount(w.row);\n            w.el.style.top = top - config.offset + \"px\";\n            \n            var left = w.coverGutter ? 0 : renderer.gutterWidth;\n            if (!w.fixedWidth)\n                left -= renderer.scrollLeft;\n            w.el.style.left = left + \"px\";\n            \n            if (w.fullWidth && w.screenWidth) {\n                w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n            }\n            \n            if (w.fixedWidth) {\n                w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n            } else {\n                w.el.style.right = \"\";\n            }\n        }\n    };\n    \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n    var first = 0;\n    var last = array.length - 1;\n\n    while (first <= last) {\n        var mid = (first + last) >> 1;\n        var c = comparator(needle, array[mid]);\n        if (c > 0)\n            first = mid + 1;\n        else if (c < 0)\n            last = mid - 1;\n        else\n            return mid;\n    }\n    return -(first + 1);\n}\n\nfunction findAnnotations(session, row, dir) {\n    var annotations = session.getAnnotations().sort(Range.comparePoints);\n    if (!annotations.length)\n        return;\n    \n    var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n    if (i < 0)\n        i = -i - 1;\n    \n    if (i >= annotations.length)\n        i = dir > 0 ? 0 : annotations.length - 1;\n    else if (i === 0 && dir < 0)\n        i = annotations.length - 1;\n    \n    var annotation = annotations[i];\n    if (!annotation || !dir)\n        return;\n\n    if (annotation.row === row) {\n        do {\n            annotation = annotations[i += dir];\n        } while (annotation && annotation.row === row);\n        if (!annotation)\n            return annotations.slice();\n    }\n    \n    \n    var matched = [];\n    row = annotation.row;\n    do {\n        matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n        annotation = annotations[i += dir];\n    } while (annotation && annotation.row == row);\n    return matched.length && matched;\n}\n\nexports.showErrorMarker = function(editor, dir) {\n    var session = editor.session;\n    if (!session.widgetManager) {\n        session.widgetManager = new LineWidgets(session);\n        session.widgetManager.attach(editor);\n    }\n    \n    var pos = editor.getCursorPosition();\n    var row = pos.row;\n    var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) {\n        return w.type == \"errorMarker\";\n    })[0];\n    if (oldWidget) {\n        oldWidget.destroy();\n    } else {\n        row -= dir;\n    }\n    var annotations = findAnnotations(session, row, dir);\n    var gutterAnno;\n    if (annotations) {\n        var annotation = annotations[0];\n        pos.column = (annotation.pos && typeof annotation.column != \"number\"\n            ? annotation.pos.sc\n            : annotation.column) || 0;\n        pos.row = annotation.row;\n        gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n    } else if (oldWidget) {\n        return;\n    } else {\n        gutterAnno = {\n            text: [\"Looks good!\"],\n            className: \"ace_ok\"\n        };\n    }\n    editor.session.unfold(pos.row);\n    editor.selection.moveToPosition(pos);\n    \n    var w = {\n        row: pos.row, \n        fixedWidth: true,\n        coverGutter: true,\n        el: dom.createElement(\"div\"),\n        type: \"errorMarker\"\n    };\n    var el = w.el.appendChild(dom.createElement(\"div\"));\n    var arrow = w.el.appendChild(dom.createElement(\"div\"));\n    arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n    \n    var left = editor.renderer.$cursorLayer\n        .getPixelPosition(pos).left;\n    arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n    \n    w.el.className = \"error_widget_wrapper\";\n    el.className = \"error_widget \" + gutterAnno.className;\n    el.innerHTML = gutterAnno.text.join(\"<br>\");\n    \n    el.appendChild(dom.createElement(\"div\"));\n    \n    var kb = function(_, hashId, keyString) {\n        if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n            w.destroy();\n            return {command: \"null\"};\n        }\n    };\n    \n    w.destroy = function() {\n        if (editor.$mouseHandler.isMousePressed)\n            return;\n        editor.keyBinding.removeKeyboardHandler(kb);\n        session.widgetManager.removeLineWidget(w);\n        editor.off(\"changeSelection\", w.destroy);\n        editor.off(\"changeSession\", w.destroy);\n        editor.off(\"mouseup\", w.destroy);\n        editor.off(\"change\", w.destroy);\n    };\n    \n    editor.keyBinding.addKeyboardHandler(kb);\n    editor.on(\"changeSelection\", w.destroy);\n    editor.on(\"changeSession\", w.destroy);\n    editor.on(\"mouseup\", w.destroy);\n    editor.on(\"change\", w.destroy);\n    \n    editor.session.widgetManager.addLineWidget(w);\n    \n    w.el.onmousedown = editor.focus.bind(editor);\n    \n    editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\n\ndom.importCssString(\"\\\n    .error_widget_wrapper {\\\n        background: inherit;\\\n        color: inherit;\\\n        border:none\\\n    }\\\n    .error_widget {\\\n        border-top: solid 2px;\\\n        border-bottom: solid 2px;\\\n        margin: 5px 0;\\\n        padding: 10px 40px;\\\n        white-space: pre-wrap;\\\n    }\\\n    .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n        border-color: #ff5a5a\\\n    }\\\n    .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n        border-color: #F1D817\\\n    }\\\n    .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n        border-color: #5a5a5a\\\n    }\\\n    .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n        border-color: #5aaa5a\\\n    }\\\n    .error_widget_arrow {\\\n        position: absolute;\\\n        border: solid 5px;\\\n        border-top-color: transparent!important;\\\n        border-right-color: transparent!important;\\\n        border-left-color: transparent!important;\\\n        top: -5px;\\\n    }\\\n\", \"\");\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\n\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\n\nexports.config = require(\"./config\");\nexports.require = require;\n\nif (typeof define === \"function\")\n    exports.define = define;\nexports.edit = function(el) {\n    if (typeof el == \"string\") {\n        var _id = el;\n        el = document.getElementById(_id);\n        if (!el)\n            throw new Error(\"ace.edit can't find div #\" + _id);\n    }\n\n    if (el && el.env && el.env.editor instanceof Editor)\n        return el.env.editor;\n\n    var value = \"\";\n    if (el && /input|textarea/i.test(el.tagName)) {\n        var oldNode = el;\n        value = oldNode.value;\n        el = dom.createElement(\"pre\");\n        oldNode.parentNode.replaceChild(el, oldNode);\n    } else if (el) {\n        value = dom.getInnerText(el);\n        el.innerHTML = \"\";\n    }\n\n    var doc = exports.createEditSession(value);\n\n    var editor = new Editor(new Renderer(el));\n    editor.setSession(doc);\n\n    var env = {\n        document: doc,\n        editor: editor,\n        onResize: editor.resize.bind(editor, null)\n    };\n    if (oldNode) env.textarea = oldNode;\n    event.addListener(window, \"resize\", env.onResize);\n    editor.on(\"destroy\", function() {\n        event.removeListener(window, \"resize\", env.onResize);\n        env.editor.container.env = null; // prevent memory leak on old ie\n    });\n    editor.container.env = editor.env = env;\n    return editor;\n};\nexports.createEditSession = function(text, mode) {\n    var doc = new EditSession(text, mode);\n    doc.setUndoManager(new UndoManager());\n    return doc;\n}\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.version = \"1.2.6\";\n});\n            (function() {\n                ace.require([\"ace/ace\"], function(a) {\n                    if (a) {\n                        a.config.init(true);\n                        a.define = ace.define;\n                    }\n                    if (!window.ace)\n                        window.ace = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        window.ace[key] = a[key];\n                });\n            })();\n        "
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-emmet.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    \n    this.getTokenizer = function() {\n        function TabstopToken(str, _, stack) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str) && !stack.inFormatString)\n                return [{tabstopId: parseInt(str, 10)}];\n            return [{text: str}];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                {regex: /:/, onMatch: function(val, state, stack) {\n                    if (stack.length && stack[0].expectIf) {\n                        stack[0].expectIf = false;\n                        stack[0].elseBranch = stack[0];\n                        return [stack[0]];\n                    }\n                    return \":\";\n                }},\n                {regex: /\\\\./, onMatch: function(val, state, stack) {\n                    var ch = val[1];\n                    if (ch == \"}\" && stack.length) {\n                        val = ch;\n                    }else if (\"`$\\\\\".indexOf(ch) != -1) {\n                        val = ch;\n                    } else if (stack.inFormatString) {\n                        if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\n\";\n                        else if (\"ulULE\".indexOf(ch) != -1) {\n                            val = {changeCase: ch, local: ch > \"a\"};\n                        }\n                    }\n\n                    return [val];\n                }},\n                {regex: /}/, onMatch: function(val, state, stack) {\n                    return [stack.length ? stack.shift() : val];\n                }},\n                {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n                {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n                    var t = TabstopToken(str.substr(1), state, stack);\n                    stack.unshift(t[0]);\n                    return t;\n                }, next: \"snippetVar\"},\n                {regex: /\\n/, token: \"newline\", merge: false}\n            ],\n            snippetVar: [\n                {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n                    stack[0].choices = val.slice(1, -1).split(\",\");\n                }, next: \"start\"},\n                {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n                 onMatch: function(val, state, stack) {\n                    var ts = stack[0];\n                    ts.fmtString = val;\n\n                    val = this.splitRegex.exec(val);\n                    ts.guard = val[1];\n                    ts.fmt = val[2];\n                    ts.flag = val[3];\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n                    stack[0].code = val.splice(1, -1);\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n                    if (stack[0])\n                        stack[0].expectIf = true;\n                }, next: \"start\"},\n                {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n            ],\n            formatString: [\n                {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n                {regex: \"\", onMatch: function(val, state, stack) {\n                    stack.inFormatString = true;\n                }, next: \"start\"}\n            ]\n        });\n        SnippetManager.prototype.getTokenizer = function() {\n            return SnippetManager.$tokenizer;\n        };\n        return SnippetManager.$tokenizer;\n    };\n\n    this.tokenizeTmSnippet = function(str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n            return x.value || x;\n        });\n    };\n\n    this.$getDefaultValue = function(editor, name) {\n        if (/^[A-Z]\\d+$/.test(name)) {\n            var i = name.substr(1);\n            return (this.variables[name[0] + \"__\"] || {})[i];\n        }\n        if (/^\\d+$/.test(name)) {\n            return (this.variables.__ || {})[name];\n        }\n        name = name.replace(/^TM_/, \"\");\n\n        if (!editor)\n            return;\n        var s = editor.session;\n        switch(name) {\n            case \"CURRENT_WORD\":\n                var r = s.getWordRange();\n            case \"SELECTION\":\n            case \"SELECTED_TEXT\":\n                return s.getTextRange(r);\n            case \"CURRENT_LINE\":\n                return s.getLine(editor.getCursorPosition().row);\n            case \"PREV_LINE\": // not possible in textmate\n                return s.getLine(editor.getCursorPosition().row - 1);\n            case \"LINE_INDEX\":\n                return editor.getCursorPosition().column;\n            case \"LINE_NUMBER\":\n                return editor.getCursorPosition().row + 1;\n            case \"SOFT_TABS\":\n                return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n            case \"TAB_SIZE\":\n                return s.getTabSize();\n            case \"FILENAME\":\n            case \"FILEPATH\":\n                return \"\";\n            case \"FULLNAME\":\n                return \"Ace\";\n        }\n    };\n    this.variables = {};\n    this.getVariableValue = function(editor, varName) {\n        if (this.variables.hasOwnProperty(varName))\n            return this.variables[varName](editor, varName) || \"\";\n        return this.$getDefaultValue(editor, varName) || \"\";\n    };\n    this.tmStrFormat = function(str, ch, editor) {\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n        var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n        var _self = this;\n        var formatted = str.replace(re, function() {\n            _self.variables.__ = arguments;\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i  = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    } else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                } else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                } else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            return fmtParts.join(\"\");\n        });\n        this.variables.__ = null;\n        return formatted;\n    };\n\n    this.resolveVariables = function(snippet, editor) {\n        var result = [];\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n            } else if (typeof ch != \"object\") {\n                continue;\n            } else if (ch.skip) {\n                gotoNext(ch);\n            } else if (ch.processed < i) {\n                continue;\n            } else if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text);\n                if (value && ch.fmtString)\n                    value = this.tmStrFormat(value, ch);\n                ch.processed = i;\n                if (ch.expectIf == null) {\n                    if (value) {\n                        result.push(value);\n                        gotoNext(ch);\n                    }\n                } else {\n                    if (value) {\n                        ch.skip = ch.elseBranch;\n                    } else\n                        gotoNext(ch);\n                }\n            } else if (ch.tabstopId != null) {\n                result.push(ch);\n            } else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n\n    this.insertSnippetForSelection = function(editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        \n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function(x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function(p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function(t) {return typeof t === \"object\"});          \n            if (isNested && !ts.value) {\n                ts.value = value;\n            } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function(ts) {ts.length = 0});\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || {tabstopId: p.tabstopId};\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p)\n                    expanding[id] = null;\n                continue;\n            }\n            \n            var ts = tabstops[id];\n            var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n            arg.unshift(i + 1, Math.max(0, i1 - i));\n            arg.push(p);\n            expanding[id] = p;\n            tokens.splice.apply(tokens, arg);\n\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function(t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1){\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                } else\n                    column += t.length;\n                text += t;\n            } else {\n                if (!t.start)\n                    t.start = {row: row, column: column};\n                else\n                    t.end = {row: row, column: column};\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    \n    this.insertSnippet = function(editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        \n        editor.forEachSelection(function() {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, {keepOrder: true});\n        \n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n\n    this.$getScope = function(editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        \n        return scope;\n    };\n\n    this.getActiveScopes = function(editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n\n    this.expandWithTab = function(editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function() {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, {keepOrder: true});\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    \n    this.expandSnippetForSelection = function(editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row,\n            cursor.column - snippet.replaceBefore.length,\n            cursor.column + snippet.replaceAfter.length\n        );\n\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n\n    this.findMatchingSnippet = function(snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        \n        if (!snippets) \n            snippets = [];\n        \n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            } else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            \n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            \n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger, \"\", true);\n\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger, \"\", true);\n        }\n\n        if (snippets && snippets.content)\n            addSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(addSnippet);\n        \n        this._signal(\"registerSnippets\", {scope: scope});\n    };\n    this.unregister = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope||scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope||scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function(str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                } catch (e) {}\n            } if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            } else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                } else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                } else {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function(name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function() {\n    this.attach = function(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function() {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n\n    this.onChange = function(delta) {\n        var changeRange = delta;\n        var isRemove = delta.action[0] == \"r\";\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n        var colDiff = end.column - start.column;\n\n        if (isRemove) {\n            lineDif = -lineDif;\n            colDiff = -colDiff;\n        }\n        if (!this.$inChange && isRemove) {\n            var ts = this.selectedTabstop;\n            var changedOutside = ts && !ts.some(function(r) {\n                return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n            });\n            if (changedOutside)\n                return this.detach();\n        }\n        var ranges = this.ranges;\n        for (var i = 0; i < ranges.length; i++) {\n            var r = ranges[i];\n            if (r.end.row < start.row)\n                continue;\n\n            if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n                this.removeRange(r);\n                i--;\n                continue;\n            }\n\n            if (r.start.row == startRow && r.start.column > start.column)\n                r.start.column += colDiff;\n            if (r.end.row == startRow && r.end.column >= start.column)\n                r.end.column += colDiff;\n            if (r.start.row >= startRow)\n                r.start.row += lineDif;\n            if (r.end.row >= startRow)\n                r.end.row += lineDif;\n\n            if (comparePoints(r.start, r.end) > 0)\n                this.removeRange(r);\n        }\n        if (!ranges.length)\n            this.detach();\n    };\n    this.updateLinkedFields = function() {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = ts.length; i--;) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function(e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function() {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = this.ranges.length; i--;) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function() {\n        this.detach();\n    };\n    this.tabNext = function(dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function(index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        \n        this.selectedTabstop = ts;\n        if (!this.editor.inVirtualSelectionMode) {        \n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(ts.firstNonLinked.clone());\n            for (var i = ts.length; i--;) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n            if (sel.ranges[0])\n                sel.addRange(sel.ranges[0].clone());\n        } else {\n            this.editor.selection.setRange(ts.firstNonLinked);\n        }\n        \n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.addTabstops = function(tabstops, start, end) {\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function(ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n                \n            for (var i = ts.length; i--;) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                } else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n        }, this);\n        \n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n\n    this.addTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            if  (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function(range) {\n        var i = range.tabstop.indexOf(range);\n        range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        this.ranges.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function(ed) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n                return;\n            }\n\n            ed.tabstopManager.tabNext(1);\n        },\n        \"Shift-Tab\": function(ed) {\n            ed.tabstopManager.tabNext(-1);\n        },\n        \"Esc\": function(ed) {\n            ed.tabstopManager.detach();\n        },\n        \"Return\": function(ed) {\n            return false;\n        }\n    });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n    this.pos.row = row;\n    this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n    this.$insertRight = $insertRight;\n    this.pos = pos; \n    this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n    -moz-box-sizing: border-box;\\\n    box-sizing: border-box;\\\n    background: rgba(194, 193, 208, 0.09);\\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\\n    position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.insertSnippet = function(content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function(options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"resources\",\"resources\",\"tabStops\",\"resources\",\"utils\",\"actions\",\"ace/config\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\nvar HashHandler = require(\"ace/keyboard/hash_handler\").HashHandler;\nvar Editor = require(\"ace/editor\").Editor;\nvar snippetManager = require(\"ace/snippets\").snippetManager;\nvar Range = require(\"ace/range\").Range;\nvar emmet, emmetPath;\nfunction AceEmmetEditor() {}\n\nAceEmmetEditor.prototype = {\n    setupContext: function(editor) {\n        this.ace = editor;\n        this.indentation = editor.session.getTabString();\n        if (!emmet)\n            emmet = window.emmet;\n        var resources = emmet.resources || emmet.require(\"resources\");\n        resources.setVariable(\"indentation\", this.indentation);\n        this.$syntax = null;\n        this.$syntax = this.getSyntax();\n    },\n    getSelectionRange: function() {\n        var range = this.ace.getSelectionRange();\n        var doc = this.ace.session.doc;\n        return {\n            start: doc.positionToIndex(range.start),\n            end: doc.positionToIndex(range.end)\n        };\n    },\n    createSelection: function(start, end) {\n        var doc = this.ace.session.doc;\n        this.ace.selection.setRange({\n            start: doc.indexToPosition(start),\n            end: doc.indexToPosition(end)\n        });\n    },\n    getCurrentLineRange: function() {\n        var ace = this.ace;\n        var row = ace.getCursorPosition().row;\n        var lineLength = ace.session.getLine(row).length;\n        var index = ace.session.doc.positionToIndex({row: row, column: 0});\n        return {\n            start: index,\n            end: index + lineLength\n        };\n    },\n    getCaretPos: function(){\n        var pos = this.ace.getCursorPosition();\n        return this.ace.session.doc.positionToIndex(pos);\n    },\n    setCaretPos: function(index){\n        var pos = this.ace.session.doc.indexToPosition(index);\n        this.ace.selection.moveToPosition(pos);\n    },\n    getCurrentLine: function() {\n        var row = this.ace.getCursorPosition().row;\n        return this.ace.session.getLine(row);\n    },\n    replaceContent: function(value, start, end, noIndent) {\n        if (end == null)\n            end = start == null ? this.getContent().length : start;\n        if (start == null)\n            start = 0;        \n        \n        var editor = this.ace;\n        var doc = editor.session.doc;\n        var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end));\n        editor.session.remove(range);\n        \n        range.end = range.start;\n        \n        value = this.$updateTabstops(value);\n        snippetManager.insertSnippet(editor, value);\n    },\n    getContent: function(){\n        return this.ace.getValue();\n    },\n    getSyntax: function() {\n        if (this.$syntax)\n            return this.$syntax;\n        var syntax = this.ace.session.$modeId.split(\"/\").pop();\n        if (syntax == \"html\" || syntax == \"php\") {\n            var cursor = this.ace.getCursorPosition();\n            var state = this.ace.session.getState(cursor.row);\n            if (typeof state != \"string\")\n                state = state[0];\n            if (state) {\n                state = state.split(\"-\");\n                if (state.length > 1)\n                    syntax = state[0];\n                else if (syntax == \"php\")\n                    syntax = \"html\";\n            }\n        }\n        return syntax;\n    },\n    getProfileName: function() {\n        var resources = emmet.resources || emmet.require(\"resources\");\n        switch (this.getSyntax()) {\n          case \"css\": return \"css\";\n          case \"xml\":\n          case \"xsl\":\n            return \"xml\";\n          case \"html\":\n            var profile = resources.getVariable(\"profile\");\n            if (!profile)\n                profile = this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i) != -1 ? \"xhtml\": \"html\";\n            return profile;\n          default:\n            var mode = this.ace.session.$mode;\n            return mode.emmetConfig && mode.emmetConfig.profile || \"xhtml\";\n        }\n    },\n    prompt: function(title) {\n        return prompt(title);\n    },\n    getSelection: function() {\n        return this.ace.session.getTextRange();\n    },\n    getFilePath: function() {\n        return \"\";\n    },\n    $updateTabstops: function(value) {\n        var base = 1000;\n        var zeroBase = 0;\n        var lastZero = null;\n        var ts = emmet.tabStops || emmet.require('tabStops');\n        var resources = emmet.resources || emmet.require(\"resources\");\n        var settings = resources.getVocabulary(\"user\");\n        var tabstopOptions = {\n            tabstop: function(data) {\n                var group = parseInt(data.group, 10);\n                var isZero = group === 0;\n                if (isZero)\n                    group = ++zeroBase;\n                else\n                    group += base;\n\n                var placeholder = data.placeholder;\n                if (placeholder) {\n                    placeholder = ts.processText(placeholder, tabstopOptions);\n                }\n\n                var result = '${' + group + (placeholder ? ':' + placeholder : '') + '}';\n\n                if (isZero) {\n                    lastZero = [data.start, result];\n                }\n\n                return result;\n            },\n            escape: function(ch) {\n                if (ch == '$') return '\\\\$';\n                if (ch == '\\\\') return '\\\\\\\\';\n                return ch;\n            }\n        };\n\n        value = ts.processText(value, tabstopOptions);\n\n        if (settings.variables['insert_final_tabstop'] && !/\\$\\{0\\}$/.test(value)) {\n            value += '${0}';\n        } else if (lastZero) {\n            var common = emmet.utils ? emmet.utils.common : emmet.require('utils');\n            value = common.replaceSubstring(value, '${0}', lastZero[0], lastZero[1]);\n        }\n        \n        return value;\n    }\n};\n\n\nvar keymap = {\n    expand_abbreviation: {\"mac\": \"ctrl+alt+e\", \"win\": \"alt+e\"},\n    match_pair_outward: {\"mac\": \"ctrl+d\", \"win\": \"ctrl+,\"},\n    match_pair_inward: {\"mac\": \"ctrl+j\", \"win\": \"ctrl+shift+0\"},\n    matching_pair: {\"mac\": \"ctrl+alt+j\", \"win\": \"alt+j\"},\n    next_edit_point: \"alt+right\",\n    prev_edit_point: \"alt+left\",\n    toggle_comment: {\"mac\": \"command+/\", \"win\": \"ctrl+/\"},\n    split_join_tag: {\"mac\": \"shift+command+'\", \"win\": \"shift+ctrl+`\"},\n    remove_tag: {\"mac\": \"command+'\", \"win\": \"shift+ctrl+;\"},\n    evaluate_math_expression: {\"mac\": \"shift+command+y\", \"win\": \"shift+ctrl+y\"},\n    increment_number_by_1: \"ctrl+up\",\n    decrement_number_by_1: \"ctrl+down\",\n    increment_number_by_01: \"alt+up\",\n    decrement_number_by_01: \"alt+down\",\n    increment_number_by_10: {\"mac\": \"alt+command+up\", \"win\": \"shift+alt+up\"},\n    decrement_number_by_10: {\"mac\": \"alt+command+down\", \"win\": \"shift+alt+down\"},\n    select_next_item: {\"mac\": \"shift+command+.\", \"win\": \"shift+ctrl+.\"},\n    select_previous_item: {\"mac\": \"shift+command+,\", \"win\": \"shift+ctrl+,\"},\n    reflect_css_value: {\"mac\": \"shift+command+r\", \"win\": \"shift+ctrl+r\"},\n\n    encode_decode_data_url: {\"mac\": \"shift+ctrl+d\", \"win\": \"ctrl+'\"},\n    expand_abbreviation_with_tab: \"Tab\",\n    wrap_with_abbreviation: {\"mac\": \"shift+ctrl+a\", \"win\": \"shift+ctrl+a\"}\n};\n\nvar editorProxy = new AceEmmetEditor();\nexports.commands = new HashHandler();\nexports.runEmmetCommand = function runEmmetCommand(editor) {\n    try {\n        editorProxy.setupContext(editor);\n        var actions = emmet.actions || emmet.require(\"actions\");\n    \n        if (this.action == \"expand_abbreviation_with_tab\") {\n            if (!editor.selection.isEmpty())\n                return false;\n            var pos = editor.selection.lead;\n            var token = editor.session.getTokenAt(pos.row, pos.column);\n            if (token && /\\btag\\b/.test(token.type))\n                return false;\n        }\n        \n        if (this.action == \"wrap_with_abbreviation\") {\n            return setTimeout(function() {\n                actions.run(\"wrap_with_abbreviation\", editorProxy);\n            }, 0);\n        }\n        \n        var result = actions.run(this.action, editorProxy);\n    } catch(e) {\n        if (!emmet) {\n            load(runEmmetCommand.bind(this, editor));\n            return true;\n        }\n        editor._signal(\"changeStatus\", typeof e == \"string\" ? e : e.message);\n        console.log(e);\n        result = false;\n    }\n    return result;\n};\n\nfor (var command in keymap) {\n    exports.commands.addCommand({\n        name: \"emmet:\" + command,\n        action: command,\n        bindKey: keymap[command],\n        exec: exports.runEmmetCommand,\n        multiSelectAction: \"forEach\"\n    });\n}\n\nexports.updateCommands = function(editor, enabled) {\n    if (enabled) {\n        editor.keyBinding.addKeyboardHandler(exports.commands);\n    } else {\n        editor.keyBinding.removeKeyboardHandler(exports.commands);\n    }\n};\n\nexports.isSupportedMode = function(mode) {\n    if (!mode) return false;\n    if (mode.emmetConfig) return true;\n    var id = mode.$id || mode;\n    return /css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(id);\n};\n\nexports.isAvailable = function(editor, command) {\n    if (/(evaluate_math_expression|expand_abbreviation)$/.test(command))\n        return true;\n    var mode = editor.session.$mode;\n    var isSupported = exports.isSupportedMode(mode);\n    if (isSupported && mode.$modes) {\n        try {\n            editorProxy.setupContext(editor);\n            if (/js|php/.test(editorProxy.getSyntax()))\n                isSupported = false;\n        } catch(e) {}\n    }\n    return isSupported;\n}\n\nvar onChangeMode = function(e, target) {\n    var editor = target;\n    if (!editor)\n        return;\n    var enabled = exports.isSupportedMode(editor.session.$mode);\n    if (e.enableEmmet === false)\n        enabled = false;\n    if (enabled)\n        load();\n    exports.updateCommands(editor, enabled);\n};\n\nvar load = function(cb) {\n    if (typeof emmetPath == \"string\") {\n        require(\"ace/config\").loadModule(emmetPath, function() {\n            emmetPath = null;\n            cb && cb();\n        });\n    }\n};\n\nexports.AceEmmetEditor = AceEmmetEditor;\nrequire(\"ace/config\").defineOptions(Editor.prototype, \"editor\", {\n    enableEmmet: {\n        set: function(val) {\n            this[val ? \"on\" : \"removeListener\"](\"changeMode\", onChangeMode);\n            onChangeMode({enableEmmet: !!val}, this);\n        },\n        value: true\n    }\n});\n\nexports.setCore = function(e) {\n    if (typeof e == \"string\")\n       emmetPath = e;\n    else\n       emmet = e;\n};\n});\n                (function() {\n                    ace.require([\"ace/ext/emmet\"], function() {});\n                })();\n            "
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-language_tools.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar comparePoints = Range.comparePoints;\n\nvar SnippetManager = function() {\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n};\n\n(function() {\n    oop.implement(this, EventEmitter);\n    \n    this.getTokenizer = function() {\n        function TabstopToken(str, _, stack) {\n            str = str.substr(1);\n            if (/^\\d+$/.test(str) && !stack.inFormatString)\n                return [{tabstopId: parseInt(str, 10)}];\n            return [{text: str}];\n        }\n        function escape(ch) {\n            return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n        }\n        SnippetManager.$tokenizer = new Tokenizer({\n            start: [\n                {regex: /:/, onMatch: function(val, state, stack) {\n                    if (stack.length && stack[0].expectIf) {\n                        stack[0].expectIf = false;\n                        stack[0].elseBranch = stack[0];\n                        return [stack[0]];\n                    }\n                    return \":\";\n                }},\n                {regex: /\\\\./, onMatch: function(val, state, stack) {\n                    var ch = val[1];\n                    if (ch == \"}\" && stack.length) {\n                        val = ch;\n                    }else if (\"`$\\\\\".indexOf(ch) != -1) {\n                        val = ch;\n                    } else if (stack.inFormatString) {\n                        if (ch == \"n\")\n                            val = \"\\n\";\n                        else if (ch == \"t\")\n                            val = \"\\n\";\n                        else if (\"ulULE\".indexOf(ch) != -1) {\n                            val = {changeCase: ch, local: ch > \"a\"};\n                        }\n                    }\n\n                    return [val];\n                }},\n                {regex: /}/, onMatch: function(val, state, stack) {\n                    return [stack.length ? stack.shift() : val];\n                }},\n                {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n                {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n                    var t = TabstopToken(str.substr(1), state, stack);\n                    stack.unshift(t[0]);\n                    return t;\n                }, next: \"snippetVar\"},\n                {regex: /\\n/, token: \"newline\", merge: false}\n            ],\n            snippetVar: [\n                {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n                    stack[0].choices = val.slice(1, -1).split(\",\");\n                }, next: \"start\"},\n                {regex: \"/(\" + escape(\"/\") + \"+)/(?:(\" + escape(\"/\") + \"*)/)(\\\\w*):?\",\n                 onMatch: function(val, state, stack) {\n                    var ts = stack[0];\n                    ts.fmtString = val;\n\n                    val = this.splitRegex.exec(val);\n                    ts.guard = val[1];\n                    ts.fmt = val[2];\n                    ts.flag = val[3];\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"`\" + escape(\"`\") + \"*`\", onMatch: function(val, state, stack) {\n                    stack[0].code = val.splice(1, -1);\n                    return \"\";\n                }, next: \"start\"},\n                {regex: \"\\\\?\", onMatch: function(val, state, stack) {\n                    if (stack[0])\n                        stack[0].expectIf = true;\n                }, next: \"start\"},\n                {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n            ],\n            formatString: [\n                {regex: \"/(\" + escape(\"/\") + \"+)/\", token: \"regex\"},\n                {regex: \"\", onMatch: function(val, state, stack) {\n                    stack.inFormatString = true;\n                }, next: \"start\"}\n            ]\n        });\n        SnippetManager.prototype.getTokenizer = function() {\n            return SnippetManager.$tokenizer;\n        };\n        return SnippetManager.$tokenizer;\n    };\n\n    this.tokenizeTmSnippet = function(str, startState) {\n        return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n            return x.value || x;\n        });\n    };\n\n    this.$getDefaultValue = function(editor, name) {\n        if (/^[A-Z]\\d+$/.test(name)) {\n            var i = name.substr(1);\n            return (this.variables[name[0] + \"__\"] || {})[i];\n        }\n        if (/^\\d+$/.test(name)) {\n            return (this.variables.__ || {})[name];\n        }\n        name = name.replace(/^TM_/, \"\");\n\n        if (!editor)\n            return;\n        var s = editor.session;\n        switch(name) {\n            case \"CURRENT_WORD\":\n                var r = s.getWordRange();\n            case \"SELECTION\":\n            case \"SELECTED_TEXT\":\n                return s.getTextRange(r);\n            case \"CURRENT_LINE\":\n                return s.getLine(editor.getCursorPosition().row);\n            case \"PREV_LINE\": // not possible in textmate\n                return s.getLine(editor.getCursorPosition().row - 1);\n            case \"LINE_INDEX\":\n                return editor.getCursorPosition().column;\n            case \"LINE_NUMBER\":\n                return editor.getCursorPosition().row + 1;\n            case \"SOFT_TABS\":\n                return s.getUseSoftTabs() ? \"YES\" : \"NO\";\n            case \"TAB_SIZE\":\n                return s.getTabSize();\n            case \"FILENAME\":\n            case \"FILEPATH\":\n                return \"\";\n            case \"FULLNAME\":\n                return \"Ace\";\n        }\n    };\n    this.variables = {};\n    this.getVariableValue = function(editor, varName) {\n        if (this.variables.hasOwnProperty(varName))\n            return this.variables[varName](editor, varName) || \"\";\n        return this.$getDefaultValue(editor, varName) || \"\";\n    };\n    this.tmStrFormat = function(str, ch, editor) {\n        var flag = ch.flag || \"\";\n        var re = ch.guard;\n        re = new RegExp(re, flag.replace(/[^gi]/, \"\"));\n        var fmtTokens = this.tokenizeTmSnippet(ch.fmt, \"formatString\");\n        var _self = this;\n        var formatted = str.replace(re, function() {\n            _self.variables.__ = arguments;\n            var fmtParts = _self.resolveVariables(fmtTokens, editor);\n            var gChangeCase = \"E\";\n            for (var i  = 0; i < fmtParts.length; i++) {\n                var ch = fmtParts[i];\n                if (typeof ch == \"object\") {\n                    fmtParts[i] = \"\";\n                    if (ch.changeCase && ch.local) {\n                        var next = fmtParts[i + 1];\n                        if (next && typeof next == \"string\") {\n                            if (ch.changeCase == \"u\")\n                                fmtParts[i] = next[0].toUpperCase();\n                            else\n                                fmtParts[i] = next[0].toLowerCase();\n                            fmtParts[i + 1] = next.substr(1);\n                        }\n                    } else if (ch.changeCase) {\n                        gChangeCase = ch.changeCase;\n                    }\n                } else if (gChangeCase == \"U\") {\n                    fmtParts[i] = ch.toUpperCase();\n                } else if (gChangeCase == \"L\") {\n                    fmtParts[i] = ch.toLowerCase();\n                }\n            }\n            return fmtParts.join(\"\");\n        });\n        this.variables.__ = null;\n        return formatted;\n    };\n\n    this.resolveVariables = function(snippet, editor) {\n        var result = [];\n        for (var i = 0; i < snippet.length; i++) {\n            var ch = snippet[i];\n            if (typeof ch == \"string\") {\n                result.push(ch);\n            } else if (typeof ch != \"object\") {\n                continue;\n            } else if (ch.skip) {\n                gotoNext(ch);\n            } else if (ch.processed < i) {\n                continue;\n            } else if (ch.text) {\n                var value = this.getVariableValue(editor, ch.text);\n                if (value && ch.fmtString)\n                    value = this.tmStrFormat(value, ch);\n                ch.processed = i;\n                if (ch.expectIf == null) {\n                    if (value) {\n                        result.push(value);\n                        gotoNext(ch);\n                    }\n                } else {\n                    if (value) {\n                        ch.skip = ch.elseBranch;\n                    } else\n                        gotoNext(ch);\n                }\n            } else if (ch.tabstopId != null) {\n                result.push(ch);\n            } else if (ch.changeCase != null) {\n                result.push(ch);\n            }\n        }\n        function gotoNext(ch) {\n            var i1 = snippet.indexOf(ch, i + 1);\n            if (i1 != -1)\n                i = i1;\n        }\n        return result;\n    };\n\n    this.insertSnippetForSelection = function(editor, snippetText) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var tabString = editor.session.getTabString();\n        var indentString = line.match(/^\\s*/)[0];\n        \n        if (cursor.column < indentString.length)\n            indentString = indentString.slice(0, cursor.column);\n\n        snippetText = snippetText.replace(/\\r/g, \"\");\n        var tokens = this.tokenizeTmSnippet(snippetText);\n        tokens = this.resolveVariables(tokens, editor);\n        tokens = tokens.map(function(x) {\n            if (x == \"\\n\")\n                return x + indentString;\n            if (typeof x == \"string\")\n                return x.replace(/\\t/g, tabString);\n            return x;\n        });\n        var tabstops = [];\n        tokens.forEach(function(p, i) {\n            if (typeof p != \"object\")\n                return;\n            var id = p.tabstopId;\n            var ts = tabstops[id];\n            if (!ts) {\n                ts = tabstops[id] = [];\n                ts.index = id;\n                ts.value = \"\";\n            }\n            if (ts.indexOf(p) !== -1)\n                return;\n            ts.push(p);\n            var i1 = tokens.indexOf(p, i + 1);\n            if (i1 === -1)\n                return;\n\n            var value = tokens.slice(i + 1, i1);\n            var isNested = value.some(function(t) {return typeof t === \"object\"});          \n            if (isNested && !ts.value) {\n                ts.value = value;\n            } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n                ts.value = value.join(\"\");\n            }\n        });\n        tabstops.forEach(function(ts) {ts.length = 0});\n        var expanding = {};\n        function copyValue(val) {\n            var copy = [];\n            for (var i = 0; i < val.length; i++) {\n                var p = val[i];\n                if (typeof p == \"object\") {\n                    if (expanding[p.tabstopId])\n                        continue;\n                    var j = val.lastIndexOf(p, i - 1);\n                    p = copy[j] || {tabstopId: p.tabstopId};\n                }\n                copy[i] = p;\n            }\n            return copy;\n        }\n        for (var i = 0; i < tokens.length; i++) {\n            var p = tokens[i];\n            if (typeof p != \"object\")\n                continue;\n            var id = p.tabstopId;\n            var i1 = tokens.indexOf(p, i + 1);\n            if (expanding[id]) {\n                if (expanding[id] === p)\n                    expanding[id] = null;\n                continue;\n            }\n            \n            var ts = tabstops[id];\n            var arg = typeof ts.value == \"string\" ? [ts.value] : copyValue(ts.value);\n            arg.unshift(i + 1, Math.max(0, i1 - i));\n            arg.push(p);\n            expanding[id] = p;\n            tokens.splice.apply(tokens, arg);\n\n            if (ts.indexOf(p) === -1)\n                ts.push(p);\n        }\n        var row = 0, column = 0;\n        var text = \"\";\n        tokens.forEach(function(t) {\n            if (typeof t === \"string\") {\n                var lines = t.split(\"\\n\");\n                if (lines.length > 1){\n                    column = lines[lines.length - 1].length;\n                    row += lines.length - 1;\n                } else\n                    column += t.length;\n                text += t;\n            } else {\n                if (!t.start)\n                    t.start = {row: row, column: column};\n                else\n                    t.end = {row: row, column: column};\n            }\n        });\n        var range = editor.getSelectionRange();\n        var end = editor.session.replace(range, text);\n\n        var tabstopManager = new TabstopManager(editor);\n        var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n        tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n    };\n    \n    this.insertSnippet = function(editor, snippetText) {\n        var self = this;\n        if (editor.inVirtualSelectionMode)\n            return self.insertSnippetForSelection(editor, snippetText);\n        \n        editor.forEachSelection(function() {\n            self.insertSnippetForSelection(editor, snippetText);\n        }, null, {keepOrder: true});\n        \n        if (editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n    };\n\n    this.$getScope = function(editor) {\n        var scope = editor.session.$mode.$id || \"\";\n        scope = scope.split(\"/\").pop();\n        if (scope === \"html\" || scope === \"php\") {\n            if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n                scope = \"html\";\n            var c = editor.getCursorPosition();\n            var state = editor.session.getState(c.row);\n            if (typeof state === \"object\") {\n                state = state[0];\n            }\n            if (state.substring) {\n                if (state.substring(0, 3) == \"js-\")\n                    scope = \"javascript\";\n                else if (state.substring(0, 4) == \"css-\")\n                    scope = \"css\";\n                else if (state.substring(0, 4) == \"php-\")\n                    scope = \"php\";\n            }\n        }\n        \n        return scope;\n    };\n\n    this.getActiveScopes = function(editor) {\n        var scope = this.$getScope(editor);\n        var scopes = [scope];\n        var snippetMap = this.snippetMap;\n        if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n            scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n        }\n        scopes.push(\"_\");\n        return scopes;\n    };\n\n    this.expandWithTab = function(editor, options) {\n        var self = this;\n        var result = editor.forEachSelection(function() {\n            return self.expandSnippetForSelection(editor, options);\n        }, null, {keepOrder: true});\n        if (result && editor.tabstopManager)\n            editor.tabstopManager.tabNext();\n        return result;\n    };\n    \n    this.expandSnippetForSelection = function(editor, options) {\n        var cursor = editor.getCursorPosition();\n        var line = editor.session.getLine(cursor.row);\n        var before = line.substring(0, cursor.column);\n        var after = line.substr(cursor.column);\n\n        var snippetMap = this.snippetMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = this.findMatchingSnippet(snippets, before, after);\n            return !!snippet;\n        }, this);\n        if (!snippet)\n            return false;\n        if (options && options.dryRun)\n            return true;\n        editor.session.doc.removeInLine(cursor.row,\n            cursor.column - snippet.replaceBefore.length,\n            cursor.column + snippet.replaceAfter.length\n        );\n\n        this.variables.M__ = snippet.matchBefore;\n        this.variables.T__ = snippet.matchAfter;\n        this.insertSnippetForSelection(editor, snippet.content);\n\n        this.variables.M__ = this.variables.T__ = null;\n        return true;\n    };\n\n    this.findMatchingSnippet = function(snippetList, before, after) {\n        for (var i = snippetList.length; i--;) {\n            var s = snippetList[i];\n            if (s.startRe && !s.startRe.test(before))\n                continue;\n            if (s.endRe && !s.endRe.test(after))\n                continue;\n            if (!s.startRe && !s.endRe)\n                continue;\n\n            s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n            s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n            s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n            s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n            return s;\n        }\n    };\n\n    this.snippetMap = {};\n    this.snippetNameMap = {};\n    this.register = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n        var self = this;\n        \n        if (!snippets) \n            snippets = [];\n        \n        function wrapRegexp(src) {\n            if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n                src = \"(?:\" + src + \")\";\n\n            return src || \"\";\n        }\n        function guardedRegexp(re, guard, opening) {\n            re = wrapRegexp(re);\n            guard = wrapRegexp(guard);\n            if (opening) {\n                re = guard + re;\n                if (re && re[re.length - 1] != \"$\")\n                    re = re + \"$\";\n            } else {\n                re = re + guard;\n                if (re && re[0] != \"^\")\n                    re = \"^\" + re;\n            }\n            return new RegExp(re);\n        }\n\n        function addSnippet(s) {\n            if (!s.scope)\n                s.scope = scope || \"_\";\n            scope = s.scope;\n            if (!snippetMap[scope]) {\n                snippetMap[scope] = [];\n                snippetNameMap[scope] = {};\n            }\n\n            var map = snippetNameMap[scope];\n            if (s.name) {\n                var old = map[s.name];\n                if (old)\n                    self.unregister(old);\n                map[s.name] = s;\n            }\n            snippetMap[scope].push(s);\n\n            if (s.tabTrigger && !s.trigger) {\n                if (!s.guard && /^\\w/.test(s.tabTrigger))\n                    s.guard = \"\\\\b\";\n                s.trigger = lang.escapeRegExp(s.tabTrigger);\n            }\n            \n            if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n                return;\n            \n            s.startRe = guardedRegexp(s.trigger, s.guard, true);\n            s.triggerRe = new RegExp(s.trigger, \"\", true);\n\n            s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n            s.endTriggerRe = new RegExp(s.endTrigger, \"\", true);\n        }\n\n        if (snippets && snippets.content)\n            addSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(addSnippet);\n        \n        this._signal(\"registerSnippets\", {scope: scope});\n    };\n    this.unregister = function(snippets, scope) {\n        var snippetMap = this.snippetMap;\n        var snippetNameMap = this.snippetNameMap;\n\n        function removeSnippet(s) {\n            var nameMap = snippetNameMap[s.scope||scope];\n            if (nameMap && nameMap[s.name]) {\n                delete nameMap[s.name];\n                var map = snippetMap[s.scope||scope];\n                var i = map && map.indexOf(s);\n                if (i >= 0)\n                    map.splice(i, 1);\n            }\n        }\n        if (snippets.content)\n            removeSnippet(snippets);\n        else if (Array.isArray(snippets))\n            snippets.forEach(removeSnippet);\n    };\n    this.parseSnippetFile = function(str) {\n        str = str.replace(/\\r/g, \"\");\n        var list = [], snippet = {};\n        var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n        var m;\n        while (m = re.exec(str)) {\n            if (m[1]) {\n                try {\n                    snippet = JSON.parse(m[1]);\n                    list.push(snippet);\n                } catch (e) {}\n            } if (m[4]) {\n                snippet.content = m[4].replace(/^\\t/gm, \"\");\n                list.push(snippet);\n                snippet = {};\n            } else {\n                var key = m[2], val = m[3];\n                if (key == \"regex\") {\n                    var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n                    snippet.guard = guardRe.exec(val)[1];\n                    snippet.trigger = guardRe.exec(val)[1];\n                    snippet.endTrigger = guardRe.exec(val)[1];\n                    snippet.endGuard = guardRe.exec(val)[1];\n                } else if (key == \"snippet\") {\n                    snippet.tabTrigger = val.match(/^\\S*/)[0];\n                    if (!snippet.name)\n                        snippet.name = val;\n                } else {\n                    snippet[key] = val;\n                }\n            }\n        }\n        return list;\n    };\n    this.getSnippetByName = function(name, editor) {\n        var snippetMap = this.snippetNameMap;\n        var snippet;\n        this.getActiveScopes(editor).some(function(scope) {\n            var snippets = snippetMap[scope];\n            if (snippets)\n                snippet = snippets[name];\n            return !!snippet;\n        }, this);\n        return snippet;\n    };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n    if (editor.tabstopManager)\n        return editor.tabstopManager;\n    editor.tabstopManager = this;\n    this.$onChange = this.onChange.bind(this);\n    this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n    this.$onChangeSession = this.onChangeSession.bind(this);\n    this.$onAfterExec = this.onAfterExec.bind(this);\n    this.attach(editor);\n};\n(function() {\n    this.attach = function(editor) {\n        this.index = 0;\n        this.ranges = [];\n        this.tabstops = [];\n        this.$openTabstops = null;\n        this.selectedTabstop = null;\n\n        this.editor = editor;\n        this.editor.on(\"change\", this.$onChange);\n        this.editor.on(\"changeSelection\", this.$onChangeSelection);\n        this.editor.on(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.detach = function() {\n        this.tabstops.forEach(this.removeTabstopMarkers, this);\n        this.ranges = null;\n        this.tabstops = null;\n        this.selectedTabstop = null;\n        this.editor.removeListener(\"change\", this.$onChange);\n        this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n        this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n        this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.tabstopManager = null;\n        this.editor = null;\n    };\n\n    this.onChange = function(delta) {\n        var changeRange = delta;\n        var isRemove = delta.action[0] == \"r\";\n        var start = delta.start;\n        var end = delta.end;\n        var startRow = start.row;\n        var endRow = end.row;\n        var lineDif = endRow - startRow;\n        var colDiff = end.column - start.column;\n\n        if (isRemove) {\n            lineDif = -lineDif;\n            colDiff = -colDiff;\n        }\n        if (!this.$inChange && isRemove) {\n            var ts = this.selectedTabstop;\n            var changedOutside = ts && !ts.some(function(r) {\n                return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0;\n            });\n            if (changedOutside)\n                return this.detach();\n        }\n        var ranges = this.ranges;\n        for (var i = 0; i < ranges.length; i++) {\n            var r = ranges[i];\n            if (r.end.row < start.row)\n                continue;\n\n            if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) {\n                this.removeRange(r);\n                i--;\n                continue;\n            }\n\n            if (r.start.row == startRow && r.start.column > start.column)\n                r.start.column += colDiff;\n            if (r.end.row == startRow && r.end.column >= start.column)\n                r.end.column += colDiff;\n            if (r.start.row >= startRow)\n                r.start.row += lineDif;\n            if (r.end.row >= startRow)\n                r.end.row += lineDif;\n\n            if (comparePoints(r.start, r.end) > 0)\n                this.removeRange(r);\n        }\n        if (!ranges.length)\n            this.detach();\n    };\n    this.updateLinkedFields = function() {\n        var ts = this.selectedTabstop;\n        if (!ts || !ts.hasLinkedRanges)\n            return;\n        this.$inChange = true;\n        var session = this.editor.session;\n        var text = session.getTextRange(ts.firstNonLinked);\n        for (var i = ts.length; i--;) {\n            var range = ts[i];\n            if (!range.linked)\n                continue;\n            var fmt = exports.snippetManager.tmStrFormat(text, range.original);\n            session.replace(range, fmt);\n        }\n        this.$inChange = false;\n    };\n    this.onAfterExec = function(e) {\n        if (e.command && !e.command.readOnly)\n            this.updateLinkedFields();\n    };\n    this.onChangeSelection = function() {\n        if (!this.editor)\n            return;\n        var lead = this.editor.selection.lead;\n        var anchor = this.editor.selection.anchor;\n        var isEmpty = this.editor.selection.isEmpty();\n        for (var i = this.ranges.length; i--;) {\n            if (this.ranges[i].linked)\n                continue;\n            var containsLead = this.ranges[i].contains(lead.row, lead.column);\n            var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n            if (containsLead && containsAnchor)\n                return;\n        }\n        this.detach();\n    };\n    this.onChangeSession = function() {\n        this.detach();\n    };\n    this.tabNext = function(dir) {\n        var max = this.tabstops.length;\n        var index = this.index + (dir || 1);\n        index = Math.min(Math.max(index, 1), max);\n        if (index == max)\n            index = 0;\n        this.selectTabstop(index);\n        if (index === 0)\n            this.detach();\n    };\n    this.selectTabstop = function(index) {\n        this.$openTabstops = null;\n        var ts = this.tabstops[this.index];\n        if (ts)\n            this.addTabstopMarkers(ts);\n        this.index = index;\n        ts = this.tabstops[this.index];\n        if (!ts || !ts.length)\n            return;\n        \n        this.selectedTabstop = ts;\n        if (!this.editor.inVirtualSelectionMode) {        \n            var sel = this.editor.multiSelect;\n            sel.toSingleRange(ts.firstNonLinked.clone());\n            for (var i = ts.length; i--;) {\n                if (ts.hasLinkedRanges && ts[i].linked)\n                    continue;\n                sel.addRange(ts[i].clone(), true);\n            }\n            if (sel.ranges[0])\n                sel.addRange(sel.ranges[0].clone());\n        } else {\n            this.editor.selection.setRange(ts.firstNonLinked);\n        }\n        \n        this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n    };\n    this.addTabstops = function(tabstops, start, end) {\n        if (!this.$openTabstops)\n            this.$openTabstops = [];\n        if (!tabstops[0]) {\n            var p = Range.fromPoints(end, end);\n            moveRelative(p.start, start);\n            moveRelative(p.end, start);\n            tabstops[0] = [p];\n            tabstops[0].index = 0;\n        }\n\n        var i = this.index;\n        var arg = [i + 1, 0];\n        var ranges = this.ranges;\n        tabstops.forEach(function(ts, index) {\n            var dest = this.$openTabstops[index] || ts;\n                \n            for (var i = ts.length; i--;) {\n                var p = ts[i];\n                var range = Range.fromPoints(p.start, p.end || p.start);\n                movePoint(range.start, start);\n                movePoint(range.end, start);\n                range.original = p;\n                range.tabstop = dest;\n                ranges.push(range);\n                if (dest != ts)\n                    dest.unshift(range);\n                else\n                    dest[i] = range;\n                if (p.fmtString) {\n                    range.linked = true;\n                    dest.hasLinkedRanges = true;\n                } else if (!dest.firstNonLinked)\n                    dest.firstNonLinked = range;\n            }\n            if (!dest.firstNonLinked)\n                dest.hasLinkedRanges = false;\n            if (dest === ts) {\n                arg.push(dest);\n                this.$openTabstops[index] = dest;\n            }\n            this.addTabstopMarkers(dest);\n        }, this);\n        \n        if (arg.length > 2) {\n            if (this.tabstops.length)\n                arg.push(arg.splice(2, 1)[0]);\n            this.tabstops.splice.apply(this.tabstops, arg);\n        }\n    };\n\n    this.addTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            if  (!range.markerId)\n                range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n        });\n    };\n    this.removeTabstopMarkers = function(ts) {\n        var session = this.editor.session;\n        ts.forEach(function(range) {\n            session.removeMarker(range.markerId);\n            range.markerId = null;\n        });\n    };\n    this.removeRange = function(range) {\n        var i = range.tabstop.indexOf(range);\n        range.tabstop.splice(i, 1);\n        i = this.ranges.indexOf(range);\n        this.ranges.splice(i, 1);\n        this.editor.session.removeMarker(range.markerId);\n        if (!range.tabstop.length) {\n            i = this.tabstops.indexOf(range.tabstop);\n            if (i != -1)\n                this.tabstops.splice(i, 1);\n            if (!this.tabstops.length)\n                this.detach();\n        }\n    };\n\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys({\n        \"Tab\": function(ed) {\n            if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) {\n                return;\n            }\n\n            ed.tabstopManager.tabNext(1);\n        },\n        \"Shift-Tab\": function(ed) {\n            ed.tabstopManager.tabNext(-1);\n        },\n        \"Esc\": function(ed) {\n            ed.tabstopManager.detach();\n        },\n        \"Return\": function(ed) {\n            return false;\n        }\n    });\n}).call(TabstopManager.prototype);\n\n\n\nvar changeTracker = {};\nchangeTracker.onChange = Anchor.prototype.onChange;\nchangeTracker.setPosition = function(row, column) {\n    this.pos.row = row;\n    this.pos.column = column;\n};\nchangeTracker.update = function(pos, delta, $insertRight) {\n    this.$insertRight = $insertRight;\n    this.pos = pos; \n    this.onChange(delta);\n};\n\nvar movePoint = function(point, diff) {\n    if (point.row == 0)\n        point.column += diff.column;\n    point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n    if (point.row == start.row)\n        point.column -= start.column;\n    point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n    -moz-box-sizing: border-box;\\\n    box-sizing: border-box;\\\n    background: rgba(194, 193, 208, 0.09);\\\n    border: 1px dotted rgba(211, 208, 235, 0.62);\\\n    position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n    this.insertSnippet = function(content, options) {\n        return exports.snippetManager.insertSnippet(this, content, options);\n    };\n    this.expandSnippet = function(options) {\n        return exports.snippetManager.expandWithTab(this, options);\n    };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\n\nvar $singleLineEditor = function(el) {\n    var renderer = new Renderer(el);\n\n    renderer.$maxLines = 4;\n\n    var editor = new Editor(renderer);\n\n    editor.setHighlightActiveLine(false);\n    editor.setShowPrintMargin(false);\n    editor.renderer.setShowGutter(false);\n    editor.renderer.setHighlightGutterLine(false);\n\n    editor.$mouseHandler.$focusWaitTimout = 0;\n    editor.$highlightTagPending = true;\n\n    return editor;\n};\n\nvar AcePopup = function(parentNode) {\n    var el = dom.createElement(\"div\");\n    var popup = new $singleLineEditor(el);\n\n    if (parentNode)\n        parentNode.appendChild(el);\n    el.style.display = \"none\";\n    popup.renderer.content.style.cursor = \"default\";\n    popup.renderer.setStyle(\"ace_autocomplete\");\n\n    popup.setOption(\"displayIndentGuides\", false);\n    popup.setOption(\"dragDelay\", 150);\n\n    var noop = function(){};\n\n    popup.focus = noop;\n    popup.$isFocused = true;\n\n    popup.renderer.$cursorLayer.restartTimer = noop;\n    popup.renderer.$cursorLayer.element.style.opacity = 0;\n\n    popup.renderer.$maxLines = 8;\n    popup.renderer.$keepTextAreaAtCursor = false;\n\n    popup.setHighlightActiveLine(false);\n    popup.session.highlight(\"\");\n    popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n\n    popup.on(\"mousedown\", function(e) {\n        var pos = e.getDocumentPosition();\n        popup.selection.moveToPosition(pos);\n        selectionMarker.start.row = selectionMarker.end.row = pos.row;\n        e.stop();\n    });\n\n    var lastMouseEvent;\n    var hoverMarker = new Range(-1,0,-1,Infinity);\n    var selectionMarker = new Range(-1,0,-1,Infinity);\n    selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n    popup.setSelectOnHover = function(val) {\n        if (!val) {\n            hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n        } else if (hoverMarker.id) {\n            popup.session.removeMarker(hoverMarker.id);\n            hoverMarker.id = null;\n        }\n    };\n    popup.setSelectOnHover(false);\n    popup.on(\"mousemove\", function(e) {\n        if (!lastMouseEvent) {\n            lastMouseEvent = e;\n            return;\n        }\n        if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n            return;\n        }\n        lastMouseEvent = e;\n        lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n        var row = lastMouseEvent.getDocumentPosition().row;\n        if (hoverMarker.start.row != row) {\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row);\n        }\n    });\n    popup.renderer.on(\"beforeRender\", function() {\n        if (lastMouseEvent && hoverMarker.start.row != -1) {\n            lastMouseEvent.$pos = null;\n            var row = lastMouseEvent.getDocumentPosition().row;\n            if (!hoverMarker.id)\n                popup.setRow(row);\n            setHoverMarker(row, true);\n        }\n    });\n    popup.renderer.on(\"afterRender\", function() {\n        var row = popup.getRow();\n        var t = popup.renderer.$textLayer;\n        var selected = t.element.childNodes[row - t.config.firstRow];\n        if (selected == t.selectedNode)\n            return;\n        if (t.selectedNode)\n            dom.removeCssClass(t.selectedNode, \"ace_selected\");\n        t.selectedNode = selected;\n        if (selected)\n            dom.addCssClass(selected, \"ace_selected\");\n    });\n    var hideHoverMarker = function() { setHoverMarker(-1) };\n    var setHoverMarker = function(row, suppressRedraw) {\n        if (row !== hoverMarker.start.row) {\n            hoverMarker.start.row = hoverMarker.end.row = row;\n            if (!suppressRedraw)\n                popup.session._emit(\"changeBackMarker\");\n            popup._emit(\"changeHoverMarker\");\n        }\n    };\n    popup.getHoveredRow = function() {\n        return hoverMarker.start.row;\n    };\n\n    event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n    popup.on(\"hide\", hideHoverMarker);\n    popup.on(\"changeSelection\", hideHoverMarker);\n\n    popup.session.doc.getLength = function() {\n        return popup.data.length;\n    };\n    popup.session.doc.getLine = function(i) {\n        var data = popup.data[i];\n        if (typeof data == \"string\")\n            return data;\n        return (data && data.value) || \"\";\n    };\n\n    var bgTokenizer = popup.session.bgTokenizer;\n    bgTokenizer.$tokenizeRow = function(row) {\n        var data = popup.data[row];\n        var tokens = [];\n        if (!data)\n            return tokens;\n        if (typeof data == \"string\")\n            data = {value: data};\n        if (!data.caption)\n            data.caption = data.value || data.name;\n\n        var last = -1;\n        var flag, c;\n        for (var i = 0; i < data.caption.length; i++) {\n            c = data.caption[i];\n            flag = data.matchMask & (1 << i) ? 1 : 0;\n            if (last !== flag) {\n                tokens.push({type: data.className || \"\" + ( flag ? \"completion-highlight\" : \"\"), value: c});\n                last = flag;\n            } else {\n                tokens[tokens.length - 1].value += c;\n            }\n        }\n\n        if (data.meta) {\n            var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth;\n            var metaData = data.meta;\n            if (metaData.length + data.caption.length > maxW - 2) {\n                metaData = metaData.substr(0, maxW - data.caption.length - 3) + \"\\u2026\"\n            }\n            tokens.push({type: \"rightAlignedText\", value: metaData});\n        }\n        return tokens;\n    };\n    bgTokenizer.$updateOnChange = noop;\n    bgTokenizer.start = noop;\n\n    popup.session.$computeWidth = function() {\n        return this.screenWidth = 0;\n    };\n\n    popup.$blockScrolling = Infinity;\n    popup.isOpen = false;\n    popup.isTopdown = false;\n\n    popup.data = [];\n    popup.setData = function(list) {\n        popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n        popup.data = list || [];\n        popup.setRow(0);\n    };\n    popup.getData = function(row) {\n        return popup.data[row];\n    };\n\n    popup.getRow = function() {\n        return selectionMarker.start.row;\n    };\n    popup.setRow = function(line) {\n        line = Math.max(0, Math.min(this.data.length, line));\n        if (selectionMarker.start.row != line) {\n            popup.selection.clearSelection();\n            selectionMarker.start.row = selectionMarker.end.row = line || 0;\n            popup.session._emit(\"changeBackMarker\");\n            popup.moveCursorTo(line || 0, 0);\n            if (popup.isOpen)\n                popup._signal(\"select\");\n        }\n    };\n\n    popup.on(\"changeSelection\", function() {\n        if (popup.isOpen)\n            popup.setRow(popup.selection.lead.row);\n        popup.renderer.scrollCursorIntoView();\n    });\n\n    popup.hide = function() {\n        this.container.style.display = \"none\";\n        this._signal(\"hide\");\n        popup.isOpen = false;\n    };\n    popup.show = function(pos, lineHeight, topdownOnly) {\n        var el = this.container;\n        var screenHeight = window.innerHeight;\n        var screenWidth = window.innerWidth;\n        var renderer = this.renderer;\n        var maxH = renderer.$maxLines * lineHeight * 1.4;\n        var top = pos.top + this.$borderSize;\n        var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n        if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n            renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n            el.style.top = \"\";\n            el.style.bottom = screenHeight - top + \"px\";\n            popup.isTopdown = false;\n        } else {\n            top += lineHeight;\n            renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n            el.style.top = top + \"px\";\n            el.style.bottom = \"\";\n            popup.isTopdown = true;\n        }\n\n        el.style.display = \"\";\n        this.renderer.$textLayer.checkForSizeChanges();\n\n        var left = pos.left;\n        if (left + el.offsetWidth > screenWidth)\n            left = screenWidth - el.offsetWidth;\n\n        el.style.left = left + \"px\";\n\n        this._signal(\"show\");\n        lastMouseEvent = null;\n        popup.isOpen = true;\n    };\n\n    popup.getTextLeftOffset = function() {\n        return this.$borderSize + this.renderer.$padding + this.$imageSize;\n    };\n\n    popup.$imageSize = 0;\n    popup.$borderSize = 1;\n\n    return popup;\n};\n\ndom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n    background-color: #CAD6FA;\\\n    z-index: 1;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n    border: 1px solid #abbffe;\\\n    margin-top: -1px;\\\n    background: rgba(233,233,253,0.4);\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n    position: absolute;\\\n    z-index: 2;\\\n}\\\n.ace_editor.ace_autocomplete .ace_scroller {\\\n   background: none;\\\n   border: none;\\\n   box-shadow: none;\\\n}\\\n.ace_rightAlignedText {\\\n    color: gray;\\\n    display: inline-block;\\\n    position: absolute;\\\n    right: 4px;\\\n    text-align: right;\\\n    z-index: -1;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n    color: #000;\\\n    text-shadow: 0 0 0.01em;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n    width: 280px;\\\n    z-index: 200000;\\\n    background: #fbfbfb;\\\n    color: #444;\\\n    border: 1px lightgray solid;\\\n    position: fixed;\\\n    box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n    line-height: 1.4;\\\n}\");\n\nexports.AcePopup = AcePopup;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.parForEach = function(array, fn, callback) {\n    var completed = 0;\n    var arLength = array.length;\n    if (arLength === 0)\n        callback();\n    for (var i = 0; i < arLength; i++) {\n        fn(array[i], function(result, err) {\n            completed++;\n            if (completed === arLength)\n                callback(result, err);\n        });\n    }\n};\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;\n\nexports.retrievePrecedingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos-1; i >= 0; i--) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf.reverse().join(\"\");\n};\n\nexports.retrieveFollowingIdentifier = function(text, pos, regex) {\n    regex = regex || ID_REGEX;\n    var buf = [];\n    for (var i = pos; i < text.length; i++) {\n        if (regex.test(text[i]))\n            buf.push(text[i]);\n        else\n            break;\n    }\n    return buf;\n};\n\nexports.getCompletionPrefix = function (editor) {\n    var pos = editor.getCursorPosition();\n    var line = editor.session.getLine(pos.row);\n    var prefix;\n    editor.completers.forEach(function(completer) {\n        if (completer.identifierRegexps) {\n            completer.identifierRegexps.forEach(function(identifierRegex) {\n                if (!prefix && identifierRegex)\n                    prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n            }.bind(this));\n        }\n    }.bind(this));\n    return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\"], function(require, exports, module) {\n\"use strict\";\n\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\n\nvar Autocomplete = function() {\n    this.autoInsert = false;\n    this.autoSelect = true;\n    this.exactMatch = false;\n    this.gatherCompletionsId = 0;\n    this.keyboardHandler = new HashHandler();\n    this.keyboardHandler.bindKeys(this.commands);\n\n    this.blurListener = this.blurListener.bind(this);\n    this.changeListener = this.changeListener.bind(this);\n    this.mousedownListener = this.mousedownListener.bind(this);\n    this.mousewheelListener = this.mousewheelListener.bind(this);\n\n    this.changeTimer = lang.delayedCall(function() {\n        this.updateCompletions(true);\n    }.bind(this));\n\n    this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n\n(function() {\n\n    this.$init = function() {\n        this.popup = new AcePopup(document.body || document.documentElement);\n        this.popup.on(\"click\", function(e) {\n            this.insertMatch();\n            e.stop();\n        }.bind(this));\n        this.popup.focus = this.editor.focus.bind(this.editor);\n        this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n        this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n        return this.popup;\n    };\n\n    this.getPopup = function() {\n        return this.popup || this.$init();\n    };\n\n    this.openPopup = function(editor, prefix, keepPopupPosition) {\n        if (!this.popup)\n            this.$init();\n\n        this.popup.setData(this.completions.filtered);\n\n        editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n        \n        var renderer = editor.renderer;\n        this.popup.setRow(this.autoSelect ? 0 : -1);\n        if (!keepPopupPosition) {\n            this.popup.setTheme(editor.getTheme());\n            this.popup.setFontSize(editor.getFontSize());\n\n            var lineHeight = renderer.layerConfig.lineHeight;\n\n            var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n            pos.left -= this.popup.getTextLeftOffset();\n\n            var rect = editor.container.getBoundingClientRect();\n            pos.top += rect.top - renderer.layerConfig.offset;\n            pos.left += rect.left - editor.renderer.scrollLeft;\n            pos.left += renderer.gutterWidth;\n\n            this.popup.show(pos, lineHeight);\n        } else if (keepPopupPosition && !prefix) {\n            this.detach();\n        }\n    };\n\n    this.detach = function() {\n        this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n        this.editor.off(\"changeSelection\", this.changeListener);\n        this.editor.off(\"blur\", this.blurListener);\n        this.editor.off(\"mousedown\", this.mousedownListener);\n        this.editor.off(\"mousewheel\", this.mousewheelListener);\n        this.changeTimer.cancel();\n        this.hideDocTooltip();\n\n        this.gatherCompletionsId += 1;\n        if (this.popup && this.popup.isOpen)\n            this.popup.hide();\n\n        if (this.base)\n            this.base.detach();\n        this.activated = false;\n        this.completions = this.base = null;\n    };\n\n    this.changeListener = function(e) {\n        var cursor = this.editor.selection.lead;\n        if (cursor.row != this.base.row || cursor.column < this.base.column) {\n            this.detach();\n        }\n        if (this.activated)\n            this.changeTimer.schedule();\n        else\n            this.detach();\n    };\n\n    this.blurListener = function(e) {\n        if (e.relatedTarget && e.relatedTarget.nodeName == \"A\" && e.relatedTarget.href) {\n            window.open(e.relatedTarget.href, \"_blank\");\n        }\n        var el = document.activeElement;\n        var text = this.editor.textInput.getElement();\n        var fromTooltip = e.relatedTarget && e.relatedTarget == this.tooltipNode;\n        var container = this.popup && this.popup.container;\n        if (el != text && el.parentNode != container && !fromTooltip\n            && el != this.tooltipNode && e.relatedTarget != text\n        ) {\n            this.detach();\n        }\n    };\n\n    this.mousedownListener = function(e) {\n        this.detach();\n    };\n\n    this.mousewheelListener = function(e) {\n        this.detach();\n    };\n\n    this.goTo = function(where) {\n        var row = this.popup.getRow();\n        var max = this.popup.session.getLength() - 1;\n\n        switch(where) {\n            case \"up\": row = row <= 0 ? max : row - 1; break;\n            case \"down\": row = row >= max ? -1 : row + 1; break;\n            case \"start\": row = 0; break;\n            case \"end\": row = max; break;\n        }\n\n        this.popup.setRow(row);\n    };\n\n    this.insertMatch = function(data, options) {\n        if (!data)\n            data = this.popup.getData(this.popup.getRow());\n        if (!data)\n            return false;\n\n        if (data.completer && data.completer.insertMatch) {\n            data.completer.insertMatch(this.editor, data);\n        } else {\n            if (this.completions.filterText) {\n                var ranges = this.editor.selection.getAllRanges();\n                for (var i = 0, range; range = ranges[i]; i++) {\n                    range.start.column -= this.completions.filterText.length;\n                    this.editor.session.remove(range);\n                }\n            }\n            if (data.snippet)\n                snippetManager.insertSnippet(this.editor, data.snippet);\n            else\n                this.editor.execCommand(\"insertstring\", data.value || data);\n        }\n        this.detach();\n    };\n\n\n    this.commands = {\n        \"Up\": function(editor) { editor.completer.goTo(\"up\"); },\n        \"Down\": function(editor) { editor.completer.goTo(\"down\"); },\n        \"Ctrl-Up|Ctrl-Home\": function(editor) { editor.completer.goTo(\"start\"); },\n        \"Ctrl-Down|Ctrl-End\": function(editor) { editor.completer.goTo(\"end\"); },\n\n        \"Esc\": function(editor) { editor.completer.detach(); },\n        \"Return\": function(editor) { return editor.completer.insertMatch(); },\n        \"Shift-Return\": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); },\n        \"Tab\": function(editor) {\n            var result = editor.completer.insertMatch();\n            if (!result && !editor.tabstopManager)\n                editor.completer.goTo(\"down\");\n            else\n                return result;\n        },\n\n        \"PageUp\": function(editor) { editor.completer.popup.gotoPageUp(); },\n        \"PageDown\": function(editor) { editor.completer.popup.gotoPageDown(); }\n    };\n\n    this.gatherCompletions = function(editor, callback) {\n        var session = editor.getSession();\n        var pos = editor.getCursorPosition();\n\n        var line = session.getLine(pos.row);\n        var prefix = util.getCompletionPrefix(editor);\n\n        this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n        this.base.$insertRight = true;\n\n        var matches = [];\n        var total = editor.completers.length;\n        editor.completers.forEach(function(completer, i) {\n            completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n                if (!err && results)\n                    matches = matches.concat(results);\n                var pos = editor.getCursorPosition();\n                var line = session.getLine(pos.row);\n                callback(null, {\n                    prefix: prefix,\n                    matches: matches,\n                    finished: (--total === 0)\n                });\n            });\n        });\n        return true;\n    };\n\n    this.showPopup = function(editor) {\n        if (this.editor)\n            this.detach();\n\n        this.activated = true;\n\n        this.editor = editor;\n        if (editor.completer != this) {\n            if (editor.completer)\n                editor.completer.detach();\n            editor.completer = this;\n        }\n\n        editor.on(\"changeSelection\", this.changeListener);\n        editor.on(\"blur\", this.blurListener);\n        editor.on(\"mousedown\", this.mousedownListener);\n        editor.on(\"mousewheel\", this.mousewheelListener);\n\n        this.updateCompletions();\n    };\n\n    this.updateCompletions = function(keepPopupPosition) {\n        if (keepPopupPosition && this.base && this.completions) {\n            var pos = this.editor.getCursorPosition();\n            var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n            if (prefix == this.completions.filterText)\n                return;\n            this.completions.setFilter(prefix);\n            if (!this.completions.filtered.length)\n                return this.detach();\n            if (this.completions.filtered.length == 1\n            && this.completions.filtered[0].value == prefix\n            && !this.completions.filtered[0].snippet)\n                return this.detach();\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n            return;\n        }\n        var _id = this.gatherCompletionsId;\n        this.gatherCompletions(this.editor, function(err, results) {\n            var detachIfFinished = function() {\n                if (!results.finished) return;\n                return this.detach();\n            }.bind(this);\n\n            var prefix = results.prefix;\n            var matches = results && results.matches;\n\n            if (!matches || !matches.length)\n                return detachIfFinished();\n            if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n                return;\n\n            this.completions = new FilteredList(matches);\n\n            if (this.exactMatch)\n                this.completions.exactMatch = true;\n\n            this.completions.setFilter(prefix);\n            var filtered = this.completions.filtered;\n            if (!filtered.length)\n                return detachIfFinished();\n            if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n                return detachIfFinished();\n            if (this.autoInsert && filtered.length == 1 && results.finished)\n                return this.insertMatch(filtered[0]);\n\n            this.openPopup(this.editor, prefix, keepPopupPosition);\n        }.bind(this));\n    };\n\n    this.cancelContextMenu = function() {\n        this.editor.$mouseHandler.cancelContextMenu();\n    };\n\n    this.updateDocTooltip = function() {\n        var popup = this.popup;\n        var all = popup.data;\n        var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n        var doc = null;\n        if (!selected || !this.editor || !this.popup.isOpen)\n            return this.hideDocTooltip();\n        this.editor.completers.some(function(completer) {\n            if (completer.getDocTooltip)\n                doc = completer.getDocTooltip(selected);\n            return doc;\n        });\n        if (!doc)\n            doc = selected;\n\n        if (typeof doc == \"string\")\n            doc = {docText: doc};\n        if (!doc || !(doc.docHTML || doc.docText))\n            return this.hideDocTooltip();\n        this.showDocTooltip(doc);\n    };\n\n    this.showDocTooltip = function(item) {\n        if (!this.tooltipNode) {\n            this.tooltipNode = dom.createElement(\"div\");\n            this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n            this.tooltipNode.style.margin = 0;\n            this.tooltipNode.style.pointerEvents = \"auto\";\n            this.tooltipNode.tabIndex = -1;\n            this.tooltipNode.onblur = this.blurListener.bind(this);\n        }\n\n        var tooltipNode = this.tooltipNode;\n        if (item.docHTML) {\n            tooltipNode.innerHTML = item.docHTML;\n        } else if (item.docText) {\n            tooltipNode.textContent = item.docText;\n        }\n\n        if (!tooltipNode.parentNode)\n            document.body.appendChild(tooltipNode);\n        var popup = this.popup;\n        var rect = popup.container.getBoundingClientRect();\n        tooltipNode.style.top = popup.container.style.top;\n        tooltipNode.style.bottom = popup.container.style.bottom;\n\n        if (window.innerWidth - rect.right < 320) {\n            tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n            tooltipNode.style.left = \"\";\n        } else {\n            tooltipNode.style.left = (rect.right + 1) + \"px\";\n            tooltipNode.style.right = \"\";\n        }\n        tooltipNode.style.display = \"block\";\n    };\n\n    this.hideDocTooltip = function() {\n        this.tooltipTimer.cancel();\n        if (!this.tooltipNode) return;\n        var el = this.tooltipNode;\n        if (!this.editor.isFocused() && document.activeElement == el)\n            this.editor.focus();\n        this.tooltipNode = null;\n        if (el.parentNode)\n            el.parentNode.removeChild(el);\n    };\n\n}).call(Autocomplete.prototype);\n\nAutocomplete.startCommand = {\n    name: \"startAutocomplete\",\n    exec: function(editor) {\n        if (!editor.completer)\n            editor.completer = new Autocomplete();\n        editor.completer.autoInsert = false;\n        editor.completer.autoSelect = true;\n        editor.completer.showPopup(editor);\n        editor.completer.cancelContextMenu();\n    },\n    bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\n\nvar FilteredList = function(array, filterText) {\n    this.all = array;\n    this.filtered = array;\n    this.filterText = filterText || \"\";\n    this.exactMatch = false;\n};\n(function(){\n    this.setFilter = function(str) {\n        if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n            var matches = this.filtered;\n        else\n            var matches = this.all;\n\n        this.filterText = str;\n        matches = this.filterCompletions(matches, this.filterText);\n        matches = matches.sort(function(a, b) {\n            return b.exactMatch - a.exactMatch || b.score - a.score;\n        });\n        var prev = null;\n        matches = matches.filter(function(item){\n            var caption = item.snippet || item.caption || item.value;\n            if (caption === prev) return false;\n            prev = caption;\n            return true;\n        });\n\n        this.filtered = matches;\n    };\n    this.filterCompletions = function(items, needle) {\n        var results = [];\n        var upper = needle.toUpperCase();\n        var lower = needle.toLowerCase();\n        loop: for (var i = 0, item; item = items[i]; i++) {\n            var caption = item.value || item.caption || item.snippet;\n            if (!caption) continue;\n            var lastIndex = -1;\n            var matchMask = 0;\n            var penalty = 0;\n            var index, distance;\n\n            if (this.exactMatch) {\n                if (needle !== caption.substr(0, needle.length))\n                    continue loop;\n            }else{\n                for (var j = 0; j < needle.length; j++) {\n                    var i1 = caption.indexOf(lower[j], lastIndex + 1);\n                    var i2 = caption.indexOf(upper[j], lastIndex + 1);\n                    index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n                    if (index < 0)\n                        continue loop;\n                    distance = index - lastIndex - 1;\n                    if (distance > 0) {\n                        if (lastIndex === -1)\n                            penalty += 10;\n                        penalty += distance;\n                    }\n                    matchMask = matchMask | (1 << index);\n                    lastIndex = index;\n                }\n            }\n            item.matchMask = matchMask;\n            item.exactMatch = penalty ? 0 : 1;\n            item.score = (item.score || 0) - penalty;\n            results.push(item);\n        }\n        return results;\n    };\n}).call(FilteredList.prototype);\n\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n    var Range = require(\"../range\").Range;\n    \n    var splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n\n    function getWordIndex(doc, pos) {\n        var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));\n        return textBefore.split(splitRegex).length - 1;\n    }\n    function wordDistance(doc, pos) {\n        var prefixPos = getWordIndex(doc, pos);\n        var words = doc.getValue().split(splitRegex);\n        var wordScores = Object.create(null);\n        \n        var currentWord = words[prefixPos];\n\n        words.forEach(function(word, idx) {\n            if (!word || word === currentWord) return;\n\n            var distance = Math.abs(prefixPos - idx);\n            var score = words.length - distance;\n            if (wordScores[word]) {\n                wordScores[word] = Math.max(score, wordScores[word]);\n            } else {\n                wordScores[word] = score;\n            }\n        });\n        return wordScores;\n    }\n\n    exports.getCompletions = function(editor, session, pos, prefix, callback) {\n        var wordScore = wordDistance(session, pos, prefix);\n        var wordList = Object.keys(wordScore);\n        callback(null, wordList.map(function(word) {\n            return {\n                caption: word,\n                value: word,\n                score: wordScore[word],\n                meta: \"local\"\n            };\n        }));\n    };\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\n\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        if (session.$mode.completer) {\n            return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n        }\n        var state = editor.session.getState(pos.row);\n        var completions = session.$mode.getCompletions(state, session, pos, prefix);\n        callback(null, completions);\n    }\n};\n\nvar snippetCompleter = {\n    getCompletions: function(editor, session, pos, prefix, callback) {\n        var snippetMap = snippetManager.snippetMap;\n        var completions = [];\n        snippetManager.getActiveScopes(editor).forEach(function(scope) {\n            var snippets = snippetMap[scope] || [];\n            for (var i = snippets.length; i--;) {\n                var s = snippets[i];\n                var caption = s.name || s.tabTrigger;\n                if (!caption)\n                    continue;\n                completions.push({\n                    caption: caption,\n                    snippet: s.content,\n                    meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n                    type: \"snippet\"\n                });\n            }\n        }, this);\n        callback(null, completions);\n    },\n    getDocTooltip: function(item) {\n        if (item.type == \"snippet\" && !item.docHTML) {\n            item.docHTML = [\n                \"<b>\", lang.escapeHTML(item.caption), \"</b>\", \"<hr></hr>\",\n                lang.escapeHTML(item.snippet)\n            ].join(\"\");\n        }\n    }\n};\n\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function(val) {\n    completers.length = 0;\n    if (val) completers.push.apply(completers, val);\n};\nexports.addCompleter = function(completer) {\n    completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\n\nvar expandSnippet = {\n    name: \"expandSnippet\",\n    exec: function(editor) {\n        return snippetManager.expandWithTab(editor);\n    },\n    bindKey: \"Tab\"\n};\n\nvar onChangeMode = function(e, editor) {\n    loadSnippetsForMode(editor.session.$mode);\n};\n\nvar loadSnippetsForMode = function(mode) {\n    var id = mode.$id;\n    if (!snippetManager.files)\n        snippetManager.files = {};\n    loadSnippetFile(id);\n    if (mode.modes)\n        mode.modes.forEach(loadSnippetsForMode);\n};\n\nvar loadSnippetFile = function(id) {\n    if (!id || snippetManager.files[id])\n        return;\n    var snippetFilePath = id.replace(\"mode\", \"snippets\");\n    snippetManager.files[id] = {};\n    config.loadModule(snippetFilePath, function(m) {\n        if (m) {\n            snippetManager.files[id] = m;\n            if (!m.snippets && m.snippetText)\n                m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n            snippetManager.register(m.snippets || [], m.scope);\n            if (m.includeScopes) {\n                snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n                m.includeScopes.forEach(function(x) {\n                    loadSnippetFile(\"ace/mode/\" + x);\n                });\n            }\n        }\n    });\n};\n\nvar doLiveAutocomplete = function(e) {\n    var editor = e.editor;\n    var hasCompleter = editor.completer && editor.completer.activated;\n    if (e.command.name === \"backspace\") {\n        if (hasCompleter && !util.getCompletionPrefix(editor))\n            editor.completer.detach();\n    }\n    else if (e.command.name === \"insertstring\") {\n        var prefix = util.getCompletionPrefix(editor);\n        if (prefix && !hasCompleter) {\n            if (!editor.completer) {\n                editor.completer = new Autocomplete();\n            }\n            editor.completer.autoInsert = false;\n            editor.completer.showPopup(editor);\n        }\n    }\n};\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n    enableBasicAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                this.commands.addCommand(Autocomplete.startCommand);\n            } else {\n                this.commands.removeCommand(Autocomplete.startCommand);\n            }\n        },\n        value: false\n    },\n    enableLiveAutocompletion: {\n        set: function(val) {\n            if (val) {\n                if (!this.completers)\n                    this.completers = Array.isArray(val)? val: completers;\n                this.commands.on('afterExec', doLiveAutocomplete);\n            } else {\n                this.commands.removeListener('afterExec', doLiveAutocomplete);\n            }\n        },\n        value: false\n    },\n    enableSnippets: {\n        set: function(val) {\n            if (val) {\n                this.commands.addCommand(expandSnippet);\n                this.on(\"changeMode\", onChangeMode);\n                onChangeMode(null, this);\n            } else {\n                this.commands.removeCommand(expandSnippet);\n                this.off(\"changeMode\", onChangeMode);\n            }\n        },\n        value: false\n    }\n});\n});\n                (function() {\n                    ace.require([\"ace/ext/language_tools\"], function() {});\n                })();\n            "
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-searchbox.js",
    "content": "ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar searchboxCss = \"\\\n.ace_search {\\\nbackground-color: #ddd;\\\nborder: 1px solid #cbcbcb;\\\nborder-top: 0 none;\\\nmax-width: 325px;\\\noverflow: hidden;\\\nmargin: 0;\\\npadding: 4px;\\\npadding-right: 6px;\\\npadding-bottom: 0;\\\nposition: absolute;\\\ntop: 0px;\\\nz-index: 99;\\\nwhite-space: normal;\\\n}\\\n.ace_search.left {\\\nborder-left: 0 none;\\\nborder-radius: 0px 0px 5px 0px;\\\nleft: 0;\\\n}\\\n.ace_search.right {\\\nborder-radius: 0px 0px 0px 5px;\\\nborder-right: 0 none;\\\nright: 0;\\\n}\\\n.ace_search_form, .ace_replace_form {\\\nborder-radius: 3px;\\\nborder: 1px solid #cbcbcb;\\\nfloat: left;\\\nmargin-bottom: 4px;\\\noverflow: hidden;\\\n}\\\n.ace_search_form.ace_nomatch {\\\noutline: 1px solid red;\\\n}\\\n.ace_search_field {\\\nbackground-color: white;\\\ncolor: black;\\\nborder-right: 1px solid #cbcbcb;\\\nborder: 0 none;\\\n-webkit-box-sizing: border-box;\\\n-moz-box-sizing: border-box;\\\nbox-sizing: border-box;\\\nfloat: left;\\\nheight: 22px;\\\noutline: 0;\\\npadding: 0 7px;\\\nwidth: 214px;\\\nmargin: 0;\\\n}\\\n.ace_searchbtn,\\\n.ace_replacebtn {\\\nbackground: #fff;\\\nborder: 0 none;\\\nborder-left: 1px solid #dcdcdc;\\\ncursor: pointer;\\\nfloat: left;\\\nheight: 22px;\\\nmargin: 0;\\\nposition: relative;\\\n}\\\n.ace_searchbtn:last-child,\\\n.ace_replacebtn:last-child {\\\nborder-top-right-radius: 3px;\\\nborder-bottom-right-radius: 3px;\\\n}\\\n.ace_searchbtn:disabled {\\\nbackground: none;\\\ncursor: default;\\\n}\\\n.ace_searchbtn {\\\nbackground-position: 50% 50%;\\\nbackground-repeat: no-repeat;\\\nwidth: 27px;\\\n}\\\n.ace_searchbtn.prev {\\\nbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=);    \\\n}\\\n.ace_searchbtn.next {\\\nbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=);    \\\n}\\\n.ace_searchbtn_close {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\\nborder-radius: 50%;\\\nborder: 0 none;\\\ncolor: #656565;\\\ncursor: pointer;\\\nfloat: right;\\\nfont: 16px/16px Arial;\\\nheight: 14px;\\\nmargin: 5px 1px 9px 5px;\\\npadding: 0;\\\ntext-align: center;\\\nwidth: 14px;\\\n}\\\n.ace_searchbtn_close:hover {\\\nbackground-color: #656565;\\\nbackground-position: 50% 100%;\\\ncolor: white;\\\n}\\\n.ace_replacebtn.prev {\\\nwidth: 54px\\\n}\\\n.ace_replacebtn.next {\\\nwidth: 27px\\\n}\\\n.ace_button {\\\nmargin-left: 2px;\\\ncursor: pointer;\\\n-webkit-user-select: none;\\\n-moz-user-select: none;\\\n-o-user-select: none;\\\n-ms-user-select: none;\\\nuser-select: none;\\\noverflow: hidden;\\\nopacity: 0.7;\\\nborder: 1px solid rgba(100,100,100,0.23);\\\npadding: 1px;\\\n-moz-box-sizing: border-box;\\\nbox-sizing:    border-box;\\\ncolor: black;\\\n}\\\n.ace_button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_button.checked {\\\nborder-color: #3399ff;\\\nopacity:1;\\\n}\\\n.ace_search_options{\\\nmargin-bottom: 3px;\\\ntext-align: right;\\\n-webkit-user-select: none;\\\n-moz-user-select: none;\\\n-o-user-select: none;\\\n-ms-user-select: none;\\\nuser-select: none;\\\n}\";\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nvar keyUtil = require(\"../lib/keys\");\n\ndom.importCssString(searchboxCss, \"ace_searchbox\");\n\nvar html = '<div class=\"ace_search right\">\\\n    <button type=\"button\" action=\"hide\" class=\"ace_searchbtn_close\"></button>\\\n    <div class=\"ace_search_form\">\\\n        <input class=\"ace_search_field\" placeholder=\"Search for\" spellcheck=\"false\"></input>\\\n        <button type=\"button\" action=\"findNext\" class=\"ace_searchbtn next\"></button>\\\n        <button type=\"button\" action=\"findPrev\" class=\"ace_searchbtn prev\"></button>\\\n        <button type=\"button\" action=\"findAll\" class=\"ace_searchbtn\" title=\"Alt-Enter\">All</button>\\\n    </div>\\\n    <div class=\"ace_replace_form\">\\\n        <input class=\"ace_search_field\" placeholder=\"Replace with\" spellcheck=\"false\"></input>\\\n        <button type=\"button\" action=\"replaceAndFindNext\" class=\"ace_replacebtn\">Replace</button>\\\n        <button type=\"button\" action=\"replaceAll\" class=\"ace_replacebtn\">All</button>\\\n    </div>\\\n    <div class=\"ace_search_options\">\\\n        <span action=\"toggleRegexpMode\" class=\"ace_button\" title=\"RegExp Search\">.*</span>\\\n        <span action=\"toggleCaseSensitive\" class=\"ace_button\" title=\"CaseSensitive Search\">Aa</span>\\\n        <span action=\"toggleWholeWords\" class=\"ace_button\" title=\"Whole Word Search\">\\\\b</span>\\\n    </div>\\\n</div>'.replace(/>\\s+/g, \">\");\n\nvar SearchBox = function(editor, range, showReplaceForm) {\n    var div = dom.createElement(\"div\");\n    div.innerHTML = html;\n    this.element = div.firstChild;\n\n    this.$init();\n    this.setEditor(editor);\n};\n\n(function() {\n    this.setEditor = function(editor) {\n        editor.searchBox = this;\n        editor.container.appendChild(this.element);\n        this.editor = editor;\n    };\n\n    this.$initElements = function(sb) {\n        this.searchBox = sb.querySelector(\".ace_search_form\");\n        this.replaceBox = sb.querySelector(\".ace_replace_form\");\n        this.searchOptions = sb.querySelector(\".ace_search_options\");\n        this.regExpOption = sb.querySelector(\"[action=toggleRegexpMode]\");\n        this.caseSensitiveOption = sb.querySelector(\"[action=toggleCaseSensitive]\");\n        this.wholeWordOption = sb.querySelector(\"[action=toggleWholeWords]\");\n        this.searchInput = this.searchBox.querySelector(\".ace_search_field\");\n        this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\");\n    };\n    \n    this.$init = function() {\n        var sb = this.element;\n        \n        this.$initElements(sb);\n        \n        var _this = this;\n        event.addListener(sb, \"mousedown\", function(e) {\n            setTimeout(function(){\n                _this.activeInput.focus();\n            }, 0);\n            event.stopPropagation(e);\n        });\n        event.addListener(sb, \"click\", function(e) {\n            var t = e.target || e.srcElement;\n            var action = t.getAttribute(\"action\");\n            if (action && _this[action])\n                _this[action]();\n            else if (_this.$searchBarKb.commands[action])\n                _this.$searchBarKb.commands[action].exec(_this);\n            event.stopPropagation(e);\n        });\n\n        event.addCommandKeyListener(sb, function(e, hashId, keyCode) {\n            var keyString = keyUtil.keyCodeToString(keyCode);\n            var command = _this.$searchBarKb.findKeyCommand(hashId, keyString);\n            if (command && command.exec) {\n                command.exec(_this);\n                event.stopEvent(e);\n            }\n        });\n\n        this.$onChange = lang.delayedCall(function() {\n            _this.find(false, false);\n        });\n\n        event.addListener(this.searchInput, \"input\", function() {\n            _this.$onChange.schedule(20);\n        });\n        event.addListener(this.searchInput, \"focus\", function() {\n            _this.activeInput = _this.searchInput;\n            _this.searchInput.value && _this.highlight();\n        });\n        event.addListener(this.replaceInput, \"focus\", function() {\n            _this.activeInput = _this.replaceInput;\n            _this.searchInput.value && _this.highlight();\n        });\n    };\n    this.$closeSearchBarKb = new HashHandler([{\n        bindKey: \"Esc\",\n        name: \"closeSearchBar\",\n        exec: function(editor) {\n            editor.searchBox.hide();\n        }\n    }]);\n    this.$searchBarKb = new HashHandler();\n    this.$searchBarKb.bindKeys({\n        \"Ctrl-f|Command-f\": function(sb) {\n            var isReplace = sb.isReplace = !sb.isReplace;\n            sb.replaceBox.style.display = isReplace ? \"\" : \"none\";\n            sb.searchInput.focus();\n        },\n        \"Ctrl-H|Command-Option-F\": function(sb) {\n            sb.replaceBox.style.display = \"\";\n            sb.replaceInput.focus();\n        },\n        \"Ctrl-G|Command-G\": function(sb) {\n            sb.findNext();\n        },\n        \"Ctrl-Shift-G|Command-Shift-G\": function(sb) {\n            sb.findPrev();\n        },\n        \"esc\": function(sb) {\n            setTimeout(function() { sb.hide();});\n        },\n        \"Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findNext();\n        },\n        \"Shift-Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replace();\n            sb.findPrev();\n        },\n        \"Alt-Return\": function(sb) {\n            if (sb.activeInput == sb.replaceInput)\n                sb.replaceAll();\n            sb.findAll();\n        },\n        \"Tab\": function(sb) {\n            (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus();\n        }\n    });\n\n    this.$searchBarKb.addCommands([{\n        name: \"toggleRegexpMode\",\n        bindKey: {win: \"Alt-R|Alt-/\", mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"},\n        exec: function(sb) {\n            sb.regExpOption.checked = !sb.regExpOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleCaseSensitive\",\n        bindKey: {win: \"Alt-C|Alt-I\", mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"},\n        exec: function(sb) {\n            sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked;\n            sb.$syncOptions();\n        }\n    }, {\n        name: \"toggleWholeWords\",\n        bindKey: {win: \"Alt-B|Alt-W\", mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"},\n        exec: function(sb) {\n            sb.wholeWordOption.checked = !sb.wholeWordOption.checked;\n            sb.$syncOptions();\n        }\n    }]);\n\n    this.$syncOptions = function() {\n        dom.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked);\n        dom.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked);\n        dom.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\n        this.find(false, false);\n    };\n\n    this.highlight = function(re) {\n        this.editor.session.highlight(re || this.editor.$search.$options.re);\n        this.editor.renderer.updateBackMarkers()\n    };\n    this.find = function(skipCurrent, backwards, preventScroll) {\n        var range = this.editor.find(this.searchInput.value, {\n            skipCurrent: skipCurrent,\n            backwards: backwards,\n            wrap: true,\n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked,\n            preventScroll: preventScroll\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n    };\n    this.findNext = function() {\n        this.find(true, false);\n    };\n    this.findPrev = function() {\n        this.find(true, true);\n    };\n    this.findAll = function(){\n        var range = this.editor.findAll(this.searchInput.value, {            \n            regExp: this.regExpOption.checked,\n            caseSensitive: this.caseSensitiveOption.checked,\n            wholeWord: this.wholeWordOption.checked\n        });\n        var noMatch = !range && this.searchInput.value;\n        dom.setCssClass(this.searchBox, \"ace_nomatch\", noMatch);\n        this.editor._emit(\"findSearchBox\", { match: !noMatch });\n        this.highlight();\n        this.hide();\n    };\n    this.replace = function() {\n        if (!this.editor.getReadOnly())\n            this.editor.replace(this.replaceInput.value);\n    };    \n    this.replaceAndFindNext = function() {\n        if (!this.editor.getReadOnly()) {\n            this.editor.replace(this.replaceInput.value);\n            this.findNext()\n        }\n    };\n    this.replaceAll = function() {\n        if (!this.editor.getReadOnly())\n            this.editor.replaceAll(this.replaceInput.value);\n    };\n\n    this.hide = function() {\n        this.element.style.display = \"none\";\n        this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb);\n        this.editor.focus();\n    };\n    this.show = function(value, isReplace) {\n        this.element.style.display = \"\";\n        this.replaceBox.style.display = isReplace ? \"\" : \"none\";\n\n        this.isReplace = isReplace;\n\n        if (value)\n            this.searchInput.value = value;\n        \n        this.find(false, false, true);\n        \n        this.searchInput.focus();\n        this.searchInput.select();\n\n        this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb);\n    };\n\n    this.isFocused = function() {\n        var el = document.activeElement;\n        return el == this.searchInput || el == this.replaceInput;\n    }\n}).call(SearchBox.prototype);\n\nexports.SearchBox = SearchBox;\n\nexports.Search = function(editor, isReplace) {\n    var sb = editor.searchBox || new SearchBox(editor);\n    sb.show(editor.session.getTextRange(), isReplace);\n};\n\n});\n                (function() {\n                    ace.require([\"ace/ext/searchbox\"], function() {});\n                })();\n            "
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-css.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\";\nvar supportConstantColor = exports.supportConstantColor = \"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"@.*?{\",\n            push:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\}\",\n            next:  \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"comment\" : [{\n            token : \"comment\",\n            regex : \"\\\\*\\\\/\",\n            next : \"pop\"\n        }, {\n            defaultToken : \"comment\"\n        }],\n\n        \"ruleset\" : [\n        {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next:   \"pop\"\n        }, {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            token : [\"support.function\", \"string\", \"support.function\"],\n            regex : \"(url\\\\()(.*)(\\\\))\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    }\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (state==='ruleset'){\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0',\n                meta: \"property\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    }\n                }\n                if (!line.substring(cursor.column).match(/^\\s*;/)) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    }\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';') {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                }\n            }\n        }\n    });\n\n}\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-html.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n}\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    \n    \n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n        \n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n    \n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\", \n        regex : \"/?>\", \n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    }, \n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\";\nvar supportConstantColor = exports.supportConstantColor = \"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"@.*?{\",\n            push:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\}\",\n            next:  \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"comment\" : [{\n            token : \"comment\",\n            regex : \"\\\\*\\\\/\",\n            next : \"pop\"\n        }, {\n            defaultToken : \"comment\"\n        }],\n\n        \"ruleset\" : [\n        {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next:   \"pop\"\n        }, {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            token : [\"support.function\", \"string\", \"support.function\"],\n            regex : \"(url\\\\()(.*)(\\\\))\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    }\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (state==='ruleset'){\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0',\n                meta: \"property\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    }\n                }\n                if (!line.substring(cursor.column).match(/^\\s*;/)) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    }\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';') {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                }\n            }\n        }\n    });\n\n}\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.xml-decl.xml\", \"keyword.xml-decl.xml\"],\n                regex : \"(<\\\\?)(xml)(?=[\\\\s])\", next : \"xml_decl\", caseInsensitive: true\n            },\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        xml_decl : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : \"(?:\" + tagRegex + \":)?\" + tagRegex + \"\"\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        processing_instruction : [\n            {token : \"punctuation.instruction.xml\", regex : \"\\\\?>\", next : \"start\"},\n            {defaultToken : \"instruction.xml\"}\n        ],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"(?:\" + tagRegex + \":)?\" + tagRegex + \"\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ]\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var firstChar = token.value.charAt(0);\n                if (firstChar == '\"' || firstChar == \"'\") {\n                    var lastChar = token.value.charAt(token.value.length - 1);\n                    var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;\n                    if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)\n                        return;\n                }\n            }\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return \"\";\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag)\n            return null;\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"html\": {\"manifest\": 1},\n    \"head\": {},\n    \"title\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"noscript\": {\"href\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"section\": {},\n    \"nav\": {},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"header\": {},\n    \"footer\": {},\n    \"address\": {},\n    \"main\": {},\n    \"p\": {},\n    \"hr\": {},\n    \"pre\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"ul\": {},\n    \"li\": {\"value\": 1},\n    \"dl\": {},\n    \"dt\": {},\n    \"dd\": {},\n    \"figure\": {},\n    \"figcaption\": {},\n    \"div\": {},\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"em\": {},\n    \"strong\": {},\n    \"small\": {},\n    \"s\": {},\n    \"cite\": {},\n    \"q\": {\"cite\": 1},\n    \"dfn\": {},\n    \"abbr\": {},\n    \"data\": {},\n    \"time\": {\"datetime\": 1},\n    \"code\": {},\n    \"var\": {},\n    \"samp\": {},\n    \"kbd\": {},\n    \"sub\": {},\n    \"sup\": {},\n    \"i\": {},\n    \"b\": {},\n    \"u\": {},\n    \"mark\": {},\n    \"ruby\": {},\n    \"rt\": {},\n    \"rp\": {},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"span\": {},\n    \"br\": {},\n    \"wbr\": {},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"map\": {\"name\": 1},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"svg\": {},\n    \"math\": {},\n    \"table\": {\"summary\": 1},\n    \"caption\": {},\n    \"colgroup\": {\"span\": 1},\n    \"col\": {\"span\": 1},\n    \"tbody\": {},\n    \"thead\": {},\n    \"tfoot\": {},\n    \"tr\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"legend\": {},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"datalist\": {},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"details\": {\"open\": 1},\n    \"summary\": {},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"dialog\": {\"open\": 1}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-javascript.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n}\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    \n    \n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n        \n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n    \n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\", \n        regex : \"/?>\", \n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    }, \n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-less.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\";\nvar supportConstantColor = exports.supportConstantColor = \"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"@.*?{\",\n            push:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\}\",\n            next:  \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"comment\" : [{\n            token : \"comment\",\n            regex : \"\\\\*\\\\/\",\n            next : \"pop\"\n        }, {\n            defaultToken : \"comment\"\n        }],\n\n        \"ruleset\" : [\n        {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next:   \"pop\"\n        }, {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            token : [\"support.function\", \"string\", \"support.function\"],\n            regex : \"(url\\\\()(.*)(\\\\))\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CssHighlightRules = require('./css_highlight_rules');\n\nvar LessHighlightRules = function() {\n\n\n    var keywordList = \"@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|\" + \n        \"@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|\" +\n        \"or|and|when|not\";\n\n    var keywords = keywordList.split('|');\n\n    var properties = CssHighlightRules.supportType.split('|');\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.constant\": CssHighlightRules.supportConstant,\n        \"keyword\": keywordList,\n        \"support.constant.color\": CssHighlightRules.supportConstantColor,\n        \"support.constant.fonts\": CssHighlightRules.supportConstantFonts\n    }, \"identifier\", true);   \n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : [\"constant.numeric\", \"keyword\"],\n                regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"paren.lparen\", \"string\", \"paren.rparen\"],\n                regex : \"(url)(\\\\()(.*)(\\\\))\"\n            }, {\n                token : [\"support.function\", \"paren.lparen\"],\n                regex : \"(:extend|[a-z0-9_\\\\-]+)(\\\\()\"\n            }, {\n                token : function(value) {\n                    if (keywords.indexOf(value.toLowerCase()) > -1)\n                        return \"keyword\";\n                    else\n                        return \"variable\";\n                },\n                regex : \"[@\\\\$][a-z0-9_\\\\-@\\\\$]*\\\\b\"\n            }, {\n                token : \"variable\",\n                regex : \"[@\\\\$]\\\\{[a-z0-9_\\\\-@\\\\$]*\\\\}\"\n            }, {\n                token : function(first, second) {\n                    if(properties.indexOf(first.toLowerCase()) > -1) {\n                        return [\"support.type.property\", \"text\"];\n                    }\n                    else {\n                        return [\"support.type.unknownProperty\", \"text\"];\n                    }\n                },\n                regex : \"([a-z0-9-_]+)(\\\\s*:)\"\n            }, {\n                token : \"keyword\",\n                regex : \"&\"   // special case - always treat as keyword\n            }, {\n                token : keywordMapper,\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z_][a-z0-9-_]*\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|=|!=|-|%|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ]\n    };\n    this.normalizeRules();\n};\n\noop.inherits(LessHighlightRules, TextHighlightRules);\n\nexports.LessHighlightRules = LessHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    }\n                }\n                if (!line.substring(cursor.column).match(/^\\s*;/)) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    }\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';') {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                }\n            }\n        }\n    });\n\n}\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    }\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (state==='ruleset'){\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0',\n                meta: \"property\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/css_completions\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LessHighlightRules = require(\"./less_highlight_rules\").LessHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\n\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = LessHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(\"ruleset\", session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/less\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-markdown.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n}\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    \n    \n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n        \n        if (!options || options.jsx != false)\n            JSX.call(this);\n    }\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n    \n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\", \n        regex : \"/?>\", \n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    }, \n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.xml-decl.xml\", \"keyword.xml-decl.xml\"],\n                regex : \"(<\\\\?)(xml)(?=[\\\\s])\", next : \"xml_decl\", caseInsensitive: true\n            },\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        xml_decl : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : \"(?:\" + tagRegex + \":)?\" + tagRegex + \"\"\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        processing_instruction : [\n            {token : \"punctuation.instruction.xml\", regex : \"\\\\?>\", next : \"start\"},\n            {defaultToken : \"instruction.xml\"}\n        ],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"(?:\" + tagRegex + \":)?\" + tagRegex + \"\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ]\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getSelectionRange().start;\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var firstChar = token.value.charAt(0);\n                if (firstChar == '\"' || firstChar == \"'\") {\n                    var lastChar = token.value.charAt(token.value.length - 1);\n                    var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;\n                    if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)\n                        return;\n                }\n            }\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n                if (token.value == \"<\") {\n                    token = iterator.stepForward();\n                    break;\n                }\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return \"\";\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag)\n            return null;\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar XmlFoldMode = require(\"./folding/xml\").FoldMode;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\nvar Mode = function() {\n   this.HighlightRules = XmlHighlightRules;\n   this.$behaviour = new XmlBehaviour();\n   this.foldingRules = new XmlFoldMode();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.voidElements = lang.arrayToMap([]);\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/xml_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n    \n    this.$id = \"ace/mode/xml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\";\nvar supportConstantColor = exports.supportConstantColor = \"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"@.*?{\",\n            push:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\}\",\n            next:  \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"comment\" : [{\n            token : \"comment\",\n            regex : \"\\\\*\\\\/\",\n            next : \"pop\"\n        }, {\n            defaultToken : \"comment\"\n        }],\n\n        \"ruleset\" : [\n        {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next:   \"pop\"\n        }, {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            token : [\"support.function\", \"string\", \"support.function\"],\n            regex : \"(url\\\\()(.*)(\\\\))\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    }\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (state==='ruleset'){\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0',\n                meta: \"property\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    }\n                }\n                if (!line.substring(cursor.column).match(/^\\s*;/)) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    }\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';') {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                }\n            }\n        }\n    });\n\n}\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"html\": {\"manifest\": 1},\n    \"head\": {},\n    \"title\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"noscript\": {\"href\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"section\": {},\n    \"nav\": {},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"header\": {},\n    \"footer\": {},\n    \"address\": {},\n    \"main\": {},\n    \"p\": {},\n    \"hr\": {},\n    \"pre\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"ul\": {},\n    \"li\": {\"value\": 1},\n    \"dl\": {},\n    \"dt\": {},\n    \"dd\": {},\n    \"figure\": {},\n    \"figcaption\": {},\n    \"div\": {},\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"em\": {},\n    \"strong\": {},\n    \"small\": {},\n    \"s\": {},\n    \"cite\": {},\n    \"q\": {\"cite\": 1},\n    \"dfn\": {},\n    \"abbr\": {},\n    \"data\": {},\n    \"time\": {\"datetime\": 1},\n    \"code\": {},\n    \"var\": {},\n    \"samp\": {},\n    \"kbd\": {},\n    \"sub\": {},\n    \"sup\": {},\n    \"i\": {},\n    \"b\": {},\n    \"u\": {},\n    \"mark\": {},\n    \"ruby\": {},\n    \"rt\": {},\n    \"rp\": {},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"span\": {},\n    \"br\": {},\n    \"wbr\": {},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"map\": {\"name\": 1},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"svg\": {},\n    \"math\": {},\n    \"table\": {\"summary\": 1},\n    \"caption\": {},\n    \"colgroup\": {\"span\": 1},\n    \"col\": {\"span\": 1},\n    \"tbody\": {},\n    \"thead\": {},\n    \"tfoot\": {},\n    \"tr\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"legend\": {},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"datalist\": {},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"details\": {\"open\": 1},\n    \"summary\": {},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"dialog\": {\"open\": 1}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[a-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/css_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\n\nvar escaped = function(ch) {\n    return \"(?:[^\" + lang.escapeRegExp(ch) + \"\\\\\\\\]|\\\\\\\\.)*\";\n}\n\nfunction github_embed(tag, prefix) {\n    return { // Github style block\n        token : \"support.function\",\n        regex : \"^\\\\s*```\" + tag + \"\\\\s*$\",\n        push  : prefix + \"start\"\n    };\n}\n\nvar MarkdownHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    this.$rules[\"start\"].unshift({\n        token : \"empty_line\",\n        regex : '^$',\n        next: \"allowBlock\"\n    }, { // h1\n        token: \"markup.heading.1\",\n        regex: \"^=+(?=\\\\s*$)\"\n    }, { // h2\n        token: \"markup.heading.2\",\n        regex: \"^\\\\-+(?=\\\\s*$)\"\n    }, {\n        token : function(value) {\n            return \"markup.heading.\" + value.length;\n        },\n        regex : /^#{1,6}(?=\\s*[^ #]|\\s+#.)/,\n        next : \"header\"\n    },\n       github_embed(\"(?:javascript|js)\", \"jscode-\"),\n       github_embed(\"xml\", \"xmlcode-\"),\n       github_embed(\"html\", \"htmlcode-\"),\n       github_embed(\"css\", \"csscode-\"),\n    { // Github style block\n        token : \"support.function\",\n        regex : \"^\\\\s*```\\\\s*\\\\S*(?:{.*?\\\\})?\\\\s*$\",\n        next  : \"githubblock\"\n    }, { // block quote\n        token : \"string.blockquote\",\n        regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n        next  : \"blockquote\"\n    }, { // HR * - _\n        token : \"constant\",\n        regex : \"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",\n        next: \"allowBlock\"\n    }, { // list\n        token : \"markup.list\",\n        regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n        next  : \"listblock-start\"\n    }, {\n        include : \"basic\"\n    });\n\n    this.addRules({\n        \"basic\" : [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/\n        }, { // code span `\n            token : \"support.function\",\n            regex : \"(`+)(.*?[^`])(\\\\1)\"\n        }, { // reference\n            token : [\"text\", \"constant\", \"text\", \"url\", \"string\", \"text\"],\n            regex : \"^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\\\"][^\\\"]+[\\\"])?(\\\\s*))$\"\n        }, { // link by reference\n            token : [\"text\", \"string\", \"text\", \"constant\", \"text\"],\n            regex : \"(\\\\[)(\" + escaped(\"]\") + \")(\\\\]\\\\s*\\\\[)(\"+ escaped(\"]\") + \")(\\\\])\"\n        }, { // link by url\n            token : [\"text\", \"string\", \"text\", \"markup.underline\", \"string\", \"text\"],\n            regex : \"(\\\\[)(\" +                                        // [\n                    escaped(\"]\") +                                    // link text\n                    \")(\\\\]\\\\()\"+                                      // ](\n                    '((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)' +        // href\n                    '(\\\\s*\"' +  escaped('\"') + '\"\\\\s*)?' +            // \"title\"\n                    \"(\\\\))\"                                           // )\n        }, { // strong ** __\n            token : \"string.strong\",\n            regex : \"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { // emphasis * _\n            token : \"string.emphasis\",\n            regex : \"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"\n        }, { //\n            token : [\"text\", \"url\", \"text\"],\n            regex : \"(<)(\"+\n                      \"(?:https?|ftp|dict):[^'\\\">\\\\s]+\"+\n                      \"|\"+\n                      \"(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+\"+\n                    \")(>)\"\n        }],\n        \"allowBlock\": [\n            {token : \"support.function\", regex : \"^ {4}.+\", next : \"allowBlock\"},\n            {token : \"empty_line\", regex : '^$', next: \"allowBlock\"},\n            {token : \"empty\", regex : \"\", next : \"start\"}\n        ],\n\n        \"header\" : [{\n            regex: \"$\",\n            next : \"start\"\n        }, {\n            include: \"basic\"\n        }, {\n            defaultToken : \"heading\"\n        } ],\n\n        \"listblock-start\" : [{\n            token : \"support.variable\",\n            regex : /(?:\\[[ x]\\])?/,\n            next  : \"listblock\"\n        }],\n\n        \"listblock\" : [ { // Lists only escape on completely blank lines.\n            token : \"empty_line\",\n            regex : \"^$\",\n            next  : \"start\"\n        }, { // list\n            token : \"markup.list\",\n            regex : \"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",\n            next  : \"listblock-start\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, { // Github style block\n            token : \"support.function\",\n            regex : \"^\\\\s*```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$\",\n            next  : \"githubblock\"\n        }, {\n            defaultToken : \"list\" //do not use markup.list to allow stling leading `*` differntly\n        } ],\n\n        \"blockquote\" : [ { // Blockquotes only escape on blank lines.\n            token : \"empty_line\",\n            regex : \"^\\\\s*$\",\n            next  : \"start\"\n        }, { // block quote\n            token : \"string.blockquote\",\n            regex : \"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",\n            next  : \"blockquote\"\n        }, {\n            include : \"basic\", noEscape: true\n        }, {\n            defaultToken : \"string.blockquote\"\n        } ],\n\n        \"githubblock\" : [ {\n            token : \"support.function\",\n            regex : \"^\\\\s*```\",\n            next  : \"start\"\n        }, {\n            token : \"support.function\",\n            regex : \".+\"\n        } ]\n    });\n\n    this.embedRules(JavaScriptHighlightRules, \"jscode-\", [{\n       token : \"support.function\",\n       regex : \"^\\\\s*```\",\n       next  : \"pop\"\n    }]);\n\n    this.embedRules(HtmlHighlightRules, \"htmlcode-\", [{\n       token : \"support.function\",\n       regex : \"^\\\\s*```\",\n       next  : \"pop\"\n    }]);\n\n    this.embedRules(CssHighlightRules, \"csscode-\", [{\n       token : \"support.function\",\n       regex : \"^\\\\s*```\",\n       next  : \"pop\"\n    }]);\n\n    this.embedRules(XmlHighlightRules, \"xmlcode-\", [{\n       token : \"support.function\",\n       regex : \"^\\\\s*```\",\n       next  : \"pop\"\n    }]);\n\n    this.normalizeRules();\n};\noop.inherits(MarkdownHighlightRules, TextHighlightRules);\n\nexports.MarkdownHighlightRules = MarkdownHighlightRules;\n});\n\nace.define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    this.foldingStartMarker = /^(?:[=-]+\\s*$|#{1,6} |`{3})/;\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        if (!this.foldingStartMarker.test(line))\n            return \"\";\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) == \"start\")\n                return \"end\";\n            return \"start\";\n        }\n\n        return \"start\";\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n        if (!line.match(this.foldingStartMarker))\n            return;\n\n        if (line[0] == \"`\") {\n            if (session.bgTokenizer.getState(row) !== \"start\") {\n                while (++row < maxRow) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(startRow, startColumn, row, 0);\n            } else {\n                while (row -- > 0) {\n                    line = session.getLine(row);\n                    if (line[0] == \"`\" & line.substring(0, 3) == \"```\")\n                        break;\n                }\n                return new Range(row, line.length, startRow, 0);\n            }\n        }\n\n        var token;\n        function isHeading(row) {\n            token = session.getTokens(row)[0];\n            return token && token.type.lastIndexOf(heading, 0) === 0;\n        }\n\n        var heading = \"markup.heading\";\n        function getLevel() {\n            var ch = token.value[0];\n            if (ch == \"=\") return 6;\n            if (ch == \"-\") return 5;\n            return 7 - token.value.search(/[^#]/);\n        }\n\n        if (isHeading(row)) {\n            var startHeadingLevel = getLevel();\n            while (++row < maxRow) {\n                if (!isHeading(row))\n                    continue;\n                var level = getLevel();\n                if (level >= startHeadingLevel)\n                    break;\n            }\n\n            endRow = row - (!token || [\"=\", \"-\"].indexOf(token.value[0]) == -1 ? 1 : 2);\n\n            if (endRow > startRow) {\n                while (endRow > startRow && /^\\s*$/.test(session.getLine(endRow)))\n                    endRow--;\n            }\n\n            if (endRow > startRow) {\n                var endColumn = session.getLine(endRow).length;\n                return new Range(startRow, startColumn, endRow, endColumn);\n            }\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar XmlMode = require(\"./xml\").Mode;\nvar HtmlMode = require(\"./html\").Mode;\nvar MarkdownHighlightRules = require(\"./markdown_highlight_rules\").MarkdownHighlightRules;\nvar MarkdownFoldMode = require(\"./folding/markdown\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = MarkdownHighlightRules;\n\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"xml-\": XmlMode,\n        \"html-\": HtmlMode\n    });\n\n    this.foldingRules = new MarkdownFoldMode();\n    this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        if (state == \"listblock\") {\n            var match = /^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(line);\n            if (!match)\n                return \"\";\n            var marker = match[2];\n            if (!marker)\n                marker = parseInt(match[3], 10) + 1 + \".\";\n            return match[1] + marker + match[4];\n        } else {\n            return this.$getIndent(line);\n        }\n    };\n    this.$id = \"ace/mode/markdown\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-php.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n}\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\";\nvar supportConstantColor = exports.supportConstantColor = \"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"@.*?{\",\n            push:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\}\",\n            next:  \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"comment\" : [{\n            token : \"comment\",\n            regex : \"\\\\*\\\\/\",\n            next : \"pop\"\n        }, {\n            defaultToken : \"comment\"\n        }],\n\n        \"ruleset\" : [\n        {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next:   \"pop\"\n        }, {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            token : [\"support.function\", \"string\", \"support.function\"],\n            regex : \"(url\\\\()(.*)(\\\\))\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    \n    \n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n        \n        if (!options || !options.noJSX)\n            JSX.call(this);\n    }\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n    \n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\", \n        regex : \"/?>\", \n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    }, \n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.xml-decl.xml\", \"keyword.xml-decl.xml\"],\n                regex : \"(<\\\\?)(xml)(?=[\\\\s])\", next : \"xml_decl\", caseInsensitive: true\n            },\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        xml_decl : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : \"(?:\" + tagRegex + \":)?\" + tagRegex + \"\"\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        processing_instruction : [\n            {token : \"punctuation.instruction.xml\", regex : \"\\\\?>\", next : \"start\"},\n            {defaultToken : \"instruction.xml\"}\n        ],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"(?:\" + tagRegex + \":)?\" + tagRegex + \"\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ]\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({noJSX: true}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\nvar PhpLangHighlightRules = function() {\n    var docComment = DocCommentHighlightRules;\n    var builtinFunctions = lang.arrayToMap(\n        ('abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|' +\n        'aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|' +\n        'apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|' +\n        'apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|' +\n        'apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|' +\n        'apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|' +\n        'apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|' +\n        'apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|' +\n        'array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|' +\n        'array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|' +\n        'array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|' +\n        'array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|' +\n        'array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|' +\n        'array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|' +\n        'atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|' +\n        'bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|' +\n        'bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|' +\n        'bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|' +\n        'bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|' +\n        'bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|' +\n        'cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|' +\n        'cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|' +\n        'cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|' +\n        'cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|' +\n        'cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|' +\n        'cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|' +\n        'cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|' +\n        'cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|' +\n        'cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|' +\n        'cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|' +\n        'cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|' +\n        'cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|' +\n        'cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|' +\n        'cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|' +\n        'cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|' +\n        'cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|' +\n        'cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|' +\n        'cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|' +\n        'cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|' +\n        'cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|' +\n        'cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|' +\n        'cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|' +\n        'cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|' +\n        'cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|' +\n        'cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|' +\n        'cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|' +\n        'cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|' +\n        'cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|' +\n        'chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|' +\n        'class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|' +\n        'classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|' +\n        'com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|' +\n        'com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|' +\n        'convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|' +\n        'counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|' +\n        'crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|' +\n        'ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|' +\n        'cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|' +\n        'cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|' +\n        'cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|' +\n        'cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|' +\n        'cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|' +\n        'cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|' +\n        'cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|' +\n        'cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|' +\n        'cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|' +\n        'cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|' +\n        'cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|' +\n        'curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|' +\n        'curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|' +\n        'curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|' +\n        'date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|' +\n        'date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|' +\n        'date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|' +\n        'dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|' +\n        'db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|' +\n        'db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|' +\n        'db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|' +\n        'db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|' +\n        'db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|' +\n        'db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|' +\n        'dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|' +\n        'dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|' +\n        'dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|' +\n        'dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|' +\n        'dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|' +\n        'dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|' +\n        'dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|' +\n        'dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|' +\n        'dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|' +\n        'define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|' +\n        'dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|' +\n        'dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|' +\n        'domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|' +\n        'domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|' +\n        'domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|' +\n        'domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|' +\n        'domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|' +\n        'domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|' +\n        'domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|' +\n        'domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|' +\n        'domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|' +\n        'domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|' +\n        'domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|' +\n        'domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|' +\n        'domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|' +\n        'domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|' +\n        'domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|' +\n        'domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|' +\n        'domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|' +\n        'enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|' +\n        'enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|' +\n        'enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|' +\n        'enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|' +\n        'eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|' +\n        'event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|' +\n        'event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|' +\n        'event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|' +\n        'event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|' +\n        'expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|' +\n        'fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|' +\n        'fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|' +\n        'fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|' +\n        'fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|' +\n        'fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|' +\n        'fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|' +\n        'fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|' +\n        'fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|' +\n        'fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|' +\n        'fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|' +\n        'fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|' +\n        'fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|' +\n        'fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|' +\n        'file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|' +\n        'filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|' +\n        'filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|' +\n        'finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|' +\n        'forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|' +\n        'ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|' +\n        'ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|' +\n        'ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|' +\n        'func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|' +\n        'gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|' +\n        'geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|' +\n        'geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|' +\n        'get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|' +\n        'get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|' +\n        'get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|' +\n        'get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|' +\n        'getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|' +\n        'gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|' +\n        'getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|' +\n        'getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|' +\n        'gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|' +\n        'gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|' +\n        'gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|' +\n        'gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|' +\n        'gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|' +\n        'gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|' +\n        'gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|' +\n        'grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|' +\n        'gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|' +\n        'gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|' +\n        'gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|' +\n        'gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|' +\n        'gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|' +\n        'gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|' +\n        'gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|' +\n        'gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|' +\n        'gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|' +\n        'gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|' +\n        'halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|' +\n        'haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|' +\n        'harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|' +\n        'harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|' +\n        'harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|' +\n        'harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|' +\n        'harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|' +\n        'harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|' +\n        'harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|' +\n        'harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|' +\n        'haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|' +\n        'harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|' +\n        'harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|' +\n        'haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|' +\n        'haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|' +\n        'harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|' +\n        'harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|' +\n        'harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|' +\n        'harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|' +\n        'harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|' +\n        'harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|' +\n        'harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|' +\n        'harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|' +\n        'harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|' +\n        'harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|' +\n        'harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|' +\n        'harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|' +\n        'harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|' +\n        'harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|' +\n        'hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|' +\n        'header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|' +\n        'html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|' +\n        'http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|' +\n        'http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|' +\n        'http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|' +\n        'http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|' +\n        'http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|' +\n        'http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|' +\n        'http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|' +\n        'http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|' +\n        'httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|' +\n        'httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|' +\n        'httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|' +\n        'httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|' +\n        'httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|' +\n        'httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|' +\n        'httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|' +\n        'httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|' +\n        'httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|' +\n        'httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|' +\n        'httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|' +\n        'httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|' +\n        'httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|' +\n        'httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|' +\n        'httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|' +\n        'httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|' +\n        'httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|' +\n        'httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|' +\n        'httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|' +\n        'httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|' +\n        'httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|' +\n        'httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|' +\n        'httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|' +\n        'httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|' +\n        'httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|' +\n        'httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|' +\n        'httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|' +\n        'httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|' +\n        'httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|' +\n        'hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|' +\n        'hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|' +\n        'hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|' +\n        'hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|' +\n        'hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|' +\n        'hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|' +\n        'hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|' +\n        'hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|' +\n        'hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|' +\n        'hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|' +\n        'hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|' +\n        'hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|' +\n        'hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|' +\n        'hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|' +\n        'ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|' +\n        'ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|' +\n        'ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|' +\n        'ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|' +\n        'ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|' +\n        'ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|' +\n        'ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|' +\n        'iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|' +\n        'id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|' +\n        'idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|' +\n        'ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|' +\n        'ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|' +\n        'ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|' +\n        'ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|' +\n        'iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|' +\n        'iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|' +\n        'iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|' +\n        'imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|' +\n        'imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|' +\n        'imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|' +\n        'imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|' +\n        'imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|' +\n        'imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|' +\n        'imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|' +\n        'imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|' +\n        'imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|' +\n        'imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|' +\n        'imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|' +\n        'imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|' +\n        'imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|' +\n        'imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|' +\n        'imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|' +\n        'imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|' +\n        'imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|' +\n        'imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|' +\n        'imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|' +\n        'imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|' +\n        'imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|' +\n        'imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|' +\n        'imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|' +\n        'imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|' +\n        'imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|' +\n        'imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|' +\n        'imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|' +\n        'imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|' +\n        'imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|' +\n        'imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|' +\n        'imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|' +\n        'imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|' +\n        'imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|' +\n        'imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|' +\n        'imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|' +\n        'imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|' +\n        'imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|' +\n        'imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|' +\n        'imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|' +\n        'imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|' +\n        'imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|' +\n        'imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|' +\n        'imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|' +\n        'imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|' +\n        'imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|' +\n        'imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|' +\n        'imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|' +\n        'imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|' +\n        'imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|' +\n        'imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|' +\n        'imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|' +\n        'imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|' +\n        'imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|' +\n        'imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|' +\n        'imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|' +\n        'imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|' +\n        'imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|' +\n        'imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|' +\n        'imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|' +\n        'imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|' +\n        'imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|' +\n        'imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|' +\n        'imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|' +\n        'imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|' +\n        'imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|' +\n        'imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|' +\n        'imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|' +\n        'imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|' +\n        'imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|' +\n        'imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|' +\n        'imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|' +\n        'imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|' +\n        'imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|' +\n        'imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|' +\n        'imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|' +\n        'imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|' +\n        'imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|' +\n        'imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|' +\n        'imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|' +\n        'imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|' +\n        'imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|' +\n        'imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|' +\n        'imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|' +\n        'imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|' +\n        'imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|' +\n        'imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|' +\n        'imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|' +\n        'imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|' +\n        'imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|' +\n        'imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|' +\n        'imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|' +\n        'imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|' +\n        'imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|' +\n        'imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|' +\n        'imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|' +\n        'imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|' +\n        'imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|' +\n        'imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|' +\n        'imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|' +\n        'imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|' +\n        'imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|' +\n        'imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|' +\n        'imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|' +\n        'imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|' +\n        'imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|' +\n        'imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|' +\n        'imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|' +\n        'imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|' +\n        'imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|' +\n        'imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|' +\n        'include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|' +\n        'ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|' +\n        'ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|' +\n        'ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|' +\n        'ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|' +\n        'ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|' +\n        'inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|' +\n        'intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|' +\n        'is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|' +\n        'is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|' +\n        'iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|' +\n        'iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|' +\n        'jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|' +\n        'json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|' +\n        'kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|' +\n        'kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|' +\n        'ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|' +\n        'ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|' +\n        'ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|' +\n        'ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|' +\n        'ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|' +\n        'libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|' +\n        'limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|' +\n        'lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|' +\n        'm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|' +\n        'm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|' +\n        'm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|' +\n        'm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|' +\n        'mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|' +\n        'mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|' +\n        'mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|' +\n        'maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|' +\n        'maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|' +\n        'maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|' +\n        'maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|' +\n        'maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|' +\n        'maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|' +\n        'maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|' +\n        'maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|' +\n        'maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|' +\n        'maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|' +\n        'maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|' +\n        'maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|' +\n        'maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|' +\n        'maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|' +\n        'maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|' +\n        'mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|' +\n        'mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|' +\n        'mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|' +\n        'mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|' +\n        'mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|' +\n        'mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|' +\n        'mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|' +\n        'mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|' +\n        'mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|' +\n        'mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|' +\n        'mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|' +\n        'mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|' +\n        'mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|' +\n        'mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|' +\n        'mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|' +\n        'ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|' +\n        'mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|' +\n        'mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|' +\n        'mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|' +\n        'mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|' +\n        'mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|' +\n        'msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|' +\n        'msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|' +\n        'msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|' +\n        'msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|' +\n        'msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|' +\n        'msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|' +\n        'msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|' +\n        'mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|' +\n        'mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|' +\n        'mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|' +\n        'mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|' +\n        'mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|' +\n        'mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|' +\n        'mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|' +\n        'mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|' +\n        'mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|' +\n        'mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|' +\n        'mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|' +\n        'mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|' +\n        'mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|' +\n        'mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' +\n        'mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|' +\n        'mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|' +\n        'mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|' +\n        'ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|' +\n        'ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|' +\n        'ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|' +\n        'ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|' +\n        'ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|' +\n        'ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|' +\n        'ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|' +\n        'ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|' +\n        'ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|' +\n        'ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|' +\n        'ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|' +\n        'ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|' +\n        'ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|' +\n        'ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|' +\n        'ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|' +\n        'ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|' +\n        'ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|' +\n        'ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|' +\n        'ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|' +\n        'ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|' +\n        'ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|' +\n        'ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|' +\n        'newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|' +\n        'newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|' +\n        'newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|' +\n        'newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|' +\n        'newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|' +\n        'newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|' +\n        'newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|' +\n        'newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|' +\n        'newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|' +\n        'newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|' +\n        'newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|' +\n        'newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|' +\n        'newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|' +\n        'newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|' +\n        'newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|' +\n        'newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|' +\n        'newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|' +\n        'newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|' +\n        'newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|' +\n        'notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|' +\n        'notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|' +\n        'numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|' +\n        'ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|' +\n        'ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|' +\n        'oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|' +\n        'oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|' +\n        'oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|' +\n        'oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|' +\n        'oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|' +\n        'oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|' +\n        'oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|' +\n        'oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|' +\n        'oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|' +\n        'ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|' +\n        'ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|' +\n        'ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|' +\n        'ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|' +\n        'ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|' +\n        'octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|' +\n        'odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|' +\n        'odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|' +\n        'odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|' +\n        'odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|' +\n        'odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|' +\n        'openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|' +\n        'openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|' +\n        'openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|' +\n        'openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|' +\n        'openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|' +\n        'openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|' +\n        'openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|' +\n        'openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|' +\n        'openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|' +\n        'openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|' +\n        'openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|' +\n        'outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|' +\n        'ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|' +\n        'ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|' +\n        'ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|' +\n        'parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|' +\n        'pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|' +\n        'pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|' +\n        'pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|' +\n        'pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|' +\n        'pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|' +\n        'pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|' +\n        'pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|' +\n        'pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|' +\n        'pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|' +\n        'pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|' +\n        'pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|' +\n        'pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|' +\n        'pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|' +\n        'pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|' +\n        'pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|' +\n        'pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|' +\n        'pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|' +\n        'pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|' +\n        'pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|' +\n        'pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|' +\n        'pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|' +\n        'pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|' +\n        'pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|' +\n        'pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|' +\n        'pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|' +\n        'pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|' +\n        'pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|' +\n        'pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|' +\n        'pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|' +\n        'pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|' +\n        'pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|' +\n        'pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|' +\n        'pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|' +\n        'pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|' +\n        'pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|' +\n        'php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|' +\n        'png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|' +\n        'posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|' +\n        'posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|' +\n        'posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|' +\n        'preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|' +\n        'printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|' +\n        'printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|' +\n        'printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|' +\n        'printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|' +\n        'printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|' +\n        'ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|' +\n        'ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|' +\n        'ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|' +\n        'ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|' +\n        'ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|' +\n        'ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|' +\n        'ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|' +\n        'ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|' +\n        'ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|' +\n        'pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|' +\n        'pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|' +\n        'pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|' +\n        'px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|' +\n        'px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|' +\n        'px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|' +\n        'radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|' +\n        'radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|' +\n        'radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|' +\n        'radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|' +\n        'rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|' +\n        'readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|' +\n        'readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|' +\n        'readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|' +\n        'recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|' +\n        'recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|' +\n        'reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|' +\n        'regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|' +\n        'resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|' +\n        'rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|' +\n        'rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|' +\n        'runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|' +\n        'runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|' +\n        'runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|' +\n        'runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|' +\n        'samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|' +\n        'samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|' +\n        'sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|' +\n        'sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|' +\n        'sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|' +\n        'sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|' +\n        'sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|' +\n        'sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|' +\n        'sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|' +\n        'sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|' +\n        'sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|' +\n        'sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|' +\n        'sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|' +\n        'sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|' +\n        'sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|' +\n        'sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|' +\n        'sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|' +\n        'sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|' +\n        'sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|' +\n        'sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|' +\n        'sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|' +\n        'sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|' +\n        'session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|' +\n        'session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|' +\n        'session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|' +\n        'session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|' +\n        'set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|' +\n        'setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|' +\n        'shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|' +\n        'similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|' +\n        'snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|' +\n        'snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|' +\n        'snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|' +\n        'soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|' +\n        'socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|' +\n        'socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|' +\n        'socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|' +\n        'solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|' +\n        'solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|' +\n        'solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|' +\n        'spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|' +\n        'splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|' +\n        'splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|' +\n        'sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|' +\n        'sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|' +\n        'sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|' +\n        'sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|' +\n        'sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|' +\n        'sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|' +\n        'ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|' +\n        'ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|' +\n        'ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|' +\n        'ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|' +\n        'stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|' +\n        'stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|' +\n        'stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|' +\n        'stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|' +\n        'stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|' +\n        'stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|' +\n        'stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|' +\n        'stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|' +\n        'stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|' +\n        'stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|' +\n        'stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|' +\n        'stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|' +\n        'str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|' +\n        'stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|' +\n        'stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|' +\n        'stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|' +\n        'stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|' +\n        'stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|' +\n        'stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|' +\n        'stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|' +\n        'stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|' +\n        'stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|' +\n        'strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|' +\n        'svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|' +\n        'svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|' +\n        'svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|' +\n        'svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|' +\n        'svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|' +\n        'svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|' +\n        'swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|' +\n        'swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|' +\n        'swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|' +\n        'swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|' +\n        'swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|' +\n        'swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|' +\n        'swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|' +\n        'swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|' +\n        'swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|' +\n        'swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|' +\n        'swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|' +\n        'swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|' +\n        'swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|' +\n        'sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|' +\n        'sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|' +\n        'sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|' +\n        'sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|' +\n        'tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|' +\n        'tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|' +\n        'time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|' +\n        'timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|' +\n        'tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|' +\n        'ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|' +\n        'udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|' +\n        'udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|' +\n        'uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|' +\n        'urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|' +\n        'variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|' +\n        'variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|' +\n        'variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|' +\n        'vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|' +\n        'vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|' +\n        'vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|' +\n        'w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|' +\n        'wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|' +\n        'win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|' +\n        'win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|' +\n        'wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|' +\n        'wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|' +\n        'wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|' +\n        'wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|' +\n        'xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|' +\n        'xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|' +\n        'xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|' +\n        'xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|' +\n        'xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|' +\n        'xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|' +\n        'xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|' +\n        'xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|' +\n        'xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|' +\n        'xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|' +\n        'xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|' +\n        'xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|' +\n        'xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|' +\n        'xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|' +\n        'xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|' +\n        'xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|' +\n        'xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|' +\n        'xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|' +\n        'xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|' +\n        'xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|' +\n        'xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|' +\n        'xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|' +\n        'yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|' +\n        'yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|' +\n        'yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|' +\n        'yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|' +\n        'zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|' +\n        'ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|' +\n        'ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|' +\n        'ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|' +\n        'ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|' +\n        'ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|' +\n        'ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type').split('|')\n    );\n    var keywords = lang.arrayToMap(\n        ('abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|' +\n        'endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|' +\n        'public|static|switch|throw|trait|try|use|var|while|xor').split('|')\n    );\n    var languageConstructs = lang.arrayToMap(\n        ('die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|')\n    );\n\n    var builtinConstants = lang.arrayToMap(\n        ('true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__').split('|')\n    );\n\n    var builtinVariables = lang.arrayToMap(\n        ('$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|' +\n        '$http_response_header|$argc|$argv').split('|')\n    );\n    var builtinFunctionsDeprecated = lang.arrayToMap(\n        ('key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|' +\n        'com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|' +\n        'cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|' +\n        'hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|' +\n        'maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|' +\n        'mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|' +\n        'mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|' +\n        'mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|' +\n        'mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|' +\n        'mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' +\n        'mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|' +\n        'ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|' +\n        'ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|' +\n        'ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|' +\n        'ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|' +\n        'ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|' +\n        'PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|' +\n        'PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|' +\n        'PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|' +\n        'PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|' +\n        'PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|' +\n        'PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|' +\n        'PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|' +\n        'PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|' +\n        'px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister' +\n        'set_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|' +\n        'sql_regcase').split('|')\n    );\n\n    var keywordsDeprecated = lang.arrayToMap(\n        ('cfunction|old_function').split('|')\n    );\n\n    var futureReserved = lang.arrayToMap([]);\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : /(?:#|\\/\\/)(?:[^?]|\\?[^>])*/\n            },\n            docComment.getStartRule(\"doc-start\"),\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string.regexp\",\n                regex : \"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"\n            }, {\n                token : \"string\", // \" string start\n                regex : '\"',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // ' string start\n                regex : \"'\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|\" +\n                        \"ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|\" +\n                        \"HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|\" +\n                        \"L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|\" +\n                        \"VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"\n            }, {\n                token : [\"keyword\", \"text\", \"support.class\"],\n                regex : \"\\\\b(new)(\\\\s+)(\\\\w+)\"\n            }, {\n                token : [\"support.class\", \"keyword.operator\"],\n                regex : \"\\\\b(\\\\w+)(::)\"\n            }, {\n                token : \"constant.language\", // constants\n                regex : \"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|\" +\n                        \"SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|\" +\n                        \"O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|\" +\n                        \"R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|\" +\n                        \"YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|\" +\n                        \"ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|\" +\n                        \"T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|\" +\n                        \"HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|\" +\n                        \"I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|\" +\n                        \"O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|\" +\n                        \"L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|\" +\n                        \"M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|\" +\n                        \"OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|\" +\n                        \"RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|\" +\n                        \"T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"\n            }, {\n                token : function(value) {\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (builtinConstants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (builtinVariables.hasOwnProperty(value))\n                        return \"variable.language\";\n                    else if (futureReserved.hasOwnProperty(value))\n                        return \"invalid.illegal\";\n                    else if (builtinFunctions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (value == \"debugger\")\n                        return \"invalid.deprecated\";\n                    else\n                        if(value.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/))\n                            return \"variable\";\n                        return \"identifier\";\n                },\n                regex : /[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            }, {\n                onMatch : function(value, currentSate, state) {\n                    value = value.substr(3);\n                    if (value[0] == \"'\" || value[0] == '\"')\n                        value = value.slice(1, -1);\n                    state.unshift(this.next, value);\n                    return \"markup.list\";\n                },\n                regex : /<<<(?:\\w+|'\\w+'|\"\\w+\")$/,\n                next: \"heredoc\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }\n        ],\n        \"heredoc\" : [\n            {\n                onMatch : function(value, currentSate, stack) {\n                    if (stack[1] != value)\n                        return \"string\";\n                    stack.shift();\n                    stack.shift();\n                    return \"markup.list\";\n                },\n                regex : \"^\\\\w+(?=;?$)\",\n                next: \"start\"\n            }, {\n                token: \"string\",\n                regex : \".*\"\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                defaultToken : \"comment\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : '\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'\n            }, {\n                token : \"variable\",\n                regex : /\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/\n            }, {\n                token : \"variable\",\n                regex : /\\$\\{[^\"\\}]+\\}?/           // this is wrong but ok for now\n            },\n            {token : \"string\", regex : '\"', next : \"start\"},\n            {defaultToken : \"string\"}\n        ],\n        \"qstring\" : [\n            {token : \"constant.language.escape\", regex : /\\\\['\\\\]/},\n            {token : \"string\", regex : \"'\", next : \"start\"},\n            {defaultToken : \"string\"}\n        ]\n    };\n\n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"start\") ]);\n};\n\noop.inherits(PhpLangHighlightRules, TextHighlightRules);\n\n\nvar PhpHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var startRules = [\n        {\n            token : \"support.php_tag\", // php open tag\n            regex : \"<\\\\?(?:php|=)?\",\n            push  : \"php-start\"\n        }\n    ];\n\n    var endRules = [\n        {\n            token : \"support.php_tag\", // php close tag\n            regex : \"\\\\?>\",\n            next  : \"pop\"\n        }\n    ];\n\n    for (var key in this.$rules)\n        this.$rules[key].unshift.apply(this.$rules[key], startRules);\n\n    this.embedRules(PhpLangHighlightRules, \"php-\", endRules, [\"start\"]);\n\n    this.normalizeRules();\n};\n\noop.inherits(PhpHighlightRules, HtmlHighlightRules);\n\nexports.PhpHighlightRules = PhpHighlightRules;\nexports.PhpLangHighlightRules = PhpLangHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/php_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar functionMap = {\n    \"abs\": [\n        \"int abs(int number)\",\n        \"Return the absolute value of the number\"\n    ],\n    \"acos\": [\n        \"float acos(float number)\",\n        \"Return the arc cosine of the number in radians\"\n    ],\n    \"acosh\": [\n        \"float acosh(float number)\",\n        \"Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number\"\n    ],\n    \"addGlob\": [\n        \"bool addGlob(string pattern[,int flags [, array options]])\",\n        \"Add files matching the glob pattern. See php's glob for the pattern syntax.\"\n    ],\n    \"addPattern\": [\n        \"bool addPattern(string pattern[, string path [, array options]])\",\n        \"Add files matching the pcre pattern. See php's pcre for the pattern syntax.\"\n    ],\n    \"addcslashes\": [\n        \"string addcslashes(string str, string charlist)\",\n        \"Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\\\n', '\\\\r', '\\\\t' etc...)\"\n    ],\n    \"addslashes\": [\n        \"string addslashes(string str)\",\n        \"Escapes single quote, double quotes and backslash characters in a string with backslashes\"\n    ],\n    \"apache_child_terminate\": [\n        \"bool apache_child_terminate(void)\",\n        \"Terminate apache process after this request\"\n    ],\n    \"apache_get_modules\": [\n        \"array apache_get_modules(void)\",\n        \"Get a list of loaded Apache modules\"\n    ],\n    \"apache_get_version\": [\n        \"string apache_get_version(void)\",\n        \"Fetch Apache version\"\n    ],\n    \"apache_getenv\": [\n        \"bool apache_getenv(string variable [, bool walk_to_top])\",\n        \"Get an Apache subprocess_env variable\"\n    ],\n    \"apache_lookup_uri\": [\n        \"object apache_lookup_uri(string URI)\",\n        \"Perform a partial request of the given URI to obtain information about it\"\n    ],\n    \"apache_note\": [\n        \"string apache_note(string note_name [, string note_value])\",\n        \"Get and set Apache request notes\"\n    ],\n    \"apache_request_auth_name\": [\n        \"string apache_request_auth_name()\",\n        \"\"\n    ],\n    \"apache_request_auth_type\": [\n        \"string apache_request_auth_type()\",\n        \"\"\n    ],\n    \"apache_request_discard_request_body\": [\n        \"long apache_request_discard_request_body()\",\n        \"\"\n    ],\n    \"apache_request_err_headers_out\": [\n        \"array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all headers that go out in case of an error or a subrequest\"\n    ],\n    \"apache_request_headers\": [\n        \"array apache_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"apache_request_headers_in\": [\n        \"array apache_request_headers_in()\",\n        \"* fetch all incoming request headers\"\n    ],\n    \"apache_request_headers_out\": [\n        \"array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])\",\n        \"* fetch all outgoing request headers\"\n    ],\n    \"apache_request_is_initial_req\": [\n        \"bool apache_request_is_initial_req()\",\n        \"\"\n    ],\n    \"apache_request_log_error\": [\n        \"boolean apache_request_log_error(string message, [long facility])\",\n        \"\"\n    ],\n    \"apache_request_meets_conditions\": [\n        \"long apache_request_meets_conditions()\",\n        \"\"\n    ],\n    \"apache_request_remote_host\": [\n        \"int apache_request_remote_host([int type])\",\n        \"\"\n    ],\n    \"apache_request_run\": [\n        \"long apache_request_run()\",\n        \"This is a wrapper for ap_sub_run_req and ap_destory_sub_req.  It takes      sub_request, runs it, destroys it, and returns it's status.\"\n    ],\n    \"apache_request_satisfies\": [\n        \"long apache_request_satisfies()\",\n        \"\"\n    ],\n    \"apache_request_server_port\": [\n        \"int apache_request_server_port()\",\n        \"\"\n    ],\n    \"apache_request_set_etag\": [\n        \"void apache_request_set_etag()\",\n        \"\"\n    ],\n    \"apache_request_set_last_modified\": [\n        \"void apache_request_set_last_modified()\",\n        \"\"\n    ],\n    \"apache_request_some_auth_required\": [\n        \"bool apache_request_some_auth_required()\",\n        \"\"\n    ],\n    \"apache_request_sub_req_lookup_file\": [\n        \"object apache_request_sub_req_lookup_file(string file)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_sub_req_lookup_uri\": [\n        \"object apache_request_sub_req_lookup_uri(string uri)\",\n        \"Returns sub-request for the specified uri.  You would     need to run it yourself with run()\"\n    ],\n    \"apache_request_sub_req_method_uri\": [\n        \"object apache_request_sub_req_method_uri(string method, string uri)\",\n        \"Returns sub-request for the specified file.  You would     need to run it yourself with run().\"\n    ],\n    \"apache_request_update_mtime\": [\n        \"long apache_request_update_mtime([int dependency_mtime])\",\n        \"\"\n    ],\n    \"apache_reset_timeout\": [\n        \"bool apache_reset_timeout(void)\",\n        \"Reset the Apache write timer\"\n    ],\n    \"apache_response_headers\": [\n        \"array apache_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"apache_setenv\": [\n        \"bool apache_setenv(string variable, string value [, bool walk_to_top])\",\n        \"Set an Apache subprocess_env variable\"\n    ],\n    \"array_change_key_case\": [\n        \"array array_change_key_case(array input [, int case=CASE_LOWER])\",\n        \"Retuns an array with all string keys lowercased [or uppercased]\"\n    ],\n    \"array_chunk\": [\n        \"array array_chunk(array input, int size [, bool preserve_keys])\",\n        \"Split array into chunks\"\n    ],\n    \"array_combine\": [\n        \"array array_combine(array keys, array values)\",\n        \"Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values\"\n    ],\n    \"array_count_values\": [\n        \"array array_count_values(array input)\",\n        \"Return the value as key and the frequency of that value in input as value\"\n    ],\n    \"array_diff\": [\n        \"array array_diff(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments.\"\n    ],\n    \"array_diff_assoc\": [\n        \"array array_diff_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal\"\n    ],\n    \"array_diff_key\": [\n        \"array array_diff_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_diff_uassoc\": [\n        \"array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function.\"\n    ],\n    \"array_diff_ukey\": [\n        \"array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved.\"\n    ],\n    \"array_fill\": [\n        \"array array_fill(int start_key, int num, mixed val)\",\n        \"Create an array containing num elements starting with index start_key each initialized to val\"\n    ],\n    \"array_fill_keys\": [\n        \"array array_fill_keys(array keys, mixed val)\",\n        \"Create an array using the elements of the first parameter as keys each initialized to val\"\n    ],\n    \"array_filter\": [\n        \"array array_filter(array input [, mixed callback])\",\n        \"Filters elements from the array via the callback.\"\n    ],\n    \"array_flip\": [\n        \"array array_flip(array input)\",\n        \"Return array with key <-> value flipped\"\n    ],\n    \"array_intersect\": [\n        \"array array_intersect(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments\"\n    ],\n    \"array_intersect_assoc\": [\n        \"array array_intersect_assoc(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check\"\n    ],\n    \"array_intersect_key\": [\n        \"array array_intersect_key(array arr1, array arr2 [, array ...])\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data.\"\n    ],\n    \"array_intersect_uassoc\": [\n        \"array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback.\"\n    ],\n    \"array_intersect_ukey\": [\n        \"array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)\",\n        \"Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data.\"\n    ],\n    \"array_key_exists\": [\n        \"bool array_key_exists(mixed key, array search)\",\n        \"Checks if the given key or index exists in the array\"\n    ],\n    \"array_keys\": [\n        \"array array_keys(array input [, mixed search_value[, bool strict]])\",\n        \"Return just the keys from the input array, optionally only for the specified search_value\"\n    ],\n    \"array_map\": [\n        \"array array_map(mixed callback, array input1 [, array input2 ,...])\",\n        \"Applies the callback to the elements in given arrays.\"\n    ],\n    \"array_merge\": [\n        \"array array_merge(array arr1, array arr2 [, array ...])\",\n        \"Merges elements from passed arrays into one array\"\n    ],\n    \"array_merge_recursive\": [\n        \"array array_merge_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively merges elements from passed arrays into one array\"\n    ],\n    \"array_multisort\": [\n        \"bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])\",\n        \"Sort multiple arrays at once similar to how ORDER BY clause works in SQL\"\n    ],\n    \"array_pad\": [\n        \"array array_pad(array input, int pad_size, mixed pad_value)\",\n        \"Returns a copy of input array padded with pad_value to size pad_size\"\n    ],\n    \"array_pop\": [\n        \"mixed array_pop(array stack)\",\n        \"Pops an element off the end of the array\"\n    ],\n    \"array_product\": [\n        \"mixed array_product(array input)\",\n        \"Returns the product of the array entries\"\n    ],\n    \"array_push\": [\n        \"int array_push(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the end of the array\"\n    ],\n    \"array_rand\": [\n        \"mixed array_rand(array input [, int num_req])\",\n        \"Return key\\/keys for random entry\\/entries in the array\"\n    ],\n    \"array_reduce\": [\n        \"mixed array_reduce(array input, mixed callback [, mixed initial])\",\n        \"Iteratively reduce the array to a single value via the callback.\"\n    ],\n    \"array_replace\": [\n        \"array array_replace(array arr1, array arr2 [, array ...])\",\n        \"Replaces elements from passed arrays into one array\"\n    ],\n    \"array_replace_recursive\": [\n        \"array array_replace_recursive(array arr1, array arr2 [, array ...])\",\n        \"Recursively replaces elements from passed arrays into one array\"\n    ],\n    \"array_reverse\": [\n        \"array array_reverse(array input [, bool preserve keys])\",\n        \"Return input as a new array with the order of the entries reversed\"\n    ],\n    \"array_search\": [\n        \"mixed array_search(mixed needle, array haystack [, bool strict])\",\n        \"Searches the array for a given value and returns the corresponding key if successful\"\n    ],\n    \"array_shift\": [\n        \"mixed array_shift(array stack)\",\n        \"Pops an element off the beginning of the array\"\n    ],\n    \"array_slice\": [\n        \"array array_slice(array input, int offset [, int length [, bool preserve_keys]])\",\n        \"Returns elements specified by offset and length\"\n    ],\n    \"array_splice\": [\n        \"array array_splice(array input, int offset [, int length [, array replacement]])\",\n        \"Removes the elements designated by offset and length and replace them with supplied array\"\n    ],\n    \"array_sum\": [\n        \"mixed array_sum(array input)\",\n        \"Returns the sum of the array entries\"\n    ],\n    \"array_udiff\": [\n        \"array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function.\"\n    ],\n    \"array_udiff_assoc\": [\n        \"array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function.\"\n    ],\n    \"array_udiff_uassoc\": [\n        \"array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)\",\n        \"Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions.\"\n    ],\n    \"array_uintersect\": [\n        \"array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_assoc\": [\n        \"array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback.\"\n    ],\n    \"array_uintersect_uassoc\": [\n        \"array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)\",\n        \"Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks.\"\n    ],\n    \"array_unique\": [\n        \"array array_unique(array input [, int sort_flags])\",\n        \"Removes duplicate values from array\"\n    ],\n    \"array_unshift\": [\n        \"int array_unshift(array stack, mixed var [, mixed ...])\",\n        \"Pushes elements onto the beginning of the array\"\n    ],\n    \"array_values\": [\n        \"array array_values(array input)\",\n        \"Return just the values from the input array\"\n    ],\n    \"array_walk\": [\n        \"bool array_walk(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function to every member of an array\"\n    ],\n    \"array_walk_recursive\": [\n        \"bool array_walk_recursive(array input, string funcname [, mixed userdata])\",\n        \"Apply a user function recursively to every member of an array\"\n    ],\n    \"arsort\": [\n        \"bool arsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order and maintain index association\"\n    ],\n    \"asin\": [\n        \"float asin(float number)\",\n        \"Returns the arc sine of the number in radians\"\n    ],\n    \"asinh\": [\n        \"float asinh(float number)\",\n        \"Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number\"\n    ],\n    \"asort\": [\n        \"bool asort(array &array_arg [, int sort_flags])\",\n        \"Sort an array and maintain index association\"\n    ],\n    \"assert\": [\n        \"int assert(string|bool assertion)\",\n        \"Checks if assertion is false\"\n    ],\n    \"assert_options\": [\n        \"mixed assert_options(int what [, mixed value])\",\n        \"Set\\/get the various assert flags\"\n    ],\n    \"atan\": [\n        \"float atan(float number)\",\n        \"Returns the arc tangent of the number in radians\"\n    ],\n    \"atan2\": [\n        \"float atan2(float y, float x)\",\n        \"Returns the arc tangent of y\\/x, with the resulting quadrant determined by the signs of y and x\"\n    ],\n    \"atanh\": [\n        \"float atanh(float number)\",\n        \"Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number\"\n    ],\n    \"attachIterator\": [\n        \"void attachIterator(Iterator iterator[, mixed info])\",\n        \"Attach a new iterator\"\n    ],\n    \"base64_decode\": [\n        \"string base64_decode(string str[, bool strict])\",\n        \"Decodes string using MIME base64 algorithm\"\n    ],\n    \"base64_encode\": [\n        \"string base64_encode(string str)\",\n        \"Encodes string using MIME base64 algorithm\"\n    ],\n    \"base_convert\": [\n        \"string base_convert(string number, int frombase, int tobase)\",\n        \"Converts a number in a string from any base <= 36 to any base <= 36\"\n    ],\n    \"basename\": [\n        \"string basename(string path [, string suffix])\",\n        \"Returns the filename component of the path\"\n    ],\n    \"bcadd\": [\n        \"string bcadd(string left_operand, string right_operand [, int scale])\",\n        \"Returns the sum of two arbitrary precision numbers\"\n    ],\n    \"bccomp\": [\n        \"int bccomp(string left_operand, string right_operand [, int scale])\",\n        \"Compares two arbitrary precision numbers\"\n    ],\n    \"bcdiv\": [\n        \"string bcdiv(string left_operand, string right_operand [, int scale])\",\n        \"Returns the quotient of two arbitrary precision numbers (division)\"\n    ],\n    \"bcmod\": [\n        \"string bcmod(string left_operand, string right_operand)\",\n        \"Returns the modulus of the two arbitrary precision operands\"\n    ],\n    \"bcmul\": [\n        \"string bcmul(string left_operand, string right_operand [, int scale])\",\n        \"Returns the multiplication of two arbitrary precision numbers\"\n    ],\n    \"bcpow\": [\n        \"string bcpow(string x, string y [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another\"\n    ],\n    \"bcpowmod\": [\n        \"string bcpowmod(string x, string y, string mod [, int scale])\",\n        \"Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous\"\n    ],\n    \"bcscale\": [\n        \"bool bcscale(int scale)\",\n        \"Sets default scale parameter for all bc math functions\"\n    ],\n    \"bcsqrt\": [\n        \"string bcsqrt(string operand [, int scale])\",\n        \"Returns the square root of an arbitray precision number\"\n    ],\n    \"bcsub\": [\n        \"string bcsub(string left_operand, string right_operand [, int scale])\",\n        \"Returns the difference between two arbitrary precision numbers\"\n    ],\n    \"bin2hex\": [\n        \"string bin2hex(string data)\",\n        \"Converts the binary representation of data to hex\"\n    ],\n    \"bind_textdomain_codeset\": [\n        \"string bind_textdomain_codeset (string domain, string codeset)\",\n        \"Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.\"\n    ],\n    \"bindec\": [\n        \"int bindec(string binary_number)\",\n        \"Returns the decimal equivalent of the binary number\"\n    ],\n    \"bindtextdomain\": [\n        \"string bindtextdomain(string domain_name, string dir)\",\n        \"Bind to the text domain domain_name, looking for translations in dir. Returns the current domain\"\n    ],\n    \"birdstep_autocommit\": [\n        \"bool birdstep_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_close\": [\n        \"bool birdstep_close(int id)\",\n        \"\"\n    ],\n    \"birdstep_commit\": [\n        \"bool birdstep_commit(int index)\",\n        \"\"\n    ],\n    \"birdstep_connect\": [\n        \"int birdstep_connect(string server, string user, string pass)\",\n        \"\"\n    ],\n    \"birdstep_exec\": [\n        \"int birdstep_exec(int index, string exec_str)\",\n        \"\"\n    ],\n    \"birdstep_fetch\": [\n        \"bool birdstep_fetch(int index)\",\n        \"\"\n    ],\n    \"birdstep_fieldname\": [\n        \"string birdstep_fieldname(int index, int col)\",\n        \"\"\n    ],\n    \"birdstep_fieldnum\": [\n        \"int birdstep_fieldnum(int index)\",\n        \"\"\n    ],\n    \"birdstep_freeresult\": [\n        \"bool birdstep_freeresult(int index)\",\n        \"\"\n    ],\n    \"birdstep_off_autocommit\": [\n        \"bool birdstep_off_autocommit(int index)\",\n        \"\"\n    ],\n    \"birdstep_result\": [\n        \"mixed birdstep_result(int index, mixed col)\",\n        \"\"\n    ],\n    \"birdstep_rollback\": [\n        \"bool birdstep_rollback(int index)\",\n        \"\"\n    ],\n    \"bzcompress\": [\n        \"string bzcompress(string source [, int blocksize100k [, int workfactor]])\",\n        \"Compresses a string into BZip2 encoded data\"\n    ],\n    \"bzdecompress\": [\n        \"string bzdecompress(string source [, int small])\",\n        \"Decompresses BZip2 compressed data\"\n    ],\n    \"bzerrno\": [\n        \"int bzerrno(resource bz)\",\n        \"Returns the error number\"\n    ],\n    \"bzerror\": [\n        \"array bzerror(resource bz)\",\n        \"Returns the error number and error string in an associative array\"\n    ],\n    \"bzerrstr\": [\n        \"string bzerrstr(resource bz)\",\n        \"Returns the error string\"\n    ],\n    \"bzopen\": [\n        \"resource bzopen(string|int file|fp, string mode)\",\n        \"Opens a new BZip2 stream\"\n    ],\n    \"bzread\": [\n        \"string bzread(resource bz[, int length])\",\n        \"Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified\"\n    ],\n    \"cal_days_in_month\": [\n        \"int cal_days_in_month(int calendar, int month, int year)\",\n        \"Returns the number of days in a month for a given year and calendar\"\n    ],\n    \"cal_from_jd\": [\n        \"array cal_from_jd(int jd, int calendar)\",\n        \"Converts from Julian Day Count to a supported calendar and return extended information\"\n    ],\n    \"cal_info\": [\n        \"array cal_info([int calendar])\",\n        \"Returns information about a particular calendar\"\n    ],\n    \"cal_to_jd\": [\n        \"int cal_to_jd(int calendar, int month, int day, int year)\",\n        \"Converts from a supported calendar to Julian Day Count\"\n    ],\n    \"call_user_func\": [\n        \"mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"call_user_func_array\": [\n        \"mixed call_user_func_array(string function_name, array parameters)\",\n        \"Call a user function which is the first parameter with the arguments contained in array\"\n    ],\n    \"call_user_method\": [\n        \"mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])\",\n        \"Call a user method on a specific object or class\"\n    ],\n    \"call_user_method_array\": [\n        \"mixed call_user_method_array(string method_name, mixed object, array params)\",\n        \"Call a user method on a specific object or class using a parameter array\"\n    ],\n    \"ceil\": [\n        \"float ceil(float number)\",\n        \"Returns the next highest integer value of the number\"\n    ],\n    \"chdir\": [\n        \"bool chdir(string directory)\",\n        \"Change the current directory\"\n    ],\n    \"checkdate\": [\n        \"bool checkdate(int month, int day, int year)\",\n        \"Returns true(1) if it is a valid date in gregorian calendar\"\n    ],\n    \"chgrp\": [\n        \"bool chgrp(string filename, mixed group)\",\n        \"Change file group\"\n    ],\n    \"chmod\": [\n        \"bool chmod(string filename, int mode)\",\n        \"Change file mode\"\n    ],\n    \"chown\": [\n        \"bool chown (string filename, mixed user)\",\n        \"Change file owner\"\n    ],\n    \"chr\": [\n        \"string chr(int ascii)\",\n        \"Converts ASCII code to a character\"\n    ],\n    \"chroot\": [\n        \"bool chroot(string directory)\",\n        \"Change root directory\"\n    ],\n    \"chunk_split\": [\n        \"string chunk_split(string str [, int chunklen [, string ending]])\",\n        \"Returns split line\"\n    ],\n    \"class_alias\": [\n        \"bool class_alias(string user_class_name , string alias_name [, bool autoload])\",\n        \"Creates an alias for user defined class\"\n    ],\n    \"class_exists\": [\n        \"bool class_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"class_implements\": [\n        \"array class_implements(mixed what [, bool autoload ])\",\n        \"Return all classes and interfaces implemented by SPL\"\n    ],\n    \"class_parents\": [\n        \"array class_parents(object instance [, boolean autoload = true])\",\n        \"Return an array containing the names of all parent classes\"\n    ],\n    \"clearstatcache\": [\n        \"void clearstatcache([bool clear_realpath_cache[, string filename]])\",\n        \"Clear file stat cache\"\n    ],\n    \"closedir\": [\n        \"void closedir([resource dir_handle])\",\n        \"Close directory connection identified by the dir_handle\"\n    ],\n    \"closelog\": [\n        \"bool closelog(void)\",\n        \"Close connection to system logger\"\n    ],\n    \"collator_asort\": [\n        \"bool collator_asort( Collator $coll, array(string) $arr )\",\n        \"* Sort array using specified collator, maintaining index association.\"\n    ],\n    \"collator_compare\": [\n        \"int collator_compare( Collator $coll, string $str1, string $str2 )\",\n        \"* Compare two strings.\"\n    ],\n    \"collator_create\": [\n        \"Collator collator_create( string $locale )\",\n        \"* Create collator.\"\n    ],\n    \"collator_get_attribute\": [\n        \"int collator_get_attribute( Collator $coll, int $attr )\",\n        \"* Get collation attribute value.\"\n    ],\n    \"collator_get_error_code\": [\n        \"int collator_get_error_code( Collator $coll )\",\n        \"* Get collator's last error code.\"\n    ],\n    \"collator_get_error_message\": [\n        \"string collator_get_error_message( Collator $coll )\",\n        \"* Get text description for collator's last error code.\"\n    ],\n    \"collator_get_locale\": [\n        \"string collator_get_locale( Collator $coll, int $type )\",\n        \"* Gets the locale name of the collator.\"\n    ],\n    \"collator_get_sort_key\": [\n        \"bool collator_get_sort_key( Collator $coll, string $str )\",\n        \"* Get a sort key for a string from a Collator. }}}\"\n    ],\n    \"collator_get_strength\": [\n        \"int collator_get_strength(Collator coll)\",\n        \"* Returns the current collation strength.\"\n    ],\n    \"collator_set_attribute\": [\n        \"bool collator_set_attribute( Collator $coll, int $attr, int $val )\",\n        \"* Set collation attribute.\"\n    ],\n    \"collator_set_strength\": [\n        \"bool collator_set_strength(Collator coll, int strength)\",\n        \"* Set the collation strength.\"\n    ],\n    \"collator_sort\": [\n        \"bool collator_sort(  Collator $coll, array(string) $arr [, int $sort_flags] )\",\n        \"* Sort array using specified collator.\"\n    ],\n    \"collator_sort_with_sort_keys\": [\n        \"bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )\",\n        \"* Equivalent to standard PHP sort using Collator.  * Uses ICU ucol_getSortKey for performance.\"\n    ],\n    \"com_create_guid\": [\n        \"string com_create_guid()\",\n        \"Generate a globally unique identifier (GUID)\"\n    ],\n    \"com_event_sink\": [\n        \"bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])\",\n        \"Connect events from a COM object to a PHP object\"\n    ],\n    \"com_get_active_object\": [\n        \"object com_get_active_object(string progid [, int code_page ])\",\n        \"Returns a handle to an already running instance of a COM object\"\n    ],\n    \"com_load_typelib\": [\n        \"bool com_load_typelib(string typelib_name [, int case_insensitive])\",\n        \"Loads a Typelibrary and registers its constants\"\n    ],\n    \"com_message_pump\": [\n        \"bool com_message_pump([int timeoutms])\",\n        \"Process COM messages, sleeping for up to timeoutms milliseconds\"\n    ],\n    \"com_print_typeinfo\": [\n        \"bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)\",\n        \"Print out a PHP class definition for a dispatchable interface\"\n    ],\n    \"compact\": [\n        \"array compact(mixed var_names [, mixed ...])\",\n        \"Creates a hash containing variables and their values\"\n    ],\n    \"compose_locale\": [\n        \"static string compose_locale($array)\",\n        \"* Creates a locale by combining the parts of locale-ID passed  * }}}\"\n    ],\n    \"confirm_extname_compiled\": [\n        \"string confirm_extname_compiled(string arg)\",\n        \"Return a string to confirm that the module is compiled in\"\n    ],\n    \"connection_aborted\": [\n        \"int connection_aborted(void)\",\n        \"Returns true if client disconnected\"\n    ],\n    \"connection_status\": [\n        \"int connection_status(void)\",\n        \"Returns the connection status bitfield\"\n    ],\n    \"constant\": [\n        \"mixed constant(string const_name)\",\n        \"Given the name of a constant this function will return the constant's associated value\"\n    ],\n    \"convert_cyr_string\": [\n        \"string convert_cyr_string(string str, string from, string to)\",\n        \"Convert from one Cyrillic character set to another\"\n    ],\n    \"convert_uudecode\": [\n        \"string convert_uudecode(string data)\",\n        \"decode a uuencoded string\"\n    ],\n    \"convert_uuencode\": [\n        \"string convert_uuencode(string data)\",\n        \"uuencode a string\"\n    ],\n    \"copy\": [\n        \"bool copy(string source_file, string destination_file [, resource context])\",\n        \"Copy a file\"\n    ],\n    \"cos\": [\n        \"float cos(float number)\",\n        \"Returns the cosine of the number in radians\"\n    ],\n    \"cosh\": [\n        \"float cosh(float number)\",\n        \"Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))\\/2\"\n    ],\n    \"count\": [\n        \"int count(mixed var [, int mode])\",\n        \"Count the number of elements in a variable (usually an array)\"\n    ],\n    \"count_chars\": [\n        \"mixed count_chars(string input [, int mode])\",\n        \"Returns info about what characters are used in input\"\n    ],\n    \"crc32\": [\n        \"string crc32(string str)\",\n        \"Calculate the crc32 polynomial of a string\"\n    ],\n    \"create_function\": [\n        \"string create_function(string args, string code)\",\n        \"Creates an anonymous function, and returns its name (funny, eh?)\"\n    ],\n    \"crypt\": [\n        \"string crypt(string str [, string salt])\",\n        \"Hash a string\"\n    ],\n    \"ctype_alnum\": [\n        \"bool ctype_alnum(mixed c)\",\n        \"Checks for alphanumeric character(s)\"\n    ],\n    \"ctype_alpha\": [\n        \"bool ctype_alpha(mixed c)\",\n        \"Checks for alphabetic character(s)\"\n    ],\n    \"ctype_cntrl\": [\n        \"bool ctype_cntrl(mixed c)\",\n        \"Checks for control character(s)\"\n    ],\n    \"ctype_digit\": [\n        \"bool ctype_digit(mixed c)\",\n        \"Checks for numeric character(s)\"\n    ],\n    \"ctype_graph\": [\n        \"bool ctype_graph(mixed c)\",\n        \"Checks for any printable character(s) except space\"\n    ],\n    \"ctype_lower\": [\n        \"bool ctype_lower(mixed c)\",\n        \"Checks for lowercase character(s)\"\n    ],\n    \"ctype_print\": [\n        \"bool ctype_print(mixed c)\",\n        \"Checks for printable character(s)\"\n    ],\n    \"ctype_punct\": [\n        \"bool ctype_punct(mixed c)\",\n        \"Checks for any printable character which is not whitespace or an alphanumeric character\"\n    ],\n    \"ctype_space\": [\n        \"bool ctype_space(mixed c)\",\n        \"Checks for whitespace character(s)\"\n    ],\n    \"ctype_upper\": [\n        \"bool ctype_upper(mixed c)\",\n        \"Checks for uppercase character(s)\"\n    ],\n    \"ctype_xdigit\": [\n        \"bool ctype_xdigit(mixed c)\",\n        \"Checks for character(s) representing a hexadecimal digit\"\n    ],\n    \"curl_close\": [\n        \"void curl_close(resource ch)\",\n        \"Close a cURL session\"\n    ],\n    \"curl_copy_handle\": [\n        \"resource curl_copy_handle(resource ch)\",\n        \"Copy a cURL handle along with all of it's preferences\"\n    ],\n    \"curl_errno\": [\n        \"int curl_errno(resource ch)\",\n        \"Return an integer containing the last error number\"\n    ],\n    \"curl_error\": [\n        \"string curl_error(resource ch)\",\n        \"Return a string contain the last error for the current session\"\n    ],\n    \"curl_exec\": [\n        \"bool curl_exec(resource ch)\",\n        \"Perform a cURL session\"\n    ],\n    \"curl_getinfo\": [\n        \"mixed curl_getinfo(resource ch [, int option])\",\n        \"Get information regarding a specific transfer\"\n    ],\n    \"curl_init\": [\n        \"resource curl_init([string url])\",\n        \"Initialize a cURL session\"\n    ],\n    \"curl_multi_add_handle\": [\n        \"int curl_multi_add_handle(resource mh, resource ch)\",\n        \"Add a normal cURL handle to a cURL multi handle\"\n    ],\n    \"curl_multi_close\": [\n        \"void curl_multi_close(resource mh)\",\n        \"Close a set of cURL handles\"\n    ],\n    \"curl_multi_exec\": [\n        \"int curl_multi_exec(resource mh, int &still_running)\",\n        \"Run the sub-connections of the current cURL handle\"\n    ],\n    \"curl_multi_getcontent\": [\n        \"string curl_multi_getcontent(resource ch)\",\n        \"Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set\"\n    ],\n    \"curl_multi_info_read\": [\n        \"array curl_multi_info_read(resource mh [, long msgs_in_queue])\",\n        \"Get information about the current transfers\"\n    ],\n    \"curl_multi_init\": [\n        \"resource curl_multi_init(void)\",\n        \"Returns a new cURL multi handle\"\n    ],\n    \"curl_multi_remove_handle\": [\n        \"int curl_multi_remove_handle(resource mh, resource ch)\",\n        \"Remove a multi handle from a set of cURL handles\"\n    ],\n    \"curl_multi_select\": [\n        \"int curl_multi_select(resource mh[, double timeout])\",\n        \"Get all the sockets associated with the cURL extension, which can then be \\\"selected\\\"\"\n    ],\n    \"curl_setopt\": [\n        \"bool curl_setopt(resource ch, int option, mixed value)\",\n        \"Set an option for a cURL transfer\"\n    ],\n    \"curl_setopt_array\": [\n        \"bool curl_setopt_array(resource ch, array options)\",\n        \"Set an array of option for a cURL transfer\"\n    ],\n    \"curl_version\": [\n        \"array curl_version([int version])\",\n        \"Return cURL version information.\"\n    ],\n    \"current\": [\n        \"mixed current(array array_arg)\",\n        \"Return the element currently pointed to by the internal array pointer\"\n    ],\n    \"date\": [\n        \"string date(string format [, long timestamp])\",\n        \"Format a local date\\/time\"\n    ],\n    \"date_add\": [\n        \"DateTime date_add(DateTime object, DateInterval interval)\",\n        \"Adds an interval to the current date in object.\"\n    ],\n    \"date_create\": [\n        \"DateTime date_create([string time[, DateTimeZone object]])\",\n        \"Returns new DateTime object\"\n    ],\n    \"date_create_from_format\": [\n        \"DateTime date_create_from_format(string format, string time[, DateTimeZone object])\",\n        \"Returns new DateTime object formatted according to the specified format\"\n    ],\n    \"date_date_set\": [\n        \"DateTime date_date_set(DateTime object, long year, long month, long day)\",\n        \"Sets the date.\"\n    ],\n    \"date_default_timezone_get\": [\n        \"string date_default_timezone_get()\",\n        \"Gets the default timezone used by all date\\/time functions in a script\"\n    ],\n    \"date_default_timezone_set\": [\n        \"bool date_default_timezone_set(string timezone_identifier)\",\n        \"Sets the default timezone used by all date\\/time functions in a script\"\n    ],\n    \"date_diff\": [\n        \"DateInterval date_diff(DateTime object [, bool absolute])\",\n        \"Returns the difference between two DateTime objects.\"\n    ],\n    \"date_format\": [\n        \"string date_format(DateTime object, string format)\",\n        \"Returns date formatted according to given format\"\n    ],\n    \"date_get_last_errors\": [\n        \"array date_get_last_errors()\",\n        \"Returns the warnings and errors found while parsing a date\\/time string.\"\n    ],\n    \"date_interval_create_from_date_string\": [\n        \"DateInterval date_interval_create_from_date_string(string time)\",\n        \"Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string\"\n    ],\n    \"date_interval_format\": [\n        \"string date_interval_format(DateInterval object, string format)\",\n        \"Formats the interval.\"\n    ],\n    \"date_isodate_set\": [\n        \"DateTime date_isodate_set(DateTime object, long year, long week[, long day])\",\n        \"Sets the ISO date.\"\n    ],\n    \"date_modify\": [\n        \"DateTime date_modify(DateTime object, string modify)\",\n        \"Alters the timestamp.\"\n    ],\n    \"date_offset_get\": [\n        \"long date_offset_get(DateTime object)\",\n        \"Returns the DST offset.\"\n    ],\n    \"date_parse\": [\n        \"array date_parse(string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_parse_from_format\": [\n        \"array date_parse_from_format(string format, string date)\",\n        \"Returns associative array with detailed info about given date\"\n    ],\n    \"date_sub\": [\n        \"DateTime date_sub(DateTime object, DateInterval interval)\",\n        \"Subtracts an interval to the current date in object.\"\n    ],\n    \"date_sun_info\": [\n        \"array date_sun_info(long time, float latitude, float longitude)\",\n        \"Returns an array with information about sun set\\/rise and twilight begin\\/end\"\n    ],\n    \"date_sunrise\": [\n        \"mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunrise for a given day and location\"\n    ],\n    \"date_sunset\": [\n        \"mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])\",\n        \"Returns time of sunset for a given day and location\"\n    ],\n    \"date_time_set\": [\n        \"DateTime date_time_set(DateTime object, long hour, long minute[, long second])\",\n        \"Sets the time.\"\n    ],\n    \"date_timestamp_get\": [\n        \"long date_timestamp_get(DateTime object)\",\n        \"Gets the Unix timestamp.\"\n    ],\n    \"date_timestamp_set\": [\n        \"DateTime date_timestamp_set(DateTime object, long unixTimestamp)\",\n        \"Sets the date and time based on an Unix timestamp.\"\n    ],\n    \"date_timezone_get\": [\n        \"DateTimeZone date_timezone_get(DateTime object)\",\n        \"Return new DateTimeZone object relative to give DateTime\"\n    ],\n    \"date_timezone_set\": [\n        \"DateTime date_timezone_set(DateTime object, DateTimeZone object)\",\n        \"Sets the timezone for the DateTime object.\"\n    ],\n    \"datefmt_create\": [\n        \"IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )\",\n        \"* Create formatter.\"\n    ],\n    \"datefmt_format\": [\n        \"string datefmt_format( [mixed]int $args or array $args )\",\n        \"* Format the time value as a string. }}}\"\n    ],\n    \"datefmt_get_calendar\": [\n        \"string datefmt_get_calendar( IntlDateFormatter $mf )\",\n        \"* Get formatter calendar.\"\n    ],\n    \"datefmt_get_datetype\": [\n        \"string datefmt_get_datetype( IntlDateFormatter $mf )\",\n        \"* Get formatter datetype.\"\n    ],\n    \"datefmt_get_error_code\": [\n        \"int datefmt_get_error_code( IntlDateFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"datefmt_get_error_message\": [\n        \"string datefmt_get_error_message( IntlDateFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"datefmt_get_locale\": [\n        \"string datefmt_get_locale(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_get_pattern\": [\n        \"string datefmt_get_pattern( IntlDateFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"datefmt_get_timetype\": [\n        \"string datefmt_get_timetype( IntlDateFormatter $mf )\",\n        \"* Get formatter timetype.\"\n    ],\n    \"datefmt_get_timezone_id\": [\n        \"string datefmt_get_timezone_id( IntlDateFormatter $mf )\",\n        \"* Get formatter timezone_id.\"\n    ],\n    \"datefmt_isLenient\": [\n        \"string datefmt_isLenient(IntlDateFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"datefmt_localtime\": [\n        \"integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])\",\n        \"* Parse the string $value to a localtime array  }}}\"\n    ],\n    \"datefmt_parse\": [\n        \"integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )\",\n        \"* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}\"\n    ],\n    \"datefmt_setLenient\": [\n        \"string datefmt_setLenient(IntlDateFormatter $mf)\",\n        \"* Set formatter lenient.\"\n    ],\n    \"datefmt_set_calendar\": [\n        \"bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )\",\n        \"* Set formatter calendar.\"\n    ],\n    \"datefmt_set_pattern\": [\n        \"bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"datefmt_set_timezone_id\": [\n        \"boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)\",\n        \"* Set formatter timezone_id.\"\n    ],\n    \"dba_close\": [\n        \"void dba_close(resource handle)\",\n        \"Closes database\"\n    ],\n    \"dba_delete\": [\n        \"bool dba_delete(string key, resource handle)\",\n        \"Deletes the entry associated with key    If inifile: remove all other key lines\"\n    ],\n    \"dba_exists\": [\n        \"bool dba_exists(string key, resource handle)\",\n        \"Checks, if the specified key exists\"\n    ],\n    \"dba_fetch\": [\n        \"string dba_fetch(string key, [int skip ,] resource handle)\",\n        \"Fetches the data associated with key\"\n    ],\n    \"dba_firstkey\": [\n        \"string dba_firstkey(resource handle)\",\n        \"Resets the internal key pointer and returns the first key\"\n    ],\n    \"dba_handlers\": [\n        \"array dba_handlers([bool full_info])\",\n        \"List configured database handlers\"\n    ],\n    \"dba_insert\": [\n        \"bool dba_insert(string key, string value, resource handle)\",\n        \"If not inifile: Insert value as key, return false, if key exists already     If inifile: Add vakue as key (next instance of key)\"\n    ],\n    \"dba_key_split\": [\n        \"array|false dba_key_split(string key)\",\n        \"Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null\"\n    ],\n    \"dba_list\": [\n        \"array dba_list()\",\n        \"List opened databases\"\n    ],\n    \"dba_nextkey\": [\n        \"string dba_nextkey(resource handle)\",\n        \"Returns the next key\"\n    ],\n    \"dba_open\": [\n        \"resource dba_open(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode\"\n    ],\n    \"dba_optimize\": [\n        \"bool dba_optimize(resource handle)\",\n        \"Optimizes (e.g. clean up, vacuum) database\"\n    ],\n    \"dba_popen\": [\n        \"resource dba_popen(string path, string mode [, string handlername, string ...])\",\n        \"Opens path using the specified handler in mode persistently\"\n    ],\n    \"dba_replace\": [\n        \"bool dba_replace(string key, string value, resource handle)\",\n        \"Inserts value as key, replaces key, if key exists already    If inifile: remove all other key lines\"\n    ],\n    \"dba_sync\": [\n        \"bool dba_sync(resource handle)\",\n        \"Synchronizes database\"\n    ],\n    \"dcgettext\": [\n        \"string dcgettext(string domain_name, string msgid, long category)\",\n        \"Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist\"\n    ],\n    \"dcngettext\": [\n        \"string dcngettext (string domain, string msgid1, string msgid2, int n, int category)\",\n        \"Plural version of dcgettext()\"\n    ],\n    \"debug_backtrace\": [\n        \"array debug_backtrace([bool provide_object])\",\n        \"Return backtrace as array\"\n    ],\n    \"debug_print_backtrace\": [\n        \"void debug_print_backtrace(void) *\\/\",\n        \"ZEND_FUNCTION(debug_print_backtrace) {  zend_execute_data *ptr, *skip;  int lineno;  char *function_name;  char *filename;  char *class_name = NULL;  char *call_type;  char *include_filename = NULL;  zval *arg_array = NULL;  int indent = 0;   if (zend_parse_parameters_none() == FAILURE) {   return;  }   ptr = EG(current_execute_data);   \\/* skip debug_backtrace()\"\n    ],\n    \"debug_zval_dump\": [\n        \"void debug_zval_dump(mixed var)\",\n        \"Dumps a string representation of an internal zend value to output.\"\n    ],\n    \"decbin\": [\n        \"string decbin(int decimal_number)\",\n        \"Returns a string containing a binary representation of the number\"\n    ],\n    \"dechex\": [\n        \"string dechex(int decimal_number)\",\n        \"Returns a string containing a hexadecimal representation of the given number\"\n    ],\n    \"decoct\": [\n        \"string decoct(int decimal_number)\",\n        \"Returns a string containing an octal representation of the given number\"\n    ],\n    \"define\": [\n        \"bool define(string constant_name, mixed value, boolean case_insensitive=false)\",\n        \"Define a new constant\"\n    ],\n    \"define_syslog_variables\": [\n        \"void define_syslog_variables(void)\",\n        \"Initializes all syslog-related variables\"\n    ],\n    \"defined\": [\n        \"bool defined(string constant_name)\",\n        \"Check whether a constant exists\"\n    ],\n    \"deg2rad\": [\n        \"float deg2rad(float number)\",\n        \"Converts the number in degrees to the radian equivalent\"\n    ],\n    \"dgettext\": [\n        \"string dgettext(string domain_name, string msgid)\",\n        \"Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist\"\n    ],\n    \"die\": [\n        \"void die([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"dir\": [\n        \"object dir(string directory[, resource context])\",\n        \"Directory class with properties, handle and class and methods read, rewind and close\"\n    ],\n    \"dirname\": [\n        \"string dirname(string path)\",\n        \"Returns the directory name component of the path\"\n    ],\n    \"disk_free_space\": [\n        \"float disk_free_space(string path)\",\n        \"Get free disk space for filesystem that path is on\"\n    ],\n    \"disk_total_space\": [\n        \"float disk_total_space(string path)\",\n        \"Get total disk space for filesystem that path is on\"\n    ],\n    \"display_disabled_function\": [\n        \"void display_disabled_function(void)\",\n        \"Dummy function which displays an error when a disabled function is called.\"\n    ],\n    \"dl\": [\n        \"int dl(string extension_filename)\",\n        \"Load a PHP extension at runtime\"\n    ],\n    \"dngettext\": [\n        \"string dngettext (string domain, string msgid1, string msgid2, int count)\",\n        \"Plural version of dgettext()\"\n    ],\n    \"dns_check_record\": [\n        \"bool dns_check_record(string host [, string type])\",\n        \"Check DNS records corresponding to a given Internet host name or IP address\"\n    ],\n    \"dns_get_mx\": [\n        \"bool dns_get_mx(string hostname, array mxhosts [, array weight])\",\n        \"Get MX records corresponding to a given Internet host name\"\n    ],\n    \"dns_get_record\": [\n        \"array|false dns_get_record(string hostname [, int type[, array authns, array addtl]])\",\n        \"Get any Resource Record corresponding to a given Internet host name\"\n    ],\n    \"dom_attr_is_id\": [\n        \"boolean dom_attr_is_id();\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Attr-isId Since: DOM Level 3\"\n    ],\n    \"dom_characterdata_append_data\": [\n        \"void dom_characterdata_append_data(string arg);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-32791A2F Since:\"\n    ],\n    \"dom_characterdata_delete_data\": [\n        \"void dom_characterdata_delete_data(int offset, int count);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-7C603781 Since:\"\n    ],\n    \"dom_characterdata_insert_data\": [\n        \"void dom_characterdata_insert_data(int offset, string arg);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-3EDB695F Since:\"\n    ],\n    \"dom_characterdata_replace_data\": [\n        \"void dom_characterdata_replace_data(int offset, int count, string arg);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-E5CBA7FB Since:\"\n    ],\n    \"dom_characterdata_substring_data\": [\n        \"string dom_characterdata_substring_data(int offset, int count);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-6531BCCF Since:\"\n    ],\n    \"dom_document_adopt_node\": [\n        \"DOMNode dom_document_adopt_node(DOMNode source);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-Document3-adoptNode Since: DOM Level 3\"\n    ],\n    \"dom_document_create_attribute\": [\n        \"DOMAttr dom_document_create_attribute(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-1084891198 Since:\"\n    ],\n    \"dom_document_create_attribute_ns\": [\n        \"DOMAttr dom_document_create_attribute_ns(string namespaceURI, string qualifiedName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-DocCrAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_document_create_cdatasection\": [\n        \"DOMCdataSection dom_document_create_cdatasection(string data);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-D26C0AF8 Since:\"\n    ],\n    \"dom_document_create_comment\": [\n        \"DOMComment dom_document_create_comment(string data);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-1334481328 Since:\"\n    ],\n    \"dom_document_create_document_fragment\": [\n        \"DOMDocumentFragment dom_document_create_document_fragment();\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-35CB04B5 Since:\"\n    ],\n    \"dom_document_create_element\": [\n        \"DOMElement dom_document_create_element(string tagName [, string value]);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-2141741547 Since:\"\n    ],\n    \"dom_document_create_element_ns\": [\n        \"DOMElement dom_document_create_element_ns(string namespaceURI, string qualifiedName [,string value]);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-DocCrElNS Since: DOM Level 2\"\n    ],\n    \"dom_document_create_entity_reference\": [\n        \"DOMEntityReference dom_document_create_entity_reference(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-392B75AE Since:\"\n    ],\n    \"dom_document_create_processing_instruction\": [\n        \"DOMProcessingInstruction dom_document_create_processing_instruction(string target, string data);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-135944439 Since:\"\n    ],\n    \"dom_document_create_text_node\": [\n        \"DOMText dom_document_create_text_node(string data);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-1975348127 Since:\"\n    ],\n    \"dom_document_get_element_by_id\": [\n        \"DOMElement dom_document_get_element_by_id(string elementId);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-getElBId Since: DOM Level 2\"\n    ],\n    \"dom_document_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_document_get_elements_by_tag_name(string tagname);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-A6C9094 Since:\"\n    ],\n    \"dom_document_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_document_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-getElBTNNS Since: DOM Level 2\"\n    ],\n    \"dom_document_import_node\": [\n        \"DOMNode dom_document_import_node(DOMNode importedNode, boolean deep);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Core-Document-importNode Since: DOM Level 2\"\n    ],\n    \"dom_document_load\": [\n        \"DOMNode dom_document_load(string source [, int options]);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/DOM-Level-3-LS\\/load-save.html#LS-DocumentLS-load Since: DOM Level 3\"\n    ],\n    \"dom_document_load_html\": [\n        \"DOMNode dom_document_load_html(string source);\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_load_html_file\": [\n        \"DOMNode dom_document_load_html_file(string source);\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_loadxml\": [\n        \"DOMNode dom_document_loadxml(string source [, int options]);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/DOM-Level-3-LS\\/load-save.html#LS-DocumentLS-loadXML Since: DOM Level 3\"\n    ],\n    \"dom_document_normalize_document\": [\n        \"void dom_document_normalize_document();\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-Document3-normalizeDocument Since: DOM Level 3\"\n    ],\n    \"dom_document_relaxNG_validate_file\": [\n        \"boolean dom_document_relaxNG_validate_file(string filename); *\\/\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_file) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } \\/* }}} end dom_document_relaxNG_validate_file\"\n    ],\n    \"dom_document_relaxNG_validate_xml\": [\n        \"boolean dom_document_relaxNG_validate_xml(string source); *\\/\",\n        \"PHP_FUNCTION(dom_document_relaxNG_validate_xml) {  _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } \\/* }}} end dom_document_relaxNG_validate_xml\"\n    ],\n    \"dom_document_rename_node\": [\n        \"DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3\"\n    ],\n    \"dom_document_save\": [\n        \"int dom_document_save(string file);\",\n        \"Convenience method to save to file\"\n    ],\n    \"dom_document_save_html\": [\n        \"string dom_document_save_html();\",\n        \"Convenience method to output as html\"\n    ],\n    \"dom_document_save_html_file\": [\n        \"int dom_document_save_html_file(string file);\",\n        \"Convenience method to save to file as html\"\n    ],\n    \"dom_document_savexml\": [\n        \"string dom_document_savexml([node n]);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/DOM-Level-3-LS\\/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3\"\n    ],\n    \"dom_document_schema_validate\": [\n        \"boolean dom_document_schema_validate(string source); *\\/\",\n        \"PHP_FUNCTION(dom_document_schema_validate_xml) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } \\/* }}} end dom_document_schema_validate\"\n    ],\n    \"dom_document_schema_validate_file\": [\n        \"boolean dom_document_schema_validate_file(string filename); *\\/\",\n        \"PHP_FUNCTION(dom_document_schema_validate_file) {  _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } \\/* }}} end dom_document_schema_validate_file\"\n    ],\n    \"dom_document_validate\": [\n        \"boolean dom_document_validate();\",\n        \"Since: DOM extended\"\n    ],\n    \"dom_document_xinclude\": [\n        \"int dom_document_xinclude([int options])\",\n        \"Substitutues xincludes in a DomDocument\"\n    ],\n    \"dom_domconfiguration_can_set_parameter\": [\n        \"boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#DOMConfiguration-canSetParameter Since:\"\n    ],\n    \"dom_domconfiguration_get_parameter\": [\n        \"domdomuserdata dom_domconfiguration_get_parameter(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#DOMConfiguration-getParameter Since:\"\n    ],\n    \"dom_domconfiguration_set_parameter\": [\n        \"dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#DOMConfiguration-property Since:\"\n    ],\n    \"dom_domerrorhandler_handle_error\": [\n        \"dom_boolean dom_domerrorhandler_handle_error(domerror error);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:\"\n    ],\n    \"dom_domimplementation_create_document\": [\n        \"DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_create_document_type\": [\n        \"DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2\"\n    ],\n    \"dom_domimplementation_get_feature\": [\n        \"DOMNode dom_domimplementation_get_feature(string feature, string version);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_domimplementation_has_feature\": [\n        \"boolean dom_domimplementation_has_feature(string feature, string version);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#ID-5CED94D7 Since:\"\n    ],\n    \"dom_domimplementationlist_item\": [\n        \"domdomimplementation dom_domimplementationlist_item(int index);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#DOMImplementationList-item Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementation\": [\n        \"domdomimplementation dom_domimplementationsource_get_domimplementation(string features);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#ID-getDOMImpl Since:\"\n    ],\n    \"dom_domimplementationsource_get_domimplementations\": [\n        \"domimplementationlist dom_domimplementationsource_get_domimplementations(string features);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#ID-getDOMImpls Since:\"\n    ],\n    \"dom_domstringlist_item\": [\n        \"domstring dom_domstringlist_item(int index);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#DOMStringList-item Since:\"\n    ],\n    \"dom_element_get_attribute\": [\n        \"string dom_element_get_attribute(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-666EE0F9 Since:\"\n    ],\n    \"dom_element_get_attribute_node\": [\n        \"DOMAttr dom_element_get_attribute_node(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-217A91B8 Since:\"\n    ],\n    \"dom_element_get_attribute_node_ns\": [\n        \"DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_attribute_ns\": [\n        \"string dom_element_get_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_get_elements_by_tag_name\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-1938918D Since:\"\n    ],\n    \"dom_element_get_elements_by_tag_name_ns\": [\n        \"DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute\": [\n        \"boolean dom_element_has_attribute(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2\"\n    ],\n    \"dom_element_has_attribute_ns\": [\n        \"boolean dom_element_has_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_remove_attribute\": [\n        \"void dom_element_remove_attribute(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-6D6AC0F9 Since:\"\n    ],\n    \"dom_element_remove_attribute_node\": [\n        \"DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-D589198 Since:\"\n    ],\n    \"dom_element_remove_attribute_ns\": [\n        \"void dom_element_remove_attribute_ns(string namespaceURI, string localName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute\": [\n        \"void dom_element_set_attribute(string name, string value);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-F68F082 Since:\"\n    ],\n    \"dom_element_set_attribute_node\": [\n        \"DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-887236154 Since:\"\n    ],\n    \"dom_element_set_attribute_node_ns\": [\n        \"DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_attribute_ns\": [\n        \"void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2\"\n    ],\n    \"dom_element_set_id_attribute\": [\n        \"void dom_element_set_id_attribute(string name, boolean isId);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_node\": [\n        \"void dom_element_set_id_attribute_node(attr idAttr, boolean isId);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3\"\n    ],\n    \"dom_element_set_id_attribute_ns\": [\n        \"void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3\"\n    ],\n    \"dom_import_simplexml\": [\n        \"somNode dom_import_simplexml(sxeobject node)\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"dom_namednodemap_get_named_item\": [\n        \"DOMNode dom_namednodemap_get_named_item(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-1074577549 Since:\"\n    ],\n    \"dom_namednodemap_get_named_item_ns\": [\n        \"DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_item\": [\n        \"DOMNode dom_namednodemap_item(int index);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-349467F9 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item\": [\n        \"DOMNode dom_namednodemap_remove_named_item(string name);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-D58B193 Since:\"\n    ],\n    \"dom_namednodemap_remove_named_item_ns\": [\n        \"DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namednodemap_set_named_item\": [\n        \"DOMNode dom_namednodemap_set_named_item(DOMNode arg);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-1025163788 Since:\"\n    ],\n    \"dom_namednodemap_set_named_item_ns\": [\n        \"DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2\"\n    ],\n    \"dom_namelist_get_name\": [\n        \"string dom_namelist_get_name(int index);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#NameList-getName Since:\"\n    ],\n    \"dom_namelist_get_namespace_uri\": [\n        \"string dom_namelist_get_namespace_uri(int index);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#NameList-getNamespaceURI Since:\"\n    ],\n    \"dom_node_append_child\": [\n        \"DomNode dom_node_append_child(DomNode newChild);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-184E7107 Since:\"\n    ],\n    \"dom_node_clone_node\": [\n        \"DomNode dom_node_clone_node(boolean deep);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-3A0ED0A4 Since:\"\n    ],\n    \"dom_node_compare_document_position\": [\n        \"short dom_node_compare_document_position(DomNode other);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3\"\n    ],\n    \"dom_node_get_feature\": [\n        \"DomNode dom_node_get_feature(string feature, string version);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Node3-getFeature Since: DOM Level 3\"\n    ],\n    \"dom_node_get_user_data\": [\n        \"mixed dom_node_get_user_data(string key);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Node3-getUserData Since: DOM Level 3\"\n    ],\n    \"dom_node_has_attributes\": [\n        \"boolean dom_node_has_attributes();\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2\"\n    ],\n    \"dom_node_has_child_nodes\": [\n        \"boolean dom_node_has_child_nodes();\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-810594187 Since:\"\n    ],\n    \"dom_node_insert_before\": [\n        \"domnode dom_node_insert_before(DomNode newChild, DomNode refChild);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-952280727 Since:\"\n    ],\n    \"dom_node_is_default_namespace\": [\n        \"boolean dom_node_is_default_namespace(string namespaceURI);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/DOM-Level-3-Core\\/core.html#Node3-isDefaultNamespace Since: DOM Level 3\"\n    ],\n    \"dom_node_is_equal_node\": [\n        \"boolean dom_node_is_equal_node(DomNode arg);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_same_node\": [\n        \"boolean dom_node_is_same_node(DomNode other);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3\"\n    ],\n    \"dom_node_is_supported\": [\n        \"boolean dom_node_is_supported(string feature, string version);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2\"\n    ],\n    \"dom_node_lookup_namespace_uri\": [\n        \"string dom_node_lookup_namespace_uri(string prefix);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/DOM-Level-3-Core\\/core.html#Node3-lookupNamespaceURI Since: DOM Level 3\"\n    ],\n    \"dom_node_lookup_prefix\": [\n        \"string dom_node_lookup_prefix(string namespaceURI);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3\"\n    ],\n    \"dom_node_normalize\": [\n        \"void dom_node_normalize();\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-normalize Since:\"\n    ],\n    \"dom_node_remove_child\": [\n        \"DomNode dom_node_remove_child(DomNode oldChild);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-1734834066 Since:\"\n    ],\n    \"dom_node_replace_child\": [\n        \"DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-785887307 Since:\"\n    ],\n    \"dom_node_set_user_data\": [\n        \"mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#Node3-setUserData Since: DOM Level 3\"\n    ],\n    \"dom_nodelist_item\": [\n        \"DOMNode dom_nodelist_item(int index);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#ID-844377136 Since:\"\n    ],\n    \"dom_string_extend_find_offset16\": [\n        \"int dom_string_extend_find_offset16(int offset32);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:\"\n    ],\n    \"dom_string_extend_find_offset32\": [\n        \"int dom_string_extend_find_offset32(int offset16);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:\"\n    ],\n    \"dom_text_is_whitespace_in_element_content\": [\n        \"boolean dom_text_is_whitespace_in_element_content();\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3\"\n    ],\n    \"dom_text_replace_whole_text\": [\n        \"DOMText dom_text_replace_whole_text(string content);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3\"\n    ],\n    \"dom_text_split_text\": [\n        \"DOMText dom_text_split_text(int offset);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#core-ID-38853C1D Since:\"\n    ],\n    \"dom_userdatahandler_handle\": [\n        \"dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html#ID-handleUserDataEvent Since:\"\n    ],\n    \"dom_xpath_evaluate\": [\n        \"mixed dom_xpath_evaluate(string expr [,DOMNode context]); *\\/\",\n        \"PHP_FUNCTION(dom_xpath_evaluate) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } \\/* }}} end dom_xpath_evaluate\"\n    ],\n    \"dom_xpath_query\": [\n        \"DOMNodeList dom_xpath_query(string expr [,DOMNode context]); *\\/\",\n        \"PHP_FUNCTION(dom_xpath_query) {  php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } \\/* }}} end dom_xpath_query\"\n    ],\n    \"dom_xpath_register_ns\": [\n        \"boolean dom_xpath_register_ns(string prefix, string uri); *\\/\",\n        \"PHP_FUNCTION(dom_xpath_register_ns) {  zval *id;  xmlXPathContextPtr ctxp;  int prefix_len, ns_uri_len;  dom_xpath_object *intern;  unsigned char *prefix, *ns_uri;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Oss\\\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) {   return;  }   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   ctxp = (xmlXPathContextPtr) intern->ptr;  if (ctxp == NULL) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid XPath Context\\\");   RETURN_FALSE;  }   if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) {   RETURN_FALSE  }  RETURN_TRUE; } \\/* }}}\"\n    ],\n    \"dom_xpath_register_php_functions\": [\n        \"void dom_xpath_register_php_functions() *\\/\",\n        \"PHP_FUNCTION(dom_xpath_register_php_functions) {  zval *id;  dom_xpath_object *intern;  zval *array_value, **entry, *new_string;  int  name_len = 0;  char *name;   DOM_GET_THIS(id);    if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"a\\\",  &array_value) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));    while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {    SEPARATE_ZVAL(entry);    convert_to_string_ex(entry);     MAKE_STD_ZVAL(new_string);    ZVAL_LONG(new_string,1);       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);    zend_hash_move_forward(Z_ARRVAL_P(array_value));   }   intern->registerPhpFunctions = 2;   RETURN_TRUE;   } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\",  &name, &name_len) == SUCCESS) {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);      MAKE_STD_ZVAL(new_string);   ZVAL_LONG(new_string,1);   zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);   intern->registerPhpFunctions = 2;     } else {   intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);   intern->registerPhpFunctions = 1;  }   } \\/* }}} end dom_xpath_register_php_functions\"\n    ],\n    \"each\": [\n        \"array each(array arr)\",\n        \"Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element\"\n    ],\n    \"easter_date\": [\n        \"int easter_date([int year])\",\n        \"Return the timestamp of midnight on Easter of a given year (defaults to current year)\"\n    ],\n    \"easter_days\": [\n        \"int easter_days([int year, [int method]])\",\n        \"Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)\"\n    ],\n    \"echo\": [\n        \"void echo(string arg1 [, string ...])\",\n        \"Output one or more strings\"\n    ],\n    \"empty\": [\n        \"bool empty( mixed var )\",\n        \"Determine whether a variable is empty\"\n    ],\n    \"enchant_broker_describe\": [\n        \"array enchant_broker_describe(resource broker)\",\n        \"Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()\"\n    ],\n    \"enchant_broker_dict_exists\": [\n        \"bool enchant_broker_dict_exists(resource broker, string tag)\",\n        \"Wether a dictionary exists or not. Using non-empty tag\"\n    ],\n    \"enchant_broker_free\": [\n        \"boolean enchant_broker_free(resource broker)\",\n        \"Destroys the broker object and its dictionnaries\"\n    ],\n    \"enchant_broker_free_dict\": [\n        \"resource enchant_broker_free_dict(resource dict)\",\n        \"Free the dictionary resource\"\n    ],\n    \"enchant_broker_get_dict_path\": [\n        \"string enchant_broker_get_dict_path(resource broker, int dict_type)\",\n        \"Get the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_get_error\": [\n        \"string enchant_broker_get_error(resource broker)\",\n        \"Returns the last error of the broker\"\n    ],\n    \"enchant_broker_init\": [\n        \"resource enchant_broker_init()\",\n        \"create a new broker object capable of requesting\"\n    ],\n    \"enchant_broker_list_dicts\": [\n        \"string enchant_broker_list_dicts(resource broker)\",\n        \"Lists the dictionaries available for the given broker\"\n    ],\n    \"enchant_broker_request_dict\": [\n        \"resource enchant_broker_request_dict(resource broker, string tag)\",\n        \"create a new dictionary using tag, the non-empty language tag you wish to request  a dictionary for (\\\"en_US\\\", \\\"de_DE\\\", ...)\"\n    ],\n    \"enchant_broker_request_pwl_dict\": [\n        \"resource enchant_broker_request_pwl_dict(resource broker, string filename)\",\n        \"creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call.\"\n    ],\n    \"enchant_broker_set_dict_path\": [\n        \"bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)\",\n        \"Set the directory path for a given backend, works with ispell and myspell\"\n    ],\n    \"enchant_broker_set_ordering\": [\n        \"bool enchant_broker_set_ordering(resource broker, string tag, string ordering)\",\n        \"Declares a preference of dictionaries to use for the language  described\\/referred to by 'tag'. The ordering is a comma delimited  list of provider names. As a special exception, the \\\"*\\\" tag can  be used as a language tag to declare a default ordering for any  language that does not explictly declare an ordering.\"\n    ],\n    \"enchant_dict_add_to_personal\": [\n        \"void enchant_dict_add_to_personal(resource dict, string word)\",\n        \"add 'word' to personal word list\"\n    ],\n    \"enchant_dict_add_to_session\": [\n        \"void enchant_dict_add_to_session(resource dict, string word)\",\n        \"add 'word' to this spell-checking session\"\n    ],\n    \"enchant_dict_check\": [\n        \"bool enchant_dict_check(resource dict, string word)\",\n        \"If the word is correctly spelled return true, otherwise return false\"\n    ],\n    \"enchant_dict_describe\": [\n        \"array enchant_dict_describe(resource dict)\",\n        \"Describes an individual dictionary 'dict'\"\n    ],\n    \"enchant_dict_get_error\": [\n        \"string enchant_dict_get_error(resource dict)\",\n        \"Returns the last error of the current spelling-session\"\n    ],\n    \"enchant_dict_is_in_session\": [\n        \"bool enchant_dict_is_in_session(resource dict, string word)\",\n        \"whether or not 'word' exists in this spelling-session\"\n    ],\n    \"enchant_dict_quick_check\": [\n        \"bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])\",\n        \"If the word is correctly spelled return true, otherwise return false, if suggestions variable     is provided, fill it with spelling alternatives.\"\n    ],\n    \"enchant_dict_store_replacement\": [\n        \"void enchant_dict_store_replacement(resource dict, string mis, string cor)\",\n        \"add a correction for 'mis' using 'cor'.  Notes that you replaced @mis with @cor, so it's possibly more likely  that future occurrences of @mis will be replaced with @cor. So it might  bump @cor up in the suggestion list.\"\n    ],\n    \"enchant_dict_suggest\": [\n        \"array enchant_dict_suggest(resource dict, string word)\",\n        \"Will return a list of values if any of those pre-conditions are not met.\"\n    ],\n    \"end\": [\n        \"mixed end(array array_arg)\",\n        \"Advances array argument's internal pointer to the last element and return it\"\n    ],\n    \"ereg\": [\n        \"int ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match\"\n    ],\n    \"ereg_replace\": [\n        \"string ereg_replace(string pattern, string replacement, string string)\",\n        \"Replace regular expression\"\n    ],\n    \"eregi\": [\n        \"int eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match\"\n    ],\n    \"eregi_replace\": [\n        \"string eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression\"\n    ],\n    \"error_get_last\": [\n        \"array error_get_last()\",\n        \"Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet.\"\n    ],\n    \"error_log\": [\n        \"bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])\",\n        \"Send an error message somewhere\"\n    ],\n    \"error_reporting\": [\n        \"int error_reporting([int new_error_level])\",\n        \"Return the current error_reporting level, and if an argument was passed - change to the new level\"\n    ],\n    \"escapeshellarg\": [\n        \"string escapeshellarg(string arg)\",\n        \"Quote and escape an argument for use in a shell command\"\n    ],\n    \"escapeshellcmd\": [\n        \"string escapeshellcmd(string command)\",\n        \"Escape shell metacharacters\"\n    ],\n    \"exec\": [\n        \"string exec(string command [, array &output [, int &return_value]])\",\n        \"Execute an external program\"\n    ],\n    \"exif_imagetype\": [\n        \"int exif_imagetype(string imagefile)\",\n        \"Get the type of an image\"\n    ],\n    \"exif_read_data\": [\n        \"array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])\",\n        \"Reads header data from the JPEG\\/TIFF image filename and optionally reads the internal thumbnails\"\n    ],\n    \"exif_tagname\": [\n        \"string exif_tagname(index)\",\n        \"Get headername for index or false if not defined\"\n    ],\n    \"exif_thumbnail\": [\n        \"string exif_thumbnail(string filename [, &width, &height [, &imagetype]])\",\n        \"Reads the embedded thumbnail\"\n    ],\n    \"exit\": [\n        \"void exit([mixed status])\",\n        \"Output a message and terminate the current script\"\n    ],\n    \"exp\": [\n        \"float exp(float number)\",\n        \"Returns e raised to the power of the number\"\n    ],\n    \"explode\": [\n        \"array explode(string separator, string str [, int limit])\",\n        \"Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned.\"\n    ],\n    \"expm1\": [\n        \"float expm1(float number)\",\n        \"Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"extension_loaded\": [\n        \"bool extension_loaded(string extension_name)\",\n        \"Returns true if the named extension is loaded\"\n    ],\n    \"extract\": [\n        \"int extract(array var_array [, int extract_type [, string prefix]])\",\n        \"Imports variables into symbol table from an array\"\n    ],\n    \"ezmlm_hash\": [\n        \"int ezmlm_hash(string addr)\",\n        \"Calculate EZMLM list hash value.\"\n    ],\n    \"fclose\": [\n        \"bool fclose(resource fp)\",\n        \"Close an open file pointer\"\n    ],\n    \"feof\": [\n        \"bool feof(resource fp)\",\n        \"Test for end-of-file on a file pointer\"\n    ],\n    \"fflush\": [\n        \"bool fflush(resource fp)\",\n        \"Flushes output\"\n    ],\n    \"fgetc\": [\n        \"string fgetc(resource fp)\",\n        \"Get a character from file pointer\"\n    ],\n    \"fgetcsv\": [\n        \"array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])\",\n        \"Get line from file pointer and parse for CSV fields\"\n    ],\n    \"fgets\": [\n        \"string fgets(resource fp[, int length])\",\n        \"Get a line from file pointer\"\n    ],\n    \"fgetss\": [\n        \"string fgetss(resource fp [, int length [, string allowable_tags]])\",\n        \"Get a line from file pointer and strip HTML tags\"\n    ],\n    \"file\": [\n        \"array file(string filename [, int flags[, resource context]])\",\n        \"Read entire file into an array\"\n    ],\n    \"file_exists\": [\n        \"bool file_exists(string filename)\",\n        \"Returns true if filename exists\"\n    ],\n    \"file_get_contents\": [\n        \"string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])\",\n        \"Read the entire file into a string\"\n    ],\n    \"file_put_contents\": [\n        \"int file_put_contents(string file, mixed data [, int flags [, resource context]])\",\n        \"Write\\/Create a file with contents data and return the number of bytes written\"\n    ],\n    \"fileatime\": [\n        \"int fileatime(string filename)\",\n        \"Get last access time of file\"\n    ],\n    \"filectime\": [\n        \"int filectime(string filename)\",\n        \"Get inode modification time of file\"\n    ],\n    \"filegroup\": [\n        \"int filegroup(string filename)\",\n        \"Get file group\"\n    ],\n    \"fileinode\": [\n        \"int fileinode(string filename)\",\n        \"Get file inode\"\n    ],\n    \"filemtime\": [\n        \"int filemtime(string filename)\",\n        \"Get last modification time of file\"\n    ],\n    \"fileowner\": [\n        \"int fileowner(string filename)\",\n        \"Get file owner\"\n    ],\n    \"fileperms\": [\n        \"int fileperms(string filename)\",\n        \"Get file permissions\"\n    ],\n    \"filesize\": [\n        \"int filesize(string filename)\",\n        \"Get file size\"\n    ],\n    \"filetype\": [\n        \"string filetype(string filename)\",\n        \"Get file type\"\n    ],\n    \"filter_has_var\": [\n        \"mixed filter_has_var(constant type, string variable_name)\",\n        \"* Returns true if the variable with the name 'name' exists in source.\"\n    ],\n    \"filter_input\": [\n        \"mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])\",\n        \"* Returns the filtered variable 'name'* from source `type`.\"\n    ],\n    \"filter_input_array\": [\n        \"mixed filter_input_array(constant type, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"filter_var\": [\n        \"mixed filter_var(mixed variable [, long filter [, mixed options]])\",\n        \"* Returns the filtered version of the vriable.\"\n    ],\n    \"filter_var_array\": [\n        \"mixed filter_var_array(array data, [, mixed options]])\",\n        \"* Returns an array with all arguments defined in 'definition'.\"\n    ],\n    \"finfo_buffer\": [\n        \"string finfo_buffer(resource finfo, char *string [, int options [, resource context]])\",\n        \"Return infromation about a string buffer.\"\n    ],\n    \"finfo_close\": [\n        \"resource finfo_close(resource finfo)\",\n        \"Close fileinfo resource.\"\n    ],\n    \"finfo_file\": [\n        \"string finfo_file(resource finfo, char *file_name [, int options [, resource context]])\",\n        \"Return information about a file.\"\n    ],\n    \"finfo_open\": [\n        \"resource finfo_open([int options [, string arg]])\",\n        \"Create a new fileinfo resource.\"\n    ],\n    \"finfo_set_flags\": [\n        \"bool finfo_set_flags(resource finfo, int options)\",\n        \"Set libmagic configuration options.\"\n    ],\n    \"floatval\": [\n        \"float floatval(mixed var)\",\n        \"Get the float value of a variable\"\n    ],\n    \"flock\": [\n        \"bool flock(resource fp, int operation [, int &wouldblock])\",\n        \"Portable file locking\"\n    ],\n    \"floor\": [\n        \"float floor(float number)\",\n        \"Returns the next lowest integer value from the number\"\n    ],\n    \"flush\": [\n        \"void flush(void)\",\n        \"Flush the output buffer\"\n    ],\n    \"fmod\": [\n        \"float fmod(float x, float y)\",\n        \"Returns the remainder of dividing x by y as a float\"\n    ],\n    \"fnmatch\": [\n        \"bool fnmatch(string pattern, string filename [, int flags])\",\n        \"Match filename against pattern\"\n    ],\n    \"fopen\": [\n        \"resource fopen(string filename, string mode [, bool use_include_path [, resource context]])\",\n        \"Open a file or a URL and return a file pointer\"\n    ],\n    \"forward_static_call\": [\n        \"mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])\",\n        \"Call a user function which is the first parameter\"\n    ],\n    \"fpassthru\": [\n        \"int fpassthru(resource fp)\",\n        \"Output all remaining data from a file pointer\"\n    ],\n    \"fprintf\": [\n        \"int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"fputcsv\": [\n        \"int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])\",\n        \"Format line as CSV and write to file pointer\"\n    ],\n    \"fread\": [\n        \"string fread(resource fp, int length)\",\n        \"Binary-safe file read\"\n    ],\n    \"frenchtojd\": [\n        \"int frenchtojd(int month, int day, int year)\",\n        \"Converts a french republic calendar date to julian day count\"\n    ],\n    \"fscanf\": [\n        \"mixed fscanf(resource stream, string format [, string ...])\",\n        \"Implements a mostly ANSI compatible fscanf()\"\n    ],\n    \"fseek\": [\n        \"int fseek(resource fp, int offset [, int whence])\",\n        \"Seek on a file pointer\"\n    ],\n    \"fsockopen\": [\n        \"resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open Internet or Unix domain socket connection\"\n    ],\n    \"fstat\": [\n        \"array fstat(resource fp)\",\n        \"Stat() on a filehandle\"\n    ],\n    \"ftell\": [\n        \"int ftell(resource fp)\",\n        \"Get file pointer's read\\/write position\"\n    ],\n    \"ftok\": [\n        \"int ftok(string pathname, string proj)\",\n        \"Convert a pathname and a project identifier to a System V IPC key\"\n    ],\n    \"ftp_alloc\": [\n        \"bool ftp_alloc(resource stream, int size[, &response])\",\n        \"Attempt to allocate space on the remote FTP server\"\n    ],\n    \"ftp_cdup\": [\n        \"bool ftp_cdup(resource stream)\",\n        \"Changes to the parent directory\"\n    ],\n    \"ftp_chdir\": [\n        \"bool ftp_chdir(resource stream, string directory)\",\n        \"Changes directories\"\n    ],\n    \"ftp_chmod\": [\n        \"int ftp_chmod(resource stream, int mode, string filename)\",\n        \"Sets permissions on a file\"\n    ],\n    \"ftp_close\": [\n        \"bool ftp_close(resource stream)\",\n        \"Closes the FTP stream\"\n    ],\n    \"ftp_connect\": [\n        \"resource ftp_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP stream\"\n    ],\n    \"ftp_delete\": [\n        \"bool ftp_delete(resource stream, string file)\",\n        \"Deletes a file\"\n    ],\n    \"ftp_exec\": [\n        \"bool ftp_exec(resource stream, string command)\",\n        \"Requests execution of a program on the FTP server\"\n    ],\n    \"ftp_fget\": [\n        \"bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server and writes it to an open file\"\n    ],\n    \"ftp_fput\": [\n        \"bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server\"\n    ],\n    \"ftp_get\": [\n        \"bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server and writes it to a local file\"\n    ],\n    \"ftp_get_option\": [\n        \"mixed ftp_get_option(resource stream, int option)\",\n        \"Gets an FTP option\"\n    ],\n    \"ftp_login\": [\n        \"bool ftp_login(resource stream, string username, string password)\",\n        \"Logs into the FTP server\"\n    ],\n    \"ftp_mdtm\": [\n        \"int ftp_mdtm(resource stream, string filename)\",\n        \"Returns the last modification time of the file, or -1 on error\"\n    ],\n    \"ftp_mkdir\": [\n        \"string ftp_mkdir(resource stream, string directory)\",\n        \"Creates a directory and returns the absolute path for the new directory or false on error\"\n    ],\n    \"ftp_nb_continue\": [\n        \"int ftp_nb_continue(resource stream)\",\n        \"Continues retrieving\\/sending a file nbronously\"\n    ],\n    \"ftp_nb_fget\": [\n        \"int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])\",\n        \"Retrieves a file from the FTP server asynchronly and writes it to an open file\"\n    ],\n    \"ftp_nb_fput\": [\n        \"int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])\",\n        \"Stores a file from an open file to the FTP server nbronly\"\n    ],\n    \"ftp_nb_get\": [\n        \"int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])\",\n        \"Retrieves a file from the FTP server nbhronly and writes it to a local file\"\n    ],\n    \"ftp_nb_put\": [\n        \"int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_nlist\": [\n        \"array ftp_nlist(resource stream, string directory)\",\n        \"Returns an array of filenames in the given directory\"\n    ],\n    \"ftp_pasv\": [\n        \"bool ftp_pasv(resource stream, bool pasv)\",\n        \"Turns passive mode on or off\"\n    ],\n    \"ftp_put\": [\n        \"bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])\",\n        \"Stores a file on the FTP server\"\n    ],\n    \"ftp_pwd\": [\n        \"string ftp_pwd(resource stream)\",\n        \"Returns the present working directory\"\n    ],\n    \"ftp_raw\": [\n        \"array ftp_raw(resource stream, string command)\",\n        \"Sends a literal command to the FTP server\"\n    ],\n    \"ftp_rawlist\": [\n        \"array ftp_rawlist(resource stream, string directory [, bool recursive])\",\n        \"Returns a detailed listing of a directory as an array of output lines\"\n    ],\n    \"ftp_rename\": [\n        \"bool ftp_rename(resource stream, string src, string dest)\",\n        \"Renames the given file to a new path\"\n    ],\n    \"ftp_rmdir\": [\n        \"bool ftp_rmdir(resource stream, string directory)\",\n        \"Removes a directory\"\n    ],\n    \"ftp_set_option\": [\n        \"bool ftp_set_option(resource stream, int option, mixed value)\",\n        \"Sets an FTP option\"\n    ],\n    \"ftp_site\": [\n        \"bool ftp_site(resource stream, string cmd)\",\n        \"Sends a SITE command to the server\"\n    ],\n    \"ftp_size\": [\n        \"int ftp_size(resource stream, string filename)\",\n        \"Returns the size of the file, or -1 on error\"\n    ],\n    \"ftp_ssl_connect\": [\n        \"resource ftp_ssl_connect(string host [, int port [, int timeout]])\",\n        \"Opens a FTP-SSL stream\"\n    ],\n    \"ftp_systype\": [\n        \"string ftp_systype(resource stream)\",\n        \"Returns the system type identifier\"\n    ],\n    \"ftruncate\": [\n        \"bool ftruncate(resource fp, int size)\",\n        \"Truncate file to 'size' length\"\n    ],\n    \"func_get_arg\": [\n        \"mixed func_get_arg(int arg_num)\",\n        \"Get the $arg_num'th argument that was passed to the function\"\n    ],\n    \"func_get_args\": [\n        \"array func_get_args()\",\n        \"Get an array of the arguments that were passed to the function\"\n    ],\n    \"func_num_args\": [\n        \"int func_num_args(void)\",\n        \"Get the number of arguments that were passed to the function\"\n    ],\n    \"function_exists\": [\n        \"bool function_exists(string function_name)\",\n        \"Checks if the function exists\"\n    ],\n    \"fwrite\": [\n        \"int fwrite(resource fp, string str [, int length])\",\n        \"Binary-safe file write\"\n    ],\n    \"gc_collect_cycles\": [\n        \"int gc_collect_cycles(void)\",\n        \"Forces collection of any existing garbage cycles.    Returns number of freed zvals\"\n    ],\n    \"gc_disable\": [\n        \"void gc_disable(void)\",\n        \"Deactivates the circular reference collector\"\n    ],\n    \"gc_enable\": [\n        \"void gc_enable(void)\",\n        \"Activates the circular reference collector\"\n    ],\n    \"gc_enabled\": [\n        \"void gc_enabled(void)\",\n        \"Returns status of the circular reference collector\"\n    ],\n    \"gd_info\": [\n        \"array gd_info()\",\n        \"\"\n    ],\n    \"getKeywords\": [\n        \"static array getKeywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)  * }}}\"\n    ],\n    \"get_browser\": [\n        \"mixed get_browser([string browser_name [, bool return_array]])\",\n        \"Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array.\"\n    ],\n    \"get_called_class\": [\n        \"string get_called_class()\",\n        \"Retrieves the \\\"Late Static Binding\\\" class name\"\n    ],\n    \"get_cfg_var\": [\n        \"mixed get_cfg_var(string option_name)\",\n        \"Get the value of a PHP configuration option\"\n    ],\n    \"get_class\": [\n        \"string get_class([object object])\",\n        \"Retrieves the class name\"\n    ],\n    \"get_class_methods\": [\n        \"array get_class_methods(mixed class)\",\n        \"Returns an array of method names for class or class instance.\"\n    ],\n    \"get_class_vars\": [\n        \"array get_class_vars(string class_name)\",\n        \"Returns an array of default properties of the class.\"\n    ],\n    \"get_current_user\": [\n        \"string get_current_user(void)\",\n        \"Get the name of the owner of the current PHP script\"\n    ],\n    \"get_declared_classes\": [\n        \"array get_declared_classes()\",\n        \"Returns an array of all declared classes.\"\n    ],\n    \"get_declared_interfaces\": [\n        \"array get_declared_interfaces()\",\n        \"Returns an array of all declared interfaces.\"\n    ],\n    \"get_defined_constants\": [\n        \"array get_defined_constants([bool categorize])\",\n        \"Return an array containing the names and values of all defined constants\"\n    ],\n    \"get_defined_functions\": [\n        \"array get_defined_functions(void)\",\n        \"Returns an array of all defined functions\"\n    ],\n    \"get_defined_vars\": [\n        \"array get_defined_vars(void)\",\n        \"Returns an associative array of names and values of all currently defined variable names (variables in the current scope)\"\n    ],\n    \"get_display_language\": [\n        \"static string get_display_language($locale[, $in_locale = null])\",\n        \"* gets the language for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_name\": [\n        \"static string get_display_name($locale[, $in_locale = null])\",\n        \"* gets the name for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_region\": [\n        \"static string get_display_region($locale, $in_locale = null)\",\n        \"* gets the region for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_display_script\": [\n        \"static string get_display_script($locale, $in_locale = null)\",\n        \"* gets the script for the $locale in $in_locale or default_locale\"\n    ],\n    \"get_extension_funcs\": [\n        \"array get_extension_funcs(string extension_name)\",\n        \"Returns an array with the names of functions belonging to the named extension\"\n    ],\n    \"get_headers\": [\n        \"array get_headers(string url[, int format])\",\n        \"fetches all the headers sent by the server in response to a HTTP request\"\n    ],\n    \"get_html_translation_table\": [\n        \"array get_html_translation_table([int table [, int quote_style]])\",\n        \"Returns the internal translation table used by htmlspecialchars and htmlentities\"\n    ],\n    \"get_include_path\": [\n        \"string get_include_path()\",\n        \"Get the current include_path configuration option\"\n    ],\n    \"get_included_files\": [\n        \"array get_included_files(void)\",\n        \"Returns an array with the file names that were include_once()'d\"\n    ],\n    \"get_loaded_extensions\": [\n        \"array get_loaded_extensions([bool zend_extensions])\",\n        \"Return an array containing names of loaded extensions\"\n    ],\n    \"get_magic_quotes_gpc\": [\n        \"int get_magic_quotes_gpc(void)\",\n        \"Get the current active configuration setting of magic_quotes_gpc\"\n    ],\n    \"get_magic_quotes_runtime\": [\n        \"int get_magic_quotes_runtime(void)\",\n        \"Get the current active configuration setting of magic_quotes_runtime\"\n    ],\n    \"get_meta_tags\": [\n        \"array get_meta_tags(string filename [, bool use_include_path])\",\n        \"Extracts all meta tag content attributes from a file and returns an array\"\n    ],\n    \"get_object_vars\": [\n        \"array get_object_vars(object obj)\",\n        \"Returns an array of object properties\"\n    ],\n    \"get_parent_class\": [\n        \"string get_parent_class([mixed object])\",\n        \"Retrieves the parent class name for object or class or current scope.\"\n    ],\n    \"get_resource_type\": [\n        \"string get_resource_type(resource res)\",\n        \"Get the resource type name for a given resource\"\n    ],\n    \"getallheaders\": [\n        \"array getallheaders(void)\",\n        \"\"\n    ],\n    \"getcwd\": [\n        \"mixed getcwd(void)\",\n        \"Gets the current directory\"\n    ],\n    \"getdate\": [\n        \"array getdate([int timestamp])\",\n        \"Get date\\/time information\"\n    ],\n    \"getenv\": [\n        \"string getenv(string varname)\",\n        \"Get the value of an environment variable\"\n    ],\n    \"gethostbyaddr\": [\n        \"string gethostbyaddr(string ip_address)\",\n        \"Get the Internet host name corresponding to a given IP address\"\n    ],\n    \"gethostbyname\": [\n        \"string gethostbyname(string hostname)\",\n        \"Get the IP address corresponding to a given Internet host name\"\n    ],\n    \"gethostbynamel\": [\n        \"array gethostbynamel(string hostname)\",\n        \"Return a list of IP addresses that a given hostname resolves to.\"\n    ],\n    \"gethostname\": [\n        \"string gethostname()\",\n        \"Get the host name of the current machine\"\n    ],\n    \"getimagesize\": [\n        \"array getimagesize(string imagefile [, array info])\",\n        \"Get the size of an image as 4-element array\"\n    ],\n    \"getlastmod\": [\n        \"int getlastmod(void)\",\n        \"Get time of last page modification\"\n    ],\n    \"getmygid\": [\n        \"int getmygid(void)\",\n        \"Get PHP script owner's GID\"\n    ],\n    \"getmyinode\": [\n        \"int getmyinode(void)\",\n        \"Get the inode of the current script being parsed\"\n    ],\n    \"getmypid\": [\n        \"int getmypid(void)\",\n        \"Get current process ID\"\n    ],\n    \"getmyuid\": [\n        \"int getmyuid(void)\",\n        \"Get PHP script owner's UID\"\n    ],\n    \"getopt\": [\n        \"array getopt(string options [, array longopts])\",\n        \"Get options from the command line argument list\"\n    ],\n    \"getprotobyname\": [\n        \"int getprotobyname(string name)\",\n        \"Returns protocol number associated with name as per \\/etc\\/protocols\"\n    ],\n    \"getprotobynumber\": [\n        \"string getprotobynumber(int proto)\",\n        \"Returns protocol name associated with protocol number proto\"\n    ],\n    \"getrandmax\": [\n        \"int getrandmax(void)\",\n        \"Returns the maximum value a random number can have\"\n    ],\n    \"getrusage\": [\n        \"array getrusage([int who])\",\n        \"Returns an array of usage statistics\"\n    ],\n    \"getservbyname\": [\n        \"int getservbyname(string service, string protocol)\",\n        \"Returns port associated with service. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"getservbyport\": [\n        \"string getservbyport(int port, string protocol)\",\n        \"Returns service name associated with port. Protocol must be \\\"tcp\\\" or \\\"udp\\\"\"\n    ],\n    \"gettext\": [\n        \"string gettext(string msgid)\",\n        \"Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist\"\n    ],\n    \"gettimeofday\": [\n        \"array gettimeofday([bool get_as_float])\",\n        \"Returns the current time as array\"\n    ],\n    \"gettype\": [\n        \"string gettype(mixed var)\",\n        \"Returns the type of the variable\"\n    ],\n    \"glob\": [\n        \"array glob(string pattern [, int flags])\",\n        \"Find pathnames matching a pattern\"\n    ],\n    \"gmdate\": [\n        \"string gmdate(string format [, long timestamp])\",\n        \"Format a GMT date\\/time\"\n    ],\n    \"gmmktime\": [\n        \"int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a GMT date\"\n    ],\n    \"gmp_abs\": [\n        \"resource gmp_abs(resource a)\",\n        \"Calculates absolute value\"\n    ],\n    \"gmp_add\": [\n        \"resource gmp_add(resource a, resource b)\",\n        \"Add a and b\"\n    ],\n    \"gmp_and\": [\n        \"resource gmp_and(resource a, resource b)\",\n        \"Calculates logical AND of a and b\"\n    ],\n    \"gmp_clrbit\": [\n        \"void gmp_clrbit(resource &a, int index)\",\n        \"Clears bit in a\"\n    ],\n    \"gmp_cmp\": [\n        \"int gmp_cmp(resource a, resource b)\",\n        \"Compares two numbers\"\n    ],\n    \"gmp_com\": [\n        \"resource gmp_com(resource a)\",\n        \"Calculates one's complement of a\"\n    ],\n    \"gmp_div_q\": [\n        \"resource gmp_div_q(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient only\"\n    ],\n    \"gmp_div_qr\": [\n        \"array gmp_div_qr(resource a, resource b [, int round])\",\n        \"Divide a by b, returns quotient and reminder\"\n    ],\n    \"gmp_div_r\": [\n        \"resource gmp_div_r(resource a, resource b [, int round])\",\n        \"Divide a by b, returns reminder only\"\n    ],\n    \"gmp_divexact\": [\n        \"resource gmp_divexact(resource a, resource b)\",\n        \"Divide a by b using exact division algorithm\"\n    ],\n    \"gmp_fact\": [\n        \"resource gmp_fact(int a)\",\n        \"Calculates factorial function\"\n    ],\n    \"gmp_gcd\": [\n        \"resource gmp_gcd(resource a, resource b)\",\n        \"Computes greatest common denominator (gcd) of a and b\"\n    ],\n    \"gmp_gcdext\": [\n        \"array gmp_gcdext(resource a, resource b)\",\n        \"Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)\"\n    ],\n    \"gmp_hamdist\": [\n        \"int gmp_hamdist(resource a, resource b)\",\n        \"Calculates hamming distance between a and b\"\n    ],\n    \"gmp_init\": [\n        \"resource gmp_init(mixed number [, int base])\",\n        \"Initializes GMP number\"\n    ],\n    \"gmp_intval\": [\n        \"int gmp_intval(resource gmpnumber)\",\n        \"Gets signed long value of GMP number\"\n    ],\n    \"gmp_invert\": [\n        \"resource gmp_invert(resource a, resource b)\",\n        \"Computes the inverse of a modulo b\"\n    ],\n    \"gmp_jacobi\": [\n        \"int gmp_jacobi(resource a, resource b)\",\n        \"Computes Jacobi symbol\"\n    ],\n    \"gmp_legendre\": [\n        \"int gmp_legendre(resource a, resource b)\",\n        \"Computes Legendre symbol\"\n    ],\n    \"gmp_mod\": [\n        \"resource gmp_mod(resource a, resource b)\",\n        \"Computes a modulo b\"\n    ],\n    \"gmp_mul\": [\n        \"resource gmp_mul(resource a, resource b)\",\n        \"Multiply a and b\"\n    ],\n    \"gmp_neg\": [\n        \"resource gmp_neg(resource a)\",\n        \"Negates a number\"\n    ],\n    \"gmp_nextprime\": [\n        \"resource gmp_nextprime(resource a)\",\n        \"Finds next prime of a\"\n    ],\n    \"gmp_or\": [\n        \"resource gmp_or(resource a, resource b)\",\n        \"Calculates logical OR of a and b\"\n    ],\n    \"gmp_perfect_square\": [\n        \"bool gmp_perfect_square(resource a)\",\n        \"Checks if a is an exact square\"\n    ],\n    \"gmp_popcount\": [\n        \"int gmp_popcount(resource a)\",\n        \"Calculates the population count of a\"\n    ],\n    \"gmp_pow\": [\n        \"resource gmp_pow(resource base, int exp)\",\n        \"Raise base to power exp\"\n    ],\n    \"gmp_powm\": [\n        \"resource gmp_powm(resource base, resource exp, resource mod)\",\n        \"Raise base to power exp and take result modulo mod\"\n    ],\n    \"gmp_prob_prime\": [\n        \"int gmp_prob_prime(resource a[, int reps])\",\n        \"Checks if a is \\\"probably prime\\\"\"\n    ],\n    \"gmp_random\": [\n        \"resource gmp_random([int limiter])\",\n        \"Gets random number\"\n    ],\n    \"gmp_scan0\": [\n        \"int gmp_scan0(resource a, int start)\",\n        \"Finds first zero bit\"\n    ],\n    \"gmp_scan1\": [\n        \"int gmp_scan1(resource a, int start)\",\n        \"Finds first non-zero bit\"\n    ],\n    \"gmp_setbit\": [\n        \"void gmp_setbit(resource &a, int index[, bool set_clear])\",\n        \"Sets or clear bit in a\"\n    ],\n    \"gmp_sign\": [\n        \"int gmp_sign(resource a)\",\n        \"Gets the sign of the number\"\n    ],\n    \"gmp_sqrt\": [\n        \"resource gmp_sqrt(resource a)\",\n        \"Takes integer part of square root of a\"\n    ],\n    \"gmp_sqrtrem\": [\n        \"array gmp_sqrtrem(resource a)\",\n        \"Square root with remainder\"\n    ],\n    \"gmp_strval\": [\n        \"string gmp_strval(resource gmpnumber [, int base])\",\n        \"Gets string representation of GMP number\"\n    ],\n    \"gmp_sub\": [\n        \"resource gmp_sub(resource a, resource b)\",\n        \"Subtract b from a\"\n    ],\n    \"gmp_testbit\": [\n        \"bool gmp_testbit(resource a, int index)\",\n        \"Tests if bit is set in a\"\n    ],\n    \"gmp_xor\": [\n        \"resource gmp_xor(resource a, resource b)\",\n        \"Calculates logical exclusive OR of a and b\"\n    ],\n    \"gmstrftime\": [\n        \"string gmstrftime(string format [, int timestamp])\",\n        \"Format a GMT\\/UCT time\\/date according to locale settings\"\n    ],\n    \"grapheme_extract\": [\n        \"string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])\",\n        \"Function to extract a sequence of default grapheme clusters\"\n    ],\n    \"grapheme_stripos\": [\n        \"int grapheme_stripos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another, ignoring case differences\"\n    ],\n    \"grapheme_stristr\": [\n        \"string grapheme_stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_strlen\": [\n        \"int grapheme_strlen(string str)\",\n        \"Get number of graphemes in a string\"\n    ],\n    \"grapheme_strpos\": [\n        \"int grapheme_strpos(string haystack, string needle [, int offset ])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"grapheme_strripos\": [\n        \"int grapheme_strripos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another, ignoring case\"\n    ],\n    \"grapheme_strrpos\": [\n        \"int grapheme_strrpos(string haystack, string needle [, int offset])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"grapheme_strstr\": [\n        \"string grapheme_strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"grapheme_substr\": [\n        \"string grapheme_substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"gregoriantojd\": [\n        \"int gregoriantojd(int month, int day, int year)\",\n        \"Converts a gregorian calendar date to julian day count\"\n    ],\n    \"gzcompress\": [\n        \"string gzcompress(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzdeflate\": [\n        \"string gzdeflate(string data [, int level])\",\n        \"Gzip-compress a string\"\n    ],\n    \"gzencode\": [\n        \"string gzencode(string data [, int level [, int encoding_mode]])\",\n        \"GZ encode a string\"\n    ],\n    \"gzfile\": [\n        \"array gzfile(string filename [, int use_include_path])\",\n        \"Read und uncompress entire .gz-file into an array\"\n    ],\n    \"gzinflate\": [\n        \"string gzinflate(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"gzopen\": [\n        \"resource gzopen(string filename, string mode [, int use_include_path])\",\n        \"Open a .gz-file and return a .gz-file pointer\"\n    ],\n    \"gzuncompress\": [\n        \"string gzuncompress(string data [, int length])\",\n        \"Unzip a gzip-compressed string\"\n    ],\n    \"hash\": [\n        \"string hash(string algo, string data[, bool raw_output = false])\",\n        \"Generate a hash of a given input string Returns lowercase hexits by default\"\n    ],\n    \"hash_algos\": [\n        \"array hash_algos(void)\",\n        \"Return a list of registered hashing algorithms\"\n    ],\n    \"hash_copy\": [\n        \"resource hash_copy(resource context)\",\n        \"Copy hash resource\"\n    ],\n    \"hash_file\": [\n        \"string hash_file(string algo, string filename[, bool raw_output = false])\",\n        \"Generate a hash of a given file Returns lowercase hexits by default\"\n    ],\n    \"hash_final\": [\n        \"string hash_final(resource context[, bool raw_output=false])\",\n        \"Output resulting digest\"\n    ],\n    \"hash_hmac\": [\n        \"string hash_hmac(string algo, string data, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_hmac_file\": [\n        \"string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])\",\n        \"Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default\"\n    ],\n    \"hash_init\": [\n        \"resource hash_init(string algo[, int options, string key])\",\n        \"Initialize a hashing context\"\n    ],\n    \"hash_update\": [\n        \"bool hash_update(resource context, string data)\",\n        \"Pump data into the hashing algorithm\"\n    ],\n    \"hash_update_file\": [\n        \"bool hash_update_file(resource context, string filename[, resource context])\",\n        \"Pump data into the hashing algorithm from a file\"\n    ],\n    \"hash_update_stream\": [\n        \"int hash_update_stream(resource context, resource handle[, integer length])\",\n        \"Pump data into the hashing algorithm from an open stream\"\n    ],\n    \"header\": [\n        \"void header(string header [, bool replace, [int http_response_code]])\",\n        \"Sends a raw HTTP header\"\n    ],\n    \"header_remove\": [\n        \"void header_remove([string name])\",\n        \"Removes an HTTP header previously set using header()\"\n    ],\n    \"headers_list\": [\n        \"array headers_list(void)\",\n        \"Return list of headers to be sent \\/ already sent\"\n    ],\n    \"headers_sent\": [\n        \"bool headers_sent([string &$file [, int &$line]])\",\n        \"Returns true if headers have already been sent, false otherwise\"\n    ],\n    \"hebrev\": [\n        \"string hebrev(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text\"\n    ],\n    \"hebrevc\": [\n        \"string hebrevc(string str [, int max_chars_per_line])\",\n        \"Converts logical Hebrew text to visual text with newline conversion\"\n    ],\n    \"hexdec\": [\n        \"int hexdec(string hexadecimal_number)\",\n        \"Returns the decimal equivalent of the hexadecimal number\"\n    ],\n    \"highlight_file\": [\n        \"bool highlight_file(string file_name [, bool return] )\",\n        \"Syntax highlight a source file\"\n    ],\n    \"highlight_string\": [\n        \"bool highlight_string(string string [, bool return] )\",\n        \"Syntax highlight a string or optionally return it\"\n    ],\n    \"html_entity_decode\": [\n        \"string html_entity_decode(string string [, int quote_style][, string charset])\",\n        \"Convert all HTML entities to their applicable characters\"\n    ],\n    \"htmlentities\": [\n        \"string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert all applicable characters to HTML entities\"\n    ],\n    \"htmlspecialchars\": [\n        \"string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])\",\n        \"Convert special characters to HTML entities\"\n    ],\n    \"htmlspecialchars_decode\": [\n        \"string htmlspecialchars_decode(string string [, int quote_style])\",\n        \"Convert special HTML entities back to characters\"\n    ],\n    \"http_build_query\": [\n        \"string http_build_query(mixed formdata [, string prefix [, string arg_separator]])\",\n        \"Generates a form-encoded query string from an associative array or object.\"\n    ],\n    \"hypot\": [\n        \"float hypot(float num1, float num2)\",\n        \"Returns sqrt(num1*num1 + num2*num2)\"\n    ],\n    \"ibase_add_user\": [\n        \"bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Add a user to security database\"\n    ],\n    \"ibase_affected_rows\": [\n        \"int ibase_affected_rows( [ resource link_identifier ] )\",\n        \"Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement\"\n    ],\n    \"ibase_backup\": [\n        \"mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])\",\n        \"Initiates a backup task in the service manager and returns immediately\"\n    ],\n    \"ibase_blob_add\": [\n        \"bool ibase_blob_add(resource blob_handle, string data)\",\n        \"Add data into created blob\"\n    ],\n    \"ibase_blob_cancel\": [\n        \"bool ibase_blob_cancel(resource blob_handle)\",\n        \"Cancel creating blob\"\n    ],\n    \"ibase_blob_close\": [\n        \"string ibase_blob_close(resource blob_handle)\",\n        \"Close blob\"\n    ],\n    \"ibase_blob_create\": [\n        \"resource ibase_blob_create([resource link_identifier])\",\n        \"Create blob for adding data\"\n    ],\n    \"ibase_blob_echo\": [\n        \"bool ibase_blob_echo([ resource link_identifier, ] string blob_id)\",\n        \"Output blob contents to browser\"\n    ],\n    \"ibase_blob_get\": [\n        \"string ibase_blob_get(resource blob_handle, int len)\",\n        \"Get len bytes data from open blob\"\n    ],\n    \"ibase_blob_import\": [\n        \"string ibase_blob_import([ resource link_identifier, ] resource file)\",\n        \"Create blob, copy file in it, and close it\"\n    ],\n    \"ibase_blob_info\": [\n        \"array ibase_blob_info([ resource link_identifier, ] string blob_id)\",\n        \"Return blob length and other useful info\"\n    ],\n    \"ibase_blob_open\": [\n        \"resource ibase_blob_open([ resource link_identifier, ] string blob_id)\",\n        \"Open blob for retrieving data parts\"\n    ],\n    \"ibase_close\": [\n        \"bool ibase_close([resource link_identifier])\",\n        \"Close an InterBase connection\"\n    ],\n    \"ibase_commit\": [\n        \"bool ibase_commit( resource link_identifier )\",\n        \"Commit transaction\"\n    ],\n    \"ibase_commit_ret\": [\n        \"bool ibase_commit_ret( resource link_identifier )\",\n        \"Commit transaction and retain the transaction context\"\n    ],\n    \"ibase_connect\": [\n        \"resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a connection to an InterBase database\"\n    ],\n    \"ibase_db_info\": [\n        \"string ibase_db_info(resource service_handle, string db, int action [, int argument])\",\n        \"Request statistics about a database\"\n    ],\n    \"ibase_delete_user\": [\n        \"bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Delete a user from security database\"\n    ],\n    \"ibase_drop_db\": [\n        \"bool ibase_drop_db([resource link_identifier])\",\n        \"Drop an InterBase database\"\n    ],\n    \"ibase_errcode\": [\n        \"int ibase_errcode(void)\",\n        \"Return error code\"\n    ],\n    \"ibase_errmsg\": [\n        \"string ibase_errmsg(void)\",\n        \"Return error message\"\n    ],\n    \"ibase_execute\": [\n        \"mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a previously prepared query\"\n    ],\n    \"ibase_fetch_assoc\": [\n        \"array ibase_fetch_assoc(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_fetch_object\": [\n        \"object ibase_fetch_object(resource result [, int fetch_flags])\",\n        \"Fetch a object from the results of a query\"\n    ],\n    \"ibase_fetch_row\": [\n        \"array ibase_fetch_row(resource result [, int fetch_flags])\",\n        \"Fetch a row  from the results of a query\"\n    ],\n    \"ibase_field_info\": [\n        \"array ibase_field_info(resource query_result, int field_number)\",\n        \"Get information about a field\"\n    ],\n    \"ibase_free_event_handler\": [\n        \"bool ibase_free_event_handler(resource event)\",\n        \"Frees the event handler set by ibase_set_event_handler()\"\n    ],\n    \"ibase_free_query\": [\n        \"bool ibase_free_query(resource query)\",\n        \"Free memory used by a query\"\n    ],\n    \"ibase_free_result\": [\n        \"bool ibase_free_result(resource result)\",\n        \"Free the memory used by a result\"\n    ],\n    \"ibase_gen_id\": [\n        \"int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])\",\n        \"Increments the named generator and returns its new value\"\n    ],\n    \"ibase_maintain_db\": [\n        \"bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])\",\n        \"Execute a maintenance command on the database server\"\n    ],\n    \"ibase_modify_user\": [\n        \"bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])\",\n        \"Modify a user in security database\"\n    ],\n    \"ibase_name_result\": [\n        \"bool ibase_name_result(resource result, string name)\",\n        \"Assign a name to a result for use with ... WHERE CURRENT OF <name> statements\"\n    ],\n    \"ibase_num_fields\": [\n        \"int ibase_num_fields(resource query_result)\",\n        \"Get the number of fields in result\"\n    ],\n    \"ibase_num_params\": [\n        \"int ibase_num_params(resource query)\",\n        \"Get the number of params in a prepared query\"\n    ],\n    \"ibase_num_rows\": [\n        \"int ibase_num_rows( resource result_identifier )\",\n        \"Return the number of rows that are available in a result\"\n    ],\n    \"ibase_param_info\": [\n        \"array ibase_param_info(resource query, int field_number)\",\n        \"Get information about a parameter\"\n    ],\n    \"ibase_pconnect\": [\n        \"resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])\",\n        \"Open a persistent connection to an InterBase database\"\n    ],\n    \"ibase_prepare\": [\n        \"resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])\",\n        \"Prepare a query for later execution\"\n    ],\n    \"ibase_query\": [\n        \"mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])\",\n        \"Execute a query\"\n    ],\n    \"ibase_restore\": [\n        \"mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])\",\n        \"Initiates a restore task in the service manager and returns immediately\"\n    ],\n    \"ibase_rollback\": [\n        \"bool ibase_rollback( resource link_identifier )\",\n        \"Rollback transaction\"\n    ],\n    \"ibase_rollback_ret\": [\n        \"bool ibase_rollback_ret( resource link_identifier )\",\n        \"Rollback transaction and retain the transaction context\"\n    ],\n    \"ibase_server_info\": [\n        \"string ibase_server_info(resource service_handle, int action)\",\n        \"Request information about a database server\"\n    ],\n    \"ibase_service_attach\": [\n        \"resource ibase_service_attach(string host, string dba_username, string dba_password)\",\n        \"Connect to the service manager\"\n    ],\n    \"ibase_service_detach\": [\n        \"bool ibase_service_detach(resource service_handle)\",\n        \"Disconnect from the service manager\"\n    ],\n    \"ibase_set_event_handler\": [\n        \"resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])\",\n        \"Register the callback for handling each of the named events\"\n    ],\n    \"ibase_trans\": [\n        \"resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])\",\n        \"Start a transaction over one or several databases\"\n    ],\n    \"ibase_wait_event\": [\n        \"string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])\",\n        \"Waits for any one of the passed Interbase events to be posted by the database, and returns its name\"\n    ],\n    \"iconv\": [\n        \"string iconv(string in_charset, string out_charset, string str)\",\n        \"Returns str converted to the out_charset character set\"\n    ],\n    \"iconv_get_encoding\": [\n        \"mixed iconv_get_encoding([string type])\",\n        \"Get internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_mime_decode\": [\n        \"string iconv_mime_decode(string encoded_string [, int mode, string charset])\",\n        \"Decodes a mime header field\"\n    ],\n    \"iconv_mime_decode_headers\": [\n        \"array iconv_mime_decode_headers(string headers [, int mode, string charset])\",\n        \"Decodes multiple mime header fields\"\n    ],\n    \"iconv_mime_encode\": [\n        \"string iconv_mime_encode(string field_name, string field_value [, array preference])\",\n        \"Composes a mime header field with field_name and field_value in a specified scheme\"\n    ],\n    \"iconv_set_encoding\": [\n        \"bool iconv_set_encoding(string type, string charset)\",\n        \"Sets internal encoding and output encoding for ob_iconv_handler()\"\n    ],\n    \"iconv_strlen\": [\n        \"int iconv_strlen(string str [, string charset])\",\n        \"Returns the character count of str\"\n    ],\n    \"iconv_strpos\": [\n        \"int iconv_strpos(string haystack, string needle [, int offset [, string charset]])\",\n        \"Finds position of first occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_strrpos\": [\n        \"int iconv_strrpos(string haystack, string needle [, string charset])\",\n        \"Finds position of last occurrence of needle within part of haystack beginning with offset\"\n    ],\n    \"iconv_substr\": [\n        \"string iconv_substr(string str, int offset, [int length, string charset])\",\n        \"Returns specified part of a string\"\n    ],\n    \"idate\": [\n        \"int idate(string format [, int timestamp])\",\n        \"Format a local time\\/date as integer\"\n    ],\n    \"idn_to_ascii\": [\n        \"int idn_to_ascii(string domain[, int options])\",\n        \"Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC\"\n    ],\n    \"idn_to_utf8\": [\n        \"int idn_to_utf8(string domain[, int options])\",\n        \"Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC\"\n    ],\n    \"ignore_user_abort\": [\n        \"int ignore_user_abort([string value])\",\n        \"Set whether we want to ignore a user abort event or not\"\n    ],\n    \"image2wbmp\": [\n        \"bool image2wbmp(resource im [, string filename [, int threshold]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"image_type_to_extension\": [\n        \"string image_type_to_extension(int imagetype [, bool include_dot])\",\n        \"Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"image_type_to_mime_type\": [\n        \"string image_type_to_mime_type(int imagetype)\",\n        \"Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype\"\n    ],\n    \"imagealphablending\": [\n        \"bool imagealphablending(resource im, bool on)\",\n        \"Turn alpha blending mode on or off for the given image\"\n    ],\n    \"imageantialias\": [\n        \"bool imageantialias(resource im, bool on)\",\n        \"Should antialiased functions used or not\"\n    ],\n    \"imagearc\": [\n        \"bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)\",\n        \"Draw a partial ellipse\"\n    ],\n    \"imagechar\": [\n        \"bool imagechar(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character\"\n    ],\n    \"imagecharup\": [\n        \"bool imagecharup(resource im, int font, int x, int y, string c, int col)\",\n        \"Draw a character rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagecolorallocate\": [\n        \"int imagecolorallocate(resource im, int red, int green, int blue)\",\n        \"Allocate a color for an image\"\n    ],\n    \"imagecolorallocatealpha\": [\n        \"int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Allocate a color with an alpha level.  Works for true color and palette based images\"\n    ],\n    \"imagecolorat\": [\n        \"int imagecolorat(resource im, int x, int y)\",\n        \"Get the index of the color of a pixel\"\n    ],\n    \"imagecolorclosest\": [\n        \"int imagecolorclosest(resource im, int red, int green, int blue)\",\n        \"Get the index of the closest color to the specified color\"\n    ],\n    \"imagecolorclosestalpha\": [\n        \"int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find the closest matching colour with alpha transparency\"\n    ],\n    \"imagecolorclosesthwb\": [\n        \"int imagecolorclosesthwb(resource im, int red, int green, int blue)\",\n        \"Get the index of the color which has the hue, white and blackness nearest to the given color\"\n    ],\n    \"imagecolordeallocate\": [\n        \"bool imagecolordeallocate(resource im, int index)\",\n        \"De-allocate a color for an image\"\n    ],\n    \"imagecolorexact\": [\n        \"int imagecolorexact(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color\"\n    ],\n    \"imagecolorexactalpha\": [\n        \"int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Find exact match for colour with transparency\"\n    ],\n    \"imagecolormatch\": [\n        \"bool imagecolormatch(resource im1, resource im2)\",\n        \"Makes the colors of the palette version of an image more closely match the true color version\"\n    ],\n    \"imagecolorresolve\": [\n        \"int imagecolorresolve(resource im, int red, int green, int blue)\",\n        \"Get the index of the specified color or its closest possible alternative\"\n    ],\n    \"imagecolorresolvealpha\": [\n        \"int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)\",\n        \"Resolve\\/Allocate a colour with an alpha level.  Works for true colour and palette based images\"\n    ],\n    \"imagecolorset\": [\n        \"void imagecolorset(resource im, int col, int red, int green, int blue)\",\n        \"Set the color for the specified palette index\"\n    ],\n    \"imagecolorsforindex\": [\n        \"array imagecolorsforindex(resource im, int col)\",\n        \"Get the colors for an index\"\n    ],\n    \"imagecolorstotal\": [\n        \"int imagecolorstotal(resource im)\",\n        \"Find out the number of colors in an image's palette\"\n    ],\n    \"imagecolortransparent\": [\n        \"int imagecolortransparent(resource im [, int col])\",\n        \"Define a color as transparent\"\n    ],\n    \"imageconvolution\": [\n        \"resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)\",\n        \"Apply a 3x3 convolution matrix, using coefficient div and offset\"\n    ],\n    \"imagecopy\": [\n        \"bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)\",\n        \"Copy part of an image\"\n    ],\n    \"imagecopymerge\": [\n        \"bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopymergegray\": [\n        \"bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)\",\n        \"Merge one part of an image with another\"\n    ],\n    \"imagecopyresampled\": [\n        \"bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image using resampling to help ensure clarity\"\n    ],\n    \"imagecopyresized\": [\n        \"bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)\",\n        \"Copy and resize part of an image\"\n    ],\n    \"imagecreate\": [\n        \"resource imagecreate(int x_size, int y_size)\",\n        \"Create a new image\"\n    ],\n    \"imagecreatefromgd\": [\n        \"resource imagecreatefromgd(string filename)\",\n        \"Create a new image from GD file or URL\"\n    ],\n    \"imagecreatefromgd2\": [\n        \"resource imagecreatefromgd2(string filename)\",\n        \"Create a new image from GD2 file or URL\"\n    ],\n    \"imagecreatefromgd2part\": [\n        \"resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)\",\n        \"Create a new image from a given part of GD2 file or URL\"\n    ],\n    \"imagecreatefromgif\": [\n        \"resource imagecreatefromgif(string filename)\",\n        \"Create a new image from GIF file or URL\"\n    ],\n    \"imagecreatefromjpeg\": [\n        \"resource imagecreatefromjpeg(string filename)\",\n        \"Create a new image from JPEG file or URL\"\n    ],\n    \"imagecreatefrompng\": [\n        \"resource imagecreatefrompng(string filename)\",\n        \"Create a new image from PNG file or URL\"\n    ],\n    \"imagecreatefromstring\": [\n        \"resource imagecreatefromstring(string image)\",\n        \"Create a new image from the image stream in the string\"\n    ],\n    \"imagecreatefromwbmp\": [\n        \"resource imagecreatefromwbmp(string filename)\",\n        \"Create a new image from WBMP file or URL\"\n    ],\n    \"imagecreatefromxbm\": [\n        \"resource imagecreatefromxbm(string filename)\",\n        \"Create a new image from XBM file or URL\"\n    ],\n    \"imagecreatefromxpm\": [\n        \"resource imagecreatefromxpm(string filename)\",\n        \"Create a new image from XPM file or URL\"\n    ],\n    \"imagecreatetruecolor\": [\n        \"resource imagecreatetruecolor(int x_size, int y_size)\",\n        \"Create a new true color image\"\n    ],\n    \"imagedashedline\": [\n        \"bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a dashed line\"\n    ],\n    \"imagedestroy\": [\n        \"bool imagedestroy(resource im)\",\n        \"Destroy an image\"\n    ],\n    \"imageellipse\": [\n        \"bool imageellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefill\": [\n        \"bool imagefill(resource im, int x, int y, int col)\",\n        \"Flood fill\"\n    ],\n    \"imagefilledarc\": [\n        \"bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)\",\n        \"Draw a filled partial ellipse\"\n    ],\n    \"imagefilledellipse\": [\n        \"bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)\",\n        \"Draw an ellipse\"\n    ],\n    \"imagefilledpolygon\": [\n        \"bool imagefilledpolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a filled polygon\"\n    ],\n    \"imagefilledrectangle\": [\n        \"bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a filled rectangle\"\n    ],\n    \"imagefilltoborder\": [\n        \"bool imagefilltoborder(resource im, int x, int y, int border, int col)\",\n        \"Flood fill to specific color\"\n    ],\n    \"imagefilter\": [\n        \"bool imagefilter(resource src_im, int filtertype, [args] )\",\n        \"Applies Filter an image using a custom angle\"\n    ],\n    \"imagefontheight\": [\n        \"int imagefontheight(int font)\",\n        \"Get font height\"\n    ],\n    \"imagefontwidth\": [\n        \"int imagefontwidth(int font)\",\n        \"Get font width\"\n    ],\n    \"imageftbbox\": [\n        \"array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])\",\n        \"Give the bounding box of a text using fonts via freetype2\"\n    ],\n    \"imagefttext\": [\n        \"array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])\",\n        \"Write text to the image using fonts via freetype2\"\n    ],\n    \"imagegammacorrect\": [\n        \"bool imagegammacorrect(resource im, float inputgamma, float outputgamma)\",\n        \"Apply a gamma correction to a GD image\"\n    ],\n    \"imagegd\": [\n        \"bool imagegd(resource im [, string filename])\",\n        \"Output GD image to browser or file\"\n    ],\n    \"imagegd2\": [\n        \"bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])\",\n        \"Output GD2 image to browser or file\"\n    ],\n    \"imagegif\": [\n        \"bool imagegif(resource im [, string filename])\",\n        \"Output GIF image to browser or file\"\n    ],\n    \"imagegrabscreen\": [\n        \"resource imagegrabscreen()\",\n        \"Grab a screenshot\"\n    ],\n    \"imagegrabwindow\": [\n        \"resource imagegrabwindow(int window_handle [, int client_area])\",\n        \"Grab a window or its client area using a windows handle (HWND property in COM instance)\"\n    ],\n    \"imageinterlace\": [\n        \"int imageinterlace(resource im [, int interlace])\",\n        \"Enable or disable interlace\"\n    ],\n    \"imageistruecolor\": [\n        \"bool imageistruecolor(resource im)\",\n        \"return true if the image uses truecolor\"\n    ],\n    \"imagejpeg\": [\n        \"bool imagejpeg(resource im [, string filename [, int quality]])\",\n        \"Output JPEG image to browser or file\"\n    ],\n    \"imagelayereffect\": [\n        \"bool imagelayereffect(resource im, int effect)\",\n        \"Set the alpha blending flag to use the bundled libgd layering effects\"\n    ],\n    \"imageline\": [\n        \"bool imageline(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a line\"\n    ],\n    \"imageloadfont\": [\n        \"int imageloadfont(string filename)\",\n        \"Load a new font\"\n    ],\n    \"imagepalettecopy\": [\n        \"void imagepalettecopy(resource dst, resource src)\",\n        \"Copy the palette from the src image onto the dst image\"\n    ],\n    \"imagepng\": [\n        \"bool imagepng(resource im [, string filename])\",\n        \"Output PNG image to browser or file\"\n    ],\n    \"imagepolygon\": [\n        \"bool imagepolygon(resource im, array point, int num_points, int col)\",\n        \"Draw a polygon\"\n    ],\n    \"imagepsbbox\": [\n        \"array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])\",\n        \"Return the bounding box needed by a string if rasterized\"\n    ],\n    \"imagepscopyfont\": [\n        \"int imagepscopyfont(int font_index)\",\n        \"Make a copy of a font for purposes like extending or reenconding\"\n    ],\n    \"imagepsencodefont\": [\n        \"bool imagepsencodefont(resource font_index, string filename)\",\n        \"To change a fonts character encoding vector\"\n    ],\n    \"imagepsextendfont\": [\n        \"bool imagepsextendfont(resource font_index, float extend)\",\n        \"Extend or or condense (if extend < 1) a font\"\n    ],\n    \"imagepsfreefont\": [\n        \"bool imagepsfreefont(resource font_index)\",\n        \"Free memory used by a font\"\n    ],\n    \"imagepsloadfont\": [\n        \"resource imagepsloadfont(string pathname)\",\n        \"Load a new font from specified file\"\n    ],\n    \"imagepsslantfont\": [\n        \"bool imagepsslantfont(resource font_index, float slant)\",\n        \"Slant a font\"\n    ],\n    \"imagepstext\": [\n        \"array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])\",\n        \"Rasterize a string over an image\"\n    ],\n    \"imagerectangle\": [\n        \"bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)\",\n        \"Draw a rectangle\"\n    ],\n    \"imagerotate\": [\n        \"resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])\",\n        \"Rotate an image using a custom angle\"\n    ],\n    \"imagesavealpha\": [\n        \"bool imagesavealpha(resource im, bool on)\",\n        \"Include alpha channel to a saved image\"\n    ],\n    \"imagesetbrush\": [\n        \"bool imagesetbrush(resource image, resource brush)\",\n        \"Set the brush image to $brush when filling $image with the \\\"IMG_COLOR_BRUSHED\\\" color\"\n    ],\n    \"imagesetpixel\": [\n        \"bool imagesetpixel(resource im, int x, int y, int col)\",\n        \"Set a single pixel\"\n    ],\n    \"imagesetstyle\": [\n        \"bool imagesetstyle(resource im, array styles)\",\n        \"Set the line drawing styles for use with imageline and IMG_COLOR_STYLED.\"\n    ],\n    \"imagesetthickness\": [\n        \"bool imagesetthickness(resource im, int thickness)\",\n        \"Set line thickness for drawing lines, ellipses, rectangles, polygons etc.\"\n    ],\n    \"imagesettile\": [\n        \"bool imagesettile(resource image, resource tile)\",\n        \"Set the tile image to $tile when filling $image with the \\\"IMG_COLOR_TILED\\\" color\"\n    ],\n    \"imagestring\": [\n        \"bool imagestring(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string horizontally\"\n    ],\n    \"imagestringup\": [\n        \"bool imagestringup(resource im, int font, int x, int y, string str, int col)\",\n        \"Draw a string vertically - rotated 90 degrees counter-clockwise\"\n    ],\n    \"imagesx\": [\n        \"int imagesx(resource im)\",\n        \"Get image width\"\n    ],\n    \"imagesy\": [\n        \"int imagesy(resource im)\",\n        \"Get image height\"\n    ],\n    \"imagetruecolortopalette\": [\n        \"void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)\",\n        \"Convert a true colour image to a palette based image with a number of colours, optionally using dithering.\"\n    ],\n    \"imagettfbbox\": [\n        \"array imagettfbbox(float size, float angle, string font_file, string text)\",\n        \"Give the bounding box of a text using TrueType fonts\"\n    ],\n    \"imagettftext\": [\n        \"array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)\",\n        \"Write text to the image using a TrueType font\"\n    ],\n    \"imagetypes\": [\n        \"int imagetypes(void)\",\n        \"Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM\"\n    ],\n    \"imagewbmp\": [\n        \"bool imagewbmp(resource im [, string filename, [, int foreground]])\",\n        \"Output WBMP image to browser or file\"\n    ],\n    \"imagexbm\": [\n        \"int imagexbm(int im, string filename [, int foreground])\",\n        \"Output XBM image to browser or file\"\n    ],\n    \"imap_8bit\": [\n        \"string imap_8bit(string text)\",\n        \"Convert an 8-bit string to a quoted-printable string\"\n    ],\n    \"imap_alerts\": [\n        \"array imap_alerts(void)\",\n        \"Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called.\"\n    ],\n    \"imap_append\": [\n        \"bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])\",\n        \"Append a new message to a specified mailbox\"\n    ],\n    \"imap_base64\": [\n        \"string imap_base64(string text)\",\n        \"Decode BASE64 encoded text\"\n    ],\n    \"imap_binary\": [\n        \"string imap_binary(string text)\",\n        \"Convert an 8bit string to a base64 string\"\n    ],\n    \"imap_body\": [\n        \"string imap_body(resource stream_id, int msg_no [, int options])\",\n        \"Read the message body\"\n    ],\n    \"imap_bodystruct\": [\n        \"object imap_bodystruct(resource stream_id, int msg_no, string section)\",\n        \"Read the structure of a specified body section of a specific message\"\n    ],\n    \"imap_check\": [\n        \"object imap_check(resource stream_id)\",\n        \"Get mailbox properties\"\n    ],\n    \"imap_clearflag_full\": [\n        \"bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Clears flags on messages\"\n    ],\n    \"imap_close\": [\n        \"bool imap_close(resource stream_id [, int options])\",\n        \"Close an IMAP stream\"\n    ],\n    \"imap_createmailbox\": [\n        \"bool imap_createmailbox(resource stream_id, string mailbox)\",\n        \"Create a new mailbox\"\n    ],\n    \"imap_delete\": [\n        \"bool imap_delete(resource stream_id, int msg_no [, int options])\",\n        \"Mark a message for deletion\"\n    ],\n    \"imap_deletemailbox\": [\n        \"bool imap_deletemailbox(resource stream_id, string mailbox)\",\n        \"Delete a mailbox\"\n    ],\n    \"imap_errors\": [\n        \"array imap_errors(void)\",\n        \"Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called.\"\n    ],\n    \"imap_expunge\": [\n        \"bool imap_expunge(resource stream_id)\",\n        \"Permanently delete all messages marked for deletion\"\n    ],\n    \"imap_fetch_overview\": [\n        \"array imap_fetch_overview(resource stream_id, string sequence [, int options])\",\n        \"Read an overview of the information in the headers of the given message sequence\"\n    ],\n    \"imap_fetchbody\": [\n        \"string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])\",\n        \"Get a specific body section\"\n    ],\n    \"imap_fetchheader\": [\n        \"string imap_fetchheader(resource stream_id, int msg_no [, int options])\",\n        \"Get the full unfiltered header for a message\"\n    ],\n    \"imap_fetchstructure\": [\n        \"object imap_fetchstructure(resource stream_id, int msg_no [, int options])\",\n        \"Read the full structure of a message\"\n    ],\n    \"imap_gc\": [\n        \"bool imap_gc(resource stream_id, int flags)\",\n        \"This function garbage collects (purges) the cache of entries of a specific type.\"\n    ],\n    \"imap_get_quota\": [\n        \"array imap_get_quota(resource stream_id, string qroot)\",\n        \"Returns the quota set to the mailbox account qroot\"\n    ],\n    \"imap_get_quotaroot\": [\n        \"array imap_get_quotaroot(resource stream_id, string mbox)\",\n        \"Returns the quota set to the mailbox account mbox\"\n    ],\n    \"imap_getacl\": [\n        \"array imap_getacl(resource stream_id, string mailbox)\",\n        \"Gets the ACL for a given mailbox\"\n    ],\n    \"imap_getmailboxes\": [\n        \"array imap_getmailboxes(resource stream_id, string ref, string pattern)\",\n        \"Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter\"\n    ],\n    \"imap_getsubscribed\": [\n        \"array imap_getsubscribed(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()\"\n    ],\n    \"imap_headerinfo\": [\n        \"object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])\",\n        \"Read the headers of the message\"\n    ],\n    \"imap_headers\": [\n        \"array imap_headers(resource stream_id)\",\n        \"Returns headers for all messages in a mailbox\"\n    ],\n    \"imap_last_error\": [\n        \"string imap_last_error(void)\",\n        \"Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call.\"\n    ],\n    \"imap_list\": [\n        \"array imap_list(resource stream_id, string ref, string pattern)\",\n        \"Read the list of mailboxes\"\n    ],\n    \"imap_listscan\": [\n        \"array imap_listscan(resource stream_id, string ref, string pattern, string content)\",\n        \"Read list of mailboxes containing a certain string\"\n    ],\n    \"imap_lsub\": [\n        \"array imap_lsub(resource stream_id, string ref, string pattern)\",\n        \"Return a list of subscribed mailboxes\"\n    ],\n    \"imap_mail\": [\n        \"bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])\",\n        \"Send an email message\"\n    ],\n    \"imap_mail_compose\": [\n        \"string imap_mail_compose(array envelope, array body)\",\n        \"Create a MIME message based on given envelope and body sections\"\n    ],\n    \"imap_mail_copy\": [\n        \"bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])\",\n        \"Copy specified message to a mailbox\"\n    ],\n    \"imap_mail_move\": [\n        \"bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])\",\n        \"Move specified message to a mailbox\"\n    ],\n    \"imap_mailboxmsginfo\": [\n        \"object imap_mailboxmsginfo(resource stream_id)\",\n        \"Returns info about the current mailbox\"\n    ],\n    \"imap_mime_header_decode\": [\n        \"array imap_mime_header_decode(string str)\",\n        \"Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'\"\n    ],\n    \"imap_msgno\": [\n        \"int imap_msgno(resource stream_id, int unique_msg_id)\",\n        \"Get the sequence number associated with a UID\"\n    ],\n    \"imap_mutf7_to_utf8\": [\n        \"string imap_mutf7_to_utf8(string in)\",\n        \"Decode a modified UTF-7 string to UTF-8\"\n    ],\n    \"imap_num_msg\": [\n        \"int imap_num_msg(resource stream_id)\",\n        \"Gives the number of messages in the current mailbox\"\n    ],\n    \"imap_num_recent\": [\n        \"int imap_num_recent(resource stream_id)\",\n        \"Gives the number of recent messages in current mailbox\"\n    ],\n    \"imap_open\": [\n        \"resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])\",\n        \"Open an IMAP stream to a mailbox\"\n    ],\n    \"imap_ping\": [\n        \"bool imap_ping(resource stream_id)\",\n        \"Check if the IMAP stream is still active\"\n    ],\n    \"imap_qprint\": [\n        \"string imap_qprint(string text)\",\n        \"Convert a quoted-printable string to an 8-bit string\"\n    ],\n    \"imap_renamemailbox\": [\n        \"bool imap_renamemailbox(resource stream_id, string old_name, string new_name)\",\n        \"Rename a mailbox\"\n    ],\n    \"imap_reopen\": [\n        \"bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])\",\n        \"Reopen an IMAP stream to a new mailbox\"\n    ],\n    \"imap_rfc822_parse_adrlist\": [\n        \"array imap_rfc822_parse_adrlist(string address_string, string default_host)\",\n        \"Parses an address string\"\n    ],\n    \"imap_rfc822_parse_headers\": [\n        \"object imap_rfc822_parse_headers(string headers [, string default_host])\",\n        \"Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()\"\n    ],\n    \"imap_rfc822_write_address\": [\n        \"string imap_rfc822_write_address(string mailbox, string host, string personal)\",\n        \"Returns a properly formatted email address given the mailbox, host, and personal info\"\n    ],\n    \"imap_savebody\": [\n        \"bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \\\"\\\"[, int options = 0]])\",\n        \"Save a specific body section to a file\"\n    ],\n    \"imap_search\": [\n        \"array imap_search(resource stream_id, string criteria [, int options [, string charset]])\",\n        \"Return a list of messages matching the given criteria\"\n    ],\n    \"imap_set_quota\": [\n        \"bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)\",\n        \"Will set the quota for qroot mailbox\"\n    ],\n    \"imap_setacl\": [\n        \"bool imap_setacl(resource stream_id, string mailbox, string id, string rights)\",\n        \"Sets the ACL for a given mailbox\"\n    ],\n    \"imap_setflag_full\": [\n        \"bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])\",\n        \"Sets flags on messages\"\n    ],\n    \"imap_sort\": [\n        \"array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])\",\n        \"Sort an array of message headers, optionally including only messages that meet specified criteria.\"\n    ],\n    \"imap_status\": [\n        \"object imap_status(resource stream_id, string mailbox, int options)\",\n        \"Get status info from a mailbox\"\n    ],\n    \"imap_subscribe\": [\n        \"bool imap_subscribe(resource stream_id, string mailbox)\",\n        \"Subscribe to a mailbox\"\n    ],\n    \"imap_thread\": [\n        \"array imap_thread(resource stream_id [, int options])\",\n        \"Return threaded by REFERENCES tree\"\n    ],\n    \"imap_timeout\": [\n        \"mixed imap_timeout(int timeout_type [, int timeout])\",\n        \"Set or fetch imap timeout\"\n    ],\n    \"imap_uid\": [\n        \"int imap_uid(resource stream_id, int msg_no)\",\n        \"Get the unique message id associated with a standard sequential message number\"\n    ],\n    \"imap_undelete\": [\n        \"bool imap_undelete(resource stream_id, int msg_no [, int flags])\",\n        \"Remove the delete flag from a message\"\n    ],\n    \"imap_unsubscribe\": [\n        \"bool imap_unsubscribe(resource stream_id, string mailbox)\",\n        \"Unsubscribe from a mailbox\"\n    ],\n    \"imap_utf7_decode\": [\n        \"string imap_utf7_decode(string buf)\",\n        \"Decode a modified UTF-7 string\"\n    ],\n    \"imap_utf7_encode\": [\n        \"string imap_utf7_encode(string buf)\",\n        \"Encode a string in modified UTF-7\"\n    ],\n    \"imap_utf8\": [\n        \"string imap_utf8(string mime_encoded_text)\",\n        \"Convert a mime-encoded text to UTF-8\"\n    ],\n    \"imap_utf8_to_mutf7\": [\n        \"string imap_utf8_to_mutf7(string in)\",\n        \"Encode a UTF-8 string to modified UTF-7\"\n    ],\n    \"implode\": [\n        \"string implode([string glue,] array pieces)\",\n        \"Joins array elements placing glue string between items and return one string\"\n    ],\n    \"import_request_variables\": [\n        \"bool import_request_variables(string types [, string prefix])\",\n        \"Import GET\\/POST\\/Cookie variables into the global scope\"\n    ],\n    \"in_array\": [\n        \"bool in_array(mixed needle, array haystack [, bool strict])\",\n        \"Checks if the given value exists in the array\"\n    ],\n    \"include\": [\n        \"bool include(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"include_once\": [\n        \"bool include_once(string path)\",\n        \"Includes and evaluates the specified file\"\n    ],\n    \"inet_ntop\": [\n        \"string inet_ntop(string in_addr)\",\n        \"Converts a packed inet address to a human readable IP address string\"\n    ],\n    \"inet_pton\": [\n        \"string inet_pton(string ip_address)\",\n        \"Converts a human readable IP address to a packed binary string\"\n    ],\n    \"ini_get\": [\n        \"string ini_get(string varname)\",\n        \"Get a configuration option\"\n    ],\n    \"ini_get_all\": [\n        \"array ini_get_all([string extension[, bool details = true]])\",\n        \"Get all configuration options\"\n    ],\n    \"ini_restore\": [\n        \"void ini_restore(string varname)\",\n        \"Restore the value of a configuration option specified by varname\"\n    ],\n    \"ini_set\": [\n        \"string ini_set(string varname, string newvalue)\",\n        \"Set a configuration option, returns false on error and the old value of the configuration option on success\"\n    ],\n    \"interface_exists\": [\n        \"bool interface_exists(string classname [, bool autoload])\",\n        \"Checks if the class exists\"\n    ],\n    \"intl_error_name\": [\n        \"string intl_error_name()\",\n        \"* Return a string for a given error code.  * The string will be the same as the name of the error code constant.\"\n    ],\n    \"intl_get_error_code\": [\n        \"int intl_get_error_code()\",\n        \"* Get code of the last occured error.\"\n    ],\n    \"intl_get_error_message\": [\n        \"string intl_get_error_message()\",\n        \"* Get text description of the last occured error.\"\n    ],\n    \"intl_is_failure\": [\n        \"bool intl_is_failure()\",\n        \"* Check whether the given error code indicates a failure.  * Returns true if it does, and false if the code  * indicates success or a warning.\"\n    ],\n    \"intval\": [\n        \"int intval(mixed var [, int base])\",\n        \"Get the integer value of a variable using the optional base for the conversion\"\n    ],\n    \"ip2long\": [\n        \"int ip2long(string ip_address)\",\n        \"Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address\"\n    ],\n    \"iptcembed\": [\n        \"array iptcembed(string iptcdata, string jpeg_file_name [, int spool])\",\n        \"Embed binary IPTC data into a JPEG image.\"\n    ],\n    \"iptcparse\": [\n        \"array iptcparse(string iptcdata)\",\n        \"Parse binary IPTC-data into associative array\"\n    ],\n    \"is_a\": [\n        \"bool is_a(object object, string class_name)\",\n        \"Returns true if the object is of this class or has this class as one of its parents\"\n    ],\n    \"is_array\": [\n        \"bool is_array(mixed var)\",\n        \"Returns true if variable is an array\"\n    ],\n    \"is_bool\": [\n        \"bool is_bool(mixed var)\",\n        \"Returns true if variable is a boolean\"\n    ],\n    \"is_callable\": [\n        \"bool is_callable(mixed var [, bool syntax_only [, string callable_name]])\",\n        \"Returns true if var is callable.\"\n    ],\n    \"is_dir\": [\n        \"bool is_dir(string filename)\",\n        \"Returns true if file is directory\"\n    ],\n    \"is_executable\": [\n        \"bool is_executable(string filename)\",\n        \"Returns true if file is executable\"\n    ],\n    \"is_file\": [\n        \"bool is_file(string filename)\",\n        \"Returns true if file is a regular file\"\n    ],\n    \"is_finite\": [\n        \"bool is_finite(float val)\",\n        \"Returns whether argument is finite\"\n    ],\n    \"is_float\": [\n        \"bool is_float(mixed var)\",\n        \"Returns true if variable is float point\"\n    ],\n    \"is_infinite\": [\n        \"bool is_infinite(float val)\",\n        \"Returns whether argument is infinite\"\n    ],\n    \"is_link\": [\n        \"bool is_link(string filename)\",\n        \"Returns true if file is symbolic link\"\n    ],\n    \"is_long\": [\n        \"bool is_long(mixed var)\",\n        \"Returns true if variable is a long (integer)\"\n    ],\n    \"is_nan\": [\n        \"bool is_nan(float val)\",\n        \"Returns whether argument is not a number\"\n    ],\n    \"is_null\": [\n        \"bool is_null(mixed var)\",\n        \"Returns true if variable is null\"\n    ],\n    \"is_numeric\": [\n        \"bool is_numeric(mixed value)\",\n        \"Returns true if value is a number or a numeric string\"\n    ],\n    \"is_object\": [\n        \"bool is_object(mixed var)\",\n        \"Returns true if variable is an object\"\n    ],\n    \"is_readable\": [\n        \"bool is_readable(string filename)\",\n        \"Returns true if file can be read\"\n    ],\n    \"is_resource\": [\n        \"bool is_resource(mixed var)\",\n        \"Returns true if variable is a resource\"\n    ],\n    \"is_scalar\": [\n        \"bool is_scalar(mixed value)\",\n        \"Returns true if value is a scalar\"\n    ],\n    \"is_string\": [\n        \"bool is_string(mixed var)\",\n        \"Returns true if variable is a string\"\n    ],\n    \"is_subclass_of\": [\n        \"bool is_subclass_of(object object, string class_name)\",\n        \"Returns true if the object has this class as one of its parents\"\n    ],\n    \"is_uploaded_file\": [\n        \"bool is_uploaded_file(string path)\",\n        \"Check if file was created by rfc1867 upload\"\n    ],\n    \"is_writable\": [\n        \"bool is_writable(string filename)\",\n        \"Returns true if file can be written\"\n    ],\n    \"isset\": [\n        \"bool isset(mixed var [, mixed var])\",\n        \"Determine whether a variable is set\"\n    ],\n    \"iterator_apply\": [\n        \"int iterator_apply(Traversable it, mixed function [, mixed params])\",\n        \"Calls a function for every element in an iterator\"\n    ],\n    \"iterator_count\": [\n        \"int iterator_count(Traversable it)\",\n        \"Count the elements in an iterator\"\n    ],\n    \"iterator_to_array\": [\n        \"array iterator_to_array(Traversable it [, bool use_keys = true])\",\n        \"Copy the iterator into an array\"\n    ],\n    \"jddayofweek\": [\n        \"mixed jddayofweek(int juliandaycount [, int mode])\",\n        \"Returns name or number of day of week from julian day count\"\n    ],\n    \"jdmonthname\": [\n        \"string jdmonthname(int juliandaycount, int mode)\",\n        \"Returns name of month for julian day count\"\n    ],\n    \"jdtofrench\": [\n        \"string jdtofrench(int juliandaycount)\",\n        \"Converts a julian day count to a french republic calendar date\"\n    ],\n    \"jdtogregorian\": [\n        \"string jdtogregorian(int juliandaycount)\",\n        \"Converts a julian day count to a gregorian calendar date\"\n    ],\n    \"jdtojewish\": [\n        \"string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])\",\n        \"Converts a julian day count to a jewish calendar date\"\n    ],\n    \"jdtojulian\": [\n        \"string jdtojulian(int juliandaycount)\",\n        \"Convert a julian day count to a julian calendar date\"\n    ],\n    \"jdtounix\": [\n        \"int jdtounix(int jday)\",\n        \"Convert Julian Day to UNIX timestamp\"\n    ],\n    \"jewishtojd\": [\n        \"int jewishtojd(int month, int day, int year)\",\n        \"Converts a jewish calendar date to a julian day count\"\n    ],\n    \"join\": [\n        \"string join(array src, string glue)\",\n        \"An alias for implode\"\n    ],\n    \"jpeg2wbmp\": [\n        \"bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert JPEG image to WBMP image\"\n    ],\n    \"json_decode\": [\n        \"mixed json_decode(string json [, bool assoc [, long depth]])\",\n        \"Decodes the JSON representation into a PHP value\"\n    ],\n    \"json_encode\": [\n        \"string json_encode(mixed data [, int options])\",\n        \"Returns the JSON representation of a value\"\n    ],\n    \"json_last_error\": [\n        \"int json_last_error()\",\n        \"Returns the error code of the last json_decode().\"\n    ],\n    \"juliantojd\": [\n        \"int juliantojd(int month, int day, int year)\",\n        \"Converts a julian calendar date to julian day count\"\n    ],\n    \"key\": [\n        \"mixed key(array array_arg)\",\n        \"Return the key of the element currently pointed to by the internal array pointer\"\n    ],\n    \"krsort\": [\n        \"bool krsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key value in reverse order\"\n    ],\n    \"ksort\": [\n        \"bool ksort(array &array_arg [, int sort_flags])\",\n        \"Sort an array by key\"\n    ],\n    \"lcfirst\": [\n        \"string lcfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"lcg_value\": [\n        \"float lcg_value()\",\n        \"Returns a value from the combined linear congruential generator\"\n    ],\n    \"lchgrp\": [\n        \"bool lchgrp(string filename, mixed group)\",\n        \"Change symlink group\"\n    ],\n    \"ldap_8859_to_t61\": [\n        \"string ldap_8859_to_t61(string value)\",\n        \"Translate 8859 characters to t61 characters\"\n    ],\n    \"ldap_add\": [\n        \"bool ldap_add(resource link, string dn, array entry)\",\n        \"Add entries to LDAP directory\"\n    ],\n    \"ldap_bind\": [\n        \"bool ldap_bind(resource link [, string dn [, string password]])\",\n        \"Bind to LDAP directory\"\n    ],\n    \"ldap_compare\": [\n        \"bool ldap_compare(resource link, string dn, string attr, string value)\",\n        \"Determine if an entry has a specific value for one of its attributes\"\n    ],\n    \"ldap_connect\": [\n        \"resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])\",\n        \"Connect to an LDAP server\"\n    ],\n    \"ldap_count_entries\": [\n        \"int ldap_count_entries(resource link, resource result)\",\n        \"Count the number of entries in a search result\"\n    ],\n    \"ldap_delete\": [\n        \"bool ldap_delete(resource link, string dn)\",\n        \"Delete an entry from a directory\"\n    ],\n    \"ldap_dn2ufn\": [\n        \"string ldap_dn2ufn(string dn)\",\n        \"Convert DN to User Friendly Naming format\"\n    ],\n    \"ldap_err2str\": [\n        \"string ldap_err2str(int errno)\",\n        \"Convert error number to error string\"\n    ],\n    \"ldap_errno\": [\n        \"int ldap_errno(resource link)\",\n        \"Get the current ldap error number\"\n    ],\n    \"ldap_error\": [\n        \"string ldap_error(resource link)\",\n        \"Get the current ldap error string\"\n    ],\n    \"ldap_explode_dn\": [\n        \"array ldap_explode_dn(string dn, int with_attrib)\",\n        \"Splits DN into its component parts\"\n    ],\n    \"ldap_first_attribute\": [\n        \"string ldap_first_attribute(resource link, resource result_entry)\",\n        \"Return first attribute\"\n    ],\n    \"ldap_first_entry\": [\n        \"resource ldap_first_entry(resource link, resource result)\",\n        \"Return first result id\"\n    ],\n    \"ldap_first_reference\": [\n        \"resource ldap_first_reference(resource link, resource result)\",\n        \"Return first reference\"\n    ],\n    \"ldap_free_result\": [\n        \"bool ldap_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"ldap_get_attributes\": [\n        \"array ldap_get_attributes(resource link, resource result_entry)\",\n        \"Get attributes from a search result entry\"\n    ],\n    \"ldap_get_dn\": [\n        \"string ldap_get_dn(resource link, resource result_entry)\",\n        \"Get the DN of a result entry\"\n    ],\n    \"ldap_get_entries\": [\n        \"array ldap_get_entries(resource link, resource result)\",\n        \"Get all result entries\"\n    ],\n    \"ldap_get_option\": [\n        \"bool ldap_get_option(resource link, int option, mixed retval)\",\n        \"Get the current value of various session-wide parameters\"\n    ],\n    \"ldap_get_values_len\": [\n        \"array ldap_get_values_len(resource link, resource result_entry, string attribute)\",\n        \"Get all values with lengths from a result entry\"\n    ],\n    \"ldap_list\": [\n        \"resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Single-level search\"\n    ],\n    \"ldap_mod_add\": [\n        \"bool ldap_mod_add(resource link, string dn, array entry)\",\n        \"Add attribute values to current\"\n    ],\n    \"ldap_mod_del\": [\n        \"bool ldap_mod_del(resource link, string dn, array entry)\",\n        \"Delete attribute values\"\n    ],\n    \"ldap_mod_replace\": [\n        \"bool ldap_mod_replace(resource link, string dn, array entry)\",\n        \"Replace attribute values with new ones\"\n    ],\n    \"ldap_next_attribute\": [\n        \"string ldap_next_attribute(resource link, resource result_entry)\",\n        \"Get the next attribute in result\"\n    ],\n    \"ldap_next_entry\": [\n        \"resource ldap_next_entry(resource link, resource result_entry)\",\n        \"Get next result entry\"\n    ],\n    \"ldap_next_reference\": [\n        \"resource ldap_next_reference(resource link, resource reference_entry)\",\n        \"Get next reference\"\n    ],\n    \"ldap_parse_reference\": [\n        \"bool ldap_parse_reference(resource link, resource reference_entry, array referrals)\",\n        \"Extract information from reference entry\"\n    ],\n    \"ldap_parse_result\": [\n        \"bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)\",\n        \"Extract information from result\"\n    ],\n    \"ldap_read\": [\n        \"resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Read an entry\"\n    ],\n    \"ldap_rename\": [\n        \"bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);\",\n        \"Modify the name of an entry\"\n    ],\n    \"ldap_sasl_bind\": [\n        \"bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])\",\n        \"Bind to LDAP directory using SASL\"\n    ],\n    \"ldap_search\": [\n        \"resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])\",\n        \"Search LDAP tree under base_dn\"\n    ],\n    \"ldap_set_option\": [\n        \"bool ldap_set_option(resource link, int option, mixed newval)\",\n        \"Set the value of various session-wide parameters\"\n    ],\n    \"ldap_set_rebind_proc\": [\n        \"bool ldap_set_rebind_proc(resource link, string callback)\",\n        \"Set a callback function to do re-binds on referral chasing.\"\n    ],\n    \"ldap_sort\": [\n        \"bool ldap_sort(resource link, resource result, string sortfilter)\",\n        \"Sort LDAP result entries\"\n    ],\n    \"ldap_start_tls\": [\n        \"bool ldap_start_tls(resource link)\",\n        \"Start TLS\"\n    ],\n    \"ldap_t61_to_8859\": [\n        \"string ldap_t61_to_8859(string value)\",\n        \"Translate t61 characters to 8859 characters\"\n    ],\n    \"ldap_unbind\": [\n        \"bool ldap_unbind(resource link)\",\n        \"Unbind from LDAP directory\"\n    ],\n    \"leak\": [\n        \"void leak(int num_bytes=3)\",\n        \"Cause an intentional memory leak, for testing\\/debugging purposes\"\n    ],\n    \"levenshtein\": [\n        \"int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])\",\n        \"Calculate Levenshtein distance between two strings\"\n    ],\n    \"libxml_clear_errors\": [\n        \"void libxml_clear_errors()\",\n        \"Clear last error from libxml\"\n    ],\n    \"libxml_disable_entity_loader\": [\n        \"bool libxml_disable_entity_loader([boolean disable])\",\n        \"Disable\\/Enable ability to load external entities\"\n    ],\n    \"libxml_get_errors\": [\n        \"object libxml_get_errors()\",\n        \"Retrieve array of errors\"\n    ],\n    \"libxml_get_last_error\": [\n        \"object libxml_get_last_error()\",\n        \"Retrieve last error from libxml\"\n    ],\n    \"libxml_set_streams_context\": [\n        \"void libxml_set_streams_context(resource streams_context)\",\n        \"Set the streams context for the next libxml document load or write\"\n    ],\n    \"libxml_use_internal_errors\": [\n        \"bool libxml_use_internal_errors([boolean use_errors])\",\n        \"Disable libxml errors and allow user to fetch error information as needed\"\n    ],\n    \"link\": [\n        \"int link(string target, string link)\",\n        \"Create a hard link\"\n    ],\n    \"linkinfo\": [\n        \"int linkinfo(string filename)\",\n        \"Returns the st_dev field of the UNIX C stat structure describing the link\"\n    ],\n    \"litespeed_request_headers\": [\n        \"array litespeed_request_headers(void)\",\n        \"Fetch all HTTP request headers\"\n    ],\n    \"litespeed_response_headers\": [\n        \"array litespeed_response_headers(void)\",\n        \"Fetch all HTTP response headers\"\n    ],\n    \"locale_accept_from_http\": [\n        \"string locale_accept_from_http(string $http_accept)\",\n        null\n    ],\n    \"locale_canonicalize\": [\n        \"static string locale_canonicalize(Locale $loc, string $locale)\",\n        \"* @param string $locale The locale string to canonicalize\"\n    ],\n    \"locale_filter_matches\": [\n        \"boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])\",\n        \"* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm\"\n    ],\n    \"locale_get_all_variants\": [\n        \"static array locale_get_all_variants($locale)\",\n        \"* gets an array containing the list of variants, or null\"\n    ],\n    \"locale_get_default\": [\n        \"static string locale_get_default( )\",\n        \"Get default locale\"\n    ],\n    \"locale_get_keywords\": [\n        \"static array locale_get_keywords(string $locale) {\",\n        \"* return an associative array containing keyword-value  * pairs for this locale. The keys are keys to the array (doh!)\"\n    ],\n    \"locale_get_primary_language\": [\n        \"static string locale_get_primary_language($locale)\",\n        \"* gets the primary language for the $locale\"\n    ],\n    \"locale_get_region\": [\n        \"static string locale_get_region($locale)\",\n        \"* gets the region for the $locale\"\n    ],\n    \"locale_get_script\": [\n        \"static string locale_get_script($locale)\",\n        \"* gets the script for the $locale\"\n    ],\n    \"locale_lookup\": [\n        \"string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])\",\n        \"* Searchs the items in $langtag for the best match to the language * range\"\n    ],\n    \"locale_set_default\": [\n        \"static string locale_set_default( string $locale )\",\n        \"Set default locale\"\n    ],\n    \"localeconv\": [\n        \"array localeconv(void)\",\n        \"Returns numeric formatting information based on the current locale\"\n    ],\n    \"localtime\": [\n        \"array localtime([int timestamp [, bool associative_array]])\",\n        \"Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array\"\n    ],\n    \"log\": [\n        \"float log(float number, [float base])\",\n        \"Returns the natural logarithm of the number, or the base log if base is specified\"\n    ],\n    \"log10\": [\n        \"float log10(float number)\",\n        \"Returns the base-10 logarithm of the number\"\n    ],\n    \"log1p\": [\n        \"float log1p(float number)\",\n        \"Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero\"\n    ],\n    \"long2ip\": [\n        \"string long2ip(int proper_address)\",\n        \"Converts an (IPv4) Internet network address into a string in Internet standard dotted format\"\n    ],\n    \"lstat\": [\n        \"array lstat(string filename)\",\n        \"Give information about a file or symbolic link\"\n    ],\n    \"ltrim\": [\n        \"string ltrim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning of a string\"\n    ],\n    \"mail\": [\n        \"int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"Send an email message\"\n    ],\n    \"max\": [\n        \"mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the highest value in an array or a series of arguments\"\n    ],\n    \"mb_check_encoding\": [\n        \"bool mb_check_encoding([string var[, string encoding]])\",\n        \"Check if the string is valid for the specified encoding\"\n    ],\n    \"mb_convert_case\": [\n        \"string mb_convert_case(string sourcestring, int mode [, string encoding])\",\n        \"Returns a case-folded version of sourcestring\"\n    ],\n    \"mb_convert_encoding\": [\n        \"string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])\",\n        \"Returns converted string in desired encoding\"\n    ],\n    \"mb_convert_kana\": [\n        \"string mb_convert_kana(string str [, string option] [, string encoding])\",\n        \"Conversion between full-width character and half-width character (Japanese)\"\n    ],\n    \"mb_convert_variables\": [\n        \"string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])\",\n        \"Converts the string resource in variables to desired encoding\"\n    ],\n    \"mb_decode_mimeheader\": [\n        \"string mb_decode_mimeheader(string string)\",\n        \"Decodes the MIME \\\"encoded-word\\\" in the string\"\n    ],\n    \"mb_decode_numericentity\": [\n        \"string mb_decode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts HTML numeric entities to character code\"\n    ],\n    \"mb_detect_encoding\": [\n        \"string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])\",\n        \"Encodings of the given string is returned (as a string)\"\n    ],\n    \"mb_detect_order\": [\n        \"bool|array mb_detect_order([mixed encoding-list])\",\n        \"Sets the current detect_order or Return the current detect_order as a array\"\n    ],\n    \"mb_encode_mimeheader\": [\n        \"string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])\",\n        \"Converts the string to MIME \\\"encoded-word\\\" in the format of =?charset?(B|Q)?encoded_string?=\"\n    ],\n    \"mb_encode_numericentity\": [\n        \"string mb_encode_numericentity(string string, array convmap [, string encoding])\",\n        \"Converts specified characters to HTML numeric entities\"\n    ],\n    \"mb_encoding_aliases\": [\n        \"array mb_encoding_aliases(string encoding)\",\n        \"Returns an array of the aliases of a given encoding name\"\n    ],\n    \"mb_ereg\": [\n        \"int mb_ereg(string pattern, string string [, array registers])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_match\": [\n        \"bool mb_ereg_match(string pattern, string string [,string option])\",\n        \"Regular expression match for multibyte string\"\n    ],\n    \"mb_ereg_replace\": [\n        \"string mb_ereg_replace(string pattern, string replacement, string string [, string option])\",\n        \"Replace regular expression for multibyte string\"\n    ],\n    \"mb_ereg_search\": [\n        \"bool mb_ereg_search([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_getpos\": [\n        \"int mb_ereg_search_getpos(void)\",\n        \"Get search start position\"\n    ],\n    \"mb_ereg_search_getregs\": [\n        \"array mb_ereg_search_getregs(void)\",\n        \"Get matched substring of the last time\"\n    ],\n    \"mb_ereg_search_init\": [\n        \"bool mb_ereg_search_init(string string [, string pattern[, string option]])\",\n        \"Initialize string and regular expression for search.\"\n    ],\n    \"mb_ereg_search_pos\": [\n        \"array mb_ereg_search_pos([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_regs\": [\n        \"array mb_ereg_search_regs([string pattern[, string option]])\",\n        \"Regular expression search for multibyte string\"\n    ],\n    \"mb_ereg_search_setpos\": [\n        \"bool mb_ereg_search_setpos(int position)\",\n        \"Set search start position\"\n    ],\n    \"mb_eregi\": [\n        \"int mb_eregi(string pattern, string string [, array registers])\",\n        \"Case-insensitive regular expression match for multibyte string\"\n    ],\n    \"mb_eregi_replace\": [\n        \"string mb_eregi_replace(string pattern, string replacement, string string)\",\n        \"Case insensitive replace regular expression for multibyte string\"\n    ],\n    \"mb_get_info\": [\n        \"mixed mb_get_info([string type])\",\n        \"Returns the current settings of mbstring\"\n    ],\n    \"mb_http_input\": [\n        \"mixed mb_http_input([string type])\",\n        \"Returns the input encoding\"\n    ],\n    \"mb_http_output\": [\n        \"string mb_http_output([string encoding])\",\n        \"Sets the current output_encoding or returns the current output_encoding as a string\"\n    ],\n    \"mb_internal_encoding\": [\n        \"string mb_internal_encoding([string encoding])\",\n        \"Sets the current internal encoding or Returns the current internal encoding as a string\"\n    ],\n    \"mb_language\": [\n        \"string mb_language([string language])\",\n        \"Sets the current language or Returns the current language as a string\"\n    ],\n    \"mb_list_encodings\": [\n        \"mixed mb_list_encodings()\",\n        \"Returns an array of all supported entity encodings\"\n    ],\n    \"mb_output_handler\": [\n        \"string mb_output_handler(string contents, int status)\",\n        \"Returns string in output buffer converted to the http_output encoding\"\n    ],\n    \"mb_parse_str\": [\n        \"bool mb_parse_str(string encoded_string [, array result])\",\n        \"Parses GET\\/POST\\/COOKIE data and sets global variables\"\n    ],\n    \"mb_preferred_mime_name\": [\n        \"string mb_preferred_mime_name(string encoding)\",\n        \"Return the preferred MIME name (charset) as a string\"\n    ],\n    \"mb_regex_encoding\": [\n        \"string mb_regex_encoding([string encoding])\",\n        \"Returns the current encoding for regex as a string.\"\n    ],\n    \"mb_regex_set_options\": [\n        \"string mb_regex_set_options([string options])\",\n        \"Set or get the default options for mbregex functions\"\n    ],\n    \"mb_send_mail\": [\n        \"int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])\",\n        \"*  Sends an email message with MIME scheme\"\n    ],\n    \"mb_split\": [\n        \"array mb_split(string pattern, string string [, int limit])\",\n        \"split multibyte string into array by regular expression\"\n    ],\n    \"mb_strcut\": [\n        \"string mb_strcut(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_strimwidth\": [\n        \"string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])\",\n        \"Trim the string in terminal width\"\n    ],\n    \"mb_stripos\": [\n        \"int mb_stripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_stristr\": [\n        \"string mb_stristr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strlen\": [\n        \"int mb_strlen(string str [, string encoding])\",\n        \"Get character numbers of a string\"\n    ],\n    \"mb_strpos\": [\n        \"int mb_strpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of first occurrence of a string within another\"\n    ],\n    \"mb_strrchr\": [\n        \"string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"mb_strrichr\": [\n        \"string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds the last occurrence of a character in a string within another, case insensitive\"\n    ],\n    \"mb_strripos\": [\n        \"int mb_strripos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Finds position of last occurrence of a string within another, case insensitive\"\n    ],\n    \"mb_strrpos\": [\n        \"int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])\",\n        \"Find position of last occurrence of a string within another\"\n    ],\n    \"mb_strstr\": [\n        \"string mb_strstr(string haystack, string needle[, bool part[, string encoding]])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"mb_strtolower\": [\n        \"string mb_strtolower(string sourcestring [, string encoding])\",\n        \"*  Returns a lowercased version of sourcestring\"\n    ],\n    \"mb_strtoupper\": [\n        \"string mb_strtoupper(string sourcestring [, string encoding])\",\n        \"*  Returns a uppercased version of sourcestring\"\n    ],\n    \"mb_strwidth\": [\n        \"int mb_strwidth(string str [, string encoding])\",\n        \"Gets terminal width of a string\"\n    ],\n    \"mb_substitute_character\": [\n        \"mixed mb_substitute_character([mixed substchar])\",\n        \"Sets the current substitute_character or returns the current substitute_character\"\n    ],\n    \"mb_substr\": [\n        \"string mb_substr(string str, int start [, int length [, string encoding]])\",\n        \"Returns part of a string\"\n    ],\n    \"mb_substr_count\": [\n        \"int mb_substr_count(string haystack, string needle [, string encoding])\",\n        \"Count the number of substring occurrences\"\n    ],\n    \"mcrypt_cbc\": [\n        \"string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)\",\n        \"CBC crypt\\/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_cfb\": [\n        \"string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)\",\n        \"CFB crypt\\/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_create_iv\": [\n        \"string mcrypt_create_iv(int size, int source)\",\n        \"Create an initialization vector (IV)\"\n    ],\n    \"mcrypt_decrypt\": [\n        \"string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt\\/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_ecb\": [\n        \"string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)\",\n        \"ECB crypt\\/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_enc_get_algorithms_name\": [\n        \"string mcrypt_enc_get_algorithms_name(resource td)\",\n        \"Returns the name of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_block_size\": [\n        \"int mcrypt_enc_get_block_size(resource td)\",\n        \"Returns the block size of the cipher specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_iv_size\": [\n        \"int mcrypt_enc_get_iv_size(resource td)\",\n        \"Returns the size of the IV in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_key_size\": [\n        \"int mcrypt_enc_get_key_size(resource td)\",\n        \"Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_modes_name\": [\n        \"string mcrypt_enc_get_modes_name(resource td)\",\n        \"Returns the name of the mode specified by the descriptor td\"\n    ],\n    \"mcrypt_enc_get_supported_key_sizes\": [\n        \"array mcrypt_enc_get_supported_key_sizes(resource td)\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_enc_is_block_algorithm\": [\n        \"bool mcrypt_enc_is_block_algorithm(resource td)\",\n        \"Returns TRUE if the alrogithm is a block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_algorithm_mode\": [\n        \"bool mcrypt_enc_is_block_algorithm_mode(resource td)\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_enc_is_block_mode\": [\n        \"bool mcrypt_enc_is_block_mode(resource td)\",\n        \"Returns TRUE if the mode outputs blocks\"\n    ],\n    \"mcrypt_enc_self_test\": [\n        \"int mcrypt_enc_self_test(resource td)\",\n        \"This function runs the self test on the algorithm specified by the descriptor td\"\n    ],\n    \"mcrypt_encrypt\": [\n        \"string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)\",\n        \"OFB crypt\\/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"mcrypt_generic\": [\n        \"string mcrypt_generic(resource td, string data)\",\n        \"This function encrypts the plaintext\"\n    ],\n    \"mcrypt_generic_deinit\": [\n        \"bool mcrypt_generic_deinit(resource td)\",\n        \"This function terminates encrypt specified by the descriptor td\"\n    ],\n    \"mcrypt_generic_init\": [\n        \"int mcrypt_generic_init(resource td, string key, string iv)\",\n        \"This function initializes all buffers for the specific module\"\n    ],\n    \"mcrypt_get_block_size\": [\n        \"int mcrypt_get_block_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_cipher_name\": [\n        \"string mcrypt_get_cipher_name(string cipher)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_get_iv_size\": [\n        \"int mcrypt_get_iv_size(string cipher, string module)\",\n        \"Get the IV size of cipher (Usually the same as the blocksize)\"\n    ],\n    \"mcrypt_get_key_size\": [\n        \"int mcrypt_get_key_size(string cipher, string module)\",\n        \"Get the key size of cipher\"\n    ],\n    \"mcrypt_list_algorithms\": [\n        \"array mcrypt_list_algorithms([string lib_dir])\",\n        \"List all algorithms in \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_list_modes\": [\n        \"array mcrypt_list_modes([string lib_dir])\",\n        \"List all modes \\\"module_dir\\\"\"\n    ],\n    \"mcrypt_module_close\": [\n        \"bool mcrypt_module_close(resource td)\",\n        \"Free the descriptor td\"\n    ],\n    \"mcrypt_module_get_algo_block_size\": [\n        \"int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])\",\n        \"Returns the block size of the algorithm\"\n    ],\n    \"mcrypt_module_get_algo_key_size\": [\n        \"int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])\",\n        \"Returns the maximum supported key size of the algorithm\"\n    ],\n    \"mcrypt_module_get_supported_key_sizes\": [\n        \"array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])\",\n        \"This function decrypts the crypttext\"\n    ],\n    \"mcrypt_module_is_block_algorithm\": [\n        \"bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])\",\n        \"Returns TRUE if the algorithm is a block algorithm\"\n    ],\n    \"mcrypt_module_is_block_algorithm_mode\": [\n        \"bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode is for use with block algorithms\"\n    ],\n    \"mcrypt_module_is_block_mode\": [\n        \"bool mcrypt_module_is_block_mode(string mode [, string lib_dir])\",\n        \"Returns TRUE if the mode outputs blocks of bytes\"\n    ],\n    \"mcrypt_module_open\": [\n        \"resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)\",\n        \"Opens the module of the algorithm and the mode to be used\"\n    ],\n    \"mcrypt_module_self_test\": [\n        \"bool mcrypt_module_self_test(string algorithm [, string lib_dir])\",\n        \"Does a self test of the module \\\"module\\\"\"\n    ],\n    \"mcrypt_ofb\": [\n        \"string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)\",\n        \"OFB crypt\\/decrypt data using key key with cipher cipher starting with iv\"\n    ],\n    \"md5\": [\n        \"string md5(string str, [ bool raw_output])\",\n        \"Calculate the md5 hash of a string\"\n    ],\n    \"md5_file\": [\n        \"string md5_file(string filename [, bool raw_output])\",\n        \"Calculate the md5 hash of given filename\"\n    ],\n    \"mdecrypt_generic\": [\n        \"string mdecrypt_generic(resource td, string data)\",\n        \"This function decrypts the plaintext\"\n    ],\n    \"memory_get_peak_usage\": [\n        \"int memory_get_peak_usage([real_usage])\",\n        \"Returns the peak allocated by PHP memory\"\n    ],\n    \"memory_get_usage\": [\n        \"int memory_get_usage([real_usage])\",\n        \"Returns the allocated by PHP memory\"\n    ],\n    \"metaphone\": [\n        \"string metaphone(string text[, int phones])\",\n        \"Break english phrases down into their phonemes\"\n    ],\n    \"method_exists\": [\n        \"bool method_exists(object object, string method)\",\n        \"Checks if the class method exists\"\n    ],\n    \"mhash\": [\n        \"string mhash(int hash, string data [, string key])\",\n        \"Hash data with hash\"\n    ],\n    \"mhash_count\": [\n        \"int mhash_count(void)\",\n        \"Gets the number of available hashes\"\n    ],\n    \"mhash_get_block_size\": [\n        \"int mhash_get_block_size(int hash)\",\n        \"Gets the block size of hash\"\n    ],\n    \"mhash_get_hash_name\": [\n        \"string mhash_get_hash_name(int hash)\",\n        \"Gets the name of hash\"\n    ],\n    \"mhash_keygen_s2k\": [\n        \"string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)\",\n        \"Generates a key using hash functions\"\n    ],\n    \"microtime\": [\n        \"mixed microtime([bool get_as_float])\",\n        \"Returns either a string or a float containing the current time in seconds and microseconds\"\n    ],\n    \"mime_content_type\": [\n        \"string mime_content_type(string filename|resource stream)\",\n        \"Return content-type for file\"\n    ],\n    \"min\": [\n        \"mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Return the lowest value in an array or a series of arguments\"\n    ],\n    \"mkdir\": [\n        \"bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])\",\n        \"Create a directory\"\n    ],\n    \"mktime\": [\n        \"int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])\",\n        \"Get UNIX timestamp for a date\"\n    ],\n    \"money_format\": [\n        \"string money_format(string format , float value)\",\n        \"Convert monetary value(s) to string\"\n    ],\n    \"move_uploaded_file\": [\n        \"bool move_uploaded_file(string path, string new_path)\",\n        \"Move a file if and only if it was created by an upload\"\n    ],\n    \"msg_get_queue\": [\n        \"resource msg_get_queue(int key [, int perms])\",\n        \"Attach to a message queue\"\n    ],\n    \"msg_queue_exists\": [\n        \"bool msg_queue_exists(int key)\",\n        \"Check wether a message queue exists\"\n    ],\n    \"msg_receive\": [\n        \"mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_remove_queue\": [\n        \"bool msg_remove_queue(resource queue)\",\n        \"Destroy the queue\"\n    ],\n    \"msg_send\": [\n        \"bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])\",\n        \"Send a message of type msgtype (must be > 0) to a message queue\"\n    ],\n    \"msg_set_queue\": [\n        \"bool msg_set_queue(resource queue, array data)\",\n        \"Set information for a message queue\"\n    ],\n    \"msg_stat_queue\": [\n        \"array msg_stat_queue(resource queue)\",\n        \"Returns information about a message queue\"\n    ],\n    \"msgfmt_create\": [\n        \"MessageFormatter msgfmt_create( string $locale, string $pattern )\",\n        \"* Create formatter.\"\n    ],\n    \"msgfmt_format\": [\n        \"mixed msgfmt_format( MessageFormatter $nf, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_format_message\": [\n        \"mixed msgfmt_format_message( string $locale, string $pattern, array $args )\",\n        \"* Format a message.\"\n    ],\n    \"msgfmt_get_error_code\": [\n        \"int msgfmt_get_error_code( MessageFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"msgfmt_get_error_message\": [\n        \"string msgfmt_get_error_message( MessageFormatter $coll )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"msgfmt_get_locale\": [\n        \"string msgfmt_get_locale(MessageFormatter $mf)\",\n        \"* Get formatter locale.\"\n    ],\n    \"msgfmt_get_pattern\": [\n        \"string msgfmt_get_pattern( MessageFormatter $mf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"msgfmt_parse\": [\n        \"array msgfmt_parse( MessageFormatter $nf, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"msgfmt_set_pattern\": [\n        \"bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"mssql_bind\": [\n        \"bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])\",\n        \"Adds a parameter to a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_close\": [\n        \"bool mssql_close([resource conn_id])\",\n        \"Closes a connection to a MS-SQL server\"\n    ],\n    \"mssql_connect\": [\n        \"int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a connection to a MS-SQL server\"\n    ],\n    \"mssql_data_seek\": [\n        \"bool mssql_data_seek(resource result_id, int offset)\",\n        \"Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number\"\n    ],\n    \"mssql_execute\": [\n        \"mixed mssql_execute(resource stmt [, bool skip_results = false])\",\n        \"Executes a stored procedure on a MS-SQL server database\"\n    ],\n    \"mssql_fetch_array\": [\n        \"array mssql_fetch_array(resource result_id [, int result_type])\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_assoc\": [\n        \"array mssql_fetch_assoc(resource result_id)\",\n        \"Returns an associative array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_batch\": [\n        \"int mssql_fetch_batch(resource result_index)\",\n        \"Returns the next batch of records\"\n    ],\n    \"mssql_fetch_field\": [\n        \"object mssql_fetch_field(resource result_id [, int offset])\",\n        \"Gets information about certain fields in a query result\"\n    ],\n    \"mssql_fetch_object\": [\n        \"object mssql_fetch_object(resource result_id)\",\n        \"Returns a pseudo-object of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_fetch_row\": [\n        \"array mssql_fetch_row(resource result_id)\",\n        \"Returns an array of the current row in the result set specified by result_id\"\n    ],\n    \"mssql_field_length\": [\n        \"int mssql_field_length(resource result_id [, int offset])\",\n        \"Get the length of a MS-SQL field\"\n    ],\n    \"mssql_field_name\": [\n        \"string mssql_field_name(resource result_id [, int offset])\",\n        \"Returns the name of the field given by offset in the result set given by result_id\"\n    ],\n    \"mssql_field_seek\": [\n        \"bool mssql_field_seek(resource result_id, int offset)\",\n        \"Seeks to the specified field offset\"\n    ],\n    \"mssql_field_type\": [\n        \"string mssql_field_type(resource result_id [, int offset])\",\n        \"Returns the type of a field\"\n    ],\n    \"mssql_free_result\": [\n        \"bool mssql_free_result(resource result_index)\",\n        \"Free a MS-SQL result index\"\n    ],\n    \"mssql_free_statement\": [\n        \"bool mssql_free_statement(resource result_index)\",\n        \"Free a MS-SQL statement index\"\n    ],\n    \"mssql_get_last_message\": [\n        \"string mssql_get_last_message(void)\",\n        \"Gets the last message from the MS-SQL server\"\n    ],\n    \"mssql_guid_string\": [\n        \"string mssql_guid_string(string binary [,bool short_format])\",\n        \"Converts a 16 byte binary GUID to a string\"\n    ],\n    \"mssql_init\": [\n        \"int mssql_init(string sp_name [, resource conn_id])\",\n        \"Initializes a stored procedure or a remote stored procedure\"\n    ],\n    \"mssql_min_error_severity\": [\n        \"void mssql_min_error_severity(int severity)\",\n        \"Sets the lower error severity\"\n    ],\n    \"mssql_min_message_severity\": [\n        \"void mssql_min_message_severity(int severity)\",\n        \"Sets the lower message severity\"\n    ],\n    \"mssql_next_result\": [\n        \"bool mssql_next_result(resource result_id)\",\n        \"Move the internal result pointer to the next result\"\n    ],\n    \"mssql_num_fields\": [\n        \"int mssql_num_fields(resource mssql_result_index)\",\n        \"Returns the number of fields fetched in from the result id specified\"\n    ],\n    \"mssql_num_rows\": [\n        \"int mssql_num_rows(resource mssql_result_index)\",\n        \"Returns the number of rows fetched in from the result id specified\"\n    ],\n    \"mssql_pconnect\": [\n        \"int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])\",\n        \"Establishes a persistent connection to a MS-SQL server\"\n    ],\n    \"mssql_query\": [\n        \"resource mssql_query(string query [, resource conn_id [, int batch_size]])\",\n        \"Perform an SQL query on a MS-SQL server database\"\n    ],\n    \"mssql_result\": [\n        \"string mssql_result(resource result_id, int row, mixed field)\",\n        \"Returns the contents of one cell from a MS-SQL result set\"\n    ],\n    \"mssql_rows_affected\": [\n        \"int mssql_rows_affected(resource conn_id)\",\n        \"Returns the number of records affected by the query\"\n    ],\n    \"mssql_select_db\": [\n        \"bool mssql_select_db(string database_name [, resource conn_id])\",\n        \"Select a MS-SQL database\"\n    ],\n    \"mt_getrandmax\": [\n        \"int mt_getrandmax(void)\",\n        \"Returns the maximum value a random number from Mersenne Twister can have\"\n    ],\n    \"mt_rand\": [\n        \"int mt_rand([int min, int max])\",\n        \"Returns a random number from Mersenne Twister\"\n    ],\n    \"mt_srand\": [\n        \"void mt_srand([int seed])\",\n        \"Seeds Mersenne Twister random number generator\"\n    ],\n    \"mysql_affected_rows\": [\n        \"int mysql_affected_rows([int link_identifier])\",\n        \"Gets number of affected rows in previous MySQL operation\"\n    ],\n    \"mysql_client_encoding\": [\n        \"string mysql_client_encoding([int link_identifier])\",\n        \"Returns the default character set for the current connection\"\n    ],\n    \"mysql_close\": [\n        \"bool mysql_close([int link_identifier])\",\n        \"Close a MySQL connection\"\n    ],\n    \"mysql_connect\": [\n        \"resource mysql_connect([string hostname[:port][:\\/path\\/to\\/socket] [, string username [, string password [, bool new [, int flags]]]]])\",\n        \"Opens a connection to a MySQL Server\"\n    ],\n    \"mysql_create_db\": [\n        \"bool mysql_create_db(string database_name [, int link_identifier])\",\n        \"Create a MySQL database\"\n    ],\n    \"mysql_data_seek\": [\n        \"bool mysql_data_seek(resource result, int row_number)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysql_db_query\": [\n        \"resource mysql_db_query(string database_name, string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_drop_db\": [\n        \"bool mysql_drop_db(string database_name [, int link_identifier])\",\n        \"Drops (delete) a MySQL database\"\n    ],\n    \"mysql_errno\": [\n        \"int mysql_errno([int link_identifier])\",\n        \"Returns the number of the error message from previous MySQL operation\"\n    ],\n    \"mysql_error\": [\n        \"string mysql_error([int link_identifier])\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysql_escape_string\": [\n        \"string mysql_escape_string(string to_be_escaped)\",\n        \"Escape string for mysql query\"\n    ],\n    \"mysql_fetch_array\": [\n        \"array mysql_fetch_array(resource result [, int result_type])\",\n        \"Fetch a result row as an array (associative, numeric or both)\"\n    ],\n    \"mysql_fetch_assoc\": [\n        \"array mysql_fetch_assoc(resource result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysql_fetch_field\": [\n        \"object mysql_fetch_field(resource result [, int field_offset])\",\n        \"Gets column information from a result and return as an object\"\n    ],\n    \"mysql_fetch_lengths\": [\n        \"array mysql_fetch_lengths(resource result)\",\n        \"Gets max data size of each column in a result\"\n    ],\n    \"mysql_fetch_object\": [\n        \"object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysql_fetch_row\": [\n        \"array mysql_fetch_row(resource result)\",\n        \"Gets a result row as an enumerated array\"\n    ],\n    \"mysql_field_flags\": [\n        \"string mysql_field_flags(resource result, int field_offset)\",\n        \"Gets the flags associated with the specified field in a result\"\n    ],\n    \"mysql_field_len\": [\n        \"int mysql_field_len(resource result, int field_offset)\",\n        \"Returns the length of the specified field\"\n    ],\n    \"mysql_field_name\": [\n        \"string mysql_field_name(resource result, int field_index)\",\n        \"Gets the name of the specified field in a result\"\n    ],\n    \"mysql_field_seek\": [\n        \"bool mysql_field_seek(resource result, int field_offset)\",\n        \"Sets result pointer to a specific field offset\"\n    ],\n    \"mysql_field_table\": [\n        \"string mysql_field_table(resource result, int field_offset)\",\n        \"Gets name of the table the specified field is in\"\n    ],\n    \"mysql_field_type\": [\n        \"string mysql_field_type(resource result, int field_offset)\",\n        \"Gets the type of the specified field in a result\"\n    ],\n    \"mysql_free_result\": [\n        \"bool mysql_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"mysql_get_client_info\": [\n        \"string mysql_get_client_info(void)\",\n        \"Returns a string that represents the client library version\"\n    ],\n    \"mysql_get_host_info\": [\n        \"string mysql_get_host_info([int link_identifier])\",\n        \"Returns a string describing the type of connection in use, including the server host name\"\n    ],\n    \"mysql_get_proto_info\": [\n        \"int mysql_get_proto_info([int link_identifier])\",\n        \"Returns the protocol version used by current connection\"\n    ],\n    \"mysql_get_server_info\": [\n        \"string mysql_get_server_info([int link_identifier])\",\n        \"Returns a string that represents the server version number\"\n    ],\n    \"mysql_info\": [\n        \"string mysql_info([int link_identifier])\",\n        \"Returns a string containing information about the most recent query\"\n    ],\n    \"mysql_insert_id\": [\n        \"int mysql_insert_id([int link_identifier])\",\n        \"Gets the ID generated from the previous INSERT operation\"\n    ],\n    \"mysql_list_dbs\": [\n        \"resource mysql_list_dbs([int link_identifier])\",\n        \"List databases available on a MySQL server\"\n    ],\n    \"mysql_list_fields\": [\n        \"resource mysql_list_fields(string database_name, string table_name [, int link_identifier])\",\n        \"List MySQL result fields\"\n    ],\n    \"mysql_list_processes\": [\n        \"resource mysql_list_processes([int link_identifier])\",\n        \"Returns a result set describing the current server threads\"\n    ],\n    \"mysql_list_tables\": [\n        \"resource mysql_list_tables(string database_name [, int link_identifier])\",\n        \"List tables in a MySQL database\"\n    ],\n    \"mysql_num_fields\": [\n        \"int mysql_num_fields(resource result)\",\n        \"Gets number of fields in a result\"\n    ],\n    \"mysql_num_rows\": [\n        \"int mysql_num_rows(resource result)\",\n        \"Gets number of rows in a result\"\n    ],\n    \"mysql_pconnect\": [\n        \"resource mysql_pconnect([string hostname[:port][:\\/path\\/to\\/socket] [, string username [, string password [, int flags]]]])\",\n        \"Opens a persistent connection to a MySQL Server\"\n    ],\n    \"mysql_ping\": [\n        \"bool mysql_ping([int link_identifier])\",\n        \"Ping a server connection. If no connection then reconnect.\"\n    ],\n    \"mysql_query\": [\n        \"resource mysql_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL\"\n    ],\n    \"mysql_real_escape_string\": [\n        \"string mysql_real_escape_string(string to_be_escaped [, int link_identifier])\",\n        \"Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysql_result\": [\n        \"mixed mysql_result(resource result, int row [, mixed field])\",\n        \"Gets result data\"\n    ],\n    \"mysql_select_db\": [\n        \"bool mysql_select_db(string database_name [, int link_identifier])\",\n        \"Selects a MySQL database\"\n    ],\n    \"mysql_set_charset\": [\n        \"bool mysql_set_charset(string csname [, int link_identifier])\",\n        \"sets client character set\"\n    ],\n    \"mysql_stat\": [\n        \"string mysql_stat([int link_identifier])\",\n        \"Returns a string containing status information\"\n    ],\n    \"mysql_thread_id\": [\n        \"int mysql_thread_id([int link_identifier])\",\n        \"Returns the thread id of current connection\"\n    ],\n    \"mysql_unbuffered_query\": [\n        \"resource mysql_unbuffered_query(string query [, int link_identifier])\",\n        \"Sends an SQL query to MySQL, without fetching and buffering the result rows\"\n    ],\n    \"mysqli_affected_rows\": [\n        \"mixed mysqli_affected_rows(object link)\",\n        \"Get number of affected rows in previous MySQL operation\"\n    ],\n    \"mysqli_autocommit\": [\n        \"bool mysqli_autocommit(object link, bool mode)\",\n        \"Turn auto commit on or of\"\n    ],\n    \"mysqli_cache_stats\": [\n        \"array mysqli_cache_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_change_user\": [\n        \"bool mysqli_change_user(object link, string user, string password, string database)\",\n        \"Change logged-in user of the active connection\"\n    ],\n    \"mysqli_character_set_name\": [\n        \"string mysqli_character_set_name(object link)\",\n        \"Returns the name of the character set used for this connection\"\n    ],\n    \"mysqli_close\": [\n        \"bool mysqli_close(object link)\",\n        \"Close connection\"\n    ],\n    \"mysqli_commit\": [\n        \"bool mysqli_commit(object link)\",\n        \"Commit outstanding actions and close transaction\"\n    ],\n    \"mysqli_connect\": [\n        \"object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_connect_errno\": [\n        \"int mysqli_connect_errno(void)\",\n        \"Returns the numerical value of the error message from last connect command\"\n    ],\n    \"mysqli_connect_error\": [\n        \"string mysqli_connect_error(void)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_data_seek\": [\n        \"bool mysqli_data_seek(object result, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_debug\": [\n        \"void mysqli_debug(string debug)\",\n        \"\"\n    ],\n    \"mysqli_dump_debug_info\": [\n        \"bool mysqli_dump_debug_info(object link)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_end\": [\n        \"void mysqli_embedded_server_end(void)\",\n        \"\"\n    ],\n    \"mysqli_embedded_server_start\": [\n        \"bool mysqli_embedded_server_start(bool start, array arguments, array groups)\",\n        \"initialize and start embedded server\"\n    ],\n    \"mysqli_errno\": [\n        \"int mysqli_errno(object link)\",\n        \"Returns the numerical value of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_error\": [\n        \"string mysqli_error(object link)\",\n        \"Returns the text of the error message from previous MySQL operation\"\n    ],\n    \"mysqli_fetch_all\": [\n        \"mixed mysqli_fetch_all (object result [,int resulttype])\",\n        \"Fetches all result rows as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_array\": [\n        \"mixed mysqli_fetch_array (object result [,int resulttype])\",\n        \"Fetch a result row as an associative array, a numeric array, or both\"\n    ],\n    \"mysqli_fetch_assoc\": [\n        \"mixed mysqli_fetch_assoc (object result)\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"mysqli_fetch_field\": [\n        \"mixed mysqli_fetch_field (object result)\",\n        \"Get column information from a result and return as an object\"\n    ],\n    \"mysqli_fetch_field_direct\": [\n        \"mixed mysqli_fetch_field_direct (object result, int offset)\",\n        \"Fetch meta-data for a single field\"\n    ],\n    \"mysqli_fetch_fields\": [\n        \"mixed mysqli_fetch_fields (object result)\",\n        \"Return array of objects containing field meta-data\"\n    ],\n    \"mysqli_fetch_lengths\": [\n        \"mixed mysqli_fetch_lengths (object result)\",\n        \"Get the length of each output in a result\"\n    ],\n    \"mysqli_fetch_object\": [\n        \"mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"mysqli_fetch_row\": [\n        \"array mysqli_fetch_row (object result)\",\n        \"Get a result row as an enumerated array\"\n    ],\n    \"mysqli_field_count\": [\n        \"int mysqli_field_count(object link)\",\n        \"Fetch the number of fields returned by the last query for the given link\"\n    ],\n    \"mysqli_field_seek\": [\n        \"int mysqli_field_seek(object result, int fieldnr)\",\n        \"Set result pointer to a specified field offset\"\n    ],\n    \"mysqli_field_tell\": [\n        \"int mysqli_field_tell(object result)\",\n        \"Get current field offset of result pointer\"\n    ],\n    \"mysqli_free_result\": [\n        \"void mysqli_free_result(object result)\",\n        \"Free query result memory for the given result handle\"\n    ],\n    \"mysqli_get_charset\": [\n        \"object mysqli_get_charset(object link)\",\n        \"returns a character set object\"\n    ],\n    \"mysqli_get_client_info\": [\n        \"string mysqli_get_client_info(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_client_stats\": [\n        \"array mysqli_get_client_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_client_version\": [\n        \"int mysqli_get_client_version(void)\",\n        \"Get MySQL client info\"\n    ],\n    \"mysqli_get_connection_stats\": [\n        \"array mysqli_get_connection_stats(void)\",\n        \"Returns statistics about the zval cache\"\n    ],\n    \"mysqli_get_host_info\": [\n        \"string mysqli_get_host_info (object link)\",\n        \"Get MySQL host info\"\n    ],\n    \"mysqli_get_proto_info\": [\n        \"int mysqli_get_proto_info(object link)\",\n        \"Get MySQL protocol information\"\n    ],\n    \"mysqli_get_server_info\": [\n        \"string mysqli_get_server_info(object link)\",\n        \"Get MySQL server info\"\n    ],\n    \"mysqli_get_server_version\": [\n        \"int mysqli_get_server_version(object link)\",\n        \"Return the MySQL version for the server referenced by the given link\"\n    ],\n    \"mysqli_get_warnings\": [\n        \"object mysqli_get_warnings(object link) *\\/\",\n        \"PHP_FUNCTION(mysqli_get_warnings) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &mysql_link, mysqli_link_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   if (mysql_warning_count(mysql->mysql)) {   w = php_get_warnings(mysql->mysql TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry);  } \\/* }}}\"\n    ],\n    \"mysqli_info\": [\n        \"string mysqli_info(object link)\",\n        \"Get information about the most recent query\"\n    ],\n    \"mysqli_init\": [\n        \"resource mysqli_init(void)\",\n        \"Initialize mysqli and return a resource for use with mysql_real_connect\"\n    ],\n    \"mysqli_insert_id\": [\n        \"mixed mysqli_insert_id(object link)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_kill\": [\n        \"bool mysqli_kill(object link, int processid)\",\n        \"Kill a mysql process on the server\"\n    ],\n    \"mysqli_link_construct\": [\n        \"object mysqli_link_construct()\",\n        \"\"\n    ],\n    \"mysqli_more_results\": [\n        \"bool mysqli_more_results(object link)\",\n        \"check if there any more query results from a multi query\"\n    ],\n    \"mysqli_multi_query\": [\n        \"bool mysqli_multi_query(object link, string query)\",\n        \"allows to execute multiple queries\"\n    ],\n    \"mysqli_next_result\": [\n        \"bool mysqli_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_num_fields\": [\n        \"int mysqli_num_fields(object result)\",\n        \"Get number of fields in result\"\n    ],\n    \"mysqli_num_rows\": [\n        \"mixed mysqli_num_rows(object result)\",\n        \"Get number of rows in result\"\n    ],\n    \"mysqli_options\": [\n        \"bool mysqli_options(object link, int flags, mixed values)\",\n        \"Set options\"\n    ],\n    \"mysqli_ping\": [\n        \"bool mysqli_ping(object link)\",\n        \"Ping a server connection or reconnect if there is no connection\"\n    ],\n    \"mysqli_poll\": [\n        \"int mysqli_poll(array read, array write, array error, long sec [, long usec])\",\n        \"Poll connections\"\n    ],\n    \"mysqli_prepare\": [\n        \"mixed mysqli_prepare(object link, string query)\",\n        \"Prepare a SQL statement for execution\"\n    ],\n    \"mysqli_query\": [\n        \"mixed mysqli_query(object link, string query [,int resultmode]) *\\/\",\n        \"PHP_FUNCTION(mysqli_query) {  MY_MYSQL   *mysql;  zval    *mysql_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQL_RES    *result;  char    *query = NULL;  unsigned int   query_len;  unsigned long   resultmode = MYSQLI_STORE_RESULT;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"Os|l\\\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) {   return;  }   if (!query_len) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Empty query\\\");   RETURN_FALSE;  }  if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) {   php_error_docref(NULL TSRMLS_CC, E_WARNING, \\\"Invalid value for resultmode\\\");   RETURN_FALSE;  }   MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \\\"mysqli_link\\\", MYSQLI_STATUS_VALID);   MYSQLI_DISABLE_MQ;   #ifdef MYSQLI_USE_MYSQLND  if (resultmode & MYSQLI_ASYNC) {   if (mysqli_async_query(mysql->mysql, query, query_len)) {    MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);    RETURN_FALSE;   }   mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC;   RETURN_TRUE;  } #endif   if (mysql_real_query(mysql->mysql, query, query_len)) {   MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);   RETURN_FALSE;  }   if (!mysql_field_count(mysql->mysql)) {   \\/* no result set - not a SELECT\"\n    ],\n    \"mysqli_real_connect\": [\n        \"bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])\",\n        \"Open a connection to a mysql server\"\n    ],\n    \"mysqli_real_escape_string\": [\n        \"string mysqli_real_escape_string(object link, string escapestr)\",\n        \"Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection\"\n    ],\n    \"mysqli_real_query\": [\n        \"bool mysqli_real_query(object link, string query)\",\n        \"Binary-safe version of mysql_query()\"\n    ],\n    \"mysqli_reap_async_query\": [\n        \"int mysqli_reap_async_query(object link)\",\n        \"Poll connections\"\n    ],\n    \"mysqli_refresh\": [\n        \"bool mysqli_refresh(object link, long options)\",\n        \"Flush tables or caches, or reset replication server information\"\n    ],\n    \"mysqli_report\": [\n        \"bool mysqli_report(int flags)\",\n        \"sets report level\"\n    ],\n    \"mysqli_rollback\": [\n        \"bool mysqli_rollback(object link)\",\n        \"Undo actions from current transaction\"\n    ],\n    \"mysqli_select_db\": [\n        \"bool mysqli_select_db(object link, string dbname)\",\n        \"Select a MySQL database\"\n    ],\n    \"mysqli_set_charset\": [\n        \"bool mysqli_set_charset(object link, string csname)\",\n        \"sets client character set\"\n    ],\n    \"mysqli_set_local_infile_default\": [\n        \"void mysqli_set_local_infile_default(object link)\",\n        \"unsets user defined handler for load local infile command\"\n    ],\n    \"mysqli_set_local_infile_handler\": [\n        \"bool mysqli_set_local_infile_handler(object link, callback read_func)\",\n        \"Set callback functions for LOAD DATA LOCAL INFILE\"\n    ],\n    \"mysqli_sqlstate\": [\n        \"string mysqli_sqlstate(object link)\",\n        \"Returns the SQLSTATE error from previous MySQL operation\"\n    ],\n    \"mysqli_ssl_set\": [\n        \"bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])\",\n        \"\"\n    ],\n    \"mysqli_stat\": [\n        \"mixed mysqli_stat(object link)\",\n        \"Get current system status\"\n    ],\n    \"mysqli_stmt_affected_rows\": [\n        \"mixed mysqli_stmt_affected_rows(object stmt)\",\n        \"Return the number of rows affected in the last query for the given link\"\n    ],\n    \"mysqli_stmt_attr_get\": [\n        \"int mysqli_stmt_attr_get(object stmt, long attr)\",\n        \"\"\n    ],\n    \"mysqli_stmt_attr_set\": [\n        \"int mysqli_stmt_attr_set(object stmt, long attr, long mode)\",\n        \"\"\n    ],\n    \"mysqli_stmt_bind_param\": [\n        \"bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])\",\n        \"Bind variables to a prepared statement as parameters\"\n    ],\n    \"mysqli_stmt_bind_result\": [\n        \"bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])\",\n        \"Bind variables to a prepared statement for result storage\"\n    ],\n    \"mysqli_stmt_close\": [\n        \"bool mysqli_stmt_close(object stmt)\",\n        \"Close statement\"\n    ],\n    \"mysqli_stmt_data_seek\": [\n        \"void mysqli_stmt_data_seek(object stmt, int offset)\",\n        \"Move internal result pointer\"\n    ],\n    \"mysqli_stmt_errno\": [\n        \"int mysqli_stmt_errno(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_error\": [\n        \"string mysqli_stmt_error(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_execute\": [\n        \"bool mysqli_stmt_execute(object stmt)\",\n        \"Execute a prepared statement\"\n    ],\n    \"mysqli_stmt_fetch\": [\n        \"mixed mysqli_stmt_fetch(object stmt)\",\n        \"Fetch results from a prepared statement into the bound variables\"\n    ],\n    \"mysqli_stmt_field_count\": [\n        \"int mysqli_stmt_field_count(object stmt) {\",\n        \"Return the number of result columns for the given statement\"\n    ],\n    \"mysqli_stmt_free_result\": [\n        \"void mysqli_stmt_free_result(object stmt)\",\n        \"Free stored result memory for the given statement handle\"\n    ],\n    \"mysqli_stmt_get_result\": [\n        \"object mysqli_stmt_get_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_stmt_get_warnings\": [\n        \"object mysqli_stmt_get_warnings(object link) *\\/\",\n        \"PHP_FUNCTION(mysqli_stmt_get_warnings) {  MY_STMT    *stmt;  zval    *stmt_link;  MYSQLI_RESOURCE  *mysqli_resource;  MYSQLI_WARNING  *w;   if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \\\"O\\\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) {   return;  }  MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \\\"mysqli_stmt\\\", MYSQLI_STATUS_VALID);   if (mysqli_stmt_warning_count(stmt->stmt)) {   w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC);   } else {   RETURN_FALSE;  }  mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE));  mysqli_resource->ptr = mysqli_resource->info = (void *)w;  mysqli_resource->status = MYSQLI_STATUS_VALID;  MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } \\/* }}}\"\n    ],\n    \"mysqli_stmt_init\": [\n        \"mixed mysqli_stmt_init(object link)\",\n        \"Initialize statement object\"\n    ],\n    \"mysqli_stmt_insert_id\": [\n        \"mixed mysqli_stmt_insert_id(object stmt)\",\n        \"Get the ID generated from the previous INSERT operation\"\n    ],\n    \"mysqli_stmt_next_result\": [\n        \"bool mysqli_stmt_next_result(object link)\",\n        \"read next result from multi_query\"\n    ],\n    \"mysqli_stmt_num_rows\": [\n        \"mixed mysqli_stmt_num_rows(object stmt)\",\n        \"Return the number of rows in statements result set\"\n    ],\n    \"mysqli_stmt_param_count\": [\n        \"int mysqli_stmt_param_count(object stmt)\",\n        \"Return the number of parameter for the given statement\"\n    ],\n    \"mysqli_stmt_prepare\": [\n        \"bool mysqli_stmt_prepare(object stmt, string query)\",\n        \"prepare server side statement with query\"\n    ],\n    \"mysqli_stmt_reset\": [\n        \"bool mysqli_stmt_reset(object stmt)\",\n        \"reset a prepared statement\"\n    ],\n    \"mysqli_stmt_result_metadata\": [\n        \"mixed mysqli_stmt_result_metadata(object stmt)\",\n        \"return result set from statement\"\n    ],\n    \"mysqli_stmt_send_long_data\": [\n        \"bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)\",\n        \"\"\n    ],\n    \"mysqli_stmt_sqlstate\": [\n        \"string mysqli_stmt_sqlstate(object stmt)\",\n        \"\"\n    ],\n    \"mysqli_stmt_store_result\": [\n        \"bool mysqli_stmt_store_result(stmt)\",\n        \"\"\n    ],\n    \"mysqli_store_result\": [\n        \"object mysqli_store_result(object link)\",\n        \"Buffer result set on client\"\n    ],\n    \"mysqli_thread_id\": [\n        \"int mysqli_thread_id(object link)\",\n        \"Return the current thread ID\"\n    ],\n    \"mysqli_thread_safe\": [\n        \"bool mysqli_thread_safe(void)\",\n        \"Return whether thread safety is given or not\"\n    ],\n    \"mysqli_use_result\": [\n        \"mixed mysqli_use_result(object link)\",\n        \"Directly retrieve query results - do not buffer results on client side\"\n    ],\n    \"mysqli_warning_count\": [\n        \"int mysqli_warning_count (object link)\",\n        \"Return number of warnings from the last query for the given link\"\n    ],\n    \"natcasesort\": [\n        \"void natcasesort(array &array_arg)\",\n        \"Sort an array using case-insensitive natural sort\"\n    ],\n    \"natsort\": [\n        \"void natsort(array &array_arg)\",\n        \"Sort an array using natural sort\"\n    ],\n    \"next\": [\n        \"mixed next(array array_arg)\",\n        \"Move array argument's internal pointer to the next element and return it\"\n    ],\n    \"ngettext\": [\n        \"string ngettext(string MSGID1, string MSGID2, int N)\",\n        \"Plural version of gettext()\"\n    ],\n    \"nl2br\": [\n        \"string nl2br(string str [, bool is_xhtml])\",\n        \"Converts newlines to HTML line breaks\"\n    ],\n    \"nl_langinfo\": [\n        \"string nl_langinfo(int item)\",\n        \"Query language and locale information\"\n    ],\n    \"normalizer_is_normalize\": [\n        \"bool normalizer_is_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Test if a string is in a given normalization form.\"\n    ],\n    \"normalizer_normalize\": [\n        \"string normalizer_normalize( string $input [, string $form = FORM_C] )\",\n        \"* Normalize a string.\"\n    ],\n    \"nsapi_request_headers\": [\n        \"array nsapi_request_headers(void)\",\n        \"Get all headers from the request\"\n    ],\n    \"nsapi_response_headers\": [\n        \"array nsapi_response_headers(void)\",\n        \"Get all headers from the response\"\n    ],\n    \"nsapi_virtual\": [\n        \"bool nsapi_virtual(string uri)\",\n        \"Perform an NSAPI sub-request\"\n    ],\n    \"number_format\": [\n        \"string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])\",\n        \"Formats a number with grouped thousands\"\n    ],\n    \"numfmt_create\": [\n        \"NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )\",\n        \"* Create number formatter.\"\n    ],\n    \"numfmt_format\": [\n        \"mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )\",\n        \"* Format a number.\"\n    ],\n    \"numfmt_format_currency\": [\n        \"mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )\",\n        \"* Format a number as currency.\"\n    ],\n    \"numfmt_get_attribute\": [\n        \"mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_get_error_code\": [\n        \"int numfmt_get_error_code( NumberFormatter $nf )\",\n        \"* Get formatter's last error code.\"\n    ],\n    \"numfmt_get_error_message\": [\n        \"string numfmt_get_error_message( NumberFormatter $nf )\",\n        \"* Get text description for formatter's last error code.\"\n    ],\n    \"numfmt_get_locale\": [\n        \"string numfmt_get_locale( NumberFormatter $nf[, int type] )\",\n        \"* Get formatter locale.\"\n    ],\n    \"numfmt_get_pattern\": [\n        \"string numfmt_get_pattern( NumberFormatter $nf )\",\n        \"* Get formatter pattern.\"\n    ],\n    \"numfmt_get_symbol\": [\n        \"string numfmt_get_symbol( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter symbol value.\"\n    ],\n    \"numfmt_get_text_attribute\": [\n        \"string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_parse\": [\n        \"mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])\",\n        \"* Parse a number.\"\n    ],\n    \"numfmt_parse_currency\": [\n        \"double numfmt_parse_currency( NumberFormatter $nf, string $str, string $&currency[, int $&position] )\",\n        \"* Parse a number as currency.\"\n    ],\n    \"numfmt_parse_message\": [\n        \"array numfmt_parse_message( string $locale, string $pattern, string $source )\",\n        \"* Parse a message.\"\n    ],\n    \"numfmt_set_attribute\": [\n        \"bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"numfmt_set_pattern\": [\n        \"bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )\",\n        \"* Set formatter pattern.\"\n    ],\n    \"numfmt_set_symbol\": [\n        \"bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )\",\n        \"* Set formatter symbol value.\"\n    ],\n    \"numfmt_set_text_attribute\": [\n        \"bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )\",\n        \"* Get formatter attribute value.\"\n    ],\n    \"ob_clean\": [\n        \"bool ob_clean(void)\",\n        \"Clean (delete) the current output buffer\"\n    ],\n    \"ob_end_clean\": [\n        \"bool ob_end_clean(void)\",\n        \"Clean the output buffer, and delete current output buffer\"\n    ],\n    \"ob_end_flush\": [\n        \"bool ob_end_flush(void)\",\n        \"Flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_flush\": [\n        \"bool ob_flush(void)\",\n        \"Flush (send) contents of the output buffer. The last buffer content is sent to next buffer\"\n    ],\n    \"ob_get_clean\": [\n        \"bool ob_get_clean(void)\",\n        \"Get current buffer contents and delete current output buffer\"\n    ],\n    \"ob_get_contents\": [\n        \"string ob_get_contents(void)\",\n        \"Return the contents of the output buffer\"\n    ],\n    \"ob_get_flush\": [\n        \"bool ob_get_flush(void)\",\n        \"Get current buffer contents, flush (send) the output buffer, and delete current output buffer\"\n    ],\n    \"ob_get_length\": [\n        \"int ob_get_length(void)\",\n        \"Return the length of the output buffer\"\n    ],\n    \"ob_get_level\": [\n        \"int ob_get_level(void)\",\n        \"Return the nesting level of the output buffer\"\n    ],\n    \"ob_get_status\": [\n        \"false|array ob_get_status([bool full_status])\",\n        \"Return the status of the active or all output buffers\"\n    ],\n    \"ob_gzhandler\": [\n        \"string ob_gzhandler(string str, int mode)\",\n        \"Encode str based on accept-encoding setting - designed to be called from ob_start()\"\n    ],\n    \"ob_iconv_handler\": [\n        \"string ob_iconv_handler(string contents, int status)\",\n        \"Returns str in output buffer converted to the iconv.output_encoding character set\"\n    ],\n    \"ob_implicit_flush\": [\n        \"void ob_implicit_flush([int flag])\",\n        \"Turn implicit flush on\\/off and is equivalent to calling flush() after every output call\"\n    ],\n    \"ob_list_handlers\": [\n        \"false|array ob_list_handlers()\",\n        \"*  List all output_buffers in an array\"\n    ],\n    \"ob_start\": [\n        \"bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])\",\n        \"Turn on Output Buffering (specifying an optional output handler).\"\n    ],\n    \"oci_bind_array_by_name\": [\n        \"bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])\",\n        \"Bind a PHP array to an Oracle PL\\/SQL type by name\"\n    ],\n    \"oci_bind_by_name\": [\n        \"bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])\",\n        \"Bind a PHP variable to an Oracle placeholder by name\"\n    ],\n    \"oci_cancel\": [\n        \"bool oci_cancel(resource stmt)\",\n        \"Cancel reading from a cursor\"\n    ],\n    \"oci_close\": [\n        \"bool oci_close(resource connection)\",\n        \"Disconnect from database\"\n    ],\n    \"oci_collection_append\": [\n        \"bool oci_collection_append(string value)\",\n        \"Append an object to the collection\"\n    ],\n    \"oci_collection_assign\": [\n        \"bool oci_collection_assign(object from)\",\n        \"Assign a collection from another existing collection\"\n    ],\n    \"oci_collection_element_assign\": [\n        \"bool oci_collection_element_assign(int index, string val)\",\n        \"Assign element val to collection at index ndx\"\n    ],\n    \"oci_collection_element_get\": [\n        \"string oci_collection_element_get(int ndx)\",\n        \"Retrieve the value at collection index ndx\"\n    ],\n    \"oci_collection_max\": [\n        \"int oci_collection_max()\",\n        \"Return the max value of a collection. For a varray this is the maximum length of the array\"\n    ],\n    \"oci_collection_size\": [\n        \"int oci_collection_size()\",\n        \"Return the size of a collection\"\n    ],\n    \"oci_collection_trim\": [\n        \"bool oci_collection_trim(int num)\",\n        \"Trim num elements from the end of a collection\"\n    ],\n    \"oci_commit\": [\n        \"bool oci_commit(resource connection)\",\n        \"Commit the current context\"\n    ],\n    \"oci_connect\": [\n        \"resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_define_by_name\": [\n        \"bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])\",\n        \"Define a PHP variable to an Oracle column by name\"\n    ],\n    \"oci_error\": [\n        \"array oci_error([resource stmt|connection|global])\",\n        \"Return the last error of stmt|connection|global. If no error happened returns false.\"\n    ],\n    \"oci_execute\": [\n        \"bool oci_execute(resource stmt [, int mode])\",\n        \"Execute a parsed statement\"\n    ],\n    \"oci_fetch\": [\n        \"bool oci_fetch(resource stmt)\",\n        \"Prepare a new row of data for reading\"\n    ],\n    \"oci_fetch_all\": [\n        \"int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])\",\n        \"Fetch all rows of result data into an array\"\n    ],\n    \"oci_fetch_array\": [\n        \"array oci_fetch_array( resource stmt [, int mode ])\",\n        \"Fetch a result row as an array\"\n    ],\n    \"oci_fetch_assoc\": [\n        \"array oci_fetch_assoc( resource stmt )\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"oci_fetch_object\": [\n        \"object oci_fetch_object( resource stmt )\",\n        \"Fetch a result row as an object\"\n    ],\n    \"oci_fetch_row\": [\n        \"array oci_fetch_row( resource stmt )\",\n        \"Fetch a result row as an enumerated array\"\n    ],\n    \"oci_field_is_null\": [\n        \"bool oci_field_is_null(resource stmt, int col)\",\n        \"Tell whether a column is NULL\"\n    ],\n    \"oci_field_name\": [\n        \"string oci_field_name(resource stmt, int col)\",\n        \"Tell the name of a column\"\n    ],\n    \"oci_field_precision\": [\n        \"int oci_field_precision(resource stmt, int col)\",\n        \"Tell the precision of a column\"\n    ],\n    \"oci_field_scale\": [\n        \"int oci_field_scale(resource stmt, int col)\",\n        \"Tell the scale of a column\"\n    ],\n    \"oci_field_size\": [\n        \"int oci_field_size(resource stmt, int col)\",\n        \"Tell the maximum data size of a column\"\n    ],\n    \"oci_field_type\": [\n        \"mixed oci_field_type(resource stmt, int col)\",\n        \"Tell the data type of a column\"\n    ],\n    \"oci_field_type_raw\": [\n        \"int oci_field_type_raw(resource stmt, int col)\",\n        \"Tell the raw oracle data type of a column\"\n    ],\n    \"oci_free_collection\": [\n        \"bool oci_free_collection()\",\n        \"Deletes collection object\"\n    ],\n    \"oci_free_descriptor\": [\n        \"bool oci_free_descriptor()\",\n        \"Deletes large object description\"\n    ],\n    \"oci_free_statement\": [\n        \"bool oci_free_statement(resource stmt)\",\n        \"Free all resources associated with a statement\"\n    ],\n    \"oci_internal_debug\": [\n        \"void oci_internal_debug(int onoff)\",\n        \"Toggle internal debugging output for the OCI extension\"\n    ],\n    \"oci_lob_append\": [\n        \"bool oci_lob_append( object lob )\",\n        \"Appends data from a LOB to another LOB\"\n    ],\n    \"oci_lob_close\": [\n        \"bool oci_lob_close()\",\n        \"Closes lob descriptor\"\n    ],\n    \"oci_lob_copy\": [\n        \"bool oci_lob_copy( object lob_to, object lob_from [, int length ] )\",\n        \"Copies data from a LOB to another LOB\"\n    ],\n    \"oci_lob_eof\": [\n        \"bool oci_lob_eof()\",\n        \"Checks if EOF is reached\"\n    ],\n    \"oci_lob_erase\": [\n        \"int oci_lob_erase( [ int offset [, int length ] ] )\",\n        \"Erases a specified portion of the internal LOB, starting at a specified offset\"\n    ],\n    \"oci_lob_export\": [\n        \"bool oci_lob_export([string filename [, int start [, int length]]])\",\n        \"Writes a large object into a file\"\n    ],\n    \"oci_lob_flush\": [\n        \"bool oci_lob_flush( [ int flag ] )\",\n        \"Flushes the LOB buffer\"\n    ],\n    \"oci_lob_import\": [\n        \"bool oci_lob_import( string filename )\",\n        \"Loads file into a LOB\"\n    ],\n    \"oci_lob_is_equal\": [\n        \"bool oci_lob_is_equal( object lob1, object lob2 )\",\n        \"Tests to see if two LOB\\/FILE locators are equal\"\n    ],\n    \"oci_lob_load\": [\n        \"string oci_lob_load()\",\n        \"Loads a large object\"\n    ],\n    \"oci_lob_read\": [\n        \"string oci_lob_read( int length )\",\n        \"Reads particular part of a large object\"\n    ],\n    \"oci_lob_rewind\": [\n        \"bool oci_lob_rewind()\",\n        \"Rewind pointer of a LOB\"\n    ],\n    \"oci_lob_save\": [\n        \"bool oci_lob_save( string data [, int offset ])\",\n        \"Saves a large object\"\n    ],\n    \"oci_lob_seek\": [\n        \"bool oci_lob_seek( int offset [, int whence ])\",\n        \"Moves the pointer of a LOB\"\n    ],\n    \"oci_lob_size\": [\n        \"int oci_lob_size()\",\n        \"Returns size of a large object\"\n    ],\n    \"oci_lob_tell\": [\n        \"int oci_lob_tell()\",\n        \"Tells LOB pointer position\"\n    ],\n    \"oci_lob_truncate\": [\n        \"bool oci_lob_truncate( [ int length ])\",\n        \"Truncates a LOB\"\n    ],\n    \"oci_lob_write\": [\n        \"int oci_lob_write( string string [, int length ])\",\n        \"Writes data to current position of a LOB\"\n    ],\n    \"oci_lob_write_temporary\": [\n        \"bool oci_lob_write_temporary(string var [, int lob_type])\",\n        \"Writes temporary blob\"\n    ],\n    \"oci_new_collection\": [\n        \"object oci_new_collection(resource connection, string tdo [, string schema])\",\n        \"Initialize a new collection\"\n    ],\n    \"oci_new_connect\": [\n        \"resource oci_new_connect(string user, string pass [, string db])\",\n        \"Connect to an Oracle database and log on. Returns a new session.\"\n    ],\n    \"oci_new_cursor\": [\n        \"resource oci_new_cursor(resource connection)\",\n        \"Return a new cursor (Statement-Handle) - use this to bind ref-cursors!\"\n    ],\n    \"oci_new_descriptor\": [\n        \"object oci_new_descriptor(resource connection [, int type])\",\n        \"Initialize a new empty descriptor LOB\\/FILE (LOB is default)\"\n    ],\n    \"oci_num_fields\": [\n        \"int oci_num_fields(resource stmt)\",\n        \"Return the number of result columns in a statement\"\n    ],\n    \"oci_num_rows\": [\n        \"int oci_num_rows(resource stmt)\",\n        \"Return the row count of an OCI statement\"\n    ],\n    \"oci_parse\": [\n        \"resource oci_parse(resource connection, string query)\",\n        \"Parse a query and return a statement\"\n    ],\n    \"oci_password_change\": [\n        \"bool oci_password_change(resource connection, string username, string old_password, string new_password)\",\n        \"Changes the password of an account\"\n    ],\n    \"oci_pconnect\": [\n        \"resource oci_pconnect(string user, string pass [, string db [, string charset ]])\",\n        \"Connect to an Oracle database using a persistent connection and log on. Returns a new session.\"\n    ],\n    \"oci_result\": [\n        \"string oci_result(resource stmt, mixed column)\",\n        \"Return a single column of result data\"\n    ],\n    \"oci_rollback\": [\n        \"bool oci_rollback(resource connection)\",\n        \"Rollback the current context\"\n    ],\n    \"oci_server_version\": [\n        \"string oci_server_version(resource connection)\",\n        \"Return a string containing server version information\"\n    ],\n    \"oci_set_action\": [\n        \"bool oci_set_action(resource connection, string value)\",\n        \"Sets the action attribute on the connection\"\n    ],\n    \"oci_set_client_identifier\": [\n        \"bool oci_set_client_identifier(resource connection, string value)\",\n        \"Sets the client identifier attribute on the connection\"\n    ],\n    \"oci_set_client_info\": [\n        \"bool oci_set_client_info(resource connection, string value)\",\n        \"Sets the client info attribute on the connection\"\n    ],\n    \"oci_set_edition\": [\n        \"bool oci_set_edition(string value)\",\n        \"Sets the edition attribute for all subsequent connections created\"\n    ],\n    \"oci_set_module_name\": [\n        \"bool oci_set_module_name(resource connection, string value)\",\n        \"Sets the module attribute on the connection\"\n    ],\n    \"oci_set_prefetch\": [\n        \"bool oci_set_prefetch(resource stmt, int prefetch_rows)\",\n        \"Sets the number of rows to be prefetched on execute to prefetch_rows for stmt\"\n    ],\n    \"oci_statement_type\": [\n        \"string oci_statement_type(resource stmt)\",\n        \"Return the query type of an OCI statement\"\n    ],\n    \"ocifetchinto\": [\n        \"int ocifetchinto(resource stmt, array &output [, int mode])\",\n        \"Fetch a row of result data into an array\"\n    ],\n    \"ocigetbufferinglob\": [\n        \"bool ocigetbufferinglob()\",\n        \"Returns current state of buffering for a LOB\"\n    ],\n    \"ocisetbufferinglob\": [\n        \"bool ocisetbufferinglob( boolean flag )\",\n        \"Enables\\/disables buffering for a LOB\"\n    ],\n    \"octdec\": [\n        \"int octdec(string octal_number)\",\n        \"Returns the decimal equivalent of an octal string\"\n    ],\n    \"odbc_autocommit\": [\n        \"mixed odbc_autocommit(resource connection_id [, int OnOff])\",\n        \"Toggle autocommit mode or get status\"\n    ],\n    \"odbc_binmode\": [\n        \"bool odbc_binmode(int result_id, int mode)\",\n        \"Handle binary column data\"\n    ],\n    \"odbc_close\": [\n        \"void odbc_close(resource connection_id)\",\n        \"Close an ODBC connection\"\n    ],\n    \"odbc_close_all\": [\n        \"void odbc_close_all(void)\",\n        \"Close all ODBC connections\"\n    ],\n    \"odbc_columnprivileges\": [\n        \"resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)\",\n        \"Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table\"\n    ],\n    \"odbc_columns\": [\n        \"resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])\",\n        \"Returns a result identifier that can be used to fetch a list of column names in specified tables\"\n    ],\n    \"odbc_commit\": [\n        \"bool odbc_commit(resource connection_id)\",\n        \"Commit an ODBC transaction\"\n    ],\n    \"odbc_connect\": [\n        \"resource odbc_connect(string DSN, string user, string password [, int cursor_option])\",\n        \"Connect to a datasource\"\n    ],\n    \"odbc_cursor\": [\n        \"string odbc_cursor(resource result_id)\",\n        \"Get cursor name\"\n    ],\n    \"odbc_data_source\": [\n        \"array odbc_data_source(resource connection_id, int fetch_type)\",\n        \"Return information about the currently connected data source\"\n    ],\n    \"odbc_error\": [\n        \"string odbc_error([resource connection_id])\",\n        \"Get the last error code\"\n    ],\n    \"odbc_errormsg\": [\n        \"string odbc_errormsg([resource connection_id])\",\n        \"Get the last error message\"\n    ],\n    \"odbc_exec\": [\n        \"resource odbc_exec(resource connection_id, string query [, int flags])\",\n        \"Prepare and execute an SQL statement\"\n    ],\n    \"odbc_execute\": [\n        \"bool odbc_execute(resource result_id [, array parameters_array])\",\n        \"Execute a prepared statement\"\n    ],\n    \"odbc_fetch_array\": [\n        \"array odbc_fetch_array(int result [, int rownumber])\",\n        \"Fetch a result row as an associative array\"\n    ],\n    \"odbc_fetch_into\": [\n        \"int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])\",\n        \"Fetch one result row into an array\"\n    ],\n    \"odbc_fetch_object\": [\n        \"object odbc_fetch_object(int result [, int rownumber])\",\n        \"Fetch a result row as an object\"\n    ],\n    \"odbc_fetch_row\": [\n        \"bool odbc_fetch_row(resource result_id [, int row_number])\",\n        \"Fetch a row\"\n    ],\n    \"odbc_field_len\": [\n        \"int odbc_field_len(resource result_id, int field_number)\",\n        \"Get the length (precision) of a column\"\n    ],\n    \"odbc_field_name\": [\n        \"string odbc_field_name(resource result_id, int field_number)\",\n        \"Get a column name\"\n    ],\n    \"odbc_field_num\": [\n        \"int odbc_field_num(resource result_id, string field_name)\",\n        \"Return column number\"\n    ],\n    \"odbc_field_scale\": [\n        \"int odbc_field_scale(resource result_id, int field_number)\",\n        \"Get the scale of a column\"\n    ],\n    \"odbc_field_type\": [\n        \"string odbc_field_type(resource result_id, int field_number)\",\n        \"Get the datatype of a column\"\n    ],\n    \"odbc_foreignkeys\": [\n        \"resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)\",\n        \"Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table\"\n    ],\n    \"odbc_free_result\": [\n        \"bool odbc_free_result(resource result_id)\",\n        \"Free resources associated with a result\"\n    ],\n    \"odbc_gettypeinfo\": [\n        \"resource odbc_gettypeinfo(resource connection_id [, int data_type])\",\n        \"Returns a result identifier containing information about data types supported by the data source\"\n    ],\n    \"odbc_longreadlen\": [\n        \"bool odbc_longreadlen(int result_id, int length)\",\n        \"Handle LONG columns\"\n    ],\n    \"odbc_next_result\": [\n        \"bool odbc_next_result(resource result_id)\",\n        \"Checks if multiple results are avaiable\"\n    ],\n    \"odbc_num_fields\": [\n        \"int odbc_num_fields(resource result_id)\",\n        \"Get number of columns in a result\"\n    ],\n    \"odbc_num_rows\": [\n        \"int odbc_num_rows(resource result_id)\",\n        \"Get number of rows in a result\"\n    ],\n    \"odbc_pconnect\": [\n        \"resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])\",\n        \"Establish a persistent connection to a datasource\"\n    ],\n    \"odbc_prepare\": [\n        \"resource odbc_prepare(resource connection_id, string query)\",\n        \"Prepares a statement for execution\"\n    ],\n    \"odbc_primarykeys\": [\n        \"resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)\",\n        \"Returns a result identifier listing the column names that comprise the primary key for a table\"\n    ],\n    \"odbc_procedurecolumns\": [\n        \"resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])\",\n        \"Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures\"\n    ],\n    \"odbc_procedures\": [\n        \"resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])\",\n        \"Returns a result identifier containg the list of procedure names in a datasource\"\n    ],\n    \"odbc_result\": [\n        \"mixed odbc_result(resource result_id, mixed field)\",\n        \"Get result data\"\n    ],\n    \"odbc_result_all\": [\n        \"int odbc_result_all(resource result_id [, string format])\",\n        \"Print result as HTML table\"\n    ],\n    \"odbc_rollback\": [\n        \"bool odbc_rollback(resource connection_id)\",\n        \"Rollback a transaction\"\n    ],\n    \"odbc_setoption\": [\n        \"bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)\",\n        \"Sets connection or statement options\"\n    ],\n    \"odbc_specialcolumns\": [\n        \"resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)\",\n        \"Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction\"\n    ],\n    \"odbc_statistics\": [\n        \"resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)\",\n        \"Returns a result identifier that contains statistics about a single table and the indexes associated with the table\"\n    ],\n    \"odbc_tableprivileges\": [\n        \"resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)\",\n        \"Returns a result identifier containing a list of tables and the privileges associated with each table\"\n    ],\n    \"odbc_tables\": [\n        \"resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])\",\n        \"Call the SQLTables function\"\n    ],\n    \"opendir\": [\n        \"mixed opendir(string path[, resource context])\",\n        \"Open a directory and return a dir_handle\"\n    ],\n    \"openlog\": [\n        \"bool openlog(string ident, int option, int facility)\",\n        \"Open connection to system logger\"\n    ],\n    \"openssl_csr_export\": [\n        \"bool openssl_csr_export(resource csr, string &out [, bool notext=true])\",\n        \"Exports a CSR to file or a var\"\n    ],\n    \"openssl_csr_export_to_file\": [\n        \"bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])\",\n        \"Exports a CSR to file\"\n    ],\n    \"openssl_csr_get_public_key\": [\n        \"mixed openssl_csr_get_public_key(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_get_subject\": [\n        \"mixed openssl_csr_get_subject(mixed csr)\",\n        \"Returns the subject of a CERT or FALSE on error\"\n    ],\n    \"openssl_csr_new\": [\n        \"bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])\",\n        \"Generates a privkey and CSR\"\n    ],\n    \"openssl_csr_sign\": [\n        \"resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])\",\n        \"Signs a cert with another CERT\"\n    ],\n    \"openssl_decrypt\": [\n        \"string openssl_decrypt(string data, string method, string password [, bool raw_input=false])\",\n        \"Takes raw or base64 encoded string and dectupt it using given method and key\"\n    ],\n    \"openssl_dh_compute_key\": [\n        \"string openssl_dh_compute_key(string pub_key, resource dh_key)\",\n        \"Computes shared sicret for public value of remote DH key and local DH key\"\n    ],\n    \"openssl_digest\": [\n        \"string openssl_digest(string data, string method [, bool raw_output=false])\",\n        \"Computes digest hash value for given data using given method, returns raw or binhex encoded string\"\n    ],\n    \"openssl_encrypt\": [\n        \"string openssl_encrypt(string data, string method, string password [, bool raw_output=false])\",\n        \"Encrypts given data with given method and key, returns raw or base64 encoded string\"\n    ],\n    \"openssl_error_string\": [\n        \"mixed openssl_error_string(void)\",\n        \"Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages\"\n    ],\n    \"openssl_get_cipher_methods\": [\n        \"array openssl_get_cipher_methods([bool aliases = false])\",\n        \"Return array of available cipher methods\"\n    ],\n    \"openssl_get_md_methods\": [\n        \"array openssl_get_md_methods([bool aliases = false])\",\n        \"Return array of available digest methods\"\n    ],\n    \"openssl_open\": [\n        \"bool openssl_open(string data, &string opendata, string ekey, mixed privkey)\",\n        \"Opens data\"\n    ],\n    \"openssl_pkcs12_export\": [\n        \"bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS12 to a var\"\n    ],\n    \"openssl_pkcs12_export_to_file\": [\n        \"bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])\",\n        \"Creates and exports a PKCS to file\"\n    ],\n    \"openssl_pkcs12_read\": [\n        \"bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)\",\n        \"Parses a PKCS12 to an array\"\n    ],\n    \"openssl_pkcs7_decrypt\": [\n        \"bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])\",\n        \"Decrypts the S\\/MIME message in the file name infilename and output the results to the file name outfilename.  recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key\"\n    ],\n    \"openssl_pkcs7_encrypt\": [\n        \"bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])\",\n        \"Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile\"\n    ],\n    \"openssl_pkcs7_sign\": [\n        \"bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])\",\n        \"Signs the MIME message in the file named infile with signcert\\/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum\"\n    ],\n    \"openssl_pkcs7_verify\": [\n        \"bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])\",\n        \"Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers\"\n    ],\n    \"openssl_pkey_export\": [\n        \"bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])\",\n        \"Gets an exportable representation of a key into a string or file\"\n    ],\n    \"openssl_pkey_export_to_file\": [\n        \"bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)\",\n        \"Gets an exportable representation of a key into a file\"\n    ],\n    \"openssl_pkey_free\": [\n        \"void openssl_pkey_free(int key)\",\n        \"Frees a key\"\n    ],\n    \"openssl_pkey_get_details\": [\n        \"resource openssl_pkey_get_details(resource key)\",\n        \"returns an array with the key details (bits, pkey, type)\"\n    ],\n    \"openssl_pkey_get_private\": [\n        \"int openssl_pkey_get_private(string key [, string passphrase])\",\n        \"Gets private keys\"\n    ],\n    \"openssl_pkey_get_public\": [\n        \"int openssl_pkey_get_public(mixed cert)\",\n        \"Gets public key from X.509 certificate\"\n    ],\n    \"openssl_pkey_new\": [\n        \"resource openssl_pkey_new([array configargs])\",\n        \"Generates a new private key\"\n    ],\n    \"openssl_private_decrypt\": [\n        \"bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])\",\n        \"Decrypts data with private key\"\n    ],\n    \"openssl_private_encrypt\": [\n        \"bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with private key\"\n    ],\n    \"openssl_public_decrypt\": [\n        \"bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])\",\n        \"Decrypts data with public key\"\n    ],\n    \"openssl_public_encrypt\": [\n        \"bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])\",\n        \"Encrypts data with public key\"\n    ],\n    \"openssl_random_pseudo_bytes\": [\n        \"string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])\",\n        \"Returns a string of the length specified filled with random pseudo bytes\"\n    ],\n    \"openssl_seal\": [\n        \"int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)\",\n        \"Seals data\"\n    ],\n    \"openssl_sign\": [\n        \"bool openssl_sign(string data, &string signature, mixed key[, mixed method])\",\n        \"Signs data\"\n    ],\n    \"openssl_verify\": [\n        \"int openssl_verify(string data, string signature, mixed key[, mixed method])\",\n        \"Verifys data\"\n    ],\n    \"openssl_x509_check_private_key\": [\n        \"bool openssl_x509_check_private_key(mixed cert, mixed key)\",\n        \"Checks if a private key corresponds to a CERT\"\n    ],\n    \"openssl_x509_checkpurpose\": [\n        \"int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])\",\n        \"Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs\"\n    ],\n    \"openssl_x509_export\": [\n        \"bool openssl_x509_export(mixed x509, string &out [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_export_to_file\": [\n        \"bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])\",\n        \"Exports a CERT to file or a var\"\n    ],\n    \"openssl_x509_free\": [\n        \"void openssl_x509_free(resource x509)\",\n        \"Frees X.509 certificates\"\n    ],\n    \"openssl_x509_parse\": [\n        \"array openssl_x509_parse(mixed x509 [, bool shortnames=true])\",\n        \"Returns an array of the fields\\/values of the CERT\"\n    ],\n    \"openssl_x509_read\": [\n        \"resource openssl_x509_read(mixed cert)\",\n        \"Reads X.509 certificates\"\n    ],\n    \"ord\": [\n        \"int ord(string character)\",\n        \"Returns ASCII value of character\"\n    ],\n    \"output_add_rewrite_var\": [\n        \"bool output_add_rewrite_var(string name, string value)\",\n        \"Add URL rewriter values\"\n    ],\n    \"output_reset_rewrite_vars\": [\n        \"bool output_reset_rewrite_vars(void)\",\n        \"Reset(clear) URL rewriter values\"\n    ],\n    \"pack\": [\n        \"string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])\",\n        \"Takes one or more arguments and packs them into a binary string according to the format argument\"\n    ],\n    \"parse_ini_file\": [\n        \"array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration file\"\n    ],\n    \"parse_ini_string\": [\n        \"array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])\",\n        \"Parse configuration string\"\n    ],\n    \"parse_locale\": [\n        \"static array parse_locale($locale)\",\n        \"* parses a locale-id into an array the different parts of it\"\n    ],\n    \"parse_str\": [\n        \"void parse_str(string encoded_string [, array result])\",\n        \"Parses GET\\/POST\\/COOKIE data and sets global variables\"\n    ],\n    \"parse_url\": [\n        \"mixed parse_url(string url, [int url_component])\",\n        \"Parse a URL and return its components\"\n    ],\n    \"passthru\": [\n        \"void passthru(string command [, int &return_value])\",\n        \"Execute an external program and display raw output\"\n    ],\n    \"pathinfo\": [\n        \"array pathinfo(string path[, int options])\",\n        \"Returns information about a certain string\"\n    ],\n    \"pclose\": [\n        \"int pclose(resource fp)\",\n        \"Close a file pointer opened by popen()\"\n    ],\n    \"pcnlt_sigwaitinfo\": [\n        \"int pcnlt_sigwaitinfo(array set[, array &siginfo])\",\n        \"Synchronously wait for queued signals\"\n    ],\n    \"pcntl_alarm\": [\n        \"int pcntl_alarm(int seconds)\",\n        \"Set an alarm clock for delivery of a signal\"\n    ],\n    \"pcntl_exec\": [\n        \"bool pcntl_exec(string path [, array args [, array envs]])\",\n        \"Executes specified program in current process space as defined by exec(2)\"\n    ],\n    \"pcntl_fork\": [\n        \"int pcntl_fork(void)\",\n        \"Forks the currently running process following the same behavior as the UNIX fork() system call\"\n    ],\n    \"pcntl_getpriority\": [\n        \"int pcntl_getpriority([int pid [, int process_identifier]])\",\n        \"Get the priority of any process\"\n    ],\n    \"pcntl_setpriority\": [\n        \"bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])\",\n        \"Change the priority of any process\"\n    ],\n    \"pcntl_signal\": [\n        \"bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])\",\n        \"Assigns a system signal handler to a PHP function\"\n    ],\n    \"pcntl_signal_dispatch\": [\n        \"bool pcntl_signal_dispatch()\",\n        \"Dispatch signals to signal handlers\"\n    ],\n    \"pcntl_sigprocmask\": [\n        \"bool pcntl_sigprocmask(int how, array set[, array &oldset])\",\n        \"Examine and change blocked signals\"\n    ],\n    \"pcntl_sigtimedwait\": [\n        \"int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])\",\n        \"Wait for queued signals\"\n    ],\n    \"pcntl_wait\": [\n        \"int pcntl_wait(int &status)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_waitpid\": [\n        \"int pcntl_waitpid(int pid, int &status, int options)\",\n        \"Waits on or returns the status of a forked child as defined by the waitpid() system call\"\n    ],\n    \"pcntl_wexitstatus\": [\n        \"int pcntl_wexitstatus(int status)\",\n        \"Returns the status code of a child's exit\"\n    ],\n    \"pcntl_wifexited\": [\n        \"bool pcntl_wifexited(int status)\",\n        \"Returns true if the child status code represents a successful exit\"\n    ],\n    \"pcntl_wifsignaled\": [\n        \"bool pcntl_wifsignaled(int status)\",\n        \"Returns true if the child status code represents a process that was terminated due to a signal\"\n    ],\n    \"pcntl_wifstopped\": [\n        \"bool pcntl_wifstopped(int status)\",\n        \"Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)\"\n    ],\n    \"pcntl_wstopsig\": [\n        \"int pcntl_wstopsig(int status)\",\n        \"Returns the number of the signal that caused the process to stop who's status code is passed\"\n    ],\n    \"pcntl_wtermsig\": [\n        \"int pcntl_wtermsig(int status)\",\n        \"Returns the number of the signal that terminated the process who's status code is passed\"\n    ],\n    \"pdo_drivers\": [\n        \"array pdo_drivers()\",\n        \"Return array of available PDO drivers\"\n    ],\n    \"pfsockopen\": [\n        \"resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])\",\n        \"Open persistent Internet or Unix domain socket connection\"\n    ],\n    \"pg_affected_rows\": [\n        \"int pg_affected_rows(resource result)\",\n        \"Returns the number of affected tuples\"\n    ],\n    \"pg_cancel_query\": [\n        \"bool pg_cancel_query(resource connection)\",\n        \"Cancel request\"\n    ],\n    \"pg_client_encoding\": [\n        \"string pg_client_encoding([resource connection])\",\n        \"Get the current client encoding\"\n    ],\n    \"pg_close\": [\n        \"bool pg_close([resource connection])\",\n        \"Close a PostgreSQL connection\"\n    ],\n    \"pg_connect\": [\n        \"resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a PostgreSQL connection\"\n    ],\n    \"pg_connection_busy\": [\n        \"bool pg_connection_busy(resource connection)\",\n        \"Get connection is busy or not\"\n    ],\n    \"pg_connection_reset\": [\n        \"bool pg_connection_reset(resource connection)\",\n        \"Reset connection (reconnect)\"\n    ],\n    \"pg_connection_status\": [\n        \"int pg_connection_status(resource connnection)\",\n        \"Get connection status\"\n    ],\n    \"pg_convert\": [\n        \"array pg_convert(resource db, string table, array values[, int options])\",\n        \"Check and convert values for PostgreSQL SQL statement\"\n    ],\n    \"pg_copy_from\": [\n        \"bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])\",\n        \"Copy table from array\"\n    ],\n    \"pg_copy_to\": [\n        \"array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])\",\n        \"Copy table to array\"\n    ],\n    \"pg_dbname\": [\n        \"string pg_dbname([resource connection])\",\n        \"Get the database name\"\n    ],\n    \"pg_delete\": [\n        \"mixed pg_delete(resource db, string table, array ids[, int options])\",\n        \"Delete records has ids (id=>value)\"\n    ],\n    \"pg_end_copy\": [\n        \"bool pg_end_copy([resource connection])\",\n        \"Sync with backend. Completes the Copy command\"\n    ],\n    \"pg_escape_bytea\": [\n        \"string pg_escape_bytea([resource connection,] string data)\",\n        \"Escape binary for bytea type\"\n    ],\n    \"pg_escape_string\": [\n        \"string pg_escape_string([resource connection,] string data)\",\n        \"Escape string for text\\/char type\"\n    ],\n    \"pg_execute\": [\n        \"resource pg_execute([resource connection,] string stmtname, array params)\",\n        \"Execute a prepared query\"\n    ],\n    \"pg_fetch_all\": [\n        \"array pg_fetch_all(resource result)\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_all_columns\": [\n        \"array pg_fetch_all_columns(resource result [, int column_number])\",\n        \"Fetch all rows into array\"\n    ],\n    \"pg_fetch_array\": [\n        \"array pg_fetch_array(resource result [, int row [, int result_type]])\",\n        \"Fetch a row as an array\"\n    ],\n    \"pg_fetch_assoc\": [\n        \"array pg_fetch_assoc(resource result [, int row])\",\n        \"Fetch a row as an assoc array\"\n    ],\n    \"pg_fetch_object\": [\n        \"object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])\",\n        \"Fetch a row as an object\"\n    ],\n    \"pg_fetch_result\": [\n        \"mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)\",\n        \"Returns values from a result identifier\"\n    ],\n    \"pg_fetch_row\": [\n        \"array pg_fetch_row(resource result [, int row [, int result_type]])\",\n        \"Get a row as an enumerated array\"\n    ],\n    \"pg_field_is_null\": [\n        \"int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)\",\n        \"Test if a field is NULL\"\n    ],\n    \"pg_field_name\": [\n        \"string pg_field_name(resource result, int field_number)\",\n        \"Returns the name of the field\"\n    ],\n    \"pg_field_num\": [\n        \"int pg_field_num(resource result, string field_name)\",\n        \"Returns the field number of the named field\"\n    ],\n    \"pg_field_prtlen\": [\n        \"int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)\",\n        \"Returns the printed length\"\n    ],\n    \"pg_field_size\": [\n        \"int pg_field_size(resource result, int field_number)\",\n        \"Returns the internal size of the field\"\n    ],\n    \"pg_field_table\": [\n        \"mixed pg_field_table(resource result, int field_number[, bool oid_only])\",\n        \"Returns the name of the table field belongs to, or table's oid if oid_only is true\"\n    ],\n    \"pg_field_type\": [\n        \"string pg_field_type(resource result, int field_number)\",\n        \"Returns the type name for the given field\"\n    ],\n    \"pg_field_type_oid\": [\n        \"string pg_field_type_oid(resource result, int field_number)\",\n        \"Returns the type oid for the given field\"\n    ],\n    \"pg_free_result\": [\n        \"bool pg_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"pg_get_notify\": [\n        \"array pg_get_notify([resource connection[, result_type]])\",\n        \"Get asynchronous notification\"\n    ],\n    \"pg_get_pid\": [\n        \"int pg_get_pid([resource connection)\",\n        \"Get backend(server) pid\"\n    ],\n    \"pg_get_result\": [\n        \"resource pg_get_result(resource connection)\",\n        \"Get asynchronous query result\"\n    ],\n    \"pg_host\": [\n        \"string pg_host([resource connection])\",\n        \"Returns the host name associated with the connection\"\n    ],\n    \"pg_insert\": [\n        \"mixed pg_insert(resource db, string table, array values[, int options])\",\n        \"Insert values (filed=>value) to table\"\n    ],\n    \"pg_last_error\": [\n        \"string pg_last_error([resource connection])\",\n        \"Get the error message string\"\n    ],\n    \"pg_last_notice\": [\n        \"string pg_last_notice(resource connection)\",\n        \"Returns the last notice set by the backend\"\n    ],\n    \"pg_last_oid\": [\n        \"string pg_last_oid(resource result)\",\n        \"Returns the last object identifier\"\n    ],\n    \"pg_lo_close\": [\n        \"bool pg_lo_close(resource large_object)\",\n        \"Close a large object\"\n    ],\n    \"pg_lo_create\": [\n        \"mixed pg_lo_create([resource connection],[mixed large_object_oid])\",\n        \"Create a large object\"\n    ],\n    \"pg_lo_export\": [\n        \"bool pg_lo_export([resource connection, ] int objoid, string filename)\",\n        \"Export large object direct to filesystem\"\n    ],\n    \"pg_lo_import\": [\n        \"int pg_lo_import([resource connection, ] string filename [, mixed oid])\",\n        \"Import large object direct from filesystem\"\n    ],\n    \"pg_lo_open\": [\n        \"resource pg_lo_open([resource connection,] int large_object_oid, string mode)\",\n        \"Open a large object and return fd\"\n    ],\n    \"pg_lo_read\": [\n        \"string pg_lo_read(resource large_object [, int len])\",\n        \"Read a large object\"\n    ],\n    \"pg_lo_read_all\": [\n        \"int pg_lo_read_all(resource large_object)\",\n        \"Read a large object and send straight to browser\"\n    ],\n    \"pg_lo_seek\": [\n        \"bool pg_lo_seek(resource large_object, int offset [, int whence])\",\n        \"Seeks position of large object\"\n    ],\n    \"pg_lo_tell\": [\n        \"int pg_lo_tell(resource large_object)\",\n        \"Returns current position of large object\"\n    ],\n    \"pg_lo_unlink\": [\n        \"bool pg_lo_unlink([resource connection,] string large_object_oid)\",\n        \"Delete a large object\"\n    ],\n    \"pg_lo_write\": [\n        \"int pg_lo_write(resource large_object, string buf [, int len])\",\n        \"Write a large object\"\n    ],\n    \"pg_meta_data\": [\n        \"array pg_meta_data(resource db, string table)\",\n        \"Get meta_data\"\n    ],\n    \"pg_num_fields\": [\n        \"int pg_num_fields(resource result)\",\n        \"Return the number of fields in the result\"\n    ],\n    \"pg_num_rows\": [\n        \"int pg_num_rows(resource result)\",\n        \"Return the number of rows in the result\"\n    ],\n    \"pg_options\": [\n        \"string pg_options([resource connection])\",\n        \"Get the options associated with the connection\"\n    ],\n    \"pg_parameter_status\": [\n        \"string|false pg_parameter_status([resource connection,] string param_name)\",\n        \"Returns the value of a server parameter\"\n    ],\n    \"pg_pconnect\": [\n        \"resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)\",\n        \"Open a persistent PostgreSQL connection\"\n    ],\n    \"pg_ping\": [\n        \"bool pg_ping([resource connection])\",\n        \"Ping database. If connection is bad, try to reconnect.\"\n    ],\n    \"pg_port\": [\n        \"int pg_port([resource connection])\",\n        \"Return the port number associated with the connection\"\n    ],\n    \"pg_prepare\": [\n        \"resource pg_prepare([resource connection,] string stmtname, string query)\",\n        \"Prepare a query for future execution\"\n    ],\n    \"pg_put_line\": [\n        \"bool pg_put_line([resource connection,] string query)\",\n        \"Send null-terminated string to backend server\"\n    ],\n    \"pg_query\": [\n        \"resource pg_query([resource connection,] string query)\",\n        \"Execute a query\"\n    ],\n    \"pg_query_params\": [\n        \"resource pg_query_params([resource connection,] string query, array params)\",\n        \"Execute a query\"\n    ],\n    \"pg_result_error\": [\n        \"string pg_result_error(resource result)\",\n        \"Get error message associated with result\"\n    ],\n    \"pg_result_error_field\": [\n        \"string pg_result_error_field(resource result, int fieldcode)\",\n        \"Get error message field associated with result\"\n    ],\n    \"pg_result_seek\": [\n        \"bool pg_result_seek(resource result, int offset)\",\n        \"Set internal row offset\"\n    ],\n    \"pg_result_status\": [\n        \"mixed pg_result_status(resource result[, long result_type])\",\n        \"Get status of query result\"\n    ],\n    \"pg_select\": [\n        \"mixed pg_select(resource db, string table, array ids[, int options])\",\n        \"Select records that has ids (id=>value)\"\n    ],\n    \"pg_send_execute\": [\n        \"bool pg_send_execute(resource connection, string stmtname, array params)\",\n        \"Executes prevriously prepared stmtname asynchronously\"\n    ],\n    \"pg_send_prepare\": [\n        \"bool pg_send_prepare(resource connection, string stmtname, string query)\",\n        \"Asynchronously prepare a query for future execution\"\n    ],\n    \"pg_send_query\": [\n        \"bool pg_send_query(resource connection, string query)\",\n        \"Send asynchronous query\"\n    ],\n    \"pg_send_query_params\": [\n        \"bool pg_send_query_params(resource connection, string query, array params)\",\n        \"Send asynchronous parameterized query\"\n    ],\n    \"pg_set_client_encoding\": [\n        \"int pg_set_client_encoding([resource connection,] string encoding)\",\n        \"Set client encoding\"\n    ],\n    \"pg_set_error_verbosity\": [\n        \"int pg_set_error_verbosity([resource connection,] int verbosity)\",\n        \"Set error verbosity\"\n    ],\n    \"pg_trace\": [\n        \"bool pg_trace(string filename [, string mode [, resource connection]])\",\n        \"Enable tracing a PostgreSQL connection\"\n    ],\n    \"pg_transaction_status\": [\n        \"int pg_transaction_status(resource connnection)\",\n        \"Get transaction status\"\n    ],\n    \"pg_tty\": [\n        \"string pg_tty([resource connection])\",\n        \"Return the tty name associated with the connection\"\n    ],\n    \"pg_unescape_bytea\": [\n        \"string pg_unescape_bytea(string data)\",\n        \"Unescape binary for bytea type\"\n    ],\n    \"pg_untrace\": [\n        \"bool pg_untrace([resource connection])\",\n        \"Disable tracing of a PostgreSQL connection\"\n    ],\n    \"pg_update\": [\n        \"mixed pg_update(resource db, string table, array fields, array ids[, int options])\",\n        \"Update table using values (field=>value) and ids (id=>value)\"\n    ],\n    \"pg_version\": [\n        \"array pg_version([resource connection])\",\n        \"Returns an array with client, protocol and server version (when available)\"\n    ],\n    \"php_egg_logo_guid\": [\n        \"string php_egg_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_ini_loaded_file\": [\n        \"string php_ini_loaded_file(void)\",\n        \"Return the actual loaded ini filename\"\n    ],\n    \"php_ini_scanned_files\": [\n        \"string php_ini_scanned_files(void)\",\n        \"Return comma-separated string of .ini files parsed from the additional ini dir\"\n    ],\n    \"php_logo_guid\": [\n        \"string php_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_real_logo_guid\": [\n        \"string php_real_logo_guid(void)\",\n        \"Return the special ID used to request the PHP logo in phpinfo screens\"\n    ],\n    \"php_sapi_name\": [\n        \"string php_sapi_name(void)\",\n        \"Return the current SAPI module name\"\n    ],\n    \"php_snmpv3\": [\n        \"void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)\",\n        \"* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET   snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT   snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK   snmp3_walk() - walk the mib and return a single dimensional array  *                       containing the values. * st=SNMP_CMD_REALWALK   snmp3_real_walk() - walk the mib and return an  *                            array of oid,value pairs. * st=SNMP_CMD_SET  snmp3_set() - query an agent and set a single value *\"\n    ],\n    \"php_strip_whitespace\": [\n        \"string php_strip_whitespace(string file_name)\",\n        \"Return source with stripped comments and whitespace\"\n    ],\n    \"php_uname\": [\n        \"string php_uname(void)\",\n        \"Return information about the system PHP was built on\"\n    ],\n    \"phpcredits\": [\n        \"void phpcredits([int flag])\",\n        \"Prints the list of people who've contributed to the PHP project\"\n    ],\n    \"phpinfo\": [\n        \"void phpinfo([int what])\",\n        \"Output a page of useful information about PHP and the current request\"\n    ],\n    \"phpversion\": [\n        \"string phpversion([string extension])\",\n        \"Return the current PHP version\"\n    ],\n    \"pi\": [\n        \"float pi(void)\",\n        \"Returns an approximation of pi\"\n    ],\n    \"png2wbmp\": [\n        \"bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)\",\n        \"Convert PNG image to WBMP image\"\n    ],\n    \"popen\": [\n        \"resource popen(string command, string mode)\",\n        \"Execute a command and open either a read or a write pipe to it\"\n    ],\n    \"posix_access\": [\n        \"bool posix_access(string file [, int mode])\",\n        \"Determine accessibility of a file (POSIX.1 5.6.3)\"\n    ],\n    \"posix_ctermid\": [\n        \"string posix_ctermid(void)\",\n        \"Generate terminal path name (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_get_last_error\": [\n        \"int posix_get_last_error(void)\",\n        \"Retrieve the error number set by the last posix function which failed.\"\n    ],\n    \"posix_getcwd\": [\n        \"string posix_getcwd(void)\",\n        \"Get working directory pathname (POSIX.1, 5.2.2)\"\n    ],\n    \"posix_getegid\": [\n        \"int posix_getegid(void)\",\n        \"Get the current effective group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_geteuid\": [\n        \"int posix_geteuid(void)\",\n        \"Get the current effective user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgid\": [\n        \"int posix_getgid(void)\",\n        \"Get the current group id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_getgrgid\": [\n        \"array posix_getgrgid(long gid)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgrnam\": [\n        \"array posix_getgrnam(string groupname)\",\n        \"Group database access (POSIX.1, 9.2.1)\"\n    ],\n    \"posix_getgroups\": [\n        \"array posix_getgroups(void)\",\n        \"Get supplementary group id's (POSIX.1, 4.2.3)\"\n    ],\n    \"posix_getlogin\": [\n        \"string posix_getlogin(void)\",\n        \"Get user name (POSIX.1, 4.2.4)\"\n    ],\n    \"posix_getpgid\": [\n        \"int posix_getpgid(void)\",\n        \"Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)\"\n    ],\n    \"posix_getpgrp\": [\n        \"int posix_getpgrp(void)\",\n        \"Get current process group id (POSIX.1, 4.3.1)\"\n    ],\n    \"posix_getpid\": [\n        \"int posix_getpid(void)\",\n        \"Get the current process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getppid\": [\n        \"int posix_getppid(void)\",\n        \"Get the parent process id (POSIX.1, 4.1.1)\"\n    ],\n    \"posix_getpwnam\": [\n        \"array posix_getpwnam(string groupname)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getpwuid\": [\n        \"array posix_getpwuid(long uid)\",\n        \"User database access (POSIX.1, 9.2.2)\"\n    ],\n    \"posix_getrlimit\": [\n        \"array posix_getrlimit(void)\",\n        \"Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)\"\n    ],\n    \"posix_getsid\": [\n        \"int posix_getsid(void)\",\n        \"Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)\"\n    ],\n    \"posix_getuid\": [\n        \"int posix_getuid(void)\",\n        \"Get the current user id (POSIX.1, 4.2.1)\"\n    ],\n    \"posix_initgroups\": [\n        \"bool posix_initgroups(string name, int base_group_id)\",\n        \"Calculate the group access list for the user specified in name.\"\n    ],\n    \"posix_isatty\": [\n        \"bool posix_isatty(int fd)\",\n        \"Determine if filedesc is a tty (POSIX.1, 4.7.1)\"\n    ],\n    \"posix_kill\": [\n        \"bool posix_kill(int pid, int sig)\",\n        \"Send a signal to a process (POSIX.1, 3.3.2)\"\n    ],\n    \"posix_mkfifo\": [\n        \"bool posix_mkfifo(string pathname, int mode)\",\n        \"Make a FIFO special file (POSIX.1, 5.4.2)\"\n    ],\n    \"posix_mknod\": [\n        \"bool posix_mknod(string pathname, int mode [, int major [, int minor]])\",\n        \"Make a special or ordinary file (POSIX.1)\"\n    ],\n    \"posix_setegid\": [\n        \"bool posix_setegid(long uid)\",\n        \"Set effective group id\"\n    ],\n    \"posix_seteuid\": [\n        \"bool posix_seteuid(long uid)\",\n        \"Set effective user id\"\n    ],\n    \"posix_setgid\": [\n        \"bool posix_setgid(int uid)\",\n        \"Set group id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_setpgid\": [\n        \"bool posix_setpgid(int pid, int pgid)\",\n        \"Set process group id for job control (POSIX.1, 4.3.3)\"\n    ],\n    \"posix_setsid\": [\n        \"int posix_setsid(void)\",\n        \"Create session and set process group id (POSIX.1, 4.3.2)\"\n    ],\n    \"posix_setuid\": [\n        \"bool posix_setuid(long uid)\",\n        \"Set user id (POSIX.1, 4.2.2)\"\n    ],\n    \"posix_strerror\": [\n        \"string posix_strerror(int errno)\",\n        \"Retrieve the system error message associated with the given errno.\"\n    ],\n    \"posix_times\": [\n        \"array posix_times(void)\",\n        \"Get process times (POSIX.1, 4.5.2)\"\n    ],\n    \"posix_ttyname\": [\n        \"string posix_ttyname(int fd)\",\n        \"Determine terminal device name (POSIX.1, 4.7.2)\"\n    ],\n    \"posix_uname\": [\n        \"array posix_uname(void)\",\n        \"Get system name (POSIX.1, 4.4.1)\"\n    ],\n    \"pow\": [\n        \"number pow(number base, number exponent)\",\n        \"Returns base raised to the power of exponent. Returns integer result when possible\"\n    ],\n    \"preg_filter\": [\n        \"mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement and only return matches.\"\n    ],\n    \"preg_grep\": [\n        \"array preg_grep(string regex, array input [, int flags])\",\n        \"Searches array and returns entries which match regex\"\n    ],\n    \"preg_last_error\": [\n        \"int preg_last_error()\",\n        \"Returns the error code of the last regexp execution.\"\n    ],\n    \"preg_match\": [\n        \"int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])\",\n        \"Perform a Perl-style regular expression match\"\n    ],\n    \"preg_match_all\": [\n        \"int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])\",\n        \"Perform a Perl-style global regular expression match\"\n    ],\n    \"preg_quote\": [\n        \"string preg_quote(string str [, string delim_char])\",\n        \"Quote regular expression characters plus an optional character\"\n    ],\n    \"preg_replace\": [\n        \"mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement.\"\n    ],\n    \"preg_replace_callback\": [\n        \"mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])\",\n        \"Perform Perl-style regular expression replacement using replacement callback.\"\n    ],\n    \"preg_split\": [\n        \"array preg_split(string pattern, string subject [, int limit [, int flags]])\",\n        \"Split string into an array using a perl-style regular expression as a delimiter\"\n    ],\n    \"prev\": [\n        \"mixed prev(array array_arg)\",\n        \"Move array argument's internal pointer to the previous element and return it\"\n    ],\n    \"print\": [\n        \"int print(string arg)\",\n        \"Output a string\"\n    ],\n    \"print_r\": [\n        \"mixed print_r(mixed var [, bool return])\",\n        \"Prints out or returns information about the specified variable\"\n    ],\n    \"printf\": [\n        \"int printf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Output a formatted string\"\n    ],\n    \"proc_close\": [\n        \"int proc_close(resource process)\",\n        \"close a process opened by proc_open\"\n    ],\n    \"proc_get_status\": [\n        \"array proc_get_status(resource process)\",\n        \"get information about a process opened by proc_open\"\n    ],\n    \"proc_nice\": [\n        \"bool proc_nice(int priority)\",\n        \"Change the priority of the current process\"\n    ],\n    \"proc_open\": [\n        \"resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])\",\n        \"Run a process with more control over it's file descriptors\"\n    ],\n    \"proc_terminate\": [\n        \"bool proc_terminate(resource process [, long signal])\",\n        \"kill a process opened by proc_open\"\n    ],\n    \"property_exists\": [\n        \"bool property_exists(mixed object_or_class, string property_name)\",\n        \"Checks if the object or class has a property\"\n    ],\n    \"pspell_add_to_personal\": [\n        \"bool pspell_add_to_personal(int pspell, string word)\",\n        \"Adds a word to a personal list\"\n    ],\n    \"pspell_add_to_session\": [\n        \"bool pspell_add_to_session(int pspell, string word)\",\n        \"Adds a word to the current session\"\n    ],\n    \"pspell_check\": [\n        \"bool pspell_check(int pspell, string word)\",\n        \"Returns true if word is valid\"\n    ],\n    \"pspell_clear_session\": [\n        \"bool pspell_clear_session(int pspell)\",\n        \"Clears the current session\"\n    ],\n    \"pspell_config_create\": [\n        \"int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])\",\n        \"Create a new config to be used later to create a manager\"\n    ],\n    \"pspell_config_data_dir\": [\n        \"bool pspell_config_data_dir(int conf, string directory)\",\n        \"location of language data files\"\n    ],\n    \"pspell_config_dict_dir\": [\n        \"bool pspell_config_dict_dir(int conf, string directory)\",\n        \"location of the main word list\"\n    ],\n    \"pspell_config_ignore\": [\n        \"bool pspell_config_ignore(int conf, int ignore)\",\n        \"Ignore words <= n chars\"\n    ],\n    \"pspell_config_mode\": [\n        \"bool pspell_config_mode(int conf, long mode)\",\n        \"Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)\"\n    ],\n    \"pspell_config_personal\": [\n        \"bool pspell_config_personal(int conf, string personal)\",\n        \"Use a personal dictionary for this config\"\n    ],\n    \"pspell_config_repl\": [\n        \"bool pspell_config_repl(int conf, string repl)\",\n        \"Use a personal dictionary with replacement pairs for this config\"\n    ],\n    \"pspell_config_runtogether\": [\n        \"bool pspell_config_runtogether(int conf, bool runtogether)\",\n        \"Consider run-together words as valid components\"\n    ],\n    \"pspell_config_save_repl\": [\n        \"bool pspell_config_save_repl(int conf, bool save)\",\n        \"Save replacement pairs when personal list is saved for this config\"\n    ],\n    \"pspell_new\": [\n        \"int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary\"\n    ],\n    \"pspell_new_config\": [\n        \"int pspell_new_config(int config)\",\n        \"Load a dictionary based on the given config\"\n    ],\n    \"pspell_new_personal\": [\n        \"int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])\",\n        \"Load a dictionary with a personal wordlist\"\n    ],\n    \"pspell_save_wordlist\": [\n        \"bool pspell_save_wordlist(int pspell)\",\n        \"Saves the current (personal) wordlist\"\n    ],\n    \"pspell_store_replacement\": [\n        \"bool pspell_store_replacement(int pspell, string misspell, string correct)\",\n        \"Notify the dictionary of a user-selected replacement\"\n    ],\n    \"pspell_suggest\": [\n        \"array pspell_suggest(int pspell, string word)\",\n        \"Returns array of suggestions\"\n    ],\n    \"putenv\": [\n        \"bool putenv(string setting)\",\n        \"Set the value of an environment variable\"\n    ],\n    \"quoted_printable_decode\": [\n        \"string quoted_printable_decode(string str)\",\n        \"Convert a quoted-printable string to an 8 bit string\"\n    ],\n    \"quoted_printable_encode\": [\n        \"string quoted_printable_encode(string str) *\\/\",\n        \"PHP_FUNCTION(quoted_printable_encode) {  char *str, *new_str;  int str_len;  size_t new_str_len;   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \\\"s\\\", &str, &str_len) != SUCCESS) {   return;  }   if (!str_len) {   RETURN_EMPTY_STRING();  }   new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len);  RETURN_STRINGL(new_str, new_str_len, 0); } \\/* }}}\"\n    ],\n    \"quotemeta\": [\n        \"string quotemeta(string str)\",\n        \"Quotes meta characters\"\n    ],\n    \"rad2deg\": [\n        \"float rad2deg(float number)\",\n        \"Converts the radian number to the equivalent number in degrees\"\n    ],\n    \"rand\": [\n        \"int rand([int min, int max])\",\n        \"Returns a random number\"\n    ],\n    \"range\": [\n        \"array range(mixed low, mixed high[, int step])\",\n        \"Create an array containing the range of integers or characters from low to high (inclusive)\"\n    ],\n    \"rawurldecode\": [\n        \"string rawurldecode(string str)\",\n        \"Decodes URL-encodes string\"\n    ],\n    \"rawurlencode\": [\n        \"string rawurlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"readdir\": [\n        \"string readdir([resource dir_handle])\",\n        \"Read directory entry from dir_handle\"\n    ],\n    \"readfile\": [\n        \"int readfile(string filename [, bool use_include_path[, resource context]])\",\n        \"Output a file or a URL\"\n    ],\n    \"readgzfile\": [\n        \"int readgzfile(string filename [, int use_include_path])\",\n        \"Output a .gz-file\"\n    ],\n    \"readline\": [\n        \"string readline([string prompt])\",\n        \"Reads a line\"\n    ],\n    \"readline_add_history\": [\n        \"bool readline_add_history(string prompt)\",\n        \"Adds a line to the history\"\n    ],\n    \"readline_callback_handler_install\": [\n        \"void readline_callback_handler_install(string prompt, mixed callback)\",\n        \"Initializes the readline callback interface and terminal, prints the prompt and returns immediately\"\n    ],\n    \"readline_callback_handler_remove\": [\n        \"bool readline_callback_handler_remove()\",\n        \"Removes a previously installed callback handler and restores terminal settings\"\n    ],\n    \"readline_callback_read_char\": [\n        \"void readline_callback_read_char()\",\n        \"Informs the readline callback interface that a character is ready for input\"\n    ],\n    \"readline_clear_history\": [\n        \"bool readline_clear_history(void)\",\n        \"Clears the history\"\n    ],\n    \"readline_completion_function\": [\n        \"bool readline_completion_function(string funcname)\",\n        \"Readline completion function?\"\n    ],\n    \"readline_info\": [\n        \"mixed readline_info([string varname [, string newvalue]])\",\n        \"Gets\\/sets various internal readline variables.\"\n    ],\n    \"readline_list_history\": [\n        \"array readline_list_history(void)\",\n        \"Lists the history\"\n    ],\n    \"readline_on_new_line\": [\n        \"void readline_on_new_line(void)\",\n        \"Inform readline that the cursor has moved to a new line\"\n    ],\n    \"readline_read_history\": [\n        \"bool readline_read_history([string filename])\",\n        \"Reads the history\"\n    ],\n    \"readline_redisplay\": [\n        \"void readline_redisplay(void)\",\n        \"Ask readline to redraw the display\"\n    ],\n    \"readline_write_history\": [\n        \"bool readline_write_history([string filename])\",\n        \"Writes the history\"\n    ],\n    \"readlink\": [\n        \"string readlink(string filename)\",\n        \"Return the target of a symbolic link\"\n    ],\n    \"realpath\": [\n        \"string realpath(string path)\",\n        \"Return the resolved path\"\n    ],\n    \"realpath_cache_get\": [\n        \"bool realpath_cache_get()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"realpath_cache_size\": [\n        \"bool realpath_cache_size()\",\n        \"Get current size of realpath cache\"\n    ],\n    \"recode_file\": [\n        \"bool recode_file(string request, resource input, resource output)\",\n        \"Recode file input into file output according to request\"\n    ],\n    \"recode_string\": [\n        \"string recode_string(string request, string str)\",\n        \"Recode string str according to request string\"\n    ],\n    \"register_shutdown_function\": [\n        \"void register_shutdown_function(string function_name)\",\n        \"Register a user-level function to be called on request termination\"\n    ],\n    \"register_tick_function\": [\n        \"bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])\",\n        \"Registers a tick callback function\"\n    ],\n    \"rename\": [\n        \"bool rename(string old_name, string new_name[, resource context])\",\n        \"Rename a file\"\n    ],\n    \"require\": [\n        \"bool require(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"require_once\": [\n        \"bool require_once(string path)\",\n        \"Includes and evaluates the specified file, erroring if the file cannot be included\"\n    ],\n    \"reset\": [\n        \"mixed reset(array array_arg)\",\n        \"Set array argument's internal pointer to the first element and return it\"\n    ],\n    \"restore_error_handler\": [\n        \"void restore_error_handler(void)\",\n        \"Restores the previously defined error handler function\"\n    ],\n    \"restore_exception_handler\": [\n        \"void restore_exception_handler(void)\",\n        \"Restores the previously defined exception handler function\"\n    ],\n    \"restore_include_path\": [\n        \"void restore_include_path()\",\n        \"Restore the value of the include_path configuration option\"\n    ],\n    \"rewind\": [\n        \"bool rewind(resource fp)\",\n        \"Rewind the position of a file pointer\"\n    ],\n    \"rewinddir\": [\n        \"void rewinddir([resource dir_handle])\",\n        \"Rewind dir_handle back to the start\"\n    ],\n    \"rmdir\": [\n        \"bool rmdir(string dirname[, resource context])\",\n        \"Remove a directory\"\n    ],\n    \"round\": [\n        \"float round(float number [, int precision [, int mode]])\",\n        \"Returns the number rounded to specified precision\"\n    ],\n    \"rsort\": [\n        \"bool rsort(array &array_arg [, int sort_flags])\",\n        \"Sort an array in reverse order\"\n    ],\n    \"rtrim\": [\n        \"string rtrim(string str [, string character_mask])\",\n        \"Removes trailing whitespace\"\n    ],\n    \"scandir\": [\n        \"array scandir(string dir [, int sorting_order [, resource context]])\",\n        \"List files & directories inside the specified path\"\n    ],\n    \"sem_acquire\": [\n        \"bool sem_acquire(resource id)\",\n        \"Acquires the semaphore with the given id, blocking if necessary\"\n    ],\n    \"sem_get\": [\n        \"resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])\",\n        \"Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously\"\n    ],\n    \"sem_release\": [\n        \"bool sem_release(resource id)\",\n        \"Releases the semaphore with the given id\"\n    ],\n    \"sem_remove\": [\n        \"bool sem_remove(resource id)\",\n        \"Removes semaphore from Unix systems\"\n    ],\n    \"serialize\": [\n        \"string serialize(mixed variable)\",\n        \"Returns a string representation of variable (which can later be unserialized)\"\n    ],\n    \"session_cache_expire\": [\n        \"int session_cache_expire([int new_cache_expire])\",\n        \"Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire\"\n    ],\n    \"session_cache_limiter\": [\n        \"string session_cache_limiter([string new_cache_limiter])\",\n        \"Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter\"\n    ],\n    \"session_decode\": [\n        \"bool session_decode(string data)\",\n        \"Deserializes data and reinitializes the variables\"\n    ],\n    \"session_destroy\": [\n        \"bool session_destroy(void)\",\n        \"Destroy the current session and all data associated with it\"\n    ],\n    \"session_encode\": [\n        \"string session_encode(void)\",\n        \"Serializes the current setup and returns the serialized representation\"\n    ],\n    \"session_get_cookie_params\": [\n        \"array session_get_cookie_params(void)\",\n        \"Return the session cookie parameters\"\n    ],\n    \"session_id\": [\n        \"string session_id([string newid])\",\n        \"Return the current session id. If newid is given, the session id is replaced with newid\"\n    ],\n    \"session_is_registered\": [\n        \"bool session_is_registered(string varname)\",\n        \"Checks if a variable is registered in session\"\n    ],\n    \"session_module_name\": [\n        \"string session_module_name([string newname])\",\n        \"Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname\"\n    ],\n    \"session_name\": [\n        \"string session_name([string newname])\",\n        \"Return the current session name. If newname is given, the session name is replaced with newname\"\n    ],\n    \"session_regenerate_id\": [\n        \"bool session_regenerate_id([bool delete_old_session])\",\n        \"Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session.\"\n    ],\n    \"session_register\": [\n        \"bool session_register(mixed var_names [, mixed ...])\",\n        \"Adds varname(s) to the list of variables which are freezed at the session end\"\n    ],\n    \"session_save_path\": [\n        \"string session_save_path([string newname])\",\n        \"Return the current save path passed to module_name. If newname is given, the save path is replaced with newname\"\n    ],\n    \"session_set_cookie_params\": [\n        \"void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])\",\n        \"Set session cookie parameters\"\n    ],\n    \"session_set_save_handler\": [\n        \"void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)\",\n        \"Sets user-level functions\"\n    ],\n    \"session_start\": [\n        \"bool session_start(void)\",\n        \"Begin session - reinitializes freezed variables, registers browsers etc\"\n    ],\n    \"session_unregister\": [\n        \"bool session_unregister(string varname)\",\n        \"Removes varname from the list of variables which are freezed at the session end\"\n    ],\n    \"session_unset\": [\n        \"void session_unset(void)\",\n        \"Unset all registered variables\"\n    ],\n    \"session_write_close\": [\n        \"void session_write_close(void)\",\n        \"Write session data and end session\"\n    ],\n    \"set_error_handler\": [\n        \"string set_error_handler(string error_handler [, int error_types])\",\n        \"Sets a user-defined error handler function.  Returns the previously defined error handler, or false on error\"\n    ],\n    \"set_exception_handler\": [\n        \"string set_exception_handler(callable exception_handler)\",\n        \"Sets a user-defined exception handler function.  Returns the previously defined exception handler, or false on error\"\n    ],\n    \"set_include_path\": [\n        \"string set_include_path(string new_include_path)\",\n        \"Sets the include_path configuration option\"\n    ],\n    \"set_magic_quotes_runtime\": [\n        \"bool set_magic_quotes_runtime(int new_setting)\",\n        \"Set the current active configuration setting of magic_quotes_runtime and return previous\"\n    ],\n    \"set_time_limit\": [\n        \"bool set_time_limit(int seconds)\",\n        \"Sets the maximum time a script can run\"\n    ],\n    \"setcookie\": [\n        \"bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie\"\n    ],\n    \"setlocale\": [\n        \"string setlocale(mixed category, string locale [, string ...])\",\n        \"Set locale information\"\n    ],\n    \"setrawcookie\": [\n        \"bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])\",\n        \"Send a cookie with no url encoding of the value\"\n    ],\n    \"settype\": [\n        \"bool settype(mixed var, string type)\",\n        \"Set the type of the variable\"\n    ],\n    \"sha1\": [\n        \"string sha1(string str [, bool raw_output])\",\n        \"Calculate the sha1 hash of a string\"\n    ],\n    \"sha1_file\": [\n        \"string sha1_file(string filename [, bool raw_output])\",\n        \"Calculate the sha1 hash of given filename\"\n    ],\n    \"shell_exec\": [\n        \"string shell_exec(string cmd)\",\n        \"Execute command via shell and return complete output as string\"\n    ],\n    \"shm_attach\": [\n        \"int shm_attach(int key [, int memsize [, int perm]])\",\n        \"Creates or open a shared memory segment\"\n    ],\n    \"shm_detach\": [\n        \"bool shm_detach(resource shm_identifier)\",\n        \"Disconnects from shared memory segment\"\n    ],\n    \"shm_get_var\": [\n        \"mixed shm_get_var(resource id, int variable_key)\",\n        \"Returns a variable from shared memory\"\n    ],\n    \"shm_has_var\": [\n        \"bool shm_has_var(resource id, int variable_key)\",\n        \"Checks whether a specific entry exists\"\n    ],\n    \"shm_put_var\": [\n        \"bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)\",\n        \"Inserts or updates a variable in shared memory\"\n    ],\n    \"shm_remove\": [\n        \"bool shm_remove(resource shm_identifier)\",\n        \"Removes shared memory from Unix systems\"\n    ],\n    \"shm_remove_var\": [\n        \"bool shm_remove_var(resource id, int variable_key)\",\n        \"Removes variable from shared memory\"\n    ],\n    \"shmop_close\": [\n        \"void shmop_close (int shmid)\",\n        \"closes a shared memory segment\"\n    ],\n    \"shmop_delete\": [\n        \"bool shmop_delete (int shmid)\",\n        \"mark segment for deletion\"\n    ],\n    \"shmop_open\": [\n        \"int shmop_open (int key, string flags, int mode, int size)\",\n        \"gets and attaches a shared memory segment\"\n    ],\n    \"shmop_read\": [\n        \"string shmop_read (int shmid, int start, int count)\",\n        \"reads from a shm segment\"\n    ],\n    \"shmop_size\": [\n        \"int shmop_size (int shmid)\",\n        \"returns the shm size\"\n    ],\n    \"shmop_write\": [\n        \"int shmop_write (int shmid, string data, int offset)\",\n        \"writes to a shared memory segment\"\n    ],\n    \"shuffle\": [\n        \"bool shuffle(array array_arg)\",\n        \"Randomly shuffle the contents of an array\"\n    ],\n    \"similar_text\": [\n        \"int similar_text(string str1, string str2 [, float percent])\",\n        \"Calculates the similarity between two strings\"\n    ],\n    \"simplexml_import_dom\": [\n        \"simplemxml_element simplexml_import_dom(domNode node [, string class_name])\",\n        \"Get a simplexml_element object from dom to allow for processing\"\n    ],\n    \"simplexml_load_file\": [\n        \"simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a filename and return a simplexml_element object to allow for processing\"\n    ],\n    \"simplexml_load_string\": [\n        \"simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])\",\n        \"Load a string and return a simplexml_element object to allow for processing\"\n    ],\n    \"sin\": [\n        \"float sin(float number)\",\n        \"Returns the sine of the number in radians\"\n    ],\n    \"sinh\": [\n        \"float sinh(float number)\",\n        \"Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))\\/2\"\n    ],\n    \"sleep\": [\n        \"void sleep(int seconds)\",\n        \"Delay for a given number of seconds\"\n    ],\n    \"smfi_addheader\": [\n        \"bool smfi_addheader(string headerf, string headerv)\",\n        \"Adds a header to the current message.\"\n    ],\n    \"smfi_addrcpt\": [\n        \"bool smfi_addrcpt(string rcpt)\",\n        \"Add a recipient to the message envelope.\"\n    ],\n    \"smfi_chgheader\": [\n        \"bool smfi_chgheader(string headerf, string headerv)\",\n        \"Changes a header's value for the current message.\"\n    ],\n    \"smfi_delrcpt\": [\n        \"bool smfi_delrcpt(string rcpt)\",\n        \"Removes the named recipient from the current message's envelope.\"\n    ],\n    \"smfi_getsymval\": [\n        \"string smfi_getsymval(string macro)\",\n        \"Returns the value of the given macro or NULL if the macro is not defined.\"\n    ],\n    \"smfi_replacebody\": [\n        \"bool smfi_replacebody(string body)\",\n        \"Replaces the body of the current message. If called more than once,    subsequent calls result in data being appended to the new body.\"\n    ],\n    \"smfi_setflags\": [\n        \"void smfi_setflags(long flags)\",\n        \"Sets the flags describing the actions the filter may take.\"\n    ],\n    \"smfi_setreply\": [\n        \"bool smfi_setreply(string rcode, string xcode, string message)\",\n        \"Directly set the SMTP error reply code for this connection.    This code will be used on subsequent error replies resulting from actions taken by this filter.\"\n    ],\n    \"smfi_settimeout\": [\n        \"void smfi_settimeout(long timeout)\",\n        \"Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket.\"\n    ],\n    \"snmp2_get\": [\n        \"string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_getnext\": [\n        \"string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmp2_real_walk\": [\n        \"array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp2_set\": [\n        \"int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmp2_walk\": [\n        \"array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"snmp3_get\": [\n        \"int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_getnext\": [\n        \"int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_real_walk\": [\n        \"int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_set\": [\n        \"int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp3_walk\": [\n        \"int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])\",\n        \"Fetch the value of a SNMP object\"\n    ],\n    \"snmp_get_quick_print\": [\n        \"bool snmp_get_quick_print(void)\",\n        \"Return the current status of quick_print\"\n    ],\n    \"snmp_get_valueretrieval\": [\n        \"int snmp_get_valueretrieval()\",\n        \"Return the method how the SNMP values will be returned\"\n    ],\n    \"snmp_read_mib\": [\n        \"int snmp_read_mib(string filename)\",\n        \"Reads and parses a MIB file into the active MIB tree.\"\n    ],\n    \"snmp_set_enum_print\": [\n        \"void snmp_set_enum_print(int enum_print)\",\n        \"Return all values that are enums with their enum value instead of the raw integer\"\n    ],\n    \"snmp_set_oid_output_format\": [\n        \"void snmp_set_oid_output_format(int oid_format)\",\n        \"Set the OID output format.\"\n    ],\n    \"snmp_set_quick_print\": [\n        \"void snmp_set_quick_print(int quick_print)\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmp_set_valueretrieval\": [\n        \"void snmp_set_valueretrieval(int method)\",\n        \"Specify the method how the SNMP values will be returned\"\n    ],\n    \"snmpget\": [\n        \"string snmpget(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmpgetnext\": [\n        \"string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Fetch a SNMP object\"\n    ],\n    \"snmprealwalk\": [\n        \"array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects including their respective object id withing the specified one\"\n    ],\n    \"snmpset\": [\n        \"int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])\",\n        \"Set the value of a SNMP object\"\n    ],\n    \"snmpwalk\": [\n        \"array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])\",\n        \"Return all objects under the specified object id\"\n    ],\n    \"socket_accept\": [\n        \"resource socket_accept(resource socket)\",\n        \"Accepts a connection on the listening socket fd\"\n    ],\n    \"socket_bind\": [\n        \"bool socket_bind(resource socket, string addr [, int port])\",\n        \"Binds an open socket to a listening port, port is only specified in AF_INET family.\"\n    ],\n    \"socket_clear_error\": [\n        \"void socket_clear_error([resource socket])\",\n        \"Clears the error on the socket or the last error code.\"\n    ],\n    \"socket_close\": [\n        \"void socket_close(resource socket)\",\n        \"Closes a file descriptor\"\n    ],\n    \"socket_connect\": [\n        \"bool socket_connect(resource socket, string addr [, int port])\",\n        \"Opens a connection to addr:port on the socket specified by socket\"\n    ],\n    \"socket_create\": [\n        \"resource socket_create(int domain, int type, int protocol)\",\n        \"Creates an endpoint for communication in the domain specified by domain, of type specified by type\"\n    ],\n    \"socket_create_listen\": [\n        \"resource socket_create_listen(int port[, int backlog])\",\n        \"Opens a socket on port to accept connections\"\n    ],\n    \"socket_create_pair\": [\n        \"bool socket_create_pair(int domain, int type, int protocol, array &fd)\",\n        \"Creates a pair of indistinguishable sockets and stores them in fds.\"\n    ],\n    \"socket_get_option\": [\n        \"mixed socket_get_option(resource socket, int level, int optname)\",\n        \"Gets socket options for the socket\"\n    ],\n    \"socket_getpeername\": [\n        \"bool socket_getpeername(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host\\/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_getsockname\": [\n        \"bool socket_getsockname(resource socket, string &addr[, int &port])\",\n        \"Queries the remote side of the given socket which may either result in host\\/port or in a UNIX filesystem path, dependent on its type.\"\n    ],\n    \"socket_last_error\": [\n        \"int socket_last_error([resource socket])\",\n        \"Returns the last socket error (either the last used or the provided socket resource)\"\n    ],\n    \"socket_listen\": [\n        \"bool socket_listen(resource socket[, int backlog])\",\n        \"Sets the maximum number of connections allowed to be waited for on the socket specified by fd\"\n    ],\n    \"socket_read\": [\n        \"string socket_read(resource socket, int length [, int type])\",\n        \"Reads a maximum of length bytes from socket\"\n    ],\n    \"socket_recv\": [\n        \"int socket_recv(resource socket, string &buf, int len, int flags)\",\n        \"Receives data from a connected socket\"\n    ],\n    \"socket_recvfrom\": [\n        \"int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])\",\n        \"Receives data from a socket, connected or not\"\n    ],\n    \"socket_select\": [\n        \"int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"socket_send\": [\n        \"int socket_send(resource socket, string buf, int len, int flags)\",\n        \"Sends data to a connected socket\"\n    ],\n    \"socket_sendto\": [\n        \"int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])\",\n        \"Sends a message to a socket, whether it is connected or not\"\n    ],\n    \"socket_set_block\": [\n        \"bool socket_set_block(resource socket)\",\n        \"Sets blocking mode on a socket resource\"\n    ],\n    \"socket_set_nonblock\": [\n        \"bool socket_set_nonblock(resource socket)\",\n        \"Sets nonblocking mode on a socket resource\"\n    ],\n    \"socket_set_option\": [\n        \"bool socket_set_option(resource socket, int level, int optname, int|array optval)\",\n        \"Sets socket options for the socket\"\n    ],\n    \"socket_shutdown\": [\n        \"bool socket_shutdown(resource socket[, int how])\",\n        \"Shuts down a socket for receiving, sending, or both.\"\n    ],\n    \"socket_strerror\": [\n        \"string socket_strerror(int errno)\",\n        \"Returns a string describing an error\"\n    ],\n    \"socket_write\": [\n        \"int socket_write(resource socket, string buf[, int length])\",\n        \"Writes the buffer to the socket resource, length is optional\"\n    ],\n    \"solid_fetch_prev\": [\n        \"bool solid_fetch_prev(resource result_id)\",\n        \"\"\n    ],\n    \"sort\": [\n        \"bool sort(array &array_arg [, int sort_flags])\",\n        \"Sort an array\"\n    ],\n    \"soundex\": [\n        \"string soundex(string str)\",\n        \"Calculate the soundex key of a string\"\n    ],\n    \"spl_autoload\": [\n        \"void spl_autoload(string class_name [, string file_extensions])\",\n        \"Default implementation for __autoload()\"\n    ],\n    \"spl_autoload_call\": [\n        \"void spl_autoload_call(string class_name)\",\n        \"Try all registerd autoload function to load the requested class\"\n    ],\n    \"spl_autoload_extensions\": [\n        \"string spl_autoload_extensions([string file_extensions])\",\n        \"Register and return default file extensions for spl_autoload\"\n    ],\n    \"spl_autoload_functions\": [\n        \"false|array spl_autoload_functions()\",\n        \"Return all registered __autoload() functionns\"\n    ],\n    \"spl_autoload_register\": [\n        \"bool spl_autoload_register([mixed autoload_function = \\\"spl_autoload\\\" [, throw = true [, prepend]]])\",\n        \"Register given function as __autoload() implementation\"\n    ],\n    \"spl_autoload_unregister\": [\n        \"bool spl_autoload_unregister(mixed autoload_function)\",\n        \"Unregister given function as __autoload() implementation\"\n    ],\n    \"spl_classes\": [\n        \"array spl_classes()\",\n        \"Return an array containing the names of all clsses and interfaces defined in SPL\"\n    ],\n    \"spl_object_hash\": [\n        \"string spl_object_hash(object obj)\",\n        \"Return hash id for given object\"\n    ],\n    \"split\": [\n        \"array split(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression\"\n    ],\n    \"spliti\": [\n        \"array spliti(string pattern, string string [, int limit])\",\n        \"Split string into array by regular expression case-insensitive\"\n    ],\n    \"sprintf\": [\n        \"string sprintf(string format [, mixed arg1 [, mixed ...]])\",\n        \"Return a formatted string\"\n    ],\n    \"sql_regcase\": [\n        \"string sql_regcase(string string)\",\n        \"Make regular expression for case insensitive match\"\n    ],\n    \"sqlite_array_query\": [\n        \"array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])\",\n        \"Executes a query against a given database and returns an array of arrays.\"\n    ],\n    \"sqlite_busy_timeout\": [\n        \"void sqlite_busy_timeout(resource db, int ms)\",\n        \"Set busy timeout duration. If ms <= 0, all busy handlers are disabled.\"\n    ],\n    \"sqlite_changes\": [\n        \"int sqlite_changes(resource db)\",\n        \"Returns the number of rows that were changed by the most recent SQL statement.\"\n    ],\n    \"sqlite_close\": [\n        \"void sqlite_close(resource db)\",\n        \"Closes an open sqlite database.\"\n    ],\n    \"sqlite_column\": [\n        \"mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])\",\n        \"Fetches a column from the current row of a result set.\"\n    ],\n    \"sqlite_create_aggregate\": [\n        \"bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])\",\n        \"Registers an aggregate function for queries.\"\n    ],\n    \"sqlite_create_function\": [\n        \"bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])\",\n        \"Registers a \\\"regular\\\" function for queries.\"\n    ],\n    \"sqlite_current\": [\n        \"array sqlite_current(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the current row from a result set as an array.\"\n    ],\n    \"sqlite_error_string\": [\n        \"string sqlite_error_string(int error_code)\",\n        \"Returns the textual description of an error code.\"\n    ],\n    \"sqlite_escape_string\": [\n        \"string sqlite_escape_string(string item)\",\n        \"Escapes a string for use as a query parameter.\"\n    ],\n    \"sqlite_exec\": [\n        \"boolean sqlite_exec(string query, resource db[, string &error_message])\",\n        \"Executes a result-less query against a given database\"\n    ],\n    \"sqlite_factory\": [\n        \"object sqlite_factory(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database and creates an object for it. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_fetch_all\": [\n        \"array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches all rows from a result set as an array of arrays.\"\n    ],\n    \"sqlite_fetch_array\": [\n        \"array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])\",\n        \"Fetches the next row from a result set as an array.\"\n    ],\n    \"sqlite_fetch_column_types\": [\n        \"resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])\",\n        \"Return an array of column types from a particular table.\"\n    ],\n    \"sqlite_fetch_object\": [\n        \"object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])\",\n        \"Fetches the next row from a result set as an object.\"\n    ],\n    \"sqlite_fetch_single\": [\n        \"string sqlite_fetch_single(resource result [, bool decode_binary])\",\n        \"Fetches the first column of a result set as a string.\"\n    ],\n    \"sqlite_field_name\": [\n        \"string sqlite_field_name(resource result, int field_index)\",\n        \"Returns the name of a particular field of a result set.\"\n    ],\n    \"sqlite_has_prev\": [\n        \"bool sqlite_has_prev(resource result)\",\n        \"* Returns whether a previous row is available.\"\n    ],\n    \"sqlite_key\": [\n        \"int sqlite_key(resource result)\",\n        \"Return the current row index of a buffered result.\"\n    ],\n    \"sqlite_last_error\": [\n        \"int sqlite_last_error(resource db)\",\n        \"Returns the error code of the last error for a database.\"\n    ],\n    \"sqlite_last_insert_rowid\": [\n        \"int sqlite_last_insert_rowid(resource db)\",\n        \"Returns the rowid of the most recently inserted row.\"\n    ],\n    \"sqlite_libencoding\": [\n        \"string sqlite_libencoding()\",\n        \"Returns the encoding (iso8859 or UTF-8) of the linked SQLite library.\"\n    ],\n    \"sqlite_libversion\": [\n        \"string sqlite_libversion()\",\n        \"Returns the version of the linked SQLite library.\"\n    ],\n    \"sqlite_next\": [\n        \"bool sqlite_next(resource result)\",\n        \"Seek to the next row number of a result set.\"\n    ],\n    \"sqlite_num_fields\": [\n        \"int sqlite_num_fields(resource result)\",\n        \"Returns the number of fields in a result set.\"\n    ],\n    \"sqlite_num_rows\": [\n        \"int sqlite_num_rows(resource result)\",\n        \"Returns the number of rows in a buffered result set.\"\n    ],\n    \"sqlite_open\": [\n        \"resource sqlite_open(string filename [, int mode [, string &error_message]])\",\n        \"Opens a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_popen\": [\n        \"resource sqlite_popen(string filename [, int mode [, string &error_message]])\",\n        \"Opens a persistent handle to a SQLite database. Will create the database if it does not exist.\"\n    ],\n    \"sqlite_prev\": [\n        \"bool sqlite_prev(resource result)\",\n        \"* Seek to the previous row number of a result set.\"\n    ],\n    \"sqlite_query\": [\n        \"resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])\",\n        \"Executes a query against a given database and returns a result handle.\"\n    ],\n    \"sqlite_rewind\": [\n        \"bool sqlite_rewind(resource result)\",\n        \"Seek to the first row number of a buffered result set.\"\n    ],\n    \"sqlite_seek\": [\n        \"bool sqlite_seek(resource result, int row)\",\n        \"Seek to a particular row number of a buffered result set.\"\n    ],\n    \"sqlite_single_query\": [\n        \"array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])\",\n        \"Executes a query and returns either an array for one single column or the value of the first row.\"\n    ],\n    \"sqlite_udf_decode_binary\": [\n        \"string sqlite_udf_decode_binary(string data)\",\n        \"Decode binary encoding on a string parameter passed to an UDF.\"\n    ],\n    \"sqlite_udf_encode_binary\": [\n        \"string sqlite_udf_encode_binary(string data)\",\n        \"Apply binary encoding (if required) to a string to return from an UDF.\"\n    ],\n    \"sqlite_unbuffered_query\": [\n        \"resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])\",\n        \"Executes a query that does not prefetch and buffer all data.\"\n    ],\n    \"sqlite_valid\": [\n        \"bool sqlite_valid(resource result)\",\n        \"Returns whether more rows are available.\"\n    ],\n    \"sqrt\": [\n        \"float sqrt(float number)\",\n        \"Returns the square root of the number\"\n    ],\n    \"srand\": [\n        \"void srand([int seed])\",\n        \"Seeds random number generator\"\n    ],\n    \"sscanf\": [\n        \"mixed sscanf(string str, string format [, string ...])\",\n        \"Implements an ANSI C compatible sscanf\"\n    ],\n    \"stat\": [\n        \"array stat(string filename)\",\n        \"Give information about a file\"\n    ],\n    \"str_getcsv\": [\n        \"array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])\",\n        \"Parse a CSV string into an array\"\n    ],\n    \"str_ireplace\": [\n        \"mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace \\/ case-insensitive\"\n    ],\n    \"str_pad\": [\n        \"string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])\",\n        \"Returns input string padded on the left or right to specified length with pad_string\"\n    ],\n    \"str_repeat\": [\n        \"string str_repeat(string input, int mult)\",\n        \"Returns the input string repeat mult times\"\n    ],\n    \"str_replace\": [\n        \"mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])\",\n        \"Replaces all occurrences of search in haystack with replace\"\n    ],\n    \"str_rot13\": [\n        \"string str_rot13(string str)\",\n        \"Perform the rot13 transform on a string\"\n    ],\n    \"str_shuffle\": [\n        \"void str_shuffle(string str)\",\n        \"Shuffles string. One permutation of all possible is created\"\n    ],\n    \"str_split\": [\n        \"array str_split(string str [, int split_length])\",\n        \"Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long.\"\n    ],\n    \"str_word_count\": [\n        \"mixed str_word_count(string str, [int format [, string charlist]])\",\n        \"Counts the number of words inside a string. If format of 1 is specified,     then the function will return an array containing all the words     found inside the string. If format of 2 is specified, then the function     will return an associated array where the position of the word is the key     and the word itself is the value.          For the purpose of this function, 'word' is defined as a locale dependent     string containing alphabetic characters, which also may contain, but not start     with \\\"'\\\" and \\\"-\\\" characters.\"\n    ],\n    \"strcasecmp\": [\n        \"int strcasecmp(string str1, string str2)\",\n        \"Binary safe case-insensitive string comparison\"\n    ],\n    \"strchr\": [\n        \"string strchr(string haystack, string needle)\",\n        \"An alias for strstr\"\n    ],\n    \"strcmp\": [\n        \"int strcmp(string str1, string str2)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strcoll\": [\n        \"int strcoll(string str1, string str2)\",\n        \"Compares two strings using the current locale\"\n    ],\n    \"strcspn\": [\n        \"int strcspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters not found in mask. If start or\\/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)\"\n    ],\n    \"stream_bucket_append\": [\n        \"void stream_bucket_append(resource brigade, resource bucket)\",\n        \"Append bucket to brigade\"\n    ],\n    \"stream_bucket_make_writeable\": [\n        \"object stream_bucket_make_writeable(resource brigade)\",\n        \"Return a bucket object from the brigade for operating on\"\n    ],\n    \"stream_bucket_new\": [\n        \"resource stream_bucket_new(resource stream, string buffer)\",\n        \"Create a new bucket for use on the current stream\"\n    ],\n    \"stream_bucket_prepend\": [\n        \"void stream_bucket_prepend(resource brigade, resource bucket)\",\n        \"Prepend bucket to brigade\"\n    ],\n    \"stream_context_create\": [\n        \"resource stream_context_create([array options[, array params]])\",\n        \"Create a file context and optionally set parameters\"\n    ],\n    \"stream_context_get_default\": [\n        \"resource stream_context_get_default([array options])\",\n        \"Get a handle on the default file\\/stream context and optionally set parameters\"\n    ],\n    \"stream_context_get_options\": [\n        \"array stream_context_get_options(resource context|resource stream)\",\n        \"Retrieve options for a stream\\/wrapper\\/context\"\n    ],\n    \"stream_context_get_params\": [\n        \"array stream_context_get_params(resource context|resource stream)\",\n        \"Get parameters of a file context\"\n    ],\n    \"stream_context_set_default\": [\n        \"resource stream_context_set_default(array options)\",\n        \"Set default file\\/stream context, returns the context as a resource\"\n    ],\n    \"stream_context_set_option\": [\n        \"bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)\",\n        \"Set an option for a wrapper\"\n    ],\n    \"stream_context_set_params\": [\n        \"bool stream_context_set_params(resource context|resource stream, array options)\",\n        \"Set parameters for a file context\"\n    ],\n    \"stream_copy_to_stream\": [\n        \"long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])\",\n        \"Reads up to maxlen bytes from source stream and writes them to dest stream.\"\n    ],\n    \"stream_filter_append\": [\n        \"resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Append a filter to a stream\"\n    ],\n    \"stream_filter_prepend\": [\n        \"resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])\",\n        \"Prepend a filter to a stream\"\n    ],\n    \"stream_filter_register\": [\n        \"bool stream_filter_register(string filtername, string classname)\",\n        \"Registers a custom filter handler class\"\n    ],\n    \"stream_filter_remove\": [\n        \"bool stream_filter_remove(resource stream_filter)\",\n        \"Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource\"\n    ],\n    \"stream_get_contents\": [\n        \"string stream_get_contents(resource source [, long maxlen [, long offset]])\",\n        \"Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string.\"\n    ],\n    \"stream_get_filters\": [\n        \"array stream_get_filters(void)\",\n        \"Returns a list of registered filters\"\n    ],\n    \"stream_get_line\": [\n        \"string stream_get_line(resource stream, int maxlen [, string ending])\",\n        \"Read up to maxlen bytes from a stream or until the ending string is found\"\n    ],\n    \"stream_get_meta_data\": [\n        \"array stream_get_meta_data(resource fp)\",\n        \"Retrieves header\\/meta data from streams\\/file pointers\"\n    ],\n    \"stream_get_transports\": [\n        \"array stream_get_transports()\",\n        \"Retrieves list of registered socket transports\"\n    ],\n    \"stream_get_wrappers\": [\n        \"array stream_get_wrappers()\",\n        \"Retrieves list of registered stream wrappers\"\n    ],\n    \"stream_is_local\": [\n        \"bool stream_is_local(resource stream|string url)\",\n        \"\"\n    ],\n    \"stream_resolve_include_path\": [\n        \"string stream_resolve_include_path(string filename)\",\n        \"Determine what file will be opened by calls to fopen() with a relative path\"\n    ],\n    \"stream_select\": [\n        \"int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])\",\n        \"Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec\"\n    ],\n    \"stream_set_blocking\": [\n        \"bool stream_set_blocking(resource socket, int mode)\",\n        \"Set blocking\\/non-blocking mode on a socket or stream\"\n    ],\n    \"stream_set_timeout\": [\n        \"bool stream_set_timeout(resource stream, int seconds [, int microseconds])\",\n        \"Set timeout on stream read to seconds + microseonds\"\n    ],\n    \"stream_set_write_buffer\": [\n        \"int stream_set_write_buffer(resource fp, int buffer)\",\n        \"Set file write buffer\"\n    ],\n    \"stream_socket_accept\": [\n        \"resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])\",\n        \"Accept a client connection from a server socket\"\n    ],\n    \"stream_socket_client\": [\n        \"resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])\",\n        \"Open a client connection to a remote address\"\n    ],\n    \"stream_socket_enable_crypto\": [\n        \"int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])\",\n        \"Enable or disable a specific kind of crypto on the stream\"\n    ],\n    \"stream_socket_get_name\": [\n        \"string stream_socket_get_name(resource stream, bool want_peer)\",\n        \"Returns either the locally bound or remote name for a socket stream\"\n    ],\n    \"stream_socket_pair\": [\n        \"array stream_socket_pair(int domain, int type, int protocol)\",\n        \"Creates a pair of connected, indistinguishable socket streams\"\n    ],\n    \"stream_socket_recvfrom\": [\n        \"string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])\",\n        \"Receives data from a socket stream\"\n    ],\n    \"stream_socket_sendto\": [\n        \"long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])\",\n        \"Send data to a socket stream.  If target_addr is specified it must be in dotted quad (or [ipv6]) format\"\n    ],\n    \"stream_socket_server\": [\n        \"resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])\",\n        \"Create a server socket bound to localaddress\"\n    ],\n    \"stream_socket_shutdown\": [\n        \"int stream_socket_shutdown(resource stream, int how)\",\n        \"causes all or part of a full-duplex connection on the socket associated  with stream to be shut down.  If how is SHUT_RD,  further receptions will  be disallowed. If how is SHUT_WR, further transmissions will be disallowed.  If how is SHUT_RDWR,  further  receptions and transmissions will be  disallowed.\"\n    ],\n    \"stream_supports_lock\": [\n        \"bool stream_supports_lock(resource stream)\",\n        \"Tells wether the stream supports locking through flock().\"\n    ],\n    \"stream_wrapper_register\": [\n        \"bool stream_wrapper_register(string protocol, string classname[, integer flags])\",\n        \"Registers a custom URL protocol handler class\"\n    ],\n    \"stream_wrapper_restore\": [\n        \"bool stream_wrapper_restore(string protocol)\",\n        \"Restore the original protocol handler, overriding if necessary\"\n    ],\n    \"stream_wrapper_unregister\": [\n        \"bool stream_wrapper_unregister(string protocol)\",\n        \"Unregister a wrapper for the life of the current request.\"\n    ],\n    \"strftime\": [\n        \"string strftime(string format [, int timestamp])\",\n        \"Format a local time\\/date according to locale settings\"\n    ],\n    \"strip_tags\": [\n        \"string strip_tags(string str [, string allowable_tags])\",\n        \"Strips HTML and PHP tags from a string\"\n    ],\n    \"stripcslashes\": [\n        \"string stripcslashes(string str)\",\n        \"Strips backslashes from a string. Uses C-style conventions\"\n    ],\n    \"stripos\": [\n        \"int stripos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another, case insensitive\"\n    ],\n    \"stripslashes\": [\n        \"string stripslashes(string str)\",\n        \"Strips backslashes from a string\"\n    ],\n    \"stristr\": [\n        \"string stristr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another, case insensitive\"\n    ],\n    \"strlen\": [\n        \"int strlen(string str)\",\n        \"Get string length\"\n    ],\n    \"strnatcasecmp\": [\n        \"int strnatcasecmp(string s1, string s2)\",\n        \"Returns the result of case-insensitive string comparison using 'natural' algorithm\"\n    ],\n    \"strnatcmp\": [\n        \"int strnatcmp(string s1, string s2)\",\n        \"Returns the result of string comparison using 'natural' algorithm\"\n    ],\n    \"strncasecmp\": [\n        \"int strncasecmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strncmp\": [\n        \"int strncmp(string str1, string str2, int len)\",\n        \"Binary safe string comparison\"\n    ],\n    \"strpbrk\": [\n        \"array strpbrk(string haystack, string char_list)\",\n        \"Search a string for any of a set of characters\"\n    ],\n    \"strpos\": [\n        \"int strpos(string haystack, string needle [, int offset])\",\n        \"Finds position of first occurrence of a string within another\"\n    ],\n    \"strptime\": [\n        \"string strptime(string timestamp, string format)\",\n        \"Parse a time\\/date generated with strftime()\"\n    ],\n    \"strrchr\": [\n        \"string strrchr(string haystack, string needle)\",\n        \"Finds the last occurrence of a character in a string within another\"\n    ],\n    \"strrev\": [\n        \"string strrev(string str)\",\n        \"Reverse a string\"\n    ],\n    \"strripos\": [\n        \"int strripos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strrpos\": [\n        \"int strrpos(string haystack, string needle [, int offset])\",\n        \"Finds position of last occurrence of a string within another string\"\n    ],\n    \"strspn\": [\n        \"int strspn(string str, string mask [, start [, len]])\",\n        \"Finds length of initial segment consisting entirely of characters found in mask. If start or\\/and length is provided works like strspn(substr($s,$start,$len),$good_chars)\"\n    ],\n    \"strstr\": [\n        \"string strstr(string haystack, string needle[, bool part])\",\n        \"Finds first occurrence of a string within another\"\n    ],\n    \"strtok\": [\n        \"string strtok([string str,] string token)\",\n        \"Tokenize a string\"\n    ],\n    \"strtolower\": [\n        \"string strtolower(string str)\",\n        \"Makes a string lowercase\"\n    ],\n    \"strtotime\": [\n        \"int strtotime(string time [, int now ])\",\n        \"Convert string representation of date and time to a timestamp\"\n    ],\n    \"strtoupper\": [\n        \"string strtoupper(string str)\",\n        \"Makes a string uppercase\"\n    ],\n    \"strtr\": [\n        \"string strtr(string str, string from[, string to])\",\n        \"Translates characters in str using given translation tables\"\n    ],\n    \"strval\": [\n        \"string strval(mixed var)\",\n        \"Get the string value of a variable\"\n    ],\n    \"substr\": [\n        \"string substr(string str, int start [, int length])\",\n        \"Returns part of a string\"\n    ],\n    \"substr_compare\": [\n        \"int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])\",\n        \"Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters\"\n    ],\n    \"substr_count\": [\n        \"int substr_count(string haystack, string needle [, int offset [, int length]])\",\n        \"Returns the number of times a substring occurs in the string\"\n    ],\n    \"substr_replace\": [\n        \"mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])\",\n        \"Replaces part of a string with another string\"\n    ],\n    \"sybase_affected_rows\": [\n        \"int sybase_affected_rows([resource link_id])\",\n        \"Get number of affected rows in last query\"\n    ],\n    \"sybase_close\": [\n        \"bool sybase_close([resource link_id])\",\n        \"Close Sybase connection\"\n    ],\n    \"sybase_connect\": [\n        \"int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])\",\n        \"Open Sybase server connection\"\n    ],\n    \"sybase_data_seek\": [\n        \"bool sybase_data_seek(resource result, int offset)\",\n        \"Move internal row pointer\"\n    ],\n    \"sybase_deadlock_retry_count\": [\n        \"void sybase_deadlock_retry_count(int retry_count)\",\n        \"Sets deadlock retry count\"\n    ],\n    \"sybase_fetch_array\": [\n        \"array sybase_fetch_array(resource result)\",\n        \"Fetch row as array\"\n    ],\n    \"sybase_fetch_assoc\": [\n        \"array sybase_fetch_assoc(resource result)\",\n        \"Fetch row as array without numberic indices\"\n    ],\n    \"sybase_fetch_field\": [\n        \"object sybase_fetch_field(resource result [, int offset])\",\n        \"Get field information\"\n    ],\n    \"sybase_fetch_object\": [\n        \"object sybase_fetch_object(resource result [, mixed object])\",\n        \"Fetch row as object\"\n    ],\n    \"sybase_fetch_row\": [\n        \"array sybase_fetch_row(resource result)\",\n        \"Get row as enumerated array\"\n    ],\n    \"sybase_field_seek\": [\n        \"bool sybase_field_seek(resource result, int offset)\",\n        \"Set field offset\"\n    ],\n    \"sybase_free_result\": [\n        \"bool sybase_free_result(resource result)\",\n        \"Free result memory\"\n    ],\n    \"sybase_get_last_message\": [\n        \"string sybase_get_last_message(void)\",\n        \"Returns the last message from server (over min_message_severity)\"\n    ],\n    \"sybase_min_client_severity\": [\n        \"void sybase_min_client_severity(int severity)\",\n        \"Sets minimum client severity\"\n    ],\n    \"sybase_min_server_severity\": [\n        \"void sybase_min_server_severity(int severity)\",\n        \"Sets minimum server severity\"\n    ],\n    \"sybase_num_fields\": [\n        \"int sybase_num_fields(resource result)\",\n        \"Get number of fields in result\"\n    ],\n    \"sybase_num_rows\": [\n        \"int sybase_num_rows(resource result)\",\n        \"Get number of rows in result\"\n    ],\n    \"sybase_pconnect\": [\n        \"int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])\",\n        \"Open persistent Sybase connection\"\n    ],\n    \"sybase_query\": [\n        \"int sybase_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"sybase_result\": [\n        \"string sybase_result(resource result, int row, mixed field)\",\n        \"Get result data\"\n    ],\n    \"sybase_select_db\": [\n        \"bool sybase_select_db(string database [, resource link_id])\",\n        \"Select Sybase database\"\n    ],\n    \"sybase_set_message_handler\": [\n        \"bool sybase_set_message_handler(mixed error_func [, resource connection])\",\n        \"Set the error handler, to be called when a server message is raised.     If error_func is NULL the handler will be deleted\"\n    ],\n    \"sybase_unbuffered_query\": [\n        \"int sybase_unbuffered_query(string query [, resource link_id])\",\n        \"Send Sybase query\"\n    ],\n    \"symlink\": [\n        \"int symlink(string target, string link)\",\n        \"Create a symbolic link\"\n    ],\n    \"sys_get_temp_dir\": [\n        \"string sys_get_temp_dir()\",\n        \"Returns directory path used for temporary files\"\n    ],\n    \"sys_getloadavg\": [\n        \"array sys_getloadavg()\",\n        \"\"\n    ],\n    \"syslog\": [\n        \"bool syslog(int priority, string message)\",\n        \"Generate a system log message\"\n    ],\n    \"system\": [\n        \"int system(string command [, int &return_value])\",\n        \"Execute an external program and display output\"\n    ],\n    \"tan\": [\n        \"float tan(float number)\",\n        \"Returns the tangent of the number in radians\"\n    ],\n    \"tanh\": [\n        \"float tanh(float number)\",\n        \"Returns the hyperbolic tangent of the number, defined as sinh(number)\\/cosh(number)\"\n    ],\n    \"tempnam\": [\n        \"string tempnam(string dir, string prefix)\",\n        \"Create a unique filename in a directory\"\n    ],\n    \"textdomain\": [\n        \"string textdomain(string domain)\",\n        \"Set the textdomain to \\\"domain\\\". Returns the current domain\"\n    ],\n    \"tidy_access_count\": [\n        \"int tidy_access_count()\",\n        \"Returns the Number of Tidy accessibility warnings encountered for specified document.\"\n    ],\n    \"tidy_clean_repair\": [\n        \"boolean tidy_clean_repair()\",\n        \"Execute configured cleanup and repair operations on parsed markup\"\n    ],\n    \"tidy_config_count\": [\n        \"int tidy_config_count()\",\n        \"Returns the Number of Tidy configuration errors encountered for specified document.\"\n    ],\n    \"tidy_diagnose\": [\n        \"boolean tidy_diagnose()\",\n        \"Run configured diagnostics on parsed and repaired markup.\"\n    ],\n    \"tidy_error_count\": [\n        \"int tidy_error_count()\",\n        \"Returns the Number of Tidy errors encountered for specified document.\"\n    ],\n    \"tidy_get_body\": [\n        \"TidyNode tidy_get_body(resource tidy)\",\n        \"Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_config\": [\n        \"array tidy_get_config()\",\n        \"Get current Tidy configuarion\"\n    ],\n    \"tidy_get_error_buffer\": [\n        \"string tidy_get_error_buffer([boolean detailed])\",\n        \"Return warnings and errors which occured parsing the specified document\"\n    ],\n    \"tidy_get_head\": [\n        \"TidyNode tidy_get_head()\",\n        \"Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html\": [\n        \"TidyNode tidy_get_html()\",\n        \"Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree\"\n    ],\n    \"tidy_get_html_ver\": [\n        \"int tidy_get_html_ver()\",\n        \"Get the Detected HTML version for the specified document.\"\n    ],\n    \"tidy_get_opt_doc\": [\n        \"string tidy_get_opt_doc(tidy resource, string optname)\",\n        \"Returns the documentation for the given option name\"\n    ],\n    \"tidy_get_output\": [\n        \"string tidy_get_output()\",\n        \"Return a string representing the parsed tidy markup\"\n    ],\n    \"tidy_get_release\": [\n        \"string tidy_get_release()\",\n        \"Get release date (version) for Tidy library\"\n    ],\n    \"tidy_get_root\": [\n        \"TidyNode tidy_get_root()\",\n        \"Returns a TidyNode Object representing the root of the tidy parse tree\"\n    ],\n    \"tidy_get_status\": [\n        \"int tidy_get_status()\",\n        \"Get status of specfied document.\"\n    ],\n    \"tidy_getopt\": [\n        \"mixed tidy_getopt(string option)\",\n        \"Returns the value of the specified configuration option for the tidy document.\"\n    ],\n    \"tidy_is_xhtml\": [\n        \"boolean tidy_is_xhtml()\",\n        \"Indicates if the document is a XHTML document.\"\n    ],\n    \"tidy_is_xml\": [\n        \"boolean tidy_is_xml()\",\n        \"Indicates if the document is a generic (non HTML\\/XHTML) XML document.\"\n    ],\n    \"tidy_parse_file\": [\n        \"boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])\",\n        \"Parse markup in file or URI\"\n    ],\n    \"tidy_parse_string\": [\n        \"bool tidy_parse_string(string input [, mixed config_options [, string encoding]])\",\n        \"Parse a document stored in a string\"\n    ],\n    \"tidy_repair_file\": [\n        \"boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])\",\n        \"Repair a file using an optionally provided configuration file\"\n    ],\n    \"tidy_repair_string\": [\n        \"boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])\",\n        \"Repair a string using an optionally provided configuration file\"\n    ],\n    \"tidy_warning_count\": [\n        \"int tidy_warning_count()\",\n        \"Returns the Number of Tidy warnings encountered for specified document.\"\n    ],\n    \"time\": [\n        \"int time(void)\",\n        \"Return current UNIX timestamp\"\n    ],\n    \"time_nanosleep\": [\n        \"mixed time_nanosleep(long seconds, long nanoseconds)\",\n        \"Delay for a number of seconds and nano seconds\"\n    ],\n    \"time_sleep_until\": [\n        \"mixed time_sleep_until(float timestamp)\",\n        \"Make the script sleep until the specified time\"\n    ],\n    \"timezone_abbreviations_list\": [\n        \"array timezone_abbreviations_list()\",\n        \"Returns associative array containing dst, offset and the timezone name\"\n    ],\n    \"timezone_identifiers_list\": [\n        \"array timezone_identifiers_list([long what[, string country]])\",\n        \"Returns numerically index array with all timezone identifiers.\"\n    ],\n    \"timezone_location_get\": [\n        \"array timezone_location_get()\",\n        \"Returns location information for a timezone, including country code, latitude\\/longitude and comments\"\n    ],\n    \"timezone_name_from_abbr\": [\n        \"string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])\",\n        \"Returns the timezone name from abbrevation\"\n    ],\n    \"timezone_name_get\": [\n        \"string timezone_name_get(DateTimeZone object)\",\n        \"Returns the name of the timezone.\"\n    ],\n    \"timezone_offset_get\": [\n        \"long timezone_offset_get(DateTimeZone object, DateTime object)\",\n        \"Returns the timezone offset.\"\n    ],\n    \"timezone_open\": [\n        \"DateTimeZone timezone_open(string timezone)\",\n        \"Returns new DateTimeZone object\"\n    ],\n    \"timezone_transitions_get\": [\n        \"array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])\",\n        \"Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone.\"\n    ],\n    \"timezone_version_get\": [\n        \"array timezone_version_get()\",\n        \"Returns the Olson database version number.\"\n    ],\n    \"tmpfile\": [\n        \"resource tmpfile(void)\",\n        \"Create a temporary file that will be deleted automatically after use\"\n    ],\n    \"token_get_all\": [\n        \"array token_get_all(string source)\",\n        \"\"\n    ],\n    \"token_name\": [\n        \"string token_name(int type)\",\n        \"\"\n    ],\n    \"touch\": [\n        \"bool touch(string filename [, int time [, int atime]])\",\n        \"Set modification time of file\"\n    ],\n    \"trigger_error\": [\n        \"void trigger_error(string messsage [, int error_type])\",\n        \"Generates a user-level error\\/warning\\/notice message\"\n    ],\n    \"trim\": [\n        \"string trim(string str [, string character_mask])\",\n        \"Strips whitespace from the beginning and end of a string\"\n    ],\n    \"uasort\": [\n        \"bool uasort(array array_arg, string cmp_function)\",\n        \"Sort an array with a user-defined comparison function and maintain index association\"\n    ],\n    \"ucfirst\": [\n        \"string ucfirst(string str)\",\n        \"Make a string's first character lowercase\"\n    ],\n    \"ucwords\": [\n        \"string ucwords(string str)\",\n        \"Uppercase the first character of every word in a string\"\n    ],\n    \"uksort\": [\n        \"bool uksort(array array_arg, string cmp_function)\",\n        \"Sort an array by keys using a user-defined comparison function\"\n    ],\n    \"umask\": [\n        \"int umask([int mask])\",\n        \"Return or change the umask\"\n    ],\n    \"uniqid\": [\n        \"string uniqid([string prefix [, bool more_entropy]])\",\n        \"Generates a unique ID\"\n    ],\n    \"unixtojd\": [\n        \"int unixtojd([int timestamp])\",\n        \"Convert UNIX timestamp to Julian Day\"\n    ],\n    \"unlink\": [\n        \"bool unlink(string filename[, context context])\",\n        \"Delete a file\"\n    ],\n    \"unpack\": [\n        \"array unpack(string format, string input)\",\n        \"Unpack binary string into named array elements according to format argument\"\n    ],\n    \"unregister_tick_function\": [\n        \"void unregister_tick_function(string function_name)\",\n        \"Unregisters a tick callback function\"\n    ],\n    \"unserialize\": [\n        \"mixed unserialize(string variable_representation)\",\n        \"Takes a string representation of variable and recreates it\"\n    ],\n    \"unset\": [\n        \"void unset (mixed var [, mixed var])\",\n        \"Unset a given variable\"\n    ],\n    \"urldecode\": [\n        \"string urldecode(string str)\",\n        \"Decodes URL-encoded string\"\n    ],\n    \"urlencode\": [\n        \"string urlencode(string str)\",\n        \"URL-encodes string\"\n    ],\n    \"usleep\": [\n        \"void usleep(int micro_seconds)\",\n        \"Delay for a given number of micro seconds\"\n    ],\n    \"usort\": [\n        \"bool usort(array array_arg, string cmp_function)\",\n        \"Sort an array by values using a user-defined comparison function\"\n    ],\n    \"utf8_decode\": [\n        \"string utf8_decode(string data)\",\n        \"Converts a UTF-8 encoded string to ISO-8859-1\"\n    ],\n    \"utf8_encode\": [\n        \"string utf8_encode(string data)\",\n        \"Encodes an ISO-8859-1 string to UTF-8\"\n    ],\n    \"var_dump\": [\n        \"void var_dump(mixed var)\",\n        \"Dumps a string representation of variable to output\"\n    ],\n    \"var_export\": [\n        \"mixed var_export(mixed var [, bool return])\",\n        \"Outputs or returns a string representation of a variable\"\n    ],\n    \"variant_abs\": [\n        \"mixed variant_abs(mixed left)\",\n        \"Returns the absolute value of a variant\"\n    ],\n    \"variant_add\": [\n        \"mixed variant_add(mixed left, mixed right)\",\n        \"\\\"Adds\\\" two variant values together and returns the result\"\n    ],\n    \"variant_and\": [\n        \"mixed variant_and(mixed left, mixed right)\",\n        \"performs a bitwise AND operation between two variants and returns the result\"\n    ],\n    \"variant_cast\": [\n        \"object variant_cast(object variant, int type)\",\n        \"Convert a variant into a new variant object of another type\"\n    ],\n    \"variant_cat\": [\n        \"mixed variant_cat(mixed left, mixed right)\",\n        \"concatenates two variant values together and returns the result\"\n    ],\n    \"variant_cmp\": [\n        \"int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])\",\n        \"Compares two variants\"\n    ],\n    \"variant_date_from_timestamp\": [\n        \"object variant_date_from_timestamp(int timestamp)\",\n        \"Returns a variant date representation of a unix timestamp\"\n    ],\n    \"variant_date_to_timestamp\": [\n        \"int variant_date_to_timestamp(object variant)\",\n        \"Converts a variant date\\/time value to unix timestamp\"\n    ],\n    \"variant_div\": [\n        \"mixed variant_div(mixed left, mixed right)\",\n        \"Returns the result from dividing two variants\"\n    ],\n    \"variant_eqv\": [\n        \"mixed variant_eqv(mixed left, mixed right)\",\n        \"Performs a bitwise equivalence on two variants\"\n    ],\n    \"variant_fix\": [\n        \"mixed variant_fix(mixed left)\",\n        \"Returns the integer part ? of a variant\"\n    ],\n    \"variant_get_type\": [\n        \"int variant_get_type(object variant)\",\n        \"Returns the VT_XXX type code for a variant\"\n    ],\n    \"variant_idiv\": [\n        \"mixed variant_idiv(mixed left, mixed right)\",\n        \"Converts variants to integers and then returns the result from dividing them\"\n    ],\n    \"variant_imp\": [\n        \"mixed variant_imp(mixed left, mixed right)\",\n        \"Performs a bitwise implication on two variants\"\n    ],\n    \"variant_int\": [\n        \"mixed variant_int(mixed left)\",\n        \"Returns the integer portion of a variant\"\n    ],\n    \"variant_mod\": [\n        \"mixed variant_mod(mixed left, mixed right)\",\n        \"Divides two variants and returns only the remainder\"\n    ],\n    \"variant_mul\": [\n        \"mixed variant_mul(mixed left, mixed right)\",\n        \"multiplies the values of the two variants and returns the result\"\n    ],\n    \"variant_neg\": [\n        \"mixed variant_neg(mixed left)\",\n        \"Performs logical negation on a variant\"\n    ],\n    \"variant_not\": [\n        \"mixed variant_not(mixed left)\",\n        \"Performs bitwise not negation on a variant\"\n    ],\n    \"variant_or\": [\n        \"mixed variant_or(mixed left, mixed right)\",\n        \"Performs a logical disjunction on two variants\"\n    ],\n    \"variant_pow\": [\n        \"mixed variant_pow(mixed left, mixed right)\",\n        \"Returns the result of performing the power function with two variants\"\n    ],\n    \"variant_round\": [\n        \"mixed variant_round(mixed left, int decimals)\",\n        \"Rounds a variant to the specified number of decimal places\"\n    ],\n    \"variant_set\": [\n        \"void variant_set(object variant, mixed value)\",\n        \"Assigns a new value for a variant object\"\n    ],\n    \"variant_set_type\": [\n        \"void variant_set_type(object variant, int type)\",\n        \"Convert a variant into another type.  Variant is modified \\\"in-place\\\"\"\n    ],\n    \"variant_sub\": [\n        \"mixed variant_sub(mixed left, mixed right)\",\n        \"subtracts the value of the right variant from the left variant value and returns the result\"\n    ],\n    \"variant_xor\": [\n        \"mixed variant_xor(mixed left, mixed right)\",\n        \"Performs a logical exclusion on two variants\"\n    ],\n    \"version_compare\": [\n        \"int version_compare(string ver1, string ver2 [, string oper])\",\n        \"Compares two \\\"PHP-standardized\\\" version number strings\"\n    ],\n    \"vfprintf\": [\n        \"int vfprintf(resource stream, string format, array args)\",\n        \"Output a formatted string into a stream\"\n    ],\n    \"virtual\": [\n        \"bool virtual(string filename)\",\n        \"Perform an Apache sub-request\"\n    ],\n    \"vprintf\": [\n        \"int vprintf(string format, array args)\",\n        \"Output a formatted string\"\n    ],\n    \"vsprintf\": [\n        \"string vsprintf(string format, array args)\",\n        \"Return a formatted string\"\n    ],\n    \"wddx_add_vars\": [\n        \"int wddx_add_vars(resource packet_id,  mixed var_names [, mixed ...])\",\n        \"Serializes given variables and adds them to packet given by packet_id\"\n    ],\n    \"wddx_deserialize\": [\n        \"mixed wddx_deserialize(mixed packet)\",\n        \"Deserializes given packet and returns a PHP value\"\n    ],\n    \"wddx_packet_end\": [\n        \"string wddx_packet_end(resource packet_id)\",\n        \"Ends specified WDDX packet and returns the string containing the packet\"\n    ],\n    \"wddx_packet_start\": [\n        \"resource wddx_packet_start([string comment])\",\n        \"Starts a WDDX packet with optional comment and returns the packet id\"\n    ],\n    \"wddx_serialize_value\": [\n        \"string wddx_serialize_value(mixed var [, string comment])\",\n        \"Creates a new packet and serializes the given value\"\n    ],\n    \"wddx_serialize_vars\": [\n        \"string wddx_serialize_vars(mixed var_name [, mixed ...])\",\n        \"Creates a new packet and serializes given variables into a struct\"\n    ],\n    \"wordwrap\": [\n        \"string wordwrap(string str [, int width [, string break [, boolean cut]]])\",\n        \"Wraps buffer to selected number of characters using string break char\"\n    ],\n    \"xml_error_string\": [\n        \"string xml_error_string(int code)\",\n        \"Get XML parser error string\"\n    ],\n    \"xml_get_current_byte_index\": [\n        \"int xml_get_current_byte_index(resource parser)\",\n        \"Get current byte index for an XML parser\"\n    ],\n    \"xml_get_current_column_number\": [\n        \"int xml_get_current_column_number(resource parser)\",\n        \"Get current column number for an XML parser\"\n    ],\n    \"xml_get_current_line_number\": [\n        \"int xml_get_current_line_number(resource parser)\",\n        \"Get current line number for an XML parser\"\n    ],\n    \"xml_get_error_code\": [\n        \"int xml_get_error_code(resource parser)\",\n        \"Get XML parser error code\"\n    ],\n    \"xml_parse\": [\n        \"int xml_parse(resource parser, string data [, int isFinal])\",\n        \"Start parsing an XML document\"\n    ],\n    \"xml_parse_into_struct\": [\n        \"int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])\",\n        \"Parsing a XML document\"\n    ],\n    \"xml_parser_create\": [\n        \"resource xml_parser_create([string encoding])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_create_ns\": [\n        \"resource xml_parser_create_ns([string encoding [, string sep]])\",\n        \"Create an XML parser\"\n    ],\n    \"xml_parser_free\": [\n        \"int xml_parser_free(resource parser)\",\n        \"Free an XML parser\"\n    ],\n    \"xml_parser_get_option\": [\n        \"int xml_parser_get_option(resource parser, int option)\",\n        \"Get options from an XML parser\"\n    ],\n    \"xml_parser_set_option\": [\n        \"int xml_parser_set_option(resource parser, int option, mixed value)\",\n        \"Set options in an XML parser\"\n    ],\n    \"xml_set_character_data_handler\": [\n        \"int xml_set_character_data_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_default_handler\": [\n        \"int xml_set_default_handler(resource parser, string hdl)\",\n        \"Set up default handler\"\n    ],\n    \"xml_set_element_handler\": [\n        \"int xml_set_element_handler(resource parser, string shdl, string ehdl)\",\n        \"Set up start and end element handlers\"\n    ],\n    \"xml_set_end_namespace_decl_handler\": [\n        \"int xml_set_end_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_external_entity_ref_handler\": [\n        \"int xml_set_external_entity_ref_handler(resource parser, string hdl)\",\n        \"Set up external entity reference handler\"\n    ],\n    \"xml_set_notation_decl_handler\": [\n        \"int xml_set_notation_decl_handler(resource parser, string hdl)\",\n        \"Set up notation declaration handler\"\n    ],\n    \"xml_set_object\": [\n        \"int xml_set_object(resource parser, object &obj)\",\n        \"Set up object which should be used for callbacks\"\n    ],\n    \"xml_set_processing_instruction_handler\": [\n        \"int xml_set_processing_instruction_handler(resource parser, string hdl)\",\n        \"Set up processing instruction (PI) handler\"\n    ],\n    \"xml_set_start_namespace_decl_handler\": [\n        \"int xml_set_start_namespace_decl_handler(resource parser, string hdl)\",\n        \"Set up character data handler\"\n    ],\n    \"xml_set_unparsed_entity_decl_handler\": [\n        \"int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)\",\n        \"Set up unparsed entity declaration handler\"\n    ],\n    \"xmlrpc_decode\": [\n        \"array xmlrpc_decode(string xml [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_decode_request\": [\n        \"array xmlrpc_decode_request(string xml, string& method [, string encoding])\",\n        \"Decodes XML into native PHP types\"\n    ],\n    \"xmlrpc_encode\": [\n        \"string xmlrpc_encode(mixed value)\",\n        \"Generates XML for a PHP value\"\n    ],\n    \"xmlrpc_encode_request\": [\n        \"string xmlrpc_encode_request(string method, mixed params [, array output_options])\",\n        \"Generates XML for a method request\"\n    ],\n    \"xmlrpc_get_type\": [\n        \"string xmlrpc_get_type(mixed value)\",\n        \"Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings\"\n    ],\n    \"xmlrpc_is_fault\": [\n        \"bool xmlrpc_is_fault(array)\",\n        \"Determines if an array value represents an XMLRPC fault.\"\n    ],\n    \"xmlrpc_parse_method_descriptions\": [\n        \"array xmlrpc_parse_method_descriptions(string xml)\",\n        \"Decodes XML into a list of method descriptions\"\n    ],\n    \"xmlrpc_server_add_introspection_data\": [\n        \"int xmlrpc_server_add_introspection_data(resource server, array desc)\",\n        \"Adds introspection documentation\"\n    ],\n    \"xmlrpc_server_call_method\": [\n        \"mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])\",\n        \"Parses XML requests and call methods\"\n    ],\n    \"xmlrpc_server_create\": [\n        \"resource xmlrpc_server_create(void)\",\n        \"Creates an xmlrpc server\"\n    ],\n    \"xmlrpc_server_destroy\": [\n        \"int xmlrpc_server_destroy(resource server)\",\n        \"Destroys server resources\"\n    ],\n    \"xmlrpc_server_register_introspection_callback\": [\n        \"bool xmlrpc_server_register_introspection_callback(resource server, string function)\",\n        \"Register a PHP function to generate documentation\"\n    ],\n    \"xmlrpc_server_register_method\": [\n        \"bool xmlrpc_server_register_method(resource server, string method_name, string function)\",\n        \"Register a PHP function to handle method matching method_name\"\n    ],\n    \"xmlrpc_set_type\": [\n        \"bool xmlrpc_set_type(string value, string type)\",\n        \"Sets xmlrpc type, base64 or datetime, for a PHP string value\"\n    ],\n    \"xmlwriter_end_attribute\": [\n        \"bool xmlwriter_end_attribute(resource xmlwriter)\",\n        \"End attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_cdata\": [\n        \"bool xmlwriter_end_cdata(resource xmlwriter)\",\n        \"End current CDATA - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_comment\": [\n        \"bool xmlwriter_end_comment(resource xmlwriter)\",\n        \"Create end comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_document\": [\n        \"bool xmlwriter_end_document(resource xmlwriter)\",\n        \"End current document - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd\": [\n        \"bool xmlwriter_end_dtd(resource xmlwriter)\",\n        \"End current DTD - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_attlist\": [\n        \"bool xmlwriter_end_dtd_attlist(resource xmlwriter)\",\n        \"End current DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_element\": [\n        \"bool xmlwriter_end_dtd_element(resource xmlwriter)\",\n        \"End current DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_dtd_entity\": [\n        \"bool xmlwriter_end_dtd_entity(resource xmlwriter)\",\n        \"End current DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_element\": [\n        \"bool xmlwriter_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_end_pi\": [\n        \"bool xmlwriter_end_pi(resource xmlwriter)\",\n        \"End current PI - returns FALSE on error\"\n    ],\n    \"xmlwriter_flush\": [\n        \"mixed xmlwriter_flush(resource xmlwriter [,bool empty])\",\n        \"Output current buffer\"\n    ],\n    \"xmlwriter_full_end_element\": [\n        \"bool xmlwriter_full_end_element(resource xmlwriter)\",\n        \"End current element - returns FALSE on error\"\n    ],\n    \"xmlwriter_open_memory\": [\n        \"resource xmlwriter_open_memory()\",\n        \"Create new xmlwriter using memory for string output\"\n    ],\n    \"xmlwriter_open_uri\": [\n        \"resource xmlwriter_open_uri(resource xmlwriter, string source)\",\n        \"Create new xmlwriter using source uri for output\"\n    ],\n    \"xmlwriter_output_memory\": [\n        \"string xmlwriter_output_memory(resource xmlwriter [,bool flush])\",\n        \"Output current buffer as string\"\n    ],\n    \"xmlwriter_set_indent\": [\n        \"bool xmlwriter_set_indent(resource xmlwriter, bool indent)\",\n        \"Toggle indentation on\\/off - returns FALSE on error\"\n    ],\n    \"xmlwriter_set_indent_string\": [\n        \"bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)\",\n        \"Set string used for indenting - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute\": [\n        \"bool xmlwriter_start_attribute(resource xmlwriter, string name)\",\n        \"Create start attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_attribute_ns\": [\n        \"bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_cdata\": [\n        \"bool xmlwriter_start_cdata(resource xmlwriter)\",\n        \"Create start CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_comment\": [\n        \"bool xmlwriter_start_comment(resource xmlwriter)\",\n        \"Create start comment - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_document\": [\n        \"bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)\",\n        \"Create document tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd\": [\n        \"bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)\",\n        \"Create start DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_attlist\": [\n        \"bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)\",\n        \"Create start DTD AttList - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_element\": [\n        \"bool xmlwriter_start_dtd_element(resource xmlwriter, string name)\",\n        \"Create start DTD element - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_dtd_entity\": [\n        \"bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)\",\n        \"Create start DTD Entity - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element\": [\n        \"bool xmlwriter_start_element(resource xmlwriter, string name)\",\n        \"Create start element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_element_ns\": [\n        \"bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)\",\n        \"Create start namespaced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_start_pi\": [\n        \"bool xmlwriter_start_pi(resource xmlwriter, string target)\",\n        \"Create start PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_text\": [\n        \"bool xmlwriter_text(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute\": [\n        \"bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)\",\n        \"Write full attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_attribute_ns\": [\n        \"bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)\",\n        \"Write full namespaced attribute - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_cdata\": [\n        \"bool xmlwriter_write_cdata(resource xmlwriter, string content)\",\n        \"Write full CDATA tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_comment\": [\n        \"bool xmlwriter_write_comment(resource xmlwriter, string content)\",\n        \"Write full comment tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd\": [\n        \"bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)\",\n        \"Write full DTD tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_attlist\": [\n        \"bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)\",\n        \"Write full DTD AttList tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_element\": [\n        \"bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)\",\n        \"Write full DTD element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_dtd_entity\": [\n        \"bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])\",\n        \"Write full DTD Entity tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element\": [\n        \"bool xmlwriter_write_element(resource xmlwriter, string name[, string content])\",\n        \"Write full element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_element_ns\": [\n        \"bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])\",\n        \"Write full namesapced element tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_pi\": [\n        \"bool xmlwriter_write_pi(resource xmlwriter, string target, string content)\",\n        \"Write full PI tag - returns FALSE on error\"\n    ],\n    \"xmlwriter_write_raw\": [\n        \"bool xmlwriter_write_raw(resource xmlwriter, string content)\",\n        \"Write text - returns FALSE on error\"\n    ],\n    \"xsl_xsltprocessor_get_parameter\": [\n        \"string xsl_xsltprocessor_get_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_has_exslt_support\": [\n        \"bool xsl_xsltprocessor_has_exslt_support();\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_import_stylesheet\": [\n        \"void xsl_xsltprocessor_import_stylesheet(domdocument doc);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_register_php_functions\": [\n        \"void xsl_xsltprocessor_register_php_functions([mixed $restrict]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_remove_parameter\": [\n        \"bool xsl_xsltprocessor_remove_parameter(string namespace, string name);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_parameter\": [\n        \"bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_set_profiling\": [\n        \"bool xsl_xsltprocessor_set_profiling(string filename) *\\/\",\n        \"PHP_FUNCTION(xsl_xsltprocessor_set_profiling) {  zval *id;  xsl_object *intern;  char *filename = NULL;  int filename_len;  DOM_GET_THIS(id);   if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \\\"s!\\\", &filename, &filename_len) == SUCCESS) {   intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC);   if (intern->profiling) {    efree(intern->profiling);   }   if (filename != NULL) {    intern->profiling = estrndup(filename,filename_len);   } else {    intern->profiling = NULL;   }   RETURN_TRUE;  } else {   WRONG_PARAM_COUNT;  } } \\/* }}} end xsl_xsltprocessor_set_profiling\"\n    ],\n    \"xsl_xsltprocessor_transform_to_doc\": [\n        \"domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);\",\n        \"URL: http:\\/\\/www.w3.org\\/TR\\/2003\\/WD-DOM-Level-3-Core-20030226\\/DOM3-Core.html# Since:\"\n    ],\n    \"xsl_xsltprocessor_transform_to_uri\": [\n        \"int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);\",\n        \"\"\n    ],\n    \"xsl_xsltprocessor_transform_to_xml\": [\n        \"string xsl_xsltprocessor_transform_to_xml(domdocument doc);\",\n        \"\"\n    ],\n    \"zend_logo_guid\": [\n        \"string zend_logo_guid(void)\",\n        \"Return the special ID used to request the Zend logo in phpinfo screens\"\n    ],\n    \"zend_version\": [\n        \"string zend_version(void)\",\n        \"Get the version of the Zend Engine\"\n    ],\n    \"zip_close\": [\n        \"void zip_close(resource zip)\",\n        \"Close a Zip archive\"\n    ],\n    \"zip_entry_close\": [\n        \"void zip_entry_close(resource zip_ent)\",\n        \"Close a zip entry\"\n    ],\n    \"zip_entry_compressedsize\": [\n        \"int zip_entry_compressedsize(resource zip_entry)\",\n        \"Return the compressed size of a ZZip entry\"\n    ],\n    \"zip_entry_compressionmethod\": [\n        \"string zip_entry_compressionmethod(resource zip_entry)\",\n        \"Return a string containing the compression method used on a particular entry\"\n    ],\n    \"zip_entry_filesize\": [\n        \"int zip_entry_filesize(resource zip_entry)\",\n        \"Return the actual filesize of a ZZip entry\"\n    ],\n    \"zip_entry_name\": [\n        \"string zip_entry_name(resource zip_entry)\",\n        \"Return the name given a ZZip entry\"\n    ],\n    \"zip_entry_open\": [\n        \"bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])\",\n        \"Open a Zip File, pointed by the resource entry\"\n    ],\n    \"zip_entry_read\": [\n        \"mixed zip_entry_read(resource zip_entry [, int len])\",\n        \"Read from an open directory entry\"\n    ],\n    \"zip_open\": [\n        \"resource zip_open(string filename)\",\n        \"Create new zip using source uri for output\"\n    ],\n    \"zip_read\": [\n        \"resource zip_read(resource zip)\",\n        \"Returns the next file in the archive\"\n    ],\n    \"zlib_get_coding_type\": [\n        \"string zlib_get_coding_type(void)\",\n        \"Returns the coding type used for output compression\"\n    ]\n};\n\nvar variableMap = {\n    \"$_COOKIE\": {\n        type: \"array\"\n    },\n    \"$_ENV\": {\n        type: \"array\"\n    },\n    \"$_FILES\": {\n        type: \"array\"\n    },\n    \"$_GET\": {\n        type: \"array\"\n    },\n    \"$_POST\": {\n        type: \"array\"\n    },\n    \"$_REQUEST\": {\n        type: \"array\"\n    },\n    \"$_SERVER\": {\n        type: \"array\",\n        value: {\n            \"DOCUMENT_ROOT\":  1,\n            \"GATEWAY_INTERFACE\":  1,\n            \"HTTP_ACCEPT\":  1,\n            \"HTTP_ACCEPT_CHARSET\":  1,\n            \"HTTP_ACCEPT_ENCODING\":  1 ,\n            \"HTTP_ACCEPT_LANGUAGE\":  1,\n            \"HTTP_CONNECTION\":  1,\n            \"HTTP_HOST\":  1,\n            \"HTTP_REFERER\":  1,\n            \"HTTP_USER_AGENT\":  1,\n            \"PATH_TRANSLATED\":  1,\n            \"PHP_SELF\":  1,\n            \"QUERY_STRING\":  1,\n            \"REMOTE_ADDR\":  1,\n            \"REMOTE_PORT\":  1,\n            \"REQUEST_METHOD\":  1,\n            \"REQUEST_URI\":  1,\n            \"SCRIPT_FILENAME\":  1,\n            \"SCRIPT_NAME\":  1,\n            \"SERVER_ADMIN\":  1,\n            \"SERVER_NAME\":  1,\n            \"SERVER_PORT\":  1,\n            \"SERVER_PROTOCOL\":  1,\n            \"SERVER_SIGNATURE\":  1,\n            \"SERVER_SOFTWARE\":  1\n        }\n    },\n    \"$_SESSION\": {\n        type: \"array\"\n    },\n    \"$GLOBALS\": {\n        type: \"array\"\n    }\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type) > -1;\n}\n\nvar PhpCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (token.type==='identifier')\n            return this.getFunctionCompletions(state, session, pos, prefix);\n        if (is(token, \"variable\"))\n            return this.getVariableCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (token.type==='string' && /(\\$[\\w]*)\\[[\"']([^'\"]*)$/i.test(line))\n            return this.getArrayKeyCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getFunctionCompletions = function(state, session, pos, prefix) {\n        var functions = Object.keys(functionMap);\n        return functions.map(function(func){\n            return {\n                caption: func,\n                snippet: func + '($0)',\n                meta: \"php function\",\n                score: Number.MAX_VALUE,\n                docHTML: functionMap[func][1]\n            };\n        });\n    };\n\n    this.getVariableCompletions = function(state, session, pos, prefix) {\n        var variables = Object.keys(variableMap);\n        return variables.map(function(variable){\n            return {\n                caption: variable,\n                value: variable,\n                meta: \"php variable\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getArrayKeyCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var variable = line.match(/(\\$[\\w]*)\\[[\"']([^'\"]*)$/i)[1];\n\n        if (!variableMap[variable]) {\n            return [];\n        }\n\n        var keys = [];\n        if (variableMap[variable].type==='array' && variableMap[variable].value)\n            keys = Object.keys(variableMap[variable].value);\n\n        return keys.map(function(key) {\n            return {\n                caption: key,\n                value: key,\n                meta: \"php array key\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(PhpCompletions.prototype);\n\nexports.PhpCompletions = PhpCompletions;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar initContext = function(editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = {rangeCount: editor.multiSelect.rangeCount};\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n                0,\n                selection.start.column + 1,\n                rowDiff,\n                selection.end.column + (rowDiff ? 0 : 1)\n            ]\n    };\n};\n\nvar CstyleBehaviour = function() {\n    this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                } else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n                if (!openBracePos)\n                     return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            } else if (closing) {\n                var next_indent = this.$getIndent(line);\n            } else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        } else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n\n    this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            } else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n\n    this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            } else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column-1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                \n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                \n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                \n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                } else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(leftChar);\n                    if (isWordBefore || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1,1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n};\n\n    \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isMaybeInsertedClosing(cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    }\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (state==='ruleset'){\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0',\n                meta: \"property\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    }\n                }\n                if (!line.substring(cursor.column).match(/^\\s*;/)) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    }\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';') {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                }\n            }\n        }\n    });\n\n}\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var firstChar = token.value.charAt(0);\n                if (firstChar == '\"' || firstChar == \"'\") {\n                    var lastChar = token.value.charAt(token.value.length - 1);\n                    var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;\n                    if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)\n                        return;\n                }\n            }\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return \"\";\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag)\n            return null;\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"html\": {\"manifest\": 1},\n    \"head\": {},\n    \"title\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"noscript\": {\"href\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"section\": {},\n    \"nav\": {},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"header\": {},\n    \"footer\": {},\n    \"address\": {},\n    \"main\": {},\n    \"p\": {},\n    \"hr\": {},\n    \"pre\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"ul\": {},\n    \"li\": {\"value\": 1},\n    \"dl\": {},\n    \"dt\": {},\n    \"dd\": {},\n    \"figure\": {},\n    \"figcaption\": {},\n    \"div\": {},\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"em\": {},\n    \"strong\": {},\n    \"small\": {},\n    \"s\": {},\n    \"cite\": {},\n    \"q\": {\"cite\": 1},\n    \"dfn\": {},\n    \"abbr\": {},\n    \"data\": {},\n    \"time\": {\"datetime\": 1},\n    \"code\": {},\n    \"var\": {},\n    \"samp\": {},\n    \"kbd\": {},\n    \"sub\": {},\n    \"sup\": {},\n    \"i\": {},\n    \"b\": {},\n    \"u\": {},\n    \"mark\": {},\n    \"ruby\": {},\n    \"rt\": {},\n    \"rp\": {},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"span\": {},\n    \"br\": {},\n    \"wbr\": {},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"map\": {\"name\": 1},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"svg\": {},\n    \"math\": {},\n    \"table\": {\"summary\": 1},\n    \"caption\": {},\n    \"colgroup\": {\"span\": 1},\n    \"col\": {\"span\": 1},\n    \"tbody\": {},\n    \"thead\": {},\n    \"tfoot\": {},\n    \"tr\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"legend\": {},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"datalist\": {},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"details\": {\"open\": 1},\n    \"summary\": {},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"dialog\": {\"open\": 1}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[A-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/php_completions\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar PhpHighlightRules = require(\"./php_highlight_rules\").PhpHighlightRules;\nvar PhpLangHighlightRules = require(\"./php_highlight_rules\").PhpLangHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar PhpCompletions = require(\"./php_completions\").PhpCompletions;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\nvar unicode = require(\"../unicode\");\nvar HtmlMode = require(\"./html\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\n\nvar PhpMode = function(opts) {\n    this.HighlightRules = PhpLangHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.$completer = new PhpCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(PhpMode, TextMode);\n\n(function() {\n\n    this.tokenRe = new RegExp(\"^[\"\n        + unicode.packages.L\n        + unicode.packages.Mn + unicode.packages.Mc\n        + unicode.packages.Nd\n        + unicode.packages.Pc + \"\\_]+\", \"g\"\n    );\n\n    this.nonTokenRe = new RegExp(\"^(?:[^\"\n        + unicode.packages.L\n        + unicode.packages.Mn + unicode.packages.Mc\n        + unicode.packages.Nd\n        + unicode.packages.Pc + \"\\_]|\\s])+\", \"g\"\n    );\n\n\n    this.lineCommentStart = [\"//\", \"#\"];\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[\\:]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState != \"doc-start\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.$id = \"ace/mode/php-inline\";\n}).call(PhpMode.prototype);\n\nvar Mode = function(opts) {\n    if (opts && opts.inline) {\n        var mode = new PhpMode();\n        mode.createWorker = this.createWorker;\n        mode.inlinePhp = true;\n        return mode;\n    }\n    HtmlMode.call(this);\n    this.HighlightRules = PhpHighlightRules;\n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode,\n        \"php-\": PhpMode\n    });\n    this.foldingRules.subModes[\"php-\"] = new CStyleFoldMode();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/php_worker\", \"PhpWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.inlinePhp)\n            worker.call(\"setOptions\", [{inline: true}]);\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/php\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-plain_text.js",
    "content": "ace.define(\"ace/mode/plain_text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar Behaviour = require(\"./behaviour\").Behaviour;\n\nvar Mode = function() {\n    this.HighlightRules = TextHighlightRules;\n    this.$behaviour = new Behaviour();\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n    this.type = \"text\";\n    this.getNextLineIndent = function(state, line, tab) {\n        return '';\n    };\n    this.$id = \"ace/mode/plain_text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-sass.js",
    "content": "ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap( (function () {\n\n        var browserPrefix = (\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\").split(\"|\");\n        \n        var prefixProperties = (\"appearance|background-clip|background-inline-policy|background-origin|\" + \n             \"background-size|binding|border-bottom-colors|border-left-colors|\" + \n             \"border-right-colors|border-top-colors|border-end|border-end-color|\" + \n             \"border-end-style|border-end-width|border-image|border-start|\" + \n             \"border-start-color|border-start-style|border-start-width|box-align|\" + \n             \"box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|\" + \n             \"box-pack|box-sizing|column-count|column-gap|column-width|column-rule|\" + \n             \"column-rule-width|column-rule-style|column-rule-color|float-edge|\" + \n             \"font-feature-settings|font-language-override|force-broken-image-icon|\" + \n             \"image-region|margin-end|margin-start|opacity|outline|outline-color|\" + \n             \"outline-offset|outline-radius|outline-radius-bottomleft|\" + \n             \"outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|\" + \n             \"outline-style|outline-width|padding-end|padding-start|stack-sizing|\" + \n             \"tab-size|text-blink|text-decoration-color|text-decoration-line|\" + \n             \"text-decoration-style|transform|transform-origin|transition|\" + \n             \"transition-delay|transition-duration|transition-property|\" + \n             \"transition-timing-function|user-focus|user-input|user-modify|user-select|\" +\n             \"window-shadow|border-radius\").split(\"|\");\n        \n        var properties = (\"azimuth|background-attachment|background-color|background-image|\" +\n            \"background-position|background-repeat|background|border-bottom-color|\" +\n            \"border-bottom-style|border-bottom-width|border-bottom|border-collapse|\" +\n            \"border-color|border-left-color|border-left-style|border-left-width|\" +\n            \"border-left|border-right-color|border-right-style|border-right-width|\" +\n            \"border-right|border-spacing|border-style|border-top-color|\" +\n            \"border-top-style|border-top-width|border-top|border-width|border|bottom|\" +\n            \"box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|\" +\n            \"counter-reset|cue-after|cue-before|cue|cursor|direction|display|\" +\n            \"elevation|empty-cells|float|font-family|font-size-adjust|font-size|\" +\n            \"font-stretch|font-style|font-variant|font-weight|font|height|left|\" +\n            \"letter-spacing|line-height|list-style-image|list-style-position|\" +\n            \"list-style-type|list-style|margin-bottom|margin-left|margin-right|\" +\n            \"margin-top|marker-offset|margin|marks|max-height|max-width|min-height|\" +\n            \"min-width|opacity|orphans|outline-color|\" +\n            \"outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|\" +\n            \"padding-left|padding-right|padding-top|padding|page-break-after|\" +\n            \"page-break-before|page-break-inside|page|pause-after|pause-before|\" +\n            \"pause|pitch-range|pitch|play-during|position|quotes|richness|right|\" +\n            \"size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|\" +\n            \"stress|table-layout|text-align|text-decoration|text-indent|\" +\n            \"text-shadow|text-transform|top|unicode-bidi|vertical-align|\" +\n            \"visibility|voice-family|volume|white-space|widows|width|word-spacing|\" +\n            \"z-index\").split(\"|\");\n        var ret = [];\n        for (var i=0, ln=browserPrefix.length; i<ln; i++) {\n            Array.prototype.push.apply(\n                ret,\n                (( browserPrefix[i] + prefixProperties.join(\"|\" + browserPrefix[i]) ).split(\"|\"))\n            );\n        }\n        Array.prototype.push.apply(ret, prefixProperties);\n        Array.prototype.push.apply(ret, properties);\n        \n        return ret;\n        \n    })() );\n    \n\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unqoute\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(\n        (\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|\" +\n        \"block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|\" +\n        \"char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|\" +\n        \"decimal-leading-zero|decimal|default|disabled|disc|\" +\n        \"distribute-all-lines|distribute-letter|distribute-space|\" +\n        \"distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|\" +\n        \"hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|\" +\n        \"ideograph-alpha|ideograph-numeric|ideograph-parenthesis|\" +\n        \"ideograph-space|inactive|inherit|inline-block|inline|inset|inside|\" +\n        \"inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|\" +\n        \"keep-all|left|lighter|line-edge|line-through|line|list-item|loose|\" +\n        \"lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|\" +\n        \"medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|\" +\n        \"nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|\" +\n        \"overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|\" +\n        \"ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|\" +\n        \"solid|square|static|strict|super|sw-resize|table-footer-group|\" +\n        \"table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|\" +\n        \"transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|\" +\n        \"vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|\" +\n        \"zero\").split(\"|\")\n    );\n\n    var colors = lang.arrayToMap(\n        (\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|\" +\n        \"purple|red|silver|teal|white|yellow\").split(\"|\")\n    );\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    )\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\n\nvar SassHighlightRules = function() {\n    ScssHighlightRules.call(this);\n    var start = this.$rules.start;\n    if (start[1].token == \"comment\") {\n        start.splice(1, 1, {\n            onMatch: function(value, currentState, stack) {\n                stack.unshift(this.next, -1, value.length - 2, currentState);\n                return \"comment\";\n            },\n            regex: /^\\s*\\/\\*/,\n            next: \"comment\"\n        }, {\n            token: \"error.invalid\",\n            regex: \"/\\\\*|[{;}]\"\n        }, {\n            token: \"support.type\",\n            regex: /^\\s*:[\\w\\-]+\\s/\n        });\n        \n        this.$rules.comment = [\n            {regex: /^\\s*/, onMatch: function(value, currentState, stack) {\n                if (stack[1] === -1)\n                    stack[1] = Math.max(stack[2], value.length - 1);\n                if (value.length <= stack[1]) {stack.shift();stack.shift();stack.shift();\n                    this.next = stack.shift();\n                    return \"text\";\n                } else {\n                    this.next = \"\";\n                    return \"comment\";\n                }\n            }, next: \"start\"},\n            {defaultToken: \"comment\"}\n        ]\n    }\n};\n\noop.inherits(SassHighlightRules, ScssHighlightRules);\n\nexports.SassHighlightRules = SassHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SassHighlightRules = require(\"./sass_highlight_rules\").SassHighlightRules;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = SassHighlightRules;\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {   \n    this.lineCommentStart = \"//\";\n    this.$id = \"ace/mode/sass\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-scss.js",
    "content": "ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar ScssHighlightRules = function() {\n    \n    var properties = lang.arrayToMap( (function () {\n\n        var browserPrefix = (\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\").split(\"|\");\n        \n        var prefixProperties = (\"appearance|background-clip|background-inline-policy|background-origin|\" + \n             \"background-size|binding|border-bottom-colors|border-left-colors|\" + \n             \"border-right-colors|border-top-colors|border-end|border-end-color|\" + \n             \"border-end-style|border-end-width|border-image|border-start|\" + \n             \"border-start-color|border-start-style|border-start-width|box-align|\" + \n             \"box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|\" + \n             \"box-pack|box-sizing|column-count|column-gap|column-width|column-rule|\" + \n             \"column-rule-width|column-rule-style|column-rule-color|float-edge|\" + \n             \"font-feature-settings|font-language-override|force-broken-image-icon|\" + \n             \"image-region|margin-end|margin-start|opacity|outline|outline-color|\" + \n             \"outline-offset|outline-radius|outline-radius-bottomleft|\" + \n             \"outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|\" + \n             \"outline-style|outline-width|padding-end|padding-start|stack-sizing|\" + \n             \"tab-size|text-blink|text-decoration-color|text-decoration-line|\" + \n             \"text-decoration-style|transform|transform-origin|transition|\" + \n             \"transition-delay|transition-duration|transition-property|\" + \n             \"transition-timing-function|user-focus|user-input|user-modify|user-select|\" +\n             \"window-shadow|border-radius\").split(\"|\");\n        \n        var properties = (\"azimuth|background-attachment|background-color|background-image|\" +\n            \"background-position|background-repeat|background|border-bottom-color|\" +\n            \"border-bottom-style|border-bottom-width|border-bottom|border-collapse|\" +\n            \"border-color|border-left-color|border-left-style|border-left-width|\" +\n            \"border-left|border-right-color|border-right-style|border-right-width|\" +\n            \"border-right|border-spacing|border-style|border-top-color|\" +\n            \"border-top-style|border-top-width|border-top|border-width|border|bottom|\" +\n            \"box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|\" +\n            \"counter-reset|cue-after|cue-before|cue|cursor|direction|display|\" +\n            \"elevation|empty-cells|float|font-family|font-size-adjust|font-size|\" +\n            \"font-stretch|font-style|font-variant|font-weight|font|height|left|\" +\n            \"letter-spacing|line-height|list-style-image|list-style-position|\" +\n            \"list-style-type|list-style|margin-bottom|margin-left|margin-right|\" +\n            \"margin-top|marker-offset|margin|marks|max-height|max-width|min-height|\" +\n            \"min-width|opacity|orphans|outline-color|\" +\n            \"outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|\" +\n            \"padding-left|padding-right|padding-top|padding|page-break-after|\" +\n            \"page-break-before|page-break-inside|page|pause-after|pause-before|\" +\n            \"pause|pitch-range|pitch|play-during|position|quotes|richness|right|\" +\n            \"size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|\" +\n            \"stress|table-layout|text-align|text-decoration|text-indent|\" +\n            \"text-shadow|text-transform|top|unicode-bidi|vertical-align|\" +\n            \"visibility|voice-family|volume|white-space|widows|width|word-spacing|\" +\n            \"z-index\").split(\"|\");\n        var ret = [];\n        for (var i=0, ln=browserPrefix.length; i<ln; i++) {\n            Array.prototype.push.apply(\n                ret,\n                (( browserPrefix[i] + prefixProperties.join(\"|\" + browserPrefix[i]) ).split(\"|\"))\n            );\n        }\n        Array.prototype.push.apply(ret, prefixProperties);\n        Array.prototype.push.apply(ret, properties);\n        \n        return ret;\n        \n    })() );\n    \n\n\n    var functions = lang.arrayToMap(\n        (\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|\" +\n         \"alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|\" + \n         \"floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|\" + \n         \"nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|\" +\n         \"scale_color|transparentize|type_of|unit|unitless|unqoute\").split(\"|\")\n    );\n\n    var constants = lang.arrayToMap(\n        (\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|\" +\n        \"block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|\" +\n        \"char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|\" +\n        \"decimal-leading-zero|decimal|default|disabled|disc|\" +\n        \"distribute-all-lines|distribute-letter|distribute-space|\" +\n        \"distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|\" +\n        \"hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|\" +\n        \"ideograph-alpha|ideograph-numeric|ideograph-parenthesis|\" +\n        \"ideograph-space|inactive|inherit|inline-block|inline|inset|inside|\" +\n        \"inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|\" +\n        \"keep-all|left|lighter|line-edge|line-through|line|list-item|loose|\" +\n        \"lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|\" +\n        \"medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|\" +\n        \"nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|\" +\n        \"overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|\" +\n        \"ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|\" +\n        \"solid|square|static|strict|super|sw-resize|table-footer-group|\" +\n        \"table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|\" +\n        \"transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|\" +\n        \"vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|\" +\n        \"zero\").split(\"|\")\n    );\n\n    var colors = lang.arrayToMap(\n        (\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|\" +\n        \"purple|red|silver|teal|white|yellow\").split(\"|\")\n    );\n    \n    var keywords = lang.arrayToMap(\n        (\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\").split(\"|\")\n    )\n    \n    var tags = lang.arrayToMap(\n        (\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|\" + \n         \"big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|\" + \n         \"command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|\" + \n         \"figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|\" + \n         \"header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|\" + \n         \"link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|\" + \n         \"option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|\" + \n         \"small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|\" + \n         \"textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\").split(\"|\")\n    );\n\n    var numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\n\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"\\\\/\\\\/.*$\"\n            },\n            {\n                token : \"comment\", // multi line comment\n                regex : \"\\\\/\\\\*\",\n                next : \"comment\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[\"].*\\\\\\\\$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single line\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"string\", // multi line string start\n                regex : \"['].*\\\\\\\\$\",\n                next : \"qstring\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe + \"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"\n            }, {\n                token : \"constant.numeric\", // hex6 color\n                regex : \"#[a-f0-9]{6}\"\n            }, {\n                token : \"constant.numeric\", // hex3 color\n                regex : \"#[a-f0-9]{3}\"\n            }, {\n                token : \"constant.numeric\",\n                regex : numRe\n            }, {\n                token : [\"support.function\", \"string\", \"support.function\"],\n                regex : \"(url\\\\()(.*)(\\\\))\"\n            }, {\n                token : function(value) {\n                    if (properties.hasOwnProperty(value.toLowerCase()))\n                        return \"support.type\";\n                    if (keywords.hasOwnProperty(value))\n                        return \"keyword\";\n                    else if (constants.hasOwnProperty(value))\n                        return \"constant.language\";\n                    else if (functions.hasOwnProperty(value))\n                        return \"support.function\";\n                    else if (colors.hasOwnProperty(value.toLowerCase()))\n                        return \"support.constant.color\";\n                    else if (tags.hasOwnProperty(value.toLowerCase()))\n                        return \"variable.language\";\n                    else\n                        return \"text\";\n                },\n                regex : \"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"\n            }, {\n                token : \"variable\",\n                regex : \"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"\n            }, {\n                token: \"variable.language\",\n                regex: \"#[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \"\\\\.[a-z0-9-_]+\"\n            }, {\n                token: \"variable.language\",\n                regex: \":[a-z0-9-_]+\"\n            }, {\n                token: \"constant\",\n                regex: \"[a-z0-9-_]+\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                caseInsensitive: true\n            }\n        ],\n        \"comment\" : [\n            {\n                token : \"comment\", // closing comment\n                regex : \".*?\\\\*\\\\/\",\n                next : \"start\"\n            }, {\n                token : \"comment\", // comment spanning whole line\n                regex : \".+\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"string\",\n                regex : \"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]\n    };\n};\n\noop.inherits(ScssHighlightRules, TextHighlightRules);\n\nexports.ScssHighlightRules = ScssHighlightRules;\n\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar initContext = function(editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = {rangeCount: editor.multiSelect.rangeCount};\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n                0,\n                selection.start.column + 1,\n                rowDiff,\n                selection.end.column + (rowDiff ? 0 : 1)\n            ]\n    };\n};\n\nvar CstyleBehaviour = function() {\n    this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                } else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n                if (!openBracePos)\n                     return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            } else if (closing) {\n                var next_indent = this.$getIndent(line);\n            } else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        } else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n\n    this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            } else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n\n    this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            } else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column-1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                \n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                \n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                \n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                } else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(leftChar);\n                    if (isWordBefore || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1,1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n};\n\n    \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isMaybeInsertedClosing(cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    }\n                }\n                if (!line.substring(cursor.column).match(/^\\s*;/)) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    }\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';') {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                }\n            }\n        }\n    });\n\n}\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar ScssHighlightRules = require(\"./scss_highlight_rules\").ScssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = ScssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n   \n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.$id = \"ace/mode/scss\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-twig.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar DocCommentHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [ {\n            token : \"comment.doc.tag\",\n            regex : \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n        }, \n        DocCommentHighlightRules.getTagRule(),\n        {\n            defaultToken : \"comment.doc\",\n            caseInsensitive: true\n        }]\n    };\n};\n\noop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\nDocCommentHighlightRules.getTagRule = function(start) {\n    return {\n        token : \"comment.doc.tag.storage.type\",\n        regex : \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n    };\n}\n\nDocCommentHighlightRules.getStartRule = function(start) {\n    return {\n        token : \"comment.doc\", // doc comment\n        regex : \"\\\\/\\\\*(?=\\\\*)\",\n        next  : start\n    };\n};\n\nDocCommentHighlightRules.getEndRule = function (start) {\n    return {\n        token : \"comment.doc\", // closing comment\n        regex : \"\\\\*\\\\/\",\n        next  : start\n    };\n};\n\n\nexports.DocCommentHighlightRules = DocCommentHighlightRules;\n\n});\n\nace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar identifierRe = \"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\";\n\nvar JavaScriptHighlightRules = function(options) {\n    var keywordMapper = this.createKeywordMapper({\n        \"variable.language\":\n            \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\"  + // Constructors\n            \"Namespace|QName|XML|XMLList|\"                                             + // E4X\n            \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\"   +\n            \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\"                    +\n            \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\"   + // Errors\n            \"SyntaxError|TypeError|URIError|\"                                          +\n            \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n            \"isNaN|parseFloat|parseInt|\"                                               +\n            \"JSON|Math|\"                                                               + // Other\n            \"this|arguments|prototype|window|document\"                                 , // Pseudo\n        \"keyword\":\n            \"const|yield|import|get|set|async|await|\" +\n            \"break|case|catch|continue|default|delete|do|else|finally|for|function|\" +\n            \"if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|\" +\n            \"__parent__|__count__|escape|unescape|with|__proto__|\" +\n            \"class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\n        \"storage.type\":\n            \"const|let|var|function\",\n        \"constant.language\":\n            \"null|Infinity|NaN|undefined\",\n        \"support.function\":\n            \"alert\",\n        \"constant.language.boolean\": \"true|false\"\n    }, \"identifier\");\n    var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n\n    var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n        \"u[0-9a-fA-F]{4}|\" + // unicode\n        \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n        \"[0-2][0-7]{0,2}|\" + // oct\n        \"3[0-7][0-7]?|\" + // oct\n        \"[4-7][0-7]?|\" + //oct\n        \".)\";\n\n    this.$rules = {\n        \"no_regex\" : [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"no_regex\"),\n            {\n                token : \"string\",\n                regex : \"'(?=.)\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : '\"(?=.)',\n                next  : \"qqstring\"\n            }, {\n                token : \"constant.numeric\", // hex\n                regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\\b/\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /[+-]?\\d[\\d_]*(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"support.function\",\n                    \"punctuation.operator\", \"entity.name.function\", \"text\",\"keyword.operator\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\",\n                    \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"entity.name.function\", \"text\", \"punctuation.operator\",\n                    \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : [\n                    \"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"keyword\",\n                regex : \"(?:\" + kwBeforeRe + \")\\\\b\",\n                next : \"start\"\n            }, {\n                token : [\"support.constant\"],\n                regex : /that\\b/\n            }, {\n                token : [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n                regex : /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n            }, {\n                token : keywordMapper,\n                regex : identifierRe\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/,\n                next  : \"property\"\n            }, {\n                token : \"keyword.operator\",\n                regex : /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,\n                next  : \"start\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[?:,;.]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.lparen\",\n                regex : /[\\[({]/,\n                next  : \"start\"\n            }, {\n                token : \"paren.rparen\",\n                regex : /[\\])}]/\n            }, {\n                token: \"comment\",\n                regex: /^#!.*$/\n            }\n        ],\n        property: [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            }, {\n                token : [\n                    \"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\",\n                    \"keyword.operator\", \"text\",\n                    \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"\n                ],\n                regex : \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe +\")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n                next: \"function_arguments\"\n            }, {\n                token : \"punctuation.operator\",\n                regex : /[.](?![.])/\n            }, {\n                token : \"support.function\",\n                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/\n            }, {\n                token : \"support.function.dom\",\n                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/\n            }, {\n                token :  \"support.constant\",\n                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/\n            }, {\n                token : \"identifier\",\n                regex : identifierRe\n            }, {\n                regex: \"\",\n                token: \"empty\",\n                next: \"no_regex\"\n            }\n        ],\n        \"start\": [\n            DocCommentHighlightRules.getStartRule(\"doc-start\"),\n            comments(\"start\"),\n            {\n                token: \"string.regexp\",\n                regex: \"\\\\/\",\n                next: \"regex\"\n            }, {\n                token : \"text\",\n                regex : \"\\\\s+|^$\",\n                next : \"start\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"regex\": [\n            {\n                token: \"regexp.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"string.regexp\",\n                regex: \"/[sxngimy]*\",\n                next: \"no_regex\"\n            }, {\n                token : \"invalid\",\n                regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n            }, {\n                token : \"constant.language.escape\",\n                regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n            }, {\n                token : \"constant.language.delimiter\",\n                regex: /\\|/\n            }, {\n                token: \"constant.language.escape\",\n                regex: /\\[\\^?/,\n                next: \"regex_character_class\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp\"\n            }\n        ],\n        \"regex_character_class\": [\n            {\n                token: \"regexp.charclass.keyword.operator\",\n                regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"]\",\n                next: \"regex\"\n            }, {\n                token: \"constant.language.escape\",\n                regex: \"-\"\n            }, {\n                token: \"empty\",\n                regex: \"$\",\n                next: \"no_regex\"\n            }, {\n                defaultToken: \"string.regexp.charachterclass\"\n            }\n        ],\n        \"function_arguments\": [\n            {\n                token: \"variable.parameter\",\n                regex: identifierRe\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"[, ]+\"\n            }, {\n                token: \"punctuation.operator\",\n                regex: \"$\"\n            }, {\n                token: \"empty\",\n                regex: \"\",\n                next: \"no_regex\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qqstring\"\n            }, {\n                token : \"string\",\n                regex : '\"|$',\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ],\n        \"qstring\" : [\n            {\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"string\",\n                regex : \"\\\\\\\\$\",\n                next  : \"qstring\"\n            }, {\n                token : \"string\",\n                regex : \"'|$\",\n                next  : \"no_regex\"\n            }, {\n                defaultToken: \"string\"\n            }\n        ]\n    };\n    \n    \n    if (!options || !options.noES6) {\n        this.$rules.no_regex.unshift({\n            regex: \"[{}]\", onMatch: function(val, state, stack) {\n                this.next = val == \"{\" ? this.nextState : \"\";\n                if (val == \"{\" && stack.length) {\n                    stack.unshift(\"start\", state);\n                }\n                else if (val == \"}\" && stack.length) {\n                    stack.shift();\n                    this.next = stack.shift();\n                    if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1)\n                        return \"paren.quasi.end\";\n                }\n                return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n            },\n            nextState: \"start\"\n        }, {\n            token : \"string.quasi.start\",\n            regex : /`/,\n            push  : [{\n                token : \"constant.language.escape\",\n                regex : escapedRe\n            }, {\n                token : \"paren.quasi.start\",\n                regex : /\\${/,\n                push  : \"start\"\n            }, {\n                token : \"string.quasi.end\",\n                regex : /`/,\n                next  : \"pop\"\n            }, {\n                defaultToken: \"string.quasi\"\n            }]\n        });\n        \n        if (!options || !options.noJSX)\n            JSX.call(this);\n    }\n    \n    this.embedRules(DocCommentHighlightRules, \"doc-\",\n        [ DocCommentHighlightRules.getEndRule(\"no_regex\") ]);\n    \n    this.normalizeRules();\n};\n\noop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\nfunction JSX() {\n    var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n    var jsxTag = {\n        onMatch : function(val, state, stack) {\n            var offset = val.charAt(1) == \"/\" ? 2 : 1;\n            if (offset == 1) {\n                if (state != this.nextState)\n                    stack.unshift(this.next, this.nextState, 0);\n                else\n                    stack.unshift(this.next);\n                stack[2]++;\n            } else if (offset == 2) {\n                if (state == this.nextState) {\n                    stack[1]--;\n                    if (!stack[1] || stack[1] < 0) {\n                        stack.shift();\n                        stack.shift();\n                    }\n                }\n            }\n            return [{\n                type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n                value: val.slice(0, offset)\n            }, {\n                type: \"meta.tag.tag-name.xml\",\n                value: val.substr(offset)\n            }];\n        },\n        regex : \"</?\" + tagRegex + \"\",\n        next: \"jsxAttributes\",\n        nextState: \"jsx\"\n    };\n    this.$rules.start.unshift(jsxTag);\n    var jsxJsRule = {\n        regex: \"{\",\n        token: \"paren.quasi.start\",\n        push: \"start\"\n    };\n    this.$rules.jsx = [\n        jsxJsRule,\n        jsxTag,\n        {include : \"reference\"},\n        {defaultToken: \"string\"}\n    ];\n    this.$rules.jsxAttributes = [{\n        token : \"meta.tag.punctuation.tag-close.xml\", \n        regex : \"/?>\", \n        onMatch : function(value, currentState, stack) {\n            if (currentState == stack[0])\n                stack.shift();\n            if (value.length == 2) {\n                if (stack[0] == this.nextState)\n                    stack[1]--;\n                if (!stack[1] || stack[1] < 0) {\n                    stack.splice(0, 2);\n                }\n            }\n            this.next = stack[0] || \"start\";\n            return [{type: this.token, value: value}];\n        },\n        nextState: \"jsx\"\n    }, \n    jsxJsRule,\n    comments(\"jsxAttributes\"),\n    {\n        token : \"entity.other.attribute-name.xml\",\n        regex : tagRegex\n    }, {\n        token : \"keyword.operator.attribute-equals.xml\",\n        regex : \"=\"\n    }, {\n        token : \"text.tag-whitespace.xml\",\n        regex : \"\\\\s+\"\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : \"'\",\n        stateName : \"jsx_attr_q\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    }, {\n        token : \"string.attribute-value.xml\",\n        regex : '\"',\n        stateName : \"jsx_attr_qq\",\n        push : [\n            {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n            {include : \"reference\"},\n            {defaultToken : \"string.attribute-value.xml\"}\n        ]\n    },\n    jsxTag\n    ];\n    this.$rules.reference = [{\n        token : \"constant.language.escape.reference.xml\",\n        regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n    }];\n}\n\nfunction comments(next) {\n    return [\n        {\n            token : \"comment\", // multi line comment\n            regex : /\\/\\*/,\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"\\\\*\\\\/\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }, {\n            token : \"comment\",\n            regex : \"\\\\/\\\\/\",\n            next: [\n                DocCommentHighlightRules.getTagRule(),\n                {token : \"comment\", regex : \"$|^\", next : next || \"pop\"},\n                {defaultToken : \"comment\", caseInsensitive: true}\n            ]\n        }\n    ];\n}\nexports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n    [\"text\", \"paren.rparen\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar initContext = function(editor) {\n    var id = -1;\n    if (editor.multiSelect) {\n        id = editor.selection.index;\n        if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n            contextCache = {rangeCount: editor.multiSelect.rangeCount};\n    }\n    if (contextCache[id])\n        return context = contextCache[id];\n    context = contextCache[id] = {\n        autoInsertedBrackets: 0,\n        autoInsertedRow: -1,\n        autoInsertedLineEnd: \"\",\n        maybeInsertedBrackets: 0,\n        maybeInsertedRow: -1,\n        maybeInsertedLineStart: \"\",\n        maybeInsertedLineEnd: \"\"\n    };\n};\n\nvar getWrapped = function(selection, selected, opening, closing) {\n    var rowDiff = selection.end.row - selection.start.row;\n    return {\n        text: opening + selected + closing,\n        selection: [\n                0,\n                selection.start.column + 1,\n                rowDiff,\n                selection.end.column + (rowDiff ? 0 : 1)\n            ]\n    };\n};\n\nvar CstyleBehaviour = function() {\n    this.add(\"braces\", \"insertion\", function(state, action, editor, session, text) {\n        var cursor = editor.getCursorPosition();\n        var line = session.doc.getLine(cursor.row);\n        if (text == '{') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '{', '}');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {\n                    CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n                    return {\n                        text: '{}',\n                        selection: [1, 1]\n                    };\n                } else {\n                    CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n                    return {\n                        text: '{',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == '}') {\n            initContext(editor);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == '}') {\n                var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        } else if (text == \"\\n\" || text == \"\\r\\n\") {\n            initContext(editor);\n            var closing = \"\";\n            if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n                closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n                CstyleBehaviour.clearMaybeInsertedClosing();\n            }\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === '}') {\n                var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');\n                if (!openBracePos)\n                     return null;\n                var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n            } else if (closing) {\n                var next_indent = this.$getIndent(line);\n            } else {\n                CstyleBehaviour.clearMaybeInsertedClosing();\n                return;\n            }\n            var indent = next_indent + session.getTabString();\n\n            return {\n                text: '\\n' + indent + '\\n' + next_indent + closing,\n                selection: [1, indent.length, 1, indent.length]\n            };\n        } else {\n            CstyleBehaviour.clearMaybeInsertedClosing();\n        }\n    });\n\n    this.add(\"braces\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '{') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.end.column, range.end.column + 1);\n            if (rightChar == '}') {\n                range.end.column++;\n                return range;\n            } else {\n                context.maybeInsertedBrackets--;\n            }\n        }\n    });\n\n    this.add(\"parens\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '(') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '(', ')');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n                return {\n                    text: '()',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ')') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ')') {\n                var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"parens\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '(') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ')') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '[') {\n            initContext(editor);\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, '[', ']');\n            } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n                CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n                return {\n                    text: '[]',\n                    selection: [1, 1]\n                };\n            }\n        } else if (text == ']') {\n            initContext(editor);\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar == ']') {\n                var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});\n                if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n                    CstyleBehaviour.popAutoInsertedClosing();\n                    return {\n                        text: '',\n                        selection: [1, 1]\n                    };\n                }\n            }\n        }\n    });\n\n    this.add(\"brackets\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected == '[') {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == ']') {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"insertion\", function(state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            initContext(editor);\n            var quote = text;\n            var selection = editor.getSelectionRange();\n            var selected = session.doc.getTextRange(selection);\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return getWrapped(selection, selected, quote, quote);\n            } else if (!selected) {\n                var cursor = editor.getCursorPosition();\n                var line = session.doc.getLine(cursor.row);\n                var leftChar = line.substring(cursor.column-1, cursor.column);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                \n                var token = session.getTokenAt(cursor.row, cursor.column);\n                var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n                if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n                    return null;\n                \n                var stringBefore = token && /string|escape/.test(token.type);\n                var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n                \n                var pair;\n                if (rightChar == quote) {\n                    pair = stringBefore !== stringAfter;\n                } else {\n                    if (stringBefore && !stringAfter)\n                        return null; // wrap string with different quote\n                    if (stringBefore && stringAfter)\n                        return null; // do not pair quotes inside strings\n                    var wordRe = session.$mode.tokenRe;\n                    wordRe.lastIndex = 0;\n                    var isWordBefore = wordRe.test(leftChar);\n                    wordRe.lastIndex = 0;\n                    var isWordAfter = wordRe.test(leftChar);\n                    if (isWordBefore || isWordAfter)\n                        return null; // before or after alphanumeric\n                    if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n                        return null; // there is rightChar and it isn't closing\n                    pair = true;\n                }\n                return {\n                    text: pair ? quote + quote : \"\",\n                    selection: [1,1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            initContext(editor);\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n};\n\n    \nCstyleBehaviour.isSaneInsertion = function(editor, session) {\n    var cursor = editor.getCursorPosition();\n    var iterator = new TokenIterator(session, cursor.row, cursor.column);\n    if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n        var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n        if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n            return false;\n    }\n    iterator.stepForward();\n    return iterator.getCurrentTokenRow() !== cursor.row ||\n        this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n    return types.indexOf(token.type || token) > -1;\n};\n\nCstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n        context.autoInsertedBrackets = 0;\n    context.autoInsertedRow = cursor.row;\n    context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n    context.autoInsertedBrackets++;\n};\n\nCstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {\n    var cursor = editor.getCursorPosition();\n    var line = session.doc.getLine(cursor.row);\n    if (!this.isMaybeInsertedClosing(cursor, line))\n        context.maybeInsertedBrackets = 0;\n    context.maybeInsertedRow = cursor.row;\n    context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n    context.maybeInsertedLineEnd = line.substr(cursor.column);\n    context.maybeInsertedBrackets++;\n};\n\nCstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {\n    return context.autoInsertedBrackets > 0 &&\n        cursor.row === context.autoInsertedRow &&\n        bracket === context.autoInsertedLineEnd[0] &&\n        line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\n\nCstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {\n    return context.maybeInsertedBrackets > 0 &&\n        cursor.row === context.maybeInsertedRow &&\n        line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n        line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n    context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n    context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n    if (context) {\n        context.maybeInsertedBrackets = 0;\n        context.maybeInsertedRow = -1;\n    }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(commentRegex) {\n    if (commentRegex) {\n        this.foldingStartMarker = new RegExp(\n            this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start)\n        );\n        this.foldingStopMarker = new RegExp(\n            this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end)\n        );\n    }\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n    \n    this.foldingStartMarker = /(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/;\n    this.foldingStopMarker = /^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/;\n    this.singleLineBlockCommentRe= /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n    this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n    this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n    this._getFoldWidgetBase = this.getFoldWidget;\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n    \n        if (this.singleLineBlockCommentRe.test(line)) {\n            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n                return \"\";\n        }\n    \n        var fw = this._getFoldWidgetBase(session, foldStyle, row);\n    \n        if (!fw && this.startRegionRe.test(line))\n            return \"start\"; // lineCommentRegionStart\n    \n        return fw;\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {\n        var line = session.getLine(row);\n        \n        if (this.startRegionRe.test(line))\n            return this.getCommentRegionBlock(session, line, row);\n        \n        var match = line.match(this.foldingStartMarker);\n        if (match) {\n            var i = match.index;\n\n            if (match[1])\n                return this.openingBracketBlock(session, match[1], row, i);\n                \n            var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n            \n            if (range && !range.isMultiLine()) {\n                if (forceMultiline) {\n                    range = this.getSectionRange(session, row);\n                } else if (foldStyle != \"all\")\n                    range = null;\n            }\n            \n            return range;\n        }\n\n        if (foldStyle === \"markbegin\")\n            return;\n\n        var match = line.match(this.foldingStopMarker);\n        if (match) {\n            var i = match.index + match[0].length;\n\n            if (match[1])\n                return this.closingBracketBlock(session, match[1], row, i);\n\n            return session.getCommentFoldRange(row, i, -1);\n        }\n    };\n    \n    this.getSectionRange = function(session, row) {\n        var line = session.getLine(row);\n        var startIndent = line.search(/\\S/);\n        var startRow = row;\n        var startColumn = line.length;\n        row = row + 1;\n        var endRow = row;\n        var maxRow = session.getLength();\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var indent = line.search(/\\S/);\n            if (indent === -1)\n                continue;\n            if  (startIndent > indent)\n                break;\n            var subRange = this.getFoldWidgetRange(session, \"all\", row);\n            \n            if (subRange) {\n                if (subRange.start.row <= startRow) {\n                    break;\n                } else if (subRange.isMultiLine()) {\n                    row = subRange.end.row;\n                } else if (startIndent == indent) {\n                    break;\n                }\n            }\n            endRow = row;\n        }\n        \n        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n    };\n    this.getCommentRegionBlock = function(session, line, row) {\n        var startColumn = line.search(/\\s*$/);\n        var maxRow = session.getLength();\n        var startRow = row;\n        \n        var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n        var depth = 1;\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var m = re.exec(line);\n            if (!m) continue;\n            if (m[1]) depth--;\n            else depth++;\n\n            if (!depth) break;\n        }\n\n        var endRow = row;\n        if (endRow > startRow) {\n            return new Range(startRow, startColumn, endRow, line.length);\n        }\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar Range = require(\"../range\").Range;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = JavaScriptHighlightRules;\n    \n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CstyleBehaviour();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"//\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\" || state == \"no_regex\") {\n            var match = line.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        } else if (state == \"doc-start\") {\n            if (endState == \"start\" || endState == \"no_regex\") {\n                return \"\";\n            }\n            var match = line.match(/^\\s*(\\/?)\\*/);\n            if (match) {\n                if (match[1]) {\n                    indent += \" \";\n                }\n                indent += \"* \";\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(results) {\n            session.setAnnotations(results.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/javascript\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar supportType = exports.supportType = \"align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index\";\nvar supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\nvar supportConstant = exports.supportConstant = \"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\";\nvar supportConstantColor = exports.supportConstantColor = \"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\";\nvar supportConstantFonts = exports.supportConstantFonts = \"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\";\n\nvar numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";\nvar pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\nvar pseudoClasses  = exports.pseudoClasses =  \"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\";\n\nvar CssHighlightRules = function() {\n\n    var keywordMapper = this.createKeywordMapper({\n        \"support.function\": supportFunction,\n        \"support.constant\": supportConstant,\n        \"support.type\": supportType,\n        \"support.constant.color\": supportConstantColor,\n        \"support.constant.fonts\": supportConstantFonts\n    }, \"text\", true);\n\n    this.$rules = {\n        \"start\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"@.*?{\",\n            push:  \"media\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"media\" : [{\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token: \"paren.lparen\",\n            regex: \"\\\\{\",\n            push:  \"ruleset\"\n        }, {\n            token: \"string\",\n            regex: \"\\\\}\",\n            next:  \"pop\"\n        }, {\n            token: \"keyword\",\n            regex: \"#[a-z0-9-_]+\"\n        }, {\n            token: \"variable\",\n            regex: \"\\\\.[a-z0-9-_]+\"\n        }, {\n            token: \"string\",\n            regex: \":[a-z0-9-_]+\"\n        }, {\n            token: \"constant\",\n            regex: \"[a-z0-9-_]+\"\n        }, {\n            caseInsensitive: true\n        }],\n\n        \"comment\" : [{\n            token : \"comment\",\n            regex : \"\\\\*\\\\/\",\n            next : \"pop\"\n        }, {\n            defaultToken : \"comment\"\n        }],\n\n        \"ruleset\" : [\n        {\n            token : \"paren.rparen\",\n            regex : \"\\\\}\",\n            next:   \"pop\"\n        }, {\n            token : \"comment\", // multi line comment\n            regex : \"\\\\/\\\\*\",\n            push : \"comment\"\n        }, {\n            token : \"string\", // single line\n            regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n        }, {\n            token : \"string\", // single line\n            regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n        }, {\n            token : [\"constant.numeric\", \"keyword\"],\n            regex : \"(\" + numRe + \")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"\n        }, {\n            token : \"constant.numeric\",\n            regex : numRe\n        }, {\n            token : \"constant.numeric\",  // hex6 color\n            regex : \"#[a-f0-9]{6}\"\n        }, {\n            token : \"constant.numeric\", // hex3 color\n            regex : \"#[a-f0-9]{3}\"\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n            regex : pseudoElements\n        }, {\n            token : [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n            regex : pseudoClasses\n        }, {\n            token : [\"support.function\", \"string\", \"support.function\"],\n            regex : \"(url\\\\()(.*)(\\\\))\"\n        }, {\n            token : keywordMapper,\n            regex : \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n        }, {\n            caseInsensitive: true\n        }]\n    };\n\n    this.normalizeRules();\n};\n\noop.inherits(CssHighlightRules, TextHighlightRules);\n\nexports.CssHighlightRules = CssHighlightRules;\n\n});\n\nace.define(\"ace/mode/css_completions\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar propertyMap = {\n    \"background\": {\"#$0\": 1},\n    \"background-color\": {\"#$0\": 1, \"transparent\": 1, \"fixed\": 1},\n    \"background-image\": {\"url('/$0')\": 1},\n    \"background-repeat\": {\"repeat\": 1, \"repeat-x\": 1, \"repeat-y\": 1, \"no-repeat\": 1, \"inherit\": 1},\n    \"background-position\": {\"bottom\":2, \"center\":2, \"left\":2, \"right\":2, \"top\":2, \"inherit\":2},\n    \"background-attachment\": {\"scroll\": 1, \"fixed\": 1},\n    \"background-size\": {\"cover\": 1, \"contain\": 1},\n    \"background-clip\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"background-origin\": {\"border-box\": 1, \"padding-box\": 1, \"content-box\": 1},\n    \"border\": {\"solid $0\": 1, \"dashed $0\": 1, \"dotted $0\": 1, \"#$0\": 1},\n    \"border-color\": {\"#$0\": 1},\n    \"border-style\": {\"solid\":2, \"dashed\":2, \"dotted\":2, \"double\":2, \"groove\":2, \"hidden\":2, \"inherit\":2, \"inset\":2, \"none\":2, \"outset\":2, \"ridged\":2},\n    \"border-collapse\": {\"collapse\": 1, \"separate\": 1},\n    \"bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"clear\": {\"left\": 1, \"right\": 1, \"both\": 1, \"none\": 1},\n    \"color\": {\"#$0\": 1, \"rgb(#$00,0,0)\": 1},\n    \"cursor\": {\"default\": 1, \"pointer\": 1, \"move\": 1, \"text\": 1, \"wait\": 1, \"help\": 1, \"progress\": 1, \"n-resize\": 1, \"ne-resize\": 1, \"e-resize\": 1, \"se-resize\": 1, \"s-resize\": 1, \"sw-resize\": 1, \"w-resize\": 1, \"nw-resize\": 1},\n    \"display\": {\"none\": 1, \"block\": 1, \"inline\": 1, \"inline-block\": 1, \"table-cell\": 1},\n    \"empty-cells\": {\"show\": 1, \"hide\": 1},\n    \"float\": {\"left\": 1, \"right\": 1, \"none\": 1},\n    \"font-family\": {\"Arial\":2,\"Comic Sans MS\":2,\"Consolas\":2,\"Courier New\":2,\"Courier\":2,\"Georgia\":2,\"Monospace\":2,\"Sans-Serif\":2, \"Segoe UI\":2,\"Tahoma\":2,\"Times New Roman\":2,\"Trebuchet MS\":2,\"Verdana\": 1},\n    \"font-size\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"font-weight\": {\"bold\": 1, \"normal\": 1},\n    \"font-style\": {\"italic\": 1, \"normal\": 1},\n    \"font-variant\": {\"normal\": 1, \"small-caps\": 1},\n    \"height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"letter-spacing\": {\"normal\": 1},\n    \"line-height\": {\"normal\": 1},\n    \"list-style-type\": {\"none\": 1, \"disc\": 1, \"circle\": 1, \"square\": 1, \"decimal\": 1, \"decimal-leading-zero\": 1, \"lower-roman\": 1, \"upper-roman\": 1, \"lower-greek\": 1, \"lower-latin\": 1, \"upper-latin\": 1, \"georgian\": 1, \"lower-alpha\": 1, \"upper-alpha\": 1},\n    \"margin\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"margin-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"max-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-height\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"min-width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"overflow\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-x\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"overflow-y\": {\"hidden\": 1, \"visible\": 1, \"auto\": 1, \"scroll\": 1},\n    \"padding\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-bottom\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"padding-left\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"page-break-after\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"page-break-before\": {\"auto\": 1, \"always\": 1, \"avoid\": 1, \"left\": 1, \"right\": 1},\n    \"position\": {\"absolute\": 1, \"relative\": 1, \"fixed\": 1, \"static\": 1},\n    \"right\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"table-layout\": {\"fixed\": 1, \"auto\": 1},\n    \"text-decoration\": {\"none\": 1, \"underline\": 1, \"line-through\": 1, \"blink\": 1},\n    \"text-align\": {\"left\": 1, \"right\": 1, \"center\": 1, \"justify\": 1},\n    \"text-transform\": {\"capitalize\": 1, \"uppercase\": 1, \"lowercase\": 1, \"none\": 1},\n    \"top\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"vertical-align\": {\"top\": 1, \"bottom\": 1},\n    \"visibility\": {\"hidden\": 1, \"visible\": 1},\n    \"white-space\": {\"nowrap\": 1, \"normal\": 1, \"pre\": 1, \"pre-line\": 1, \"pre-wrap\": 1},\n    \"width\": {\"px\": 1, \"em\": 1, \"%\": 1},\n    \"word-spacing\": {\"normal\": 1},\n    \"filter\": {\"alpha(opacity=$0100)\": 1},\n\n    \"text-shadow\": {\"$02px 2px 2px #777\": 1},\n    \"text-overflow\": {\"ellipsis-word\": 1, \"clip\": 1, \"ellipsis\": 1},\n    \"-moz-border-radius\": 1,\n    \"-moz-border-radius-topright\": 1,\n    \"-moz-border-radius-bottomright\": 1,\n    \"-moz-border-radius-topleft\": 1,\n    \"-moz-border-radius-bottomleft\": 1,\n    \"-webkit-border-radius\": 1,\n    \"-webkit-border-top-right-radius\": 1,\n    \"-webkit-border-top-left-radius\": 1,\n    \"-webkit-border-bottom-right-radius\": 1,\n    \"-webkit-border-bottom-left-radius\": 1,\n    \"-moz-box-shadow\": 1,\n    \"-webkit-box-shadow\": 1,\n    \"transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-moz-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1},\n    \"-webkit-transform\": {\"rotate($00deg)\": 1, \"skew($00deg)\": 1 }\n};\n\nvar CssCompletions = function() {\n\n};\n\n(function() {\n\n    this.completionsDefined = false;\n\n    this.defineCompletions = function() {\n        if (document) {\n            var style = document.createElement('c').style;\n\n            for (var i in style) {\n                if (typeof style[i] !== 'string')\n                    continue;\n\n                var name = i.replace(/[A-Z]/g, function(x) {\n                    return '-' + x.toLowerCase();\n                });\n\n                if (!propertyMap.hasOwnProperty(name))\n                    propertyMap[name] = 1;\n            }\n        }\n\n        this.completionsDefined = true;\n    }\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        if (!this.completionsDefined) {\n            this.defineCompletions();\n        }\n\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (state==='ruleset'){\n            var line = session.getLine(pos.row).substr(0, pos.column);\n            if (/:[^;]+$/.test(line)) {\n                /([\\w\\-]+):[^:]*$/.test(line);\n\n                return this.getPropertyValueCompletions(state, session, pos, prefix);\n            } else {\n                return this.getPropertyCompletions(state, session, pos, prefix);\n            }\n        }\n\n        return [];\n    };\n\n    this.getPropertyCompletions = function(state, session, pos, prefix) {\n        var properties = Object.keys(propertyMap);\n        return properties.map(function(property){\n            return {\n                caption: property,\n                snippet: property + ': $0',\n                meta: \"property\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getPropertyValueCompletions = function(state, session, pos, prefix) {\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n\n        if (!property)\n            return [];\n        var values = [];\n        if (property in propertyMap && typeof propertyMap[property] === \"object\") {\n            values = Object.keys(propertyMap[property]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"property value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(CssCompletions.prototype);\n\nexports.CssCompletions = CssCompletions;\n});\n\nace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar CssBehaviour = function () {\n\n    this.inherit(CstyleBehaviour);\n\n    this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(cursor.row);\n                var rightChar = line.substring(cursor.column, cursor.column + 1);\n                if (rightChar === ':') {\n                    return {\n                       text: '',\n                       selection: [1, 1]\n                    }\n                }\n                if (!line.substring(cursor.column).match(/^\\s*;/)) {\n                    return {\n                       text: ':;',\n                       selection: [1, 1]\n                    }\n                }\n            }\n        }\n    });\n\n    this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && selected === ':') {\n            var cursor = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n            if (token && token.value.match(/\\s+/)) {\n                token = iterator.stepBackward();\n            }\n            if (token && token.type === 'support.type') {\n                var line = session.doc.getLine(range.start.row);\n                var rightChar = line.substring(range.end.column, range.end.column + 1);\n                if (rightChar === ';') {\n                    range.end.column ++;\n                    return range;\n                }\n            }\n        }\n    });\n\n    this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n        if (text === ';') {\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            if (rightChar === ';') {\n                return {\n                   text: '',\n                   selection: [1, 1]\n                }\n            }\n        }\n    });\n\n}\noop.inherits(CssBehaviour, CstyleBehaviour);\n\nexports.CssBehaviour = CssBehaviour;\n});\n\nace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/css_completions\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar CssCompletions = require(\"./css_completions\").CssCompletions;\nvar CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\nvar CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = CssHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.$behaviour = new CssBehaviour();\n    this.$completer = new CssCompletions();\n    this.foldingRules = new CStyleFoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.foldingRules = \"cStyle\";\n    this.blockComment = {start: \"/*\", end: \"*/\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        var match = line.match(/^.*\\{\\s*$/);\n        if (match) {\n            indent += tab;\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        worker.on(\"annotate\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/css\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar XmlHighlightRules = function(normalize) {\n    var tagRegex = \"[_:a-zA-Z\\xc0-\\uffff][-_:.a-zA-Z0-9\\xc0-\\uffff]*\";\n\n    this.$rules = {\n        start : [\n            {token : \"string.cdata.xml\", regex : \"<\\\\!\\\\[CDATA\\\\[\", next : \"cdata\"},\n            {\n                token : [\"punctuation.xml-decl.xml\", \"keyword.xml-decl.xml\"],\n                regex : \"(<\\\\?)(xml)(?=[\\\\s])\", next : \"xml_decl\", caseInsensitive: true\n            },\n            {\n                token : [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n                regex : \"(<\\\\?)(\" + tagRegex + \")\", next : \"processing_instruction\"\n            },\n            {token : \"comment.xml\", regex : \"<\\\\!--\", next : \"comment\"},\n            {\n                token : [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n                regex : \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\", next : \"doctype\", caseInsensitive: true\n            },\n            {include : \"tag\"},\n            {token : \"text.end-tag-open.xml\", regex: \"</\"},\n            {token : \"text.tag-open.xml\", regex: \"<\"},\n            {include : \"reference\"},\n            {defaultToken : \"text.xml\"}\n        ],\n\n        xml_decl : [{\n            token : \"entity.other.attribute-name.decl-attribute-name.xml\",\n            regex : \"(?:\" + tagRegex + \":)?\" + tagRegex + \"\"\n        }, {\n            token : \"keyword.operator.decl-attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"whitespace\"\n        }, {\n            include: \"string\"\n        }, {\n            token : \"punctuation.xml-decl.xml\",\n            regex : \"\\\\?>\",\n            next : \"start\"\n        }],\n\n        processing_instruction : [\n            {token : \"punctuation.instruction.xml\", regex : \"\\\\?>\", next : \"start\"},\n            {defaultToken : \"instruction.xml\"}\n        ],\n\n        doctype : [\n            {include : \"whitespace\"},\n            {include : \"string\"},\n            {token : \"xml-pe.doctype.xml\", regex : \">\", next : \"start\"},\n            {token : \"xml-pe.xml\", regex : \"[-_a-zA-Z0-9:]+\"},\n            {token : \"punctuation.int-subset\", regex : \"\\\\[\", push : \"int_subset\"}\n        ],\n\n        int_subset : [{\n            token : \"text.xml\",\n            regex : \"\\\\s+\"\n        }, {\n            token: \"punctuation.int-subset.xml\",\n            regex: \"]\",\n            next: \"pop\"\n        }, {\n            token : [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n            regex : \"(<\\\\!)(\" + tagRegex + \")\",\n            push : [{\n                token : \"text\",\n                regex : \"\\\\s+\"\n            },\n            {\n                token : \"punctuation.markup-decl.xml\",\n                regex : \">\",\n                next : \"pop\"\n            },\n            {include : \"string\"}]\n        }],\n\n        cdata : [\n            {token : \"string.cdata.xml\", regex : \"\\\\]\\\\]>\", next : \"start\"},\n            {token : \"text.xml\", regex : \"\\\\s+\"},\n            {token : \"text.xml\", regex : \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}\n        ],\n\n        comment : [\n            {token : \"comment.xml\", regex : \"-->\", next : \"start\"},\n            {defaultToken : \"comment.xml\"}\n        ],\n\n        reference : [{\n            token : \"constant.language.escape.reference.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        attr_reference : [{\n            token : \"constant.language.escape.reference.attribute-value.xml\",\n            regex : \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n        }],\n\n        tag : [{\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n            regex : \"(?:(<)|(</))((?:\" + tagRegex + \":)?\" + tagRegex + \")\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n            ]\n        }],\n\n        tag_whitespace : [\n            {token : \"text.tag-whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        whitespace : [\n            {token : \"text.whitespace.xml\", regex : \"\\\\s+\"}\n        ],\n        string: [{\n            token : \"string.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.xml\", regex: \"'\", next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }, {\n            token : \"string.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.xml\", regex: '\"', next: \"pop\"},\n                {defaultToken : \"string.xml\"}\n            ]\n        }],\n\n        attributes: [{\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"(?:\" + tagRegex + \":)?\" + tagRegex + \"\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\"\n        }, {\n            include: \"tag_whitespace\"\n        }, {\n            include: \"attribute_value\"\n        }],\n\n        attribute_value: [{\n            token : \"string.attribute-value.xml\",\n            regex : \"'\",\n            push : [\n                {token : \"string.attribute-value.xml\", regex: \"'\", next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }, {\n            token : \"string.attribute-value.xml\",\n            regex : '\"',\n            push : [\n                {token : \"string.attribute-value.xml\", regex: '\"', next: \"pop\"},\n                {include : \"attr_reference\"},\n                {defaultToken : \"string.attribute-value.xml\"}\n            ]\n        }]\n    };\n\n    if (this.constructor === XmlHighlightRules)\n        this.normalizeRules();\n};\n\n\n(function() {\n\n    this.embedTagRules = function(HighlightRules, prefix, tag){\n        this.$rules.tag.unshift({\n            token : [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: [\n                {include : \"attributes\"},\n                {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : prefix + \"start\"}\n            ]\n        });\n\n        this.$rules[tag + \"-end\"] = [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\",  next: \"start\",\n                onMatch : function(value, currentState, stack) {\n                    stack.splice(0);\n                    return this.token;\n            }}\n        ]\n\n        this.embedRules(HighlightRules, prefix, [{\n            token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n            regex : \"(</)(\" + tag + \"(?=\\\\s|>|$))\",\n            next: tag + \"-end\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"<\\\\!\\\\[CDATA\\\\[\"\n        }, {\n            token: \"string.cdata.xml\",\n            regex : \"\\\\]\\\\]>\"\n        }]);\n    };\n\n}).call(TextHighlightRules.prototype);\n\noop.inherits(XmlHighlightRules, TextHighlightRules);\n\nexports.XmlHighlightRules = XmlHighlightRules;\n});\n\nace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\nvar JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\nvar XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\nvar tagMap = lang.createMap({\n    a           : 'anchor',\n    button \t    : 'form',\n    form        : 'form',\n    img         : 'image',\n    input       : 'form',\n    label       : 'form',\n    option      : 'form',\n    script      : 'script',\n    select      : 'form',\n    textarea    : 'form',\n    style       : 'style',\n    table       : 'table',\n    tbody       : 'table',\n    td          : 'table',\n    tfoot       : 'table',\n    th          : 'table',\n    tr          : 'table'\n});\n\nvar HtmlHighlightRules = function() {\n    XmlHighlightRules.call(this);\n\n    this.addRules({\n        attributes: [{\n            include : \"tag_whitespace\"\n        }, {\n            token : \"entity.other.attribute-name.xml\",\n            regex : \"[-_a-zA-Z0-9:.]+\"\n        }, {\n            token : \"keyword.operator.attribute-equals.xml\",\n            regex : \"=\",\n            push : [{\n                include: \"tag_whitespace\"\n            }, {\n                token : \"string.unquoted.attribute-value.html\",\n                regex : \"[^<>='\\\"`\\\\s]+\",\n                next : \"pop\"\n            }, {\n                token : \"empty\",\n                regex : \"\",\n                next : \"pop\"\n            }]\n        }, {\n            include : \"attribute_value\"\n        }],\n        tag: [{\n            token : function(start, tag) {\n                var group = tagMap[tag];\n                return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\",\n                    \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n            },\n            regex : \"(</?)([-_a-zA-Z0-9:.]+)\",\n            next: \"tag_stuff\"\n        }],\n        tag_stuff: [\n            {include : \"attributes\"},\n            {token : \"meta.tag.punctuation.tag-close.xml\", regex : \"/?>\", next : \"start\"}\n        ]\n    });\n\n    this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n    this.embedTagRules(new JavaScriptHighlightRules({noJSX: true}).getRules(), \"js-\", \"script\");\n\n    if (this.constructor === HtmlHighlightRules)\n        this.normalizeRules();\n};\n\noop.inherits(HtmlHighlightRules, XmlHighlightRules);\n\nexports.HtmlHighlightRules = HtmlHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nvar XmlBehaviour = function () {\n\n    this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '\"' || text == \"'\") {\n            var quote = text;\n            var selected = session.doc.getTextRange(editor.getSelectionRange());\n            if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n                return {\n                    text: quote + selected + quote,\n                    selection: false\n                };\n            }\n\n            var cursor = editor.getCursorPosition();\n            var line = session.doc.getLine(cursor.row);\n            var rightChar = line.substring(cursor.column, cursor.column + 1);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n                return {\n                    text: \"\",\n                    selection: [1, 1]\n                };\n            }\n\n            if (!token)\n                token = iterator.stepBackward();\n\n            if (!token)\n                return;\n\n            while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n                token = iterator.stepBackward();\n            }\n            var rightSpace = !rightChar || rightChar.match(/\\s/);\n            if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || (is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?'))) {\n                return {\n                    text: quote + quote,\n                    selection: [1, 1]\n                };\n            }\n        }\n    });\n\n    this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n        var selected = session.doc.getTextRange(range);\n        if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n            var line = session.doc.getLine(range.start.row);\n            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n            if (rightChar == selected) {\n                range.end.column++;\n                return range;\n            }\n        }\n    });\n\n    this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == '>') {\n            var position = editor.getCursorPosition();\n            var iterator = new TokenIterator(session, position.row, position.column);\n            var token = iterator.getCurrentToken() || iterator.stepBackward();\n            if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\")))\n                return;\n            if (is(token, \"reference.attribute-value\"))\n                return;\n            if (is(token, \"attribute-value\")) {\n                var firstChar = token.value.charAt(0);\n                if (firstChar == '\"' || firstChar == \"'\") {\n                    var lastChar = token.value.charAt(token.value.length - 1);\n                    var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;\n                    if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)\n                        return;\n                }\n            }\n            while (!is(token, \"tag-name\")) {\n                token = iterator.stepBackward();\n            }\n\n            var tokenRow = iterator.getCurrentTokenRow();\n            var tokenColumn = iterator.getCurrentTokenColumn();\n            if (is(iterator.stepBackward(), \"end-tag-open\"))\n                return;\n\n            var element = token.value;\n            if (tokenRow == position.row)\n                element = element.substring(0, position.column - tokenColumn);\n\n            if (this.voidElements.hasOwnProperty(element.toLowerCase()))\n                 return;\n\n            return {\n               text: \">\" + \"</\" + element + \">\",\n               selection: [1, 1]\n            };\n        }\n    });\n\n    this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n        if (text == \"\\n\") {\n            var cursor = editor.getCursorPosition();\n            var line = session.getLine(cursor.row);\n            var iterator = new TokenIterator(session, cursor.row, cursor.column);\n            var token = iterator.getCurrentToken();\n\n            if (token && token.type.indexOf(\"tag-close\") !== -1) {\n                if (token.value == \"/>\")\n                    return;\n                while (token && token.type.indexOf(\"tag-name\") === -1) {\n                    token = iterator.stepBackward();\n                }\n\n                if (!token) {\n                    return;\n                }\n\n                var tag = token.value;\n                var row = iterator.getCurrentTokenRow();\n                token = iterator.stepBackward();\n                if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n                    return;\n                }\n\n                if (this.voidElements && !this.voidElements[tag]) {\n                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);\n                    var line = session.getLine(row);\n                    var nextIndent = this.$getIndent(line);\n                    var indent = nextIndent + session.getTabString();\n\n                    if (nextToken && nextToken.value === \"</\") {\n                        return {\n                            text: \"\\n\" + indent + \"\\n\" + nextIndent,\n                            selection: [1, indent.length, 1, indent.length]\n                        };\n                    } else {\n                        return {\n                            text: \"\\n\" + indent\n                        };\n                    }\n                }\n            }\n        }\n    });\n\n};\n\noop.inherits(XmlBehaviour, Behaviour);\n\nexports.XmlBehaviour = XmlBehaviour;\n});\n\nace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(defaultMode, subModes) {\n    this.defaultMode = defaultMode;\n    this.subModes = subModes;\n};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n\n    this.$getMode = function(state) {\n        if (typeof state != \"string\") \n            state = state[0];\n        for (var key in this.subModes) {\n            if (state.indexOf(key) === 0)\n                return this.subModes[key];\n        }\n        return null;\n    };\n    \n    this.$tryMode = function(state, session, foldStyle, row) {\n        var mode = this.$getMode(state);\n        return (mode ? mode.getFoldWidget(session, foldStyle, row) : \"\");\n    };\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        return (\n            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||\n            this.$tryMode(session.getState(row), session, foldStyle, row) ||\n            this.defaultMode.getFoldWidget(session, foldStyle, row)\n        );\n    };\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var mode = this.$getMode(session.getState(row-1));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.$getMode(session.getState(row));\n        \n        if (!mode || !mode.getFoldWidget(session, foldStyle, row))\n            mode = this.defaultMode;\n        \n        return mode.getFoldWidgetRange(session, foldStyle, row);\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar lang = require(\"../../lib/lang\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {\n    BaseFoldMode.call(this);\n    this.voidElements = voidElements || {};\n    this.optionalEndTags = oop.mixin({}, this.voidElements);\n    if (optionalEndTags)\n        oop.mixin(this.optionalEndTags, optionalEndTags);\n    \n};\noop.inherits(FoldMode, BaseFoldMode);\n\nvar Tag = function() {\n    this.tagName = \"\";\n    this.closing = false;\n    this.selfClosing = false;\n    this.start = {row: 0, column: 0};\n    this.end = {row: 0, column: 0};\n};\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\n(function() {\n\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var tag = this._getFirstTagInLine(session, row);\n\n        if (!tag)\n            return \"\";\n\n        if (tag.closing || (!tag.tagName && tag.selfClosing))\n            return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n\n        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))\n            return \"\";\n\n        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))\n            return \"\";\n\n        return \"start\";\n    };\n    this._getFirstTagInLine = function(session, row) {\n        var tokens = session.getTokens(row);\n        var tag = new Tag();\n\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            if (is(token, \"tag-open\")) {\n                tag.end.column = tag.start.column + token.value.length;\n                tag.closing = is(token, \"end-tag-open\");\n                token = tokens[++i];\n                if (!token)\n                    return null;\n                tag.tagName = token.value;\n                tag.end.column += token.value.length;\n                for (i++; i < tokens.length; i++) {\n                    token = tokens[i];\n                    tag.end.column += token.value.length;\n                    if (is(token, \"tag-close\")) {\n                        tag.selfClosing = token.value == '/>';\n                        break;\n                    }\n                }\n                return tag;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == '/>';\n                return tag;\n            }\n            tag.start.column += token.value.length;\n        }\n\n        return null;\n    };\n\n    this._findEndTagInLine = function(session, row, tagName, startColumn) {\n        var tokens = session.getTokens(row);\n        var column = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            column += token.value.length;\n            if (column < startColumn)\n                continue;\n            if (is(token, \"end-tag-open\")) {\n                token = tokens[i + 1];\n                if (token && token.value == tagName)\n                    return true;\n            }\n        }\n        return false;\n    };\n    this._readTagForward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n                iterator.stepForward();\n                return tag;\n            }\n        } while(token = iterator.stepForward());\n\n        return null;\n    };\n    \n    this._readTagBackward = function(iterator) {\n        var token = iterator.getCurrentToken();\n        if (!token)\n            return null;\n\n        var tag = new Tag();\n        do {\n            if (is(token, \"tag-open\")) {\n                tag.closing = is(token, \"end-tag-open\");\n                tag.start.row = iterator.getCurrentTokenRow();\n                tag.start.column = iterator.getCurrentTokenColumn();\n                iterator.stepBackward();\n                return tag;\n            } else if (is(token, \"tag-name\")) {\n                tag.tagName = token.value;\n            } else if (is(token, \"tag-close\")) {\n                tag.selfClosing = token.value == \"/>\";\n                tag.end.row = iterator.getCurrentTokenRow();\n                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n            }\n        } while(token = iterator.stepBackward());\n\n        return null;\n    };\n    \n    this._pop = function(stack, tag) {\n        while (stack.length) {\n            \n            var top = stack[stack.length-1];\n            if (!tag || top.tagName == tag.tagName) {\n                return stack.pop();\n            }\n            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n                stack.pop();\n                continue;\n            } else {\n                return null;\n            }\n        }\n    };\n    \n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var firstTag = this._getFirstTagInLine(session, row);\n        \n        if (!firstTag)\n            return null;\n        \n        var isBackward = firstTag.closing || firstTag.selfClosing;\n        var stack = [];\n        var tag;\n        \n        if (!isBackward) {\n            var iterator = new TokenIterator(session, row, firstTag.start.column);\n            var start = {\n                row: row,\n                column: firstTag.start.column + firstTag.tagName.length + 2\n            };\n            if (firstTag.start.row == firstTag.end.row)\n                start.column = firstTag.end.column;\n            while (tag = this._readTagForward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0)\n                        return Range.fromPoints(start, tag.start);\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        else {\n            var iterator = new TokenIterator(session, row, firstTag.end.column);\n            var end = {\n                row: row,\n                column: firstTag.start.column\n            };\n            \n            while (tag = this._readTagBackward(iterator)) {\n                if (tag.selfClosing) {\n                    if (!stack.length) {\n                        tag.start.column += tag.tagName.length + 2;\n                        tag.end.column -= 2;\n                        return Range.fromPoints(tag.start, tag.end);\n                    } else\n                        continue;\n                }\n                \n                if (!tag.closing) {\n                    this._pop(stack, tag);\n                    if (stack.length == 0) {\n                        tag.start.column += tag.tagName.length + 2;\n                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)\n                            tag.start.column = tag.end.column;\n                        return Range.fromPoints(tag.start, end);\n                    }\n                }\n                else {\n                    stack.push(tag);\n                }\n            }\n        }\n        \n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar MixedFoldMode = require(\"./mixed\").FoldMode;\nvar XmlFoldMode = require(\"./xml\").FoldMode;\nvar CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\nvar FoldMode = exports.FoldMode = function(voidElements, optionalTags) {\n    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n        \"js-\": new CStyleFoldMode(),\n        \"css-\": new CStyleFoldMode()\n    });\n};\n\noop.inherits(FoldMode, MixedFoldMode);\n\n});\n\nace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"], function(require, exports, module) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nvar commonAttributes = [\n    \"accesskey\",\n    \"class\",\n    \"contenteditable\",\n    \"contextmenu\",\n    \"dir\",\n    \"draggable\",\n    \"dropzone\",\n    \"hidden\",\n    \"id\",\n    \"inert\",\n    \"itemid\",\n    \"itemprop\",\n    \"itemref\",\n    \"itemscope\",\n    \"itemtype\",\n    \"lang\",\n    \"spellcheck\",\n    \"style\",\n    \"tabindex\",\n    \"title\",\n    \"translate\"\n];\n\nvar eventAttributes = [\n    \"onabort\",\n    \"onblur\",\n    \"oncancel\",\n    \"oncanplay\",\n    \"oncanplaythrough\",\n    \"onchange\",\n    \"onclick\",\n    \"onclose\",\n    \"oncontextmenu\",\n    \"oncuechange\",\n    \"ondblclick\",\n    \"ondrag\",\n    \"ondragend\",\n    \"ondragenter\",\n    \"ondragleave\",\n    \"ondragover\",\n    \"ondragstart\",\n    \"ondrop\",\n    \"ondurationchange\",\n    \"onemptied\",\n    \"onended\",\n    \"onerror\",\n    \"onfocus\",\n    \"oninput\",\n    \"oninvalid\",\n    \"onkeydown\",\n    \"onkeypress\",\n    \"onkeyup\",\n    \"onload\",\n    \"onloadeddata\",\n    \"onloadedmetadata\",\n    \"onloadstart\",\n    \"onmousedown\",\n    \"onmousemove\",\n    \"onmouseout\",\n    \"onmouseover\",\n    \"onmouseup\",\n    \"onmousewheel\",\n    \"onpause\",\n    \"onplay\",\n    \"onplaying\",\n    \"onprogress\",\n    \"onratechange\",\n    \"onreset\",\n    \"onscroll\",\n    \"onseeked\",\n    \"onseeking\",\n    \"onselect\",\n    \"onshow\",\n    \"onstalled\",\n    \"onsubmit\",\n    \"onsuspend\",\n    \"ontimeupdate\",\n    \"onvolumechange\",\n    \"onwaiting\"\n];\n\nvar globalAttributes = commonAttributes.concat(eventAttributes);\n\nvar attributeMap = {\n    \"html\": {\"manifest\": 1},\n    \"head\": {},\n    \"title\": {},\n    \"base\": {\"href\": 1, \"target\": 1},\n    \"link\": {\"href\": 1, \"hreflang\": 1, \"rel\": {\"stylesheet\": 1, \"icon\": 1}, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"type\": {\"text/css\": 1, \"image/png\": 1, \"image/jpeg\": 1, \"image/gif\": 1}, \"sizes\": 1},\n    \"meta\": {\"http-equiv\": {\"content-type\": 1}, \"name\": {\"description\": 1, \"keywords\": 1}, \"content\": {\"text/html; charset=UTF-8\": 1}, \"charset\": 1},\n    \"style\": {\"type\": 1, \"media\": {\"all\": 1, \"screen\": 1, \"print\": 1}, \"scoped\": 1},\n    \"script\": {\"charset\": 1, \"type\": {\"text/javascript\": 1}, \"src\": 1, \"defer\": 1, \"async\": 1},\n    \"noscript\": {\"href\": 1},\n    \"body\": {\"onafterprint\": 1, \"onbeforeprint\": 1, \"onbeforeunload\": 1, \"onhashchange\": 1, \"onmessage\": 1, \"onoffline\": 1, \"onpopstate\": 1, \"onredo\": 1, \"onresize\": 1, \"onstorage\": 1, \"onundo\": 1, \"onunload\": 1},\n    \"section\": {},\n    \"nav\": {},\n    \"article\": {\"pubdate\": 1},\n    \"aside\": {},\n    \"h1\": {},\n    \"h2\": {},\n    \"h3\": {},\n    \"h4\": {},\n    \"h5\": {},\n    \"h6\": {},\n    \"header\": {},\n    \"footer\": {},\n    \"address\": {},\n    \"main\": {},\n    \"p\": {},\n    \"hr\": {},\n    \"pre\": {},\n    \"blockquote\": {\"cite\": 1},\n    \"ol\": {\"start\": 1, \"reversed\": 1},\n    \"ul\": {},\n    \"li\": {\"value\": 1},\n    \"dl\": {},\n    \"dt\": {},\n    \"dd\": {},\n    \"figure\": {},\n    \"figcaption\": {},\n    \"div\": {},\n    \"a\": {\"href\": 1, \"target\": {\"_blank\": 1, \"top\": 1}, \"ping\": 1, \"rel\": {\"nofollow\": 1, \"alternate\": 1, \"author\": 1, \"bookmark\": 1, \"help\": 1, \"license\": 1, \"next\": 1, \"noreferrer\": 1, \"prefetch\": 1, \"prev\": 1, \"search\": 1, \"tag\": 1}, \"media\": 1, \"hreflang\": 1, \"type\": 1},\n    \"em\": {},\n    \"strong\": {},\n    \"small\": {},\n    \"s\": {},\n    \"cite\": {},\n    \"q\": {\"cite\": 1},\n    \"dfn\": {},\n    \"abbr\": {},\n    \"data\": {},\n    \"time\": {\"datetime\": 1},\n    \"code\": {},\n    \"var\": {},\n    \"samp\": {},\n    \"kbd\": {},\n    \"sub\": {},\n    \"sup\": {},\n    \"i\": {},\n    \"b\": {},\n    \"u\": {},\n    \"mark\": {},\n    \"ruby\": {},\n    \"rt\": {},\n    \"rp\": {},\n    \"bdi\": {},\n    \"bdo\": {},\n    \"span\": {},\n    \"br\": {},\n    \"wbr\": {},\n    \"ins\": {\"cite\": 1, \"datetime\": 1},\n    \"del\": {\"cite\": 1, \"datetime\": 1},\n    \"img\": {\"alt\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"usemap\": 1, \"ismap\": 1},\n    \"iframe\": {\"name\": 1, \"src\": 1, \"height\": 1, \"width\": 1, \"sandbox\": {\"allow-same-origin\": 1, \"allow-top-navigation\": 1, \"allow-forms\": 1, \"allow-scripts\": 1}, \"seamless\": {\"seamless\": 1}},\n    \"embed\": {\"src\": 1, \"height\": 1, \"width\": 1, \"type\": 1},\n    \"object\": {\"param\": 1, \"data\": 1, \"type\": 1, \"height\" : 1, \"width\": 1, \"usemap\": 1, \"name\": 1, \"form\": 1, \"classid\": 1},\n    \"param\": {\"name\": 1, \"value\": 1},\n    \"video\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"width\": 1, \"height\": 1, \"poster\": 1, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1}},\n    \"audio\": {\"src\": 1, \"autobuffer\": 1, \"autoplay\": {\"autoplay\": 1}, \"loop\": {\"loop\": 1}, \"controls\": {\"controls\": 1}, \"muted\": {\"muted\": 1}, \"preload\": {\"auto\": 1, \"metadata\": 1, \"none\": 1 }},\n    \"source\": {\"src\": 1, \"type\": 1, \"media\": 1},\n    \"track\": {\"kind\": 1, \"src\": 1, \"srclang\": 1, \"label\": 1, \"default\": 1},\n    \"canvas\": {\"width\": 1, \"height\": 1},\n    \"map\": {\"name\": 1},\n    \"area\": {\"shape\": 1, \"coords\": 1, \"href\": 1, \"hreflang\": 1, \"alt\": 1, \"target\": 1, \"media\": 1, \"rel\": 1, \"ping\": 1, \"type\": 1},\n    \"svg\": {},\n    \"math\": {},\n    \"table\": {\"summary\": 1},\n    \"caption\": {},\n    \"colgroup\": {\"span\": 1},\n    \"col\": {\"span\": 1},\n    \"tbody\": {},\n    \"thead\": {},\n    \"tfoot\": {},\n    \"tr\": {},\n    \"td\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1},\n    \"th\": {\"headers\": 1, \"rowspan\": 1, \"colspan\": 1, \"scope\": 1},\n    \"form\": {\"accept-charset\": 1, \"action\": 1, \"autocomplete\": 1, \"enctype\": {\"multipart/form-data\": 1, \"application/x-www-form-urlencoded\": 1}, \"method\": {\"get\": 1, \"post\": 1}, \"name\": 1, \"novalidate\": 1, \"target\": {\"_blank\": 1, \"top\": 1}},\n    \"fieldset\": {\"disabled\": 1, \"form\": 1, \"name\": 1},\n    \"legend\": {},\n    \"label\": {\"form\": 1, \"for\": 1},\n    \"input\": {\n        \"type\": {\"text\": 1, \"password\": 1, \"hidden\": 1, \"checkbox\": 1, \"submit\": 1, \"radio\": 1, \"file\": 1, \"button\": 1, \"reset\": 1, \"image\": 31, \"color\": 1, \"date\": 1, \"datetime\": 1, \"datetime-local\": 1, \"email\": 1, \"month\": 1, \"number\": 1, \"range\": 1, \"search\": 1, \"tel\": 1, \"time\": 1, \"url\": 1, \"week\": 1},\n        \"accept\": 1, \"alt\": 1, \"autocomplete\": {\"on\": 1, \"off\": 1}, \"autofocus\": {\"autofocus\": 1}, \"checked\": {\"checked\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": {\"application/x-www-form-urlencoded\": 1, \"multipart/form-data\": 1, \"text/plain\": 1}, \"formmethod\": {\"get\": 1, \"post\": 1}, \"formnovalidate\": {\"formnovalidate\": 1}, \"formtarget\": {\"_blank\": 1, \"_self\": 1, \"_parent\": 1, \"_top\": 1}, \"height\": 1, \"list\": 1, \"max\": 1, \"maxlength\": 1, \"min\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"pattern\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"size\": 1, \"src\": 1, \"step\": 1, \"width\": 1, \"files\": 1, \"value\": 1},\n    \"button\": {\"autofocus\": 1, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"formaction\": 1, \"formenctype\": 1, \"formmethod\": 1, \"formnovalidate\": 1, \"formtarget\": 1, \"name\": 1, \"value\": 1, \"type\": {\"button\": 1, \"submit\": 1}},\n    \"select\": {\"autofocus\": 1, \"disabled\": 1, \"form\": 1, \"multiple\": {\"multiple\": 1}, \"name\": 1, \"size\": 1, \"readonly\":{\"readonly\": 1}},\n    \"datalist\": {},\n    \"optgroup\": {\"disabled\": 1, \"label\": 1},\n    \"option\": {\"disabled\": 1, \"selected\": 1, \"label\": 1, \"value\": 1},\n    \"textarea\": {\"autofocus\": {\"autofocus\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"maxlength\": 1, \"name\": 1, \"placeholder\": 1, \"readonly\": {\"readonly\": 1}, \"required\": {\"required\": 1}, \"rows\": 1, \"cols\": 1, \"wrap\": {\"on\": 1, \"off\": 1, \"hard\": 1, \"soft\": 1}},\n    \"keygen\": {\"autofocus\": 1, \"challenge\": {\"challenge\": 1}, \"disabled\": {\"disabled\": 1}, \"form\": 1, \"keytype\": {\"rsa\": 1, \"dsa\": 1, \"ec\": 1}, \"name\": 1},\n    \"output\": {\"for\": 1, \"form\": 1, \"name\": 1},\n    \"progress\": {\"value\": 1, \"max\": 1},\n    \"meter\": {\"value\": 1, \"min\": 1, \"max\": 1, \"low\": 1, \"high\": 1, \"optimum\": 1},\n    \"details\": {\"open\": 1},\n    \"summary\": {},\n    \"command\": {\"type\": 1, \"label\": 1, \"icon\": 1, \"disabled\": 1, \"checked\": 1, \"radiogroup\": 1, \"command\": 1},\n    \"menu\": {\"type\": 1, \"label\": 1},\n    \"dialog\": {\"open\": 1}\n};\n\nvar elements = Object.keys(attributeMap);\n\nfunction is(token, type) {\n    return token.type.lastIndexOf(type + \".xml\") > -1;\n}\n\nfunction findTagName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"tag-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nfunction findAttributeName(session, pos) {\n    var iterator = new TokenIterator(session, pos.row, pos.column);\n    var token = iterator.getCurrentToken();\n    while (token && !is(token, \"attribute-name\")){\n        token = iterator.stepBackward();\n    }\n    if (token)\n        return token.value;\n}\n\nvar HtmlCompletions = function() {\n\n};\n\n(function() {\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        var token = session.getTokenAt(pos.row, pos.column);\n\n        if (!token)\n            return [];\n        if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\"))\n            return this.getTagCompletions(state, session, pos, prefix);\n        if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\"))\n            return this.getAttributeCompletions(state, session, pos, prefix);\n        if (is(token, \"attribute-value\"))\n            return this.getAttributeValueCompletions(state, session, pos, prefix);\n        var line = session.getLine(pos.row).substr(0, pos.column);\n        if (/&[A-z]*$/i.test(line))\n            return this.getHTMLEntityCompletions(state, session, pos, prefix);\n\n        return [];\n    };\n\n    this.getTagCompletions = function(state, session, pos, prefix) {\n        return elements.map(function(element){\n            return {\n                value: element,\n                meta: \"tag\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        if (!tagName)\n            return [];\n        var attributes = globalAttributes;\n        if (tagName in attributeMap) {\n            attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n        }\n        return attributes.map(function(attribute){\n            return {\n                caption: attribute,\n                snippet: attribute + '=\"$0\"',\n                meta: \"attribute\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getAttributeValueCompletions = function(state, session, pos, prefix) {\n        var tagName = findTagName(session, pos);\n        var attributeName = findAttributeName(session, pos);\n        \n        if (!tagName)\n            return [];\n        var values = [];\n        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === \"object\") {\n            values = Object.keys(attributeMap[tagName][attributeName]);\n        }\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"attribute value\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {\n        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];\n\n        return values.map(function(value){\n            return {\n                caption: value,\n                snippet: value,\n                meta: \"html entity\",\n                score: Number.MAX_VALUE\n            };\n        });\n    };\n\n}).call(HtmlCompletions.prototype);\n\nexports.HtmlCompletions = HtmlCompletions;\n});\n\nace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar TextMode = require(\"./text\").Mode;\nvar JavaScriptMode = require(\"./javascript\").Mode;\nvar CssMode = require(\"./css\").Mode;\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\nvar HtmlFoldMode = require(\"./folding/html\").FoldMode;\nvar HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\nvar WorkerClient = require(\"../worker/worker_client\").WorkerClient;\nvar voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\nvar optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\nvar Mode = function(options) {\n    this.fragmentContext = options && options.fragmentContext;\n    this.HighlightRules = HtmlHighlightRules;\n    this.$behaviour = new XmlBehaviour();\n    this.$completer = new HtmlCompletions();\n    \n    this.createModeDelegates({\n        \"js-\": JavaScriptMode,\n        \"css-\": CssMode\n    });\n    \n    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.blockComment = {start: \"<!--\", end: \"-->\"};\n\n    this.voidElements = lang.arrayToMap(voidElements);\n\n    this.getNextLineIndent = function(state, line, tab) {\n        return this.$getIndent(line);\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return false;\n    };\n\n    this.getCompletions = function(state, session, pos, prefix) {\n        return this.$completer.getCompletions(state, session, pos, prefix);\n    };\n\n    this.createWorker = function(session) {\n        if (this.constructor != Mode)\n            return;\n        var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n        worker.attachToDocument(session.getDocument());\n\n        if (this.fragmentContext)\n            worker.call(\"setOptions\", [{context: this.fragmentContext}]);\n\n        worker.on(\"error\", function(e) {\n            session.setAnnotations(e.data);\n        });\n\n        worker.on(\"terminate\", function() {\n            session.clearAnnotations();\n        });\n\n        return worker;\n    };\n\n    this.$id = \"ace/mode/html\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/mode/twig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar TwigHighlightRules = function() {\n    HtmlHighlightRules.call(this);\n\n    var tags = \"autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim\";\n    tags = tags + \"|end\" + tags.replace(/\\|/g, \"|end\");\n    var filters = \"abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode\";\n    var functions = \"attribute|constant|cycle|date|dump|parent|random|range|template_from_string\";\n    var tests = \"constant|divisibleby|sameas|defined|empty|even|iterable|odd\";\n    var constants = \"null|none|true|false\";\n    var operators = \"b-and|b-xor|b-or|in|is|and|or|not\"\n\n    var keywordMapper = this.createKeywordMapper({\n        \"keyword.control.twig\": tags,\n        \"support.function.twig\": [filters, functions, tests].join(\"|\"),\n        \"keyword.operator.twig\":  operators,\n        \"constant.language.twig\": constants\n    }, \"identifier\");\n    for (var rule in this.$rules) {\n        this.$rules[rule].unshift({\n            token : \"variable.other.readwrite.local.twig\",\n            regex : \"\\\\{\\\\{-?\",\n            push : \"twig-start\"\n        }, {\n            token : \"meta.tag.twig\",\n            regex : \"\\\\{%-?\",\n            push : \"twig-start\"\n        }, {\n            token : \"comment.block.twig\",\n            regex : \"\\\\{#-?\",\n            push : \"twig-comment\"\n        });\n    }\n    this.$rules[\"twig-comment\"] = [{\n        token : \"comment.block.twig\",\n        regex : \".*-?#\\\\}\",\n        next : \"pop\"\n    }];\n\n    this.$rules[\"twig-start\"] = [{\n        token : \"variable.other.readwrite.local.twig\",\n        regex : \"-?\\\\}\\\\}\",\n        next : \"pop\"\n    }, {\n        token : \"meta.tag.twig\",\n        regex : \"-?%\\\\}\",\n        next : \"pop\"\n    }, {\n        token : \"string\",\n        regex : \"'\",\n        next  : \"twig-qstring\"\n    }, {\n        token : \"string\",\n        regex : '\"',\n        next  : \"twig-qqstring\"\n    }, {\n        token : \"constant.numeric\", // hex\n        regex : \"0[xX][0-9a-fA-F]+\\\\b\"\n    }, {\n        token : \"constant.numeric\", // float\n        regex : \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n    }, {\n        token : \"constant.language.boolean\",\n        regex : \"(?:true|false)\\\\b\"\n    }, {\n        token : keywordMapper,\n        regex : \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n    }, {\n        token : \"keyword.operator.assignment\",\n        regex : \"=|~\"\n    }, {\n        token : \"keyword.operator.comparison\",\n        regex : \"==|!=|<|>|>=|<=|===\"\n    }, {\n        token : \"keyword.operator.arithmetic\",\n        regex : \"\\\\+|-|/|%|//|\\\\*|\\\\*\\\\*\"\n    }, {\n        token : \"keyword.operator.other\",\n        regex : \"\\\\.\\\\.|\\\\|\"\n    }, {\n        token : \"punctuation.operator\",\n        regex : /\\?|\\:|\\,|\\;|\\./\n    }, {\n        token : \"paren.lparen\",\n        regex : /[\\[\\({]/\n    }, {\n        token : \"paren.rparen\",\n        regex : /[\\])}]/\n    }, {\n        token : \"text\",\n        regex : \"\\\\s+\"\n    } ];\n\n    this.$rules[\"twig-qqstring\"] = [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\\"$#ntr]|#{[^\"}]*}/\n        }, {\n            token : \"string\",\n            regex : '\"',\n            next  : \"twig-start\"\n        }, {\n            defaultToken : \"string\"\n        }\n    ];\n\n    this.$rules[\"twig-qstring\"] = [{\n            token : \"constant.language.escape\",\n            regex : /\\\\[\\\\'ntr]}/\n        }, {\n            token : \"string\",\n            regex : \"'\",\n            next  : \"twig-start\"\n        }, {\n            defaultToken : \"string\"\n        }\n    ];\n\n    this.normalizeRules();\n};\n\noop.inherits(TwigHighlightRules, TextHighlightRules);\n\nexports.TwigHighlightRules = TwigHighlightRules;\n});\n\nace.define(\"ace/mode/twig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/twig_highlight_rules\",\"ace/mode/matching_brace_outdent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar HtmlMode = require(\"./html\").Mode;\nvar TwigHighlightRules = require(\"./twig_highlight_rules\").TwigHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\nvar Mode = function() {\n    HtmlMode.call(this);\n    this.HighlightRules = TwigHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n};\noop.inherits(Mode, HtmlMode);\n\n(function() {\n    this.blockComment = {start: \"{#\", end: \"#}\"};\n\n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n        var tokens = tokenizedLine.tokens;\n        var endState = tokenizedLine.state;\n\n        if (tokens.length && tokens[tokens.length-1].type == \"comment\") {\n            return indent;\n        }\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n    this.$id = \"ace/mode/twig\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-yaml.js",
    "content": "ace.define(\"ace/mode/yaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar YamlHighlightRules = function() {\n    this.$rules = {\n        \"start\" : [\n            {\n                token : \"comment\",\n                regex : \"#.*$\"\n            }, {\n                token : \"list.markup\",\n                regex : /^(?:-{3}|\\.{3})\\s*(?=#|$)/     \n            },  {\n                token : \"list.markup\",\n                regex : /^\\s*[\\-?](?:$|\\s)/     \n            }, {\n                token: \"constant\",\n                regex: \"!![\\\\w//]+\"\n            }, {\n                token: \"constant.language\",\n                regex: \"[&\\\\*][a-zA-Z0-9-_]+\"\n            }, {\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /^(\\s*\\w.*?)(\\:(?:\\s+|$))/\n            },{\n                token: [\"meta.tag\", \"keyword\"],\n                regex: /(\\w+?)(\\s*\\:(?:\\s+|$))/\n            }, {\n                token : \"keyword.operator\",\n                regex : \"<<\\\\w*:\\\\w*\"\n            }, {\n                token : \"keyword.operator\",\n                regex : \"-\\\\s*(?=[{])\"\n            }, {\n                token : \"string\", // single line\n                regex : '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'\n            }, {\n                token : \"string\", // multi line string start\n                regex : '[|>][-+\\\\d\\\\s]*$',\n                next : \"qqstring\"\n            }, {\n                token : \"string\", // single quoted string\n                regex : \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n            }, {\n                token : \"constant.numeric\", // float\n                regex : /(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)/\n            }, {\n                token : \"constant.numeric\", // other number\n                regex : /[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/\n            }, {\n                token : \"constant.language.boolean\",\n                regex : \"(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"\n            }, {\n                token : \"paren.lparen\",\n                regex : \"[[({]\"\n            }, {\n                token : \"paren.rparen\",\n                regex : \"[\\\\])}]\"\n            }\n        ],\n        \"qqstring\" : [\n            {\n                token : \"string\",\n                regex : '(?=(?:(?:\\\\\\\\.)|(?:[^:]))*?:)',\n                next : \"start\"\n            }, {\n                token : \"string\",\n                regex : '.+'\n            }\n        ]};\n\n};\n\noop.inherits(YamlHighlightRules, TextHighlightRules);\n\nexports.YamlHighlightRules = YamlHighlightRules;\n});\n\nace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\n\nvar MatchingBraceOutdent = function() {};\n\n(function() {\n\n    this.checkOutdent = function(line, input) {\n        if (! /^\\s+$/.test(line))\n            return false;\n\n        return /^\\s*\\}/.test(input);\n    };\n\n    this.autoOutdent = function(doc, row) {\n        var line = doc.getLine(row);\n        var match = line.match(/^(\\s*\\})/);\n\n        if (!match) return 0;\n\n        var column = match[1].length;\n        var openBracePos = doc.findMatchingBracket({row: row, column: column});\n\n        if (!openBracePos || openBracePos.row == row) return 0;\n\n        var indent = this.$getIndent(doc.getLine(openBracePos.row));\n        doc.replace(new Range(row, 0, row, column-1), indent);\n    };\n\n    this.$getIndent = function(line) {\n        return line.match(/^\\s*/)[0];\n    };\n\n}).call(MatchingBraceOutdent.prototype);\n\nexports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\n\nace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\noop.inherits(FoldMode, BaseFoldMode);\n\n(function() {\n\n    this.getFoldWidgetRange = function(session, foldStyle, row) {\n        var range = this.indentationBlock(session, row);\n        if (range)\n            return range;\n\n        var re = /\\S/;\n        var line = session.getLine(row);\n        var startLevel = line.search(re);\n        if (startLevel == -1 || line[startLevel] != \"#\")\n            return;\n\n        var startColumn = line.length;\n        var maxRow = session.getLength();\n        var startRow = row;\n        var endRow = row;\n\n        while (++row < maxRow) {\n            line = session.getLine(row);\n            var level = line.search(re);\n\n            if (level == -1)\n                continue;\n\n            if (line[level] != \"#\")\n                break;\n\n            endRow = row;\n        }\n\n        if (endRow > startRow) {\n            var endColumn = session.getLine(endRow).length;\n            return new Range(startRow, startColumn, endRow, endColumn);\n        }\n    };\n    this.getFoldWidget = function(session, foldStyle, row) {\n        var line = session.getLine(row);\n        var indent = line.search(/\\S/);\n        var next = session.getLine(row + 1);\n        var prev = session.getLine(row - 1);\n        var prevIndent = prev.search(/\\S/);\n        var nextIndent = next.search(/\\S/);\n\n        if (indent == -1) {\n            session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? \"start\" : \"\";\n            return \"\";\n        }\n        if (prevIndent == -1) {\n            if (indent == nextIndent && line[indent] == \"#\" && next[indent] == \"#\") {\n                session.foldWidgets[row - 1] = \"\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"start\";\n            }\n        } else if (prevIndent == indent && line[indent] == \"#\" && prev[indent] == \"#\") {\n            if (session.getLine(row - 2).search(/\\S/) == -1) {\n                session.foldWidgets[row - 1] = \"start\";\n                session.foldWidgets[row + 1] = \"\";\n                return \"\";\n            }\n        }\n\n        if (prevIndent!= -1 && prevIndent < indent)\n            session.foldWidgets[row - 1] = \"start\";\n        else\n            session.foldWidgets[row - 1] = \"\";\n\n        if (indent < nextIndent)\n            return \"start\";\n        else\n            return \"\";\n    };\n\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/yaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/yaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar YamlHighlightRules = require(\"./yaml_highlight_rules\").YamlHighlightRules;\nvar MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\nvar FoldMode = require(\"./folding/coffee\").FoldMode;\n\nvar Mode = function() {\n    this.HighlightRules = YamlHighlightRules;\n    this.$outdent = new MatchingBraceOutdent();\n    this.foldingRules = new FoldMode();\n};\noop.inherits(Mode, TextMode);\n\n(function() {\n\n    this.lineCommentStart = \"#\";\n    \n    this.getNextLineIndent = function(state, line, tab) {\n        var indent = this.$getIndent(line);\n\n        if (state == \"start\") {\n            var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n            if (match) {\n                indent += tab;\n            }\n        }\n\n        return indent;\n    };\n\n    this.checkOutdent = function(state, line, input) {\n        return this.$outdent.checkOutdent(line, input);\n    };\n\n    this.autoOutdent = function(state, doc, row) {\n        this.$outdent.autoOutdent(doc, row);\n    };\n\n\n    this.$id = \"ace/mode/yaml\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/css.js",
    "content": "ace.define(\"ace/snippets/css\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet .\\n\\\n\t${1} {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet !\\n\\\n\t !important\\n\\\nsnippet bdi:m+\\n\\\n\t-moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\n\\\nsnippet bdi:m\\n\\\n\t-moz-border-image: ${1};\\n\\\nsnippet bdrz:m\\n\\\n\t-moz-border-radius: ${1};\\n\\\nsnippet bxsh:m+\\n\\\n\t-moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet bxsh:m\\n\\\n\t-moz-box-shadow: ${1};\\n\\\nsnippet bdi:w+\\n\\\n\t-webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\n\\\nsnippet bdi:w\\n\\\n\t-webkit-border-image: ${1};\\n\\\nsnippet bdrz:w\\n\\\n\t-webkit-border-radius: ${1};\\n\\\nsnippet bxsh:w+\\n\\\n\t-webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet bxsh:w\\n\\\n\t-webkit-box-shadow: ${1};\\n\\\nsnippet @f\\n\\\n\t@font-face {\\n\\\n\t\tfont-family: ${1};\\n\\\n\t\tsrc: url(${2});\\n\\\n\t}\\n\\\nsnippet @i\\n\\\n\t@import url(${1});\\n\\\nsnippet @m\\n\\\n\t@media ${1:print} {\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet bg+\\n\\\n\tbackground: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\\n\\\nsnippet bga\\n\\\n\tbackground-attachment: ${1};\\n\\\nsnippet bga:f\\n\\\n\tbackground-attachment: fixed;\\n\\\nsnippet bga:s\\n\\\n\tbackground-attachment: scroll;\\n\\\nsnippet bgbk\\n\\\n\tbackground-break: ${1};\\n\\\nsnippet bgbk:bb\\n\\\n\tbackground-break: bounding-box;\\n\\\nsnippet bgbk:c\\n\\\n\tbackground-break: continuous;\\n\\\nsnippet bgbk:eb\\n\\\n\tbackground-break: each-box;\\n\\\nsnippet bgcp\\n\\\n\tbackground-clip: ${1};\\n\\\nsnippet bgcp:bb\\n\\\n\tbackground-clip: border-box;\\n\\\nsnippet bgcp:cb\\n\\\n\tbackground-clip: content-box;\\n\\\nsnippet bgcp:nc\\n\\\n\tbackground-clip: no-clip;\\n\\\nsnippet bgcp:pb\\n\\\n\tbackground-clip: padding-box;\\n\\\nsnippet bgc\\n\\\n\tbackground-color: #${1:FFF};\\n\\\nsnippet bgc:t\\n\\\n\tbackground-color: transparent;\\n\\\nsnippet bgi\\n\\\n\tbackground-image: url(${1});\\n\\\nsnippet bgi:n\\n\\\n\tbackground-image: none;\\n\\\nsnippet bgo\\n\\\n\tbackground-origin: ${1};\\n\\\nsnippet bgo:bb\\n\\\n\tbackground-origin: border-box;\\n\\\nsnippet bgo:cb\\n\\\n\tbackground-origin: content-box;\\n\\\nsnippet bgo:pb\\n\\\n\tbackground-origin: padding-box;\\n\\\nsnippet bgpx\\n\\\n\tbackground-position-x: ${1};\\n\\\nsnippet bgpy\\n\\\n\tbackground-position-y: ${1};\\n\\\nsnippet bgp\\n\\\n\tbackground-position: ${1:0} ${2:0};\\n\\\nsnippet bgr\\n\\\n\tbackground-repeat: ${1};\\n\\\nsnippet bgr:n\\n\\\n\tbackground-repeat: no-repeat;\\n\\\nsnippet bgr:x\\n\\\n\tbackground-repeat: repeat-x;\\n\\\nsnippet bgr:y\\n\\\n\tbackground-repeat: repeat-y;\\n\\\nsnippet bgr:r\\n\\\n\tbackground-repeat: repeat;\\n\\\nsnippet bgz\\n\\\n\tbackground-size: ${1};\\n\\\nsnippet bgz:a\\n\\\n\tbackground-size: auto;\\n\\\nsnippet bgz:ct\\n\\\n\tbackground-size: contain;\\n\\\nsnippet bgz:cv\\n\\\n\tbackground-size: cover;\\n\\\nsnippet bg\\n\\\n\tbackground: ${1};\\n\\\nsnippet bg:ie\\n\\\n\tfilter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\\n\\\nsnippet bg:n\\n\\\n\tbackground: none;\\n\\\nsnippet bd+\\n\\\n\tborder: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdb+\\n\\\n\tborder-bottom: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdbc\\n\\\n\tborder-bottom-color: #${1:000};\\n\\\nsnippet bdbi\\n\\\n\tborder-bottom-image: url(${1});\\n\\\nsnippet bdbi:n\\n\\\n\tborder-bottom-image: none;\\n\\\nsnippet bdbli\\n\\\n\tborder-bottom-left-image: url(${1});\\n\\\nsnippet bdbli:c\\n\\\n\tborder-bottom-left-image: continue;\\n\\\nsnippet bdbli:n\\n\\\n\tborder-bottom-left-image: none;\\n\\\nsnippet bdblrz\\n\\\n\tborder-bottom-left-radius: ${1};\\n\\\nsnippet bdbri\\n\\\n\tborder-bottom-right-image: url(${1});\\n\\\nsnippet bdbri:c\\n\\\n\tborder-bottom-right-image: continue;\\n\\\nsnippet bdbri:n\\n\\\n\tborder-bottom-right-image: none;\\n\\\nsnippet bdbrrz\\n\\\n\tborder-bottom-right-radius: ${1};\\n\\\nsnippet bdbs\\n\\\n\tborder-bottom-style: ${1};\\n\\\nsnippet bdbs:n\\n\\\n\tborder-bottom-style: none;\\n\\\nsnippet bdbw\\n\\\n\tborder-bottom-width: ${1};\\n\\\nsnippet bdb\\n\\\n\tborder-bottom: ${1};\\n\\\nsnippet bdb:n\\n\\\n\tborder-bottom: none;\\n\\\nsnippet bdbk\\n\\\n\tborder-break: ${1};\\n\\\nsnippet bdbk:c\\n\\\n\tborder-break: close;\\n\\\nsnippet bdcl\\n\\\n\tborder-collapse: ${1};\\n\\\nsnippet bdcl:c\\n\\\n\tborder-collapse: collapse;\\n\\\nsnippet bdcl:s\\n\\\n\tborder-collapse: separate;\\n\\\nsnippet bdc\\n\\\n\tborder-color: #${1:000};\\n\\\nsnippet bdci\\n\\\n\tborder-corner-image: url(${1});\\n\\\nsnippet bdci:c\\n\\\n\tborder-corner-image: continue;\\n\\\nsnippet bdci:n\\n\\\n\tborder-corner-image: none;\\n\\\nsnippet bdf\\n\\\n\tborder-fit: ${1};\\n\\\nsnippet bdf:c\\n\\\n\tborder-fit: clip;\\n\\\nsnippet bdf:of\\n\\\n\tborder-fit: overwrite;\\n\\\nsnippet bdf:ow\\n\\\n\tborder-fit: overwrite;\\n\\\nsnippet bdf:r\\n\\\n\tborder-fit: repeat;\\n\\\nsnippet bdf:sc\\n\\\n\tborder-fit: scale;\\n\\\nsnippet bdf:sp\\n\\\n\tborder-fit: space;\\n\\\nsnippet bdf:st\\n\\\n\tborder-fit: stretch;\\n\\\nsnippet bdi\\n\\\n\tborder-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\n\\\nsnippet bdi:n\\n\\\n\tborder-image: none;\\n\\\nsnippet bdl+\\n\\\n\tborder-left: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdlc\\n\\\n\tborder-left-color: #${1:000};\\n\\\nsnippet bdli\\n\\\n\tborder-left-image: url(${1});\\n\\\nsnippet bdli:n\\n\\\n\tborder-left-image: none;\\n\\\nsnippet bdls\\n\\\n\tborder-left-style: ${1};\\n\\\nsnippet bdls:n\\n\\\n\tborder-left-style: none;\\n\\\nsnippet bdlw\\n\\\n\tborder-left-width: ${1};\\n\\\nsnippet bdl\\n\\\n\tborder-left: ${1};\\n\\\nsnippet bdl:n\\n\\\n\tborder-left: none;\\n\\\nsnippet bdlt\\n\\\n\tborder-length: ${1};\\n\\\nsnippet bdlt:a\\n\\\n\tborder-length: auto;\\n\\\nsnippet bdrz\\n\\\n\tborder-radius: ${1};\\n\\\nsnippet bdr+\\n\\\n\tborder-right: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdrc\\n\\\n\tborder-right-color: #${1:000};\\n\\\nsnippet bdri\\n\\\n\tborder-right-image: url(${1});\\n\\\nsnippet bdri:n\\n\\\n\tborder-right-image: none;\\n\\\nsnippet bdrs\\n\\\n\tborder-right-style: ${1};\\n\\\nsnippet bdrs:n\\n\\\n\tborder-right-style: none;\\n\\\nsnippet bdrw\\n\\\n\tborder-right-width: ${1};\\n\\\nsnippet bdr\\n\\\n\tborder-right: ${1};\\n\\\nsnippet bdr:n\\n\\\n\tborder-right: none;\\n\\\nsnippet bdsp\\n\\\n\tborder-spacing: ${1};\\n\\\nsnippet bds\\n\\\n\tborder-style: ${1};\\n\\\nsnippet bds:ds\\n\\\n\tborder-style: dashed;\\n\\\nsnippet bds:dtds\\n\\\n\tborder-style: dot-dash;\\n\\\nsnippet bds:dtdtds\\n\\\n\tborder-style: dot-dot-dash;\\n\\\nsnippet bds:dt\\n\\\n\tborder-style: dotted;\\n\\\nsnippet bds:db\\n\\\n\tborder-style: double;\\n\\\nsnippet bds:g\\n\\\n\tborder-style: groove;\\n\\\nsnippet bds:h\\n\\\n\tborder-style: hidden;\\n\\\nsnippet bds:i\\n\\\n\tborder-style: inset;\\n\\\nsnippet bds:n\\n\\\n\tborder-style: none;\\n\\\nsnippet bds:o\\n\\\n\tborder-style: outset;\\n\\\nsnippet bds:r\\n\\\n\tborder-style: ridge;\\n\\\nsnippet bds:s\\n\\\n\tborder-style: solid;\\n\\\nsnippet bds:w\\n\\\n\tborder-style: wave;\\n\\\nsnippet bdt+\\n\\\n\tborder-top: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet bdtc\\n\\\n\tborder-top-color: #${1:000};\\n\\\nsnippet bdti\\n\\\n\tborder-top-image: url(${1});\\n\\\nsnippet bdti:n\\n\\\n\tborder-top-image: none;\\n\\\nsnippet bdtli\\n\\\n\tborder-top-left-image: url(${1});\\n\\\nsnippet bdtli:c\\n\\\n\tborder-corner-image: continue;\\n\\\nsnippet bdtli:n\\n\\\n\tborder-corner-image: none;\\n\\\nsnippet bdtlrz\\n\\\n\tborder-top-left-radius: ${1};\\n\\\nsnippet bdtri\\n\\\n\tborder-top-right-image: url(${1});\\n\\\nsnippet bdtri:c\\n\\\n\tborder-top-right-image: continue;\\n\\\nsnippet bdtri:n\\n\\\n\tborder-top-right-image: none;\\n\\\nsnippet bdtrrz\\n\\\n\tborder-top-right-radius: ${1};\\n\\\nsnippet bdts\\n\\\n\tborder-top-style: ${1};\\n\\\nsnippet bdts:n\\n\\\n\tborder-top-style: none;\\n\\\nsnippet bdtw\\n\\\n\tborder-top-width: ${1};\\n\\\nsnippet bdt\\n\\\n\tborder-top: ${1};\\n\\\nsnippet bdt:n\\n\\\n\tborder-top: none;\\n\\\nsnippet bdw\\n\\\n\tborder-width: ${1};\\n\\\nsnippet bd\\n\\\n\tborder: ${1};\\n\\\nsnippet bd:n\\n\\\n\tborder: none;\\n\\\nsnippet b\\n\\\n\tbottom: ${1};\\n\\\nsnippet b:a\\n\\\n\tbottom: auto;\\n\\\nsnippet bxsh+\\n\\\n\tbox-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet bxsh\\n\\\n\tbox-shadow: ${1};\\n\\\nsnippet bxsh:n\\n\\\n\tbox-shadow: none;\\n\\\nsnippet bxz\\n\\\n\tbox-sizing: ${1};\\n\\\nsnippet bxz:bb\\n\\\n\tbox-sizing: border-box;\\n\\\nsnippet bxz:cb\\n\\\n\tbox-sizing: content-box;\\n\\\nsnippet cps\\n\\\n\tcaption-side: ${1};\\n\\\nsnippet cps:b\\n\\\n\tcaption-side: bottom;\\n\\\nsnippet cps:t\\n\\\n\tcaption-side: top;\\n\\\nsnippet cl\\n\\\n\tclear: ${1};\\n\\\nsnippet cl:b\\n\\\n\tclear: both;\\n\\\nsnippet cl:l\\n\\\n\tclear: left;\\n\\\nsnippet cl:n\\n\\\n\tclear: none;\\n\\\nsnippet cl:r\\n\\\n\tclear: right;\\n\\\nsnippet cp\\n\\\n\tclip: ${1};\\n\\\nsnippet cp:a\\n\\\n\tclip: auto;\\n\\\nsnippet cp:r\\n\\\n\tclip: rect(${1:0} ${2:0} ${3:0} ${4:0});\\n\\\nsnippet c\\n\\\n\tcolor: #${1:000};\\n\\\nsnippet ct\\n\\\n\tcontent: ${1};\\n\\\nsnippet ct:a\\n\\\n\tcontent: attr(${1});\\n\\\nsnippet ct:cq\\n\\\n\tcontent: close-quote;\\n\\\nsnippet ct:c\\n\\\n\tcontent: counter(${1});\\n\\\nsnippet ct:cs\\n\\\n\tcontent: counters(${1});\\n\\\nsnippet ct:ncq\\n\\\n\tcontent: no-close-quote;\\n\\\nsnippet ct:noq\\n\\\n\tcontent: no-open-quote;\\n\\\nsnippet ct:n\\n\\\n\tcontent: normal;\\n\\\nsnippet ct:oq\\n\\\n\tcontent: open-quote;\\n\\\nsnippet coi\\n\\\n\tcounter-increment: ${1};\\n\\\nsnippet cor\\n\\\n\tcounter-reset: ${1};\\n\\\nsnippet cur\\n\\\n\tcursor: ${1};\\n\\\nsnippet cur:a\\n\\\n\tcursor: auto;\\n\\\nsnippet cur:c\\n\\\n\tcursor: crosshair;\\n\\\nsnippet cur:d\\n\\\n\tcursor: default;\\n\\\nsnippet cur:ha\\n\\\n\tcursor: hand;\\n\\\nsnippet cur:he\\n\\\n\tcursor: help;\\n\\\nsnippet cur:m\\n\\\n\tcursor: move;\\n\\\nsnippet cur:p\\n\\\n\tcursor: pointer;\\n\\\nsnippet cur:t\\n\\\n\tcursor: text;\\n\\\nsnippet d\\n\\\n\tdisplay: ${1};\\n\\\nsnippet d:mib\\n\\\n\tdisplay: -moz-inline-box;\\n\\\nsnippet d:mis\\n\\\n\tdisplay: -moz-inline-stack;\\n\\\nsnippet d:b\\n\\\n\tdisplay: block;\\n\\\nsnippet d:cp\\n\\\n\tdisplay: compact;\\n\\\nsnippet d:ib\\n\\\n\tdisplay: inline-block;\\n\\\nsnippet d:itb\\n\\\n\tdisplay: inline-table;\\n\\\nsnippet d:i\\n\\\n\tdisplay: inline;\\n\\\nsnippet d:li\\n\\\n\tdisplay: list-item;\\n\\\nsnippet d:n\\n\\\n\tdisplay: none;\\n\\\nsnippet d:ri\\n\\\n\tdisplay: run-in;\\n\\\nsnippet d:tbcp\\n\\\n\tdisplay: table-caption;\\n\\\nsnippet d:tbc\\n\\\n\tdisplay: table-cell;\\n\\\nsnippet d:tbclg\\n\\\n\tdisplay: table-column-group;\\n\\\nsnippet d:tbcl\\n\\\n\tdisplay: table-column;\\n\\\nsnippet d:tbfg\\n\\\n\tdisplay: table-footer-group;\\n\\\nsnippet d:tbhg\\n\\\n\tdisplay: table-header-group;\\n\\\nsnippet d:tbrg\\n\\\n\tdisplay: table-row-group;\\n\\\nsnippet d:tbr\\n\\\n\tdisplay: table-row;\\n\\\nsnippet d:tb\\n\\\n\tdisplay: table;\\n\\\nsnippet ec\\n\\\n\tempty-cells: ${1};\\n\\\nsnippet ec:h\\n\\\n\tempty-cells: hide;\\n\\\nsnippet ec:s\\n\\\n\tempty-cells: show;\\n\\\nsnippet exp\\n\\\n\texpression()\\n\\\nsnippet fl\\n\\\n\tfloat: ${1};\\n\\\nsnippet fl:l\\n\\\n\tfloat: left;\\n\\\nsnippet fl:n\\n\\\n\tfloat: none;\\n\\\nsnippet fl:r\\n\\\n\tfloat: right;\\n\\\nsnippet f+\\n\\\n\tfont: ${1:1em} ${2:Arial},${3:sans-serif};\\n\\\nsnippet fef\\n\\\n\tfont-effect: ${1};\\n\\\nsnippet fef:eb\\n\\\n\tfont-effect: emboss;\\n\\\nsnippet fef:eg\\n\\\n\tfont-effect: engrave;\\n\\\nsnippet fef:n\\n\\\n\tfont-effect: none;\\n\\\nsnippet fef:o\\n\\\n\tfont-effect: outline;\\n\\\nsnippet femp\\n\\\n\tfont-emphasize-position: ${1};\\n\\\nsnippet femp:a\\n\\\n\tfont-emphasize-position: after;\\n\\\nsnippet femp:b\\n\\\n\tfont-emphasize-position: before;\\n\\\nsnippet fems\\n\\\n\tfont-emphasize-style: ${1};\\n\\\nsnippet fems:ac\\n\\\n\tfont-emphasize-style: accent;\\n\\\nsnippet fems:c\\n\\\n\tfont-emphasize-style: circle;\\n\\\nsnippet fems:ds\\n\\\n\tfont-emphasize-style: disc;\\n\\\nsnippet fems:dt\\n\\\n\tfont-emphasize-style: dot;\\n\\\nsnippet fems:n\\n\\\n\tfont-emphasize-style: none;\\n\\\nsnippet fem\\n\\\n\tfont-emphasize: ${1};\\n\\\nsnippet ff\\n\\\n\tfont-family: ${1};\\n\\\nsnippet ff:c\\n\\\n\tfont-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\\n\\\nsnippet ff:f\\n\\\n\tfont-family: ${1:Capitals,Impact},fantasy;\\n\\\nsnippet ff:m\\n\\\n\tfont-family: ${1:Monaco,'Courier New'},monospace;\\n\\\nsnippet ff:ss\\n\\\n\tfont-family: ${1:Helvetica,Arial},sans-serif;\\n\\\nsnippet ff:s\\n\\\n\tfont-family: ${1:Georgia,'Times New Roman'},serif;\\n\\\nsnippet fza\\n\\\n\tfont-size-adjust: ${1};\\n\\\nsnippet fza:n\\n\\\n\tfont-size-adjust: none;\\n\\\nsnippet fz\\n\\\n\tfont-size: ${1};\\n\\\nsnippet fsm\\n\\\n\tfont-smooth: ${1};\\n\\\nsnippet fsm:aw\\n\\\n\tfont-smooth: always;\\n\\\nsnippet fsm:a\\n\\\n\tfont-smooth: auto;\\n\\\nsnippet fsm:n\\n\\\n\tfont-smooth: never;\\n\\\nsnippet fst\\n\\\n\tfont-stretch: ${1};\\n\\\nsnippet fst:c\\n\\\n\tfont-stretch: condensed;\\n\\\nsnippet fst:e\\n\\\n\tfont-stretch: expanded;\\n\\\nsnippet fst:ec\\n\\\n\tfont-stretch: extra-condensed;\\n\\\nsnippet fst:ee\\n\\\n\tfont-stretch: extra-expanded;\\n\\\nsnippet fst:n\\n\\\n\tfont-stretch: normal;\\n\\\nsnippet fst:sc\\n\\\n\tfont-stretch: semi-condensed;\\n\\\nsnippet fst:se\\n\\\n\tfont-stretch: semi-expanded;\\n\\\nsnippet fst:uc\\n\\\n\tfont-stretch: ultra-condensed;\\n\\\nsnippet fst:ue\\n\\\n\tfont-stretch: ultra-expanded;\\n\\\nsnippet fs\\n\\\n\tfont-style: ${1};\\n\\\nsnippet fs:i\\n\\\n\tfont-style: italic;\\n\\\nsnippet fs:n\\n\\\n\tfont-style: normal;\\n\\\nsnippet fs:o\\n\\\n\tfont-style: oblique;\\n\\\nsnippet fv\\n\\\n\tfont-variant: ${1};\\n\\\nsnippet fv:n\\n\\\n\tfont-variant: normal;\\n\\\nsnippet fv:sc\\n\\\n\tfont-variant: small-caps;\\n\\\nsnippet fw\\n\\\n\tfont-weight: ${1};\\n\\\nsnippet fw:b\\n\\\n\tfont-weight: bold;\\n\\\nsnippet fw:br\\n\\\n\tfont-weight: bolder;\\n\\\nsnippet fw:lr\\n\\\n\tfont-weight: lighter;\\n\\\nsnippet fw:n\\n\\\n\tfont-weight: normal;\\n\\\nsnippet f\\n\\\n\tfont: ${1};\\n\\\nsnippet h\\n\\\n\theight: ${1};\\n\\\nsnippet h:a\\n\\\n\theight: auto;\\n\\\nsnippet l\\n\\\n\tleft: ${1};\\n\\\nsnippet l:a\\n\\\n\tleft: auto;\\n\\\nsnippet lts\\n\\\n\tletter-spacing: ${1};\\n\\\nsnippet lh\\n\\\n\tline-height: ${1};\\n\\\nsnippet lisi\\n\\\n\tlist-style-image: url(${1});\\n\\\nsnippet lisi:n\\n\\\n\tlist-style-image: none;\\n\\\nsnippet lisp\\n\\\n\tlist-style-position: ${1};\\n\\\nsnippet lisp:i\\n\\\n\tlist-style-position: inside;\\n\\\nsnippet lisp:o\\n\\\n\tlist-style-position: outside;\\n\\\nsnippet list\\n\\\n\tlist-style-type: ${1};\\n\\\nsnippet list:c\\n\\\n\tlist-style-type: circle;\\n\\\nsnippet list:dclz\\n\\\n\tlist-style-type: decimal-leading-zero;\\n\\\nsnippet list:dc\\n\\\n\tlist-style-type: decimal;\\n\\\nsnippet list:d\\n\\\n\tlist-style-type: disc;\\n\\\nsnippet list:lr\\n\\\n\tlist-style-type: lower-roman;\\n\\\nsnippet list:n\\n\\\n\tlist-style-type: none;\\n\\\nsnippet list:s\\n\\\n\tlist-style-type: square;\\n\\\nsnippet list:ur\\n\\\n\tlist-style-type: upper-roman;\\n\\\nsnippet lis\\n\\\n\tlist-style: ${1};\\n\\\nsnippet lis:n\\n\\\n\tlist-style: none;\\n\\\nsnippet mb\\n\\\n\tmargin-bottom: ${1};\\n\\\nsnippet mb:a\\n\\\n\tmargin-bottom: auto;\\n\\\nsnippet ml\\n\\\n\tmargin-left: ${1};\\n\\\nsnippet ml:a\\n\\\n\tmargin-left: auto;\\n\\\nsnippet mr\\n\\\n\tmargin-right: ${1};\\n\\\nsnippet mr:a\\n\\\n\tmargin-right: auto;\\n\\\nsnippet mt\\n\\\n\tmargin-top: ${1};\\n\\\nsnippet mt:a\\n\\\n\tmargin-top: auto;\\n\\\nsnippet m\\n\\\n\tmargin: ${1};\\n\\\nsnippet m:4\\n\\\n\tmargin: ${1:0} ${2:0} ${3:0} ${4:0};\\n\\\nsnippet m:3\\n\\\n\tmargin: ${1:0} ${2:0} ${3:0};\\n\\\nsnippet m:2\\n\\\n\tmargin: ${1:0} ${2:0};\\n\\\nsnippet m:0\\n\\\n\tmargin: 0;\\n\\\nsnippet m:a\\n\\\n\tmargin: auto;\\n\\\nsnippet mah\\n\\\n\tmax-height: ${1};\\n\\\nsnippet mah:n\\n\\\n\tmax-height: none;\\n\\\nsnippet maw\\n\\\n\tmax-width: ${1};\\n\\\nsnippet maw:n\\n\\\n\tmax-width: none;\\n\\\nsnippet mih\\n\\\n\tmin-height: ${1};\\n\\\nsnippet miw\\n\\\n\tmin-width: ${1};\\n\\\nsnippet op\\n\\\n\topacity: ${1};\\n\\\nsnippet op:ie\\n\\\n\tfilter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\\n\\\nsnippet op:ms\\n\\\n\t-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\\n\\\nsnippet orp\\n\\\n\torphans: ${1};\\n\\\nsnippet o+\\n\\\n\toutline: ${1:1px} ${2:solid} #${3:000};\\n\\\nsnippet oc\\n\\\n\toutline-color: ${1:#000};\\n\\\nsnippet oc:i\\n\\\n\toutline-color: invert;\\n\\\nsnippet oo\\n\\\n\toutline-offset: ${1};\\n\\\nsnippet os\\n\\\n\toutline-style: ${1};\\n\\\nsnippet ow\\n\\\n\toutline-width: ${1};\\n\\\nsnippet o\\n\\\n\toutline: ${1};\\n\\\nsnippet o:n\\n\\\n\toutline: none;\\n\\\nsnippet ovs\\n\\\n\toverflow-style: ${1};\\n\\\nsnippet ovs:a\\n\\\n\toverflow-style: auto;\\n\\\nsnippet ovs:mq\\n\\\n\toverflow-style: marquee;\\n\\\nsnippet ovs:mv\\n\\\n\toverflow-style: move;\\n\\\nsnippet ovs:p\\n\\\n\toverflow-style: panner;\\n\\\nsnippet ovs:s\\n\\\n\toverflow-style: scrollbar;\\n\\\nsnippet ovx\\n\\\n\toverflow-x: ${1};\\n\\\nsnippet ovx:a\\n\\\n\toverflow-x: auto;\\n\\\nsnippet ovx:h\\n\\\n\toverflow-x: hidden;\\n\\\nsnippet ovx:s\\n\\\n\toverflow-x: scroll;\\n\\\nsnippet ovx:v\\n\\\n\toverflow-x: visible;\\n\\\nsnippet ovy\\n\\\n\toverflow-y: ${1};\\n\\\nsnippet ovy:a\\n\\\n\toverflow-y: auto;\\n\\\nsnippet ovy:h\\n\\\n\toverflow-y: hidden;\\n\\\nsnippet ovy:s\\n\\\n\toverflow-y: scroll;\\n\\\nsnippet ovy:v\\n\\\n\toverflow-y: visible;\\n\\\nsnippet ov\\n\\\n\toverflow: ${1};\\n\\\nsnippet ov:a\\n\\\n\toverflow: auto;\\n\\\nsnippet ov:h\\n\\\n\toverflow: hidden;\\n\\\nsnippet ov:s\\n\\\n\toverflow: scroll;\\n\\\nsnippet ov:v\\n\\\n\toverflow: visible;\\n\\\nsnippet pb\\n\\\n\tpadding-bottom: ${1};\\n\\\nsnippet pl\\n\\\n\tpadding-left: ${1};\\n\\\nsnippet pr\\n\\\n\tpadding-right: ${1};\\n\\\nsnippet pt\\n\\\n\tpadding-top: ${1};\\n\\\nsnippet p\\n\\\n\tpadding: ${1};\\n\\\nsnippet p:4\\n\\\n\tpadding: ${1:0} ${2:0} ${3:0} ${4:0};\\n\\\nsnippet p:3\\n\\\n\tpadding: ${1:0} ${2:0} ${3:0};\\n\\\nsnippet p:2\\n\\\n\tpadding: ${1:0} ${2:0};\\n\\\nsnippet p:0\\n\\\n\tpadding: 0;\\n\\\nsnippet pgba\\n\\\n\tpage-break-after: ${1};\\n\\\nsnippet pgba:aw\\n\\\n\tpage-break-after: always;\\n\\\nsnippet pgba:a\\n\\\n\tpage-break-after: auto;\\n\\\nsnippet pgba:l\\n\\\n\tpage-break-after: left;\\n\\\nsnippet pgba:r\\n\\\n\tpage-break-after: right;\\n\\\nsnippet pgbb\\n\\\n\tpage-break-before: ${1};\\n\\\nsnippet pgbb:aw\\n\\\n\tpage-break-before: always;\\n\\\nsnippet pgbb:a\\n\\\n\tpage-break-before: auto;\\n\\\nsnippet pgbb:l\\n\\\n\tpage-break-before: left;\\n\\\nsnippet pgbb:r\\n\\\n\tpage-break-before: right;\\n\\\nsnippet pgbi\\n\\\n\tpage-break-inside: ${1};\\n\\\nsnippet pgbi:a\\n\\\n\tpage-break-inside: auto;\\n\\\nsnippet pgbi:av\\n\\\n\tpage-break-inside: avoid;\\n\\\nsnippet pos\\n\\\n\tposition: ${1};\\n\\\nsnippet pos:a\\n\\\n\tposition: absolute;\\n\\\nsnippet pos:f\\n\\\n\tposition: fixed;\\n\\\nsnippet pos:r\\n\\\n\tposition: relative;\\n\\\nsnippet pos:s\\n\\\n\tposition: static;\\n\\\nsnippet q\\n\\\n\tquotes: ${1};\\n\\\nsnippet q:en\\n\\\n\tquotes: '\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019';\\n\\\nsnippet q:n\\n\\\n\tquotes: none;\\n\\\nsnippet q:ru\\n\\\n\tquotes: '\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C';\\n\\\nsnippet rz\\n\\\n\tresize: ${1};\\n\\\nsnippet rz:b\\n\\\n\tresize: both;\\n\\\nsnippet rz:h\\n\\\n\tresize: horizontal;\\n\\\nsnippet rz:n\\n\\\n\tresize: none;\\n\\\nsnippet rz:v\\n\\\n\tresize: vertical;\\n\\\nsnippet r\\n\\\n\tright: ${1};\\n\\\nsnippet r:a\\n\\\n\tright: auto;\\n\\\nsnippet tbl\\n\\\n\ttable-layout: ${1};\\n\\\nsnippet tbl:a\\n\\\n\ttable-layout: auto;\\n\\\nsnippet tbl:f\\n\\\n\ttable-layout: fixed;\\n\\\nsnippet tal\\n\\\n\ttext-align-last: ${1};\\n\\\nsnippet tal:a\\n\\\n\ttext-align-last: auto;\\n\\\nsnippet tal:c\\n\\\n\ttext-align-last: center;\\n\\\nsnippet tal:l\\n\\\n\ttext-align-last: left;\\n\\\nsnippet tal:r\\n\\\n\ttext-align-last: right;\\n\\\nsnippet ta\\n\\\n\ttext-align: ${1};\\n\\\nsnippet ta:c\\n\\\n\ttext-align: center;\\n\\\nsnippet ta:l\\n\\\n\ttext-align: left;\\n\\\nsnippet ta:r\\n\\\n\ttext-align: right;\\n\\\nsnippet td\\n\\\n\ttext-decoration: ${1};\\n\\\nsnippet td:l\\n\\\n\ttext-decoration: line-through;\\n\\\nsnippet td:n\\n\\\n\ttext-decoration: none;\\n\\\nsnippet td:o\\n\\\n\ttext-decoration: overline;\\n\\\nsnippet td:u\\n\\\n\ttext-decoration: underline;\\n\\\nsnippet te\\n\\\n\ttext-emphasis: ${1};\\n\\\nsnippet te:ac\\n\\\n\ttext-emphasis: accent;\\n\\\nsnippet te:a\\n\\\n\ttext-emphasis: after;\\n\\\nsnippet te:b\\n\\\n\ttext-emphasis: before;\\n\\\nsnippet te:c\\n\\\n\ttext-emphasis: circle;\\n\\\nsnippet te:ds\\n\\\n\ttext-emphasis: disc;\\n\\\nsnippet te:dt\\n\\\n\ttext-emphasis: dot;\\n\\\nsnippet te:n\\n\\\n\ttext-emphasis: none;\\n\\\nsnippet th\\n\\\n\ttext-height: ${1};\\n\\\nsnippet th:a\\n\\\n\ttext-height: auto;\\n\\\nsnippet th:f\\n\\\n\ttext-height: font-size;\\n\\\nsnippet th:m\\n\\\n\ttext-height: max-size;\\n\\\nsnippet th:t\\n\\\n\ttext-height: text-size;\\n\\\nsnippet ti\\n\\\n\ttext-indent: ${1};\\n\\\nsnippet ti:-\\n\\\n\ttext-indent: -9999px;\\n\\\nsnippet tj\\n\\\n\ttext-justify: ${1};\\n\\\nsnippet tj:a\\n\\\n\ttext-justify: auto;\\n\\\nsnippet tj:d\\n\\\n\ttext-justify: distribute;\\n\\\nsnippet tj:ic\\n\\\n\ttext-justify: inter-cluster;\\n\\\nsnippet tj:ii\\n\\\n\ttext-justify: inter-ideograph;\\n\\\nsnippet tj:iw\\n\\\n\ttext-justify: inter-word;\\n\\\nsnippet tj:k\\n\\\n\ttext-justify: kashida;\\n\\\nsnippet tj:t\\n\\\n\ttext-justify: tibetan;\\n\\\nsnippet to+\\n\\\n\ttext-outline: ${1:0} ${2:0} #${3:000};\\n\\\nsnippet to\\n\\\n\ttext-outline: ${1};\\n\\\nsnippet to:n\\n\\\n\ttext-outline: none;\\n\\\nsnippet tr\\n\\\n\ttext-replace: ${1};\\n\\\nsnippet tr:n\\n\\\n\ttext-replace: none;\\n\\\nsnippet tsh+\\n\\\n\ttext-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\n\\\nsnippet tsh\\n\\\n\ttext-shadow: ${1};\\n\\\nsnippet tsh:n\\n\\\n\ttext-shadow: none;\\n\\\nsnippet tt\\n\\\n\ttext-transform: ${1};\\n\\\nsnippet tt:c\\n\\\n\ttext-transform: capitalize;\\n\\\nsnippet tt:l\\n\\\n\ttext-transform: lowercase;\\n\\\nsnippet tt:n\\n\\\n\ttext-transform: none;\\n\\\nsnippet tt:u\\n\\\n\ttext-transform: uppercase;\\n\\\nsnippet tw\\n\\\n\ttext-wrap: ${1};\\n\\\nsnippet tw:no\\n\\\n\ttext-wrap: none;\\n\\\nsnippet tw:n\\n\\\n\ttext-wrap: normal;\\n\\\nsnippet tw:s\\n\\\n\ttext-wrap: suppress;\\n\\\nsnippet tw:u\\n\\\n\ttext-wrap: unrestricted;\\n\\\nsnippet t\\n\\\n\ttop: ${1};\\n\\\nsnippet t:a\\n\\\n\ttop: auto;\\n\\\nsnippet va\\n\\\n\tvertical-align: ${1};\\n\\\nsnippet va:bl\\n\\\n\tvertical-align: baseline;\\n\\\nsnippet va:b\\n\\\n\tvertical-align: bottom;\\n\\\nsnippet va:m\\n\\\n\tvertical-align: middle;\\n\\\nsnippet va:sub\\n\\\n\tvertical-align: sub;\\n\\\nsnippet va:sup\\n\\\n\tvertical-align: super;\\n\\\nsnippet va:tb\\n\\\n\tvertical-align: text-bottom;\\n\\\nsnippet va:tt\\n\\\n\tvertical-align: text-top;\\n\\\nsnippet va:t\\n\\\n\tvertical-align: top;\\n\\\nsnippet v\\n\\\n\tvisibility: ${1};\\n\\\nsnippet v:c\\n\\\n\tvisibility: collapse;\\n\\\nsnippet v:h\\n\\\n\tvisibility: hidden;\\n\\\nsnippet v:v\\n\\\n\tvisibility: visible;\\n\\\nsnippet whsc\\n\\\n\twhite-space-collapse: ${1};\\n\\\nsnippet whsc:ba\\n\\\n\twhite-space-collapse: break-all;\\n\\\nsnippet whsc:bs\\n\\\n\twhite-space-collapse: break-strict;\\n\\\nsnippet whsc:k\\n\\\n\twhite-space-collapse: keep-all;\\n\\\nsnippet whsc:l\\n\\\n\twhite-space-collapse: loose;\\n\\\nsnippet whsc:n\\n\\\n\twhite-space-collapse: normal;\\n\\\nsnippet whs\\n\\\n\twhite-space: ${1};\\n\\\nsnippet whs:n\\n\\\n\twhite-space: normal;\\n\\\nsnippet whs:nw\\n\\\n\twhite-space: nowrap;\\n\\\nsnippet whs:pl\\n\\\n\twhite-space: pre-line;\\n\\\nsnippet whs:pw\\n\\\n\twhite-space: pre-wrap;\\n\\\nsnippet whs:p\\n\\\n\twhite-space: pre;\\n\\\nsnippet wid\\n\\\n\twidows: ${1};\\n\\\nsnippet w\\n\\\n\twidth: ${1};\\n\\\nsnippet w:a\\n\\\n\twidth: auto;\\n\\\nsnippet wob\\n\\\n\tword-break: ${1};\\n\\\nsnippet wob:ba\\n\\\n\tword-break: break-all;\\n\\\nsnippet wob:bs\\n\\\n\tword-break: break-strict;\\n\\\nsnippet wob:k\\n\\\n\tword-break: keep-all;\\n\\\nsnippet wob:l\\n\\\n\tword-break: loose;\\n\\\nsnippet wob:n\\n\\\n\tword-break: normal;\\n\\\nsnippet wos\\n\\\n\tword-spacing: ${1};\\n\\\nsnippet wow\\n\\\n\tword-wrap: ${1};\\n\\\nsnippet wow:no\\n\\\n\tword-wrap: none;\\n\\\nsnippet wow:n\\n\\\n\tword-wrap: normal;\\n\\\nsnippet wow:s\\n\\\n\tword-wrap: suppress;\\n\\\nsnippet wow:u\\n\\\n\tword-wrap: unrestricted;\\n\\\nsnippet z\\n\\\n\tz-index: ${1};\\n\\\nsnippet z:a\\n\\\n\tz-index: auto;\\n\\\nsnippet zoo\\n\\\n\tzoom: 1;\\n\\\n\";\nexports.scope = \"css\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/html.js",
    "content": "ace.define(\"ace/snippets/html\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Some useful Unicode entities\\n\\\n# Non-Breaking Space\\n\\\nsnippet nbs\\n\\\n\t&nbsp;\\n\\\n# ←\\n\\\nsnippet left\\n\\\n\t&#x2190;\\n\\\n# →\\n\\\nsnippet right\\n\\\n\t&#x2192;\\n\\\n# ↑\\n\\\nsnippet up\\n\\\n\t&#x2191;\\n\\\n# ↓\\n\\\nsnippet down\\n\\\n\t&#x2193;\\n\\\n# ↩\\n\\\nsnippet return\\n\\\n\t&#x21A9;\\n\\\n# ⇤\\n\\\nsnippet backtab\\n\\\n\t&#x21E4;\\n\\\n# ⇥\\n\\\nsnippet tab\\n\\\n\t&#x21E5;\\n\\\n# ⇧\\n\\\nsnippet shift\\n\\\n\t&#x21E7;\\n\\\n# ⌃\\n\\\nsnippet ctrl\\n\\\n\t&#x2303;\\n\\\n# ⌅\\n\\\nsnippet enter\\n\\\n\t&#x2305;\\n\\\n# ⌘\\n\\\nsnippet cmd\\n\\\n\t&#x2318;\\n\\\n# ⌥\\n\\\nsnippet option\\n\\\n\t&#x2325;\\n\\\n# ⌦\\n\\\nsnippet delete\\n\\\n\t&#x2326;\\n\\\n# ⌫\\n\\\nsnippet backspace\\n\\\n\t&#x232B;\\n\\\n# ⎋\\n\\\nsnippet esc\\n\\\n\t&#x238B;\\n\\\n# Generic Doctype\\n\\\nsnippet doctype HTML 4.01 Strict\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\nsnippet doctype HTML 4.01 Transitional\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\nsnippet doctype HTML 5\\n\\\n\t<!DOCTYPE HTML>\\n\\\nsnippet doctype XHTML 1.0 Frameset\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Strict\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\nsnippet doctype XHTML 1.0 Transitional\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\nsnippet doctype XHTML 1.1\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# HTML Doctype 4.01 Strict\\n\\\nsnippet docts\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/strict.dtd\\\">\\n\\\n# HTML Doctype 4.01 Transitional\\n\\\nsnippet doct\\n\\\n\t<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/html4/loose.dtd\\\">\\n\\\n# HTML Doctype 5\\n\\\nsnippet doct5\\n\\\n\t<!DOCTYPE HTML>\\n\\\n# XHTML Doctype 1.0 Frameset\\n\\\nsnippet docxf\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Frameset//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Strict\\n\\\nsnippet docxs\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\\n\\\n# XHTML Doctype 1.0 Transitional\\n\\\nsnippet docxt\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\\\n# XHTML Doctype 1.1\\n\\\nsnippet docx\\n\\\n\t<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\"\\n\\\n\t\\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\\n\\\n# Attributes\\n\\\nsnippet attr\\n\\\n\t${1:attribute}=\\\"${2:property}\\\"\\n\\\nsnippet attr+\\n\\\n\t${1:attribute}=\\\"${2:property}\\\" attr+${3}\\n\\\nsnippet .\\n\\\n\tclass=\\\"${1}\\\"${2}\\n\\\nsnippet #\\n\\\n\tid=\\\"${1}\\\"${2}\\n\\\nsnippet alt\\n\\\n\talt=\\\"${1}\\\"${2}\\n\\\nsnippet charset\\n\\\n\tcharset=\\\"${1:utf-8}\\\"${2}\\n\\\nsnippet data\\n\\\n\tdata-${1}=\\\"${2:$1}\\\"${3}\\n\\\nsnippet for\\n\\\n\tfor=\\\"${1}\\\"${2}\\n\\\nsnippet height\\n\\\n\theight=\\\"${1}\\\"${2}\\n\\\nsnippet href\\n\\\n\thref=\\\"${1:#}\\\"${2}\\n\\\nsnippet lang\\n\\\n\tlang=\\\"${1:en}\\\"${2}\\n\\\nsnippet media\\n\\\n\tmedia=\\\"${1}\\\"${2}\\n\\\nsnippet name\\n\\\n\tname=\\\"${1}\\\"${2}\\n\\\nsnippet rel\\n\\\n\trel=\\\"${1}\\\"${2}\\n\\\nsnippet scope\\n\\\n\tscope=\\\"${1:row}\\\"${2}\\n\\\nsnippet src\\n\\\n\tsrc=\\\"${1}\\\"${2}\\n\\\nsnippet title=\\n\\\n\ttitle=\\\"${1}\\\"${2}\\n\\\nsnippet type\\n\\\n\ttype=\\\"${1}\\\"${2}\\n\\\nsnippet value\\n\\\n\tvalue=\\\"${1}\\\"${2}\\n\\\nsnippet width\\n\\\n\twidth=\\\"${1}\\\"${2}\\n\\\n# Elements\\n\\\nsnippet a\\n\\\n\t<a href=\\\"${1:#}\\\">${2:$1}</a>\\n\\\nsnippet a.\\n\\\n\t<a class=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a#\\n\\\n\t<a id=\\\"${1}\\\" href=\\\"${2:#}\\\">${3:$1}</a>\\n\\\nsnippet a:ext\\n\\\n\t<a href=\\\"http://${1:example.com}\\\">${2:$1}</a>\\n\\\nsnippet a:mail\\n\\\n\t<a href=\\\"mailto:${1:joe@example.com}?subject=${2:feedback}\\\">${3:email me}</a>\\n\\\nsnippet abbr\\n\\\n\t<abbr title=\\\"${1}\\\">${2}</abbr>\\n\\\nsnippet address\\n\\\n\t<address>\\n\\\n\t\t${1}\\n\\\n\t</address>\\n\\\nsnippet area\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\nsnippet area+\\n\\\n\t<area shape=\\\"${1:rect}\\\" coords=\\\"${2}\\\" href=\\\"${3}\\\" alt=\\\"${4}\\\" />\\n\\\n\tarea+${5}\\n\\\nsnippet area:c\\n\\\n\t<area shape=\\\"circle\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:d\\n\\\n\t<area shape=\\\"default\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:p\\n\\\n\t<area shape=\\\"poly\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet area:r\\n\\\n\t<area shape=\\\"rect\\\" coords=\\\"${1}\\\" href=\\\"${2}\\\" alt=\\\"${3}\\\" />\\n\\\nsnippet article\\n\\\n\t<article>\\n\\\n\t\t${1}\\n\\\n\t</article>\\n\\\nsnippet article.\\n\\\n\t<article class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet article#\\n\\\n\t<article id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</article>\\n\\\nsnippet aside\\n\\\n\t<aside>\\n\\\n\t\t${1}\\n\\\n\t</aside>\\n\\\nsnippet aside.\\n\\\n\t<aside class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet aside#\\n\\\n\t<aside id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</aside>\\n\\\nsnippet audio\\n\\\n\t<audio src=\\\"${1}>${2}</audio>\\n\\\nsnippet b\\n\\\n\t<b>${1}</b>\\n\\\nsnippet base\\n\\\n\t<base href=\\\"${1}\\\" target=\\\"${2}\\\" />\\n\\\nsnippet bdi\\n\\\n\t<bdi>${1}</bdo>\\n\\\nsnippet bdo\\n\\\n\t<bdo dir=\\\"${1}\\\">${2}</bdo>\\n\\\nsnippet bdo:l\\n\\\n\t<bdo dir=\\\"ltr\\\">${1}</bdo>\\n\\\nsnippet bdo:r\\n\\\n\t<bdo dir=\\\"rtl\\\">${1}</bdo>\\n\\\nsnippet blockquote\\n\\\n\t<blockquote>\\n\\\n\t\t${1}\\n\\\n\t</blockquote>\\n\\\nsnippet body\\n\\\n\t<body>\\n\\\n\t\t${1}\\n\\\n\t</body>\\n\\\nsnippet br\\n\\\n\t<br />${1}\\n\\\nsnippet button\\n\\\n\t<button type=\\\"${1:submit}\\\">${2}</button>\\n\\\nsnippet button.\\n\\\n\t<button class=\\\"${1:button}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button#\\n\\\n\t<button id=\\\"${1}\\\" type=\\\"${2:submit}\\\">${3}</button>\\n\\\nsnippet button:s\\n\\\n\t<button type=\\\"submit\\\">${1}</button>\\n\\\nsnippet button:r\\n\\\n\t<button type=\\\"reset\\\">${1}</button>\\n\\\nsnippet canvas\\n\\\n\t<canvas>\\n\\\n\t\t${1}\\n\\\n\t</canvas>\\n\\\nsnippet caption\\n\\\n\t<caption>${1}</caption>\\n\\\nsnippet cite\\n\\\n\t<cite>${1}</cite>\\n\\\nsnippet code\\n\\\n\t<code>${1}</code>\\n\\\nsnippet col\\n\\\n\t<col />${1}\\n\\\nsnippet col+\\n\\\n\t<col />\\n\\\n\tcol+${1}\\n\\\nsnippet colgroup\\n\\\n\t<colgroup>\\n\\\n\t\t${1}\\n\\\n\t</colgroup>\\n\\\nsnippet colgroup+\\n\\\n\t<colgroup>\\n\\\n\t\t<col />\\n\\\n\t\tcol+${1}\\n\\\n\t</colgroup>\\n\\\nsnippet command\\n\\\n\t<command type=\\\"command\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:c\\n\\\n\t<command type=\\\"checkbox\\\" label=\\\"${1}\\\" icon=\\\"${2}\\\" />\\n\\\nsnippet command:r\\n\\\n\t<command type=\\\"radio\\\" radiogroup=\\\"${1}\\\" label=\\\"${2}\\\" icon=\\\"${3}\\\" />\\n\\\nsnippet datagrid\\n\\\n\t<datagrid>\\n\\\n\t\t${1}\\n\\\n\t</datagrid>\\n\\\nsnippet datalist\\n\\\n\t<datalist>\\n\\\n\t\t${1}\\n\\\n\t</datalist>\\n\\\nsnippet datatemplate\\n\\\n\t<datatemplate>\\n\\\n\t\t${1}\\n\\\n\t</datatemplate>\\n\\\nsnippet dd\\n\\\n\t<dd>${1}</dd>\\n\\\nsnippet dd.\\n\\\n\t<dd class=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet dd#\\n\\\n\t<dd id=\\\"${1}\\\">${2}</dd>\\n\\\nsnippet del\\n\\\n\t<del>${1}</del>\\n\\\nsnippet details\\n\\\n\t<details>${1}</details>\\n\\\nsnippet dfn\\n\\\n\t<dfn>${1}</dfn>\\n\\\nsnippet dialog\\n\\\n\t<dialog>\\n\\\n\t\t${1}\\n\\\n\t</dialog>\\n\\\nsnippet div\\n\\\n\t<div>\\n\\\n\t\t${1}\\n\\\n\t</div>\\n\\\nsnippet div.\\n\\\n\t<div class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet div#\\n\\\n\t<div id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</div>\\n\\\nsnippet dl\\n\\\n\t<dl>\\n\\\n\t\t${1}\\n\\\n\t</dl>\\n\\\nsnippet dl.\\n\\\n\t<dl class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl#\\n\\\n\t<dl id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</dl>\\n\\\nsnippet dl+\\n\\\n\t<dl>\\n\\\n\t\t<dt>${1}</dt>\\n\\\n\t\t<dd>${2}</dd>\\n\\\n\t\tdt+${3}\\n\\\n\t</dl>\\n\\\nsnippet dt\\n\\\n\t<dt>${1}</dt>\\n\\\nsnippet dt.\\n\\\n\t<dt class=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt#\\n\\\n\t<dt id=\\\"${1}\\\">${2}</dt>\\n\\\nsnippet dt+\\n\\\n\t<dt>${1}</dt>\\n\\\n\t<dd>${2}</dd>\\n\\\n\tdt+${3}\\n\\\nsnippet em\\n\\\n\t<em>${1}</em>\\n\\\nsnippet embed\\n\\\n\t<embed src=${1} type=\\\"${2} />\\n\\\nsnippet fieldset\\n\\\n\t<fieldset>\\n\\\n\t\t${1}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset.\\n\\\n\t<fieldset class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset#\\n\\\n\t<fieldset id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\nsnippet fieldset+\\n\\\n\t<fieldset>\\n\\\n\t\t<legend><span>${1}</span></legend>\\n\\\n\t\t${2}\\n\\\n\t</fieldset>\\n\\\n\tfieldset+${3}\\n\\\nsnippet figcaption\\n\\\n\t<figcaption>${1}</figcaption>\\n\\\nsnippet figure\\n\\\n\t<figure>${1}</figure>\\n\\\nsnippet footer\\n\\\n\t<footer>\\n\\\n\t\t${1}\\n\\\n\t</footer>\\n\\\nsnippet footer.\\n\\\n\t<footer class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet footer#\\n\\\n\t<footer id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</footer>\\n\\\nsnippet form\\n\\\n\t<form action=\\\"${1}\\\" method=\\\"${2:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${3}\\n\\\n\t</form>\\n\\\nsnippet form.\\n\\\n\t<form class=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet form#\\n\\\n\t<form id=\\\"${1}\\\" action=\\\"${2}\\\" method=\\\"${3:get}\\\" accept-charset=\\\"utf-8\\\">\\n\\\n\t\t${4}\\n\\\n\t</form>\\n\\\nsnippet h1\\n\\\n\t<h1>${1}</h1>\\n\\\nsnippet h1.\\n\\\n\t<h1 class=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h1#\\n\\\n\t<h1 id=\\\"${1}\\\">${2}</h1>\\n\\\nsnippet h2\\n\\\n\t<h2>${1}</h2>\\n\\\nsnippet h2.\\n\\\n\t<h2 class=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h2#\\n\\\n\t<h2 id=\\\"${1}\\\">${2}</h2>\\n\\\nsnippet h3\\n\\\n\t<h3>${1}</h3>\\n\\\nsnippet h3.\\n\\\n\t<h3 class=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h3#\\n\\\n\t<h3 id=\\\"${1}\\\">${2}</h3>\\n\\\nsnippet h4\\n\\\n\t<h4>${1}</h4>\\n\\\nsnippet h4.\\n\\\n\t<h4 class=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h4#\\n\\\n\t<h4 id=\\\"${1}\\\">${2}</h4>\\n\\\nsnippet h5\\n\\\n\t<h5>${1}</h5>\\n\\\nsnippet h5.\\n\\\n\t<h5 class=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h5#\\n\\\n\t<h5 id=\\\"${1}\\\">${2}</h5>\\n\\\nsnippet h6\\n\\\n\t<h6>${1}</h6>\\n\\\nsnippet h6.\\n\\\n\t<h6 class=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet h6#\\n\\\n\t<h6 id=\\\"${1}\\\">${2}</h6>\\n\\\nsnippet head\\n\\\n\t<head>\\n\\\n\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\\n\\\n\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t${2}\\n\\\n\t</head>\\n\\\nsnippet header\\n\\\n\t<header>\\n\\\n\t\t${1}\\n\\\n\t</header>\\n\\\nsnippet header.\\n\\\n\t<header class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet header#\\n\\\n\t<header id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</header>\\n\\\nsnippet hgroup\\n\\\n\t<hgroup>\\n\\\n\t\t${1}\\n\\\n\t</hgroup>\\n\\\nsnippet hgroup.\\n\\\n\t<hgroup class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</hgroup>\\n\\\nsnippet hr\\n\\\n\t<hr />${1}\\n\\\nsnippet html\\n\\\n\t<html>\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet xhtml\\n\\\n\t<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\\\n\t${1}\\n\\\n\t</html>\\n\\\nsnippet html5\\n\\\n\t<!DOCTYPE html>\\n\\\n\t<html>\\n\\\n\t\t<head>\\n\\\n\t\t\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html; charset=utf-8\\\" />\\n\\\n\t\t\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\n\t\t\t${2:meta}\\n\\\n\t\t</head>\\n\\\n\t\t<body>\\n\\\n\t\t\t${3:body}\\n\\\n\t\t</body>\\n\\\n\t</html>\\n\\\nsnippet i\\n\\\n\t<i>${1}</i>\\n\\\nsnippet iframe\\n\\\n\t<iframe src=\\\"${1}\\\" frameborder=\\\"0\\\"></iframe>${2}\\n\\\nsnippet iframe.\\n\\\n\t<iframe class=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet iframe#\\n\\\n\t<iframe id=\\\"${1}\\\" src=\\\"${2}\\\" frameborder=\\\"0\\\"></iframe>${3}\\n\\\nsnippet img\\n\\\n\t<img src=\\\"${1}\\\" alt=\\\"${2}\\\" />${3}\\n\\\nsnippet img.\\n\\\n\t<img class=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet img#\\n\\\n\t<img id=\\\"${1}\\\" src=\\\"${2}\\\" alt=\\\"${3}\\\" />${4}\\n\\\nsnippet input\\n\\\n\t<input type=\\\"${1:text/submit/hidden/button/image}\\\" name=\\\"${2}\\\" id=\\\"${3:$2}\\\" value=\\\"${4}\\\" />${5}\\n\\\nsnippet input.\\n\\\n\t<input class=\\\"${1}\\\" type=\\\"${2:text/submit/hidden/button/image}\\\" name=\\\"${3}\\\" id=\\\"${4:$3}\\\" value=\\\"${5}\\\" />${6}\\n\\\nsnippet input:text\\n\\\n\t<input type=\\\"text\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:submit\\n\\\n\t<input type=\\\"submit\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:hidden\\n\\\n\t<input type=\\\"hidden\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:button\\n\\\n\t<input type=\\\"button\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:image\\n\\\n\t<input type=\\\"image\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" src=\\\"${3}\\\" alt=\\\"${4}\\\" />${5}\\n\\\nsnippet input:checkbox\\n\\\n\t<input type=\\\"checkbox\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:radio\\n\\\n\t<input type=\\\"radio\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" />${3}\\n\\\nsnippet input:color\\n\\\n\t<input type=\\\"color\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:date\\n\\\n\t<input type=\\\"date\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime\\n\\\n\t<input type=\\\"datetime\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:datetime-local\\n\\\n\t<input type=\\\"datetime-local\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:email\\n\\\n\t<input type=\\\"email\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:file\\n\\\n\t<input type=\\\"file\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:month\\n\\\n\t<input type=\\\"month\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:number\\n\\\n\t<input type=\\\"number\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:password\\n\\\n\t<input type=\\\"password\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:range\\n\\\n\t<input type=\\\"range\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:reset\\n\\\n\t<input type=\\\"reset\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:search\\n\\\n\t<input type=\\\"search\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:time\\n\\\n\t<input type=\\\"time\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:url\\n\\\n\t<input type=\\\"url\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet input:week\\n\\\n\t<input type=\\\"week\\\" name=\\\"${1}\\\" id=\\\"${2:$1}\\\" value=\\\"${3}\\\" />${4}\\n\\\nsnippet ins\\n\\\n\t<ins>${1}</ins>\\n\\\nsnippet kbd\\n\\\n\t<kbd>${1}</kbd>\\n\\\nsnippet keygen\\n\\\n\t<keygen>${1}</keygen>\\n\\\nsnippet label\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\nsnippet label:i\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<input type=\\\"${3:text/submit/hidden/button}\\\" name=\\\"${4:$2}\\\" id=\\\"${5:$2}\\\" value=\\\"${6}\\\" />${7}\\n\\\nsnippet label:s\\n\\\n\t<label for=\\\"${2:$1}\\\">${1}</label>\\n\\\n\t<select name=\\\"${3:$2}\\\" id=\\\"${4:$2}\\\">\\n\\\n\t\t<option value=\\\"${5}\\\">${6:$5}</option>\\n\\\n\t</select>\\n\\\nsnippet legend\\n\\\n\t<legend>${1}</legend>\\n\\\nsnippet legend+\\n\\\n\t<legend><span>${1}</span></legend>\\n\\\nsnippet li\\n\\\n\t<li>${1}</li>\\n\\\nsnippet li.\\n\\\n\t<li class=\\\"${1}\\\">${2}</li>\\n\\\nsnippet li+\\n\\\n\t<li>${1}</li>\\n\\\n\tli+${2}\\n\\\nsnippet lia\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\nsnippet lia+\\n\\\n\t<li><a href=\\\"${2:#}\\\">${1}</a></li>\\n\\\n\tlia+${3}\\n\\\nsnippet link\\n\\\n\t<link rel=\\\"${1}\\\" href=\\\"${2}\\\" title=\\\"${3}\\\" type=\\\"${4}\\\" />${5}\\n\\\nsnippet link:atom\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:atom.xml}\\\" title=\\\"Atom\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:css\\n\\\n\t<link rel=\\\"stylesheet\\\" href=\\\"${2:style.css}\\\" type=\\\"text/css\\\" media=\\\"${3:all}\\\" />${4}\\n\\\nsnippet link:favicon\\n\\\n\t<link rel=\\\"shortcut icon\\\" href=\\\"${1:favicon.ico}\\\" type=\\\"image/x-icon\\\" />${2}\\n\\\nsnippet link:rss\\n\\\n\t<link rel=\\\"alternate\\\" href=\\\"${1:rss.xml}\\\" title=\\\"RSS\\\" type=\\\"application/atom+xml\\\" />${2}\\n\\\nsnippet link:touch\\n\\\n\t<link rel=\\\"apple-touch-icon\\\" href=\\\"${1:favicon.png}\\\" />${2}\\n\\\nsnippet map\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</map>\\n\\\nsnippet map.\\n\\\n\t<map class=\\\"${1}\\\" name=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map#\\n\\\n\t<map name=\\\"${1}\\\" id=\\\"${2:$1}>\\n\\\n\t\t${3}\\n\\\n\t</map>\\n\\\nsnippet map+\\n\\\n\t<map name=\\\"${1}\\\">\\n\\\n\t\t<area shape=\\\"${2}\\\" coords=\\\"${3}\\\" href=\\\"${4}\\\" alt=\\\"${5}\\\" />${6}\\n\\\n\t</map>${7}\\n\\\nsnippet mark\\n\\\n\t<mark>${1}</mark>\\n\\\nsnippet menu\\n\\\n\t<menu>\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:c\\n\\\n\t<menu type=\\\"context\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet menu:t\\n\\\n\t<menu type=\\\"toolbar\\\">\\n\\\n\t\t${1}\\n\\\n\t</menu>\\n\\\nsnippet meta\\n\\\n\t<meta http-equiv=\\\"${1}\\\" content=\\\"${2}\\\" />${3}\\n\\\nsnippet meta:compat\\n\\\n\t<meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"IE=${1:7,8,edge}\\\" />${3}\\n\\\nsnippet meta:refresh\\n\\\n\t<meta http-equiv=\\\"refresh\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meta:utf\\n\\\n\t<meta http-equiv=\\\"content-type\\\" content=\\\"text/html;charset=UTF-8\\\" />${3}\\n\\\nsnippet meter\\n\\\n\t<meter>${1}</meter>\\n\\\nsnippet nav\\n\\\n\t<nav>\\n\\\n\t\t${1}\\n\\\n\t</nav>\\n\\\nsnippet nav.\\n\\\n\t<nav class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet nav#\\n\\\n\t<nav id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</nav>\\n\\\nsnippet noscript\\n\\\n\t<noscript>\\n\\\n\t\t${1}\\n\\\n\t</noscript>\\n\\\nsnippet object\\n\\\n\t<object data=\\\"${1}\\\" type=\\\"${2}\\\">\\n\\\n\t\t${3}\\n\\\n\t</object>${4}\\n\\\n# Embed QT Movie\\n\\\nsnippet movie\\n\\\n\t<object width=\\\"$2\\\" height=\\\"$3\\\" classid=\\\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\\\"\\n\\\n\t codebase=\\\"http://www.apple.com/qtactivex/qtplugin.cab\\\">\\n\\\n\t\t<param name=\\\"src\\\" value=\\\"$1\\\" />\\n\\\n\t\t<param name=\\\"controller\\\" value=\\\"$4\\\" />\\n\\\n\t\t<param name=\\\"autoplay\\\" value=\\\"$5\\\" />\\n\\\n\t\t<embed src=\\\"${1:movie.mov}\\\"\\n\\\n\t\t\twidth=\\\"${2:320}\\\" height=\\\"${3:240}\\\"\\n\\\n\t\t\tcontroller=\\\"${4:true}\\\" autoplay=\\\"${5:true}\\\"\\n\\\n\t\t\tscale=\\\"tofit\\\" cache=\\\"true\\\"\\n\\\n\t\t\tpluginspage=\\\"http://www.apple.com/quicktime/download/\\\" />\\n\\\n\t</object>${6}\\n\\\nsnippet ol\\n\\\n\t<ol>\\n\\\n\t\t${1}\\n\\\n\t</ol>\\n\\\nsnippet ol.\\n\\\n\t<ol class=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol#\\n\\\n\t<ol id=\\\"${1}>\\n\\\n\t\t${2}\\n\\\n\t</ol>\\n\\\nsnippet ol+\\n\\\n\t<ol>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ol>\\n\\\nsnippet opt\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\nsnippet opt+\\n\\\n\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\topt+${3}\\n\\\nsnippet optt\\n\\\n\t<option>${1}</option>\\n\\\nsnippet optgroup\\n\\\n\t<optgroup>\\n\\\n\t\t<option value=\\\"${1}\\\">${2:$1}</option>\\n\\\n\t\topt+${3}\\n\\\n\t</optgroup>\\n\\\nsnippet output\\n\\\n\t<output>${1}</output>\\n\\\nsnippet p\\n\\\n\t<p>${1}</p>\\n\\\nsnippet param\\n\\\n\t<param name=\\\"${1}\\\" value=\\\"${2}\\\" />${3}\\n\\\nsnippet pre\\n\\\n\t<pre>\\n\\\n\t\t${1}\\n\\\n\t</pre>\\n\\\nsnippet progress\\n\\\n\t<progress>${1}</progress>\\n\\\nsnippet q\\n\\\n\t<q>${1}</q>\\n\\\nsnippet rp\\n\\\n\t<rp>${1}</rp>\\n\\\nsnippet rt\\n\\\n\t<rt>${1}</rt>\\n\\\nsnippet ruby\\n\\\n\t<ruby>\\n\\\n\t\t<rp><rt>${1}</rt></rp>\\n\\\n\t</ruby>\\n\\\nsnippet s\\n\\\n\t<s>${1}</s>\\n\\\nsnippet samp\\n\\\n\t<samp>\\n\\\n\t\t${1}\\n\\\n\t</samp>\\n\\\nsnippet script\\n\\\n\t<script type=\\\"text/javascript\\\" charset=\\\"utf-8\\\">\\n\\\n\t\t${1}\\n\\\n\t</script>\\n\\\nsnippet scriptsrc\\n\\\n\t<script src=\\\"${1}.js\\\" type=\\\"text/javascript\\\" charset=\\\"utf-8\\\"></script>\\n\\\nsnippet section\\n\\\n\t<section>\\n\\\n\t\t${1}\\n\\\n\t</section>\\n\\\nsnippet section.\\n\\\n\t<section class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet section#\\n\\\n\t<section id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</section>\\n\\\nsnippet select\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t${3}\\n\\\n\t</select>\\n\\\nsnippet select.\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\" class=\\\"${3}>\\n\\\n\t\t${4}\\n\\\n\t</select>\\n\\\nsnippet select+\\n\\\n\t<select name=\\\"${1}\\\" id=\\\"${2:$1}\\\">\\n\\\n\t\t<option value=\\\"${3}\\\">${4:$3}</option>\\n\\\n\t\topt+${5}\\n\\\n\t</select>\\n\\\nsnippet small\\n\\\n\t<small>${1}</small>\\n\\\nsnippet source\\n\\\n\t<source src=\\\"${1}\\\" type=\\\"${2}\\\" media=\\\"${3}\\\" />\\n\\\nsnippet span\\n\\\n\t<span>${1}</span>\\n\\\nsnippet strong\\n\\\n\t<strong>${1}</strong>\\n\\\nsnippet style\\n\\\n\t<style type=\\\"text/css\\\" media=\\\"${1:all}\\\">\\n\\\n\t\t${2}\\n\\\n\t</style>\\n\\\nsnippet sub\\n\\\n\t<sub>${1}</sub>\\n\\\nsnippet summary\\n\\\n\t<summary>\\n\\\n\t\t${1}\\n\\\n\t</summary>\\n\\\nsnippet sup\\n\\\n\t<sup>${1}</sup>\\n\\\nsnippet table\\n\\\n\t<table border=\\\"${1:0}\\\">\\n\\\n\t\t${2}\\n\\\n\t</table>\\n\\\nsnippet table.\\n\\\n\t<table class=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet table#\\n\\\n\t<table id=\\\"${1}\\\" border=\\\"${2:0}\\\">\\n\\\n\t\t${3}\\n\\\n\t</table>\\n\\\nsnippet tbody\\n\\\n\t<tbody>\\n\\\n\t\t${1}\\n\\\n\t</tbody>\\n\\\nsnippet td\\n\\\n\t<td>${1}</td>\\n\\\nsnippet td.\\n\\\n\t<td class=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td#\\n\\\n\t<td id=\\\"${1}\\\">${2}</td>\\n\\\nsnippet td+\\n\\\n\t<td>${1}</td>\\n\\\n\ttd+${2}\\n\\\nsnippet textarea\\n\\\n\t<textarea name=\\\"${1}\\\" id=${2:$1} rows=\\\"${3:8}\\\" cols=\\\"${4:40}\\\">${5}</textarea>${6}\\n\\\nsnippet tfoot\\n\\\n\t<tfoot>\\n\\\n\t\t${1}\\n\\\n\t</tfoot>\\n\\\nsnippet th\\n\\\n\t<th>${1}</th>\\n\\\nsnippet th.\\n\\\n\t<th class=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th#\\n\\\n\t<th id=\\\"${1}\\\">${2}</th>\\n\\\nsnippet th+\\n\\\n\t<th>${1}</th>\\n\\\n\tth+${2}\\n\\\nsnippet thead\\n\\\n\t<thead>\\n\\\n\t\t${1}\\n\\\n\t</thead>\\n\\\nsnippet time\\n\\\n\t<time datetime=\\\"${1}\\\" pubdate=\\\"${2:$1}>${3:$1}</time>\\n\\\nsnippet title\\n\\\n\t<title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`}</title>\\n\\\nsnippet tr\\n\\\n\t<tr>\\n\\\n\t\t${1}\\n\\\n\t</tr>\\n\\\nsnippet tr+\\n\\\n\t<tr>\\n\\\n\t\t<td>${1}</td>\\n\\\n\t\ttd+${2}\\n\\\n\t</tr>\\n\\\nsnippet track\\n\\\n\t<track src=\\\"${1}\\\" srclang=\\\"${2}\\\" label=\\\"${3}\\\" default=\\\"${4:default}>${5}</track>${6}\\n\\\nsnippet ul\\n\\\n\t<ul>\\n\\\n\t\t${1}\\n\\\n\t</ul>\\n\\\nsnippet ul.\\n\\\n\t<ul class=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul#\\n\\\n\t<ul id=\\\"${1}\\\">\\n\\\n\t\t${2}\\n\\\n\t</ul>\\n\\\nsnippet ul+\\n\\\n\t<ul>\\n\\\n\t\t<li>${1}</li>\\n\\\n\t\tli+${2}\\n\\\n\t</ul>\\n\\\nsnippet var\\n\\\n\t<var>${1}</var>\\n\\\nsnippet video\\n\\\n\t<video src=\\\"${1} height=\\\"${2}\\\" width=\\\"${3}\\\" preload=\\\"${5:none}\\\" autoplay=\\\"${6:autoplay}>${7}</video>${8}\\n\\\nsnippet wbr\\n\\\n\t<wbr />${1}\\n\\\n\";\nexports.scope = \"html\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/javascript.js",
    "content": "ace.define(\"ace/snippets/javascript\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Prototype\\n\\\nsnippet proto\\n\\\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\\n\\\n\t\t${4:// body...}\\n\\\n\t};\\n\\\n# Function\\n\\\nsnippet fun\\n\\\n\tfunction ${1?:function_name}(${2:argument}) {\\n\\\n\t\t${3:// body...}\\n\\\n\t}\\n\\\n# Anonymous Function\\n\\\nregex /((=)\\\\s*|(:)\\\\s*|(\\\\()|\\\\b)/f/(\\\\))?/\\n\\\nsnippet f\\n\\\n\tfunction${M1?: ${1:functionName}}($2) {\\n\\\n\t\t${0:$TM_SELECTED_TEXT}\\n\\\n\t}${M2?;}${M3?,}${M4?)}\\n\\\n# Immediate function\\n\\\ntrigger \\\\(?f\\\\(\\n\\\nendTrigger \\\\)?\\n\\\nsnippet f(\\n\\\n\t(function(${1}) {\\n\\\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\\n\\\n\t}(${1}));\\n\\\n# if\\n\\\nsnippet if\\n\\\n\tif (${1:true}) {\\n\\\n\t\t${0}\\n\\\n\t}\\n\\\n# if ... else\\n\\\nsnippet ife\\n\\\n\tif (${1:true}) {\\n\\\n\t\t${2}\\n\\\n\t} else {\\n\\\n\t\t${0}\\n\\\n\t}\\n\\\n# tertiary conditional\\n\\\nsnippet ter\\n\\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\n\\\n# switch\\n\\\nsnippet switch\\n\\\n\tswitch (${1:expression}) {\\n\\\n\t\tcase '${3:case}':\\n\\\n\t\t\t${4:// code}\\n\\\n\t\t\tbreak;\\n\\\n\t\t${5}\\n\\\n\t\tdefault:\\n\\\n\t\t\t${2:// code}\\n\\\n\t}\\n\\\n# case\\n\\\nsnippet case\\n\\\n\tcase '${1:case}':\\n\\\n\t\t${2:// code}\\n\\\n\t\tbreak;\\n\\\n\t${3}\\n\\\n\\n\\\n# while (...) {...}\\n\\\nsnippet wh\\n\\\n\twhile (${1:/* condition */}) {\\n\\\n\t\t${0:/* code */}\\n\\\n\t}\\n\\\n# try\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${0:/* code */}\\n\\\n\t} catch (e) {}\\n\\\n# do...while\\n\\\nsnippet do\\n\\\n\tdo {\\n\\\n\t\t${2:/* code */}\\n\\\n\t} while (${1:/* condition */});\\n\\\n# Object Method\\n\\\nsnippet :f\\n\\\nregex /([,{[])|^\\\\s*/:f/\\n\\\n\t${1:method_name}: function(${2:attribute}) {\\n\\\n\t\t${0}\\n\\\n\t}${3:,}\\n\\\n# setTimeout function\\n\\\nsnippet setTimeout\\n\\\nregex /\\\\b/st|timeout|setTimeo?u?t?/\\n\\\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\\n\\\n# Get Elements\\n\\\nsnippet gett\\n\\\n\tgetElementsBy${1:TagName}('${2}')${3}\\n\\\n# Get Element\\n\\\nsnippet get\\n\\\n\tgetElementBy${1:Id}('${2}')${3}\\n\\\n# console.log (Firebug)\\n\\\nsnippet cl\\n\\\n\tconsole.log(${1});\\n\\\n# return\\n\\\nsnippet ret\\n\\\n\treturn ${1:result}\\n\\\n# for (property in object ) { ... }\\n\\\nsnippet fori\\n\\\n\tfor (var ${1:prop} in ${2:Things}) {\\n\\\n\t\t${0:$2[$1]}\\n\\\n\t}\\n\\\n# hasOwnProperty\\n\\\nsnippet has\\n\\\n\thasOwnProperty(${1})\\n\\\n# docstring\\n\\\nsnippet /**\\n\\\n\t/**\\n\\\n\t * ${1:description}\\n\\\n\t *\\n\\\n\t */\\n\\\nsnippet @par\\n\\\nregex /^\\\\s*\\\\*\\\\s*/@(para?m?)?/\\n\\\n\t@param {${1:type}} ${2:name} ${3:description}\\n\\\nsnippet @ret\\n\\\n\t@return {${1:type}} ${2:description}\\n\\\n# JSON.parse\\n\\\nsnippet jsonp\\n\\\n\tJSON.parse(${1:jstr});\\n\\\n# JSON.stringify\\n\\\nsnippet jsons\\n\\\n\tJSON.stringify(${1:object});\\n\\\n# self-defining function\\n\\\nsnippet sdf\\n\\\n\tvar ${1:function_name} = function(${2:argument}) {\\n\\\n\t\t${3:// initial code ...}\\n\\\n\\n\\\n\t\t$1 = function($2) {\\n\\\n\t\t\t${4:// main code}\\n\\\n\t\t};\\n\\\n\t}\\n\\\n# singleton\\n\\\nsnippet sing\\n\\\n\tfunction ${1:Singleton} (${2:argument}) {\\n\\\n\t\t// the cached instance\\n\\\n\t\tvar instance;\\n\\\n\\n\\\n\t\t// rewrite the constructor\\n\\\n\t\t$1 = function $1($2) {\\n\\\n\t\t\treturn instance;\\n\\\n\t\t};\\n\\\n\t\t\\n\\\n\t\t// carry over the prototype properties\\n\\\n\t\t$1.prototype = this;\\n\\\n\\n\\\n\t\t// the instance\\n\\\n\t\tinstance = new $1();\\n\\\n\\n\\\n\t\t// reset the constructor pointer\\n\\\n\t\tinstance.constructor = $1;\\n\\\n\\n\\\n\t\t${3:// code ...}\\n\\\n\\n\\\n\t\treturn instance;\\n\\\n\t}\\n\\\n# class\\n\\\nsnippet class\\n\\\nregex /^\\\\s*/clas{0,2}/\\n\\\n\tvar ${1:class} = function(${20}) {\\n\\\n\t\t$40$0\\n\\\n\t};\\n\\\n\t\\n\\\n\t(function() {\\n\\\n\t\t${60:this.prop = \\\"\\\"}\\n\\\n\t}).call(${1:class}.prototype);\\n\\\n\t\\n\\\n\texports.${1:class} = ${1:class};\\n\\\n# \\n\\\nsnippet for-\\n\\\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\\n\\\n\t\t${0:${2:Things}[${1:i}];}\\n\\\n\t}\\n\\\n# for (...) {...}\\n\\\nsnippet for\\n\\\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\\n\\\n\t\t${3:$2[$1]}$0\\n\\\n\t}\\n\\\n# for (...) {...} (Improved Native For-Loop)\\n\\\nsnippet forr\\n\\\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\\n\\\n\t\t${3:$2[$1]}$0\\n\\\n\t}\\n\\\n\\n\\\n\\n\\\n#modules\\n\\\nsnippet def\\n\\\n\tdefine(function(require, exports, module) {\\n\\\n\t\\\"use strict\\\";\\n\\\n\tvar ${1/.*\\\\///} = require(\\\"${1}\\\");\\n\\\n\t\\n\\\n\t$TM_SELECTED_TEXT\\n\\\n\t});\\n\\\nsnippet req\\n\\\nguard ^\\\\s*\\n\\\n\tvar ${1/.*\\\\///} = require(\\\"${1}\\\");\\n\\\n\t$0\\n\\\nsnippet requ\\n\\\nguard ^\\\\s*\\n\\\n\tvar ${1/.*\\\\/(.)/\\\\u$1/} = require(\\\"${1}\\\").${1/.*\\\\/(.)/\\\\u$1/};\\n\\\n\t$0\\n\\\n\";\nexports.scope = \"javascript\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/markdown.js",
    "content": "ace.define(\"ace/snippets/markdown\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"# Markdown\\n\\\n\\n\\\n# Includes octopress (http://octopress.org/) snippets\\n\\\n\\n\\\nsnippet [\\n\\\n\t[${1:text}](http://${2:address} \\\"${3:title}\\\")\\n\\\nsnippet [*\\n\\\n\t[${1:link}](${2:`@*`} \\\"${3:title}\\\")${4}\\n\\\n\\n\\\nsnippet [:\\n\\\n\t[${1:id}]: http://${2:url} \\\"${3:title}\\\"\\n\\\nsnippet [:*\\n\\\n\t[${1:id}]: ${2:`@*`} \\\"${3:title}\\\"\\n\\\n\\n\\\nsnippet ![\\n\\\n\t![${1:alttext}](${2:/images/image.jpg} \\\"${3:title}\\\")\\n\\\nsnippet ![*\\n\\\n\t![${1:alt}](${2:`@*`} \\\"${3:title}\\\")${4}\\n\\\n\\n\\\nsnippet ![:\\n\\\n\t![${1:id}]: ${2:url} \\\"${3:title}\\\"\\n\\\nsnippet ![:*\\n\\\n\t![${1:id}]: ${2:`@*`} \\\"${3:title}\\\"\\n\\\n\\n\\\nsnippet ===\\n\\\nregex /^/=+/=*//\\n\\\n\t${PREV_LINE/./=/g}\\n\\\n\t\\n\\\n\t${0}\\n\\\nsnippet ---\\n\\\nregex /^/-+/-*//\\n\\\n\t${PREV_LINE/./-/g}\\n\\\n\t\\n\\\n\t${0}\\n\\\nsnippet blockquote\\n\\\n\t{% blockquote %}\\n\\\n\t${1:quote}\\n\\\n\t{% endblockquote %}\\n\\\n\\n\\\nsnippet blockquote-author\\n\\\n\t{% blockquote ${1:author}, ${2:title} %}\\n\\\n\t${3:quote}\\n\\\n\t{% endblockquote %}\\n\\\n\\n\\\nsnippet blockquote-link\\n\\\n\t{% blockquote ${1:author} ${2:URL} ${3:link_text} %}\\n\\\n\t${4:quote}\\n\\\n\t{% endblockquote %}\\n\\\n\\n\\\nsnippet bt-codeblock-short\\n\\\n\t```\\n\\\n\t${1:code_snippet}\\n\\\n\t```\\n\\\n\\n\\\nsnippet bt-codeblock-full\\n\\\n\t``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\\n\\\n\t${5:code_snippet}\\n\\\n\t```\\n\\\n\\n\\\nsnippet codeblock-short\\n\\\n\t{% codeblock %}\\n\\\n\t${1:code_snippet}\\n\\\n\t{% endcodeblock %}\\n\\\n\\n\\\nsnippet codeblock-full\\n\\\n\t{% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\\n\\\n\t${5:code_snippet}\\n\\\n\t{% endcodeblock %}\\n\\\n\\n\\\nsnippet gist-full\\n\\\n\t{% gist ${1:gist_id} ${2:filename} %}\\n\\\n\\n\\\nsnippet gist-short\\n\\\n\t{% gist ${1:gist_id} %}\\n\\\n\\n\\\nsnippet img\\n\\\n\t{% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\\n\\\n\\n\\\nsnippet youtube\\n\\\n\t{% youtube ${1:video_id} %}\\n\\\n\\n\\\n# The quote should appear only once in the text. It is inherently part of it.\\n\\\n# See http://octopress.org/docs/plugins/pullquote/ for more info.\\n\\\n\\n\\\nsnippet pullquote\\n\\\n\t{% pullquote %}\\n\\\n\t${1:text} {\\\" ${2:quote} \\\"} ${3:text}\\n\\\n\t{% endpullquote %}\\n\\\n\";\nexports.scope = \"markdown\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/php-inline.js",
    "content": "ace.define(\"ace/snippets/php\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet <?\\n\\\n\t<?php\\n\\\n\\n\\\n\t${1}\\n\\\nsnippet ec\\n\\\n\techo ${1};\\n\\\nsnippet <?e\\n\\\n\t<?php echo ${1} ?>\\n\\\n# this one is for php5.4\\n\\\nsnippet <?=\\n\\\n\t<?=${1}?>\\n\\\nsnippet ns\\n\\\n\tnamespace ${1:Foo\\\\Bar\\\\Baz};\\n\\\n\t${2}\\n\\\nsnippet use\\n\\\n\tuse ${1:Foo\\\\Bar\\\\Baz};\\n\\\n\t${2}\\n\\\nsnippet c\\n\\\n\t${1:abstract }class ${2:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet i\\n\\\n\tinterface ${1:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet t.\\n\\\n\t$this->${1}\\n\\\nsnippet f\\n\\\n\tfunction ${1:foo}(${2:array }${3:$bar})\\n\\\n\t{\\n\\\n\t\t${4}\\n\\\n\t}\\n\\\n# method\\n\\\nsnippet m\\n\\\n\t${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\\n\\\n\t{\\n\\\n\t\t${7}\\n\\\n\t}\\n\\\n# setter method\\n\\\nsnippet sm \\n\\\n\t/**\\n\\\n\t * Sets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @param ${2:$1} $$1 ${3:description}\\n\\\n\t *\\n\\\n\t * @return ${4:$FILENAME}\\n\\\n\t */\\n\\\n\t${5:public} function set${6:$2}(${7:$2 }$$1)\\n\\\n\t{\\n\\\n\t\t$this->${8:$1} = $$1;\\n\\\n\t\treturn $this;\\n\\\n\t}${9}\\n\\\n# getter method\\n\\\nsnippet gm\\n\\\n\t/**\\n\\\n\t * Gets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @return ${2:$1}\\n\\\n\t */\\n\\\n\t${3:public} function get${4:$2}()\\n\\\n\t{\\n\\\n\t\treturn $this->${5:$1};\\n\\\n\t}${6}\\n\\\n#setter\\n\\\nsnippet $s\\n\\\n\t${1:$foo}->set${2:Bar}(${3});\\n\\\n#getter\\n\\\nsnippet $g\\n\\\n\t${1:$foo}->get${2:Bar}();\\n\\\n\\n\\\n# Tertiary conditional\\n\\\nsnippet =?:\\n\\\n\t$${1:foo} = ${2:true} ? ${3:a} : ${4};\\n\\\nsnippet ?:\\n\\\n\t${1:true} ? ${2:a} : ${3}\\n\\\n\\n\\\nsnippet C\\n\\\n\t$_COOKIE['${1:variable}']${2}\\n\\\nsnippet E\\n\\\n\t$_ENV['${1:variable}']${2}\\n\\\nsnippet F\\n\\\n\t$_FILES['${1:variable}']${2}\\n\\\nsnippet G\\n\\\n\t$_GET['${1:variable}']${2}\\n\\\nsnippet P\\n\\\n\t$_POST['${1:variable}']${2}\\n\\\nsnippet R\\n\\\n\t$_REQUEST['${1:variable}']${2}\\n\\\nsnippet S\\n\\\n\t$_SERVER['${1:variable}']${2}\\n\\\nsnippet SS\\n\\\n\t$_SESSION['${1:variable}']${2}\\n\\\n\t\\n\\\n# the following are old ones\\n\\\nsnippet inc\\n\\\n\tinclude '${1:file}';${2}\\n\\\nsnippet inc1\\n\\\n\tinclude_once '${1:file}';${2}\\n\\\nsnippet req\\n\\\n\trequire '${1:file}';${2}\\n\\\nsnippet req1\\n\\\n\trequire_once '${1:file}';${2}\\n\\\n# Start Docblock\\n\\\nsnippet /*\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n# Class - post doc\\n\\\nsnippet doc_cp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${2:default}\\n\\\n\t * @subpackage ${3:default}\\n\\\n\t * @author ${4:`g:snips_author`}\\n\\\n\t */${5}\\n\\\n# Class Variable - post doc\\n\\\nsnippet doc_vp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented class variable}\\n\\\n\t *\\n\\\n\t * @var ${2:string}\\n\\\n\t */${3}\\n\\\n# Class Variable\\n\\\nsnippet doc_v\\n\\\n\t/**\\n\\\n\t * ${3:undocumented class variable}\\n\\\n\t *\\n\\\n\t * @var ${4:string}\\n\\\n\t */\\n\\\n\t${1:var} $${2};${5}\\n\\\n# Class\\n\\\nsnippet doc_c\\n\\\n\t/**\\n\\\n\t * ${3:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${4:default}\\n\\\n\t * @subpackage ${5:default}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1:}class ${2:}\\n\\\n\t{\\n\\\n\t\t${7}\\n\\\n\t} // END $1class $2\\n\\\n# Constant Definition - post doc\\n\\\nsnippet doc_dp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented constant}\\n\\\n\t */${2}\\n\\\n# Constant Definition\\n\\\nsnippet doc_d\\n\\\n\t/**\\n\\\n\t * ${3:undocumented constant}\\n\\\n\t */\\n\\\n\tdefine(${1}, ${2});${4}\\n\\\n# Function - post doc\\n\\\nsnippet doc_fp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${2:void}\\n\\\n\t * @author ${3:`g:snips_author`}\\n\\\n\t */${4}\\n\\\n# Function signature\\n\\\nsnippet doc_s\\n\\\n\t/**\\n\\\n\t * ${4:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${5:void}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1}function ${2}(${3});${7}\\n\\\n# Function\\n\\\nsnippet doc_f\\n\\\n\t/**\\n\\\n\t * ${4:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${5:void}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1}function ${2}(${3})\\n\\\n\t{${7}\\n\\\n\t}\\n\\\n# Header\\n\\\nsnippet doc_h\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t *\\n\\\n\t * @author ${2:`g:snips_author`}\\n\\\n\t * @version ${3:$Id$}\\n\\\n\t * @copyright ${4:$2}, `strftime('%d %B, %Y')`\\n\\\n\t * @package ${5:default}\\n\\\n\t */\\n\\\n\t\\n\\\n# Interface\\n\\\nsnippet interface\\n\\\n\t/**\\n\\\n\t * ${2:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${3:default}\\n\\\n\t * @author ${4:`g:snips_author`}\\n\\\n\t */\\n\\\n\tinterface ${1:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${5}\\n\\\n\t}\\n\\\n# class ...\\n\\\nsnippet class\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n\tclass ${2:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${3}\\n\\\n\t\t/**\\n\\\n\t\t * ${4}\\n\\\n\t\t */\\n\\\n\t\t${5:public} function ${6:__construct}(${7:argument})\\n\\\n\t\t{\\n\\\n\t\t\t${8:// code...}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n# define(...)\\n\\\nsnippet def\\n\\\n\tdefine('${1}'${2});${3}\\n\\\n# defined(...)\\n\\\nsnippet def?\\n\\\n\t${1}defined('${2}')${3}\\n\\\nsnippet wh\\n\\\n\twhile (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\n# do ... while\\n\\\nsnippet do\\n\\\n\tdo {\\n\\\n\t\t${2:// code... }\\n\\\n\t} while (${1:/* condition */});\\n\\\nsnippet if\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\nsnippet ifil\\n\\\n\t<?php if (${1:/* condition */}): ?>\\n\\\n\t\t${2:<!-- code... -->}\\n\\\n\t<?php endif; ?>\\n\\\nsnippet ife\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t} else {\\n\\\n\t\t${3:// code...}\\n\\\n\t}\\n\\\n\t${4}\\n\\\nsnippet ifeil\\n\\\n\t<?php if (${1:/* condition */}): ?>\\n\\\n\t\t${2:<!-- html... -->}\\n\\\n\t<?php else: ?>\\n\\\n\t\t${3:<!-- html... -->}\\n\\\n\t<?php endif; ?>\\n\\\n\t${4}\\n\\\nsnippet else\\n\\\n\telse {\\n\\\n\t\t${1:// code...}\\n\\\n\t}\\n\\\nsnippet elseif\\n\\\n\telseif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\nsnippet switch\\n\\\n\tswitch ($${1:variable}) {\\n\\\n\t\tcase '${2:value}':\\n\\\n\t\t\t${3:// code...}\\n\\\n\t\t\tbreak;\\n\\\n\t\t${5}\\n\\\n\t\tdefault:\\n\\\n\t\t\t${4:// code...}\\n\\\n\t\t\tbreak;\\n\\\n\t}\\n\\\nsnippet case\\n\\\n\tcase '${1:value}':\\n\\\n\t\t${2:// code...}\\n\\\n\t\tbreak;${3}\\n\\\nsnippet for\\n\\\n\tfor ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\\\n\t\t${4: // code...}\\n\\\n\t}\\n\\\nsnippet foreach\\n\\\n\tforeach ($${1:variable} as $${2:value}) {\\n\\\n\t\t${3:// code...}\\n\\\n\t}\\n\\\nsnippet foreachil\\n\\\n\t<?php foreach ($${1:variable} as $${2:value}): ?>\\n\\\n\t\t${3:<!-- html... -->}\\n\\\n\t<?php endforeach; ?>\\n\\\nsnippet foreachk\\n\\\n\tforeach ($${1:variable} as $${2:key} => $${3:value}) {\\n\\\n\t\t${4:// code...}\\n\\\n\t}\\n\\\nsnippet foreachkil\\n\\\n\t<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?>\\n\\\n\t\t${4:<!-- html... -->}\\n\\\n\t<?php endforeach; ?>\\n\\\n# $... = array (...)\\n\\\nsnippet array\\n\\\n\t$${1:arrayName} = array('${2}' => ${3});${4}\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${2}\\n\\\n\t} catch (${1:Exception} $e) {\\n\\\n\t}\\n\\\n# lambda with closure\\n\\\nsnippet lambda\\n\\\n\t${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\\n\\\n\t\t${4}\\n\\\n\t};\\n\\\n# pre_dump();\\n\\\nsnippet pd\\n\\\n\techo '<pre>'; var_dump(${1}); echo '</pre>';\\n\\\n# pre_dump(); die();\\n\\\nsnippet pdd\\n\\\n\techo '<pre>'; var_dump(${1}); echo '</pre>'; die(${2:});\\n\\\nsnippet vd\\n\\\n\tvar_dump(${1});\\n\\\nsnippet vdd\\n\\\n\tvar_dump(${1}); die(${2:});\\n\\\nsnippet http_redirect\\n\\\n\theader (\\\"HTTP/1.1 301 Moved Permanently\\\"); \\n\\\n\theader (\\\"Location: \\\".URL); \\n\\\n\texit();\\n\\\n# Getters & Setters\\n\\\nsnippet gs\\n\\\n\t/**\\n\\\n\t * Gets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @return ${2:$1}\\n\\\n\t */\\n\\\n\tpublic function get${3:$2}()\\n\\\n\t{\\n\\\n\t\treturn $this->${4:$1};\\n\\\n\t}\\n\\\n\\n\\\n\t/**\\n\\\n\t * Sets the value of $1\\n\\\n\t *\\n\\\n\t * @param $2 $$1 ${5:description}\\n\\\n\t *\\n\\\n\t * @return ${6:$FILENAME}\\n\\\n\t */\\n\\\n\tpublic function set$3(${7:$2 }$$1)\\n\\\n\t{\\n\\\n\t\t$this->$4 = $$1;\\n\\\n\t\treturn $this;\\n\\\n\t}${8}\\n\\\n# anotation, get, and set, useful for doctrine\\n\\\nsnippet ags\\n\\\n\t/**\\n\\\n\t * ${1:description}\\n\\\n\t * \\n\\\n\t * @${7}\\n\\\n\t */\\n\\\n\t${2:protected} $${3:foo};\\n\\\n\\n\\\n\tpublic function get${4:$3}()\\n\\\n\t{\\n\\\n\t\treturn $this->$3;\\n\\\n\t}\\n\\\n\\n\\\n\tpublic function set$4(${5:$4 }$${6:$3})\\n\\\n\t{\\n\\\n\t\t$this->$3 = $$6;\\n\\\n\t\treturn $this;\\n\\\n\t}\\n\\\nsnippet rett\\n\\\n\treturn true;\\n\\\nsnippet retf\\n\\\n\treturn false;\\n\\\n\";\nexports.scope = \"php\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/php.js",
    "content": "ace.define(\"ace/snippets/php\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText = \"snippet <?\\n\\\n\t<?php\\n\\\n\\n\\\n\t${1}\\n\\\nsnippet ec\\n\\\n\techo ${1};\\n\\\nsnippet <?e\\n\\\n\t<?php echo ${1} ?>\\n\\\n# this one is for php5.4\\n\\\nsnippet <?=\\n\\\n\t<?=${1}?>\\n\\\nsnippet ns\\n\\\n\tnamespace ${1:Foo\\\\Bar\\\\Baz};\\n\\\n\t${2}\\n\\\nsnippet use\\n\\\n\tuse ${1:Foo\\\\Bar\\\\Baz};\\n\\\n\t${2}\\n\\\nsnippet c\\n\\\n\t${1:abstract }class ${2:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${3}\\n\\\n\t}\\n\\\nsnippet i\\n\\\n\tinterface ${1:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${2}\\n\\\n\t}\\n\\\nsnippet t.\\n\\\n\t$this->${1}\\n\\\nsnippet f\\n\\\n\tfunction ${1:foo}(${2:array }${3:$bar})\\n\\\n\t{\\n\\\n\t\t${4}\\n\\\n\t}\\n\\\n# method\\n\\\nsnippet m\\n\\\n\t${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\\n\\\n\t{\\n\\\n\t\t${7}\\n\\\n\t}\\n\\\n# setter method\\n\\\nsnippet sm \\n\\\n\t/**\\n\\\n\t * Sets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @param ${2:$1} $$1 ${3:description}\\n\\\n\t *\\n\\\n\t * @return ${4:$FILENAME}\\n\\\n\t */\\n\\\n\t${5:public} function set${6:$2}(${7:$2 }$$1)\\n\\\n\t{\\n\\\n\t\t$this->${8:$1} = $$1;\\n\\\n\t\treturn $this;\\n\\\n\t}${9}\\n\\\n# getter method\\n\\\nsnippet gm\\n\\\n\t/**\\n\\\n\t * Gets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @return ${2:$1}\\n\\\n\t */\\n\\\n\t${3:public} function get${4:$2}()\\n\\\n\t{\\n\\\n\t\treturn $this->${5:$1};\\n\\\n\t}${6}\\n\\\n#setter\\n\\\nsnippet $s\\n\\\n\t${1:$foo}->set${2:Bar}(${3});\\n\\\n#getter\\n\\\nsnippet $g\\n\\\n\t${1:$foo}->get${2:Bar}();\\n\\\n\\n\\\n# Tertiary conditional\\n\\\nsnippet =?:\\n\\\n\t$${1:foo} = ${2:true} ? ${3:a} : ${4};\\n\\\nsnippet ?:\\n\\\n\t${1:true} ? ${2:a} : ${3}\\n\\\n\\n\\\nsnippet C\\n\\\n\t$_COOKIE['${1:variable}']${2}\\n\\\nsnippet E\\n\\\n\t$_ENV['${1:variable}']${2}\\n\\\nsnippet F\\n\\\n\t$_FILES['${1:variable}']${2}\\n\\\nsnippet G\\n\\\n\t$_GET['${1:variable}']${2}\\n\\\nsnippet P\\n\\\n\t$_POST['${1:variable}']${2}\\n\\\nsnippet R\\n\\\n\t$_REQUEST['${1:variable}']${2}\\n\\\nsnippet S\\n\\\n\t$_SERVER['${1:variable}']${2}\\n\\\nsnippet SS\\n\\\n\t$_SESSION['${1:variable}']${2}\\n\\\n\t\\n\\\n# the following are old ones\\n\\\nsnippet inc\\n\\\n\tinclude '${1:file}';${2}\\n\\\nsnippet inc1\\n\\\n\tinclude_once '${1:file}';${2}\\n\\\nsnippet req\\n\\\n\trequire '${1:file}';${2}\\n\\\nsnippet req1\\n\\\n\trequire_once '${1:file}';${2}\\n\\\n# Start Docblock\\n\\\nsnippet /*\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n# Class - post doc\\n\\\nsnippet doc_cp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${2:default}\\n\\\n\t * @subpackage ${3:default}\\n\\\n\t * @author ${4:`g:snips_author`}\\n\\\n\t */${5}\\n\\\n# Class Variable - post doc\\n\\\nsnippet doc_vp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented class variable}\\n\\\n\t *\\n\\\n\t * @var ${2:string}\\n\\\n\t */${3}\\n\\\n# Class Variable\\n\\\nsnippet doc_v\\n\\\n\t/**\\n\\\n\t * ${3:undocumented class variable}\\n\\\n\t *\\n\\\n\t * @var ${4:string}\\n\\\n\t */\\n\\\n\t${1:var} $${2};${5}\\n\\\n# Class\\n\\\nsnippet doc_c\\n\\\n\t/**\\n\\\n\t * ${3:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${4:default}\\n\\\n\t * @subpackage ${5:default}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1:}class ${2:}\\n\\\n\t{\\n\\\n\t\t${7}\\n\\\n\t} // END $1class $2\\n\\\n# Constant Definition - post doc\\n\\\nsnippet doc_dp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented constant}\\n\\\n\t */${2}\\n\\\n# Constant Definition\\n\\\nsnippet doc_d\\n\\\n\t/**\\n\\\n\t * ${3:undocumented constant}\\n\\\n\t */\\n\\\n\tdefine(${1}, ${2});${4}\\n\\\n# Function - post doc\\n\\\nsnippet doc_fp\\n\\\n\t/**\\n\\\n\t * ${1:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${2:void}\\n\\\n\t * @author ${3:`g:snips_author`}\\n\\\n\t */${4}\\n\\\n# Function signature\\n\\\nsnippet doc_s\\n\\\n\t/**\\n\\\n\t * ${4:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${5:void}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1}function ${2}(${3});${7}\\n\\\n# Function\\n\\\nsnippet doc_f\\n\\\n\t/**\\n\\\n\t * ${4:undocumented function}\\n\\\n\t *\\n\\\n\t * @return ${5:void}\\n\\\n\t * @author ${6:`g:snips_author`}\\n\\\n\t */\\n\\\n\t${1}function ${2}(${3})\\n\\\n\t{${7}\\n\\\n\t}\\n\\\n# Header\\n\\\nsnippet doc_h\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t *\\n\\\n\t * @author ${2:`g:snips_author`}\\n\\\n\t * @version ${3:$Id$}\\n\\\n\t * @copyright ${4:$2}, `strftime('%d %B, %Y')`\\n\\\n\t * @package ${5:default}\\n\\\n\t */\\n\\\n\t\\n\\\n# Interface\\n\\\nsnippet interface\\n\\\n\t/**\\n\\\n\t * ${2:undocumented class}\\n\\\n\t *\\n\\\n\t * @package ${3:default}\\n\\\n\t * @author ${4:`g:snips_author`}\\n\\\n\t */\\n\\\n\tinterface ${1:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${5}\\n\\\n\t}\\n\\\n# class ...\\n\\\nsnippet class\\n\\\n\t/**\\n\\\n\t * ${1}\\n\\\n\t */\\n\\\n\tclass ${2:$FILENAME}\\n\\\n\t{\\n\\\n\t\t${3}\\n\\\n\t\t/**\\n\\\n\t\t * ${4}\\n\\\n\t\t */\\n\\\n\t\t${5:public} function ${6:__construct}(${7:argument})\\n\\\n\t\t{\\n\\\n\t\t\t${8:// code...}\\n\\\n\t\t}\\n\\\n\t}\\n\\\n# define(...)\\n\\\nsnippet def\\n\\\n\tdefine('${1}'${2});${3}\\n\\\n# defined(...)\\n\\\nsnippet def?\\n\\\n\t${1}defined('${2}')${3}\\n\\\nsnippet wh\\n\\\n\twhile (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\n# do ... while\\n\\\nsnippet do\\n\\\n\tdo {\\n\\\n\t\t${2:// code... }\\n\\\n\t} while (${1:/* condition */});\\n\\\nsnippet if\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\nsnippet ifil\\n\\\n\t<?php if (${1:/* condition */}): ?>\\n\\\n\t\t${2:<!-- code... -->}\\n\\\n\t<?php endif; ?>\\n\\\nsnippet ife\\n\\\n\tif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t} else {\\n\\\n\t\t${3:// code...}\\n\\\n\t}\\n\\\n\t${4}\\n\\\nsnippet ifeil\\n\\\n\t<?php if (${1:/* condition */}): ?>\\n\\\n\t\t${2:<!-- html... -->}\\n\\\n\t<?php else: ?>\\n\\\n\t\t${3:<!-- html... -->}\\n\\\n\t<?php endif; ?>\\n\\\n\t${4}\\n\\\nsnippet else\\n\\\n\telse {\\n\\\n\t\t${1:// code...}\\n\\\n\t}\\n\\\nsnippet elseif\\n\\\n\telseif (${1:/* condition */}) {\\n\\\n\t\t${2:// code...}\\n\\\n\t}\\n\\\nsnippet switch\\n\\\n\tswitch ($${1:variable}) {\\n\\\n\t\tcase '${2:value}':\\n\\\n\t\t\t${3:// code...}\\n\\\n\t\t\tbreak;\\n\\\n\t\t${5}\\n\\\n\t\tdefault:\\n\\\n\t\t\t${4:// code...}\\n\\\n\t\t\tbreak;\\n\\\n\t}\\n\\\nsnippet case\\n\\\n\tcase '${1:value}':\\n\\\n\t\t${2:// code...}\\n\\\n\t\tbreak;${3}\\n\\\nsnippet for\\n\\\n\tfor ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\\\n\t\t${4: // code...}\\n\\\n\t}\\n\\\nsnippet foreach\\n\\\n\tforeach ($${1:variable} as $${2:value}) {\\n\\\n\t\t${3:// code...}\\n\\\n\t}\\n\\\nsnippet foreachil\\n\\\n\t<?php foreach ($${1:variable} as $${2:value}): ?>\\n\\\n\t\t${3:<!-- html... -->}\\n\\\n\t<?php endforeach; ?>\\n\\\nsnippet foreachk\\n\\\n\tforeach ($${1:variable} as $${2:key} => $${3:value}) {\\n\\\n\t\t${4:// code...}\\n\\\n\t}\\n\\\nsnippet foreachkil\\n\\\n\t<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?>\\n\\\n\t\t${4:<!-- html... -->}\\n\\\n\t<?php endforeach; ?>\\n\\\n# $... = array (...)\\n\\\nsnippet array\\n\\\n\t$${1:arrayName} = array('${2}' => ${3});${4}\\n\\\nsnippet try\\n\\\n\ttry {\\n\\\n\t\t${2}\\n\\\n\t} catch (${1:Exception} $e) {\\n\\\n\t}\\n\\\n# lambda with closure\\n\\\nsnippet lambda\\n\\\n\t${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\\n\\\n\t\t${4}\\n\\\n\t};\\n\\\n# pre_dump();\\n\\\nsnippet pd\\n\\\n\techo '<pre>'; var_dump(${1}); echo '</pre>';\\n\\\n# pre_dump(); die();\\n\\\nsnippet pdd\\n\\\n\techo '<pre>'; var_dump(${1}); echo '</pre>'; die(${2:});\\n\\\nsnippet vd\\n\\\n\tvar_dump(${1});\\n\\\nsnippet vdd\\n\\\n\tvar_dump(${1}); die(${2:});\\n\\\nsnippet http_redirect\\n\\\n\theader (\\\"HTTP/1.1 301 Moved Permanently\\\"); \\n\\\n\theader (\\\"Location: \\\".URL); \\n\\\n\texit();\\n\\\n# Getters & Setters\\n\\\nsnippet gs\\n\\\n\t/**\\n\\\n\t * Gets the value of ${1:foo}\\n\\\n\t *\\n\\\n\t * @return ${2:$1}\\n\\\n\t */\\n\\\n\tpublic function get${3:$2}()\\n\\\n\t{\\n\\\n\t\treturn $this->${4:$1};\\n\\\n\t}\\n\\\n\\n\\\n\t/**\\n\\\n\t * Sets the value of $1\\n\\\n\t *\\n\\\n\t * @param $2 $$1 ${5:description}\\n\\\n\t *\\n\\\n\t * @return ${6:$FILENAME}\\n\\\n\t */\\n\\\n\tpublic function set$3(${7:$2 }$$1)\\n\\\n\t{\\n\\\n\t\t$this->$4 = $$1;\\n\\\n\t\treturn $this;\\n\\\n\t}${8}\\n\\\n# anotation, get, and set, useful for doctrine\\n\\\nsnippet ags\\n\\\n\t/**\\n\\\n\t * ${1:description}\\n\\\n\t * \\n\\\n\t * @${7}\\n\\\n\t */\\n\\\n\t${2:protected} $${3:foo};\\n\\\n\\n\\\n\tpublic function get${4:$3}()\\n\\\n\t{\\n\\\n\t\treturn $this->$3;\\n\\\n\t}\\n\\\n\\n\\\n\tpublic function set$4(${5:$4 }$${6:$3})\\n\\\n\t{\\n\\\n\t\t$this->$3 = $$6;\\n\\\n\t\treturn $this;\\n\\\n\t}\\n\\\nsnippet rett\\n\\\n\treturn true;\\n\\\nsnippet retf\\n\\\n\treturn false;\\n\\\n\";\nexports.scope = \"php\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/plain_text.js",
    "content": "ace.define(\"ace/snippets/plain_text\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"plain_text\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/sass.js",
    "content": "ace.define(\"ace/snippets/sass\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"sass\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/scss.js",
    "content": "ace.define(\"ace/snippets/scss\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"scss\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/text.js",
    "content": "ace.define(\"ace/snippets/text\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"text\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/twig.js",
    "content": "ace.define(\"ace/snippets/twig\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"twig\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/yaml.js",
    "content": "ace.define(\"ace/snippets/yaml\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.snippetText =undefined;\nexports.scope = \"yaml\";\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-ambiance.js",
    "content": "ace.define(\"ace/theme/ambiance\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-ambiance\";\nexports.cssText = \".ace-ambiance .ace_gutter {\\\nbackground-color: #3d3d3d;\\\nbackground-image: -moz-linear-gradient(left, #3D3D3D, #333);\\\nbackground-image: -ms-linear-gradient(left, #3D3D3D, #333);\\\nbackground-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3D3D3D), to(#333));\\\nbackground-image: -webkit-linear-gradient(left, #3D3D3D, #333);\\\nbackground-image: -o-linear-gradient(left, #3D3D3D, #333);\\\nbackground-image: linear-gradient(left, #3D3D3D, #333);\\\nbackground-repeat: repeat-x;\\\nborder-right: 1px solid #4d4d4d;\\\ntext-shadow: 0px 1px 1px #4d4d4d;\\\ncolor: #222;\\\n}\\\n.ace-ambiance .ace_gutter-layer {\\\nbackground: repeat left top;\\\n}\\\n.ace-ambiance .ace_gutter-active-line {\\\nbackground-color: #3F3F3F;\\\n}\\\n.ace-ambiance .ace_fold-widget {\\\ntext-align: center;\\\n}\\\n.ace-ambiance .ace_fold-widget:hover {\\\ncolor: #777;\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_start,\\\n.ace-ambiance .ace_fold-widget.ace_end,\\\n.ace-ambiance .ace_fold-widget.ace_closed{\\\nbackground: none;\\\nborder: none;\\\nbox-shadow: none;\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_start:after {\\\ncontent: '▾'\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_end:after {\\\ncontent: '▴'\\\n}\\\n.ace-ambiance .ace_fold-widget.ace_closed:after {\\\ncontent: '‣'\\\n}\\\n.ace-ambiance .ace_print-margin {\\\nborder-left: 1px dotted #2D2D2D;\\\nright: 0;\\\nbackground: #262626;\\\n}\\\n.ace-ambiance .ace_scroller {\\\n-webkit-box-shadow: inset 0 0 10px black;\\\n-moz-box-shadow: inset 0 0 10px black;\\\n-o-box-shadow: inset 0 0 10px black;\\\nbox-shadow: inset 0 0 10px black;\\\n}\\\n.ace-ambiance {\\\ncolor: #E6E1DC;\\\nbackground-color: #202020;\\\n}\\\n.ace-ambiance .ace_cursor {\\\nborder-left: 1px solid #7991E8;\\\n}\\\n.ace-ambiance .ace_overwrite-cursors .ace_cursor {\\\nborder: 1px solid #FFE300;\\\nbackground: #766B13;\\\n}\\\n.ace-ambiance.normal-mode .ace_cursor-layer {\\\nz-index: 0;\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_selected-word {\\\nborder-radius: 4px;\\\nborder: 8px solid #3f475d;\\\nbox-shadow: 0 0 4px black;\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25);\\\n}\\\n.ace-ambiance .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031);\\\n}\\\n.ace-ambiance .ace_invisible {\\\ncolor: #333;\\\n}\\\n.ace-ambiance .ace_paren {\\\ncolor: #24C2C7;\\\n}\\\n.ace-ambiance .ace_keyword {\\\ncolor: #cda869;\\\n}\\\n.ace-ambiance .ace_keyword.ace_operator {\\\ncolor: #fa8d6a;\\\n}\\\n.ace-ambiance .ace_punctuation.ace_operator {\\\ncolor: #fa8d6a;\\\n}\\\n.ace-ambiance .ace_identifier {\\\n}\\\n.ace-ambiance .ace-statement {\\\ncolor: #cda869;\\\n}\\\n.ace-ambiance .ace_constant {\\\ncolor: #CF7EA9;\\\n}\\\n.ace-ambiance .ace_constant.ace_language {\\\ncolor: #CF7EA9;\\\n}\\\n.ace-ambiance .ace_constant.ace_library {\\\n}\\\n.ace-ambiance .ace_constant.ace_numeric {\\\ncolor: #78CF8A;\\\n}\\\n.ace-ambiance .ace_invalid {\\\ntext-decoration: underline;\\\n}\\\n.ace-ambiance .ace_invalid.ace_illegal {\\\ncolor:#F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75);\\\n}\\\n.ace-ambiance .ace_invalid,\\\n.ace-ambiance .ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1;\\\n}\\\n.ace-ambiance .ace_support {\\\ncolor: #9B859D;\\\n}\\\n.ace-ambiance .ace_support.ace_function {\\\ncolor: #DAD085;\\\n}\\\n.ace-ambiance .ace_function.ace_buildin {\\\ncolor: #9b859d;\\\n}\\\n.ace-ambiance .ace_string {\\\ncolor: #8f9d6a;\\\n}\\\n.ace-ambiance .ace_string.ace_regexp {\\\ncolor: #DAD085;\\\n}\\\n.ace-ambiance .ace_comment {\\\nfont-style: italic;\\\ncolor: #555;\\\n}\\\n.ace-ambiance .ace_comment.ace_doc {\\\n}\\\n.ace-ambiance .ace_comment.ace_doc.ace_tag {\\\ncolor: #666;\\\nfont-style: normal;\\\n}\\\n.ace-ambiance .ace_definition,\\\n.ace-ambiance .ace_type {\\\ncolor: #aac6e3;\\\n}\\\n.ace-ambiance .ace_variable {\\\ncolor: #9999cc;\\\n}\\\n.ace-ambiance .ace_variable.ace_language {\\\ncolor: #9b859d;\\\n}\\\n.ace-ambiance .ace_xml-pe {\\\ncolor: #494949;\\\n}\\\n.ace-ambiance .ace_gutter-layer,\\\n.ace-ambiance .ace_text-layer {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace-ambiance .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-chaos.js",
    "content": "ace.define(\"ace/theme/chaos\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-chaos\";\nexports.cssText = \".ace-chaos .ace_gutter {\\\nbackground: #141414;\\\ncolor: #595959;\\\nborder-right: 1px solid #282828;\\\n}\\\n.ace-chaos .ace_gutter-cell.ace_warning {\\\nbackground-image: none;\\\nbackground: #FC0;\\\nborder-left: none;\\\npadding-left: 0;\\\ncolor: #000;\\\n}\\\n.ace-chaos .ace_gutter-cell.ace_error {\\\nbackground-position: -6px center;\\\nbackground-image: none;\\\nbackground: #F10;\\\nborder-left: none;\\\npadding-left: 0;\\\ncolor: #000;\\\n}\\\n.ace-chaos .ace_print-margin {\\\nborder-left: 1px solid #555;\\\nright: 0;\\\nbackground: #1D1D1D;\\\n}\\\n.ace-chaos {\\\nbackground-color: #161616;\\\ncolor: #E6E1DC;\\\n}\\\n.ace-chaos .ace_cursor {\\\nborder-left: 2px solid #FFFFFF;\\\n}\\\n.ace-chaos .ace_cursor.ace_overwrite {\\\nborder-left: 0px;\\\nborder-bottom: 1px solid #FFFFFF;\\\n}\\\n.ace-chaos .ace_marker-layer .ace_selection {\\\nbackground: #494836;\\\n}\\\n.ace-chaos .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-chaos .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #FCE94F;\\\n}\\\n.ace-chaos .ace_marker-layer .ace_active-line {\\\nbackground: #333;\\\n}\\\n.ace-chaos .ace_gutter-active-line {\\\nbackground-color: #222;\\\n}\\\n.ace-chaos .ace_invisible {\\\ncolor: #404040;\\\n}\\\n.ace-chaos .ace_keyword {\\\ncolor:#00698F;\\\n}\\\n.ace-chaos .ace_keyword.ace_operator {\\\ncolor:#FF308F;\\\n}\\\n.ace-chaos .ace_constant {\\\ncolor:#1EDAFB;\\\n}\\\n.ace-chaos .ace_constant.ace_language {\\\ncolor:#FDC251;\\\n}\\\n.ace-chaos .ace_constant.ace_library {\\\ncolor:#8DFF0A;\\\n}\\\n.ace-chaos .ace_constant.ace_numeric {\\\ncolor:#58C554;\\\n}\\\n.ace-chaos .ace_invalid {\\\ncolor:#FFFFFF;\\\nbackground-color:#990000;\\\n}\\\n.ace-chaos .ace_invalid.ace_deprecated {\\\ncolor:#FFFFFF;\\\nbackground-color:#990000;\\\n}\\\n.ace-chaos .ace_support {\\\ncolor: #999;\\\n}\\\n.ace-chaos .ace_support.ace_function {\\\ncolor:#00AEEF;\\\n}\\\n.ace-chaos .ace_function {\\\ncolor:#00AEEF;\\\n}\\\n.ace-chaos .ace_string {\\\ncolor:#58C554;\\\n}\\\n.ace-chaos .ace_comment {\\\ncolor:#555;\\\nfont-style:italic;\\\npadding-bottom: 0px;\\\n}\\\n.ace-chaos .ace_variable {\\\ncolor:#997744;\\\n}\\\n.ace-chaos .ace_meta.ace_tag {\\\ncolor:#BE53E6;\\\n}\\\n.ace-chaos .ace_entity.ace_other.ace_attribute-name {\\\ncolor:#FFFF89;\\\n}\\\n.ace-chaos .ace_markup.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace-chaos .ace_fold-widget {\\\ntext-align: center;\\\n}\\\n.ace-chaos .ace_fold-widget:hover {\\\ncolor: #777;\\\n}\\\n.ace-chaos .ace_fold-widget.ace_start,\\\n.ace-chaos .ace_fold-widget.ace_end,\\\n.ace-chaos .ace_fold-widget.ace_closed{\\\nbackground: none;\\\nborder: none;\\\nbox-shadow: none;\\\n}\\\n.ace-chaos .ace_fold-widget.ace_start:after {\\\ncontent: '▾'\\\n}\\\n.ace-chaos .ace_fold-widget.ace_end:after {\\\ncontent: '▴'\\\n}\\\n.ace-chaos .ace_fold-widget.ace_closed:after {\\\ncontent: '‣'\\\n}\\\n.ace-chaos .ace_indent-guide {\\\nborder-right:1px dotted #333;\\\nmargin-right:-1px;\\\n}\\\n.ace-chaos .ace_fold { \\\nbackground: #222; \\\nborder-radius: 3px; \\\ncolor: #7AF; \\\nborder: none; \\\n}\\\n.ace-chaos .ace_fold:hover {\\\nbackground: #CCC; \\\ncolor: #000;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-chrome.js",
    "content": "ace.define(\"ace/theme/chrome\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-chrome\";\nexports.cssText = \".ace-chrome .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333;\\\noverflow : hidden;\\\n}\\\n.ace-chrome .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-chrome {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-chrome .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-chrome .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-chrome .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-chrome .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-chrome .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-chrome .ace_invalid {\\\nbackground-color: rgb(153, 0, 0);\\\ncolor: white;\\\n}\\\n.ace-chrome .ace_fold {\\\n}\\\n.ace-chrome .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-chrome .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-chrome .ace_support.ace_type,\\\n.ace-chrome .ace_support.ace_class\\\n.ace-chrome .ace_support.ace_other {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-chrome .ace_variable.ace_parameter {\\\nfont-style:italic;\\\ncolor:#FD971F;\\\n}\\\n.ace-chrome .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-chrome .ace_comment {\\\ncolor: #236e24;\\\n}\\\n.ace-chrome .ace_comment.ace_doc {\\\ncolor: #236e24;\\\n}\\\n.ace-chrome .ace_comment.ace_doc.ace_tag {\\\ncolor: #236e24;\\\n}\\\n.ace-chrome .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-chrome .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-chrome .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-chrome .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-chrome .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-chrome .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-chrome .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-chrome .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-chrome .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-chrome .ace_storage,\\\n.ace-chrome .ace_keyword,\\\n.ace-chrome .ace_meta.ace_tag {\\\ncolor: rgb(147, 15, 128);\\\n}\\\n.ace-chrome .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-chrome .ace_string {\\\ncolor: #1A1AA6;\\\n}\\\n.ace-chrome .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #994409;\\\n}\\\n.ace-chrome .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds.js",
    "content": "ace.define(\"ace/theme/clouds\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-clouds\";\nexports.cssText = \".ace-clouds .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333\\\n}\\\n.ace-clouds .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-clouds {\\\nbackground-color: #FFFFFF;\\\ncolor: #000000\\\n}\\\n.ace-clouds .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-clouds .ace_marker-layer .ace_selection {\\\nbackground: #BDD5FC\\\n}\\\n.ace-clouds.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-clouds .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-clouds .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #BFBFBF\\\n}\\\n.ace-clouds .ace_marker-layer .ace_active-line {\\\nbackground: #FFFBD1\\\n}\\\n.ace-clouds .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-clouds .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #BDD5FC\\\n}\\\n.ace-clouds .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-clouds .ace_keyword,\\\n.ace-clouds .ace_meta,\\\n.ace-clouds .ace_support.ace_constant.ace_property-value {\\\ncolor: #AF956F\\\n}\\\n.ace-clouds .ace_keyword.ace_operator {\\\ncolor: #484848\\\n}\\\n.ace-clouds .ace_keyword.ace_other.ace_unit {\\\ncolor: #96DC5F\\\n}\\\n.ace-clouds .ace_constant.ace_language {\\\ncolor: #39946A\\\n}\\\n.ace-clouds .ace_constant.ace_numeric {\\\ncolor: #46A609\\\n}\\\n.ace-clouds .ace_constant.ace_character.ace_entity {\\\ncolor: #BF78CC\\\n}\\\n.ace-clouds .ace_invalid {\\\nbackground-color: #FF002A\\\n}\\\n.ace-clouds .ace_fold {\\\nbackground-color: #AF956F;\\\nborder-color: #000000\\\n}\\\n.ace-clouds .ace_storage,\\\n.ace-clouds .ace_support.ace_class,\\\n.ace-clouds .ace_support.ace_function,\\\n.ace-clouds .ace_support.ace_other,\\\n.ace-clouds .ace_support.ace_type {\\\ncolor: #C52727\\\n}\\\n.ace-clouds .ace_string {\\\ncolor: #5D90CD\\\n}\\\n.ace-clouds .ace_comment {\\\ncolor: #BCC8BA\\\n}\\\n.ace-clouds .ace_entity.ace_name.ace_tag,\\\n.ace-clouds .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #606060\\\n}\\\n.ace-clouds .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds_midnight.js",
    "content": "ace.define(\"ace/theme/clouds_midnight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-clouds-midnight\";\nexports.cssText = \".ace-clouds-midnight .ace_gutter {\\\nbackground: #232323;\\\ncolor: #929292\\\n}\\\n.ace-clouds-midnight .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #232323\\\n}\\\n.ace-clouds-midnight {\\\nbackground-color: #191919;\\\ncolor: #929292\\\n}\\\n.ace-clouds-midnight .ace_cursor {\\\ncolor: #7DA5DC\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_selection {\\\nbackground: #000000\\\n}\\\n.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #191919;\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #BFBFBF\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_active-line {\\\nbackground: rgba(215, 215, 215, 0.031)\\\n}\\\n.ace-clouds-midnight .ace_gutter-active-line {\\\nbackground-color: rgba(215, 215, 215, 0.031)\\\n}\\\n.ace-clouds-midnight .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #000000\\\n}\\\n.ace-clouds-midnight .ace_invisible {\\\ncolor: #666\\\n}\\\n.ace-clouds-midnight .ace_keyword,\\\n.ace-clouds-midnight .ace_meta,\\\n.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {\\\ncolor: #927C5D\\\n}\\\n.ace-clouds-midnight .ace_keyword.ace_operator {\\\ncolor: #4B4B4B\\\n}\\\n.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {\\\ncolor: #366F1A\\\n}\\\n.ace-clouds-midnight .ace_constant.ace_language {\\\ncolor: #39946A\\\n}\\\n.ace-clouds-midnight .ace_constant.ace_numeric {\\\ncolor: #46A609\\\n}\\\n.ace-clouds-midnight .ace_constant.ace_character.ace_entity {\\\ncolor: #A165AC\\\n}\\\n.ace-clouds-midnight .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #E92E2E\\\n}\\\n.ace-clouds-midnight .ace_fold {\\\nbackground-color: #927C5D;\\\nborder-color: #929292\\\n}\\\n.ace-clouds-midnight .ace_storage,\\\n.ace-clouds-midnight .ace_support.ace_class,\\\n.ace-clouds-midnight .ace_support.ace_function,\\\n.ace-clouds-midnight .ace_support.ace_other,\\\n.ace-clouds-midnight .ace_support.ace_type {\\\ncolor: #E92E2E\\\n}\\\n.ace-clouds-midnight .ace_string {\\\ncolor: #5D90CD\\\n}\\\n.ace-clouds-midnight .ace_comment {\\\ncolor: #3C403B\\\n}\\\n.ace-clouds-midnight .ace_entity.ace_name.ace_tag,\\\n.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #606060\\\n}\\\n.ace-clouds-midnight .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-cobalt.js",
    "content": "ace.define(\"ace/theme/cobalt\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-cobalt\";\nexports.cssText = \".ace-cobalt .ace_gutter {\\\nbackground: #011e3a;\\\ncolor: rgb(128,145,160)\\\n}\\\n.ace-cobalt .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555555\\\n}\\\n.ace-cobalt {\\\nbackground-color: #002240;\\\ncolor: #FFFFFF\\\n}\\\n.ace-cobalt .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_selection {\\\nbackground: rgba(179, 101, 57, 0.75)\\\n}\\\n.ace-cobalt.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002240;\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_step {\\\nbackground: rgb(127, 111, 19)\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.15)\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.35)\\\n}\\\n.ace-cobalt .ace_gutter-active-line {\\\nbackground-color: rgba(0, 0, 0, 0.35)\\\n}\\\n.ace-cobalt .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(179, 101, 57, 0.75)\\\n}\\\n.ace-cobalt .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.15)\\\n}\\\n.ace-cobalt .ace_keyword,\\\n.ace-cobalt .ace_meta {\\\ncolor: #FF9D00\\\n}\\\n.ace-cobalt .ace_constant,\\\n.ace-cobalt .ace_constant.ace_character,\\\n.ace-cobalt .ace_constant.ace_character.ace_escape,\\\n.ace-cobalt .ace_constant.ace_other {\\\ncolor: #FF628C\\\n}\\\n.ace-cobalt .ace_invalid {\\\ncolor: #F8F8F8;\\\nbackground-color: #800F00\\\n}\\\n.ace-cobalt .ace_support {\\\ncolor: #80FFBB\\\n}\\\n.ace-cobalt .ace_support.ace_constant {\\\ncolor: #EB939A\\\n}\\\n.ace-cobalt .ace_fold {\\\nbackground-color: #FF9D00;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-cobalt .ace_support.ace_function {\\\ncolor: #FFB054\\\n}\\\n.ace-cobalt .ace_storage {\\\ncolor: #FFEE80\\\n}\\\n.ace-cobalt .ace_entity {\\\ncolor: #FFDD00\\\n}\\\n.ace-cobalt .ace_string {\\\ncolor: #3AD900\\\n}\\\n.ace-cobalt .ace_string.ace_regexp {\\\ncolor: #80FFC2\\\n}\\\n.ace-cobalt .ace_comment {\\\nfont-style: italic;\\\ncolor: #0088FF\\\n}\\\n.ace-cobalt .ace_heading,\\\n.ace-cobalt .ace_markup.ace_heading {\\\ncolor: #C8E4FD;\\\nbackground-color: #001221\\\n}\\\n.ace-cobalt .ace_list,\\\n.ace-cobalt .ace_markup.ace_list {\\\nbackground-color: #130D26\\\n}\\\n.ace-cobalt .ace_variable {\\\ncolor: #CCCCCC\\\n}\\\n.ace-cobalt .ace_variable.ace_language {\\\ncolor: #FF80E1\\\n}\\\n.ace-cobalt .ace_meta.ace_tag {\\\ncolor: #9EFFFF\\\n}\\\n.ace-cobalt .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-crimson_editor.js",
    "content": "ace.define(\"ace/theme/crimson_editor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\nexports.isDark = false;\nexports.cssText = \".ace-crimson-editor .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333;\\\noverflow : hidden;\\\n}\\\n.ace-crimson-editor .ace_gutter-layer {\\\nwidth: 100%;\\\ntext-align: right;\\\n}\\\n.ace-crimson-editor .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-crimson-editor {\\\nbackground-color: #FFFFFF;\\\ncolor: rgb(64, 64, 64);\\\n}\\\n.ace-crimson-editor .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-crimson-editor .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-crimson-editor .ace_identifier {\\\ncolor: black;\\\n}\\\n.ace-crimson-editor .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-crimson-editor .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-crimson-editor .ace_constant.ace_language {\\\ncolor: rgb(255, 156, 0);\\\n}\\\n.ace-crimson-editor .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-crimson-editor .ace_invalid {\\\ntext-decoration: line-through;\\\ncolor: rgb(224, 0, 0);\\\n}\\\n.ace-crimson-editor .ace_fold {\\\n}\\\n.ace-crimson-editor .ace_support.ace_function {\\\ncolor: rgb(192, 0, 0);\\\n}\\\n.ace-crimson-editor .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-crimson-editor .ace_support.ace_type,\\\n.ace-crimson-editor .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-crimson-editor .ace_keyword.ace_operator {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-crimson-editor .ace_string {\\\ncolor: rgb(128, 0, 128);\\\n}\\\n.ace-crimson-editor .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-crimson-editor .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-crimson-editor .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-crimson-editor .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 64);\\\n}\\\n.ace-crimson-editor .ace_variable {\\\ncolor: rgb(0, 64, 128);\\\n}\\\n.ace-crimson-editor .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_active-line {\\\nbackground: rgb(232, 242, 254);\\\n}\\\n.ace-crimson-editor .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-crimson-editor .ace_meta.ace_tag {\\\ncolor:rgb(28, 2, 255);\\\n}\\\n.ace-crimson-editor .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-crimson-editor .ace_string.ace_regex {\\\ncolor: rgb(192, 0, 192);\\\n}\\\n.ace-crimson-editor .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\nexports.cssClass = \"ace-crimson-editor\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-dawn.js",
    "content": "ace.define(\"ace/theme/dawn\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-dawn\";\nexports.cssText = \".ace-dawn .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333\\\n}\\\n.ace-dawn .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-dawn {\\\nbackground-color: #F9F9F9;\\\ncolor: #080808\\\n}\\\n.ace-dawn .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-dawn .ace_marker-layer .ace_selection {\\\nbackground: rgba(39, 95, 255, 0.30)\\\n}\\\n.ace-dawn.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #F9F9F9;\\\n}\\\n.ace-dawn .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-dawn .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(75, 75, 126, 0.50)\\\n}\\\n.ace-dawn .ace_marker-layer .ace_active-line {\\\nbackground: rgba(36, 99, 180, 0.12)\\\n}\\\n.ace-dawn .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-dawn .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(39, 95, 255, 0.30)\\\n}\\\n.ace-dawn .ace_invisible {\\\ncolor: rgba(75, 75, 126, 0.50)\\\n}\\\n.ace-dawn .ace_keyword,\\\n.ace-dawn .ace_meta {\\\ncolor: #794938\\\n}\\\n.ace-dawn .ace_constant,\\\n.ace-dawn .ace_constant.ace_character,\\\n.ace-dawn .ace_constant.ace_character.ace_escape,\\\n.ace-dawn .ace_constant.ace_other {\\\ncolor: #811F24\\\n}\\\n.ace-dawn .ace_invalid.ace_illegal {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #F8F8F8;\\\nbackground-color: #B52A1D\\\n}\\\n.ace-dawn .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #B52A1D\\\n}\\\n.ace-dawn .ace_support {\\\ncolor: #691C97\\\n}\\\n.ace-dawn .ace_support.ace_constant {\\\ncolor: #B4371F\\\n}\\\n.ace-dawn .ace_fold {\\\nbackground-color: #794938;\\\nborder-color: #080808\\\n}\\\n.ace-dawn .ace_list,\\\n.ace-dawn .ace_markup.ace_list,\\\n.ace-dawn .ace_support.ace_function {\\\ncolor: #693A17\\\n}\\\n.ace-dawn .ace_storage {\\\nfont-style: italic;\\\ncolor: #A71D5D\\\n}\\\n.ace-dawn .ace_string {\\\ncolor: #0B6125\\\n}\\\n.ace-dawn .ace_string.ace_regexp {\\\ncolor: #CF5628\\\n}\\\n.ace-dawn .ace_comment {\\\nfont-style: italic;\\\ncolor: #5A525F\\\n}\\\n.ace-dawn .ace_heading,\\\n.ace-dawn .ace_markup.ace_heading {\\\ncolor: #19356D\\\n}\\\n.ace-dawn .ace_variable {\\\ncolor: #234A97\\\n}\\\n.ace-dawn .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-dreamweaver.js",
    "content": "ace.define(\"ace/theme/dreamweaver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\nexports.isDark = false;\nexports.cssClass = \"ace-dreamweaver\";\nexports.cssText = \".ace-dreamweaver .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333;\\\n}\\\n.ace-dreamweaver .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-dreamweaver {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-dreamweaver .ace_fold {\\\nbackground-color: #757AD8;\\\n}\\\n.ace-dreamweaver .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-dreamweaver .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-dreamweaver .ace_storage,\\\n.ace-dreamweaver .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-dreamweaver .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-dreamweaver .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-dreamweaver .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-dreamweaver .ace_invalid {\\\nbackground-color: rgb(153, 0, 0);\\\ncolor: white;\\\n}\\\n.ace-dreamweaver .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-dreamweaver .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-dreamweaver .ace_support.ace_type,\\\n.ace-dreamweaver .ace_support.ace_class {\\\ncolor: #009;\\\n}\\\n.ace-dreamweaver .ace_support.ace_php_tag {\\\ncolor: #f00;\\\n}\\\n.ace-dreamweaver .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-dreamweaver .ace_string {\\\ncolor: #00F;\\\n}\\\n.ace-dreamweaver .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-dreamweaver .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-dreamweaver .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-dreamweaver .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-dreamweaver .ace_variable {\\\ncolor: #06F\\\n}\\\n.ace-dreamweaver .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-dreamweaver .ace_entity.ace_name.ace_function {\\\ncolor: #00F;\\\n}\\\n.ace-dreamweaver .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-dreamweaver .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-dreamweaver .ace_gutter-active-line {\\\nbackground-color : #DCDCDC;\\\n}\\\n.ace-dreamweaver .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag {\\\ncolor:#009;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\\\ncolor:#060;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_form {\\\ncolor:#F90;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_image {\\\ncolor:#909;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_script {\\\ncolor:#900;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_style {\\\ncolor:#909;\\\n}\\\n.ace-dreamweaver .ace_meta.ace_tag.ace_table {\\\ncolor:#099;\\\n}\\\n.ace-dreamweaver .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-dreamweaver .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-eclipse.js",
    "content": "ace.define(\"ace/theme/eclipse\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssText = \".ace-eclipse .ace_gutter {\\\nbackground: #ebebeb;\\\nborder-right: 1px solid rgb(159, 159, 159);\\\ncolor: rgb(136, 136, 136);\\\n}\\\n.ace-eclipse .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #ebebeb;\\\n}\\\n.ace-eclipse {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-eclipse .ace_fold {\\\nbackground-color: rgb(60, 76, 114);\\\n}\\\n.ace-eclipse .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-eclipse .ace_storage,\\\n.ace-eclipse .ace_keyword,\\\n.ace-eclipse .ace_variable {\\\ncolor: rgb(127, 0, 85);\\\n}\\\n.ace-eclipse .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-eclipse .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-eclipse .ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-eclipse .ace_string {\\\ncolor: rgb(42, 0, 255);\\\n}\\\n.ace-eclipse .ace_comment {\\\ncolor: rgb(113, 150, 130);\\\n}\\\n.ace-eclipse .ace_comment.ace_doc {\\\ncolor: rgb(63, 95, 191);\\\n}\\\n.ace-eclipse .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(127, 159, 191);\\\n}\\\n.ace-eclipse .ace_constant.ace_numeric {\\\ncolor: darkblue;\\\n}\\\n.ace-eclipse .ace_tag {\\\ncolor: rgb(25, 118, 116);\\\n}\\\n.ace-eclipse .ace_type {\\\ncolor: rgb(127, 0, 127);\\\n}\\\n.ace-eclipse .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-eclipse .ace_meta.ace_tag {\\\ncolor:rgb(25, 118, 116);\\\n}\\\n.ace-eclipse .ace_invisible {\\\ncolor: #ddd;\\\n}\\\n.ace-eclipse .ace_entity.ace_other.ace_attribute-name {\\\ncolor:rgb(127, 0, 127);\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0);\\\n}\\\n.ace-eclipse .ace_active-line {\\\nbackground: rgb(232, 242, 254);\\\n}\\\n.ace-eclipse .ace_gutter-active-line {\\\nbackground-color : #DADADA;\\\n}\\\n.ace-eclipse .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgb(181, 213, 255);\\\n}\\\n.ace-eclipse .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\nexports.cssClass = \"ace-eclipse\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-github.js",
    "content": "ace.define(\"ace/theme/github\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-github\";\nexports.cssText = \"\\\n.ace-github .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #AAA;\\\n}\\\n.ace-github  {\\\nbackground: #fff;\\\ncolor: #000;\\\n}\\\n.ace-github .ace_keyword {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_string {\\\ncolor: #D14;\\\n}\\\n.ace-github .ace_variable.ace_class {\\\ncolor: teal;\\\n}\\\n.ace-github .ace_constant.ace_numeric {\\\ncolor: #099;\\\n}\\\n.ace-github .ace_constant.ace_buildin {\\\ncolor: #0086B3;\\\n}\\\n.ace-github .ace_support.ace_function {\\\ncolor: #0086B3;\\\n}\\\n.ace-github .ace_comment {\\\ncolor: #998;\\\nfont-style: italic;\\\n}\\\n.ace-github .ace_variable.ace_language  {\\\ncolor: #0086B3;\\\n}\\\n.ace-github .ace_paren {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_boolean {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_string.ace_regexp {\\\ncolor: #009926;\\\nfont-weight: normal;\\\n}\\\n.ace-github .ace_variable.ace_instance {\\\ncolor: teal;\\\n}\\\n.ace-github .ace_constant.ace_language {\\\nfont-weight: bold;\\\n}\\\n.ace-github .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-github.ace_focus .ace_marker-layer .ace_active-line {\\\nbackground: rgb(255, 255, 204);\\\n}\\\n.ace-github .ace_marker-layer .ace_active-line {\\\nbackground: rgb(245, 245, 245);\\\n}\\\n.ace-github .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-github.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-github.ace_nobold .ace_line > span {\\\nfont-weight: normal !important;\\\n}\\\n.ace-github .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-github .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-github .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-github .ace_gutter-active-line {\\\nbackground-color : rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-github .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-github .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-github .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-github .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\";\n\n    var dom = require(\"../lib/dom\");\n    dom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-idle_fingers.js",
    "content": "ace.define(\"ace/theme/idle_fingers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-idle-fingers\";\nexports.cssText = \".ace-idle-fingers .ace_gutter {\\\nbackground: #3b3b3b;\\\ncolor: rgb(153,153,153)\\\n}\\\n.ace-idle-fingers .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #3b3b3b\\\n}\\\n.ace-idle-fingers {\\\nbackground-color: #323232;\\\ncolor: #FFFFFF\\\n}\\\n.ace-idle-fingers .ace_cursor {\\\ncolor: #91FF00\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_selection {\\\nbackground: rgba(90, 100, 126, 0.88)\\\n}\\\n.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #323232;\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_active-line {\\\nbackground: #353637\\\n}\\\n.ace-idle-fingers .ace_gutter-active-line {\\\nbackground-color: #353637\\\n}\\\n.ace-idle-fingers .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(90, 100, 126, 0.88)\\\n}\\\n.ace-idle-fingers .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-idle-fingers .ace_keyword,\\\n.ace-idle-fingers .ace_meta {\\\ncolor: #CC7833\\\n}\\\n.ace-idle-fingers .ace_constant,\\\n.ace-idle-fingers .ace_constant.ace_character,\\\n.ace-idle-fingers .ace_constant.ace_character.ace_escape,\\\n.ace-idle-fingers .ace_constant.ace_other,\\\n.ace-idle-fingers .ace_support.ace_constant {\\\ncolor: #6C99BB\\\n}\\\n.ace-idle-fingers .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #FF0000\\\n}\\\n.ace-idle-fingers .ace_fold {\\\nbackground-color: #CC7833;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-idle-fingers .ace_support.ace_function {\\\ncolor: #B83426\\\n}\\\n.ace-idle-fingers .ace_variable.ace_parameter {\\\nfont-style: italic\\\n}\\\n.ace-idle-fingers .ace_string {\\\ncolor: #A5C261\\\n}\\\n.ace-idle-fingers .ace_string.ace_regexp {\\\ncolor: #CCCC33\\\n}\\\n.ace-idle-fingers .ace_comment {\\\nfont-style: italic;\\\ncolor: #BC9458\\\n}\\\n.ace-idle-fingers .ace_meta.ace_tag {\\\ncolor: #FFE5BB\\\n}\\\n.ace-idle-fingers .ace_entity.ace_name {\\\ncolor: #FFC66D\\\n}\\\n.ace-idle-fingers .ace_collab.ace_user1 {\\\ncolor: #323232;\\\nbackground-color: #FFF980\\\n}\\\n.ace-idle-fingers .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-iplastic.js",
    "content": "ace.define(\"ace/theme/iplastic\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-iplastic\";\nexports.cssText = \".ace-iplastic .ace_gutter {\\\nbackground: #dddddd;\\\ncolor: #666666\\\n}\\\n.ace-iplastic .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #bbbbbb\\\n}\\\n.ace-iplastic {\\\nbackground-color: #eeeeee;\\\ncolor: #333333\\\n}\\\n.ace-iplastic .ace_cursor {\\\ncolor: #333\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_selection {\\\nbackground: #BAD6FD;\\\n}\\\n.ace-iplastic.ace_multiselect .ace_selection.ace_start {\\\nborder-radius: 4px\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_step {\\\nbackground: #444444\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E;\\\nbackground: #FFF799\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_active-line {\\\nbackground: #e5e5e5\\\n}\\\n.ace-iplastic .ace_gutter-active-line {\\\nbackground-color: #eeeeee\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #555555;\\\nborder-radius:4px\\\n}\\\n.ace-iplastic .ace_invisible {\\\ncolor: #999999\\\n}\\\n.ace-iplastic .ace_entity.ace_name.ace_tag,\\\n.ace-iplastic .ace_keyword,\\\n.ace-iplastic .ace_meta.ace_tag,\\\n.ace-iplastic .ace_storage {\\\ncolor: #0000FF\\\n}\\\n.ace-iplastic .ace_punctuation,\\\n.ace-iplastic .ace_punctuation.ace_tag {\\\ncolor: #000\\\n}\\\n.ace-iplastic .ace_constant {\\\ncolor: #333333;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_constant.ace_character,\\\n.ace-iplastic .ace_constant.ace_language,\\\n.ace-iplastic .ace_constant.ace_numeric,\\\n.ace-iplastic .ace_constant.ace_other {\\\ncolor: #0066FF;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_constant.ace_numeric{\\\nfont-weight: 100\\\n}\\\n.ace-iplastic .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-iplastic .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-iplastic .ace_support.ace_constant,\\\n.ace-iplastic .ace_support.ace_function {\\\ncolor: #333333;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_fold {\\\nbackground-color: #464646;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-iplastic .ace_storage.ace_type,\\\n.ace-iplastic .ace_support.ace_class,\\\n.ace-iplastic .ace_support.ace_type {\\\ncolor: #3333fc;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_entity.ace_name.ace_function,\\\n.ace-iplastic .ace_entity.ace_other,\\\n.ace-iplastic .ace_entity.ace_other.ace_attribute-name,\\\n.ace-iplastic .ace_variable {\\\ncolor: #3366cc;\\\nfont-style: italic\\\n}\\\n.ace-iplastic .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #2469E0\\\n}\\\n.ace-iplastic .ace_string {\\\ncolor: #a55f03\\\n}\\\n.ace-iplastic .ace_comment {\\\ncolor: #777777;\\\nfont-style: italic\\\n}\\\n.ace-iplastic .ace_fold-widget {\\\nbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);\\\n}\\\n.ace-iplastic .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAABlJREFUeNpi+P//PwMzMzPzfwAAAAD//wMAGRsECSML/RIAAAAASUVORK5CYII=) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-katzenmilch.js",
    "content": "ace.define(\"ace/theme/katzenmilch\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-katzenmilch\";\nexports.cssText = \".ace-katzenmilch .ace_gutter,\\\n.ace-katzenmilch .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333\\\n}\\\n.ace-katzenmilch .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-katzenmilch {\\\nbackground-color: #f3f2f3;\\\ncolor: rgba(15, 0, 9, 1.0)\\\n}\\\n.ace-katzenmilch .ace_cursor {\\\nborder-left: 2px solid #100011\\\n}\\\n.ace-katzenmilch .ace_overwrite-cursors .ace_cursor {\\\nborder-left: 0px;\\\nborder-bottom: 1px solid #100011\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_selection {\\\nbackground: rgba(100, 5, 208, 0.27)\\\n}\\\n.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #f3f2f3;\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174)\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(0, 0, 0, 0.33);\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_active-line {\\\nbackground: rgb(232, 242, 254)\\\n}\\\n.ace-katzenmilch .ace_gutter-active-line {\\\nbackground-color: rgb(232, 242, 254)\\\n}\\\n.ace-katzenmilch .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(100, 5, 208, 0.27)\\\n}\\\n.ace-katzenmilch .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-katzenmilch .ace_fold {\\\nbackground-color: rgba(2, 95, 73, 0.97);\\\nborder-color: rgba(15, 0, 9, 1.0)\\\n}\\\n.ace-katzenmilch .ace_keyword {\\\ncolor: #674Aa8;\\\nrbackground-color: rgba(163, 170, 216, 0.055)\\\n}\\\n.ace-katzenmilch .ace_constant.ace_language {\\\ncolor: #7D7e52;\\\nrbackground-color: rgba(189, 190, 130, 0.059)\\\n}\\\n.ace-katzenmilch .ace_constant.ace_numeric {\\\ncolor: rgba(79, 130, 123, 0.93);\\\nrbackground-color: rgba(119, 194, 187, 0.059)\\\n}\\\n.ace-katzenmilch .ace_constant.ace_character,\\\n.ace-katzenmilch .ace_constant.ace_other {\\\ncolor: rgba(2, 95, 105, 1.0);\\\nrbackground-color: rgba(127, 34, 153, 0.063)\\\n}\\\n.ace-katzenmilch .ace_support.ace_function {\\\ncolor: #9D7e62;\\\nrbackground-color: rgba(189, 190, 130, 0.039)\\\n}\\\n.ace-katzenmilch .ace_support.ace_class {\\\ncolor: rgba(239, 106, 167, 1.0);\\\nrbackground-color: rgba(239, 106, 167, 0.063)\\\n}\\\n.ace-katzenmilch .ace_storage {\\\ncolor: rgba(123, 92, 191, 1.0);\\\nrbackground-color: rgba(139, 93, 223, 0.051)\\\n}\\\n.ace-katzenmilch .ace_invalid {\\\ncolor: #DFDFD5;\\\nrbackground-color: #CC1B27\\\n}\\\n.ace-katzenmilch .ace_string {\\\ncolor: #5a5f9b;\\\nrbackground-color: rgba(170, 175, 219, 0.035)\\\n}\\\n.ace-katzenmilch .ace_comment {\\\nfont-style: italic;\\\ncolor: rgba(64, 79, 80, 0.67);\\\nrbackground-color: rgba(95, 15, 255, 0.0078)\\\n}\\\n.ace-katzenmilch .ace_entity.ace_name.ace_function,\\\n.ace-katzenmilch .ace_variable {\\\ncolor: rgba(2, 95, 73, 0.97);\\\nrbackground-color: rgba(34, 255, 73, 0.12)\\\n}\\\n.ace-katzenmilch .ace_variable.ace_language {\\\ncolor: #316fcf;\\\nrbackground-color: rgba(58, 175, 255, 0.039)\\\n}\\\n.ace-katzenmilch .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: rgba(51, 150, 159, 0.87);\\\nrbackground-color: rgba(5, 214, 249, 0.043)\\\n}\\\n.ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {\\\ncolor: rgba(73, 70, 194, 0.93);\\\nrbackground-color: rgba(73, 134, 194, 0.035)\\\n}\\\n.ace-katzenmilch .ace_entity.ace_name.ace_tag {\\\ncolor: #3976a2;\\\nrbackground-color: rgba(73, 166, 210, 0.039)\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-kr_theme.js",
    "content": "ace.define(\"ace/theme/kr_theme\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-kr-theme\";\nexports.cssText = \".ace-kr-theme .ace_gutter {\\\nbackground: #1c1917;\\\ncolor: #FCFFE0\\\n}\\\n.ace-kr-theme .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1c1917\\\n}\\\n.ace-kr-theme {\\\nbackground-color: #0B0A09;\\\ncolor: #FCFFE0\\\n}\\\n.ace-kr-theme .ace_cursor {\\\ncolor: #FF9900\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_selection {\\\nbackground: rgba(170, 0, 255, 0.45)\\\n}\\\n.ace-kr-theme.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #0B0A09;\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 177, 111, 0.32)\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_active-line {\\\nbackground: #38403D\\\n}\\\n.ace-kr-theme .ace_gutter-active-line {\\\nbackground-color : #38403D\\\n}\\\n.ace-kr-theme .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(170, 0, 255, 0.45)\\\n}\\\n.ace-kr-theme .ace_invisible {\\\ncolor: rgba(255, 177, 111, 0.32)\\\n}\\\n.ace-kr-theme .ace_keyword,\\\n.ace-kr-theme .ace_meta {\\\ncolor: #949C8B\\\n}\\\n.ace-kr-theme .ace_constant,\\\n.ace-kr-theme .ace_constant.ace_character,\\\n.ace-kr-theme .ace_constant.ace_character.ace_escape,\\\n.ace-kr-theme .ace_constant.ace_other {\\\ncolor: rgba(210, 117, 24, 0.76)\\\n}\\\n.ace-kr-theme .ace_invalid {\\\ncolor: #F8F8F8;\\\nbackground-color: #A41300\\\n}\\\n.ace-kr-theme .ace_support {\\\ncolor: #9FC28A\\\n}\\\n.ace-kr-theme .ace_support.ace_constant {\\\ncolor: #C27E66\\\n}\\\n.ace-kr-theme .ace_fold {\\\nbackground-color: #949C8B;\\\nborder-color: #FCFFE0\\\n}\\\n.ace-kr-theme .ace_support.ace_function {\\\ncolor: #85873A\\\n}\\\n.ace-kr-theme .ace_storage {\\\ncolor: #FFEE80\\\n}\\\n.ace-kr-theme .ace_string {\\\ncolor: rgba(164, 161, 181, 0.8)\\\n}\\\n.ace-kr-theme .ace_string.ace_regexp {\\\ncolor: rgba(125, 255, 192, 0.65)\\\n}\\\n.ace-kr-theme .ace_comment {\\\nfont-style: italic;\\\ncolor: #706D5B\\\n}\\\n.ace-kr-theme .ace_variable {\\\ncolor: #D1A796\\\n}\\\n.ace-kr-theme .ace_list,\\\n.ace-kr-theme .ace_markup.ace_list {\\\nbackground-color: #0F0040\\\n}\\\n.ace-kr-theme .ace_variable.ace_language {\\\ncolor: #FF80E1\\\n}\\\n.ace-kr-theme .ace_meta.ace_tag {\\\ncolor: #BABD9C\\\n}\\\n.ace-kr-theme .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-kuroir.js",
    "content": "ace.define(\"ace/theme/kuroir\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-kuroir\";\nexports.cssText = \"\\\n.ace-kuroir .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333;\\\n}\\\n.ace-kuroir .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-kuroir {\\\nbackground-color: #E8E9E8;\\\ncolor: #363636;\\\n}\\\n.ace-kuroir .ace_cursor {\\\ncolor: #202020;\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_selection {\\\nbackground: rgba(245, 170, 0, 0.57);\\\n}\\\n.ace-kuroir.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #E8E9E8;\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174);\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(0, 0, 0, 0.29);\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_active-line {\\\nbackground: rgba(203, 220, 47, 0.22);\\\n}\\\n.ace-kuroir .ace_gutter-active-line {\\\nbackground-color: rgba(203, 220, 47, 0.22);\\\n}\\\n.ace-kuroir .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(245, 170, 0, 0.57);\\\n}\\\n.ace-kuroir .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-kuroir .ace_fold {\\\nborder-color: #363636;\\\n}\\\n.ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;\\\nbackground-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;\\\nfont-style:italic;\\\ncolor:#FD1732;\\\nbackground-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;\\\nbackground-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);\\\nbackground-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;\\\nbackground-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore.js",
    "content": "ace.define(\"ace/theme/merbivore\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-merbivore\";\nexports.cssText = \".ace-merbivore .ace_gutter {\\\nbackground: #202020;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-merbivore {\\\nbackground-color: #161616;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_selection {\\\nbackground: #454545\\\n}\\\n.ace-merbivore.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #161616;\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_active-line {\\\nbackground: #333435\\\n}\\\n.ace-merbivore .ace_gutter-active-line {\\\nbackground-color: #333435\\\n}\\\n.ace-merbivore .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #454545\\\n}\\\n.ace-merbivore .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-merbivore .ace_entity.ace_name.ace_tag,\\\n.ace-merbivore .ace_keyword,\\\n.ace-merbivore .ace_meta,\\\n.ace-merbivore .ace_meta.ace_tag,\\\n.ace-merbivore .ace_storage,\\\n.ace-merbivore .ace_support.ace_function {\\\ncolor: #FC6F09\\\n}\\\n.ace-merbivore .ace_constant,\\\n.ace-merbivore .ace_constant.ace_character,\\\n.ace-merbivore .ace_constant.ace_character.ace_escape,\\\n.ace-merbivore .ace_constant.ace_other,\\\n.ace-merbivore .ace_support.ace_type {\\\ncolor: #1EDAFB\\\n}\\\n.ace-merbivore .ace_constant.ace_character.ace_escape {\\\ncolor: #519F50\\\n}\\\n.ace-merbivore .ace_constant.ace_language {\\\ncolor: #FDC251\\\n}\\\n.ace-merbivore .ace_constant.ace_library,\\\n.ace-merbivore .ace_string,\\\n.ace-merbivore .ace_support.ace_constant {\\\ncolor: #8DFF0A\\\n}\\\n.ace-merbivore .ace_constant.ace_numeric {\\\ncolor: #58C554\\\n}\\\n.ace-merbivore .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #990000\\\n}\\\n.ace-merbivore .ace_fold {\\\nbackground-color: #FC6F09;\\\nborder-color: #E6E1DC\\\n}\\\n.ace-merbivore .ace_comment {\\\nfont-style: italic;\\\ncolor: #AD2EA4\\\n}\\\n.ace-merbivore .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #FFFF89\\\n}\\\n.ace-merbivore .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore_soft.js",
    "content": "ace.define(\"ace/theme/merbivore_soft\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-merbivore-soft\";\nexports.cssText = \".ace-merbivore-soft .ace_gutter {\\\nbackground: #262424;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore-soft .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #262424\\\n}\\\n.ace-merbivore-soft {\\\nbackground-color: #1C1C1C;\\\ncolor: #E6E1DC\\\n}\\\n.ace-merbivore-soft .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_selection {\\\nbackground: #494949\\\n}\\\n.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #1C1C1C;\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_active-line {\\\nbackground: #333435\\\n}\\\n.ace-merbivore-soft .ace_gutter-active-line {\\\nbackground-color: #333435\\\n}\\\n.ace-merbivore-soft .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #494949\\\n}\\\n.ace-merbivore-soft .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-merbivore-soft .ace_entity.ace_name.ace_tag,\\\n.ace-merbivore-soft .ace_keyword,\\\n.ace-merbivore-soft .ace_meta,\\\n.ace-merbivore-soft .ace_meta.ace_tag,\\\n.ace-merbivore-soft .ace_storage {\\\ncolor: #FC803A\\\n}\\\n.ace-merbivore-soft .ace_constant,\\\n.ace-merbivore-soft .ace_constant.ace_character,\\\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape,\\\n.ace-merbivore-soft .ace_constant.ace_other,\\\n.ace-merbivore-soft .ace_support.ace_type {\\\ncolor: #68C1D8\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_character.ace_escape {\\\ncolor: #B3E5B4\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_language {\\\ncolor: #E1C582\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_library,\\\n.ace-merbivore-soft .ace_string,\\\n.ace-merbivore-soft .ace_support.ace_constant {\\\ncolor: #8EC65F\\\n}\\\n.ace-merbivore-soft .ace_constant.ace_numeric {\\\ncolor: #7FC578\\\n}\\\n.ace-merbivore-soft .ace_invalid,\\\n.ace-merbivore-soft .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #FE3838\\\n}\\\n.ace-merbivore-soft .ace_fold {\\\nbackground-color: #FC803A;\\\nborder-color: #E6E1DC\\\n}\\\n.ace-merbivore-soft .ace_comment,\\\n.ace-merbivore-soft .ace_meta {\\\nfont-style: italic;\\\ncolor: #AC4BB8\\\n}\\\n.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #EAF1A3\\\n}\\\n.ace-merbivore-soft .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-mono_industrial.js",
    "content": "ace.define(\"ace/theme/mono_industrial\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-mono-industrial\";\nexports.cssText = \".ace-mono-industrial .ace_gutter {\\\nbackground: #1d2521;\\\ncolor: #C5C9C9\\\n}\\\n.ace-mono-industrial .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-mono-industrial {\\\nbackground-color: #222C28;\\\ncolor: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_selection {\\\nbackground: rgba(145, 153, 148, 0.40)\\\n}\\\n.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #222C28;\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(102, 108, 104, 0.50)\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_active-line {\\\nbackground: rgba(12, 13, 12, 0.25)\\\n}\\\n.ace-mono-industrial .ace_gutter-active-line {\\\nbackground-color: rgba(12, 13, 12, 0.25)\\\n}\\\n.ace-mono-industrial .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(145, 153, 148, 0.40)\\\n}\\\n.ace-mono-industrial .ace_invisible {\\\ncolor: rgba(102, 108, 104, 0.50)\\\n}\\\n.ace-mono-industrial .ace_string {\\\nbackground-color: #151C19;\\\ncolor: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_keyword,\\\n.ace-mono-industrial .ace_meta {\\\ncolor: #A39E64\\\n}\\\n.ace-mono-industrial .ace_constant,\\\n.ace-mono-industrial .ace_constant.ace_character,\\\n.ace-mono-industrial .ace_constant.ace_character.ace_escape,\\\n.ace-mono-industrial .ace_constant.ace_numeric,\\\n.ace-mono-industrial .ace_constant.ace_other {\\\ncolor: #E98800\\\n}\\\n.ace-mono-industrial .ace_entity.ace_name.ace_function,\\\n.ace-mono-industrial .ace_keyword.ace_operator,\\\n.ace-mono-industrial .ace_variable {\\\ncolor: #A8B3AB\\\n}\\\n.ace-mono-industrial .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: rgba(153, 0, 0, 0.68)\\\n}\\\n.ace-mono-industrial .ace_support.ace_constant {\\\ncolor: #C87500\\\n}\\\n.ace-mono-industrial .ace_fold {\\\nbackground-color: #A8B3AB;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-mono-industrial .ace_support.ace_function {\\\ncolor: #588E60\\\n}\\\n.ace-mono-industrial .ace_entity.ace_name,\\\n.ace-mono-industrial .ace_support.ace_class,\\\n.ace-mono-industrial .ace_support.ace_type {\\\ncolor: #5778B6\\\n}\\\n.ace-mono-industrial .ace_storage {\\\ncolor: #C23B00\\\n}\\\n.ace-mono-industrial .ace_variable.ace_language,\\\n.ace-mono-industrial .ace_variable.ace_parameter {\\\ncolor: #648BD2\\\n}\\\n.ace-mono-industrial .ace_comment {\\\ncolor: #666C68;\\\nbackground-color: #151C19\\\n}\\\n.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #909993\\\n}\\\n.ace-mono-industrial .ace_entity.ace_name.ace_tag {\\\ncolor: #A65EFF\\\n}\\\n.ace-mono-industrial .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-monokai.js",
    "content": "ace.define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-monokai\";\nexports.cssText = \".ace-monokai .ace_gutter {\\\nbackground: #2F3129;\\\ncolor: #8F908A\\\n}\\\n.ace-monokai .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-monokai {\\\nbackground-color: #272822;\\\ncolor: #F8F8F2\\\n}\\\n.ace-monokai .ace_cursor {\\\ncolor: #F8F8F0\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selection {\\\nbackground: #49483E\\\n}\\\n.ace-monokai.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #272822;\\\n}\\\n.ace-monokai .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-monokai .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_marker-layer .ace_active-line {\\\nbackground: #202020\\\n}\\\n.ace-monokai .ace_gutter-active-line {\\\nbackground-color: #272727\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_invisible {\\\ncolor: #52524d\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_tag,\\\n.ace-monokai .ace_keyword,\\\n.ace-monokai .ace_meta.ace_tag,\\\n.ace-monokai .ace_storage {\\\ncolor: #F92672\\\n}\\\n.ace-monokai .ace_punctuation,\\\n.ace-monokai .ace_punctuation.ace_tag {\\\ncolor: #fff\\\n}\\\n.ace-monokai .ace_constant.ace_character,\\\n.ace-monokai .ace_constant.ace_language,\\\n.ace-monokai .ace_constant.ace_numeric,\\\n.ace-monokai .ace_constant.ace_other {\\\ncolor: #AE81FF\\\n}\\\n.ace-monokai .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-monokai .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-monokai .ace_support.ace_constant,\\\n.ace-monokai .ace_support.ace_function {\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_fold {\\\nbackground-color: #A6E22E;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-monokai .ace_storage.ace_type,\\\n.ace-monokai .ace_support.ace_class,\\\n.ace-monokai .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_function,\\\n.ace-monokai .ace_entity.ace_other,\\\n.ace-monokai .ace_entity.ace_other.ace_attribute-name,\\\n.ace-monokai .ace_variable {\\\ncolor: #A6E22E\\\n}\\\n.ace-monokai .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F\\\n}\\\n.ace-monokai .ace_string {\\\ncolor: #E6DB74\\\n}\\\n.ace-monokai .ace_comment {\\\ncolor: #75715E\\\n}\\\n.ace-monokai .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-pastel_on_dark.js",
    "content": "ace.define(\"ace/theme/pastel_on_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-pastel-on-dark\";\nexports.cssText = \".ace-pastel-on-dark .ace_gutter {\\\nbackground: #353030;\\\ncolor: #8F938F\\\n}\\\n.ace-pastel-on-dark .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #353030\\\n}\\\n.ace-pastel-on-dark {\\\nbackground-color: #2C2828;\\\ncolor: #8F938F\\\n}\\\n.ace-pastel-on-dark .ace_cursor {\\\ncolor: #A7A7A7\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #2C2828;\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-pastel-on-dark .ace_gutter-active-line {\\\nbackground-color: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-pastel-on-dark .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-pastel-on-dark .ace_keyword,\\\n.ace-pastel-on-dark .ace_meta {\\\ncolor: #757aD8\\\n}\\\n.ace-pastel-on-dark .ace_constant,\\\n.ace-pastel-on-dark .ace_constant.ace_character,\\\n.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,\\\n.ace-pastel-on-dark .ace_constant.ace_other {\\\ncolor: #4FB7C5\\\n}\\\n.ace-pastel-on-dark .ace_keyword.ace_operator {\\\ncolor: #797878\\\n}\\\n.ace-pastel-on-dark .ace_constant.ace_character {\\\ncolor: #AFA472\\\n}\\\n.ace-pastel-on-dark .ace_constant.ace_language {\\\ncolor: #DE8E30\\\n}\\\n.ace-pastel-on-dark .ace_constant.ace_numeric {\\\ncolor: #CCCCCC\\\n}\\\n.ace-pastel-on-dark .ace_invalid,\\\n.ace-pastel-on-dark .ace_invalid.ace_illegal {\\\ncolor: #F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75)\\\n}\\\n.ace-pastel-on-dark .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1\\\n}\\\n.ace-pastel-on-dark .ace_fold {\\\nbackground-color: #757aD8;\\\nborder-color: #8F938F\\\n}\\\n.ace-pastel-on-dark .ace_support.ace_function {\\\ncolor: #AEB2F8\\\n}\\\n.ace-pastel-on-dark .ace_string {\\\ncolor: #66A968\\\n}\\\n.ace-pastel-on-dark .ace_string.ace_regexp {\\\ncolor: #E9C062\\\n}\\\n.ace-pastel-on-dark .ace_comment {\\\ncolor: #A6C6FF\\\n}\\\n.ace-pastel-on-dark .ace_variable {\\\ncolor: #BEBF55\\\n}\\\n.ace-pastel-on-dark .ace_variable.ace_language {\\\ncolor: #C1C144\\\n}\\\n.ace-pastel-on-dark .ace_xml-pe {\\\ncolor: #494949\\\n}\\\n.ace-pastel-on-dark .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_dark.js",
    "content": "ace.define(\"ace/theme/solarized_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-solarized-dark\";\nexports.cssText = \".ace-solarized-dark .ace_gutter {\\\nbackground: #01313f;\\\ncolor: #d0edf7\\\n}\\\n.ace-solarized-dark .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #33555E\\\n}\\\n.ace-solarized-dark {\\\nbackground-color: #002B36;\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,\\\n.ace-solarized-dark .ace_storage {\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-dark .ace_cursor,\\\n.ace-solarized-dark .ace_string.ace_regexp {\\\ncolor: #D30102\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_active-line,\\\n.ace-solarized-dark .ace_marker-layer .ace_selection {\\\nbackground: rgba(255, 255, 255, 0.1)\\\n}\\\n.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002B36;\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-dark .ace_gutter-active-line {\\\nbackground-color: #0d3440\\\n}\\\n.ace-solarized-dark .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #073642\\\n}\\\n.ace-solarized-dark .ace_invisible {\\\ncolor: rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-dark .ace_keyword,\\\n.ace-solarized-dark .ace_meta,\\\n.ace-solarized-dark .ace_support.ace_class,\\\n.ace-solarized-dark .ace_support.ace_type {\\\ncolor: #859900\\\n}\\\n.ace-solarized-dark .ace_constant.ace_character,\\\n.ace-solarized-dark .ace_constant.ace_other {\\\ncolor: #CB4B16\\\n}\\\n.ace-solarized-dark .ace_constant.ace_language {\\\ncolor: #B58900\\\n}\\\n.ace-solarized-dark .ace_constant.ace_numeric {\\\ncolor: #D33682\\\n}\\\n.ace-solarized-dark .ace_fold {\\\nbackground-color: #268BD2;\\\nborder-color: #93A1A1\\\n}\\\n.ace-solarized-dark .ace_entity.ace_name.ace_function,\\\n.ace-solarized-dark .ace_entity.ace_name.ace_tag,\\\n.ace-solarized-dark .ace_support.ace_function,\\\n.ace-solarized-dark .ace_variable,\\\n.ace-solarized-dark .ace_variable.ace_language {\\\ncolor: #268BD2\\\n}\\\n.ace-solarized-dark .ace_string {\\\ncolor: #2AA198\\\n}\\\n.ace-solarized-dark .ace_comment {\\\nfont-style: italic;\\\ncolor: #657B83\\\n}\\\n.ace-solarized-dark .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_light.js",
    "content": "ace.define(\"ace/theme/solarized_light\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-solarized-light\";\nexports.cssText = \".ace-solarized-light .ace_gutter {\\\nbackground: #fbf1d3;\\\ncolor: #333\\\n}\\\n.ace-solarized-light .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-solarized-light {\\\nbackground-color: #FDF6E3;\\\ncolor: #586E75\\\n}\\\n.ace-solarized-light .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_selection {\\\nbackground: rgba(7, 54, 67, 0.09)\\\n}\\\n.ace-solarized-light.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FDF6E3;\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_active-line {\\\nbackground: #EEE8D5\\\n}\\\n.ace-solarized-light .ace_gutter-active-line {\\\nbackground-color : #EDE5C1\\\n}\\\n.ace-solarized-light .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #073642\\\n}\\\n.ace-solarized-light .ace_invisible {\\\ncolor: rgba(147, 161, 161, 0.50)\\\n}\\\n.ace-solarized-light .ace_keyword,\\\n.ace-solarized-light .ace_meta,\\\n.ace-solarized-light .ace_support.ace_class,\\\n.ace-solarized-light .ace_support.ace_type {\\\ncolor: #859900\\\n}\\\n.ace-solarized-light .ace_constant.ace_character,\\\n.ace-solarized-light .ace_constant.ace_other {\\\ncolor: #CB4B16\\\n}\\\n.ace-solarized-light .ace_constant.ace_language {\\\ncolor: #B58900\\\n}\\\n.ace-solarized-light .ace_constant.ace_numeric {\\\ncolor: #D33682\\\n}\\\n.ace-solarized-light .ace_fold {\\\nbackground-color: #268BD2;\\\nborder-color: #586E75\\\n}\\\n.ace-solarized-light .ace_entity.ace_name.ace_function,\\\n.ace-solarized-light .ace_entity.ace_name.ace_tag,\\\n.ace-solarized-light .ace_support.ace_function,\\\n.ace-solarized-light .ace_variable,\\\n.ace-solarized-light .ace_variable.ace_language {\\\ncolor: #268BD2\\\n}\\\n.ace-solarized-light .ace_storage {\\\ncolor: #073642\\\n}\\\n.ace-solarized-light .ace_string {\\\ncolor: #2AA198\\\n}\\\n.ace-solarized-light .ace_string.ace_regexp {\\\ncolor: #D30102\\\n}\\\n.ace-solarized-light .ace_comment,\\\n.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #93A1A1\\\n}\\\n.ace-solarized-light .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-sqlserver.js",
    "content": "ace.define(\"ace/theme/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-sqlserver\";\nexports.cssText = \".ace-sqlserver .ace_gutter {\\\nbackground: #ebebeb;\\\ncolor: #333;\\\noverflow: hidden;\\\n}\\\n.ace-sqlserver .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-sqlserver {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_identifier {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_keyword {\\\ncolor: #0000FF;\\\n}\\\n.ace-sqlserver .ace_numeric {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_storage {\\\ncolor: #11B7BE;\\\n}\\\n.ace-sqlserver .ace_keyword.ace_operator,\\\n.ace-sqlserver .ace_lparen,\\\n.ace-sqlserver .ace_rparen,\\\n.ace-sqlserver .ace_punctuation {\\\ncolor: #808080;\\\n}\\\n.ace-sqlserver .ace_set.ace_statement {\\\ncolor: #0000FF;\\\ntext-decoration: underline;\\\n}\\\n.ace-sqlserver .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-sqlserver .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-sqlserver .ace_constant.ace_language {\\\ncolor: #979797;\\\n}\\\n.ace-sqlserver .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-sqlserver .ace_invalid {\\\nbackground-color: rgb(153, 0, 0);\\\ncolor: white;\\\n}\\\n.ace-sqlserver .ace_support.ace_function {\\\ncolor: #FF00FF;\\\n}\\\n.ace-sqlserver .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-sqlserver .ace_class {\\\ncolor: #008080;\\\n}\\\n.ace-sqlserver .ace_support.ace_other {\\\ncolor: #6D79DE;\\\n}\\\n.ace-sqlserver .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F;\\\n}\\\n.ace-sqlserver .ace_comment {\\\ncolor: #008000;\\\n}\\\n.ace-sqlserver .ace_constant.ace_numeric {\\\ncolor: black;\\\n}\\\n.ace-sqlserver .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-sqlserver .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-sqlserver .ace_support.ace_storedprocedure {\\\ncolor: #800000;\\\n}\\\n.ace-sqlserver .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-sqlserver .ace_list {\\\ncolor: rgb(185, 6, 144);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-sqlserver .ace_gutter-active-line {\\\nbackground-color: #dcdcdc;\\\n}\\\n.ace-sqlserver .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-sqlserver .ace_meta.ace_tag {\\\ncolor: #0000FF;\\\n}\\\n.ace-sqlserver .ace_string.ace_regex {\\\ncolor: #FF0000;\\\n}\\\n.ace-sqlserver .ace_string {\\\ncolor: #FF0000;\\\n}\\\n.ace-sqlserver .ace_entity.ace_other.ace_attribute-name {\\\ncolor: #994409;\\\n}\\\n.ace-sqlserver .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-terminal.js",
    "content": "ace.define(\"ace/theme/terminal\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-terminal-theme\";\nexports.cssText = \".ace-terminal-theme .ace_gutter {\\\nbackground: #1a0005;\\\ncolor: steelblue\\\n}\\\n.ace-terminal-theme .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1a1a1a\\\n}\\\n.ace-terminal-theme {\\\nbackground-color: black;\\\ncolor: #DEDEDE\\\n}\\\n.ace-terminal-theme .ace_cursor {\\\ncolor: #9F9F9F\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_selection {\\\nbackground: #424242\\\n}\\\n.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px black;\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_step {\\\nbackground: rgb(0, 0, 0)\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_bracket {\\\nbackground: #090;\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_bracket-start {\\\nbackground: #090;\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #900\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_active-line {\\\nbackground: #2A2A2A\\\n}\\\n.ace-terminal-theme .ace_gutter-active-line {\\\nbackground-color: #2A112A\\\n}\\\n.ace-terminal-theme .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #424242\\\n}\\\n.ace-terminal-theme .ace_invisible {\\\ncolor: #343434\\\n}\\\n.ace-terminal-theme .ace_keyword,\\\n.ace-terminal-theme .ace_meta,\\\n.ace-terminal-theme .ace_storage,\\\n.ace-terminal-theme .ace_storage.ace_type,\\\n.ace-terminal-theme .ace_support.ace_type {\\\ncolor: tomato\\\n}\\\n.ace-terminal-theme .ace_keyword.ace_operator {\\\ncolor: deeppink\\\n}\\\n.ace-terminal-theme .ace_constant.ace_character,\\\n.ace-terminal-theme .ace_constant.ace_language,\\\n.ace-terminal-theme .ace_constant.ace_numeric,\\\n.ace-terminal-theme .ace_keyword.ace_other.ace_unit,\\\n.ace-terminal-theme .ace_support.ace_constant,\\\n.ace-terminal-theme .ace_variable.ace_parameter {\\\ncolor: #E78C45\\\n}\\\n.ace-terminal-theme .ace_constant.ace_other {\\\ncolor: gold\\\n}\\\n.ace-terminal-theme .ace_invalid {\\\ncolor: yellow;\\\nbackground-color: red\\\n}\\\n.ace-terminal-theme .ace_invalid.ace_deprecated {\\\ncolor: #CED2CF;\\\nbackground-color: #B798BF\\\n}\\\n.ace-terminal-theme .ace_fold {\\\nbackground-color: #7AA6DA;\\\nborder-color: #DEDEDE\\\n}\\\n.ace-terminal-theme .ace_entity.ace_name.ace_function,\\\n.ace-terminal-theme .ace_support.ace_function,\\\n.ace-terminal-theme .ace_variable {\\\ncolor: #7AA6DA\\\n}\\\n.ace-terminal-theme .ace_support.ace_class,\\\n.ace-terminal-theme .ace_support.ace_type {\\\ncolor: #E7C547\\\n}\\\n.ace-terminal-theme .ace_heading,\\\n.ace-terminal-theme .ace_string {\\\ncolor: #B9CA4A\\\n}\\\n.ace-terminal-theme .ace_entity.ace_name.ace_tag,\\\n.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,\\\n.ace-terminal-theme .ace_meta.ace_tag,\\\n.ace-terminal-theme .ace_string.ace_regexp,\\\n.ace-terminal-theme .ace_variable {\\\ncolor: #D54E53\\\n}\\\n.ace-terminal-theme .ace_comment {\\\ncolor: orangered\\\n}\\\n.ace-terminal-theme .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-textmate.js",
    "content": "ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow.js",
    "content": "ace.define(\"ace/theme/tomorrow\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-tomorrow\";\nexports.cssText = \".ace-tomorrow .ace_gutter {\\\nbackground: #f6f6f6;\\\ncolor: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #f6f6f6\\\n}\\\n.ace-tomorrow {\\\nbackground-color: #FFFFFF;\\\ncolor: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_cursor {\\\ncolor: #AEAFAD\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_selection {\\\nbackground: #D6D6D6\\\n}\\\n.ace-tomorrow.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_step {\\\nbackground: rgb(255, 255, 0)\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #D1D1D1\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_active-line {\\\nbackground: #EFEFEF\\\n}\\\n.ace-tomorrow .ace_gutter-active-line {\\\nbackground-color : #dcdcdc\\\n}\\\n.ace-tomorrow .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #D6D6D6\\\n}\\\n.ace-tomorrow .ace_invisible {\\\ncolor: #D1D1D1\\\n}\\\n.ace-tomorrow .ace_keyword,\\\n.ace-tomorrow .ace_meta,\\\n.ace-tomorrow .ace_storage,\\\n.ace-tomorrow .ace_storage.ace_type,\\\n.ace-tomorrow .ace_support.ace_type {\\\ncolor: #8959A8\\\n}\\\n.ace-tomorrow .ace_keyword.ace_operator {\\\ncolor: #3E999F\\\n}\\\n.ace-tomorrow .ace_constant.ace_character,\\\n.ace-tomorrow .ace_constant.ace_language,\\\n.ace-tomorrow .ace_constant.ace_numeric,\\\n.ace-tomorrow .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow .ace_support.ace_constant,\\\n.ace-tomorrow .ace_variable.ace_parameter {\\\ncolor: #F5871F\\\n}\\\n.ace-tomorrow .ace_constant.ace_other {\\\ncolor: #666969\\\n}\\\n.ace-tomorrow .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #C82829\\\n}\\\n.ace-tomorrow .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #8959A8\\\n}\\\n.ace-tomorrow .ace_fold {\\\nbackground-color: #4271AE;\\\nborder-color: #4D4D4C\\\n}\\\n.ace-tomorrow .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow .ace_support.ace_function,\\\n.ace-tomorrow .ace_variable {\\\ncolor: #4271AE\\\n}\\\n.ace-tomorrow .ace_support.ace_class,\\\n.ace-tomorrow .ace_support.ace_type {\\\ncolor: #C99E00\\\n}\\\n.ace-tomorrow .ace_heading,\\\n.ace-tomorrow .ace_markup.ace_heading,\\\n.ace-tomorrow .ace_string {\\\ncolor: #718C00\\\n}\\\n.ace-tomorrow .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow .ace_meta.ace_tag,\\\n.ace-tomorrow .ace_string.ace_regexp,\\\n.ace-tomorrow .ace_variable {\\\ncolor: #C82829\\\n}\\\n.ace-tomorrow .ace_comment {\\\ncolor: #8E908C\\\n}\\\n.ace-tomorrow .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night.js",
    "content": "ace.define(\"ace/theme/tomorrow_night\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night\";\nexports.cssText = \".ace-tomorrow-night .ace_gutter {\\\nbackground: #25282c;\\\ncolor: #C5C8C6\\\n}\\\n.ace-tomorrow-night .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #25282c\\\n}\\\n.ace-tomorrow-night {\\\nbackground-color: #1D1F21;\\\ncolor: #C5C8C6\\\n}\\\n.ace-tomorrow-night .ace_cursor {\\\ncolor: #AEAFAD\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_selection {\\\nbackground: #373B41\\\n}\\\n.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #1D1F21;\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #4B4E55\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_active-line {\\\nbackground: #282A2E\\\n}\\\n.ace-tomorrow-night .ace_gutter-active-line {\\\nbackground-color: #282A2E\\\n}\\\n.ace-tomorrow-night .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #373B41\\\n}\\\n.ace-tomorrow-night .ace_invisible {\\\ncolor: #4B4E55\\\n}\\\n.ace-tomorrow-night .ace_keyword,\\\n.ace-tomorrow-night .ace_meta,\\\n.ace-tomorrow-night .ace_storage,\\\n.ace-tomorrow-night .ace_storage.ace_type,\\\n.ace-tomorrow-night .ace_support.ace_type {\\\ncolor: #B294BB\\\n}\\\n.ace-tomorrow-night .ace_keyword.ace_operator {\\\ncolor: #8ABEB7\\\n}\\\n.ace-tomorrow-night .ace_constant.ace_character,\\\n.ace-tomorrow-night .ace_constant.ace_language,\\\n.ace-tomorrow-night .ace_constant.ace_numeric,\\\n.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night .ace_support.ace_constant,\\\n.ace-tomorrow-night .ace_variable.ace_parameter {\\\ncolor: #DE935F\\\n}\\\n.ace-tomorrow-night .ace_constant.ace_other {\\\ncolor: #CED1CF\\\n}\\\n.ace-tomorrow-night .ace_invalid {\\\ncolor: #CED2CF;\\\nbackground-color: #DF5F5F\\\n}\\\n.ace-tomorrow-night .ace_invalid.ace_deprecated {\\\ncolor: #CED2CF;\\\nbackground-color: #B798BF\\\n}\\\n.ace-tomorrow-night .ace_fold {\\\nbackground-color: #81A2BE;\\\nborder-color: #C5C8C6\\\n}\\\n.ace-tomorrow-night .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night .ace_support.ace_function,\\\n.ace-tomorrow-night .ace_variable {\\\ncolor: #81A2BE\\\n}\\\n.ace-tomorrow-night .ace_support.ace_class,\\\n.ace-tomorrow-night .ace_support.ace_type {\\\ncolor: #F0C674\\\n}\\\n.ace-tomorrow-night .ace_heading,\\\n.ace-tomorrow-night .ace_markup.ace_heading,\\\n.ace-tomorrow-night .ace_string {\\\ncolor: #B5BD68\\\n}\\\n.ace-tomorrow-night .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night .ace_meta.ace_tag,\\\n.ace-tomorrow-night .ace_string.ace_regexp,\\\n.ace-tomorrow-night .ace_variable {\\\ncolor: #CC6666\\\n}\\\n.ace-tomorrow-night .ace_comment {\\\ncolor: #969896\\\n}\\\n.ace-tomorrow-night .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_blue.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_blue\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-blue\";\nexports.cssText = \".ace-tomorrow-night-blue .ace_gutter {\\\nbackground: #00204b;\\\ncolor: #7388b5\\\n}\\\n.ace-tomorrow-night-blue .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #00204b\\\n}\\\n.ace-tomorrow-night-blue {\\\nbackground-color: #002451;\\\ncolor: #FFFFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_constant.ace_other,\\\n.ace-tomorrow-night-blue .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\\\nbackground: #003F8E\\\n}\\\n.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #002451;\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_step {\\\nbackground: rgb(127, 111, 19)\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404F7D\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {\\\nbackground: #00346E\\\n}\\\n.ace-tomorrow-night-blue .ace_gutter-active-line {\\\nbackground-color: #022040\\\n}\\\n.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #003F8E\\\n}\\\n.ace-tomorrow-night-blue .ace_invisible {\\\ncolor: #404F7D\\\n}\\\n.ace-tomorrow-night-blue .ace_keyword,\\\n.ace-tomorrow-night-blue .ace_meta,\\\n.ace-tomorrow-night-blue .ace_storage,\\\n.ace-tomorrow-night-blue .ace_storage.ace_type,\\\n.ace-tomorrow-night-blue .ace_support.ace_type {\\\ncolor: #EBBBFF\\\n}\\\n.ace-tomorrow-night-blue .ace_keyword.ace_operator {\\\ncolor: #99FFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_constant.ace_character,\\\n.ace-tomorrow-night-blue .ace_constant.ace_language,\\\n.ace-tomorrow-night-blue .ace_constant.ace_numeric,\\\n.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night-blue .ace_support.ace_constant,\\\n.ace-tomorrow-night-blue .ace_variable.ace_parameter {\\\ncolor: #FFC58F\\\n}\\\n.ace-tomorrow-night-blue .ace_invalid {\\\ncolor: #FFFFFF;\\\nbackground-color: #F99DA5\\\n}\\\n.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\\\ncolor: #FFFFFF;\\\nbackground-color: #EBBBFF\\\n}\\\n.ace-tomorrow-night-blue .ace_fold {\\\nbackground-color: #BBDAFF;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night-blue .ace_support.ace_function,\\\n.ace-tomorrow-night-blue .ace_variable {\\\ncolor: #BBDAFF\\\n}\\\n.ace-tomorrow-night-blue .ace_support.ace_class,\\\n.ace-tomorrow-night-blue .ace_support.ace_type {\\\ncolor: #FFEEAD\\\n}\\\n.ace-tomorrow-night-blue .ace_heading,\\\n.ace-tomorrow-night-blue .ace_markup.ace_heading,\\\n.ace-tomorrow-night-blue .ace_string {\\\ncolor: #D1F1A9\\\n}\\\n.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night-blue .ace_meta.ace_tag,\\\n.ace-tomorrow-night-blue .ace_string.ace_regexp,\\\n.ace-tomorrow-night-blue .ace_variable {\\\ncolor: #FF9DA4\\\n}\\\n.ace-tomorrow-night-blue .ace_comment {\\\ncolor: #7285B7\\\n}\\\n.ace-tomorrow-night-blue .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_bright.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_bright\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-bright\";\nexports.cssText = \".ace-tomorrow-night-bright .ace_gutter {\\\nbackground: #1a1a1a;\\\ncolor: #DEDEDE\\\n}\\\n.ace-tomorrow-night-bright .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1a1a1a\\\n}\\\n.ace-tomorrow-night-bright {\\\nbackground-color: #000000;\\\ncolor: #DEDEDE\\\n}\\\n.ace-tomorrow-night-bright .ace_cursor {\\\ncolor: #9F9F9F\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\\\nbackground: #424242\\\n}\\\n.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #000000;\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #888888\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {\\\nborder: 1px solid rgb(110, 119, 0);\\\nborder-bottom: 0;\\\nbox-shadow: inset 0 -1px rgb(110, 119, 0);\\\nmargin: -1px 0 0 -1px;\\\nbackground: rgba(255, 235, 0, 0.1)\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {\\\nbackground: #2A2A2A\\\n}\\\n.ace-tomorrow-night-bright .ace_gutter-active-line {\\\nbackground-color: #2A2A2A\\\n}\\\n.ace-tomorrow-night-bright .ace_stack {\\\nbackground-color: rgb(66, 90, 44)\\\n}\\\n.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #888888\\\n}\\\n.ace-tomorrow-night-bright .ace_invisible {\\\ncolor: #343434\\\n}\\\n.ace-tomorrow-night-bright .ace_keyword,\\\n.ace-tomorrow-night-bright .ace_meta,\\\n.ace-tomorrow-night-bright .ace_storage,\\\n.ace-tomorrow-night-bright .ace_storage.ace_type,\\\n.ace-tomorrow-night-bright .ace_support.ace_type {\\\ncolor: #C397D8\\\n}\\\n.ace-tomorrow-night-bright .ace_keyword.ace_operator {\\\ncolor: #70C0B1\\\n}\\\n.ace-tomorrow-night-bright .ace_constant.ace_character,\\\n.ace-tomorrow-night-bright .ace_constant.ace_language,\\\n.ace-tomorrow-night-bright .ace_constant.ace_numeric,\\\n.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night-bright .ace_support.ace_constant,\\\n.ace-tomorrow-night-bright .ace_variable.ace_parameter {\\\ncolor: #E78C45\\\n}\\\n.ace-tomorrow-night-bright .ace_constant.ace_other {\\\ncolor: #EEEEEE\\\n}\\\n.ace-tomorrow-night-bright .ace_invalid {\\\ncolor: #CED2CF;\\\nbackground-color: #DF5F5F\\\n}\\\n.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\\\ncolor: #CED2CF;\\\nbackground-color: #B798BF\\\n}\\\n.ace-tomorrow-night-bright .ace_fold {\\\nbackground-color: #7AA6DA;\\\nborder-color: #DEDEDE\\\n}\\\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night-bright .ace_support.ace_function,\\\n.ace-tomorrow-night-bright .ace_variable {\\\ncolor: #7AA6DA\\\n}\\\n.ace-tomorrow-night-bright .ace_support.ace_class,\\\n.ace-tomorrow-night-bright .ace_support.ace_type {\\\ncolor: #E7C547\\\n}\\\n.ace-tomorrow-night-bright .ace_heading,\\\n.ace-tomorrow-night-bright .ace_markup.ace_heading,\\\n.ace-tomorrow-night-bright .ace_string {\\\ncolor: #B9CA4A\\\n}\\\n.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night-bright .ace_meta.ace_tag,\\\n.ace-tomorrow-night-bright .ace_string.ace_regexp,\\\n.ace-tomorrow-night-bright .ace_variable {\\\ncolor: #D54E53\\\n}\\\n.ace-tomorrow-night-bright .ace_comment {\\\ncolor: #969896\\\n}\\\n.ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {\\\ncolor: #C2C280\\\n}\\\n.ace-tomorrow-night-bright .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_eighties.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_eighties\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-tomorrow-night-eighties\";\nexports.cssText = \".ace-tomorrow-night-eighties .ace_gutter {\\\nbackground: #272727;\\\ncolor: #CCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #272727\\\n}\\\n.ace-tomorrow-night-eighties {\\\nbackground-color: #2D2D2D;\\\ncolor: #CCCCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_constant.ace_other,\\\n.ace-tomorrow-night-eighties .ace_cursor {\\\ncolor: #CCCCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\\\nbackground: #515151\\\n}\\\n.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #2D2D2D;\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #6A6A6A\\\n}\\\n.ace-tomorrow-night-bright .ace_stack {\\\nbackground: rgb(66, 90, 44)\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {\\\nbackground: #393939\\\n}\\\n.ace-tomorrow-night-eighties .ace_gutter-active-line {\\\nbackground-color: #393939\\\n}\\\n.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #515151\\\n}\\\n.ace-tomorrow-night-eighties .ace_invisible {\\\ncolor: #6A6A6A\\\n}\\\n.ace-tomorrow-night-eighties .ace_keyword,\\\n.ace-tomorrow-night-eighties .ace_meta,\\\n.ace-tomorrow-night-eighties .ace_storage,\\\n.ace-tomorrow-night-eighties .ace_storage.ace_type,\\\n.ace-tomorrow-night-eighties .ace_support.ace_type {\\\ncolor: #CC99CC\\\n}\\\n.ace-tomorrow-night-eighties .ace_keyword.ace_operator {\\\ncolor: #66CCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_constant.ace_character,\\\n.ace-tomorrow-night-eighties .ace_constant.ace_language,\\\n.ace-tomorrow-night-eighties .ace_constant.ace_numeric,\\\n.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,\\\n.ace-tomorrow-night-eighties .ace_support.ace_constant,\\\n.ace-tomorrow-night-eighties .ace_variable.ace_parameter {\\\ncolor: #F99157\\\n}\\\n.ace-tomorrow-night-eighties .ace_invalid {\\\ncolor: #CDCDCD;\\\nbackground-color: #F2777A\\\n}\\\n.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\\\ncolor: #CDCDCD;\\\nbackground-color: #CC99CC\\\n}\\\n.ace-tomorrow-night-eighties .ace_fold {\\\nbackground-color: #6699CC;\\\nborder-color: #CCCCCC\\\n}\\\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,\\\n.ace-tomorrow-night-eighties .ace_support.ace_function,\\\n.ace-tomorrow-night-eighties .ace_variable {\\\ncolor: #6699CC\\\n}\\\n.ace-tomorrow-night-eighties .ace_support.ace_class,\\\n.ace-tomorrow-night-eighties .ace_support.ace_type {\\\ncolor: #FFCC66\\\n}\\\n.ace-tomorrow-night-eighties .ace_heading,\\\n.ace-tomorrow-night-eighties .ace_markup.ace_heading,\\\n.ace-tomorrow-night-eighties .ace_string {\\\ncolor: #99CC99\\\n}\\\n.ace-tomorrow-night-eighties .ace_comment {\\\ncolor: #999999\\\n}\\\n.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,\\\n.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,\\\n.ace-tomorrow-night-eighties .ace_meta.ace_tag,\\\n.ace-tomorrow-night-eighties .ace_variable {\\\ncolor: #F2777A\\\n}\\\n.ace-tomorrow-night-eighties .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-twilight.js",
    "content": "ace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-twilight\";\nexports.cssText = \".ace-twilight .ace_gutter {\\\nbackground: #232323;\\\ncolor: #E2E2E2\\\n}\\\n.ace-twilight .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #232323\\\n}\\\n.ace-twilight {\\\nbackground-color: #141414;\\\ncolor: #F8F8F8\\\n}\\\n.ace-twilight .ace_cursor {\\\ncolor: #A7A7A7\\\n}\\\n.ace-twilight .ace_marker-layer .ace_selection {\\\nbackground: rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-twilight.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #141414;\\\n}\\\n.ace-twilight .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-twilight .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-twilight .ace_marker-layer .ace_active-line {\\\nbackground: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-twilight .ace_gutter-active-line {\\\nbackground-color: rgba(255, 255, 255, 0.031)\\\n}\\\n.ace-twilight .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid rgba(221, 240, 255, 0.20)\\\n}\\\n.ace-twilight .ace_invisible {\\\ncolor: rgba(255, 255, 255, 0.25)\\\n}\\\n.ace-twilight .ace_keyword,\\\n.ace-twilight .ace_meta {\\\ncolor: #CDA869\\\n}\\\n.ace-twilight .ace_constant,\\\n.ace-twilight .ace_constant.ace_character,\\\n.ace-twilight .ace_constant.ace_character.ace_escape,\\\n.ace-twilight .ace_constant.ace_other,\\\n.ace-twilight .ace_heading,\\\n.ace-twilight .ace_markup.ace_heading,\\\n.ace-twilight .ace_support.ace_constant {\\\ncolor: #CF6A4C\\\n}\\\n.ace-twilight .ace_invalid.ace_illegal {\\\ncolor: #F8F8F8;\\\nbackground-color: rgba(86, 45, 86, 0.75)\\\n}\\\n.ace-twilight .ace_invalid.ace_deprecated {\\\ntext-decoration: underline;\\\nfont-style: italic;\\\ncolor: #D2A8A1\\\n}\\\n.ace-twilight .ace_support {\\\ncolor: #9B859D\\\n}\\\n.ace-twilight .ace_fold {\\\nbackground-color: #AC885B;\\\nborder-color: #F8F8F8\\\n}\\\n.ace-twilight .ace_support.ace_function {\\\ncolor: #DAD085\\\n}\\\n.ace-twilight .ace_list,\\\n.ace-twilight .ace_markup.ace_list,\\\n.ace-twilight .ace_storage {\\\ncolor: #F9EE98\\\n}\\\n.ace-twilight .ace_entity.ace_name.ace_function,\\\n.ace-twilight .ace_meta.ace_tag,\\\n.ace-twilight .ace_variable {\\\ncolor: #AC885B\\\n}\\\n.ace-twilight .ace_string {\\\ncolor: #8F9D6A\\\n}\\\n.ace-twilight .ace_string.ace_regexp {\\\ncolor: #E9C062\\\n}\\\n.ace-twilight .ace_comment {\\\nfont-style: italic;\\\ncolor: #5F5A60\\\n}\\\n.ace-twilight .ace_variable {\\\ncolor: #7587A6\\\n}\\\n.ace-twilight .ace_xml-pe {\\\ncolor: #494949\\\n}\\\n.ace-twilight .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-vibrant_ink.js",
    "content": "ace.define(\"ace/theme/vibrant_ink\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = true;\nexports.cssClass = \"ace-vibrant-ink\";\nexports.cssText = \".ace-vibrant-ink .ace_gutter {\\\nbackground: #1a1a1a;\\\ncolor: #BEBEBE\\\n}\\\n.ace-vibrant-ink .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #1a1a1a\\\n}\\\n.ace-vibrant-ink {\\\nbackground-color: #0F0F0F;\\\ncolor: #FFFFFF\\\n}\\\n.ace-vibrant-ink .ace_cursor {\\\ncolor: #FFFFFF\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_selection {\\\nbackground: #6699CC\\\n}\\\n.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #0F0F0F;\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #404040\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_active-line {\\\nbackground: #333333\\\n}\\\n.ace-vibrant-ink .ace_gutter-active-line {\\\nbackground-color: #333333\\\n}\\\n.ace-vibrant-ink .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #6699CC\\\n}\\\n.ace-vibrant-ink .ace_invisible {\\\ncolor: #404040\\\n}\\\n.ace-vibrant-ink .ace_keyword,\\\n.ace-vibrant-ink .ace_meta {\\\ncolor: #FF6600\\\n}\\\n.ace-vibrant-ink .ace_constant,\\\n.ace-vibrant-ink .ace_constant.ace_character,\\\n.ace-vibrant-ink .ace_constant.ace_character.ace_escape,\\\n.ace-vibrant-ink .ace_constant.ace_other {\\\ncolor: #339999\\\n}\\\n.ace-vibrant-ink .ace_constant.ace_numeric {\\\ncolor: #99CC99\\\n}\\\n.ace-vibrant-ink .ace_invalid,\\\n.ace-vibrant-ink .ace_invalid.ace_deprecated {\\\ncolor: #CCFF33;\\\nbackground-color: #000000\\\n}\\\n.ace-vibrant-ink .ace_fold {\\\nbackground-color: #FFCC00;\\\nborder-color: #FFFFFF\\\n}\\\n.ace-vibrant-ink .ace_entity.ace_name.ace_function,\\\n.ace-vibrant-ink .ace_support.ace_function,\\\n.ace-vibrant-ink .ace_variable {\\\ncolor: #FFCC00\\\n}\\\n.ace-vibrant-ink .ace_variable.ace_parameter {\\\nfont-style: italic\\\n}\\\n.ace-vibrant-ink .ace_string {\\\ncolor: #66FF00\\\n}\\\n.ace-vibrant-ink .ace_string.ace_regexp {\\\ncolor: #44B4CC\\\n}\\\n.ace-vibrant-ink .ace_comment {\\\ncolor: #9933CC\\\n}\\\n.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\\\nfont-style: italic;\\\ncolor: #99CC99\\\n}\\\n.ace-vibrant-ink .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-xcode.js",
    "content": "ace.define(\"ace/theme/xcode\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\nexports.isDark = false;\nexports.cssClass = \"ace-xcode\";\nexports.cssText = \"\\\n.ace-xcode .ace_gutter {\\\nbackground: #e8e8e8;\\\ncolor: #333\\\n}\\\n.ace-xcode .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8\\\n}\\\n.ace-xcode {\\\nbackground-color: #FFFFFF;\\\ncolor: #000000\\\n}\\\n.ace-xcode .ace_cursor {\\\ncolor: #000000\\\n}\\\n.ace-xcode .ace_marker-layer .ace_selection {\\\nbackground: #B5D5FF\\\n}\\\n.ace-xcode.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #FFFFFF;\\\n}\\\n.ace-xcode .ace_marker-layer .ace_step {\\\nbackground: rgb(198, 219, 174)\\\n}\\\n.ace-xcode .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #BFBFBF\\\n}\\\n.ace-xcode .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.071)\\\n}\\\n.ace-xcode .ace_gutter-active-line {\\\nbackground-color: rgba(0, 0, 0, 0.071)\\\n}\\\n.ace-xcode .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #B5D5FF\\\n}\\\n.ace-xcode .ace_constant.ace_language,\\\n.ace-xcode .ace_keyword,\\\n.ace-xcode .ace_meta,\\\n.ace-xcode .ace_variable.ace_language {\\\ncolor: #C800A4\\\n}\\\n.ace-xcode .ace_invisible {\\\ncolor: #BFBFBF\\\n}\\\n.ace-xcode .ace_constant.ace_character,\\\n.ace-xcode .ace_constant.ace_other {\\\ncolor: #275A5E\\\n}\\\n.ace-xcode .ace_constant.ace_numeric {\\\ncolor: #3A00DC\\\n}\\\n.ace-xcode .ace_entity.ace_other.ace_attribute-name,\\\n.ace-xcode .ace_support.ace_constant,\\\n.ace-xcode .ace_support.ace_function {\\\ncolor: #450084\\\n}\\\n.ace-xcode .ace_fold {\\\nbackground-color: #C800A4;\\\nborder-color: #000000\\\n}\\\n.ace-xcode .ace_entity.ace_name.ace_tag,\\\n.ace-xcode .ace_support.ace_class,\\\n.ace-xcode .ace_support.ace_type {\\\ncolor: #790EAD\\\n}\\\n.ace-xcode .ace_storage {\\\ncolor: #C900A4\\\n}\\\n.ace-xcode .ace_string {\\\ncolor: #DF0002\\\n}\\\n.ace-xcode .ace_comment {\\\ncolor: #008E00\\\n}\\\n.ace-xcode .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y\\\n}\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass);\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-css.js",
    "content": "\"no use strict\";\n;(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject( array[i] );\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    var cons = obj.constructor;\n    if (cons === RegExp)\n        return obj;\n    \n    copy = cons();\n    for (var key in obj) {\n        copy[key] = deepCopy(obj[key]);\n    }\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return str.replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\n        else\n            return new Range(this.start.row, 0, this.end.row, 0)\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n}\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    callback && this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        var old = handlers[eventName];\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000)\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        applyDelta(this.$lines, delta, doNotValidate);\n        this._signal(\"change\", delta);\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        var from = 0, to = 0;\n        do {\n            from = to;\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            if (to > l) {\n                delta.lines = chunk;\n                delta.start.row = row + from;\n                delta.start.column = column;\n                break;\n            }\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        } while(true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: lines[l-1].length};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/css/csslint\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\nvar parserlib = {};\n(function(){\nfunction EventTarget(){\n    this._listeners = {};\n}\n\nEventTarget.prototype = {\n    constructor: EventTarget,\n    addListener: function(type, listener){\n        if (!this._listeners[type]){\n            this._listeners[type] = [];\n        }\n\n        this._listeners[type].push(listener);\n    },\n    fire: function(event){\n        if (typeof event == \"string\"){\n            event = { type: event };\n        }\n        if (typeof event.target != \"undefined\"){\n            event.target = this;\n        }\n\n        if (typeof event.type == \"undefined\"){\n            throw new Error(\"Event object missing 'type' property.\");\n        }\n\n        if (this._listeners[event.type]){\n            var listeners = this._listeners[event.type].concat();\n            for (var i=0, len=listeners.length; i < len; i++){\n                listeners[i].call(this, event);\n            }\n        }\n    },\n    removeListener: function(type, listener){\n        if (this._listeners[type]){\n            var listeners = this._listeners[type];\n            for (var i=0, len=listeners.length; i < len; i++){\n                if (listeners[i] === listener){\n                    listeners.splice(i, 1);\n                    break;\n                }\n            }\n\n\n        }\n    }\n};\nfunction StringReader(text){\n    this._input = text.replace(/\\n\\r?/g, \"\\n\");\n    this._line = 1;\n    this._col = 1;\n    this._cursor = 0;\n}\n\nStringReader.prototype = {\n    constructor: StringReader,\n    getCol: function(){\n        return this._col;\n    },\n    getLine: function(){\n        return this._line ;\n    },\n    eof: function(){\n        return (this._cursor == this._input.length);\n    },\n    peek: function(count){\n        var c = null;\n        count = (typeof count == \"undefined\" ? 1 : count);\n        if (this._cursor < this._input.length){\n            c = this._input.charAt(this._cursor + count - 1);\n        }\n\n        return c;\n    },\n    read: function(){\n        var c = null;\n        if (this._cursor < this._input.length){\n            if (this._input.charAt(this._cursor) == \"\\n\"){\n                this._line++;\n                this._col=1;\n            } else {\n                this._col++;\n            }\n            c = this._input.charAt(this._cursor++);\n        }\n\n        return c;\n    },\n    mark: function(){\n        this._bookmark = {\n            cursor: this._cursor,\n            line:   this._line,\n            col:    this._col\n        };\n    },\n\n    reset: function(){\n        if (this._bookmark){\n            this._cursor = this._bookmark.cursor;\n            this._line = this._bookmark.line;\n            this._col = this._bookmark.col;\n            delete this._bookmark;\n        }\n    },\n    readTo: function(pattern){\n\n        var buffer = \"\",\n            c;\n        while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) != buffer.length - pattern.length){\n            c = this.read();\n            if (c){\n                buffer += c;\n            } else {\n                throw new Error(\"Expected \\\"\" + pattern + \"\\\" at line \" + this._line  + \", col \" + this._col + \".\");\n            }\n        }\n\n        return buffer;\n\n    },\n    readWhile: function(filter){\n\n        var buffer = \"\",\n            c = this.read();\n\n        while(c !== null && filter(c)){\n            buffer += c;\n            c = this.read();\n        }\n\n        return buffer;\n\n    },\n    readMatch: function(matcher){\n\n        var source = this._input.substring(this._cursor),\n            value = null;\n        if (typeof matcher == \"string\"){\n            if (source.indexOf(matcher) === 0){\n                value = this.readCount(matcher.length);\n            }\n        } else if (matcher instanceof RegExp){\n            if (matcher.test(source)){\n                value = this.readCount(RegExp.lastMatch.length);\n            }\n        }\n\n        return value;\n    },\n    readCount: function(count){\n        var buffer = \"\";\n\n        while(count--){\n            buffer += this.read();\n        }\n\n        return buffer;\n    }\n\n};\nfunction SyntaxError(message, line, col){\n    this.col = col;\n    this.line = line;\n    this.message = message;\n\n}\nSyntaxError.prototype = new Error();\nfunction SyntaxUnit(text, line, col, type){\n    this.col = col;\n    this.line = line;\n    this.text = text;\n    this.type = type;\n}\nSyntaxUnit.fromToken = function(token){\n    return new SyntaxUnit(token.value, token.startLine, token.startCol);\n};\n\nSyntaxUnit.prototype = {\n    constructor: SyntaxUnit,\n    valueOf: function(){\n        return this.text;\n    },\n    toString: function(){\n        return this.text;\n    }\n\n};\nfunction TokenStreamBase(input, tokenData){\n    this._reader = input ? new StringReader(input.toString()) : null;\n    this._token = null;\n    this._tokenData = tokenData;\n    this._lt = [];\n    this._ltIndex = 0;\n\n    this._ltIndexCache = [];\n}\nTokenStreamBase.createTokenData = function(tokens){\n\n    var nameMap     = [],\n        typeMap     = {},\n        tokenData     = tokens.concat([]),\n        i            = 0,\n        len            = tokenData.length+1;\n\n    tokenData.UNKNOWN = -1;\n    tokenData.unshift({name:\"EOF\"});\n\n    for (; i < len; i++){\n        nameMap.push(tokenData[i].name);\n        tokenData[tokenData[i].name] = i;\n        if (tokenData[i].text){\n            typeMap[tokenData[i].text] = i;\n        }\n    }\n\n    tokenData.name = function(tt){\n        return nameMap[tt];\n    };\n\n    tokenData.type = function(c){\n        return typeMap[c];\n    };\n\n    return tokenData;\n};\n\nTokenStreamBase.prototype = {\n    constructor: TokenStreamBase,\n    match: function(tokenTypes, channel){\n        if (!(tokenTypes instanceof Array)){\n            tokenTypes = [tokenTypes];\n        }\n\n        var tt  = this.get(channel),\n            i   = 0,\n            len = tokenTypes.length;\n\n        while(i < len){\n            if (tt == tokenTypes[i++]){\n                return true;\n            }\n        }\n        this.unget();\n        return false;\n    },\n    mustMatch: function(tokenTypes, channel){\n\n        var token;\n        if (!(tokenTypes instanceof Array)){\n            tokenTypes = [tokenTypes];\n        }\n\n        if (!this.match.apply(this, arguments)){\n            token = this.LT(1);\n            throw new SyntaxError(\"Expected \" + this._tokenData[tokenTypes[0]].name +\n                \" at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n        }\n    },\n    advance: function(tokenTypes, channel){\n\n        while(this.LA(0) !== 0 && !this.match(tokenTypes, channel)){\n            this.get();\n        }\n\n        return this.LA(0);\n    },\n    get: function(channel){\n\n        var tokenInfo   = this._tokenData,\n            reader      = this._reader,\n            value,\n            i           =0,\n            len         = tokenInfo.length,\n            found       = false,\n            token,\n            info;\n        if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length){\n\n            i++;\n            this._token = this._lt[this._ltIndex++];\n            info = tokenInfo[this._token.type];\n            while((info.channel !== undefined && channel !== info.channel) &&\n                    this._ltIndex < this._lt.length){\n                this._token = this._lt[this._ltIndex++];\n                info = tokenInfo[this._token.type];\n                i++;\n            }\n            if ((info.channel === undefined || channel === info.channel) &&\n                    this._ltIndex <= this._lt.length){\n                this._ltIndexCache.push(i);\n                return this._token.type;\n            }\n        }\n        token = this._getToken();\n        if (token.type > -1 && !tokenInfo[token.type].hide){\n            token.channel = tokenInfo[token.type].channel;\n            this._token = token;\n            this._lt.push(token);\n            this._ltIndexCache.push(this._lt.length - this._ltIndex + i);\n            if (this._lt.length > 5){\n                this._lt.shift();\n            }\n            if (this._ltIndexCache.length > 5){\n                this._ltIndexCache.shift();\n            }\n            this._ltIndex = this._lt.length;\n        }\n        info = tokenInfo[token.type];\n        if (info &&\n                (info.hide ||\n                (info.channel !== undefined && channel !== info.channel))){\n            return this.get(channel);\n        } else {\n            return token.type;\n        }\n    },\n    LA: function(index){\n        var total = index,\n            tt;\n        if (index > 0){\n            if (index > 5){\n                throw new Error(\"Too much lookahead.\");\n            }\n            while(total){\n                tt = this.get();\n                total--;\n            }\n            while(total < index){\n                this.unget();\n                total++;\n            }\n        } else if (index < 0){\n\n            if(this._lt[this._ltIndex+index]){\n                tt = this._lt[this._ltIndex+index].type;\n            } else {\n                throw new Error(\"Too much lookbehind.\");\n            }\n\n        } else {\n            tt = this._token.type;\n        }\n\n        return tt;\n\n    },\n    LT: function(index){\n        this.LA(index);\n        return this._lt[this._ltIndex+index-1];\n    },\n    peek: function(){\n        return this.LA(1);\n    },\n    token: function(){\n        return this._token;\n    },\n    tokenName: function(tokenType){\n        if (tokenType < 0 || tokenType > this._tokenData.length){\n            return \"UNKNOWN_TOKEN\";\n        } else {\n            return this._tokenData[tokenType].name;\n        }\n    },\n    tokenType: function(tokenName){\n        return this._tokenData[tokenName] || -1;\n    },\n    unget: function(){\n        if (this._ltIndexCache.length){\n            this._ltIndex -= this._ltIndexCache.pop();//--;\n            this._token = this._lt[this._ltIndex - 1];\n        } else {\n            throw new Error(\"Too much lookahead.\");\n        }\n    }\n\n};\n\n\nparserlib.util = {\nStringReader: StringReader,\nSyntaxError : SyntaxError,\nSyntaxUnit  : SyntaxUnit,\nEventTarget : EventTarget,\nTokenStreamBase : TokenStreamBase\n};\n})();\n(function(){\nvar EventTarget = parserlib.util.EventTarget,\nTokenStreamBase = parserlib.util.TokenStreamBase,\nStringReader = parserlib.util.StringReader,\nSyntaxError = parserlib.util.SyntaxError,\nSyntaxUnit  = parserlib.util.SyntaxUnit;\n\nvar Colors = {\n    aliceblue       :\"#f0f8ff\",\n    antiquewhite    :\"#faebd7\",\n    aqua            :\"#00ffff\",\n    aquamarine      :\"#7fffd4\",\n    azure           :\"#f0ffff\",\n    beige           :\"#f5f5dc\",\n    bisque          :\"#ffe4c4\",\n    black           :\"#000000\",\n    blanchedalmond  :\"#ffebcd\",\n    blue            :\"#0000ff\",\n    blueviolet      :\"#8a2be2\",\n    brown           :\"#a52a2a\",\n    burlywood       :\"#deb887\",\n    cadetblue       :\"#5f9ea0\",\n    chartreuse      :\"#7fff00\",\n    chocolate       :\"#d2691e\",\n    coral           :\"#ff7f50\",\n    cornflowerblue  :\"#6495ed\",\n    cornsilk        :\"#fff8dc\",\n    crimson         :\"#dc143c\",\n    cyan            :\"#00ffff\",\n    darkblue        :\"#00008b\",\n    darkcyan        :\"#008b8b\",\n    darkgoldenrod   :\"#b8860b\",\n    darkgray        :\"#a9a9a9\",\n    darkgrey        :\"#a9a9a9\",\n    darkgreen       :\"#006400\",\n    darkkhaki       :\"#bdb76b\",\n    darkmagenta     :\"#8b008b\",\n    darkolivegreen  :\"#556b2f\",\n    darkorange      :\"#ff8c00\",\n    darkorchid      :\"#9932cc\",\n    darkred         :\"#8b0000\",\n    darksalmon      :\"#e9967a\",\n    darkseagreen    :\"#8fbc8f\",\n    darkslateblue   :\"#483d8b\",\n    darkslategray   :\"#2f4f4f\",\n    darkslategrey   :\"#2f4f4f\",\n    darkturquoise   :\"#00ced1\",\n    darkviolet      :\"#9400d3\",\n    deeppink        :\"#ff1493\",\n    deepskyblue     :\"#00bfff\",\n    dimgray         :\"#696969\",\n    dimgrey         :\"#696969\",\n    dodgerblue      :\"#1e90ff\",\n    firebrick       :\"#b22222\",\n    floralwhite     :\"#fffaf0\",\n    forestgreen     :\"#228b22\",\n    fuchsia         :\"#ff00ff\",\n    gainsboro       :\"#dcdcdc\",\n    ghostwhite      :\"#f8f8ff\",\n    gold            :\"#ffd700\",\n    goldenrod       :\"#daa520\",\n    gray            :\"#808080\",\n    grey            :\"#808080\",\n    green           :\"#008000\",\n    greenyellow     :\"#adff2f\",\n    honeydew        :\"#f0fff0\",\n    hotpink         :\"#ff69b4\",\n    indianred       :\"#cd5c5c\",\n    indigo          :\"#4b0082\",\n    ivory           :\"#fffff0\",\n    khaki           :\"#f0e68c\",\n    lavender        :\"#e6e6fa\",\n    lavenderblush   :\"#fff0f5\",\n    lawngreen       :\"#7cfc00\",\n    lemonchiffon    :\"#fffacd\",\n    lightblue       :\"#add8e6\",\n    lightcoral      :\"#f08080\",\n    lightcyan       :\"#e0ffff\",\n    lightgoldenrodyellow  :\"#fafad2\",\n    lightgray       :\"#d3d3d3\",\n    lightgrey       :\"#d3d3d3\",\n    lightgreen      :\"#90ee90\",\n    lightpink       :\"#ffb6c1\",\n    lightsalmon     :\"#ffa07a\",\n    lightseagreen   :\"#20b2aa\",\n    lightskyblue    :\"#87cefa\",\n    lightslategray  :\"#778899\",\n    lightslategrey  :\"#778899\",\n    lightsteelblue  :\"#b0c4de\",\n    lightyellow     :\"#ffffe0\",\n    lime            :\"#00ff00\",\n    limegreen       :\"#32cd32\",\n    linen           :\"#faf0e6\",\n    magenta         :\"#ff00ff\",\n    maroon          :\"#800000\",\n    mediumaquamarine:\"#66cdaa\",\n    mediumblue      :\"#0000cd\",\n    mediumorchid    :\"#ba55d3\",\n    mediumpurple    :\"#9370d8\",\n    mediumseagreen  :\"#3cb371\",\n    mediumslateblue :\"#7b68ee\",\n    mediumspringgreen   :\"#00fa9a\",\n    mediumturquoise :\"#48d1cc\",\n    mediumvioletred :\"#c71585\",\n    midnightblue    :\"#191970\",\n    mintcream       :\"#f5fffa\",\n    mistyrose       :\"#ffe4e1\",\n    moccasin        :\"#ffe4b5\",\n    navajowhite     :\"#ffdead\",\n    navy            :\"#000080\",\n    oldlace         :\"#fdf5e6\",\n    olive           :\"#808000\",\n    olivedrab       :\"#6b8e23\",\n    orange          :\"#ffa500\",\n    orangered       :\"#ff4500\",\n    orchid          :\"#da70d6\",\n    palegoldenrod   :\"#eee8aa\",\n    palegreen       :\"#98fb98\",\n    paleturquoise   :\"#afeeee\",\n    palevioletred   :\"#d87093\",\n    papayawhip      :\"#ffefd5\",\n    peachpuff       :\"#ffdab9\",\n    peru            :\"#cd853f\",\n    pink            :\"#ffc0cb\",\n    plum            :\"#dda0dd\",\n    powderblue      :\"#b0e0e6\",\n    purple          :\"#800080\",\n    red             :\"#ff0000\",\n    rosybrown       :\"#bc8f8f\",\n    royalblue       :\"#4169e1\",\n    saddlebrown     :\"#8b4513\",\n    salmon          :\"#fa8072\",\n    sandybrown      :\"#f4a460\",\n    seagreen        :\"#2e8b57\",\n    seashell        :\"#fff5ee\",\n    sienna          :\"#a0522d\",\n    silver          :\"#c0c0c0\",\n    skyblue         :\"#87ceeb\",\n    slateblue       :\"#6a5acd\",\n    slategray       :\"#708090\",\n    slategrey       :\"#708090\",\n    snow            :\"#fffafa\",\n    springgreen     :\"#00ff7f\",\n    steelblue       :\"#4682b4\",\n    tan             :\"#d2b48c\",\n    teal            :\"#008080\",\n    thistle         :\"#d8bfd8\",\n    tomato          :\"#ff6347\",\n    turquoise       :\"#40e0d0\",\n    violet          :\"#ee82ee\",\n    wheat           :\"#f5deb3\",\n    white           :\"#ffffff\",\n    whitesmoke      :\"#f5f5f5\",\n    yellow          :\"#ffff00\",\n    yellowgreen     :\"#9acd32\",\n    activeBorder        :\"Active window border.\",\n    activecaption       :\"Active window caption.\",\n    appworkspace        :\"Background color of multiple document interface.\",\n    background          :\"Desktop background.\",\n    buttonface          :\"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonhighlight     :\"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttonshadow        :\"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",\n    buttontext          :\"Text on push buttons.\",\n    captiontext         :\"Text in caption, size box, and scrollbar arrow box.\",\n    graytext            :\"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.\",\n    greytext            :\"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.\",\n    highlight           :\"Item(s) selected in a control.\",\n    highlighttext       :\"Text of item(s) selected in a control.\",\n    inactiveborder      :\"Inactive window border.\",\n    inactivecaption     :\"Inactive window caption.\",\n    inactivecaptiontext :\"Color of text in an inactive caption.\",\n    infobackground      :\"Background color for tooltip controls.\",\n    infotext            :\"Text color for tooltip controls.\",\n    menu                :\"Menu background.\",\n    menutext            :\"Text in menus.\",\n    scrollbar           :\"Scroll bar gray area.\",\n    threeddarkshadow    :\"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedface          :\"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedhighlight     :\"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedlightshadow   :\"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    threedshadow        :\"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",\n    window              :\"Window background.\",\n    windowframe         :\"Window frame.\",\n    windowtext          :\"Text in windows.\"\n};\nfunction Combinator(text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.COMBINATOR_TYPE);\n    this.type = \"unknown\";\n    if (/^\\s+$/.test(text)){\n        this.type = \"descendant\";\n    } else if (text == \">\"){\n        this.type = \"child\";\n    } else if (text == \"+\"){\n        this.type = \"adjacent-sibling\";\n    } else if (text == \"~\"){\n        this.type = \"sibling\";\n    }\n\n}\n\nCombinator.prototype = new SyntaxUnit();\nCombinator.prototype.constructor = Combinator;\nfunction MediaFeature(name, value){\n\n    SyntaxUnit.call(this, \"(\" + name + (value !== null ? \":\" + value : \"\") + \")\", name.startLine, name.startCol, Parser.MEDIA_FEATURE_TYPE);\n    this.name = name;\n    this.value = value;\n}\n\nMediaFeature.prototype = new SyntaxUnit();\nMediaFeature.prototype.constructor = MediaFeature;\nfunction MediaQuery(modifier, mediaType, features, line, col){\n\n    SyntaxUnit.call(this, (modifier ? modifier + \" \": \"\") + (mediaType ? mediaType : \"\") + (mediaType && features.length > 0 ? \" and \" : \"\") + features.join(\" and \"), line, col, Parser.MEDIA_QUERY_TYPE);\n    this.modifier = modifier;\n    this.mediaType = mediaType;\n    this.features = features;\n\n}\n\nMediaQuery.prototype = new SyntaxUnit();\nMediaQuery.prototype.constructor = MediaQuery;\nfunction Parser(options){\n    EventTarget.call(this);\n\n\n    this.options = options || {};\n\n    this._tokenStream = null;\n}\nParser.DEFAULT_TYPE = 0;\nParser.COMBINATOR_TYPE = 1;\nParser.MEDIA_FEATURE_TYPE = 2;\nParser.MEDIA_QUERY_TYPE = 3;\nParser.PROPERTY_NAME_TYPE = 4;\nParser.PROPERTY_VALUE_TYPE = 5;\nParser.PROPERTY_VALUE_PART_TYPE = 6;\nParser.SELECTOR_TYPE = 7;\nParser.SELECTOR_PART_TYPE = 8;\nParser.SELECTOR_SUB_PART_TYPE = 9;\n\nParser.prototype = function(){\n\n    var proto = new EventTarget(),  //new prototype\n        prop,\n        additions =  {\n            constructor: Parser,\n            DEFAULT_TYPE : 0,\n            COMBINATOR_TYPE : 1,\n            MEDIA_FEATURE_TYPE : 2,\n            MEDIA_QUERY_TYPE : 3,\n            PROPERTY_NAME_TYPE : 4,\n            PROPERTY_VALUE_TYPE : 5,\n            PROPERTY_VALUE_PART_TYPE : 6,\n            SELECTOR_TYPE : 7,\n            SELECTOR_PART_TYPE : 8,\n            SELECTOR_SUB_PART_TYPE : 9,\n\n            _stylesheet: function(){\n\n                var tokenStream = this._tokenStream,\n                    charset     = null,\n                    count,\n                    token,\n                    tt;\n\n                this.fire(\"startstylesheet\");\n                this._charset();\n\n                this._skipCruft();\n                while (tokenStream.peek() == Tokens.IMPORT_SYM){\n                    this._import();\n                    this._skipCruft();\n                }\n                while (tokenStream.peek() == Tokens.NAMESPACE_SYM){\n                    this._namespace();\n                    this._skipCruft();\n                }\n                tt = tokenStream.peek();\n                while(tt > Tokens.EOF){\n\n                    try {\n\n                        switch(tt){\n                            case Tokens.MEDIA_SYM:\n                                this._media();\n                                this._skipCruft();\n                                break;\n                            case Tokens.PAGE_SYM:\n                                this._page();\n                                this._skipCruft();\n                                break;\n                            case Tokens.FONT_FACE_SYM:\n                                this._font_face();\n                                this._skipCruft();\n                                break;\n                            case Tokens.KEYFRAMES_SYM:\n                                this._keyframes();\n                                this._skipCruft();\n                                break;\n                            case Tokens.VIEWPORT_SYM:\n                                this._viewport();\n                                this._skipCruft();\n                                break;\n                            case Tokens.UNKNOWN_SYM:  //unknown @ rule\n                                tokenStream.get();\n                                if (!this.options.strict){\n                                    this.fire({\n                                        type:       \"error\",\n                                        error:      null,\n                                        message:    \"Unknown @ rule: \" + tokenStream.LT(0).value + \".\",\n                                        line:       tokenStream.LT(0).startLine,\n                                        col:        tokenStream.LT(0).startCol\n                                    });\n                                    count=0;\n                                    while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE){\n                                        count++;    //keep track of nesting depth\n                                    }\n\n                                    while(count){\n                                        tokenStream.advance([Tokens.RBRACE]);\n                                        count--;\n                                    }\n\n                                } else {\n                                    throw new SyntaxError(\"Unknown @ rule.\", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol);\n                                }\n                                break;\n                            case Tokens.S:\n                                this._readWhitespace();\n                                break;\n                            default:\n                                if(!this._ruleset()){\n                                    switch(tt){\n                                        case Tokens.CHARSET_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._charset(false);\n                                            throw new SyntaxError(\"@charset not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.IMPORT_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._import(false);\n                                            throw new SyntaxError(\"@import not allowed here.\", token.startLine, token.startCol);\n                                        case Tokens.NAMESPACE_SYM:\n                                            token = tokenStream.LT(1);\n                                            this._namespace(false);\n                                            throw new SyntaxError(\"@namespace not allowed here.\", token.startLine, token.startCol);\n                                        default:\n                                            tokenStream.get();  //get the last token\n                                            this._unexpectedToken(tokenStream.token());\n                                    }\n\n                                }\n                        }\n                    } catch(ex) {\n                        if (ex instanceof SyntaxError && !this.options.strict){\n                            this.fire({\n                                type:       \"error\",\n                                error:      ex,\n                                message:    ex.message,\n                                line:       ex.line,\n                                col:        ex.col\n                            });\n                        } else {\n                            throw ex;\n                        }\n                    }\n\n                    tt = tokenStream.peek();\n                }\n\n                if (tt != Tokens.EOF){\n                    this._unexpectedToken(tokenStream.token());\n                }\n\n                this.fire(\"endstylesheet\");\n            },\n\n            _charset: function(emit){\n                var tokenStream = this._tokenStream,\n                    charset,\n                    token,\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.CHARSET_SYM)){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.STRING);\n\n                    token = tokenStream.token();\n                    charset = token.value;\n\n                    this._readWhitespace();\n                    tokenStream.mustMatch(Tokens.SEMICOLON);\n\n                    if (emit !== false){\n                        this.fire({\n                            type:   \"charset\",\n                            charset:charset,\n                            line:   line,\n                            col:    col\n                        });\n                    }\n                }\n            },\n\n            _import: function(emit){\n\n                var tokenStream = this._tokenStream,\n                    tt,\n                    uri,\n                    importToken,\n                    mediaList   = [];\n                tokenStream.mustMatch(Tokens.IMPORT_SYM);\n                importToken = tokenStream.token();\n                this._readWhitespace();\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n                uri = tokenStream.token().value.replace(/^(?:url\\()?[\"']?([^\"']+?)[\"']?\\)?$/, \"$1\");\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false){\n                    this.fire({\n                        type:   \"import\",\n                        uri:    uri,\n                        media:  mediaList,\n                        line:   importToken.startLine,\n                        col:    importToken.startCol\n                    });\n                }\n\n            },\n\n            _namespace: function(emit){\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    prefix,\n                    uri;\n                tokenStream.mustMatch(Tokens.NAMESPACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n                this._readWhitespace();\n                if (tokenStream.match(Tokens.IDENT)){\n                    prefix = tokenStream.token().value;\n                    this._readWhitespace();\n                }\n\n                tokenStream.mustMatch([Tokens.STRING, Tokens.URI]);\n                uri = tokenStream.token().value.replace(/(?:url\\()?[\"']([^\"']+)[\"']\\)?/, \"$1\");\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.SEMICOLON);\n                this._readWhitespace();\n\n                if (emit !== false){\n                    this.fire({\n                        type:   \"namespace\",\n                        prefix: prefix,\n                        uri:    uri,\n                        line:   line,\n                        col:    col\n                    });\n                }\n\n            },\n\n            _media: function(){\n                var tokenStream     = this._tokenStream,\n                    line,\n                    col,\n                    mediaList;//       = [];\n                tokenStream.mustMatch(Tokens.MEDIA_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                mediaList = this._media_query_list();\n\n                tokenStream.mustMatch(Tokens.LBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n\n                while(true) {\n                    if (tokenStream.peek() == Tokens.PAGE_SYM){\n                        this._page();\n                    } else if (tokenStream.peek() == Tokens.FONT_FACE_SYM){\n                        this._font_face();\n                    } else if (tokenStream.peek() == Tokens.VIEWPORT_SYM){\n                        this._viewport();\n                    } else if (!this._ruleset()){\n                        break;\n                    }\n                }\n\n                tokenStream.mustMatch(Tokens.RBRACE);\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"endmedia\",\n                    media:  mediaList,\n                    line:   line,\n                    col:    col\n                });\n            },\n            _media_query_list: function(){\n                var tokenStream = this._tokenStream,\n                    mediaList   = [];\n\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() == Tokens.IDENT || tokenStream.peek() == Tokens.LPAREN){\n                    mediaList.push(this._media_query());\n                }\n\n                while(tokenStream.match(Tokens.COMMA)){\n                    this._readWhitespace();\n                    mediaList.push(this._media_query());\n                }\n\n                return mediaList;\n            },\n            _media_query: function(){\n                var tokenStream = this._tokenStream,\n                    type        = null,\n                    ident       = null,\n                    token       = null,\n                    expressions = [];\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    ident = tokenStream.token().value.toLowerCase();\n                    if (ident != \"only\" && ident != \"not\"){\n                        tokenStream.unget();\n                        ident = null;\n                    } else {\n                        token = tokenStream.token();\n                    }\n                }\n\n                this._readWhitespace();\n\n                if (tokenStream.peek() == Tokens.IDENT){\n                    type = this._media_type();\n                    if (token === null){\n                        token = tokenStream.token();\n                    }\n                } else if (tokenStream.peek() == Tokens.LPAREN){\n                    if (token === null){\n                        token = tokenStream.LT(1);\n                    }\n                    expressions.push(this._media_expression());\n                }\n\n                if (type === null && expressions.length === 0){\n                    return null;\n                } else {\n                    this._readWhitespace();\n                    while (tokenStream.match(Tokens.IDENT)){\n                        if (tokenStream.token().value.toLowerCase() != \"and\"){\n                            this._unexpectedToken(tokenStream.token());\n                        }\n\n                        this._readWhitespace();\n                        expressions.push(this._media_expression());\n                    }\n                }\n\n                return new MediaQuery(ident, type, expressions, token.startLine, token.startCol);\n            },\n            _media_type: function(){\n                return this._media_feature();\n            },\n            _media_expression: function(){\n                var tokenStream = this._tokenStream,\n                    feature     = null,\n                    token,\n                    expression  = null;\n\n                tokenStream.mustMatch(Tokens.LPAREN);\n\n                feature = this._media_feature();\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.COLON)){\n                    this._readWhitespace();\n                    token = tokenStream.LT(1);\n                    expression = this._expression();\n                }\n\n                tokenStream.mustMatch(Tokens.RPAREN);\n                this._readWhitespace();\n\n                return new MediaFeature(feature, (expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null));\n            },\n            _media_feature: function(){\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n            _page: function(){\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    identifier  = null,\n                    pseudoPage  = null;\n                tokenStream.mustMatch(Tokens.PAGE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    identifier = tokenStream.token().value;\n                    if (identifier.toLowerCase() === \"auto\"){\n                        this._unexpectedToken(tokenStream.token());\n                    }\n                }\n                if (tokenStream.peek() == Tokens.COLON){\n                    pseudoPage = this._pseudo_page();\n                }\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true, true);\n\n                this.fire({\n                    type:   \"endpage\",\n                    id:     identifier,\n                    pseudo: pseudoPage,\n                    line:   line,\n                    col:    col\n                });\n\n            },\n            _margin: function(){\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    marginSym   = this._margin_sym();\n\n                if (marginSym){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this.fire({\n                        type: \"startpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type: \"endpagemargin\",\n                        margin: marginSym,\n                        line:   line,\n                        col:    col\n                    });\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n            _margin_sym: function(){\n\n                var tokenStream = this._tokenStream;\n\n                if(tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM,\n                        Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM,\n                        Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM,\n                        Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM,\n                        Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM,\n                        Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM,\n                        Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM]))\n                {\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else {\n                    return null;\n                }\n\n            },\n\n            _pseudo_page: function(){\n\n                var tokenStream = this._tokenStream;\n\n                tokenStream.mustMatch(Tokens.COLON);\n                tokenStream.mustMatch(Tokens.IDENT);\n\n                return tokenStream.token().value;\n            },\n\n            _font_face: function(){\n                var tokenStream = this._tokenStream,\n                    line,\n                    col;\n                tokenStream.mustMatch(Tokens.FONT_FACE_SYM);\n                line = tokenStream.token().startLine;\n                col = tokenStream.token().startCol;\n\n                this._readWhitespace();\n\n                this.fire({\n                    type:   \"startfontface\",\n                    line:   line,\n                    col:    col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endfontface\",\n                    line:   line,\n                    col:    col\n                });\n            },\n\n            _viewport: function(){\n                 var tokenStream = this._tokenStream,\n                    line,\n                    col;\n\n                    tokenStream.mustMatch(Tokens.VIEWPORT_SYM);\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n\n                    this._readWhitespace();\n\n                    this.fire({\n                        type:   \"startviewport\",\n                        line:   line,\n                        col:    col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type:   \"endviewport\",\n                        line:   line,\n                        col:    col\n                    });\n\n            },\n\n            _operator: function(inFunction){\n\n                var tokenStream = this._tokenStream,\n                    token       = null;\n\n                if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) ||\n                    (inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))){\n                    token =  tokenStream.token();\n                    this._readWhitespace();\n                }\n                return token ? PropertyValuePart.fromToken(token) : null;\n\n            },\n\n            _combinator: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    token;\n\n                if(tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])){\n                    token = tokenStream.token();\n                    value = new Combinator(token.value, token.startLine, token.startCol);\n                    this._readWhitespace();\n                }\n\n                return value;\n            },\n\n            _unary_operator: function(){\n\n                var tokenStream = this._tokenStream;\n\n                if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])){\n                    return tokenStream.token().value;\n                } else {\n                    return null;\n                }\n            },\n\n            _property: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    hack        = null,\n                    tokenValue,\n                    token,\n                    line,\n                    col;\n                if (tokenStream.peek() == Tokens.STAR && this.options.starHack){\n                    tokenStream.get();\n                    token = tokenStream.token();\n                    hack = token.value;\n                    line = token.startLine;\n                    col = token.startCol;\n                }\n\n                if(tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n                    tokenValue = token.value;\n                    if (tokenValue.charAt(0) == \"_\" && this.options.underscoreHack){\n                        hack = \"_\";\n                        tokenValue = tokenValue.substring(1);\n                    }\n\n                    value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol));\n                    this._readWhitespace();\n                }\n\n                return value;\n            },\n            _ruleset: function(){\n\n                var tokenStream = this._tokenStream,\n                    tt,\n                    selectors;\n                try {\n                    selectors = this._selectors_group();\n                } catch (ex){\n                    if (ex instanceof SyntaxError && !this.options.strict){\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n                        tt = tokenStream.advance([Tokens.RBRACE]);\n                        if (tt == Tokens.RBRACE){\n                        } else {\n                            throw ex;\n                        }\n\n                    } else {\n                        throw ex;\n                    }\n                    return true;\n                }\n                if (selectors){\n\n                    this.fire({\n                        type:       \"startrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                    this._readDeclarations(true);\n\n                    this.fire({\n                        type:       \"endrule\",\n                        selectors:  selectors,\n                        line:       selectors[0].line,\n                        col:        selectors[0].col\n                    });\n\n                }\n\n                return selectors;\n\n            },\n            _selectors_group: function(){\n                var tokenStream = this._tokenStream,\n                    selectors   = [],\n                    selector;\n\n                selector = this._selector();\n                if (selector !== null){\n\n                    selectors.push(selector);\n                    while(tokenStream.match(Tokens.COMMA)){\n                        this._readWhitespace();\n                        selector = this._selector();\n                        if (selector !== null){\n                            selectors.push(selector);\n                        } else {\n                            this._unexpectedToken(tokenStream.LT(1));\n                        }\n                    }\n                }\n\n                return selectors.length ? selectors : null;\n            },\n            _selector: function(){\n\n                var tokenStream = this._tokenStream,\n                    selector    = [],\n                    nextSelector = null,\n                    combinator  = null,\n                    ws          = null;\n                nextSelector = this._simple_selector_sequence();\n                if (nextSelector === null){\n                    return null;\n                }\n\n                selector.push(nextSelector);\n\n                do {\n                    combinator = this._combinator();\n\n                    if (combinator !== null){\n                        selector.push(combinator);\n                        nextSelector = this._simple_selector_sequence();\n                        if (nextSelector === null){\n                            this._unexpectedToken(tokenStream.LT(1));\n                        } else {\n                            selector.push(nextSelector);\n                        }\n                    } else {\n                        if (this._readWhitespace()){\n                            ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol);\n                            combinator = this._combinator();\n                            nextSelector = this._simple_selector_sequence();\n                            if (nextSelector === null){\n                                if (combinator !== null){\n                                    this._unexpectedToken(tokenStream.LT(1));\n                                }\n                            } else {\n\n                                if (combinator !== null){\n                                    selector.push(combinator);\n                                } else {\n                                    selector.push(ws);\n                                }\n\n                                selector.push(nextSelector);\n                            }\n                        } else {\n                            break;\n                        }\n\n                    }\n                } while(true);\n\n                return new Selector(selector, selector[0].line, selector[0].col);\n            },\n            _simple_selector_sequence: function(){\n\n                var tokenStream = this._tokenStream,\n                    elementName = null,\n                    modifiers   = [],\n                    selectorText= \"\",\n                    components  = [\n                        function(){\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo,\n                        this._negation\n                    ],\n                    i           = 0,\n                    len         = components.length,\n                    component   = null,\n                    found       = false,\n                    line,\n                    col;\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                elementName = this._type_selector();\n                if (!elementName){\n                    elementName = this._universal();\n                }\n\n                if (elementName !== null){\n                    selectorText += elementName;\n                }\n\n                while(true){\n                    if (tokenStream.peek() === Tokens.S){\n                        break;\n                    }\n                    while(i < len && component === null){\n                        component = components[i++].call(this);\n                    }\n\n                    if (component === null){\n                        if (selectorText === \"\"){\n                            return null;\n                        } else {\n                            break;\n                        }\n                    } else {\n                        i = 0;\n                        modifiers.push(component);\n                        selectorText += component.toString();\n                        component = null;\n                    }\n                }\n\n\n                return selectorText !== \"\" ?\n                        new SelectorPart(elementName, modifiers, selectorText, line, col) :\n                        null;\n            },\n            _type_selector: function(){\n\n                var tokenStream = this._tokenStream,\n                    ns          = this._namespace_prefix(),\n                    elementName = this._element_name();\n\n                if (!elementName){\n                    if (ns){\n                        tokenStream.unget();\n                        if (ns.length > 1){\n                            tokenStream.unget();\n                        }\n                    }\n\n                    return null;\n                } else {\n                    if (ns){\n                        elementName.text = ns + elementName.text;\n                        elementName.col -= ns.length;\n                    }\n                    return elementName;\n                }\n            },\n            _class: function(){\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.DOT)){\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    token = tokenStream.token();\n                    return new SelectorSubPart(\".\" + token.value, \"class\", token.startLine, token.startCol - 1);\n                } else {\n                    return null;\n                }\n\n            },\n            _element_name: function(){\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n                    return new SelectorSubPart(token.value, \"elementName\", token.startLine, token.startCol);\n\n                } else {\n                    return null;\n                }\n            },\n            _namespace_prefix: function(){\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n                if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE){\n\n                    if(tokenStream.match([Tokens.IDENT, Tokens.STAR])){\n                        value += tokenStream.token().value;\n                    }\n\n                    tokenStream.mustMatch(Tokens.PIPE);\n                    value += \"|\";\n\n                }\n\n                return value.length ? value : null;\n            },\n            _universal: function(){\n                var tokenStream = this._tokenStream,\n                    value       = \"\",\n                    ns;\n\n                ns = this._namespace_prefix();\n                if(ns){\n                    value += ns;\n                }\n\n                if(tokenStream.match(Tokens.STAR)){\n                    value += \"*\";\n                }\n\n                return value.length ? value : null;\n\n           },\n            _attrib: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = null,\n                    ns,\n                    token;\n\n                if (tokenStream.match(Tokens.LBRACKET)){\n                    token = tokenStream.token();\n                    value = token.value;\n                    value += this._readWhitespace();\n\n                    ns = this._namespace_prefix();\n\n                    if (ns){\n                        value += ns;\n                    }\n\n                    tokenStream.mustMatch(Tokens.IDENT);\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n\n                    if(tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH,\n                            Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])){\n\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n\n                        tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                        value += tokenStream.token().value;\n                        value += this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACKET);\n\n                    return new SelectorSubPart(value + \"]\", \"attribute\", token.startLine, token.startCol);\n                } else {\n                    return null;\n                }\n            },\n            _pseudo: function(){\n\n                var tokenStream = this._tokenStream,\n                    pseudo      = null,\n                    colons      = \":\",\n                    line,\n                    col;\n\n                if (tokenStream.match(Tokens.COLON)){\n\n                    if (tokenStream.match(Tokens.COLON)){\n                        colons += \":\";\n                    }\n\n                    if (tokenStream.match(Tokens.IDENT)){\n                        pseudo = tokenStream.token().value;\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol - colons.length;\n                    } else if (tokenStream.peek() == Tokens.FUNCTION){\n                        line = tokenStream.LT(1).startLine;\n                        col = tokenStream.LT(1).startCol - colons.length;\n                        pseudo = this._functional_pseudo();\n                    }\n\n                    if (pseudo){\n                        pseudo = new SelectorSubPart(colons + pseudo, \"pseudo\", line, col);\n                    }\n                }\n\n                return pseudo;\n            },\n            _functional_pseudo: function(){\n\n                var tokenStream = this._tokenStream,\n                    value = null;\n\n                if(tokenStream.match(Tokens.FUNCTION)){\n                    value = tokenStream.token().value;\n                    value += this._readWhitespace();\n                    value += this._expression();\n                    tokenStream.mustMatch(Tokens.RPAREN);\n                    value += \")\";\n                }\n\n                return value;\n            },\n            _expression: function(){\n\n                var tokenStream = this._tokenStream,\n                    value       = \"\";\n\n                while(tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION,\n                        Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH,\n                        Tokens.FREQ, Tokens.ANGLE, Tokens.TIME,\n                        Tokens.RESOLUTION, Tokens.SLASH])){\n\n                    value += tokenStream.token().value;\n                    value += this._readWhitespace();\n                }\n\n                return value.length ? value : null;\n\n            },\n            _negation: function(){\n\n                var tokenStream = this._tokenStream,\n                    line,\n                    col,\n                    value       = \"\",\n                    arg,\n                    subpart     = null;\n\n                if (tokenStream.match(Tokens.NOT)){\n                    value = tokenStream.token().value;\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                    value += this._readWhitespace();\n                    arg = this._negation_arg();\n                    value += arg;\n                    value += this._readWhitespace();\n                    tokenStream.match(Tokens.RPAREN);\n                    value += tokenStream.token().value;\n\n                    subpart = new SelectorSubPart(value, \"not\", line, col);\n                    subpart.args.push(arg);\n                }\n\n                return subpart;\n            },\n            _negation_arg: function(){\n\n                var tokenStream = this._tokenStream,\n                    args        = [\n                        this._type_selector,\n                        this._universal,\n                        function(){\n                            return tokenStream.match(Tokens.HASH) ?\n                                    new SelectorSubPart(tokenStream.token().value, \"id\", tokenStream.token().startLine, tokenStream.token().startCol) :\n                                    null;\n                        },\n                        this._class,\n                        this._attrib,\n                        this._pseudo\n                    ],\n                    arg         = null,\n                    i           = 0,\n                    len         = args.length,\n                    elementName,\n                    line,\n                    col,\n                    part;\n\n                line = tokenStream.LT(1).startLine;\n                col = tokenStream.LT(1).startCol;\n\n                while(i < len && arg === null){\n\n                    arg = args[i].call(this);\n                    i++;\n                }\n                if (arg === null){\n                    this._unexpectedToken(tokenStream.LT(1));\n                }\n                if (arg.type == \"elementName\"){\n                    part = new SelectorPart(arg, [], arg.toString(), line, col);\n                } else {\n                    part = new SelectorPart(null, [arg], arg.toString(), line, col);\n                }\n\n                return part;\n            },\n\n            _declaration: function(){\n\n                var tokenStream = this._tokenStream,\n                    property    = null,\n                    expr        = null,\n                    prio        = null,\n                    error       = null,\n                    invalid     = null,\n                    propertyName= \"\";\n\n                property = this._property();\n                if (property !== null){\n\n                    tokenStream.mustMatch(Tokens.COLON);\n                    this._readWhitespace();\n\n                    expr = this._expr();\n                    if (!expr || expr.length === 0){\n                        this._unexpectedToken(tokenStream.LT(1));\n                    }\n\n                    prio = this._prio();\n                    propertyName = property.toString();\n                    if (this.options.starHack && property.hack == \"*\" ||\n                            this.options.underscoreHack && property.hack == \"_\") {\n\n                        propertyName = property.text;\n                    }\n\n                    try {\n                        this._validateProperty(propertyName, expr);\n                    } catch (ex) {\n                        invalid = ex;\n                    }\n\n                    this.fire({\n                        type:       \"property\",\n                        property:   property,\n                        value:      expr,\n                        important:  prio,\n                        line:       property.line,\n                        col:        property.col,\n                        invalid:    invalid\n                    });\n\n                    return true;\n                } else {\n                    return false;\n                }\n            },\n\n            _prio: function(){\n\n                var tokenStream = this._tokenStream,\n                    result      = tokenStream.match(Tokens.IMPORTANT_SYM);\n\n                this._readWhitespace();\n                return result;\n            },\n\n            _expr: function(inFunction){\n\n                var tokenStream = this._tokenStream,\n                    values      = [],\n                    value       = null,\n                    operator    = null;\n\n                value = this._term(inFunction);\n                if (value !== null){\n\n                    values.push(value);\n\n                    do {\n                        operator = this._operator(inFunction);\n                        if (operator){\n                            values.push(operator);\n                        } /*else {\n                            values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col));\n                            valueParts = [];\n                        }*/\n\n                        value = this._term(inFunction);\n\n                        if (value === null){\n                            break;\n                        } else {\n                            values.push(value);\n                        }\n                    } while(true);\n                }\n\n                return values.length > 0 ? new PropertyValue(values, values[0].line, values[0].col) : null;\n            },\n\n            _term: function(inFunction){\n\n                var tokenStream = this._tokenStream,\n                    unary       = null,\n                    value       = null,\n                    endChar     = null,\n                    token,\n                    line,\n                    col;\n                unary = this._unary_operator();\n                if (unary !== null){\n                    line = tokenStream.token().startLine;\n                    col = tokenStream.token().startCol;\n                }\n                if (tokenStream.peek() == Tokens.IE_FUNCTION && this.options.ieFilters){\n\n                    value = this._ie_function();\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                } else if (inFunction && tokenStream.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET])){\n\n                    token = tokenStream.token();\n                    endChar = token.endChar;\n                    value = token.value + this._expr(inFunction).text;\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                    tokenStream.mustMatch(Tokens.type(endChar));\n                    value += endChar;\n                    this._readWhitespace();\n                } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH,\n                        Tokens.ANGLE, Tokens.TIME,\n                        Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])){\n\n                    value = tokenStream.token().value;\n                    if (unary === null){\n                        line = tokenStream.token().startLine;\n                        col = tokenStream.token().startCol;\n                    }\n                    this._readWhitespace();\n                } else {\n                    token = this._hexcolor();\n                    if (token === null){\n                        if (unary === null){\n                            line = tokenStream.LT(1).startLine;\n                            col = tokenStream.LT(1).startCol;\n                        }\n                        if (value === null){\n                            if (tokenStream.LA(3) == Tokens.EQUALS && this.options.ieFilters){\n                                value = this._ie_function();\n                            } else {\n                                value = this._function();\n                            }\n                        }\n\n                    } else {\n                        value = token.value;\n                        if (unary === null){\n                            line = token.startLine;\n                            col = token.startCol;\n                        }\n                    }\n\n                }\n\n                return value !== null ?\n                        new PropertyValuePart(unary !== null ? unary + value : value, line, col) :\n                        null;\n\n            },\n\n            _function: function(){\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    expr        = null,\n                    lt;\n\n                if (tokenStream.match(Tokens.FUNCTION)){\n                    functionText = tokenStream.token().value;\n                    this._readWhitespace();\n                    expr = this._expr(true);\n                    functionText += expr;\n                    if (this.options.ieFilters && tokenStream.peek() == Tokens.EQUALS){\n                        do {\n\n                            if (this._readWhitespace()){\n                                functionText += tokenStream.token().value;\n                            }\n                            if (tokenStream.LA(0) == Tokens.COMMA){\n                                functionText += tokenStream.token().value;\n                            }\n\n                            tokenStream.match(Tokens.IDENT);\n                            functionText += tokenStream.token().value;\n\n                            tokenStream.match(Tokens.EQUALS);\n                            functionText += tokenStream.token().value;\n                            lt = tokenStream.peek();\n                            while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){\n                                tokenStream.get();\n                                functionText += tokenStream.token().value;\n                                lt = tokenStream.peek();\n                            }\n                        } while(tokenStream.match([Tokens.COMMA, Tokens.S]));\n                    }\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _ie_function: function(){\n\n                var tokenStream = this._tokenStream,\n                    functionText = null,\n                    expr        = null,\n                    lt;\n                if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])){\n                    functionText = tokenStream.token().value;\n\n                    do {\n\n                        if (this._readWhitespace()){\n                            functionText += tokenStream.token().value;\n                        }\n                        if (tokenStream.LA(0) == Tokens.COMMA){\n                            functionText += tokenStream.token().value;\n                        }\n\n                        tokenStream.match(Tokens.IDENT);\n                        functionText += tokenStream.token().value;\n\n                        tokenStream.match(Tokens.EQUALS);\n                        functionText += tokenStream.token().value;\n                        lt = tokenStream.peek();\n                        while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){\n                            tokenStream.get();\n                            functionText += tokenStream.token().value;\n                            lt = tokenStream.peek();\n                        }\n                    } while(tokenStream.match([Tokens.COMMA, Tokens.S]));\n\n                    tokenStream.match(Tokens.RPAREN);\n                    functionText += \")\";\n                    this._readWhitespace();\n                }\n\n                return functionText;\n            },\n\n            _hexcolor: function(){\n\n                var tokenStream = this._tokenStream,\n                    token = null,\n                    color;\n\n                if(tokenStream.match(Tokens.HASH)){\n\n                    token = tokenStream.token();\n                    color = token.value;\n                    if (!/#[a-f0-9]{3,6}/i.test(color)){\n                        throw new SyntaxError(\"Expected a hex color but found '\" + color + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n                    }\n                    this._readWhitespace();\n                }\n\n                return token;\n            },\n\n            _keyframes: function(){\n                var tokenStream = this._tokenStream,\n                    token,\n                    tt,\n                    name,\n                    prefix = \"\";\n\n                tokenStream.mustMatch(Tokens.KEYFRAMES_SYM);\n                token = tokenStream.token();\n                if (/^@\\-([^\\-]+)\\-/.test(token.value)) {\n                    prefix = RegExp.$1;\n                }\n\n                this._readWhitespace();\n                name = this._keyframe_name();\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.LBRACE);\n\n                this.fire({\n                    type:   \"startkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tt = tokenStream.peek();\n                while(tt == Tokens.IDENT || tt == Tokens.PERCENTAGE) {\n                    this._keyframe_rule();\n                    this._readWhitespace();\n                    tt = tokenStream.peek();\n                }\n\n                this.fire({\n                    type:   \"endkeyframes\",\n                    name:   name,\n                    prefix: prefix,\n                    line:   token.startLine,\n                    col:    token.startCol\n                });\n\n                this._readWhitespace();\n                tokenStream.mustMatch(Tokens.RBRACE);\n\n            },\n\n            _keyframe_name: function(){\n                var tokenStream = this._tokenStream,\n                    token;\n\n                tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]);\n                return SyntaxUnit.fromToken(tokenStream.token());\n            },\n\n            _keyframe_rule: function(){\n                var tokenStream = this._tokenStream,\n                    token,\n                    keyList = this._key_list();\n\n                this.fire({\n                    type:   \"startkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n                this._readDeclarations(true);\n\n                this.fire({\n                    type:   \"endkeyframerule\",\n                    keys:   keyList,\n                    line:   keyList[0].line,\n                    col:    keyList[0].col\n                });\n\n            },\n\n            _key_list: function(){\n                var tokenStream = this._tokenStream,\n                    token,\n                    key,\n                    keyList = [];\n                keyList.push(this._key());\n\n                this._readWhitespace();\n\n                while(tokenStream.match(Tokens.COMMA)){\n                    this._readWhitespace();\n                    keyList.push(this._key());\n                    this._readWhitespace();\n                }\n\n                return keyList;\n            },\n\n            _key: function(){\n\n                var tokenStream = this._tokenStream,\n                    token;\n\n                if (tokenStream.match(Tokens.PERCENTAGE)){\n                    return SyntaxUnit.fromToken(tokenStream.token());\n                } else if (tokenStream.match(Tokens.IDENT)){\n                    token = tokenStream.token();\n\n                    if (/from|to/i.test(token.value)){\n                        return SyntaxUnit.fromToken(token);\n                    }\n\n                    tokenStream.unget();\n                }\n                this._unexpectedToken(tokenStream.LT(1));\n            },\n            _skipCruft: function(){\n                while(this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])){\n                }\n            },\n            _readDeclarations: function(checkStart, readMargins){\n                var tokenStream = this._tokenStream,\n                    tt;\n\n\n                this._readWhitespace();\n\n                if (checkStart){\n                    tokenStream.mustMatch(Tokens.LBRACE);\n                }\n\n                this._readWhitespace();\n\n                try {\n\n                    while(true){\n\n                        if (tokenStream.match(Tokens.SEMICOLON) || (readMargins && this._margin())){\n                        } else if (this._declaration()){\n                            if (!tokenStream.match(Tokens.SEMICOLON)){\n                                break;\n                            }\n                        } else {\n                            break;\n                        }\n                        this._readWhitespace();\n                    }\n\n                    tokenStream.mustMatch(Tokens.RBRACE);\n                    this._readWhitespace();\n\n                } catch (ex) {\n                    if (ex instanceof SyntaxError && !this.options.strict){\n                        this.fire({\n                            type:       \"error\",\n                            error:      ex,\n                            message:    ex.message,\n                            line:       ex.line,\n                            col:        ex.col\n                        });\n                        tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]);\n                        if (tt == Tokens.SEMICOLON){\n                            this._readDeclarations(false, readMargins);\n                        } else if (tt != Tokens.RBRACE){\n                            throw ex;\n                        }\n\n                    } else {\n                        throw ex;\n                    }\n                }\n\n            },\n            _readWhitespace: function(){\n\n                var tokenStream = this._tokenStream,\n                    ws = \"\";\n\n                while(tokenStream.match(Tokens.S)){\n                    ws += tokenStream.token().value;\n                }\n\n                return ws;\n            },\n            _unexpectedToken: function(token){\n                throw new SyntaxError(\"Unexpected token '\" + token.value + \"' at line \" + token.startLine + \", col \" + token.startCol + \".\", token.startLine, token.startCol);\n            },\n            _verifyEnd: function(){\n                if (this._tokenStream.LA(1) != Tokens.EOF){\n                    this._unexpectedToken(this._tokenStream.LT(1));\n                }\n            },\n            _validateProperty: function(property, value){\n                Validation.validate(property, value);\n            },\n\n            parse: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._stylesheet();\n            },\n\n            parseStyleSheet: function(input){\n                return this.parse(input);\n            },\n\n            parseMediaQuery: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                var result = this._media_query();\n                this._verifyEnd();\n                return result;\n            },\n            parsePropertyValue: function(input){\n\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._expr();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseRule: function(input){\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._ruleset();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseSelector: function(input){\n\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readWhitespace();\n\n                var result = this._selector();\n                this._readWhitespace();\n                this._verifyEnd();\n                return result;\n            },\n            parseStyleAttribute: function(input){\n                input += \"}\"; // for error recovery in _readDeclarations()\n                this._tokenStream = new TokenStream(input, Tokens);\n                this._readDeclarations();\n            }\n        };\n    for (prop in additions){\n        if (additions.hasOwnProperty(prop)){\n            proto[prop] = additions[prop];\n        }\n    }\n\n    return proto;\n}();\nvar Properties = {\n    \"align-items\"                   : \"flex-start | flex-end | center | baseline | stretch\",\n    \"align-content\"                 : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"align-self\"                    : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"-webkit-align-items\"           : \"flex-start | flex-end | center | baseline | stretch\",\n    \"-webkit-align-content\"         : \"flex-start | flex-end | center | space-between | space-around | stretch\",\n    \"-webkit-align-self\"            : \"auto | flex-start | flex-end | center | baseline | stretch\",\n    \"alignment-adjust\"              : \"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>\",\n    \"alignment-baseline\"            : \"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"animation\"                     : 1,\n    \"animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"animation-fill-mode\"           : { multi: \"none | forwards | backwards | both\", comma: true },\n    \"animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"animation-play-state\"          : { multi: \"running | paused\", comma: true },\n    \"animation-timing-function\"     : 1,\n    \"-moz-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-moz-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-moz-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-moz-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-moz-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-moz-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-ms-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-ms-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-ms-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-ms-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-ms-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-ms-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-webkit-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-webkit-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-webkit-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-webkit-animation-fill-mode\"           : { multi: \"none | forwards | backwards | both\", comma: true },\n    \"-webkit-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-webkit-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-webkit-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"-o-animation-delay\"               : { multi: \"<time>\", comma: true },\n    \"-o-animation-direction\"           : { multi: \"normal | reverse | alternate | alternate-reverse\", comma: true },\n    \"-o-animation-duration\"            : { multi: \"<time>\", comma: true },\n    \"-o-animation-iteration-count\"     : { multi: \"<number> | infinite\", comma: true },\n    \"-o-animation-name\"                : { multi: \"none | <ident>\", comma: true },\n    \"-o-animation-play-state\"          : { multi: \"running | paused\", comma: true },\n\n    \"appearance\"                    : \"icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | none | inherit\",\n    \"azimuth\"                       : function (expression) {\n        var simple      = \"<angle> | leftwards | rightwards | inherit\",\n            direction   = \"left-side | far-left | left | center-left | center | center-right | right | far-right | right-side\",\n            behind      = false,\n            valid       = false,\n            part;\n\n        if (!ValidationTypes.isAny(expression, simple)) {\n            if (ValidationTypes.isAny(expression, \"behind\")) {\n                behind = true;\n                valid = true;\n            }\n\n            if (ValidationTypes.isAny(expression, direction)) {\n                valid = true;\n                if (!behind) {\n                    ValidationTypes.isAny(expression, \"behind\");\n                }\n            }\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (<'azimuth'>) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"backface-visibility\"           : \"visible | hidden\",\n    \"background\"                    : 1,\n    \"background-attachment\"         : { multi: \"<attachment>\", comma: true },\n    \"background-clip\"               : { multi: \"<box>\", comma: true },\n    \"background-color\"              : \"<color> | inherit\",\n    \"background-image\"              : { multi: \"<bg-image>\", comma: true },\n    \"background-origin\"             : { multi: \"<box>\", comma: true },\n    \"background-position\"           : { multi: \"<bg-position>\", comma: true },\n    \"background-repeat\"             : { multi: \"<repeat-style>\" },\n    \"background-size\"               : { multi: \"<bg-size>\", comma: true },\n    \"baseline-shift\"                : \"baseline | sub | super | <percentage> | <length>\",\n    \"behavior\"                      : 1,\n    \"binding\"                       : 1,\n    \"bleed\"                         : \"<length>\",\n    \"bookmark-label\"                : \"<content> | <attr> | <string>\",\n    \"bookmark-level\"                : \"none | <integer>\",\n    \"bookmark-state\"                : \"open | closed\",\n    \"bookmark-target\"               : \"none | <uri> | <attr>\",\n    \"border\"                        : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom\"                 : \"<border-width> || <border-style> || <color>\",\n    \"border-bottom-color\"           : \"<color> | inherit\",\n    \"border-bottom-left-radius\"     :  \"<x-one-radius>\",\n    \"border-bottom-right-radius\"    :  \"<x-one-radius>\",\n    \"border-bottom-style\"           : \"<border-style>\",\n    \"border-bottom-width\"           : \"<border-width>\",\n    \"border-collapse\"               : \"collapse | separate | inherit\",\n    \"border-color\"                  : { multi: \"<color> | inherit\", max: 4 },\n    \"border-image\"                  : 1,\n    \"border-image-outset\"           : { multi: \"<length> | <number>\", max: 4 },\n    \"border-image-repeat\"           : { multi: \"stretch | repeat | round\", max: 2 },\n    \"border-image-slice\"            : function(expression) {\n\n        var valid   = false,\n            numeric = \"<number> | <percentage>\",\n            fill    = false,\n            count   = 0,\n            max     = 4,\n            part;\n\n        if (ValidationTypes.isAny(expression, \"fill\")) {\n            fill = true;\n            valid = true;\n        }\n\n        while (expression.hasNext() && count < max) {\n            valid = ValidationTypes.isAny(expression, numeric);\n            if (!valid) {\n                break;\n            }\n            count++;\n        }\n\n\n        if (!fill) {\n            ValidationTypes.isAny(expression, \"fill\");\n        } else {\n            valid = true;\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected ([<number> | <percentage>]{1,4} && fill?) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"border-image-source\"           : \"<image> | none\",\n    \"border-image-width\"            : { multi: \"<length> | <percentage> | <number> | auto\", max: 4 },\n    \"border-left\"                   : \"<border-width> || <border-style> || <color>\",\n    \"border-left-color\"             : \"<color> | inherit\",\n    \"border-left-style\"             : \"<border-style>\",\n    \"border-left-width\"             : \"<border-width>\",\n    \"border-radius\"                 : function(expression) {\n\n        var valid   = false,\n            simple = \"<length> | <percentage> | inherit\",\n            slash   = false,\n            fill    = false,\n            count   = 0,\n            max     = 8,\n            part;\n\n        while (expression.hasNext() && count < max) {\n            valid = ValidationTypes.isAny(expression, simple);\n            if (!valid) {\n\n                if (expression.peek() == \"/\" && count > 0 && !slash) {\n                    slash = true;\n                    max = count + 5;\n                    expression.next();\n                } else {\n                    break;\n                }\n            }\n            count++;\n        }\n\n        if (expression.hasNext()) {\n            part = expression.next();\n            if (valid) {\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (<'border-radius'>) but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"border-right\"                  : \"<border-width> || <border-style> || <color>\",\n    \"border-right-color\"            : \"<color> | inherit\",\n    \"border-right-style\"            : \"<border-style>\",\n    \"border-right-width\"            : \"<border-width>\",\n    \"border-spacing\"                : { multi: \"<length> | inherit\", max: 2 },\n    \"border-style\"                  : { multi: \"<border-style>\", max: 4 },\n    \"border-top\"                    : \"<border-width> || <border-style> || <color>\",\n    \"border-top-color\"              : \"<color> | inherit\",\n    \"border-top-left-radius\"        : \"<x-one-radius>\",\n    \"border-top-right-radius\"       : \"<x-one-radius>\",\n    \"border-top-style\"              : \"<border-style>\",\n    \"border-top-width\"              : \"<border-width>\",\n    \"border-width\"                  : { multi: \"<border-width>\", max: 4 },\n    \"bottom\"                        : \"<margin-width> | inherit\",\n    \"-moz-box-align\"                : \"start | end | center | baseline | stretch\",\n    \"-moz-box-decoration-break\"     : \"slice |clone\",\n    \"-moz-box-direction\"            : \"normal | reverse | inherit\",\n    \"-moz-box-flex\"                 : \"<number>\",\n    \"-moz-box-flex-group\"           : \"<integer>\",\n    \"-moz-box-lines\"                : \"single | multiple\",\n    \"-moz-box-ordinal-group\"        : \"<integer>\",\n    \"-moz-box-orient\"               : \"horizontal | vertical | inline-axis | block-axis | inherit\",\n    \"-moz-box-pack\"                 : \"start | end | center | justify\",\n    \"-webkit-box-align\"             : \"start | end | center | baseline | stretch\",\n    \"-webkit-box-decoration-break\"  : \"slice |clone\",\n    \"-webkit-box-direction\"         : \"normal | reverse | inherit\",\n    \"-webkit-box-flex\"              : \"<number>\",\n    \"-webkit-box-flex-group\"        : \"<integer>\",\n    \"-webkit-box-lines\"             : \"single | multiple\",\n    \"-webkit-box-ordinal-group\"     : \"<integer>\",\n    \"-webkit-box-orient\"            : \"horizontal | vertical | inline-axis | block-axis | inherit\",\n    \"-webkit-box-pack\"              : \"start | end | center | justify\",\n    \"box-shadow\"                    : function (expression) {\n        var result      = false,\n            part;\n\n        if (!ValidationTypes.isAny(expression, \"none\")) {\n            Validation.multiProperty(\"<shadow>\", expression, true, Infinity);\n        } else {\n            if (expression.hasNext()) {\n                part = expression.next();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            }\n        }\n    },\n    \"box-sizing\"                    : \"content-box | border-box | inherit\",\n    \"break-after\"                   : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-before\"                  : \"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\n    \"break-inside\"                  : \"auto | avoid | avoid-page | avoid-column\",\n    \"caption-side\"                  : \"top | bottom | inherit\",\n    \"clear\"                         : \"none | right | left | both | inherit\",\n    \"clip\"                          : 1,\n    \"color\"                         : \"<color> | inherit\",\n    \"color-profile\"                 : 1,\n    \"column-count\"                  : \"<integer> | auto\",                      //http://www.w3.org/TR/css3-multicol/\n    \"column-fill\"                   : \"auto | balance\",\n    \"column-gap\"                    : \"<length> | normal\",\n    \"column-rule\"                   : \"<border-width> || <border-style> || <color>\",\n    \"column-rule-color\"             : \"<color>\",\n    \"column-rule-style\"             : \"<border-style>\",\n    \"column-rule-width\"             : \"<border-width>\",\n    \"column-span\"                   : \"none | all\",\n    \"column-width\"                  : \"<length> | auto\",\n    \"columns\"                       : 1,\n    \"content\"                       : 1,\n    \"counter-increment\"             : 1,\n    \"counter-reset\"                 : 1,\n    \"crop\"                          : \"<shape> | auto\",\n    \"cue\"                           : \"cue-after | cue-before | inherit\",\n    \"cue-after\"                     : 1,\n    \"cue-before\"                    : 1,\n    \"cursor\"                        : 1,\n    \"direction\"                     : \"ltr | rtl | inherit\",\n    \"display\"                       : \"inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | none | inherit | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex\",\n    \"dominant-baseline\"             : 1,\n    \"drop-initial-after-adjust\"     : \"central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>\",\n    \"drop-initial-after-align\"      : \"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-before-adjust\"    : \"before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>\",\n    \"drop-initial-before-align\"     : \"caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\n    \"drop-initial-size\"             : \"auto | line | <length> | <percentage>\",\n    \"drop-initial-value\"            : \"initial | <integer>\",\n    \"elevation\"                     : \"<angle> | below | level | above | higher | lower | inherit\",\n    \"empty-cells\"                   : \"show | hide | inherit\",\n    \"filter\"                        : 1,\n    \"fit\"                           : \"fill | hidden | meet | slice\",\n    \"fit-position\"                  : 1,\n    \"flex\"                          : \"<flex>\",\n    \"flex-basis\"                    : \"<width>\",\n    \"flex-direction\"                : \"row | row-reverse | column | column-reverse\",\n    \"flex-flow\"                     : \"<flex-direction> || <flex-wrap>\",\n    \"flex-grow\"                     : \"<number>\",\n    \"flex-shrink\"                   : \"<number>\",\n    \"flex-wrap\"                     : \"nowrap | wrap | wrap-reverse\",\n    \"-webkit-flex\"                  : \"<flex>\",\n    \"-webkit-flex-basis\"            : \"<width>\",\n    \"-webkit-flex-direction\"        : \"row | row-reverse | column | column-reverse\",\n    \"-webkit-flex-flow\"             : \"<flex-direction> || <flex-wrap>\",\n    \"-webkit-flex-grow\"             : \"<number>\",\n    \"-webkit-flex-shrink\"           : \"<number>\",\n    \"-webkit-flex-wrap\"             : \"nowrap | wrap | wrap-reverse\",\n    \"-ms-flex\"                      : \"<flex>\",\n    \"-ms-flex-align\"                : \"start | end | center | stretch | baseline\",\n    \"-ms-flex-direction\"            : \"row | row-reverse | column | column-reverse | inherit\",\n    \"-ms-flex-order\"                : \"<number>\",\n    \"-ms-flex-pack\"                 : \"start | end | center | justify\",\n    \"-ms-flex-wrap\"                 : \"nowrap | wrap | wrap-reverse\",\n    \"float\"                         : \"left | right | none | inherit\",\n    \"float-offset\"                  : 1,\n    \"font\"                          : 1,\n    \"font-family\"                   : 1,\n    \"font-size\"                     : \"<absolute-size> | <relative-size> | <length> | <percentage> | inherit\",\n    \"font-size-adjust\"              : \"<number> | none | inherit\",\n    \"font-stretch\"                  : \"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit\",\n    \"font-style\"                    : \"normal | italic | oblique | inherit\",\n    \"font-variant\"                  : \"normal | small-caps | inherit\",\n    \"font-weight\"                   : \"normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit\",\n    \"grid-cell-stacking\"            : \"columns | rows | layer\",\n    \"grid-column\"                   : 1,\n    \"grid-columns\"                  : 1,\n    \"grid-column-align\"             : \"start | end | center | stretch\",\n    \"grid-column-sizing\"            : 1,\n    \"grid-column-span\"              : \"<integer>\",\n    \"grid-flow\"                     : \"none | rows | columns\",\n    \"grid-layer\"                    : \"<integer>\",\n    \"grid-row\"                      : 1,\n    \"grid-rows\"                     : 1,\n    \"grid-row-align\"                : \"start | end | center | stretch\",\n    \"grid-row-span\"                 : \"<integer>\",\n    \"grid-row-sizing\"               : 1,\n    \"hanging-punctuation\"           : 1,\n    \"height\"                        : \"<margin-width> | <content-sizing> | inherit\",\n    \"hyphenate-after\"               : \"<integer> | auto\",\n    \"hyphenate-before\"              : \"<integer> | auto\",\n    \"hyphenate-character\"           : \"<string> | auto\",\n    \"hyphenate-lines\"               : \"no-limit | <integer>\",\n    \"hyphenate-resource\"            : 1,\n    \"hyphens\"                       : \"none | manual | auto\",\n    \"icon\"                          : 1,\n    \"image-orientation\"             : \"angle | auto\",\n    \"image-rendering\"               : 1,\n    \"image-resolution\"              : 1,\n    \"inline-box-align\"              : \"initial | last | <integer>\",\n    \"justify-content\"               : \"flex-start | flex-end | center | space-between | space-around\",\n    \"-webkit-justify-content\"       : \"flex-start | flex-end | center | space-between | space-around\",\n    \"left\"                          : \"<margin-width> | inherit\",\n    \"letter-spacing\"                : \"<length> | normal | inherit\",\n    \"line-height\"                   : \"<number> | <length> | <percentage> | normal | inherit\",\n    \"line-break\"                    : \"auto | loose | normal | strict\",\n    \"line-stacking\"                 : 1,\n    \"line-stacking-ruby\"            : \"exclude-ruby | include-ruby\",\n    \"line-stacking-shift\"           : \"consider-shifts | disregard-shifts\",\n    \"line-stacking-strategy\"        : \"inline-line-height | block-line-height | max-height | grid-height\",\n    \"list-style\"                    : 1,\n    \"list-style-image\"              : \"<uri> | none | inherit\",\n    \"list-style-position\"           : \"inside | outside | inherit\",\n    \"list-style-type\"               : \"disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit\",\n    \"margin\"                        : { multi: \"<margin-width> | inherit\", max: 4 },\n    \"margin-bottom\"                 : \"<margin-width> | inherit\",\n    \"margin-left\"                   : \"<margin-width> | inherit\",\n    \"margin-right\"                  : \"<margin-width> | inherit\",\n    \"margin-top\"                    : \"<margin-width> | inherit\",\n    \"mark\"                          : 1,\n    \"mark-after\"                    : 1,\n    \"mark-before\"                   : 1,\n    \"marks\"                         : 1,\n    \"marquee-direction\"             : 1,\n    \"marquee-play-count\"            : 1,\n    \"marquee-speed\"                 : 1,\n    \"marquee-style\"                 : 1,\n    \"max-height\"                    : \"<length> | <percentage> | <content-sizing> | none | inherit\",\n    \"max-width\"                     : \"<length> | <percentage> | <content-sizing> | none | inherit\",\n    \"min-height\"                    : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\n    \"min-width\"                     : \"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\n    \"move-to\"                       : 1,\n    \"nav-down\"                      : 1,\n    \"nav-index\"                     : 1,\n    \"nav-left\"                      : 1,\n    \"nav-right\"                     : 1,\n    \"nav-up\"                        : 1,\n    \"opacity\"                       : \"<number> | inherit\",\n    \"order\"                         : \"<integer>\",\n    \"-webkit-order\"                 : \"<integer>\",\n    \"orphans\"                       : \"<integer> | inherit\",\n    \"outline\"                       : 1,\n    \"outline-color\"                 : \"<color> | invert | inherit\",\n    \"outline-offset\"                : 1,\n    \"outline-style\"                 : \"<border-style> | inherit\",\n    \"outline-width\"                 : \"<border-width> | inherit\",\n    \"overflow\"                      : \"visible | hidden | scroll | auto | inherit\",\n    \"overflow-style\"                : 1,\n    \"overflow-wrap\"                 : \"normal | break-word\",\n    \"overflow-x\"                    : 1,\n    \"overflow-y\"                    : 1,\n    \"padding\"                       : { multi: \"<padding-width> | inherit\", max: 4 },\n    \"padding-bottom\"                : \"<padding-width> | inherit\",\n    \"padding-left\"                  : \"<padding-width> | inherit\",\n    \"padding-right\"                 : \"<padding-width> | inherit\",\n    \"padding-top\"                   : \"<padding-width> | inherit\",\n    \"page\"                          : 1,\n    \"page-break-after\"              : \"auto | always | avoid | left | right | inherit\",\n    \"page-break-before\"             : \"auto | always | avoid | left | right | inherit\",\n    \"page-break-inside\"             : \"auto | avoid | inherit\",\n    \"page-policy\"                   : 1,\n    \"pause\"                         : 1,\n    \"pause-after\"                   : 1,\n    \"pause-before\"                  : 1,\n    \"perspective\"                   : 1,\n    \"perspective-origin\"            : 1,\n    \"phonemes\"                      : 1,\n    \"pitch\"                         : 1,\n    \"pitch-range\"                   : 1,\n    \"play-during\"                   : 1,\n    \"pointer-events\"                : \"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit\",\n    \"position\"                      : \"static | relative | absolute | fixed | inherit\",\n    \"presentation-level\"            : 1,\n    \"punctuation-trim\"              : 1,\n    \"quotes\"                        : 1,\n    \"rendering-intent\"              : 1,\n    \"resize\"                        : 1,\n    \"rest\"                          : 1,\n    \"rest-after\"                    : 1,\n    \"rest-before\"                   : 1,\n    \"richness\"                      : 1,\n    \"right\"                         : \"<margin-width> | inherit\",\n    \"rotation\"                      : 1,\n    \"rotation-point\"                : 1,\n    \"ruby-align\"                    : 1,\n    \"ruby-overhang\"                 : 1,\n    \"ruby-position\"                 : 1,\n    \"ruby-span\"                     : 1,\n    \"size\"                          : 1,\n    \"speak\"                         : \"normal | none | spell-out | inherit\",\n    \"speak-header\"                  : \"once | always | inherit\",\n    \"speak-numeral\"                 : \"digits | continuous | inherit\",\n    \"speak-punctuation\"             : \"code | none | inherit\",\n    \"speech-rate\"                   : 1,\n    \"src\"                           : 1,\n    \"stress\"                        : 1,\n    \"string-set\"                    : 1,\n\n    \"table-layout\"                  : \"auto | fixed | inherit\",\n    \"tab-size\"                      : \"<integer> | <length>\",\n    \"target\"                        : 1,\n    \"target-name\"                   : 1,\n    \"target-new\"                    : 1,\n    \"target-position\"               : 1,\n    \"text-align\"                    : \"left | right | center | justify | inherit\" ,\n    \"text-align-last\"               : 1,\n    \"text-decoration\"               : 1,\n    \"text-emphasis\"                 : 1,\n    \"text-height\"                   : 1,\n    \"text-indent\"                   : \"<length> | <percentage> | inherit\",\n    \"text-justify\"                  : \"auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida\",\n    \"text-outline\"                  : 1,\n    \"text-overflow\"                 : 1,\n    \"text-rendering\"                : \"auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit\",\n    \"text-shadow\"                   : 1,\n    \"text-transform\"                : \"capitalize | uppercase | lowercase | none | inherit\",\n    \"text-wrap\"                     : \"normal | none | avoid\",\n    \"top\"                           : \"<margin-width> | inherit\",\n    \"-ms-touch-action\"              : \"auto | none | pan-x | pan-y\",\n    \"touch-action\"                  : \"auto | none | pan-x | pan-y\",\n    \"transform\"                     : 1,\n    \"transform-origin\"              : 1,\n    \"transform-style\"               : 1,\n    \"transition\"                    : 1,\n    \"transition-delay\"              : 1,\n    \"transition-duration\"           : 1,\n    \"transition-property\"           : 1,\n    \"transition-timing-function\"    : 1,\n    \"unicode-bidi\"                  : \"normal | embed | isolate | bidi-override | isolate-override | plaintext | inherit\",\n    \"user-modify\"                   : \"read-only | read-write | write-only | inherit\",\n    \"user-select\"                   : \"none | text | toggle | element | elements | all | inherit\",\n    \"vertical-align\"                : \"auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>\",\n    \"visibility\"                    : \"visible | hidden | collapse | inherit\",\n    \"voice-balance\"                 : 1,\n    \"voice-duration\"                : 1,\n    \"voice-family\"                  : 1,\n    \"voice-pitch\"                   : 1,\n    \"voice-pitch-range\"             : 1,\n    \"voice-rate\"                    : 1,\n    \"voice-stress\"                  : 1,\n    \"voice-volume\"                  : 1,\n    \"volume\"                        : 1,\n    \"white-space\"                   : \"normal | pre | nowrap | pre-wrap | pre-line | inherit | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap\", //http://perishablepress.com/wrapping-content/\n    \"white-space-collapse\"          : 1,\n    \"widows\"                        : \"<integer> | inherit\",\n    \"width\"                         : \"<length> | <percentage> | <content-sizing> | auto | inherit\",\n    \"word-break\"                    : \"normal | keep-all | break-all\",\n    \"word-spacing\"                  : \"<length> | normal | inherit\",\n    \"word-wrap\"                     : \"normal | break-word\",\n    \"writing-mode\"                  : \"horizontal-tb | vertical-rl | vertical-lr | lr-tb | rl-tb | tb-rl | bt-rl | tb-lr | bt-lr | lr-bt | rl-bt | lr | rl | tb | inherit\",\n    \"z-index\"                       : \"<integer> | auto | inherit\",\n    \"zoom\"                          : \"<number> | <percentage> | normal\"\n};\nfunction PropertyName(text, hack, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_NAME_TYPE);\n    this.hack = hack;\n\n}\n\nPropertyName.prototype = new SyntaxUnit();\nPropertyName.prototype.constructor = PropertyName;\nPropertyName.prototype.toString = function(){\n    return (this.hack ? this.hack : \"\") + this.text;\n};\nfunction PropertyValue(parts, line, col){\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.PROPERTY_VALUE_TYPE);\n    this.parts = parts;\n\n}\n\nPropertyValue.prototype = new SyntaxUnit();\nPropertyValue.prototype.constructor = PropertyValue;\nfunction PropertyValueIterator(value){\n    this._i = 0;\n    this._parts = value.parts;\n    this._marks = [];\n    this.value = value;\n\n}\nPropertyValueIterator.prototype.count = function(){\n    return this._parts.length;\n};\nPropertyValueIterator.prototype.isFirst = function(){\n    return this._i === 0;\n};\nPropertyValueIterator.prototype.hasNext = function(){\n    return (this._i < this._parts.length);\n};\nPropertyValueIterator.prototype.mark = function(){\n    this._marks.push(this._i);\n};\nPropertyValueIterator.prototype.peek = function(count){\n    return this.hasNext() ? this._parts[this._i + (count || 0)] : null;\n};\nPropertyValueIterator.prototype.next = function(){\n    return this.hasNext() ? this._parts[this._i++] : null;\n};\nPropertyValueIterator.prototype.previous = function(){\n    return this._i > 0 ? this._parts[--this._i] : null;\n};\nPropertyValueIterator.prototype.restore = function(){\n    if (this._marks.length){\n        this._i = this._marks.pop();\n    }\n};\nfunction PropertyValuePart(text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.PROPERTY_VALUE_PART_TYPE);\n    this.type = \"unknown\";\n\n    var temp;\n    if (/^([+\\-]?[\\d\\.]+)([a-z]+)$/i.test(text)){  //dimension\n        this.type = \"dimension\";\n        this.value = +RegExp.$1;\n        this.units = RegExp.$2;\n        switch(this.units.toLowerCase()){\n\n            case \"em\":\n            case \"rem\":\n            case \"ex\":\n            case \"px\":\n            case \"cm\":\n            case \"mm\":\n            case \"in\":\n            case \"pt\":\n            case \"pc\":\n            case \"ch\":\n            case \"vh\":\n            case \"vw\":\n            case \"vmax\":\n            case \"vmin\":\n                this.type = \"length\";\n                break;\n\n            case \"deg\":\n            case \"rad\":\n            case \"grad\":\n                this.type = \"angle\";\n                break;\n\n            case \"ms\":\n            case \"s\":\n                this.type = \"time\";\n                break;\n\n            case \"hz\":\n            case \"khz\":\n                this.type = \"frequency\";\n                break;\n\n            case \"dpi\":\n            case \"dpcm\":\n                this.type = \"resolution\";\n                break;\n\n        }\n\n    } else if (/^([+\\-]?[\\d\\.]+)%$/i.test(text)){  //percentage\n        this.type = \"percentage\";\n        this.value = +RegExp.$1;\n    } else if (/^([+\\-]?\\d+)$/i.test(text)){  //integer\n        this.type = \"integer\";\n        this.value = +RegExp.$1;\n    } else if (/^([+\\-]?[\\d\\.]+)$/i.test(text)){  //number\n        this.type = \"number\";\n        this.value = +RegExp.$1;\n\n    } else if (/^#([a-f0-9]{3,6})/i.test(text)){  //hexcolor\n        this.type = \"color\";\n        temp = RegExp.$1;\n        if (temp.length == 3){\n            this.red    = parseInt(temp.charAt(0)+temp.charAt(0),16);\n            this.green  = parseInt(temp.charAt(1)+temp.charAt(1),16);\n            this.blue   = parseInt(temp.charAt(2)+temp.charAt(2),16);\n        } else {\n            this.red    = parseInt(temp.substring(0,2),16);\n            this.green  = parseInt(temp.substring(2,4),16);\n            this.blue   = parseInt(temp.substring(4,6),16);\n        }\n    } else if (/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i.test(text)){ //rgb() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = +RegExp.$1;\n        this.green  = +RegExp.$2;\n        this.blue   = +RegExp.$3;\n    } else if (/^rgb\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)){ //rgb() color with percentages\n        this.type   = \"color\";\n        this.red    = +RegExp.$1 * 255 / 100;\n        this.green  = +RegExp.$2 * 255 / 100;\n        this.blue   = +RegExp.$3 * 255 / 100;\n    } else if (/^rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //rgba() color with absolute numbers\n        this.type   = \"color\";\n        this.red    = +RegExp.$1;\n        this.green  = +RegExp.$2;\n        this.blue   = +RegExp.$3;\n        this.alpha  = +RegExp.$4;\n    } else if (/^rgba\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //rgba() color with percentages\n        this.type   = \"color\";\n        this.red    = +RegExp.$1 * 255 / 100;\n        this.green  = +RegExp.$2 * 255 / 100;\n        this.blue   = +RegExp.$3 * 255 / 100;\n        this.alpha  = +RegExp.$4;\n    } else if (/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)){ //hsl()\n        this.type   = \"color\";\n        this.hue    = +RegExp.$1;\n        this.saturation = +RegExp.$2 / 100;\n        this.lightness  = +RegExp.$3 / 100;\n    } else if (/^hsla\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)){ //hsla() color with percentages\n        this.type   = \"color\";\n        this.hue    = +RegExp.$1;\n        this.saturation = +RegExp.$2 / 100;\n        this.lightness  = +RegExp.$3 / 100;\n        this.alpha  = +RegExp.$4;\n    } else if (/^url\\([\"']?([^\\)\"']+)[\"']?\\)/i.test(text)){ //URI\n        this.type   = \"uri\";\n        this.uri    = RegExp.$1;\n    } else if (/^([^\\(]+)\\(/i.test(text)){\n        this.type   = \"function\";\n        this.name   = RegExp.$1;\n        this.value  = text;\n    } else if (/^[\"'][^\"']*[\"']/.test(text)){    //string\n        this.type   = \"string\";\n        this.value  = eval(text);\n    } else if (Colors[text.toLowerCase()]){  //named color\n        this.type   = \"color\";\n        temp        = Colors[text.toLowerCase()].substring(1);\n        this.red    = parseInt(temp.substring(0,2),16);\n        this.green  = parseInt(temp.substring(2,4),16);\n        this.blue   = parseInt(temp.substring(4,6),16);\n    } else if (/^[\\,\\/]$/.test(text)){\n        this.type   = \"operator\";\n        this.value  = text;\n    } else if (/^[a-z\\-_\\u0080-\\uFFFF][a-z0-9\\-_\\u0080-\\uFFFF]*$/i.test(text)){\n        this.type   = \"identifier\";\n        this.value  = text;\n    }\n\n}\n\nPropertyValuePart.prototype = new SyntaxUnit();\nPropertyValuePart.prototype.constructor = PropertyValuePart;\nPropertyValuePart.fromToken = function(token){\n    return new PropertyValuePart(token.value, token.startLine, token.startCol);\n};\nvar Pseudos = {\n    \":first-letter\": 1,\n    \":first-line\":   1,\n    \":before\":       1,\n    \":after\":        1\n};\n\nPseudos.ELEMENT = 1;\nPseudos.CLASS = 2;\n\nPseudos.isElement = function(pseudo){\n    return pseudo.indexOf(\"::\") === 0 || Pseudos[pseudo.toLowerCase()] == Pseudos.ELEMENT;\n};\nfunction Selector(parts, line, col){\n\n    SyntaxUnit.call(this, parts.join(\" \"), line, col, Parser.SELECTOR_TYPE);\n    this.parts = parts;\n    this.specificity = Specificity.calculate(this);\n\n}\n\nSelector.prototype = new SyntaxUnit();\nSelector.prototype.constructor = Selector;\nfunction SelectorPart(elementName, modifiers, text, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_PART_TYPE);\n    this.elementName = elementName;\n    this.modifiers = modifiers;\n\n}\n\nSelectorPart.prototype = new SyntaxUnit();\nSelectorPart.prototype.constructor = SelectorPart;\nfunction SelectorSubPart(text, type, line, col){\n\n    SyntaxUnit.call(this, text, line, col, Parser.SELECTOR_SUB_PART_TYPE);\n    this.type = type;\n    this.args = [];\n\n}\n\nSelectorSubPart.prototype = new SyntaxUnit();\nSelectorSubPart.prototype.constructor = SelectorSubPart;\nfunction Specificity(a, b, c, d){\n    this.a = a;\n    this.b = b;\n    this.c = c;\n    this.d = d;\n}\n\nSpecificity.prototype = {\n    constructor: Specificity,\n    compare: function(other){\n        var comps = [\"a\", \"b\", \"c\", \"d\"],\n            i, len;\n\n        for (i=0, len=comps.length; i < len; i++){\n            if (this[comps[i]] < other[comps[i]]){\n                return -1;\n            } else if (this[comps[i]] > other[comps[i]]){\n                return 1;\n            }\n        }\n\n        return 0;\n    },\n    valueOf: function(){\n        return (this.a * 1000) + (this.b * 100) + (this.c * 10) + this.d;\n    },\n    toString: function(){\n        return this.a + \",\" + this.b + \",\" + this.c + \",\" + this.d;\n    }\n\n};\nSpecificity.calculate = function(selector){\n\n    var i, len,\n        part,\n        b=0, c=0, d=0;\n\n    function updateValues(part){\n\n        var i, j, len, num,\n            elementName = part.elementName ? part.elementName.text : \"\",\n            modifier;\n\n        if (elementName && elementName.charAt(elementName.length-1) != \"*\") {\n            d++;\n        }\n\n        for (i=0, len=part.modifiers.length; i < len; i++){\n            modifier = part.modifiers[i];\n            switch(modifier.type){\n                case \"class\":\n                case \"attribute\":\n                    c++;\n                    break;\n\n                case \"id\":\n                    b++;\n                    break;\n\n                case \"pseudo\":\n                    if (Pseudos.isElement(modifier.text)){\n                        d++;\n                    } else {\n                        c++;\n                    }\n                    break;\n\n                case \"not\":\n                    for (j=0, num=modifier.args.length; j < num; j++){\n                        updateValues(modifier.args[j]);\n                    }\n            }\n         }\n    }\n\n    for (i=0, len=selector.parts.length; i < len; i++){\n        part = selector.parts[i];\n\n        if (part instanceof SelectorPart){\n            updateValues(part);\n        }\n    }\n\n    return new Specificity(0, b, c, d);\n};\n\nvar h = /^[0-9a-fA-F]$/,\n    nonascii = /^[\\u0080-\\uFFFF]$/,\n    nl = /\\n|\\r\\n|\\r|\\f/;\n\n\nfunction isHexDigit(c){\n    return c !== null && h.test(c);\n}\n\nfunction isDigit(c){\n    return c !== null && /\\d/.test(c);\n}\n\nfunction isWhitespace(c){\n    return c !== null && /\\s/.test(c);\n}\n\nfunction isNewLine(c){\n    return c !== null && nl.test(c);\n}\n\nfunction isNameStart(c){\n    return c !== null && (/[a-z_\\u0080-\\uFFFF\\\\]/i.test(c));\n}\n\nfunction isNameChar(c){\n    return c !== null && (isNameStart(c) || /[0-9\\-\\\\]/.test(c));\n}\n\nfunction isIdentStart(c){\n    return c !== null && (isNameStart(c) || /\\-\\\\/.test(c));\n}\n\nfunction mix(receiver, supplier){\n    for (var prop in supplier){\n        if (supplier.hasOwnProperty(prop)){\n            receiver[prop] = supplier[prop];\n        }\n    }\n    return receiver;\n}\nfunction TokenStream(input){\n    TokenStreamBase.call(this, input, Tokens);\n}\n\nTokenStream.prototype = mix(new TokenStreamBase(), {\n    _getToken: function(channel){\n\n        var c,\n            reader = this._reader,\n            token   = null,\n            startLine   = reader.getLine(),\n            startCol    = reader.getCol();\n\n        c = reader.read();\n\n\n        while(c){\n            switch(c){\n                case \"/\":\n\n                    if(reader.peek() == \"*\"){\n                        token = this.commentToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"|\":\n                case \"~\":\n                case \"^\":\n                case \"$\":\n                case \"*\":\n                    if(reader.peek() == \"=\"){\n                        token = this.comparisonToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"\\\"\":\n                case \"'\":\n                    token = this.stringToken(c, startLine, startCol);\n                    break;\n                case \"#\":\n                    if (isNameChar(reader.peek())){\n                        token = this.hashToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \".\":\n                    if (isDigit(reader.peek())){\n                        token = this.numberToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"-\":\n                    if (reader.peek() == \"-\"){  //could be closing HTML-style comment\n                        token = this.htmlCommentEndToken(c, startLine, startCol);\n                    } else if (isNameStart(reader.peek())){\n                        token = this.identOrFunctionToken(c, startLine, startCol);\n                    } else {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n                    break;\n                case \"!\":\n                    token = this.importantToken(c, startLine, startCol);\n                    break;\n                case \"@\":\n                    token = this.atRuleToken(c, startLine, startCol);\n                    break;\n                case \":\":\n                    token = this.notToken(c, startLine, startCol);\n                    break;\n                case \"<\":\n                    token = this.htmlCommentStartToken(c, startLine, startCol);\n                    break;\n                case \"U\":\n                case \"u\":\n                    if (reader.peek() == \"+\"){\n                        token = this.unicodeRangeToken(c, startLine, startCol);\n                        break;\n                    }\n                default:\n                    if (isDigit(c)){\n                        token = this.numberToken(c, startLine, startCol);\n                    } else\n                    if (isWhitespace(c)){\n                        token = this.whitespaceToken(c, startLine, startCol);\n                    } else\n                    if (isIdentStart(c)){\n                        token = this.identOrFunctionToken(c, startLine, startCol);\n                    } else\n                    {\n                        token = this.charToken(c, startLine, startCol);\n                    }\n\n\n\n\n\n\n            }\n            break;\n        }\n\n        if (!token && c === null){\n            token = this.createToken(Tokens.EOF,null,startLine,startCol);\n        }\n\n        return token;\n    },\n    createToken: function(tt, value, startLine, startCol, options){\n        var reader = this._reader;\n        options = options || {};\n\n        return {\n            value:      value,\n            type:       tt,\n            channel:    options.channel,\n            endChar:    options.endChar,\n            hide:       options.hide || false,\n            startLine:  startLine,\n            startCol:   startCol,\n            endLine:    reader.getLine(),\n            endCol:     reader.getCol()\n        };\n    },\n    atRuleToken: function(first, startLine, startCol){\n        var rule    = first,\n            reader  = this._reader,\n            tt      = Tokens.CHAR,\n            valid   = false,\n            ident,\n            c;\n        reader.mark();\n        ident = this.readName();\n        rule = first + ident;\n        tt = Tokens.type(rule.toLowerCase());\n        if (tt == Tokens.CHAR || tt == Tokens.UNKNOWN){\n            if (rule.length > 1){\n                tt = Tokens.UNKNOWN_SYM;\n            } else {\n                tt = Tokens.CHAR;\n                rule = first;\n                reader.reset();\n            }\n        }\n\n        return this.createToken(tt, rule, startLine, startCol);\n    },\n    charToken: function(c, startLine, startCol){\n        var tt = Tokens.type(c);\n        var opts = {};\n\n        if (tt == -1){\n            tt = Tokens.CHAR;\n        } else {\n            opts.endChar = Tokens[tt].endChar;\n        }\n\n        return this.createToken(tt, c, startLine, startCol, opts);\n    },\n    commentToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            comment = this.readComment(first);\n\n        return this.createToken(Tokens.COMMENT, comment, startLine, startCol);\n    },\n    comparisonToken: function(c, startLine, startCol){\n        var reader  = this._reader,\n            comparison  = c + reader.read(),\n            tt      = Tokens.type(comparison) || Tokens.CHAR;\n\n        return this.createToken(tt, comparison, startLine, startCol);\n    },\n    hashToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            name    = this.readName(first);\n\n        return this.createToken(Tokens.HASH, name, startLine, startCol);\n    },\n    htmlCommentStartToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(3);\n\n        if (text == \"<!--\"){\n            return this.createToken(Tokens.CDO, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    htmlCommentEndToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(2);\n\n        if (text == \"-->\"){\n            return this.createToken(Tokens.CDC, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    identOrFunctionToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            ident   = this.readName(first),\n            tt      = Tokens.IDENT;\n        if (reader.peek() == \"(\"){\n            ident += reader.read();\n            if (ident.toLowerCase() == \"url(\"){\n                tt = Tokens.URI;\n                ident = this.readURI(ident);\n                if (ident.toLowerCase() == \"url(\"){\n                    tt = Tokens.FUNCTION;\n                }\n            } else {\n                tt = Tokens.FUNCTION;\n            }\n        } else if (reader.peek() == \":\"){  //might be an IE function\n            if (ident.toLowerCase() == \"progid\"){\n                ident += reader.readTo(\"(\");\n                tt = Tokens.IE_FUNCTION;\n            }\n        }\n\n        return this.createToken(tt, ident, startLine, startCol);\n    },\n    importantToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            important   = first,\n            tt          = Tokens.CHAR,\n            temp,\n            c;\n\n        reader.mark();\n        c = reader.read();\n\n        while(c){\n            if (c == \"/\"){\n                if (reader.peek() != \"*\"){\n                    break;\n                } else {\n                    temp = this.readComment(c);\n                    if (temp === \"\"){    //broken!\n                        break;\n                    }\n                }\n            } else if (isWhitespace(c)){\n                important += c + this.readWhitespace();\n            } else if (/i/i.test(c)){\n                temp = reader.readCount(8);\n                if (/mportant/i.test(temp)){\n                    important += c + temp;\n                    tt = Tokens.IMPORTANT_SYM;\n\n                }\n                break;  //we're done\n            } else {\n                break;\n            }\n\n            c = reader.read();\n        }\n\n        if (tt == Tokens.CHAR){\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        } else {\n            return this.createToken(tt, important, startLine, startCol);\n        }\n\n\n    },\n    notToken: function(first, startLine, startCol){\n        var reader      = this._reader,\n            text        = first;\n\n        reader.mark();\n        text += reader.readCount(4);\n\n        if (text.toLowerCase() == \":not(\"){\n            return this.createToken(Tokens.NOT, text, startLine, startCol);\n        } else {\n            reader.reset();\n            return this.charToken(first, startLine, startCol);\n        }\n    },\n    numberToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = this.readNumber(first),\n            ident,\n            tt      = Tokens.NUMBER,\n            c       = reader.peek();\n\n        if (isIdentStart(c)){\n            ident = this.readName(reader.read());\n            value += ident;\n\n            if (/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(ident)){\n                tt = Tokens.LENGTH;\n            } else if (/^deg|^rad$|^grad$/i.test(ident)){\n                tt = Tokens.ANGLE;\n            } else if (/^ms$|^s$/i.test(ident)){\n                tt = Tokens.TIME;\n            } else if (/^hz$|^khz$/i.test(ident)){\n                tt = Tokens.FREQ;\n            } else if (/^dpi$|^dpcm$/i.test(ident)){\n                tt = Tokens.RESOLUTION;\n            } else {\n                tt = Tokens.DIMENSION;\n            }\n\n        } else if (c == \"%\"){\n            value += reader.read();\n            tt = Tokens.PERCENTAGE;\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n    stringToken: function(first, startLine, startCol){\n        var delim   = first,\n            string  = first,\n            reader  = this._reader,\n            prev    = first,\n            tt      = Tokens.STRING,\n            c       = reader.read();\n\n        while(c){\n            string += c;\n            if (c == delim && prev != \"\\\\\"){\n                break;\n            }\n            if (isNewLine(reader.peek()) && c != \"\\\\\"){\n                tt = Tokens.INVALID;\n                break;\n            }\n            prev = c;\n            c = reader.read();\n        }\n        if (c === null){\n            tt = Tokens.INVALID;\n        }\n\n        return this.createToken(tt, string, startLine, startCol);\n    },\n\n    unicodeRangeToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = first,\n            temp,\n            tt      = Tokens.CHAR;\n        if (reader.peek() == \"+\"){\n            reader.mark();\n            value += reader.read();\n            value += this.readUnicodeRangePart(true);\n            if (value.length == 2){\n                reader.reset();\n            } else {\n\n                tt = Tokens.UNICODE_RANGE;\n                if (value.indexOf(\"?\") == -1){\n\n                    if (reader.peek() == \"-\"){\n                        reader.mark();\n                        temp = reader.read();\n                        temp += this.readUnicodeRangePart(false);\n                        if (temp.length == 1){\n                            reader.reset();\n                        } else {\n                            value += temp;\n                        }\n                    }\n\n                }\n            }\n        }\n\n        return this.createToken(tt, value, startLine, startCol);\n    },\n    whitespaceToken: function(first, startLine, startCol){\n        var reader  = this._reader,\n            value   = first + this.readWhitespace();\n        return this.createToken(Tokens.S, value, startLine, startCol);\n    },\n\n    readUnicodeRangePart: function(allowQuestionMark){\n        var reader  = this._reader,\n            part = \"\",\n            c       = reader.peek();\n        while(isHexDigit(c) && part.length < 6){\n            reader.read();\n            part += c;\n            c = reader.peek();\n        }\n        if (allowQuestionMark){\n            while(c == \"?\" && part.length < 6){\n                reader.read();\n                part += c;\n                c = reader.peek();\n            }\n        }\n\n        return part;\n    },\n\n    readWhitespace: function(){\n        var reader  = this._reader,\n            whitespace = \"\",\n            c       = reader.peek();\n\n        while(isWhitespace(c)){\n            reader.read();\n            whitespace += c;\n            c = reader.peek();\n        }\n\n        return whitespace;\n    },\n    readNumber: function(first){\n        var reader  = this._reader,\n            number  = first,\n            hasDot  = (first == \".\"),\n            c       = reader.peek();\n\n\n        while(c){\n            if (isDigit(c)){\n                number += reader.read();\n            } else if (c == \".\"){\n                if (hasDot){\n                    break;\n                } else {\n                    hasDot = true;\n                    number += reader.read();\n                }\n            } else {\n                break;\n            }\n\n            c = reader.peek();\n        }\n\n        return number;\n    },\n    readString: function(){\n        var reader  = this._reader,\n            delim   = reader.read(),\n            string  = delim,\n            prev    = delim,\n            c       = reader.peek();\n\n        while(c){\n            c = reader.read();\n            string += c;\n            if (c == delim && prev != \"\\\\\"){\n                break;\n            }\n            if (isNewLine(reader.peek()) && c != \"\\\\\"){\n                string = \"\";\n                break;\n            }\n            prev = c;\n            c = reader.peek();\n        }\n        if (c === null){\n            string = \"\";\n        }\n\n        return string;\n    },\n    readURI: function(first){\n        var reader  = this._reader,\n            uri     = first,\n            inner   = \"\",\n            c       = reader.peek();\n\n        reader.mark();\n        while(c && isWhitespace(c)){\n            reader.read();\n            c = reader.peek();\n        }\n        if (c == \"'\" || c == \"\\\"\"){\n            inner = this.readString();\n        } else {\n            inner = this.readURL();\n        }\n\n        c = reader.peek();\n        while(c && isWhitespace(c)){\n            reader.read();\n            c = reader.peek();\n        }\n        if (inner === \"\" || c != \")\"){\n            uri = first;\n            reader.reset();\n        } else {\n            uri += inner + reader.read();\n        }\n\n        return uri;\n    },\n    readURL: function(){\n        var reader  = this._reader,\n            url     = \"\",\n            c       = reader.peek();\n        while (/^[!#$%&\\\\*-~]$/.test(c)){\n            url += reader.read();\n            c = reader.peek();\n        }\n\n        return url;\n\n    },\n    readName: function(first){\n        var reader  = this._reader,\n            ident   = first || \"\",\n            c       = reader.peek();\n\n        while(true){\n            if (c == \"\\\\\"){\n                ident += this.readEscape(reader.read());\n                c = reader.peek();\n            } else if(c && isNameChar(c)){\n                ident += reader.read();\n                c = reader.peek();\n            } else {\n                break;\n            }\n        }\n\n        return ident;\n    },\n\n    readEscape: function(first){\n        var reader  = this._reader,\n            cssEscape = first || \"\",\n            i       = 0,\n            c       = reader.peek();\n\n        if (isHexDigit(c)){\n            do {\n                cssEscape += reader.read();\n                c = reader.peek();\n            } while(c && isHexDigit(c) && ++i < 6);\n        }\n\n        if (cssEscape.length == 3 && /\\s/.test(c) ||\n            cssEscape.length == 7 || cssEscape.length == 1){\n                reader.read();\n        } else {\n            c = \"\";\n        }\n\n        return cssEscape + c;\n    },\n\n    readComment: function(first){\n        var reader  = this._reader,\n            comment = first || \"\",\n            c       = reader.read();\n\n        if (c == \"*\"){\n            while(c){\n                comment += c;\n                if (comment.length > 2 && c == \"*\" && reader.peek() == \"/\"){\n                    comment += reader.read();\n                    break;\n                }\n\n                c = reader.read();\n            }\n\n            return comment;\n        } else {\n            return \"\";\n        }\n\n    }\n});\n\nvar Tokens  = [\n    { name: \"CDO\"},\n    { name: \"CDC\"},\n    { name: \"S\", whitespace: true/*, channel: \"ws\"*/},\n    { name: \"COMMENT\", comment: true, hide: true, channel: \"comment\" },\n    { name: \"INCLUDES\", text: \"~=\"},\n    { name: \"DASHMATCH\", text: \"|=\"},\n    { name: \"PREFIXMATCH\", text: \"^=\"},\n    { name: \"SUFFIXMATCH\", text: \"$=\"},\n    { name: \"SUBSTRINGMATCH\", text: \"*=\"},\n    { name: \"STRING\"},\n    { name: \"IDENT\"},\n    { name: \"HASH\"},\n    { name: \"IMPORT_SYM\", text: \"@import\"},\n    { name: \"PAGE_SYM\", text: \"@page\"},\n    { name: \"MEDIA_SYM\", text: \"@media\"},\n    { name: \"FONT_FACE_SYM\", text: \"@font-face\"},\n    { name: \"CHARSET_SYM\", text: \"@charset\"},\n    { name: \"NAMESPACE_SYM\", text: \"@namespace\"},\n    { name: \"VIEWPORT_SYM\", text: [\"@viewport\", \"@-ms-viewport\"]},\n    { name: \"UNKNOWN_SYM\" },\n    { name: \"KEYFRAMES_SYM\", text: [ \"@keyframes\", \"@-webkit-keyframes\", \"@-moz-keyframes\", \"@-o-keyframes\" ] },\n    { name: \"IMPORTANT_SYM\"},\n    { name: \"LENGTH\"},\n    { name: \"ANGLE\"},\n    { name: \"TIME\"},\n    { name: \"FREQ\"},\n    { name: \"DIMENSION\"},\n    { name: \"PERCENTAGE\"},\n    { name: \"NUMBER\"},\n    { name: \"URI\"},\n    { name: \"FUNCTION\"},\n    { name: \"UNICODE_RANGE\"},\n    { name: \"INVALID\"},\n    { name: \"PLUS\", text: \"+\" },\n    { name: \"GREATER\", text: \">\"},\n    { name: \"COMMA\", text: \",\"},\n    { name: \"TILDE\", text: \"~\"},\n    { name: \"NOT\"},\n    { name: \"TOPLEFTCORNER_SYM\", text: \"@top-left-corner\"},\n    { name: \"TOPLEFT_SYM\", text: \"@top-left\"},\n    { name: \"TOPCENTER_SYM\", text: \"@top-center\"},\n    { name: \"TOPRIGHT_SYM\", text: \"@top-right\"},\n    { name: \"TOPRIGHTCORNER_SYM\", text: \"@top-right-corner\"},\n    { name: \"BOTTOMLEFTCORNER_SYM\", text: \"@bottom-left-corner\"},\n    { name: \"BOTTOMLEFT_SYM\", text: \"@bottom-left\"},\n    { name: \"BOTTOMCENTER_SYM\", text: \"@bottom-center\"},\n    { name: \"BOTTOMRIGHT_SYM\", text: \"@bottom-right\"},\n    { name: \"BOTTOMRIGHTCORNER_SYM\", text: \"@bottom-right-corner\"},\n    { name: \"LEFTTOP_SYM\", text: \"@left-top\"},\n    { name: \"LEFTMIDDLE_SYM\", text: \"@left-middle\"},\n    { name: \"LEFTBOTTOM_SYM\", text: \"@left-bottom\"},\n    { name: \"RIGHTTOP_SYM\", text: \"@right-top\"},\n    { name: \"RIGHTMIDDLE_SYM\", text: \"@right-middle\"},\n    { name: \"RIGHTBOTTOM_SYM\", text: \"@right-bottom\"},\n    { name: \"RESOLUTION\", state: \"media\"},\n    { name: \"IE_FUNCTION\" },\n    { name: \"CHAR\" },\n    {\n        name: \"PIPE\",\n        text: \"|\"\n    },\n    {\n        name: \"SLASH\",\n        text: \"/\"\n    },\n    {\n        name: \"MINUS\",\n        text: \"-\"\n    },\n    {\n        name: \"STAR\",\n        text: \"*\"\n    },\n\n    {\n        name: \"LBRACE\",\n        endChar: \"}\",\n        text: \"{\"\n    },\n    {\n        name: \"RBRACE\",\n        text: \"}\"\n    },\n    {\n        name: \"LBRACKET\",\n        endChar: \"]\",\n        text: \"[\"\n    },\n    {\n        name: \"RBRACKET\",\n        text: \"]\"\n    },\n    {\n        name: \"EQUALS\",\n        text: \"=\"\n    },\n    {\n        name: \"COLON\",\n        text: \":\"\n    },\n    {\n        name: \"SEMICOLON\",\n        text: \";\"\n    },\n\n    {\n        name: \"LPAREN\",\n        endChar: \")\",\n        text: \"(\"\n    },\n    {\n        name: \"RPAREN\",\n        text: \")\"\n    },\n    {\n        name: \"DOT\",\n        text: \".\"\n    }\n];\n\n(function(){\n\n    var nameMap = [],\n        typeMap = {};\n\n    Tokens.UNKNOWN = -1;\n    Tokens.unshift({name:\"EOF\"});\n    for (var i=0, len = Tokens.length; i < len; i++){\n        nameMap.push(Tokens[i].name);\n        Tokens[Tokens[i].name] = i;\n        if (Tokens[i].text){\n            if (Tokens[i].text instanceof Array){\n                for (var j=0; j < Tokens[i].text.length; j++){\n                    typeMap[Tokens[i].text[j]] = i;\n                }\n            } else {\n                typeMap[Tokens[i].text] = i;\n            }\n        }\n    }\n\n    Tokens.name = function(tt){\n        return nameMap[tt];\n    };\n\n    Tokens.type = function(c){\n        return typeMap[c] || -1;\n    };\n\n})();\nvar Validation = {\n\n    validate: function(property, value){\n        var name        = property.toString().toLowerCase(),\n            parts       = value.parts,\n            expression  = new PropertyValueIterator(value),\n            spec        = Properties[name],\n            part,\n            valid,\n            j, count,\n            msg,\n            types,\n            last,\n            literals,\n            max, multi, group;\n\n        if (!spec) {\n            if (name.indexOf(\"-\") !== 0){    //vendor prefixed are ok\n                throw new ValidationError(\"Unknown property '\" + property + \"'.\", property.line, property.col);\n            }\n        } else if (typeof spec != \"number\"){\n            if (typeof spec == \"string\"){\n                if (spec.indexOf(\"||\") > -1) {\n                    this.groupProperty(spec, expression);\n                } else {\n                    this.singleProperty(spec, expression, 1);\n                }\n\n            } else if (spec.multi) {\n                this.multiProperty(spec.multi, expression, spec.comma, spec.max || Infinity);\n            } else if (typeof spec == \"function\") {\n                spec(expression);\n            }\n\n        }\n\n    },\n\n    singleProperty: function(types, expression, max, partial) {\n\n        var result      = false,\n            value       = expression.value,\n            count       = 0,\n            part;\n\n        while (expression.hasNext() && count < max) {\n            result = ValidationTypes.isAny(expression, types);\n            if (!result) {\n                break;\n            }\n            count++;\n        }\n\n        if (!result) {\n            if (expression.hasNext() && !expression.isFirst()) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                 throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n            }\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n\n    },\n\n    multiProperty: function (types, expression, comma, max) {\n\n        var result      = false,\n            value       = expression.value,\n            count       = 0,\n            sep         = false,\n            part;\n\n        while(expression.hasNext() && !result && count < max) {\n            if (ValidationTypes.isAny(expression, types)) {\n                count++;\n                if (!expression.hasNext()) {\n                    result = true;\n\n                } else if (comma) {\n                    if (expression.peek() == \",\") {\n                        part = expression.next();\n                    } else {\n                        break;\n                    }\n                }\n            } else {\n                break;\n\n            }\n        }\n\n        if (!result) {\n            if (expression.hasNext() && !expression.isFirst()) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                part = expression.previous();\n                if (comma && part == \",\") {\n                    throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n                } else {\n                    throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n                }\n            }\n\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n\n    },\n\n    groupProperty: function (types, expression, comma) {\n\n        var result      = false,\n            value       = expression.value,\n            typeCount   = types.split(\"||\").length,\n            groups      = { count: 0 },\n            partial     = false,\n            name,\n            part;\n\n        while(expression.hasNext() && !result) {\n            name = ValidationTypes.isAnyOfGroup(expression, types);\n            if (name) {\n                if (groups[name]) {\n                    break;\n                } else {\n                    groups[name] = 1;\n                    groups.count++;\n                    partial = true;\n\n                    if (groups.count == typeCount || !expression.hasNext()) {\n                        result = true;\n                    }\n                }\n            } else {\n                break;\n            }\n        }\n\n        if (!result) {\n            if (partial && expression.hasNext()) {\n                    part = expression.peek();\n                    throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n            } else {\n                throw new ValidationError(\"Expected (\" + types + \") but found '\" + value + \"'.\", value.line, value.col);\n            }\n        } else if (expression.hasNext()) {\n            part = expression.next();\n            throw new ValidationError(\"Expected end of value but found '\" + part + \"'.\", part.line, part.col);\n        }\n    }\n\n\n\n};\nfunction ValidationError(message, line, col){\n    this.col = col;\n    this.line = line;\n    this.message = message;\n\n}\nValidationError.prototype = new Error();\nvar ValidationTypes = {\n\n    isLiteral: function (part, literals) {\n        var text = part.text.toString().toLowerCase(),\n            args = literals.split(\" | \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found; i++){\n            if (text == args[i].toLowerCase()){\n                found = true;\n            }\n        }\n\n        return found;\n    },\n\n    isSimple: function(type) {\n        return !!this.simple[type];\n    },\n\n    isComplex: function(type) {\n        return !!this.complex[type];\n    },\n    isAny: function (expression, types) {\n        var args = types.split(\" | \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found && expression.hasNext(); i++){\n            found = this.isType(expression, args[i]);\n        }\n\n        return found;\n    },\n    isAnyOfGroup: function(expression, types) {\n        var args = types.split(\" || \"),\n            i, len, found = false;\n\n        for (i=0,len=args.length; i < len && !found; i++){\n            found = this.isType(expression, args[i]);\n        }\n\n        return found ? args[i-1] : false;\n    },\n    isType: function (expression, type) {\n        var part = expression.peek(),\n            result = false;\n\n        if (type.charAt(0) != \"<\") {\n            result = this.isLiteral(part, type);\n            if (result) {\n                expression.next();\n            }\n        } else if (this.simple[type]) {\n            result = this.simple[type](part);\n            if (result) {\n                expression.next();\n            }\n        } else {\n            result = this.complex[type](expression);\n        }\n\n        return result;\n    },\n\n\n\n    simple: {\n\n        \"<absolute-size>\": function(part){\n            return ValidationTypes.isLiteral(part, \"xx-small | x-small | small | medium | large | x-large | xx-large\");\n        },\n\n        \"<attachment>\": function(part){\n            return ValidationTypes.isLiteral(part, \"scroll | fixed | local\");\n        },\n\n        \"<attr>\": function(part){\n            return part.type == \"function\" && part.name == \"attr\";\n        },\n\n        \"<bg-image>\": function(part){\n            return this[\"<image>\"](part) || this[\"<gradient>\"](part) ||  part == \"none\";\n        },\n\n        \"<gradient>\": function(part) {\n            return part.type == \"function\" && /^(?:\\-(?:ms|moz|o|webkit)\\-)?(?:repeating\\-)?(?:radial\\-|linear\\-)?gradient/i.test(part);\n        },\n\n        \"<box>\": function(part){\n            return ValidationTypes.isLiteral(part, \"padding-box | border-box | content-box\");\n        },\n\n        \"<content>\": function(part){\n            return part.type == \"function\" && part.name == \"content\";\n        },\n\n        \"<relative-size>\": function(part){\n            return ValidationTypes.isLiteral(part, \"smaller | larger\");\n        },\n        \"<ident>\": function(part){\n            return part.type == \"identifier\";\n        },\n\n        \"<length>\": function(part){\n            if (part.type == \"function\" && /^(?:\\-(?:ms|moz|o|webkit)\\-)?calc/i.test(part)){\n                return true;\n            }else{\n                return part.type == \"length\" || part.type == \"number\" || part.type == \"integer\" || part == \"0\";\n            }\n        },\n\n        \"<color>\": function(part){\n            return part.type == \"color\" || part == \"transparent\";\n        },\n\n        \"<number>\": function(part){\n            return part.type == \"number\" || this[\"<integer>\"](part);\n        },\n\n        \"<integer>\": function(part){\n            return part.type == \"integer\";\n        },\n\n        \"<line>\": function(part){\n            return part.type == \"integer\";\n        },\n\n        \"<angle>\": function(part){\n            return part.type == \"angle\";\n        },\n\n        \"<uri>\": function(part){\n            return part.type == \"uri\";\n        },\n\n        \"<image>\": function(part){\n            return this[\"<uri>\"](part);\n        },\n\n        \"<percentage>\": function(part){\n            return part.type == \"percentage\" || part == \"0\";\n        },\n\n        \"<border-width>\": function(part){\n            return this[\"<length>\"](part) || ValidationTypes.isLiteral(part, \"thin | medium | thick\");\n        },\n\n        \"<border-style>\": function(part){\n            return ValidationTypes.isLiteral(part, \"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset\");\n        },\n\n        \"<content-sizing>\": function(part){ // http://www.w3.org/TR/css3-sizing/#width-height-keywords\n            return ValidationTypes.isLiteral(part, \"fill-available | -moz-available | -webkit-fill-available | max-content | -moz-max-content | -webkit-max-content | min-content | -moz-min-content | -webkit-min-content | fit-content | -moz-fit-content | -webkit-fit-content\");\n        },\n\n        \"<margin-width>\": function(part){\n            return this[\"<length>\"](part) || this[\"<percentage>\"](part) || ValidationTypes.isLiteral(part, \"auto\");\n        },\n\n        \"<padding-width>\": function(part){\n            return this[\"<length>\"](part) || this[\"<percentage>\"](part);\n        },\n\n        \"<shape>\": function(part){\n            return part.type == \"function\" && (part.name == \"rect\" || part.name == \"inset-rect\");\n        },\n\n        \"<time>\": function(part) {\n            return part.type == \"time\";\n        },\n\n        \"<flex-grow>\": function(part){\n            return this[\"<number>\"](part);\n        },\n\n        \"<flex-shrink>\": function(part){\n            return this[\"<number>\"](part);\n        },\n\n        \"<width>\": function(part){\n            return this[\"<margin-width>\"](part);\n        },\n\n        \"<flex-basis>\": function(part){\n            return this[\"<width>\"](part);\n        },\n\n        \"<flex-direction>\": function(part){\n            return ValidationTypes.isLiteral(part, \"row | row-reverse | column | column-reverse\");\n        },\n\n        \"<flex-wrap>\": function(part){\n            return ValidationTypes.isLiteral(part, \"nowrap | wrap | wrap-reverse\");\n        }\n    },\n\n    complex: {\n\n        \"<bg-position>\": function(expression){\n            var types   = this,\n                result  = false,\n                numeric = \"<percentage> | <length>\",\n                xDir    = \"left | right\",\n                yDir    = \"top | bottom\",\n                count = 0,\n                hasNext = function() {\n                    return expression.hasNext() && expression.peek() != \",\";\n                };\n\n            while (expression.peek(count) && expression.peek(count) != \",\") {\n                count++;\n            }\n\n            if (count < 3) {\n                if (ValidationTypes.isAny(expression, xDir + \" | center | \" + numeric)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, yDir + \" | center | \" + numeric);\n                } else if (ValidationTypes.isAny(expression, yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, xDir + \" | center\");\n                }\n            } else {\n                if (ValidationTypes.isAny(expression, xDir)) {\n                    if (ValidationTypes.isAny(expression, yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    } else if (ValidationTypes.isAny(expression, numeric)) {\n                        if (ValidationTypes.isAny(expression, yDir)) {\n                            result = true;\n                            ValidationTypes.isAny(expression, numeric);\n                        } else if (ValidationTypes.isAny(expression, \"center\")) {\n                            result = true;\n                        }\n                    }\n                } else if (ValidationTypes.isAny(expression, yDir)) {\n                    if (ValidationTypes.isAny(expression, xDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    } else if (ValidationTypes.isAny(expression, numeric)) {\n                        if (ValidationTypes.isAny(expression, xDir)) {\n                                result = true;\n                                ValidationTypes.isAny(expression, numeric);\n                        } else if (ValidationTypes.isAny(expression, \"center\")) {\n                            result = true;\n                        }\n                    }\n                } else if (ValidationTypes.isAny(expression, \"center\")) {\n                    if (ValidationTypes.isAny(expression, xDir + \" | \" + yDir)) {\n                        result = true;\n                        ValidationTypes.isAny(expression, numeric);\n                    }\n                }\n            }\n\n            return result;\n        },\n\n        \"<bg-size>\": function(expression){\n            var types   = this,\n                result  = false,\n                numeric = \"<percentage> | <length> | auto\",\n                part,\n                i, len;\n\n            if (ValidationTypes.isAny(expression, \"cover | contain\")) {\n                result = true;\n            } else if (ValidationTypes.isAny(expression, numeric)) {\n                result = true;\n                ValidationTypes.isAny(expression, numeric);\n            }\n\n            return result;\n        },\n\n        \"<repeat-style>\": function(expression){\n            var result  = false,\n                values  = \"repeat | space | round | no-repeat\",\n                part;\n\n            if (expression.hasNext()){\n                part = expression.next();\n\n                if (ValidationTypes.isLiteral(part, \"repeat-x | repeat-y\")) {\n                    result = true;\n                } else if (ValidationTypes.isLiteral(part, values)) {\n                    result = true;\n\n                    if (expression.hasNext() && ValidationTypes.isLiteral(expression.peek(), values)) {\n                        expression.next();\n                    }\n                }\n            }\n\n            return result;\n\n        },\n\n        \"<shadow>\": function(expression) {\n            var result  = false,\n                count   = 0,\n                inset   = false,\n                color   = false,\n                part;\n\n            if (expression.hasNext()) {\n\n                if (ValidationTypes.isAny(expression, \"inset\")){\n                    inset = true;\n                }\n\n                if (ValidationTypes.isAny(expression, \"<color>\")) {\n                    color = true;\n                }\n\n                while (ValidationTypes.isAny(expression, \"<length>\") && count < 4) {\n                    count++;\n                }\n\n\n                if (expression.hasNext()) {\n                    if (!color) {\n                        ValidationTypes.isAny(expression, \"<color>\");\n                    }\n\n                    if (!inset) {\n                        ValidationTypes.isAny(expression, \"inset\");\n                    }\n\n                }\n\n                result = (count >= 2 && count <= 4);\n\n            }\n\n            return result;\n        },\n\n        \"<x-one-radius>\": function(expression) {\n            var result  = false,\n                simple = \"<length> | <percentage> | inherit\";\n\n            if (ValidationTypes.isAny(expression, simple)){\n                result = true;\n                ValidationTypes.isAny(expression, simple);\n            }\n\n            return result;\n        },\n\n        \"<flex>\": function(expression) {\n            var part,\n                result = false;\n            if (ValidationTypes.isAny(expression, \"none | inherit\")) {\n                result = true;\n            } else {\n                if (ValidationTypes.isType(expression, \"<flex-grow>\")) {\n                    if (expression.peek()) {\n                        if (ValidationTypes.isType(expression, \"<flex-shrink>\")) {\n                            if (expression.peek()) {\n                                result = ValidationTypes.isType(expression, \"<flex-basis>\");\n                            } else {\n                                result = true;\n                            }\n                        } else if (ValidationTypes.isType(expression, \"<flex-basis>\")) {\n                            result = expression.peek() === null;\n                        }\n                    } else {\n                        result = true;\n                    }\n                } else if (ValidationTypes.isType(expression, \"<flex-basis>\")) {\n                    result = true;\n                }\n            }\n\n            if (!result) {\n                part = expression.peek();\n                throw new ValidationError(\"Expected (none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]) but found '\" + expression.value.text + \"'.\", part.line, part.col);\n            }\n\n            return result;\n        }\n    }\n};\n\nparserlib.css = {\nColors              :Colors,\nCombinator          :Combinator,\nParser              :Parser,\nPropertyName        :PropertyName,\nPropertyValue       :PropertyValue,\nPropertyValuePart   :PropertyValuePart,\nMediaFeature        :MediaFeature,\nMediaQuery          :MediaQuery,\nSelector            :Selector,\nSelectorPart        :SelectorPart,\nSelectorSubPart     :SelectorSubPart,\nSpecificity         :Specificity,\nTokenStream         :TokenStream,\nTokens              :Tokens,\nValidationError     :ValidationError\n};\n})();\n\n(function(){\nfor(var prop in parserlib){\nexports[prop] = parserlib[prop];\n}\n})();\n\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\nvar util = {\n  isArray: function (ar) {\n    return Array.isArray(ar) || (typeof ar === 'object' && objectToString(ar) === '[object Array]');\n  },\n  isDate: function (d) {\n    return typeof d === 'object' && objectToString(d) === '[object Date]';\n  },\n  isRegExp: function (re) {\n    return typeof re === 'object' && objectToString(re) === '[object RegExp]';\n  },\n  getRegExpFlags: function (re) {\n    var flags = '';\n    re.global && (flags += 'g');\n    re.ignoreCase && (flags += 'i');\n    re.multiline && (flags += 'm');\n    return flags;\n  }\n};\n\n\nif (typeof module === 'object')\n  module.exports = clone;\n\nfunction clone(parent, circular, depth, prototype) {\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n  function _clone(parent, depth) {\n    if (parent === null)\n      return null;\n\n    if (depth == 0)\n      return parent;\n\n    var child;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (util.isArray(parent)) {\n      child = [];\n    } else if (util.isRegExp(parent)) {\n      child = new RegExp(parent.source, util.getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (util.isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      child = new Buffer(parent.length);\n      parent.copy(child);\n      return child;\n    } else {\n      if (typeof prototype == 'undefined') child = Object.create(Object.getPrototypeOf(parent));\n      else child = Object.create(prototype);\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    for (var i in parent) {\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\nclone.clonePrototype = function(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\nvar CSSLint = (function(){\n\n    var rules           = [],\n        formatters      = [],\n        embeddedRuleset = /\\/\\*csslint([^\\*]*)\\*\\//,\n        api             = new parserlib.util.EventTarget();\n\n    api.version = \"@VERSION@\";\n    api.addRule = function(rule){\n        rules.push(rule);\n        rules[rule.id] = rule;\n    };\n    api.clearRules = function(){\n        rules = [];\n    };\n    api.getRules = function(){\n        return [].concat(rules).sort(function(a,b){\n            return a.id > b.id ? 1 : 0;\n        });\n    };\n    api.getRuleset = function() {\n        var ruleset = {},\n            i = 0,\n            len = rules.length;\n\n        while (i < len){\n            ruleset[rules[i++].id] = 1;    //by default, everything is a warning\n        }\n\n        return ruleset;\n    };\n    function applyEmbeddedRuleset(text, ruleset){\n        var valueMap,\n            embedded = text && text.match(embeddedRuleset),\n            rules = embedded && embedded[1];\n\n        if (rules) {\n            valueMap = {\n                \"true\": 2,  // true is error\n                \"\": 1,      // blank is warning\n                \"false\": 0, // false is ignore\n\n                \"2\": 2,     // explicit error\n                \"1\": 1,     // explicit warning\n                \"0\": 0      // explicit ignore\n            };\n\n            rules.toLowerCase().split(\",\").forEach(function(rule){\n                var pair = rule.split(\":\"),\n                    property = pair[0] || \"\",\n                    value = pair[1] || \"\";\n\n                ruleset[property.trim()] = valueMap[value.trim()];\n            });\n        }\n\n        return ruleset;\n    }\n    api.addFormatter = function(formatter) {\n        formatters[formatter.id] = formatter;\n    };\n    api.getFormatter = function(formatId){\n        return formatters[formatId];\n    };\n    api.format = function(results, filename, formatId, options) {\n        var formatter = this.getFormatter(formatId),\n            result = null;\n\n        if (formatter){\n            result = formatter.startFormat();\n            result += formatter.formatResults(results, filename, options || {});\n            result += formatter.endFormat();\n        }\n\n        return result;\n    };\n    api.hasFormat = function(formatId){\n        return formatters.hasOwnProperty(formatId);\n    };\n    api.verify = function(text, ruleset){\n\n        var i = 0,\n            reporter,\n            lines,\n            report,\n            parser = new parserlib.css.Parser({ starHack: true, ieFilters: true,\n                                                underscoreHack: true, strict: false });\n        lines = text.replace(/\\n\\r?/g, \"$split$\").split(\"$split$\");\n\n        if (!ruleset){\n            ruleset = this.getRuleset();\n        }\n\n        if (embeddedRuleset.test(text)){\n            ruleset = clone(ruleset);\n            ruleset = applyEmbeddedRuleset(text, ruleset);\n        }\n\n        reporter = new Reporter(lines, ruleset);\n\n        ruleset.errors = 2;       //always report parsing errors as errors\n        for (i in ruleset){\n            if(ruleset.hasOwnProperty(i) && ruleset[i]){\n                if (rules[i]){\n                    rules[i].init(parser, reporter);\n                }\n            }\n        }\n        try {\n            parser.parse(text);\n        } catch (ex) {\n            reporter.error(\"Fatal error, cannot continue: \" + ex.message, ex.line, ex.col, {});\n        }\n\n        report = {\n            messages    : reporter.messages,\n            stats       : reporter.stats,\n            ruleset     : reporter.ruleset\n        };\n        report.messages.sort(function (a, b){\n            if (a.rollup && !b.rollup){\n                return 1;\n            } else if (!a.rollup && b.rollup){\n                return -1;\n            } else {\n                return a.line - b.line;\n            }\n        });\n\n        return report;\n    };\n\n    return api;\n\n})();\nfunction Reporter(lines, ruleset){\n    this.messages = [];\n    this.stats = [];\n    this.lines = lines;\n    this.ruleset = ruleset;\n}\n\nReporter.prototype = {\n    constructor: Reporter,\n    error: function(message, line, col, rule){\n        this.messages.push({\n            type    : \"error\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule || {}\n        });\n    },\n    warn: function(message, line, col, rule){\n        this.report(message, line, col, rule);\n    },\n    report: function(message, line, col, rule){\n        this.messages.push({\n            type    : this.ruleset[rule.id] === 2 ? \"error\" : \"warning\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n    info: function(message, line, col, rule){\n        this.messages.push({\n            type    : \"info\",\n            line    : line,\n            col     : col,\n            message : message,\n            evidence: this.lines[line-1],\n            rule    : rule\n        });\n    },\n    rollupError: function(message, rule){\n        this.messages.push({\n            type    : \"error\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n    rollupWarn: function(message, rule){\n        this.messages.push({\n            type    : \"warning\",\n            rollup  : true,\n            message : message,\n            rule    : rule\n        });\n    },\n    stat: function(name, value){\n        this.stats[name] = value;\n    }\n};\nCSSLint._Reporter = Reporter;\nCSSLint.Util = {\n    mix: function(receiver, supplier){\n        var prop;\n\n        for (prop in supplier){\n            if (supplier.hasOwnProperty(prop)){\n                receiver[prop] = supplier[prop];\n            }\n        }\n\n        return prop;\n    },\n    indexOf: function(values, value){\n        if (values.indexOf){\n            return values.indexOf(value);\n        } else {\n            for (var i=0, len=values.length; i < len; i++){\n                if (values[i] === value){\n                    return i;\n                }\n            }\n            return -1;\n        }\n    },\n    forEach: function(values, func) {\n        if (values.forEach){\n            return values.forEach(func);\n        } else {\n            for (var i=0, len=values.length; i < len; i++){\n                func(values[i], i, values);\n            }\n        }\n    }\n};\n\nCSSLint.addRule({\n    id: \"adjoining-classes\",\n    name: \"Disallow adjoining classes\",\n    desc: \"Don't use adjoining classes.\",\n    browsers: \"IE6\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                classCount,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        classCount = 0;\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"class\"){\n                                classCount++;\n                            }\n                            if (classCount > 1){\n                                reporter.report(\"Don't use adjoining classes.\", part.line, part.col, rule);\n                            }\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\nCSSLint.addRule({\n    id: \"box-model\",\n    name: \"Beware of broken box size\",\n    desc: \"Don't use width or height when using padding or border.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            widthProperties = {\n                border: 1,\n                \"border-left\": 1,\n                \"border-right\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1\n            },\n            heightProperties = {\n                border: 1,\n                \"border-bottom\": 1,\n                \"border-top\": 1,\n                padding: 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1\n            },\n            properties,\n            boxSizing = false;\n\n        function startRule(){\n            properties = {};\n            boxSizing = false;\n        }\n\n        function endRule(){\n            var prop, value;\n\n            if (!boxSizing) {\n                if (properties.height){\n                    for (prop in heightProperties){\n                        if (heightProperties.hasOwnProperty(prop) && properties[prop]){\n                            value = properties[prop].value;\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[0].value === 0)){\n                                reporter.report(\"Using height with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n\n                if (properties.width){\n                    for (prop in widthProperties){\n                        if (widthProperties.hasOwnProperty(prop) && properties[prop]){\n                            value = properties[prop].value;\n\n                            if (!(prop === \"padding\" && value.parts.length === 2 && value.parts[1].value === 0)){\n                                reporter.report(\"Using width with \" + prop + \" can sometimes make elements larger than you expect.\", properties[prop].line, properties[prop].col, rule);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (heightProperties[name] || widthProperties[name]){\n                if (!/^0\\S*$/.test(event.value) && !(name === \"border\" && event.value.toString() === \"none\")){\n                    properties[name] = { line: event.property.line, col: event.property.col, value: event.value };\n                }\n            } else {\n                if (/^(width|height)/i.test(name) && /^(length|percentage)/.test(event.value.parts[0].type)){\n                    properties[name] = 1;\n                } else if (name === \"box-sizing\") {\n                    boxSizing = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"box-sizing\",\n    name: \"Disallow use of box-sizing\",\n    desc: \"The box-sizing properties isn't supported in IE6 and IE7.\",\n    browsers: \"IE6, IE7\",\n    tags: [\"Compatibility\"],\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (name === \"box-sizing\"){\n                reporter.report(\"The box-sizing property isn't supported in IE6 and IE7.\", event.line, event.col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"bulletproof-font-face\",\n    name: \"Use the bulletproof @font-face syntax\",\n    desc: \"Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            fontFaceRule = false,\n            firstSrc     = true,\n            ruleFailed    = false,\n            line, col;\n        parser.addListener(\"startfontface\", function(){\n            fontFaceRule = true;\n        });\n\n        parser.addListener(\"property\", function(event){\n            if (!fontFaceRule) {\n                return;\n            }\n\n            var propertyName = event.property.toString().toLowerCase(),\n                value        = event.value.toString();\n            line = event.line;\n            col  = event.col;\n            if (propertyName === \"src\") {\n                var regex = /^\\s?url\\(['\"].+\\.eot\\?.*['\"]\\)\\s*format\\(['\"]embedded-opentype['\"]\\).*$/i;\n                if (!value.match(regex) && firstSrc) {\n                    ruleFailed = true;\n                    firstSrc = false;\n                } else if (value.match(regex) && !firstSrc) {\n                    ruleFailed = false;\n                }\n            }\n\n\n        });\n        parser.addListener(\"endfontface\", function(){\n            fontFaceRule = false;\n\n            if (ruleFailed) {\n                reporter.report(\"@font-face declaration doesn't follow the fontspring bulletproof syntax.\", line, col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"compatible-vendor-prefixes\",\n    name: \"Require compatible vendor prefixes\",\n    desc: \"Include all compatible vendor prefixes to reach a wider range of users.\",\n    browsers: \"All\",\n    init: function (parser, reporter) {\n        var rule = this,\n            compatiblePrefixes,\n            properties,\n            prop,\n            variations,\n            prefixed,\n            i,\n            len,\n            inKeyFrame = false,\n            arrayPush = Array.prototype.push,\n            applyTo = [];\n        compatiblePrefixes = {\n            \"animation\"                  : \"webkit moz\",\n            \"animation-delay\"            : \"webkit moz\",\n            \"animation-direction\"        : \"webkit moz\",\n            \"animation-duration\"         : \"webkit moz\",\n            \"animation-fill-mode\"        : \"webkit moz\",\n            \"animation-iteration-count\"  : \"webkit moz\",\n            \"animation-name\"             : \"webkit moz\",\n            \"animation-play-state\"       : \"webkit moz\",\n            \"animation-timing-function\"  : \"webkit moz\",\n            \"appearance\"                 : \"webkit moz\",\n            \"border-end\"                 : \"webkit moz\",\n            \"border-end-color\"           : \"webkit moz\",\n            \"border-end-style\"           : \"webkit moz\",\n            \"border-end-width\"           : \"webkit moz\",\n            \"border-image\"               : \"webkit moz o\",\n            \"border-radius\"              : \"webkit\",\n            \"border-start\"               : \"webkit moz\",\n            \"border-start-color\"         : \"webkit moz\",\n            \"border-start-style\"         : \"webkit moz\",\n            \"border-start-width\"         : \"webkit moz\",\n            \"box-align\"                  : \"webkit moz ms\",\n            \"box-direction\"              : \"webkit moz ms\",\n            \"box-flex\"                   : \"webkit moz ms\",\n            \"box-lines\"                  : \"webkit ms\",\n            \"box-ordinal-group\"          : \"webkit moz ms\",\n            \"box-orient\"                 : \"webkit moz ms\",\n            \"box-pack\"                   : \"webkit moz ms\",\n            \"box-sizing\"                 : \"webkit moz\",\n            \"box-shadow\"                 : \"webkit moz\",\n            \"column-count\"               : \"webkit moz ms\",\n            \"column-gap\"                 : \"webkit moz ms\",\n            \"column-rule\"                : \"webkit moz ms\",\n            \"column-rule-color\"          : \"webkit moz ms\",\n            \"column-rule-style\"          : \"webkit moz ms\",\n            \"column-rule-width\"          : \"webkit moz ms\",\n            \"column-width\"               : \"webkit moz ms\",\n            \"hyphens\"                    : \"epub moz\",\n            \"line-break\"                 : \"webkit ms\",\n            \"margin-end\"                 : \"webkit moz\",\n            \"margin-start\"               : \"webkit moz\",\n            \"marquee-speed\"              : \"webkit wap\",\n            \"marquee-style\"              : \"webkit wap\",\n            \"padding-end\"                : \"webkit moz\",\n            \"padding-start\"              : \"webkit moz\",\n            \"tab-size\"                   : \"moz o\",\n            \"text-size-adjust\"           : \"webkit ms\",\n            \"transform\"                  : \"webkit moz ms o\",\n            \"transform-origin\"           : \"webkit moz ms o\",\n            \"transition\"                 : \"webkit moz o\",\n            \"transition-delay\"           : \"webkit moz o\",\n            \"transition-duration\"        : \"webkit moz o\",\n            \"transition-property\"        : \"webkit moz o\",\n            \"transition-timing-function\" : \"webkit moz o\",\n            \"user-modify\"                : \"webkit moz\",\n            \"user-select\"                : \"webkit moz ms\",\n            \"word-break\"                 : \"epub ms\",\n            \"writing-mode\"               : \"epub ms\"\n        };\n\n\n        for (prop in compatiblePrefixes) {\n            if (compatiblePrefixes.hasOwnProperty(prop)) {\n                variations = [];\n                prefixed = compatiblePrefixes[prop].split(\" \");\n                for (i = 0, len = prefixed.length; i < len; i++) {\n                    variations.push(\"-\" + prefixed[i] + \"-\" + prop);\n                }\n                compatiblePrefixes[prop] = variations;\n                arrayPush.apply(applyTo, variations);\n            }\n        }\n\n        parser.addListener(\"startrule\", function () {\n            properties = [];\n        });\n\n        parser.addListener(\"startkeyframes\", function (event) {\n            inKeyFrame = event.prefix || true;\n        });\n\n        parser.addListener(\"endkeyframes\", function () {\n            inKeyFrame = false;\n        });\n\n        parser.addListener(\"property\", function (event) {\n            var name = event.property;\n            if (CSSLint.Util.indexOf(applyTo, name.text) > -1) {\n                if (!inKeyFrame || typeof inKeyFrame !== \"string\" ||\n                        name.text.indexOf(\"-\" + inKeyFrame + \"-\") !== 0) {\n                    properties.push(name);\n                }\n            }\n        });\n\n        parser.addListener(\"endrule\", function () {\n            if (!properties.length) {\n                return;\n            }\n\n            var propertyGroups = {},\n                i,\n                len,\n                name,\n                prop,\n                variations,\n                value,\n                full,\n                actual,\n                item,\n                propertiesSpecified;\n\n            for (i = 0, len = properties.length; i < len; i++) {\n                name = properties[i];\n\n                for (prop in compatiblePrefixes) {\n                    if (compatiblePrefixes.hasOwnProperty(prop)) {\n                        variations = compatiblePrefixes[prop];\n                        if (CSSLint.Util.indexOf(variations, name.text) > -1) {\n                            if (!propertyGroups[prop]) {\n                                propertyGroups[prop] = {\n                                    full : variations.slice(0),\n                                    actual : [],\n                                    actualNodes: []\n                                };\n                            }\n                            if (CSSLint.Util.indexOf(propertyGroups[prop].actual, name.text) === -1) {\n                                propertyGroups[prop].actual.push(name.text);\n                                propertyGroups[prop].actualNodes.push(name);\n                            }\n                        }\n                    }\n                }\n            }\n\n            for (prop in propertyGroups) {\n                if (propertyGroups.hasOwnProperty(prop)) {\n                    value = propertyGroups[prop];\n                    full = value.full;\n                    actual = value.actual;\n\n                    if (full.length > actual.length) {\n                        for (i = 0, len = full.length; i < len; i++) {\n                            item = full[i];\n                            if (CSSLint.Util.indexOf(actual, item) === -1) {\n                                propertiesSpecified = (actual.length === 1) ? actual[0] : (actual.length === 2) ? actual.join(\" and \") : actual.join(\", \");\n                                reporter.report(\"The property \" + item + \" is compatible with \" + propertiesSpecified + \" and should be included as well.\", value.actualNodes[0].line, value.actualNodes[0].col, rule);\n                            }\n                        }\n\n                    }\n                }\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"display-property-grouping\",\n    name: \"Require properties appropriate for display\",\n    desc: \"Certain properties shouldn't be used with certain display property values.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        var propertiesToCheck = {\n                display: 1,\n                \"float\": \"none\",\n                height: 1,\n                width: 1,\n                margin: 1,\n                \"margin-left\": 1,\n                \"margin-right\": 1,\n                \"margin-bottom\": 1,\n                \"margin-top\": 1,\n                padding: 1,\n                \"padding-left\": 1,\n                \"padding-right\": 1,\n                \"padding-bottom\": 1,\n                \"padding-top\": 1,\n                \"vertical-align\": 1\n            },\n            properties;\n\n        function reportProperty(name, display, msg){\n            if (properties[name]){\n                if (typeof propertiesToCheck[name] !== \"string\" || properties[name].value.toLowerCase() !== propertiesToCheck[name]){\n                    reporter.report(msg || name + \" can't be used with display: \" + display + \".\", properties[name].line, properties[name].col, rule);\n                }\n            }\n        }\n\n        function startRule(){\n            properties = {};\n        }\n\n        function endRule(){\n\n            var display = properties.display ? properties.display.value : null;\n            if (display){\n                switch(display){\n\n                    case \"inline\":\n                        reportProperty(\"height\", display);\n                        reportProperty(\"width\", display);\n                        reportProperty(\"margin\", display);\n                        reportProperty(\"margin-top\", display);\n                        reportProperty(\"margin-bottom\", display);\n                        reportProperty(\"float\", display, \"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).\");\n                        break;\n\n                    case \"block\":\n                        reportProperty(\"vertical-align\", display);\n                        break;\n\n                    case \"inline-block\":\n                        reportProperty(\"float\", display);\n                        break;\n\n                    default:\n                        if (display.indexOf(\"table-\") === 0){\n                            reportProperty(\"margin\", display);\n                            reportProperty(\"margin-left\", display);\n                            reportProperty(\"margin-right\", display);\n                            reportProperty(\"margin-top\", display);\n                            reportProperty(\"margin-bottom\", display);\n                            reportProperty(\"float\", display);\n                        }\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startpage\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (propertiesToCheck[name]){\n                properties[name] = { value: event.value.text, line: event.property.line, col: event.property.col };\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endpage\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"duplicate-background-images\",\n    name: \"Disallow duplicate background images\",\n    desc: \"Every background-image should be unique. Use a common class for e.g. sprites.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            stack = {};\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text,\n                value = event.value,\n                i, len;\n\n            if (name.match(/background/i)) {\n                for (i=0, len=value.parts.length; i < len; i++) {\n                    if (value.parts[i].type === \"uri\") {\n                        if (typeof stack[value.parts[i].uri] === \"undefined\") {\n                            stack[value.parts[i].uri] = event;\n                        }\n                        else {\n                            reporter.report(\"Background image '\" + value.parts[i].uri + \"' was used multiple times, first declared at line \" + stack[value.parts[i].uri].line + \", col \" + stack[value.parts[i].uri].col + \".\", event.line, event.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"duplicate-properties\",\n    name: \"Disallow duplicate properties\",\n    desc: \"Duplicate properties must appear one after the other.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            properties,\n            lastProperty;\n\n        function startRule(){\n            properties = {};\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var property = event.property,\n                name = property.text.toLowerCase();\n\n            if (properties[name] && (lastProperty !== name || properties[name] === event.value.text)){\n                reporter.report(\"Duplicate property '\" + event.property + \"' found.\", event.line, event.col, rule);\n            }\n\n            properties[name] = event.value.text;\n            lastProperty = name;\n\n        });\n\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"empty-rules\",\n    name: \"Disallow empty rules\",\n    desc: \"Rules without any properties specified should be removed.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n        parser.addListener(\"startrule\", function(){\n            count=0;\n        });\n\n        parser.addListener(\"property\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var selectors = event.selectors;\n            if (count === 0){\n                reporter.report(\"Rule is empty.\", selectors[0].line, selectors[0].col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"errors\",\n    name: \"Parsing Errors\",\n    desc: \"This rule looks for recoverable syntax errors.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"error\", function(event){\n            reporter.error(event.message, event.line, event.col, rule);\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"fallback-colors\",\n    name: \"Require fallback colors\",\n    desc: \"For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.\",\n    browsers: \"IE6,IE7,IE8\",\n    init: function(parser, reporter){\n        var rule = this,\n            lastProperty,\n            propertiesToCheck = {\n                color: 1,\n                background: 1,\n                \"border-color\": 1,\n                \"border-top-color\": 1,\n                \"border-right-color\": 1,\n                \"border-bottom-color\": 1,\n                \"border-left-color\": 1,\n                border: 1,\n                \"border-top\": 1,\n                \"border-right\": 1,\n                \"border-bottom\": 1,\n                \"border-left\": 1,\n                \"background-color\": 1\n            },\n            properties;\n\n        function startRule(){\n            properties = {};\n            lastProperty = null;\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var property = event.property,\n                name = property.text.toLowerCase(),\n                parts = event.value.parts,\n                i = 0,\n                colorType = \"\",\n                len = parts.length;\n\n            if(propertiesToCheck[name]){\n                while(i < len){\n                    if (parts[i].type === \"color\"){\n                        if (\"alpha\" in parts[i] || \"hue\" in parts[i]){\n\n                            if (/([^\\)]+)\\(/.test(parts[i])){\n                                colorType = RegExp.$1.toUpperCase();\n                            }\n\n                            if (!lastProperty || (lastProperty.property.text.toLowerCase() !== name || lastProperty.colorType !== \"compat\")){\n                                reporter.report(\"Fallback \" + name + \" (hex or RGB) should precede \" + colorType + \" \" + name + \".\", event.line, event.col, rule);\n                            }\n                        } else {\n                            event.colorType = \"compat\";\n                        }\n                    }\n\n                    i++;\n                }\n            }\n\n            lastProperty = event;\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"floats\",\n    name: \"Disallow too many floats\",\n    desc: \"This rule tests if the float property is used too many times\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        var count = 0;\n        parser.addListener(\"property\", function(event){\n            if (event.property.text.toLowerCase() === \"float\" &&\n                    event.value.text.toLowerCase() !== \"none\"){\n                count++;\n            }\n        });\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"floats\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many floats (\" + count + \"), you're probably using them for layout. Consider using a grid system instead.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"font-faces\",\n    name: \"Don't use too many web fonts\",\n    desc: \"Too many different web fonts in the same stylesheet.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n\n\n        parser.addListener(\"startfontface\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            if (count > 5){\n                reporter.rollupWarn(\"Too many @font-face declarations (\" + count + \").\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"font-sizes\",\n    name: \"Disallow too many font sizes\",\n    desc: \"Checks the number of font-size declarations.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n        parser.addListener(\"property\", function(event){\n            if (event.property.toString() === \"font-size\"){\n                count++;\n            }\n        });\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"font-sizes\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many font-size declarations (\" + count + \"), abstraction needed.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"gradients\",\n    name: \"Require all gradient definitions\",\n    desc: \"When using a vendor-prefixed gradient, make sure to use them all.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            gradients;\n\n        parser.addListener(\"startrule\", function(){\n            gradients = {\n                moz: 0,\n                webkit: 0,\n                oldWebkit: 0,\n                o: 0\n            };\n        });\n\n        parser.addListener(\"property\", function(event){\n\n            if (/\\-(moz|o|webkit)(?:\\-(?:linear|radial))\\-gradient/i.test(event.value)){\n                gradients[RegExp.$1] = 1;\n            } else if (/\\-webkit\\-gradient/i.test(event.value)){\n                gradients.oldWebkit = 1;\n            }\n\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var missing = [];\n\n            if (!gradients.moz){\n                missing.push(\"Firefox 3.6+\");\n            }\n\n            if (!gradients.webkit){\n                missing.push(\"Webkit (Safari 5+, Chrome)\");\n            }\n\n            if (!gradients.oldWebkit){\n                missing.push(\"Old Webkit (Safari 4+, Chrome)\");\n            }\n\n            if (!gradients.o){\n                missing.push(\"Opera 11.1+\");\n            }\n\n            if (missing.length && missing.length < 4){\n                reporter.report(\"Missing vendor-prefixed CSS gradients for \" + missing.join(\", \") + \".\", event.selectors[0].line, event.selectors[0].col, rule);\n            }\n\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"ids\",\n    name: \"Disallow IDs in selectors\",\n    desc: \"Selectors should not contain IDs.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                idCount,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                idCount = 0;\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"id\"){\n                                idCount++;\n                            }\n                        }\n                    }\n                }\n\n                if (idCount === 1){\n                    reporter.report(\"Don't use IDs in selectors.\", selector.line, selector.col, rule);\n                } else if (idCount > 1){\n                    reporter.report(idCount + \" IDs in the selector, really?\", selector.line, selector.col, rule);\n                }\n            }\n\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"import\",\n    name: \"Disallow @import\",\n    desc: \"Don't use @import, use <link> instead.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"import\", function(event){\n            reporter.report(\"@import prevents parallel downloads, use <link> instead.\", event.line, event.col, rule);\n        });\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"important\",\n    name: \"Disallow !important\",\n    desc: \"Be careful when using !important declaration\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            count = 0;\n        parser.addListener(\"property\", function(event){\n            if (event.important === true){\n                count++;\n                reporter.report(\"Use of !important\", event.line, event.col, rule);\n            }\n        });\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"important\", count);\n            if (count >= 10){\n                reporter.rollupWarn(\"Too many !important declarations (\" + count + \"), try to use less than 10 to avoid specificity issues.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"known-properties\",\n    name: \"Require use of known properties\",\n    desc: \"Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"property\", function(event){\n            if (event.invalid) {\n                reporter.report(event.invalid.message, event.line, event.col, rule);\n            }\n\n        });\n    }\n\n});\nCSSLint.addRule({\n    id: \"order-alphabetical\",\n    name: \"Alphabetical order\",\n    desc: \"Assure properties are in alphabetical order\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            properties;\n\n        var startRule = function () {\n            properties = [];\n        };\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text,\n                lowerCasePrefixLessName = name.toLowerCase().replace(/^-.*?-/, \"\");\n\n            properties.push(lowerCasePrefixLessName);\n        });\n\n        parser.addListener(\"endrule\", function(event){\n            var currentProperties = properties.join(\",\"),\n                expectedProperties = properties.sort().join(\",\");\n\n            if (currentProperties !== expectedProperties){\n                reporter.report(\"Rule doesn't have all its properties in alphabetical ordered.\", event.line, event.col, rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"outline-none\",\n    name: \"Disallow outline: none\",\n    desc: \"Use of outline: none or outline: 0 should be limited to :focus rules.\",\n    browsers: \"All\",\n    tags: [\"Accessibility\"],\n    init: function(parser, reporter){\n        var rule = this,\n            lastRule;\n\n        function startRule(event){\n            if (event.selectors){\n                lastRule = {\n                    line: event.line,\n                    col: event.col,\n                    selectors: event.selectors,\n                    propCount: 0,\n                    outline: false\n                };\n            } else {\n                lastRule = null;\n            }\n        }\n\n        function endRule(){\n            if (lastRule){\n                if (lastRule.outline){\n                    if (lastRule.selectors.toString().toLowerCase().indexOf(\":focus\") === -1){\n                        reporter.report(\"Outlines should only be modified using :focus.\", lastRule.line, lastRule.col, rule);\n                    } else if (lastRule.propCount === 1) {\n                        reporter.report(\"Outlines shouldn't be hidden unless other visual changes are made.\", lastRule.line, lastRule.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase(),\n                value = event.value;\n\n            if (lastRule){\n                lastRule.propCount++;\n                if (name === \"outline\" && (value.toString() === \"none\" || value.toString() === \"0\")){\n                    lastRule.outline = true;\n                }\n            }\n\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"overqualified-elements\",\n    name: \"Disallow overqualified elements\",\n    desc: \"Don't use classes or IDs with elements (a.foo or a#foo).\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            classes = {};\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (part.elementName && modifier.type === \"id\"){\n                                reporter.report(\"Element (\" + part + \") is overqualified, just use \" + modifier + \" without element name.\", part.line, part.col, rule);\n                            } else if (modifier.type === \"class\"){\n\n                                if (!classes[modifier]){\n                                    classes[modifier] = [];\n                                }\n                                classes[modifier].push({ modifier: modifier, part: part });\n                            }\n                        }\n                    }\n                }\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n\n            var prop;\n            for (prop in classes){\n                if (classes.hasOwnProperty(prop)){\n                    if (classes[prop].length === 1 && classes[prop][0].part.elementName){\n                        reporter.report(\"Element (\" + classes[prop][0].part + \") is overqualified, just use \" + classes[prop][0].modifier + \" without element name.\", classes[prop][0].part.line, classes[prop][0].part.col, rule);\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"qualified-headings\",\n    name: \"Disallow qualified headings\",\n    desc: \"Headings should not be qualified (namespaced).\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                i, j;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        if (part.elementName && /h[1-6]/.test(part.elementName.toString()) && j > 0){\n                            reporter.report(\"Heading (\" + part.elementName + \") should not be qualified.\", part.line, part.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"regex-selectors\",\n    name: \"Disallow selectors that look like regexs\",\n    desc: \"Selectors that look like regular expressions are slow and should be avoided.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, j, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                for (j=0; j < selector.parts.length; j++){\n                    part = selector.parts[j];\n                    if (part.type === parser.SELECTOR_PART_TYPE){\n                        for (k=0; k < part.modifiers.length; k++){\n                            modifier = part.modifiers[k];\n                            if (modifier.type === \"attribute\"){\n                                if (/([\\~\\|\\^\\$\\*]=)/.test(modifier)){\n                                    reporter.report(\"Attribute selectors with \" + RegExp.$1 + \" are slow!\", modifier.line, modifier.col, rule);\n                                }\n                            }\n\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"rules-count\",\n    name: \"Rules Count\",\n    desc: \"Track how many rules there are.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var count = 0;\n        parser.addListener(\"startrule\", function(){\n            count++;\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            reporter.stat(\"rule-count\", count);\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-max-approaching\",\n    name: \"Warn when approaching the 4095 selector limit for IE\",\n    desc: \"Will warn when selector count is >= 3800 selectors.\",\n    browsers: \"IE\",\n    init: function(parser, reporter) {\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count >= 3800) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-max\",\n    name: \"Error when past the 4095 selector limit for IE\",\n    desc: \"Will error when selector count is > 4095.\",\n    browsers: \"IE\",\n    init: function(parser, reporter){\n        var rule = this, count = 0;\n\n        parser.addListener(\"startrule\", function(event) {\n            count += event.selectors.length;\n        });\n\n        parser.addListener(\"endstylesheet\", function() {\n            if (count > 4095) {\n                reporter.report(\"You have \" + count + \" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"selector-newline\",\n    name: \"Disallow new-line characters in selectors\",\n    desc: \"New-line characters in selectors are usually a forgotten comma and not a descendant combinator.\",\n    browsers: \"All\",\n    init: function(parser, reporter) {\n        var rule = this;\n\n        function startRule(event) {\n            var i, len, selector, p, n, pLen, part, part2, type, currentLine, nextLine,\n                selectors = event.selectors;\n\n            for (i = 0, len = selectors.length; i < len; i++) {\n                selector = selectors[i];\n                for (p = 0, pLen = selector.parts.length; p < pLen; p++) {\n                    for (n = p + 1; n < pLen; n++) {\n                        part = selector.parts[p];\n                        part2 = selector.parts[n];\n                        type = part.type;\n                        currentLine = part.line;\n                        nextLine = part2.line;\n\n                        if (type === \"descendant\" && nextLine > currentLine) {\n                            reporter.report(\"newline character found in selector (forgot a comma?)\", currentLine, selectors[i].parts[0].col, rule);\n                        }\n                    }\n                }\n\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n\n    }\n});\n\nCSSLint.addRule({\n    id: \"shorthand\",\n    name: \"Require shorthand properties\",\n    desc: \"Use shorthand properties where possible.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            prop, i, len,\n            propertiesToCheck = {},\n            properties,\n            mapping = {\n                \"margin\": [\n                    \"margin-top\",\n                    \"margin-bottom\",\n                    \"margin-left\",\n                    \"margin-right\"\n                ],\n                \"padding\": [\n                    \"padding-top\",\n                    \"padding-bottom\",\n                    \"padding-left\",\n                    \"padding-right\"\n                ]\n            };\n        for (prop in mapping){\n            if (mapping.hasOwnProperty(prop)){\n                for (i=0, len=mapping[prop].length; i < len; i++){\n                    propertiesToCheck[mapping[prop][i]] = prop;\n                }\n            }\n        }\n\n        function startRule(){\n            properties = {};\n        }\n        function endRule(event){\n\n            var prop, i, len, total;\n            for (prop in mapping){\n                if (mapping.hasOwnProperty(prop)){\n                    total=0;\n\n                    for (i=0, len=mapping[prop].length; i < len; i++){\n                        total += properties[mapping[prop][i]] ? 1 : 0;\n                    }\n\n                    if (total === mapping[prop].length){\n                        reporter.report(\"The properties \" + mapping[prop].join(\", \") + \" can be replaced by \" + prop + \".\", event.line, event.col, rule);\n                    }\n                }\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"property\", function(event){\n            var name = event.property.toString().toLowerCase();\n\n            if (propertiesToCheck[name]){\n                properties[name] = 1;\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"star-property-hack\",\n    name: \"Disallow properties with a star prefix\",\n    desc: \"Checks for the star property hack (targets IE6/7)\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"property\", function(event){\n            var property = event.property;\n\n            if (property.hack === \"*\") {\n                reporter.report(\"Property with star prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"text-indent\",\n    name: \"Disallow negative text-indent\",\n    desc: \"Checks for text indent less than -99px\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            textIndent,\n            direction;\n\n\n        function startRule(){\n            textIndent = false;\n            direction = \"inherit\";\n        }\n        function endRule(){\n            if (textIndent && direction !== \"ltr\"){\n                reporter.report(\"Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.\", textIndent.line, textIndent.col, rule);\n            }\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"property\", function(event){\n            var name = event.property.toString().toLowerCase(),\n                value = event.value;\n\n            if (name === \"text-indent\" && value.parts[0].value < -99){\n                textIndent = event.property;\n            } else if (name === \"direction\" && value.toString() === \"ltr\"){\n                direction = \"ltr\";\n            }\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"underscore-property-hack\",\n    name: \"Disallow properties with an underscore prefix\",\n    desc: \"Checks for the underscore property hack (targets IE6)\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"property\", function(event){\n            var property = event.property;\n\n            if (property.hack === \"_\") {\n                reporter.report(\"Property with underscore prefix found.\", event.property.line, event.property.col, rule);\n            }\n        });\n    }\n});\n\nCSSLint.addRule({\n    id: \"unique-headings\",\n    name: \"Headings should only be defined once\",\n    desc: \"Headings should be defined only once.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        var headings = {\n                h1: 0,\n                h2: 0,\n                h3: 0,\n                h4: 0,\n                h5: 0,\n                h6: 0\n            };\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                pseudo,\n                i, j;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n                part = selector.parts[selector.parts.length-1];\n\n                if (part.elementName && /(h[1-6])/i.test(part.elementName.toString())){\n\n                    for (j=0; j < part.modifiers.length; j++){\n                        if (part.modifiers[j].type === \"pseudo\"){\n                            pseudo = true;\n                            break;\n                        }\n                    }\n\n                    if (!pseudo){\n                        headings[RegExp.$1]++;\n                        if (headings[RegExp.$1] > 1) {\n                            reporter.report(\"Heading (\" + part.elementName + \") has already been defined.\", part.line, part.col, rule);\n                        }\n                    }\n                }\n            }\n        });\n\n        parser.addListener(\"endstylesheet\", function(){\n            var prop,\n                messages = [];\n\n            for (prop in headings){\n                if (headings.hasOwnProperty(prop)){\n                    if (headings[prop] > 1){\n                        messages.push(headings[prop] + \" \" + prop + \"s\");\n                    }\n                }\n            }\n\n            if (messages.length){\n                reporter.rollupWarn(\"You have \" + messages.join(\", \") + \" defined in this stylesheet.\", rule);\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"universal-selector\",\n    name: \"Disallow universal selector\",\n    desc: \"The universal selector (*) is known to be slow.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n            var selectors = event.selectors,\n                selector,\n                part,\n                i;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.elementName === \"*\"){\n                    reporter.report(rule.desc, part.line, part.col, rule);\n                }\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"unqualified-attributes\",\n    name: \"Disallow unqualified attribute selectors\",\n    desc: \"Unqualified attribute selectors are known to be slow.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n\n        parser.addListener(\"startrule\", function(event){\n\n            var selectors = event.selectors,\n                selector,\n                part,\n                modifier,\n                i, k;\n\n            for (i=0; i < selectors.length; i++){\n                selector = selectors[i];\n\n                part = selector.parts[selector.parts.length-1];\n                if (part.type === parser.SELECTOR_PART_TYPE){\n                    for (k=0; k < part.modifiers.length; k++){\n                        modifier = part.modifiers[k];\n                        if (modifier.type === \"attribute\" && (!part.elementName || part.elementName === \"*\")){\n                            reporter.report(rule.desc, part.line, part.col, rule);\n                        }\n                    }\n                }\n\n            }\n        });\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"vendor-prefix\",\n    name: \"Require standard property with vendor prefix\",\n    desc: \"When using a vendor-prefixed property, make sure to include the standard one.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this,\n            properties,\n            num,\n            propertiesToCheck = {\n                \"-webkit-border-radius\": \"border-radius\",\n                \"-webkit-border-top-left-radius\": \"border-top-left-radius\",\n                \"-webkit-border-top-right-radius\": \"border-top-right-radius\",\n                \"-webkit-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-webkit-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-o-border-radius\": \"border-radius\",\n                \"-o-border-top-left-radius\": \"border-top-left-radius\",\n                \"-o-border-top-right-radius\": \"border-top-right-radius\",\n                \"-o-border-bottom-left-radius\": \"border-bottom-left-radius\",\n                \"-o-border-bottom-right-radius\": \"border-bottom-right-radius\",\n\n                \"-moz-border-radius\": \"border-radius\",\n                \"-moz-border-radius-topleft\": \"border-top-left-radius\",\n                \"-moz-border-radius-topright\": \"border-top-right-radius\",\n                \"-moz-border-radius-bottomleft\": \"border-bottom-left-radius\",\n                \"-moz-border-radius-bottomright\": \"border-bottom-right-radius\",\n\n                \"-moz-column-count\": \"column-count\",\n                \"-webkit-column-count\": \"column-count\",\n\n                \"-moz-column-gap\": \"column-gap\",\n                \"-webkit-column-gap\": \"column-gap\",\n\n                \"-moz-column-rule\": \"column-rule\",\n                \"-webkit-column-rule\": \"column-rule\",\n\n                \"-moz-column-rule-style\": \"column-rule-style\",\n                \"-webkit-column-rule-style\": \"column-rule-style\",\n\n                \"-moz-column-rule-color\": \"column-rule-color\",\n                \"-webkit-column-rule-color\": \"column-rule-color\",\n\n                \"-moz-column-rule-width\": \"column-rule-width\",\n                \"-webkit-column-rule-width\": \"column-rule-width\",\n\n                \"-moz-column-width\": \"column-width\",\n                \"-webkit-column-width\": \"column-width\",\n\n                \"-webkit-column-span\": \"column-span\",\n                \"-webkit-columns\": \"columns\",\n\n                \"-moz-box-shadow\": \"box-shadow\",\n                \"-webkit-box-shadow\": \"box-shadow\",\n\n                \"-moz-transform\" : \"transform\",\n                \"-webkit-transform\" : \"transform\",\n                \"-o-transform\" : \"transform\",\n                \"-ms-transform\" : \"transform\",\n\n                \"-moz-transform-origin\" : \"transform-origin\",\n                \"-webkit-transform-origin\" : \"transform-origin\",\n                \"-o-transform-origin\" : \"transform-origin\",\n                \"-ms-transform-origin\" : \"transform-origin\",\n\n                \"-moz-box-sizing\" : \"box-sizing\",\n                \"-webkit-box-sizing\" : \"box-sizing\"\n            };\n        function startRule(){\n            properties = {};\n            num = 1;\n        }\n        function endRule(){\n            var prop,\n                i,\n                len,\n                needed,\n                actual,\n                needsStandard = [];\n\n            for (prop in properties){\n                if (propertiesToCheck[prop]){\n                    needsStandard.push({ actual: prop, needed: propertiesToCheck[prop]});\n                }\n            }\n\n            for (i=0, len=needsStandard.length; i < len; i++){\n                needed = needsStandard[i].needed;\n                actual = needsStandard[i].actual;\n\n                if (!properties[needed]){\n                    reporter.report(\"Missing standard property '\" + needed + \"' to go along with '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                } else {\n                    if (properties[needed][0].pos < properties[actual][0].pos){\n                        reporter.report(\"Standard property '\" + needed + \"' should come after vendor-prefixed property '\" + actual + \"'.\", properties[actual][0].name.line, properties[actual][0].name.col, rule);\n                    }\n                }\n            }\n\n        }\n\n        parser.addListener(\"startrule\", startRule);\n        parser.addListener(\"startfontface\", startRule);\n        parser.addListener(\"startpage\", startRule);\n        parser.addListener(\"startpagemargin\", startRule);\n        parser.addListener(\"startkeyframerule\", startRule);\n\n        parser.addListener(\"property\", function(event){\n            var name = event.property.text.toLowerCase();\n\n            if (!properties[name]){\n                properties[name] = [];\n            }\n\n            properties[name].push({ name: event.property, value : event.value, pos:num++ });\n        });\n\n        parser.addListener(\"endrule\", endRule);\n        parser.addListener(\"endfontface\", endRule);\n        parser.addListener(\"endpage\", endRule);\n        parser.addListener(\"endpagemargin\", endRule);\n        parser.addListener(\"endkeyframerule\", endRule);\n    }\n\n});\n\nCSSLint.addRule({\n    id: \"zero-units\",\n    name: \"Disallow units for 0 values\",\n    desc: \"You don't need to specify units when a value is 0.\",\n    browsers: \"All\",\n    init: function(parser, reporter){\n        var rule = this;\n        parser.addListener(\"property\", function(event){\n            var parts = event.value.parts,\n                i = 0,\n                len = parts.length;\n\n            while(i < len){\n                if ((parts[i].units || parts[i].type === \"percentage\") && parts[i].value === 0 && parts[i].type !== \"time\"){\n                    reporter.report(\"Values of 0 shouldn't have units specified.\", parts[i].line, parts[i].col, rule);\n                }\n                i++;\n            }\n\n        });\n\n    }\n\n});\n\n(function() {\n    var xmlEscape = function(str) {\n        if (!str || str.constructor !== String) {\n            return \"\";\n        }\n\n        return str.replace(/[\\\"&><]/g, function(match) {\n            switch (match) {\n                case \"\\\"\":\n                    return \"&quot;\";\n                case \"&\":\n                    return \"&amp;\";\n                case \"<\":\n                    return \"&lt;\";\n                case \">\":\n                    return \"&gt;\";\n            }\n        });\n    };\n\n    CSSLint.addFormatter({\n        id: \"checkstyle-xml\",\n        name: \"Checkstyle XML format\",\n        startFormat: function(){\n            return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><checkstyle>\";\n        },\n        endFormat: function(){\n            return \"</checkstyle>\";\n        },\n        readError: function(filename, message) {\n            return \"<file name=\\\"\" + xmlEscape(filename) + \"\\\"><error line=\\\"0\\\" column=\\\"0\\\" severty=\\\"error\\\" message=\\\"\" + xmlEscape(message) + \"\\\"></error></file>\";\n        },\n        formatResults: function(results, filename/*, options*/) {\n            var messages = results.messages,\n                output = [];\n            var generateSource = function(rule) {\n                if (!rule || !(\"name\" in rule)) {\n                    return \"\";\n                }\n                return \"net.csslint.\" + rule.name.replace(/\\s/g,\"\");\n            };\n\n\n\n            if (messages.length > 0) {\n                output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n                CSSLint.Util.forEach(messages, function (message) {\n                    if (!message.rollup) {\n                        output.push(\"<error line=\\\"\" + message.line + \"\\\" column=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                          \" message=\\\"\" + xmlEscape(message.message) + \"\\\" source=\\\"\" + generateSource(message.rule) +\"\\\"/>\");\n                    }\n                });\n                output.push(\"</file>\");\n            }\n\n            return output.join(\"\");\n        }\n    });\n\n}());\n\nCSSLint.addFormatter({\n    id: \"compact\",\n    name: \"Compact, 'porcelain' format\",\n    startFormat: function() {\n        return \"\";\n    },\n    endFormat: function() {\n        return \"\";\n    },\n    formatResults: function(results, filename, options) {\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n        var capitalize = function(str) {\n            return str.charAt(0).toUpperCase() + str.slice(1);\n        };\n\n        if (messages.length === 0) {\n              return options.quiet ? \"\" : filename + \": Lint Free!\";\n        }\n\n        CSSLint.Util.forEach(messages, function(message) {\n            if (message.rollup) {\n                output += filename + \": \" + capitalize(message.type) + \" - \" + message.message + \"\\n\";\n            } else {\n                output += filename + \": \" + \"line \" + message.line +\n                    \", col \" + message.col + \", \" + capitalize(message.type) + \" - \" + message.message + \" (\" + message.rule.id + \")\\n\";\n            }\n        });\n\n        return output;\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"csslint-xml\",\n    name: \"CSSLint XML format\",\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><csslint>\";\n    },\n    endFormat: function(){\n        return \"</csslint>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n        var messages = results.messages,\n            output = [];\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\\\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    output.push(\"<issue line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"junit-xml\",\n    name: \"JUNIT XML format\",\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><testsuites>\";\n    },\n    endFormat: function() {\n        return \"</testsuites>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n\n        var messages = results.messages,\n            output = [],\n            tests = {\n                \"error\": 0,\n                \"failure\": 0\n            };\n        var generateSource = function(rule) {\n            if (!rule || !(\"name\" in rule)) {\n                return \"\";\n            }\n            return \"net.csslint.\" + rule.name.replace(/\\s/g,\"\");\n        };\n        var escapeSpecialCharacters = function(str) {\n\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n\n            return str.replace(/\\\"/g, \"'\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\n        };\n\n        if (messages.length > 0) {\n\n            messages.forEach(function (message) {\n                var type = message.type === \"warning\" ? \"error\" : message.type;\n                if (!message.rollup) {\n                    output.push(\"<testcase time=\\\"0\\\" name=\\\"\" + generateSource(message.rule) + \"\\\">\");\n                    output.push(\"<\" + type + \" message=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\"><![CDATA[\" + message.line + \":\" + message.col + \":\" + escapeSpecialCharacters(message.evidence)  + \"]]></\" + type + \">\");\n                    output.push(\"</testcase>\");\n\n                    tests[type] += 1;\n\n                }\n\n            });\n\n            output.unshift(\"<testsuite time=\\\"0\\\" tests=\\\"\" + messages.length + \"\\\" skipped=\\\"0\\\" errors=\\\"\" + tests.error + \"\\\" failures=\\\"\" + tests.failure + \"\\\" package=\\\"net.csslint\\\" name=\\\"\" + filename + \"\\\">\");\n            output.push(\"</testsuite>\");\n\n        }\n\n        return output.join(\"\");\n\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"lint-xml\",\n    name: \"Lint XML format\",\n    startFormat: function(){\n        return \"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?><lint>\";\n    },\n    endFormat: function(){\n        return \"</lint>\";\n    },\n    formatResults: function(results, filename/*, options*/) {\n        var messages = results.messages,\n            output = [];\n        var escapeSpecialCharacters = function(str) {\n            if (!str || str.constructor !== String) {\n                return \"\";\n            }\n            return str.replace(/\\\"/g, \"'\").replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n        };\n\n        if (messages.length > 0) {\n\n            output.push(\"<file name=\\\"\"+filename+\"\\\">\");\n            CSSLint.Util.forEach(messages, function (message) {\n                if (message.rollup) {\n                    output.push(\"<issue severity=\\\"\" + message.type + \"\\\" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                } else {\n                    output.push(\"<issue line=\\\"\" + message.line + \"\\\" char=\\\"\" + message.col + \"\\\" severity=\\\"\" + message.type + \"\\\"\" +\n                        \" reason=\\\"\" + escapeSpecialCharacters(message.message) + \"\\\" evidence=\\\"\" + escapeSpecialCharacters(message.evidence) + \"\\\"/>\");\n                }\n            });\n            output.push(\"</file>\");\n        }\n\n        return output.join(\"\");\n    }\n});\n\nCSSLint.addFormatter({\n    id: \"text\",\n    name: \"Plain Text\",\n    startFormat: function() {\n        return \"\";\n    },\n    endFormat: function() {\n        return \"\";\n    },\n    formatResults: function(results, filename, options) {\n        var messages = results.messages,\n            output = \"\";\n        options = options || {};\n\n        if (messages.length === 0) {\n            return options.quiet ? \"\" : \"\\n\\ncsslint: No errors in \" + filename + \".\";\n        }\n\n        output = \"\\n\\ncsslint: There \";\n        if (messages.length === 1) {\n            output += \"is 1 problem\";\n        } else {\n            output += \"are \" + messages.length  +  \" problems\";\n        }\n        output += \" in \" + filename + \".\";\n\n        var pos = filename.lastIndexOf(\"/\"),\n            shortFilename = filename;\n\n        if (pos === -1){\n            pos = filename.lastIndexOf(\"\\\\\");\n        }\n        if (pos > -1){\n            shortFilename = filename.substring(pos+1);\n        }\n\n        CSSLint.Util.forEach(messages, function (message, i) {\n            output = output + \"\\n\\n\" + shortFilename;\n            if (message.rollup) {\n                output += \"\\n\" + (i+1) + \": \" + message.type;\n                output += \"\\n\" + message.message;\n            } else {\n                output += \"\\n\" + (i+1) + \": \" + message.type + \" at line \" + message.line + \", col \" + message.col;\n                output += \"\\n\" + message.message;\n                output += \"\\n\" + message.evidence;\n            }\n        });\n\n        return output;\n    }\n});\n\nmodule.exports.CSSLint = CSSLint;\n\n});\n\nace.define(\"ace/mode/css_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/worker/mirror\",\"ace/mode/css/csslint\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar CSSLint = require(\"./css/csslint\").CSSLint;\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.ruleset = null;\n    this.setDisabledRules(\"ids|order-alphabetical\");\n    this.setInfoRules(\n      \"adjoining-classes|qualified-headings|zero-units|gradients|\" +\n      \"import|outline-none|vendor-prefix\"\n    );\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n    this.setInfoRules = function(ruleNames) {\n        if (typeof ruleNames == \"string\")\n            ruleNames = ruleNames.split(\"|\");\n        this.infoRules = lang.arrayToMap(ruleNames);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.setDisabledRules = function(ruleNames) {\n        if (!ruleNames) {\n            this.ruleset = null;\n        } else {\n            if (typeof ruleNames == \"string\")\n                ruleNames = ruleNames.split(\"|\");\n            var all = {};\n\n            CSSLint.getRules().forEach(function(x){\n                all[x.id] = true;\n            });\n            ruleNames.forEach(function(x) {\n                delete all[x];\n            });\n            \n            this.ruleset = all;\n        }\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n        var infoRules = this.infoRules;\n\n        var result = CSSLint.verify(value, this.ruleset);\n        this.sender.emit(\"annotate\", result.messages.map(function(msg) {\n            return {\n                row: msg.line - 1,\n                column: msg.col - 1,\n                text: msg.message,\n                type: infoRules[msg.rule.id] ? \"info\" : msg.type,\n                rule: msg.rule.name\n            }\n        }));\n    };\n\n}).call(Worker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-html.js",
    "content": "\"no use strict\";\n;(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject( array[i] );\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    var cons = obj.constructor;\n    if (cons === RegExp)\n        return obj;\n    \n    copy = cons();\n    for (var key in obj) {\n        copy[key] = deepCopy(obj[key]);\n    }\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return str.replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\n        else\n            return new Range(this.start.row, 0, this.end.row, 0)\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n}\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    callback && this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        var old = handlers[eventName];\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000)\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        applyDelta(this.$lines, delta, doNotValidate);\n        this._signal(\"change\", delta);\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        var from = 0, to = 0;\n        do {\n            from = to;\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            if (to > l) {\n                delta.lines = chunk;\n                delta.start.row = row + from;\n                delta.start.column = column;\n                break;\n            }\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        } while(true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: lines[l-1].length};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/html/saxparser\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\nmodule.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({\n1:[function(_dereq_,module,exports){\nfunction isScopeMarker(node) {\n\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn node.localName === \"applet\"\n\t\t\t|| node.localName === \"caption\"\n\t\t\t|| node.localName === \"marquee\"\n\t\t\t|| node.localName === \"object\"\n\t\t\t|| node.localName === \"table\"\n\t\t\t|| node.localName === \"td\"\n\t\t\t|| node.localName === \"th\";\n\t}\n\tif (node.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\treturn node.localName === \"mi\"\n\t\t\t|| node.localName === \"mo\"\n\t\t\t|| node.localName === \"mn\"\n\t\t\t|| node.localName === \"ms\"\n\t\t\t|| node.localName === \"mtext\"\n\t\t\t|| node.localName === \"annotation-xml\";\n\t}\n\tif (node.namespaceURI === \"http://www.w3.org/2000/svg\") {\n\t\treturn node.localName === \"foreignObject\"\n\t\t\t|| node.localName === \"desc\"\n\t\t\t|| node.localName === \"title\";\n\t}\n}\n\nfunction isListItemScopeMarker(node) {\n\treturn isScopeMarker(node)\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ol')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'ul');\n}\n\nfunction isTableScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'table')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isTableBodyScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tbody')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tfoot')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'thead')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isTableRowScopeMarker(node) {\n\treturn (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'tr')\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'html');\n}\n\nfunction isButtonScopeMarker(node) {\n\treturn isScopeMarker(node)\n\t\t|| (node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'button');\n}\n\nfunction isSelectScopeMarker(node) {\n\treturn !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'optgroup')\n\t\t&& !(node.namespaceURI === \"http://www.w3.org/1999/xhtml\" && node.localName === 'option');\n}\nfunction ElementStack() {\n\tthis.elements = [];\n\tthis.rootNode = null;\n\tthis.headElement = null;\n\tthis.bodyElement = null;\n}\nElementStack.prototype._inScope = function(localName, isMarker) {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.localName === localName)\n\t\t\treturn true;\n\t\tif (isMarker(node))\n\t\t\treturn false;\n\t}\n};\nElementStack.prototype.push = function(item) {\n\tthis.elements.push(item);\n};\nElementStack.prototype.pushHtmlElement = function(item) {\n\tthis.rootNode = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pushHeadElement = function(item) {\n\tthis.headElement = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pushBodyElement = function(item) {\n\tthis.bodyElement = item.node;\n\tthis.push(item);\n};\nElementStack.prototype.pop = function() {\n\treturn this.elements.pop();\n};\nElementStack.prototype.remove = function(item) {\n\tthis.elements.splice(this.elements.indexOf(item), 1);\n};\nElementStack.prototype.popUntilPopped = function(localName) {\n\tvar element;\n\tdo {\n\t\telement = this.pop();\n\t} while (element.localName != localName);\n};\n\nElementStack.prototype.popUntilTableScopeMarker = function() {\n\twhile (!isTableScopeMarker(this.top))\n\t\tthis.pop();\n};\n\nElementStack.prototype.popUntilTableBodyScopeMarker = function() {\n\twhile (!isTableBodyScopeMarker(this.top))\n\t\tthis.pop();\n};\n\nElementStack.prototype.popUntilTableRowScopeMarker = function() {\n\twhile (!isTableRowScopeMarker(this.top))\n\t\tthis.pop();\n};\nElementStack.prototype.item = function(index) {\n\treturn this.elements[index];\n};\nElementStack.prototype.contains = function(element) {\n\treturn this.elements.indexOf(element) !== -1;\n};\nElementStack.prototype.inScope = function(localName) {\n\treturn this._inScope(localName, isScopeMarker);\n};\nElementStack.prototype.inListItemScope = function(localName) {\n\treturn this._inScope(localName, isListItemScopeMarker);\n};\nElementStack.prototype.inTableScope = function(localName) {\n\treturn this._inScope(localName, isTableScopeMarker);\n};\nElementStack.prototype.inButtonScope = function(localName) {\n\treturn this._inScope(localName, isButtonScopeMarker);\n};\nElementStack.prototype.inSelectScope = function(localName) {\n\treturn this._inScope(localName, isSelectScopeMarker);\n};\nElementStack.prototype.hasNumberedHeaderElementInScope = function() {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.isNumberedHeader())\n\t\t\treturn true;\n\t\tif (isScopeMarker(node))\n\t\t\treturn false;\n\t}\n};\nElementStack.prototype.furthestBlockForFormattingElement = function(element) {\n\tvar furthestBlock = null;\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tvar node = this.elements[i];\n\t\tif (node.node === element)\n\t\t\tbreak;\n\t\tif (node.isSpecial())\n\t\t\tfurthestBlock = node;\n\t}\n    return furthestBlock;\n};\nElementStack.prototype.findIndex = function(localName) {\n\tfor (var i = this.elements.length - 1; i >= 0; i--) {\n\t\tif (this.elements[i].localName == localName)\n\t\t\treturn i;\n\t}\n    return -1;\n};\n\nElementStack.prototype.remove_openElements_until = function(callback) {\n\tvar finished = false;\n\tvar element;\n\twhile (!finished) {\n\t\telement = this.elements.pop();\n\t\tfinished = callback(element);\n\t}\n\treturn element;\n};\n\nObject.defineProperty(ElementStack.prototype, 'top', {\n\tget: function() {\n\t\treturn this.elements[this.elements.length - 1];\n\t}\n});\n\nObject.defineProperty(ElementStack.prototype, 'length', {\n\tget: function() {\n\t\treturn this.elements.length;\n\t}\n});\n\nexports.ElementStack = ElementStack;\n\n},\n{}],\n2:[function(_dereq_,module,exports){\nvar entities  = _dereq_('html5-entities');\nvar InputStream = _dereq_('./InputStream').InputStream;\n\nvar namedEntityPrefixes = {};\nObject.keys(entities).forEach(function (entityKey) {\n\tfor (var i = 0; i < entityKey.length; i++) {\n\t\tnamedEntityPrefixes[entityKey.substring(0, i + 1)] = true;\n\t}\n});\n\nfunction isAlphaNumeric(c) {\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n}\n\nfunction isHexDigit(c) {\n\treturn (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');\n}\n\nfunction isDecimalDigit(c) {\n\treturn (c >= '0' && c <= '9');\n}\n\nvar EntityParser = {};\n\nEntityParser.consumeEntity = function(buffer, tokenizer, additionalAllowedCharacter) {\n\tvar decodedCharacter = '';\n\tvar consumedCharacters = '';\n\tvar ch = buffer.char();\n\tif (ch === InputStream.EOF)\n\t\treturn false;\n\tconsumedCharacters += ch;\n\tif (ch == '\\t' || ch == '\\n' || ch == '\\v' || ch == ' ' || ch == '<' || ch == '&') {\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n\tif (additionalAllowedCharacter === ch) {\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n\tif (ch == '#') {\n\t\tch = buffer.shift(1);\n\t\tif (ch === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\n\t\t\tbuffer.unget(consumedCharacters);\n\t\t\treturn false;\n\t\t}\n\t\tconsumedCharacters += ch;\n\t\tvar radix = 10;\n\t\tvar isDigit = isDecimalDigit;\n\t\tif (ch == 'x' || ch == 'X') {\n\t\t\tradix = 16;\n\t\t\tisDigit = isHexDigit;\n\t\t\tch = buffer.shift(1);\n\t\t\tif (ch === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"expected-numeric-entity-but-got-eof\");\n\t\t\t\tbuffer.unget(consumedCharacters);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconsumedCharacters += ch;\n\t\t}\n\t\tif (isDigit(ch)) {\n\t\t\tvar code = '';\n\t\t\twhile (ch !== InputStream.EOF && isDigit(ch)) {\n\t\t\t\tcode += ch;\n\t\t\t\tch = buffer.char();\n\t\t\t}\n\t\t\tcode = parseInt(code, radix);\n\t\t\tvar replacement = this.replaceEntityNumbers(code);\n\t\t\tif (replacement) {\n\t\t\t\ttokenizer._parseError(\"invalid-numeric-entity-replaced\");\n\t\t\t\tcode = replacement;\n\t\t\t}\n\t\t\tif (code > 0xFFFF && code <= 0x10FFFF) {\n\t\t        code -= 0x10000;\n\t\t        var first = ((0xffc00 & code) >> 10) + 0xD800;\n\t\t        var second = (0x3ff & code) + 0xDC00;\n\t\t\t\tdecodedCharacter = String.fromCharCode(first, second);\n\t\t\t} else\n\t\t\t\tdecodedCharacter = String.fromCharCode(code);\n\t\t\tif (ch !== ';') {\n\t\t\t\ttokenizer._parseError(\"numeric-entity-without-semicolon\");\n\t\t\t\tbuffer.unget(ch);\n\t\t\t}\n\t\t\treturn decodedCharacter;\n\t\t}\n\t\tbuffer.unget(consumedCharacters);\n\t\ttokenizer._parseError(\"expected-numeric-entity\");\n\t\treturn false;\n\t}\n\tif ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {\n\t\tvar mostRecentMatch = '';\n\t\twhile (namedEntityPrefixes[consumedCharacters]) {\n\t\t\tif (entities[consumedCharacters]) {\n\t\t\t\tmostRecentMatch = consumedCharacters;\n\t\t\t}\n\t\t\tif (ch == ';')\n\t\t\t\tbreak;\n\t\t\tch = buffer.char();\n\t\t\tif (ch === InputStream.EOF)\n\t\t\t\tbreak;\n\t\t\tconsumedCharacters += ch;\n\t\t}\n\t\tif (!mostRecentMatch) {\n\t\t\ttokenizer._parseError(\"expected-named-entity\");\n\t\t\tbuffer.unget(consumedCharacters);\n\t\t\treturn false;\n\t\t}\n\t\tdecodedCharacter = entities[mostRecentMatch];\n\t\tif (ch === ';' || !additionalAllowedCharacter || !(isAlphaNumeric(ch) || ch === '=')) {\n\t\t\tif (consumedCharacters.length > mostRecentMatch.length) {\n\t\t\t\tbuffer.unget(consumedCharacters.substring(mostRecentMatch.length));\n\t\t\t}\n\t\t\tif (ch !== ';') {\n\t\t\t\ttokenizer._parseError(\"named-entity-without-semicolon\");\n\t\t\t}\n\t\t\treturn decodedCharacter;\n\t\t}\n\t\tbuffer.unget(consumedCharacters);\n\t\treturn false;\n\t}\n};\n\nEntityParser.replaceEntityNumbers = function(c) {\n\tswitch(c) {\n\t\tcase 0x00: return 0xFFFD; // REPLACEMENT CHARACTER\n\t\tcase 0x13: return 0x0010; // Carriage return\n\t\tcase 0x80: return 0x20AC; // EURO SIGN\n\t\tcase 0x81: return 0x0081; // <control>\n\t\tcase 0x82: return 0x201A; // SINGLE LOW-9 QUOTATION MARK\n\t\tcase 0x83: return 0x0192; // LATIN SMALL LETTER F WITH HOOK\n\t\tcase 0x84: return 0x201E; // DOUBLE LOW-9 QUOTATION MARK\n\t\tcase 0x85: return 0x2026; // HORIZONTAL ELLIPSIS\n\t\tcase 0x86: return 0x2020; // DAGGER\n\t\tcase 0x87: return 0x2021; // DOUBLE DAGGER\n\t\tcase 0x88: return 0x02C6; // MODIFIER LETTER CIRCUMFLEX ACCENT\n\t\tcase 0x89: return 0x2030; // PER MILLE SIGN\n\t\tcase 0x8A: return 0x0160; // LATIN CAPITAL LETTER S WITH CARON\n\t\tcase 0x8B: return 0x2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK\n\t\tcase 0x8C: return 0x0152; // LATIN CAPITAL LIGATURE OE\n\t\tcase 0x8D: return 0x008D; // <control>\n\t\tcase 0x8E: return 0x017D; // LATIN CAPITAL LETTER Z WITH CARON\n\t\tcase 0x8F: return 0x008F; // <control>\n\t\tcase 0x90: return 0x0090; // <control>\n\t\tcase 0x91: return 0x2018; // LEFT SINGLE QUOTATION MARK\n\t\tcase 0x92: return 0x2019; // RIGHT SINGLE QUOTATION MARK\n\t\tcase 0x93: return 0x201C; // LEFT DOUBLE QUOTATION MARK\n\t\tcase 0x94: return 0x201D; // RIGHT DOUBLE QUOTATION MARK\n\t\tcase 0x95: return 0x2022; // BULLET\n\t\tcase 0x96: return 0x2013; // EN DASH\n\t\tcase 0x97: return 0x2014; // EM DASH\n\t\tcase 0x98: return 0x02DC; // SMALL TILDE\n\t\tcase 0x99: return 0x2122; // TRADE MARK SIGN\n\t\tcase 0x9A: return 0x0161; // LATIN SMALL LETTER S WITH CARON\n\t\tcase 0x9B: return 0x203A; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK\n\t\tcase 0x9C: return 0x0153; // LATIN SMALL LIGATURE OE\n\t\tcase 0x9D: return 0x009D; // <control>\n\t\tcase 0x9E: return 0x017E; // LATIN SMALL LETTER Z WITH CARON\n\t\tcase 0x9F: return 0x0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS\n\t\tdefault:\n\t\t\tif ((c >= 0xD800 && c <= 0xDFFF) || c > 0x10FFFF) {\n\t\t\t\treturn 0xFFFD;\n\t\t\t} else if ((c >= 0x0001 && c <= 0x0008) || (c >= 0x000E && c <= 0x001F) ||\n\t\t\t\t(c >= 0x007F && c <= 0x009F) || (c >= 0xFDD0 && c <= 0xFDEF) ||\n\t\t\t\tc == 0x000B || c == 0xFFFE || c == 0x1FFFE || c == 0x2FFFFE ||\n\t\t\t\tc == 0x2FFFF || c == 0x3FFFE || c == 0x3FFFF || c == 0x4FFFE ||\n\t\t\t\tc == 0x4FFFF || c == 0x5FFFE || c == 0x5FFFF || c == 0x6FFFE ||\n\t\t\t\tc == 0x6FFFF || c == 0x7FFFE || c == 0x7FFFF || c == 0x8FFFE ||\n\t\t\t\tc == 0x8FFFF || c == 0x9FFFE || c == 0x9FFFF || c == 0xAFFFE ||\n\t\t\t\tc == 0xAFFFF || c == 0xBFFFE || c == 0xBFFFF || c == 0xCFFFE ||\n\t\t\t\tc == 0xCFFFF || c == 0xDFFFE || c == 0xDFFFF || c == 0xEFFFE ||\n\t\t\t\tc == 0xEFFFF || c == 0xFFFFE || c == 0xFFFFF || c == 0x10FFFE ||\n\t\t\t\tc == 0x10FFFF) {\n\t\t\t\treturn c;\n\t\t\t}\n\t}\n};\n\nexports.EntityParser = EntityParser;\n\n},\n{\"./InputStream\":3,\"html5-entities\":12}],\n3:[function(_dereq_,module,exports){\nfunction InputStream() {\n\tthis.data = '';\n\tthis.start = 0;\n\tthis.committed = 0;\n\tthis.eof = false;\n\tthis.lastLocation = {line: 0, column: 0};\n}\n\nInputStream.EOF = -1;\n\nInputStream.DRAIN = -2;\n\nInputStream.prototype = {\n\tslice: function() {\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\treturn this.data.slice(this.start, this.data.length);\n\t},\n\tchar: function() {\n\t\tif(!this.eof && this.start >= this.data.length - 1) throw InputStream.DRAIN;\n\t\tif(this.start >= this.data.length) {\n\t\t\treturn InputStream.EOF;\n\t\t}\n\t\tvar ch = this.data[this.start++];\n\t\tif (ch === '\\r')\n\t\t\tch = '\\n';\n\t\treturn ch;\n\t},\n\tadvance: function(amount) {\n\t\tthis.start += amount;\n\t\tif(this.start >= this.data.length) {\n\t\t\tif(!this.eof) throw InputStream.DRAIN;\n\t\t\treturn InputStream.EOF;\n\t\t} else {\n\t\t\tif(this.committed > this.data.length / 2) {\n\t\t\t\tthis.lastLocation = this.location();\n\t\t\t\tthis.data = this.data.slice(this.committed);\n\t\t\t\tthis.start = this.start - this.committed;\n\t\t\t\tthis.committed = 0;\n\t\t\t}\n\t\t}\n\t},\n\tmatchWhile: function(re) {\n\t\tif(this.eof && this.start >= this.data.length ) return '';\n\t\tvar r = new RegExp(\"^\"+re+\"+\");\n\t\tvar m = r.exec(this.slice());\n\t\tif(m) {\n\t\t\tif(!this.eof && m[0].length == this.data.length - this.start) throw InputStream.DRAIN;\n\t\t\tthis.advance(m[0].length);\n\t\t\treturn m[0];\n\t\t} else {\n\t\t\treturn '';\n\t\t}\n\t},\n\tmatchUntil: function(re) {\n\t\tvar m, s;\n\t\ts = this.slice();\n\t\tif(s === InputStream.EOF) {\n\t\t\treturn '';\n\t\t} else if(m = new RegExp(re + (this.eof ? \"|$\" : \"\")).exec(s)) {\n\t\t\tvar t = this.data.slice(this.start, this.start + m.index);\n\t\t\tthis.advance(m.index);\n\t\t\treturn t.replace(/\\r/g, '\\n').replace(/\\n{2,}/g, '\\n');\n\t\t} else {\n\t\t\tthrow InputStream.DRAIN;\n\t\t}\n\t},\n\tappend: function(data) {\n\t\tthis.data += data;\n\t},\n\tshift: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\tvar d = this.data.slice(this.start, this.start + n).toString();\n\t\tthis.advance(Math.min(n, this.data.length - this.start));\n\t\treturn d;\n\t},\n\tpeek: function(n) {\n\t\tif(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN;\n\t\tif(this.eof && this.start >= this.data.length) return InputStream.EOF;\n\t\treturn this.data.slice(this.start, Math.min(this.start + n, this.data.length)).toString();\n\t},\n\tlength: function() {\n\t\treturn this.data.length - this.start - 1;\n\t},\n\tunget: function(d) {\n\t\tif(d === InputStream.EOF) return;\n\t\tthis.start -= (d.length);\n\t},\n\tundo: function() {\n\t\tthis.start = this.committed;\n\t},\n\tcommit: function() {\n\t\tthis.committed = this.start;\n\t},\n\tlocation: function() {\n\t\tvar lastLine = this.lastLocation.line;\n\t\tvar lastColumn = this.lastLocation.column;\n\t\tvar read = this.data.slice(0, this.committed);\n\t\tvar newlines = read.match(/\\n/g);\n\t\tvar line = newlines ? lastLine + newlines.length : lastLine;\n\t\tvar column = newlines ? read.length - read.lastIndexOf('\\n') - 1 : lastColumn + read.length;\n\t\treturn {line: line, column: column};\n\t}\n};\n\nexports.InputStream = InputStream;\n\n},\n{}],\n4:[function(_dereq_,module,exports){\nvar SpecialElements = {\n\t\"http://www.w3.org/1999/xhtml\": [\n\t\t'address',\n\t\t'applet',\n\t\t'area',\n\t\t'article',\n\t\t'aside',\n\t\t'base',\n\t\t'basefont',\n\t\t'bgsound',\n\t\t'blockquote',\n\t\t'body',\n\t\t'br',\n\t\t'button',\n\t\t'caption',\n\t\t'center',\n\t\t'col',\n\t\t'colgroup',\n\t\t'dd',\n\t\t'details',\n\t\t'dir',\n\t\t'div',\n\t\t'dl',\n\t\t'dt',\n\t\t'embed',\n\t\t'fieldset',\n\t\t'figcaption',\n\t\t'figure',\n\t\t'footer',\n\t\t'form',\n\t\t'frame',\n\t\t'frameset',\n\t\t'h1',\n\t\t'h2',\n\t\t'h3',\n\t\t'h4',\n\t\t'h5',\n\t\t'h6',\n\t\t'head',\n\t\t'header',\n\t\t'hgroup',\n\t\t'hr',\n\t\t'html',\n\t\t'iframe',\n\t\t'img',\n\t\t'input',\n\t\t'isindex',\n\t\t'li',\n\t\t'link',\n\t\t'listing',\n\t\t'main',\n\t\t'marquee',\n\t\t'menu',\n\t\t'menuitem',\n\t\t'meta',\n\t\t'nav',\n\t\t'noembed',\n\t\t'noframes',\n\t\t'noscript',\n\t\t'object',\n\t\t'ol',\n\t\t'p',\n\t\t'param',\n\t\t'plaintext',\n\t\t'pre',\n\t\t'script',\n\t\t'section',\n\t\t'select',\n\t\t'source',\n\t\t'style',\n\t\t'summary',\n\t\t'table',\n\t\t'tbody',\n\t\t'td',\n\t\t'textarea',\n\t\t'tfoot',\n\t\t'th',\n\t\t'thead',\n\t\t'title',\n\t\t'tr',\n\t\t'track',\n\t\t'ul',\n\t\t'wbr',\n\t\t'xmp'\n\t],\n\t\"http://www.w3.org/1998/Math/MathML\": [\n\t\t'mi',\n\t\t'mo',\n\t\t'mn',\n\t\t'ms',\n\t\t'mtext',\n\t\t'annotation-xml'\n\t],\n\t\"http://www.w3.org/2000/svg\": [\n\t\t'foreignObject',\n\t\t'desc',\n\t\t'title'\n\t]\n};\n\n\nfunction StackItem(namespaceURI, localName, attributes, node) {\n\tthis.localName = localName;\n\tthis.namespaceURI = namespaceURI;\n\tthis.attributes = attributes;\n\tthis.node = node;\n}\nStackItem.prototype.isSpecial = function() {\n\treturn this.namespaceURI in SpecialElements &&\n\t\tSpecialElements[this.namespaceURI].indexOf(this.localName) > -1;\n};\n\nStackItem.prototype.isFosterParenting = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn this.localName === 'table' ||\n\t\t\tthis.localName === 'tbody' ||\n\t\t\tthis.localName === 'tfoot' ||\n\t\t\tthis.localName === 'thead' ||\n\t\t\tthis.localName === 'tr';\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isNumberedHeader = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\treturn this.localName === 'h1' ||\n\t\t\tthis.localName === 'h2' ||\n\t\t\tthis.localName === 'h3' ||\n\t\t\tthis.localName === 'h4' ||\n\t\t\tthis.localName === 'h5' ||\n\t\t\tthis.localName === 'h6';\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isForeign = function() {\n\treturn this.namespaceURI != \"http://www.w3.org/1999/xhtml\";\n};\n\nfunction getAttribute(item, name) {\n\tfor (var i = 0; i < item.attributes.length; i++) {\n\t\tif (item.attributes[i].nodeName == name)\n\t\t\treturn item.attributes[i].nodeValue;\n\t}\n\treturn null;\n}\n\nStackItem.prototype.isHtmlIntegrationPoint = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\tif (this.localName !== \"annotation-xml\")\n\t\t\treturn false;\n\t\tvar encoding = getAttribute(this, 'encoding');\n\t\tif (!encoding)\n\t\t\treturn false;\n\t\tencoding = encoding.toLowerCase();\n\t\treturn encoding === \"text/html\" || encoding === \"application/xhtml+xml\";\n\t}\n\tif (this.namespaceURI === \"http://www.w3.org/2000/svg\") {\n\t\treturn this.localName === \"foreignObject\"\n\t\t\t|| this.localName === \"desc\"\n\t\t\t|| this.localName === \"title\";\n\t}\n\treturn false;\n};\n\nStackItem.prototype.isMathMLTextIntegrationPoint = function() {\n\tif (this.namespaceURI === \"http://www.w3.org/1998/Math/MathML\") {\n\t\treturn this.localName === \"mi\"\n\t\t\t|| this.localName === \"mo\"\n\t\t\t|| this.localName === \"mn\"\n\t\t\t|| this.localName === \"ms\"\n\t\t\t|| this.localName === \"mtext\";\n\t}\n\treturn false;\n};\n\nexports.StackItem = StackItem;\n\n},\n{}],\n5:[function(_dereq_,module,exports){\nvar InputStream = _dereq_('./InputStream').InputStream;\nvar EntityParser = _dereq_('./EntityParser').EntityParser;\n\nfunction isWhitespace(c){\n\treturn c === \" \" || c === \"\\n\" || c === \"\\t\" || c === \"\\r\" || c === \"\\f\";\n}\n\nfunction isAlpha(c) {\n\treturn (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');\n}\nfunction Tokenizer(tokenHandler) {\n\tthis._tokenHandler = tokenHandler;\n\tthis._state = Tokenizer.DATA;\n\tthis._inputStream = new InputStream();\n\tthis._currentToken = null;\n\tthis._temporaryBuffer = '';\n\tthis._additionalAllowedCharacter = '';\n}\n\nTokenizer.prototype._parseError = function(code, args) {\n\tthis._tokenHandler.parseError(code, args);\n};\n\nTokenizer.prototype._emitToken = function(token) {\n\tif (token.type === 'StartTag') {\n\t\tfor (var i = 1; i < token.data.length; i++) {\n\t\t\tif (!token.data[i].nodeName)\n\t\t\t\ttoken.data.splice(i--, 1);\n\t\t}\n\t} else if (token.type === 'EndTag') {\n\t\tif (token.selfClosing) {\n\t\t\tthis._parseError('self-closing-flag-on-end-tag');\n\t\t}\n\t\tif (token.data.length !== 0) {\n\t\t\tthis._parseError('attributes-in-end-tag');\n\t\t}\n\t}\n\tthis._tokenHandler.processToken(token);\n\tif (token.type === 'StartTag' && token.selfClosing && !this._tokenHandler.isSelfClosingFlagAcknowledged()) {\n\t\tthis._parseError('non-void-element-with-trailing-solidus', {name: token.name});\n\t}\n};\n\nTokenizer.prototype._emitCurrentToken = function() {\n\tthis._state = Tokenizer.DATA;\n\tthis._emitToken(this._currentToken);\n};\n\nTokenizer.prototype._currentAttribute = function() {\n\treturn this._currentToken.data[this._currentToken.data.length - 1];\n};\n\nTokenizer.prototype.setState = function(state) {\n\tthis._state = state;\n};\n\nTokenizer.prototype.tokenize = function(source) {\n\tTokenizer.DATA = data_state;\n\tTokenizer.RCDATA = rcdata_state;\n\tTokenizer.RAWTEXT = rawtext_state;\n\tTokenizer.SCRIPT_DATA = script_data_state;\n\tTokenizer.PLAINTEXT = plaintext_state;\n\n\n\tthis._state = Tokenizer.DATA;\n\n\tthis._inputStream.append(source);\n\n\tthis._tokenHandler.startTokenization(this);\n\n\tthis._inputStream.eof = true;\n\n\tvar tokenizer = this;\n\n\twhile (this._state.call(this, this._inputStream));\n\n\n\tfunction data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(tag_open_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_data_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(data_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rcdata_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(character_reference_in_rcdata_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rcdata_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"&|<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_rcdata_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer);\n\t\ttokenizer.setState(rcdata_state);\n\t\ttokenizer._emitToken({type: 'Characters', data: character || '&'});\n\t\treturn true;\n\t}\n\n\tfunction rawtext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(rawtext_less_than_sign_state);\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction plaintext_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === \"\\u0000\") {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\n\tfunction script_data_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._emitToken({type: 'EOF', data: null});\n\t\t\treturn false;\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil(\"<|\\u0000\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rcdata_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rcdata_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rcdata_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rcdata_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(rawtext_end_tag_open_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(rawtext_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rawtext_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(rawtext_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === \"/\") {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_end_tag_open_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<!'});\n\t\t\ttokenizer.setState(script_data_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\ttokenizer.setState(script_data_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escape_start_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escape_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tvar chars = buffer.matchUntil('<|-|\\u0000');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data + chars});\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer.setState(script_data_escaped_less_then_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_less_then_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_open_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<' + data});\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_double_escape_start_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer = data;\n\t\t\ttokenizer.setState(script_data_escaped_end_tag_name_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_escaped_end_tag_name_state(buffer) {\n\t\tvar appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase());\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '/' && appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '>' &&  appropriate) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false};\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\ttokenizer.setState(script_data_double_escaped_dash_dash_state);\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_dash_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-script');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '-'});\n\t\t\tbuffer.commit();\n\t\t} else if (data === '<') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\ttokenizer.setState(script_data_double_escaped_less_than_sign_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '>'});\n\t\t\ttokenizer.setState(script_data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError('invalid-codepoint');\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '\\uFFFD'});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escaped_less_than_sign_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === '/') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '/'});\n\t\t\tthis._temporaryBuffer = '';\n\t\t\ttokenizer.setState(script_data_double_escape_end_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction script_data_double_escape_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (isWhitespace(data) || data === '/' || data === '>') {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tif (this._temporaryBuffer.toLowerCase() === 'script')\n\t\t\t\ttokenizer.setState(script_data_escaped_state);\n\t\t\telse\n\t\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t\tthis._temporaryBuffer += data;\n\t\t\tbuffer.commit();\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(script_data_double_escaped_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"bare-less-than-sign-at-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '<'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'StartTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer.setState(markup_declaration_open_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(close_tag_open_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-right-bracket\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<>\"});\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '?') {\n\t\t\ttokenizer._parseError(\"expected-tag-name-but-got-question-mark\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"expected-tag-name\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: \"<\"});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction close_tag_open_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-eof\");\n\t\t\ttokenizer._emitToken({type: 'Characters', data: '</'});\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken = {type: 'EndTag', name: data.toLowerCase(), data: []};\n\t\t\ttokenizer.setState(tag_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-right-bracket\");\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"expected-closing-tag-but-got-char\", {data: data}); // param 1 is datavars:\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction tag_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError('eof-in-tag-name');\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.name += data.toLowerCase();\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.name += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.name += data;\n\t\t}\n\t\tbuffer.commit();\n\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-name-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data.toLowerCase(), nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '=' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tvar leavingThisState = true;\n\t\tvar shouldEmit = false;\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-name\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\tshouldEmit = true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentAttribute().nodeName += data.toLowerCase();\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '>') {\n\t\t\tshouldEmit = true;\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"invalid-character-in-attribute-name\");\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeName += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeName += data;\n\t\t\tleavingThisState = false;\n\t\t}\n\n\t\tif (leavingThisState) {\n\t\t\tvar attributes = tokenizer._currentToken.data;\n\t\t\tvar currentAttribute = attributes[attributes.length - 1];\n\t\t\tfor (var i = attributes.length - 2; i >= 0; i--) {\n\t\t\t\tif (currentAttribute.nodeName === attributes[i].nodeName) {\n\t\t\t\t\ttokenizer._parseError(\"duplicate-attribute\", {name: currentAttribute.nodeName});\n\t\t\t\t\tcurrentAttribute.nodeName = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldEmit)\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-end-of-tag-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '=') {\n\t\t\ttokenizer.setState(before_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isAlpha(data)) {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else if (data === \"'\" || data === '\"' || data === '<') {\n\t\t\ttokenizer._parseError(\"invalid-character-after-attribute-name\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data.push({nodeName: \"\\uFFFD\", nodeValue: \"\"});\n\t\t} else {\n\t\t\ttokenizer._currentToken.data.push({nodeName: data, nodeValue: \"\"});\n\t\t\ttokenizer.setState(attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-eof\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\treturn true;\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\t} else if (data === '&') {\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t\tbuffer.unget(data);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-attribute-value-but-got-right-bracket\");\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '=' || data === '<' || data === '`') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-double-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = '\"';\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar s = buffer.matchUntil('[\\0\"&]');\n\t\t\tdata = data + s;\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-attribute-value-single-quote\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_attribute_value_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \"'\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentAttribute().nodeValue += data + buffer.matchUntil(\"\\u0000|['&]\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction attribute_value_unquoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '&') {\n\t\t\tthis._additionalAllowedCharacter = \">\";\n\t\t\ttokenizer.setState(character_reference_in_attribute_value_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"' || data === \"'\" || data === '=' || data === '`' || data === '<') {\n\t\t\ttokenizer._parseError(\"unexpected-character-in-unquoted-attribute-value\");\n\t\t\ttokenizer._currentAttribute().nodeValue += data;\n\t\t\tbuffer.commit();\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentAttribute().nodeValue += \"\\uFFFD\";\n\t\t} else {\n\t\t\tvar o = buffer.matchUntil(\"\\u0000|[\"+ \"\\t\\n\\v\\f\\x20\\r\" + \"&<>\\\"'=`\" +\"]\");\n\t\t\tif (o === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-attribute-value-no-quotes\");\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t}\n\t\t\tbuffer.commit();\n\t\t\ttokenizer._currentAttribute().nodeValue += data + o;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction character_reference_in_attribute_value_state(buffer) {\n\t\tvar character = EntityParser.consumeEntity(buffer, tokenizer, this._additionalAllowedCharacter);\n\t\tthis._currentAttribute().nodeValue += character || '&';\n\t\tif (this._additionalAllowedCharacter === '\"')\n\t\t\ttokenizer.setState(attribute_value_double_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '\\'')\n\t\t\ttokenizer.setState(attribute_value_single_quoted_state);\n\t\telse if (this._additionalAllowedCharacter === '>')\n\t\t\ttokenizer.setState(attribute_value_unquoted_state);\n\t\treturn true;\n\t}\n\n\tfunction after_attribute_value_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '/') {\n\t\t\ttokenizer.setState(self_closing_tag_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-attribute-value\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction self_closing_tag_state(buffer) {\n\t\tvar c = buffer.char();\n\t\tif (c === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"unexpected-eof-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (c === '>') {\n\t\t\ttokenizer._currentToken.selfClosing = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-character-after-solidus-in-tag\");\n\t\t\tbuffer.unget(c);\n\t\t\ttokenizer.setState(before_attribute_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_comment_state(buffer) {\n\t\tvar data = buffer.matchUntil('>');\n\t\tdata = data.replace(/\\u0000/g, \"\\uFFFD\");\n\t\tbuffer.char();\n\t\ttokenizer._emitToken({type: 'Comment', data: data});\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction markup_declaration_open_state(buffer) {\n\t\tvar chars = buffer.shift(2);\n\t\tif (chars === '--') {\n\t\t\ttokenizer._currentToken = {type: 'Comment', data: ''};\n\t\t\ttokenizer.setState(comment_start_state);\n\t\t} else {\n\t\t\tvar newchars = buffer.shift(5);\n\t\t\tif (newchars === InputStream.EOF || chars === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tchars += newchars;\n\t\t\tif (chars.toUpperCase() === 'DOCTYPE') {\n\t\t\t\ttokenizer._currentToken = {type: 'Doctype', name: '', publicId: null, systemId: null, forceQuirks: false};\n\t\t\t\ttokenizer.setState(doctype_state);\n\t\t\t} else if (tokenizer._tokenHandler.isCdataSectionAllowed() && chars === '[CDATA[') {\n\t\t\t\ttokenizer.setState(cdata_section_state);\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-dashes-or-doctype\");\n\t\t\t\tbuffer.unget(chars);\n\t\t\t\ttokenizer.setState(bogus_comment_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction cdata_section_state(buffer) {\n\t\tvar data = buffer.matchUntil(']]>');\n\t\tbuffer.shift(3);\n\t\tif (data) {\n\t\t\ttokenizer._emitToken({type: 'Characters', data: data});\n\t\t}\n\t\ttokenizer.setState(data_state);\n\t\treturn true;\n\t}\n\n\tfunction comment_start_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_start_dash_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_start_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"incorrect-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"\\uFFFD\";\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_dash_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer.setState(comment_end_state);\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"-\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '-' + data + buffer.matchUntil('\\u0000|-');\n\t\t\tbuffer.char();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-double-dash\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '!') {\n\t\t\ttokenizer._parseError(\"unexpected-bang-after-double-dash-in-comment\");\n\t\t\ttokenizer.setState(comment_end_bang_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._parseError(\"unexpected-dash-after-double-dash-in-comment\");\n\t\t\ttokenizer._currentToken.data += data;\n\t\t} else if (data === '\\u0000') {\n\t\t\ttokenizer._parseError(\"invalid-codepoint\");\n\t\t\ttokenizer._currentToken.data += \"--\\uFFFD\";\n\t\t\ttokenizer.setState(comment_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-comment\");\n\t\t\ttokenizer._currentToken.data += '--' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction comment_end_bang_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-comment-end-bang-state\");\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitToken(tokenizer._currentToken);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '-') {\n\t\t\ttokenizer._currentToken.data += '--!';\n\t\t\ttokenizer.setState(comment_end_dash_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.data += '--!' + data;\n\t\t\ttokenizer.setState(comment_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"need-space-after-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-eof\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"expected-doctype-name-but-got-right-bracket\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name = data;\n\t\t\ttokenizer.setState(doctype_name_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype-name\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(after_doctype_name_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (isAlpha(data))\n\t\t\t\tdata = data.toLowerCase();\n\t\t\ttokenizer._currentToken.name += data;\n\t\t\tbuffer.commit();\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_name_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\tif (['p', 'P'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['u', 'U'], ['b', 'B'], ['l', 'L'], ['i', 'I'], ['c', 'C']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_public_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (['s', 'S'].indexOf(data) > -1) {\n\t\t\t\tvar expected = [['y', 'Y'], ['s', 'S'], ['t', 'T'], ['e', 'E'], ['m', 'M']];\n\t\t\t\tvar matched = expected.every(function(expected){\n\t\t\t\t\tdata = buffer.char();\n\t\t\t\t\treturn expected.indexOf(data) > -1;\n\t\t\t\t});\n\t\t\t\tif (matched) {\n\t\t\t\t\ttokenizer.setState(after_doctype_system_keyword_state);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\n\t\t\tif (data === InputStream.EOF) {\n\t\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\t\tbuffer.unget(data);\n\t\t\t\ttokenizer.setState(data_state);\n\t\t\t\ttokenizer._emitCurrentToken();\n\t\t\t} else {\n\t\t\t\ttokenizer._parseError(\"expected-space-or-right-bracket-in-doctype\", {data: data});\n\t\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_public_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.publicId = '';\n\t\t\ttokenizer.setState(doctype_public_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_public_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_public_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else {\n\t\t\ttokenizer._currentToken.publicId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_public_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(between_doctype_public_and_system_identifiers_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer.setState(data_state);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction between_doctype_public_and_system_identifiers_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_keyword_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else if (data === \"'\" || data === '\"') {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t} else {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(before_doctype_system_identifier_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction before_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_double_quoted_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer._currentToken.systemId = '';\n\t\t\ttokenizer.setState(doctype_system_identifier_single_quoted_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_double_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '\"') {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction doctype_system_identifier_single_quoted_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === \"'\") {\n\t\t\ttokenizer.setState(after_doctype_system_identifier_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._parseError(\"unexpected-end-of-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._currentToken.systemId += data;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction after_doctype_system_identifier_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\ttokenizer._parseError(\"eof-in-doctype\");\n\t\t\ttokenizer._currentToken.forceQuirks = true;\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (isWhitespace(data)) {\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else {\n\t\t\ttokenizer._parseError(\"unexpected-char-in-doctype\");\n\t\t\ttokenizer.setState(bogus_doctype_state);\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction bogus_doctype_state(buffer) {\n\t\tvar data = buffer.char();\n\t\tif (data === InputStream.EOF) {\n\t\t\tbuffer.unget(data);\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t} else if (data === '>') {\n\t\t\ttokenizer._emitCurrentToken();\n\t\t\ttokenizer.setState(data_state);\n\t\t}\n\t\treturn true;\n\t}\n};\n\nObject.defineProperty(Tokenizer.prototype, 'lineNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().line;\n\t}\n});\n\nObject.defineProperty(Tokenizer.prototype, 'columnNumber', {\n\tget: function() {\n\t\treturn this._inputStream.location().column;\n\t}\n});\n\nexports.Tokenizer = Tokenizer;\n\n},\n{\"./EntityParser\":2,\"./InputStream\":3}],\n6:[function(_dereq_,module,exports){\nvar assert = _dereq_('assert');\n\nvar messages = _dereq_('./messages.json');\nvar constants = _dereq_('./constants');\n\nvar EventEmitter = _dereq_('events').EventEmitter;\n\nvar Tokenizer = _dereq_('./Tokenizer').Tokenizer;\nvar ElementStack = _dereq_('./ElementStack').ElementStack;\nvar StackItem = _dereq_('./StackItem').StackItem;\n\nvar Marker = {};\n\nfunction isWhitespace(ch) {\n\treturn ch === \" \" || ch === \"\\n\" || ch === \"\\t\" || ch === \"\\r\" || ch === \"\\f\";\n}\n\nfunction isWhitespaceOrReplacementCharacter(ch) {\n\treturn isWhitespace(ch) || ch === '\\uFFFD';\n}\n\nfunction isAllWhitespace(characters) {\n\tfor (var i = 0; i < characters.length; i++) {\n\t\tvar ch = characters[i];\n\t\tif (!isWhitespace(ch))\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction isAllWhitespaceOrReplacementCharacters(characters) {\n\tfor (var i = 0; i < characters.length; i++) {\n\t\tvar ch = characters[i];\n\t\tif (!isWhitespaceOrReplacementCharacter(ch))\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction getAttribute(node, name) {\n\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\tvar attribute = node.attributes[i];\n\t\tif (attribute.nodeName === name) {\n\t\t\treturn attribute;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction CharacterBuffer(characters) {\n\tthis.characters = characters;\n\tthis.current = 0;\n\tthis.end = this.characters.length;\n}\n\nCharacterBuffer.prototype.skipAtMostOneLeadingNewline = function() {\n\tif (this.characters[this.current] === '\\n')\n\t\tthis.current++;\n};\n\nCharacterBuffer.prototype.skipLeadingWhitespace = function() {\n\twhile (isWhitespace(this.characters[this.current])) {\n\t\tif (++this.current == this.end)\n\t\t\treturn;\n\t}\n};\n\nCharacterBuffer.prototype.skipLeadingNonWhitespace = function() {\n\twhile (!isWhitespace(this.characters[this.current])) {\n\t\tif (++this.current == this.end)\n\t\t\treturn;\n\t}\n};\n\nCharacterBuffer.prototype.takeRemaining = function() {\n\treturn this.characters.substring(this.current);\n};\n\nCharacterBuffer.prototype.takeLeadingWhitespace = function() {\n\tvar start = this.current;\n\tthis.skipLeadingWhitespace();\n\tif (start === this.current)\n\t\treturn \"\";\n\treturn this.characters.substring(start, this.current - start);\n};\n\nObject.defineProperty(CharacterBuffer.prototype, 'length', {\n\tget: function(){\n\t\treturn this.end - this.current;\n\t}\n});\nfunction TreeBuilder() {\n\tthis.tokenizer = null;\n\tthis.errorHandler = null;\n\tthis.scriptingEnabled = false;\n\tthis.document = null;\n\tthis.head = null;\n\tthis.form = null;\n\tthis.openElements = new ElementStack();\n\tthis.activeFormattingElements = [];\n\tthis.insertionMode = null;\n\tthis.insertionModeName = \"\";\n\tthis.originalInsertionMode = \"\";\n\tthis.inQuirksMode = false; // TODO quirks mode\n\tthis.compatMode = \"no quirks\";\n\tthis.framesetOk = true;\n\tthis.redirectAttachToFosterParent = false;\n\tthis.selfClosingFlagAcknowledged = false;\n\tthis.context = \"\";\n\tthis.pendingTableCharacters = [];\n\tthis.shouldSkipLeadingNewline = false;\n\n\tvar tree = this;\n\tvar modes = this.insertionModes = {};\n\tmodes.base = {\n\t\tend_tag_handlers: {\"-default\": 'endTagOther'},\n\t\tstart_tag_handlers: {\"-default\": 'startTagOther'},\n\t\tprocessEOF: function() {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.openElements.length > 2) {\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\n\t\t\t} else if (tree.openElements.length == 2 &&\n\t\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\t\ttree.parseError('expected-closing-tag-but-got-eof');\n\t\t\t} else if (tree.context && tree.openElements.length > 1) {\n\t\t\t}\n\t\t},\n\t\tprocessComment: function(data) {\n\t\t\ttree.insertComment(data, tree.currentStackItem().node);\n\t\t},\n\t\tprocessDoctype: function(name, publicId, systemId, forceQuirks) {\n\t\t\ttree.parseError('unexpected-doctype');\n\t\t},\n\t\tprocessStartTag: function(name, attributes, selfClosing) {\n\t\t\tif (this[this.start_tag_handlers[name]]) {\n\t\t\t\tthis[this.start_tag_handlers[name]](name, attributes, selfClosing);\n\t\t\t} else if (this[this.start_tag_handlers[\"-default\"]]) {\n\t\t\t\tthis[this.start_tag_handlers[\"-default\"]](name, attributes, selfClosing);\n\t\t\t} else {\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\n\t\t\t}\n\t\t},\n\t\tprocessEndTag: function(name) {\n\t\t\tif (this[this.end_tag_handlers[name]]) {\n\t\t\t\tthis[this.end_tag_handlers[name]](name);\n\t\t\t} else if (this[this.end_tag_handlers[\"-default\"]]) {\n\t\t\t\tthis[this.end_tag_handlers[\"-default\"]](name);\n\t\t\t} else {\n\t\t\t\tthrow(new Error(\"No handler found for \"+name));\n\t\t\t}\n\t\t},\n\t\tstartTagHtml: function(name, attributes) {\n\t\t\tmodes.inBody.startTagHtml(name, attributes);\n\t\t}\n\t};\n\n\tmodes.initial = Object.create(modes.base);\n\n\tmodes.initial.processEOF = function() {\n\t\ttree.parseError(\"expected-doctype-but-got-eof\");\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.initial.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.initial.processDoctype = function(name, publicId, systemId, forceQuirks) {\n\t\ttree.insertDoctype(name || '', publicId || '', systemId || '');\n\n\t\tif (forceQuirks || name != 'html' || (publicId != null && ([\n\t\t\t\t\t\"+//silmaril//dtd html pro v0r11 19970101//\",\n\t\t\t\t\t\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//\",\n\t\t\t\t\t\"-//as//dtd html 3.0 aswedit + extensions//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0 strict//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 2.1e//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.0//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.2 final//\",\n\t\t\t\t\t\"-//ietf//dtd html 3.2//\",\n\t\t\t\t\t\"-//ietf//dtd html 3//\",\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 0//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 1//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 2//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict level 3//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html strict//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//ietf//dtd html//\",\n\t\t\t\t\t\"-//metrius//dtd metrius presentational//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html strict//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 html//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 2.0 tables//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html strict//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 html//\",\n\t\t\t\t\t\"-//microsoft//dtd internet explorer 3.0 tables//\",\n\t\t\t\t\t\"-//netscape comm. corp.//dtd html//\",\n\t\t\t\t\t\"-//netscape comm. corp.//dtd strict html//\",\n\t\t\t\t\t\"-//o'reilly and associates//dtd html 2.0//\",\n\t\t\t\t\t\"-//o'reilly and associates//dtd html extended 1.0//\",\n\t\t\t\t\t\"-//spyglass//dtd html 2.0 extended//\",\n\t\t\t\t\t\"-//sq//dtd html 2.0 hotmetal + extensions//\",\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava html//\",\n\t\t\t\t\t\"-//sun microsystems corp.//dtd hotjava strict html//\",\n\t\t\t\t\t\"-//w3c//dtd html 3 1995-03-24//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2 draft//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2 final//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2//\",\n\t\t\t\t\t\"-//w3c//dtd html 3.2s draft//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.0 frameset//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.0 transitional//\",\n\t\t\t\t\t\"-//w3c//dtd html experimental 19960712//\",\n\t\t\t\t\t\"-//w3c//dtd html experimental 970421//\",\n\t\t\t\t\t\"-//w3c//dtd w3 html//\",\n\t\t\t\t\t\"-//w3o//dtd w3 html 3.0//\",\n\t\t\t\t\t\"-//webtechs//dtd mozilla html 2.0//\",\n\t\t\t\t\t\"-//webtechs//dtd mozilla html//\",\n\t\t\t\t\t\"html\"\n\t\t\t\t].some(publicIdStartsWith)\n\t\t\t\t|| [\n\t\t\t\t\t\"-//w3o//dtd w3 html strict 3.0//en//\",\n\t\t\t\t\t\"-/w3c/dtd html 4.0 transitional/en\",\n\t\t\t\t\t\"html\"\n\t\t\t\t].indexOf(publicId.toLowerCase()) > -1\n\t\t\t\t|| (systemId == null && [\n\t\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\n\t\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\n\t\t\t\t].some(publicIdStartsWith)))\n\t\t\t)\n\t\t\t|| (systemId != null && (systemId.toLowerCase() == \"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\"))\n\t\t) {\n\t\t\ttree.compatMode = \"quirks\";\n\t\t\ttree.parseError(\"quirky-doctype\");\n\t\t} else if (publicId != null && ([\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 transitional//\",\n\t\t\t\t\"-//w3c//dtd xhtml 1.0 frameset//\"\n\t\t\t].some(publicIdStartsWith)\n\t\t\t|| (systemId != null && [\n\t\t\t\t\"-//w3c//dtd html 4.01 transitional//\",\n\t\t\t\t\"-//w3c//dtd html 4.01 frameset//\"\n\t\t\t].indexOf(publicId.toLowerCase()) > -1))\n\t\t) {\n\t\t\ttree.compatMode = \"limited quirks\";\n\t\t\ttree.parseError(\"almost-standards-doctype\");\n\t\t} else {\n\t\t\tif ((publicId == \"-//W3C//DTD HTML 4.0//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/REC-html40/strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD HTML 4.01//EN\" && (systemId == null || systemId == \"http://www.w3.org/TR/html4/strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.0 Strict//EN\" && (systemId == \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"))\n\t\t\t\t|| (publicId == \"-//W3C//DTD XHTML 1.1//EN\" && (systemId == \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"))\n\t\t\t) {\n\t\t\t} else if (!((systemId == null || systemId == \"about:legacy-compat\") && publicId == null)) {\n\t\t\t\ttree.parseError(\"unknown-doctype\");\n\t\t\t}\n\t\t}\n\t\ttree.setInsertionMode('beforeHTML');\n\t\tfunction publicIdStartsWith(string) {\n\t\t\treturn publicId.toLowerCase().indexOf(string) === 0;\n\t\t}\n\t};\n\n\tmodes.initial.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\ttree.parseError('expected-doctype-but-got-chars');\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.initial.processStartTag = function(name, attributes, selfClosing) {\n\t\ttree.parseError('expected-doctype-but-got-start-tag', {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.initial.processEndTag = function(name) {\n\t\ttree.parseError('expected-doctype-but-got-end-tag', {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.initial.anythingElse = function() {\n\t\ttree.compatMode = 'quirks';\n\t\ttree.setInsertionMode('beforeHTML');\n\t};\n\n\tmodes.beforeHTML = Object.create(modes.base);\n\n\tmodes.beforeHTML.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.beforeHTML.processEOF = function() {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.beforeHTML.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.beforeHTML.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.beforeHTML.startTagHtml = function(name, attributes, selfClosing) {\n\t\ttree.insertHtmlElement(attributes);\n\t\ttree.setInsertionMode('beforeHead');\n\t};\n\n\tmodes.beforeHTML.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.beforeHTML.processEndTag = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.beforeHTML.anythingElse = function() {\n\t\ttree.insertHtmlElement();\n\t\ttree.setInsertionMode('beforeHead');\n\t};\n\n\tmodes.afterAfterBody = Object.create(modes.base);\n\n\tmodes.afterAfterBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterAfterBody.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.afterAfterBody.processDoctype = function(data) {\n\t\tmodes.inBody.processDoctype(data);\n\t};\n\n\tmodes.afterAfterBody.startTagHtml = function(data, attributes) {\n\t\tmodes.inBody.startTagHtml(data, attributes);\n\t};\n\n\tmodes.afterAfterBody.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterAfterBody.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterAfterBody.processCharacters = function(data) {\n\t\tif (!isAllWhitespace(data.characters)) {\n\t\t\ttree.parseError('unexpected-char-after-body');\n\t\t\ttree.setInsertionMode('inBody');\n\t\t\treturn tree.insertionMode.processCharacters(data);\n\t\t}\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.afterBody = Object.create(modes.base);\n\n\tmodes.afterBody.end_tag_handlers = {\n\t\thtml: 'endTagHtml',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.afterBody.processComment = function(data) {\n\t\ttree.insertComment(data, tree.openElements.rootNode);\n\t};\n\n\tmodes.afterBody.processCharacters = function(data) {\n\t\tif (!isAllWhitespace(data.characters)) {\n\t\t\ttree.parseError('unexpected-char-after-body');\n\t\t\ttree.setInsertionMode('inBody');\n\t\t\treturn tree.insertionMode.processCharacters(data);\n\t\t}\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.afterBody.processStartTag = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag-after-body', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterBody.endTagHtml = function(name) {\n\t\tif (tree.context) {\n\t\t\ttree.parseError('end-html-in-innerhtml');\n\t\t} else {\n\t\t\ttree.setInsertionMode('afterAfterBody');\n\t\t}\n\t};\n\n\tmodes.afterBody.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag-after-body', {name: name});\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterFrameset = Object.create(modes.base);\n\n\tmodes.afterFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tnoframes: 'startTagNoframes',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterFrameset.end_tag_handlers = {\n\t\thtml: 'endTagHtml',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.afterFrameset.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tvar whitespace = \"\";\n\t\tfor (var i = 0; i < characters.length; i++) {\n\t\t\tvar ch = characters[i];\n\t\t\tif (isWhitespace(ch))\n\t\t\t\twhitespace += ch;\n\t\t}\n\t\tif (whitespace) {\n\t\t\ttree.insertText(whitespace);\n\t\t}\n\t\tif (whitespace.length < characters.length)\n\t\t\ttree.parseError('expected-eof-but-got-char');\n\t};\n\n\tmodes.afterFrameset.startTagNoframes = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterFrameset.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-after-frameset\", {name: name});\n\t};\n\n\tmodes.afterFrameset.endTagHtml = function(name) {\n\t\ttree.setInsertionMode('afterAfterFrameset');\n\t};\n\n\tmodes.afterFrameset.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-after-frameset\", {name: name});\n\t};\n\n\tmodes.beforeHead = Object.create(modes.base);\n\n\tmodes.beforeHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.beforeHead.end_tag_handlers = {\n\t\thtml: 'endTagImplyHead',\n\t\thead: 'endTagImplyHead',\n\t\tbody: 'endTagImplyHead',\n\t\tbr: 'endTagImplyHead',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.beforeHead.processEOF = function() {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.beforeHead.processCharacters = function(buffer) {\n\t\tbuffer.skipLeadingWhitespace();\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.beforeHead.startTagHead = function(name, attributes) {\n\t\ttree.insertHeadElement(attributes);\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\tmodes.beforeHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.beforeHead.endTagImplyHead = function(name) {\n\t\tthis.startTagHead('head', []);\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.beforeHead.endTagOther = function(name) {\n\t\ttree.parseError('end-tag-after-implied-root', {name: name});\n\t};\n\n\tmodes.inHead = Object.create(modes.base);\n\n\tmodes.inHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\ttitle: 'startTagTitle',\n\t\tscript: 'startTagScript',\n\t\tstyle: 'startTagNoFramesStyle',\n\t\tnoscript: 'startTagNoScript',\n\t\tnoframes: 'startTagNoFramesStyle',\n\t\tbase: 'startTagBaseBasefontBgsoundLink',\n\t\tbasefont: 'startTagBaseBasefontBgsoundLink',\n\t\tbgsound: 'startTagBaseBasefontBgsoundLink',\n\t\tlink: 'startTagBaseBasefontBgsoundLink',\n\t\tmeta: 'startTagMeta',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inHead.end_tag_handlers = {\n\t\thead: 'endTagHead',\n\t\thtml: 'endTagHtmlBodyBr',\n\t\tbody: 'endTagHtmlBodyBr',\n\t\tbr: 'endTagHtmlBodyBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.inHead.processEOF = function() {\n\t\tvar name = tree.currentStackItem().localName;\n\t\tif (['title', 'style', 'script'].indexOf(name) != -1) {\n\t\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\", {name: name});\n\t\t\ttree.popElement();\n\t\t}\n\n\t\tthis.anythingElse();\n\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.inHead.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inHead.startTagHtml = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagHead = function(name, attributes) {\n\t\ttree.parseError('two-heads-are-not-better-than-one');\n\t};\n\n\tmodes.inHead.startTagTitle = function(name, attributes) {\n\t\ttree.processGenericRCDATAStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagNoScript = function(name, attributes) {\n\t\tif (tree.scriptingEnabled)\n\t\t\treturn tree.processGenericRawTextStartTag(name, attributes);\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inHeadNoscript');\n\t};\n\n\tmodes.inHead.startTagNoFramesStyle = function(name, attributes) {\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t};\n\n\tmodes.inHead.startTagScript = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.SCRIPT_DATA);\n\t\ttree.originalInsertionMode = tree.insertionModeName;\n\t\ttree.setInsertionMode('text');\n\t};\n\n\tmodes.inHead.startTagBaseBasefontBgsoundLink = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inHead.startTagMeta = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inHead.endTagHead = function(name) {\n\t\tif (tree.openElements.item(tree.openElements.length - 1).localName == 'head') {\n\t\t\ttree.openElements.pop();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'head'});\n\t\t}\n\t\ttree.setInsertionMode('afterHead');\n\t};\n\n\tmodes.inHead.endTagHtmlBodyBr = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inHead.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inHead.anythingElse = function() {\n\t\tthis.endTagHead('head');\n\t};\n\n\tmodes.afterHead = Object.create(modes.base);\n\n\tmodes.afterHead.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagHead',\n\t\tbody: 'startTagBody',\n\t\tframeset: 'startTagFrameset',\n\t\tbase: 'startTagFromHead',\n\t\tlink: 'startTagFromHead',\n\t\tmeta: 'startTagFromHead',\n\t\tscript: 'startTagFromHead',\n\t\tstyle: 'startTagFromHead',\n\t\ttitle: 'startTagFromHead',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.afterHead.end_tag_handlers = {\n\t\tbody: 'endTagBodyHtmlBr',\n\t\thtml: 'endTagBodyHtmlBr',\n\t\tbr: 'endTagBodyHtmlBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.afterHead.processEOF = function() {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.afterHead.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.afterHead.startTagHtml = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterHead.startTagBody = function(name, attributes) {\n\t\ttree.framesetOk = false;\n\t\ttree.insertBodyElement(attributes);\n\t\ttree.setInsertionMode('inBody');\n\t};\n\n\tmodes.afterHead.startTagFrameset = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inFrameset');\n\t};\n\n\tmodes.afterHead.startTagFromHead = function(name, attributes, selfClosing) {\n\t\ttree.parseError(\"unexpected-start-tag-out-of-my-head\", {name: name});\n\t\ttree.openElements.push(tree.head);\n\t\tmodes.inHead.processStartTag(name, attributes, selfClosing);\n\t\ttree.openElements.remove(tree.head);\n\t};\n\n\tmodes.afterHead.startTagHead = function(name, attributes, selfClosing) {\n\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t};\n\n\tmodes.afterHead.startTagOther = function(name, attributes, selfClosing) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.afterHead.endTagBodyHtmlBr = function(name) {\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.afterHead.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.afterHead.anythingElse = function() {\n\t\ttree.insertBodyElement([]);\n\t\ttree.setInsertionMode('inBody');\n\t\ttree.framesetOk = true;\n\t}\n\n\tmodes.inBody = Object.create(modes.base);\n\n\tmodes.inBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\thead: 'startTagMisplaced',\n\t\tbase: 'startTagProcessInHead',\n\t\tbasefont: 'startTagProcessInHead',\n\t\tbgsound: 'startTagProcessInHead',\n\t\tlink: 'startTagProcessInHead',\n\t\tmeta: 'startTagProcessInHead',\n\t\tnoframes: 'startTagProcessInHead',\n\t\tscript: 'startTagProcessInHead',\n\t\tstyle: 'startTagProcessInHead',\n\t\ttitle: 'startTagProcessInHead',\n\t\tbody: 'startTagBody',\n\t\tform: 'startTagForm',\n\t\tplaintext: 'startTagPlaintext',\n\t\ta: 'startTagA',\n\t\tbutton: 'startTagButton',\n\t\txmp: 'startTagXmp',\n\t\ttable: 'startTagTable',\n\t\thr: 'startTagHr',\n\t\timage: 'startTagImage',\n\t\tinput: 'startTagInput',\n\t\ttextarea: 'startTagTextarea',\n\t\tselect: 'startTagSelect',\n\t\tisindex: 'startTagIsindex',\n\t\tapplet:\t'startTagAppletMarqueeObject',\n\t\tmarquee:\t'startTagAppletMarqueeObject',\n\t\tobject:\t'startTagAppletMarqueeObject',\n\t\tli: 'startTagListItem',\n\t\tdd: 'startTagListItem',\n\t\tdt: 'startTagListItem',\n\t\taddress: 'startTagCloseP',\n\t\tarticle: 'startTagCloseP',\n\t\taside: 'startTagCloseP',\n\t\tblockquote: 'startTagCloseP',\n\t\tcenter: 'startTagCloseP',\n\t\tdetails: 'startTagCloseP',\n\t\tdir: 'startTagCloseP',\n\t\tdiv: 'startTagCloseP',\n\t\tdl: 'startTagCloseP',\n\t\tfieldset: 'startTagCloseP',\n\t\tfigcaption: 'startTagCloseP',\n\t\tfigure: 'startTagCloseP',\n\t\tfooter: 'startTagCloseP',\n\t\theader: 'startTagCloseP',\n\t\thgroup: 'startTagCloseP',\n\t\tmain: 'startTagCloseP',\n\t\tmenu: 'startTagCloseP',\n\t\tnav: 'startTagCloseP',\n\t\tol: 'startTagCloseP',\n\t\tp: 'startTagCloseP',\n\t\tsection: 'startTagCloseP',\n\t\tsummary: 'startTagCloseP',\n\t\tul: 'startTagCloseP',\n\t\tlisting: 'startTagPreListing',\n\t\tpre: 'startTagPreListing',\n\t\tb: 'startTagFormatting',\n\t\tbig: 'startTagFormatting',\n\t\tcode: 'startTagFormatting',\n\t\tem: 'startTagFormatting',\n\t\tfont: 'startTagFormatting',\n\t\ti: 'startTagFormatting',\n\t\ts: 'startTagFormatting',\n\t\tsmall: 'startTagFormatting',\n\t\tstrike: 'startTagFormatting',\n\t\tstrong: 'startTagFormatting',\n\t\ttt: 'startTagFormatting',\n\t\tu: 'startTagFormatting',\n\t\tnobr: 'startTagNobr',\n\t\tarea: 'startTagVoidFormatting',\n\t\tbr: 'startTagVoidFormatting',\n\t\tembed: 'startTagVoidFormatting',\n\t\timg: 'startTagVoidFormatting',\n\t\tkeygen: 'startTagVoidFormatting',\n\t\twbr: 'startTagVoidFormatting',\n\t\tparam: 'startTagParamSourceTrack',\n\t\tsource: 'startTagParamSourceTrack',\n\t\ttrack: 'startTagParamSourceTrack',\n\t\tiframe: 'startTagIFrame',\n\t\tnoembed: 'startTagRawText',\n\t\tnoscript: 'startTagRawText',\n\t\th1: 'startTagHeading',\n\t\th2: 'startTagHeading',\n\t\th3: 'startTagHeading',\n\t\th4: 'startTagHeading',\n\t\th5: 'startTagHeading',\n\t\th6: 'startTagHeading',\n\t\tcaption: 'startTagMisplaced',\n\t\tcol: 'startTagMisplaced',\n\t\tcolgroup: 'startTagMisplaced',\n\t\tframe: 'startTagMisplaced',\n\t\tframeset: 'startTagFrameset',\n\t\ttbody: 'startTagMisplaced',\n\t\ttd: 'startTagMisplaced',\n\t\ttfoot: 'startTagMisplaced',\n\t\tth: 'startTagMisplaced',\n\t\tthead: 'startTagMisplaced',\n\t\ttr: 'startTagMisplaced',\n\t\toption: 'startTagOptionOptgroup',\n\t\toptgroup: 'startTagOptionOptgroup',\n\t\tmath: 'startTagMath',\n\t\tsvg: 'startTagSVG',\n\t\trt: 'startTagRpRt',\n\t\trp: 'startTagRpRt',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inBody.end_tag_handlers = {\n\t\tp: 'endTagP',\n\t\tbody: 'endTagBody',\n\t\thtml: 'endTagHtml',\n\t\taddress: 'endTagBlock',\n\t\tarticle: 'endTagBlock',\n\t\taside: 'endTagBlock',\n\t\tblockquote: 'endTagBlock',\n\t\tbutton: 'endTagBlock',\n\t\tcenter: 'endTagBlock',\n\t\tdetails: 'endTagBlock',\n\t\tdir: 'endTagBlock',\n\t\tdiv: 'endTagBlock',\n\t\tdl: 'endTagBlock',\n\t\tfieldset: 'endTagBlock',\n\t\tfigcaption: 'endTagBlock',\n\t\tfigure: 'endTagBlock',\n\t\tfooter: 'endTagBlock',\n\t\theader: 'endTagBlock',\n\t\thgroup: 'endTagBlock',\n\t\tlisting: 'endTagBlock',\n\t\tmain: 'endTagBlock',\n\t\tmenu: 'endTagBlock',\n\t\tnav: 'endTagBlock',\n\t\tol: 'endTagBlock',\n\t\tpre: 'endTagBlock',\n\t\tsection: 'endTagBlock',\n\t\tsummary: 'endTagBlock',\n\t\tul: 'endTagBlock',\n\t\tform: 'endTagForm',\n\t\tapplet: 'endTagAppletMarqueeObject',\n\t\tmarquee: 'endTagAppletMarqueeObject',\n\t\tobject: 'endTagAppletMarqueeObject',\n\t\tdd: 'endTagListItem',\n\t\tdt: 'endTagListItem',\n\t\tli: 'endTagListItem',\n\t\th1: 'endTagHeading',\n\t\th2: 'endTagHeading',\n\t\th3: 'endTagHeading',\n\t\th4: 'endTagHeading',\n\t\th5: 'endTagHeading',\n\t\th6: 'endTagHeading',\n\t\ta: 'endTagFormatting',\n\t\tb: 'endTagFormatting',\n\t\tbig: 'endTagFormatting',\n\t\tcode: 'endTagFormatting',\n\t\tem: 'endTagFormatting',\n\t\tfont: 'endTagFormatting',\n\t\ti: 'endTagFormatting',\n\t\tnobr: 'endTagFormatting',\n\t\ts: 'endTagFormatting',\n\t\tsmall: 'endTagFormatting',\n\t\tstrike: 'endTagFormatting',\n\t\tstrong: 'endTagFormatting',\n\t\ttt: 'endTagFormatting',\n\t\tu: 'endTagFormatting',\n\t\tbr: 'endTagBr',\n\t\t\"-default\": 'endTagOther'\n\t};\n\n\tmodes.inBody.processCharacters = function(buffer) {\n\t\tif (tree.shouldSkipLeadingNewline) {\n\t\t\ttree.shouldSkipLeadingNewline = false;\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\n\t\t}\n\t\ttree.reconstructActiveFormattingElements();\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!characters)\n\t\t\treturn;\n\t\ttree.insertText(characters);\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\n\t\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagHtml = function(name, attributes) {\n\t\ttree.parseError('non-html-root');\n\t\ttree.addAttributesToElement(tree.openElements.rootNode, attributes);\n\t};\n\n\tmodes.inBody.startTagProcessInHead = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inBody.startTagBody = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag', {name: 'body'});\n\t\tif (tree.openElements.length == 1 ||\n\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\tassert.ok(tree.context);\n\t\t} else {\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.addAttributesToElement(tree.openElements.bodyElement, attributes);\n\t\t}\n\t};\n\n\tmodes.inBody.startTagFrameset = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag', {name: 'frameset'});\n\t\tif (tree.openElements.length == 1 ||\n\t\t\ttree.openElements.item(1).localName != 'body') {\n\t\t\tassert.ok(tree.context);\n\t\t} else if (tree.framesetOk) {\n\t\t\ttree.detachFromParent(tree.openElements.bodyElement);\n\t\t\twhile (tree.openElements.length > 1)\n\t\t\t\ttree.openElements.pop();\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.setInsertionMode('inFrameset');\n\t\t}\n\t};\n\n\tmodes.inBody.startTagCloseP = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagPreListing = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t\ttree.shouldSkipLeadingNewline = true;\n\t};\n\n\tmodes.inBody.startTagForm = function(name, attributes) {\n\t\tif (tree.form) {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t} else {\n\t\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\t\tthis.endTagP('p');\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.form = tree.currentStackItem();\n\t\t}\n\t};\n\n\tmodes.inBody.startTagRpRt = function(name, attributes) {\n\t\tif (tree.openElements.inScope('ruby')) {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != 'ruby') {\n\t\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t\t}\n\t\t}\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagListItem = function(name, attributes) {\n\t\tvar stopNames = {li: ['li'], dd: ['dd', 'dt'], dt: ['dd', 'dt']};\n\t\tvar stopName = stopNames[name];\n\n\t\tvar els = tree.openElements;\n\t\tfor (var i = els.length - 1; i >= 0; i--) {\n\t\t\tvar node = els.item(i);\n\t\t\tif (stopName.indexOf(node.localName) != -1) {\n\t\t\t\ttree.insertionMode.processEndTag(node.localName);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (node.isSpecial() && node.localName !== 'p' && node.localName !== 'address' && node.localName !== 'div')\n\t\t\t\tbreak;\n\t\t}\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagPlaintext = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.PLAINTEXT);\n\t};\n\n\tmodes.inBody.startTagHeading = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\tif (tree.currentStackItem().isNumberedHeader()) {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t\ttree.popElement();\n\t\t}\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagA = function(name, attributes) {\n\t\tvar activeA = tree.elementInActiveFormattingElements('a');\n\t\tif (activeA) {\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: \"a\", endName: \"a\"});\n\t\t\ttree.adoptionAgencyEndTag('a');\n\t\t\tif (tree.openElements.contains(activeA))\n\t\t\t\ttree.openElements.remove(activeA);\n\t\t\ttree.removeElementFromActiveFormattingElements(activeA);\n\t\t}\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagFormatting = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagNobr = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tif (tree.openElements.inScope('nobr')) {\n\t\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\", {startName: 'nobr', endName: 'nobr'});\n\t\t\tthis.processEndTag('nobr');\n\t\t\t\ttree.reconstructActiveFormattingElements();\n\t\t}\n\t\ttree.insertFormattingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagButton = function(name, attributes) {\n\t\tif (tree.openElements.inScope('button')) {\n\t\t\ttree.parseError('unexpected-start-tag-implies-end-tag', {startName: 'button', endName: 'button'});\n\t\t\tthis.processEndTag('button');\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t} else {\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertElement(name, attributes);\n\t\t}\n\t};\n\n\tmodes.inBody.startTagAppletMarqueeObject = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.activeFormattingElements.push(Marker);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.endTagAppletMarqueeObject = function(name) {\n\t\tif (!tree.openElements.inScope(name)) {\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t\ttree.clearActiveFormattingElements();\n\t\t}\n\t};\n\n\tmodes.inBody.startTagXmp = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.processEndTag('p');\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagTable = function(name, attributes) {\n\t\tif (tree.compatMode !== \"quirks\")\n\t\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\t\tthis.processEndTag('p');\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inTable');\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagVoidFormatting = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagParamSourceTrack = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagHr = function(name, attributes) {\n\t\tif (tree.openElements.inButtonScope('p'))\n\t\t\tthis.endTagP('p');\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t};\n\n\tmodes.inBody.startTagImage = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag-treated-as', {originalName: 'image', newName: 'img'});\n\t\tthis.processStartTag('img', attributes);\n\t};\n\n\tmodes.inBody.startTagInput = function(name, attributes) {\n\t\tvar currentFramesetOk = tree.framesetOk;\n\t\tthis.startTagVoidFormatting(name, attributes);\n\t\tfor (var key in attributes) {\n\t\t\tif (attributes[key].nodeName == 'type') {\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden')\n\t\t\t\t\ttree.framesetOk = currentFramesetOk;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inBody.startTagIsindex = function(name, attributes) {\n\t\ttree.parseError('deprecated-tag', {name: 'isindex'});\n\t\ttree.selfClosingFlagAcknowledged = true;\n\t\tif (tree.form)\n\t\t\treturn;\n\t\tvar formAttributes = [];\n\t\tvar inputAttributes = [];\n\t\tvar prompt = \"This is a searchable index. Enter search keywords: \";\n\t\tfor (var key in attributes) {\n\t\t\tswitch (attributes[key].nodeName) {\n\t\t\t\tcase 'action':\n\t\t\t\t\tformAttributes.push({nodeName: 'action',\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'prompt':\n\t\t\t\t\tprompt = attributes[key].nodeValue;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'name':\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tinputAttributes.push({nodeName: attributes[key].nodeName,\n\t\t\t\t\t\tnodeValue: attributes[key].nodeValue});\n\t\t\t}\n\t\t}\n\t\tinputAttributes.push({nodeName: 'name', nodeValue: 'isindex'});\n\t\tthis.processStartTag('form', formAttributes);\n\t\tthis.processStartTag('hr');\n\t\tthis.processStartTag('label');\n\t\tthis.processCharacters(new CharacterBuffer(prompt));\n\t\tthis.processStartTag('input', inputAttributes);\n\t\tthis.processEndTag('label');\n\t\tthis.processStartTag('hr');\n\t\tthis.processEndTag('form');\n\t};\n\n\tmodes.inBody.startTagTextarea = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t\ttree.tokenizer.setState(Tokenizer.RCDATA);\n\t\ttree.originalInsertionMode = tree.insertionModeName;\n\t\ttree.shouldSkipLeadingNewline = true;\n\t\ttree.framesetOk = false;\n\t\ttree.setInsertionMode('text');\n\t};\n\n\tmodes.inBody.startTagIFrame = function(name, attributes) {\n\t\ttree.framesetOk = false;\n\t\tthis.startTagRawText(name, attributes);\n\t};\n\n\tmodes.inBody.startTagRawText = function(name, attributes) {\n\t\ttree.processGenericRawTextStartTag(name, attributes);\n\t};\n\n\tmodes.inBody.startTagSelect = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.framesetOk = false;\n\t\tvar insertionModeName = tree.insertionModeName;\n\t\tif (insertionModeName == 'inTable' ||\n\t\t\tinsertionModeName == 'inCaption' ||\n\t\t\tinsertionModeName == 'inColumnGroup' ||\n\t\t\tinsertionModeName == 'inTableBody' ||\n\t\t\tinsertionModeName == 'inRow' ||\n\t\t\tinsertionModeName == 'inCell') {\n\t\t\ttree.setInsertionMode('inSelectInTable');\n\t\t} else {\n\t\t\ttree.setInsertionMode('inSelect');\n\t\t}\n\t};\n\n\tmodes.inBody.startTagMisplaced = function(name, attributes) {\n\t\ttree.parseError('unexpected-start-tag-ignored', {name: name});\n\t};\n\n\tmodes.inBody.endTagMisplaced = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t};\n\n\tmodes.inBody.endTagBr = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-treated-as\", {originalName: \"br\", newName: \"br element\"});\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, []);\n\t\ttree.popElement();\n\t};\n\n\tmodes.inBody.startTagOptionOptgroup = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.startTagOther = function(name, attributes) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inBody.endTagOther = function(name) {\n\t\tvar node;\n\t\tfor (var i = tree.openElements.length - 1; i > 0; i--) {\n\t\t\tnode = tree.openElements.item(i);\n\t\t\tif (node.localName == name) {\n\t\t\t\ttree.generateImpliedEndTags(name);\n\t\t\t\tif (tree.currentStackItem().localName != name)\n\t\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\t\ttree.openElements.remove_openElements_until(function(x) {return x === node;});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (node.isSpecial()) {\n\t\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inBody.startTagMath = function(name, attributes, selfClosing) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tattributes = tree.adjustMathMLAttributes(attributes);\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/1998/Math/MathML\", selfClosing);\n\t};\n\n\tmodes.inBody.startTagSVG = function(name, attributes, selfClosing) {\n\t\ttree.reconstructActiveFormattingElements();\n\t\tattributes = tree.adjustSVGAttributes(attributes);\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, \"http://www.w3.org/2000/svg\", selfClosing);\n\t};\n\n\tmodes.inBody.endTagP = function(name) {\n\t\tif (!tree.openElements.inButtonScope('p')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: 'p'});\n\t\t\tthis.startTagCloseP('p', []);\n\t\t\tthis.endTagP('p');\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags('p');\n\t\t\tif (tree.currentStackItem().localName != 'p')\n\t\t\t\ttree.parseError('unexpected-implied-end-tag', {name: 'p'});\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagBody = function(name) {\n\t\tif (!tree.openElements.inScope('body')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().localName != 'body') {\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\texpectedName: tree.currentStackItem().localName,\n\t\t\t\tgotName: name\n\t\t\t});\n\t\t}\n\t\ttree.setInsertionMode('afterBody');\n\t};\n\n\tmodes.inBody.endTagHtml = function(name) {\n\t\tif (!tree.openElements.inScope('body')) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().localName != 'body') {\n\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\texpectedName: tree.currentStackItem().localName,\n\t\t\t\tgotName: name\n\t\t\t});\n\t\t}\n\t\ttree.setInsertionMode('afterBody');\n\t\ttree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inBody.endTagBlock = function(name) {\n\t\tif (!tree.openElements.inScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagForm = function(name)  {\n\t\tvar node = tree.form;\n\t\ttree.form = null;\n\t\tif (!node || !tree.openElements.inScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem() != node) {\n\t\t\t\ttree.parseError('end-tag-too-early-ignored', {name: 'form'});\n\t\t\t}\n\t\t\ttree.openElements.remove(node);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagListItem = function(name) {\n\t\tif (!tree.openElements.inListItemScope(name)) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags(name);\n\t\t\tif (tree.currentStackItem().localName != name)\n\t\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\t\t\ttree.openElements.popUntilPopped(name);\n\t\t}\n\t};\n\n\tmodes.inBody.endTagHeading = function(name) {\n\t\tif (!tree.openElements.hasNumberedHeaderElementInScope()) {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t\treturn;\n\t\t}\n\t\ttree.generateImpliedEndTags();\n\t\tif (tree.currentStackItem().localName != name)\n\t\t\ttree.parseError('end-tag-too-early', {name: name});\n\n\t\ttree.openElements.remove_openElements_until(function(e) {\n\t\t\treturn e.isNumberedHeader();\n\t\t});\n\t};\n\n\tmodes.inBody.endTagFormatting = function(name, attributes) {\n\t\tif (!tree.adoptionAgencyEndTag(name))\n\t\t\tthis.endTagOther(name, attributes);\n\t};\n\n\tmodes.inCaption = Object.create(modes.base);\n\n\tmodes.inCaption.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagTableElement',\n\t\tcol: 'startTagTableElement',\n\t\tcolgroup: 'startTagTableElement',\n\t\ttbody: 'startTagTableElement',\n\t\ttd: 'startTagTableElement',\n\t\ttfoot: 'startTagTableElement',\n\t\tthead: 'startTagTableElement',\n\t\ttr: 'startTagTableElement',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inCaption.end_tag_handlers = {\n\t\tcaption: 'endTagCaption',\n\t\ttable: 'endTagTable',\n\t\tbody: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttbody: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\ttfood: 'endTagIgnore',\n\t\tthead: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inCaption.processCharacters = function(data) {\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.inCaption.startTagTableElement = function(name, attributes) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\n\t\ttree.insertionMode.processEndTag('caption');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inCaption.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inCaption.endTagCaption = function(name) {\n\t\tif (!tree.openElements.inTableScope('caption')) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != 'caption') {\n\t\t\t\ttree.parseError('expected-one-end-tag-but-got-another', {\n\t\t\t\t\tgotName: \"caption\",\n\t\t\t\t\texpectedName: tree.currentStackItem().localName\n\t\t\t\t});\n\t\t\t}\n\t\t\ttree.openElements.popUntilPopped('caption');\n\t\t\ttree.clearActiveFormattingElements();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t}\n\t};\n\n\tmodes.inCaption.endTagTable = function(name) {\n\t\ttree.parseError(\"unexpected-end-table-in-caption\");\n\t\tvar ignoreEndTag = !tree.openElements.inTableScope('caption');\n\t\ttree.insertionMode.processEndTag('caption');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inCaption.endTagIgnore = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inCaption.endTagOther = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inCell = Object.create(modes.base);\n\n\tmodes.inCell.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttd: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tth: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\ttr: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inCell.end_tag_handlers = {\n\t\ttd: 'endTagTableCell',\n\t\tth: 'endTagTableCell',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttable: 'endTagImply',\n\t\ttbody: 'endTagImply',\n\t\ttfoot: 'endTagImply',\n\t\tthead: 'endTagImply',\n\t\ttr: 'endTagImply',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inCell.processCharacters = function(data) {\n\t\tmodes.inBody.processCharacters(data);\n\t};\n\n\tmodes.inCell.startTagTableOther = function(name, attributes, selfClosing) {\n\t\tif (tree.openElements.inTableScope('td') || tree.openElements.inTableScope('th')) {\n\t\t\tthis.closeCell();\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inCell.endTagTableCell = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.generateImpliedEndTags(name);\n\t\t\tif (tree.currentStackItem().localName != name.toLowerCase()) {\n\t\t\t\ttree.parseError('unexpected-cell-end-tag', {name: name});\n\t\t\t\ttree.openElements.popUntilPopped(name);\n\t\t\t} else {\n\t\t\t\ttree.popElement();\n\t\t\t}\n\t\t\ttree.clearActiveFormattingElements();\n\t\t\ttree.setInsertionMode('inRow');\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.endTagIgnore = function(name) {\n\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t};\n\n\tmodes.inCell.endTagImply = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.closeCell();\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inCell.endTagOther = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inCell.closeCell = function() {\n\t\tif (tree.openElements.inTableScope('td')) {\n\t\t\tthis.endTagTableCell('td');\n\t\t} else if (tree.openElements.inTableScope('th')) {\n\t\t\tthis.endTagTableCell('th');\n\t\t}\n\t};\n\n\n\tmodes.inColumnGroup = Object.create(modes.base);\n\n\tmodes.inColumnGroup.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcol: 'startTagCol',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inColumnGroup.end_tag_handlers = {\n\t\tcolgroup: 'endTagColgroup',\n\t\tcol: 'endTagCol',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inColumnGroup.ignoreEndTagColgroup = function() {\n\t\treturn tree.currentStackItem().localName == 'html';\n\t};\n\n\tmodes.inColumnGroup.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inColumnGroup.startTagCol = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inColumnGroup.startTagOther = function(name, attributes, selfClosing) {\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inColumnGroup.endTagColgroup = function(name) {\n\t\tif (this.ignoreEndTagColgroup()) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t}\n\t};\n\n\tmodes.inColumnGroup.endTagCol = function(name) {\n\t\ttree.parseError(\"no-end-tag\", {name: 'col'});\n\t};\n\n\tmodes.inColumnGroup.endTagOther = function(name) {\n\t\tvar ignoreEndTag = this.ignoreEndTagColgroup();\n\t\tthis.endTagColgroup('colgroup');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name) ;\n\t};\n\n\tmodes.inForeignContent = Object.create(modes.base);\n\n\tmodes.inForeignContent.processStartTag = function(name, attributes, selfClosing) {\n\t\tif (['b', 'big', 'blockquote', 'body', 'br', 'center', 'code', 'dd', 'div', 'dl', 'dt', 'em', 'embed', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'i', 'img', 'li', 'listing', 'menu', 'meta', 'nobr', 'ol', 'p', 'pre', 'ruby', 's', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'table', 'tt', 'u', 'ul', 'var'].indexOf(name) != -1\n\t\t\t\t|| (name == 'font' && attributes.some(function(attr){ return ['color', 'face', 'size'].indexOf(attr.nodeName) >= 0 }))) {\n\t\t\ttree.parseError('unexpected-html-element-in-foreign-content', {name: name});\n\t\t\twhile (tree.currentStackItem().isForeign()\n\t\t\t\t&& !tree.currentStackItem().isHtmlIntegrationPoint()\n\t\t\t\t&& !tree.currentStackItem().isMathMLTextIntegrationPoint()) {\n\t\t\t\ttree.openElements.pop();\n\t\t\t}\n\t\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t\t\treturn;\n\t\t}\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/1998/Math/MathML\") {\n\t\t\tattributes = tree.adjustMathMLAttributes(attributes);\n\t\t}\n\t\tif (tree.currentStackItem().namespaceURI == \"http://www.w3.org/2000/svg\") {\n\t\t\tname = tree.adjustSVGTagNameCase(name);\n\t\t\tattributes = tree.adjustSVGAttributes(attributes);\n\t\t}\n\t\tattributes = tree.adjustForeignAttributes(attributes);\n\t\ttree.insertForeignElement(name, attributes, tree.currentStackItem().namespaceURI, selfClosing);\n\t};\n\n\tmodes.inForeignContent.processEndTag = function(name) {\n\t\tvar node = tree.currentStackItem();\n\t\tvar index = tree.openElements.length - 1;\n\t\tif (node.localName.toLowerCase() != name)\n\t\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\n\t\twhile (true) {\n\t\t\tif (index === 0)\n\t\t\t\tbreak;\n\t\t\tif (node.localName.toLowerCase() == name) {\n\t\t\t\twhile (tree.openElements.pop() != node);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tindex -= 1;\n\t\t\tnode = tree.openElements.item(index);\n\t\t\tif (node.isForeign()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\ttree.insertionMode.processEndTag(name);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\tmodes.inForeignContent.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError('invalid-codepoint');\n\t\t\treturn '\\uFFFD';\n\t\t});\n\t\tif (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters))\n\t\t\ttree.framesetOk = false;\n\t\ttree.insertText(characters);\n\t};\n\n\tmodes.inHeadNoscript = Object.create(modes.base);\n\n\tmodes.inHeadNoscript.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tbasefont: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tbgsound: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tlink: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tmeta: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tnoframes: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\tstyle: 'startTagBasefontBgsoundLinkMetaNoframesStyle',\n\t\thead: 'startTagHeadNoscript',\n\t\tnoscript: 'startTagHeadNoscript',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inHeadNoscript.end_tag_handlers = {\n\t\tnoscript: 'endTagNoscript',\n\t\tbr: 'endTagBr',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inHeadNoscript.processCharacters = function(buffer) {\n\t\tvar leadingWhitespace = buffer.takeLeadingWhitespace();\n\t\tif (leadingWhitespace)\n\t\t\ttree.insertText(leadingWhitespace);\n\t\tif (!buffer.length)\n\t\t\treturn;\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processCharacters(buffer);\n\t};\n\n\tmodes.inHeadNoscript.processComment = function(data) {\n\t\tmodes.inHead.processComment(data);\n\t};\n\n\tmodes.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.startTagHeadNoscript = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inHeadNoscript.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.endTagBr = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t\tthis.anythingElse();\n\t\ttree.insertionMode.processEndTag(name, attributes);\n\t};\n\n\tmodes.inHeadNoscript.endTagNoscript = function(name, attributes) {\n\t\ttree.popElement();\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\tmodes.inHeadNoscript.endTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inHeadNoscript.anythingElse = function() {\n\t\ttree.popElement();\n\t\ttree.setInsertionMode('inHead');\n\t};\n\n\n\tmodes.inFrameset = Object.create(modes.base);\n\n\tmodes.inFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tframeset: 'startTagFrameset',\n\t\tframe: 'startTagFrame',\n\t\tnoframes: 'startTagNoframes',\n\t\t\"-default\": 'startTagOther'\n\t};\n\n\tmodes.inFrameset.end_tag_handlers = {\n\t\tframeset: 'endTagFrameset',\n\t\tnoframes: 'endTagNoframes',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inFrameset.processCharacters = function(data) {\n\t\ttree.parseError(\"unexpected-char-in-frameset\");\n\t};\n\n\tmodes.inFrameset.startTagFrameset = function(name, attributes) {\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagFrame = function(name, attributes) {\n\t\ttree.insertSelfClosingElement(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagNoframes = function(name, attributes) {\n\t\tmodes.inBody.processStartTag(name, attributes);\n\t};\n\n\tmodes.inFrameset.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inFrameset.endTagFrameset = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'html') {\n\t\t\ttree.parseError(\"unexpected-frameset-in-frameset-innerhtml\");\n\t\t} else {\n\t\t\ttree.popElement();\n\t\t}\n\n\t\tif (!tree.context && tree.currentStackItem().localName != 'frameset') {\n\t\t\ttree.setInsertionMode('afterFrameset');\n\t\t}\n\t};\n\n\tmodes.inFrameset.endTagNoframes = function(name) {\n\t\tmodes.inBody.processEndTag(name);\n\t};\n\n\tmodes.inFrameset.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-frameset\", {name: name});\n\t};\n\n\tmodes.inTable = Object.create(modes.base);\n\n\tmodes.inTable.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tcaption: 'startTagCaption',\n\t\tcolgroup: 'startTagColgroup',\n\t\tcol: 'startTagCol',\n\t\ttable: 'startTagTable',\n\t\ttbody: 'startTagRowGroup',\n\t\ttfoot: 'startTagRowGroup',\n\t\tthead: 'startTagRowGroup',\n\t\ttd: 'startTagImplyTbody',\n\t\tth: 'startTagImplyTbody',\n\t\ttr: 'startTagImplyTbody',\n\t\tstyle: 'startTagStyleScript',\n\t\tscript: 'startTagStyleScript',\n\t\tinput: 'startTagInput',\n\t\tform: 'startTagForm',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inTable.end_tag_handlers = {\n\t\ttable: 'endTagTable',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttbody: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\ttfoot: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\tthead: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inTable.processCharacters =  function(data) {\n\t\tif (tree.currentStackItem().isFosterParenting()) {\n\t\t\tvar originalInsertionMode = tree.insertionModeName;\n\t\t\ttree.setInsertionMode('inTableText');\n\t\t\ttree.originalInsertionMode = originalInsertionMode;\n\t\t\ttree.insertionMode.processCharacters(data);\n\t\t} else {\n\t\t\ttree.redirectAttachToFosterParent = true;\n\t\t\tmodes.inBody.processCharacters(data);\n\t\t\ttree.redirectAttachToFosterParent = false;\n\t\t}\n\t};\n\n\tmodes.inTable.startTagCaption = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.activeFormattingElements.push(Marker);\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inCaption');\n\t};\n\n\tmodes.inTable.startTagColgroup = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inColumnGroup');\n\t};\n\n\tmodes.inTable.startTagCol = function(name, attributes) {\n\t\tthis.startTagColgroup('colgroup', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagRowGroup = function(name, attributes) {\n\t\ttree.openElements.popUntilTableScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inTableBody');\n\t};\n\n\tmodes.inTable.startTagImplyTbody = function(name, attributes) {\n\t\tthis.startTagRowGroup('tbody', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagTable = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-implies-end-tag\",\n\t\t\t\t{startName: \"table\", endName: \"table\"});\n\t\ttree.insertionMode.processEndTag('table');\n\t\tif (!tree.context) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagStyleScript = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTable.startTagInput = function(name, attributes) {\n\t\tfor (var key in attributes) {\n\t\t\tif (attributes[key].nodeName.toLowerCase() == 'type') {\n\t\t\t\tif (attributes[key].nodeValue.toLowerCase() == 'hidden') {\n\t\t\t\t\ttree.parseError(\"unexpected-hidden-input-in-table\");\n\t\t\t\t\ttree.insertElement(name, attributes);\n\t\t\t\t\ttree.openElements.pop();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.startTagOther(name, attributes);\n\t};\n\n\tmodes.inTable.startTagForm = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-form-in-table\");\n\t\tif (!tree.form) {\n\t\t\ttree.insertElement(name, attributes);\n\t\t\ttree.form = tree.currentStackItem();\n\t\t\ttree.openElements.pop();\n\t\t}\n\t};\n\n\tmodes.inTable.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError(\"unexpected-start-tag-implies-table-voodoo\", {name: name});\n\t\ttree.redirectAttachToFosterParent = true;\n\t\tmodes.inBody.processStartTag(name, attributes, selfClosing);\n\t\ttree.redirectAttachToFosterParent = false;\n\t};\n\n\tmodes.inTable.endTagTable = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.generateImpliedEndTags();\n\t\t\tif (tree.currentStackItem().localName != name) {\n\t\t\t\ttree.parseError(\"end-tag-too-early-named\", {gotName: 'table', expectedName: tree.currentStackItem().localName});\n\t\t\t}\n\n\t\t\ttree.openElements.popUntilPopped('table');\n\t\t\ttree.resetInsertionMode();\n\t\t} else {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTable.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag\", {name: name});\n\t};\n\n\tmodes.inTable.endTagOther = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-implies-table-voodoo\", {name: name});\n\t\ttree.redirectAttachToFosterParent = true;\n\t\tmodes.inBody.processEndTag(name);\n\t\ttree.redirectAttachToFosterParent = false;\n\t};\n\n\tmodes.inTableText = Object.create(modes.base);\n\n\tmodes.inTableText.flushCharacters = function() {\n\t\tvar characters = tree.pendingTableCharacters.join('');\n\t\tif (!isAllWhitespace(characters)) {\n\t\t\ttree.redirectAttachToFosterParent = true;\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertText(characters);\n\t\t\ttree.framesetOk = false;\n\t\t\ttree.redirectAttachToFosterParent = false;\n\t\t} else {\n\t\t\ttree.insertText(characters);\n\t\t}\n\t\ttree.pendingTableCharacters = [];\n\t};\n\n\tmodes.inTableText.processComment = function(data) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processComment(data);\n\t};\n\n\tmodes.inTableText.processEOF = function(data) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.inTableText.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tcharacters = characters.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!characters)\n\t\t\treturn;\n\t\ttree.pendingTableCharacters.push(characters);\n\t};\n\n\tmodes.inTableText.processStartTag = function(name, attributes, selfClosing) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inTableText.processEndTag = function(name, attributes) {\n\t\tthis.flushCharacters();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEndTag(name, attributes);\n\t};\n\n\tmodes.inTableBody = Object.create(modes.base);\n\n\tmodes.inTableBody.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\ttr: 'startTagTr',\n\t\ttd: 'startTagTableCell',\n\t\tth: 'startTagTableCell',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inTableBody.end_tag_handlers = {\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTableRowGroup',\n\t\ttfoot: 'endTagTableRowGroup',\n\t\tthead: 'endTagTableRowGroup',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\ttr: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inTableBody.processCharacters = function(data) {\n\t\tmodes.inTable.processCharacters(data);\n\t};\n\n\tmodes.inTableBody.startTagTr = function(name, attributes) {\n\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inRow');\n\t};\n\n\tmodes.inTableBody.startTagTableCell = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-cell-in-table-body\", {name: name});\n\t\tthis.startTagTr('tr', []);\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTableBody.startTagTableOther = function(name, attributes) {\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-start-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.startTagOther = function(name, attributes) {\n\t\tmodes.inTable.processStartTag(name, attributes);\n\t};\n\n\tmodes.inTableBody.endTagTableRowGroup = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTable');\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag-in-table-body', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.endTagTable = function(name) {\n\t\tif (tree.openElements.inTableScope('tbody') ||  tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) {\n\t\t\ttree.openElements.popUntilTableBodyScopeMarker();\n\t\t\tthis.endTagTableRowGroup(tree.currentStackItem().localName);\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inTableBody.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-table-body\", {name: name});\n\t};\n\n\tmodes.inTableBody.endTagOther = function(name) {\n\t\tmodes.inTable.processEndTag(name);\n\t};\n\n\tmodes.inSelect = Object.create(modes.base);\n\n\tmodes.inSelect.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\toption: 'startTagOption',\n\t\toptgroup: 'startTagOptgroup',\n\t\tselect: 'startTagSelect',\n\t\tinput: 'startTagInput',\n\t\tkeygen: 'startTagInput',\n\t\ttextarea: 'startTagInput',\n\t\tscript: 'startTagScript',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inSelect.end_tag_handlers = {\n\t\toption: 'endTagOption',\n\t\toptgroup: 'endTagOptgroup',\n\t\tselect: 'endTagSelect',\n\t\tcaption: 'endTagTableElements',\n\t\ttable: 'endTagTableElements',\n\t\ttbody: 'endTagTableElements',\n\t\ttfoot: 'endTagTableElements',\n\t\tthead: 'endTagTableElements',\n\t\ttr: 'endTagTableElements',\n\t\ttd: 'endTagTableElements',\n\t\tth: 'endTagTableElements',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inSelect.processCharacters = function(buffer) {\n\t\tvar data = buffer.takeRemaining();\n\t\tdata = data.replace(/\\u0000/g, function(match, index){\n\t\t\ttree.parseError(\"invalid-codepoint\");\n\t\t\treturn '';\n\t\t});\n\t\tif (!data)\n\t\t\treturn;\n\t\ttree.insertText(data);\n\t};\n\n\tmodes.inSelect.startTagOption = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inSelect.startTagOptgroup = function(name, attributes) {\n\t\tif (tree.currentStackItem().localName == 'option')\n\t\t\ttree.popElement();\n\t\tif (tree.currentStackItem().localName == 'optgroup')\n\t\t\ttree.popElement();\n\t\ttree.insertElement(name, attributes);\n\t};\n\n\tmodes.inSelect.endTagOption = function(name) {\n\t\tif (tree.currentStackItem().localName !== 'option') {\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t\t\treturn;\n\t\t}\n\t\ttree.popElement();\n\t};\n\n\tmodes.inSelect.endTagOptgroup = function(name) {\n\t\tif (tree.currentStackItem().localName == 'option' && tree.openElements.item(tree.openElements.length - 2).localName == 'optgroup') {\n\t\t\ttree.popElement();\n\t\t}\n\t\tif (tree.currentStackItem().localName == 'optgroup') {\n\t\t\ttree.popElement();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag-in-select', {name: 'optgroup'});\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagSelect = function(name) {\n\t\ttree.parseError(\"unexpected-select-in-select\");\n\t\tthis.endTagSelect('select');\n\t};\n\n\tmodes.inSelect.endTagSelect = function(name) {\n\t\tif (tree.openElements.inTableScope('select')) {\n\t\t\ttree.openElements.popUntilPopped('select');\n\t\t\ttree.resetInsertionMode();\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagInput = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-input-in-select\");\n\t\tif (tree.openElements.inSelectScope('select')) {\n\t\t\tthis.endTagSelect('select');\n\t\t\ttree.insertionMode.processStartTag(name, attributes);\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagScript = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.inSelect.endTagTableElements = function(name) {\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagSelect('select');\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t}\n\t};\n\n\tmodes.inSelect.startTagOther = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-start-tag-in-select\", {name: name});\n\t};\n\n\tmodes.inSelect.endTagOther = function(name) {\n\t\ttree.parseError('unexpected-end-tag-in-select', {name: name});\n\t};\n\n\tmodes.inSelectInTable = Object.create(modes.base);\n\n\tmodes.inSelectInTable.start_tag_handlers = {\n\t\tcaption: 'startTagTable',\n\t\ttable: 'startTagTable',\n\t\ttbody: 'startTagTable',\n\t\ttfoot: 'startTagTable',\n\t\tthead: 'startTagTable',\n\t\ttr: 'startTagTable',\n\t\ttd: 'startTagTable',\n\t\tth: 'startTagTable',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inSelectInTable.end_tag_handlers = {\n\t\tcaption: 'endTagTable',\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTable',\n\t\ttfoot: 'endTagTable',\n\t\tthead: 'endTagTable',\n\t\ttr: 'endTagTable',\n\t\ttd: 'endTagTable',\n\t\tth: 'endTagTable',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inSelectInTable.processCharacters = function(data) {\n\t\tmodes.inSelect.processCharacters(data);\n\t};\n\n\tmodes.inSelectInTable.startTagTable = function(name, attributes) {\n\t\ttree.parseError(\"unexpected-table-element-start-tag-in-select-in-table\", {name: name});\n\t\tthis.endTagOther(\"select\");\n\t\ttree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inSelectInTable.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inSelect.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inSelectInTable.endTagTable = function(name) {\n\t\ttree.parseError(\"unexpected-table-element-end-tag-in-select-in-table\", {name: name});\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagOther(\"select\");\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t}\n\t};\n\n\tmodes.inSelectInTable.endTagOther = function(name) {\n\t\tmodes.inSelect.processEndTag(name);\n\t};\n\n\tmodes.inRow = Object.create(modes.base);\n\n\tmodes.inRow.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\ttd: 'startTagTableCell',\n\t\tth: 'startTagTableCell',\n\t\tcaption: 'startTagTableOther',\n\t\tcol: 'startTagTableOther',\n\t\tcolgroup: 'startTagTableOther',\n\t\ttbody: 'startTagTableOther',\n\t\ttfoot: 'startTagTableOther',\n\t\tthead: 'startTagTableOther',\n\t\ttr: 'startTagTableOther',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.inRow.end_tag_handlers = {\n\t\ttr: 'endTagTr',\n\t\ttable: 'endTagTable',\n\t\ttbody: 'endTagTableRowGroup',\n\t\ttfoot: 'endTagTableRowGroup',\n\t\tthead: 'endTagTableRowGroup',\n\t\tbody: 'endTagIgnore',\n\t\tcaption: 'endTagIgnore',\n\t\tcol: 'endTagIgnore',\n\t\tcolgroup: 'endTagIgnore',\n\t\thtml: 'endTagIgnore',\n\t\ttd: 'endTagIgnore',\n\t\tth: 'endTagIgnore',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.inRow.processCharacters = function(data) {\n\t\tmodes.inTable.processCharacters(data);\n\t};\n\n\tmodes.inRow.startTagTableCell = function(name, attributes) {\n\t\ttree.openElements.popUntilTableRowScopeMarker();\n\t\ttree.insertElement(name, attributes);\n\t\ttree.setInsertionMode('inCell');\n\t\ttree.activeFormattingElements.push(Marker);\n\t};\n\n\tmodes.inRow.startTagTableOther = function(name, attributes) {\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\n\t\tthis.endTagTr('tr');\n\t\tif (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes);\n\t};\n\n\tmodes.inRow.startTagOther = function(name, attributes, selfClosing) {\n\t\tmodes.inTable.processStartTag(name, attributes, selfClosing);\n\t};\n\n\tmodes.inRow.endTagTr = function(name) {\n\t\tif (this.ignoreEndTagTr()) {\n\t\t\tassert.ok(tree.context);\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t} else {\n\t\t\ttree.openElements.popUntilTableRowScopeMarker();\n\t\t\ttree.popElement();\n\t\t\ttree.setInsertionMode('inTableBody');\n\t\t}\n\t};\n\n\tmodes.inRow.endTagTable = function(name) {\n\t\tvar ignoreEndTag = this.ignoreEndTagTr();\n\t\tthis.endTagTr('tr');\n\t\tif (!ignoreEndTag) tree.insertionMode.processEndTag(name);\n\t};\n\n\tmodes.inRow.endTagTableRowGroup = function(name) {\n\t\tif (tree.openElements.inTableScope(name)) {\n\t\t\tthis.endTagTr('tr');\n\t\t\ttree.insertionMode.processEndTag(name);\n\t\t} else {\n\t\t\ttree.parseError('unexpected-end-tag', {name: name});\n\t\t}\n\t};\n\n\tmodes.inRow.endTagIgnore = function(name) {\n\t\ttree.parseError(\"unexpected-end-tag-in-table-row\", {name: name});\n\t};\n\n\tmodes.inRow.endTagOther = function(name) {\n\t\tmodes.inTable.processEndTag(name);\n\t};\n\n\tmodes.inRow.ignoreEndTagTr = function() {\n\t\treturn !tree.openElements.inTableScope('tr');\n\t};\n\n\tmodes.afterAfterFrameset = Object.create(modes.base);\n\n\tmodes.afterAfterFrameset.start_tag_handlers = {\n\t\thtml: 'startTagHtml',\n\t\tnoframes: 'startTagNoFrames',\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.afterAfterFrameset.processEOF = function() {};\n\n\tmodes.afterAfterFrameset.processComment = function(data) {\n\t\ttree.insertComment(data, tree.document);\n\t};\n\n\tmodes.afterAfterFrameset.processCharacters = function(buffer) {\n\t\tvar characters = buffer.takeRemaining();\n\t\tvar whitespace = \"\";\n\t\tfor (var i = 0; i < characters.length; i++) {\n\t\t\tvar ch = characters[i];\n\t\t\tif (isWhitespace(ch))\n\t\t\t\twhitespace += ch;\n\t\t}\n\t\tif (whitespace) {\n\t\t\ttree.reconstructActiveFormattingElements();\n\t\t\ttree.insertText(whitespace);\n\t\t}\n\t\tif (whitespace.length < characters.length)\n\t\t\ttree.parseError('expected-eof-but-got-char');\n\t};\n\n\tmodes.afterAfterFrameset.startTagNoFrames = function(name, attributes) {\n\t\tmodes.inHead.processStartTag(name, attributes);\n\t};\n\n\tmodes.afterAfterFrameset.startTagOther = function(name, attributes, selfClosing) {\n\t\ttree.parseError('expected-eof-but-got-start-tag', {name: name});\n\t};\n\n\tmodes.afterAfterFrameset.processEndTag = function(name, attributes) {\n\t\ttree.parseError('expected-eof-but-got-end-tag', {name: name});\n\t};\n\n\tmodes.text = Object.create(modes.base);\n\n\tmodes.text.start_tag_handlers = {\n\t\t'-default': 'startTagOther'\n\t};\n\n\tmodes.text.end_tag_handlers = {\n\t\tscript: 'endTagScript',\n\t\t'-default': 'endTagOther'\n\t};\n\n\tmodes.text.processCharacters = function(buffer) {\n\t\tif (tree.shouldSkipLeadingNewline) {\n\t\t\ttree.shouldSkipLeadingNewline = false;\n\t\t\tbuffer.skipAtMostOneLeadingNewline();\n\t\t}\n\t\tvar data = buffer.takeRemaining();\n\t\tif (!data)\n\t\t\treturn;\n\t\ttree.insertText(data);\n\t};\n\n\tmodes.text.processEOF = function() {\n\t\ttree.parseError(\"expected-named-closing-tag-but-got-eof\",\n\t\t\t{name: tree.currentStackItem().localName});\n\t\ttree.openElements.pop();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t\ttree.insertionMode.processEOF();\n\t};\n\n\tmodes.text.startTagOther = function(name) {\n\t\tthrow \"Tried to process start tag \" + name + \" in RCDATA/RAWTEXT mode\";\n\t};\n\n\tmodes.text.endTagScript = function(name) {\n\t\tvar node = tree.openElements.pop();\n\t\tassert.ok(node.localName == 'script');\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t};\n\n\tmodes.text.endTagOther = function(name) {\n\t\ttree.openElements.pop();\n\t\ttree.setInsertionMode(tree.originalInsertionMode);\n\t};\n}\n\nTreeBuilder.prototype.setInsertionMode = function(name) {\n\tthis.insertionMode = this.insertionModes[name];\n\tthis.insertionModeName = name;\n};\nTreeBuilder.prototype.adoptionAgencyEndTag = function(name) {\n\tvar outerIterationLimit = 8;\n\tvar innerIterationLimit = 3;\n\tvar formattingElement;\n\n\tfunction isActiveFormattingElement(el) {\n\t\treturn el === formattingElement;\n\t}\n\n\tvar outerLoopCounter = 0;\n\n\twhile (outerLoopCounter++ < outerIterationLimit) {\n\t\tformattingElement = this.elementInActiveFormattingElements(name);\n\n\t\tif (!formattingElement || (this.openElements.contains(formattingElement) && !this.openElements.inScope(formattingElement.localName))) {\n\t\t\tthis.parseError('adoption-agency-1.1', {name: name});\n\t\t\treturn false;\n\t\t}\n\t\tif (!this.openElements.contains(formattingElement)) {\n\t\t\tthis.parseError('adoption-agency-1.2', {name: name});\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\t\treturn true;\n\t\t}\n\t\tif (!this.openElements.inScope(formattingElement.localName)) {\n\t\t\tthis.parseError('adoption-agency-4.4', {name: name});\n\t\t}\n\n\t\tif (formattingElement != this.currentStackItem()) {\n\t\t\tthis.parseError('adoption-agency-1.3', {name: name});\n\t\t}\n\t\tvar furthestBlock = this.openElements.furthestBlockForFormattingElement(formattingElement.node);\n\n\t\tif (!furthestBlock) {\n\t\t\tthis.openElements.remove_openElements_until(isActiveFormattingElement);\n\t\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\t\treturn true;\n\t\t}\n\n\t\tvar afeIndex = this.openElements.elements.indexOf(formattingElement);\n\t\tvar commonAncestor = this.openElements.item(afeIndex - 1);\n\n\t\tvar bookmark = this.activeFormattingElements.indexOf(formattingElement);\n\n\t\tvar node = furthestBlock;\n\t\tvar lastNode = furthestBlock;\n\t\tvar index = this.openElements.elements.indexOf(node);\n\n\t\tvar innerLoopCounter = 0;\n\t\twhile (innerLoopCounter++ < innerIterationLimit) {\n\t\t\tindex -= 1;\n\t\t\tnode = this.openElements.item(index);\n\t\t\tif (this.activeFormattingElements.indexOf(node) < 0) {\n\t\t\t\tthis.openElements.elements.splice(index, 1);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (node == formattingElement)\n\t\t\t\tbreak;\n\n\t\t\tif (lastNode == furthestBlock)\n\t\t\t\tbookmark = this.activeFormattingElements.indexOf(node) + 1;\n\n\t\t\tvar clone = this.createElement(node.namespaceURI, node.localName, node.attributes);\n\t\t\tvar newNode = new StackItem(node.namespaceURI, node.localName, node.attributes, clone);\n\n\t\t\tthis.activeFormattingElements[this.activeFormattingElements.indexOf(node)] = newNode;\n\t\t\tthis.openElements.elements[this.openElements.elements.indexOf(node)] = newNode;\n\n\t\t\tnode = newNode;\n\t\t\tthis.detachFromParent(lastNode.node);\n\t\t\tthis.attachNode(lastNode.node, node.node);\n\t\t\tlastNode = node;\n\t\t}\n\n\t\tthis.detachFromParent(lastNode.node);\n\t\tif (commonAncestor.isFosterParenting()) {\n\t\t\tthis.insertIntoFosterParent(lastNode.node);\n\t\t} else {\n\t\t\tthis.attachNode(lastNode.node, commonAncestor.node);\n\t\t}\n\n\t\tvar clone = this.createElement(\"http://www.w3.org/1999/xhtml\", formattingElement.localName, formattingElement.attributes);\n\t\tvar formattingClone = new StackItem(formattingElement.namespaceURI, formattingElement.localName, formattingElement.attributes, clone);\n\n\t\tthis.reparentChildren(furthestBlock.node, clone);\n\t\tthis.attachNode(clone, furthestBlock.node);\n\n\t\tthis.removeElementFromActiveFormattingElements(formattingElement);\n\t\tthis.activeFormattingElements.splice(Math.min(bookmark, this.activeFormattingElements.length), 0, formattingClone);\n\n\t\tthis.openElements.remove(formattingElement);\n\t\tthis.openElements.elements.splice(this.openElements.elements.indexOf(furthestBlock) + 1, 0, formattingClone);\n\t}\n\n\treturn true;\n};\n\nTreeBuilder.prototype.start = function() {\n\tthrow \"Not mplemented\";\n};\n\nTreeBuilder.prototype.startTokenization = function(tokenizer) {\n\tthis.tokenizer = tokenizer;\n\tthis.compatMode = \"no quirks\";\n\tthis.originalInsertionMode = \"initial\";\n\tthis.framesetOk = true;\n\tthis.openElements = new ElementStack();\n\tthis.activeFormattingElements = [];\n\tthis.start();\n\tif (this.context) {\n\t\tswitch(this.context) {\n\t\tcase 'title':\n\t\tcase 'textarea':\n\t\t\tthis.tokenizer.setState(Tokenizer.RCDATA);\n\t\t\tbreak;\n\t\tcase 'style':\n\t\tcase 'xmp':\n\t\tcase 'iframe':\n\t\tcase 'noembed':\n\t\tcase 'noframes':\n\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\t\t\tbreak;\n\t\tcase 'script':\n\t\t\tthis.tokenizer.setState(Tokenizer.SCRIPT_DATA);\n\t\t\tbreak;\n\t\tcase 'noscript':\n\t\t\tif (this.scriptingEnabled)\n\t\t\t\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\t\t\tbreak;\n\t\tcase 'plaintext':\n\t\t\tthis.tokenizer.setState(Tokenizer.PLAINTEXT);\n\t\t\tbreak;\n\t\t}\n\t\tthis.insertHtmlElement();\n\t\tthis.resetInsertionMode();\n\t} else {\n\t\tthis.setInsertionMode('initial');\n\t}\n};\n\nTreeBuilder.prototype.processToken = function(token) {\n\tthis.selfClosingFlagAcknowledged = false;\n\n\tvar currentNode = this.openElements.top || null;\n\tvar insertionMode;\n\tif (!currentNode || !currentNode.isForeign() ||\n\t\t(currentNode.isMathMLTextIntegrationPoint() &&\n\t\t\t((token.type == 'StartTag' &&\n\t\t\t\t\t!(token.name in {mglyph:0, malignmark:0})) ||\n\t\t\t\t(token.type === 'Characters'))\n\t\t) ||\n\t\t(currentNode.namespaceURI == \"http://www.w3.org/1998/Math/MathML\" &&\n\t\t\tcurrentNode.localName == 'annotation-xml' &&\n\t\t\ttoken.type == 'StartTag' && token.name == 'svg'\n\t\t) ||\n\t\t(currentNode.isHtmlIntegrationPoint() &&\n\t\t\ttoken.type in {StartTag:0, Characters:0}\n\t\t) ||\n\t\ttoken.type == 'EOF'\n\t) {\n\t\tinsertionMode = this.insertionMode;\n\t} else {\n\t\tinsertionMode = this.insertionModes.inForeignContent;\n\t}\n\tswitch(token.type) {\n\tcase 'Characters':\n\t\tvar buffer = new CharacterBuffer(token.data);\n\t\tinsertionMode.processCharacters(buffer);\n\t\tbreak;\n\tcase 'Comment':\n\t\tinsertionMode.processComment(token.data);\n\t\tbreak;\n\tcase 'StartTag':\n\t\tinsertionMode.processStartTag(token.name, token.data, token.selfClosing);\n\t\tbreak;\n\tcase 'EndTag':\n\t\tinsertionMode.processEndTag(token.name);\n\t\tbreak;\n\tcase 'Doctype':\n\t\tinsertionMode.processDoctype(token.name, token.publicId, token.systemId, token.forceQuirks);\n\t\tbreak;\n\tcase 'EOF':\n\t\tinsertionMode.processEOF();\n\t\tbreak;\n\t}\n};\nTreeBuilder.prototype.isCdataSectionAllowed = function() {\n\treturn this.openElements.length > 0 && this.currentStackItem().isForeign();\n};\nTreeBuilder.prototype.isSelfClosingFlagAcknowledged = function() {\n\treturn this.selfClosingFlagAcknowledged;\n};\n\nTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.attachNode = function(child, parent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.detachFromParent = function(node) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertHtmlElement = function(attributes) {\n\tvar root = this.createElement(\"http://www.w3.org/1999/xhtml\", 'html', attributes);\n\tthis.attachNode(root, this.document);\n\tthis.openElements.pushHtmlElement(new StackItem(\"http://www.w3.org/1999/xhtml\", 'html', attributes, root));\n\treturn root;\n};\n\nTreeBuilder.prototype.insertHeadElement = function(attributes) {\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"head\", attributes);\n\tthis.head = new StackItem(\"http://www.w3.org/1999/xhtml\", \"head\", attributes, element);\n\tthis.attachNode(element, this.openElements.top.node);\n\tthis.openElements.pushHeadElement(this.head);\n\treturn element;\n};\n\nTreeBuilder.prototype.insertBodyElement = function(attributes) {\n\tvar element = this.createElement(\"http://www.w3.org/1999/xhtml\", \"body\", attributes);\n\tthis.attachNode(element, this.openElements.top.node);\n\tthis.openElements.pushBodyElement(new StackItem(\"http://www.w3.org/1999/xhtml\", \"body\", attributes, element));\n\treturn element;\n};\n\nTreeBuilder.prototype.insertIntoFosterParent = function(node) {\n\tvar tableIndex = this.openElements.findIndex('table');\n\tvar tableElement = this.openElements.item(tableIndex).node;\n\tif (tableIndex === 0)\n\t\treturn this.attachNode(node, tableElement);\n\tthis.attachNodeToFosterParent(node, tableElement, this.openElements.item(tableIndex - 1).node);\n};\n\nTreeBuilder.prototype.insertElement = function(name, attributes, namespaceURI, selfClosing) {\n\tif (!namespaceURI)\n\t\tnamespaceURI = \"http://www.w3.org/1999/xhtml\";\n\tvar element = this.createElement(namespaceURI, name, attributes);\n\tif (this.shouldFosterParent())\n\t\tthis.insertIntoFosterParent(element);\n\telse\n\t\tthis.attachNode(element, this.openElements.top.node);\n\tif (!selfClosing)\n\t\tthis.openElements.push(new StackItem(namespaceURI, name, attributes, element));\n};\n\nTreeBuilder.prototype.insertFormattingElement = function(name, attributes) {\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\");\n\tthis.appendElementToActiveFormattingElements(this.currentStackItem());\n};\n\nTreeBuilder.prototype.insertSelfClosingElement = function(name, attributes) {\n\tthis.selfClosingFlagAcknowledged = true;\n\tthis.insertElement(name, attributes, \"http://www.w3.org/1999/xhtml\", true);\n};\n\nTreeBuilder.prototype.insertForeignElement = function(name, attributes, namespaceURI, selfClosing) {\n\tif (selfClosing)\n\t\tthis.selfClosingFlagAcknowledged = true;\n\tthis.insertElement(name, attributes, namespaceURI, selfClosing);\n};\n\nTreeBuilder.prototype.insertComment = function(data, parent) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\n\tthrow new Error(\"Not implemented\");\n};\n\nTreeBuilder.prototype.insertText = function(data) {\n\tthrow new Error(\"Not implemented\");\n};\nTreeBuilder.prototype.currentStackItem = function() {\n\treturn this.openElements.top;\n};\nTreeBuilder.prototype.popElement = function() {\n\treturn this.openElements.pop();\n};\nTreeBuilder.prototype.shouldFosterParent = function() {\n\treturn this.redirectAttachToFosterParent && this.currentStackItem().isFosterParenting();\n};\nTreeBuilder.prototype.generateImpliedEndTags = function(exclude) {\n\tvar name = this.openElements.top.localName;\n\tif (['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'].indexOf(name) != -1 && name != exclude) {\n\t\tthis.popElement();\n\t\tthis.generateImpliedEndTags(exclude);\n\t}\n};\nTreeBuilder.prototype.reconstructActiveFormattingElements = function() {\n\tif (this.activeFormattingElements.length === 0)\n\t\treturn;\n\tvar i = this.activeFormattingElements.length - 1;\n\tvar entry = this.activeFormattingElements[i];\n\tif (entry == Marker || this.openElements.contains(entry))\n\t\treturn;\n\n\twhile (entry != Marker && !this.openElements.contains(entry)) {\n\t\ti -= 1;\n\t\tentry = this.activeFormattingElements[i];\n\t\tif (!entry)\n\t\t\tbreak;\n\t}\n\n\twhile (true) {\n\t\ti += 1;\n\t\tentry = this.activeFormattingElements[i];\n\t\tthis.insertElement(entry.localName, entry.attributes);\n\t\tvar element = this.currentStackItem();\n\t\tthis.activeFormattingElements[i] = element;\n\t\tif (element == this.activeFormattingElements[this.activeFormattingElements.length -1])\n\t\t\tbreak;\n\t}\n\n};\nTreeBuilder.prototype.ensureNoahsArkCondition = function(item) {\n\tvar kNoahsArkCapacity = 3;\n\tif (this.activeFormattingElements.length < kNoahsArkCapacity)\n\t\treturn;\n\tvar candidates = [];\n\tvar newItemAttributeCount = item.attributes.length;\n\tfor (var i = this.activeFormattingElements.length - 1; i >= 0; i--) {\n\t\tvar candidate = this.activeFormattingElements[i];\n\t\tif (candidate === Marker)\n\t\t\tbreak;\n\t\tif (item.localName !== candidate.localName || item.namespaceURI !== candidate.namespaceURI)\n\t\t\tcontinue;\n\t\tif (candidate.attributes.length != newItemAttributeCount)\n\t\t\tcontinue;\n\t\tcandidates.push(candidate);\n\t}\n\tif (candidates.length < kNoahsArkCapacity)\n\t\treturn;\n\n\tvar remainingCandidates = [];\n\tvar attributes = item.attributes;\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\n\t\tfor (var j = 0; j < candidates.length; j++) {\n\t\t\tvar candidate = candidates[j];\n\t\t\tvar candidateAttribute = getAttribute(candidate, attribute.nodeName);\n\t\t\tif (candidateAttribute && candidateAttribute.nodeValue === attribute.nodeValue)\n\t\t\t\tremainingCandidates.push(candidate);\n\t\t}\n\t\tif (remainingCandidates.length < kNoahsArkCapacity)\n\t\t\treturn;\n\t\tcandidates = remainingCandidates;\n\t\tremainingCandidates = [];\n\t}\n\tfor (var i = kNoahsArkCapacity - 1; i < candidates.length; i++)\n\t\tthis.removeElementFromActiveFormattingElements(candidates[i]);\n};\nTreeBuilder.prototype.appendElementToActiveFormattingElements = function(item) {\n\tthis.ensureNoahsArkCondition(item);\n\tthis.activeFormattingElements.push(item);\n};\nTreeBuilder.prototype.removeElementFromActiveFormattingElements = function(item) {\n\tvar index = this.activeFormattingElements.indexOf(item);\n\tif (index >= 0)\n\t\tthis.activeFormattingElements.splice(index, 1);\n};\n\nTreeBuilder.prototype.elementInActiveFormattingElements = function(name) {\n\tvar els = this.activeFormattingElements;\n\tfor (var i = els.length - 1; i >= 0; i--) {\n\t\tif (els[i] == Marker) break;\n\t\tif (els[i].localName == name) return els[i];\n\t}\n\treturn false;\n};\n\nTreeBuilder.prototype.clearActiveFormattingElements = function() {\n    while (!(this.activeFormattingElements.length === 0 || this.activeFormattingElements.pop() == Marker));\n};\n\nTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\n\tthrow new Error(\"Not implemented\");\n};\nTreeBuilder.prototype.setFragmentContext = function(context) {\n\tthis.context = context;\n};\nTreeBuilder.prototype.parseError = function(code, args) {\n\tif (!this.errorHandler)\n\t\treturn;\n\tvar message = formatMessage(messages[code], args);\n\tthis.errorHandler.error(message, this.tokenizer._inputStream.location(), code);\n};\nTreeBuilder.prototype.resetInsertionMode = function() {\n\tvar last = false;\n\tvar node = null;\n\tfor (var i = this.openElements.length - 1; i >= 0; i--) {\n\t\tnode = this.openElements.item(i);\n\t\tif (i === 0) {\n\t\t\tassert.ok(this.context);\n\t\t\tlast = true;\n\t\t\tnode = new StackItem(\"http://www.w3.org/1999/xhtml\", this.context, [], null);\n\t\t}\n\n\t\tif (node.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n\t\t\tif (node.localName === 'select')\n\t\t\t\treturn this.setInsertionMode('inSelect');\n\t\t\tif (node.localName === 'td' || node.localName === 'th')\n\t\t\t\treturn this.setInsertionMode('inCell');\n\t\t\tif (node.localName === 'tr')\n\t\t\t\treturn this.setInsertionMode('inRow');\n\t\t\tif (node.localName === 'tbody' || node.localName === 'thead' || node.localName === 'tfoot')\n\t\t\t\treturn this.setInsertionMode('inTableBody');\n\t\t\tif (node.localName === 'caption')\n\t\t\t\treturn this.setInsertionMode('inCaption');\n\t\t\tif (node.localName === 'colgroup')\n\t\t\t\treturn this.setInsertionMode('inColumnGroup');\n\t\t\tif (node.localName === 'table')\n\t\t\t\treturn this.setInsertionMode('inTable');\n\t\t\tif (node.localName === 'head' && !last)\n\t\t\t\treturn this.setInsertionMode('inHead');\n\t\t\tif (node.localName === 'body')\n\t\t\t\treturn this.setInsertionMode('inBody');\n\t\t\tif (node.localName === 'frameset')\n\t\t\t\treturn this.setInsertionMode('inFrameset');\n\t\t\tif (node.localName === 'html')\n\t\t\t\tif (!this.openElements.headElement)\n\t\t\t\t\treturn this.setInsertionMode('beforeHead');\n\t\t\t\telse\n\t\t\t\t\treturn this.setInsertionMode('afterHead');\n\t\t}\n\n\t\tif (last)\n\t\t\treturn this.setInsertionMode('inBody');\n\t}\n};\n\nTreeBuilder.prototype.processGenericRCDATAStartTag = function(name, attributes) {\n\tthis.insertElement(name, attributes);\n\tthis.tokenizer.setState(Tokenizer.RCDATA);\n\tthis.originalInsertionMode = this.insertionModeName;\n\tthis.setInsertionMode('text');\n};\n\nTreeBuilder.prototype.processGenericRawTextStartTag = function(name, attributes) {\n\tthis.insertElement(name, attributes);\n\tthis.tokenizer.setState(Tokenizer.RAWTEXT);\n\tthis.originalInsertionMode = this.insertionModeName;\n\tthis.setInsertionMode('text');\n};\n\nTreeBuilder.prototype.adjustMathMLAttributes = function(attributes) {\n\tattributes.forEach(function(a) {\n\t\ta.namespaceURI = \"http://www.w3.org/1998/Math/MathML\";\n\t\tif (constants.MATHMLAttributeMap[a.nodeName])\n\t\t\ta.nodeName = constants.MATHMLAttributeMap[a.nodeName];\n\t});\n\treturn attributes;\n};\n\nTreeBuilder.prototype.adjustSVGTagNameCase = function(name) {\n\treturn constants.SVGTagMap[name] || name;\n};\n\nTreeBuilder.prototype.adjustSVGAttributes = function(attributes) {\n\tattributes.forEach(function(a) {\n\t\ta.namespaceURI = \"http://www.w3.org/2000/svg\";\n\t\tif (constants.SVGAttributeMap[a.nodeName])\n\t\t\ta.nodeName = constants.SVGAttributeMap[a.nodeName];\n\t});\n\treturn attributes;\n};\n\nTreeBuilder.prototype.adjustForeignAttributes = function(attributes) {\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\t\tvar adjusted = constants.ForeignAttributeMap[attribute.nodeName];\n\t\tif (adjusted) {\n\t\t\tattribute.nodeName = adjusted.localName;\n\t\t\tattribute.prefix = adjusted.prefix;\n\t\t\tattribute.namespaceURI = adjusted.namespaceURI;\n\t\t}\n\t}\n\treturn attributes;\n};\n\nfunction formatMessage(format, args) {\n\treturn format.replace(new RegExp('{[0-9a-z-]+}', 'gi'), function(match) {\n\t\treturn args[match.slice(1, -1)] || match;\n\t});\n}\n\nexports.TreeBuilder = TreeBuilder;\n\n},\n{\"./ElementStack\":1,\"./StackItem\":4,\"./Tokenizer\":5,\"./constants\":7,\"./messages.json\":8,\"assert\":13,\"events\":16}],\n7:[function(_dereq_,module,exports){\nexports.SVGTagMap = {\n\t\"altglyph\": \"altGlyph\",\n\t\"altglyphdef\": \"altGlyphDef\",\n\t\"altglyphitem\": \"altGlyphItem\",\n\t\"animatecolor\": \"animateColor\",\n\t\"animatemotion\": \"animateMotion\",\n\t\"animatetransform\": \"animateTransform\",\n\t\"clippath\": \"clipPath\",\n\t\"feblend\": \"feBlend\",\n\t\"fecolormatrix\": \"feColorMatrix\",\n\t\"fecomponenttransfer\": \"feComponentTransfer\",\n\t\"fecomposite\": \"feComposite\",\n\t\"feconvolvematrix\": \"feConvolveMatrix\",\n\t\"fediffuselighting\": \"feDiffuseLighting\",\n\t\"fedisplacementmap\": \"feDisplacementMap\",\n\t\"fedistantlight\": \"feDistantLight\",\n\t\"feflood\": \"feFlood\",\n\t\"fefunca\": \"feFuncA\",\n\t\"fefuncb\": \"feFuncB\",\n\t\"fefuncg\": \"feFuncG\",\n\t\"fefuncr\": \"feFuncR\",\n\t\"fegaussianblur\": \"feGaussianBlur\",\n\t\"feimage\": \"feImage\",\n\t\"femerge\": \"feMerge\",\n\t\"femergenode\": \"feMergeNode\",\n\t\"femorphology\": \"feMorphology\",\n\t\"feoffset\": \"feOffset\",\n\t\"fepointlight\": \"fePointLight\",\n\t\"fespecularlighting\": \"feSpecularLighting\",\n\t\"fespotlight\": \"feSpotLight\",\n\t\"fetile\": \"feTile\",\n\t\"feturbulence\": \"feTurbulence\",\n\t\"foreignobject\": \"foreignObject\",\n\t\"glyphref\": \"glyphRef\",\n\t\"lineargradient\": \"linearGradient\",\n\t\"radialgradient\": \"radialGradient\",\n\t\"textpath\": \"textPath\"\n};\n\nexports.MATHMLAttributeMap = {\n\tdefinitionurl: 'definitionURL'\n};\n\nexports.SVGAttributeMap = {\n\tattributename:\t'attributeName',\n\tattributetype:\t'attributeType',\n\tbasefrequency:\t'baseFrequency',\n\tbaseprofile:\t'baseProfile',\n\tcalcmode:\t'calcMode',\n\tclippathunits:\t'clipPathUnits',\n\tcontentscripttype:\t'contentScriptType',\n\tcontentstyletype:\t'contentStyleType',\n\tdiffuseconstant:\t'diffuseConstant',\n\tedgemode:\t'edgeMode',\n\texternalresourcesrequired:\t'externalResourcesRequired',\n\tfilterres:\t'filterRes',\n\tfilterunits:\t'filterUnits',\n\tglyphref:\t'glyphRef',\n\tgradienttransform:\t'gradientTransform',\n\tgradientunits:\t'gradientUnits',\n\tkernelmatrix:\t'kernelMatrix',\n\tkernelunitlength:\t'kernelUnitLength',\n\tkeypoints:\t'keyPoints',\n\tkeysplines:\t'keySplines',\n\tkeytimes:\t'keyTimes',\n\tlengthadjust:\t'lengthAdjust',\n\tlimitingconeangle:\t'limitingConeAngle',\n\tmarkerheight:\t'markerHeight',\n\tmarkerunits:\t'markerUnits',\n\tmarkerwidth:\t'markerWidth',\n\tmaskcontentunits:\t'maskContentUnits',\n\tmaskunits:\t'maskUnits',\n\tnumoctaves:\t'numOctaves',\n\tpathlength:\t'pathLength',\n\tpatterncontentunits:\t'patternContentUnits',\n\tpatterntransform:\t'patternTransform',\n\tpatternunits:\t'patternUnits',\n\tpointsatx:\t'pointsAtX',\n\tpointsaty:\t'pointsAtY',\n\tpointsatz:\t'pointsAtZ',\n\tpreservealpha:\t'preserveAlpha',\n\tpreserveaspectratio:\t'preserveAspectRatio',\n\tprimitiveunits:\t'primitiveUnits',\n\trefx:\t'refX',\n\trefy:\t'refY',\n\trepeatcount:\t'repeatCount',\n\trepeatdur:\t'repeatDur',\n\trequiredextensions:\t'requiredExtensions',\n\trequiredfeatures:\t'requiredFeatures',\n\tspecularconstant:\t'specularConstant',\n\tspecularexponent:\t'specularExponent',\n\tspreadmethod:\t'spreadMethod',\n\tstartoffset:\t'startOffset',\n\tstddeviation:\t'stdDeviation',\n\tstitchtiles:\t'stitchTiles',\n\tsurfacescale:\t'surfaceScale',\n\tsystemlanguage:\t'systemLanguage',\n\ttablevalues:\t'tableValues',\n\ttargetx:\t'targetX',\n\ttargety:\t'targetY',\n\ttextlength:\t'textLength',\n\tviewbox:\t'viewBox',\n\tviewtarget:\t'viewTarget',\n\txchannelselector:\t'xChannelSelector',\n\tychannelselector:\t'yChannelSelector',\n\tzoomandpan:\t'zoomAndPan'\n};\n\nexports.ForeignAttributeMap = {\n\t\"xlink:actuate\": {prefix: \"xlink\", localName: \"actuate\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:arcrole\": {prefix: \"xlink\", localName: \"arcrole\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:href\": {prefix: \"xlink\", localName: \"href\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:role\": {prefix: \"xlink\", localName: \"role\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:show\": {prefix: \"xlink\", localName: \"show\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:title\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xlink:type\": {prefix: \"xlink\", localName: \"title\", namespaceURI: \"http://www.w3.org/1999/xlink\"},\n\t\"xml:base\": {prefix: \"xml\", localName: \"base\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:lang\": {prefix: \"xml\", localName: \"lang\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xml:space\": {prefix: \"xml\", localName: \"space\", namespaceURI: \"http://www.w3.org/XML/1998/namespace\"},\n\t\"xmlns\": {prefix: null, localName: \"xmlns\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n\t\"xmlns:xlink\": {prefix: \"xmlns\", localName: \"xlink\", namespaceURI: \"http://www.w3.org/2000/xmlns/\"},\n};\n},\n{}],\n8:[function(_dereq_,module,exports){\nmodule.exports={\n\t\"null-character\":\n\t\t\"Null character in input stream, replaced with U+FFFD.\",\n\t\"invalid-codepoint\":\n\t\t\"Invalid codepoint in stream\",\n\t\"incorrectly-placed-solidus\":\n\t\t\"Solidus (/) incorrectly placed in tag.\",\n\t\"incorrect-cr-newline-entity\":\n\t\t\"Incorrect CR newline entity, replaced with LF.\",\n\t\"illegal-windows-1252-entity\":\n\t\t\"Entity used with illegal number (windows-1252 reference).\",\n\t\"cant-convert-numeric-entity\":\n\t\t\"Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).\",\n\t\"invalid-numeric-entity-replaced\":\n\t\t\"Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.\",\n\t\"numeric-entity-without-semicolon\":\n\t\t\"Numeric entity didn't end with ';'.\",\n\t\"expected-numeric-entity-but-got-eof\":\n\t\t\"Numeric entity expected. Got end of file instead.\",\n\t\"expected-numeric-entity\":\n\t\t\"Numeric entity expected but none found.\",\n\t\"named-entity-without-semicolon\":\n\t\t\"Named entity didn't end with ';'.\",\n\t\"expected-named-entity\":\n\t\t\"Named entity expected. Got none.\",\n\t\"attributes-in-end-tag\":\n\t\t\"End tag contains unexpected attributes.\",\n\t\"self-closing-flag-on-end-tag\":\n\t\t\"End tag contains unexpected self-closing flag.\",\n\t\"bare-less-than-sign-at-eof\":\n\t\t\"End of file after <.\",\n\t\"expected-tag-name-but-got-right-bracket\":\n\t\t\"Expected tag name. Got '>' instead.\",\n\t\"expected-tag-name-but-got-question-mark\":\n\t\t\"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)\",\n\t\"expected-tag-name\":\n\t\t\"Expected tag name. Got something else instead.\",\n\t\"expected-closing-tag-but-got-right-bracket\":\n\t\t\"Expected closing tag. Got '>' instead. Ignoring '</>'.\",\n\t\"expected-closing-tag-but-got-eof\":\n\t\t\"Expected closing tag. Unexpected end of file.\",\n\t\"expected-closing-tag-but-got-char\":\n\t\t\"Expected closing tag. Unexpected character '{data}' found.\",\n\t\"eof-in-tag-name\":\n\t\t\"Unexpected end of file in the tag name.\",\n\t\"expected-attribute-name-but-got-eof\":\n\t\t\"Unexpected end of file. Expected attribute name instead.\",\n\t\"eof-in-attribute-name\":\n\t\t\"Unexpected end of file in attribute name.\",\n\t\"invalid-character-in-attribute-name\":\n\t\t\"Invalid character in attribute name.\",\n\t\"duplicate-attribute\":\n\t\t\"Dropped duplicate attribute '{name}' on tag.\",\n\t\"expected-end-of-tag-but-got-eof\":\n\t\t\"Unexpected end of file. Expected = or end of tag.\",\n\t\"expected-attribute-value-but-got-eof\":\n\t\t\"Unexpected end of file. Expected attribute value.\",\n\t\"expected-attribute-value-but-got-right-bracket\":\n\t\t\"Expected attribute value. Got '>' instead.\",\n\t\"unexpected-character-in-unquoted-attribute-value\":\n\t\t\"Unexpected character in unquoted attribute\",\n\t\"invalid-character-after-attribute-name\":\n\t\t\"Unexpected character after attribute name.\",\n\t\"unexpected-character-after-attribute-value\":\n\t\t\"Unexpected character after attribute value.\",\n\t\"eof-in-attribute-value-double-quote\":\n\t\t\"Unexpected end of file in attribute value (\\\").\",\n\t\"eof-in-attribute-value-single-quote\":\n\t\t\"Unexpected end of file in attribute value (').\",\n\t\"eof-in-attribute-value-no-quotes\":\n\t\t\"Unexpected end of file in attribute value.\",\n\t\"eof-after-attribute-value\":\n\t\t\"Unexpected end of file after attribute value.\",\n\t\"unexpected-eof-after-solidus-in-tag\":\n\t\t\"Unexpected end of file in tag. Expected >.\",\n\t\"unexpected-character-after-solidus-in-tag\":\n\t\t\"Unexpected character after / in tag. Expected >.\",\n\t\"expected-dashes-or-doctype\":\n\t\t\"Expected '--' or 'DOCTYPE'. Not found.\",\n\t\"unexpected-bang-after-double-dash-in-comment\":\n\t\t\"Unexpected ! after -- in comment.\",\n\t\"incorrect-comment\":\n\t\t\"Incorrect comment.\",\n\t\"eof-in-comment\":\n\t\t\"Unexpected end of file in comment.\",\n\t\"eof-in-comment-end-dash\":\n\t\t\"Unexpected end of file in comment (-).\",\n\t\"unexpected-dash-after-double-dash-in-comment\":\n\t\t\"Unexpected '-' after '--' found in comment.\",\n\t\"eof-in-comment-double-dash\":\n\t\t\"Unexpected end of file in comment (--).\",\n\t\"eof-in-comment-end-bang-state\":\n\t\t\"Unexpected end of file in comment.\",\n\t\"unexpected-char-in-comment\":\n\t\t\"Unexpected character in comment found.\",\n\t\"need-space-after-doctype\":\n\t\t\"No space after literal string 'DOCTYPE'.\",\n\t\"expected-doctype-name-but-got-right-bracket\":\n\t\t\"Unexpected > character. Expected DOCTYPE name.\",\n\t\"expected-doctype-name-but-got-eof\":\n\t\t\"Unexpected end of file. Expected DOCTYPE name.\",\n\t\"eof-in-doctype-name\":\n\t\t\"Unexpected end of file in DOCTYPE name.\",\n\t\"eof-in-doctype\":\n\t\t\"Unexpected end of file in DOCTYPE.\",\n\t\"expected-space-or-right-bracket-in-doctype\":\n\t\t\"Expected space or '>'. Got '{data}'.\",\n\t\"unexpected-end-of-doctype\":\n\t\t\"Unexpected end of DOCTYPE.\",\n\t\"unexpected-char-in-doctype\":\n\t\t\"Unexpected character in DOCTYPE.\",\n\t\"eof-in-bogus-doctype\":\n\t\t\"Unexpected end of file in bogus doctype.\",\n\t\"eof-in-innerhtml\":\n\t\t\"Unexpected EOF in inner html mode.\",\n\t\"unexpected-doctype\":\n\t\t\"Unexpected DOCTYPE. Ignored.\",\n\t\"non-html-root\":\n\t\t\"html needs to be the first start tag.\",\n\t\"expected-doctype-but-got-eof\":\n\t\t\"Unexpected End of file. Expected DOCTYPE.\",\n\t\"unknown-doctype\":\n\t\t\"Erroneous DOCTYPE. Expected <!DOCTYPE html>.\",\n\t\"quirky-doctype\":\n\t\t\"Quirky doctype. Expected <!DOCTYPE html>.\",\n\t\"almost-standards-doctype\":\n\t\t\"Almost standards mode doctype. Expected <!DOCTYPE html>.\",\n\t\"obsolete-doctype\":\n\t\t\"Obsolete doctype. Expected <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-chars\":\n\t\t\"Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-start-tag\":\n\t\t\"Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"expected-doctype-but-got-end-tag\":\n\t\t\"End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\n\t\"end-tag-after-implied-root\":\n\t\t\"Unexpected end tag ({name}) after the (implied) root element.\",\n\t\"expected-named-closing-tag-but-got-eof\":\n\t\t\"Unexpected end of file. Expected end tag ({name}).\",\n\t\"two-heads-are-not-better-than-one\":\n\t\t\"Unexpected start tag head in existing head. Ignored.\",\n\t\"unexpected-end-tag\":\n\t\t\"Unexpected end tag ({name}). Ignored.\",\n\t\"unexpected-implied-end-tag\":\n\t\t\"End tag {name} implied, but there were open elements.\",\n\t\"unexpected-start-tag-out-of-my-head\":\n\t\t\"Unexpected start tag ({name}) that can be in head. Moved.\",\n\t\"unexpected-start-tag\":\n\t\t\"Unexpected start tag ({name}).\",\n\t\"missing-end-tag\":\n\t\t\"Missing end tag ({name}).\",\n\t\"missing-end-tags\":\n\t\t\"Missing end tags ({name}).\",\n\t\"unexpected-start-tag-implies-end-tag\":\n\t\t\"Unexpected start tag ({startName}) implies end tag ({endName}).\",\n\t\"unexpected-start-tag-treated-as\":\n\t\t\"Unexpected start tag ({originalName}). Treated as {newName}.\",\n\t\"deprecated-tag\":\n\t\t\"Unexpected start tag {name}. Don't use it!\",\n\t\"unexpected-start-tag-ignored\":\n\t\t\"Unexpected start tag {name}. Ignored.\",\n\t\"expected-one-end-tag-but-got-another\":\n\t\t\"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).\",\n\t\"end-tag-too-early\":\n\t\t\"End tag ({name}) seen too early. Expected other end tag.\",\n\t\"end-tag-too-early-named\":\n\t\t\"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.\",\n\t\"end-tag-too-early-ignored\":\n\t\t\"End tag ({name}) seen too early. Ignored.\",\n\t\"adoption-agency-1.1\":\n\t\t\"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.\",\n\t\"adoption-agency-1.2\":\n\t\t\"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.\",\n\t\"adoption-agency-1.3\":\n\t\t\"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.\",\n\t\"adoption-agency-4.4\":\n\t\t\"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.\",\n\t\"unexpected-end-tag-treated-as\":\n\t\t\"Unexpected end tag ({originalName}). Treated as {newName}.\",\n\t\"no-end-tag\":\n\t\t\"This element ({name}) has no end tag.\",\n\t\"unexpected-implied-end-tag-in-table\":\n\t\t\"Unexpected implied end tag ({name}) in the table phase.\",\n\t\"unexpected-implied-end-tag-in-table-body\":\n\t\t\"Unexpected implied end tag ({name}) in the table body phase.\",\n\t\"unexpected-char-implies-table-voodoo\":\n\t\t\"Unexpected non-space characters in table context caused voodoo mode.\",\n\t\"unexpected-hidden-input-in-table\":\n\t\t\"Unexpected input with type hidden in table context.\",\n\t\"unexpected-form-in-table\":\n\t\t\"Unexpected form in table context.\",\n\t\"unexpected-start-tag-implies-table-voodoo\":\n\t\t\"Unexpected start tag ({name}) in table context caused voodoo mode.\",\n\t\"unexpected-end-tag-implies-table-voodoo\":\n\t\t\"Unexpected end tag ({name}) in table context caused voodoo mode.\",\n\t\"unexpected-cell-in-table-body\":\n\t\t\"Unexpected table cell start tag ({name}) in the table body phase.\",\n\t\"unexpected-cell-end-tag\":\n\t\t\"Got table cell end tag ({name}) while required end tags are missing.\",\n\t\"unexpected-end-tag-in-table-body\":\n\t\t\"Unexpected end tag ({name}) in the table body phase. Ignored.\",\n\t\"unexpected-implied-end-tag-in-table-row\":\n\t\t\"Unexpected implied end tag ({name}) in the table row phase.\",\n\t\"unexpected-end-tag-in-table-row\":\n\t\t\"Unexpected end tag ({name}) in the table row phase. Ignored.\",\n\t\"unexpected-select-in-select\":\n\t\t\"Unexpected select start tag in the select phase treated as select end tag.\",\n\t\"unexpected-input-in-select\":\n\t\t\"Unexpected input start tag in the select phase.\",\n\t\"unexpected-start-tag-in-select\":\n\t\t\"Unexpected start tag token ({name}) in the select phase. Ignored.\",\n\t\"unexpected-end-tag-in-select\":\n\t\t\"Unexpected end tag ({name}) in the select phase. Ignored.\",\n\t\"unexpected-table-element-start-tag-in-select-in-table\":\n\t\t\"Unexpected table element start tag ({name}) in the select in table phase.\",\n\t\"unexpected-table-element-end-tag-in-select-in-table\":\n\t\t\"Unexpected table element end tag ({name}) in the select in table phase.\",\n\t\"unexpected-char-after-body\":\n\t\t\"Unexpected non-space characters in the after body phase.\",\n\t\"unexpected-start-tag-after-body\":\n\t\t\"Unexpected start tag token ({name}) in the after body phase.\",\n\t\"unexpected-end-tag-after-body\":\n\t\t\"Unexpected end tag token ({name}) in the after body phase.\",\n\t\"unexpected-char-in-frameset\":\n\t\t\"Unepxected characters in the frameset phase. Characters ignored.\",\n\t\"unexpected-start-tag-in-frameset\":\n\t\t\"Unexpected start tag token ({name}) in the frameset phase. Ignored.\",\n\t\"unexpected-frameset-in-frameset-innerhtml\":\n\t\t\"Unexpected end tag token (frameset in the frameset phase (innerHTML).\",\n\t\"unexpected-end-tag-in-frameset\":\n\t\t\"Unexpected end tag token ({name}) in the frameset phase. Ignored.\",\n\t\"unexpected-char-after-frameset\":\n\t\t\"Unexpected non-space characters in the after frameset phase. Ignored.\",\n\t\"unexpected-start-tag-after-frameset\":\n\t\t\"Unexpected start tag ({name}) in the after frameset phase. Ignored.\",\n\t\"unexpected-end-tag-after-frameset\":\n\t\t\"Unexpected end tag ({name}) in the after frameset phase. Ignored.\",\n\t\"expected-eof-but-got-char\":\n\t\t\"Unexpected non-space characters. Expected end of file.\",\n\t\"expected-eof-but-got-start-tag\":\n\t\t\"Unexpected start tag ({name}). Expected end of file.\",\n\t\"expected-eof-but-got-end-tag\":\n\t\t\"Unexpected end tag ({name}). Expected end of file.\",\n\t\"unexpected-end-table-in-caption\":\n\t\t\"Unexpected end table tag in caption. Generates implied end caption.\",\n\t\"end-html-in-innerhtml\": \n\t\t\"Unexpected html end tag in inner html mode.\",\n\t\"eof-in-table\":\n\t\t\"Unexpected end of file. Expected table content.\",\n\t\"eof-in-script\":\n\t\t\"Unexpected end of file. Expected script content.\",\n\t\"non-void-element-with-trailing-solidus\":\n\t\t\"Trailing solidus not allowed on element {name}.\",\n\t\"unexpected-html-element-in-foreign-content\":\n\t\t\"HTML start tag \\\"{name}\\\" in a foreign namespace context.\",\n\t\"unexpected-start-tag-in-table\":\n\t\t\"Unexpected {name}. Expected table content.\"\n}\n},\n{}],\n9:[function(_dereq_,module,exports){\nvar SAXTreeBuilder = _dereq_('./SAXTreeBuilder').SAXTreeBuilder;\nvar Tokenizer = _dereq_('../Tokenizer').Tokenizer;\nvar TreeParser = _dereq_('./TreeParser').TreeParser;\n\nfunction SAXParser() {\n\tthis.contentHandler = null;\n\tthis._errorHandler = null;\n\tthis._treeBuilder = new SAXTreeBuilder();\n\tthis._tokenizer = new Tokenizer(this._treeBuilder);\n\tthis._scriptingEnabled = false;\n}\n\nSAXParser.prototype.parse = function(source) {\n\tthis._tokenizer.tokenize(source);\n\tvar document = this._treeBuilder.document;\n\tif (document) {\n\t\tnew TreeParser(this.contentHandler).parse(document);\n\t}\n};\n\nSAXParser.prototype.parseFragment = function(source, context) {\n\tthis._treeBuilder.setFragmentContext(context);\n\tthis._tokenizer.tokenize(source);\n\tvar fragment = this._treeBuilder.getFragment();\n\tif (fragment) {\n\t\tnew TreeParser(this.contentHandler).parse(fragment);\n\t}\n};\n\nObject.defineProperty(SAXParser.prototype, 'scriptingEnabled', {\n\tget: function() {\n\t\treturn this._scriptingEnabled;\n\t},\n\tset: function(value) {\n\t\tthis._scriptingEnabled = value;\n\t\tthis._treeBuilder.scriptingEnabled = value;\n\t}\n});\n\nObject.defineProperty(SAXParser.prototype, 'errorHandler', {\n\tget: function() {\n\t\treturn this._errorHandler;\n\t},\n\tset: function(value) {\n\t\tthis._errorHandler = value;\n\t\tthis._treeBuilder.errorHandler = value;\n\t}\n});\n\nexports.SAXParser = SAXParser;\n\n},\n{\"../Tokenizer\":5,\"./SAXTreeBuilder\":10,\"./TreeParser\":11}],\n10:[function(_dereq_,module,exports){\nvar util = _dereq_('util');\nvar TreeBuilder = _dereq_('../TreeBuilder').TreeBuilder;\n\nfunction SAXTreeBuilder() {\n\tTreeBuilder.call(this);\n}\n\nutil.inherits(SAXTreeBuilder, TreeBuilder);\n\nSAXTreeBuilder.prototype.start = function(tokenizer) {\n\tthis.document = new Document(this.tokenizer);\n};\n\nSAXTreeBuilder.prototype.end = function() {\n\tthis.document.endLocator = this.tokenizer;\n};\n\nSAXTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) {\n\tvar doctype = new DTD(this.tokenizer, name, publicId, systemId);\n\tdoctype.endLocator = this.tokenizer;\n\tthis.document.appendChild(doctype);\n};\n\nSAXTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) {\n\tvar element = new Element(this.tokenizer, namespaceURI, localName, localName, attributes || []);\n\treturn element;\n};\n\nSAXTreeBuilder.prototype.insertComment = function(data, parent) {\n\tif (!parent)\n\t\tparent = this.currentStackItem();\n\tvar comment = new Comment(this.tokenizer, data);\n\tparent.appendChild(comment);\n};\n\nSAXTreeBuilder.prototype.appendCharacters = function(parent, data) {\n\tvar text = new Characters(this.tokenizer, data);\n\tparent.appendChild(text);\n};\n\nSAXTreeBuilder.prototype.insertText = function(data) {\n\tif (this.redirectAttachToFosterParent && this.openElements.top.isFosterParenting()) {\n\t\tvar tableIndex = this.openElements.findIndex('table');\n\t\tvar tableItem = this.openElements.item(tableIndex);\n\t\tvar table = tableItem.node;\n\t\tif (tableIndex === 0) {\n\t\t\treturn this.appendCharacters(table, data);\n\t\t}\n\t\tvar text = new Characters(this.tokenizer, data);\n\t\tvar parent = table.parentNode;\n\t\tif (parent) {\n\t\t\tparent.insertBetween(text, table.previousSibling, table);\n\t\t\treturn;\n\t\t}\n\t\tvar stackParent = this.openElements.item(tableIndex - 1).node;\n\t\tstackParent.appendChild(text);\n\t\treturn;\n\t}\n\tthis.appendCharacters(this.currentStackItem().node, data);\n};\n\nSAXTreeBuilder.prototype.attachNode = function(node, parent) {\n\tparent.appendChild(node);\n};\n\nSAXTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) {\n\tvar parent = table.parentNode;\n\tif (parent)\n\t\tparent.insertBetween(child, table.previousSibling, table);\n\telse\n\t\tstackParent.appendChild(child);\n};\n\nSAXTreeBuilder.prototype.detachFromParent = function(element) {\n\telement.detach();\n};\n\nSAXTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) {\n\tnewParent.appendChildren(oldParent.firstChild);\n};\n\nSAXTreeBuilder.prototype.getFragment = function() {\n\tvar fragment = new DocumentFragment();\n\tthis.reparentChildren(this.openElements.rootNode, fragment);\n\treturn fragment;\n};\n\nfunction getAttribute(node, name) {\n\tfor (var i = 0; i < node.attributes.length; i++) {\n\t\tvar attribute = node.attributes[i];\n\t\tif (attribute.nodeName === name)\n\t\t\treturn attribute.nodeValue;\n\t}\n}\n\nSAXTreeBuilder.prototype.addAttributesToElement = function(element, attributes) {\n\tfor (var i = 0; i < attributes.length; i++) {\n\t\tvar attribute = attributes[i];\n\t\tif (!getAttribute(element, attribute.nodeName))\n\t\t\telement.attributes.push(attribute);\n\t}\n};\n\nvar NodeType = {\n\tCDATA: 1,\n\tCHARACTERS: 2,\n\tCOMMENT: 3,\n\tDOCUMENT: 4,\n\tDOCUMENT_FRAGMENT: 5,\n\tDTD: 6,\n\tELEMENT: 7,\n\tENTITY: 8,\n\tIGNORABLE_WHITESPACE: 9,\n\tPROCESSING_INSTRUCTION: 10,\n\tSKIPPED_ENTITY: 11\n};\nfunction Node(locator) {\n\tif (!locator) {\n\t\tthis.columnNumber = -1;\n\t\tthis.lineNumber = -1;\n\t} else {\n\t\tthis.columnNumber = locator.columnNumber;\n\t\tthis.lineNumber = locator.lineNumber;\n\t}\n\tthis.parentNode = null;\n\tthis.nextSibling = null;\n\tthis.firstChild = null;\n}\nNode.prototype.visit = function(treeParser) {\n\tthrow new Error(\"Not Implemented\");\n};\nNode.prototype.revisit = function(treeParser) {\n\treturn;\n};\nNode.prototype.detach = function() {\n\tif (this.parentNode !== null) {\n\t\tthis.parentNode.removeChild(this);\n\t\tthis.parentNode = null;\n\t}\n};\n\nObject.defineProperty(Node.prototype, 'previousSibling', {\n\tget: function() {\n\t\tvar prev = null;\n\t\tvar next = this.parentNode.firstChild;\n\t\tfor(;;) {\n\t\t\tif (this == next) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t}\n});\n\n\nfunction ParentNode(locator) {\n\tNode.call(this, locator);\n\tthis.lastChild = null;\n\tthis._endLocator = null;\n}\n\nParentNode.prototype = Object.create(Node.prototype);\nParentNode.prototype.insertBefore = function(child, sibling) {\n\tif (!sibling) {\n\t\treturn this.appendChild(child);\n\t}\n\tchild.detach();\n\tchild.parentNode = this;\n\tif (this.firstChild == sibling) {\n\t\tchild.nextSibling = sibling;\n\t\tthis.firstChild = child;\n\t} else {\n\t\tvar prev = this.firstChild;\n\t\tvar next = this.firstChild.nextSibling;\n\t\twhile (next != sibling) {\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t\tprev.nextSibling = child;\n\t\tchild.nextSibling = next;\n\t}\n\treturn child;\n};\n\nParentNode.prototype.insertBetween = function(child, prev, next) {\n\tif (!next) {\n\t\treturn this.appendChild(child);\n\t}\n\tchild.detach();\n\tchild.parentNode = this;\n\tchild.nextSibling = next;\n\tif (!prev) {\n\t\tfirstChild = child;\n\t} else {\n\t\tprev.nextSibling = child;\n\t}\n\treturn child;\n};\nParentNode.prototype.appendChild = function(child) {\n\tchild.detach();\n\tchild.parentNode = this;\n\tif (!this.firstChild) {\n\t\tthis.firstChild = child;\n\t} else {\n\t\tthis.lastChild.nextSibling = child;\n\t}\n\tthis.lastChild = child;\n\treturn child;\n};\nParentNode.prototype.appendChildren = function(parent) {\n\tvar child = parent.firstChild;\n\tif (!child) {\n\t\treturn;\n\t}\n\tvar another = parent;\n\tif (!this.firstChild) {\n\t\tthis.firstChild = child;\n\t} else {\n\t\tthis.lastChild.nextSibling = child;\n\t}\n\tthis.lastChild = another.lastChild;\n\tdo {\n\t\tchild.parentNode = this;\n\t} while ((child = child.nextSibling));\n\tanother.firstChild = null;\n\tanother.lastChild = null;\n};\nParentNode.prototype.removeChild = function(node) {\n\tif (this.firstChild == node) {\n\t\tthis.firstChild = node.nextSibling;\n\t\tif (this.lastChild == node) {\n\t\t\tthis.lastChild = null;\n\t\t}\n\t} else {\n\t\tvar prev = this.firstChild;\n\t\tvar next = this.firstChild.nextSibling;\n\t\twhile (next != node) {\n\t\t\tprev = next;\n\t\t\tnext = next.nextSibling;\n\t\t}\n\t\tprev.nextSibling = node.nextSibling;\n\t\tif (this.lastChild == node) {\n\t\t\tthis.lastChild = prev;\n\t\t}\n\t}\n\tnode.parentNode = null;\n\treturn node;\n};\n\nObject.defineProperty(ParentNode.prototype, 'endLocator', {\n\tget: function() {\n\t\treturn this._endLocator;\n\t},\n\tset: function(endLocator) {\n\t\tthis._endLocator = {\n\t\t\tlineNumber: endLocator.lineNumber,\n\t\t\tcolumnNumber: endLocator.columnNumber\n\t\t};\n\t}\n});\nfunction Document (locator) {\n\tParentNode.call(this, locator);\n\tthis.nodeType = NodeType.DOCUMENT;\n}\n\nDocument.prototype = Object.create(ParentNode.prototype);\nDocument.prototype.visit = function(treeParser) {\n\ttreeParser.startDocument(this);\n};\nDocument.prototype.revisit = function(treeParser) {\n\ttreeParser.endDocument(this.endLocator);\n};\nfunction DocumentFragment() {\n\tParentNode.call(this, new Locator());\n\tthis.nodeType = NodeType.DOCUMENT_FRAGMENT;\n}\n\nDocumentFragment.prototype = Object.create(ParentNode.prototype);\nDocumentFragment.prototype.visit = function(treeParser) {\n};\nfunction Element(locator, uri, localName, qName, atts, prefixMappings) {\n\tParentNode.call(this, locator);\n\tthis.uri = uri;\n\tthis.localName = localName;\n\tthis.qName = qName;\n\tthis.attributes = atts;\n\tthis.prefixMappings = prefixMappings;\n\tthis.nodeType = NodeType.ELEMENT;\n}\n\nElement.prototype = Object.create(ParentNode.prototype);\nElement.prototype.visit = function(treeParser) {\n\tif (this.prefixMappings) {\n\t\tfor (var key in prefixMappings) {\n\t\t\tvar mapping = prefixMappings[key];\n\t\t\ttreeParser.startPrefixMapping(mapping.getPrefix(),\n\t\t\t\t\tmapping.getUri(), this);\n\t\t}\n\t}\n\ttreeParser.startElement(this.uri, this.localName, this.qName, this.attributes, this);\n};\nElement.prototype.revisit = function(treeParser) {\n\ttreeParser.endElement(this.uri, this.localName, this.qName, this.endLocator);\n\tif (this.prefixMappings) {\n\t\tfor (var key in prefixMappings) {\n\t\t\tvar mapping = prefixMappings[key];\n\t\t\ttreeParser.endPrefixMapping(mapping.getPrefix(), this.endLocator);\n\t\t}\n\t}\n};\nfunction Characters(locator, data){\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.CHARACTERS;\n}\n\nCharacters.prototype = Object.create(Node.prototype);\nCharacters.prototype.visit = function (treeParser) {\n\ttreeParser.characters(this.data, 0, this.data.length, this);\n};\nfunction IgnorableWhitespace(locator, data) {\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.IGNORABLE_WHITESPACE;\n}\n\nIgnorableWhitespace.prototype = Object.create(Node.prototype);\nIgnorableWhitespace.prototype.visit = function(treeParser) {\n\ttreeParser.ignorableWhitespace(this.data, 0, this.data.length, this);\n};\nfunction Comment(locator, data) {\n\tNode.call(this, locator);\n\tthis.data = data;\n\tthis.nodeType = NodeType.COMMENT;\n}\n\nComment.prototype = Object.create(Node.prototype);\nComment.prototype.visit = function(treeParser) {\n\ttreeParser.comment(this.data, 0, this.data.length, this);\n};\nfunction CDATA(locator) {\n\tParentNode.call(this, locator);\n\tthis.nodeType = NodeType.CDATA;\n}\n\nCDATA.prototype = Object.create(ParentNode.prototype);\nCDATA.prototype.visit = function(treeParser) {\n\ttreeParser.startCDATA(this);\n};\nCDATA.prototype.revisit = function(treeParser) {\n\ttreeParser.endCDATA(this.endLocator);\n};\nfunction Entity(name) {\n\tParentNode.call(this);\n\tthis.name = name;\n\tthis.nodeType = NodeType.ENTITY;\n}\n\nEntity.prototype = Object.create(ParentNode.prototype);\nEntity.prototype.visit = function(treeParser) {\n\ttreeParser.startEntity(this.name, this);\n};\nEntity.prototype.revisit = function(treeParser) {\n\ttreeParser.endEntity(this.name);\n};\n\nfunction SkippedEntity(name) {\n\tNode.call(this);\n\tthis.name = name;\n\tthis.nodeType = NodeType.SKIPPED_ENTITY;\n}\n\nSkippedEntity.prototype = Object.create(Node.prototype);\nSkippedEntity.prototype.visit = function(treeParser) {\n\ttreeParser.skippedEntity(this.name, this);\n};\nfunction ProcessingInstruction(target, data) {\n\tNode.call(this);\n\tthis.target = target;\n\tthis.data = data;\n}\n\nProcessingInstruction.prototype = Object.create(Node.prototype);\nProcessingInstruction.prototype.visit = function(treeParser) {\n\ttreeParser.processingInstruction(this.target, this.data, this);\n};\nProcessingInstruction.prototype.getNodeType = function() {\n\treturn NodeType.PROCESSING_INSTRUCTION;\n};\nfunction DTD(name, publicIdentifier, systemIdentifier) {\n\tParentNode.call(this);\n\tthis.name = name;\n\tthis.publicIdentifier = publicIdentifier;\n\tthis.systemIdentifier = systemIdentifier;\n\tthis.nodeType = NodeType.DTD;\n}\n\nDTD.prototype = Object.create(ParentNode.prototype);\nDTD.prototype.visit = function(treeParser) {\n\ttreeParser.startDTD(this.name, this.publicIdentifier, this.systemIdentifier, this);\n};\nDTD.prototype.revisit = function(treeParser) {\n\ttreeParser.endDTD();\n};\n\nexports.SAXTreeBuilder = SAXTreeBuilder;\n\n},\n{\"../TreeBuilder\":6,\"util\":20}],\n11:[function(_dereq_,module,exports){\nfunction TreeParser(contentHandler, lexicalHandler){\n\tthis.contentHandler;\n\tthis.lexicalHandler;\n\tthis.locatorDelegate;\n\n\tif (!contentHandler) {\n\t\tthrow new IllegalArgumentException(\"contentHandler was null.\");\n\t}\n\tthis.contentHandler = contentHandler;\n\tif (!lexicalHandler) {\n\t\tthis.lexicalHandler = new NullLexicalHandler();\n\t} else {\n\t\tthis.lexicalHandler = lexicalHandler;\n\t}\n}\nTreeParser.prototype.parse = function(node) {\n\tthis.contentHandler.documentLocator = this;\n\tvar current = node;\n\tvar next;\n\tfor (;;) {\n\t\tcurrent.visit(this);\n\t\tif (next = current.firstChild) {\n\t\t\tcurrent = next;\n\t\t\tcontinue;\n\t\t}\n\t\tfor (;;) {\n\t\t\tcurrent.revisit(this);\n\t\t\tif (current == node) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (next = current.nextSibling) {\n\t\t\t\tcurrent = next;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent = current.parentNode;\n\t\t}\n\t}\n};\nTreeParser.prototype.characters = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.characters(ch, start, length);\n};\nTreeParser.prototype.endDocument = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endDocument();\n};\nTreeParser.prototype.endElement = function(uri, localName, qName, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endElement(uri, localName, qName);\n};\nTreeParser.prototype.endPrefixMapping = function(prefix, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.endPrefixMapping(prefix);\n};\nTreeParser.prototype.ignorableWhitespace = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.ignorableWhitespace(ch, start, length);\n};\nTreeParser.prototype.processingInstruction = function(target, data, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.processingInstruction(target, data);\n};\nTreeParser.prototype.skippedEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.skippedEntity(name);\n};\nTreeParser.prototype.startDocument = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startDocument();\n};\nTreeParser.prototype.startElement = function(uri, localName, qName, atts, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startElement(uri, localName, qName, atts);\n};\nTreeParser.prototype.startPrefixMapping = function(prefix, uri, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.contentHandler.startPrefixMapping(prefix, uri);\n};\nTreeParser.prototype.comment = function(ch, start, length, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.comment(ch, start, length);\n};\nTreeParser.prototype.endCDATA = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endCDATA();\n};\nTreeParser.prototype.endDTD = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endDTD();\n};\nTreeParser.prototype.endEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.endEntity(name);\n};\nTreeParser.prototype.startCDATA = function(locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startCDATA();\n};\nTreeParser.prototype.startDTD = function(name, publicId, systemId, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startDTD(name, publicId, systemId);\n};\nTreeParser.prototype.startEntity = function(name, locator) {\n\tthis.locatorDelegate = locator;\n\tthis.lexicalHandler.startEntity(name);\n};\n\nObject.defineProperty(TreeParser.prototype, 'columnNumber', {\n\tget: function() {\n\t\tif (!this.locatorDelegate)\n\t\t\treturn -1;\n\t\telse\n\t\t\treturn this.locatorDelegate.columnNumber;\n\t}\n});\n\nObject.defineProperty(TreeParser.prototype, 'lineNumber', {\n\tget: function() {\n\t\tif (!this.locatorDelegate)\n\t\t\treturn -1;\n\t\telse\n\t\t\treturn this.locatorDelegate.lineNumber;\n\t}\n});\nfunction NullLexicalHandler() {\n\n}\n\nNullLexicalHandler.prototype.comment = function() {};\nNullLexicalHandler.prototype.endCDATA = function() {};\nNullLexicalHandler.prototype.endDTD = function() {};\nNullLexicalHandler.prototype.endEntity = function() {};\nNullLexicalHandler.prototype.startCDATA = function() {};\nNullLexicalHandler.prototype.startDTD = function() {};\nNullLexicalHandler.prototype.startEntity = function() {};\n\nexports.TreeParser = TreeParser;\n\n},\n{}],\n12:[function(_dereq_,module,exports){\nmodule.exports = {\n\t\"Aacute;\": \"\\u00C1\",\n\t\"Aacute\": \"\\u00C1\",\n\t\"aacute;\": \"\\u00E1\",\n\t\"aacute\": \"\\u00E1\",\n\t\"Abreve;\": \"\\u0102\",\n\t\"abreve;\": \"\\u0103\",\n\t\"ac;\": \"\\u223E\",\n\t\"acd;\": \"\\u223F\",\n\t\"acE;\": \"\\u223E\\u0333\",\n\t\"Acirc;\": \"\\u00C2\",\n\t\"Acirc\": \"\\u00C2\",\n\t\"acirc;\": \"\\u00E2\",\n\t\"acirc\": \"\\u00E2\",\n\t\"acute;\": \"\\u00B4\",\n\t\"acute\": \"\\u00B4\",\n\t\"Acy;\": \"\\u0410\",\n\t\"acy;\": \"\\u0430\",\n\t\"AElig;\": \"\\u00C6\",\n\t\"AElig\": \"\\u00C6\",\n\t\"aelig;\": \"\\u00E6\",\n\t\"aelig\": \"\\u00E6\",\n\t\"af;\": \"\\u2061\",\n\t\"Afr;\": \"\\uD835\\uDD04\",\n\t\"afr;\": \"\\uD835\\uDD1E\",\n\t\"Agrave;\": \"\\u00C0\",\n\t\"Agrave\": \"\\u00C0\",\n\t\"agrave;\": \"\\u00E0\",\n\t\"agrave\": \"\\u00E0\",\n\t\"alefsym;\": \"\\u2135\",\n\t\"aleph;\": \"\\u2135\",\n\t\"Alpha;\": \"\\u0391\",\n\t\"alpha;\": \"\\u03B1\",\n\t\"Amacr;\": \"\\u0100\",\n\t\"amacr;\": \"\\u0101\",\n\t\"amalg;\": \"\\u2A3F\",\n\t\"amp;\": \"\\u0026\",\n\t\"amp\": \"\\u0026\",\n\t\"AMP;\": \"\\u0026\",\n\t\"AMP\": \"\\u0026\",\n\t\"andand;\": \"\\u2A55\",\n\t\"And;\": \"\\u2A53\",\n\t\"and;\": \"\\u2227\",\n\t\"andd;\": \"\\u2A5C\",\n\t\"andslope;\": \"\\u2A58\",\n\t\"andv;\": \"\\u2A5A\",\n\t\"ang;\": \"\\u2220\",\n\t\"ange;\": \"\\u29A4\",\n\t\"angle;\": \"\\u2220\",\n\t\"angmsdaa;\": \"\\u29A8\",\n\t\"angmsdab;\": \"\\u29A9\",\n\t\"angmsdac;\": \"\\u29AA\",\n\t\"angmsdad;\": \"\\u29AB\",\n\t\"angmsdae;\": \"\\u29AC\",\n\t\"angmsdaf;\": \"\\u29AD\",\n\t\"angmsdag;\": \"\\u29AE\",\n\t\"angmsdah;\": \"\\u29AF\",\n\t\"angmsd;\": \"\\u2221\",\n\t\"angrt;\": \"\\u221F\",\n\t\"angrtvb;\": \"\\u22BE\",\n\t\"angrtvbd;\": \"\\u299D\",\n\t\"angsph;\": \"\\u2222\",\n\t\"angst;\": \"\\u00C5\",\n\t\"angzarr;\": \"\\u237C\",\n\t\"Aogon;\": \"\\u0104\",\n\t\"aogon;\": \"\\u0105\",\n\t\"Aopf;\": \"\\uD835\\uDD38\",\n\t\"aopf;\": \"\\uD835\\uDD52\",\n\t\"apacir;\": \"\\u2A6F\",\n\t\"ap;\": \"\\u2248\",\n\t\"apE;\": \"\\u2A70\",\n\t\"ape;\": \"\\u224A\",\n\t\"apid;\": \"\\u224B\",\n\t\"apos;\": \"\\u0027\",\n\t\"ApplyFunction;\": \"\\u2061\",\n\t\"approx;\": \"\\u2248\",\n\t\"approxeq;\": \"\\u224A\",\n\t\"Aring;\": \"\\u00C5\",\n\t\"Aring\": \"\\u00C5\",\n\t\"aring;\": \"\\u00E5\",\n\t\"aring\": \"\\u00E5\",\n\t\"Ascr;\": \"\\uD835\\uDC9C\",\n\t\"ascr;\": \"\\uD835\\uDCB6\",\n\t\"Assign;\": \"\\u2254\",\n\t\"ast;\": \"\\u002A\",\n\t\"asymp;\": \"\\u2248\",\n\t\"asympeq;\": \"\\u224D\",\n\t\"Atilde;\": \"\\u00C3\",\n\t\"Atilde\": \"\\u00C3\",\n\t\"atilde;\": \"\\u00E3\",\n\t\"atilde\": \"\\u00E3\",\n\t\"Auml;\": \"\\u00C4\",\n\t\"Auml\": \"\\u00C4\",\n\t\"auml;\": \"\\u00E4\",\n\t\"auml\": \"\\u00E4\",\n\t\"awconint;\": \"\\u2233\",\n\t\"awint;\": \"\\u2A11\",\n\t\"backcong;\": \"\\u224C\",\n\t\"backepsilon;\": \"\\u03F6\",\n\t\"backprime;\": \"\\u2035\",\n\t\"backsim;\": \"\\u223D\",\n\t\"backsimeq;\": \"\\u22CD\",\n\t\"Backslash;\": \"\\u2216\",\n\t\"Barv;\": \"\\u2AE7\",\n\t\"barvee;\": \"\\u22BD\",\n\t\"barwed;\": \"\\u2305\",\n\t\"Barwed;\": \"\\u2306\",\n\t\"barwedge;\": \"\\u2305\",\n\t\"bbrk;\": \"\\u23B5\",\n\t\"bbrktbrk;\": \"\\u23B6\",\n\t\"bcong;\": \"\\u224C\",\n\t\"Bcy;\": \"\\u0411\",\n\t\"bcy;\": \"\\u0431\",\n\t\"bdquo;\": \"\\u201E\",\n\t\"becaus;\": \"\\u2235\",\n\t\"because;\": \"\\u2235\",\n\t\"Because;\": \"\\u2235\",\n\t\"bemptyv;\": \"\\u29B0\",\n\t\"bepsi;\": \"\\u03F6\",\n\t\"bernou;\": \"\\u212C\",\n\t\"Bernoullis;\": \"\\u212C\",\n\t\"Beta;\": \"\\u0392\",\n\t\"beta;\": \"\\u03B2\",\n\t\"beth;\": \"\\u2136\",\n\t\"between;\": \"\\u226C\",\n\t\"Bfr;\": \"\\uD835\\uDD05\",\n\t\"bfr;\": \"\\uD835\\uDD1F\",\n\t\"bigcap;\": \"\\u22C2\",\n\t\"bigcirc;\": \"\\u25EF\",\n\t\"bigcup;\": \"\\u22C3\",\n\t\"bigodot;\": \"\\u2A00\",\n\t\"bigoplus;\": \"\\u2A01\",\n\t\"bigotimes;\": \"\\u2A02\",\n\t\"bigsqcup;\": \"\\u2A06\",\n\t\"bigstar;\": \"\\u2605\",\n\t\"bigtriangledown;\": \"\\u25BD\",\n\t\"bigtriangleup;\": \"\\u25B3\",\n\t\"biguplus;\": \"\\u2A04\",\n\t\"bigvee;\": \"\\u22C1\",\n\t\"bigwedge;\": \"\\u22C0\",\n\t\"bkarow;\": \"\\u290D\",\n\t\"blacklozenge;\": \"\\u29EB\",\n\t\"blacksquare;\": \"\\u25AA\",\n\t\"blacktriangle;\": \"\\u25B4\",\n\t\"blacktriangledown;\": \"\\u25BE\",\n\t\"blacktriangleleft;\": \"\\u25C2\",\n\t\"blacktriangleright;\": \"\\u25B8\",\n\t\"blank;\": \"\\u2423\",\n\t\"blk12;\": \"\\u2592\",\n\t\"blk14;\": \"\\u2591\",\n\t\"blk34;\": \"\\u2593\",\n\t\"block;\": \"\\u2588\",\n\t\"bne;\": \"\\u003D\\u20E5\",\n\t\"bnequiv;\": \"\\u2261\\u20E5\",\n\t\"bNot;\": \"\\u2AED\",\n\t\"bnot;\": \"\\u2310\",\n\t\"Bopf;\": \"\\uD835\\uDD39\",\n\t\"bopf;\": \"\\uD835\\uDD53\",\n\t\"bot;\": \"\\u22A5\",\n\t\"bottom;\": \"\\u22A5\",\n\t\"bowtie;\": \"\\u22C8\",\n\t\"boxbox;\": \"\\u29C9\",\n\t\"boxdl;\": \"\\u2510\",\n\t\"boxdL;\": \"\\u2555\",\n\t\"boxDl;\": \"\\u2556\",\n\t\"boxDL;\": \"\\u2557\",\n\t\"boxdr;\": \"\\u250C\",\n\t\"boxdR;\": \"\\u2552\",\n\t\"boxDr;\": \"\\u2553\",\n\t\"boxDR;\": \"\\u2554\",\n\t\"boxh;\": \"\\u2500\",\n\t\"boxH;\": \"\\u2550\",\n\t\"boxhd;\": \"\\u252C\",\n\t\"boxHd;\": \"\\u2564\",\n\t\"boxhD;\": \"\\u2565\",\n\t\"boxHD;\": \"\\u2566\",\n\t\"boxhu;\": \"\\u2534\",\n\t\"boxHu;\": \"\\u2567\",\n\t\"boxhU;\": \"\\u2568\",\n\t\"boxHU;\": \"\\u2569\",\n\t\"boxminus;\": \"\\u229F\",\n\t\"boxplus;\": \"\\u229E\",\n\t\"boxtimes;\": \"\\u22A0\",\n\t\"boxul;\": \"\\u2518\",\n\t\"boxuL;\": \"\\u255B\",\n\t\"boxUl;\": \"\\u255C\",\n\t\"boxUL;\": \"\\u255D\",\n\t\"boxur;\": \"\\u2514\",\n\t\"boxuR;\": \"\\u2558\",\n\t\"boxUr;\": \"\\u2559\",\n\t\"boxUR;\": \"\\u255A\",\n\t\"boxv;\": \"\\u2502\",\n\t\"boxV;\": \"\\u2551\",\n\t\"boxvh;\": \"\\u253C\",\n\t\"boxvH;\": \"\\u256A\",\n\t\"boxVh;\": \"\\u256B\",\n\t\"boxVH;\": \"\\u256C\",\n\t\"boxvl;\": \"\\u2524\",\n\t\"boxvL;\": \"\\u2561\",\n\t\"boxVl;\": \"\\u2562\",\n\t\"boxVL;\": \"\\u2563\",\n\t\"boxvr;\": \"\\u251C\",\n\t\"boxvR;\": \"\\u255E\",\n\t\"boxVr;\": \"\\u255F\",\n\t\"boxVR;\": \"\\u2560\",\n\t\"bprime;\": \"\\u2035\",\n\t\"breve;\": \"\\u02D8\",\n\t\"Breve;\": \"\\u02D8\",\n\t\"brvbar;\": \"\\u00A6\",\n\t\"brvbar\": \"\\u00A6\",\n\t\"bscr;\": \"\\uD835\\uDCB7\",\n\t\"Bscr;\": \"\\u212C\",\n\t\"bsemi;\": \"\\u204F\",\n\t\"bsim;\": \"\\u223D\",\n\t\"bsime;\": \"\\u22CD\",\n\t\"bsolb;\": \"\\u29C5\",\n\t\"bsol;\": \"\\u005C\",\n\t\"bsolhsub;\": \"\\u27C8\",\n\t\"bull;\": \"\\u2022\",\n\t\"bullet;\": \"\\u2022\",\n\t\"bump;\": \"\\u224E\",\n\t\"bumpE;\": \"\\u2AAE\",\n\t\"bumpe;\": \"\\u224F\",\n\t\"Bumpeq;\": \"\\u224E\",\n\t\"bumpeq;\": \"\\u224F\",\n\t\"Cacute;\": \"\\u0106\",\n\t\"cacute;\": \"\\u0107\",\n\t\"capand;\": \"\\u2A44\",\n\t\"capbrcup;\": \"\\u2A49\",\n\t\"capcap;\": \"\\u2A4B\",\n\t\"cap;\": \"\\u2229\",\n\t\"Cap;\": \"\\u22D2\",\n\t\"capcup;\": \"\\u2A47\",\n\t\"capdot;\": \"\\u2A40\",\n\t\"CapitalDifferentialD;\": \"\\u2145\",\n\t\"caps;\": \"\\u2229\\uFE00\",\n\t\"caret;\": \"\\u2041\",\n\t\"caron;\": \"\\u02C7\",\n\t\"Cayleys;\": \"\\u212D\",\n\t\"ccaps;\": \"\\u2A4D\",\n\t\"Ccaron;\": \"\\u010C\",\n\t\"ccaron;\": \"\\u010D\",\n\t\"Ccedil;\": \"\\u00C7\",\n\t\"Ccedil\": \"\\u00C7\",\n\t\"ccedil;\": \"\\u00E7\",\n\t\"ccedil\": \"\\u00E7\",\n\t\"Ccirc;\": \"\\u0108\",\n\t\"ccirc;\": \"\\u0109\",\n\t\"Cconint;\": \"\\u2230\",\n\t\"ccups;\": \"\\u2A4C\",\n\t\"ccupssm;\": \"\\u2A50\",\n\t\"Cdot;\": \"\\u010A\",\n\t\"cdot;\": \"\\u010B\",\n\t\"cedil;\": \"\\u00B8\",\n\t\"cedil\": \"\\u00B8\",\n\t\"Cedilla;\": \"\\u00B8\",\n\t\"cemptyv;\": \"\\u29B2\",\n\t\"cent;\": \"\\u00A2\",\n\t\"cent\": \"\\u00A2\",\n\t\"centerdot;\": \"\\u00B7\",\n\t\"CenterDot;\": \"\\u00B7\",\n\t\"cfr;\": \"\\uD835\\uDD20\",\n\t\"Cfr;\": \"\\u212D\",\n\t\"CHcy;\": \"\\u0427\",\n\t\"chcy;\": \"\\u0447\",\n\t\"check;\": \"\\u2713\",\n\t\"checkmark;\": \"\\u2713\",\n\t\"Chi;\": \"\\u03A7\",\n\t\"chi;\": \"\\u03C7\",\n\t\"circ;\": \"\\u02C6\",\n\t\"circeq;\": \"\\u2257\",\n\t\"circlearrowleft;\": \"\\u21BA\",\n\t\"circlearrowright;\": \"\\u21BB\",\n\t\"circledast;\": \"\\u229B\",\n\t\"circledcirc;\": \"\\u229A\",\n\t\"circleddash;\": \"\\u229D\",\n\t\"CircleDot;\": \"\\u2299\",\n\t\"circledR;\": \"\\u00AE\",\n\t\"circledS;\": \"\\u24C8\",\n\t\"CircleMinus;\": \"\\u2296\",\n\t\"CirclePlus;\": \"\\u2295\",\n\t\"CircleTimes;\": \"\\u2297\",\n\t\"cir;\": \"\\u25CB\",\n\t\"cirE;\": \"\\u29C3\",\n\t\"cire;\": \"\\u2257\",\n\t\"cirfnint;\": \"\\u2A10\",\n\t\"cirmid;\": \"\\u2AEF\",\n\t\"cirscir;\": \"\\u29C2\",\n\t\"ClockwiseContourIntegral;\": \"\\u2232\",\n\t\"CloseCurlyDoubleQuote;\": \"\\u201D\",\n\t\"CloseCurlyQuote;\": \"\\u2019\",\n\t\"clubs;\": \"\\u2663\",\n\t\"clubsuit;\": \"\\u2663\",\n\t\"colon;\": \"\\u003A\",\n\t\"Colon;\": \"\\u2237\",\n\t\"Colone;\": \"\\u2A74\",\n\t\"colone;\": \"\\u2254\",\n\t\"coloneq;\": \"\\u2254\",\n\t\"comma;\": \"\\u002C\",\n\t\"commat;\": \"\\u0040\",\n\t\"comp;\": \"\\u2201\",\n\t\"compfn;\": \"\\u2218\",\n\t\"complement;\": \"\\u2201\",\n\t\"complexes;\": \"\\u2102\",\n\t\"cong;\": \"\\u2245\",\n\t\"congdot;\": \"\\u2A6D\",\n\t\"Congruent;\": \"\\u2261\",\n\t\"conint;\": \"\\u222E\",\n\t\"Conint;\": \"\\u222F\",\n\t\"ContourIntegral;\": \"\\u222E\",\n\t\"copf;\": \"\\uD835\\uDD54\",\n\t\"Copf;\": \"\\u2102\",\n\t\"coprod;\": \"\\u2210\",\n\t\"Coproduct;\": \"\\u2210\",\n\t\"copy;\": \"\\u00A9\",\n\t\"copy\": \"\\u00A9\",\n\t\"COPY;\": \"\\u00A9\",\n\t\"COPY\": \"\\u00A9\",\n\t\"copysr;\": \"\\u2117\",\n\t\"CounterClockwiseContourIntegral;\": \"\\u2233\",\n\t\"crarr;\": \"\\u21B5\",\n\t\"cross;\": \"\\u2717\",\n\t\"Cross;\": \"\\u2A2F\",\n\t\"Cscr;\": \"\\uD835\\uDC9E\",\n\t\"cscr;\": \"\\uD835\\uDCB8\",\n\t\"csub;\": \"\\u2ACF\",\n\t\"csube;\": \"\\u2AD1\",\n\t\"csup;\": \"\\u2AD0\",\n\t\"csupe;\": \"\\u2AD2\",\n\t\"ctdot;\": \"\\u22EF\",\n\t\"cudarrl;\": \"\\u2938\",\n\t\"cudarrr;\": \"\\u2935\",\n\t\"cuepr;\": \"\\u22DE\",\n\t\"cuesc;\": \"\\u22DF\",\n\t\"cularr;\": \"\\u21B6\",\n\t\"cularrp;\": \"\\u293D\",\n\t\"cupbrcap;\": \"\\u2A48\",\n\t\"cupcap;\": \"\\u2A46\",\n\t\"CupCap;\": \"\\u224D\",\n\t\"cup;\": \"\\u222A\",\n\t\"Cup;\": \"\\u22D3\",\n\t\"cupcup;\": \"\\u2A4A\",\n\t\"cupdot;\": \"\\u228D\",\n\t\"cupor;\": \"\\u2A45\",\n\t\"cups;\": \"\\u222A\\uFE00\",\n\t\"curarr;\": \"\\u21B7\",\n\t\"curarrm;\": \"\\u293C\",\n\t\"curlyeqprec;\": \"\\u22DE\",\n\t\"curlyeqsucc;\": \"\\u22DF\",\n\t\"curlyvee;\": \"\\u22CE\",\n\t\"curlywedge;\": \"\\u22CF\",\n\t\"curren;\": \"\\u00A4\",\n\t\"curren\": \"\\u00A4\",\n\t\"curvearrowleft;\": \"\\u21B6\",\n\t\"curvearrowright;\": \"\\u21B7\",\n\t\"cuvee;\": \"\\u22CE\",\n\t\"cuwed;\": \"\\u22CF\",\n\t\"cwconint;\": \"\\u2232\",\n\t\"cwint;\": \"\\u2231\",\n\t\"cylcty;\": \"\\u232D\",\n\t\"dagger;\": \"\\u2020\",\n\t\"Dagger;\": \"\\u2021\",\n\t\"daleth;\": \"\\u2138\",\n\t\"darr;\": \"\\u2193\",\n\t\"Darr;\": \"\\u21A1\",\n\t\"dArr;\": \"\\u21D3\",\n\t\"dash;\": \"\\u2010\",\n\t\"Dashv;\": \"\\u2AE4\",\n\t\"dashv;\": \"\\u22A3\",\n\t\"dbkarow;\": \"\\u290F\",\n\t\"dblac;\": \"\\u02DD\",\n\t\"Dcaron;\": \"\\u010E\",\n\t\"dcaron;\": \"\\u010F\",\n\t\"Dcy;\": \"\\u0414\",\n\t\"dcy;\": \"\\u0434\",\n\t\"ddagger;\": \"\\u2021\",\n\t\"ddarr;\": \"\\u21CA\",\n\t\"DD;\": \"\\u2145\",\n\t\"dd;\": \"\\u2146\",\n\t\"DDotrahd;\": \"\\u2911\",\n\t\"ddotseq;\": \"\\u2A77\",\n\t\"deg;\": \"\\u00B0\",\n\t\"deg\": \"\\u00B0\",\n\t\"Del;\": \"\\u2207\",\n\t\"Delta;\": \"\\u0394\",\n\t\"delta;\": \"\\u03B4\",\n\t\"demptyv;\": \"\\u29B1\",\n\t\"dfisht;\": \"\\u297F\",\n\t\"Dfr;\": \"\\uD835\\uDD07\",\n\t\"dfr;\": \"\\uD835\\uDD21\",\n\t\"dHar;\": \"\\u2965\",\n\t\"dharl;\": \"\\u21C3\",\n\t\"dharr;\": \"\\u21C2\",\n\t\"DiacriticalAcute;\": \"\\u00B4\",\n\t\"DiacriticalDot;\": \"\\u02D9\",\n\t\"DiacriticalDoubleAcute;\": \"\\u02DD\",\n\t\"DiacriticalGrave;\": \"\\u0060\",\n\t\"DiacriticalTilde;\": \"\\u02DC\",\n\t\"diam;\": \"\\u22C4\",\n\t\"diamond;\": \"\\u22C4\",\n\t\"Diamond;\": \"\\u22C4\",\n\t\"diamondsuit;\": \"\\u2666\",\n\t\"diams;\": \"\\u2666\",\n\t\"die;\": \"\\u00A8\",\n\t\"DifferentialD;\": \"\\u2146\",\n\t\"digamma;\": \"\\u03DD\",\n\t\"disin;\": \"\\u22F2\",\n\t\"div;\": \"\\u00F7\",\n\t\"divide;\": \"\\u00F7\",\n\t\"divide\": \"\\u00F7\",\n\t\"divideontimes;\": \"\\u22C7\",\n\t\"divonx;\": \"\\u22C7\",\n\t\"DJcy;\": \"\\u0402\",\n\t\"djcy;\": \"\\u0452\",\n\t\"dlcorn;\": \"\\u231E\",\n\t\"dlcrop;\": \"\\u230D\",\n\t\"dollar;\": \"\\u0024\",\n\t\"Dopf;\": \"\\uD835\\uDD3B\",\n\t\"dopf;\": \"\\uD835\\uDD55\",\n\t\"Dot;\": \"\\u00A8\",\n\t\"dot;\": \"\\u02D9\",\n\t\"DotDot;\": \"\\u20DC\",\n\t\"doteq;\": \"\\u2250\",\n\t\"doteqdot;\": \"\\u2251\",\n\t\"DotEqual;\": \"\\u2250\",\n\t\"dotminus;\": \"\\u2238\",\n\t\"dotplus;\": \"\\u2214\",\n\t\"dotsquare;\": \"\\u22A1\",\n\t\"doublebarwedge;\": \"\\u2306\",\n\t\"DoubleContourIntegral;\": \"\\u222F\",\n\t\"DoubleDot;\": \"\\u00A8\",\n\t\"DoubleDownArrow;\": \"\\u21D3\",\n\t\"DoubleLeftArrow;\": \"\\u21D0\",\n\t\"DoubleLeftRightArrow;\": \"\\u21D4\",\n\t\"DoubleLeftTee;\": \"\\u2AE4\",\n\t\"DoubleLongLeftArrow;\": \"\\u27F8\",\n\t\"DoubleLongLeftRightArrow;\": \"\\u27FA\",\n\t\"DoubleLongRightArrow;\": \"\\u27F9\",\n\t\"DoubleRightArrow;\": \"\\u21D2\",\n\t\"DoubleRightTee;\": \"\\u22A8\",\n\t\"DoubleUpArrow;\": \"\\u21D1\",\n\t\"DoubleUpDownArrow;\": \"\\u21D5\",\n\t\"DoubleVerticalBar;\": \"\\u2225\",\n\t\"DownArrowBar;\": \"\\u2913\",\n\t\"downarrow;\": \"\\u2193\",\n\t\"DownArrow;\": \"\\u2193\",\n\t\"Downarrow;\": \"\\u21D3\",\n\t\"DownArrowUpArrow;\": \"\\u21F5\",\n\t\"DownBreve;\": \"\\u0311\",\n\t\"downdownarrows;\": \"\\u21CA\",\n\t\"downharpoonleft;\": \"\\u21C3\",\n\t\"downharpoonright;\": \"\\u21C2\",\n\t\"DownLeftRightVector;\": \"\\u2950\",\n\t\"DownLeftTeeVector;\": \"\\u295E\",\n\t\"DownLeftVectorBar;\": \"\\u2956\",\n\t\"DownLeftVector;\": \"\\u21BD\",\n\t\"DownRightTeeVector;\": \"\\u295F\",\n\t\"DownRightVectorBar;\": \"\\u2957\",\n\t\"DownRightVector;\": \"\\u21C1\",\n\t\"DownTeeArrow;\": \"\\u21A7\",\n\t\"DownTee;\": \"\\u22A4\",\n\t\"drbkarow;\": \"\\u2910\",\n\t\"drcorn;\": \"\\u231F\",\n\t\"drcrop;\": \"\\u230C\",\n\t\"Dscr;\": \"\\uD835\\uDC9F\",\n\t\"dscr;\": \"\\uD835\\uDCB9\",\n\t\"DScy;\": \"\\u0405\",\n\t\"dscy;\": \"\\u0455\",\n\t\"dsol;\": \"\\u29F6\",\n\t\"Dstrok;\": \"\\u0110\",\n\t\"dstrok;\": \"\\u0111\",\n\t\"dtdot;\": \"\\u22F1\",\n\t\"dtri;\": \"\\u25BF\",\n\t\"dtrif;\": \"\\u25BE\",\n\t\"duarr;\": \"\\u21F5\",\n\t\"duhar;\": \"\\u296F\",\n\t\"dwangle;\": \"\\u29A6\",\n\t\"DZcy;\": \"\\u040F\",\n\t\"dzcy;\": \"\\u045F\",\n\t\"dzigrarr;\": \"\\u27FF\",\n\t\"Eacute;\": \"\\u00C9\",\n\t\"Eacute\": \"\\u00C9\",\n\t\"eacute;\": \"\\u00E9\",\n\t\"eacute\": \"\\u00E9\",\n\t\"easter;\": \"\\u2A6E\",\n\t\"Ecaron;\": \"\\u011A\",\n\t\"ecaron;\": \"\\u011B\",\n\t\"Ecirc;\": \"\\u00CA\",\n\t\"Ecirc\": \"\\u00CA\",\n\t\"ecirc;\": \"\\u00EA\",\n\t\"ecirc\": \"\\u00EA\",\n\t\"ecir;\": \"\\u2256\",\n\t\"ecolon;\": \"\\u2255\",\n\t\"Ecy;\": \"\\u042D\",\n\t\"ecy;\": \"\\u044D\",\n\t\"eDDot;\": \"\\u2A77\",\n\t\"Edot;\": \"\\u0116\",\n\t\"edot;\": \"\\u0117\",\n\t\"eDot;\": \"\\u2251\",\n\t\"ee;\": \"\\u2147\",\n\t\"efDot;\": \"\\u2252\",\n\t\"Efr;\": \"\\uD835\\uDD08\",\n\t\"efr;\": \"\\uD835\\uDD22\",\n\t\"eg;\": \"\\u2A9A\",\n\t\"Egrave;\": \"\\u00C8\",\n\t\"Egrave\": \"\\u00C8\",\n\t\"egrave;\": \"\\u00E8\",\n\t\"egrave\": \"\\u00E8\",\n\t\"egs;\": \"\\u2A96\",\n\t\"egsdot;\": \"\\u2A98\",\n\t\"el;\": \"\\u2A99\",\n\t\"Element;\": \"\\u2208\",\n\t\"elinters;\": \"\\u23E7\",\n\t\"ell;\": \"\\u2113\",\n\t\"els;\": \"\\u2A95\",\n\t\"elsdot;\": \"\\u2A97\",\n\t\"Emacr;\": \"\\u0112\",\n\t\"emacr;\": \"\\u0113\",\n\t\"empty;\": \"\\u2205\",\n\t\"emptyset;\": \"\\u2205\",\n\t\"EmptySmallSquare;\": \"\\u25FB\",\n\t\"emptyv;\": \"\\u2205\",\n\t\"EmptyVerySmallSquare;\": \"\\u25AB\",\n\t\"emsp13;\": \"\\u2004\",\n\t\"emsp14;\": \"\\u2005\",\n\t\"emsp;\": \"\\u2003\",\n\t\"ENG;\": \"\\u014A\",\n\t\"eng;\": \"\\u014B\",\n\t\"ensp;\": \"\\u2002\",\n\t\"Eogon;\": \"\\u0118\",\n\t\"eogon;\": \"\\u0119\",\n\t\"Eopf;\": \"\\uD835\\uDD3C\",\n\t\"eopf;\": \"\\uD835\\uDD56\",\n\t\"epar;\": \"\\u22D5\",\n\t\"eparsl;\": \"\\u29E3\",\n\t\"eplus;\": \"\\u2A71\",\n\t\"epsi;\": \"\\u03B5\",\n\t\"Epsilon;\": \"\\u0395\",\n\t\"epsilon;\": \"\\u03B5\",\n\t\"epsiv;\": \"\\u03F5\",\n\t\"eqcirc;\": \"\\u2256\",\n\t\"eqcolon;\": \"\\u2255\",\n\t\"eqsim;\": \"\\u2242\",\n\t\"eqslantgtr;\": \"\\u2A96\",\n\t\"eqslantless;\": \"\\u2A95\",\n\t\"Equal;\": \"\\u2A75\",\n\t\"equals;\": \"\\u003D\",\n\t\"EqualTilde;\": \"\\u2242\",\n\t\"equest;\": \"\\u225F\",\n\t\"Equilibrium;\": \"\\u21CC\",\n\t\"equiv;\": \"\\u2261\",\n\t\"equivDD;\": \"\\u2A78\",\n\t\"eqvparsl;\": \"\\u29E5\",\n\t\"erarr;\": \"\\u2971\",\n\t\"erDot;\": \"\\u2253\",\n\t\"escr;\": \"\\u212F\",\n\t\"Escr;\": \"\\u2130\",\n\t\"esdot;\": \"\\u2250\",\n\t\"Esim;\": \"\\u2A73\",\n\t\"esim;\": \"\\u2242\",\n\t\"Eta;\": \"\\u0397\",\n\t\"eta;\": \"\\u03B7\",\n\t\"ETH;\": \"\\u00D0\",\n\t\"ETH\": \"\\u00D0\",\n\t\"eth;\": \"\\u00F0\",\n\t\"eth\": \"\\u00F0\",\n\t\"Euml;\": \"\\u00CB\",\n\t\"Euml\": \"\\u00CB\",\n\t\"euml;\": \"\\u00EB\",\n\t\"euml\": \"\\u00EB\",\n\t\"euro;\": \"\\u20AC\",\n\t\"excl;\": \"\\u0021\",\n\t\"exist;\": \"\\u2203\",\n\t\"Exists;\": \"\\u2203\",\n\t\"expectation;\": \"\\u2130\",\n\t\"exponentiale;\": \"\\u2147\",\n\t\"ExponentialE;\": \"\\u2147\",\n\t\"fallingdotseq;\": \"\\u2252\",\n\t\"Fcy;\": \"\\u0424\",\n\t\"fcy;\": \"\\u0444\",\n\t\"female;\": \"\\u2640\",\n\t\"ffilig;\": \"\\uFB03\",\n\t\"fflig;\": \"\\uFB00\",\n\t\"ffllig;\": \"\\uFB04\",\n\t\"Ffr;\": \"\\uD835\\uDD09\",\n\t\"ffr;\": \"\\uD835\\uDD23\",\n\t\"filig;\": \"\\uFB01\",\n\t\"FilledSmallSquare;\": \"\\u25FC\",\n\t\"FilledVerySmallSquare;\": \"\\u25AA\",\n\t\"fjlig;\": \"\\u0066\\u006A\",\n\t\"flat;\": \"\\u266D\",\n\t\"fllig;\": \"\\uFB02\",\n\t\"fltns;\": \"\\u25B1\",\n\t\"fnof;\": \"\\u0192\",\n\t\"Fopf;\": \"\\uD835\\uDD3D\",\n\t\"fopf;\": \"\\uD835\\uDD57\",\n\t\"forall;\": \"\\u2200\",\n\t\"ForAll;\": \"\\u2200\",\n\t\"fork;\": \"\\u22D4\",\n\t\"forkv;\": \"\\u2AD9\",\n\t\"Fouriertrf;\": \"\\u2131\",\n\t\"fpartint;\": \"\\u2A0D\",\n\t\"frac12;\": \"\\u00BD\",\n\t\"frac12\": \"\\u00BD\",\n\t\"frac13;\": \"\\u2153\",\n\t\"frac14;\": \"\\u00BC\",\n\t\"frac14\": \"\\u00BC\",\n\t\"frac15;\": \"\\u2155\",\n\t\"frac16;\": \"\\u2159\",\n\t\"frac18;\": \"\\u215B\",\n\t\"frac23;\": \"\\u2154\",\n\t\"frac25;\": \"\\u2156\",\n\t\"frac34;\": \"\\u00BE\",\n\t\"frac34\": \"\\u00BE\",\n\t\"frac35;\": \"\\u2157\",\n\t\"frac38;\": \"\\u215C\",\n\t\"frac45;\": \"\\u2158\",\n\t\"frac56;\": \"\\u215A\",\n\t\"frac58;\": \"\\u215D\",\n\t\"frac78;\": \"\\u215E\",\n\t\"frasl;\": \"\\u2044\",\n\t\"frown;\": \"\\u2322\",\n\t\"fscr;\": \"\\uD835\\uDCBB\",\n\t\"Fscr;\": \"\\u2131\",\n\t\"gacute;\": \"\\u01F5\",\n\t\"Gamma;\": \"\\u0393\",\n\t\"gamma;\": \"\\u03B3\",\n\t\"Gammad;\": \"\\u03DC\",\n\t\"gammad;\": \"\\u03DD\",\n\t\"gap;\": \"\\u2A86\",\n\t\"Gbreve;\": \"\\u011E\",\n\t\"gbreve;\": \"\\u011F\",\n\t\"Gcedil;\": \"\\u0122\",\n\t\"Gcirc;\": \"\\u011C\",\n\t\"gcirc;\": \"\\u011D\",\n\t\"Gcy;\": \"\\u0413\",\n\t\"gcy;\": \"\\u0433\",\n\t\"Gdot;\": \"\\u0120\",\n\t\"gdot;\": \"\\u0121\",\n\t\"ge;\": \"\\u2265\",\n\t\"gE;\": \"\\u2267\",\n\t\"gEl;\": \"\\u2A8C\",\n\t\"gel;\": \"\\u22DB\",\n\t\"geq;\": \"\\u2265\",\n\t\"geqq;\": \"\\u2267\",\n\t\"geqslant;\": \"\\u2A7E\",\n\t\"gescc;\": \"\\u2AA9\",\n\t\"ges;\": \"\\u2A7E\",\n\t\"gesdot;\": \"\\u2A80\",\n\t\"gesdoto;\": \"\\u2A82\",\n\t\"gesdotol;\": \"\\u2A84\",\n\t\"gesl;\": \"\\u22DB\\uFE00\",\n\t\"gesles;\": \"\\u2A94\",\n\t\"Gfr;\": \"\\uD835\\uDD0A\",\n\t\"gfr;\": \"\\uD835\\uDD24\",\n\t\"gg;\": \"\\u226B\",\n\t\"Gg;\": \"\\u22D9\",\n\t\"ggg;\": \"\\u22D9\",\n\t\"gimel;\": \"\\u2137\",\n\t\"GJcy;\": \"\\u0403\",\n\t\"gjcy;\": \"\\u0453\",\n\t\"gla;\": \"\\u2AA5\",\n\t\"gl;\": \"\\u2277\",\n\t\"glE;\": \"\\u2A92\",\n\t\"glj;\": \"\\u2AA4\",\n\t\"gnap;\": \"\\u2A8A\",\n\t\"gnapprox;\": \"\\u2A8A\",\n\t\"gne;\": \"\\u2A88\",\n\t\"gnE;\": \"\\u2269\",\n\t\"gneq;\": \"\\u2A88\",\n\t\"gneqq;\": \"\\u2269\",\n\t\"gnsim;\": \"\\u22E7\",\n\t\"Gopf;\": \"\\uD835\\uDD3E\",\n\t\"gopf;\": \"\\uD835\\uDD58\",\n\t\"grave;\": \"\\u0060\",\n\t\"GreaterEqual;\": \"\\u2265\",\n\t\"GreaterEqualLess;\": \"\\u22DB\",\n\t\"GreaterFullEqual;\": \"\\u2267\",\n\t\"GreaterGreater;\": \"\\u2AA2\",\n\t\"GreaterLess;\": \"\\u2277\",\n\t\"GreaterSlantEqual;\": \"\\u2A7E\",\n\t\"GreaterTilde;\": \"\\u2273\",\n\t\"Gscr;\": \"\\uD835\\uDCA2\",\n\t\"gscr;\": \"\\u210A\",\n\t\"gsim;\": \"\\u2273\",\n\t\"gsime;\": \"\\u2A8E\",\n\t\"gsiml;\": \"\\u2A90\",\n\t\"gtcc;\": \"\\u2AA7\",\n\t\"gtcir;\": \"\\u2A7A\",\n\t\"gt;\": \"\\u003E\",\n\t\"gt\": \"\\u003E\",\n\t\"GT;\": \"\\u003E\",\n\t\"GT\": \"\\u003E\",\n\t\"Gt;\": \"\\u226B\",\n\t\"gtdot;\": \"\\u22D7\",\n\t\"gtlPar;\": \"\\u2995\",\n\t\"gtquest;\": \"\\u2A7C\",\n\t\"gtrapprox;\": \"\\u2A86\",\n\t\"gtrarr;\": \"\\u2978\",\n\t\"gtrdot;\": \"\\u22D7\",\n\t\"gtreqless;\": \"\\u22DB\",\n\t\"gtreqqless;\": \"\\u2A8C\",\n\t\"gtrless;\": \"\\u2277\",\n\t\"gtrsim;\": \"\\u2273\",\n\t\"gvertneqq;\": \"\\u2269\\uFE00\",\n\t\"gvnE;\": \"\\u2269\\uFE00\",\n\t\"Hacek;\": \"\\u02C7\",\n\t\"hairsp;\": \"\\u200A\",\n\t\"half;\": \"\\u00BD\",\n\t\"hamilt;\": \"\\u210B\",\n\t\"HARDcy;\": \"\\u042A\",\n\t\"hardcy;\": \"\\u044A\",\n\t\"harrcir;\": \"\\u2948\",\n\t\"harr;\": \"\\u2194\",\n\t\"hArr;\": \"\\u21D4\",\n\t\"harrw;\": \"\\u21AD\",\n\t\"Hat;\": \"\\u005E\",\n\t\"hbar;\": \"\\u210F\",\n\t\"Hcirc;\": \"\\u0124\",\n\t\"hcirc;\": \"\\u0125\",\n\t\"hearts;\": \"\\u2665\",\n\t\"heartsuit;\": \"\\u2665\",\n\t\"hellip;\": \"\\u2026\",\n\t\"hercon;\": \"\\u22B9\",\n\t\"hfr;\": \"\\uD835\\uDD25\",\n\t\"Hfr;\": \"\\u210C\",\n\t\"HilbertSpace;\": \"\\u210B\",\n\t\"hksearow;\": \"\\u2925\",\n\t\"hkswarow;\": \"\\u2926\",\n\t\"hoarr;\": \"\\u21FF\",\n\t\"homtht;\": \"\\u223B\",\n\t\"hookleftarrow;\": \"\\u21A9\",\n\t\"hookrightarrow;\": \"\\u21AA\",\n\t\"hopf;\": \"\\uD835\\uDD59\",\n\t\"Hopf;\": \"\\u210D\",\n\t\"horbar;\": \"\\u2015\",\n\t\"HorizontalLine;\": \"\\u2500\",\n\t\"hscr;\": \"\\uD835\\uDCBD\",\n\t\"Hscr;\": \"\\u210B\",\n\t\"hslash;\": \"\\u210F\",\n\t\"Hstrok;\": \"\\u0126\",\n\t\"hstrok;\": \"\\u0127\",\n\t\"HumpDownHump;\": \"\\u224E\",\n\t\"HumpEqual;\": \"\\u224F\",\n\t\"hybull;\": \"\\u2043\",\n\t\"hyphen;\": \"\\u2010\",\n\t\"Iacute;\": \"\\u00CD\",\n\t\"Iacute\": \"\\u00CD\",\n\t\"iacute;\": \"\\u00ED\",\n\t\"iacute\": \"\\u00ED\",\n\t\"ic;\": \"\\u2063\",\n\t\"Icirc;\": \"\\u00CE\",\n\t\"Icirc\": \"\\u00CE\",\n\t\"icirc;\": \"\\u00EE\",\n\t\"icirc\": \"\\u00EE\",\n\t\"Icy;\": \"\\u0418\",\n\t\"icy;\": \"\\u0438\",\n\t\"Idot;\": \"\\u0130\",\n\t\"IEcy;\": \"\\u0415\",\n\t\"iecy;\": \"\\u0435\",\n\t\"iexcl;\": \"\\u00A1\",\n\t\"iexcl\": \"\\u00A1\",\n\t\"iff;\": \"\\u21D4\",\n\t\"ifr;\": \"\\uD835\\uDD26\",\n\t\"Ifr;\": \"\\u2111\",\n\t\"Igrave;\": \"\\u00CC\",\n\t\"Igrave\": \"\\u00CC\",\n\t\"igrave;\": \"\\u00EC\",\n\t\"igrave\": \"\\u00EC\",\n\t\"ii;\": \"\\u2148\",\n\t\"iiiint;\": \"\\u2A0C\",\n\t\"iiint;\": \"\\u222D\",\n\t\"iinfin;\": \"\\u29DC\",\n\t\"iiota;\": \"\\u2129\",\n\t\"IJlig;\": \"\\u0132\",\n\t\"ijlig;\": \"\\u0133\",\n\t\"Imacr;\": \"\\u012A\",\n\t\"imacr;\": \"\\u012B\",\n\t\"image;\": \"\\u2111\",\n\t\"ImaginaryI;\": \"\\u2148\",\n\t\"imagline;\": \"\\u2110\",\n\t\"imagpart;\": \"\\u2111\",\n\t\"imath;\": \"\\u0131\",\n\t\"Im;\": \"\\u2111\",\n\t\"imof;\": \"\\u22B7\",\n\t\"imped;\": \"\\u01B5\",\n\t\"Implies;\": \"\\u21D2\",\n\t\"incare;\": \"\\u2105\",\n\t\"in;\": \"\\u2208\",\n\t\"infin;\": \"\\u221E\",\n\t\"infintie;\": \"\\u29DD\",\n\t\"inodot;\": \"\\u0131\",\n\t\"intcal;\": \"\\u22BA\",\n\t\"int;\": \"\\u222B\",\n\t\"Int;\": \"\\u222C\",\n\t\"integers;\": \"\\u2124\",\n\t\"Integral;\": \"\\u222B\",\n\t\"intercal;\": \"\\u22BA\",\n\t\"Intersection;\": \"\\u22C2\",\n\t\"intlarhk;\": \"\\u2A17\",\n\t\"intprod;\": \"\\u2A3C\",\n\t\"InvisibleComma;\": \"\\u2063\",\n\t\"InvisibleTimes;\": \"\\u2062\",\n\t\"IOcy;\": \"\\u0401\",\n\t\"iocy;\": \"\\u0451\",\n\t\"Iogon;\": \"\\u012E\",\n\t\"iogon;\": \"\\u012F\",\n\t\"Iopf;\": \"\\uD835\\uDD40\",\n\t\"iopf;\": \"\\uD835\\uDD5A\",\n\t\"Iota;\": \"\\u0399\",\n\t\"iota;\": \"\\u03B9\",\n\t\"iprod;\": \"\\u2A3C\",\n\t\"iquest;\": \"\\u00BF\",\n\t\"iquest\": \"\\u00BF\",\n\t\"iscr;\": \"\\uD835\\uDCBE\",\n\t\"Iscr;\": \"\\u2110\",\n\t\"isin;\": \"\\u2208\",\n\t\"isindot;\": \"\\u22F5\",\n\t\"isinE;\": \"\\u22F9\",\n\t\"isins;\": \"\\u22F4\",\n\t\"isinsv;\": \"\\u22F3\",\n\t\"isinv;\": \"\\u2208\",\n\t\"it;\": \"\\u2062\",\n\t\"Itilde;\": \"\\u0128\",\n\t\"itilde;\": \"\\u0129\",\n\t\"Iukcy;\": \"\\u0406\",\n\t\"iukcy;\": \"\\u0456\",\n\t\"Iuml;\": \"\\u00CF\",\n\t\"Iuml\": \"\\u00CF\",\n\t\"iuml;\": \"\\u00EF\",\n\t\"iuml\": \"\\u00EF\",\n\t\"Jcirc;\": \"\\u0134\",\n\t\"jcirc;\": \"\\u0135\",\n\t\"Jcy;\": \"\\u0419\",\n\t\"jcy;\": \"\\u0439\",\n\t\"Jfr;\": \"\\uD835\\uDD0D\",\n\t\"jfr;\": \"\\uD835\\uDD27\",\n\t\"jmath;\": \"\\u0237\",\n\t\"Jopf;\": \"\\uD835\\uDD41\",\n\t\"jopf;\": \"\\uD835\\uDD5B\",\n\t\"Jscr;\": \"\\uD835\\uDCA5\",\n\t\"jscr;\": \"\\uD835\\uDCBF\",\n\t\"Jsercy;\": \"\\u0408\",\n\t\"jsercy;\": \"\\u0458\",\n\t\"Jukcy;\": \"\\u0404\",\n\t\"jukcy;\": \"\\u0454\",\n\t\"Kappa;\": \"\\u039A\",\n\t\"kappa;\": \"\\u03BA\",\n\t\"kappav;\": \"\\u03F0\",\n\t\"Kcedil;\": \"\\u0136\",\n\t\"kcedil;\": \"\\u0137\",\n\t\"Kcy;\": \"\\u041A\",\n\t\"kcy;\": \"\\u043A\",\n\t\"Kfr;\": \"\\uD835\\uDD0E\",\n\t\"kfr;\": \"\\uD835\\uDD28\",\n\t\"kgreen;\": \"\\u0138\",\n\t\"KHcy;\": \"\\u0425\",\n\t\"khcy;\": \"\\u0445\",\n\t\"KJcy;\": \"\\u040C\",\n\t\"kjcy;\": \"\\u045C\",\n\t\"Kopf;\": \"\\uD835\\uDD42\",\n\t\"kopf;\": \"\\uD835\\uDD5C\",\n\t\"Kscr;\": \"\\uD835\\uDCA6\",\n\t\"kscr;\": \"\\uD835\\uDCC0\",\n\t\"lAarr;\": \"\\u21DA\",\n\t\"Lacute;\": \"\\u0139\",\n\t\"lacute;\": \"\\u013A\",\n\t\"laemptyv;\": \"\\u29B4\",\n\t\"lagran;\": \"\\u2112\",\n\t\"Lambda;\": \"\\u039B\",\n\t\"lambda;\": \"\\u03BB\",\n\t\"lang;\": \"\\u27E8\",\n\t\"Lang;\": \"\\u27EA\",\n\t\"langd;\": \"\\u2991\",\n\t\"langle;\": \"\\u27E8\",\n\t\"lap;\": \"\\u2A85\",\n\t\"Laplacetrf;\": \"\\u2112\",\n\t\"laquo;\": \"\\u00AB\",\n\t\"laquo\": \"\\u00AB\",\n\t\"larrb;\": \"\\u21E4\",\n\t\"larrbfs;\": \"\\u291F\",\n\t\"larr;\": \"\\u2190\",\n\t\"Larr;\": \"\\u219E\",\n\t\"lArr;\": \"\\u21D0\",\n\t\"larrfs;\": \"\\u291D\",\n\t\"larrhk;\": \"\\u21A9\",\n\t\"larrlp;\": \"\\u21AB\",\n\t\"larrpl;\": \"\\u2939\",\n\t\"larrsim;\": \"\\u2973\",\n\t\"larrtl;\": \"\\u21A2\",\n\t\"latail;\": \"\\u2919\",\n\t\"lAtail;\": \"\\u291B\",\n\t\"lat;\": \"\\u2AAB\",\n\t\"late;\": \"\\u2AAD\",\n\t\"lates;\": \"\\u2AAD\\uFE00\",\n\t\"lbarr;\": \"\\u290C\",\n\t\"lBarr;\": \"\\u290E\",\n\t\"lbbrk;\": \"\\u2772\",\n\t\"lbrace;\": \"\\u007B\",\n\t\"lbrack;\": \"\\u005B\",\n\t\"lbrke;\": \"\\u298B\",\n\t\"lbrksld;\": \"\\u298F\",\n\t\"lbrkslu;\": \"\\u298D\",\n\t\"Lcaron;\": \"\\u013D\",\n\t\"lcaron;\": \"\\u013E\",\n\t\"Lcedil;\": \"\\u013B\",\n\t\"lcedil;\": \"\\u013C\",\n\t\"lceil;\": \"\\u2308\",\n\t\"lcub;\": \"\\u007B\",\n\t\"Lcy;\": \"\\u041B\",\n\t\"lcy;\": \"\\u043B\",\n\t\"ldca;\": \"\\u2936\",\n\t\"ldquo;\": \"\\u201C\",\n\t\"ldquor;\": \"\\u201E\",\n\t\"ldrdhar;\": \"\\u2967\",\n\t\"ldrushar;\": \"\\u294B\",\n\t\"ldsh;\": \"\\u21B2\",\n\t\"le;\": \"\\u2264\",\n\t\"lE;\": \"\\u2266\",\n\t\"LeftAngleBracket;\": \"\\u27E8\",\n\t\"LeftArrowBar;\": \"\\u21E4\",\n\t\"leftarrow;\": \"\\u2190\",\n\t\"LeftArrow;\": \"\\u2190\",\n\t\"Leftarrow;\": \"\\u21D0\",\n\t\"LeftArrowRightArrow;\": \"\\u21C6\",\n\t\"leftarrowtail;\": \"\\u21A2\",\n\t\"LeftCeiling;\": \"\\u2308\",\n\t\"LeftDoubleBracket;\": \"\\u27E6\",\n\t\"LeftDownTeeVector;\": \"\\u2961\",\n\t\"LeftDownVectorBar;\": \"\\u2959\",\n\t\"LeftDownVector;\": \"\\u21C3\",\n\t\"LeftFloor;\": \"\\u230A\",\n\t\"leftharpoondown;\": \"\\u21BD\",\n\t\"leftharpoonup;\": \"\\u21BC\",\n\t\"leftleftarrows;\": \"\\u21C7\",\n\t\"leftrightarrow;\": \"\\u2194\",\n\t\"LeftRightArrow;\": \"\\u2194\",\n\t\"Leftrightarrow;\": \"\\u21D4\",\n\t\"leftrightarrows;\": \"\\u21C6\",\n\t\"leftrightharpoons;\": \"\\u21CB\",\n\t\"leftrightsquigarrow;\": \"\\u21AD\",\n\t\"LeftRightVector;\": \"\\u294E\",\n\t\"LeftTeeArrow;\": \"\\u21A4\",\n\t\"LeftTee;\": \"\\u22A3\",\n\t\"LeftTeeVector;\": \"\\u295A\",\n\t\"leftthreetimes;\": \"\\u22CB\",\n\t\"LeftTriangleBar;\": \"\\u29CF\",\n\t\"LeftTriangle;\": \"\\u22B2\",\n\t\"LeftTriangleEqual;\": \"\\u22B4\",\n\t\"LeftUpDownVector;\": \"\\u2951\",\n\t\"LeftUpTeeVector;\": \"\\u2960\",\n\t\"LeftUpVectorBar;\": \"\\u2958\",\n\t\"LeftUpVector;\": \"\\u21BF\",\n\t\"LeftVectorBar;\": \"\\u2952\",\n\t\"LeftVector;\": \"\\u21BC\",\n\t\"lEg;\": \"\\u2A8B\",\n\t\"leg;\": \"\\u22DA\",\n\t\"leq;\": \"\\u2264\",\n\t\"leqq;\": \"\\u2266\",\n\t\"leqslant;\": \"\\u2A7D\",\n\t\"lescc;\": \"\\u2AA8\",\n\t\"les;\": \"\\u2A7D\",\n\t\"lesdot;\": \"\\u2A7F\",\n\t\"lesdoto;\": \"\\u2A81\",\n\t\"lesdotor;\": \"\\u2A83\",\n\t\"lesg;\": \"\\u22DA\\uFE00\",\n\t\"lesges;\": \"\\u2A93\",\n\t\"lessapprox;\": \"\\u2A85\",\n\t\"lessdot;\": \"\\u22D6\",\n\t\"lesseqgtr;\": \"\\u22DA\",\n\t\"lesseqqgtr;\": \"\\u2A8B\",\n\t\"LessEqualGreater;\": \"\\u22DA\",\n\t\"LessFullEqual;\": \"\\u2266\",\n\t\"LessGreater;\": \"\\u2276\",\n\t\"lessgtr;\": \"\\u2276\",\n\t\"LessLess;\": \"\\u2AA1\",\n\t\"lesssim;\": \"\\u2272\",\n\t\"LessSlantEqual;\": \"\\u2A7D\",\n\t\"LessTilde;\": \"\\u2272\",\n\t\"lfisht;\": \"\\u297C\",\n\t\"lfloor;\": \"\\u230A\",\n\t\"Lfr;\": \"\\uD835\\uDD0F\",\n\t\"lfr;\": \"\\uD835\\uDD29\",\n\t\"lg;\": \"\\u2276\",\n\t\"lgE;\": \"\\u2A91\",\n\t\"lHar;\": \"\\u2962\",\n\t\"lhard;\": \"\\u21BD\",\n\t\"lharu;\": \"\\u21BC\",\n\t\"lharul;\": \"\\u296A\",\n\t\"lhblk;\": \"\\u2584\",\n\t\"LJcy;\": \"\\u0409\",\n\t\"ljcy;\": \"\\u0459\",\n\t\"llarr;\": \"\\u21C7\",\n\t\"ll;\": \"\\u226A\",\n\t\"Ll;\": \"\\u22D8\",\n\t\"llcorner;\": \"\\u231E\",\n\t\"Lleftarrow;\": \"\\u21DA\",\n\t\"llhard;\": \"\\u296B\",\n\t\"lltri;\": \"\\u25FA\",\n\t\"Lmidot;\": \"\\u013F\",\n\t\"lmidot;\": \"\\u0140\",\n\t\"lmoustache;\": \"\\u23B0\",\n\t\"lmoust;\": \"\\u23B0\",\n\t\"lnap;\": \"\\u2A89\",\n\t\"lnapprox;\": \"\\u2A89\",\n\t\"lne;\": \"\\u2A87\",\n\t\"lnE;\": \"\\u2268\",\n\t\"lneq;\": \"\\u2A87\",\n\t\"lneqq;\": \"\\u2268\",\n\t\"lnsim;\": \"\\u22E6\",\n\t\"loang;\": \"\\u27EC\",\n\t\"loarr;\": \"\\u21FD\",\n\t\"lobrk;\": \"\\u27E6\",\n\t\"longleftarrow;\": \"\\u27F5\",\n\t\"LongLeftArrow;\": \"\\u27F5\",\n\t\"Longleftarrow;\": \"\\u27F8\",\n\t\"longleftrightarrow;\": \"\\u27F7\",\n\t\"LongLeftRightArrow;\": \"\\u27F7\",\n\t\"Longleftrightarrow;\": \"\\u27FA\",\n\t\"longmapsto;\": \"\\u27FC\",\n\t\"longrightarrow;\": \"\\u27F6\",\n\t\"LongRightArrow;\": \"\\u27F6\",\n\t\"Longrightarrow;\": \"\\u27F9\",\n\t\"looparrowleft;\": \"\\u21AB\",\n\t\"looparrowright;\": \"\\u21AC\",\n\t\"lopar;\": \"\\u2985\",\n\t\"Lopf;\": \"\\uD835\\uDD43\",\n\t\"lopf;\": \"\\uD835\\uDD5D\",\n\t\"loplus;\": \"\\u2A2D\",\n\t\"lotimes;\": \"\\u2A34\",\n\t\"lowast;\": \"\\u2217\",\n\t\"lowbar;\": \"\\u005F\",\n\t\"LowerLeftArrow;\": \"\\u2199\",\n\t\"LowerRightArrow;\": \"\\u2198\",\n\t\"loz;\": \"\\u25CA\",\n\t\"lozenge;\": \"\\u25CA\",\n\t\"lozf;\": \"\\u29EB\",\n\t\"lpar;\": \"\\u0028\",\n\t\"lparlt;\": \"\\u2993\",\n\t\"lrarr;\": \"\\u21C6\",\n\t\"lrcorner;\": \"\\u231F\",\n\t\"lrhar;\": \"\\u21CB\",\n\t\"lrhard;\": \"\\u296D\",\n\t\"lrm;\": \"\\u200E\",\n\t\"lrtri;\": \"\\u22BF\",\n\t\"lsaquo;\": \"\\u2039\",\n\t\"lscr;\": \"\\uD835\\uDCC1\",\n\t\"Lscr;\": \"\\u2112\",\n\t\"lsh;\": \"\\u21B0\",\n\t\"Lsh;\": \"\\u21B0\",\n\t\"lsim;\": \"\\u2272\",\n\t\"lsime;\": \"\\u2A8D\",\n\t\"lsimg;\": \"\\u2A8F\",\n\t\"lsqb;\": \"\\u005B\",\n\t\"lsquo;\": \"\\u2018\",\n\t\"lsquor;\": \"\\u201A\",\n\t\"Lstrok;\": \"\\u0141\",\n\t\"lstrok;\": \"\\u0142\",\n\t\"ltcc;\": \"\\u2AA6\",\n\t\"ltcir;\": \"\\u2A79\",\n\t\"lt;\": \"\\u003C\",\n\t\"lt\": \"\\u003C\",\n\t\"LT;\": \"\\u003C\",\n\t\"LT\": \"\\u003C\",\n\t\"Lt;\": \"\\u226A\",\n\t\"ltdot;\": \"\\u22D6\",\n\t\"lthree;\": \"\\u22CB\",\n\t\"ltimes;\": \"\\u22C9\",\n\t\"ltlarr;\": \"\\u2976\",\n\t\"ltquest;\": \"\\u2A7B\",\n\t\"ltri;\": \"\\u25C3\",\n\t\"ltrie;\": \"\\u22B4\",\n\t\"ltrif;\": \"\\u25C2\",\n\t\"ltrPar;\": \"\\u2996\",\n\t\"lurdshar;\": \"\\u294A\",\n\t\"luruhar;\": \"\\u2966\",\n\t\"lvertneqq;\": \"\\u2268\\uFE00\",\n\t\"lvnE;\": \"\\u2268\\uFE00\",\n\t\"macr;\": \"\\u00AF\",\n\t\"macr\": \"\\u00AF\",\n\t\"male;\": \"\\u2642\",\n\t\"malt;\": \"\\u2720\",\n\t\"maltese;\": \"\\u2720\",\n\t\"Map;\": \"\\u2905\",\n\t\"map;\": \"\\u21A6\",\n\t\"mapsto;\": \"\\u21A6\",\n\t\"mapstodown;\": \"\\u21A7\",\n\t\"mapstoleft;\": \"\\u21A4\",\n\t\"mapstoup;\": \"\\u21A5\",\n\t\"marker;\": \"\\u25AE\",\n\t\"mcomma;\": \"\\u2A29\",\n\t\"Mcy;\": \"\\u041C\",\n\t\"mcy;\": \"\\u043C\",\n\t\"mdash;\": \"\\u2014\",\n\t\"mDDot;\": \"\\u223A\",\n\t\"measuredangle;\": \"\\u2221\",\n\t\"MediumSpace;\": \"\\u205F\",\n\t\"Mellintrf;\": \"\\u2133\",\n\t\"Mfr;\": \"\\uD835\\uDD10\",\n\t\"mfr;\": \"\\uD835\\uDD2A\",\n\t\"mho;\": \"\\u2127\",\n\t\"micro;\": \"\\u00B5\",\n\t\"micro\": \"\\u00B5\",\n\t\"midast;\": \"\\u002A\",\n\t\"midcir;\": \"\\u2AF0\",\n\t\"mid;\": \"\\u2223\",\n\t\"middot;\": \"\\u00B7\",\n\t\"middot\": \"\\u00B7\",\n\t\"minusb;\": \"\\u229F\",\n\t\"minus;\": \"\\u2212\",\n\t\"minusd;\": \"\\u2238\",\n\t\"minusdu;\": \"\\u2A2A\",\n\t\"MinusPlus;\": \"\\u2213\",\n\t\"mlcp;\": \"\\u2ADB\",\n\t\"mldr;\": \"\\u2026\",\n\t\"mnplus;\": \"\\u2213\",\n\t\"models;\": \"\\u22A7\",\n\t\"Mopf;\": \"\\uD835\\uDD44\",\n\t\"mopf;\": \"\\uD835\\uDD5E\",\n\t\"mp;\": \"\\u2213\",\n\t\"mscr;\": \"\\uD835\\uDCC2\",\n\t\"Mscr;\": \"\\u2133\",\n\t\"mstpos;\": \"\\u223E\",\n\t\"Mu;\": \"\\u039C\",\n\t\"mu;\": \"\\u03BC\",\n\t\"multimap;\": \"\\u22B8\",\n\t\"mumap;\": \"\\u22B8\",\n\t\"nabla;\": \"\\u2207\",\n\t\"Nacute;\": \"\\u0143\",\n\t\"nacute;\": \"\\u0144\",\n\t\"nang;\": \"\\u2220\\u20D2\",\n\t\"nap;\": \"\\u2249\",\n\t\"napE;\": \"\\u2A70\\u0338\",\n\t\"napid;\": \"\\u224B\\u0338\",\n\t\"napos;\": \"\\u0149\",\n\t\"napprox;\": \"\\u2249\",\n\t\"natural;\": \"\\u266E\",\n\t\"naturals;\": \"\\u2115\",\n\t\"natur;\": \"\\u266E\",\n\t\"nbsp;\": \"\\u00A0\",\n\t\"nbsp\": \"\\u00A0\",\n\t\"nbump;\": \"\\u224E\\u0338\",\n\t\"nbumpe;\": \"\\u224F\\u0338\",\n\t\"ncap;\": \"\\u2A43\",\n\t\"Ncaron;\": \"\\u0147\",\n\t\"ncaron;\": \"\\u0148\",\n\t\"Ncedil;\": \"\\u0145\",\n\t\"ncedil;\": \"\\u0146\",\n\t\"ncong;\": \"\\u2247\",\n\t\"ncongdot;\": \"\\u2A6D\\u0338\",\n\t\"ncup;\": \"\\u2A42\",\n\t\"Ncy;\": \"\\u041D\",\n\t\"ncy;\": \"\\u043D\",\n\t\"ndash;\": \"\\u2013\",\n\t\"nearhk;\": \"\\u2924\",\n\t\"nearr;\": \"\\u2197\",\n\t\"neArr;\": \"\\u21D7\",\n\t\"nearrow;\": \"\\u2197\",\n\t\"ne;\": \"\\u2260\",\n\t\"nedot;\": \"\\u2250\\u0338\",\n\t\"NegativeMediumSpace;\": \"\\u200B\",\n\t\"NegativeThickSpace;\": \"\\u200B\",\n\t\"NegativeThinSpace;\": \"\\u200B\",\n\t\"NegativeVeryThinSpace;\": \"\\u200B\",\n\t\"nequiv;\": \"\\u2262\",\n\t\"nesear;\": \"\\u2928\",\n\t\"nesim;\": \"\\u2242\\u0338\",\n\t\"NestedGreaterGreater;\": \"\\u226B\",\n\t\"NestedLessLess;\": \"\\u226A\",\n\t\"NewLine;\": \"\\u000A\",\n\t\"nexist;\": \"\\u2204\",\n\t\"nexists;\": \"\\u2204\",\n\t\"Nfr;\": \"\\uD835\\uDD11\",\n\t\"nfr;\": \"\\uD835\\uDD2B\",\n\t\"ngE;\": \"\\u2267\\u0338\",\n\t\"nge;\": \"\\u2271\",\n\t\"ngeq;\": \"\\u2271\",\n\t\"ngeqq;\": \"\\u2267\\u0338\",\n\t\"ngeqslant;\": \"\\u2A7E\\u0338\",\n\t\"nges;\": \"\\u2A7E\\u0338\",\n\t\"nGg;\": \"\\u22D9\\u0338\",\n\t\"ngsim;\": \"\\u2275\",\n\t\"nGt;\": \"\\u226B\\u20D2\",\n\t\"ngt;\": \"\\u226F\",\n\t\"ngtr;\": \"\\u226F\",\n\t\"nGtv;\": \"\\u226B\\u0338\",\n\t\"nharr;\": \"\\u21AE\",\n\t\"nhArr;\": \"\\u21CE\",\n\t\"nhpar;\": \"\\u2AF2\",\n\t\"ni;\": \"\\u220B\",\n\t\"nis;\": \"\\u22FC\",\n\t\"nisd;\": \"\\u22FA\",\n\t\"niv;\": \"\\u220B\",\n\t\"NJcy;\": \"\\u040A\",\n\t\"njcy;\": \"\\u045A\",\n\t\"nlarr;\": \"\\u219A\",\n\t\"nlArr;\": \"\\u21CD\",\n\t\"nldr;\": \"\\u2025\",\n\t\"nlE;\": \"\\u2266\\u0338\",\n\t\"nle;\": \"\\u2270\",\n\t\"nleftarrow;\": \"\\u219A\",\n\t\"nLeftarrow;\": \"\\u21CD\",\n\t\"nleftrightarrow;\": \"\\u21AE\",\n\t\"nLeftrightarrow;\": \"\\u21CE\",\n\t\"nleq;\": \"\\u2270\",\n\t\"nleqq;\": \"\\u2266\\u0338\",\n\t\"nleqslant;\": \"\\u2A7D\\u0338\",\n\t\"nles;\": \"\\u2A7D\\u0338\",\n\t\"nless;\": \"\\u226E\",\n\t\"nLl;\": \"\\u22D8\\u0338\",\n\t\"nlsim;\": \"\\u2274\",\n\t\"nLt;\": \"\\u226A\\u20D2\",\n\t\"nlt;\": \"\\u226E\",\n\t\"nltri;\": \"\\u22EA\",\n\t\"nltrie;\": \"\\u22EC\",\n\t\"nLtv;\": \"\\u226A\\u0338\",\n\t\"nmid;\": \"\\u2224\",\n\t\"NoBreak;\": \"\\u2060\",\n\t\"NonBreakingSpace;\": \"\\u00A0\",\n\t\"nopf;\": \"\\uD835\\uDD5F\",\n\t\"Nopf;\": \"\\u2115\",\n\t\"Not;\": \"\\u2AEC\",\n\t\"not;\": \"\\u00AC\",\n\t\"not\": \"\\u00AC\",\n\t\"NotCongruent;\": \"\\u2262\",\n\t\"NotCupCap;\": \"\\u226D\",\n\t\"NotDoubleVerticalBar;\": \"\\u2226\",\n\t\"NotElement;\": \"\\u2209\",\n\t\"NotEqual;\": \"\\u2260\",\n\t\"NotEqualTilde;\": \"\\u2242\\u0338\",\n\t\"NotExists;\": \"\\u2204\",\n\t\"NotGreater;\": \"\\u226F\",\n\t\"NotGreaterEqual;\": \"\\u2271\",\n\t\"NotGreaterFullEqual;\": \"\\u2267\\u0338\",\n\t\"NotGreaterGreater;\": \"\\u226B\\u0338\",\n\t\"NotGreaterLess;\": \"\\u2279\",\n\t\"NotGreaterSlantEqual;\": \"\\u2A7E\\u0338\",\n\t\"NotGreaterTilde;\": \"\\u2275\",\n\t\"NotHumpDownHump;\": \"\\u224E\\u0338\",\n\t\"NotHumpEqual;\": \"\\u224F\\u0338\",\n\t\"notin;\": \"\\u2209\",\n\t\"notindot;\": \"\\u22F5\\u0338\",\n\t\"notinE;\": \"\\u22F9\\u0338\",\n\t\"notinva;\": \"\\u2209\",\n\t\"notinvb;\": \"\\u22F7\",\n\t\"notinvc;\": \"\\u22F6\",\n\t\"NotLeftTriangleBar;\": \"\\u29CF\\u0338\",\n\t\"NotLeftTriangle;\": \"\\u22EA\",\n\t\"NotLeftTriangleEqual;\": \"\\u22EC\",\n\t\"NotLess;\": \"\\u226E\",\n\t\"NotLessEqual;\": \"\\u2270\",\n\t\"NotLessGreater;\": \"\\u2278\",\n\t\"NotLessLess;\": \"\\u226A\\u0338\",\n\t\"NotLessSlantEqual;\": \"\\u2A7D\\u0338\",\n\t\"NotLessTilde;\": \"\\u2274\",\n\t\"NotNestedGreaterGreater;\": \"\\u2AA2\\u0338\",\n\t\"NotNestedLessLess;\": \"\\u2AA1\\u0338\",\n\t\"notni;\": \"\\u220C\",\n\t\"notniva;\": \"\\u220C\",\n\t\"notnivb;\": \"\\u22FE\",\n\t\"notnivc;\": \"\\u22FD\",\n\t\"NotPrecedes;\": \"\\u2280\",\n\t\"NotPrecedesEqual;\": \"\\u2AAF\\u0338\",\n\t\"NotPrecedesSlantEqual;\": \"\\u22E0\",\n\t\"NotReverseElement;\": \"\\u220C\",\n\t\"NotRightTriangleBar;\": \"\\u29D0\\u0338\",\n\t\"NotRightTriangle;\": \"\\u22EB\",\n\t\"NotRightTriangleEqual;\": \"\\u22ED\",\n\t\"NotSquareSubset;\": \"\\u228F\\u0338\",\n\t\"NotSquareSubsetEqual;\": \"\\u22E2\",\n\t\"NotSquareSuperset;\": \"\\u2290\\u0338\",\n\t\"NotSquareSupersetEqual;\": \"\\u22E3\",\n\t\"NotSubset;\": \"\\u2282\\u20D2\",\n\t\"NotSubsetEqual;\": \"\\u2288\",\n\t\"NotSucceeds;\": \"\\u2281\",\n\t\"NotSucceedsEqual;\": \"\\u2AB0\\u0338\",\n\t\"NotSucceedsSlantEqual;\": \"\\u22E1\",\n\t\"NotSucceedsTilde;\": \"\\u227F\\u0338\",\n\t\"NotSuperset;\": \"\\u2283\\u20D2\",\n\t\"NotSupersetEqual;\": \"\\u2289\",\n\t\"NotTilde;\": \"\\u2241\",\n\t\"NotTildeEqual;\": \"\\u2244\",\n\t\"NotTildeFullEqual;\": \"\\u2247\",\n\t\"NotTildeTilde;\": \"\\u2249\",\n\t\"NotVerticalBar;\": \"\\u2224\",\n\t\"nparallel;\": \"\\u2226\",\n\t\"npar;\": \"\\u2226\",\n\t\"nparsl;\": \"\\u2AFD\\u20E5\",\n\t\"npart;\": \"\\u2202\\u0338\",\n\t\"npolint;\": \"\\u2A14\",\n\t\"npr;\": \"\\u2280\",\n\t\"nprcue;\": \"\\u22E0\",\n\t\"nprec;\": \"\\u2280\",\n\t\"npreceq;\": \"\\u2AAF\\u0338\",\n\t\"npre;\": \"\\u2AAF\\u0338\",\n\t\"nrarrc;\": \"\\u2933\\u0338\",\n\t\"nrarr;\": \"\\u219B\",\n\t\"nrArr;\": \"\\u21CF\",\n\t\"nrarrw;\": \"\\u219D\\u0338\",\n\t\"nrightarrow;\": \"\\u219B\",\n\t\"nRightarrow;\": \"\\u21CF\",\n\t\"nrtri;\": \"\\u22EB\",\n\t\"nrtrie;\": \"\\u22ED\",\n\t\"nsc;\": \"\\u2281\",\n\t\"nsccue;\": \"\\u22E1\",\n\t\"nsce;\": \"\\u2AB0\\u0338\",\n\t\"Nscr;\": \"\\uD835\\uDCA9\",\n\t\"nscr;\": \"\\uD835\\uDCC3\",\n\t\"nshortmid;\": \"\\u2224\",\n\t\"nshortparallel;\": \"\\u2226\",\n\t\"nsim;\": \"\\u2241\",\n\t\"nsime;\": \"\\u2244\",\n\t\"nsimeq;\": \"\\u2244\",\n\t\"nsmid;\": \"\\u2224\",\n\t\"nspar;\": \"\\u2226\",\n\t\"nsqsube;\": \"\\u22E2\",\n\t\"nsqsupe;\": \"\\u22E3\",\n\t\"nsub;\": \"\\u2284\",\n\t\"nsubE;\": \"\\u2AC5\\u0338\",\n\t\"nsube;\": \"\\u2288\",\n\t\"nsubset;\": \"\\u2282\\u20D2\",\n\t\"nsubseteq;\": \"\\u2288\",\n\t\"nsubseteqq;\": \"\\u2AC5\\u0338\",\n\t\"nsucc;\": \"\\u2281\",\n\t\"nsucceq;\": \"\\u2AB0\\u0338\",\n\t\"nsup;\": \"\\u2285\",\n\t\"nsupE;\": \"\\u2AC6\\u0338\",\n\t\"nsupe;\": \"\\u2289\",\n\t\"nsupset;\": \"\\u2283\\u20D2\",\n\t\"nsupseteq;\": \"\\u2289\",\n\t\"nsupseteqq;\": \"\\u2AC6\\u0338\",\n\t\"ntgl;\": \"\\u2279\",\n\t\"Ntilde;\": \"\\u00D1\",\n\t\"Ntilde\": \"\\u00D1\",\n\t\"ntilde;\": \"\\u00F1\",\n\t\"ntilde\": \"\\u00F1\",\n\t\"ntlg;\": \"\\u2278\",\n\t\"ntriangleleft;\": \"\\u22EA\",\n\t\"ntrianglelefteq;\": \"\\u22EC\",\n\t\"ntriangleright;\": \"\\u22EB\",\n\t\"ntrianglerighteq;\": \"\\u22ED\",\n\t\"Nu;\": \"\\u039D\",\n\t\"nu;\": \"\\u03BD\",\n\t\"num;\": \"\\u0023\",\n\t\"numero;\": \"\\u2116\",\n\t\"numsp;\": \"\\u2007\",\n\t\"nvap;\": \"\\u224D\\u20D2\",\n\t\"nvdash;\": \"\\u22AC\",\n\t\"nvDash;\": \"\\u22AD\",\n\t\"nVdash;\": \"\\u22AE\",\n\t\"nVDash;\": \"\\u22AF\",\n\t\"nvge;\": \"\\u2265\\u20D2\",\n\t\"nvgt;\": \"\\u003E\\u20D2\",\n\t\"nvHarr;\": \"\\u2904\",\n\t\"nvinfin;\": \"\\u29DE\",\n\t\"nvlArr;\": \"\\u2902\",\n\t\"nvle;\": \"\\u2264\\u20D2\",\n\t\"nvlt;\": \"\\u003C\\u20D2\",\n\t\"nvltrie;\": \"\\u22B4\\u20D2\",\n\t\"nvrArr;\": \"\\u2903\",\n\t\"nvrtrie;\": \"\\u22B5\\u20D2\",\n\t\"nvsim;\": \"\\u223C\\u20D2\",\n\t\"nwarhk;\": \"\\u2923\",\n\t\"nwarr;\": \"\\u2196\",\n\t\"nwArr;\": \"\\u21D6\",\n\t\"nwarrow;\": \"\\u2196\",\n\t\"nwnear;\": \"\\u2927\",\n\t\"Oacute;\": \"\\u00D3\",\n\t\"Oacute\": \"\\u00D3\",\n\t\"oacute;\": \"\\u00F3\",\n\t\"oacute\": \"\\u00F3\",\n\t\"oast;\": \"\\u229B\",\n\t\"Ocirc;\": \"\\u00D4\",\n\t\"Ocirc\": \"\\u00D4\",\n\t\"ocirc;\": \"\\u00F4\",\n\t\"ocirc\": \"\\u00F4\",\n\t\"ocir;\": \"\\u229A\",\n\t\"Ocy;\": \"\\u041E\",\n\t\"ocy;\": \"\\u043E\",\n\t\"odash;\": \"\\u229D\",\n\t\"Odblac;\": \"\\u0150\",\n\t\"odblac;\": \"\\u0151\",\n\t\"odiv;\": \"\\u2A38\",\n\t\"odot;\": \"\\u2299\",\n\t\"odsold;\": \"\\u29BC\",\n\t\"OElig;\": \"\\u0152\",\n\t\"oelig;\": \"\\u0153\",\n\t\"ofcir;\": \"\\u29BF\",\n\t\"Ofr;\": \"\\uD835\\uDD12\",\n\t\"ofr;\": \"\\uD835\\uDD2C\",\n\t\"ogon;\": \"\\u02DB\",\n\t\"Ograve;\": \"\\u00D2\",\n\t\"Ograve\": \"\\u00D2\",\n\t\"ograve;\": \"\\u00F2\",\n\t\"ograve\": \"\\u00F2\",\n\t\"ogt;\": \"\\u29C1\",\n\t\"ohbar;\": \"\\u29B5\",\n\t\"ohm;\": \"\\u03A9\",\n\t\"oint;\": \"\\u222E\",\n\t\"olarr;\": \"\\u21BA\",\n\t\"olcir;\": \"\\u29BE\",\n\t\"olcross;\": \"\\u29BB\",\n\t\"oline;\": \"\\u203E\",\n\t\"olt;\": \"\\u29C0\",\n\t\"Omacr;\": \"\\u014C\",\n\t\"omacr;\": \"\\u014D\",\n\t\"Omega;\": \"\\u03A9\",\n\t\"omega;\": \"\\u03C9\",\n\t\"Omicron;\": \"\\u039F\",\n\t\"omicron;\": \"\\u03BF\",\n\t\"omid;\": \"\\u29B6\",\n\t\"ominus;\": \"\\u2296\",\n\t\"Oopf;\": \"\\uD835\\uDD46\",\n\t\"oopf;\": \"\\uD835\\uDD60\",\n\t\"opar;\": \"\\u29B7\",\n\t\"OpenCurlyDoubleQuote;\": \"\\u201C\",\n\t\"OpenCurlyQuote;\": \"\\u2018\",\n\t\"operp;\": \"\\u29B9\",\n\t\"oplus;\": \"\\u2295\",\n\t\"orarr;\": \"\\u21BB\",\n\t\"Or;\": \"\\u2A54\",\n\t\"or;\": \"\\u2228\",\n\t\"ord;\": \"\\u2A5D\",\n\t\"order;\": \"\\u2134\",\n\t\"orderof;\": \"\\u2134\",\n\t\"ordf;\": \"\\u00AA\",\n\t\"ordf\": \"\\u00AA\",\n\t\"ordm;\": \"\\u00BA\",\n\t\"ordm\": \"\\u00BA\",\n\t\"origof;\": \"\\u22B6\",\n\t\"oror;\": \"\\u2A56\",\n\t\"orslope;\": \"\\u2A57\",\n\t\"orv;\": \"\\u2A5B\",\n\t\"oS;\": \"\\u24C8\",\n\t\"Oscr;\": \"\\uD835\\uDCAA\",\n\t\"oscr;\": \"\\u2134\",\n\t\"Oslash;\": \"\\u00D8\",\n\t\"Oslash\": \"\\u00D8\",\n\t\"oslash;\": \"\\u00F8\",\n\t\"oslash\": \"\\u00F8\",\n\t\"osol;\": \"\\u2298\",\n\t\"Otilde;\": \"\\u00D5\",\n\t\"Otilde\": \"\\u00D5\",\n\t\"otilde;\": \"\\u00F5\",\n\t\"otilde\": \"\\u00F5\",\n\t\"otimesas;\": \"\\u2A36\",\n\t\"Otimes;\": \"\\u2A37\",\n\t\"otimes;\": \"\\u2297\",\n\t\"Ouml;\": \"\\u00D6\",\n\t\"Ouml\": \"\\u00D6\",\n\t\"ouml;\": \"\\u00F6\",\n\t\"ouml\": \"\\u00F6\",\n\t\"ovbar;\": \"\\u233D\",\n\t\"OverBar;\": \"\\u203E\",\n\t\"OverBrace;\": \"\\u23DE\",\n\t\"OverBracket;\": \"\\u23B4\",\n\t\"OverParenthesis;\": \"\\u23DC\",\n\t\"para;\": \"\\u00B6\",\n\t\"para\": \"\\u00B6\",\n\t\"parallel;\": \"\\u2225\",\n\t\"par;\": \"\\u2225\",\n\t\"parsim;\": \"\\u2AF3\",\n\t\"parsl;\": \"\\u2AFD\",\n\t\"part;\": \"\\u2202\",\n\t\"PartialD;\": \"\\u2202\",\n\t\"Pcy;\": \"\\u041F\",\n\t\"pcy;\": \"\\u043F\",\n\t\"percnt;\": \"\\u0025\",\n\t\"period;\": \"\\u002E\",\n\t\"permil;\": \"\\u2030\",\n\t\"perp;\": \"\\u22A5\",\n\t\"pertenk;\": \"\\u2031\",\n\t\"Pfr;\": \"\\uD835\\uDD13\",\n\t\"pfr;\": \"\\uD835\\uDD2D\",\n\t\"Phi;\": \"\\u03A6\",\n\t\"phi;\": \"\\u03C6\",\n\t\"phiv;\": \"\\u03D5\",\n\t\"phmmat;\": \"\\u2133\",\n\t\"phone;\": \"\\u260E\",\n\t\"Pi;\": \"\\u03A0\",\n\t\"pi;\": \"\\u03C0\",\n\t\"pitchfork;\": \"\\u22D4\",\n\t\"piv;\": \"\\u03D6\",\n\t\"planck;\": \"\\u210F\",\n\t\"planckh;\": \"\\u210E\",\n\t\"plankv;\": \"\\u210F\",\n\t\"plusacir;\": \"\\u2A23\",\n\t\"plusb;\": \"\\u229E\",\n\t\"pluscir;\": \"\\u2A22\",\n\t\"plus;\": \"\\u002B\",\n\t\"plusdo;\": \"\\u2214\",\n\t\"plusdu;\": \"\\u2A25\",\n\t\"pluse;\": \"\\u2A72\",\n\t\"PlusMinus;\": \"\\u00B1\",\n\t\"plusmn;\": \"\\u00B1\",\n\t\"plusmn\": \"\\u00B1\",\n\t\"plussim;\": \"\\u2A26\",\n\t\"plustwo;\": \"\\u2A27\",\n\t\"pm;\": \"\\u00B1\",\n\t\"Poincareplane;\": \"\\u210C\",\n\t\"pointint;\": \"\\u2A15\",\n\t\"popf;\": \"\\uD835\\uDD61\",\n\t\"Popf;\": \"\\u2119\",\n\t\"pound;\": \"\\u00A3\",\n\t\"pound\": \"\\u00A3\",\n\t\"prap;\": \"\\u2AB7\",\n\t\"Pr;\": \"\\u2ABB\",\n\t\"pr;\": \"\\u227A\",\n\t\"prcue;\": \"\\u227C\",\n\t\"precapprox;\": \"\\u2AB7\",\n\t\"prec;\": \"\\u227A\",\n\t\"preccurlyeq;\": \"\\u227C\",\n\t\"Precedes;\": \"\\u227A\",\n\t\"PrecedesEqual;\": \"\\u2AAF\",\n\t\"PrecedesSlantEqual;\": \"\\u227C\",\n\t\"PrecedesTilde;\": \"\\u227E\",\n\t\"preceq;\": \"\\u2AAF\",\n\t\"precnapprox;\": \"\\u2AB9\",\n\t\"precneqq;\": \"\\u2AB5\",\n\t\"precnsim;\": \"\\u22E8\",\n\t\"pre;\": \"\\u2AAF\",\n\t\"prE;\": \"\\u2AB3\",\n\t\"precsim;\": \"\\u227E\",\n\t\"prime;\": \"\\u2032\",\n\t\"Prime;\": \"\\u2033\",\n\t\"primes;\": \"\\u2119\",\n\t\"prnap;\": \"\\u2AB9\",\n\t\"prnE;\": \"\\u2AB5\",\n\t\"prnsim;\": \"\\u22E8\",\n\t\"prod;\": \"\\u220F\",\n\t\"Product;\": \"\\u220F\",\n\t\"profalar;\": \"\\u232E\",\n\t\"profline;\": \"\\u2312\",\n\t\"profsurf;\": \"\\u2313\",\n\t\"prop;\": \"\\u221D\",\n\t\"Proportional;\": \"\\u221D\",\n\t\"Proportion;\": \"\\u2237\",\n\t\"propto;\": \"\\u221D\",\n\t\"prsim;\": \"\\u227E\",\n\t\"prurel;\": \"\\u22B0\",\n\t\"Pscr;\": \"\\uD835\\uDCAB\",\n\t\"pscr;\": \"\\uD835\\uDCC5\",\n\t\"Psi;\": \"\\u03A8\",\n\t\"psi;\": \"\\u03C8\",\n\t\"puncsp;\": \"\\u2008\",\n\t\"Qfr;\": \"\\uD835\\uDD14\",\n\t\"qfr;\": \"\\uD835\\uDD2E\",\n\t\"qint;\": \"\\u2A0C\",\n\t\"qopf;\": \"\\uD835\\uDD62\",\n\t\"Qopf;\": \"\\u211A\",\n\t\"qprime;\": \"\\u2057\",\n\t\"Qscr;\": \"\\uD835\\uDCAC\",\n\t\"qscr;\": \"\\uD835\\uDCC6\",\n\t\"quaternions;\": \"\\u210D\",\n\t\"quatint;\": \"\\u2A16\",\n\t\"quest;\": \"\\u003F\",\n\t\"questeq;\": \"\\u225F\",\n\t\"quot;\": \"\\u0022\",\n\t\"quot\": \"\\u0022\",\n\t\"QUOT;\": \"\\u0022\",\n\t\"QUOT\": \"\\u0022\",\n\t\"rAarr;\": \"\\u21DB\",\n\t\"race;\": \"\\u223D\\u0331\",\n\t\"Racute;\": \"\\u0154\",\n\t\"racute;\": \"\\u0155\",\n\t\"radic;\": \"\\u221A\",\n\t\"raemptyv;\": \"\\u29B3\",\n\t\"rang;\": \"\\u27E9\",\n\t\"Rang;\": \"\\u27EB\",\n\t\"rangd;\": \"\\u2992\",\n\t\"range;\": \"\\u29A5\",\n\t\"rangle;\": \"\\u27E9\",\n\t\"raquo;\": \"\\u00BB\",\n\t\"raquo\": \"\\u00BB\",\n\t\"rarrap;\": \"\\u2975\",\n\t\"rarrb;\": \"\\u21E5\",\n\t\"rarrbfs;\": \"\\u2920\",\n\t\"rarrc;\": \"\\u2933\",\n\t\"rarr;\": \"\\u2192\",\n\t\"Rarr;\": \"\\u21A0\",\n\t\"rArr;\": \"\\u21D2\",\n\t\"rarrfs;\": \"\\u291E\",\n\t\"rarrhk;\": \"\\u21AA\",\n\t\"rarrlp;\": \"\\u21AC\",\n\t\"rarrpl;\": \"\\u2945\",\n\t\"rarrsim;\": \"\\u2974\",\n\t\"Rarrtl;\": \"\\u2916\",\n\t\"rarrtl;\": \"\\u21A3\",\n\t\"rarrw;\": \"\\u219D\",\n\t\"ratail;\": \"\\u291A\",\n\t\"rAtail;\": \"\\u291C\",\n\t\"ratio;\": \"\\u2236\",\n\t\"rationals;\": \"\\u211A\",\n\t\"rbarr;\": \"\\u290D\",\n\t\"rBarr;\": \"\\u290F\",\n\t\"RBarr;\": \"\\u2910\",\n\t\"rbbrk;\": \"\\u2773\",\n\t\"rbrace;\": \"\\u007D\",\n\t\"rbrack;\": \"\\u005D\",\n\t\"rbrke;\": \"\\u298C\",\n\t\"rbrksld;\": \"\\u298E\",\n\t\"rbrkslu;\": \"\\u2990\",\n\t\"Rcaron;\": \"\\u0158\",\n\t\"rcaron;\": \"\\u0159\",\n\t\"Rcedil;\": \"\\u0156\",\n\t\"rcedil;\": \"\\u0157\",\n\t\"rceil;\": \"\\u2309\",\n\t\"rcub;\": \"\\u007D\",\n\t\"Rcy;\": \"\\u0420\",\n\t\"rcy;\": \"\\u0440\",\n\t\"rdca;\": \"\\u2937\",\n\t\"rdldhar;\": \"\\u2969\",\n\t\"rdquo;\": \"\\u201D\",\n\t\"rdquor;\": \"\\u201D\",\n\t\"rdsh;\": \"\\u21B3\",\n\t\"real;\": \"\\u211C\",\n\t\"realine;\": \"\\u211B\",\n\t\"realpart;\": \"\\u211C\",\n\t\"reals;\": \"\\u211D\",\n\t\"Re;\": \"\\u211C\",\n\t\"rect;\": \"\\u25AD\",\n\t\"reg;\": \"\\u00AE\",\n\t\"reg\": \"\\u00AE\",\n\t\"REG;\": \"\\u00AE\",\n\t\"REG\": \"\\u00AE\",\n\t\"ReverseElement;\": \"\\u220B\",\n\t\"ReverseEquilibrium;\": \"\\u21CB\",\n\t\"ReverseUpEquilibrium;\": \"\\u296F\",\n\t\"rfisht;\": \"\\u297D\",\n\t\"rfloor;\": \"\\u230B\",\n\t\"rfr;\": \"\\uD835\\uDD2F\",\n\t\"Rfr;\": \"\\u211C\",\n\t\"rHar;\": \"\\u2964\",\n\t\"rhard;\": \"\\u21C1\",\n\t\"rharu;\": \"\\u21C0\",\n\t\"rharul;\": \"\\u296C\",\n\t\"Rho;\": \"\\u03A1\",\n\t\"rho;\": \"\\u03C1\",\n\t\"rhov;\": \"\\u03F1\",\n\t\"RightAngleBracket;\": \"\\u27E9\",\n\t\"RightArrowBar;\": \"\\u21E5\",\n\t\"rightarrow;\": \"\\u2192\",\n\t\"RightArrow;\": \"\\u2192\",\n\t\"Rightarrow;\": \"\\u21D2\",\n\t\"RightArrowLeftArrow;\": \"\\u21C4\",\n\t\"rightarrowtail;\": \"\\u21A3\",\n\t\"RightCeiling;\": \"\\u2309\",\n\t\"RightDoubleBracket;\": \"\\u27E7\",\n\t\"RightDownTeeVector;\": \"\\u295D\",\n\t\"RightDownVectorBar;\": \"\\u2955\",\n\t\"RightDownVector;\": \"\\u21C2\",\n\t\"RightFloor;\": \"\\u230B\",\n\t\"rightharpoondown;\": \"\\u21C1\",\n\t\"rightharpoonup;\": \"\\u21C0\",\n\t\"rightleftarrows;\": \"\\u21C4\",\n\t\"rightleftharpoons;\": \"\\u21CC\",\n\t\"rightrightarrows;\": \"\\u21C9\",\n\t\"rightsquigarrow;\": \"\\u219D\",\n\t\"RightTeeArrow;\": \"\\u21A6\",\n\t\"RightTee;\": \"\\u22A2\",\n\t\"RightTeeVector;\": \"\\u295B\",\n\t\"rightthreetimes;\": \"\\u22CC\",\n\t\"RightTriangleBar;\": \"\\u29D0\",\n\t\"RightTriangle;\": \"\\u22B3\",\n\t\"RightTriangleEqual;\": \"\\u22B5\",\n\t\"RightUpDownVector;\": \"\\u294F\",\n\t\"RightUpTeeVector;\": \"\\u295C\",\n\t\"RightUpVectorBar;\": \"\\u2954\",\n\t\"RightUpVector;\": \"\\u21BE\",\n\t\"RightVectorBar;\": \"\\u2953\",\n\t\"RightVector;\": \"\\u21C0\",\n\t\"ring;\": \"\\u02DA\",\n\t\"risingdotseq;\": \"\\u2253\",\n\t\"rlarr;\": \"\\u21C4\",\n\t\"rlhar;\": \"\\u21CC\",\n\t\"rlm;\": \"\\u200F\",\n\t\"rmoustache;\": \"\\u23B1\",\n\t\"rmoust;\": \"\\u23B1\",\n\t\"rnmid;\": \"\\u2AEE\",\n\t\"roang;\": \"\\u27ED\",\n\t\"roarr;\": \"\\u21FE\",\n\t\"robrk;\": \"\\u27E7\",\n\t\"ropar;\": \"\\u2986\",\n\t\"ropf;\": \"\\uD835\\uDD63\",\n\t\"Ropf;\": \"\\u211D\",\n\t\"roplus;\": \"\\u2A2E\",\n\t\"rotimes;\": \"\\u2A35\",\n\t\"RoundImplies;\": \"\\u2970\",\n\t\"rpar;\": \"\\u0029\",\n\t\"rpargt;\": \"\\u2994\",\n\t\"rppolint;\": \"\\u2A12\",\n\t\"rrarr;\": \"\\u21C9\",\n\t\"Rrightarrow;\": \"\\u21DB\",\n\t\"rsaquo;\": \"\\u203A\",\n\t\"rscr;\": \"\\uD835\\uDCC7\",\n\t\"Rscr;\": \"\\u211B\",\n\t\"rsh;\": \"\\u21B1\",\n\t\"Rsh;\": \"\\u21B1\",\n\t\"rsqb;\": \"\\u005D\",\n\t\"rsquo;\": \"\\u2019\",\n\t\"rsquor;\": \"\\u2019\",\n\t\"rthree;\": \"\\u22CC\",\n\t\"rtimes;\": \"\\u22CA\",\n\t\"rtri;\": \"\\u25B9\",\n\t\"rtrie;\": \"\\u22B5\",\n\t\"rtrif;\": \"\\u25B8\",\n\t\"rtriltri;\": \"\\u29CE\",\n\t\"RuleDelayed;\": \"\\u29F4\",\n\t\"ruluhar;\": \"\\u2968\",\n\t\"rx;\": \"\\u211E\",\n\t\"Sacute;\": \"\\u015A\",\n\t\"sacute;\": \"\\u015B\",\n\t\"sbquo;\": \"\\u201A\",\n\t\"scap;\": \"\\u2AB8\",\n\t\"Scaron;\": \"\\u0160\",\n\t\"scaron;\": \"\\u0161\",\n\t\"Sc;\": \"\\u2ABC\",\n\t\"sc;\": \"\\u227B\",\n\t\"sccue;\": \"\\u227D\",\n\t\"sce;\": \"\\u2AB0\",\n\t\"scE;\": \"\\u2AB4\",\n\t\"Scedil;\": \"\\u015E\",\n\t\"scedil;\": \"\\u015F\",\n\t\"Scirc;\": \"\\u015C\",\n\t\"scirc;\": \"\\u015D\",\n\t\"scnap;\": \"\\u2ABA\",\n\t\"scnE;\": \"\\u2AB6\",\n\t\"scnsim;\": \"\\u22E9\",\n\t\"scpolint;\": \"\\u2A13\",\n\t\"scsim;\": \"\\u227F\",\n\t\"Scy;\": \"\\u0421\",\n\t\"scy;\": \"\\u0441\",\n\t\"sdotb;\": \"\\u22A1\",\n\t\"sdot;\": \"\\u22C5\",\n\t\"sdote;\": \"\\u2A66\",\n\t\"searhk;\": \"\\u2925\",\n\t\"searr;\": \"\\u2198\",\n\t\"seArr;\": \"\\u21D8\",\n\t\"searrow;\": \"\\u2198\",\n\t\"sect;\": \"\\u00A7\",\n\t\"sect\": \"\\u00A7\",\n\t\"semi;\": \"\\u003B\",\n\t\"seswar;\": \"\\u2929\",\n\t\"setminus;\": \"\\u2216\",\n\t\"setmn;\": \"\\u2216\",\n\t\"sext;\": \"\\u2736\",\n\t\"Sfr;\": \"\\uD835\\uDD16\",\n\t\"sfr;\": \"\\uD835\\uDD30\",\n\t\"sfrown;\": \"\\u2322\",\n\t\"sharp;\": \"\\u266F\",\n\t\"SHCHcy;\": \"\\u0429\",\n\t\"shchcy;\": \"\\u0449\",\n\t\"SHcy;\": \"\\u0428\",\n\t\"shcy;\": \"\\u0448\",\n\t\"ShortDownArrow;\": \"\\u2193\",\n\t\"ShortLeftArrow;\": \"\\u2190\",\n\t\"shortmid;\": \"\\u2223\",\n\t\"shortparallel;\": \"\\u2225\",\n\t\"ShortRightArrow;\": \"\\u2192\",\n\t\"ShortUpArrow;\": \"\\u2191\",\n\t\"shy;\": \"\\u00AD\",\n\t\"shy\": \"\\u00AD\",\n\t\"Sigma;\": \"\\u03A3\",\n\t\"sigma;\": \"\\u03C3\",\n\t\"sigmaf;\": \"\\u03C2\",\n\t\"sigmav;\": \"\\u03C2\",\n\t\"sim;\": \"\\u223C\",\n\t\"simdot;\": \"\\u2A6A\",\n\t\"sime;\": \"\\u2243\",\n\t\"simeq;\": \"\\u2243\",\n\t\"simg;\": \"\\u2A9E\",\n\t\"simgE;\": \"\\u2AA0\",\n\t\"siml;\": \"\\u2A9D\",\n\t\"simlE;\": \"\\u2A9F\",\n\t\"simne;\": \"\\u2246\",\n\t\"simplus;\": \"\\u2A24\",\n\t\"simrarr;\": \"\\u2972\",\n\t\"slarr;\": \"\\u2190\",\n\t\"SmallCircle;\": \"\\u2218\",\n\t\"smallsetminus;\": \"\\u2216\",\n\t\"smashp;\": \"\\u2A33\",\n\t\"smeparsl;\": \"\\u29E4\",\n\t\"smid;\": \"\\u2223\",\n\t\"smile;\": \"\\u2323\",\n\t\"smt;\": \"\\u2AAA\",\n\t\"smte;\": \"\\u2AAC\",\n\t\"smtes;\": \"\\u2AAC\\uFE00\",\n\t\"SOFTcy;\": \"\\u042C\",\n\t\"softcy;\": \"\\u044C\",\n\t\"solbar;\": \"\\u233F\",\n\t\"solb;\": \"\\u29C4\",\n\t\"sol;\": \"\\u002F\",\n\t\"Sopf;\": \"\\uD835\\uDD4A\",\n\t\"sopf;\": \"\\uD835\\uDD64\",\n\t\"spades;\": \"\\u2660\",\n\t\"spadesuit;\": \"\\u2660\",\n\t\"spar;\": \"\\u2225\",\n\t\"sqcap;\": \"\\u2293\",\n\t\"sqcaps;\": \"\\u2293\\uFE00\",\n\t\"sqcup;\": \"\\u2294\",\n\t\"sqcups;\": \"\\u2294\\uFE00\",\n\t\"Sqrt;\": \"\\u221A\",\n\t\"sqsub;\": \"\\u228F\",\n\t\"sqsube;\": \"\\u2291\",\n\t\"sqsubset;\": \"\\u228F\",\n\t\"sqsubseteq;\": \"\\u2291\",\n\t\"sqsup;\": \"\\u2290\",\n\t\"sqsupe;\": \"\\u2292\",\n\t\"sqsupset;\": \"\\u2290\",\n\t\"sqsupseteq;\": \"\\u2292\",\n\t\"square;\": \"\\u25A1\",\n\t\"Square;\": \"\\u25A1\",\n\t\"SquareIntersection;\": \"\\u2293\",\n\t\"SquareSubset;\": \"\\u228F\",\n\t\"SquareSubsetEqual;\": \"\\u2291\",\n\t\"SquareSuperset;\": \"\\u2290\",\n\t\"SquareSupersetEqual;\": \"\\u2292\",\n\t\"SquareUnion;\": \"\\u2294\",\n\t\"squarf;\": \"\\u25AA\",\n\t\"squ;\": \"\\u25A1\",\n\t\"squf;\": \"\\u25AA\",\n\t\"srarr;\": \"\\u2192\",\n\t\"Sscr;\": \"\\uD835\\uDCAE\",\n\t\"sscr;\": \"\\uD835\\uDCC8\",\n\t\"ssetmn;\": \"\\u2216\",\n\t\"ssmile;\": \"\\u2323\",\n\t\"sstarf;\": \"\\u22C6\",\n\t\"Star;\": \"\\u22C6\",\n\t\"star;\": \"\\u2606\",\n\t\"starf;\": \"\\u2605\",\n\t\"straightepsilon;\": \"\\u03F5\",\n\t\"straightphi;\": \"\\u03D5\",\n\t\"strns;\": \"\\u00AF\",\n\t\"sub;\": \"\\u2282\",\n\t\"Sub;\": \"\\u22D0\",\n\t\"subdot;\": \"\\u2ABD\",\n\t\"subE;\": \"\\u2AC5\",\n\t\"sube;\": \"\\u2286\",\n\t\"subedot;\": \"\\u2AC3\",\n\t\"submult;\": \"\\u2AC1\",\n\t\"subnE;\": \"\\u2ACB\",\n\t\"subne;\": \"\\u228A\",\n\t\"subplus;\": \"\\u2ABF\",\n\t\"subrarr;\": \"\\u2979\",\n\t\"subset;\": \"\\u2282\",\n\t\"Subset;\": \"\\u22D0\",\n\t\"subseteq;\": \"\\u2286\",\n\t\"subseteqq;\": \"\\u2AC5\",\n\t\"SubsetEqual;\": \"\\u2286\",\n\t\"subsetneq;\": \"\\u228A\",\n\t\"subsetneqq;\": \"\\u2ACB\",\n\t\"subsim;\": \"\\u2AC7\",\n\t\"subsub;\": \"\\u2AD5\",\n\t\"subsup;\": \"\\u2AD3\",\n\t\"succapprox;\": \"\\u2AB8\",\n\t\"succ;\": \"\\u227B\",\n\t\"succcurlyeq;\": \"\\u227D\",\n\t\"Succeeds;\": \"\\u227B\",\n\t\"SucceedsEqual;\": \"\\u2AB0\",\n\t\"SucceedsSlantEqual;\": \"\\u227D\",\n\t\"SucceedsTilde;\": \"\\u227F\",\n\t\"succeq;\": \"\\u2AB0\",\n\t\"succnapprox;\": \"\\u2ABA\",\n\t\"succneqq;\": \"\\u2AB6\",\n\t\"succnsim;\": \"\\u22E9\",\n\t\"succsim;\": \"\\u227F\",\n\t\"SuchThat;\": \"\\u220B\",\n\t\"sum;\": \"\\u2211\",\n\t\"Sum;\": \"\\u2211\",\n\t\"sung;\": \"\\u266A\",\n\t\"sup1;\": \"\\u00B9\",\n\t\"sup1\": \"\\u00B9\",\n\t\"sup2;\": \"\\u00B2\",\n\t\"sup2\": \"\\u00B2\",\n\t\"sup3;\": \"\\u00B3\",\n\t\"sup3\": \"\\u00B3\",\n\t\"sup;\": \"\\u2283\",\n\t\"Sup;\": \"\\u22D1\",\n\t\"supdot;\": \"\\u2ABE\",\n\t\"supdsub;\": \"\\u2AD8\",\n\t\"supE;\": \"\\u2AC6\",\n\t\"supe;\": \"\\u2287\",\n\t\"supedot;\": \"\\u2AC4\",\n\t\"Superset;\": \"\\u2283\",\n\t\"SupersetEqual;\": \"\\u2287\",\n\t\"suphsol;\": \"\\u27C9\",\n\t\"suphsub;\": \"\\u2AD7\",\n\t\"suplarr;\": \"\\u297B\",\n\t\"supmult;\": \"\\u2AC2\",\n\t\"supnE;\": \"\\u2ACC\",\n\t\"supne;\": \"\\u228B\",\n\t\"supplus;\": \"\\u2AC0\",\n\t\"supset;\": \"\\u2283\",\n\t\"Supset;\": \"\\u22D1\",\n\t\"supseteq;\": \"\\u2287\",\n\t\"supseteqq;\": \"\\u2AC6\",\n\t\"supsetneq;\": \"\\u228B\",\n\t\"supsetneqq;\": \"\\u2ACC\",\n\t\"supsim;\": \"\\u2AC8\",\n\t\"supsub;\": \"\\u2AD4\",\n\t\"supsup;\": \"\\u2AD6\",\n\t\"swarhk;\": \"\\u2926\",\n\t\"swarr;\": \"\\u2199\",\n\t\"swArr;\": \"\\u21D9\",\n\t\"swarrow;\": \"\\u2199\",\n\t\"swnwar;\": \"\\u292A\",\n\t\"szlig;\": \"\\u00DF\",\n\t\"szlig\": \"\\u00DF\",\n\t\"Tab;\": \"\\u0009\",\n\t\"target;\": \"\\u2316\",\n\t\"Tau;\": \"\\u03A4\",\n\t\"tau;\": \"\\u03C4\",\n\t\"tbrk;\": \"\\u23B4\",\n\t\"Tcaron;\": \"\\u0164\",\n\t\"tcaron;\": \"\\u0165\",\n\t\"Tcedil;\": \"\\u0162\",\n\t\"tcedil;\": \"\\u0163\",\n\t\"Tcy;\": \"\\u0422\",\n\t\"tcy;\": \"\\u0442\",\n\t\"tdot;\": \"\\u20DB\",\n\t\"telrec;\": \"\\u2315\",\n\t\"Tfr;\": \"\\uD835\\uDD17\",\n\t\"tfr;\": \"\\uD835\\uDD31\",\n\t\"there4;\": \"\\u2234\",\n\t\"therefore;\": \"\\u2234\",\n\t\"Therefore;\": \"\\u2234\",\n\t\"Theta;\": \"\\u0398\",\n\t\"theta;\": \"\\u03B8\",\n\t\"thetasym;\": \"\\u03D1\",\n\t\"thetav;\": \"\\u03D1\",\n\t\"thickapprox;\": \"\\u2248\",\n\t\"thicksim;\": \"\\u223C\",\n\t\"ThickSpace;\": \"\\u205F\\u200A\",\n\t\"ThinSpace;\": \"\\u2009\",\n\t\"thinsp;\": \"\\u2009\",\n\t\"thkap;\": \"\\u2248\",\n\t\"thksim;\": \"\\u223C\",\n\t\"THORN;\": \"\\u00DE\",\n\t\"THORN\": \"\\u00DE\",\n\t\"thorn;\": \"\\u00FE\",\n\t\"thorn\": \"\\u00FE\",\n\t\"tilde;\": \"\\u02DC\",\n\t\"Tilde;\": \"\\u223C\",\n\t\"TildeEqual;\": \"\\u2243\",\n\t\"TildeFullEqual;\": \"\\u2245\",\n\t\"TildeTilde;\": \"\\u2248\",\n\t\"timesbar;\": \"\\u2A31\",\n\t\"timesb;\": \"\\u22A0\",\n\t\"times;\": \"\\u00D7\",\n\t\"times\": \"\\u00D7\",\n\t\"timesd;\": \"\\u2A30\",\n\t\"tint;\": \"\\u222D\",\n\t\"toea;\": \"\\u2928\",\n\t\"topbot;\": \"\\u2336\",\n\t\"topcir;\": \"\\u2AF1\",\n\t\"top;\": \"\\u22A4\",\n\t\"Topf;\": \"\\uD835\\uDD4B\",\n\t\"topf;\": \"\\uD835\\uDD65\",\n\t\"topfork;\": \"\\u2ADA\",\n\t\"tosa;\": \"\\u2929\",\n\t\"tprime;\": \"\\u2034\",\n\t\"trade;\": \"\\u2122\",\n\t\"TRADE;\": \"\\u2122\",\n\t\"triangle;\": \"\\u25B5\",\n\t\"triangledown;\": \"\\u25BF\",\n\t\"triangleleft;\": \"\\u25C3\",\n\t\"trianglelefteq;\": \"\\u22B4\",\n\t\"triangleq;\": \"\\u225C\",\n\t\"triangleright;\": \"\\u25B9\",\n\t\"trianglerighteq;\": \"\\u22B5\",\n\t\"tridot;\": \"\\u25EC\",\n\t\"trie;\": \"\\u225C\",\n\t\"triminus;\": \"\\u2A3A\",\n\t\"TripleDot;\": \"\\u20DB\",\n\t\"triplus;\": \"\\u2A39\",\n\t\"trisb;\": \"\\u29CD\",\n\t\"tritime;\": \"\\u2A3B\",\n\t\"trpezium;\": \"\\u23E2\",\n\t\"Tscr;\": \"\\uD835\\uDCAF\",\n\t\"tscr;\": \"\\uD835\\uDCC9\",\n\t\"TScy;\": \"\\u0426\",\n\t\"tscy;\": \"\\u0446\",\n\t\"TSHcy;\": \"\\u040B\",\n\t\"tshcy;\": \"\\u045B\",\n\t\"Tstrok;\": \"\\u0166\",\n\t\"tstrok;\": \"\\u0167\",\n\t\"twixt;\": \"\\u226C\",\n\t\"twoheadleftarrow;\": \"\\u219E\",\n\t\"twoheadrightarrow;\": \"\\u21A0\",\n\t\"Uacute;\": \"\\u00DA\",\n\t\"Uacute\": \"\\u00DA\",\n\t\"uacute;\": \"\\u00FA\",\n\t\"uacute\": \"\\u00FA\",\n\t\"uarr;\": \"\\u2191\",\n\t\"Uarr;\": \"\\u219F\",\n\t\"uArr;\": \"\\u21D1\",\n\t\"Uarrocir;\": \"\\u2949\",\n\t\"Ubrcy;\": \"\\u040E\",\n\t\"ubrcy;\": \"\\u045E\",\n\t\"Ubreve;\": \"\\u016C\",\n\t\"ubreve;\": \"\\u016D\",\n\t\"Ucirc;\": \"\\u00DB\",\n\t\"Ucirc\": \"\\u00DB\",\n\t\"ucirc;\": \"\\u00FB\",\n\t\"ucirc\": \"\\u00FB\",\n\t\"Ucy;\": \"\\u0423\",\n\t\"ucy;\": \"\\u0443\",\n\t\"udarr;\": \"\\u21C5\",\n\t\"Udblac;\": \"\\u0170\",\n\t\"udblac;\": \"\\u0171\",\n\t\"udhar;\": \"\\u296E\",\n\t\"ufisht;\": \"\\u297E\",\n\t\"Ufr;\": \"\\uD835\\uDD18\",\n\t\"ufr;\": \"\\uD835\\uDD32\",\n\t\"Ugrave;\": \"\\u00D9\",\n\t\"Ugrave\": \"\\u00D9\",\n\t\"ugrave;\": \"\\u00F9\",\n\t\"ugrave\": \"\\u00F9\",\n\t\"uHar;\": \"\\u2963\",\n\t\"uharl;\": \"\\u21BF\",\n\t\"uharr;\": \"\\u21BE\",\n\t\"uhblk;\": \"\\u2580\",\n\t\"ulcorn;\": \"\\u231C\",\n\t\"ulcorner;\": \"\\u231C\",\n\t\"ulcrop;\": \"\\u230F\",\n\t\"ultri;\": \"\\u25F8\",\n\t\"Umacr;\": \"\\u016A\",\n\t\"umacr;\": \"\\u016B\",\n\t\"uml;\": \"\\u00A8\",\n\t\"uml\": \"\\u00A8\",\n\t\"UnderBar;\": \"\\u005F\",\n\t\"UnderBrace;\": \"\\u23DF\",\n\t\"UnderBracket;\": \"\\u23B5\",\n\t\"UnderParenthesis;\": \"\\u23DD\",\n\t\"Union;\": \"\\u22C3\",\n\t\"UnionPlus;\": \"\\u228E\",\n\t\"Uogon;\": \"\\u0172\",\n\t\"uogon;\": \"\\u0173\",\n\t\"Uopf;\": \"\\uD835\\uDD4C\",\n\t\"uopf;\": \"\\uD835\\uDD66\",\n\t\"UpArrowBar;\": \"\\u2912\",\n\t\"uparrow;\": \"\\u2191\",\n\t\"UpArrow;\": \"\\u2191\",\n\t\"Uparrow;\": \"\\u21D1\",\n\t\"UpArrowDownArrow;\": \"\\u21C5\",\n\t\"updownarrow;\": \"\\u2195\",\n\t\"UpDownArrow;\": \"\\u2195\",\n\t\"Updownarrow;\": \"\\u21D5\",\n\t\"UpEquilibrium;\": \"\\u296E\",\n\t\"upharpoonleft;\": \"\\u21BF\",\n\t\"upharpoonright;\": \"\\u21BE\",\n\t\"uplus;\": \"\\u228E\",\n\t\"UpperLeftArrow;\": \"\\u2196\",\n\t\"UpperRightArrow;\": \"\\u2197\",\n\t\"upsi;\": \"\\u03C5\",\n\t\"Upsi;\": \"\\u03D2\",\n\t\"upsih;\": \"\\u03D2\",\n\t\"Upsilon;\": \"\\u03A5\",\n\t\"upsilon;\": \"\\u03C5\",\n\t\"UpTeeArrow;\": \"\\u21A5\",\n\t\"UpTee;\": \"\\u22A5\",\n\t\"upuparrows;\": \"\\u21C8\",\n\t\"urcorn;\": \"\\u231D\",\n\t\"urcorner;\": \"\\u231D\",\n\t\"urcrop;\": \"\\u230E\",\n\t\"Uring;\": \"\\u016E\",\n\t\"uring;\": \"\\u016F\",\n\t\"urtri;\": \"\\u25F9\",\n\t\"Uscr;\": \"\\uD835\\uDCB0\",\n\t\"uscr;\": \"\\uD835\\uDCCA\",\n\t\"utdot;\": \"\\u22F0\",\n\t\"Utilde;\": \"\\u0168\",\n\t\"utilde;\": \"\\u0169\",\n\t\"utri;\": \"\\u25B5\",\n\t\"utrif;\": \"\\u25B4\",\n\t\"uuarr;\": \"\\u21C8\",\n\t\"Uuml;\": \"\\u00DC\",\n\t\"Uuml\": \"\\u00DC\",\n\t\"uuml;\": \"\\u00FC\",\n\t\"uuml\": \"\\u00FC\",\n\t\"uwangle;\": \"\\u29A7\",\n\t\"vangrt;\": \"\\u299C\",\n\t\"varepsilon;\": \"\\u03F5\",\n\t\"varkappa;\": \"\\u03F0\",\n\t\"varnothing;\": \"\\u2205\",\n\t\"varphi;\": \"\\u03D5\",\n\t\"varpi;\": \"\\u03D6\",\n\t\"varpropto;\": \"\\u221D\",\n\t\"varr;\": \"\\u2195\",\n\t\"vArr;\": \"\\u21D5\",\n\t\"varrho;\": \"\\u03F1\",\n\t\"varsigma;\": \"\\u03C2\",\n\t\"varsubsetneq;\": \"\\u228A\\uFE00\",\n\t\"varsubsetneqq;\": \"\\u2ACB\\uFE00\",\n\t\"varsupsetneq;\": \"\\u228B\\uFE00\",\n\t\"varsupsetneqq;\": \"\\u2ACC\\uFE00\",\n\t\"vartheta;\": \"\\u03D1\",\n\t\"vartriangleleft;\": \"\\u22B2\",\n\t\"vartriangleright;\": \"\\u22B3\",\n\t\"vBar;\": \"\\u2AE8\",\n\t\"Vbar;\": \"\\u2AEB\",\n\t\"vBarv;\": \"\\u2AE9\",\n\t\"Vcy;\": \"\\u0412\",\n\t\"vcy;\": \"\\u0432\",\n\t\"vdash;\": \"\\u22A2\",\n\t\"vDash;\": \"\\u22A8\",\n\t\"Vdash;\": \"\\u22A9\",\n\t\"VDash;\": \"\\u22AB\",\n\t\"Vdashl;\": \"\\u2AE6\",\n\t\"veebar;\": \"\\u22BB\",\n\t\"vee;\": \"\\u2228\",\n\t\"Vee;\": \"\\u22C1\",\n\t\"veeeq;\": \"\\u225A\",\n\t\"vellip;\": \"\\u22EE\",\n\t\"verbar;\": \"\\u007C\",\n\t\"Verbar;\": \"\\u2016\",\n\t\"vert;\": \"\\u007C\",\n\t\"Vert;\": \"\\u2016\",\n\t\"VerticalBar;\": \"\\u2223\",\n\t\"VerticalLine;\": \"\\u007C\",\n\t\"VerticalSeparator;\": \"\\u2758\",\n\t\"VerticalTilde;\": \"\\u2240\",\n\t\"VeryThinSpace;\": \"\\u200A\",\n\t\"Vfr;\": \"\\uD835\\uDD19\",\n\t\"vfr;\": \"\\uD835\\uDD33\",\n\t\"vltri;\": \"\\u22B2\",\n\t\"vnsub;\": \"\\u2282\\u20D2\",\n\t\"vnsup;\": \"\\u2283\\u20D2\",\n\t\"Vopf;\": \"\\uD835\\uDD4D\",\n\t\"vopf;\": \"\\uD835\\uDD67\",\n\t\"vprop;\": \"\\u221D\",\n\t\"vrtri;\": \"\\u22B3\",\n\t\"Vscr;\": \"\\uD835\\uDCB1\",\n\t\"vscr;\": \"\\uD835\\uDCCB\",\n\t\"vsubnE;\": \"\\u2ACB\\uFE00\",\n\t\"vsubne;\": \"\\u228A\\uFE00\",\n\t\"vsupnE;\": \"\\u2ACC\\uFE00\",\n\t\"vsupne;\": \"\\u228B\\uFE00\",\n\t\"Vvdash;\": \"\\u22AA\",\n\t\"vzigzag;\": \"\\u299A\",\n\t\"Wcirc;\": \"\\u0174\",\n\t\"wcirc;\": \"\\u0175\",\n\t\"wedbar;\": \"\\u2A5F\",\n\t\"wedge;\": \"\\u2227\",\n\t\"Wedge;\": \"\\u22C0\",\n\t\"wedgeq;\": \"\\u2259\",\n\t\"weierp;\": \"\\u2118\",\n\t\"Wfr;\": \"\\uD835\\uDD1A\",\n\t\"wfr;\": \"\\uD835\\uDD34\",\n\t\"Wopf;\": \"\\uD835\\uDD4E\",\n\t\"wopf;\": \"\\uD835\\uDD68\",\n\t\"wp;\": \"\\u2118\",\n\t\"wr;\": \"\\u2240\",\n\t\"wreath;\": \"\\u2240\",\n\t\"Wscr;\": \"\\uD835\\uDCB2\",\n\t\"wscr;\": \"\\uD835\\uDCCC\",\n\t\"xcap;\": \"\\u22C2\",\n\t\"xcirc;\": \"\\u25EF\",\n\t\"xcup;\": \"\\u22C3\",\n\t\"xdtri;\": \"\\u25BD\",\n\t\"Xfr;\": \"\\uD835\\uDD1B\",\n\t\"xfr;\": \"\\uD835\\uDD35\",\n\t\"xharr;\": \"\\u27F7\",\n\t\"xhArr;\": \"\\u27FA\",\n\t\"Xi;\": \"\\u039E\",\n\t\"xi;\": \"\\u03BE\",\n\t\"xlarr;\": \"\\u27F5\",\n\t\"xlArr;\": \"\\u27F8\",\n\t\"xmap;\": \"\\u27FC\",\n\t\"xnis;\": \"\\u22FB\",\n\t\"xodot;\": \"\\u2A00\",\n\t\"Xopf;\": \"\\uD835\\uDD4F\",\n\t\"xopf;\": \"\\uD835\\uDD69\",\n\t\"xoplus;\": \"\\u2A01\",\n\t\"xotime;\": \"\\u2A02\",\n\t\"xrarr;\": \"\\u27F6\",\n\t\"xrArr;\": \"\\u27F9\",\n\t\"Xscr;\": \"\\uD835\\uDCB3\",\n\t\"xscr;\": \"\\uD835\\uDCCD\",\n\t\"xsqcup;\": \"\\u2A06\",\n\t\"xuplus;\": \"\\u2A04\",\n\t\"xutri;\": \"\\u25B3\",\n\t\"xvee;\": \"\\u22C1\",\n\t\"xwedge;\": \"\\u22C0\",\n\t\"Yacute;\": \"\\u00DD\",\n\t\"Yacute\": \"\\u00DD\",\n\t\"yacute;\": \"\\u00FD\",\n\t\"yacute\": \"\\u00FD\",\n\t\"YAcy;\": \"\\u042F\",\n\t\"yacy;\": \"\\u044F\",\n\t\"Ycirc;\": \"\\u0176\",\n\t\"ycirc;\": \"\\u0177\",\n\t\"Ycy;\": \"\\u042B\",\n\t\"ycy;\": \"\\u044B\",\n\t\"yen;\": \"\\u00A5\",\n\t\"yen\": \"\\u00A5\",\n\t\"Yfr;\": \"\\uD835\\uDD1C\",\n\t\"yfr;\": \"\\uD835\\uDD36\",\n\t\"YIcy;\": \"\\u0407\",\n\t\"yicy;\": \"\\u0457\",\n\t\"Yopf;\": \"\\uD835\\uDD50\",\n\t\"yopf;\": \"\\uD835\\uDD6A\",\n\t\"Yscr;\": \"\\uD835\\uDCB4\",\n\t\"yscr;\": \"\\uD835\\uDCCE\",\n\t\"YUcy;\": \"\\u042E\",\n\t\"yucy;\": \"\\u044E\",\n\t\"yuml;\": \"\\u00FF\",\n\t\"yuml\": \"\\u00FF\",\n\t\"Yuml;\": \"\\u0178\",\n\t\"Zacute;\": \"\\u0179\",\n\t\"zacute;\": \"\\u017A\",\n\t\"Zcaron;\": \"\\u017D\",\n\t\"zcaron;\": \"\\u017E\",\n\t\"Zcy;\": \"\\u0417\",\n\t\"zcy;\": \"\\u0437\",\n\t\"Zdot;\": \"\\u017B\",\n\t\"zdot;\": \"\\u017C\",\n\t\"zeetrf;\": \"\\u2128\",\n\t\"ZeroWidthSpace;\": \"\\u200B\",\n\t\"Zeta;\": \"\\u0396\",\n\t\"zeta;\": \"\\u03B6\",\n\t\"zfr;\": \"\\uD835\\uDD37\",\n\t\"Zfr;\": \"\\u2128\",\n\t\"ZHcy;\": \"\\u0416\",\n\t\"zhcy;\": \"\\u0436\",\n\t\"zigrarr;\": \"\\u21DD\",\n\t\"zopf;\": \"\\uD835\\uDD6B\",\n\t\"Zopf;\": \"\\u2124\",\n\t\"Zscr;\": \"\\uD835\\uDCB5\",\n\t\"zscr;\": \"\\uD835\\uDCCF\",\n\t\"zwj;\": \"\\u200D\",\n\t\"zwnj;\": \"\\u200C\"\n};\n\n},\n{}],\n13:[function(_dereq_,module,exports){\nvar util = _dereq_('util/');\n\nvar pSlice = Array.prototype.slice;\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nvar assert = module.exports = ok;\n\nassert.AssertionError = function AssertionError(options) {\n  this.name = 'AssertionError';\n  this.actual = options.actual;\n  this.expected = options.expected;\n  this.operator = options.operator;\n  if (options.message) {\n    this.message = options.message;\n    this.generatedMessage = false;\n  } else {\n    this.message = getMessage(this);\n    this.generatedMessage = true;\n  }\n  var stackStartFunction = options.stackStartFunction || fail;\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, stackStartFunction);\n  }\n  else {\n    var err = new Error();\n    if (err.stack) {\n      var out = err.stack;\n      var fn_name = stackStartFunction.name;\n      var idx = out.indexOf('\\n' + fn_name);\n      if (idx >= 0) {\n        var next_line = out.indexOf('\\n', idx + 1);\n        out = out.substring(next_line + 1);\n      }\n\n      this.stack = out;\n    }\n  }\n};\nutil.inherits(assert.AssertionError, Error);\n\nfunction replacer(key, value) {\n  if (util.isUndefined(value)) {\n    return '' + value;\n  }\n  if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {\n    return value.toString();\n  }\n  if (util.isFunction(value) || util.isRegExp(value)) {\n    return value.toString();\n  }\n  return value;\n}\n\nfunction truncate(s, n) {\n  if (util.isString(s)) {\n    return s.length < n ? s : s.slice(0, n);\n  } else {\n    return s;\n  }\n}\n\nfunction getMessage(self) {\n  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +\n         self.operator + ' ' +\n         truncate(JSON.stringify(self.expected, replacer), 128);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n  throw new assert.AssertionError({\n    message: message,\n    actual: actual,\n    expected: expected,\n    operator: operator,\n    stackStartFunction: stackStartFunction\n  });\n}\nassert.fail = fail;\n\nfunction ok(value, message) {\n  if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\nassert.equal = function equal(actual, expected, message) {\n  if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\nassert.notEqual = function notEqual(actual, expected, message) {\n  if (actual == expected) {\n    fail(actual, expected, message, '!=', assert.notEqual);\n  }\n};\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n  if (!_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n  }\n};\n\nfunction _deepEqual(actual, expected) {\n  if (actual === expected) {\n    return true;\n\n  } else if (util.isBuffer(actual) && util.isBuffer(expected)) {\n    if (actual.length != expected.length) return false;\n\n    for (var i = 0; i < actual.length; i++) {\n      if (actual[i] !== expected[i]) return false;\n    }\n\n    return true;\n  } else if (util.isDate(actual) && util.isDate(expected)) {\n    return actual.getTime() === expected.getTime();\n  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n    return actual.source === expected.source &&\n           actual.global === expected.global &&\n           actual.multiline === expected.multiline &&\n           actual.lastIndex === expected.lastIndex &&\n           actual.ignoreCase === expected.ignoreCase;\n  } else if (!util.isObject(actual) && !util.isObject(expected)) {\n    return actual == expected;\n  } else {\n    return objEquiv(actual, expected);\n  }\n}\n\nfunction isArguments(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b) {\n  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))\n    return false;\n  if (a.prototype !== b.prototype) return false;\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return _deepEqual(a, b);\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b),\n        key, i;\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  if (ka.length != kb.length)\n    return false;\n  ka.sort();\n  kb.sort();\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!_deepEqual(a[key], b[key])) return false;\n  }\n  return true;\n}\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n  if (_deepEqual(actual, expected)) {\n    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n  }\n};\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n  if (actual !== expected) {\n    fail(actual, expected, message, '===', assert.strictEqual);\n  }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n  if (actual === expected) {\n    fail(actual, expected, message, '!==', assert.notStrictEqual);\n  }\n};\n\nfunction expectedException(actual, expected) {\n  if (!actual || !expected) {\n    return false;\n  }\n\n  if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n    return expected.test(actual);\n  } else if (actual instanceof expected) {\n    return true;\n  } else if (expected.call({}, actual) === true) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n  var actual;\n\n  if (util.isString(expected)) {\n    message = expected;\n    expected = null;\n  }\n\n  try {\n    block();\n  } catch (e) {\n    actual = e;\n  }\n\n  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n            (message ? ' ' + message : '.');\n\n  if (shouldThrow && !actual) {\n    fail(actual, expected, 'Missing expected exception' + message);\n  }\n\n  if (!shouldThrow && expectedException(actual, expected)) {\n    fail(actual, expected, 'Got unwanted exception' + message);\n  }\n\n  if ((shouldThrow && actual && expected &&\n      !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n    throw actual;\n  }\n}\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n  _throws.apply(this, [true].concat(pSlice.call(arguments)));\n};\nassert.doesNotThrow = function(block, /*optional*/message) {\n  _throws.apply(this, [false].concat(pSlice.call(arguments)));\n};\n\nassert.ifError = function(err) { if (err) {throw err;}};\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    if (hasOwn.call(obj, key)) keys.push(key);\n  }\n  return keys;\n};\n\n},\n{\"util/\":15}],\n14:[function(_dereq_,module,exports){\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n},\n{}],\n15:[function(_dereq_,module,exports){\n(function (process,global){\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\nexports.deprecate = function(fn, msg) {\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\nfunction inspect(obj, opts) {\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    ctx.showHidden = opts;\n  } else if (opts) {\n    exports._extend(ctx, opts);\n  }\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      value.inspect !== exports.inspect &&\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = _dereq_('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\nexports.inherits = _dereq_('inherits');\n\nexports._extend = function(origin, add) {\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,_dereq_(\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\"),typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},\n{\"./support/isBuffer\":14,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}],\n16:[function(_dereq_,module,exports){\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\nEventEmitter.defaultMaxListeners = 10;\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        throw TypeError('Uncaught, unspecified \"error\" event.');\n      }\n      return false;\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    this._events[type].push(listener);\n  else\n    this._events[type] = [this._events[type], listener];\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      console.trace();\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},\n{}],\n17:[function(_dereq_,module,exports){\nif (typeof Object.create === 'function') {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},\n{}],\n18:[function(_dereq_,module,exports){\n\nvar process = module.exports = {};\n\nprocess.nextTick = (function () {\n    var canSetImmediate = typeof window !== 'undefined'\n    && window.setImmediate;\n    var canPost = typeof window !== 'undefined'\n    && window.postMessage && window.addEventListener\n    ;\n\n    if (canSetImmediate) {\n        return function (f) { return window.setImmediate(f) };\n    }\n\n    if (canPost) {\n        var queue = [];\n        window.addEventListener('message', function (ev) {\n            var source = ev.source;\n            if ((source === window || source === null) && ev.data === 'process-tick') {\n                ev.stopPropagation();\n                if (queue.length > 0) {\n                    var fn = queue.shift();\n                    fn();\n                }\n            }\n        }, true);\n\n        return function nextTick(fn) {\n            queue.push(fn);\n            window.postMessage('process-tick', '*');\n        };\n    }\n\n    return function nextTick(fn) {\n        setTimeout(fn, 0);\n    };\n})();\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n}\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\n\n},\n{}],\n19:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(14)\n},\n{}],\n20:[function(_dereq_,module,exports){\nmodule.exports=_dereq_(15)\n},\n{\"./support/isBuffer\":19,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,\"inherits\":17}]},{},[9])\n(9)\n\n});\n\nace.define(\"ace/mode/html_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/worker/mirror\",\"ace/mode/html/saxparser\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar SAXParser = require(\"./html/saxparser\").SAXParser;\n\nvar errorTypes = {\n    \"expected-doctype-but-got-start-tag\": \"info\",\n    \"expected-doctype-but-got-chars\": \"info\",\n    \"non-html-root\": \"info\"\n}\n\nvar Worker = exports.Worker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(400);\n    this.context = null;\n};\n\noop.inherits(Worker, Mirror);\n\n(function() {\n\n    this.setOptions = function(options) {\n        this.context = options.context;\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        if (!value)\n            return;\n        var parser = new SAXParser();\n        var errors = [];\n        var noop = function(){};\n        parser.contentHandler = {\n           startDocument: noop,\n           endDocument: noop,\n           startElement: noop,\n           endElement: noop,\n           characters: noop\n        };\n        parser.errorHandler = {\n            error: function(message, location, code) {\n                errors.push({\n                    row: location.line,\n                    column: location.column,\n                    text: message,\n                    type: errorTypes[code] || \"error\"\n                });\n            }\n        };\n        if (this.context)\n            parser.parseFragment(value, this.context);\n        else\n            parser.parse(value);\n        this.sender.emit(\"error\", errors);\n    };\n\n}).call(Worker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-javascript.js",
    "content": "\"no use strict\";\n;(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\n        else\n            return new Range(this.start.row, 0, this.end.row, 0)\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n}\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    callback && this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        var old = handlers[eventName];\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000)\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        applyDelta(this.$lines, delta, doNotValidate);\n        this._signal(\"change\", delta);\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        var from = 0, to = 0;\n        do {\n            from = to;\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            if (to > l) {\n                delta.lines = chunk;\n                delta.start.row = row + from;\n                delta.start.column = column;\n                break;\n            }\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        } while(true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: lines[l-1].length};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject( array[i] );\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    var cons = obj.constructor;\n    if (cons === RegExp)\n        return obj;\n    \n    copy = cons();\n    for (var key in obj) {\n        copy[key] = deepCopy(obj[key]);\n    }\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return str.replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/javascript/jshint\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\nmodule.exports = (function outer (modules, cache, entry) {\n    var previousRequire = typeof require == \"function\" && require;\n    function newRequire(name, jumped){\n        if(!cache[name]) {\n            if(!modules[name]) {\n                var currentRequire = typeof require == \"function\" && require;\n                if (!jumped && currentRequire) return currentRequire(name, true);\n                if (previousRequire) return previousRequire(name, true);\n                var err = new Error('Cannot find module \\'' + name + '\\'');\n                err.code = 'MODULE_NOT_FOUND';\n                throw err;\n            }\n            var m = cache[name] = {exports:{}};\n            modules[name][0].call(m.exports, function(x){\n                var id = modules[name][1][x];\n                return newRequire(id ? id : x);\n            },m,m.exports,outer,modules,cache,entry);\n        }\n        return cache[name].exports;\n    }\n    for(var i=0;i<entry.length;i++) newRequire(entry[i]);\n    return newRequire(entry[0]);\n})\n({\"/node_modules/browserify/node_modules/events/events.js\":[function(_dereq_,module,exports){\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\nEventEmitter.defaultMaxListeners = 10;\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      }\n      throw TypeError('Uncaught, unspecified \"error\" event.');\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    this._events[type].push(listener);\n  else\n    this._events[type] = [this._events[type], listener];\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],\"/node_modules/jshint/data/ascii-identifier-data.js\":[function(_dereq_,module,exports){\nvar identifierStartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierStartTable[i] =\n    i === 36 ||           // $\n    i >= 65 && i <= 90 || // A-Z\n    i === 95 ||           // _\n    i >= 97 && i <= 122;  // a-z\n}\n\nvar identifierPartTable = [];\n\nfor (var i = 0; i < 128; i++) {\n  identifierPartTable[i] =\n    identifierStartTable[i] || // $, _, A-Z, a-z\n    i >= 48 && i <= 57;        // 0-9\n}\n\nmodule.exports = {\n  asciiIdentifierStartTable: identifierStartTable,\n  asciiIdentifierPartTable: identifierPartTable\n};\n\n},{}],\"/node_modules/jshint/lodash.js\":[function(_dereq_,module,exports){\n(function (global){\n;(function() {\n\n  var undefined;\n\n  var VERSION = '3.7.0';\n\n  var FUNC_ERROR_TEXT = 'Expected a function';\n\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      objectTag = '[object Object]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      weakMapTag = '[object WeakMap]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]+|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?)\\1\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n  var reRegExpChars = /[.*+?^${}()|[\\]\\/\\\\]/g,\n      reHasRegExpChars = RegExp(reRegExpChars.source);\n\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  var reFlags = /\\w*$/;\n\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dateTag] = typedArrayTags[errorTag] =\n  typedArrayTags[funcTag] = typedArrayTags[mapTag] =\n  typedArrayTags[numberTag] = typedArrayTags[objectTag] =\n  typedArrayTags[regexpTag] = typedArrayTags[setTag] =\n  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =\n  cloneableTags[dateTag] = cloneableTags[float32Tag] =\n  cloneableTags[float64Tag] = cloneableTags[int8Tag] =\n  cloneableTags[int16Tag] = cloneableTags[int32Tag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[stringTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[mapTag] = cloneableTags[setTag] =\n  cloneableTags[weakMapTag] = false;\n\n  var objectTypes = {\n    'function': true,\n    'object': true\n  };\n\n  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;\n\n  var freeSelf = objectTypes[typeof self] && self && self.Object && self;\n\n  var freeWindow = objectTypes[typeof window] && window && window.Object && window;\n\n  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;\n\n  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;\n\n  function baseFindIndex(array, predicate, fromRight) {\n    var length = array.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function baseIndexOf(array, value, fromIndex) {\n    if (value !== value) {\n      return indexOfNaN(array, fromIndex);\n    }\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function baseIsFunction(value) {\n    return typeof value == 'function' || false;\n  }\n\n  function baseToString(value) {\n    if (typeof value == 'string') {\n      return value;\n    }\n    return value == null ? '' : (value + '');\n  }\n\n  function indexOfNaN(array, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 0 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var other = array[index];\n      if (other !== other) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  function isObjectLike(value) {\n    return !!value && typeof value == 'object';\n  }\n\n  var arrayProto = Array.prototype,\n      objectProto = Object.prototype;\n\n  var fnToString = Function.prototype.toString;\n\n  var hasOwnProperty = objectProto.hasOwnProperty;\n\n  var objToString = objectProto.toString;\n\n  var reIsNative = RegExp('^' +\n    escapeRegExp(objToString)\n    .replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n  );\n\n  var ArrayBuffer = isNative(ArrayBuffer = root.ArrayBuffer) && ArrayBuffer,\n      bufferSlice = isNative(bufferSlice = ArrayBuffer && new ArrayBuffer(0).slice) && bufferSlice,\n      floor = Math.floor,\n      getOwnPropertySymbols = isNative(getOwnPropertySymbols = Object.getOwnPropertySymbols) && getOwnPropertySymbols,\n      getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,\n      push = arrayProto.push,\n      preventExtensions = isNative(Object.preventExtensions = Object.preventExtensions) && preventExtensions,\n      propertyIsEnumerable = objectProto.propertyIsEnumerable,\n      Uint8Array = isNative(Uint8Array = root.Uint8Array) && Uint8Array;\n\n  var Float64Array = (function() {\n    try {\n      var func = isNative(func = root.Float64Array) && func,\n          result = new func(new ArrayBuffer(10), 0, 1) && func;\n    } catch(e) {}\n    return result;\n  }());\n\n  var nativeAssign = (function() {\n    var object = { '1': 0 },\n        func = preventExtensions && isNative(func = Object.assign) && func;\n\n    try { func(preventExtensions(object), 'xo'); } catch(e) {}\n    return !object[1] && func;\n  }());\n\n  var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray,\n      nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys,\n      nativeMax = Math.max,\n      nativeMin = Math.min;\n\n  var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;\n\n  var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1,\n      MAX_ARRAY_INDEX =  MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0;\n\n  var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n  function lodash() {\n  }\n\n  var support = lodash.support = {};\n\n  (function(x) {\n    var Ctor = function() { this.x = x; },\n        object = { '0': x, 'length': x },\n        props = [];\n\n    Ctor.prototype = { 'valueOf': x, 'y': x };\n    for (var key in new Ctor) { props.push(key); }\n\n    support.funcDecomp = /\\bthis\\b/.test(function() { return this; });\n\n    support.funcNames = typeof Function.name == 'string';\n\n    try {\n      support.nonEnumArgs = !propertyIsEnumerable.call(arguments, 1);\n    } catch(e) {\n      support.nonEnumArgs = true;\n    }\n  }(1, 0));\n\n  function arrayCopy(source, array) {\n    var index = -1,\n        length = source.length;\n\n    array || (array = Array(length));\n    while (++index < length) {\n      array[index] = source[index];\n    }\n    return array;\n  }\n\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array.length,\n        resIndex = -1,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[++resIndex] = value;\n      }\n    }\n    return result;\n  }\n\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  function arrayMax(array) {\n    var index = -1,\n        length = array.length,\n        result = NEGATIVE_INFINITY;\n\n    while (++index < length) {\n      var value = array[index];\n      if (value > result) {\n        result = value;\n      }\n    }\n    return result;\n  }\n\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function assignWith(object, source, customizer) {\n    var props = keys(source);\n    push.apply(props, getSymbols(source));\n\n    var index = -1,\n        length = props.length;\n\n    while (++index < length) {\n      var key = props[index],\n          value = object[key],\n          result = customizer(value, source[key], key, object, source);\n\n      if ((result === result ? (result !== value) : (value === value)) ||\n          (value === undefined && !(key in object))) {\n        object[key] = result;\n      }\n    }\n    return object;\n  }\n\n  var baseAssign = nativeAssign || function(object, source) {\n    return source == null\n      ? object\n      : baseCopy(source, getSymbols(source), baseCopy(source, keys(source), object));\n  };\n\n  function baseCopy(source, props, object) {\n    object || (object = {});\n\n    var index = -1,\n        length = props.length;\n\n    while (++index < length) {\n      var key = props[index];\n      object[key] = source[key];\n    }\n    return object;\n  }\n\n  function baseCallback(func, thisArg, argCount) {\n    var type = typeof func;\n    if (type == 'function') {\n      return thisArg === undefined\n        ? func\n        : bindCallback(func, thisArg, argCount);\n    }\n    if (func == null) {\n      return identity;\n    }\n    if (type == 'object') {\n      return baseMatches(func);\n    }\n    return thisArg === undefined\n      ? property(func)\n      : baseMatchesProperty(func, thisArg);\n  }\n\n  function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {\n    var result;\n    if (customizer) {\n      result = object ? customizer(value, key, object) : customizer(value);\n    }\n    if (result !== undefined) {\n      return result;\n    }\n    if (!isObject(value)) {\n      return value;\n    }\n    var isArr = isArray(value);\n    if (isArr) {\n      result = initCloneArray(value);\n      if (!isDeep) {\n        return arrayCopy(value, result);\n      }\n    } else {\n      var tag = objToString.call(value),\n          isFunc = tag == funcTag;\n\n      if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n        result = initCloneObject(isFunc ? {} : value);\n        if (!isDeep) {\n          return baseAssign(result, value);\n        }\n      } else {\n        return cloneableTags[tag]\n          ? initCloneByTag(value, tag, isDeep)\n          : (object ? value : {});\n      }\n    }\n    stackA || (stackA = []);\n    stackB || (stackB = []);\n\n    var length = stackA.length;\n    while (length--) {\n      if (stackA[length] == value) {\n        return stackB[length];\n      }\n    }\n    stackA.push(value);\n    stackB.push(result);\n\n    (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {\n      result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);\n    });\n    return result;\n  }\n\n  var baseEach = createBaseEach(baseForOwn);\n\n  function baseFilter(collection, predicate) {\n    var result = [];\n    baseEach(collection, function(value, index, collection) {\n      if (predicate(value, index, collection)) {\n        result.push(value);\n      }\n    });\n    return result;\n  }\n\n  var baseFor = createBaseFor();\n\n  function baseForIn(object, iteratee) {\n    return baseFor(object, iteratee, keysIn);\n  }\n\n  function baseForOwn(object, iteratee) {\n    return baseFor(object, iteratee, keys);\n  }\n\n  function baseGet(object, path, pathKey) {\n    if (object == null) {\n      return;\n    }\n    if (pathKey !== undefined && pathKey in toObject(object)) {\n      path = [pathKey];\n    }\n    var index = -1,\n        length = path.length;\n\n    while (object != null && ++index < length) {\n      var result = object = object[path[index]];\n    }\n    return result;\n  }\n\n  function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n    if (value === other) {\n      return value !== 0 || (1 / value == 1 / other);\n    }\n    var valType = typeof value,\n        othType = typeof other;\n\n    if ((valType != 'function' && valType != 'object' && othType != 'function' && othType != 'object') ||\n        value == null || other == null) {\n      return value !== value && other !== other;\n    }\n    return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n  }\n\n  function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var objIsArr = isArray(object),\n        othIsArr = isArray(other),\n        objTag = arrayTag,\n        othTag = arrayTag;\n\n    if (!objIsArr) {\n      objTag = objToString.call(object);\n      if (objTag == argsTag) {\n        objTag = objectTag;\n      } else if (objTag != objectTag) {\n        objIsArr = isTypedArray(object);\n      }\n    }\n    if (!othIsArr) {\n      othTag = objToString.call(other);\n      if (othTag == argsTag) {\n        othTag = objectTag;\n      } else if (othTag != objectTag) {\n        othIsArr = isTypedArray(other);\n      }\n    }\n    var objIsObj = objTag == objectTag,\n        othIsObj = othTag == objectTag,\n        isSameTag = objTag == othTag;\n\n    if (isSameTag && !(objIsArr || objIsObj)) {\n      return equalByTag(object, other, objTag);\n    }\n    if (!isLoose) {\n      var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n          othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n      if (valWrapped || othWrapped) {\n        return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n      }\n    }\n    if (!isSameTag) {\n      return false;\n    }\n    stackA || (stackA = []);\n    stackB || (stackB = []);\n\n    var length = stackA.length;\n    while (length--) {\n      if (stackA[length] == object) {\n        return stackB[length] == other;\n      }\n    }\n    stackA.push(object);\n    stackB.push(other);\n\n    var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n    stackA.pop();\n    stackB.pop();\n\n    return result;\n  }\n\n  function baseIsMatch(object, props, values, strictCompareFlags, customizer) {\n    var index = -1,\n        length = props.length,\n        noCustomizer = !customizer;\n\n    while (++index < length) {\n      if ((noCustomizer && strictCompareFlags[index])\n            ? values[index] !== object[props[index]]\n            : !(props[index] in object)\n          ) {\n        return false;\n      }\n    }\n    index = -1;\n    while (++index < length) {\n      var key = props[index],\n          objValue = object[key],\n          srcValue = values[index];\n\n      if (noCustomizer && strictCompareFlags[index]) {\n        var result = objValue !== undefined || (key in object);\n      } else {\n        result = customizer ? customizer(objValue, srcValue, key) : undefined;\n        if (result === undefined) {\n          result = baseIsEqual(srcValue, objValue, customizer, true);\n        }\n      }\n      if (!result) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function baseMatches(source) {\n    var props = keys(source),\n        length = props.length;\n\n    if (!length) {\n      return constant(true);\n    }\n    if (length == 1) {\n      var key = props[0],\n          value = source[key];\n\n      if (isStrictComparable(value)) {\n        return function(object) {\n          if (object == null) {\n            return false;\n          }\n          return object[key] === value && (value !== undefined || (key in toObject(object)));\n        };\n      }\n    }\n    var values = Array(length),\n        strictCompareFlags = Array(length);\n\n    while (length--) {\n      value = source[props[length]];\n      values[length] = value;\n      strictCompareFlags[length] = isStrictComparable(value);\n    }\n    return function(object) {\n      return object != null && baseIsMatch(toObject(object), props, values, strictCompareFlags);\n    };\n  }\n\n  function baseMatchesProperty(path, value) {\n    var isArr = isArray(path),\n        isCommon = isKey(path) && isStrictComparable(value),\n        pathKey = (path + '');\n\n    path = toPath(path);\n    return function(object) {\n      if (object == null) {\n        return false;\n      }\n      var key = pathKey;\n      object = toObject(object);\n      if ((isArr || !isCommon) && !(key in object)) {\n        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n        if (object == null) {\n          return false;\n        }\n        key = last(path);\n        object = toObject(object);\n      }\n      return object[key] === value\n        ? (value !== undefined || (key in object))\n        : baseIsEqual(value, object[key], null, true);\n    };\n  }\n\n  function baseMerge(object, source, customizer, stackA, stackB) {\n    if (!isObject(object)) {\n      return object;\n    }\n    var isSrcArr = isLength(source.length) && (isArray(source) || isTypedArray(source));\n    if (!isSrcArr) {\n      var props = keys(source);\n      push.apply(props, getSymbols(source));\n    }\n    arrayEach(props || source, function(srcValue, key) {\n      if (props) {\n        key = srcValue;\n        srcValue = source[key];\n      }\n      if (isObjectLike(srcValue)) {\n        stackA || (stackA = []);\n        stackB || (stackB = []);\n        baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n      }\n      else {\n        var value = object[key],\n            result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n            isCommon = result === undefined;\n\n        if (isCommon) {\n          result = srcValue;\n        }\n        if ((isSrcArr || result !== undefined) &&\n            (isCommon || (result === result ? (result !== value) : (value === value)))) {\n          object[key] = result;\n        }\n      }\n    });\n    return object;\n  }\n\n  function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n    var length = stackA.length,\n        srcValue = source[key];\n\n    while (length--) {\n      if (stackA[length] == srcValue) {\n        object[key] = stackB[length];\n        return;\n      }\n    }\n    var value = object[key],\n        result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n        isCommon = result === undefined;\n\n    if (isCommon) {\n      result = srcValue;\n      if (isLength(srcValue.length) && (isArray(srcValue) || isTypedArray(srcValue))) {\n        result = isArray(value)\n          ? value\n          : (getLength(value) ? arrayCopy(value) : []);\n      }\n      else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n        result = isArguments(value)\n          ? toPlainObject(value)\n          : (isPlainObject(value) ? value : {});\n      }\n      else {\n        isCommon = false;\n      }\n    }\n    stackA.push(srcValue);\n    stackB.push(result);\n\n    if (isCommon) {\n      object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n    } else if (result === result ? (result !== value) : (value === value)) {\n      object[key] = result;\n    }\n  }\n\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  function basePropertyDeep(path) {\n    var pathKey = (path + '');\n    path = toPath(path);\n    return function(object) {\n      return baseGet(object, path, pathKey);\n    };\n  }\n\n  function baseSlice(array, start, end) {\n    var index = -1,\n        length = array.length;\n\n    start = start == null ? 0 : (+start || 0);\n    if (start < 0) {\n      start = -start > length ? 0 : (length + start);\n    }\n    end = (end === undefined || end > length) ? length : (+end || 0);\n    if (end < 0) {\n      end += length;\n    }\n    length = start > end ? 0 : ((end - start) >>> 0);\n    start >>>= 0;\n\n    var result = Array(length);\n    while (++index < length) {\n      result[index] = array[index + start];\n    }\n    return result;\n  }\n\n  function baseSome(collection, predicate) {\n    var result;\n\n    baseEach(collection, function(value, index, collection) {\n      result = predicate(value, index, collection);\n      return !result;\n    });\n    return !!result;\n  }\n\n  function baseValues(object, props) {\n    var index = -1,\n        length = props.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = object[props[index]];\n    }\n    return result;\n  }\n\n  function binaryIndex(array, value, retHighest) {\n    var low = 0,\n        high = array ? array.length : low;\n\n    if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n      while (low < high) {\n        var mid = (low + high) >>> 1,\n            computed = array[mid];\n\n        if (retHighest ? (computed <= value) : (computed < value)) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return high;\n    }\n    return binaryIndexBy(array, value, identity, retHighest);\n  }\n\n  function binaryIndexBy(array, value, iteratee, retHighest) {\n    value = iteratee(value);\n\n    var low = 0,\n        high = array ? array.length : 0,\n        valIsNaN = value !== value,\n        valIsUndef = value === undefined;\n\n    while (low < high) {\n      var mid = floor((low + high) / 2),\n          computed = iteratee(array[mid]),\n          isReflexive = computed === computed;\n\n      if (valIsNaN) {\n        var setLow = isReflexive || retHighest;\n      } else if (valIsUndef) {\n        setLow = isReflexive && (retHighest || computed !== undefined);\n      } else {\n        setLow = retHighest ? (computed <= value) : (computed < value);\n      }\n      if (setLow) {\n        low = mid + 1;\n      } else {\n        high = mid;\n      }\n    }\n    return nativeMin(high, MAX_ARRAY_INDEX);\n  }\n\n  function bindCallback(func, thisArg, argCount) {\n    if (typeof func != 'function') {\n      return identity;\n    }\n    if (thisArg === undefined) {\n      return func;\n    }\n    switch (argCount) {\n      case 1: return function(value) {\n        return func.call(thisArg, value);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(thisArg, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(thisArg, accumulator, value, index, collection);\n      };\n      case 5: return function(value, other, key, object, source) {\n        return func.call(thisArg, value, other, key, object, source);\n      };\n    }\n    return function() {\n      return func.apply(thisArg, arguments);\n    };\n  }\n\n  function bufferClone(buffer) {\n    return bufferSlice.call(buffer, 0);\n  }\n  if (!bufferSlice) {\n    bufferClone = !(ArrayBuffer && Uint8Array) ? constant(null) : function(buffer) {\n      var byteLength = buffer.byteLength,\n          floatLength = Float64Array ? floor(byteLength / FLOAT64_BYTES_PER_ELEMENT) : 0,\n          offset = floatLength * FLOAT64_BYTES_PER_ELEMENT,\n          result = new ArrayBuffer(byteLength);\n\n      if (floatLength) {\n        var view = new Float64Array(result, 0, floatLength);\n        view.set(new Float64Array(buffer, 0, floatLength));\n      }\n      if (byteLength != offset) {\n        view = new Uint8Array(result, offset);\n        view.set(new Uint8Array(buffer, offset));\n      }\n      return result;\n    };\n  }\n\n  function createAssigner(assigner) {\n    return restParam(function(object, sources) {\n      var index = -1,\n          length = object == null ? 0 : sources.length,\n          customizer = length > 2 && sources[length - 2],\n          guard = length > 2 && sources[2],\n          thisArg = length > 1 && sources[length - 1];\n\n      if (typeof customizer == 'function') {\n        customizer = bindCallback(customizer, thisArg, 5);\n        length -= 2;\n      } else {\n        customizer = typeof thisArg == 'function' ? thisArg : null;\n        length -= (customizer ? 1 : 0);\n      }\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        customizer = length < 3 ? null : customizer;\n        length = 1;\n      }\n      while (++index < length) {\n        var source = sources[index];\n        if (source) {\n          assigner(object, source, customizer);\n        }\n      }\n      return object;\n    });\n  }\n\n  function createBaseEach(eachFunc, fromRight) {\n    return function(collection, iteratee) {\n      var length = collection ? getLength(collection) : 0;\n      if (!isLength(length)) {\n        return eachFunc(collection, iteratee);\n      }\n      var index = fromRight ? length : -1,\n          iterable = toObject(collection);\n\n      while ((fromRight ? index-- : ++index < length)) {\n        if (iteratee(iterable[index], index, iterable) === false) {\n          break;\n        }\n      }\n      return collection;\n    };\n  }\n\n  function createBaseFor(fromRight) {\n    return function(object, iteratee, keysFunc) {\n      var iterable = toObject(object),\n          props = keysFunc(object),\n          length = props.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length)) {\n        var key = props[index];\n        if (iteratee(iterable[key], key, iterable) === false) {\n          break;\n        }\n      }\n      return object;\n    };\n  }\n\n  function createFindIndex(fromRight) {\n    return function(array, predicate, thisArg) {\n      if (!(array && array.length)) {\n        return -1;\n      }\n      predicate = getCallback(predicate, thisArg, 3);\n      return baseFindIndex(array, predicate, fromRight);\n    };\n  }\n\n  function createForEach(arrayFunc, eachFunc) {\n    return function(collection, iteratee, thisArg) {\n      return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n        ? arrayFunc(collection, iteratee)\n        : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n    };\n  }\n\n  function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var index = -1,\n        arrLength = array.length,\n        othLength = other.length,\n        result = true;\n\n    if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n      return false;\n    }\n    while (result && ++index < arrLength) {\n      var arrValue = array[index],\n          othValue = other[index];\n\n      result = undefined;\n      if (customizer) {\n        result = isLoose\n          ? customizer(othValue, arrValue, index)\n          : customizer(arrValue, othValue, index);\n      }\n      if (result === undefined) {\n        if (isLoose) {\n          var othIndex = othLength;\n          while (othIndex--) {\n            othValue = other[othIndex];\n            result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n            if (result) {\n              break;\n            }\n          }\n        } else {\n          result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n        }\n      }\n    }\n    return !!result;\n  }\n\n  function equalByTag(object, other, tag) {\n    switch (tag) {\n      case boolTag:\n      case dateTag:\n        return +object == +other;\n\n      case errorTag:\n        return object.name == other.name && object.message == other.message;\n\n      case numberTag:\n        return (object != +object)\n          ? other != +other\n          : (object == 0 ? ((1 / object) == (1 / other)) : object == +other);\n\n      case regexpTag:\n      case stringTag:\n        return object == (other + '');\n    }\n    return false;\n  }\n\n  function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n    var objProps = keys(object),\n        objLength = objProps.length,\n        othProps = keys(other),\n        othLength = othProps.length;\n\n    if (objLength != othLength && !isLoose) {\n      return false;\n    }\n    var skipCtor = isLoose,\n        index = -1;\n\n    while (++index < objLength) {\n      var key = objProps[index],\n          result = isLoose ? key in other : hasOwnProperty.call(other, key);\n\n      if (result) {\n        var objValue = object[key],\n            othValue = other[key];\n\n        result = undefined;\n        if (customizer) {\n          result = isLoose\n            ? customizer(othValue, objValue, key)\n            : customizer(objValue, othValue, key);\n        }\n        if (result === undefined) {\n          result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB);\n        }\n      }\n      if (!result) {\n        return false;\n      }\n      skipCtor || (skipCtor = key == 'constructor');\n    }\n    if (!skipCtor) {\n      var objCtor = object.constructor,\n          othCtor = other.constructor;\n\n      if (objCtor != othCtor &&\n          ('constructor' in object && 'constructor' in other) &&\n          !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n            typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function getCallback(func, thisArg, argCount) {\n    var result = lodash.callback || callback;\n    result = result === callback ? baseCallback : result;\n    return argCount ? result(func, thisArg, argCount) : result;\n  }\n\n  function getIndexOf(collection, target, fromIndex) {\n    var result = lodash.indexOf || indexOf;\n    result = result === indexOf ? baseIndexOf : result;\n    return collection ? result(collection, target, fromIndex) : result;\n  }\n\n  var getLength = baseProperty('length');\n\n  var getSymbols = !getOwnPropertySymbols ? constant([]) : function(object) {\n    return getOwnPropertySymbols(toObject(object));\n  };\n\n  function initCloneArray(array) {\n    var length = array.length,\n        result = new array.constructor(length);\n\n    if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n      result.index = array.index;\n      result.input = array.input;\n    }\n    return result;\n  }\n\n  function initCloneObject(object) {\n    var Ctor = object.constructor;\n    if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {\n      Ctor = Object;\n    }\n    return new Ctor;\n  }\n\n  function initCloneByTag(object, tag, isDeep) {\n    var Ctor = object.constructor;\n    switch (tag) {\n      case arrayBufferTag:\n        return bufferClone(object);\n\n      case boolTag:\n      case dateTag:\n        return new Ctor(+object);\n\n      case float32Tag: case float64Tag:\n      case int8Tag: case int16Tag: case int32Tag:\n      case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n        var buffer = object.buffer;\n        return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);\n\n      case numberTag:\n      case stringTag:\n        return new Ctor(object);\n\n      case regexpTag:\n        var result = new Ctor(object.source, reFlags.exec(object));\n        result.lastIndex = object.lastIndex;\n    }\n    return result;\n  }\n\n  function isIndex(value, length) {\n    value = +value;\n    length = length == null ? MAX_SAFE_INTEGER : length;\n    return value > -1 && value % 1 == 0 && value < length;\n  }\n\n  function isIterateeCall(value, index, object) {\n    if (!isObject(object)) {\n      return false;\n    }\n    var type = typeof index;\n    if (type == 'number') {\n      var length = getLength(object),\n          prereq = isLength(length) && isIndex(index, length);\n    } else {\n      prereq = type == 'string' && index in object;\n    }\n    if (prereq) {\n      var other = object[index];\n      return value === value ? (value === other) : (other !== other);\n    }\n    return false;\n  }\n\n  function isKey(value, object) {\n    var type = typeof value;\n    if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n      return true;\n    }\n    if (isArray(value)) {\n      return false;\n    }\n    var result = !reIsDeepProp.test(value);\n    return result || (object != null && value in toObject(object));\n  }\n\n  function isLength(value) {\n    return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n  }\n\n  function isStrictComparable(value) {\n    return value === value && (value === 0 ? ((1 / value) > 0) : !isObject(value));\n  }\n\n  function shimIsPlainObject(value) {\n    var Ctor,\n        support = lodash.support;\n\n    if (!(isObjectLike(value) && objToString.call(value) == objectTag) ||\n        (!hasOwnProperty.call(value, 'constructor') &&\n          (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n      return false;\n    }\n    var result;\n    baseForIn(value, function(subValue, key) {\n      result = key;\n    });\n    return result === undefined || hasOwnProperty.call(value, result);\n  }\n\n  function shimKeys(object) {\n    var props = keysIn(object),\n        propsLength = props.length,\n        length = propsLength && object.length,\n        support = lodash.support;\n\n    var allowIndexes = length && isLength(length) &&\n      (isArray(object) || (support.nonEnumArgs && isArguments(object)));\n\n    var index = -1,\n        result = [];\n\n    while (++index < propsLength) {\n      var key = props[index];\n      if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n        result.push(key);\n      }\n    }\n    return result;\n  }\n\n  function toObject(value) {\n    return isObject(value) ? value : Object(value);\n  }\n\n  function toPath(value) {\n    if (isArray(value)) {\n      return value;\n    }\n    var result = [];\n    baseToString(value).replace(rePropName, function(match, number, quote, string) {\n      result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n    });\n    return result;\n  }\n\n  var findLastIndex = createFindIndex(true);\n\n  function indexOf(array, value, fromIndex) {\n    var length = array ? array.length : 0;\n    if (!length) {\n      return -1;\n    }\n    if (typeof fromIndex == 'number') {\n      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;\n    } else if (fromIndex) {\n      var index = binaryIndex(array, value),\n          other = array[index];\n\n      if (value === value ? (value === other) : (other !== other)) {\n        return index;\n      }\n      return -1;\n    }\n    return baseIndexOf(array, value, fromIndex || 0);\n  }\n\n  function last(array) {\n    var length = array ? array.length : 0;\n    return length ? array[length - 1] : undefined;\n  }\n\n  function slice(array, start, end) {\n    var length = array ? array.length : 0;\n    if (!length) {\n      return [];\n    }\n    if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n      start = 0;\n      end = length;\n    }\n    return baseSlice(array, start, end);\n  }\n\n  function unzip(array) {\n    var index = -1,\n        length = (array && array.length && arrayMax(arrayMap(array, getLength))) >>> 0,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = arrayMap(array, baseProperty(index));\n    }\n    return result;\n  }\n\n  var zip = restParam(unzip);\n\n  var forEach = createForEach(arrayEach, baseEach);\n\n  function includes(collection, target, fromIndex, guard) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      collection = values(collection);\n      length = collection.length;\n    }\n    if (!length) {\n      return false;\n    }\n    if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {\n      fromIndex = 0;\n    } else {\n      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);\n    }\n    return (typeof collection == 'string' || !isArray(collection) && isString(collection))\n      ? (fromIndex < length && collection.indexOf(target, fromIndex) > -1)\n      : (getIndexOf(collection, target, fromIndex) > -1);\n  }\n\n  function reject(collection, predicate, thisArg) {\n    var func = isArray(collection) ? arrayFilter : baseFilter;\n    predicate = getCallback(predicate, thisArg, 3);\n    return func(collection, function(value, index, collection) {\n      return !predicate(value, index, collection);\n    });\n  }\n\n  function some(collection, predicate, thisArg) {\n    var func = isArray(collection) ? arraySome : baseSome;\n    if (thisArg && isIterateeCall(collection, predicate, thisArg)) {\n      predicate = null;\n    }\n    if (typeof predicate != 'function' || thisArg !== undefined) {\n      predicate = getCallback(predicate, thisArg, 3);\n    }\n    return func(collection, predicate);\n  }\n\n  function restParam(func, start) {\n    if (typeof func != 'function') {\n      throw new TypeError(FUNC_ERROR_TEXT);\n    }\n    start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n    return function() {\n      var args = arguments,\n          index = -1,\n          length = nativeMax(args.length - start, 0),\n          rest = Array(length);\n\n      while (++index < length) {\n        rest[index] = args[start + index];\n      }\n      switch (start) {\n        case 0: return func.call(this, rest);\n        case 1: return func.call(this, args[0], rest);\n        case 2: return func.call(this, args[0], args[1], rest);\n      }\n      var otherArgs = Array(start + 1);\n      index = -1;\n      while (++index < start) {\n        otherArgs[index] = args[index];\n      }\n      otherArgs[start] = rest;\n      return func.apply(this, otherArgs);\n    };\n  }\n\n  function clone(value, isDeep, customizer, thisArg) {\n    if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {\n      isDeep = false;\n    }\n    else if (typeof isDeep == 'function') {\n      thisArg = customizer;\n      customizer = isDeep;\n      isDeep = false;\n    }\n    customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 1);\n    return baseClone(value, isDeep, customizer);\n  }\n\n  function isArguments(value) {\n    var length = isObjectLike(value) ? value.length : undefined;\n    return isLength(length) && objToString.call(value) == argsTag;\n  }\n\n  var isArray = nativeIsArray || function(value) {\n    return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n  };\n\n  function isEmpty(value) {\n    if (value == null) {\n      return true;\n    }\n    var length = getLength(value);\n    if (isLength(length) && (isArray(value) || isString(value) || isArguments(value) ||\n        (isObjectLike(value) && isFunction(value.splice)))) {\n      return !length;\n    }\n    return !keys(value).length;\n  }\n\n  var isFunction = !(baseIsFunction(/x/) || (Uint8Array && !baseIsFunction(Uint8Array))) ? baseIsFunction : function(value) {\n    return objToString.call(value) == funcTag;\n  };\n\n  function isObject(value) {\n    var type = typeof value;\n    return type == 'function' || (!!value && type == 'object');\n  }\n\n  function isNative(value) {\n    if (value == null) {\n      return false;\n    }\n    if (objToString.call(value) == funcTag) {\n      return reIsNative.test(fnToString.call(value));\n    }\n    return isObjectLike(value) && reIsHostCtor.test(value);\n  }\n\n  function isNumber(value) {\n    return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);\n  }\n\n  var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {\n    if (!(value && objToString.call(value) == objectTag)) {\n      return false;\n    }\n    var valueOf = value.valueOf,\n        objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);\n\n    return objProto\n      ? (value == objProto || getPrototypeOf(value) == objProto)\n      : shimIsPlainObject(value);\n  };\n\n  function isString(value) {\n    return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n  }\n\n  function isTypedArray(value) {\n    return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n  }\n\n  function toPlainObject(value) {\n    return baseCopy(value, keysIn(value));\n  }\n\n  var assign = createAssigner(function(object, source, customizer) {\n    return customizer\n      ? assignWith(object, source, customizer)\n      : baseAssign(object, source);\n  });\n\n  function has(object, path) {\n    if (object == null) {\n      return false;\n    }\n    var result = hasOwnProperty.call(object, path);\n    if (!result && !isKey(path)) {\n      path = toPath(path);\n      object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n      path = last(path);\n      result = object != null && hasOwnProperty.call(object, path);\n    }\n    return result;\n  }\n\n  var keys = !nativeKeys ? shimKeys : function(object) {\n    if (object) {\n      var Ctor = object.constructor,\n          length = object.length;\n    }\n    if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n        (typeof object != 'function' && isLength(length))) {\n      return shimKeys(object);\n    }\n    return isObject(object) ? nativeKeys(object) : [];\n  };\n\n  function keysIn(object) {\n    if (object == null) {\n      return [];\n    }\n    if (!isObject(object)) {\n      object = Object(object);\n    }\n    var length = object.length;\n    length = (length && isLength(length) &&\n      (isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0;\n\n    var Ctor = object.constructor,\n        index = -1,\n        isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n        result = Array(length),\n        skipIndexes = length > 0;\n\n    while (++index < length) {\n      result[index] = (index + '');\n    }\n    for (var key in object) {\n      if (!(skipIndexes && isIndex(key, length)) &&\n          !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n        result.push(key);\n      }\n    }\n    return result;\n  }\n\n  var merge = createAssigner(baseMerge);\n\n  function values(object) {\n    return baseValues(object, keys(object));\n  }\n\n  function escapeRegExp(string) {\n    string = baseToString(string);\n    return (string && reHasRegExpChars.test(string))\n      ? string.replace(reRegExpChars, '\\\\$&')\n      : string;\n  }\n\n  function callback(func, thisArg, guard) {\n    if (guard && isIterateeCall(func, thisArg, guard)) {\n      thisArg = null;\n    }\n    return baseCallback(func, thisArg);\n  }\n\n  function constant(value) {\n    return function() {\n      return value;\n    };\n  }\n\n  function identity(value) {\n    return value;\n  }\n\n  function property(path) {\n    return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n  }\n  lodash.assign = assign;\n  lodash.callback = callback;\n  lodash.constant = constant;\n  lodash.forEach = forEach;\n  lodash.keys = keys;\n  lodash.keysIn = keysIn;\n  lodash.merge = merge;\n  lodash.property = property;\n  lodash.reject = reject;\n  lodash.restParam = restParam;\n  lodash.slice = slice;\n  lodash.toPlainObject = toPlainObject;\n  lodash.unzip = unzip;\n  lodash.values = values;\n  lodash.zip = zip;\n\n  lodash.each = forEach;\n  lodash.extend = assign;\n  lodash.iteratee = callback;\n  lodash.clone = clone;\n  lodash.escapeRegExp = escapeRegExp;\n  lodash.findLastIndex = findLastIndex;\n  lodash.has = has;\n  lodash.identity = identity;\n  lodash.includes = includes;\n  lodash.indexOf = indexOf;\n  lodash.isArguments = isArguments;\n  lodash.isArray = isArray;\n  lodash.isEmpty = isEmpty;\n  lodash.isFunction = isFunction;\n  lodash.isNative = isNative;\n  lodash.isNumber = isNumber;\n  lodash.isObject = isObject;\n  lodash.isPlainObject = isPlainObject;\n  lodash.isString = isString;\n  lodash.isTypedArray = isTypedArray;\n  lodash.last = last;\n  lodash.some = some;\n\n  lodash.any = some;\n  lodash.contains = includes;\n  lodash.include = includes;\n\n  lodash.VERSION = VERSION;\n  if (freeExports && freeModule) {\n    if (moduleExports) {\n      (freeModule.exports = lodash)._ = lodash;\n    }\n    else {\n      freeExports._ = lodash;\n    }\n  }\n  else {\n    root._ = lodash;\n  }\n}.call(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],\"/node_modules/jshint/src/jshint.js\":[function(_dereq_,module,exports){\n\nvar _            = _dereq_(\"../lodash\");\nvar events       = _dereq_(\"events\");\nvar vars         = _dereq_(\"./vars.js\");\nvar messages     = _dereq_(\"./messages.js\");\nvar Lexer        = _dereq_(\"./lex.js\").Lexer;\nvar reg          = _dereq_(\"./reg.js\");\nvar state        = _dereq_(\"./state.js\").state;\nvar style        = _dereq_(\"./style.js\");\nvar options      = _dereq_(\"./options.js\");\nvar scopeManager = _dereq_(\"./scope-manager.js\");\n\nvar JSHINT = (function() {\n  \"use strict\";\n\n  var api, // Extension API\n    bang = {\n      \"<\"  : true,\n      \"<=\" : true,\n      \"==\" : true,\n      \"===\": true,\n      \"!==\": true,\n      \"!=\" : true,\n      \">\"  : true,\n      \">=\" : true,\n      \"+\"  : true,\n      \"-\"  : true,\n      \"*\"  : true,\n      \"/\"  : true,\n      \"%\"  : true\n    },\n\n    declared, // Globals that were declared using /*global ... */ syntax.\n\n    functionicity = [\n      \"closure\", \"exception\", \"global\", \"label\",\n      \"outer\", \"unused\", \"var\"\n    ],\n\n    functions, // All of the functions\n\n    inblock,\n    indent,\n    lookahead,\n    lex,\n    member,\n    membersOnly,\n    predefined,    // Global variables defined by option\n\n    stack,\n    urls,\n\n    extraModules = [],\n    emitter = new events.EventEmitter();\n\n  function checkOption(name, t) {\n    name = name.trim();\n\n    if (/^[+-]W\\d{3}$/g.test(name)) {\n      return true;\n    }\n\n    if (options.validNames.indexOf(name) === -1) {\n      if (t.type !== \"jslint\" && !_.has(options.removed, name)) {\n        error(\"E001\", t, name);\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function isString(obj) {\n    return Object.prototype.toString.call(obj) === \"[object String]\";\n  }\n\n  function isIdentifier(tkn, value) {\n    if (!tkn)\n      return false;\n\n    if (!tkn.identifier || tkn.value !== value)\n      return false;\n\n    return true;\n  }\n\n  function isReserved(token) {\n    if (!token.reserved) {\n      return false;\n    }\n    var meta = token.meta;\n\n    if (meta && meta.isFutureReservedWord && state.inES5()) {\n      if (!meta.es5) {\n        return false;\n      }\n      if (meta.strictOnly) {\n        if (!state.option.strict && !state.isStrict()) {\n          return false;\n        }\n      }\n\n      if (token.isProperty) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function supplant(str, data) {\n    return str.replace(/\\{([^{}]*)\\}/g, function(a, b) {\n      var r = data[b];\n      return typeof r === \"string\" || typeof r === \"number\" ? r : a;\n    });\n  }\n\n  function combine(dest, src) {\n    Object.keys(src).forEach(function(name) {\n      if (_.has(JSHINT.blacklist, name)) return;\n      dest[name] = src[name];\n    });\n  }\n\n  function processenforceall() {\n    if (state.option.enforceall) {\n      for (var enforceopt in options.bool.enforcing) {\n        if (state.option[enforceopt] === undefined &&\n            !options.noenforceall[enforceopt]) {\n          state.option[enforceopt] = true;\n        }\n      }\n      for (var relaxopt in options.bool.relaxing) {\n        if (state.option[relaxopt] === undefined) {\n          state.option[relaxopt] = false;\n        }\n      }\n    }\n  }\n\n  function assume() {\n    processenforceall();\n    if (!state.option.esversion && !state.option.moz) {\n      if (state.option.es3) {\n        state.option.esversion = 3;\n      } else if (state.option.esnext) {\n        state.option.esversion = 6;\n      } else {\n        state.option.esversion = 5;\n      }\n    }\n\n    if (state.inES5()) {\n      combine(predefined, vars.ecmaIdentifiers[5]);\n    }\n\n    if (state.inES6()) {\n      combine(predefined, vars.ecmaIdentifiers[6]);\n    }\n\n    if (state.option.module) {\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n      if (!state.inES6()) {\n        warning(\"W134\", state.tokens.next, \"module\", 6);\n      }\n    }\n\n    if (state.option.couch) {\n      combine(predefined, vars.couch);\n    }\n\n    if (state.option.qunit) {\n      combine(predefined, vars.qunit);\n    }\n\n    if (state.option.rhino) {\n      combine(predefined, vars.rhino);\n    }\n\n    if (state.option.shelljs) {\n      combine(predefined, vars.shelljs);\n      combine(predefined, vars.node);\n    }\n    if (state.option.typed) {\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.phantom) {\n      combine(predefined, vars.phantom);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.prototypejs) {\n      combine(predefined, vars.prototypejs);\n    }\n\n    if (state.option.node) {\n      combine(predefined, vars.node);\n      combine(predefined, vars.typed);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.devel) {\n      combine(predefined, vars.devel);\n    }\n\n    if (state.option.dojo) {\n      combine(predefined, vars.dojo);\n    }\n\n    if (state.option.browser) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n    }\n\n    if (state.option.browserify) {\n      combine(predefined, vars.browser);\n      combine(predefined, vars.typed);\n      combine(predefined, vars.browserify);\n      if (state.option.strict === true) {\n        state.option.strict = \"global\";\n      }\n    }\n\n    if (state.option.nonstandard) {\n      combine(predefined, vars.nonstandard);\n    }\n\n    if (state.option.jasmine) {\n      combine(predefined, vars.jasmine);\n    }\n\n    if (state.option.jquery) {\n      combine(predefined, vars.jquery);\n    }\n\n    if (state.option.mootools) {\n      combine(predefined, vars.mootools);\n    }\n\n    if (state.option.worker) {\n      combine(predefined, vars.worker);\n    }\n\n    if (state.option.wsh) {\n      combine(predefined, vars.wsh);\n    }\n\n    if (state.option.globalstrict && state.option.strict !== false) {\n      state.option.strict = \"global\";\n    }\n\n    if (state.option.yui) {\n      combine(predefined, vars.yui);\n    }\n\n    if (state.option.mocha) {\n      combine(predefined, vars.mocha);\n    }\n  }\n  function quit(code, line, chr) {\n    var percentage = Math.floor((line / state.lines.length) * 100);\n    var message = messages.errors[code].desc;\n\n    throw {\n      name: \"JSHintError\",\n      line: line,\n      character: chr,\n      message: message + \" (\" + percentage + \"% scanned).\",\n      raw: message,\n      code: code\n    };\n  }\n\n  function removeIgnoredMessages() {\n    var ignored = state.ignoredLines;\n\n    if (_.isEmpty(ignored)) return;\n    JSHINT.errors = _.reject(JSHINT.errors, function(err) { return ignored[err.line] });\n  }\n\n  function warning(code, t, a, b, c, d) {\n    var ch, l, w, msg;\n\n    if (/^W\\d{3}$/.test(code)) {\n      if (state.ignored[code])\n        return;\n\n      msg = messages.warnings[code];\n    } else if (/E\\d{3}/.test(code)) {\n      msg = messages.errors[code];\n    } else if (/I\\d{3}/.test(code)) {\n      msg = messages.info[code];\n    }\n\n    t = t || state.tokens.next || {};\n    if (t.id === \"(end)\") {  // `~\n      t = state.tokens.curr;\n    }\n\n    l = t.line || 0;\n    ch = t.from || 0;\n\n    w = {\n      id: \"(error)\",\n      raw: msg.desc,\n      code: msg.code,\n      evidence: state.lines[l - 1] || \"\",\n      line: l,\n      character: ch,\n      scope: JSHINT.scope,\n      a: a,\n      b: b,\n      c: c,\n      d: d\n    };\n\n    w.reason = supplant(msg.desc, w);\n    JSHINT.errors.push(w);\n\n    removeIgnoredMessages();\n\n    if (JSHINT.errors.length >= state.option.maxerr)\n      quit(\"E043\", l, ch);\n\n    return w;\n  }\n\n  function warningAt(m, l, ch, a, b, c, d) {\n    return warning(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n\n  function error(m, t, a, b, c, d) {\n    warning(m, t, a, b, c, d);\n  }\n\n  function errorAt(m, l, ch, a, b, c, d) {\n    return error(m, {\n      line: l,\n      from: ch\n    }, a, b, c, d);\n  }\n  function addInternalSrc(elem, src) {\n    var i;\n    i = {\n      id: \"(internal)\",\n      elem: elem,\n      value: src\n    };\n    JSHINT.internals.push(i);\n    return i;\n  }\n\n  function doOption() {\n    var nt = state.tokens.next;\n    var body = nt.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g) || [];\n\n    var predef = {};\n    if (nt.type === \"globals\") {\n      body.forEach(function(g, idx) {\n        g = g.split(\":\");\n        var key = (g[0] || \"\").trim();\n        var val = (g[1] || \"\").trim();\n\n        if (key === \"-\" || !key.length) {\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", nt);\n          return;\n        }\n\n        if (key.charAt(0) === \"-\") {\n          key = key.slice(1);\n          val = false;\n\n          JSHINT.blacklist[key] = key;\n          delete predefined[key];\n        } else {\n          predef[key] = (val === \"true\");\n        }\n      });\n\n      combine(predefined, predef);\n\n      for (var key in predef) {\n        if (_.has(predef, key)) {\n          declared[key] = nt;\n        }\n      }\n    }\n\n    if (nt.type === \"exported\") {\n      body.forEach(function(e, idx) {\n        if (!e.length) {\n          if (idx > 0 && idx === body.length - 1) {\n            return;\n          }\n          error(\"E002\", nt);\n          return;\n        }\n\n        state.funct[\"(scope)\"].addExported(e);\n      });\n    }\n\n    if (nt.type === \"members\") {\n      membersOnly = membersOnly || {};\n\n      body.forEach(function(m) {\n        var ch1 = m.charAt(0);\n        var ch2 = m.charAt(m.length - 1);\n\n        if (ch1 === ch2 && (ch1 === \"\\\"\" || ch1 === \"'\")) {\n          m = m\n            .substr(1, m.length - 2)\n            .replace(\"\\\\\\\"\", \"\\\"\");\n        }\n\n        membersOnly[m] = false;\n      });\n    }\n\n    var numvals = [\n      \"maxstatements\",\n      \"maxparams\",\n      \"maxdepth\",\n      \"maxcomplexity\",\n      \"maxerr\",\n      \"maxlen\",\n      \"indent\"\n    ];\n\n    if (nt.type === \"jshint\" || nt.type === \"jslint\") {\n      body.forEach(function(g) {\n        g = g.split(\":\");\n        var key = (g[0] || \"\").trim();\n        var val = (g[1] || \"\").trim();\n\n        if (!checkOption(key, nt)) {\n          return;\n        }\n\n        if (numvals.indexOf(key) >= 0) {\n          if (val !== \"false\") {\n            val = +val;\n\n            if (typeof val !== \"number\" || !isFinite(val) || val <= 0 || Math.floor(val) !== val) {\n              error(\"E032\", nt, g[1].trim());\n              return;\n            }\n\n            state.option[key] = val;\n          } else {\n            state.option[key] = key === \"indent\" ? 4 : false;\n          }\n\n          return;\n        }\n\n        if (key === \"validthis\") {\n\n          if (state.funct[\"(global)\"])\n            return void error(\"E009\");\n\n          if (val !== \"true\" && val !== \"false\")\n            return void error(\"E002\", nt);\n\n          state.option.validthis = (val === \"true\");\n          return;\n        }\n\n        if (key === \"quotmark\") {\n          switch (val) {\n          case \"true\":\n          case \"false\":\n            state.option.quotmark = (val === \"true\");\n            break;\n          case \"double\":\n          case \"single\":\n            state.option.quotmark = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"shadow\") {\n          switch (val) {\n          case \"true\":\n            state.option.shadow = true;\n            break;\n          case \"outer\":\n            state.option.shadow = \"outer\";\n            break;\n          case \"false\":\n          case \"inner\":\n            state.option.shadow = \"inner\";\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"unused\") {\n          switch (val) {\n          case \"true\":\n            state.option.unused = true;\n            break;\n          case \"false\":\n            state.option.unused = false;\n            break;\n          case \"vars\":\n          case \"strict\":\n            state.option.unused = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"latedef\") {\n          switch (val) {\n          case \"true\":\n            state.option.latedef = true;\n            break;\n          case \"false\":\n            state.option.latedef = false;\n            break;\n          case \"nofunc\":\n            state.option.latedef = \"nofunc\";\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"ignore\") {\n          switch (val) {\n          case \"line\":\n            state.ignoredLines[nt.line] = true;\n            removeIgnoredMessages();\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"strict\") {\n          switch (val) {\n          case \"true\":\n            state.option.strict = true;\n            break;\n          case \"false\":\n            state.option.strict = false;\n            break;\n          case \"func\":\n          case \"global\":\n          case \"implied\":\n            state.option.strict = val;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"module\") {\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", state.tokens.next, \"module\");\n          }\n        }\n        var esversions = {\n          es3   : 3,\n          es5   : 5,\n          esnext: 6\n        };\n        if (_.has(esversions, key)) {\n          switch (val) {\n          case \"true\":\n            state.option.moz = false;\n            state.option.esversion = esversions[key];\n            break;\n          case \"false\":\n            if (!state.option.moz) {\n              state.option.esversion = 5;\n            }\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          return;\n        }\n\n        if (key === \"esversion\") {\n          switch (val) {\n          case \"5\":\n            if (state.inES5(true)) {\n              warning(\"I003\");\n            }\n          case \"3\":\n          case \"6\":\n            state.option.moz = false;\n            state.option.esversion = +val;\n            break;\n          case \"2015\":\n            state.option.moz = false;\n            state.option.esversion = 6;\n            break;\n          default:\n            error(\"E002\", nt);\n          }\n          if (!hasParsedCode(state.funct)) {\n            error(\"E055\", state.tokens.next, \"esversion\");\n          }\n          return;\n        }\n\n        var match = /^([+-])(W\\d{3})$/g.exec(key);\n        if (match) {\n          state.ignored[match[2]] = (match[1] === \"-\");\n          return;\n        }\n\n        var tn;\n        if (val === \"true\" || val === \"false\") {\n          if (nt.type === \"jslint\") {\n            tn = options.renamed[key] || key;\n            state.option[tn] = (val === \"true\");\n\n            if (options.inverted[tn] !== undefined) {\n              state.option[tn] = !state.option[tn];\n            }\n          } else {\n            state.option[key] = (val === \"true\");\n          }\n\n          if (key === \"newcap\") {\n            state.option[\"(explicitNewcap)\"] = true;\n          }\n          return;\n        }\n\n        error(\"E002\", nt);\n      });\n\n      assume();\n    }\n  }\n\n  function peek(p) {\n    var i = p || 0, j = lookahead.length, t;\n\n    if (i < j) {\n      return lookahead[i];\n    }\n\n    while (j <= i) {\n      t = lookahead[j];\n      if (!t) {\n        t = lookahead[j] = lex.token();\n      }\n      j += 1;\n    }\n    if (!t && state.tokens.next.id === \"(end)\") {\n      return state.tokens.next;\n    }\n\n    return t;\n  }\n\n  function peekIgnoreEOL() {\n    var i = 0;\n    var t;\n    do {\n      t = peek(i++);\n    } while (t.id === \"(endline)\");\n    return t;\n  }\n\n  function advance(id, t) {\n\n    switch (state.tokens.curr.id) {\n    case \"(number)\":\n      if (state.tokens.next.id === \".\") {\n        warning(\"W005\", state.tokens.curr);\n      }\n      break;\n    case \"-\":\n      if (state.tokens.next.id === \"-\" || state.tokens.next.id === \"--\") {\n        warning(\"W006\");\n      }\n      break;\n    case \"+\":\n      if (state.tokens.next.id === \"+\" || state.tokens.next.id === \"++\") {\n        warning(\"W007\");\n      }\n      break;\n    }\n\n    if (id && state.tokens.next.id !== id) {\n      if (t) {\n        if (state.tokens.next.id === \"(end)\") {\n          error(\"E019\", t, t.id);\n        } else {\n          error(\"E020\", state.tokens.next, id, t.id, t.line, state.tokens.next.value);\n        }\n      } else if (state.tokens.next.type !== \"(identifier)\" || state.tokens.next.value !== id) {\n        warning(\"W116\", state.tokens.next, id, state.tokens.next.value);\n      }\n    }\n\n    state.tokens.prev = state.tokens.curr;\n    state.tokens.curr = state.tokens.next;\n    for (;;) {\n      state.tokens.next = lookahead.shift() || lex.token();\n\n      if (!state.tokens.next) { // No more tokens left, give up\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      if (state.tokens.next.id === \"(end)\" || state.tokens.next.id === \"(error)\") {\n        return;\n      }\n\n      if (state.tokens.next.check) {\n        state.tokens.next.check();\n      }\n\n      if (state.tokens.next.isSpecial) {\n        if (state.tokens.next.type === \"falls through\") {\n          state.tokens.curr.caseFallsThrough = true;\n        } else {\n          doOption();\n        }\n      } else {\n        if (state.tokens.next.id !== \"(endline)\") {\n          break;\n        }\n      }\n    }\n  }\n\n  function isInfix(token) {\n    return token.infix || (!token.identifier && !token.template && !!token.led);\n  }\n\n  function isEndOfExpr() {\n    var curr = state.tokens.curr;\n    var next = state.tokens.next;\n    if (next.id === \";\" || next.id === \"}\" || next.id === \":\") {\n      return true;\n    }\n    if (isInfix(next) === isInfix(curr) || (curr.id === \"yield\" && state.inMoz())) {\n      return curr.line !== startLine(next);\n    }\n    return false;\n  }\n\n  function isBeginOfExpr(prev) {\n    return !prev.left && prev.arity !== \"unary\";\n  }\n\n  function expression(rbp, initial) {\n    var left, isArray = false, isObject = false, isLetExpr = false;\n\n    state.nameStack.push();\n    if (!initial && state.tokens.next.value === \"let\" && peek(0).value === \"(\") {\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.next, \"let expressions\");\n      }\n      isLetExpr = true;\n      state.funct[\"(scope)\"].stack();\n      advance(\"let\");\n      advance(\"(\");\n      state.tokens.prev.fud();\n      advance(\")\");\n    }\n\n    if (state.tokens.next.id === \"(end)\")\n      error(\"E006\", state.tokens.curr);\n\n    var isDangerous =\n      state.option.asi &&\n      state.tokens.prev.line !== startLine(state.tokens.curr) &&\n      _.contains([\"]\", \")\"], state.tokens.prev.id) &&\n      _.contains([\"[\", \"(\"], state.tokens.curr.id);\n\n    if (isDangerous)\n      warning(\"W014\", state.tokens.curr, state.tokens.curr.id);\n\n    advance();\n\n    if (initial) {\n      state.funct[\"(verb)\"] = state.tokens.curr.value;\n      state.tokens.curr.beginsStmt = true;\n    }\n\n    if (initial === true && state.tokens.curr.fud) {\n      left = state.tokens.curr.fud();\n    } else {\n      if (state.tokens.curr.nud) {\n        left = state.tokens.curr.nud();\n      } else {\n        error(\"E030\", state.tokens.curr, state.tokens.curr.id);\n      }\n      while ((rbp < state.tokens.next.lbp || state.tokens.next.type === \"(template)\") &&\n              !isEndOfExpr()) {\n        isArray = state.tokens.curr.value === \"Array\";\n        isObject = state.tokens.curr.value === \"Object\";\n        if (left && (left.value || (left.first && left.first.value))) {\n          if (left.value !== \"new\" ||\n            (left.first && left.first.value && left.first.value === \".\")) {\n            isArray = false;\n            if (left.value !== state.tokens.curr.value) {\n              isObject = false;\n            }\n          }\n        }\n\n        advance();\n\n        if (isArray && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W009\", state.tokens.curr);\n        }\n\n        if (isObject && state.tokens.curr.id === \"(\" && state.tokens.next.id === \")\") {\n          warning(\"W010\", state.tokens.curr);\n        }\n\n        if (left && state.tokens.curr.led) {\n          left = state.tokens.curr.led(left);\n        } else {\n          error(\"E033\", state.tokens.curr, state.tokens.curr.id);\n        }\n      }\n    }\n    if (isLetExpr) {\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    state.nameStack.pop();\n\n    return left;\n  }\n\n  function startLine(token) {\n    return token.startLine || token.line;\n  }\n\n  function nobreaknonadjacent(left, right) {\n    left = left || state.tokens.curr;\n    right = right || state.tokens.next;\n    if (!state.option.laxbreak && left.line !== startLine(right)) {\n      warning(\"W014\", right, right.value);\n    }\n  }\n\n  function nolinebreak(t) {\n    t = t || state.tokens.curr;\n    if (t.line !== startLine(state.tokens.next)) {\n      warning(\"E022\", t, t.value);\n    }\n  }\n\n  function nobreakcomma(left, right) {\n    if (left.line !== startLine(right)) {\n      if (!state.option.laxcomma) {\n        if (comma.first) {\n          warning(\"I001\");\n          comma.first = false;\n        }\n        warning(\"W014\", left, right.value);\n      }\n    }\n  }\n\n  function comma(opts) {\n    opts = opts || {};\n\n    if (!opts.peek) {\n      nobreakcomma(state.tokens.curr, state.tokens.next);\n      advance(\",\");\n    } else {\n      nobreakcomma(state.tokens.prev, state.tokens.curr);\n    }\n\n    if (state.tokens.next.identifier && !(opts.property && state.inES5())) {\n      switch (state.tokens.next.value) {\n      case \"break\":\n      case \"case\":\n      case \"catch\":\n      case \"continue\":\n      case \"default\":\n      case \"do\":\n      case \"else\":\n      case \"finally\":\n      case \"for\":\n      case \"if\":\n      case \"in\":\n      case \"instanceof\":\n      case \"return\":\n      case \"switch\":\n      case \"throw\":\n      case \"try\":\n      case \"var\":\n      case \"let\":\n      case \"while\":\n      case \"with\":\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n\n    if (state.tokens.next.type === \"(punctuator)\") {\n      switch (state.tokens.next.value) {\n      case \"}\":\n      case \"]\":\n      case \",\":\n        if (opts.allowTrailing) {\n          return true;\n        }\n      case \")\":\n        error(\"E024\", state.tokens.next, state.tokens.next.value);\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function symbol(s, p) {\n    var x = state.syntax[s];\n    if (!x || typeof x !== \"object\") {\n      state.syntax[s] = x = {\n        id: s,\n        lbp: p,\n        value: s\n      };\n    }\n    return x;\n  }\n\n  function delim(s) {\n    var x = symbol(s, 0);\n    x.delim = true;\n    return x;\n  }\n\n  function stmt(s, f) {\n    var x = delim(s);\n    x.identifier = x.reserved = true;\n    x.fud = f;\n    return x;\n  }\n\n  function blockstmt(s, f) {\n    var x = stmt(s, f);\n    x.block = true;\n    return x;\n  }\n\n  function reserveName(x) {\n    var c = x.id.charAt(0);\n    if ((c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\")) {\n      x.identifier = x.reserved = true;\n    }\n    return x;\n  }\n\n  function prefix(s, f) {\n    var x = symbol(s, 150);\n    reserveName(x);\n\n    x.nud = (typeof f === \"function\") ? f : function() {\n      this.arity = \"unary\";\n      this.right = expression(150);\n\n      if (this.id === \"++\" || this.id === \"--\") {\n        if (state.option.plusplus) {\n          warning(\"W016\", this, this.id);\n        } else if (this.right && (!this.right.identifier || isReserved(this.right)) &&\n            this.right.id !== \".\" && this.right.id !== \"[\") {\n          warning(\"W017\", this);\n        }\n\n        if (this.right && this.right.isMetaProperty) {\n          error(\"E031\", this);\n        } else if (this.right && this.right.identifier) {\n          state.funct[\"(scope)\"].block.modify(this.right.value, this);\n        }\n      }\n\n      return this;\n    };\n\n    return x;\n  }\n\n  function type(s, f) {\n    var x = delim(s);\n    x.type = s;\n    x.nud = f;\n    return x;\n  }\n\n  function reserve(name, func) {\n    var x = type(name, func);\n    x.identifier = true;\n    x.reserved = true;\n    return x;\n  }\n\n  function FutureReservedWord(name, meta) {\n    var x = type(name, (meta && meta.nud) || function() {\n      return this;\n    });\n\n    meta = meta || {};\n    meta.isFutureReservedWord = true;\n\n    x.value = name;\n    x.identifier = true;\n    x.reserved = true;\n    x.meta = meta;\n\n    return x;\n  }\n\n  function reservevar(s, v) {\n    return reserve(s, function() {\n      if (typeof v === \"function\") {\n        v(this);\n      }\n      return this;\n    });\n  }\n\n  function infix(s, f, p, w) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.infix = true;\n    x.led = function(left) {\n      if (!w) {\n        nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      }\n      if ((s === \"in\" || s === \"instanceof\") && left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n      if (typeof f === \"function\") {\n        return f(left, this);\n      } else {\n        this.left = left;\n        this.right = expression(p);\n        return this;\n      }\n    };\n    return x;\n  }\n\n  function application(s) {\n    var x = symbol(s, 42);\n\n    x.led = function(left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n\n      this.left = left;\n      this.right = doFunction({ type: \"arrow\", loneArg: left });\n      return this;\n    };\n    return x;\n  }\n\n  function relation(s, f) {\n    var x = symbol(s, 100);\n\n    x.led = function(left) {\n      nobreaknonadjacent(state.tokens.prev, state.tokens.curr);\n      this.left = left;\n      var right = this.right = expression(100);\n\n      if (isIdentifier(left, \"NaN\") || isIdentifier(right, \"NaN\")) {\n        warning(\"W019\", this);\n      } else if (f) {\n        f.apply(this, [left, right]);\n      }\n\n      if (!left || !right) {\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      if (left.id === \"!\") {\n        warning(\"W018\", left, \"!\");\n      }\n\n      if (right.id === \"!\") {\n        warning(\"W018\", right, \"!\");\n      }\n\n      return this;\n    };\n    return x;\n  }\n\n  function isPoorRelation(node) {\n    return node &&\n        ((node.type === \"(number)\" && +node.value === 0) ||\n         (node.type === \"(string)\" && node.value === \"\") ||\n         (node.type === \"null\" && !state.option.eqnull) ||\n        node.type === \"true\" ||\n        node.type === \"false\" ||\n        node.type === \"undefined\");\n  }\n\n  var typeofValues = {};\n  typeofValues.legacy = [\n    \"xml\",\n    \"unknown\"\n  ];\n  typeofValues.es3 = [\n    \"undefined\", \"boolean\", \"number\", \"string\", \"function\", \"object\",\n  ];\n  typeofValues.es3 = typeofValues.es3.concat(typeofValues.legacy);\n  typeofValues.es6 = typeofValues.es3.concat(\"symbol\");\n  function isTypoTypeof(left, right, state) {\n    var values;\n\n    if (state.option.notypeof)\n      return false;\n\n    if (!left || !right)\n      return false;\n\n    values = state.inES6() ? typeofValues.es6 : typeofValues.es3;\n\n    if (right.type === \"(identifier)\" && right.value === \"typeof\" && left.type === \"(string)\")\n      return !_.contains(values, left.value);\n\n    return false;\n  }\n\n  function isGlobalEval(left, state) {\n    var isGlobal = false;\n    if (left.type === \"this\" && state.funct[\"(context)\"] === null) {\n      isGlobal = true;\n    }\n    else if (left.type === \"(identifier)\") {\n      if (state.option.node && left.value === \"global\") {\n        isGlobal = true;\n      }\n\n      else if (state.option.browser && (left.value === \"window\" || left.value === \"document\")) {\n        isGlobal = true;\n      }\n    }\n\n    return isGlobal;\n  }\n\n  function findNativePrototype(left) {\n    var natives = [\n      \"Array\", \"ArrayBuffer\", \"Boolean\", \"Collator\", \"DataView\", \"Date\",\n      \"DateTimeFormat\", \"Error\", \"EvalError\", \"Float32Array\", \"Float64Array\",\n      \"Function\", \"Infinity\", \"Intl\", \"Int16Array\", \"Int32Array\", \"Int8Array\",\n      \"Iterator\", \"Number\", \"NumberFormat\", \"Object\", \"RangeError\",\n      \"ReferenceError\", \"RegExp\", \"StopIteration\", \"String\", \"SyntaxError\",\n      \"TypeError\", \"Uint16Array\", \"Uint32Array\", \"Uint8Array\", \"Uint8ClampedArray\",\n      \"URIError\"\n    ];\n\n    function walkPrototype(obj) {\n      if (typeof obj !== \"object\") return;\n      return obj.right === \"prototype\" ? obj : walkPrototype(obj.left);\n    }\n\n    function walkNative(obj) {\n      while (!obj.identifier && typeof obj.left === \"object\")\n        obj = obj.left;\n\n      if (obj.identifier && natives.indexOf(obj.value) >= 0)\n        return obj.value;\n    }\n\n    var prototype = walkPrototype(left);\n    if (prototype) return walkNative(prototype);\n  }\n  function checkLeftSideAssign(left, assignToken, options) {\n\n    var allowDestructuring = options && options.allowDestructuring;\n\n    assignToken = assignToken || left;\n\n    if (state.option.freeze) {\n      var nativeObject = findNativePrototype(left);\n      if (nativeObject)\n        warning(\"W121\", left, nativeObject);\n    }\n\n    if (left.identifier && !left.isMetaProperty) {\n      state.funct[\"(scope)\"].block.reassign(left.value, left);\n    }\n\n    if (left.id === \".\") {\n      if (!left.left || left.left.value === \"arguments\" && !state.isStrict()) {\n        warning(\"E031\", assignToken);\n      }\n\n      state.nameStack.set(state.tokens.prev);\n      return true;\n    } else if (left.id === \"{\" || left.id === \"[\") {\n      if (allowDestructuring && state.tokens.curr.left.destructAssign) {\n        state.tokens.curr.left.destructAssign.forEach(function(t) {\n          if (t.id) {\n            state.funct[\"(scope)\"].block.modify(t.id, t.token);\n          }\n        });\n      } else {\n        if (left.id === \"{\" || !left.left) {\n          warning(\"E031\", assignToken);\n        } else if (left.left.value === \"arguments\" && !state.isStrict()) {\n          warning(\"E031\", assignToken);\n        }\n      }\n\n      if (left.id === \"[\") {\n        state.nameStack.set(left.right);\n      }\n\n      return true;\n    } else if (left.isMetaProperty) {\n      error(\"E031\", assignToken);\n      return true;\n    } else if (left.identifier && !isReserved(left)) {\n      if (state.funct[\"(scope)\"].labeltype(left.value) === \"exception\") {\n        warning(\"W022\", left);\n      }\n      state.nameStack.set(left);\n      return true;\n    }\n\n    if (left === state.syntax[\"function\"]) {\n      warning(\"W023\", state.tokens.curr);\n    }\n\n    return false;\n  }\n\n  function assignop(s, f, p) {\n    var x = infix(s, typeof f === \"function\" ? f : function(left, that) {\n      that.left = left;\n\n      if (left && checkLeftSideAssign(left, that, { allowDestructuring: true })) {\n        that.right = expression(10);\n        return that;\n      }\n\n      error(\"E031\", that);\n    }, p);\n\n    x.exps = true;\n    x.assign = true;\n    return x;\n  }\n\n\n  function bitwise(s, f, p) {\n    var x = symbol(s, p);\n    reserveName(x);\n    x.led = (typeof f === \"function\") ? f : function(left) {\n      if (state.option.bitwise) {\n        warning(\"W016\", this, this.id);\n      }\n      this.left = left;\n      this.right = expression(p);\n      return this;\n    };\n    return x;\n  }\n\n  function bitwiseassignop(s) {\n    return assignop(s, function(left, that) {\n      if (state.option.bitwise) {\n        warning(\"W016\", that, that.id);\n      }\n\n      if (left && checkLeftSideAssign(left, that)) {\n        that.right = expression(10);\n        return that;\n      }\n      error(\"E031\", that);\n    }, 20);\n  }\n\n  function suffix(s) {\n    var x = symbol(s, 150);\n\n    x.led = function(left) {\n      if (state.option.plusplus) {\n        warning(\"W016\", this, this.id);\n      } else if ((!left.identifier || isReserved(left)) && left.id !== \".\" && left.id !== \"[\") {\n        warning(\"W017\", this);\n      }\n\n      if (left.isMetaProperty) {\n        error(\"E031\", this);\n      } else if (left && left.identifier) {\n        state.funct[\"(scope)\"].block.modify(left.value, left);\n      }\n\n      this.left = left;\n      return this;\n    };\n    return x;\n  }\n\n  function optionalidentifier(fnparam, prop, preserve) {\n    if (!state.tokens.next.identifier) {\n      return;\n    }\n\n    if (!preserve) {\n      advance();\n    }\n\n    var curr = state.tokens.curr;\n    var val  = state.tokens.curr.value;\n\n    if (!isReserved(curr)) {\n      return val;\n    }\n\n    if (prop) {\n      if (state.inES5()) {\n        return val;\n      }\n    }\n\n    if (fnparam && val === \"undefined\") {\n      return val;\n    }\n\n    warning(\"W024\", state.tokens.curr, state.tokens.curr.id);\n    return val;\n  }\n  function identifier(fnparam, prop) {\n    var i = optionalidentifier(fnparam, prop, false);\n    if (i) {\n      return i;\n    }\n    if (state.tokens.next.value === \"...\") {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.next, \"spread/rest operator\", \"6\");\n      }\n      advance();\n\n      if (checkPunctuator(state.tokens.next, \"...\")) {\n        warning(\"E024\", state.tokens.next, \"...\");\n        while (checkPunctuator(state.tokens.next, \"...\")) {\n          advance();\n        }\n      }\n\n      if (!state.tokens.next.identifier) {\n        warning(\"E024\", state.tokens.curr, \"...\");\n        return;\n      }\n\n      return identifier(fnparam, prop);\n    } else {\n      error(\"E030\", state.tokens.next, state.tokens.next.value);\n      if (state.tokens.next.id !== \";\") {\n        advance();\n      }\n    }\n  }\n\n\n  function reachable(controlToken) {\n    var i = 0, t;\n    if (state.tokens.next.id !== \";\" || controlToken.inBracelessBlock) {\n      return;\n    }\n    for (;;) {\n      do {\n        t = peek(i);\n        i += 1;\n      } while (t.id !== \"(end)\" && t.id === \"(comment)\");\n\n      if (t.reach) {\n        return;\n      }\n      if (t.id !== \"(endline)\") {\n        if (t.id === \"function\") {\n          if (state.option.latedef === true) {\n            warning(\"W026\", t);\n          }\n          break;\n        }\n\n        warning(\"W027\", t, t.value, controlToken.value);\n        break;\n      }\n    }\n  }\n\n  function parseFinalSemicolon() {\n    if (state.tokens.next.id !== \";\") {\n      if (state.tokens.next.isUnclosed) return advance();\n\n      var sameLine = startLine(state.tokens.next) === state.tokens.curr.line &&\n                     state.tokens.next.id !== \"(end)\";\n      var blockEnd = checkPunctuator(state.tokens.next, \"}\");\n\n      if (sameLine && !blockEnd) {\n        errorAt(\"E058\", state.tokens.curr.line, state.tokens.curr.character);\n      } else if (!state.option.asi) {\n        if ((blockEnd && !state.option.lastsemic) || !sameLine) {\n          warningAt(\"W033\", state.tokens.curr.line, state.tokens.curr.character);\n        }\n      }\n    } else {\n      advance(\";\");\n    }\n  }\n\n  function statement() {\n    var i = indent, r, t = state.tokens.next, hasOwnScope = false;\n\n    if (t.id === \";\") {\n      advance(\";\");\n      return;\n    }\n    var res = isReserved(t);\n\n    if (res && t.meta && t.meta.isFutureReservedWord && peek().id === \":\") {\n      warning(\"W024\", t, t.id);\n      res = false;\n    }\n\n    if (t.identifier && !res && peek().id === \":\") {\n      advance();\n      advance(\":\");\n\n      hasOwnScope = true;\n      state.funct[\"(scope)\"].stack();\n      state.funct[\"(scope)\"].block.addBreakLabel(t.value, { token: state.tokens.curr });\n\n      if (!state.tokens.next.labelled && state.tokens.next.value !== \"{\") {\n        warning(\"W028\", state.tokens.next, t.value, state.tokens.next.value);\n      }\n\n      state.tokens.next.label = t.value;\n      t = state.tokens.next;\n    }\n\n    if (t.id === \"{\") {\n      var iscase = (state.funct[\"(verb)\"] === \"case\" && state.tokens.curr.value === \":\");\n      block(true, true, false, false, iscase);\n      return;\n    }\n\n    r = expression(0, true);\n\n    if (r && !(r.identifier && r.value === \"function\") &&\n        !(r.type === \"(punctuator)\" && r.left &&\n          r.left.identifier && r.left.value === \"function\")) {\n      if (!state.isStrict() &&\n          state.option.strict === \"global\") {\n        warning(\"E007\");\n      }\n    }\n\n    if (!t.block) {\n      if (!state.option.expr && (!r || !r.exps)) {\n        warning(\"W030\", state.tokens.curr);\n      } else if (state.option.nonew && r && r.left && r.id === \"(\" && r.left.id === \"new\") {\n        warning(\"W031\", t);\n      }\n      parseFinalSemicolon();\n    }\n\n    indent = i;\n    if (hasOwnScope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return r;\n  }\n\n\n  function statements() {\n    var a = [], p;\n\n    while (!state.tokens.next.reach && state.tokens.next.id !== \"(end)\") {\n      if (state.tokens.next.id === \";\") {\n        p = peek();\n\n        if (!p || (p.id !== \"(\" && p.id !== \"[\")) {\n          warning(\"W032\");\n        }\n\n        advance(\";\");\n      } else {\n        a.push(statement());\n      }\n    }\n    return a;\n  }\n  function directives() {\n    var i, p, pn;\n\n    while (state.tokens.next.id === \"(string)\") {\n      p = peek(0);\n      if (p.id === \"(endline)\") {\n        i = 1;\n        do {\n          pn = peek(i++);\n        } while (pn.id === \"(endline)\");\n        if (pn.id === \";\") {\n          p = pn;\n        } else if (pn.value === \"[\" || pn.value === \".\") {\n          break;\n        } else if (!state.option.asi || pn.value === \"(\") {\n          warning(\"W033\", state.tokens.next);\n        }\n      } else if (p.id === \".\" || p.id === \"[\") {\n        break;\n      } else if (p.id !== \";\") {\n        warning(\"W033\", p);\n      }\n\n      advance();\n      var directive = state.tokens.curr.value;\n      if (state.directive[directive] ||\n          (directive === \"use strict\" && state.option.strict === \"implied\")) {\n        warning(\"W034\", state.tokens.curr, directive);\n      }\n      state.directive[directive] = true;\n\n      if (p.id === \";\") {\n        advance(\";\");\n      }\n    }\n\n    if (state.isStrict()) {\n      if (!state.option[\"(explicitNewcap)\"]) {\n        state.option.newcap = true;\n      }\n      state.option.undef = true;\n    }\n  }\n  function block(ordinary, stmt, isfunc, isfatarrow, iscase) {\n    var a,\n      b = inblock,\n      old_indent = indent,\n      m,\n      t,\n      line,\n      d;\n\n    inblock = ordinary;\n\n    t = state.tokens.next;\n\n    var metrics = state.funct[\"(metrics)\"];\n    metrics.nestedBlockDepth += 1;\n    metrics.verifyMaxNestedBlockDepthPerFunction();\n\n    if (state.tokens.next.id === \"{\") {\n      advance(\"{\");\n      state.funct[\"(scope)\"].stack();\n\n      line = state.tokens.curr.line;\n      if (state.tokens.next.id !== \"}\") {\n        indent += state.option.indent;\n        while (!ordinary && state.tokens.next.from > indent) {\n          indent += state.option.indent;\n        }\n\n        if (isfunc) {\n          m = {};\n          for (d in state.directive) {\n            if (_.has(state.directive, d)) {\n              m[d] = state.directive[d];\n            }\n          }\n          directives();\n\n          if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n            if (!m[\"use strict\"] && !state.isStrict()) {\n              warning(\"E007\");\n            }\n          }\n        }\n\n        a = statements();\n\n        metrics.statementCount += a.length;\n\n        indent -= state.option.indent;\n      }\n\n      advance(\"}\", t);\n\n      if (isfunc) {\n        state.funct[\"(scope)\"].validateParams();\n        if (m) {\n          state.directive = m;\n        }\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n      indent = old_indent;\n    } else if (!ordinary) {\n      if (isfunc) {\n        state.funct[\"(scope)\"].stack();\n\n        m = {};\n        if (stmt && !isfatarrow && !state.inMoz()) {\n          error(\"W118\", state.tokens.curr, \"function closure expressions\");\n        }\n\n        if (!stmt) {\n          for (d in state.directive) {\n            if (_.has(state.directive, d)) {\n              m[d] = state.directive[d];\n            }\n          }\n        }\n        expression(10);\n\n        if (state.option.strict && state.funct[\"(context)\"][\"(global)\"]) {\n          if (!m[\"use strict\"] && !state.isStrict()) {\n            warning(\"E007\");\n          }\n        }\n\n        state.funct[\"(scope)\"].unstack();\n      } else {\n        error(\"E021\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n    } else {\n      state.funct[\"(noblockscopedvar)\"] = state.tokens.next.id !== \"for\";\n      state.funct[\"(scope)\"].stack();\n\n      if (!stmt || state.option.curly) {\n        warning(\"W116\", state.tokens.next, \"{\", state.tokens.next.value);\n      }\n\n      state.tokens.next.inBracelessBlock = true;\n      indent += state.option.indent;\n      a = [statement()];\n      indent -= state.option.indent;\n\n      state.funct[\"(scope)\"].unstack();\n      delete state.funct[\"(noblockscopedvar)\"];\n    }\n    switch (state.funct[\"(verb)\"]) {\n    case \"break\":\n    case \"continue\":\n    case \"return\":\n    case \"throw\":\n      if (iscase) {\n        break;\n      }\n    default:\n      state.funct[\"(verb)\"] = null;\n    }\n\n    inblock = b;\n    if (ordinary && state.option.noempty && (!a || a.length === 0)) {\n      warning(\"W035\", state.tokens.prev);\n    }\n    metrics.nestedBlockDepth -= 1;\n    return a;\n  }\n\n\n  function countMember(m) {\n    if (membersOnly && typeof membersOnly[m] !== \"boolean\") {\n      warning(\"W036\", state.tokens.curr, m);\n    }\n    if (typeof member[m] === \"number\") {\n      member[m] += 1;\n    } else {\n      member[m] = 1;\n    }\n  }\n\n  type(\"(number)\", function() {\n    return this;\n  });\n\n  type(\"(string)\", function() {\n    return this;\n  });\n\n  state.syntax[\"(identifier)\"] = {\n    type: \"(identifier)\",\n    lbp: 0,\n    identifier: true,\n\n    nud: function() {\n      var v = this.value;\n      if (state.tokens.next.id === \"=>\") {\n        return this;\n      }\n\n      if (!state.funct[\"(comparray)\"].check(v)) {\n        state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n      }\n      return this;\n    },\n\n    led: function() {\n      error(\"E033\", state.tokens.next, state.tokens.next.value);\n    }\n  };\n\n  var baseTemplateSyntax = {\n    lbp: 0,\n    identifier: false,\n    template: true,\n  };\n  state.syntax[\"(template)\"] = _.extend({\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template middle)\"] = _.extend({\n    type: \"(template middle)\",\n    middle: true,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(template tail)\"] = _.extend({\n    type: \"(template tail)\",\n    tail: true,\n    noSubst: false\n  }, baseTemplateSyntax);\n\n  state.syntax[\"(no subst template)\"] = _.extend({\n    type: \"(template)\",\n    nud: doTemplateLiteral,\n    led: doTemplateLiteral,\n    noSubst: true,\n    tail: true // mark as tail, since it's always the last component\n  }, baseTemplateSyntax);\n\n  type(\"(regexp)\", function() {\n    return this;\n  });\n\n  delim(\"(endline)\");\n  delim(\"(begin)\");\n  delim(\"(end)\").reach = true;\n  delim(\"(error)\").reach = true;\n  delim(\"}\").reach = true;\n  delim(\")\");\n  delim(\"]\");\n  delim(\"\\\"\").reach = true;\n  delim(\"'\").reach = true;\n  delim(\";\");\n  delim(\":\").reach = true;\n  delim(\"#\");\n\n  reserve(\"else\");\n  reserve(\"case\").reach = true;\n  reserve(\"catch\");\n  reserve(\"default\").reach = true;\n  reserve(\"finally\");\n  reservevar(\"arguments\", function(x) {\n    if (state.isStrict() && state.funct[\"(global)\"]) {\n      warning(\"E008\", x);\n    }\n  });\n  reservevar(\"eval\");\n  reservevar(\"false\");\n  reservevar(\"Infinity\");\n  reservevar(\"null\");\n  reservevar(\"this\", function(x) {\n    if (state.isStrict() && !isMethod() &&\n        !state.option.validthis && ((state.funct[\"(statement)\"] &&\n        state.funct[\"(name)\"].charAt(0) > \"Z\") || state.funct[\"(global)\"])) {\n      warning(\"W040\", x);\n    }\n  });\n  reservevar(\"true\");\n  reservevar(\"undefined\");\n\n  assignop(\"=\", \"assign\", 20);\n  assignop(\"+=\", \"assignadd\", 20);\n  assignop(\"-=\", \"assignsub\", 20);\n  assignop(\"*=\", \"assignmult\", 20);\n  assignop(\"/=\", \"assigndiv\", 20).nud = function() {\n    error(\"E014\");\n  };\n  assignop(\"%=\", \"assignmod\", 20);\n\n  bitwiseassignop(\"&=\");\n  bitwiseassignop(\"|=\");\n  bitwiseassignop(\"^=\");\n  bitwiseassignop(\"<<=\");\n  bitwiseassignop(\">>=\");\n  bitwiseassignop(\">>>=\");\n  infix(\",\", function(left, that) {\n    var expr;\n    that.exprs = [left];\n\n    if (state.option.nocomma) {\n      warning(\"W127\");\n    }\n\n    if (!comma({ peek: true })) {\n      return that;\n    }\n    while (true) {\n      if (!(expr = expression(10))) {\n        break;\n      }\n      that.exprs.push(expr);\n      if (state.tokens.next.value !== \",\" || !comma()) {\n        break;\n      }\n    }\n    return that;\n  }, 10, true);\n\n  infix(\"?\", function(left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(10);\n    advance(\":\");\n    that[\"else\"] = expression(10);\n    return that;\n  }, 30);\n\n  var orPrecendence = 40;\n  infix(\"||\", function(left, that) {\n    increaseComplexityCount();\n    that.left = left;\n    that.right = expression(orPrecendence);\n    return that;\n  }, orPrecendence);\n  infix(\"&&\", \"and\", 50);\n  bitwise(\"|\", \"bitor\", 70);\n  bitwise(\"^\", \"bitxor\", 80);\n  bitwise(\"&\", \"bitand\", 90);\n  relation(\"==\", function(left, right) {\n    var eqnull = state.option.eqnull &&\n      ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    switch (true) {\n      case !eqnull && state.option.eqeqeq:\n        this.from = this.character;\n        warning(\"W116\", this, \"===\", \"==\");\n        break;\n      case isPoorRelation(left):\n        warning(\"W041\", this, \"===\", left.value);\n        break;\n      case isPoorRelation(right):\n        warning(\"W041\", this, \"===\", right.value);\n        break;\n      case isTypoTypeof(right, left, state):\n        warning(\"W122\", this, right.value);\n        break;\n      case isTypoTypeof(left, right, state):\n        warning(\"W122\", this, left.value);\n        break;\n    }\n\n    return this;\n  });\n  relation(\"===\", function(left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!=\", function(left, right) {\n    var eqnull = state.option.eqnull &&\n        ((left && left.value) === \"null\" || (right && right.value) === \"null\");\n\n    if (!eqnull && state.option.eqeqeq) {\n      this.from = this.character;\n      warning(\"W116\", this, \"!==\", \"!=\");\n    } else if (isPoorRelation(left)) {\n      warning(\"W041\", this, \"!==\", left.value);\n    } else if (isPoorRelation(right)) {\n      warning(\"W041\", this, \"!==\", right.value);\n    } else if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"!==\", function(left, right) {\n    if (isTypoTypeof(right, left, state)) {\n      warning(\"W122\", this, right.value);\n    } else if (isTypoTypeof(left, right, state)) {\n      warning(\"W122\", this, left.value);\n    }\n    return this;\n  });\n  relation(\"<\");\n  relation(\">\");\n  relation(\"<=\");\n  relation(\">=\");\n  bitwise(\"<<\", \"shiftleft\", 120);\n  bitwise(\">>\", \"shiftright\", 120);\n  bitwise(\">>>\", \"shiftrightunsigned\", 120);\n  infix(\"in\", \"in\", 120);\n  infix(\"instanceof\", \"instanceof\", 120);\n  infix(\"+\", function(left, that) {\n    var right;\n    that.left = left;\n    that.right = right = expression(130);\n\n    if (left && right && left.id === \"(string)\" && right.id === \"(string)\") {\n      left.value += right.value;\n      left.character = right.character;\n      if (!state.option.scripturl && reg.javascriptURL.test(left.value)) {\n        warning(\"W050\", left);\n      }\n      return left;\n    }\n\n    return that;\n  }, 130);\n  prefix(\"+\", \"num\");\n  prefix(\"+++\", function() {\n    warning(\"W007\");\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n  infix(\"+++\", function(left) {\n    warning(\"W007\");\n    this.left = left;\n    this.right = expression(130);\n    return this;\n  }, 130);\n  infix(\"-\", \"sub\", 130);\n  prefix(\"-\", \"neg\");\n  prefix(\"---\", function() {\n    warning(\"W006\");\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n  infix(\"---\", function(left) {\n    warning(\"W006\");\n    this.left = left;\n    this.right = expression(130);\n    return this;\n  }, 130);\n  infix(\"*\", \"mult\", 140);\n  infix(\"/\", \"div\", 140);\n  infix(\"%\", \"mod\", 140);\n\n  suffix(\"++\");\n  prefix(\"++\", \"preinc\");\n  state.syntax[\"++\"].exps = true;\n\n  suffix(\"--\");\n  prefix(\"--\", \"predec\");\n  state.syntax[\"--\"].exps = true;\n  prefix(\"delete\", function() {\n    var p = expression(10);\n    if (!p) {\n      return this;\n    }\n\n    if (p.id !== \".\" && p.id !== \"[\") {\n      warning(\"W051\");\n    }\n    this.first = p;\n    if (p.identifier && !state.isStrict()) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  }).exps = true;\n\n  prefix(\"~\", function() {\n    if (state.option.bitwise) {\n      warning(\"W016\", this, \"~\");\n    }\n    this.arity = \"unary\";\n    this.right = expression(150);\n    return this;\n  });\n\n  prefix(\"...\", function() {\n    if (!state.inES6(true)) {\n      warning(\"W119\", this, \"spread/rest operator\", \"6\");\n    }\n    if (!state.tokens.next.identifier &&\n        state.tokens.next.type !== \"(string)\" &&\n          !checkPunctuators(state.tokens.next, [\"[\", \"(\"])) {\n\n      error(\"E030\", state.tokens.next, state.tokens.next.value);\n    }\n    expression(150);\n    return this;\n  });\n\n  prefix(\"!\", function() {\n    this.arity = \"unary\";\n    this.right = expression(150);\n\n    if (!this.right) { // '!' followed by nothing? Give up.\n      quit(\"E041\", this.line || 0);\n    }\n\n    if (bang[this.right.id] === true) {\n      warning(\"W018\", this, \"!\");\n    }\n    return this;\n  });\n\n  prefix(\"typeof\", (function() {\n    var p = expression(150);\n    this.first = this.right = p;\n\n    if (!p) { // 'typeof' followed by nothing? Give up.\n      quit(\"E041\", this.line || 0, this.character || 0);\n    }\n    if (p.identifier) {\n      p.forgiveUndef = true;\n    }\n    return this;\n  }));\n  prefix(\"new\", function() {\n    var mp = metaProperty(\"target\", function() {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.prev, \"new.target\", \"6\");\n      }\n      var inFunction, c = state.funct;\n      while (c) {\n        inFunction = !c[\"(global)\"];\n        if (!c[\"(arrow)\"]) { break; }\n        c = c[\"(context)\"];\n      }\n      if (!inFunction) {\n        warning(\"W136\", state.tokens.prev, \"new.target\");\n      }\n    });\n    if (mp) { return mp; }\n\n    var c = expression(155), i;\n    if (c && c.id !== \"function\") {\n      if (c.identifier) {\n        c[\"new\"] = true;\n        switch (c.value) {\n        case \"Number\":\n        case \"String\":\n        case \"Boolean\":\n        case \"Math\":\n        case \"JSON\":\n          warning(\"W053\", state.tokens.prev, c.value);\n          break;\n        case \"Symbol\":\n          if (state.inES6()) {\n            warning(\"W053\", state.tokens.prev, c.value);\n          }\n          break;\n        case \"Function\":\n          if (!state.option.evil) {\n            warning(\"W054\");\n          }\n          break;\n        case \"Date\":\n        case \"RegExp\":\n        case \"this\":\n          break;\n        default:\n          if (c.id !== \"function\") {\n            i = c.value.substr(0, 1);\n            if (state.option.newcap && (i < \"A\" || i > \"Z\") &&\n              !state.funct[\"(scope)\"].isPredefined(c.value)) {\n              warning(\"W055\", state.tokens.curr);\n            }\n          }\n        }\n      } else {\n        if (c.id !== \".\" && c.id !== \"[\" && c.id !== \"(\") {\n          warning(\"W056\", state.tokens.curr);\n        }\n      }\n    } else {\n      if (!state.option.supernew)\n        warning(\"W057\", this);\n    }\n    if (state.tokens.next.id !== \"(\" && !state.option.supernew) {\n      warning(\"W058\", state.tokens.curr, state.tokens.curr.value);\n    }\n    this.first = this.right = c;\n    return this;\n  });\n  state.syntax[\"new\"].exps = true;\n\n  prefix(\"void\").exps = true;\n\n  infix(\".\", function(left, that) {\n    var m = identifier(false, true);\n\n    if (typeof m === \"string\") {\n      countMember(m);\n    }\n\n    that.left = left;\n    that.right = m;\n\n    if (m && m === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    if (left && left.value === \"arguments\" && (m === \"callee\" || m === \"caller\")) {\n      if (state.option.noarg)\n        warning(\"W059\", left, m);\n      else if (state.isStrict())\n        error(\"E008\");\n    } else if (!state.option.evil && left && left.value === \"document\" &&\n        (m === \"write\" || m === \"writeln\")) {\n      warning(\"W060\", left);\n    }\n\n    if (!state.option.evil && (m === \"eval\" || m === \"execScript\")) {\n      if (isGlobalEval(left, state)) {\n        warning(\"W061\");\n      }\n    }\n\n    return that;\n  }, 160, true);\n\n  infix(\"(\", function(left, that) {\n    if (state.option.immed && left && !left.immed && left.id === \"function\") {\n      warning(\"W062\");\n    }\n\n    var n = 0;\n    var p = [];\n\n    if (left) {\n      if (left.type === \"(identifier)\") {\n        if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {\n          if (\"Array Number String Boolean Date Object Error Symbol\".indexOf(left.value) === -1) {\n            if (left.value === \"Math\") {\n              warning(\"W063\", left);\n            } else if (state.option.newcap) {\n              warning(\"W064\", left);\n            }\n          }\n        }\n      }\n    }\n\n    if (state.tokens.next.id !== \")\") {\n      for (;;) {\n        p[p.length] = expression(10);\n        n += 1;\n        if (state.tokens.next.id !== \",\") {\n          break;\n        }\n        comma();\n      }\n    }\n\n    advance(\")\");\n\n    if (typeof left === \"object\") {\n      if (!state.inES5() && left.value === \"parseInt\" && n === 1) {\n        warning(\"W065\", state.tokens.curr);\n      }\n      if (!state.option.evil) {\n        if (left.value === \"eval\" || left.value === \"Function\" ||\n            left.value === \"execScript\") {\n          warning(\"W061\", left);\n\n          if (p[0] && [0].id === \"(string)\") {\n            addInternalSrc(left, p[0].value);\n          }\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             (left.value === \"setTimeout\" ||\n            left.value === \"setInterval\")) {\n          warning(\"W066\", left);\n          addInternalSrc(left, p[0].value);\n        } else if (p[0] && p[0].id === \"(string)\" &&\n             left.value === \".\" &&\n             left.left.value === \"window\" &&\n             (left.right === \"setTimeout\" ||\n            left.right === \"setInterval\")) {\n          warning(\"W066\", left);\n          addInternalSrc(left, p[0].value);\n        }\n      }\n      if (!left.identifier && left.id !== \".\" && left.id !== \"[\" && left.id !== \"=>\" &&\n          left.id !== \"(\" && left.id !== \"&&\" && left.id !== \"||\" && left.id !== \"?\" &&\n          !(state.inES6() && left[\"(name)\"])) {\n        warning(\"W067\", that);\n      }\n    }\n\n    that.left = left;\n    return that;\n  }, 155, true).exps = true;\n\n  prefix(\"(\", function() {\n    var pn = state.tokens.next, pn1, i = -1;\n    var ret, triggerFnExpr, first, last;\n    var parens = 1;\n    var opening = state.tokens.curr;\n    var preceeding = state.tokens.prev;\n    var isNecessary = !state.option.singleGroups;\n\n    do {\n      if (pn.value === \"(\") {\n        parens += 1;\n      } else if (pn.value === \")\") {\n        parens -= 1;\n      }\n\n      i += 1;\n      pn1 = pn;\n      pn = peek(i);\n    } while (!(parens === 0 && pn1.value === \")\") && pn.value !== \";\" && pn.type !== \"(end)\");\n\n    if (state.tokens.next.id === \"function\") {\n      triggerFnExpr = state.tokens.next.immed = true;\n    }\n    if (pn.value === \"=>\") {\n      return doFunction({ type: \"arrow\", parsedOpening: true });\n    }\n\n    var exprs = [];\n\n    if (state.tokens.next.id !== \")\") {\n      for (;;) {\n        exprs.push(expression(10));\n\n        if (state.tokens.next.id !== \",\") {\n          break;\n        }\n\n        if (state.option.nocomma) {\n          warning(\"W127\");\n        }\n\n        comma();\n      }\n    }\n\n    advance(\")\", this);\n    if (state.option.immed && exprs[0] && exprs[0].id === \"function\") {\n      if (state.tokens.next.id !== \"(\" &&\n        state.tokens.next.id !== \".\" && state.tokens.next.id !== \"[\") {\n        warning(\"W068\", this);\n      }\n    }\n\n    if (!exprs.length) {\n      return;\n    }\n    if (exprs.length > 1) {\n      ret = Object.create(state.syntax[\",\"]);\n      ret.exprs = exprs;\n\n      first = exprs[0];\n      last = exprs[exprs.length - 1];\n\n      if (!isNecessary) {\n        isNecessary = preceeding.assign || preceeding.delim;\n      }\n    } else {\n      ret = first = last = exprs[0];\n\n      if (!isNecessary) {\n        isNecessary =\n          (opening.beginsStmt && (ret.id === \"{\" || triggerFnExpr || isFunctor(ret))) ||\n          (triggerFnExpr &&\n            (!isEndOfExpr() || state.tokens.prev.id !== \"}\")) ||\n          (isFunctor(ret) && !isEndOfExpr()) ||\n          (ret.id === \"{\" && preceeding.id === \"=>\") ||\n          (ret.type === \"(number)\" &&\n            checkPunctuator(pn, \".\") && /^\\d+$/.test(ret.value));\n      }\n    }\n\n    if (ret) {\n      if (!isNecessary && (first.left || first.right || ret.exprs)) {\n        isNecessary =\n          (!isBeginOfExpr(preceeding) && first.lbp <= preceeding.lbp) ||\n          (!isEndOfExpr() && last.lbp < state.tokens.next.lbp);\n      }\n\n      if (!isNecessary) {\n        warning(\"W126\", opening);\n      }\n\n      ret.paren = true;\n    }\n\n    return ret;\n  });\n\n  application(\"=>\");\n\n  infix(\"[\", function(left, that) {\n    var e = expression(10), s;\n    if (e && e.type === \"(string)\") {\n      if (!state.option.evil && (e.value === \"eval\" || e.value === \"execScript\")) {\n        if (isGlobalEval(left, state)) {\n          warning(\"W061\");\n        }\n      }\n\n      countMember(e.value);\n      if (!state.option.sub && reg.identifier.test(e.value)) {\n        s = state.syntax[e.value];\n        if (!s || !isReserved(s)) {\n          warning(\"W069\", state.tokens.prev, e.value);\n        }\n      }\n    }\n    advance(\"]\", that);\n\n    if (e && e.value === \"hasOwnProperty\" && state.tokens.next.value === \"=\") {\n      warning(\"W001\");\n    }\n\n    that.left = left;\n    that.right = e;\n    return that;\n  }, 160, true);\n\n  function comprehensiveArrayExpression() {\n    var res = {};\n    res.exps = true;\n    state.funct[\"(comparray)\"].stack();\n    var reversed = false;\n    if (state.tokens.next.value !== \"for\") {\n      reversed = true;\n      if (!state.inMoz()) {\n        warning(\"W116\", state.tokens.next, \"for\", state.tokens.next.value);\n      }\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(10);\n    }\n\n    advance(\"for\");\n    if (state.tokens.next.value === \"each\") {\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n    advance(\"(\");\n    state.funct[\"(comparray)\"].setState(\"define\");\n    res.left = expression(130);\n    if (_.contains([\"in\", \"of\"], state.tokens.next.value)) {\n      advance();\n    } else {\n      error(\"E045\", state.tokens.curr);\n    }\n    state.funct[\"(comparray)\"].setState(\"generate\");\n    expression(10);\n\n    advance(\")\");\n    if (state.tokens.next.value === \"if\") {\n      advance(\"if\");\n      advance(\"(\");\n      state.funct[\"(comparray)\"].setState(\"filter\");\n      res.filter = expression(10);\n      advance(\")\");\n    }\n\n    if (!reversed) {\n      state.funct[\"(comparray)\"].setState(\"use\");\n      res.right = expression(10);\n    }\n\n    advance(\"]\");\n    state.funct[\"(comparray)\"].unstack();\n    return res;\n  }\n\n  prefix(\"[\", function() {\n    var blocktype = lookupBlockType();\n    if (blocktype.isCompArray) {\n      if (!state.option.esnext && !state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"array comprehension\");\n      }\n      return comprehensiveArrayExpression();\n    } else if (blocktype.isDestAssign) {\n      this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true });\n      return this;\n    }\n    var b = state.tokens.curr.line !== startLine(state.tokens.next);\n    this.first = [];\n    if (b) {\n      indent += state.option.indent;\n      if (state.tokens.next.from === indent + state.option.indent) {\n        indent += state.option.indent;\n      }\n    }\n    while (state.tokens.next.id !== \"(end)\") {\n      while (state.tokens.next.id === \",\") {\n        if (!state.option.elision) {\n          if (!state.inES5()) {\n            warning(\"W070\");\n          } else {\n            warning(\"W128\");\n            do {\n              advance(\",\");\n            } while (state.tokens.next.id === \",\");\n            continue;\n          }\n        }\n        advance(\",\");\n      }\n\n      if (state.tokens.next.id === \"]\") {\n        break;\n      }\n\n      this.first.push(expression(10));\n      if (state.tokens.next.id === \",\") {\n        comma({ allowTrailing: true });\n        if (state.tokens.next.id === \"]\" && !state.inES5()) {\n          warning(\"W070\", state.tokens.curr);\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n    if (b) {\n      indent -= state.option.indent;\n    }\n    advance(\"]\", this);\n    return this;\n  });\n\n\n  function isMethod() {\n    return state.funct[\"(statement)\"] && state.funct[\"(statement)\"].type === \"class\" ||\n           state.funct[\"(context)\"] && state.funct[\"(context)\"][\"(verb)\"] === \"class\";\n  }\n\n\n  function isPropertyName(token) {\n    return token.identifier || token.id === \"(string)\" || token.id === \"(number)\";\n  }\n\n\n  function propertyName(preserveOrToken) {\n    var id;\n    var preserve = true;\n    if (typeof preserveOrToken === \"object\") {\n      id = preserveOrToken;\n    } else {\n      preserve = preserveOrToken;\n      id = optionalidentifier(false, true, preserve);\n    }\n\n    if (!id) {\n      if (state.tokens.next.id === \"(string)\") {\n        id = state.tokens.next.value;\n        if (!preserve) {\n          advance();\n        }\n      } else if (state.tokens.next.id === \"(number)\") {\n        id = state.tokens.next.value.toString();\n        if (!preserve) {\n          advance();\n        }\n      }\n    } else if (typeof id === \"object\") {\n      if (id.id === \"(string)\" || id.id === \"(identifier)\") id = id.value;\n      else if (id.id === \"(number)\") id = id.value.toString();\n    }\n\n    if (id === \"hasOwnProperty\") {\n      warning(\"W001\");\n    }\n\n    return id;\n  }\n  function functionparams(options) {\n    var next;\n    var paramsIds = [];\n    var ident;\n    var tokens = [];\n    var t;\n    var pastDefault = false;\n    var pastRest = false;\n    var arity = 0;\n    var loneArg = options && options.loneArg;\n\n    if (loneArg && loneArg.identifier === true) {\n      state.funct[\"(scope)\"].addParam(loneArg.value, loneArg);\n      return { arity: 1, params: [ loneArg.value ] };\n    }\n\n    next = state.tokens.next;\n\n    if (!options || !options.parsedOpening) {\n      advance(\"(\");\n    }\n\n    if (state.tokens.next.id === \")\") {\n      advance(\")\");\n      return;\n    }\n\n    function addParam(addParamArgs) {\n      state.funct[\"(scope)\"].addParam.apply(state.funct[\"(scope)\"], addParamArgs);\n    }\n\n    for (;;) {\n      arity++;\n      var currentParams = [];\n\n      if (_.contains([\"{\", \"[\"], state.tokens.next.id)) {\n        tokens = destructuringPattern();\n        for (t in tokens) {\n          t = tokens[t];\n          if (t.id) {\n            paramsIds.push(t.id);\n            currentParams.push([t.id, t.token]);\n          }\n        }\n      } else {\n        if (checkPunctuator(state.tokens.next, \"...\")) pastRest = true;\n        ident = identifier(true);\n        if (ident) {\n          paramsIds.push(ident);\n          currentParams.push([ident, state.tokens.curr]);\n        } else {\n          while (!checkPunctuators(state.tokens.next, [\",\", \")\"])) advance();\n        }\n      }\n      if (pastDefault) {\n        if (state.tokens.next.id !== \"=\") {\n          error(\"W138\", state.tokens.current);\n        }\n      }\n      if (state.tokens.next.id === \"=\") {\n        if (!state.inES6()) {\n          warning(\"W119\", state.tokens.next, \"default parameters\", \"6\");\n        }\n        advance(\"=\");\n        pastDefault = true;\n        expression(10);\n      }\n      currentParams.forEach(addParam);\n\n      if (state.tokens.next.id === \",\") {\n        if (pastRest) {\n          warning(\"W131\", state.tokens.next);\n        }\n        comma();\n      } else {\n        advance(\")\", next);\n        return { arity: arity, params: paramsIds };\n      }\n    }\n  }\n\n  function functor(name, token, overwrites) {\n    var funct = {\n      \"(name)\"      : name,\n      \"(breakage)\"  : 0,\n      \"(loopage)\"   : 0,\n      \"(tokens)\"    : {},\n      \"(properties)\": {},\n\n      \"(catch)\"     : false,\n      \"(global)\"    : false,\n\n      \"(line)\"      : null,\n      \"(character)\" : null,\n      \"(metrics)\"   : null,\n      \"(statement)\" : null,\n      \"(context)\"   : null,\n      \"(scope)\"     : null,\n      \"(comparray)\" : null,\n      \"(generator)\" : null,\n      \"(arrow)\"     : null,\n      \"(params)\"    : null\n    };\n\n    if (token) {\n      _.extend(funct, {\n        \"(line)\"     : token.line,\n        \"(character)\": token.character,\n        \"(metrics)\"  : createMetrics(token)\n      });\n    }\n\n    _.extend(funct, overwrites);\n\n    if (funct[\"(context)\"]) {\n      funct[\"(scope)\"] = funct[\"(context)\"][\"(scope)\"];\n      funct[\"(comparray)\"]  = funct[\"(context)\"][\"(comparray)\"];\n    }\n\n    return funct;\n  }\n\n  function isFunctor(token) {\n    return \"(scope)\" in token;\n  }\n  function hasParsedCode(funct) {\n    return funct[\"(global)\"] && !funct[\"(verb)\"];\n  }\n\n  function doTemplateLiteral(left) {\n    var ctx = this.context;\n    var noSubst = this.noSubst;\n    var depth = this.depth;\n\n    if (!noSubst) {\n      while (!end()) {\n        if (!state.tokens.next.template || state.tokens.next.depth > depth) {\n          expression(0); // should probably have different rbp?\n        } else {\n          advance();\n        }\n      }\n    }\n\n    return {\n      id: \"(template)\",\n      type: \"(template)\",\n      tag: left\n    };\n\n    function end() {\n      if (state.tokens.curr.template && state.tokens.curr.tail &&\n          state.tokens.curr.context === ctx) return true;\n      var complete = (state.tokens.next.template && state.tokens.next.tail &&\n                      state.tokens.next.context === ctx);\n      if (complete) advance();\n      return complete || state.tokens.next.isUnclosed;\n    }\n  }\n  function doFunction(options) {\n    var f, token, name, statement, classExprBinding, isGenerator, isArrow, ignoreLoopFunc;\n    var oldOption = state.option;\n    var oldIgnored = state.ignored;\n\n    if (options) {\n      name = options.name;\n      statement = options.statement;\n      classExprBinding = options.classExprBinding;\n      isGenerator = options.type === \"generator\";\n      isArrow = options.type === \"arrow\";\n      ignoreLoopFunc = options.ignoreLoopFunc;\n    }\n\n    state.option = Object.create(state.option);\n    state.ignored = Object.create(state.ignored);\n\n    state.funct = functor(name || state.nameStack.infer(), state.tokens.next, {\n      \"(statement)\": statement,\n      \"(context)\":   state.funct,\n      \"(arrow)\":     isArrow,\n      \"(generator)\": isGenerator\n    });\n\n    f = state.funct;\n    token = state.tokens.curr;\n    token.funct = state.funct;\n\n    functions.push(state.funct);\n    state.funct[\"(scope)\"].stack(\"functionouter\");\n    var internallyAccessibleName = name || classExprBinding;\n    if (internallyAccessibleName) {\n      state.funct[\"(scope)\"].block.add(internallyAccessibleName,\n        classExprBinding ? \"class\" : \"function\", state.tokens.curr, false);\n    }\n    state.funct[\"(scope)\"].stack(\"functionparams\");\n\n    var paramsInfo = functionparams(options);\n\n    if (paramsInfo) {\n      state.funct[\"(params)\"] = paramsInfo.params;\n      state.funct[\"(metrics)\"].arity = paramsInfo.arity;\n      state.funct[\"(metrics)\"].verifyMaxParametersPerFunction();\n    } else {\n      state.funct[\"(metrics)\"].arity = 0;\n    }\n\n    if (isArrow) {\n      if (!state.inES6(true)) {\n        warning(\"W119\", state.tokens.curr, \"arrow function syntax (=>)\", \"6\");\n      }\n\n      if (!options.loneArg) {\n        advance(\"=>\");\n      }\n    }\n\n    block(false, true, true, isArrow);\n\n    if (!state.option.noyield && isGenerator &&\n        state.funct[\"(generator)\"] !== \"yielded\") {\n      warning(\"W124\", state.tokens.curr);\n    }\n\n    state.funct[\"(metrics)\"].verifyMaxStatementsPerFunction();\n    state.funct[\"(metrics)\"].verifyMaxComplexityPerFunction();\n    state.funct[\"(unusedOption)\"] = state.option.unused;\n    state.option = oldOption;\n    state.ignored = oldIgnored;\n    state.funct[\"(last)\"] = state.tokens.curr.line;\n    state.funct[\"(lastcharacter)\"] = state.tokens.curr.character;\n    state.funct[\"(scope)\"].unstack(); // also does usage and label checks\n    state.funct[\"(scope)\"].unstack();\n\n    state.funct = state.funct[\"(context)\"];\n\n    if (!ignoreLoopFunc && !state.option.loopfunc && state.funct[\"(loopage)\"]) {\n      if (f[\"(isCapturing)\"]) {\n        warning(\"W083\", token);\n      }\n    }\n\n    return f;\n  }\n\n  function createMetrics(functionStartToken) {\n    return {\n      statementCount: 0,\n      nestedBlockDepth: -1,\n      ComplexityCount: 1,\n      arity: 0,\n\n      verifyMaxStatementsPerFunction: function() {\n        if (state.option.maxstatements &&\n          this.statementCount > state.option.maxstatements) {\n          warning(\"W071\", functionStartToken, this.statementCount);\n        }\n      },\n\n      verifyMaxParametersPerFunction: function() {\n        if (_.isNumber(state.option.maxparams) &&\n          this.arity > state.option.maxparams) {\n          warning(\"W072\", functionStartToken, this.arity);\n        }\n      },\n\n      verifyMaxNestedBlockDepthPerFunction: function() {\n        if (state.option.maxdepth &&\n          this.nestedBlockDepth > 0 &&\n          this.nestedBlockDepth === state.option.maxdepth + 1) {\n          warning(\"W073\", null, this.nestedBlockDepth);\n        }\n      },\n\n      verifyMaxComplexityPerFunction: function() {\n        var max = state.option.maxcomplexity;\n        var cc = this.ComplexityCount;\n        if (max && cc > max) {\n          warning(\"W074\", functionStartToken, cc);\n        }\n      }\n    };\n  }\n\n  function increaseComplexityCount() {\n    state.funct[\"(metrics)\"].ComplexityCount += 1;\n  }\n\n  function checkCondAssignment(expr) {\n    var id, paren;\n    if (expr) {\n      id = expr.id;\n      paren = expr.paren;\n      if (id === \",\" && (expr = expr.exprs[expr.exprs.length - 1])) {\n        id = expr.id;\n        paren = paren || expr.paren;\n      }\n    }\n    switch (id) {\n    case \"=\":\n    case \"+=\":\n    case \"-=\":\n    case \"*=\":\n    case \"%=\":\n    case \"&=\":\n    case \"|=\":\n    case \"^=\":\n    case \"/=\":\n      if (!paren && !state.option.boss) {\n        warning(\"W084\");\n      }\n    }\n  }\n  function checkProperties(props) {\n    if (state.inES5()) {\n      for (var name in props) {\n        if (props[name] && props[name].setterToken && !props[name].getterToken) {\n          warning(\"W078\", props[name].setterToken);\n        }\n      }\n    }\n  }\n\n  function metaProperty(name, c) {\n    if (checkPunctuator(state.tokens.next, \".\")) {\n      var left = state.tokens.curr.id;\n      advance(\".\");\n      var id = identifier();\n      state.tokens.curr.isMetaProperty = true;\n      if (name !== id) {\n        error(\"E057\", state.tokens.prev, left, id);\n      } else {\n        c();\n      }\n      return state.tokens.curr;\n    }\n  }\n\n  (function(x) {\n    x.nud = function() {\n      var b, f, i, p, t, isGeneratorMethod = false, nextVal;\n      var props = Object.create(null); // All properties, including accessors\n\n      b = state.tokens.curr.line !== startLine(state.tokens.next);\n      if (b) {\n        indent += state.option.indent;\n        if (state.tokens.next.from === indent + state.option.indent) {\n          indent += state.option.indent;\n        }\n      }\n\n      var blocktype = lookupBlockType();\n      if (blocktype.isDestAssign) {\n        this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true });\n        return this;\n      }\n\n      for (;;) {\n        if (state.tokens.next.id === \"}\") {\n          break;\n        }\n\n        nextVal = state.tokens.next.value;\n        if (state.tokens.next.identifier &&\n            (peekIgnoreEOL().id === \",\" || peekIgnoreEOL().id === \"}\")) {\n          if (!state.inES6()) {\n            warning(\"W104\", state.tokens.next, \"object short notation\", \"6\");\n          }\n          i = propertyName(true);\n          saveProperty(props, i, state.tokens.next);\n\n          expression(10);\n\n        } else if (peek().id !== \":\" && (nextVal === \"get\" || nextVal === \"set\")) {\n          advance(nextVal);\n\n          if (!state.inES5()) {\n            error(\"E034\");\n          }\n\n          i = propertyName();\n          if (!i && !state.inES6()) {\n            error(\"E035\");\n          }\n          if (i) {\n            saveAccessor(nextVal, props, i, state.tokens.curr);\n          }\n\n          t = state.tokens.next;\n          f = doFunction();\n          p = f[\"(params)\"];\n          if (nextVal === \"get\" && i && p) {\n            warning(\"W076\", t, p[0], i);\n          } else if (nextVal === \"set\" && i && (!p || p.length !== 1)) {\n            warning(\"W077\", t, i);\n          }\n        } else {\n          if (state.tokens.next.value === \"*\" && state.tokens.next.type === \"(punctuator)\") {\n            if (!state.inES6()) {\n              warning(\"W104\", state.tokens.next, \"generator functions\", \"6\");\n            }\n            advance(\"*\");\n            isGeneratorMethod = true;\n          } else {\n            isGeneratorMethod = false;\n          }\n\n          if (state.tokens.next.id === \"[\") {\n            i = computedPropertyName();\n            state.nameStack.set(i);\n          } else {\n            state.nameStack.set(state.tokens.next);\n            i = propertyName();\n            saveProperty(props, i, state.tokens.next);\n\n            if (typeof i !== \"string\") {\n              break;\n            }\n          }\n\n          if (state.tokens.next.value === \"(\") {\n            if (!state.inES6()) {\n              warning(\"W104\", state.tokens.curr, \"concise methods\", \"6\");\n            }\n            doFunction({ type: isGeneratorMethod ? \"generator\" : null });\n          } else {\n            advance(\":\");\n            expression(10);\n          }\n        }\n\n        countMember(i);\n\n        if (state.tokens.next.id === \",\") {\n          comma({ allowTrailing: true, property: true });\n          if (state.tokens.next.id === \",\") {\n            warning(\"W070\", state.tokens.curr);\n          } else if (state.tokens.next.id === \"}\" && !state.inES5()) {\n            warning(\"W070\", state.tokens.curr);\n          }\n        } else {\n          break;\n        }\n      }\n      if (b) {\n        indent -= state.option.indent;\n      }\n      advance(\"}\", this);\n\n      checkProperties(props);\n\n      return this;\n    };\n    x.fud = function() {\n      error(\"E036\", state.tokens.curr);\n    };\n  }(delim(\"{\")));\n\n  function destructuringPattern(options) {\n    var isAssignment = options && options.assignment;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr,\n        isAssignment ? \"destructuring assignment\" : \"destructuring binding\", \"6\");\n    }\n\n    return destructuringPatternRecursive(options);\n  }\n\n  function destructuringPatternRecursive(options) {\n    var ids;\n    var identifiers = [];\n    var openingParsed = options && options.openingParsed;\n    var isAssignment = options && options.assignment;\n    var recursiveOptions = isAssignment ? { assignment: isAssignment } : null;\n    var firstToken = openingParsed ? state.tokens.curr : state.tokens.next;\n\n    var nextInnerDE = function() {\n      var ident;\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        ids = destructuringPatternRecursive(recursiveOptions);\n        for (var id in ids) {\n          id = ids[id];\n          identifiers.push({ id: id.id, token: id.token });\n        }\n      } else if (checkPunctuator(state.tokens.next, \",\")) {\n        identifiers.push({ id: null, token: state.tokens.curr });\n      } else if (checkPunctuator(state.tokens.next, \"(\")) {\n        advance(\"(\");\n        nextInnerDE();\n        advance(\")\");\n      } else {\n        var is_rest = checkPunctuator(state.tokens.next, \"...\");\n\n        if (isAssignment) {\n          var identifierToken = is_rest ? peek(0) : state.tokens.next;\n          if (!identifierToken.identifier) {\n            warning(\"E030\", identifierToken, identifierToken.value);\n          }\n          var assignTarget = expression(155);\n          if (assignTarget) {\n            checkLeftSideAssign(assignTarget);\n            if (assignTarget.identifier) {\n              ident = assignTarget.value;\n            }\n          }\n        } else {\n          ident = identifier();\n        }\n        if (ident) {\n          identifiers.push({ id: ident, token: state.tokens.curr });\n        }\n        return is_rest;\n      }\n      return false;\n    };\n    var assignmentProperty = function() {\n      var id;\n      if (checkPunctuator(state.tokens.next, \"[\")) {\n        advance(\"[\");\n        expression(10);\n        advance(\"]\");\n        advance(\":\");\n        nextInnerDE();\n      } else if (state.tokens.next.id === \"(string)\" ||\n                 state.tokens.next.id === \"(number)\") {\n        advance();\n        advance(\":\");\n        nextInnerDE();\n      } else {\n        id = identifier();\n        if (checkPunctuator(state.tokens.next, \":\")) {\n          advance(\":\");\n          nextInnerDE();\n        } else if (id) {\n          if (isAssignment) {\n            checkLeftSideAssign(state.tokens.curr);\n          }\n          identifiers.push({ id: id, token: state.tokens.curr });\n        }\n      }\n    };\n    if (checkPunctuator(firstToken, \"[\")) {\n      if (!openingParsed) {\n        advance(\"[\");\n      }\n      if (checkPunctuator(state.tokens.next, \"]\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      var element_after_rest = false;\n      while (!checkPunctuator(state.tokens.next, \"]\")) {\n        if (nextInnerDE() && !element_after_rest &&\n            checkPunctuator(state.tokens.next, \",\")) {\n          warning(\"W130\", state.tokens.next);\n          element_after_rest = true;\n        }\n        if (checkPunctuator(state.tokens.next, \"=\")) {\n          if (checkPunctuator(state.tokens.prev, \"...\")) {\n            advance(\"]\");\n          } else {\n            advance(\"=\");\n          }\n          if (state.tokens.next.id === \"undefined\") {\n            warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n          }\n          expression(10);\n        }\n        if (!checkPunctuator(state.tokens.next, \"]\")) {\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    } else if (checkPunctuator(firstToken, \"{\")) {\n\n      if (!openingParsed) {\n        advance(\"{\");\n      }\n      if (checkPunctuator(state.tokens.next, \"}\")) {\n        warning(\"W137\", state.tokens.curr);\n      }\n      while (!checkPunctuator(state.tokens.next, \"}\")) {\n        assignmentProperty();\n        if (checkPunctuator(state.tokens.next, \"=\")) {\n          advance(\"=\");\n          if (state.tokens.next.id === \"undefined\") {\n            warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n          }\n          expression(10);\n        }\n        if (!checkPunctuator(state.tokens.next, \"}\")) {\n          advance(\",\");\n          if (checkPunctuator(state.tokens.next, \"}\")) {\n            break;\n          }\n        }\n      }\n      advance(\"}\");\n    }\n    return identifiers;\n  }\n\n  function destructuringPatternMatch(tokens, value) {\n    var first = value.first;\n\n    if (!first)\n      return;\n\n    _.zip(tokens, Array.isArray(first) ? first : [ first ]).forEach(function(val) {\n      var token = val[0];\n      var value = val[1];\n\n      if (token && value)\n        token.first = value;\n      else if (token && token.first && !value)\n        warning(\"W080\", token.first, token.first.value);\n    });\n  }\n\n  function blockVariableStatement(type, statement, context) {\n\n    var prefix = context && context.prefix;\n    var inexport = context && context.inexport;\n    var isLet = type === \"let\";\n    var isConst = type === \"const\";\n    var tokens, lone, value, letblock;\n\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, type, \"6\");\n    }\n\n    if (isLet && state.tokens.next.value === \"(\") {\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.next, \"let block\");\n      }\n      advance(\"(\");\n      state.funct[\"(scope)\"].stack();\n      letblock = true;\n    } else if (state.funct[\"(noblockscopedvar)\"]) {\n      error(\"E048\", state.tokens.curr, isConst ? \"Const\" : \"Let\");\n    }\n\n    statement.first = [];\n    for (;;) {\n      var names = [];\n      if (_.contains([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern();\n        lone = false;\n      } else {\n        tokens = [ { id: identifier(), token: state.tokens.curr } ];\n        lone = true;\n      }\n\n      if (!prefix && isConst && state.tokens.next.id !== \"=\") {\n        warning(\"E012\", state.tokens.curr, state.tokens.curr.value);\n      }\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (state.funct[\"(scope)\"].block.isGlobal()) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            }\n          }\n          if (t.id && !state.funct[\"(noblockscopedvar)\"]) {\n            state.funct[\"(scope)\"].addlabel(t.id, {\n              type: type,\n              token: t.token });\n            names.push(t.token);\n\n            if (lone && inexport) {\n              state.funct[\"(scope)\"].setExported(t.token.value, t.token);\n            }\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        advance(\"=\");\n        if (!prefix && state.tokens.next.id === \"undefined\") {\n          warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n        }\n        if (!prefix && peek(0).id === \"=\" && state.tokens.next.identifier) {\n          warning(\"W120\", state.tokens.next, state.tokens.next.value);\n        }\n        value = expression(prefix ? 120 : 10);\n        if (lone) {\n          tokens[0].first = value;\n        } else {\n          destructuringPatternMatch(names, value);\n        }\n      }\n\n      statement.first = statement.first.concat(names);\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n      comma();\n    }\n    if (letblock) {\n      advance(\")\");\n      block(true, true);\n      statement.block = true;\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    return statement;\n  }\n\n  var conststatement = stmt(\"const\", function(context) {\n    return blockVariableStatement(\"const\", this, context);\n  });\n  conststatement.exps = true;\n\n  var letstatement = stmt(\"let\", function(context) {\n    return blockVariableStatement(\"let\", this, context);\n  });\n  letstatement.exps = true;\n\n  var varstatement = stmt(\"var\", function(context) {\n    var prefix = context && context.prefix;\n    var inexport = context && context.inexport;\n    var tokens, lone, value;\n    var implied = context && context.implied;\n    var report = !(context && context.ignore);\n\n    this.first = [];\n    for (;;) {\n      var names = [];\n      if (_.contains([\"{\", \"[\"], state.tokens.next.value)) {\n        tokens = destructuringPattern();\n        lone = false;\n      } else {\n        tokens = [ { id: identifier(), token: state.tokens.curr } ];\n        lone = true;\n      }\n\n      if (!(prefix && implied) && report && state.option.varstmt) {\n        warning(\"W132\", this);\n      }\n\n      this.first = this.first.concat(names);\n\n      for (var t in tokens) {\n        if (tokens.hasOwnProperty(t)) {\n          t = tokens[t];\n          if (!implied && state.funct[\"(global)\"]) {\n            if (predefined[t.id] === false) {\n              warning(\"W079\", t.token, t.id);\n            } else if (state.option.futurehostile === false) {\n              if ((!state.inES5() && vars.ecmaIdentifiers[5][t.id] === false) ||\n                (!state.inES6() && vars.ecmaIdentifiers[6][t.id] === false)) {\n                warning(\"W129\", t.token, t.id);\n              }\n            }\n          }\n          if (t.id) {\n            if (implied === \"for\") {\n\n              if (!state.funct[\"(scope)\"].has(t.id)) {\n                if (report) warning(\"W088\", t.token, t.id);\n              }\n              state.funct[\"(scope)\"].block.use(t.id, t.token);\n            } else {\n              state.funct[\"(scope)\"].addlabel(t.id, {\n                type: \"var\",\n                token: t.token });\n\n              if (lone && inexport) {\n                state.funct[\"(scope)\"].setExported(t.id, t.token);\n              }\n            }\n            names.push(t.token);\n          }\n        }\n      }\n\n      if (state.tokens.next.id === \"=\") {\n        state.nameStack.set(state.tokens.curr);\n\n        advance(\"=\");\n        if (!prefix && report && !state.funct[\"(loopage)\"] &&\n          state.tokens.next.id === \"undefined\") {\n          warning(\"W080\", state.tokens.prev, state.tokens.prev.value);\n        }\n        if (peek(0).id === \"=\" && state.tokens.next.identifier) {\n          if (!prefix && report &&\n              !state.funct[\"(params)\"] ||\n              state.funct[\"(params)\"].indexOf(state.tokens.next.value) === -1) {\n            warning(\"W120\", state.tokens.next, state.tokens.next.value);\n          }\n        }\n        value = expression(prefix ? 120 : 10);\n        if (lone) {\n          tokens[0].first = value;\n        } else {\n          destructuringPatternMatch(names, value);\n        }\n      }\n\n      if (state.tokens.next.id !== \",\") {\n        break;\n      }\n      comma();\n    }\n\n    return this;\n  });\n  varstatement.exps = true;\n\n  blockstmt(\"class\", function() {\n    return classdef.call(this, true);\n  });\n\n  function classdef(isStatement) {\n    if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"class\", \"6\");\n    }\n    if (isStatement) {\n      this.name = identifier();\n\n      state.funct[\"(scope)\"].addlabel(this.name, {\n        type: \"class\",\n        token: state.tokens.curr });\n    } else if (state.tokens.next.identifier && state.tokens.next.value !== \"extends\") {\n      this.name = identifier();\n      this.namedExpr = true;\n    } else {\n      this.name = state.nameStack.infer();\n    }\n    classtail(this);\n    return this;\n  }\n\n  function classtail(c) {\n    var wasInClassBody = state.inClassBody;\n    if (state.tokens.next.value === \"extends\") {\n      advance(\"extends\");\n      c.heritage = expression(10);\n    }\n\n    state.inClassBody = true;\n    advance(\"{\");\n    c.body = classbody(c);\n    advance(\"}\");\n    state.inClassBody = wasInClassBody;\n  }\n\n  function classbody(c) {\n    var name;\n    var isStatic;\n    var isGenerator;\n    var getset;\n    var props = Object.create(null);\n    var staticProps = Object.create(null);\n    var computed;\n    for (var i = 0; state.tokens.next.id !== \"}\"; ++i) {\n      name = state.tokens.next;\n      isStatic = false;\n      isGenerator = false;\n      getset = null;\n      if (name.id === \";\") {\n        warning(\"W032\");\n        advance(\";\");\n        continue;\n      }\n\n      if (name.id === \"*\") {\n        isGenerator = true;\n        advance(\"*\");\n        name = state.tokens.next;\n      }\n      if (name.id === \"[\") {\n        name = computedPropertyName();\n        computed = true;\n      } else if (isPropertyName(name)) {\n        advance();\n        computed = false;\n        if (name.identifier && name.value === \"static\") {\n          if (checkPunctuator(state.tokens.next, \"*\")) {\n            isGenerator = true;\n            advance(\"*\");\n          }\n          if (isPropertyName(state.tokens.next) || state.tokens.next.id === \"[\") {\n            computed = state.tokens.next.id === \"[\";\n            isStatic = true;\n            name = state.tokens.next;\n            if (state.tokens.next.id === \"[\") {\n              name = computedPropertyName();\n            } else advance();\n          }\n        }\n\n        if (name.identifier && (name.value === \"get\" || name.value === \"set\")) {\n          if (isPropertyName(state.tokens.next) || state.tokens.next.id === \"[\") {\n            computed = state.tokens.next.id === \"[\";\n            getset = name;\n            name = state.tokens.next;\n            if (state.tokens.next.id === \"[\") {\n              name = computedPropertyName();\n            } else advance();\n          }\n        }\n      } else {\n        warning(\"W052\", state.tokens.next, state.tokens.next.value || state.tokens.next.type);\n        advance();\n        continue;\n      }\n\n      if (!checkPunctuator(state.tokens.next, \"(\")) {\n        error(\"E054\", state.tokens.next, state.tokens.next.value);\n        while (state.tokens.next.id !== \"}\" &&\n               !checkPunctuator(state.tokens.next, \"(\")) {\n          advance();\n        }\n        if (state.tokens.next.value !== \"(\") {\n          doFunction({ statement: c });\n        }\n      }\n\n      if (!computed) {\n        if (getset) {\n          saveAccessor(\n            getset.value, isStatic ? staticProps : props, name.value, name, true, isStatic);\n        } else {\n          if (name.value === \"constructor\") {\n            state.nameStack.set(c);\n          } else {\n            state.nameStack.set(name);\n          }\n          saveProperty(isStatic ? staticProps : props, name.value, name, true, isStatic);\n        }\n      }\n\n      if (getset && name.value === \"constructor\") {\n        var propDesc = getset.value === \"get\" ? \"class getter method\" : \"class setter method\";\n        error(\"E049\", name, propDesc, \"constructor\");\n      } else if (name.value === \"prototype\") {\n        error(\"E049\", name, \"class method\", \"prototype\");\n      }\n\n      propertyName(name);\n\n      doFunction({\n        statement: c,\n        type: isGenerator ? \"generator\" : null,\n        classExprBinding: c.namedExpr ? c.name : null\n      });\n    }\n\n    checkProperties(props);\n  }\n\n  blockstmt(\"function\", function(context) {\n    var inexport = context && context.inexport;\n    var generator = false;\n    if (state.tokens.next.value === \"*\") {\n      advance(\"*\");\n      if (state.inES6({ strict: true })) {\n        generator = true;\n      } else {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n    }\n    if (inblock) {\n      warning(\"W082\", state.tokens.curr);\n    }\n    var i = optionalidentifier();\n\n    state.funct[\"(scope)\"].addlabel(i, {\n      type: \"function\",\n      token: state.tokens.curr });\n\n    if (i === undefined) {\n      warning(\"W025\");\n    } else if (inexport) {\n      state.funct[\"(scope)\"].setExported(i, state.tokens.prev);\n    }\n\n    doFunction({\n      name: i,\n      statement: this,\n      type: generator ? \"generator\" : null,\n      ignoreLoopFunc: inblock // a declaration may already have warned\n    });\n    if (state.tokens.next.id === \"(\" && state.tokens.next.line === state.tokens.curr.line) {\n      error(\"E039\");\n    }\n    return this;\n  });\n\n  prefix(\"function\", function() {\n    var generator = false;\n\n    if (state.tokens.next.value === \"*\") {\n      if (!state.inES6()) {\n        warning(\"W119\", state.tokens.curr, \"function*\", \"6\");\n      }\n      advance(\"*\");\n      generator = true;\n    }\n\n    var i = optionalidentifier();\n    doFunction({ name: i, type: generator ? \"generator\" : null });\n    return this;\n  });\n\n  blockstmt(\"if\", function() {\n    var t = state.tokens.next;\n    increaseComplexityCount();\n    state.condition = true;\n    advance(\"(\");\n    var expr = expression(0);\n    checkCondAssignment(expr);\n    var forinifcheck = null;\n    if (state.option.forin && state.forinifcheckneeded) {\n      state.forinifcheckneeded = false; // We only need to analyze the first if inside the loop\n      forinifcheck = state.forinifchecks[state.forinifchecks.length - 1];\n      if (expr.type === \"(punctuator)\" && expr.value === \"!\") {\n        forinifcheck.type = \"(negative)\";\n      } else {\n        forinifcheck.type = \"(positive)\";\n      }\n    }\n\n    advance(\")\", t);\n    state.condition = false;\n    var s = block(true, true);\n    if (forinifcheck && forinifcheck.type === \"(negative)\") {\n      if (s && s[0] && s[0].type === \"(identifier)\" && s[0].value === \"continue\") {\n        forinifcheck.type = \"(negative-with-continue)\";\n      }\n    }\n\n    if (state.tokens.next.id === \"else\") {\n      advance(\"else\");\n      if (state.tokens.next.id === \"if\" || state.tokens.next.id === \"switch\") {\n        statement();\n      } else {\n        block(true, true);\n      }\n    }\n    return this;\n  });\n\n  blockstmt(\"try\", function() {\n    var b;\n\n    function doCatch() {\n      advance(\"catch\");\n      advance(\"(\");\n\n      state.funct[\"(scope)\"].stack(\"catchparams\");\n\n      if (checkPunctuators(state.tokens.next, [\"[\", \"{\"])) {\n        var tokens = destructuringPattern();\n        _.each(tokens, function(token) {\n          if (token.id) {\n            state.funct[\"(scope)\"].addParam(token.id, token, \"exception\");\n          }\n        });\n      } else if (state.tokens.next.type !== \"(identifier)\") {\n        warning(\"E030\", state.tokens.next, state.tokens.next.value);\n      } else {\n        state.funct[\"(scope)\"].addParam(identifier(), state.tokens.curr, \"exception\");\n      }\n\n      if (state.tokens.next.value === \"if\") {\n        if (!state.inMoz()) {\n          warning(\"W118\", state.tokens.curr, \"catch filter\");\n        }\n        advance(\"if\");\n        expression(0);\n      }\n\n      advance(\")\");\n\n      block(false);\n\n      state.funct[\"(scope)\"].unstack();\n    }\n\n    block(true);\n\n    while (state.tokens.next.id === \"catch\") {\n      increaseComplexityCount();\n      if (b && (!state.inMoz())) {\n        warning(\"W118\", state.tokens.next, \"multiple catch blocks\");\n      }\n      doCatch();\n      b = true;\n    }\n\n    if (state.tokens.next.id === \"finally\") {\n      advance(\"finally\");\n      block(true);\n      return;\n    }\n\n    if (!b) {\n      error(\"E021\", state.tokens.next, \"catch\", state.tokens.next.value);\n    }\n\n    return this;\n  });\n\n  blockstmt(\"while\", function() {\n    var t = state.tokens.next;\n    state.funct[\"(breakage)\"] += 1;\n    state.funct[\"(loopage)\"] += 1;\n    increaseComplexityCount();\n    advance(\"(\");\n    checkCondAssignment(expression(0));\n    advance(\")\", t);\n    block(true, true);\n    state.funct[\"(breakage)\"] -= 1;\n    state.funct[\"(loopage)\"] -= 1;\n    return this;\n  }).labelled = true;\n\n  blockstmt(\"with\", function() {\n    var t = state.tokens.next;\n    if (state.isStrict()) {\n      error(\"E010\", state.tokens.curr);\n    } else if (!state.option.withstmt) {\n      warning(\"W085\", state.tokens.curr);\n    }\n\n    advance(\"(\");\n    expression(0);\n    advance(\")\", t);\n    block(true, true);\n\n    return this;\n  });\n\n  blockstmt(\"switch\", function() {\n    var t = state.tokens.next;\n    var g = false;\n    var noindent = false;\n\n    state.funct[\"(breakage)\"] += 1;\n    advance(\"(\");\n    checkCondAssignment(expression(0));\n    advance(\")\", t);\n    t = state.tokens.next;\n    advance(\"{\");\n\n    if (state.tokens.next.from === indent)\n      noindent = true;\n\n    if (!noindent)\n      indent += state.option.indent;\n\n    this.cases = [];\n\n    for (;;) {\n      switch (state.tokens.next.id) {\n      case \"case\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"case\":\n        case \"continue\":\n        case \"return\":\n        case \"switch\":\n        case \"throw\":\n          break;\n        default:\n          if (!state.tokens.curr.caseFallsThrough) {\n            warning(\"W086\", state.tokens.curr, \"case\");\n          }\n        }\n\n        advance(\"case\");\n        this.cases.push(expression(0));\n        increaseComplexityCount();\n        g = true;\n        advance(\":\");\n        state.funct[\"(verb)\"] = \"case\";\n        break;\n      case \"default\":\n        switch (state.funct[\"(verb)\"]) {\n        case \"yield\":\n        case \"break\":\n        case \"continue\":\n        case \"return\":\n        case \"throw\":\n          break;\n        default:\n          if (this.cases.length) {\n            if (!state.tokens.curr.caseFallsThrough) {\n              warning(\"W086\", state.tokens.curr, \"default\");\n            }\n          }\n        }\n\n        advance(\"default\");\n        g = true;\n        advance(\":\");\n        break;\n      case \"}\":\n        if (!noindent)\n          indent -= state.option.indent;\n\n        advance(\"}\", t);\n        state.funct[\"(breakage)\"] -= 1;\n        state.funct[\"(verb)\"] = undefined;\n        return;\n      case \"(end)\":\n        error(\"E023\", state.tokens.next, \"}\");\n        return;\n      default:\n        indent += state.option.indent;\n        if (g) {\n          switch (state.tokens.curr.id) {\n          case \",\":\n            error(\"E040\");\n            return;\n          case \":\":\n            g = false;\n            statements();\n            break;\n          default:\n            error(\"E025\", state.tokens.curr);\n            return;\n          }\n        } else {\n          if (state.tokens.curr.id === \":\") {\n            advance(\":\");\n            error(\"E024\", state.tokens.curr, \":\");\n            statements();\n          } else {\n            error(\"E021\", state.tokens.next, \"case\", state.tokens.next.value);\n            return;\n          }\n        }\n        indent -= state.option.indent;\n      }\n    }\n    return this;\n  }).labelled = true;\n\n  stmt(\"debugger\", function() {\n    if (!state.option.debug) {\n      warning(\"W087\", this);\n    }\n    return this;\n  }).exps = true;\n\n  (function() {\n    var x = stmt(\"do\", function() {\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n      increaseComplexityCount();\n\n      this.first = block(true, true);\n      advance(\"while\");\n      var t = state.tokens.next;\n      advance(\"(\");\n      checkCondAssignment(expression(0));\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n      return this;\n    });\n    x.labelled = true;\n    x.exps = true;\n  }());\n\n  blockstmt(\"for\", function() {\n    var s, t = state.tokens.next;\n    var letscope = false;\n    var foreachtok = null;\n\n    if (t.value === \"each\") {\n      foreachtok = t;\n      advance(\"each\");\n      if (!state.inMoz()) {\n        warning(\"W118\", state.tokens.curr, \"for each\");\n      }\n    }\n\n    increaseComplexityCount();\n    advance(\"(\");\n    var nextop; // contains the token of the \"in\" or \"of\" operator\n    var i = 0;\n    var inof = [\"in\", \"of\"];\n    var level = 0; // BindingPattern \"level\" --- level 0 === no BindingPattern\n    var comma; // First comma punctuator at level 0\n    var initializer; // First initializer at level 0\n    if (checkPunctuators(state.tokens.next, [\"{\", \"[\"])) ++level;\n    do {\n      nextop = peek(i);\n      ++i;\n      if (checkPunctuators(nextop, [\"{\", \"[\"])) ++level;\n      else if (checkPunctuators(nextop, [\"}\", \"]\"])) --level;\n      if (level < 0) break;\n      if (level === 0) {\n        if (!comma && checkPunctuator(nextop, \",\")) comma = nextop;\n        else if (!initializer && checkPunctuator(nextop, \"=\")) initializer = nextop;\n      }\n    } while (level > 0 || !_.contains(inof, nextop.value) && nextop.value !== \";\" &&\n    nextop.type !== \"(end)\"); // Is this a JSCS bug? This looks really weird.\n    if (_.contains(inof, nextop.value)) {\n      if (!state.inES6() && nextop.value === \"of\") {\n        warning(\"W104\", nextop, \"for of\", \"6\");\n      }\n\n      var ok = !(initializer || comma);\n      if (initializer) {\n        error(\"W133\", comma, nextop.value, \"initializer is forbidden\");\n      }\n\n      if (comma) {\n        error(\"W133\", comma, nextop.value, \"more than one ForBinding\");\n      }\n\n      if (state.tokens.next.id === \"var\") {\n        advance(\"var\");\n        state.tokens.curr.fud({ prefix: true });\n      } else if (state.tokens.next.id === \"let\" || state.tokens.next.id === \"const\") {\n        advance(state.tokens.next.id);\n        letscope = true;\n        state.funct[\"(scope)\"].stack();\n        state.tokens.curr.fud({ prefix: true });\n      } else {\n        Object.create(varstatement).fud({ prefix: true, implied: \"for\", ignore: !ok });\n      }\n      advance(nextop.value);\n      expression(20);\n      advance(\")\", t);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        state.forinifcheckneeded = true;\n\n        if (state.forinifchecks === undefined) {\n          state.forinifchecks = [];\n        }\n        state.forinifchecks.push({\n          type: \"(none)\"\n        });\n      }\n\n      state.funct[\"(breakage)\"] += 1;\n      state.funct[\"(loopage)\"] += 1;\n\n      s = block(true, true);\n\n      if (nextop.value === \"in\" && state.option.forin) {\n        if (state.forinifchecks && state.forinifchecks.length > 0) {\n          var check = state.forinifchecks.pop();\n\n          if (// No if statement or not the first statement in loop body\n              s && s.length > 0 && (typeof s[0] !== \"object\" || s[0].value !== \"if\") ||\n              check.type === \"(positive)\" && s.length > 1 ||\n              check.type === \"(negative)\") {\n            warning(\"W089\", this);\n          }\n        }\n        state.forinifcheckneeded = false;\n      }\n\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n    } else {\n      if (foreachtok) {\n        error(\"E045\", foreachtok);\n      }\n      if (state.tokens.next.id !== \";\") {\n        if (state.tokens.next.id === \"var\") {\n          advance(\"var\");\n          state.tokens.curr.fud();\n        } else if (state.tokens.next.id === \"let\") {\n          advance(\"let\");\n          letscope = true;\n          state.funct[\"(scope)\"].stack();\n          state.tokens.curr.fud();\n        } else {\n          for (;;) {\n            expression(0, \"for\");\n            if (state.tokens.next.id !== \",\") {\n              break;\n            }\n            comma();\n          }\n        }\n      }\n      nolinebreak(state.tokens.curr);\n      advance(\";\");\n      state.funct[\"(loopage)\"] += 1;\n      if (state.tokens.next.id !== \";\") {\n        checkCondAssignment(expression(0));\n      }\n      nolinebreak(state.tokens.curr);\n      advance(\";\");\n      if (state.tokens.next.id === \";\") {\n        error(\"E021\", state.tokens.next, \")\", \";\");\n      }\n      if (state.tokens.next.id !== \")\") {\n        for (;;) {\n          expression(0, \"for\");\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          comma();\n        }\n      }\n      advance(\")\", t);\n      state.funct[\"(breakage)\"] += 1;\n      block(true, true);\n      state.funct[\"(breakage)\"] -= 1;\n      state.funct[\"(loopage)\"] -= 1;\n\n    }\n    if (letscope) {\n      state.funct[\"(scope)\"].unstack();\n    }\n    return this;\n  }).labelled = true;\n\n\n  stmt(\"break\", function() {\n    var v = state.tokens.next.value;\n\n    if (!state.option.asi)\n      nolinebreak(this);\n\n    if (state.tokens.next.id !== \";\" && !state.tokens.next.reach &&\n        state.tokens.curr.line === startLine(state.tokens.next)) {\n      if (!state.funct[\"(scope)\"].funct.hasBreakLabel(v)) {\n        warning(\"W090\", state.tokens.next, v);\n      }\n      this.first = state.tokens.next;\n      advance();\n    } else {\n      if (state.funct[\"(breakage)\"] === 0)\n        warning(\"W052\", state.tokens.next, this.value);\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"continue\", function() {\n    var v = state.tokens.next.value;\n\n    if (state.funct[\"(breakage)\"] === 0)\n      warning(\"W052\", state.tokens.next, this.value);\n    if (!state.funct[\"(loopage)\"])\n      warning(\"W052\", state.tokens.next, this.value);\n\n    if (!state.option.asi)\n      nolinebreak(this);\n\n    if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n      if (state.tokens.curr.line === startLine(state.tokens.next)) {\n        if (!state.funct[\"(scope)\"].funct.hasBreakLabel(v)) {\n          warning(\"W090\", state.tokens.next, v);\n        }\n        this.first = state.tokens.next;\n        advance();\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n\n  stmt(\"return\", function() {\n    if (this.line === startLine(state.tokens.next)) {\n      if (state.tokens.next.id !== \";\" && !state.tokens.next.reach) {\n        this.first = expression(0);\n\n        if (this.first &&\n            this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warningAt(\"W093\", this.first.line, this.first.character);\n        }\n      }\n    } else {\n      if (state.tokens.next.type === \"(punctuator)\" &&\n        [\"[\", \"{\", \"+\", \"-\"].indexOf(state.tokens.next.value) > -1) {\n        nolinebreak(this); // always warn (Line breaking error)\n      }\n    }\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  (function(x) {\n    x.exps = true;\n    x.lbp = 25;\n  }(prefix(\"yield\", function() {\n    var prev = state.tokens.prev;\n    if (state.inES6(true) && !state.funct[\"(generator)\"]) {\n      if (!(\"(catch)\" === state.funct[\"(name)\"] && state.funct[\"(context)\"][\"(generator)\"])) {\n        error(\"E046\", state.tokens.curr, \"yield\");\n      }\n    } else if (!state.inES6()) {\n      warning(\"W104\", state.tokens.curr, \"yield\", \"6\");\n    }\n    state.funct[\"(generator)\"] = \"yielded\";\n    var delegatingYield = false;\n\n    if (state.tokens.next.value === \"*\") {\n      delegatingYield = true;\n      advance(\"*\");\n    }\n\n    if (this.line === startLine(state.tokens.next) || !state.inMoz()) {\n      if (delegatingYield ||\n          (state.tokens.next.id !== \";\" && !state.option.asi &&\n           !state.tokens.next.reach && state.tokens.next.nud)) {\n\n        nobreaknonadjacent(state.tokens.curr, state.tokens.next);\n        this.first = expression(10);\n\n        if (this.first.type === \"(punctuator)\" && this.first.value === \"=\" &&\n            !this.first.paren && !state.option.boss) {\n          warningAt(\"W093\", this.first.line, this.first.character);\n        }\n      }\n\n      if (state.inMoz() && state.tokens.next.id !== \")\" &&\n          (prev.lbp > 30 || (!prev.assign && !isEndOfExpr()) || prev.id === \"yield\")) {\n        error(\"E050\", this);\n      }\n    } else if (!state.option.asi) {\n      nolinebreak(this); // always warn (Line breaking error)\n    }\n    return this;\n  })));\n\n\n  stmt(\"throw\", function() {\n    nolinebreak(this);\n    this.first = expression(20);\n\n    reachable(this);\n\n    return this;\n  }).exps = true;\n\n  stmt(\"import\", function() {\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"import\", \"6\");\n    }\n\n    if (state.tokens.next.type === \"(string)\") {\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.identifier) {\n      this.name = identifier();\n      state.funct[\"(scope)\"].addlabel(this.name, {\n        type: \"const\",\n        token: state.tokens.curr });\n\n      if (state.tokens.next.value === \",\") {\n        advance(\",\");\n      } else {\n        advance(\"from\");\n        advance(\"(string)\");\n        return this;\n      }\n    }\n\n    if (state.tokens.next.id === \"*\") {\n      advance(\"*\");\n      advance(\"as\");\n      if (state.tokens.next.identifier) {\n        this.name = identifier();\n        state.funct[\"(scope)\"].addlabel(this.name, {\n          type: \"const\",\n          token: state.tokens.curr });\n      }\n    } else {\n      advance(\"{\");\n      for (;;) {\n        if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        }\n        var importName;\n        if (state.tokens.next.type === \"default\") {\n          importName = \"default\";\n          advance(\"default\");\n        } else {\n          importName = identifier();\n        }\n        if (state.tokens.next.value === \"as\") {\n          advance(\"as\");\n          importName = identifier();\n        }\n        state.funct[\"(scope)\"].addlabel(importName, {\n          type: \"const\",\n          token: state.tokens.curr });\n\n        if (state.tokens.next.value === \",\") {\n          advance(\",\");\n        } else if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        } else {\n          error(\"E024\", state.tokens.next, state.tokens.next.value);\n          break;\n        }\n      }\n    }\n    advance(\"from\");\n    advance(\"(string)\");\n    return this;\n  }).exps = true;\n\n  stmt(\"export\", function() {\n    var ok = true;\n    var token;\n    var identifier;\n\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"export\", \"6\");\n      ok = false;\n    }\n\n    if (!state.funct[\"(scope)\"].block.isGlobal()) {\n      error(\"E053\", state.tokens.curr);\n      ok = false;\n    }\n\n    if (state.tokens.next.value === \"*\") {\n      advance(\"*\");\n      advance(\"from\");\n      advance(\"(string)\");\n      return this;\n    }\n\n    if (state.tokens.next.type === \"default\") {\n      state.nameStack.set(state.tokens.next);\n      advance(\"default\");\n      var exportType = state.tokens.next.id;\n      if (exportType === \"function\" || exportType === \"class\") {\n        this.block = true;\n      }\n\n      token = peek();\n\n      expression(10);\n\n      identifier = token.value;\n\n      if (this.block) {\n        state.funct[\"(scope)\"].addlabel(identifier, {\n          type: exportType,\n          token: token });\n\n        state.funct[\"(scope)\"].setExported(identifier, token);\n      }\n\n      return this;\n    }\n\n    if (state.tokens.next.value === \"{\") {\n      advance(\"{\");\n      var exportedTokens = [];\n      for (;;) {\n        if (!state.tokens.next.identifier) {\n          error(\"E030\", state.tokens.next, state.tokens.next.value);\n        }\n        advance();\n\n        exportedTokens.push(state.tokens.curr);\n\n        if (state.tokens.next.value === \"as\") {\n          advance(\"as\");\n          if (!state.tokens.next.identifier) {\n            error(\"E030\", state.tokens.next, state.tokens.next.value);\n          }\n          advance();\n        }\n\n        if (state.tokens.next.value === \",\") {\n          advance(\",\");\n        } else if (state.tokens.next.value === \"}\") {\n          advance(\"}\");\n          break;\n        } else {\n          error(\"E024\", state.tokens.next, state.tokens.next.value);\n          break;\n        }\n      }\n      if (state.tokens.next.value === \"from\") {\n        advance(\"from\");\n        advance(\"(string)\");\n      } else if (ok) {\n        exportedTokens.forEach(function(token) {\n          state.funct[\"(scope)\"].setExported(token.value, token);\n        });\n      }\n      return this;\n    }\n\n    if (state.tokens.next.id === \"var\") {\n      advance(\"var\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"let\") {\n      advance(\"let\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"const\") {\n      advance(\"const\");\n      state.tokens.curr.fud({ inexport:true });\n    } else if (state.tokens.next.id === \"function\") {\n      this.block = true;\n      advance(\"function\");\n      state.syntax[\"function\"].fud({ inexport:true });\n    } else if (state.tokens.next.id === \"class\") {\n      this.block = true;\n      advance(\"class\");\n      var classNameToken = state.tokens.next;\n      state.syntax[\"class\"].fud();\n      state.funct[\"(scope)\"].setExported(classNameToken.value, classNameToken);\n    } else {\n      error(\"E024\", state.tokens.next, state.tokens.next.value);\n    }\n\n    return this;\n  }).exps = true;\n\n  FutureReservedWord(\"abstract\");\n  FutureReservedWord(\"boolean\");\n  FutureReservedWord(\"byte\");\n  FutureReservedWord(\"char\");\n  FutureReservedWord(\"class\", { es5: true, nud: classdef });\n  FutureReservedWord(\"double\");\n  FutureReservedWord(\"enum\", { es5: true });\n  FutureReservedWord(\"export\", { es5: true });\n  FutureReservedWord(\"extends\", { es5: true });\n  FutureReservedWord(\"final\");\n  FutureReservedWord(\"float\");\n  FutureReservedWord(\"goto\");\n  FutureReservedWord(\"implements\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"import\", { es5: true });\n  FutureReservedWord(\"int\");\n  FutureReservedWord(\"interface\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"long\");\n  FutureReservedWord(\"native\");\n  FutureReservedWord(\"package\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"private\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"protected\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"public\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"short\");\n  FutureReservedWord(\"static\", { es5: true, strictOnly: true });\n  FutureReservedWord(\"super\", { es5: true });\n  FutureReservedWord(\"synchronized\");\n  FutureReservedWord(\"transient\");\n  FutureReservedWord(\"volatile\");\n\n  var lookupBlockType = function() {\n    var pn, pn1, prev;\n    var i = -1;\n    var bracketStack = 0;\n    var ret = {};\n    if (checkPunctuators(state.tokens.curr, [\"[\", \"{\"])) {\n      bracketStack += 1;\n    }\n    do {\n      prev = i === -1 ? state.tokens.curr : pn;\n      pn = i === -1 ? state.tokens.next : peek(i);\n      pn1 = peek(i + 1);\n      i = i + 1;\n      if (checkPunctuators(pn, [\"[\", \"{\"])) {\n        bracketStack += 1;\n      } else if (checkPunctuators(pn, [\"]\", \"}\"])) {\n        bracketStack -= 1;\n      }\n      if (bracketStack === 1 && pn.identifier && pn.value === \"for\" &&\n          !checkPunctuator(prev, \".\")) {\n        ret.isCompArray = true;\n        ret.notJson = true;\n        break;\n      }\n      if (bracketStack === 0 && checkPunctuators(pn, [\"}\", \"]\"])) {\n        if (pn1.value === \"=\") {\n          ret.isDestAssign = true;\n          ret.notJson = true;\n          break;\n        } else if (pn1.value === \".\") {\n          ret.notJson = true;\n          break;\n        }\n      }\n      if (checkPunctuator(pn, \";\")) {\n        ret.isBlock = true;\n        ret.notJson = true;\n      }\n    } while (bracketStack > 0 && pn.id !== \"(end)\");\n    return ret;\n  };\n\n  function saveProperty(props, name, tkn, isClass, isStatic) {\n    var msg = [\"key\", \"class method\", \"static class method\"];\n    msg = msg[(isClass || false) + (isStatic || false)];\n    if (tkn.identifier) {\n      name = tkn.value;\n    }\n\n    if (props[name] && name !== \"__proto__\") {\n      warning(\"W075\", state.tokens.next, msg, name);\n    } else {\n      props[name] = Object.create(null);\n    }\n\n    props[name].basic = true;\n    props[name].basictkn = tkn;\n  }\n  function saveAccessor(accessorType, props, name, tkn, isClass, isStatic) {\n    var flagName = accessorType === \"get\" ? \"getterToken\" : \"setterToken\";\n    var msg = \"\";\n\n    if (isClass) {\n      if (isStatic) {\n        msg += \"static \";\n      }\n      msg += accessorType + \"ter method\";\n    } else {\n      msg = \"key\";\n    }\n\n    state.tokens.curr.accessorType = accessorType;\n    state.nameStack.set(tkn);\n\n    if (props[name]) {\n      if ((props[name].basic || props[name][flagName]) && name !== \"__proto__\") {\n        warning(\"W075\", state.tokens.next, msg, name);\n      }\n    } else {\n      props[name] = Object.create(null);\n    }\n\n    props[name][flagName] = tkn;\n  }\n\n  function computedPropertyName() {\n    advance(\"[\");\n    if (!state.inES6()) {\n      warning(\"W119\", state.tokens.curr, \"computed property names\", \"6\");\n    }\n    var value = expression(10);\n    advance(\"]\");\n    return value;\n  }\n  function checkPunctuators(token, values) {\n    if (token.type === \"(punctuator)\") {\n      return _.contains(values, token.value);\n    }\n    return false;\n  }\n  function checkPunctuator(token, value) {\n    return token.type === \"(punctuator)\" && token.value === value;\n  }\n  function destructuringAssignOrJsonValue() {\n\n    var block = lookupBlockType();\n    if (block.notJson) {\n      if (!state.inES6() && block.isDestAssign) {\n        warning(\"W104\", state.tokens.curr, \"destructuring assignment\", \"6\");\n      }\n      statements();\n    } else {\n      state.option.laxbreak = true;\n      state.jsonMode = true;\n      jsonValue();\n    }\n  }\n\n  var arrayComprehension = function() {\n    var CompArray = function() {\n      this.mode = \"use\";\n      this.variables = [];\n    };\n    var _carrays = [];\n    var _current;\n    function declare(v) {\n      var l = _current.variables.filter(function(elt) {\n        if (elt.value === v) {\n          elt.undef = false;\n          return v;\n        }\n      }).length;\n      return l !== 0;\n    }\n    function use(v) {\n      var l = _current.variables.filter(function(elt) {\n        if (elt.value === v && !elt.undef) {\n          if (elt.unused === true) {\n            elt.unused = false;\n          }\n          return v;\n        }\n      }).length;\n      return (l === 0);\n    }\n    return { stack: function() {\n          _current = new CompArray();\n          _carrays.push(_current);\n        },\n        unstack: function() {\n          _current.variables.filter(function(v) {\n            if (v.unused)\n              warning(\"W098\", v.token, v.raw_text || v.value);\n            if (v.undef)\n              state.funct[\"(scope)\"].block.use(v.value, v.token);\n          });\n          _carrays.splice(-1, 1);\n          _current = _carrays[_carrays.length - 1];\n        },\n        setState: function(s) {\n          if (_.contains([\"use\", \"define\", \"generate\", \"filter\"], s))\n            _current.mode = s;\n        },\n        check: function(v) {\n          if (!_current) {\n            return;\n          }\n          if (_current && _current.mode === \"use\") {\n            if (use(v)) {\n              _current.variables.push({\n                funct: state.funct,\n                token: state.tokens.curr,\n                value: v,\n                undef: true,\n                unused: false\n              });\n            }\n            return true;\n          } else if (_current && _current.mode === \"define\") {\n            if (!declare(v)) {\n              _current.variables.push({\n                funct: state.funct,\n                token: state.tokens.curr,\n                value: v,\n                undef: false,\n                unused: true\n              });\n            }\n            return true;\n          } else if (_current && _current.mode === \"generate\") {\n            state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            return true;\n          } else if (_current && _current.mode === \"filter\") {\n            if (use(v)) {\n              state.funct[\"(scope)\"].block.use(v, state.tokens.curr);\n            }\n            return true;\n          }\n          return false;\n        }\n        };\n  };\n\n  function jsonValue() {\n    function jsonObject() {\n      var o = {}, t = state.tokens.next;\n      advance(\"{\");\n      if (state.tokens.next.id !== \"}\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E026\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"}\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          } else if (state.tokens.next.id !== \"(string)\") {\n            warning(\"W095\", state.tokens.next, state.tokens.next.value);\n          }\n          if (o[state.tokens.next.value] === true) {\n            warning(\"W075\", state.tokens.next, \"key\", state.tokens.next.value);\n          } else if ((state.tokens.next.value === \"__proto__\" &&\n            !state.option.proto) || (state.tokens.next.value === \"__iterator__\" &&\n            !state.option.iterator)) {\n            warning(\"W096\", state.tokens.next, state.tokens.next.value);\n          } else {\n            o[state.tokens.next.value] = true;\n          }\n          advance();\n          advance(\":\");\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"}\");\n    }\n\n    function jsonArray() {\n      var t = state.tokens.next;\n      advance(\"[\");\n      if (state.tokens.next.id !== \"]\") {\n        for (;;) {\n          if (state.tokens.next.id === \"(end)\") {\n            error(\"E027\", state.tokens.next, t.line);\n          } else if (state.tokens.next.id === \"]\") {\n            warning(\"W094\", state.tokens.curr);\n            break;\n          } else if (state.tokens.next.id === \",\") {\n            error(\"E028\", state.tokens.next);\n          }\n          jsonValue();\n          if (state.tokens.next.id !== \",\") {\n            break;\n          }\n          advance(\",\");\n        }\n      }\n      advance(\"]\");\n    }\n\n    switch (state.tokens.next.id) {\n    case \"{\":\n      jsonObject();\n      break;\n    case \"[\":\n      jsonArray();\n      break;\n    case \"true\":\n    case \"false\":\n    case \"null\":\n    case \"(number)\":\n    case \"(string)\":\n      advance();\n      break;\n    case \"-\":\n      advance(\"-\");\n      advance(\"(number)\");\n      break;\n    default:\n      error(\"E003\", state.tokens.next);\n    }\n  }\n\n  var escapeRegex = function(str) {\n    return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n  };\n  var itself = function(s, o, g) {\n    var i, k, x, reIgnoreStr, reIgnore;\n    var optionKeys;\n    var newOptionObj = {};\n    var newIgnoredObj = {};\n\n    o = _.clone(o);\n    state.reset();\n\n    if (o && o.scope) {\n      JSHINT.scope = o.scope;\n    } else {\n      JSHINT.errors = [];\n      JSHINT.undefs = [];\n      JSHINT.internals = [];\n      JSHINT.blacklist = {};\n      JSHINT.scope = \"(main)\";\n    }\n\n    predefined = Object.create(null);\n    combine(predefined, vars.ecmaIdentifiers[3]);\n    combine(predefined, vars.reservedVars);\n\n    combine(predefined, g || {});\n\n    declared = Object.create(null);\n    var exported = Object.create(null); // Variables that live outside the current file\n\n    function each(obj, cb) {\n      if (!obj)\n        return;\n\n      if (!Array.isArray(obj) && typeof obj === \"object\")\n        obj = Object.keys(obj);\n\n      obj.forEach(cb);\n    }\n\n    if (o) {\n      each(o.predef || null, function(item) {\n        var slice, prop;\n\n        if (item[0] === \"-\") {\n          slice = item.slice(1);\n          JSHINT.blacklist[slice] = slice;\n          delete predefined[slice];\n        } else {\n          prop = Object.getOwnPropertyDescriptor(o.predef, item);\n          predefined[item] = prop ? prop.value : false;\n        }\n      });\n\n      each(o.exported || null, function(item) {\n        exported[item] = true;\n      });\n\n      delete o.predef;\n      delete o.exported;\n\n      optionKeys = Object.keys(o);\n      for (x = 0; x < optionKeys.length; x++) {\n        if (/^-W\\d{3}$/g.test(optionKeys[x])) {\n          newIgnoredObj[optionKeys[x].slice(1)] = true;\n        } else {\n          var optionKey = optionKeys[x];\n          newOptionObj[optionKey] = o[optionKey];\n          if ((optionKey === \"esversion\" && o[optionKey] === 5) ||\n              (optionKey === \"es5\" && o[optionKey])) {\n            warning(\"I003\");\n          }\n\n          if (optionKeys[x] === \"newcap\" && o[optionKey] === false)\n            newOptionObj[\"(explicitNewcap)\"] = true;\n        }\n      }\n    }\n\n    state.option = newOptionObj;\n    state.ignored = newIgnoredObj;\n\n    state.option.indent = state.option.indent || 4;\n    state.option.maxerr = state.option.maxerr || 50;\n\n    indent = 1;\n\n    var scopeManagerInst = scopeManager(state, predefined, exported, declared);\n    scopeManagerInst.on(\"warning\", function(ev) {\n      warning.apply(null, [ ev.code, ev.token].concat(ev.data));\n    });\n\n    scopeManagerInst.on(\"error\", function(ev) {\n      error.apply(null, [ ev.code, ev.token ].concat(ev.data));\n    });\n\n    state.funct = functor(\"(global)\", null, {\n      \"(global)\"    : true,\n      \"(scope)\"     : scopeManagerInst,\n      \"(comparray)\" : arrayComprehension(),\n      \"(metrics)\"   : createMetrics(state.tokens.next)\n    });\n\n    functions = [state.funct];\n    urls = [];\n    stack = null;\n    member = {};\n    membersOnly = null;\n    inblock = false;\n    lookahead = [];\n\n    if (!isString(s) && !Array.isArray(s)) {\n      errorAt(\"E004\", 0);\n      return false;\n    }\n\n    api = {\n      get isJSON() {\n        return state.jsonMode;\n      },\n\n      getOption: function(name) {\n        return state.option[name] || null;\n      },\n\n      getCache: function(name) {\n        return state.cache[name];\n      },\n\n      setCache: function(name, value) {\n        state.cache[name] = value;\n      },\n\n      warn: function(code, data) {\n        warningAt.apply(null, [ code, data.line, data.char ].concat(data.data));\n      },\n\n      on: function(names, listener) {\n        names.split(\" \").forEach(function(name) {\n          emitter.on(name, listener);\n        }.bind(this));\n      }\n    };\n\n    emitter.removeAllListeners();\n    (extraModules || []).forEach(function(func) {\n      func(api);\n    });\n\n    state.tokens.prev = state.tokens.curr = state.tokens.next = state.syntax[\"(begin)\"];\n\n    if (o && o.ignoreDelimiters) {\n\n      if (!Array.isArray(o.ignoreDelimiters)) {\n        o.ignoreDelimiters = [o.ignoreDelimiters];\n      }\n\n      o.ignoreDelimiters.forEach(function(delimiterPair) {\n        if (!delimiterPair.start || !delimiterPair.end)\n            return;\n\n        reIgnoreStr = escapeRegex(delimiterPair.start) +\n                      \"[\\\\s\\\\S]*?\" +\n                      escapeRegex(delimiterPair.end);\n\n        reIgnore = new RegExp(reIgnoreStr, \"ig\");\n\n        s = s.replace(reIgnore, function(match) {\n          return match.replace(/./g, \" \");\n        });\n      });\n    }\n\n    lex = new Lexer(s);\n\n    lex.on(\"warning\", function(ev) {\n      warningAt.apply(null, [ ev.code, ev.line, ev.character].concat(ev.data));\n    });\n\n    lex.on(\"error\", function(ev) {\n      errorAt.apply(null, [ ev.code, ev.line, ev.character ].concat(ev.data));\n    });\n\n    lex.on(\"fatal\", function(ev) {\n      quit(\"E041\", ev.line, ev.from);\n    });\n\n    lex.on(\"Identifier\", function(ev) {\n      emitter.emit(\"Identifier\", ev);\n    });\n\n    lex.on(\"String\", function(ev) {\n      emitter.emit(\"String\", ev);\n    });\n\n    lex.on(\"Number\", function(ev) {\n      emitter.emit(\"Number\", ev);\n    });\n\n    lex.start();\n    for (var name in o) {\n      if (_.has(o, name)) {\n        checkOption(name, state.tokens.curr);\n      }\n    }\n\n    assume();\n    combine(predefined, g || {});\n    comma.first = true;\n\n    try {\n      advance();\n      switch (state.tokens.next.id) {\n      case \"{\":\n      case \"[\":\n        destructuringAssignOrJsonValue();\n        break;\n      default:\n        directives();\n\n        if (state.directive[\"use strict\"]) {\n          if (state.option.strict !== \"global\") {\n            warning(\"W097\", state.tokens.prev);\n          }\n        }\n\n        statements();\n      }\n\n      if (state.tokens.next.id !== \"(end)\") {\n        quit(\"E041\", state.tokens.curr.line);\n      }\n\n      state.funct[\"(scope)\"].unstack();\n\n    } catch (err) {\n      if (err && err.name === \"JSHintError\") {\n        var nt = state.tokens.next || {};\n        JSHINT.errors.push({\n          scope     : \"(main)\",\n          raw       : err.raw,\n          code      : err.code,\n          reason    : err.message,\n          line      : err.line || nt.line,\n          character : err.character || nt.from\n        }, null);\n      } else {\n        throw err;\n      }\n    }\n\n    if (JSHINT.scope === \"(main)\") {\n      o = o || {};\n\n      for (i = 0; i < JSHINT.internals.length; i += 1) {\n        k = JSHINT.internals[i];\n        o.scope = k.elem;\n        itself(k.value, o, g);\n      }\n    }\n\n    return JSHINT.errors.length === 0;\n  };\n  itself.addModule = function(func) {\n    extraModules.push(func);\n  };\n\n  itself.addModule(style.register);\n  itself.data = function() {\n    var data = {\n      functions: [],\n      options: state.option\n    };\n\n    var fu, f, i, j, n, globals;\n\n    if (itself.errors.length) {\n      data.errors = itself.errors;\n    }\n\n    if (state.jsonMode) {\n      data.json = true;\n    }\n\n    var impliedGlobals = state.funct[\"(scope)\"].getImpliedGlobals();\n    if (impliedGlobals.length > 0) {\n      data.implieds = impliedGlobals;\n    }\n\n    if (urls.length > 0) {\n      data.urls = urls;\n    }\n\n    globals = state.funct[\"(scope)\"].getUsedOrDefinedGlobals();\n    if (globals.length > 0) {\n      data.globals = globals;\n    }\n\n    for (i = 1; i < functions.length; i += 1) {\n      f = functions[i];\n      fu = {};\n\n      for (j = 0; j < functionicity.length; j += 1) {\n        fu[functionicity[j]] = [];\n      }\n\n      for (j = 0; j < functionicity.length; j += 1) {\n        if (fu[functionicity[j]].length === 0) {\n          delete fu[functionicity[j]];\n        }\n      }\n\n      fu.name = f[\"(name)\"];\n      fu.param = f[\"(params)\"];\n      fu.line = f[\"(line)\"];\n      fu.character = f[\"(character)\"];\n      fu.last = f[\"(last)\"];\n      fu.lastcharacter = f[\"(lastcharacter)\"];\n\n      fu.metrics = {\n        complexity: f[\"(metrics)\"].ComplexityCount,\n        parameters: f[\"(metrics)\"].arity,\n        statements: f[\"(metrics)\"].statementCount\n      };\n\n      data.functions.push(fu);\n    }\n\n    var unuseds = state.funct[\"(scope)\"].getUnuseds();\n    if (unuseds.length > 0) {\n      data.unused = unuseds;\n    }\n\n    for (n in member) {\n      if (typeof member[n] === \"number\") {\n        data.member = member;\n        break;\n      }\n    }\n\n    return data;\n  };\n\n  itself.jshint = itself;\n\n  return itself;\n}());\nif (typeof exports === \"object\" && exports) {\n  exports.JSHINT = JSHINT;\n}\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./lex.js\":\"/node_modules/jshint/src/lex.js\",\"./messages.js\":\"/node_modules/jshint/src/messages.js\",\"./options.js\":\"/node_modules/jshint/src/options.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./scope-manager.js\":\"/node_modules/jshint/src/scope-manager.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"./style.js\":\"/node_modules/jshint/src/style.js\",\"./vars.js\":\"/node_modules/jshint/src/vars.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/lex.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nvar _      = _dereq_(\"../lodash\");\nvar events = _dereq_(\"events\");\nvar reg    = _dereq_(\"./reg.js\");\nvar state  = _dereq_(\"./state.js\").state;\n\nvar unicodeData = _dereq_(\"../data/ascii-identifier-data.js\");\nvar asciiIdentifierStartTable = unicodeData.asciiIdentifierStartTable;\nvar asciiIdentifierPartTable = unicodeData.asciiIdentifierPartTable;\n\nvar Token = {\n  Identifier: 1,\n  Punctuator: 2,\n  NumericLiteral: 3,\n  StringLiteral: 4,\n  Comment: 5,\n  Keyword: 6,\n  NullLiteral: 7,\n  BooleanLiteral: 8,\n  RegExp: 9,\n  TemplateHead: 10,\n  TemplateMiddle: 11,\n  TemplateTail: 12,\n  NoSubstTemplate: 13\n};\n\nvar Context = {\n  Block: 1,\n  Template: 2\n};\n\nfunction asyncTrigger() {\n  var _checks = [];\n\n  return {\n    push: function(fn) {\n      _checks.push(fn);\n    },\n\n    check: function() {\n      for (var check = 0; check < _checks.length; ++check) {\n        _checks[check]();\n      }\n\n      _checks.splice(0, _checks.length);\n    }\n  };\n}\nfunction Lexer(source) {\n  var lines = source;\n\n  if (typeof lines === \"string\") {\n    lines = lines\n      .replace(/\\r\\n/g, \"\\n\")\n      .replace(/\\r/g, \"\\n\")\n      .split(\"\\n\");\n  }\n\n  if (lines[0] && lines[0].substr(0, 2) === \"#!\") {\n    if (lines[0].indexOf(\"node\") !== -1) {\n      state.option.node = true;\n    }\n    lines[0] = \"\";\n  }\n\n  this.emitter = new events.EventEmitter();\n  this.source = source;\n  this.setLines(lines);\n  this.prereg = true;\n\n  this.line = 0;\n  this.char = 1;\n  this.from = 1;\n  this.input = \"\";\n  this.inComment = false;\n  this.context = [];\n  this.templateStarts = [];\n\n  for (var i = 0; i < state.option.indent; i += 1) {\n    state.tab += \" \";\n  }\n  this.ignoreLinterErrors = false;\n}\n\nLexer.prototype = {\n  _lines: [],\n\n  inContext: function(ctxType) {\n    return this.context.length > 0 && this.context[this.context.length - 1].type === ctxType;\n  },\n\n  pushContext: function(ctxType) {\n    this.context.push({ type: ctxType });\n  },\n\n  popContext: function() {\n    return this.context.pop();\n  },\n\n  isContext: function(context) {\n    return this.context.length > 0 && this.context[this.context.length - 1] === context;\n  },\n\n  currentContext: function() {\n    return this.context.length > 0 && this.context[this.context.length - 1];\n  },\n\n  getLines: function() {\n    this._lines = state.lines;\n    return this._lines;\n  },\n\n  setLines: function(val) {\n    this._lines = val;\n    state.lines = this._lines;\n  },\n  peek: function(i) {\n    return this.input.charAt(i || 0);\n  },\n  skip: function(i) {\n    i = i || 1;\n    this.char += i;\n    this.input = this.input.slice(i);\n  },\n  on: function(names, listener) {\n    names.split(\" \").forEach(function(name) {\n      this.emitter.on(name, listener);\n    }.bind(this));\n  },\n  trigger: function() {\n    this.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments));\n  },\n  triggerAsync: function(type, args, checks, fn) {\n    checks.push(function() {\n      if (fn()) {\n        this.trigger(type, args);\n      }\n    }.bind(this));\n  },\n  scanPunctuator: function() {\n    var ch1 = this.peek();\n    var ch2, ch3, ch4;\n\n    switch (ch1) {\n    case \".\":\n      if ((/^[0-9]$/).test(this.peek(1))) {\n        return null;\n      }\n      if (this.peek(1) === \".\" && this.peek(2) === \".\") {\n        return {\n          type: Token.Punctuator,\n          value: \"...\"\n        };\n      }\n    case \"(\":\n    case \")\":\n    case \";\":\n    case \",\":\n    case \"[\":\n    case \"]\":\n    case \":\":\n    case \"~\":\n    case \"?\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"{\":\n      this.pushContext(Context.Block);\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"}\":\n      if (this.inContext(Context.Block)) {\n        this.popContext();\n      }\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"#\":\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    case \"\":\n      return null;\n    }\n\n    ch2 = this.peek(1);\n    ch3 = this.peek(2);\n    ch4 = this.peek(3);\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\" && ch4 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>=\"\n      };\n    }\n\n    if (ch1 === \"=\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"===\"\n      };\n    }\n\n    if (ch1 === \"!\" && ch2 === \"=\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"!==\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>>\"\n      };\n    }\n\n    if (ch1 === \"<\" && ch2 === \"<\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \"<<=\"\n      };\n    }\n\n    if (ch1 === \">\" && ch2 === \">\" && ch3 === \"=\") {\n      return {\n        type: Token.Punctuator,\n        value: \">>=\"\n      };\n    }\n    if (ch1 === \"=\" && ch2 === \">\") {\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n    if (ch1 === ch2 && (\"+-<>&|\".indexOf(ch1) >= 0)) {\n      return {\n        type: Token.Punctuator,\n        value: ch1 + ch2\n      };\n    }\n\n    if (\"<>=!+-*%&|^\".indexOf(ch1) >= 0) {\n      if (ch2 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: ch1 + ch2\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: ch1\n      };\n    }\n\n    if (ch1 === \"/\") {\n      if (ch2 === \"=\") {\n        return {\n          type: Token.Punctuator,\n          value: \"/=\"\n        };\n      }\n\n      return {\n        type: Token.Punctuator,\n        value: \"/\"\n      };\n    }\n\n    return null;\n  },\n  scanComments: function() {\n    var ch1 = this.peek();\n    var ch2 = this.peek(1);\n    var rest = this.input.substr(2);\n    var startLine = this.line;\n    var startChar = this.char;\n    var self = this;\n\n    function commentToken(label, body, opt) {\n      var special = [\"jshint\", \"jslint\", \"members\", \"member\", \"globals\", \"global\", \"exported\"];\n      var isSpecial = false;\n      var value = label + body;\n      var commentType = \"plain\";\n      opt = opt || {};\n\n      if (opt.isMultiline) {\n        value += \"*/\";\n      }\n\n      body = body.replace(/\\n/g, \" \");\n\n      if (label === \"/*\" && reg.fallsThrough.test(body)) {\n        isSpecial = true;\n        commentType = \"falls through\";\n      }\n\n      special.forEach(function(str) {\n        if (isSpecial) {\n          return;\n        }\n        if (label === \"//\" && str !== \"jshint\") {\n          return;\n        }\n\n        if (body.charAt(str.length) === \" \" && body.substr(0, str.length) === str) {\n          isSpecial = true;\n          label = label + str;\n          body = body.substr(str.length);\n        }\n\n        if (!isSpecial && body.charAt(0) === \" \" && body.charAt(str.length + 1) === \" \" &&\n          body.substr(1, str.length) === str) {\n          isSpecial = true;\n          label = label + \" \" + str;\n          body = body.substr(str.length + 1);\n        }\n\n        if (!isSpecial) {\n          return;\n        }\n\n        switch (str) {\n        case \"member\":\n          commentType = \"members\";\n          break;\n        case \"global\":\n          commentType = \"globals\";\n          break;\n        default:\n          var options = body.split(\":\").map(function(v) {\n            return v.replace(/^\\s+/, \"\").replace(/\\s+$/, \"\");\n          });\n\n          if (options.length === 2) {\n            switch (options[0]) {\n            case \"ignore\":\n              switch (options[1]) {\n              case \"start\":\n                self.ignoringLinterErrors = true;\n                isSpecial = false;\n                break;\n              case \"end\":\n                self.ignoringLinterErrors = false;\n                isSpecial = false;\n                break;\n              }\n            }\n          }\n\n          commentType = str;\n        }\n      });\n\n      return {\n        type: Token.Comment,\n        commentType: commentType,\n        value: value,\n        body: body,\n        isSpecial: isSpecial,\n        isMultiline: opt.isMultiline || false,\n        isMalformed: opt.isMalformed || false\n      };\n    }\n    if (ch1 === \"*\" && ch2 === \"/\") {\n      this.trigger(\"error\", {\n        code: \"E018\",\n        line: startLine,\n        character: startChar\n      });\n\n      this.skip(2);\n      return null;\n    }\n    if (ch1 !== \"/\" || (ch2 !== \"*\" && ch2 !== \"/\")) {\n      return null;\n    }\n    if (ch2 === \"/\") {\n      this.skip(this.input.length); // Skip to the EOL.\n      return commentToken(\"//\", rest);\n    }\n\n    var body = \"\";\n    if (ch2 === \"*\") {\n      this.inComment = true;\n      this.skip(2);\n\n      while (this.peek() !== \"*\" || this.peek(1) !== \"/\") {\n        if (this.peek() === \"\") { // End of Line\n          body += \"\\n\";\n          if (!this.nextLine()) {\n            this.trigger(\"error\", {\n              code: \"E017\",\n              line: startLine,\n              character: startChar\n            });\n\n            this.inComment = false;\n            return commentToken(\"/*\", body, {\n              isMultiline: true,\n              isMalformed: true\n            });\n          }\n        } else {\n          body += this.peek();\n          this.skip();\n        }\n      }\n\n      this.skip(2);\n      this.inComment = false;\n      return commentToken(\"/*\", body, { isMultiline: true });\n    }\n  },\n  scanKeyword: function() {\n    var result = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input);\n    var keywords = [\n      \"if\", \"in\", \"do\", \"var\", \"for\", \"new\",\n      \"try\", \"let\", \"this\", \"else\", \"case\",\n      \"void\", \"with\", \"enum\", \"while\", \"break\",\n      \"catch\", \"throw\", \"const\", \"yield\", \"class\",\n      \"super\", \"return\", \"typeof\", \"delete\",\n      \"switch\", \"export\", \"import\", \"default\",\n      \"finally\", \"extends\", \"function\", \"continue\",\n      \"debugger\", \"instanceof\"\n    ];\n\n    if (result && keywords.indexOf(result[0]) >= 0) {\n      return {\n        type: Token.Keyword,\n        value: result[0]\n      };\n    }\n\n    return null;\n  },\n  scanIdentifier: function() {\n    var id = \"\";\n    var index = 0;\n    var type, char;\n\n    function isNonAsciiIdentifierStart(code) {\n      return code > 256;\n    }\n\n    function isNonAsciiIdentifierPart(code) {\n      return code > 256;\n    }\n\n    function isHexDigit(str) {\n      return (/^[0-9a-fA-F]$/).test(str);\n    }\n\n    var readUnicodeEscapeSequence = function() {\n      index += 1;\n\n      if (this.peek(index) !== \"u\") {\n        return null;\n      }\n\n      var ch1 = this.peek(index + 1);\n      var ch2 = this.peek(index + 2);\n      var ch3 = this.peek(index + 3);\n      var ch4 = this.peek(index + 4);\n      var code;\n\n      if (isHexDigit(ch1) && isHexDigit(ch2) && isHexDigit(ch3) && isHexDigit(ch4)) {\n        code = parseInt(ch1 + ch2 + ch3 + ch4, 16);\n\n        if (asciiIdentifierPartTable[code] || isNonAsciiIdentifierPart(code)) {\n          index += 5;\n          return \"\\\\u\" + ch1 + ch2 + ch3 + ch4;\n        }\n\n        return null;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierStart = function() {\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierStartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierStart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    var getIdentifierPart = function() {\n      var chr = this.peek(index);\n      var code = chr.charCodeAt(0);\n\n      if (code === 92) {\n        return readUnicodeEscapeSequence();\n      }\n\n      if (code < 128) {\n        if (asciiIdentifierPartTable[code]) {\n          index += 1;\n          return chr;\n        }\n\n        return null;\n      }\n\n      if (isNonAsciiIdentifierPart(code)) {\n        index += 1;\n        return chr;\n      }\n\n      return null;\n    }.bind(this);\n\n    function removeEscapeSequences(id) {\n      return id.replace(/\\\\u([0-9a-fA-F]{4})/g, function(m0, codepoint) {\n        return String.fromCharCode(parseInt(codepoint, 16));\n      });\n    }\n\n    char = getIdentifierStart();\n    if (char === null) {\n      return null;\n    }\n\n    id = char;\n    for (;;) {\n      char = getIdentifierPart();\n\n      if (char === null) {\n        break;\n      }\n\n      id += char;\n    }\n\n    switch (id) {\n    case \"true\":\n    case \"false\":\n      type = Token.BooleanLiteral;\n      break;\n    case \"null\":\n      type = Token.NullLiteral;\n      break;\n    default:\n      type = Token.Identifier;\n    }\n\n    return {\n      type: type,\n      value: removeEscapeSequences(id),\n      text: id,\n      tokenLength: id.length\n    };\n  },\n  scanNumericLiteral: function() {\n    var index = 0;\n    var value = \"\";\n    var length = this.input.length;\n    var char = this.peek(index);\n    var bad;\n    var isAllowedDigit = isDecimalDigit;\n    var base = 10;\n    var isLegacy = false;\n\n    function isDecimalDigit(str) {\n      return (/^[0-9]$/).test(str);\n    }\n\n    function isOctalDigit(str) {\n      return (/^[0-7]$/).test(str);\n    }\n\n    function isBinaryDigit(str) {\n      return (/^[01]$/).test(str);\n    }\n\n    function isHexDigit(str) {\n      return (/^[0-9a-fA-F]$/).test(str);\n    }\n\n    function isIdentifierStart(ch) {\n      return (ch === \"$\") || (ch === \"_\") || (ch === \"\\\\\") ||\n        (ch >= \"a\" && ch <= \"z\") || (ch >= \"A\" && ch <= \"Z\");\n    }\n\n    if (char !== \".\" && !isDecimalDigit(char)) {\n      return null;\n    }\n\n    if (char !== \".\") {\n      value = this.peek(index);\n      index += 1;\n      char = this.peek(index);\n\n      if (value === \"0\") {\n        if (char === \"x\" || char === \"X\") {\n          isAllowedDigit = isHexDigit;\n          base = 16;\n\n          index += 1;\n          value += char;\n        }\n        if (char === \"o\" || char === \"O\") {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n\n          if (!state.inES6(true)) {\n            this.trigger(\"warning\", {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Octal integer literal\", \"6\" ]\n            });\n          }\n\n          index += 1;\n          value += char;\n        }\n        if (char === \"b\" || char === \"B\") {\n          isAllowedDigit = isBinaryDigit;\n          base = 2;\n\n          if (!state.inES6(true)) {\n            this.trigger(\"warning\", {\n              code: \"W119\",\n              line: this.line,\n              character: this.char,\n              data: [ \"Binary integer literal\", \"6\" ]\n            });\n          }\n\n          index += 1;\n          value += char;\n        }\n        if (isOctalDigit(char)) {\n          isAllowedDigit = isOctalDigit;\n          base = 8;\n          isLegacy = true;\n          bad = false;\n\n          index += 1;\n          value += char;\n        }\n\n        if (!isOctalDigit(char) && isDecimalDigit(char)) {\n          index += 1;\n          value += char;\n        }\n      }\n\n      while (index < length) {\n        char = this.peek(index);\n\n        if (isLegacy && isDecimalDigit(char)) {\n          bad = true;\n        } else if (!isAllowedDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n\n      if (isAllowedDigit !== isDecimalDigit) {\n        if (!isLegacy && value.length <= 2) { // 0x\n          return {\n            type: Token.NumericLiteral,\n            value: value,\n            isMalformed: true\n          };\n        }\n\n        if (index < length) {\n          char = this.peek(index);\n          if (isIdentifierStart(char)) {\n            return null;\n          }\n        }\n\n        return {\n          type: Token.NumericLiteral,\n          value: value,\n          base: base,\n          isLegacy: isLegacy,\n          isMalformed: false\n        };\n      }\n    }\n\n    if (char === \".\") {\n      value += char;\n      index += 1;\n\n      while (index < length) {\n        char = this.peek(index);\n        if (!isDecimalDigit(char)) {\n          break;\n        }\n        value += char;\n        index += 1;\n      }\n    }\n\n    if (char === \"e\" || char === \"E\") {\n      value += char;\n      index += 1;\n      char = this.peek(index);\n\n      if (char === \"+\" || char === \"-\") {\n        value += this.peek(index);\n        index += 1;\n      }\n\n      char = this.peek(index);\n      if (isDecimalDigit(char)) {\n        value += char;\n        index += 1;\n\n        while (index < length) {\n          char = this.peek(index);\n          if (!isDecimalDigit(char)) {\n            break;\n          }\n          value += char;\n          index += 1;\n        }\n      } else {\n        return null;\n      }\n    }\n\n    if (index < length) {\n      char = this.peek(index);\n      if (isIdentifierStart(char)) {\n        return null;\n      }\n    }\n\n    return {\n      type: Token.NumericLiteral,\n      value: value,\n      base: base,\n      isMalformed: !isFinite(value)\n    };\n  },\n  scanEscapeSequence: function(checks) {\n    var allowNewLine = false;\n    var jump = 1;\n    this.skip();\n    var char = this.peek();\n\n    switch (char) {\n    case \"'\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\'\" ]\n      }, checks, function() {return state.jsonMode; });\n      break;\n    case \"b\":\n      char = \"\\\\b\";\n      break;\n    case \"f\":\n      char = \"\\\\f\";\n      break;\n    case \"n\":\n      char = \"\\\\n\";\n      break;\n    case \"r\":\n      char = \"\\\\r\";\n      break;\n    case \"t\":\n      char = \"\\\\t\";\n      break;\n    case \"0\":\n      char = \"\\\\0\";\n      var n = parseInt(this.peek(1), 10);\n      this.triggerAsync(\"warning\", {\n        code: \"W115\",\n        line: this.line,\n        character: this.char\n      }, checks,\n      function() { return n >= 0 && n <= 7 && state.isStrict(); });\n      break;\n    case \"u\":\n      var hexCode = this.input.substr(1, 4);\n      var code = parseInt(hexCode, 16);\n      if (isNaN(code)) {\n        this.trigger(\"warning\", {\n          code: \"W052\",\n          line: this.line,\n          character: this.char,\n          data: [ \"u\" + hexCode ]\n        });\n      }\n      char = String.fromCharCode(code);\n      jump = 5;\n      break;\n    case \"v\":\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\v\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = \"\\v\";\n      break;\n    case \"x\":\n      var  x = parseInt(this.input.substr(1, 2), 16);\n\n      this.triggerAsync(\"warning\", {\n        code: \"W114\",\n        line: this.line,\n        character: this.char,\n        data: [ \"\\\\x-\" ]\n      }, checks, function() { return state.jsonMode; });\n\n      char = String.fromCharCode(x);\n      jump = 3;\n      break;\n    case \"\\\\\":\n      char = \"\\\\\\\\\";\n      break;\n    case \"\\\"\":\n      char = \"\\\\\\\"\";\n      break;\n    case \"/\":\n      break;\n    case \"\":\n      allowNewLine = true;\n      char = \"\";\n      break;\n    }\n\n    return { char: char, jump: jump, allowNewLine: allowNewLine };\n  },\n  scanTemplateLiteral: function(checks) {\n    var tokenType;\n    var value = \"\";\n    var ch;\n    var startLine = this.line;\n    var startChar = this.char;\n    var depth = this.templateStarts.length;\n\n    if (!state.inES6(true)) {\n      return null;\n    } else if (this.peek() === \"`\") {\n      tokenType = Token.TemplateHead;\n      this.templateStarts.push({ line: this.line, char: this.char });\n      depth = this.templateStarts.length;\n      this.skip(1);\n      this.pushContext(Context.Template);\n    } else if (this.inContext(Context.Template) && this.peek() === \"}\") {\n      tokenType = Token.TemplateMiddle;\n    } else {\n      return null;\n    }\n\n    while (this.peek() !== \"`\") {\n      while ((ch = this.peek()) === \"\") {\n        value += \"\\n\";\n        if (!this.nextLine()) {\n          var startPos = this.templateStarts.pop();\n          this.trigger(\"error\", {\n            code: \"E052\",\n            line: startPos.line,\n            character: startPos.char\n          });\n          return {\n            type: tokenType,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            depth: depth,\n            context: this.popContext()\n          };\n        }\n      }\n\n      if (ch === '$' && this.peek(1) === '{') {\n        value += '${';\n        this.skip(2);\n        return {\n          type: tokenType,\n          value: value,\n          startLine: startLine,\n          startChar: startChar,\n          isUnclosed: false,\n          depth: depth,\n          context: this.currentContext()\n        };\n      } else if (ch === '\\\\') {\n        var escape = this.scanEscapeSequence(checks);\n        value += escape.char;\n        this.skip(escape.jump);\n      } else if (ch !== '`') {\n        value += ch;\n        this.skip(1);\n      }\n    }\n    tokenType = tokenType === Token.TemplateHead ? Token.NoSubstTemplate : Token.TemplateTail;\n    this.skip(1);\n    this.templateStarts.pop();\n\n    return {\n      type: tokenType,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      depth: depth,\n      context: this.popContext()\n    };\n  },\n  scanStringLiteral: function(checks) {\n    var quote = this.peek();\n    if (quote !== \"\\\"\" && quote !== \"'\") {\n      return null;\n    }\n    this.triggerAsync(\"warning\", {\n      code: \"W108\",\n      line: this.line,\n      character: this.char // +1?\n    }, checks, function() { return state.jsonMode && quote !== \"\\\"\"; });\n\n    var value = \"\";\n    var startLine = this.line;\n    var startChar = this.char;\n    var allowNewLine = false;\n\n    this.skip();\n\n    while (this.peek() !== quote) {\n      if (this.peek() === \"\") { // End Of Line\n\n        if (!allowNewLine) {\n          this.trigger(\"warning\", {\n            code: \"W112\",\n            line: this.line,\n            character: this.char\n          });\n        } else {\n          allowNewLine = false;\n\n          this.triggerAsync(\"warning\", {\n            code: \"W043\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return !state.option.multistr; });\n\n          this.triggerAsync(\"warning\", {\n            code: \"W042\",\n            line: this.line,\n            character: this.char\n          }, checks, function() { return state.jsonMode && state.option.multistr; });\n        }\n\n        if (!this.nextLine()) {\n          this.trigger(\"error\", {\n            code: \"E029\",\n            line: startLine,\n            character: startChar\n          });\n\n          return {\n            type: Token.StringLiteral,\n            value: value,\n            startLine: startLine,\n            startChar: startChar,\n            isUnclosed: true,\n            quote: quote\n          };\n        }\n\n      } else { // Any character other than End Of Line\n\n        allowNewLine = false;\n        var char = this.peek();\n        var jump = 1; // A length of a jump, after we're done\n\n        if (char < \" \") {\n          this.trigger(\"warning\", {\n            code: \"W113\",\n            line: this.line,\n            character: this.char,\n            data: [ \"<non-printable>\" ]\n          });\n        }\n        if (char === \"\\\\\") {\n          var parsed = this.scanEscapeSequence(checks);\n          char = parsed.char;\n          jump = parsed.jump;\n          allowNewLine = parsed.allowNewLine;\n        }\n\n        value += char;\n        this.skip(jump);\n      }\n    }\n\n    this.skip();\n    return {\n      type: Token.StringLiteral,\n      value: value,\n      startLine: startLine,\n      startChar: startChar,\n      isUnclosed: false,\n      quote: quote\n    };\n  },\n  scanRegExp: function() {\n    var index = 0;\n    var length = this.input.length;\n    var char = this.peek();\n    var value = char;\n    var body = \"\";\n    var flags = [];\n    var malformed = false;\n    var isCharSet = false;\n    var terminated;\n\n    var scanUnexpectedChars = function() {\n      if (char < \" \") {\n        malformed = true;\n        this.trigger(\"warning\", {\n          code: \"W048\",\n          line: this.line,\n          character: this.char\n        });\n      }\n      if (char === \"<\") {\n        malformed = true;\n        this.trigger(\"warning\", {\n          code: \"W049\",\n          line: this.line,\n          character: this.char,\n          data: [ char ]\n        });\n      }\n    }.bind(this);\n    if (!this.prereg || char !== \"/\") {\n      return null;\n    }\n\n    index += 1;\n    terminated = false;\n\n    while (index < length) {\n      char = this.peek(index);\n      value += char;\n      body += char;\n\n      if (isCharSet) {\n        if (char === \"]\") {\n          if (this.peek(index - 1) !== \"\\\\\" || this.peek(index - 2) === \"\\\\\") {\n            isCharSet = false;\n          }\n        }\n\n        if (char === \"\\\\\") {\n          index += 1;\n          char = this.peek(index);\n          body += char;\n          value += char;\n\n          scanUnexpectedChars();\n        }\n\n        index += 1;\n        continue;\n      }\n\n      if (char === \"\\\\\") {\n        index += 1;\n        char = this.peek(index);\n        body += char;\n        value += char;\n\n        scanUnexpectedChars();\n\n        if (char === \"/\") {\n          index += 1;\n          continue;\n        }\n\n        if (char === \"[\") {\n          index += 1;\n          continue;\n        }\n      }\n\n      if (char === \"[\") {\n        isCharSet = true;\n        index += 1;\n        continue;\n      }\n\n      if (char === \"/\") {\n        body = body.substr(0, body.length - 1);\n        terminated = true;\n        index += 1;\n        break;\n      }\n\n      index += 1;\n    }\n\n    if (!terminated) {\n      this.trigger(\"error\", {\n        code: \"E015\",\n        line: this.line,\n        character: this.from\n      });\n\n      return void this.trigger(\"fatal\", {\n        line: this.line,\n        from: this.from\n      });\n    }\n\n    while (index < length) {\n      char = this.peek(index);\n      if (!/[gim]/.test(char)) {\n        break;\n      }\n      flags.push(char);\n      value += char;\n      index += 1;\n    }\n\n    try {\n      new RegExp(body, flags.join(\"\"));\n    } catch (err) {\n      malformed = true;\n      this.trigger(\"error\", {\n        code: \"E016\",\n        line: this.line,\n        character: this.char,\n        data: [ err.message ] // Platform dependent!\n      });\n    }\n\n    return {\n      type: Token.RegExp,\n      value: value,\n      flags: flags,\n      isMalformed: malformed\n    };\n  },\n  scanNonBreakingSpaces: function() {\n    return state.option.nonbsp ?\n      this.input.search(/(\\u00A0)/) : -1;\n  },\n  scanUnsafeChars: function() {\n    return this.input.search(reg.unsafeChars);\n  },\n  next: function(checks) {\n    this.from = this.char;\n    var start;\n    if (/\\s/.test(this.peek())) {\n      start = this.char;\n\n      while (/\\s/.test(this.peek())) {\n        this.from += 1;\n        this.skip();\n      }\n    }\n\n    var match = this.scanComments() ||\n      this.scanStringLiteral(checks) ||\n      this.scanTemplateLiteral(checks);\n\n    if (match) {\n      return match;\n    }\n\n    match =\n      this.scanRegExp() ||\n      this.scanPunctuator() ||\n      this.scanKeyword() ||\n      this.scanIdentifier() ||\n      this.scanNumericLiteral();\n\n    if (match) {\n      this.skip(match.tokenLength || match.value.length);\n      return match;\n    }\n\n    return null;\n  },\n  nextLine: function() {\n    var char;\n\n    if (this.line >= this.getLines().length) {\n      return false;\n    }\n\n    this.input = this.getLines()[this.line];\n    this.line += 1;\n    this.char = 1;\n    this.from = 1;\n\n    var inputTrimmed = this.input.trim();\n\n    var startsWith = function() {\n      return _.some(arguments, function(prefix) {\n        return inputTrimmed.indexOf(prefix) === 0;\n      });\n    };\n\n    var endsWith = function() {\n      return _.some(arguments, function(suffix) {\n        return inputTrimmed.indexOf(suffix, inputTrimmed.length - suffix.length) !== -1;\n      });\n    };\n    if (this.ignoringLinterErrors === true) {\n      if (!startsWith(\"/*\", \"//\") && !(this.inComment && endsWith(\"*/\"))) {\n        this.input = \"\";\n      }\n    }\n\n    char = this.scanNonBreakingSpaces();\n    if (char >= 0) {\n      this.trigger(\"warning\", { code: \"W125\", line: this.line, character: char + 1 });\n    }\n\n    this.input = this.input.replace(/\\t/g, state.tab);\n    char = this.scanUnsafeChars();\n\n    if (char >= 0) {\n      this.trigger(\"warning\", { code: \"W100\", line: this.line, character: char });\n    }\n\n    if (!this.ignoringLinterErrors && state.option.maxlen &&\n      state.option.maxlen < this.input.length) {\n      var inComment = this.inComment ||\n        startsWith.call(inputTrimmed, \"//\") ||\n        startsWith.call(inputTrimmed, \"/*\");\n\n      var shouldTriggerError = !inComment || !reg.maxlenException.test(inputTrimmed);\n\n      if (shouldTriggerError) {\n        this.trigger(\"warning\", { code: \"W101\", line: this.line, character: this.input.length });\n      }\n    }\n\n    return true;\n  },\n  start: function() {\n    this.nextLine();\n  },\n  token: function() {\n    var checks = asyncTrigger();\n    var token;\n\n\n    function isReserved(token, isProperty) {\n      if (!token.reserved) {\n        return false;\n      }\n      var meta = token.meta;\n\n      if (meta && meta.isFutureReservedWord && state.inES5()) {\n        if (!meta.es5) {\n          return false;\n        }\n        if (meta.strictOnly) {\n          if (!state.option.strict && !state.isStrict()) {\n            return false;\n          }\n        }\n\n        if (isProperty) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n    var create = function(type, value, isProperty, token) {\n      var obj;\n\n      if (type !== \"(endline)\" && type !== \"(end)\") {\n        this.prereg = false;\n      }\n\n      if (type === \"(punctuator)\") {\n        switch (value) {\n        case \".\":\n        case \")\":\n        case \"~\":\n        case \"#\":\n        case \"]\":\n        case \"++\":\n        case \"--\":\n          this.prereg = false;\n          break;\n        default:\n          this.prereg = true;\n        }\n\n        obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n      }\n\n      if (type === \"(identifier)\") {\n        if (value === \"return\" || value === \"case\" || value === \"typeof\") {\n          this.prereg = true;\n        }\n\n        if (_.has(state.syntax, value)) {\n          obj = Object.create(state.syntax[value] || state.syntax[\"(error)\"]);\n          if (!isReserved(obj, isProperty && type === \"(identifier)\")) {\n            obj = null;\n          }\n        }\n      }\n\n      if (!obj) {\n        obj = Object.create(state.syntax[type]);\n      }\n\n      obj.identifier = (type === \"(identifier)\");\n      obj.type = obj.type || type;\n      obj.value = value;\n      obj.line = this.line;\n      obj.character = this.char;\n      obj.from = this.from;\n      if (obj.identifier && token) obj.raw_text = token.text || token.value;\n      if (token && token.startLine && token.startLine !== this.line) {\n        obj.startLine = token.startLine;\n      }\n      if (token && token.context) {\n        obj.context = token.context;\n      }\n      if (token && token.depth) {\n        obj.depth = token.depth;\n      }\n      if (token && token.isUnclosed) {\n        obj.isUnclosed = token.isUnclosed;\n      }\n\n      if (isProperty && obj.identifier) {\n        obj.isProperty = isProperty;\n      }\n\n      obj.check = checks.check;\n\n      return obj;\n    }.bind(this);\n\n    for (;;) {\n      if (!this.input.length) {\n        if (this.nextLine()) {\n          return create(\"(endline)\", \"\");\n        }\n\n        if (this.exhausted) {\n          return null;\n        }\n\n        this.exhausted = true;\n        return create(\"(end)\", \"\");\n      }\n\n      token = this.next(checks);\n\n      if (!token) {\n        if (this.input.length) {\n          this.trigger(\"error\", {\n            code: \"E024\",\n            line: this.line,\n            character: this.char,\n            data: [ this.peek() ]\n          });\n\n          this.input = \"\";\n        }\n\n        continue;\n      }\n\n      switch (token.type) {\n      case Token.StringLiteral:\n        this.triggerAsync(\"String\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value,\n          quote: token.quote\n        }, checks, function() { return true; });\n\n        return create(\"(string)\", token.value, null, token);\n\n      case Token.TemplateHead:\n        this.trigger(\"TemplateHead\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template)\", token.value, null, token);\n\n      case Token.TemplateMiddle:\n        this.trigger(\"TemplateMiddle\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template middle)\", token.value, null, token);\n\n      case Token.TemplateTail:\n        this.trigger(\"TemplateTail\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(template tail)\", token.value, null, token);\n\n      case Token.NoSubstTemplate:\n        this.trigger(\"NoSubstTemplate\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          startLine: token.startLine,\n          startChar: token.startChar,\n          value: token.value\n        });\n        return create(\"(no subst template)\", token.value, null, token);\n\n      case Token.Identifier:\n        this.triggerAsync(\"Identifier\", {\n          line: this.line,\n          char: this.char,\n          from: this.form,\n          name: token.value,\n          raw_name: token.text,\n          isProperty: state.tokens.curr.id === \".\"\n        }, checks, function() { return true; });\n      case Token.Keyword:\n      case Token.NullLiteral:\n      case Token.BooleanLiteral:\n        return create(\"(identifier)\", token.value, state.tokens.curr.id === \".\", token);\n\n      case Token.NumericLiteral:\n        if (token.isMalformed) {\n          this.trigger(\"warning\", {\n            code: \"W045\",\n            line: this.line,\n            character: this.char,\n            data: [ token.value ]\n          });\n        }\n\n        this.triggerAsync(\"warning\", {\n          code: \"W114\",\n          line: this.line,\n          character: this.char,\n          data: [ \"0x-\" ]\n        }, checks, function() { return token.base === 16 && state.jsonMode; });\n\n        this.triggerAsync(\"warning\", {\n          code: \"W115\",\n          line: this.line,\n          character: this.char\n        }, checks, function() {\n          return state.isStrict() && token.base === 8 && token.isLegacy;\n        });\n\n        this.trigger(\"Number\", {\n          line: this.line,\n          char: this.char,\n          from: this.from,\n          value: token.value,\n          base: token.base,\n          isMalformed: token.malformed\n        });\n\n        return create(\"(number)\", token.value);\n\n      case Token.RegExp:\n        return create(\"(regexp)\", token.value);\n\n      case Token.Comment:\n        state.tokens.curr.comment = true;\n\n        if (token.isSpecial) {\n          return {\n            id: '(comment)',\n            value: token.value,\n            body: token.body,\n            type: token.commentType,\n            isSpecial: token.isSpecial,\n            line: this.line,\n            character: this.char,\n            from: this.from\n          };\n        }\n\n        break;\n\n      case \"\":\n        break;\n\n      default:\n        return create(\"(punctuator)\", token.value);\n      }\n    }\n  }\n};\n\nexports.Lexer = Lexer;\nexports.Context = Context;\n\n},{\"../data/ascii-identifier-data.js\":\"/node_modules/jshint/data/ascii-identifier-data.js\",\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/messages.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _ = _dereq_(\"../lodash\");\n\nvar errors = {\n  E001: \"Bad option: '{a}'.\",\n  E002: \"Bad option value.\",\n  E003: \"Expected a JSON value.\",\n  E004: \"Input is neither a string nor an array of strings.\",\n  E005: \"Input is empty.\",\n  E006: \"Unexpected early end of program.\",\n  E007: \"Missing \\\"use strict\\\" statement.\",\n  E008: \"Strict violation.\",\n  E009: \"Option 'validthis' can't be used in a global scope.\",\n  E010: \"'with' is not allowed in strict mode.\",\n  E011: \"'{a}' has already been declared.\",\n  E012: \"const '{a}' is initialized to 'undefined'.\",\n  E013: \"Attempting to override '{a}' which is a constant.\",\n  E014: \"A regular expression literal can be confused with '/='.\",\n  E015: \"Unclosed regular expression.\",\n  E016: \"Invalid regular expression.\",\n  E017: \"Unclosed comment.\",\n  E018: \"Unbegun comment.\",\n  E019: \"Unmatched '{a}'.\",\n  E020: \"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.\",\n  E021: \"Expected '{a}' and instead saw '{b}'.\",\n  E022: \"Line breaking error '{a}'.\",\n  E023: \"Missing '{a}'.\",\n  E024: \"Unexpected '{a}'.\",\n  E025: \"Missing ':' on a case clause.\",\n  E026: \"Missing '}' to match '{' from line {a}.\",\n  E027: \"Missing ']' to match '[' from line {a}.\",\n  E028: \"Illegal comma.\",\n  E029: \"Unclosed string.\",\n  E030: \"Expected an identifier and instead saw '{a}'.\",\n  E031: \"Bad assignment.\", // FIXME: Rephrase\n  E032: \"Expected a small integer or 'false' and instead saw '{a}'.\",\n  E033: \"Expected an operator and instead saw '{a}'.\",\n  E034: \"get/set are ES5 features.\",\n  E035: \"Missing property name.\",\n  E036: \"Expected to see a statement and instead saw a block.\",\n  E037: null,\n  E038: null,\n  E039: \"Function declarations are not invocable. Wrap the whole function invocation in parens.\",\n  E040: \"Each value should have its own case label.\",\n  E041: \"Unrecoverable syntax error.\",\n  E042: \"Stopping.\",\n  E043: \"Too many errors.\",\n  E044: null,\n  E045: \"Invalid for each loop.\",\n  E046: \"A yield statement shall be within a generator function (with syntax: `function*`)\",\n  E047: null,\n  E048: \"{a} declaration not directly within block.\",\n  E049: \"A {a} cannot be named '{b}'.\",\n  E050: \"Mozilla requires the yield expression to be parenthesized here.\",\n  E051: null,\n  E052: \"Unclosed template literal.\",\n  E053: \"Export declaration must be in global scope.\",\n  E054: \"Class properties must be methods. Expected '(' but instead saw '{a}'.\",\n  E055: \"The '{a}' option cannot be set after any executable code.\",\n  E056: \"'{a}' was used before it was declared, which is illegal for '{b}' variables.\",\n  E057: \"Invalid meta property: '{a}.{b}'.\",\n  E058: \"Missing semicolon.\"\n};\n\nvar warnings = {\n  W001: \"'hasOwnProperty' is a really bad name.\",\n  W002: \"Value of '{a}' may be overwritten in IE 8 and earlier.\",\n  W003: \"'{a}' was used before it was defined.\",\n  W004: \"'{a}' is already defined.\",\n  W005: \"A dot following a number can be confused with a decimal point.\",\n  W006: \"Confusing minuses.\",\n  W007: \"Confusing plusses.\",\n  W008: \"A leading decimal point can be confused with a dot: '{a}'.\",\n  W009: \"The array literal notation [] is preferable.\",\n  W010: \"The object literal notation {} is preferable.\",\n  W011: null,\n  W012: null,\n  W013: null,\n  W014: \"Bad line breaking before '{a}'.\",\n  W015: null,\n  W016: \"Unexpected use of '{a}'.\",\n  W017: \"Bad operand.\",\n  W018: \"Confusing use of '{a}'.\",\n  W019: \"Use the isNaN function to compare with NaN.\",\n  W020: \"Read only.\",\n  W021: \"Reassignment of '{a}', which is is a {b}. \" +\n    \"Use 'var' or 'let' to declare bindings that may change.\",\n  W022: \"Do not assign to the exception parameter.\",\n  W023: \"Expected an identifier in an assignment and instead saw a function invocation.\",\n  W024: \"Expected an identifier and instead saw '{a}' (a reserved word).\",\n  W025: \"Missing name in function declaration.\",\n  W026: \"Inner functions should be listed at the top of the outer function.\",\n  W027: \"Unreachable '{a}' after '{b}'.\",\n  W028: \"Label '{a}' on {b} statement.\",\n  W030: \"Expected an assignment or function call and instead saw an expression.\",\n  W031: \"Do not use 'new' for side effects.\",\n  W032: \"Unnecessary semicolon.\",\n  W033: \"Missing semicolon.\",\n  W034: \"Unnecessary directive \\\"{a}\\\".\",\n  W035: \"Empty block.\",\n  W036: \"Unexpected /*member '{a}'.\",\n  W037: \"'{a}' is a statement label.\",\n  W038: \"'{a}' used out of scope.\",\n  W039: \"'{a}' is not allowed.\",\n  W040: \"Possible strict violation.\",\n  W041: \"Use '{a}' to compare with '{b}'.\",\n  W042: \"Avoid EOL escaping.\",\n  W043: \"Bad escaping of EOL. Use option multistr if needed.\",\n  W044: \"Bad or unnecessary escaping.\", /* TODO(caitp): remove W044 */\n  W045: \"Bad number '{a}'.\",\n  W046: \"Don't use extra leading zeros '{a}'.\",\n  W047: \"A trailing decimal point can be confused with a dot: '{a}'.\",\n  W048: \"Unexpected control character in regular expression.\",\n  W049: \"Unexpected escaped character '{a}' in regular expression.\",\n  W050: \"JavaScript URL.\",\n  W051: \"Variables should not be deleted.\",\n  W052: \"Unexpected '{a}'.\",\n  W053: \"Do not use {a} as a constructor.\",\n  W054: \"The Function constructor is a form of eval.\",\n  W055: \"A constructor name should start with an uppercase letter.\",\n  W056: \"Bad constructor.\",\n  W057: \"Weird construction. Is 'new' necessary?\",\n  W058: \"Missing '()' invoking a constructor.\",\n  W059: \"Avoid arguments.{a}.\",\n  W060: \"document.write can be a form of eval.\",\n  W061: \"eval can be harmful.\",\n  W062: \"Wrap an immediate function invocation in parens \" +\n    \"to assist the reader in understanding that the expression \" +\n    \"is the result of a function, and not the function itself.\",\n  W063: \"Math is not a function.\",\n  W064: \"Missing 'new' prefix when invoking a constructor.\",\n  W065: \"Missing radix parameter.\",\n  W066: \"Implied eval. Consider passing a function instead of a string.\",\n  W067: \"Bad invocation.\",\n  W068: \"Wrapping non-IIFE function literals in parens is unnecessary.\",\n  W069: \"['{a}'] is better written in dot notation.\",\n  W070: \"Extra comma. (it breaks older versions of IE)\",\n  W071: \"This function has too many statements. ({a})\",\n  W072: \"This function has too many parameters. ({a})\",\n  W073: \"Blocks are nested too deeply. ({a})\",\n  W074: \"This function's cyclomatic complexity is too high. ({a})\",\n  W075: \"Duplicate {a} '{b}'.\",\n  W076: \"Unexpected parameter '{a}' in get {b} function.\",\n  W077: \"Expected a single parameter in set {a} function.\",\n  W078: \"Setter is defined without getter.\",\n  W079: \"Redefinition of '{a}'.\",\n  W080: \"It's not necessary to initialize '{a}' to 'undefined'.\",\n  W081: null,\n  W082: \"Function declarations should not be placed in blocks. \" +\n    \"Use a function expression or move the statement to the top of \" +\n    \"the outer function.\",\n  W083: \"Don't make functions within a loop.\",\n  W084: \"Assignment in conditional expression\",\n  W085: \"Don't use 'with'.\",\n  W086: \"Expected a 'break' statement before '{a}'.\",\n  W087: \"Forgotten 'debugger' statement?\",\n  W088: \"Creating global 'for' variable. Should be 'for (var {a} ...'.\",\n  W089: \"The body of a for in should be wrapped in an if statement to filter \" +\n    \"unwanted properties from the prototype.\",\n  W090: \"'{a}' is not a statement label.\",\n  W091: null,\n  W093: \"Did you mean to return a conditional instead of an assignment?\",\n  W094: \"Unexpected comma.\",\n  W095: \"Expected a string and instead saw {a}.\",\n  W096: \"The '{a}' key may produce unexpected results.\",\n  W097: \"Use the function form of \\\"use strict\\\".\",\n  W098: \"'{a}' is defined but never used.\",\n  W099: null,\n  W100: \"This character may get silently deleted by one or more browsers.\",\n  W101: \"Line is too long.\",\n  W102: null,\n  W103: \"The '{a}' property is deprecated.\",\n  W104: \"'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).\",\n  W105: \"Unexpected {a} in '{b}'.\",\n  W106: \"Identifier '{a}' is not in camel case.\",\n  W107: \"Script URL.\",\n  W108: \"Strings must use doublequote.\",\n  W109: \"Strings must use singlequote.\",\n  W110: \"Mixed double and single quotes.\",\n  W112: \"Unclosed string.\",\n  W113: \"Control character in string: {a}.\",\n  W114: \"Avoid {a}.\",\n  W115: \"Octal literals are not allowed in strict mode.\",\n  W116: \"Expected '{a}' and instead saw '{b}'.\",\n  W117: \"'{a}' is not defined.\",\n  W118: \"'{a}' is only available in Mozilla JavaScript extensions (use moz option).\",\n  W119: \"'{a}' is only available in ES{b} (use 'esversion: {b}').\",\n  W120: \"You might be leaking a variable ({a}) here.\",\n  W121: \"Extending prototype of native object: '{a}'.\",\n  W122: \"Invalid typeof value '{a}'\",\n  W123: \"'{a}' is already defined in outer scope.\",\n  W124: \"A generator function shall contain a yield statement.\",\n  W125: \"This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp\",\n  W126: \"Unnecessary grouping operator.\",\n  W127: \"Unexpected use of a comma operator.\",\n  W128: \"Empty array elements require elision=true.\",\n  W129: \"'{a}' is defined in a future version of JavaScript. Use a \" +\n    \"different variable name to avoid migration issues.\",\n  W130: \"Invalid element after rest element.\",\n  W131: \"Invalid parameter after rest parameter.\",\n  W132: \"`var` declarations are forbidden. Use `let` or `const` instead.\",\n  W133: \"Invalid for-{a} loop left-hand-side: {b}.\",\n  W134: \"The '{a}' option is only available when linting ECMAScript {b} code.\",\n  W135: \"{a} may not be supported by non-browser environments.\",\n  W136: \"'{a}' must be in function scope.\",\n  W137: \"Empty destructuring.\",\n  W138: \"Regular parameters should not come after default parameters.\"\n};\n\nvar info = {\n  I001: \"Comma warnings can be turned off with 'laxcomma'.\",\n  I002: null,\n  I003: \"ES5 option is now set per default\"\n};\n\nexports.errors = {};\nexports.warnings = {};\nexports.info = {};\n\n_.each(errors, function(desc, code) {\n  exports.errors[code] = { code: code, desc: desc };\n});\n\n_.each(warnings, function(desc, code) {\n  exports.warnings[code] = { code: code, desc: desc };\n});\n\n_.each(info, function(desc, code) {\n  exports.info[code] = { code: code, desc: desc };\n});\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\"}],\"/node_modules/jshint/src/name-stack.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nfunction NameStack() {\n  this._stack = [];\n}\n\nObject.defineProperty(NameStack.prototype, \"length\", {\n  get: function() {\n    return this._stack.length;\n  }\n});\nNameStack.prototype.push = function() {\n  this._stack.push(null);\n};\nNameStack.prototype.pop = function() {\n  this._stack.pop();\n};\nNameStack.prototype.set = function(token) {\n  this._stack[this.length - 1] = token;\n};\nNameStack.prototype.infer = function() {\n  var nameToken = this._stack[this.length - 1];\n  var prefix = \"\";\n  var type;\n  if (!nameToken || nameToken.type === \"class\") {\n    nameToken = this._stack[this.length - 2];\n  }\n\n  if (!nameToken) {\n    return \"(empty)\";\n  }\n\n  type = nameToken.type;\n\n  if (type !== \"(string)\" && type !== \"(number)\" && type !== \"(identifier)\" && type !== \"default\") {\n    return \"(expression)\";\n  }\n\n  if (nameToken.accessorType) {\n    prefix = nameToken.accessorType + \" \";\n  }\n\n  return prefix + nameToken.value;\n};\n\nmodule.exports = NameStack;\n\n},{}],\"/node_modules/jshint/src/options.js\":[function(_dereq_,module,exports){\n\"use strict\";\nexports.bool = {\n  enforcing: {\n    bitwise     : true,\n    freeze      : true,\n    camelcase   : true,\n    curly       : true,\n    eqeqeq      : true,\n    futurehostile: true,\n    notypeof    : true,\n    es3         : true,\n    es5         : true,\n    forin       : true,\n    funcscope   : true,\n    immed       : true,\n    iterator    : true,\n    newcap      : true,\n    noarg       : true,\n    nocomma     : true,\n    noempty     : true,\n    nonbsp      : true,\n    nonew       : true,\n    undef       : true,\n    singleGroups: false,\n    varstmt: false,\n    enforceall : false\n  },\n  relaxing: {\n    asi         : true,\n    multistr    : true,\n    debug       : true,\n    boss        : true,\n    evil        : true,\n    globalstrict: true,\n    plusplus    : true,\n    proto       : true,\n    scripturl   : true,\n    sub         : true,\n    supernew    : true,\n    laxbreak    : true,\n    laxcomma    : true,\n    validthis   : true,\n    withstmt    : true,\n    moz         : true,\n    noyield     : true,\n    eqnull      : true,\n    lastsemic   : true,\n    loopfunc    : true,\n    expr        : true,\n    esnext      : true,\n    elision     : true,\n  },\n  environments: {\n    mootools    : true,\n    couch       : true,\n    jasmine     : true,\n    jquery      : true,\n    node        : true,\n    qunit       : true,\n    rhino       : true,\n    shelljs     : true,\n    prototypejs : true,\n    yui         : true,\n    mocha       : true,\n    module      : true,\n    wsh         : true,\n    worker      : true,\n    nonstandard : true,\n    browser     : true,\n    browserify  : true,\n    devel       : true,\n    dojo        : true,\n    typed       : true,\n    phantom     : true\n  },\n  obsolete: {\n    onecase     : true, // if one case switch statements should be allowed\n    regexp      : true, // if the . should not be allowed in regexp literals\n    regexdash   : true  // if unescaped first/last dash (-) inside brackets\n  }\n};\nexports.val = {\n  maxlen       : false,\n  indent       : false,\n  maxerr       : false,\n  predef       : false,\n  globals      : false,\n  quotmark     : false,\n\n  scope        : false,\n  maxstatements: false,\n  maxdepth     : false,\n  maxparams    : false,\n  maxcomplexity: false,\n  shadow       : false,\n  strict      : true,\n  unused       : true,\n  latedef      : false,\n\n  ignore       : false, // start/end ignoring lines of code, bypassing the lexer\n\n  ignoreDelimiters: false, // array of start/end delimiters used to ignore\n  esversion: 5\n};\nexports.inverted = {\n  bitwise : true,\n  forin   : true,\n  newcap  : true,\n  plusplus: true,\n  regexp  : true,\n  undef   : true,\n  eqeqeq  : true,\n  strict  : true\n};\n\nexports.validNames = Object.keys(exports.val)\n  .concat(Object.keys(exports.bool.relaxing))\n  .concat(Object.keys(exports.bool.enforcing))\n  .concat(Object.keys(exports.bool.obsolete))\n  .concat(Object.keys(exports.bool.environments));\nexports.renamed = {\n  eqeq   : \"eqeqeq\",\n  windows: \"wsh\",\n  sloppy : \"strict\"\n};\n\nexports.removed = {\n  nomen: true,\n  onevar: true,\n  passfail: true,\n  white: true,\n  gcl: true,\n  smarttabs: true,\n  trailing: true\n};\nexports.noenforceall = {\n  varstmt: true,\n  strict: true\n};\n\n},{}],\"/node_modules/jshint/src/reg.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\nexports.unsafeString =\n  /@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|&lt/i;\nexports.unsafeChars =\n  /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\nexports.needEsc =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n\nexports.needEscGlobal =\n  /[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\nexports.starSlash = /\\*\\//;\nexports.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;\nexports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\nexports.fallsThrough = /^\\s*falls?\\sthrough\\s*$/;\nexports.maxlenException = /^(?:(?:\\/\\/|\\/\\*|\\*) ?)?[^ ]+$/;\n\n},{}],\"/node_modules/jshint/src/scope-manager.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nvar _      = _dereq_(\"../lodash\");\nvar events = _dereq_(\"events\");\nvar marker = {};\nvar scopeManager = function(state, predefined, exported, declared) {\n\n  var _current;\n  var _scopeStack = [];\n\n  function _newScope(type) {\n    _current = {\n      \"(labels)\": Object.create(null),\n      \"(usages)\": Object.create(null),\n      \"(breakLabels)\": Object.create(null),\n      \"(parent)\": _current,\n      \"(type)\": type,\n      \"(params)\": (type === \"functionparams\" || type === \"catchparams\") ? [] : null\n    };\n    _scopeStack.push(_current);\n  }\n\n  _newScope(\"global\");\n  _current[\"(predefined)\"] = predefined;\n\n  var _currentFunctBody = _current; // this is the block after the params = function\n\n  var usedPredefinedAndGlobals = Object.create(null);\n  var impliedGlobals = Object.create(null);\n  var unuseds = [];\n  var emitter = new events.EventEmitter();\n\n  function warning(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function error(code, token) {\n    emitter.emit(\"warning\", {\n      code: code,\n      token: token,\n      data: _.slice(arguments, 2)\n    });\n  }\n\n  function _setupUsages(labelName) {\n    if (!_current[\"(usages)\"][labelName]) {\n      _current[\"(usages)\"][labelName] = {\n        \"(modified)\": [],\n        \"(reassigned)\": [],\n        \"(tokens)\": []\n      };\n    }\n  }\n\n  var _getUnusedOption = function(unused_opt) {\n    if (unused_opt === undefined) {\n      unused_opt = state.option.unused;\n    }\n\n    if (unused_opt === true) {\n      unused_opt = \"last-param\";\n    }\n\n    return unused_opt;\n  };\n\n  var _warnUnused = function(name, tkn, type, unused_opt) {\n    var line = tkn.line;\n    var chr  = tkn.from;\n    var raw_name = tkn.raw_text || name;\n\n    unused_opt = _getUnusedOption(unused_opt);\n\n    var warnable_types = {\n      \"vars\": [\"var\"],\n      \"last-param\": [\"var\", \"param\"],\n      \"strict\": [\"var\", \"param\", \"last-param\"]\n    };\n\n    if (unused_opt) {\n      if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) {\n        warning(\"W098\", { line: line, from: chr }, raw_name);\n      }\n    }\n    if (unused_opt || type === \"var\") {\n      unuseds.push({\n        name: name,\n        line: line,\n        character: chr\n      });\n    }\n  };\n  function _checkForUnused() {\n    if (_current[\"(type)\"] === \"functionparams\") {\n      _checkParams();\n      return;\n    }\n    var curentLabels = _current[\"(labels)\"];\n    for (var labelName in curentLabels) {\n      if (curentLabels[labelName]) {\n        if (curentLabels[labelName][\"(type)\"] !== \"exception\" &&\n          curentLabels[labelName][\"(unused)\"]) {\n          _warnUnused(labelName, curentLabels[labelName][\"(token)\"], \"var\");\n        }\n      }\n    }\n  }\n  function _checkParams() {\n    var params = _current[\"(params)\"];\n\n    if (!params) {\n      return;\n    }\n\n    var param = params.pop();\n    var unused_opt;\n\n    while (param) {\n      var label = _current[\"(labels)\"][param];\n\n      unused_opt = _getUnusedOption(state.funct[\"(unusedOption)\"]);\n      if (param === \"undefined\")\n        return;\n\n      if (label[\"(unused)\"]) {\n        _warnUnused(param, label[\"(token)\"], \"param\", state.funct[\"(unusedOption)\"]);\n      } else if (unused_opt === \"last-param\") {\n        return;\n      }\n\n      param = params.pop();\n    }\n  }\n  function _getLabel(labelName) {\n    for (var i = _scopeStack.length - 1 ; i >= 0; --i) {\n      var scopeLabels = _scopeStack[i][\"(labels)\"];\n      if (scopeLabels[labelName]) {\n        return scopeLabels;\n      }\n    }\n  }\n\n  function usedSoFarInCurrentFunction(labelName) {\n    for (var i = _scopeStack.length - 1; i >= 0; i--) {\n      var current = _scopeStack[i];\n      if (current[\"(usages)\"][labelName]) {\n        return current[\"(usages)\"][labelName];\n      }\n      if (current === _currentFunctBody) {\n        break;\n      }\n    }\n    return false;\n  }\n\n  function _checkOuterShadow(labelName, token) {\n    if (state.option.shadow !== \"outer\") {\n      return;\n    }\n\n    var isGlobal = _currentFunctBody[\"(type)\"] === \"global\",\n      isNewFunction = _current[\"(type)\"] === \"functionparams\";\n\n    var outsideCurrentFunction = !isGlobal;\n    for (var i = 0; i < _scopeStack.length; i++) {\n      var stackItem = _scopeStack[i];\n\n      if (!isNewFunction && _scopeStack[i + 1] === _currentFunctBody) {\n        outsideCurrentFunction = false;\n      }\n      if (outsideCurrentFunction && stackItem[\"(labels)\"][labelName]) {\n        warning(\"W123\", token, labelName);\n      }\n      if (stackItem[\"(breakLabels)\"][labelName]) {\n        warning(\"W123\", token, labelName);\n      }\n    }\n  }\n\n  function _latedefWarning(type, labelName, token) {\n    if (state.option.latedef) {\n      if ((state.option.latedef === true && type === \"function\") ||\n        type !== \"function\") {\n        warning(\"W003\", token, labelName);\n      }\n    }\n  }\n\n  var scopeManagerInst = {\n\n    on: function(names, listener) {\n      names.split(\" \").forEach(function(name) {\n        emitter.on(name, listener);\n      });\n    },\n\n    isPredefined: function(labelName) {\n      return !this.has(labelName) && _.has(_scopeStack[0][\"(predefined)\"], labelName);\n    },\n    stack: function(type) {\n      var previousScope = _current;\n      _newScope(type);\n\n      if (!type && previousScope[\"(type)\"] === \"functionparams\") {\n\n        _current[\"(isFuncBody)\"] = true;\n        _current[\"(context)\"] = _currentFunctBody;\n        _currentFunctBody = _current;\n      }\n    },\n\n    unstack: function() {\n      var subScope = _scopeStack.length > 1 ? _scopeStack[_scopeStack.length - 2] : null;\n      var isUnstackingFunctionBody = _current === _currentFunctBody,\n        isUnstackingFunctionParams = _current[\"(type)\"] === \"functionparams\",\n        isUnstackingFunctionOuter = _current[\"(type)\"] === \"functionouter\";\n\n      var i, j;\n      var currentUsages = _current[\"(usages)\"];\n      var currentLabels = _current[\"(labels)\"];\n      var usedLabelNameList = Object.keys(currentUsages);\n\n      if (currentUsages.__proto__ && usedLabelNameList.indexOf(\"__proto__\") === -1) {\n        usedLabelNameList.push(\"__proto__\");\n      }\n\n      for (i = 0; i < usedLabelNameList.length; i++) {\n        var usedLabelName = usedLabelNameList[i];\n\n        var usage = currentUsages[usedLabelName];\n        var usedLabel = currentLabels[usedLabelName];\n        if (usedLabel) {\n          var usedLabelType = usedLabel[\"(type)\"];\n\n          if (usedLabel[\"(useOutsideOfScope)\"] && !state.option.funcscope) {\n            var usedTokens = usage[\"(tokens)\"];\n            if (usedTokens) {\n              for (j = 0; j < usedTokens.length; j++) {\n                if (usedLabel[\"(function)\"] === usedTokens[j][\"(function)\"]) {\n                  error(\"W038\", usedTokens[j], usedLabelName);\n                }\n              }\n            }\n          }\n          _current[\"(labels)\"][usedLabelName][\"(unused)\"] = false;\n          if (usedLabelType === \"const\" && usage[\"(modified)\"]) {\n            for (j = 0; j < usage[\"(modified)\"].length; j++) {\n              error(\"E013\", usage[\"(modified)\"][j], usedLabelName);\n            }\n          }\n          if ((usedLabelType === \"function\" || usedLabelType === \"class\") &&\n              usage[\"(reassigned)\"]) {\n            for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n              error(\"W021\", usage[\"(reassigned)\"][j], usedLabelName, usedLabelType);\n            }\n          }\n          continue;\n        }\n\n        if (isUnstackingFunctionOuter) {\n          state.funct[\"(isCapturing)\"] = true;\n        }\n\n        if (subScope) {\n          if (!subScope[\"(usages)\"][usedLabelName]) {\n            subScope[\"(usages)\"][usedLabelName] = usage;\n            if (isUnstackingFunctionBody) {\n              subScope[\"(usages)\"][usedLabelName][\"(onlyUsedSubFunction)\"] = true;\n            }\n          } else {\n            var subScopeUsage = subScope[\"(usages)\"][usedLabelName];\n            subScopeUsage[\"(modified)\"] = subScopeUsage[\"(modified)\"].concat(usage[\"(modified)\"]);\n            subScopeUsage[\"(tokens)\"] = subScopeUsage[\"(tokens)\"].concat(usage[\"(tokens)\"]);\n            subScopeUsage[\"(reassigned)\"] =\n              subScopeUsage[\"(reassigned)\"].concat(usage[\"(reassigned)\"]);\n            subScopeUsage[\"(onlyUsedSubFunction)\"] = false;\n          }\n        } else {\n          if (typeof _current[\"(predefined)\"][usedLabelName] === \"boolean\") {\n            delete declared[usedLabelName];\n            usedPredefinedAndGlobals[usedLabelName] = marker;\n            if (_current[\"(predefined)\"][usedLabelName] === false && usage[\"(reassigned)\"]) {\n              for (j = 0; j < usage[\"(reassigned)\"].length; j++) {\n                warning(\"W020\", usage[\"(reassigned)\"][j]);\n              }\n            }\n          }\n          else {\n            if (usage[\"(tokens)\"]) {\n              for (j = 0; j < usage[\"(tokens)\"].length; j++) {\n                var undefinedToken = usage[\"(tokens)\"][j];\n                if (!undefinedToken.forgiveUndef) {\n                  if (state.option.undef && !undefinedToken.ignoreUndef) {\n                    warning(\"W117\", undefinedToken, usedLabelName);\n                  }\n                  if (impliedGlobals[usedLabelName]) {\n                    impliedGlobals[usedLabelName].line.push(undefinedToken.line);\n                  } else {\n                    impliedGlobals[usedLabelName] = {\n                      name: usedLabelName,\n                      line: [undefinedToken.line]\n                    };\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n      if (!subScope) {\n        Object.keys(declared)\n          .forEach(function(labelNotUsed) {\n            _warnUnused(labelNotUsed, declared[labelNotUsed], \"var\");\n          });\n      }\n      if (subScope && !isUnstackingFunctionBody &&\n        !isUnstackingFunctionParams && !isUnstackingFunctionOuter) {\n        var labelNames = Object.keys(currentLabels);\n        for (i = 0; i < labelNames.length; i++) {\n\n          var defLabelName = labelNames[i];\n          if (!currentLabels[defLabelName][\"(blockscoped)\"] &&\n            currentLabels[defLabelName][\"(type)\"] !== \"exception\" &&\n            !this.funct.has(defLabelName, { excludeCurrent: true })) {\n            subScope[\"(labels)\"][defLabelName] = currentLabels[defLabelName];\n            if (_currentFunctBody[\"(type)\"] !== \"global\") {\n              subScope[\"(labels)\"][defLabelName][\"(useOutsideOfScope)\"] = true;\n            }\n            delete currentLabels[defLabelName];\n          }\n        }\n      }\n\n      _checkForUnused();\n\n      _scopeStack.pop();\n      if (isUnstackingFunctionBody) {\n        _currentFunctBody = _scopeStack[_.findLastIndex(_scopeStack, function(scope) {\n          return scope[\"(isFuncBody)\"] || scope[\"(type)\"] === \"global\";\n        })];\n      }\n\n      _current = subScope;\n    },\n    addParam: function(labelName, token, type) {\n      type = type || \"param\";\n\n      if (type === \"exception\") {\n        var previouslyDefinedLabelType = this.funct.labeltype(labelName);\n        if (previouslyDefinedLabelType && previouslyDefinedLabelType !== \"exception\") {\n          if (!state.option.node) {\n            warning(\"W002\", state.tokens.next, labelName);\n          }\n        }\n      }\n      if (_.has(_current[\"(labels)\"], labelName)) {\n        _current[\"(labels)\"][labelName].duplicated = true;\n      } else {\n        _checkOuterShadow(labelName, token, type);\n\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": token,\n          \"(unused)\": true };\n\n        _current[\"(params)\"].push(labelName);\n      }\n\n      if (_.has(_current[\"(usages)\"], labelName)) {\n        var usage = _current[\"(usages)\"][labelName];\n        if (usage[\"(onlyUsedSubFunction)\"]) {\n          _latedefWarning(type, labelName, token);\n        } else {\n          warning(\"E056\", token, labelName, type);\n        }\n      }\n    },\n\n    validateParams: function() {\n      if (_currentFunctBody[\"(type)\"] === \"global\") {\n        return;\n      }\n\n      var isStrict = state.isStrict();\n      var currentFunctParamScope = _currentFunctBody[\"(parent)\"];\n\n      if (!currentFunctParamScope[\"(params)\"]) {\n        return;\n      }\n\n      currentFunctParamScope[\"(params)\"].forEach(function(labelName) {\n        var label = currentFunctParamScope[\"(labels)\"][labelName];\n\n        if (label && label.duplicated) {\n          if (isStrict) {\n            warning(\"E011\", label[\"(token)\"], labelName);\n          } else if (state.option.shadow !== true) {\n            warning(\"W004\", label[\"(token)\"], labelName);\n          }\n        }\n      });\n    },\n\n    getUsedOrDefinedGlobals: function() {\n      var list = Object.keys(usedPredefinedAndGlobals);\n      if (usedPredefinedAndGlobals.__proto__ === marker &&\n        list.indexOf(\"__proto__\") === -1) {\n        list.push(\"__proto__\");\n      }\n\n      return list;\n    },\n    getImpliedGlobals: function() {\n      var values = _.values(impliedGlobals);\n      var hasProto = false;\n      if (impliedGlobals.__proto__) {\n        hasProto = values.some(function(value) {\n          return value.name === \"__proto__\";\n        });\n\n        if (!hasProto) {\n          values.push(impliedGlobals.__proto__);\n        }\n      }\n\n      return values;\n    },\n    getUnuseds: function() {\n      return unuseds;\n    },\n\n    has: function(labelName) {\n      return Boolean(_getLabel(labelName));\n    },\n\n    labeltype: function(labelName) {\n      var scopeLabels = _getLabel(labelName);\n      if (scopeLabels) {\n        return scopeLabels[labelName][\"(type)\"];\n      }\n      return null;\n    },\n    addExported: function(labelName) {\n      var globalLabels = _scopeStack[0][\"(labels)\"];\n      if (_.has(declared, labelName)) {\n        delete declared[labelName];\n      } else if (_.has(globalLabels, labelName)) {\n        globalLabels[labelName][\"(unused)\"] = false;\n      } else {\n        for (var i = 1; i < _scopeStack.length; i++) {\n          var scope = _scopeStack[i];\n          if (!scope[\"(type)\"]) {\n            if (_.has(scope[\"(labels)\"], labelName) &&\n                !scope[\"(labels)\"][labelName][\"(blockscoped)\"]) {\n              scope[\"(labels)\"][labelName][\"(unused)\"] = false;\n              return;\n            }\n          } else {\n            break;\n          }\n        }\n        exported[labelName] = true;\n      }\n    },\n    setExported: function(labelName, token) {\n      this.block.use(labelName, token);\n    },\n    addlabel: function(labelName, opts) {\n\n      var type  = opts.type;\n      var token = opts.token;\n      var isblockscoped = type === \"let\" || type === \"const\" || type === \"class\";\n      var isexported    = (isblockscoped ? _current : _currentFunctBody)[\"(type)\"] === \"global\" &&\n                          _.has(exported, labelName);\n      _checkOuterShadow(labelName, token, type);\n      if (isblockscoped) {\n\n        var declaredInCurrentScope = _current[\"(labels)\"][labelName];\n        if (!declaredInCurrentScope && _current === _currentFunctBody &&\n          _current[\"(type)\"] !== \"global\") {\n          declaredInCurrentScope = !!_currentFunctBody[\"(parent)\"][\"(labels)\"][labelName];\n        }\n        if (!declaredInCurrentScope && _current[\"(usages)\"][labelName]) {\n          var usage = _current[\"(usages)\"][labelName];\n          if (usage[\"(onlyUsedSubFunction)\"]) {\n            _latedefWarning(type, labelName, token);\n          } else {\n            warning(\"E056\", token, labelName, type);\n          }\n        }\n        if (declaredInCurrentScope) {\n          warning(\"E011\", token, labelName);\n        }\n        else if (state.option.shadow === \"outer\") {\n          if (scopeManagerInst.funct.has(labelName)) {\n            warning(\"W004\", token, labelName);\n          }\n        }\n\n        scopeManagerInst.block.add(labelName, type, token, !isexported);\n\n      } else {\n\n        var declaredInCurrentFunctionScope = scopeManagerInst.funct.has(labelName);\n        if (!declaredInCurrentFunctionScope && usedSoFarInCurrentFunction(labelName)) {\n          _latedefWarning(type, labelName, token);\n        }\n        if (scopeManagerInst.funct.has(labelName, { onlyBlockscoped: true })) {\n          warning(\"E011\", token, labelName);\n        } else if (state.option.shadow !== true) {\n          if (declaredInCurrentFunctionScope && labelName !== \"__proto__\") {\n            if (_currentFunctBody[\"(type)\"] !== \"global\") {\n              warning(\"W004\", token, labelName);\n            }\n          }\n        }\n\n        scopeManagerInst.funct.add(labelName, type, token, !isexported);\n\n        if (_currentFunctBody[\"(type)\"] === \"global\") {\n          usedPredefinedAndGlobals[labelName] = marker;\n        }\n      }\n    },\n\n    funct: {\n      labeltype: function(labelName, options) {\n        var onlyBlockscoped = options && options.onlyBlockscoped;\n        var excludeParams = options && options.excludeParams;\n        var currentScopeIndex = _scopeStack.length - (options && options.excludeCurrent ? 2 : 1);\n        for (var i = currentScopeIndex; i >= 0; i--) {\n          var current = _scopeStack[i];\n          if (current[\"(labels)\"][labelName] &&\n            (!onlyBlockscoped || current[\"(labels)\"][labelName][\"(blockscoped)\"])) {\n            return current[\"(labels)\"][labelName][\"(type)\"];\n          }\n          var scopeCheck = excludeParams ? _scopeStack[ i - 1 ] : current;\n          if (scopeCheck && scopeCheck[\"(type)\"] === \"functionparams\") {\n            return null;\n          }\n        }\n        return null;\n      },\n      hasBreakLabel: function(labelName) {\n        for (var i = _scopeStack.length - 1; i >= 0; i--) {\n          var current = _scopeStack[i];\n\n          if (current[\"(breakLabels)\"][labelName]) {\n            return true;\n          }\n          if (current[\"(type)\"] === \"functionparams\") {\n            return false;\n          }\n        }\n        return false;\n      },\n      has: function(labelName, options) {\n        return Boolean(this.labeltype(labelName, options));\n      },\n      add: function(labelName, type, tok, unused) {\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(blockscoped)\": false,\n          \"(function)\": _currentFunctBody,\n          \"(unused)\": unused };\n      }\n    },\n\n    block: {\n      isGlobal: function() {\n        return _current[\"(type)\"] === \"global\";\n      },\n\n      use: function(labelName, token) {\n        var paramScope = _currentFunctBody[\"(parent)\"];\n        if (paramScope && paramScope[\"(labels)\"][labelName] &&\n          paramScope[\"(labels)\"][labelName][\"(type)\"] === \"param\") {\n          if (!scopeManagerInst.funct.has(labelName,\n                { excludeParams: true, onlyBlockscoped: true })) {\n            paramScope[\"(labels)\"][labelName][\"(unused)\"] = false;\n          }\n        }\n\n        if (token && (state.ignored.W117 || state.option.undef === false)) {\n          token.ignoreUndef = true;\n        }\n\n        _setupUsages(labelName);\n\n        if (token) {\n          token[\"(function)\"] = _currentFunctBody;\n          _current[\"(usages)\"][labelName][\"(tokens)\"].push(token);\n        }\n      },\n\n      reassign: function(labelName, token) {\n\n        this.modify(labelName, token);\n\n        _current[\"(usages)\"][labelName][\"(reassigned)\"].push(token);\n      },\n\n      modify: function(labelName, token) {\n\n        _setupUsages(labelName);\n\n        _current[\"(usages)\"][labelName][\"(modified)\"].push(token);\n      },\n      add: function(labelName, type, tok, unused) {\n        _current[\"(labels)\"][labelName] = {\n          \"(type)\" : type,\n          \"(token)\": tok,\n          \"(blockscoped)\": true,\n          \"(unused)\": unused };\n      },\n\n      addBreakLabel: function(labelName, opts) {\n        var token = opts.token;\n        if (scopeManagerInst.funct.hasBreakLabel(labelName)) {\n          warning(\"E011\", token, labelName);\n        }\n        else if (state.option.shadow === \"outer\") {\n          if (scopeManagerInst.funct.has(labelName)) {\n            warning(\"W004\", token, labelName);\n          } else {\n            _checkOuterShadow(labelName, token);\n          }\n        }\n        _current[\"(breakLabels)\"][labelName] = token;\n      }\n    }\n  };\n  return scopeManagerInst;\n};\n\nmodule.exports = scopeManager;\n\n},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"events\":\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/state.js\":[function(_dereq_,module,exports){\n\"use strict\";\nvar NameStack = _dereq_(\"./name-stack.js\");\n\nvar state = {\n  syntax: {},\n  isStrict: function() {\n    return this.directive[\"use strict\"] || this.inClassBody ||\n      this.option.module || this.option.strict === \"implied\";\n  },\n\n  inMoz: function() {\n    return this.option.moz;\n  },\n  inES6: function() {\n    return this.option.moz || this.option.esversion >= 6;\n  },\n  inES5: function(strict) {\n    if (strict) {\n      return (!this.option.esversion || this.option.esversion === 5) && !this.option.moz;\n    }\n    return !this.option.esversion || this.option.esversion >= 5 || this.option.moz;\n  },\n\n\n  reset: function() {\n    this.tokens = {\n      prev: null,\n      next: null,\n      curr: null\n    };\n\n    this.option = {};\n    this.funct = null;\n    this.ignored = {};\n    this.directive = {};\n    this.jsonMode = false;\n    this.jsonWarnings = [];\n    this.lines = [];\n    this.tab = \"\";\n    this.cache = {}; // Node.JS doesn't have Map. Sniff.\n    this.ignoredLines = {};\n    this.forinifcheckneeded = false;\n    this.nameStack = new NameStack();\n    this.inClassBody = false;\n  }\n};\n\nexports.state = state;\n\n},{\"./name-stack.js\":\"/node_modules/jshint/src/name-stack.js\"}],\"/node_modules/jshint/src/style.js\":[function(_dereq_,module,exports){\n\"use strict\";\n\nexports.register = function(linter) {\n\n  linter.on(\"Identifier\", function style_scanProto(data) {\n    if (linter.getOption(\"proto\")) {\n      return;\n    }\n\n    if (data.name === \"__proto__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name, \"6\" ]\n      });\n    }\n  });\n\n  linter.on(\"Identifier\", function style_scanIterator(data) {\n    if (linter.getOption(\"iterator\")) {\n      return;\n    }\n\n    if (data.name === \"__iterator__\") {\n      linter.warn(\"W103\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  linter.on(\"Identifier\", function style_scanCamelCase(data) {\n    if (!linter.getOption(\"camelcase\")) {\n      return;\n    }\n\n    if (data.name.replace(/^_+|_+$/g, \"\").indexOf(\"_\") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) {\n      linter.warn(\"W106\", {\n        line: data.line,\n        char: data.from,\n        data: [ data.name ]\n      });\n    }\n  });\n\n  linter.on(\"String\", function style_scanQuotes(data) {\n    var quotmark = linter.getOption(\"quotmark\");\n    var code;\n\n    if (!quotmark) {\n      return;\n    }\n\n    if (quotmark === \"single\" && data.quote !== \"'\") {\n      code = \"W109\";\n    }\n\n    if (quotmark === \"double\" && data.quote !== \"\\\"\") {\n      code = \"W108\";\n    }\n\n    if (quotmark === true) {\n      if (!linter.getCache(\"quotmark\")) {\n        linter.setCache(\"quotmark\", data.quote);\n      }\n\n      if (linter.getCache(\"quotmark\") !== data.quote) {\n        code = \"W110\";\n      }\n    }\n\n    if (code) {\n      linter.warn(code, {\n        line: data.line,\n        char: data.char,\n      });\n    }\n  });\n\n  linter.on(\"Number\", function style_scanNumbers(data) {\n    if (data.value.charAt(0) === \".\") {\n      linter.warn(\"W008\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (data.value.substr(data.value.length - 1) === \".\") {\n      linter.warn(\"W047\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n\n    if (/^00+/.test(data.value)) {\n      linter.warn(\"W046\", {\n        line: data.line,\n        char: data.char,\n        data: [ data.value ]\n      });\n    }\n  });\n\n  linter.on(\"String\", function style_scanJavaScriptURLs(data) {\n    var re = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;\n\n    if (linter.getOption(\"scripturl\")) {\n      return;\n    }\n\n    if (re.test(data.value)) {\n      linter.warn(\"W107\", {\n        line: data.line,\n        char: data.char\n      });\n    }\n  });\n};\n\n},{}],\"/node_modules/jshint/src/vars.js\":[function(_dereq_,module,exports){\n\n\"use strict\";\n\nexports.reservedVars = {\n  arguments : false,\n  NaN       : false\n};\n\nexports.ecmaIdentifiers = {\n  3: {\n    Array              : false,\n    Boolean            : false,\n    Date               : false,\n    decodeURI          : false,\n    decodeURIComponent : false,\n    encodeURI          : false,\n    encodeURIComponent : false,\n    Error              : false,\n    \"eval\"             : false,\n    EvalError          : false,\n    Function           : false,\n    hasOwnProperty     : false,\n    isFinite           : false,\n    isNaN              : false,\n    Math               : false,\n    Number             : false,\n    Object             : false,\n    parseInt           : false,\n    parseFloat         : false,\n    RangeError         : false,\n    ReferenceError     : false,\n    RegExp             : false,\n    String             : false,\n    SyntaxError        : false,\n    TypeError          : false,\n    URIError           : false\n  },\n  5: {\n    JSON               : false\n  },\n  6: {\n    Map                : false,\n    Promise            : false,\n    Proxy              : false,\n    Reflect            : false,\n    Set                : false,\n    Symbol             : false,\n    WeakMap            : false,\n    WeakSet            : false\n  }\n};\n\nexports.browser = {\n  Audio                : false,\n  Blob                 : false,\n  addEventListener     : false,\n  applicationCache     : false,\n  atob                 : false,\n  blur                 : false,\n  btoa                 : false,\n  cancelAnimationFrame : false,\n  CanvasGradient       : false,\n  CanvasPattern        : false,\n  CanvasRenderingContext2D: false,\n  CSS                  : false,\n  clearInterval        : false,\n  clearTimeout         : false,\n  close                : false,\n  closed               : false,\n  Comment              : false,\n  CustomEvent          : false,\n  DOMParser            : false,\n  defaultStatus        : false,\n  Document             : false,\n  document             : false,\n  DocumentFragment     : false,\n  Element              : false,\n  ElementTimeControl   : false,\n  Event                : false,\n  event                : false,\n  fetch                : false,\n  FileReader           : false,\n  FormData             : false,\n  focus                : false,\n  frames               : false,\n  getComputedStyle     : false,\n  HTMLElement          : false,\n  HTMLAnchorElement    : false,\n  HTMLBaseElement      : false,\n  HTMLBlockquoteElement: false,\n  HTMLBodyElement      : false,\n  HTMLBRElement        : false,\n  HTMLButtonElement    : false,\n  HTMLCanvasElement    : false,\n  HTMLCollection       : false,\n  HTMLDirectoryElement : false,\n  HTMLDivElement       : false,\n  HTMLDListElement     : false,\n  HTMLFieldSetElement  : false,\n  HTMLFontElement      : false,\n  HTMLFormElement      : false,\n  HTMLFrameElement     : false,\n  HTMLFrameSetElement  : false,\n  HTMLHeadElement      : false,\n  HTMLHeadingElement   : false,\n  HTMLHRElement        : false,\n  HTMLHtmlElement      : false,\n  HTMLIFrameElement    : false,\n  HTMLImageElement     : false,\n  HTMLInputElement     : false,\n  HTMLIsIndexElement   : false,\n  HTMLLabelElement     : false,\n  HTMLLayerElement     : false,\n  HTMLLegendElement    : false,\n  HTMLLIElement        : false,\n  HTMLLinkElement      : false,\n  HTMLMapElement       : false,\n  HTMLMenuElement      : false,\n  HTMLMetaElement      : false,\n  HTMLModElement       : false,\n  HTMLObjectElement    : false,\n  HTMLOListElement     : false,\n  HTMLOptGroupElement  : false,\n  HTMLOptionElement    : false,\n  HTMLParagraphElement : false,\n  HTMLParamElement     : false,\n  HTMLPreElement       : false,\n  HTMLQuoteElement     : false,\n  HTMLScriptElement    : false,\n  HTMLSelectElement    : false,\n  HTMLStyleElement     : false,\n  HTMLTableCaptionElement: false,\n  HTMLTableCellElement : false,\n  HTMLTableColElement  : false,\n  HTMLTableElement     : false,\n  HTMLTableRowElement  : false,\n  HTMLTableSectionElement: false,\n  HTMLTemplateElement  : false,\n  HTMLTextAreaElement  : false,\n  HTMLTitleElement     : false,\n  HTMLUListElement     : false,\n  HTMLVideoElement     : false,\n  history              : false,\n  Image                : false,\n  Intl                 : false,\n  length               : false,\n  localStorage         : false,\n  location             : false,\n  matchMedia           : false,\n  MessageChannel       : false,\n  MessageEvent         : false,\n  MessagePort          : false,\n  MouseEvent           : false,\n  moveBy               : false,\n  moveTo               : false,\n  MutationObserver     : false,\n  name                 : false,\n  Node                 : false,\n  NodeFilter           : false,\n  NodeList             : false,\n  Notification         : false,\n  navigator            : false,\n  onbeforeunload       : true,\n  onblur               : true,\n  onerror              : true,\n  onfocus              : true,\n  onload               : true,\n  onresize             : true,\n  onunload             : true,\n  open                 : false,\n  openDatabase         : false,\n  opener               : false,\n  Option               : false,\n  parent               : false,\n  performance          : false,\n  print                : false,\n  Range                : false,\n  requestAnimationFrame : false,\n  removeEventListener  : false,\n  resizeBy             : false,\n  resizeTo             : false,\n  screen               : false,\n  scroll               : false,\n  scrollBy             : false,\n  scrollTo             : false,\n  sessionStorage       : false,\n  setInterval          : false,\n  setTimeout           : false,\n  SharedWorker         : false,\n  status               : false,\n  SVGAElement          : false,\n  SVGAltGlyphDefElement: false,\n  SVGAltGlyphElement   : false,\n  SVGAltGlyphItemElement: false,\n  SVGAngle             : false,\n  SVGAnimateColorElement: false,\n  SVGAnimateElement    : false,\n  SVGAnimateMotionElement: false,\n  SVGAnimateTransformElement: false,\n  SVGAnimatedAngle     : false,\n  SVGAnimatedBoolean   : false,\n  SVGAnimatedEnumeration: false,\n  SVGAnimatedInteger   : false,\n  SVGAnimatedLength    : false,\n  SVGAnimatedLengthList: false,\n  SVGAnimatedNumber    : false,\n  SVGAnimatedNumberList: false,\n  SVGAnimatedPathData  : false,\n  SVGAnimatedPoints    : false,\n  SVGAnimatedPreserveAspectRatio: false,\n  SVGAnimatedRect      : false,\n  SVGAnimatedString    : false,\n  SVGAnimatedTransformList: false,\n  SVGAnimationElement  : false,\n  SVGCSSRule           : false,\n  SVGCircleElement     : false,\n  SVGClipPathElement   : false,\n  SVGColor             : false,\n  SVGColorProfileElement: false,\n  SVGColorProfileRule  : false,\n  SVGComponentTransferFunctionElement: false,\n  SVGCursorElement     : false,\n  SVGDefsElement       : false,\n  SVGDescElement       : false,\n  SVGDocument          : false,\n  SVGElement           : false,\n  SVGElementInstance   : false,\n  SVGElementInstanceList: false,\n  SVGEllipseElement    : false,\n  SVGExternalResourcesRequired: false,\n  SVGFEBlendElement    : false,\n  SVGFEColorMatrixElement: false,\n  SVGFEComponentTransferElement: false,\n  SVGFECompositeElement: false,\n  SVGFEConvolveMatrixElement: false,\n  SVGFEDiffuseLightingElement: false,\n  SVGFEDisplacementMapElement: false,\n  SVGFEDistantLightElement: false,\n  SVGFEFloodElement    : false,\n  SVGFEFuncAElement    : false,\n  SVGFEFuncBElement    : false,\n  SVGFEFuncGElement    : false,\n  SVGFEFuncRElement    : false,\n  SVGFEGaussianBlurElement: false,\n  SVGFEImageElement    : false,\n  SVGFEMergeElement    : false,\n  SVGFEMergeNodeElement: false,\n  SVGFEMorphologyElement: false,\n  SVGFEOffsetElement   : false,\n  SVGFEPointLightElement: false,\n  SVGFESpecularLightingElement: false,\n  SVGFESpotLightElement: false,\n  SVGFETileElement     : false,\n  SVGFETurbulenceElement: false,\n  SVGFilterElement     : false,\n  SVGFilterPrimitiveStandardAttributes: false,\n  SVGFitToViewBox      : false,\n  SVGFontElement       : false,\n  SVGFontFaceElement   : false,\n  SVGFontFaceFormatElement: false,\n  SVGFontFaceNameElement: false,\n  SVGFontFaceSrcElement: false,\n  SVGFontFaceUriElement: false,\n  SVGForeignObjectElement: false,\n  SVGGElement          : false,\n  SVGGlyphElement      : false,\n  SVGGlyphRefElement   : false,\n  SVGGradientElement   : false,\n  SVGHKernElement      : false,\n  SVGICCColor          : false,\n  SVGImageElement      : false,\n  SVGLangSpace         : false,\n  SVGLength            : false,\n  SVGLengthList        : false,\n  SVGLineElement       : false,\n  SVGLinearGradientElement: false,\n  SVGLocatable         : false,\n  SVGMPathElement      : false,\n  SVGMarkerElement     : false,\n  SVGMaskElement       : false,\n  SVGMatrix            : false,\n  SVGMetadataElement   : false,\n  SVGMissingGlyphElement: false,\n  SVGNumber            : false,\n  SVGNumberList        : false,\n  SVGPaint             : false,\n  SVGPathElement       : false,\n  SVGPathSeg           : false,\n  SVGPathSegArcAbs     : false,\n  SVGPathSegArcRel     : false,\n  SVGPathSegClosePath  : false,\n  SVGPathSegCurvetoCubicAbs: false,\n  SVGPathSegCurvetoCubicRel: false,\n  SVGPathSegCurvetoCubicSmoothAbs: false,\n  SVGPathSegCurvetoCubicSmoothRel: false,\n  SVGPathSegCurvetoQuadraticAbs: false,\n  SVGPathSegCurvetoQuadraticRel: false,\n  SVGPathSegCurvetoQuadraticSmoothAbs: false,\n  SVGPathSegCurvetoQuadraticSmoothRel: false,\n  SVGPathSegLinetoAbs  : false,\n  SVGPathSegLinetoHorizontalAbs: false,\n  SVGPathSegLinetoHorizontalRel: false,\n  SVGPathSegLinetoRel  : false,\n  SVGPathSegLinetoVerticalAbs: false,\n  SVGPathSegLinetoVerticalRel: false,\n  SVGPathSegList       : false,\n  SVGPathSegMovetoAbs  : false,\n  SVGPathSegMovetoRel  : false,\n  SVGPatternElement    : false,\n  SVGPoint             : false,\n  SVGPointList         : false,\n  SVGPolygonElement    : false,\n  SVGPolylineElement   : false,\n  SVGPreserveAspectRatio: false,\n  SVGRadialGradientElement: false,\n  SVGRect              : false,\n  SVGRectElement       : false,\n  SVGRenderingIntent   : false,\n  SVGSVGElement        : false,\n  SVGScriptElement     : false,\n  SVGSetElement        : false,\n  SVGStopElement       : false,\n  SVGStringList        : false,\n  SVGStylable          : false,\n  SVGStyleElement      : false,\n  SVGSwitchElement     : false,\n  SVGSymbolElement     : false,\n  SVGTRefElement       : false,\n  SVGTSpanElement      : false,\n  SVGTests             : false,\n  SVGTextContentElement: false,\n  SVGTextElement       : false,\n  SVGTextPathElement   : false,\n  SVGTextPositioningElement: false,\n  SVGTitleElement      : false,\n  SVGTransform         : false,\n  SVGTransformList     : false,\n  SVGTransformable     : false,\n  SVGURIReference      : false,\n  SVGUnitTypes         : false,\n  SVGUseElement        : false,\n  SVGVKernElement      : false,\n  SVGViewElement       : false,\n  SVGViewSpec          : false,\n  SVGZoomAndPan        : false,\n  Text                 : false,\n  TextDecoder          : false,\n  TextEncoder          : false,\n  TimeEvent            : false,\n  top                  : false,\n  URL                  : false,\n  WebGLActiveInfo      : false,\n  WebGLBuffer          : false,\n  WebGLContextEvent    : false,\n  WebGLFramebuffer     : false,\n  WebGLProgram         : false,\n  WebGLRenderbuffer    : false,\n  WebGLRenderingContext: false,\n  WebGLShader          : false,\n  WebGLShaderPrecisionFormat: false,\n  WebGLTexture         : false,\n  WebGLUniformLocation : false,\n  WebSocket            : false,\n  window               : false,\n  Window               : false,\n  Worker               : false,\n  XDomainRequest       : false,\n  XMLHttpRequest       : false,\n  XMLSerializer        : false,\n  XPathEvaluator       : false,\n  XPathException       : false,\n  XPathExpression      : false,\n  XPathNamespace       : false,\n  XPathNSResolver      : false,\n  XPathResult          : false\n};\n\nexports.devel = {\n  alert  : false,\n  confirm: false,\n  console: false,\n  Debug  : false,\n  opera  : false,\n  prompt : false\n};\n\nexports.worker = {\n  importScripts  : true,\n  postMessage    : true,\n  self           : true,\n  FileReaderSync : true\n};\nexports.nonstandard = {\n  escape  : false,\n  unescape: false\n};\n\nexports.couch = {\n  \"require\" : false,\n  respond   : false,\n  getRow    : false,\n  emit      : false,\n  send      : false,\n  start     : false,\n  sum       : false,\n  log       : false,\n  exports   : false,\n  module    : false,\n  provides  : false\n};\n\nexports.node = {\n  __filename    : false,\n  __dirname     : false,\n  GLOBAL        : false,\n  global        : false,\n  module        : false,\n  require       : false,\n\n  Buffer        : true,\n  console       : true,\n  exports       : true,\n  process       : true,\n  setTimeout    : true,\n  clearTimeout  : true,\n  setInterval   : true,\n  clearInterval : true,\n  setImmediate  : true, // v0.9.1+\n  clearImmediate: true  // v0.9.1+\n};\n\nexports.browserify = {\n  __filename    : false,\n  __dirname     : false,\n  global        : false,\n  module        : false,\n  require       : false,\n  Buffer        : true,\n  exports       : true,\n  process       : true\n};\n\nexports.phantom = {\n  phantom      : true,\n  require      : true,\n  WebPage      : true,\n  console      : true, // in examples, but undocumented\n  exports      : true  // v1.7+\n};\n\nexports.qunit = {\n  asyncTest      : false,\n  deepEqual      : false,\n  equal          : false,\n  expect         : false,\n  module         : false,\n  notDeepEqual   : false,\n  notEqual       : false,\n  notPropEqual   : false,\n  notStrictEqual : false,\n  ok             : false,\n  propEqual      : false,\n  QUnit          : false,\n  raises         : false,\n  start          : false,\n  stop           : false,\n  strictEqual    : false,\n  test           : false,\n  \"throws\"       : false\n};\n\nexports.rhino = {\n  defineClass  : false,\n  deserialize  : false,\n  gc           : false,\n  help         : false,\n  importClass  : false,\n  importPackage: false,\n  \"java\"       : false,\n  load         : false,\n  loadClass    : false,\n  Packages     : false,\n  print        : false,\n  quit         : false,\n  readFile     : false,\n  readUrl      : false,\n  runCommand   : false,\n  seal         : false,\n  serialize    : false,\n  spawn        : false,\n  sync         : false,\n  toint32      : false,\n  version      : false\n};\n\nexports.shelljs = {\n  target       : false,\n  echo         : false,\n  exit         : false,\n  cd           : false,\n  pwd          : false,\n  ls           : false,\n  find         : false,\n  cp           : false,\n  rm           : false,\n  mv           : false,\n  mkdir        : false,\n  test         : false,\n  cat          : false,\n  sed          : false,\n  grep         : false,\n  which        : false,\n  dirs         : false,\n  pushd        : false,\n  popd         : false,\n  env          : false,\n  exec         : false,\n  chmod        : false,\n  config       : false,\n  error        : false,\n  tempdir      : false\n};\n\nexports.typed = {\n  ArrayBuffer         : false,\n  ArrayBufferView     : false,\n  DataView            : false,\n  Float32Array        : false,\n  Float64Array        : false,\n  Int16Array          : false,\n  Int32Array          : false,\n  Int8Array           : false,\n  Uint16Array         : false,\n  Uint32Array         : false,\n  Uint8Array          : false,\n  Uint8ClampedArray   : false\n};\n\nexports.wsh = {\n  ActiveXObject            : true,\n  Enumerator               : true,\n  GetObject                : true,\n  ScriptEngine             : true,\n  ScriptEngineBuildVersion : true,\n  ScriptEngineMajorVersion : true,\n  ScriptEngineMinorVersion : true,\n  VBArray                  : true,\n  WSH                      : true,\n  WScript                  : true,\n  XDomainRequest           : true\n};\n\nexports.dojo = {\n  dojo     : false,\n  dijit    : false,\n  dojox    : false,\n  define   : false,\n  \"require\": false\n};\n\nexports.jquery = {\n  \"$\"    : false,\n  jQuery : false\n};\n\nexports.mootools = {\n  \"$\"           : false,\n  \"$$\"          : false,\n  Asset         : false,\n  Browser       : false,\n  Chain         : false,\n  Class         : false,\n  Color         : false,\n  Cookie        : false,\n  Core          : false,\n  Document      : false,\n  DomReady      : false,\n  DOMEvent      : false,\n  DOMReady      : false,\n  Drag          : false,\n  Element       : false,\n  Elements      : false,\n  Event         : false,\n  Events        : false,\n  Fx            : false,\n  Group         : false,\n  Hash          : false,\n  HtmlTable     : false,\n  IFrame        : false,\n  IframeShim    : false,\n  InputValidator: false,\n  instanceOf    : false,\n  Keyboard      : false,\n  Locale        : false,\n  Mask          : false,\n  MooTools      : false,\n  Native        : false,\n  Options       : false,\n  OverText      : false,\n  Request       : false,\n  Scroller      : false,\n  Slick         : false,\n  Slider        : false,\n  Sortables     : false,\n  Spinner       : false,\n  Swiff         : false,\n  Tips          : false,\n  Type          : false,\n  typeOf        : false,\n  URI           : false,\n  Window        : false\n};\n\nexports.prototypejs = {\n  \"$\"               : false,\n  \"$$\"              : false,\n  \"$A\"              : false,\n  \"$F\"              : false,\n  \"$H\"              : false,\n  \"$R\"              : false,\n  \"$break\"          : false,\n  \"$continue\"       : false,\n  \"$w\"              : false,\n  Abstract          : false,\n  Ajax              : false,\n  Class             : false,\n  Enumerable        : false,\n  Element           : false,\n  Event             : false,\n  Field             : false,\n  Form              : false,\n  Hash              : false,\n  Insertion         : false,\n  ObjectRange       : false,\n  PeriodicalExecuter: false,\n  Position          : false,\n  Prototype         : false,\n  Selector          : false,\n  Template          : false,\n  Toggle            : false,\n  Try               : false,\n  Autocompleter     : false,\n  Builder           : false,\n  Control           : false,\n  Draggable         : false,\n  Draggables        : false,\n  Droppables        : false,\n  Effect            : false,\n  Sortable          : false,\n  SortableObserver  : false,\n  Sound             : false,\n  Scriptaculous     : false\n};\n\nexports.yui = {\n  YUI       : false,\n  Y         : false,\n  YUI_config: false\n};\n\nexports.mocha = {\n  mocha       : false,\n  describe    : false,\n  xdescribe   : false,\n  it          : false,\n  xit         : false,\n  context     : false,\n  xcontext    : false,\n  before      : false,\n  after       : false,\n  beforeEach  : false,\n  afterEach   : false,\n  suite         : false,\n  test          : false,\n  setup         : false,\n  teardown      : false,\n  suiteSetup    : false,\n  suiteTeardown : false\n};\n\nexports.jasmine = {\n  jasmine     : false,\n  describe    : false,\n  xdescribe   : false,\n  it          : false,\n  xit         : false,\n  beforeEach  : false,\n  afterEach   : false,\n  setFixtures : false,\n  loadFixtures: false,\n  spyOn       : false,\n  expect      : false,\n  runs        : false,\n  waitsFor    : false,\n  waits       : false,\n  beforeAll   : false,\n  afterAll    : false,\n  fail        : false,\n  fdescribe   : false,\n  fit         : false,\n  pending     : false\n};\n\n},{}]},{},[\"/node_modules/jshint/src/jshint.js\"]);\n\n});\n\nace.define(\"ace/mode/javascript_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/javascript/jshint\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar lint = require(\"./javascript/jshint\").JSHINT;\n\nfunction startRegex(arr) {\n    return RegExp(\"^(\" + arr.join(\"|\") + \")\");\n}\n\nvar disabledWarningsRe = startRegex([\n    \"Bad for in variable '(.+)'.\",\n    'Missing \"use strict\"'\n]);\nvar errorsRe = startRegex([\n    \"Unexpected\",\n    \"Expected \",\n    \"Confusing (plus|minus)\",\n    \"\\\\{a\\\\} unterminated regular expression\",\n    \"Unclosed \",\n    \"Unmatched \",\n    \"Unbegun comment\",\n    \"Bad invocation\",\n    \"Missing space after\",\n    \"Missing operator at\"\n]);\nvar infoRe = startRegex([\n    \"Expected an assignment\",\n    \"Bad escapement of EOL\",\n    \"Unexpected comma\",\n    \"Unexpected space\",\n    \"Missing radix parameter.\",\n    \"A leading decimal point can\",\n    \"\\\\['{a}'\\\\] is better written in dot notation.\",\n    \"'{a}' used out of scope\"\n]);\n\nvar JavaScriptWorker = exports.JavaScriptWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n    this.setOptions();\n};\n\noop.inherits(JavaScriptWorker, Mirror);\n\n(function() {\n    this.setOptions = function(options) {\n        this.options = options || {\n            esnext: true,\n            moz: true,\n            devel: true,\n            browser: true,\n            node: true,\n            laxcomma: true,\n            laxbreak: true,\n            lastsemic: true,\n            onevar: false,\n            passfail: false,\n            maxerr: 100,\n            expr: true,\n            multistr: true,\n            globalstrict: true\n        };\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.changeOptions = function(newOptions) {\n        oop.mixin(this.options, newOptions);\n        this.doc.getValue() && this.deferredUpdate.schedule(100);\n    };\n\n    this.isValidJS = function(str) {\n        try {\n            eval(\"throw 0;\" + str);\n        } catch(e) {\n            if (e === 0)\n                return true;\n        }\n        return false\n    };\n\n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        value = value.replace(/^#!.*\\n/, \"\\n\");\n        if (!value)\n            return this.sender.emit(\"annotate\", []);\n\n        var errors = [];\n        var maxErrorLevel = this.isValidJS(value) ? \"warning\" : \"error\";\n        lint(value, this.options);\n        var results = lint.errors;\n\n        var errorAdded = false\n        for (var i = 0; i < results.length; i++) {\n            var error = results[i];\n            if (!error)\n                continue;\n            var raw = error.raw;\n            var type = \"warning\";\n\n            if (raw == \"Missing semicolon.\") {\n                var str = error.evidence.substr(error.character);\n                str = str.charAt(str.search(/\\S/));\n                if (maxErrorLevel == \"error\" && str && /[\\w\\d{(['\"]/.test(str)) {\n                    error.reason = 'Missing \";\" before statement';\n                    type = \"error\";\n                } else {\n                    type = \"info\";\n                }\n            }\n            else if (disabledWarningsRe.test(raw)) {\n                continue;\n            }\n            else if (infoRe.test(raw)) {\n                type = \"info\"\n            }\n            else if (errorsRe.test(raw)) {\n                errorAdded  = true;\n                type = maxErrorLevel;\n            }\n            else if (raw == \"'{a}' is not defined.\") {\n                type = \"warning\";\n            }\n            else if (raw == \"'{a}' is defined but never used.\") {\n                type = \"info\";\n            }\n\n            errors.push({\n                row: error.line-1,\n                column: error.character-1,\n                text: error.reason,\n                type: type,\n                raw: raw\n            });\n\n            if (errorAdded) {\n            }\n        }\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(JavaScriptWorker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-php.js",
    "content": "\"no use strict\";\n;(function(window) {\nif (typeof window.window != \"undefined\" && window.document)\n    return;\nif (window.require && window.define)\n    return;\n\nif (!window.console) {\n    window.console = function() {\n        var msgs = Array.prototype.slice.call(arguments, 0);\n        postMessage({type: \"log\", data: msgs});\n    };\n    window.console.error =\n    window.console.warn = \n    window.console.log =\n    window.console.trace = window.console;\n}\nwindow.window = window;\nwindow.ace = window;\n\nwindow.onerror = function(message, file, line, col, err) {\n    postMessage({type: \"error\", data: {\n        message: message,\n        data: err.data,\n        file: file,\n        line: line, \n        col: col,\n        stack: err.stack\n    }});\n};\n\nwindow.normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return window.normalizeModule(parentId, chunks[0]) + \"!\" + window.normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = (base ? base + \"/\" : \"\") + moduleName;\n        \n        while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/^\\.\\//, \"\").replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    \n    return moduleName;\n};\n\nwindow.require = function require(parentId, id) {\n    if (!id) {\n        id = parentId;\n        parentId = null;\n    }\n    if (!id.charAt)\n        throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");\n\n    id = window.normalizeModule(parentId, id);\n\n    var module = window.require.modules[id];\n    if (module) {\n        if (!module.initialized) {\n            module.initialized = true;\n            module.exports = module.factory().exports;\n        }\n        return module.exports;\n    }\n   \n    if (!window.require.tlns)\n        return console.log(\"unable to load \" + id);\n    \n    var path = resolveModuleId(id, window.require.tlns);\n    if (path.slice(-3) != \".js\") path += \".js\";\n    \n    window.require.id = id;\n    window.require.modules[id] = {}; // prevent infinite loop on broken modules\n    importScripts(path);\n    return window.require(parentId, id);\n};\nfunction resolveModuleId(id, paths) {\n    var testPath = id, tail = \"\";\n    while (testPath) {\n        var alias = paths[testPath];\n        if (typeof alias == \"string\") {\n            return alias + tail;\n        } else if (alias) {\n            return  alias.location.replace(/\\/*$/, \"/\") + (tail || alias.main || alias.name);\n        } else if (alias === false) {\n            return \"\";\n        }\n        var i = testPath.lastIndexOf(\"/\");\n        if (i === -1) break;\n        tail = testPath.substr(i) + tail;\n        testPath = testPath.slice(0, i);\n    }\n    return id;\n}\nwindow.require.modules = {};\nwindow.require.tlns = {};\n\nwindow.define = function(id, deps, factory) {\n    if (arguments.length == 2) {\n        factory = deps;\n        if (typeof id != \"string\") {\n            deps = id;\n            id = window.require.id;\n        }\n    } else if (arguments.length == 1) {\n        factory = id;\n        deps = [];\n        id = window.require.id;\n    }\n    \n    if (typeof factory != \"function\") {\n        window.require.modules[id] = {\n            exports: factory,\n            initialized: true\n        };\n        return;\n    }\n\n    if (!deps.length)\n        // If there is no dependencies, we inject \"require\", \"exports\" and\n        // \"module\" as dependencies, to provide CommonJS compatibility.\n        deps = [\"require\", \"exports\", \"module\"];\n\n    var req = function(childId) {\n        return window.require(id, childId);\n    };\n\n    window.require.modules[id] = {\n        exports: {},\n        factory: function() {\n            var module = this;\n            var returnExports = factory.apply(this, deps.map(function(dep) {\n                switch (dep) {\n                    // Because \"require\", \"exports\" and \"module\" aren't actual\n                    // dependencies, we must handle them seperately.\n                    case \"require\": return req;\n                    case \"exports\": return module.exports;\n                    case \"module\":  return module;\n                    // But for all other dependencies, we can just go ahead and\n                    // require them.\n                    default:        return req(dep);\n                }\n            }));\n            if (returnExports)\n                module.exports = returnExports;\n            return module;\n        }\n    };\n};\nwindow.define.amd = {};\nrequire.tlns = {};\nwindow.initBaseUrls  = function initBaseUrls(topLevelNamespaces) {\n    for (var i in topLevelNamespaces)\n        require.tlns[i] = topLevelNamespaces[i];\n};\n\nwindow.initSender = function initSender() {\n\n    var EventEmitter = window.require(\"ace/lib/event_emitter\").EventEmitter;\n    var oop = window.require(\"ace/lib/oop\");\n    \n    var Sender = function() {};\n    \n    (function() {\n        \n        oop.implement(this, EventEmitter);\n                \n        this.callback = function(data, callbackId) {\n            postMessage({\n                type: \"call\",\n                id: callbackId,\n                data: data\n            });\n        };\n    \n        this.emit = function(name, data) {\n            postMessage({\n                type: \"event\",\n                name: name,\n                data: data\n            });\n        };\n        \n    }).call(Sender.prototype);\n    \n    return new Sender();\n};\n\nvar main = window.main = null;\nvar sender = window.sender = null;\n\nwindow.onmessage = function(e) {\n    var msg = e.data;\n    if (msg.event && sender) {\n        sender._signal(msg.event, msg.data);\n    }\n    else if (msg.command) {\n        if (main[msg.command])\n            main[msg.command].apply(main, msg.args);\n        else if (window[msg.command])\n            window[msg.command].apply(window, msg.args);\n        else\n            throw new Error(\"Unknown command:\" + msg.command);\n    }\n    else if (msg.init) {\n        window.initBaseUrls(msg.tlns);\n        require(\"ace/lib/es5-shim\");\n        sender = window.sender = window.initSender();\n        var clazz = require(msg.module)[msg.classname];\n        main = window.main = new clazz(sender);\n    }\n};\n})(this);\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.inherits = function(ctor, superCtor) {\n    ctor.super_ = superCtor;\n    ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n            value: ctor,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n};\n\nexports.mixin = function(obj, mixin) {\n    for (var key in mixin) {\n        obj[key] = mixin[key];\n    }\n    return obj;\n};\n\nexports.implement = function(proto, mixin) {\n    exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n\n(function() {\n    this.isEqual = function(range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function() {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n\n    this.contains = function(row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function(range) {\n        var cmp,\n            end = range.end,\n            start = range.start;\n\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            } else if (cmp == 0) {\n                return 1;\n            } else {\n                return 0;\n            }\n        } else if (cmp == -1) {\n            return -2;\n        } else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            } else if (cmp == 1) {\n                return 42;\n            } else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function(p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function(range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function(range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function(row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function(row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function(row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        } else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function(row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        } else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function(row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            } else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function(row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n\n        if (row < this.start.row)\n            return -1;\n\n        if (row > this.end.row)\n            return 1;\n\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n\n        return 0;\n    };\n    this.compareStart = function(row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function(row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        } else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        } else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function(firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = {row: lastRow + 1, column: 0};\n        else if (this.end.row < firstRow)\n            var end = {row: firstRow, column: 0};\n\n        if (this.start.row > lastRow)\n            var start = {row: lastRow + 1, column: 0};\n        else if (this.start.row < firstRow)\n            var start = {row: firstRow, column: 0};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function(row, column) {\n        var cmp = this.compare(row, column);\n\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = {row: row, column: column};\n        else\n            var end = {row: row, column: column};\n\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n\n    this.isEmpty = function() {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function() {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function() {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function() {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0)\n        else\n            return new Range(this.start.row, 0, this.end.row, 0)\n    };\n    this.toScreenRange = function(session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n\n        return new Range(\n            screenPosStart.row, screenPosStart.column,\n            screenPosEnd.row, screenPosEnd.column\n        );\n    };\n    this.moveBy = function(row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n    console.log(\"Invalid Delta:\", delta);\n    throw \"Invalid Delta: \" + errorText;\n}\n\nfunction positionInDocument(docLines, position) {\n    return position.row    >= 0 && position.row    <  docLines.length &&\n           position.column >= 0 && position.column <= docLines[position.row].length;\n}\n\nfunction validateDelta(docLines, delta) {\n    if (delta.action != \"insert\" && delta.action != \"remove\")\n        throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n    if (!(delta.lines instanceof Array))\n        throwDeltaError(delta, \"delta.lines must be an Array\");\n    if (!delta.start || !delta.end)\n       throwDeltaError(delta, \"delta.start/end must be an present\");\n    var start = delta.start;\n    if (!positionInDocument(docLines, delta.start))\n        throwDeltaError(delta, \"delta.start must be contained in document\");\n    var end = delta.end;\n    if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n        throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n    var numRangeRows = end.row - start.row;\n    var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n    if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n        throwDeltaError(delta, \"delta.range must match delta lines\");\n}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n    \n    var row = delta.start.row;\n    var startColumn = delta.start.column;\n    var line = docLines[row] || \"\";\n    switch (delta.action) {\n        case \"insert\":\n            var lines = delta.lines;\n            if (lines.length === 1) {\n                docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n            } else {\n                var args = [row, 1].concat(delta.lines);\n                docLines.splice.apply(docLines, args);\n                docLines[row] = line.substring(0, startColumn) + docLines[row];\n                docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n            }\n            break;\n        case \"remove\":\n            var endColumn = delta.end.column;\n            var endRow = delta.end.row;\n            if (row === endRow) {\n                docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n            } else {\n                docLines.splice(\n                    row, endRow - row + 1,\n                    line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n                );\n            }\n            break;\n    }\n}\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n    this._eventRegistry || (this._eventRegistry = {});\n    this._defaultHandlers || (this._defaultHandlers = {});\n\n    var listeners = this._eventRegistry[eventName] || [];\n    var defaultHandler = this._defaultHandlers[eventName];\n    if (!listeners.length && !defaultHandler)\n        return;\n\n    if (typeof e != \"object\" || !e)\n        e = {};\n\n    if (!e.type)\n        e.type = eventName;\n    if (!e.stopPropagation)\n        e.stopPropagation = stopPropagation;\n    if (!e.preventDefault)\n        e.preventDefault = preventDefault;\n\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++) {\n        listeners[i](e, this);\n        if (e.propagationStopped)\n            break;\n    }\n    \n    if (defaultHandler && !e.defaultPrevented)\n        return defaultHandler(e, this);\n};\n\n\nEventEmitter._signal = function(eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i=0; i<listeners.length; i++)\n        listeners[i](e, this);\n};\n\nEventEmitter.once = function(eventName, callback) {\n    var _self = this;\n    callback && this.addEventListener(eventName, function newCallback() {\n        _self.removeEventListener(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        handlers = this._defaultHandlers = {_disabled_: {}};\n    \n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1) \n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function(eventName, callback) {\n    var handlers = this._defaultHandlers\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    \n    if (handlers[eventName] == callback) {\n        var old = handlers[eventName];\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    } else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        listeners = this._eventRegistry[eventName] = [];\n\n    if (listeners.indexOf(callback) == -1)\n        listeners[capturing ? \"unshift\" : \"push\"](callback);\n    return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n    this._eventRegistry = this._eventRegistry || {};\n\n    var listeners = this._eventRegistry[eventName];\n    if (!listeners)\n        return;\n\n    var index = listeners.indexOf(callback);\n    if (index !== -1)\n        listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n    if (this._eventRegistry) this._eventRegistry[eventName] = [];\n};\n\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n    this.$onChange = this.onChange.bind(this);\n    this.attach(doc);\n    \n    if (typeof column == \"undefined\")\n        this.setPosition(row.row, row.column);\n    else\n        this.setPosition(row, column);\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.getPosition = function() {\n        return this.$clipPositionToDocument(this.row, this.column);\n    };\n    this.getDocument = function() {\n        return this.document;\n    };\n    this.$insertRight = false;\n    this.onChange = function(delta) {\n        if (delta.start.row == delta.end.row && delta.start.row != this.row)\n            return;\n\n        if (delta.start.row > this.row)\n            return;\n            \n        var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n        this.setPosition(point.row, point.column, true);\n    };\n    \n    function $pointsInOrder(point1, point2, equalPointsInOrder) {\n        var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n        return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n    }\n            \n    function $getTransformedPoint(delta, point, moveIfEqual) {\n        var deltaIsInsert = delta.action == \"insert\";\n        var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row    - delta.start.row);\n        var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n        var deltaStart = delta.start;\n        var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n        if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n            return {\n                row: point.row,\n                column: point.column\n            };\n        }\n        if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n            return {\n                row: point.row + deltaRowShift,\n                column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n            };\n        }\n        \n        return {\n            row: deltaStart.row,\n            column: deltaStart.column\n        };\n    }\n    this.setPosition = function(row, column, noClip) {\n        var pos;\n        if (noClip) {\n            pos = {\n                row: row,\n                column: column\n            };\n        } else {\n            pos = this.$clipPositionToDocument(row, column);\n        }\n\n        if (this.row == pos.row && this.column == pos.column)\n            return;\n\n        var old = {\n            row: this.row,\n            column: this.column\n        };\n\n        this.row = pos.row;\n        this.column = pos.column;\n        this._signal(\"change\", {\n            old: old,\n            value: pos\n        });\n    };\n    this.detach = function() {\n        this.document.removeEventListener(\"change\", this.$onChange);\n    };\n    this.attach = function(doc) {\n        this.document = doc || this.document;\n        this.document.on(\"change\", this.$onChange);\n    };\n    this.$clipPositionToDocument = function(row, column) {\n        var pos = {};\n\n        if (row >= this.document.getLength()) {\n            pos.row = Math.max(0, this.document.getLength() - 1);\n            pos.column = this.document.getLine(pos.row).length;\n        }\n        else if (row < 0) {\n            pos.row = 0;\n            pos.column = 0;\n        }\n        else {\n            pos.row = row;\n            pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n        }\n\n        if (column < 0)\n            pos.column = 0;\n\n        return pos;\n    };\n\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\n\nvar Document = function(textOrLines) {\n    this.$lines = [\"\"];\n    if (textOrLines.length === 0) {\n        this.$lines = [\"\"];\n    } else if (Array.isArray(textOrLines)) {\n        this.insertMergedLines({row: 0, column: 0}, textOrLines);\n    } else {\n        this.insert({row: 0, column:0}, textOrLines);\n    }\n};\n\n(function() {\n\n    oop.implement(this, EventEmitter);\n    this.setValue = function(text) {\n        var len = this.getLength() - 1;\n        this.remove(new Range(0, 0, len, this.getLine(len).length));\n        this.insert({row: 0, column: 0}, text);\n    };\n    this.getValue = function() {\n        return this.getAllLines().join(this.getNewLineCharacter());\n    };\n    this.createAnchor = function(row, column) {\n        return new Anchor(this, row, column);\n    };\n    if (\"aaa\".split(/a/).length === 0) {\n        this.$split = function(text) {\n            return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n        };\n    } else {\n        this.$split = function(text) {\n            return text.split(/\\r\\n|\\r|\\n/);\n        };\n    }\n\n\n    this.$detectNewLine = function(text) {\n        var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n        this.$autoNewLine = match ? match[1] : \"\\n\";\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineCharacter = function() {\n        switch (this.$newLineMode) {\n          case \"windows\":\n            return \"\\r\\n\";\n          case \"unix\":\n            return \"\\n\";\n          default:\n            return this.$autoNewLine || \"\\n\";\n        }\n    };\n\n    this.$autoNewLine = \"\";\n    this.$newLineMode = \"auto\";\n    this.setNewLineMode = function(newLineMode) {\n        if (this.$newLineMode === newLineMode)\n            return;\n\n        this.$newLineMode = newLineMode;\n        this._signal(\"changeNewLineMode\");\n    };\n    this.getNewLineMode = function() {\n        return this.$newLineMode;\n    };\n    this.isNewLine = function(text) {\n        return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n    };\n    this.getLine = function(row) {\n        return this.$lines[row] || \"\";\n    };\n    this.getLines = function(firstRow, lastRow) {\n        return this.$lines.slice(firstRow, lastRow + 1);\n    };\n    this.getAllLines = function() {\n        return this.getLines(0, this.getLength());\n    };\n    this.getLength = function() {\n        return this.$lines.length;\n    };\n    this.getTextRange = function(range) {\n        return this.getLinesForRange(range).join(this.getNewLineCharacter());\n    };\n    this.getLinesForRange = function(range) {\n        var lines;\n        if (range.start.row === range.end.row) {\n            lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n        } else {\n            lines = this.getLines(range.start.row, range.end.row);\n            lines[0] = (lines[0] || \"\").substring(range.start.column);\n            var l = lines.length - 1;\n            if (range.end.row - range.start.row == l)\n                lines[l] = lines[l].substring(0, range.end.column);\n        }\n        return lines;\n    };\n    this.insertLines = function(row, lines) {\n        console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n        return this.insertFullLines(row, lines);\n    };\n    this.removeLines = function(firstRow, lastRow) {\n        console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n        return this.removeFullLines(firstRow, lastRow);\n    };\n    this.insertNewLine = function(position) {\n        console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\\'\\', \\'\\']) instead.\");\n        return this.insertMergedLines(position, [\"\", \"\"]);\n    };\n    this.insert = function(position, text) {\n        if (this.getLength() <= 1)\n            this.$detectNewLine(text);\n        \n        return this.insertMergedLines(position, this.$split(text));\n    };\n    this.insertInLine = function(position, text) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = this.pos(position.row, position.column + text.length);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: [text]\n        }, true);\n        \n        return this.clonePos(end);\n    };\n    \n    this.clippedPos = function(row, column) {\n        var length = this.getLength();\n        if (row === undefined) {\n            row = length;\n        } else if (row < 0) {\n            row = 0;\n        } else if (row >= length) {\n            row = length - 1;\n            column = undefined;\n        }\n        var line = this.getLine(row);\n        if (column == undefined)\n            column = line.length;\n        column = Math.min(Math.max(column, 0), line.length);\n        return {row: row, column: column};\n    };\n    \n    this.clonePos = function(pos) {\n        return {row: pos.row, column: pos.column};\n    };\n    \n    this.pos = function(row, column) {\n        return {row: row, column: column};\n    };\n    \n    this.$clipPosition = function(position) {\n        var length = this.getLength();\n        if (position.row >= length) {\n            position.row = Math.max(0, length - 1);\n            position.column = this.getLine(length - 1).length;\n        } else {\n            position.row = Math.max(0, position.row);\n            position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n        }\n        return position;\n    };\n    this.insertFullLines = function(row, lines) {\n        row = Math.min(Math.max(row, 0), this.getLength());\n        var column = 0;\n        if (row < this.getLength()) {\n            lines = lines.concat([\"\"]);\n            column = 0;\n        } else {\n            lines = [\"\"].concat(lines);\n            row--;\n            column = this.$lines[row].length;\n        }\n        this.insertMergedLines({row: row, column: column}, lines);\n    };    \n    this.insertMergedLines = function(position, lines) {\n        var start = this.clippedPos(position.row, position.column);\n        var end = {\n            row: start.row + lines.length - 1,\n            column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n        };\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"insert\",\n            lines: lines\n        });\n        \n        return this.clonePos(end);\n    };\n    this.remove = function(range) {\n        var start = this.clippedPos(range.start.row, range.start.column);\n        var end = this.clippedPos(range.end.row, range.end.column);\n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        });\n        return this.clonePos(start);\n    };\n    this.removeInLine = function(row, startColumn, endColumn) {\n        var start = this.clippedPos(row, startColumn);\n        var end = this.clippedPos(row, endColumn);\n        \n        this.applyDelta({\n            start: start,\n            end: end,\n            action: \"remove\",\n            lines: this.getLinesForRange({start: start, end: end})\n        }, true);\n        \n        return this.clonePos(start);\n    };\n    this.removeFullLines = function(firstRow, lastRow) {\n        firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n        lastRow  = Math.min(Math.max(0, lastRow ), this.getLength() - 1);\n        var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n        var deleteLastNewLine  = lastRow  < this.getLength() - 1;\n        var startRow = ( deleteFirstNewLine ? firstRow - 1                  : firstRow                    );\n        var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0                           );\n        var endRow   = ( deleteLastNewLine  ? lastRow + 1                   : lastRow                     );\n        var endCol   = ( deleteLastNewLine  ? 0                             : this.getLine(endRow).length ); \n        var range = new Range(startRow, startCol, endRow, endCol);\n        var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n        \n        this.applyDelta({\n            start: range.start,\n            end: range.end,\n            action: \"remove\",\n            lines: this.getLinesForRange(range)\n        });\n        return deletedLines;\n    };\n    this.removeNewLine = function(row) {\n        if (row < this.getLength() - 1 && row >= 0) {\n            this.applyDelta({\n                start: this.pos(row, this.getLine(row).length),\n                end: this.pos(row + 1, 0),\n                action: \"remove\",\n                lines: [\"\", \"\"]\n            });\n        }\n    };\n    this.replace = function(range, text) {\n        if (!(range instanceof Range))\n            range = Range.fromPoints(range.start, range.end);\n        if (text.length === 0 && range.isEmpty())\n            return range.start;\n        if (text == this.getTextRange(range))\n            return range.end;\n\n        this.remove(range);\n        var end;\n        if (text) {\n            end = this.insert(range.start, text);\n        }\n        else {\n            end = range.start;\n        }\n        \n        return end;\n    };\n    this.applyDeltas = function(deltas) {\n        for (var i=0; i<deltas.length; i++) {\n            this.applyDelta(deltas[i]);\n        }\n    };\n    this.revertDeltas = function(deltas) {\n        for (var i=deltas.length-1; i>=0; i--) {\n            this.revertDelta(deltas[i]);\n        }\n    };\n    this.applyDelta = function(delta, doNotValidate) {\n        var isInsert = delta.action == \"insert\";\n        if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n            : !Range.comparePoints(delta.start, delta.end)) {\n            return;\n        }\n        \n        if (isInsert && delta.lines.length > 20000)\n            this.$splitAndapplyLargeDelta(delta, 20000);\n        applyDelta(this.$lines, delta, doNotValidate);\n        this._signal(\"change\", delta);\n    };\n    \n    this.$splitAndapplyLargeDelta = function(delta, MAX) {\n        var lines = delta.lines;\n        var l = lines.length;\n        var row = delta.start.row; \n        var column = delta.start.column;\n        var from = 0, to = 0;\n        do {\n            from = to;\n            to += MAX - 1;\n            var chunk = lines.slice(from, to);\n            if (to > l) {\n                delta.lines = chunk;\n                delta.start.row = row + from;\n                delta.start.column = column;\n                break;\n            }\n            chunk.push(\"\");\n            this.applyDelta({\n                start: this.pos(row + from, column),\n                end: this.pos(row + to, column = 0),\n                action: delta.action,\n                lines: chunk\n            }, true);\n        } while(true);\n    };\n    this.revertDelta = function(delta) {\n        this.applyDelta({\n            start: this.clonePos(delta.start),\n            end: this.clonePos(delta.end),\n            action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n            lines: delta.lines.slice()\n        });\n    };\n    this.indexToPosition = function(index, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        for (var i = startRow || 0, l = lines.length; i < l; i++) {\n            index -= lines[i].length + newlineLength;\n            if (index < 0)\n                return {row: i, column: index + lines[i].length + newlineLength};\n        }\n        return {row: l-1, column: lines[l-1].length};\n    };\n    this.positionToIndex = function(pos, startRow) {\n        var lines = this.$lines || this.getAllLines();\n        var newlineLength = this.getNewLineCharacter().length;\n        var index = 0;\n        var row = Math.min(pos.row, lines.length);\n        for (var i = startRow || 0; i < row; ++i)\n            index += lines[i].length + newlineLength;\n\n        return index + pos.column;\n    };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n    return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n    return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\n\nexports.copyArray = function(array){\n    var copy = [];\n    for (var i=0, l=array.length; i<l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject( array[i] );\n        else \n            copy[i] = array[i];\n    }\n    return copy;\n};\n\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    var cons = obj.constructor;\n    if (cons === RegExp)\n        return obj;\n    \n    copy = cons();\n    for (var key in obj) {\n        copy[key] = deepCopy(obj[key]);\n    }\n    return copy;\n};\n\nexports.arrayToMap = function(arr) {\n    var map = {};\n    for (var i=0; i<arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n\n};\n\nexports.createMap = function(props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function(array, value) {\n  for (var i = 0; i <= array.length; i++) {\n    if (value === array[i]) {\n      array.splice(i, 1);\n    }\n  }\n};\n\nexports.escapeRegExp = function(str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n    return str.replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n    var matches = [];\n\n    string.replace(regExp, function(str) {\n        matches.push({\n            offset: arguments[arguments.length-2],\n            length: str.length\n        });\n    });\n\n    return matches;\n};\nexports.deferredCall = function(fcn) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var deferred = function(timeout) {\n        deferred.cancel();\n        timer = setTimeout(callback, timeout || 0);\n        return deferred;\n    };\n\n    deferred.schedule = deferred;\n\n    deferred.call = function() {\n        this.cancel();\n        fcn();\n        return deferred;\n    };\n\n    deferred.cancel = function() {\n        clearTimeout(timer);\n        timer = null;\n        return deferred;\n    };\n    \n    deferred.isPending = function() {\n        return timer;\n    };\n\n    return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n    var timer = null;\n    var callback = function() {\n        timer = null;\n        fcn();\n    };\n\n    var _self = function(timeout) {\n        if (timer == null)\n            timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n\n    _self.delay = function(timeout) {\n        timer && clearTimeout(timer);\n        timer = setTimeout(callback, timeout || defaultTimeout);\n    };\n    _self.schedule = _self;\n\n    _self.call = function() {\n        this.cancel();\n        fcn();\n    };\n\n    _self.cancel = function() {\n        timer && clearTimeout(timer);\n        timer = null;\n    };\n\n    _self.isPending = function() {\n        return timer;\n    };\n\n    return _self;\n};\n});\n\nace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar Document = require(\"../document\").Document;\nvar lang = require(\"../lib/lang\");\n    \nvar Mirror = exports.Mirror = function(sender) {\n    this.sender = sender;\n    var doc = this.doc = new Document(\"\");\n    \n    var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));\n    \n    var _self = this;\n    sender.on(\"change\", function(e) {\n        var data = e.data;\n        if (data[0].start) {\n            doc.applyDeltas(data);\n        } else {\n            for (var i = 0; i < data.length; i += 2) {\n                if (Array.isArray(data[i+1])) {\n                    var d = {action: \"insert\", start: data[i], lines: data[i+1]};\n                } else {\n                    var d = {action: \"remove\", start: data[i], end: data[i+1]};\n                }\n                doc.applyDelta(d, true);\n            }\n        }\n        if (_self.$timeout)\n            return deferredUpdate.schedule(_self.$timeout);\n        _self.onUpdate();\n    });\n};\n\n(function() {\n    \n    this.$timeout = 500;\n    \n    this.setTimeout = function(timeout) {\n        this.$timeout = timeout;\n    };\n    \n    this.setValue = function(value) {\n        this.doc.setValue(value);\n        this.deferredUpdate.schedule(this.$timeout);\n    };\n    \n    this.getValue = function(callbackId) {\n        this.sender.callback(this.doc.getValue(), callbackId);\n    };\n    \n    this.onUpdate = function() {\n    };\n    \n    this.isPending = function() {\n        return this.deferredUpdate.isPending();\n    };\n    \n}).call(Mirror.prototype);\n\n});\n\nace.define(\"ace/mode/php/php\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nvar PHP = {Constants:{}};\n\n\n\n\nPHP.Constants.T_INCLUDE = 262;\nPHP.Constants.T_INCLUDE_ONCE = 261;\nPHP.Constants.T_EVAL = 260;\nPHP.Constants.T_REQUIRE = 259;\nPHP.Constants.T_REQUIRE_ONCE = 258;\nPHP.Constants.T_LOGICAL_OR = 263;\nPHP.Constants.T_LOGICAL_XOR = 264;\nPHP.Constants.T_LOGICAL_AND = 265;\nPHP.Constants.T_PRINT = 266;\nPHP.Constants.T_PLUS_EQUAL = 277;\nPHP.Constants.T_MINUS_EQUAL = 276;\nPHP.Constants.T_MUL_EQUAL = 275;\nPHP.Constants.T_DIV_EQUAL = 274;\nPHP.Constants.T_CONCAT_EQUAL = 273;\nPHP.Constants.T_MOD_EQUAL = 272;\nPHP.Constants.T_AND_EQUAL = 271;\nPHP.Constants.T_OR_EQUAL = 270;\nPHP.Constants.T_XOR_EQUAL = 269;\nPHP.Constants.T_SL_EQUAL = 268;\nPHP.Constants.T_SR_EQUAL = 267;\nPHP.Constants.T_BOOLEAN_OR = 278;\nPHP.Constants.T_BOOLEAN_AND = 279;\nPHP.Constants.T_IS_EQUAL = 283;\nPHP.Constants.T_IS_NOT_EQUAL = 282;\nPHP.Constants.T_IS_IDENTICAL = 281;\nPHP.Constants.T_IS_NOT_IDENTICAL = 280;\nPHP.Constants.T_IS_SMALLER_OR_EQUAL = 285;\nPHP.Constants.T_IS_GREATER_OR_EQUAL = 284;\nPHP.Constants.T_SL = 287;\nPHP.Constants.T_SR = 286;\nPHP.Constants.T_INSTANCEOF = 288;\nPHP.Constants.T_INC = 297;\nPHP.Constants.T_DEC = 296;\nPHP.Constants.T_INT_CAST = 295;\nPHP.Constants.T_DOUBLE_CAST = 294;\nPHP.Constants.T_STRING_CAST = 293;\nPHP.Constants.T_ARRAY_CAST = 292;\nPHP.Constants.T_OBJECT_CAST = 291;\nPHP.Constants.T_BOOL_CAST = 290;\nPHP.Constants.T_UNSET_CAST = 289;\nPHP.Constants.T_NEW = 299;\nPHP.Constants.T_CLONE = 298;\nPHP.Constants.T_EXIT = 300;\nPHP.Constants.T_IF = 301;\nPHP.Constants.T_ELSEIF = 302;\nPHP.Constants.T_ELSE = 303;\nPHP.Constants.T_ENDIF = 304;\nPHP.Constants.T_LNUMBER = 305;\nPHP.Constants.T_DNUMBER = 306;\nPHP.Constants.T_STRING = 307;\nPHP.Constants.T_STRING_VARNAME = 308;\nPHP.Constants.T_VARIABLE = 309;\nPHP.Constants.T_NUM_STRING = 310;\nPHP.Constants.T_INLINE_HTML = 311;\nPHP.Constants.T_CHARACTER = 312;\nPHP.Constants.T_BAD_CHARACTER = 313;\nPHP.Constants.T_ENCAPSED_AND_WHITESPACE = 314;\nPHP.Constants.T_CONSTANT_ENCAPSED_STRING = 315;\nPHP.Constants.T_ECHO = 316;\nPHP.Constants.T_DO = 317;\nPHP.Constants.T_WHILE = 318;\nPHP.Constants.T_ENDWHILE = 319;\nPHP.Constants.T_FOR = 320;\nPHP.Constants.T_ENDFOR = 321;\nPHP.Constants.T_FOREACH = 322;\nPHP.Constants.T_ENDFOREACH = 323;\nPHP.Constants.T_DECLARE = 324;\nPHP.Constants.T_ENDDECLARE = 325;\nPHP.Constants.T_AS = 326;\nPHP.Constants.T_SWITCH = 327;\nPHP.Constants.T_ENDSWITCH = 328;\nPHP.Constants.T_CASE = 329;\nPHP.Constants.T_DEFAULT = 330;\nPHP.Constants.T_BREAK = 331;\nPHP.Constants.T_CONTINUE = 332;\nPHP.Constants.T_GOTO = 333;\nPHP.Constants.T_FUNCTION = 334;\nPHP.Constants.T_CONST = 335;\nPHP.Constants.T_RETURN = 336;\nPHP.Constants.T_TRY = 337;\nPHP.Constants.T_CATCH = 338;\nPHP.Constants.T_THROW = 339;\nPHP.Constants.T_USE = 340;\nPHP.Constants.T_GLOBAL = 341;\nPHP.Constants.T_STATIC = 347;\nPHP.Constants.T_ABSTRACT = 346;\nPHP.Constants.T_FINAL = 345;\nPHP.Constants.T_PRIVATE = 344;\nPHP.Constants.T_PROTECTED = 343;\nPHP.Constants.T_PUBLIC = 342;\nPHP.Constants.T_VAR = 348;\nPHP.Constants.T_UNSET = 349;\nPHP.Constants.T_ISSET = 350;\nPHP.Constants.T_EMPTY = 351;\nPHP.Constants.T_HALT_COMPILER = 352;\nPHP.Constants.T_CLASS = 353;\nPHP.Constants.T_TRAIT = 382;\nPHP.Constants.T_INTERFACE = 354;\nPHP.Constants.T_EXTENDS = 355;\nPHP.Constants.T_IMPLEMENTS = 356;\nPHP.Constants.T_OBJECT_OPERATOR = 357;\nPHP.Constants.T_DOUBLE_ARROW = 358;\nPHP.Constants.T_LIST = 359;\nPHP.Constants.T_ARRAY = 360;\nPHP.Constants.T_CLASS_C = 361;\nPHP.Constants.T_TRAIT_C = 381;\nPHP.Constants.T_METHOD_C = 362;\nPHP.Constants.T_FUNC_C = 363;\nPHP.Constants.T_LINE = 364;\nPHP.Constants.T_FILE = 365;\nPHP.Constants.T_COMMENT = 366;\nPHP.Constants.T_DOC_COMMENT = 367;\nPHP.Constants.T_OPEN_TAG = 368;\nPHP.Constants.T_OPEN_TAG_WITH_ECHO = 369;\nPHP.Constants.T_CLOSE_TAG = 370;\nPHP.Constants.T_WHITESPACE = 371;\nPHP.Constants.T_START_HEREDOC = 372;\nPHP.Constants.T_END_HEREDOC = 373;\nPHP.Constants.T_DOLLAR_OPEN_CURLY_BRACES = 374;\nPHP.Constants.T_CURLY_OPEN = 375;\nPHP.Constants.T_PAAMAYIM_NEKUDOTAYIM = 376;\nPHP.Constants.T_DOUBLE_COLON = 376;\nPHP.Constants.T_NAMESPACE = 377;\nPHP.Constants.T_NS_C = 378;\nPHP.Constants.T_DIR = 379;\nPHP.Constants.T_NS_SEPARATOR = 380;\nPHP.Lexer = function( src, ini ) {\n\n\n    var heredoc,\n    lineBreaker = function( result ) {\n        if (result.match(/\\n/) !== null) {\n            var quote = result.substring(0, 1);\n            result = '[' + result.split(/\\n/).join( quote + \",\" + quote ) + '].join(\"\\\\n\")';\n\n        }\n\n        return result;\n    },\n    prev,\n\n    openTag = (ini === undefined || (/^(on|true|1)$/i.test(ini.short_open_tag) ) ? /(\\<\\?php\\s|\\<\\?|\\<\\%|\\<script language\\=('|\")?php('|\")?\\>)/i : /(\\<\\?php\\s|<\\?=|\\<script language\\=('|\")?php('|\")?\\>)/i),\n        openTagStart = (ini === undefined || (/^(on|true|1)$/i.test(ini.short_open_tag)) ? /^(\\<\\?php\\s|\\<\\?|\\<\\%|\\<script language\\=('|\")?php('|\")?\\>)/i : /^(\\<\\?php\\s|<\\?=|\\<script language\\=('|\")?php('|\")?\\>)/i),\n            tokens = [\n            {\n                value: PHP.Constants.T_NAMESPACE,\n                re: /^namespace(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_USE,\n                re: /^use(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_ABSTRACT,\n                re: /^abstract(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_IMPLEMENTS,\n                re: /^implements(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_INTERFACE,\n                re: /^interface(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_CONST,\n                re: /^const(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_STATIC,\n                re: /^static(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_FINAL,\n                re: /^final(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_VAR,\n                re: /^var(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_GLOBAL,\n                re: /^global(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_CLONE,\n                re: /^clone(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_THROW,\n                re: /^throw(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_EXTENDS,\n                re: /^extends(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_AND_EQUAL,\n                re: /^&=/\n            },\n            {\n                value: PHP.Constants.T_AS,\n                re: /^as(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_ARRAY_CAST,\n                re: /^\\(array\\)/i\n            },\n            {\n                value: PHP.Constants.T_BOOL_CAST,\n                re: /^\\((bool|boolean)\\)/i\n            },\n            {\n                value: PHP.Constants.T_DOUBLE_CAST,\n                re: /^\\((real|float|double)\\)/i\n            },\n            {\n                value: PHP.Constants.T_INT_CAST,\n                re: /^\\((int|integer)\\)/i\n            },\n            {\n                value: PHP.Constants.T_OBJECT_CAST,\n                re: /^\\(object\\)/i\n            },\n            {\n                value: PHP.Constants.T_STRING_CAST,\n                re: /^\\(string\\)/i\n            },\n            {\n                value: PHP.Constants.T_UNSET_CAST,\n                re: /^\\(unset\\)/i\n            },\n            {\n                value: PHP.Constants.T_TRY,\n                re: /^try(?=\\s*{)/i\n            },\n            {\n                value: PHP.Constants.T_CATCH,\n                re: /^catch(?=\\s*\\()/i\n            },\n            {\n                value: PHP.Constants.T_INSTANCEOF,\n                re: /^instanceof(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_OR,\n                re: /^or(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_AND,\n                re: /^and(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_LOGICAL_XOR,\n                re: /^xor(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_BOOLEAN_AND,\n                re: /^&&/\n            },\n            {\n                value: PHP.Constants.T_BOOLEAN_OR,\n                re: /^\\|\\|/\n            },\n            {\n                value: PHP.Constants.T_CONTINUE,\n                re: /^continue(?=\\s|;)/i\n            },\n            {\n                value: PHP.Constants.T_BREAK,\n                re: /^break(?=\\s|;)/i\n            },\n            {\n                value: PHP.Constants.T_ENDDECLARE,\n                re: /^enddeclare(?=\\s|;)/i\n            },\n            {\n                value: PHP.Constants.T_ENDFOR,\n                re: /^endfor(?=\\s|;)/i\n            },\n            {\n                value: PHP.Constants.T_ENDFOREACH,\n                re: /^endforeach(?=\\s|;)/i\n            },\n            {\n                value: PHP.Constants.T_ENDIF,\n                re: /^endif(?=\\s|;)/i\n            },\n            {\n                value: PHP.Constants.T_ENDSWITCH,\n                re: /^endswitch(?=\\s|;)/i\n            },\n            {\n                value: PHP.Constants.T_ENDWHILE,\n                re: /^endwhile(?=\\s|;)/i\n            },\n            {\n                value: PHP.Constants.T_CASE,\n                re: /^case(?=\\s)/i\n            },\n            {\n                value: PHP.Constants.T_DEFAULT,\n                re: /^default(?=\\s|:)/i\n            },\n            {\n                value: PHP.Constants.T_SWITCH,\n                re: /^switch(?=[ (])/i\n            },\n            {\n                value: PHP.Constants.T_EXIT,\n                re: /^(exit|die)(?=[ \\(;])/i\n            },\n            {\n                value: PHP.Constants.T_CLOSE_TAG,\n                re: /^(\\?\\>|\\%\\>|\\<\\/script\\>)\\s?\\s?/i,\n                func: function( result ) {\n                    insidePHP = false;\n                    return result;\n                }\n            },\n            {\n                value: PHP.Constants.T_DOUBLE_ARROW,\n                re: /^\\=\\>/\n            },\n            {\n                value: PHP.Constants.T_DOUBLE_COLON,\n                re: /^\\:\\:/\n            },\n            {\n                value: PHP.Constants.T_METHOD_C,\n                re: /^__METHOD__/\n            },\n            {\n                value: PHP.Constants.T_LINE,\n                re: /^__LINE__/\n            },\n            {\n                value: PHP.Constants.T_FILE,\n                re: /^__FILE__/\n            },\n            {\n                value: PHP.Constants.T_FUNC_C,\n                re: /^__FUNCTION__/\n            },\n            {\n                value: PHP.Constants.T_NS_C,\n                re: /^__NAMESPACE__/\n            },\n            {\n                value: PHP.Constants.T_TRAIT_C,\n                re: /^__TRAIT__/\n            },\n            {\n                value: PHP.Constants.T_DIR,\n                re: /^__DIR__/\n            },\n            {\n                value: PHP.Constants.T_CLASS_C,\n                re: /^__CLASS__/\n            },\n            {\n                value: PHP.Constants.T_INC,\n                re: /^\\+\\+/\n            },\n            {\n                value: PHP.Constants.T_DEC,\n                re: /^\\-\\-/\n            },\n            {\n                value: PHP.Constants.T_CONCAT_EQUAL,\n                re: /^\\.\\=/\n            },\n            {\n                value: PHP.Constants.T_DIV_EQUAL,\n                re: /^\\/\\=/\n            },\n            {\n                value: PHP.Constants.T_XOR_EQUAL,\n                re: /^\\^\\=/\n            },\n            {\n                value: PHP.Constants.T_MUL_EQUAL,\n                re: /^\\*\\=/\n            },\n            {\n                value: PHP.Constants.T_MOD_EQUAL,\n                re: /^\\%\\=/\n            },\n            {\n                value: PHP.Constants.T_SL_EQUAL,\n                re: /^<<=/\n            },\n            {\n                value: PHP.Constants.T_START_HEREDOC,\n                re: /^<<<[A-Z_0-9]+\\s/i,\n                func: function( result ){\n                    heredoc = result.substring(3, result.length - 1);\n                    return result;\n                }\n            },\n            {\n                value: PHP.Constants.T_SL,\n                re: /^<</\n            },\n            {\n                value: PHP.Constants.T_IS_SMALLER_OR_EQUAL,\n                re: /^<=/\n            },\n            {\n                value: PHP.Constants.T_SR_EQUAL,\n                re: /^>>=/\n            },\n            {\n                value: PHP.Constants.T_SR,\n                re: /^>>/\n            },\n            {\n                value: PHP.Constants.T_IS_GREATER_OR_EQUAL,\n                re: /^>=/\n            },\n            {\n                value: PHP.Constants.T_OR_EQUAL,\n                re: /^\\|\\=/\n            },\n            {\n                value: PHP.Constants.T_PLUS_EQUAL,\n                re: /^\\+\\=/\n            },\n            {\n                value: PHP.Constants.T_MINUS_EQUAL,\n                re: /^-\\=/\n            },\n            {\n                value: PHP.Constants.T_OBJECT_OPERATOR,\n                re: /^\\-\\>/i\n            },\n            {\n                value: PHP.Constants.T_CLASS,\n                re: /^class(?=[\\s\\{])/i,\n                afterWhitespace: true\n            },\n            {\n                value: PHP.Constants.T_TRAIT,\n                re: /^trait(?=[\\s]+[A-Za-z])/i,\n            },\n            {\n                value: PHP.Constants.T_PUBLIC,\n                re: /^public(?=[\\s])/i\n            },\n            {\n                value: PHP.Constants.T_PRIVATE,\n                re: /^private(?=[\\s])/i\n            },\n            {\n                value: PHP.Constants.T_PROTECTED,\n                re: /^protected(?=[\\s])/i\n            },\n            {\n                value: PHP.Constants.T_ARRAY,\n                re: /^array(?=\\s*?\\()/i\n            },\n            {\n                value: PHP.Constants.T_EMPTY,\n                re: /^empty(?=[ \\(])/i\n            },\n            {\n                value: PHP.Constants.T_ISSET,\n                re: /^isset(?=[ \\(])/i\n            },\n            {\n                value: PHP.Constants.T_UNSET,\n                re: /^unset(?=[ \\(])/i\n            },\n            {\n                value: PHP.Constants.T_RETURN,\n                re: /^return(?=[ \"'(;])/i\n            },\n            {\n                value: PHP.Constants.T_FUNCTION,\n                re: /^function(?=[ \"'(;])/i\n            },\n            {\n                value: PHP.Constants.T_ECHO,\n                re: /^echo(?=[ \"'(;])/i\n            },\n            {\n                value: PHP.Constants.T_LIST,\n                re: /^list(?=\\s*?\\()/i\n            },\n            {\n                value: PHP.Constants.T_PRINT,\n                re: /^print(?=[ \"'(;])/i\n            },\n            {\n                value: PHP.Constants.T_INCLUDE,\n                re: /^include(?=[ \"'(;])/i\n            },\n            {\n                value: PHP.Constants.T_INCLUDE_ONCE,\n                re: /^include_once(?=[ \"'(;])/i\n            },\n            {\n                value: PHP.Constants.T_REQUIRE,\n                re: /^require(?=[ \"'(;])/i\n            },\n            {\n                value: PHP.Constants.T_REQUIRE_ONCE,\n                re: /^require_once(?=[ \"'(;])/i\n            },\n            {\n                value: PHP.Constants.T_NEW,\n                re: /^new(?=[ ])/i\n            },\n            {\n                value: PHP.Constants.T_COMMENT,\n                re: /^\\/\\*([\\S\\s]*?)(?:\\*\\/|$)/\n            },\n            {\n                value: PHP.Constants.T_COMMENT,\n                re: /^\\/\\/.*(\\s)?/\n            },\n            {\n                value: PHP.Constants.T_COMMENT,\n                re: /^\\#.*(\\s)?/\n            },\n            {\n                value: PHP.Constants.T_ELSEIF,\n                re: /^elseif(?=[\\s(])/i\n            },\n            {\n                value: PHP.Constants.T_GOTO,\n                re: /^goto(?=[\\s(])/i\n            },\n            {\n                value: PHP.Constants.T_ELSE,\n                re: /^else(?=[\\s{:])/i\n            },\n            {\n                value: PHP.Constants.T_IF,\n                re: /^if(?=[\\s(])/i\n            },\n            {\n                value: PHP.Constants.T_DO,\n                re: /^do(?=[ {])/i\n            },\n            {\n                value: PHP.Constants.T_WHILE,\n                re: /^while(?=[ (])/i\n            },\n            {\n                value: PHP.Constants.T_FOREACH,\n                re: /^foreach(?=[ (])/i\n            },\n            {\n                value: PHP.Constants.T_ISSET,\n                re: /^isset(?=[ (])/i\n            },\n            {\n                value: PHP.Constants.T_IS_IDENTICAL,\n                re: /^===/\n            },\n            {\n                value: PHP.Constants.T_IS_EQUAL,\n                re: /^==/\n            },\n            {\n                value: PHP.Constants.T_IS_NOT_IDENTICAL,\n                re: /^\\!==/\n            },\n            {\n                value: PHP.Constants.T_IS_NOT_EQUAL,\n                re: /^(\\!=|\\<\\>)/\n            },\n            {\n                value: PHP.Constants.T_FOR,\n                re: /^for(?=[ (])/i\n            },\n\n            {\n                value: PHP.Constants.T_DNUMBER,\n                re: /^[0-9]*\\.[0-9]+([eE][-]?[0-9]*)?/\n\n            },\n            {\n                value: PHP.Constants.T_LNUMBER,\n                re: /^(0x[0-9A-F]+|[0-9]+)/i\n            },\n            {\n                value: PHP.Constants.T_OPEN_TAG_WITH_ECHO,\n                re: /^(\\<\\?=|\\<\\%=)/i\n            },\n            {\n                value: PHP.Constants.T_OPEN_TAG,\n                re: openTagStart\n            },\n            {\n                value: PHP.Constants.T_VARIABLE,\n                re: /^\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            },\n            {\n                value: PHP.Constants.T_WHITESPACE,\n                re: /^\\s+/\n            },\n            {\n                value: PHP.Constants.T_CONSTANT_ENCAPSED_STRING,\n                re: /^(\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"|'(?:[^'\\\\]|\\\\[\\s\\S])*')/,\n                func: function( result, token ) {\n\n                    var curlyOpen = 0,\n                    len,\n                    bracketOpen = 0;\n\n                    if (result.substring( 0,1 ) === \"'\") {\n                        return result;\n                    }\n\n                    var match = result.match( /(?:[^\\\\]|\\\\.)*[^\\\\]\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/g );\n                    if ( match !== null ) {\n\n                        while( result.length > 0 ) {\n                            len = result.length;\n                            match = result.match( /^[\\[\\]\\;\\:\\?\\(\\)\\!\\.\\,\\>\\<\\=\\+\\-\\/\\*\\|\\&\\@\\^\\%\\\"\\'\\{\\}]/ );\n\n                            if ( match !== null ) {\n\n                                results.push( match[ 0 ] );\n                                result = result.substring( 1 );\n\n                                if ( curlyOpen > 0 && match[ 0 ] === \"}\") {\n                                    curlyOpen--;\n                                }\n\n                                if ( match[ 0 ] === \"[\" ) {\n                                    bracketOpen++;\n                                }\n\n                                if ( match[ 0 ] === \"]\" ) {\n                                    bracketOpen--;\n                                }\n\n                            }\n\n                            match = result.match(/^\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/);\n\n\n\n                            if ( match !== null ) {\n\n                                results.push([\n                                    parseInt(PHP.Constants.T_VARIABLE, 10),\n                                    match[ 0 ],\n                                    line\n                                    ]);\n\n                                result = result.substring( match[ 0 ].length );\n\n                                match = result.match(/^(\\-\\>)\\s*([a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*)\\s*(\\()/);\n\n                                if ( match !== null ) {\n\n                                    results.push([\n                                        parseInt(PHP.Constants.T_OBJECT_OPERATOR, 10),\n                                        match[ 1 ],\n                                        line\n                                        ]);\n                                    results.push([\n                                        parseInt(PHP.Constants.T_STRING, 10),\n                                        match[ 2 ],\n                                        line\n                                        ]);\n                                    if (match[3]) {\n                                        results.push(match[3]);\n                                    }\n                                    result = result.substring( match[ 0 ].length );\n                                }\n\n\n                                if ( result.match( /^\\[/g ) !== null ) {\n                                    continue;\n                                }\n                            }\n\n                            var re;\n                            if ( curlyOpen > 0) {\n                                re = /^([^\\\\\\$\"{}\\]\\(\\)\\->]|\\\\.)+/g;\n                            } else {\n                                re = /^([^\\\\\\$\"{]|\\\\.|{[^\\$]|\\$(?=[^a-zA-Z_\\x7f-\\uffff]))+/g;;\n                            }\n\n                            var type, match2;\n                            while(( match = result.match( re )) !== null ) {\n                                if (result.length === 1) {\n                                    throw new Error(match);\n                                }\n                                \n                                type = 0;\n\n                                if( curlyOpen > 0 ){\n                                    if( match2 = match[0].match(/^[\\[\\]\\;\\:\\?\\(\\)\\!\\.\\,\\>\\<\\=\\+\\-\\/\\*\\|\\&\\{\\}\\@\\^\\%\\$\\~]/) ){\n                                        results.push(match2[0]);\n                                    }else{                                    \n                                        type = PHP.Constants.T_STRING;    \n                                    }\n                                }else{\n                                    type = PHP.Constants.T_ENCAPSED_AND_WHITESPACE;\n                                }\n                                \n                                if( type ){\n                                    results.push([\n                                        parseInt(type, 10),\n                                        match[ 0 ].replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\"),\n                                        line\n                                        ]);\n                                }\n\n                                line += match[ 0 ].split('\\n').length - 1;\n\n                                result = result.substring( match[ 0 ].length );\n                            }\n\n                            if( curlyOpen > 0 && result.match(/^\\->/) !== null ) {\n                                results.push([\n                                    parseInt(PHP.Constants.T_OBJECT_OPERATOR, 10),\n                                    '->',\n                                    line\n                                    ]);\n                                result = result.substring( 2 );\n                            }\n\n                            if( result.match(/^{\\$/) !== null ) {\n                                results.push([\n                                    parseInt(PHP.Constants.T_CURLY_OPEN, 10),\n                                    \"{\",\n                                    line\n                                    ]);\n                                result = result.substring( 1 );\n                                curlyOpen++;\n                            }\n\n                            if (len === result.length) {\n                                if ((match =  result.match( /^(([^\\\\]|\\\\.)*?[^\\\\]\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*)/g )) !== null) {\n                                    return;\n                                }\n                            }\n\n                        }\n\n                        return undefined;\n\n                    } else {\n                        result = result.replace(/\\r/g,\"\");\n                    }\n                    return result;\n                }\n            },\n            {\n                value: PHP.Constants.T_NS_SEPARATOR,\n                re: /^\\\\(?=[a-zA-Z_])/\n            },\n            {\n                value: PHP.Constants.T_STRING,\n                re: /^[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/\n            },\n            {\n                value: -1,\n                re: /^[\\[\\]\\;\\:\\?\\(\\)\\!\\.\\,\\>\\<\\=\\+\\-\\/\\*\\|\\&\\{\\}\\@\\^\\%\\\"\\'\\$\\~]/\n            }];\n\n\n\n\n\n            var results = [],\n            line = 1,\n            insidePHP = false,\n            cancel = true;\n\n            if ( src === null ) {\n                return results;\n            }\n\n            if ( typeof src !== \"string\" ) {\n                src = src.toString();\n            }\n\n\n\n            while (src.length > 0 && cancel === true) {\n\n                if ( insidePHP === true ) {\n\n                    if ( heredoc !== undefined ) {\n\n                        var regexp = new RegExp('([\\\\S\\\\s]*?)(\\\\r\\\\n|\\\\n|\\\\r)(' + heredoc + ')(;|\\\\r\\\\n|\\\\n)',\"i\");\n\n\n\n                        var result = src.match( regexp );\n                        if ( result !== null ) {\n\n                            results.push([\n                                parseInt(PHP.Constants.T_ENCAPSED_AND_WHITESPACE, 10),\n                                result[ 1 ].replace(/^\\n/g,\"\").replace(/\\\\\\$/g,\"$\") + \"\\n\",\n                                line\n                                ]);\n                            line += result[ 1 ].split('\\n').length;\n                            results.push([\n                                parseInt(PHP.Constants.T_END_HEREDOC, 10),\n                                result[ 3 ],\n                                line\n                                ]);\n\n                            src = src.substring( result[1].length + result[2].length + result[3].length );\n                            heredoc = undefined;\n                        }\n\n                        if (result === null) {\n                            throw Error(\"sup\");\n                        }\n\n\n                    } else {\n                        cancel =  tokens.some(function( token ){\n                            if ( token.afterWhitespace === true ) {\n                                var last = results[ results.length - 1 ];\n                                if ( !Array.isArray( last ) || (last[ 0 ] !== PHP.Constants.T_WHITESPACE && last[ 0 ] !== PHP.Constants.T_OPEN_TAG  && last[ 0 ] !== PHP.Constants.T_COMMENT)) {\n                                    return false;\n                                }\n                            }\n                            var result = src.match( token.re );\n\n                            if ( result !== null ) {\n                                if ( token.value !== -1) {\n                                    var resultString = result[ 0 ];\n\n\n\n                                    if (token.func !== undefined ) {\n                                        resultString = token.func( resultString, token );\n                                    }\n                                    if (resultString !== undefined ) {\n\n                                        results.push([\n                                            parseInt(token.value, 10),\n                                            resultString,\n                                            line\n                                            ]);\n                                        line += resultString.split('\\n').length - 1;\n                                    }\n\n                                } else {\n                                    results.push( result[ 0 ] );\n                                }\n\n                                src = src.substring(result[ 0 ].length);\n\n                                return true;\n                            }\n                            return false;\n\n\n                        });\n                    }\n\n                } else {\n\n                    var result = openTag.exec( src );\n\n\n                    if ( result !== null ) {\n                        if ( result.index > 0 ) {\n                            var resultString = src.substring(0, result.index);\n                            results.push ([\n                                parseInt(PHP.Constants.T_INLINE_HTML, 10),\n                                resultString,\n                                line\n                                ]);\n\n                            line += resultString.split('\\n').length - 1;\n\n                            src = src.substring( result.index );\n                        }\n\n                        insidePHP = true;\n                    } else {\n\n                        results.push ([\n                            parseInt(PHP.Constants.T_INLINE_HTML, 10),\n                            src.replace(/^\\n/, \"\"),\n                            line\n                            ]);\n                        return results;\n                    }\n\n                }\n\n\n\n            }\n\n\n\n            return results;\n\n\n\n        };\n\n\nPHP.Parser = function ( preprocessedTokens, eval ) {\n\n    var yybase = this.yybase,\n    yydefault = this.yydefault,\n    yycheck = this.yycheck,\n    yyaction = this.yyaction,\n    yylen = this.yylen,\n    yygbase = this.yygbase,\n    yygcheck = this.yygcheck,\n    yyp = this.yyp,\n    yygoto = this.yygoto,\n    yylhs = this.yylhs,\n    terminals = this.terminals,\n    translate = this.translate,\n    yygdefault = this.yygdefault;\n\n\n    this.pos = -1;\n    this.line = 1;\n\n    this.tokenMap = this.createTokenMap( );\n\n    this.dropTokens = {};\n    this.dropTokens[ PHP.Constants.T_WHITESPACE ] = 1;\n    this.dropTokens[ PHP.Constants.T_OPEN_TAG ] = 1;\n    var tokens = [];\n    preprocessedTokens.forEach( function( token, index ) {\n        if ( typeof token === \"object\" && token[ 0 ] === PHP.Constants.T_OPEN_TAG_WITH_ECHO) {\n            tokens.push([\n                PHP.Constants.T_OPEN_TAG,\n                token[ 1 ],\n                token[ 2 ]\n                ]);\n            tokens.push([\n                PHP.Constants.T_ECHO,\n                token[ 1 ],\n                token[ 2 ]\n                ]);\n        } else {\n            tokens.push( token );\n        }\n    });\n    this.tokens = tokens;\n    var tokenId = this.TOKEN_NONE;\n    this.startAttributes = {\n        'startLine': 1\n    };\n\n    this.endAttributes = {};\n    var attributeStack = [ this.startAttributes ];\n    var state = 0;\n    var stateStack = [ state ];\n    this.yyastk = [];\n    this.stackPos  = 0;\n\n    var yyn;\n\n    var origTokenId;\n\n\n    for (;;) {\n\n        if ( yybase[ state ] === 0 ) {\n            yyn = yydefault[ state ];\n        } else {\n            if (tokenId === this.TOKEN_NONE ) {\n                origTokenId = this.getNextToken( );\n                tokenId = (origTokenId >= 0 && origTokenId < this.TOKEN_MAP_SIZE) ? translate[ origTokenId ] : this.TOKEN_INVALID;\n\n                attributeStack[ this.stackPos ] = this.startAttributes;\n            }\n\n            if (((yyn = yybase[ state ] + tokenId) >= 0\n                && yyn < this.YYLAST && yycheck[ yyn ] === tokenId\n                || (state < this.YY2TBLSTATE\n                    && (yyn = yybase[state + this.YYNLSTATES] + tokenId) >= 0\n                    && yyn < this.YYLAST\n                    && yycheck[ yyn ] === tokenId))\n            && (yyn = yyaction[ yyn ]) !== this.YYDEFAULT ) {\n                if (yyn > 0) {\n                    ++this.stackPos;\n\n                    stateStack[ this.stackPos ] = state = yyn;\n                    this.yyastk[ this.stackPos ] = this.tokenValue;\n                    attributeStack[ this.stackPos ] = this.startAttributes;\n                    tokenId = this.TOKEN_NONE;\n\n                    if (yyn < this.YYNLSTATES)\n                        continue;\n                    yyn -= this.YYNLSTATES;\n                } else {\n                    yyn = -yyn;\n                }\n            } else {\n                yyn = yydefault[ state ];\n            }\n        }\n\n        for (;;) {\n\n            if ( yyn === 0 ) {\n                return this.yyval;\n            } else if (yyn !== this.YYUNEXPECTED ) {\n                for (var attr in this.endAttributes) {\n                    attributeStack[ this.stackPos - yylen[ yyn ] ][ attr ] = this.endAttributes[ attr ];\n                }\n                try {\n                    this['yyn' + yyn](attributeStack[ this.stackPos - yylen[ yyn ] ]);\n                } catch (e) {\n                    throw e;\n                }\n                this.stackPos -= yylen[ yyn ];\n                yyn = yylhs[ yyn ];\n                if ((yyp = yygbase[ yyn ] + stateStack[ this.stackPos ]) >= 0\n                    && yyp < this.YYGLAST\n                    && yygcheck[ yyp ] === yyn) {\n                    state = yygoto[ yyp ];\n                } else {\n                    state = yygdefault[ yyn ];\n                }\n\n                ++this.stackPos;\n\n                stateStack[ this.stackPos ] = state;\n                this.yyastk[ this.stackPos ] = this.yyval;\n                attributeStack[ this.stackPos ] = this.startAttributes;\n            } else {\n                if (eval !== true) {\n\n                    var expected = [];\n\n                    for (var i = 0; i < this.TOKEN_MAP_SIZE; ++i) {\n                        if ((yyn = yybase[ state ] + i) >= 0 && yyn < this.YYLAST && yycheck[ yyn ] == i\n                         || state < this.YY2TBLSTATE\n                            && (yyn = yybase[ state + this.YYNLSTATES] + i)\n                            && yyn < this.YYLAST && yycheck[ yyn ] == i\n                        ) {\n                            if (yyaction[ yyn ] != this.YYUNEXPECTED) {\n                                if (expected.length == 4) {\n                                    expected = [];\n                                    break;\n                                }\n\n                                expected.push( this.terminals[ i ] );\n                            }\n                        }\n                    }\n\n                    var expectedString = '';\n                    if (expected.length) {\n                        expectedString = ', expecting ' + expected.join(' or ');\n                    }\n                    throw new PHP.ParseError('syntax error, unexpected ' + terminals[ tokenId ] + expectedString, this.startAttributes['startLine']);\n                } else {\n                    return this.startAttributes['startLine'];\n                }\n\n            }\n\n            if (state < this.YYNLSTATES)\n                break;\n            yyn = state - this.YYNLSTATES;\n        }\n    }\n};\n\nPHP.ParseError = function( msg, line ) {\n    this.message = msg;\n    this.line = line;\n};\n\nPHP.Parser.prototype.MODIFIER_PUBLIC    =  1;\nPHP.Parser.prototype.MODIFIER_PROTECTED =  2;\nPHP.Parser.prototype.MODIFIER_PRIVATE   =  4;\nPHP.Parser.prototype.MODIFIER_STATIC    =  8;\nPHP.Parser.prototype.MODIFIER_ABSTRACT  = 16;\nPHP.Parser.prototype.MODIFIER_FINAL     = 32;\n\nPHP.Parser.prototype.getNextToken = function( ) {\n\n    this.startAttributes = {};\n    this.endAttributes = {};\n\n    var token,\n    tmp;\n\n    while (this.tokens[++this.pos] !== undefined) {\n        token = this.tokens[this.pos];\n\n        if (typeof token === \"string\") {\n            this.startAttributes['startLine'] = this.line;\n            this.endAttributes['endLine'] = this.line;\n            if ('b\"' === token) {\n                this.tokenValue = 'b\"';\n                return '\"'.charCodeAt(0);\n            } else {\n                this.tokenValue = token;\n                return token.charCodeAt(0);\n            }\n        } else {\n\n\n\n            this.line += ((tmp = token[ 1 ].match(/\\n/g)) === null) ? 0 : tmp.length;\n\n            if (PHP.Constants.T_COMMENT === token[0]) {\n\n                if (!Array.isArray(this.startAttributes['comments'])) {\n                    this.startAttributes['comments'] = [];\n                }\n\n                this.startAttributes['comments'].push( {\n                    type: \"comment\",\n                    comment: token[1],\n                    line: token[2]\n                });\n\n            } else if (PHP.Constants.T_DOC_COMMENT === token[0]) {\n                this.startAttributes['comments'].push( new PHPParser_Comment_Doc(token[1], token[2]) );\n            } else if (this.dropTokens[token[0]] === undefined) {\n                this.tokenValue = token[1];\n                this.startAttributes['startLine'] = token[2];\n                this.endAttributes['endLine'] = this.line;\n\n                return this.tokenMap[token[0]];\n            }\n        }\n    }\n\n    this.startAttributes['startLine'] = this.line;\n    return 0;\n};\n\nPHP.Parser.prototype.tokenName = function( token ) {\n    var constants = [\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_IS_SMALLER_OR_EQUAL\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"T_INSTANCEOF\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_CHARACTER\",\"T_BAD_CHARACTER\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_DOUBLE_ARROW\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_COMMENT\",\"T_DOC_COMMENT\",\"T_OPEN_TAG\",\"T_OPEN_TAG_WITH_ECHO\",\"T_CLOSE_TAG\",\"T_WHITESPACE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_DOUBLE_COLON\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\"];\n    var current = \"UNKNOWN\";\n    constants.some(function( constant ) {\n        if (PHP.Constants[ constant ] === token) {\n            current = constant;\n            return true;\n        } else {\n            return false;\n        }\n    });\n\n    return current;\n};\n\nPHP.Parser.prototype.createTokenMap = function() {\n    var tokenMap = {},\n    name,\n    i;\n    var T_DOUBLE_COLON = PHP.Constants.T_PAAMAYIM_NEKUDOTAYIM;\n    for ( i = 256; i < 1000; ++i ) {\n        if ( T_DOUBLE_COLON === i ) {\n            tokenMap[ i ] = this.T_PAAMAYIM_NEKUDOTAYIM;\n        } else if( PHP.Constants.T_OPEN_TAG_WITH_ECHO === i ) {\n            tokenMap[ i ] = PHP.Constants.T_ECHO;\n        } else if( PHP.Constants.T_CLOSE_TAG === i ) {\n            tokenMap[ i ] = 59;\n        } else if ( 'UNKNOWN' !== (name = this.tokenName( i ) ) ) { \n            tokenMap[ i ] =  this[name];\n        }\n    }\n    return tokenMap;\n};\n\nvar yynStandard = function () {\n    this.yyval =  this.yyastk[ this.stackPos-(1-1) ];\n};\n\nPHP.Parser.prototype.MakeArray = function( arr ) {\n    return Array.isArray( arr ) ? arr : [ arr ];\n}\n\n\nPHP.Parser.prototype.parseString = function( str ) {\n    var bLength = 0;\n    if ('b' === str[0]) {\n        bLength = 1;\n    }\n\n    if ('\\'' === str[ bLength ]) {\n        str = str.replace(\n            ['\\\\\\\\', '\\\\\\''],\n            [  '\\\\',   '\\'']);\n    } else {\n\n        str = this.parseEscapeSequences( str, '\"');\n\n    }\n\n    return str;\n\n};\n\nPHP.Parser.prototype.parseEscapeSequences = function( str, quote ) {\n\n\n\n    if (undefined !== quote) {\n        str = str.replace(new RegExp('\\\\' + quote, \"g\"), quote);\n    }\n\n    var replacements = {\n        '\\\\': '\\\\',\n        '$':  '$',\n        'n': \"\\n\",\n        'r': \"\\r\",\n        't': \"\\t\",\n        'f': \"\\f\",\n        'v': \"\\v\",\n        'e': \"\\x1B\"\n    };\n\n    return str.replace(\n        /~\\\\\\\\([\\\\\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3})~/g,\n        function ( matches ){\n            var str = matches[1];\n\n            if ( replacements[ str ] !== undefined ) {\n                return replacements[ str ];\n            } else if ('x' === str[ 0 ] || 'X' === str[ 0 ]) {\n                return chr(hexdec(str));\n            } else {\n                return chr(octdec(str));\n            }\n        }\n    );\n};\n\nPHP.Parser.prototype.TOKEN_NONE    = -1;\nPHP.Parser.prototype.TOKEN_INVALID = 149;\n\nPHP.Parser.prototype.TOKEN_MAP_SIZE = 384;\n\nPHP.Parser.prototype.YYLAST       = 913;\nPHP.Parser.prototype.YY2TBLSTATE  = 328;\nPHP.Parser.prototype.YYGLAST      = 415;\nPHP.Parser.prototype.YYNLSTATES   = 544;\nPHP.Parser.prototype.YYUNEXPECTED = 32767;\nPHP.Parser.prototype.YYDEFAULT    = -32766;\nPHP.Parser.prototype.YYERRTOK = 256;\nPHP.Parser.prototype.T_INCLUDE = 257;\nPHP.Parser.prototype.T_INCLUDE_ONCE = 258;\nPHP.Parser.prototype.T_EVAL = 259;\nPHP.Parser.prototype.T_REQUIRE = 260;\nPHP.Parser.prototype.T_REQUIRE_ONCE = 261;\nPHP.Parser.prototype.T_LOGICAL_OR = 262;\nPHP.Parser.prototype.T_LOGICAL_XOR = 263;\nPHP.Parser.prototype.T_LOGICAL_AND = 264;\nPHP.Parser.prototype.T_PRINT = 265;\nPHP.Parser.prototype.T_PLUS_EQUAL = 266;\nPHP.Parser.prototype.T_MINUS_EQUAL = 267;\nPHP.Parser.prototype.T_MUL_EQUAL = 268;\nPHP.Parser.prototype.T_DIV_EQUAL = 269;\nPHP.Parser.prototype.T_CONCAT_EQUAL = 270;\nPHP.Parser.prototype.T_MOD_EQUAL = 271;\nPHP.Parser.prototype.T_AND_EQUAL = 272;\nPHP.Parser.prototype.T_OR_EQUAL = 273;\nPHP.Parser.prototype.T_XOR_EQUAL = 274;\nPHP.Parser.prototype.T_SL_EQUAL = 275;\nPHP.Parser.prototype.T_SR_EQUAL = 276;\nPHP.Parser.prototype.T_BOOLEAN_OR = 277;\nPHP.Parser.prototype.T_BOOLEAN_AND = 278;\nPHP.Parser.prototype.T_IS_EQUAL = 279;\nPHP.Parser.prototype.T_IS_NOT_EQUAL = 280;\nPHP.Parser.prototype.T_IS_IDENTICAL = 281;\nPHP.Parser.prototype.T_IS_NOT_IDENTICAL = 282;\nPHP.Parser.prototype.T_IS_SMALLER_OR_EQUAL = 283;\nPHP.Parser.prototype.T_IS_GREATER_OR_EQUAL = 284;\nPHP.Parser.prototype.T_SL = 285;\nPHP.Parser.prototype.T_SR = 286;\nPHP.Parser.prototype.T_INSTANCEOF = 287;\nPHP.Parser.prototype.T_INC = 288;\nPHP.Parser.prototype.T_DEC = 289;\nPHP.Parser.prototype.T_INT_CAST = 290;\nPHP.Parser.prototype.T_DOUBLE_CAST = 291;\nPHP.Parser.prototype.T_STRING_CAST = 292;\nPHP.Parser.prototype.T_ARRAY_CAST = 293;\nPHP.Parser.prototype.T_OBJECT_CAST = 294;\nPHP.Parser.prototype.T_BOOL_CAST = 295;\nPHP.Parser.prototype.T_UNSET_CAST = 296;\nPHP.Parser.prototype.T_NEW = 297;\nPHP.Parser.prototype.T_CLONE = 298;\nPHP.Parser.prototype.T_EXIT = 299;\nPHP.Parser.prototype.T_IF = 300;\nPHP.Parser.prototype.T_ELSEIF = 301;\nPHP.Parser.prototype.T_ELSE = 302;\nPHP.Parser.prototype.T_ENDIF = 303;\nPHP.Parser.prototype.T_LNUMBER = 304;\nPHP.Parser.prototype.T_DNUMBER = 305;\nPHP.Parser.prototype.T_STRING = 306;\nPHP.Parser.prototype.T_STRING_VARNAME = 307;\nPHP.Parser.prototype.T_VARIABLE = 308;\nPHP.Parser.prototype.T_NUM_STRING = 309;\nPHP.Parser.prototype.T_INLINE_HTML = 310;\nPHP.Parser.prototype.T_CHARACTER = 311;\nPHP.Parser.prototype.T_BAD_CHARACTER = 312;\nPHP.Parser.prototype.T_ENCAPSED_AND_WHITESPACE = 313;\nPHP.Parser.prototype.T_CONSTANT_ENCAPSED_STRING = 314;\nPHP.Parser.prototype.T_ECHO = 315;\nPHP.Parser.prototype.T_DO = 316;\nPHP.Parser.prototype.T_WHILE = 317;\nPHP.Parser.prototype.T_ENDWHILE = 318;\nPHP.Parser.prototype.T_FOR = 319;\nPHP.Parser.prototype.T_ENDFOR = 320;\nPHP.Parser.prototype.T_FOREACH = 321;\nPHP.Parser.prototype.T_ENDFOREACH = 322;\nPHP.Parser.prototype.T_DECLARE = 323;\nPHP.Parser.prototype.T_ENDDECLARE = 324;\nPHP.Parser.prototype.T_AS = 325;\nPHP.Parser.prototype.T_SWITCH = 326;\nPHP.Parser.prototype.T_ENDSWITCH = 327;\nPHP.Parser.prototype.T_CASE = 328;\nPHP.Parser.prototype.T_DEFAULT = 329;\nPHP.Parser.prototype.T_BREAK = 330;\nPHP.Parser.prototype.T_CONTINUE = 331;\nPHP.Parser.prototype.T_GOTO = 332;\nPHP.Parser.prototype.T_FUNCTION = 333;\nPHP.Parser.prototype.T_CONST = 334;\nPHP.Parser.prototype.T_RETURN = 335;\nPHP.Parser.prototype.T_TRY = 336;\nPHP.Parser.prototype.T_CATCH = 337;\nPHP.Parser.prototype.T_THROW = 338;\nPHP.Parser.prototype.T_USE = 339;\nPHP.Parser.prototype.T_INSTEADOF = 340;\nPHP.Parser.prototype.T_GLOBAL = 341;\nPHP.Parser.prototype.T_STATIC = 342;\nPHP.Parser.prototype.T_ABSTRACT = 343;\nPHP.Parser.prototype.T_FINAL = 344;\nPHP.Parser.prototype.T_PRIVATE = 345;\nPHP.Parser.prototype.T_PROTECTED = 346;\nPHP.Parser.prototype.T_PUBLIC = 347;\nPHP.Parser.prototype.T_VAR = 348;\nPHP.Parser.prototype.T_UNSET = 349;\nPHP.Parser.prototype.T_ISSET = 350;\nPHP.Parser.prototype.T_EMPTY = 351;\nPHP.Parser.prototype.T_HALT_COMPILER = 352;\nPHP.Parser.prototype.T_CLASS = 353;\nPHP.Parser.prototype.T_TRAIT = 354;\nPHP.Parser.prototype.T_INTERFACE = 355;\nPHP.Parser.prototype.T_EXTENDS = 356;\nPHP.Parser.prototype.T_IMPLEMENTS = 357;\nPHP.Parser.prototype.T_OBJECT_OPERATOR = 358;\nPHP.Parser.prototype.T_DOUBLE_ARROW = 359;\nPHP.Parser.prototype.T_LIST = 360;\nPHP.Parser.prototype.T_ARRAY = 361;\nPHP.Parser.prototype.T_CALLABLE = 362;\nPHP.Parser.prototype.T_CLASS_C = 363;\nPHP.Parser.prototype.T_TRAIT_C = 364;\nPHP.Parser.prototype.T_METHOD_C = 365;\nPHP.Parser.prototype.T_FUNC_C = 366;\nPHP.Parser.prototype.T_LINE = 367;\nPHP.Parser.prototype.T_FILE = 368;\nPHP.Parser.prototype.T_COMMENT = 369;\nPHP.Parser.prototype.T_DOC_COMMENT = 370;\nPHP.Parser.prototype.T_OPEN_TAG = 371;\nPHP.Parser.prototype.T_OPEN_TAG_WITH_ECHO = 372;\nPHP.Parser.prototype.T_CLOSE_TAG = 373;\nPHP.Parser.prototype.T_WHITESPACE = 374;\nPHP.Parser.prototype.T_START_HEREDOC = 375;\nPHP.Parser.prototype.T_END_HEREDOC = 376;\nPHP.Parser.prototype.T_DOLLAR_OPEN_CURLY_BRACES = 377;\nPHP.Parser.prototype.T_CURLY_OPEN = 378;\nPHP.Parser.prototype.T_PAAMAYIM_NEKUDOTAYIM = 379;\nPHP.Parser.prototype.T_NAMESPACE = 380;\nPHP.Parser.prototype.T_NS_C = 381;\nPHP.Parser.prototype.T_DIR = 382;\nPHP.Parser.prototype.T_NS_SEPARATOR = 383;\nPHP.Parser.prototype.terminals = [\n    \"$EOF\",\n    \"error\",\n    \"T_INCLUDE\",\n    \"T_INCLUDE_ONCE\",\n    \"T_EVAL\",\n    \"T_REQUIRE\",\n    \"T_REQUIRE_ONCE\",\n    \"','\",\n    \"T_LOGICAL_OR\",\n    \"T_LOGICAL_XOR\",\n    \"T_LOGICAL_AND\",\n    \"T_PRINT\",\n    \"'='\",\n    \"T_PLUS_EQUAL\",\n    \"T_MINUS_EQUAL\",\n    \"T_MUL_EQUAL\",\n    \"T_DIV_EQUAL\",\n    \"T_CONCAT_EQUAL\",\n    \"T_MOD_EQUAL\",\n    \"T_AND_EQUAL\",\n    \"T_OR_EQUAL\",\n    \"T_XOR_EQUAL\",\n    \"T_SL_EQUAL\",\n    \"T_SR_EQUAL\",\n    \"'?'\",\n    \"':'\",\n    \"T_BOOLEAN_OR\",\n    \"T_BOOLEAN_AND\",\n    \"'|'\",\n    \"'^'\",\n    \"'&'\",\n    \"T_IS_EQUAL\",\n    \"T_IS_NOT_EQUAL\",\n    \"T_IS_IDENTICAL\",\n    \"T_IS_NOT_IDENTICAL\",\n    \"'<'\",\n    \"T_IS_SMALLER_OR_EQUAL\",\n    \"'>'\",\n    \"T_IS_GREATER_OR_EQUAL\",\n    \"T_SL\",\n    \"T_SR\",\n    \"'+'\",\n    \"'-'\",\n    \"'.'\",\n    \"'*'\",\n    \"'/'\",\n    \"'%'\",\n    \"'!'\",\n    \"T_INSTANCEOF\",\n    \"'~'\",\n    \"T_INC\",\n    \"T_DEC\",\n    \"T_INT_CAST\",\n    \"T_DOUBLE_CAST\",\n    \"T_STRING_CAST\",\n    \"T_ARRAY_CAST\",\n    \"T_OBJECT_CAST\",\n    \"T_BOOL_CAST\",\n    \"T_UNSET_CAST\",\n    \"'@'\",\n    \"'['\",\n    \"T_NEW\",\n    \"T_CLONE\",\n    \"T_EXIT\",\n    \"T_IF\",\n    \"T_ELSEIF\",\n    \"T_ELSE\",\n    \"T_ENDIF\",\n    \"T_LNUMBER\",\n    \"T_DNUMBER\",\n    \"T_STRING\",\n    \"T_STRING_VARNAME\",\n    \"T_VARIABLE\",\n    \"T_NUM_STRING\",\n    \"T_INLINE_HTML\",\n    \"T_ENCAPSED_AND_WHITESPACE\",\n    \"T_CONSTANT_ENCAPSED_STRING\",\n    \"T_ECHO\",\n    \"T_DO\",\n    \"T_WHILE\",\n    \"T_ENDWHILE\",\n    \"T_FOR\",\n    \"T_ENDFOR\",\n    \"T_FOREACH\",\n    \"T_ENDFOREACH\",\n    \"T_DECLARE\",\n    \"T_ENDDECLARE\",\n    \"T_AS\",\n    \"T_SWITCH\",\n    \"T_ENDSWITCH\",\n    \"T_CASE\",\n    \"T_DEFAULT\",\n    \"T_BREAK\",\n    \"T_CONTINUE\",\n    \"T_GOTO\",\n    \"T_FUNCTION\",\n    \"T_CONST\",\n    \"T_RETURN\",\n    \"T_TRY\",\n    \"T_CATCH\",\n    \"T_THROW\",\n    \"T_USE\",\n    \"T_INSTEADOF\",\n    \"T_GLOBAL\",\n    \"T_STATIC\",\n    \"T_ABSTRACT\",\n    \"T_FINAL\",\n    \"T_PRIVATE\",\n    \"T_PROTECTED\",\n    \"T_PUBLIC\",\n    \"T_VAR\",\n    \"T_UNSET\",\n    \"T_ISSET\",\n    \"T_EMPTY\",\n    \"T_HALT_COMPILER\",\n    \"T_CLASS\",\n    \"T_TRAIT\",\n    \"T_INTERFACE\",\n    \"T_EXTENDS\",\n    \"T_IMPLEMENTS\",\n    \"T_OBJECT_OPERATOR\",\n    \"T_DOUBLE_ARROW\",\n    \"T_LIST\",\n    \"T_ARRAY\",\n    \"T_CALLABLE\",\n    \"T_CLASS_C\",\n    \"T_TRAIT_C\",\n    \"T_METHOD_C\",\n    \"T_FUNC_C\",\n    \"T_LINE\",\n    \"T_FILE\",\n    \"T_START_HEREDOC\",\n    \"T_END_HEREDOC\",\n    \"T_DOLLAR_OPEN_CURLY_BRACES\",\n    \"T_CURLY_OPEN\",\n    \"T_PAAMAYIM_NEKUDOTAYIM\",\n    \"T_NAMESPACE\",\n    \"T_NS_C\",\n    \"T_DIR\",\n    \"T_NS_SEPARATOR\",\n    \"';'\",\n    \"'{'\",\n    \"'}'\",\n    \"'('\",\n    \"')'\",\n    \"'$'\",\n    \"']'\",\n    \"'`'\",\n    \"'\\\"'\"\n    , \"???\"\n];\nPHP.Parser.prototype.translate = [\n        0,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,   47,  148,  149,  145,   46,   30,  149,\n      143,  144,   44,   41,    7,   42,   43,   45,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,   25,  140,\n       35,   12,   37,   24,   59,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,   60,  149,  146,   29,  149,  147,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  141,   28,  142,   49,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,  149,  149,  149,  149,\n      149,  149,  149,  149,  149,  149,    1,    2,    3,    4,\n        5,    6,    8,    9,   10,   11,   13,   14,   15,   16,\n       17,   18,   19,   20,   21,   22,   23,   26,   27,   31,\n       32,   33,   34,   36,   38,   39,   40,   48,   50,   51,\n       52,   53,   54,   55,   56,   57,   58,   61,   62,   63,\n       64,   65,   66,   67,   68,   69,   70,   71,   72,   73,\n       74,  149,  149,   75,   76,   77,   78,   79,   80,   81,\n       82,   83,   84,   85,   86,   87,   88,   89,   90,   91,\n       92,   93,   94,   95,   96,   97,   98,   99,  100,  101,\n      102,  103,  104,  105,  106,  107,  108,  109,  110,  111,\n      112,  113,  114,  115,  116,  117,  118,  119,  120,  121,\n      122,  123,  124,  125,  126,  127,  128,  129,  130,  149,\n      149,  149,  149,  149,  149,  131,  132,  133,  134,  135,\n      136,  137,  138,  139\n];\n\nPHP.Parser.prototype.yyaction = [\n       61,   62,  363,   63,   64,-32766,-32766,-32766,  509,   65,\n      708,  709,  710,  707,  706,  705,-32766,-32766,-32766,-32766,\n    -32766,-32766,  132,-32766,-32766,-32766,-32766,-32766,-32767,-32767,\n    -32767,-32767,-32766,  335,-32766,-32766,-32766,-32766,-32766,   66,\n       67,  351,  663,  664,   40,   68,  548,   69,  232,  233,\n       70,   71,   72,   73,   74,   75,   76,   77,   30,  246,\n       78,  336,  364, -112,    0,  469,  833,  834,  365,  641,\n      890,  436,  590,   41,  835,   53,   27,  366,  294,  367,\n      687,  368,  921,  369,  923,  922,  370,-32766,-32766,-32766,\n       42,   43,  371,  339,  126,   44,  372,  337,   79,  297,\n      349,  292,  293,-32766,  918,-32766,-32766,  373,  374,  375,\n      376,  377,  391,  199,  361,  338,  573,  613,  378,  379,\n      380,  381,  845,  839,  840,  841,  842,  836,  837,  253,\n    -32766,   87,   88,   89,  391,  843,  838,  338,  597,  519,\n      128,   80,  129,  273,  332,  257,  261,   47,  673,   90,\n       91,   92,   93,   94,   95,   96,   97,   98,   99,  100,\n      101,  102,  103,  104,  105,  106,  107,  108,  109,  110,\n      799,  247,  884,  108,  109,  110,  226,  247,   21,-32766,\n      310,-32766,-32766,-32766,  642,  548,-32766,-32766,-32766,-32766,\n       56,  353,-32766,-32766,-32766,   55,-32766,-32766,-32766,-32766,\n    -32766,   58,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,\n    -32766,  557,-32766,-32766,  518,-32766,  548,  890,-32766,  390,\n    -32766,  228,  252,-32766,-32766,-32766,-32766,-32766,  275,-32766,\n      234,-32766,  587,  588,-32766,-32766,-32766,-32766,-32766,-32766,\n    -32766,   46,  236,-32766,-32766,  281,-32766,  682,  348,-32766,\n      390,-32766,  346,  333,  521,-32766,-32766,-32766,  271,  911,\n      262,  237,  446,  911,-32766,  894,   59,  700,  358,  135,\n      548,  123,  538,   35,-32766,  333,  122,-32766,-32766,-32766,\n      271,-32766,  124,-32766,  692,-32766,-32766,-32766,-32766,  700,\n      273,   22,-32766,-32766,-32766,-32766,  239,-32766,-32766,  612,\n    -32766,  548,  134,-32766,  390,-32766,  462,  354,-32766,-32766,\n    -32766,-32766,-32766,  227,-32766,  238,-32766,  845,  542,-32766,\n      856,  611,  200,-32766,-32766,-32766,  259,  280,-32766,-32766,\n      201,-32766,  855,  129,-32766,  390,  130,  202,  333,  206,\n    -32766,-32766,-32766,  271,-32766,-32766,-32766,  125,  601,-32766,\n      136,  299,  700,  489,   28,  548,  105,  106,  107,-32766,\n      498,  499,-32766,-32766,-32766,  207,-32766,  133,-32766,  525,\n    -32766,-32766,-32766,-32766,  663,  664,  527,-32766,-32766,-32766,\n    -32766,  528,-32766,-32766,  610,-32766,  548,  427,-32766,  390,\n    -32766,  532,  539,-32766,-32766,-32766,-32766,-32766,  240,-32766,\n      247,-32766,  697,  543,-32766,  554,  523,  608,-32766,-32766,\n    -32766,  686,  535,-32766,-32766,   54,-32766,   57,   60,-32766,\n      390,  246, -155,  278,  345,-32766,-32766,-32766,  506,  347,\n     -152,  471,  402,  403,-32766,  405,  404,  272,  493,  416,\n      548,  318,  417,  505,-32766,  517,  548,-32766,-32766,-32766,\n      549,-32766,  562,-32766,  916,-32766,-32766,-32766,-32766,  564,\n      826,  848,-32766,-32766,-32766,-32766,  694,-32766,-32766,  485,\n    -32766,  548,  487,-32766,  390,-32766,  504,  802,-32766,-32766,\n    -32766,-32766,-32766,  279,-32766,  911,-32766,  502,  492,-32766,\n      413,  483,  269,-32766,-32766,-32766,  243,  337,-32766,-32766,\n      418,-32766,  454,  229,-32766,  390,  274,  373,  374,  344,\n    -32766,-32766,-32766,  360,  614,-32766,  573,  613,  378,  379,\n     -274,  548,  615, -332,  844,-32766,  258,   51,-32766,-32766,\n    -32766,  270,-32766,  346,-32766,   52,-32766,  260,    0,-32766,\n     -333,-32766,-32766,-32766,-32766,-32766,-32766,  205,-32766,-32766,\n       49,-32766,  548,  424,-32766,  390,-32766, -266,  264,-32766,\n    -32766,-32766,-32766,-32766,  409,-32766,  343,-32766,  265,  312,\n    -32766,  470,  513, -275,-32766,-32766,-32766,  920,  337,-32766,\n    -32766,  530,-32766,  531,  600,-32766,  390,  592,  373,  374,\n      578,  581,-32766,-32766,  644,  629,-32766,  573,  613,  378,\n      379,  635,  548,  636,  576,  627,-32766,  625,  693,-32766,\n    -32766,-32766,  691,-32766,  591,-32766,  582,-32766,  203,  204,\n    -32766,  584,  583,-32766,-32766,-32766,-32766,  586,  599,-32766,\n    -32766,  589,-32766,  690,  558,-32766,  390,  197,  683,  919,\n       86,  520,  522,-32766,  524,  833,  834,  529,  533,-32766,\n      534,  537,  541,  835,   48,  111,  112,  113,  114,  115,\n      116,  117,  118,  119,  120,  121,  127,   31,  633,  337,\n      330,  634,  585,-32766,   32,  291,  337,  330,  478,  373,\n      374,  917,  291,  891,  889,  875,  373,  374,  553,  613,\n      378,  379,  737,  739,  887,  553,  613,  378,  379,  824,\n      451,  675,  839,  840,  841,  842,  836,  837,  320,  895,\n      277,  885,   23,   33,  843,  838,  556,  277,  337,  330,\n    -32766,   34,-32766,  555,  291,   36,   37,   38,  373,  374,\n       39,   45,   50,   81,   82,   83,   84,  553,  613,  378,\n      379,-32767,-32767,-32767,-32767,  103,  104,  105,  106,  107,\n      337,   85,  131,  137,  337,  138,  198,  224,  225,  277,\n      373,  374, -332,  230,  373,  374,   24,  337,  231,  573,\n      613,  378,  379,  573,  613,  378,  379,  373,  374,  235,\n      248,  249,  250,  337,  251,    0,  573,  613,  378,  379,\n      276,  329,  331,  373,  374,-32766,  337,  574,  490,  792,\n      337,  609,  573,  613,  378,  379,  373,  374,   25,  300,\n      373,  374,  319,  337,  795,  573,  613,  378,  379,  573,\n      613,  378,  379,  373,  374,  516,  355,  359,  445,  482,\n      796,  507,  573,  613,  378,  379,  508,  548,  337,  890,\n      775,  791,  337,  604,  803,  808,  806,  698,  373,  374,\n      888,  807,  373,  374,-32766,-32766,-32766,  573,  613,  378,\n      379,  573,  613,  378,  379,  873,  832,  804,  872,  851,\n    -32766,  809,-32766,-32766,-32766,-32766,  805,   20,   26,   29,\n      298,  480,  515,  770,  778,  827,  457,    0,  900,  455,\n      774,    0,    0,    0,  874,  870,  886,  823,  915,  852,\n      869,  488,    0,  391,  793,    0,  338,    0,    0,    0,\n      340,    0,  273\n];\n\nPHP.Parser.prototype.yycheck = [\n        2,    3,    4,    5,    6,    8,    9,   10,   70,   11,\n      104,  105,  106,  107,  108,  109,    8,    9,   10,    8,\n        9,   24,   60,   26,   27,   28,   29,   30,   31,   32,\n       33,   34,   24,    7,   26,   27,   28,   29,   30,   41,\n       42,    7,  123,  124,    7,   47,   70,   49,   50,   51,\n       52,   53,   54,   55,   56,   57,   58,   59,   60,   61,\n       62,   63,   64,  144,    0,   75,   68,   69,   70,   25,\n       72,   70,   74,    7,   76,   77,   78,   79,    7,   81,\n      142,   83,   70,   85,   72,   73,   88,    8,    9,   10,\n       92,   93,   94,   95,    7,   97,   98,   95,  100,    7,\n        7,  103,  104,   24,  142,   26,   27,  105,  106,  111,\n      112,  113,  136,    7,    7,  139,  114,  115,  116,  117,\n      122,  123,  132,  125,  126,  127,  128,  129,  130,  131,\n        8,    8,    9,   10,  136,  137,  138,  139,  140,  141,\n       25,  143,  141,  145,  142,  147,  148,   24,   72,   26,\n       27,   28,   29,   30,   31,   32,   33,   34,   35,   36,\n       37,   38,   39,   40,   41,   42,   43,   44,   45,   46,\n      144,   48,   72,   44,   45,   46,   30,   48,  144,   64,\n       72,    8,    9,   10,  140,   70,    8,    9,   10,   74,\n       60,   25,   77,   78,   79,   60,   81,   24,   83,   26,\n       85,   60,   24,   88,   26,   27,   28,   92,   93,   94,\n       64,  140,   97,   98,   70,  100,   70,   72,  103,  104,\n       74,  145,    7,   77,   78,   79,  111,   81,    7,   83,\n       30,   85,  140,  140,   88,    8,    9,   10,   92,   93,\n       94,  133,  134,   97,   98,  145,  100,  140,    7,  103,\n      104,   24,  139,   96,  141,  140,  141,  111,  101,   75,\n       75,   30,   70,   75,   64,   70,   60,  110,  121,   12,\n       70,  141,   25,  143,   74,   96,  141,   77,   78,   79,\n      101,   81,  141,   83,  140,   85,  140,  141,   88,  110,\n      145,  144,   92,   93,   94,   64,    7,   97,   98,  142,\n      100,   70,  141,  103,  104,   74,  145,  141,   77,   78,\n       79,  111,   81,    7,   83,   30,   85,  132,   25,   88,\n      132,  142,   12,   92,   93,   94,  120,   60,   97,   98,\n       12,  100,  148,  141,  103,  104,  141,   12,   96,   12,\n      140,  141,  111,  101,    8,    9,   10,  141,   25,   64,\n       90,   91,  110,   65,   66,   70,   41,   42,   43,   74,\n       65,   66,   77,   78,   79,   12,   81,   25,   83,   25,\n       85,  140,  141,   88,  123,  124,   25,   92,   93,   94,\n       64,   25,   97,   98,  142,  100,   70,  120,  103,  104,\n       74,   25,   25,   77,   78,   79,  111,   81,   30,   83,\n       48,   85,  140,  141,   88,  140,  141,   30,   92,   93,\n       94,  140,  141,   97,   98,   60,  100,   60,   60,  103,\n      104,   61,   72,   75,   70,  140,  141,  111,   67,   70,\n       87,   99,   70,   70,   64,   70,   72,  102,   89,   70,\n       70,   71,   70,   70,   74,   70,   70,   77,   78,   79,\n       70,   81,   70,   83,   70,   85,  140,  141,   88,   70,\n      144,   70,   92,   93,   94,   64,   70,   97,   98,   72,\n      100,   70,   72,  103,  104,   74,   72,   72,   77,   78,\n       79,  111,   81,   75,   83,   75,   85,   89,   86,   88,\n       79,  101,  118,   92,   93,   94,   87,   95,   97,   98,\n       87,  100,   87,   87,  103,  104,  118,  105,  106,   95,\n      140,  141,  111,   95,  115,   64,  114,  115,  116,  117,\n      135,   70,  115,  120,  132,   74,  120,  140,   77,   78,\n       79,  119,   81,  139,   83,  140,   85,  120,   -1,   88,\n      120,  140,  141,   92,   93,   94,   64,  121,   97,   98,\n      121,  100,   70,  122,  103,  104,   74,  135,  135,   77,\n       78,   79,  111,   81,  139,   83,  139,   85,  135,  135,\n       88,  135,  135,  135,   92,   93,   94,  142,   95,   97,\n       98,  140,  100,  140,  140,  103,  104,  140,  105,  106,\n      140,  140,  141,  111,  140,  140,   64,  114,  115,  116,\n      117,  140,   70,  140,  140,  140,   74,  140,  140,   77,\n       78,   79,  140,   81,  140,   83,  140,   85,   41,   42,\n       88,  140,  140,  141,   92,   93,   94,  140,  140,   97,\n       98,  140,  100,  140,  140,  103,  104,   60,  140,  142,\n      141,  141,  141,  111,  141,   68,   69,  141,  141,   72,\n      141,  141,  141,   76,   12,   13,   14,   15,   16,   17,\n       18,   19,   20,   21,   22,   23,  141,  143,  142,   95,\n       96,  142,  140,  141,  143,  101,   95,   96,  142,  105,\n      106,  142,  101,  142,  142,  142,  105,  106,  114,  115,\n      116,  117,   50,   51,  142,  114,  115,  116,  117,  142,\n      123,  142,  125,  126,  127,  128,  129,  130,  131,  142,\n      136,  142,  144,  143,  137,  138,  142,  136,   95,   96,\n      143,  143,  145,  142,  101,  143,  143,  143,  105,  106,\n      143,  143,  143,  143,  143,  143,  143,  114,  115,  116,\n      117,   35,   36,   37,   38,   39,   40,   41,   42,   43,\n       95,  143,  143,  143,   95,  143,  143,  143,  143,  136,\n      105,  106,  120,  143,  105,  106,  144,   95,  143,  114,\n      115,  116,  117,  114,  115,  116,  117,  105,  106,  143,\n      143,  143,  143,   95,  143,   -1,  114,  115,  116,  117,\n      143,  143,  143,  105,  106,  143,   95,  142,   80,  146,\n       95,  142,  114,  115,  116,  117,  105,  106,  144,  144,\n      105,  106,  144,   95,  142,  114,  115,  116,  117,  114,\n      115,  116,  117,  105,  106,   82,  144,  144,  144,  144,\n      142,   84,  114,  115,  116,  117,  144,   70,   95,   72,\n      144,  144,   95,  142,  144,  146,  144,  142,  105,  106,\n      146,  144,  105,  106,    8,    9,   10,  114,  115,  116,\n      117,  114,  115,  116,  117,  144,  144,  144,  144,  144,\n       24,  104,   26,   27,   28,   29,  144,  144,  144,  144,\n      144,  144,  144,  144,  144,  144,  144,   -1,  144,  144,\n      144,   -1,   -1,   -1,  146,  146,  146,  146,  146,  146,\n      146,  146,   -1,  136,  147,   -1,  139,   -1,   -1,   -1,\n      143,   -1,  145\n];\n\nPHP.Parser.prototype.yybase = [\n        0,  574,  581,  623,  655,    2,  718,  402,  747,  659,\n      672,  688,  743,  701,  705,  483,  483,  483,  483,  483,\n      351,  356,  366,  366,  367,  366,  344,   -2,   -2,   -2,\n      200,  200,  231,  231,  231,  231,  231,  231,  231,  231,\n      200,  231,  451,  482,  532,  316,  370,  115,  146,  285,\n      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,\n      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,\n      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,\n      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,\n      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,\n      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,\n      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,\n      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,\n      401,  401,  401,  401,  401,  401,  401,  401,  401,   44,\n      474,  429,  476,  481,  487,  488,  739,  740,  741,  734,\n      733,  416,  736,  539,  541,  342,  542,  543,  552,  557,\n      559,  536,  567,  737,  755,  569,  735,  738,  123,  123,\n      123,  123,  123,  123,  123,  123,  123,  122,   11,  336,\n      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,\n      336,  336,  336,  336,  227,  227,  173,  577,  577,  577,\n      577,  577,  577,  577,  577,  577,  577,  577,   79,  178,\n      846,    8,   -3,   -3,   -3,   -3,  642,  706,  706,  706,\n      706,  157,  179,  242,  431,  431,  360,  431,  525,  368,\n      767,  767,  767,  767,  767,  767,  767,  767,  767,  767,\n      767,  767,  350,  375,  315,  315,  652,  652,  -81,  -81,\n      -81,  -81,  251,  185,  188,  184,  -62,  348,  195,  195,\n      195,  408,  392,  410,    1,  192,  129,  129,  129,  -24,\n      -24,  -24,  -24,  499,  -24,  -24,  -24,  113,  108,  108,\n       12,  161,  349,  526,  271,  398,  529,  438,  130,  206,\n      265,  427,   76,  414,  427,  288,  295,   76,  166,   44,\n      262,  422,  141,  491,  372,  494,  413,   71,   92,   93,\n      267,  135,  100,   34,  415,  745,  746,  742,  -38,  420,\n      -10,  135,  147,  744,  498,  107,   26,  493,  144,  377,\n      363,  369,  332,  363,  400,  377,  588,  377,  376,  377,\n      360,   37,  582,  376,  377,  374,  376,  388,  363,  364,\n      412,  369,  377,  441,  443,  390,  106,  332,  377,  390,\n      377,  400,   64,  590,  591,  323,  592,  589,  593,  649,\n      608,  362,  500,  399,  407,  620,  625,  636,  365,  354,\n      614,  524,  425,  359,  355,  423,  570,  578,  357,  406,\n      414,  394,  352,  403,  531,  433,  403,  653,  434,  385,\n      417,  411,  444,  310,  318,  501,  425,  668,  757,  380,\n      637,  684,  403,  609,  387,   87,  325,  638,  382,  403,\n      639,  403,  696,  503,  615,  403,  697,  384,  435,  425,\n      352,  352,  352,  700,   66,  699,  583,  702,  707,  704,\n      748,  721,  749,  584,  750,  358,  583,  722,  751,  682,\n      215,  613,  422,  436,  389,  447,  221,  257,  752,  403,\n      403,  506,  499,  403,  395,  685,  397,  426,  753,  392,\n      391,  647,  683,  403,  418,  754,  221,  723,  587,  724,\n      450,  568,  507,  648,  509,  327,  725,  353,  497,  610,\n      454,  622,  455,  461,  404,  510,  373,  732,  612,  247,\n      361,  664,  463,  405,  692,  641,  464,  465,  511,  343,\n      437,  335,  409,  396,  665,  293,  467,  468,  472,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,    0,    0,    0,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,   -2,\n       -2,   -2,   -2,  123,  123,  123,  123,  123,  123,  123,\n      123,  123,  123,  123,  123,  123,  123,  123,  123,  123,\n      123,  123,  123,  123,  123,  123,  123,  123,  123,  123,\n      123,  123,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,  123,  123,  123,  123,  123,  123,  123,  123,  123,\n      123,  123,  123,  123,  123,  123,  123,  123,  123,  123,\n      123,  767,  767,  767,  767,  767,  767,  767,  767,  767,\n      767,  767,  123,  123,  123,  123,  123,  123,  123,  123,\n        0,  129,  129,  129,  129,  -94,  -94,  -94,  767,  767,\n      767,  767,  767,  767,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,  -94,  -94,  129,  129,\n      767,  767,  -24,  -24,  -24,  -24,  -24,  108,  108,  108,\n      -24,  108,  145,  145,  145,  108,  108,  108,  100,  100,\n        0,    0,    0,    0,    0,    0,    0,  145,    0,    0,\n        0,  376,    0,    0,    0,  145,  260,  260,  221,  260,\n      260,  135,    0,    0,  425,  376,    0,  364,  376,    0,\n        0,    0,    0,    0,    0,  531,    0,   87,  637,  241,\n      425,    0,    0,    0,    0,    0,    0,    0,  425,  289,\n      289,  306,    0,  358,    0,    0,    0,  306,  241,    0,\n        0,  221\n];\n\nPHP.Parser.prototype.yydefault = [\n        3,32767,32767,    1,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,  104,   96,  110,   95,  106,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n      358,  358,  122,  122,  122,  122,  122,  122,  122,  122,\n      316,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n      173,  173,  173,32767,  348,  348,  348,  348,  348,  348,\n      348,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,  363,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,  232,  233,\n      235,  236,  172,  125,  349,  362,  171,  199,  201,  250,\n      200,  177,  182,  183,  184,  185,  186,  187,  188,  189,\n      190,  191,  192,  176,  229,  228,  197,  313,  313,  316,\n    32767,32767,32767,32767,32767,32767,32767,32767,  198,  202,\n      204,  203,  219,  220,  217,  218,  175,  221,  222,  223,\n      224,  157,  157,  157,  357,  357,32767,  357,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,  158,32767,  211,  212,  276,  276,  117,  117,\n      117,  117,  117,32767,32767,32767,32767,  284,32767,32767,\n    32767,32767,32767,  286,32767,32767,  206,  207,  205,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,  285,32767,\n    32767,32767,32767,32767,32767,32767,32767,  334,  321,  272,\n    32767,32767,32767,  265,32767,  107,  109,32767,32767,32767,\n    32767,  302,  339,32767,32767,32767,   17,32767,32767,32767,\n      370,  334,32767,32767,   19,32767,32767,32767,32767,  227,\n    32767,  338,  332,32767,32767,32767,32767,32767,32767,   63,\n    32767,32767,32767,32767,32767,   63,  281,   63,32767,   63,\n    32767,  315,  287,32767,   63,   74,32767,   72,32767,32767,\n       76,32767,   63,   93,   93,  254,  315,   54,   63,  254,\n       63,32767,32767,32767,32767,    4,32767,32767,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,32767,  267,32767,  323,32767,  337,  336,  324,32767,\n      265,32767,  215,  194,  266,32767,  196,32767,32767,  270,\n      273,32767,32767,32767,  134,32767,  268,  180,32767,32767,\n    32767,32767,  365,32767,32767,  174,32767,32767,32767,  130,\n    32767,   61,  332,32767,32767,  355,32767,32767,  332,  269,\n      208,  209,  210,32767,  121,32767,  310,32767,32767,32767,\n    32767,32767,32767,  327,32767,  333,32767,32767,32767,32767,\n      111,32767,  302,32767,32767,32767,   75,32767,32767,  178,\n      126,32767,32767,  364,32767,32767,32767,  320,32767,32767,\n    32767,32767,32767,   62,32767,32767,   77,32767,32767,32767,\n    32767,  332,32767,32767,32767,  115,32767,  169,32767,32767,\n    32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,\n    32767,  332,32767,32767,32767,32767,32767,32767,32767,    4,\n    32767,  151,32767,32767,32767,32767,32767,32767,32767,   25,\n       25,    3,  137,    3,  137,   25,  101,   25,   25,  137,\n       93,   93,   25,   25,   25,  144,   25,   25,   25,   25,\n       25,   25,   25,   25\n];\n\nPHP.Parser.prototype.yygoto = [\n      141,  141,  173,  173,  173,  173,  173,  173,  173,  173,\n      141,  173,  142,  143,  144,  148,  153,  155,  181,  175,\n      172,  172,  172,  172,  174,  174,  174,  174,  174,  174,\n      174,  168,  169,  170,  171,  179,  757,  758,  392,  760,\n      781,  782,  783,  784,  785,  786,  787,  789,  725,  145,\n      146,  147,  149,  150,  151,  152,  154,  177,  178,  180,\n      196,  208,  209,  210,  211,  212,  213,  214,  215,  217,\n      218,  219,  220,  244,  245,  266,  267,  268,  430,  431,\n      432,  182,  183,  184,  185,  186,  187,  188,  189,  190,\n      191,  192,  156,  157,  158,  159,  176,  160,  194,  161,\n      162,  163,  164,  195,  165,  193,  139,  166,  167,  452,\n      452,  452,  452,  452,  452,  452,  452,  452,  452,  452,\n      453,  453,  453,  453,  453,  453,  453,  453,  453,  453,\n      453,  551,  551,  551,  464,  491,  394,  394,  394,  394,\n      394,  394,  394,  394,  394,  394,  394,  394,  394,  394,\n      394,  394,  394,  394,  407,  552,  552,  552,  810,  810,\n      662,  662,  662,  662,  662,  594,  283,  595,  510,  399,\n      399,  567,  679,  632,  849,  850,  863,  660,  714,  426,\n      222,  622,  622,  622,  622,  223,  617,  623,  494,  395,\n      395,  395,  395,  395,  395,  395,  395,  395,  395,  395,\n      395,  395,  395,  395,  395,  395,  395,  465,  472,  514,\n      904,  398,  398,  425,  425,  459,  425,  419,  322,  421,\n      421,  393,  396,  412,  422,  428,  460,  463,  473,  481,\n      501,    5,  476,  284,  327,    1,   15,    2,    6,    7,\n      550,  550,  550,    8,    9,   10,  668,   16,   11,   17,\n       12,   18,   13,   19,   14,  704,  328,  881,  881,  643,\n      628,  626,  626,  624,  626,  526,  401,  652,  647,  847,\n      847,  847,  847,  847,  847,  847,  847,  847,  847,  847,\n      437,  438,  441,  447,  477,  479,  497,  290,  910,  910,\n      400,  400,  486,  880,  880,  263,  913,  910,  303,  255,\n      723,  306,  822,  821,  306,  896,  896,  896,  861,  304,\n      323,  410,  913,  913,  897,  316,  420,  769,  658,  559,\n      879,  671,  536,  324,  466,  565,  311,  311,  311,  801,\n      241,  676,  496,  439,  440,  442,  444,  448,  475,  631,\n      858,  311,  285,  286,  603,  495,  712,    0,  406,  321,\n        0,    0,    0,  314,    0,    0,  429,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n        0,    0,    0,    0,  411\n];\n\nPHP.Parser.prototype.yygcheck = [\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   35,\n       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,\n       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,\n       86,    6,    6,    6,   21,   21,   35,   35,   35,   35,\n       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,\n       35,   35,   35,   35,   71,    7,    7,    7,   35,   35,\n       35,   35,   35,   35,   35,   29,   44,   29,   35,   86,\n       86,   12,   12,   12,   12,   12,   12,   12,   12,   75,\n       40,   35,   35,   35,   35,   40,   35,   35,   35,   82,\n       82,   82,   82,   82,   82,   82,   82,   82,   82,   82,\n       82,   82,   82,   82,   82,   82,   82,   36,   36,   36,\n      104,   82,   82,   28,   28,   28,   28,   28,   28,   28,\n       28,   28,   28,   28,   28,   28,   28,   28,   28,   28,\n       28,   13,   42,   42,   42,    2,   13,    2,   13,   13,\n        5,    5,    5,   13,   13,   13,   54,   13,   13,   13,\n       13,   13,   13,   13,   13,   67,   67,   83,   83,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,   93,\n       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,\n       52,   52,   52,   52,   52,   52,   52,    4,  105,  105,\n       89,   89,   94,   84,   84,   92,  105,  105,   26,   92,\n       71,    4,   91,   91,    4,   84,   84,   84,   97,   30,\n       70,   30,  105,  105,  102,   27,   30,   72,   50,   10,\n       84,   55,   46,    9,   30,   11,   90,   90,   90,   80,\n       30,   56,   30,   85,   85,   85,   85,   85,   85,   43,\n       96,   90,   44,   44,   34,   77,   69,   -1,    4,   90,\n       -1,   -1,   -1,    4,   -1,   -1,    4,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,\n       -1,   -1,   -1,   -1,   71\n];\n\nPHP.Parser.prototype.yygbase = [\n        0,    0, -286,    0,   10,  239,  130,  154,    0,  -10,\n       25,  -23,  -29, -289,    0,  -30,    0,    0,    0,    0,\n        0,   83,    0,    0,    0,    0,  245,   84,  -11,  142,\n      -28,    0,    0,    0,  -13,  -88,  -42,    0,    0,    0,\n     -344,    0,  -38,  -12, -188,    0,   23,    0,    0,    0,\n       66,    0,  247,    0,  205,   24,  -18,    0,    0,    0,\n        0,    0,    0,    0,    0,    0,    0,   13,    0,  -15,\n       85,   74,   70,    0,    0,  148,    0,  -14,    0,    0,\n       -6,    0,  -35,   11,   47,  278,  -77,    0,    0,   44,\n       68,   43,   38,   72,   94,    0,  -16,  109,    0,    0,\n        0,    0,   87,    0,  170,   34,    0\n];\n\nPHP.Parser.prototype.yygdefault = [\n    -32768,  362,    3,  546,  382,  570,  571,  572,  307,  305,\n      560,  566,  467,    4,  568,  140,  295,  575,  296,  500,\n      577,  414,  579,  580,  308,  309,  415,  315,  216,  593,\n      503,  313,  596,  357,  602,  301,  449,  383,  350,  461,\n      221,  423,  456,  630,  282,  638,  540,  646,  649,  450,\n      657,  352,  433,  434,  667,  672,  677,  680,  334,  325,\n      474,  684,  685,  256,  689,  511,  512,  703,  242,  711,\n      317,  724,  342,  788,  790,  397,  408,  484,  797,  326,\n      800,  384,  385,  386,  387,  435,  818,  815,  289,  866,\n      287,  443,  254,  853,  468,  356,  903,  862,  288,  388,\n      389,  302,  898,  341,  905,  912,  458\n];\n\nPHP.Parser.prototype.yylhs = [\n        0,    1,    2,    2,    4,    4,    3,    3,    3,    3,\n        3,    3,    3,    3,    3,    8,    8,   10,   10,   10,\n       10,    9,    9,   11,   13,   13,   14,   14,   14,   14,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,\n        5,    5,    5,    5,    5,    5,    5,    5,   33,   33,\n       34,   27,   27,   30,   30,    6,    7,    7,    7,   37,\n       37,   37,   38,   38,   41,   41,   39,   39,   42,   42,\n       22,   22,   29,   29,   32,   32,   31,   31,   43,   23,\n       23,   23,   23,   44,   44,   45,   45,   46,   46,   20,\n       20,   16,   16,   47,   18,   18,   48,   17,   17,   19,\n       19,   36,   36,   49,   49,   50,   50,   51,   51,   51,\n       51,   52,   52,   53,   53,   54,   54,   24,   24,   55,\n       55,   55,   25,   25,   56,   56,   40,   40,   57,   57,\n       57,   57,   62,   62,   63,   63,   64,   64,   64,   64,\n       65,   66,   66,   61,   61,   58,   58,   60,   60,   68,\n       68,   67,   67,   67,   67,   67,   67,   59,   59,   69,\n       69,   26,   26,   21,   21,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,\n       15,   15,   15,   71,   77,   77,   79,   79,   80,   81,\n       81,   81,   81,   81,   81,   86,   86,   35,   35,   35,\n       72,   72,   87,   87,   82,   82,   88,   88,   88,   88,\n       88,   73,   73,   73,   76,   76,   76,   78,   78,   93,\n       93,   93,   93,   93,   93,   93,   93,   93,   93,   93,\n       93,   93,   93,   12,   12,   12,   12,   12,   12,   74,\n       74,   74,   74,   94,   94,   96,   96,   95,   95,   97,\n       97,   28,   28,   28,   28,   99,   99,   98,   98,   98,\n       98,   98,  100,  100,   84,   84,   89,   89,   83,   83,\n      101,  101,  101,  101,   90,   90,   90,   90,   85,   85,\n       91,   91,   91,   70,   70,  102,  102,  102,   75,   75,\n      103,  103,  104,  104,  104,  104,   92,   92,   92,   92,\n      105,  105,  105,  105,  105,  105,  105,  106,  106,  106\n];\n\nPHP.Parser.prototype.yylen = [\n        1,    1,    2,    0,    1,    3,    1,    1,    1,    1,\n        3,    5,    4,    3,    3,    3,    1,    1,    3,    2,\n        4,    3,    1,    3,    2,    0,    1,    1,    1,    1,\n        3,    7,   10,    5,    7,    9,    5,    2,    3,    2,\n        3,    2,    3,    3,    3,    3,    1,    2,    5,    7,\n        8,   10,    5,    1,    5,    3,    3,    2,    1,    2,\n        8,    1,    3,    0,    1,    9,    7,    6,    5,    1,\n        2,    2,    0,    2,    0,    2,    0,    2,    1,    3,\n        1,    4,    1,    4,    1,    4,    1,    3,    3,    3,\n        4,    4,    5,    0,    2,    4,    3,    1,    1,    1,\n        4,    0,    2,    5,    0,    2,    6,    0,    2,    0,\n        3,    1,    0,    1,    3,    3,    5,    0,    1,    1,\n        1,    1,    0,    1,    3,    1,    2,    3,    1,    1,\n        2,    4,    3,    1,    1,    3,    2,    0,    3,    3,\n        8,    3,    1,    3,    0,    2,    4,    5,    4,    4,\n        3,    1,    1,    1,    3,    1,    1,    0,    1,    1,\n        2,    1,    1,    1,    1,    1,    1,    1,    3,    1,\n        3,    3,    1,    0,    1,    1,    6,    3,    4,    4,\n        1,    2,    3,    3,    3,    3,    3,    3,    3,    3,\n        3,    3,    3,    2,    2,    2,    2,    3,    3,    3,\n        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,\n        3,    3,    3,    2,    2,    2,    2,    3,    3,    3,\n        3,    3,    3,    3,    3,    3,    3,    3,    5,    4,\n        4,    4,    2,    2,    4,    2,    2,    2,    2,    2,\n        2,    2,    2,    2,    2,    2,    1,    4,    3,    3,\n        2,    9,   10,    3,    0,    4,    1,    3,    2,    4,\n        6,    8,    4,    4,    4,    1,    1,    1,    2,    3,\n        1,    1,    1,    1,    1,    1,    0,    3,    3,    4,\n        4,    0,    2,    3,    0,    1,    1,    0,    3,    1,\n        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,\n        3,    2,    1,    1,    3,    2,    2,    4,    3,    1,\n        3,    3,    3,    0,    2,    0,    1,    3,    1,    3,\n        1,    1,    1,    1,    1,    6,    4,    3,    6,    4,\n        4,    4,    1,    3,    1,    2,    1,    1,    4,    1,\n        3,    6,    4,    4,    4,    4,    1,    4,    0,    1,\n        1,    3,    1,    3,    1,    1,    4,    0,    0,    2,\n        3,    1,    3,    1,    4,    2,    2,    2,    1,    2,\n        1,    4,    3,    3,    3,    6,    3,    1,    1,    1\n];\n\n\n\n\n\n\n\nPHP.Parser.prototype.yyn0 = function () {\n    this.yyval = this.yyastk[ this.stackPos ];\n};\n\nPHP.Parser.prototype.yyn1 = function ( attributes ) {\n     this.yyval = this.Stmt_Namespace_postprocess(this.yyastk[ this.stackPos-(1-1) ]); \n};\n\nPHP.Parser.prototype.yyn2 = function ( attributes ) {\n     if (Array.isArray(this.yyastk[ this.stackPos-(2-2) ])) { this.yyval = this.yyastk[ this.stackPos-(2-1) ].concat( this.yyastk[ this.stackPos-(2-2) ]); } else { this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; }; \n};\n\nPHP.Parser.prototype.yyn3 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn4 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn5 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn6 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn7 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn8 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn9 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_HaltCompiler(attributes); \n};\n\nPHP.Parser.prototype.yyn10 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Namespace(this.Node_Name(this.yyastk[ this.stackPos-(3-2) ], attributes), null, attributes); \n};\n\nPHP.Parser.prototype.yyn11 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Namespace(this.Node_Name(this.yyastk[ this.stackPos-(5-2) ], attributes), this.yyastk[ this.stackPos-(5-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn12 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Namespace(null, this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn13 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Use(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn14 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Const(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn15 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn16 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn17 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[ this.stackPos-(1-1) ], attributes), null, attributes); \n};\n\nPHP.Parser.prototype.yyn18 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[ this.stackPos-(3-1) ], attributes), this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn19 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[ this.stackPos-(2-2) ], attributes), null, attributes); \n};\n\nPHP.Parser.prototype.yyn20 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[ this.stackPos-(4-2) ], attributes), this.yyastk[ this.stackPos-(4-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn21 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn22 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn23 = function ( attributes ) {\n     this.yyval = this.Node_Const(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn24 = function ( attributes ) {\n     if (Array.isArray(this.yyastk[ this.stackPos-(2-2) ])) { this.yyval = this.yyastk[ this.stackPos-(2-1) ].concat( this.yyastk[ this.stackPos-(2-2) ]); } else { this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; }; \n};\n\nPHP.Parser.prototype.yyn25 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn26 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn27 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn28 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn29 = function ( attributes ) {\n     throw new Error('__halt_compiler() can only be used from the outermost scope'); \n};\n\nPHP.Parser.prototype.yyn30 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn31 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_If(this.yyastk[ this.stackPos-(7-3) ], {'stmts':  Array.isArray(this.yyastk[ this.stackPos-(7-5) ]) ? this.yyastk[ this.stackPos-(7-5) ] : [this.yyastk[ this.stackPos-(7-5) ]], 'elseifs':  this.yyastk[ this.stackPos-(7-6) ], 'Else':  this.yyastk[ this.stackPos-(7-7) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn32 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_If(this.yyastk[ this.stackPos-(10-3) ], {'stmts':  this.yyastk[ this.stackPos-(10-6) ], 'elseifs':  this.yyastk[ this.stackPos-(10-7) ], 'else':  this.yyastk[ this.stackPos-(10-8) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn33 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_While(this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); \n};\n\nPHP.Parser.prototype.yyn34 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Do(this.yyastk[ this.stackPos-(7-5) ], Array.isArray(this.yyastk[ this.stackPos-(7-2) ]) ? this.yyastk[ this.stackPos-(7-2) ] : [this.yyastk[ this.stackPos-(7-2) ]], attributes); \n};\n\nPHP.Parser.prototype.yyn35 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_For({'init':  this.yyastk[ this.stackPos-(9-3) ], 'cond':  this.yyastk[ this.stackPos-(9-5) ], 'loop':  this.yyastk[ this.stackPos-(9-7) ], 'stmts':  this.yyastk[ this.stackPos-(9-9) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn36 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Switch(this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); \n};\n\nPHP.Parser.prototype.yyn37 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Break(null, attributes); \n};\n\nPHP.Parser.prototype.yyn38 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Break(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn39 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Continue(null, attributes); \n};\n\nPHP.Parser.prototype.yyn40 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Continue(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn41 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Return(null, attributes); \n};\n\nPHP.Parser.prototype.yyn42 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Return(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn43 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Global(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn44 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Static(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn45 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Echo(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn46 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_InlineHTML(this.yyastk[ this.stackPos-(1-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn47 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn48 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Unset(this.yyastk[ this.stackPos-(5-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn49 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Foreach(this.yyastk[ this.stackPos-(7-3) ], this.yyastk[ this.stackPos-(7-5) ], {'keyVar':  null, 'byRef':  false, 'stmts':  this.yyastk[ this.stackPos-(7-7) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn50 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Foreach(this.yyastk[ this.stackPos-(8-3) ], this.yyastk[ this.stackPos-(8-6) ], {'keyVar':  null, 'byRef':  true, 'stmts':  this.yyastk[ this.stackPos-(8-8) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn51 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Foreach(this.yyastk[ this.stackPos-(10-3) ], this.yyastk[ this.stackPos-(10-8) ], {'keyVar':  this.yyastk[ this.stackPos-(10-5) ], 'byRef':  this.yyastk[ this.stackPos-(10-7) ], 'stmts':  this.yyastk[ this.stackPos-(10-10) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn52 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Declare(this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); \n};\n\nPHP.Parser.prototype.yyn53 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn54 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_TryCatch(this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); \n};\n\nPHP.Parser.prototype.yyn55 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Throw(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn56 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Goto(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn57 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Label(this.yyastk[ this.stackPos-(2-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn58 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn59 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn60 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Catch(this.yyastk[ this.stackPos-(8-3) ], this.yyastk[ this.stackPos-(8-4) ].substring( 1 ), this.yyastk[ this.stackPos-(8-7) ], attributes); \n};\n\nPHP.Parser.prototype.yyn61 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn62 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn63 = function ( attributes ) {\n     this.yyval = false; \n};\n\nPHP.Parser.prototype.yyn64 = function ( attributes ) {\n     this.yyval = true; \n};\n\nPHP.Parser.prototype.yyn65 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Function(this.yyastk[ this.stackPos-(9-3) ], {'byRef':  this.yyastk[ this.stackPos-(9-2) ], 'params':  this.yyastk[ this.stackPos-(9-5) ], 'stmts':  this.yyastk[ this.stackPos-(9-8) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn66 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Class(this.yyastk[ this.stackPos-(7-2) ], {'type':  this.yyastk[ this.stackPos-(7-1) ], 'Extends':  this.yyastk[ this.stackPos-(7-3) ], 'Implements':  this.yyastk[ this.stackPos-(7-4) ], 'stmts':  this.yyastk[ this.stackPos-(7-6) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn67 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Interface(this.yyastk[ this.stackPos-(6-2) ], {'Extends':  this.yyastk[ this.stackPos-(6-3) ], 'stmts':  this.yyastk[ this.stackPos-(6-5) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn68 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Trait(this.yyastk[ this.stackPos-(5-2) ], this.yyastk[ this.stackPos-(5-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn69 = function ( attributes ) {\n     this.yyval = 0; \n};\n\nPHP.Parser.prototype.yyn70 = function ( attributes ) {\n     this.yyval = this.MODIFIER_ABSTRACT; \n};\n\nPHP.Parser.prototype.yyn71 = function ( attributes ) {\n     this.yyval = this.MODIFIER_FINAL; \n};\n\nPHP.Parser.prototype.yyn72 = function ( attributes ) {\n     this.yyval = null; \n};\n\nPHP.Parser.prototype.yyn73 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(2-2) ]; \n};\n\nPHP.Parser.prototype.yyn74 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn75 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(2-2) ]; \n};\n\nPHP.Parser.prototype.yyn76 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn77 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(2-2) ]; \n};\n\nPHP.Parser.prototype.yyn78 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn79 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn80 = function ( attributes ) {\n     this.yyval = Array.isArray(this.yyastk[ this.stackPos-(1-1) ]) ? this.yyastk[ this.stackPos-(1-1) ] : [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn81 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; \n};\n\nPHP.Parser.prototype.yyn82 = function ( attributes ) {\n     this.yyval = Array.isArray(this.yyastk[ this.stackPos-(1-1) ]) ? this.yyastk[ this.stackPos-(1-1) ] : [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn83 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; \n};\n\nPHP.Parser.prototype.yyn84 = function ( attributes ) {\n     this.yyval = Array.isArray(this.yyastk[ this.stackPos-(1-1) ]) ? this.yyastk[ this.stackPos-(1-1) ] : [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn85 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; \n};\n\nPHP.Parser.prototype.yyn86 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn87 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn88 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_DeclareDeclare(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn89 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn90 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(4-3) ]; \n};\n\nPHP.Parser.prototype.yyn91 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; \n};\n\nPHP.Parser.prototype.yyn92 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(5-3) ]; \n};\n\nPHP.Parser.prototype.yyn93 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn94 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn95 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Case(this.yyastk[ this.stackPos-(4-2) ], this.yyastk[ this.stackPos-(4-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn96 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Case(null, this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn97 = function () {\n    this.yyval = this.yyastk[ this.stackPos ];\n};\n\nPHP.Parser.prototype.yyn98 = function () {\n    this.yyval = this.yyastk[ this.stackPos ];\n};\n\nPHP.Parser.prototype.yyn99 = function ( attributes ) {\n     this.yyval = Array.isArray(this.yyastk[ this.stackPos-(1-1) ]) ? this.yyastk[ this.stackPos-(1-1) ] : [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn100 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(4-2) ]; \n};\n\nPHP.Parser.prototype.yyn101 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn102 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn103 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_ElseIf(this.yyastk[ this.stackPos-(5-3) ], Array.isArray(this.yyastk[ this.stackPos-(5-5) ]) ? this.yyastk[ this.stackPos-(5-5) ] : [this.yyastk[ this.stackPos-(5-5) ]], attributes); \n};\n\nPHP.Parser.prototype.yyn104 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn105 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn106 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_ElseIf(this.yyastk[ this.stackPos-(6-3) ], this.yyastk[ this.stackPos-(6-6) ], attributes); \n};\n\nPHP.Parser.prototype.yyn107 = function ( attributes ) {\n     this.yyval = null; \n};\n\nPHP.Parser.prototype.yyn108 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Else(Array.isArray(this.yyastk[ this.stackPos-(2-2) ]) ? this.yyastk[ this.stackPos-(2-2) ] : [this.yyastk[ this.stackPos-(2-2) ]], attributes); \n};\n\nPHP.Parser.prototype.yyn109 = function ( attributes ) {\n     this.yyval = null; \n};\n\nPHP.Parser.prototype.yyn110 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Else(this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn111 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn112 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn113 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn114 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn115 = function ( attributes ) {\n     this.yyval = this.Node_Param(this.yyastk[ this.stackPos-(3-3) ].substring( 1 ), null, this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn116 = function ( attributes ) {\n     this.yyval = this.Node_Param(this.yyastk[ this.stackPos-(5-3) ].substring( 1 ), this.yyastk[ this.stackPos-(5-5) ], this.yyastk[ this.stackPos-(5-1) ], this.yyastk[ this.stackPos-(5-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn117 = function ( attributes ) {\n     this.yyval = null; \n};\n\nPHP.Parser.prototype.yyn118 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn119 = function ( attributes ) {\n     this.yyval = 'array'; \n};\n\nPHP.Parser.prototype.yyn120 = function ( attributes ) {\n     this.yyval = 'callable'; \n};\n\nPHP.Parser.prototype.yyn121 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn122 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn123 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn124 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn125 = function ( attributes ) {\n     this.yyval = this.Node_Arg(this.yyastk[ this.stackPos-(1-1) ], false, attributes); \n};\n\nPHP.Parser.prototype.yyn126 = function ( attributes ) {\n     this.yyval = this.Node_Arg(this.yyastk[ this.stackPos-(2-2) ], true, attributes); \n};\n\nPHP.Parser.prototype.yyn127 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn128 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn129 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), attributes); \n};\n\nPHP.Parser.prototype.yyn130 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn131 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn132 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn133 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn134 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_StaticVar(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), null, attributes); \n};\n\nPHP.Parser.prototype.yyn135 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_StaticVar(this.yyastk[ this.stackPos-(3-1) ].substring( 1 ), this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn136 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn137 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn138 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_Property(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn139 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_ClassConst(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn140 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_ClassMethod(this.yyastk[ this.stackPos-(8-4) ], {'type':  this.yyastk[ this.stackPos-(8-1) ], 'byRef':  this.yyastk[ this.stackPos-(8-3) ], 'params':  this.yyastk[ this.stackPos-(8-6) ], 'stmts':  this.yyastk[ this.stackPos-(8-8) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn141 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_TraitUse(this.yyastk[ this.stackPos-(3-2) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn142 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn143 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn144 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn145 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn146 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_TraitUseAdaptation_Precedence(this.yyastk[ this.stackPos-(4-1) ][0], this.yyastk[ this.stackPos-(4-1) ][1], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn147 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_TraitUseAdaptation_Alias(this.yyastk[ this.stackPos-(5-1) ][0], this.yyastk[ this.stackPos-(5-1) ][1], this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn148 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_TraitUseAdaptation_Alias(this.yyastk[ this.stackPos-(4-1) ][0], this.yyastk[ this.stackPos-(4-1) ][1], this.yyastk[ this.stackPos-(4-3) ], null, attributes); \n};\n\nPHP.Parser.prototype.yyn149 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_TraitUseAdaptation_Alias(this.yyastk[ this.stackPos-(4-1) ][0], this.yyastk[ this.stackPos-(4-1) ][1], null, this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn150 = function ( attributes ) {\n     this.yyval = array(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ]); \n};\n\nPHP.Parser.prototype.yyn151 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn152 = function ( attributes ) {\n     this.yyval = array(null, this.yyastk[ this.stackPos-(1-1) ]); \n};\n\nPHP.Parser.prototype.yyn153 = function ( attributes ) {\n     this.yyval = null; \n};\n\nPHP.Parser.prototype.yyn154 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn155 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn156 = function ( attributes ) {\n     this.yyval = this.MODIFIER_PUBLIC; \n};\n\nPHP.Parser.prototype.yyn157 = function ( attributes ) {\n     this.yyval = this.MODIFIER_PUBLIC; \n};\n\nPHP.Parser.prototype.yyn158 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn159 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn160 = function ( attributes ) {\n     this.Stmt_Class_verifyModifier(this.yyastk[ this.stackPos-(2-1) ], this.yyastk[ this.stackPos-(2-2) ]); this.yyval = this.yyastk[ this.stackPos-(2-1) ] | this.yyastk[ this.stackPos-(2-2) ]; \n};\n\nPHP.Parser.prototype.yyn161 = function ( attributes ) {\n     this.yyval = this.MODIFIER_PUBLIC; \n};\n\nPHP.Parser.prototype.yyn162 = function ( attributes ) {\n     this.yyval = this.MODIFIER_PROTECTED; \n};\n\nPHP.Parser.prototype.yyn163 = function ( attributes ) {\n     this.yyval = this.MODIFIER_PRIVATE; \n};\n\nPHP.Parser.prototype.yyn164 = function ( attributes ) {\n     this.yyval = this.MODIFIER_STATIC; \n};\n\nPHP.Parser.prototype.yyn165 = function ( attributes ) {\n     this.yyval = this.MODIFIER_ABSTRACT; \n};\n\nPHP.Parser.prototype.yyn166 = function ( attributes ) {\n     this.yyval = this.MODIFIER_FINAL; \n};\n\nPHP.Parser.prototype.yyn167 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn168 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn169 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_PropertyProperty(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), null, attributes); \n};\n\nPHP.Parser.prototype.yyn170 = function ( attributes ) {\n     this.yyval = this.Node_Stmt_PropertyProperty(this.yyastk[ this.stackPos-(3-1) ].substring( 1 ), this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn171 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn172 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn173 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn174 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn175 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn176 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignList(this.yyastk[ this.stackPos-(6-3) ], this.yyastk[ this.stackPos-(6-6) ], attributes); \n};\n\nPHP.Parser.prototype.yyn177 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Assign(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn178 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignRef(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn179 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignRef(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn180 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn181 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Clone(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn182 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignPlus(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn183 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignMinus(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn184 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignMul(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn185 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignDiv(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn186 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignConcat(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn187 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignMod(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn188 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignBitwiseAnd(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn189 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignBitwiseOr(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn190 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignBitwiseXor(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn191 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignShiftLeft(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn192 = function ( attributes ) {\n     this.yyval = this.Node_Expr_AssignShiftRight(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn193 = function ( attributes ) {\n     this.yyval = this.Node_Expr_PostInc(this.yyastk[ this.stackPos-(2-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn194 = function ( attributes ) {\n     this.yyval = this.Node_Expr_PreInc(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn195 = function ( attributes ) {\n     this.yyval = this.Node_Expr_PostDec(this.yyastk[ this.stackPos-(2-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn196 = function ( attributes ) {\n     this.yyval = this.Node_Expr_PreDec(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn197 = function ( attributes ) {\n     this.yyval = this.Node_Expr_BooleanOr(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn198 = function ( attributes ) {\n     this.yyval = this.Node_Expr_BooleanAnd(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn199 = function ( attributes ) {\n     this.yyval = this.Node_Expr_LogicalOr(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn200 = function ( attributes ) {\n     this.yyval = this.Node_Expr_LogicalAnd(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn201 = function ( attributes ) {\n     this.yyval = this.Node_Expr_LogicalXor(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn202 = function ( attributes ) {\n     this.yyval = this.Node_Expr_BitwiseOr(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn203 = function ( attributes ) {\n     this.yyval = this.Node_Expr_BitwiseAnd(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn204 = function ( attributes ) {\n     this.yyval = this.Node_Expr_BitwiseXor(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn205 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Concat(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn206 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Plus(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn207 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Minus(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn208 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Mul(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn209 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Div(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn210 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Mod(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn211 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ShiftLeft(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn212 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ShiftRight(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn213 = function ( attributes ) {\n     this.yyval = this.Node_Expr_UnaryPlus(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn214 = function ( attributes ) {\n     this.yyval = this.Node_Expr_UnaryMinus(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn215 = function ( attributes ) {\n     this.yyval = this.Node_Expr_BooleanNot(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn216 = function ( attributes ) {\n     this.yyval = this.Node_Expr_BitwiseNot(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn217 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Identical(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn218 = function ( attributes ) {\n     this.yyval = this.Node_Expr_NotIdentical(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn219 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Equal(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn220 = function ( attributes ) {\n     this.yyval = this.Node_Expr_NotEqual(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn221 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Smaller(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn222 = function ( attributes ) {\n     this.yyval = this.Node_Expr_SmallerOrEqual(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn223 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Greater(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn224 = function ( attributes ) {\n     this.yyval = this.Node_Expr_GreaterOrEqual(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn225 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Instanceof(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn226 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn227 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn228 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Ternary(this.yyastk[ this.stackPos-(5-1) ], this.yyastk[ this.stackPos-(5-3) ], this.yyastk[ this.stackPos-(5-5) ], attributes); \n};\n\nPHP.Parser.prototype.yyn229 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Ternary(this.yyastk[ this.stackPos-(4-1) ], null, this.yyastk[ this.stackPos-(4-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn230 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Isset(this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn231 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Empty(this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn232 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Include(this.yyastk[ this.stackPos-(2-2) ], \"Node_Expr_Include\", attributes); \n};\n\nPHP.Parser.prototype.yyn233 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Include(this.yyastk[ this.stackPos-(2-2) ], \"Node_Expr_IncludeOnce\", attributes); \n};\n\nPHP.Parser.prototype.yyn234 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Eval(this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn235 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Include(this.yyastk[ this.stackPos-(2-2) ], \"Node_Expr_Require\", attributes); \n};\n\nPHP.Parser.prototype.yyn236 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Include(this.yyastk[ this.stackPos-(2-2) ], \"Node_Expr_RequireOnce\", attributes); \n};\n\nPHP.Parser.prototype.yyn237 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Cast_Int(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn238 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Cast_Double(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn239 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Cast_String(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn240 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Cast_Array(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn241 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Cast_Object(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn242 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Cast_Bool(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn243 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Cast_Unset(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn244 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Exit(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn245 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ErrorSuppress(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn246 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn247 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Array(this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn248 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Array(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn249 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ShellExec(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn250 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Print(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn251 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Closure({'static':  false, 'byRef':  this.yyastk[ this.stackPos-(9-2) ], 'params':  this.yyastk[ this.stackPos-(9-4) ], 'uses':  this.yyastk[ this.stackPos-(9-6) ], 'stmts':  this.yyastk[ this.stackPos-(9-8) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn252 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Closure({'static':  true, 'byRef':  this.yyastk[ this.stackPos-(10-3) ], 'params':  this.yyastk[ this.stackPos-(10-5) ], 'uses':  this.yyastk[ this.stackPos-(10-7) ], 'stmts':  this.yyastk[ this.stackPos-(10-9) ]}, attributes); \n};\n\nPHP.Parser.prototype.yyn253 = function ( attributes ) {\n     this.yyval = this.Node_Expr_New(this.yyastk[ this.stackPos-(3-2) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn254 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn255 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(4-3) ]; \n};\n\nPHP.Parser.prototype.yyn256 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn257 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn258 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ClosureUse(this.yyastk[ this.stackPos-(2-2) ].substring( 1 ), this.yyastk[ this.stackPos-(2-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn259 = function ( attributes ) {\n     this.yyval = this.Node_Expr_FuncCall(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn260 = function ( attributes ) {\n     this.yyval = this.Node_Expr_StaticCall(this.yyastk[ this.stackPos-(6-1) ], this.yyastk[ this.stackPos-(6-3) ], this.yyastk[ this.stackPos-(6-5) ], attributes); \n};\n\nPHP.Parser.prototype.yyn261 = function ( attributes ) {\n     this.yyval = this.Node_Expr_StaticCall(this.yyastk[ this.stackPos-(8-1) ], this.yyastk[ this.stackPos-(8-4) ], this.yyastk[ this.stackPos-(8-7) ], attributes); \n};\n\nPHP.Parser.prototype.yyn262 = function ( attributes ) {\n    \n            if (this.yyastk[ this.stackPos-(4-1) ].type === \"Node_Expr_StaticPropertyFetch\") {\n                this.yyval = this.Node_Expr_StaticCall(this.yyastk[ this.stackPos-(4-1) ].Class, this.Node_Expr_Variable(this.yyastk[ this.stackPos-(4-1) ].name, attributes), this.yyastk[ this.stackPos-(4-3) ], attributes);\n            } else if (this.yyastk[ this.stackPos-(4-1) ].type === \"Node_Expr_ArrayDimFetch\") {\n                var tmp = this.yyastk[ this.stackPos-(4-1) ];\n                while (tmp.variable.type === \"Node_Expr_ArrayDimFetch\") {\n                    tmp = tmp.variable;\n                }\n\n                this.yyval = this.Node_Expr_StaticCall(tmp.variable.Class, this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes);\n                tmp.variable = this.Node_Expr_Variable(tmp.variable.name, attributes);\n            } else {\n                throw new Exception;\n            }\n          \n};\n\nPHP.Parser.prototype.yyn263 = function ( attributes ) {\n     this.yyval = this.Node_Expr_FuncCall(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn264 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn265 = function ( attributes ) {\n     this.yyval = this.Node_Name('static', attributes); \n};\n\nPHP.Parser.prototype.yyn266 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn267 = function ( attributes ) {\n     this.yyval = this.Node_Name(this.yyastk[ this.stackPos-(1-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn268 = function ( attributes ) {\n     this.yyval = this.Node_Name_FullyQualified(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn269 = function ( attributes ) {\n     this.yyval = this.Node_Name_Relative(this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn270 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn271 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn272 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn273 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn274 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn275 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn276 = function () {\n    this.yyval = this.yyastk[ this.stackPos ];\n};\n\nPHP.Parser.prototype.yyn277 = function ( attributes ) {\n     this.yyval = this.Node_Expr_PropertyFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn278 = function ( attributes ) {\n     this.yyval = this.Node_Expr_PropertyFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn279 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn280 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn281 = function ( attributes ) {\n     this.yyval = null; \n};\n\nPHP.Parser.prototype.yyn282 = function ( attributes ) {\n     this.yyval = null; \n};\n\nPHP.Parser.prototype.yyn283 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn284 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn285 = function ( attributes ) {\n     this.yyval = [this.Scalar_String_parseEscapeSequences(this.yyastk[ this.stackPos-(1-1) ], '`')]; \n};\n\nPHP.Parser.prototype.yyn286 = function ( attributes ) {\n     ; this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn287 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn288 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn289 = function ( attributes ) {\n     this.yyval = this.Node_Scalar_LNumber(this.Scalar_LNumber_parse(this.yyastk[ this.stackPos-(1-1) ]), attributes); \n};\n\nPHP.Parser.prototype.yyn290 = function ( attributes ) {\n     this.yyval = this.Node_Scalar_DNumber(this.Scalar_DNumber_parse(this.yyastk[ this.stackPos-(1-1) ]), attributes); \n};\n\nPHP.Parser.prototype.yyn291 = function ( attributes ) {\n     this.yyval = this.Scalar_String_create(this.yyastk[ this.stackPos-(1-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn292 = function ( attributes ) {\n     this.yyval = {type: \"Node_Scalar_LineConst\", attributes: attributes}; \n};\n\nPHP.Parser.prototype.yyn293 = function ( attributes ) {\n     this.yyval = {type: \"Node_Scalar_FileConst\", attributes: attributes}; \n};\n\nPHP.Parser.prototype.yyn294 = function ( attributes ) {\n     this.yyval = {type: \"Node_Scalar_DirConst\", attributes: attributes}; \n};\n\nPHP.Parser.prototype.yyn295 = function ( attributes ) {\n     this.yyval = {type: \"Node_Scalar_ClassConst\", attributes: attributes}; \n};\n\nPHP.Parser.prototype.yyn296 = function ( attributes ) {\n     this.yyval = {type: \"Node_Scalar_TraitConst\", attributes: attributes}; \n};\n\nPHP.Parser.prototype.yyn297 = function ( attributes ) {\n     this.yyval = {type: \"Node_Scalar_MethodConst\", attributes: attributes}; \n};\n\nPHP.Parser.prototype.yyn298 = function ( attributes ) {\n     this.yyval = {type: \"Node_Scalar_FuncConst\", attributes: attributes}; \n};\n\nPHP.Parser.prototype.yyn299 = function ( attributes ) {\n     this.yyval = {type: \"Node_Scalar_NSConst\", attributes: attributes}; \n};\n\nPHP.Parser.prototype.yyn300 = function ( attributes ) {\n     this.yyval = this.Node_Scalar_String(this.Scalar_String_parseDocString(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-2) ]), attributes); \n};\n\nPHP.Parser.prototype.yyn301 = function ( attributes ) {\n     this.yyval = this.Node_Scalar_String('', attributes); \n};\n\nPHP.Parser.prototype.yyn302 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ConstFetch(this.yyastk[ this.stackPos-(1-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn303 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn304 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ClassConstFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn305 = function ( attributes ) {\n     this.yyval = this.Node_Expr_UnaryPlus(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn306 = function ( attributes ) {\n     this.yyval = this.Node_Expr_UnaryMinus(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn307 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Array(this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn308 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Array(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn309 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn310 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ClassConstFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn311 = function ( attributes ) {\n     ; this.yyval = this.Node_Scalar_Encapsed(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn312 = function ( attributes ) {\n     ; this.yyval = this.Node_Scalar_Encapsed(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn313 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn314 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn315 = function () {\n    this.yyval = this.yyastk[ this.stackPos ];\n};\n\nPHP.Parser.prototype.yyn316 = function () {\n    this.yyval = this.yyastk[ this.stackPos ];\n};\n\nPHP.Parser.prototype.yyn317 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn318 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn319 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(3-3) ], this.yyastk[ this.stackPos-(3-1) ], false, attributes); \n};\n\nPHP.Parser.prototype.yyn320 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(1-1) ], null, false, attributes); \n};\n\nPHP.Parser.prototype.yyn321 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn322 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn323 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn324 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn325 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(6-2) ], this.yyastk[ this.stackPos-(6-5) ], attributes); \n};\n\nPHP.Parser.prototype.yyn326 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn327 = function ( attributes ) {\n     this.yyval = this.Node_Expr_PropertyFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn328 = function ( attributes ) {\n     this.yyval = this.Node_Expr_MethodCall(this.yyastk[ this.stackPos-(6-1) ], this.yyastk[ this.stackPos-(6-3) ], this.yyastk[ this.stackPos-(6-5) ], attributes); \n};\n\nPHP.Parser.prototype.yyn329 = function ( attributes ) {\n     this.yyval = this.Node_Expr_FuncCall(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn330 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn331 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn332 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn333 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn334 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn335 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(2-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn336 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn337 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn338 = function ( attributes ) {\n     this.yyval = this.Node_Expr_StaticPropertyFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn339 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn340 = function ( attributes ) {\n     this.yyval = this.Node_Expr_StaticPropertyFetch(this.yyastk[ this.stackPos-(3-1) ], this.yyastk[ this.stackPos-(3-3) ].substring( 1 ), attributes); \n};\n\nPHP.Parser.prototype.yyn341 = function ( attributes ) {\n     this.yyval = this.Node_Expr_StaticPropertyFetch(this.yyastk[ this.stackPos-(6-1) ], this.yyastk[ this.stackPos-(6-5) ], attributes); \n};\n\nPHP.Parser.prototype.yyn342 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn343 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn344 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn345 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.yyastk[ this.stackPos-(4-1) ], this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn346 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), attributes); \n};\n\nPHP.Parser.prototype.yyn347 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn348 = function ( attributes ) {\n     this.yyval = null; \n};\n\nPHP.Parser.prototype.yyn349 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn350 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn351 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn352 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn353 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn354 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn355 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(1-1) ]; \n};\n\nPHP.Parser.prototype.yyn356 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(4-3) ]; \n};\n\nPHP.Parser.prototype.yyn357 = function ( attributes ) {\n     this.yyval = null; \n};\n\nPHP.Parser.prototype.yyn358 = function ( attributes ) {\n     this.yyval = []; \n};\n\nPHP.Parser.prototype.yyn359 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn360 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(3-1) ].push( this.yyastk[ this.stackPos-(3-3) ] ); this.yyval = this.yyastk[ this.stackPos-(3-1) ]; \n};\n\nPHP.Parser.prototype.yyn361 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn362 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(3-3) ], this.yyastk[ this.stackPos-(3-1) ], false, attributes); \n};\n\nPHP.Parser.prototype.yyn363 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(1-1) ], null, false, attributes); \n};\n\nPHP.Parser.prototype.yyn364 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(4-4) ], this.yyastk[ this.stackPos-(4-1) ], true, attributes); \n};\n\nPHP.Parser.prototype.yyn365 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayItem(this.yyastk[ this.stackPos-(2-2) ], null, true, attributes); \n};\n\nPHP.Parser.prototype.yyn366 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn367 = function ( attributes ) {\n     this.yyastk[ this.stackPos-(2-1) ].push( this.yyastk[ this.stackPos-(2-2) ] ); this.yyval = this.yyastk[ this.stackPos-(2-1) ]; \n};\n\nPHP.Parser.prototype.yyn368 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(1-1) ]]; \n};\n\nPHP.Parser.prototype.yyn369 = function ( attributes ) {\n     this.yyval = [this.yyastk[ this.stackPos-(2-1) ], this.yyastk[ this.stackPos-(2-2) ]]; \n};\n\nPHP.Parser.prototype.yyn370 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), attributes); \n};\n\nPHP.Parser.prototype.yyn371 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.Node_Expr_Variable(this.yyastk[ this.stackPos-(4-1) ].substring( 1 ), attributes), this.yyastk[ this.stackPos-(4-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn372 = function ( attributes ) {\n     this.yyval = this.Node_Expr_PropertyFetch(this.Node_Expr_Variable(this.yyastk[ this.stackPos-(3-1) ].substring( 1 ), attributes), this.yyastk[ this.stackPos-(3-3) ], attributes); \n};\n\nPHP.Parser.prototype.yyn373 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn374 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(3-2) ], attributes); \n};\n\nPHP.Parser.prototype.yyn375 = function ( attributes ) {\n     this.yyval = this.Node_Expr_ArrayDimFetch(this.Node_Expr_Variable(this.yyastk[ this.stackPos-(6-2) ], attributes), this.yyastk[ this.stackPos-(6-4) ], attributes); \n};\n\nPHP.Parser.prototype.yyn376 = function ( attributes ) {\n     this.yyval = this.yyastk[ this.stackPos-(3-2) ]; \n};\n\nPHP.Parser.prototype.yyn377 = function ( attributes ) {\n     this.yyval = this.Node_Scalar_String(this.yyastk[ this.stackPos-(1-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn378 = function ( attributes ) {\n     this.yyval = this.Node_Scalar_String(this.yyastk[ this.stackPos-(1-1) ], attributes); \n};\n\nPHP.Parser.prototype.yyn379 = function ( attributes ) {\n     this.yyval = this.Node_Expr_Variable(this.yyastk[ this.stackPos-(1-1) ].substring( 1 ), attributes); \n};\n\n\nPHP.Parser.prototype.Stmt_Namespace_postprocess = function( a ) {\n  return a;  \n};\n\n\nPHP.Parser.prototype.Node_Stmt_Echo = function() {\n    return {\n        type: \"Node_Stmt_Echo\",\n        exprs: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Stmt_If = function() {\n    return {\n        type: \"Node_Stmt_If\",\n        cond: arguments[ 0 ],\n        stmts: arguments[ 1 ].stmts,\n        elseifs: arguments[ 1 ].elseifs,\n        Else: arguments[ 1 ].Else || null,\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Stmt_For = function() {\n    \n    return {\n        type: \"Node_Stmt_For\",\n        init: arguments[ 0 ].init,\n        cond: arguments[ 0 ].cond,\n        loop: arguments[ 0 ].loop,\n        stmts: arguments[ 0 ].stmts,\n        attributes: arguments[ 1 ]\n    };   \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Function = function() {\n    return {\n        type: \"Node_Stmt_Function\",\n        name: arguments[ 0 ],\n        byRef: arguments[ 1 ].byRef,\n        params: arguments[ 1 ].params,\n        stmts: arguments[ 1 ].stmts,\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Stmt_Class_verifyModifier = function() {\n  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Namespace = function() {\n    return {\n        type: \"Node_Stmt_Namespace\",\n        name: arguments[ 0 ],\n        attributes: arguments[ 2 ]\n    };  \n};\n\nPHP.Parser.prototype.Node_Stmt_Use = function() {\n    return {\n        type: \"Node_Stmt_Use\",\n        name: arguments[ 0 ],\n        attributes: arguments[ 2 ]\n    };  \n};\n\nPHP.Parser.prototype.Node_Stmt_UseUse = function() {\n    return {\n        type: \"Node_Stmt_UseUse\",\n        name: arguments[ 0 ],\n        as: arguments[1],\n        attributes: arguments[ 2 ]\n    };  \n};\n\nPHP.Parser.prototype.Node_Stmt_TraitUseAdaptation_Precedence = function() {\n    return {\n        type: \"Node_Stmt_TraitUseAdaptation_Precedence\",\n        name: arguments[ 0 ],\n        attributes: arguments[ 2 ]\n    };  \n};\n\nPHP.Parser.prototype.Node_Stmt_TraitUseAdaptation_Alias = function() {\n    return {\n        type: \"Node_Stmt_TraitUseAdaptation_Alias\",\n        name: arguments[ 0 ],\n        attributes: arguments[ 2 ]\n    };  \n};\n\nPHP.Parser.prototype.Node_Stmt_Trait = function() {\n    return {\n        type: \"Node_Stmt_Trait\",\n        name: arguments[ 0 ],\n        attributes: arguments[ 2 ]\n    };  \n};\n\nPHP.Parser.prototype.Node_Stmt_TraitUse = function() {\n    return {\n        type: \"Node_Stmt_TraitUse\",\n        name: arguments[ 0 ],\n        attributes: arguments[ 2 ]\n    };  \n};\n\nPHP.Parser.prototype.Node_Stmt_Class = function() {\n    return {\n        type: \"Node_Stmt_Class\",\n        name: arguments[ 0 ],\n        Type: arguments[ 1 ].type,\n        Extends: arguments[ 1 ].Extends,\n        Implements: arguments[ 1 ].Implements,\n        stmts: arguments[ 1 ].stmts,\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_ClassMethod = function() {\n    return {\n        type: \"Node_Stmt_ClassMethod\",\n        name: arguments[ 0 ],\n        Type: arguments[ 1 ].type,\n        byRef: arguments[ 1 ].byRef,\n        params: arguments[ 1 ].params,\n        stmts: arguments[ 1 ].stmts,\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Stmt_ClassConst = function() {\n    return {\n        type: \"Node_Stmt_ClassConst\",\n        consts: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Interface = function() {\n    return {\n        type: \"Node_Stmt_Interface\",\n        name: arguments[ 0 ],\n        Extends: arguments[ 1 ].Extends,\n        stmts: arguments[ 1 ].stmts,\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Throw = function() {\n    return {\n        type: \"Node_Stmt_Throw\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Catch = function() {\n    return {\n        type: \"Node_Stmt_Catch\",\n        Type: arguments[ 0 ],\n        variable: arguments[ 1 ],\n        stmts: arguments[ 2 ],\n        attributes: arguments[ 3 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Stmt_TryCatch = function() {\n    return {\n        type: \"Node_Stmt_TryCatch\",\n        stmts: arguments[ 0 ],\n        catches: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Stmt_Foreach = function() {\n    return {\n        type: \"Node_Stmt_Foreach\",\n        expr: arguments[ 0 ],\n        valueVar: arguments[ 1 ],\n        keyVar: arguments[ 2 ].keyVar,\n        byRef: arguments[ 2 ].byRef,\n        stmts: arguments[ 2 ].stmts,\n        attributes: arguments[ 3 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_While = function() {\n    return {\n        type: \"Node_Stmt_While\",\n        cond: arguments[ 0 ],\n        stmts: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Do = function() {\n    return {\n        type: \"Node_Stmt_Do\",\n        cond: arguments[ 0 ],\n        stmts: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Break = function() {\n    return {\n        type: \"Node_Stmt_Break\",\n        num: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Continue = function() {\n    return {\n        type: \"Node_Stmt_Continue\",\n        num: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Return = function() {\n    return {\n        type: \"Node_Stmt_Return\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Case = function() {\n    return {\n        type: \"Node_Stmt_Case\",\n        cond: arguments[ 0 ],\n        stmts: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Switch = function() {\n    return {\n        type: \"Node_Stmt_Switch\",\n        cond: arguments[ 0 ],\n        cases: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Else = function() {\n   \n    return {\n        type: \"Node_Stmt_Else\",\n        stmts: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_ElseIf = function() {\n    return {\n        type: \"Node_Stmt_ElseIf\",\n        cond: arguments[ 0 ],\n        stmts: arguments[ 1 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_InlineHTML = function() {\n    return {\n        type: \"Node_Stmt_InlineHTML\",\n        value: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Stmt_StaticVar = function() {\n    return {\n        type: \"Node_Stmt_StaticVar\",\n        name: arguments[ 0 ],\n        def: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Stmt_Static = function() {\n    return {\n        type: \"Node_Stmt_Static\",\n        vars: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Global = function() {\n    return {\n        type: \"Node_Stmt_Global\",\n        vars: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Stmt_PropertyProperty = function() {\n    return {\n        type: \"Node_Stmt_PropertyProperty\",\n        name: arguments[ 0 ],\n        def: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Stmt_Property = function() {\n    return {\n        type: \"Node_Stmt_Property\",\n        Type: arguments[ 0 ],\n        props: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Stmt_Unset = function() {\n    return {\n        type: \"Node_Stmt_Unset\",\n        variables: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Variable = function( a ) {\n    return {\n        type: \"Node_Expr_Variable\",\n        name: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n};\n\nPHP.Parser.prototype.Node_Expr_FuncCall = function() {\n\n    return {\n        type: \"Node_Expr_FuncCall\",\n        func: arguments[ 0 ],\n        args: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_MethodCall = function() {\n\n    return {\n        type: \"Node_Expr_MethodCall\",\n        variable: arguments[ 0 ],\n        name: arguments[ 1 ],\n        args: arguments[ 2 ],\n        attributes: arguments[ 3 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_StaticCall = function() {\n\n    return {\n        type: \"Node_Expr_StaticCall\",\n        Class: arguments[ 0 ],\n        func: arguments[ 1 ],\n        args: arguments[ 2 ],\n        attributes: arguments[ 3 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Ternary = function() {\n\n    return {\n        type: \"Node_Expr_Ternary\",\n        cond: arguments[ 0 ],\n        If: arguments[ 1 ],\n        Else: arguments[ 2 ],\n        attributes: arguments[ 3 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_AssignList = function() {\n\n    return {\n        type: \"Node_Expr_AssignList\",\n        assignList: arguments[ 0 ],\n        expr: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Assign = function() {\n\n    return {\n        type: \"Node_Expr_Assign\",\n        variable: arguments[ 0 ],\n        expr: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_AssignConcat = function() {\n\n    return {\n        type: \"Node_Expr_AssignConcat\",\n        variable: arguments[ 0 ],\n        expr: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_AssignMinus = function() {\n\n    return {\n        type: \"Node_Expr_AssignMinus\",\n        variable: arguments[ 0 ],\n        expr: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_AssignPlus = function() {\n\n    return {\n        type: \"Node_Expr_AssignPlus\",\n        variable: arguments[ 0 ],\n        expr: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_AssignDiv = function() {\n\n    return {\n        type: \"Node_Expr_AssignDiv\",\n        variable: arguments[ 0 ],\n        expr: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_AssignRef = function() {\n\n    return {\n        type: \"Node_Expr_AssignRef\",\n        variable: arguments[ 0 ],\n        refVar: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_AssignMul = function() {\n\n    return {\n        type: \"Node_Expr_AssignMul\",\n        variable: arguments[ 0 ],\n        expr: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_AssignMod = function() {\n\n    return {\n        type: \"Node_Expr_AssignMod\",\n        variable: arguments[ 0 ],\n        expr: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Plus = function() {\n\n    return {\n        type: \"Node_Expr_Plus\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Minus = function() {\n\n    return {\n        type: \"Node_Expr_Minus\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Mul = function() {\n\n    return {\n        type: \"Node_Expr_Mul\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Div = function() {\n\n    return {\n        type: \"Node_Expr_Div\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Mod = function() {\n\n    return {\n        type: \"Node_Expr_Mod\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Greater = function() {\n\n    return {\n        type: \"Node_Expr_Greater\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Equal = function() {\n\n    return {\n        type: \"Node_Expr_Equal\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_NotEqual = function() {\n\n    return {\n        type: \"Node_Expr_NotEqual\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Identical = function() {\n\n    return {\n        type: \"Node_Expr_Identical\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_NotIdentical = function() {\n\n    return {\n        type: \"Node_Expr_NotIdentical\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_GreaterOrEqual = function() {\n\n    return {\n        type: \"Node_Expr_GreaterOrEqual\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_SmallerOrEqual = function() {\n\n    return {\n        type: \"Node_Expr_SmallerOrEqual\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Concat = function() {\n\n    return {\n        type: \"Node_Expr_Concat\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Smaller = function() {\n\n    return {\n        type: \"Node_Expr_Smaller\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_PostInc = function() {\n\n    return {\n        type: \"Node_Expr_PostInc\",\n        variable: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_PostDec = function() {\n\n    return {\n        type: \"Node_Expr_PostDec\",\n        variable: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_PreInc = function() {\n\n    return {\n        type: \"Node_Expr_PreInc\",\n        variable: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_PreDec = function() {\n\n    return {\n        type: \"Node_Expr_PreDec\",\n        variable: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Include = function() {\n    return {\n        expr: arguments[ 0 ],\n        type: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n};\n\nPHP.Parser.prototype.Node_Expr_ArrayDimFetch = function() {\n\n    return {\n        type: \"Node_Expr_ArrayDimFetch\",\n        variable: arguments[ 0 ],\n        dim: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_StaticPropertyFetch = function() {\n\n    return {\n        type: \"Node_Expr_StaticPropertyFetch\",\n        Class: arguments[ 0 ],\n        name: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_ClassConstFetch = function() {\n\n    return {\n        type: \"Node_Expr_ClassConstFetch\",\n        Class: arguments[ 0 ],\n        name: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_StaticPropertyFetch = function() {\n\n    return {\n        type: \"Node_Expr_StaticPropertyFetch\",\n        Class: arguments[ 0 ],\n        name: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_ConstFetch = function() {\n\n    return {\n        type: \"Node_Expr_ConstFetch\",\n        name: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_ArrayItem = function() {\n\n    return {\n        type: \"Node_Expr_ArrayItem\",\n        value: arguments[ 0 ],\n        key: arguments[ 1 ],\n        byRef: arguments[ 2 ],\n        attributes: arguments[ 3 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Array = function() {\n\n    return {\n        type: \"Node_Expr_Array\",\n        items: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_PropertyFetch = function() {\n\n    return {\n        type: \"Node_Expr_PropertyFetch\",\n        variable: arguments[ 0 ],\n        name: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_New = function() {\n\n    return {\n        type: \"Node_Expr_New\",\n        Class: arguments[ 0 ],\n        args: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Print = function() {\n    return {\n        type: \"Node_Expr_Print\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Exit = function() {\n    return {\n        type: \"Node_Expr_Exit\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Cast_Bool = function() {\n    return {\n        type: \"Node_Expr_Cast_Bool\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Cast_Int = function() {\n    return {\n        type: \"Node_Expr_Cast_Int\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Cast_String = function() {\n    return {\n        type: \"Node_Expr_Cast_String\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Cast_Double = function() {\n    return {\n        type: \"Node_Expr_Cast_Double\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Cast_Array = function() {\n    return {\n        type: \"Node_Expr_Cast_Array\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Cast_Object = function() {\n    return {\n        type: \"Node_Expr_Cast_Object\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_ErrorSuppress = function() {\n    return {\n        type: \"Node_Expr_ErrorSuppress\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_Isset = function() {\n    return {\n        type: \"Node_Expr_Isset\",\n        variables: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\n\n\n\nPHP.Parser.prototype.Node_Expr_UnaryMinus = function() {\n    return {\n        type: \"Node_Expr_UnaryMinus\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_UnaryPlus = function() {\n    return {\n        type: \"Node_Expr_UnaryPlus\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Empty = function() {\n    return {\n        type: \"Node_Expr_Empty\",\n        variable: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_BooleanOr = function() {\n    return {\n        type: \"Node_Expr_BooleanOr\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_LogicalOr = function() {\n    return {\n        type: \"Node_Expr_LogicalOr\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_LogicalAnd = function() {\n    return {\n        type: \"Node_Expr_LogicalAnd\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\n\nPHP.Parser.prototype.Node_Expr_LogicalXor = function() {\n    return {\n        type: \"Node_Expr_LogicalXor\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_BitwiseAnd = function() {\n    return {\n        type: \"Node_Expr_BitwiseAnd\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_BitwiseOr = function() {\n    return {\n        type: \"Node_Expr_BitwiseOr\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_BitwiseXor = function() {\n    return {\n        type: \"Node_Expr_BitwiseXor\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_BitwiseNot = function() {\n    return {\n        type: \"Node_Expr_BitwiseNot\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_BooleanNot = function() {\n    return {\n        type: \"Node_Expr_BooleanNot\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_BooleanAnd = function() {\n    return {\n        type: \"Node_Expr_BooleanAnd\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Instanceof = function() {\n\n    return {\n        type: \"Node_Expr_Instanceof\",\n        left: arguments[ 0 ],\n        right: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };\n\n};\n\nPHP.Parser.prototype.Node_Expr_Clone = function() {\n\n    return {\n        type: \"Node_Expr_Clone\",\n        expr: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };\n\n};\n\n\n\nPHP.Parser.prototype.Scalar_LNumber_parse = function( a ) {\n   \n    return a;  \n};\n\nPHP.Parser.prototype.Scalar_DNumber_parse = function( a ) {\n   \n    return a;  \n};\n\nPHP.Parser.prototype.Scalar_String_parseDocString = function() {\n    \n    return '\"' + arguments[ 1 ].replace(/([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"/g, '$1\\\\\"') + '\"';\n};\n\n\nPHP.Parser.prototype.Node_Scalar_String = function( ) {\n   \n    return {\n        type: \"Node_Scalar_String\",\n        value: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Scalar_String_create = function( ) {\n    return {\n        type: \"Node_Scalar_String\",\n        value: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n\n};\n\nPHP.Parser.prototype.Node_Scalar_LNumber = function() {\n   \n    return {\n        type: \"Node_Scalar_LNumber\",\n        value: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n  \n};\n\n\nPHP.Parser.prototype.Node_Scalar_DNumber = function() {\n   \n    return {\n        type: \"Node_Scalar_DNumber\",\n        value: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n  \n};\n\n\nPHP.Parser.prototype.Node_Scalar_Encapsed = function() {\n   \n    return {\n        type: \"Node_Scalar_Encapsed\",\n        parts: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n  \n};\n\nPHP.Parser.prototype.Node_Name = function() {\n   \n    return {\n        type: \"Node_Name\",\n        parts: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n  \n};\n\nPHP.Parser.prototype.Node_Name_FullyQualified = function() {\n   \n    return {\n        type: \"Node_Name_FullyQualified\",\n        parts: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n  \n};\n\nPHP.Parser.prototype.Node_Name_Relative = function() {\n   \n    return {\n        type: \"Node_Name_Relative\",\n        parts: arguments[ 0 ],\n        attributes: arguments[ 1 ]\n    };  \n  \n};\n\nPHP.Parser.prototype.Node_Param = function() {\n   \n    return {\n        type: \"Node_Param\",\n        name: arguments[ 0 ],\n        def: arguments[ 1 ],\n        Type: arguments[ 2 ],\n        byRef: arguments[ 3 ],\n        attributes: arguments[ 4 ]\n    };  \n  \n};\n\nPHP.Parser.prototype.Node_Arg = function() {\n   \n    return {\n        type: \"Node_Name\",\n        value: arguments[ 0 ],\n        byRef: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n  \n};\n\nPHP.Parser.prototype.Node_Const = function() {\n   \n    return {\n        type: \"Node_Const\",\n        name: arguments[ 0 ],\n        value: arguments[ 1 ],\n        attributes: arguments[ 2 ]\n    };  \n  \n};\n\n\nexports.PHP = PHP;\n});\n\nace.define(\"ace/mode/php_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/php/php\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar Mirror = require(\"../worker/mirror\").Mirror;\nvar PHP = require(\"./php/php\").PHP;\n\nvar PhpWorker = exports.PhpWorker = function(sender) {\n    Mirror.call(this, sender);\n    this.setTimeout(500);\n};\n\noop.inherits(PhpWorker, Mirror);\n\n(function() {\n    this.setOptions = function(opts) {\n        this.inlinePhp = opts && opts.inline;\n    };\n    \n    this.onUpdate = function() {\n        var value = this.doc.getValue();\n        var errors = [];\n        if (this.inlinePhp)\n            value = \"<?\" + value + \"?>\";\n\n        var tokens = PHP.Lexer(value, {short_open_tag: 1});\n        try {\n            new PHP.Parser(tokens);\n        } catch(e) {\n            errors.push({\n                row: e.line - 1,\n                column: null,\n                text: e.message.charAt(0).toUpperCase() + e.message.substring(1),\n                type: \"error\"\n            });\n        }\n\n        this.sender.emit(\"annotate\", errors);\n    };\n\n}).call(PhpWorker.prototype);\n\n});\n\nace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\nfunction Empty() {}\n\nif (!Function.prototype.bind) {\n    Function.prototype.bind = function bind(that) { // .length is 1\n        var target = this;\n        if (typeof target != \"function\") {\n            throw new TypeError(\"Function.prototype.bind called on incompatible \" + target);\n        }\n        var args = slice.call(arguments, 1); // for normal call\n        var bound = function () {\n\n            if (this instanceof bound) {\n\n                var result = target.apply(\n                    this,\n                    args.concat(slice.call(arguments))\n                );\n                if (Object(result) === result) {\n                    return result;\n                }\n                return this;\n\n            } else {\n                return target.apply(\n                    that,\n                    args.concat(slice.call(arguments))\n                );\n\n            }\n\n        };\n        if(target.prototype) {\n            Empty.prototype = target.prototype;\n            bound.prototype = new Empty();\n            Empty.prototype = null;\n        }\n        return bound;\n    };\n}\nvar call = Function.prototype.call;\nvar prototypeOfArray = Array.prototype;\nvar prototypeOfObject = Object.prototype;\nvar slice = prototypeOfArray.slice;\nvar _toString = call.bind(prototypeOfObject.toString);\nvar owns = call.bind(prototypeOfObject.hasOwnProperty);\nvar defineGetter;\nvar defineSetter;\nvar lookupGetter;\nvar lookupSetter;\nvar supportsAccessors;\nif ((supportsAccessors = owns(prototypeOfObject, \"__defineGetter__\"))) {\n    defineGetter = call.bind(prototypeOfObject.__defineGetter__);\n    defineSetter = call.bind(prototypeOfObject.__defineSetter__);\n    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);\n    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);\n}\nif ([1,2].splice(0).length != 2) {\n    if(function() { // test IE < 9 to splice bug - see issue #138\n        function makeArray(l) {\n            var a = new Array(l+2);\n            a[0] = a[1] = 0;\n            return a;\n        }\n        var array = [], lengthBefore;\n        \n        array.splice.apply(array, makeArray(20));\n        array.splice.apply(array, makeArray(26));\n\n        lengthBefore = array.length; //46\n        array.splice(5, 0, \"XXX\"); // add one element\n\n        lengthBefore + 1 == array.length\n\n        if (lengthBefore + 1 == array.length) {\n            return true;// has right splice implementation without bugs\n        }\n    }()) {//IE 6/7\n        var array_splice = Array.prototype.splice;\n        Array.prototype.splice = function(start, deleteCount) {\n            if (!arguments.length) {\n                return [];\n            } else {\n                return array_splice.apply(this, [\n                    start === void 0 ? 0 : start,\n                    deleteCount === void 0 ? (this.length - start) : deleteCount\n                ].concat(slice.call(arguments, 2)))\n            }\n        };\n    } else {//IE8\n        Array.prototype.splice = function(pos, removeCount){\n            var length = this.length;\n            if (pos > 0) {\n                if (pos > length)\n                    pos = length;\n            } else if (pos == void 0) {\n                pos = 0;\n            } else if (pos < 0) {\n                pos = Math.max(length + pos, 0);\n            }\n\n            if (!(pos+removeCount < length))\n                removeCount = length - pos;\n\n            var removed = this.slice(pos, pos+removeCount);\n            var insert = slice.call(arguments, 2);\n            var add = insert.length;            \n            if (pos === length) {\n                if (add) {\n                    this.push.apply(this, insert);\n                }\n            } else {\n                var remove = Math.min(removeCount, length - pos);\n                var tailOldPos = pos + remove;\n                var tailNewPos = tailOldPos + add - remove;\n                var tailCount = length - tailOldPos;\n                var lengthAfterRemove = length - remove;\n\n                if (tailNewPos < tailOldPos) { // case A\n                    for (var i = 0; i < tailCount; ++i) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } else if (tailNewPos > tailOldPos) { // case B\n                    for (i = tailCount; i--; ) {\n                        this[tailNewPos+i] = this[tailOldPos+i];\n                    }\n                } // else, add == remove (nothing to do)\n\n                if (add && pos === lengthAfterRemove) {\n                    this.length = lengthAfterRemove; // truncate array\n                    this.push.apply(this, insert);\n                } else {\n                    this.length = lengthAfterRemove + add; // reserves space\n                    for (i = 0; i < add; ++i) {\n                        this[pos+i] = insert[i];\n                    }\n                }\n            }\n            return removed;\n        };\n    }\n}\nif (!Array.isArray) {\n    Array.isArray = function isArray(obj) {\n        return _toString(obj) == \"[object Array]\";\n    };\n}\nvar boxedString = Object(\"a\"),\n    splitString = boxedString[0] != \"a\" || !(0 in boxedString);\n\nif (!Array.prototype.forEach) {\n    Array.prototype.forEach = function forEach(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            thisp = arguments[1],\n            i = -1,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(); // TODO message\n        }\n\n        while (++i < length) {\n            if (i in self) {\n                fun.call(thisp, self[i], i, object);\n            }\n        }\n    };\n}\nif (!Array.prototype.map) {\n    Array.prototype.map = function map(fun /*, thisp*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            result = Array(length),\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self)\n                result[i] = fun.call(thisp, self[i], i, object);\n        }\n        return result;\n    };\n}\nif (!Array.prototype.filter) {\n    Array.prototype.filter = function filter(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                    object,\n            length = self.length >>> 0,\n            result = [],\n            value,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self) {\n                value = self[i];\n                if (fun.call(thisp, value, i, object)) {\n                    result.push(value);\n                }\n            }\n        }\n        return result;\n    };\n}\nif (!Array.prototype.every) {\n    Array.prototype.every = function every(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && !fun.call(thisp, self[i], i, object)) {\n                return false;\n            }\n        }\n        return true;\n    };\n}\nif (!Array.prototype.some) {\n    Array.prototype.some = function some(fun /*, thisp */) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0,\n            thisp = arguments[1];\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n\n        for (var i = 0; i < length; i++) {\n            if (i in self && fun.call(thisp, self[i], i, object)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\nif (!Array.prototype.reduce) {\n    Array.prototype.reduce = function reduce(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduce of empty array with no initial value\");\n        }\n\n        var i = 0;\n        var result;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i++];\n                    break;\n                }\n                if (++i >= length) {\n                    throw new TypeError(\"reduce of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        for (; i < length; i++) {\n            if (i in self) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        }\n\n        return result;\n    };\n}\nif (!Array.prototype.reduceRight) {\n    Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {\n        var object = toObject(this),\n            self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                object,\n            length = self.length >>> 0;\n        if (_toString(fun) != \"[object Function]\") {\n            throw new TypeError(fun + \" is not a function\");\n        }\n        if (!length && arguments.length == 1) {\n            throw new TypeError(\"reduceRight of empty array with no initial value\");\n        }\n\n        var result, i = length - 1;\n        if (arguments.length >= 2) {\n            result = arguments[1];\n        } else {\n            do {\n                if (i in self) {\n                    result = self[i--];\n                    break;\n                }\n                if (--i < 0) {\n                    throw new TypeError(\"reduceRight of empty array with no initial value\");\n                }\n            } while (true);\n        }\n\n        do {\n            if (i in this) {\n                result = fun.call(void 0, result, self[i], i, object);\n            }\n        } while (i--);\n\n        return result;\n    };\n}\nif (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {\n    Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n\n        var i = 0;\n        if (arguments.length > 1) {\n            i = toInteger(arguments[1]);\n        }\n        i = i >= 0 ? i : Math.max(0, length + i);\n        for (; i < length; i++) {\n            if (i in self && self[i] === sought) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {\n    Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {\n        var self = splitString && _toString(this) == \"[object String]\" ?\n                this.split(\"\") :\n                toObject(this),\n            length = self.length >>> 0;\n\n        if (!length) {\n            return -1;\n        }\n        var i = length - 1;\n        if (arguments.length > 1) {\n            i = Math.min(i, toInteger(arguments[1]));\n        }\n        i = i >= 0 ? i : length - Math.abs(i);\n        for (; i >= 0; i--) {\n            if (i in self && sought === self[i]) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\nif (!Object.getPrototypeOf) {\n    Object.getPrototypeOf = function getPrototypeOf(object) {\n        return object.__proto__ || (\n            object.constructor ?\n            object.constructor.prototype :\n            prototypeOfObject\n        );\n    };\n}\nif (!Object.getOwnPropertyDescriptor) {\n    var ERR_NON_OBJECT = \"Object.getOwnPropertyDescriptor called on a \" +\n                         \"non-object: \";\n    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT + object);\n        if (!owns(object, property))\n            return;\n\n        var descriptor, getter, setter;\n        descriptor =  { enumerable: true, configurable: true };\n        if (supportsAccessors) {\n            var prototype = object.__proto__;\n            object.__proto__ = prototypeOfObject;\n\n            var getter = lookupGetter(object, property);\n            var setter = lookupSetter(object, property);\n            object.__proto__ = prototype;\n\n            if (getter || setter) {\n                if (getter) descriptor.get = getter;\n                if (setter) descriptor.set = setter;\n                return descriptor;\n            }\n        }\n        descriptor.value = object[property];\n        return descriptor;\n    };\n}\nif (!Object.getOwnPropertyNames) {\n    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {\n        return Object.keys(object);\n    };\n}\nif (!Object.create) {\n    var createEmpty;\n    if (Object.prototype.__proto__ === null) {\n        createEmpty = function () {\n            return { \"__proto__\": null };\n        };\n    } else {\n        createEmpty = function () {\n            var empty = {};\n            for (var i in empty)\n                empty[i] = null;\n            empty.constructor =\n            empty.hasOwnProperty =\n            empty.propertyIsEnumerable =\n            empty.isPrototypeOf =\n            empty.toLocaleString =\n            empty.toString =\n            empty.valueOf =\n            empty.__proto__ = null;\n            return empty;\n        }\n    }\n\n    Object.create = function create(prototype, properties) {\n        var object;\n        if (prototype === null) {\n            object = createEmpty();\n        } else {\n            if (typeof prototype != \"object\")\n                throw new TypeError(\"typeof prototype[\"+(typeof prototype)+\"] != 'object'\");\n            var Type = function () {};\n            Type.prototype = prototype;\n            object = new Type();\n            object.__proto__ = prototype;\n        }\n        if (properties !== void 0)\n            Object.defineProperties(object, properties);\n        return object;\n    };\n}\n\nfunction doesDefinePropertyWork(object) {\n    try {\n        Object.defineProperty(object, \"sentinel\", {});\n        return \"sentinel\" in object;\n    } catch (exception) {\n    }\n}\nif (Object.defineProperty) {\n    var definePropertyWorksOnObject = doesDefinePropertyWork({});\n    var definePropertyWorksOnDom = typeof document == \"undefined\" ||\n        doesDefinePropertyWork(document.createElement(\"div\"));\n    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {\n        var definePropertyFallback = Object.defineProperty;\n    }\n}\n\nif (!Object.defineProperty || definePropertyFallback) {\n    var ERR_NON_OBJECT_DESCRIPTOR = \"Property description must be an object: \";\n    var ERR_NON_OBJECT_TARGET = \"Object.defineProperty called on non-object: \"\n    var ERR_ACCESSORS_NOT_SUPPORTED = \"getters & setters can not be defined \" +\n                                      \"on this javascript engine\";\n\n    Object.defineProperty = function defineProperty(object, property, descriptor) {\n        if ((typeof object != \"object\" && typeof object != \"function\") || object === null)\n            throw new TypeError(ERR_NON_OBJECT_TARGET + object);\n        if ((typeof descriptor != \"object\" && typeof descriptor != \"function\") || descriptor === null)\n            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);\n        if (definePropertyFallback) {\n            try {\n                return definePropertyFallback.call(Object, object, property, descriptor);\n            } catch (exception) {\n            }\n        }\n        if (owns(descriptor, \"value\")) {\n\n            if (supportsAccessors && (lookupGetter(object, property) ||\n                                      lookupSetter(object, property)))\n            {\n                var prototype = object.__proto__;\n                object.__proto__ = prototypeOfObject;\n                delete object[property];\n                object[property] = descriptor.value;\n                object.__proto__ = prototype;\n            } else {\n                object[property] = descriptor.value;\n            }\n        } else {\n            if (!supportsAccessors)\n                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);\n            if (owns(descriptor, \"get\"))\n                defineGetter(object, property, descriptor.get);\n            if (owns(descriptor, \"set\"))\n                defineSetter(object, property, descriptor.set);\n        }\n\n        return object;\n    };\n}\nif (!Object.defineProperties) {\n    Object.defineProperties = function defineProperties(object, properties) {\n        for (var property in properties) {\n            if (owns(properties, property))\n                Object.defineProperty(object, property, properties[property]);\n        }\n        return object;\n    };\n}\nif (!Object.seal) {\n    Object.seal = function seal(object) {\n        return object;\n    };\n}\nif (!Object.freeze) {\n    Object.freeze = function freeze(object) {\n        return object;\n    };\n}\ntry {\n    Object.freeze(function () {});\n} catch (exception) {\n    Object.freeze = (function freeze(freezeObject) {\n        return function freeze(object) {\n            if (typeof object == \"function\") {\n                return object;\n            } else {\n                return freezeObject(object);\n            }\n        };\n    })(Object.freeze);\n}\nif (!Object.preventExtensions) {\n    Object.preventExtensions = function preventExtensions(object) {\n        return object;\n    };\n}\nif (!Object.isSealed) {\n    Object.isSealed = function isSealed(object) {\n        return false;\n    };\n}\nif (!Object.isFrozen) {\n    Object.isFrozen = function isFrozen(object) {\n        return false;\n    };\n}\nif (!Object.isExtensible) {\n    Object.isExtensible = function isExtensible(object) {\n        if (Object(object) === object) {\n            throw new TypeError(); // TODO message\n        }\n        var name = '';\n        while (owns(object, name)) {\n            name += '?';\n        }\n        object[name] = true;\n        var returnValue = owns(object, name);\n        delete object[name];\n        return returnValue;\n    };\n}\nif (!Object.keys) {\n    var hasDontEnumBug = true,\n        dontEnums = [\n            \"toString\",\n            \"toLocaleString\",\n            \"valueOf\",\n            \"hasOwnProperty\",\n            \"isPrototypeOf\",\n            \"propertyIsEnumerable\",\n            \"constructor\"\n        ],\n        dontEnumsLength = dontEnums.length;\n\n    for (var key in {\"toString\": null}) {\n        hasDontEnumBug = false;\n    }\n\n    Object.keys = function keys(object) {\n\n        if (\n            (typeof object != \"object\" && typeof object != \"function\") ||\n            object === null\n        ) {\n            throw new TypeError(\"Object.keys called on a non-object\");\n        }\n\n        var keys = [];\n        for (var name in object) {\n            if (owns(object, name)) {\n                keys.push(name);\n            }\n        }\n\n        if (hasDontEnumBug) {\n            for (var i = 0, ii = dontEnumsLength; i < ii; i++) {\n                var dontEnum = dontEnums[i];\n                if (owns(object, dontEnum)) {\n                    keys.push(dontEnum);\n                }\n            }\n        }\n        return keys;\n    };\n\n}\nif (!Date.now) {\n    Date.now = function now() {\n        return new Date().getTime();\n    };\n}\nvar ws = \"\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\" +\n    \"\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\" +\n    \"\\u2029\\uFEFF\";\nif (!String.prototype.trim || ws.trim()) {\n    ws = \"[\" + ws + \"]\";\n    var trimBeginRegexp = new RegExp(\"^\" + ws + ws + \"*\"),\n        trimEndRegexp = new RegExp(ws + ws + \"*$\");\n    String.prototype.trim = function trim() {\n        return String(this).replace(trimBeginRegexp, \"\").replace(trimEndRegexp, \"\");\n    };\n}\n\nfunction toInteger(n) {\n    n = +n;\n    if (n !== n) { // isNaN\n        n = 0;\n    } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {\n        n = (n > 0 || -1) * Math.floor(Math.abs(n));\n    }\n    return n;\n}\n\nfunction isPrimitive(input) {\n    var type = typeof input;\n    return (\n        input === null ||\n        type === \"undefined\" ||\n        type === \"boolean\" ||\n        type === \"number\" ||\n        type === \"string\"\n    );\n}\n\nfunction toPrimitive(input) {\n    var val, valueOf, toString;\n    if (isPrimitive(input)) {\n        return input;\n    }\n    valueOf = input.valueOf;\n    if (typeof valueOf === \"function\") {\n        val = valueOf.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    toString = input.toString;\n    if (typeof toString === \"function\") {\n        val = toString.call(input);\n        if (isPrimitive(val)) {\n            return val;\n        }\n    }\n    throw new TypeError();\n}\nvar toObject = function (o) {\n    if (o == null) { // this matches both null and undefined\n        throw new TypeError(\"can't convert \"+o+\" to object\");\n    }\n    return Object(o);\n};\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/assets/vendor/emmet/emmet.js",
    "content": "//     Underscore.js 1.3.3\n//     (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.\n//     Underscore is freely distributable under the MIT license.\n//     Portions of Underscore are inspired or borrowed from Prototype,\n//     Oliver Steele's Functional, and John Resig's Micro-Templating.\n//     For all details and documentation:\n//     http://documentcloud.github.com/underscore\n\nvar _ = (function() {\n\n    // Baseline setup\n    // --------------\n\n    // Establish the root object, `window` in the browser, or `global` on the server.\n    var root = this;\n\n    // Save the previous value of the `_` variable.\n    var previousUnderscore = root._;\n\n    // Establish the object that gets returned to break out of a loop iteration.\n    var breaker = {};\n\n    // Save bytes in the minified (but not gzipped) version:\n    var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n    // Create quick reference variables for speed access to core prototypes.\n    var slice            = ArrayProto.slice,\n        unshift          = ArrayProto.unshift,\n        toString         = ObjProto.toString,\n        hasOwnProperty   = ObjProto.hasOwnProperty;\n\n    // All **ECMAScript 5** native function implementations that we hope to use\n    // are declared here.\n    var\n        nativeForEach      = ArrayProto.forEach,\n        nativeMap          = ArrayProto.map,\n        nativeReduce       = ArrayProto.reduce,\n        nativeReduceRight  = ArrayProto.reduceRight,\n        nativeFilter       = ArrayProto.filter,\n        nativeEvery        = ArrayProto.every,\n        nativeSome         = ArrayProto.some,\n        nativeIndexOf      = ArrayProto.indexOf,\n        nativeLastIndexOf  = ArrayProto.lastIndexOf,\n        nativeIsArray      = Array.isArray,\n        nativeKeys         = Object.keys,\n        nativeBind         = FuncProto.bind;\n\n    // Create a safe reference to the Underscore object for use below.\n    var _ = function(obj) { return new wrapper(obj); };\n\n    // Export the Underscore object for **Node.js**, with\n    // backwards-compatibility for the old `require()` API. If we're in\n    // the browser, add `_` as a global object via a string identifier,\n    // for Closure Compiler \"advanced\" mode.\n    if (typeof exports !== 'undefined') {\n        if (typeof module !== 'undefined' && module.exports) {\n            exports = module.exports = _;\n        }\n        exports._ = _;\n    } else {\n        root['_'] = _;\n    }\n\n    // Current version.\n    _.VERSION = '1.3.3';\n\n    // Collection Functions\n    // --------------------\n\n    // The cornerstone, an `each` implementation, aka `forEach`.\n    // Handles objects with the built-in `forEach`, arrays, and raw objects.\n    // Delegates to **ECMAScript 5**'s native `forEach` if available.\n    var each = _.each = _.forEach = function(obj, iterator, context) {\n        if (obj == null) return;\n        if (nativeForEach && obj.forEach === nativeForEach) {\n            obj.forEach(iterator, context);\n        } else if (obj.length === +obj.length) {\n            for (var i = 0, l = obj.length; i < l; i++) {\n                if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;\n            }\n        } else {\n            for (var key in obj) {\n                if (_.has(obj, key)) {\n                    if (iterator.call(context, obj[key], key, obj) === breaker) return;\n                }\n            }\n        }\n    };\n\n    // Return the results of applying the iterator to each element.\n    // Delegates to **ECMAScript 5**'s native `map` if available.\n    _.map = _.collect = function(obj, iterator, context) {\n        var results = [];\n        if (obj == null) return results;\n        if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n        each(obj, function(value, index, list) {\n            results[results.length] = iterator.call(context, value, index, list);\n        });\n        if (obj.length === +obj.length) results.length = obj.length;\n        return results;\n    };\n\n    // **Reduce** builds up a single result from a list of values, aka `inject`,\n    // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n    _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n        var initial = arguments.length > 2;\n        if (obj == null) obj = [];\n        if (nativeReduce && obj.reduce === nativeReduce) {\n            if (context) iterator = _.bind(iterator, context);\n            return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n        }\n        each(obj, function(value, index, list) {\n            if (!initial) {\n                memo = value;\n                initial = true;\n            } else {\n                memo = iterator.call(context, memo, value, index, list);\n            }\n        });\n        if (!initial) throw new TypeError('Reduce of empty array with no initial value');\n        return memo;\n    };\n\n    // The right-associative version of reduce, also known as `foldr`.\n    // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n    _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n        var initial = arguments.length > 2;\n        if (obj == null) obj = [];\n        if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n            if (context) iterator = _.bind(iterator, context);\n            return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n        }\n        var reversed = _.toArray(obj).reverse();\n        if (context && !initial) iterator = _.bind(iterator, context);\n        return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);\n    };\n\n    // Return the first value which passes a truth test. Aliased as `detect`.\n    _.find = _.detect = function(obj, iterator, context) {\n        var result;\n        any(obj, function(value, index, list) {\n            if (iterator.call(context, value, index, list)) {\n                result = value;\n                return true;\n            }\n        });\n        return result;\n    };\n\n    // Return all the elements that pass a truth test.\n    // Delegates to **ECMAScript 5**'s native `filter` if available.\n    // Aliased as `select`.\n    _.filter = _.select = function(obj, iterator, context) {\n        var results = [];\n        if (obj == null) return results;\n        if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n        each(obj, function(value, index, list) {\n            if (iterator.call(context, value, index, list)) results[results.length] = value;\n        });\n        return results;\n    };\n\n    // Return all the elements for which a truth test fails.\n    _.reject = function(obj, iterator, context) {\n        var results = [];\n        if (obj == null) return results;\n        each(obj, function(value, index, list) {\n            if (!iterator.call(context, value, index, list)) results[results.length] = value;\n        });\n        return results;\n    };\n\n    // Determine whether all of the elements match a truth test.\n    // Delegates to **ECMAScript 5**'s native `every` if available.\n    // Aliased as `all`.\n    _.every = _.all = function(obj, iterator, context) {\n        var result = true;\n        if (obj == null) return result;\n        if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n        each(obj, function(value, index, list) {\n            if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n        });\n        return !!result;\n    };\n\n    // Determine if at least one element in the object matches a truth test.\n    // Delegates to **ECMAScript 5**'s native `some` if available.\n    // Aliased as `any`.\n    var any = _.some = _.any = function(obj, iterator, context) {\n        iterator || (iterator = _.identity);\n        var result = false;\n        if (obj == null) return result;\n        if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n        each(obj, function(value, index, list) {\n            if (result || (result = iterator.call(context, value, index, list))) return breaker;\n        });\n        return !!result;\n    };\n\n    // Determine if a given value is included in the array or object using `===`.\n    // Aliased as `contains`.\n    _.include = _.contains = function(obj, target) {\n        var found = false;\n        if (obj == null) return found;\n        if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n        found = any(obj, function(value) {\n            return value === target;\n        });\n        return found;\n    };\n\n    // Invoke a method (with arguments) on every item in a collection.\n    _.invoke = function(obj, method) {\n        var args = slice.call(arguments, 2);\n        return _.map(obj, function(value) {\n            return (_.isFunction(method) ? method || value : value[method]).apply(value, args);\n        });\n    };\n\n    // Convenience version of a common use case of `map`: fetching a property.\n    _.pluck = function(obj, key) {\n        return _.map(obj, function(value){ return value[key]; });\n    };\n\n    // Return the maximum element or (element-based computation).\n    _.max = function(obj, iterator, context) {\n        if (!iterator && _.isArray(obj) && obj[0] === +obj[0]) return Math.max.apply(Math, obj);\n        if (!iterator && _.isEmpty(obj)) return -Infinity;\n        var result = {computed : -Infinity};\n        each(obj, function(value, index, list) {\n            var computed = iterator ? iterator.call(context, value, index, list) : value;\n            computed >= result.computed && (result = {value : value, computed : computed});\n        });\n        return result.value;\n    };\n\n    // Return the minimum element (or element-based computation).\n    _.min = function(obj, iterator, context) {\n        if (!iterator && _.isArray(obj) && obj[0] === +obj[0]) return Math.min.apply(Math, obj);\n        if (!iterator && _.isEmpty(obj)) return Infinity;\n        var result = {computed : Infinity};\n        each(obj, function(value, index, list) {\n            var computed = iterator ? iterator.call(context, value, index, list) : value;\n            computed < result.computed && (result = {value : value, computed : computed});\n        });\n        return result.value;\n    };\n\n    // Shuffle an array.\n    _.shuffle = function(obj) {\n        var shuffled = [], rand;\n        each(obj, function(value, index, list) {\n            rand = Math.floor(Math.random() * (index + 1));\n            shuffled[index] = shuffled[rand];\n            shuffled[rand] = value;\n        });\n        return shuffled;\n    };\n\n    // Sort the object's values by a criterion produced by an iterator.\n    _.sortBy = function(obj, val, context) {\n        var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };\n        return _.pluck(_.map(obj, function(value, index, list) {\n            return {\n                value : value,\n                criteria : iterator.call(context, value, index, list)\n            };\n        }).sort(function(left, right) {\n            var a = left.criteria, b = right.criteria;\n            if (a === void 0) return 1;\n            if (b === void 0) return -1;\n            return a < b ? -1 : a > b ? 1 : 0;\n        }), 'value');\n    };\n\n    // Groups the object's values by a criterion. Pass either a string attribute\n    // to group by, or a function that returns the criterion.\n    _.groupBy = function(obj, val) {\n        var result = {};\n        var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };\n        each(obj, function(value, index) {\n            var key = iterator(value, index);\n            (result[key] || (result[key] = [])).push(value);\n        });\n        return result;\n    };\n\n    // Use a comparator function to figure out at what index an object should\n    // be inserted so as to maintain order. Uses binary search.\n    _.sortedIndex = function(array, obj, iterator) {\n        iterator || (iterator = _.identity);\n        var low = 0, high = array.length;\n        while (low < high) {\n            var mid = (low + high) >> 1;\n            iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;\n        }\n        return low;\n    };\n\n    // Safely convert anything iterable into a real, live array.\n    _.toArray = function(obj) {\n        if (!obj)                                     return [];\n        if (_.isArray(obj))                           return slice.call(obj);\n        if (_.isArguments(obj))                       return slice.call(obj);\n        if (obj.toArray && _.isFunction(obj.toArray)) return obj.toArray();\n        return _.values(obj);\n    };\n\n    // Return the number of elements in an object.\n    _.size = function(obj) {\n        return _.isArray(obj) ? obj.length : _.keys(obj).length;\n    };\n\n    // Array Functions\n    // ---------------\n\n    // Get the first element of an array. Passing **n** will return the first N\n    // values in the array. Aliased as `head` and `take`. The **guard** check\n    // allows it to work with `_.map`.\n    _.first = _.head = _.take = function(array, n, guard) {\n        return (n != null) && !guard ? slice.call(array, 0, n) : array[0];\n    };\n\n    // Returns everything but the last entry of the array. Especcialy useful on\n    // the arguments object. Passing **n** will return all the values in\n    // the array, excluding the last N. The **guard** check allows it to work with\n    // `_.map`.\n    _.initial = function(array, n, guard) {\n        return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n    };\n\n    // Get the last element of an array. Passing **n** will return the last N\n    // values in the array. The **guard** check allows it to work with `_.map`.\n    _.last = function(array, n, guard) {\n        if ((n != null) && !guard) {\n            return slice.call(array, Math.max(array.length - n, 0));\n        } else {\n            return array[array.length - 1];\n        }\n    };\n\n    // Returns everything but the first entry of the array. Aliased as `tail`.\n    // Especially useful on the arguments object. Passing an **index** will return\n    // the rest of the values in the array from that index onward. The **guard**\n    // check allows it to work with `_.map`.\n    _.rest = _.tail = function(array, index, guard) {\n        return slice.call(array, (index == null) || guard ? 1 : index);\n    };\n\n    // Trim out all falsy values from an array.\n    _.compact = function(array) {\n        return _.filter(array, function(value){ return !!value; });\n    };\n\n    // Return a completely flattened version of an array.\n    _.flatten = function(array, shallow) {\n        return _.reduce(array, function(memo, value) {\n            if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));\n            memo[memo.length] = value;\n            return memo;\n        }, []);\n    };\n\n    // Return a version of the array that does not contain the specified value(s).\n    _.without = function(array) {\n        return _.difference(array, slice.call(arguments, 1));\n    };\n\n    // Produce a duplicate-free version of the array. If the array has already\n    // been sorted, you have the option of using a faster algorithm.\n    // Aliased as `unique`.\n    _.uniq = _.unique = function(array, isSorted, iterator) {\n        var initial = iterator ? _.map(array, iterator) : array;\n        var results = [];\n        // The `isSorted` flag is irrelevant if the array only contains two elements.\n        if (array.length < 3) isSorted = true;\n        _.reduce(initial, function (memo, value, index) {\n            if (isSorted ? _.last(memo) !== value || !memo.length : !_.include(memo, value)) {\n                memo.push(value);\n                results.push(array[index]);\n            }\n            return memo;\n        }, []);\n        return results;\n    };\n\n    // Produce an array that contains the union: each distinct element from all of\n    // the passed-in arrays.\n    _.union = function() {\n        return _.uniq(_.flatten(arguments, true));\n    };\n\n    // Produce an array that contains every item shared between all the\n    // passed-in arrays. (Aliased as \"intersect\" for back-compat.)\n    _.intersection = _.intersect = function(array) {\n        var rest = slice.call(arguments, 1);\n        return _.filter(_.uniq(array), function(item) {\n            return _.every(rest, function(other) {\n                return _.indexOf(other, item) >= 0;\n            });\n        });\n    };\n\n    // Take the difference between one array and a number of other arrays.\n    // Only the elements present in just the first array will remain.\n    _.difference = function(array) {\n        var rest = _.flatten(slice.call(arguments, 1), true);\n        return _.filter(array, function(value){ return !_.include(rest, value); });\n    };\n\n    // Zip together multiple lists into a single array -- elements that share\n    // an index go together.\n    _.zip = function() {\n        var args = slice.call(arguments);\n        var length = _.max(_.pluck(args, 'length'));\n        var results = new Array(length);\n        for (var i = 0; i < length; i++) results[i] = _.pluck(args, \"\" + i);\n        return results;\n    };\n\n    // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n    // we need this function. Return the position of the first occurrence of an\n    // item in an array, or -1 if the item is not included in the array.\n    // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n    // If the array is large and already in sort order, pass `true`\n    // for **isSorted** to use binary search.\n    _.indexOf = function(array, item, isSorted) {\n        if (array == null) return -1;\n        var i, l;\n        if (isSorted) {\n            i = _.sortedIndex(array, item);\n            return array[i] === item ? i : -1;\n        }\n        if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);\n        for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;\n        return -1;\n    };\n\n    // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n    _.lastIndexOf = function(array, item) {\n        if (array == null) return -1;\n        if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);\n        var i = array.length;\n        while (i--) if (i in array && array[i] === item) return i;\n        return -1;\n    };\n\n    // Generate an integer Array containing an arithmetic progression. A port of\n    // the native Python `range()` function. See\n    // [the Python documentation](http://docs.python.org/library/functions.html#range).\n    _.range = function(start, stop, step) {\n        if (arguments.length <= 1) {\n            stop = start || 0;\n            start = 0;\n        }\n        step = arguments[2] || 1;\n\n        var len = Math.max(Math.ceil((stop - start) / step), 0);\n        var idx = 0;\n        var range = new Array(len);\n\n        while(idx < len) {\n            range[idx++] = start;\n            start += step;\n        }\n\n        return range;\n    };\n\n    // Function (ahem) Functions\n    // ------------------\n\n    // Reusable constructor function for prototype setting.\n    var ctor = function(){};\n\n    // Create a function bound to a given object (assigning `this`, and arguments,\n    // optionally). Binding with arguments is also known as `curry`.\n    // Delegates to **ECMAScript 5**'s native `Function.bind` if available.\n    // We check for `func.bind` first, to fail fast when `func` is undefined.\n    _.bind = function bind(func, context) {\n        var bound, args;\n        if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n        if (!_.isFunction(func)) throw new TypeError;\n        args = slice.call(arguments, 2);\n        return bound = function() {\n            if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));\n            ctor.prototype = func.prototype;\n            var self = new ctor;\n            var result = func.apply(self, args.concat(slice.call(arguments)));\n            if (Object(result) === result) return result;\n            return self;\n        };\n    };\n\n    // Bind all of an object's methods to that object. Useful for ensuring that\n    // all callbacks defined on an object belong to it.\n    _.bindAll = function(obj) {\n        var funcs = slice.call(arguments, 1);\n        if (funcs.length == 0) funcs = _.functions(obj);\n        each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n        return obj;\n    };\n\n    // Memoize an expensive function by storing its results.\n    _.memoize = function(func, hasher) {\n        var memo = {};\n        hasher || (hasher = _.identity);\n        return function() {\n            var key = hasher.apply(this, arguments);\n            return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n        };\n    };\n\n    // Delays a function for the given number of milliseconds, and then calls\n    // it with the arguments supplied.\n    _.delay = function(func, wait) {\n        var args = slice.call(arguments, 2);\n        return setTimeout(function(){ return func.apply(null, args); }, wait);\n    };\n\n    // Defers a function, scheduling it to run after the current call stack has\n    // cleared.\n    _.defer = function(func) {\n        return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n    };\n\n    // Returns a function, that, when invoked, will only be triggered at most once\n    // during a given window of time.\n    _.throttle = function(func, wait) {\n        var context, args, timeout, throttling, more, result;\n        var whenDone = _.debounce(function(){ more = throttling = false; }, wait);\n        return function() {\n            context = this; args = arguments;\n            var later = function() {\n                timeout = null;\n                if (more) func.apply(context, args);\n                whenDone();\n            };\n            if (!timeout) timeout = setTimeout(later, wait);\n            if (throttling) {\n                more = true;\n            } else {\n                result = func.apply(context, args);\n            }\n            whenDone();\n            throttling = true;\n            return result;\n        };\n    };\n\n    // Returns a function, that, as long as it continues to be invoked, will not\n    // be triggered. The function will be called after it stops being called for\n    // N milliseconds. If `immediate` is passed, trigger the function on the\n    // leading edge, instead of the trailing.\n    _.debounce = function(func, wait, immediate) {\n        var timeout;\n        return function() {\n            var context = this, args = arguments;\n            var later = function() {\n                timeout = null;\n                if (!immediate) func.apply(context, args);\n            };\n            if (immediate && !timeout) func.apply(context, args);\n            clearTimeout(timeout);\n            timeout = setTimeout(later, wait);\n        };\n    };\n\n    // Returns a function that will be executed at most one time, no matter how\n    // often you call it. Useful for lazy initialization.\n    _.once = function(func) {\n        var ran = false, memo;\n        return function() {\n            if (ran) return memo;\n            ran = true;\n            return memo = func.apply(this, arguments);\n        };\n    };\n\n    // Returns the first function passed as an argument to the second,\n    // allowing you to adjust arguments, run code before and after, and\n    // conditionally execute the original function.\n    _.wrap = function(func, wrapper) {\n        return function() {\n            var args = [func].concat(slice.call(arguments, 0));\n            return wrapper.apply(this, args);\n        };\n    };\n\n    // Returns a function that is the composition of a list of functions, each\n    // consuming the return value of the function that follows.\n    _.compose = function() {\n        var funcs = arguments;\n        return function() {\n            var args = arguments;\n            for (var i = funcs.length - 1; i >= 0; i--) {\n                args = [funcs[i].apply(this, args)];\n            }\n            return args[0];\n        };\n    };\n\n    // Returns a function that will only be executed after being called N times.\n    _.after = function(times, func) {\n        if (times <= 0) return func();\n        return function() {\n            if (--times < 1) { return func.apply(this, arguments); }\n        };\n    };\n\n    // Object Functions\n    // ----------------\n\n    // Retrieve the names of an object's properties.\n    // Delegates to **ECMAScript 5**'s native `Object.keys`\n    _.keys = nativeKeys || function(obj) {\n            if (obj !== Object(obj)) throw new TypeError('Invalid object');\n            var keys = [];\n            for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;\n            return keys;\n        };\n\n    // Retrieve the values of an object's properties.\n    _.values = function(obj) {\n        return _.map(obj, _.identity);\n    };\n\n    // Return a sorted list of the function names available on the object.\n    // Aliased as `methods`\n    _.functions = _.methods = function(obj) {\n        var names = [];\n        for (var key in obj) {\n            if (_.isFunction(obj[key])) names.push(key);\n        }\n        return names.sort();\n    };\n\n    // Extend a given object with all the properties in passed-in object(s).\n    _.extend = function(obj) {\n        each(slice.call(arguments, 1), function(source) {\n            for (var prop in source) {\n                obj[prop] = source[prop];\n            }\n        });\n        return obj;\n    };\n\n    // Return a copy of the object only containing the whitelisted properties.\n    _.pick = function(obj) {\n        var result = {};\n        each(_.flatten(slice.call(arguments, 1)), function(key) {\n            if (key in obj) result[key] = obj[key];\n        });\n        return result;\n    };\n\n    // Fill in a given object with default properties.\n    _.defaults = function(obj) {\n        each(slice.call(arguments, 1), function(source) {\n            for (var prop in source) {\n                if (obj[prop] == null) obj[prop] = source[prop];\n            }\n        });\n        return obj;\n    };\n\n    // Create a (shallow-cloned) duplicate of an object.\n    _.clone = function(obj) {\n        if (!_.isObject(obj)) return obj;\n        return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n    };\n\n    // Invokes interceptor with the obj, and then returns obj.\n    // The primary purpose of this method is to \"tap into\" a method chain, in\n    // order to perform operations on intermediate results within the chain.\n    _.tap = function(obj, interceptor) {\n        interceptor(obj);\n        return obj;\n    };\n\n    // Internal recursive comparison function.\n    function eq(a, b, stack) {\n        // Identical objects are equal. `0 === -0`, but they aren't identical.\n        // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.\n        if (a === b) return a !== 0 || 1 / a == 1 / b;\n        // A strict comparison is necessary because `null == undefined`.\n        if (a == null || b == null) return a === b;\n        // Unwrap any wrapped objects.\n        if (a._chain) a = a._wrapped;\n        if (b._chain) b = b._wrapped;\n        // Invoke a custom `isEqual` method if one is provided.\n        if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);\n        if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);\n        // Compare `[[Class]]` names.\n        var className = toString.call(a);\n        if (className != toString.call(b)) return false;\n        switch (className) {\n            // Strings, numbers, dates, and booleans are compared by value.\n            case '[object String]':\n                // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n                // equivalent to `new String(\"5\")`.\n                return a == String(b);\n            case '[object Number]':\n                // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n                // other numeric values.\n                return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n            case '[object Date]':\n            case '[object Boolean]':\n                // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n                // millisecond representations. Note that invalid dates with millisecond representations\n                // of `NaN` are not equivalent.\n                return +a == +b;\n            // RegExps are compared by their source patterns and flags.\n            case '[object RegExp]':\n                return a.source == b.source &&\n                    a.global == b.global &&\n                    a.multiline == b.multiline &&\n                    a.ignoreCase == b.ignoreCase;\n        }\n        if (typeof a != 'object' || typeof b != 'object') return false;\n        // Assume equality for cyclic structures. The algorithm for detecting cyclic\n        // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n        var length = stack.length;\n        while (length--) {\n            // Linear search. Performance is inversely proportional to the number of\n            // unique nested structures.\n            if (stack[length] == a) return true;\n        }\n        // Add the first object to the stack of traversed objects.\n        stack.push(a);\n        var size = 0, result = true;\n        // Recursively compare objects and arrays.\n        if (className == '[object Array]') {\n            // Compare array lengths to determine if a deep comparison is necessary.\n            size = a.length;\n            result = size == b.length;\n            if (result) {\n                // Deep compare the contents, ignoring non-numeric properties.\n                while (size--) {\n                    // Ensure commutative equality for sparse arrays.\n                    if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;\n                }\n            }\n        } else {\n            // Objects with different constructors are not equivalent.\n            if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;\n            // Deep compare objects.\n            for (var key in a) {\n                if (_.has(a, key)) {\n                    // Count the expected number of properties.\n                    size++;\n                    // Deep compare each member.\n                    if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;\n                }\n            }\n            // Ensure that both objects contain the same number of properties.\n            if (result) {\n                for (key in b) {\n                    if (_.has(b, key) && !(size--)) break;\n                }\n                result = !size;\n            }\n        }\n        // Remove the first object from the stack of traversed objects.\n        stack.pop();\n        return result;\n    }\n\n    // Perform a deep comparison to check if two objects are equal.\n    _.isEqual = function(a, b) {\n        return eq(a, b, []);\n    };\n\n    // Is a given array, string, or object empty?\n    // An \"empty\" object has no enumerable own-properties.\n    _.isEmpty = function(obj) {\n        if (obj == null) return true;\n        if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n        for (var key in obj) if (_.has(obj, key)) return false;\n        return true;\n    };\n\n    // Is a given value a DOM element?\n    _.isElement = function(obj) {\n        return !!(obj && obj.nodeType == 1);\n    };\n\n    // Is a given value an array?\n    // Delegates to ECMA5's native Array.isArray\n    _.isArray = nativeIsArray || function(obj) {\n            return toString.call(obj) == '[object Array]';\n        };\n\n    // Is a given variable an object?\n    _.isObject = function(obj) {\n        return obj === Object(obj);\n    };\n\n    // Is a given variable an arguments object?\n    _.isArguments = function(obj) {\n        return toString.call(obj) == '[object Arguments]';\n    };\n    if (!_.isArguments(arguments)) {\n        _.isArguments = function(obj) {\n            return !!(obj && _.has(obj, 'callee'));\n        };\n    }\n\n    // Is a given value a function?\n    _.isFunction = function(obj) {\n        return toString.call(obj) == '[object Function]';\n    };\n\n    // Is a given value a string?\n    _.isString = function(obj) {\n        return toString.call(obj) == '[object String]';\n    };\n\n    // Is a given value a number?\n    _.isNumber = function(obj) {\n        return toString.call(obj) == '[object Number]';\n    };\n\n    // Is a given object a finite number?\n    _.isFinite = function(obj) {\n        return _.isNumber(obj) && isFinite(obj);\n    };\n\n    // Is the given value `NaN`?\n    _.isNaN = function(obj) {\n        // `NaN` is the only value for which `===` is not reflexive.\n        return obj !== obj;\n    };\n\n    // Is a given value a boolean?\n    _.isBoolean = function(obj) {\n        return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n    };\n\n    // Is a given value a date?\n    _.isDate = function(obj) {\n        return toString.call(obj) == '[object Date]';\n    };\n\n    // Is the given value a regular expression?\n    _.isRegExp = function(obj) {\n        return toString.call(obj) == '[object RegExp]';\n    };\n\n    // Is a given value equal to null?\n    _.isNull = function(obj) {\n        return obj === null;\n    };\n\n    // Is a given variable undefined?\n    _.isUndefined = function(obj) {\n        return obj === void 0;\n    };\n\n    // Has own property?\n    _.has = function(obj, key) {\n        return hasOwnProperty.call(obj, key);\n    };\n\n    // Utility Functions\n    // -----------------\n\n    // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n    // previous owner. Returns a reference to the Underscore object.\n    _.noConflict = function() {\n        root._ = previousUnderscore;\n        return this;\n    };\n\n    // Keep the identity function around for default iterators.\n    _.identity = function(value) {\n        return value;\n    };\n\n    // Run a function **n** times.\n    _.times = function (n, iterator, context) {\n        for (var i = 0; i < n; i++) iterator.call(context, i);\n    };\n\n    // Escape a string for HTML interpolation.\n    _.escape = function(string) {\n        return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\\//g,'&#x2F;');\n    };\n\n    // If the value of the named property is a function then invoke it;\n    // otherwise, return it.\n    _.result = function(object, property) {\n        if (object == null) return null;\n        var value = object[property];\n        return _.isFunction(value) ? value.call(object) : value;\n    };\n\n    // Add your own custom functions to the Underscore object, ensuring that\n    // they're correctly added to the OOP wrapper as well.\n    _.mixin = function(obj) {\n        each(_.functions(obj), function(name){\n            addToWrapper(name, _[name] = obj[name]);\n        });\n    };\n\n    // Generate a unique integer id (unique within the entire client session).\n    // Useful for temporary DOM ids.\n    var idCounter = 0;\n    _.uniqueId = function(prefix) {\n        var id = idCounter++;\n        return prefix ? prefix + id : id;\n    };\n\n    // By default, Underscore uses ERB-style template delimiters, change the\n    // following template settings to use alternative delimiters.\n    _.templateSettings = {\n        evaluate    : /<%([\\s\\S]+?)%>/g,\n        interpolate : /<%=([\\s\\S]+?)%>/g,\n        escape      : /<%-([\\s\\S]+?)%>/g\n    };\n\n    // When customizing `templateSettings`, if you don't want to define an\n    // interpolation, evaluation or escaping regex, we need one that is\n    // guaranteed not to match.\n    var noMatch = /.^/;\n\n    // Certain characters need to be escaped so that they can be put into a\n    // string literal.\n    var escapes = {\n        '\\\\': '\\\\',\n        \"'\": \"'\",\n        'r': '\\r',\n        'n': '\\n',\n        't': '\\t',\n        'u2028': '\\u2028',\n        'u2029': '\\u2029'\n    };\n\n    for (var p in escapes) escapes[escapes[p]] = p;\n    var escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\n    var unescaper = /\\\\(\\\\|'|r|n|t|u2028|u2029)/g;\n\n    // Within an interpolation, evaluation, or escaping, remove HTML escaping\n    // that had been previously added.\n    var unescape = function(code) {\n        return code.replace(unescaper, function(match, escape) {\n            return escapes[escape];\n        });\n    };\n\n    // JavaScript micro-templating, similar to John Resig's implementation.\n    // Underscore templating handles arbitrary delimiters, preserves whitespace,\n    // and correctly escapes quotes within interpolated code.\n    _.template = function(text, data, settings) {\n        settings = _.defaults(settings || {}, _.templateSettings);\n\n        // Compile the template source, taking care to escape characters that\n        // cannot be included in a string literal and then unescape them in code\n        // blocks.\n        var source = \"__p+='\" + text\n                .replace(escaper, function(match) {\n                    return '\\\\' + escapes[match];\n                })\n                .replace(settings.escape || noMatch, function(match, code) {\n                    return \"'+\\n_.escape(\" + unescape(code) + \")+\\n'\";\n                })\n                .replace(settings.interpolate || noMatch, function(match, code) {\n                    return \"'+\\n(\" + unescape(code) + \")+\\n'\";\n                })\n                .replace(settings.evaluate || noMatch, function(match, code) {\n                    return \"';\\n\" + unescape(code) + \"\\n;__p+='\";\n                }) + \"';\\n\";\n\n        // If a variable is not specified, place data values in local scope.\n        if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n        source = \"var __p='';\" +\n            \"var print=function(){__p+=Array.prototype.join.call(arguments, '')};\\n\" +\n            source + \"return __p;\\n\";\n\n        var render = new Function(settings.variable || 'obj', '_', source);\n        if (data) return render(data, _);\n        var template = function(data) {\n            return render.call(this, data, _);\n        };\n\n        // Provide the compiled function source as a convenience for build time\n        // precompilation.\n        template.source = 'function(' + (settings.variable || 'obj') + '){\\n' +\n            source + '}';\n\n        return template;\n    };\n\n    // Add a \"chain\" function, which will delegate to the wrapper.\n    _.chain = function(obj) {\n        return _(obj).chain();\n    };\n\n    // The OOP Wrapper\n    // ---------------\n\n    // If Underscore is called as a function, it returns a wrapped object that\n    // can be used OO-style. This wrapper holds altered versions of all the\n    // underscore functions. Wrapped objects may be chained.\n    var wrapper = function(obj) { this._wrapped = obj; };\n\n    // Expose `wrapper.prototype` as `_.prototype`\n    _.prototype = wrapper.prototype;\n\n    // Helper function to continue chaining intermediate results.\n    var result = function(obj, chain) {\n        return chain ? _(obj).chain() : obj;\n    };\n\n    // A method to easily add functions to the OOP wrapper.\n    var addToWrapper = function(name, func) {\n        wrapper.prototype[name] = function() {\n            var args = slice.call(arguments);\n            unshift.call(args, this._wrapped);\n            return result(func.apply(_, args), this._chain);\n        };\n    };\n\n    // Add all of the Underscore functions to the wrapper object.\n    _.mixin(_);\n\n    // Add all mutator Array functions to the wrapper.\n    each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n        var method = ArrayProto[name];\n        wrapper.prototype[name] = function() {\n            var wrapped = this._wrapped;\n            method.apply(wrapped, arguments);\n            var length = wrapped.length;\n            if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];\n            return result(wrapped, this._chain);\n        };\n    });\n\n    // Add all accessor Array functions to the wrapper.\n    each(['concat', 'join', 'slice'], function(name) {\n        var method = ArrayProto[name];\n        wrapper.prototype[name] = function() {\n            return result(method.apply(this._wrapped, arguments), this._chain);\n        };\n    });\n\n    // Start chaining a wrapped Underscore object.\n    wrapper.prototype.chain = function() {\n        this._chain = true;\n        return this;\n    };\n\n    // Extracts the result from a wrapped and chained object.\n    wrapper.prototype.value = function() {\n        return this._wrapped;\n    };\n    return _;\n}).call({});\n/**\n * Core Emmet object, available in global scope\n */\nvar emmet = (function(global) {\n    var defaultSyntax = 'html';\n    var defaultProfile = 'plain';\n\n    if (typeof _ == 'undefined') {\n        try {\n            // avoid collisions with RequireJS loader\n            // also, JS obfuscators tends to translate\n            // a[\"name\"] to a.name, which also breaks RequireJS\n            _ = global[['require'][0]]('underscore'); // node.js\n        } catch (e) {}\n    }\n\n    if (typeof _ == 'undefined') {\n        throw 'Cannot access to Underscore.js lib';\n    }\n\n    /** List of registered modules */\n    var modules = {\n        _ : _\n    };\n\n    /**\n     * Shared empty constructor function to aid in prototype-chain creation.\n     */\n    var ctor = function(){};\n\n    /**\n     * Helper function to correctly set up the prototype chain, for subclasses.\n     * Similar to `goog.inherits`, but uses a hash of prototype properties and\n     * class properties to be extended.\n     * Took it from Backbone.\n     * @param {Object} parent\n     * @param {Object} protoProps\n     * @param {Object} staticProps\n     * @returns {Object}\n     */\n    function inherits(parent, protoProps, staticProps) {\n        var child;\n\n        // The constructor function for the new subclass is either defined by\n        // you (the \"constructor\" property in your `extend` definition), or\n        // defaulted by us to simply call the parent's constructor.\n        if (protoProps && protoProps.hasOwnProperty('constructor')) {\n            child = protoProps.constructor;\n        } else {\n            child = function() {\n                parent.apply(this, arguments);\n            };\n        }\n\n        // Inherit class (static) properties from parent.\n        _.extend(child, parent);\n\n        // Set the prototype chain to inherit from `parent`, without calling\n        // `parent`'s constructor function.\n        ctor.prototype = parent.prototype;\n        child.prototype = new ctor();\n\n        // Add prototype properties (instance properties) to the subclass,\n        // if supplied.\n        if (protoProps)\n            _.extend(child.prototype, protoProps);\n\n        // Add static properties to the constructor function, if supplied.\n        if (staticProps)\n            _.extend(child, staticProps);\n\n        // Correctly set child's `prototype.constructor`.\n        child.prototype.constructor = child;\n\n        // Set a convenience property in case the parent's prototype is needed\n        // later.\n        child.__super__ = parent.prototype;\n\n        return child;\n    };\n\n    /**\n     * @type Function Function that loads module definition if it's not defined\n     */\n    var moduleLoader = null;\n\n    /**\n     * Generic Emmet module loader (actually, it doesn’t load anything, just\n     * returns module reference). Not using `require` name to avoid conflicts\n     * with Node.js and RequireJS\n     */\n    function r(name) {\n        if (!(name in modules) && moduleLoader)\n            moduleLoader(name);\n\n        return modules[name];\n    }\n\n    return {\n        /**\n         * Simple, AMD-like module definition. The module will be added into\n         * <code>emmet</code> object and will be available via\n         * <code>emmet.require(name)</code> or <code>emmet[name]</code>\n         * @param {String} name\n         * @param {Function} factory\n         * @memberOf emmet\n         */\n        define: function(name, factory) {\n            // do not let redefine existing properties\n            if (!(name in modules)) {\n                modules[name] = _.isFunction(factory)\n                    ? this.exec(factory)\n                    : factory;\n            }\n        },\n\n        /**\n         * Returns reference to Emmet module\n         * @param {String} name Module name\n         */\n        require: r,\n\n        /**\n         * Helper method that just executes passed function but with all\n         * important arguments like 'require' and '_'\n         * @param {Function} fn\n         * @param {Object} context Execution context\n         */\n        exec: function(fn, context) {\n            return fn.call(context || global, _.bind(r, this), _, this);\n        },\n\n        /**\n         * The self-propagating extend function for classes.\n         * Took it from Backbone\n         * @param {Object} protoProps\n         * @param {Object} classProps\n         * @returns {Object}\n         */\n        extend: function(protoProps, classProps) {\n            var child = inherits(this, protoProps, classProps);\n            child.extend = this.extend;\n            // a hack required to WSH inherit `toString` method\n            if (protoProps.hasOwnProperty('toString'))\n                child.prototype.toString = protoProps.toString;\n            return child;\n        },\n\n        /**\n         * The essential function that expands Emmet abbreviation\n         * @param {String} abbr Abbreviation to parse\n         * @param {String} syntax Abbreviation's context syntax\n         * @param {String} profile Output profile (or its name)\n         * @param {Object} contextNode Contextual node where abbreviation is\n         * written\n         * @return {String}\n         */\n        expandAbbreviation: function(abbr, syntax, profile, contextNode) {\n            if (!abbr) return '';\n\n            syntax = syntax || defaultSyntax;\n//\t\t\tprofile = profile || defaultProfile;\n\n            var filters = r('filters');\n            var parser = r('abbreviationParser');\n\n            profile = r('profile').get(profile, syntax);\n            r('tabStops').resetTabstopIndex();\n\n            var data = filters.extractFromAbbreviation(abbr);\n            var outputTree = parser.parse(data[0], {\n                syntax: syntax,\n                contextNode: contextNode\n            });\n\n            var filtersList = filters.composeList(syntax, profile, data[1]);\n            filters.apply(outputTree, filtersList, profile);\n            return outputTree.toString();\n        },\n\n        /**\n         * Returns default syntax name used in abbreviation engine\n         * @returns {String}\n         */\n        defaultSyntax: function() {\n            return defaultSyntax;\n        },\n\n        /**\n         * Returns default profile name used in abbreviation engine\n         * @returns {String}\n         */\n        defaultProfile: function() {\n            return defaultProfile;\n        },\n\n        /**\n         * Log message into console if it exists\n         */\n        log: function() {\n            if (global.console && global.console.log)\n                global.console.log.apply(global.console, arguments);\n        },\n\n        /**\n         * Setups function that should synchronously load undefined modules\n         * @param {Function} fn\n         */\n        setModuleLoader: function(fn) {\n            moduleLoader = fn;\n        }\n    };\n})(this);\n\n// export core for Node.JS\nif (typeof exports !== 'undefined') {\n    if (typeof module !== 'undefined' && module.exports) {\n        exports = module.exports = emmet;\n    }\n    exports.emmet = emmet;\n}\n\n// export as Require.js module\nif (typeof define !== 'undefined') {\n    define('emmet', [], emmet);\n}/**\n * Emmet abbreviation parser.\n * Takes string abbreviation and recursively parses it into a tree. The parsed\n * tree can be transformed into a string representation with\n * <code>toString()</code> method. Note that string representation is defined\n * by custom processors (called <i>filters</i>), not by abbreviation parser\n * itself.\n *\n * This module can be extended with custom pre-/post-processors to shape-up\n * final tree or its representation. Actually, many features of abbreviation\n * engine are defined in other modules as tree processors\n *\n *\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n * @memberOf __abbreviationParser\n * @constructor\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('abbreviationParser', function(require, _) {\n    var reValidName = /^[\\w\\-\\$\\:@\\!%]+\\+?$/i;\n    var reWord = /[\\w\\-:\\$@]/;\n\n    var pairs = {\n        '[': ']',\n        '(': ')',\n        '{': '}'\n    };\n\n    var spliceFn = Array.prototype.splice;\n\n    var preprocessors = [];\n    var postprocessors = [];\n    var outputProcessors = [];\n\n    /**\n     * @type AbbreviationNode\n     */\n    function AbbreviationNode(parent) {\n        /** @type AbbreviationNode */\n        this.parent = null;\n        this.children = [];\n        this._attributes = [];\n\n        /** @type String Raw abbreviation for current node */\n        this.abbreviation = '';\n        this.counter = 1;\n        this._name = null;\n        this._text = '';\n        this.repeatCount = 1;\n        this.hasImplicitRepeat = false;\n\n        /** Custom data dictionary */\n        this._data = {};\n\n        // output properties\n        this.start = '';\n        this.end = '';\n        this.content = '';\n        this.padding = '';\n    }\n\n    AbbreviationNode.prototype = {\n        /**\n         * Adds passed node as child or creates new child\n         * @param {AbbreviationNode} child\n         * @param {Number} position Index in children array where child should\n         * be inserted\n         * @return {AbbreviationNode}\n         */\n        addChild: function(child, position) {\n            child = child || new AbbreviationNode;\n            child.parent = this;\n\n            if (_.isUndefined(position)) {\n                this.children.push(child);\n            } else {\n                this.children.splice(position, 0, child);\n            }\n\n            return child;\n        },\n\n        /**\n         * Creates a deep copy of current node\n         * @returns {AbbreviationNode}\n         */\n        clone: function() {\n            var node = new AbbreviationNode();\n            var attrs = ['abbreviation', 'counter', '_name', '_text', 'repeatCount', 'hasImplicitRepeat', 'start', 'end', 'content', 'padding'];\n            _.each(attrs, function(a) {\n                node[a] = this[a];\n            }, this);\n\n            // clone attributes\n            node._attributes = _.map(this._attributes, function(attr) {\n                return _.clone(attr);\n            });\n\n            node._data = _.clone(this._data);\n\n            // clone children\n            node.children = _.map(this.children, function(child) {\n                child = child.clone();\n                child.parent = node;\n                return child;\n            });\n\n            return node;\n        },\n\n        /**\n         * Removes current node from parent‘s child list\n         * @returns {AbbreviationNode} Current node itself\n         */\n        remove: function() {\n            if (this.parent) {\n                this.parent.children = _.without(this.parent.children, this);\n            }\n\n            return this;\n        },\n\n        /**\n         * Replaces current node in parent‘s children list with passed nodes\n         * @param {AbbreviationNode} node Replacement node or array of nodes\n         */\n        replace: function() {\n            var parent = this.parent;\n            var ix = _.indexOf(parent.children, this);\n            var items = _.flatten(arguments);\n            spliceFn.apply(parent.children, [ix, 1].concat(items));\n\n            // update parent\n            _.each(items, function(item) {\n                item.parent = parent;\n            });\n        },\n\n        /**\n         * Recursively sets <code>property</code> to <code>value</code> of current\n         * node and its children\n         * @param {String} name Property to update\n         * @param {Object} value New property value\n         */\n        updateProperty: function(name, value) {\n            this[name] = value;\n            _.each(this.children, function(child) {\n                child.updateProperty(name, value);\n            });\n\n            return this;\n        },\n\n        /**\n         * Finds first child node that matches truth test for passed\n         * <code>fn</code> function\n         * @param {Function} fn\n         * @returns {AbbreviationNode}\n         */\n        find: function(fn) {\n            return this.findAll(fn)[0];\n//\t\t\tif (!_.isFunction(fn)) {\n//\t\t\t\tvar elemName = fn.toLowerCase();\n//\t\t\t\tfn = function(item) {return item.name().toLowerCase() == elemName;};\n//\t\t\t}\n//\t\t\t\n//\t\t\tvar result = null;\n//\t\t\t_.find(this.children, function(child) {\n//\t\t\t\tif (fn(child)) {\n//\t\t\t\t\treturn result = child;\n//\t\t\t\t}\n//\t\t\t\t\n//\t\t\t\treturn result = child.find(fn);\n//\t\t\t});\n//\t\t\t\n//\t\t\treturn result;\n        },\n\n        /**\n         * Finds all child nodes that matches truth test for passed\n         * <code>fn</code> function\n         * @param {Function} fn\n         * @returns {Array}\n         */\n        findAll: function(fn) {\n            if (!_.isFunction(fn)) {\n                var elemName = fn.toLowerCase();\n                fn = function(item) {return item.name().toLowerCase() == elemName;};\n            }\n\n            var result = [];\n            _.each(this.children, function(child) {\n                if (fn(child))\n                    result.push(child);\n\n                result = result.concat(child.findAll(fn));\n            });\n\n            return _.compact(result);\n        },\n\n        /**\n         * Sets/gets custom data\n         * @param {String} name\n         * @param {Object} value\n         * @returns {Object}\n         */\n        data: function(name, value) {\n            if (arguments.length == 2) {\n                this._data[name] = value;\n\n                if (name == 'resource' && require('elements').is(value, 'snippet')) {\n                    // setting snippet as matched resource: update `content`\n                    // property with snippet value\n                    this.content = value.data;\n                    if (this._text) {\n                        this.content = require('abbreviationUtils')\n                            .insertChildContent(value.data, this._text);\n                    }\n                }\n            }\n\n            return this._data[name];\n        },\n\n        /**\n         * Returns name of current node\n         * @returns {String}\n         */\n        name: function() {\n            var res = this.matchedResource();\n            if (require('elements').is(res, 'element')) {\n                return res.name;\n            }\n\n            return this._name;\n        },\n\n        /**\n         * Returns list of attributes for current node\n         * @returns {Array}\n         */\n        attributeList: function() {\n            var attrs = [];\n\n            var res = this.matchedResource();\n            if (require('elements').is(res, 'element') && _.isArray(res.attributes)) {\n                attrs = attrs.concat(res.attributes);\n            }\n\n            return optimizeAttributes(attrs.concat(this._attributes));\n        },\n\n        /**\n         * Returns or sets attribute value\n         * @param {String} name Attribute name\n         * @param {String} value New attribute value\n         * @returns {String}\n         */\n        attribute: function(name, value) {\n            if (arguments.length == 2) {\n                // modifying attribute\n                var ix = _.indexOf(_.pluck(this._attributes, 'name'), name.toLowerCase());\n                if (~ix) {\n                    this._attributes[ix].value = value;\n                } else {\n                    this._attributes.push({\n                        name: name,\n                        value: value\n                    });\n                }\n            }\n\n            return (_.find(this.attributeList(), function(attr) {\n                return attr.name == name;\n            }) || {}).value;\n        },\n\n        /**\n         * Returns reference to the matched <code>element</code>, if any.\n         * See {@link elements} module for a list of available elements\n         * @returns {Object}\n         */\n        matchedResource: function() {\n            return this.data('resource');\n        },\n\n        /**\n         * Returns index of current node in parent‘s children list\n         * @returns {Number}\n         */\n        index: function() {\n            return this.parent ? _.indexOf(this.parent.children, this) : -1;\n        },\n\n        /**\n         * Sets how many times current element should be repeated\n         * @private\n         */\n        _setRepeat: function(count) {\n            if (count) {\n                this.repeatCount = parseInt(count, 10) || 1;\n            } else {\n                this.hasImplicitRepeat = true;\n            }\n        },\n\n        /**\n         * Sets abbreviation that belongs to current node\n         * @param {String} abbr\n         */\n        setAbbreviation: function(abbr) {\n            abbr = abbr || '';\n\n            var that = this;\n\n            // find multiplier\n            abbr = abbr.replace(/\\*(\\d+)?$/, function(str, repeatCount) {\n                that._setRepeat(repeatCount);\n                return '';\n            });\n\n            this.abbreviation = abbr;\n\n            var abbrText = extractText(abbr);\n            if (abbrText) {\n                abbr = abbrText.element;\n                this.content = this._text = abbrText.text;\n            }\n\n            var abbrAttrs = parseAttributes(abbr);\n            if (abbrAttrs) {\n                abbr = abbrAttrs.element;\n                this._attributes = abbrAttrs.attributes;\n            }\n\n            this._name = abbr;\n\n            // validate name\n            if (this._name && !reValidName.test(this._name)) {\n                throw 'Invalid abbreviation';\n            }\n        },\n\n        /**\n         * Returns string representation of current node\n         * @return {String}\n         */\n        toString: function() {\n            var utils = require('utils');\n\n            var start = this.start;\n            var end = this.end;\n            var content = this.content;\n\n            // apply output processors\n            var node = this;\n            _.each(outputProcessors, function(fn) {\n                start = fn(start, node, 'start');\n                content = fn(content, node, 'content');\n                end = fn(end, node, 'end');\n            });\n\n\n            var innerContent = _.map(this.children, function(child) {\n                return child.toString();\n            }).join('');\n\n            content = require('abbreviationUtils').insertChildContent(content, innerContent, {\n                keepVariable: false\n            });\n\n            return start + utils.padString(content, this.padding) + end;\n        },\n\n        /**\n         * Check if current node contains children with empty <code>expr</code>\n         * property\n         * @return {Boolean}\n         */\n        hasEmptyChildren: function() {\n            return !!_.find(this.children, function(child) {\n                return child.isEmpty();\n            });\n        },\n\n        /**\n         * Check if current node has implied name that should be resolved\n         * @returns {Boolean}\n         */\n        hasImplicitName: function() {\n            return !this._name && !this.isTextNode();\n        },\n\n        /**\n         * Indicates that current element is a grouping one, e.g. has no\n         * representation but serves as a container for other nodes\n         * @returns {Boolean}\n         */\n        isGroup: function() {\n            return !this.abbreviation;\n        },\n\n        /**\n         * Indicates empty node (i.e. without abbreviation). It may be a\n         * grouping node and should not be outputted\n         * @return {Boolean}\n         */\n        isEmpty: function() {\n            return !this.abbreviation && !this.children.length;\n        },\n\n        /**\n         * Indicates that current node should be repeated\n         * @returns {Boolean}\n         */\n        isRepeating: function() {\n            return this.repeatCount > 1 || this.hasImplicitRepeat;\n        },\n\n        /**\n         * Check if current node is a text-only node\n         * @return {Boolean}\n         */\n        isTextNode: function() {\n            return !this.name() && !this.attributeList().length;\n        },\n\n        /**\n         * Indicates whether this node may be used to build elements or snippets\n         * @returns {Boolean}\n         */\n        isElement: function() {\n            return !this.isEmpty() && !this.isTextNode();\n        },\n\n        /**\n         * Returns latest and deepest child of current tree\n         * @returns {AbbreviationNode}\n         */\n        deepestChild: function() {\n            if (!this.children.length)\n                return null;\n\n            var deepestChild = this;\n            while (deepestChild.children.length) {\n                deepestChild = _.last(deepestChild.children);\n            }\n\n            return deepestChild;\n        }\n    };\n\n    /**\n     * Returns stripped string: a string without first and last character.\n     * Used for “unquoting” strings\n     * @param {String} str\n     * @returns {String}\n     */\n    function stripped(str) {\n        return str.substring(1, str.length - 1);\n    }\n\n    function consumeQuotedValue(stream, quote) {\n        var ch;\n        while (ch = stream.next()) {\n            if (ch === quote)\n                return true;\n\n            if (ch == '\\\\')\n                continue;\n        }\n\n        return false;\n    }\n\n    /**\n     * Parses abbreviation into a tree\n     * @param {String} abbr\n     * @returns {AbbreviationNode}\n     */\n    function parseAbbreviation(abbr) {\n        abbr = require('utils').trim(abbr);\n\n        var root = new AbbreviationNode;\n        var context = root.addChild(), ch;\n\n        /** @type StringStream */\n        var stream = require('stringStream').create(abbr);\n        var loopProtector = 1000, multiplier;\n\n        while (!stream.eol() && --loopProtector > 0) {\n            ch = stream.peek();\n\n            switch (ch) {\n                case '(': // abbreviation group\n                    stream.start = stream.pos;\n                    if (stream.skipToPair('(', ')')) {\n                        var inner = parseAbbreviation(stripped(stream.current()));\n                        if (multiplier = stream.match(/^\\*(\\d+)?/, true)) {\n                            context._setRepeat(multiplier[1]);\n                        }\n\n                        _.each(inner.children, function(child) {\n                            context.addChild(child);\n                        });\n                    } else {\n                        throw 'Invalid abbreviation: mo matching \")\" found for character at ' + stream.pos;\n                    }\n                    break;\n\n                case '>': // child operator\n                    context = context.addChild();\n                    stream.next();\n                    break;\n\n                case '+': // sibling operator\n                    context = context.parent.addChild();\n                    stream.next();\n                    break;\n\n                case '^': // climb up operator\n                    var parent = context.parent || context;\n                    context = (parent.parent || parent).addChild();\n                    stream.next();\n                    break;\n\n                default: // consume abbreviation\n                    stream.start = stream.pos;\n                    stream.eatWhile(function(c) {\n                        if (c == '[' || c == '{') {\n                            if (stream.skipToPair(c, pairs[c])) {\n                                stream.backUp(1);\n                                return true;\n                            }\n\n                            throw 'Invalid abbreviation: mo matching \"' + pairs[c] + '\" found for character at ' + stream.pos;\n                        }\n\n                        if (c == '+') {\n                            // let's see if this is an expando marker\n                            stream.next();\n                            var isMarker = stream.eol() ||  ~'+>^*'.indexOf(stream.peek());\n                            stream.backUp(1);\n                            return isMarker;\n                        }\n\n                        return c != '(' && isAllowedChar(c);\n                    });\n\n                    context.setAbbreviation(stream.current());\n                    stream.start = stream.pos;\n            }\n        }\n\n        if (loopProtector < 1)\n            throw 'Endless loop detected';\n\n        return root;\n    }\n\n    /**\n     * Extract attributes and their values from attribute set:\n     * <code>[attr col=3 title=\"Quoted string\"]</code>\n     * @param {String} attrSet\n     * @returns {Array}\n     */\n    function extractAttributes(attrSet, attrs) {\n        attrSet = require('utils').trim(attrSet);\n        var result = [];\n\n        /** @type StringStream */\n        var stream = require('stringStream').create(attrSet);\n        stream.eatSpace();\n\n        while (!stream.eol()) {\n            stream.start = stream.pos;\n            if (stream.eatWhile(reWord)) {\n                var attrName = stream.current();\n                var attrValue = '';\n                if (stream.peek() == '=') {\n                    stream.next();\n                    stream.start = stream.pos;\n                    var quote = stream.peek();\n\n                    if (quote == '\"' || quote == \"'\") {\n                        stream.next();\n                        if (consumeQuotedValue(stream, quote)) {\n                            attrValue = stream.current();\n                            // strip quotes\n                            attrValue = attrValue.substring(1, attrValue.length - 1);\n                        } else {\n                            throw 'Invalid attribute value';\n                        }\n                    } else if (stream.eatWhile(/[^\\s\\]]/)) {\n                        attrValue = stream.current();\n                    } else {\n                        throw 'Invalid attribute value';\n                    }\n                }\n\n                result.push({\n                    name: attrName,\n                    value: attrValue\n                });\n                stream.eatSpace();\n            } else {\n                break;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Parses tag attributes extracted from abbreviation. If attributes found,\n     * returns object with <code>element</code> and <code>attributes</code>\n     * properties\n     * @param {String} abbr\n     * @returns {Object} Returns <code>null</code> if no attributes found in\n     * abbreviation\n     */\n    function parseAttributes(abbr) {\n        /*\n         * Example of incoming data:\n         * #header\n         * .some.data\n         * .some.data#header\n         * [attr]\n         * #item[attr=Hello other=\"World\"].class\n         */\n        var result = [];\n        var attrMap = {'#': 'id', '.': 'class'};\n        var nameEnd = null;\n\n        /** @type StringStream */\n        var stream = require('stringStream').create(abbr);\n        while (!stream.eol()) {\n            switch (stream.peek()) {\n                case '#': // id\n                case '.': // class\n                    if (nameEnd === null)\n                        nameEnd = stream.pos;\n\n                    var attrName = attrMap[stream.peek()];\n\n                    stream.next();\n                    stream.start = stream.pos;\n                    stream.eatWhile(reWord);\n                    result.push({\n                        name: attrName,\n                        value: stream.current()\n                    });\n                    break;\n                case '[': //begin attribute set\n                    if (nameEnd === null)\n                        nameEnd = stream.pos;\n\n                    stream.start = stream.pos;\n                    if (!stream.skipToPair('[', ']'))\n                        throw 'Invalid attribute set definition';\n\n                    result = result.concat(\n                        extractAttributes(stripped(stream.current()))\n                    );\n                    break;\n                default:\n                    stream.next();\n            }\n        }\n\n        if (!result.length)\n            return null;\n\n        return {\n            element: abbr.substring(0, nameEnd),\n            attributes: optimizeAttributes(result)\n        };\n    }\n\n    /**\n     * Optimize attribute set: remove duplicates and merge class attributes\n     * @param attrs\n     */\n    function optimizeAttributes(attrs) {\n        // clone all attributes to make sure that original objects are \n        // not modified\n        attrs  = _.map(attrs, function(attr) {\n            return _.clone(attr);\n        });\n\n        var lookup = {};\n        return _.filter(attrs, function(attr) {\n            if (!(attr.name in lookup)) {\n                return lookup[attr.name] = attr;\n            }\n\n            var la = lookup[attr.name];\n\n            if (attr.name.toLowerCase() == 'class') {\n                la.value += (la.value.length ? ' ' : '') + attr.value;\n            } else {\n                la.value = attr.value;\n            }\n\n            return false;\n        });\n    }\n\n    /**\n     * Extract text data from abbreviation: if <code>a{hello}</code> abbreviation\n     * is passed, returns object <code>{element: 'a', text: 'hello'}</code>.\n     * If nothing found, returns <code>null</code>\n     * @param {String} abbr\n     *\n     */\n    function extractText(abbr) {\n        if (!~abbr.indexOf('{'))\n            return null;\n\n        /** @type StringStream */\n        var stream = require('stringStream').create(abbr);\n        while (!stream.eol()) {\n            switch (stream.peek()) {\n                case '[':\n                case '(':\n                    stream.skipToPair(stream.peek(), pairs[stream.peek()]); break;\n\n                case '{':\n                    stream.start = stream.pos;\n                    stream.skipToPair('{', '}');\n                    return {\n                        element: abbr.substring(0, stream.start),\n                        text: stripped(stream.current())\n                    };\n\n                default:\n                    stream.next();\n            }\n        }\n    }\n\n    /**\n     * “Un-rolls“ contents of current node: recursively replaces all repeating\n     * children with their repeated clones\n     * @param {AbbreviationNode} node\n     * @returns {AbbreviationNode}\n     */\n    function unroll(node) {\n        for (var i = node.children.length - 1, j, child, maxCount; i >= 0; i--) {\n            child = node.children[i];\n\n            if (child.isRepeating()) {\n                maxCount = j = child.repeatCount;\n                child.repeatCount = 1;\n                child.updateProperty('counter', 1);\n                child.updateProperty('maxCount', maxCount);\n                while (--j > 0) {\n                    child.parent.addChild(child.clone(), i + 1)\n                        .updateProperty('counter', j + 1)\n                        .updateProperty('maxCount', maxCount);\n                }\n            }\n        }\n\n        // to keep proper 'counter' property, we need to walk\n        // on children once again\n        _.each(node.children, unroll);\n\n        return node;\n    }\n\n    /**\n     * Optimizes tree node: replaces empty nodes with their children\n     * @param {AbbreviationNode} node\n     * @return {AbbreviationNode}\n     */\n    function squash(node) {\n        for (var i = node.children.length - 1; i >= 0; i--) {\n            /** @type AbbreviationNode */\n            var n = node.children[i];\n            if (n.isGroup()) {\n                n.replace(squash(n).children);\n            } else if (n.isEmpty()) {\n                n.remove();\n            }\n        }\n\n        _.each(node.children, squash);\n\n        return node;\n    }\n\n    function isAllowedChar(ch) {\n        var charCode = ch.charCodeAt(0);\n        var specialChars = '#.*:$-_!@|%';\n\n        return (charCode > 64 && charCode < 91)       // uppercase letter\n            || (charCode > 96 && charCode < 123)  // lowercase letter\n            || (charCode > 47 && charCode < 58)   // number\n            || specialChars.indexOf(ch) != -1;    // special character\n    }\n\n    // XXX add counter replacer function as output processor\n    outputProcessors.push(function(text, node) {\n        return require('utils').replaceCounter(text, node.counter, node.maxCount);\n    });\n\n    return {\n        /**\n         * Parses abbreviation into tree with respect of groups,\n         * text nodes and attributes. Each node of the tree is a single\n         * abbreviation. Tree represents actual structure of the outputted\n         * result\n         * @memberOf abbreviationParser\n         * @param {String} abbr Abbreviation to parse\n         * @param {Object} options Additional options for parser and processors\n         *\n         * @return {AbbreviationNode}\n         */\n        parse: function(abbr, options) {\n            options = options || {};\n\n            var tree = parseAbbreviation(abbr);\n\n            if (options.contextNode) {\n                // add info about context node –\n                // a parent XHTML node in editor inside which abbreviation is \n                // expanded\n                tree._name = options.contextNode.name;\n                var attrLookup = {};\n                _.each(tree._attributes, function(attr) {\n                    attrLookup[attr.name] = attr;\n                });\n\n                _.each(options.contextNode.attributes, function(attr) {\n                    if (attr.name in attrLookup) {\n                        attrLookup[attr.name].value = attr.value;\n                    } else {\n                        attr = _.clone(attr);\n                        tree._attributes.push(attr);\n                        attrLookup[attr.name] = attr;\n                    }\n                });\n            }\n\n\n            // apply preprocessors\n            _.each(preprocessors, function(fn) {\n                fn(tree, options);\n            });\n\n            tree = squash(unroll(tree));\n\n            // apply postprocessors\n            _.each(postprocessors, function(fn) {\n                fn(tree, options);\n            });\n\n            return tree;\n        },\n\n        AbbreviationNode: AbbreviationNode,\n\n        /**\n         * Add new abbreviation preprocessor. <i>Preprocessor</i> is a function\n         * that applies to a parsed abbreviation tree right after it get parsed.\n         * The passed tree is in unoptimized state.\n         * @param {Function} fn Preprocessor function. This function receives\n         * two arguments: parsed abbreviation tree (<code>AbbreviationNode</code>)\n         * and <code>options</code> hash that was passed to <code>parse</code>\n         * method\n         */\n        addPreprocessor: function(fn) {\n            if (!_.include(preprocessors, fn))\n                preprocessors.push(fn);\n        },\n\n        /**\n         * Removes registered preprocessor\n         */\n        removeFilter: function(fn) {\n            preprocessor = _.without(preprocessors, fn);\n        },\n\n        /**\n         * Adds new abbreviation postprocessor. <i>Postprocessor</i> is a\n         * functinon that applies to <i>optimized</i> parsed abbreviation tree\n         * right before it returns from <code>parse()</code> method\n         * @param {Function} fn Postprocessor function. This function receives\n         * two arguments: parsed abbreviation tree (<code>AbbreviationNode</code>)\n         * and <code>options</code> hash that was passed to <code>parse</code>\n         * method\n         */\n        addPostprocessor: function(fn) {\n            if (!_.include(postprocessors, fn))\n                postprocessors.push(fn);\n        },\n\n        /**\n         * Removes registered postprocessor function\n         */\n        removePostprocessor: function(fn) {\n            postprocessors = _.without(postprocessors, fn);\n        },\n\n        /**\n         * Registers output postprocessor. <i>Output processor</i> is a\n         * function that applies to output part (<code>start</code>,\n         * <code>end</code> and <code>content</code>) when\n         * <code>AbbreviationNode.toString()</code> method is called\n         */\n        addOutputProcessor: function(fn) {\n            if (!_.include(outputProcessors, fn))\n                outputProcessors.push(fn);\n        },\n\n        /**\n         * Removes registered output processor\n         */\n        removeOutputProcessor: function(fn) {\n            outputProcessors = _.without(outputProcessors, fn);\n        },\n\n        /**\n         * Check if passed symbol is valid symbol for abbreviation expression\n         * @param {String} ch\n         * @return {Boolean}\n         */\n        isAllowedChar: function(ch) {\n            ch = String(ch); // convert Java object to JS\n            return isAllowedChar(ch) || ~'>+^[](){}'.indexOf(ch);\n        }\n    };\n});/**\n * Processor function that matches parsed <code>AbbreviationNode</code>\n * against resources defined in <code>resource</code> module\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    /**\n     * Finds matched resources for child nodes of passed <code>node</code>\n     * element. A matched resource is a reference to <i>snippets.json</i> entry\n     * that describes output of parsed node\n     * @param {AbbreviationNode} node\n     * @param {String} syntax\n     */\n    function matchResources(node, syntax) {\n        var resources = require('resources');\n        var elements = require('elements');\n        var parser = require('abbreviationParser');\n\n        // do a shallow copy because the children list can be modified during\n        // resource matching\n        _.each(_.clone(node.children), /** @param {AbbreviationNode} child */ function(child) {\n            var r = resources.getMatchedResource(child, syntax);\n            if (_.isString(r)) {\n                child.data('resource', elements.create('snippet', r));\n            } else if (elements.is(r, 'reference')) {\n                // it’s a reference to another abbreviation:\n                // parse it and insert instead of current child\n                /** @type AbbreviationNode */\n                var subtree = parser.parse(r.data, {\n                    syntax: syntax\n                });\n\n                // if context element should be repeated, check if we need to \n                // transfer repeated element to specific child node\n                if (child.repeatCount > 1) {\n                    var repeatedChildren = subtree.findAll(function(node) {\n                        return node.hasImplicitRepeat;\n                    });\n\n                    _.each(repeatedChildren, function(node) {\n                        node.repeatCount = child.repeatCount;\n                        node.hasImplicitRepeat = false;\n                    });\n                }\n\n                // move child‘s children into the deepest child of new subtree\n                var deepestChild = subtree.deepestChild();\n                if (deepestChild) {\n                    _.each(child.children, function(c) {\n                        deepestChild.addChild(c);\n                    });\n                }\n\n                // copy current attributes to children\n                _.each(subtree.children, function(node) {\n                    _.each(child.attributeList(), function(attr) {\n                        node.attribute(attr.name, attr.value);\n                    });\n                });\n\n                child.replace(subtree.children);\n            } else {\n                child.data('resource', r);\n            }\n\n            matchResources(child, syntax);\n        });\n    }\n\n    // XXX register abbreviation filter that creates references to resources\n    // on abbreviation nodes\n    /**\n     * @param {AbbreviationNode} tree\n     */\n    require('abbreviationParser').addPreprocessor(function(tree, options) {\n        var syntax = options.syntax || emmet.defaultSyntax();\n        matchResources(tree, syntax);\n    });\n\n});/**\n * Pasted content abbreviation processor. A pasted content is a content that\n * should be inserted into implicitly repeated abbreviation nodes.\n * This processor powers “Wrap With Abbreviation” action\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    var parser = require('abbreviationParser');\n    var outputPlaceholder = '$#';\n\n    /**\n     * Locates output placeholders inside text\n     * @param {String} text\n     * @returns {Array} Array of ranges of output placeholder in text\n     */\n    function locateOutputPlaceholder(text) {\n        var range = require('range');\n        var result = [];\n\n        /** @type StringStream */\n        var stream = require('stringStream').create(text);\n\n        while (!stream.eol()) {\n            if (stream.peek() == '\\\\') {\n                stream.next();\n            } else {\n                stream.start = stream.pos;\n                if (stream.match(outputPlaceholder, true)) {\n                    result.push(range.create(stream.start, outputPlaceholder));\n                    continue;\n                }\n            }\n            stream.next();\n        }\n\n        return result;\n    }\n\n    /**\n     * Replaces output placeholders inside <code>source</code> with\n     * <code>value</code>\n     * @param {String} source\n     * @param {String} value\n     * @returns {String}\n     */\n    function replaceOutputPlaceholders(source, value) {\n        var utils = require('utils');\n        var ranges = locateOutputPlaceholder(source);\n\n        ranges.reverse();\n        _.each(ranges, function(r) {\n            source = utils.replaceSubstring(source, value, r);\n        });\n\n        return source;\n    }\n\n    /**\n     * Check if parsed node contains output placeholder – a target where\n     * pasted content should be inserted\n     * @param {AbbreviationNode} node\n     * @returns {Boolean}\n     */\n    function hasOutputPlaceholder(node) {\n        if (locateOutputPlaceholder(node.content).length)\n            return true;\n\n        // check if attributes contains placeholder\n        return !!_.find(node.attributeList(), function(attr) {\n            return !!locateOutputPlaceholder(attr.value).length;\n        });\n    }\n\n    /**\n     * Insert pasted content into correct positions of parsed node\n     * @param {AbbreviationNode} node\n     * @param {String} content\n     * @param {Boolean} overwrite Overwrite node content if no value placeholders\n     * found instead of appending to existing content\n     */\n    function insertPastedContent(node, content, overwrite) {\n        var nodesWithPlaceholders = node.findAll(function(item) {\n            return hasOutputPlaceholder(item);\n        });\n\n        if (hasOutputPlaceholder(node))\n            nodesWithPlaceholders.unshift(node);\n\n        if (nodesWithPlaceholders.length) {\n            _.each(nodesWithPlaceholders, function(item) {\n                item.content = replaceOutputPlaceholders(item.content, content);\n                _.each(item._attributes, function(attr) {\n                    attr.value = replaceOutputPlaceholders(attr.value, content);\n                });\n            });\n        } else {\n            // on output placeholders in subtree, insert content in the deepest\n            // child node\n            var deepest = node.deepestChild() || node;\n            if (overwrite) {\n                deepest.content = content;\n            } else {\n                deepest.content = require('abbreviationUtils').insertChildContent(deepest.content, content);\n            }\n        }\n    }\n\n    /**\n     * @param {AbbreviationNode} tree\n     * @param {Object} options\n     */\n    parser.addPreprocessor(function(tree, options) {\n        if (options.pastedContent) {\n            var utils = require('utils');\n            var lines = _.map(utils.splitByLines(options.pastedContent, true), utils.trim);\n\n            // set repeat count for implicitly repeated elements before\n            // tree is unrolled\n            tree.findAll(function(item) {\n                if (item.hasImplicitRepeat) {\n                    item.data('paste', lines);\n                    return item.repeatCount = lines.length;\n                }\n            });\n        }\n    });\n\n    /**\n     * @param {AbbreviationNode} tree\n     * @param {Object} options\n     */\n    parser.addPostprocessor(function(tree, options) {\n        // for each node with pasted content, update text data\n        var targets = tree.findAll(function(item) {\n            var pastedContentObj = item.data('paste');\n            var pastedContent = '';\n            if (_.isArray(pastedContentObj)) {\n                pastedContent = pastedContentObj[item.counter - 1];\n            } else if (_.isFunction(pastedContentObj)) {\n                pastedContent = pastedContentObj(item.counter - 1, item.content);\n            } else if (pastedContentObj) {\n                pastedContent = pastedContentObj;\n            }\n\n            if (pastedContent) {\n                insertPastedContent(item, pastedContent, !!item.data('pasteOverwrites'));\n            }\n\n            item.data('paste', null);\n            return !!pastedContentObj;\n        });\n\n        if (!targets.length && options.pastedContent) {\n            // no implicitly repeated elements, put pasted content in\n            // the deepest child\n            insertPastedContent(tree, options.pastedContent);\n        }\n    });\n});/**\n * Resolves tag names in abbreviations with implied name\n */\nemmet.exec(function(require, _) {\n    /**\n     * Resolves implicit node names in parsed tree\n     * @param {AbbreviationNode} tree\n     */\n    function resolveNodeNames(tree) {\n        var tagName = require('tagName');\n        _.each(tree.children, function(node) {\n            if (node.hasImplicitName() || node.data('forceNameResolving')) {\n                node._name = tagName.resolve(node.parent.name());\n            }\n            resolveNodeNames(node);\n        });\n\n        return tree;\n    }\n\n    require('abbreviationParser').addPostprocessor(resolveNodeNames);\n});/**\n * @author Stoyan Stefanov\n * @link https://github.com/stoyan/etc/tree/master/cssex\n */\n\nemmet.define('cssParser', function(require, _) {\n    var walker, tokens = [], isOp, isNameChar, isDigit;\n\n    // walks around the source\n    walker = {\n        lines: null,\n        total_lines: 0,\n        linenum: -1,\n        line: '',\n        ch: '',\n        chnum: -1,\n        init: function (source) {\n            var me = walker;\n\n            // source, yumm\n            me.lines = source\n                .replace(/\\r\\n/g, '\\n')\n                .replace(/\\r/g, '\\n')\n                .split('\\n');\n            me.total_lines = me.lines.length;\n\n            // reset\n            me.chnum = -1;\n            me.linenum = -1;\n            me.ch = '';\n            me.line = '';\n\n            // advance\n            me.nextLine();\n            me.nextChar();\n        },\n        nextLine: function () {\n            var me = this;\n            me.linenum += 1;\n            if (me.total_lines <= me.linenum) {\n                me.line = false;\n            } else {\n                me.line = me.lines[me.linenum];\n            }\n            if (me.chnum !== -1) {\n                me.chnum = 0;\n            }\n            return me.line;\n        },\n        nextChar: function () {\n            var me = this;\n            me.chnum += 1;\n            while (me.line.charAt(me.chnum) === '') {\n                if (this.nextLine() === false) {\n                    me.ch = false;\n                    return false; // end of source\n                }\n                me.chnum = -1;\n                me.ch = '\\n';\n                return '\\n';\n            }\n            me.ch = me.line.charAt(me.chnum);\n            return me.ch;\n        },\n        peek: function() {\n            return this.line.charAt(this.chnum + 1);\n        }\n    };\n\n    // utility helpers\n    isNameChar = function (c) {\n        // be more tolerate for name tokens: allow & character for LESS syntax\n        return (c == '&' || c === '_' || c === '-' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));\n    };\n\n    isDigit = function (ch) {\n        return (ch !== false && ch >= '0' && ch <= '9');\n    };\n\n    isOp = (function () {\n        var opsa = \"{}[]()+*=.,;:>~|\\\\%$#@^!\".split(''),\n            opsmatcha = \"*^|$~\".split(''),\n            ops = {},\n            opsmatch = {},\n            i = 0;\n        for (; i < opsa.length; i += 1) {\n            ops[opsa[i]] = true;\n        }\n        for (i = 0; i < opsmatcha.length; i += 1) {\n            opsmatch[opsmatcha[i]] = true;\n        }\n        return function (ch, matchattr) {\n            if (matchattr) {\n                return !!opsmatch[ch];\n            }\n            return !!ops[ch];\n        };\n    }());\n\n    // shorthands\n    function isset(v) {\n        return typeof v !== 'undefined';\n    }\n    function getConf() {\n        return {\n            'char': walker.chnum,\n            line: walker.linenum\n        };\n    }\n\n\n    // creates token objects and pushes them to a list\n    function tokener(value, type, conf) {\n        var w = walker, c = conf || {};\n        tokens.push({\n            charstart: isset(c['char']) ? c['char'] : w.chnum,\n            charend:   isset(c.charend) ? c.charend : w.chnum,\n            linestart: isset(c.line)    ? c.line    : w.linenum,\n            lineend:   isset(c.lineend) ? c.lineend : w.linenum,\n            value:     value,\n            type:      type || value\n        });\n    }\n\n    // oops\n    function error(m, config) {\n        var w = walker,\n            conf = config || {},\n            c = isset(conf['char']) ? conf['char'] : w.chnum,\n            l = isset(conf.line) ? conf.line : w.linenum;\n        return {\n            name: \"ParseError\",\n            message: m + \" at line \" + (l + 1) + ' char ' + (c + 1),\n            walker: w,\n            tokens: tokens\n        };\n    }\n\n\n    // token handlers follow for:\n    // white space, comment, string, identifier, number, operator\n    function white() {\n\n        var c = walker.ch,\n            token = '',\n            conf = getConf();\n\n        while (c === \" \" || c === \"\\t\") {\n            token += c;\n            c = walker.nextChar();\n        }\n\n        tokener(token, 'white', conf);\n\n    }\n\n    function comment() {\n\n        var w = walker,\n            c = w.ch,\n            token = c,\n            cnext,\n            conf = getConf();\n\n        cnext = w.nextChar();\n\n        if (cnext === '/') {\n            // inline comment in SCSS and such\n            token += cnext;\n            var pk = w.peek();\n            while (pk && pk !== '\\n') {\n                token += cnext;\n                cnext = w.nextChar();\n                pk = w.peek();\n            }\n        } else if (cnext === '*') {\n            // multiline CSS commment\n            while (!(c === \"*\" && cnext === \"/\")) {\n                token += cnext;\n                c = cnext;\n                cnext = w.nextChar();\n            }\n        } else {\n            // oops, not a comment, just a /\n            conf.charend = conf['char'];\n            conf.lineend = conf.line;\n            return tokener(token, token, conf);\n        }\n\n        token += cnext;\n        w.nextChar();\n        tokener(token, 'comment', conf);\n    }\n\n    function str() {\n        var w = walker,\n            c = w.ch,\n            q = c,\n            token = c,\n            cnext,\n            conf = getConf();\n\n        c = w.nextChar();\n\n        while (c !== q) {\n\n            if (c === '\\n') {\n                cnext = w.nextChar();\n                if (cnext === \"\\\\\") {\n                    token += c + cnext;\n                } else {\n                    // end of line with no \\ escape = bad\n                    throw error(\"Unterminated string\", conf);\n                }\n            } else {\n                if (c === \"\\\\\") {\n                    token += c + w.nextChar();\n                } else {\n                    token += c;\n                }\n            }\n\n            c = w.nextChar();\n\n        }\n        token += c;\n        w.nextChar();\n        tokener(token, 'string', conf);\n    }\n\n    function brace() {\n        var w = walker,\n            c = w.ch,\n            depth = 0,\n            token = c,\n            conf = getConf();\n\n        c = w.nextChar();\n\n        while (c !== ')' && !depth) {\n            if (c === '(') {\n                depth++;\n            } else if (c === ')') {\n                depth--;\n            } else if (c === false) {\n                throw error(\"Unterminated brace\", conf);\n            }\n\n            token += c;\n            c = w.nextChar();\n        }\n\n        token += c;\n        w.nextChar();\n        tokener(token, 'brace', conf);\n    }\n\n    function identifier(pre) {\n        var w = walker,\n            c = w.ch,\n            conf = getConf(),\n            token = (pre) ? pre + c : c;\n\n        c = w.nextChar();\n\n        if (pre) { // adjust token position\n            conf['char'] -= pre.length;\n        }\n\n        while (isNameChar(c) || isDigit(c)) {\n            token += c;\n            c = w.nextChar();\n        }\n\n        tokener(token, 'identifier', conf);\n    }\n\n    function num() {\n        var w = walker,\n            c = w.ch,\n            conf = getConf(),\n            token = c,\n            point = token === '.',\n            nondigit;\n\n        c = w.nextChar();\n        nondigit = !isDigit(c);\n\n        // .2px or .classname?\n        if (point && nondigit) {\n            // meh, NaN, could be a class name, so it's an operator for now\n            conf.charend = conf['char'];\n            conf.lineend = conf.line;\n            return tokener(token, '.', conf);\n        }\n\n        // -2px or -moz-something\n        if (token === '-' && nondigit) {\n            return identifier('-');\n        }\n\n        while (c !== false && (isDigit(c) || (!point && c === '.'))) { // not end of source && digit or first instance of .\n            if (c === '.') {\n                point = true;\n            }\n            token += c;\n            c = w.nextChar();\n        }\n\n        tokener(token, 'number', conf);\n\n    }\n\n    function op() {\n        var w = walker,\n            c = w.ch,\n            conf = getConf(),\n            token = c,\n            next = w.nextChar();\n\n        if (next === \"=\" && isOp(token, true)) {\n            token += next;\n            tokener(token, 'match', conf);\n            w.nextChar();\n            return;\n        }\n\n        conf.charend = conf['char'] + 1;\n        conf.lineend = conf.line;\n        tokener(token, token, conf);\n    }\n\n\n    // call the appropriate handler based on the first character in a token suspect\n    function tokenize() {\n\n        var ch = walker.ch;\n\n        if (ch === \" \" || ch === \"\\t\") {\n            return white();\n        }\n\n        if (ch === '/') {\n            return comment();\n        }\n\n        if (ch === '\"' || ch === \"'\") {\n            return str();\n        }\n\n        if (ch === '(') {\n            return brace();\n        }\n\n        if (ch === '-' || ch === '.' || isDigit(ch)) { // tricky - char: minus (-1px) or dash (-moz-stuff)\n            return num();\n        }\n\n        if (isNameChar(ch)) {\n            return identifier();\n        }\n\n        if (isOp(ch)) {\n            return op();\n        }\n\n        if (ch === \"\\n\") {\n            tokener(\"line\");\n            walker.nextChar();\n            return;\n        }\n\n        throw error(\"Unrecognized character\");\n    }\n\n    /**\n     * Returns newline character at specified position in content\n     * @param {String} content\n     * @param {Number} pos\n     * @return {String}\n     */\n    function getNewline(content, pos) {\n        return content.charAt(pos) == '\\r' && content.charAt(pos + 1) == '\\n'\n            ? '\\r\\n'\n            : content.charAt(pos);\n    }\n\n    return {\n        /**\n         * @param source\n         * @returns\n         * @memberOf emmet.cssParser\n         */\n        lex: function (source) {\n            walker.init(source);\n            tokens = [];\n            while (walker.ch !== false) {\n                tokenize();\n            }\n            return tokens;\n        },\n\n        /**\n         * Tokenizes CSS source\n         * @param {String} source\n         * @returns {Array}\n         */\n        parse: function(source) {\n            // transform tokens\n            var pos = 0;\n            return _.map(this.lex(source), function(token) {\n                if (token.type == 'line') {\n                    token.value = getNewline(source, pos);\n                }\n\n                return {\n                    type: token.type,\n                    start: pos,\n                    end: (pos += token.value.length)\n                };\n            });\n        },\n\n        toSource: function (toks) {\n            var i = 0, max = toks.length, t, src = '';\n            for (; i < max; i += 1) {\n                t = toks[i];\n                if (t.type === 'line') {\n                    src += '\\n';\n                } else {\n                    src += t.value;\n                }\n            }\n            return src;\n        }\n    };\n});/**\n * HTML tokenizer by Marijn Haverbeke\n * http://codemirror.net/\n * @constructor\n * @memberOf __xmlParseDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('xmlParser', function(require, _) {\n    var Kludges = {\n        autoSelfClosers : {},\n        implicitlyClosed : {},\n        contextGrabbers : {},\n        doNotIndent : {},\n        allowUnquoted : true,\n        allowMissing : true\n    };\n\n    // Return variables for tokenizers\n    var tagName = null, type = null;\n\n    function inText(stream, state) {\n        function chain(parser) {\n            state.tokenize = parser;\n            return parser(stream, state);\n        }\n\n        var ch = stream.next();\n        if (ch == \"<\") {\n            if (stream.eat(\"!\")) {\n                if (stream.eat(\"[\")) {\n                    if (stream.match(\"CDATA[\"))\n                        return chain(inBlock(\"atom\", \"]]>\"));\n                    else\n                        return null;\n                } else if (stream.match(\"--\"))\n                    return chain(inBlock(\"comment\", \"-->\"));\n                else if (stream.match(\"DOCTYPE\", true, true)) {\n                    stream.eatWhile(/[\\w\\._\\-]/);\n                    return chain(doctype(1));\n                } else\n                    return null;\n            } else if (stream.eat(\"?\")) {\n                stream.eatWhile(/[\\w\\._\\-]/);\n                state.tokenize = inBlock(\"meta\", \"?>\");\n                return \"meta\";\n            } else {\n                type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n                stream.eatSpace();\n                tagName = \"\";\n                var c;\n                while ((c = stream.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/)))\n                    tagName += c;\n                state.tokenize = inTag;\n                return \"tag\";\n            }\n        } else if (ch == \"&\") {\n            var ok;\n            if (stream.eat(\"#\")) {\n                if (stream.eat(\"x\")) {\n                    ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n                } else {\n                    ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n                }\n            } else {\n                ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n            }\n            return ok ? \"atom\" : \"error\";\n        } else {\n            stream.eatWhile(/[^&<]/);\n            return \"text\";\n        }\n    }\n\n    function inTag(stream, state) {\n        var ch = stream.next();\n        if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n            state.tokenize = inText;\n            type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n            return \"tag\";\n        } else if (ch == \"=\") {\n            type = \"equals\";\n            return null;\n        } else if (/[\\'\\\"]/.test(ch)) {\n            state.tokenize = inAttribute(ch);\n            return state.tokenize(stream, state);\n        } else {\n            stream.eatWhile(/[^\\s\\u00a0=<>\\\"\\'\\/?]/);\n            return \"word\";\n        }\n    }\n\n    function inAttribute(quote) {\n        return function(stream, state) {\n            while (!stream.eol()) {\n                if (stream.next() == quote) {\n                    state.tokenize = inTag;\n                    break;\n                }\n            }\n            return \"string\";\n        };\n    }\n\n    function inBlock(style, terminator) {\n        return function(stream, state) {\n            while (!stream.eol()) {\n                if (stream.match(terminator)) {\n                    state.tokenize = inText;\n                    break;\n                }\n                stream.next();\n            }\n            return style;\n        };\n    }\n\n    function doctype(depth) {\n        return function(stream, state) {\n            var ch;\n            while ((ch = stream.next()) != null) {\n                if (ch == \"<\") {\n                    state.tokenize = doctype(depth + 1);\n                    return state.tokenize(stream, state);\n                } else if (ch == \">\") {\n                    if (depth == 1) {\n                        state.tokenize = inText;\n                        break;\n                    } else {\n                        state.tokenize = doctype(depth - 1);\n                        return state.tokenize(stream, state);\n                    }\n                }\n            }\n            return \"meta\";\n        };\n    }\n\n    var curState = null, setStyle;\n    function pass() {\n        for (var i = arguments.length - 1; i >= 0; i--)\n            curState.cc.push(arguments[i]);\n    }\n\n    function cont() {\n        pass.apply(null, arguments);\n        return true;\n    }\n\n    function pushContext(tagName, startOfLine) {\n        var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName)\n            || (curState.context && curState.context.noIndent);\n        curState.context = {\n            prev : curState.context,\n            tagName : tagName,\n            indent : curState.indented,\n            startOfLine : startOfLine,\n            noIndent : noIndent\n        };\n    }\n\n    function popContext() {\n        if (curState.context)\n            curState.context = curState.context.prev;\n    }\n\n    function element(type) {\n        if (type == \"openTag\") {\n            curState.tagName = tagName;\n            return cont(attributes, endtag(curState.startOfLine));\n        } else if (type == \"closeTag\") {\n            var err = false;\n            if (curState.context) {\n                if (curState.context.tagName != tagName) {\n                    if (Kludges.implicitlyClosed.hasOwnProperty(curState.context.tagName.toLowerCase())) {\n                        popContext();\n                    }\n                    err = !curState.context || curState.context.tagName != tagName;\n                }\n            } else {\n                err = true;\n            }\n\n            if (err)\n                setStyle = \"error\";\n            return cont(endclosetag(err));\n        }\n        return cont();\n    }\n\n    function endtag(startOfLine) {\n        return function(type) {\n            if (type == \"selfcloseTag\"\n                || (type == \"endTag\" && Kludges.autoSelfClosers\n                    .hasOwnProperty(curState.tagName\n                        .toLowerCase()))) {\n                maybePopContext(curState.tagName.toLowerCase());\n                return cont();\n            }\n            if (type == \"endTag\") {\n                maybePopContext(curState.tagName.toLowerCase());\n                pushContext(curState.tagName, startOfLine);\n                return cont();\n            }\n            return cont();\n        };\n    }\n\n    function endclosetag(err) {\n        return function(type) {\n            if (err)\n                setStyle = \"error\";\n            if (type == \"endTag\") {\n                popContext();\n                return cont();\n            }\n            setStyle = \"error\";\n            return cont(arguments.callee);\n        };\n    }\n\n    function maybePopContext(nextTagName) {\n        var parentTagName;\n        while (true) {\n            if (!curState.context) {\n                return;\n            }\n            parentTagName = curState.context.tagName.toLowerCase();\n            if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName)\n                || !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n                return;\n            }\n            popContext();\n        }\n    }\n\n    function attributes(type) {\n        if (type == \"word\") {\n            setStyle = \"attribute\";\n            return cont(attribute, attributes);\n        }\n        if (type == \"endTag\" || type == \"selfcloseTag\")\n            return pass();\n        setStyle = \"error\";\n        return cont(attributes);\n    }\n\n    function attribute(type) {\n        if (type == \"equals\")\n            return cont(attvalue, attributes);\n        if (!Kludges.allowMissing)\n            setStyle = \"error\";\n        return (type == \"endTag\" || type == \"selfcloseTag\") ? pass()\n            : cont();\n    }\n\n    function attvalue(type) {\n        if (type == \"string\")\n            return cont(attvaluemaybe);\n        if (type == \"word\" && Kludges.allowUnquoted) {\n            setStyle = \"string\";\n            return cont();\n        }\n        setStyle = \"error\";\n        return (type == \"endTag\" || type == \"selfCloseTag\") ? pass()\n            : cont();\n    }\n\n    function attvaluemaybe(type) {\n        if (type == \"string\")\n            return cont(attvaluemaybe);\n        else\n            return pass();\n    }\n\n    function startState() {\n        return {\n            tokenize : inText,\n            cc : [],\n            indented : 0,\n            startOfLine : true,\n            tagName : null,\n            context : null\n        };\n    }\n\n    function token(stream, state) {\n        if (stream.sol()) {\n            state.startOfLine = true;\n            state.indented = 0;\n        }\n\n        if (stream.eatSpace())\n            return null;\n\n        setStyle = type = tagName = null;\n        var style = state.tokenize(stream, state);\n        state.type = type;\n        if ((style || type) && style != \"comment\") {\n            curState = state;\n            while (true) {\n                var comb = state.cc.pop() || element;\n                if (comb(type || style))\n                    break;\n            }\n        }\n        state.startOfLine = false;\n        return setStyle || style;\n    }\n\n    return {\n        /**\n         * @memberOf emmet.xmlParser\n         * @returns\n         */\n        parse: function(data, offset) {\n            offset = offset || 0;\n            var state = startState();\n            var stream = require('stringStream').create(data);\n            var tokens = [];\n            while (!stream.eol()) {\n                tokens.push({\n                    type: token(stream, state),\n                    start: stream.start + offset,\n                    end: stream.pos + offset\n                });\n                stream.start = stream.pos;\n            }\n\n            return tokens;\n        }\n    };\n});\n/*!\n * string_score.js: String Scoring Algorithm 0.1.10 \n *\n * http://joshaven.com/string_score\n * https://github.com/joshaven/string_score\n *\n * Copyright (C) 2009-2011 Joshaven Potter <yourtech@gmail.com>\n * Special thanks to all of the contributors listed here https://github.com/joshaven/string_score\n * MIT license: http://www.opensource.org/licenses/mit-license.php\n *\n * Date: Tue Mar 1 2011\n */\n\n/**\n * Scores a string against another string.\n *  'Hello World'.score('he');     //=> 0.5931818181818181\n *  'Hello World'.score('Hello');  //=> 0.7318181818181818\n */\nemmet.define('string-score', function(require, _) {\n    return {\n        score: function(string, abbreviation, fuzziness) {\n            // If the string is equal to the abbreviation, perfect match.\n            if (string == abbreviation) {return 1;}\n            //if it's not a perfect match and is empty return 0\n            if(abbreviation == \"\") {return 0;}\n\n            var total_character_score = 0,\n                abbreviation_length = abbreviation.length,\n                string_length = string.length,\n                start_of_string_bonus,\n                abbreviation_score,\n                fuzzies=1,\n                final_score;\n\n            // Walk through abbreviation and add up scores.\n            for (var i = 0,\n                     character_score/* = 0*/,\n                     index_in_string/* = 0*/,\n                     c/* = ''*/,\n                     index_c_lowercase/* = 0*/,\n                     index_c_uppercase/* = 0*/,\n                     min_index/* = 0*/;\n                 i < abbreviation_length;\n                 ++i) {\n\n                // Find the first case-insensitive match of a character.\n                c = abbreviation.charAt(i);\n\n                index_c_lowercase = string.indexOf(c.toLowerCase());\n                index_c_uppercase = string.indexOf(c.toUpperCase());\n                min_index = Math.min(index_c_lowercase, index_c_uppercase);\n                index_in_string = (min_index > -1) ? min_index : Math.max(index_c_lowercase, index_c_uppercase);\n\n                if (index_in_string === -1) {\n                    if (fuzziness) {\n                        fuzzies += 1-fuzziness;\n                        continue;\n                    } else {\n                        return 0;\n                    }\n                } else {\n                    character_score = 0.1;\n                }\n\n                // Set base score for matching 'c'.\n\n                // Same case bonus.\n                if (string[index_in_string] === c) {\n                    character_score += 0.1;\n                }\n\n                // Consecutive letter & start-of-string Bonus\n                if (index_in_string === 0) {\n                    // Increase the score when matching first character of the remainder of the string\n                    character_score += 0.6;\n                    if (i === 0) {\n                        // If match is the first character of the string\n                        // & the first character of abbreviation, add a\n                        // start-of-string match bonus.\n                        start_of_string_bonus = 1; //true;\n                    }\n                }\n                else {\n                    // Acronym Bonus\n                    // Weighing Logic: Typing the first character of an acronym is as if you\n                    // preceded it with two perfect character matches.\n                    if (string.charAt(index_in_string - 1) === ' ') {\n                        character_score += 0.8; // * Math.min(index_in_string, 5); // Cap bonus at 0.4 * 5\n                    }\n                }\n\n                // Left trim the already matched part of the string\n                // (forces sequential matching).\n                string = string.substring(index_in_string + 1, string_length);\n\n                total_character_score += character_score;\n            } // end of for loop\n\n            // Uncomment to weigh smaller words higher.\n            // return total_character_score / string_length;\n\n            abbreviation_score = total_character_score / abbreviation_length;\n            //percentage_of_matched_string = abbreviation_length / string_length;\n            //word_score = abbreviation_score * percentage_of_matched_string;\n\n            // Reduce penalty for longer strings.\n            //final_score = (word_score + abbreviation_score) / 2;\n            final_score = ((abbreviation_score * (abbreviation_length / string_length)) + abbreviation_score) / 2;\n\n            final_score = final_score / fuzzies;\n\n            if (start_of_string_bonus && (final_score + 0.15 < 1)) {\n                final_score += 0.15;\n            }\n\n            return final_score;\n        }\n    };\n});/**\n * Utility module for Emmet\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('utils', function(require, _) {\n    /**\n     * Special token used as a placeholder for caret positions inside\n     * generated output\n     */\n    var caretPlaceholder = '${0}';\n\n    /**\n     * A simple string builder, optimized for faster text concatenation\n     * @param {String} value Initial value\n     */\n    function StringBuilder(value) {\n        this._data = [];\n        this.length = 0;\n\n        if (value)\n            this.append(value);\n    }\n\n    StringBuilder.prototype = {\n        /**\n         * Append string\n         * @param {String} text\n         */\n        append: function(text) {\n            this._data.push(text);\n            this.length += text.length;\n        },\n\n        /**\n         * @returns {String}\n         */\n        toString: function() {\n            return this._data.join('');\n        },\n\n        /**\n         * @returns {String}\n         */\n        valueOf: function() {\n            return this.toString();\n        }\n    };\n\n    return {\n        /** @memberOf utils */\n        reTag: /<\\/?[\\w:\\-]+(?:\\s+[\\w\\-:]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*\\s*(\\/?)>$/,\n\n        /**\n         * Test if passed string ends with XHTML tag. This method is used for testing\n         * '>' character: it belongs to tag or it's a part of abbreviation?\n         * @param {String} str\n         * @return {Boolean}\n         */\n        endsWithTag: function(str) {\n            return this.reTag.test(str);\n        },\n\n        /**\n         * Check if passed symbol is a number\n         * @param {String} ch\n         * @returns {Boolean}\n         */\n        isNumeric: function(ch) {\n            if (typeof(ch) == 'string')\n                ch = ch.charCodeAt(0);\n\n            return (ch && ch > 47 && ch < 58);\n        },\n\n        /**\n         * Trim whitespace from string\n         * @param {String} text\n         * @return {String}\n         */\n        trim: function(text) {\n            return (text || \"\").replace(/^\\s+|\\s+$/g, \"\");\n        },\n\n        /**\n         * Returns newline character\n         * @returns {String}\n         */\n        getNewline: function() {\n            var res = require('resources');\n            if (!res) {\n                return '\\n';\n            }\n\n            var nl = res.getVariable('newline');\n            return _.isString(nl) ? nl : '\\n';\n        },\n\n        /**\n         * Sets new newline character that will be used in output\n         * @param {String} str\n         */\n        setNewline: function(str) {\n            var res = require('resources');\n            res.setVariable('newline', str);\n            res.setVariable('nl', str);\n        },\n\n        /**\n         * Split text into lines. Set <code>remove_empty</code> to true to filter\n         * empty lines\n         * @param {String} text Text to split\n         * @param {Boolean} removeEmpty Remove empty lines from result\n         * @return {Array}\n         */\n        splitByLines: function(text, removeEmpty) {\n            // IE fails to split string by regexp, \n            // need to normalize newlines first\n            // Also, Mozilla's Rhiho JS engine has a weird newline bug\n            var nl = this.getNewline();\n            var lines = (text || '')\n                .replace(/\\r\\n/g, '\\n')\n                .replace(/\\n\\r/g, '\\n')\n                .replace(/\\r/g, '\\n')\n                .replace(/\\n/g, nl)\n                .split(nl);\n\n            if (removeEmpty) {\n                lines = _.filter(lines, function(line) {\n                    return line.length && !!this.trim(line);\n                }, this);\n            }\n\n            return lines;\n        },\n\n        /**\n         * Normalizes newline character: replaces newlines in <code>text</code>\n         * with newline defined in preferences\n         * @param {String} text\n         * @returns {String}\n         */\n        normalizeNewline: function(text) {\n            return this.splitByLines(text).join(this.getNewline());\n        },\n\n        /**\n         * Repeats string <code>howMany</code> times\n         * @param {String} str\n         * @param {Number} how_many\n         * @return {String}\n         */\n        repeatString: function(str, howMany) {\n            var result = [];\n\n            for (var i = 0; i < howMany; i++)\n                result.push(str);\n\n            return result.join('');\n        },\n\n        /**\n         * Returns list of paddings that should be used to align passed string\n         * @param {Array} strings\n         * @returns {Array}\n         */\n        getStringsPads: function(strings) {\n            var lengths = _.map(strings, function(s) {\n                return _.isString(s) ? s.length : +s;\n            });\n\n            var max = _.max(lengths);\n            return _.map(lengths, function(l) {\n                var pad = max - l;\n                return pad ? this.repeatString(' ', pad) : '';\n            }, this);\n        },\n\n        /**\n         * Indents text with padding\n         * @param {String} text Text to indent\n         * @param {String} pad Padding size (number) or padding itself (string)\n         * @return {String}\n         */\n        padString: function(text, pad) {\n            var padStr = (_.isNumber(pad))\n                ? this.repeatString(require('resources').getVariable('indentation') || '\\t', pad)\n                : pad;\n\n            var result = [];\n\n            var lines = this.splitByLines(text);\n            var nl = this.getNewline();\n\n            result.push(lines[0]);\n            for (var j = 1; j < lines.length; j++)\n                result.push(nl + padStr + lines[j]);\n\n            return result.join('');\n        },\n\n        /**\n         * Pad string with zeroes\n         * @param {String} str String to pad\n         * @param {Number} pad Desired string length\n         * @return {String}\n         */\n        zeroPadString: function(str, pad) {\n            var padding = '';\n            var il = str.length;\n\n            while (pad > il++) padding += '0';\n            return padding + str;\n        },\n\n        /**\n         * Removes padding at the beginning of each text's line\n         * @param {String} text\n         * @param {String} pad\n         */\n        unindentString: function(text, pad) {\n            var lines = this.splitByLines(text);\n            for (var i = 0; i < lines.length; i++) {\n                if (lines[i].search(pad) == 0)\n                    lines[i] = lines[i].substr(pad.length);\n            }\n\n            return lines.join(this.getNewline());\n        },\n\n        /**\n         * Replaces unescaped symbols in <code>str</code>. For example, the '$' symbol\n         * will be replaced in 'item$count', but not in 'item\\$count'.\n         * @param {String} str Original string\n         * @param {String} symbol Symbol to replace\n         * @param {String} replace Symbol replacement. Might be a function that\n         * returns new value\n         * @return {String}\n         */\n        replaceUnescapedSymbol: function(str, symbol, replace) {\n            var i = 0;\n            var il = str.length;\n            var sl = symbol.length;\n            var matchCount = 0;\n\n            while (i < il) {\n                if (str.charAt(i) == '\\\\') {\n                    // escaped symbol, skip next character\n                    i += sl + 1;\n                } else if (str.substr(i, sl) == symbol) {\n                    // have match\n                    var curSl = sl;\n                    matchCount++;\n                    var newValue = replace;\n                    if (_.isFunction(replace)) {\n                        var replaceData = replace(str, symbol, i, matchCount);\n                        if (replaceData) {\n                            curSl = replaceData[0].length;\n                            newValue = replaceData[1];\n                        } else {\n                            newValue = false;\n                        }\n                    }\n\n                    if (newValue === false) { // skip replacement\n                        i++;\n                        continue;\n                    }\n\n                    str = str.substring(0, i) + newValue + str.substring(i + curSl);\n                    // adjust indexes\n                    il = str.length;\n                    i += newValue.length;\n                } else {\n                    i++;\n                }\n            }\n\n            return str;\n        },\n\n        /**\n         * Replace variables like ${var} in string\n         * @param {String} str\n         * @param {Object} vars Variable set (defaults to variables defined in\n         * <code>snippets.json</code>) or variable resolver (<code>Function</code>)\n         * @return {String}\n         */\n        replaceVariables: function(str, vars) {\n            vars = vars || {};\n            var resolver = _.isFunction(vars) ? vars : function(str, p1) {\n                return p1 in vars ? vars[p1] : null;\n            };\n\n            var res = require('resources');\n            return require('tabStops').processText(str, {\n                variable: function(data) {\n                    var newValue = resolver(data.token, data.name, data);\n                    if (newValue === null) {\n                        // try to find variable in resources\n                        newValue = res.getVariable(data.name);\n                    }\n\n                    if (newValue === null || _.isUndefined(newValue))\n                    // nothing found, return token itself\n                        newValue = data.token;\n                    return newValue;\n                }\n            });\n        },\n\n        /**\n         * Replaces '$' character in string assuming it might be escaped with '\\'\n         * @param {String} str String where character should be replaced\n         * @param {String} value New value\n         * @return {String}\n         */\n        replaceCounter: function(str, value, total) {\n            var symbol = '$';\n            // in case we received strings from Java, convert the to native strings\n            str = String(str);\n            value = String(value);\n\n            if (/^\\-?\\d+$/.test(value)) {\n                value = +value;\n            }\n\n            var that = this;\n\n            return this.replaceUnescapedSymbol(str, symbol, function(str, symbol, pos, matchNum){\n                if (str.charAt(pos + 1) == '{' || that.isNumeric(str.charAt(pos + 1)) ) {\n                    // it's a variable, skip it\n                    return false;\n                }\n\n                // replace sequense of $ symbols with padded number  \n                var j = pos + 1;\n                while(str.charAt(j) == '$' && str.charAt(j + 1) != '{') j++;\n                var pad = j - pos;\n\n                // get counter base\n                var base = 0, decrement = false, m;\n                if (m = str.substr(j).match(/^@(\\-?)(\\d*)/)) {\n                    j += m[0].length;\n\n                    if (m[1]) {\n                        decrement = true;\n                    }\n\n                    base = parseInt(m[2] || 1) - 1;\n                }\n\n                if (decrement && total && _.isNumber(value)) {\n                    value = total - value + 1;\n                }\n\n                value += base;\n\n                return [str.substring(pos, j), that.zeroPadString(value + '', pad)];\n            });\n        },\n\n        /**\n         * Check if string matches against <code>reTag</code> regexp. This\n         * function may be used to test if provided string contains HTML tags\n         * @param {String} str\n         * @returns {Boolean}\n         */\n        matchesTag: function(str) {\n            return this.reTag.test(str || '');\n        },\n\n        /**\n         * Escapes special characters used in Emmet, like '$', '|', etc.\n         * Use this method before passing to actions like \"Wrap with Abbreviation\"\n         * to make sure that existing special characters won't be altered\n         * @param {String} text\n         * @return {String}\n         */\n        escapeText: function(text) {\n            return text.replace(/([\\$\\\\])/g, '\\\\$1');\n        },\n\n        /**\n         * Unescapes special characters used in Emmet, like '$', '|', etc.\n         * @param {String} text\n         * @return {String}\n         */\n        unescapeText: function(text) {\n            return text.replace(/\\\\(.)/g, '$1');\n        },\n\n        /**\n         * Returns caret placeholder\n         * @returns {String}\n         */\n        getCaretPlaceholder: function() {\n            return _.isFunction(caretPlaceholder)\n                ? caretPlaceholder.apply(this, arguments)\n                : caretPlaceholder;\n        },\n\n        /**\n         * Sets new representation for carets in generated output\n         * @param {String} value New caret placeholder. Might be a\n         * <code>Function</code>\n         */\n        setCaretPlaceholder: function(value) {\n            caretPlaceholder = value;\n        },\n\n        /**\n         * Returns line padding\n         * @param {String} line\n         * @return {String}\n         */\n        getLinePadding: function(line) {\n            return (line.match(/^(\\s+)/) || [''])[0];\n        },\n\n        /**\n         * Helper function that returns padding of line of <code>pos</code>\n         * position in <code>content</code>\n         * @param {String} content\n         * @param {Number} pos\n         * @returns {String}\n         */\n        getLinePaddingFromPosition: function(content, pos) {\n            var lineRange = this.findNewlineBounds(content, pos);\n            return this.getLinePadding(lineRange.substring(content));\n        },\n\n        /**\n         * Escape special regexp chars in string, making it usable for creating dynamic\n         * regular expressions\n         * @param {String} str\n         * @return {String}\n         */\n        escapeForRegexp: function(str) {\n            var specials = new RegExp(\"[.*+?|()\\\\[\\\\]{}\\\\\\\\]\", \"g\"); // .*+?|()[]{}\\\n            return str.replace(specials, \"\\\\$&\");\n        },\n\n        /**\n         * Make decimal number look good: convert it to fixed precision end remove\n         * traling zeroes\n         * @param {Number} num\n         * @param {Number} fracion Fraction numbers (default is 2)\n         * @return {String}\n         */\n        prettifyNumber: function(num, fraction) {\n            return num.toFixed(typeof fraction == 'undefined' ? 2 : fraction).replace(/\\.?0+$/, '');\n        },\n\n        /**\n         * A simple mutable string shim, optimized for faster text concatenation\n         * @param {String} value Initial value\n         * @returns {StringBuilder}\n         */\n        stringBuilder: function(value) {\n            return new StringBuilder(value);\n        },\n\n        /**\n         * Replace substring of <code>str</code> with <code>value</code>\n         * @param {String} str String where to replace substring\n         * @param {String} value New substring value\n         * @param {Number} start Start index of substring to replace. May also\n         * be a <code>Range</code> object: in this case, the <code>end</code>\n         * argument is not required\n         * @param {Number} end End index of substring to replace. If ommited,\n         * <code>start</code> argument is used\n         */\n        replaceSubstring: function(str, value, start, end) {\n            if (_.isObject(start) && 'end' in start) {\n                end = start.end;\n                start = start.start;\n            }\n\n            if (_.isString(end))\n                end = start + end.length;\n\n            if (_.isUndefined(end))\n                end = start;\n\n            if (start < 0 || start > str.length)\n                return str;\n\n            return str.substring(0, start) + value + str.substring(end);\n        },\n\n        /**\n         * Narrows down text range, adjusting selection to non-space characters\n         * @param {String} text\n         * @param {Number} start Starting range in <code>text</code> where\n         * slection should be adjusted. Can also be any object that is accepted\n         * by <code>Range</code> class\n         * @return {Range}\n         */\n        narrowToNonSpace: function(text, start, end) {\n            var range = require('range').create(start, end);\n\n            var reSpace = /[\\s\\n\\r\\u00a0]/;\n            // narrow down selection until first non-space character\n            while (range.start < range.end) {\n                if (!reSpace.test(text.charAt(range.start)))\n                    break;\n\n                range.start++;\n            }\n\n            while (range.end > range.start) {\n                range.end--;\n                if (!reSpace.test(text.charAt(range.end))) {\n                    range.end++;\n                    break;\n                }\n            }\n\n            return range;\n        },\n\n        /**\n         * Find start and end index of text line for <code>from</code> index\n         * @param {String} text\n         * @param {Number} from\n         */\n        findNewlineBounds: function(text, from) {\n            var len = text.length,\n                start = 0,\n                end = len - 1;\n\n            // search left\n            for (var i = from - 1; i > 0; i--) {\n                var ch = text.charAt(i);\n                if (ch == '\\n' || ch == '\\r') {\n                    start = i + 1;\n                    break;\n                }\n            }\n            // search right\n            for (var j = from; j < len; j++) {\n                var ch = text.charAt(j);\n                if (ch == '\\n' || ch == '\\r') {\n                    end = j;\n                    break;\n                }\n            }\n\n            return require('range').create(start, end - start);\n        },\n\n        /**\n         * Deep merge of two or more objects. Taken from jQuery.extend()\n         */\n        deepMerge: function() {\n            var options, name, src, copy, copyIsArray, clone,\n                target = arguments[0] || {},\n                i = 1,\n                length = arguments.length;\n\n\n            // Handle case when target is a string or something (possible in deep copy)\n            if (!_.isObject(target) && !_.isFunction(target)) {\n                target = {};\n            }\n\n            for ( ; i < length; i++ ) {\n                // Only deal with non-null/undefined values\n                if ( (options = arguments[ i ]) != null ) {\n                    // Extend the base object\n                    for ( name in options ) {\n                        src = target[ name ];\n                        copy = options[ name ];\n\n                        // Prevent never-ending loop\n                        if ( target === copy ) {\n                            continue;\n                        }\n\n                        // Recurse if we're merging plain objects or arrays\n                        if ( copy && ( _.isObject(copy) || (copyIsArray = _.isArray(copy)) ) ) {\n                            if ( copyIsArray ) {\n                                copyIsArray = false;\n                                clone = src && _.isArray(src) ? src : [];\n\n                            } else {\n                                clone = src && _.isObject(src) ? src : {};\n                            }\n\n                            // Never move original objects, clone them\n                            target[ name ] = this.deepMerge(clone, copy );\n\n                            // Don't bring in undefined values\n                        } else if ( copy !== undefined ) {\n                            target[ name ] = copy;\n                        }\n                    }\n                }\n            }\n\n            // Return the modified object\n            return target;\n        }\n    };\n});\n/**\n * Helper module to work with ranges\n * @constructor\n * @memberOf __rangeDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('range', function(require, _) {\n    function cmp(a, b, op) {\n        switch (op) {\n            case 'eq':\n            case '==':\n                return a === b;\n            case 'lt':\n            case '<':\n                return a < b;\n            case 'lte':\n            case '<=':\n                return a <= b;\n            case 'gt':\n            case '>':\n                return a > b;\n            case 'gte':\n            case '>=':\n                return a >= b;\n        }\n    }\n\n\n    /**\n     * @type Range\n     * @constructor\n     * @param {Object} start\n     * @param {Number} len\n     */\n    function Range(start, len) {\n        if (_.isObject(start) && 'start' in start) {\n            // create range from object stub\n            this.start = Math.min(start.start, start.end);\n            this.end = Math.max(start.start, start.end);\n        } else if (_.isArray(start)) {\n            this.start = start[0];\n            this.end = start[1];\n        } else {\n            len = _.isString(len) ? len.length : +len;\n            this.start = start;\n            this.end = start + len;\n        }\n    }\n\n    Range.prototype = {\n        length: function() {\n            return Math.abs(this.end - this.start);\n        },\n\n        /**\n         * Returns <code>true</code> if passed range is equals to current one\n         * @param {Range} range\n         * @returns {Boolean}\n         */\n        equal: function(range) {\n            return this.cmp(range, 'eq', 'eq');\n//\t\t\treturn this.start === range.start && this.end === range.end;\n        },\n\n        /**\n         * Shifts indexes position with passed <code>delat</code>\n         * @param {Number} delta\n         * @returns {Range} range itself\n         */\n        shift: function(delta) {\n            this.start += delta;\n            this.end += delta;\n            return this;\n        },\n\n        /**\n         * Check if two ranges are overlapped\n         * @param {Range} range\n         * @returns {Boolean}\n         */\n        overlap: function(range) {\n            return range.start <= this.end && range.end >= this.start;\n        },\n\n        /**\n         * Finds intersection of two ranges\n         * @param {Range} range\n         * @returns {Range} <code>null</code> if ranges does not overlap\n         */\n        intersection: function(range) {\n            if (this.overlap(range)) {\n                var start = Math.max(range.start, this.start);\n                var end = Math.min(range.end, this.end);\n                return new Range(start, end - start);\n            }\n\n            return null;\n        },\n\n        /**\n         * Returns the union of the thow ranges.\n         * @param {Range} range\n         * @returns {Range} <code>null</code> if ranges are not overlapped\n         */\n        union: function(range) {\n            if (this.overlap(range)) {\n                var start = Math.min(range.start, this.start);\n                var end = Math.max(range.end, this.end);\n                return new Range(start, end - start);\n            }\n\n            return null;\n        },\n\n        /**\n         * Returns a Boolean value that indicates whether a specified position\n         * is in a given range.\n         * @param {Number} loc\n         */\n        inside: function(loc) {\n            return this.cmp(loc, 'lte', 'gt');\n//\t\t\treturn this.start <= loc && this.end > loc;\n        },\n\n        /**\n         * Returns a Boolean value that indicates whether a specified position\n         * is in a given range, but not equals bounds.\n         * @param {Number} loc\n         */\n        contains: function(loc) {\n            return this.cmp(loc, 'lt', 'gt');\n        },\n\n        /**\n         * Check if current range completely includes specified one\n         * @param {Range} r\n         * @returns {Boolean}\n         */\n        include: function(r) {\n            return this.cmp(loc, 'lte', 'gte');\n//\t\t\treturn this.start <= r.start && this.end >= r.end;\n        },\n\n        /**\n         * Low-level comparision method\n         * @param {Number} loc\n         * @param {String} left Left comparison operator\n         * @param {String} right Right comaprison operator\n         */\n        cmp: function(loc, left, right) {\n            var a, b;\n            if (loc instanceof Range) {\n                a = loc.start;\n                b = loc.end;\n            } else {\n                a = b = loc;\n            }\n\n            return cmp(this.start, a, left || '<=') && cmp(this.end, b, right || '>');\n        },\n\n        /**\n         * Returns substring of specified <code>str</code> for current range\n         * @param {String} str\n         * @returns {String}\n         */\n        substring: function(str) {\n            return this.length() > 0\n                ? str.substring(this.start, this.end)\n                : '';\n        },\n\n        /**\n         * Creates copy of current range\n         * @returns {Range}\n         */\n        clone: function() {\n            return new Range(this.start, this.length());\n        },\n\n        /**\n         * @returns {Array}\n         */\n        toArray: function() {\n            return [this.start, this.end];\n        },\n\n        toString: function() {\n            return '{' + this.start + ', ' + this.length() + '}';\n        }\n    };\n\n    return {\n        /**\n         * Creates new range object instance\n         * @param {Object} start Range start or array with 'start' and 'end'\n         * as two first indexes or object with 'start' and 'end' properties\n         * @param {Number} len Range length or string to produce range from\n         * @returns {Range}\n         * @memberOf emmet.range\n         */\n        create: function(start, len) {\n            if (_.isUndefined(start) || start === null)\n                return null;\n\n            if (start instanceof Range)\n                return start;\n\n            if (_.isObject(start) && 'start' in start && 'end' in start) {\n                len = start.end - start.start;\n                start = start.start;\n            }\n\n            return new Range(start, len);\n        },\n\n        /**\n         * <code>Range</code> object factory, the same as <code>this.create()</code>\n         * but last argument represents end of range, not length\n         * @returns {Range}\n         */\n        create2: function(start, end) {\n            if (_.isNumber(start) && _.isNumber(end)) {\n                end -= start;\n            }\n\n            return this.create(start, end);\n        }\n    };\n});/**\n * Utility module that provides ordered storage of function handlers.\n * Many Emmet modules' functionality can be extended/overridden by custom\n * function. This modules provides unified storage of handler functions, their\n * management and execution\n *\n * @constructor\n * @memberOf __handlerListDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('handlerList', function(require, _) {\n    /**\n     * @type HandlerList\n     * @constructor\n     */\n    function HandlerList() {\n        this._list = [];\n    }\n\n    HandlerList.prototype = {\n        /**\n         * Adds function handler\n         * @param {Function} fn Handler\n         * @param {Object} options Handler options. Possible values are:<br><br>\n         * <b>order</b> : (<code>Number</code>) – order in handler list. Handlers\n         * with higher order value will be executed earlier.\n         */\n        add: function(fn, options) {\n            this._list.push(_.extend({order: 0}, options || {}, {fn: fn}));\n        },\n\n        /**\n         * Removes handler from list\n         * @param {Function} fn\n         */\n        remove: function(fn) {\n            this._list = _.without(this._list, _.find(this._list, function(item) {\n                return item.fn === fn;\n            }));\n        },\n\n        /**\n         * Returns ordered list of handlers. By default, handlers\n         * with the same <code>order</code> option returned in reverse order,\n         * i.e. the latter function was added into the handlers list, the higher\n         * it will be in the returned array\n         * @returns {Array}\n         */\n        list: function() {\n            return _.sortBy(this._list, 'order').reverse();\n        },\n\n        /**\n         * Returns ordered list of handler functions\n         * @returns {Array}\n         */\n        listFn: function() {\n            return _.pluck(this.list(), 'fn');\n        },\n\n        /**\n         * Executes handler functions in their designated order. If function\n         * returns <code>skipVal</code>, meaning that function was unable to\n         * handle passed <code>args</code>, the next function will be executed\n         * and so on.\n         * @param {Object} skipValue If function returns this value, execute\n         * next handler.\n         * @param {Array} args Arguments to pass to handler function\n         * @returns {Boolean} Whether any of registered handlers performed\n         * successfully\n         */\n        exec: function(skipValue, args) {\n            args = args || [];\n            var result = null;\n            _.find(this.list(), function(h) {\n                result = h.fn.apply(h, args);\n                if (result !== skipValue)\n                    return true;\n            });\n\n            return result;\n        }\n    };\n\n    return {\n        /**\n         * Factory method that produces <code>HandlerList</code> instance\n         * @returns {HandlerList}\n         * @memberOf handlerList\n         */\n        create: function() {\n            return new HandlerList();\n        }\n    };\n});/**\n * Helper class for convenient token iteration\n */\nemmet.define('tokenIterator', function(require, _) {\n    /**\n     * @type TokenIterator\n     * @param {Array} tokens\n     * @type TokenIterator\n     * @constructor\n     */\n    function TokenIterator(tokens) {\n        /** @type Array */\n        this.tokens = tokens;\n        this._position = 0;\n        this.reset();\n    }\n\n    TokenIterator.prototype = {\n        next: function() {\n            if (this.hasNext()) {\n                var token = this.tokens[++this._i];\n                this._position = token.start;\n                return token;\n            }\n\n            return null;\n        },\n\n        current: function() {\n            return this.tokens[this._i];\n        },\n\n        position: function() {\n            return this._position;\n        },\n\n        hasNext: function() {\n            return this._i < this._il - 1;\n        },\n\n        reset: function() {\n            this._i = -1;\n            this._il = this.tokens.length;\n        },\n\n        item: function() {\n            return this.tokens[this._i];\n        },\n\n        itemNext: function() {\n            return this.tokens[this._i + 1];\n        },\n\n        itemPrev: function() {\n            return this.tokens[this._i - 1];\n        },\n\n        nextUntil: function(type, callback) {\n            var token;\n            var test = _.isString(type)\n                ? function(t){return t.type == type;}\n                : type;\n\n            while (token = this.next()) {\n                if (callback)\n                    callback.call(this, token);\n                if (test.call(this, token))\n                    break;\n            }\n        }\n    };\n\n    return {\n        create: function(tokens) {\n            return new TokenIterator(tokens);\n        }\n    };\n});/**\n * A trimmed version of CodeMirror's StringStream module for string parsing\n */\nemmet.define('stringStream', function(require, _) {\n    /**\n     * @type StringStream\n     * @constructor\n     * @param {String} string\n     */\n    function StringStream(string) {\n        this.pos = this.start = 0;\n        this.string = string;\n    }\n\n    StringStream.prototype = {\n        /**\n         * Returns true only if the stream is at the end of the line.\n         * @returns {Boolean}\n         */\n        eol: function() {\n            return this.pos >= this.string.length;\n        },\n\n        /**\n         * Returns true only if the stream is at the start of the line\n         * @returns {Boolean}\n         */\n        sol: function() {\n            return this.pos == 0;\n        },\n\n        /**\n         * Returns the next character in the stream without advancing it.\n         * Will return <code>undefined</code> at the end of the line.\n         * @returns {String}\n         */\n        peek: function() {\n            return this.string.charAt(this.pos);\n        },\n\n        /**\n         * Returns the next character in the stream and advances it.\n         * Also returns <code>undefined</code> when no more characters are available.\n         * @returns {String}\n         */\n        next: function() {\n            if (this.pos < this.string.length)\n                return this.string.charAt(this.pos++);\n        },\n\n        /**\n         * match can be a character, a regular expression, or a function that\n         * takes a character and returns a boolean. If the next character in the\n         * stream 'matches' the given argument, it is consumed and returned.\n         * Otherwise, undefined is returned.\n         * @param {Object} match\n         * @returns {String}\n         */\n        eat: function(match) {\n            var ch = this.string.charAt(this.pos), ok;\n            if (typeof match == \"string\")\n                ok = ch == match;\n            else\n                ok = ch && (match.test ? match.test(ch) : match(ch));\n\n            if (ok) {\n                ++this.pos;\n                return ch;\n            }\n        },\n\n        /**\n         * Repeatedly calls <code>eat</code> with the given argument, until it\n         * fails. Returns <code>true</code> if any characters were eaten.\n         * @param {Object} match\n         * @returns {Boolean}\n         */\n        eatWhile: function(match) {\n            var start = this.pos;\n            while (this.eat(match)) {}\n            return this.pos > start;\n        },\n\n        /**\n         * Shortcut for <code>eatWhile</code> when matching white-space.\n         * @returns {Boolean}\n         */\n        eatSpace: function() {\n            var start = this.pos;\n            while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n                ++this.pos;\n            return this.pos > start;\n        },\n\n        /**\n         * Moves the position to the end of the line.\n         */\n        skipToEnd: function() {\n            this.pos = this.string.length;\n        },\n\n        /**\n         * Skips to the next occurrence of the given character, if found on the\n         * current line (doesn't advance the stream if the character does not\n         * occur on the line). Returns true if the character was found.\n         * @param {String} ch\n         * @returns {Boolean}\n         */\n        skipTo: function(ch) {\n            var found = this.string.indexOf(ch, this.pos);\n            if (found > -1) {\n                this.pos = found;\n                return true;\n            }\n        },\n\n        /**\n         * Skips to <code>close</code> character which is pair to <code>open</code>\n         * character, considering possible pair nesting. This function is used\n         * to consume pair of characters, like opening and closing braces\n         * @param {String} open\n         * @param {String} close\n         * @returns {Boolean} Returns <code>true</code> if pair was successfully\n         * consumed\n         */\n        skipToPair: function(open, close) {\n            var braceCount = 0, ch;\n            var pos = this.pos, len = this.string.length;\n            while (pos < len) {\n                ch = this.string.charAt(pos++);\n                if (ch == open) {\n                    braceCount++;\n                } else if (ch == close) {\n                    braceCount--;\n                    if (braceCount < 1) {\n                        this.pos = pos;\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        },\n\n        /**\n         * Backs up the stream n characters. Backing it up further than the\n         * start of the current token will cause things to break, so be careful.\n         * @param {Number} n\n         */\n        backUp : function(n) {\n            this.pos -= n;\n        },\n\n        /**\n         * Act like a multi-character <code>eat</code>—if <code>consume</code> is true or\n         * not given—or a look-ahead that doesn't update the stream position—if\n         * it is false. <code>pattern</code> can be either a string or a\n         * regular expression starting with ^. When it is a string,\n         * <code>caseInsensitive</code> can be set to true to make the match\n         * case-insensitive. When successfully matching a regular expression,\n         * the returned value will be the array returned by <code>match</code>,\n         * in case you need to extract matched groups.\n         *\n         * @param {RegExp} pattern\n         * @param {Boolean} consume\n         * @param {Boolean} caseInsensitive\n         * @returns\n         */\n        match: function(pattern, consume, caseInsensitive) {\n            if (typeof pattern == \"string\") {\n                var cased = caseInsensitive\n                    ? function(str) {return str.toLowerCase();}\n                    : function(str) {return str;};\n\n                if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) {\n                    if (consume !== false)\n                        this.pos += pattern.length;\n                    return true;\n                }\n            } else {\n                var match = this.string.slice(this.pos).match(pattern);\n                if (match && consume !== false)\n                    this.pos += match[0].length;\n                return match;\n            }\n        },\n\n        /**\n         * Get the string between the start of the current token and the\n         * current stream position.\n         * @returns {String}\n         */\n        current: function() {\n            return this.string.slice(this.start, this.pos);\n        }\n    };\n\n    return {\n        create: function(string) {\n            return new StringStream(string);\n        }\n    };\n});/**\n * Parsed resources (snippets, abbreviations, variables, etc.) for Emmet.\n * Contains convenient method to get access for snippets with respect of\n * inheritance. Also provides ability to store data in different vocabularies\n * ('system' and 'user') for fast and safe resource update\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n *\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('resources', function(require, _) {\n    var VOC_SYSTEM = 'system';\n    var VOC_USER = 'user';\n\n    var cache = {};\n\n    /** Regular expression for XML tag matching */\n    var reTag = /^<(\\w+\\:?[\\w\\-]*)((?:\\s+[\\w\\:\\-]+\\s*=\\s*(['\"]).*?\\3)*)\\s*(\\/?)>/;\n\n    var systemSettings = {};\n    var userSettings = {};\n\n    /** @type HandlerList List of registered abbreviation resolvers */\n    var resolvers = require('handlerList').create();\n\n    /**\n     * Normalizes caret plceholder in passed text: replaces | character with\n     * default caret placeholder\n     * @param {String} text\n     * @returns {String}\n     */\n    function normalizeCaretPlaceholder(text) {\n        var utils = require('utils');\n        return utils.replaceUnescapedSymbol(text, '|', utils.getCaretPlaceholder());\n    }\n\n    function parseItem(name, value, type) {\n        value = normalizeCaretPlaceholder(value);\n\n        if (type == 'snippets') {\n            return require('elements').create('snippet', value);\n        }\n\n        if (type == 'abbreviations') {\n            return parseAbbreviation(name, value);\n        }\n    }\n\n    /**\n     * Parses single abbreviation\n     * @param {String} key Abbreviation name\n     * @param {String} value Abbreviation value\n     * @return {Object}\n     */\n    function parseAbbreviation(key, value) {\n        key = require('utils').trim(key);\n        var elements = require('elements');\n        var m;\n        if (m = reTag.exec(value)) {\n            return elements.create('element', m[1], m[2], m[4] == '/');\n        } else {\n            // assume it's reference to another abbreviation\n            return elements.create('reference', value);\n        }\n    }\n\n    /**\n     * Normalizes snippet key name for better fuzzy search\n     * @param {String} str\n     * @returns {String}\n     */\n    function normalizeName(str) {\n        return str.replace(/:$/, '').replace(/:/g, '-');\n    }\n\n    return {\n        /**\n         * Sets new unparsed data for specified settings vocabulary\n         * @param {Object} data\n         * @param {String} type Vocabulary type ('system' or 'user')\n         * @memberOf resources\n         */\n        setVocabulary: function(data, type) {\n            cache = {};\n            if (type == VOC_SYSTEM)\n                systemSettings = data;\n            else\n                userSettings = data;\n        },\n\n        /**\n         * Returns resource vocabulary by its name\n         * @param {String} name Vocabulary name ('system' or 'user')\n         * @return {Object}\n         */\n        getVocabulary: function(name) {\n            return name == VOC_SYSTEM ? systemSettings : userSettings;\n        },\n\n        /**\n         * Returns resource (abbreviation, snippet, etc.) matched for passed\n         * abbreviation\n         * @param {AbbreviationNode} node\n         * @param {String} syntax\n         * @returns {Object}\n         */\n        getMatchedResource: function(node, syntax) {\n            return resolvers.exec(null, _.toArray(arguments))\n                || this.findSnippet(syntax, node.name());\n        },\n\n        /**\n         * Returns variable value\n         * @return {String}\n         */\n        getVariable: function(name) {\n            return (this.getSection('variables') || {})[name];\n        },\n\n        /**\n         * Store runtime variable in user storage\n         * @param {String} name Variable name\n         * @param {String} value Variable value\n         */\n        setVariable: function(name, value){\n            var voc = this.getVocabulary('user') || {};\n            if (!('variables' in voc))\n                voc.variables = {};\n\n            voc.variables[name] = value;\n            this.setVocabulary(voc, 'user');\n        },\n\n        /**\n         * Check if there are resources for specified syntax\n         * @param {String} syntax\n         * @return {Boolean}\n         */\n        hasSyntax: function(syntax) {\n            return syntax in this.getVocabulary(VOC_USER)\n                || syntax in this.getVocabulary(VOC_SYSTEM);\n        },\n\n        /**\n         * Registers new abbreviation resolver.\n         * @param {Function} fn Abbreviation resolver which will receive\n         * abbreviation as first argument and should return parsed abbreviation\n         * object if abbreviation has handled successfully, <code>null</code>\n         * otherwise\n         * @param {Object} options Options list as described in\n         * {@link HandlerList#add()} method\n         */\n        addResolver: function(fn, options) {\n            resolvers.add(fn, options);\n        },\n\n        removeResolver: function(fn) {\n            resolvers.remove(fn);\n        },\n\n        /**\n         * Returns actual section data, merged from both\n         * system and user data\n         * @param {String} name Section name (syntax)\n         * @param {String} ...args Subsections\n         * @returns\n         */\n        getSection: function(name) {\n            if (!name)\n                return null;\n\n            if (!(name in cache)) {\n                cache[name] = require('utils').deepMerge({}, systemSettings[name], userSettings[name]);\n            }\n\n            var data = cache[name], subsections = _.rest(arguments), key;\n            while (data && (key = subsections.shift())) {\n                if (key in data) {\n                    data = data[key];\n                } else {\n                    return null;\n                }\n            }\n\n            return data;\n        },\n\n        /**\n         * Recursively searches for a item inside top level sections (syntaxes)\n         * with respect of `extends` attribute\n         * @param {String} topSection Top section name (syntax)\n         * @param {String} subsection Inner section name\n         * @returns {Object}\n         */\n        findItem: function(topSection, subsection) {\n            var data = this.getSection(topSection);\n            while (data) {\n                if (subsection in data)\n                    return data[subsection];\n\n                data = this.getSection(data['extends']);\n            }\n        },\n\n        /**\n         * Recursively searches for a snippet definition inside syntax section.\n         * Definition is searched inside `snippets` and `abbreviations`\n         * subsections\n         * @param {String} syntax Top-level section name (syntax)\n         * @param {String} name Snippet name\n         * @returns {Object}\n         */\n        findSnippet: function(syntax, name, memo) {\n            if (!syntax || !name)\n                return null;\n\n            memo = memo || [];\n\n            var names = [name];\n            // create automatic aliases to properties with colons,\n            // e.g. pos-a == pos:a\n            if (~name.indexOf('-'))\n                names.push(name.replace(/\\-/g, ':'));\n\n            var data = this.getSection(syntax), matchedItem = null;\n            _.find(['snippets', 'abbreviations'], function(sectionName) {\n                var data = this.getSection(syntax, sectionName);\n                if (data) {\n                    return _.find(names, function(n) {\n                        if (data[n])\n                            return matchedItem = parseItem(n, data[n], sectionName);\n                    });\n                }\n            }, this);\n\n            memo.push(syntax);\n            if (!matchedItem && data['extends'] && !_.include(memo, data['extends'])) {\n                // try to find item in parent syntax section\n                return this.findSnippet(data['extends'], name, memo);\n            }\n\n            return matchedItem;\n        },\n\n        /**\n         * Performs fuzzy search of snippet definition\n         * @param {String} syntax Top-level section name (syntax)\n         * @param {String} name Snippet name\n         * @returns\n         */\n        fuzzyFindSnippet: function(syntax, name, minScore) {\n            minScore = minScore || 0.3;\n\n            var payload = this.getAllSnippets(syntax);\n            var sc = require('string-score');\n\n            name = normalizeName(name);\n            var scores = _.map(payload, function(value, key) {\n                return {\n                    key: key,\n                    score: sc.score(value.nk, name, 0.1)\n                };\n            });\n\n            var result = _.last(_.sortBy(scores, 'score'));\n            if (result && result.score >= minScore) {\n                var k = result.key;\n                return payload[k].parsedValue;\n//\t\t\t\treturn parseItem(k, payload[k].value, payload[k].type);\n            }\n        },\n\n        /**\n         * Returns plain dictionary of all available abbreviations and snippets\n         * for specified syntax with respect of inheritance\n         * @param {String} syntax\n         * @returns {Object}\n         */\n        getAllSnippets: function(syntax) {\n            var cacheKey = 'all-' + syntax;\n            if (!cache[cacheKey]) {\n                var stack = [], sectionKey = syntax;\n                var memo = [];\n\n                do {\n                    var section = this.getSection(sectionKey);\n                    if (!section)\n                        break;\n\n                    _.each(['snippets', 'abbreviations'], function(sectionName) {\n                        var stackItem = {};\n                        _.each(section[sectionName] || null, function(v, k) {\n                            stackItem[k] = {\n                                nk: normalizeName(k),\n                                value: v,\n                                parsedValue: parseItem(k, v, sectionName),\n                                type: sectionName\n                            };\n                        });\n\n                        stack.push(stackItem);\n                    });\n\n                    memo.push(sectionKey);\n                    sectionKey = section['extends'];\n                } while (sectionKey && !_.include(memo, sectionKey));\n\n                cache[cacheKey] = _.extend.apply(_, stack.reverse());\n            }\n\n            return cache[cacheKey];\n        }\n    };\n});/**\n * Module describes and performs Emmet actions. The actions themselves are\n * defined in <i>actions</i> folder\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('actions', function(require, _, zc) {\n    var actions = {};\n\n    /**\n     * “Humanizes” action name, makes it more readable for people\n     * @param {String} name Action name (like 'expand_abbreviation')\n     * @return Humanized name (like 'Expand Abbreviation')\n     */\n    function humanizeActionName(name) {\n        return require('utils').trim(name.charAt(0).toUpperCase()\n            + name.substring(1).replace(/_[a-z]/g, function(str) {\n                return ' ' + str.charAt(1).toUpperCase();\n            }));\n    }\n\n    return {\n        /**\n         * Registers new action\n         * @param {String} name Action name\n         * @param {Function} fn Action function\n         * @param {Object} options Custom action options:<br>\n         * <b>label</b> : (<code>String</code>) – Human-readable action name.\n         * May contain '/' symbols as submenu separators<br>\n         * <b>hidden</b> : (<code>Boolean</code>) – Indicates whether action\n         * should be displayed in menu (<code>getMenu()</code> method)\n         *\n         * @memberOf actions\n         */\n        add: function(name, fn, options) {\n            name = name.toLowerCase();\n            options = options || {};\n            if (!options.label) {\n                options.label = humanizeActionName(name);\n            }\n\n            actions[name] = {\n                name: name,\n                fn: fn,\n                options: options\n            };\n        },\n\n        /**\n         * Returns action object\n         * @param {String} name Action name\n         * @returns {Object}\n         */\n        get: function(name) {\n            return actions[name.toLowerCase()];\n        },\n\n        /**\n         * Runs Emmet action. For list of available actions and their\n         * arguments see <i>actions</i> folder.\n         * @param {String} name Action name\n         * @param {Array} args Additional arguments. It may be array of arguments\n         * or inline arguments. The first argument should be <code>IEmmetEditor</code> instance\n         * @returns {Boolean} Status of performed operation, <code>true</code>\n         * means action was performed successfully.\n         * @example\n         * emmet.require('actions').run('expand_abbreviation', editor);\n         * emmet.require('actions').run('wrap_with_abbreviation', [editor, 'div']);\n         */\n        run: function(name, args) {\n            if (!_.isArray(args)) {\n                args = _.rest(arguments);\n            }\n\n            var action = this.get(name);\n            if (action) {\n                return action.fn.apply(emmet, args);\n            } else {\n                emmet.log('Action \"%s\" is not defined', name);\n                return false;\n            }\n        },\n\n        /**\n         * Returns all registered actions as object\n         * @returns {Object}\n         */\n        getAll: function() {\n            return actions;\n        },\n\n        /**\n         * Returns all registered actions as array\n         * @returns {Array}\n         */\n        getList: function() {\n            return _.values(this.getAll());\n        },\n\n        /**\n         * Returns actions list as structured menu. If action has <i>label</i>,\n         * it will be splitted by '/' symbol into submenus (for example:\n         * CSS/Reflect Value) and grouped with other items\n         * @param {Array} skipActions List of action identifiers that should be\n         * skipped from menu\n         * @returns {Array}\n         */\n        getMenu: function(skipActions) {\n            var result = [];\n            skipActions = skipActions || [];\n            _.each(this.getList(), function(action) {\n                if (action.options.hidden || _.include(skipActions, action.name))\n                    return;\n\n                var actionName = humanizeActionName(action.name);\n                var ctx = result;\n                if (action.options.label) {\n                    var parts = action.options.label.split('/');\n                    actionName = parts.pop();\n\n                    // create submenus, if needed\n                    var menuName, submenu;\n                    while (menuName = parts.shift()) {\n                        submenu = _.find(ctx, function(item) {\n                            return item.type == 'submenu' && item.name == menuName;\n                        });\n\n                        if (!submenu) {\n                            submenu = {\n                                name: menuName,\n                                type: 'submenu',\n                                items: []\n                            };\n                            ctx.push(submenu);\n                        }\n\n                        ctx = submenu.items;\n                    }\n                }\n\n                ctx.push({\n                    type: 'action',\n                    name: action.name,\n                    label: actionName\n                });\n            });\n\n            return result;\n        },\n\n        /**\n         * Returns action name associated with menu item title\n         * @param {String} title\n         * @returns {String}\n         */\n        getActionNameForMenuTitle: function(title, menu) {\n            var item = null;\n            _.find(menu || this.getMenu(), function(val) {\n                if (val.type == 'action') {\n                    if (val.label == title || val.name == title) {\n                        return item = val.name;\n                    }\n                } else {\n                    return item = this.getActionNameForMenuTitle(title, val.items);\n                }\n            }, this);\n\n            return item || null;\n        }\n    };\n});/**\n * Output profile module.\n * Profile defines how XHTML output data should look like\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('profile', function(require, _) {\n    var profiles = {};\n\n    var defaultProfile = {\n        tag_case: 'asis',\n        attr_case: 'asis',\n        attr_quotes: 'double',\n\n        // each tag on new line\n        tag_nl: 'decide',\n\n        // with tag_nl === true, defines if leaf node (e.g. node with no children)\n        // should have formatted line breaks\n        tag_nl_leaf: false,\n\n        place_cursor: true,\n\n        // indent tags\n        indent: true,\n\n        // how many inline elements should be to force line break \n        // (set to 0 to disable)\n        inline_break: 3,\n\n        // use self-closing style for writing empty elements, e.g. <br /> or <br>\n        self_closing_tag: 'xhtml',\n\n        // Profile-level output filters, re-defines syntax filters \n        filters: '',\n\n        // Additional filters applied to abbreviation.\n        // Unlike \"filters\", this preference doesn't override default filters\n        // but add the instead every time given profile is chosen\n        extraFilters: ''\n    };\n\n    /**\n     * @constructor\n     * @type OutputProfile\n     * @param {Object} options\n     */\n    function OutputProfile(options) {\n        _.extend(this, defaultProfile, options);\n    }\n\n    OutputProfile.prototype = {\n        /**\n         * Transforms tag name case depending on current profile settings\n         * @param {String} name String to transform\n         * @returns {String}\n         */\n        tagName: function(name) {\n            return stringCase(name, this.tag_case);\n        },\n\n        /**\n         * Transforms attribute name case depending on current profile settings\n         * @param {String} name String to transform\n         * @returns {String}\n         */\n        attributeName: function(name) {\n            return stringCase(name, this.attr_case);\n        },\n\n        /**\n         * Returns quote character for current profile\n         * @returns {String}\n         */\n        attributeQuote: function() {\n            return this.attr_quotes == 'single' ? \"'\" : '\"';\n        },\n\n        /**\n         * Returns self-closing tag symbol for current profile\n         * @param {String} param\n         * @returns {String}\n         */\n        selfClosing: function(param) {\n            if (this.self_closing_tag == 'xhtml')\n                return ' /';\n\n            if (this.self_closing_tag === true)\n                return '/';\n\n            return '';\n        },\n\n        /**\n         * Returns cursor token based on current profile settings\n         * @returns {String}\n         */\n        cursor: function() {\n            return this.place_cursor ? require('utils').getCaretPlaceholder() : '';\n        }\n    };\n\n    /**\n     * Helper function that converts string case depending on\n     * <code>caseValue</code>\n     * @param {String} str String to transform\n     * @param {String} caseValue Case value: can be <i>lower</i>,\n     * <i>upper</i> and <i>leave</i>\n     * @returns {String}\n     */\n    function stringCase(str, caseValue) {\n        switch (String(caseValue || '').toLowerCase()) {\n            case 'lower':\n                return str.toLowerCase();\n            case 'upper':\n                return str.toUpperCase();\n        }\n\n        return str;\n    }\n\n    /**\n     * Creates new output profile\n     * @param {String} name Profile name\n     * @param {Object} options Profile options\n     */\n    function createProfile(name, options) {\n        return profiles[name.toLowerCase()] = new OutputProfile(options);\n    }\n\n    function createDefaultProfiles() {\n        createProfile('xhtml');\n        createProfile('html', {self_closing_tag: false});\n        createProfile('xml', {self_closing_tag: true, tag_nl: true});\n        createProfile('plain', {tag_nl: false, indent: false, place_cursor: false});\n        createProfile('line', {tag_nl: false, indent: false, extraFilters: 's'});\n    }\n\n    createDefaultProfiles();\n\n    return  {\n        /**\n         * Creates new output profile and adds it into internal dictionary\n         * @param {String} name Profile name\n         * @param {Object} options Profile options\n         * @memberOf emmet.profile\n         * @returns {Object} New profile\n         */\n        create: function(name, options) {\n            if (arguments.length == 2)\n                return createProfile(name, options);\n            else\n            // create profile object only\n                return new OutputProfile(_.defaults(name || {}, defaultProfile));\n        },\n\n        /**\n         * Returns profile by its name. If profile wasn't found, returns\n         * 'plain' profile\n         * @param {String} name Profile name. Might be profile itself\n         * @param {String} syntax. Optional. Current editor syntax. If defined,\n         * profile is searched in resources first, then in predefined profiles\n         * @returns {Object}\n         */\n        get: function(name, syntax) {\n            if (!name && syntax) {\n                // search in user resources first\n                var profile = require('resources').findItem(syntax, 'profile');\n                if (profile) {\n                    name = profile;\n                }\n            }\n\n            if (!name) {\n                return profiles.plain;\n            }\n\n            if (name instanceof OutputProfile) {\n                return name;\n            }\n\n            if (_.isString(name) && name.toLowerCase() in profiles) {\n                return profiles[name.toLowerCase()];\n            }\n\n            return this.create(name);\n        },\n\n        /**\n         * Deletes profile with specified name\n         * @param {String} name Profile name\n         */\n        remove: function(name) {\n            name = (name || '').toLowerCase();\n            if (name in profiles)\n                delete profiles[name];\n        },\n\n        /**\n         * Resets all user-defined profiles\n         */\n        reset: function() {\n            profiles = {};\n            createDefaultProfiles();\n        },\n\n        /**\n         * Helper function that converts string case depending on\n         * <code>caseValue</code>\n         * @param {String} str String to transform\n         * @param {String} caseValue Case value: can be <i>lower</i>,\n         * <i>upper</i> and <i>leave</i>\n         * @returns {String}\n         */\n        stringCase: stringCase\n    };\n});/**\n * Utility module used to prepare text for pasting into back-end editor\n * @param {Function} require\n * @param {Underscore} _\n * @author Sergey Chikuyonok (serge.che@gmail.com) <http://chikuyonok.ru>\n */\nemmet.define('editorUtils', function(require, _) {\n    return  {\n        /**\n         * Check if cursor is placed inside XHTML tag\n         * @param {String} html Contents of the document\n         * @param {Number} caretPos Current caret position inside tag\n         * @return {Boolean}\n         */\n        isInsideTag: function(html, caretPos) {\n            var reTag = /^<\\/?\\w[\\w\\:\\-]*.*?>/;\n\n            // search left to find opening brace\n            var pos = caretPos;\n            while (pos > -1) {\n                if (html.charAt(pos) == '<')\n                    break;\n                pos--;\n            }\n\n            if (pos != -1) {\n                var m = reTag.exec(html.substring(pos));\n                if (m && caretPos > pos && caretPos < pos + m[0].length)\n                    return true;\n            }\n\n            return false;\n        },\n\n        /**\n         * Sanitizes incoming editor data and provides default values for\n         * output-specific info\n         * @param {IEmmetEditor} editor\n         * @param {String} syntax\n         * @param {String} profile\n         */\n        outputInfo: function(editor, syntax, profile) {\n            // most of this code makes sense for Java/Rhino environment\n            // because string that comes from Java are not actually JS string\n            // but Java String object so the have to be explicitly converted\n            // to native string\n            profile = profile || editor.getProfileName();\n            return  {\n                /** @memberOf outputInfo */\n                syntax: String(syntax || editor.getSyntax()),\n                profile: profile || null,\n                content: String(editor.getContent())\n            };\n        },\n\n        /**\n         * Unindent content, thus preparing text for tag wrapping\n         * @param {IEmmetEditor} editor Editor instance\n         * @param {String} text\n         * @return {String}\n         */\n        unindent: function(editor, text) {\n            return require('utils').unindentString(text, this.getCurrentLinePadding(editor));\n        },\n\n        /**\n         * Returns padding of current editor's line\n         * @param {IEmmetEditor} Editor instance\n         * @return {String}\n         */\n        getCurrentLinePadding: function(editor) {\n            return require('utils').getLinePadding(editor.getCurrentLine());\n        }\n    };\n});\n/**\n * Utility methods for Emmet actions\n * @param {Function} require\n * @param {Underscore} _\n * @author Sergey Chikuyonok (serge.che@gmail.com) <http://chikuyonok.ru>\n */\nemmet.define('actionUtils', function(require, _) {\n    return {\n        mimeTypes: {\n            'gif' : 'image/gif',\n            'png' : 'image/png',\n            'jpg' : 'image/jpeg',\n            'jpeg': 'image/jpeg',\n            'svg' : 'image/svg+xml',\n            'html': 'text/html',\n            'htm' : 'text/html'\n        },\n\n        /**\n         * Extracts abbreviations from text stream, starting from the end\n         * @param {String} str\n         * @return {String} Abbreviation or empty string\n         * @memberOf emmet.actionUtils\n         */\n        extractAbbreviation: function(str) {\n            var curOffset = str.length;\n            var startIndex = -1;\n            var groupCount = 0;\n            var braceCount = 0;\n            var textCount = 0;\n\n            var utils = require('utils');\n            var parser = require('abbreviationParser');\n\n            while (true) {\n                curOffset--;\n                if (curOffset < 0) {\n                    // moved to the beginning of the line\n                    startIndex = 0;\n                    break;\n                }\n\n                var ch = str.charAt(curOffset);\n\n                if (ch == ']') {\n                    braceCount++;\n                } else if (ch == '[') {\n                    if (!braceCount) { // unexpected brace\n                        startIndex = curOffset + 1;\n                        break;\n                    }\n                    braceCount--;\n                } else if (ch == '}') {\n                    textCount++;\n                } else if (ch == '{') {\n                    if (!textCount) { // unexpected brace\n                        startIndex = curOffset + 1;\n                        break;\n                    }\n                    textCount--;\n                } else if (ch == ')') {\n                    groupCount++;\n                } else if (ch == '(') {\n                    if (!groupCount) { // unexpected brace\n                        startIndex = curOffset + 1;\n                        break;\n                    }\n                    groupCount--;\n                } else {\n                    if (braceCount || textCount)\n                    // respect all characters inside attribute sets or text nodes\n                        continue;\n                    else if (!parser.isAllowedChar(ch) || (ch == '>' && utils.endsWithTag(str.substring(0, curOffset + 1)))) {\n                        // found stop symbol\n                        startIndex = curOffset + 1;\n                        break;\n                    }\n                }\n            }\n\n            if (startIndex != -1 && !textCount && !braceCount && !groupCount)\n            // found something, remove some invalid symbols from the \n            // beginning and return abbreviation\n                return str.substring(startIndex).replace(/^[\\*\\+\\>\\^]+/, '');\n            else\n                return '';\n        },\n\n        /**\n         * Gets image size from image byte stream.\n         * @author http://romeda.org/rePublish/\n         * @param {String} stream Image byte stream (use <code>IEmmetFile.read()</code>)\n         * @return {Object} Object with <code>width</code> and <code>height</code> properties\n         */\n        getImageSize: function(stream) {\n            var pngMagicNum = \"\\211PNG\\r\\n\\032\\n\",\n                jpgMagicNum = \"\\377\\330\",\n                gifMagicNum = \"GIF8\",\n                nextByte = function() {\n                    return stream.charCodeAt(pos++);\n                };\n\n            if (stream.substr(0, 8) === pngMagicNum) {\n                // PNG. Easy peasy.\n                var pos = stream.indexOf('IHDR') + 4;\n\n                return { width:  (nextByte() << 24) | (nextByte() << 16) |\n                (nextByte() <<  8) | nextByte(),\n                    height: (nextByte() << 24) | (nextByte() << 16) |\n                    (nextByte() <<  8) | nextByte() };\n\n            } else if (stream.substr(0, 4) === gifMagicNum) {\n                pos = 6;\n\n                return {\n                    width:  nextByte() | (nextByte() << 8),\n                    height: nextByte() | (nextByte() << 8)\n                };\n\n            } else if (stream.substr(0, 2) === jpgMagicNum) {\n                pos = 2;\n\n                var l = stream.length;\n                while (pos < l) {\n                    if (nextByte() != 0xFF) return;\n\n                    var marker = nextByte();\n                    if (marker == 0xDA) break;\n\n                    var size = (nextByte() << 8) | nextByte();\n\n                    if (marker >= 0xC0 && marker <= 0xCF && !(marker & 0x4) && !(marker & 0x8)) {\n                        pos += 1;\n                        return { height:  (nextByte() << 8) | nextByte(),\n                            width: (nextByte() << 8) | nextByte() };\n\n                    } else {\n                        pos += size - 2;\n                    }\n                }\n            }\n        },\n\n        /**\n         * Captures context XHTML element from editor under current caret position.\n         * This node can be used as a helper for abbreviation extraction\n         * @param {IEmmetEditor} editor\n         * @returns {Object}\n         */\n        captureContext: function(editor) {\n            var allowedSyntaxes = {'html': 1, 'xml': 1, 'xsl': 1};\n            var syntax = String(editor.getSyntax());\n            if (syntax in allowedSyntaxes) {\n                var content = String(editor.getContent());\n                var tag = require('htmlMatcher').find(content, editor.getCaretPos());\n\n                if (tag && tag.type == 'tag') {\n                    var startTag = tag.open;\n                    var contextNode = {\n                        name: startTag.name,\n                        attributes: []\n                    };\n\n                    // parse attributes\n                    var tagTree = require('xmlEditTree').parse(startTag.range.substring(content));\n                    if (tagTree) {\n                        contextNode.attributes = _.map(tagTree.getAll(), function(item) {\n                            return {\n                                name: item.name(),\n                                value: item.value()\n                            };\n                        });\n                    }\n\n                    return contextNode;\n                }\n            }\n\n            return null;\n        },\n\n        /**\n         * Find expression bounds in current editor at caret position.\n         * On each character a <code>fn</code> function will be called and must\n         * return <code>true</code> if current character meets requirements,\n         * <code>false</code> otherwise\n         * @param {IEmmetEditor} editor\n         * @param {Function} fn Function to test each character of expression\n         * @return {Range}\n         */\n        findExpressionBounds: function(editor, fn) {\n            var content = String(editor.getContent());\n            var il = content.length;\n            var exprStart = editor.getCaretPos() - 1;\n            var exprEnd = exprStart + 1;\n\n            // start by searching left\n            while (exprStart >= 0 && fn(content.charAt(exprStart), exprStart, content)) exprStart--;\n\n            // then search right\n            while (exprEnd < il && fn(content.charAt(exprEnd), exprEnd, content)) exprEnd++;\n\n            if (exprEnd > exprStart) {\n                return require('range').create([++exprStart, exprEnd]);\n            }\n        },\n\n        /**\n         * @param {IEmmetEditor} editor\n         * @param {Object} data\n         * @returns {Boolean}\n         */\n        compoundUpdate: function(editor, data) {\n            if (data) {\n                var sel = editor.getSelectionRange();\n                editor.replaceContent(data.data, data.start, data.end, true);\n                editor.createSelection(data.caret, data.caret + sel.end - sel.start);\n                return true;\n            }\n\n            return false;\n        },\n\n        /**\n         * Common syntax detection method for editors that doesn’t provide any\n         * info about current syntax scope.\n         * @param {IEmmetEditor} editor Current editor\n         * @param {String} hint Any syntax hint that editor can provide\n         * for syntax detection. Default is 'html'\n         * @returns {String}\n         */\n        detectSyntax: function(editor, hint) {\n            var syntax = hint || 'html';\n\n            if (!require('resources').hasSyntax(syntax)) {\n                syntax = 'html';\n            }\n\n            if (syntax == 'html' && (this.isStyle(editor) || this.isInlineCSS(editor))) {\n                syntax = 'css';\n            }\n\n            return syntax;\n        },\n\n        /**\n         * Common method for detecting output profile\n         * @param {IEmmetEditor} editor\n         * @returns {String}\n         */\n        detectProfile: function(editor) {\n            var syntax = editor.getSyntax();\n\n            // get profile from syntax definition\n            var profile = require('resources').findItem(syntax, 'profile');\n            if (profile) {\n                return profile;\n            }\n\n            switch(syntax) {\n                case 'xml':\n                case 'xsl':\n                    return 'xml';\n                case 'css':\n                    if (this.isInlineCSS(editor)) {\n                        return 'line';\n                    }\n                    break;\n                case 'html':\n                    var profile = require('resources').getVariable('profile');\n                    if (!profile) { // no forced profile, guess from content\n                        // html or xhtml?\n                        profile = this.isXHTML(editor) ? 'xhtml': 'html';\n                    }\n\n                    return profile;\n            }\n\n            return 'xhtml';\n        },\n\n        /**\n         * Tries to detect if current document is XHTML one.\n         * @param {IEmmetEditor} editor\n         * @returns {Boolean}\n         */\n        isXHTML: function(editor) {\n            return editor.getContent().search(/<!DOCTYPE[^>]+XHTML/i) != -1;\n        },\n\n        /**\n         * Check if current caret position is inside &lt;style&gt; tag\n         * @param {IEmmetEditor} editor\n         * @returns\n         */\n        isStyle: function(editor) {\n            var content = String(editor.getContent());\n            var caretPos = editor.getCaretPos();\n            var tag = require('htmlMatcher').tag(content, caretPos);\n            return tag && tag.open.name.toLowerCase() == 'style'\n                && tag.innerRange.cmp(caretPos, 'lte', 'gte');\n        },\n\n        /**\n         * Check if current caret position is inside \"style\" attribute of HTML\n         * element\n         * @param {IEmmetEditor} editor\n         * @returns {Boolean}\n         */\n        isInlineCSS: function(editor) {\n            var content = String(editor.getContent());\n            var caretPos = editor.getCaretPos();\n            var tree = require('xmlEditTree').parseFromPosition(content, caretPos, true);\n            if (tree) {\n                var attr = tree.itemFromPosition(caretPos, true);\n                return attr && attr.name().toLowerCase() == 'style'\n                    && attr.valueRange(true).cmp(caretPos, 'lte', 'gte');\n            }\n\n            return false;\n        }\n    };\n});/**\n * Utility functions to work with <code>AbbreviationNode</code> as HTML element\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('abbreviationUtils', function(require, _) {\n    return {\n        /**\n         * Check if passed abbreviation node has matched snippet resource\n         * @param {AbbreviationNode} node\n         * @returns {Boolean}\n         * @memberOf abbreviationUtils\n         */\n        isSnippet: function(node) {\n            return require('elements').is(node.matchedResource(), 'snippet');\n        },\n\n        /**\n         * Test if passed node is unary (no closing tag)\n         * @param {AbbreviationNode} node\n         * @return {Boolean}\n         */\n        isUnary: function(node) {\n            if (node.children.length || node._text || this.isSnippet(node)) {\n                return false;\n            }\n\n            var r = node.matchedResource();\n            return r && r.is_empty;\n        },\n\n        /**\n         * Test if passed node is inline-level (like &lt;strong&gt;, &lt;img&gt;)\n         * @param {AbbreviationNode} node\n         * @return {Boolean}\n         */\n        isInline: function(node) {\n            return node.isTextNode()\n                || !node.name()\n                || require('tagName').isInlineLevel(node.name());\n        },\n\n        /**\n         * Test if passed node is block-level\n         * @param {AbbreviationNode} node\n         * @return {Boolean}\n         */\n        isBlock: function(node) {\n            return this.isSnippet(node) || !this.isInline(node);\n        },\n\n        /**\n         * Test if given node is a snippet\n         * @param {AbbreviationNode} node\n         * @return {Boolean}\n         */\n        isSnippet: function(node) {\n            return require('elements').is(node.matchedResource(), 'snippet');\n        },\n\n        /**\n         * This function tests if passed node content contains HTML tags.\n         * This function is mostly used for output formatting\n         * @param {AbbreviationNode} node\n         * @returns {Boolean}\n         */\n        hasTagsInContent: function(node) {\n            return require('utils').matchesTag(node.content);\n        },\n\n        /**\n         * Test if current element contains block-level children\n         * @param {AbbreviationNode} node\n         * @return {Boolean}\n         */\n        hasBlockChildren: function(node) {\n            return (this.hasTagsInContent(node) && this.isBlock(node))\n                || _.any(node.children, function(child) {\n                    return this.isBlock(child);\n                }, this);\n        },\n\n        /**\n         * Utility function that inserts content instead of <code>${child}</code>\n         * variables on <code>text</code>\n         * @param {String} text Text where child content should be inserted\n         * @param {String} childContent Content to insert\n         * @param {Object} options\n         * @returns {String\n\t\t */\n        insertChildContent: function(text, childContent, options) {\n            options = _.extend({\n                keepVariable: true,\n                appendIfNoChild: true\n            }, options || {});\n\n            var childVariableReplaced = false;\n            var utils = require('utils');\n            text = utils.replaceVariables(text, function(variable, name, data) {\n                var output = variable;\n                if (name == 'child') {\n                    // add correct indentation\n                    output = utils.padString(childContent, utils.getLinePaddingFromPosition(text, data.start));\n                    childVariableReplaced = true;\n                    if (options.keepVariable)\n                        output += variable;\n                }\n\n                return output;\n            });\n\n            if (!childVariableReplaced && options.appendIfNoChild) {\n                text += childContent;\n            }\n\n            return text;\n        }\n    };\n});/**\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n */\nemmet.define('base64', function(require, _) {\n    var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n    return {\n        /**\n         * Encodes data using base64 algorithm\n         * @author Tyler Akins (http://rumkin.com)\n         * @param {String} input\n         * @returns {String}\n         * @memberOf emmet.base64\n         */\n        encode : function(input) {\n            var output = [];\n            var chr1, chr2, chr3, enc1, enc2, enc3, enc4, cdp1, cdp2, cdp3;\n            var i = 0, il = input.length, b64 = chars;\n\n            while (i < il) {\n\n                cdp1 = input.charCodeAt(i++);\n                cdp2 = input.charCodeAt(i++);\n                cdp3 = input.charCodeAt(i++);\n\n                chr1 = cdp1 & 0xff;\n                chr2 = cdp2 & 0xff;\n                chr3 = cdp3 & 0xff;\n\n                enc1 = chr1 >> 2;\n                enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n                enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n                enc4 = chr3 & 63;\n\n                if (isNaN(cdp2)) {\n                    enc3 = enc4 = 64;\n                } else if (isNaN(cdp3)) {\n                    enc4 = 64;\n                }\n\n                output.push(b64.charAt(enc1) + b64.charAt(enc2) + b64.charAt(enc3) + b64.charAt(enc4));\n            }\n\n            return output.join('');\n        },\n\n        /**\n         * Decodes string using MIME base64 algorithm\n         *\n         * @author Tyler Akins (http://rumkin.com)\n         * @param {String} data\n         * @return {String}\n         */\n        decode : function(data) {\n            var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, tmpArr = [];\n            var b64 = chars, il = data.length;\n\n            if (!data) {\n                return data;\n            }\n\n            data += '';\n\n            do { // unpack four hexets into three octets using index points in b64\n                h1 = b64.indexOf(data.charAt(i++));\n                h2 = b64.indexOf(data.charAt(i++));\n                h3 = b64.indexOf(data.charAt(i++));\n                h4 = b64.indexOf(data.charAt(i++));\n\n                bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;\n\n                o1 = bits >> 16 & 0xff;\n                o2 = bits >> 8 & 0xff;\n                o3 = bits & 0xff;\n\n                if (h3 == 64) {\n                    tmpArr[ac++] = String.fromCharCode(o1);\n                } else if (h4 == 64) {\n                    tmpArr[ac++] = String.fromCharCode(o1, o2);\n                } else {\n                    tmpArr[ac++] = String.fromCharCode(o1, o2, o3);\n                }\n            } while (i < il);\n\n            return tmpArr.join('');\n        }\n    };\n});/**\n * HTML matcher: takes string and searches for HTML tag pairs for given position\n *\n * Unlike “classic” matchers, it parses content from the specified\n * position, not from the start, so it may work even outside HTML documents\n * (for example, inside strings of programming languages like JavaScript, Python\n * etc.)\n * @constructor\n * @memberOf __htmlMatcherDefine\n */\nemmet.define('htmlMatcher', function(require, _) {\n    // Regular Expressions for parsing tags and attributes\n    var reOpenTag = /^<([\\w\\:\\-]+)((?:\\s+[\\w\\-:]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/;\n    var reCloseTag = /^<\\/([\\w\\:\\-]+)[^>]*>/;\n\n    function openTag(i, match) {\n        return {\n            name: match[1],\n            selfClose: !!match[3],\n            /** @type Range */\n            range: require('range').create(i, match[0]),\n            type: 'open'\n        };\n    }\n\n    function closeTag(i, match) {\n        return {\n            name: match[1],\n            /** @type Range */\n            range: require('range').create(i, match[0]),\n            type: 'close'\n        };\n    }\n\n    function comment(i, match) {\n        return {\n            /** @type Range */\n            range: require('range').create(i, _.isNumber(match) ? match - i : match[0]),\n            type: 'comment'\n        };\n    }\n\n    /**\n     * Creates new tag matcher session\n     * @param {String} text\n     */\n    function createMatcher(text) {\n        var memo = {}, m;\n        return {\n            /**\n             * Test if given position matches opening tag\n             * @param {Number} i\n             * @returns {Object} Matched tag object\n             */\n            open: function(i) {\n                var m = this.matches(i);\n                return m && m.type == 'open' ? m : null;\n            },\n\n            /**\n             * Test if given position matches closing tag\n             * @param {Number} i\n             * @returns {Object} Matched tag object\n             */\n            close: function(i) {\n                var m = this.matches(i);\n                return m && m.type == 'close' ? m : null;\n            },\n\n            /**\n             * Matches either opening or closing tag for given position\n             * @param i\n             * @returns\n             */\n            matches: function(i) {\n                var key = 'p' + i;\n\n                if (!(key in memo)) {\n                    if (text.charAt(i) == '<') {\n                        var substr = text.slice(i);\n                        if (m = substr.match(reOpenTag)) {\n                            memo[key] = openTag(i, m);\n                        } else if (m = substr.match(reCloseTag)) {\n                            memo[key] = closeTag(i, m);\n                        } else {\n                            // remember that given position contains no valid tag\n                            memo[key] = false;\n                        }\n                    }\n                }\n\n                return memo[key];\n            },\n\n            /**\n             * Returns original text\n             * @returns {String}\n             */\n            text: function() {\n                return text;\n            }\n        };\n    }\n\n    function matches(text, pos, pattern) {\n        return text.substring(pos, pos + pattern.length) == pattern;\n    }\n\n    /**\n     * Search for closing pair of opening tag\n     * @param {Object} open Open tag instance\n     * @param {Object} matcher Matcher instance\n     */\n    function findClosingPair(open, matcher) {\n        var stack = [], tag = null;\n        var text = matcher.text();\n\n        for (var pos = open.range.end, len = text.length; pos < len; pos++) {\n            if (matches(text, pos, '<!--')) {\n                // skip to end of comment\n                for (var j = pos; j < len; j++) {\n                    if (matches(text, j, '-->')) {\n                        pos = j + 3;\n                        break;\n                    }\n                }\n            }\n\n            if (tag = matcher.matches(pos)) {\n                if (tag.type == 'open' && !tag.selfClose) {\n                    stack.push(tag.name);\n                } else if (tag.type == 'close') {\n                    if (!stack.length) { // found valid pair?\n                        return tag.name == open.name ? tag : null;\n                    }\n\n                    // check if current closing tag matches previously opened one\n                    if (_.last(stack) == tag.name) {\n                        stack.pop();\n                    } else {\n                        var found = false;\n                        while (stack.length && !found) {\n                            var last = stack.pop();\n                            if (last == tag.name) {\n                                found = true;\n                            }\n                        }\n\n                        if (!stack.length && !found) {\n                            return tag.name == open.name ? tag : null;\n                        }\n                    }\n                }\n            }\n\n        }\n    }\n\n    return {\n        /**\n         * Main function: search for tag pair in <code>text</code> for given\n         * position\n         * @memberOf htmlMatcher\n         * @param {String} text\n         * @param {Number} pos\n         * @returns {Object}\n         */\n        find: function(text, pos) {\n            var range = require('range');\n            var matcher = createMatcher(text);\n            var open = null, close = null;\n\n            for (var i = pos; i >= 0; i--) {\n                if (open = matcher.open(i)) {\n                    // found opening tag\n                    if (open.selfClose) {\n                        if (open.range.cmp(pos, 'lt', 'gt')) {\n                            // inside self-closing tag, found match\n                            break;\n                        }\n\n                        // outside self-closing tag, continue\n                        continue;\n                    }\n\n                    close = findClosingPair(open, matcher);\n                    if (close) {\n                        // found closing tag.\n                        var r = range.create2(open.range.start, close.range.end);\n                        if (r.contains(pos)) {\n                            break;\n                        }\n                    } else if (open.range.contains(pos)) {\n                        // we inside empty HTML tag like <br>\n                        break;\n                    }\n\n                    open = null;\n                } else if (matches(text, i, '-->')) {\n                    // skip back to comment start\n                    for (var j = i - 1; j >= 0; j--) {\n                        if (matches(text, j, '-->')) {\n                            // found another comment end, do nothing\n                            break;\n                        } else if (matches(text, j, '<!--')) {\n                            i = j;\n                            break;\n                        }\n                    }\n                } else if (matches(text, i, '<!--')) {\n                    // we're inside comment, match it\n                    var j = i + 4, jl = text.length;\n                    for (; j < jl; j++) {\n                        if (matches(text, j, '-->')) {\n                            j += 3;\n                            break;\n                        }\n                    }\n\n                    open = comment(i, j);\n                    break;\n                }\n            }\n\n            if (open) {\n                var outerRange = null;\n                var innerRange = null;\n\n                if (close) {\n                    outerRange = range.create2(open.range.start, close.range.end);\n                    innerRange = range.create2(open.range.end, close.range.start);\n                } else {\n                    outerRange = innerRange = range.create2(open.range.start, open.range.end);\n                }\n\n                if (open.type == 'comment') {\n                    // adjust positions of inner range for comment\n                    var _c = outerRange.substring(text);\n                    innerRange.start += _c.length - _c.replace(/^<\\!--\\s*/, '').length;\n                    innerRange.end -= _c.length - _c.replace(/\\s*-->$/, '').length;\n                }\n\n                return {\n                    open: open,\n                    close: close,\n                    type: open.type == 'comment' ? 'comment' : 'tag',\n                    innerRange: innerRange,\n                    innerContent: function() {\n                        return this.innerRange.substring(text);\n                    },\n                    outerRange: outerRange,\n                    outerContent: function() {\n                        return this.outerRange.substring(text);\n                    },\n                    range: !innerRange.length() || !innerRange.cmp(pos, 'lte', 'gte') ? outerRange : innerRange,\n                    content: function() {\n                        return this.range.substring(text);\n                    },\n                    source: text\n                };\n            }\n        },\n\n        /**\n         * The same as <code>find()</code> method, but restricts matched result\n         * to <code>tag</code> type\n         * @param {String} text\n         * @param {Number} pos\n         * @returns {Object}\n         */\n        tag: function(text, pos) {\n            var result = this.find(text, pos);\n            if (result && result.type == 'tag') {\n                return result;\n            }\n        }\n    };\n});/**\n * Utility module for handling tabstops tokens generated by Emmet's\n * \"Expand Abbreviation\" action. The main <code>extract</code> method will take\n * raw text (for example: <i>${0} some ${1:text}</i>), find all tabstops\n * occurrences, replace them with tokens suitable for your editor of choice and\n * return object with processed text and list of found tabstops and their ranges.\n * For sake of portability (Objective-C/Java) the tabstops list is a plain\n * sorted array with plain objects.\n *\n * Placeholders with the same are meant to be <i>linked</i> in your editor.\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('tabStops', function(require, _) {\n    /**\n     * Global placeholder value, automatically incremented by\n     * <code>variablesResolver()</code> function\n     */\n    var startPlaceholderNum = 100;\n\n    var tabstopIndex = 0;\n\n    var defaultOptions = {\n        replaceCarets: false,\n        escape: function(ch) {\n            return '\\\\' + ch;\n        },\n        tabstop: function(data) {\n            return data.token;\n        },\n        variable: function(data) {\n            return data.token;\n        }\n    };\n\n    // XXX register output processor that will upgrade tabstops of parsed node\n    // in order to prevent tabstop index conflicts\n    require('abbreviationParser').addOutputProcessor(function(text, node, type) {\n        var maxNum = 0;\n        var tabstops = require('tabStops');\n        var utils = require('utils');\n\n        var tsOptions = {\n            tabstop: function(data) {\n                var group = parseInt(data.group);\n                if (group == 0)\n                    return '${0}';\n\n                if (group > maxNum) maxNum = group;\n                if (data.placeholder) {\n                    // respect nested placeholders\n                    var ix = group + tabstopIndex;\n                    var placeholder = tabstops.processText(data.placeholder, tsOptions);\n                    return '${' + ix + ':' + placeholder + '}';\n                } else {\n                    return '${' + (group + tabstopIndex) + '}';\n                }\n            }\n        };\n\n        // upgrade tabstops\n        text = tabstops.processText(text, tsOptions);\n\n        // resolve variables\n        text = utils.replaceVariables(text, tabstops.variablesResolver(node));\n\n        tabstopIndex += maxNum + 1;\n        return text;\n    });\n\n    return {\n        /**\n         * Main function that looks for a tabstops in provided <code>text</code>\n         * and returns a processed version of <code>text</code> with expanded\n         * placeholders and list of tabstops found.\n         * @param {String} text Text to process\n         * @param {Object} options List of processor options:<br>\n         *\n         * <b>replaceCarets</b> : <code>Boolean</code> — replace all default\n         * caret placeholders (like <i>{%::emmet-caret::%}</i>) with <i>${0:caret}</i><br>\n         *\n         * <b>escape</b> : <code>Function</code> — function that handle escaped\n         * characters (mostly '$'). By default, it returns the character itself\n         * to be displayed as is in output, but sometimes you will use\n         * <code>extract</code> method as intermediate solution for further\n         * processing and want to keep character escaped. Thus, you should override\n         * <code>escape</code> method to return escaped symbol (e.g. '\\\\$')<br>\n         *\n         * <b>tabstop</b> : <code>Function</code> – a tabstop handler. Receives\n         * a single argument – an object describing token: its position, number\n         * group, placeholder and token itself. Should return a replacement\n         * string that will appear in final output\n         *\n         * <b>variable</b> : <code>Function</code> – variable handler. Receives\n         * a single argument – an object describing token: its position, name\n         * and original token itself. Should return a replacement\n         * string that will appear in final output\n         *\n         * @returns {Object} Object with processed <code>text</code> property\n         * and array of <code>tabstops</code> found\n         * @memberOf tabStops\n         */\n        extract: function(text, options) {\n            // prepare defaults\n            var utils = require('utils');\n            var placeholders = {carets: ''};\n            var marks = [];\n\n            options = _.extend({}, defaultOptions, options, {\n                tabstop: function(data) {\n                    var token = data.token;\n                    var ret = '';\n                    if (data.placeholder == 'cursor') {\n                        marks.push({\n                            start: data.start,\n                            end: data.start + token.length,\n                            group: 'carets',\n                            value: ''\n                        });\n                    } else {\n                        // unify placeholder value for single group\n                        if ('placeholder' in data)\n                            placeholders[data.group] = data.placeholder;\n\n                        if (data.group in placeholders)\n                            ret = placeholders[data.group];\n\n                        marks.push({\n                            start: data.start,\n                            end: data.start + token.length,\n                            group: data.group,\n                            value: ret\n                        });\n                    }\n\n                    return token;\n                }\n            });\n\n            if (options.replaceCarets) {\n                text = text.replace(new RegExp( utils.escapeForRegexp( utils.getCaretPlaceholder() ), 'g'), '${0:cursor}');\n            }\n\n            // locate tabstops and unify group's placeholders\n            text = this.processText(text, options);\n\n            // now, replace all tabstops with placeholders\n            var buf = utils.stringBuilder(), lastIx = 0;\n            var tabStops = _.map(marks, function(mark) {\n                buf.append(text.substring(lastIx, mark.start));\n\n                var pos = buf.length;\n                var ph = placeholders[mark.group] || '';\n\n                buf.append(ph);\n                lastIx = mark.end;\n\n                return {\n                    group: mark.group,\n                    start: pos,\n                    end:  pos + ph.length\n                };\n            });\n\n            buf.append(text.substring(lastIx));\n\n            return {\n                text: buf.toString(),\n                tabstops: _.sortBy(tabStops, 'start')\n            };\n        },\n\n        /**\n         * Text processing routine. Locates escaped characters and tabstops and\n         * replaces them with values returned by handlers defined in\n         * <code>options</code>\n         * @param {String} text\n         * @param {Object} options See <code>extract</code> method options\n         * description\n         * @returns {String}\n         */\n        processText: function(text, options) {\n            options = _.extend({}, defaultOptions, options);\n\n            var buf = require('utils').stringBuilder();\n            /** @type StringStream */\n            var stream = require('stringStream').create(text);\n            var ch, m, a;\n\n            while (ch = stream.next()) {\n                if (ch == '\\\\' && !stream.eol()) {\n                    // handle escaped character\n                    buf.append(options.escape(stream.next()));\n                    continue;\n                }\n\n                a = ch;\n\n                if (ch == '$') {\n                    // looks like a tabstop\n                    stream.start = stream.pos - 1;\n\n                    if (m = stream.match(/^[0-9]+/)) {\n                        // it's $N\n                        a = options.tabstop({\n                            start: buf.length,\n                            group: stream.current().substr(1),\n                            token: stream.current()\n                        });\n                    } else if (m = stream.match(/^\\{([a-z_\\-][\\w\\-]*)\\}/)) {\n                        // ${variable}\n                        a = options.variable({\n                            start: buf.length,\n                            name: m[1],\n                            token: stream.current()\n                        });\n                    } else if (m = stream.match(/^\\{([0-9]+)(:.+?)?\\}/, false)) {\n                        // ${N:value} or ${N} placeholder\n                        // parse placeholder, including nested ones\n                        stream.skipToPair('{', '}');\n\n                        var obj = {\n                            start: buf.length,\n                            group: m[1],\n                            token: stream.current()\n                        };\n\n                        var placeholder = obj.token.substring(obj.group.length + 2, obj.token.length - 1);\n\n                        if (placeholder) {\n                            obj.placeholder = placeholder.substr(1);\n                        }\n\n                        a = options.tabstop(obj);\n                    }\n                }\n\n                buf.append(a);\n            }\n\n            return buf.toString();\n        },\n\n        /**\n         * Upgrades tabstops in output node in order to prevent naming conflicts\n         * @param {AbbreviationNode} node\n         * @param {Number} offset Tab index offset\n         * @returns {Number} Maximum tabstop index in element\n         */\n        upgrade: function(node, offset) {\n            var maxNum = 0;\n            var options = {\n                tabstop: function(data) {\n                    var group = parseInt(data.group);\n                    if (group > maxNum) maxNum = group;\n\n                    if (data.placeholder)\n                        return '${' + (group + offset) + ':' + data.placeholder + '}';\n                    else\n                        return '${' + (group + offset) + '}';\n                }\n            };\n\n            _.each(['start', 'end', 'content'], function(p) {\n                node[p] = this.processText(node[p], options);\n            }, this);\n\n            return maxNum;\n        },\n\n        /**\n         * Helper function that produces a callback function for\n         * <code>replaceVariables()</code> method from {@link utils}\n         * module. This callback will replace variable definitions (like\n         * ${var_name}) with their value defined in <i>resource</i> module,\n         * or outputs tabstop with variable name otherwise.\n         * @param {AbbreviationNode} node Context node\n         * @returns {Function}\n         */\n        variablesResolver: function(node) {\n            var placeholderMemo = {};\n            var res = require('resources');\n            return function(str, varName) {\n                // do not mark `child` variable as placeholder – it‘s a reserved\n                // variable name\n                if (varName == 'child')\n                    return str;\n\n                if (varName == 'cursor')\n                    return require('utils').getCaretPlaceholder();\n\n                var attr = node.attribute(varName);\n                if (!_.isUndefined(attr) && attr !== str) {\n                    return attr;\n                }\n\n                var varValue = res.getVariable(varName);\n                if (varValue)\n                    return varValue;\n\n                // output as placeholder\n                if (!placeholderMemo[varName])\n                    placeholderMemo[varName] = startPlaceholderNum++;\n\n                return '${' + placeholderMemo[varName] + ':' + varName + '}';\n            };\n        },\n\n        /**\n         * Resets global tabstop index. When parsed tree is converted to output\n         * string (<code>AbbreviationNode.toString()</code>), all tabstops\n         * defined in snippets and elements are upgraded in order to prevent\n         * naming conflicts of nested. For example, <code>${1}</code> of a node\n         * should not be linked with the same placehilder of the child node.\n         * By default, <code>AbbreviationNode.toString()</code> automatically\n         * upgrades tabstops of the same index for each node and writes maximum\n         * tabstop index into the <code>tabstopIndex</code> variable. To keep\n         * this variable at reasonable value, it is recommended to call\n         * <code>resetTabstopIndex()</code> method each time you expand variable\n         * @returns\n         */\n        resetTabstopIndex: function() {\n            tabstopIndex = 0;\n            startPlaceholderNum = 100;\n        }\n    };\n});/**\n * Common module's preferences storage. This module\n * provides general storage for all module preferences, their description and\n * default values.<br><br>\n *\n * This module can also be used to list all available properties to create\n * UI for updating properties\n *\n * @memberOf __preferencesDefine\n * @constructor\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('preferences', function(require, _) {\n    var preferences = {};\n    var defaults = {};\n    var _dbgDefaults = null;\n    var _dbgPreferences = null;\n\n    function toBoolean(val) {\n        if (_.isString(val)) {\n            val = val.toLowerCase();\n            return val == 'yes' || val == 'true' || val == '1';\n        }\n\n        return !!val;\n    }\n\n    function isValueObj(obj) {\n        return _.isObject(obj)\n            && 'value' in obj\n            && _.keys(obj).length < 3;\n    }\n\n    return {\n        /**\n         * Creates new preference item with default value\n         * @param {String} name Preference name. You can also pass object\n         * with many options\n         * @param {Object} value Preference default value\n         * @param {String} description Item textual description\n         * @memberOf preferences\n         */\n        define: function(name, value, description) {\n            var prefs = name;\n            if (_.isString(name)) {\n                prefs = {};\n                prefs[name] = {\n                    value: value,\n                    description: description\n                };\n            }\n\n            _.each(prefs, function(v, k) {\n                defaults[k] = isValueObj(v) ? v : {value: v};\n            });\n        },\n\n        /**\n         * Updates preference item value. Preference value should be defined\n         * first with <code>define</code> method.\n         * @param {String} name Preference name. You can also pass object\n         * with many options\n         * @param {Object} value Preference default value\n         * @memberOf preferences\n         */\n        set: function(name, value) {\n            var prefs = name;\n            if (_.isString(name)) {\n                prefs = {};\n                prefs[name] = value;\n            }\n\n            _.each(prefs, function(v, k) {\n                if (!(k in defaults)) {\n                    throw 'Property \"' + k + '\" is not defined. You should define it first with `define` method of current module';\n                }\n\n                // do not set value if it equals to default value\n                if (v !== defaults[k].value) {\n                    // make sure we have value of correct type\n                    switch (typeof defaults[k].value) {\n                        case 'boolean':\n                            v = toBoolean(v);\n                            break;\n                        case 'number':\n                            v = parseInt(v + '', 10) || 0;\n                            break;\n                        default: // convert to string\n                            if (v !== null) {\n                                v += '';\n                            }\n                    }\n\n                    preferences[k] = v;\n                } else if  (k in preferences) {\n                    delete preferences[k];\n                }\n            });\n        },\n\n        /**\n         * Returns preference value\n         * @param {String} name\n         * @returns {String} Returns <code>undefined</code> if preference is\n         * not defined\n         */\n        get: function(name) {\n            if (name in preferences)\n                return preferences[name];\n\n            if (name in defaults)\n                return defaults[name].value;\n\n            return void 0;\n        },\n\n        /**\n         * Returns comma-separated preference value as array of values\n         * @param {String} name\n         * @returns {Array} Returns <code>undefined</code> if preference is\n         * not defined, <code>null</code> if string cannot be converted to array\n         */\n        getArray: function(name) {\n            var val = this.get(name);\n            if (_.isUndefined(val) || val === null || val === '')  {\n                return null;\n            }\n\n            val = _.map(val.split(','), require('utils').trim);\n            if (!val.length) {\n                return null;\n            }\n\n            return val;\n        },\n\n        /**\n         * Returns comma and colon-separated preference value as dictionary\n         * @param {String} name\n         * @returns {Object}\n         */\n        getDict: function(name) {\n            var result = {};\n            _.each(this.getArray(name), function(val) {\n                var parts = val.split(':');\n                result[parts[0]] = parts[1];\n            });\n\n            return result;\n        },\n\n        /**\n         * Returns description of preference item\n         * @param {String} name Preference name\n         * @returns {Object}\n         */\n        description: function(name) {\n            return name in defaults ? defaults[name].description : void 0;\n        },\n\n        /**\n         * Completely removes specified preference(s)\n         * @param {String} name Preference name (or array of names)\n         */\n        remove: function(name) {\n            if (!_.isArray(name))\n                name = [name];\n\n            _.each(name, function(key) {\n                if (key in preferences)\n                    delete preferences[key];\n\n                if (key in defaults)\n                    delete defaults[key];\n            });\n        },\n\n        /**\n         * Returns sorted list of all available properties\n         * @returns {Array}\n         */\n        list: function() {\n            return _.map(_.keys(defaults).sort(), function(key) {\n                return {\n                    name: key,\n                    value: this.get(key),\n                    type: typeof defaults[key].value,\n                    description: defaults[key].description\n                };\n            }, this);\n        },\n\n        /**\n         * Loads user-defined preferences from JSON\n         * @param {Object} json\n         * @returns\n         */\n        load: function(json) {\n            _.each(json, function(value, key) {\n                this.set(key, value);\n            }, this);\n        },\n\n        /**\n         * Returns hash of user-modified preferences\n         * @returns {Object}\n         */\n        exportModified: function() {\n            return _.clone(preferences);\n        },\n\n        /**\n         * Reset to defaults\n         * @returns\n         */\n        reset: function() {\n            preferences = {};\n        },\n\n        /**\n         * For unit testing: use empty storage\n         */\n        _startTest: function() {\n            _dbgDefaults = defaults;\n            _dbgPreferences = preferences;\n            defaults = {};\n            preferences = {};\n        },\n\n        /**\n         * For unit testing: restore original storage\n         */\n        _stopTest: function() {\n            defaults = _dbgDefaults;\n            preferences = _dbgPreferences;\n        }\n    };\n});/**\n * Module for handling filters\n * @param {Function} require\n * @param {Underscore} _\n * @author Sergey Chikuyonok (serge.che@gmail.com) <http://chikuyonok.ru>\n */\nemmet.define('filters', function(require, _) {\n    /** List of registered filters */\n    var registeredFilters = {};\n\n    /** Filters that will be applied for unknown syntax */\n    var basicFilters = 'html';\n\n    function list(filters) {\n        if (!filters)\n            return [];\n\n        if (_.isString(filters))\n            return filters.split(/[\\|,]/g);\n\n        return filters;\n    }\n\n    return  {\n        /**\n         * Register new filter\n         * @param {String} name Filter name\n         * @param {Function} fn Filter function\n         */\n        add: function(name, fn) {\n            registeredFilters[name] = fn;\n        },\n\n        /**\n         * Apply filters for final output tree\n         * @param {AbbreviationNode} tree Output tree\n         * @param {Array} filters List of filters to apply. Might be a\n         * <code>String</code>\n         * @param {Object} profile Output profile, defined in <i>profile</i>\n         * module. Filters defined it profile are not used, <code>profile</code>\n         * is passed to filter function\n         * @memberOf emmet.filters\n         * @returns {AbbreviationNode}\n         */\n        apply: function(tree, filters, profile) {\n            var utils = require('utils');\n            profile = require('profile').get(profile);\n\n            _.each(list(filters), function(filter) {\n                var name = utils.trim(filter.toLowerCase());\n                if (name && name in registeredFilters) {\n                    tree = registeredFilters[name](tree, profile);\n                }\n            });\n\n            return tree;\n        },\n\n        /**\n         * Composes list of filters that should be applied to a tree, based on\n         * passed data\n         * @param {String} syntax Syntax name ('html', 'css', etc.)\n         * @param {Object} profile Output profile\n         * @param {String} additionalFilters List or pipe-separated\n         * string of additional filters to apply\n         * @returns {Array}\n         */\n        composeList: function(syntax, profile, additionalFilters) {\n            profile = require('profile').get(profile);\n            var filters = list(profile.filters || require('resources').findItem(syntax, 'filters') || basicFilters);\n\n            if (profile.extraFilters) {\n                filters = filters.concat(list(profile.extraFilters));\n            }\n\n            if (additionalFilters) {\n                filters = filters.concat(list(additionalFilters));\n            }\n\n            if (!filters || !filters.length) {\n                // looks like unknown syntax, apply basic filters\n                filters = list(basicFilters);\n            }\n\n            return filters;\n        },\n\n        /**\n         * Extracts filter list from abbreviation\n         * @param {String} abbr\n         * @returns {Array} Array with cleaned abbreviation and list of\n         * extracted filters\n         */\n        extractFromAbbreviation: function(abbr) {\n            var filters = '';\n            abbr = abbr.replace(/\\|([\\w\\|\\-]+)$/, function(str, p1){\n                filters = p1;\n                return '';\n            });\n\n            return [abbr, list(filters)];\n        }\n    };\n});/**\n * Module that contains factories for element types used by Emmet\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('elements', function(require, _) {\n    var factories = {};\n    var reAttrs = /([\\w\\-:]+)\\s*=\\s*(['\"])(.*?)\\2/g;\n\n    var result = {\n        /**\n         * Create new element factory\n         * @param {String} name Element identifier\n         * @param {Function} factory Function that produces element of specified\n         * type. The object generated by this factory is automatically\n         * augmented with <code>type</code> property pointing to element\n         * <code>name</code>\n         * @memberOf elements\n         */\n        add: function(name, factory) {\n            var that = this;\n            factories[name] = function() {\n                var elem = factory.apply(that, arguments);\n                if (elem)\n                    elem.type = name;\n\n                return elem;\n            };\n        },\n\n        /**\n         * Returns factory for specified name\n         * @param {String} name\n         * @returns {Function}\n         */\n        get: function(name) {\n            return factories[name];\n        },\n\n        /**\n         * Creates new element with specified type\n         * @param {String} name\n         * @returns {Object}\n         */\n        create: function(name) {\n            var args = [].slice.call(arguments, 1);\n            var factory = this.get(name);\n            return factory ? factory.apply(this, args) : null;\n        },\n\n        /**\n         * Check if passed element is of specified type\n         * @param {Object} elem\n         * @param {String} type\n         * @returns {Boolean}\n         */\n        is: function(elem, type) {\n            return elem && elem.type === type;\n        }\n    };\n\n    // register resource references\n    function commonFactory(value) {\n        return {data: value};\n    }\n\n    /**\n     * Element factory\n     * @param {String} elementName Name of output element\n     * @param {String} attrs Attributes definition. You may also pass\n     * <code>Array</code> where each contains object with <code>name</code>\n     * and <code>value</code> properties, or <code>Object</code>\n     * @param {Boolean} isEmpty Is expanded element should be empty\n     */\n    result.add('element', function(elementName, attrs, isEmpty) {\n        var ret = {\n            /** @memberOf __emmetDataElement */\n            name: elementName,\n            is_empty: !!isEmpty\n        };\n\n        if (attrs) {\n            ret.attributes = [];\n            if (_.isArray(attrs)) {\n                ret.attributes = attrs;\n            } else if (_.isString(attrs)) {\n                var m;\n                while (m = reAttrs.exec(attrs)) {\n                    ret.attributes.push({\n                        name: m[1],\n                        value: m[3]\n                    });\n                }\n            } else {\n                _.each(attrs, function(value, name) {\n                    ret.attributes.push({\n                        name: name,\n                        value: value\n                    });\n                });\n            }\n        }\n\n        return ret;\n    });\n\n    result.add('snippet', commonFactory);\n    result.add('reference', commonFactory);\n    result.add('empty', function() {\n        return {};\n    });\n\n    return result;\n});/**\n * Abstract implementation of edit tree interface.\n * Edit tree is a named container of editable “name-value” child elements,\n * parsed from <code>source</code>. This container provides convenient methods\n * for editing/adding/removing child elements. All these update actions are\n * instantly reflected in the <code>source</code> code with respect of formatting.\n * <br><br>\n * For example, developer can create an edit tree from CSS rule and add or\n * remove properties from it–all changes will be immediately reflected in the\n * original source.\n * <br><br>\n * All classes defined in this module should be extended the same way as in\n * Backbone framework: using <code>extend</code> method to create new class and\n * <code>initialize</code> method to define custom class constructor.\n *\n * @example\n * <pre><code>\n * var MyClass = require('editTree').EditElement.extend({\n * \tinitialize: function() {\n * \t\t// constructor code here\n * \t}\n * });\n *\n * var elem = new MyClass();\n * </code></pre>\n *\n *\n * @param {Function} require\n * @param {Underscore} _\n * @constructor\n * @memberOf __editTreeDefine\n */\nemmet.define('editTree', function(require, _, core) {\n    var range = require('range').create;\n\n    /**\n     * Named container of edited source\n     * @type EditContainer\n     * @param {String} source\n     * @param {Object} options\n     */\n    function EditContainer(source, options) {\n        this.options = _.extend({offset: 0}, options);\n        /**\n         * Source code of edited structure. All changes in the structure are\n         * immediately reflected into this property\n         */\n        this.source = source;\n\n        /**\n         * List of all editable children\n         * @private\n         */\n        this._children = [];\n\n        /**\n         * Hash of all positions of container\n         * @private\n         */\n        this._positions = {\n            name: 0\n        };\n\n        this.initialize.apply(this, arguments);\n    }\n\n    /**\n     * The self-propagating extend function for classes.\n     * @type Function\n     */\n    EditContainer.extend = core.extend;\n\n    EditContainer.prototype = {\n        /**\n         * Child class constructor\n         */\n        initialize: function() {},\n\n        /**\n         * Replace substring of tag's source\n         * @param {String} value\n         * @param {Number} start\n         * @param {Number} end\n         * @private\n         */\n        _updateSource: function(value, start, end) {\n            // create modification range\n            var r = range(start, _.isUndefined(end) ? 0 : end - start);\n            var delta = value.length - r.length();\n\n            var update = function(obj) {\n                _.each(obj, function(v, k) {\n                    if (v >= r.end)\n                        obj[k] += delta;\n                });\n            };\n\n            // update affected positions of current container\n            update(this._positions);\n\n            // update affected positions of children\n            _.each(this.list(), function(item) {\n                update(item._positions);\n            });\n\n            this.source = require('utils').replaceSubstring(this.source, value, r);\n        },\n\n\n        /**\n         * Adds new attribute\n         * @param {String} name Property name\n         * @param {String} value Property value\n         * @param {Number} pos Position at which to insert new property. By\n         * default the property is inserted at the end of rule\n         * @returns {EditElement} Newly created element\n         */\n        add: function(name, value, pos) {\n            // this is abstract implementation\n            var item = new EditElement(name, value);\n            this._children.push(item);\n            return item;\n        },\n\n        /**\n         * Returns attribute object\n         * @param {String} name Attribute name or its index\n         * @returns {EditElement}\n         */\n        get: function(name) {\n            if (_.isNumber(name))\n                return this.list()[name];\n\n            if (_.isString(name))\n                return _.find(this.list(), function(prop) {\n                    return prop.name() === name;\n                });\n\n            return name;\n        },\n\n        /**\n         * Returns all children by name or indexes\n         * @param {Object} name Element name(s) or indexes (<code>String</code>,\n         * <code>Array</code>, <code>Number</code>)\n         * @returns {Array}\n         */\n        getAll: function(name) {\n            if (!_.isArray(name))\n                name = [name];\n\n            // split names and indexes\n            var names = [], indexes = [];\n            _.each(name, function(item) {\n                if (_.isString(item))\n                    names.push(item);\n                else if (_.isNumber(item))\n                    indexes.push(item);\n            });\n\n            return _.filter(this.list(), function(attribute, i) {\n                return _.include(indexes, i) || _.include(names, attribute.name());\n            });\n        },\n\n        /**\n         * Returns or updates element value. If such element doesn't exists,\n         * it will be created automatically and added at the end of child list.\n         * @param {String} name Element name or its index\n         * @param {String} value New element value\n         * @returns {String}\n         */\n        value: function(name, value, pos) {\n            var element = this.get(name);\n            if (element)\n                return element.value(value);\n\n            if (!_.isUndefined(value)) {\n                // no such element — create it\n                return this.add(name, value, pos);\n            }\n        },\n\n        /**\n         * Returns all values of child elements found by <code>getAll()</code>\n         * method\n         * @param {Object} name Element name(s) or indexes (<code>String</code>,\n         * <code>Array</code>, <code>Number</code>)\n         * @returns {Array}\n         */\n        values: function(name) {\n            return _.map(this.getAll(name), function(element) {\n                return element.value();\n            });\n        },\n\n        /**\n         * Remove child element\n         * @param {String} name Property name or its index\n         */\n        remove: function(name) {\n            var element = this.get(name);\n            if (element) {\n                this._updateSource('', element.fullRange());\n                this._children = _.without(this._children, element);\n            }\n        },\n\n        /**\n         * Returns list of all editable child elements\n         * @returns {Array}\n         */\n        list: function() {\n            return this._children;\n        },\n\n        /**\n         * Returns index of editble child in list\n         * @param {Object} item\n         * @returns {Number}\n         */\n        indexOf: function(item) {\n            return _.indexOf(this.list(), this.get(item));\n        },\n\n        /**\n         * Sets or gets container name\n         * @param {String} val New name. If not passed, current\n         * name is returned\n         * @return {String}\n         */\n        name: function(val) {\n            if (!_.isUndefined(val) && this._name !== (val = String(val))) {\n                this._updateSource(val, this._positions.name, this._positions.name + this._name.length);\n                this._name = val;\n            }\n\n            return this._name;\n        },\n\n        /**\n         * Returns name range object\n         * @param {Boolean} isAbsolute Return absolute range (with respect of\n         * rule offset)\n         * @returns {Range}\n         */\n        nameRange: function(isAbsolute) {\n            return range(this._positions.name + (isAbsolute ? this.options.offset : 0), this.name());\n        },\n\n        /**\n         * Returns range of current source\n         * @param {Boolean} isAbsolute\n         */\n        range: function(isAbsolute) {\n            return range(isAbsolute ? this.options.offset : 0, this.toString());\n        },\n\n        /**\n         * Returns element that belongs to specified position\n         * @param {Number} pos\n         * @param {Boolean} isAbsolute\n         * @returns {EditElement}\n         */\n        itemFromPosition: function(pos, isAbsolute) {\n            return _.find(this.list(), function(elem) {\n                return elem.range(isAbsolute).inside(pos);\n            });\n        },\n\n        /**\n         * Returns source code of current container\n         * @returns {String}\n         */\n        toString: function() {\n            return this.source;\n        }\n    };\n\n    /**\n     * @param {EditContainer} parent\n     * @param {Object} nameToken\n     * @param {Object} valueToken\n     */\n    function EditElement(parent, nameToken, valueToken) {\n        /** @type EditContainer */\n        this.parent = parent;\n\n        this._name = nameToken.value;\n        this._value = valueToken ? valueToken.value : '';\n\n        this._positions = {\n            name: nameToken.start,\n            value: valueToken ? valueToken.start : -1\n        };\n\n        this.initialize.apply(this, arguments);\n    }\n\n    /**\n     * The self-propagating extend function for classes.\n     * @type Function\n     */\n    EditElement.extend = core.extend;\n\n    EditElement.prototype = {\n        /**\n         * Child class constructor\n         */\n        initialize: function() {},\n\n        /**\n         * Make position absolute\n         * @private\n         * @param {Number} num\n         * @param {Boolean} isAbsolute\n         * @returns {Boolean}\n         */\n        _pos: function(num, isAbsolute) {\n            return num + (isAbsolute ? this.parent.options.offset : 0);\n        },\n\n        /**\n         * Sets of gets element value\n         * @param {String} val New element value. If not passed, current\n         * value is returned\n         * @returns {String}\n         */\n        value: function(val) {\n            if (!_.isUndefined(val) && this._value !== (val = String(val))) {\n                this.parent._updateSource(val, this.valueRange());\n                this._value = val;\n            }\n\n            return this._value;\n        },\n\n        /**\n         * Sets of gets element name\n         * @param {String} val New element name. If not passed, current\n         * name is returned\n         * @returns {String}\n         */\n        name: function(val) {\n            if (!_.isUndefined(val) && this._name !== (val = String(val))) {\n                this.parent._updateSource(val, this.nameRange());\n                this._name = val;\n            }\n\n            return this._name;\n        },\n\n        /**\n         * Returns position of element name token\n         * @param {Boolean} isAbsolute Return absolute position\n         * @returns {Number}\n         */\n        namePosition: function(isAbsolute) {\n            return this._pos(this._positions.name, isAbsolute);\n        },\n\n        /**\n         * Returns position of element value token\n         * @param {Boolean} isAbsolute Return absolute position\n         * @returns {Number}\n         */\n        valuePosition: function(isAbsolute) {\n            return this._pos(this._positions.value, isAbsolute);\n        },\n\n        /**\n         * Returns element name\n         * @param {Boolean} isAbsolute Return absolute range\n         * @returns {Range}\n         */\n        range: function(isAbsolute) {\n            return range(this.namePosition(isAbsolute), this.toString());\n        },\n\n        /**\n         * Returns full element range, including possible indentation\n         * @param {Boolean} isAbsolute Return absolute range\n         * @returns {Range}\n         */\n        fullRange: function(isAbsolute) {\n            return this.range(isAbsolute);\n        },\n\n        /**\n         * Returns element name range\n         * @param {Boolean} isAbsolute Return absolute range\n         * @returns {Range}\n         */\n        nameRange: function(isAbsolute) {\n            return range(this.namePosition(isAbsolute), this.name());\n        },\n\n        /**\n         * Returns element value range\n         * @param {Boolean} isAbsolute Return absolute range\n         * @returns {Range}\n         */\n        valueRange: function(isAbsolute) {\n            return range(this.valuePosition(isAbsolute), this.value());\n        },\n\n        /**\n         * Returns current element string representation\n         * @returns {String}\n         */\n        toString: function() {\n            return this.name() + this.value();\n        },\n\n        valueOf: function() {\n            return this.toString();\n        }\n    };\n\n    return {\n        EditContainer: EditContainer,\n        EditElement: EditElement,\n\n        /**\n         * Creates token that can be fed to <code>EditElement</code>\n         * @param {Number} start\n         * @param {String} value\n         * @param {String} type\n         * @returns\n         */\n        createToken: function(start, value, type) {\n            var obj = {\n                start: start || 0,\n                value: value || '',\n                type: type\n            };\n\n            obj.end = obj.start + obj.value.length;\n            return obj;\n        }\n    };\n});/**\n * CSS EditTree is a module that can parse a CSS rule into a tree with\n * convenient methods for adding, modifying and removing CSS properties. These\n * changes can be written back to string with respect of code formatting.\n *\n * @memberOf __cssEditTreeDefine\n * @constructor\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('cssEditTree', function(require, _) {\n    var defaultOptions = {\n        styleBefore: '\\n\\t',\n        styleSeparator: ': ',\n        offset: 0\n    };\n\n    var WHITESPACE_REMOVE_FROM_START = 1;\n    var WHITESPACE_REMOVE_FROM_END   = 2;\n\n    /**\n     * Returns range object\n     * @param {Number} start\n     * @param {Number} len\n     * @returns {Range}\n     */\n    function range(start, len) {\n        return require('range').create(start, len);\n    }\n\n    /**\n     * Removes whitespace tokens from the array ends\n     * @param {Array} tokens\n     * @param {Number} mask Mask indicating from which end whitespace should be\n     * removed\n     * @returns {Array}\n     */\n    function trimWhitespaceTokens(tokens, mask) {\n        mask = mask || (WHITESPACE_REMOVE_FROM_START | WHITESPACE_REMOVE_FROM_END);\n        var whitespace = ['white', 'line'];\n\n        if ((mask & WHITESPACE_REMOVE_FROM_END) == WHITESPACE_REMOVE_FROM_END)\n            while (tokens.length && _.include(whitespace, _.last(tokens).type)) {\n                tokens.pop();\n            }\n\n        if ((mask & WHITESPACE_REMOVE_FROM_START) == WHITESPACE_REMOVE_FROM_START)\n            while (tokens.length && _.include(whitespace, tokens[0].type)) {\n                tokens.shift();\n            }\n\n        return tokens;\n    }\n\n    /**\n     * Helper function that searches for selector range for <code>CSSEditRule</code>\n     * @param {TokenIterator} it\n     * @returns {Range}\n     */\n    function findSelectorRange(it) {\n        var tokens = [], token;\n        var start = it.position(), end;\n\n        while (token = it.next()) {\n            if (token.type == '{')\n                break;\n            tokens.push(token);\n        }\n\n        trimWhitespaceTokens(tokens);\n\n        if (tokens.length) {\n            start = tokens[0].start;\n            end = _.last(tokens).end;\n        } else {\n            end = start;\n        }\n\n        return range(start, end - start);\n    }\n\n    /**\n     * Helper function that searches for CSS property value range next to\n     * iterator's current position\n     * @param {TokenIterator} it\n     * @returns {Range}\n     */\n    function findValueRange(it) {\n        // find value start position\n        var skipTokens = ['white', 'line', ':'];\n        var tokens = [], token, start, end;\n\n        it.nextUntil(function(tok) {\n            return !_.include(skipTokens, this.itemNext().type);\n        });\n\n        start = it.current().end;\n        // consume value\n        while (token = it.next()) {\n            if (token.type == '}' || token.type == ';') {\n                // found value end\n                trimWhitespaceTokens(tokens, WHITESPACE_REMOVE_FROM_START\n                    | (token.type == '}' ? WHITESPACE_REMOVE_FROM_END : 0));\n\n                if (tokens.length) {\n                    start = tokens[0].start;\n                    end = _.last(tokens).end;\n                } else {\n                    end = start;\n                }\n\n                return range(start, end - start);\n            }\n\n            tokens.push(token);\n        }\n\n        // reached the end of tokens list\n        if (tokens.length) {\n            return range(tokens[0].start, _.last(tokens).end - tokens[0].start);\n        }\n    }\n\n    /**\n     * Finds parts of complex CSS value\n     * @param {String} str\n     * @returns {Array} Returns list of <code>Range</code>'s\n     */\n    function findParts(str) {\n        /** @type StringStream */\n        var stream = require('stringStream').create(str);\n        var ch;\n        var result = [];\n        var sep = /[\\s\\u00a0,]/;\n\n        var add = function() {\n            stream.next();\n            result.push(range(stream.start, stream.current()));\n            stream.start = stream.pos;\n        };\n\n        // skip whitespace\n        stream.eatSpace();\n        stream.start = stream.pos;\n\n        while (ch = stream.next()) {\n            if (ch == '\"' || ch == \"'\") {\n                stream.next();\n                if (!stream.skipTo(ch)) break;\n                add();\n            } else if (ch == '(') {\n                // function found, may have nested function\n                stream.backUp(1);\n                if (!stream.skipToPair('(', ')')) break;\n                stream.backUp(1);\n                add();\n            } else {\n                if (sep.test(ch)) {\n                    result.push(range(stream.start, stream.current().length - 1));\n                    stream.eatWhile(sep);\n                    stream.start = stream.pos;\n                }\n            }\n        }\n\n        add();\n\n        return _.chain(result)\n            .filter(function(item) {\n                return !!item.length();\n            })\n            .uniq(false, function(item) {\n                return item.toString();\n            })\n            .value();\n    }\n\n    /**\n     * A bit hacky way to identify invalid CSS property definition: when user\n     * starts writing new abbreviation in CSS rule, he actually creates invalid\n     * CSS property definition and this method tries to identify such abbreviation\n     * and prevent it from being added to CSS edit tree\n     * @param {TokenIterator} it\n     */\n    function isValidIdentifier(it) {\n//\t\treturn true;\n        var tokens = it.tokens;\n        for (var i = it._i + 1, il = tokens.length; i < il; i++) {\n            if (tokens[i].type == ':')\n                return true;\n\n            if (tokens[i].type == 'identifier' || tokens[i].type == 'line')\n                return false;\n        }\n\n        return false;\n    }\n\n    /**\n     * @class\n     * @extends EditContainer\n     */\n    var CSSEditContainer = require('editTree').EditContainer.extend({\n        initialize: function(source, options) {\n            _.defaults(this.options, defaultOptions);\n            var editTree = require('editTree');\n\n            /** @type TokenIterator */\n            var it = require('tokenIterator').create(\n                require('cssParser').parse(source));\n\n            var selectorRange = findSelectorRange(it);\n            this._positions.name = selectorRange.start;\n            this._name = selectorRange.substring(source);\n\n            if (!it.current() || it.current().type != '{')\n                throw 'Invalid CSS rule';\n\n            this._positions.contentStart = it.position() + 1;\n\n            // consume properties\n            var propertyRange, valueRange, token;\n            while (token = it.next()) {\n                if (token.type == 'identifier' && isValidIdentifier(it)) {\n                    propertyRange = range(token);\n                    valueRange = findValueRange(it);\n                    var end = (it.current() && it.current().type == ';')\n                        ? range(it.current())\n                        : range(valueRange.end, 0);\n                    this._children.push(new CSSEditElement(this,\n                        editTree.createToken(propertyRange.start, propertyRange.substring(source)),\n                        editTree.createToken(valueRange.start, valueRange.substring(source)),\n                        editTree.createToken(end.start, end.substring(source))\n                    ));\n                }\n            }\n\n            this._saveStyle();\n        },\n\n        /**\n         * Remembers all styles of properties\n         * @private\n         */\n        _saveStyle: function() {\n            var start = this._positions.contentStart;\n            var source = this.source;\n            var utils = require('utils');\n\n            _.each(this.list(), /** @param {CSSEditProperty} p */ function(p) {\n                p.styleBefore = source.substring(start, p.namePosition());\n                // a small hack here:\n                // Sometimes users add empty lines before properties to logically\n                // separate groups of properties. In this case, a blind copy of\n                // characters between rules may lead to undesired behavior,\n                // especially when current rule is duplicated or used as a donor\n                // to create new rule.\n                // To solve this issue, we‘ll take only last newline indentation\n                var lines = utils.splitByLines(p.styleBefore);\n                if (lines.length > 1) {\n                    p.styleBefore = '\\n' + _.last(lines);\n                }\n\n                p.styleSeparator = source.substring(p.nameRange().end, p.valuePosition());\n\n                // graceful and naive comments removal \n                p.styleBefore = _.last(p.styleBefore.split('*/'));\n                p.styleSeparator = p.styleSeparator.replace(/\\/\\*.*?\\*\\//g, '');\n\n                start = p.range().end;\n            });\n        },\n\n        /**\n         * Adds new CSS property\n         * @param {String} name Property name\n         * @param {String} value Property value\n         * @param {Number} pos Position at which to insert new property. By\n         * default the property is inserted at the end of rule\n         * @returns {CSSEditProperty}\n         */\n        add: function(name, value, pos) {\n            var list = this.list();\n            var start = this._positions.contentStart;\n            var styles = _.pick(this.options, 'styleBefore', 'styleSeparator');\n            var editTree = require('editTree');\n\n            if (_.isUndefined(pos))\n                pos = list.length;\n\n            /** @type CSSEditProperty */\n            var donor = list[pos];\n            if (donor) {\n                start = donor.fullRange().start;\n            } else if (donor = list[pos - 1]) {\n                // make sure that donor has terminating semicolon\n                donor.end(';');\n                start = donor.range().end;\n            }\n\n            if (donor) {\n                styles = _.pick(donor, 'styleBefore', 'styleSeparator');\n            }\n\n            var nameToken = editTree.createToken(start + styles.styleBefore.length, name);\n            var valueToken = editTree.createToken(nameToken.end + styles.styleSeparator.length, value);\n\n            var property = new CSSEditElement(this, nameToken, valueToken,\n                editTree.createToken(valueToken.end, ';'));\n\n            _.extend(property, styles);\n\n            // write new property into the source\n            this._updateSource(property.styleBefore + property.toString(), start);\n\n            // insert new property\n            this._children.splice(pos, 0, property);\n            return property;\n        }\n    });\n\n    /**\n     * @class\n     * @type CSSEditElement\n     * @constructor\n     */\n    var CSSEditElement = require('editTree').EditElement.extend({\n        initialize: function(rule, name, value, end) {\n            this.styleBefore = rule.options.styleBefore;\n            this.styleSeparator = rule.options.styleSeparator;\n\n            this._end = end.value;\n            this._positions.end = end.start;\n        },\n\n        /**\n         * Returns ranges of complex value parts\n         * @returns {Array} Returns <code>null</code> if value is not complex\n         */\n        valueParts: function(isAbsolute) {\n            var parts = findParts(this.value());\n            if (isAbsolute) {\n                var offset = this.valuePosition(true);\n                _.each(parts, function(p) {\n                    p.shift(offset);\n                });\n            }\n\n            return parts;\n        },\n\n        /**\n         * Sets of gets property end value (basically, it's a semicolon)\n         * @param {String} val New end value. If not passed, current\n         * value is returned\n         */\n        end: function(val) {\n            if (!_.isUndefined(val) && this._end !== val) {\n                this.parent._updateSource(val, this._positions.end, this._positions.end + this._end.length);\n                this._end = val;\n            }\n\n            return this._end;\n        },\n\n        /**\n         * Returns full rule range, with indentation\n         * @param {Boolean} isAbsolute Return absolute range (with respect of\n         * rule offset)\n         * @returns {Range}\n         */\n        fullRange: function(isAbsolute) {\n            var r = this.range(isAbsolute);\n            r.start -= this.styleBefore.length;\n            return r;\n        },\n\n        /**\n         * Returns item string representation\n         * @returns {String}\n         */\n        toString: function() {\n            return this.name() + this.styleSeparator + this.value() + this.end();\n        }\n    });\n\n    return {\n        /**\n         * Parses CSS rule into editable tree\n         * @param {String} source\n         * @param {Object} options\n         * @memberOf emmet.cssEditTree\n         * @returns {EditContainer}\n         */\n        parse: function(source, options) {\n            return new CSSEditContainer(source, options);\n        },\n\n        /**\n         * Extract and parse CSS rule from specified position in <code>content</code>\n         * @param {String} content CSS source code\n         * @param {Number} pos Character position where to start source code extraction\n         * @returns {EditContainer}\n         */\n        parseFromPosition: function(content, pos, isBackward) {\n            var bounds = this.extractRule(content, pos, isBackward);\n            if (!bounds || !bounds.inside(pos))\n            // no matching CSS rule or caret outside rule bounds\n                return null;\n\n            return this.parse(bounds.substring(content), {\n                offset: bounds.start\n            });\n        },\n\n        /**\n         * Extracts single CSS selector definition from source code\n         * @param {String} content CSS source code\n         * @param {Number} pos Character position where to start source code extraction\n         * @returns {Range}\n         */\n        extractRule: function(content, pos, isBackward) {\n            var result = '';\n            var len = content.length;\n            var offset = pos;\n            var stopChars = '{}/\\\\<>\\n\\r';\n            var bracePos = -1, ch;\n\n            // search left until we find rule edge\n            while (offset >= 0) {\n                ch = content.charAt(offset);\n                if (ch == '{') {\n                    bracePos = offset;\n                    break;\n                }\n                else if (ch == '}' && !isBackward) {\n                    offset++;\n                    break;\n                }\n\n                offset--;\n            }\n\n            // search right for full rule set\n            while (offset < len) {\n                ch = content.charAt(offset);\n                if (ch == '{') {\n                    bracePos = offset;\n                } else if (ch == '}') {\n                    if (bracePos != -1)\n                        result = content.substring(bracePos, offset + 1);\n                    break;\n                }\n\n                offset++;\n            }\n\n            if (result) {\n                // find CSS selector\n                offset = bracePos - 1;\n                var selector = '';\n                while (offset >= 0) {\n                    ch = content.charAt(offset);\n                    if (stopChars.indexOf(ch) != -1) break;\n                    offset--;\n                }\n\n                // also trim whitespace\n                selector = content.substring(offset + 1, bracePos).replace(/^[\\s\\n\\r]+/m, '');\n                return require('range').create(bracePos - selector.length, result.length + selector.length);\n            }\n\n            return null;\n        },\n\n        /**\n         * Removes vendor prefix from CSS property\n         * @param {String} name CSS property\n         * @return {String}\n         */\n        baseName: function(name) {\n            return name.replace(/^\\s*\\-\\w+\\-/, '');\n        },\n\n        /**\n         * Finds parts of complex CSS value\n         * @param {String} str\n         * @returns {Array}\n         */\n        findParts: findParts\n    };\n});/**\n * XML EditTree is a module that can parse an XML/HTML element into a tree with\n * convenient methods for adding, modifying and removing attributes. These\n * changes can be written back to string with respect of code formatting.\n *\n * @memberOf __xmlEditTreeDefine\n * @constructor\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('xmlEditTree', function(require, _) {\n    var defaultOptions = {\n        styleBefore: ' ',\n        styleSeparator: '=',\n        styleQuote: '\"',\n        offset: 0\n    };\n\n    var startTag = /^<([\\w\\:\\-]+)((?:\\s+[\\w\\-:]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/m;\n\n    var XMLEditContainer = require('editTree').EditContainer.extend({\n        initialize: function(source, options) {\n            _.defaults(this.options, defaultOptions);\n            this._positions.name = 1;\n\n            var attrToken = null;\n            var tokens = require('xmlParser').parse(source);\n            var range = require('range');\n\n            _.each(tokens, function(token) {\n                token.value = range.create(token).substring(source);\n                switch (token.type) {\n                    case 'tag':\n                        if (/^<[^\\/]+/.test(token.value)) {\n                            this._name = token.value.substring(1);\n                        }\n                        break;\n\n                    case 'attribute':\n                        // add empty attribute\n                        if (attrToken) {\n                            this._children.push(new XMLEditElement(this, attrToken));\n                        }\n\n                        attrToken = token;\n                        break;\n\n                    case 'string':\n                        this._children.push(new XMLEditElement(this, attrToken, token));\n                        attrToken = null;\n                        break;\n                }\n            }, this);\n\n            if (attrToken) {\n                this._children.push(new XMLEditElement(this, attrToken));\n            }\n\n            this._saveStyle();\n        },\n\n        /**\n         * Remembers all styles of properties\n         * @private\n         */\n        _saveStyle: function() {\n            var start = this.nameRange().end;\n            var source = this.source;\n\n            _.each(this.list(), /** @param {EditElement} p */ function(p) {\n                p.styleBefore = source.substring(start, p.namePosition());\n\n                if (p.valuePosition() !== -1) {\n                    p.styleSeparator = source.substring(p.namePosition() + p.name().length, p.valuePosition() - p.styleQuote.length);\n                }\n\n                start = p.range().end;\n            });\n        },\n\n        /**\n         * Adds new attribute\n         * @param {String} name Property name\n         * @param {String} value Property value\n         * @param {Number} pos Position at which to insert new property. By\n         * default the property is inserted at the end of rule\n         */\n        add: function(name, value, pos) {\n            var list = this.list();\n            var start = this.nameRange().end;\n            var editTree = require('editTree');\n            var styles = _.pick(this.options, 'styleBefore', 'styleSeparator', 'styleQuote');\n\n            if (_.isUndefined(pos))\n                pos = list.length;\n\n\n            /** @type XMLEditAttribute */\n            var donor = list[pos];\n            if (donor) {\n                start = donor.fullRange().start;\n            } else if (donor = list[pos - 1]) {\n                start = donor.range().end;\n            }\n\n            if (donor) {\n                styles = _.pick(donor, 'styleBefore', 'styleSeparator', 'styleQuote');\n            }\n\n            value = styles.styleQuote + value + styles.styleQuote;\n\n            var attribute = new XMLEditElement(this,\n                editTree.createToken(start + styles.styleBefore.length, name),\n                editTree.createToken(start + styles.styleBefore.length + name.length\n                    + styles.styleSeparator.length, value)\n            );\n\n            _.extend(attribute, styles);\n\n            // write new attribute into the source\n            this._updateSource(attribute.styleBefore + attribute.toString(), start);\n\n            // insert new attribute\n            this._children.splice(pos, 0, attribute);\n            return attribute;\n        }\n    });\n\n    var XMLEditElement = require('editTree').EditElement.extend({\n        initialize: function(parent, nameToken, valueToken) {\n            this.styleBefore = parent.options.styleBefore;\n            this.styleSeparator = parent.options.styleSeparator;\n\n            var value = '', quote = parent.options.styleQuote;\n            if (valueToken) {\n                value = valueToken.value;\n                quote = value.charAt(0);\n                if (quote == '\"' || quote == \"'\") {\n                    value = value.substring(1);\n                } else {\n                    quote = '';\n                }\n\n                if (quote && value.charAt(value.length - 1) == quote) {\n                    value = value.substring(0, value.length - 1);\n                }\n            }\n\n            this.styleQuote = quote;\n\n            this._value = value;\n            this._positions.value = valueToken ? valueToken.start + quote.length : -1;\n        },\n\n        /**\n         * Returns full rule range, with indentation\n         * @param {Boolean} isAbsolute Return absolute range (with respect of\n         * rule offset)\n         * @returns {Range}\n         */\n        fullRange: function(isAbsolute) {\n            var r = this.range(isAbsolute);\n            r.start -= this.styleBefore.length;\n            return r;\n        },\n\n        toString: function() {\n            return this.name() + this.styleSeparator\n                + this.styleQuote + this.value() + this.styleQuote;\n        }\n    });\n\n    return {\n        /**\n         * Parses HTML element into editable tree\n         * @param {String} source\n         * @param {Object} options\n         * @memberOf emmet.htmlEditTree\n         * @returns {EditContainer}\n         */\n        parse: function(source, options) {\n            return new XMLEditContainer(source, options);\n        },\n\n        /**\n         * Extract and parse HTML from specified position in <code>content</code>\n         * @param {String} content CSS source code\n         * @param {Number} pos Character position where to start source code extraction\n         * @returns {XMLEditElement}\n         */\n        parseFromPosition: function(content, pos, isBackward) {\n            var bounds = this.extractTag(content, pos, isBackward);\n            if (!bounds || !bounds.inside(pos))\n            // no matching HTML tag or caret outside tag bounds\n                return null;\n\n            return this.parse(bounds.substring(content), {\n                offset: bounds.start\n            });\n        },\n\n        /**\n         * Extracts nearest HTML tag range from <code>content</code>, starting at\n         * <code>pos</code> position\n         * @param {String} content\n         * @param {Number} pos\n         * @param {Boolean} isBackward\n         * @returns {Range}\n         */\n        extractTag: function(content, pos, isBackward) {\n            var len = content.length, i;\n            var range = require('range');\n\n            // max extraction length. I don't think there may be tags larger \n            // than 2000 characters length\n            var maxLen = Math.min(2000, len);\n\n            /** @type Range */\n            var r = null;\n\n            var match = function(pos) {\n                var m;\n                if (content.charAt(pos) == '<' && (m = content.substr(pos, maxLen).match(startTag)))\n                    return range.create(pos, m[0]);\n            };\n\n            // lookup backward, in case we are inside tag already\n            for (i = pos; i >= 0; i--) {\n                if (r = match(i)) break;\n            }\n\n            if (r && (r.inside(pos) || isBackward))\n                return r;\n\n            if (!r && isBackward)\n                return null;\n\n            // search forward\n            for (i = pos; i < len; i++) {\n                if (r = match(i))\n                    return r;\n            }\n        }\n    };\n});/**\n * 'Expand abbreviation' editor action: extracts abbreviation from current caret\n * position and replaces it with formatted output.\n * <br><br>\n * This behavior can be overridden with custom handlers which can perform\n * different actions when 'Expand Abbreviation' action is called.\n * For example, a CSS gradient handler that produces vendor-prefixed gradient\n * definitions registers its own expand abbreviation handler.\n *\n * @constructor\n * @memberOf __expandAbbreviationActionDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('expandAbbreviation', function(require, _) {\n    /**\n     * @type HandlerList List of registered handlers\n     */\n    var handlers = require('handlerList').create();\n\n    /** Back-reference to module */\n    var module = null;\n\n    var actions = require('actions');\n    /**\n     * 'Expand abbreviation' editor action\n     * @param {IEmmetEditor} editor Editor instance\n     * @param {String} syntax Syntax type (html, css, etc.)\n     * @param {String} profile Output profile name (html, xml, xhtml)\n     * @return {Boolean} Returns <code>true</code> if abbreviation was expanded\n     * successfully\n     */\n    actions.add('expand_abbreviation', function(editor, syntax, profile) {\n        var args = _.toArray(arguments);\n\n        // normalize incoming arguments\n        var info = require('editorUtils').outputInfo(editor, syntax, profile);\n        args[1] = info.syntax;\n        args[2] = info.profile;\n\n        return handlers.exec(false, args);\n    });\n\n    /**\n     * A special version of <code>expandAbbreviation</code> function: if it can't\n     * find abbreviation, it will place Tab character at caret position\n     * @param {IEmmetEditor} editor Editor instance\n     * @param {String} syntax Syntax type (html, css, etc.)\n     * @param {String} profile Output profile name (html, xml, xhtml)\n     */\n    actions.add('expand_abbreviation_with_tab', function(editor, syntax, profile) {\n        var sel = editor.getSelection();\n        var indent = require('resources').getVariable('indentation');\n        if (sel) {\n            // indent selection\n            var utils = require('utils');\n            var selRange = require('range').create(editor.getSelectionRange());\n            var content = utils.padString(sel, indent);\n\n            editor.replaceContent(indent + '${0}', editor.getCaretPos());\n            var replaceRange = require('range').create(editor.getCaretPos(), selRange.length());\n            editor.replaceContent(content, replaceRange.start, replaceRange.end, true);\n            editor.createSelection(replaceRange.start, replaceRange.start + content.length);\n            return true;\n        }\n\n        if (!actions.run('expand_abbreviation', editor, syntax, profile)) {\n            editor.replaceContent(indent, editor.getCaretPos());\n        }\n\n        return true;\n    }, {hidden: true});\n\n    // XXX setup default handler\n    /**\n     * Extracts abbreviation from current caret\n     * position and replaces it with formatted output\n     * @param {IEmmetEditor} editor Editor instance\n     * @param {String} syntax Syntax type (html, css, etc.)\n     * @param {String} profile Output profile name (html, xml, xhtml)\n     * @return {Boolean} Returns <code>true</code> if abbreviation was expanded\n     * successfully\n     */\n    handlers.add(function(editor, syntax, profile) {\n        var caretPos = editor.getSelectionRange().end;\n        var abbr = module.findAbbreviation(editor);\n\n        if (abbr) {\n            var content = emmet.expandAbbreviation(abbr, syntax, profile,\n                require('actionUtils').captureContext(editor));\n            if (content) {\n                editor.replaceContent(content, caretPos - abbr.length, caretPos);\n                return true;\n            }\n        }\n\n        return false;\n    }, {order: -1});\n\n    return module = {\n        /**\n         * Adds custom expand abbreviation handler. The passed function should\n         * return <code>true</code> if it was performed successfully,\n         * <code>false</code> otherwise.\n         *\n         * Added handlers will be called when 'Expand Abbreviation' is called\n         * in order they were added\n         * @memberOf expandAbbreviation\n         * @param {Function} fn\n         * @param {Object} options\n         */\n        addHandler: function(fn, options) {\n            handlers.add(fn, options);\n        },\n\n        /**\n         * Removes registered handler\n         * @returns\n         */\n        removeHandler: function(fn) {\n            handlers.remove(fn, options);\n        },\n\n        /**\n         * Search for abbreviation in editor from current caret position\n         * @param {IEmmetEditor} editor Editor instance\n         * @return {String}\n         */\n        findAbbreviation: function(editor) {\n            /** @type Range */\n            var range = require('range').create(editor.getSelectionRange());\n            var content = String(editor.getContent());\n            if (range.length()) {\n                // abbreviation is selected by user\n                return range.substring(content);\n            }\n\n            // search for new abbreviation from current caret position\n            var curLine = editor.getCurrentLineRange();\n            return require('actionUtils').extractAbbreviation(content.substring(curLine.start, range.start));\n        }\n    };\n});/**\n * Action that wraps content with abbreviation. For convenience, action is\n * defined as reusable module\n * @constructor\n * @memberOf __wrapWithAbbreviationDefine\n */\nemmet.define('wrapWithAbbreviation', function(require, _) {\n    /** Back-references to current module */\n    var module = null;\n\n    /**\n     * Wraps content with abbreviation\n     * @param {IEmmetEditor} Editor instance\n     * @param {String} abbr Abbreviation to wrap with\n     * @param {String} syntax Syntax type (html, css, etc.)\n     * @param {String} profile Output profile name (html, xml, xhtml)\n     */\n    require('actions').add('wrap_with_abbreviation', function (editor, abbr, syntax, profile) {\n        var info = require('editorUtils').outputInfo(editor, syntax, profile);\n        var utils = require('utils');\n        /** @type emmet.editorUtils */\n        var editorUtils = require('editorUtils');\n        abbr = abbr || editor.prompt(\"Enter abbreviation\");\n\n        if (!abbr)\n            return null;\n\n        abbr = String(abbr);\n\n        var range = require('range').create(editor.getSelectionRange());\n\n        if (!range.length()) {\n            // no selection, find tag pair\n            var match = require('htmlMatcher').tag(info.content, range.start);\n            if (!match) {  // nothing to wrap\n                return false;\n            }\n\n            range = utils.narrowToNonSpace(info.content, match.range);\n        }\n\n        var newContent = utils.escapeText(range.substring(info.content));\n        var result = module\n            .wrap(abbr, editorUtils.unindent(editor, newContent), info.syntax,\n            info.profile, require('actionUtils').captureContext(editor));\n\n        if (result) {\n            editor.replaceContent(result, range.start, range.end);\n            return true;\n        }\n\n        return false;\n    });\n\n    return module = {\n        /**\n         * Wraps passed text with abbreviation. Text will be placed inside last\n         * expanded element\n         * @memberOf wrapWithAbbreviation\n         * @param {String} abbr Abbreviation\n         * @param {String} text Text to wrap\n         * @param {String} syntax Document type (html, xml, etc.). Default is 'html'\n         * @param {String} profile Output profile's name. Default is 'plain'\n         * @param {Object} contextNode Context node inside which abbreviation\n         * is wrapped. It will be used as a reference for node name resolvers\n         * @return {String}\n         */\n        wrap: function(abbr, text, syntax, profile, contextNode) {\n            /** @type emmet.filters */\n            var filters = require('filters');\n            /** @type emmet.utils */\n            var utils = require('utils');\n\n            syntax = syntax || emmet.defaultSyntax();\n            profile = require('profile').get(profile, syntax);\n\n            require('tabStops').resetTabstopIndex();\n\n            var data = filters.extractFromAbbreviation(abbr);\n            var parsedTree = require('abbreviationParser').parse(data[0], {\n                syntax: syntax,\n                pastedContent: text,\n                contextNode: contextNode\n            });\n            if (parsedTree) {\n                var filtersList = filters.composeList(syntax, profile, data[1]);\n                filters.apply(parsedTree, filtersList, profile);\n                return utils.replaceVariables(parsedTree.toString());\n            }\n\n            return null;\n        }\n    };\n});/**\n * Toggles HTML and CSS comments depending on current caret context. Unlike\n * the same action in most editors, this action toggles comment on currently\n * matched item—HTML tag or CSS selector—when nothing is selected.\n *\n * @param {Function} require\n * @param {Underscore} _\n * @memberOf __toggleCommentAction\n * @constructor\n */\nemmet.exec(function(require, _) {\n    /**\n     * Toggle HTML comment on current selection or tag\n     * @param {IEmmetEditor} editor\n     * @return {Boolean} Returns <code>true</code> if comment was toggled\n     */\n    function toggleHTMLComment(editor) {\n        /** @type Range */\n        var range = require('range').create(editor.getSelectionRange());\n        var info = require('editorUtils').outputInfo(editor);\n\n        if (!range.length()) {\n            // no selection, find matching tag\n            var tag = require('htmlMatcher').tag(info.content, editor.getCaretPos());\n            if (tag) { // found pair\n                range = tag.outerRange;\n            }\n        }\n\n        return genericCommentToggle(editor, '<!--', '-->', range);\n    }\n\n    /**\n     * Simple CSS commenting\n     * @param {IEmmetEditor} editor\n     * @return {Boolean} Returns <code>true</code> if comment was toggled\n     */\n    function toggleCSSComment(editor) {\n        /** @type Range */\n        var range = require('range').create(editor.getSelectionRange());\n        var info = require('editorUtils').outputInfo(editor);\n\n        if (!range.length()) {\n            // no selection, try to get current rule\n            /** @type CSSRule */\n            var rule = require('cssEditTree').parseFromPosition(info.content, editor.getCaretPos());\n            if (rule) {\n                var property = cssItemFromPosition(rule, editor.getCaretPos());\n                range = property\n                    ? property.range(true)\n                    : require('range').create(rule.nameRange(true).start, rule.source);\n            }\n        }\n\n        if (!range.length()) {\n            // still no selection, get current line\n            range = require('range').create(editor.getCurrentLineRange());\n            require('utils').narrowToNonSpace(info.content, range);\n        }\n\n        return genericCommentToggle(editor, '/*', '*/', range);\n    }\n\n    /**\n     * Returns CSS property from <code>rule</code> that matches passed position\n     * @param {EditContainer} rule\n     * @param {Number} absPos\n     * @returns {EditElement}\n     */\n    function cssItemFromPosition(rule, absPos) {\n        // do not use default EditContainer.itemFromPosition() here, because\n        // we need to make a few assumptions to make CSS commenting more reliable\n        var relPos = absPos - (rule.options.offset || 0);\n        var reSafeChar = /^[\\s\\n\\r]/;\n        return _.find(rule.list(), function(item) {\n            if (item.range().end === relPos) {\n                // at the end of property, but outside of it\n                // if there’s a space character at current position,\n                // use current property\n                return reSafeChar.test(rule.source.charAt(relPos));\n            }\n\n            return item.range().inside(relPos);\n        });\n    }\n\n    /**\n     * Search for nearest comment in <code>str</code>, starting from index <code>from</code>\n     * @param {String} text Where to search\n     * @param {Number} from Search start index\n     * @param {String} start_token Comment start string\n     * @param {String} end_token Comment end string\n     * @return {Range} Returns null if comment wasn't found\n     */\n    function searchComment(text, from, startToken, endToken) {\n        var commentStart = -1;\n        var commentEnd = -1;\n\n        var hasMatch = function(str, start) {\n            return text.substr(start, str.length) == str;\n        };\n\n        // search for comment start\n        while (from--) {\n            if (hasMatch(startToken, from)) {\n                commentStart = from;\n                break;\n            }\n        }\n\n        if (commentStart != -1) {\n            // search for comment end\n            from = commentStart;\n            var contentLen = text.length;\n            while (contentLen >= from++) {\n                if (hasMatch(endToken, from)) {\n                    commentEnd = from + endToken.length;\n                    break;\n                }\n            }\n        }\n\n        return (commentStart != -1 && commentEnd != -1)\n            ? require('range').create(commentStart, commentEnd - commentStart)\n            : null;\n    }\n\n    /**\n     * Generic comment toggling routine\n     * @param {IEmmetEditor} editor\n     * @param {String} commentStart Comment start token\n     * @param {String} commentEnd Comment end token\n     * @param {Range} range Selection range\n     * @return {Boolean}\n     */\n    function genericCommentToggle(editor, commentStart, commentEnd, range) {\n        var editorUtils = require('editorUtils');\n        var content = editorUtils.outputInfo(editor).content;\n        var caretPos = editor.getCaretPos();\n        var newContent = null;\n\n        var utils = require('utils');\n\n        /**\n         * Remove comment markers from string\n         * @param {Sting} str\n         * @return {String}\n         */\n        function removeComment(str) {\n            return str\n                .replace(new RegExp('^' + utils.escapeForRegexp(commentStart) + '\\\\s*'), function(str){\n                    caretPos -= str.length;\n                    return '';\n                }).replace(new RegExp('\\\\s*' + utils.escapeForRegexp(commentEnd) + '$'), '');\n        }\n\n        // first, we need to make sure that this substring is not inside \n        // comment\n        var commentRange = searchComment(content, caretPos, commentStart, commentEnd);\n        if (commentRange && commentRange.overlap(range)) {\n            // we're inside comment, remove it\n            range = commentRange;\n            newContent = removeComment(range.substring(content));\n        } else {\n            // should add comment\n            // make sure that there's no comment inside selection\n            newContent = commentStart + ' ' +\n                range.substring(content)\n                    .replace(new RegExp(utils.escapeForRegexp(commentStart) + '\\\\s*|\\\\s*' + utils.escapeForRegexp(commentEnd), 'g'), '') +\n                ' ' + commentEnd;\n\n            // adjust caret position\n            caretPos += commentStart.length + 1;\n        }\n\n        // replace editor content\n        if (newContent !== null) {\n            newContent = utils.escapeText(newContent);\n            editor.setCaretPos(range.start);\n            editor.replaceContent(editorUtils.unindent(editor, newContent), range.start, range.end);\n            editor.setCaretPos(caretPos);\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Toggle comment on current editor's selection or HTML tag/CSS rule\n     * @param {IEmmetEditor} editor\n     */\n    require('actions').add('toggle_comment', function(editor) {\n        var info = require('editorUtils').outputInfo(editor);\n        if (info.syntax == 'css') {\n            // in case our editor is good enough and can recognize syntax from \n            // current token, we have to make sure that cursor is not inside\n            // 'style' attribute of html element\n            var caretPos = editor.getCaretPos();\n            var tag = require('htmlMatcher').tag(info.content, caretPos);\n            if (tag && tag.open.range.inside(caretPos)) {\n                info.syntax = 'html';\n            }\n        }\n\n        if (info.syntax == 'css')\n            return toggleCSSComment(editor);\n\n        return toggleHTMLComment(editor);\n    });\n});/**\n * Move between next/prev edit points. 'Edit points' are places between tags\n * and quotes of empty attributes in html\n * @constructor\n *\n * @memberOf __editPointActionDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    /**\n     * Search for new caret insertion point\n     * @param {IEmmetEditor} editor Editor instance\n     * @param {Number} inc Search increment: -1 — search left, 1 — search right\n     * @param {Number} offset Initial offset relative to current caret position\n     * @return {Number} Returns -1 if insertion point wasn't found\n     */\n    function findNewEditPoint(editor, inc, offset) {\n        inc = inc || 1;\n        offset = offset || 0;\n\n        var curPoint = editor.getCaretPos() + offset;\n        var content = String(editor.getContent());\n        var maxLen = content.length;\n        var nextPoint = -1;\n        var reEmptyLine = /^\\s+$/;\n\n        function getLine(ix) {\n            var start = ix;\n            while (start >= 0) {\n                var c = content.charAt(start);\n                if (c == '\\n' || c == '\\r')\n                    break;\n                start--;\n            }\n\n            return content.substring(start, ix);\n        }\n\n        while (curPoint <= maxLen && curPoint >= 0) {\n            curPoint += inc;\n            var curChar = content.charAt(curPoint);\n            var nextChar = content.charAt(curPoint + 1);\n            var prevChar = content.charAt(curPoint - 1);\n\n            switch (curChar) {\n                case '\"':\n                case '\\'':\n                    if (nextChar == curChar && prevChar == '=') {\n                        // empty attribute\n                        nextPoint = curPoint + 1;\n                    }\n                    break;\n                case '>':\n                    if (nextChar == '<') {\n                        // between tags\n                        nextPoint = curPoint + 1;\n                    }\n                    break;\n                case '\\n':\n                case '\\r':\n                    // empty line\n                    if (reEmptyLine.test(getLine(curPoint - 1))) {\n                        nextPoint = curPoint;\n                    }\n                    break;\n            }\n\n            if (nextPoint != -1)\n                break;\n        }\n\n        return nextPoint;\n    }\n\n    /** @type emmet.actions */\n    var actions = require('actions');\n\n    /**\n     * Move caret to previous edit point\n     * @param {IEmmetEditor} editor Editor instance\n     */\n    actions.add('prev_edit_point', function(editor) {\n        var curPos = editor.getCaretPos();\n        var newPoint = findNewEditPoint(editor, -1);\n\n        if (newPoint == curPos)\n        // we're still in the same point, try searching from the other place\n            newPoint = findNewEditPoint(editor, -1, -2);\n\n        if (newPoint != -1) {\n            editor.setCaretPos(newPoint);\n            return true;\n        }\n\n        return false;\n    }, {label: 'Previous Edit Point'});\n\n    /**\n     * Move caret to next edit point\n     * @param {IEmmetEditor} editor Editor instance\n     */\n    actions.add('next_edit_point', function(editor) {\n        var newPoint = findNewEditPoint(editor, 1);\n        if (newPoint != -1) {\n            editor.setCaretPos(newPoint);\n            return true;\n        }\n\n        return false;\n    });\n});/**\n * Actions that use stream parsers and tokenizers for traversing:\n * -- Search for next/previous items in HTML\n * -- Search for next/previous items in CSS\n * @constructor\n * @memberOf __selectItemActionDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    var startTag = /^<([\\w\\:\\-]+)((?:\\s+[\\w\\-:]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/;\n\n    /**\n     * Generic function for searching for items to select\n     * @param {IEmmetEditor} editor\n     * @param {Boolean} isBackward Search backward (search forward otherwise)\n     * @param {Function} extractFn Function that extracts item content\n     * @param {Function} rangeFn Function that search for next token range\n     */\n    function findItem(editor, isBackward, extractFn, rangeFn) {\n        var range = require('range');\n        var content = require('editorUtils').outputInfo(editor).content;\n\n        var contentLength = content.length;\n        var itemRange, rng;\n        /** @type Range */\n        var prevRange = range.create(-1, 0);\n        /** @type Range */\n        var sel = range.create(editor.getSelectionRange());\n\n        var searchPos = sel.start, loop = 100000; // endless loop protection\n        while (searchPos >= 0 && searchPos < contentLength && --loop > 0) {\n            if ( (itemRange = extractFn(content, searchPos, isBackward)) ) {\n                if (prevRange.equal(itemRange)) {\n                    break;\n                }\n\n                prevRange = itemRange.clone();\n                rng = rangeFn(itemRange.substring(content), itemRange.start, sel.clone());\n\n                if (rng) {\n                    editor.createSelection(rng.start, rng.end);\n                    return true;\n                } else {\n                    searchPos = isBackward ? itemRange.start : itemRange.end - 1;\n                }\n            }\n\n            searchPos += isBackward ? -1 : 1;\n        }\n\n        return false;\n    }\n\n    // XXX HTML section\n\n    /**\n     * Find next HTML item\n     * @param {IEmmetEditor} editor\n     */\n    function findNextHTMLItem(editor) {\n        var isFirst = true;\n        return findItem(editor, false, function(content, searchPos){\n            if (isFirst) {\n                isFirst = false;\n                return findOpeningTagFromPosition(content, searchPos);\n            } else {\n                return getOpeningTagFromPosition(content, searchPos);\n            }\n        }, function(tag, offset, selRange) {\n            return getRangeForHTMLItem(tag, offset, selRange, false);\n        });\n    }\n\n    /**\n     * Find previous HTML item\n     * @param {IEmmetEditor} editor\n     */\n    function findPrevHTMLItem(editor) {\n        return findItem(editor, true, getOpeningTagFromPosition, function (tag, offset, selRange) {\n            return getRangeForHTMLItem(tag, offset, selRange, true);\n        });\n    }\n\n    /**\n     * Creates possible selection ranges for HTML tag\n     * @param {String} source Original HTML source for tokens\n     * @param {Array} tokens List of HTML tokens\n     * @returns {Array}\n     */\n    function makePossibleRangesHTML(source, tokens, offset) {\n        offset = offset || 0;\n        var range = require('range');\n        var result = [];\n        var attrStart = -1, attrName = '', attrValue = '', attrValueRange, tagName;\n        _.each(tokens, function(tok) {\n            switch (tok.type) {\n                case 'tag':\n                    tagName = source.substring(tok.start, tok.end);\n                    if (/^<[\\w\\:\\-]/.test(tagName)) {\n                        // add tag name\n                        result.push(range.create({\n                            start: tok.start + 1,\n                            end: tok.end\n                        }));\n                    }\n                    break;\n                case 'attribute':\n                    attrStart = tok.start;\n                    attrName = source.substring(tok.start, tok.end);\n                    break;\n\n                case 'string':\n                    // attribute value\n                    // push full attribute first\n                    result.push(range.create(attrStart, tok.end - attrStart));\n\n                    attrValueRange = range.create(tok);\n                    attrValue = attrValueRange.substring(source);\n\n                    // is this a quoted attribute?\n                    if (isQuote(attrValue.charAt(0)))\n                        attrValueRange.start++;\n\n                    if (isQuote(attrValue.charAt(attrValue.length - 1)))\n                        attrValueRange.end--;\n\n                    result.push(attrValueRange);\n\n                    if (attrName == 'class') {\n                        result = result.concat(classNameRanges(attrValueRange.substring(source), attrValueRange.start));\n                    }\n\n                    break;\n            }\n        });\n\n        // offset ranges\n        _.each(result, function(r) {\n            r.shift(offset);\n        });\n\n        return _.chain(result)\n            .filter(function(item) {        // remove empty\n                return !!item.length();\n            })\n            .uniq(false, function(item) {   // remove duplicates\n                return item.toString();\n            })\n            .value();\n    }\n\n    /**\n     * Returns ranges of class names in \"class\" attribute value\n     * @param {String} className\n     * @returns {Array}\n     */\n    function classNameRanges(className, offset) {\n        offset = offset || 0;\n        var result = [];\n        /** @type StringStream */\n        var stream = require('stringStream').create(className);\n        var range = require('range');\n\n        // skip whitespace\n        stream.eatSpace();\n        stream.start = stream.pos;\n\n        var ch;\n        while (ch = stream.next()) {\n            if (/[\\s\\u00a0]/.test(ch)) {\n                result.push(range.create(stream.start + offset, stream.pos - stream.start - 1));\n                stream.eatSpace();\n                stream.start = stream.pos;\n            }\n        }\n\n        result.push(range.create(stream.start + offset, stream.pos - stream.start));\n        return result;\n    }\n\n    /**\n     * Returns best HTML tag range match for current selection\n     * @param {String} tag Tag declaration\n     * @param {Number} offset Tag's position index inside content\n     * @param {Range} selRange Selection range\n     * @return {Range} Returns range if next item was found, <code>null</code> otherwise\n     */\n    function getRangeForHTMLItem(tag, offset, selRange, isBackward) {\n        var ranges = makePossibleRangesHTML(tag, require('xmlParser').parse(tag), offset);\n\n        if (isBackward)\n            ranges.reverse();\n\n        // try to find selected range\n        var curRange = _.find(ranges, function(r) {\n            return r.equal(selRange);\n        });\n\n        if (curRange) {\n            var ix = _.indexOf(ranges, curRange);\n            if (ix < ranges.length - 1)\n                return ranges[ix + 1];\n\n            return null;\n        }\n\n        // no selected range, find nearest one\n        if (isBackward)\n        // search backward\n            return _.find(ranges, function(r) {\n                return r.start < selRange.start;\n            });\n\n        // search forward\n        // to deal with overlapping ranges (like full attribute definition\n        // and attribute value) let's find range under caret first\n        if (!curRange) {\n            var matchedRanges = _.filter(ranges, function(r) {\n                return r.inside(selRange.end);\n            });\n\n            if (matchedRanges.length > 1)\n                return matchedRanges[1];\n        }\n\n\n        return _.find(ranges, function(r) {\n            return r.end > selRange.end;\n        });\n    }\n\n    /**\n     * Search for opening tag in content, starting at specified position\n     * @param {String} html Where to search tag\n     * @param {Number} pos Character index where to start searching\n     * @return {Range} Returns range if valid opening tag was found,\n     * <code>null</code> otherwise\n     */\n    function findOpeningTagFromPosition(html, pos) {\n        var tag;\n        while (pos >= 0) {\n            if (tag = getOpeningTagFromPosition(html, pos))\n                return tag;\n            pos--;\n        }\n\n        return null;\n    }\n\n    /**\n     * @param {String} html Where to search tag\n     * @param {Number} pos Character index where to start searching\n     * @return {Range} Returns range if valid opening tag was found,\n     * <code>null</code> otherwise\n     */\n    function getOpeningTagFromPosition(html, pos) {\n        var m;\n        if (html.charAt(pos) == '<' && (m = html.substring(pos, html.length).match(startTag))) {\n            return require('range').create(pos, m[0]);\n        }\n    }\n\n    function isQuote(ch) {\n        return ch == '\"' || ch == \"'\";\n    }\n\n    /**\n     * Makes all possible selection ranges for specified CSS property\n     * @param {CSSProperty} property\n     * @returns {Array}\n     */\n    function makePossibleRangesCSS(property) {\n        // find all possible ranges, sorted by position and size\n        var valueRange = property.valueRange(true);\n        var result = [property.range(true), valueRange];\n        var stringStream = require('stringStream');\n        var cssEditTree = require('cssEditTree');\n        var range = require('range');\n\n        // locate parts of complex values.\n        // some examples:\n        // – 1px solid red: 3 parts\n        // – arial, sans-serif: enumeration, 2 parts\n        // – url(image.png): function value part\n        var value = property.value();\n        _.each(property.valueParts(), function(r) {\n            // add absolute range\n            var clone = r.clone();\n            result.push(clone.shift(valueRange.start));\n\n            /** @type StringStream */\n            var stream = stringStream.create(r.substring(value));\n            if (stream.match(/^[\\w\\-]+\\(/, true)) {\n                // we have a function, find values in it.\n                // but first add function contents\n                stream.start = stream.pos;\n                stream.skipToPair('(', ')');\n                var fnBody = stream.current();\n                result.push(range.create(clone.start + stream.start, fnBody));\n\n                // find parts\n                _.each(cssEditTree.findParts(fnBody), function(part) {\n                    result.push(range.create(clone.start + stream.start + part.start, part.substring(fnBody)));\n                });\n            }\n        });\n\n        // optimize result: remove empty ranges and duplicates\n        return _.chain(result)\n            .filter(function(item) {\n                return !!item.length();\n            })\n            .uniq(false, function(item) {\n                return item.toString();\n            })\n            .value();\n    }\n\n    /**\n     * Tries to find matched CSS property and nearest range for selection\n     * @param {CSSRule} rule\n     * @param {Range} selRange\n     * @param {Boolean} isBackward\n     * @returns {Range}\n     */\n    function matchedRangeForCSSProperty(rule, selRange, isBackward) {\n        /** @type CSSProperty */\n        var property = null;\n        var possibleRanges, curRange = null, ix;\n        var list = rule.list();\n        var searchFn, nearestItemFn;\n\n        if (isBackward) {\n            list.reverse();\n            searchFn = function(p) {\n                return p.range(true).start <= selRange.start;\n            };\n            nearestItemFn = function(r) {\n                return r.start < selRange.start;\n            };\n        } else {\n            searchFn = function(p) {\n                return p.range(true).end >= selRange.end;\n            };\n            nearestItemFn = function(r) {\n                return r.end > selRange.start;\n            };\n        }\n\n        // search for nearest to selection CSS property\n        while (property = _.find(list, searchFn)) {\n            possibleRanges = makePossibleRangesCSS(property);\n            if (isBackward)\n                possibleRanges.reverse();\n\n            // check if any possible range is already selected\n            curRange = _.find(possibleRanges, function(r) {\n                return r.equal(selRange);\n            });\n\n            if (!curRange) {\n                // no selection, select nearest item\n                var matchedRanges = _.filter(possibleRanges, function(r) {\n                    return r.inside(selRange.end);\n                });\n\n                if (matchedRanges.length > 1) {\n                    curRange = matchedRanges[1];\n                    break;\n                }\n\n                if (curRange = _.find(possibleRanges, nearestItemFn))\n                    break;\n            } else {\n                ix = _.indexOf(possibleRanges, curRange);\n                if (ix != possibleRanges.length - 1) {\n                    curRange = possibleRanges[ix + 1];\n                    break;\n                }\n            }\n\n            curRange = null;\n            selRange.start = selRange.end = isBackward\n                ? property.range(true).start - 1\n                : property.range(true).end + 1;\n        }\n\n        return curRange;\n    }\n\n    function findNextCSSItem(editor) {\n        return findItem(editor, false, require('cssEditTree').extractRule, getRangeForNextItemInCSS);\n    }\n\n    function findPrevCSSItem(editor) {\n        return findItem(editor, true, require('cssEditTree').extractRule, getRangeForPrevItemInCSS);\n    }\n\n    /**\n     * Returns range for item to be selected in CSS after current caret\n     * (selection) position\n     * @param {String} rule CSS rule declaration\n     * @param {Number} offset Rule's position index inside content\n     * @param {Range} selRange Selection range\n     * @return {Range} Returns range if next item was found, <code>null</code> otherwise\n     */\n    function getRangeForNextItemInCSS(rule, offset, selRange) {\n        var tree = require('cssEditTree').parse(rule, {\n            offset: offset\n        });\n\n        // check if selector is matched\n        var range = tree.nameRange(true);\n        if (selRange.end < range.end) {\n            return range;\n        }\n\n        return matchedRangeForCSSProperty(tree, selRange, false);\n    }\n\n    /**\n     * Returns range for item to be selected in CSS before current caret\n     * (selection) position\n     * @param {String} rule CSS rule declaration\n     * @param {Number} offset Rule's position index inside content\n     * @param {Range} selRange Selection range\n     * @return {Range} Returns range if previous item was found, <code>null</code> otherwise\n     */\n    function getRangeForPrevItemInCSS(rule, offset, selRange) {\n        var tree = require('cssEditTree').parse(rule, {\n            offset: offset\n        });\n\n        var curRange = matchedRangeForCSSProperty(tree, selRange, true);\n\n        if (!curRange) {\n            // no matched property, try to match selector\n            var range = tree.nameRange(true);\n            if (selRange.start > range.start) {\n                return range;\n            }\n        }\n\n        return curRange;\n    }\n\n    // XXX register actions\n    var actions = require('actions');\n    actions.add('select_next_item', function(editor){\n        if (editor.getSyntax() == 'css')\n            return findNextCSSItem(editor);\n        else\n            return findNextHTMLItem(editor);\n    });\n\n    actions.add('select_previous_item', function(editor){\n        if (editor.getSyntax() == 'css')\n            return findPrevCSSItem(editor);\n        else\n            return findPrevHTMLItem(editor);\n    });\n});/**\n * HTML pair matching (balancing) actions\n * @constructor\n * @memberOf __matchPairActionDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    /** @type emmet.actions */\n    var actions = require('actions');\n    var matcher = require('htmlMatcher');\n    var lastMatch = null;\n\n    /**\n     * Find and select HTML tag pair\n     * @param {IEmmetEditor} editor Editor instance\n     * @param {String} direction Direction of pair matching: 'in' or 'out'.\n     * Default is 'out'\n     */\n    function matchPair(editor, direction) {\n        direction = String((direction || 'out').toLowerCase());\n        var info = require('editorUtils').outputInfo(editor);\n\n        var range = require('range');\n        /** @type Range */\n        var sel = range.create(editor.getSelectionRange());\n        var content = info.content;\n\n        // validate previous match\n        if (lastMatch && !lastMatch.range.equal(sel)) {\n            lastMatch = null;\n        }\n\n        if (lastMatch && sel.length()) {\n            if (direction == 'in') {\n                // user has previously selected tag and wants to move inward\n                if (lastMatch.type == 'tag' && !lastMatch.close) {\n                    // unary tag was selected, can't move inward\n                    return false;\n                } else {\n                    if (lastMatch.range.equal(lastMatch.outerRange)) {\n                        lastMatch.range = lastMatch.innerRange;\n                    } else {\n                        var narrowed = require('utils').narrowToNonSpace(content, lastMatch.innerRange);\n                        lastMatch = matcher.find(content, narrowed.start + 1);\n                        if (lastMatch && lastMatch.range.equal(sel) && lastMatch.outerRange.equal(sel)) {\n                            lastMatch.range = lastMatch.innerRange;\n                        }\n                    }\n                }\n            } else {\n                if (\n                    !lastMatch.innerRange.equal(lastMatch.outerRange)\n                    && lastMatch.range.equal(lastMatch.innerRange)\n                    && sel.equal(lastMatch.range)) {\n                    lastMatch.range = lastMatch.outerRange;\n                } else {\n                    lastMatch = matcher.find(content, sel.start);\n                    if (lastMatch && lastMatch.range.equal(sel) && lastMatch.innerRange.equal(sel)) {\n                        lastMatch.range = lastMatch.outerRange;\n                    }\n                }\n            }\n        } else {\n            lastMatch = matcher.find(content, sel.start);\n        }\n\n        if (lastMatch && !lastMatch.range.equal(sel)) {\n            editor.createSelection(lastMatch.range.start, lastMatch.range.end);\n            return true;\n        }\n\n        lastMatch = null;\n        return false;\n    }\n\n    actions.add('match_pair', matchPair, {hidden: true});\n    actions.add('match_pair_inward', function(editor){\n        return matchPair(editor, 'in');\n    }, {label: 'HTML/Match Pair Tag (inward)'});\n\n    actions.add('match_pair_outward', function(editor){\n        return matchPair(editor, 'out');\n    }, {label: 'HTML/Match Pair Tag (outward)'});\n\n    /**\n     * Moves caret to matching opening or closing tag\n     * @param {IEmmetEditor} editor\n     */\n    actions.add('matching_pair', function(editor) {\n        var content = String(editor.getContent());\n        var caretPos = editor.getCaretPos();\n\n        if (content.charAt(caretPos) == '<')\n        // looks like caret is outside of tag pair  \n            caretPos++;\n\n        var tag = matcher.tag(content, caretPos);\n        if (tag && tag.close) { // exclude unary tags\n            if (tag.open.range.inside(caretPos)) {\n                editor.setCaretPos(tag.close.range.start);\n            } else {\n                editor.setCaretPos(tag.open.range.start);\n            }\n\n            return true;\n        }\n\n        return false;\n    }, {label: 'HTML/Go To Matching Tag Pair'});\n});/**\n * Gracefully removes tag under cursor\n *\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    require('actions').add('remove_tag', function(editor) {\n        var utils = require('utils');\n        var info = require('editorUtils').outputInfo(editor);\n\n        // search for tag\n        var tag = require('htmlMatcher').tag(info.content, editor.getCaretPos());\n        if (tag) {\n            if (!tag.close) {\n                // simply remove unary tag\n                editor.replaceContent(utils.getCaretPlaceholder(), tag.range.start, tag.range.end);\n            } else {\n                // remove tag and its newlines\n                /** @type Range */\n                var tagContentRange = utils.narrowToNonSpace(info.content, tag.innerRange);\n                /** @type Range */\n                var startLineBounds = utils.findNewlineBounds(info.content, tagContentRange.start);\n                var startLinePad = utils.getLinePadding(startLineBounds.substring(info.content));\n                var tagContent = tagContentRange.substring(info.content);\n\n                tagContent = utils.unindentString(tagContent, startLinePad);\n                editor.replaceContent(utils.getCaretPlaceholder() + utils.escapeText(tagContent), tag.outerRange.start, tag.outerRange.end);\n            }\n\n            return true;\n        }\n\n        return false;\n    }, {label: 'HTML/Remove Tag'});\n});\n/**\n * Splits or joins tag, e.g. transforms it into a short notation and vice versa:<br>\n * &lt;div&gt;&lt;/div&gt; → &lt;div /&gt; : join<br>\n * &lt;div /&gt; → &lt;div&gt;&lt;/div&gt; : split\n * @param {Function} require\n * @param {Underscore} _\n * @memberOf __splitJoinTagAction\n * @constructor\n */\nemmet.exec(function(require, _) {\n    /**\n     * @param {IEmmetEditor} editor\n     * @param {Object} profile\n     * @param {Object} tag\n     */\n    function joinTag(editor, profile, tag) {\n        /** @type emmet.utils */\n        var utils = require('utils');\n\n        // empty closing slash is a nonsense for this action\n        var slash = profile.selfClosing() || ' /';\n        var content = tag.open.range.substring(tag.source).replace(/\\s*>$/, slash + '>');\n\n        var caretPos = editor.getCaretPos();\n\n        // update caret position\n        if (content.length + tag.outerRange.start < caretPos) {\n            caretPos = content.length + tag.outerRange.start;\n        }\n\n        content = utils.escapeText(content);\n        editor.replaceContent(content, tag.outerRange.start, tag.outerRange.end);\n        editor.setCaretPos(caretPos);\n        return true;\n    }\n\n    function splitTag(editor, profile, tag) {\n        /** @type emmet.utils */\n        var utils = require('utils');\n\n        var nl = utils.getNewline();\n        var pad = require('resources').getVariable('indentation');\n        var caretPos = editor.getCaretPos();\n\n        // define tag content depending on profile\n        var tagContent = (profile.tag_nl === true) ? nl + pad + nl : '';\n        var content = tag.outerContent().replace(/\\s*\\/>$/, '>');\n        caretPos = tag.outerRange.start + content.length;\n        content += tagContent + '</' + tag.open.name + '>';\n\n        content = utils.escapeText(content);\n        editor.replaceContent(content, tag.outerRange.start, tag.outerRange.end);\n        editor.setCaretPos(caretPos);\n        return true;\n    }\n\n    require('actions').add('split_join_tag', function(editor, profileName) {\n        var matcher = require('htmlMatcher');\n\n        var info = require('editorUtils').outputInfo(editor, null, profileName);\n        var profile = require('profile').get(info.profile);\n\n        // find tag at current position\n        var tag = matcher.tag(info.content, editor.getCaretPos());\n        if (tag) {\n            return tag.close\n                ? joinTag(editor, profile, tag)\n                : splitTag(editor, profile, tag);\n        }\n\n        return false;\n    }, {label: 'HTML/Split\\\\Join Tag Declaration'});\n});/**\n * Reflect CSS value: takes rule's value under caret and pastes it for the same\n * rules with vendor prefixes\n * @constructor\n * @memberOf __reflectCSSActionDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('reflectCSSValue', function(require, _) {\n    /**\n     * @type HandlerList List of registered handlers\n     */\n    var handlers = require('handlerList').create();\n\n    require('actions').add('reflect_css_value', function(editor) {\n        if (editor.getSyntax() != 'css') return false;\n\n        return require('actionUtils').compoundUpdate(editor, doCSSReflection(editor));\n    }, {label: 'CSS/Reflect Value'});\n\n    function doCSSReflection(editor) {\n        /** @type emmet.cssEditTree */\n        var cssEditTree = require('cssEditTree');\n        var outputInfo = require('editorUtils').outputInfo(editor);\n        var caretPos = editor.getCaretPos();\n\n        var cssRule = cssEditTree.parseFromPosition(outputInfo.content, caretPos);\n        if (!cssRule) return;\n\n        var property = cssRule.itemFromPosition(caretPos, true);\n        // no property under cursor, nothing to reflect\n        if (!property) return;\n\n        var oldRule = cssRule.source;\n        var offset = cssRule.options.offset;\n        var caretDelta = caretPos - offset - property.range().start;\n\n        handlers.exec(false, [property]);\n\n        if (oldRule !== cssRule.source) {\n            return {\n                data:  cssRule.source,\n                start: offset,\n                end:   offset + oldRule.length,\n                caret: offset + property.range().start + caretDelta\n            };\n        }\n    }\n\n    /**\n     * Returns regexp that should match reflected CSS property names\n     * @param {String} name Current CSS property name\n     * @return {RegExp}\n     */\n    function getReflectedCSSName(name) {\n        name = require('cssEditTree').baseName(name);\n        var vendorPrefix = '^(?:\\\\-\\\\w+\\\\-)?', m;\n\n        if (name == 'opacity' || name == 'filter') {\n            return new RegExp(vendorPrefix + '(?:opacity|filter)$');\n        } else if (m = name.match(/^border-radius-(top|bottom)(left|right)/)) {\n            // Mozilla-style border radius\n            return new RegExp(vendorPrefix + '(?:' + name + '|border-' + m[1] + '-' + m[2] + '-radius)$');\n        } else if (m = name.match(/^border-(top|bottom)-(left|right)-radius/)) {\n            return new RegExp(vendorPrefix + '(?:' + name + '|border-radius-' + m[1] + m[2] + ')$');\n        }\n\n        return new RegExp(vendorPrefix + name + '$');\n    }\n\n    /**\n     * Reflects value from <code>donor</code> into <code>receiver</code>\n     * @param {CSSProperty} donor Donor CSS property from which value should\n     * be reflected\n     * @param {CSSProperty} receiver Property that should receive reflected\n     * value from donor\n     */\n    function reflectValue(donor, receiver) {\n        var value = getReflectedValue(donor.name(), donor.value(),\n            receiver.name(), receiver.value());\n\n        receiver.value(value);\n    }\n\n    /**\n     * Returns value that should be reflected for <code>refName</code> CSS property\n     * from <code>curName</code> property. This function is used for special cases,\n     * when the same result must be achieved with different properties for different\n     * browsers. For example: opаcity:0.5; → filter:alpha(opacity=50);<br><br>\n     *\n     * This function does value conversion between different CSS properties\n     *\n     * @param {String} curName Current CSS property name\n     * @param {String} curValue Current CSS property value\n     * @param {String} refName Receiver CSS property's name\n     * @param {String} refValue Receiver CSS property's value\n     * @return {String} New value for receiver property\n     */\n    function getReflectedValue(curName, curValue, refName, refValue) {\n        var cssEditTree = require('cssEditTree');\n        var utils = require('utils');\n        curName = cssEditTree.baseName(curName);\n        refName = cssEditTree.baseName(refName);\n\n        if (curName == 'opacity' && refName == 'filter') {\n            return refValue.replace(/opacity=[^)]*/i, 'opacity=' + Math.floor(parseFloat(curValue) * 100));\n        } else if (curName == 'filter' && refName == 'opacity') {\n            var m = curValue.match(/opacity=([^)]*)/i);\n            return m ? utils.prettifyNumber(parseInt(m[1]) / 100) : refValue;\n        }\n\n        return curValue;\n    }\n\n    // XXX add default handler\n    handlers.add(function(property) {\n        var reName = getReflectedCSSName(property.name());\n        _.each(property.parent.list(), function(p) {\n            if (reName.test(p.name())) {\n                reflectValue(property, p);\n            }\n        });\n    }, {order: -1});\n\n    return {\n        /**\n         * Adds custom reflect handler. The passed function will receive matched\n         * CSS property (as <code>CSSEditElement</code> object) and should\n         * return <code>true</code> if it was performed successfully (handled\n         * reflection), <code>false</code> otherwise.\n         * @param {Function} fn\n         * @param {Object} options\n         */\n        addHandler: function(fn, options) {\n            handlers.add(fn, options);\n        },\n\n        /**\n         * Removes registered handler\n         * @returns\n         */\n        removeHandler: function(fn) {\n            handlers.remove(fn, options);\n        }\n    };\n});/**\n * Evaluates simple math expression under caret\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    require('actions').add('evaluate_math_expression', function(editor) {\n        var actionUtils = require('actionUtils');\n        var utils = require('utils');\n\n        var content = String(editor.getContent());\n        var chars = '.+-*/\\\\';\n\n        /** @type Range */\n        var sel = require('range').create(editor.getSelectionRange());\n        if (!sel.length()) {\n            sel = actionUtils.findExpressionBounds(editor, function(ch) {\n                return utils.isNumeric(ch) || chars.indexOf(ch) != -1;\n            });\n        }\n\n        if (sel && sel.length()) {\n            var expr = sel.substring(content);\n\n            // replace integral division: 11\\2 => Math.round(11/2) \n            expr = expr.replace(/([\\d\\.\\-]+)\\\\([\\d\\.\\-]+)/g, 'Math.round($1/$2)');\n\n            try {\n                var result = utils.prettifyNumber(new Function('return ' + expr)());\n                editor.replaceContent(result, sel.start, sel.end);\n                editor.setCaretPos(sel.start + result.length);\n                return true;\n            } catch (e) {}\n        }\n\n        return false;\n    }, {label: 'Numbers/Evaluate Math Expression'});\n});\n/**\n * Increment/decrement number under cursor\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    /**\n     * Extract number from current caret position of the <code>editor</code> and\n     * increment it by <code>step</code>\n     * @param {IEmmetEditor} editor\n     * @param {Number} step Increment step (may be negative)\n     */\n    function incrementNumber(editor, step) {\n        var utils = require('utils');\n        var actionUtils = require('actionUtils');\n\n        var hasSign = false;\n        var hasDecimal = false;\n\n        var r = actionUtils.findExpressionBounds(editor, function(ch, pos, content) {\n            if (utils.isNumeric(ch))\n                return true;\n            if (ch == '.') {\n                // make sure that next character is numeric too\n                if (!utils.isNumeric(content.charAt(pos + 1)))\n                    return false;\n\n                return hasDecimal ? false : hasDecimal = true;\n            }\n            if (ch == '-')\n                return hasSign ? false : hasSign = true;\n\n            return false;\n        });\n\n        if (r && r.length()) {\n            var strNum = r.substring(String(editor.getContent()));\n            var num = parseFloat(strNum);\n            if (!_.isNaN(num)) {\n                num = utils.prettifyNumber(num + step);\n\n                // do we have zero-padded number?\n                if (/^(\\-?)0+[1-9]/.test(strNum)) {\n                    var minus = '';\n                    if (RegExp.$1) {\n                        minus = '-';\n                        num = num.substring(1);\n                    }\n\n                    var parts = num.split('.');\n                    parts[0] = utils.zeroPadString(parts[0], intLength(strNum));\n                    num = minus + parts.join('.');\n                }\n\n                editor.replaceContent(num, r.start, r.end);\n                editor.createSelection(r.start, r.start + num.length);\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns length of integer part of number\n     * @param {String} num\n     */\n    function intLength(num) {\n        num = num.replace(/^\\-/, '');\n        if (~num.indexOf('.')) {\n            return num.split('.')[0].length;\n        }\n\n        return num.length;\n    }\n\n    var actions = require('actions');\n    _.each([1, -1, 10, -10, 0.1, -0.1], function(num) {\n        var prefix = num > 0 ? 'increment' : 'decrement';\n\n        actions.add(prefix + '_number_by_' + String(Math.abs(num)).replace('.', '').substring(0, 2), function(editor) {\n            return incrementNumber(editor, num);\n        }, {label: 'Numbers/' + prefix.charAt(0).toUpperCase() + prefix.substring(1) + ' number by ' + Math.abs(num)});\n    });\n});/**\n * Actions to insert line breaks. Some simple editors (like browser's\n * &lt;textarea&gt;, for example) do not provide such simple things\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    var actions = require('actions');\n    /** @type emmet.preferences */\n    var prefs = require('preferences');\n\n    // setup default preferences\n    prefs.define('css.closeBraceIndentation', '\\n',\n        'Indentation before closing brace of CSS rule. Some users prefere '\n        + 'indented closing brace of CSS rule for better readability. '\n        + 'This preference’s value will be automatically inserted before '\n        + 'closing brace when user adds newline in newly created CSS rule '\n        + '(e.g. when “Insert formatted linebreak” action will be performed '\n        + 'in CSS file). If you’re such user, you may want to write put a value '\n        + 'like <code>\\\\n\\\\t</code> in this preference.');\n\n    /**\n     * Inserts newline character with proper indentation in specific positions only.\n     * @param {IEmmetEditor} editor\n     * @return {Boolean} Returns <code>true</code> if line break was inserted\n     */\n    actions.add('insert_formatted_line_break_only', function(editor) {\n        var utils = require('utils');\n        /** @type emmet.resources */\n        var res = require('resources');\n\n        var info = require('editorUtils').outputInfo(editor);\n        var caretPos = editor.getCaretPos();\n        var nl = utils.getNewline();\n\n        if (_.include(['html', 'xml', 'xsl'], info.syntax)) {\n            var pad = res.getVariable('indentation');\n            // let's see if we're breaking newly created tag\n            var tag = require('htmlMatcher').tag(info.content, caretPos);\n            if (tag && !tag.innerRange.length()) {\n                editor.replaceContent(nl + pad + utils.getCaretPlaceholder() + nl, caretPos);\n                return true;\n            }\n        } else if (info.syntax == 'css') {\n            /** @type String */\n            var content = info.content;\n            if (caretPos && content.charAt(caretPos - 1) == '{') {\n                var append = prefs.get('css.closeBraceIndentation');\n                var pad = res.getVariable('indentation');\n\n                var hasCloseBrace = content.charAt(caretPos) == '}';\n                if (!hasCloseBrace) {\n                    // do we really need special formatting here?\n                    // check if this is really a newly created rule,\n                    // look ahead for a closing brace\n                    for (var i = caretPos, il = content.length, ch; i < il; i++) {\n                        ch = content.charAt(i);\n                        if (ch == '{') {\n                            // ok, this is a new rule without closing brace\n                            break;\n                        }\n\n                        if (ch == '}') {\n                            // not a new rule, just add indentation\n                            append = '';\n                            hasCloseBrace = true;\n                            break;\n                        }\n                    }\n                }\n\n                if (!hasCloseBrace) {\n                    append += '}';\n                }\n\n                // defining rule set\n                var insValue = nl + pad + utils.getCaretPlaceholder() + append;\n                editor.replaceContent(insValue, caretPos);\n                return true;\n            }\n        }\n\n        return false;\n    }, {hidden: true});\n\n    /**\n     * Inserts newline character with proper indentation. This action is used in\n     * editors that doesn't have indentation control (like textarea element) to\n     * provide proper indentation\n     * @param {IEmmetEditor} editor Editor instance\n     */\n    actions.add('insert_formatted_line_break', function(editor) {\n        if (!actions.run('insert_formatted_line_break_only', editor)) {\n            var utils = require('utils');\n\n            var curPadding = require('editorUtils').getCurrentLinePadding(editor);\n            var content = String(editor.getContent());\n            var caretPos = editor.getCaretPos();\n            var len = content.length;\n            var nl = utils.getNewline();\n\n            // check out next line padding\n            var lineRange = editor.getCurrentLineRange();\n            var nextPadding = '';\n\n            for (var i = lineRange.end + 1, ch; i < len; i++) {\n                ch = content.charAt(i);\n                if (ch == ' ' || ch == '\\t')\n                    nextPadding += ch;\n                else\n                    break;\n            }\n\n            if (nextPadding.length > curPadding.length)\n                editor.replaceContent(nl + nextPadding, caretPos, caretPos, true);\n            else\n                editor.replaceContent(nl, caretPos);\n        }\n\n        return true;\n    }, {hidden: true});\n});/**\n * Merges selected lines or lines between XHTML tag pairs\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    require('actions').add('merge_lines', function(editor) {\n        var matcher = require('htmlMatcher');\n        var utils = require('utils');\n        var editorUtils = require('editorUtils');\n        var info = editorUtils.outputInfo(editor);\n\n        /** @type Range */\n        var selection = require('range').create(editor.getSelectionRange());\n        if (!selection.length()) {\n            // find matching tag\n            var pair = matcher.find(info.content, editor.getCaretPos());\n            if (pair) {\n                selection = pair.outerRange;\n            }\n        }\n\n        if (selection.length()) {\n            // got range, merge lines\n            var text =  selection.substring(info.content);\n            var lines = utils.splitByLines(text);\n\n            for (var i = 1; i < lines.length; i++) {\n                lines[i] = lines[i].replace(/^\\s+/, '');\n            }\n\n            text = lines.join('').replace(/\\s{2,}/, ' ');\n            var textLen = text.length;\n            text = utils.escapeText(text);\n            editor.replaceContent(text, selection.start, selection.end);\n            editor.createSelection(selection.start, selection.start + textLen);\n\n            return true;\n        }\n\n        return false;\n    });\n});/**\n * Encodes/decodes image under cursor to/from base64\n * @param {IEmmetEditor} editor\n * @since 0.65\n *\n * @memberOf __base64ActionDefine\n * @constructor\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    require('actions').add('encode_decode_data_url', function(editor) {\n        var data = String(editor.getSelection());\n        var caretPos = editor.getCaretPos();\n\n        if (!data) {\n            // no selection, try to find image bounds from current caret position\n            var text = String(editor.getContent()),  m;\n            while (caretPos-- >= 0) {\n                if (startsWith('src=', text, caretPos)) { // found <img src=\"\">\n                    if (m = text.substr(caretPos).match(/^(src=([\"'])?)([^'\"<>\\s]+)\\1?/)) {\n                        data = m[3];\n                        caretPos += m[1].length;\n                    }\n                    break;\n                } else if (startsWith('url(', text, caretPos)) { // found CSS url() pattern\n                    if (m = text.substr(caretPos).match(/^(url\\((['\"])?)([^'\"\\)\\s]+)\\1?/)) {\n                        data = m[3];\n                        caretPos += m[1].length;\n                    }\n                    break;\n                }\n            }\n        }\n\n        if (data) {\n            if (startsWith('data:', data))\n                return decodeFromBase64(editor, data, caretPos);\n            else\n                return encodeToBase64(editor, data, caretPos);\n        }\n\n        return false;\n    }, {label: 'Encode\\\\Decode data:URL image'});\n\n    /**\n     * Test if <code>text</code> starts with <code>token</code> at <code>pos</code>\n     * position. If <code>pos</code> is omitted, search from beginning of text\n     * @param {String} token Token to test\n     * @param {String} text Where to search\n     * @param {Number} pos Position where to start search\n     * @return {Boolean}\n     * @since 0.65\n     */\n    function startsWith(token, text, pos) {\n        pos = pos || 0;\n        return text.charAt(pos) == token.charAt(0) && text.substr(pos, token.length) == token;\n    }\n\n    /**\n     * Encodes image to base64\n     *\n     * @param {IEmmetEditor} editor\n     * @param {String} imgPath Path to image\n     * @param {Number} pos Caret position where image is located in the editor\n     * @return {Boolean}\n     */\n    function encodeToBase64(editor, imgPath, pos) {\n        var file = require('file');\n        var actionUtils = require('actionUtils');\n\n        var editorFile = editor.getFilePath();\n        var defaultMimeType = 'application/octet-stream';\n\n        if (editorFile === null) {\n            throw \"You should save your file before using this action\";\n        }\n\n        // locate real image path\n        var realImgPath = file.locateFile(editorFile, imgPath);\n        if (realImgPath === null) {\n            throw \"Can't find \" + imgPath + ' file';\n        }\n\n        file.read(realImgPath, function(err, content) {\n            if (err) {\n                throw 'Unable to read ' + realImgPath + ': ' + err;\n            }\n\n            var b64 = require('base64').encode(String(content));\n            if (!b64) {\n                throw \"Can't encode file content to base64\";\n            }\n\n            b64 = 'data:' + (actionUtils.mimeTypes[String(file.getExt(realImgPath))] || defaultMimeType) +\n                ';base64,' + b64;\n\n            editor.replaceContent('$0' + b64, pos, pos + imgPath.length);\n        });\n\n\n        return true;\n    }\n\n    /**\n     * Decodes base64 string back to file.\n     * @param {IEmmetEditor} editor\n     * @param {String} data Base64-encoded file content\n     * @param {Number} pos Caret position where image is located in the editor\n     */\n    function decodeFromBase64(editor, data, pos) {\n        // ask user to enter path to file\n        var filePath = String(editor.prompt('Enter path to file (absolute or relative)'));\n        if (!filePath)\n            return false;\n\n        var file = require('file');\n        var absPath = file.createPath(editor.getFilePath(), filePath);\n        if (!absPath) {\n            throw \"Can't save file\";\n        }\n\n        file.save(absPath, require('base64').decode( data.replace(/^data\\:.+?;.+?,/, '') ));\n        editor.replaceContent('$0' + filePath, pos, pos + data.length);\n        return true;\n    }\n});\n/**\n * Automatically updates image size attributes in HTML's &lt;img&gt; element or\n * CSS rule\n * @param {Function} require\n * @param {Underscore} _\n * @constructor\n * @memberOf __updateImageSizeAction\n */\nemmet.exec(function(require, _) {\n    /**\n     * Updates image size of &lt;img src=\"\"&gt; tag\n     * @param {IEmmetEditor} editor\n     */\n    function updateImageSizeHTML(editor) {\n        var offset = editor.getCaretPos();\n\n        // find tag from current caret position\n        var info = require('editorUtils').outputInfo(editor);\n        var xmlElem = require('xmlEditTree').parseFromPosition(info.content, offset, true);\n        if (xmlElem && (xmlElem.name() || '').toLowerCase() == 'img') {\n            getImageSizeForSource(editor, xmlElem.value('src'), function(size) {\n                if (size) {\n                    var compoundData = xmlElem.range(true);\n                    xmlElem.value('width', size.width);\n                    xmlElem.value('height', size.height, xmlElem.indexOf('width') + 1);\n\n                    require('actionUtils').compoundUpdate(editor, _.extend(compoundData, {\n                        data: xmlElem.toString(),\n                        caret: offset\n                    }));\n                }\n            });\n        }\n    }\n\n    /**\n     * Updates image size of CSS property\n     * @param {IEmmetEditor} editor\n     */\n    function updateImageSizeCSS(editor) {\n        var offset = editor.getCaretPos();\n\n        // find tag from current caret position\n        var info = require('editorUtils').outputInfo(editor);\n        var cssRule = require('cssEditTree').parseFromPosition(info.content, offset, true);\n        if (cssRule) {\n            // check if there is property with image under caret\n            var prop = cssRule.itemFromPosition(offset, true), m;\n            if (prop && (m = /url\\(([\"']?)(.+?)\\1\\)/i.exec(prop.value() || ''))) {\n                getImageSizeForSource(editor, m[2], function(size) {\n                    if (size) {\n                        var compoundData = cssRule.range(true);\n                        cssRule.value('width', size.width + 'px');\n                        cssRule.value('height', size.height + 'px', cssRule.indexOf('width') + 1);\n\n                        require('actionUtils').compoundUpdate(editor, _.extend(compoundData, {\n                            data: cssRule.toString(),\n                            caret: offset\n                        }));\n                    }\n                });\n            }\n        }\n    }\n\n    /**\n     * Returns image dimensions for source\n     * @param {IEmmetEditor} editor\n     * @param {String} src Image source (path or data:url)\n     */\n    function getImageSizeForSource(editor, src, callback) {\n        var fileContent;\n        var au = require('actionUtils');\n        if (src) {\n            // check if it is data:url\n            if (/^data:/.test(src)) {\n                fileContent = require('base64').decode( src.replace(/^data\\:.+?;.+?,/, '') );\n                return callback(au.getImageSize(fileContent));\n            }\n\n            var file = require('file');\n            var absPath = file.locateFile(editor.getFilePath(), src);\n            if (absPath === null) {\n                throw \"Can't find \" + src + ' file';\n            }\n\n            file.read(absPath, function(err, content) {\n                if (err) {\n                    throw 'Unable to read ' + absPath + ': ' + err;\n                }\n\n                content = String(content);\n                callback(au.getImageSize(content));\n            });\n        }\n    }\n\n    require('actions').add('update_image_size', function(editor) {\n        // this action will definitely won’t work in SASS dialect,\n        // but may work in SCSS or LESS\n        if (_.include(['css', 'less', 'scss'], String(editor.getSyntax()))) {\n            updateImageSizeCSS(editor);\n        } else {\n            updateImageSizeHTML(editor);\n        }\n\n        return true;\n    });\n});/**\n * Resolver for fast CSS typing. Handles abbreviations with the following\n * notation:<br>\n *\n * <code>(-vendor prefix)?property(value)*(!)?</code>\n *\n * <br><br>\n * <b>Abbreviation handling</b><br>\n *\n * By default, Emmet searches for matching snippet definition for provided abbreviation.\n * If snippet wasn't found, Emmet automatically generates element with\n * abbreviation's name. For example, <code>foo</code> abbreviation will generate\n * <code>&lt;foo&gt;&lt;/foo&gt;</code> output.\n * <br><br>\n * This module will capture all expanded properties and upgrade them with values,\n * vendor prefixes and !important declarations. All unmatched abbreviations will\n * be automatically transformed into <code>property-name: ${1}</code> snippets.\n *\n * <b>Vendor prefixes<b><br>\n *\n * If CSS-property is preceded with dash, resolver should output property with\n * all <i>known</i> vendor prefixes. For example, if <code>brad</code>\n * abbreviation generates <code>border-radius: ${value};</code> snippet,\n * the <code>-brad</code> abbreviation should generate:\n * <pre><code>\n * -webkit-border-radius: ${value};\n * -moz-border-radius: ${value};\n * border-radius: ${value};\n * </code></pre>\n * Note that <i>o</i> and <i>ms</i> prefixes are omitted since Opera and IE\n * supports unprefixed property.<br><br>\n *\n * Users can also provide an explicit list of one-character prefixes for any\n * CSS property. For example, <code>-wm-float</code> will produce\n *\n * <pre><code>\n * -webkit-float: ${1};\n * -moz-float: ${1};\n * float: ${1};\n * </code></pre>\n *\n * Although this example looks pointless, users can use this feature to write\n * cutting-edge properties implemented by browser vendors recently.\n *\n * @constructor\n * @memberOf __cssResolverDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('cssResolver', function(require, _) {\n    /** Back-reference to module */\n    var module = null;\n\n    var prefixObj = {\n        /** Real vendor prefix name */\n        prefix: 'emmet',\n\n        /**\n         * Indicates this prefix is obsolete and should't be used when user\n         * wants to generate all-prefixed properties\n         */\n        obsolete: false,\n\n        /**\n         * Returns prefixed CSS property name\n         * @param {String} name Unprefixed CSS property\n         */\n        transformName: function(name) {\n            return '-' + this.prefix + '-' + name;\n        },\n\n        /**\n         * List of unprefixed CSS properties that supported by\n         * current prefix. This list is used to generate all-prefixed property\n         * @returns {Array}\n         */\n        properties: function() {\n            return getProperties('css.' + this.prefix + 'Properties') || [];\n        },\n\n        /**\n         * Check if given property is supported by current prefix\n         * @param name\n         */\n        supports: function(name) {\n            return _.include(this.properties(), name);\n        }\n    };\n\n\n    /**\n     * List of registered one-character prefixes. Key is a one-character prefix,\n     * value is an <code>prefixObj</code> object\n     */\n    var vendorPrefixes = {};\n\n    var defaultValue = '${1};';\n\n    // XXX module preferences\n    var prefs = require('preferences');\n    prefs.define('css.valueSeparator', ': ',\n        'Defines a symbol that should be placed between CSS property and '\n        + 'value when expanding CSS abbreviations.');\n    prefs.define('css.propertyEnd', ';',\n        'Defines a symbol that should be placed at the end of CSS property  '\n        + 'when expanding CSS abbreviations.');\n\n    prefs.define('stylus.valueSeparator', ' ',\n        'Defines a symbol that should be placed between CSS property and '\n        + 'value when expanding CSS abbreviations in Stylus dialect.');\n    prefs.define('stylus.propertyEnd', '',\n        'Defines a symbol that should be placed at the end of CSS property  '\n        + 'when expanding CSS abbreviations in Stylus dialect.');\n\n    prefs.define('sass.propertyEnd', '',\n        'Defines a symbol that should be placed at the end of CSS property  '\n        + 'when expanding CSS abbreviations in SASS dialect.');\n\n    prefs.define('css.autoInsertVendorPrefixes', true,\n        'Automatically generate vendor-prefixed copies of expanded CSS '\n        + 'property. By default, Emmet will generate vendor-prefixed '\n        + 'properties only when you put dash before abbreviation '\n        + '(e.g. <code>-bxsh</code>). With this option enabled, you don’t '\n        + 'need dashes before abbreviations: Emmet will produce '\n        + 'vendor-prefixed properties for you.');\n\n    var descTemplate = _.template('A comma-separated list of CSS properties that may have '\n        + '<code><%= vendor %></code> vendor prefix. This list is used to generate '\n        + 'a list of prefixed properties when expanding <code>-property</code> '\n        + 'abbreviations. Empty list means that all possible CSS values may '\n        + 'have <code><%= vendor %></code> prefix.');\n\n    var descAddonTemplate = _.template('A comma-separated list of <em>additional</em> CSS properties '\n        + 'for <code>css.<%= vendor %>Preperties</code> preference. '\n        + 'You should use this list if you want to add or remove a few CSS '\n        + 'properties to original set. To add a new property, simply write its name, '\n        + 'to remove it, precede property with hyphen.<br>'\n        + 'For example, to add <em>foo</em> property and remove <em>border-radius</em> one, '\n        + 'the preference value will look like this: <code>foo, -border-radius</code>.');\n\n    // properties list is created from cssFeatures.html file\n    var props = {\n        'webkit': 'animation, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, appearance, backface-visibility, background-clip, background-composite, background-origin, background-size, border-fit, border-horizontal-spacing, border-image, border-vertical-spacing, box-align, box-direction, box-flex, box-flex-group, box-lines, box-ordinal-group, box-orient, box-pack, box-reflect, box-shadow, color-correction, column-break-after, column-break-before, column-break-inside, column-count, column-gap, column-rule-color, column-rule-style, column-rule-width, column-span, column-width, dashboard-region, font-smoothing, highlight, hyphenate-character, hyphenate-limit-after, hyphenate-limit-before, hyphens, line-box-contain, line-break, line-clamp, locale, margin-before-collapse, margin-after-collapse, marquee-direction, marquee-increment, marquee-repetition, marquee-style, mask-attachment, mask-box-image, mask-box-image-outset, mask-box-image-repeat, mask-box-image-slice, mask-box-image-source, mask-box-image-width, mask-clip, mask-composite, mask-image, mask-origin, mask-position, mask-repeat, mask-size, nbsp-mode, perspective, perspective-origin, rtl-ordering, text-combine, text-decorations-in-effect, text-emphasis-color, text-emphasis-position, text-emphasis-style, text-fill-color, text-orientation, text-security, text-stroke-color, text-stroke-width, transform, transition, transform-origin, transform-style, transition-delay, transition-duration, transition-property, transition-timing-function, user-drag, user-modify, user-select, writing-mode, svg-shadow, box-sizing, border-radius',\n        'moz': 'animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, appearance, backface-visibility, background-inline-policy, binding, border-bottom-colors, border-image, border-left-colors, border-right-colors, border-top-colors, box-align, box-direction, box-flex, box-ordinal-group, box-orient, box-pack, box-shadow, box-sizing, column-count, column-gap, column-rule-color, column-rule-style, column-rule-width, column-width, float-edge, font-feature-settings, font-language-override, force-broken-image-icon, hyphens, image-region, orient, outline-radius-bottomleft, outline-radius-bottomright, outline-radius-topleft, outline-radius-topright, perspective, perspective-origin, stack-sizing, tab-size, text-blink, text-decoration-color, text-decoration-line, text-decoration-style, text-size-adjust, transform, transform-origin, transform-style, transition, transition-delay, transition-duration, transition-property, transition-timing-function, user-focus, user-input, user-modify, user-select, window-shadow, background-clip, border-radius',\n        'ms': 'accelerator, backface-visibility, background-position-x, background-position-y, behavior, block-progression, box-align, box-direction, box-flex, box-line-progression, box-lines, box-ordinal-group, box-orient, box-pack, content-zoom-boundary, content-zoom-boundary-max, content-zoom-boundary-min, content-zoom-chaining, content-zoom-snap, content-zoom-snap-points, content-zoom-snap-type, content-zooming, filter, flow-from, flow-into, font-feature-settings, grid-column, grid-column-align, grid-column-span, grid-columns, grid-layer, grid-row, grid-row-align, grid-row-span, grid-rows, high-contrast-adjust, hyphenate-limit-chars, hyphenate-limit-lines, hyphenate-limit-zone, hyphens, ime-mode, interpolation-mode, layout-flow, layout-grid, layout-grid-char, layout-grid-line, layout-grid-mode, layout-grid-type, line-break, overflow-style, perspective, perspective-origin, perspective-origin-x, perspective-origin-y, scroll-boundary, scroll-boundary-bottom, scroll-boundary-left, scroll-boundary-right, scroll-boundary-top, scroll-chaining, scroll-rails, scroll-snap-points-x, scroll-snap-points-y, scroll-snap-type, scroll-snap-x, scroll-snap-y, scrollbar-arrow-color, scrollbar-base-color, scrollbar-darkshadow-color, scrollbar-face-color, scrollbar-highlight-color, scrollbar-shadow-color, scrollbar-track-color, text-align-last, text-autospace, text-justify, text-kashida-space, text-overflow, text-size-adjust, text-underline-position, touch-action, transform, transform-origin, transform-origin-x, transform-origin-y, transform-origin-z, transform-style, transition, transition-delay, transition-duration, transition-property, transition-timing-function, user-select, word-break, word-wrap, wrap-flow, wrap-margin, wrap-through, writing-mode',\n        'o': 'dashboard-region, animation, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, border-image, link, link-source, object-fit, object-position, tab-size, table-baseline, transform, transform-origin, transition, transition-delay, transition-duration, transition-property, transition-timing-function, accesskey, input-format, input-required, marquee-dir, marquee-loop, marquee-speed, marquee-style'\n    };\n\n    _.each(props, function(v, k) {\n        prefs.define('css.' + k + 'Properties', v, descTemplate({vendor: k}));\n        prefs.define('css.' + k + 'PropertiesAddon', '', descAddonTemplate({vendor: k}));\n    });\n\n    prefs.define('css.unitlessProperties', 'z-index, line-height, opacity, font-weight, zoom',\n        'The list of properties whose values ​​must not contain units.');\n\n    prefs.define('css.intUnit', 'px', 'Default unit for integer values');\n    prefs.define('css.floatUnit', 'em', 'Default unit for float values');\n\n    prefs.define('css.keywords', 'auto, inherit',\n        'A comma-separated list of valid keywords that can be used in CSS abbreviations.');\n\n    prefs.define('css.keywordAliases', 'a:auto, i:inherit, s:solid, da:dashed, do:dotted, t:transparent',\n        'A comma-separated list of keyword aliases, used in CSS abbreviation. '\n        + 'Each alias should be defined as <code>alias:keyword_name</code>.');\n\n    prefs.define('css.unitAliases', 'e:em, p:%, x:ex, r:rem',\n        'A comma-separated list of unit aliases, used in CSS abbreviation. '\n        + 'Each alias should be defined as <code>alias:unit_value</code>.');\n\n    prefs.define('css.color.short', true,\n        'Should color values like <code>#ffffff</code> be shortened to '\n        + '<code>#fff</code> after abbreviation with color was expanded.');\n\n    prefs.define('css.color.case', 'keep',\n        'Letter case of color values generated by abbreviations with color '\n        + '(like <code>c#0</code>). Possible values are <code>upper</code>, '\n        + '<code>lower</code> and <code>keep</code>.');\n\n    prefs.define('css.fuzzySearch', true,\n        'Enable fuzzy search among CSS snippet names. When enabled, every '\n        + '<em>unknown</em> snippet will be scored against available snippet '\n        + 'names (not values or CSS properties!). The match with best score '\n        + 'will be used to resolve snippet value. For example, with this '\n        + 'preference enabled, the following abbreviations are equal: '\n        + '<code>ov:h</code> == <code>ov-h</code> == <code>o-h</code> == '\n        + '<code>oh</code>');\n\n    prefs.define('css.fuzzySearchMinScore', 0.3,\n        'The minium score (from 0 to 1) that fuzzy-matched abbreviation should '\n        + 'achive. Lower values may produce many false-positive matches, '\n        + 'higher values may reduce possible matches.');\n\n    prefs.define('css.alignVendor', false,\n        'If set to <code>true</code>, all generated vendor-prefixed properties '\n        + 'will be aligned by real property name.');\n\n\n    function isNumeric(ch) {\n        var code = ch && ch.charCodeAt(0);\n        return (ch && ch == '.' || (code > 47 && code < 58));\n    }\n\n    /**\n     * Check if provided snippet contains only one CSS property and value.\n     * @param {String} snippet\n     * @returns {Boolean}\n     */\n    function isSingleProperty(snippet) {\n        var utils = require('utils');\n        snippet = utils.trim(snippet);\n\n        // check if it doesn't contain a comment and a newline\n        if (~snippet.indexOf('/*') || /[\\n\\r]/.test(snippet)) {\n            return false;\n        }\n\n        // check if it's a valid snippet definition\n        if (!/^[a-z0-9\\-]+\\s*\\:/i.test(snippet)) {\n            return false;\n        }\n\n        snippet = require('tabStops').processText(snippet, {\n            replaceCarets: true,\n            tabstop: function() {\n                return 'value';\n            }\n        });\n\n        return snippet.split(':').length == 2;\n    }\n\n    /**\n     * Normalizes abbreviated value to final CSS one\n     * @param {String} value\n     * @returns {String}\n     */\n    function normalizeValue(value) {\n        if (value.charAt(0) == '-' && !/^\\-[\\.\\d]/.test(value)) {\n            value = value.replace(/^\\-+/, '');\n        }\n\n        if (value.charAt(0) == '#') {\n            return normalizeHexColor(value);\n        }\n\n        return getKeyword(value);\n    }\n\n    function normalizeHexColor(value) {\n        var hex = value.replace(/^#+/, '') || '0';\n        if (hex.toLowerCase() == 't') {\n            return 'transparent';\n        }\n\n        var repeat = require('utils').repeatString;\n        var color = null;\n        switch (hex.length) {\n            case 1:\n                color = repeat(hex, 6);\n                break;\n            case 2:\n                color = repeat(hex, 3);\n                break;\n            case 3:\n                color = hex.charAt(0) + hex.charAt(0) + hex.charAt(1) + hex.charAt(1) + hex.charAt(2) + hex.charAt(2);\n                break;\n            case 4:\n                color = hex + hex.substr(0, 2);\n                break;\n            case 5:\n                color = hex + hex.charAt(0);\n                break;\n            default:\n                color = hex.substr(0, 6);\n        }\n\n        // color must be shortened?\n        if (prefs.get('css.color.short')) {\n            var p = color.split('');\n            if (p[0] == p[1] && p[2] == p[3] && p[4] == p[5]) {\n                color = p[0] + p[2] + p[4];\n            }\n        }\n\n        // should transform case?\n        switch (prefs.get('css.color.case')) {\n            case 'upper':\n                color = color.toUpperCase();\n                break;\n            case 'lower':\n                color = color.toLowerCase();\n                break;\n        }\n\n        return '#' + color;\n    }\n\n    function getKeyword(name) {\n        var aliases = prefs.getDict('css.keywordAliases');\n        return name in aliases ? aliases[name] : name;\n    }\n\n    function getUnit(name) {\n        var aliases = prefs.getDict('css.unitAliases');\n        return name in aliases ? aliases[name] : name;\n    }\n\n    function isValidKeyword(keyword) {\n        return _.include(prefs.getArray('css.keywords'), getKeyword(keyword));\n    }\n\n    /**\n     * Check if passed CSS property support specified vendor prefix\n     * @param {String} property\n     * @param {String} prefix\n     */\n    function hasPrefix(property, prefix) {\n        var info = vendorPrefixes[prefix];\n\n        if (!info)\n            info = _.find(vendorPrefixes, function(data) {\n                return data.prefix == prefix;\n            });\n\n        return info && info.supports(property);\n    }\n\n    /**\n     * Search for a list of supported prefixes for CSS property. This list\n     * is used to generate all-prefixed snippet\n     * @param {String} property CSS property name\n     * @returns {Array}\n     */\n    function findPrefixes(property, noAutofill) {\n        var result = [];\n        _.each(vendorPrefixes, function(obj, prefix) {\n            if (hasPrefix(property, prefix)) {\n                result.push(prefix);\n            }\n        });\n\n        if (!result.length && !noAutofill) {\n            // add all non-obsolete prefixes\n            _.each(vendorPrefixes, function(obj, prefix) {\n                if (!obj.obsolete)\n                    result.push(prefix);\n            });\n        }\n\n        return result;\n    }\n\n    function addPrefix(name, obj) {\n        if (_.isString(obj))\n            obj = {prefix: obj};\n\n        vendorPrefixes[name] = _.extend({}, prefixObj, obj);\n    }\n\n    function getSyntaxPreference(name, syntax) {\n        if (syntax) {\n            var val = prefs.get(syntax + '.' + name);\n            if (!_.isUndefined(val))\n                return val;\n        }\n\n        return prefs.get('css.' + name);\n    }\n\n    /**\n     * Format CSS property according to current syntax dialect\n     * @param {String} property\n     * @param {String} syntax\n     * @returns {String}\n     */\n    function formatProperty(property, syntax) {\n        var ix = property.indexOf(':');\n        property = property.substring(0, ix).replace(/\\s+$/, '')\n            + getSyntaxPreference('valueSeparator', syntax)\n            + require('utils').trim(property.substring(ix + 1));\n\n        return property.replace(/\\s*;\\s*$/, getSyntaxPreference('propertyEnd', syntax));\n    }\n\n    /**\n     * Transforms snippet value if required. For example, this transformation\n     * may add <i>!important</i> declaration to CSS property\n     * @param {String} snippet\n     * @param {Boolean} isImportant\n     * @returns {String}\n     */\n    function transformSnippet(snippet, isImportant, syntax) {\n        if (!_.isString(snippet))\n            snippet = snippet.data;\n\n        if (!isSingleProperty(snippet))\n            return snippet;\n\n        if (isImportant) {\n            if (~snippet.indexOf(';')) {\n                snippet = snippet.split(';').join(' !important;');\n            } else {\n                snippet += ' !important';\n            }\n        }\n\n        return formatProperty(snippet, syntax);\n    }\n\n    /**\n     * Helper function that parses comma-separated list of elements into array\n     * @param {String} list\n     * @returns {Array}\n     */\n    function parseList(list) {\n        var result = _.map((list || '').split(','), require('utils').trim);\n        return result.length ? result : null;\n    }\n\n    function getProperties(key) {\n        var list = prefs.getArray(key);\n        _.each(prefs.getArray(key + 'Addon'), function(prop) {\n            if (prop.charAt(0) == '-') {\n                list = _.without(list, prop.substr(1));\n            } else {\n                if (prop.charAt(0) == '+')\n                    prop = prop.substr(1);\n\n                list.push(prop);\n            }\n        });\n\n        return list;\n    }\n\n\n    // TODO refactor, this looks awkward now\n    addPrefix('w', {\n        prefix: 'webkit'\n    });\n    addPrefix('m', {\n        prefix: 'moz'\n    });\n    addPrefix('s', {\n        prefix: 'ms'\n    });\n    addPrefix('o', {\n        prefix: 'o'\n    });\n\n    // I think nobody uses it\n//\taddPrefix('k', {\n//\t\tprefix: 'khtml',\n//\t\tobsolete: true\n//\t});\n\n    var cssSyntaxes = ['css', 'less', 'sass', 'scss', 'stylus'];\n\n    /**\n     * XXX register resolver\n     * @param {TreeNode} node\n     * @param {String} syntax\n     */\n    require('resources').addResolver(function(node, syntax) {\n        if (_.include(cssSyntaxes, syntax) && node.isElement()) {\n            return module.expandToSnippet(node.abbreviation, syntax);\n        }\n\n        return null;\n    });\n\n    var ea = require('expandAbbreviation');\n    /**\n     * For CSS-like syntaxes, we need to handle a special use case. Some editors\n     * (like Sublime Text 2) may insert semicolons automatically when user types\n     * abbreviation. After expansion, user receives a double semicolon. This\n     * handler automatically removes semicolon from generated content in such cases.\n     * @param {IEmmetEditor} editor\n     * @param {String} syntax\n     * @param {String} profile\n     */\n    ea.addHandler(function(editor, syntax, profile) {\n        if (!_.include(cssSyntaxes, syntax)) {\n            return false;\n        }\n\n        var caretPos = editor.getSelectionRange().end;\n        var abbr = ea.findAbbreviation(editor);\n\n        if (abbr) {\n            var content = emmet.expandAbbreviation(abbr, syntax, profile);\n            if (content) {\n                var replaceFrom = caretPos - abbr.length;\n                var replaceTo = caretPos;\n                if (editor.getContent().charAt(caretPos) == ';' && content.charAt(content.length - 1) == ';') {\n                    replaceTo++;\n                }\n\n                editor.replaceContent(content, replaceFrom, replaceTo);\n                return true;\n            }\n        }\n\n        return false;\n    });\n\n    return module = {\n        /**\n         * Adds vendor prefix\n         * @param {String} name One-character prefix name\n         * @param {Object} obj Object describing vendor prefix\n         * @memberOf cssResolver\n         */\n        addPrefix: addPrefix,\n\n        /**\n         * Check if passed CSS property supports specified vendor prefix\n         * @param {String} property\n         * @param {String} prefix\n         */\n        supportsPrefix: hasPrefix,\n\n        /**\n         * Returns prefixed version of passed CSS property, only if this\n         * property supports such prefix\n         * @param {String} property\n         * @param {String} prefix\n         * @returns\n         */\n        prefixed: function(property, prefix) {\n            return hasPrefix(property, prefix)\n                ? '-' + prefix + '-' + property\n                : property;\n        },\n\n        /**\n         * Returns list of all registered vendor prefixes\n         * @returns {Array}\n         */\n        listPrefixes: function() {\n            return _.map(vendorPrefixes, function(obj) {\n                return obj.prefix;\n            });\n        },\n\n        /**\n         * Returns object describing vendor prefix\n         * @param {String} name\n         * @returns {Object}\n         */\n        getPrefix: function(name) {\n            return vendorPrefixes[name];\n        },\n\n        /**\n         * Removes prefix object\n         * @param {String} name\n         */\n        removePrefix: function(name) {\n            if (name in vendorPrefixes)\n                delete vendorPrefixes[name];\n        },\n\n        /**\n         * Extract vendor prefixes from abbreviation\n         * @param {String} abbr\n         * @returns {Object} Object containing array of prefixes and clean\n         * abbreviation name\n         */\n        extractPrefixes: function(abbr) {\n            if (abbr.charAt(0) != '-') {\n                return {\n                    property: abbr,\n                    prefixes: null\n                };\n            }\n\n            // abbreviation may either contain sequence of one-character prefixes\n            // or just dash, meaning that user wants to produce all possible\n            // prefixed properties\n            var i = 1, il = abbr.length, ch;\n            var prefixes = [];\n\n            while (i < il) {\n                ch = abbr.charAt(i);\n                if (ch == '-') {\n                    // end-sequence character found, stop searching\n                    i++;\n                    break;\n                }\n\n                if (ch in vendorPrefixes) {\n                    prefixes.push(ch);\n                } else {\n                    // no prefix found, meaning user want to produce all\n                    // vendor-prefixed properties\n                    prefixes.length = 0;\n                    i = 1;\n                    break;\n                }\n\n                i++;\n            }\n\n            // reached end of abbreviation and no property name left\n            if (i == il -1) {\n                i = 1;\n                prefixes.length = 1;\n            }\n\n            return {\n                property: abbr.substring(i),\n                prefixes: prefixes.length ? prefixes : 'all'\n            };\n        },\n\n        /**\n         * Search for value substring in abbreviation\n         * @param {String} abbr\n         * @returns {String} Value substring\n         */\n        findValuesInAbbreviation: function(abbr, syntax) {\n            syntax = syntax || 'css';\n\n            var i = 0, il = abbr.length, value = '', ch;\n            while (i < il) {\n                ch = abbr.charAt(i);\n                if (isNumeric(ch) || ch == '#' || (ch == '-' && isNumeric(abbr.charAt(i + 1)))) {\n                    value = abbr.substring(i);\n                    break;\n                }\n\n                i++;\n            }\n\n            // try to find keywords in abbreviation\n            var property = abbr.substring(0, abbr.length - value.length);\n            var res = require('resources');\n            var keywords = [];\n            // try to extract some commonly-used properties\n            while (~property.indexOf('-') && !res.findSnippet(syntax, property)) {\n                var parts = property.split('-');\n                var lastPart = parts.pop();\n                if (!isValidKeyword(lastPart)) {\n                    break;\n                }\n\n                keywords.unshift(lastPart);\n                property = parts.join('-');\n            }\n\n            return keywords.join('-') + value;\n        },\n\n        parseValues: function(str) {\n            /** @type StringStream */\n            var stream = require('stringStream').create(str);\n            var values = [];\n            var ch = null;\n\n            while (ch = stream.next()) {\n                if (ch == '#') {\n                    stream.match(/^t|[0-9a-f]+/i, true);\n                    values.push(stream.current());\n                } else if (ch == '-') {\n                    if (isValidKeyword(_.last(values)) ||\n                        ( stream.start && isNumeric(str.charAt(stream.start - 1)) )\n                    ) {\n                        stream.start = stream.pos;\n                    }\n\n                    stream.match(/^\\-?[0-9]*(\\.[0-9]+)?[a-z%\\.]*/, true);\n                    values.push(stream.current());\n                } else {\n                    stream.match(/^[0-9]*(\\.[0-9]*)?[a-z%]*/, true);\n                    values.push(stream.current());\n                }\n\n                stream.start = stream.pos;\n            }\n\n            return _.map(_.compact(values), normalizeValue);\n        },\n\n        /**\n         * Extracts values from abbreviation\n         * @param {String} abbr\n         * @returns {Object} Object containing array of values and clean\n         * abbreviation name\n         */\n        extractValues: function(abbr) {\n            // search for value start\n            var abbrValues = this.findValuesInAbbreviation(abbr);\n            if (!abbrValues) {\n                return {\n                    property: abbr,\n                    values: null\n                };\n            }\n\n            return {\n                property: abbr.substring(0, abbr.length - abbrValues.length).replace(/-$/, ''),\n                values: this.parseValues(abbrValues)\n            };\n        },\n\n        /**\n         * Normalizes value, defined in abbreviation.\n         * @param {String} value\n         * @param {String} property\n         * @returns {String}\n         */\n        normalizeValue: function(value, property) {\n            property = (property || '').toLowerCase();\n            var unitlessProps = prefs.getArray('css.unitlessProperties');\n            return value.replace(/^(\\-?[0-9\\.]+)([a-z]*)$/, function(str, val, unit) {\n                if (!unit && (val == '0' || _.include(unitlessProps, property)))\n                    return val;\n\n                if (!unit)\n                    return val.replace(/\\.$/, '') + prefs.get(~val.indexOf('.') ? 'css.floatUnit' : 'css.intUnit');\n\n                return val + getUnit(unit);\n            });\n        },\n\n        /**\n         * Expands abbreviation into a snippet\n         * @param {String} abbr Abbreviation name to expand\n         * @param {String} value Abbreviation value\n         * @param {String} syntax Currect syntax or dialect. Default is 'css'\n         * @returns {Object} Array of CSS properties and values or predefined\n         * snippet (string or element)\n         */\n        expand: function(abbr, value, syntax) {\n            syntax = syntax || 'css';\n            var resources = require('resources');\n            var autoInsertPrefixes = prefs.get('css.autoInsertVendorPrefixes');\n\n            // check if snippet should be transformed to !important\n            var isImportant;\n            if (isImportant = /^(.+)\\!$/.test(abbr)) {\n                abbr = RegExp.$1;\n            }\n\n            // check if we have abbreviated resource\n            var snippet = resources.findSnippet(syntax, abbr);\n            if (snippet && !autoInsertPrefixes) {\n                return transformSnippet(snippet, isImportant, syntax);\n            }\n\n            // no abbreviated resource, parse abbreviation\n            var prefixData = this.extractPrefixes(abbr);\n            var valuesData = this.extractValues(prefixData.property);\n            var abbrData = _.extend(prefixData, valuesData);\n\n            if (!snippet) {\n                snippet = resources.findSnippet(syntax, abbrData.property);\n            } else {\n                abbrData.values = null;\n            }\n\n            if (!snippet && prefs.get('css.fuzzySearch')) {\n                // let’s try fuzzy search\n                snippet = resources.fuzzyFindSnippet(syntax, abbrData.property, parseFloat(prefs.get('css.fuzzySearchMinScore')));\n            }\n\n            if (!snippet) {\n                snippet = abbrData.property + ':' + defaultValue;\n            } else if (!_.isString(snippet)) {\n                snippet = snippet.data;\n            }\n\n            if (!isSingleProperty(snippet)) {\n                return snippet;\n            }\n\n            var snippetObj = this.splitSnippet(snippet);\n            var result = [];\n            if (!value && abbrData.values) {\n                value = _.map(abbrData.values, function(val) {\n                        return this.normalizeValue(val, snippetObj.name);\n                    }, this).join(' ') + ';';\n            }\n\n            snippetObj.value = value || snippetObj.value;\n\n            var prefixes = abbrData.prefixes == 'all' || (!abbrData.prefixes && autoInsertPrefixes)\n                ? findPrefixes(snippetObj.name, autoInsertPrefixes && abbrData.prefixes != 'all')\n                : abbrData.prefixes;\n\n\n            var names = [], propName;\n            _.each(prefixes, function(p) {\n                if (p in vendorPrefixes) {\n                    propName = vendorPrefixes[p].transformName(snippetObj.name);\n                    names.push(propName);\n                    result.push(transformSnippet(propName + ':' + snippetObj.value,\n                        isImportant, syntax));\n                }\n            });\n\n            // put the original property\n            result.push(transformSnippet(snippetObj.name + ':' + snippetObj.value, isImportant, syntax));\n            names.push(snippetObj.name);\n\n            if (prefs.get('css.alignVendor')) {\n                var pads = require('utils').getStringsPads(names);\n                result = _.map(result, function(prop, i) {\n                    return pads[i] + prop;\n                });\n            }\n\n            return result;\n        },\n\n        /**\n         * Same as <code>expand</code> method but transforms output into\n         * Emmet snippet\n         * @param {String} abbr\n         * @param {String} syntax\n         * @returns {String}\n         */\n        expandToSnippet: function(abbr, syntax) {\n            var snippet = this.expand(abbr, null, syntax);\n            if (_.isArray(snippet)) {\n                return snippet.join('\\n');\n            }\n\n            if (!_.isString(snippet))\n                return snippet.data;\n\n            return String(snippet);\n        },\n\n        /**\n         * Split snippet into a CSS property-value pair\n         * @param {String} snippet\n         */\n        splitSnippet: function(snippet) {\n            var utils = require('utils');\n            snippet = utils.trim(snippet);\n            if (snippet.indexOf(':') == -1) {\n                return {\n                    name: snippet,\n                    value: defaultValue\n                };\n            }\n\n            var pair = snippet.split(':');\n\n            return {\n                name: utils.trim(pair.shift()),\n                // replace ${0} tabstop to produce valid vendor-prefixed values\n                // where possible\n                value: utils.trim(pair.join(':')).replace(/^(\\$\\{0\\}|\\$0)(\\s*;?)$/, '${1}$2')\n            };\n        },\n\n        getSyntaxPreference: getSyntaxPreference,\n        transformSnippet: transformSnippet\n    };\n});\n/**\n * 'Expand Abbreviation' handler that parses gradient definition from under\n * cursor and updates CSS rule with vendor-prefixed values.\n *\n * @memberOf __cssGradientHandlerDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('cssGradient', function(require, _) {\n    var defaultLinearDirections = ['top', 'to bottom', '0deg'];\n    /** Back-reference to current module */\n    var module = null;\n\n    var cssSyntaxes = ['css', 'less', 'sass', 'scss', 'stylus', 'styl'];\n\n    var reDeg = /\\d+deg/i;\n    var reKeyword = /top|bottom|left|right/i;\n\n    // XXX define preferences\n    /** @type preferences */\n    var prefs = require('preferences');\n    prefs.define('css.gradient.prefixes', 'webkit, moz, o',\n        'A comma-separated list of vendor-prefixes for which values should '\n        + 'be generated.');\n\n    prefs.define('css.gradient.oldWebkit', true,\n        'Generate gradient definition for old Webkit implementations');\n\n    prefs.define('css.gradient.omitDefaultDirection', true,\n        'Do not output default direction definition in generated gradients.');\n\n    prefs.define('css.gradient.defaultProperty', 'background-image',\n        'When gradient expanded outside CSS value context, it will produce '\n        + 'properties with this name.');\n\n    prefs.define('css.gradient.fallback', false,\n        'With this option enabled, CSS gradient generator will produce '\n        + '<code>background-color</code> property with gradient first color '\n        + 'as fallback for old browsers.');\n\n    function normalizeSpace(str) {\n        return require('utils').trim(str).replace(/\\s+/g, ' ');\n    }\n\n    /**\n     * Parses linear gradient definition\n     * @param {String}\n     */\n    function parseLinearGradient(gradient) {\n        var direction = defaultLinearDirections[0];\n\n        // extract tokens\n        /** @type StringStream */\n        var stream = require('stringStream').create(require('utils').trim(gradient));\n        var colorStops = [], ch;\n        while (ch = stream.next()) {\n            if (stream.peek() == ',') {\n                colorStops.push(stream.current());\n                stream.next();\n                stream.eatSpace();\n                stream.start = stream.pos;\n            } else if (ch == '(') { // color definition, like 'rgb(0,0,0)'\n                stream.skipTo(')');\n            }\n        }\n\n        // add last token\n        colorStops.push(stream.current());\n        colorStops = _.compact(_.map(colorStops, normalizeSpace));\n\n        if (!colorStops.length)\n            return null;\n\n        // let's see if the first color stop is actually a direction\n        if (reDeg.test(colorStops[0]) || reKeyword.test(colorStops[0])) {\n            direction = colorStops.shift();\n        }\n\n        return {\n            type: 'linear',\n            direction: direction,\n            colorStops: _.map(colorStops, parseColorStop)\n        };\n    }\n\n    /**\n     * Parses color stop definition\n     * @param {String} colorStop\n     * @returns {Object}\n     */\n    function parseColorStop(colorStop) {\n        colorStop = normalizeSpace(colorStop);\n\n        // find color declaration\n        // first, try complex color declaration, like rgb(0,0,0)\n        var color = null;\n        colorStop = colorStop.replace(/^(\\w+\\(.+?\\))\\s*/, function(str, c) {\n            color = c;\n            return '';\n        });\n\n        if (!color) {\n            // try simple declaration, like yellow, #fco, #ffffff, etc.\n            var parts = colorStop.split(' ');\n            color = parts[0];\n            colorStop = parts[1] || '';\n        }\n\n        var result = {\n            color: color\n        };\n\n        if (colorStop) {\n            // there's position in color stop definition\n            colorStop.replace(/^(\\-?[\\d\\.]+)([a-z%]+)?$/, function(str, pos, unit) {\n                result.position = pos;\n                if (~pos.indexOf('.')) {\n                    unit = '';\n                } else if (!unit) {\n                    unit = '%';\n                }\n\n                if (unit)\n                    result.unit = unit;\n            });\n        }\n\n        return result;\n    }\n\n    /**\n     * Resolves property name (abbreviation): searches for snippet definition in\n     * 'resources' and returns new name of matched property\n     */\n    function resolvePropertyName(name, syntax) {\n        var res = require('resources');\n        var prefs = require('preferences');\n        var snippet = res.findSnippet(syntax, name);\n\n        if (!snippet && prefs.get('css.fuzzySearch')) {\n            snippet = res.fuzzyFindSnippet(syntax, name,\n                parseFloat(prefs.get('css.fuzzySearchMinScore')));\n        }\n\n        if (snippet) {\n            if (!_.isString(snippet)) {\n                snippet = snippet.data;\n            }\n\n            return require('cssResolver').splitSnippet(snippet).name;\n        }\n    }\n\n    /**\n     * Fills-out implied positions in color-stops. This function is useful for\n     * old Webkit gradient definitions\n     */\n    function fillImpliedPositions(colorStops) {\n        var from = 0;\n\n        _.each(colorStops, function(cs, i) {\n            // make sure that first and last positions are defined\n            if (!i)\n                return cs.position = cs.position || 0;\n\n            if (i == colorStops.length - 1 && !('position' in cs))\n                cs.position = 1;\n\n            if ('position' in cs) {\n                var start = colorStops[from].position || 0;\n                var step = (cs.position - start) / (i - from);\n                _.each(colorStops.slice(from, i), function(cs2, j) {\n                    cs2.position = start + step * j;\n                });\n\n                from = i;\n            }\n        });\n    }\n\n    /**\n     * Returns textual version of direction expressed in degrees\n     * @param {String} direction\n     * @returns {String}\n     */\n    function textualDirection(direction) {\n        var angle = parseFloat(direction);\n\n        if(!_.isNaN(angle)) {\n            switch(angle % 360) {\n                case 0:   return 'left';\n                case 90:  return 'bottom';\n                case 180: return 'right';\n                case 240: return 'top';\n            }\n        }\n\n        return direction;\n    }\n\n    /**\n     * Creates direction definition for old Webkit gradients\n     * @param {String} direction\n     * @returns {String}\n     */\n    function oldWebkitDirection(direction) {\n        direction = textualDirection(direction);\n\n        if(reDeg.test(direction))\n            throw \"The direction is an angle that can’t be converted.\";\n\n        var v = function(pos) {\n            return ~direction.indexOf(pos) ? '100%' : '0';\n        };\n\n        return v('right') + ' ' + v('bottom') + ', ' + v('left') + ' ' + v('top');\n    }\n\n    function getPrefixedNames(name) {\n        var prefixes = prefs.getArray('css.gradient.prefixes');\n        var names = prefixes\n            ? _.map(prefixes, function(p) {\n            return '-' + p + '-' + name;\n        })\n            : [];\n\n        names.push(name);\n\n        return names;\n    }\n\n    /**\n     * Returns list of CSS properties with gradient\n     * @param {Object} gradient\n     * @param {String} propertyName Original CSS property name\n     * @returns {Array}\n     */\n    function getPropertiesForGradient(gradient, propertyName) {\n        var props = [];\n        var css = require('cssResolver');\n\n        if (prefs.get('css.gradient.fallback') && ~propertyName.toLowerCase().indexOf('background')) {\n            props.push({\n                name: 'background-color',\n                value: '${1:' + gradient.colorStops[0].color + '}'\n            });\n        }\n\n        _.each(prefs.getArray('css.gradient.prefixes'), function(prefix) {\n            var name = css.prefixed(propertyName, prefix);\n            if (prefix == 'webkit' && prefs.get('css.gradient.oldWebkit')) {\n                try {\n                    props.push({\n                        name: name,\n                        value: module.oldWebkitLinearGradient(gradient)\n                    });\n                } catch(e) {}\n            }\n\n            props.push({\n                name: name,\n                value: module.toString(gradient, prefix)\n            });\n        });\n\n        return props.sort(function(a, b) {\n            return b.name.length - a.name.length;\n        });\n    }\n\n    /**\n     * Pastes gradient definition into CSS rule with correct vendor-prefixes\n     * @param {EditElement} property Matched CSS property\n     * @param {Object} gradient Parsed gradient\n     * @param {Range} valueRange If passed, only this range within property\n     * value will be replaced with gradient. Otherwise, full value will be\n     * replaced\n     */\n    function pasteGradient(property, gradient, valueRange) {\n        var rule = property.parent;\n        var utils = require('utils');\n        var alignVendor = require('preferences').get('css.alignVendor');\n\n        // we may have aligned gradient definitions: find the smallest value\n        // separator\n        var sep = property.styleSeparator;\n        var before = property.styleBefore;\n\n        // first, remove all properties within CSS rule with the same name and\n        // gradient definition\n        _.each(rule.getAll(getPrefixedNames(property.name())), function(item) {\n            if (item != property && /gradient/i.test(item.value())) {\n                if (item.styleSeparator.length < sep.length) {\n                    sep = item.styleSeparator;\n                }\n                if (item.styleBefore.length < before.length) {\n                    before = item.styleBefore;\n                }\n                rule.remove(item);\n            }\n        });\n\n        if (alignVendor) {\n            // update prefix\n            if (before != property.styleBefore) {\n                var fullRange = property.fullRange();\n                rule._updateSource(before, fullRange.start, fullRange.start + property.styleBefore.length);\n                property.styleBefore = before;\n            }\n\n            // update separator value\n            if (sep != property.styleSeparator) {\n                rule._updateSource(sep, property.nameRange().end, property.valueRange().start);\n                property.styleSeparator = sep;\n            }\n        }\n\n        var value = property.value();\n        if (!valueRange)\n            valueRange = require('range').create(0, property.value());\n\n        var val = function(v) {\n            return utils.replaceSubstring(value, v, valueRange);\n        };\n\n        // put vanilla-clean gradient definition into current rule\n        property.value(val(module.toString(gradient)) + '${2}');\n\n        // create list of properties to insert\n        var propsToInsert = getPropertiesForGradient(gradient, property.name());\n\n        // align prefixed values\n        if (alignVendor) {\n            var values = _.pluck(propsToInsert, 'value');\n            var names = _.pluck(propsToInsert, 'name');\n            values.push(property.value());\n            names.push(property.name());\n\n            var valuePads = utils.getStringsPads(_.map(values, function(v) {\n                return v.substring(0, v.indexOf('('));\n            }));\n\n            var namePads = utils.getStringsPads(names);\n            property.name(_.last(namePads) + property.name());\n\n            _.each(propsToInsert, function(prop, i) {\n                prop.name = namePads[i] + prop.name;\n                prop.value = valuePads[i] + prop.value;\n            });\n\n            property.value(_.last(valuePads) + property.value());\n        }\n\n        // put vendor-prefixed definitions before current rule\n        _.each(propsToInsert, function(prop) {\n            rule.add(prop.name, prop.value, rule.indexOf(property));\n        });\n    }\n\n    /**\n     * Search for gradient definition inside CSS property value\n     */\n    function findGradient(cssProp) {\n        var value = cssProp.value();\n        var gradient = null;\n        var matchedPart = _.find(cssProp.valueParts(), function(part) {\n            return gradient = module.parse(part.substring(value));\n        });\n\n        if (matchedPart && gradient) {\n            return {\n                gradient: gradient,\n                valueRange: matchedPart\n            };\n        }\n\n        return null;\n    }\n\n    /**\n     * Tries to expand gradient outside CSS value\n     * @param {IEmmetEditor} editor\n     * @param {String} syntax\n     */\n    function expandGradientOutsideValue(editor, syntax) {\n        var propertyName = prefs.get('css.gradient.defaultProperty');\n\n        if (!propertyName)\n            return false;\n\n        // assuming that gradient definition is written on new line,\n        // do a simplified parsing\n        var content = String(editor.getContent());\n        /** @type Range */\n        var lineRange = require('range').create(editor.getCurrentLineRange());\n\n        // get line content and adjust range with padding\n        var line = lineRange.substring(content)\n            .replace(/^\\s+/, function(pad) {\n                lineRange.start += pad.length;\n                return '';\n            })\n            .replace(/\\s+$/, function(pad) {\n                lineRange.end -= pad.length;\n                return '';\n            });\n\n        var css = require('cssResolver');\n        var gradient = module.parse(line);\n        if (gradient) {\n            var props = getPropertiesForGradient(gradient, propertyName);\n            props.push({\n                name: propertyName,\n                value: module.toString(gradient) + '${2}'\n            });\n\n            var sep = css.getSyntaxPreference('valueSeparator', syntax);\n            var end = css.getSyntaxPreference('propertyEnd', syntax);\n\n            if (require('preferences').get('css.alignVendor')) {\n                var pads = require('utils').getStringsPads(_.map(props, function(prop) {\n                    return prop.value.substring(0, prop.value.indexOf('('));\n                }));\n                _.each(props, function(prop, i) {\n                    prop.value = pads[i] + prop.value;\n                });\n            }\n\n            props = _.map(props, function(item) {\n                return item.name + sep + item.value + end;\n            });\n\n            editor.replaceContent(props.join('\\n'), lineRange.start, lineRange.end);\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Search for gradient definition inside CSS value under cursor\n     * @param {String} content\n     * @param {Number} pos\n     * @returns {Object}\n     */\n    function findGradientFromPosition(content, pos) {\n        var cssProp = null;\n        /** @type EditContainer */\n        var cssRule = require('cssEditTree').parseFromPosition(content, pos, true);\n\n        if (cssRule) {\n            cssProp = cssRule.itemFromPosition(pos, true);\n            if (!cssProp) {\n                // in case user just started writing CSS property\n                // and didn't include semicolon–try another approach\n                cssProp = _.find(cssRule.list(), function(elem) {\n                    return elem.range(true).end == pos;\n                });\n            }\n        }\n\n        return {\n            rule: cssRule,\n            property: cssProp\n        };\n    }\n\n    // XXX register expand abbreviation handler\n    /**\n     * @param {IEmmetEditor} editor\n     * @param {String} syntax\n     * @param {String} profile\n     */\n    require('expandAbbreviation').addHandler(function(editor, syntax, profile) {\n        var info = require('editorUtils').outputInfo(editor, syntax, profile);\n        if (!_.include(cssSyntaxes, info.syntax))\n            return false;\n\n        // let's see if we are expanding gradient definition\n        var caret = editor.getCaretPos();\n        var content = info.content;\n        var css = findGradientFromPosition(content, caret);\n\n        if (css.property) {\n            // make sure that caret is inside property value with gradient \n            // definition\n            var g = findGradient(css.property);\n            if (g) {\n                var ruleStart = css.rule.options.offset || 0;\n                var ruleEnd = ruleStart + css.rule.toString().length;\n\n                // Handle special case:\n                // user wrote gradient definition between existing CSS \n                // properties and did not finished it with semicolon.\n                // In this case, we have semicolon right after gradient \n                // definition and re-parse rule again\n                if (/[\\n\\r]/.test(css.property.value())) {\n                    // insert semicolon at the end of gradient definition\n                    var insertPos = css.property.valueRange(true).start + g.valueRange.end;\n                    content = require('utils').replaceSubstring(content, ';', insertPos);\n                    var newCss = findGradientFromPosition(content, caret);\n                    if (newCss.property) {\n                        g = findGradient(newCss.property);\n                        css = newCss;\n                    }\n                }\n\n                // make sure current property has terminating semicolon\n                css.property.end(';');\n\n                // resolve CSS property name\n                var resolvedName = resolvePropertyName(css.property.name(), syntax);\n                if (resolvedName) {\n                    css.property.name(resolvedName);\n                }\n\n                pasteGradient(css.property, g.gradient, g.valueRange);\n                editor.replaceContent(css.rule.toString(), ruleStart, ruleEnd, true);\n                return true;\n            }\n        }\n\n        return expandGradientOutsideValue(editor, syntax);\n    });\n\n    // XXX register \"Reflect CSS Value\" action delegate\n    /**\n     * @param {EditElement} property\n     */\n    require('reflectCSSValue').addHandler(function(property) {\n        var utils = require('utils');\n\n        var g = findGradient(property);\n        if (!g)\n            return false;\n\n        var value = property.value();\n        var val = function(v) {\n            return utils.replaceSubstring(value, v, g.valueRange);\n        };\n\n        // reflect value for properties with the same name\n        _.each(property.parent.getAll(getPrefixedNames(property.name())), function(prop) {\n            if (prop === property)\n                return;\n\n            // check if property value starts with gradient definition\n            var m = prop.value().match(/^\\s*(\\-([a-z]+)\\-)?linear\\-gradient/);\n            if (m) {\n                prop.value(val(module.toString(g.gradient, m[2] || '')));\n            } else if (m = prop.value().match(/\\s*\\-webkit\\-gradient/)) {\n                // old webkit gradient definition\n                prop.value(val(module.oldWebkitLinearGradient(g.gradient)));\n            }\n        });\n\n        return true;\n    });\n\n    return module = {\n        /**\n         * Parses gradient definition\n         * @param {String} gradient\n         * @returns {Object}\n         */\n        parse: function(gradient) {\n            var result = null;\n            require('utils').trim(gradient).replace(/^([\\w\\-]+)\\((.+?)\\)$/, function(str, type, definition) {\n                // remove vendor prefix\n                type = type.toLowerCase().replace(/^\\-[a-z]+\\-/, '');\n                if (type == 'linear-gradient' || type == 'lg') {\n                    result = parseLinearGradient(definition);\n                    return '';\n                }\n\n                return str;\n            });\n\n            return result;\n        },\n\n        /**\n         * Produces linear gradient definition used in early Webkit\n         * implementations\n         * @param {Object} gradient Parsed gradient\n         * @returns {String}\n         */\n        oldWebkitLinearGradient: function(gradient) {\n            if (_.isString(gradient))\n                gradient = this.parse(gradient);\n\n            if (!gradient)\n                return null;\n\n            var colorStops = _.map(gradient.colorStops, _.clone);\n\n            // normalize color-stops position\n            _.each(colorStops, function(cs) {\n                if (!('position' in cs)) // implied position\n                    return;\n\n                if (~cs.position.indexOf('.') || cs.unit == '%') {\n                    cs.position = parseFloat(cs.position) / (cs.unit == '%' ? 100 : 1);\n                } else {\n                    throw \"Can't convert color stop '\" + (cs.position + (cs.unit || '')) + \"'\";\n                }\n            });\n\n            fillImpliedPositions(colorStops);\n\n            // transform color-stops into string representation\n            colorStops = _.map(colorStops, function(cs, i) {\n                if (!cs.position && !i)\n                    return 'from(' + cs.color + ')';\n\n                if (cs.position == 1 && i == colorStops.length - 1)\n                    return 'to(' + cs.color + ')';\n\n                return 'color-stop(' + (cs.position.toFixed(2).replace(/\\.?0+$/, '')) + ', ' + cs.color + ')';\n            });\n\n            return '-webkit-gradient(linear, '\n                + oldWebkitDirection(gradient.direction)\n                + ', '\n                + colorStops.join(', ')\n                + ')';\n        },\n\n        /**\n         * Returns string representation of parsed gradient\n         * @param {Object} gradient Parsed gradient\n         * @param {String} prefix Vendor prefix\n         * @returns {String}\n         */\n        toString: function(gradient, prefix) {\n            if (gradient.type == 'linear') {\n                var fn = (prefix ? '-' + prefix + '-' : '') + 'linear-gradient';\n\n                // transform color-stops\n                var colorStops = _.map(gradient.colorStops, function(cs) {\n                    return cs.color + ('position' in cs\n                            ? ' ' + cs.position + (cs.unit || '')\n                            : '');\n                });\n\n                if (gradient.direction\n                    && (!prefs.get('css.gradient.omitDefaultDirection')\n                    || !_.include(defaultLinearDirections, gradient.direction))) {\n                    colorStops.unshift(gradient.direction);\n                }\n\n                return fn + '(' + colorStops.join(', ') + ')';\n            }\n        }\n    };\n});/**\n * Module adds support for generators: a regexp-based abbreviation resolver\n * that can produce custom output.\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    /** @type HandlerList */\n    var generators = require('handlerList').create();\n    var resources = require('resources');\n\n    _.extend(resources, {\n        /**\n         * Add generator. A generator function <code>fn</code> will be called\n         * only if current abbreviation matches <code>regexp</code> regular\n         * expression and this function should return <code>null</code> if\n         * abbreviation cannot be resolved\n         * @param {RegExp} regexp Regular expression for abbreviation element name\n         * @param {Function} fn Resolver function\n         * @param {Object} options Options list as described in\n         * {@link HandlerList#add()} method\n         */\n        addGenerator: function(regexp, fn, options) {\n            if (_.isString(regexp))\n                regexp = new RegExp(regexp);\n\n            generators.add(function(node, syntax) {\n                var m;\n                if ((m = regexp.exec(node.name()))) {\n                    return fn(m, node, syntax);\n                }\n\n                return null;\n            }, options);\n        }\n    });\n\n    resources.addResolver(function(node, syntax) {\n        return generators.exec(null, _.toArray(arguments));\n    });\n});/**\n * Module for resolving tag names: returns best matched tag name for child\n * element based on passed parent's tag name. Also provides utility function\n * for element type detection (inline, block-level, empty)\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('tagName', function(require, _) {\n    var elementTypes = {\n//\t\tempty: 'area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,keygen,command'.split(','),\n        empty: [],\n        blockLevel: 'address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,link,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul,h1,h2,h3,h4,h5,h6'.split(','),\n        inlineLevel: 'a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'.split(',')\n    };\n\n    var elementMap = {\n        'p': 'span',\n        'ul': 'li',\n        'ol': 'li',\n        'table': 'tr',\n        'tr': 'td',\n        'tbody': 'tr',\n        'thead': 'tr',\n        'tfoot': 'tr',\n        'colgroup': 'col',\n        'select': 'option',\n        'optgroup': 'option',\n        'audio': 'source',\n        'video': 'source',\n        'object': 'param',\n        'map': 'area'\n    };\n\n    return {\n        /**\n         * Returns best matched child element name for passed parent's\n         * tag name\n         * @param {String} name\n         * @returns {String}\n         * @memberOf tagName\n         */\n        resolve: function(name) {\n            name = (name || '').toLowerCase();\n\n            if (name in elementMap)\n                return this.getMapping(name);\n\n            if (this.isInlineLevel(name))\n                return 'span';\n\n            return 'div';\n        },\n\n        /**\n         * Returns mapped child element name for passed parent's name\n         * @param {String} name\n         * @returns {String}\n         */\n        getMapping: function(name) {\n            return elementMap[name.toLowerCase()];\n        },\n\n        /**\n         * Check if passed element name belongs to inline-level element\n         * @param {String} name\n         * @returns {Boolean}\n         */\n        isInlineLevel: function(name) {\n            return this.isTypeOf(name, 'inlineLevel');\n        },\n\n        /**\n         * Check if passed element belongs to block-level element.\n         * For better matching of unknown elements (for XML, for example),\n         * you should use <code>!this.isInlineLevel(name)</code>\n         * @returns {Boolean}\n         */\n        isBlockLevel: function(name) {\n            return this.isTypeOf(name, 'blockLevel');\n        },\n\n        /**\n         * Check if passed element is void (i.e. should not have closing tag).\n         * @returns {Boolean}\n         */\n        isEmptyElement: function(name) {\n            return this.isTypeOf(name, 'empty');\n        },\n\n        /**\n         * Generic function for testing if element name belongs to specified\n         * elements collection\n         * @param {String} name Element name\n         * @param {String} type Collection name\n         * @returns {Boolean}\n         */\n        isTypeOf: function(name, type) {\n            return _.include(elementTypes[type], name);\n        },\n\n        /**\n         * Adds new parent–child mapping\n         * @param {String} parent\n         * @param {String} child\n         */\n        addMapping: function(parent, child) {\n            elementMap[parent] = child;\n        },\n\n        /**\n         * Removes parent-child mapping\n         */\n        removeMapping: function(parent) {\n            if (parent in elementMap)\n                delete elementMap[parent];\n        },\n\n        /**\n         * Adds new element into collection\n         * @param {String} name Element name\n         * @param {String} collection Collection name\n         */\n        addElementToCollection: function(name, collection) {\n            if (!elementTypes[collection])\n                elementTypes[collection] = [];\n\n            var col = this.getCollection(collection);\n            if (!_.include(col, name))\n                col.push(name);\n        },\n\n        /**\n         * Removes element name from specified collection\n         * @param {String} name Element name\n         * @param {String} collection Collection name\n         * @returns\n         */\n        removeElementFromCollection: function(name, collection) {\n            if (collection in elementTypes) {\n                elementTypes[collection] = _.without(this.getCollection(collection), name);\n            }\n        },\n\n        /**\n         * Returns elements name collection\n         * @param {String} name Collection name\n         * @returns {Array}\n         */\n        getCollection: function(name) {\n            return elementTypes[name];\n        }\n    };\n});/**\n * Filter for aiding of writing elements with complex class names as described\n * in Yandex's BEM (Block, Element, Modifier) methodology. This filter will\n * automatically inherit block and element names from parent elements and insert\n * them into child element classes\n * @memberOf __bemFilterDefine\n * @constructor\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    var prefs = require('preferences');\n    prefs.define('bem.elementSeparator', '__', 'Class name’s element separator.');\n    prefs.define('bem.modifierSeparator', '_', 'Class name’s modifier separator.');\n    prefs.define('bem.shortElementPrefix', '-',\n        'Symbol for describing short “block-element” notation. Class names '\n        + 'prefixed with this symbol will be treated as element name for parent‘s '\n        + 'block name. Each symbol instance traverses one level up in parsed '\n        + 'tree for block name lookup. Empty value will disable short notation.');\n\n    var shouldRunHtmlFilter = false;\n\n    function getSeparators() {\n        return {\n            element: prefs.get('bem.elementSeparator'),\n            modifier: prefs.get('bem.modifierSeparator')\n        };\n    }\n\n    /**\n     * @param {AbbreviationNode} item\n     */\n    function bemParse(item) {\n        if (require('abbreviationUtils').isSnippet(item))\n            return item;\n\n        // save BEM stuff in cache for faster lookups\n        item.__bem = {\n            block: '',\n            element: '',\n            modifier: ''\n        };\n\n        var classNames = normalizeClassName(item.attribute('class')).split(' ');\n\n        // guess best match for block name\n        var reBlockName = /^[a-z]\\-/i;\n        item.__bem.block = _.find(classNames, function(name) {\n            return reBlockName.test(name);\n        });\n\n        // guessing doesn't worked, pick first class name as block name\n        if (!item.__bem.block) {\n            reBlockName = /^[a-z]/i;\n            item.__bem.block = _.find(classNames, function(name) {\n                    return reBlockName.test(name);\n                }) || '';\n        }\n\n        classNames = _.chain(classNames)\n            .map(function(name) {return processClassName(name, item);})\n            .flatten()\n            .uniq()\n            .value()\n            .join(' ');\n\n        if (classNames)\n            item.attribute('class', classNames);\n\n        return item;\n    }\n\n    /**\n     * @param {String} className\n     * @returns {String}\n     */\n    function normalizeClassName(className) {\n        var utils = require('utils');\n        className = (' ' + (className || '') + ' ').replace(/\\s+/g, ' ');\n\n        var shortSymbol = prefs.get('bem.shortElementPrefix');\n        if (shortSymbol) {\n            var re = new RegExp('\\\\s(' + utils.escapeForRegexp(shortSymbol) + '+)', 'g');\n            className = className.replace(re, function(str, p1) {\n                return ' ' + utils.repeatString(getSeparators().element, p1.length);\n            });\n        }\n\n        return utils.trim(className);\n    }\n\n    /**\n     * Processes class name\n     * @param {String} name Class name item to process\n     * @param {AbbreviationNode} item Host node for provided class name\n     * @returns Processed class name. May return <code>Array</code> of\n     * class names\n     */\n    function processClassName(name, item) {\n        name = transformClassName(name, item, 'element');\n        name = transformClassName(name, item, 'modifier');\n\n        // expand class name\n        // possible values:\n        // * block__element\n        // * block__element_modifier\n        // * block__element_modifier1_modifier2\n        // * block_modifier\n        var block = '', element = '', modifier = '';\n        var separators = getSeparators();\n        if (~name.indexOf(separators.element)) {\n            var blockElem = name.split(separators.element);\n            var elemModifiers = blockElem[1].split(separators.modifier);\n\n            block = blockElem[0];\n            element = elemModifiers.shift();\n            modifier = elemModifiers.join(separators.modifier);\n        } else if (~name.indexOf(separators.modifier)) {\n            var blockModifiers = name.split(separators.modifier);\n\n            block = blockModifiers.shift();\n            modifier = blockModifiers.join(separators.modifier);\n        }\n\n        if (block || element || modifier) {\n            if (!block) {\n                block = item.__bem.block;\n            }\n\n            // inherit parent bem element, if exists\n//\t\t\tif (item.parent && item.parent.__bem && item.parent.__bem.element)\n//\t\t\t\telement = item.parent.__bem.element + separators.element + element;\n\n            // produce multiple classes\n            var prefix = block;\n            var result = [];\n\n            if (element) {\n                prefix += separators.element + element;\n                result.push(prefix);\n            } else {\n                result.push(prefix);\n            }\n\n            if (modifier) {\n                result.push(prefix + separators.modifier + modifier);\n            }\n\n            item.__bem.block = block;\n            item.__bem.element = element;\n            item.__bem.modifier = modifier;\n\n            return result;\n        }\n\n        // ...otherwise, return processed or original class name\n        return name;\n    }\n\n    /**\n     * Low-level function to transform user-typed class name into full BEM class\n     * @param {String} name Class name item to process\n     * @param {AbbreviationNode} item Host node for provided class name\n     * @param {String} entityType Type of entity to be tried to transform\n     * ('element' or 'modifier')\n     * @returns {String} Processed class name or original one if it can't be\n     * transformed\n     */\n    function transformClassName(name, item, entityType) {\n        var separators = getSeparators();\n        var reSep = new RegExp('^(' + separators[entityType] + ')+', 'g');\n        if (reSep.test(name)) {\n            var depth = 0; // parent lookup depth\n            var cleanName = name.replace(reSep, function(str, p1) {\n                depth = str.length / separators[entityType].length;\n                return '';\n            });\n\n            // find donor element\n            var donor = item;\n            while (donor.parent && depth--) {\n                donor = donor.parent;\n            }\n\n            if (!donor || !donor.__bem)\n                donor = item;\n\n            if (donor && donor.__bem) {\n                var prefix = donor.__bem.block;\n\n                // decide if we should inherit element name\n//\t\t\t\tif (entityType == 'element') {\n//\t\t\t\t\tvar curElem = cleanName.split(separators.modifier, 1)[0];\n//\t\t\t\t\tif (donor.__bem.element && donor.__bem.element != curElem)\n//\t\t\t\t\t\tprefix += separators.element + donor.__bem.element;\n//\t\t\t\t}\n\n                if (entityType == 'modifier' &&  donor.__bem.element)\n                    prefix += separators.element + donor.__bem.element;\n\n                return prefix + separators[entityType] + cleanName;\n            }\n        }\n\n        return name;\n    }\n\n    /**\n     * Recursive function for processing tags, which extends class names\n     * according to BEM specs: http://bem.github.com/bem-method/pages/beginning/beginning.ru.html\n     * <br><br>\n     * It does several things:<br>\n     * <ul>\n     * <li>Expands complex class name (according to BEM symbol semantics):\n     * .block__elem_modifier → .block.block__elem.block__elem_modifier\n     * </li>\n     * <li>Inherits block name on child elements:\n     * .b-block > .__el > .__el → .b-block > .b-block__el > .b-block__el__el\n     * </li>\n     * <li>Treats first dash symbol as '__'</li>\n     * <li>Double underscore (or typographic '–') is also treated as an element\n     * level lookup, e.g. ____el will search for element definition in parent’s\n     * parent element:\n     * .b-block > .__el1 > .____el2 → .b-block > .b-block__el1 > .b-block__el2\n     * </li>\n     * </ul>\n     *\n     * @param {AbbreviationNode} tree\n     * @param {Object} profile\n     */\n    function process(tree, profile) {\n        if (tree.name)\n            bemParse(tree, profile);\n\n        var abbrUtils = require('abbreviationUtils');\n        _.each(tree.children, function(item) {\n            process(item, profile);\n            if (!abbrUtils.isSnippet(item) && item.start)\n                shouldRunHtmlFilter = true;\n        });\n\n        return tree;\n    };\n\n    require('filters').add('bem', function(tree, profile) {\n        shouldRunHtmlFilter = false;\n        tree = process(tree, profile);\n        // in case 'bem' filter is applied after 'html' filter: run it again\n        // to update output\n        if (shouldRunHtmlFilter) {\n            tree = require('filters').apply(tree, 'html', profile);\n        }\n\n        return tree;\n    });\n});\n\n/**\n * Comment important tags (with 'id' and 'class' attributes)\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n * @constructor\n * @memberOf __commentFilterDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    // define some preferences\n    /** @type emmet.preferences */\n    var prefs = require('preferences');\n\n    prefs.define('filter.commentAfter',\n        '\\n<!-- /<%= attr(\"id\", \"#\") %><%= attr(\"class\", \".\") %> -->',\n        'A definition of comment that should be placed <i>after</i> matched '\n        + 'element when <code>comment</code> filter is applied. This definition '\n        + 'is an ERB-style template passed to <code>_.template()</code> '\n        + 'function (see Underscore.js docs for details). In template context, '\n        + 'the following properties and functions are availabe:\\n'\n        + '<ul>'\n\n        + '<li><code>attr(name, before, after)</code> – a function that outputs'\n        + 'specified attribute value concatenated with <code>before</code> '\n        + 'and <code>after</code> strings. If attribute doesn\\'t exists, the '\n        + 'empty string will be returned.</li>'\n\n        + '<li><code>node</code> – current node (instance of <code>AbbreviationNode</code>)</li>'\n\n        + '<li><code>name</code> – name of current tag</li>'\n\n        + '<li><code>padding</code> – current string padding, can be used '\n        + 'for formatting</li>'\n\n        +'</ul>');\n\n    prefs.define('filter.commentBefore',\n        '',\n        'A definition of comment that should be placed <i>before</i> matched '\n        + 'element when <code>comment</code> filter is applied. '\n        + 'For more info, read description of <code>filter.commentAfter</code> '\n        + 'property');\n\n    prefs.define('filter.commentTrigger', 'id, class',\n        'A comma-separated list of attribute names that should exist in abbreviatoin '\n        + 'where comment should be added. If you wish to add comment for '\n        + 'every element, set this option to <code>*</code>');\n\n    /**\n     * Add comments to tag\n     * @param {AbbreviationNode} node\n     */\n    function addComments(node, templateBefore, templateAfter) {\n        var utils = require('utils');\n\n        // check if comments should be added\n        var trigger = prefs.get('filter.commentTrigger');\n        if (trigger != '*') {\n            var shouldAdd = _.find(trigger.split(','), function(name) {\n                return !!node.attribute(utils.trim(name));\n            });\n            if (!shouldAdd) return;\n        }\n\n        var ctx = {\n            node: node,\n            name: node.name(),\n            padding: node.parent ? node.parent.padding : '',\n            attr: function(name, before, after) {\n                var attr = node.attribute(name);\n                if (attr) {\n                    return (before || '') + attr + (after || '');\n                }\n\n                return '';\n            }\n        };\n\n        var nodeBefore = utils.normalizeNewline(templateBefore ? templateBefore(ctx) : '');\n        var nodeAfter = utils.normalizeNewline(templateAfter ? templateAfter(ctx) : '');\n\n        node.start = node.start.replace(/</, nodeBefore + '<');\n        node.end = node.end.replace(/>/, '>' + nodeAfter);\n    }\n\n    function process(tree, before, after) {\n        var abbrUtils = require('abbreviationUtils');\n        _.each(tree.children, function(item) {\n            if (abbrUtils.isBlock(item))\n                addComments(item, before, after);\n\n            process(item, before, after);\n        });\n\n        return tree;\n    }\n\n    require('filters').add('c', function(tree) {\n        var templateBefore = _.template(prefs.get('filter.commentBefore'));\n        var templateAfter = _.template(prefs.get('filter.commentAfter'));\n\n        return process(tree, templateBefore, templateAfter);\n    });\n});\n/**\n * Filter for escaping unsafe XML characters: <, >, &\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n */\nemmet.exec(function(require, _) {\n    var charMap = {\n        '<': '&lt;',\n        '>': '&gt;',\n        '&': '&amp;'\n    };\n\n    function escapeChars(str) {\n        return str.replace(/([<>&])/g, function(str, p1){\n            return charMap[p1];\n        });\n    }\n\n    require('filters').add('e', function process(tree) {\n        _.each(tree.children, function(item) {\n            item.start = escapeChars(item.start);\n            item.end = escapeChars(item.end);\n            item.content = escapeChars(item.content);\n            process(item);\n        });\n\n        return tree;\n    });\n});/**\n * Generic formatting filter: creates proper indentation for each tree node,\n * placing \"%s\" placeholder where the actual output should be. You can use\n * this filter to preformat tree and then replace %s placeholder to whatever you\n * need. This filter should't be called directly from editor as a part\n * of abbreviation.\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n * @constructor\n * @memberOf __formatFilterDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _){\n    var placeholder = '%s';\n\n    /** @type preferences */\n    var prefs = require('preferences');\n    prefs.define('format.noIndentTags', 'html',\n        'A comma-separated list of tag names that should not get inner indentation.');\n\n    prefs.define('format.forceIndentationForTags', 'body',\n        'A comma-separated list of tag names that should <em>always</em> get inner indentation.');\n\n    /**\n     * Get indentation for given node\n     * @param {AbbreviationNode} node\n     * @returns {String}\n     */\n    function getIndentation(node) {\n        if (_.include(prefs.getArray('format.noIndentTags') || [], node.name())) {\n            return '';\n        }\n\n        return require('resources').getVariable('indentation');\n    }\n\n    /**\n     * Test if passed node has block-level sibling element\n     * @param {AbbreviationNode} item\n     * @return {Boolean}\n     */\n    function hasBlockSibling(item) {\n        return item.parent && require('abbreviationUtils').hasBlockChildren(item.parent);\n    }\n\n    /**\n     * Test if passed item is very first child in parsed tree\n     * @param {AbbreviationNode} item\n     */\n    function isVeryFirstChild(item) {\n        return item.parent && !item.parent.parent && !item.index();\n    }\n\n    /**\n     * Check if a newline should be added before element\n     * @param {AbbreviationNode} node\n     * @param {OutputProfile} profile\n     * @return {Boolean}\n     */\n    function shouldAddLineBreak(node, profile) {\n        var abbrUtils = require('abbreviationUtils');\n        if (profile.tag_nl === true || abbrUtils.isBlock(node))\n            return true;\n\n        if (!node.parent || !profile.inline_break)\n            return false;\n\n        // check if there are required amount of adjacent inline element\n        return shouldFormatInline(node.parent, profile);\n    }\n\n    /**\n     * Need to add newline because <code>item</code> has too many inline children\n     * @param {AbbreviationNode} node\n     * @param {OutputProfile} profile\n     */\n    function shouldBreakChild(node, profile) {\n        // we need to test only one child element, because \n        // hasBlockChildren() method will do the rest\n        return node.children.length && shouldAddLineBreak(node.children[0], profile);\n    }\n\n    function shouldFormatInline(node, profile) {\n        var nodeCount = 0;\n        var abbrUtils = require('abbreviationUtils');\n        return !!_.find(node.children, function(child) {\n            if (child.isTextNode() || !abbrUtils.isInline(child))\n                nodeCount = 0;\n            else if (abbrUtils.isInline(child))\n                nodeCount++;\n\n            if (nodeCount >= profile.inline_break)\n                return true;\n        });\n    }\n\n    function isRoot(item) {\n        return !item.parent;\n    }\n\n    /**\n     * Processes element with matched resource of type <code>snippet</code>\n     * @param {AbbreviationNode} item\n     * @param {OutputProfile} profile\n     * @param {Number} level Depth level\n     */\n    function processSnippet(item, profile, level) {\n        item.start = item.end = '';\n        if (!isVeryFirstChild(item) && profile.tag_nl !== false && shouldAddLineBreak(item, profile)) {\n            // check if we’re not inside inline element\n            if (isRoot(item.parent) || !require('abbreviationUtils').isInline(item.parent)) {\n                item.start = require('utils').getNewline() + item.start;\n            }\n        }\n\n        return item;\n    }\n\n    /**\n     * Check if we should add line breaks inside inline element\n     * @param {AbbreviationNode} node\n     * @param {OutputProfile} profile\n     * @return {Boolean}\n     */\n    function shouldBreakInsideInline(node, profile) {\n        var abbrUtils = require('abbreviationUtils');\n        var hasBlockElems = _.any(node.children, function(child) {\n            if (abbrUtils.isSnippet(child))\n                return false;\n\n            return !abbrUtils.isInline(child);\n        });\n\n        if (!hasBlockElems) {\n            return shouldFormatInline(node, profile);\n        }\n\n        return true;\n    }\n\n    /**\n     * Processes element with <code>tag</code> type\n     * @param {AbbreviationNode} item\n     * @param {OutputProfile} profile\n     * @param {Number} level Depth level\n     */\n    function processTag(item, profile, level) {\n        item.start = item.end = placeholder;\n        var utils = require('utils');\n        var abbrUtils = require('abbreviationUtils');\n        var isUnary = abbrUtils.isUnary(item);\n        var nl = utils.getNewline();\n        var indent = getIndentation(item);\n\n        // formatting output\n        if (profile.tag_nl !== false) {\n            var forceNl = profile.tag_nl === true && (profile.tag_nl_leaf || item.children.length);\n            if (!forceNl) {\n                forceNl = _.include(prefs.getArray('format.forceIndentationForTags') || [], item.name());\n            }\n\n            // formatting block-level elements\n            if (!item.isTextNode()) {\n                if (shouldAddLineBreak(item, profile)) {\n                    // - do not indent the very first element\n                    // - do not indent first child of a snippet\n                    if (!isVeryFirstChild(item) && (!abbrUtils.isSnippet(item.parent) || item.index()))\n                        item.start = nl + item.start;\n\n                    if (abbrUtils.hasBlockChildren(item) || shouldBreakChild(item, profile) || (forceNl && !isUnary))\n                        item.end = nl + item.end;\n\n                    if (abbrUtils.hasTagsInContent(item) || (forceNl && !item.children.length && !isUnary))\n                        item.start += nl + indent;\n                } else if (abbrUtils.isInline(item) && hasBlockSibling(item) && !isVeryFirstChild(item)) {\n                    item.start = nl + item.start;\n                } else if (abbrUtils.isInline(item) && shouldBreakInsideInline(item, profile)) {\n                    item.end = nl + item.end;\n                }\n\n                item.padding = indent;\n            }\n        }\n\n        return item;\n    }\n\n    /**\n     * Processes simplified tree, making it suitable for output as HTML structure\n     * @param {AbbreviationNode} tree\n     * @param {OutputProfile} profile\n     * @param {Number} level Depth level\n     */\n    require('filters').add('_format', function process(tree, profile, level) {\n        level = level || 0;\n        var abbrUtils = require('abbreviationUtils');\n\n        _.each(tree.children, function(item) {\n            if (abbrUtils.isSnippet(item))\n                processSnippet(item, profile, level);\n            else\n                processTag(item, profile, level);\n\n            process(item, profile, level + 1);\n        });\n\n        return tree;\n    });\n});/**\n * Filter for producing HAML code from abbreviation.\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n * @constructor\n * @memberOf __hamlFilterDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    var childToken = '${child}';\n\n    function transformClassName(className) {\n        return require('utils').trim(className).replace(/\\s+/g, '.');\n    }\n\n    /**\n     * Creates HAML attributes string from tag according to profile settings\n     * @param {AbbreviationNode} tag\n     * @param {Object} profile\n     */\n    function makeAttributesString(tag, profile) {\n        var attrs = '';\n        var otherAttrs = [];\n        var attrQuote = profile.attributeQuote();\n        var cursor = profile.cursor();\n\n        _.each(tag.attributeList(), function(a) {\n            var attrName = profile.attributeName(a.name);\n            switch (attrName.toLowerCase()) {\n                // use short notation for ID and CLASS attributes\n                case 'id':\n                    attrs += '#' + (a.value || cursor);\n                    break;\n                case 'class':\n                    attrs += '.' + transformClassName(a.value || cursor);\n                    break;\n                // process other attributes\n                default:\n                    otherAttrs.push(':' +attrName + ' => ' + attrQuote + (a.value || cursor) + attrQuote);\n            }\n        });\n\n        if (otherAttrs.length)\n            attrs += '{' + otherAttrs.join(', ') + '}';\n\n        return attrs;\n    }\n\n    /**\n     * Test if passed node has block-level sibling element\n     * @param {AbbreviationNode} item\n     * @return {Boolean}\n     */\n    function hasBlockSibling(item) {\n        return item.parent && item.parent.hasBlockChildren();\n    }\n\n    /**\n     * Processes element with <code>tag</code> type\n     * @param {AbbreviationNode} item\n     * @param {OutputProfile} profile\n     * @param {Number} level Depth level\n     */\n    function processTag(item, profile, level) {\n        if (!item.parent)\n        // looks like it's root element\n            return item;\n\n        var abbrUtils = require('abbreviationUtils');\n        var utils = require('utils');\n\n        var attrs = makeAttributesString(item, profile);\n        var cursor = profile.cursor();\n        var isUnary = abbrUtils.isUnary(item);\n        var selfClosing = profile.self_closing_tag && isUnary ? '/' : '';\n        var start= '';\n\n        // define tag name\n        var tagName = '%' + profile.tagName(item.name());\n        if (tagName.toLowerCase() == '%div' && attrs && attrs.indexOf('{') == -1)\n        // omit div tag\n            tagName = '';\n\n        item.end = '';\n        start = tagName + attrs + selfClosing + ' ';\n\n        var placeholder = '%s';\n        // We can't just replace placeholder with new value because\n        // JavaScript will treat double $ character as a single one, assuming\n        // we're using RegExp literal.\n        item.start = utils.replaceSubstring(item.start, start, item.start.indexOf(placeholder), placeholder);\n\n        if (!item.children.length && !isUnary)\n            item.start += cursor;\n\n        return item;\n    }\n\n    /**\n     * Processes simplified tree, making it suitable for output as HTML structure\n     * @param {AbbreviationNode} tree\n     * @param {Object} profile\n     * @param {Number} level Depth level\n     */\n    require('filters').add('haml', function process(tree, profile, level) {\n        level = level || 0;\n        var abbrUtils = require('abbreviationUtils');\n\n        if (!level) {\n            tree = require('filters').apply(tree, '_format', profile);\n        }\n\n        _.each(tree.children, function(item) {\n            if (!abbrUtils.isSnippet(item))\n                processTag(item, profile, level);\n\n            process(item, profile, level + 1);\n        });\n\n        return tree;\n    });\n});/**\n * Filter that produces HTML tree\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n * @constructor\n * @memberOf __htmlFilterDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    /**\n     * Creates HTML attributes string from tag according to profile settings\n     * @param {AbbreviationNode} node\n     * @param {OutputProfile} profile\n     */\n    function makeAttributesString(node, profile) {\n        var attrQuote = profile.attributeQuote();\n        var cursor = profile.cursor();\n\n        return _.map(node.attributeList(), function(a) {\n            var attrName = profile.attributeName(a.name);\n            return ' ' + attrName + '=' + attrQuote + (a.value || cursor) + attrQuote;\n        }).join('');\n    }\n\n    /**\n     * Processes element with <code>tag</code> type\n     * @param {AbbreviationNode} item\n     * @param {OutputProfile} profile\n     * @param {Number} level Depth level\n     */\n    function processTag(item, profile, level) {\n        if (!item.parent) // looks like it's root element\n            return item;\n\n        var abbrUtils = require('abbreviationUtils');\n        var utils = require('utils');\n\n        var attrs = makeAttributesString(item, profile);\n        var cursor = profile.cursor();\n        var isUnary = abbrUtils.isUnary(item);\n        var start= '';\n        var end = '';\n\n        // define opening and closing tags\n        if (!item.isTextNode()) {\n            var tagName = profile.tagName(item.name());\n            if (isUnary) {\n                start = '<' + tagName + attrs + profile.selfClosing() + '>';\n                item.end = '';\n            } else {\n                start = '<' + tagName + attrs + '>';\n                end = '</' + tagName + '>';\n            }\n        }\n\n        var placeholder = '%s';\n        // We can't just replace placeholder with new value because\n        // JavaScript will treat double $ character as a single one, assuming\n        // we're using RegExp literal.\n        item.start = utils.replaceSubstring(item.start, start, item.start.indexOf(placeholder), placeholder);\n        item.end = utils.replaceSubstring(item.end, end, item.end.indexOf(placeholder), placeholder);\n\n        // should we put caret placeholder after opening tag?\n        if (\n            !item.children.length\n            && !isUnary\n            && !~item.content.indexOf(cursor)\n            && !require('tabStops').extract(item.content).tabstops.length\n        ) {\n            item.start += cursor;\n        }\n\n        return item;\n    }\n\n    /**\n     * Processes simplified tree, making it suitable for output as HTML structure\n     * @param {AbbreviationNode} tree\n     * @param {Object} profile\n     * @param {Number} level Depth level\n     */\n    require('filters').add('html', function process(tree, profile, level) {\n        level = level || 0;\n        var abbrUtils = require('abbreviationUtils');\n\n        if (!level) {\n            tree = require('filters').apply(tree, '_format', profile);\n        }\n\n        _.each(tree.children, function(item) {\n            if (!abbrUtils.isSnippet(item))\n                processTag(item, profile, level);\n\n            process(item, profile, level + 1);\n        });\n\n        return tree;\n    });\n});/**\n * Output abbreviation on a single line (i.e. no line breaks)\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n * @constructor\n * @memberOf __singleLineFilterDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    var rePad = /^\\s+/;\n    var reNl = /[\\n\\r]/g;\n\n    require('filters').add('s', function process(tree, profile, level) {\n        var abbrUtils = require('abbreviationUtils');\n\n        _.each(tree.children, function(item) {\n            if (!abbrUtils.isSnippet(item)) {\n                // remove padding from item \n                item.start = item.start.replace(rePad, '');\n                item.end = item.end.replace(rePad, '');\n            }\n\n            // remove newlines \n            item.start = item.start.replace(reNl, '');\n            item.end = item.end.replace(reNl, '');\n            item.content = item.content.replace(reNl, '');\n\n            process(item);\n        });\n\n        return tree;\n    });\n});\n/**\n * Trim filter: removes characters at the beginning of the text\n * content that indicates lists: numbers, #, *, -, etc.\n *\n * Useful for wrapping lists with abbreviation.\n *\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n *\n * @constructor\n * @memberOf __trimFilterDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    require('preferences').define('filter.trimRegexp', '[\\\\s|\\\\u00a0]*[\\\\d|#|\\\\-|\\*|\\\\u2022]+\\\\.?\\\\s*',\n        'Regular expression used to remove list markers (numbers, dashes, '\n        + 'bullets, etc.) in <code>t</code> (trim) filter. The trim filter '\n        + 'is useful for wrapping with abbreviation lists, pased from other '\n        + 'documents (for example, Word documents).');\n\n    function process(tree, re) {\n        _.each(tree.children, function(item) {\n            if (item.content)\n                item.content = item.content.replace(re, '');\n\n            process(item, re);\n        });\n\n        return tree;\n    }\n\n    require('filters').add('t', function(tree) {\n        var re = new RegExp(require('preferences').get('filter.trimRegexp'));\n        return process(tree, re);\n    });\n});\n/**\n * Filter for trimming \"select\" attributes from some tags that contains\n * child elements\n * @author Sergey Chikuyonok (serge.che@gmail.com)\n * @link http://chikuyonok.ru\n *\n * @constructor\n * @memberOf __xslFilterDefine\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.exec(function(require, _) {\n    var tags = {\n        'xsl:variable': 1,\n        'xsl:with-param': 1\n    };\n\n    /**\n     * Removes \"select\" attribute from node\n     * @param {AbbreviationNode} node\n     */\n    function trimAttribute(node) {\n        node.start = node.start.replace(/\\s+select\\s*=\\s*(['\"]).*?\\1/, '');\n    }\n\n    require('filters').add('xsl', function process(tree) {\n        var abbrUtils = require('abbreviationUtils');\n        _.each(tree.children, function(item) {\n            if (!abbrUtils.isSnippet(item)\n                && (item.name() || '').toLowerCase() in tags\n                && item.children.length)\n                trimAttribute(item);\n            process(item);\n        });\n\n        return tree;\n    });\n});/**\n * \"Lorem ipsum\" text generator. Matches <code>lipsum(num)?</code> or\n * <code>lorem(num)?</code> abbreviation.\n * This code is based on Django's contribution:\n * https://code.djangoproject.com/browser/django/trunk/django/contrib/webdesign/lorem_ipsum.py\n * <br><br>\n * Examples to test:<br>\n * <code>lipsum</code> – generates 30 words text.<br>\n * <code>lipsum*6</code> – generates 6 paragraphs (autowrapped with &lt;p&gt; element) of text.<br>\n * <code>ol>lipsum10*5</code> — generates ordered list with 5 list items (autowrapped with &lt;li&gt; tag)\n * with text of 10 words on each line<br>\n * <code>span*3>lipsum20</code> – generates 3 paragraphs of 20-words text, each wrapped with &lt;span&gt; element .\n * Each paragraph phrase is unique\n * @param {Function} require\n * @param {Underscore} _\n * @constructor\n * @memberOf __loremIpsumGeneratorDefine\n */\nemmet.define('lorem', function(require, _) {\n    var langs = {\n        en: {\n            common: ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipisicing', 'elit'],\n            words: ['exercitationem', 'perferendis', 'perspiciatis', 'laborum', 'eveniet',\n                'sunt', 'iure', 'nam', 'nobis', 'eum', 'cum', 'officiis', 'excepturi',\n                'odio', 'consectetur', 'quasi', 'aut', 'quisquam', 'vel', 'eligendi',\n                'itaque', 'non', 'odit', 'tempore', 'quaerat', 'dignissimos',\n                'facilis', 'neque', 'nihil', 'expedita', 'vitae', 'vero', 'ipsum',\n                'nisi', 'animi', 'cumque', 'pariatur', 'velit', 'modi', 'natus',\n                'iusto', 'eaque', 'sequi', 'illo', 'sed', 'ex', 'et', 'voluptatibus',\n                'tempora', 'veritatis', 'ratione', 'assumenda', 'incidunt', 'nostrum',\n                'placeat', 'aliquid', 'fuga', 'provident', 'praesentium', 'rem',\n                'necessitatibus', 'suscipit', 'adipisci', 'quidem', 'possimus',\n                'voluptas', 'debitis', 'sint', 'accusantium', 'unde', 'sapiente',\n                'voluptate', 'qui', 'aspernatur', 'laudantium', 'soluta', 'amet',\n                'quo', 'aliquam', 'saepe', 'culpa', 'libero', 'ipsa', 'dicta',\n                'reiciendis', 'nesciunt', 'doloribus', 'autem', 'impedit', 'minima',\n                'maiores', 'repudiandae', 'ipsam', 'obcaecati', 'ullam', 'enim',\n                'totam', 'delectus', 'ducimus', 'quis', 'voluptates', 'dolores',\n                'molestiae', 'harum', 'dolorem', 'quia', 'voluptatem', 'molestias',\n                'magni', 'distinctio', 'omnis', 'illum', 'dolorum', 'voluptatum', 'ea',\n                'quas', 'quam', 'corporis', 'quae', 'blanditiis', 'atque', 'deserunt',\n                'laboriosam', 'earum', 'consequuntur', 'hic', 'cupiditate',\n                'quibusdam', 'accusamus', 'ut', 'rerum', 'error', 'minus', 'eius',\n                'ab', 'ad', 'nemo', 'fugit', 'officia', 'at', 'in', 'id', 'quos',\n                'reprehenderit', 'numquam', 'iste', 'fugiat', 'sit', 'inventore',\n                'beatae', 'repellendus', 'magnam', 'recusandae', 'quod', 'explicabo',\n                'doloremque', 'aperiam', 'consequatur', 'asperiores', 'commodi',\n                'optio', 'dolor', 'labore', 'temporibus', 'repellat', 'veniam',\n                'architecto', 'est', 'esse', 'mollitia', 'nulla', 'a', 'similique',\n                'eos', 'alias', 'dolore', 'tenetur', 'deleniti', 'porro', 'facere',\n                'maxime', 'corrupti']\n        },\n        ru: {\n            common: ['далеко-далеко', 'за', 'словесными', 'горами', 'в стране', 'гласных', 'и согласных', 'живут', 'рыбные', 'тексты'],\n            words: ['вдали', 'от всех', 'они', 'буквенных', 'домах', 'на берегу', 'семантика',\n                'большого', 'языкового', 'океана', 'маленький', 'ручеек', 'даль',\n                'журчит', 'по всей', 'обеспечивает', 'ее','всеми', 'необходимыми',\n                'правилами', 'эта', 'парадигматическая', 'страна', 'которой', 'жаренные',\n                'предложения', 'залетают', 'прямо', 'рот', 'даже', 'всемогущая',\n                'пунктуация', 'не', 'имеет', 'власти', 'над', 'рыбными', 'текстами',\n                'ведущими', 'безорфографичный', 'образ', 'жизни', 'однажды', 'одна',\n                'маленькая', 'строчка','рыбного', 'текста', 'имени', 'lorem', 'ipsum',\n                'решила', 'выйти', 'большой', 'мир', 'грамматики', 'великий', 'оксмокс',\n                'предупреждал', 'о', 'злых', 'запятых', 'диких', 'знаках', 'вопроса',\n                'коварных', 'точках', 'запятой', 'но', 'текст', 'дал', 'сбить',\n                'себя', 'толку', 'он', 'собрал', 'семь', 'своих', 'заглавных', 'букв',\n                'подпоясал', 'инициал', 'за', 'пояс', 'пустился', 'дорогу',\n                'взобравшись', 'первую', 'вершину', 'курсивных', 'гор', 'бросил',\n                'последний', 'взгляд', 'назад', 'силуэт', 'своего', 'родного', 'города',\n                'буквоград', 'заголовок', 'деревни', 'алфавит', 'подзаголовок', 'своего',\n                'переулка', 'грустный', 'реторический', 'вопрос', 'скатился', 'его',\n                'щеке', 'продолжил', 'свой', 'путь', 'дороге', 'встретил', 'рукопись',\n                'она', 'предупредила',  'моей', 'все', 'переписывается', 'несколько',\n                'раз', 'единственное', 'что', 'меня', 'осталось', 'это', 'приставка',\n                'возвращайся', 'ты', 'лучше', 'свою', 'безопасную', 'страну', 'послушавшись',\n                'рукописи', 'наш', 'продолжил', 'свой', 'путь', 'вскоре', 'ему',\n                'повстречался', 'коварный', 'составитель', 'рекламных', 'текстов',\n                'напоивший', 'языком', 'речью', 'заманивший', 'свое', 'агенство',\n                'которое', 'использовало', 'снова', 'снова', 'своих', 'проектах',\n                'если', 'переписали', 'то', 'живет', 'там', 'до', 'сих', 'пор']\n        }\n    };\n\n    var prefs = require('preferences');\n    prefs.define('lorem.defaultLang', 'en');\n\n    /**\n     * @param {AbbreviationNode} tree\n     * @param {Object} options\n     */\n    require('abbreviationParser').addPreprocessor(function(tree, options) {\n        var re = /^(?:lorem|lipsum)([a-z]{2})?(\\d*)$/i, match;\n\n        /** @param {AbbreviationNode} node */\n        tree.findAll(function(node) {\n            if (node._name && (match = node._name.match(re))) {\n                var wordCound = match[2] || 30;\n                var lang = match[1] || prefs.get('lorem.defaultLang') || 'en';\n\n                // force node name resolving if node should be repeated\n                // or contains attributes. In this case, node should be outputed\n                // as tag, otherwise as text-only node\n                node._name = '';\n                node.data('forceNameResolving', node.isRepeating() || node.attributeList().length);\n                node.data('pasteOverwrites', true);\n                node.data('paste', function(i, content) {\n                    return paragraph(lang, wordCound, !i);\n                });\n            }\n        });\n    });\n\n    /**\n     * Returns random integer between <code>from</code> and <code>to</code> values\n     * @param {Number} from\n     * @param {Number} to\n     * @returns {Number}\n     */\n    function randint(from, to) {\n        return Math.round(Math.random() * (to - from) + from);\n    }\n\n    /**\n     * @param {Array} arr\n     * @param {Number} count\n     * @returns {Array}\n     */\n    function sample(arr, count) {\n        var len = arr.length;\n        var iterations = Math.min(len, count);\n        var result = [];\n        while (result.length < iterations) {\n            var randIx = randint(0, len - 1);\n            if (!_.include(result, randIx))\n                result.push(randIx);\n        }\n\n        return _.map(result, function(ix) {\n            return arr[ix];\n        });\n    }\n\n    function choice(val) {\n        if (_.isString(val))\n            return val.charAt(randint(0, val.length - 1));\n\n        return val[randint(0, val.length - 1)];\n    }\n\n    function sentence(words, end) {\n        if (words.length) {\n            words[0] = words[0].charAt(0).toUpperCase() + words[0].substring(1);\n        }\n\n        return words.join(' ') + (end || choice('?!...')); // more dots that question marks\n    }\n\n    /**\n     * Insert commas at randomly selected words. This function modifies values\n     * inside <code>words</code> array\n     * @param {Array} words\n     */\n    function insertCommas(words) {\n        var len = words.length;\n        var totalCommas = 0;\n\n        if (len > 3 && len <= 6) {\n            totalCommas = randint(0, 1);\n        } else if (len > 6 && len <= 12) {\n            totalCommas = randint(0, 2);\n        } else {\n            totalCommas = randint(1, 4);\n        }\n\n        _.each(_.range(totalCommas), function(ix) {\n            if (ix < words.length - 1) {\n                words[ix] += ',';\n            }\n        });\n    }\n\n    /**\n     * Generate a paragraph of \"Lorem ipsum\" text\n     * @param {Number} wordCount Words count in paragraph\n     * @param {Boolean} startWithCommon Should paragraph start with common\n     * \"lorem ipsum\" sentence.\n     * @returns {String}\n     */\n    function paragraph(lang, wordCount, startWithCommon) {\n        var data = langs[lang];\n        if (!data) {\n            return '';\n        }\n\n        var result = [];\n        var totalWords = 0;\n        var words;\n\n        wordCount = parseInt(wordCount, 10);\n\n        if (startWithCommon && data.common) {\n            words = data.common.slice(0, wordCount);\n            if (words.length > 5)\n                words[4] += ',';\n            totalWords += words.length;\n            result.push(sentence(words, '.'));\n        }\n\n        while (totalWords < wordCount) {\n            words = sample(data.words, Math.min(randint(3, 12) * randint(1, 5), wordCount - totalWords));\n            totalWords += words.length;\n            insertCommas(words);\n            result.push(sentence(words));\n        }\n\n        return result.join(' ');\n    }\n\n    return {\n        /**\n         * Adds new language words for Lorem Ipsum generator\n         * @param {String} lang Two-letter lang definition\n         * @param {Object} data Words for language. Maight be either a space-separated\n         * list of words (String), Array of words or object with <code>text</code> and\n         * <code>common</code> properties\n         */\n        addLang: function(lang, data) {\n            if (_.isString(data)) {\n                data = {words: _.compact(data.split(' '))};\n            } else if (_.isArray(data)) {\n                data = {words: data};\n            }\n\n            langs[lang] = data;\n        }\n    }\n});/**\n * A back-end bootstrap module with commonly used methods for loading user data\n * @param {Function} require\n * @param {Underscore} _\n */\nemmet.define('bootstrap', function(require, _) {\n    var snippets = {\n            \"variables\": {\n                \"lang\": \"en\",\n                \"locale\": \"en-US\",\n                \"charset\": \"UTF-8\",\n                \"indentation\": \"\\t\",\n                \"newline\": \"\\n\"\n            },\n\n            \"css\": {\n                \"filters\": \"html\",\n                \"snippets\": {\n                    \"@i\": \"@import url(|);\",\n                    \"@import\": \"@import url(|);\",\n                    \"@m\": \"@media ${1:screen} {\\n\\t|\\n}\",\n                    \"@media\": \"@media ${1:screen} {\\n\\t|\\n}\",\n                    \"@f\": \"@font-face {\\n\\tfont-family:|;\\n\\tsrc:url(|);\\n}\",\n                    \"@f+\": \"@font-face {\\n\\tfont-family: '${1:FontName}';\\n\\tsrc: url('${2:FileName}.eot');\\n\\tsrc: url('${2:FileName}.eot?#iefix') format('embedded-opentype'),\\n\\t\\t url('${2:FileName}.woff') format('woff'),\\n\\t\\t url('${2:FileName}.ttf') format('truetype'),\\n\\t\\t url('${2:FileName}.svg#${1:FontName}') format('svg');\\n\\tfont-style: ${3:normal};\\n\\tfont-weight: ${4:normal};\\n}\",\n\n                    \"@kf\": \"@-webkit-keyframes ${1:identifier} {\\n\\t${2:from} { ${3} }${6}\\n\\t${4:to} { ${5} }\\n}\\n@-o-keyframes ${1:identifier} {\\n\\t${2:from} { ${3} }${6}\\n\\t${4:to} { ${5} }\\n}\\n@-moz-keyframes ${1:identifier} {\\n\\t${2:from} { ${3} }${6}\\n\\t${4:to} { ${5} }\\n}\\n@keyframes ${1:identifier} {\\n\\t${2:from} { ${3} }${6}\\n\\t${4:to} { ${5} }\\n}\",\n\n\n                    \"anim\": \"animation:|;\",\n                    \"anim-\": \"animation:${1:name} ${2:duration} ${3:timing-function} ${4:delay} ${5:iteration-count} ${6:direction} ${7:fill-mode};\",\n                    \"animdel\": \"animation-delay:${1:time};\",\n\n                    \"animdir\": \"animation-direction:${1:normal};\",\n                    \"animdir:n\": \"animation-direction:normal;\",\n                    \"animdir:r\": \"animation-direction:reverse;\",\n                    \"animdir:a\": \"animation-direction:alternate;\",\n                    \"animdir:ar\": \"animation-direction:alternate-reverse;\",\n\n                    \"animdur\": \"animation-duration:${1:0}s;\",\n\n                    \"animfm\": \"animation-fill-mode:${1:both};\",\n                    \"animfm:f\": \"animation-fill-mode:forwards;\",\n                    \"animfm:b\": \"animation-fill-mode:backwards;\",\n                    \"animfm:bt\": \"animation-fill-mode:both;\",\n                    \"animfm:bh\": \"animation-fill-mode:both;\",\n\n                    \"animic\": \"animation-iteration-count:${1:1};\",\n                    \"animic:i\": \"animation-iteration-count:infinite;\",\n\n                    \"animn\": \"animation-name:${1:none};\",\n\n                    \"animps\": \"animation-play-state:${1:running};\",\n                    \"animps:p\": \"animation-play-state:paused;\",\n                    \"animps:r\": \"animation-play-state:running;\",\n\n                    \"animtf\": \"animation-timing-function:${1:linear};\",\n                    \"animtf:e\": \"animation-timing-function:ease;\",\n                    \"animtf:ei\": \"animation-timing-function:ease-in;\",\n                    \"animtf:eo\": \"animation-timing-function:ease-out;\",\n                    \"animtf:eio\": \"animation-timing-function:ease-in-out;\",\n                    \"animtf:l\": \"animation-timing-function:linear;\",\n                    \"animtf:cb\": \"animation-timing-function:cubic-bezier(${1:0.1}, ${2:0.7}, ${3:1.0}, ${3:0.1});\",\n\n                    \"ap\": \"appearance:${none};\",\n\n                    \"!\": \"!important\",\n                    \"pos\": \"position:${1:relative};\",\n                    \"pos:s\": \"position:static;\",\n                    \"pos:a\": \"position:absolute;\",\n                    \"pos:r\": \"position:relative;\",\n                    \"pos:f\": \"position:fixed;\",\n                    \"t\": \"top:|;\",\n                    \"t:a\": \"top:auto;\",\n                    \"r\": \"right:|;\",\n                    \"r:a\": \"right:auto;\",\n                    \"b\": \"bottom:|;\",\n                    \"b:a\": \"bottom:auto;\",\n                    \"l\": \"left:|;\",\n                    \"l:a\": \"left:auto;\",\n                    \"z\": \"z-index:|;\",\n                    \"z:a\": \"z-index:auto;\",\n                    \"fl\": \"float:${1:left};\",\n                    \"fl:n\": \"float:none;\",\n                    \"fl:l\": \"float:left;\",\n                    \"fl:r\": \"float:right;\",\n                    \"cl\": \"clear:${1:both};\",\n                    \"cl:n\": \"clear:none;\",\n                    \"cl:l\": \"clear:left;\",\n                    \"cl:r\": \"clear:right;\",\n                    \"cl:b\": \"clear:both;\",\n\n                    \"colm\": \"columns:|;\",\n                    \"colmc\": \"column-count:|;\",\n                    \"colmf\": \"column-fill:|;\",\n                    \"colmg\": \"column-gap:|;\",\n                    \"colmr\": \"column-rule:|;\",\n                    \"colmrc\": \"column-rule-color:|;\",\n                    \"colmrs\": \"column-rule-style:|;\",\n                    \"colmrw\": \"column-rule-width:|;\",\n                    \"colms\": \"column-span:|;\",\n                    \"colmw\": \"column-width:|;\",\n\n                    \"d\": \"display:${1:block};\",\n                    \"d:n\": \"display:none;\",\n                    \"d:b\": \"display:block;\",\n                    \"d:i\": \"display:inline;\",\n                    \"d:ib\": \"display:inline-block;\",\n                    \"d:ib+\": \"display: inline-block;\\n*display: inline;\\n*zoom: 1;\",\n                    \"d:li\": \"display:list-item;\",\n                    \"d:ri\": \"display:run-in;\",\n                    \"d:cp\": \"display:compact;\",\n                    \"d:tb\": \"display:table;\",\n                    \"d:itb\": \"display:inline-table;\",\n                    \"d:tbcp\": \"display:table-caption;\",\n                    \"d:tbcl\": \"display:table-column;\",\n                    \"d:tbclg\": \"display:table-column-group;\",\n                    \"d:tbhg\": \"display:table-header-group;\",\n                    \"d:tbfg\": \"display:table-footer-group;\",\n                    \"d:tbr\": \"display:table-row;\",\n                    \"d:tbrg\": \"display:table-row-group;\",\n                    \"d:tbc\": \"display:table-cell;\",\n                    \"d:rb\": \"display:ruby;\",\n                    \"d:rbb\": \"display:ruby-base;\",\n                    \"d:rbbg\": \"display:ruby-base-group;\",\n                    \"d:rbt\": \"display:ruby-text;\",\n                    \"d:rbtg\": \"display:ruby-text-group;\",\n                    \"v\": \"visibility:${1:hidden};\",\n                    \"v:v\": \"visibility:visible;\",\n                    \"v:h\": \"visibility:hidden;\",\n                    \"v:c\": \"visibility:collapse;\",\n                    \"ov\": \"overflow:${1:hidden};\",\n                    \"ov:v\": \"overflow:visible;\",\n                    \"ov:h\": \"overflow:hidden;\",\n                    \"ov:s\": \"overflow:scroll;\",\n                    \"ov:a\": \"overflow:auto;\",\n                    \"ovx\": \"overflow-x:${1:hidden};\",\n                    \"ovx:v\": \"overflow-x:visible;\",\n                    \"ovx:h\": \"overflow-x:hidden;\",\n                    \"ovx:s\": \"overflow-x:scroll;\",\n                    \"ovx:a\": \"overflow-x:auto;\",\n                    \"ovy\": \"overflow-y:${1:hidden};\",\n                    \"ovy:v\": \"overflow-y:visible;\",\n                    \"ovy:h\": \"overflow-y:hidden;\",\n                    \"ovy:s\": \"overflow-y:scroll;\",\n                    \"ovy:a\": \"overflow-y:auto;\",\n                    \"ovs\": \"overflow-style:${1:scrollbar};\",\n                    \"ovs:a\": \"overflow-style:auto;\",\n                    \"ovs:s\": \"overflow-style:scrollbar;\",\n                    \"ovs:p\": \"overflow-style:panner;\",\n                    \"ovs:m\": \"overflow-style:move;\",\n                    \"ovs:mq\": \"overflow-style:marquee;\",\n                    \"zoo\": \"zoom:1;\",\n                    \"zm\": \"zoom:1;\",\n                    \"cp\": \"clip:|;\",\n                    \"cp:a\": \"clip:auto;\",\n                    \"cp:r\": \"clip:rect(${1:top} ${2:right} ${3:bottom} ${4:left});\",\n                    \"bxz\": \"box-sizing:${1:border-box};\",\n                    \"bxz:cb\": \"box-sizing:content-box;\",\n                    \"bxz:bb\": \"box-sizing:border-box;\",\n                    \"bxsh\": \"box-shadow:${1:inset }${2:hoff} ${3:voff} ${4:blur} ${5:color};\",\n                    \"bxsh:r\": \"box-shadow:${1:inset }${2:hoff} ${3:voff} ${4:blur} ${5:spread }rgb(${6:0}, ${7:0}, ${8:0});\",\n                    \"bxsh:ra\": \"box-shadow:${1:inset }${2:h} ${3:v} ${4:blur} ${5:spread }rgba(${6:0}, ${7:0}, ${8:0}, .${9:5});\",\n                    \"bxsh:n\": \"box-shadow:none;\",\n                    \"m\": \"margin:|;\",\n                    \"m:a\": \"margin:auto;\",\n                    \"mt\": \"margin-top:|;\",\n                    \"mt:a\": \"margin-top:auto;\",\n                    \"mr\": \"margin-right:|;\",\n                    \"mr:a\": \"margin-right:auto;\",\n                    \"mb\": \"margin-bottom:|;\",\n                    \"mb:a\": \"margin-bottom:auto;\",\n                    \"ml\": \"margin-left:|;\",\n                    \"ml:a\": \"margin-left:auto;\",\n                    \"p\": \"padding:|;\",\n                    \"pt\": \"padding-top:|;\",\n                    \"pr\": \"padding-right:|;\",\n                    \"pb\": \"padding-bottom:|;\",\n                    \"pl\": \"padding-left:|;\",\n                    \"w\": \"width:|;\",\n                    \"w:a\": \"width:auto;\",\n                    \"h\": \"height:|;\",\n                    \"h:a\": \"height:auto;\",\n                    \"maw\": \"max-width:|;\",\n                    \"maw:n\": \"max-width:none;\",\n                    \"mah\": \"max-height:|;\",\n                    \"mah:n\": \"max-height:none;\",\n                    \"miw\": \"min-width:|;\",\n                    \"mih\": \"min-height:|;\",\n                    \"mar\": \"max-resolution:${1:res};\",\n                    \"mir\": \"min-resolution:${1:res};\",\n                    \"ori\": \"orientation:|;\",\n                    \"ori:l\": \"orientation:landscape;\",\n                    \"ori:p\": \"orientation:portrait;\",\n                    \"ol\": \"outline:|;\",\n                    \"ol:n\": \"outline:none;\",\n                    \"olo\": \"outline-offset:|;\",\n                    \"olw\": \"outline-width:|;\",\n                    \"olw:tn\": \"outline-width:thin;\",\n                    \"olw:m\": \"outline-width:medium;\",\n                    \"olw:tc\": \"outline-width:thick;\",\n                    \"ols\": \"outline-style:|;\",\n                    \"ols:n\": \"outline-style:none;\",\n                    \"ols:dt\": \"outline-style:dotted;\",\n                    \"ols:ds\": \"outline-style:dashed;\",\n                    \"ols:s\": \"outline-style:solid;\",\n                    \"ols:db\": \"outline-style:double;\",\n                    \"ols:g\": \"outline-style:groove;\",\n                    \"ols:r\": \"outline-style:ridge;\",\n                    \"ols:i\": \"outline-style:inset;\",\n                    \"ols:o\": \"outline-style:outset;\",\n                    \"olc\": \"outline-color:#${1:000};\",\n                    \"olc:i\": \"outline-color:invert;\",\n                    \"bd\": \"border:|;\",\n                    \"bd+\": \"border:${1:1px} ${2:solid} ${3:#000};\",\n                    \"bd:n\": \"border:none;\",\n                    \"bdbk\": \"border-break:${1:close};\",\n                    \"bdbk:c\": \"border-break:close;\",\n                    \"bdcl\": \"border-collapse:|;\",\n                    \"bdcl:c\": \"border-collapse:collapse;\",\n                    \"bdcl:s\": \"border-collapse:separate;\",\n                    \"bdc\": \"border-color:#${1:000};\",\n                    \"bdc:t\": \"border-color:transparent;\",\n                    \"bdi\": \"border-image:url(|);\",\n                    \"bdi:n\": \"border-image:none;\",\n                    \"bdti\": \"border-top-image:url(|);\",\n                    \"bdti:n\": \"border-top-image:none;\",\n                    \"bdri\": \"border-right-image:url(|);\",\n                    \"bdri:n\": \"border-right-image:none;\",\n                    \"bdbi\": \"border-bottom-image:url(|);\",\n                    \"bdbi:n\": \"border-bottom-image:none;\",\n                    \"bdli\": \"border-left-image:url(|);\",\n                    \"bdli:n\": \"border-left-image:none;\",\n                    \"bdci\": \"border-corner-image:url(|);\",\n                    \"bdci:n\": \"border-corner-image:none;\",\n                    \"bdci:c\": \"border-corner-image:continue;\",\n                    \"bdtli\": \"border-top-left-image:url(|);\",\n                    \"bdtli:n\": \"border-top-left-image:none;\",\n                    \"bdtli:c\": \"border-top-left-image:continue;\",\n                    \"bdtri\": \"border-top-right-image:url(|);\",\n                    \"bdtri:n\": \"border-top-right-image:none;\",\n                    \"bdtri:c\": \"border-top-right-image:continue;\",\n                    \"bdbri\": \"border-bottom-right-image:url(|);\",\n                    \"bdbri:n\": \"border-bottom-right-image:none;\",\n                    \"bdbri:c\": \"border-bottom-right-image:continue;\",\n                    \"bdbli\": \"border-bottom-left-image:url(|);\",\n                    \"bdbli:n\": \"border-bottom-left-image:none;\",\n                    \"bdbli:c\": \"border-bottom-left-image:continue;\",\n                    \"bdf\": \"border-fit:${1:repeat};\",\n                    \"bdf:c\": \"border-fit:clip;\",\n                    \"bdf:r\": \"border-fit:repeat;\",\n                    \"bdf:sc\": \"border-fit:scale;\",\n                    \"bdf:st\": \"border-fit:stretch;\",\n                    \"bdf:ow\": \"border-fit:overwrite;\",\n                    \"bdf:of\": \"border-fit:overflow;\",\n                    \"bdf:sp\": \"border-fit:space;\",\n                    \"bdlen\": \"border-length:|;\",\n                    \"bdlen:a\": \"border-length:auto;\",\n                    \"bdsp\": \"border-spacing:|;\",\n                    \"bds\": \"border-style:|;\",\n                    \"bds:n\": \"border-style:none;\",\n                    \"bds:h\": \"border-style:hidden;\",\n                    \"bds:dt\": \"border-style:dotted;\",\n                    \"bds:ds\": \"border-style:dashed;\",\n                    \"bds:s\": \"border-style:solid;\",\n                    \"bds:db\": \"border-style:double;\",\n                    \"bds:dtds\": \"border-style:dot-dash;\",\n                    \"bds:dtdtds\": \"border-style:dot-dot-dash;\",\n                    \"bds:w\": \"border-style:wave;\",\n                    \"bds:g\": \"border-style:groove;\",\n                    \"bds:r\": \"border-style:ridge;\",\n                    \"bds:i\": \"border-style:inset;\",\n                    \"bds:o\": \"border-style:outset;\",\n                    \"bdw\": \"border-width:|;\",\n                    \"bdtw\": \"border-top-width:|;\",\n                    \"bdrw\": \"border-right-width:|;\",\n                    \"bdbw\": \"border-bottom-width:|;\",\n                    \"bdlw\": \"border-left-width:|;\",\n                    \"bdt\": \"border-top:|;\",\n                    \"bt\": \"border-top:|;\",\n                    \"bdt+\": \"border-top:${1:1px} ${2:solid} ${3:#000};\",\n                    \"bdt:n\": \"border-top:none;\",\n                    \"bdts\": \"border-top-style:|;\",\n                    \"bdts:n\": \"border-top-style:none;\",\n                    \"bdtc\": \"border-top-color:#${1:000};\",\n                    \"bdtc:t\": \"border-top-color:transparent;\",\n                    \"bdr\": \"border-right:|;\",\n                    \"br\": \"border-right:|;\",\n                    \"bdr+\": \"border-right:${1:1px} ${2:solid} ${3:#000};\",\n                    \"bdr:n\": \"border-right:none;\",\n                    \"bdrst\": \"border-right-style:|;\",\n                    \"bdrst:n\": \"border-right-style:none;\",\n                    \"bdrc\": \"border-right-color:#${1:000};\",\n                    \"bdrc:t\": \"border-right-color:transparent;\",\n                    \"bdb\": \"border-bottom:|;\",\n                    \"bb\": \"border-bottom:|;\",\n                    \"bdb+\": \"border-bottom:${1:1px} ${2:solid} ${3:#000};\",\n                    \"bdb:n\": \"border-bottom:none;\",\n                    \"bdbs\": \"border-bottom-style:|;\",\n                    \"bdbs:n\": \"border-bottom-style:none;\",\n                    \"bdbc\": \"border-bottom-color:#${1:000};\",\n                    \"bdbc:t\": \"border-bottom-color:transparent;\",\n                    \"bdl\": \"border-left:|;\",\n                    \"bl\": \"border-left:|;\",\n                    \"bdl+\": \"border-left:${1:1px} ${2:solid} ${3:#000};\",\n                    \"bdl:n\": \"border-left:none;\",\n                    \"bdls\": \"border-left-style:|;\",\n                    \"bdls:n\": \"border-left-style:none;\",\n                    \"bdlc\": \"border-left-color:#${1:000};\",\n                    \"bdlc:t\": \"border-left-color:transparent;\",\n                    \"bdrs\": \"border-radius:|;\",\n                    \"bdtrrs\": \"border-top-right-radius:|;\",\n                    \"bdtlrs\": \"border-top-left-radius:|;\",\n                    \"bdbrrs\": \"border-bottom-right-radius:|;\",\n                    \"bdblrs\": \"border-bottom-left-radius:|;\",\n                    \"bg\": \"background:#${1:000};\",\n                    \"bg+\": \"background:${1:#fff} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\",\n                    \"bg:n\": \"background:none;\",\n                    \"bg:ie\": \"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1:x}.png',sizingMethod='${2:crop}');\",\n                    \"bgc\": \"background-color:#${1:fff};\",\n                    \"bgc:t\": \"background-color:transparent;\",\n                    \"bgi\": \"background-image:url(|);\",\n                    \"bgi:n\": \"background-image:none;\",\n                    \"bgr\": \"background-repeat:|;\",\n                    \"bgr:n\": \"background-repeat:no-repeat;\",\n                    \"bgr:x\": \"background-repeat:repeat-x;\",\n                    \"bgr:y\": \"background-repeat:repeat-y;\",\n                    \"bgr:sp\": \"background-repeat:space;\",\n                    \"bgr:rd\": \"background-repeat:round;\",\n                    \"bga\": \"background-attachment:|;\",\n                    \"bga:f\": \"background-attachment:fixed;\",\n                    \"bga:s\": \"background-attachment:scroll;\",\n                    \"bgp\": \"background-position:${1:0} ${2:0};\",\n                    \"bgpx\": \"background-position-x:|;\",\n                    \"bgpy\": \"background-position-y:|;\",\n                    \"bgbk\": \"background-break:|;\",\n                    \"bgbk:bb\": \"background-break:bounding-box;\",\n                    \"bgbk:eb\": \"background-break:each-box;\",\n                    \"bgbk:c\": \"background-break:continuous;\",\n                    \"bgcp\": \"background-clip:${1:padding-box};\",\n                    \"bgcp:bb\": \"background-clip:border-box;\",\n                    \"bgcp:pb\": \"background-clip:padding-box;\",\n                    \"bgcp:cb\": \"background-clip:content-box;\",\n                    \"bgcp:nc\": \"background-clip:no-clip;\",\n                    \"bgo\": \"background-origin:|;\",\n                    \"bgo:pb\": \"background-origin:padding-box;\",\n                    \"bgo:bb\": \"background-origin:border-box;\",\n                    \"bgo:cb\": \"background-origin:content-box;\",\n                    \"bgsz\": \"background-size:|;\",\n                    \"bgsz:a\": \"background-size:auto;\",\n                    \"bgsz:ct\": \"background-size:contain;\",\n                    \"bgsz:cv\": \"background-size:cover;\",\n                    \"c\": \"color:#${1:000};\",\n                    \"c:r\": \"color:rgb(${1:0}, ${2:0}, ${3:0});\",\n                    \"c:ra\": \"color:rgba(${1:0}, ${2:0}, ${3:0}, .${4:5});\",\n                    \"cm\": \"/* |${child} */\",\n                    \"cnt\": \"content:'|';\",\n                    \"cnt:n\": \"content:normal;\",\n                    \"cnt:oq\": \"content:open-quote;\",\n                    \"cnt:noq\": \"content:no-open-quote;\",\n                    \"cnt:cq\": \"content:close-quote;\",\n                    \"cnt:ncq\": \"content:no-close-quote;\",\n                    \"cnt:a\": \"content:attr(|);\",\n                    \"cnt:c\": \"content:counter(|);\",\n                    \"cnt:cs\": \"content:counters(|);\",\n\n\n                    \"tbl\": \"table-layout:|;\",\n                    \"tbl:a\": \"table-layout:auto;\",\n                    \"tbl:f\": \"table-layout:fixed;\",\n                    \"cps\": \"caption-side:|;\",\n                    \"cps:t\": \"caption-side:top;\",\n                    \"cps:b\": \"caption-side:bottom;\",\n                    \"ec\": \"empty-cells:|;\",\n                    \"ec:s\": \"empty-cells:show;\",\n                    \"ec:h\": \"empty-cells:hide;\",\n                    \"lis\": \"list-style:|;\",\n                    \"lis:n\": \"list-style:none;\",\n                    \"lisp\": \"list-style-position:|;\",\n                    \"lisp:i\": \"list-style-position:inside;\",\n                    \"lisp:o\": \"list-style-position:outside;\",\n                    \"list\": \"list-style-type:|;\",\n                    \"list:n\": \"list-style-type:none;\",\n                    \"list:d\": \"list-style-type:disc;\",\n                    \"list:c\": \"list-style-type:circle;\",\n                    \"list:s\": \"list-style-type:square;\",\n                    \"list:dc\": \"list-style-type:decimal;\",\n                    \"list:dclz\": \"list-style-type:decimal-leading-zero;\",\n                    \"list:lr\": \"list-style-type:lower-roman;\",\n                    \"list:ur\": \"list-style-type:upper-roman;\",\n                    \"lisi\": \"list-style-image:|;\",\n                    \"lisi:n\": \"list-style-image:none;\",\n                    \"q\": \"quotes:|;\",\n                    \"q:n\": \"quotes:none;\",\n                    \"q:ru\": \"quotes:'\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C';\",\n                    \"q:en\": \"quotes:'\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019';\",\n                    \"ct\": \"content:|;\",\n                    \"ct:n\": \"content:normal;\",\n                    \"ct:oq\": \"content:open-quote;\",\n                    \"ct:noq\": \"content:no-open-quote;\",\n                    \"ct:cq\": \"content:close-quote;\",\n                    \"ct:ncq\": \"content:no-close-quote;\",\n                    \"ct:a\": \"content:attr(|);\",\n                    \"ct:c\": \"content:counter(|);\",\n                    \"ct:cs\": \"content:counters(|);\",\n                    \"coi\": \"counter-increment:|;\",\n                    \"cor\": \"counter-reset:|;\",\n                    \"va\": \"vertical-align:${1:top};\",\n                    \"va:sup\": \"vertical-align:super;\",\n                    \"va:t\": \"vertical-align:top;\",\n                    \"va:tt\": \"vertical-align:text-top;\",\n                    \"va:m\": \"vertical-align:middle;\",\n                    \"va:bl\": \"vertical-align:baseline;\",\n                    \"va:b\": \"vertical-align:bottom;\",\n                    \"va:tb\": \"vertical-align:text-bottom;\",\n                    \"va:sub\": \"vertical-align:sub;\",\n                    \"ta\": \"text-align:${1:left};\",\n                    \"ta:l\": \"text-align:left;\",\n                    \"ta:c\": \"text-align:center;\",\n                    \"ta:r\": \"text-align:right;\",\n                    \"ta:j\": \"text-align:justify;\",\n                    \"ta-lst\": \"text-align-last:|;\",\n                    \"tal:a\": \"text-align-last:auto;\",\n                    \"tal:l\": \"text-align-last:left;\",\n                    \"tal:c\": \"text-align-last:center;\",\n                    \"tal:r\": \"text-align-last:right;\",\n                    \"td\": \"text-decoration:${1:none};\",\n                    \"td:n\": \"text-decoration:none;\",\n                    \"td:u\": \"text-decoration:underline;\",\n                    \"td:o\": \"text-decoration:overline;\",\n                    \"td:l\": \"text-decoration:line-through;\",\n                    \"te\": \"text-emphasis:|;\",\n                    \"te:n\": \"text-emphasis:none;\",\n                    \"te:ac\": \"text-emphasis:accent;\",\n                    \"te:dt\": \"text-emphasis:dot;\",\n                    \"te:c\": \"text-emphasis:circle;\",\n                    \"te:ds\": \"text-emphasis:disc;\",\n                    \"te:b\": \"text-emphasis:before;\",\n                    \"te:a\": \"text-emphasis:after;\",\n                    \"th\": \"text-height:|;\",\n                    \"th:a\": \"text-height:auto;\",\n                    \"th:f\": \"text-height:font-size;\",\n                    \"th:t\": \"text-height:text-size;\",\n                    \"th:m\": \"text-height:max-size;\",\n                    \"ti\": \"text-indent:|;\",\n                    \"ti:-\": \"text-indent:-9999px;\",\n                    \"tj\": \"text-justify:|;\",\n                    \"tj:a\": \"text-justify:auto;\",\n                    \"tj:iw\": \"text-justify:inter-word;\",\n                    \"tj:ii\": \"text-justify:inter-ideograph;\",\n                    \"tj:ic\": \"text-justify:inter-cluster;\",\n                    \"tj:d\": \"text-justify:distribute;\",\n                    \"tj:k\": \"text-justify:kashida;\",\n                    \"tj:t\": \"text-justify:tibetan;\",\n                    \"tov\": \"text-overflow:${ellipsis};\",\n                    \"tov:e\": \"text-overflow:ellipsis;\",\n                    \"tov:c\": \"text-overflow:clip;\",\n                    \"to\": \"text-outline:|;\",\n                    \"to+\": \"text-outline:${1:0} ${2:0} ${3:#000};\",\n                    \"to:n\": \"text-outline:none;\",\n                    \"tr\": \"text-replace:|;\",\n                    \"tr:n\": \"text-replace:none;\",\n                    \"tt\": \"text-transform:${1:uppercase};\",\n                    \"tt:n\": \"text-transform:none;\",\n                    \"tt:c\": \"text-transform:capitalize;\",\n                    \"tt:u\": \"text-transform:uppercase;\",\n                    \"tt:l\": \"text-transform:lowercase;\",\n                    \"tw\": \"text-wrap:|;\",\n                    \"tw:n\": \"text-wrap:normal;\",\n                    \"tw:no\": \"text-wrap:none;\",\n                    \"tw:u\": \"text-wrap:unrestricted;\",\n                    \"tw:s\": \"text-wrap:suppress;\",\n                    \"tsh\": \"text-shadow:${1:hoff} ${2:voff} ${3:blur} ${4:#000};\",\n                    \"tsh:r\": \"text-shadow:${1:h} ${2:v} ${3:blur} rgb(${4:0}, ${5:0}, ${6:0});\",\n                    \"tsh:ra\": \"text-shadow:${1:h} ${2:v} ${3:blur} rgba(${4:0}, ${5:0}, ${6:0}, .${7:5});\",\n                    \"tsh+\": \"text-shadow:${1:0} ${2:0} ${3:0} ${4:#000};\",\n                    \"tsh:n\": \"text-shadow:none;\",\n                    \"trf\": \"transform:|;\",\n                    \"trf:skx\": \"transform: skewX(${1:angle});\",\n                    \"trf:sky\": \"transform: skewY(${1:angle});\",\n                    \"trf:sc\": \"transform: scale(${1:x}, ${2:y});\",\n                    \"trf:scx\": \"transform: scaleX(${1:x});\",\n                    \"trf:scy\": \"transform: scaleY(${1:y});\",\n                    \"trf:r\": \"transform: rotate(${1:angle});\",\n                    \"trf:t\": \"transform: translate(${1:x}, ${2:y});\",\n                    \"trf:tx\": \"transform: translateX(${1:x});\",\n                    \"trf:ty\": \"transform: translateY(${1:y});\",\n                    \"trfo\": \"transform-origin:|;\",\n                    \"trfs\": \"transform-style:${1:preserve-3d};\",\n                    \"trs\": \"transition:${1:prop} ${2:time};\",\n                    \"trsde\": \"transition-delay:${1:time};\",\n                    \"trsdu\": \"transition-duration:${1:time};\",\n                    \"trsp\": \"transition-property:${1:prop};\",\n                    \"trstf\": \"transition-timing-function:${1:tfunc};\",\n                    \"lh\": \"line-height:|;\",\n                    \"whs\": \"white-space:|;\",\n                    \"whs:n\": \"white-space:normal;\",\n                    \"whs:p\": \"white-space:pre;\",\n                    \"whs:nw\": \"white-space:nowrap;\",\n                    \"whs:pw\": \"white-space:pre-wrap;\",\n                    \"whs:pl\": \"white-space:pre-line;\",\n                    \"whsc\": \"white-space-collapse:|;\",\n                    \"whsc:n\": \"white-space-collapse:normal;\",\n                    \"whsc:k\": \"white-space-collapse:keep-all;\",\n                    \"whsc:l\": \"white-space-collapse:loose;\",\n                    \"whsc:bs\": \"white-space-collapse:break-strict;\",\n                    \"whsc:ba\": \"white-space-collapse:break-all;\",\n                    \"wob\": \"word-break:|;\",\n                    \"wob:n\": \"word-break:normal;\",\n                    \"wob:k\": \"word-break:keep-all;\",\n                    \"wob:ba\": \"word-break:break-all;\",\n                    \"wos\": \"word-spacing:|;\",\n                    \"wow\": \"word-wrap:|;\",\n                    \"wow:nm\": \"word-wrap:normal;\",\n                    \"wow:n\": \"word-wrap:none;\",\n                    \"wow:u\": \"word-wrap:unrestricted;\",\n                    \"wow:s\": \"word-wrap:suppress;\",\n                    \"wow:b\": \"word-wrap:break-word;\",\n                    \"wm\": \"writing-mode:${1:lr-tb};\",\n                    \"wm:lrt\": \"writing-mode:lr-tb;\",\n                    \"wm:lrb\": \"writing-mode:lr-bt;\",\n                    \"wm:rlt\": \"writing-mode:rl-tb;\",\n                    \"wm:rlb\": \"writing-mode:rl-bt;\",\n                    \"wm:tbr\": \"writing-mode:tb-rl;\",\n                    \"wm:tbl\": \"writing-mode:tb-lr;\",\n                    \"wm:btl\": \"writing-mode:bt-lr;\",\n                    \"wm:btr\": \"writing-mode:bt-rl;\",\n                    \"lts\": \"letter-spacing:|;\",\n                    \"lts-n\": \"letter-spacing:normal;\",\n                    \"f\": \"font:|;\",\n                    \"f+\": \"font:${1:1em} ${2:Arial,sans-serif};\",\n                    \"fw\": \"font-weight:|;\",\n                    \"fw:n\": \"font-weight:normal;\",\n                    \"fw:b\": \"font-weight:bold;\",\n                    \"fw:br\": \"font-weight:bolder;\",\n                    \"fw:lr\": \"font-weight:lighter;\",\n                    \"fs\": \"font-style:${italic};\",\n                    \"fs:n\": \"font-style:normal;\",\n                    \"fs:i\": \"font-style:italic;\",\n                    \"fs:o\": \"font-style:oblique;\",\n                    \"fv\": \"font-variant:|;\",\n                    \"fv:n\": \"font-variant:normal;\",\n                    \"fv:sc\": \"font-variant:small-caps;\",\n                    \"fz\": \"font-size:|;\",\n                    \"fza\": \"font-size-adjust:|;\",\n                    \"fza:n\": \"font-size-adjust:none;\",\n                    \"ff\": \"font-family:|;\",\n                    \"ff:s\": \"font-family:serif;\",\n                    \"ff:ss\": \"font-family:sans-serif;\",\n                    \"ff:c\": \"font-family:cursive;\",\n                    \"ff:f\": \"font-family:fantasy;\",\n                    \"ff:m\": \"font-family:monospace;\",\n                    \"ff:a\": \"font-family: Arial, \\\"Helvetica Neue\\\", Helvetica, sans-serif;\",\n                    \"ff:t\": \"font-family: \\\"Times New Roman\\\", Times, Baskerville, Georgia, serif;\",\n                    \"ff:v\": \"font-family: Verdana, Geneva, sans-serif;\",\n                    \"fef\": \"font-effect:|;\",\n                    \"fef:n\": \"font-effect:none;\",\n                    \"fef:eg\": \"font-effect:engrave;\",\n                    \"fef:eb\": \"font-effect:emboss;\",\n                    \"fef:o\": \"font-effect:outline;\",\n                    \"fem\": \"font-emphasize:|;\",\n                    \"femp\": \"font-emphasize-position:|;\",\n                    \"femp:b\": \"font-emphasize-position:before;\",\n                    \"femp:a\": \"font-emphasize-position:after;\",\n                    \"fems\": \"font-emphasize-style:|;\",\n                    \"fems:n\": \"font-emphasize-style:none;\",\n                    \"fems:ac\": \"font-emphasize-style:accent;\",\n                    \"fems:dt\": \"font-emphasize-style:dot;\",\n                    \"fems:c\": \"font-emphasize-style:circle;\",\n                    \"fems:ds\": \"font-emphasize-style:disc;\",\n                    \"fsm\": \"font-smooth:|;\",\n                    \"fsm:a\": \"font-smooth:auto;\",\n                    \"fsm:n\": \"font-smooth:never;\",\n                    \"fsm:aw\": \"font-smooth:always;\",\n                    \"fst\": \"font-stretch:|;\",\n                    \"fst:n\": \"font-stretch:normal;\",\n                    \"fst:uc\": \"font-stretch:ultra-condensed;\",\n                    \"fst:ec\": \"font-stretch:extra-condensed;\",\n                    \"fst:c\": \"font-stretch:condensed;\",\n                    \"fst:sc\": \"font-stretch:semi-condensed;\",\n                    \"fst:se\": \"font-stretch:semi-expanded;\",\n                    \"fst:e\": \"font-stretch:expanded;\",\n                    \"fst:ee\": \"font-stretch:extra-expanded;\",\n                    \"fst:ue\": \"font-stretch:ultra-expanded;\",\n                    \"op\": \"opacity:|;\",\n                    \"op+\": \"opacity: $1;\\nfilter: alpha(opacity=$2);\",\n                    \"op:ie\": \"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\",\n                    \"op:ms\": \"-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';\",\n                    \"rsz\": \"resize:|;\",\n                    \"rsz:n\": \"resize:none;\",\n                    \"rsz:b\": \"resize:both;\",\n                    \"rsz:h\": \"resize:horizontal;\",\n                    \"rsz:v\": \"resize:vertical;\",\n                    \"cur\": \"cursor:${pointer};\",\n                    \"cur:a\": \"cursor:auto;\",\n                    \"cur:d\": \"cursor:default;\",\n                    \"cur:c\": \"cursor:crosshair;\",\n                    \"cur:ha\": \"cursor:hand;\",\n                    \"cur:he\": \"cursor:help;\",\n                    \"cur:m\": \"cursor:move;\",\n                    \"cur:p\": \"cursor:pointer;\",\n                    \"cur:t\": \"cursor:text;\",\n                    \"pgbb\": \"page-break-before:|;\",\n                    \"pgbb:au\": \"page-break-before:auto;\",\n                    \"pgbb:al\": \"page-break-before:always;\",\n                    \"pgbb:l\": \"page-break-before:left;\",\n                    \"pgbb:r\": \"page-break-before:right;\",\n                    \"pgbi\": \"page-break-inside:|;\",\n                    \"pgbi:au\": \"page-break-inside:auto;\",\n                    \"pgbi:av\": \"page-break-inside:avoid;\",\n                    \"pgba\": \"page-break-after:|;\",\n                    \"pgba:au\": \"page-break-after:auto;\",\n                    \"pgba:al\": \"page-break-after:always;\",\n                    \"pgba:l\": \"page-break-after:left;\",\n                    \"pgba:r\": \"page-break-after:right;\",\n                    \"orp\": \"orphans:|;\",\n                    \"us\": \"user-select:${none};\",\n                    \"wid\": \"widows:|;\",\n                    \"wfsm\": \"-webkit-font-smoothing:${antialiased};\",\n                    \"wfsm:a\": \"-webkit-font-smoothing:antialiased;\",\n                    \"wfsm:s\": \"-webkit-font-smoothing:subpixel-antialiased;\",\n                    \"wfsm:sa\": \"-webkit-font-smoothing:subpixel-antialiased;\",\n                    \"wfsm:n\": \"-webkit-font-smoothing:none;\"\n                }\n            },\n\n            \"html\": {\n                \"filters\": \"html\",\n                \"profile\": \"html\",\n                \"snippets\": {\n                    \"!!!\":    \"<!doctype html>\",\n                    \"!!!4t\":  \"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01 Transitional//EN\\\" \\\"http://www.w3.org/TR/html4/loose.dtd\\\">\",\n                    \"!!!4s\":  \"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 4.01//EN\\\" \\\"http://www.w3.org/TR/html4/strict.dtd\\\">\",\n                    \"!!!xt\":  \"<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\",\n                    \"!!!xs\":  \"<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Strict//EN\\\" \\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\\\">\",\n                    \"!!!xxs\": \"<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.1//EN\\\" \\\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\\\">\",\n\n                    \"c\": \"<!-- |${child} -->\",\n                    \"cc:ie6\": \"<!--[if lte IE 6]>\\n\\t${child}|\\n<![endif]-->\",\n                    \"cc:ie\": \"<!--[if IE]>\\n\\t${child}|\\n<![endif]-->\",\n                    \"cc:noie\": \"<!--[if !IE]><!-->\\n\\t${child}|\\n<!--<![endif]-->\"\n                },\n\n                \"abbreviations\": {\n                    \"!\": \"html:5\",\n                    \"a\": \"<a href=\\\"\\\">\",\n                    \"a:link\": \"<a href=\\\"http://|\\\">\",\n                    \"a:mail\": \"<a href=\\\"mailto:|\\\">\",\n                    \"abbr\": \"<abbr title=\\\"\\\">\",\n                    \"acronym\": \"<acronym title=\\\"\\\">\",\n                    \"base\": \"<base href=\\\"\\\" />\",\n                    \"basefont\": \"<basefont/>\",\n                    \"br\": \"<br/>\",\n                    \"frame\": \"<frame/>\",\n                    \"hr\": \"<hr/>\",\n                    \"bdo\": \"<bdo dir=\\\"\\\">\",\n                    \"bdo:r\": \"<bdo dir=\\\"rtl\\\">\",\n                    \"bdo:l\": \"<bdo dir=\\\"ltr\\\">\",\n                    \"col\": \"<col/>\",\n                    \"link\": \"<link rel=\\\"stylesheet\\\" href=\\\"\\\" />\",\n                    \"link:css\": \"<link rel=\\\"stylesheet\\\" href=\\\"${1:style}.css\\\" />\",\n                    \"link:print\": \"<link rel=\\\"stylesheet\\\" href=\\\"${1:print}.css\\\" media=\\\"print\\\" />\",\n                    \"link:favicon\": \"<link rel=\\\"shortcut icon\\\" type=\\\"image/x-icon\\\" href=\\\"${1:favicon.ico}\\\" />\",\n                    \"link:touch\": \"<link rel=\\\"apple-touch-icon\\\" href=\\\"${1:favicon.png}\\\" />\",\n                    \"link:rss\": \"<link rel=\\\"alternate\\\" type=\\\"application/rss+xml\\\" title=\\\"RSS\\\" href=\\\"${1:rss.xml}\\\" />\",\n                    \"link:atom\": \"<link rel=\\\"alternate\\\" type=\\\"application/atom+xml\\\" title=\\\"Atom\\\" href=\\\"${1:atom.xml}\\\" />\",\n                    \"meta\": \"<meta/>\",\n                    \"meta:utf\": \"<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=UTF-8\\\" />\",\n                    \"meta:win\": \"<meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=windows-1251\\\" />\",\n                    \"meta:vp\": \"<meta name=\\\"viewport\\\" content=\\\"width=${1:device-width}, user-scalable=${2:no}, initial-scale=${3:1.0}, maximum-scale=${4:1.0}, minimum-scale=${5:1.0}\\\" />\",\n                    \"meta:compat\": \"<meta http-equiv=\\\"X-UA-Compatible\\\" content=\\\"${1:IE=7}\\\" />\",\n                    \"style\": \"<style>\",\n                    \"script\": \"<script>\",\n                    \"script:src\": \"<script src=\\\"\\\">\",\n                    \"img\": \"<img src=\\\"\\\" alt=\\\"\\\" />\",\n                    \"iframe\": \"<iframe src=\\\"\\\" frameborder=\\\"0\\\">\",\n                    \"embed\": \"<embed src=\\\"\\\" type=\\\"\\\" />\",\n                    \"object\": \"<object data=\\\"\\\" type=\\\"\\\">\",\n                    \"param\": \"<param name=\\\"\\\" value=\\\"\\\" />\",\n                    \"map\": \"<map name=\\\"\\\">\",\n                    \"area\": \"<area shape=\\\"\\\" coords=\\\"\\\" href=\\\"\\\" alt=\\\"\\\" />\",\n                    \"area:d\": \"<area shape=\\\"default\\\" href=\\\"\\\" alt=\\\"\\\" />\",\n                    \"area:c\": \"<area shape=\\\"circle\\\" coords=\\\"\\\" href=\\\"\\\" alt=\\\"\\\" />\",\n                    \"area:r\": \"<area shape=\\\"rect\\\" coords=\\\"\\\" href=\\\"\\\" alt=\\\"\\\" />\",\n                    \"area:p\": \"<area shape=\\\"poly\\\" coords=\\\"\\\" href=\\\"\\\" alt=\\\"\\\" />\",\n                    \"form\": \"<form action=\\\"\\\">\",\n                    \"form:get\": \"<form action=\\\"\\\" method=\\\"get\\\">\",\n                    \"form:post\": \"<form action=\\\"\\\" method=\\\"post\\\">\",\n                    \"label\": \"<label for=\\\"\\\">\",\n                    \"input\": \"<input type=\\\"${1:text}\\\" />\",\n                    \"inp\": \"<input type=\\\"${1:text}\\\" name=\\\"\\\" id=\\\"\\\" />\",\n                    \"input:hidden\": \"input[type=hidden name]\",\n                    \"input:h\": \"input:hidden\",\n                    \"input:text\": \"inp\",\n                    \"input:t\": \"inp\",\n                    \"input:search\": \"inp[type=search]\",\n                    \"input:email\": \"inp[type=email]\",\n                    \"input:url\": \"inp[type=url]\",\n                    \"input:password\": \"inp[type=password]\",\n                    \"input:p\": \"input:password\",\n                    \"input:datetime\": \"inp[type=datetime]\",\n                    \"input:date\": \"inp[type=date]\",\n                    \"input:datetime-local\": \"inp[type=datetime-local]\",\n                    \"input:month\": \"inp[type=month]\",\n                    \"input:week\": \"inp[type=week]\",\n                    \"input:time\": \"inp[type=time]\",\n                    \"input:number\": \"inp[type=number]\",\n                    \"input:color\": \"inp[type=color]\",\n                    \"input:checkbox\": \"inp[type=checkbox]\",\n                    \"input:c\": \"input:checkbox\",\n                    \"input:radio\": \"inp[type=radio]\",\n                    \"input:r\": \"input:radio\",\n                    \"input:range\": \"inp[type=range]\",\n                    \"input:file\": \"inp[type=file]\",\n                    \"input:f\": \"input:file\",\n                    \"input:submit\": \"<input type=\\\"submit\\\" value=\\\"\\\" />\",\n                    \"input:s\": \"input:submit\",\n                    \"input:image\": \"<input type=\\\"image\\\" src=\\\"\\\" alt=\\\"\\\" />\",\n                    \"input:i\": \"input:image\",\n                    \"input:button\": \"<input type=\\\"button\\\" value=\\\"\\\" />\",\n                    \"input:b\": \"input:button\",\n                    \"isindex\": \"<isindex/>\",\n                    \"input:reset\": \"input:button[type=reset]\",\n                    \"select\": \"<select name=\\\"\\\" id=\\\"\\\">\",\n                    \"select:disabled\": \"select[disabled]\",\n                    \"select:d\": \"select[disabled]\",\n                    \"option\": \"<option value=\\\"\\\">\",\n                    \"textarea\": \"<textarea name=\\\"\\\" id=\\\"\\\" cols=\\\"${1:30}\\\" rows=\\\"${2:10}\\\">\",\n                    \"marquee\": \"<marquee behavior=\\\"\\\" direction=\\\"\\\">\",\n                    \"menu:context\": \"menu[type=context]>\",\n                    \"menu:c\": \"menu:context\",\n                    \"menu:toolbar\": \"menu[type=toolbar]>\",\n                    \"menu:t\": \"menu:toolbar\",\n                    \"video\": \"<video src=\\\"\\\">\",\n                    \"audio\": \"<audio src=\\\"\\\">\",\n                    \"html:xml\": \"<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\",\n                    \"keygen\": \"<keygen/>\",\n                    \"command\": \"<command/>\",\n                    \"button:submit\" : \"button[type=submit]\",\n                    \"button:s\" : \"button[type=submit]\",\n                    \"button:reset\" : \"button[type=reset]\",\n                    \"button:r\" : \"button[type=reset]\",\n                    \"button:disabled\" : \"button[disabled]\",\n                    \"button:d\" : \"button[disabled]\",\n                    \"fieldset:disabled\" : \"fieldset[disabled]\",\n                    \"fieldset:d\" : \"fieldset[disabled]\",\n\n                    \"bq\": \"blockquote\",\n                    \"acr\": \"acronym\",\n                    \"fig\": \"figure\",\n                    \"figc\": \"figcaption\",\n                    \"ifr\": \"iframe\",\n                    \"emb\": \"embed\",\n                    \"obj\": \"object\",\n                    \"src\": \"source\",\n                    \"cap\": \"caption\",\n                    \"colg\": \"colgroup\",\n                    \"fst\": \"fieldset\",\n                    \"fst:d\": \"fieldset[disabled]\",\n                    \"btn\": \"button\",\n                    \"btn:b\": \"button[type=button]\",\n                    \"btn:r\": \"button[type=reset]\",\n                    \"btn:s\": \"button[type=submit]\",\n                    \"btn:d\": \"button[disabled]\",\n                    \"optg\": \"optgroup\",\n                    \"opt\": \"option\",\n                    \"tarea\": \"textarea\",\n                    \"leg\": \"legend\",\n                    \"sect\": \"section\",\n                    \"art\": \"article\",\n                    \"hdr\": \"header\",\n                    \"ftr\": \"footer\",\n                    \"adr\": \"address\",\n                    \"dlg\": \"dialog\",\n                    \"str\": \"strong\",\n                    \"prog\": \"progress\",\n                    \"fset\": \"fieldset\",\n                    \"fset:d\": \"fieldset[disabled]\",\n                    \"datag\": \"datagrid\",\n                    \"datal\": \"datalist\",\n                    \"kg\": \"keygen\",\n                    \"out\": \"output\",\n                    \"det\": \"details\",\n                    \"cmd\": \"command\",\n                    \"doc\": \"html>(head>meta[charset=UTF-8]+title{${1:Document}})+body\",\n                    \"doc4\": \"html>(head>meta[http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=${charset}\\\"]+title{${1:Document}})+body\",\n\n                    \"html:4t\":  \"!!!4t+doc4[lang=${lang}]\",\n                    \"html:4s\":  \"!!!4s+doc4[lang=${lang}]\",\n                    \"html:xt\":  \"!!!xt+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]\",\n                    \"html:xs\":  \"!!!xs+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]\",\n                    \"html:xxs\": \"!!!xxs+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]\",\n                    \"html:5\":   \"!!!+doc[lang=${lang}]\",\n\n                    \"ol+\": \"ol>li\",\n                    \"ul+\": \"ul>li\",\n                    \"dl+\": \"dl>dt+dd\",\n                    \"map+\": \"map>area\",\n                    \"table+\": \"table>tr>td\",\n                    \"colgroup+\": \"colgroup>col\",\n                    \"colg+\": \"colgroup>col\",\n                    \"tr+\": \"tr>td\",\n                    \"select+\": \"select>option\",\n                    \"optgroup+\": \"optgroup>option\",\n                    \"optg+\": \"optgroup>option\"\n                }\n            },\n\n            \"xml\": {\n                \"extends\": \"html\",\n                \"profile\": \"xml\",\n                \"filters\": \"html\"\n            },\n\n            \"xsl\": {\n                \"extends\": \"html\",\n                \"profile\": \"xml\",\n                \"filters\": \"html, xsl\",\n                \"abbreviations\": {\n                    \"tm\": \"<xsl:template match=\\\"\\\" mode=\\\"\\\">\",\n                    \"tmatch\": \"tm\",\n                    \"tn\": \"<xsl:template name=\\\"\\\">\",\n                    \"tname\": \"tn\",\n                    \"call\": \"<xsl:call-template name=\\\"\\\"/>\",\n                    \"ap\": \"<xsl:apply-templates select=\\\"\\\" mode=\\\"\\\"/>\",\n                    \"api\": \"<xsl:apply-imports/>\",\n                    \"imp\": \"<xsl:import href=\\\"\\\"/>\",\n                    \"inc\": \"<xsl:include href=\\\"\\\"/>\",\n\n                    \"ch\": \"<xsl:choose>\",\n                    \"xsl:when\": \"<xsl:when test=\\\"\\\">\",\n                    \"wh\": \"xsl:when\",\n                    \"ot\": \"<xsl:otherwise>\",\n                    \"if\": \"<xsl:if test=\\\"\\\">\",\n\n                    \"par\": \"<xsl:param name=\\\"\\\">\",\n                    \"pare\": \"<xsl:param name=\\\"\\\" select=\\\"\\\"/>\",\n                    \"var\": \"<xsl:variable name=\\\"\\\">\",\n                    \"vare\": \"<xsl:variable name=\\\"\\\" select=\\\"\\\"/>\",\n                    \"wp\": \"<xsl:with-param name=\\\"\\\" select=\\\"\\\"/>\",\n                    \"key\": \"<xsl:key name=\\\"\\\" match=\\\"\\\" use=\\\"\\\"/>\",\n\n                    \"elem\": \"<xsl:element name=\\\"\\\">\",\n                    \"attr\": \"<xsl:attribute name=\\\"\\\">\",\n                    \"attrs\": \"<xsl:attribute-set name=\\\"\\\">\",\n\n                    \"cp\": \"<xsl:copy select=\\\"\\\"/>\",\n                    \"co\": \"<xsl:copy-of select=\\\"\\\"/>\",\n                    \"val\": \"<xsl:value-of select=\\\"\\\"/>\",\n                    \"each\": \"<xsl:for-each select=\\\"\\\">\",\n                    \"for\": \"each\",\n                    \"tex\": \"<xsl:text></xsl:text>\",\n\n                    \"com\": \"<xsl:comment>\",\n                    \"msg\": \"<xsl:message terminate=\\\"no\\\">\",\n                    \"fall\": \"<xsl:fallback>\",\n                    \"num\": \"<xsl:number value=\\\"\\\"/>\",\n                    \"nam\": \"<namespace-alias stylesheet-prefix=\\\"\\\" result-prefix=\\\"\\\"/>\",\n                    \"pres\": \"<xsl:preserve-space elements=\\\"\\\"/>\",\n                    \"strip\": \"<xsl:strip-space elements=\\\"\\\"/>\",\n                    \"proc\": \"<xsl:processing-instruction name=\\\"\\\">\",\n                    \"sort\": \"<xsl:sort select=\\\"\\\" order=\\\"\\\"/>\",\n\n                    \"choose+\": \"xsl:choose>xsl:when+xsl:otherwise\",\n                    \"xsl\": \"!!!+xsl:stylesheet[version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform]>{\\n|}\"\n                },\n                \"snippets\": {\n                    \"!!!\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\"\n                }\n            },\n\n            \"haml\": {\n                \"filters\": \"haml\",\n                \"extends\": \"html\",\n                \"profile\": \"xml\"\n            },\n\n            \"scss\": {\n                \"extends\": \"css\"\n            },\n\n            \"sass\": {\n                \"extends\": \"css\"\n            },\n\n            \"less\": {\n                \"extends\": \"css\"\n            },\n\n            \"stylus\": {\n                \"extends\": \"css\"\n            },\n\n            \"styl\": {\n                \"extends\": \"stylus\"\n            }\n        }\n        ;\n    var res = require('resources');\n    var userData = res.getVocabulary('user') || {};\n    res.setVocabulary(require('utils').deepMerge(userData, snippets), 'user');\n});"
  },
  {
    "path": "modules/backend/formwidgets/codeeditor/partials/_codeeditor.php",
    "content": "<?php if ($this->previewMode): ?>\n    <div class=\"form-control\">\n        <pre><?= e($value) ?></pre>\n    </div>\n<?php else: ?>\n    <div\n        id=\"<?= $this->getId() ?>\"\n        class=\"field-codeeditor size-<?= $size ?> <?= $stretch?'layout-relative':'' ?>\"\n        data-control=\"codeeditor\"\n        data-font-size=\"<?= $fontSize ?>\"\n        data-word-wrap=\"<?= $wordWrap ?>\"\n        data-code-folding=\"<?= $codeFolding ?>\"\n        data-auto-close-tags=\"<?= $autoClosing ?>\"\n        data-tab-size=\"<?= $tabSize ?>\"\n        data-theme=\"<?= $theme ?>\"\n        data-show-invisibles=\"<?= $showInvisibles ?>\"\n        data-autocompletion=\"<?= $autocompletion ?>\"\n        data-enable-snippets=\"<?= $enableSnippets ?>\"\n        data-display-indent-guides=\"<?= $displayIndentGuides ?>\"\n        data-show-print-margin=\"<?= $showPrintMargin ?>\"\n        data-highlight-active-line=\"<?= $highlightActiveLine ?>\"\n        data-use-soft-tabs=\"<?= $useSoftTabs ?>\"\n        data-show-gutter=\"<?= $showGutter ? 'true' : 'false' ?>\"\n        data-read-only=\"<?= $readOnly ? 'true' : 'false' ?>\"\n        data-language=\"<?= $language ?>\"\n        data-margin=\"<?= $margin ?>\"\n        data-vendor-path=\"<?= Url::asset('/modules/backend/formwidgets/codeeditor/assets/vendor/ace') ?>\"\n        <?= $this->formField->getAttributes() ?>>\n        <div class=\"editor-toolbar\">\n            <ul>\n                <li class=\"searchbox-enable\">\n                    <a href=\"javascript:;\">\n                        <i class=\"icon-search\"></i>\n                        <abbr title=\"ctrl+f\"><?= e(trans('cms::lang.editor.open_searchbox')) ?></abbr>\n                    </a>\n                </li>\n                <li class=\"replacebox-enable\">\n                    <a href=\"javascript:;\">\n                        <i class=\"icon-random\"></i>\n                        <abbr title=\"ctrl+h\"><?= e(trans('cms::lang.editor.open_replacebox')) ?></abbr>\n                    </a>\n                </li>\n                <li class=\"fullscreen-enable\">\n                    <a href=\"javascript:;\">\n                        <i class=\"icon-desktop\"></i>\n                        <abbr title=\"ctrl+shift+f\"><?= e(trans('cms::lang.editor.enter_fullscreen')) ?></abbr>\n                    </a>\n                </li>\n                <li class=\"fullscreen-disable\">\n                    <a href=\"javascript:;\">\n                        <i class=\"icon-desktop\"></i>\n                        <abbr title=\"ctrl+shift+f or esc\"><?= e(trans('cms::lang.editor.exit_fullscreen')) ?></abbr>\n                    </a>\n                </li>\n            </ul>\n        </div>\n        <textarea name=\"<?= $name ?>\" id=\"<?= $this->getId('textarea') ?>\"><?= e($value) ?></textarea>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/assets/css/colorpicker.css",
    "content": ".field-colorpicker ul.picker-options{list-style-type:none;margin:-8px 0 0;padding:0}.field-colorpicker ul.picker-options li{border-radius:4px;cursor:pointer;float:left;margin:13px 13px 0 0;padding:3px;text-indent:-9999px}.field-colorpicker ul.picker-options li span{border:1px solid rgba(var(--bs-body-color-rgb),.1);border-radius:100%;display:block;height:25px;width:25px}.field-colorpicker ul.picker-options li.active,.field-colorpicker ul.picker-options li:hover{background-color:rgba(var(--bs-body-color-rgb),.1)}.field-colorpicker ul.picker-options li.active span,.field-colorpicker ul.picker-options li:hover span{border:1px solid rgba(var(--bs-body-bg-rgb),.7)}.field-colorpicker ul.picker-options li.custom-color{position:relative}.field-colorpicker ul.picker-options li.custom-color span{border-style:dashed}.field-colorpicker ul.picker-options li.custom-color.active span,.field-colorpicker ul.picker-options li.custom-color:hover span{border-style:solid}.field-colorpicker ul.picker-options li.custom-color:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#e0e0e0;bottom:3px;color:#000;content:\"\\f0d8\";display:block;font-family:octo-icon!important;font-size:9px;font-style:normal;font-variant:normal;font-weight:400;height:9px;line-height:1;line-height:9px;position:absolute;right:3px;text-align:center;text-indent:0;text-transform:none;width:9px}.field-colorpicker.disabled ul.picker-options li:hover{background-color:transparent;cursor:not-allowed}.field-colorpicker.disabled ul.picker-options li:hover span{border:1px solid rgba(var(--bs-body-color-rgb),.1)}.field-colorpicker.disabled ul.picker-options li.active{background-color:transparent}.field-colorpicker.disabled ul.picker-options li.custom-color{position:relative}.field-colorpicker.disabled ul.picker-options li.custom-color span{border-style:dashed}.field-colorpicker.disabled ul.picker-options li.custom-color span.disabled.is-empty:after,.field-colorpicker.disabled ul.picker-options li.custom-color span.disabled.is-empty:before{background-color:#cecece;content:\" \";height:24px;left:15px;position:absolute;width:1px}.field-colorpicker.disabled ul.picker-options li.custom-color span.disabled.is-empty:before{transform:rotate(45deg)}.field-colorpicker.disabled ul.picker-options li.custom-color span.disabled.is-empty:after{transform:rotate(-45deg)}.field-colorpicker.disabled ul.picker-options li.custom-color:hover span{border-style:dashed}.field-colorpicker.disabled ul.picker-options li.custom-color.active span{border:1px solid rgba(var(--bs-body-color-rgb),.1)}.field-colorpicker .input-group>ul.picker-options{margin:0}.field-colorpicker .input-group>ul.picker-options li{border-bottom-right-radius:0;border-top-right-radius:0;margin:0;padding:6px}.sp-hue,.sp-slider{cursor:row-resize}.sp-color,.sp-dragger{cursor:crosshair}.sp-alpha-handle,.sp-alpha-inner{cursor:col-resize}.sp-hue{left:90%}.sp-color{right:15%}.sp-container{background:var(--oc-primary-bg);border:var(--bs-border-color)!important;border-radius:8px;box-shadow:0 0 32px rgba(67,86,100,.2);font-family:sans-serif;z-index:10100}.sp-picker-container{border:none}.sp-alpha-handle{background-color:var(--bs-border-color);border:1px solid var(--bs-emphasis-color);width:4px}.sp-color,.sp-hue{border:1px solid var(--bs-border-color)}.sp-slider{background-color:var(--bs-border-color);border:1px solid var(--bs-emphasis-color);height:3px;left:-4px;width:22px}.sp-dragger{background:transparent;box-shadow:0 0 0 1px #111}.sp-input{-webkit-appearance:none;background-color:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:4px;box-shadow:none;color:var(--bs-body-color);outline:none!important}.sp-input:focus{border:1px solid var(--oc-border-focus);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.sp-button-container{padding-top:4px;position:relative;text-align:right;width:100%}.sp-cancel{bottom:0;color:var(--bs-emphasis-color)!important;font-family:serif;font-size:21px;font-weight:700;left:0;line-height:1;opacity:.2;position:absolute;text-decoration:none;text-shadow:0 1px 0 var(--bs-body-bg)}.sp-cancel:focus,.sp-cancel:hover{cursor:pointer;opacity:.5;text-decoration:none}.sp-palette-container{border:none;float:none;margin:0;padding:5px 10px 0}.sp-palette .sp-thumb-el,.sp-palette .sp-thumb-el:hover{border:1px solid rgba(0,0,0,.9)}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:rgba(0,0,0,.9)}.sp-clear-enabled .sp-clear{height:24px;left:88%;margin-right:-4px}\n"
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/assets/js/colorpicker.js",
    "content": "/*\n * ColorPicker plugin\n *\n * Data attributes:\n * - data-control=\"colorpicker\" - enables the plugin on an element\n * - data-data-locker=\"input#locker\" - Input element to store and restore the chosen color\n *\n * Config:\n * - showAlpha: false\n * - allowEmpty: false\n * - dataLocker: null\n * - disabled: false\n *\n */\n\n'use strict';\n\noc.registerControl('colorpicker', class extends oc.ControlBase {\n    init() {\n        this.$el = $(this.element);\n        this.$dataLocker  = $(this.config.dataLocker, this.$el);\n        this.$colorList = $('> ul', this.$el);\n        this.$customColor = $('[data-custom-color]', this.$el);\n        this.$customColorSpan = $('> span', this.$customColor);\n        this.originalColor = this.$customColor.data('hexColor');\n    }\n\n    connect() {\n        if (!this.config.disabled) {\n            this.$colorList.on('click', '> li', this.proxy(this.onSelectColor));\n        }\n\n        if (this.$customColor.length) {\n            this.initSpectrum();\n\n            if (!this.config.disabled) {\n                this.$dataLocker.on('click', this.proxy(this.onClickLocker));\n                this.$dataLocker.on('keyup', this.proxy(this.onKeyupLocker));\n                this.$dataLocker.on('change', this.proxy(this.onChangeLocker));\n            }\n        }\n\n        // Adds support for vanilla JS and jQuery change event\n        // Bind to native and prevent recursion with event once\n        this.triggerNativeChange = (event) => {\n            oc.Events.dispatch('change', { target: event.currentTarget });\n            $(event.currentTarget).one('change', this.triggerNativeChange);\n        };\n\n        this.$dataLocker.one('change', this.proxy(this.triggerNativeChange));\n    }\n\n    disconnect() {\n        if (!this.config.disabled) {\n            this.$colorList.off('click', '> li', this.proxy(this.onSelectColor));\n        }\n\n        if (this.$customColor.length) {\n            this.$customColor.spectrum('destroy');\n\n            if (!this.config.disabled) {\n                this.$dataLocker.off('click', this.proxy(this.onClickLocker));\n                this.$dataLocker.off('keyup', this.proxy(this.onKeyupLocker));\n                this.$dataLocker.off('change', this.proxy(this.onChangeLocker));\n            }\n        }\n\n        this.$dataLocker.off('change', this.proxy(this.triggerNativeChange));\n    }\n\n    onSelectColor(ev) {\n        this.$dataLocker.val(\n            $(ev.target).closest('li').data('hexColor')\n        ).trigger('change');\n\n        // Needed in case custom color is not used\n        this.updateChosenColor(ev.target);\n    }\n\n    onClickLocker(ev) {\n        ev.stopPropagation();\n        ev.preventDefault();\n        this.$customColor.spectrum('show');\n    }\n\n    onKeyupLocker(ev) {\n        this.$customColor.spectrum('set', $(ev.target).val());\n    }\n\n    onChangeLocker(ev) {\n        this.setColor($(ev.target).val());\n    }\n\n    initSpectrum() {\n        var self = this;\n\n        this.$customColor.spectrum({\n            preferredFormat: this.config.showAlpha ? 'hex8' : 'hex',\n            showInput: true,\n            showAlpha: !!this.config.showAlpha,\n            allowEmpty: !!this.config.allowEmpty,\n            color: this.$customColor.data('hexColor'),\n            chooseText: $.oc.lang.get('colorpicker.choose', 'OK'),\n            cancelText: '⨯',\n            appendTo: 'parent',\n            disabled: this.config.disabled,\n            hide: function(color) {\n                self.$customColorSpan.css('background', self.evalHexValue(color));\n            },\n            show: function(color) {\n                self.onShowSpectrum(self.evalHexValue(color));\n            },\n            move: function(color) {\n                self.$customColorSpan.css('background', self.evalHexValue(color));\n            },\n            change: function(color) {\n                self.$dataLocker.val(self.evalHexValue(color)).trigger('change');\n            }\n        });\n    }\n\n    onShowSpectrum(hexColor) {\n        this.$customColor.data('hexColor', hexColor);\n        this.$dataLocker.val(hexColor);\n        this.updateChosenColor(this.$customColor);\n    }\n\n    //\n    // API\n    //\n\n    setColor(hexColor) {\n        var $listColor = $('[data-hex-color=\"'+hexColor+'\"]:not(.custom-color)', this.$el);\n\n        // Locker is a custom value\n        if (!$listColor.length && this.$customColor.length) {\n            this.$customColorSpan.css('background', hexColor);\n            this.$customColor.data('hexColor', hexColor);\n            this.$customColor.spectrum('set', hexColor);\n            $listColor = this.$customColor;\n        }\n\n        // Select the preset or custom\n        if ($listColor.length) {\n            this.updateChosenColor($listColor);\n        }\n    }\n\n    //\n    // Internals\n    //\n\n    updateChosenColor(el) {\n        $(el).closest('li')\n            .addClass('active')\n            .siblings()\n            .removeClass('active');\n    }\n\n    evalHexValue(color) {\n        if (!color) {\n            return '';\n        }\n\n        if (this.config.showAlpha) {\n            return color.toHex8String();\n        }\n\n        return color.toHexString();\n    }\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/assets/less/colorpicker.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n\n@color-colorpicker-border: rgba(var(--bs-body-color-rgb), 0.1);\n@color-colorpicker-active-border: rgba(var(--bs-body-bg-rgb), 0.7);\n@color-colorpicker-active: #5fb6f5;\n\n.field-colorpicker {\n\n    ul.picker-options {\n        list-style-type: none;\n        padding: 0;\n        margin: 0;\n        margin-top: -8px;\n\n        li {\n            float: left;\n            text-indent: -9999px;\n            padding: 3px;\n            margin: 13px 13px 0 0;\n            cursor: pointer;\n            border-radius: @border-radius-base;\n\n            span {\n                display: block;\n                width: 25px;\n                height: 25px;\n                border: 1px solid @color-colorpicker-border;\n                border-radius: 100%;\n            }\n\n            &:hover,\n            &.active {\n                background-color: @color-colorpicker-border;\n                span {\n                    border: 1px solid @color-colorpicker-active-border;\n                }\n            }\n\n            &.custom-color {\n                position: relative;\n                span {\n                    border-style: dashed;\n                }\n                &:hover,\n                &.active {\n                    span {\n                        border-style: solid;\n                    }\n                }\n\n                &:before {\n                    text-indent: 0;\n                    .icon(@icon-caret-up);\n                    display: block;\n                    text-align: center;\n                    color: #000;\n                    background: #e0e0e0;\n                    font-size: 9px;\n                    height: 9px;\n                    line-height: 9px;\n                    width: 9px;\n                    position: absolute;\n                    bottom: 3px;\n                    right: 3px;\n                }\n            }\n        }\n\n    }\n\n    &.disabled {\n        ul.picker-options {\n            li {\n                &:hover {\n                    cursor: not-allowed;\n                    background-color: transparent;\n\n                    span {\n                        border: 1px solid @color-colorpicker-border;\n                    }\n                }\n\n                &.active {\n                    background-color: transparent;\n                }\n\n                &.custom-color {\n                    position: relative;\n\n                    span {\n                        border-style: dashed;\n\n                        &.disabled.is-empty {\n                            &:before, &:after {\n                                position: absolute;\n                                left: 15px;\n                                content: ' ';\n                                height: 24px;\n                                width: 1px;\n                                background-color: #cecece;\n                            }\n                            &:before {\n                                transform: rotate(45deg);\n                            }\n                            &:after {\n                                transform: rotate(-45deg);\n                            }\n                        }\n                    }\n\n                    &:hover {\n                        span {\n                            border-style: dashed;\n                        }\n                    }\n                    &.active {\n                        span {\n                            border: 1px solid @color-colorpicker-border;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    .input-group > ul.picker-options {\n        margin: 0;\n\n        li {\n            margin: 0;\n            padding: 6px;\n            border-top-right-radius: 0;\n            border-bottom-right-radius: 0;\n        }\n    }\n\n}\n\n//\n// Spectrum\n//\n\n.sp-hue, .sp-slider { cursor: row-resize }\n.sp-color, .sp-dragger { cursor: crosshair }\n.sp-alpha-inner, .sp-alpha-handle { cursor: col-resize }\n\n.sp-hue { left: 90%; }\n.sp-color { right: 15%; }\n\n.sp-container {\n    border: @border-color !important;\n    background: @primary-bg;\n    border-radius: 8px;\n    z-index: @zindex-datepicker;\n    box-shadow: @box-shadow-z2;\n    font-family: @font-family-base;\n}\n\n.sp-picker-container {\n    border: none;\n}\n\n.sp-alpha-handle {\n    background-color: @border-color;\n    border: 1px solid @emphasis-color;\n    width: 4px;\n}\n\n.sp-color, .sp-hue {\n    border: 1px solid @border-color;\n}\n\n.sp-slider {\n    background-color: @border-color;\n    border: 1px solid @emphasis-color;\n    height: 3px;\n    left: -4px;\n    width: 22px;\n}\n.sp-dragger {\n    background:transparent;\n    box-shadow: 0 0 0 1px #111;\n}\n\n.sp-input {\n    outline: none !important;\n    -webkit-appearance: none;\n    background-color: @input-bg;\n    border: 1px solid @input-border;\n    box-shadow: @input-box-shadow;\n    border-radius: @input-border-radius;\n    color: @input-color;\n\n    &:focus {\n        border: 1px solid @input-border-focus;\n        transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;\n    }\n}\n\n.sp-button-container {\n    width: 100%;\n    position: relative;\n    text-align: right;\n    padding-top: 4px;\n}\n\n.sp-cancel {\n    bottom: 0;\n    left: 0;\n    position: absolute;\n    text-decoration: none;\n\n    font-family: serif;\n    font-size: (@font-size-base * 1.5);\n    font-weight: @close-font-weight;\n    line-height: 1;\n    color: @close-color !important;\n    text-shadow: @close-text-shadow;\n    opacity: .2;\n\n    &:hover,\n    &:focus {\n        text-decoration: none;\n        cursor: pointer;\n        opacity: .5;\n    }\n}\n\n.sp-palette-container {\n    border: none;\n    float: none;\n    margin: 0;\n    padding: 5px 10px 0;\n}\n.sp-palette .sp-thumb-el,\n.sp-palette .sp-thumb-el:hover {\n    border: 1px solid rgba(0, 0, 0, 0.9);\n}\n\n.sp-palette .sp-thumb-el:hover,\n.sp-palette .sp-thumb-el.sp-thumb-active {\n    border-color: rgba(0, 0, 0, 0.9);\n}\n\n.sp-clear-enabled .sp-clear {\n    left: 88%;\n    height: 24px;\n    margin-right: -4px;\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/assets/vendor/spectrum/LICENSE",
    "content": "Permission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/assets/vendor/spectrum/README.md",
    "content": "# Spectrum\n## The No Hassle Colorpicker\n\nSee the demo and docs: http://bgrins.github.io/spectrum.\n\nI wanted a colorpicker that didn't require images, and that had an API that made sense to me as a developer who has worked with color in a number of applications.  I had tried a number of existing plugins, but decided to try and make a smaller, simpler one.\n\nI started using canvas, then switched to CSS gradients, since it turned out to be easier to manage, and provided better cross browser support.\n\n### Basic Usage\n\nHead over to the [docs](http://bgrins.github.io/spectrum) for more information.  There is a visual demo of the different options hosted at: http://bgrins.github.io/spectrum.\n\n    <script src='spectrum.js'></script>\n    <link rel='stylesheet' href='spectrum.css' />\n\n    <input id='colorpicker' />\n\n    <script>\n    $(\"#colorpicker\").spectrum({\n        color: \"#f00\"\n    });\n    </script>\n\n### npm\n\nSpectrum is registered as package with npm.  It can be installed with:\n\n    npm install spectrum-colorpicker\n\n### Bower\n\nSpectrum is registered as a package with [Bower](http://bower.io/), so it can be pulled down using:\n\n    bower install spectrum\n\n### Using spectrum with a CDN\n\nCDN provided by [cdnjs](https://cdnjs.com/libraries/spectrum)\n\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectrum.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectrum.min.css\">\n\n### Continuous Integration\n\n[![Build Status](https://secure.travis-ci.org/bgrins/spectrum.png?branch=master)](http://travis-ci.org/bgrins/spectrum)\n\nVisit https://travis-ci.org/bgrins/spectrum to view the status of the automated tests.\n\n### Building Spectrum Locally\n\nIf you'd like to download and use the plugin, head over to http://bgrins.github.io/spectrum/ and click the 'Download Zip' button.\n\nIf you'd like to run the development version, spectrum uses Grunt to automate the testing, linting, and building.  Head over to http://gruntjs.com/getting-started for more information.  First, clone the repository, then run:\n\n    npm install -g grunt-cli\n    npm install\n\n    # runs jshint and the unit test suite\n    grunt\n\n    # runs jshint, the unit test suite, and builds a minified version of the file.\n    grunt build\n\n### Internationalization\n\nIf you are able to translate the text in the UI to another language, please do!  You can do so by either [filing a pull request](https://github.com/bgrins/spectrum/pulls) or [opening an issue]( https://github.com/bgrins/spectrum/issues) with the translation.  The existing languages are listed at: https://github.com/bgrins/spectrum/tree/master/i18n.\n\nFor an example, see the [Dutch translation](i18n/jquery.spectrum-nl.js).\n"
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/assets/vendor/spectrum/spectrum.css",
    "content": "/***\nSpectrum Colorpicker v1.8.0\nhttps://github.com/bgrins/spectrum\nAuthor: Brian Grinstead\nLicense: MIT\nModified for OC\n- Commented out some overriden styles\n- Commented out button classes (bootstrap used)\n***/\n\n.sp-container {\n    position:absolute;\n    top:0;\n    left:0;\n    display:inline-block;\n    *display: inline;\n    *zoom: 1;\n    /* https://github.com/bgrins/spectrum/issues/40 */\n    z-index: 9999994;\n    overflow: hidden;\n}\n.sp-container.sp-flat {\n    position: relative;\n}\n\n/* Fix for * { box-sizing: border-box; } */\n.sp-container,\n.sp-container * {\n    -webkit-box-sizing: content-box;\n       -moz-box-sizing: content-box;\n            box-sizing: content-box;\n}\n\n/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */\n.sp-top {\n  position:relative;\n  width: 100%;\n  display:inline-block;\n}\n.sp-top-inner {\n   position:absolute;\n   top:0;\n   left:0;\n   bottom:0;\n   right:0;\n}\n.sp-color {\n    position: absolute;\n    top:0;\n    left:0;\n    bottom:0;\n    right:20%;\n}\n.sp-hue {\n    position: absolute;\n    top:0;\n    right:0;\n    bottom:0;\n    left:84%;\n    height: 100%;\n}\n\n.sp-clear-enabled .sp-hue {\n    top:33px;\n    height: 77.5%;\n}\n\n.sp-fill {\n    padding-top: 80%;\n}\n.sp-sat, .sp-val {\n    position: absolute;\n    top:0;\n    left:0;\n    right:0;\n    bottom:0;\n}\n\n.sp-alpha-enabled .sp-top {\n    margin-bottom: 18px;\n}\n.sp-alpha-enabled .sp-alpha {\n    display: block;\n}\n.sp-alpha-handle {\n    position:absolute;\n    top:-4px;\n    bottom: -4px;\n    width: 6px;\n    left: 50%;\n    cursor: pointer;\n    border: 1px solid black;\n    background: white;\n    opacity: .8;\n}\n.sp-alpha {\n    display: none;\n    position: absolute;\n    bottom: -14px;\n    right: 0;\n    left: 0;\n    height: 8px;\n}\n.sp-alpha-inner {\n    border: solid 1px #333;\n}\n\n.sp-clear {\n    display: none;\n}\n\n.sp-clear.sp-clear-display {\n    background-position: center;\n}\n\n.sp-clear-enabled .sp-clear {\n    display: block;\n    position:absolute;\n    top:0px;\n    right:0;\n    bottom:0;\n    left:84%;\n    height: 28px;\n}\n\n/* Don't allow text selection */\n.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button  {\n    -webkit-user-select:none;\n    -moz-user-select: -moz-none;\n    -o-user-select:none;\n    user-select: none;\n}\n\n.sp-container.sp-input-disabled .sp-input-container {\n    display: none;\n}\n.sp-container.sp-buttons-disabled .sp-button-container {\n    display: none;\n}\n.sp-container.sp-palette-buttons-disabled .sp-palette-button-container {\n    display: none;\n}\n.sp-palette-only .sp-picker-container {\n    display: none;\n}\n.sp-palette-disabled .sp-palette-container {\n    display: none;\n}\n\n.sp-initial-disabled .sp-initial {\n    display: none;\n}\n\n\n/* Gradients for hue, saturation and value instead of images.  Not pretty... but it works */\n.sp-sat {\n    background-image: -webkit-gradient(linear,  0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));\n    background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));\n    background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0));\n    -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)\";\n    filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');\n}\n.sp-val {\n    background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));\n    background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));\n    background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0));\n    -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)\";\n    filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');\n}\n\n.sp-hue {\n    background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n    background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n    background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n    background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000));\n    background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n    background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n}\n\n/* IE filters do not support multiple color stops.\n   Generate 6 divs, line them up, and do two color gradients for each.\n   Yes, really.\n */\n.sp-1 {\n    height:17%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00');\n}\n.sp-2 {\n    height:16%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00');\n}\n.sp-3 {\n    height:17%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff');\n}\n.sp-4 {\n    height:17%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff');\n}\n.sp-5 {\n    height:16%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff');\n}\n.sp-6 {\n    height:17%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000');\n}\n\n.sp-hidden {\n    display: none !important;\n}\n\n/* Clearfix hack */\n.sp-cf:before, .sp-cf:after { content: \"\"; display: table; }\n.sp-cf:after { clear: both; }\n.sp-cf { *zoom: 1; }\n\n/* Mobile devices, make hue slider bigger so it is easier to slide */\n@media (max-device-width: 480px) {\n    .sp-color { right: 40%; }\n    .sp-hue { left: 63%; }\n    .sp-fill { padding-top: 60%; }\n}\n.sp-dragger {\n   border-radius: 5px;\n   height: 5px;\n   width: 5px;\n   border: 1px solid #fff;\n   background: #000;\n   cursor: pointer;\n   position:absolute;\n   top:0;\n   left: 0;\n}\n.sp-slider {\n    position: absolute;\n    top:0;\n    cursor:pointer;\n    height: 3px;\n    left: -1px;\n    right: -1px;\n    border: 1px solid #000;\n    background: white;\n    opacity: .8;\n}\n\n/*\nTheme authors:\nHere are the basic themeable display options (colors, fonts, global widths).\nSee http://bgrins.github.io/spectrum/themes/ for instructions.\n*/\n\n.sp-container {\n    border-radius: 0;\n    background-color: #ECECEC;\n    border: solid 1px #f0c49B;\n    padding: 0;\n}\n.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear {\n    /* font: normal 12px \"Lucida Grande\", \"Lucida Sans Unicode\", \"Lucida Sans\", Geneva, Verdana, sans-serif; */\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n}\n.sp-top {\n    margin-bottom: 3px;\n}\n.sp-color, .sp-hue, .sp-clear {\n    border: solid 1px #666;\n}\n\n/* Input */\n.sp-input-container {\n    float:right;\n    width: 100px;\n    margin-bottom: 4px;\n}\n.sp-initial-disabled  .sp-input-container {\n    width: 100%;\n}\n.sp-input {\n   /* font-size: 12px !important; */\n   border: 1px inset;\n   padding: 4px 5px;\n   margin: 0;\n   width: 100%;\n   background:transparent;\n   /* border-radius: 3px; */\n   /* color: #222; */\n}\n.sp-input:focus  {\n    border: 1px solid orange;\n}\n.sp-input.sp-validation-error {\n    border: 1px solid red;\n    background: #fdd;\n}\n.sp-picker-container , .sp-palette-container {\n    float:left;\n    position: relative;\n    padding: 10px;\n    padding-bottom: 300px;\n    margin-bottom: -290px;\n}\n.sp-picker-container {\n    width: 172px;\n    border-left: solid 1px #fff;\n}\n\n/* Palettes */\n.sp-palette-container {\n    border-right: solid 1px #ccc;\n}\n\n.sp-palette-only .sp-palette-container {\n    border: 0;\n}\n\n.sp-palette .sp-thumb-el {\n    display: block;\n    position:relative;\n    float:left;\n    width: 24px;\n    height: 15px;\n    margin: 3px;\n    cursor: pointer;\n    border:solid 2px transparent;\n}\n.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active {\n    border-color: orange;\n}\n.sp-thumb-el {\n    position:relative;\n}\n\n/* Initial */\n.sp-initial {\n    float: left;\n    border: solid 1px #333;\n}\n.sp-initial span {\n    width: 30px;\n    height: 25px;\n    border:none;\n    display:block;\n    float:left;\n    margin:0;\n}\n\n.sp-initial .sp-clear-display {\n    background-position: center;\n}\n\n/* Buttons */\n.sp-palette-button-container,\n.sp-button-container {\n    float: right;\n}\n\n/* Replacer (the little preview div that shows up instead of the <input>) */\n.sp-replacer {\n    margin:0;\n    overflow:hidden;\n    cursor:pointer;\n    padding: 4px;\n    display:inline-block;\n    *zoom: 1;\n    *display: inline;\n    border: solid 1px #91765d;\n    background: #eee;\n    color: #333;\n    vertical-align: middle;\n}\n.sp-replacer:hover, .sp-replacer.sp-active {\n    border-color: #F0C49B;\n    color: #111;\n}\n.sp-replacer.sp-disabled {\n    cursor:default;\n    border-color: silver;\n    color: silver;\n}\n.sp-dd {\n    padding: 2px 0;\n    height: 16px;\n    line-height: 16px;\n    float:left;\n    font-size:10px;\n}\n.sp-preview {\n    position:relative;\n    width:25px;\n    height: 20px;\n    border: solid 1px #222;\n    margin-right: 5px;\n    float:left;\n    z-index: 0;\n}\n\n.sp-palette {\n    *width: 220px;\n    max-width: 220px;\n}\n.sp-palette .sp-thumb-el {\n    width:16px;\n    height: 16px;\n    margin:2px 1px;\n    border: solid 1px #d0d0d0;\n}\n\n.sp-container {\n    padding-bottom:0;\n}\n\n\n/* Buttons: http://hellohappy.org/css3-buttons/ */\n/* .sp-container button {\n  background-color: #eeeeee;\n  background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc);\n  background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);\n  background-image: -ms-linear-gradient(top, #eeeeee, #cccccc);\n  background-image: -o-linear-gradient(top, #eeeeee, #cccccc);\n  background-image: linear-gradient(to bottom, #eeeeee, #cccccc);\n  border: 1px solid #ccc;\n  border-bottom: 1px solid #bbb;\n  border-radius: 3px;\n  color: #333;\n  font-size: 14px;\n  line-height: 1;\n  padding: 5px 4px;\n  text-align: center;\n  text-shadow: 0 1px 0 #eee;\n  vertical-align: middle;\n}\n.sp-container button:hover {\n    background-color: #dddddd;\n    background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb);\n    background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb);\n    background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb);\n    background-image: -o-linear-gradient(top, #dddddd, #bbbbbb);\n    background-image: linear-gradient(to bottom, #dddddd, #bbbbbb);\n    border: 1px solid #bbb;\n    border-bottom: 1px solid #999;\n    cursor: pointer;\n    text-shadow: 0 1px 0 #ddd;\n}\n.sp-container button:active {\n    border: 1px solid #aaa;\n    border-bottom: 1px solid #888;\n    -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n    -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n    -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n    -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n    box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n}\n*/\n\n.sp-cancel {\n    font-size: 11px;\n    color: #d93f3f !important;\n    margin:0;\n    padding:2px;\n    margin-right: 5px;\n    vertical-align: middle;\n    text-decoration:none;\n\n}\n.sp-cancel:hover {\n    color: #d93f3f !important;\n    text-decoration: underline;\n}\n\n.sp-palette span:hover, .sp-palette span.sp-thumb-active {\n    border-color: #000;\n}\n\n.sp-preview, .sp-alpha, .sp-thumb-el {\n    position:relative;\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);\n}\n.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner {\n    display:block;\n    position:absolute;\n    top:0;left:0;bottom:0;right:0;\n}\n\n.sp-palette .sp-thumb-inner {\n    background-position: 50% 50%;\n    background-repeat: no-repeat;\n}\n\n.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner {\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=);\n}\n\n.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner {\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=);\n}\n\n.sp-clear-display {\n    background-repeat:no-repeat;\n    background-position: center;\n    background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==);\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/assets/vendor/spectrum/spectrum.js",
    "content": "// Spectrum Colorpicker v1.8.0\n// https://github.com/bgrins/spectrum\n// Author: Brian Grinstead\n// License: MIT\n// Modifications for OC\n// - Updated tinycolor to v1.6.0\n// - Added bootstrap classes to buttons\n\n(function (factory) {\n    \"use strict\";\n    factory(jQuery);\n})(function($, undefined) {\n    \"use strict\";\n\n    var defaultOpts = {\n\n        // Callbacks\n        beforeShow: noop,\n        move: noop,\n        change: noop,\n        show: noop,\n        hide: noop,\n\n        // Options\n        color: false,\n        flat: false,\n        showInput: false,\n        allowEmpty: false,\n        showButtons: true,\n        clickoutFiresChange: true,\n        showInitial: false,\n        showPalette: false,\n        showPaletteOnly: false,\n        hideAfterPaletteSelect: false,\n        togglePaletteOnly: false,\n        showSelectionPalette: true,\n        localStorageKey: false,\n        appendTo: \"body\",\n        maxSelectionSize: 7,\n        cancelText: \"cancel\",\n        chooseText: \"choose\",\n        togglePaletteMoreText: \"more\",\n        togglePaletteLessText: \"less\",\n        clearText: \"Clear Color Selection\",\n        noColorSelectedText: \"No Color Selected\",\n        preferredFormat: false,\n        className: \"\", // Deprecated - use containerClassName and replacerClassName instead.\n        containerClassName: \"\",\n        replacerClassName: \"\",\n        showAlpha: false,\n        theme: \"sp-light\",\n        palette: [[\"#ffffff\", \"#000000\", \"#ff0000\", \"#ff8000\", \"#ffff00\", \"#008000\", \"#0000ff\", \"#4b0082\", \"#9400d3\"]],\n        selectionPalette: [],\n        disabled: false,\n        offset: null\n    },\n    spectrums = [],\n    IE = !!/msie/i.exec( window.navigator.userAgent ),\n    rgbaSupport = (function() {\n        function contains( str, substr ) {\n            return !!~('' + str).indexOf(substr);\n        }\n\n        var elem = document.createElement('div');\n        var style = elem.style;\n        style.cssText = 'background-color:rgba(0,0,0,.5)';\n        return contains(style.backgroundColor, 'rgba') || contains(style.backgroundColor, 'hsla');\n    })(),\n    replaceInput = [\n        \"<div class='sp-replacer'>\",\n            \"<div class='sp-preview'><div class='sp-preview-inner'></div></div>\",\n            \"<div class='sp-dd'>&#9660;</div>\",\n        \"</div>\"\n    ].join(''),\n    markup = (function () {\n\n        // IE does not support gradients with multiple stops, so we need to simulate\n        //  that for the rainbow slider with 8 divs that each have a single gradient\n        var gradientFix = \"\";\n        if (IE) {\n            for (var i = 1; i <= 6; i++) {\n                gradientFix += \"<div class='sp-\" + i + \"'></div>\";\n            }\n        }\n\n        return [\n            \"<div class='sp-container sp-hidden'>\",\n                \"<div class='sp-palette-container'>\",\n                    \"<div class='sp-palette sp-thumb sp-cf'></div>\",\n                    \"<div class='sp-palette-button-container sp-cf'>\",\n                        \"<button type='button' class='sp-palette-toggle btn btn-sm btn-primary'></button>\",\n                    \"</div>\",\n                \"</div>\",\n                \"<div class='sp-picker-container'>\",\n                    \"<div class='sp-top sp-cf'>\",\n                        \"<div class='sp-fill'></div>\",\n                        \"<div class='sp-top-inner'>\",\n                            \"<div class='sp-color'>\",\n                                \"<div class='sp-sat'>\",\n                                    \"<div class='sp-val'>\",\n                                        \"<div class='sp-dragger'></div>\",\n                                    \"</div>\",\n                                \"</div>\",\n                            \"</div>\",\n                            \"<div class='sp-clear sp-clear-display'>\",\n                            \"</div>\",\n                            \"<div class='sp-hue'>\",\n                                \"<div class='sp-slider'></div>\",\n                                gradientFix,\n                            \"</div>\",\n                        \"</div>\",\n                        \"<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>\",\n                    \"</div>\",\n                    \"<div class='sp-input-container sp-cf'>\",\n                        \"<input class='sp-input' type='text' spellcheck='false' />\",\n                    \"</div>\",\n                    \"<div class='sp-initial sp-thumb sp-cf'></div>\",\n                    \"<div class='sp-button-container sp-cf'>\",\n                        \"<a class='sp-cancel' href='#'></a>\",\n                        \"<button type='button' class='sp-choose btn btn-sm btn-primary'></button>\",\n                    \"</div>\",\n                \"</div>\",\n            \"</div>\"\n        ].join(\"\");\n    })();\n\n    function paletteTemplate (p, color, className, opts) {\n        var html = [];\n        for (var i = 0; i < p.length; i++) {\n            var current = p[i];\n            if(current) {\n                var tiny = tinycolor(current);\n                var c = tiny.toHsl().l < 0.5 ? \"sp-thumb-el sp-thumb-dark\" : \"sp-thumb-el sp-thumb-light\";\n                c += (tinycolor.equals(color, current)) ? \" sp-thumb-active\" : \"\";\n                var formattedString = tiny.toString(opts.preferredFormat || \"rgb\");\n                var swatchStyle = rgbaSupport ? (\"background-color:\" + tiny.toRgbString()) : \"filter:\" + tiny.toFilter();\n                html.push('<span title=\"' + formattedString + '\" data-color=\"' + tiny.toRgbString() + '\" class=\"' + c + '\"><span class=\"sp-thumb-inner\" style=\"' + swatchStyle + ';\" /></span>');\n            } else {\n                var cls = 'sp-clear-display';\n                html.push($('<div />')\n                    .append($('<span data-color=\"\" style=\"background-color:transparent;\" class=\"' + cls + '\"></span>')\n                        .attr('title', opts.noColorSelectedText)\n                    )\n                    .html()\n                );\n            }\n        }\n        return \"<div class='sp-cf \" + className + \"'>\" + html.join('') + \"</div>\";\n    }\n\n    function hideAll() {\n        for (var i = 0; i < spectrums.length; i++) {\n            if (spectrums[i]) {\n                spectrums[i].hide();\n            }\n        }\n    }\n\n    function instanceOptions(o, callbackContext) {\n        var opts = $.extend({}, defaultOpts, o);\n        opts.callbacks = {\n            'move': bind(opts.move, callbackContext),\n            'change': bind(opts.change, callbackContext),\n            'show': bind(opts.show, callbackContext),\n            'hide': bind(opts.hide, callbackContext),\n            'beforeShow': bind(opts.beforeShow, callbackContext)\n        };\n\n        return opts;\n    }\n\n    function spectrum(element, o) {\n\n        var opts = instanceOptions(o, element),\n            flat = opts.flat,\n            showSelectionPalette = opts.showSelectionPalette,\n            localStorageKey = opts.localStorageKey,\n            theme = opts.theme,\n            callbacks = opts.callbacks,\n            resize = throttle(reflow, 10),\n            visible = false,\n            isDragging = false,\n            dragWidth = 0,\n            dragHeight = 0,\n            dragHelperHeight = 0,\n            slideHeight = 0,\n            slideWidth = 0,\n            alphaWidth = 0,\n            alphaSlideHelperWidth = 0,\n            slideHelperHeight = 0,\n            currentHue = 0,\n            currentSaturation = 0,\n            currentValue = 0,\n            currentAlpha = 1,\n            palette = [],\n            paletteArray = [],\n            paletteLookup = {},\n            selectionPalette = opts.selectionPalette.slice(0),\n            maxSelectionSize = opts.maxSelectionSize,\n            draggingClass = \"sp-dragging\",\n            shiftMovementDirection = null;\n\n        var doc = element.ownerDocument,\n            body = doc.body,\n            boundElement = $(element),\n            disabled = false,\n            container = $(markup, doc).addClass(theme),\n            pickerContainer = container.find(\".sp-picker-container\"),\n            dragger = container.find(\".sp-color\"),\n            dragHelper = container.find(\".sp-dragger\"),\n            slider = container.find(\".sp-hue\"),\n            slideHelper = container.find(\".sp-slider\"),\n            alphaSliderInner = container.find(\".sp-alpha-inner\"),\n            alphaSlider = container.find(\".sp-alpha\"),\n            alphaSlideHelper = container.find(\".sp-alpha-handle\"),\n            textInput = container.find(\".sp-input\"),\n            paletteContainer = container.find(\".sp-palette\"),\n            initialColorContainer = container.find(\".sp-initial\"),\n            cancelButton = container.find(\".sp-cancel\"),\n            clearButton = container.find(\".sp-clear\"),\n            chooseButton = container.find(\".sp-choose\"),\n            toggleButton = container.find(\".sp-palette-toggle\"),\n            isInput = boundElement.is(\"input\"),\n            isInputTypeColor = isInput && boundElement.attr(\"type\") === \"color\" && inputTypeColorSupport(),\n            shouldReplace = isInput && !flat,\n            replacer = (shouldReplace) ? $(replaceInput).addClass(theme).addClass(opts.className).addClass(opts.replacerClassName) : $([]),\n            offsetElement = (shouldReplace) ? replacer : boundElement,\n            previewElement = replacer.find(\".sp-preview-inner\"),\n            initialColor = opts.color || (isInput && boundElement.val()),\n            colorOnShow = false,\n            currentPreferredFormat = opts.preferredFormat,\n            clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange,\n            isEmpty = !initialColor,\n            allowEmpty = opts.allowEmpty && !isInputTypeColor;\n\n        function applyOptions() {\n\n            if (opts.showPaletteOnly) {\n                opts.showPalette = true;\n            }\n\n            toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);\n\n            if (opts.palette) {\n                palette = opts.palette.slice(0);\n                paletteArray = $.isArray(palette[0]) ? palette : [palette];\n                paletteLookup = {};\n                for (var i = 0; i < paletteArray.length; i++) {\n                    for (var j = 0; j < paletteArray[i].length; j++) {\n                        var rgb = tinycolor(paletteArray[i][j]).toRgbString();\n                        paletteLookup[rgb] = true;\n                    }\n                }\n            }\n\n            container.toggleClass(\"sp-flat\", flat);\n            container.toggleClass(\"sp-input-disabled\", !opts.showInput);\n            container.toggleClass(\"sp-alpha-enabled\", opts.showAlpha);\n            container.toggleClass(\"sp-clear-enabled\", allowEmpty);\n            container.toggleClass(\"sp-buttons-disabled\", !opts.showButtons);\n            container.toggleClass(\"sp-palette-buttons-disabled\", !opts.togglePaletteOnly);\n            container.toggleClass(\"sp-palette-disabled\", !opts.showPalette);\n            container.toggleClass(\"sp-palette-only\", opts.showPaletteOnly);\n            container.toggleClass(\"sp-initial-disabled\", !opts.showInitial);\n            container.addClass(opts.className).addClass(opts.containerClassName);\n\n            reflow();\n        }\n\n        function initialize() {\n\n            if (IE) {\n                container.find(\"*:not(input)\").attr(\"unselectable\", \"on\");\n            }\n\n            applyOptions();\n\n            if (shouldReplace) {\n                boundElement.after(replacer).hide();\n            }\n\n            if (!allowEmpty) {\n                clearButton.hide();\n            }\n\n            if (flat) {\n                boundElement.after(container).hide();\n            }\n            else {\n\n                var appendTo = opts.appendTo === \"parent\" ? boundElement.parent() : $(opts.appendTo);\n                if (appendTo.length !== 1) {\n                    appendTo = $(\"body\");\n                }\n\n                appendTo.append(container);\n            }\n\n            updateSelectionPaletteFromStorage();\n\n            offsetElement.on(\"click.spectrum touchstart.spectrum\", function (e) {\n                if (!disabled) {\n                    toggle();\n                }\n\n                e.stopPropagation();\n\n                if (!$(e.target).is(\"input\")) {\n                    e.preventDefault();\n                }\n            });\n\n            if(boundElement.is(\":disabled\") || (opts.disabled === true)) {\n                disable();\n            }\n\n            // Prevent clicks from bubbling up to document.  This would cause it to be hidden.\n            container.click(stopPropagation);\n\n            // Handle user typed input\n            textInput.change(setFromTextInput);\n            textInput.on(\"paste\", function () {\n                setTimeout(setFromTextInput, 1);\n            });\n            textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } });\n\n            cancelButton.text(opts.cancelText);\n            cancelButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n                revert();\n                hide();\n            });\n\n            clearButton.attr(\"title\", opts.clearText);\n            clearButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n                isEmpty = true;\n                move();\n\n                if(flat) {\n                    //for the flat style, this is a change event\n                    updateOriginalInput(true);\n                }\n            });\n\n            chooseButton.text(opts.chooseText);\n            chooseButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n\n                if (IE && textInput.is(\":focus\")) {\n                    textInput.trigger('change');\n                }\n\n                if (isValid()) {\n                    updateOriginalInput(true);\n                    hide();\n                }\n            });\n\n            toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);\n            toggleButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n\n                opts.showPaletteOnly = !opts.showPaletteOnly;\n\n                // To make sure the Picker area is drawn on the right, next to the\n                // Palette area (and not below the palette), first move the Palette\n                // to the left to make space for the picker, plus 5px extra.\n                // The 'applyOptions' function puts the whole container back into place\n                // and takes care of the button-text and the sp-palette-only CSS class.\n                if (!opts.showPaletteOnly && !flat) {\n                    container.css('left', '-=' + (pickerContainer.outerWidth(true) + 5));\n                }\n                applyOptions();\n            });\n\n            draggable(alphaSlider, function (dragX, dragY, e) {\n                currentAlpha = (dragX / alphaWidth);\n                isEmpty = false;\n                if (e.shiftKey) {\n                    currentAlpha = Math.round(currentAlpha * 10) / 10;\n                }\n\n                move();\n            }, dragStart, dragStop);\n\n            draggable(slider, function (dragX, dragY) {\n                currentHue = parseFloat(dragY / slideHeight);\n                isEmpty = false;\n                if (!opts.showAlpha) {\n                    currentAlpha = 1;\n                }\n                move();\n            }, dragStart, dragStop);\n\n            draggable(dragger, function (dragX, dragY, e) {\n\n                // shift+drag should snap the movement to either the x or y axis.\n                if (!e.shiftKey) {\n                    shiftMovementDirection = null;\n                }\n                else if (!shiftMovementDirection) {\n                    var oldDragX = currentSaturation * dragWidth;\n                    var oldDragY = dragHeight - (currentValue * dragHeight);\n                    var furtherFromX = Math.abs(dragX - oldDragX) > Math.abs(dragY - oldDragY);\n\n                    shiftMovementDirection = furtherFromX ? \"x\" : \"y\";\n                }\n\n                var setSaturation = !shiftMovementDirection || shiftMovementDirection === \"x\";\n                var setValue = !shiftMovementDirection || shiftMovementDirection === \"y\";\n\n                if (setSaturation) {\n                    currentSaturation = parseFloat(dragX / dragWidth);\n                }\n                if (setValue) {\n                    currentValue = parseFloat((dragHeight - dragY) / dragHeight);\n                }\n\n                isEmpty = false;\n                if (!opts.showAlpha) {\n                    currentAlpha = 1;\n                }\n\n                move();\n\n            }, dragStart, dragStop);\n\n            if (!!initialColor) {\n                set(initialColor);\n\n                // In case color was black - update the preview UI and set the format\n                // since the set function will not run (default color is black).\n                updateUI();\n                currentPreferredFormat = opts.preferredFormat || tinycolor(initialColor).format;\n\n                addColorToSelectionPalette(initialColor);\n            }\n            else {\n                updateUI();\n            }\n\n            if (flat) {\n                show();\n            }\n\n            function paletteElementClick(e) {\n                if (e.data && e.data.ignore) {\n                    set($(e.target).closest(\".sp-thumb-el\").data(\"color\"));\n                    move();\n                }\n                else {\n                    set($(e.target).closest(\".sp-thumb-el\").data(\"color\"));\n                    move();\n\n                    // If the picker is going to close immediately, a palette selection\n                    // is a change.  Otherwise, it's a move only.\n                    if (opts.hideAfterPaletteSelect) {\n                        updateOriginalInput(true);\n                        hide();\n                    } else {\n                        updateOriginalInput();\n                    }\n                }\n\n                return false;\n            }\n\n            var paletteEvent = IE ? \"mousedown.spectrum\" : \"click.spectrum touchstart.spectrum\";\n            paletteContainer.on(paletteEvent, \".sp-thumb-el\", paletteElementClick);\n            initialColorContainer.on(paletteEvent, \".sp-thumb-el:nth-child(1)\", { ignore: true }, paletteElementClick);\n        }\n\n        function updateSelectionPaletteFromStorage() {\n\n            if (localStorageKey && window.localStorage) {\n\n                // Migrate old palettes over to new format.  May want to remove this eventually.\n                try {\n                    var oldPalette = window.localStorage[localStorageKey].split(\",#\");\n                    if (oldPalette.length > 1) {\n                        delete window.localStorage[localStorageKey];\n                        $.each(oldPalette, function(i, c) {\n                             addColorToSelectionPalette(c);\n                        });\n                    }\n                }\n                catch(e) { }\n\n                try {\n                    selectionPalette = window.localStorage[localStorageKey].split(\";\");\n                }\n                catch (e) { }\n            }\n        }\n\n        function addColorToSelectionPalette(color) {\n            if (showSelectionPalette) {\n                var rgb = tinycolor(color).toRgbString();\n                if (!paletteLookup[rgb] && $.inArray(rgb, selectionPalette) === -1) {\n                    selectionPalette.push(rgb);\n                    while(selectionPalette.length > maxSelectionSize) {\n                        selectionPalette.shift();\n                    }\n                }\n\n                if (localStorageKey && window.localStorage) {\n                    try {\n                        window.localStorage[localStorageKey] = selectionPalette.join(\";\");\n                    }\n                    catch(e) { }\n                }\n            }\n        }\n\n        function getUniqueSelectionPalette() {\n            var unique = [];\n            if (opts.showPalette) {\n                for (var i = 0; i < selectionPalette.length; i++) {\n                    var rgb = tinycolor(selectionPalette[i]).toRgbString();\n\n                    if (!paletteLookup[rgb]) {\n                        unique.push(selectionPalette[i]);\n                    }\n                }\n            }\n\n            return unique.reverse().slice(0, opts.maxSelectionSize);\n        }\n\n        function drawPalette() {\n\n            var currentColor = get();\n\n            var html = $.map(paletteArray, function (palette, i) {\n                return paletteTemplate(palette, currentColor, \"sp-palette-row sp-palette-row-\" + i, opts);\n            });\n\n            updateSelectionPaletteFromStorage();\n\n            if (selectionPalette) {\n                html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, \"sp-palette-row sp-palette-row-selection\", opts));\n            }\n\n            paletteContainer.html(html.join(\"\"));\n        }\n\n        function drawInitial() {\n            if (opts.showInitial) {\n                var initial = colorOnShow;\n                var current = get();\n                initialColorContainer.html(paletteTemplate([initial, current], current, \"sp-palette-row-initial\", opts));\n            }\n        }\n\n        function dragStart() {\n            if (dragHeight <= 0 || dragWidth <= 0 || slideHeight <= 0) {\n                reflow();\n            }\n            isDragging = true;\n            container.addClass(draggingClass);\n            shiftMovementDirection = null;\n            boundElement.trigger('dragstart.spectrum', [ get() ]);\n        }\n\n        function dragStop() {\n            isDragging = false;\n            container.removeClass(draggingClass);\n            boundElement.trigger('dragstop.spectrum', [ get() ]);\n        }\n\n        function setFromTextInput() {\n\n            var value = textInput.val();\n\n            if ((value === null || value === \"\") && allowEmpty) {\n                set(null);\n                move();\n                updateOriginalInput();\n            }\n            else {\n                var tiny = tinycolor(value);\n                if (tiny.isValid()) {\n                    set(tiny);\n                    move();\n                    updateOriginalInput();\n                }\n                else {\n                    textInput.addClass(\"sp-validation-error\");\n                }\n            }\n        }\n\n        function toggle() {\n            if (visible) {\n                hide();\n            }\n            else {\n                show();\n            }\n        }\n\n        function show() {\n            var event = $.Event('beforeShow.spectrum');\n\n            if (visible) {\n                reflow();\n                return;\n            }\n\n            boundElement.trigger(event, [ get() ]);\n\n            if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) {\n                return;\n            }\n\n            hideAll();\n            visible = true;\n\n            $(doc).on(\"keydown.spectrum\", onkeydown);\n            $(doc).on(\"click.spectrum\", clickout);\n            $(window).on(\"resize.spectrum\", resize);\n            replacer.addClass(\"sp-active\");\n            container.removeClass(\"sp-hidden\");\n\n            reflow();\n            updateUI();\n\n            colorOnShow = get();\n\n            drawInitial();\n            callbacks.show(colorOnShow);\n            boundElement.trigger('show.spectrum', [ colorOnShow ]);\n        }\n\n        function onkeydown(e) {\n            // Close on ESC\n            if (e.keyCode === 27) {\n                hide();\n            }\n        }\n\n        function clickout(e) {\n            // Return on right click.\n            if (e.button == 2) { return; }\n\n            // If a drag event was happening during the mouseup, don't hide\n            // on click.\n            if (isDragging) { return; }\n\n            if (clickoutFiresChange) {\n                updateOriginalInput(true);\n            }\n            else {\n                revert();\n            }\n            hide();\n        }\n\n        function hide() {\n            // Return if hiding is unnecessary\n            if (!visible || flat) { return; }\n            visible = false;\n\n            $(doc).off(\"keydown.spectrum\", onkeydown);\n            $(doc).off(\"click.spectrum\", clickout);\n            $(window).off(\"resize.spectrum\", resize);\n\n            replacer.removeClass(\"sp-active\");\n            container.addClass(\"sp-hidden\");\n\n            callbacks.hide(get());\n            boundElement.trigger('hide.spectrum', [ get() ]);\n        }\n\n        function revert() {\n            set(colorOnShow, true);\n            updateOriginalInput(true);\n        }\n\n        function set(color, ignoreFormatChange) {\n            if (tinycolor.equals(color, get())) {\n                // Update UI just in case a validation error needs\n                // to be cleared.\n                updateUI();\n                return;\n            }\n\n            var newColor, newHsv;\n            if (!color && allowEmpty) {\n                isEmpty = true;\n            } else {\n                isEmpty = false;\n                newColor = tinycolor(color);\n                newHsv = newColor.toHsv();\n\n                currentHue = (newHsv.h % 360) / 360;\n                currentSaturation = newHsv.s;\n                currentValue = newHsv.v;\n                currentAlpha = newHsv.a;\n            }\n            updateUI();\n\n            if (newColor && newColor.isValid() && !ignoreFormatChange) {\n                currentPreferredFormat = opts.preferredFormat || newColor.getFormat();\n            }\n        }\n\n        function get(opts) {\n            opts = opts || { };\n\n            if (allowEmpty && isEmpty) {\n                return null;\n            }\n\n            return tinycolor.fromRatio({\n                h: currentHue,\n                s: currentSaturation,\n                v: currentValue,\n                a: Math.round(currentAlpha * 1000) / 1000\n            }, { format: opts.format || currentPreferredFormat });\n        }\n\n        function isValid() {\n            return !textInput.hasClass(\"sp-validation-error\");\n        }\n\n        function move() {\n            updateUI();\n\n            callbacks.move(get());\n            boundElement.trigger('move.spectrum', [ get() ]);\n        }\n\n        function updateUI() {\n\n            textInput.removeClass(\"sp-validation-error\");\n\n            updateHelperLocations();\n\n            // Update dragger background color (gradients take care of saturation and value).\n            var flatColor = tinycolor.fromRatio({ h: currentHue, s: 1, v: 1 });\n            dragger.css(\"background-color\", flatColor.toHexString());\n\n            // Get a format that alpha will be included in (hex and names ignore alpha)\n            var format = currentPreferredFormat;\n            if (currentAlpha < 1 && !(currentAlpha === 0 && format === \"name\")) {\n                if (format === \"hex\" || format === \"hex3\" || format === \"hex6\" || format === \"name\") {\n                    format = \"rgb\";\n                }\n            }\n\n            var realColor = get({ format: format }),\n                displayColor = '';\n\n             //reset background info for preview element\n            previewElement.removeClass(\"sp-clear-display\");\n            previewElement.css('background-color', 'transparent');\n\n            if (!realColor && allowEmpty) {\n                // Update the replaced elements background with icon indicating no color selection\n                previewElement.addClass(\"sp-clear-display\");\n            }\n            else {\n                var realHex = realColor.toHexString(),\n                    realRgb = realColor.toRgbString();\n\n                // Update the replaced elements background color (with actual selected color)\n                if (rgbaSupport || realColor.alpha === 1) {\n                    previewElement.css(\"background-color\", realRgb);\n                }\n                else {\n                    previewElement.css(\"background-color\", \"transparent\");\n                    previewElement.css(\"filter\", realColor.toFilter());\n                }\n\n                if (opts.showAlpha) {\n                    var rgb = realColor.toRgb();\n                    rgb.a = 0;\n                    var realAlpha = tinycolor(rgb).toRgbString();\n                    var gradient = \"linear-gradient(left, \" + realAlpha + \", \" + realHex + \")\";\n\n                    if (IE) {\n                        alphaSliderInner.css(\"filter\", tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex));\n                    }\n                    else {\n                        alphaSliderInner.css(\"background\", \"-webkit-\" + gradient);\n                        alphaSliderInner.css(\"background\", \"-moz-\" + gradient);\n                        alphaSliderInner.css(\"background\", \"-ms-\" + gradient);\n                        // Use current syntax gradient on unprefixed property.\n                        alphaSliderInner.css(\"background\",\n                            \"linear-gradient(to right, \" + realAlpha + \", \" + realHex + \")\");\n                    }\n                }\n\n                displayColor = realColor.toString(format);\n            }\n\n            // Update the text entry input as it changes happen\n            if (opts.showInput) {\n                textInput.val(displayColor);\n            }\n\n            if (opts.showPalette) {\n                drawPalette();\n            }\n\n            drawInitial();\n        }\n\n        function updateHelperLocations() {\n            var s = currentSaturation;\n            var v = currentValue;\n\n            if(allowEmpty && isEmpty) {\n                //if selected color is empty, hide the helpers\n                alphaSlideHelper.hide();\n                slideHelper.hide();\n                dragHelper.hide();\n            }\n            else {\n                //make sure helpers are visible\n                alphaSlideHelper.show();\n                slideHelper.show();\n                dragHelper.show();\n\n                // Where to show the little circle in that displays your current selected color\n                var dragX = s * dragWidth;\n                var dragY = dragHeight - (v * dragHeight);\n                dragX = Math.max(\n                    -dragHelperHeight,\n                    Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight)\n                );\n                dragY = Math.max(\n                    -dragHelperHeight,\n                    Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight)\n                );\n                dragHelper.css({\n                    \"top\": dragY + \"px\",\n                    \"left\": dragX + \"px\"\n                });\n\n                var alphaX = currentAlpha * alphaWidth;\n                alphaSlideHelper.css({\n                    \"left\": (alphaX - (alphaSlideHelperWidth / 2)) + \"px\"\n                });\n\n                // Where to show the bar that displays your current selected hue\n                var slideY = (currentHue) * slideHeight;\n                slideHelper.css({\n                    \"top\": (slideY - slideHelperHeight) + \"px\"\n                });\n            }\n        }\n\n        function updateOriginalInput(fireCallback) {\n            var color = get(),\n                displayColor = '',\n                hasChanged = !tinycolor.equals(color, colorOnShow);\n\n            if (color) {\n                displayColor = color.toString(currentPreferredFormat);\n                // Update the selection palette with the current color\n                addColorToSelectionPalette(color);\n            }\n\n            if (isInput) {\n                boundElement.val(displayColor);\n            }\n\n            if (fireCallback && hasChanged) {\n                callbacks.change(color);\n                boundElement.trigger('change', [ color ]);\n            }\n        }\n\n        function reflow() {\n            if (!visible) {\n                return; // Calculations would be useless and wouldn't be reliable anyways\n            }\n            dragWidth = dragger.width();\n            dragHeight = dragger.height();\n            dragHelperHeight = dragHelper.height();\n            slideWidth = slider.width();\n            slideHeight = slider.height();\n            slideHelperHeight = slideHelper.height();\n            alphaWidth = alphaSlider.width();\n            alphaSlideHelperWidth = alphaSlideHelper.width();\n\n            if (!flat) {\n                container.css(\"position\", \"absolute\");\n                if (opts.offset) {\n                    container.offset(opts.offset);\n                } else {\n                    container.offset(getOffset(container, offsetElement));\n                }\n            }\n\n            updateHelperLocations();\n\n            if (opts.showPalette) {\n                drawPalette();\n            }\n\n            boundElement.trigger('reflow.spectrum');\n        }\n\n        function destroy() {\n            boundElement.show();\n            offsetElement.off(\"click.spectrum touchstart.spectrum\");\n            container.remove();\n            replacer.remove();\n            spectrums[spect.id] = null;\n        }\n\n        function option(optionName, optionValue) {\n            if (optionName === undefined) {\n                return $.extend({}, opts);\n            }\n            if (optionValue === undefined) {\n                return opts[optionName];\n            }\n\n            opts[optionName] = optionValue;\n\n            if (optionName === \"preferredFormat\") {\n                currentPreferredFormat = opts.preferredFormat;\n            }\n            applyOptions();\n        }\n\n        function enable() {\n            disabled = false;\n            boundElement.attr(\"disabled\", false);\n            offsetElement.removeClass(\"sp-disabled\");\n        }\n\n        function disable() {\n            hide();\n            disabled = true;\n            boundElement.attr(\"disabled\", true);\n            offsetElement.addClass(\"sp-disabled\");\n        }\n\n        function setOffset(coord) {\n            opts.offset = coord;\n            reflow();\n        }\n\n        initialize();\n\n        var spect = {\n            show: show,\n            hide: hide,\n            toggle: toggle,\n            reflow: reflow,\n            option: option,\n            enable: enable,\n            disable: disable,\n            offset: setOffset,\n            set: function (c) {\n                set(c);\n                updateOriginalInput();\n            },\n            get: get,\n            destroy: destroy,\n            container: container\n        };\n\n        spect.id = spectrums.push(spect) - 1;\n\n        return spect;\n    }\n\n    /**\n    * checkOffset - get the offset below/above and left/right element depending on screen position\n    * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js\n    */\n    function getOffset(picker, input) {\n        var extraY = 0;\n        var dpWidth = picker.outerWidth();\n        var dpHeight = picker.outerHeight();\n        var inputHeight = input.outerHeight();\n        var doc = picker[0].ownerDocument;\n        var docElem = doc.documentElement;\n        var viewWidth = docElem.clientWidth + $(doc).scrollLeft();\n        var viewHeight = docElem.clientHeight + $(doc).scrollTop();\n        var offset = input.offset();\n        var offsetLeft = offset.left;\n        var offsetTop = offset.top;\n\n        offsetTop += inputHeight;\n\n        offsetLeft -=\n            Math.min(offsetLeft, (offsetLeft + dpWidth > viewWidth && viewWidth > dpWidth) ?\n            Math.abs(offsetLeft + dpWidth - viewWidth) : 0);\n\n        offsetTop -=\n            Math.min(offsetTop, ((offsetTop + dpHeight > viewHeight && viewHeight > dpHeight) ?\n            Math.abs(dpHeight + inputHeight - extraY) : extraY));\n\n        return {\n            top: offsetTop,\n            bottom: offset.bottom,\n            left: offsetLeft,\n            right: offset.right,\n            width: offset.width,\n            height: offset.height\n        };\n    }\n\n    /**\n    * noop - do nothing\n    */\n    function noop() {\n\n    }\n\n    /**\n    * stopPropagation - makes the code only doing this a little easier to read in line\n    */\n    function stopPropagation(e) {\n        e.stopPropagation();\n    }\n\n    /**\n    * Create a function bound to a given object\n    * Thanks to underscore.js\n    */\n    function bind(func, obj) {\n        var slice = Array.prototype.slice;\n        var args = slice.call(arguments, 2);\n        return function () {\n            return func.apply(obj, args.concat(slice.call(arguments)));\n        };\n    }\n\n    /**\n    * Lightweight drag helper.  Handles containment within the element, so that\n    * when dragging, the x is within [0,element.width] and y is within [0,element.height]\n    */\n    function draggable(element, onmove, onstart, onstop) {\n        onmove = onmove || function () { };\n        onstart = onstart || function () { };\n        onstop = onstop || function () { };\n        var doc = document;\n        var dragging = false;\n        var offset = {};\n        var maxHeight = 0;\n        var maxWidth = 0;\n        var hasTouch = ('ontouchstart' in window);\n\n        var duringDragEvents = {};\n        duringDragEvents[\"selectstart\"] = prevent;\n        duringDragEvents[\"dragstart\"] = prevent;\n        duringDragEvents[\"touchmove mousemove\"] = move;\n        duringDragEvents[\"touchend mouseup\"] = stop;\n\n        function prevent(e) {\n            if (e.stopPropagation) {\n                e.stopPropagation();\n            }\n            if (e.preventDefault) {\n                e.preventDefault();\n            }\n            e.returnValue = false;\n        }\n\n        function move(e) {\n            if (dragging) {\n                // Mouseup happened outside of window\n                if (IE && doc.documentMode < 9 && !e.button) {\n                    return stop();\n                }\n\n                var t0 = e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0];\n                var pageX = t0 && t0.pageX || e.pageX;\n                var pageY = t0 && t0.pageY || e.pageY;\n\n                var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth));\n                var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight));\n\n                if (hasTouch) {\n                    // Stop scrolling in iOS\n                    prevent(e);\n                }\n\n                onmove.apply(element, [dragX, dragY, e]);\n            }\n        }\n\n        function start(e) {\n            var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);\n\n            if (!rightclick && !dragging) {\n                if (onstart.apply(element, arguments) !== false) {\n                    dragging = true;\n                    maxHeight = $(element).height();\n                    maxWidth = $(element).width();\n                    offset = $(element).offset();\n\n                    $(doc).on(duringDragEvents);\n                    $(doc.body).addClass(\"sp-dragging\");\n\n                    move(e);\n\n                    prevent(e);\n                }\n            }\n        }\n\n        function stop() {\n            if (dragging) {\n                $(doc).off(duringDragEvents);\n                $(doc.body).removeClass(\"sp-dragging\");\n\n                // Wait a tick before notifying observers to allow the click event\n                // to fire in Chrome.\n                setTimeout(function() {\n                    onstop.apply(element, arguments);\n                }, 0);\n            }\n            dragging = false;\n        }\n\n        $(element).on(\"touchstart mousedown\", start);\n    }\n\n    function throttle(func, wait, debounce) {\n        var timeout;\n        return function () {\n            var context = this, args = arguments;\n            var throttler = function () {\n                timeout = null;\n                func.apply(context, args);\n            };\n            if (debounce) clearTimeout(timeout);\n            if (debounce || !timeout) timeout = setTimeout(throttler, wait);\n        };\n    }\n\n    function inputTypeColorSupport() {\n        return $.fn.spectrum.inputTypeColorSupport();\n    }\n\n    /**\n    * Define a jQuery plugin\n    */\n    var dataID = \"spectrum.id\";\n    $.fn.spectrum = function (opts, extra) {\n\n        if (typeof opts == \"string\") {\n\n            var returnValue = this;\n            var args = Array.prototype.slice.call( arguments, 1 );\n\n            this.each(function () {\n                var spect = spectrums[$(this).data(dataID)];\n                if (spect) {\n                    var method = spect[opts];\n                    if (!method) {\n                        throw new Error( \"Spectrum: no such method: '\" + opts + \"'\" );\n                    }\n\n                    if (opts == \"get\") {\n                        returnValue = spect.get();\n                    }\n                    else if (opts == \"container\") {\n                        returnValue = spect.container;\n                    }\n                    else if (opts == \"option\") {\n                        returnValue = spect.option.apply(spect, args);\n                    }\n                    else if (opts == \"destroy\") {\n                        spect.destroy();\n                        $(this).removeData(dataID);\n                    }\n                    else {\n                        method.apply(spect, args);\n                    }\n                }\n            });\n\n            return returnValue;\n        }\n\n        // Initializing a new instance of spectrum\n        return this.spectrum(\"destroy\").each(function () {\n            var options = $.extend({}, $(this).data(), opts);\n            var spect = spectrum(this, options);\n            $(this).data(dataID, spect.id);\n        });\n    };\n\n    $.fn.spectrum.load = true;\n    $.fn.spectrum.loadOpts = {};\n    $.fn.spectrum.draggable = draggable;\n    $.fn.spectrum.defaults = defaultOpts;\n    $.fn.spectrum.inputTypeColorSupport = function inputTypeColorSupport() {\n        if (typeof inputTypeColorSupport._cachedResult === \"undefined\") {\n            var colorInput = $(\"<input type='color'/>\")[0]; // if color element is supported, value will default to not null\n            inputTypeColorSupport._cachedResult = colorInput.type === \"color\" && colorInput.value !== \"\";\n        }\n        return inputTypeColorSupport._cachedResult;\n    };\n\n    $.spectrum = { };\n    $.spectrum.localization = { };\n    $.spectrum.palettes = { };\n\n    $.fn.spectrum.processNativeColorInputs = function () {\n        var colorInputs = $(\"input[type=color]\");\n        if (colorInputs.length && !inputTypeColorSupport()) {\n            colorInputs.spectrum({\n                preferredFormat: \"hex6\"\n            });\n        }\n    };\n\n    // TinyColor v1.6.0\n    // https://github.com/bgrins/TinyColor\n    // Brian Grinstead, MIT License\n\n    (function() {\n    function _typeof(obj) {\n        \"@babel/helpers - typeof\";\n\n        return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n            return typeof obj;\n        } : function (obj) {\n            return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n        }, _typeof(obj);\n    }\n\n    var trimLeft = /^\\s+/;\n    var trimRight = /\\s+$/;\n    function tinycolor(color, opts) {\n        color = color ? color : \"\";\n        opts = opts || {};\n\n        // If input is already a tinycolor, return itself\n        if (color instanceof tinycolor) {\n            return color;\n        }\n        // If we are called as a function, call using new instead\n        if (!(this instanceof tinycolor)) {\n            return new tinycolor(color, opts);\n        }\n        var rgb = inputToRGB(color);\n        this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n        this._gradientType = opts.gradientType;\n\n        // Don't let the range of [0,255] come back in [0,1].\n        // Potentially lose a little bit of precision here, but will fix issues where\n        // .5 gets interpreted as half of the total, instead of half of 1\n        // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n        if (this._r < 1) this._r = Math.round(this._r);\n        if (this._g < 1) this._g = Math.round(this._g);\n        if (this._b < 1) this._b = Math.round(this._b);\n        this._ok = rgb.ok;\n    }\n    tinycolor.prototype = {\n        isDark: function isDark() {\n            return this.getBrightness() < 128;\n        },\n        isLight: function isLight() {\n            return !this.isDark();\n        },\n        isValid: function isValid() {\n            return this._ok;\n        },\n        getOriginalInput: function getOriginalInput() {\n            return this._originalInput;\n        },\n        getFormat: function getFormat() {\n            return this._format;\n        },\n        getAlpha: function getAlpha() {\n            return this._a;\n        },\n        getBrightness: function getBrightness() {\n            //http://www.w3.org/TR/AERT#color-contrast\n            var rgb = this.toRgb();\n            return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n        },\n        getLuminance: function getLuminance() {\n            //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n            var rgb = this.toRgb();\n            var RsRGB, GsRGB, BsRGB, R, G, B;\n            RsRGB = rgb.r / 255;\n            GsRGB = rgb.g / 255;\n            BsRGB = rgb.b / 255;\n            if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n            if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n            if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n            return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n        },\n        setAlpha: function setAlpha(value) {\n            this._a = boundAlpha(value);\n            this._roundA = Math.round(100 * this._a) / 100;\n            return this;\n        },\n        toHsv: function toHsv() {\n            var hsv = rgbToHsv(this._r, this._g, this._b);\n            return {\n                h: hsv.h * 360,\n                s: hsv.s,\n                v: hsv.v,\n                a: this._a\n            };\n        },\n        toHsvString: function toHsvString() {\n            var hsv = rgbToHsv(this._r, this._g, this._b);\n            var h = Math.round(hsv.h * 360),\n                s = Math.round(hsv.s * 100),\n                v = Math.round(hsv.v * 100);\n            return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n        },\n        toHsl: function toHsl() {\n            var hsl = rgbToHsl(this._r, this._g, this._b);\n            return {\n                h: hsl.h * 360,\n                s: hsl.s,\n                l: hsl.l,\n                a: this._a\n            };\n        },\n        toHslString: function toHslString() {\n            var hsl = rgbToHsl(this._r, this._g, this._b);\n            var h = Math.round(hsl.h * 360),\n                s = Math.round(hsl.s * 100),\n                l = Math.round(hsl.l * 100);\n            return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n        },\n        toHex: function toHex(allow3Char) {\n            return rgbToHex(this._r, this._g, this._b, allow3Char);\n        },\n        toHexString: function toHexString(allow3Char) {\n            return \"#\" + this.toHex(allow3Char);\n        },\n        toHex8: function toHex8(allow4Char) {\n            return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n        },\n        toHex8String: function toHex8String(allow4Char) {\n            return \"#\" + this.toHex8(allow4Char);\n        },\n        toRgb: function toRgb() {\n            return {\n                r: Math.round(this._r),\n                g: Math.round(this._g),\n                b: Math.round(this._b),\n                a: this._a\n            };\n        },\n        toRgbString: function toRgbString() {\n            return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n        },\n        toPercentageRgb: function toPercentageRgb() {\n            return {\n                r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n                g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n                b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n                a: this._a\n            };\n        },\n        toPercentageRgbString: function toPercentageRgbString() {\n            return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n        },\n        toName: function toName() {\n            if (this._a === 0) {\n                return \"transparent\";\n            }\n            if (this._a < 1) {\n                return false;\n            }\n            return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n        },\n        toFilter: function toFilter(secondColor) {\n            var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n            var secondHex8String = hex8String;\n            var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n            if (secondColor) {\n                var s = tinycolor(secondColor);\n                secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n            }\n            return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n        },\n        toString: function toString(format) {\n            var formatSet = !!format;\n            format = format || this._format;\n            var formattedString = false;\n            var hasAlpha = this._a < 1 && this._a >= 0;\n            var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n            if (needsAlphaFormat) {\n                // Special case for \"transparent\", all other non-alpha formats\n                // will return rgba when there is transparency.\n                if (format === \"name\" && this._a === 0) {\n                    return this.toName();\n                }\n                return this.toRgbString();\n            }\n            if (format === \"rgb\") {\n                formattedString = this.toRgbString();\n            }\n            if (format === \"prgb\") {\n                formattedString = this.toPercentageRgbString();\n            }\n            if (format === \"hex\" || format === \"hex6\") {\n                formattedString = this.toHexString();\n            }\n            if (format === \"hex3\") {\n                formattedString = this.toHexString(true);\n            }\n            if (format === \"hex4\") {\n                formattedString = this.toHex8String(true);\n            }\n            if (format === \"hex8\") {\n                formattedString = this.toHex8String();\n            }\n            if (format === \"name\") {\n                formattedString = this.toName();\n            }\n            if (format === \"hsl\") {\n                formattedString = this.toHslString();\n            }\n            if (format === \"hsv\") {\n                formattedString = this.toHsvString();\n            }\n            return formattedString || this.toHexString();\n        },\n        clone: function clone() {\n            return tinycolor(this.toString());\n        },\n        _applyModification: function _applyModification(fn, args) {\n            var color = fn.apply(null, [this].concat([].slice.call(args)));\n            this._r = color._r;\n            this._g = color._g;\n            this._b = color._b;\n            this.setAlpha(color._a);\n            return this;\n        },\n        lighten: function lighten() {\n            return this._applyModification(_lighten, arguments);\n        },\n        brighten: function brighten() {\n            return this._applyModification(_brighten, arguments);\n        },\n        darken: function darken() {\n            return this._applyModification(_darken, arguments);\n        },\n        desaturate: function desaturate() {\n            return this._applyModification(_desaturate, arguments);\n        },\n        saturate: function saturate() {\n            return this._applyModification(_saturate, arguments);\n        },\n        greyscale: function greyscale() {\n            return this._applyModification(_greyscale, arguments);\n        },\n        spin: function spin() {\n            return this._applyModification(_spin, arguments);\n        },\n        _applyCombination: function _applyCombination(fn, args) {\n            return fn.apply(null, [this].concat([].slice.call(args)));\n        },\n        analogous: function analogous() {\n            return this._applyCombination(_analogous, arguments);\n        },\n        complement: function complement() {\n            return this._applyCombination(_complement, arguments);\n        },\n        monochromatic: function monochromatic() {\n            return this._applyCombination(_monochromatic, arguments);\n        },\n        splitcomplement: function splitcomplement() {\n            return this._applyCombination(_splitcomplement, arguments);\n        },\n        // Disabled until https://github.com/bgrins/TinyColor/issues/254\n        // polyad: function (number) {\n        //   return this._applyCombination(polyad, [number]);\n        // },\n        triad: function triad() {\n            return this._applyCombination(polyad, [3]);\n        },\n        tetrad: function tetrad() {\n            return this._applyCombination(polyad, [4]);\n        }\n    };\n\n    // If input is an object, force 1 into \"1.0\" to handle ratios properly\n    // String input requires \"1.0\" as input, so 1 will be treated as 1\n    tinycolor.fromRatio = function (color, opts) {\n        if (_typeof(color) == \"object\") {\n            var newColor = {};\n            for (var i in color) {\n                if (color.hasOwnProperty(i)) {\n                    if (i === \"a\") {\n                        newColor[i] = color[i];\n                    } else {\n                        newColor[i] = convertToPercentage(color[i]);\n                    }\n                }\n            }\n            color = newColor;\n        }\n        return tinycolor(color, opts);\n    };\n\n    // Given a string or object, convert that input to RGB\n    // Possible string inputs:\n    //\n    //     \"red\"\n    //     \"#f00\" or \"f00\"\n    //     \"#ff0000\" or \"ff0000\"\n    //     \"#ff000000\" or \"ff000000\"\n    //     \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n    //     \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n    //     \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n    //     \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n    //     \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n    //     \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n    //     \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n    //\n    function inputToRGB(color) {\n        var rgb = {\n            r: 0,\n            g: 0,\n            b: 0\n        };\n        var a = 1;\n        var s = null;\n        var v = null;\n        var l = null;\n        var ok = false;\n        var format = false;\n        if (typeof color == \"string\") {\n            color = stringInputToObject(color);\n        }\n        if (_typeof(color) == \"object\") {\n            if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n                rgb = rgbToRgb(color.r, color.g, color.b);\n                ok = true;\n                format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n            } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n                s = convertToPercentage(color.s);\n                v = convertToPercentage(color.v);\n                rgb = hsvToRgb(color.h, s, v);\n                ok = true;\n                format = \"hsv\";\n            } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n                s = convertToPercentage(color.s);\n                l = convertToPercentage(color.l);\n                rgb = hslToRgb(color.h, s, l);\n                ok = true;\n                format = \"hsl\";\n            }\n            if (color.hasOwnProperty(\"a\")) {\n                a = color.a;\n            }\n        }\n        a = boundAlpha(a);\n        return {\n            ok: ok,\n            format: color.format || format,\n            r: Math.min(255, Math.max(rgb.r, 0)),\n            g: Math.min(255, Math.max(rgb.g, 0)),\n            b: Math.min(255, Math.max(rgb.b, 0)),\n            a: a\n        };\n    }\n\n    // Conversion Functions\n    // --------------------\n\n    // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n    // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n    // `rgbToRgb`\n    // Handle bounds / percentage checking to conform to CSS color spec\n    // <http://www.w3.org/TR/css3-color/>\n    // *Assumes:* r, g, b in [0, 255] or [0, 1]\n    // *Returns:* { r, g, b } in [0, 255]\n    function rgbToRgb(r, g, b) {\n        return {\n            r: bound01(r, 255) * 255,\n            g: bound01(g, 255) * 255,\n            b: bound01(b, 255) * 255\n        };\n    }\n\n    // `rgbToHsl`\n    // Converts an RGB color value to HSL.\n    // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n    // *Returns:* { h, s, l } in [0,1]\n    function rgbToHsl(r, g, b) {\n        r = bound01(r, 255);\n        g = bound01(g, 255);\n        b = bound01(b, 255);\n        var max = Math.max(r, g, b),\n            min = Math.min(r, g, b);\n        var h,\n            s,\n            l = (max + min) / 2;\n        if (max == min) {\n            h = s = 0; // achromatic\n        } else {\n            var d = max - min;\n            s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n            switch (max) {\n                case r:\n                    h = (g - b) / d + (g < b ? 6 : 0);\n                    break;\n                case g:\n                    h = (b - r) / d + 2;\n                    break;\n                case b:\n                    h = (r - g) / d + 4;\n                    break;\n            }\n            h /= 6;\n        }\n        return {\n            h: h,\n            s: s,\n            l: l\n        };\n    }\n\n    // `hslToRgb`\n    // Converts an HSL color value to RGB.\n    // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n    // *Returns:* { r, g, b } in the set [0, 255]\n    function hslToRgb(h, s, l) {\n        var r, g, b;\n        h = bound01(h, 360);\n        s = bound01(s, 100);\n        l = bound01(l, 100);\n        function hue2rgb(p, q, t) {\n            if (t < 0) t += 1;\n            if (t > 1) t -= 1;\n            if (t < 1 / 6) return p + (q - p) * 6 * t;\n            if (t < 1 / 2) return q;\n            if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n            return p;\n        }\n        if (s === 0) {\n            r = g = b = l; // achromatic\n        } else {\n            var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n            var p = 2 * l - q;\n            r = hue2rgb(p, q, h + 1 / 3);\n            g = hue2rgb(p, q, h);\n            b = hue2rgb(p, q, h - 1 / 3);\n        }\n        return {\n            r: r * 255,\n            g: g * 255,\n            b: b * 255\n        };\n    }\n\n    // `rgbToHsv`\n    // Converts an RGB color value to HSV\n    // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n    // *Returns:* { h, s, v } in [0,1]\n    function rgbToHsv(r, g, b) {\n        r = bound01(r, 255);\n        g = bound01(g, 255);\n        b = bound01(b, 255);\n        var max = Math.max(r, g, b),\n            min = Math.min(r, g, b);\n        var h,\n            s,\n            v = max;\n        var d = max - min;\n        s = max === 0 ? 0 : d / max;\n        if (max == min) {\n            h = 0; // achromatic\n        } else {\n            switch (max) {\n                case r:\n                    h = (g - b) / d + (g < b ? 6 : 0);\n                    break;\n                case g:\n                    h = (b - r) / d + 2;\n                    break;\n                case b:\n                    h = (r - g) / d + 4;\n                    break;\n            }\n            h /= 6;\n        }\n        return {\n            h: h,\n            s: s,\n            v: v\n        };\n    }\n\n    // `hsvToRgb`\n    // Converts an HSV color value to RGB.\n    // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n    // *Returns:* { r, g, b } in the set [0, 255]\n    function hsvToRgb(h, s, v) {\n        h = bound01(h, 360) * 6;\n        s = bound01(s, 100);\n        v = bound01(v, 100);\n        var i = Math.floor(h),\n            f = h - i,\n            p = v * (1 - s),\n            q = v * (1 - f * s),\n            t = v * (1 - (1 - f) * s),\n            mod = i % 6,\n            r = [v, q, p, p, t, v][mod],\n            g = [t, v, v, q, p, p][mod],\n            b = [p, p, t, v, v, q][mod];\n        return {\n            r: r * 255,\n            g: g * 255,\n            b: b * 255\n        };\n    }\n\n    // `rgbToHex`\n    // Converts an RGB color to hex\n    // Assumes r, g, and b are contained in the set [0, 255]\n    // Returns a 3 or 6 character hex\n    function rgbToHex(r, g, b, allow3Char) {\n        var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n        // Return a 3 character hex if possible\n        if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n            return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n        }\n        return hex.join(\"\");\n    }\n\n    // `rgbaToHex`\n    // Converts an RGBA color plus alpha transparency to hex\n    // Assumes r, g, b are contained in the set [0, 255] and\n    // a in [0, 1]. Returns a 4 or 8 character rgba hex\n    function rgbaToHex(r, g, b, a, allow4Char) {\n        var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n        // Return a 4 character hex if possible\n        if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n            return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n        }\n        return hex.join(\"\");\n    }\n\n    // `rgbaToArgbHex`\n    // Converts an RGBA color to an ARGB Hex8 string\n    // Rarely used, but required for \"toFilter()\"\n    function rgbaToArgbHex(r, g, b, a) {\n        var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n        return hex.join(\"\");\n    }\n\n    // `equals`\n    // Can be called with any tinycolor input\n    tinycolor.equals = function (color1, color2) {\n        if (!color1 || !color2) return false;\n        return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n    };\n    tinycolor.random = function () {\n        return tinycolor.fromRatio({\n            r: Math.random(),\n            g: Math.random(),\n            b: Math.random()\n        });\n    };\n\n    // Modification Functions\n    // ----------------------\n    // Thanks to less.js for some of the basics here\n    // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\n    function _desaturate(color, amount) {\n        amount = amount === 0 ? 0 : amount || 10;\n        var hsl = tinycolor(color).toHsl();\n        hsl.s -= amount / 100;\n        hsl.s = clamp01(hsl.s);\n        return tinycolor(hsl);\n    }\n    function _saturate(color, amount) {\n        amount = amount === 0 ? 0 : amount || 10;\n        var hsl = tinycolor(color).toHsl();\n        hsl.s += amount / 100;\n        hsl.s = clamp01(hsl.s);\n        return tinycolor(hsl);\n    }\n    function _greyscale(color) {\n        return tinycolor(color).desaturate(100);\n    }\n    function _lighten(color, amount) {\n        amount = amount === 0 ? 0 : amount || 10;\n        var hsl = tinycolor(color).toHsl();\n        hsl.l += amount / 100;\n        hsl.l = clamp01(hsl.l);\n        return tinycolor(hsl);\n    }\n    function _brighten(color, amount) {\n        amount = amount === 0 ? 0 : amount || 10;\n        var rgb = tinycolor(color).toRgb();\n        rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n        rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n        rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n        return tinycolor(rgb);\n    }\n    function _darken(color, amount) {\n        amount = amount === 0 ? 0 : amount || 10;\n        var hsl = tinycolor(color).toHsl();\n        hsl.l -= amount / 100;\n        hsl.l = clamp01(hsl.l);\n        return tinycolor(hsl);\n    }\n\n    // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n    // Values outside of this range will be wrapped into this range.\n    function _spin(color, amount) {\n        var hsl = tinycolor(color).toHsl();\n        var hue = (hsl.h + amount) % 360;\n        hsl.h = hue < 0 ? 360 + hue : hue;\n        return tinycolor(hsl);\n    }\n\n    // Combination Functions\n    // ---------------------\n    // Thanks to jQuery xColor for some of the ideas behind these\n    // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\n    function _complement(color) {\n        var hsl = tinycolor(color).toHsl();\n        hsl.h = (hsl.h + 180) % 360;\n        return tinycolor(hsl);\n    }\n    function polyad(color, number) {\n        if (isNaN(number) || number <= 0) {\n            throw new Error(\"Argument to polyad must be a positive number\");\n        }\n        var hsl = tinycolor(color).toHsl();\n        var result = [tinycolor(color)];\n        var step = 360 / number;\n        for (var i = 1; i < number; i++) {\n            result.push(tinycolor({\n                h: (hsl.h + i * step) % 360,\n                s: hsl.s,\n                l: hsl.l\n            }));\n        }\n        return result;\n    }\n    function _splitcomplement(color) {\n        var hsl = tinycolor(color).toHsl();\n        var h = hsl.h;\n        return [tinycolor(color), tinycolor({\n            h: (h + 72) % 360,\n            s: hsl.s,\n            l: hsl.l\n        }), tinycolor({\n            h: (h + 216) % 360,\n            s: hsl.s,\n            l: hsl.l\n        })];\n    }\n    function _analogous(color, results, slices) {\n        results = results || 6;\n        slices = slices || 30;\n        var hsl = tinycolor(color).toHsl();\n        var part = 360 / slices;\n        var ret = [tinycolor(color)];\n        for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n            hsl.h = (hsl.h + part) % 360;\n            ret.push(tinycolor(hsl));\n        }\n        return ret;\n    }\n    function _monochromatic(color, results) {\n        results = results || 6;\n        var hsv = tinycolor(color).toHsv();\n        var h = hsv.h,\n            s = hsv.s,\n            v = hsv.v;\n        var ret = [];\n        var modification = 1 / results;\n        while (results--) {\n            ret.push(tinycolor({\n                h: h,\n                s: s,\n                v: v\n            }));\n            v = (v + modification) % 1;\n        }\n        return ret;\n    }\n\n    // Utility Functions\n    // ---------------------\n\n    tinycolor.mix = function (color1, color2, amount) {\n        amount = amount === 0 ? 0 : amount || 50;\n        var rgb1 = tinycolor(color1).toRgb();\n        var rgb2 = tinycolor(color2).toRgb();\n        var p = amount / 100;\n        var rgba = {\n            r: (rgb2.r - rgb1.r) * p + rgb1.r,\n            g: (rgb2.g - rgb1.g) * p + rgb1.g,\n            b: (rgb2.b - rgb1.b) * p + rgb1.b,\n            a: (rgb2.a - rgb1.a) * p + rgb1.a\n        };\n        return tinycolor(rgba);\n    };\n\n    // Readability Functions\n    // ---------------------\n    // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n    // `contrast`\n    // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\n    tinycolor.readability = function (color1, color2) {\n        var c1 = tinycolor(color1);\n        var c2 = tinycolor(color2);\n        return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n    };\n\n    // `isReadable`\n    // Ensure that foreground and background color combinations meet WCAG2 guidelines.\n    // The third argument is an optional Object.\n    //      the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n    //      the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n    // If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n    // *Example*\n    //    tinycolor.isReadable(\"#000\", \"#111\") => false\n    //    tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\n    tinycolor.isReadable = function (color1, color2, wcag2) {\n        var readability = tinycolor.readability(color1, color2);\n        var wcag2Parms, out;\n        out = false;\n        wcag2Parms = validateWCAG2Parms(wcag2);\n        switch (wcag2Parms.level + wcag2Parms.size) {\n            case \"AAsmall\":\n            case \"AAAlarge\":\n                out = readability >= 4.5;\n                break;\n            case \"AAlarge\":\n                out = readability >= 3;\n                break;\n            case \"AAAsmall\":\n                out = readability >= 7;\n                break;\n        }\n        return out;\n    };\n\n    // `mostReadable`\n    // Given a base color and a list of possible foreground or background\n    // colors for that base, returns the most readable color.\n    // Optionally returns Black or White if the most readable color is unreadable.\n    // *Example*\n    //    tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n    //    tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString();  // \"#ffffff\"\n    //    tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n    //    tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\n    tinycolor.mostReadable = function (baseColor, colorList, args) {\n        var bestColor = null;\n        var bestScore = 0;\n        var readability;\n        var includeFallbackColors, level, size;\n        args = args || {};\n        includeFallbackColors = args.includeFallbackColors;\n        level = args.level;\n        size = args.size;\n        for (var i = 0; i < colorList.length; i++) {\n            readability = tinycolor.readability(baseColor, colorList[i]);\n            if (readability > bestScore) {\n                bestScore = readability;\n                bestColor = tinycolor(colorList[i]);\n            }\n        }\n        if (tinycolor.isReadable(baseColor, bestColor, {\n            level: level,\n            size: size\n        }) || !includeFallbackColors) {\n            return bestColor;\n        } else {\n            args.includeFallbackColors = false;\n            return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n        }\n    };\n\n    // Big List of Colors\n    // ------------------\n    // <https://www.w3.org/TR/css-color-4/#named-colors>\n    var names = tinycolor.names = {\n        aliceblue: \"f0f8ff\",\n        antiquewhite: \"faebd7\",\n        aqua: \"0ff\",\n        aquamarine: \"7fffd4\",\n        azure: \"f0ffff\",\n        beige: \"f5f5dc\",\n        bisque: \"ffe4c4\",\n        black: \"000\",\n        blanchedalmond: \"ffebcd\",\n        blue: \"00f\",\n        blueviolet: \"8a2be2\",\n        brown: \"a52a2a\",\n        burlywood: \"deb887\",\n        burntsienna: \"ea7e5d\",\n        cadetblue: \"5f9ea0\",\n        chartreuse: \"7fff00\",\n        chocolate: \"d2691e\",\n        coral: \"ff7f50\",\n        cornflowerblue: \"6495ed\",\n        cornsilk: \"fff8dc\",\n        crimson: \"dc143c\",\n        cyan: \"0ff\",\n        darkblue: \"00008b\",\n        darkcyan: \"008b8b\",\n        darkgoldenrod: \"b8860b\",\n        darkgray: \"a9a9a9\",\n        darkgreen: \"006400\",\n        darkgrey: \"a9a9a9\",\n        darkkhaki: \"bdb76b\",\n        darkmagenta: \"8b008b\",\n        darkolivegreen: \"556b2f\",\n        darkorange: \"ff8c00\",\n        darkorchid: \"9932cc\",\n        darkred: \"8b0000\",\n        darksalmon: \"e9967a\",\n        darkseagreen: \"8fbc8f\",\n        darkslateblue: \"483d8b\",\n        darkslategray: \"2f4f4f\",\n        darkslategrey: \"2f4f4f\",\n        darkturquoise: \"00ced1\",\n        darkviolet: \"9400d3\",\n        deeppink: \"ff1493\",\n        deepskyblue: \"00bfff\",\n        dimgray: \"696969\",\n        dimgrey: \"696969\",\n        dodgerblue: \"1e90ff\",\n        firebrick: \"b22222\",\n        floralwhite: \"fffaf0\",\n        forestgreen: \"228b22\",\n        fuchsia: \"f0f\",\n        gainsboro: \"dcdcdc\",\n        ghostwhite: \"f8f8ff\",\n        gold: \"ffd700\",\n        goldenrod: \"daa520\",\n        gray: \"808080\",\n        green: \"008000\",\n        greenyellow: \"adff2f\",\n        grey: \"808080\",\n        honeydew: \"f0fff0\",\n        hotpink: \"ff69b4\",\n        indianred: \"cd5c5c\",\n        indigo: \"4b0082\",\n        ivory: \"fffff0\",\n        khaki: \"f0e68c\",\n        lavender: \"e6e6fa\",\n        lavenderblush: \"fff0f5\",\n        lawngreen: \"7cfc00\",\n        lemonchiffon: \"fffacd\",\n        lightblue: \"add8e6\",\n        lightcoral: \"f08080\",\n        lightcyan: \"e0ffff\",\n        lightgoldenrodyellow: \"fafad2\",\n        lightgray: \"d3d3d3\",\n        lightgreen: \"90ee90\",\n        lightgrey: \"d3d3d3\",\n        lightpink: \"ffb6c1\",\n        lightsalmon: \"ffa07a\",\n        lightseagreen: \"20b2aa\",\n        lightskyblue: \"87cefa\",\n        lightslategray: \"789\",\n        lightslategrey: \"789\",\n        lightsteelblue: \"b0c4de\",\n        lightyellow: \"ffffe0\",\n        lime: \"0f0\",\n        limegreen: \"32cd32\",\n        linen: \"faf0e6\",\n        magenta: \"f0f\",\n        maroon: \"800000\",\n        mediumaquamarine: \"66cdaa\",\n        mediumblue: \"0000cd\",\n        mediumorchid: \"ba55d3\",\n        mediumpurple: \"9370db\",\n        mediumseagreen: \"3cb371\",\n        mediumslateblue: \"7b68ee\",\n        mediumspringgreen: \"00fa9a\",\n        mediumturquoise: \"48d1cc\",\n        mediumvioletred: \"c71585\",\n        midnightblue: \"191970\",\n        mintcream: \"f5fffa\",\n        mistyrose: \"ffe4e1\",\n        moccasin: \"ffe4b5\",\n        navajowhite: \"ffdead\",\n        navy: \"000080\",\n        oldlace: \"fdf5e6\",\n        olive: \"808000\",\n        olivedrab: \"6b8e23\",\n        orange: \"ffa500\",\n        orangered: \"ff4500\",\n        orchid: \"da70d6\",\n        palegoldenrod: \"eee8aa\",\n        palegreen: \"98fb98\",\n        paleturquoise: \"afeeee\",\n        palevioletred: \"db7093\",\n        papayawhip: \"ffefd5\",\n        peachpuff: \"ffdab9\",\n        peru: \"cd853f\",\n        pink: \"ffc0cb\",\n        plum: \"dda0dd\",\n        powderblue: \"b0e0e6\",\n        purple: \"800080\",\n        rebeccapurple: \"663399\",\n        red: \"f00\",\n        rosybrown: \"bc8f8f\",\n        royalblue: \"4169e1\",\n        saddlebrown: \"8b4513\",\n        salmon: \"fa8072\",\n        sandybrown: \"f4a460\",\n        seagreen: \"2e8b57\",\n        seashell: \"fff5ee\",\n        sienna: \"a0522d\",\n        silver: \"c0c0c0\",\n        skyblue: \"87ceeb\",\n        slateblue: \"6a5acd\",\n        slategray: \"708090\",\n        slategrey: \"708090\",\n        snow: \"fffafa\",\n        springgreen: \"00ff7f\",\n        steelblue: \"4682b4\",\n        tan: \"d2b48c\",\n        teal: \"008080\",\n        thistle: \"d8bfd8\",\n        tomato: \"ff6347\",\n        turquoise: \"40e0d0\",\n        violet: \"ee82ee\",\n        wheat: \"f5deb3\",\n        white: \"fff\",\n        whitesmoke: \"f5f5f5\",\n        yellow: \"ff0\",\n        yellowgreen: \"9acd32\"\n    };\n\n    // Make it easy to access colors via `hexNames[hex]`\n    var hexNames = tinycolor.hexNames = flip(names);\n\n    // Utilities\n    // ---------\n\n    // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n    function flip(o) {\n        var flipped = {};\n        for (var i in o) {\n            if (o.hasOwnProperty(i)) {\n                flipped[o[i]] = i;\n            }\n        }\n        return flipped;\n    }\n\n    // Return a valid alpha value [0,1] with all invalid values being set to 1\n    function boundAlpha(a) {\n        a = parseFloat(a);\n        if (isNaN(a) || a < 0 || a > 1) {\n            a = 1;\n        }\n        return a;\n    }\n\n    // Take input from [0, n] and return it as [0, 1]\n    function bound01(n, max) {\n        if (isOnePointZero(n)) n = \"100%\";\n        var processPercent = isPercentage(n);\n        n = Math.min(max, Math.max(0, parseFloat(n)));\n\n        // Automatically convert percentage into number\n        if (processPercent) {\n            n = parseInt(n * max, 10) / 100;\n        }\n\n        // Handle floating point rounding errors\n        if (Math.abs(n - max) < 0.000001) {\n            return 1;\n        }\n\n        // Convert into [0, 1] range if it isn't already\n        return n % max / parseFloat(max);\n    }\n\n    // Force a number between 0 and 1\n    function clamp01(val) {\n        return Math.min(1, Math.max(0, val));\n    }\n\n    // Parse a base-16 hex value into a base-10 integer\n    function parseIntFromHex(val) {\n        return parseInt(val, 16);\n    }\n\n    // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n    // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n    function isOnePointZero(n) {\n        return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n    }\n\n    // Check to see if string passed in is a percentage\n    function isPercentage(n) {\n        return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n    }\n\n    // Force a hex value to have 2 characters\n    function pad2(c) {\n        return c.length == 1 ? \"0\" + c : \"\" + c;\n    }\n\n    // Replace a decimal with it's percentage value\n    function convertToPercentage(n) {\n        if (n <= 1) {\n            n = n * 100 + \"%\";\n        }\n        return n;\n    }\n\n    // Converts a decimal to a hex value\n    function convertDecimalToHex(d) {\n        return Math.round(parseFloat(d) * 255).toString(16);\n    }\n    // Converts a hex value to a decimal\n    function convertHexToDecimal(h) {\n        return parseIntFromHex(h) / 255;\n    }\n    var matchers = function () {\n        // <http://www.w3.org/TR/css3-values/#integers>\n        var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n        // <http://www.w3.org/TR/css3-values/#number-value>\n        var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n        // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.\n        var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n        // Actual matching.\n        // Parentheses and commas are optional, but not required.\n        // Whitespace can take the place of commas or opening paren\n        var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n        var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n        return {\n            CSS_UNIT: new RegExp(CSS_UNIT),\n            rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n            rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n            hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n            hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n            hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n            hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n            hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n            hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n            hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n            hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n        };\n    }();\n\n    // `isValidCSSUnit`\n    // Take in a single string / number and check to see if it looks like a CSS unit\n    // (see `matchers` above for definition).\n    function isValidCSSUnit(color) {\n        return !!matchers.CSS_UNIT.exec(color);\n    }\n\n    // `stringInputToObject`\n    // Permissive string parsing.  Take in a number of formats, and output an object\n    // based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n    function stringInputToObject(color) {\n        color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n        var named = false;\n        if (names[color]) {\n            color = names[color];\n            named = true;\n        } else if (color == \"transparent\") {\n            return {\n                r: 0,\n                g: 0,\n                b: 0,\n                a: 0,\n                format: \"name\"\n            };\n        }\n\n        // Try to match string input using regular expressions.\n        // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n        // Just return an object and let the conversion functions handle that.\n        // This way the result will be the same whether the tinycolor is initialized with string or object.\n        var match;\n        if (match = matchers.rgb.exec(color)) {\n            return {\n                r: match[1],\n                g: match[2],\n                b: match[3]\n            };\n        }\n        if (match = matchers.rgba.exec(color)) {\n            return {\n                r: match[1],\n                g: match[2],\n                b: match[3],\n                a: match[4]\n            };\n        }\n        if (match = matchers.hsl.exec(color)) {\n            return {\n                h: match[1],\n                s: match[2],\n                l: match[3]\n            };\n        }\n        if (match = matchers.hsla.exec(color)) {\n            return {\n                h: match[1],\n                s: match[2],\n                l: match[3],\n                a: match[4]\n            };\n        }\n        if (match = matchers.hsv.exec(color)) {\n            return {\n                h: match[1],\n                s: match[2],\n                v: match[3]\n            };\n        }\n        if (match = matchers.hsva.exec(color)) {\n            return {\n                h: match[1],\n                s: match[2],\n                v: match[3],\n                a: match[4]\n            };\n        }\n        if (match = matchers.hex8.exec(color)) {\n            return {\n                r: parseIntFromHex(match[1]),\n                g: parseIntFromHex(match[2]),\n                b: parseIntFromHex(match[3]),\n                a: convertHexToDecimal(match[4]),\n                format: named ? \"name\" : \"hex8\"\n            };\n        }\n        if (match = matchers.hex6.exec(color)) {\n            return {\n                r: parseIntFromHex(match[1]),\n                g: parseIntFromHex(match[2]),\n                b: parseIntFromHex(match[3]),\n                format: named ? \"name\" : \"hex\"\n            };\n        }\n        if (match = matchers.hex4.exec(color)) {\n            return {\n                r: parseIntFromHex(match[1] + \"\" + match[1]),\n                g: parseIntFromHex(match[2] + \"\" + match[2]),\n                b: parseIntFromHex(match[3] + \"\" + match[3]),\n                a: convertHexToDecimal(match[4] + \"\" + match[4]),\n                format: named ? \"name\" : \"hex8\"\n            };\n        }\n        if (match = matchers.hex3.exec(color)) {\n            return {\n                r: parseIntFromHex(match[1] + \"\" + match[1]),\n                g: parseIntFromHex(match[2] + \"\" + match[2]),\n                b: parseIntFromHex(match[3] + \"\" + match[3]),\n                format: named ? \"name\" : \"hex\"\n            };\n        }\n        return false;\n    }\n    function validateWCAG2Parms(parms) {\n        // return valid WCAG2 parms for isReadable.\n        // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n        var level, size;\n        parms = parms || {\n            level: \"AA\",\n            size: \"small\"\n        };\n        level = (parms.level || \"AA\").toUpperCase();\n        size = (parms.size || \"small\").toLowerCase();\n        if (level !== \"AA\" && level !== \"AAA\") {\n            level = \"AA\";\n        }\n        if (size !== \"small\" && size !== \"large\") {\n            size = \"small\";\n        }\n        return {\n            level: level,\n            size: size\n        };\n    }\n\n    window.tinycolor = tinycolor;\n    })();\n\n    $(function () {\n        if ($.fn.spectrum.load) {\n            $.fn.spectrum.processNativeColorInputs();\n        }\n    });\n\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/partials/_colorpicker.php",
    "content": "<?php if ($this->previewMode): ?>\n    <div class=\"form-control\"><?= e($value) ?></div>\n<?php else: ?>\n    <div\n        id=\"<?= $this->getId() ?>\"\n        class=\"field-colorpicker <?= $readOnly || $disabled ? 'disabled' : '' ?>\"\n        data-control=\"colorpicker\"\n        <?php if ($showAlpha): ?>data-show-alpha=\"<?= $showAlpha ?>\"<?php endif ?>\n        <?php if ($allowEmpty): ?>data-allow-empty=\"<?= $allowEmpty ?>\"<?php endif ?>\n        data-data-locker=\"#<?= $this->getId('input') ?>\"\n        <?php if ($readOnly || $disabled): ?>data-disabled=\"true\"<?php endif ?>\n        <?= $this->formField->getAttributes() ?>>\n\n        <?php if ($showInput): ?>\n            <?= $this->makePartial('mode_input') ?>\n        <?php else: ?>\n            <?= $this->makePartial('mode_preset') ?>\n        <?php endif ?>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/partials/_mode_input.php",
    "content": "<div class=\"input-group\">\n    <ul class=\"picker-options\">\n        <li\n            class=\"custom-color <?= $isCustomColor == $value ? 'active' : null ?>\"\n            data-hex-color=\"<?= $isCustomColor ? e($value) : '#ffffff' ?>\"\n            data-custom-color>\n            <span\n                class=\"<?php if (!$value): ?>is-empty<?php endif ?> <?php if ($readOnly || $disabled): ?>disabled<?php endif ?>\"\n                style=\"background: <?= $isCustomColor ? e($value) : '#ffffff' ?>\"></span>\n        </li>\n    </ul>\n\n    <input\n        type=\"text\"\n        class=\"form-control\"\n        id=\"<?= $this->getId('input') ?>\"\n        name=\"<?= $name ?>\"\n        value=\"<?= e($value) ?>\" />\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/colorpicker/partials/_mode_preset.php",
    "content": "<ul class=\"picker-options\">\n    <?php if (!$readOnly && !$disabled): ?>\n        <?php foreach ($availableColors as $index => $color): ?>\n            <li\n                class=\"<?= $color == $value ? 'active' : null ?>\"\n                data-hex-color=\"<?= $color ?>\">\n                <span style=\"background: <?= $color ?>\"><?= $color ?></span>\n            </li>\n        <?php endforeach ?>\n    <?php endif ?>\n    <?php if ($allowCustom): ?>\n        <li\n            class=\"custom-color <?= $isCustomColor == $value ? 'active' : null ?>\"\n            data-hex-color=\"<?= $isCustomColor ? e($value) : '#ffffff' ?>\"\n            data-custom-color>\n            <span\n                class=\"<?php if (!$value): ?>is-empty<?php endif ?> <?php if ($readOnly || $disabled): ?>disabled<?php endif ?>\"\n                style=\"background: <?= $isCustomColor ? e($value) : '#ffffff' ?>\"></span>\n        </li>\n    <?php endif ?>\n</ul>\n\n<input\n    type=\"hidden\"\n    id=\"<?= $this->getId('input') ?>\"\n    name=\"<?= $name ?>\"\n    value=\"<?= e($value) ?>\" />\n"
  },
  {
    "path": "modules/backend/formwidgets/datatable/LegacyDataTable.php",
    "content": "<?php\n\nnamespace Backend\\FormWidgets\\DataTable;\n\nuse Lang;\nuse Backend\\Widgets\\Table;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse ApplicationException;\n\ntrait LegacyDataTable\n{\n    /**\n     * @var Backend\\Widgets\\Table table widget used in legacy mode\n     */\n    protected $table;\n\n    /**\n     * @return Backend\\Widgets\\Table The table to be displayed.\n     */\n    public function getTable()\n    {\n        return $this->table;\n    }\n\n    /**\n     * prepareLegacyVars prepares view variables for legacy mode\n     */\n    protected function prepareLegacyVars()\n    {\n        $this->populateLegacyTableWidget();\n        $this->vars['name'] = $this->getFieldName();\n        $this->vars['table'] = $this->table;\n        $this->vars['size'] = $this->size;\n        $this->vars['rowSorting'] = $this->rowSorting;\n    }\n\n    /**\n     * getLegacyLoadValue returns the load value for legacy mode\n     */\n    protected function getLegacyLoadValue()\n    {\n        $value = (array) parent::getLoadValue();\n\n        // Sync the array keys as the ID to make the table widget happy.\n        foreach ($value as $key => $_value) {\n            $value[$key] = ['id' => $key] + (array) $_value;\n        }\n\n        return $value;\n    }\n\n    /**\n     * getLegacySaveValue returns the save value for legacy mode\n     */\n    protected function getLegacySaveValue($value)\n    {\n        $dataSource = $this->table->getDataSource();\n\n        $result = [];\n        while ($records = $dataSource->readRecords()) {\n            $result = array_merge($result, $records);\n        }\n\n        // Strip out the id columns in the final array.\n        foreach ($result as $key => $_result) {\n            unset($result[$key]['id']);\n        }\n\n        return $result;\n    }\n\n    /**\n     * populateLegacyTableWidget populates the legacy table widget with data\n     */\n    protected function populateLegacyTableWidget()\n    {\n        $dataSource = $this->table->getDataSource();\n\n        $records = $this->getLoadValue() ?: [];\n\n        $dataSource->purge();\n        $dataSource->initRecords((array) $records);\n    }\n\n    /**\n     * makeLegacyTableWidget creates a legacy table widget instance\n     */\n    protected function makeLegacyTableWidget()\n    {\n        $fieldName = $this->getFieldName();\n\n        $config = $this->makeConfig((array) $this->config);\n        $config->postbackHandlerWild = true;\n        $config->dataSource = 'client';\n        $config->alias = studly_case(HtmlHelper::nameToId($fieldName)) . 'datatable';\n        $config->fieldName = $fieldName;\n\n        $table = new Table($this->controller, $config);\n        $table->bindEvent('table.getDropdownOptions', [$this, 'getLegacyDataTableOptions']);\n        $table->bindEvent('table.getAutocompleteOptions', [$this, 'getLegacyDataTableOptions']);\n\n        return $table;\n    }\n\n    /**\n     * getLegacyDataTableOptions is the legacy dropdown/autocomplete option callback handler\n     */\n    public function getLegacyDataTableOptions($columnName, $rowData)\n    {\n        $methodName = 'get' . studly_case($this->fieldName) . 'DataTableOptions';\n\n        if (!$this->model->methodExists($methodName) && !$this->model->methodExists('getDataTableOptions')) {\n            throw new ApplicationException(\n                Lang::get(\n                    'backend::lang.model.missing_method',\n                    [\n                        'class' => get_class($this->model),\n                        'method' => 'getDataTableOptions'\n                    ]\n                )\n            );\n        }\n\n        if ($this->model->methodExists($methodName)) {\n            $result = $this->model->$methodName($columnName, $rowData);\n        }\n        else {\n            $result = $this->model->getDataTableOptions($this->fieldName, $columnName, $rowData);\n        }\n\n        if (!is_array($result)) {\n            $result = [];\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/datatable/assets/css/datatable-handsontable.css",
    "content": ".field-datatable.is-handsontable .toolbar {\n    padding: 3px;\n    font-size: 0;\n    white-space: nowrap;\n    border: 1px solid var(--bs-border-color);\n    border-bottom: none;\n    border-radius: 4px 4px 0 0;\n}\n\n.field-datatable.is-handsontable .toolbar .toolbar-search {\n    float: right;\n    margin: 0 3px 0 0;\n}\n\n.field-datatable.is-handsontable .toolbar .toolbar-search .form-control {\n    height: auto;\n    padding: 5px 13px;\n    font-size: 13px;\n}\n\n.field-datatable.is-handsontable .handsontable-container {\n    /* border: 1px solid var(--bs-border-color); */\n    /* border-radius: 4px; */\n}\n\n.field-datatable.is-handsontable .toolbar + .handsontable-container {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n}\n\n/* Header styling to match legacy table */\n.field-datatable.is-handsontable .handsontable thead th {\n    padding: 0;\n    font-weight: normal;\n    font-size: 14px;\n    color: var(--oc-heading-color);\n    background: var(--bs-tertiary-bg);\n    border-color: var(--bs-border-color);\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.field-datatable.is-handsontable .handsontable thead th.ht__highlight {\n    background: var(--bs-secondary-bg);\n}\n\n.field-datatable.is-handsontable .handsontable thead th.ht__highlight.ht__active_highlight {\n    background: var(--oc-primary-active-bg);\n    color: var(--oc-highlight-color);\n}\n\n.field-datatable.is-handsontable .handsontable thead th .relative {\n    padding: 7px 10px;\n}\n\n/* Cell styling */\n.field-datatable.is-handsontable .handsontable td {\n    line-height: 28px;\n}\n\n.field-datatable.is-handsontable .handsontableInput {\n    padding: 0 5px;\n    line-height: 28px;\n}\n\n.field-datatable.is-handsontable .handsontable th {\n    border-color: var(--bs-border-color);\n}\n\n.field-datatable.is-handsontable .handsontableInputHolder {\n    z-index: 200;\n}\n\n.field-datatable.is-handsontable .autocompleteEditor.handsontable {\n    z-index: 201;\n}\n\n/* Selected cell highlight */\n.field-datatable.is-handsontable .handsontable td.area:before {\n    background: var(--bs-primary);\n}"
  },
  {
    "path": "modules/backend/formwidgets/datatable/assets/js/datatable-handsontable.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\n\n/*\n * DataTable Handsontable control\n *\n * Data attributes:\n * - data-control=\"datatable-handsontable\" - enables the control on an element\n *\n * JavaScript API:\n * oc.fetchControl(element, 'datatable-handsontable')\n */\nregisterControl('datatable-handsontable', class extends ControlBase {\n    init() {\n        this.containerEl = this.element.querySelector('[data-hot-container]');\n        this.dataInputEl = this.element.querySelector('[data-table-data]');\n\n        this.config = Object.assign({\n            columns: [],\n            data: [],\n            colHeaders: [],\n            hotOptions: {},\n            ajaxColumns: [],\n            columnDependencies: {},\n            alias: '',\n            fieldName: ''\n        }, this.parseJsonConfig());\n\n        this.hot = null;\n        this.optionCache = {};\n    }\n\n    connect() {\n        this.initHandsontable();\n        this.bindToolbar();\n        this.bindFormSubmit();\n        this.syncToHiddenInput();\n        this.initVisibilityObserver();\n    }\n\n    disconnect() {\n        if (this.observer) {\n            this.observer.disconnect();\n            this.observer = null;\n        }\n\n        if (this.hot) {\n            this.hot.destroy();\n            this.hot = null;\n        }\n\n        this.formEl = null;\n        this.containerEl = null;\n        this.dataInputEl = null;\n    }\n\n    parseJsonConfig() {\n        var el = this.element;\n        var jsonKeys = ['columns', 'data', 'colHeaders', 'hotOptions', 'ajaxColumns', 'columnDependencies'];\n        var result = {};\n\n        for (var key in el.dataset) {\n            var value = el.dataset[key];\n            if (jsonKeys.indexOf(key) !== -1) {\n                try { result[key] = JSON.parse(value); } catch (e) { result[key] = value; }\n            }\n            else {\n                result[key] = this.parseValue(value);\n            }\n        }\n\n        return result;\n    }\n\n    initHandsontable() {\n        var self = this;\n        var columns = this.processColumns();\n\n        var hotOptions = Object.assign({}, this.config.hotOptions, {\n            data: this.config.data.length ? this.config.data : [{}],\n            columns: columns,\n            colHeaders: this.config.colHeaders,\n            contextMenu: this.buildContextMenu(),\n            afterChange: function(changes, source) {\n                self.onAfterChange(changes, source);\n            },\n            afterRemoveRow: function() {\n                self.syncToHiddenInput();\n            },\n            afterCreateRow: function() {\n                self.syncToHiddenInput();\n            }\n        });\n\n        this.hot = new Handsontable(this.containerEl, hotOptions);\n    }\n\n    initVisibilityObserver() {\n        var hot = this.hot;\n        var rendered = false;\n        this.observer = new IntersectionObserver(function(entries) {\n            if (entries[0].isIntersecting && !rendered) {\n                rendered = true;\n                hot.render();\n            }\n        });\n        this.observer.observe(this.containerEl);\n    }\n\n    processColumns() {\n        var self = this;\n\n        return this.config.columns.map(function(col) {\n            var processed = Object.assign({}, col);\n\n            delete processed._validation;\n            delete processed._optionMap;\n\n            if (self.config.ajaxColumns.indexOf(col.data) !== -1) {\n                processed.source = function(query, callback) {\n                    self.loadOptions(col.data, this.row, query, callback);\n                };\n            }\n\n            if (col._validation) {\n                processed.validator = function(value, callback) {\n                    callback(self.validate(col._validation, value));\n                };\n            }\n\n            return processed;\n        });\n    }\n\n    loadOptions(column, row, query, callback) {\n        var self = this;\n        var rowData = {};\n\n        this.config.columns.forEach(function(col) {\n            rowData[col.data] = self.hot.getDataAtRowProp(row, col.data);\n        });\n\n        var cacheKey = column + ':' + JSON.stringify(rowData);\n        if (this.optionCache[cacheKey]) {\n            callback(this.optionCache[cacheKey]);\n            return;\n        }\n\n        oc.request(this.element, this.config.alias + '::onGetDropdownOptions', {\n            data: { column: column, rowData: rowData },\n            success: function(response) {\n                var options = response.options || {};\n                var displayValues = [];\n\n                if (Array.isArray(options)) {\n                    displayValues = options;\n                }\n                else {\n                    displayValues = Object.values(options);\n                }\n\n                self.optionCache[cacheKey] = displayValues;\n                callback(displayValues);\n            }\n        });\n    }\n\n    validate(rules, value) {\n        if (!value && rules.required) {\n            return false;\n        }\n        if (rules.integer && value && !Number.isInteger(Number(value))) {\n            return false;\n        }\n        if (rules.float && value && isNaN(parseFloat(value))) {\n            return false;\n        }\n        if (rules.regex && value && !new RegExp(rules.regex.pattern).test(value)) {\n            return false;\n        }\n        return true;\n    }\n\n    buildContextMenu() {\n        var items = {};\n        if (this.config.adding !== false) {\n            items.row_above = { name: 'Insert row above' };\n            items.row_below = { name: 'Insert row below' };\n        }\n        if (this.config.deleting !== false) {\n            items.remove_row = { name: 'Remove row' };\n        }\n        items.undo = { name: 'Undo' };\n        items.redo = { name: 'Redo' };\n        return { items: items };\n    }\n\n    onAfterChange(changes, source) {\n        if (source === 'loadData' || source === 'dependency') return;\n\n        var self = this;\n        var deps = this.config.columnDependencies;\n\n        if (changes && Object.keys(deps).length) {\n            changes.forEach(function(change) {\n                var prop = change[1];\n                Object.keys(deps).forEach(function(depCol) {\n                    if (deps[depCol] === prop) {\n                        self.hot.setDataAtRowProp(change[0], depCol, null, 'dependency');\n                        Object.keys(self.optionCache).forEach(function(key) {\n                            if (key.indexOf(depCol + ':') === 0) {\n                                delete self.optionCache[key];\n                            }\n                        });\n                    }\n                });\n            });\n        }\n\n        this.syncToHiddenInput();\n    }\n\n    syncToHiddenInput() {\n        var data = this.hot.getSourceData();\n\n        var filtered = data.filter(function(row) {\n            return Object.keys(row).some(function(key) {\n                return row[key] !== null && row[key] !== '' && row[key] !== undefined;\n            });\n        });\n\n        this.dataInputEl.value = JSON.stringify(filtered);\n    }\n\n    bindToolbar() {\n        var self = this;\n\n        this.listen('click', '[data-table-add]', function() {\n            self.hot.alter('insert_row', self.hot.countRows());\n        });\n\n        this.listen('click', '[data-table-delete]', function() {\n            var selected = self.hot.getSelected();\n            var row = selected ? selected[0][0] : self.hot.countRows() - 1;\n            if (row >= 0) {\n                self.hot.alter('remove_row', row);\n            }\n        });\n\n        this.listen('click', '[data-table-export]', function() {\n            oc.request(self.element, self.config.alias + '::onExportCsv', {\n                data: { tableData: self.dataInputEl.value },\n                download: true\n            });\n        });\n\n        this.listen('input', '[data-table-search]', function(ev) {\n            var search = self.hot.getPlugin('search');\n            search.query(ev.target.value);\n            self.hot.render();\n        });\n    }\n\n    bindFormSubmit() {\n        this.formEl = this.element.closest('form');\n        if (this.formEl) {\n            this.formEl.addEventListener('ajaxBeforeSend', this.proxy(this.onBeforeFormSubmit));\n        }\n    }\n\n    onBeforeFormSubmit() {\n        this.syncToHiddenInput();\n    }\n});"
  },
  {
    "path": "modules/backend/formwidgets/datatable/partials/_datatable.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-datatable size-<?= $size ?>\">\n\n    <?= $table->render() ?>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/datatable/partials/_datatable_handsontable.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-datatable is-handsontable\"\n    data-control=\"datatable-handsontable\"\n    data-alias=\"<?= $this->alias ?>\"\n    data-columns='<?= e(json_encode($columns)) ?>'\n    data-data='<?= e(json_encode($value)) ?>'\n    data-col-headers='<?= e(json_encode($colHeaders)) ?>'\n    data-hot-options='<?= e(json_encode($hotOptions)) ?>'\n    data-ajax-columns='<?= e(json_encode($ajaxColumns)) ?>'\n    data-column-dependencies='<?= e(json_encode($columnDependencies)) ?>'\n    data-field-name=\"<?= $name ?>\"\n>\n    <?php if ($toolbar): ?>\n    <div class=\"toolbar\" data-table-toolbar>\n        <?php if ($adding): ?>\n            <button type=\"button\" class=\"backend-toolbar-button control-button\" data-table-add>\n                <i class=\"icon-list-add\"></i>\n                <span class=\"button-label\"><?= e(trans('backend::lang.form.insert_row')) ?></span>\n            </button>\n        <?php endif ?>\n        <?php if ($deleting): ?>\n            <button type=\"button\" class=\"backend-toolbar-button control-button\" data-table-delete>\n                <i class=\"icon-list-remove\"></i>\n                <span class=\"button-label\"><?= e(trans('backend::lang.form.delete_row')) ?></span>\n            </button>\n        <?php endif ?>\n        <?php if ($csvExport): ?>\n            <button type=\"button\" class=\"backend-toolbar-button control-button\" data-table-export>\n                <i class=\"icon-download\"></i>\n                <span class=\"button-label\">Export</span>\n            </button>\n        <?php endif ?>\n        <?php if ($csvImport): ?>\n            <button type=\"button\" class=\"backend-toolbar-button control-button\" data-table-import>\n                <i class=\"icon-upload\"></i>\n                <span class=\"button-label\">Import</span>\n            </button>\n        <?php endif ?>\n        <?php if ($searching): ?>\n            <div class=\"toolbar-search\">\n                <input type=\"text\" class=\"form-control\" placeholder=\"Search...\" data-table-search>\n            </div>\n        <?php endif ?>\n    </div>\n    <?php endif ?>\n\n    <div class=\"handsontable-container\" data-hot-container></div>\n\n    <input type=\"hidden\" name=\"<?= $name ?>\" data-table-data>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/datepicker/partials/_datepicker.php",
    "content": "<?php if ($this->previewMode): ?>\n\n    <div class=\"form-control\"><?= Backend::dateTime($value, [\n        'format' => $format,\n        'formatAlias' => $formatAlias,\n        'defaultValue' => $value,\n        'useTimezone' => $useTimezone\n    ]) ?></div>\n\n<?php else: ?>\n\n    <div\n        id=\"<?= $this->getId() ?>\"\n        class=\"field-datepicker\"\n        data-control=\"datepicker\"\n        <?php if ($formatMoment): ?>data-format=\"<?= $formatMoment ?>\"<?php endif ?>\n        <?php if ($minDate): ?>data-min-date=\"<?= $minDate ?>\"<?php endif ?>\n        <?php if ($maxDate): ?>data-max-date=\"<?= $maxDate ?>\"<?php endif ?>\n        <?php if ($yearRange): ?>data-year-range=\"<?= $yearRange ?>\"<?php endif ?>\n        <?php if ($disableDays): ?>data-disable-days=\"<?= e(json_encode($disableDays)) ?>\"<?php endif ?>\n        <?php if ($firstDay): ?>data-first-day=\"<?= $firstDay ?>\"<?php endif ?>\n        <?php if ($twelveHour): ?>data-twelve-hour=\"1\"<?php endif ?>\n        <?php if ($hoursOnly): ?>data-hours-only=\"1\"<?php endif ?>\n        <?php if ($defaultTimeMidnight): ?>data-default-time-midnight=\"1\"<?php endif ?>\n        data-show-week-number=\"<?= $showWeekNumber ?>\"\n        <?php if (!$useTimezone): ?>data-ignore-timezone<?php endif ?>\n    >\n\n        <?php if ($mode == 'date'): ?>\n            <?= $this->makePartial('picker_date') ?>\n        <?php elseif ($mode == 'datetime'): ?>\n            <div class=\"row\">\n                <div class=\"col-md-7\">\n                    <?= $this->makePartial('picker_date') ?>\n                </div>\n                <div class=\"col-md-5\">\n                    <?= $this->makePartial('picker_time') ?>\n                </div>\n            </div>\n        <?php elseif ($mode == 'time'): ?>\n            <?= $this->makePartial('picker_time') ?>\n        <?php endif ?>\n\n        <!-- Data locker -->\n        <input\n            type=\"hidden\"\n            name=\"<?= $field->getName() ?>\"\n            id=\"<?= $field->getId() ?>\"\n            value=\"<?= e($value) ?>\"\n            data-datetime-value\n        />\n\n    </div>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/datepicker/partials/_picker_date.php",
    "content": "<!-- Date -->\n<div class=\"input-with-icon right-align\">\n    <i class=\"icon icon-calendar\"></i>\n    <input\n        type=\"text\"\n        id=\"<?= $this->getId('date') ?>\"\n        class=\"form-control align-right\"\n        autocomplete=\"off\"\n        <?= $field->getAttributes() ?>\n        data-datepicker />\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/datepicker/partials/_picker_time.php",
    "content": "<!-- Time -->\n<div class=\"input-with-icon right-align\">\n    <i class=\"icon icon-clock\"></i>\n    <input\n        type=\"text\"\n        id=\"<?= $this->getId('time') ?>\"\n        class=\"form-control align-right\"\n        autocomplete=\"off\"\n        <?= $field->getAttributes() ?>\n        data-timepicker />\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/assets/css/fileupload.css",
    "content": "/*\n * File Upload Form Widget\n */\n\n/*\n * Control UI\n */\n\n.field-fileupload {\n    .uploader-control-container {\n        border-radius: 4px;\n        border: 1px solid var(--bs-border-color);\n        background: var(--oc-form-control-bg);\n\n        .uploader-control-toolbar {\n            padding: 3px;\n            font-size: 0;\n            white-space: nowrap;\n\n            .backend-toolbar-button {\n                &.populated-only {\n                    display: none;\n                }\n            }\n        }\n\n        &.external-toolbar {\n            background: transparent;\n\n            .uploader-control-toolbar {\n                display: none;\n            }\n        }\n    }\n\n    &.file-drag-over .uploader-control-container {\n        border: 1px solid var(--bs-primary);\n        box-shadow: 0 0 0 1px var(--bs-primary);\n    }\n\n    &.is-populated {\n        .uploader-control-toolbar {\n            border-bottom: 1px solid var(--oc-toolbar-border);\n\n            .backend-toolbar-button.populated-only {\n                display: inline-block;\n            }\n        }\n    }\n\n    &.is-preview {\n        .uploader-control-container {\n            background-color: var(--oc-form-control-disabled-bg);\n        }\n\n        .uploader-control-toolbar {\n            display: none;\n        }\n    }\n}\n\n/*\n * Size variants\n */\n\n.field-fileupload {\n    &.size-tiny .upload-files-container {\n        max-height: 100px;\n        overflow: auto;\n    }\n\n    &.size-small .upload-files-container {\n        max-height: 200px;\n        overflow: auto;\n    }\n\n    &.size-large .upload-files-container {\n        max-height: 400px;\n        overflow: auto;\n    }\n\n    &.size-huge .upload-files-container {\n        max-height: 500px;\n        overflow: auto;\n    }\n\n    &.size-giant .upload-files-container {\n        max-height: 700px;\n        overflow: auto;\n    }\n\n    &.size-auto {\n        overflow: auto;\n    }\n\n    &.size-adaptive {\n        position: absolute;\n        height: 100%;\n        width: 100%;\n        background: var(--bs-body-bg);\n\n        .uploader-control-container {\n            border: none !important;\n            padding: 14px;\n        }\n\n        .empty-state {\n            display: block;\n            position: absolute;\n            left: 50%;\n            top: 50%;\n            transform: translate(-50%, -50%);\n        }\n\n        &.is-populated {\n            .empty-state {\n                display: none;\n            }\n        }\n    }\n}\n\n/*\n * Uploaded item\n */\n\n.field-fileupload {\n    .upload-object {\n        position: relative;\n        outline: none;\n        display: block;\n        margin: 4px 4px 0 4px;\n\n        &:last-child {\n            margin-bottom: 4px;\n        }\n\n        h4.filename, p {\n            color: var(--oc-toolbar-color);\n            font-size: 14px;\n            word-break: break-all;\n            line-height: 1.4;\n            margin-bottom: 8px;\n        }\n\n        h4.filename {\n            font-weight: 600;\n            margin-top: -2px;\n        }\n\n        p.description {\n            margin-top: -4px;\n\n            &:empty {\n                display: none;\n            }\n        }\n\n        p.size {\n            font-size: 0.875em;\n            color: var(--bs-secondary-color);\n        }\n\n        &.upload-object-image {\n            h4.filename {\n                padding-top: 10px;\n            }\n        }\n\n        .file-data-container {\n            padding: 3px;\n            border-radius: 4px;\n\n            &:hover {\n                background: var(--oc-toolbar-hover-bg);\n            }\n\n            .file-data-container-inner {\n                position: relative;\n            }\n        }\n\n        &.selected {\n            .icon-container i {\n                color: white;\n            }\n\n            .file-data-container {\n                background: var(--oc-selection);\n\n                h4.filename, p, div.error-message {\n                    color: white;\n                }\n            }\n        }\n\n        .drag-handle {\n            position: absolute;\n            display: none;\n            color: #72809d;\n            cursor: move;\n            left: -1px;\n            top: 23px;\n            font-size: 24px;\n            text-decoration: none;\n        }\n\n        &:hover {\n            .drag-handle {\n                display: block;\n            }\n        }\n\n        .form-check {\n            position: absolute;\n            left: 3px;\n            top: 2px;\n        }\n    }\n\n    &.is-preview {\n        .upload-object {\n            .form-check {\n                display: none;\n            }\n        }\n    }\n\n    .empty-state {\n        display: none;\n    }\n}\n\n/*\n * Loading State\n */\n\n.field-fileupload {\n    .upload-object {\n        .icon-container:after {\n            content: '';\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            width: 40px;\n            height: 40px;\n            margin-top: -20px;\n            margin-left: -20px;\n            border: 3px solid var(--oc-primary-border);\n            border-top-color: var(--oc-accent);\n            border-radius: 50%;\n            animation: spin 0.8s linear infinite;\n        }\n\n        &.is-success {\n            .icon-container {\n                opacity: 1;\n\n                &:after {\n                    display: none;\n                }\n            }\n        }\n\n        &.is-loading {\n            .icon-container {\n                opacity: .6;\n            }\n\n            .icon-container:after {\n                display: block;\n            }\n        }\n    }\n}\n\n/*\n * Success state\n */\n\n.field-fileupload {\n    .upload-object.is-success {\n        .file-data-container-inner {\n            cursor: pointer;\n        }\n\n        .progress-bar {\n            opacity: 0;\n            transition: opacity .3s ease;\n        }\n    }\n}\n\n/*\n * Error State\n */\n\n.field-fileupload {\n    .upload-object.is-error {\n        .file-data-container-inner {\n            cursor: pointer;\n        }\n\n        .icon-container {\n            opacity: 1;\n\n            > img, > i {\n                opacity: .5;\n            }\n\n            /* Error icon added by JS */\n            .error-icon {\n                position: absolute;\n                font-size: 40px;\n                color: var(--bs-danger);\n                filter: drop-shadow(1px 1px 0 rgba(255,255,255,.5));\n            }\n\n            &:after {\n                display: none;\n            }\n        }\n\n        .info h4 {\n            color: var(--bs-danger);\n\n            a {\n                display: none;\n            }\n        }\n\n        div.error-message {\n            font-size: .875em;\n        }\n\n        .drag-handle {\n            display: none !important;\n        }\n    }\n}\n\n/*\n * Preview mode\n */\n\n.field-fileupload {\n    &.is-preview {\n        .upload-button,\n        .drag-handle {\n            display: none !important;\n        }\n    }\n\n    /* Grid mode (small screens and above) */\n    @media (min-width: 768px) {\n        &.is-grid .upload-files-container {\n            display: flex;\n            flex-wrap: wrap;\n\n            .upload-object {\n                width: 300px;\n\n                h4.filename, p {\n                    text-overflow: ellipsis;\n                    overflow: hidden;\n                    white-space: nowrap;\n                }\n            }\n        }\n    }\n}\n\n/*\n * Image mode\n */\n\n.field-fileupload.is-image {\n    .upload-object.upload-object-image {\n        .file-data-container {\n            .file-data-container-inner {\n                padding-left: 103px;\n                min-height: 95px;\n            }\n        }\n\n        .icon-container {\n            position: absolute;\n            left: 0;\n            top: 0;\n            width: 95px;\n            height: 95px;\n            overflow: hidden;\n            border: 1px solid var(--bs-border-color);\n            border-radius: 4px;\n            background: var(--oc-primary-bg);\n            user-select: none;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n\n            img {\n                display: block;\n                max-height: 100%;\n                max-width: 100%;\n            }\n        }\n\n        &.mode-multi {\n            .file-data-container {\n                margin-left: 23px;\n            }\n        }\n    }\n\n    &.is-preview {\n        .upload-object.upload-object-image {\n            &.mode-multi {\n                .file-data-container {\n                    margin-left: 0;\n                }\n            }\n        }\n    }\n}\n\n/*\n * File mode\n */\n\n.field-fileupload.is-file {\n    .upload-object.upload-object-file {\n        .file-data-container-inner {\n            padding-top: 4px;\n        }\n\n        .icon-container, .info, .info h4, .info h4 p {\n            vertical-align: top;\n            display: inline-block;\n        }\n\n        .icon-container {\n            margin-top: -2px;\n            width: 20px;\n            height: 20px;\n            position: absolute;\n\n            i {\n                margin-top: 4px;\n                margin-left: 3px;\n                display: none;\n            }\n\n            &:after {\n                width: 20px;\n                height: 20px;\n                margin-top: -10px;\n                margin-left: -10px;\n                border-width: 2px;\n            }\n        }\n\n        .info {\n            padding-left: 22px;\n        }\n\n        h4, h4 p, p.description {\n            margin-bottom: 0;\n        }\n\n        h4 p {\n            font-weight: normal;\n\n            &:before {\n                content: ' (';\n            }\n\n            &:after {\n                content: ')';\n            }\n        }\n\n        .form-check {\n            top: 6px;\n        }\n\n        &.mode-multi {\n            .file-data-container {\n                margin-left: 43px;\n            }\n\n            .drag-handle {\n                display: block;\n                left: 24px;\n                top: 0;\n            }\n        }\n\n        &.is-success {\n            .icon-container {\n                i {\n                    display: inline-block;\n                }\n            }\n        }\n\n        &.is-loading {\n            .icon-container {\n                opacity: 1;\n\n                > i {\n                    display: none;\n\n                    &:after {\n                        display: block;\n                    }\n                }\n            }\n        }\n\n        &.is-error {\n            .icon-container {\n                &, & > i {\n                    opacity: 1;\n                }\n\n                > i {\n                    display: inline-block;\n                }\n\n                &:after {\n                    display: none;\n                }\n            }\n\n            div.error-message {\n                margin-left: 22px;\n            }\n        }\n    }\n\n    &.is-preview {\n        .upload-object.upload-object-file {\n            &.mode-multi {\n                .file-data-container {\n                    margin-left: 0;\n                }\n            }\n        }\n    }\n}\n\n/*\n * Config form / Popup\n */\n\n:root, [data-bs-theme=\"light\"] {\n    --oc-fileupload-checkerboard-bg: #fefefe;\n    --oc-fileupload-checkerboard-alt-bg: #cbcbcb;\n}\n\n[data-bs-theme=\"dark\"] {\n    --oc-fileupload-checkerboard-bg: #010101;\n    --oc-fileupload-checkerboard-alt-bg: #343434;\n}\n\n.fileupload-config-form {\n    .fileupload-url-button {\n        padding-left: 0;\n\n        > i {\n            margin-right: 0;\n            color: #666;\n        }\n    }\n\n    .file-upload-modal-image-header {\n        /* Photoshop transparent background */\n        /* Based on: http://lea.verou.me/css3patterns/#checkerboard */\n        background-color: var(--oc-fileupload-checkerboard-bg);\n        background-image:\n            linear-gradient(45deg, var(--oc-fileupload-checkerboard-alt-bg) 25%, transparent 25%, transparent 75%, var(--oc-fileupload-checkerboard-alt-bg) 75%, var(--oc-fileupload-checkerboard-alt-bg)),\n            linear-gradient(45deg, var(--oc-fileupload-checkerboard-alt-bg) 25%, transparent 25%, transparent 75%, var(--oc-fileupload-checkerboard-alt-bg) 75%, var(--oc-fileupload-checkerboard-alt-bg));\n        background-size: 20px 20px;\n        background-position: 0 0, 10px 10px;\n\n        &, img {\n            border-radius: 2px 2px 0 0;\n        }\n\n        .btn-close {\n            position: absolute;\n            top: 10px;\n            right: 10px;\n            height: 24px;\n            width: 22px;\n            border-radius: 100px;\n            background-color: rgba(255, 255, 255, 50%);\n        }\n    }\n\n    .file-upload-modal-image-header + .modal-body {\n        padding-top: 20px;\n    }\n}\n\n@keyframes spin {\n    to {\n        transform: rotate(360deg);\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/assets/js/fileupload.js",
    "content": "/*\n * File upload form field control\n *\n * Data attributes:\n * - data-control=\"fileupload\" - enables the file upload plugin\n * - data-unique-id=\"XXX\" - an optional identifier for multiple uploaders on the same page, this value will\n *   appear in the postback variable called X_OCTOBER_FILEUPLOAD\n * - data-template - a Dropzone.js template to use for each item\n * - data-error-template - a popover template used to show an error\n * - data-sort-handler - AJAX handler for sorting postbacks\n * - data-config-handler - AJAX handler for configuration popup\n *\n * JavaScript API:\n * oc.fetchControl(element, 'fileupload')\n *\n * Dependencies:\n * - Dropzone.js\n */\n'use strict';\n\noc.registerControl('fileupload', class extends oc.ControlBase {\n    init() {\n        this.$el = $(this.element);\n        this.isLoaded = false;\n        this.pendingCount = 0;\n\n        if (this.config.isMulti === undefined) {\n            this.config.isMulti = this.$el.hasClass('is-multi');\n        }\n\n        if (this.config.isPreview === undefined) {\n            this.config.isPreview = this.$el.hasClass('is-preview');\n        }\n\n        if (this.config.isSortable === undefined) {\n            this.config.isSortable = this.$el.hasClass('is-sortable');\n        }\n\n        this.$uploadButton = $('.toolbar-upload-button', this.$el);\n        this.$filesContainer = $('.upload-files-container', this.$el);\n        this.uploaderOptions = {};\n    }\n\n    connect() {\n        this.listen('click', '.upload-object.is-success .file-data-container-inner', this.onClickSuccessObject);\n        this.listen('click', '.upload-object.is-error', this.onClickErrorObject);\n        this.listen('click', '.toolbar-clear-file', this.onClearFileClick);\n        this.listen('click', '.toolbar-delete-selected', this.onDeleteSelectedClick);\n        this.listen('click', 'input[data-record-selector]', this.onClickCheckbox);\n        this.listen('change', 'input[data-record-selector]', this.onSelectionChanged);\n\n        this.bindUploader();\n\n        if (this.config.isSortable) {\n            this.bindSortable();\n        }\n\n        this.isLoaded = true;\n\n        // External toolbar\n        setTimeout(() => {\n            this.initToolbarExtensionPoint();\n            this.mountExternalToolbarEventBusEvents();\n            this.extendExternalToolbar();\n        }, 0);\n    }\n\n    disconnect() {\n        this.unmountExternalToolbarEventBusEvents();\n\n        if (this.dropzone) {\n            this.dropzone.destroy();\n        }\n\n        this.sortable = null;\n        this.dropzone = null;\n        this.$el = null;\n        this.$uploadButton = null;\n        this.$filesContainer = null;\n        this.uploaderOptions = null;\n        this.toolbarExtensionPoint = null;\n        this.externalToolbarEventBusObj = null;\n        this.isLoaded = null;\n    }\n\n    //\n    // External toolbar\n    //\n\n    initToolbarExtensionPoint() {\n        if (!this.config.externalToolbarAppState) {\n            return;\n        }\n\n        const point = $.oc.vueUtils.getToolbarExtensionPoint(\n            this.config.externalToolbarAppState,\n            this.element,\n            'both'\n        );\n\n        if (point) {\n            this.toolbarExtensionPoint = point.state;\n            this.externalToolbarEventBusObj = point.bus;\n        }\n    }\n\n    mountExternalToolbarEventBusEvents() {\n        if (!this.externalToolbarEventBusObj) {\n            return;\n        }\n\n        this.externalToolbarEventBusObj.on('toolbarcmd', this.proxy(this.onToolbarExternalCommand));\n        this.externalToolbarEventBusObj.on('extendapptoolbar', this.proxy(this.extendExternalToolbar));\n    }\n\n    unmountExternalToolbarEventBusEvents() {\n        if (!this.externalToolbarEventBusObj) {\n            return;\n        }\n\n        this.externalToolbarEventBusObj.off('toolbarcmd', this.proxy(this.onToolbarExternalCommand));\n        this.externalToolbarEventBusObj.off('extendapptoolbar', this.proxy(this.extendExternalToolbar));\n    }\n\n    onToolbarExternalCommand(ev) {\n        var cmdPrefix = 'fileupload-toolbar-';\n\n        if (ev.command.substring(0, cmdPrefix.length) != cmdPrefix) {\n            return;\n        }\n\n        var buttonClassName = ev.command.substring(cmdPrefix.length),\n            $toolbar = this.$el.find('.uploader-control-toolbar'),\n            $button = $toolbar.find('[class=\"'+buttonClassName+'\"]');\n\n        $button.get(0).click(ev.ev);\n    }\n\n    extendExternalToolbar() {\n        if (!this.$el.is(\":visible\") || !this.toolbarExtensionPoint) {\n            return;\n        }\n\n        this.toolbarExtensionPoint.splice(0, this.toolbarExtensionPoint.length);\n\n        this.toolbarExtensionPoint.push({\n            type: 'separator'\n        });\n\n        var that = this,\n            $buttons = this.$el.find('.uploader-control-toolbar .backend-toolbar-button');\n\n        $buttons.each(function() {\n            var $button = $(this),\n                $icon = $button.find('i[class^=icon]');\n\n            that.toolbarExtensionPoint.push(\n                {\n                    type: 'button',\n                    icon: $icon.attr('class'),\n                    label: $button.find('.button-label').text(),\n                    command: 'fileupload-toolbar-' + $button.attr('class'),\n                    disabled: $button.attr('disabled') !== undefined\n                }\n            );\n        });\n    }\n\n    //\n    // Uploading\n    //\n\n    bindUploader() {\n        this.uploaderOptions = {\n            url: this.config.url || window.location,\n            paramName: this.config.paramName || 'file_data',\n            clickable: this.$uploadButton.get(0),\n            previewsContainer: this.$filesContainer.get(0),\n            hiddenInputContainer: this.element,\n            maxFilesize: this.config.maxFilesize || 256,\n            headers: {},\n            timeout: 0\n        }\n\n        if (!this.config.isMulti) {\n            this.uploaderOptions.maxFiles = 1;\n        }\n        else {\n            this.uploaderOptions.maxFiles = this.config.maxFiles || null;\n        }\n\n        if (this.config.fileTypes) {\n            this.uploaderOptions.acceptedFiles = this.config.fileTypes;\n        }\n\n        if (this.config.template) {\n            this.uploaderOptions.previewTemplate = $(this.config.template).html();\n        }\n\n        this.uploaderOptions.thumbnailWidth = this.config.thumbnailWidth\n            ? this.config.thumbnailWidth : null;\n\n        this.uploaderOptions.thumbnailHeight = this.config.thumbnailHeight\n            ? this.config.thumbnailHeight : null;\n\n        this.uploaderOptions.resize = this.proxy(this.onResizeFileInfo);\n\n        // Locale\n        this.uploaderOptions.dictMaxFilesExceeded = $.oc.lang.get('upload.max_files');\n        this.uploaderOptions.dictInvalidFileType = $.oc.lang.get('upload.invalid_file_type');\n        this.uploaderOptions.dictFileTooBig = $.oc.lang.get('upload.file_too_big');\n        this.uploaderOptions.dictResponseError = $.oc.lang.get('upload.response_error');\n        this.uploaderOptions.dictRemoveFile = $.oc.lang.get('upload.remove_file');\n\n        // Add CSRF token to headers\n        var token = $('meta[name=\"csrf-token\"]').attr('content');\n        if (token) {\n            this.uploaderOptions.headers['X-CSRF-TOKEN'] = token;\n        }\n\n        this.dropzone = new Dropzone(this.element, this.uploaderOptions);\n\n        this.dropzone.on('addedfile', this.proxy(this.onUploadAddedFile));\n        this.dropzone.on('sending', this.proxy(this.onUploadSending));\n        this.dropzone.on('success', this.proxy(this.onUploadSuccess));\n        this.dropzone.on('error', this.proxy(this.onUploadError));\n        this.dropzone.on('complete', this.proxy(this.onUploadComplete));\n\n        this.dropzone.on('dragenter', this.proxy(this.onDragEnter));\n        this.dropzone.on('dragover', this.proxy(this.onDragEnter));\n        this.dropzone.on('dragleave', this.proxy(this.onDragEnd));\n        this.dropzone.on('dragend', this.proxy(this.onDragEnd));\n        this.dropzone.on('drop', this.proxy(this.onDragEnd));\n\n        this.loadExistingFiles();\n    }\n\n    loadExistingFiles() {\n        var self = this;\n\n        $('.server-file', this.$el).each(function() {\n            var file = $(this).data();\n\n            self.dropzone.files.push(file);\n            self.dropzone.emit('addedfile', file);\n            self.dropzone.emit('success', file, file);\n\n            $('[data-description]', file.previewElement).text(file.description);\n\n            $(this).remove();\n        });\n\n        this.dropzone._updateMaxFilesReachedClass();\n    }\n\n    onResizeFileInfo(file) {\n        var info,\n            targetWidth,\n            targetHeight;\n\n        if (!this.config.thumbnailWidth && !this.config.thumbnailWidth) {\n            targetWidth = targetHeight = 100;\n        }\n        else if (this.config.thumbnailWidth) {\n            targetWidth = this.config.thumbnailWidth;\n            targetHeight = this.config.thumbnailWidth * file.height / file.width;\n        }\n        else if (this.config.thumbnailHeight) {\n            targetWidth = this.config.thumbnailHeight * file.height / file.width;\n            targetHeight = this.config.thumbnailHeight;\n        }\n\n        // drawImage(image, srcX, srcY, srcWidth, srcHeight, trgX, trgY, trgWidth, trgHeight) takes an image, clips it to\n        // the rectangle (srcX, srcY, srcWidth, srcHeight), scales it to dimensions (trgWidth, trgHeight), and draws it\n        // on the canvas at coordinates (trgX, trgY).\n        info = {\n            srcX: 0,\n            srcY: 0,\n            srcWidth: file.width,\n            srcHeight: file.height,\n            trgX: 0,\n            trgY: 0,\n            trgWidth: targetWidth,\n            trgHeight: targetHeight\n        }\n\n        return info;\n    }\n\n    onUploadAddedFile(file) {\n        this.pendingCount++;\n        this.$uploadButton.blur();\n\n        var $object = $(file.previewElement).data('dzFileObject', file),\n            filesize = this.getFilesize(file);\n\n        // Change filesize format to match October\\Rain\\Filesystem\\Filesystem::sizeToString() format\n        $(file.previewElement).find('[data-dz-size]').html(filesize.size + ' ' + filesize.units);\n\n        // Remove any exisiting objects for single variety\n        if (!this.config.isMulti) {\n            this.removeFileFromElement($object.siblings());\n        }\n\n        if (this.config.isMulti && this.isLoaded) {\n            file.previewElement.scrollIntoView();\n        }\n\n        this.evalIsPopulated();\n        this.updateDeleteSelectedState();\n        this.extendExternalToolbar();\n    }\n\n    onUploadSending(file, xhr, formData) {\n        this.addExtraFormData(formData);\n        xhr.setRequestHeader('X-AJAX-HANDLER', this.config.uploadHandler);\n    }\n\n    onUploadSuccess(file, response) {\n        var $preview = $(file.previewElement),\n            $img = $('.image img', $preview);\n\n        $preview.addClass('is-success');\n\n        if (response.id) {\n            $preview.data('id', response.id);\n            $preview.data('path', response.path);\n            $img.attr('src', response.thumb);\n        }\n\n        this.triggerChange();\n    }\n\n    onUploadError(file, error) {\n        const preview = file.previewElement;\n        preview.classList.add('is-error');\n\n        // Add error icon to the icon container\n        const iconContainer = preview.querySelector('.icon-container');\n        if (iconContainer && !iconContainer.querySelector('.error-icon')) {\n            const errorIcon = document.createElement('i');\n            errorIcon.className = 'ph ph-warning error-icon';\n            iconContainer.appendChild(errorIcon);\n        }\n    }\n\n    onUploadComplete(file) {\n        this.pendingCount--;\n\n        if (this.pendingCount === 0) {\n            this.onSortAttachments();\n        }\n    }\n\n    onSelectionChanged(ev) {\n        var $object = $(ev.target).closest('.upload-object');\n\n        $object.toggleClass('selected', ev.target.checked);\n\n        this.updateDeleteSelectedState();\n        this.extendExternalToolbar();\n    }\n\n    onClickCheckbox(ev) {\n        oc.checkboxRangeRegisterClick(ev, '.upload-object', 'input[data-record-selector]');\n    }\n\n    /*\n     * Trigger change event (Compatibility with october.form.js)\n     */\n    triggerChange() {\n        this.$el.closest('[data-field-name]').trigger('change.oc.formwidget');\n    }\n\n    addExtraFormData(formData) {\n        if (this.config.extraData) {\n            $.each(this.config.extraData, function(name, value) {\n                formData.append(name, value)\n            });\n        }\n\n        var $form = this.$el.closest('form');\n        if ($form.length > 0) {\n            $.each($form.serializeArray(), function(index, field) {\n                formData.append(field.name, field.value)\n            });\n        }\n    }\n\n    removeFileFromElement($element) {\n        var self = this;\n\n        $element.each(function() {\n            var $el = $(this),\n                obj = $el.data('dzFileObject');\n\n            if (obj) {\n                self.dropzone.removeFile(obj);\n            }\n            else {\n                $el.remove();\n            }\n        })\n    }\n\n    //\n    // Sorting\n    //\n\n    bindSortable() {\n        this.dragging = false;\n\n        this.sortable = Sortable.create(this.$filesContainer.get(0), {\n            animation: 150,\n            draggable: 'div.upload-object.is-success',\n            handle: '.drag-handle',\n            onStart: this.proxy(this.onDragStart),\n            onEnd: this.proxy(this.onDragStop),\n\n            // Auto scroll plugin\n            forceAutoScrollFallback: true,\n            scrollSensitivity: 60,\n            scrollSpeed: 20\n        });\n    }\n\n    onDragStart(evt) {\n        this.dragging = true;\n    }\n\n    onDragStop(evt) {\n        this.dragging = false;\n\n        this.onSortAttachments();\n    }\n\n    onSortAttachments() {\n        if (!this.config.sortHandler) {\n            return;\n        }\n\n        // Build an object of ID:ORDER\n        var orderData = {}\n\n        this.$el.find('.upload-object.is-success')\n            .each(function(index){\n                var id = $(this).data('id')\n                orderData[id] = index + 1\n            });\n\n        // Already sorting, queue the request\n        if (this.sorting) {\n            this.sortAgain = true;\n            return;\n        }\n\n        this.sorting = true;\n\n        this.$el.request(this.config.sortHandler, {\n            data: { sortOrder: orderData }\n        }).done(() => {\n            this.sorting = false;\n\n            // Capture the final state\n            if (this.sortAgain) {\n                this.sortAgain = false;\n                this.onSortAttachments();\n            }\n        });\n    }\n\n    //\n    // User interaction\n    //\n\n    onClearFileClick(ev) {\n        var self = this,\n            $form = $(ev.target).closest('form'),\n            $button = $(ev.target).closest('.toolbar-clear-file'),\n            $currentObject = $('.upload-object:first', this.$filesContainer);\n\n        oc.confirm($button.attr('data-request-confirm'), function(isConfirm) {\n            if (!isConfirm) {\n                return;\n            }\n\n            self.removeObjectInternal($form, $button, $currentObject);\n        });\n\n        ev.stopPropagation();\n        ev.preventDefault();\n    }\n\n    onDeleteSelectedClick(ev) {\n        var self = this,\n            $form = $(ev.target).closest('form'),\n            $button = $(ev.target).closest('.toolbar-delete-selected'),\n            $currentObjects = $('.upload-object:has(input[data-record-selector]:checked)', this.$filesContainer);\n\n        oc.confirm($button.attr('data-request-confirm'), function(isConfirm) {\n            if (!isConfirm) {\n                return;\n            }\n\n            $currentObjects.addClass('is-loading');\n\n            $currentObjects.each(function() {\n                self.removeObjectInternal($form, $button, $(this));\n            });\n        });\n\n        ev.stopPropagation();\n        ev.preventDefault();\n    }\n\n    removeObjectInternal($form, $button, $currentObject) {\n        var self = this,\n            objectId = $currentObject.data('id');\n\n        if (!objectId) {\n            self.removeFileFromElement($currentObject);\n            self.evalIsPopulated();\n            self.updateDeleteSelectedState();\n            self.extendExternalToolbar();\n            self.triggerChange();\n            return;\n        }\n\n        $currentObject.addClass('is-loading');\n        $form.request($button.attr('data-request'), {\n            data: {\n                file_id: objectId\n            }\n        }).done(function() {\n            self.removeFileFromElement($currentObject);\n            self.evalIsPopulated();\n            self.updateDeleteSelectedState();\n            self.extendExternalToolbar();\n            self.triggerChange();\n        }).always(function() {\n            $currentObject.removeClass('is-loading');\n        });\n    }\n\n    onClickSuccessObject(ev) {\n        if ($(ev.target).closest('.meta').length) return;\n        if ($(ev.target).closest('.form-check').length) return;\n\n        var $target = $(ev.target).closest('.upload-object');\n\n        if (!this.config.configHandler) {\n            window.open($target.data('path'));\n            return;\n        }\n\n        $target.popup({\n            handler: this.config.configHandler,\n            extraData: { file_id: $target.data('id') }\n        });\n\n        $target.one('popupComplete', function(event, element, modal){\n            modal.one('ajaxDone', 'button[type=submit]', function(e, context, data) {\n                if (data.displayName) {\n                    $('[data-dz-name]', $target).text(data.displayName)\n                    $('[data-description]', $target).text(data.description)\n                }\n            });\n        });\n    }\n\n    onClickErrorObject(ev) {\n        var self = this,\n            $target = $(ev.target).closest('.upload-object'),\n            errorMsg = $('[data-dz-errormessage]', $target).text(),\n            $template = $(this.config.errorTemplate);\n\n        // Remove any existing objects for single variety\n        if (!this.config.isMulti) {\n            this.removeFileFromElement($target.siblings());\n        }\n\n        $target.ocPopover({\n            content: Mustache.render($template.html(), { errorMsg: errorMsg }),\n            modal: true,\n            highlightModalTarget: true,\n            placement: 'top',\n            fallbackPlacement: 'left',\n            containerClass: 'popover-danger'\n        });\n\n        var $container = $target.data('oc.popover').$container;\n        $container.one('click', '[data-remove-file]', function() {\n            $target.data('oc.popover').hide()\n            self.removeFileFromElement($target)\n            self.evalIsPopulated()\n            self.updateDeleteSelectedState()\n            self.extendExternalToolbar();\n        });\n    }\n\n    //\n    // Helpers\n    //\n\n    evalIsPopulated() {\n        var isPopulated = !!$('.upload-object', this.$filesContainer).length;\n        this.$el.toggleClass('is-populated', isPopulated);\n\n        // Reset maxFiles counter\n        if (!isPopulated) {\n            this.dropzone.removeAllFiles();\n        }\n\n        var $uploadLabelSpan = this.$uploadButton.find('span.button-label');\n        if ($uploadLabelSpan.attr('data-upload-label')) {\n            if (isPopulated) {\n                $uploadLabelSpan.text($uploadLabelSpan.attr('data-replace-label'))\n            }\n            else {\n                $uploadLabelSpan.text($uploadLabelSpan.attr('data-upload-label'));\n            }\n        }\n    }\n\n    updateDeleteSelectedState() {\n        var enabled = false,\n            selectedCount = this.$el.find('input[data-record-selector]:checked').length;\n\n        if (this.$el.hasClass('is-populated')) {\n            enabled = selectedCount > 0;\n        }\n\n        var $button = this.$el.find('.toolbar-delete-selected'),\n            $counter = $button.find('.button-label > span');\n\n        $button.prop('disabled', !enabled);\n\n        if (enabled) {\n            $counter.text('(' + selectedCount + ')');\n        }\n        else {\n            $counter.text('');\n        }\n    }\n\n    onDragEnter() {\n        if (this.dragging) {\n            return;\n        }\n\n        this.$el.addClass('file-drag-over');\n    }\n\n    onDragEnd() {\n        if (this.dragging) {\n            return;\n        }\n\n        this.$el.removeClass('file-drag-over');\n    }\n\n    /*\n     * Replicates the formatting of October\\Rain\\Filesystem\\Filesystem::sizeToString(). This method will return\n     * an object with the file size amount and the unit used as `size` and `units` respectively.\n     */\n    getFilesize(file) {\n        var formatter = new Intl.NumberFormat('en', {\n                style: 'decimal',\n                minimumFractionDigits: 2,\n                maximumFractionDigits: 2\n            }),\n            size = 0,\n            units = 'bytes';\n\n        if (file.size >= 1073741824) {\n            size = formatter.format(file.size / 1073741824);\n            units = 'GB';\n        }\n        else if (file.size >= 1048576) {\n            size = formatter.format(file.size / 1048576);\n            units = 'MB';\n        }\n        else if (file.size >= 1024) {\n            size = formatter.format(file.size / 1024);\n            units = 'KB';\n        }\n        else if (file.size > 1) {\n            size = file.size;\n            units = 'bytes';\n        }\n        else if (file.size == 1) {\n            size = 1;\n            units = 'byte';\n        }\n\n        return {\n            size: size,\n            units: units\n        };\n    }\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/partials/_config_form.php",
    "content": "<div id=\"<?= $this->getId('popup') ?>\" class=\"fileupload-config-form\">\n    <?= Form::open([\n        'data-request-parent-form' => \"#{$this->getId()}\"\n    ]) ?>\n        <input type=\"hidden\" name=\"file_id\" value=\"<?= $file->id ?>\" />\n        <input type=\"hidden\" name=\"fileupload_flag\" value=\"1\" />\n\n        <?php if (starts_with($displayMode, 'image')): ?>\n            <div class=\"file-upload-modal-image-header\">\n                <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n                <img\n                    src=\"<?= $file->thumbUrl ?>\"\n                    class=\"img-fluid center-block\"\n                    alt=\"\"\n                    title=\"<?= __(\"Attachment\") ?>: <?= e($file->file_name) ?>\"\n                    style=\"<?= $cssDimensions ?>\" />\n            </div>\n        <?php else: ?>\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\"><?= __(\"Attachment\") ?>: <?= $file->file_name ?></h4>\n                <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n            </div>\n        <?php endif ?>\n        <div class=\"modal-body\">\n            <p><?= __(\"Add a title and description for this attachment.\") ?></p>\n            <?= $configFormWidget->render() ?>\n        </div>\n        <div class=\"modal-footer\">\n            <button\n                type=\"submit\"\n                class=\"btn btn-primary\"\n                data-request=\"<?= $this->getEventHandler('onSaveAttachmentConfig') ?>\"\n                data-popup-load-indicator>\n                <?= __(\"Save\") ?>\n            </button>\n            <span class=\"btn-text\">\n                <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                <a\n                    href=\"javascript:;\"\n                    class=\"btn btn-link p-0\"\n                    data-dismiss=\"popup\">\n                    <?= __(\"Cancel\") ?>\n                </a>\n            </span>\n            <a href=\"<?= $file->pathUrl ?>\" class=\"pull-right btn btn-link fileupload-url-button\" target=\"_blank\">\n                <i class=\"oc-icon-link\"></i><?= __(\"Attachment URL\") ?>\n            </a>\n        </div>\n    <?= Form::close() ?>\n</div>\n\n<script>\n    setTimeout(\n        function(){ $('#<?= $this->getId('popup') ?> input.form-control:first').focus() },\n        310\n    )\n</script>\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/partials/_file_multi.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-fileupload size-<?= $size ?> is-file is-multi is-sortable <?= count($fileList) ? 'is-populated' : '' ?> <?= $this->previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"fileupload\"\n    data-upload-handler=\"<?= $this->getEventHandler('onUpload') ?>\"\n    data-template=\"#<?= $this->getId('template') ?>\"\n    data-error-template=\"#<?= $this->getId('errorTemplate') ?>\"\n    data-sort-handler=\"<?= $this->getEventHandler('onSortAttachments') ?>\"\n    data-unique-id=\"<?= $this->getId() ?>\"\n    data-max-filesize=\"<?= $maxFilesize ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n    <?php if ($maxFiles): ?>data-max-files=\"<?= $maxFiles ?>\"<?php endif ?>\n    <?php if ($useCaption): ?>data-config-handler=\"<?= $this->getEventHandler('onLoadAttachmentConfig') ?>\"<?php endif ?>\n    <?php if ($acceptedFileTypes): ?>data-file-types=\"<?= $acceptedFileTypes ?>\"<?php endif ?>\n    <?= $this->formField->getAttributes() ?>\n>\n    <!-- Pointer field -->\n    <input type=\"hidden\" name=\"<?= $name ?>\" value=\"\" />\n\n    <div class=\"empty-state\">\n        <img src=\"<?= Url::asset('/modules/backend/assets/images/no-files.svg') ?>\"/>\n    </div>\n\n    <div class=\"uploader-control-container <?= $externalToolbarAppState ? 'external-toolbar' : null ?>\">\n        <div class=\"uploader-control-toolbar\">\n            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-upload-button\">\n                <i class=\"icon-common-file-upload\"></i>\n                <span class=\"button-label\"><?= __(\"Upload\") ?></span>\n            </a>\n\n            <button\n                type=\"button\"\n                class=\"backend-toolbar-button control-button toolbar-delete-selected populated-only\"\n                data-request-confirm=\"<?= __(\"Are you sure?\") ?>\"\n                data-request=\"<?= $this->getEventHandler('onRemoveAttachment') ?>\"\n                disabled\n            >\n                <i class=\"icon-common-file-remove\"></i>\n                <span class=\"button-label\"><?= __(\"Delete Selected\") ?> <span></span></span>\n            </button>\n        </div>\n\n        <!-- Existing files -->\n        <div class=\"upload-files-container\">\n            <?php foreach ($fileList as $file): ?>\n                <div class=\"server-file\"\n                    data-id=\"<?= $file->id ?>\"\n                    data-path=\"<?= $file->pathUrl ?>\"\n                    data-thumb=\"<?= $file->thumbUrl ?>\"\n                    data-name=\"<?= e($file->title ?: $file->file_name) ?>\"\n                    data-description=\"<?= e($file->description) ?>\"\n                    data-size=\"<?= e($file->file_size) ?>\"\n                    data-accepted=\"true\"\n                ></div>\n            <?php endforeach ?>\n        </div>\n    </div>\n</div>\n\n<!-- Template for new files -->\n<?= $this->makePartial('template_file', ['modeMulti' => true]) ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/partials/_file_single.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-fileupload is-file is-single <?= $singleFile ? 'is-populated' : '' ?> <?= $this->previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"fileupload\"\n    data-upload-handler=\"<?= $this->getEventHandler('onUpload') ?>\"\n    data-template=\"#<?= $this->getId('template') ?>\"\n    data-error-template=\"#<?= $this->getId('errorTemplate') ?>\"\n    data-unique-id=\"<?= $this->getId() ?>\"\n    data-max-filesize=\"<?= $maxFilesize ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n    <?php if ($useCaption): ?>data-config-handler=\"<?= $this->getEventHandler('onLoadAttachmentConfig') ?>\"<?php endif ?>\n    <?php if ($acceptedFileTypes): ?>data-file-types=\"<?= $acceptedFileTypes ?>\"<?php endif ?>\n>\n    <!-- Pointer field -->\n    <input type=\"hidden\" name=\"<?= $name ?>\" value=\"\" />\n\n    <div class=\"empty-state\">\n        <img src=\"<?= Url::asset('/modules/backend/assets/images/no-files.svg') ?>\"/>\n    </div>\n\n    <div class=\"uploader-control-container <?= $externalToolbarAppState ? 'external-toolbar' : null ?>\">\n        <div class=\"uploader-control-toolbar\">\n            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-upload-button\">\n                <i class=\"icon-common-file-upload\"></i>\n                <span\n                    class=\"button-label\"\n                    data-upload-label=\"<?= __(\"Upload\") ?>\"\n                    data-replace-label=\"<?= __(\"Replace\") ?>\"\n                ><?= $singleFile ? __(\"Replace\") : __(\"Upload\") ?></span>\n            </a>\n\n            <button\n                type=\"button\"\n                class=\"backend-toolbar-button control-button toolbar-clear-file populated-only\"\n                data-request=\"<?= $this->getEventHandler('onRemoveAttachment') ?>\"\n                data-request-confirm=\"<?= __(\"Are you sure?\") ?>\"\n            >\n                <i class=\"icon-common-file-remove\"></i>\n                <span class=\"button-label\"><?= __(\"Clear\") ?></span>\n            </button>\n        </div>\n\n        <!-- Existing file -->\n        <div class=\"upload-files-container\">\n            <?php if ($singleFile): ?>\n                <div class=\"server-file\"\n                    data-id=\"<?= $singleFile->id ?>\"\n                    data-path=\"<?= $singleFile->pathUrl ?>\"\n                    data-thumb=\"<?= $singleFile->thumbUrl ?>\"\n                    data-name=\"<?= e($singleFile->title ?: $singleFile->file_name) ?>\"\n                    data-description=\"<?= e($singleFile->description) ?>\"\n                    data-size=\"<?= e($singleFile->file_size) ?>\"\n                    data-accepted=\"true\"\n                ></div>\n            <?php endif ?>\n        </div>\n    </div>\n</div>\n\n<?= $this->makePartial('template_file') ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/partials/_fileupload.php",
    "content": "<?php if ($this->previewMode && !$fileList->count()): ?>\n\n    <span class=\"form-control\"><?= e(trans('backend::lang.form.preview_no_files_message')) ?></span>\n\n<?php else: ?>\n\n    <?php switch ($displayMode):\n\n        case 'image-single': ?>\n            <?= $this->makePartial('image_single') ?>\n        <?php break ?>\n\n        <?php case 'image-multi': ?>\n            <?= $this->makePartial('image_multi') ?>\n        <?php break ?>\n\n        <?php case 'file-single': ?>\n            <?= $this->makePartial('file_single') ?>\n        <?php break ?>\n\n        <?php case 'file-multi': ?>\n            <?= $this->makePartial('file_multi') ?>\n        <?php break ?>\n\n    <?php endswitch ?>\n\n    <!-- Error template -->\n    <script type=\"text/template\" id=\"<?= $this->getId('errorTemplate') ?>\">\n        <div class=\"popover-head\">\n            <h3><?= __(\"Upload Error\") ?></h3>\n            <p>{{errorMsg}}</p>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popover\" aria-label=\"<?= __(\"Close\") ?>\"></button>\n        </div>\n        <div class=\"popover-body\">\n            <button class=\"btn btn-secondary\" data-remove-file><?= __(\"Remove File\") ?></button>\n        </div>\n    </script>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/partials/_image_multi.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-fileupload size-<?= $size ?> is-image is-multi is-grid is-sortable <?= count($fileList) ? 'is-populated' : '' ?> <?= $this->previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"fileupload\"\n    data-upload-handler=\"<?= $this->getEventHandler('onUpload') ?>\"\n    data-template=\"#<?= $this->getId('template') ?>\"\n    data-error-template=\"#<?= $this->getId('errorTemplate') ?>\"\n    data-sort-handler=\"<?= $this->getEventHandler('onSortAttachments') ?>\"\n    data-unique-id=\"<?= $this->getId() ?>\"\n    data-max-filesize=\"<?= $maxFilesize ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n    <?php if ($maxFiles): ?>data-max-files=\"<?= $maxFiles ?>\"<?php endif ?>\n    <?php if ($useCaption): ?>data-config-handler=\"<?= $this->getEventHandler('onLoadAttachmentConfig') ?>\"<?php endif ?>\n    <?php if ($acceptedFileTypes): ?>data-file-types=\"<?= $acceptedFileTypes ?>\"<?php endif ?>\n    <?= $this->formField->getAttributes() ?>\n>\n    <!-- Pointer field -->\n    <input type=\"hidden\" name=\"<?= $name ?>\" value=\"\" />\n\n    <div class=\"empty-state\">\n        <img src=\"<?= Url::asset('/modules/backend/assets/images/no-files.svg') ?>\"/>\n    </div>\n\n    <div class=\"uploader-control-container <?= $externalToolbarAppState ? 'external-toolbar' : null ?>\">\n        <div class=\"uploader-control-toolbar\">\n            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-upload-button\">\n                <i class=\"icon-common-file-upload\"></i>\n                <span class=\"button-label\"><?= __(\"Upload\") ?></span>\n            </a>\n\n            <button\n                type=\"button\"\n                class=\"backend-toolbar-button control-button toolbar-delete-selected populated-only\"\n                data-request-confirm=\"<?= __(\"Are you sure?\") ?>\"\n                data-request=\"<?= $this->getEventHandler('onRemoveAttachment') ?>\"\n                disabled\n            >\n                <i class=\"icon-common-file-remove\"></i>\n                <span class=\"button-label\"><?= __(\"Delete Selected\") ?> <span></span></span>\n            </button>\n        </div>\n\n        <!-- Existing files -->\n        <div class=\"upload-files-container\">\n            <?php foreach ($fileList as $file): ?>\n                <div class=\"server-file\"\n                    data-id=\"<?= $file->id ?>\"\n                    data-path=\"<?= $file->pathUrl ?>\"\n                    data-thumb=\"<?= $file->thumbUrl ?>\"\n                    data-name=\"<?= e($file->title ?: $file->file_name) ?>\"\n                    data-description=\"<?= e($file->description) ?>\"\n                    data-size=\"<?= e($file->file_size) ?>\"\n                    data-accepted=\"true\"\n                ></div>\n            <?php endforeach ?>\n        </div>\n    </div>\n</div>\n\n<!-- Template for new files -->\n<?= $this->makePartial('template_image', ['modeMulti' => true]) ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/partials/_image_single.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-fileupload is-image is-single <?= $singleFile ? 'is-populated' : '' ?> <?= $this->previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"fileupload\"\n    data-upload-handler=\"<?= $this->getEventHandler('onUpload') ?>\"\n    data-template=\"#<?= $this->getId('template') ?>\"\n    data-error-template=\"#<?= $this->getId('errorTemplate') ?>\"\n    data-unique-id=\"<?= $this->getId() ?>\"\n    data-thumbnail-width=\"<?= $imageWidth ?: '0' ?>\"\n    data-thumbnail-height=\"<?= $imageHeight ?: '0' ?>\"\n    data-max-filesize=\"<?= $maxFilesize ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n    <?php if ($useCaption): ?>data-config-handler=\"<?= $this->getEventHandler('onLoadAttachmentConfig') ?>\"<?php endif ?>\n    <?php if ($acceptedFileTypes): ?>data-file-types=\"<?= $acceptedFileTypes ?>\"<?php endif ?>\n    <?= $this->formField->getAttributes() ?>\n>\n    <!-- Pointer field -->\n    <input type=\"hidden\" name=\"<?= $name ?>\" value=\"\" />\n\n    <div class=\"empty-state\">\n        <img src=\"<?= Url::asset('/modules/backend/assets/images/no-files.svg') ?>\"/>\n    </div>\n\n    <div class=\"uploader-control-container <?= $externalToolbarAppState ? 'external-toolbar' : null ?>\">\n        <div class=\"uploader-control-toolbar\">\n            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-upload-button\">\n                <i class=\"icon-common-file-upload\"></i>\n                <span\n                    class=\"button-label\"\n                    data-upload-label=\"<?= __(\"Upload\") ?>\"\n                    data-replace-label=\"<?= __(\"Replace\") ?>\"\n                ><?= $singleFile ? __(\"Replace\") : __(\"Upload\") ?></span>\n            </a>\n\n            <button\n                type=\"button\"\n                class=\"backend-toolbar-button control-button toolbar-clear-file populated-only\"\n                data-request=\"<?= $this->getEventHandler('onRemoveAttachment') ?>\"\n                data-request-confirm=\"<?= __(\"Are you sure?\") ?>\"\n            >\n                <i class=\"icon-common-file-remove\"></i>\n                <span class=\"button-label\"><?= __(\"Clear\") ?></span>\n            </button>\n        </div>\n\n        <!-- Existing file -->\n        <div class=\"upload-files-container\">\n            <?php if ($singleFile): ?>\n                <div class=\"server-file\"\n                    data-id=\"<?= $singleFile->id ?>\"\n                    data-path=\"<?= $singleFile->pathUrl ?>\"\n                    data-thumb=\"<?= $singleFile->thumbUrl ?>\"\n                    data-name=\"<?= e($singleFile->title ?: $singleFile->file_name) ?>\"\n                    data-description=\"<?= e($singleFile->description) ?>\"\n                    data-size=\"<?= e($singleFile->file_size) ?>\"\n                    data-accepted=\"true\"\n                ></div>\n            <?php endif ?>\n        </div>\n    </div>\n</div>\n\n<?= $this->makePartial('template_image') ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/partials/_template_file.php",
    "content": "<!-- Template for new file -->\n<script type=\"text/template\" id=\"<?= $this->getId('template') ?>\">\n    <div class=\"upload-object upload-object-file dz-preview dz-file-preview <?= isset($modeMulti) ? 'mode-multi' : '' ?>\">\n        <?php if (isset($modeMulti)): ?>\n            <div class=\"form-check\">\n                <input\n                    class=\"form-check-input\"\n                    data-record-selector\n                    type=\"checkbox\"\n                    value=\"\"\n                />\n            </div>\n            <div class=\"drag-handle\">\n                <i class=\"icon-list-reorder\"></i>\n            </div>\n        <?php endif ?>\n\n        <div class=\"file-data-container\">\n            <div class=\"file-data-container-inner\">\n                <div class=\"icon-container\">\n                    <i class=\"icon-attachment\"></i>\n                </div>\n\n                <div class=\"info\">\n                    <h4 class=\"filename\">\n                        <span data-dz-name></span>\n                        <p class=\"size\" data-dz-size></p>\n                    </h4>\n                </div>\n                <p class=\"description\" data-description></p>\n                <div class=\"meta\">\n                    <div class=\"progress-bar\"><span class=\"upload-progress\" data-dz-uploadprogress></span></div>\n                    <div class=\"error-message\"><span data-dz-errormessage></span></div>\n                </div>\n            </div>\n        </div>\n    </div>\n</script>\n"
  },
  {
    "path": "modules/backend/formwidgets/fileupload/partials/_template_image.php",
    "content": "<!-- Template for new file -->\n<script type=\"text/template\" id=\"<?= $this->getId('template') ?>\">\n    <div class=\"upload-object upload-object-image dz-preview dz-file-preview <?= isset($modeMulti) ? 'mode-multi' : '' ?>\">\n        <?php if (isset($modeMulti)): ?>\n            <div class=\"form-check\">\n                <input\n                    class=\"form-check-input\"\n                    data-record-selector\n                    type=\"checkbox\"\n                    value=\"\"\n                />\n            </div>\n            <div class=\"drag-handle\">\n                <i class=\"icon-list-reorder\"></i>\n            </div>\n        <?php endif ?>\n\n        <div class=\"file-data-container\">\n            <div class=\"file-data-container-inner\">\n                <div class=\"icon-container image\">\n                    <img data-dz-thumbnail style=\"<?= $cssDimensions ?>\" alt=\"\" />\n                </div>\n                <div class=\"info\">\n                    <h4 class=\"filename\">\n                        <span data-dz-name></span>\n                    </h4>\n                    <p class=\"description\" data-description></p>\n                    <p class=\"size\" data-dz-size></p>\n                </div>\n                <div class=\"meta\">\n                    <div class=\"progress-bar\"><span class=\"upload-progress\" data-dz-uploadprogress></span></div>\n                    <div class=\"error-message\"><span data-dz-errormessage></span></div>\n                </div>\n            </div>\n        </div>\n    </div>\n</script>\n"
  },
  {
    "path": "modules/backend/formwidgets/markdowneditor/assets/css/markdowneditor.css",
    "content": ".field-markdowneditor {\n    width: 100%;\n    position: relative;\n    border: 1px solid var(--bs-border-color);\n    background: var(--oc-form-control-bg);\n    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n\n    &.size-adaptive {\n        border: none!important;\n    }\n\n    textarea {\n        opacity: 0;\n    }\n\n    border-radius: 4px;\n    .editor-toolbar {\n        border-top: none;\n        border-right: none;\n        border-left: none;\n\n        &:before,\n        &:after {\n            display: none !important; /* Removes EasyMDE artifacts */\n        }\n\n        border-top-left-radius: 5px;\n        border-top-right-radius: 5px;\n    }\n\n    &.editor-focus {\n        border: 1px solid var(--oc-border-focus);\n    }\n\n    &.size-tiny {\n        .editor-write {\n            min-height: 50px;\n        }\n        .editor-preview {\n            height: 50px;\n        }\n        &.stretch {\n            min-height: 95px;\n        }\n    }\n    &.size-small {\n        .editor-write {\n            min-height: 100px;\n        }\n        .editor-preview {\n            height: 100px;\n        }\n        &.stretch {\n            min-height: 145px;\n        }\n    }\n    &.size-large {\n        .editor-write {\n            min-height: 200px;\n        }\n        .editor-preview {\n            height: 200px;\n        }\n        &.stretch {\n            min-height: 245px;\n        }\n    }\n    &.size-huge {\n        .editor-write {\n            min-height: 250px;\n        }\n        .editor-preview {\n            height: 250px;\n        }\n        &.stretch {\n            min-height: 295px;\n        }\n    }\n    &.size-giant {\n        .editor-write {\n            min-height: 350px;\n        }\n        .editor-preview {\n            height: 350px;\n        }\n        &.stretch {\n            min-height: 395px;\n        }\n    }\n\n    /* Code */\n\n    .editor-write {\n        position: relative;\n    }\n\n    /* Preview */\n\n    .editor-preview {\n        padding: 15px;\n        overflow: auto;\n    }\n\n    .editor-preview-loader {\n        display: block;\n        width: 20px;\n        height: 20px;\n        position: absolute;\n        right: 10px;\n        top: 10px;\n        margin-top: 35px;\n        background-image: url('../../../../../backend/assets/images/loader-transparent.svg');\n        background-size: 20px 20px;\n        background-position: 50% 50%;\n        animation: spin 1s linear infinite;\n    }\n\n    /* Mode: Tab */\n\n    &.mode-tab {\n        .editor-preview {\n            display: none;\n        }\n\n        &.is-preview {\n            .editor-write {\n                display: none;\n            }\n            .editor-preview {\n                display: block;\n            }\n        }\n    }\n\n    /* Mode: Split */\n\n    &.mode-split {\n        overflow: hidden;\n\n        .editor-preview {\n            float: right;\n            width: 50%;\n        }\n\n        .editor-write {\n            float: left;\n            width: 50%;\n\n            .editor-code {\n                border-right: 1px solid var(--oc-primary-border);\n            }\n        }\n    }\n\n    /* Stretch */\n    &.stretch {\n        &,\n        .editor-toolbar {\n            border-radius: 0 !important;\n        }\n\n        .editor-toolbar {\n            height: auto;\n        }\n\n        .editor-write {\n            float: none;\n            height: calc(100% - 45px);\n            position: relative;\n            min-height: 0;\n        }\n\n        .editor-preview {\n            float: none;\n            height: auto;\n            position: absolute;\n            left: 0;\n            right: 0;\n            top: 0;\n            bottom: 0;\n            margin-top: 45px;\n        }\n\n        &.mode-split {\n            .editor-preview {\n                left: auto;\n            }\n            .editor-write {\n                right: auto;\n            }\n        }\n    }\n\n    /* Full screen */\n\n    &.is-fullscreen {\n        z-index: var(--oc-zindex-dropdown);\n        position: fixed !important;\n        top: 0;\n        left: 0;\n        width: 100%;\n\n        &,\n        .editor-toolbar {\n            border-radius: 0 !important;\n            border: none;\n        }\n    }\n\n    /* Vue mode */\n\n    &.vue-mode {\n        border-radius: 4px!important;\n\n        .CodeMirror-wrap {\n            border-bottom-left-radius: 4px !important;\n        }\n\n        .CodeMirror-scroll {\n            min-height: 20px !important;\n        }\n\n        .component-backend-document {\n            .document-content-container {\n                border-bottom-right-radius: 4px !important;\n                border-bottom-left-radius: 4px !important;\n            }\n\n            .editor-preview-side {\n                border-bottom-right-radius: 4px !important;\n            }\n\n            .document-header-container {\n                display: none !important;\n            }\n        }\n\n        .editor-toolbar,\n        .layout-cell.editor-preview {\n            display: none !important;\n        }\n\n        .editor-write {\n            display: block !important;\n            float: none !important;\n            width: 100% !important;\n            height: 100% !important;\n        }\n\n        .editor-preview {\n            left: auto !important;\n            margin-top: 0 !important;\n        }\n\n        &.size-tiny .editor-write {\n            min-height: 95px;\n        }\n\n        &.size-small .editor-write {\n            min-height: 145px;\n        }\n\n        &.size-large .editor-write {\n            min-height: 245px;\n        }\n\n        &.size-huge .editor-write {\n            min-height: 295px;\n        }\n\n        &.size-giant .editor-write {\n            min-height: 395px;\n        }\n    }\n}\n\n.fancy-layout {\n    .field-markdowneditor.vue-mode {\n        border: none;\n    }\n}\n\n/* Default theme */\n\n.field-markdowneditor .CodeMirror {\n    .CodeMirror-cursor {\n        border-color: var(--bs-emphasis-color);\n    }\n\n    .CodeMirror-selected,\n    .CodeMirror-selectedtext {\n        background: var(--oc-input-selection-bg);\n        color: var(--oc-input-selection-color);\n    }\n}\n\n.field-markdowneditor .editor-preview {\n    color: #515c5d;\n    font-family: \"Helvetica\", sans-serif;\n    line-height: 180%;\n\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6 {\n        margin-top: 20px;\n        font-weight: bold;\n\n        &:first-child {\n            margin-top: 0;\n        }\n    }\n\n    *:last-child {\n        margin-bottom: 0;\n    }\n\n    h1 {\n        font-size: 30px;\n    }\n\n    h2 {\n        font-size: 26px;\n    }\n\n    h3 {\n        font-size: 24px;\n    }\n\n    h4 {\n        font-size: 22px;\n    }\n\n    h5 {\n        font-size: 20px;\n    }\n\n    h6 {\n        font-size: 18px;\n    }\n\n    p,\n    ol,\n    ul {\n        font-size: 14px;\n    }\n\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6,\n    p,\n    ol,\n    ul {\n        margin-bottom: 15px;\n    }\n\n    pre.prettyprint {\n        border-width: 0;\n        padding: 13px 16px;\n        border-radius: 3px;\n        line-height: 130%;\n    }\n\n    img {\n        display: block;\n        max-width: 100%;\n        height: auto;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/markdowneditor/assets/js/markdowneditor.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\nimport MarkdownFormWidget from '../../../../vuecomponents/documentmarkdowneditor/assets/js/formwidget.js';\n\n/*\n * Markdown Editor form field control\n *\n * Data attributes:\n * - data-control=\"markdowneditor\" - enables the markdown editor plugin\n *\n * JavaScript API:\n * oc.fetchControl(element, 'markdowneditor')\n *\n * Dependencies:\n * - Ace Editor (ace.js)\n */\nregisterControl('markdowneditor', class extends ControlBase {\n    init() {\n        this.$el = $(this.element);\n        this.$textarea = $('textarea:first', this.$el);\n        this.$toolbar = $('.editor-toolbar:first', this.$el);\n        this.$write = $('.editor-write:first', this.$el);\n        this.$preview = $('.editor-preview:first', this.$el);\n        this.$code = null;\n        this.editor = null;\n        this.$form = null;\n        this.$buttons = null;\n        this.$fixedButtons = null;\n        this.$indicator = null;\n        this.editorPadding = 15;\n        this.updatesPaused = false;\n        this.vueWidget = null;\n\n        // Apply defaults to config\n        this.config = Object.assign({\n            vendorPath: '/',\n            refreshHandler: null,\n            buttons: ['formatting', 'bold', 'italic', 'unorderedlist', 'orderedlist', 'link', 'horizontalrule'],\n            viewMode: 'tab',\n            sideBySide: true,\n            useMediaManager: false,\n            legacyMode: false\n        }, this.config);\n\n        // Control must have an identifier\n        if (!this.$el.attr('id')) {\n            this.$el.attr('id', 'element-' + Math.random().toString(36).substring(7));\n        }\n    }\n\n    connect() {\n        this.$form = this.$el.closest('form');\n\n        if (!this.config.legacyMode) {\n            this.initVueConnector();\n            return;\n        }\n\n        this.createCodeContainer();\n        this.createToolbar();\n        this.createIndicator();\n        this.setViewMode(this.config.viewMode);\n\n        this.$toolbar.on('click', '.btn, .md-dropdown-button', this.proxy(this.onClickToolbarButton));\n        this.$form.on('oc.beforeRequest', this.proxy(this.onBeforeRequest));\n        this.editor.on('change', this.proxy(this.onEditorChange));\n        this.editor.getSession().on('changeScrollTop', this.proxy(this.onEditorScrollTop));\n\n        $('[data-control=\"tooltip\"]', this.$toolbar).tooltip();\n        $('[data-toggle=\"dropdown\"]', this.$toolbar).dropdown();\n    }\n\n    disconnect() {\n        if (this.config.legacyMode) {\n            this.$toolbar.off('click', '.btn, .md-dropdown-button', this.proxy(this.onClickToolbarButton));\n            this.$form.off('oc.beforeRequest', this.proxy(this.onBeforeRequest));\n            if (this.editor) {\n                this.editor.off('change', this.proxy(this.onEditorChange));\n            }\n            $(window).off('resize', this.proxy(this.updateFullscreen));\n        }\n\n        if (this.vueWidget) {\n            this.vueWidget.remove();\n            this.vueWidget = null;\n        }\n\n        this.$el = null;\n        this.$textarea = null;\n        this.$toolbar = null;\n        this.$write = null;\n        this.$preview = null;\n        this.$code = null;\n        this.editor = null;\n        this.$form = null;\n        this.$buttons = null;\n        this.$fixedButtons = null;\n        this.$indicator = null;\n        this.editorPadding = null;\n        this.updatesPaused = null;\n\n        this.isSplitMode = null;\n        this.isPreview = null;\n        this.isFullscreen = null;\n        this.dataTrackInputTimer = null;\n    }\n\n    //\n    // Events\n    //\n\n    onClickToolbarButton(ev) {\n        var $target = $(ev.target),\n            $button = $target.is('a') ? $target : $target.closest('.btn'),\n            action = $button.data('button-action'),\n            template = $button.data('button-template');\n\n        $button.blur();\n\n        this.pauseUpdates();\n\n        if (template) {\n            this[action](template);\n        }\n        else if (action) {\n            this[action]();\n        }\n\n        this.resumeUpdates();\n        this.handleChange();\n    }\n\n    onEditorScrollTop(scroll) {\n        if (!this.isSplitMode) {\n            return;\n        }\n\n        var canvasHeight = this.$preview.height(),\n            editorHeight,\n            previewHeight,\n            scrollRatio;\n\n        if (canvasHeight != this.$el.data('markdowneditor-canvas-height')) {\n            editorHeight =\n                (this.editor.getSession().getScreenLength() *\n                this.editor.renderer.lineHeight) -\n                canvasHeight;\n\n            previewHeight = this.$preview.get(0).scrollHeight - canvasHeight;\n\n            scrollRatio = previewHeight / editorHeight;\n\n            this.$el.data('markdowneditor-canvas-height', canvasHeight);\n            this.$el.data('markdowneditor-scroll-ratio', scrollRatio);\n        }\n        else {\n            scrollRatio = this.$el.data('markdowneditor-scroll-ratio');\n        }\n\n        scroll += this.editorPadding;\n        this.$preview.scrollTop(scroll * scrollRatio);\n    }\n\n    onEditorChange() {\n        var html = this.editor.getSession().getValue();\n\n        this.$form.trigger('change');\n\n        this.$textarea.trigger('changeContent.oc.markdowneditor', [this, html]);\n\n        this.handleChange();\n    }\n\n    onBeforeRequest() {\n        this.$textarea.val(this.editor.getSession().getValue());\n    }\n\n    onResize() {\n        this.editor.resize();\n    }\n\n    onBlur() {\n        this.$el.removeClass('editor-focus');\n    }\n\n    onFocus() {\n        this.$el.addClass('editor-focus');\n    }\n\n    //\n    // Toolbar\n    //\n\n    createToolbar() {\n        var self = this,\n            $button,\n            $buttons = $('<div class=\"toolbar-item toolbar-primary\" />'),\n            $fixedButtons = $('<div class=\"toolbar-item\" data-calculate-width />');\n\n        $.each($.oc.markdownEditorButtons, function(code, button) {\n            $button = self.makeToolbarButton(code, button);\n\n            if (button.fixed) {\n                $fixedButtons.append($button);\n            }\n            else {\n                $buttons.append($button);\n            }\n\n            if (button.dropdown) {\n                $button.attr('data-toggle', 'dropdown');\n                self.createToolbarDropdown(button, $button);\n            }\n        })\n\n        $buttons.wrapInner('<div data-control=\"toolbar\" />');\n        this.$toolbar.append($buttons);\n        this.$toolbar.append($fixedButtons);\n\n        this.$fixedButtons = $fixedButtons;\n        this.$buttons = $buttons;\n    }\n\n    createToolbarDropdown(button, $el) {\n        var $dropdown = $('<ul class=\"dropdown-menu\" />'),\n            $childButton;\n\n        $dropdown.attr('data-dropdown-title', $.oc.lang.get(button.label));\n        $.each(button.dropdown, function(code, childButton) {\n            $childButton = $('<a />').attr({\n                'href': 'javascript:;',\n                'class': 'md-dropdown-button',\n                'tabindex': '-1',\n                'data-button-code': code,\n                'data-button-action': childButton.action\n            });\n\n            if (childButton.template) {\n                $childButton.attr('data-button-template', childButton.template);\n            }\n\n            if (childButton.cssClass) {\n                $childButton.addClass(childButton.cssClass);\n            }\n\n            $childButton.text($.oc.lang.get(childButton.label));\n\n            $dropdown.append($childButton);\n            $childButton.wrap('<li />');\n        })\n\n        $el.wrap('<div class=\"dropdown dropdown-fixed\" />');\n        $el.after($dropdown);\n    }\n\n    makeToolbarButton(code, button) {\n        if (!this.config.useMediaManager && (code == 'medialink' || code == 'mediaimage')) {\n            return;\n        }\n\n        var $button = $('<button />').attr({\n            'type': \"button\",\n            'class': 'btn',\n            'data-button-code': code,\n            'data-bs-display': \"static\",\n        }).css({\n            position: 'relative'\n        });\n\n        var $buttonTooltip = $('<span />').attr({\n            'title': $.oc.lang.get(button.label),\n            'data-control': \"tooltip\",\n            'data-bs-placement': \"bottom\",\n            'data-bs-container': \"body\"\n        }).css({\n            position: 'absolute',\n            top: 0,\n            left: 0,\n            right: 0,\n            bottom: 0\n        });\n\n        $button.append($buttonTooltip);\n\n        if (button.action) {\n            $button.attr('data-button-action', button.action);\n        }\n\n        if (button.template) {\n            $button.attr('data-button-template', button.template);\n        }\n\n        if (button.cssClass) {\n            $button.addClass(button.cssClass);\n        }\n        else {\n            $buttonTooltip.append('<i class=\"icon-' + button.icon + '\"></i>');\n        }\n\n        return $button;\n    }\n\n    addToolbarButton(code, button) {\n        var $button = this.makeToolbarButton(code, button);\n        var appendCode = button.insertBefore || button.insertAfter;\n        if (appendCode) {\n            var appendButton = this.findToolbarButton(appendCode)\n            if (!!appendButton.length && button.insertBefore) {\n                appendButton.before($button);\n            }\n            else if (!!appendButton.length && button.insertAfter) {\n                appendButton.after($button);\n            }\n        }\n        else {\n            if (button.fixed) {\n                this.$fixedButtons.append($button);\n            }\n            else {\n                $('[data-control=\"toolbar\"]', this.$buttons).append($button);\n            }\n        }\n\n        return $button;\n    }\n\n    findToolbarButton(code) {\n        return $('[data-button-code='+code+']', this.$toolbar);\n    }\n\n    //\n    // Write\n    //\n\n    createCodeContainer() {\n        /*\n         * Create code container\n         */\n        this.$code = $('<div />')\n            .addClass('editor-code')\n            .attr('id', this.$el.attr('id') + '-code')\n            .css({\n                position: 'absolute',\n                top: 0,\n                right: 0,\n                bottom: 0,\n                left: 0\n            })\n            .appendTo(this.$write);\n\n        /*\n         * Initialize ACE editor\n         */\n        var editor = this.editor = ace.edit(this.$code.attr('id'));\n\n        // Fixes a weird notice about scrolling\n        editor.$blockScrolling = Infinity;\n\n        editor.getSession().setValue(this.$textarea.val());\n\n        /*\n         * Set theme, anticipated languages should be preloaded\n         */\n        oc.AssetManager.load({\n            js:[\n                this.config.vendorPath + '/theme-github.js'\n            ]\n        }, function(){\n            editor.setTheme('ace/theme/github')\n        });\n\n        editor.getSession().setMode({ path: 'ace/mode/markdown' });\n        editor.setHighlightActiveLine(false);\n        editor.renderer.setShowGutter(false);\n        editor.renderer.setShowPrintMargin(false);\n        editor.getSession().setUseWrapMode(true);\n        editor.setFontSize(14);\n        editor.on('blur', this.proxy(this.onBlur));\n        editor.on('focus', this.proxy(this.onFocus));\n\n        // Set the vendor path for Ace's require path\n        ace.require('ace/config').set('basePath', this.config.vendorPath);\n\n        editor.renderer.setPadding(this.editorPadding);\n        editor.renderer.setScrollMargin(this.editorPadding, this.editorPadding, 0, 0);\n\n        setTimeout(function() {\n            editor.resize();\n        }, 100);\n    }\n\n    handleChange() {\n        if (this.updatesPaused) {\n            return;\n        }\n\n        var self = this;\n        if (!this.isSplitMode) {\n            return;\n        }\n\n        if (this.loading) {\n            if (this.dataTrackInputTimer === undefined) {\n                this.dataTrackInputTimer = window.setInterval(function(){\n                    self.handleChange();\n                }, 100);\n            }\n            return;\n        }\n\n        window.clearTimeout(this.dataTrackInputTimer);\n        this.dataTrackInputTimer = undefined;\n\n        self.updatePreview();\n    }\n\n    getEditorObject() {\n        return this.editor\n    }\n\n    getContent() {\n        return this.editor.getSession().getValue()\n    }\n\n    setContent(html) {\n        this.editor.getSession().setValue(html)\n    }\n\n    //\n    // Preview\n    //\n\n    updatePreview() {\n        var self = this\n\n        this.loading = true\n        this.showIndicator()\n\n        this.$el.request(this.config.refreshHandler, {\n            success: function(data) {\n                this.success(data)\n                self.$preview.html(data.preview)\n                self.initPreview()\n            }\n        }).done(function() {\n            self.hideIndicator()\n            self.loading = false\n        })\n    }\n\n    initPreview() {\n        $('pre', this.$preview).addClass('prettyprint')\n        prettyPrint()\n\n        this.$el.trigger('initPreview.oc.markdowneditor')\n    }\n\n    pauseUpdates() {\n        this.updatesPaused = true\n    }\n\n    resumeUpdates() {\n        this.updatesPaused = false\n    }\n\n    //\n    // Loader\n    //\n\n    createIndicator() {\n        this.$indicator = $('<div class=\"editor-preview-loader\"></div>')\n        this.$el.prepend(this.$indicator)\n        this.$indicator.css('display', 'none')\n    }\n\n    showIndicator() {\n        this.$indicator.css('display', 'block')\n    }\n\n    hideIndicator() {\n        this.$indicator.css('display', 'none')\n    }\n\n    //\n    // View mode\n    //\n\n    setViewMode(value) {\n        this.isSplitMode = value == 'split'\n\n        $('[data-button-code=\"preview\"]', this.$toolbar).toggle(!this.isSplitMode)\n\n        this.$el\n            .removeClass('mode-tab mode-split')\n            .addClass('mode-' + value)\n\n        if (this.isSplitMode) {\n            this.updatePreview()\n        }\n    }\n\n    //\n    // Full screen\n    //\n\n    setFullscreen(value) {\n        this.isFullscreen = value\n        this.$el.toggleClass('is-fullscreen', value)\n\n        if (value) {\n            $('body, html').css('overflow', 'hidden')\n            this.updateFullscreen()\n            this.setViewMode('split')\n            $(window).on('resize', this.proxy(this.updateFullscreen))\n        }\n        else {\n            this.setViewMode(this.config.viewMode)\n\n            this.$preview.css('height', '')\n            this.$write.css('height', '')\n            $('body, html').css('overflow', '')\n\n            $(window).off('resize', this.proxy(this.updateFullscreen))\n            this.editor.resize()\n        }\n\n        $(window).trigger('oc.updateUi')\n    }\n\n    updateFullscreen() {\n        if (!this.isFullscreen) return\n\n        var fullscreenCss = {\n            height: $(document).height() - this.$toolbar.outerHeight()\n        }\n\n        this.$preview.css(fullscreenCss)\n        this.$write.css(fullscreenCss)\n        this.editor.resize()\n    }\n\n    //\n    // Media Manager\n    //\n\n    launchMediaManager(onSuccess) {\n        var self = this\n\n        new oc.mediaManager.popup({\n            alias: 'ocmediamanager',\n            cropAndInsertButton: true,\n            onInsert: function(items) {\n                if (!items.length) {\n                    alert('Please select image(s) to insert.')\n                    return\n                }\n\n                if (items.length > 1) {\n                    alert('Please select a single item.')\n                    return\n                }\n\n                var path, publicUrl\n                for (var i=0, len=items.length; i<len; i++) {\n                    path = items[i].path\n                    publicUrl = items[i].publicUrl\n                }\n\n                // Spaces in URLs break Markdown syntax\n                publicUrl = publicUrl.replace(/\\s/g, '%20')\n\n                onSuccess(publicUrl)\n\n                this.hide()\n            }\n        })\n    }\n\n    //\n    // Button actions\n    //\n\n    toggleFullscreen() {\n        this.setFullscreen(!this.isFullscreen)\n        if (this.isPreview) {\n            this.togglePreview()\n        }\n\n        this.editor.focus()\n        $('[data-button-code=\"fullscreen\"]', this.$toolbar).toggleClass('active')\n    }\n\n    togglePreview() {\n        this.isPreview = !this.isPreview\n\n        if (this.isPreview) {\n            this.updatePreview()\n        }\n        else {\n            this.editor.focus()\n        }\n\n        this.$el.toggleClass('is-preview', this.isPreview)\n        $('.btn', this.$buttons).prop('disabled', this.isPreview)\n\n        $('[data-button-code=\"preview\"]', this.$toolbar).toggleClass('active')\n    }\n\n    insertLine(template) {\n        var editor = this.editor,\n            pos = this.editor.getCursorPosition()\n\n        if (pos.column == 0) {\n            editor.selection.clearSelection()\n        }\n        else {\n            editor.navigateTo(editor.getSelectionRange().start.row, Number.MAX_VALUE)\n        }\n\n        editor.insert(template)\n        editor.focus()\n    }\n\n    formatInline(template) {\n        var editor = this.editor,\n            pos = this.editor.getCursorPosition(),\n            text = editor.session.getTextRange(editor.selection.getRange()).trim()\n\n        if (!text.length) {\n            editor.selection.selectWord()\n            text = editor.session.getTextRange(editor.selection.getRange()).trim()\n        }\n\n        editor.insert(template.replace('$1', text))\n        editor.moveCursorToPosition(pos)\n\n        if (template.indexOf('$1') != -1) {\n            editor.navigateRight(template.indexOf('$1'))\n        }\n\n        editor.focus()\n    }\n\n    formatBlock(template) {\n        var editor = this.editor,\n            pos = this.editor.getCursorPosition(),\n            text = editor.session.getTextRange(editor.selection.getRange()).trim()\n\n        if (!text.length) {\n            editor.navigateTo(editor.getSelectionRange().start.row, 0)\n            editor.selection.selectLineEnd()\n            text = editor.session.getTextRange(editor.selection.getRange()).trim()\n        }\n        else {\n            editor.insert('\\n')\n        }\n\n        editor.insert(template.replace('$1', text))\n        editor.moveCursorToPosition(pos)\n\n        if (template.indexOf('$1') != -1) {\n            editor.navigateRight(template.indexOf('$1'))\n        }\n\n        editor.focus()\n    }\n\n    formatBlockMulti(template) {\n        var editor = this.editor,\n            pos = this.editor.getCursorPosition(),\n            text = editor.session.getTextRange(editor.selection.getRange()).trim()\n\n        if (!text.length) {\n            editor.navigateTo(editor.getSelectionRange().start.row, 0)\n            editor.selection.selectLineEnd()\n        }\n\n        var range = editor.selection.getRange()\n        for (var i = range.start.row + 1; i < range.end.row + 2; i++) {\n            editor.gotoLine(i);\n            editor.insert(template.replace('$1', ''));\n        }\n\n        editor.moveCursorToPosition(pos)\n        editor.focus()\n    }\n\n    formatMediaManager(template) {\n        var self = this,\n            editor = this.editor,\n            pos = this.editor.getCursorPosition(),\n            text = editor.session.getTextRange(editor.selection.getRange()).trim()\n\n        if (!text.length) {\n            editor.selection.selectWord()\n            text = editor.session.getTextRange(editor.selection.getRange()).trim()\n        }\n\n        this.launchMediaManager(function(path) {\n            editor.insert(template.replace('$1', text).replace('$2', path));\n            editor.moveCursorToPosition(pos)\n            editor.focus()\n\n            if (!text.length && template.indexOf('$1') != -1) {\n                editor.navigateRight(template.indexOf('$1'))\n            }\n        })\n    }\n\n    //\n    // Vue mode\n    //\n\n    initVueConnector() {\n        this.vueWidget = new MarkdownFormWidget(this.$textarea.get(0), this.config, () => {\n            this.$form.trigger('change');\n        });\n    }\n});\n\n// BUTTON DEFINITIONS\n// =================\n\nif ($.oc === undefined)\n    $.oc = {}\n\n$.oc.markdownEditorButtons = {\n\n    formatting: {\n        label: 'markdowneditor.formatting',\n        icon: 'paragraph',\n        dropdown: {\n            quote: {\n                label: 'markdowneditor.quote',\n                cssClass: 'oc-button oc-icon-quote-right',\n                action: 'formatBlockMulti',\n                template: '> $1'\n            },\n            code: {\n                label: 'markdowneditor.code',\n                cssClass: 'oc-button oc-icon-code',\n                action: 'formatBlock',\n                template: '\\n```\\n$1\\n```\\n'\n            },\n            header1: {\n                label: 'markdowneditor.header1',\n                cssClass: 'oc-button oc-icon-header',\n                action: 'formatBlock',\n                template: '# $1'\n            },\n            header2: {\n                label: 'markdowneditor.header2',\n                cssClass: 'oc-button oc-icon-header',\n                action: 'formatBlock',\n                template: '## $1'\n            },\n            header3: {\n                label: 'markdowneditor.header3',\n                cssClass: 'oc-button oc-icon-header',\n                action: 'formatBlock',\n                template: '### $1'\n            },\n            header4: {\n                label: 'markdowneditor.header4',\n                cssClass: 'oc-button oc-icon-header',\n                action: 'formatBlock',\n                template: '#### $1'\n            },\n            header5: {\n                label: 'markdowneditor.header5',\n                cssClass: 'oc-button oc-icon-header',\n                action: 'formatBlock',\n                template: '##### $1'\n            },\n            header6: {\n                label: 'markdowneditor.header6',\n                cssClass: 'oc-button oc-icon-header',\n                action: 'formatBlock',\n                template: '###### $1'\n            }\n        }\n    },\n    bold: {\n        label: 'markdowneditor.bold',\n        icon: 'bold',\n        action: 'formatInline',\n        template: '**$1**'\n    },\n    italic: {\n        label: 'markdowneditor.italic',\n        icon: 'italic',\n        action: 'formatInline',\n        template: '*$1*'\n    },\n    unorderedlist: {\n        label: 'markdowneditor.unorderedlist',\n        icon: 'list-ul',\n        action: 'formatBlockMulti',\n        template: '* $1'\n    },\n    orderedlist: {\n        label: 'markdowneditor.orderedlist',\n        icon: 'list-ol',\n        action: 'formatBlockMulti',\n        template: '1. $1'\n    },\n    link: {\n        label: 'markdowneditor.link',\n        icon: 'link',\n        action: 'formatInline',\n        template: '[$1](http://)'\n    },\n    image: {\n        label: 'markdowneditor.image',\n        icon: 'image',\n        action: 'formatInline',\n        template: '![$1](http://)'\n    },\n    horizontalrule: {\n        label: 'markdowneditor.horizontalrule',\n        icon: 'minus',\n        action: 'insertLine',\n        template: '\\n\\n---\\n'\n    },\n    medialink: {\n        label: 'mediamanager.insert_link',\n        cssClass: 'oc-autumn-button oc-icon-link',\n        action: 'formatMediaManager',\n        template: '[$1]($2)'\n    },\n    mediaimage: {\n        label: 'mediamanager.insert_image',\n        cssClass: 'oc-autumn-button oc-icon-image',\n        action: 'formatMediaManager',\n        template: '![$1]($2)'\n    },\n    fullscreen: {\n        label: 'markdowneditor.fullscreen',\n        icon: 'expand',\n        action: 'toggleFullscreen',\n        fixed: true\n    },\n    preview: {\n        label: 'markdowneditor.preview',\n        icon: 'eye',\n        action: 'togglePreview',\n        fixed: true\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/markdowneditor/partials/_markdowneditor.php",
    "content": "<?php if ($this->previewMode): ?>\n    <div class=\"form-control\"><?= Markdown::parse(e($value)) ?></div>\n<?php else: ?>\n    <div\n        id=\"<?= $this->getId() ?>\"\n        class=\"field-markdowneditor size-<?= $size ?> <?= $stretch?'layout-relative stretch':'' ?> <?= $legacyMode ? '' : 'layout vue-mode' ?>\"\n        data-control=\"markdowneditor\"\n        data-refresh-handler=\"<?= $this->getEventHandler('onRefresh') ?>\"\n        data-view-mode=\"<?= $mode ?>\"\n        data-legacy-mode=\"<?= $legacyMode ? 1 : 0 ?>\"\n        data-lang-fullscreen=\"<?= e(trans('backend::lang.form.toggle_full_screen')) ?>\"\n        <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n        <?php if ($useMediaManager): ?>data-use-media-manager=\"true\"<?php endif ?>\n        <?php if (!$sideBySide): ?>data-side-by-side=\"false\"<?php endif ?>\n        data-vendor-path=\"<?= Url::asset('/modules/backend/formwidgets/codeeditor/assets/vendor/ace') ?>\">\n\n        <?php if (!$legacyMode): ?><div class=\"layout-row\"><?php endif ?>\n\n        <div class=\"control-toolbar editor-toolbar\"></div>\n\n        <div class=\"editor-write layout-cell\">\n            <textarea name=\"<?= $name ?>\" id=\"<?= $this->getId('textarea') ?>\"><?= e($value) ?></textarea>\n        </div>\n\n        <div class=\"editor-preview layout-cell\"></div>\n\n        <?php if (!$legacyMode): ?></div><?php endif ?>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/nestedform/assets/css/nestedform.css",
    "content": ".nested-form{min-height:30px;position:relative}.nested-form .control-tabs.primary-tabs .nav-tabs{margin:0!important}.nested-form.is-paneled{background:var(--bs-body-bg);border:1px solid var(--oc-primary-border);border-radius:4px;box-shadow:none;margin-top:5px;padding:10px 15px 0!important}.nested-form.is-paneled .control-tabs.primary-tabs .nav-tabs{margin-left:-15px!important;margin-right:-15px!important}.nested-form.is-paneled .control-tabs.primary-tabs .nav-tabs>li.active>a:before{background-color:var(--bs-body-bg);border-color:var(--bs-body-bg)}.nested-form.is-paneled .control-tabs.primary-tabs .nav-tabs>li>a>span.title:after,.nested-form.is-paneled .control-tabs.primary-tabs .nav-tabs>li>a>span.title:before{background-color:var(--bs-body-bg)}\n"
  },
  {
    "path": "modules/backend/formwidgets/nestedform/assets/less/nestedform.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n@nestedform-bg: @body-bg;\n@nestedform-border: @primary-border;\n\n.nested-form {\n    position: relative;\n    min-height: 30px;\n\n    .control-tabs.primary-tabs {\n        .nav-tabs {\n            margin: 0 !important;\n        }\n    }\n}\n\n.nested-form.is-paneled {\n    background: @nestedform-bg;\n    border: 1px solid @nestedform-border;\n    border-radius: @border-radius-base;\n    box-shadow: @input-box-shadow;\n    margin-top: 5px;\n    padding: 10px 15px 0 15px !important;\n\n    .control-tabs.primary-tabs .nav-tabs {\n        margin-left: -15px !important;\n        margin-right: -15px !important;\n\n        > li.active > a:before {\n            background-color: @nestedform-bg;\n            border-color: @nestedform-bg;\n        }\n\n        > li > a > span.title {\n            &:before, &:after {\n                background-color: @nestedform-bg;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/nestedform/partials/_nestedform.php",
    "content": "<div class=\"nested-form <?= $this->showPanel ? 'is-paneled' : '' ?>\">\n    <?= $this->formWidget->render() ?>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/paletteeditor/assets/css/paletteeditor.css",
    "content": ".field-paletteeditor div.control-simplelist.is-selectable-box.color-preset-selector{border:none;margin-bottom:-16px;margin-left:0;margin-top:10px}.field-paletteeditor div.control-simplelist.is-selectable-box.color-preset-selector li{margin:0 16px 16px 0;width:215px}.field-paletteeditor div.control-simplelist.is-selectable-box.color-preset-selector li.active .color-preset-box{border-color:var(--oc-accent)}.field-paletteeditor div.control-simplelist.is-selectable-box.color-preset-selector li .heading{margin:0;padding:12px 17px;text-align:left}.field-paletteeditor div.control-simplelist.is-selectable-box.color-preset-selector .color-preset-box{background:var(--oc-form-control-bg);border:2px solid var(--bs-border-color);border-radius:10px;display:block}.field-paletteeditor div.control-simplelist.is-selectable-box.color-preset-selector .color-preset-box .mode-image{border-bottom:1px solid var(--bs-border-color);display:block;position:relative}.field-paletteeditor div.control-simplelist.is-selectable-box.color-preset-selector .color-preset-box .mode-image:before{left:17px;position:absolute}.field-paletteeditor .palette-show-custom{background:var(--oc-dropdown-trigger-bg);border:1px dashed var(--oc-dropdown-trigger-border);border-radius:5px;display:inline-block;position:relative}.field-paletteeditor .palette-show-custom>a{color:var(--oc-dropdown-trigger-color);display:block;font-size:14px;font-weight:400;padding:7px 15px;text-align:center;text-decoration:none}.field-paletteeditor .palette-show-custom>a>i{margin-left:-2px;margin-right:4px;position:relative;top:1px}.field-paletteeditor .palette-show-custom:focus,.field-paletteeditor .palette-show-custom:hover{background-color:var(--oc-dropdown-hover-bg);border-color:transparent}.field-paletteeditor .palette-show-custom:focus>a,.field-paletteeditor .palette-show-custom:focus>a>i,.field-paletteeditor .palette-show-custom:hover>a,.field-paletteeditor .palette-show-custom:hover>a>i{color:var(--oc-dropdown-hover-color)}.field-paletteeditor .preview-placeholder{height:104px;position:relative}.field-paletteeditor .preview-placeholder>.p-header{background:var(--oc-mainnav-bg);border-top-left-radius:8px;border-top-right-radius:8px;display:flex;height:32px}.field-paletteeditor .preview-placeholder>.p-header>.p-nav{flex-grow:1;padding-top:2px;position:relative}.field-paletteeditor .preview-placeholder>.p-header>.p-nav>.p-item{float:left;opacity:.5;position:relative;top:3px}.field-paletteeditor .preview-placeholder>.p-header>.p-nav>.p-item.is-active{opacity:1}.field-paletteeditor .preview-placeholder>.p-header>.p-nav>.p-item>*{background:var(--oc-mainnav-color);display:inline-block}.field-paletteeditor .preview-placeholder>.p-header>.p-nav>.p-item>.p-icon{border-radius:2px;height:9px;margin-left:12px;width:9px}.field-paletteeditor .preview-placeholder>.p-header>.p-nav>.p-item>.p-text{border-radius:4px;height:4px;position:relative;top:-2px;width:20px}.field-paletteeditor .preview-placeholder>.p-header>.p-nav>.p-item:first-child>.p-icon{margin-left:7px}.field-paletteeditor .preview-placeholder>.p-header>.p-nav>.p-item:nth-child(2)>.p-text{width:28px}.field-paletteeditor .preview-placeholder>.p-header>.p-nav>.p-item:nth-child(3)>.p-text{width:15px}.field-paletteeditor .preview-placeholder>.p-header>.p-controlpanel{align-items:center;display:flex;justify-content:center;position:relative;width:30px}.field-paletteeditor .preview-placeholder>.p-header>.p-controlpanel>.p-avatar{background:#ccc;border-radius:10px;height:10px;margin:0 2px;width:10px}.field-paletteeditor .preview-placeholder>.p-sidebar{background:var(--oc-sidebar-bg);float:left;height:72px;position:relative;width:58px}.field-paletteeditor .preview-placeholder>.p-sidebar>.p-link{display:block;height:10px;margin-top:5px;padding-left:8px;width:58px}.field-paletteeditor .preview-placeholder>.p-sidebar>.p-link>*{background:var(--oc-sidebar-color);float:left;position:relative}.field-paletteeditor .preview-placeholder>.p-sidebar>.p-link.is-active{background:var(--oc-sidebar-active-bg);border-bottom-right-radius:3px;border-top-right-radius:3px;width:38px}.field-paletteeditor .preview-placeholder>.p-sidebar>.p-link.is-active>*{background:var(--oc-sidebar-active-color)}.field-paletteeditor .preview-placeholder>.p-sidebar>.p-link>.p-icon{border-radius:2px;height:5px;top:2px;width:5px}.field-paletteeditor .preview-placeholder>.p-sidebar>.p-link>.p-text{border-radius:4px;height:3px;margin-left:3px;top:3px;width:18px}.field-paletteeditor .preview-placeholder>.p-sidebar>.p-link:nth-child(2)>.p-text{width:28px}.field-paletteeditor .preview-placeholder>.p-sidebar>.p-link:nth-child(3)>.p-text{width:15px}.field-paletteeditor .preview-placeholder>.p-content{background:var(--bs-body-bg);display:block;display:flex;flex-direction:column;height:72px;margin-left:58px;padding:6px}.field-paletteeditor .preview-placeholder>.p-content>.p-form{flex-grow:1}.field-paletteeditor .preview-placeholder>.p-content>.p-form .p-input{background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:3px;display:block;height:8px;margin-bottom:3px}.field-paletteeditor .preview-placeholder>.p-content>.p-form .p-input.span-left,.field-paletteeditor .preview-placeholder>.p-content>.p-form .p-input.span-right{width:48%}.field-paletteeditor .preview-placeholder>.p-content>.p-form .p-input.span-right{float:right}.field-paletteeditor .preview-placeholder>.p-content>.p-form .p-input.size-medium{height:20px}.field-paletteeditor .preview-placeholder>.p-content>.p-buttons{height:14px}.field-paletteeditor .preview-placeholder>.p-content>.p-buttons>.p-button{background:var(--bs-secondary);border-radius:2px;float:left;height:7px;margin-right:3px;margin-top:6px;position:relative;width:24px}.field-paletteeditor .preview-placeholder>.p-content>.p-buttons>.p-button.is-primary{background:var(--bs-primary)}\n"
  },
  {
    "path": "modules/backend/formwidgets/paletteeditor/assets/js/paletteeditor.js",
    "content": "/*\n * PaletteEditor plugin\n *\n * Data attributes:\n * - data-control=\"colorpicker\" - enables the plugin on an element\n * - data-data-locker=\"input#locker\" - Input element to store and restore the chosen color\n *\n * Config:\n * - colorModeSelector: '#selector'\n */\n\n'use strict';\n\noc.registerControl('paletteeditor', class extends oc.ControlBase {\n    init() {\n        this.presetDefinitions = window.backendPaletteEditorFormWidgetPresetDefinitions;\n        this.isUserEvent = true;\n\n        this.$presetSelect = this.element.querySelector('[data-palette-preset-selection]');\n        this.$previewStylesheet = this.element.querySelector('[data-palette-stylesheet]');\n        this.$activeColorModeSelector = this.element.querySelector('[data-palette-color-mode]');\n        this.$colorModeSelector = document.querySelector(this.config.colorModeSelector || '#selector');\n    }\n\n    connect() {\n        if (this.$colorModeSelector) {\n            this.listen('change', this.$colorModeSelector, this.onChangeColorMode);\n        }\n\n        this.listen('change', '[data-palette-preset-selection]', this.onChangePreset);\n        this.listen('change', '.field-colorpicker input.form-control', this.onChangeColorPicker);\n        this.listen('click', '.palette-show-custom', this.onClickCustomPalette);\n    }\n\n    onChangePreset(event) {\n        if (!this.isUserEvent) {\n            return;\n        }\n\n        this.backendBrandSettingSetColorPreset(event.target.value);\n    }\n\n    onChangeColorMode(event) {\n        if (!this.isUserEvent) {\n            return;\n        }\n\n        setTimeout(() => {\n            this.$activeColorModeSelector.value = this.getCurrentColorMode();\n            this.backendBrandSettingSetColorPreset(this.$presetSelect.value);\n        }, 0);\n    }\n\n    onChangeColorPicker(event) {\n        if (!this.isUserEvent) {\n            return;\n        }\n\n        if (this.$presetSelect.value != 'custom') {\n            this.$presetSelect.value = 'custom';\n            this.dispatchNoReplicate('change', { target: this.$presetSelect });\n        }\n\n        this.previewStylesheet();\n    }\n\n    onClickCustomPalette(event) {\n        event.target.closest('[data-custom-palette-button]').remove();\n        this.element.querySelector('[data-custom-palette]').style.display = 'block';\n    }\n\n    backendBrandSettingSetColorPreset(mode) {\n        var colorMode = this.getCurrentColorMode();\n        if (!this.presetDefinitions[mode] || !this.presetDefinitions[mode][colorMode]) {\n            return;\n        }\n\n        var palette = this.presetDefinitions[mode][colorMode];\n\n        // The change event is used to interact with the color picker UI events\n        for (const varName in palette) {\n            var $colorPicker = this.element.querySelector('[name=\"PaletteEditor[palette]['+varName+']\"]');\n            $colorPicker.value = palette[varName];\n            this.dispatchNoReplicate('change', { target: $colorPicker });\n        }\n\n        this.previewStylesheet();\n    }\n\n    getCurrentColorMode() {\n        return document.body.getAttribute('data-bs-theme') || document.documentElement.getAttribute('data-bs-theme') || 'light';\n    }\n\n    previewStylesheet() {\n        var styles = '';\n        var self = this;\n\n        this.element.querySelectorAll('.field-colorpicker input.form-control').forEach((el) => {\n            styles += self.convertInputNameToCssVar(el.name, 'oc')+':'+el.value+';';\n            styles += self.convertInputNameToCssVar(el.name, 'bs')+':'+el.value+';';\n        });\n\n        this.$previewStylesheet.textContent = 'body > * { '+styles+' }';\n    }\n\n    convertInputNameToCssVar(name, prefix) {\n        return '--'+prefix+'-' + name\n            .replace(/\\[(\\w+)]/g, '.$1')\n            .split('.').at(-1)\n            .replace(/_/g, '-');\n    }\n\n    dispatchNoReplicate(eventName, detail) {\n        this.isUserEvent = false;\n        oc.Events.dispatch(eventName, detail);\n        this.isUserEvent = true;\n    }\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/paletteeditor/assets/less/paletteeditor.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n@preview-height: 104px;\n@preview-sidebar: 58px;\n@preview-header: 32px;\n\n.field-paletteeditor {\n\n    div.control-simplelist.is-selectable-box.color-preset-selector {\n        margin-left: 0;\n        margin-top: 10px;\n        border: none;\n        margin-bottom: -16px;\n\n        li {\n            margin: 0 16px 16px 0;\n            width: 215px;\n\n            &.active .color-preset-box {\n                border-color: @brand-accent;\n            }\n\n            .heading {\n                margin: 0;\n                text-align: left;\n                padding: 12px 17px;\n            }\n        }\n\n        .color-preset-box {\n            display: block;\n            border: 2px solid @border-color;\n            background: @input-bg;\n            border-radius: 10px;\n\n            .mode-image {\n                display: block;\n                border-bottom: 1px solid @border-color;\n                position: relative;\n\n                &:before {\n                    position: absolute;\n                    left: 17px;\n                }\n            }\n        }\n    }\n\n    .palette-show-custom {\n        position: relative;\n        border: 1px dashed @dropdown-trigger-border;\n        border-radius: 5px;\n        background: @dropdown-trigger-bg;\n        display: inline-block;\n\n        > a {\n            color: @dropdown-trigger-color;\n            text-align: center;\n            text-decoration: none;\n            padding: 7px 15px;\n            font-weight: normal;\n            font-size: @font-size-base;\n            display: block;\n\n            > i {\n                margin-right: 4px;\n                margin-left: -2px;\n                position: relative;\n                top: 1px;\n            }\n        }\n\n        &:hover, &:focus {\n            background-color: @dropdown-hover-bg;\n            border-color: transparent;\n\n            > a, > a > i {\n                color: @dropdown-hover-color;\n            }\n        }\n    }\n\n    .preview-placeholder {\n        position: relative;\n        height: @preview-height;\n\n        > .p-header {\n            display: flex;\n            height: @preview-header;\n\n            border-top-left-radius: 8px;\n            border-top-right-radius: 8px;\n            background: var(--oc-mainnav-bg);\n\n            > .p-nav {\n                flex-grow: 1;\n\n                position: relative;\n                padding-top: 2px;\n\n                > .p-item {\n                    position: relative;\n                    top: 3px;\n                    float: left;\n\n                    opacity: .5;\n\n                    &.is-active {\n                        opacity: 1;\n                    }\n\n                    > * {\n                        background: var(--oc-mainnav-color);\n                        display: inline-block;\n                    }\n\n                    > .p-icon {\n                        border-radius: 2px;\n                        height: 9px;\n                        width: 9px;\n                        margin-left: 12px;\n                    }\n                    > .p-text {\n                        border-radius: 4px;\n                        height: 4px;\n                        width: 20px;\n                        position: relative;\n                        top: -2px;\n                    }\n\n                    &:nth-child(1) {\n                        > .p-icon {\n                            margin-left: 7px;\n                        }\n                    }\n\n                    &:nth-child(2) {\n                        > .p-text {\n                            width: 28px;\n                        }\n                    }\n                    &:nth-child(3) {\n                        > .p-text {\n                            width: 15px;\n                        }\n                    }\n                }\n            }\n\n            > .p-controlpanel {\n                width: 30px;\n                position: relative;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n\n                > .p-avatar {\n                    border-radius: 10px;\n                    height: 10px;\n                    width: 10px;\n                    background: #ccc;\n                    margin: 0 2px;\n                }\n            }\n        }\n\n        > .p-sidebar {\n            height: @preview-height - @preview-header;\n            width: @preview-sidebar;\n            background: var(--oc-sidebar-bg);\n            position: relative;\n            float: left;\n\n            > .p-link {\n                display: block;\n                > * {\n                    position: relative;\n                    float: left;\n                    background: var(--oc-sidebar-color);\n                }\n\n                height: 10px;\n                padding-left: 8px;\n                width: @preview-sidebar;\n                margin-top: 5px;\n\n                &.is-active {\n                    background: var(--oc-sidebar-active-bg);\n                    border-top-right-radius: 3px;\n                    border-bottom-right-radius: 3px;\n                    width: 38px;\n\n                    > * {\n                        background: var(--oc-sidebar-active-color);\n                    }\n                }\n\n                > .p-icon {\n                    border-radius: 2px;\n                    height: 5px;\n                    width: 5px;\n                    top: 2px;\n                }\n                > .p-text {\n                    border-radius: 4px;\n                    height: 3px;\n                    width: 18px;\n                    margin-left: 3px;\n                    top: 3px;\n                }\n\n                &:nth-child(2) {\n                    > .p-text {\n                        width: 28px;\n                    }\n                }\n                &:nth-child(3) {\n                    > .p-text {\n                        width: 15px;\n                    }\n                }\n            }\n        }\n\n        > .p-content {\n            background: var(--bs-body-bg);\n            margin-left: @preview-sidebar;\n            height: @preview-height - @preview-header;\n            display: block;\n            padding: 6px;\n            display: flex;\n            flex-direction: column;\n\n            > .p-form {\n                flex-grow: 1;\n\n                .p-input {\n                    display: block;\n                    background: var(--oc-form-control-bg);\n                    border: 1px solid var(--bs-border-color);\n                    height: 8px;\n                    border-radius: 3px;\n                    margin-bottom: 3px;\n\n                    &.span-left,\n                    &.span-right {\n                        width: 48%;\n                    }\n\n                    &.span-right {\n                        float: right;\n                    }\n\n                    &.size-medium {\n                        height: 20px;\n                    }\n                }\n            }\n\n            > .p-buttons {\n                height: 14px;\n\n                > .p-button {\n                    background: var(--bs-secondary);\n                    position: relative;\n                    float: left;\n                    width: 24px;\n                    height: 7px;\n                    margin-top: 6px;\n                    margin-right: 3px;\n                    border-radius: 2px;\n\n                    &.is-primary {\n                        background: var(--bs-primary);\n                    }\n                }\n            }\n        }\n    }\n\n}"
  },
  {
    "path": "modules/backend/formwidgets/paletteeditor/partials/_paletteeditor.php",
    "content": "<?php\n    $isCustomSelected = $presetValue == 'custom';\n?>\n<div\n    id=\"<?= $this->formField->getId() ?>\"\n    class=\"field-paletteeditor\"\n    data-control=\"paletteeditor\"\n    data-color-mode-selector=\"#<?= $colorModeField->getId() ?>\"\n    <?= $this->formField->getAttributes() ?>>\n\n    <!-- Passable fields -->\n    <input type=\"hidden\" name=\"PaletteEditor[color_mode]\" value=\"<?= e($colorModeValue) ?>\" data-palette-color-mode />\n\n    <div class=\"paletteeditor-preset-selection\">\n        <?= $this->makePartial('preset_selection') ?>\n    </div>\n\n    <?php if (!$isCustomSelected): ?>\n        <div data-custom-palette-button>\n            <div class=\"field-horizontalrule my-4\">\n                <hr />\n            </div>\n\n            <div class=\"palette-show-custom\">\n                <a href=\"javascript:;\">\n                    <i class=\"icon-magic-wand\"></i>\n                    <?= __(\"Create a Custom Palette\") ?>\n                </a>\n            </div>\n        </div>\n    <?php endif ?>\n\n    <div class=\"palette-custom-form pt-3\" style=\"<?= $isCustomSelected ? '' : 'display: none' ?>\" data-custom-palette>\n        <div class=\"field-section mb-3\">\n            <h4><?= __(\"Custom Palette\") ?></h4>\n        </div>\n        <?= $this->colorsFormWidget->render(['useContainer' => false]) ?>\n    </div>\n\n    <style data-palette-stylesheet></style>\n</div>\n<script>\n    window.backendPaletteEditorFormWidgetPresetDefinitions = <?= json_encode($this->getPresetDefinitions()) ?>;\n</script>\n"
  },
  {
    "path": "modules/backend/formwidgets/paletteeditor/partials/_preset_preview.php",
    "content": "<div class=\"preview-placeholder\" preview-preset=\"<?= e($preset) ?>\">\n    <span class=\"p-header\">\n        <span class=\"p-nav\">\n            <span class=\"p-item is-active\">\n                <span class=\"p-icon\"></span>\n                <span class=\"p-text\"></span>\n            </span>\n            <span class=\"p-item\">\n                <span class=\"p-icon\"></span>\n                <span class=\"p-text\"></span>\n            </span>\n            <span class=\"p-item\">\n                <span class=\"p-icon\"></span>\n                <span class=\"p-text\"></span>\n            </span>\n        </span>\n        <span class=\"p-controlpanel\">\n            <span class=\"p-avatar\"></span>\n        </span>\n    </span>\n    <span class=\"p-sidebar\">\n        <span class=\"p-link is-active\">\n            <span class=\"p-icon\"></span>\n            <span class=\"p-text\"></span>\n        </span>\n        <span class=\"p-link\">\n            <span class=\"p-icon\"></span>\n            <span class=\"p-text\"></span>\n        </span>\n        <span class=\"p-link\">\n            <span class=\"p-icon\"></span>\n            <span class=\"p-text\"></span>\n        </span>\n        <span class=\"p-link\">\n            <span class=\"p-icon\"></span>\n            <span class=\"p-text\"></span>\n        </span>\n    </span>\n    <span class=\"p-content\">\n        <span class=\"p-form\">\n            <span class=\"p-input span-right\"></span>\n            <span class=\"p-input span-left\"></span>\n            <span class=\"p-input\"></span>\n            <span class=\"p-input size-medium\"></span>\n        </span>\n        <span class=\"p-buttons\">\n            <span class=\"p-button is-primary\"></span>\n            <span class=\"p-button\"></span>\n        </span>\n    </span>\n</div>\n<style>\n[data-bs-theme=\"light\"] [preview-preset=\"<?= e($preset) ?>\"] {\n    --bs-primary: <?= $vars['brand-primary'] ?>;\n    --bs-secondary: <?= $vars['brand-secondary'] ?>;\n    --oc-selection: <?= $vars['brand-selection'] ?>;\n\n    --oc-mainnav-color: <?= $vars['brand-mainnav-color'] ?>;\n    --oc-mainnav-bg: <?= $vars['brand-mainnav-bg'] ?>;\n\n    --oc-sidebar-color: <?= $vars['brand-sidebar-color'] ?>;\n    --oc-sidebar-bg: <?= $vars['brand-sidebar-bg'] ?>;\n    --oc-sidebar-active-color: <?= $vars['brand-sidebar-active-color'] ?>;\n    --oc-sidebar-active-bg: <?= $vars['brand-sidebar-active-bg'] ?>;\n    --oc-sidebar-hover-bg: <?= $vars['brand-sidebar-hover-bg'] ?>;\n}\n[data-bs-theme=\"dark\"] [preview-preset=\"<?= e($preset) ?>\"] {\n    --bs-primary: <?= $vars['brand-primary-dark'] ?>;\n    --bs-secondary: <?= $vars['brand-secondary-dark'] ?>;\n    --oc-selection: <?= $vars['brand-selection-dark'] ?>;\n\n    --oc-mainnav-color: <?= $vars['brand-mainnav-color-dark'] ?>;\n    --oc-mainnav-bg: <?= $vars['brand-mainnav-bg-dark'] ?>;\n\n    --oc-sidebar-color: <?= $vars['brand-sidebar-color-dark'] ?>;\n    --oc-sidebar-bg: <?= $vars['brand-sidebar-bg-dark'] ?>;\n    --oc-sidebar-active-color: <?= $vars['brand-sidebar-active-color-dark'] ?>;\n    --oc-sidebar-active-bg: <?= $vars['brand-sidebar-active-bg-dark'] ?>;\n    --oc-sidebar-hover-bg: <?= $vars['brand-sidebar-hover-bg-dark'] ?>;\n}\n</style>\n"
  },
  {
    "path": "modules/backend/formwidgets/paletteeditor/partials/_preset_selection.php",
    "content": "<?php\n    $options = $this->getPaletteOptions();\n?>\n<select name=\"<?= $field->getName() ?>\" class=\"oc-hide\" data-palette-preset-selection>\n    <?php foreach ($options as $code => $label): ?>\n        <option <?= $presetValue == $code ? 'selected=\"selected\"' : '' ?> value=\"<?= $code ?>\"><?= e($label) ?></option>\n    <?php endforeach ?>\n    <option <?= $presetValue == 'custom' ? 'selected=\"selected\"' : '' ?> value=\"custom\">— Custom —</option>\n</select>\n\n<div class=\"control-simplelist color-preset-selector is-selectable-box is-flush\">\n    <ul>\n        <?php foreach ($this->getPaletteDefinitions() as $code => $info): ?>\n            <li class=\"<?= $presetValue == $code ? 'active\"' : '' ?>\" data-color-preset=\"<?= e($code) ?>\">\n                <a href=\"javascript:;\">\n                    <div class=\"color-preset-box\">\n                        <div class=\"mode-image\">\n                            <?= $this->makePartial('preset_preview', [\n                                'preset' => $code,\n                                'vars' => $this->getPaletteStyleVarsFor($code, 'light')\n                                + $this->getPaletteStyleVarsFor($code, 'dark')\n                            ]) ?>\n                        </div>\n                        <h5 class=\"heading\">\n                            <?= e(__($info['name'] ?? '???')) ?>\n                        </h5>\n                    </div>\n                </a>\n            </li>\n        <?php endforeach ?>\n    </ul>\n</div>\n\n<script>\n    $(document).on('click', '[data-color-preset]', function() {\n        backendBrandSettingSetColorPreset($(this).data('color-preset'));\n    });\n\n    $(document).on('change', '[data-palette-preset-selection]', function() {\n        if ($(this).val() === 'custom') {\n            $('[data-color-preset]').removeClass('active');\n        }\n    });\n\n    function backendBrandSettingSetColorPreset(preset) {\n        $('[data-color-preset]').removeClass('active');\n        $('[data-color-preset=\"'+preset+'\"]').addClass('active');\n\n        var $element = document.querySelector('#<?= $field->getId() ?> [data-palette-preset-selection]');\n        if ($element) {\n            $element.value = preset;\n            oc.Events.dispatch('change', { target: $element });\n        }\n    }\n</script>\n"
  },
  {
    "path": "modules/backend/formwidgets/paletteeditor/partials/fields_colors.yaml",
    "content": "fields:\n    palette[primary]:\n        label: Primary Color\n        type: colorpicker\n        showInput: true\n        span: row\n        spanClass: col-4\n\n    palette[secondary]:\n        label: Secondary Color\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[selection]:\n        label: Selection Color\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[link_color]:\n        label: Link Color\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    _section_mainnav:\n        type: ruler\n\n    palette[mainnav_color]:\n        label: Nav Text\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[mainnav_bg]:\n        label: Nav Background\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    _section_sidebar:\n        type: ruler\n\n    palette[sidebar_color]:\n        label: Sidebar Text\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[sidebar_bg]:\n        label: Sidebar Background\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[sidebar_active_color]:\n        label: Sidebar Active Text\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[sidebar_active_bg]:\n        label: Sidebar Active Background\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[sidebar_hover_bg]:\n        label: Sidebar Hover Background\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    _section_settings:\n        type: ruler\n\n    palette[settings_color]:\n        label: Settings Text\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[settings_bg]:\n        label: Settings Background\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[settings_item]:\n        label: Settings Item Background\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[settings_active_color]:\n        label: Settings Active Color\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[settings_active_bg]:\n        label: Settings Active Background\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n\n    palette[settings_hover_bg]:\n        label: Settings Hover Background\n        type: colorpicker\n        availableColors: false\n        span: row\n        spanClass: col-4\n"
  },
  {
    "path": "modules/backend/formwidgets/permissioneditor/assets/css/permissioneditor.css",
    "content": ".permissioneditor{background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:4px;position:relative}.permissioneditor.control-disabled .permissions-overlay{background:rgba(0,0,0,.05);cursor:not-allowed;height:100%;left:0;position:absolute;top:0;width:100%}.permissioneditor.control-disabled>ul{opacity:.75}.permissioneditor li.permission-section .section-content{color:var(--bs-heading-color);display:flex;font-weight:400}.permissioneditor li.permission-section .tab-title{font-size:14px;font-weight:600;padding:7px 1rem}.permissioneditor li.permission-section .tab-controls{flex-grow:1;font-size:0;padding:3px;text-align:right;white-space:nowrap}.permissioneditor li.permission-item .item-content{display:flex;padding:.6rem .4rem}.permissioneditor li.permission-item .item-content:hover{background-color:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.permissioneditor li.permission-item .item-content:hover.item-name{color:var(--bs-table-hover-color)!important}.permissioneditor li.permission-item .item-value{padding-left:.5rem;padding-right:.5rem;white-space:nowrap}.permissioneditor li.permission-item .item-value .form-check-input{margin-left:.1rem;margin-right:.1rem}.permissioneditor li.permission-item .item-name{color:var(--bs-secondary-color);cursor:pointer;width:100%}.permissioneditor p.comment{margin-bottom:0;margin-top:5px}.permissioneditor p.comment:empty{display:none}.permissioneditor .form-check-input[type=radio][data-radio-color=green]:checked{background-color:var(--bs-success);border-color:var(--bs-success)}.permissioneditor .form-check-input[type=radio][data-radio-color=red]:checked{background-color:var(--bs-danger);border-color:var(--bs-danger)}.permissioneditor>ul{list-style:none;margin:0;padding:0;width:100%}.permissioneditor>ul>li{border-bottom:1px solid var(--oc-primary-border)}.permissioneditor>ul>li:last-child{border-bottom:none}.permissioneditor>ul>li.permission-item{border-bottom-color:transparent;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:top}.permissioneditor>ul>li.permission-item ul.child-items{list-style:none;padding-left:2.2rem}.permissioneditor>ul>li.permission-item ul.child-items .item-content{margin-bottom:-.25rem;margin-top:-.25rem}.permissioneditor>ul>li.permission-item ul.child-items .item-content:before{color:rgba(var(--bs-body-color-rgb),.6);content:\"└─\";font-size:12px;position:relative;top:1px}.permissioneditor>ul>li.permission-item>ul.child-items{padding-bottom:.25rem;padding-left:.8rem}.permissioneditor li.disabled ul.child-items *{cursor:not-allowed}.permissioneditor li.disabled ul.child-items>li>.item-content:before{color:rgba(var(--bs-body-color-rgb),.2)}.permissioneditor li.disabled>.item-content>.item-name{color:#aaa}\n"
  },
  {
    "path": "modules/backend/formwidgets/permissioneditor/assets/js/permissioneditor.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\n\n/*\n * Permission Editor form field control\n *\n * Data attributes:\n * - data-control=\"permissioneditor\" - enables the permission editor plugin\n *\n * JavaScript API:\n * oc.fetchControl(element, 'permissioneditor')\n */\nregisterControl('permissioneditor', class extends ControlBase {\n    init() {\n        this.$el = $(this.element);\n    }\n\n    connect() {\n        this.listen('click', '[data-field-permission-all]', this.onPermissionAllClick);\n        this.listen('click', '[data-field-permission-none]', this.onPermissionNoneClick);\n        this.listen('click', '[data-field-permission-toggle]', this.onPermissionToggleClick);\n        this.listen('click', 'li.permission-item label.item-name', this.onPermissionNameClick);\n        this.listen('change', 'li.mode-checkbox input[type=checkbox]', this.renderViewState);\n        this.listen('change', 'li.mode-radio input[type=radio]', this.renderViewState);\n\n        this.renderViewState();\n    }\n\n    disconnect() {\n        this.$el = null;\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    renderViewState() {\n        this.evalDisabledStateForAll();\n        this.evalNestingOptions();\n        this.evalSelectionStateForAll();\n    }\n\n    evalDisabledStateForAll() {\n        var self = this;\n        $('li', this.$el).each(function() {\n            self.evalDisabledState($(this));\n        });\n    }\n\n    evalDisabledState($item) {\n        var isDisabled;\n\n        if ($item.hasClass('mode-checkbox')) {\n            isDisabled = !$('> .item-content > .item-value > input[type=checkbox]', $item).is(':checked');\n        }\n        else {\n            isDisabled = $('> .item-content > .item-value > input[type=radio][value=-1]', $item).is(':checked');\n        }\n\n        $item.toggleClass('disabled', isDisabled);\n    }\n\n    evalNestingOptions($items) {\n        if (!$items) {\n            $items = $('> ul > li', this.$el);\n        }\n\n        var self = this;\n        $items.each(function() {\n            var $item = $(this);\n\n            if (!$item.hasClass('disabled')) {\n                $('> ul > li > .item-content > .item-value > input', $item)\n                    .prop('readonly', false);\n            }\n            else if ($item.hasClass('mode-checkbox')) {\n                $('> ul > li > .item-content > .item-value > input', $item)\n                    .prop('readonly', true)\n                    .prop('checked', false)\n                    .closest('li').addClass('disabled');\n            }\n            else if ($item.hasClass('mode-radio')) {\n                $('> ul > li > .item-content > .item-value > input', $item)\n                    .prop('readonly', true)\n                    .prop('checked', false);\n\n                $('> ul > li > .item-content > .item-value > input[value=-1]', $item)\n                    .prop('checked', true)\n                    .closest('li').addClass('disabled');\n            }\n\n            self.evalNestingOptions($('> ul > li', $item));\n        });\n    }\n\n    evalSelectionStateForAll(ev) {\n        var self = this;\n        $('li.permission-section', this.$el).each(function() {\n            self.evalSelectionState(this);\n        });\n    }\n\n    evalSelectionState(el) {\n        var $header = $(el),\n            $checkNone = $('[data-field-permission-none]', $header),\n            $checkAll = $('[data-field-permission-all]', $header);\n\n        if (!$checkAll.length || !$checkNone.length) {\n            return;\n        }\n\n        $checkAll.show();\n        $checkNone.hide();\n\n        $header.nextUntil('li.permission-section').each(function() {\n            var $row = $(this);\n            if (!$row.hasClass('disabled')) {\n                $checkNone.show();\n                $checkAll.hide();\n                return false;\n            }\n        });\n    }\n\n    onPermissionAllClick(ev) {\n        var self = this,\n            $header = $(ev.target).closest('li');\n\n        $header.nextUntil('li.permission-section').each(function() {\n            var $row = $(this);\n            self.onPermissionNameClick({ target: $row.get(0) }, true);\n\n            // Children\n            $('li', this).each(function() {\n                self.onPermissionNameClick({ target: this }, true);\n            });\n        });\n    }\n\n    onPermissionNoneClick(ev) {\n        var self = this,\n            $header = $(ev.target).closest('li');\n\n        $header.nextUntil('li.permission-section').each(function() {\n            var $row = $(this);\n            self.onPermissionNameClick({ target: $row.get(0) }, false);\n\n            // Children\n            $('li', this).each(function() {\n                self.onPermissionNameClick({ target: this }, false);\n            });\n        });\n    }\n\n    onPermissionToggleClick(ev) {\n        var self = this,\n            $header = $(ev.target).closest('li'),\n            $radios = $header.next().find('> .item-content > .item-value > input[type=radio]'),\n            nextIndex = this.findNextIndexFromRadio($radios);\n\n        $header.nextUntil('li.permission-section').each(function() {\n            var $row = $(this);\n            self.onPermissionNameClick({ target: $row.get(0) }, nextIndex);\n\n            // Children\n            $('li', this).each(function() {\n                self.onPermissionNameClick({ target: this }, nextIndex);\n            });\n        });\n    }\n\n    findNextIndexFromRadio($radios) {\n        var nextIndex = 0;\n\n        for (var i=2; i>=0; i--) {\n            if ($radios.get(i).checked) {\n                nextIndex = i + 1;\n                break;\n            }\n        }\n\n        if (nextIndex > 2) {\n            nextIndex = 0;\n        }\n\n        return nextIndex;\n    }\n\n    onPermissionNameClick(ev, isChecked) {\n        var $row = $(ev.target).closest('li'),\n            $checkbox = $row.find('> .item-content > .item-value > input[type=checkbox]');\n\n        if ($checkbox.length) {\n            if (isChecked !== undefined) {\n                $checkbox.prop('checked', isChecked);\n                this.renderViewState();\n            }\n            else {\n                $checkbox.trigger('click');\n            }\n        }\n        else {\n            var $radios = $row.find('> .item-content > .item-value > input[type=radio]');\n            if ($radios.length != 3) {\n                return;\n            }\n\n            if (isChecked !== undefined) {\n                $($radios.get(isChecked)).prop('checked', true);\n                this.renderViewState();\n            }\n            else {\n                var nextIndex = this.findNextIndexFromRadio($radios);\n                $($radios.get(nextIndex)).trigger('click');\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/permissioneditor/assets/less/permissioneditor.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n@color-permissioneditor-section-border: @primary-border;\n@color-permissioneditor-permission-border: @primary-border;\n\n.permissioneditor {\n    position: relative;\n    border-radius: @border-radius-base;\n    background: @input-bg;\n    border: 1px solid @input-border;\n\n    &.control-disabled {\n        .permissions-overlay {\n            position: absolute;\n            left: 0;\n            top: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0,0,0,.05);\n            cursor: not-allowed;\n        }\n\n        > ul {\n            opacity: .75;\n        }\n    }\n\n    li.permission-section {\n        .section-content {\n            color: @heading-color;\n            font-weight: normal;\n            display: flex;\n        }\n\n        .tab-title {\n            font-size: @font-size-base;\n            font-weight: 600;\n            padding: 7px 1rem;\n        }\n\n        .tab-controls {\n            padding: 3px;\n            font-size: 0;\n            white-space: nowrap;\n            text-align: right;\n            flex-grow: 1;\n        }\n    }\n\n    li.permission-item {\n        .item-content {\n            display: flex;\n            padding: .6rem .4rem;\n\n            &:hover {\n                color: var(--bs-table-hover-color);\n                background-color: var(--bs-table-hover-bg);\n\n                &.item-name {\n                    color: var(--bs-table-hover-color) !important;\n                }\n            }\n        }\n\n        .item-value {\n            white-space: nowrap;\n            padding-left: .5rem;\n            padding-right: .5rem;\n\n            .form-check-input {\n                margin-left: .1rem;\n                margin-right: .1rem;\n            }\n        }\n\n        .item-name {\n            cursor: pointer;\n            color: @secondary-color;\n            width: 100%;\n        }\n    }\n\n    p.comment {\n        margin-top: 5px;\n        margin-bottom: 0;\n\n        &:empty {\n            display: none;\n        }\n    }\n\n    .form-check-input {\n        &[type=radio][data-radio-color=green]:checked  {\n            background-color: @brand-success;\n            border-color: @brand-success;\n        }\n\n        &[type=radio][data-radio-color=red]:checked  {\n            background-color: @brand-danger;\n            border-color: @brand-danger;\n        }\n    }\n\n    > ul {\n        list-style: none;\n        padding: 0;\n        margin: 0;\n        width: 100%;\n\n        > li {\n            border-bottom: 1px solid @color-permissioneditor-section-border;\n\n            &:last-child {\n                border-bottom: none;\n            }\n        }\n\n        > li.permission-item {\n            vertical-align: top;\n            border-bottom-color: transparent;\n            user-select: none;\n\n            ul.child-items {\n                list-style: none;\n                padding-left: 2.2rem;\n\n                .item-content {\n                    margin-top: -.25rem;\n                    margin-bottom: -.25rem;\n\n                    &:before {\n                        content: \"└─\";\n                        font-size: 12px;\n                        color: rgba(var(--bs-body-color-rgb), 0.6);\n                        position: relative;\n                        top: 1px;\n                    }\n                }\n            }\n\n            // First set of children\n            > ul.child-items {\n                padding-bottom: .25rem;\n                padding-left: .8rem;\n            }\n        }\n    }\n\n    li.disabled {\n        ul.child-items * {\n            cursor: not-allowed;\n        }\n\n        ul.child-items > li > .item-content:before {\n            color: rgba(var(--bs-body-color-rgb), 0.2);\n        }\n\n        > .item-content > .item-name {\n            color: #AAA;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/permissioneditor/partials/_permission_item.php",
    "content": "<?php\n    $checkboxMode = !($this->mode === 'radio');\n\n    switch ($this->mode) {\n        case 'radio':\n            $permissionValue = array_key_exists($permission->code, $permissionsData)\n                ? $permissionsData[$permission->code]\n                : 0;\n            break;\n        case 'switch':\n            $isChecked = !((int) @$permissionsData[$permission->code] === -1);\n            break;\n        case 'checkbox':\n        default:\n            $isChecked = array_key_exists($permission->code, $permissionsData);\n            break;\n    }\n?>\n<li class=\"permission-item\n    <?= $checkboxMode ? 'mode-checkbox' : 'mode-radio' ?>\n    <?= $checkboxMode && !$isChecked ? 'disabled' : '' ?>\n    <?= !$checkboxMode && $permissionValue === -1 ? 'disabled' : '' ?>\n\">\n    <div class=\"item-content\">\n        <?php if ($this->mode === 'radio'): ?>\n            <div class=\"item-value\">\n                <input\n                    class=\"form-check-input\"\n                    name=\"<?= e($baseFieldName) ?>[<?= e($permission->code) ?>]\"\n                    value=\"1\"\n                    type=\"radio\"\n                    <?= $permissionValue == 1 ? 'checked=\"checked\"' : '' ?>\n                    data-radio-color=\"green\"\n                    title=\"<?= e(trans('backend::lang.user.allow')) ?>\"\n                />\n                <input\n                    class=\"form-check-input\"\n                    name=\"<?= e($baseFieldName) ?>[<?= e($permission->code) ?>]\"\n                    value=\"0\"\n                    <?= $permissionValue == 0 ? 'checked=\"checked\"' : '' ?>\n                    type=\"radio\"\n                    title=\"<?= e(trans('backend::lang.user.inherit')) ?>\"\n                />\n                <input\n                    class=\"form-check-input\"\n                    name=\"<?= e($baseFieldName) ?>[<?= e($permission->code) ?>]\"\n                    value=\"-1\"\n                    <?= $permissionValue == -1 ? 'checked=\"checked\"' : '' ?>\n                    type=\"radio\"\n                    data-radio-color=\"red\"\n                    title=\"<?= e(trans('backend::lang.user.deny')) ?>\"\n                />\n            </div>\n        <?php elseif ($this->mode === 'switch'): ?>\n            <div class=\"item-value\">\n                <div class=\"form-check form-switch\">\n                    <input\n                        type=\"hidden\"\n                        name=\"<?= e($baseFieldName) ?>[<?= e($permission->code) ?>]\"\n                        value=\"-1\"\n                    >\n                    <input\n                        class=\"form-check-input\"\n                        name=\"<?= e($baseFieldName) ?>[<?= e($permission->code) ?>]\"\n                        value=\"1\"\n                        type=\"checkbox\"\n                        <?= $isChecked ? 'checked=\"checked\"' : '' ?>\n                    >\n                </div>\n            </div>\n        <?php else: ?>\n            <div class=\"item-value\">\n                <input\n                    type=\"hidden\"\n                    name=\"<?= e($baseFieldName) ?>[<?= e($permission->code) ?>]\"\n                    value=\"0\"\n                >\n                <input\n                    class=\"form-check-input\"\n                    name=\"<?= e($baseFieldName) ?>[<?= e($permission->code) ?>]\"\n                    value=\"1\"\n                    type=\"checkbox\"\n                    <?= $isChecked ? 'checked=\"checked\"' : '' ?>\n                    title=\"<?= e(trans('backend::lang.user.allow')) ?>\"\n                />\n            </div>\n        <?php endif ?>\n\n        <label class=\"item-name\">\n            <?= e(__($permission->label)) ?>\n            <?php if ($permission->comment): ?>\n                <i class=\"icon-info-circle\" title=\"<?= e(__($permission->comment)) ?>\" data-bs-toggle=\"tooltip\"></i>\n            <?php endif ?>\n        </label>\n    </div>\n    <?php if ($permission->children): ?>\n        <ul class=\"child-items\">\n            <?php foreach ($permission->children as $childPrmission): ?>\n                <?= $this->makePartial('permission_item', ['permission' => $childPrmission]) ?>\n            <?php endforeach ?>\n        </ul>\n    <?php endif ?>\n</li>\n"
  },
  {
    "path": "modules/backend/formwidgets/permissioneditor/partials/_permissioneditor.php",
    "content": "<div\n    class=\"permissioneditor <?= $this->previewMode ? 'control-disabled' : '' ?> mw-950\"\n    data-control=\"permissioneditor\"\n    <?= $field->getAttributes() ?>\n>\n    <?php foreach ($permissions as $tab => $tabPermissions): ?>\n        <ul>\n            <li class=\"permission-section\">\n                <div class=\"section-content\">\n                    <div class=\"tab-title\">\n                        <?= e(__($tab)) ?>\n                    </div>\n\n                    <div class=\"tab-controls\">\n                        <?php if ($this->mode === 'radio'): ?>\n                            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button\" data-field-permission-toggle>\n                                <i class=\"icon-check-multi\"></i>\n                                <span class=\"button-label\"><?= e(trans('backend::lang.form.select_all')) ?></span>\n                            </a>\n                        <?php else: ?>\n                            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button\" data-field-permission-all>\n                                <i class=\"icon-check-multi\"></i>\n                                <span class=\"button-label\"><?= e(trans('backend::lang.form.select_all')) ?></span>\n                            </a>\n\n                            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button\" style=\"display: none\" data-field-permission-none>\n                                <i class=\"icon-eraser\"></i>\n                                <span class=\"button-label\"><?= e(trans('backend::lang.form.select_none')) ?></span>\n                            </a>\n                        <?php endif ?>\n                    </div>\n                </div>\n            </li>\n\n            <?php foreach ($tabPermissions as $permission): ?>\n                <?= $this->makePartial('permission_item', ['permission' => $permission]) ?>\n            <?php endforeach ?>\n        </ul>\n    <?php endforeach ?>\n    <div class=\"permissions-overlay\"></div>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/assets/css/recordfinder.css",
    "content": ".recordfinder-list{border-top:1px solid var(--bs-border-color)}.recordfinder-list .control-list{margin-bottom:1rem}.recordfinder-list .control-list table.table.data{border-bottom:none}.recordfinder-list .control-filter{border-top:none}.recordfinder-list .search-input-container:before{right:12px;top:12px}.field-recordfinder .recordfinder-control-container{background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:4px}.field-recordfinder .recordfinder-control-toolbar{font-size:0;padding:3px}.field-recordfinder .recordfinder-control-toolbar .backend-toolbar-button{white-space:nowrap}.field-recordfinder .recordfinder-control-toolbar .backend-toolbar-button.populated-only{display:none}.field-recordfinder .recordfinder-record-container{position:relative}.field-recordfinder.is-populated.is-multi .recordfinder-control-toolbar{border-bottom:1px solid var(--oc-toolbar-border)}.field-recordfinder.is-preview .recordfinder-control-container{background-color:var(--oc-form-control-disabled-bg)}.field-recordfinder .record-item{display:block;margin:4px;outline:none;position:relative}.field-recordfinder .record-item .record-data-container-inner{position:relative}.field-recordfinder .record-item .icon-container,.field-recordfinder .record-item .info,.field-recordfinder .record-item .info h4,.field-recordfinder .record-item .info h4 p{display:inline-block;vertical-align:top}.field-recordfinder .record-item .icon-container{height:20px;position:absolute;width:20px}.field-recordfinder .record-item .icon-container i{left:3px;position:relative;top:2px}.field-recordfinder .record-item .info{padding-left:26px}.field-recordfinder .record-item .description,.field-recordfinder .record-item .recordname{color:var(--bs-body-color);font-size:14px;margin-bottom:0;word-break:break-all}.field-recordfinder .record-item .description{color:var(--bs-secondary-color);font-size:.9rem}.field-recordfinder.is-single .record-item .record-data-container{padding:4px 3px 3px}.field-recordfinder.is-single .record-item .icon-container{margin-top:1px}.field-recordfinder.is-multi .record-item .record-data-container-inner{padding-top:4px}.field-recordfinder.is-multi .record-item .record-data-container{border-radius:4px;padding:3px}.field-recordfinder.is-multi .record-item .record-data-container:hover{background:var(--oc-toolbar-hover-bg)}.field-recordfinder.is-multi .record-item .icon-container{margin-top:-1px}\n"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/assets/js/recordfinder.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\n\n/*\n * RecordFinder control\n *\n * Data attributes:\n * - data-control=\"recordfinder\" - enables the control on an element\n *\n * JavaScript API:\n * oc.fetchControl(element, 'recordfinder')\n */\nregisterControl('recordfinder', class extends ControlBase {\n    init() {\n        this.$el = $(this.element);\n\n        this.config = Object.assign({\n            refreshHandler: null,\n            dataLocker: null\n        }, this.config);\n    }\n\n    connect() {\n        this.listen('dblclick', this.onDoubleClick);\n    }\n\n    disconnect() {\n        this.$el = null;\n    }\n\n    onDoubleClick(ev) {\n        $('.toolbar-find-button', this.$el).trigger('click');\n    }\n\n    updateRecord(linkEl, recordId) {\n        if (!this.config.dataLocker) {\n            return;\n        }\n\n        // Selector name must be used because by the time success runs\n        // - this.config will be disposed\n        // - $locker element will be replaced\n        var locker = this.config.dataLocker;\n\n        $(locker).val(recordId);\n\n        this.$el.loadIndicator({ opaque: true });\n        this.$el.request(this.config.refreshHandler, {\n            afterUpdate: function() {\n                $(locker).trigger('change');\n            }\n        });\n\n        $(linkEl).closest('.recordfinder-popup').popup('hide');\n    }\n});"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/assets/less/recordfinder.control-ui.less",
    "content": ".field-recordfinder {\n    .recordfinder-control-container {\n        border-radius: 4px;\n        border: 1px solid @input-border;\n        background: @input-bg;\n    }\n\n    .recordfinder-control-toolbar {\n        padding: 3px;\n        font-size: 0;\n\n        .backend-toolbar-button {\n            white-space: nowrap;\n\n            &.populated-only {\n                display: none;\n            }\n        }\n    }\n\n    .recordfinder-record-container {\n        position: relative;\n    }\n\n    &.is-populated.is-multi {\n        .recordfinder-control-toolbar {\n            border-bottom: 1px solid @toolbar-border;\n        }\n    }\n\n    &.is-preview {\n        .recordfinder-control-container {\n            background-color: @input-disabled-bg;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/assets/less/recordfinder.less",
    "content": "@import \"../../../../../backend/assets/less/core/boot.less\";\n\n@import \"recordfinder.list.less\";\n@import \"recordfinder.control-ui.less\";\n\n.field-recordfinder {\n    .record-item {\n        position: relative;\n        outline: none;\n        display: block;\n        margin: 4px;\n\n        .record-data-container-inner {\n            position: relative;\n        }\n\n        .icon-container, .info, .info h4, .info h4 p {\n            vertical-align: top;\n            display: inline-block;\n        }\n\n        .icon-container {\n            width: 20px;\n            height: 20px;\n            position: absolute;\n\n            i {\n                position: relative;\n                top: 2px;\n                left: 3px;\n            }\n        }\n\n        .info {\n            padding-left: 26px;\n        }\n\n        .recordname, .description {\n            color: @input-color;\n            font-size: @font-size-base;\n            word-break: break-all;\n            margin-bottom: 0;\n        }\n\n        .description {\n            font-size: .9rem;\n            color: @secondary-color;\n        }\n    }\n\n    &.is-single {\n        .record-item {\n            .record-data-container {\n                padding: 4px 3px 3px;\n            }\n\n            .icon-container {\n                margin-top: 1px;\n            }\n        }\n    }\n\n    &.is-multi {\n        .record-item {\n            .record-data-container-inner {\n                padding-top: 4px;\n            }\n\n            .record-data-container {\n                padding: 3px;\n                border-radius: @border-radius-base;\n\n                &:hover {\n                    background: @toolbar-focus-bg;\n                }\n            }\n\n            .icon-container {\n                margin-top: -1px;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/assets/less/recordfinder.list.less",
    "content": ".recordfinder-list {\n    border-top: 1px solid @input-border;\n\n    .control-list {\n        margin-bottom: 1rem;\n\n        table.table.data {\n            border-bottom: none;\n        }\n    }\n\n    .control-filter {\n        border-top: none;\n    }\n\n    .search-input-container:before {\n        top: 12px;\n        right: 12px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/partials/_container.php",
    "content": "<?php if ($this->previewMode && !$value): ?>\n\n    <span class=\"form-control\" disabled=\"disabled\">\n        <?= e(trans('backend::lang.form.preview_no_record_message')) ?>\n    </span>\n\n<?php else: ?>\n\n    <div class=\"recordfinder-widget\" id=\"<?= $this->getId('container') ?>\">\n        <?= $this->makePartial('recordfinder') ?>\n    </div>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/partials/_record_multi.php",
    "content": "<?php\n    $previewMode = false;\n    if ($this->previewMode || $field->readOnly) {\n        $previewMode = true;\n    }\n?>\n<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-recordfinder is-multi loading-indicator-container size-input-text <?= $value ? 'is-populated' : '' ?> <?= $previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"recordfinder\"\n    data-refresh-handler=\"<?= $this->getEventHandler('onRefresh') ?>\"\n    data-data-locker=\"#<?= $field->getId() ?>\">\n\n    <div class=\"recordfinder-control-container\">\n        <?php if (!$previewMode): ?>\n            <div class=\"recordfinder-control-toolbar\">\n                <button\n                    class=\"backend-toolbar-button control-button toolbar-find-button\"\n                    data-control=\"popup\"\n                    data-size=\"<?= $popupSize ?? 'huge' ?>\"\n                    data-handler=\"<?= $this->getEventHandler('onFindRecord') ?>\"\n                    data-request-data=\"recordfinder_flag: 1\"\n                    type=\"button\">\n                    <i class=\"icon-common-file-star\"></i>\n                    <?php if ($value): ?>\n                        <?= __(\"Replace\") ?>\n                    <?php else: ?>\n                        <?= __(\"Select\") ?>\n                    <?php endif ?>\n                </button>\n                <?php if ($value): ?>\n                    <button\n                        type=\"button\"\n                        class=\"backend-toolbar-button control-button find-remove-button\"\n                        data-request=\"<?= $this->getEventHandler('onClearRecord') ?>\"\n                        data-request-confirm=\"<?= e(trans('backend::lang.form.action_confirm')) ?>\"\n                        data-request-success=\"$('#<?= $field->getId() ?>').val('').trigger('change')\"\n                        aria-label=\"Remove\">\n                        <i class=\"icon-common-file-remove\"></i>\n                        <?= __(\"Clear\") ?>\n                    </button>\n                <?php endif ?>\n            </div>\n        <?php endif ?>\n\n        <div class=\"recordfinder-record-container\">\n            <?php if ($value): ?>\n                <div class=\"record-item\">\n                    <div class=\"record-data-container\">\n                        <div class=\"record-data-container-inner\">\n                            <div class=\"icon-container\">\n                                <i class=\"icon-chain\"></i>\n                            </div>\n                            <div class=\"info\">\n                                <h4 class=\"recordname\"><?= e($nameValue) ?: 'Undefined' ?></h4>\n                                <?php if ($descriptionValue): ?>\n                                    <p class=\"description\"><?= e($descriptionValue) ?></p>\n                                <?php endif ?>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            <?php endif ?>\n        </div>\n    </div>\n\n    <input\n        type=\"hidden\"\n        name=\"<?= $field->getName() ?>\"\n        id=\"<?= $field->getId() ?>\"\n        value=\"<?= e($value) ?>\"\n        />\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/partials/_record_single.php",
    "content": "<?php\n    $previewMode = false;\n    if ($this->previewMode || $field->readOnly) {\n        $previewMode = true;\n    }\n?>\n<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-recordfinder is-single loading-indicator-container size-input-text <?= $value ? 'is-populated' : '' ?> <?= $previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"recordfinder\"\n    data-refresh-handler=\"<?= $this->getEventHandler('onRefresh') ?>\"\n    data-data-locker=\"#<?= $field->getId() ?>\">\n\n    <div class=\"recordfinder-control-container d-flex\">\n        <?php if ($value): ?>\n            <div class=\"recordfinder-record-container me-auto\">\n                <div class=\"record-item\">\n                    <div class=\"record-data-container\">\n                        <div class=\"record-data-container-inner\">\n                            <div class=\"icon-container\">\n                                <i class=\"icon-chain\"></i>\n                            </div>\n                            <div class=\"info\">\n                                <span class=\"recordname\"><?= e($nameValue) ?: 'Undefined' ?></span>\n                                <?php if ($descriptionValue): ?>\n                                    <span class=\"description\"> - <?= e($descriptionValue) ?></span>\n                                <?php endif ?>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        <?php endif ?>\n        <?php if (!$previewMode): ?>\n            <div class=\"recordfinder-control-toolbar\">\n                <button\n                    class=\"backend-toolbar-button control-button toolbar-find-button\"\n                    data-control=\"popup\"\n                    data-size=\"<?= $popupSize ?? 'huge' ?>\"\n                    data-handler=\"<?= $this->getEventHandler('onFindRecord') ?>\"\n                    data-request-data=\"recordfinder_flag: 1\"\n                    type=\"button\">\n                    <i class=\"icon-common-file-star\"></i>\n                    <?php if ($value): ?>\n                        <?= __(\"Replace\") ?>\n                    <?php else: ?>\n                        <?= __(\"Select\") ?>\n                    <?php endif ?>\n                </button>\n                <?php if ($value): ?>\n                    <button\n                        type=\"button\"\n                        class=\"backend-toolbar-button control-button find-remove-button\"\n                        data-request=\"<?= $this->getEventHandler('onClearRecord') ?>\"\n                        data-request-confirm=\"<?= e(trans('backend::lang.form.action_confirm')) ?>\"\n                        data-request-success=\"$('#<?= $field->getId() ?>').val('').trigger('change')\"\n                        aria-label=\"Remove\">\n                        <i class=\"icon-common-file-remove\"></i>\n                        <?= __(\"Clear\") ?>\n                    </button>\n                <?php endif ?>\n            </div>\n        <?php endif ?>\n\n    </div>\n\n    <input\n        type=\"hidden\"\n        name=\"<?= $field->getName() ?>\"\n        id=\"<?= $field->getId() ?>\"\n        value=\"<?= e($value) ?>\"\n    />\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/partials/_recordfinder.php",
    "content": "<?php switch ($displayMode):\n\n    case 'single': ?>\n        <?= $this->makePartial('record_single') ?>\n    <?php break ?>\n\n    <?php case 'multi': ?>\n        <?= $this->makePartial('record_multi') ?>\n    <?php break ?>\n\n<?php endswitch ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/recordfinder/partials/_recordfinder_form.php",
    "content": "<div id=\"<?= $this->getId('popup') ?>\" class=\"recordfinder-popup\">\n    <?= Form::open([\n        'data-request-parent-form' => \"#{$this->getId()}\"\n    ]) ?>\n        <input type=\"hidden\" name=\"recordfinder_flag\" value=\"1\" />\n\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e(__($title)) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n\n        <div class=\"recordfinder-list list-flush\">\n            <?php if ($searchWidget): ?>\n                <?= $searchWidget->render() ?>\n            <?php endif ?>\n            <?php if ($filterWidget): ?>\n                <?= $filterWidget->render() ?>\n            <?php endif ?>\n            <?= $listWidget->render() ?>\n        </div>\n\n        <div class=\"modal-footer\">\n            <button\n                type=\"button\"\n                class=\"btn btn-secondary me-auto\"\n                data-dismiss=\"popup\">\n                <?= __(\"Close\") ?>\n            </button>\n            <?php if ($listWidget->showSetup): ?>\n                <button\n                    class=\"btn btn-circle btn-secondary ms-auto\"\n                    title=\"<?= __(\"List Setup\") ?>\"\n                    data-handler=\"<?= $listWidget->getEventHandler('onLoadSetup') ?>\"\n                    data-control=\"popup\"\n                    type=\"button\">\n                        <i class=\"icon-text-format-ul\"></i>\n                </button>\n            <?php endif ?>\n        </div>\n    <?= Form::close() ?>\n</div>\n\n<script>\n    setTimeout(\n        function(){ $('#<?= $this->getId('popup') ?> input.form-control:first').focus() },\n        310\n    )\n</script>\n"
  },
  {
    "path": "modules/backend/formwidgets/relation/HasQuickCreate.php",
    "content": "<?php namespace Backend\\FormWidgets\\Relation;\n\nuse Db;\nuse Backend\\Widgets\\Form as FormWidget;\n\n/**\n * HasQuickCreate adds the ability to create new related records from\n * a dropdown, opening a popup form to create the record on the fly.\n */\ntrait HasQuickCreate\n{\n    /**\n     * @var mixed quickCreate config for the quick create feature\n     */\n    public $quickCreate;\n\n    /**\n     * @var array quickCreateConfig resolved configuration\n     */\n    protected $quickCreateConfig = [];\n\n    /**\n     * @var FormWidget|null quickCreateFormWidget\n     */\n    protected $quickCreateFormWidget;\n\n    /**\n     * hasQuickCreate returns true if quick create should be active\n     */\n    public function hasQuickCreate(): bool\n    {\n        if (!$this->quickCreate) {\n            return false;\n        }\n\n        if ($this->previewMode || $this->readOnly) {\n            return false;\n        }\n\n        if ($this->useController) {\n            return false;\n        }\n\n        // Only applies to singular relations (dropdown)\n        [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n        $relationType = $model->getRelationType($attribute);\n\n        return in_array($relationType, ['belongsTo', 'hasOne', 'morphOne']);\n    }\n\n    /**\n     * initQuickCreate parses the quickCreate config and prepares the form widget\n     * when processing a quick create request.\n     */\n    protected function initQuickCreate()\n    {\n        if (!$this->hasQuickCreate()) {\n            return;\n        }\n\n        // Parse config: string becomes fields path, object/array is full config\n        if (is_string($this->quickCreate)) {\n            $config = ['fields' => $this->quickCreate];\n        }\n        else {\n            $config = (array) $this->quickCreate;\n        }\n\n        // Resolve :name placeholder from the field label\n        $nameParams = ['name' => __($this->formField->label ?? \"Record\")];\n\n        $this->quickCreateConfig = array_merge([\n            'fields' => null,\n            'optionText' => __(\"- Create New :name -\", $nameParams),\n            'title' => __(\"New :name\", $nameParams),\n            'context' => 'quickcreate',\n            'popupSize' => null,\n        ], $config);\n\n        // Initialize form widget when processing a quick create request\n        if (post('_relation_quick_create')) {\n            $this->quickCreateFormWidget = $this->makeQuickCreateFormWidget();\n            $this->quickCreateFormWidget->bindToController();\n        }\n    }\n\n    /**\n     * makeQuickCreateFormWidget creates the form widget for the popup\n     */\n    protected function makeQuickCreateFormWidget()\n    {\n        $config = $this->makeConfig($this->quickCreateConfig['fields']);\n        $config->model = $this->getRelationModel();\n        $config->alias = $this->alias . 'QuickCreate';\n        $config->context = $this->quickCreateConfig['context'];\n        $config->arrayName = 'QuickCreate';\n\n        return $this->makeWidget(FormWidget::class, $config);\n    }\n\n    /**\n     * addQuickCreateOption prepends the quick create sentinel option to the dropdown\n     */\n    protected function addQuickCreateOption($options)\n    {\n        return ['__quick_create__' => $this->quickCreateConfig['optionText']] + $options;\n    }\n\n    /**\n     * onLoadQuickCreateForm AJAX handler to render the popup form\n     */\n    public function onLoadQuickCreateForm()\n    {\n        $this->vars['quickCreateTitle'] = $this->quickCreateConfig['title'];\n        $this->vars['quickCreateFormWidget'] = $this->quickCreateFormWidget;\n\n        return $this->makePartial('quick_create_form');\n    }\n\n    /**\n     * onQuickCreateRecord AJAX handler to create the new record\n     */\n    public function onQuickCreateRecord()\n    {\n        $saveData = $this->quickCreateFormWidget->getSaveData();\n        $newModel = $this->getRelationModel();\n\n        $modelsToSave = $this->prepareModelsToSave($newModel, $saveData);\n        Db::transaction(function () use ($modelsToSave) {\n            foreach ($modelsToSave as $modelToSave) {\n                $modelToSave->save([\n                    'sessionKey' => $this->quickCreateFormWidget->getSessionKey(),\n                    'propagate' => true\n                ]);\n            }\n        });\n\n        // Set the newly created record as the selected value\n        $this->formField->value = $newModel->getKey();\n\n        $this->prepareVars();\n\n        return ['#' . $this->getId() => $this->makePartial('relation')];\n    }\n\n    /**\n     * loadQuickCreateAssets loads the JS control for quick create\n     */\n    protected function loadQuickCreateAssets()\n    {\n        if (!$this->getConfig('quickCreate')) {\n            return;\n        }\n\n        $this->addJs('js/relation-quick-create.js', ['type' => 'module']);\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/relation/assets/js/relation-quick-create.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\n\nregisterControl('relation-quick-create', class extends ControlBase {\n    init() {\n        this.$el = $(this.element);\n        this.config = Object.assign({\n            handlerLoad: null,\n            quickCreateValue: '__quick_create__',\n            popupSize: null\n        }, this.config);\n        this.previousValue = null;\n    }\n\n    connect() {\n        this.$select = this.$el.find('select').first();\n        this.previousValue = this.$select.val();\n        this.listen('change', 'select', this.onSelectChange);\n    }\n\n    disconnect() {\n        this.$select = null;\n        this.$el = null;\n    }\n\n    onSelectChange() {\n        var value = this.$select.val();\n        if (value !== this.config.quickCreateValue) {\n            this.previousValue = value;\n            return;\n        }\n\n        // Revert dropdown to previous value\n        this.$select.val(this.previousValue);\n        this.$select.trigger('change.select2');\n\n        // Open popup\n        this.$el.popup({\n            handler: this.config.handlerLoad,\n            size: this.config.popupSize || undefined,\n            extraData: { _relation_quick_create: 1 }\n        });\n    }\n});\n"
  },
  {
    "path": "modules/backend/formwidgets/relation/partials/_quick_create_form.php",
    "content": "<div id=\"<?= $this->getId('quickCreatePopup') ?>\">\n    <?= Form::ajax($this->getEventHandler('onQuickCreateRecord'), [\n        'data-popup-load-indicator' => true,\n        'data-request-success' => \"$(this).trigger('close.oc.popup')\",\n    ]) ?>\n        <input type=\"hidden\" name=\"_relation_quick_create\" value=\"1\" />\n\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e(__($quickCreateTitle)) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n\n        <div class=\"modal-body\">\n            <?= $quickCreateFormWidget->render() ?>\n        </div>\n\n        <div class=\"modal-footer\">\n            <button type=\"submit\" class=\"btn btn-primary\">\n                <?= __(\"Create\") ?>\n            </button>\n            <span class=\"btn-text\">\n                <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                <a href=\"javascript:;\" class=\"btn btn-link p-0\" data-dismiss=\"popup\">\n                    <?= __(\"Cancel\") ?>\n                </a>\n            </span>\n        </div>\n    <?= Form::close() ?>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/relation/partials/_relation.php",
    "content": "<div class=\"relation-widget\" id=\"<?= $this->getId() ?>\">\n    <?php if ($this->useController): ?>\n        <?= $this->controller->relationRender($this->getRelationControllerFieldName(), [\n            'readOnlyDefault' => $this->previewMode\n        ] + ($this->readOnly === true ? ['readOnly' => true] : [])) ?>\n    <?php elseif ($this->hasQuickCreate()): ?>\n        <div\n            data-control=\"relation-quick-create\"\n            data-handler-load=\"<?= $this->getEventHandler('onLoadQuickCreateForm') ?>\"\n            data-quick-create-value=\"__quick_create__\"\n            <?php if ($popupSize = $this->quickCreateConfig['popupSize'] ?? null): ?>\n                data-popup-size=\"<?= e($popupSize) ?>\"\n            <?php endif ?>\n        >\n            <?= $this->makePartial('~/modules/backend/widgets/form/partials/_field_'.$field->type.'.php', [\n                'field' => $field\n            ]) ?>\n        </div>\n    <?php else: ?>\n        <?= $this->makePartial('~/modules/backend/widgets/form/partials/_field_'.$field->type.'.php', [\n            'field' => $field\n        ]) ?>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/HasJsonStore.php",
    "content": "<?php namespace Backend\\FormWidgets\\Repeater;\n\n/**\n * HasJsonStore contains logic for related repeater items\n */\ntrait HasJsonStore\n{\n    /**\n     * processItemsForJson processes data and applies it to the form widgets\n     */\n    protected function processItemsForJson()\n    {\n        $currentValue = $this->getLoadValue();\n\n        // Pad current value with minimum items and disable for groups,\n        // which cannot predict their item types\n        if (!$this->useGroups && $this->minItems > 0) {\n            if (!is_array($currentValue)) {\n                $currentValue = [];\n            }\n\n            if (count($currentValue) < $this->minItems) {\n                $currentValue = array_pad($currentValue, $this->minItems, []);\n            }\n        }\n\n        if (!is_array($currentValue)) {\n            return;\n        }\n\n        // Load up the necessary form widgets\n        foreach ($currentValue as $index => $value) {\n            $this->makeItemFormWidget(\n                $index,\n                $this->getGroupCodeFromJson($value)\n            );\n        }\n    }\n\n    /**\n     * processSaveForJson\n     */\n    protected function processSaveForJson($value)\n    {\n        if (!is_array($value) || !$value) {\n            return null;\n        }\n\n        foreach ($value as $index => $data) {\n            if (!isset($this->formWidgets[$index])) {\n                continue;\n            }\n\n            // Give repeated form field widgets an opportunity to process the data.\n            $widget = $this->formWidgets[$index];\n            $value[$index] = $widget->getSaveData();\n\n            if ($this->useGroups) {\n                $this->setGroupCodeOnJson($value[$index], $data[$this->groupKeyFrom] ?? '');\n            }\n        }\n\n        return array_values($value);\n    }\n\n    /**\n     * getGroupCodeFromJson\n     */\n    protected function getGroupCodeFromJson($value)\n    {\n        return array_get($value, $this->groupKeyFrom, null);\n    }\n\n    /**\n     * setGroupCodeOnJson\n     */\n    protected function setGroupCodeOnJson(&$value, $groupCode)\n    {\n        $value[$this->groupKeyFrom] = $groupCode;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/HasRelationStore.php",
    "content": "<?php namespace Backend\\FormWidgets\\Repeater;\n\nuse Backend\\Classes\\FormField;\nuse October\\Rain\\Database\\Model;\nuse October\\Rain\\Exception\\ValidationException;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\n\n/**\n * HasRelationStore contains logic for related repeater items\n */\ntrait HasRelationStore\n{\n    /**\n     * processRelationMode\n     */\n    protected function processRelationMode()\n    {\n        [$model, $attribute] = $this->nearestModelAttribute($this->valueFrom);\n\n        if ($model instanceof Model && $model->hasRelation($attribute)) {\n            $this->useRelation = true;\n        }\n    }\n\n    /**\n     * getModelFromIndex returns the model at a given index\n     * @param int|string $index\n     */\n    protected function getModelFromIndex($index)\n    {\n        return $this->getLoadValueFromRelation()[$index] ?? $this->getRelationModel();\n    }\n\n    /**\n     * getLoadValueFromRelation\n     */\n    protected function getLoadValueFromRelation()\n    {\n        if ($this->relatedRecords !== null) {\n            return $this->relatedRecords;\n        }\n\n        $records = $this->getRelationObject()\n            ->withDeferred($this->getSessionKey())\n            ->get();\n\n        if ($first = $records->first()) {\n            $records = $records->keyBy($first->getKeyName())->all();\n        }\n        else {\n            $records = [];\n        }\n\n        // Store the results locally on the model to make it available to the\n        // RelationController via the initNestedRelation method\n        if ($records) {\n            [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n            $model->setRelation($attribute, $model->newCollection($records));\n        }\n\n        return $this->relatedRecords = $records;\n    }\n\n    /**\n     * getRelationQuery\n     */\n    protected function getRelationQuery()\n    {\n        $query = $this->getRelationModel()->newQuery();\n\n        $this->getRelationObject()->addDefinedConstraintsToQuery($query);\n\n        return $query;\n    }\n\n    /**\n     * createRelationAtIndex prepares an empty model and adds it to the index\n     * @param ?string $groupCode\n     */\n    protected function createRelationAtIndex($groupCode = null, ?array $attributes = null)\n    {\n        $model = $this->getRelationModel();\n\n        if ($attributes !== null) {\n            $model->forceFill($attributes);\n\n            if ($this->useGroups && $groupCode === null) {\n                $groupCode = $this->getGroupCodeFromRelation($model);\n            }\n        }\n\n        if ($this->useGroups) {\n            $this->setGroupCodeOnRelation($model, $groupCode);\n        }\n\n        $model->save(['force' => true]);\n\n        $this->getRelationObject()->add($model, $this->getSessionKey());\n\n        $this->relatedRecords[$model->getKey()] = $model;\n\n        return $model;\n    }\n\n    /**\n     * duplicateRelationAtIndex\n     * @param int|string $fromIndex\n     * @param string $groupCode\n     */\n    protected function duplicateRelationAtIndex($fromIndex, $groupCode = null)\n    {\n        $model = $this->getModelFromIndex($fromIndex)->replicateWithRelations();\n\n        if ($this->useGroups) {\n            $this->setGroupCodeOnRelation($model, $groupCode);\n        }\n\n        $model->save(['force' => true]);\n\n        $this->getRelationObject()->add($model, $this->getSessionKey());\n\n        $this->relatedRecords[$model->getKey()] = $model;\n\n        return $model;\n    }\n\n    /**\n     * deleteRelationAtIndex\n     * @param int|string $index\n     */\n    protected function deleteRelationAtIndex($index)\n    {\n        $model = $this->getModelFromIndex($index);\n        if (!$model->exists) {\n            return;\n        }\n\n        $this->getRelationObject()->remove($model, $this->getSessionKey());\n    }\n\n    /**\n     * processItemsForRelation processes data and applies it to the form widgets\n     */\n    protected function processItemsForRelation()\n    {\n        $currentValue = $this->getLoadValueFromRelation();\n\n        // Apply default values on first load, under very specific conditions\n        if (\n            !$this->model->exists &&\n            !$this->isLoaded &&\n            !$currentValue &&\n            is_array($this->formField->defaults)\n        ) {\n            $currentValue = [];\n            foreach ($this->formField->defaults as $attributes) {\n                if (is_array($attributes)) {\n                    $currentValue[] = $attributes;\n                }\n            }\n        }\n\n        // Pad current value with minimum items and disable for groups,\n        // which cannot predict their item types\n        if (!$this->useGroups && $this->minItems > 0) {\n            if (!is_array($currentValue)) {\n                $currentValue = [];\n            }\n\n            if (count($currentValue) < $this->minItems) {\n                $currentValue = array_pad($currentValue, $this->minItems, []);\n            }\n        }\n\n        if (!is_array($currentValue)) {\n            return;\n        }\n\n        // Load up the necessary form widgets\n        foreach ($currentValue as $value) {\n            if (is_array($value)) {\n                $value = $this->createRelationAtIndex(null, $value);\n            }\n\n            $this->makeItemFormWidget(\n                $value->getKey(),\n                $this->getGroupCodeFromRelation($value)\n            );\n        }\n    }\n\n    /**\n     * processSaveForRelation\n     */\n    protected function processSaveForRelation($value)\n    {\n        if (!is_array($value) || !$value) {\n            return FormField::NO_SAVE_DATA;\n        }\n\n        $sortCount = 0;\n\n        foreach ($value as $index => $data) {\n            if (!isset($this->formWidgets[$index])) {\n                continue;\n            }\n\n            // Give repeated form field widgets an opportunity to process the data.\n            $widget = $this->formWidgets[$index];\n            $saveData = $widget->getSaveData();\n\n            // Save data to the model\n            $model = $widget->getModel();\n\n            $modelsToSave = $this->prepareModelsToSave($model, $saveData);\n\n            if ($this->useGroups) {\n                $this->setGroupCodeOnRelation($model, $data[$this->groupKeyFrom] ?? '');\n            }\n\n            if ($model->isClassInstanceOf(\\October\\Contracts\\Database\\SortableInterface::class)) {\n                $this->processSortOrderForSortable($model, ++$sortCount);\n            }\n\n            foreach ($modelsToSave as $attrChain => $modelToSave) {\n                try {\n                    $modelToSave->save(['sessionKey' => $widget->getSessionKeyWithSuffix()]);\n                }\n                catch (ValidationException $ve) {\n                    $ve->setFieldPrefix(array_merge(\n                        HtmlHelper::nameToArray($this->valueFrom),\n                        [$index],\n                        $attrChain ? explode('.', $attrChain) : []\n                    ));\n                    throw $ve;\n                }\n            }\n        }\n\n        return FormField::NO_SAVE_DATA;\n    }\n\n    /**\n     * processSortOrderForSortable\n     */\n    protected function processSortOrderForSortable($model, $sortOrder)\n    {\n        $orderColumn = $model->getSortOrderColumn();\n\n        $model->$orderColumn = $sortOrder;\n    }\n\n    /**\n     * getGroupCodeFromRelation\n     */\n    protected function getGroupCodeFromRelation($model)\n    {\n        $attrName = $this->groupKeyFrom;\n\n        return $model->$attrName;\n    }\n\n    /**\n     * setGroupCodeOnRelation\n     */\n    protected function setGroupCodeOnRelation($model, $groupCode)\n    {\n        $attrName = $this->groupKeyFrom;\n\n        $model->$attrName = $groupCode;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/assets/css/repeater.css",
    "content": ".field-repeater>ul>li.field-repeater-item{background:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:4px;box-shadow:none;min-height:30px;position:relative}.field-repeater>ul>li.field-repeater-item .field-repeater>ul>li.field-repeater-item{background:var(--bs-body-bg)}.field-repeater>ul>li.field-repeater-item>.repeater-header{background:var(--bs-tertiary-bg);border-bottom:1px solid var(--bs-border-color);border-top-left-radius:4px;border-top-right-radius:4px;display:flex;padding:7px 10px 7px 15px}.field-repeater>ul>li.field-repeater-item>.repeater-header .repeater-item-title{flex-grow:1}.field-repeater>ul>li.field-repeater-item>.repeater-content{padding:10px 15px 0;position:relative}.field-repeater>ul>li.field-repeater-item>.repeater-content:after,.field-repeater>ul>li.field-repeater-item>.repeater-content:before{content:\" \";display:table}.field-repeater>ul>li.field-repeater-item>.repeater-content:after{clear:both}.field-repeater>ul>li.field-repeater-item>.repeater-content .form-group{padding-bottom:10px}.field-repeater>ul>li.field-repeater-item.is-checked{border-color:var(--bs-primary)}.field-repeater>ul>li.field-repeater-item.collapsed>.repeater-header{border-bottom-color:transparent;border-radius:4px}.field-repeater>ul>li.field-repeater-item.collapsed>.repeater-header .repeater-item-checkbox .form-check-input{left:-5px;top:0}.field-repeater>ul>li.field-repeater-item.collapsed>.repeater-content{display:none}.field-repeater.repeater-mode-accordion.is-grouped>ul>li.field-repeater-item>.repeater-header{cursor:pointer}.field-repeater.repeater-mode-accordion.is-grouped>ul>li.field-repeater-item>.repeater-header .repeater-item-checkbox .form-check-input{left:-5px;top:0}.field-repeater.repeater-mode-accordion.is-singular>ul>li.field-repeater-item>.repeater-header{cursor:pointer}.field-repeater.repeater-mode-accordion.is-singular>ul>li.field-repeater-item:not(.collapsed){min-height:95px;padding-right:34px}.field-repeater.repeater-mode-accordion.is-singular>ul>li.field-repeater-item:not(.collapsed)>.repeater-header{padding:5px 3px 5px 5px}.field-repeater.repeater-mode-accordion.is-singular>ul>li.field-repeater-item:not(.collapsed)>.repeater-header .repeater-item-title{display:none;flex-grow:0}.field-repeater.repeater-mode-accordion.is-singular>ul>li.field-repeater-item:not(.collapsed)>.repeater-header .repeater-item-checkbox{flex-grow:1}.field-repeater.repeater-mode-accordion.is-singular>ul>li.field-repeater-item:not(.collapsed)>.repeater-header{border-bottom:none;border-bottom-right-radius:4px;border-left:1px solid var(--bs-border-color);border-top-left-radius:0;bottom:0;flex-direction:column-reverse;position:absolute;right:0;top:0;width:auto}.field-repeater.repeater-mode-accordion.is-singular>ul>li.field-repeater-item:not(.collapsed)>.repeater-header a.repeater-item-handle,.field-repeater.repeater-mode-accordion.is-singular>ul>li.field-repeater-item:not(.collapsed)>.repeater-header a.repeater-item-menu{margin:2px 0}.field-repeater>ul>li.field-repeater-item .repeater-item-collapse a.is-open{display:block}.field-repeater>ul>li.field-repeater-item .repeater-item-collapse a.is-closed,.field-repeater>ul>li.field-repeater-item.collapsed .repeater-item-collapse a.is-open{display:none}.field-repeater>ul>li.field-repeater-item.collapsed .repeater-item-collapse a.is-closed{display:block}.field-repeater>.field-repeater-builder>.field-repeater-groups{padding-top:10px!important}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group{background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:4px;box-shadow:none;cursor:pointer;display:block;min-height:95px;position:relative}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group.is-placeholder{padding:15px 10px 0}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group.is-selected{background:var(--oc-form-control-bg)}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-controls{background:var(--bs-tertiary-bg);border-bottom:none;border-bottom-right-radius:4px;border-left:1px solid var(--bs-border-color);border-top-left-radius:0;border-top-right-radius:4px;bottom:0;display:flex;flex-direction:column-reverse;padding:5px 3px 5px 5px;position:absolute;right:0;top:0;width:auto}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-controls .repeater-item-title{display:none}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-controls a.repeater-item-handle,.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-controls a.repeater-item-menu{margin:2px 0}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-controls .repeater-item-checkbox{flex-grow:1}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-controls .repeater-item-checkbox .checkbox{padding-left:26px}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-image>i{color:var(--oc-toolbar-color);font-size:20px;left:11px;position:absolute;top:11px}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-description,.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-title{display:block;padding-left:10px;padding-right:45px}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-title{color:var(--oc-toolbar-color);padding-left:40px;padding-top:10px}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group>.group-description{color:#72809d;font-size:.875em;padding-bottom:10px;padding-top:10px}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group.is-selected{border-color:var(--bs-primary)}.field-repeater>.field-repeater-builder>.field-repeater-toolbar,.field-repeater>.field-repeater-toolbar{background:var(--oc-dropdown-trigger-bg);border:1px dashed var(--oc-dropdown-trigger-border);border-radius:5px;display:inline-block;position:relative}.field-repeater>.field-repeater-builder>.field-repeater-toolbar>button,.field-repeater>.field-repeater-toolbar>button{background:transparent;border:none;color:var(--oc-dropdown-trigger-color);display:block;font-size:14px;font-weight:400;padding:7px 15px;text-align:center;text-decoration:none}.field-repeater>.field-repeater-builder>.field-repeater-toolbar>button>i,.field-repeater>.field-repeater-toolbar>button>i{margin-left:-2px;margin-right:4px;position:relative;top:1px}.field-repeater>.field-repeater-builder>.field-repeater-toolbar:focus,.field-repeater>.field-repeater-builder>.field-repeater-toolbar:hover,.field-repeater>.field-repeater-toolbar:focus,.field-repeater>.field-repeater-toolbar:hover{background-color:var(--oc-dropdown-hover-bg);border-color:transparent}.field-repeater>.field-repeater-builder>.field-repeater-toolbar:focus>button,.field-repeater>.field-repeater-builder>.field-repeater-toolbar:focus>button>i,.field-repeater>.field-repeater-builder>.field-repeater-toolbar:hover>button,.field-repeater>.field-repeater-builder>.field-repeater-toolbar:hover>button>i,.field-repeater>.field-repeater-toolbar:focus>button,.field-repeater>.field-repeater-toolbar:focus>button>i,.field-repeater>.field-repeater-toolbar:hover>button,.field-repeater>.field-repeater-toolbar:hover>button>i{color:var(--oc-dropdown-hover-color)}.field-repeater>.field-repeater-builder>.field-repeater-toolbar:active,.field-repeater>.field-repeater-toolbar:active{background-color:var(--oc-dropdown-active-bg);border-color:transparent}.field-repeater>.field-repeater-builder>.field-repeater-toolbar:active>button,.field-repeater>.field-repeater-builder>.field-repeater-toolbar:active>button>i,.field-repeater>.field-repeater-toolbar:active>button,.field-repeater>.field-repeater-toolbar:active>button>i{color:var(--oc-dropdown-hover-color)}.field-repeater>.field-repeater-builder>.field-repeater-toolbar.in-progress,.field-repeater>.field-repeater-toolbar.in-progress{background:transparent!important;border-color:#e0e0e0!important}.field-repeater>.field-repeater-builder>.field-repeater-toolbar{display:block}.field-repeater>.field-repeater-builder>.field-repeater-toolbar>a,.field-repeater>.field-repeater-builder>.field-repeater-toolbar>button{width:100%}.field-repeater>.field-repeater-builder>.field-repeater-groups,.field-repeater>ul.field-repeater-items{list-style:none;margin:0;padding:0}.field-repeater>.field-repeater-builder>ul>li.field-repeater-group,.field-repeater>ul>li.field-repeater-item{list-style:none;margin:0 0 10px;padding:0}.field-repeater .repeater-item-icon{color:var(--oc-toolbar-color);display:block;height:24px;line-height:24px;margin:-2px 2px;width:24px}.field-repeater .repeater-item-checkbox .form-check-input{left:5px;position:relative;top:3px}.field-repeater a.repeater-item-handle,.field-repeater a.repeater-item-menu{border-radius:3px;color:var(--oc-toolbar-color);display:block;height:24px;line-height:24px;margin:-2px 2px;text-align:center;text-decoration:none;width:24px}.field-repeater a.repeater-item-handle .icon-list-reorder,.field-repeater a.repeater-item-menu .icon-list-reorder{font-size:24px}.field-repeater a.repeater-item-handle{cursor:move}.field-repeater a.repeater-item-handle:active{background:var(--oc-toolbar-hover-bg)}.field-repeater .repeater-item-dropdown.open a.repeater-item-menu,.field-repeater a.repeater-item-menu:hover{background:var(--oc-toolbar-hover-bg);color:var(--oc-toolbar-hover-color)}.field-repeater .repeater-item-dropdown{padding-right:3px}.form-group.span-adaptive>.field-repeater{height:100%;overflow:auto;padding:20px;position:absolute;width:100%}.form-group.span-adaptive>.field-repeater[data-external-toolbar-app-state]>.field-repeater-builder>.field-repeater-toolbar,.form-group.span-adaptive>.field-repeater[data-external-toolbar-app-state]>.field-repeater-toolbar{display:none!important}.form-group.span-adaptive>.field-repeater[data-external-toolbar-app-state]>.field-repeater-builder>.field-repeater-groups{padding-top:0!important}.form-group.span-adaptive>.field-repeater.repeater-empty{background-image:url(../../../../../backend/assets/images/no-blocks.svg);background-position:50%;background-repeat:no-repeat}body.component-backend-document-fullscreen .form-group.span-adaptive>.field-repeater{overflow:inherit}.field-repeater.repeater-mode-builder{display:flex}.field-repeater.repeater-mode-builder>ul.field-repeater-items{flex-grow:1}.field-repeater.repeater-mode-builder>ul.field-repeater-items>li{display:none}.field-repeater.repeater-mode-builder>ul.field-repeater-items>li.is-selected{display:block}.field-repeater.repeater-mode-builder>.field-repeater-builder{flex-basis:250px;flex-shrink:0;padding-right:20px;width:250px}@media (max-width:769px){.field-repeater.repeater-mode-builder{flex-direction:column}.field-repeater.repeater-mode-builder>.field-repeater-builder{flex-basis:auto;padding-right:0;width:100%}.field-repeater.repeater-mode-builder>.field-repeater-builder>ul{margin-bottom:5px;overflow-x:auto;white-space:nowrap}.field-repeater.repeater-mode-builder>.field-repeater-builder>ul>li .group-description,.field-repeater.repeater-mode-builder>.field-repeater-builder>ul>li .group-title{overflow:hidden;text-overflow:ellipsis}.field-repeater.repeater-mode-builder>.field-repeater-builder>ul>li.field-repeater-group{display:inline-block;margin-bottom:5px;margin-right:10px;vertical-align:top;width:250px}}.field-repeater-selection-list{width:300px}@media (max-width:768px){.field-repeater-selection-list{width:auto}}\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/assets/js/repeater.accordion.js",
    "content": "/*\n * Repeater Form Widget plugin (Accordion mode)\n *\n * Data attributes:\n * - data-control=\"repeateraccordion\" - enables the plugin on an element\n * - data-option=\"value\" - an option with a value\n *\n */\nimport { registerControl } from 'larajax';\nimport { RepeaterFormWidgetBase } from './repeater.js';\n\nclass RepeaterFormWidgetAccordion extends RepeaterFormWidgetBase {\n    init() {\n        // Overrides\n        this.selectorToolbar = '> .field-repeater-toolbar:first';\n        this.selectorHeader = '> .field-repeater-items > .field-repeater-item > .repeater-header';\n        this.selectorSortable = '> .field-repeater-items';\n        this.selectorChecked = '> .field-repeater-items > .field-repeater-item > .repeater-header input[type=checkbox]:checked';\n        super.init();\n    }\n\n    connect() {\n        // Items\n        var headSelect = this.selectorHeader;\n        this.$el = $(this.element);\n        this.$el.on('click', headSelect, this.proxy(this.clickItemHeader));\n        this.$el.on('click', headSelect + ' [data-repeater-expand]', this.proxy(this.toggleCollapse));\n        this.$el.on('click', headSelect + ' [data-repeater-collapse]', this.proxy(this.toggleCollapse));\n\n        // Next tick to let other controls initialize\n        setTimeout(() => {\n            this.applyExpandedItems();\n        }, 0);\n\n        super.connect();\n    }\n\n    disconnect() {\n        // Items\n        var headSelect = this.selectorHeader;\n        this.$el.off('click', headSelect, this.proxy(this.clickItemHeader));\n        this.$el.off('click', headSelect + ' [data-repeater-expand]', this.proxy(this.toggleCollapse));\n        this.$el.off('click', headSelect + ' [data-repeater-collapse]', this.proxy(this.toggleCollapse));\n\n        super.disconnect();\n    }\n\n    clickItemHeader(ev) {\n        var $target = $(ev.target);\n        if (\n            !$target.hasClass('repeater-header') &&\n            !$target.hasClass('repeater-item-title') &&\n            !$target.hasClass('repeater-item-checkbox')\n        ) {\n            return;\n        }\n\n        var $item = $target.closest('.field-repeater-item'),\n            isCollapsed = $item.hasClass('collapsed');\n\n        if (!this.config.itemsExpanded) {\n            this.collapseAll();\n        }\n\n        isCollapsed ? this.expand($item) : this.collapse($item);\n    }\n\n    applyExpandedItems() {\n        if (this.config.itemsExpanded) {\n            return;\n        }\n\n        var items = $(this.$el).children('.field-repeater-items').children('.field-repeater-item'),\n            self = this;\n\n        $.each(items, function(key, item) {\n            self.collapse($(item));\n        });\n    }\n\n    toggleCollapse(ev) {\n        var self = this,\n            $item = $(ev.target).closest('.field-repeater-item'),\n            isCollapsed = $item.hasClass('collapsed');\n\n        ev.preventDefault();\n\n        var $items = this.getCheckedItemsOrItem($item);\n        $.each($items, function(k, item) {\n            isCollapsed ? self.expand($(item)) : self.collapse($(item));\n        });\n    }\n\n    collapseAll() {\n        var self = this,\n            $items = $('> .field-repeater-item', this.$itemContainer);\n\n        $.each($items, function(key, item){\n            self.collapse($(item));\n        });\n    }\n\n    expandAll() {\n        var self = this,\n            $items = $('> .field-repeater-item', this.$itemContainer);\n\n        $.each($items, function(key, item){\n            self.expand($(item));\n        });\n    }\n\n    collapse($item) {\n        $item.addClass('collapsed');\n\n        $('> .repeater-header > .repeater-item-title', $item).text(this.getCollapseTitle($item));\n    }\n\n    expand($item) {\n        $item.removeClass('collapsed');\n\n        $(window).trigger('oc.updateUi');\n    }\n\n    //\n    // Event Overrides\n    //\n\n    eventOnAddItem() {\n        if (!this.config.itemsExpanded) {\n            this.collapseAll();\n        }\n    }\n\n    eventOnDuplicateItem($fromItem) {\n        this.eventOnAddItem();\n    }\n\n    eventMenuFilter($item, $list) {\n        // Hide/show duplicate button\n        $('[data-repeater-duplicate]', $list).closest('li').toggleClass('disabled', !this.canAdd);\n\n        // Hide/show remove button\n        $('[data-repeater-remove]', $list).closest('li').toggleClass('disabled', !this.canRemove);\n\n        // Hide/show up/down\n        $('[data-repeater-move-up]', $list).closest('li').toggle(!!$item.prev().length);\n        $('[data-repeater-move-down]', $list).closest('li').toggle(!!$item.next().length);\n\n        // Hide/show expand/collapse\n        $('[data-repeater-expand]', $list).closest('li').toggle($item.hasClass('collapsed'));\n        $('[data-repeater-collapse]', $list).closest('li').toggle(!$item.hasClass('collapsed'));\n    }\n}\n\nregisterControl('repeateraccordion', RepeaterFormWidgetAccordion);\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/assets/js/repeater.builder.js",
    "content": "/*\n * Repeater Form Widget plugin (Builder mode)\n *\n * Data attributes:\n * - data-control=\"repeaterbuilder\" - enables the plugin on an element\n * - data-option=\"value\" - an option with a value\n *\n * JavaScript API:\n * RepeaterFormWidgetBuilder.getOrCreateInstance(el);\n */\nimport { registerControl } from 'larajax';\nimport { RepeaterFormWidgetBase } from './repeater.js';\n\nclass RepeaterFormWidgetBuilder extends RepeaterFormWidgetBase {\n    init() {\n        // Overrides\n        this.selectorToolbar = '> .field-repeater-builder > .field-repeater-toolbar:first';\n        this.selectorHeader = '> .field-repeater-builder > .field-repeater-groups > .field-repeater-group > .repeater-header';\n        this.selectorSortable = '> .field-repeater-builder > .field-repeater-groups';\n        this.selectorChecked = '> .field-repeater-builder > .field-repeater-groups > .field-repeater-group > .repeater-header input[type=checkbox]:checked';\n\n        super.init();\n    }\n\n    connect() {\n        // Locals\n        this.$el = $(this.element);\n        this.$itemContainer = $('> .field-repeater-items', this.$el);\n        this.$sidebar = $('> .field-repeater-builder > .field-repeater-groups:first', this.$el);\n        this.$sidebar.on('click', '> li:not(.is-placeholder)', this.proxy(this.clickBuilderItem));\n\n        // Core logic\n        $(document).on('render', this.proxy(this.builderOnRender));\n        this.transferBuilderItemHeaders();\n\n        this.selectBuilderItem();\n        super.connect();\n    }\n\n    disconnect() {\n        // Locals\n        this.$sidebar.off('click', '> li:not(.is-placeholder)', this.proxy(this.clickBuilderItem));\n\n        // Core logic\n        $(document).off('render', this.proxy(this.builderOnRender));\n\n        this.$sidebar = null;\n\n        super.disconnect();\n    }\n\n    builderOnRender() {\n        this.transferBuilderItemHeaders();\n    }\n\n    clickBuilderItem(ev) {\n        var $item = $(ev.target).closest('.field-repeater-group'),\n            inControlArea = $(ev.target).closest('.group-controls').length;\n\n        if (inControlArea) {\n            return;\n        }\n\n        this.selectBuilderItem($item.data('repeater-index'));\n\n        $(window).trigger('oc.updateUi');\n    }\n\n    selectBuilderItem(itemIndex) {\n        if (itemIndex === undefined) {\n            itemIndex = $('> li:first', this.$sidebar).data('repeater-index');\n        }\n\n        $('> li.is-selected', this.$sidebar).removeClass('is-selected');\n        $('> li[data-repeater-index='+itemIndex+']', this.$sidebar).addClass('is-selected');\n\n        $('> li.is-selected', this.$itemContainer).removeClass('is-selected');\n        $('> li[data-repeater-index='+itemIndex+']', this.$itemContainer).addClass('is-selected');\n\n        this.setCollapsedTitles();\n    }\n\n    setCollapsedTitles() {\n        var self = this;\n\n        $('> .field-repeater-item', this.$itemContainer).each(function() {\n            var $item = $(this),\n                itemIndex = $item.data('repeater-index'),\n                $groupItem = $('> li[data-repeater-index='+itemIndex+']', self.$sidebar);\n\n            $('[data-group-title]:first', $groupItem).html(self.getCollapseTitle($item));\n        });\n    }\n\n    transferBuilderItemHeaders() {\n        var self = this,\n            templateHtml = $('> [data-group-template]', this.$el).html();\n\n        $('> .field-repeater-item > .repeater-header', this.$itemContainer).each(function() {\n            var $groupItem = $(templateHtml),\n                $item = $(this).closest('li');\n\n            self.$sidebar.append($groupItem);\n            $('[data-group-controls]:first', $groupItem).replaceWith($(this).addClass('group-controls'));\n            $('[data-group-image]:first > i', $groupItem).addClass($item.data('item-icon'));\n            $('[data-group-title]:first', $groupItem).html($item.data('item-title'));\n            $('[data-group-description]:first', $groupItem).html($item.data('item-description'));\n\n            $groupItem.attr('data-repeater-index', $item.data('repeater-index'));\n            $groupItem.attr('data-repeater-group', $item.data('repeater-group'));\n\n            // Remove last loader if there is one\n            $('li.is-placeholder:first', self.$sidebar).remove();\n\n            // Select this item\n            self.selectBuilderItem($item.data('repeater-index'));\n        });\n    }\n\n    sortItemsToSidebar() {\n        $('> li', this.$sidebar).each((index, sbItem) => {\n            var itemIndex = $(sbItem).data('repeater-index'),\n                $item = this.findItemFromIndex(itemIndex);\n\n            this.$itemContainer.append($item);\n        });\n    }\n\n    sortSidebarToItems() {\n        $('> .field-repeater-item', this.$itemContainer).each((index, rItem) => {\n            var $item = $(rItem).closest('li'),\n                itemIndex = $item.attr('data-repeater-index'),\n                $sidebarItem = $('> li[data-repeater-index='+itemIndex+']:first', this.$sidebar);\n\n            this.$sidebar.append($sidebarItem);\n        });\n    }\n\n    appendLoadingItem($afterItem) {\n        var templateHtml = $('> [data-group-loading-template]', this.$el).html(),\n            $loadingItem = $(templateHtml);\n\n        if ($afterItem) {\n            $afterItem.after($loadingItem);\n        }\n        else {\n            this.$sidebar.append($loadingItem);\n        }\n    }\n\n    //\n    // Event Overrides\n    //\n\n    eventMenuFilter($item, $list) {\n        // Hide/show duplicate button\n        $('[data-repeater-duplicate]', $list).closest('li').toggleClass('disabled', !this.canAdd);\n\n        // Hide/show remove button\n        $('[data-repeater-remove]', $list).closest('li').toggleClass('disabled', !this.canRemove);\n\n        // Hide/show up/down\n        $('[data-repeater-move-up]', $list).closest('li').toggle(!!$item.prev().length);\n        $('[data-repeater-move-down]', $list).closest('li').toggle(!!$item.next().length);\n\n        // Hide/show expand/collapse\n        $('[data-repeater-expand]', $list).closest('li').hide();\n        $('[data-repeater-collapse]', $list).closest('li').hide();\n    }\n\n    eventSortableOnEnd() {\n        this.sortable.option('disabled', true);\n        this.sortItemsToSidebar();\n        this.sortable.option('disabled', false);\n    }\n\n    eventOnAddItem() {\n        this.appendLoadingItem();\n    }\n\n    eventOnDuplicateItem($fromItem) {\n        this.appendLoadingItem($fromItem);\n    }\n\n    eventDuplicateOnEnd() {\n        this.sortSidebarToItems();\n    }\n\n    eventOnErrorAddItem() {\n        $('li.is-placeholder:first', this.$sidebar).remove();\n    }\n\n    eventOnRemoveItem($item) {\n        var itemIndex = $item.data('repeater-index'),\n            $containerItem = this.findItemFromIndex(itemIndex);\n\n        this.disposeItem($containerItem);\n        $containerItem.remove();\n    }\n}\n\nregisterControl('repeaterbuilder', RepeaterFormWidgetBuilder);\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/assets/js/repeater.js",
    "content": "/*\n * Repeater Form Widget base class\n */\nimport { ControlBase } from 'larajax';\n\nexport class RepeaterFormWidgetBase extends ControlBase {\n    init() {\n        this.itemCount = 0;\n        this.canAdd = true;\n        this.canRemove = true;\n        this.toolbarBusy = false;\n        this.repeaterId = $.oc.domIdManager.generate('repeater');\n        this.initDefaults();\n    }\n\n    initDefaults() {\n        const defaults = {\n            useReorder: true,\n            sortableHandle: '.repeater-item-handle',\n            removeHandler: 'onRemoveItem',\n            useDuplicate: true,\n            duplicateHandler: 'onDuplicateItem',\n            removeConfirm: 'Are you sure?',\n            itemsExpanded: true,\n            titleFrom: null,\n            minItems: null,\n            maxItems: null\n        };\n\n        for (const key in defaults) {\n            if (this.config[key] === undefined) {\n                this.config[key] = defaults[key];\n            }\n        }\n    }\n\n    connect() {\n        if (this.config.useReorder) {\n            this.bindSorting();\n        }\n\n        // Init elements\n        this.$el = $(this.element);\n        this.$itemContainer = $('> .field-repeater-items', this.$el);\n\n        // Items\n        var headSelect = this.selectorHeader;\n        this.$el.on('change', headSelect + ' input[type=checkbox]', this.proxy(this.clickItemCheckbox));\n        this.$el.on('click', headSelect + ' [data-repeater-move-up]', this.proxy(this.clickMoveItemUp));\n        this.$el.on('click', headSelect + ' [data-repeater-move-down]', this.proxy(this.clickMoveItemDown));\n        this.$el.on('click', headSelect + ' [data-repeater-remove]', this.proxy(this.clickRemoveItem));\n        this.$el.on('click', headSelect + ' [data-repeater-duplicate]', this.proxy(this.clickDuplicateItem));\n        this.$el.on('show.bs.dropdown', headSelect + ' .repeater-item-dropdown', this.proxy(this.showItemMenu));\n\n        // Toolbar\n        this.$toolbar = $(this.selectorToolbar, this.$el);\n        this.$toolbar.on('click', '> [data-repeater-cmd=add-group]', this.proxy(this.clickAddGroupButton));\n        this.$toolbar.on('click', '> [data-repeater-cmd=add]', this.proxy(this.onAddItemButton));\n        this.$toolbar.on('ajaxDone', '> [data-repeater-cmd=add]', this.proxy(this.onAddItemSuccess));\n\n        this.countItems();\n        this.togglePrompt();\n\n        // External toolbar\n        setTimeout(() => {\n            this.initToolbarExtensionPoint();\n            this.mountExternalToolbarEventBusEvents();\n            this.extendExternalToolbar();\n        }, 0);\n    }\n\n    disconnect() {\n        if (this.config.useReorder) {\n            this.sortable.destroy();\n        }\n\n        // Items\n        var headSelect = this.selectorHeader;\n        this.$el.off('change', headSelect + ' input[type=checkbox]', this.proxy(this.clickItemCheckbox));\n        this.$el.off('click', headSelect + ' [data-repeater-move-up]', this.proxy(this.clickMoveItemUp));\n        this.$el.off('click', headSelect + ' [data-repeater-move-down]', this.proxy(this.clickMoveItemDown));\n        this.$el.off('click', headSelect + ' [data-repeater-remove]', this.proxy(this.clickRemoveItem));\n        this.$el.off('click', headSelect + ' [data-repeater-duplicate]', this.proxy(this.clickDuplicateItem));\n        this.$el.off('show.bs.dropdown', headSelect + ' .repeater-item-dropdown', this.proxy(this.showItemMenu));\n\n        // Toolbar\n        this.$toolbar.off('click', '> [data-repeater-cmd=add-group]', this.proxy(this.clickAddGroupButton));\n        this.$toolbar.off('click', '> [data-repeater-cmd=add]', this.proxy(this.onAddItemButton));\n        this.$toolbar.off('ajaxDone', '> [data-repeater-cmd=add]', this.proxy(this.onAddItemSuccess));\n\n        this.$el.removeData('oc.repeater');\n        this.unmountExternalToolbarEventBusEvents();\n\n        this.$el = null;\n        this.$toolbar = null;\n        this.$sortableBody = null;\n        this.sortable = null;\n    }\n\n    bindSorting() {\n        this.$sortableBody = $(this.selectorSortable, this.$el);\n\n        this.sortable = Sortable.create(this.$sortableBody.get(0), {\n            // forceFallback: true,\n            animation: 150,\n            multiDrag: true,\n            avoidImplicitDeselect: true,\n            handle: this.config.sortableHandle,\n            onEnd: this.proxy(this.onSortableEnd),\n\n            // Auto scroll plugin\n            forceAutoScrollFallback: true,\n            scrollSensitivity: 60,\n            scrollSpeed: 20\n        });\n    }\n\n    onSortableEnd(ev) {\n        this.eventSortableOnEnd();\n    }\n\n    clickItemCheckbox(ev) {\n        var $target = $(ev.target),\n            $item = $target.closest('li'),\n            checked = $target.is(':checked');\n\n        $item.toggleClass('is-checked', checked);\n\n        if (checked) {\n            Sortable.utils.select($item.get(0));\n        }\n        else {\n            Sortable.utils.deselect($item.get(0));\n        }\n    }\n\n    showItemMenu(ev) {\n        var templateHtml = $('> [data-item-menu-template]', this.$el).html(),\n            $target = $(ev.target),\n            $item = $target.closest('li'),\n            $dropdownList = $('.dropdown-menu:first', $target.closest('.dropdown'));\n\n        $dropdownList.html(templateHtml);\n\n        this.eventMenuFilter($item, $dropdownList);\n\n        if (this.toolbarBusy) {\n            $('li', $dropdownList).addClass('disabled');\n        }\n    }\n\n    clickRemoveItem(ev) {\n        // Button is disabled\n        if ($(ev.target).closest('li').hasClass('disabled')) {\n            return;\n        }\n\n        this.onRemoveItem(this.findItemFromTarget(ev.target));\n    }\n\n    onRemoveItem($item) {\n        var self = this,\n            $items = this.getCheckedItemsOrItem($item);\n\n        var itemData = [];\n        $.each($items, function(k, item) {\n            itemData.push({\n                repeater_index: $(item).data('repeater-index'),\n                repeater_group: $(item).data('repeater-group')\n            })\n        });\n\n        $item.request(this.config.removeHandler, {\n            data: {\n                _repeater_items: itemData\n            },\n            confirm: this.config.removeConfirm,\n            afterUpdate: function() {\n                self.onRemoveItemSuccess($items);\n            }\n        });\n    }\n\n    onRemoveItemSuccess($items) {\n        var self = this;\n\n        $.each($items, function(k, item) {\n            var $item = $(item);\n            self.disposeItem($item);\n            $item.remove();\n\n            self.eventOnRemoveItem($item);\n\n            self.countItems();\n            self.triggerChange();\n        });\n    }\n\n    clickDuplicateItem(ev) {\n        // Button is disabled\n        if ($(ev.target).closest('li').hasClass('disabled')) {\n            return;\n        }\n\n        this.toolbarBusy = true;\n\n        var $item = this.findItemFromTarget(ev.target);\n        this.eventOnDuplicateItem($item);\n        this.onDuplicateItem($item);\n    }\n\n    onDuplicateItem($item) {\n        var self = this;\n\n        var itemData = {\n            _repeater_index: $item.data('repeater-index'),\n            _repeater_group: $item.data('repeater-group')\n        };\n\n        $item.request(this.config.duplicateHandler, {\n            data: itemData,\n            afterUpdate: function(data) {\n                self.toolbarBusy = false;\n                if (data.result) {\n                    self.onDuplicateItemSuccess($item, data.result.duplicateIndex);\n                }\n                else {\n                    self.eventOnErrorAddItem();\n                }\n            }\n        });\n    }\n\n    onDuplicateItemSuccess($item, duplicateIndex) {\n        var itemIndex = $item.data('repeater-index'),\n            $duplicateItem = $('> li[data-repeater-index='+duplicateIndex+']', this.$itemContainer);\n\n        this.findItemFromIndex(itemIndex).after($duplicateItem);\n\n        this.countItems();\n        this.triggerChange();\n        this.eventDuplicateOnEnd();\n    }\n\n    clickMoveItemUp(ev) {\n        var $item = this.findItemFromTarget(ev.target),\n            $prevItem = $item.prev();\n\n        $prevItem.before($item);\n\n        this.onSortableEnd();\n    }\n\n    clickMoveItemDown(ev) {\n        var $item = this.findItemFromTarget(ev.target),\n            $nextItem = $item.next();\n\n        $nextItem.after($item);\n\n        this.onSortableEnd();\n    }\n\n    onAddItemButton(ev) {\n        this.eventOnAddItem();\n    }\n\n    clickAddGroupButton(ev) {\n        var self = this,\n            templateHtml = $('> [data-group-palette-template]', this.$el).html(),\n            $target = $(ev.target),\n            $form = this.$el.closest('form');\n\n        // Prevent adding new items until last one is finished\n        if ($target.hasClass('oc-loading')) {\n            return;\n        }\n\n        $target.ocPopover({\n            content: templateHtml\n        });\n\n        var $container = $target.data('oc.popover').$container;\n\n        // Initialize the scrollpad control in the popup\n        oc.Events.dispatch('render');\n\n        $container\n            .on('click', 'a', function (ev) {\n                // Defer 2 ticks for framework which is deferred 1 tick\n                setTimeout(function() {\n                    $(ev.target).trigger('close.oc.popover');\n                }, 2);\n            })\n            .on('ajaxSetup', '[data-repeater-add]', function(ev, context) {\n                context.options.form = $form.get(0);\n\n                $target.addClass('oc-loading');\n\n                $form.one('ajaxComplete', function() {\n                    $target.removeClass('oc-loading');\n                    self.itemCount++;\n                    self.triggerChange();\n                });\n\n                // Event\n                self.eventOnAddItem();\n            });\n    }\n\n    onAddItemSuccess(ev) {\n        this.itemCount++;\n        this.triggerChange();\n    }\n\n    triggerChange() {\n        this.togglePrompt();\n\n        // Trigger change event for compatibility with october.form.js\n        this.$el.closest('[data-field-name]').trigger('change.oc.formwidget');\n\n        // Event\n        this.eventOnChange();\n    }\n\n    togglePrompt() {\n        if (this.config.minItems && this.config.minItems > 0) {\n            this.canRemove = this.itemCount > this.config.minItems;\n        }\n\n        if (this.config.maxItems && this.config.maxItems > 0) {\n            this.canAdd = this.itemCount < this.config.maxItems;\n        }\n\n        this.$toolbar.toggle(this.canAdd);\n\n        $('> [data-repeater-pointer-input]:first', this.$el).attr('disabled', !!this.itemCount);\n    }\n\n    getCollapseTitle($item) {\n        var $target = $item,\n            titleFromAttr = this.getTitleFromAttribute($item),\n            defaultText = this.$el.data('default-title'),\n            explicitText = $item.data('item-title'),\n            foundTitleFrom = false;\n\n        // Group mode supplies explicit text\n        if (explicitText && !titleFromAttr) {\n            return explicitText;\n        }\n\n        // A specific title from attribute was provided\n        if (titleFromAttr) {\n            var $titleFrom = $('[data-field-name=\"' + titleFromAttr + '\"]', $item);\n            if ($titleFrom.length) {\n                $target = $titleFrom;\n                foundTitleFrom = true;\n            }\n        }\n\n        // The title from attribute was not found\n        if (explicitText && !foundTitleFrom) {\n            return explicitText;\n        }\n\n        // Find anything within the target\n        var result = '',\n            $textInput = $('input[type=text]:first, select:first, textarea:first', $target).first();\n\n        if ($textInput.length) {\n            if ($textInput.is('select')) {\n                result = $textInput.find('option:selected').text();\n            } else if ($textInput.is('textarea')) {\n                result = $('<div />').html($textInput.val()).text().substring(0, 255);\n            } else {\n                result = $textInput.val();\n            }\n        } else {\n            // Look for a span with class 'form-control'\n            var $spanTextInput = $('.form-control:first', $target);\n            if ($spanTextInput.length) {\n                result = $spanTextInput.text();\n            } else {\n                var $disabledTextInput = $('.text-field:first > .form-control', $target);\n                if ($disabledTextInput.length) {\n                    result = $disabledTextInput.text();\n                }\n            }\n        }\n\n        return result ? result : defaultText;\n    }\n\n    getTitleFromAttribute($item) {\n        if (this.config.titleFrom) {\n            return this.config.titleFrom;\n        }\n\n        var itemTitleFrom = $item.data('title-from');\n        if (itemTitleFrom) {\n            return itemTitleFrom;\n        }\n\n        return null;\n    }\n\n    findItemFromIndex(itemIndex) {\n        return $('> li[data-repeater-index='+itemIndex+']:first', this.$itemContainer);\n    }\n\n    findItemFromTarget(target) {\n        return $(target).closest('.repeater-header').closest('li');\n    }\n\n    disposeItem($item) {\n        $('[data-disposable]', $item).each(function() {\n            var $el = $(this),\n                control = $el.data('control'),\n                widget = $el.data('oc.' + control);\n\n            if (widget && typeof widget['dispose'] === 'function') {\n                widget.dispose();\n            }\n        });\n    }\n\n    getCheckedItemsOrItem($item) {\n        var $items = this.getCheckedItems();\n\n        if (!$items.length) {\n            $items = [$item];\n        }\n\n        return $items;\n    }\n\n    getCheckedItems() {\n        var $checkboxes = $(this.selectorChecked, this.$el),\n            result = [];\n\n        $.each($checkboxes, function(k, $checkbox) {\n            result.push($checkbox.closest('li'));\n        });\n\n        return result;\n    }\n\n    countItems() {\n        this.itemCount = $('> .field-repeater-item', this.$itemContainer).length;\n        this.$el.toggleClass('repeater-empty', this.itemCount === 0);\n    }\n\n    //\n    // External toolbar\n    //\n\n    initToolbarExtensionPoint() {\n        if (!this.config.externalToolbarAppState) {\n            return;\n        }\n\n        const point = $.oc.vueUtils.getToolbarExtensionPoint(\n            this.config.externalToolbarAppState,\n            this.$el.get(0)\n        );\n\n        if (point) {\n            this.toolbarExtensionPoint = point.state;\n            this.externalToolbarEventBusObj = point.bus;\n        }\n    }\n\n    mountExternalToolbarEventBusEvents() {\n        if (!this.externalToolbarEventBusObj) {\n            return;\n        }\n\n        this.externalToolbarEventBusObj.on('toolbarcmd', this.proxy(this.onToolbarExternalCommand));\n        this.externalToolbarEventBusObj.on('extendapptoolbar', this.proxy(this.extendExternalToolbar));\n    }\n\n    unmountExternalToolbarEventBusEvents() {\n        if (!this.externalToolbarEventBusObj) {\n            return;\n        }\n\n        this.externalToolbarEventBusObj.off('toolbarcmd', this.proxy(this.onToolbarExternalCommand));\n        this.externalToolbarEventBusObj.off('extendapptoolbar', this.proxy(this.extendExternalToolbar));\n    }\n\n    onToolbarExternalCommand(ev) {\n        var cmdPrefix = 'repeater-toolbar-';\n\n        if (ev.command.substring(0, cmdPrefix.length) != cmdPrefix) {\n            return;\n        }\n\n        if (/^repeater-toolbar-add,/.test(ev.command)) {\n            return this.onAddItemClick(ev.command);\n        }\n\n        var cmd = ev.command.substring(cmdPrefix.length),\n            $toolbar = this.$el.find('> .field-repeater-builder > .field-repeater-toolbar, > .field-repeater-toolbar'),\n            $button = $toolbar.find('[data-repeater-cmd='+cmd+']');\n\n        $button.get(0).click(ev.ev);\n    }\n\n    onAddItemClick(cmd) {\n        var parts = cmd.split(',');\n\n        if (parts[1] != this.repeaterId) {\n            return;\n        }\n\n        var requestData = oc.parseJSON('{' + parts[3] + '}'),\n            that = this;\n\n        this.externalToolbarEventBusObj.emit('documentloadingstart');\n        this.$el.request(\n            parts[2],\n            {\n                data: requestData\n            }\n        ).always(function () {\n            that.externalToolbarEventBusObj.emit('documentloadingend');\n            that.countItems();\n        });\n    }\n\n    buildAddMenuItems() {\n        if (this.addMenuItems) {\n            return this.addMenuItems;\n        }\n\n        var templateHtml = $('> [data-group-palette-template]', this.$el).html(),\n            templateContainer = $(templateHtml),\n            that = this;\n\n        this.addMenuItems = [];\n\n        templateContainer.find('ul > li > a').each(function () {\n            var $link = $(this),\n                $icon = $link.find('i.list-icon');\n\n            that.addMenuItems.push({\n                type: 'text',\n                label: $link.find('.title').text(),\n                icon: $icon.attr('class'),\n                command: 'repeater-toolbar-add,' + that.repeaterId + ',' + $link.data('request') + ',' + $link.data('requestData')\n            });\n        });\n\n        return this.addMenuItems;\n    }\n\n    extendExternalToolbar() {\n        if (!this.$el || !this.$el.is(\":visible\") || !this.toolbarExtensionPoint) {\n            return;\n        }\n\n        this.toolbarExtensionPoint.splice(0, this.toolbarExtensionPoint.length);\n\n        this.toolbarExtensionPoint.push({\n            type: 'separator'\n        });\n\n        var that = this,\n            $buttons = this.$el.find('> .field-repeater-builder > .field-repeater-toolbar > button, > .field-repeater-toolbar > button');\n\n        $buttons.each(function () {\n            var $button = $(this),\n                $icon = $button.find('i[class*=icon]'),\n                menuitems = [],\n                isAddButton = $button.data('repeaterCmd') == 'add-group';\n\n            if (isAddButton) {\n                menuitems = that.buildAddMenuItems();\n            }\n            else {\n                menuitems = false;\n            }\n\n            that.toolbarExtensionPoint.push(\n                {\n                    type: isAddButton ? 'dropdown' : 'button',\n                    icon: $icon.attr('class'),\n                    label: $button.text(),\n                    command: 'repeater-toolbar-' + $button.attr('data-repeater-cmd'),\n                    disabled: $button.attr('disabled') !== undefined,\n                    menuitems: menuitems\n                }\n            );\n        });\n    }\n\n    //\n    // Event Overrides\n    //\n\n    eventSortableOnEnd() {\n    }\n\n    eventOnChange() {\n    }\n\n    eventOnAddItem() {\n    }\n\n    eventOnRemoveItem() {\n    }\n\n    eventOnErrorAddItem() {\n    }\n\n    eventOnDuplicateItem($fromItem) {\n    }\n\n    eventDuplicateOnEnd() {\n    }\n\n    eventMenuFilter() {\n    }\n}\n\nexport default RepeaterFormWidgetBase;\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/assets/less/repeater.group.less",
    "content": ".field-repeater > .field-repeater-builder > .field-repeater-groups {\n    padding-top: 10px !important;\n}\n\n.field-repeater > .field-repeater-builder > ul > li.field-repeater-group {\n    position: relative;\n    min-height: 95px;\n    display: block;\n    background: @repeater-item-bg;\n    border: 1px solid @input-border;\n    border-radius: @border-radius-base;\n    box-shadow: @input-box-shadow;\n    cursor: pointer;\n\n    &.is-placeholder {\n        padding: 15px 10px 0;\n    }\n\n    &.is-selected {\n        background: @repeater-item-bg;\n    }\n\n    > .group-controls {\n        background: @repeater-menu-bg;\n        padding: 5px;\n        padding-right: 3px;\n\n        display: flex;\n        flex-direction: column-reverse;\n        width: auto;\n        position: absolute;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        border-bottom: none;\n        border-left: 1px solid @input-border;\n        border-top-left-radius: 0;\n        border-top-right-radius: @border-radius-base;\n        border-bottom-right-radius: @border-radius-base;\n\n        .repeater-item-title {\n            display: none;\n        }\n\n        a.repeater-item-menu,\n        a.repeater-item-handle {\n            margin: 2px 0;\n        }\n\n        .repeater-item-checkbox {\n            flex-grow: 1;\n            .checkbox {\n                padding-left: 26px;\n            }\n        }\n    }\n\n    > .group-image > i {\n        position: absolute;\n        left: 11px;\n        top: 11px;\n        font-size: 20px;\n        color: @toolbar-color;\n    }\n\n    > .group-title,\n    > .group-description {\n        display: block;\n        padding-left: 10px;\n        padding-right: 45px;\n    }\n\n    > .group-title {\n        padding-left: 40px;\n        padding-top: 10px;\n        color: @toolbar-color;\n    }\n\n    > .group-description {\n        font-size: .875em;\n        padding-top: 10px;\n        padding-bottom: 10px;\n        color: @color-grey-2;\n    }\n}\n\n// Selected\n.field-repeater > .field-repeater-builder > ul > li.field-repeater-group.is-selected {\n    border-color: @brand-primary;\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/assets/less/repeater.item.less",
    "content": "\n.field-repeater > ul > li.field-repeater-item {\n    position: relative;\n    background: @repeater-body-bg;\n    border: 1px solid @repeater-body-border;\n    border-radius: @border-radius-base;\n    box-shadow: @input-box-shadow;\n    min-height: 30px;\n\n    .field-repeater > ul > li.field-repeater-item {\n        background: @repeater-body-inner-bg;\n    }\n\n    > .repeater-header {\n        background: @repeater-menu-bg;\n        padding: 7px 10px 7px 15px;\n        border-top-left-radius: @border-radius-base;\n        border-top-right-radius: @border-radius-base;\n        border-bottom: 1px solid @input-border;\n        display: flex;\n\n        .repeater-item-title {\n            flex-grow: 1;\n        }\n    }\n\n    > .repeater-content {\n        padding: 10px 15px;\n        padding-bottom: 0;\n        position: relative;\n        .clearfix;\n\n        .form-group {\n            padding-bottom: 10px;\n        }\n    }\n}\n\n// Checked\n.field-repeater > ul > li.field-repeater-item.is-checked {\n    border-color: @brand-primary;\n}\n\n// Collapsed\n.field-repeater > ul > li.field-repeater-item.collapsed {\n    > .repeater-header {\n        border-bottom-color: transparent;\n        border-radius: @border-radius-base;\n\n        .repeater-item-checkbox .form-check-input {\n            top: 0;\n            left: -5px;\n        }\n    }\n\n    > .repeater-content {\n        display: none;\n    }\n}\n\n// Accordion Mode, Grouped\n.field-repeater.repeater-mode-accordion.is-grouped {\n    > ul > li.field-repeater-item > .repeater-header {\n        cursor: pointer;\n\n        .repeater-item-checkbox .form-check-input {\n            top: 0;\n            left: -5px;\n        }\n    }\n}\n\n// Accordion Mode, Non-Grouped\n.field-repeater.repeater-mode-accordion.is-singular {\n    > ul > li.field-repeater-item > .repeater-header {\n        cursor: pointer;\n    }\n\n    > ul > li.field-repeater-item:not(.collapsed) {\n        padding-right: @repeater-icon-size + 10px;\n        min-height: 95px;\n\n        > .repeater-header {\n            padding: 5px;\n            padding-right: 3px;\n\n            .repeater-item-title {\n                flex-grow: 0;\n                display: none;\n            }\n\n            .repeater-item-checkbox {\n                flex-grow: 1;\n            }\n        }\n\n        > .repeater-header {\n            flex-direction: column-reverse;\n            width: auto;\n            position: absolute;\n            right: 0;\n            top: 0;\n            bottom: 0;\n            border-bottom: none;\n            border-left: 1px solid @input-border;\n            border-top-left-radius: 0;\n            border-bottom-right-radius: @border-radius-base;\n\n            a.repeater-item-menu,\n            a.repeater-item-handle {\n                margin: 2px 0;\n            }\n        }\n    }\n}\n\n// Collapsed icon\n.field-repeater > ul > li.field-repeater-item {\n    .repeater-item-collapse {\n        a.is-open {\n            display: block;\n        }\n        a.is-closed {\n            display: none;\n        }\n    }\n\n    &.collapsed .repeater-item-collapse {\n        a.is-open {\n            display: none;\n        }\n        a.is-closed {\n            display: block;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/assets/less/repeater.less",
    "content": "@repeater-icon-size: 24px;\n@repeater-body-bg: @body-bg;\n@repeater-body-border: @border-color;\n@repeater-body-inner-bg: @body-bg;\n@repeater-item-bg: @input-bg;\n@repeater-menu-bg: @tertiary-bg;\n\n@import \"../../../../assets/less/core/boot.less\";\n@import \"repeater.item.less\";\n@import \"repeater.group.less\";\n@import \"repeater.toolbar.less\";\n\n\n.field-repeater {\n    > .field-repeater-builder > .field-repeater-groups,\n    > ul.field-repeater-items {\n        padding: 0;\n        margin: 0;\n        list-style: none;\n    }\n\n    > .field-repeater-builder > ul > li.field-repeater-group,\n    > ul > li.field-repeater-item {\n        padding: 0;\n        margin: 0;\n        margin-bottom: 10px;\n        list-style: none;\n    }\n\n    .repeater-item-icon {\n        width: @repeater-icon-size;\n        height: @repeater-icon-size;\n        line-height: @repeater-icon-size;\n        color: @toolbar-color;\n        display: block;\n        margin: -2px 2px;\n    }\n\n    .repeater-item-checkbox .form-check-input {\n        position: relative;\n        top: 3px;\n        left: 5px;\n    }\n\n    a.repeater-item-menu,\n    a.repeater-item-handle {\n        width: @repeater-icon-size;\n        height: @repeater-icon-size;\n        line-height: @repeater-icon-size;\n        display: block;\n        color: @toolbar-color;\n        text-decoration: none;\n        border-radius: 3px;\n        text-align: center;\n        margin: -2px 2px;\n\n        // @deprecated\n        // [class^=\"octo-icon\"] {\n        //     position: relative;\n        //     top: 1px;\n        // }\n\n        .icon-list-reorder {\n            font-size: 24px;\n        }\n    }\n\n    a.repeater-item-handle {\n        cursor: move;\n        &:active {\n            background: @toolbar-hover-bg;\n        }\n    }\n\n    .repeater-item-dropdown.open a.repeater-item-menu,\n    a.repeater-item-menu:hover {\n        color: @toolbar-hover-color;\n        background: @toolbar-hover-bg;\n    }\n\n    .repeater-item-dropdown {\n        padding-right: 3px;\n    }\n}\n\n.form-group.span-adaptive {\n    > .field-repeater {\n        position: absolute;\n        height: 100%;\n        width: 100%;\n        // background: @primary-bg;\n        padding: @padding-standard;\n        overflow: auto;\n\n        &[data-external-toolbar-app-state] {\n            > .field-repeater-toolbar {\n                display: none !important;\n            }\n\n            > .field-repeater-builder {\n                > .field-repeater-toolbar {\n                    display: none !important;\n                }\n\n                > .field-repeater-groups {\n                    padding-top: 0 !important;\n                }\n            }\n        }\n\n        &.repeater-empty {\n            background-image: url('../../../../../backend/assets/images/no-blocks.svg');\n            background-repeat: no-repeat;\n            background-position: center center;\n        }\n    }\n}\n\n// Fixes popups in fullscreen mode getting blocked by the overflow\nbody.component-backend-document-fullscreen {\n    .form-group.span-adaptive {\n        > .field-repeater {\n            overflow: inherit;\n        }\n    }\n}\n\n.field-repeater.repeater-mode-builder {\n    display: flex;\n\n    > ul.field-repeater-items {\n        flex-grow: 1;\n\n        > li {\n            display: none;\n            &.is-selected {\n                display: block;\n            }\n        }\n    }\n\n    > .field-repeater-builder {\n        width: 250px;\n        padding-right: 20px;\n        flex-shrink: 0;\n        flex-basis: 250px;\n    }\n}\n\n@media (max-width: @form-breakpoint-max) {\n    .field-repeater.repeater-mode-builder {\n        flex-direction: column;\n\n        > .field-repeater-builder {\n            width: 100%;\n            padding-right: 0;\n            flex-basis: auto;\n\n            > ul {\n                overflow-x: auto;\n                white-space: nowrap;\n                margin-bottom: 5px;\n            }\n\n            > ul > li {\n                .group-title,\n                .group-description {\n                    overflow: hidden;\n                    text-overflow: ellipsis;\n                }\n            }\n\n            > ul > li.field-repeater-group {\n                width: 250px;\n                display: inline-block;\n                vertical-align: top;\n                margin-right: 10px;\n                margin-bottom: 5px;\n            }\n        }\n    }\n}\n\n// Group palette sizing\n.field-repeater-selection-list {\n    width: 300px;\n}\n\n@media (max-width: @screen-sm) {\n    .field-repeater-selection-list {\n        width: auto;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/assets/less/repeater.toolbar.less",
    "content": ".field-repeater > .field-repeater-builder > .field-repeater-toolbar,\n.field-repeater > .field-repeater-toolbar {\n    position: relative;\n    border: 1px dashed @dropdown-trigger-border;\n    border-radius: 5px;\n    background: @dropdown-trigger-bg;\n    display: inline-block;\n\n    > button {\n        color: @dropdown-trigger-color;\n        text-align: center;\n        text-decoration: none;\n        padding: 7px 15px;\n        font-weight: normal;\n        font-size: @font-size-base;\n        display: block;\n        background: transparent;\n        border: none;\n\n        > i {\n            margin-right: 4px;\n            margin-left: -2px;\n            position: relative;\n            top: 1px;\n        }\n    }\n\n    &:hover, &:focus {\n        background-color: @dropdown-hover-bg;\n        border-color: transparent;\n\n        > button {\n            &, > i {\n                color: @dropdown-hover-color;\n            }\n        }\n    }\n\n    &:active {\n        background-color: @dropdown-active-bg;\n        border-color: transparent;\n\n        > button {\n            &, > i {\n                color: @dropdown-hover-color;\n            }\n        }\n    }\n\n    &.in-progress {\n        border-color: #e0e0e0 !important;\n        background: transparent !important;\n    }\n}\n\n.field-repeater > .field-repeater-builder > .field-repeater-toolbar {\n    display: block;\n    > a, > button {\n        width: 100%;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/partials/_mode_accordion.php",
    "content": "<ul id=\"<?= $this->getId('items') ?>\" class=\"field-repeater-items\">\n    <?php foreach ($formWidgets as $index => $widget): ?>\n        <?= $this->makePartial('repeater_item', [\n            'widget' => $widget,\n            'indexValue' => $index\n        ]) ?>\n    <?php endforeach ?>\n</ul>\n\n<?php if (!$this->previewMode): ?>\n    <?= $this->makePartial('repeater_toolbar') ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/partials/_mode_builder.php",
    "content": "<div class=\"field-repeater-builder\">\n    <?php if (!$this->previewMode): ?>\n        <?= $this->makePartial('repeater_toolbar') ?>\n    <?php endif ?>\n\n    <ul class=\"field-repeater-groups\"></ul>\n</div>\n\n<ul id=\"<?= $this->getId('items') ?>\" class=\"field-repeater-items\">\n    <?php foreach ($formWidgets as $index => $widget): ?>\n        <?= $this->makePartial('repeater_item', [\n            'widget' => $widget,\n            'indexValue' => $index\n        ]) ?>\n    <?php endforeach ?>\n</ul>\n\n<script type=\"text/template\" data-group-template>\n    <li\n        class=\"field-repeater-group\"\n        data-repeater-index\n        data-repeater-group\n    >\n        <div class=\"group-controls\" data-group-controls></div>\n        <span class=\"group-image\" data-group-image><i></i></span>\n        <span class=\"group-title\" data-group-title></span>\n        <span class=\"group-description\" data-group-description></span>\n    </li>\n</script>\n\n<script type=\"text/template\" data-group-loading-template>\n    <li class=\"field-repeater-group is-placeholder\">\n        <div class=\"placeholder-glow\">\n            <span class=\"placeholder col-7\"></span>\n            <span class=\"placeholder col-4\"></span>\n            <span class=\"placeholder col-4\"></span>\n            <span class=\"placeholder col-6\"></span>\n            <span class=\"placeholder col-8\"></span>\n        </div>\n    </li>\n</script>\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/partials/_repeater.php",
    "content": "<div\n    class=\"field-repeater repeater-mode-<?= $displayMode ?> <?= $useGroups ? 'is-grouped' : 'is-singular' ?>\"\n    data-control=\"repeater<?= $displayMode ?>\"\n    <?= $titleFrom ? 'data-title-from=\"'.$titleFrom.'\"' : '' ?>\n    <?= $minItems ? 'data-min-items=\"'.$minItems.'\"' : '' ?>\n    <?= $maxItems ? 'data-max-items=\"'.$maxItems.'\"' : '' ?>\n    data-use-reorder=\"<?= $showReorder ?>\"\n    data-items-expanded=\"<?= $itemsExpanded ?>\"\n    data-sortable-handle=\".<?= $this->getId('items') ?>-handle\"\n    data-remove-handler=\"<?= $this->getEventHandler('onRemoveItem') ?>\"\n    data-remove-confirm=\"<?= e(trans('backend::lang.form.action_confirm')) ?>\"\n    data-use-duplicate=\"<?= $showDuplicate ?>\"\n    data-duplicate-handler=\"<?= $this->getEventHandler('onDuplicateItem') ?>\"\n    data-default-title=\"<?= e(trans('backend::lang.page.untitled')) ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n>\n    <!-- Passable fields -->\n    <input type=\"hidden\" name=\"<?= $name ?>\" value=\"\" data-repeater-pointer-input disabled />\n    <input type=\"hidden\" name=\"<?= $this->alias ?>_loaded\" value=\"1\" />\n\n    <?php if ($displayMode === 'builder'): ?>\n        <?= $this->makePartial('mode_builder') ?>\n    <?php else: ?>\n        <?= $this->makePartial('mode_accordion') ?>\n    <?php endif ?>\n\n    <?php if (!$this->previewMode): ?>\n        <?= $this->makePartial('template_item_menu') ?>\n\n        <?php if ($useGroups): ?>\n            <?= $this->makePartial('template_group_palette') ?>\n        <?php endif ?>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/partials/_repeater_item.php",
    "content": "<?php\n    $groupCode = $useGroups ? $this->getGroupCodeFromIndex($indexValue) : '';\n    $itemTitle = $useGroups ? $this->getGroupItemConfig($groupCode, 'name') : '';\n    $itemIcon = $useGroups ? $this->getGroupItemConfig($groupCode, 'icon') : 'icon-sticky-note';\n    $titleFrom = $useGroups ? $this->getGroupItemConfig($groupCode, 'titleFrom') : '';\n    $itemDescription = $useGroups ? $this->getGroupItemConfig($groupCode, 'description') : '';\n    $useTabs = $useGroups ? $this->getGroupItemConfig($groupCode, 'useTabs', $this->useTabs) : $this->useTabs;\n?>\n<li\n    <?= $itemTitle ? 'data-item-title=\"'.e(__($itemTitle)).'\"' : '' ?>\n    <?= $itemIcon ? 'data-item-icon=\"'.e($itemIcon).'\"' : '' ?>\n    <?= $itemDescription ? 'data-item-description=\"'.e(__($itemDescription)).'\"' : '' ?>\n    <?= $titleFrom ? 'data-title-from=\"'.$titleFrom.'\"' : '' ?>\n    class=\"field-repeater-item\"\n    data-repeater-index=\"<?= $indexValue ?>\"\n    data-repeater-group=\"<?= $groupCode ?>\"\n>\n    <div class=\"repeater-header\">\n        <div class=\"repeater-item-title\">\n            <?= $itemTitle ? e(__($itemTitle)) : '' ?>\n        </div>\n        <?php if (!$this->previewMode): ?>\n            <div class=\"repeater-item-checkbox\">\n                <input\n                    class=\"form-check-input\"\n                    type=\"checkbox\"\n                    name=\"checked[]\"\n                    id=\"<?= $this->getId('item'.$indexValue) ?>\"\n                    value=\"\"\n                    title=\"<?= e(trans('backend::lang.list.check')) ?>\"\n                />\n            </div>\n            <div class=\"repeater-item-dropdown dropdown\">\n                <a href=\"javascript:;\" class=\"repeater-item-menu\" data-bs-toggle=\"dropdown\">\n                    <i class=\"icon-cog\"></i>\n                </a>\n                <ul class=\"dropdown-menu dropdown-menu-right\" role=\"menu\"></ul>\n            </div>\n            <?php if ($showReorder): ?>\n                <div class=\"repeater-item-reorder\">\n                    <a href=\"javascript:;\" class=\"repeater-item-handle <?= $this->getId('items') ?>-handle\">\n                        <i class=\"icon-list-reorder\"></i>\n                    </a>\n                </div>\n            <?php endif ?>\n        <?php else: ?>\n            <div class=\"repeater-item-collapse\">\n                <a href=\"javascript:;\" class=\"repeater-item-menu is-closed\" data-repeater-expand>\n                    <i class=\"icon-angle-down\"></i>\n                </a>\n                <a href=\"javascript:;\" class=\"repeater-item-menu is-open\" data-repeater-collapse>\n                    <i class=\"icon-angle-up\"></i>\n                </a>\n            </div>\n        <?php endif ?>\n    </div>\n    <div class=\"repeater-content\"\n        data-control=\"formwidget\"\n        data-refresh-handler=\"<?= $this->getEventHandler('onRefresh') ?>\"\n        data-refresh-data=\"'_repeater_index': '<?= $indexValue ?>', '_repeater_group': '<?= $groupCode ?>'\"\n    >\n        <?= $widget->render([\n            'section' => $useTabs ? 'secondary' : 'outside',\n            'useContainer' => false\n        ]) ?>\n        <input type=\"hidden\" name=\"<?= $widget->arrayName ?>[_index]\" value=\"<?= $indexValue ?>\" />\n        <?php if ($useGroups): ?>\n            <input type=\"hidden\" name=\"<?= $widget->arrayName ?>[<?= $groupKeyFrom ?>]\" value=\"<?= $groupCode ?>\" />\n        <?php endif ?>\n    </div>\n</li>\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/partials/_repeater_toolbar.php",
    "content": "<div class=\"field-repeater-toolbar\">\n    <?php if ($useGroups): ?>\n        <button\n            type=\"button\"\n            data-repeater-cmd=\"add-group\"\n            data-attach-loading>\n            <i class=\"icon-add-bold\"></i>\n            <?= e(__($prompt)) ?>\n        </button>\n    <?php else: ?>\n        <button\n            type=\"button\"\n            data-repeater-cmd=\"add\"\n            data-request=\"<?= $this->getEventHandler('onAddItem') ?>\"\n            data-attach-loading>\n            <i class=\"icon-add-bold\"></i>\n            <?= e(__($prompt)) ?>\n        </button>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/partials/_template_group_palette.php",
    "content": "<script type=\"text/template\" data-group-palette-template>\n    <div class=\"popover-head\">\n        <h3><?= e(__($prompt)) ?></h3>\n        <button type=\"button\" class=\"btn-close\"\n            data-dismiss=\"popover\"\n            aria-label=\"<?= __(\"Close\") ?>\"></button>\n    </div>\n    <div class=\"popover-fixed-height field-repeater-selection-list\">\n        <div class=\"control-scrollpad\" data-control=\"scrollpad\">\n            <div class=\"scroll-wrapper\">\n\n                <div class=\"control-filelist filelist-hero\" data-control=\"filelist\">\n                    <ul>\n                        <?php foreach ($groupDefinitions as $item): ?>\n                            <li class=\"<?= $item['description'] ? 'has-description' : 'no-description' ?>\">\n                                <a\n                                    href=\"javascript:;\"\n                                    data-repeater-add\n                                    data-request=\"<?= $this->getEventHandler('onAddItem') ?>\"\n                                    data-request-data=\"_repeater_group: '<?= $item['code'] ?>'\">\n                                    <i class=\"list-icon <?= $item['icon'] ?>\"></i>\n                                    <span class=\"title\"><?= e(__($item['name'])) ?></span>\n                                    <?php if ($item['description']): ?>\n                                        <i class=\"list-description icon-info-circle\" title=\"<?= e(__($item['description'])) ?>\" data-bs-toggle=\"tooltip\"></i>\n                                    <?php endif ?>\n                                    <span class=\"borders\"></span>\n                                </a>\n                            </li>\n                        <?php endforeach ?>\n                    </ul>\n                </div>\n\n            </div>\n        </div>\n    </div>\n</script>\n"
  },
  {
    "path": "modules/backend/formwidgets/repeater/partials/_template_item_menu.php",
    "content": "<script type=\"text/template\" data-item-menu-template>\n    <?php if ($showDuplicate): ?>\n        <li role=\"presentation\">\n            <a\n                data-repeater-duplicate\n                role=\"menuitem\"\n                href=\"javascript:;\"\n                tabindex=\"-1\">\n                <i class=\"icon-copy\"></i>\n                <?= __(\"Duplicate\") ?>\n            </a>\n        </li>\n        <li role=\"separator\" class=\"divider\"></li>\n    <?php endif ?>\n    <li role=\"presentation\">\n        <a\n            data-repeater-expand\n            role=\"menuitem\"\n            href=\"javascript:;\"\n            tabindex=\"-1\">\n            <i class=\"icon-expand\"></i>\n            <?= __(\"Expand\") ?>\n        </a>\n    </li>\n    <li role=\"presentation\">\n        <a\n            data-repeater-collapse\n            role=\"menuitem\"\n            href=\"javascript:;\"\n            tabindex=\"-1\">\n            <i class=\"icon-collapse\"></i>\n            <?= __(\"Collapse\") ?>\n        </a>\n    </li>\n    <?php if ($showReorder): ?>\n        <li role=\"presentation\">\n            <a\n                data-repeater-move-up\n                role=\"menuitem\"\n                href=\"javascript:;\"\n                tabindex=\"-1\">\n                <i class=\"icon-long-arrow-up\"></i>\n                <?= __(\"Move Up\") ?>\n            </a>\n        </li>\n        <li role=\"presentation\">\n            <a\n                data-repeater-move-down\n                role=\"menuitem\"\n                href=\"javascript:;\"\n                tabindex=\"-1\">\n                <i class=\"icon-long-arrow-down\"></i>\n                <?= __(\"Move Down\") ?>\n            </a>\n        </li>\n    <?php endif ?>\n    <li role=\"separator\" class=\"divider\"></li>\n    <li role=\"presentation\">\n        <a\n            data-repeater-remove\n            role=\"menuitem\"\n            href=\"javascript:;\"\n            tabindex=\"-1\">\n            <i class=\"icon-delete\"></i>\n            <?= __(\"Remove\") ?>\n        </a>\n    </li>\n</script>\n"
  },
  {
    "path": "modules/backend/formwidgets/richeditor/assets/css/base-styles.css",
    "content": ".clearfix:after{clear:both;content:\"\";display:block;height:0}.hide-by-clipping{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.fr-img-caption.fr-rounded img,img.fr-rounded{border-radius:10px}.fr-img-caption.fr-bordered img,img.fr-bordered{border:5px solid #ccc}img.fr-bordered{box-sizing:content-box}.fr-img-caption.fr-bordered img{box-sizing:border-box}.fr-view{word-wrap:break-word}.fr-view span[style~=\"color:\"] a{color:inherit}.fr-view strong{font-weight:700}.fr-view table{border:none;border-collapse:collapse;empty-cells:show;max-width:100%}.fr-view table td{min-width:5px}.fr-view table.fr-dashed-borders td,.fr-view table.fr-dashed-borders th{border-style:dashed}.fr-view table.fr-alternate-rows tbody tr:nth-child(2n){background:#f5f5f5}.fr-view table td,.fr-view table th{border:1px solid #ddd}.fr-view table td:empty,.fr-view table th:empty{height:20px}.fr-view table td.fr-highlighted,.fr-view table th.fr-highlighted{border:1px double red}.fr-view table td.fr-thick,.fr-view table th.fr-thick{border-width:2px}.fr-view table th{background:var(--bs-emphasis-color,#ccc)}.fr-view hr{clear:both;page-break-after:always;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fr-view .fr-file{position:relative}.fr-view .fr-file:after{content:\"\\1F4CE\";font-weight:400;position:relative}.fr-view pre{word-wrap:break-word;overflow:visible;white-space:pre-wrap}.fr-view[dir=rtl] blockquote{border-left:none;border-right:2px solid #5e35b1;margin-right:0;padding-left:0;padding-right:5px}.fr-view[dir=rtl] blockquote blockquote{border-color:#00bcd4}.fr-view[dir=rtl] blockquote blockquote blockquote{border-color:#43a047}.fr-view blockquote{border-left:2px solid #5e35b1;color:#5e35b1;margin-left:0;padding-left:5px}.fr-view blockquote blockquote{border-color:#00bcd4;color:#00bcd4}.fr-view blockquote blockquote blockquote{border-color:#43a047;color:#43a047}.fr-view span.fr-emoticon{display:inline;font-family:Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols;font-weight:400;line-height:0}.fr-view span.fr-emoticon.fr-emoticon-img{background-repeat:no-repeat!important;display:inline-block;font-size:inherit;height:1em;line-height:1;margin:-.1em .1em .1em;min-height:20px;min-width:20px;vertical-align:middle;width:1em}.fr-view .fr-text-gray{color:#aaa!important}.fr-view .fr-text-bordered{border-bottom:1px solid #222;border-top:1px solid #222;padding:10px 0}.fr-view .fr-text-spaced{letter-spacing:1px}.fr-view .fr-text-uppercase{text-transform:uppercase}.fr-view .fr-class-highlighted{background-color:#ff0}.fr-view .fr-class-code{background:#f5f5f5;border-color:#ccc;border-radius:2px;font-family:Courier New,Courier,monospace;padding:10px}.fr-view .fr-class-transparency{opacity:.5}.fr-view img{max-width:100%;position:relative}.fr-view img.fr-dib{display:block;float:none;margin:5px auto;vertical-align:top}.fr-view img.fr-dib.fr-fil{margin-left:0;text-align:left}.fr-view img.fr-dib.fr-fir{margin-right:0;text-align:right}.fr-view img.fr-dii{display:inline-block;float:none;margin-left:5px;margin-right:5px;max-width:calc(100% - 10px);vertical-align:bottom}.fr-view img.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}.fr-view img.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view span.fr-img-caption{max-width:100%;position:relative}.fr-view span.fr-img-caption.fr-dib{display:block;float:none;margin:5px auto;vertical-align:top}.fr-view span.fr-img-caption.fr-dib.fr-fil{margin-left:0;text-align:left}.fr-view span.fr-img-caption.fr-dib.fr-fir{margin-right:0;text-align:right}.fr-view span.fr-img-caption.fr-dii{display:inline-block;float:none;margin-left:5px;margin-right:5px;max-width:calc(100% - 10px);vertical-align:bottom}.fr-view span.fr-img-caption.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}.fr-view span.fr-img-caption.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view .fr-video{position:relative;text-align:center}.fr-view .fr-video.fr-rv{height:0;overflow:hidden;padding-bottom:56.25%;padding-top:30px}.fr-view .fr-video.fr-rv embed,.fr-view .fr-video.fr-rv object,.fr-view .fr-video.fr-rv>iframe{height:100%;left:0;position:absolute!important;top:0;width:100%}.fr-view .fr-video>*{border:none;box-sizing:content-box;max-width:100%}.fr-view .fr-video.fr-dvb{clear:both;display:block}.fr-view .fr-video.fr-dvb.fr-fvl{text-align:left}.fr-view .fr-video.fr-dvb.fr-fvr{text-align:right}.fr-view .fr-video.fr-dvi{display:inline-block}.fr-view .fr-video.fr-dvi.fr-fvl{float:left}.fr-view .fr-video.fr-dvi.fr-fvr{float:right}.fr-view a.fr-strong{font-weight:700}.fr-view a.fr-green{color:green}.fr-view .fr-img-caption{text-align:center}.fr-view .fr-img-caption .fr-img-wrap{display:inline-block;margin:auto;padding:0;text-align:center;width:100%}.fr-view .fr-img-caption .fr-img-wrap img{display:block;margin:auto;width:100%}.fr-view .fr-img-caption .fr-img-wrap>span{box-sizing:border-box;display:block;font-size:14px;font-weight:400;margin:auto;opacity:.9;padding:5px 5px 10px;text-align:center;width:100%}.fr-view button.fr-rounded,.fr-view input.fr-rounded,.fr-view textarea.fr-rounded{border-radius:10px}.fr-view button.fr-large,.fr-view input.fr-large,.fr-view textarea.fr-large{font-size:24px}a.fr-view.fr-strong{font-weight:700}a.fr-view.fr-green{color:green}img.fr-view{max-width:100%;position:relative}img.fr-view.fr-dib{display:block;float:none;margin:5px auto;vertical-align:top}img.fr-view.fr-dib.fr-fil{margin-left:0;text-align:left}img.fr-view.fr-dib.fr-fir{margin-right:0;text-align:right}img.fr-view.fr-dii{display:inline-block;float:none;margin-left:5px;margin-right:5px;max-width:calc(100% - 10px);vertical-align:bottom}img.fr-view.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}img.fr-view.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}span.fr-img-caption.fr-view{max-width:100%;position:relative}span.fr-img-caption.fr-view.fr-dib{display:block;float:none;margin:5px auto;vertical-align:top}span.fr-img-caption.fr-view.fr-dib.fr-fil{margin-left:0;text-align:left}span.fr-img-caption.fr-view.fr-dib.fr-fir{margin-right:0;text-align:right}span.fr-img-caption.fr-view.fr-dii{display:inline-block;float:none;margin-left:5px;margin-right:5px;max-width:calc(100% - 10px);vertical-align:bottom}span.fr-img-caption.fr-view.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}span.fr-img-caption.fr-view.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view .oc-text-gray{color:#aaa!important}.fr-view .oc-text-bordered{border-bottom:1px solid #222;border-top:1px solid #222;padding:10px 0}.fr-view .oc-text-spaced{letter-spacing:1px}.fr-view .oc-text-uppercase{text-transform:uppercase}.fr-view .oc-class-highlighted{background-color:#ff0}.fr-view .oc-class-code{background:#f5f5f5;border-color:#ccc;border-radius:2px;font-family:Courier New,Courier,monospace;padding:10px}.fr-view .oc-class-transparency{opacity:.5}.fr-view a.oc-link-strong{font-weight:700}.fr-view a.oc-link-green{color:green}.fr-view table.oc-dashed-borders td,.fr-view table.oc-dashed-borders th{border-style:dashed}.fr-view table.oc-alternate-rows tbody tr:nth-child(2n){background:#f5f5f5}.fr-view table td.oc-cell-highlighted,.fr-view table th.oc-cell-highlighted{border:1px double red}.fr-view table td.oc-cell-thick-border,.fr-view table th.oc-cell-thick-border{border-width:2px}.fr-view img.oc-img-rounded{background-clip:padding-box;border-radius:100%}.fr-view img.oc-img-bordered{border:10px solid #ccc;box-sizing:content-box}\n"
  },
  {
    "path": "modules/backend/formwidgets/richeditor/assets/css/richeditor.css",
    "content": ".clearfix:after{clear:both;content:\"\";display:block;height:0}.hide-by-clipping{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.fr-element,.fr-element:focus{outline:0 solid transparent}.fr-view.fr-element-scroll-visible{overflow-x:visible!important}.fr-box.fr-basic .fr-element{box-sizing:border-box;color:var(--bs-body-color,#000);min-height:60px;overflow-x:auto;padding:20px}.fr-box.fr-basic.fr-rtl .fr-element{text-align:right}.fr-element{background:transparent;position:relative;-webkit-user-select:auto;z-index:2}.fr-element a{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.fr-element.fr-disabled{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fr-element [contenteditable=true]{outline:0 solid transparent}.fr-box a.fr-floating-btn{background:#fff;border:none;border-radius:100%;box-sizing:border-box;color:var(--bs-primary,#1e88e5);display:block;height:32px;left:0;line-height:32px;outline:none;text-align:center;top:0;transform:scale(0);transition:background .2s ease 0s,color .2s ease 0s,transform .2s ease 0s;width:32px}.fr-box a.fr-floating-btn svg{fill:var(--bs-primary,#1e88e5);transition:transform .2s ease 0s}.fr-box a.fr-floating-btn i,.fr-box a.fr-floating-btn svg{font-size:14px;line-height:32px}.fr-box a.fr-floating-btn.fr-btn+.fr-btn{margin-left:10px}.fr-box a.fr-floating-btn:hover{background:#ebebeb;cursor:pointer}.fr-box a.fr-floating-btn:hover svg{fill:var(--bs-primary,#1e88e5)}.fr-box .fr-visible a.fr-floating-btn{transform:scale(1)}iframe.fr-iframe{border:none;box-sizing:border-box;display:block;position:relative;width:100%;z-index:2}.fr-wrapper{position:relative;z-index:1}.fr-wrapper:after,.fr-wrapper:before{content:\" \";display:table}.fr-wrapper:after{clear:both;content:\"\";display:block;height:0}.fr-wrapper .fr-placeholder{color:#aaa;display:none;font-size:12px;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:1}.fr-wrapper.show-placeholder .fr-placeholder{display:block}.fr-wrapper ::-moz-selection{background:#b5d6fd;color:#000}.fr-wrapper ::selection{background:#b5d6fd;color:#000}.fr-box.fr-basic .fr-wrapper{background:var(--oc-form-control-bg,#fff);border:0;border-top:0;left:0;top:0}.fr-box.fr-basic.fr-top .fr-wrapper{border-radius:0 0 4px 4px;border-top:0}.fr-box.fr-basic.fr-bottom .fr-wrapper{border-bottom:0;border-radius:4px 4px 0 0}@media (min-width:992px){.fr-box.fr-document{min-width:21cm}.fr-box.fr-document .fr-wrapper{background:#efefef;min-width:21cm;padding:30px;text-align:center}.fr-box.fr-document .fr-wrapper .fr-element{background:#fff;margin:auto;min-height:26cm!important;overflow:visible;padding:1cm 2cm;text-align:left;width:21cm}.fr-box.fr-document .fr-wrapper .fr-element hr{background:#efefef;border:none;height:1cm;margin-left:-2cm;margin-right:-2cm;outline:none}}.fr-tooltip{text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#536061;border-radius:4px;color:#fff;font-family:sans-serif;font-size:12px;left:0;left:-3000px;line-height:22px;opacity:0;padding:0 8px;position:absolute;top:0;transform:scale(.95);transition:opacity .15s ease-out,transform .15s ease-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2147483647}.fr-tooltip.fr-visible{opacity:1;transform:scale(1)}.fr-popup .fr-btn-wrap,.fr-toolbar .fr-btn-wrap{float:left;position:relative;white-space:nowrap}.fr-popup .fr-btn-wrap.fr-hidden,.fr-toolbar .fr-btn-wrap.fr-hidden{display:none}.fr-popup .fr-command.fr-btn,.fr-toolbar .fr-command.fr-btn{background:transparent;border:0;border-radius:0;box-sizing:border-box;color:var(--oc-toolbar-color,#222);cursor:pointer;float:left;height:38px;line-height:1;margin:0 2px;-moz-outline:0;outline:0;padding:0;position:relative;text-align:left;text-decoration:none;transition:background .2s ease 0s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:38px;z-index:2}.fr-popup .fr-command.fr-btn::-moz-focus-inner,.fr-toolbar .fr-command.fr-btn::-moz-focus-inner{border:0;padding:0}.fr-popup .fr-command.fr-btn.fr-btn-text,.fr-toolbar .fr-command.fr-btn.fr-btn-text{width:auto}.fr-popup .fr-command.fr-btn i,.fr-popup .fr-command.fr-btn svg,.fr-toolbar .fr-command.fr-btn i,.fr-toolbar .fr-command.fr-btn svg{display:block;float:none;font-size:14px;margin:12px;text-align:center;width:14px}.fr-popup .fr-command.fr-btn span.fr-sr-only,.fr-toolbar .fr-command.fr-btn span.fr-sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.fr-popup .fr-command.fr-btn span,.fr-toolbar .fr-command.fr-btn span{display:block;float:left;font-size:14px;font-weight:700;height:17px;line-height:17px;min-width:34px;overflow:hidden;padding:0 2px;text-overflow:ellipsis;white-space:nowrap}.fr-popup .fr-command.fr-btn img,.fr-toolbar .fr-command.fr-btn img{margin:12px;width:14px}.fr-popup .fr-command.fr-btn.fr-active,.fr-toolbar .fr-command.fr-btn.fr-active{background:transparent;color:var(--bs-primary,#1e88e5)}.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection,.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection{width:auto}.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection span,.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection span{font-weight:400}.fr-popup .fr-command.fr-btn.fr-dropdown i,.fr-popup .fr-command.fr-btn.fr-dropdown img,.fr-popup .fr-command.fr-btn.fr-dropdown span,.fr-popup .fr-command.fr-btn.fr-dropdown svg,.fr-toolbar .fr-command.fr-btn.fr-dropdown i,.fr-toolbar .fr-command.fr-btn.fr-dropdown img,.fr-toolbar .fr-command.fr-btn.fr-dropdown span,.fr-toolbar .fr-command.fr-btn.fr-dropdown svg{margin-left:8px;margin-right:16px}.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active,.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active{background:var(--oc-primary-bg,#d6d6d6);color:var(--bs-primary,#1e88e5)}.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus,.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover,.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus,.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover{background:var(--oc-primary-bg,#d6d6d6)!important;color:var(--oc-toolbar-color,#222)!important}.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus:after,.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover:after,.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus:after,.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover:after{border-top-color:var(--oc-toolbar-color,#222)!important}.fr-popup .fr-command.fr-btn.fr-dropdown:after,.fr-toolbar .fr-command.fr-btn.fr-dropdown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid var(--oc-toolbar-color,#222);content:\"\";height:0;position:absolute;right:4px;top:17px;width:0}.fr-popup .fr-command.fr-btn.fr-disabled,.fr-toolbar .fr-command.fr-btn.fr-disabled{color:var(--oc-form-control-disabled-color,#bdbdbd);cursor:default}.fr-popup .fr-command.fr-btn.fr-disabled:after,.fr-toolbar .fr-command.fr-btn.fr-disabled:after{border-top-color:var(--oc-form-control-disabled-color,#bdbdbd)!important}.fr-popup .fr-command.fr-btn.fr-hidden,.fr-toolbar .fr-command.fr-btn.fr-hidden{display:none}.fr-popup.fr-disabled .fr-btn,.fr-popup.fr-disabled .fr-btn.fr-active,.fr-toolbar.fr-disabled .fr-btn,.fr-toolbar.fr-disabled .fr-btn.fr-active{color:var(--oc-form-control-disabled-color,#bdbdbd)}.fr-popup.fr-disabled .fr-btn.fr-active.fr-dropdown:after,.fr-popup.fr-disabled .fr-btn.fr-dropdown:after,.fr-toolbar.fr-disabled .fr-btn.fr-active.fr-dropdown:after,.fr-toolbar.fr-disabled .fr-btn.fr-dropdown:after{border-top-color:var(--oc-form-control-disabled-color,#bdbdbd)}.fr-popup.fr-rtl .fr-btn-wrap,.fr-popup.fr-rtl .fr-command.fr-btn,.fr-toolbar.fr-rtl .fr-btn-wrap,.fr-toolbar.fr-rtl .fr-command.fr-btn{float:right}.fr-toolbar.fr-inline>.fr-btn-wrap:not(.fr-hidden),.fr-toolbar.fr-inline>.fr-command.fr-btn:not(.fr-hidden){display:inline-flex;float:none}.fr-desktop .fr-command:not(.btn).fr-btn-hover,.fr-desktop .fr-command:not(.btn).fr-expanded,.fr-desktop .fr-command:not(.btn):focus,.fr-desktop .fr-command:not(.btn):hover{background:var(--oc-toolbar-hover-bg,#ebebeb);color:var(--oc-toolbar-hover-color,#222);outline:0}.fr-desktop .fr-command:not(.btn).fr-btn-hover:after,.fr-desktop .fr-command:not(.btn).fr-expanded:after,.fr-desktop .fr-command:not(.btn):focus:after,.fr-desktop .fr-command:not(.btn):hover:after{border-top-color:var(--oc-toolbar-hover-color,#222)!important}.fr-desktop .fr-command:not(.btn).fr-selected{background:var(--oc-primary-bg,#d6d6d6);color:var(--oc-toolbar-color,#222)}.fr-desktop .fr-command:not(.btn).fr-active.fr-btn-hover,.fr-desktop .fr-command:not(.btn).fr-active.fr-expanded,.fr-desktop .fr-command:not(.btn).fr-active:focus,.fr-desktop .fr-command:not(.btn).fr-active:hover{background:var(--oc-toolbar-hover-bg,#ebebeb);color:var(--bs-primary,#1e88e5)}.fr-desktop .fr-command:not(.btn).fr-active.fr-selected{background:var(--oc-primary-bg,#d6d6d6);color:var(--bs-primary,#1e88e5)}.fr-desktop .fr-command:not(.btn).fr-disabled.fr-selected,.fr-desktop .fr-command:not(.btn).fr-disabled:focus,.fr-desktop .fr-command:not(.btn).fr-disabled:hover,.fr-desktop.fr-disabled .fr-command.fr-selected,.fr-desktop.fr-disabled .fr-command:focus,.fr-desktop.fr-disabled .fr-command:hover,.fr-popup.fr-mobile .fr-command.fr-blink,.fr-toolbar.fr-mobile .fr-command.fr-blink{background:transparent}.fr-command.fr-btn.fr-options{margin-left:-5px;width:16px}.fr-command.fr-btn.fr-options.fr-btn-hover,.fr-command.fr-btn.fr-options:focus,.fr-command.fr-btn.fr-options:hover{border-left:1px solid var(--oc-toolbar-border,#fafafa)}.fr-command.fr-btn+.fr-dropdown-menu{-webkit-overflow-scrolling:touch;zoom:1;border:1px solid var(--bs-border-color);border-radius:0 0 4px 4px;bottom:auto;box-shadow:-2px 2px 5px rgba(67,86,100,.12);display:inline-block;height:auto;overflow:hidden;position:absolute;right:auto;z-index:4}.fr-command.fr-btn+.fr-dropdown-menu.test-height .fr-dropdown-wrapper{height:auto;max-height:275px;transition:none}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper{background:var(--oc-toolbar-bg,#fff);box-sizing:border-box;display:inline-block;float:left;height:0;margin:0 auto auto;margin-top:0!important;max-height:0;padding:0;position:relative;text-align:left;transition:max-height .2s ease 0s}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content{max-height:275px;overflow:auto;position:relative}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list{list-style-type:none;margin:0;padding:0}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li{font-size:14px;margin:0;padding:0}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a{color:inherit;cursor:pointer;display:block;line-height:200%;padding:0 24px;text-decoration:none;white-space:nowrap}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-active{background:var(--oc-toolbar-hover-bg);color:var(--oc-toolbar-hover-color)}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-disabled{color:var(--oc-form-control-disabled-color);cursor:default}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a:hover{background:var(--oc-dropdown-active-bg);color:var(--oc-dropdown-active-color)}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a .fr-shortcut{float:right;font-weight:700;margin-left:32px;opacity:.75}.fr-command.fr-btn:not(.fr-active)+.fr-dropdown-menu{left:-3000px!important}.fr-command.fr-btn.fr-active+.fr-dropdown-menu{display:inline-block}.fr-command.fr-btn.fr-active+.fr-dropdown-menu .fr-dropdown-wrapper{height:auto;max-height:275px}.fr-bottom>.fr-command.fr-btn+.fr-dropdown-menu{border-radius:4px 4px 0 0}.fr-popup.fr-rtl .fr-dropdown-wrapper,.fr-toolbar.fr-rtl .fr-dropdown-wrapper{text-align:right!important}body.prevent-scroll{overflow:hidden}body.prevent-scroll.fr-mobile{-webkit-overflow-scrolling:touch;position:fixed}.fr-modal{text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;bottom:0;color:var(--oc-toolbar-color,#222);font-family:sans-serif;left:0;line-height:1.2;overflow-x:auto;overflow-y:scroll;position:fixed;right:0;text-align:center;top:0;width:100%;z-index:2147483640}.fr-modal.fr-middle .fr-modal-wrapper{left:50%;margin:0 auto;position:absolute;top:50%;transform:translate(-50%,-50%)}.fr-modal .fr-modal-wrapper{background:#fff;border:0;border-radius:4px;border-top:1px solid var(--oc-toolbar-border,#222);display:inline-block;margin:20px auto;min-width:300px;overflow:hidden;position:relative;width:90%}@media (min-width:768px) and (max-width:991px){.fr-modal .fr-modal-wrapper{margin:30px auto;width:70%}}@media (min-width:992px){.fr-modal .fr-modal-wrapper{margin:50px auto;width:960px}}.fr-modal .fr-modal-wrapper .fr-modal-head{background:var(--oc-toolbar-bg,#fff);border-bottom:0;min-height:42px;overflow:hidden;position:absolute;transition:height .2s ease 0s;width:100%;z-index:3}.fr-modal .fr-modal-wrapper .fr-modal-head .fr-modal-close{box-sizing:content-box;color:var(--oc-toolbar-color,#222);cursor:pointer;font-size:30px;line-height:18px;padding:12px;position:absolute;right:0;top:0;transition:color .2s ease 0s;width:20px}.fr-modal .fr-modal-wrapper .fr-modal-head h4{display:inline-block;float:left;font-size:18px;font-weight:400;line-height:18px;margin:0;padding:12px 10px}.fr-modal .fr-modal-wrapper div.fr-modal-body{height:100%;min-height:150px;overflow-y:scroll;padding-bottom:10px}.fr-modal .fr-modal-wrapper div.fr-modal-body:focus{outline:0}.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command{background:none;border:none;border-radius:4px;color:var(--bs-primary,#1e88e5);cursor:pointer;font-size:16px;height:36px;line-height:1;outline:none;padding:10px;text-decoration:none;transition:background .2s ease 0s}.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command+button{margin-left:24px}.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:focus,.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:hover{background:#ebebeb;color:var(--bs-primary,#1e88e5)}.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:active{background:var(--oc-primary-bg,#d6d6d6);color:var(--bs-primary,#1e88e5)}.fr-modal .fr-modal-wrapper div.fr-modal-body button::-moz-focus-inner{border:0}.fr-desktop .fr-modal-wrapper .fr-modal-head i:hover{background:#ebebeb}.fr-overlay{background:#000;bottom:0;left:0;opacity:.5;position:fixed;right:0;top:0;z-index:2147483639}.fr-popup[data-popper-reference-hidden]{pointer-events:none;visibility:hidden}.fr-popup{text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--oc-toolbar-bg,#fff);border:0;border:1px solid var(--oc-toolbar-border,#222);border-radius:4px;box-sizing:border-box;color:var(--oc-toolbar-color,#222);display:none;font-family:sans-serif;line-height:1.2;margin-top:10px;position:absolute;text-align:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2147483635}.fr-popup .fr-input-focus{background:#f5f5f5}.fr-popup.fr-above{border-bottom:1px solid var(--oc-toolbar-border,#222);border-top:0;margin-bottom:10px;margin-top:0}.fr-popup.fr-active{display:block}.fr-popup.fr-hidden{display:none;opacity:0}.fr-popup.fr-empty{display:none!important}.fr-popup .fr-hs{display:block!important}.fr-popup .fr-hs.fr-hidden{display:none!important}.fr-popup .fr-input-line{padding:8px 0;position:relative}.fr-popup .fr-input-line input[type=text],.fr-popup .fr-input-line textarea{-webkit-appearance:none;background-color:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:3px;box-shadow:none;box-sizing:border-box;color:var(--bs-body-color);font-size:12px;height:30px;line-height:1.5;margin:12px 0 0;padding:5px 10px;position:relative;transition:margin .2s ease 0s,border-color .15s ease-in-out;width:100%;z-index:2}.fr-popup .fr-input-line input[type=text]:focus,.fr-popup .fr-input-line textarea:focus{border:1px solid var(--oc-border-focus)}.fr-popup .fr-input-line input[type=text].fr-not-empty,.fr-popup .fr-input-line textarea.fr-not-empty{margin-top:12px}textarea.fr-popup .fr-input-line input[type=text],textarea.fr-popup .fr-input-line textarea{height:auto}.fr-popup .fr-input-line input+label,.fr-popup .fr-input-line textarea+label{color:var(--bs-body-color,grey);display:block;font-size:12px;left:0;position:absolute;top:0;width:100%;z-index:3}.fr-popup input,.fr-popup textarea{border-radius:0;outline:none;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.fr-popup textarea{height:auto;resize:none}.fr-popup .fr-buttons{border-bottom:1px solid var(--bs-border-color);line-height:0;padding:0 2px;white-space:nowrap}.fr-popup .fr-buttons:after,.fr-popup .fr-buttons:before{content:\" \";display:table}.fr-popup .fr-buttons:after{clear:both;content:\"\";display:block;height:0}.fr-popup .fr-buttons .fr-btn{display:inline-block;float:none}.fr-popup .fr-buttons .fr-btn i{float:left}.fr-popup .fr-buttons .fr-separator{display:inline-block;float:none}.fr-popup .fr-layer{box-sizing:border-box;display:none;margin:10px;width:225px}@media (min-width:768px){.fr-popup .fr-layer{width:300px}}.fr-popup .fr-layer.fr-active{display:inline-block}.fr-popup .fr-action-buttons{text-align:right;z-index:7}.fr-popup .fr-checkbox{box-sizing:content-box;display:inline-block;height:16px;line-height:1;position:relative;vertical-align:middle;width:16px}.fr-popup .fr-checkbox svg{display:none;height:10px;margin-left:2px;margin-top:2px;width:10px}.fr-popup .fr-checkbox span{border:1px solid var(--bs-border-color);border-radius:4px;box-sizing:border-box;display:inline-block;height:16px;position:relative;transition:background .2s ease 0s,border-color .2s ease 0s;width:16px;z-index:1}.fr-popup .fr-checkbox input{border:0;cursor:pointer;height:16px;left:1px;margin:0;opacity:0;padding:0;position:absolute;top:1px;width:16px;z-index:2}.fr-popup .fr-checkbox input:checked+span{background:var(--bs-primary,#1e88e5);border-color:var(--bs-primary,#1e88e5)}.fr-popup .fr-checkbox input:checked+span svg{display:block}.fr-popup .fr-checkbox input:focus+span{border-color:var(--bs-primary,#1e88e5)}.fr-popup .fr-checkbox-line{font-size:12px;line-height:1.4px;margin-top:10px}.fr-popup .fr-checkbox-line label{cursor:pointer;margin:0 5px;vertical-align:middle}.fr-popup.fr-rtl{direction:rtl;text-align:right}.fr-popup.fr-rtl .fr-action-buttons{text-align:left}.fr-popup.fr-rtl .fr-input-line input+label,.fr-popup.fr-rtl .fr-input-line textarea+label{left:auto;right:0}.fr-popup.fr-rtl .fr-buttons .fr-separator.fr-vs{float:right}.fr-popup .fr-arrow{border-bottom:7px solid var(--oc-toolbar-border,#222);border-left:7px solid transparent;border-right:7px solid transparent;display:inline-block;height:0;left:50%;margin-left:-7px;position:absolute;top:-7px;width:0}.fr-popup.fr-above .fr-arrow{border-bottom:0;border-top:7px solid var(--oc-toolbar-border,#222);bottom:-7px;top:auto}.fr-text-edit-layer{box-sizing:border-box;display:block!important;width:250px}.fr-toolbar{text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--oc-toolbar-bg);border:0;border-radius:4px;border-top:1px solid transparent;box-sizing:border-box;color:var(--oc-toolbar-color,#222);font-family:sans-serif;line-height:1.2;padding:0 2px;position:relative;text-align:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:4}.fr-toolbar:after,.fr-toolbar:before{content:\" \";display:table}.fr-toolbar:after{clear:both;content:\"\";display:block;height:0}.fr-toolbar.fr-rtl{text-align:right}.fr-toolbar.fr-inline{display:none;margin-top:10px;position:absolute;white-space:nowrap}.fr-toolbar.fr-inline .fr-arrow{border-bottom:7px solid var(--oc-toolbar-border,#222);border-left:7px solid transparent;border-right:7px solid transparent;display:inline-block;height:0;left:50%;margin-left:-7px;position:absolute;top:-7px;width:0}.fr-toolbar.fr-inline.fr-above{border-bottom:1px solid var(--oc-toolbar-border,#222);border-top:0;margin-top:-10px}.fr-toolbar.fr-inline.fr-above .fr-arrow{border-bottom:0;border-top-color:inherit;border-top-style:solid;border-top-width:7px;bottom:-7px;top:auto}.fr-toolbar.fr-top{border-radius:4px 4px 0 0;top:0}.fr-toolbar.fr-bottom,.fr-toolbar.fr-top{border-bottom:1px solid var(--bs-border-color)}.fr-toolbar.fr-bottom{border-radius:0 0 4px 4px;bottom:0}.fr-separator{background:var(--oc-primary-border,#ebebeb);display:block;float:left;vertical-align:top}.fr-separator+.fr-separator{display:none}.fr-separator.fr-vs{height:34px;margin:2px;width:1px}.fr-separator.fr-hs{clear:both;height:1px;margin:0 2px;width:calc(100% - 4px)}.fr-separator.fr-hidden{display:none!important}.fr-rtl .fr-separator{float:right}.fr-toolbar.fr-inline .fr-separator.fr-hs{float:none}.fr-toolbar.fr-inline .fr-separator.fr-vs{display:inline-block;float:none}.fr-visibility-helper{display:none;margin-left:0!important}@media (min-width:768px){.fr-visibility-helper{margin-left:1px!important}}@media (min-width:992px){.fr-visibility-helper{margin-left:2px!important}}@media (min-width:1200px){.fr-visibility-helper{margin-left:3px!important}}.fr-opacity-0{opacity:0}.fr-box{position:relative}.fr-sticky{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky}.fr-sticky-off{position:relative}.fr-sticky-on{position:fixed}.fr-sticky-on.fr-sticky-ios{left:0;position:absolute;right:0;width:auto!important}.fr-sticky-dummy{display:none}.fr-sticky-box>.fr-sticky-dummy,.fr-sticky-on+.fr-sticky-dummy{display:block}span.fr-sr-only{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}body.fr-fullscreen{height:100%;overflow:hidden;position:fixed;width:100%}body.fr-command.fr-btn[data-cmd=fullscreen]{float:right}.fr-box.fr-fullscreen{bottom:0;left:0;margin:0!important;position:fixed;right:0;top:0;width:auto!important;z-index:300!important}.fr-box.fr-fullscreen .fr-toolbar.fr-top{top:0!important}.fr-box.fr-fullscreen .fr-toolbar.fr-bottom{bottom:0!important}.fr-fullscreen-wrapper{margin:0!important;overflow:visible!important;padding:0!important;width:100%!important;z-index:2147483640!important}textarea.fr-code{background:#fff;border:none;box-sizing:border-box;color:#000;display:none;font-family:Courier New,monospace;font-size:14px;margin:0;outline:none;padding:10px;resize:none;width:100%}.fr-box.fr-rtl textarea.fr-code{direction:rtl}.fr-box .CodeMirror,.fr-box .ace_editor{display:none}.fr-box .ace_editor{bottom:0;left:0;margin:0;position:absolute;right:0;top:0}.fr-box.fr-code-view .ace_editor,.fr-box.fr-code-view textarea.fr-code{display:block}.fr-box.fr-code-view .fr-element,.fr-box.fr-code-view .fr-iframe,.fr-box.fr-code-view .fr-placeholder{display:none}.fr-box.fr-code-view .CodeMirror,.fr-box.fr-inline.fr-code-view .fr-command.fr-btn.html-switch{display:block}.fr-box.fr-inline .fr-command.fr-btn.html-switch{background:#fff;border:0;border-radius:0;box-sizing:border-box;color:var(--oc-toolbar-color,#222);cursor:pointer;display:none;line-height:1;-moz-outline:0;outline:0;padding:12px;position:absolute;right:0;text-align:left;text-decoration:none;top:0;transition:background .2s ease 0s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}.fr-box.fr-inline .fr-command.fr-btn.html-switch i{font-size:14px;text-align:center;width:14px}.fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover{background:var(--oc-toolbar-hover-bg,#ebebeb)}.fr-popup .fr-file-upload-layer{border:2px dashed var(--oc-form-control-disabled-bg,#bdbdbd);box-sizing:border-box;font-size:14px;letter-spacing:1px;line-height:140%;padding:25px 0;position:relative;text-align:center}.fr-popup .fr-file-upload-layer:hover{background:#ebebeb}.fr-popup .fr-file-upload-layer.fr-drop{background:#ebebeb;border-color:var(--bs-primary,#1e88e5)}.fr-popup .fr-file-upload-layer .fr-form{bottom:0;left:0;margin:0!important;opacity:0;overflow:hidden;padding:0!important;position:absolute;right:0;top:0;width:100%!important;z-index:2147483640}.fr-popup .fr-file-upload-layer .fr-form input{bottom:0;cursor:pointer;font-size:400px;height:100%;margin:0;position:absolute;right:0;top:0;width:500%}.fr-popup .fr-file-progress-bar-layer{box-sizing:border-box}.fr-popup .fr-file-progress-bar-layer>h3{font-size:16px;font-weight:400;margin:10px 0}.fr-popup .fr-file-progress-bar-layer>div.fr-action-buttons{display:none}.fr-popup .fr-file-progress-bar-layer>div.fr-loader{background:var(--oc-formdocument-select-bg);height:10px;margin-top:20px;overflow:hidden;position:relative;width:100%}.fr-popup .fr-file-progress-bar-layer>div.fr-loader span{background:var(--bs-primary,#1e88e5);display:block;height:100%;transition:width .2s ease 0s;width:0}.fr-popup .fr-file-progress-bar-layer>div.fr-loader.fr-indeterminate span{-webkit-animation:loading 2s linear infinite;animation:loading 2s linear infinite;position:absolute;top:0;width:30%!important}.fr-popup .fr-file-progress-bar-layer.fr-error>div.fr-loader{display:none}.fr-popup .fr-file-progress-bar-layer.fr-error>div.fr-action-buttons{display:block}.fr-element img{cursor:pointer}.fr-image-resizer{border:1px solid var(--bs-primary,#1e88e5);box-sizing:content-box;display:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}.fr-image-resizer.fr-active{display:block}.fr-image-resizer .fr-handler{background:var(--bs-primary,#1e88e5);border:1px solid #fff;box-sizing:border-box;display:block;position:absolute;z-index:4}.fr-image-resizer .fr-handler.fr-hnw{cursor:nw-resize}.fr-image-resizer .fr-handler.fr-hne{cursor:ne-resize}.fr-image-resizer .fr-handler.fr-hsw{cursor:sw-resize}.fr-image-resizer .fr-handler.fr-hse{cursor:se-resize}.fr-image-resizer .fr-handler{height:12px;width:12px}.fr-image-resizer .fr-handler.fr-hnw{left:-6px;top:-6px}.fr-image-resizer .fr-handler.fr-hne{right:-6px;top:-6px}.fr-image-resizer .fr-handler.fr-hsw{bottom:-6px;left:-6px}.fr-image-resizer .fr-handler.fr-hse{bottom:-6px;right:-6px}@media (min-width:1200px){.fr-image-resizer .fr-handler{height:10px;width:10px}.fr-image-resizer .fr-handler.fr-hnw{left:-5px;top:-5px}.fr-image-resizer .fr-handler.fr-hne{right:-5px;top:-5px}.fr-image-resizer .fr-handler.fr-hsw{bottom:-5px;left:-5px}.fr-image-resizer .fr-handler.fr-hse{bottom:-5px;right:-5px}}.fr-image-overlay{bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:2147483640}.fr-popup .fr-image-upload-layer{border:2px dashed var(--oc-form-control-disabled-bg,#bdbdbd);font-size:14px;letter-spacing:1px;line-height:140%;padding:25px 0;position:relative;text-align:center}.fr-popup .fr-image-upload-layer:hover{background:#ebebeb}.fr-popup .fr-image-upload-layer.fr-drop{background:#ebebeb;border-color:var(--bs-primary,#1e88e5)}.fr-popup .fr-image-upload-layer .fr-form{bottom:0;left:0;margin:0!important;opacity:0;overflow:hidden;padding:0!important;position:absolute;right:0;top:0;width:100%!important;z-index:2147483640}.fr-popup .fr-image-upload-layer .fr-form input{bottom:0;cursor:pointer;font-size:400px;height:100%;margin:0;position:absolute;right:0;top:0;width:500%}.fr-popup .fr-image-progress-bar-layer>h3{font-size:16px;font-weight:400;margin:10px 0}.fr-popup .fr-image-progress-bar-layer>div.fr-action-buttons{display:none}.fr-popup .fr-image-progress-bar-layer>div.fr-loader{background:var(--oc-formdocument-select-bg);height:10px;margin-top:20px;overflow:hidden;position:relative;width:100%}.fr-popup .fr-image-progress-bar-layer>div.fr-loader span{background:var(--bs-primary,#1e88e5);display:block;height:100%;transition:width .2s ease 0s;width:0}.fr-popup .fr-image-progress-bar-layer>div.fr-loader.fr-indeterminate span{-webkit-animation:loading 2s linear infinite;animation:loading 2s linear infinite;position:absolute;top:0;width:30%!important}.fr-popup .fr-image-progress-bar-layer.fr-error>div.fr-loader{display:none}.fr-popup .fr-image-progress-bar-layer.fr-error>div.fr-action-buttons{display:block}.fr-image-size-layer .fr-image-group .fr-input-line{display:inline-block;width:calc(50% - 5px)}.fr-image-size-layer .fr-image-group .fr-input-line+.fr-input-line{margin-left:10px}.fr-uploading{opacity:.4}@keyframes loading{0%{left:-25%}to{left:100%}}@-webkit-keyframes loading{0%{left:-25%}to{left:100%}}.fr-element table td.fr-selected-cell,.fr-element table th.fr-selected-cell{border:1px double var(--bs-primary,#1e88e5)!important}.fr-element table tr{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fr-element table td,.fr-element table th{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.fr-element .fr-no-selection table td,.fr-element .fr-no-selection table th{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fr-table-resizer{cursor:col-resize;display:none;position:absolute;z-index:3}.fr-table-resizer.fr-moving{z-index:2}.fr-table-resizer div{border-right:1px solid var(--bs-primary,#1e88e5);opacity:0}.fr-no-selection{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fr-popup .fr-table-colors-hex-layer{margin:0;padding:10px;width:100%}.fr-popup .fr-table-colors-hex-layer .fr-input-line{float:left;padding:8px 0 0;width:calc(100% - 50px)}.fr-popup .fr-table-colors-hex-layer .fr-action-buttons{float:right;width:50px}.fr-popup .fr-table-size .fr-table-size-info{font-size:14px;padding:8px;text-align:center}.fr-popup .fr-table-size .fr-select-table-size{line-height:0;padding:0 5px 5px;white-space:nowrap}.fr-popup .fr-table-size .fr-select-table-size>span{background:transparent;display:inline-block;padding:0 4px 4px 0}.fr-popup .fr-table-size .fr-select-table-size>span>span{border:1px solid #ddd;display:inline-block;height:18px;width:18px}.fr-popup .fr-table-size .fr-select-table-size>span.hover{background:transparent}.fr-popup .fr-table-size .fr-select-table-size>span.hover>span{background:var(--oc-formdocument-select-bg);border:1px solid var(--bs-primary,#1e88e5)}.fr-popup .fr-table-size .fr-select-table-size .new-line:after,.fr-popup .fr-table-size .fr-select-table-size .new-line:before{content:\" \";display:table}.fr-popup .fr-table-size .fr-select-table-size .new-line:after{clear:both;content:\"\";display:block;height:0}.fr-popup.fr-above .fr-table-size .fr-select-table-size>span{display:inline-block!important}.fr-popup .fr-table-colors-buttons{margin-bottom:5px}.fr-popup .fr-table-colors{display:block;line-height:0}.fr-popup .fr-table-colors>span{display:inline-block;height:32px;position:relative;width:32px;z-index:1}.fr-popup .fr-table-colors>span>i{bottom:0;cursor:default;font-size:13px;height:32px;left:0;line-height:32px;position:absolute;text-align:center;width:32px}.fr-popup .fr-table-colors>span:focus{outline:1px solid var(--oc-toolbar-color,#222);z-index:2}.fr-popup.fr-desktop .fr-table-size .fr-select-table-size>span>span{height:12px;width:12px}.fr-insert-helper{position:absolute;white-space:nowrap;z-index:9999}.fr-element .fr-video{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fr-element .fr-video:after{background:transparent;bottom:0;content:\"\";cursor:pointer;display:block;left:0;position:absolute;right:0;top:0;z-index:1}.fr-element .fr-video.fr-active>*{position:relative;z-index:2}.fr-element .fr-video>*{border:none;box-sizing:content-box;max-width:100%}.fr-box .fr-video-resizer{border:1px solid var(--bs-primary,#1e88e5);display:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fr-box .fr-video-resizer.fr-active{display:block}.fr-box .fr-video-resizer .fr-handler{background:var(--bs-primary,#1e88e5);border:1px solid #fff;box-sizing:border-box;display:block;position:absolute;z-index:4}.fr-box .fr-video-resizer .fr-handler.fr-hnw{cursor:nw-resize}.fr-box .fr-video-resizer .fr-handler.fr-hne{cursor:ne-resize}.fr-box .fr-video-resizer .fr-handler.fr-hsw{cursor:sw-resize}.fr-box .fr-video-resizer .fr-handler.fr-hse{cursor:se-resize}.fr-box .fr-video-resizer .fr-handler{height:12px;width:12px}.fr-box .fr-video-resizer .fr-handler.fr-hnw{left:-6px;top:-6px}.fr-box .fr-video-resizer .fr-handler.fr-hne{right:-6px;top:-6px}.fr-box .fr-video-resizer .fr-handler.fr-hsw{bottom:-6px;left:-6px}.fr-box .fr-video-resizer .fr-handler.fr-hse{bottom:-6px;right:-6px}@media (min-width:1200px){.fr-box .fr-video-resizer .fr-handler{height:10px;width:10px}.fr-box .fr-video-resizer .fr-handler.fr-hnw{left:-5px;top:-5px}.fr-box .fr-video-resizer .fr-handler.fr-hne{right:-5px;top:-5px}.fr-box .fr-video-resizer .fr-handler.fr-hsw{bottom:-5px;left:-5px}.fr-box .fr-video-resizer .fr-handler.fr-hse{bottom:-5px;right:-5px}}.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line{display:inline-block;width:calc(50% - 5px)}.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line+.fr-input-line{margin-left:10px}.fr-popup .fr-video-upload-layer{border:2px dashed var(--oc-form-control-disabled-bg,#bdbdbd);font-size:14px;letter-spacing:1px;line-height:140%;padding:25px 0;position:relative;text-align:center}.fr-popup .fr-video-upload-layer:hover{background:#ebebeb}.fr-popup .fr-video-upload-layer.fr-drop{background:#ebebeb;border-color:var(--bs-primary,#1e88e5)}.fr-popup .fr-video-upload-layer .fr-form{bottom:0;left:0;margin:0!important;opacity:0;overflow:hidden;padding:0!important;position:absolute;right:0;top:0;width:100%!important;z-index:2147483640}.fr-popup .fr-video-upload-layer .fr-form input{bottom:0;cursor:pointer;font-size:400px;height:100%;margin:0;position:absolute;right:0;top:0;width:500%}.fr-popup .fr-video-progress-bar-layer>h3{font-size:16px;font-weight:400;margin:10px 0}.fr-popup .fr-video-progress-bar-layer>div.fr-action-buttons{display:none}.fr-popup .fr-video-progress-bar-layer>div.fr-loader{background:var(--oc-formdocument-select-bg);height:10px;margin-top:20px;overflow:hidden;position:relative;width:100%}.fr-popup .fr-video-progress-bar-layer>div.fr-loader span{background:var(--bs-primary,#1e88e5);display:block;height:100%;transition:width .2s ease 0s;width:0}.fr-popup .fr-video-progress-bar-layer>div.fr-loader.fr-indeterminate span{-webkit-animation:loading 2s linear infinite;animation:loading 2s linear infinite;position:absolute;top:0;width:30%!important}.fr-popup .fr-video-progress-bar-layer.fr-error>div.fr-loader{display:none}.fr-popup .fr-video-progress-bar-layer.fr-error>div.fr-action-buttons{display:block}.fr-video-overlay{bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:2147483640}.fr-popup .fr-colors-tabs{line-height:16px;margin-bottom:5px;margin-left:-2px;margin-right:-2px}.fr-popup .fr-colors-tabs .fr-colors-tab{color:var(--oc-toolbar-color,#222);cursor:pointer;display:inline-block;font-size:13px;padding:8px 0;position:relative;text-align:center;width:50%}.fr-popup .fr-colors-tabs .fr-colors-tab:focus,.fr-popup .fr-colors-tabs .fr-colors-tab:hover{color:var(--bs-primary,#1e88e5)}.fr-popup .fr-colors-tabs .fr-colors-tab[data-param1=background]:after{background:var(--bs-primary,#1e88e5);bottom:0;content:\"\";height:2px;left:0;position:absolute;transition:transform .2s ease 0s;width:100%}.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab{color:var(--bs-primary,#1e88e5)}.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1=text]~[data-param1=background]:after{transform:translate3d(-100%,0,0)}.fr-popup .fr-color-hex-layer{margin:0;padding:10px;width:100%}.fr-popup .fr-color-hex-layer .fr-input-line{float:left;padding:8px 0 0;width:calc(100% - 50px)}.fr-popup .fr-color-hex-layer .fr-action-buttons{float:right;width:50px}.fr-popup .fr-separator+.fr-colors-tabs{margin-left:2px;margin-right:2px}.fr-popup .fr-color-set{display:none;line-height:0}.fr-popup .fr-color-set.fr-selected-set{display:block}.fr-popup .fr-color-set>span{display:inline-block;height:32px;position:relative;width:32px;z-index:1}.fr-popup .fr-color-set>span>i,.fr-popup .fr-color-set>span>svg{bottom:0;cursor:default;font-size:13px;height:32px;left:0;line-height:32px;position:absolute;text-align:center;width:32px}.fr-popup .fr-color-set>span .fr-selected-color{bottom:0;color:#fff;cursor:default;font-family:FontAwesome;font-size:13px;font-weight:400;left:0;line-height:32px;position:absolute;right:0;text-align:center;top:0}.fr-popup .fr-color-set>span:focus,.fr-popup .fr-color-set>span:hover{outline:1px solid var(--oc-toolbar-color,#222);z-index:2}.fr-rtl .fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1=text]~[data-param1=background]:after{transform:translate3d(100%,0,0)}.fr-popup .fr-emoticon{box-sizing:content-box;cursor:default;display:inline-block;font-family:Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols;font-size:20px;font-weight:400;line-height:1;padding:5px;width:20px}.fr-popup .fr-emoticon img{height:20px}.fr-popup .fr-icon{box-sizing:content-box;cursor:default;display:inline-block;font-family:Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols;font-size:20px;font-weight:400;line-height:1;padding:5px;width:20px}.fr-popup .fr-link:focus{background:#ebebeb;outline:0}.fr-popup.fr-popup-icons-plugin{max-height:500px;overflow:auto}.fr-line-breaker{border-top:1px solid var(--bs-primary,#1e88e5);cursor:text;display:none;position:fixed;z-index:2}.fr-line-breaker.fr-visible{display:block}.fr-line-breaker a.fr-floating-btn{left:calc(50% - 16px);position:absolute;top:-16px}.fr-drag-helper{background:var(--bs-primary,#1e88e5);display:none;height:2px;margin-top:-1px;opacity:.2;position:absolute;z-index:2147483640}.fr-drag-helper.fr-visible{display:block}.fr-dragging{opacity:.4}.fr-img-caption.fr-rounded img,img.fr-rounded{border-radius:10px}.fr-img-caption.fr-bordered img,img.fr-bordered{border:5px solid #ccc}img.fr-bordered{box-sizing:content-box}.fr-img-caption.fr-bordered img{box-sizing:border-box}.fr-view{word-wrap:break-word}.fr-view span[style~=\"color:\"] a{color:inherit}.fr-view strong{font-weight:700}.fr-view table{border:none;border-collapse:collapse;empty-cells:show;max-width:100%}.fr-view table td{min-width:5px}.fr-view table.fr-dashed-borders td,.fr-view table.fr-dashed-borders th{border-style:dashed}.fr-view table.fr-alternate-rows tbody tr:nth-child(2n){background:#f5f5f5}.fr-view table td,.fr-view table th{border:1px solid #ddd}.fr-view table td:empty,.fr-view table th:empty{height:20px}.fr-view table td.fr-highlighted,.fr-view table th.fr-highlighted{border:1px double red}.fr-view table td.fr-thick,.fr-view table th.fr-thick{border-width:2px}.fr-view table th{background:var(--bs-emphasis-color,#ccc)}.fr-view hr{clear:both;page-break-after:always;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fr-view .fr-file{position:relative}.fr-view .fr-file:after{content:\"\\1F4CE\";font-weight:400;position:relative}.fr-view pre{word-wrap:break-word;overflow:visible;white-space:pre-wrap}.fr-view[dir=rtl] blockquote{border-left:none;border-right:2px solid #5e35b1;margin-right:0;padding-left:0;padding-right:5px}.fr-view[dir=rtl] blockquote blockquote{border-color:#00bcd4}.fr-view[dir=rtl] blockquote blockquote blockquote{border-color:#43a047}.fr-view blockquote{border-left:2px solid #5e35b1;color:#5e35b1;margin-left:0;padding-left:5px}.fr-view blockquote blockquote{border-color:#00bcd4;color:#00bcd4}.fr-view blockquote blockquote blockquote{border-color:#43a047;color:#43a047}.fr-view span.fr-emoticon{display:inline;font-family:Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols;font-weight:400;line-height:0}.fr-view span.fr-emoticon.fr-emoticon-img{background-repeat:no-repeat!important;display:inline-block;font-size:inherit;height:1em;line-height:1;margin:-.1em .1em .1em;min-height:20px;min-width:20px;vertical-align:middle;width:1em}.fr-view .fr-text-gray{color:#aaa!important}.fr-view .fr-text-bordered{border-bottom:1px solid #222;border-top:1px solid #222;padding:10px 0}.fr-view .fr-text-spaced{letter-spacing:1px}.fr-view .fr-text-uppercase{text-transform:uppercase}.fr-view .fr-class-highlighted{background-color:#ff0}.fr-view .fr-class-code{background:#f5f5f5;border-color:#ccc;border-radius:2px;font-family:Courier New,Courier,monospace;padding:10px}.fr-view .fr-class-transparency{opacity:.5}.fr-view img{max-width:100%;position:relative}.fr-view img.fr-dib{display:block;float:none;margin:5px auto;vertical-align:top}.fr-view img.fr-dib.fr-fil{margin-left:0;text-align:left}.fr-view img.fr-dib.fr-fir{margin-right:0;text-align:right}.fr-view img.fr-dii{display:inline-block;float:none;margin-left:5px;margin-right:5px;max-width:calc(100% - 10px);vertical-align:bottom}.fr-view img.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}.fr-view img.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view span.fr-img-caption{max-width:100%;position:relative}.fr-view span.fr-img-caption.fr-dib{display:block;float:none;margin:5px auto;vertical-align:top}.fr-view span.fr-img-caption.fr-dib.fr-fil{margin-left:0;text-align:left}.fr-view span.fr-img-caption.fr-dib.fr-fir{margin-right:0;text-align:right}.fr-view span.fr-img-caption.fr-dii{display:inline-block;float:none;margin-left:5px;margin-right:5px;max-width:calc(100% - 10px);vertical-align:bottom}.fr-view span.fr-img-caption.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}.fr-view span.fr-img-caption.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view .fr-video{position:relative;text-align:center}.fr-view .fr-video.fr-rv{height:0;overflow:hidden;padding-bottom:56.25%;padding-top:30px}.fr-view .fr-video.fr-rv embed,.fr-view .fr-video.fr-rv object,.fr-view .fr-video.fr-rv>iframe{height:100%;left:0;position:absolute!important;top:0;width:100%}.fr-view .fr-video>*{border:none;box-sizing:content-box;max-width:100%}.fr-view .fr-video.fr-dvb{clear:both;display:block}.fr-view .fr-video.fr-dvb.fr-fvl{text-align:left}.fr-view .fr-video.fr-dvb.fr-fvr{text-align:right}.fr-view .fr-video.fr-dvi{display:inline-block}.fr-view .fr-video.fr-dvi.fr-fvl{float:left}.fr-view .fr-video.fr-dvi.fr-fvr{float:right}.fr-view a.fr-strong{font-weight:700}.fr-view a.fr-green{color:green}.fr-view .fr-img-caption{text-align:center}.fr-view .fr-img-caption .fr-img-wrap{display:inline-block;margin:auto;padding:0;text-align:center;width:100%}.fr-view .fr-img-caption .fr-img-wrap img{display:block;margin:auto;width:100%}.fr-view .fr-img-caption .fr-img-wrap>span{box-sizing:border-box;display:block;font-size:14px;font-weight:400;margin:auto;opacity:.9;padding:5px 5px 10px;text-align:center;width:100%}.fr-view button.fr-rounded,.fr-view input.fr-rounded,.fr-view textarea.fr-rounded{border-radius:10px}.fr-view button.fr-large,.fr-view input.fr-large,.fr-view textarea.fr-large{font-size:24px}a.fr-view.fr-strong{font-weight:700}a.fr-view.fr-green{color:green}img.fr-view{max-width:100%;position:relative}img.fr-view.fr-dib{display:block;float:none;margin:5px auto;vertical-align:top}img.fr-view.fr-dib.fr-fil{margin-left:0;text-align:left}img.fr-view.fr-dib.fr-fir{margin-right:0;text-align:right}img.fr-view.fr-dii{display:inline-block;float:none;margin-left:5px;margin-right:5px;max-width:calc(100% - 10px);vertical-align:bottom}img.fr-view.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}img.fr-view.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}span.fr-img-caption.fr-view{max-width:100%;position:relative}span.fr-img-caption.fr-view.fr-dib{display:block;float:none;margin:5px auto;vertical-align:top}span.fr-img-caption.fr-view.fr-dib.fr-fil{margin-left:0;text-align:left}span.fr-img-caption.fr-view.fr-dib.fr-fir{margin-right:0;text-align:right}span.fr-img-caption.fr-view.fr-dii{display:inline-block;float:none;margin-left:5px;margin-right:5px;max-width:calc(100% - 10px);vertical-align:bottom}span.fr-img-caption.fr-view.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}span.fr-img-caption.fr-view.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view .oc-text-gray{color:#aaa!important}.fr-view .oc-text-bordered{border-bottom:1px solid #222;border-top:1px solid #222;padding:10px 0}.fr-view .oc-text-spaced{letter-spacing:1px}.fr-view .oc-text-uppercase{text-transform:uppercase}.fr-view .oc-class-highlighted{background-color:#ff0}.fr-view .oc-class-code{background:#f5f5f5;border-color:#ccc;border-radius:2px;font-family:Courier New,Courier,monospace;padding:10px}.fr-view .oc-class-transparency{opacity:.5}.fr-view a.oc-link-strong{font-weight:700}.fr-view a.oc-link-green{color:green}.fr-view table.oc-dashed-borders td,.fr-view table.oc-dashed-borders th{border-style:dashed}.fr-view table.oc-alternate-rows tbody tr:nth-child(2n){background:#f5f5f5}.fr-view table td.oc-cell-highlighted,.fr-view table th.oc-cell-highlighted{border:1px double red}.fr-view table td.oc-cell-thick-border,.fr-view table th.oc-cell-thick-border{border-width:2px}.fr-view img.oc-img-rounded{background-clip:padding-box;border-radius:100%}.fr-view img.oc-img-bordered{border:10px solid #ccc;box-sizing:content-box}.fr-wrapper ::-moz-selection{background:var(--oc-input-selection-bg);color:var(--oc-input-selection-color)}.fr-wrapper ::selection{background:var(--oc-input-selection-bg);color:var(--oc-input-selection-color)}.field-flush .field-richeditor,.field-flush .field-richeditor.editor-focus{border:none}.field-richeditor{border:1px solid var(--bs-border-color);border-radius:4px;box-shadow:none;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.field-richeditor>textarea{display:none}.field-richeditor.editor-focus{border-color:var(--oc-border-focus)}.field-richeditor.size-tiny .fr-wrapper{height:50px}.field-richeditor.size-tiny .fr-wrapper .fr-view{min-height:50px}.field-richeditor.size-tiny .height-indicator{display:none;height:50px}.field-richeditor.size-small .fr-wrapper{height:100px}.field-richeditor.size-small .fr-wrapper .fr-view{min-height:100px}.field-richeditor.size-small .height-indicator{display:none;height:100px}.field-richeditor.size-large .fr-wrapper{height:200px}.field-richeditor.size-large .fr-wrapper .fr-view{min-height:200px}.field-richeditor.size-large .height-indicator{display:none;height:200px}.field-richeditor.size-huge .fr-wrapper{height:250px}.field-richeditor.size-huge .fr-wrapper .fr-view{min-height:250px}.field-richeditor.size-huge .height-indicator{display:none;height:250px}.field-richeditor.size-giant .fr-wrapper{height:350px}.field-richeditor.size-giant .fr-wrapper .fr-view{min-height:350px}.field-richeditor.size-giant .height-indicator{display:none;height:350px}.fr-tooltip{z-index:9997!important}.fr-popup{z-index:9995!important}.fr-separator.fr-hs{width:100%}.field-richeditor.stretch .fr-box:not(.fr-fullscreen){border-radius:0!important;display:block;height:100%!important;overflow:hidden;position:relative;width:100%!important}.field-richeditor.stretch .fr-box:not(.fr-fullscreen) .fr-toolbar{border-radius:0!important;border-top-color:transparent}.field-richeditor.stretch .fr-box:not(.fr-fullscreen) .fr-wrapper{bottom:0;height:auto!important;left:0;position:absolute;top:0;width:100%}.field-richeditor.stretch .fr-box:not(.fr-fullscreen) .fr-wrapper .fr-view{min-height:0}.field-richeditor.stretch .fr-box:not(.fr-fullscreen) .fr-placeholder{left:20px;top:20px}.control-richeditor figure[data-audio],.control-richeditor figure[data-video]{background:var(--oc-form-control-bg);border:1px dashed #bdc3c7;color:var(--bs-heading-color);cursor:pointer;display:inline-block;font-size:15px;font-weight:600;font-weight:400;line-height:150%;margin:0 0 15px;padding:10px 10px 10px 13px;position:relative;width:100%}.control-richeditor figure[data-audio].inspector-open,.control-richeditor figure[data-audio]:focus,.control-richeditor figure[data-video].inspector-open,.control-richeditor figure[data-video]:focus{border-color:var(--bs-primary);border-style:solid;outline:none}.control-richeditor figure[data-audio]:after,.control-richeditor figure[data-video]:after{content:attr(data-label)}.control-richeditor figure[data-audio]:before,.control-richeditor figure[data-video]:before{margin-right:8px;position:static}.control-richeditor figure[data-video]:before{content:\"\\f07f\"}.control-richeditor figure[data-audio]:before,.control-richeditor figure[data-video]:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:octo-icon!important;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.control-richeditor figure[data-audio]:before{content:\"\\f082\"}.fr-quick-insert a.fr-floating-btn{color:var(--oc-toolbar-color,#222);text-decoration:none}\n"
  },
  {
    "path": "modules/backend/formwidgets/richeditor/assets/js/build-min.js",
    "content": "!function(e){var t=function(n,o){this.id=++e.FE.ID;var r={};o&&o.documentReady&&(r.toolbarButtons=[\"fullscreen\",\"undo\",\"redo\",\"getPDF\",\"print\",\"|\",\"bold\",\"italic\",\"underline\",\"color\",\"clearFormatting\",\"|\",\"alignLeft\",\"alignCenter\",\"alignRight\",\"alignJustify\",\"|\",\"formatOL\",\"formatUL\",\"indent\",\"outdent\",\"-\",\"paragraphFormat\",\"|\",\"fontFamily\",\"|\",\"fontSize\",\"|\",\"insertLink\",\"insertImage\",\"quote\"],r.paragraphFormatSelection=!0,r.fontFamilySelection=!0,r.fontSizeSelection=!0,r.placeholderText=\"\",r.quickInsertEnabled=!1,r.charCounterCount=!1),this.opts=e.extend(!0,{},e.extend({},t.DEFAULTS,r,\"object\"==typeof o&&o));var i=JSON.stringify(this.opts);e.FE.OPTS_MAPPING[i]=e.FE.OPTS_MAPPING[i]||this.id,this.sid=e.FE.OPTS_MAPPING[i],e.FE.SHARED[this.sid]=e.FE.SHARED[this.sid]||{},this.shared=e.FE.SHARED[this.sid],this.shared.count=(this.shared.count||0)+1,this.$oel=e(n),this.$oel.data(\"froala.editor\",this),this.o_doc=n.ownerDocument,this.o_win=\"defaultView\"in this.o_doc?this.o_doc.defaultView:this.o_doc.parentWindow;var a=e(this.o_win).scrollTop();this.$oel.on(\"froala.doInit\",function(){this.$oel.off(\"froala.doInit\"),this.doc=this.$el.get(0).ownerDocument,this.win=\"defaultView\"in this.doc?this.doc.defaultView:this.doc.parentWindow,this.$doc=e(this.doc),this.$win=e(this.win),this.opts.pluginsEnabled||(this.opts.pluginsEnabled=Object.keys(e.FE.PLUGINS)),this.opts.initOnClick?(this.load(e.FE.MODULES),this.$el.on(\"touchstart.init\",(function(){e(this).data(\"touched\",!0)})),this.$el.on(\"touchmove.init\",(function(){e(this).removeData(\"touched\")})),this.$el.on(\"mousedown.init touchend.init dragenter.init focus.init\",function(t){if(\"touchend\"==t.type&&!this.$el.data(\"touched\"))return!0;if(1===t.which||!t.which){this.$el.off(\"mousedown.init touchstart.init touchmove.init touchend.init dragenter.init focus.init\"),this.load(e.FE.MODULES),this.load(e.FE.PLUGINS);var n=t.originalEvent&&t.originalEvent.originalTarget;n&&\"IMG\"==n.tagName&&e(n).trigger(\"mousedown\"),\"touchend\"==t.type&&this.image&&t.originalEvent&&t.originalEvent.target&&e(t.originalEvent.target).is(\"img\")&&setTimeout(function(){this.image.edit(e(t.originalEvent.target))}.bind(this),100),this.ready=!0,this.events.trigger(\"initialized\")}}.bind(this)),this.events.trigger(\"initializationDelayed\")):(this.load(e.FE.MODULES),this.load(e.FE.PLUGINS),e(this.o_win).scrollTop(a),this.ready=!0,this.events.trigger(\"initialized\"))}.bind(this)),this._init()};t.DEFAULTS={initOnClick:!1,pluginsEnabled:null},t.MODULES={},t.PLUGINS={},t.INSTANCES=[],t.OPTS_MAPPING={},t.SHARED={},t.ID=0,t.prototype._init=function(){var t=this.$oel.prop(\"tagName\");this.$oel.closest(\"label\").length>=1&&console.warn(\"Note! It is not recommended to initialize the Froala Editor within a label tag.\");var n=function(){\"TEXTAREA\"!=t&&(this._original_html=this._original_html||this.$oel.html()),this.$box=this.$box||this.$oel,this.opts.fullPage&&(this.opts.iframe=!0),this.opts.iframe?(this.$iframe=e('<iframe src=\"about:blank\" frameBorder=\"0\">'),this.$wp=e(\"<div></div>\"),this.$box.html(this.$wp),this.$wp.append(this.$iframe),this.$iframe.get(0).contentWindow.document.open(),this.$iframe.get(0).contentWindow.document.write(\"<!DOCTYPE html>\"),this.$iframe.get(0).contentWindow.document.write(\"<html><head></head><body></body></html>\"),this.$iframe.get(0).contentWindow.document.close(),this.$el=this.$iframe.contents().find(\"body\"),this.el=this.$el.get(0),this.$head=this.$iframe.contents().find(\"head\"),this.$html=this.$iframe.contents().find(\"html\"),this.iframe_document=this.$iframe.get(0).contentWindow.document,this.$oel.trigger(\"froala.doInit\")):(this.$el=e(\"<div></div>\"),this.el=this.$el.get(0),this.$wp=e(\"<div></div>\").append(this.$el),this.$box.html(this.$wp),this.$oel.trigger(\"froala.doInit\"))}.bind(this),o=function(){this.$box=e(\"<div>\"),this.$oel.before(this.$box).hide(),this._original_html=this.$oel.val(),this.$oel.parents(\"form\").on(\"submit.\"+this.id,function(){this.events.trigger(\"form.submit\")}.bind(this)),this.$oel.parents(\"form\").on(\"reset.\"+this.id,function(){this.events.trigger(\"form.reset\")}.bind(this)),n()}.bind(this),r=function(){this.$el=this.$oel,this.el=this.$el.get(0),this.$el.attr(\"contenteditable\",!0).css(\"outline\",\"none\").css(\"display\",\"inline-block\"),this.opts.multiLine=!1,this.opts.toolbarInline=!1,this.$oel.trigger(\"froala.doInit\")}.bind(this),i=function(){this.$el=this.$oel,this.el=this.$el.get(0),this.opts.toolbarInline=!1,this.$oel.trigger(\"froala.doInit\")}.bind(this),a=function(){this.$el=this.$oel,this.el=this.$el.get(0),this.opts.toolbarInline=!1,this.$oel.on(\"click.popup\",(function(e){e.preventDefault()})),this.$oel.trigger(\"froala.doInit\")}.bind(this);this.opts.editInPopup?a():\"TEXTAREA\"==t?o():\"A\"==t?r():\"IMG\"==t?i():\"BUTTON\"==t||\"INPUT\"==t?(this.opts.editInPopup=!0,this.opts.toolbarInline=!1,a()):n()},t.prototype.load=function(t){for(var n in t)if(t.hasOwnProperty(n)){if(this[n])continue;if(e.FE.PLUGINS[n]&&this.opts.pluginsEnabled.indexOf(n)<0)continue;if(this[n]=new t[n](this),this[n]._init&&(this[n]._init(),this.opts.initOnClick&&\"core\"==n))return!1}},t.prototype.destroy=function(){this.destroying=!0,this.shared.count--,this.events.$off();var t=this.html.get();if(this.opts.iframe&&(this.events.disableBlur(),this.win.focus(),this.events.enableBlur()),this.events.trigger(\"destroy\",[],!0),this.events.trigger(\"shared.destroy\",void 0,!0),0===this.shared.count){for(var n in this.shared)this.shared.hasOwnProperty(n)&&(this.shared[n],e.FE.SHARED[this.sid][n]=null);delete e.FE.SHARED[this.sid]}this.$oel.parents(\"form\").off(\".\"+this.id),this.$oel.off(\"click.popup\"),this.$oel.removeData(\"froala.editor\"),this.$oel.off(\"froalaEditor\"),this.core.destroy(t),e.FE.INSTANCES.splice(e.FE.INSTANCES.indexOf(this),1)},e.fn.froalaEditor=function(n){for(var o=[],r=0;r<arguments.length;r++)o.push(arguments[r]);if(\"string\"==typeof n){var i=[];return this.each((function(){var t,r,a=e(this).data(\"froala.editor\");if(!a)return console.warn(\"Editor should be initialized before calling the \"+n+\" method.\");if(n.indexOf(\".\")>0&&a[n.split(\".\")[0]]?(a[n.split(\".\")[0]]&&(t=a[n.split(\".\")[0]]),r=n.split(\".\")[1]):(t=a,r=n.split(\".\")[0]),!t[r])return e.error(\"Method \"+n+\" does not exist in Froala Editor.\");var s=t[r].apply(a,o.slice(1));void 0===s?i.push(this):0===i.length&&i.push(s)})),1==i.length?i[0]:i}if(\"object\"==typeof n||!n)return this.each((function(){if(!e(this).data(\"froala.editor\")){new t(this,n)}}))},e.fn.froalaEditor.Constructor=t,e.FroalaEditor=t,e.FE=t}(jQuery),function(e){e.FE.XS=0,e.FE.SM=1,e.FE.MD=2,e.FE.LG=3;e.FE.LinkRegExCommon=\"[a-z\\\\u0080-\\\\u009f\\\\u00a1-\\\\uffff0-9-_.]{1,}\",e.FE.LinkRegExEnd=\"((:[0-9]{1,5})|)(((\\\\/|\\\\?|#)[a-z\\\\u00a1-\\\\uffff0-9@?\\\\|!^=%&amp;/~+#-\\\\'*-_{}]*)|())\",e.FE.LinkRegExTLD=\"((\"+e.FE.LinkRegExCommon+\")(\\\\.(com|net|org|edu|mil|gov|co|biz|info|me|dev)))\",e.FE.LinkRegExHTTP=\"((ftp|http|https):\\\\/\\\\/\"+e.FE.LinkRegExCommon+\")\",e.FE.LinkRegExAuth=\"((ftp|http|https):\\\\/\\\\/[\\\\u0021-\\\\uffff]{1,}@\"+e.FE.LinkRegExCommon+\")\",e.FE.LinkRegExWWW=\"(www\\\\.\"+e.FE.LinkRegExCommon+\"\\\\.[a-z0-9-]{2,24})\",e.FE.LinkRegEx=\"(\"+e.FE.LinkRegExTLD+\"|\"+e.FE.LinkRegExHTTP+\"|\"+e.FE.LinkRegExWWW+\"|\"+e.FE.LinkRegExAuth+\")\"+e.FE.LinkRegExEnd,e.FE.LinkProtocols=[\"mailto\",\"tel\",\"sms\",\"notes\",\"data\",\"october\"],e.FE.MAIL_REGEX=/.+@.+\\..+/i,e.FE.MODULES.helpers=function(t){function n(){var e={},t=function(){var e,t=-1;return\"Microsoft Internet Explorer\"==navigator.appName?(e=navigator.userAgent,null!==new RegExp(\"MSIE ([0-9]{1,}[\\\\.0-9]{0,})\").exec(e)&&(t=parseFloat(RegExp.$1))):\"Netscape\"==navigator.appName&&(e=navigator.userAgent,null!==new RegExp(\"Trident/.*rv:([0-9]{1,}[\\\\.0-9]{0,})\").exec(e)&&(t=parseFloat(RegExp.$1))),t}();if(t>0)e.msie=!0;else{var n=navigator.userAgent.toLowerCase(),o=/(edge)[ \\/]([\\w.]+)/.exec(n)||/(chrome)[ \\/]([\\w.]+)/.exec(n)||/(webkit)[ \\/]([\\w.]+)/.exec(n)||/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(n)||/(msie) ([\\w.]+)/.exec(n)||n.indexOf(\"compatible\")<0&&/(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(n)||[],r={browser:o[1]||\"\",version:o[2]||\"0\"};o[1]&&(e[r.browser]=!0),e.chrome?e.webkit=!0:e.webkit&&(e.safari=!0)}return e.msie&&(e.version=t),e}function o(){return/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&!a()}function r(){return/(Android)/g.test(navigator.userAgent)&&!a()}function i(){return/(Blackberry)/g.test(navigator.userAgent)}function a(){return/(Windows Phone)/gi.test(navigator.userAgent)}function s(e){return parseInt(e,10)||0}var l;var d=null;return{_init:function(){t.browser=n(),function(){function e(e,t){var r=e[t];e[t]=function(e){var t,i=!1,a=!1;if(e&&e.match(o)){e=e.replace(o,\"\"),this.parentNode||(n.appendChild(this),a=!0);var s=this.parentNode;return this.id||(this.id=\"rootedQuerySelector_id_\"+(new Date).getTime(),i=!0),t=r.call(s,\"#\"+this.id+\" \"+e),i&&(this.id=\"\"),a&&n.removeChild(this),t}return r.call(this,e)}}var n=t.o_doc.createElement(\"div\");try{n.querySelectorAll(\":scope *\")}catch(t){var o=/^\\s*:scope/gi;e(Element.prototype,\"querySelector\"),e(Element.prototype,\"querySelectorAll\"),e(HTMLElement.prototype,\"querySelector\"),e(HTMLElement.prototype,\"querySelectorAll\")}}(),Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(e){var t=this;if(!t)return null;if(!document.documentElement.contains(this))return null;do{if(t.matches(e))return t;t=t.parentElement}while(null!==t);return null})},isIOS:o,isMac:function(){return null==d&&(d=navigator.platform.toUpperCase().indexOf(\"MAC\")>=0),d},isAndroid:r,isBlackberry:i,isWindowsPhone:a,isMobile:function(){return r()||o()||i()},isEmail:function(t){return!/^(https?:|ftps?:|)\\/\\//i.test(t)&&e.FE.MAIL_REGEX.test(t)},requestAnimationFrame:function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}},getPX:s,screenSize:function(){var t=e('<div class=\"fr-visibility-helper\"></div>').appendTo(\"body:first\");try{var n=s(t.css(\"margin-left\"));return t.remove(),n}catch(t){return e.FE.LG}},isTouch:function(){return\"ontouchstart\"in window||window.DocumentTouch&&document instanceof DocumentTouch},sanitizeURL:function(t){return/^(https?:|ftps?:|)\\/\\//i.test(t)||/^([A-Za-z]:(\\\\){1,2}|[A-Za-z]:((\\\\){1,2}[^\\\\]+)+)(\\\\)?$/i.test(t)||new RegExp(\"^(\"+e.FE.LinkProtocols.join(\"|\")+\"):\\\\/\\\\/\",\"i\").test(t)?t:t=encodeURIComponent(t).replace(/%23/g,\"#\").replace(/%2F/g,\"/\").replace(/%25/g,\"%\").replace(/mailto%3A/gi,\"mailto:\").replace(/file%3A/gi,\"file:\").replace(/sms%3A/gi,\"sms:\").replace(/tel%3A/gi,\"tel:\").replace(/notes%3A/gi,\"notes:\").replace(/data%3Aimage/gi,\"data:image\").replace(/blob%3A/gi,\"blob:\").replace(/%3A(\\d)/gi,\":$1\").replace(/webkit-fake-url%3A/gi,\"webkit-fake-url:\").replace(/%3F/g,\"?\").replace(/%3D/g,\"=\").replace(/%26/g,\"&\").replace(/&amp;/g,\"&\").replace(/%2C/g,\",\").replace(/%3B/g,\";\").replace(/%2B/g,\"+\").replace(/%40/g,\"@\").replace(/%5B/g,\"[\").replace(/%5D/g,\"]\").replace(/%7B/g,\"{\").replace(/%7D/g,\"}\")},isArray:function(e){return e&&!e.propertyIsEnumerable(\"length\")&&\"object\"==typeof e&&\"number\"==typeof e.length},RGBToHex:function(e){function t(e){return(\"0\"+parseInt(e,10).toString(16)).slice(-2)}try{return e&&\"transparent\"!==e?/^#[0-9A-F]{6}$/i.test(e)?e:(\"#\"+t((e=e.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/))[1])+t(e[2])+t(e[3])).toUpperCase():\"\"}catch(e){return null}},HEXtoRGB:function(e){e=e.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,(function(e,t,n,o){return t+t+n+n+o+o}));var t=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(e);return t?\"rgb(\"+parseInt(t[1],16)+\", \"+parseInt(t[2],16)+\", \"+parseInt(t[3],16)+\")\":\"\"},isURL:function(t){return!!/^(https?:|ftps?:|)\\/\\//i.test(t)&&(t=String(t).replace(/</g,\"%3C\").replace(/>/g,\"%3E\").replace(/\"/g,\"%22\").replace(/ /g,\"%20\"),new RegExp(\"^\"+e.FE.LinkRegExHTTP+e.FE.LinkRegExEnd+\"$\",\"gi\").test(t))},getAlignment:function(n){var o=(n.css(\"text-align\")||\"\").replace(/-(.*)-/g,\"\");if([\"left\",\"right\",\"justify\",\"center\"].indexOf(o)<0){if(!l){var r=e('<div dir=\"'+(\"rtl\"==t.opts.direction?\"rtl\":\"auto\")+'\" style=\"text-align: '+t.$el.css(\"text-align\")+'; position: fixed; left: -3000px;\"><span id=\"s1\">.</span><span id=\"s2\">.</span></div>');e(\"body:first\").append(r);var i=r.find(\"#s1\").get(0).getBoundingClientRect().left,a=r.find(\"#s2\").get(0).getBoundingClientRect().left;r.remove(),l=i<a?\"left\":\"right\"}o=l}return o},scrollTop:function(){return t.o_win.pageYOffset?t.o_win.pageYOffset:t.o_doc.documentElement&&t.o_doc.documentElement.scrollTop?t.o_doc.documentElement.scrollTop:t.o_doc.body.scrollTop?t.o_doc.body.scrollTop:0},scrollLeft:function(){return t.o_win.pageXOffset?t.o_win.pageXOffset:t.o_doc.documentElement&&t.o_doc.documentElement.scrollLeft?t.o_doc.documentElement.scrollLeft:t.o_doc.body.scrollLeft?t.o_doc.body.scrollLeft:0},isInViewPort:function(e){var t=e.getBoundingClientRect();return(t={top:Math.round(t.top),bottom:Math.round(t.bottom)}).top>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)||t.top<=0&&t.bottom>=(window.innerHeight||document.documentElement.clientHeight)}}}}(jQuery),function(e){e.FE.MODULES.events=function(t){var n,o={};function r(e,t,n){f(e,t,n)}function i(n){if(void 0===n&&(n=!0),!t.$wp)return!1;if(t.helpers.isIOS()){t.$win.get(0).focus();var o=0===t.$win.scrollTop()?1:t.$win.scrollTop();window.scrollTo(0,o)}if(t.core.hasFocus())return!1;if(!t.core.hasFocus()&&n){var r=t.$win.scrollTop();if(t.browser.msie&&t.$box&&t.$box.css(\"position\",\"fixed\"),t.browser.msie&&t.$wp&&t.$wp.css(\"overflow\",\"visible\"),t.browser.msie&&t.$sc&&t.$sc.css(\"position\",\"fixed\"),l(),t.$el.focus(),t.events.trigger(\"focus\"),s(),t.browser.msie&&t.$sc&&t.$sc.css(\"position\",\"\"),t.browser.msie&&t.$box&&t.$box.css(\"position\",\"\"),t.browser.msie&&t.$wp&&t.$wp.css(\"overflow\",\"auto\"),r!=t.$win.scrollTop()&&t.$win.scrollTop(r),!t.selection.info(t.el).atStart)return!1}if(!t.core.hasFocus()||t.$el.find(\".fr-marker\").length>0)return!1;if(t.selection.info(t.el).atStart&&t.selection.isCollapsed()&&null!=t.html.defaultTag()){var i=t.markers.insert();if(i&&!t.node.blockParent(i)){e(i).remove();var a=t.$el.find(t.html.blockTagsQuery()).get(0);a&&(e(a).prepend(e.FE.MARKERS),t.selection.restore())}else i&&e(i).remove()}}var a=!1;function s(){n=!0}function l(){n=!1}function d(){return n}function c(e,n,r){var i,a=e.split(\" \");if(a.length>1){for(var s=0;s<a.length;s++)c(a[s],n,r);return!0}void 0===r&&(r=!1),i=0!==e.indexOf(\"shared.\")?o[e]=o[e]||[]:t.shared._events[e]=t.shared._events[e]||[],r?i.unshift(n):i.push(n)}var p=[];function f(e,n,o,r,i){\"function\"==typeof o&&(i=r,r=o,o=!1);var a=i?t.shared.$_events:p,s=i?t.sid:t.id;r=function(e){return function(){if(!t.destroying)return e.apply(this,arguments)}}(r),o?e.on(n.split(\" \").join(\".ed\"+s+\" \")+\".ed\"+s,o,r):e.on(n.split(\" \").join(\".ed\"+s+\" \")+\".ed\"+s,r),a.push([e,n.split(\" \").join(\".ed\"+s+\" \")+\".ed\"+s])}function h(e){for(var t=0;t<e.length;t++)e[t][0].off(e[t][1])}function u(n,r,i){if(!t.edit.isDisabled()||i){var a,s;if(0!==n.indexOf(\"shared.\"))a=o[n];else{if(t.shared.count>0)return!1;a=t.shared._events[n]}if(a)for(var l=0;l<a.length;l++)if(!1===(s=a[l].apply(t,r)))return!1;return!1!==(s=t.$oel.triggerHandler(\"froalaEditor.\"+n,e.merge([t],r||[])))&&s}}function g(){for(var e in o)o.hasOwnProperty(e)&&delete o[e]}function m(){for(var e in t.shared._events)t.shared._events.hasOwnProperty(e)&&delete t.shared._events[e]}return{_init:function(){t.shared.$_events=t.shared.$_events||[],t.shared._events={},t.helpers.isMobile()?(t._mousedown=\"touchstart\",t._mouseup=\"touchend\",t._move=\"touchmove\",t._mousemove=\"touchmove\"):(t._mousedown=\"mousedown\",t._mouseup=\"mouseup\",t._move=\"\",t._mousemove=\"mousemove\"),r(t.$el,\"click mouseup mousedown touchstart touchend dragenter dragover dragleave dragend drop dragstart\",(function(e){u(e.type,[e])})),c(\"mousedown\",(function(){for(var n=0;n<e.FE.INSTANCES.length;n++)e.FE.INSTANCES[n]!=t&&e.FE.INSTANCES[n].popups&&e.FE.INSTANCES[n].popups.areVisible()&&e.FE.INSTANCES[n].$el.find(\".fr-marker\").remove()})),r(t.$win,t._mousedown,(function(e){u(\"window.mousedown\",[e]),s()})),r(t.$win,t._mouseup,(function(e){u(\"window.mouseup\",[e])})),r(t.$win,\"cut copy keydown keyup touchmove touchend\",(function(e){u(\"window.\"+e.type,[e])})),r(t.$doc,\"dragend drop\",(function(e){u(\"document.\"+e.type,[e])})),r(t.$el,\"keydown keypress keyup input\",(function(e){u(e.type,[e])})),r(t.$el,\"focus\",(function(e){d()&&(i(!1),!1===a&&u(e.type,[e]))})),r(t.$el,\"blur\",(function(e){d()&&!0===a&&(u(e.type,[e]),s())})),f(t.$el,\"mousedown\",'[contenteditable=\"true\"]',(function(){l(),t.$el.blur()})),c(\"focus\",(function(){a=!0})),c(\"blur\",(function(){a=!1})),s(),r(t.$el,\"cut copy paste beforepaste\",(function(e){u(e.type,[e])})),c(\"destroy\",g),c(\"shared.destroy\",m)},on:c,trigger:u,bindClick:function(n,o,r){f(n,t._mousedown,o,(function(n){t.edit.isDisabled()||function(n){var o=e(n.currentTarget);t.edit.isDisabled()||t.node.hasClass(o.get(0),\"fr-disabled\")?n.preventDefault():\"mousedown\"===n.type&&1!==n.which||(t.helpers.isMobile()||n.preventDefault(),(t.helpers.isAndroid()||t.helpers.isWindowsPhone())&&0===o.parents(\".fr-dropdown-menu\").length&&(n.preventDefault(),n.stopPropagation()),o.addClass(\"fr-selected\"),t.events.trigger(\"commands.mousedown\",[o]))}(n)}),!0),f(n,t._mouseup+\" \"+t._move,o,(function(n){t.edit.isDisabled()||function(n,o){var r=e(n.currentTarget);if(t.edit.isDisabled()||t.node.hasClass(r.get(0),\"fr-disabled\"))return n.preventDefault(),!1;if(\"mouseup\"===n.type&&1!==n.which)return!0;if(!t.node.hasClass(r.get(0),\"fr-selected\"))return!0;if(\"touchmove\"!=n.type){if(n.stopPropagation(),n.stopImmediatePropagation(),n.preventDefault(),!t.node.hasClass(r.get(0),\"fr-selected\"))return t.button.getButtons(\".fr-selected\",!0).removeClass(\"fr-selected\"),!1;if(t.button.getButtons(\".fr-selected\",!0).removeClass(\"fr-selected\"),r.data(\"dragging\")||r.attr(\"disabled\"))return r.removeData(\"dragging\"),!1;var i=r.data(\"timeout\");i&&(clearTimeout(i),r.removeData(\"timeout\")),o.apply(t,[n])}else r.data(\"timeout\")||r.data(\"timeout\",setTimeout((function(){r.data(\"dragging\",!0)}),100))}(n,r)}),!0),f(n,\"mousedown click mouseup\",o,(function(e){t.edit.isDisabled()||e.stopPropagation()}),!0),c(\"window.mouseup\",(function(){t.edit.isDisabled()||(n.find(o).removeClass(\"fr-selected\"),s())})),f(n,\"mouseenter\",o,(function(){e(this).hasClass(\"fr-options\")&&e(this).prev(\".fr-btn\").addClass(\"fr-btn-hover\"),e(this).next(\".fr-btn\").hasClass(\"fr-options\")&&e(this).next(\".fr-btn\").addClass(\"fr-btn-hover\")})),f(n,\"mouseleave\",o,(function(){e(this).hasClass(\"fr-options\")&&e(this).prev(\".fr-btn\").removeClass(\"fr-btn-hover\"),e(this).next(\".fr-btn\").hasClass(\"fr-options\")&&e(this).next(\".fr-btn\").removeClass(\"fr-btn-hover\")}))},disableBlur:l,enableBlur:s,blurActive:d,focus:i,chainTrigger:function(n,r,i){if(!t.edit.isDisabled()||i){var a,s;if(0!==n.indexOf(\"shared.\"))a=o[n];else{if(t.shared.count>0)return!1;a=t.shared._events[n]}if(a)for(var l=0;l<a.length;l++)void 0!==(s=a[l].apply(t,[r]))&&(r=s);return void 0!==(s=t.$oel.triggerHandler(\"froalaEditor.\"+n,e.merge([t],[r])))&&(r=s),r}},$on:f,$off:function(){h(p),p=[],0===t.shared.count&&(h(t.shared.$_events),t.shared.$_events=[])}}}}(jQuery),function(e){e.FE.MODULES.node=function(t){function n(e){return e&&\"IFRAME\"!=e.tagName?Array.prototype.slice.call(e.childNodes||[]):[]}function o(t){return!!t&&(t.nodeType==Node.ELEMENT_NODE&&e.FE.BLOCK_TAGS.indexOf(t.tagName.toLowerCase())>=0)}function r(e){var t={},n=e.attributes;if(n)for(var o=0;o<n.length;o++){var r=n[o];t[r.nodeName]=r.value}return t}function i(e){for(var t=\"\",n=r(e),o=Object.keys(n).sort(),i=0;i<o.length;i++){var a=o[i],s=n[a];s.indexOf(\"'\")<0&&s.indexOf('\"')>=0?t+=\" \"+a+\"='\"+s+\"'\":s.indexOf('\"')>=0&&s.indexOf(\"'\")>=0?t+=\" \"+a+'=\"'+(s=s.replace(/\"/g,\"&quot;\"))+'\"':t+=\" \"+a+'=\"'+s+'\"'}return t}function a(e){return e===t.el}return{isBlock:o,isEmpty:function(r,i){if(!r)return!0;if(r.querySelector(\"table\"))return!1;var a=n(r);1==a.length&&o(a[0])&&(a=n(a[0]));for(var s=!1,l=0;l<a.length;l++){var d=a[l];if((!i||!t.node.hasClass(d,\"fr-marker\"))&&(d.nodeType!=Node.TEXT_NODE||0!==d.textContent.length)){if(\"BR\"!=d.tagName&&(d.textContent||\"\").replace(/\\u200B/gi,\"\").replace(/\\n/g,\"\").length>0)return!1;if(s)return!1;\"BR\"==d.tagName&&(s=!0)}}return!(r.querySelectorAll(e.FE.VOID_ELEMENTS.join(\",\")).length-r.querySelectorAll(\"br\").length)&&(!r.querySelector(t.opts.htmlAllowedEmptyTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\")&&(!(r.querySelectorAll(e.FE.BLOCK_TAGS.join(\",\")).length>1)&&!r.querySelector(t.opts.htmlDoNotWrapTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\")))},blockParent:function(e){for(;e&&e.parentNode!==t.el&&(!e.parentNode||!t.node.hasClass(e.parentNode,\"fr-inner\"));)if(o(e=e.parentNode))return e;return null},deepestParent:function(n,r,i){if(void 0===r&&(r=[]),void 0===i&&(i=!0),r.push(t.el),r.indexOf(n.parentNode)>=0||n.parentNode&&t.node.hasClass(n.parentNode,\"fr-inner\")||n.parentNode&&e.FE.SIMPLE_ENTER_TAGS.indexOf(n.parentNode.tagName)>=0&&i)return null;for(;r.indexOf(n.parentNode)<0&&n.parentNode&&!t.node.hasClass(n.parentNode,\"fr-inner\")&&(e.FE.SIMPLE_ENTER_TAGS.indexOf(n.parentNode.tagName)<0||!i)&&(!o(n)||!o(n.parentNode)||!i);)n=n.parentNode;return n},rawAttributes:r,attributes:i,clearAttributes:function(e){for(var t=e.attributes,n=t.length-1;n>=0;n--){var o=t[n];e.removeAttribute(o.nodeName)}},openTagString:function(e){return\"<\"+e.tagName.toLowerCase()+i(e)+\">\"},closeTagString:function(e){return\"</\"+e.tagName.toLowerCase()+\">\"},isFirstSibling:function e(n,o){void 0===o&&(o=!0);for(var r=n.previousSibling;r&&o&&t.node.hasClass(r,\"fr-marker\");)r=r.previousSibling;return!r||r.nodeType==Node.TEXT_NODE&&\"\"===r.textContent&&e(r)},isLastSibling:function e(n,o){void 0===o&&(o=!0);for(var r=n.nextSibling;r&&o&&t.node.hasClass(r,\"fr-marker\");)r=r.nextSibling;return!r||r.nodeType==Node.TEXT_NODE&&\"\"===r.textContent&&e(r)},isList:function(e){return!!e&&[\"UL\",\"OL\"].indexOf(e.tagName)>=0},isLink:function(e){return!!e&&(e.nodeType==Node.ELEMENT_NODE&&\"a\"==e.tagName.toLowerCase())},isElement:a,contents:n,isVoid:function(t){return t&&t.nodeType==Node.ELEMENT_NODE&&e.FE.VOID_ELEMENTS.indexOf((t.tagName||\"\").toLowerCase())>=0},hasFocus:function(e){return e===t.doc.activeElement&&(!t.doc.hasFocus||t.doc.hasFocus())&&!!(a(e)||e.type||e.href||~e.tabIndex)},isEditable:function(e){return(!e.getAttribute||\"false\"!=e.getAttribute(\"contenteditable\"))&&[\"STYLE\",\"SCRIPT\"].indexOf(e.tagName)<0},isDeletable:function(e){return e&&e.nodeType==Node.ELEMENT_NODE&&e.getAttribute(\"class\")&&(e.getAttribute(\"class\")||\"\").indexOf(\"fr-deletable\")>=0},hasClass:function(t,n){return t instanceof e&&(t=t.get(0)),t&&t.classList&&t.classList.contains(n)},filter:function(e){return t.browser.msie?e:{acceptNode:e}}}}}(jQuery),function(e){e.FE.INVISIBLE_SPACE=\"&#8203;\",e.FE.START_MARKER='<span class=\"fr-marker\" data-id=\"0\" data-type=\"true\" style=\"display: none; line-height: 0;\">'+e.FE.INVISIBLE_SPACE+\"</span>\",e.FE.END_MARKER='<span class=\"fr-marker\" data-id=\"0\" data-type=\"false\" style=\"display: none; line-height: 0;\">'+e.FE.INVISIBLE_SPACE+\"</span>\",e.FE.MARKERS=e.FE.START_MARKER+e.FE.END_MARKER,e.FE.MODULES.markers=function(t){function n(){if(!t.$wp)return null;try{var n=t.selection.ranges(0),o=n.commonAncestorContainer;if(t.core.isEmpty())return t.selection.setAtStart(t.el),t.$el.find(\".fr-marker:first\").replaceWith('<span class=\"fr-single-marker\" style=\"display: none; line-height: 0;\">'+e.FE.INVISIBLE_SPACE+\"</span>\"),t.$el.find(\".fr-marker\").remove(),t.$el.find(\".fr-single-marker\").removeClass(\"fr-single-marker\").addClass(\"fr-marker\").get(0);if(o!=t.el&&0===t.$el.find(o).length)return null;var r=n.cloneRange(),i=n.cloneRange();r.collapse(!0);var a=e('<span class=\"fr-marker\" style=\"display: none; line-height: 0;\">'+e.FE.INVISIBLE_SPACE+\"</span>\",t.doc)[0];if(r.insertNode(a),a=t.$el.find(\"span.fr-marker\").get(0)){for(var s=a.nextSibling;s&&s.nodeType===Node.TEXT_NODE&&0===s.textContent.length;)e(s).remove(),s=t.$el.find(\"span.fr-marker\").get(0).nextSibling;return t.selection.clear(),t.selection.get().addRange(i),a}return null}catch(e){console.warn(\"MARKER\",e)}}function o(){t.$el.find(\".fr-marker\").remove()}return{place:function(n,o,r){var i,a,s;try{var l=n.cloneRange();if(l.collapse(o),l.insertNode(function(n,o){return e('<span class=\"fr-marker\" data-id=\"'+o+'\" data-type=\"'+n+'\" style=\"display: '+(t.browser.safari?\"none\":\"inline-block\")+'; line-height: 0;\">'+e.FE.INVISIBLE_SPACE+\"</span>\",t.doc)[0]}(o,r)),!0===o)for(s=(i=t.$el.find('span.fr-marker[data-type=\"true\"][data-id=\"'+r+'\"]').get(0)).nextSibling;s&&s.nodeType===Node.TEXT_NODE&&0===s.textContent.length;)e(s).remove(),s=i.nextSibling;if(!0===o&&!n.collapsed){for(;!t.node.isElement(i.parentNode)&&!s;)e(i.parentNode).after(i),s=i.nextSibling;if(s&&s.nodeType===Node.ELEMENT_NODE&&t.node.isBlock(s)&&\"HR\"!==s.tagName){a=[s];do{s=a[0],a=t.node.contents(s)}while(a[0]&&t.node.isBlock(a[0]));e(s).prepend(e(i))}}if(!1===o&&!n.collapsed){if((s=(i=t.$el.find('span.fr-marker[data-type=\"false\"][data-id=\"'+r+'\"]').get(0)).previousSibling)&&s.nodeType===Node.ELEMENT_NODE&&t.node.isBlock(s)&&\"HR\"!==s.tagName){a=[s];do{s=a[a.length-1],a=t.node.contents(s)}while(a[a.length-1]&&t.node.isBlock(a[a.length-1]));e(s).append(e(i))}i.parentNode&&[\"TD\",\"TH\"].indexOf(i.parentNode.tagName)>=0&&i.parentNode.previousSibling&&!i.previousSibling&&e(i.parentNode.previousSibling).append(i)}var d=t.$el.find('span.fr-marker[data-type=\"'+o+'\"][data-id=\"'+r+'\"]').get(0);return d&&(d.style.display=\"none\"),d}catch(e){return null}},insert:n,split:function(){t.selection.isCollapsed()||t.selection.remove();var o=t.$el.find(\".fr-marker\").get(0);if(null==o&&(o=n()),null==o)return null;var r=t.node.deepestParent(o);if(r||(r=t.node.blockParent(o))&&\"LI\"!=r.tagName&&(r=null),r)if(t.node.isBlock(r)&&t.node.isEmpty(r))\"LI\"!=r.tagName||r.parentNode.firstElementChild!=r||t.node.isEmpty(r.parentNode)?e(r).replaceWith('<span class=\"fr-marker\"></span>'):e(r).append('<span class=\"fr-marker\"></span>');else if(t.cursor.isAtStart(o,r))e(r).before('<span class=\"fr-marker\"></span>'),e(o).remove();else if(t.cursor.isAtEnd(o,r))e(r).after('<span class=\"fr-marker\"></span>'),e(o).remove();else{var i=o,a=\"\",s=\"\";do{i=i.parentNode,a+=t.node.closeTagString(i),s=t.node.openTagString(i)+s}while(i!=r);e(o).replaceWith('<span id=\"fr-break\"></span>');var l=t.node.openTagString(r)+e(r).html()+t.node.closeTagString(r);l=l.replace(/<span id=\"fr-break\"><\\/span>/g,a+'<span class=\"fr-marker\"></span>'+s),e(r).replaceWith(l)}return t.$el.find(\".fr-marker\").get(0)},insertAtPoint:function(e){var r,i=e.clientX,a=e.clientY;o();var s=null;if(void 0!==t.doc.caretPositionFromPoint?(r=t.doc.caretPositionFromPoint(i,a),(s=t.doc.createRange()).setStart(r.offsetNode,r.offset),s.setEnd(r.offsetNode,r.offset)):void 0!==t.doc.caretRangeFromPoint&&(r=t.doc.caretRangeFromPoint(i,a),(s=t.doc.createRange()).setStart(r.startContainer,r.startOffset),s.setEnd(r.startContainer,r.startOffset)),null!==s&&void 0!==t.win.getSelection){var l=t.win.getSelection();l.removeAllRanges(),l.addRange(s)}else if(void 0!==t.doc.body.createTextRange)try{(s=t.doc.body.createTextRange()).moveToPoint(i,a);var d=s.duplicate();d.moveToPoint(i,a),s.setEndPoint(\"EndToEnd\",d),s.select()}catch(e){return!1}n()},remove:o}}}(jQuery),function(e){e.FE.MODULES.selection=function(t){function n(){var e=\"\";return t.win.getSelection?e=t.win.getSelection():t.doc.getSelection?e=t.doc.getSelection():t.doc.selection&&(e=t.doc.selection.createRange().text),e.toString()}function o(){return t.win.getSelection?t.win.getSelection():t.doc.getSelection?t.doc.getSelection():t.doc.selection.createRange()}function r(e){var n=o(),r=[];if(n&&n.getRangeAt&&n.rangeCount){r=[];for(var i=0;i<n.rangeCount;i++)r.push(n.getRangeAt(i))}else r=t.doc.createRange?[t.doc.createRange()]:[];return void 0!==e?r[e]:r}function i(){var e=o();try{e.removeAllRanges?e.removeAllRanges():e.empty?e.empty():e.clear&&e.clear()}catch(e){}}function a(e,t){var n=e;return n.nodeType==Node.ELEMENT_NODE&&n.childNodes.length>0&&n.childNodes[t]&&(n=n.childNodes[t]),n.nodeType==Node.TEXT_NODE&&(n=n.parentNode),n}function s(){if(t.$wp){t.markers.remove();var n,o,i=r(),a=[];for(o=0;o<i.length;o++)if(i[o].startContainer!==t.doc||t.browser.msie){var s=(n=i[o]).collapsed,l=t.markers.place(n,!0,o),d=t.markers.place(n,!1,o);if(void 0!==l&&l||!s||(e(\".fr-marker\").remove(),t.selection.setAtEnd(t.el)),t.el.normalize(),t.browser.safari&&!s)try{(n=t.doc.createRange()).setStartAfter(l),n.setEndBefore(d),a.push(n)}catch(e){}}if(t.browser.safari&&a.length)for(t.selection.clear(),o=0;o<a.length;o++)t.selection.get().addRange(a[o])}}function l(){var n,r=t.el.querySelectorAll('.fr-marker[data-type=\"true\"]');if(!t.$wp)return t.markers.remove(),!1;if(0===r.length)return!1;if(t.browser.msie||t.browser.edge)for(n=0;n<r.length;n++)r[n].style.display=\"inline-block\";t.core.hasFocus()||t.browser.msie||t.browser.webkit||t.$el.focus(),i();var a=o();for(n=0;n<r.length;n++){var s=e(r[n]).data(\"id\"),l=r[n],c=t.doc.createRange(),p=t.$el.find('.fr-marker[data-type=\"false\"][data-id=\"'+s+'\"]');(t.browser.msie||t.browser.edge)&&p.css(\"display\",\"inline-block\");var f=null;if(p.length>0){p=p[0];try{for(var h,u=!1,g=l.nextSibling;g&&g.nodeType==Node.TEXT_NODE&&0===g.textContent.length;)h=g,g=g.nextSibling,e(h).remove();for(var m,v,b=p.nextSibling;b&&b.nodeType==Node.TEXT_NODE&&0===b.textContent.length;)h=b,b=b.nextSibling,e(h).remove();if(l.nextSibling==p||p.nextSibling==l){for(var E=l.nextSibling==p?l:p,y=E==l?p:l,w=E.previousSibling;w&&w.nodeType==Node.TEXT_NODE&&0===w.length;)h=w,w=w.previousSibling,e(h).remove();if(w&&w.nodeType==Node.TEXT_NODE)for(;w&&w.previousSibling&&w.previousSibling.nodeType==Node.TEXT_NODE;)w.previousSibling.textContent=w.previousSibling.textContent+w.textContent,w=w.previousSibling,e(w.nextSibling).remove();for(var S=y.nextSibling;S&&S.nodeType==Node.TEXT_NODE&&0===S.length;)h=S,S=S.nextSibling,e(h).remove();if(S&&S.nodeType==Node.TEXT_NODE)for(;S&&S.nextSibling&&S.nextSibling.nodeType==Node.TEXT_NODE;)S.nextSibling.textContent=S.textContent+S.nextSibling.textContent,S=S.nextSibling,e(S.previousSibling).remove();if(w&&(t.node.isVoid(w)||t.node.isBlock(w))&&(w=null),S&&(t.node.isVoid(S)||t.node.isBlock(S))&&(S=null),w&&S&&w.nodeType==Node.TEXT_NODE&&S.nodeType==Node.TEXT_NODE){e(l).remove(),e(p).remove();var C=w.textContent.length;w.textContent=w.textContent+S.textContent,e(S).remove(),t.opts.htmlUntouched||t.spaces.normalize(w),c.setStart(w,C),c.setEnd(w,C),u=!0}else!w&&S&&S.nodeType==Node.TEXT_NODE?(e(l).remove(),e(p).remove(),t.opts.htmlUntouched||t.spaces.normalize(S),f=e(t.doc.createTextNode(\"​\")),e(S).before(f),c.setStart(S,0),c.setEnd(S,0),u=!0):!S&&w&&w.nodeType==Node.TEXT_NODE&&(e(l).remove(),e(p).remove(),t.opts.htmlUntouched||t.spaces.normalize(w),f=e(t.doc.createTextNode(\"​\")),e(w).after(f),c.setStart(w,w.textContent.length),c.setEnd(w,w.textContent.length),u=!0)}if(!u)(t.browser.chrome||t.browser.edge)&&l.nextSibling==p?(m=d(p,c,!0)||c.setStartAfter(p),v=d(l,c,!1)||c.setEndBefore(l)):(l.previousSibling==p&&(p=(l=p).nextSibling),p.nextSibling&&\"BR\"===p.nextSibling.tagName||!p.nextSibling&&t.node.isBlock(l.previousSibling)||l.previousSibling&&\"BR\"==l.previousSibling.tagName||(l.style.display=\"inline\",p.style.display=\"inline\",f=e(t.doc.createTextNode(\"​\"))),m=d(l,c,!0)||e(l).before(f)&&c.setStartBefore(l),v=d(p,c,!1)||e(p).after(f)&&c.setEndAfter(p)),\"function\"==typeof m&&m(),\"function\"==typeof v&&v()}catch(e){console.warn(\"RESTORE RANGE\",e)}}f&&f.remove();try{a.addRange(c)}catch(e){console.warn(\"ADD RANGE\",e)}}t.markers.remove()}function d(n,o,r){var i,a=n.previousSibling,s=n.nextSibling;return a&&s&&a.nodeType==Node.TEXT_NODE&&s.nodeType==Node.TEXT_NODE?(i=a.textContent.length,r?(s.textContent=a.textContent+s.textContent,e(a).remove(),e(n).remove(),t.opts.htmlUntouched||t.spaces.normalize(s),function(){o.setStart(s,i)}):(a.textContent=a.textContent+s.textContent,e(s).remove(),e(n).remove(),t.opts.htmlUntouched||t.spaces.normalize(a),function(){o.setEnd(a,i)})):a&&!s&&a.nodeType==Node.TEXT_NODE?(i=a.textContent.length,r?(t.opts.htmlUntouched||t.spaces.normalize(a),function(){o.setStart(a,i)}):(t.opts.htmlUntouched||t.spaces.normalize(a),function(){o.setEnd(a,i)})):!(!s||a||s.nodeType!=Node.TEXT_NODE)&&(r?(t.opts.htmlUntouched||t.spaces.normalize(s),function(){o.setStart(s,0)}):(t.opts.htmlUntouched||t.spaces.normalize(s),function(){o.setEnd(s,0)}))}function c(){for(var e=r(),t=0;t<e.length;t++)if(!e[t].collapsed)return!1;return!0}function p(e){var n,o,r=!1,i=!1;if(t.win.getSelection){var a=t.win.getSelection();a.rangeCount&&((o=(n=a.getRangeAt(0)).cloneRange()).selectNodeContents(e),o.setEnd(n.startContainer,n.startOffset),r=\"\"===o.toString(),o.selectNodeContents(e),o.setStart(n.endContainer,n.endOffset),i=\"\"===o.toString())}else t.doc.selection&&\"Control\"!=t.doc.selection.type&&((o=(n=t.doc.selection.createRange()).duplicate()).moveToElementText(e),o.setEndPoint(\"EndToStart\",n),r=\"\"===o.text,o.moveToElementText(e),o.setEndPoint(\"StartToEnd\",n),i=\"\"===o.text);return{atStart:r,atEnd:i}}function f(n,o){void 0===o&&(o=!0);var r=e(n).html();r&&r.replace(/\\u200b/g,\"\").length!=r.length&&e(n).html(r.replace(/\\u200b/g,\"\"));for(var i=t.node.contents(n),a=0;a<i.length;a++)i[a].nodeType!=Node.ELEMENT_NODE?e(i[a]).remove():(f(i[a],0===a),0===a&&(o=!1));n.nodeType==Node.TEXT_NODE?e(n).replaceWith('<span data-first=\"true\" data-text=\"true\"></span>'):o&&e(n).attr(\"data-first\",!0)}function h(){return 0===e(this).find(\"fr-inner\").length}function u(n,o){var r=t.node.contents(n.get(0));[\"TD\",\"TH\"].indexOf(n.get(0).tagName)>=0&&1==n.find(\".fr-marker\").length&&t.node.hasClass(r[0],\"fr-marker\")&&n.attr(\"data-del-cell\",!0);for(var i=0;i<r.length;i++){var a=r[i];t.node.hasClass(a,\"fr-marker\")?o=(o+1)%2:o?e(a).find(\".fr-marker\").length>0?o=u(e(a),o):[\"TD\",\"TH\"].indexOf(a.tagName)<0&&!t.node.hasClass(a,\"fr-inner\")?!t.opts.keepFormatOnDelete||t.$el.find(\"[data-first]\").length>0||t.node.isVoid(a)?e(a).remove():f(a):t.node.hasClass(a,\"fr-inner\")?0===e(a).find(\".fr-inner\").length?e(a).html(\"<br>\"):e(a).find(\".fr-inner\").filter(h).html(\"<br>\"):(e(a).empty(),e(a).attr(\"data-del-cell\",!0)):e(a).find(\".fr-marker\").length>0&&(o=u(e(a),o))}return o}function g(){try{if(!t.$wp)return!1;for(var e=r(0).commonAncestorContainer;e&&!t.node.isElement(e);)e=e.parentNode;return!!t.node.isElement(e)}catch(e){return!1}}function m(n,o){if(!n||n.getElementsByClassName(\"fr-marker\").length>0)return!1;for(var r=n.firstChild;r&&(t.node.isBlock(r)||o&&!t.node.isVoid(r)&&r.nodeType==Node.ELEMENT_NODE);)n=r,r=r.firstChild;n.innerHTML=e.FE.MARKERS+n.innerHTML}function v(n,o){if(!n||n.getElementsByClassName(\"fr-marker\").length>0)return!1;for(var r=n.lastChild;r&&(t.node.isBlock(r)||o&&!t.node.isVoid(r)&&r.nodeType==Node.ELEMENT_NODE);)n=r,r=r.lastChild;var i=t.doc.createElement(\"SPAN\");for(i.setAttribute(\"id\",\"fr-sel-markers\"),i.innerHTML=e.FE.MARKERS;n.parentNode&&t.opts.htmlAllowedEmptyTags&&t.opts.htmlAllowedEmptyTags.indexOf(n.tagName.toLowerCase())>=0;)n=n.parentNode;n.appendChild(i);var a=n.querySelector(\"#fr-sel-markers\");a.outerHTML=a.innerHTML}return{text:n,get:o,ranges:r,clear:i,element:function(){var i=o();try{if(i.rangeCount){var a,s=r(0),l=s.startContainer;if(t.node.isElement(l)&&0===s.startOffset&&l.childNodes.length)for(;l.childNodes.length&&l.childNodes[0].nodeType===Node.ELEMENT_NODE;)l=l.childNodes[0];if(l.nodeType==Node.TEXT_NODE&&s.startOffset==(l.textContent||\"\").length&&l.nextSibling&&(l=l.nextSibling),l.nodeType==Node.ELEMENT_NODE){var d=!1;if(l.childNodes.length>0&&l.childNodes[s.startOffset]){for(a=l.childNodes[s.startOffset];a&&a.nodeType==Node.TEXT_NODE&&0===a.textContent.length;)a=a.nextSibling;if(a&&a.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(l=a,d=!0),!d&&l.childNodes.length>1&&s.startOffset>0&&l.childNodes[s.startOffset-1]){for(a=l.childNodes[s.startOffset-1];a&&a.nodeType==Node.TEXT_NODE&&0===a.textContent.length;)a=a.nextSibling;a&&a.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(l=a,d=!0)}}else!s.collapsed&&l.nextSibling&&l.nextSibling.nodeType==Node.ELEMENT_NODE&&(a=l.nextSibling)&&a.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(l=a,d=!0);!d&&l.childNodes.length>0&&e(l.childNodes[0]).text().replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&[\"BR\",\"IMG\",\"HR\"].indexOf(l.childNodes[0].tagName)<0&&(l=l.childNodes[0])}for(;l.nodeType!=Node.ELEMENT_NODE&&l.parentNode;)l=l.parentNode;for(var c=l;c&&\"HTML\"!=c.tagName;){if(c==t.el)return l;c=e(c).parent()[0]}}}catch(e){}return t.el},endElement:function(){var i=o();try{if(i.rangeCount){var a,s=r(0),l=s.endContainer;if(l.nodeType==Node.ELEMENT_NODE){var d=!1;l.childNodes.length>0&&l.childNodes[s.endOffset]&&e(l.childNodes[s.endOffset]).text()===n()?(l=l.childNodes[s.endOffset],d=!0):!s.collapsed&&l.previousSibling&&l.previousSibling.nodeType==Node.ELEMENT_NODE?(a=l.previousSibling)&&a.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(l=a,d=!0):!s.collapsed&&l.childNodes.length>0&&l.childNodes[s.endOffset]&&(a=l.childNodes[s.endOffset].previousSibling).nodeType==Node.ELEMENT_NODE&&a&&a.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(l=a,d=!0),!d&&l.childNodes.length>0&&e(l.childNodes[l.childNodes.length-1]).text()===n()&&[\"BR\",\"IMG\",\"HR\"].indexOf(l.childNodes[l.childNodes.length-1].tagName)<0&&(l=l.childNodes[l.childNodes.length-1])}for(l.nodeType==Node.TEXT_NODE&&0===s.endOffset&&l.previousSibling&&l.previousSibling.nodeType==Node.ELEMENT_NODE&&(l=l.previousSibling);l.nodeType!=Node.ELEMENT_NODE&&l.parentNode;)l=l.parentNode;for(var c=l;c&&\"HTML\"!=c.tagName;){if(c==t.el)return l;c=e(c).parent()[0]}}}catch(e){}return t.el},save:s,restore:l,isCollapsed:c,isFull:function(){if(c())return!1;t.selection.save();var n,o=t.el.querySelectorAll(\"td, th, img, br\");for(n=0;n<o.length;n++)o[n].nextSibling&&(o[n].innerHTML='<span class=\"fr-mk\">'+e.FE.INVISIBLE_SPACE+\"</span>\"+o[n].innerHTML);var r=!1,i=p(t.el);for(i.atStart&&i.atEnd&&(r=!0),o=t.el.querySelectorAll(\".fr-mk\"),n=0;n<o.length;n++)o[n].parentNode.removeChild(o[n]);return t.selection.restore(),r},inEditor:g,remove:function(){if(c())return!0;var n;s();var o=function(t){for(var n=t.previousSibling;n&&n.nodeType==Node.TEXT_NODE&&0===n.textContent.length;){var o=n;n=n.previousSibling,e(o).remove()}return n},r=function(t){for(var n=t.nextSibling;n&&n.nodeType==Node.TEXT_NODE&&0===n.textContent.length;){var o=n;n=n.nextSibling,e(o).remove()}return n},i=t.$el.find('.fr-marker[data-type=\"true\"]');for(n=0;n<i.length;n++)for(var a=i[n];!(o(a)||t.node.isBlock(a.parentNode)||t.$el.is(a.parentNode)||t.node.hasClass(a.parentNode,\"fr-inner\"));)e(a.parentNode).before(a);var d=t.$el.find('.fr-marker[data-type=\"false\"]');for(n=0;n<d.length;n++){for(var p=d[n];!(r(p)||t.node.isBlock(p.parentNode)||t.$el.is(p.parentNode)||t.node.hasClass(p.parentNode,\"fr-inner\"));)e(p.parentNode).after(p);p.parentNode&&t.node.isBlock(p.parentNode)&&t.node.isEmpty(p.parentNode)&&!t.$el.is(p.parentNode)&&!t.node.hasClass(p.parentNode,\"fr-inner\")&&t.opts.keepFormatOnDelete&&e(p.parentNode).after(p)}if(function(){for(var n=t.$el.find(\".fr-marker\"),o=0;o<n.length;o++)if(e(n[o]).parentsUntil('.fr-element, [contenteditable=\"true\"]','[contenteditable=\"false\"]').length)return!1;return!0}()){u(t.$el,0);var f=t.$el.find('[data-first=\"true\"]');if(f.length)t.$el.find(\".fr-marker\").remove(),f.append(e.FE.INVISIBLE_SPACE+e.FE.MARKERS).removeAttr(\"data-first\"),f.attr(\"data-text\")&&f.replaceWith(f.html());else for(t.$el.find(\"table\").filter((function(){return e(this).find(\"[data-del-cell]\").length>0&&e(this).find(\"[data-del-cell]\").length==e(this).find(\"td, th\").length})).remove(),t.$el.find(\"[data-del-cell]\").removeAttr(\"data-del-cell\"),i=t.$el.find('.fr-marker[data-type=\"true\"]'),n=0;n<i.length;n++){var h=i[n],g=h.nextSibling,m=t.$el.find('.fr-marker[data-type=\"false\"][data-id=\"'+e(h).data(\"id\")+'\"]').get(0);if(m){if(h&&(!g||g!=m)){var v=t.node.blockParent(h),b=t.node.blockParent(m),E=!1,y=!1;if(v&&[\"UL\",\"OL\"].indexOf(v.tagName)>=0&&(v=null,E=!0),b&&[\"UL\",\"OL\"].indexOf(b.tagName)>=0&&(b=null,y=!0),e(h).after(m),v!=b)if(null!=v||E)if(null!=b||y||0!==e(v).parentsUntil(t.$el,\"table\").length)v&&b&&0===e(v).parentsUntil(t.$el,\"table\").length&&0===e(b).parentsUntil(t.$el,\"table\").length&&0===e(v).find(b).length&&0===e(b).find(v).length&&(e(v).append(e(b).html()),e(b).remove());else{for(g=v;!g.nextSibling&&g.parentNode!=t.el;)g=g.parentNode;for(g=g.nextSibling;g&&\"BR\"!=g.tagName;){var w=g.nextSibling;e(v).append(g),g=w}g&&\"BR\"==g.tagName&&e(g).remove()}else{var S=t.node.deepestParent(h);S?(e(S).after(e(b).html()),e(b).remove()):0===e(b).parentsUntil(t.$el,\"table\").length&&(e(h).next().after(e(b).html()),e(b).remove())}}}else m=e(h).clone().attr(\"data-type\",!1),e(h).after(m)}}t.$el.find(\"li:empty\").remove(),t.opts.keepFormatOnDelete||t.html.fillEmptyBlocks(),t.html.cleanEmptyTags(!0),t.opts.htmlUntouched||(t.clean.lists(),t.$el.find(\"li:empty\").append(\"<br>\"),t.spaces.normalize());var C=t.$el.find(\".fr-marker:last\").get(0),_=t.$el.find(\".fr-marker:first\").get(0);void 0!==C&&void 0!==_&&!C.nextSibling&&_.previousSibling&&\"BR\"==_.previousSibling.tagName&&t.node.isElement(C.parentNode)&&t.node.isElement(_.parentNode)&&t.$el.append(\"<br>\"),l()},blocks:function(){var n,i=[],s=o();if(g()&&s.rangeCount){var l=r();for(n=0;n<l.length;n++){var d,c=l[n],p=a(c.startContainer,c.startOffset),f=a(c.endContainer,c.endOffset);(t.node.isBlock(p)||t.node.hasClass(p,\"fr-inner\"))&&i.indexOf(p)<0&&i.push(p),(d=t.node.blockParent(p))&&i.indexOf(d)<0&&i.push(d);for(var h=[],u=p;u!==f&&u!==t.el;)h.indexOf(u)<0&&u.children&&u.children.length?(h.push(u),u=u.children[0]):u.nextSibling?u=u.nextSibling:u.parentNode&&(u=u.parentNode,h.push(u)),t.node.isBlock(u)&&h.indexOf(u)<0&&i.indexOf(u)<0&&(u!==f||c.endOffset>0)&&i.push(u);t.node.isBlock(f)&&i.indexOf(f)<0&&c.endOffset>0&&i.push(f),(d=t.node.blockParent(f))&&i.indexOf(d)<0&&i.push(d)}}for(n=i.length-1;n>0;n--)e(i[n]).find(i).length&&i.splice(n,1);return i},info:p,setAtEnd:v,setAtStart:m,setBefore:function(n,o){void 0===o&&(o=!0);for(var r=n.previousSibling;r&&r.nodeType==Node.TEXT_NODE&&0===r.textContent.length;)r=r.previousSibling;return r?(t.node.isBlock(r)?v(r):\"BR\"==r.tagName?e(r).before(e.FE.MARKERS):e(r).after(e.FE.MARKERS),!0):!!o&&(t.node.isBlock(n)?m(n):e(n).before(e.FE.MARKERS),!0)},setAfter:function(n,o){void 0===o&&(o=!0);for(var r=n.nextSibling;r&&r.nodeType==Node.TEXT_NODE&&0===r.textContent.length;)r=r.nextSibling;return r?(t.node.isBlock(r)?m(r):e(r).before(e.FE.MARKERS),!0):!!o&&(t.node.isBlock(n)?v(n):e(n).after(e.FE.MARKERS),!0)},rangeElement:a}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{htmlAllowedTags:[\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"blockquote\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"pre\",\"progress\",\"queue\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"style\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strike\",\"strong\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"],htmlRemoveTags:[\"script\",\"style\"],htmlAllowedAttrs:[\"accept\",\"accept-charset\",\"accesskey\",\"action\",\"align\",\"allowfullscreen\",\"allowtransparency\",\"alt\",\"aria-.*\",\"async\",\"autocomplete\",\"autofocus\",\"autoplay\",\"autosave\",\"background\",\"bgcolor\",\"border\",\"charset\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"color\",\"cols\",\"colspan\",\"content\",\"contenteditable\",\"contextmenu\",\"controls\",\"coords\",\"data\",\"data-.*\",\"datetime\",\"default\",\"defer\",\"dir\",\"dirname\",\"disabled\",\"download\",\"draggable\",\"dropzone\",\"enctype\",\"for\",\"form\",\"formaction\",\"frameborder\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"http-equiv\",\"icon\",\"id\",\"ismap\",\"itemprop\",\"keytype\",\"kind\",\"label\",\"lang\",\"language\",\"list\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"mozallowfullscreen\",\"multiple\",\"muted\",\"name\",\"novalidate\",\"open\",\"optimum\",\"pattern\",\"ping\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"reversed\",\"rows\",\"rowspan\",\"sandbox\",\"scope\",\"scoped\",\"scrolling\",\"seamless\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"src\",\"srcdoc\",\"srclang\",\"srcset\",\"start\",\"step\",\"summary\",\"spellcheck\",\"style\",\"tabindex\",\"target\",\"title\",\"type\",\"translate\",\"usemap\",\"value\",\"valign\",\"webkitallowfullscreen\",\"width\",\"wrap\"],htmlAllowedStyleProps:[\".*\"],htmlAllowComments:!0,htmlUntouched:!1,fullPage:!1}),e.FE.HTML5Map={B:\"STRONG\",I:\"EM\",STRIKE:\"S\"},e.FE.MODULES.clean=function(t){var n,o,r,i;function a(e){if(e.nodeType==Node.ELEMENT_NODE&&e.getAttribute(\"class\")&&e.getAttribute(\"class\").indexOf(\"fr-marker\")>=0)return!1;var n,o=t.node.contents(e),r=[];for(n=0;n<o.length;n++)o[n].nodeType!=Node.ELEMENT_NODE||t.node.isVoid(o[n])?o[n].nodeType==Node.TEXT_NODE&&(o[n].textContent=o[n].textContent.replace(/\\u200b/g,\"\")):o[n].textContent.replace(/\\u200b/g,\"\").length!=o[n].textContent.length&&a(o[n]);if(e.nodeType==Node.ELEMENT_NODE&&!t.node.isVoid(e)&&(e.normalize(),o=t.node.contents(e),r=e.querySelectorAll(\".fr-marker\"),o.length-r.length==0)){for(n=0;n<o.length;n++)if(o[n].nodeType==Node.ELEMENT_NODE&&(o[n].getAttribute(\"class\")||\"\").indexOf(\"fr-marker\")<0)return!1;for(n=0;n<r.length;n++)e.parentNode.insertBefore(r[n].cloneNode(!0),e);return e.parentNode.removeChild(e),!1}}function s(e,n){if(e.nodeType==Node.COMMENT_NODE)return\"\\x3c!--\"+e.nodeValue+\"--\\x3e\";if(e.nodeType==Node.TEXT_NODE)return n?e.textContent.replace(/\\&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"):e.textContent.replace(/\\&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\\u00A0/g,\"&nbsp;\").replace(/\\u0009/g,\"\");if(e.nodeType!=Node.ELEMENT_NODE)return e.outerHTML;if(e.nodeType==Node.ELEMENT_NODE&&[\"STYLE\",\"SCRIPT\",\"NOSCRIPT\"].indexOf(e.tagName)>=0)return e.outerHTML;if(e.nodeType==Node.ELEMENT_NODE&&\"svg\"==e.tagName){var o=document.createElement(\"div\"),r=e.cloneNode(!0);return o.appendChild(r),o.innerHTML}if(\"IFRAME\"==e.tagName)return e.outerHTML.replace(/\\&lt;/g,\"<\").replace(/\\&gt;/g,\">\");var i=e.childNodes;if(0===i.length)return e.outerHTML;for(var a=\"\",l=0;l<i.length;l++)\"PRE\"==e.tagName&&(n=!0),a+=s(i[l],n);return t.node.openTagString(e)+a+t.node.closeTagString(e)}var l=[];function d(e){var t=e.replace(/;;/gi,\";\");return\";\"!=(t=t.replace(/^;/gi,\"\")).charAt(t.length)&&(t+=\";\"),t}function c(e){var n;for(n in e)if(e.hasOwnProperty(n)){var o=n.match(r),a=null;\"style\"==n&&t.opts.htmlAllowedStyleProps.length&&(a=e[n].match(i)),o&&a?e[n]=d(a.join(\";\")):o&&(\"style\"!=n||a)||delete e[n]}for(var s=\"\",l=Object.keys(e).sort(),c=0;c<l.length;c++)e[n=l[c]].indexOf('\"')<0?s+=\" \"+n+'=\"'+e[n]+'\"':s+=\" \"+n+\"='\"+e[n]+\"'\";return s}function p(n,o){var r,i=document.implementation.createHTMLDocument(\"Froala DOC\").createElement(\"DIV\");e(i).append(n);var a=\"\";if(i){var l=t.node.contents(i);for(r=0;r<l.length;r++)o(l[r]);for(l=t.node.contents(i),r=0;r<l.length;r++)a+=s(l[r])}return a}function f(e,n,o){l=[];var r=e=e.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,(function(e){return l.push(e),\"[FROALA.EDITOR.SCRIPT \"+(l.length-1)+\"]\"})).replace(/<noscript\\b[^<]*(?:(?!<\\/noscript>)<[^<]*)*<\\/noscript>/gi,(function(e){return l.push(e),\"[FROALA.EDITOR.NOSCRIPT \"+(l.length-1)+\"]\"})).replace(/<meta((?:[\\w\\W]*?)) http-equiv=\"/g,'<meta$1 data-fr-http-equiv=\"').replace(/<img((?:[\\w\\W]*?)) src=\"/g,'<img$1 data-fr-src=\"'),i=null;return t.opts.fullPage&&(r=t.html.extractNode(e,\"body\")||(e.indexOf(\"<body\")>=0?\"\":e),o&&(i=t.html.extractNode(e,\"head\")||\"\")),r=p(r,n),i&&(i=p(i,n)),function(e){return(e=(e=e.replace(/\\[FROALA\\.EDITOR\\.SCRIPT ([\\d]*)\\]/gi,(function(e,n){return t.opts.htmlRemoveTags.indexOf(\"script\")>=0?\"\":l[parseInt(n,10)]}))).replace(/\\[FROALA\\.EDITOR\\.NOSCRIPT ([\\d]*)\\]/gi,(function(e,n){return t.opts.htmlRemoveTags.indexOf(\"noscript\")>=0?\"\":l[parseInt(n,10)].replace(/\\&lt;/g,\"<\").replace(/\\&gt;/g,\">\")}))).replace(/<img((?:[\\w\\W]*?)) data-fr-src=\"/g,'<img$1 src=\"')}(function(e,n,o){if(t.opts.fullPage){var r=t.html.extractDoctype(o),i=c(t.html.extractNodeAttrs(o,\"html\"));return n=null==n?t.html.extractNode(o,\"head\")||\"<title></title>\":n,r+\"<html\"+i+\"><head\"+c(t.html.extractNodeAttrs(o,\"head\"))+\">\"+n+\"</head><body\"+c(t.html.extractNodeAttrs(o,\"body\"))+\">\"+e+\"</body></html>\"}return e}(r,i,e))}function h(e){var n=t.doc.createElement(\"DIV\");return n.innerText=e,n.textContent}function u(a){for(var s=t.node.contents(a),l=0;l<s.length;l++)s[l].nodeType!=Node.TEXT_NODE&&u(s[l]);!function(a){if(\"SPAN\"==a.tagName&&(a.getAttribute(\"class\")||\"\").indexOf(\"fr-marker\")>=0)return!1;var s,l;if(\"PRE\"==a.tagName&&(l=(s=a).innerHTML).indexOf(\"\\n\")>=0&&(s.innerHTML=l.replace(/\\n/g,\"<br>\")),a.nodeType==Node.ELEMENT_NODE&&(a.getAttribute(\"data-fr-src\")&&0!==a.getAttribute(\"data-fr-src\").indexOf(\"blob:\")&&a.setAttribute(\"data-fr-src\",t.helpers.sanitizeURL(h(a.getAttribute(\"data-fr-src\")))),a.getAttribute(\"href\")&&a.setAttribute(\"href\",t.helpers.sanitizeURL(h(a.getAttribute(\"href\")))),a.getAttribute(\"src\")&&a.setAttribute(\"src\",t.helpers.sanitizeURL(h(a.getAttribute(\"src\")))),a.getAttribute(\"data\")&&a.setAttribute(\"data\",t.helpers.sanitizeURL(h(a.getAttribute(\"data\")))),[\"TABLE\",\"TBODY\",\"TFOOT\",\"TR\"].indexOf(a.tagName)>=0&&(a.innerHTML=a.innerHTML.trim())),!t.opts.pasteAllowLocalImages&&a.nodeType==Node.ELEMENT_NODE&&\"IMG\"==a.tagName&&a.getAttribute(\"data-fr-src\")&&0===a.getAttribute(\"data-fr-src\").indexOf(\"file://\"))return a.parentNode.removeChild(a),!1;if(a.nodeType==Node.ELEMENT_NODE&&e.FE.HTML5Map[a.tagName]&&\"\"===t.node.attributes(a)){var c=e.FE.HTML5Map[a.tagName],p=\"<\"+c+\">\"+a.innerHTML+\"</\"+c+\">\";a.insertAdjacentHTML(\"beforebegin\",p),(a=a.previousSibling).parentNode.removeChild(a.nextSibling)}if(t.opts.htmlAllowComments||a.nodeType!=Node.COMMENT_NODE)if(a.tagName&&a.tagName.match(o))a.parentNode.removeChild(a);else if(a.tagName&&!a.tagName.match(n)){if(\"svg\"===a.tagName)a.parentNode.removeChild(a);else if(!t.browser.safari||\"path\"!=a.tagName||!a.parentNode||\"svg\"!=a.parentNode.tagName)try{a.outerHTML=a.innerHTML}catch(e){}}else{var f=a.attributes;if(f)for(var u=f.length-1;u>=0;u--){var g=f[u],m=g.nodeName.match(r),v=null;\"style\"==g.nodeName&&t.opts.htmlAllowedStyleProps.length&&(v=g.value.match(i)),m&&v?g.value=d(v.join(\";\")):m&&(\"style\"!=g.nodeName||v)||a.removeAttribute(g.nodeName)}}else 0!==a.data.indexOf(\"[FROALA.EDITOR\")&&a.parentNode.removeChild(a)}(a)}return{_init:function(){t.opts.fullPage&&e.merge(t.opts.htmlAllowedTags,[\"head\",\"title\",\"style\",\"link\",\"base\",\"body\",\"html\",\"meta\"])},html:function(a,s,l,d){void 0===s&&(s=[]),void 0===l&&(l=[]),void 0===d&&(d=!1);var c,p=e.merge([],t.opts.htmlAllowedTags);for(c=0;c<s.length;c++)p.indexOf(s[c])>=0&&p.splice(p.indexOf(s[c]),1);var h=e.merge([],t.opts.htmlAllowedAttrs);for(c=0;c<l.length;c++)h.indexOf(l[c])>=0&&h.splice(h.indexOf(l[c]),1);return h.push(\"data-fr-.*\"),h.push(\"fr-.*\"),n=new RegExp(\"^\"+p.join(\"$|^\")+\"$\",\"gi\"),r=new RegExp(\"^\"+h.join(\"$|^\")+\"$\",\"gi\"),o=new RegExp(\"^\"+t.opts.htmlRemoveTags.join(\"$|^\")+\"$\",\"gi\"),i=t.opts.htmlAllowedStyleProps.length?new RegExp(\"((^|;|\\\\s)\"+t.opts.htmlAllowedStyleProps.join(\":.+?(?=;|$))|((^|;|\\\\s)\")+\":.+?(?=(;)|$))\",\"gi\"):null,a=f(a,u,!0)},toHTML5:function(){var n=t.el.querySelectorAll(Object.keys(e.FE.HTML5Map).join(\",\"));if(n.length){var o=!1;t.el.querySelector(\".fr-marker\")||(t.selection.save(),o=!0);for(var r=0;r<n.length;r++)\"\"===t.node.attributes(n[r])&&e(n[r]).replaceWith(\"<\"+e.FE.HTML5Map[n[r].tagName]+\">\"+n[r].innerHTML+\"</\"+e.FE.HTML5Map[n[r].tagName]+\">\");o&&t.selection.restore()}},tables:function(){!function(){for(var e=t.el.querySelectorAll(\"tr\"),n=0;n<e.length;n++){for(var o=e[n].children,r=!0,i=0;i<o.length;i++)if(\"TH\"!=o[i].tagName){r=!1;break}if(!1!==r&&0!==o.length){for(var a=e[n];a&&\"TABLE\"!=a.tagName&&\"THEAD\"!=a.tagName;)a=a.parentNode;var s=a;\"THEAD\"!=s.tagName&&(s=t.doc.createElement(\"THEAD\"),a.insertBefore(s,a.firstChild)),s.appendChild(e[n])}}}()},lists:function(){!function(){var e=[],n=function(e){return!t.node.isList(e.parentNode)};do{if(e.length){var o=e[0],r=t.doc.createElement(\"ul\");o.parentNode.insertBefore(r,o);do{var i=o;o=o.nextSibling,r.appendChild(i)}while(o&&\"LI\"==o.tagName)}e=[];for(var a=t.el.querySelectorAll(\"li\"),s=0;s<a.length;s++)n(a[s])&&e.push(a[s])}while(e.length>0)}(),function(){for(var e=t.el.querySelectorAll(\"ol + ol, ul + ul\"),n=0;n<e.length;n++){var o=e[n];if(t.node.isList(o.previousSibling)&&t.node.openTagString(o)==t.node.openTagString(o.previousSibling)){for(var r=t.node.contents(o),i=0;i<r.length;i++)o.previousSibling.appendChild(r[i]);o.parentNode.removeChild(o)}}}(),function(){for(var n=t.el.querySelectorAll(\"ul, ol\"),o=0;o<n.length;o++)for(var r=t.node.contents(n[o]),i=null,a=r.length-1;a>=0;a--)\"LI\"!=r[a].tagName&&\"UL\"!=r[a].tagName&&\"OL\"!=r[a].tagName?(i||(i=e(\"<li>\")).insertBefore(r[a]),i.prepend(r[a])):i=null}(),function(){var e,n,o;do{n=!1;var r=t.el.querySelectorAll(\"li:empty\");for(e=0;e<r.length;e++)r[e].parentNode.removeChild(r[e]);var i=t.el.querySelectorAll(\"ul, ol\");for(e=0;e<i.length;e++)(o=i[e]).querySelector(\"LI\")||(n=!0,o.parentNode.removeChild(o))}while(!0===n)}(),function(){for(var n=t.el.querySelectorAll(\"ul > ul, ol > ol, ul > ol, ol > ul\"),o=0;o<n.length;o++){var r=n[o],i=r.previousSibling;i&&(\"LI\"==i.tagName?i.appendChild(r):e(r).wrap(\"<li></li>\"))}}(),function(){for(var n=t.el.querySelectorAll(\"li > ul, li > ol\"),o=0;o<n.length;o++){var r=n[o];if(r.nextSibling){var i=r.nextSibling,a=e(\"<li>\");e(r.parentNode).after(a);do{var s=i;i=i.nextSibling,a.append(s)}while(i)}}}(),function(){for(var n=t.el.querySelectorAll(\"li > ul, li > ol\"),o=0;o<n.length;o++){var r=n[o];if(t.node.isFirstSibling(r))e(r).before(\"<br/>\");else if(r.previousSibling&&\"BR\"==r.previousSibling.tagName){for(var i=r.previousSibling.previousSibling;i&&t.node.hasClass(i,\"fr-marker\");)i=i.previousSibling;i&&\"BR\"!=i.tagName&&e(r.previousSibling).remove()}}}(),function(){for(var n=t.el.querySelectorAll(\"li:empty\"),o=0;o<n.length;o++)e(n[o]).remove()}()},invisibleSpaces:function(e){return e.replace(/\\u200b/g,\"\").length==e.length?e:t.clean.exec(e,a)},exec:f}}}(jQuery),function(e){e.FE.MODULES.spaces=function(t){function n(n,o){var r=n.previousSibling,i=n.nextSibling,a=n.textContent,s=n.parentNode;if(!t.html.isPreformatted(s)){o&&(a=a.replace(/[\\f\\n\\r\\t\\v ]{2,}/g,\" \"),i&&\"BR\"!==i.tagName&&!t.node.isBlock(i)||!(t.node.isBlock(s)||t.node.isLink(s)&&!s.nextSibling||t.node.isElement(s))||(a=a.replace(/[\\f\\n\\r\\t\\v ]{1,}$/g,\"\")),r&&\"BR\"!==r.tagName&&!t.node.isBlock(r)||!(t.node.isBlock(s)||t.node.isLink(s)&&!s.previousSibling||t.node.isElement(s))||(a=a.replace(/^[\\f\\n\\r\\t\\v ]{1,}/g,\"\")),(t.node.isBlock(i)||t.node.isBlock(r))&&(a=a.replace(/^[\\f\\n\\r\\t\\v ]{1,}/g,\"\")),\" \"===a&&(r&&t.node.isVoid(r)||i&&t.node.isVoid(i))&&!(r&&i&&t.node.isVoid(r)||i&&r&&t.node.isVoid(i))&&(a=\"\")),(!r&&t.node.isBlock(i)||!i&&t.node.isBlock(r))&&t.node.isBlock(s)&&s!==t.el&&(a=a.replace(/^[\\f\\n\\r\\t\\v ]{1,}/g,\"\")),o||(a=a.replace(new RegExp(e.FE.UNICODE_NBSP,\"g\"),\" \"));for(var l=\"\",d=0;d<a.length;d++)32!=a.charCodeAt(d)||0!==d&&32!=l.charCodeAt(d-1)||r&&i&&t.node.isVoid(r)||r&&i&&t.node.isVoid(i)?l+=a[d]:l+=e.FE.UNICODE_NBSP;(!i||i&&t.node.isBlock(i)||i&&i.nodeType==Node.ELEMENT_NODE&&t.win.getComputedStyle(i)&&\"block\"==t.win.getComputedStyle(i).display)&&(t.node.isVoid(r)||(l=l.replace(/ $/,e.FE.UNICODE_NBSP))),!r||t.node.isVoid(r)||t.node.isBlock(r)||1!==(l=l.replace(/^\\u00A0([^ $])/,\" $1\")).length||160!==l.charCodeAt(0)||!i||t.node.isVoid(i)||t.node.isBlock(i)||t.node.hasClass(r,\"fr-marker\")&&t.node.hasClass(i,\"fr-marker\")||(l=\" \"),o||(l=l.replace(/([^ \\u00A0])\\u00A0([^ \\u00A0])/g,\"$1 $2\")),n.textContent!=l&&(n.textContent=l)}}function o(e,o){if(void 0!==e&&e||(e=t.el),void 0===o&&(o=!1),!e.getAttribute||\"false\"!=e.getAttribute(\"contenteditable\"))if(e.nodeType==Node.TEXT_NODE)n(e,o);else if(e.nodeType==Node.ELEMENT_NODE)for(var r=t.doc.createTreeWalker(e,NodeFilter.SHOW_TEXT,t.node.filter((function(e){for(var n=e.parentNode;n&&n!==t.el;){if(\"STYLE\"==n.tagName||\"IFRAME\"==n.tagName)return!1;if(\"PRE\"===n.tagName)return!1;n=n.parentNode}return null!=e.textContent.match(/([ \\u00A0\\f\\n\\r\\t\\v]{2,})|(^[ \\u00A0\\f\\n\\r\\t\\v]{1,})|([ \\u00A0\\f\\n\\r\\t\\v]{1,}$)/g)&&!t.node.hasClass(e.parentNode,\"fr-marker\")})),!1);r.nextNode();)n(r.currentNode,o)}return{normalize:o,normalizeAroundCursor:function(){for(var e=[],n=t.el.querySelectorAll(\".fr-marker\"),r=0;r<n.length;r++){for(var i=null,a=t.node.blockParent(n[r]),s=(i=a||n[r]).nextSibling,l=i.previousSibling;s&&\"BR\"==s.tagName;)s=s.nextSibling;for(;l&&\"BR\"==l.tagName;)l=l.previousSibling;i&&e.indexOf(i)<0&&e.push(i),l&&e.indexOf(l)<0&&e.push(l),s&&e.indexOf(s)<0&&e.push(s)}for(var d=0;d<e.length;d++)o(e[d])}}}}(jQuery),function(e){e.FE.UNICODE_NBSP=String.fromCharCode(160),e.FE.VOID_ELEMENTS=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"menuitem\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"],e.FE.BLOCK_TAGS=[\"address\",\"article\",\"aside\",\"audio\",\"blockquote\",\"canvas\",\"details\",\"dd\",\"div\",\"dl\",\"dt\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"li\",\"main\",\"nav\",\"noscript\",\"ol\",\"output\",\"p\",\"pre\",\"section\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"tr\",\"ul\",\"video\"],e.extend(e.FE.DEFAULTS,{htmlAllowedEmptyTags:[\"textarea\",\"a\",\"i\",\"iframe\",\"object\",\"video\",\"style\",\"script\",\".icon\",\".bi\",\".fa\",\".fr-emoticon\",\".fr-inner\",\"path\",\"line\"],htmlDoNotWrapTags:[\"figure\",\"script\",\"style\"],htmlSimpleAmpersand:!1,htmlIgnoreCSSProperties:[],htmlExecuteScripts:!0}),e.FE.MODULES.html=function(t){function n(){return t.opts.enter==e.FE.ENTER_P?\"p\":t.opts.enter==e.FE.ENTER_DIV?\"div\":t.opts.enter==e.FE.ENTER_BR?null:void 0}function o(e,n){return!(!e||e===t.el)&&(n?-1!=[\"PRE\",\"SCRIPT\",\"STYLE\"].indexOf(e.tagName)||o(e.parentNode,n):-1!=[\"PRE\",\"SCRIPT\",\"STYLE\"].indexOf(e.tagName))}function r(n){var o,r=[],a=[];if(n){var s=t.el.querySelectorAll(\".fr-marker\");for(o=0;o<s.length;o++){var l=t.node.blockParent(s[o])||s[o];if(l){var d=l.nextSibling,c=l.previousSibling;l&&a.indexOf(l)<0&&t.node.isBlock(l)&&a.push(l),c&&t.node.isBlock(c)&&a.indexOf(c)<0&&a.push(c),d&&t.node.isBlock(d)&&a.indexOf(d)<0&&a.push(d)}}}else a=t.el.querySelectorAll(i());var p=i();for(p+=\",\"+e.FE.VOID_ELEMENTS.join(\",\"),p+=\", .fr-inner\",p+=\",\"+t.opts.htmlAllowedEmptyTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\",o=a.length-1;o>=0;o--)if(!(a[o].textContent&&a[o].textContent.replace(/\\u200B|\\n/g,\"\").length>0||a[o].querySelectorAll(p).length>0)){for(var f=t.node.contents(a[o]),h=!1,u=0;u<f.length;u++)if(f[u].nodeType!=Node.COMMENT_NODE&&f[u].textContent&&f[u].textContent.replace(/\\u200B|\\n/g,\"\").length>0){h=!0;break}h||r.push(a[o])}return r}function i(){return e.FE.BLOCK_TAGS.join(\", \")}function a(n){var o,r,i=e.merge([],e.FE.VOID_ELEMENTS);i=e.merge(i,t.opts.htmlAllowedEmptyTags),i=void 0===n?e.merge(i,e.FE.BLOCK_TAGS):e.merge(i,e.FE.NO_DELETE_TAGS),o=t.el.querySelectorAll(\"*:empty:not(\"+i.join(\"):not(\")+\"):not(.fr-marker)\");do{r=!1;for(var a=0;a<o.length;a++)0!==o[a].attributes.length&&void 0===o[a].getAttribute(\"href\")||(o[a].parentNode.removeChild(o[a]),r=!0);o=t.el.querySelectorAll(\"*:empty:not(\"+i.join(\"):not(\")+\"):not(.fr-marker)\")}while(o.length&&r)}function s(e,o){var r=n();if(o&&(r=\"div\"),r){for(var i=t.doc.createDocumentFragment(),a=null,s=!1,l=e.firstChild,d=!1;l;){var c=l.nextSibling;if(l.nodeType==Node.ELEMENT_NODE&&(t.node.isBlock(l)||t.opts.htmlDoNotWrapTags.indexOf(l.tagName.toLowerCase())>=0&&!t.node.hasClass(l,\"fr-marker\")))a=null,i.appendChild(l.cloneNode(!0));else if(l.nodeType!=Node.ELEMENT_NODE&&l.nodeType!=Node.TEXT_NODE)a=null,i.appendChild(l.cloneNode(!0));else if(\"BR\"==l.tagName)null==a?(a=t.doc.createElement(r),d=!0,o&&(a.setAttribute(\"class\",\"fr-temp-div\"),a.setAttribute(\"data-empty\",!0)),a.appendChild(l.cloneNode(!0)),i.appendChild(a)):!1===s&&(a.appendChild(t.doc.createElement(\"br\")),o&&(a.setAttribute(\"class\",\"fr-temp-div\"),a.setAttribute(\"data-empty\",!0))),a=null;else{var p=l.textContent;l.nodeType!==Node.TEXT_NODE||p.replace(/\\n/g,\"\").replace(/(^ *)|( *$)/g,\"\").length>0||p.replace(/(^ *)|( *$)/g,\"\").length&&p.indexOf(\"\\n\")<0?(null==a&&(a=t.doc.createElement(r),d=!0,o&&a.setAttribute(\"class\",\"fr-temp-div\"),i.appendChild(a),s=!1),a.appendChild(l.cloneNode(!0)),s||t.node.hasClass(l,\"fr-marker\")||l.nodeType==Node.TEXT_NODE&&0===p.replace(/ /g,\"\").length||(s=!0)):d=!0}l=c}d&&(e.innerHTML=\"\",e.appendChild(i))}}function l(e,t){for(var n=e.length-1;n>=0;n--)s(e[n],t)}function d(e,n,o,r,i){if(!t.$wp)return!1;void 0===e&&(e=!1),void 0===n&&(n=!1),void 0===o&&(o=!1),void 0===r&&(r=!1),void 0===i&&(i=!1);var a=t.$wp.scrollTop();s(t.el,e),r&&l(t.el.querySelectorAll(\".fr-inner\"),e),n&&l(t.el.querySelectorAll(\"td, th\"),e),o&&l(t.el.querySelectorAll(\"blockquote\"),e),i&&l(t.el.querySelectorAll(\"li\"),e),a!=t.$wp.scrollTop()&&t.$wp.scrollTop(a)}function c(e){if(void 0===e&&(e=t.el),e&&[\"SCRIPT\",\"STYLE\",\"PRE\"].indexOf(e.tagName)>=0)return!1;for(var n=t.doc.createTreeWalker(e,NodeFilter.SHOW_TEXT,t.node.filter((function(e){return null!=e.textContent.match(/([ \\n]{2,})|(^[ \\n]{1,})|([ \\n]{1,}$)/g)})),!1);n.nextNode();){var r=n.currentNode;if(!o(r.parentNode,!0)){var i=t.node.isBlock(r.parentNode)||t.node.isElement(r.parentNode),a=r.textContent.replace(/(?!^)( ){2,}(?!$)/g,\" \").replace(/\\n/g,\" \").replace(/^[ ]{2,}/g,\" \").replace(/[ ]{2,}$/g,\" \");if(i){var s=r.previousSibling,l=r.nextSibling;s&&l&&\" \"==a?a=t.node.isBlock(s)&&t.node.isBlock(l)?\"\":\" \":(s||(a=a.replace(/^ */,\"\")),l||(a=a.replace(/ *$/,\"\")))}r.textContent=a}}}function p(e,t,n){var o=new RegExp(t,\"gi\").exec(e);return o?o[n]:null}function f(e){var t=e.doctype,n=\"<!DOCTYPE html>\";return t&&(n=\"<!DOCTYPE \"+t.name+(t.publicId?' PUBLIC \"'+t.publicId+'\"':\"\")+(!t.publicId&&t.systemId?\" SYSTEM\":\"\")+(t.systemId?' \"'+t.systemId+'\"':\"\")+\">\"),n}function h(n){var o=n.parentNode;if(o&&(t.node.isBlock(o)||t.node.isElement(o))&&[\"TD\",\"TH\"].indexOf(o.tagName)<0){for(var r=n.previousSibling,i=n.nextSibling;r&&(r.nodeType==Node.TEXT_NODE&&0===r.textContent.replace(/\\n|\\r/g,\"\").length||t.node.hasClass(r,\"fr-tmp\"));)r=r.previousSibling;if(i)return!1;r&&o&&\"BR\"!=r.tagName&&!t.node.isBlock(r)&&!i&&o.textContent.replace(/\\u200B/g,\"\").length>0&&r.textContent.length>0&&!t.node.hasClass(r,\"fr-marker\")&&(t.el==o&&!i&&t.opts.enter==e.FE.ENTER_BR&&t.browser.msie||n.parentNode.removeChild(n))}else!o||t.node.isBlock(o)||t.node.isElement(o)||n.previousSibling||n.nextSibling||!t.node.isDeletable(n.parentNode)||h(n.parentNode)}function u(){t.opts.htmlUntouched||(a(),d(),c(),t.spaces.normalize(null,!0),t.html.fillEmptyBlocks(),t.clean.lists(),t.clean.tables(),t.clean.toHTML5(),t.html.cleanBRs()),t.selection.restore(),g(),t.placeholder.refresh()}function g(){t.node.isEmpty(t.el)&&(null!=n()?t.el.querySelector(i())||t.el.querySelector(t.opts.htmlDoNotWrapTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\")||(t.core.hasFocus()?(t.$el.html(\"<\"+n()+\">\"+e.FE.MARKERS+\"<br/></\"+n()+\">\"),t.selection.restore()):t.$el.html(\"<\"+n()+\"><br/></\"+n()+\">\")):t.el.querySelector(\"*:not(.fr-marker):not(br)\")||(t.core.hasFocus()?(t.$el.html(e.FE.MARKERS+\"<br/>\"),t.selection.restore()):t.$el.html(\"<br/>\")))}function m(e,t){return p(e,\"<\"+t+\"[^>]*?>([\\\\w\\\\W]*)</\"+t+\">\",1)}function v(n,o){var r=e(\"<div \"+(p(n,\"<\"+o+\"([^>]*?)>\",1)||\"\")+\">\");return t.node.rawAttributes(r.get(0))}function b(e){return(p(e,\"<!DOCTYPE([^>]*?)>\",0)||\"<!DOCTYPE html>\").replace(/\\n/g,\" \").replace(/ {2,}/g,\" \")}function E(e,n){t.opts.htmlExecuteScripts?e.html(n):e.get(0).innerHTML=n}function y(e){var t;(t=/:not\\(([^\\)]*)\\)/g).test(e)&&(e=e.replace(t,\"     $1 \"));var n=100*(e.match(/(#[^\\s\\+>~\\.\\[:]+)/g)||[]).length+10*(e.match(/(\\[[^\\]]+\\])/g)||[]).length+10*(e.match(/(\\.[^\\s\\+>~\\.\\[:]+)/g)||[]).length+10*(e.match(/(:[\\w-]+\\([^\\)]*\\))/gi)||[]).length+10*(e.match(/(:[^\\s\\+>~\\.\\[:]+)/g)||[]).length+(e.match(/(::[^\\s\\+>~\\.\\[:]+|:first-line|:first-letter|:before|:after)/gi)||[]).length;return n+=((e=(e=e.replace(/[\\*\\s\\+>~]/g,\" \")).replace(/[#\\.]/g,\" \")).match(/([^\\s\\+>~\\.\\[:]+)/g)||[]).length}function w(e){if(t.events.trigger(\"html.processGet\",[e]),e&&e.getAttribute&&\"\"===e.getAttribute(\"class\")&&e.removeAttribute(\"class\"),e&&e.getAttribute&&\"\"===e.getAttribute(\"style\")&&e.removeAttribute(\"style\"),e&&e.nodeType==Node.ELEMENT_NODE){var n,o=e.querySelectorAll('[class=\"\"],[style=\"\"]');for(n=0;n<o.length;n++){var r=o[n];\"\"===r.getAttribute(\"class\")&&r.removeAttribute(\"class\"),\"\"===r.getAttribute(\"style\")&&r.removeAttribute(\"style\")}if(\"BR\"===e.tagName)h(e);else{var i=e.querySelectorAll(\"br\");for(n=0;n<i.length;n++)h(i[n])}}}function S(e,t){return e[3]-t[3]}function C(e){var n=t.doc.createElement(\"div\");return n.innerHTML=e,null!==n.querySelector(i())}function _(n){var o=null;if(void 0===n&&(o=t.selection.element()),t.opts.keepFormatOnDelete)return!1;var r,i,a=o?(o.textContent.match(/\\u200B/g)||[]).length-o.querySelectorAll(\".fr-marker\").length:0;if((t.el.textContent.match(/\\u200B/g)||[]).length-t.el.querySelectorAll(\".fr-marker\").length==a)return!1;do{i=!1,r=t.el.querySelectorAll(\"*:not(.fr-marker)\");for(var s=0;s<r.length;s++){var l=r[s];if(o!=l){var d=l.textContent;0===l.children.length&&1===d.length&&8203==d.charCodeAt(0)&&\"TD\"!==l.tagName&&(e(l).remove(),i=!0)}}}while(i)}return{defaultTag:n,isPreformatted:o,emptyBlocks:r,emptyBlockTagsQuery:function(){return e.FE.BLOCK_TAGS.join(\":empty, \")+\":empty\"},blockTagsQuery:i,fillEmptyBlocks:function(n){var o=r(n);t.node.isEmpty(t.el)&&t.opts.enter===e.FE.ENTER_BR&&o.push(t.el);for(var i=0;i<o.length;i++){var a=o[i];\"false\"===a.getAttribute(\"contenteditable\")||a.querySelector(t.opts.htmlAllowedEmptyTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\")||t.node.isVoid(a)||\"TABLE\"!=a.tagName&&\"TBODY\"!=a.tagName&&\"TR\"!=a.tagName&&\"UL\"!=a.tagName&&\"OL\"!=a.tagName&&a.appendChild(t.doc.createElement(\"br\"))}if(t.browser.msie&&t.opts.enter==e.FE.ENTER_BR){var s=t.node.contents(t.el);s.length&&s[s.length-1].nodeType==Node.TEXT_NODE&&t.$el.append(\"<br>\")}},cleanEmptyTags:a,cleanWhiteTags:_,cleanBlankSpaces:c,blocks:function(){return t.$el.get(0).querySelectorAll(i())},getDoctype:f,set:function(n){var o,r,i,a=t.clean.html((n||\"\").trim(),[],[],t.opts.fullPage);if(t.opts.fullPage){var s=m(a,\"body\")||(a.indexOf(\"<body\")>=0?\"\":a),l=v(a,\"body\"),d=m(a,\"head\")||\"<title></title>\",c=v(a,\"head\"),p=e(\"<div>\").append(d).contents().each((function(){(this.nodeType==Node.COMMENT_NODE||[\"BASE\",\"LINK\",\"META\",\"NOSCRIPT\",\"SCRIPT\",\"STYLE\",\"TEMPLATE\",\"TITLE\"].indexOf(this.tagName)>=0)&&this.parentNode.removeChild(this)})).end().html().trim();d=e(\"<div>\").append(d).contents().map((function(){return this.nodeType==Node.COMMENT_NODE?\"\\x3c!--\"+this.nodeValue+\"--\\x3e\":[\"BASE\",\"LINK\",\"META\",\"NOSCRIPT\",\"SCRIPT\",\"STYLE\",\"TEMPLATE\",\"TITLE\"].indexOf(this.tagName)>=0?this.outerHTML:\"\"})).toArray().join(\"\");var f=b(a),h=v(a,\"html\");E(t.$el,p+\"\\n\"+s),t.node.clearAttributes(t.el),t.$el.attr(l),t.$el.addClass(\"fr-view\"),t.$el.attr(\"spellcheck\",t.opts.spellcheck),t.$el.attr(\"dir\",t.opts.direction),E(t.$head,d),t.node.clearAttributes(t.$head.get(0)),t.$head.attr(c),t.node.clearAttributes(t.$html.get(0)),t.$html.attr(h),t.iframe_document.doctype.parentNode.replaceChild((o=f,r=t.iframe_document,(i=o.match(/<!DOCTYPE ?([^ ]*) ?([^ ]*) ?\"?([^\"]*)\"? ?\"?([^\"]*)\"?>/i))?r.implementation.createDocumentType(i[1],i[3],i[4]):r.implementation.createDocumentType(\"html\")),t.iframe_document.doctype)}else E(t.$el,a);var g=t.edit.isDisabled();t.edit.on(),t.core.injectStyle(t.opts.iframeDefaultStyle+t.opts.iframeStyle),u(),t.opts.useClasses||(t.$el.find(\"[fr-original-class]\").each((function(){this.setAttribute(\"class\",this.getAttribute(\"fr-original-class\")),this.removeAttribute(\"fr-original-class\")})),t.$el.find(\"[fr-original-style]\").each((function(){this.setAttribute(\"style\",this.getAttribute(\"fr-original-style\")),this.removeAttribute(\"fr-original-style\")}))),g&&t.edit.off(),t.events.trigger(\"html.set\")},get:function(e,n){if(!t.$wp)return t.$oel.clone().removeClass(\"fr-view\").removeAttr(\"contenteditable\").get(0).outerHTML;var o=\"\";t.events.trigger(\"html.beforeGet\");var r,i,a=[],s={},l=[],d=t.el.querySelectorAll(\"input, textarea\");for(r=0;r<d.length;r++)d[r].setAttribute(\"value\",d[r].value);if(!t.opts.useClasses&&!n){var c=new RegExp(\"^\"+t.opts.htmlIgnoreCSSProperties.join(\"$|^\")+\"$\",\"gi\");for(r=0;r<t.doc.styleSheets.length;r++){var p,h=0;try{p=t.doc.styleSheets[r].cssRules,t.doc.styleSheets[r].ownerNode&&\"STYLE\"==t.doc.styleSheets[r].ownerNode.nodeType&&(h=1)}catch(e){}if(p)for(var u=0,g=p.length;u<g;u++)if(p[u].selectorText&&p[u].style.cssText.length>0){var m,v=p[u].selectorText.replace(/body |\\.fr-view /g,\"\").replace(/::/g,\":\");try{m=t.el.querySelectorAll(v)}catch(e){m=[]}for(i=0;i<m.length;i++){!m[i].getAttribute(\"fr-original-style\")&&m[i].getAttribute(\"style\")?(m[i].setAttribute(\"fr-original-style\",m[i].getAttribute(\"style\")),a.push(m[i])):m[i].getAttribute(\"fr-original-style\")||(m[i].setAttribute(\"fr-original-style\",\"\"),a.push(m[i])),s[m[i]]||(s[m[i]]={});for(var b=1e3*h+y(p[u].selectorText),E=p[u].style.cssText.split(\";\"),C=0;C<E.length;C++){var _=E[C].trim().split(\":\")[0];if(_&&(!_.match(c)&&(s[m[i]][_]||(s[m[i]][_]=0,(m[i].getAttribute(\"fr-original-style\")||\"\").indexOf(_+\":\")>=0&&(s[m[i]][_]=1e4)),b>=s[m[i]][_]&&(s[m[i]][_]=b,E[C].trim().length)))){var T=E[C].trim().split(\":\");T.splice(0,1),l.push([m[i],_.trim(),T.join(\":\").trim(),b])}}}}}for(l.sort(S),r=0;r<l.length;r++){var k=l[r];k[0].style[k[1]]=k[2]}for(r=0;r<a.length;r++)if(a[r].getAttribute(\"class\")&&(a[r].setAttribute(\"fr-original-class\",a[r].getAttribute(\"class\")),a[r].removeAttribute(\"class\")),(a[r].getAttribute(\"fr-original-style\")||\"\").trim().length>0){var A=a[r].getAttribute(\"fr-original-style\").split(\";\");for(i=0;i<A.length;i++)if(A[i].indexOf(\":\")>0){var x=A[i].split(\":\"),N=x[0];x.splice(0,1),a[r].style[N.trim()]=x.join(\":\").trim()}}}if(t.node.isEmpty(t.el))t.opts.fullPage&&(o=f(t.iframe_document),o+=\"<html\"+t.node.attributes(t.$html.get(0))+\">\"+t.$html.find(\"head\").get(0).outerHTML+\"<body></body></html>\");else if(void 0===e&&(e=!1),t.opts.fullPage){o=f(t.iframe_document),t.$el.removeClass(\"fr-view\");var R=t.opts.heightMin,F=t.opts.height,O=t.opts.heightMax;t.opts.heightMin=null,t.opts.height=null,t.opts.heightMax=null,t.size.refresh(),o+=\"<html\"+t.node.attributes(t.$html.get(0))+\">\"+t.$html.html()+\"</html>\",t.opts.heightMin=R,t.opts.height=F,t.opts.heightMax=O,t.size.refresh(),t.$el.addClass(\"fr-view\")}else o=t.$el.html();if(!t.opts.useClasses&&!n)for(r=0;r<a.length;r++)a[r].getAttribute(\"fr-original-class\")&&(a[r].setAttribute(\"class\",a[r].getAttribute(\"fr-original-class\")),a[r].removeAttribute(\"fr-original-class\")),null!=a[r].getAttribute(\"fr-original-style\")&&void 0!==a[r].getAttribute(\"fr-original-style\")?(0!==a[r].getAttribute(\"fr-original-style\").length?a[r].setAttribute(\"style\",a[r].getAttribute(\"fr-original-style\")):a[r].removeAttribute(\"style\"),a[r].removeAttribute(\"fr-original-style\")):a[r].removeAttribute(\"style\");t.opts.fullPage&&(o=(o=(o=(o=(o=(o=(o=(o=o.replace(/<style data-fr-style=\"true\">(?:[\\w\\W]*?)<\\/style>/g,\"\")).replace(/<link([^>]*)data-fr-style=\"true\"([^>]*)>/g,\"\")).replace(/<style(?:[\\w\\W]*?)class=\"firebugResetStyles\"(?:[\\w\\W]*?)>(?:[\\w\\W]*?)<\\/style>/g,\"\")).replace(/<body((?:[\\w\\W]*?)) spellcheck=\"true\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,\"<body$1$2>$3</body>\")).replace(/<body((?:[\\w\\W]*?)) contenteditable=\"(true|false)\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,\"<body$1$3>$4</body>\")).replace(/<body((?:[\\w\\W]*?)) dir=\"([\\w]*)\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,\"<body$1$3>$4</body>\")).replace(/<body((?:[\\w\\W]*?))class=\"([\\w\\W]*?)(fr-rtl|fr-ltr)([\\w\\W]*?)\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,'<body$1class=\"$2$4\"$5>$6</body>')).replace(/<body((?:[\\w\\W]*?)) class=\"\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,\"<body$1$2>$3</body>\")),t.opts.htmlSimpleAmpersand&&(o=o.replace(/\\&amp;/gi,\"&\")),t.events.trigger(\"html.afterGet\"),e||(o=o.replace(/<span[^>]*? class\\s*=\\s*[\"']?fr-marker[\"']?[^>]+>\\u200b<\\/span>/gi,\"\")),o=t.clean.invisibleSpaces(o),o=t.clean.exec(o,w);var D=t.events.chainTrigger(\"html.get\",o);return\"string\"==typeof D&&(o=D),o=(o=o.replace(/<pre(?:[\\w\\W]*?)>(?:[\\w\\W]*?)<\\/pre>/g,(function(e){return e.replace(/<br>/g,\"\\n\")}))).replace(/<meta((?:[\\w\\W]*?)) data-fr-http-equiv=\"/g,'<meta$1 http-equiv=\"')},getSelected:function(){var n,o,r=function(n,o){for(;o&&(o.nodeType==Node.TEXT_NODE||!t.node.isBlock(o))&&!t.node.isElement(o)&&!t.node.hasClass(o,\"fr-inner\");)o&&o.nodeType!=Node.TEXT_NODE&&e(n).wrapInner(t.node.openTagString(o)+t.node.closeTagString(o)),o=o.parentNode;o&&n.innerHTML==o.innerHTML&&(n.innerHTML=o.outerHTML)},i=\"\";if(void 0!==t.win.getSelection){t.browser.mozilla&&(t.selection.save(),t.$el.find('.fr-marker[data-type=\"false\"]').length>1&&(t.$el.find('.fr-marker[data-type=\"false\"][data-id=\"0\"]').remove(),t.$el.find('.fr-marker[data-type=\"false\"]:last').attr(\"data-id\",\"0\"),t.$el.find(\".fr-marker\").not('[data-id=\"0\"]').remove()),t.selection.restore());for(var a=t.selection.ranges(),s=0;s<a.length;s++){var l=document.createElement(\"div\");l.appendChild(a[s].cloneContents()),r(l,(n=void 0,o=void 0,o=null,t.win.getSelection?(n=t.win.getSelection())&&n.rangeCount&&(o=n.getRangeAt(0).commonAncestorContainer).nodeType!=Node.ELEMENT_NODE&&(o=o.parentNode):(n=t.doc.selection)&&\"Control\"!=n.type&&(o=n.createRange().parentElement()),null!=o&&(e.inArray(t.el,e(o).parents())>=0||o==t.el)?o:null)),e(l).find(\".fr-element\").length>0&&(l=t.el),i+=l.innerHTML}}else void 0!==t.doc.selection&&\"Text\"==t.doc.selection.type&&(i=t.doc.selection.createRange().htmlText);return i},insert:function(n,o,r){var i,a,s;if(t.selection.isCollapsed()||t.selection.remove(),i=o?n:t.clean.html(n),n.indexOf('class=\"fr-marker\"')<0&&(a=i,(s=t.doc.createElement(\"div\")).innerHTML=a,t.selection.setAtEnd(s,!0),i=s.innerHTML),t.node.isEmpty(t.el)&&!t.opts.keepFormatOnDelete&&C(i))t.el.innerHTML=i;else{var l=t.markers.insert();if(l){t.node.isLastSibling(l)&&e(l).parent().hasClass(\"fr-deletable\")&&e(l).insertAfter(e(l).parent());var d=t.node.blockParent(l);if((C(i)||r)&&(t.node.deepestParent(l)||d&&\"LI\"==d.tagName)){if(d&&\"LI\"==d.tagName&&(i=function(n){if(!t.html.defaultTag())return n;var o=t.doc.createElement(\"div\");o.innerHTML=n;for(var r=o.querySelectorAll(\":scope > \"+t.html.defaultTag()),i=r.length-1;i>=0;i--){var a=r[i];t.node.isBlock(a.previousSibling)||(a.previousSibling&&!t.node.isEmpty(a)&&e(\"<br>\").insertAfter(a.previousSibling),a.outerHTML=a.innerHTML)}return o.innerHTML}(i)),!(l=t.markers.split()))return!1;l.outerHTML=i}else l.outerHTML=i}else t.el.innerHTML=t.el.innerHTML+i}u(),t.keys.positionCaret(),t.events.trigger(\"html.inserted\")},wrap:d,unwrap:function(){t.$el.find(\"div.fr-temp-div\").each((function(){this.previousSibling&&this.previousSibling.nodeType===Node.TEXT_NODE&&e(this).before(\"<br>\"),e(this).attr(\"data-empty\")||!this.nextSibling||t.node.isBlock(this.nextSibling)&&!e(this.nextSibling).hasClass(\"fr-temp-div\")?e(this).replaceWith(e(this).html()):e(this).replaceWith(e(this).html()+\"<br>\")})),t.$el.find(\".fr-temp-div\").removeClass(\"fr-temp-div\").filter((function(){return\"\"===e(this).attr(\"class\")})).removeAttr(\"class\")},escapeEntities:function(e){return e.replace(/</gi,\"&lt;\").replace(/>/gi,\"&gt;\").replace(/\"/gi,\"&quot;\").replace(/'/gi,\"&#39;\")},checkIfEmpty:g,extractNode:m,extractNodeAttrs:v,extractDoctype:b,cleanBRs:function(){for(var e=t.el.getElementsByTagName(\"br\"),n=0;n<e.length;n++)h(e[n])},_init:function(){if(t.$wp){var e=function(){_(),t.placeholder&&setTimeout(t.placeholder.refresh,0)};t.events.on(\"mouseup\",e),t.events.on(\"keydown\",e),t.events.on(\"contentChanged\",g)}}}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{height:null,heightMax:null,heightMin:null,width:null}),e.FE.MODULES.size=function(e){function t(){n(),e.opts.height&&e.$el.css(\"minHeight\",e.opts.height-e.helpers.getPX(e.$el.css(\"padding-top\"))-e.helpers.getPX(e.$el.css(\"padding-bottom\"))),e.$iframe.height(e.$el.outerHeight(!0))}function n(){e.opts.heightMin?e.$el.css(\"minHeight\",e.opts.heightMin):e.$el.css(\"minHeight\",\"\"),e.opts.heightMax?(e.$wp.css(\"maxHeight\",e.opts.heightMax),e.$wp.css(\"overflow\",\"auto\")):(e.$wp.css(\"maxHeight\",\"\"),e.$wp.css(\"overflow\",\"\")),e.opts.height?(e.$wp.height(e.opts.height),e.$wp.css(\"overflow\",\"auto\"),e.$el.css(\"minHeight\",e.opts.height-e.helpers.getPX(e.$el.css(\"padding-top\"))-e.helpers.getPX(e.$el.css(\"padding-bottom\")))):(e.$wp.css(\"height\",\"\"),e.opts.heightMin||e.$el.css(\"minHeight\",\"\"),e.opts.heightMax||e.$wp.css(\"overflow\",\"\")),e.opts.width&&e.$box.width(e.opts.width)}return{_init:function(){if(!e.$wp)return!1;n(),e.$iframe&&(e.events.on(\"keyup keydown\",(function(){setTimeout(t,0)}),!0),e.events.on(\"commands.after html.set init initialized paste.after\",t))},syncIframe:t,refresh:n}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{language:null}),e.FE_LANGUAGE||(e.FE_LANGUAGE={}),e.FE.MODULES.language=function(t){var n;return{_init:function(){e.FE_LANGUAGE&&(n=e.FE_LANGUAGE[t.opts.language]),n&&n.direction&&(t.opts.direction=n.direction)},translate:function(e){return n&&n.translation[e]&&n.translation[e].length?n.translation[e]:e}}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{placeholderText:\"Type something\"}),e.FE.MODULES.placeholder=function(t){function n(){t.$placeholder||(t.$placeholder=e('<span class=\"fr-placeholder\"></span>'),t.$wp.append(t.$placeholder));var n=t.opts.iframe?t.$iframe.prev().outerHeight(!0):t.$el.prev().outerHeight(!0),o=0,r=0,i=0,a=0,s=0,l=0,d=t.node.contents(t.el),c=e(t.selection.element()).css(\"text-align\");if(d.length&&d[0].nodeType==Node.ELEMENT_NODE){var p=e(d[0]);(!t.opts.toolbarInline||t.$el.prev().length>0)&&t.ready&&(o=t.helpers.getPX(p.css(\"margin-top\")),a=t.helpers.getPX(p.css(\"padding-top\")),r=t.helpers.getPX(p.css(\"margin-left\")),i=t.helpers.getPX(p.css(\"margin-right\")),s=t.helpers.getPX(p.css(\"padding-left\")),l=t.helpers.getPX(p.css(\"padding-right\"))),t.$placeholder.css(\"font-size\",p.css(\"font-size\")),t.$placeholder.css(\"line-height\",p.css(\"line-height\"))}else t.$placeholder.css(\"font-size\",t.$el.css(\"font-size\")),t.$placeholder.css(\"line-height\",t.$el.css(\"line-height\"));if(t.$wp.addClass(\"show-placeholder\"),t.$placeholder.css({marginTop:Math.max(t.helpers.getPX(t.$el.css(\"margin-top\")),o)+(n||0),paddingTop:Math.max(t.helpers.getPX(t.$el.css(\"padding-top\")),a),paddingLeft:Math.max(t.helpers.getPX(t.$el.css(\"padding-left\")),s),marginLeft:Math.max(t.helpers.getPX(t.$el.css(\"margin-left\")),r),paddingRight:Math.max(t.helpers.getPX(t.$el.css(\"padding-right\")),l),marginRight:Math.max(t.helpers.getPX(t.$el.css(\"margin-right\")),i),textAlign:c}).text(t.language.translate(t.opts.placeholderText||t.$oel.attr(\"placeholder\")||\"\")),t.$placeholder.html(t.$placeholder.text().replace(/\\n/g,\"<br>\")),t.size.refresh(),t.$placeholder.height()>t.$el.height()){var f=t.opts.heightMin;t.opts.heightMin=t.$placeholder.height()+t.$tb?t.$tb.height():0,t.size.refresh(),t.opts.heightMin=f}}function o(){t.$wp.removeClass(\"show-placeholder\"),t.size.refresh()}function r(){if(!t.$wp)return!1;t.core.isEmpty()?n():o()}return{_init:function(){if(!t.$wp)return!1;t.events.on(\"init input keydown keyup contentChanged initialized\",r)},show:n,hide:o,refresh:r,isVisible:function(){return!!t.$wp&&t.node.hasClass(t.$wp.get(0),\"show-placeholder\")}}}}(jQuery),jQuery.FE.MODULES.edit=function(e){function t(){if(e.browser.mozilla)try{e.doc.execCommand(\"enableObjectResizing\",!1,\"false\"),e.doc.execCommand(\"enableInlineTableEditing\",!1,\"false\")}catch(e){}if(e.browser.msie)try{e.doc.body.addEventListener(\"mscontrolselect\",(function(e){return e.preventDefault(),!1}))}catch(e){}}var n=!1;function o(){return n}return{_init:function(){e.events.on(\"focus\",(function(){o()?e.edit.off():e.edit.on()}))},on:function(){e.$wp?(e.$el.attr(\"contenteditable\",!0),e.$el.removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1),e.$tb&&e.$tb.removeClass(\"fr-disabled\").removeAttr(\"aria-disabled\"),t()):e.$el.is(\"a\")&&e.$el.attr(\"contenteditable\",!0),n=!1},off:function(){e.events.disableBlur(),e.$wp?(e.$el.attr(\"contenteditable\",!1),e.$el.addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),e.$tb&&e.$tb.addClass(\"fr-disabled\").attr(\"aria-disabled\",!0)):e.$el.is(\"a\")&&e.$el.attr(\"contenteditable\",!1),e.events.enableBlur(),n=!0},disableDesign:t,isDisabled:o}},function(e){e.extend(e.FE.DEFAULTS,{documentReady:!1,editorClass:null,typingTimer:500,iframe:!1,requestWithCORS:!0,requestWithCredentials:!1,requestHeaders:{},useClasses:!0,spellcheck:!0,iframeDefaultStyle:'html{margin:0px;height:auto;}body{height:auto;padding:10px;background:transparent;color:#000000;position:relative;z-index: 2;-webkit-user-select:auto;margin:0px;overflow:hidden;min-height:20px;}body:after{content:\"\";display:block;clear:both;}body::-moz-selection{background:#b5d6fd;color:#000;}body::selection{background:#b5d6fd;color:#000;}',iframeStyle:\"\",iframeStyleFiles:[],direction:\"auto\",zIndex:1,tabIndex:null,disableRightClick:!1,scrollableContainer:\"body\",keepFormatOnDelete:!1,theme:null}),e.FE.MODULES.core=function(t){function n(){if(t.$box.addClass(\"fr-box\"+(t.opts.editorClass?\" \"+t.opts.editorClass:\"\")),t.$box.attr(\"role\",\"application\"),t.$wp.addClass(\"fr-wrapper\"),t.opts.documentReady&&t.$box.addClass(\"fr-document\"),t.opts.iframe||t.$el.addClass(\"fr-element fr-view\"),(t.opts.height===1/0||t.opts.height&&t.opts.height<window.innerHeight||t.opts.heightMax&&t.opts.heightMax<window.innerHeight)&&t.$el.addClass(\"fr-element-scroll-visible\"),t.opts.iframe){t.$iframe.addClass(\"fr-iframe\"),t.$el.addClass(\"fr-view\");for(var e=0;e<t.o_doc.styleSheets.length;e++){var n;try{n=t.o_doc.styleSheets[e].cssRules}catch(e){}if(n)for(var o=0,r=n.length;o<r;o++)!n[o].selectorText||0!==n[o].selectorText.indexOf(\".fr-view\")&&0!==n[o].selectorText.indexOf(\".fr-element\")||n[o].style.cssText.length>0&&(0===n[o].selectorText.indexOf(\".fr-view\")?t.opts.iframeStyle+=n[o].selectorText.replace(/\\.fr-view/g,\"body\")+\"{\"+n[o].style.cssText+\"}\":t.opts.iframeStyle+=n[o].selectorText.replace(/\\.fr-element/g,\"body\")+\"{\"+n[o].style.cssText+\"}\")}}\"auto\"!=t.opts.direction&&t.$box.removeClass(\"fr-ltr fr-rtl\").addClass(\"fr-\"+t.opts.direction),t.$el.attr(\"dir\",t.opts.direction),t.$wp.attr(\"dir\",t.opts.direction),t.opts.zIndex>1&&t.$box.css(\"z-index\",t.opts.zIndex),t.opts.theme&&t.$box.addClass(t.opts.theme+\"-theme\"),t.opts.tabIndex=t.opts.tabIndex||t.$oel.attr(\"tabIndex\"),t.opts.tabIndex&&t.$el.attr(\"tabIndex\",t.opts.tabIndex)}return{_init:function(){if(e.FE.INSTANCES.push(t),t.drag_support={filereader:\"undefined\"!=typeof FileReader,formdata:!!t.win.FormData,progress:\"upload\"in new XMLHttpRequest},t.$wp){n(),t.html.set(t._original_html),t.$el.attr(\"spellcheck\",t.opts.spellcheck),t.helpers.isMobile()&&(t.$el.attr(\"autocomplete\",t.opts.spellcheck?\"on\":\"off\"),t.$el.attr(\"autocorrect\",t.opts.spellcheck?\"on\":\"off\"),t.$el.attr(\"autocapitalize\",t.opts.spellcheck?\"on\":\"off\")),t.opts.disableRightClick&&t.events.$on(t.$el,\"contextmenu\",(function(e){if(2==e.button)return!1}));try{t.doc.execCommand(\"styleWithCSS\",!1,!1)}catch(e){}}\"TEXTAREA\"==t.$oel.get(0).tagName&&(t.events.on(\"contentChanged\",(function(){t.$oel.val(t.html.get())})),t.events.on(\"form.submit\",(function(){t.$oel.val(t.html.get())})),t.events.on(\"form.reset\",(function(){t.html.set(t._original_html)})),t.$oel.val(t.html.get())),t.helpers.isIOS()&&t.events.$on(t.$doc,\"selectionchange\",(function(){t.$doc.get(0).hasFocus()||t.$win.get(0).focus()})),t.events.trigger(\"init\"),t.opts.autofocus&&!t.opts.initOnClick&&t.$wp&&t.events.on(\"initialized\",(function(){t.events.focus(!0)}))},destroy:function(e){\"TEXTAREA\"==t.$oel.get(0).tagName&&t.$oel.val(e),t.$box&&t.$box.removeAttr(\"role\"),t.$wp&&(\"TEXTAREA\"==t.$oel.get(0).tagName?(t.$el.html(\"\"),t.$wp.html(\"\"),t.$box.replaceWith(t.$oel),t.$oel.show()):(t.$wp.replaceWith(e),t.$el.html(\"\"),t.$box.removeClass(\"fr-view fr-ltr fr-box \"+(t.opts.editorClass||\"\")),t.opts.theme&&t.$box.addClass(t.opts.theme+\"-theme\"))),this.$wp=null,this.$el=null,this.el=null,this.$box=null},isEmpty:function(){return t.node.isEmpty(t.el)},getXHR:function(e,n){var o=new XMLHttpRequest;for(var r in o.open(n,e,!0),t.opts.requestWithCredentials&&(o.withCredentials=!0),t.opts.requestHeaders)t.opts.requestHeaders.hasOwnProperty(r)&&o.setRequestHeader(r,t.opts.requestHeaders[r]);return o},injectStyle:function(n){if(t.opts.iframe){t.$head.find(\"style[data-fr-style], link[data-fr-style]\").remove(),t.$head.append('<style data-fr-style=\"true\">'+n+\"</style>\");for(var o=0;o<t.opts.iframeStyleFiles.length;o++){var r=e('<link data-fr-style=\"true\" rel=\"stylesheet\" href=\"'+t.opts.iframeStyleFiles[o]+'\">');r.get(0).addEventListener(\"load\",t.size.syncIframe),t.$head.append(r)}}},hasFocus:function(){return t.browser.mozilla&&t.helpers.isMobile()?t.selection.inEditor():t.node.hasFocus(t.el)||t.$el.find(\"*:focus\").length>0},sameInstance:function(e){if(!e)return!1;var n=e.data(\"instance\");return!!n&&n.id==t.id}}}}(jQuery),function(e){e.FE.MODULES.cursorLists=function(t){function n(e){for(var t=e;\"LI\"!=t.tagName;)t=t.parentNode;return t}function o(e){for(var n=e;!t.node.isList(n);)n=n.parentNode;return n}return{_startEnter:function(r){var i,a=n(r),s=a.nextSibling,l=a.previousSibling,d=t.html.defaultTag();if(t.node.isEmpty(a,!0)&&s){for(var c=\"\",p=\"\",f=r.parentNode;!t.node.isList(f)&&f.parentNode&&(\"LI\"!==f.parentNode.tagName||f.parentNode===a);)c=t.node.openTagString(f)+c,p+=t.node.closeTagString(f),f=f.parentNode;c=t.node.openTagString(f)+c,p+=t.node.closeTagString(f);var h=\"\";for(h=f.parentNode&&\"LI\"==f.parentNode.tagName?p+\"<li>\"+e.FE.MARKERS+\"<br>\"+c:d?p+\"<\"+d+\">\"+e.FE.MARKERS+\"<br></\"+d+\">\"+c:p+e.FE.MARKERS+\"<br>\"+c;[\"UL\",\"OL\"].indexOf(f.tagName)<0||f.parentNode&&\"LI\"===f.parentNode.tagName;)f=f.parentNode;e(a).replaceWith('<span id=\"fr-break\"></span>');var u=t.node.openTagString(f)+e(f).html()+t.node.closeTagString(f);u=u.replace(/<span id=\"fr-break\"><\\/span>/g,h),e(f).replaceWith(u),t.$el.find(\"li:empty\").remove()}else if(l&&s||!t.node.isEmpty(a,!0)){for(var g=\"<br>\",m=r.parentNode;m&&\"LI\"!=m.tagName;)g=t.node.openTagString(m)+g+t.node.closeTagString(m),m=m.parentNode;e(a).before(\"<li>\"+g+\"</li>\"),e(r).remove()}else if(l){i=o(a);for(var v=e.FE.MARKERS+\"<br>\",b=r.parentNode;b&&\"LI\"!=b.tagName;)v=t.node.openTagString(b)+v+t.node.closeTagString(b),b=b.parentNode;i.parentNode&&\"LI\"==i.parentNode.tagName?e(i.parentNode).after(\"<li>\"+v+\"</li>\"):d?e(i).after(\"<\"+d+\">\"+v+\"</\"+d+\">\"):e(i).after(v),e(a).remove()}else(i=o(a)).parentNode&&\"LI\"==i.parentNode.tagName?s?e(i.parentNode).before(t.node.openTagString(a)+e.FE.MARKERS+\"<br></li>\"):e(i.parentNode).after(t.node.openTagString(a)+e.FE.MARKERS+\"<br></li>\"):d?e(i).before(\"<\"+d+\">\"+e.FE.MARKERS+\"<br></\"+d+\">\"):e(i).before(e.FE.MARKERS+\"<br>\"),e(a).remove()},_middleEnter:function(o){for(var r=n(o),i=\"\",a=o,s=\"\",l=\"\";a!=r;){var d=\"A\"==(a=a.parentNode).tagName&&t.cursor.isAtEnd(o,a)?\"fr-to-remove\":\"\";s=t.node.openTagString(e(a).clone().addClass(d).get(0))+s,l=t.node.closeTagString(a)+l}i=l+i+s+e.FE.MARKERS+(t.opts.keepFormatOnDelete?e.FE.INVISIBLE_SPACE:\"\"),e(o).replaceWith('<span id=\"fr-break\"></span>');var c=t.node.openTagString(r)+e(r).html()+t.node.closeTagString(r);c=c.replace(/<span id=\"fr-break\"><\\/span>/g,i),e(r).replaceWith(c)},_endEnter:function(o){for(var r=n(o),i=e.FE.MARKERS,a=\"\",s=o,l=!1;s!=r;){var d=\"A\"==(s=s.parentNode).tagName&&t.cursor.isAtEnd(o,s)?\"fr-to-remove\":\"\";l||s==r||t.node.isBlock(s)||(l=!0,a+=e.FE.INVISIBLE_SPACE),a=t.node.openTagString(e(s).clone().addClass(d).get(0))+a,i+=t.node.closeTagString(s)}var c=a+i;e(o).remove(),e(r).after(c)},_backspace:function(r){var i=n(r),a=i.previousSibling;if(a){a=e(a).find(t.html.blockTagsQuery()).get(-1)||a,e(r).replaceWith(e.FE.MARKERS);var s=t.node.contents(a);s.length&&\"BR\"==s[s.length-1].tagName&&e(s[s.length-1]).remove(),e(i).find(t.html.blockTagsQuery()).not(\"ol, ul, table\").each((function(){this.parentNode==i&&e(this).replaceWith(e(this).html()+(t.node.isEmpty(this)?\"\":\"<br>\"))}));for(var l,d=t.node.contents(i)[0];d&&!t.node.isList(d);)l=d.nextSibling,e(a).append(d),d=l;for(a=i.previousSibling;d;)l=d.nextSibling,e(a).append(d),d=l;(s=t.node.contents(a)).length>1&&\"BR\"===s[s.length-1].tagName&&e(s[s.length-1]).remove(),e(i).remove()}else{var c=o(i);if(e(r).replaceWith(e.FE.MARKERS),c.parentNode&&\"LI\"==c.parentNode.tagName){var p=c.previousSibling;t.node.isBlock(p)?(e(i).find(t.html.blockTagsQuery()).not(\"ol, ul, table\").each((function(){this.parentNode==i&&e(this).replaceWith(e(this).html()+(t.node.isEmpty(this)?\"\":\"<br>\"))})),e(p).append(e(i).html())):e(c).before(e(i).html())}else{var f=t.html.defaultTag();f&&0===e(i).find(t.html.blockTagsQuery()).length?e(c).before(\"<\"+f+\">\"+e(i).html()+\"</\"+f+\">\"):e(c).before(e(i).html())}e(i).remove(),t.html.wrap(),0===e(c).find(\"li\").length&&e(c).remove()}},_del:function(o){var r,i=n(o),a=i.nextSibling;if(a){(r=t.node.contents(a)).length&&\"BR\"==r[0].tagName&&e(r[0]).remove(),e(a).find(t.html.blockTagsQuery()).not(\"ol, ul, table\").each((function(){this.parentNode==a&&e(this).replaceWith(e(this).html()+(t.node.isEmpty(this)?\"\":\"<br>\"))}));for(var s,l=o,d=t.node.contents(a)[0];d&&!t.node.isList(d);)s=d.nextSibling,e(l).after(d),l=d,d=s;for(;d;)s=d.nextSibling,e(i).append(d),d=s;e(o).replaceWith(e.FE.MARKERS),e(a).remove()}else{for(var c=i;!c.nextSibling&&c!=t.el;)c=c.parentNode;if(c==t.el)return!1;if(c=c.nextSibling,t.node.isBlock(c))e.FE.NO_DELETE_TAGS.indexOf(c.tagName)<0&&(e(o).replaceWith(e.FE.MARKERS),(r=t.node.contents(i)).length&&\"BR\"==r[r.length-1].tagName&&e(r[r.length-1]).remove(),e(i).append(e(c).html()),e(c).remove());else for((r=t.node.contents(i)).length&&\"BR\"==r[r.length-1].tagName&&e(r[r.length-1]).remove(),e(o).replaceWith(e.FE.MARKERS);c&&!t.node.isBlock(c)&&\"BR\"!=c.tagName;)e(i).append(e(c)),c=c.nextSibling}}}}}(jQuery),function(e){e.FE.NO_DELETE_TAGS=[\"TH\",\"TD\",\"TR\",\"TABLE\",\"FORM\"],e.FE.SIMPLE_ENTER_TAGS=[\"TH\",\"TD\",\"LI\",\"DL\",\"DT\",\"FORM\"],e.FE.MODULES.cursor=function(t){function n(e){return!!e&&(!!t.node.isBlock(e)||(e.nextSibling&&e.nextSibling.nodeType==Node.TEXT_NODE&&0===e.nextSibling.textContent.replace(/\\u200b/g,\"\").length?n(e.nextSibling):!(e.nextSibling&&(!e.previousSibling||\"BR\"!=e.nextSibling.tagName||e.nextSibling.nextSibling))&&n(e.parentNode)))}function o(e){return!!e&&(!!t.node.isBlock(e)||(e.previousSibling&&e.previousSibling.nodeType==Node.TEXT_NODE&&0===e.previousSibling.textContent.replace(/\\u200b/g,\"\").length?o(e.previousSibling):!e.previousSibling&&(!(e.previousSibling||!t.node.hasClass(e.parentNode,\"fr-inner\"))||o(e.parentNode))))}function r(e,n){return!!e&&(e!=t.$wp.get(0)&&(e.previousSibling&&e.previousSibling.nodeType==Node.TEXT_NODE&&0===e.previousSibling.textContent.replace(/\\u200b/g,\"\").length?r(e.previousSibling,n):!e.previousSibling&&(e.parentNode==n||r(e.parentNode,n))))}function i(e,n){return!!e&&(e!=t.$wp.get(0)&&(e.nextSibling&&e.nextSibling.nodeType==Node.TEXT_NODE&&0===e.nextSibling.textContent.replace(/\\u200b/g,\"\").length?i(e.nextSibling,n):!(e.nextSibling&&(!e.previousSibling||\"BR\"!=e.nextSibling.tagName||e.nextSibling.nextSibling))&&(e.parentNode==n||i(e.parentNode,n))))}function a(n){return e(n).parentsUntil(t.$el,\"LI\").length>0&&0===e(n).parentsUntil(\"LI\",\"TABLE\").length}function s(e,t){var n=new RegExp((t?\"^\":\"\")+\"(([\\\\uD83C-\\\\uDBFF\\\\uDC00-\\\\uDFFF]+\\\\u200D)*[\\\\uD83C-\\\\uDBFF\\\\uDC00-\\\\uDFFF]{2})\"+(t?\"\":\"$\"),\"i\"),o=e.match(n);return o?o[0].length:1}function l(n){for(var o,r=n;!r.previousSibling;)if(r=r.parentNode,t.node.isElement(r))return!1;if(r=r.previousSibling,!t.node.isBlock(r)&&t.node.isEditable(r)){for(o=t.node.contents(r);r.nodeType!=Node.TEXT_NODE&&!t.node.isDeletable(r)&&o.length&&t.node.isEditable(r);)r=o[o.length-1],o=t.node.contents(r);if(r.nodeType==Node.TEXT_NODE){var i=r.textContent,a=i.length;if(i.length&&\"\\n\"===i[i.length-1])return r.textContent=i.substring(0,a-2),0===r.textContent.length&&r.parentNode.removeChild(r),l(n);if(t.opts.tabSpaces&&i.length>=t.opts.tabSpaces)0===i.substr(i.length-t.opts.tabSpaces,i.length-1).replace(/ /g,\"\").replace(new RegExp(e.FE.UNICODE_NBSP,\"g\"),\"\").length&&(a=i.length-t.opts.tabSpaces+1);r.textContent=i.substring(0,a-s(i)),t.opts.htmlUntouched&&!n.nextSibling&&r.textContent.length&&\" \"===r.textContent[r.textContent.length-1]&&(r.textContent=r.textContent.substring(0,r.textContent.length-1)+e.FE.UNICODE_NBSP);var d=i.length!=r.textContent.length;if(0===r.textContent.length)if(d&&t.opts.keepFormatOnDelete)e(r).after(e.FE.INVISIBLE_SPACE+e.FE.MARKERS);else if((2!=r.parentNode.childNodes.length||r.parentNode!=n.parentNode)&&1!=r.parentNode.childNodes.length||t.node.isBlock(r.parentNode)||t.node.isElement(r.parentNode)||!t.node.isDeletable(r.parentNode)){for(;!t.node.isElement(r.parentNode)&&t.node.isEmpty(r.parentNode)&&e.FE.NO_DELETE_TAGS.indexOf(r.parentNode.tagName)<0;){var c=r;r=r.parentNode,c.parentNode.removeChild(c)}e(r).after(e.FE.MARKERS),t.node.isElement(r.parentNode)&&!n.nextSibling&&r.previousSibling&&\"BR\"==r.previousSibling.tagName&&e(n).after(\"<br>\"),r.parentNode.removeChild(r)}else e(r.parentNode).after(e.FE.MARKERS),e(r.parentNode).remove();else e(r).after(e.FE.MARKERS)}else t.node.isDeletable(r)?(e(r).after(e.FE.MARKERS),e(r).remove()):n.nextSibling&&\"BR\"==n.nextSibling.tagName&&t.node.isVoid(r)&&\"BR\"!=r.tagName?(e(n.nextSibling).remove(),e(n).replaceWith(e.FE.MARKERS)):!1!==t.events.trigger(\"node.remove\",[e(r)])&&(e(r).after(e.FE.MARKERS),e(r).remove())}else if(e.FE.NO_DELETE_TAGS.indexOf(r.tagName)<0&&(t.node.isEditable(r)||t.node.isDeletable(r)))if(t.node.isDeletable(r))e(n).replaceWith(e.FE.MARKERS),e(r).remove();else if(t.node.isEmpty(r)&&!t.node.isList(r))e(r).remove(),e(n).replaceWith(e.FE.MARKERS);else{for(t.node.isList(r)&&(r=e(r).find(\"li:last\").get(0)),(o=t.node.contents(r))&&\"BR\"==o[o.length-1].tagName&&e(o[o.length-1]).remove(),o=t.node.contents(r);o&&t.node.isBlock(o[o.length-1]);)r=o[o.length-1],o=t.node.contents(r);e(r).append(e.FE.MARKERS);for(var p=n;!p.previousSibling;)p=p.parentNode;for(;p&&\"BR\"!==p.tagName&&!t.node.isBlock(p);){var f=p;p=p.nextSibling,e(r).append(f)}p&&\"BR\"==p.tagName&&e(p).remove(),e(n).remove()}else n.nextSibling&&\"BR\"==n.nextSibling.tagName&&e(n.nextSibling).remove()}function d(n){var o=e(n).parentsUntil(t.$el,\"BLOCKQUOTE\").length>0,r=t.node.deepestParent(n,[],!o);if(r&&\"BLOCKQUOTE\"==r.tagName){var i=t.node.deepestParent(n,[e(n).parentsUntil(t.$el,\"BLOCKQUOTE\").get(0)]);i&&i.nextSibling&&(r=i)}if(null!==r){var a,s=r.nextSibling;if(t.node.isBlock(r)&&(t.node.isEditable(r)||t.node.isDeletable(r))&&s&&e.FE.NO_DELETE_TAGS.indexOf(s.tagName)<0)if(t.node.isDeletable(s))e(s).remove(),e(n).replaceWith(e.FE.MARKERS);else if(t.node.isBlock(s)&&t.node.isEditable(s))if(t.node.isList(s))if(t.node.isEmpty(r,!0))e(r).remove(),e(s).find(\"li:first\").prepend(e.FE.MARKERS);else{var l=e(s).find(\"li:first\");\"BLOCKQUOTE\"==r.tagName&&(a=t.node.contents(r)).length&&t.node.isBlock(a[a.length-1])&&(r=a[a.length-1]),0===l.find(\"ul, ol\").length&&(e(n).replaceWith(e.FE.MARKERS),l.find(t.html.blockTagsQuery()).not(\"ol, ul, table\").each((function(){this.parentNode==l.get(0)&&e(this).replaceWith(e(this).html()+(t.node.isEmpty(this)?\"\":\"<br>\"))})),e(r).append(t.node.contents(l.get(0))),l.remove(),0===e(s).find(\"li\").length&&e(s).remove())}else{if((a=t.node.contents(s)).length&&\"BR\"==a[0].tagName&&e(a[0]).remove(),\"BLOCKQUOTE\"!=s.tagName&&\"BLOCKQUOTE\"==r.tagName)for(a=t.node.contents(r);a.length&&t.node.isBlock(a[a.length-1]);)r=a[a.length-1],a=t.node.contents(r);else if(\"BLOCKQUOTE\"==s.tagName&&\"BLOCKQUOTE\"!=r.tagName)for(a=t.node.contents(s);a.length&&t.node.isBlock(a[0]);)s=a[0],a=t.node.contents(s);e(n).replaceWith(e.FE.MARKERS),e(r).append(s.innerHTML),e(s).remove()}else{for(e(n).replaceWith(e.FE.MARKERS);s&&\"BR\"!==s.tagName&&!t.node.isBlock(s)&&t.node.isEditable(s);){var d=s;s=s.nextSibling,e(r).append(d)}s&&\"BR\"==s.tagName&&t.node.isEditable(s)&&e(s).remove()}}}function c(o){for(var r,i=o;!i.nextSibling;)if(i=i.parentNode,t.node.isElement(i))return!1;if(\"BR\"==(i=i.nextSibling).tagName&&t.node.isEditable(i))if(i.nextSibling){if(t.node.isBlock(i.nextSibling)&&t.node.isEditable(i.nextSibling)){if(!(e.FE.NO_DELETE_TAGS.indexOf(i.nextSibling.tagName)<0))return void e(i).remove();i=i.nextSibling,e(i.previousSibling).remove()}}else if(n(i)){if(a(o))t.cursorLists._del(o);else t.node.deepestParent(i)&&((!t.node.isEmpty(t.node.blockParent(i))||(t.node.blockParent(i).nextSibling&&e.FE.NO_DELETE_TAGS.indexOf(t.node.blockParent(i).nextSibling.tagName))<0)&&e(i).remove(),d(o));return}if(!t.node.isBlock(i)&&t.node.isEditable(i)){for(r=t.node.contents(i);i.nodeType!=Node.TEXT_NODE&&r.length&&!t.node.isDeletable(i)&&t.node.isEditable(i);)i=r[0],r=t.node.contents(i);i.nodeType==Node.TEXT_NODE?(e(i).before(e.FE.MARKERS),i.textContent.length&&(i.textContent=i.textContent.substring(s(i.textContent,!0),i.textContent.length))):(t.node.isDeletable(i)||!1!==t.events.trigger(\"node.remove\",[e(i)]))&&(e(i).before(e.FE.MARKERS),e(i).remove()),e(o).remove()}else if(e.FE.NO_DELETE_TAGS.indexOf(i.tagName)<0&&(t.node.isEditable(i)||t.node.isDeletable(i)))if(t.node.isDeletable(i))e(o).replaceWith(e.FE.MARKERS),e(i).remove();else if(t.node.isList(i))o.previousSibling?(e(i).find(\"li:first\").prepend(o),t.cursorLists._backspace(o)):(e(i).find(\"li:first\").prepend(e.FE.MARKERS),e(o).remove());else if((r=t.node.contents(i))&&r.length&&\"BR\"==r[0].tagName&&e(r[0]).remove(),r&&\"BLOCKQUOTE\"==i.tagName){var l=r[0];for(e(o).before(e.FE.MARKERS);l&&\"BR\"!=l.tagName;){var c=l;l=l.nextSibling,e(o).before(c)}l&&\"BR\"==l.tagName&&e(l).remove()}else e(o).after(e(i).html()).after(e.FE.MARKERS),e(i).remove()}function p(){for(var e=t.el.querySelectorAll(\"blockquote:empty\"),n=0;n<e.length;n++)e[n].parentNode.removeChild(e[n])}function f(n,o,r){var a,s=t.node.deepestParent(n,[],!r);if(s&&\"BLOCKQUOTE\"==s.tagName)return i(n,s)?(a=t.html.defaultTag(),o?e(n).replaceWith(\"<br>\"+e.FE.MARKERS):a?e(s).after(\"<\"+a+\">\"+e.FE.MARKERS+\"<br></\"+a+\">\"):e(s).after(e.FE.MARKERS+\"<br>\"),e(n).remove(),!1):(u(n,o,r),!1);if(null==s)(a=t.html.defaultTag())&&t.node.isElement(n.parentNode)?e(n).replaceWith(\"<\"+a+\">\"+e.FE.MARKERS+\"<br></\"+a+\">\"):!n.previousSibling||e(n.previousSibling).is(\"br\")||n.nextSibling?e(n).replaceWith(\"<br>\"+e.FE.MARKERS):e(n).replaceWith(\"<br>\"+e.FE.MARKERS+\"<br>\");else{var l=n,d=\"\";\"PRE\"!=s.tagName||n.nextSibling||(o=!0),t.node.isBlock(s)&&!o||(d=\"<br/>\");var c,p=\"\",f=\"\",h=\"\",g=\"\";(a=t.html.defaultTag())&&t.node.isBlock(s)&&(h=\"<\"+a+\">\",g=\"</\"+a+\">\",s.tagName==a.toUpperCase()&&(h=t.node.openTagString(e(s).clone().removeAttr(\"id\").get(0))));do{if(l=l.parentNode,!o||l!=s||o&&!t.node.isBlock(s))if(p+=t.node.closeTagString(l),l==s&&t.node.isBlock(s))f=h+f;else{var m=\"A\"==l.tagName&&i(n,l)?\"fr-to-remove\":\"\";f=t.node.openTagString(e(l).clone().addClass(m).get(0))+f}}while(l!=s);d=p+d+f+(n.parentNode==s&&t.node.isBlock(s)?\"\":e.FE.INVISIBLE_SPACE)+e.FE.MARKERS,t.node.isBlock(s)&&!e(s).find(\"*:last\").is(\"br\")&&e(s).append(\"<br/>\"),e(n).after('<span id=\"fr-break\"></span>'),e(n).remove(),s.nextSibling&&!t.node.isBlock(s.nextSibling)||t.node.isBlock(s)||e(s).after(\"<br>\"),c=(c=!o&&t.node.isBlock(s)?t.node.openTagString(s)+e(s).html()+g:t.node.openTagString(s)+e(s).html()+t.node.closeTagString(s)).replace(/<span id=\"fr-break\"><\\/span>/g,d),e(s).replaceWith(c)}}function h(n,o,a){var s,l=t.node.deepestParent(n,[],!a);if(l&&\"TABLE\"==l.tagName)return e(l).find(\"td:first, th:first\").prepend(n),h(n,o,a);if(l&&\"BLOCKQUOTE\"==l.tagName)if(r(n,l)){if(!o)return(s=t.html.defaultTag())?e(l).before(\"<\"+s+\">\"+e.FE.MARKERS+\"<br></\"+s+\">\"):e(l).before(e.FE.MARKERS+\"<br>\"),e(n).remove(),!1}else i(n,l)?f(n,o,!0):u(n,o,!0);if(null==l)(s=t.html.defaultTag())&&t.node.isElement(n.parentNode)?e(n).replaceWith(\"<\"+s+\">\"+e.FE.MARKERS+\"<br></\"+s+\">\"):e(n).replaceWith(\"<br>\"+e.FE.MARKERS);else{if(t.node.isBlock(l))if(\"PRE\"==l.tagName&&(o=!0),o)e(n).remove(),e(l).prepend(\"<br>\"+e.FE.MARKERS);else{if(t.node.isEmpty(l,!0))return f(n,o,a);if(t.opts.keepFormatOnDelete){for(var d=n,c=e.FE.INVISIBLE_SPACE;d!=l&&!t.node.isElement(d);)d=d.parentNode,c=t.node.openTagString(d)+c+t.node.closeTagString(d);e(l).before(c)}else e(l).before(t.node.openTagString(e(l).clone().removeAttr(\"id\").get(0))+\"<br>\"+t.node.closeTagString(l))}else e(l).before(\"<br>\");e(n).remove()}}function u(n,o,a){var s=t.node.deepestParent(n,[],!a);if(null==s)t.html.defaultTag()&&n.parentNode===t.el?e(n).replaceWith(\"<\"+t.html.defaultTag()+\">\"+e.FE.MARKERS+\"<br></\"+t.html.defaultTag()+\">\"):(n.nextSibling&&!t.node.isBlock(n.nextSibling)||e(n).after(\"<br>\"),e(n).replaceWith(\"<br>\"+e.FE.MARKERS));else{var l=n,d=\"\";\"PRE\"==s.tagName&&(o=!0),t.node.isBlock(s)&&!o||(d=\"<br>\");var c=\"\",p=\"\";do{var f=l;if(l=l.parentNode,\"BLOCKQUOTE\"==s.tagName&&t.node.isEmpty(f)&&!t.node.hasClass(f,\"fr-marker\")&&e(f).find(n).length>0&&e(f).after(n),\"BLOCKQUOTE\"!=s.tagName||!i(n,l)&&!r(n,l))if(!o||l!=s||o&&!t.node.isBlock(s)){c+=t.node.closeTagString(l);var h=\"A\"==l.tagName&&i(n,l)?\"fr-to-remove\":\"\";p=t.node.openTagString(e(l).clone().addClass(h).removeAttr(\"id\").get(0))+p}else\"BLOCKQUOTE\"==s.tagName&&o&&(c=\"\",p=\"\")}while(l!=s);var u=s==n.parentNode&&t.node.isBlock(s)||n.nextSibling;if(\"BLOCKQUOTE\"==s.tagName)if(n.previousSibling&&t.node.isBlock(n.previousSibling)&&n.nextSibling&&\"BR\"==n.nextSibling.tagName&&(e(n.nextSibling).after(n),n.nextSibling&&\"BR\"==n.nextSibling.tagName&&e(n.nextSibling).remove()),o)d=c+d+e.FE.MARKERS+p;else{var g=t.html.defaultTag();d=c+d+(g?\"<\"+g+\">\":\"\")+e.FE.MARKERS+\"<br>\"+(g?\"</\"+g+\">\":\"\")+p}else d=c+d+p+(u?\"\":e.FE.INVISIBLE_SPACE)+e.FE.MARKERS;e(n).replaceWith('<span id=\"fr-break\"></span>');var m=t.node.openTagString(s)+e(s).html()+t.node.closeTagString(s);m=m.replace(/<span id=\"fr-break\"><\\/span>/g,d),e(s).replaceWith(m)}}return{enter:function(r){var i=t.markers.insert();if(!i)return!0;for(var s=i.parentNode;s&&!t.node.isElement(s);){if(\"false\"===s.getAttribute(\"contenteditable\"))return e(i).replaceWith(e.FE.MARKERS),t.selection.restore(),!1;if(\"true\"===s.getAttribute(\"contenteditable\"))break;s=s.parentNode}t.el.normalize();var l=!1;e(i).parentsUntil(t.$el,\"BLOCKQUOTE\").length>0&&(l=!0),e(i).parentsUntil(t.$el,\"TD, TH\").length&&(l=!1),n(i)?!a(i)||r||l?f(i,r,l):t.cursorLists._endEnter(i):o(i)?!a(i)||r||l?h(i,r,l):t.cursorLists._startEnter(i):!a(i)||r||l?u(i,r,l):t.cursorLists._middleEnter(i),t.$el.find(\".fr-to-remove\").each((function(){for(var n=t.node.contents(this),o=0;o<n.length;o++)n[o].nodeType==Node.TEXT_NODE&&(n[o].textContent=n[o].textContent.replace(/\\u200B/g,\"\"));e(this).replaceWith(this.innerHTML)})),t.html.fillEmptyBlocks(!0),t.opts.htmlUntouched||(t.html.cleanEmptyTags(),t.clean.lists(),t.spaces.normalizeAroundCursor()),t.selection.restore()},backspace:function(){var i=!1,d=t.markers.insert();if(!d)return!0;for(var c=d.parentNode;c&&!t.node.isElement(c);){if(\"false\"===c.getAttribute(\"contenteditable\"))return e(d).replaceWith(e.FE.MARKERS),t.selection.restore(),!1;if(\"true\"===c.getAttribute(\"contenteditable\"))break;c=c.parentNode}t.el.normalize();var f=d.previousSibling;if(f){var h=f.textContent;h&&h.length&&8203==h.charCodeAt(h.length-1)&&(1==h.length?e(f).remove():f.textContent=f.textContent.substr(0,h.length-s(h)))}return a(d)&&r(d,e(d).parents(\"li:first\").get(0))?t.cursorLists._backspace(d):i=n(d)?l(d):o(d)?function(n){for(var o=e(n).parentsUntil(t.$el,\"BLOCKQUOTE\").length>0,r=t.node.deepestParent(n,[],!o),i=r;r&&!r.previousSibling&&\"BLOCKQUOTE\"!=r.tagName&&r.parentElement!=t.el&&!t.node.hasClass(r.parentElement,\"fr-inner\")&&e.FE.SIMPLE_ENTER_TAGS.indexOf(r.parentElement.tagName)<0;)r=r.parentElement;if(r&&\"BLOCKQUOTE\"==r.tagName){var a=t.node.deepestParent(n,[e(n).parentsUntil(t.$el,\"BLOCKQUOTE\").get(0)]);a&&a.previousSibling&&(r=a,i=a)}if(null!==r){var s,l=r.previousSibling;if(t.node.isBlock(r)&&t.node.isEditable(r))if(l&&e.FE.NO_DELETE_TAGS.indexOf(l.tagName)<0){if(t.node.isDeletable(l))e(l).remove(),e(n).replaceWith(e.FE.MARKERS);else if(t.node.isEditable(l))if(t.node.isBlock(l))if(t.node.isEmpty(l)&&!t.node.isList(l))e(l).remove(),e(n).after(t.opts.keepFormatOnDelete?e.FE.INVISIBLE_SPACE:\"\");else{if(t.node.isList(l)&&(l=e(l).find(\"li:last\").get(0)),(s=t.node.contents(l)).length&&\"BR\"==s[s.length-1].tagName&&e(s[s.length-1]).remove(),\"BLOCKQUOTE\"==l.tagName&&\"BLOCKQUOTE\"!=r.tagName)for(s=t.node.contents(l);s.length&&t.node.isBlock(s[s.length-1]);)l=s[s.length-1],s=t.node.contents(l);else if(\"BLOCKQUOTE\"!=l.tagName&&\"BLOCKQUOTE\"==i.tagName)for(s=t.node.contents(i);s.length&&t.node.isBlock(s[0]);)i=s[0],s=t.node.contents(i);if(t.node.isEmpty(r))e(n).remove(),t.selection.setAtEnd(l,!0);else{e(n).replaceWith(e.FE.MARKERS);var d=l.childNodes;t.node.isBlock(d[d.length-1])?e(d[d.length-1]).append(i.innerHTML):e(l).append(i.innerHTML)}e(i).remove(),t.node.isEmpty(r)&&e(r).remove()}else e(n).replaceWith(e.FE.MARKERS),\"BLOCKQUOTE\"==r.tagName&&l.nodeType==Node.ELEMENT_NODE?e(l).remove():(e(l).after(t.node.isEmpty(r)?\"\":e(r).html()),e(r).remove(),\"BR\"==l.tagName&&e(l).remove())}else l||r&&\"BLOCKQUOTE\"==r.tagName&&0==e(r).text().replace(/\\u200B/g,\"\").length&&e(r).remove()}}(d):l(d),e(d).remove(),p(),t.html.fillEmptyBlocks(!0),t.opts.htmlUntouched||(t.html.cleanEmptyTags(),t.clean.lists(),t.spaces.normalizeAroundCursor()),t.selection.restore(),i},del:function(){var r=t.markers.insert();if(!r)return!1;if(t.el.normalize(),n(r))if(a(r))if(0===e(r).parents(\"li:first\").find(\"ul, ol\").length)t.cursorLists._del(r);else{var i=e(r).parents(\"li:first\").find(\"ul:first, ol:first\").find(\"li:first\");(i=i.find(t.html.blockTagsQuery()).get(-1)||i).prepend(r),t.cursorLists._backspace(r)}else d(r);else o(r),c(r);e(r).remove(),p(),t.html.fillEmptyBlocks(!0),t.opts.htmlUntouched||(t.html.cleanEmptyTags(),t.clean.lists()),t.spaces.normalizeAroundCursor(),t.selection.restore()},isAtEnd:i,isAtStart:r}}}(jQuery),function(e){e.FE.ENTER_P=0,e.FE.ENTER_DIV=1,e.FE.ENTER_BR=2,e.FE.KEYCODE={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,ARROW_LEFT:37,ARROW_UP:38,ARROW_RIGHT:39,ARROW_DOWN:40,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,FF_SEMICOLON:59,FF_EQUALS:61,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,FF_HYPHEN:173,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,HYPHEN:189,PERIOD:190,SLASH:191,APOSTROPHE:192,TILDE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,IME:229},e.extend(e.FE.DEFAULTS,{enter:e.FE.ENTER_P,multiLine:!0,tabSpaces:0}),e.FE.MODULES.keys=function(t){var n,o,r,i=!1;function a(){if(t.browser.mozilla&&t.selection.isCollapsed()&&!i){var e=t.selection.ranges(0),n=e.startContainer,o=e.startOffset;n&&n.nodeType==Node.TEXT_NODE&&o<=n.textContent.length&&o>0&&32==n.textContent.charCodeAt(o-1)&&(t.selection.save(),t.spaces.normalize(),t.selection.restore())}}function s(){t.selection.isFull()&&setTimeout((function(){var n=t.html.defaultTag();n?t.$el.html(\"<\"+n+\">\"+e.FE.MARKERS+\"<br/></\"+n+\">\"):t.$el.html(e.FE.MARKERS+\"<br/>\"),t.selection.restore(),t.placeholder.refresh(),t.button.bulkRefresh(),t.undo.saveStep()}),0)}function l(){i=!1}function d(){i=!1}function c(){var n=t.html.defaultTag();n?t.$el.html(\"<\"+n+\">\"+e.FE.MARKERS+\"<br/></\"+n+\">\"):t.$el.html(e.FE.MARKERS+\"<br/>\"),t.selection.restore()}function p(o){var r=t.selection.element();if(r&&[\"INPUT\",\"TEXTAREA\"].indexOf(r.tagName)>=0)return!0;if(o&&m(o.which))return h(),!0;t.events.disableBlur(),null;var a=o.which;if(16===a)return!0;if(n=a,a===e.FE.KEYCODE.IME)return i=!0,!0;i=!1;var s=v(a)&&!g(o)&&!o.altKey,l=a==e.FE.KEYCODE.BACKSPACE||a==e.FE.KEYCODE.DELETE;if((!(o.shiftKey&&(33===a||34===a||35===a||36===a))&&t.selection.isFull()&&!t.opts.keepFormatOnDelete&&!t.placeholder.isVisible()||l&&t.placeholder.isVisible()&&t.opts.keepFormatOnDelete)&&(s||l)&&(c(),!v(a)))return o.preventDefault(),!0;a==e.FE.KEYCODE.ENTER?o.shiftKey?function(e){e.preventDefault(),e.stopPropagation(),t.opts.multiLine&&(t.selection.isCollapsed()||t.selection.remove(),t.cursor.enter(!0))}(o):function(e){t.opts.multiLine?(t.helpers.isIOS()||(e.preventDefault(),e.stopPropagation()),t.selection.isCollapsed()||t.selection.remove(),t.cursor.enter()):(e.preventDefault(),e.stopPropagation())}(o):a===e.FE.KEYCODE.BACKSPACE&&(o.metaKey||o.ctrlKey)?setTimeout((function(){t.events.disableBlur(),t.events.focus()}),0):a!=e.FE.KEYCODE.BACKSPACE||g(o)||o.altKey?a!=e.FE.KEYCODE.DELETE||g(o)||o.altKey||o.shiftKey?a==e.FE.KEYCODE.SPACE?function(n){var o=t.selection.element();if(!t.helpers.isMobile()&&o&&\"A\"==o.tagName){n.preventDefault(),n.stopPropagation(),t.selection.isCollapsed()||t.selection.remove();var r=t.markers.insert();if(r){var i=r.previousSibling;!r.nextSibling&&r.parentNode&&\"A\"==r.parentNode.tagName?(r.parentNode.insertAdjacentHTML(\"afterend\",\"&nbsp;\"+e.FE.MARKERS),r.parentNode.removeChild(r)):(i&&i.nodeType==Node.TEXT_NODE&&1==i.textContent.length&&160==i.textContent.charCodeAt(0)?i.textContent=i.textContent+\" \":r.insertAdjacentHTML(\"beforebegin\",\"&nbsp;\"),r.outerHTML=e.FE.MARKERS),t.selection.restore()}}}(o):a==e.FE.KEYCODE.TAB?function(e){if(t.opts.tabSpaces>0)if(t.selection.isCollapsed()){t.undo.saveStep(),e.preventDefault(),e.stopPropagation();for(var n=\"\",o=0;o<t.opts.tabSpaces;o++)n+=\"&nbsp;\";t.html.insert(n),t.placeholder.refresh(),t.undo.saveStep()}else e.preventDefault(),e.stopPropagation(),e.shiftKey?t.commands.outdent():t.commands.indent()}(o):g(o)||!v(o.which)||t.selection.isCollapsed()||o.ctrlKey||o.altKey||t.selection.remove():t.placeholder.isVisible()?(t.opts.keepFormatOnDelete||c(),o.preventDefault(),o.stopPropagation()):function(e){e.preventDefault(),e.stopPropagation(),\"\"===t.selection.text()?t.cursor.del():t.selection.remove(),t.placeholder.refresh()}(o):t.placeholder.isVisible()?(t.opts.keepFormatOnDelete||c(),o.preventDefault(),o.stopPropagation()):function(e){if(t.selection.isCollapsed())if(t.cursor.backspace(),t.helpers.isIOS()){var n=t.selection.ranges(0);n.deleteContents(),n.insertNode(document.createTextNode(\"​\")),t.selection.get().modify(\"move\",\"forward\",\"character\")}else e.preventDefault(),e.stopPropagation();else e.preventDefault(),e.stopPropagation(),t.selection.remove();t.placeholder.refresh()}(o),t.events.enableBlur()}function f(){if(!t.$wp)return!0;var n;t.opts.height||t.opts.heightMax?(n=t.position.getBoundingRect().top,t.opts.iframe&&(n+=t.$iframe.offset().top),n>t.$wp.offset().top-t.helpers.scrollTop()+t.$wp.height()-20&&t.$wp.scrollTop(n+t.$wp.scrollTop()-(t.$wp.height()+t.$wp.offset().top)+t.helpers.scrollTop()+20)):(n=t.position.getBoundingRect().top,t.opts.toolbarBottom&&(n+=t.opts.toolbarStickyOffset),t.opts.iframe&&(n+=t.$iframe.offset().top,n-=t.helpers.scrollTop()),(n+=t.opts.toolbarStickyOffset)>t.o_win.innerHeight-20&&e(t.o_win).scrollTop(n+t.helpers.scrollTop()-t.o_win.innerHeight+20),n=t.position.getBoundingRect().top,t.opts.toolbarBottom||(n-=t.opts.toolbarStickyOffset),t.opts.iframe&&(n+=t.$iframe.offset().top,n-=t.helpers.scrollTop()),n<t.$tb.height()+20&&e(t.o_win).scrollTop(n+t.helpers.scrollTop()-t.$tb.height()-20))}function h(){var e=t.selection.element();(function(e){if(!e)return!1;var t=e.innerHTML;return!!((t=t.replace(/<span[^>]*? class\\s*=\\s*[\"']?fr-marker[\"']?[^>]+>\\u200b<\\/span>/gi,\"\"))&&/\\u200B/.test(t)&&t.replace(/\\u200B/gi,\"\").length>0)})(e)&&!t.node.hasClass(e,\"fr-marker\")&&\"IFRAME\"!=e.tagName&&function(e){return!t.helpers.isIOS()||0===((e.textContent||\"\").match(/[\\u3041-\\u3096\\u30A0-\\u30FF\\u4E00-\\u9FFF\\u3130-\\u318F\\uAC00-\\uD7AF]/gi)||[]).length}(e)&&(t.selection.save(),function(e){for(var n=t.doc.createTreeWalker(e,NodeFilter.SHOW_TEXT,t.node.filter((function(e){return/\\u200B/gi.test(e.textContent)})),!1);n.nextNode();){var o=n.currentNode;o.textContent=o.textContent.replace(/\\u200B/gi,\"\")}}(e),t.selection.restore())}function u(o){var r=t.selection.element();if(r&&[\"INPUT\",\"TEXTAREA\"].indexOf(r.tagName)>=0)return!0;if(o&&0===o.which&&n&&(o.which=n),t.helpers.isAndroid()&&t.browser.mozilla)return!0;if(i)return!1;if(o&&t.helpers.isIOS()&&o.which==e.FE.KEYCODE.ENTER&&t.doc.execCommand(\"undo\"),!t.selection.isCollapsed())return!0;if(o&&(o.which===e.FE.KEYCODE.META||o.which==e.FE.KEYCODE.CTRL))return!0;if(o&&m(o.which))return!0;if(o&&!t.helpers.isIOS()&&(o.which==e.FE.KEYCODE.ENTER||o.which==e.FE.KEYCODE.BACKSPACE||o.which>=37&&o.which<=40&&!t.browser.msie))try{f()}catch(e){}h()}function g(e){if(-1!=navigator.userAgent.indexOf(\"Mac OS X\")){if(e.metaKey&&!e.altKey)return!0}else if(e.ctrlKey&&!e.altKey)return!0;return!1}function m(t){if(t>=e.FE.KEYCODE.ARROW_LEFT&&t<=e.FE.KEYCODE.ARROW_DOWN)return!0}function v(n){if(n>=e.FE.KEYCODE.ZERO&&n<=e.FE.KEYCODE.NINE)return!0;if(n>=e.FE.KEYCODE.NUM_ZERO&&n<=e.FE.KEYCODE.NUM_MULTIPLY)return!0;if(n>=e.FE.KEYCODE.A&&n<=e.FE.KEYCODE.Z)return!0;if(t.browser.webkit&&0===n)return!0;switch(n){case e.FE.KEYCODE.SPACE:case e.FE.KEYCODE.QUESTION_MARK:case e.FE.KEYCODE.NUM_PLUS:case e.FE.KEYCODE.NUM_MINUS:case e.FE.KEYCODE.NUM_PERIOD:case e.FE.KEYCODE.NUM_DIVISION:case e.FE.KEYCODE.SEMICOLON:case e.FE.KEYCODE.FF_SEMICOLON:case e.FE.KEYCODE.DASH:case e.FE.KEYCODE.EQUALS:case e.FE.KEYCODE.FF_EQUALS:case e.FE.KEYCODE.COMMA:case e.FE.KEYCODE.PERIOD:case e.FE.KEYCODE.SLASH:case e.FE.KEYCODE.APOSTROPHE:case e.FE.KEYCODE.SINGLE_QUOTE:case e.FE.KEYCODE.OPEN_SQUARE_BRACKET:case e.FE.KEYCODE.BACKSLASH:case e.FE.KEYCODE.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}function b(n){var i=n.which;if(g(n)||i>=37&&i<=40||!v(i)&&i!=e.FE.KEYCODE.DELETE&&i!=e.FE.KEYCODE.BACKSPACE&&i!=e.FE.KEYCODE.ENTER&&i!=e.FE.KEYCODE.IME)return!0;o||(r=t.snapshot.get(),t.undo.canDo()||t.undo.saveStep()),clearTimeout(o),o=setTimeout((function(){o=null,t.undo.saveStep()}),Math.max(250,t.opts.typingTimer))}function E(e){var n=e.which;if(g(e)||n>=37&&n<=40)return!0;r&&o?(t.undo.saveStep(r),r=null):void 0!==n&&0!==n||r||o||t.undo.saveStep()}function y(e){if(e&&\"BR\"==e.tagName)return!1;try{return 0===(e.textContent||\"\").length&&e.querySelector&&!e.querySelector(\":scope > br\")||e.childNodes&&1==e.childNodes.length&&e.childNodes[0].getAttribute&&(\"false\"==e.childNodes[0].getAttribute(\"contenteditable\")||t.node.hasClass(e.childNodes[0],\"fr-img-caption\"))}catch(e){return!1}}function w(n){var o=t.el.childNodes,r=t.html.defaultTag();return!(!n.target||n.target===t.el)||(0===o.length||void(t.$el.outerHeight()-n.offsetY<=10?y(o[o.length-1])&&(r?t.$el.append(\"<\"+r+\">\"+e.FE.MARKERS+\"<br></\"+r+\">\"):t.$el.append(e.FE.MARKERS+\"<br>\"),t.selection.restore(),f()):n.offsetY<=10&&y(o[0])&&(r?t.$el.prepend(\"<\"+r+\">\"+e.FE.MARKERS+\"<br></\"+r+\">\"):t.$el.prepend(e.FE.MARKERS+\"<br>\"),t.selection.restore(),f())))}function S(){o&&clearTimeout(o)}return{_init:function(){t.events.on(\"keydown\",b),t.events.on(\"input\",a),t.events.on(\"mousedown\",d),t.events.on(\"keyup input\",E),t.events.on(\"keypress\",l),t.events.on(\"keydown\",p),t.events.on(\"keyup\",u),t.events.on(\"destroy\",S),t.events.on(\"html.inserted\",u),t.events.on(\"cut\",s),t.opts.multiLine&&t.events.on(\"click\",w)},ctrlKey:g,isCharacter:v,isArrow:m,forceUndo:function(){o&&(clearTimeout(o),t.undo.saveStep(),r=null)},isIME:function(){return i},isBrowserAction:function(t){var n=t.which;return g(t)||n==e.FE.KEYCODE.F5},positionCaret:f}}}(jQuery),function(e){e.FE.MODULES.accessibility=function(t){var n=!0;function o(e){e&&e.length&&!t.$el.find('[contenteditable=\"true\"]').is(\":focus\")&&(e.data(\"blur-event-set\")||e.parents(\".fr-popup\").length||(t.events.$on(e,\"blur\",(function(){var n=e.parents(\".fr-toolbar, .fr-popup\").data(\"instance\")||t;n.events.blurActive()&&!t.core.hasFocus()&&n.events.trigger(\"blur\"),setTimeout((function(){n.events.enableBlur()}),100)}),!0),e.data(\"blur-event-set\",!0)),(e.parents(\".fr-toolbar, .fr-popup\").data(\"instance\")||t).events.disableBlur(),e.focus(),t.shared.$f_el=e)}function r(e,t){var n=t?\"last\":\"first\",r=e.find(\"button:visible:not(.fr-disabled), .fr-group span.fr-command:visible\")[n]();if(r.length)return o(r),!0}function i(e){return e.is(\"input, textarea, select\")&&s(),t.events.disableBlur(),setTimeout((function(){e.focus()}),0),!0}function a(e,n){var o=e.find(\"input, textarea, button, select\").filter(\":visible\").not(\":disabled\").filter(n?\":last\":\":first\");if(o.length)return i(o);if(t.shared.with_kb){var r=e.find(\".fr-active-item:visible:first\");if(r.length)return i(r);var a=e.find(\"[tabIndex]:visible:first\");if(a.length)return i(a)}}function s(){0===t.$el.find(\".fr-marker\").length&&t.core.hasFocus()&&t.selection.save()}function l(){var e=t.popups.areVisible();if(e){var n=e.find(\".fr-buttons\");return n.find(\"button:focus, .fr-group span:focus\").length?!r(e.data(\"instance\").$tb):!r(n)}return!r(t.$tb)}function d(){var e=null;return t.shared.$f_el.is(\".fr-dropdown.fr-active\")?e=t.shared.$f_el:t.shared.$f_el.closest(\".fr-dropdown-menu\").prev().is(\".fr-dropdown.fr-active\")&&(e=t.shared.$f_el.closest(\".fr-dropdown-menu\").prev()),e}function c(n,i,s){if(t.shared.$f_el){var l=d();l&&(t.button.click(l),t.shared.$f_el=l);var c=n.find(\"button:visible:not(.fr-disabled), .fr-group span.fr-command:visible\"),p=c.index(t.shared.$f_el);if(0===p&&!s||p==c.length-1&&s){var f;if(i){if(n.parent().is(\".fr-popup\"))f=!a(n.parent().children().not(\".fr-buttons\"),!s);!1===f&&(t.shared.$f_el=null)}i&&!1===f||r(n,!s)}else o(e(c.get(p+(s?1:-1))));return!1}}function p(e,t){return c(e,t,!0)}function f(e,t){return c(e,t)}function h(e){if(t.shared.$f_el){var n;if(t.shared.$f_el.is(\".fr-dropdown.fr-active\"))return o(n=e?t.shared.$f_el.next().find(\".fr-command:not(.fr-disabled)\").first():t.shared.$f_el.next().find(\".fr-command:not(.fr-disabled)\").last()),!1;if(t.shared.$f_el.is(\"a.fr-command\"))return(n=e?t.shared.$f_el.closest(\"li\").nextAll(\":visible:first\").find(\".fr-command:not(.fr-disabled)\").first():t.shared.$f_el.closest(\"li\").prevAll(\":visible:first\").find(\".fr-command:not(.fr-disabled)\").first()).length||(n=e?t.shared.$f_el.closest(\".fr-dropdown-menu\").find(\".fr-command:not(.fr-disabled)\").first():t.shared.$f_el.closest(\".fr-dropdown-menu\").find(\".fr-command:not(.fr-disabled)\").last()),o(n),!1}}function u(){if(t.shared.$f_el){if(t.shared.$f_el.hasClass(\"fr-dropdown\"))t.button.click(t.shared.$f_el);else if(t.shared.$f_el.is(\"button.fr-back\")){t.opts.toolbarInline&&(t.events.disableBlur(),t.events.focus());var e=t.popups.areVisible(t);e&&(t.shared.with_kb=!1),t.button.click(t.shared.$f_el),v(e)}else{if(t.events.disableBlur(),t.button.click(t.shared.$f_el),t.shared.$f_el.attr(\"data-popup\")){var n=t.popups.areVisible(t);n&&n.data(\"popup-button\",t.shared.$f_el)}else if(t.shared.$f_el.attr(\"data-modal\")){var o=t.modals.areVisible(t);o&&o.data(\"modal-button\",t.shared.$f_el)}t.shared.$f_el=null}return!1}}function g(){t.shared.$f_el&&(t.events.disableBlur(),t.shared.$f_el.blur(),t.shared.$f_el=null),!1!==t.events.trigger(\"toolbar.focusEditor\")&&(t.events.disableBlur(),t.browser.msie||t.$el.focus(),t.events.focus())}function m(o){o&&o.length&&(t.events.$on(o,\"keydown\",(function(n){if(!e(n.target).is(\"a.fr-command, button.fr-command, .fr-group span.fr-command\"))return!0;var r=o.parents(\".fr-popup\").data(\"instance\")||o.data(\"instance\")||t;t.shared.with_kb=!0;var i=r.accessibility.exec(n,o);return t.shared.with_kb=!1,i}),!0),t.browser.msie||t.events.$on(o,\"mouseenter\",\"[tabIndex]\",(function(r){var i=o.parents(\".fr-popup\").data(\"instance\")||o.data(\"instance\")||t;if(!n)return r.stopPropagation(),void r.preventDefault();var a=e(r.currentTarget);i.shared.$f_el&&i.shared.$f_el.not(a)&&i.accessibility.focusEditor()}),!0))}function v(e){var t=e.data(\"popup-button\");t&&setTimeout((function(){o(t),e.data(\"popup-button\",null)}),0)}function b(e){var n=t.popups.areVisible(e);n&&n.data(\"popup-button\",null)}function E(n){var o=-1!=navigator.userAgent.indexOf(\"Mac OS X\")?n.metaKey:n.ctrlKey;if(n.which==e.FE.KEYCODE.F10&&!o&&!n.shiftKey&&n.altKey){t.shared.with_kb=!0;var r=t.popups.areVisible(t),i=!1;return r&&(i=a(r.children().not(\".fr-buttons\"))),i||l(),t.shared.with_kb=!1,n.preventDefault(),n.stopPropagation(),!1}return!0}return{_init:function(){t.$wp?t.events.on(\"keydown\",E,!0):t.events.$on(t.$win,\"keydown\",E,!0),t.events.on(\"mousedown\",(function(e){b(t),t.shared.$f_el&&(t.accessibility.restoreSelection(),e.stopPropagation(),t.events.disableBlur(),t.shared.$f_el=null)}),!0),t.events.on(\"blur\",(function(){t.shared.$f_el=null,b(t)}),!0)},registerPopup:function(o){var i=t.popups.get(o),s=function(n){var o=t.popups.get(n);return{_tiKeydown:function(i){var s=o.data(\"instance\")||t;if(!1===s.events.trigger(\"popup.tab\",[i]))return!1;var l=i.which,d=o.find(\":focus:first\");if(e.FE.KEYCODE.TAB==l){i.preventDefault();var c=o.children().not(\".fr-buttons\"),p=c.find(\"input, textarea, button, select\").filter(\":visible\").not(\".fr-no-touch input, .fr-no-touch textarea, .fr-no-touch button, .fr-no-touch select, :disabled\").toArray(),f=p.indexOf(this)+(i.shiftKey?-1:1);if(0<=f&&f<p.length)return s.events.disableBlur(),e(p[f]).focus(),i.stopPropagation(),!1;var h=o.find(\".fr-buttons\");if(h.length&&r(h,!!i.shiftKey))return i.stopPropagation(),!1;if(a(c))return i.stopPropagation(),!1}else{if(e.FE.KEYCODE.ENTER!=l||!i.target||\"TEXTAREA\"===i.target.tagName)return e.FE.KEYCODE.ESC==l?(i.preventDefault(),i.stopPropagation(),s.accessibility.restoreSelection(),s.popups.isVisible(n)&&o.find(\".fr-back:visible\").length?(s.opts.toolbarInline&&(s.events.disableBlur(),s.events.focus()),s.button.exec(o.find(\".fr-back:visible:first\")),v(o)):s.popups.isVisible(n)&&o.find(\".fr-dismiss:visible\").length?s.button.exec(o.find(\".fr-dismiss:visible:first\")):(s.popups.hide(n),s.opts.toolbarInline&&s.toolbar.showInline(null,!0),v(o)),!1):e.FE.KEYCODE.SPACE==l&&(d.is(\".fr-submit\")||d.is(\".fr-dismiss\"))?(i.preventDefault(),i.stopPropagation(),s.events.disableBlur(),s.button.exec(d),!0):s.keys.isBrowserAction(i)||d.is(\"input[type=text], textarea\")||e.FE.KEYCODE.SPACE==l&&(d.is(\".fr-link-attr\")||d.is(\"input[type=file]\"))?void i.stopPropagation():(i.stopPropagation(),i.preventDefault(),!1);var u=null;o.find(\".fr-submit:visible\").length>0?u=o.find(\".fr-submit:visible:first\"):o.find(\".fr-dismiss:visible\").length&&(u=o.find(\".fr-dismiss:visible:first\")),u&&(i.preventDefault(),i.stopPropagation(),s.events.disableBlur(),s.button.exec(u))}},_tiMouseenter:function(){b(o.data(\"instance\")||t)}}}(o);m(i.find(\".fr-buttons\")),t.events.$on(i,\"mouseenter\",\"tabIndex\",s._tiMouseenter,!0),t.events.$on(i.children().not(\".fr-buttons\"),\"keydown\",\"[tabIndex]\",s._tiKeydown,!0),t.popups.onHide(o,(function(){(i.data(\"instance\")||t).accessibility.restoreSelection()})),t.popups.onShow(o,(function(){n=!1,setTimeout((function(){n=!0}),0)}))},registerToolbar:m,focusToolbarElement:o,focusToolbar:r,focusContent:a,focusPopup:function(e){var o=e.children().not(\".fr-buttons\");o.data(\"mouseenter-event-set\")||t.browser.msie||(t.events.$on(o,\"mouseenter\",\"[tabIndex]\",(function(r){var i=e.data(\"instance\")||t;if(!n)return r.stopPropagation(),void r.preventDefault();var a=o.find(\":focus:first\");a.length&&!a.is(\"input, button, textarea, select\")&&(i.events.disableBlur(),a.blur(),i.events.disableBlur(),i.events.focus())})),o.data(\"mouseenter-event-set\",!0)),!a(o)&&t.shared.with_kb&&r(e.find(\".fr-buttons\"))},focusModal:function(e){t.core.hasFocus()||(t.events.disableBlur(),t.events.focus()),t.accessibility.saveSelection(),t.events.disableBlur(),t.$el.blur(),t.selection.clear(),t.events.disableBlur(),t.shared.with_kb?e.find(\".fr-command[tabIndex], [tabIndex]\").first().focus():e.find(\"[tabIndex]:first\").focus()},focusEditor:g,focusPopupButton:v,focusModalButton:function(e){var t=e.data(\"modal-button\");t&&setTimeout((function(){o(t),e.data(\"modal-button\",null)}),0)},hasFocus:function(){return null!=t.shared.$f_el},exec:function(n,r){var i=-1!=navigator.userAgent.indexOf(\"Mac OS X\")?n.metaKey:n.ctrlKey,a=n.which,s=!1;return a!=e.FE.KEYCODE.TAB||i||n.shiftKey||n.altKey?a!=e.FE.KEYCODE.ARROW_RIGHT||i||n.shiftKey||n.altKey?a!=e.FE.KEYCODE.TAB||i||!n.shiftKey||n.altKey?a!=e.FE.KEYCODE.ARROW_LEFT||i||n.shiftKey||n.altKey?a!=e.FE.KEYCODE.ARROW_UP||i||n.shiftKey||n.altKey?a!=e.FE.KEYCODE.ARROW_DOWN||i||n.shiftKey||n.altKey?a!=e.FE.KEYCODE.ENTER&&a!=e.FE.KEYCODE.SPACE||i||n.shiftKey||n.altKey?a!=e.FE.KEYCODE.ESC||i||n.shiftKey||n.altKey?a!=e.FE.KEYCODE.F10||i||n.shiftKey||!n.altKey||(s=l()):s=function(e){if(t.shared.$f_el){var n=d();return n?(t.button.click(n),o(n)):e.parent().find(\".fr-back:visible\").length?(t.shared.with_kb=!1,t.opts.toolbarInline&&(t.events.disableBlur(),t.events.focus()),t.button.exec(e.parent().find(\".fr-back:visible:first\")),v(e.parent())):t.shared.$f_el.is(\"button, .fr-group span\")&&(e.parent().is(\".fr-popup\")?(t.accessibility.restoreSelection(),t.shared.$f_el=null,!1!==t.events.trigger(\"toolbar.esc\")&&(t.popups.hide(e.parent()),t.opts.toolbarInline&&t.toolbar.showInline(null,!0),v(e.parent()))):g()),!1}}(r):s=u():s=t.shared.$f_el&&t.shared.$f_el.is(\".fr-dropdown:not(.fr-active)\")?u():h(!0):s=h():s=f(r):s=f(r,!0):s=p(r):s=p(r,!0),t.shared.$f_el||void 0!==s||(s=!0),!s&&t.keys.isBrowserAction(n)&&(s=!0),!!s||(n.preventDefault(),n.stopPropagation(),!1)},saveSelection:s,restoreSelection:function(){t.$el.find(\".fr-marker\").length&&(t.events.disableBlur(),t.selection.restore(),t.events.enableBlur())}}}}(jQuery),function(e){e.FE.MODULES.format=function(t){function n(e,t){var n=\"<\"+e;for(var o in t)t.hasOwnProperty(o)&&(n+=\" \"+o+'=\"'+t[o]+'\"');return n+=\">\"}function o(e,t){var n=e;for(var o in t)t.hasOwnProperty(o)&&(n+=\"id\"==o?\"#\"+t[o]:\"class\"==o?\".\"+t[o]:\"[\"+o+'=\"'+t[o]+'\"]');return n}function r(e,t){return!(!e||e.nodeType!=Node.ELEMENT_NODE)&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector).call(e,t)}function i(o,r,a){if(o){for(;o.nodeType===Node.COMMENT_NODE;)o=o.nextSibling;if(o){if(t.node.isBlock(o)&&\"HR\"!==o.tagName)return i(o.firstChild,r,a),!1;for(var s=e(n(r,a)).insertBefore(o),l=o;l&&!e(l).is(\".fr-marker\")&&0===e(l).find(\".fr-marker\").length&&\"UL\"!=l.tagName&&\"OL\"!=l.tagName;){var d=l;if(t.node.isBlock(l)&&\"HR\"!==o.tagName)return i(l.firstChild,r,a),!1;l=l.nextSibling,s.append(d)}if(l)(e(l).find(\".fr-marker\").length||\"UL\"==l.tagName||\"OL\"==l.tagName)&&i(l.firstChild,r,a);else{for(var c=s.get(0).parentNode;c&&!c.nextSibling&&!t.node.isElement(c);)c=c.parentNode;if(c){var p=c.nextSibling;p&&(t.node.isBlock(p)?\"HR\"===p.tagName?i(p.nextSibling,r,a):i(p.firstChild,r,a):i(p,r,a))}}s.is(\":empty\")&&s.remove()}}}function a(a,s){var l;if(void 0===s&&(s={}),s.style&&delete s.style,t.selection.isCollapsed()){t.markers.insert(),t.$el.find(\".fr-marker\").replaceWith(n(a,s)+e.FE.INVISIBLE_SPACE+e.FE.MARKERS+function(e){return\"</\"+e+\">\"}(a)),t.selection.restore()}else{var d;t.selection.save(),i(t.$el.find('.fr-marker[data-type=\"true\"]').get(0).nextSibling,a,s);do{for(d=t.$el.find(o(a,s)+\" > \"+o(a,s)),l=0;l<d.length;l++)d[l].outerHTML=d[l].innerHTML}while(d.length);t.el.normalize();var c=t.el.querySelectorAll(\".fr-marker\");for(l=0;l<c.length;l++){var p=e(c[l]);!0===p.data(\"type\")?r(p.get(0).nextSibling,o(a,s))&&p.next().prepend(p):r(p.get(0).previousSibling,o(a,s))&&p.prev().append(p)}t.selection.restore()}}function s(e,n,i,a){if(!a){var s=!1;if(!0===e.data(\"type\"))for(;t.node.isFirstSibling(e.get(0))&&!e.parent().is(t.$el)&&!e.parent().is(\"ol\")&&!e.parent().is(\"ul\");)e.parent().before(e),s=!0;else if(!1===e.data(\"type\"))for(;t.node.isLastSibling(e.get(0))&&!e.parent().is(t.$el)&&!e.parent().is(\"ol\")&&!e.parent().is(\"ul\");)e.parent().after(e),s=!0;if(s)return!0}if(e.parents(n).length||void 0===n){var l=\"\",d=\"\",c=e.parent();if(c.is(t.$el)||t.node.isBlock(c.get(0)))return!1;for(;!t.node.isBlock(c.parent().get(0))&&(void 0===n||void 0!==n&&!r(c.get(0),o(n,i)));)l+=t.node.closeTagString(c.get(0)),d=t.node.openTagString(c.get(0))+d,c=c.parent();var p=e.get(0).outerHTML;e.replaceWith('<span id=\"mark\"></span>');var f=c.html().replace(/<span id=\"mark\"><\\/span>/,l+t.node.closeTagString(c.get(0))+d+p+l+t.node.openTagString(c.get(0))+d);return c.replaceWith(t.node.openTagString(c.get(0))+f+t.node.closeTagString(c.get(0))),!0}return!1}function l(n,i,a,s){for(var d=t.node.contents(n.get(0)),c=0;c<d.length;c++){var p=d[c];if(t.node.hasClass(p,\"fr-marker\"))i=(i+1)%2;else if(i)if(e(p).find(\".fr-marker\").length>0)i=l(e(p),i,a,s);else{for(var f=e(p).find(a||\"*:not(br)\"),h=f.length-1;h>=0;h--){var u=f[h];t.node.isBlock(u)||t.node.isVoid(u)||void 0!==a&&!r(u,o(a,s))?t.node.isBlock(u)&&void 0===a&&\"TABLE\"!=p.tagName&&t.node.clearAttributes(u):t.node.hasClass(u,\"fr-clone\")||(u.outerHTML=u.innerHTML)}void 0===a&&p.nodeType==Node.ELEMENT_NODE&&!t.node.isVoid(p)||r(p,o(a,s))?t.node.isBlock(p)?void 0===a&&p.nodeType==Node.ELEMENT_NODE&&t.node.isBlock(p)&&\"TABLE\"!=p.tagName&&t.node.clearAttributes(p):t.node.hasClass(p,\"fr-clone\")||(p.outerHTML=p.innerHTML):void 0===a&&p.nodeType==Node.ELEMENT_NODE&&t.node.isBlock(p)&&\"TABLE\"!=p.tagName&&t.node.clearAttributes(p)}else e(p).find(\".fr-marker\").length>0&&(i=l(e(p),i,a,s))}return i}function d(n,o){void 0===o&&(o={}),o.style&&delete o.style;var r=t.selection.isCollapsed();t.selection.save();for(var i=!0;i;){i=!1;for(var a=t.$el.find(\".fr-marker\"),d=0;d<a.length;d++){var c=e(a[d]),p=null;if(c.attr(\"data-cloned\")||r||(p=c.clone().removeClass(\"fr-marker\").addClass(\"fr-clone\"),!0===c.data(\"type\")?c.attr(\"data-cloned\",!0).after(p):c.attr(\"data-cloned\",!0).before(p)),s(c,n,o,r)){i=!0;break}}}l(t.$el,0,n,o),r||(t.$el.find(\".fr-marker\").remove(),t.$el.find(\".fr-clone\").removeClass(\"fr-clone\").addClass(\"fr-marker\")),r&&t.$el.find(\".fr-marker\").before(e.FE.INVISIBLE_SPACE).after(e.FE.INVISIBLE_SPACE),t.html.cleanEmptyTags(),t.el.normalize(),t.selection.restore()}function c(t,n){var o=e(t);o.css(n,\"\"),\"\"===o.attr(\"style\")&&o.replaceWith(o.html())}function p(t,n){return 0===e(t).attr(\"style\").indexOf(n+\":\")||e(t).attr(\"style\").indexOf(\";\"+n+\":\")>=0||e(t).attr(\"style\").indexOf(\"; \"+n+\":\")>=0}function f(n,o){var r,a,l=null;if(t.selection.isCollapsed()){t.markers.insert();var d=(a=t.$el.find(\".fr-marker\")).parent();if(t.node.openTagString(d.get(0))=='<span style=\"'+n+\": \"+d.css(n)+';\">'){if(t.node.isEmpty(d.get(0)))l=e('<span style=\"'+n+\": \"+o+';\">'+e.FE.INVISIBLE_SPACE+e.FE.MARKERS+\"</span>\"),d.replaceWith(l);else{var p={};p[\"style*\"]=n+\":\",s(a,\"span\",p,!0),a=t.$el.find(\".fr-marker\"),o?(l=e('<span style=\"'+n+\": \"+o+';\">'+e.FE.INVISIBLE_SPACE+e.FE.MARKERS+\"</span>\"),a.replaceWith(l)):a.replaceWith(e.FE.INVISIBLE_SPACE+e.FE.MARKERS)}t.html.cleanEmptyTags()}else t.node.isEmpty(d.get(0))&&d.is(\"span\")?(a.replaceWith(e.FE.MARKERS),d.css(n,o)):(l=e('<span style=\"'+n+\": \"+o+';\">'+e.FE.INVISIBLE_SPACE+e.FE.MARKERS+\"</span>\"),a.replaceWith(l));l&&h(l,n,o)}else{if(t.selection.save(),null==o||\"color\"==n&&t.$el.find(\".fr-marker\").parents(\"u, a\").length>0){var f=t.$el.find(\".fr-marker\");for(r=0;r<f.length;r++)if(!0===(a=e(f[r])).data(\"type\"))for(;t.node.isFirstSibling(a.get(0))&&!a.parent().is(t.$el)&&!t.node.isElement(a.parent().get(0))&&!t.node.isBlock(a.parent().get(0));)a.parent().before(a);else for(;t.node.isLastSibling(a.get(0))&&!a.parent().is(t.$el)&&!t.node.isElement(a.parent().get(0))&&!t.node.isBlock(a.parent().get(0));)a.parent().after(a)}var u=t.$el.find('.fr-marker[data-type=\"true\"]').get(0).nextSibling,g={class:\"fr-unprocessed\"};for(o&&(g.style=n+\": \"+o+\";\"),i(u,\"span\",g),t.$el.find(\".fr-marker + .fr-unprocessed\").each((function(){e(this).prepend(e(this).prev())})),t.$el.find(\".fr-unprocessed + .fr-marker\").each((function(){e(this).prev().append(this)})),(o||\"\").match(/\\dem$/)&&t.$el.find(\"span.fr-unprocessed\").removeClass(\"fr-unprocessed\");t.$el.find(\"span.fr-unprocessed\").length>0;){if((l=t.$el.find(\"span.fr-unprocessed:first\").removeClass(\"fr-unprocessed\")).parent().get(0).normalize(),l.parent().is(\"span\")&&1==l.parent().get(0).childNodes.length){l.parent().css(n,o);var m=l;l=l.parent(),m.replaceWith(m.html())}var v=l.find(\"span\");for(r=v.length-1;r>=0;r--)c(v[r],n);h(l,n,o)}}!function(){var n;for(;t.$el.find(\".fr-split:empty\").length>0;)t.$el.find(\".fr-split:empty\").remove();t.$el.find(\".fr-split\").removeClass(\"fr-split\"),t.$el.find('[style=\"\"]').removeAttr(\"style\"),t.$el.find('[class=\"\"]').removeAttr(\"class\"),t.html.cleanEmptyTags(),e(t.$el.find(\"span\").get().reverse()).each((function(){this.attributes&&0!==this.attributes.length||e(this).replaceWith(this.innerHTML)})),t.el.normalize();var o=t.$el.find(\"span[style] + span[style]\");for(n=0;n<o.length;n++){var r=e(o[n]),i=e(o[n]).prev();r.get(0).previousSibling==i.get(0)&&t.node.openTagString(r.get(0))==t.node.openTagString(i.get(0))&&(r.prepend(i.html()),i.remove())}t.$el.find(\"span[style] span[style]\").each((function(){if(e(this).attr(\"style\").indexOf(\"font-size\")>=0){var t=e(this).parents(\"span[style]\");t.attr(\"style\").indexOf(\"background-color\")>=0&&(e(this).attr(\"style\",e(this).attr(\"style\")+\";\"+t.attr(\"style\")),s(e(this),\"span[style]\",{},!1))}})),t.el.normalize(),t.selection.restore()}()}function h(n,o,r){var i,a=n.parentsUntil(t.$el,\"span[style]\"),s=[];for(i=a.length-1;i>=0;i--)p(a[i],o)||s.push(a[i]);if((a=a.not(s)).length){var l=\"\",d=\"\",c=\"\",f=\"\",h=n.get(0);do{h=h.parentNode,e(h).addClass(\"fr-split\"),l+=t.node.closeTagString(h),d=t.node.openTagString(e(h).clone().addClass(\"fr-split\").get(0))+d,a.get(0)!=h&&(c+=t.node.closeTagString(h),f=t.node.openTagString(e(h).clone().addClass(\"fr-split\").get(0))+f)}while(a.get(0)!=h);var u=l+t.node.openTagString(e(a.get(0)).clone().css(o,r||\"\").get(0))+f+n.css(o,\"\").get(0).outerHTML+c+\"</span>\"+d;n.replaceWith('<span id=\"fr-break\"></span>');var g=a.get(0).outerHTML;e(a.get(0)).replaceWith(g.replace(/<span id=\"fr-break\"><\\/span>/g,u))}}function u(e,n){void 0===n&&(n={}),n.style&&delete n.style;var i=t.selection.ranges(0),a=i.startContainer;if(a.nodeType==Node.ELEMENT_NODE&&a.childNodes.length>0&&a.childNodes[i.startOffset]&&(a=a.childNodes[i.startOffset]),!i.collapsed&&a.nodeType==Node.TEXT_NODE&&i.startOffset==(a.textContent||\"\").length){for(;!t.node.isBlock(a.parentNode)&&!a.nextSibling;)a=a.parentNode;a.nextSibling&&(a=a.nextSibling)}for(var s=a;s&&s.nodeType==Node.ELEMENT_NODE&&!r(s,o(e,n));)s=s.firstChild;if(s&&s.nodeType==Node.ELEMENT_NODE&&r(s,o(e,n)))return!0;var l=a;for(l&&l.nodeType!=Node.ELEMENT_NODE&&(l=l.parentNode);l&&l.nodeType==Node.ELEMENT_NODE&&l!=t.el&&!r(l,o(e,n));)l=l.parentNode;return!(!l||l.nodeType!=Node.ELEMENT_NODE||l==t.el||!r(l,o(e,n)))}return{is:u,toggle:function(e,t){u(e,t)?d(e,t):a(e,t)},apply:a,remove:d,applyStyle:f,removeStyle:function(e){f(e,null)}}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{indentMargin:20}),e.FE.COMMANDS={bold:{title:\"Bold\",toggle:!0,refresh:function(e){var t=this.format.is(\"strong\");e.toggleClass(\"fr-active\",t).attr(\"aria-pressed\",t)}},italic:{title:\"Italic\",toggle:!0,refresh:function(e){var t=this.format.is(\"em\");e.toggleClass(\"fr-active\",t).attr(\"aria-pressed\",t)}},underline:{title:\"Underline\",toggle:!0,refresh:function(e){var t=this.format.is(\"u\");e.toggleClass(\"fr-active\",t).attr(\"aria-pressed\",t)}},strikeThrough:{title:\"Strikethrough\",toggle:!0,refresh:function(e){var t=this.format.is(\"s\");e.toggleClass(\"fr-active\",t).attr(\"aria-pressed\",t)}},subscript:{title:\"Subscript\",toggle:!0,refresh:function(e){var t=this.format.is(\"sub\");e.toggleClass(\"fr-active\",t).attr(\"aria-pressed\",t)}},superscript:{title:\"Superscript\",toggle:!0,refresh:function(e){var t=this.format.is(\"sup\");e.toggleClass(\"fr-active\",t).attr(\"aria-pressed\",t)}},outdent:{title:\"Decrease Indent\"},indent:{title:\"Increase Indent\"},undo:{title:\"Undo\",undo:!1,forcedRefresh:!0,disabled:!0},redo:{title:\"Redo\",undo:!1,forcedRefresh:!0,disabled:!0},insertHR:{title:\"Insert Horizontal Line\"},clearFormatting:{title:\"Clear Formatting\"},selectAll:{title:\"Select All\",undo:!1}},e.FE.RegisterCommand=function(t,n){e.FE.COMMANDS[t]=n},e.FE.MODULES.commands=function(t){function n(e){return t.html.defaultTag()&&(e=\"<\"+t.html.defaultTag()+\">\"+e+\"</\"+t.html.defaultTag()+\">\"),e}var o={bold:function(){i(\"bold\",\"strong\")},subscript:function(){t.format.is(\"sup\")&&t.format.remove(\"sup\"),i(\"subscript\",\"sub\")},superscript:function(){t.format.is(\"sub\")&&t.format.remove(\"sub\"),i(\"superscript\",\"sup\")},italic:function(){i(\"italic\",\"em\")},strikeThrough:function(){i(\"strikeThrough\",\"s\")},underline:function(){i(\"underline\",\"u\")},undo:function(){t.undo.run()},redo:function(){t.undo.redo()},indent:function(){a(1)},outdent:function(){a(-1)},show:function(){t.opts.toolbarInline&&t.toolbar.showInline(null,!0)},insertHR:function(){t.selection.remove();var o=\"\";t.core.isEmpty()&&(o=n(o=\"<br>\")),t.html.insert('<hr id=\"fr-just\">'+o);var r,i=t.$el.find(\"hr#fr-just\");if(i.removeAttr(\"id\"),0===i.next().length){var a=t.html.defaultTag();a?i.after(e(\"<\"+a+\">\").append(\"<br>\")):i.after(\"<br>\")}i.prev().is(\"hr\")?r=t.selection.setAfter(i.get(0),!1):i.next().is(\"hr\")?r=t.selection.setBefore(i.get(0),!1):t.selection.setAfter(i.get(0),!1)||t.selection.setBefore(i.get(0),!1),r||void 0===r||(o=n(o=e.FE.MARKERS+\"<br>\"),i.after(o)),t.selection.restore()},clearFormatting:function(){t.format.remove()},selectAll:function(){t.doc.execCommand(\"selectAll\",!1,!1)}};function r(n,r){if(!1!==t.events.trigger(\"commands.before\",e.merge([n],r||[]))){var i=e.FE.COMMANDS[n]&&e.FE.COMMANDS[n].callback||o[n],a=!0,s=!1;e.FE.COMMANDS[n]&&(void 0!==e.FE.COMMANDS[n].focus&&(a=e.FE.COMMANDS[n].focus),void 0!==e.FE.COMMANDS[n].accessibilityFocus&&(s=e.FE.COMMANDS[n].accessibilityFocus)),(!t.core.hasFocus()&&a&&!t.popups.areVisible()||!t.core.hasFocus()&&s&&t.accessibility.hasFocus())&&t.events.focus(!0),e.FE.COMMANDS[n]&&!1!==e.FE.COMMANDS[n].undo&&(t.$el.find(\".fr-marker\").length&&(t.events.disableBlur(),t.selection.restore()),t.undo.saveStep()),i&&i.apply(t,e.merge([n],r||[])),t.events.trigger(\"commands.after\",e.merge([n],r||[])),e.FE.COMMANDS[n]&&!1!==e.FE.COMMANDS[n].undo&&t.undo.saveStep()}}function i(e,n){t.format.toggle(n)}function a(n){t.selection.save(),t.html.wrap(!0,!0,!0,!0),t.selection.restore();for(var o=t.selection.blocks(),r=0;r<o.length;r++)if(\"LI\"!=o[r].tagName&&\"LI\"!=o[r].parentNode.tagName){var i=e(o[r]),a=\"rtl\"==t.opts.direction||\"rtl\"==i.css(\"direction\")?\"margin-right\":\"margin-left\",s=t.helpers.getPX(i.css(a));if(i.width()<2*t.opts.indentMargin&&n>0)continue;i.css(a,Math.max(s+n*t.opts.indentMargin,0)||\"\"),i.removeClass(\"fr-temp-div\")}t.selection.save(),t.html.unwrap(),t.selection.restore()}function s(e){return function(){r(e)}}var l={};for(var d in o)o.hasOwnProperty(d)&&(l[d]=s(d));return e.extend(l,{exec:r,_init:function(){t.events.on(\"keydown\",(function(e){var n=t.selection.element();if(n&&\"HR\"==n.tagName&&!t.keys.isArrow(e.which))return e.preventDefault(),!1})),t.events.on(\"keyup\",(function(n){var o=t.selection.element();if(o&&\"HR\"==o.tagName)if(n.which==e.FE.KEYCODE.ARROW_LEFT||n.which==e.FE.KEYCODE.ARROW_UP){if(o.previousSibling)return t.node.isBlock(o.previousSibling)?t.selection.setAtEnd(o.previousSibling):e(o).before(e.FE.MARKERS),t.selection.restore(),!1}else if((n.which==e.FE.KEYCODE.ARROW_RIGHT||n.which==e.FE.KEYCODE.ARROW_DOWN)&&o.nextSibling)return t.node.isBlock(o.nextSibling)?t.selection.setAtStart(o.nextSibling):e(o).after(e.FE.MARKERS),t.selection.restore(),!1})),t.events.on(\"mousedown\",(function(e){if(e.target&&\"HR\"==e.target.tagName)return e.preventDefault(),e.stopPropagation(),!1})),t.events.on(\"mouseup\",(function(){var n=t.selection.element();n==t.selection.endElement()&&n&&\"HR\"==n.tagName&&(n.nextSibling&&(t.node.isBlock(n.nextSibling)?t.selection.setAtStart(n.nextSibling):e(n).after(e.FE.MARKERS)),t.selection.restore())}))}})}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{pastePlain:!1,pasteDeniedTags:[\"colgroup\",\"col\",\"meta\"],pasteDeniedAttrs:[\"class\",\"id\",\"style\"],pasteAllowedStyleProps:[\".*\"],pasteAllowLocalImages:!1}),e.FE.MODULES.paste=function(t){var n,o,r,i;function a(e,n){try{t.win.localStorage.setItem(\"fr-copied-html\",e),t.win.localStorage.setItem(\"fr-copied-text\",n)}catch(e){}}function s(n){var o=t.html.getSelected();a(o,e(\"<div>\").html(o).text()),\"cut\"==n.type&&(t.undo.saveStep(),setTimeout((function(){t.selection.save(),t.html.wrap(),t.selection.restore(),t.events.focus(),t.undo.saveStep()}),0))}var l=!1;function d(i){if(t.edit.isDisabled())return!1;if(l)return!1;if(i.originalEvent&&(i=i.originalEvent),!1===t.events.trigger(\"paste.before\",[i]))return i.preventDefault(),!1;if(t.$win.scrollTop(),i&&i.clipboardData&&i.clipboardData.getData){var a=\"\",s=i.clipboardData.types;if(t.helpers.isArray(s))for(var d=0;d<s.length;d++)a+=s[d]+\";\";else a=s;if(n=\"\",/text\\/rtf/.test(a)&&(o=i.clipboardData.getData(\"text/rtf\")),/text\\/html/.test(a)&&!t.browser.safari?n=i.clipboardData.getData(\"text/html\"):/text\\/rtf/.test(a)&&t.browser.safari?n=o:/public.rtf/.test(a)&&t.browser.safari&&(n=i.clipboardData.getData(\"text/rtf\")),\"\"!==n)return p(),i.preventDefault&&(i.stopPropagation(),i.preventDefault()),!1;n=null}return function(){t.selection.save(),t.events.disableBlur(),n=null,r?(r.html(\"\"),t.browser.edge&&t.opts.iframe&&t.$el.append(r)):(r=e('<div contenteditable=\"true\" style=\"position: fixed; top: 0; left: -9999px; height: 100%; width: 0; word-break: break-all; overflow:hidden; z-index: 2147483647; line-height: 140%; -moz-user-select: text; -webkit-user-select: text; -ms-user-select: text; user-select: text;\" tabIndex=\"-1\"></div>'),t.browser.webkit?(r.css(\"top\",t.$sc.scrollTop()),t.$el.after(r)):t.browser.edge&&t.opts.iframe?t.$el.append(r):t.$box.after(r),t.events.on(\"destroy\",(function(){r.remove()})));t.helpers.isIOS()&&t.$sc&&t.$sc.overflow(\"hidden\");r.focus(),t.helpers.isIOS()&&t.$sc&&t.$sc.overflow(\"hidden\",\"\");t.win.setTimeout(p,1)}(),!1}function c(r){if(r.originalEvent&&(r=r.originalEvent),r&&r.dataTransfer&&r.dataTransfer.getData){var a=\"\",s=r.dataTransfer.types;if(t.helpers.isArray(s))for(var l=0;l<s.length;l++)a+=s[l]+\";\";else a=s;if(n=\"\",/text\\/rtf/.test(a)&&(o=r.dataTransfer.getData(\"text/rtf\")),/text\\/html/.test(a)?n=r.dataTransfer.getData(\"text/html\"):/text\\/rtf/.test(a)&&t.browser.safari?n=o:/text\\/plain/.test(a)&&!this.browser.mozilla&&(n=t.html.escapeEntities(r.dataTransfer.getData(\"text/plain\")).replace(/\\n/g,\"<br>\")),\"\"!==n){t.keys.forceUndo(),i=t.snapshot.get(),t.selection.save(),t.$el.find(\".fr-marker\").removeClass(\"fr-marker\").addClass(\"fr-marker-helper\");var d=t.markers.insertAtPoint(r);if(t.$el.find(\".fr-marker\").removeClass(\"fr-marker\").addClass(\"fr-marker-placeholder\"),t.$el.find(\".fr-marker-helper\").addClass(\"fr-marker\").removeClass(\"fr-marker-helper\"),t.selection.restore(),t.selection.remove(),t.$el.find(\".fr-marker-placeholder\").addClass(\"fr-marker\").removeClass(\"fr-marker-placeholder\"),!1!==d){var c=t.el.querySelector(\".fr-marker\");return e(c).replaceWith(e.FE.MARKERS),t.selection.restore(),p(),r.preventDefault&&(r.stopPropagation(),r.preventDefault()),!1}}else n=null}}function p(){t.browser.edge&&t.opts.iframe&&t.$box.after(r),i||(t.keys.forceUndo(),i=t.snapshot.get()),n||(n=r.get(0).innerHTML,t.selection.restore(),t.events.enableBlur());var e=n.match(/(class=\\\"?Mso|class=\\'?Mso|class=\"?Xl|class='?Xl|class=Xl|style=\\\"[^\\\"]*\\bmso\\-|style=\\'[^\\']*\\bmso\\-|w:WordDocument)/gi),o=t.events.chainTrigger(\"paste.beforeCleanup\",n);o&&\"string\"==typeof o&&(n=o),(!e||e&&!1!==t.events.trigger(\"paste.wordPaste\",[n]))&&u(n,e)}function f(){var o=null;try{o=t.win.localStorage.getItem(\"fr-dragged-content-text\")}catch(e){}return!(!o||e(\"<div>\").html(n).text().replace(/\\u00A0/gi,\" \").replace(/\\r|\\n/gi,\"\")!=o.replace(/\\u00A0/gi,\" \").replace(/\\r|\\n/gi,\"\"))}function h(e){for(var t=\"\",n=0;n++<e;)t+=\"&nbsp;\";return t}function u(n,o,r){var a,s=null,l=null;if(n.toLowerCase().indexOf(\"<body\")>=0){var d=\"\";n.indexOf(\"<style\")>=0&&(d=n.replace(/[.\\s\\S\\w\\W<>]*(<style[^>]*>[\\s]*[.\\s\\S\\w\\W<>]*[\\s]*<\\/style>)[.\\s\\S\\w\\W<>]*/gi,\"$1\")),n=d+n.replace(/[.\\s\\S\\w\\W<>]*<body[^>]*>[\\s]*([.\\s\\S\\w\\W<>]*)[\\s]*<\\/body>[.\\s\\S\\w\\W<>]*/gi,\"$1\");var c=0,p=\"\";n.replace(/<pre.*?>([\\s\\S]*?)<\\/pre>/gi,(function(e,t,o){o>c&&(p+=n.substring(c,o).replace(/ \\n/g,\" \").replace(/\\n /g,\" \").replace(/([^>])\\n([^<])/g,\"$1 $2\")),p+=e,c=o+e.length})),n.length>c+1&&(p+=n.substring(c,n.length).replace(/ \\n/g,\" \").replace(/\\n /g,\" \").replace(/([^>])\\n([^<])/g,\"$1 $2\")),n=p}var u=!1;n.indexOf('id=\"docs-internal-guid')>=0&&(n=n.replace(/^[\\w\\W\\s\\S]* id=\"docs-internal-guid[^>]*>([\\w\\W\\s\\S]*)<\\/b>[\\w\\W\\s\\S]*$/g,\"$1\"),u=!0),n.indexOf('content=\"Sheets\"')>=0&&(n=n.replace(/width:0px;/g,\"\"));var g=!1,v=!1;if(!o&&(g=function(n){var o=null;try{o=t.win.localStorage.getItem(\"fr-copied-text\")}catch(e){}return!(!o||e(\"<div>\").html(n).text().replace(/\\u00A0/gi,\" \").replace(/\\r|\\n/gi,\"\")!=o.replace(/\\u00A0/gi,\" \").replace(/\\r|\\n/gi,\"\"))}(n),v=f(),g&&(n=t.win.localStorage.getItem(\"fr-copied-html\")),v&&(g=!0,n=t.win.localStorage.getItem(\"fr-dragged-content-html\")),!g)){var b=t.opts.htmlAllowedStyleProps;t.opts.htmlAllowedStyleProps=t.opts.pasteAllowedStyleProps,t.opts.htmlAllowComments=!1,n=(n=(n=n.replace(/<span class=\"Apple-tab-span\">\\s*<\\/span>/g,h(t.opts.tabSpaces||4))).replace(/<span class=\"Apple-tab-span\" style=\"white-space:pre\">(\\t*)<\\/span>/g,(function(e,n){return h(n.length*(t.opts.tabSpaces||4))}))).replace(/\\t/g,h(t.opts.tabSpaces||4)),n=t.clean.html(n,t.opts.pasteDeniedTags,t.opts.pasteDeniedAttrs),t.opts.htmlAllowedStyleProps=b,t.opts.htmlAllowComments=!0,n=(n=(n=m(n)).replace(/\\r/g,\"\")).replace(/^ */g,\"\").replace(/ *$/g,\"\")}!o||t.wordPaste&&r||(0===(n=n.replace(/^\\n*/g,\"\").replace(/^ /g,\"\")).indexOf(\"<colgroup>\")&&(n=\"<table>\"+n+\"</table>\"),n=function(e){var n;e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(/<p(.*?)class=\"?'?MsoListParagraph\"?'? ([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<ul><li>$3</li></ul>\")).replace(/<p(.*?)class=\"?'?NumberedText\"?'? ([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<ol><li>$3</li></ol>\")).replace(/<p(.*?)class=\"?'?MsoListParagraphCxSpFirst\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<ul><li$3>$5</li>\")).replace(/<p(.*?)class=\"?'?NumberedTextCxSpFirst\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<ol><li$3>$5</li>\")).replace(/<p(.*?)class=\"?'?MsoListParagraphCxSpMiddle\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li>\")).replace(/<p(.*?)class=\"?'?NumberedTextCxSpMiddle\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li>\")).replace(/<p(.*?)class=\"?'?MsoListBullet\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li>\")).replace(/<p(.*?)class=\"?'?MsoListParagraphCxSpLast\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li></ul>\")).replace(/<p(.*?)class=\"?'?NumberedTextCxSpLast\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li></ol>\")).replace(/<span([^<]*?)style=\"?'?mso-list:Ignore\"?'?([\\s\\S]*?)>([\\s\\S]*?)<span/gi,\"<span><span\")).replace(/<!--\\[if \\!supportLists\\]-->([\\s\\S]*?)<!--\\[endif\\]-->/gi,\"\")).replace(/<!\\[if \\!supportLists\\]>([\\s\\S]*?)<!\\[endif\\]>/gi,\"\")).replace(/(\\n|\\r| class=(\")?Mso[a-zA-Z0-9]+(\")?)/gi,\" \")).replace(/<!--[\\s\\S]*?-->/gi,\"\")).replace(/<(\\/)*(meta|link|span|\\\\?xml:|st1:|o:|font)(.*?)>/gi,\"\");var o,r=[\"style\",\"script\",\"applet\",\"embed\",\"noframes\",\"noscript\"];for(n=0;n<r.length;n++){var i=new RegExp(\"<\"+r[n]+\".*?\"+r[n]+\"(.*?)>\",\"gi\");e=e.replace(i,\"\")}e=(e=(e=e.replace(/&nbsp;/gi,\" \")).replace(/<td([^>]*)><\\/td>/g,\"<td$1><br></td>\")).replace(/<th([^>]*)><\\/th>/g,\"<th$1><br></th>\");do{o=e,e=e.replace(/<[^\\/>][^>]*><\\/[^>]+>/gi,\"\")}while(e!=o);e=(e=e.replace(/<lilevel([^1])([^>]*)>/gi,'<li data-indent=\"true\"$2>')).replace(/<lilevel1([^>]*)>/gi,\"<li$1>\"),e=(e=(e=t.clean.html(e,t.opts.pasteDeniedTags,t.opts.pasteDeniedAttrs)).replace(/<a>(.[^<]+)<\\/a>/gi,\"$1\")).replace(/<br> */g,\"<br>\");var a=t.o_doc.createElement(\"div\");a.innerHTML=e;var s=a.querySelectorAll(\"li[data-indent]\");for(n=0;n<s.length;n++){var l=s[n],d=l.previousElementSibling;if(d&&\"LI\"==d.tagName){var c=d.querySelector(\":scope > ul, :scope > ol\");c||(c=document.createElement(\"ul\"),d.appendChild(c)),c.appendChild(l)}else l.removeAttribute(\"data-indent\")}return t.html.cleanBlankSpaces(a),a.innerHTML}(n),n=m(n)),t.opts.pastePlain&&!g&&(n=function(e){var n,o=null,r=t.doc.createElement(\"div\");r.innerHTML=e;var i=r.querySelectorAll(\"p, div, h1, h2, h3, h4, h5, h6, pre, blockquote\");for(n=0;n<i.length;n++)(o=i[n]).outerHTML=\"<\"+(t.html.defaultTag()||\"DIV\")+\">\"+o.innerHTML+\"</\"+(t.html.defaultTag()||\"DIV\")+\">\";for(n=(i=r.querySelectorAll(\"*:not(\"+\"p, div, h1, h2, h3, h4, h5, h6, pre, blockquote, ul, ol, li, table, tbody, thead, tr, td, br, img\".split(\",\").join(\"):not(\")+\")\")).length-1;n>=0;n--)(o=i[n]).outerHTML=o.innerHTML;var a=function(e){for(var n=t.node.contents(e),o=0;o<n.length;o++)n[o].nodeType!=Node.TEXT_NODE&&n[o].nodeType!=Node.ELEMENT_NODE?n[o].parentNode.removeChild(n[o]):a(n[o])};return a(r),r.innerHTML}(n));var E=t.events.chainTrigger(\"paste.afterCleanup\",n);if(\"string\"==typeof E&&(n=E),\"\"!==n){var y=t.o_doc.createElement(\"div\");y.innerHTML=n,n.indexOf(\"<body>\")>=0?(t.html.cleanBlankSpaces(y),t.spaces.normalize(y,!0)):t.spaces.normalize(y);var w=y.getElementsByTagName(\"span\");for(a=w.length-1;a>=0;a--){var S=w[a];0===S.attributes.length&&(S.outerHTML=S.innerHTML)}var C=t.selection.element(),_=!1;if(C&&e(C).parentsUntil(t.el,\"ul, ol\").length&&(_=!0),_){var T=y.children;1==T.length&&[\"OL\",\"UL\"].indexOf(T[0].tagName)>=0&&(T[0].outerHTML=T[0].innerHTML)}if(!u){var k=y.getElementsByTagName(\"br\");for(a=k.length-1;a>=0;a--){var A=k[a];t.node.isBlock(A.previousSibling)&&A.parentNode.removeChild(A)}}if(t.opts.enter==e.FE.ENTER_BR)for(a=(s=y.querySelectorAll(\"p, div\")).length-1;a>=0;a--)0===(l=s[a]).attributes.length&&(l.outerHTML=l.innerHTML+(l.nextSibling&&!t.node.isEmpty(l)?\"<br>\":\"\"));else if(t.opts.enter==e.FE.ENTER_DIV)for(a=(s=y.getElementsByTagName(\"p\")).length-1;a>=0;a--)0===(l=s[a]).attributes.length&&(l.outerHTML=\"<div>\"+l.innerHTML+\"</div>\");else t.opts.enter==e.FE.ENTER_P&&1==y.childNodes.length&&\"P\"==y.childNodes[0].tagName&&0===y.childNodes[0].attributes.length&&(y.childNodes[0].outerHTML=y.childNodes[0].innerHTML);n=y.innerHTML,g&&(n=function(n){var o,r=t.o_doc.createElement(\"div\");r.innerHTML=n;var i=r.querySelectorAll(\"*:empty:not(td):not(th):not(tr):not(iframe):not(svg):not(\"+e.FE.VOID_ELEMENTS.join(\"):not(\")+\"):not(\"+t.opts.htmlAllowedEmptyTags.join(\"):not(\")+\")\");for(;i.length;){for(o=0;o<i.length;o++)i[o].parentNode.removeChild(i[o]);i=r.querySelectorAll(\"*:empty:not(td):not(th):not(tr):not(iframe):not(svg):not(\"+e.FE.VOID_ELEMENTS.join(\"):not(\")+\"):not(\"+t.opts.htmlAllowedEmptyTags.join(\"):not(\")+\")\")}return r.innerHTML}(n)),t.html.insert(n,!0)}t.events.trigger(\"paste.after\"),t.undo.saveStep(i),i=null,t.undo.saveStep()}function g(e){for(var t=e.length-1;t>=0;t--)e[t].attributes&&e[t].attributes.length&&e.splice(t,1);return e}function m(e){var n,o=t.o_doc.createElement(\"div\");o.innerHTML=e;for(var r=g(Array.prototype.slice.call(o.querySelectorAll(\":scope > div:not([style]), td > div:not([style]), th > div:not([style]), li > div:not([style])\")));r.length;){var i=r[r.length-1];if(t.html.defaultTag()&&\"div\"!=t.html.defaultTag())i.querySelector(t.html.blockTagsQuery())?i.outerHTML=i.innerHTML:i.outerHTML=\"<\"+t.html.defaultTag()+\">\"+i.innerHTML+\"</\"+t.html.defaultTag()+\">\";else{var a=i.querySelectorAll(\"*\");!a.length||\"BR\"!==a[a.length-1].tagName&&0===i.innerText.length||!a.length||\"BR\"!==a[a.length-1].tagName||a[a.length-1].nextSibling?i.outerHTML=i.innerHTML+(i.nextSibling?\"<br>\":\"\"):i.outerHTML=i.innerHTML}r=g(Array.prototype.slice.call(o.querySelectorAll(\":scope > div:not([style]), td > div:not([style]), th > div:not([style]), li > div:not([style])\")))}for(r=g(Array.prototype.slice.call(o.querySelectorAll(\"div:not([style])\")));r.length;){for(n=0;n<r.length;n++){var s=r[n],l=s.innerHTML.replace(/\\u0009/gi,\"\").trim();try{s.outerHTML=l}catch(e){}}r=g(Array.prototype.slice.call(o.querySelectorAll(\"div:not([style])\")))}return o.innerHTML}function v(e){if(e.originalEvent&&e.originalEvent.target&&e.originalEvent.target.nodeType==Node.TEXT_NODE)try{t.win.localStorage.setItem(\"fr-dragged-content-html\",e.originalEvent.dataTransfer.getData(\"text/html\")),t.win.localStorage.setItem(\"fr-dragged-content-text\",e.originalEvent.dataTransfer.getData(\"text/plain\"))}catch(e){}}function b(){t.el.removeEventListener(\"copy\",s),t.el.removeEventListener(\"cut\",s),t.el.removeEventListener(\"paste\",d)}return{_init:function(){t.el.addEventListener(\"copy\",s),t.el.addEventListener(\"cut\",s),t.el.addEventListener(\"paste\",d,{capture:!0}),t.events.on(\"drop\",c),t.browser.msie&&t.browser.version<11&&(t.events.on(\"mouseup\",(function(e){2==e.button&&(setTimeout((function(){l=!1}),50),l=!0)}),!0),t.events.on(\"beforepaste\",d)),t.events.on(\"dragstart\",v,!0),t.events.on(\"destroy\",b)},cleanEmptyTagsAndDivs:m,getRtfClipboard:function(){return o},saveCopiedText:a,clean:u}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{shortcutsEnabled:[],shortcutsHint:!0}),e.FE.SHORTCUTS_MAP={},e.FE.RegisterShortcut=function(t,n,o,r,i,a){e.FE.SHORTCUTS_MAP[(i?\"^\":\"\")+(a?\"@\":\"\")+t]={cmd:n,val:o,letter:r,shift:i,option:a},e.FE.DEFAULTS.shortcutsEnabled.push(n)},e.FE.RegisterShortcut(e.FE.KEYCODE.E,\"show\",null,\"E\",!1,!1),e.FE.RegisterShortcut(e.FE.KEYCODE.B,\"bold\",null,\"B\",!1,!1),e.FE.RegisterShortcut(e.FE.KEYCODE.I,\"italic\",null,\"I\",!1,!1),e.FE.RegisterShortcut(e.FE.KEYCODE.U,\"underline\",null,\"U\",!1,!1),e.FE.RegisterShortcut(e.FE.KEYCODE.S,\"strikeThrough\",null,\"S\",!1,!1),e.FE.RegisterShortcut(e.FE.KEYCODE.CLOSE_SQUARE_BRACKET,\"indent\",null,\"]\",!1,!1),e.FE.RegisterShortcut(e.FE.KEYCODE.OPEN_SQUARE_BRACKET,\"outdent\",null,\"[\",!1,!1),e.FE.RegisterShortcut(e.FE.KEYCODE.Z,\"undo\",null,\"Z\",!1,!1),e.FE.RegisterShortcut(e.FE.KEYCODE.Z,\"redo\",null,\"Z\",!0,!1),e.FE.RegisterShortcut(e.FE.KEYCODE.Y,\"redo\",null,\"Y\",!1,!1),e.FE.MODULES.shortcuts=function(t){var n=null;var o=!1;function r(n){if(!t.core.hasFocus())return!0;var r=n.which,i=-1!=navigator.userAgent.indexOf(\"Mac OS X\")?n.metaKey:n.ctrlKey;if(\"keyup\"==n.type&&o&&r!=e.FE.KEYCODE.META)return o=!1,!1;\"keydown\"==n.type&&(o=!1);var a=(n.shiftKey?\"^\":\"\")+(n.altKey?\"@\":\"\")+r;if(i&&e.FE.SHORTCUTS_MAP[a]){var s=e.FE.SHORTCUTS_MAP[a].cmd;if(s&&t.opts.shortcutsEnabled.indexOf(s)>=0){var l,d=e.FE.SHORTCUTS_MAP[a].val;if(s&&!d?l=t.$tb.find('.fr-command[data-cmd=\"'+s+'\"]'):s&&d&&(l=t.$tb.find('.fr-command[data-cmd=\"'+s+'\"][data-param1=\"'+d+'\"]')),l.length)return n.preventDefault(),n.stopPropagation(),l.parents(\".fr-toolbar\").data(\"instance\",t),\"keydown\"==n.type&&(t.button.exec(l),o=!0),!1;if(s&&(t.commands[s]||e.FE.COMMANDS[s]&&e.FE.COMMANDS[s].callback))return n.preventDefault(),n.stopPropagation(),\"keydown\"==n.type&&((t.commands[s]||e.FE.COMMANDS[s].callback)(),o=!0),!1}}}return{_init:function(){t.events.on(\"keydown\",r,!0),t.events.on(\"keyup\",r,!0)},get:function(o){if(!t.opts.shortcutsHint)return null;if(!n)for(var r in n={},e.FE.SHORTCUTS_MAP)e.FE.SHORTCUTS_MAP.hasOwnProperty(r)&&t.opts.shortcutsEnabled.indexOf(e.FE.SHORTCUTS_MAP[r].cmd)>=0&&(n[e.FE.SHORTCUTS_MAP[r].cmd+\".\"+(e.FE.SHORTCUTS_MAP[r].val||\"\")]={shift:e.FE.SHORTCUTS_MAP[r].shift,option:e.FE.SHORTCUTS_MAP[r].option,letter:e.FE.SHORTCUTS_MAP[r].letter});var i=n[o];return i?(t.helpers.isMac()?String.fromCharCode(8984):t.language.translate(\"Ctrl\")+\"+\")+(i.shift?t.helpers.isMac()?String.fromCharCode(8679):t.language.translate(\"Shift\")+\"+\":\"\")+(i.option?t.helpers.isMac()?String.fromCharCode(8997):t.language.translate(\"Alt\")+\"+\":\"\")+i.letter:null}}}}(jQuery),jQuery.FE.MODULES.snapshot=function(e){function t(e){for(var t=e.parentNode.childNodes,n=0,o=null,r=0;r<t.length;r++){if(o){var i=t[r].nodeType===Node.TEXT_NODE&&\"\"===t[r].textContent,a=o.nodeType===Node.TEXT_NODE&&t[r].nodeType===Node.TEXT_NODE,s=o.nodeType===Node.TEXT_NODE&&\"\"===o.textContent;i||a||s||n++}if(t[r]==e)return n;o=t[r]}}function n(n){var o=[];if(!n.parentNode)return[];for(;!e.node.isElement(n);)o.push(t(n)),n=n.parentNode;return o.reverse()}function o(e,t){for(;e&&e.nodeType===Node.TEXT_NODE;){var n=e.previousSibling;n&&n.nodeType==Node.TEXT_NODE&&(t+=n.textContent.length),e=n}return t}function r(t){for(var n=e.el,o=0;o<t.length;o++)n=n.childNodes[t[o]];return n}function i(t,n){try{var o=r(n.scLoc),i=n.scOffset,a=r(n.ecLoc),s=n.ecOffset,l=e.doc.createRange();l.setStart(o,i),l.setEnd(a,s),t.addRange(l)}catch(e){console.warn(e)}}return{get:function(){var t,r={};if(e.events.trigger(\"snapshot.before\"),r.html=(e.$wp?e.$el.html():e.$oel.get(0).outerHTML).replace(/ style=\"\"/g,\"\"),r.ranges=[],e.$wp&&e.selection.inEditor()&&e.core.hasFocus())for(var i=e.selection.ranges(),a=0;a<i.length;a++)r.ranges.push({scLoc:n((t=i[a]).startContainer),scOffset:o(t.startContainer,t.startOffset),ecLoc:n(t.endContainer),ecOffset:o(t.endContainer,t.endOffset)});return e.events.trigger(\"snapshot.after\",[r]),r},restore:function(t){e.$el.html()!=t.html&&(e.opts.htmlExecuteScripts?e.$el.html(t.html):e.el.innerHTML=t.html);var n=e.selection.get();e.selection.clear(),e.events.focus(!0);for(var o=0;o<t.ranges.length;o++)i(n,t.ranges[o])},equal:function(t,n){return t.html==n.html&&(!e.core.hasFocus()||JSON.stringify(t.ranges)==JSON.stringify(n.ranges))}}},jQuery.FE.MODULES.undo=function(e){function t(t){var n=t.which;e.keys.ctrlKey(t)&&(90==n&&t.shiftKey&&t.preventDefault(),90==n&&t.preventDefault())}var n=null;function o(){if(!e.undo_stack||e.undoing)return!1;for(;e.undo_stack.length>e.undo_index;)e.undo_stack.pop()}function r(){n=(e.$wp?e.$el.html():e.$oel.get(0).outerHTML).replace(/ style=\"\"/g,\"\"),e.undo_index=0,e.undo_stack=[]}function i(){e.undo_stack=[]}return{_init:function(){r(),e.events.on(\"initialized\",(function(){n=(e.$wp?e.$el.html():e.$oel.get(0).outerHTML).replace(/ style=\"\"/g,\"\")})),e.events.on(\"blur\",(function(){e.el.querySelector(\".fr-dragging\")||e.undo.saveStep()})),e.events.on(\"keydown\",t),e.events.on(\"destroy\",i)},run:function(){if(e.undo_index>1){e.undoing=!0;var t=e.undo_stack[--e.undo_index-1];clearTimeout(e._content_changed_timer),e.snapshot.restore(t),n=t.html,e.popups.hideAll(),e.toolbar.enable(),e.events.trigger(\"contentChanged\"),e.events.trigger(\"commands.undo\"),e.undoing=!1}},redo:function(){if(e.undo_index<e.undo_stack.length){e.undoing=!0;var t=e.undo_stack[e.undo_index++];clearTimeout(e._content_changed_timer),e.snapshot.restore(t),n=t.html,e.popups.hideAll(),e.toolbar.enable(),e.events.trigger(\"contentChanged\"),e.events.trigger(\"commands.redo\"),e.undoing=!1}},canDo:function(){return!(0===e.undo_stack.length||e.undo_index<=1)},canRedo:function(){return e.undo_index!=e.undo_stack.length},dropRedo:o,reset:r,saveStep:function(t){if(!e.undo_stack||e.undoing||e.el.querySelector(\".fr-marker\"))return!1;void 0===t?(t=e.snapshot.get(),e.undo_stack[e.undo_index-1]&&e.snapshot.equal(e.undo_stack[e.undo_index-1],t)||(o(),e.undo_stack.push(t),e.undo_index++,t.html!=n&&(e.events.trigger(\"contentChanged\"),n=t.html))):(o(),e.undo_index>0?e.undo_stack[e.undo_index-1]=t:(e.undo_stack.push(t),e.undo_index++))}}},function(e){e.FE.ICON_TEMPLATES={octobercms:'<i class=\"icon-[NAME]\" aria-hidden=\"true\"></i>',font_awesome:'<i class=\"fa fa-[NAME]\" aria-hidden=\"true\"></i>',text:'<span style=\"text-align:center\">[NAME]</span>',image:\"<img src=[SRC] alt=[ALT] />\",svg:'<svg viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\">[PATH]</svg>',empty:\" \"},e.FE.ICONS={bold:{NAME:\"bold\"},italic:{NAME:\"italic\"},underline:{NAME:\"underline\"},strikeThrough:{NAME:\"strikethrough\"},subscript:{NAME:\"subscript\"},superscript:{NAME:\"superscript\"},color:{NAME:\"tint\"},outdent:{NAME:\"outdent\"},indent:{NAME:\"indent\"},undo:{NAME:\"rotate-left\",FA5NAME:\"undo\"},redo:{NAME:\"rotate-right\",FA5NAME:\"redo\"},insertHR:{NAME:\"minus\"},clearFormatting:{NAME:\"eraser\"},selectAll:{NAME:\"mouse-pointer\"}},e.FE.DefineIconTemplate=function(t,n){e.FE.ICON_TEMPLATES[t]=n},e.FE.DefineIcon=function(t,n){e.FE.ICONS[t]=n},e.extend(e.FE.DEFAULTS,{iconsTemplate:\"octobercms\"}),e.FE.MODULES.icon=function(t){return{create:function(n){var o=null,r=e.FE.ICONS[n];if(void 0!==r){var i=r.template||e.FE.ICON_DEFAULT_TEMPLATE||t.opts.iconsTemplate;i&&i.apply&&(i=i.apply(t)),r.FA5NAME||(r.FA5NAME=r.NAME),i&&(i=e.FE.ICON_TEMPLATES[i])&&(o=i.replace(/\\[([a-zA-Z0-9]*)\\]/g,(function(e,t){return\"NAME\"==t?r[t]||n:r[t]})))}return o||n},getTemplate:function(n){var o=e.FE.ICONS[n],r=t.opts.iconsTemplate;return void 0!==o?r=o.template||e.FE.ICON_DEFAULT_TEMPLATE||t.opts.iconsTemplate:r}}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{tooltips:!0}),e.FE.MODULES.tooltip=function(t){function n(){if(t.helpers.isMobile())return!1;t.$tooltip&&t.$tooltip.removeClass(\"fr-visible\").css(\"left\",\"-3000px\").css(\"position\",\"fixed\")}function o(n,o){if(t.helpers.isMobile())return!1;if(n.data(\"title\")||n.data(\"title\",n.attr(\"title\")),!n.data(\"title\"))return!1;t.$tooltip||t.opts.tooltips&&!t.helpers.isMobile()&&(t.shared.$tooltip?t.$tooltip=t.shared.$tooltip:(t.shared.$tooltip=e('<div class=\"fr-tooltip\"></div>'),t.$tooltip=t.shared.$tooltip,t.opts.theme&&t.$tooltip.addClass(t.opts.theme+\"-theme\"),e(t.o_doc).find(\"body:first\").append(t.$tooltip)),t.events.on(\"shared.destroy\",(function(){t.$tooltip.html(\"\").removeData().remove(),t.$tooltip=null}),!0)),n.removeAttr(\"title\"),t.$tooltip.text(t.language.translate(n.data(\"title\"))),t.$tooltip.addClass(\"fr-visible\");var r=n.offset().left+(n.outerWidth()-t.$tooltip.outerWidth())/2;r<0&&(r=0),r+t.$tooltip.outerWidth()>e(t.o_win).width()&&(r=e(t.o_win).width()-t.$tooltip.outerWidth()),void 0===o&&(o=t.opts.toolbarBottom);var i=o?n.offset().top-t.$tooltip.height():n.offset().top+n.outerHeight();t.$tooltip.css(\"position\",\"\"),t.$tooltip.css(\"left\",r),t.$tooltip.css(\"top\",Math.ceil(i)),\"static\"!=e(t.o_doc).find(\"body:first\").css(\"position\")?(t.$tooltip.css(\"margin-left\",-e(t.o_doc).find(\"body:first\").offset().left),t.$tooltip.css(\"margin-top\",-e(t.o_doc).find(\"body:first\").offset().top)):(t.$tooltip.css(\"margin-left\",\"\"),t.$tooltip.css(\"margin-top\",\"\"))}return{hide:n,to:o,bind:function(r,i,a){t.opts.tooltips&&!t.helpers.isMobile()&&(t.events.$on(r,\"mouseenter\",i,(function(n){t.node.hasClass(n.currentTarget,\"fr-disabled\")||t.edit.isDisabled()||o(e(n.currentTarget),a)}),!0),t.events.$on(r,\"mouseleave \"+t._mousedown+\" \"+t._mouseup,i,(function(){n()}),!0))}}}}(jQuery),function(e){e.FE.MODULES.button=function(t){var n=[];(t.opts.toolbarInline||t.opts.toolbarContainer)&&(t.shared.buttons||(t.shared.buttons=[]),n=t.shared.buttons);var o=[];function r(t,n,o){for(var r=e(),i=0;i<t.length;i++){var a=e(t[i]);if(a.is(n)&&(r=r.add(a)),o&&a.is(\".fr-dropdown\")){var s=a.next().find(n);r=r.add(s)}}return r}function i(i,a){var s,l=e();if(!i)return l;for(s in l=(l=l.add(r(n,i,a))).add(r(o,i,a)),t.shared.popups)if(t.shared.popups.hasOwnProperty(s)){var d=t.shared.popups[s].children().find(i);l=l.add(d)}for(s in t.shared.modals)if(t.shared.modals.hasOwnProperty(s)){var c=t.shared.modals[s].$modal.find(i);l=l.add(c)}return l}function a(e){e.addClass(\"fr-blink\"),setTimeout((function(){e.removeClass(\"fr-blink\")}),500);for(var t=e.data(\"cmd\"),n=[];void 0!==e.data(\"param\"+(n.length+1));)n.push(e.data(\"param\"+(n.length+1)));var o=i(\".fr-dropdown.fr-active\");o.length&&(o.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).next().attr(\"aria-hidden\",!0),o.prev(\".fr-expanded\").removeClass(\"fr-expanded\"),o.parent(\".fr-toolbar:not(.fr-inline)\").css(\"zIndex\",\"\")),e.parents(\".fr-popup, .fr-toolbar\").data(\"instance\").commands.exec(t,n)}function s(n){var o=n.parents(\".fr-popup, .fr-toolbar\").data(\"instance\");if(0!==n.parents(\".fr-popup\").length||n.data(\"popup\")||o.popups.hideAll(),o.popups.areVisible()&&!o.popups.areVisible(o)){for(var r=0;r<e.FE.INSTANCES.length;r++)e.FE.INSTANCES[r]!=o&&e.FE.INSTANCES[r].popups&&e.FE.INSTANCES[r].popups.areVisible()&&e.FE.INSTANCES[r].$el.find(\".fr-marker\").remove();o.popups.hideAll()}t.node.hasClass(n.get(0),\"fr-dropdown\")?function(n){var o=n.next(),r=t.node.hasClass(n.get(0),\"fr-active\"),a=i(\".fr-dropdown.fr-active\").not(n),s=n.parents(\".fr-toolbar, .fr-popup\").data(\"instance\")||t;if(s.helpers.isIOS()&&!s.el.querySelector(\".fr-marker\")&&(s.selection.save(),s.selection.clear(),s.selection.restore()),!r){var l=n.data(\"cmd\");o.find(\".fr-command\").removeClass(\"fr-active\").attr(\"aria-selected\",!1),e.FE.COMMANDS[l]&&e.FE.COMMANDS[l].refreshOnShow&&e.FE.COMMANDS[l].refreshOnShow.apply(s,[n,o]),o.css(\"left\",n.offset().left-n.parent().offset().left-(\"rtl\"==t.opts.direction?o.width()-n.outerWidth():0)),o.addClass(\"test-height\");var d=o.outerHeight();o.removeClass(\"test-height\"),o.css(\"top\",\"\").css(\"bottom\",\"\"),!t.opts.toolbarBottom&&o.offset().top+n.outerHeight()+d<e(t.o_doc).height()?o.css(\"top\",n.position().top+n.outerHeight()):o.css(\"bottom\",n.parents(\".fr-popup, .fr-toolbar\").first().height()-n.position().top)}n.addClass(\"fr-blink\").toggleClass(\"fr-active\"),n.hasClass(\"fr-options\")&&n.prev().toggleClass(\"fr-expanded\"),n.hasClass(\"fr-active\")?(o.attr(\"aria-hidden\",!1),n.attr(\"aria-expanded\",!0)):(o.attr(\"aria-hidden\",!0),n.attr(\"aria-expanded\",!1)),setTimeout((function(){n.removeClass(\"fr-blink\")}),300),o.css(\"margin-left\",\"\"),o.offset().left+o.outerWidth()>t.$sc.offset().left+t.$sc.width()&&o.css(\"margin-left\",-(o.offset().left+o.outerWidth()-t.$sc.offset().left-t.$sc.width())),o.offset().left<t.$sc.offset().left&&\"rtl\"==t.opts.direction&&o.css(\"margin-left\",t.$sc.offset().left),a.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).next().attr(\"aria-hidden\",!0),a.prev(\".fr-expanded\").removeClass(\"fr-expanded\"),a.parent(\".fr-toolbar:not(.fr-inline)\").css(\"zIndex\",\"\"),0!==n.parents(\".fr-popup\").length||t.opts.toolbarInline||(t.node.hasClass(n.get(0),\"fr-active\")?t.$tb.css(\"zIndex\",(t.opts.zIndex||1)+4):t.$tb.css(\"zIndex\",\"\"));var c=o.find(\"a.fr-command.fr-active:first\");t.helpers.isMobile()||(c.length?t.accessibility.focusToolbarElement(c):t.accessibility.focusToolbarElement(n))}(n):(!function(e){a(e)}(n),e.FE.COMMANDS[n.data(\"cmd\")]&&!1!==e.FE.COMMANDS[n.data(\"cmd\")].refreshAfterCallback&&o.button.bulkRefresh())}function l(t){s(e(t.currentTarget))}function d(e){var t=e.find(\".fr-dropdown.fr-active\");t.length&&(t.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).next().attr(\"aria-hidden\",!0),t.parent(\".fr-toolbar:not(.fr-inline)\").css(\"zIndex\",\"\"),t.prev().removeClass(\"fr-expanded\"))}function c(e){e.preventDefault(),e.stopPropagation()}function p(e){if(e.stopPropagation(),!t.helpers.isMobile())return!1}function f(n,o,r){if(o=e.extend(!0,{},o),t.helpers.isMobile()&&!1===o.showOnMobile)return\"\";var i=o.displaySelection;\"function\"==typeof i&&(i=i(t));var a=\"\";if(\"options\"!==o.type)if(i){var s=\"function\"==typeof o.defaultSelection?o.defaultSelection(t):o.defaultSelection;a='<span style=\"width:'+(o.displaySelectionWidth||100)+'px\">'+t.language.translate(s||o.title)+\"</span>\"}else a=t.icon.create(o.icon||n),a+='<span class=\"fr-sr-only\">'+(t.language.translate(o.title)||\"\")+\"</span>\";var l=o.popup?' data-popup=\"true\"':\"\",d=o.modal?' data-modal=\"true\"':\"\",c=t.shortcuts.get(n+\".\");c=c?\" (\"+c+\")\":\"\";var p=n+\"-\"+t.id,h=\"dropdown-menu-\"+p,u='<button id=\"'+p+'\"type=\"button\" tabIndex=\"-1\" role=\"button\"'+(o.toggle?' aria-pressed=\"false\"':\"\")+(\"dropdown\"==o.type||\"options\"==o.type?' aria-controls=\"'+h+'\" aria-expanded=\"false\" aria-haspopup=\"true\"':\"\")+(o.disabled?' aria-disabled=\"true\"':\"\")+' title=\"'+(t.language.translate(o.title)||\"\")+c+'\" class=\"fr-command fr-btn'+(\"dropdown\"==o.type||\"options\"==o.type?\" fr-dropdown\":\"\")+(\"options\"==o.type?\" fr-options\":\"\")+\" fr-btn-\"+t.icon.getTemplate(o.icon)+(o.displaySelection?\" fr-selection\":\"\")+(o.back?\" fr-back\":\"\")+(o.disabled?\" fr-disabled\":\"\")+(r?\"\":\" fr-hidden\")+'\" data-cmd=\"'+n+'\"'+l+d+\">\"+a+\"</button>\";if(\"dropdown\"==o.type||\"options\"==o.type){var g='<div id=\"'+h+'\" class=\"fr-dropdown-menu\" role=\"listbox\" aria-labelledby=\"'+p+'\" aria-hidden=\"true\"><div class=\"fr-dropdown-wrapper\" role=\"presentation\"><div class=\"fr-dropdown-content\" role=\"presentation\">';g+=function(e,n){var o=\"\";if(n.html)\"function\"==typeof n.html?o+=n.html.call(t):o+=n.html;else{var r=n.options;for(var i in\"function\"==typeof r&&(r=r()),o+='<ul class=\"fr-dropdown-list\" role=\"presentation\">',r)if(r.hasOwnProperty(i)){var a=t.shortcuts.get(e+\".\"+i);a=a?'<span class=\"fr-shortcut\">'+a+\"</span>\":\"\",o+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"'+(\"options\"===n.type?e.replace(/Options/g,\"\"):e)+'\" data-param1=\"'+i+'\" title=\"'+r[i]+'\">'+t.language.translate(r[i])+\"</a></li>\"}o+=\"</ul>\"}return o}(n,o),u+=g+=\"</div></div></div>\"}return o.hasOptions&&o.hasOptions.apply(t)&&(o.type=\"options\",o.hasOptions=!1,u='<div class=\"fr-btn-wrap\">'+u+f(n+\"Options\",o,r)+\"</div>\"),u}function h(n){var o=t.$tb&&t.$tb.data(\"instance\")||t;if(!1===t.events.trigger(\"buttons.refresh\"))return!0;setTimeout((function(){for(var r=o.selection.inEditor()&&o.core.hasFocus(),i=0;i<n.length;i++){var a=e(n[i]),s=a.data(\"cmd\");0===a.parents(\".fr-popup\").length?r||e.FE.COMMANDS[s]&&e.FE.COMMANDS[s].forcedRefresh?o.button.refresh(a):t.node.hasClass(a.get(0),\"fr-dropdown\")||(a.removeClass(\"fr-active\"),a.attr(\"aria-pressed\")&&a.attr(\"aria-pressed\",!1)):a.parents(\".fr-popup\").is(\":visible\")&&o.button.refresh(a)}}),0)}function u(){h(n),h(o)}function g(){n=[],o=[]}t.shared.popup_buttons||(t.shared.popup_buttons=[]),o=t.shared.popup_buttons;var m=null;function v(){clearTimeout(m),m=setTimeout(u,50)}return{_init:function(){t.opts.toolbarInline?t.events.on(\"toolbar.show\",u):(t.events.on(\"mouseup\",v),t.events.on(\"keyup\",v),t.events.on(\"blur\",v),t.events.on(\"focus\",v),t.events.on(\"contentChanged\",v),t.helpers.isMobile()&&t.events.$on(t.$doc,\"selectionchange\",u)),t.events.on(\"shared.destroy\",g)},buildList:function(n,o){for(var r=\"\",i=0;i<n.length;i++){var a=n[i],s=e.FE.COMMANDS[a];if(!(s&&void 0!==s.plugin&&t.opts.pluginsEnabled.indexOf(s.plugin)<0))if(s)r+=f(a,s,void 0===o||o.indexOf(a)>=0);else\"|\"==a?r+='<div class=\"fr-separator fr-vs\" role=\"separator\" aria-orientation=\"vertical\"></div>':\"-\"==a&&(r+='<div class=\"fr-separator fr-hs\" role=\"separator\" aria-orientation=\"horizontal\"></div>')}return r},bindCommands:function(r,i){t.events.bindClick(r,\".fr-command:not(.fr-disabled)\",l),t.events.$on(r,t._mousedown+\" \"+t._mouseup+\" \"+t._move,\".fr-dropdown-menu\",c,!0),t.events.$on(r,t._mousedown+\" \"+t._mouseup+\" \"+t._move,\".fr-dropdown-menu .fr-dropdown-wrapper\",p,!0);var a=r.get(0).ownerDocument,s=\"defaultView\"in a?a.defaultView:a.parentWindow,f=function(n){(!n||n.type==t._mouseup&&n.target!=e(\"html\").get(0)||\"keydown\"==n.type&&(t.keys.isCharacter(n.which)&&!t.keys.ctrlKey(n)||n.which==e.FE.KEYCODE.ESC))&&d(r)};t.events.$on(e(s),t._mouseup+\" resize keydown\",f,!0),t.opts.iframe&&t.events.$on(t.$win,t._mouseup,f,!0),t.node.hasClass(r.get(0),\"fr-popup\")?e.merge(o,r.find(\".fr-btn\").toArray()):e.merge(n,r.find(\".fr-btn\").toArray()),t.tooltip.bind(r,\".fr-btn, .fr-title\",i)},refresh:function(n){var o,r=n.parents(\".fr-popup, .fr-toolbar\").data(\"instance\")||t,i=n.data(\"cmd\");t.node.hasClass(n.get(0),\"fr-dropdown\")?o=n.next():(n.removeClass(\"fr-active\"),n.attr(\"aria-pressed\")&&n.attr(\"aria-pressed\",!1)),e.FE.COMMANDS[i]&&e.FE.COMMANDS[i].refresh?e.FE.COMMANDS[i].refresh.apply(r,[n,o]):t.refresh[i]&&r.refresh[i](n,o)},bulkRefresh:u,exec:a,click:s,hideActiveDropdowns:d,getButtons:i}}}(jQuery),function(e){e.FE.MODULES.modals=function(t){t.shared.modals||(t.shared.modals={});var n,o=t.shared.modals;function r(){for(var e in o){var t=o[e];t&&t.$modal&&t.$modal.removeData().remove()}n&&n.removeData().remove(),o={}}function i(r,i){if(o[r]){var a=o[r].$modal,s=a.data(\"instance\")||t;s.events.enableBlur(),a.hide(),n.hide(),e(s.o_doc).find(\"body:first\").removeClass(\"prevent-scroll fr-mobile\"),a.removeClass(\"fr-active\"),i||(s.accessibility.restoreSelection(),s.events.trigger(\"modals.hide\"))}}function a(e){var n;if(\"string\"==typeof e){if(!o[e])return;n=o[e].$modal}else n=e;return n&&t.node.hasClass(n,\"fr-active\")&&t.core.sameInstance(n)||!1}return{_init:function(){t.events.on(\"shared.destroy\",r,!0)},get:function(e){return o[e]},create:function(r,a,s){if(t.shared.$overlay||(t.shared.$overlay=e('<div class=\"fr-overlay\">').appendTo(\"body:first\")),n=t.shared.$overlay,t.opts.theme&&n.addClass(t.opts.theme+\"-theme\"),!o[r]){var l=function(n,o){var r='<div tabIndex=\"-1\" class=\"fr-modal'+(t.opts.theme?\" \"+t.opts.theme+\"-theme\":\"\")+'\"><div class=\"fr-modal-wrapper\">';return r+='<div class=\"fr-modal-head\">'+n+'<span title=\"'+t.language.translate(\"Cancel\")+'\" class=\"fr-modal-close\">&times;</span></div>',r+='<div tabIndex=\"-1\" class=\"fr-modal-body\">'+o+\"</div>\",e(r+=\"</div></div>\")}(a,s);o[r]={$modal:l,$head:l.find(\".fr-modal-head\"),$body:l.find(\".fr-modal-body\")},t.helpers.isMobile()||l.addClass(\"fr-desktop\"),l.appendTo(\"body:first\"),t.events.$on(l,\"click\",\".fr-modal-close\",(function(){i(r)}),!0),o[r].$body.css(\"margin-top\",o[r].$head.outerHeight()),t.events.$on(l,\"keydown\",(function(n){var o=n.which;return o==e.FE.KEYCODE.ESC?(i(r),t.accessibility.focusModalButton(l),!1):!(!e(n.target).is(\"input[type=text], textarea\")&&o!=e.FE.KEYCODE.ARROW_UP&&o!=e.FE.KEYCODE.ARROW_DOWN&&!t.keys.isBrowserAction(n))||(n.preventDefault(),n.stopPropagation(),!1)}),!0),i(r,!0)}return o[r]},show:function(r){if(o[r]){var i=o[r].$modal;i.data(\"instance\",t),i.show(),n.show(),e(t.o_doc).find(\"body:first\").addClass(\"prevent-scroll\"),t.helpers.isMobile()&&e(t.o_doc).find(\"body:first\").addClass(\"fr-mobile\"),i.addClass(\"fr-active\"),t.accessibility.focusModal(i)}},hide:i,resize:function(n){if(o[n]){var r=o[n],i=r.$modal,a=r.$body,s=e(t.o_win).height(),l=i.find(\".fr-modal-wrapper\"),d=s-l.outerHeight(!0)+(l.height()-(a.outerHeight(!0)-a.height())),c=\"auto\";a.get(0).scrollHeight>d&&(c=d),a.height(c)}},isVisible:a,areVisible:function(e){for(var t in o)if(o.hasOwnProperty(t)&&a(t)&&(void 0===e||o[t].$modal.data(\"instance\")==e))return o[t].$modal;return!1}}}}(jQuery),function(e){e.FE.POPUP_TEMPLATES={\"text.edit\":\"[_EDIT_]\"},e.FE.RegisterTemplate=function(t,n){e.FE.POPUP_TEMPLATES[t]=n},e.FE.MODULES.popups=function(t){t.shared.popups||(t.shared.popups={});var n=t.shared.popups;function o(e,o){o.is(\":visible\")||(o=t.$sc),o.is(n[e].data(\"container\"))||(n[e].data(\"container\",o),o.append(n[e]))}function r(e){return n[e]&&t.node.hasClass(n[e],\"fr-active\")&&t.core.sameInstance(n[e])||!1}function i(e){for(var t in n)if(n.hasOwnProperty(t)&&r(t)&&(void 0===e||n[t].data(\"instance\")==e))return n[t];return!1}function a(e){var o=null;if((o=\"string\"!=typeof e?e:n[e])&&t.node.hasClass(o,\"fr-active\")){o.removeClass(\"fr-active fr-above\"),t.events.trigger(\"popups.hide.\"+e);const n=o.data(\"popper\");n&&n.destroy(),t.$tb&&(t.opts.zIndex>1?t.$tb.css(\"zIndex\",t.opts.zIndex+1):t.$tb.css(\"zIndex\",\"\")),t.events.disableBlur(),o.find(\"input, textarea, button\").filter(\":focus\").blur(),o.find(\"input, textarea\").attr(\"disabled\",\"disabled\")}}function s(e){for(var t in void 0===e&&(e=[]),n)n.hasOwnProperty(t)&&e.indexOf(t)<0&&a(t)}function l(){t.shared.exit_flag=!0}function d(){t.shared.exit_flag=!1}function c(){return t.shared.exit_flag}function p(o,r){var i,a,s=function(n,o){var r=e.FE.POPUP_TEMPLATES[n];if(!r)return null;for(var i in\"function\"==typeof r&&(r=r.apply(t)),o)o.hasOwnProperty(i)&&(r=r.replace(\"[_\"+i.toUpperCase()+\"_]\",o[i]));return r}(o,r);return s?(i=e('<div class=\"fr-popup'+(t.helpers.isMobile()?\" fr-mobile\":\" fr-desktop\")+(t.opts.toolbarInline?\" fr-inline\":\"\")+'\"><span class=\"fr-arrow\"></span>'+s+\"</div>\"),e(\".fr-action-buttons button\",i).addClass(\"btn btn-sm btn-secondary\"),e(\".fr-action-buttons button.fr-submit\",i).removeClass(\"btn-secondary\").addClass(\"btn-primary\"),t.opts.theme&&i.addClass(t.opts.theme+\"-theme\"),t.opts.zIndex>1&&(t.opts.editInPopup?i.css(\"z-index\",t.opts.zIndex+2):t.$tb.css(\"z-index\",t.opts.zIndex+2)),\"auto\"!=t.opts.direction&&i.removeClass(\"fr-ltr fr-rtl\").addClass(\"fr-\"+t.opts.direction),i.find(\"input, textarea\").attr(\"dir\",t.opts.direction).attr(\"disabled\",\"disabled\"),(a=e(\"body:first\")).append(i),i.data(\"container\",a),n[o]=i,t.button.bindCommands(i,!1),i):(i=e('<div class=\"fr-popup fr-empty\"></div>'),(a=e(\"body:first\")).append(i),i.data(\"container\",a),n[o]=i,i)}function f(o){var i=n[o];return{_windowResize:function(){var e=i.data(\"instance\")||t;!e.helpers.isMobile()&&i.is(\":visible\")&&(e.events.disableBlur(),e.popups.hide(o),e.events.enableBlur())},_inputFocus:function(n){var o=i.data(\"instance\")||t,r=e(n.currentTarget);if(r.is(\"input:file\")&&r.closest(\".fr-layer\").addClass(\"fr-input-focus\"),n.preventDefault(),n.stopPropagation(),setTimeout((function(){o.events.enableBlur()}),t.browser.msie?100:0),o.helpers.isMobile()){var a=e(o.o_win).scrollTop();setTimeout((function(){e(o.o_win).scrollTop(a)}),0)}},_inputBlur:function(n){var o=i.data(\"instance\")||t,r=e(n.currentTarget);r.is(\"input:file\")&&r.closest(\".fr-layer\").removeClass(\"fr-input-focus\"),document.activeElement!=this&&e(this).is(\":visible\")&&(o.events.blurActive()&&o.events.trigger(\"blur\"),o.events.enableBlur())},_editorKeydown:function(n){var a=i.data(\"instance\")||t;a.keys.ctrlKey(n)||n.which==e.FE.KEYCODE.ALT||n.which==e.FE.KEYCODE.ESC||(r(o)&&i.find(\".fr-back:visible\").length?a.button.exec(i.find(\".fr-back:visible:first\")):n.which!=e.FE.KEYCODE.ALT&&a.popups.hide(o))},_preventFocus:function(n){var o=i.data(\"instance\")||t,r=n.originalEvent?n.originalEvent.target||n.originalEvent.originalTarget:null;\"mouseup\"==n.type||e(r).is(\":focus\")||o.events.disableBlur(),\"mouseup\"!=n.type||e(r).hasClass(\"fr-command\")||e(r).parents(\".fr-command\").length>0||e(r).hasClass(\"fr-dropdown-content\")||t.button.hideActiveDropdowns(i),(t.browser.safari||t.browser.mozilla)&&\"mousedown\"==n.type&&e(r).is(\"input[type=file]\")&&o.events.disableBlur();var a=\"input, textarea, button, select, label, .fr-command\";if(r&&!e(r).is(a)&&0===e(r).parents(a).length)return n.stopPropagation(),!1;r&&e(r).is(a)&&n.stopPropagation(),d()},_editorMouseup:function(){i.is(\":visible\")&&c()&&i.find(\"input:focus, textarea:focus, button:focus, select:focus\").filter(\":visible\").length>0&&t.events.disableBlur()},_windowMouseup:function(e){if(!t.core.sameInstance(i))return!0;var n=i.data(\"instance\")||t;i.is(\":visible\")&&c()&&(e.stopPropagation(),n.markers.remove(),n.popups.hide(o),d())},_windowKeydown:function(n){if(!t.core.sameInstance(i))return!0;var r=i.data(\"instance\")||t,a=n.which;if(e.FE.KEYCODE.ESC==a){if(r.popups.isVisible(o)&&r.opts.toolbarInline)return n.stopPropagation(),r.popups.isVisible(o)&&(i.find(\".fr-back:visible\").length?(r.button.exec(i.find(\".fr-back:visible:first\")),r.accessibility.focusPopupButton(i)):i.find(\".fr-dismiss:visible\").length?r.button.exec(i.find(\".fr-dismiss:visible:first\")):(r.popups.hide(o),r.toolbar.showInline(null,!0),r.accessibility.focusPopupButton(i))),!1;if(r.popups.isVisible(o))return i.find(\".fr-back:visible\").length?(r.button.exec(i.find(\".fr-back:visible:first\")),r.accessibility.focusPopupButton(i)):i.find(\".fr-dismiss:visible\").length?r.button.exec(i.find(\".fr-dismiss:visible:first\")):(r.popups.hide(o),r.accessibility.focusPopupButton(i)),!1}},_doPlaceholder:function(){0===e(this).next().length&&e(this).attr(\"placeholder\")&&e(this).after('<label for=\"'+e(this).attr(\"id\")+'\">'+e(this).attr(\"placeholder\")+\"</label>\"),e(this).toggleClass(\"fr-not-empty\",\"\"!==e(this).val())}}}function h(e,o){t.events.on(\"mouseup\",e._editorMouseup,!0),t.$wp&&t.events.on(\"keydown\",e._editorKeydown),t.events.on(\"blur\",(function(){i()&&t.markers.remove(),s()})),t.events.on(\"window.mouseup\",e._windowMouseup,!0),t.events.on(\"window.keydown\",e._windowKeydown,!0),n[o].data(\"inst\"+t.id,!0),t.events.on(\"destroy\",(function(){t.core.sameInstance(n[o])&&n[o].removeClass(\"fr-active\").appendTo(\"body:first\")}),!0)}function u(){for(var e in n)if(n.hasOwnProperty(e)){var t=n[e];t&&(t.html(\"\").removeData().remove(),n[e]=null)}n=[]}return t.shared.exit_flag=!1,{_init:function(){t.events.on(\"shared.destroy\",u,!0),t.events.on(\"window.mousedown\",l),t.events.on(\"window.touchmove\",d),t.events.$on(e(t.o_win),\"scroll\",d),t.events.on(\"mousedown\",(function(e){i()&&(e.stopPropagation(),t.$el.find(\".fr-marker\").remove(),l(),t.events.disableBlur())}))},create:function(n,o){var r=p(n,o),i=f(n);return h(i,n),t.events.$on(r,\"mousedown mouseup touchstart touchend touch\",\"*\",i._preventFocus,!0),t.events.$on(r,\"focus\",\"input, textarea, button, select\",i._inputFocus,!0),t.events.$on(r,\"blur\",\"input, textarea, button, select\",i._inputBlur,!0),t.accessibility.registerPopup(n),t.events.$on(r,\"keydown keyup change input\",\"input, textarea\",i._doPlaceholder,!0),t.helpers.isIOS()&&t.events.$on(r,\"touchend\",\"label\",(function(){e(\"#\"+e(this).attr(\"for\")).prop(\"checked\",(function(e,t){return!t}))}),!0),t.events.$on(e(t.o_win),\"resize\",i._windowResize,!0),r},get:function(e){var o=n[e];return o&&!o.data(\"inst\"+t.id)&&h(f(e),e),o},show:function(e,a,l,c){if(r(e)||(i()&&t.$el.find(\".fr-marker\").length>0?(t.events.disableBlur(),t.selection.restore()):i()||(t.events.disableBlur(),t.events.focus(),t.events.enableBlur())),s([e]),!n[e])return!1;var p=t.button.getButtons(\".fr-dropdown.fr-active\");p.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).parent(\".fr-toolbar\").css(\"zIndex\",\"\"),p.next().attr(\"aria-hidden\",!0),n[e].data(\"instance\",t),t.$tb&&t.$tb.data(\"instance\",t);var f=n[e].outerWidth(),h=r(e);n[e].addClass(\"fr-active\").removeClass(\"fr-hidden\").find(\"input, textarea\").removeAttr(\"disabled\");var u=n[e].data(\"container\");!function(e,o){o.is(\":visible\")||(o=t.$sc),o.get(0).contains(n[e].get(0))||o.append(n[e])}(e,u),t.opts.toolbarInline&&u&&t.$tb&&u.get(0)==t.$tb.get(0)&&(o(e,t.$sc),l=t.$tb.offset().top-t.helpers.getPX(t.$tb.css(\"margin-top\")),a=t.$tb.offset().left+t.$tb.outerWidth()/2+(parseFloat(t.$tb.find(\".fr-arrow\").css(\"margin-left\"))||0)+t.$tb.find(\".fr-arrow\").outerWidth()/2,t.node.hasClass(t.$tb.get(0),\"fr-above\")&&l&&(l+=t.$tb.outerHeight()),c=0),u=n[e].data(\"container\"),!t.opts.iframe||c||h||(a&&(a-=t.$iframe.offset().left),l&&(l-=t.$iframe.offset().top)),u.is(t.$tb)?t.$tb.css(\"zIndex\",(t.opts.zIndex||1)+4):n[e].css(\"zIndex\",(t.opts.zIndex||1)+4),a&&(a-=f/2),t.opts.toolbarBottom&&u&&t.$tb&&u.get(0)==t.$tb.get(0)&&(n[e].addClass(\"fr-above\"),l&&(l-=n[e].outerHeight())),n[e].removeClass(\"fr-active\"),t.position.at(a,l,n[e],c||0),n[e].addClass(\"fr-active\"),h||t.accessibility.focusPopup(n[e]),t.opts.toolbarInline&&t.toolbar.hide(),t.events.trigger(\"popups.show.\"+e),d()},showEl:function(e,a,l){if(a||(a=t.$el),r(e)||(i()&&t.$el.find(\".fr-marker\").length>0?(t.events.disableBlur(),t.selection.restore()):i()||(t.events.disableBlur(),t.events.focus(),t.events.enableBlur())),s([e]),!n[e])return!1;var c=t.button.getButtons(\".fr-dropdown.fr-active\");c.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).parent(\".fr-toolbar\").css(\"zIndex\",\"\"),c.next().attr(\"aria-hidden\",!0),n[e].data(\"instance\",t),t.$tb&&t.$tb.data(\"instance\",t);var p=r(e);n[e].addClass(\"fr-active\").removeClass(\"fr-hidden\").find(\"input, textarea\").removeAttr(\"disabled\");var f=n[e].data(\"container\");!function(e,o){o.is(\":visible\")||(o=t.$sc),o.get(0).contains(n[e].get(0))||o.append(n[e])}(e,f),t.opts.toolbarInline&&f&&t.$tb&&f.get(0)==t.$tb.get(0)&&o(e,t.$sc),(f=n[e].data(\"container\")).is(t.$tb)?t.$tb.css(\"zIndex\",(t.opts.zIndex||1)+4):n[e].css(\"zIndex\",(t.opts.zIndex||1)+4),t.opts.toolbarBottom&&f&&t.$tb&&f.get(0)==t.$tb.get(0)&&n[e].addClass(\"fr-above\"),n[e].removeClass(\"fr-active\"),function(e,n,o){const r=n.data(\"popper\");r&&r.destroy();const i=Popper.createPopper(e.get(0),n.get(0),function(e){const n=t.opts.iframe?()=>[t.$iframe.offset().left,t.$iframe.offset().top+10]:[0,10],o=[];o.push({name:\"preventOverflow\",options:{boundary:t.$sc.get(0)}}),e||o.push({name:\"flip\",options:{fallbackPlacements:[\"left\",\"top\",\"bottom\"]}});o.push({name:\"offset\",options:{offset:n}});return{placement:e?\"bottom\":\"right\",modifiers:o}}(o));n.data(\"popper\",i)}(a,n[e],l),n[e].addClass(\"fr-active\"),p||t.accessibility.focusPopup(n[e]),t.opts.toolbarInline&&t.toolbar.hide(),t.events.trigger(\"popups.show.\"+e),d()},showElToolbar:function(e,t){return this.showEl(e,t,!0)},hide:a,onHide:function(e,n){t.events.on(\"popups.hide.\"+e,n)},hideAll:s,setContainer:o,refresh:function(o){n[o].data(\"instance\",t),t.events.trigger(\"popups.refresh.\"+o);for(var r=n[o].find(\".fr-command\"),i=0;i<r.length;i++){var a=e(r[i]);0===a.parents(\".fr-dropdown-menu\").length&&t.button.refresh(a)}},onRefresh:function(e,n){t.events.on(\"popups.refresh.\"+e,n)},onShow:function(e,n){t.events.on(\"popups.show.\"+e,n)},isVisible:r,areVisible:i}}}(jQuery),function(e){e.FE.MODULES.position=function(t){function n(){var e=t.selection.ranges(0).getBoundingClientRect();if(0===e.top&&0===e.left&&0===e.width||0===e.height){var n=!1;0===t.$el.find(\".fr-marker\").length&&(t.selection.save(),n=!0);var o=t.$el.find(\".fr-marker:first\");o.css(\"display\",\"inline\"),o.css(\"line-height\",\"\");var r=o.offset(),i=o.outerHeight();o.css(\"display\",\"none\"),o.css(\"line-height\",0),(e={}).left=r.left,e.width=0,e.height=i,e.top=r.top-(t.opts.iframe?0:t.helpers.scrollTop()),e.right=1,e.bottom=1,e.ok=!0,n&&t.selection.restore()}return e}function o(e,n,o,r){var i=o.data(\"container\");!i||\"BODY\"===i.get(0).tagName&&\"static\"==i.css(\"position\")||(e&&(e-=i.offset().left),n&&(n-=i.offset().top),\"BODY\"!=i.get(0).tagName?(e&&(e+=i.get(0).scrollLeft),n&&(n+=i.get(0).scrollTop)):\"absolute\"==i.css(\"position\")&&(e&&(e+=i.position().left),n&&(n+=i.position().top))),t.opts.iframe&&i&&t.$tb&&i.get(0)!=t.$tb.get(0)&&(e&&(e+=t.$iframe.offset().left),n&&(n+=t.$iframe.offset().top));var a=function(e,n){var o=e.outerWidth(!0),r=e.parent().offset().left;return e.parent().get(0)==t.$sc.get(0)&&(r-=e.parent().position().left),r+n+o>t.$sc.get(0).clientWidth-10&&(n=t.$sc.get(0).clientWidth-o-r-10),n<0&&(n=10),n}(o,e);if(e){o.css(\"left\",a);var s=o.data(\"fr-arrow\");s||(s=o.find(\".fr-arrow\"),o.data(\"fr-arrow\",s)),s.data(\"margin-left\")||s.data(\"margin-left\",t.helpers.getPX(s.css(\"margin-left\"))),s.css(\"margin-left\",e-a+s.data(\"margin-left\"))}n&&o.css(\"top\",function(e,n,o){var r=e.outerHeight(!0)+.5;if(!t.helpers.isMobile()&&t.$tb&&e.parent().get(0)!=t.$tb.get(0)){var i=e.parent().offset().top,a=n-r-(o||0);e.parent().get(0)==t.$sc.get(0)&&(i-=e.parent().position().top);var s=t.$sc.get(0).clientHeight;i+n+r>t.$sc.offset().top+s&&e.parent().offset().top+a>0&&a>0?a>t.$wp.scrollTop()&&(n=a,e.addClass(\"fr-above\")):e.removeClass(\"fr-above\")}return n}(o,n,r))}function r(n){var o=e(n),r=o.is(\".fr-sticky-on\"),i=o.data(\"sticky-top\"),a=o.data(\"sticky-scheduled\");if(void 0===i){o.data(\"sticky-top\",0);var s=e('<div class=\"fr-sticky-dummy\" style=\"height: '+o.outerHeight()+'px;\"></div>');t.$box.prepend(s)}else t.$box.find(\".fr-sticky-dummy\").css(\"height\",o.outerHeight());if(t.core.hasFocus()||t.$tb.find(\"input:visible:focus\").length>0){var l=t.helpers.scrollTop(),d=Math.min(Math.max(l-t.$tb.parent().offset().top,0),t.$tb.parent().outerHeight()-o.outerHeight());d!=i&&d!=a&&(clearTimeout(o.data(\"sticky-timeout\")),o.data(\"sticky-scheduled\",d),o.outerHeight()<l-t.$tb.parent().offset().top&&o.addClass(\"fr-opacity-0\"),o.data(\"sticky-timeout\",setTimeout((function(){var e=t.helpers.scrollTop(),n=Math.min(Math.max(e-t.$tb.parent().offset().top,0),t.$tb.parent().outerHeight()-o.outerHeight());n>0&&\"BODY\"==t.$tb.parent().get(0).tagName&&(n+=t.$tb.parent().position().top),n!=i&&(o.css(\"top\",Math.max(n,0)),o.data(\"sticky-top\",n),o.data(\"sticky-scheduled\",n)),o.removeClass(\"fr-opacity-0\")}),100))),r||(o.css(\"top\",\"0\"),o.width(t.$tb.parent().width()),o.addClass(\"fr-sticky-on\"),t.$box.addClass(\"fr-sticky-box\"))}else clearTimeout(e(n).css(\"sticky-timeout\")),o.css(\"top\",\"0\"),o.css(\"position\",\"\"),o.width(\"\"),o.data(\"sticky-top\",0),o.removeClass(\"fr-sticky-on\"),t.$box.removeClass(\"fr-sticky-box\")}function i(n){if(n.offsetWidth){var o,r,i=e(n),a=i.outerHeight(),s=i.data(\"sticky-top\"),l=i.data(\"sticky-position\"),d=e(\"body\"==t.opts.scrollableContainer?t.o_win:t.opts.scrollableContainer).outerHeight(),c=0,p=0;\"body\"!==t.opts.scrollableContainer&&(c=t.$sc.offset().top,p=e(t.o_win).outerHeight()-c-d);var f=\"body\"==t.opts.scrollableContainer?t.helpers.scrollTop():c,h=i.is(\".fr-sticky-on\");i.data(\"sticky-parent\")||i.data(\"sticky-parent\",i.parent());var u=i.data(\"sticky-parent\"),g=u.offset().top,m=u.outerHeight();if(i.data(\"sticky-offset\")||void 0!==s?t.$box.find(\".fr-sticky-dummy\").css(\"height\",a+\"px\"):(i.data(\"sticky-offset\",!0),i.after('<div class=\"fr-sticky-dummy\" style=\"height: '+a+'px;\"></div>')),!l){var v=\"auto\"!==i.css(\"top\")||\"auto\"!==i.css(\"bottom\");v||i.css(\"position\",\"fixed\"),l={top:t.node.hasClass(i.get(0),\"fr-top\"),bottom:t.node.hasClass(i.get(0),\"fr-bottom\")},v||i.css(\"position\",\"\"),i.data(\"sticky-position\",l),i.data(\"top\",t.node.hasClass(i.get(0),\"fr-top\")?i.css(\"top\"):\"auto\"),i.data(\"bottom\",t.node.hasClass(i.get(0),\"fr-bottom\")?i.css(\"bottom\"):\"auto\")}o=t.helpers.getPX(i.data(\"top\")),r=t.helpers.getPX(i.data(\"bottom\"));var b=l.top&&g<f+o&&g+m-a>=f+o&&(t.helpers.isInViewPort(t.$sc.get(0))||\"body\"==t.opts.scrollableContainer),E=l.bottom&&g+a<f+d-r&&g+m>f+d-r;b||E?(i.css(\"width\",u.get(0).getBoundingClientRect().width+\"px\"),h||(i.addClass(\"fr-sticky-on\"),i.removeClass(\"fr-sticky-off\"),i.css(\"top\")&&(\"auto\"!=i.data(\"top\")?i.css(\"top\",t.helpers.getPX(i.data(\"top\"))+c):i.data(\"top\",\"auto\")),i.css(\"bottom\")&&(\"auto\"!=i.data(\"bottom\")?i.css(\"bottom\",t.helpers.getPX(i.data(\"bottom\"))+p):i.css(\"bottom\",\"auto\")))):t.node.hasClass(i.get(0),\"fr-sticky-off\")||(i.width(\"\"),i.removeClass(\"fr-sticky-on\"),i.addClass(\"fr-sticky-off\"),i.css(\"top\")&&\"auto\"!=i.data(\"top\")&&l.top&&i.css(\"top\",0),i.css(\"bottom\")&&\"auto\"!=i.data(\"bottom\")&&l.bottom&&i.css(\"bottom\",0))}}function a(){if(t._stickyElements)for(var e=0;e<t._stickyElements.length;e++)i(t._stickyElements[e])}return{_init:function(){!function(){if(t._stickyElements=[],t.helpers.isIOS()){var n=function(){if(t.helpers.requestAnimationFrame()(n),!1!==t.events.trigger(\"position.refresh\"))for(var e=0;e<t._stickyElements.length;e++)r(t._stickyElements[e])};n(),t.events.$on(e(t.o_win),\"scroll\",(function(){if(t.core.hasFocus())for(var n=0;n<t._stickyElements.length;n++){var o=e(t._stickyElements[n]),r=o.parent(),i=t.helpers.scrollTop();o.outerHeight()<i-r.offset().top&&(o.addClass(\"fr-opacity-0\"),o.data(\"sticky-top\",-1),o.data(\"sticky-scheduled\",-1))}}),!0)}else\"body\"!==t.opts.scrollableContainer&&t.events.$on(e(t.opts.scrollableContainer),\"scroll\",a,!0),t.events.$on(e(t.o_win),\"scroll\",a,!0),t.events.$on(e(t.o_win),\"resize\",a,!0),t.events.on(\"initialized\",a),t.events.on(\"focus\",a),t.events.$on(e(t.o_win),\"resize\",\"textarea\",a,!0);t.events.on(\"destroy\",(function(){t._stickyElements=[]}))}()},forSelection:function(e){var r=n();e.css({top:0,left:0});var i=r.top+r.height,a=r.left+r.width/2-e.get(0).offsetWidth/2+t.helpers.scrollLeft();t.opts.iframe||(i+=t.helpers.scrollTop()),o(a,i,e,r.height)},addSticky:function(e){e.addClass(\"fr-sticky\"),t.helpers.isIOS()&&e.addClass(\"fr-sticky-ios\"),e.removeClass(\"fr-sticky\"),t._stickyElements.push(e.get(0))},refresh:a,at:o,getBoundingRect:n}}}(jQuery),function(e){e.FE.MODULES.refresh=function(t){function n(e,t){e.toggleClass(\"fr-disabled\",t).attr(\"aria-disabled\",t)}return{undo:function(e){n(e,!t.undo.canDo())},redo:function(e){n(e,!t.undo.canRedo())},outdent:function(o){if(t.node.hasClass(o.get(0),\"fr-no-refresh\"))return!1;for(var r=t.selection.blocks(),i=0;i<r.length;i++){var a=\"rtl\"==t.opts.direction||\"rtl\"==e(r[i]).css(\"direction\")?\"margin-right\":\"margin-left\";if(\"LI\"==r[i].tagName||\"LI\"==r[i].parentNode.tagName)return n(o,!1),!0;if(t.helpers.getPX(e(r[i]).css(a))>0)return n(o,!1),!0}n(o,!0)},indent:function(e){if(t.node.hasClass(e.get(0),\"fr-no-refresh\"))return!1;for(var o=t.selection.blocks(),r=0;r<o.length;r++){for(var i=o[r].previousSibling;i&&i.nodeType==Node.TEXT_NODE&&0===i.textContent.length;)i=i.previousSibling;if(\"LI\"!=o[r].tagName||i)return n(e,!1),!0;n(e,!0)}}}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{editInPopup:!1}),e.FE.MODULES.textEdit=function(e){function t(){e.events.$on(e.$el,e._mouseup,(function(){setTimeout((function(){var t,n;n=e.popups.get(\"text.edit\"),t=\"INPUT\"===e.$el.prop(\"tagName\")?e.$el.attr(\"placeholder\"):e.$el.text(),n.find(\"input\").val(t).trigger(\"change\"),e.popups.setContainer(\"text.edit\",e.$sc),e.popups.showEl(\"text.edit\",e.$el)}),10)}))}return{_init:function(){var n;e.opts.editInPopup&&(n={edit:`\\n                <div id=\"fr-text-edit-${e.id}\" class=\"fr-layer fr-text-edit-layer\">\\n                    <div class=\"fr-input-line\">\\n                        <input type=\"text\" placeholder=\"${e.language.translate(\"Text\")}\" tabIndex=\"1\">\\n                    </div>\\n                    <div class=\"fr-action-buttons\">\\n                        <button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"updateText\" tabIndex=\"2\">\\n                        ${e.language.translate(\"Update\")}\\n                        </button>\\n                    </div>\\n                </div>\\n            `},e.popups.create(\"text.edit\",n),t())},update:function(){var t=e.popups.get(\"text.edit\").find(\"input\").val();0===t.length&&(t=e.opts.placeholderText),\"INPUT\"===e.$el.prop(\"tagName\")?e.$el.attr(\"placeholder\",t):e.$el.text(t),e.events.trigger(\"contentChanged\"),e.popups.hide(\"text.edit\")}}},e.FE.RegisterCommand(\"updateText\",{focus:!1,undo:!1,callback:function(){this.textEdit.update()}})}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{toolbarBottom:!1,toolbarButtons:null,toolbarButtonsXS:null,toolbarButtonsSM:null,toolbarButtonsMD:null,toolbarContainer:null,toolbarInline:!1,toolbarSticky:!0,toolbarStickyOffset:0,toolbarVisibleWithoutSelection:!1}),e.FE.TOOLBAR_BUTTONS=[\"fullscreen\",\"bold\",\"italic\",\"underline\",\"strikeThrough\",\"subscript\",\"superscript\",\"|\",\"fontFamily\",\"fontSize\",\"color\",\"inlineClass\",\"inlineStyle\",\"paragraphStyle\",\"lineHeight\",\"|\",\"paragraphFormat\",\"align\",\"formatOL\",\"formatUL\",\"outdent\",\"indent\",\"quote\",\"-\",\"insertLink\",\"insertImage\",\"insertVideo\",\"embedly\",\"insertFile\",\"insertTable\",\"|\",\"emoticons\",\"fontAwesome\",\"specialCharacters\",\"insertHR\",\"selectAll\",\"clearFormatting\",\"|\",\"print\",\"getPDF\",\"spellChecker\",\"help\",\"html\",\"|\",\"undo\",\"redo\"],e.FE.TOOLBAR_BUTTONS_MD=null,e.FE.TOOLBAR_BUTTONS_SM=[\"bold\",\"italic\",\"underline\",\"|\",\"fontFamily\",\"fontSize\",\"insertLink\",\"insertImage\",\"table\",\"|\",\"undo\",\"redo\"],e.FE.TOOLBAR_BUTTONS_XS=[\"bold\",\"italic\",\"fontFamily\",\"fontSize\",\"|\",\"undo\",\"redo\"],e.FE.MODULES.toolbar=function(t){var n=[];function o(e,t){for(var n=0;n<t.length;n++)\"-\"!=t[n]&&\"|\"!=t[n]&&e.indexOf(t[n])<0&&e.push(t[n])}function r(){var e=t.helpers.screenSize();return n[e]}function i(){var e=r();t.$tb.find(\".fr-separator\").remove(),t.$tb.find(\"> .fr-command, > div.fr-btn-wrap\").addClass(\"fr-hidden\");for(var n=0;n<e.length;n++)if(\"|\"==e[n]||\"-\"==e[n])t.$tb.append(t.button.buildList([e[n]]));else{var o=t.$tb.find('> .fr-command[data-cmd=\"'+e[n]+'\"], > div.fr-btn-wrap > .fr-command[data-cmd=\"'+e[n]+'\"]'),i=null;t.node.hasClass(o.next().get(0),\"fr-dropdown-menu\")&&(i=o.next()),t.node.hasClass(o.next().get(0),\"fr-options\")&&(o=o.parent()),o.removeClass(\"fr-hidden\").appendTo(t.$tb),i&&i.appendTo(t.$tb)}}function a(n,o){setTimeout((function(){if((!n||n.which!=e.FE.KEYCODE.ESC)&&t.selection.inEditor()&&t.core.hasFocus()&&!t.popups.areVisible()&&(t.opts.toolbarVisibleWithoutSelection||!t.selection.isCollapsed()&&!t.keys.isIME()||o)){if(t.$tb.data(\"instance\",t),!1===t.events.trigger(\"toolbar.show\",[n]))return!1;t.$tb.show(),t.opts.toolbarContainer||t.position.forSelection(t.$tb),t.opts.zIndex>1?t.$tb.css(\"z-index\",t.opts.zIndex+1):t.$tb.css(\"z-index\",null)}}),0)}function s(e){return(!e||\"blur\"!==e.type||document.activeElement!==t.el)&&(!(!e||\"keydown\"!==e.type||!t.keys.ctrlKey(e))||(!!t.button.getButtons(\".fr-dropdown.fr-active\").next().find(t.o_doc.activeElement).length||void(!1!==t.events.trigger(\"toolbar.hide\")&&t.$tb.hide())))}n[e.FE.XS]=t.opts.toolbarButtonsXS||t.opts.toolbarButtons||e.FE.TOOLBAR_BUTTONS_XS||e.FE.TOOLBAR_BUTTONS||[],n[e.FE.SM]=t.opts.toolbarButtonsSM||t.opts.toolbarButtons||e.FE.TOOLBAR_BUTTONS_SM||e.FE.TOOLBAR_BUTTONS||[],n[e.FE.MD]=t.opts.toolbarButtonsMD||t.opts.toolbarButtons||e.FE.TOOLBAR_BUTTONS_MD||e.FE.TOOLBAR_BUTTONS||[],n[e.FE.LG]=t.opts.toolbarButtons||e.FE.TOOLBAR_BUTTONS||[];var l=null;function d(n){clearTimeout(l),n&&n.which==e.FE.KEYCODE.ESC||(l=setTimeout(a,t.opts.typingTimer))}function c(){t.events.on(\"window.mousedown\",s),t.events.on(\"keydown\",s),t.events.on(\"blur\",s),t.helpers.isMobile()||t.events.on(\"window.mouseup\",a),t.helpers.isMobile()?t.helpers.isIOS()||(t.events.on(\"window.touchend\",a),t.browser.mozilla&&setInterval(a,200)):t.events.on(\"window.keyup\",d),t.events.on(\"keydown\",(function(t){t&&t.which==e.FE.KEYCODE.ESC&&s()})),t.events.on(\"keydown\",(function(t){if(t.which==e.FE.KEYCODE.ALT)return t.stopPropagation(),!1}),!0),t.events.$on(t.$wp,\"scroll.toolbar\",a),t.events.$on(t.$sc,\"scroll.toolbar\",a),t.events.on(\"commands.after\",a),t.helpers.isMobile()&&(t.events.$on(t.$doc,\"selectionchange\",d),t.events.$on(t.$doc,\"orientationchange\",a))}function p(){t.$tb.html(\"\").removeData().remove(),t.$vtb=null,t.$tb=null}function f(){t.$box.removeClass(\"fr-top fr-bottom fr-inline fr-basic\"),t.$box.find(\".fr-sticky-dummy\").remove()}function h(){t.opts.theme&&t.$tb.addClass(t.opts.theme+\"-theme\"),t.opts.zIndex>1&&t.$tb.css(\"z-index\",t.opts.zIndex+1),\"auto\"!=t.opts.direction&&t.$tb.removeClass(\"fr-ltr fr-rtl\").addClass(\"fr-\"+t.opts.direction),t.helpers.isMobile()?t.$tb.addClass(\"fr-mobile\"):t.$tb.addClass(\"fr-desktop\"),t.opts.toolbarContainer?(t.opts.toolbarInline&&(c(),s()),t.opts.toolbarBottom?t.$tb.addClass(\"fr-bottom\"):t.$tb.addClass(\"fr-top\")):t.opts.toolbarInline?(t.$sc.append(t.$tb),t.$tb.data(\"container\",t.$sc),t.$tb.addClass(\"fr-inline\"),t.$tb.prepend('<span class=\"fr-arrow\"></span>'),c(),t.opts.toolbarBottom=!1):(t.opts.toolbarBottom&&!t.helpers.isIOS()?(t.$box.append(t.$tb),t.$tb.addClass(\"fr-bottom\"),t.$box.addClass(\"fr-bottom\")):(t.opts.toolbarBottom=!1,t.$box.prepend(t.$tb),t.$tb.addClass(\"fr-top\"),t.$box.addClass(\"fr-top\")),t.$tb.addClass(\"fr-basic\"),t.opts.toolbarSticky&&(t.opts.toolbarStickyOffset&&(t.opts.toolbarBottom?t.$tb.css(\"bottom\",t.opts.toolbarStickyOffset):t.$tb.css(\"top\",t.opts.toolbarStickyOffset)),t.position.addSticky(t.$tb))),function(){var i=e.merge([],r());o(i,n[e.FE.XS]),o(i,n[e.FE.SM]),o(i,n[e.FE.MD]),o(i,n[e.FE.LG]);for(var a=i.length-1;a>=0;a--)\"-\"!=i[a]&&\"|\"!=i[a]&&i.indexOf(i[a])<a&&i.splice(a,1);var s=t.button.buildList(i,r());t.$tb.append(s),t.button.bindCommands(t.$tb)}(),t.events.$on(e(t.o_win),\"resize\",i),t.events.$on(e(t.o_win),\"orientationchange\",i),t.accessibility.registerToolbar(t.$tb),t.events.$on(t.$tb,t._mousedown+\" \"+t._mouseup,(function(e){var n=e.originalEvent?e.originalEvent.target||e.originalEvent.originalTarget:null;if(n&&\"INPUT\"!=n.tagName&&!t.edit.isDisabled())return e.stopPropagation(),e.preventDefault(),!1}),!0)}var u=!1;return{_init:function(){if(t.$sc=e(t.opts.scrollableContainer).first(),!t.$wp)return!1;var n=e(\".document-toolbar-container:first\",t.$el.closest(\".component-backend-document\"));n.length&&(t.$vtb=n),t.opts.toolbarContainer?(t.shared.$tb?(t.$tb=t.shared.$tb,t.opts.toolbarInline&&c()):(t.shared.$tb=e('<div class=\"fr-toolbar\"></div>'),t.$tb=t.shared.$tb,e(t.opts.toolbarContainer).append(t.$tb),h(),t.$tb.data(\"instance\",t)),t.opts.toolbarInline?t.$box.addClass(\"fr-inline\"):t.$box.addClass(\"fr-basic\"),t.events.on(\"focus\",(function(){t.$tb.data(\"instance\",t)}),!0),t.opts.toolbarInline=!1):t.opts.toolbarInline?(t.$box.addClass(\"fr-inline\"),t.shared.$tb?(t.$tb=t.shared.$tb,c()):(t.shared.$tb=e('<div class=\"fr-toolbar\"></div>'),t.$tb=t.shared.$tb,h())):(t.$box.addClass(\"fr-basic\"),t.$tb=e('<div class=\"fr-toolbar\"></div>'),h(),t.$tb.data(\"instance\",t)),t.events.on(\"destroy\",f,!0),t.events.on(t.opts.toolbarInline||t.opts.toolbarContainer?\"shared.destroy\":\"destroy\",p,!0)},hide:s,show:function(){if(!1===t.events.trigger(\"toolbar.show\"))return!1;t.$tb.show()},hasButton:function(e){return r().includes(e)},showInline:a,disable:function(){!u&&t.$tb&&(t.$tb.find(\"> .fr-command, .fr-btn-wrap > .fr-command\").addClass(\"fr-disabled fr-no-refresh\").attr(\"aria-disabled\",!0),u=!0)},enable:function(){u&&t.$tb&&(t.$tb.find(\"> .fr-command, .fr-btn-wrap > .fr-command\").removeClass(\"fr-disabled fr-no-refresh\").attr(\"aria-disabled\",!1),u=!1),t.button.bulkRefresh()}}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{paragraphStyles:{\"fr-text-gray\":\"Gray\",\"fr-text-bordered\":\"Bordered\",\"fr-text-spaced\":\"Spaced\",\"fr-text-uppercase\":\"Uppercase\"},paragraphMultipleStyles:!0}),e.FE.PLUGINS.paragraphStyle=function(t){return{_init:function(){},apply:function(n,o,r){void 0===o&&(o=t.opts.paragraphStyles),void 0===r&&(r=t.opts.paragraphMultipleStyles);var i=\"\";r||((i=Object.keys(o)).splice(i.indexOf(n),1),i=i.join(\" \")),t.selection.save(),t.html.wrap(!0,!0,!0,!0),t.selection.restore();var a=t.selection.blocks();t.selection.save();for(var s=e(a[0]).hasClass(n),l=0;l<a.length;l++)e(a[l]).removeClass(i).toggleClass(n,!s),e(a[l]).hasClass(\"fr-temp-div\")&&e(a[l]).removeClass(\"fr-temp-div\"),\"\"===e(a[l]).attr(\"class\")&&e(a[l]).removeAttr(\"class\");t.html.unwrap(),t.selection.restore()},refreshOnShow:function(n,o){var r=t.selection.blocks();if(r.length){var i=e(r[0]);o.find(\".fr-command\").each((function(){var t=e(this).data(\"param1\"),n=i.hasClass(t);e(this).toggleClass(\"fr-active\",n).attr(\"aria-selected\",n)}))}}}},e.FE.RegisterCommand(\"paragraphStyle\",{type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.paragraphStyles;for(var n in t)t.hasOwnProperty(n)&&(e+='<li role=\"presentation\"><a class=\"fr-command '+n+'\" tabIndex=\"-1\" role=\"option\" data-cmd=\"paragraphStyle\" data-param1=\"'+n+'\" title=\"'+this.language.translate(t[n])+'\">'+this.language.translate(t[n])+\"</a></li>\");return e+=\"</ul>\"},title:\"Paragraph Style\",callback:function(e,t){this.paragraphStyle.apply(t)},refreshOnShow:function(e,t){this.paragraphStyle.refreshOnShow(e,t)},plugin:\"paragraphStyle\"}),e.FE.DefineIcon(\"paragraphStyle\",{NAME:\"magic\"})}(jQuery),function(e){e.FE.PLUGINS.fullscreen=function(t){var n,o,r,i,a;function s(){return t.$box.hasClass(\"fr-fullscreen\")}function l(){if(t.helpers.isIOS()&&t.core.hasFocus())return t.$el.blur(),setTimeout(c,250),!1;n=t.helpers.scrollTop(),t.$box.toggleClass(\"fr-fullscreen\"),e(\"body:first\").toggleClass(\"fr-fullscreen\"),o=e('<div style=\"display: none;\"></div>'),t.$box.after(o),t.helpers.isMobile()&&(t.$tb.data(\"parent\",t.$tb.parent()),t.$tb.prependTo(t.$box),t.$tb.data(\"sticky-dummy\")&&t.$tb.after(t.$tb.data(\"sticky-dummy\"))),r=t.opts.height,i=t.opts.heightMax,a=t.opts.zIndex,t.position.refresh(),t.opts.height=t.o_win.innerHeight-(t.opts.toolbarInline?0:t.$tb.outerHeight()),t.opts.zIndex=9990,t.opts.heightMax=null,t.size.refresh(),t.opts.toolbarInline&&t.toolbar.showInline(),t.events.trigger(\"charCounter.update\"),t.events.trigger(\"codeView.update\"),t.$win.trigger(\"scroll\")}function d(){if(t.helpers.isIOS()&&t.core.hasFocus())return t.$el.blur(),setTimeout(c,250),!1;t.$box.toggleClass(\"fr-fullscreen\"),e(\"body:first\").toggleClass(\"fr-fullscreen\"),t.$tb.prependTo(t.$tb.data(\"parent\")),t.$tb.data(\"sticky-dummy\")&&t.$tb.after(t.$tb.data(\"sticky-dummy\")),t.opts.height=r,t.opts.heightMax=i,t.opts.zIndex=a,t.size.refresh(),e(t.o_win).scrollTop(n),t.opts.toolbarInline&&t.toolbar.showInline(),t.events.trigger(\"charCounter.update\"),t.opts.toolbarSticky&&t.opts.toolbarStickyOffset&&(t.opts.toolbarBottom?t.$tb.css(\"bottom\",t.opts.toolbarStickyOffset).data(\"bottom\",t.opts.toolbarStickyOffset):t.$tb.css(\"top\",t.opts.toolbarStickyOffset).data(\"top\",t.opts.toolbarStickyOffset)),t.$win.trigger(\"scroll\")}function c(){s()?d():l(),p(t.$tb.find('.fr-command[data-cmd=\"fullscreen\"]')),e(window).trigger(\"oc.updateUi\")}function p(e){var n=s();e.toggleClass(\"fr-active\",n).attr(\"aria-pressed\",n),e.find(\"> *:not(.fr-sr-only)\").replaceWith(n?t.icon.create(\"fullscreenCompress\"):t.icon.create(\"fullscreen\"))}return{_init:function(){if(!t.$wp)return!1;t.events.$on(e(t.o_win),\"resize\",(function(){s()&&(d(),l())})),t.events.on(\"toolbar.hide\",(function(){if(s()&&t.helpers.isMobile())return!1})),t.events.on(\"position.refresh\",(function(){if(t.helpers.isIOS())return!s()})),t.events.on(\"destroy\",(function(){s()&&d()}),!0)},toggle:c,refresh:p,isActive:s}},e.FE.RegisterCommand(\"fullscreen\",{title:\"Fullscreen\",undo:!1,focus:!1,accessibilityFocus:!0,forcedRefresh:!0,toggle:!0,callback:function(){this.fullscreen.toggle()},refresh:function(e){this.fullscreen.refresh(e)},plugin:\"fullscreen\"}),e.FE.DefineIcon(\"fullscreen\",{NAME:\"expand\"}),e.FE.DefineIcon(\"fullscreenCompress\",{NAME:\"compress\"})}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{aceEditor:!0,aceEditorVendorPath:\"/\",aceEditorOptions:{showLineNumbers:!0,useSoftTabs:!1,wrap:!0,mode:\"ace/mode/html\",tabSize:2},codeBeautifierOptions:{end_with_newline:!0,indent_inner_html:!0,extra_liners:[\"p\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"pre\",\"ul\",\"ol\",\"table\",\"dl\"],brace_style:\"expand\",indent_char:\"\\t\",indent_size:1,wrap_line_length:0},codeViewKeepActiveButtons:[\"fullscreen\"]}),e.FE.PLUGINS.codeView=function(t){var n,o;function r(){return!!t.$box.hasClass(\"fr-code-view\")||!!t.$box.closest(\".component-backend-richeditor-document-connector\").hasClass(\"code-editing-mode\")}function i(){return o?o.getValue():n.val()}function a(){r()&&o&&o.resize()}var s,l=!1;function d(){r()&&t.events.trigger(\"blur\")}function c(){r()&&l&&t.events.trigger(\"focus\")}function p(p){n||(!function(){n=e('<textarea class=\"fr-code\" tabIndex=\"-1\">'),t.$wp.append(n),n.attr(\"dir\",t.opts.direction),t.$box.hasClass(\"fr-basic\")||(s=e('<a data-cmd=\"html\" title=\"Code View\" class=\"fr-command fr-btn html-switch'+(t.helpers.isMobile()?\"\":\" fr-desktop\")+'\" role=\"button\" tabIndex=\"-1\"><i class=\"fa fa-code\"></i></button>'),t.$box.append(s),t.events.bindClick(t.$box,\"a.html-switch\",(function(){t.events.trigger(\"commands.before\",[\"html\"]),f(!1),t.events.trigger(\"commands.after\",[\"html\"])})));var o=function(){return!r()};t.events.on(\"buttons.refresh\",o),t.events.on(\"copy\",o,!0),t.events.on(\"cut\",o,!0),t.events.on(\"paste\",o,!0),t.events.on(\"destroy\",h,!0),t.events.on(\"html.set\",(function(){r()&&f(!0)})),t.events.on(\"codeView.update\",a),t.events.on(\"form.submit\",(function(){r()&&(t.html.set(i()),t.events.trigger(\"contentChanged\",[],!0))}),!0)}(),!o&&t.opts.aceEditor&&\"undefined\"!=typeof ace?(o=ace.edit(n.get(0)),ace.require(\"ace/config\").set(\"basePath\",t.opts.aceEditorVendorPath),o.setOptions(t.opts.aceEditorOptions),o.on(\"blur\",d),o.on(\"focus\",c)):(t.events.$on(n,\"keydown keyup change input\",(function(){t.opts.height?this.removeAttribute(\"rows\"):(this.rows=1,0===this.value.length?this.style.height=\"auto\":this.style.height=this.scrollHeight+\"px\")})),t.events.$on(n,\"blur\",d),t.events.$on(n,\"focus\",c))),t.undo.saveStep(),t.html.cleanEmptyTags(),t.html.cleanWhiteTags(!0),t.core.hasFocus()&&(t.core.isEmpty()||(t.selection.save(),t.$el.find('.fr-marker[data-type=\"true\"]:first').replaceWith('<span class=\"fr-tmp fr-sm\">F</span>'),t.$el.find('.fr-marker[data-type=\"false\"]:last').replaceWith('<span class=\"fr-tmp fr-em\">F</span>')));var u=t.html.get(!1,!0);t.$el.find(\"span.fr-tmp\").remove(),t.$box.toggleClass(\"fr-code-view\",!0);var g,m,v=!1;if(t.core.hasFocus()&&(v=!0,t.events.disableBlur(),t.$el.blur()),u=(u=u.replace(/<span class=\"fr-tmp fr-sm\">F<\\/span>/,\"FROALA-SM\")).replace(/<span class=\"fr-tmp fr-em\">F<\\/span>/,\"FROALA-EM\"),t.codeBeautifier&&(u=t.codeBeautifier.run(u,t.opts.codeBeautifierOptions)),o){(g=u.indexOf(\"FROALA-SM\"))>(m=u.indexOf(\"FROALA-EM\"))?g=m:m-=9;var b=(u=u.replace(/FROALA-SM/g,\"\").replace(/FROALA-EM/g,\"\")).substring(0,g).length-u.substring(0,g).replace(/\\n/g,\"\").length,E=u.substring(0,m).length-u.substring(0,m).replace(/\\n/g,\"\").length;g=u.substring(0,g).length-u.substring(0,u.substring(0,g).lastIndexOf(\"\\n\")+1).length,m=u.substring(0,m).length-u.substring(0,u.substring(0,m).lastIndexOf(\"\\n\")+1).length,o.$blockScrolling=1/0,o.getSession().setValue(u),l=!v,o.focus(),l=!0,o.selection.moveCursorToPosition({row:b,column:g}),o.selection.selectToPosition({row:E,column:m}),o.resize(),o.session.getUndoManager().reset()}else{g=u.indexOf(\"FROALA-SM\"),m=u.indexOf(\"FROALA-EM\")-9,t.opts.heightMin&&n.css(\"min-height\",t.opts.heightMin),t.opts.height&&n.css(\"height\",t.opts.height),t.opts.heightMax&&n.css(\"max-height\",t.opts.height||t.opts.heightMax),n.val(u.replace(/FROALA-SM/g,\"\").replace(/FROALA-EM/g,\"\")).trigger(\"change\");var y=e(t.o_doc).scrollTop();l=!v,n.focus(),l=!0,n.get(0).setSelectionRange(g,m),e(t.o_doc).scrollTop(y)}t.$tb.find(\" > .fr-command, > .fr-btn-wrap > .fr-command\").not(p).filter((function(){return t.opts.codeViewKeepActiveButtons.indexOf(e(this).data(\"cmd\"))<0})).addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),p.addClass(\"fr-active\").attr(\"aria-pressed\",!0),!t.helpers.isMobile()&&t.opts.toolbarInline&&t.toolbar.hide()}function f(e){void 0===e&&(e=!r());var n=t.$tb.find('.fr-command[data-cmd=\"html\"]');e?(t.popups.hideAll(),p(n)):(t.$box.toggleClass(\"fr-code-view\",!1),function(e){var n=i();t.html.set(n),t.$el.blur(),t.$tb.find(\" > .fr-command, > .fr-btn-wrap > .fr-command\").not(e).removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1),e.removeClass(\"fr-active\").attr(\"aria-pressed\",!1),t.events.focus(!0),t.placeholder.refresh(),t.undo.saveStep()}(n))}function h(){r()&&f(!1),n.val(\"\").removeData().remove(),n=null,s&&(s.remove(),s=null)}return{_init:function(){if(t.events.on(\"focus\",(function(){var n;t.opts.toolbarContainer&&(n=t.$tb.find('.fr-command[data-cmd=\"html\"]'),r()?(t.$tb.find(\" > .fr-command\").not(n).filter((function(){return t.opts.codeViewKeepActiveButtons.indexOf(e(this).data(\"cmd\"))<0})).addClass(\"fr-disabled\").attr(\"aria-disabled\",!1),n.addClass(\"fr-active\").attr(\"aria-pressed\",!1)):(t.$tb.find(\" > .fr-command\").not(n).removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1),n.removeClass(\"fr-active\").attr(\"aria-pressed\",!1)))})),!t.$wp)return!1},toggle:f,isActive:r,get:i}},e.FE.RegisterCommand(\"html\",{title:\"Code View\",undo:!1,focus:!1,forcedRefresh:!0,toggle:!0,callback:function(){this.codeView.toggle()},plugin:\"codeView\"}),e.FE.DefineIcon(\"html\",{NAME:\"code\"})}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{paragraphFormat:{N:\"Normal\",H1:\"Heading 1\",H2:\"Heading 2\",H3:\"Heading 3\",H4:\"Heading 4\",PRE:\"Code\"},paragraphFormatSelection:!1,paragraphDefaultSelection:\"Paragraph Format\"}),e.FE.PLUGINS.paragraphFormat=function(t){function n(n,o){var r=t.html.defaultTag();if(o&&o.toLowerCase()!=r)if(n.find(\"ul, ol\").length>0){var i=e(\"<\"+o+\">\");n.prepend(i);for(var a=t.node.contents(n.get(0))[0];a&&[\"UL\",\"OL\"].indexOf(a.tagName)<0;){var s=a.nextSibling;i.append(a),a=s}}else n.html(\"<\"+o+\">\"+n.html()+\"</\"+o+\">\")}function o(n,o){var r=t.html.defaultTag();o&&o.toLowerCase()!=r||(o='div class=\"fr-temp-div\"'),n.replaceWith(e(\"<\"+o+\">\").html(n.html()))}function r(n,o){var r=t.html.defaultTag();o||(o='div class=\"fr-temp-div\"'+(t.node.isEmpty(n.get(0),!0)?' data-empty=\"true\"':\"\")),o.toLowerCase()==r?(t.node.isEmpty(n.get(0),!0)||n.append(\"<br/>\"),n.replaceWith(n.html())):n.replaceWith(e(\"<\"+o+\">\").html(n.html()))}function i(n,o){o||(o='div class=\"fr-temp-div\"'+(t.node.isEmpty(n.get(0),!0)?' data-empty=\"true\"':\"\")),n.replaceWith(e(\"<\"+o+\" \"+t.node.attributes(n.get(0))+\">\").html(n.html()).removeAttr(\"data-empty\"))}return{apply:function(a){\"N\"==a&&(a=t.html.defaultTag()),t.selection.save(),t.html.wrap(!0,!0,!t.opts.paragraphFormat.BLOCKQUOTE,!0,!0),t.selection.restore();var s=t.selection.blocks();t.selection.save(),t.$el.find(\"pre\").attr(\"skip\",!0);for(var l=0;l<s.length;l++)if(s[l].tagName!=a&&!t.node.isList(s[l])){var d=e(s[l]);\"LI\"==s[l].tagName?n(d,a):\"LI\"==s[l].parentNode.tagName&&s[l]?o(d,a):[\"TD\",\"TH\"].indexOf(s[l].parentNode.tagName)>=0?r(d,a):i(d,a)}t.$el.find('pre:not([skip=\"true\"]) + pre:not([skip=\"true\"])').each((function(){e(this).prev().append(\"<br>\"+e(this).html()),e(this).remove()})),t.$el.find(\"pre\").removeAttr(\"skip\"),t.html.unwrap(),t.selection.restore()},refreshOnShow:function(e,n){var o=t.selection.blocks();if(o.length){var r=o[0],i=\"N\",a=t.html.defaultTag();r.tagName.toLowerCase()!=a&&r!=t.el&&(i=r.tagName),n.find('.fr-command[data-param1=\"'+i+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}else n.find('.fr-command[data-param1=\"N\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)},refresh:function(e){if(t.opts.paragraphFormatSelection){var n=t.selection.blocks();if(n.length){var o=n[0],r=\"N\",i=t.html.defaultTag();o.tagName.toLowerCase()!=i&&o!=t.el&&(r=o.tagName),[\"LI\",\"TD\",\"TH\"].indexOf(r)>=0&&(r=\"N\"),e.find(\"> span\").text(t.language.translate(t.opts.paragraphFormat[r]))}else e.find(\"> span\").text(t.language.translate(t.opts.paragraphFormat.N))}}}},e.FE.RegisterCommand(\"paragraphFormat\",{type:\"dropdown\",displaySelection:function(e){return e.opts.paragraphFormatSelection},defaultSelection:function(e){return e.language.translate(e.opts.paragraphDefaultSelection)},displaySelectionWidth:125,html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.paragraphFormat;for(var n in t)if(t.hasOwnProperty(n)){var o=this.shortcuts.get(\"paragraphFormat.\"+n);o=o?'<span class=\"fr-shortcut\">'+o+\"</span>\":\"\",e+='<li role=\"presentation\"><'+(\"N\"==n?this.html.defaultTag()||\"DIV\":n)+' style=\"padding: 0 !important; margin: 0 !important;\" role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"paragraphFormat\" data-param1=\"'+n+'\" title=\"'+this.language.translate(t[n])+'\">'+this.language.translate(t[n])+\"</a></\"+(\"N\"==n?this.html.defaultTag()||\"DIV\":n)+\"></li>\"}return e+=\"</ul>\"},title:\"Paragraph Format\",callback:function(e,t){this.paragraphFormat.apply(t)},refresh:function(e){this.paragraphFormat.refresh(e)},refreshOnShow:function(e,t){this.paragraphFormat.refreshOnShow(e,t)},plugin:\"paragraphFormat\"}),e.FE.DefineIcon(\"paragraphFormat\",{NAME:\"paragraph\"})}(jQuery),function(e){e.FE.PLUGINS.align=function(t){return{apply:function(n){var o=t.selection.element();if(e(o).parents(\".fr-img-caption\").length)e(o).css(\"text-align\",n);else{t.selection.save(),t.html.wrap(!0,!0,!0,!0),t.selection.restore();for(var r=t.selection.blocks(),i=0;i<r.length;i++)e(r[i]).css(\"text-align\",n).removeClass(\"fr-temp-div\"),\"\"===e(r[i]).attr(\"class\")&&e(r[i]).removeAttr(\"class\"),\"\"===e(r[i]).attr(\"style\")&&e(r[i]).removeAttr(\"style\");t.selection.save(),t.html.unwrap(),t.selection.restore()}},refresh:function(n){var o=t.selection.blocks();if(o.length){var r=t.helpers.getAlignment(e(o[0]));n.find(\"> *:first\").replaceWith(t.icon.create(\"align-\"+r))}},refreshOnShow:function(n,o){var r=t.selection.blocks();if(r.length){var i=t.helpers.getAlignment(e(r[0]));o.find('a.fr-command[data-param1=\"'+i+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}},refreshForToolbar:function(n){var o=t.selection.blocks();if(o.length){var r=t.helpers.getAlignment(e(o[0]));\"align\"+(r=r.charAt(0).toUpperCase()+r.slice(1))==n.attr(\"data-cmd\")&&n.addClass(\"fr-active\")}}}},e.FE.DefineIcon(\"align\",{NAME:\"align-left\"}),e.FE.DefineIcon(\"align-left\",{NAME:\"align-left\"}),e.FE.DefineIcon(\"align-right\",{NAME:\"align-right\"}),e.FE.DefineIcon(\"align-center\",{NAME:\"align-center\"}),e.FE.DefineIcon(\"align-justify\",{NAME:\"align-justify\"}),e.FE.RegisterCommand(\"align\",{type:\"dropdown\",title:\"Align\",options:{left:\"Align Left\",center:\"Align Center\",right:\"Align Right\",justify:\"Align Justify\"},html:function(){var t='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=e.FE.COMMANDS.align.options;for(var o in n)n.hasOwnProperty(o)&&(t+='<li role=\"presentation\"><a class=\"fr-command fr-title\" tabIndex=\"-1\" role=\"option\" data-cmd=\"align\" data-param1=\"'+o+'\" title=\"'+this.language.translate(n[o])+'\">'+this.icon.create(\"align-\"+o)+'<span class=\"fr-sr-only\">'+this.language.translate(n[o])+\"</span></a></li>\");return t+=\"</ul>\"},callback:function(e,t){this.align.apply(t)},refresh:function(e){this.align.refresh(e)},refreshOnShow:function(e,t){this.align.refreshOnShow(e,t)},plugin:\"align\"}),e.FE.RegisterCommand(\"alignLeft\",{type:\"button\",icon:\"align-left\",callback:function(){this.align.apply(\"left\")},refresh:function(e){this.align.refreshForToolbar(e)}}),e.FE.RegisterCommand(\"alignRight\",{type:\"button\",icon:\"align-right\",callback:function(){this.align.apply(\"right\")},refresh:function(e){this.align.refreshForToolbar(e)}}),e.FE.RegisterCommand(\"alignCenter\",{type:\"button\",icon:\"align-center\",callback:function(){this.align.apply(\"center\")},refresh:function(e){this.align.refreshForToolbar(e)}}),e.FE.RegisterCommand(\"alignJustify\",{type:\"button\",icon:\"align-justify\",callback:function(){this.align.apply(\"justify\")},refresh:function(e){this.align.refreshForToolbar(e)}})}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{listAdvancedTypes:!0}),e.FE.PLUGINS.lists=function(t){function n(e){return'<span class=\"fr-open-'+e.toLowerCase()+'\"></span>'}function o(e){return'<span class=\"fr-close-'+e.toLowerCase()+'\"></span>'}function r(n,o){!function(n,o){for(var r=[],i=0;i<n.length;i++){var a=n[i].parentNode;\"LI\"==n[i].tagName&&a.tagName!=o&&r.indexOf(a)<0&&r.push(a)}for(i=r.length-1;i>=0;i--){var s=e(r[i]);s.replaceWith(\"<\"+o.toLowerCase()+\" \"+t.node.attributes(s.get(0))+\">\"+s.html()+\"</\"+o.toLowerCase()+\">\")}}(n,o);var r,i=t.html.defaultTag(),a=null;n.length&&(r=\"rtl\"==t.opts.direction||\"rtl\"==e(n[0]).css(\"direction\")?\"margin-right\":\"margin-left\");for(var s=0;s<n.length;s++)if(\"TD\"!=n[s].tagName&&\"TH\"!=n[s].tagName&&\"LI\"!=n[s].tagName){var l=t.helpers.getPX(e(n[s]).css(r))||0;n[s].style.marginLeft=null,null===a&&(a=l);var d=a>0?\"<\"+o+' style=\"'+r+\": \"+a+'px;\">':\"<\"+o+\">\",c=\"</\"+o+\">\";for(l-=a;l/t.opts.indentMargin>0;)d+=\"<\"+o+\">\",c+=c,l-=t.opts.indentMargin;i&&n[s].tagName.toLowerCase()==i?e(n[s]).replaceWith(d+\"<li\"+t.node.attributes(n[s])+\">\"+e(n[s]).html()+\"</li>\"+c):e(n[s]).wrap(d+\"<li></li>\"+c)}t.clean.lists()}function i(r){var i,a;for(i=r.length-1;i>=0;i--)for(a=i-1;a>=0;a--)if(e(r[a]).find(r[i]).length||r[a]==r[i]){r.splice(i,1);break}var s=[];for(i=0;i<r.length;i++){var l=e(r[i]),d=r[i].parentNode,c=l.attr(\"class\");if(l.before(o(d.tagName)),\"LI\"==d.parentNode.tagName)l.before(o(\"LI\")),l.after(n(\"LI\"));else{var p=\"\";c&&(p+=' class=\"'+c+'\"');var f=\"rtl\"==t.opts.direction||\"rtl\"==l.css(\"direction\")?\"margin-right\":\"margin-left\";t.helpers.getPX(e(d).css(f))&&(e(d).attr(\"style\")||\"\").indexOf(f+\":\")>=0&&(p+=' style=\"'+f+\":\"+t.helpers.getPX(e(d).css(f))+'px;\"'),t.html.defaultTag()&&0===l.find(t.html.blockTagsQuery()).length&&l.wrapInner(\"<\"+t.html.defaultTag()+p+\"></\"+t.html.defaultTag()+\">\"),t.node.isEmpty(l.get(0),!0)||0!==l.find(t.html.blockTagsQuery()).length||l.append(\"<br>\"),l.append(n(\"LI\")),l.prepend(o(\"LI\"))}l.after(n(d.tagName)),\"LI\"==d.parentNode.tagName&&(d=d.parentNode.parentNode),s.indexOf(d)<0&&s.push(d)}for(i=0;i<s.length;i++){var h=e(s[i]),u=h.html();u=(u=u.replace(/<span class=\"fr-close-([a-z]*)\"><\\/span>/g,\"</$1>\")).replace(/<span class=\"fr-open-([a-z]*)\"><\\/span>/g,\"<$1>\"),h.replaceWith(t.node.openTagString(h.get(0))+u+t.node.closeTagString(h.get(0)))}t.$el.find(\"li:empty\").remove(),t.$el.find(\"ul:empty, ol:empty\").remove(),t.clean.lists(),t.html.wrap()}function a(n){t.selection.save();for(var o=0;o<n.length;o++){var r=n[o].previousSibling;if(r){var i=e(n[o]).find(\"> ul, > ol\").last().get(0);if(i){for(var a=e(\"<li>\").prependTo(e(i)),s=t.node.contents(n[o])[0];s&&!t.node.isList(s);){var l=s.nextSibling;a.append(s),s=l}e(r).append(e(i)),e(n[o]).remove()}else{var d=e(r).find(\"> ul, > ol\").last().get(0);if(d)e(d).append(e(n[o]));else{var c=e(\"<\"+n[o].parentNode.tagName+\">\");e(r).append(c),c.append(e(n[o]))}}}}t.clean.lists(),t.selection.restore()}function s(e){t.selection.save(),i(e),t.selection.restore()}function l(e){if(\"indent\"==e||\"outdent\"==e){for(var n=!1,o=t.selection.blocks(),r=[],i=0;i<o.length;i++)\"LI\"==o[i].tagName?(n=!0,r.push(o[i])):\"LI\"==o[i].parentNode.tagName&&(n=!0,r.push(o[i].parentNode));n&&(\"indent\"==e?a(r):s(r))}}return{_init:function(){t.events.on(\"commands.after\",l),t.events.on(\"keydown\",(function(n){if(n.which==e.FE.KEYCODE.TAB){for(var o=t.selection.blocks(),r=[],i=0;i<o.length;i++)\"LI\"==o[i].tagName?r.push(o[i]):\"LI\"==o[i].parentNode.tagName&&r.push(o[i].parentNode);if(r.length>1||r.length&&(t.selection.info(r[0]).atStart||t.node.isEmpty(r[0])))return n.preventDefault(),n.stopPropagation(),n.shiftKey?s(r):a(r),!1}}),!0)},format:function(n,o){var a,s;for(t.selection.save(),t.html.wrap(!0,!0,!0,!0),t.selection.restore(),s=t.selection.blocks(),a=0;a<s.length;a++)\"LI\"!=s[a].tagName&&\"LI\"==s[a].parentNode.tagName&&(s[a]=s[a].parentNode);if(t.selection.save(),!function(e,t){for(var n=!0,o=0;o<e.length;o++){if(\"LI\"!=e[o].tagName)return!1;e[o].parentNode.tagName!=t&&(n=!1)}return n}(s,n)?r(s,n):o||i(s),t.html.unwrap(),t.selection.restore(),o=o||\"default\"){for(s=t.selection.blocks(),a=0;a<s.length;a++)\"LI\"!=s[a].tagName&&\"LI\"==s[a].parentNode.tagName&&(s[a]=s[a].parentNode);for(a=0;a<s.length;a++)\"LI\"==s[a].tagName&&(e(s[a].parentNode).css(\"list-style-type\",\"default\"===o?\"\":o),0===(e(s[a].parentNode).attr(\"style\")||\"\").length&&e(s[a].parentNode).removeAttr(\"style\"))}},refresh:function(n,o){var r=e(t.selection.element());if(r.get(0)!=t.el){var i=r.get(0);(i=\"LI\"!=i.tagName&&i.firstElementChild&&\"LI\"!=i.firstElementChild.tagName?r.parents(\"li\").get(0):\"LI\"==i.tagName||i.firstElementChild?i.firstElementChild&&\"LI\"==i.firstElementChild.tagName?r.get(0).firstChild:r.get(0):r.parents(\"li\").get(0))&&i.parentNode.tagName==o&&t.el.contains(i.parentNode)&&n.addClass(\"fr-active\")}}}},e.FE.RegisterCommand(\"formatUL\",{title:\"Unordered List\",type:\"button\",hasOptions:function(){return this.opts.listAdvancedTypes},options:{default:\"Default\",circle:\"Circle\",disc:\"Disc\",square:\"Square\"},refresh:function(e){this.lists.refresh(e,\"UL\")},callback:function(e,t){this.lists.format(\"UL\",t)},plugin:\"lists\"}),e.FE.RegisterCommand(\"formatOL\",{title:\"Ordered List\",hasOptions:function(){return this.opts.listAdvancedTypes},options:{default:\"Default\",\"lower-alpha\":\"Lower Alpha\",\"lower-greek\":\"Lower Greek\",\"lower-roman\":\"Lower Roman\",\"upper-alpha\":\"Upper Alpha\",\"upper-roman\":\"Upper Roman\"},refresh:function(e){this.lists.refresh(e,\"OL\")},callback:function(e,t){this.lists.format(\"OL\",t)},plugin:\"lists\"}),e.FE.DefineIcon(\"formatUL\",{NAME:\"list-ul\"}),e.FE.DefineIcon(\"formatOL\",{NAME:\"list-ol\"})}(jQuery),function(e){e.extend(e.FE.POPUP_TEMPLATES,{\"file.insert\":\"[_BUTTONS_][_UPLOAD_LAYER_][_BY_URL_LAYER_][_PROGRESS_BAR_]\"}),e.extend(e.FE.DEFAULTS,{fileUploadURL:\"http://i.froala.com/upload\",fileUploadParam:\"file\",fileUploadParams:{},fileUploadToS3:!1,fileUploadMethod:\"POST\",fileMaxSize:10485760,fileAllowedTypes:[\"*\"],fileInsertButtons:[\"fileBack\",\"|\",\"fileUpload\",\"fileByURL\"],fileUseSelectedText:!1}),e.FE.PLUGINS.file=function(t){var n,o={};function r(){var e=t.popups.get(\"file.insert\");e||(e=g()),e.find(\".fr-layer.fr-active\").removeClass(\"fr-active\").addClass(\"fr-pactive\"),e.find(\".fr-file-progress-bar-layer\").addClass(\"fr-active\"),e.find(\".fr-buttons\").hide(),a(\"Uploading\",0)}function i(e){var n=t.popups.get(\"file.insert\");n&&(n.find(\".fr-layer.fr-pactive\").addClass(\"fr-active\").removeClass(\"fr-pactive\"),n.find(\".fr-file-progress-bar-layer\").removeClass(\"fr-active\"),n.find(\".fr-buttons\").show(),e&&(t.events.focus(),t.popups.hide(\"file.insert\")))}function a(e,n){var o=t.popups.get(\"file.insert\");if(o){var r=o.find(\".fr-file-progress-bar-layer\");r.find(\"h3\").text(e+(n?\" \"+n+\"%\":\"\")),r.removeClass(\"fr-error\"),n?(r.find(\"div\").removeClass(\"fr-indeterminate\"),r.find(\"div > span\").css(\"width\",n+\"%\")):r.find(\"div\").addClass(\"fr-indeterminate\")}}function s(e,n,o){t.edit.on(),t.events.focus(!0),t.selection.restore(),t.opts.fileUseSelectedText&&t.selection.text().length&&(n=t.selection.text()),t.html.insert('<a href=\"'+e+'\" id=\"fr-inserted-file\" class=\"fr-file\">'+n+\"</a>\");var r=t.$el.find(\"#fr-inserted-file\");r.removeAttr(\"id\"),t.popups.hide(\"file.insert\"),t.undo.saveStep(),b(),t.events.trigger(\"file.inserted\",[r,o])}function l(n){var o=this.status,r=this.response,i=this.responseXML,a=this.responseText;try{if(t.opts.fileUploadToS3)if(201==o){var l=function(n){try{var o=e(n).find(\"Location\").text(),r=e(n).find(\"Key\").text();return!1===t.events.trigger(\"file.uploadedToS3\",[o,r,n],!0)?(t.edit.on(),!1):o}catch(e){return p(4,n),!1}}(i);l&&s(l,n,r||i)}else p(4,r||i);else if(o>=200&&o<300){var d=function(n){try{if(!1===t.events.trigger(\"file.uploaded\",[n],!0))return t.edit.on(),!1;var o=e.parseJSON(n);return o.link?o:(p(2,n),!1)}catch(e){return p(4,n),!1}}(a);d&&s(d.link,n,r||a)}else p(3,r||a)}catch(e){p(4,r||a)}}function d(){p(4,this.response||this.responseText||this.responseXML)}function c(e){e.lengthComputable&&a(\"Uploading\",e.loaded/e.total*100|0)}function p(e,n){t.edit.on(),function(e){r();var n=t.popups.get(\"file.insert\").find(\".fr-file-progress-bar-layer\");n.addClass(\"fr-error\");var o=n.find(\"h3\");o.text(e),t.events.disableBlur(),o.focus()}(t.language.translate(\"Something went wrong. Please try again.\")),t.events.trigger(\"file.error\",[{code:e,message:o[e]},n])}function f(){t.edit.on(),i(!0)}function h(e){if(void 0!==e&&e.length>0){if(!1===t.events.trigger(\"file.beforeUpload\",[e]))return!1;var n,o=e[0];if(o.size>t.opts.fileMaxSize)return p(5),!1;if(t.opts.fileAllowedTypes.indexOf(\"*\")<0&&t.opts.fileAllowedTypes.indexOf(o.type.replace(/file\\//g,\"\"))<0)return p(6),!1;if(t.drag_support.formdata&&(n=t.drag_support.formdata?new FormData:null),n){var i;if(!1!==t.opts.fileUploadToS3)for(i in n.append(\"key\",t.opts.fileUploadToS3.keyStart+(new Date).getTime()+\"-\"+(o.name||\"untitled\")),n.append(\"success_action_status\",\"201\"),n.append(\"X-Requested-With\",\"xhr\"),n.append(\"Content-Type\",o.type),t.opts.fileUploadToS3.params)t.opts.fileUploadToS3.params.hasOwnProperty(i)&&n.append(i,t.opts.fileUploadToS3.params[i]);for(i in t.opts.fileUploadParams)t.opts.fileUploadParams.hasOwnProperty(i)&&n.append(i,t.opts.fileUploadParams[i]);n.append(t.opts.fileUploadParam,o);var a=t.opts.fileUploadURL;t.opts.fileUploadToS3&&(a=t.opts.fileUploadToS3.uploadURL?t.opts.fileUploadToS3.uploadURL:\"https://\"+t.opts.fileUploadToS3.region+\".amazonaws.com/\"+t.opts.fileUploadToS3.bucket);var s=t.core.getXHR(a,t.opts.fileUploadMethod);s.onload=function(){l.call(s,o.name)},s.onerror=d,s.upload.onprogress=c,s.onabort=f,r(),t.edit.off();var h=t.popups.get(\"file.insert\");h&&h.off(\"abortUpload\").on(\"abortUpload\",(function(){4!=s.readyState&&s.abort()})),s.send(n)}}}function u(){i()}function g(n){if(n)return t.popups.onHide(\"file.insert\",u),!0;var o,r=\"\";t.opts.fileInsertButtons.length>1&&(r='<div class=\"fr-buttons\">'+t.button.buildList(t.opts.fileInsertButtons)+\"</div>\");var i=t.opts.fileInsertButtons.indexOf(\"fileUpload\"),a=t.opts.fileInsertButtons.indexOf(\"fileByURL\"),s=\"\";i>=0&&(o=\" fr-active\",a>=0&&i>a&&(o=\"\"),s='<div class=\"fr-file-upload-layer'+o+' fr-layer fr-active\" id=\"fr-file-upload-layer-'+t.id+'\"><strong>'+t.language.translate(\"Drop file\")+\"</strong><br>(\"+t.language.translate(\"or click\")+')<div class=\"fr-form\"><input type=\"file\" name=\"'+t.opts.fileUploadParam+'\" accept=\"/*\" tabIndex=\"-1\" aria-labelledby=\"fr-file-upload-layer-'+t.id+'\" role=\"button\"></div></div>');var l=\"\";a>=0&&(o=\" fr-active\",i>=0&&a>i&&(o=\"\"),l='<div class=\"fr-file-by-url-layer'+o+' fr-layer\" id=\"fr-file-by-url-layer-'+t.id+'\"><div class=\"fr-input-line\"><input type=\"text\" placeholder=\"http://\" tabIndex=\"1\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"fileInsertByURL\" tabIndex=\"2\">'+t.language.translate(\"Insert\")+\"</button></div></div>\");var d={buttons:r,upload_layer:s,by_url_layer:l,progress_bar:'<div class=\"fr-file-progress-bar-layer fr-layer\"><h3 tabIndex=\"-1\" class=\"fr-message\">Uploading</h3><div class=\"fr-loader\"><span class=\"fr-progress\"></span></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-dismiss\" data-cmd=\"fileDismissError\" tabIndex=\"2\" role=\"button\">OK</button></div></div>'},c=t.popups.create(\"file.insert\",d);return function(n){t.events.$on(n,\"dragover dragenter\",\".fr-file-upload-layer\",(function(){return e(this).addClass(\"fr-drop\"),!1}),!0),t.events.$on(n,\"dragleave dragend\",\".fr-file-upload-layer\",(function(){return e(this).removeClass(\"fr-drop\"),!1}),!0),t.events.$on(n,\"drop\",\".fr-file-upload-layer\",(function(o){o.preventDefault(),o.stopPropagation(),e(this).removeClass(\"fr-drop\");var r=o.originalEvent.dataTransfer;r&&r.files&&(n.data(\"instance\")||t).file.upload(r.files)}),!0),t.events.$on(n,\"change\",'.fr-file-upload-layer input[type=\"file\"]',(function(){this.files&&(n.data(\"instance\")||t).file.upload(this.files),e(this).val(\"\")}),!0)}(c),c}function m(e){if(t.node.hasClass(e,\"fr-file\"))return t.events.trigger(\"file.unlink\",[e])}function v(n){var o=n.originalEvent.dataTransfer;if(o&&o.files&&o.files.length){var i=o.files[0];if(i&&void 0!==i.type&&i.type.indexOf(\"image\")<0&&(t.opts.fileAllowedTypes.indexOf(i.type)>=0||t.opts.fileAllowedTypes.indexOf(\"*\")>=0)){t.markers.remove(),t.markers.insertAtPoint(n.originalEvent),t.$el.find(\".fr-marker\").replaceWith(e.FE.MARKERS),t.popups.hideAll();var a=t.popups.get(\"file.insert\");return a||(a=g()),t.popups.setContainer(\"file.insert\",t.$sc),t.popups.show(\"file.insert\",n.originalEvent.pageX,n.originalEvent.pageY),r(),h(o.files),n.preventDefault(),n.stopPropagation(),!1}}}function b(){var e,o=Array.prototype.slice.call(t.el.querySelectorAll(\"a.fr-file\")),r=[];for(e=0;e<o.length;e++)r.push(o[e].getAttribute(\"href\"));if(n)for(e=0;e<n.length;e++)r.indexOf(n[e].getAttribute(\"href\"))<0&&t.events.trigger(\"file.unlink\",[n[e]]);n=o}return o[1]=\"File cannot be loaded from the passed link.\",o[2]=\"No link in upload response.\",o[3]=\"Error during file upload.\",o[4]=\"Parsing response failed.\",o[5]=\"File is too large.\",o[6]=\"File file type is invalid.\",o[7]=\"Files can be uploaded only to same domain in IE 8 and IE 9.\",{_init:function(){t.events.on(\"drop\",v),t.events.$on(t.$win,\"keydown\",(function(n){var o=n.which,r=t.popups.get(\"file.insert\");r&&o==e.FE.KEYCODE.ESC&&r.trigger(\"abortUpload\")})),t.events.on(\"destroy\",(function(){var e=t.popups.get(\"file.insert\");e&&e.trigger(\"abortUpload\")})),t.events.on(\"link.beforeRemove\",m),t.$wp&&(b(),t.events.on(\"contentChanged\",b)),g(!0)},showInsertPopup:function(){var e=t.$tb.find('.fr-command[data-cmd=\"insertFile\"]'),n=t.popups.get(\"file.insert\");if(n||(n=g()),i(),!n.hasClass(\"fr-active\")){t.popups.refresh(\"file.insert\"),t.popups.setContainer(\"file.insert\",t.$tb);var o=e.offset().left+e.outerWidth()/2,r=e.offset().top+(t.opts.toolbarBottom?10:e.outerHeight()-10);t.popups.show(\"file.insert\",o,r,e.outerHeight())}},showLayer:function(e){var n,o,r=t.popups.get(\"file.insert\");if(t.opts.toolbarInline)o=r.offset().top-t.helpers.getPX(r.css(\"margin-top\")),r.hasClass(\"fr-above\")&&(o+=r.outerHeight());else{var i=t.$tb.find('.fr-command[data-cmd=\"insertFile\"]');n=i.offset().left+i.outerWidth()/2,o=i.offset().top+(t.opts.toolbarBottom?10:i.outerHeight()-10)}r.find(\".fr-layer\").removeClass(\"fr-active\"),r.find(\".fr-\"+e+\"-layer\").addClass(\"fr-active\"),t.popups.show(\"file.insert\",n,o,0)},refreshUploadButton:function(e){t.popups.get(\"file.insert\").find(\".fr-file-upload-layer\").hasClass(\"fr-active\")&&e.addClass(\"fr-active\")},refreshByURLButton:function(e){t.popups.get(\"file.insert\").find(\".fr-file-by-url-layer\").hasClass(\"fr-active\")&&e.addClass(\"fr-active\")},insertByURL:function(){var e=t.popups.get(\"file.insert\").find(\".fr-file-by-url-layer input\"),n=e.val();if(n.length>0){var o=n.substring(n.lastIndexOf(\"/\")+1);s(t.helpers.sanitizeURL(e.val()),o,[]),e.val(\"\"),e.blur()}},upload:h,insert:s,back:function(){t.events.disableBlur(),t.selection.restore(),t.events.enableBlur(),t.popups.hide(\"file.insert\"),t.toolbar.showInline()},hideProgressBar:i}},e.FE.DefineIcon(\"insertFile\",{NAME:\"file-o\"}),e.FE.RegisterCommand(\"insertFile\",{title:\"Insert File\",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"file.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"file.insert\")):this.file.showInsertPopup()},plugin:\"file\"}),e.FE.DefineIcon(\"fileUpload\",{NAME:\"upload\"}),e.FE.RegisterCommand(\"fileUpload\",{title:\"Upload File\",undo:!1,focus:!1,callback:function(){this.file.showLayer(\"file-upload\")},refresh:function(e){this.file.refreshUploadButton(e)}}),e.FE.DefineIcon(\"fileByURL\",{NAME:\"link\"}),e.FE.RegisterCommand(\"fileByURL\",{title:\"By URL\",undo:!1,focus:!1,callback:function(){this.file.showLayer(\"file-by-url\")},refresh:function(e){this.file.refreshByURLButton(e)}}),e.FE.RegisterCommand(\"fileInsertByURL\",{title:\"Insert File\",undo:!0,refreshAfterCallback:!1,callback:function(){this.file.insertByURL()},refresh:function(e){e.text(this.language.translate(\"Insert\"))}}),e.FE.DefineIcon(\"fileBack\",{NAME:\"arrow-left\"}),e.FE.RegisterCommand(\"fileBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.file.back()},refresh:function(e){this.opts.toolbarInline?(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\")):(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\"))}}),e.FE.RegisterCommand(\"fileDismissError\",{title:\"OK\",callback:function(){this.file.hideProgressBar(!0)}})}(jQuery),function(e){e.extend(e.FE.POPUP_TEMPLATES,{\"image.insert\":\"[_BUTTONS_][_UPLOAD_LAYER_][_BY_URL_LAYER_][_PROGRESS_BAR_]\",\"image.edit\":\"[_BUTTONS_]\",\"image.alt\":\"[_BUTTONS_][_ALT_LAYER_]\",\"image.size\":\"[_BUTTONS_][_SIZE_LAYER_]\"}),e.extend(e.FE.DEFAULTS,{imageInsertButtons:[\"imageBack\",\"|\",\"imageUpload\",\"imageByURL\"],imageEditButtons:[\"imageReplace\",\"imageAlign\",\"imageCaption\",\"imageRemove\",\"|\",\"imageLink\",\"linkOpen\",\"linkEdit\",\"linkRemove\",\"-\",\"imageDisplay\",\"imageStyle\",\"imageAlt\",\"imageSize\"],imageAltButtons:[\"imageBack\",\"|\"],imageSizeButtons:[\"imageBack\",\"|\"],imageUpload:!0,imageUploadURL:null,imageUploadRemoteUrls:!0,imageUploadParam:\"file\",imageUploadParams:{},imageUploadToS3:!1,imageUploadMethod:\"POST\",imageMaxSize:10485760,imageAllowedTypes:[\"jpeg\",\"jpg\",\"png\",\"gif\",\"webp\"],imageResize:!0,imageResizeWithPercent:!1,imageRoundPercent:!1,imageDefaultWidth:300,imageDefaultAlign:\"center\",imageDefaultDisplay:\"block\",imageSplitHTML:!1,imageStyles:{\"fr-rounded\":\"Rounded\",\"fr-bordered\":\"Bordered\",\"fr-shadow\":\"Shadow\"},imageMove:!0,imageMultipleStyles:!0,imageTextNear:!0,imagePaste:!0,imagePasteProcess:!1,imageMinWidth:16,imageOutputSize:!1,imageDefaultMargin:5,imageAddNewLine:!1}),e.FE.PLUGINS.image=function(t){var n,o,r,i,a,s,l=!1,d={};function c(){var e=t.popups.get(\"image.insert\").find(\".fr-image-by-url-layer input\");e.val(\"\"),n&&e.val(n.attr(\"src\")),e.trigger(\"change\")}function p(){var e=t.popups.get(\"image.edit\");if(e||(e=_()),e){var o=fe();he()&&(o=o.find(\".fr-img-wrap\")),t.popups.setContainer(\"image.edit\",t.$sc),t.popups.refresh(\"image.edit\"),n.hasClass(\"fr-uploading\")?T():t.popups.showEl(\"image.edit\",o)}}function f(){k()}function h(e){e.parents(\".fr-img-caption\").length>0&&(e=e.parents(\".fr-img-caption:first\")),e.hasClass(\"fr-dii\")||e.hasClass(\"fr-dib\")||(e.addClass(\"fr-fi\"+se(e)[0]),e.addClass(\"fr-di\"+le(e)[0]),e.css(\"margin\",\"\"),e.css(\"float\",\"\"),e.css(\"display\",\"\"),e.css(\"z-index\",\"\"),e.css(\"position\",\"\"),e.css(\"overflow\",\"\"),e.css(\"vertical-align\",\"\"))}function u(e){e.parents(\".fr-img-caption\").length>0&&(e=e.parents(\".fr-img-caption:first\"));var t=e.hasClass(\"fr-dib\")?\"block\":e.hasClass(\"fr-dii\")?\"inline\":null,n=e.hasClass(\"fr-fil\")?\"left\":e.hasClass(\"fr-fir\")?\"right\":se(e);ae(e,t,n),e.removeClass(\"fr-dib fr-dii fr-fir fr-fil\")}function g(){for(var n=\"IMG\"==t.el.tagName?[t.el]:t.el.querySelectorAll(\"img\"),o=0;o<n.length;o++){var r=e(n[o]);!t.opts.htmlUntouched&&t.opts.useClasses?((t.opts.imageDefaultAlign||t.opts.imageDefaultDisplay)&&h(r),t.opts.imageTextNear||(r.parents(\".fr-img-caption\").length>0?r.parents(\".fr-img-caption:first\").removeClass(\"fr-dii\").addClass(\"fr-dib\"):r.removeClass(\"fr-dii\").addClass(\"fr-dib\"))):t.opts.htmlUntouched||t.opts.useClasses||(t.opts.imageDefaultAlign||t.opts.imageDefaultDisplay)&&u(r),t.opts.iframe&&r.on(\"load\",t.size.syncIframe)}}function m(n){void 0===n&&(n=!0);var o,r=Array.prototype.slice.call(t.el.querySelectorAll(\"img\")),i=[];for(o=0;o<r.length;o++)if(i.push(r[o].getAttribute(\"src\")),e(r[o]).toggleClass(\"fr-draggable\",t.opts.imageMove),\"\"===r[o].getAttribute(\"class\")&&r[o].removeAttribute(\"class\"),\"\"===r[o].getAttribute(\"style\")&&r[o].removeAttribute(\"style\"),r[o].parentNode&&r[o].parentNode.parentNode&&t.node.hasClass(r[o].parentNode.parentNode,\"fr-img-caption\")){var s=r[o].parentNode.parentNode;t.browser.mozilla||s.setAttribute(\"contenteditable\",!1),s.setAttribute(\"draggable\",!1),s.classList.add(\"fr-draggable\");var l=r[o].nextSibling;l&&!t.browser.mozilla&&l.setAttribute(\"contenteditable\",!0)}if(a)for(o=0;o<a.length;o++)i.indexOf(a[o].getAttribute(\"src\"))<0&&t.events.trigger(\"image.removed\",[e(a[o])]);if(a&&n){var d=[];for(o=0;o<a.length;o++)d.push(a[o].getAttribute(\"src\"));for(o=0;o<r.length;o++)d.indexOf(r[o].getAttribute(\"src\"))<0&&t.events.trigger(\"image.loaded\",[e(r[o])])}a=r}function v(){if(o||function(){var r;t.shared.$image_resizer?(o=t.shared.$image_resizer,i=t.shared.$img_overlay,t.events.on(\"destroy\",(function(){o.removeClass(\"fr-active\").appendTo(e(\"body:first\"))}),!0)):(t.shared.$image_resizer=e('<div class=\"fr-image-resizer\"></div>'),o=t.shared.$image_resizer,t.events.$on(o,\"mousedown\",(function(e){e.stopPropagation()}),!0),t.opts.imageResize&&(o.append(b(\"nw\")+b(\"ne\")+b(\"sw\")+b(\"se\")),t.shared.$img_overlay=e('<div class=\"fr-image-overlay\"></div>'),i=t.shared.$img_overlay,r=o.get(0).ownerDocument,e(r).find(\"body:first\").append(i)));t.events.on(\"shared.destroy\",(function(){o.html(\"\").removeData().remove(),o=null,t.opts.imageResize&&(i.remove(),i=null)}),!0),t.helpers.isMobile()||t.events.$on(e(t.o_win),\"resize\",(function(){n&&!n.hasClass(\"fr-uploading\")?ne(!0):n&&(v(),de(),T(!1))}));if(t.opts.imageResize){r=o.get(0).ownerDocument,t.events.$on(o,t._mousedown,\".fr-handler\",y),t.events.$on(e(r),t._mousemove,w),t.events.$on(e(r.defaultView||r.parentWindow),t._mouseup,S),t.events.$on(i,\"mouseleave\",S);var a=1,s=null,l=0;t.events.on(\"keydown\",(function(o){if(n){var r=-1!=navigator.userAgent.indexOf(\"Mac OS X\")?o.metaKey:o.ctrlKey,i=o.which;(i!==s||o.timeStamp-l>200)&&(a=1),(i==e.FE.KEYCODE.EQUALS||t.browser.mozilla&&i==e.FE.KEYCODE.FF_EQUALS)&&r&&!o.altKey?a=Y.call(this,o,1,1,a):(i==e.FE.KEYCODE.HYPHEN||t.browser.mozilla&&i==e.FE.KEYCODE.FF_HYPHEN)&&r&&!o.altKey?a=Y.call(this,o,2,-1,a):t.keys.ctrlKey(o)||i!=e.FE.KEYCODE.ENTER||(n.before(\"<br>\"),x(n)),s=i,l=o.timeStamp}}),!0),t.events.on(\"keyup\",(function(){a=1}))}}(),!n)return!1;var r=t.$wp||t.$sc;r.append(o),o.data(\"instance\",t);var a=r.scrollTop()-(\"static\"!=r.css(\"position\")?r.offset().top:0),s=r.scrollLeft()-(\"static\"!=r.css(\"position\")?r.offset().left:0);s-=t.helpers.getPX(r.css(\"border-left-width\")),a-=t.helpers.getPX(r.css(\"border-top-width\")),t.$el.is(\"img\")&&t.$sc.is(\"body\")&&(a=0,s=0);var l=fe();he()&&(l=l.find(\".fr-img-wrap\")),o.css(\"top\",(t.opts.iframe?l.offset().top:l.offset().top+a)-1).css(\"left\",(t.opts.iframe?l.offset().left:l.offset().left+s)-1).css(\"width\",l.get(0).getBoundingClientRect().width).css(\"height\",l.get(0).getBoundingClientRect().height).addClass(\"fr-active\")}function b(e){return'<div class=\"fr-handler fr-h'+e+'\"></div>'}function E(e){he()?n.parents(\".fr-img-caption\").css(\"width\",e):n.css(\"width\",e)}function y(a){if(!t.core.sameInstance(o))return!0;if(a.preventDefault(),a.stopPropagation(),t.$el.find(\"img.fr-error\").left)return!1;t.undo.canDo()||t.undo.saveStep();var s=a.pageX||a.originalEvent.touches[0].pageX;if(\"mousedown\"==a.type){var l=t.$oel.get(0).ownerDocument,d=l.defaultView||l.parentWindow,c=!1;try{c=d.location!=d.parent.location&&!(d.$&&d.$.FE)}catch(e){}c&&d.frameElement&&(s+=t.helpers.getPX(e(d.frameElement).offset().left)+d.frameElement.clientLeft)}(r=e(this)).data(\"start-x\",s),r.data(\"start-width\",n.width()),r.data(\"start-height\",n.height());var p=n.width();if(t.opts.imageResizeWithPercent){var f=n.parentsUntil(t.$el,t.html.blockTagsQuery()).get(0)||t.el;p=(p/e(f).outerWidth()*100).toFixed(2)+\"%\"}E(p),i.show(),t.popups.hideAll(),ie()}function w(i){if(!t.core.sameInstance(o))return!0;var a;if(r&&n){if(i.preventDefault(),t.$el.find(\"img.fr-error\").left)return!1;var s=i.pageX||(i.originalEvent.touches?i.originalEvent.touches[0].pageX:null);if(!s)return!1;var l=s-r.data(\"start-x\"),d=r.data(\"start-width\");if((r.hasClass(\"fr-hnw\")||r.hasClass(\"fr-hsw\"))&&(l=0-l),t.opts.imageResizeWithPercent){var c=n.parentsUntil(t.$el,t.html.blockTagsQuery()).get(0)||t.el;d=((d+l)/e(c).outerWidth()*100).toFixed(2),t.opts.imageRoundPercent&&(d=Math.round(d)),E(d+\"%\"),(a=he()?(t.helpers.getPX(n.parents(\".fr-img-caption\").css(\"width\"))/e(c).outerWidth()*100).toFixed(2):(t.helpers.getPX(n.css(\"width\"))/e(c).outerWidth()*100).toFixed(2))===d||t.opts.imageRoundPercent||E(a+\"%\"),n.css(\"height\",\"\").removeAttr(\"height\")}else d+l>=t.opts.imageMinWidth&&(E(d+l),a=he()?t.helpers.getPX(n.parents(\".fr-img-caption\").css(\"width\")):t.helpers.getPX(n.css(\"width\"))),a!==d+l&&E(a),((n.attr(\"style\")||\"\").match(/(^height:)|(; *height:)/)||n.attr(\"height\"))&&(n.css(\"height\",r.data(\"start-height\")*n.width()/r.data(\"start-width\")),n.removeAttr(\"height\"));v(),t.events.trigger(\"image.resize\",[pe()])}}function S(e){if(!t.core.sameInstance(o))return!0;if(r&&n){if(e&&e.stopPropagation(),t.$el.find(\"img.fr-error\").left)return!1;r=null,i.hide(),v(),p(),t.undo.saveStep(),t.events.trigger(\"image.resizeEnd\",[pe()])}}function C(e,o,r){t.edit.on(),n&&n.addClass(\"fr-error\"),function(e){T();var n=t.popups.get(\"image.insert\").find(\".fr-image-progress-bar-layer\");n.addClass(\"fr-error\");var o=n.find(\"h3\");o.text(e),t.events.disableBlur(),o.focus()}(t.language.translate(\"Something went wrong. Please try again.\")),!n&&r&&q(r),t.events.trigger(\"image.error\",[{code:e,message:d[e]},o,r])}function _(e){if(e)return t.$wp&&t.events.$on(t.$wp,\"scroll.image-edit\",(function(){n&&t.popups.isVisible(\"image.edit\")&&(t.events.disableBlur(),p())})),!0;var o=\"\";if(t.opts.imageEditButtons.length>0){o+='<div class=\"fr-buttons\">',o+=t.button.buildList(t.opts.imageEditButtons);var r={buttons:o+=\"</div>\"};return t.popups.create(\"image.edit\",r)}return!1}function T(e){var o=t.popups.get(\"image.insert\");if(o||(o=P()),o.find(\".fr-layer.fr-active\").removeClass(\"fr-active\").addClass(\"fr-pactive\"),o.find(\".fr-image-progress-bar-layer\").addClass(\"fr-active\"),o.find(\".fr-buttons\").hide(),n){var r=fe();t.popups.setContainer(\"image.insert\",t.$sc),t.popups.showEl(\"image.insert\",r)}void 0===e&&A(t.language.translate(\"Uploading\"),0)}function k(e){var o=t.popups.get(\"image.insert\");if(o&&(o.find(\".fr-layer.fr-pactive\").addClass(\"fr-active\").removeClass(\"fr-pactive\"),o.find(\".fr-image-progress-bar-layer\").removeClass(\"fr-active\"),o.find(\".fr-buttons\").show(),e||t.$el.find(\"img.fr-error\").length)){if(t.events.focus(),t.$el.find(\"img.fr-error\").length&&(t.$el.find(\"img.fr-error\").remove(),t.undo.saveStep(),t.undo.run(),t.undo.dropRedo()),!t.$wp&&n){var r=n;ne(!0),t.selection.setAfter(r.get(0)),t.selection.restore()}t.popups.hide(\"image.insert\")}}function A(e,n){var o=t.popups.get(\"image.insert\");if(o){var r=o.find(\".fr-image-progress-bar-layer\");r.find(\"h3\").text(e+(n?\" \"+n+\"%\":\"\")),r.removeClass(\"fr-error\"),n?(r.find(\"div\").removeClass(\"fr-indeterminate\"),r.find(\"div > span\").css(\"width\",n+\"%\")):r.find(\"div\").addClass(\"fr-indeterminate\")}}function x(e){te.call(e.get(0))}function N(){var n=e(this);t.popups.hide(\"image.insert\"),n.removeClass(\"fr-uploading\"),n.next().is(\"br\")&&n.next().remove(),x(n),t.events.trigger(\"image.loaded\",[n])}function R(e,n,o,r,i){t.edit.off(),A(t.language.translate(\"Loading image\")),n&&(e=t.helpers.sanitizeURL(e));var a=new Image;a.onload=function(){var n,a;if(r){t.undo.canDo()||r.hasClass(\"fr-uploading\")||t.undo.saveStep();var s=r.data(\"fr-old-src\");r.data(\"fr-image-pasted\")&&(s=null),t.$wp?((n=r.clone().removeData(\"fr-old-src\").removeClass(\"fr-uploading\").removeAttr(\"data-fr-image-pasted\")).off(\"load\"),s&&r.attr(\"src\",s),r.replaceWith(n)):n=r;for(var l=n.get(0).attributes,d=0;d<l.length;d++){var c=l[d];0===c.nodeName.indexOf(\"data-\")&&n.removeAttr(c.nodeName)}if(void 0!==o)for(a in o)o.hasOwnProperty(a)&&\"link\"!=a&&n.attr(\"data-\"+a,o[a]);n.on(\"load\",N),n.attr(\"src\",e),t.edit.on(),m(!1),t.undo.saveStep(),t.events.disableBlur(),t.$el.blur(),t.events.trigger(s?\"image.replaced\":\"image.inserted\",[n,i])}else n=$(e,o,N),m(!1),t.undo.saveStep(),t.events.disableBlur(),t.$el.blur(),t.events.trigger(\"image.inserted\",[n,i])},a.onerror=function(){C(1)},T(t.language.translate(\"Loading image\")),a.src=e}function F(n){A(t.language.translate(\"Loading image\"));var o=this.status,r=this.response,i=this.responseXML,a=this.responseText;try{if(t.opts.imageUploadToS3)if(201==o){var s=function(n){try{var o=e(n).find(\"Location\").text(),r=e(n).find(\"Key\").text();return!1===t.events.trigger(\"image.uploadedToS3\",[o,r,n],!0)?(t.edit.on(),!1):o}catch(e){return C(4,n),!1}}(i);s&&R(s,!1,[],n,r||i)}else C(4,r||i,n);else if(o>=200&&o<300){var l=function(e){try{if(!1===t.events.trigger(\"image.uploaded\",[e],!0))return t.edit.on(),!1;var n=JSON.parse(e);return n.link?n:(C(2,e),!1)}catch(t){return C(4,e),!1}}(a);l&&R(l.link,!1,l,n,r||a)}else C(3,r||a,n)}catch(e){C(4,r||a,n)}}function O(){C(4,this.response||this.responseText||this.responseXML)}function D(e){if(e.lengthComputable){var n=e.loaded/e.total*100|0;A(t.language.translate(\"Uploading\"),n)}}function $(n,o,r){var i,a=\"\";if(o&&void 0!==o)for(i in o)o.hasOwnProperty(i)&&\"link\"!=i&&(a+=\" data-\"+i+'=\"'+o[i]+'\"');var s=t.opts.imageDefaultWidth;s&&\"auto\"!=s&&(s+=t.opts.imageResizeWithPercent?\"%\":\"px\");var l=e('<img src=\"'+n+'\"'+a+(s?' style=\"width: '+s+';\"':\"\")+\">\");ae(l,t.opts.imageDefaultDisplay,t.opts.imageDefaultAlign),l.on(\"load\",r),l.on(\"error\",r),t.edit.on(),t.events.focus(!0),t.selection.restore(),t.undo.saveStep(),t.opts.imageSplitHTML?t.markers.split():t.markers.insert(),t.html.wrap();var d=t.$el.find(\".fr-marker\");return d.length?(d.parent().is(\"hr\")&&d.parent().after(d),t.node.isLastSibling(d)&&d.parent().hasClass(\"fr-deletable\")&&d.insertAfter(d.parent()),d.replaceWith(l)):t.$el.append(l),t.selection.clear(),l}function L(){t.edit.on(),k(!0)}function M(o,r){if(void 0!==o&&o.length>0){if(!1===t.events.trigger(\"image.beforeUpload\",[o,r]))return!1;var i,a=o[0];if((null===t.opts.imageUploadURL||\"https://i.froala.com/upload\"==t.opts.imageUploadURL)&&!t.opts.imageUploadToS3)return function(e,n){var o=new FileReader;o.onload=function(){var r=o.result;if(o.result.indexOf(\"svg+xml\")<0){for(var i=atob(o.result.split(\",\")[1]),a=[],s=0;s<i.length;s++)a.push(i.charCodeAt(s));r=window.URL.createObjectURL(new Blob([new Uint8Array(a)],{type:e.type})),t.image.insert(r,!1,null,n)}},T(),o.readAsDataURL(e)}(a,r||n),!1;if(a.name||(a.name=(new Date).getTime()+\".\"+(a.type||\"image/jpeg\").replace(/image\\//g,\"\")),a.size>t.opts.imageMaxSize)return C(5),!1;if(t.opts.imageAllowedTypes.indexOf(a.type.replace(/image\\//g,\"\"))<0)return C(6),!1;if(t.drag_support.formdata&&(i=t.drag_support.formdata?new FormData:null),i){var s;if(!1!==t.opts.imageUploadToS3)for(s in i.append(\"key\",t.opts.imageUploadToS3.keyStart+(new Date).getTime()+\"-\"+(a.name||\"untitled\")),i.append(\"success_action_status\",\"201\"),i.append(\"X-Requested-With\",\"xhr\"),i.append(\"Content-Type\",a.type),t.opts.imageUploadToS3.params)t.opts.imageUploadToS3.params.hasOwnProperty(s)&&i.append(s,t.opts.imageUploadToS3.params[s]);for(s in t.opts.imageUploadParams)t.opts.imageUploadParams.hasOwnProperty(s)&&i.append(s,t.opts.imageUploadParams[s]);i.append(t.opts.imageUploadParam,a,a.name);var l=t.opts.imageUploadURL;t.opts.imageUploadToS3&&(l=t.opts.imageUploadToS3.uploadURL?t.opts.imageUploadToS3.uploadURL:\"https://\"+t.opts.imageUploadToS3.region+\".amazonaws.com/\"+t.opts.imageUploadToS3.bucket),function(n,o,r,i){function a(){var r=e(this);r.off(\"load\"),r.addClass(\"fr-uploading\"),r.next().is(\"br\")&&r.next().remove(),t.placeholder.refresh(),x(r),v(),T(),t.edit.off(),n.onload=function(){F.call(n,r)},n.onerror=O,n.upload.onprogress=D,n.onabort=L,r.off(\"abortUpload\").on(\"abortUpload\",(function(){4!=n.readyState&&n.abort()})),n.send(o)}var s=new FileReader;s.onload=function(){var e=s.result;if(s.result.indexOf(\"svg+xml\")<0){for(var n=atob(s.result.split(\",\")[1]),o=[],r=0;r<n.length;r++)o.push(n.charCodeAt(r));e=window.URL.createObjectURL(new Blob([new Uint8Array(o)],{type:\"image/jpeg\"}))}i?(i.on(\"load\",a),i.one(\"error\",a),t.edit.on(),t.undo.saveStep(),i.data(\"fr-old-src\",i.attr(\"src\")),i.attr(\"src\",e)):$(e,null,a)},s.readAsDataURL(r)}(t.core.getXHR(l,t.opts.imageUploadMethod),i,a,r||n)}}}function I(e){if(e.is(\"img\")&&e.parents(\".fr-img-caption\").length>0)return e.parents(\".fr-img-caption\")}function B(n){var o=n.originalEvent.dataTransfer;if(o&&o.files&&o.files.length){var r=o.files[0];if(r&&r.type&&-1!==r.type.indexOf(\"image\")&&t.opts.imageAllowedTypes.indexOf(r.type.replace(/image\\//g,\"\"))>=0){if(!t.opts.imageUpload)return n.preventDefault(),n.stopPropagation(),!1;t.markers.remove(),t.markers.insertAtPoint(n.originalEvent),t.$el.find(\".fr-marker\").replaceWith(e.FE.MARKERS),0===t.$el.find(\".fr-marker\").length&&t.selection.setAtEnd(t.el),t.popups.hideAll();var i=t.popups.get(\"image.insert\");i||(i=P()),t.popups.setContainer(\"image.insert\",t.$sc);var a=n.originalEvent.pageX,s=n.originalEvent.pageY;return t.opts.iframe&&(s+=t.$iframe.offset().top,a+=t.$iframe.offset().left),t.popups.show(\"image.insert\",a,s),T(),t.opts.imageAllowedTypes.indexOf(r.type.replace(/image\\//g,\"\"))>=0?(ne(!0),M(o.files)):C(6),n.preventDefault(),n.stopPropagation(),!1}}}function P(o){if(o)return t.popups.onRefresh(\"image.insert\",c),t.popups.onHide(\"image.insert\",f),!0;var r,i,a=\"\";t.opts.imageUpload||-1===t.opts.imageInsertButtons.indexOf(\"imageUpload\")||t.opts.imageInsertButtons.splice(t.opts.imageInsertButtons.indexOf(\"imageUpload\"),1);var s=t.button.buildList(t.opts.imageInsertButtons);\"\"!==s&&(a='<div class=\"fr-buttons\">'+s+\"</div>\");var l=t.opts.imageInsertButtons.indexOf(\"imageUpload\"),d=t.opts.imageInsertButtons.indexOf(\"imageByURL\"),p=\"\";l>=0&&(r=\" fr-active\",d>=0&&l>d&&(r=\"\"),p='<div class=\"fr-image-upload-layer'+r+' fr-layer\" id=\"fr-image-upload-layer-'+t.id+'\"><strong>'+t.language.translate(\"Drop image\")+\"</strong><br>(\"+t.language.translate(\"or click\")+')<div class=\"fr-form\"><input type=\"file\" accept=\"image/'+t.opts.imageAllowedTypes.join(\", image/\").toLowerCase()+'\" tabIndex=\"-1\" aria-labelledby=\"fr-image-upload-layer-'+t.id+'\" role=\"button\"></div></div>');var h=\"\";d>=0&&(r=\" fr-active\",l>=0&&d>l&&(r=\"\"),h='<div class=\"fr-image-by-url-layer'+r+' fr-layer\" id=\"fr-image-by-url-layer-'+t.id+'\"><div class=\"fr-input-line\"><input id=\"fr-image-by-url-layer-text-'+t.id+'\" type=\"text\" placeholder=\"http://\" tabIndex=\"1\" aria-required=\"true\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"imageInsertByURL\" tabIndex=\"2\" role=\"button\">'+t.language.translate(\"Insert\")+\"</button></div></div>\");var u={buttons:a,upload_layer:p,by_url_layer:h,progress_bar:'<div class=\"fr-image-progress-bar-layer fr-layer\"><h3 tabIndex=\"-1\" class=\"fr-message\">Uploading</h3><div class=\"fr-loader\"><span class=\"fr-progress\"></span></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-dismiss\" data-cmd=\"imageDismissError\" tabIndex=\"2\" role=\"button\">OK</button></div></div>'};return t.opts.imageInsertButtons.length>=1&&(i=t.popups.create(\"image.insert\",u)),t.$wp&&t.events.$on(t.$wp,\"scroll\",(function(){n&&t.popups.isVisible(\"image.insert\")&&de()})),function(o){t.events.$on(o,\"dragover dragenter\",\".fr-image-upload-layer\",(function(){return e(this).addClass(\"fr-drop\"),!1}),!0),t.events.$on(o,\"dragleave dragend\",\".fr-image-upload-layer\",(function(){return e(this).removeClass(\"fr-drop\"),!1}),!0),t.events.$on(o,\"drop\",\".fr-image-upload-layer\",(function(n){n.preventDefault(),n.stopPropagation(),e(this).removeClass(\"fr-drop\");var r=n.originalEvent.dataTransfer;if(r&&r.files){var i=o.data(\"instance\")||t;i.events.disableBlur(),i.image.upload(r.files),i.events.enableBlur()}}),!0),t.helpers.isIOS()&&t.events.$on(o,\"touchstart\",'.fr-image-upload-layer input[type=\"file\"]',(function(){e(this).trigger(\"click\")}),!0),t.events.$on(o,\"change\",'.fr-image-upload-layer input[type=\"file\"]',(function(){if(this.files){var r=o.data(\"instance\")||t;r.events.disableBlur(),o.find(\"input:focus\").blur(),r.events.enableBlur(),r.image.upload(this.files,n)}e(this).val(\"\")}),!0)}(i),i}function K(){n&&t.popups.get(\"image.alt\").find(\"input\").val(n.attr(\"alt\")||\"\").trigger(\"change\")}function U(){var e=t.popups.get(\"image.alt\");e||(e=H()),k(),t.popups.refresh(\"image.alt\"),t.popups.setContainer(\"image.alt\",t.$sc);var n=fe();he()&&(n=n.find(\".fr-img-wrap\")),t.popups.showEl(\"image.alt\",n)}function H(e){if(e)return t.popups.onRefresh(\"image.alt\",K),!0;var o={buttons:'<div class=\"fr-buttons\">'+t.button.buildList(t.opts.imageAltButtons)+\"</div>\",alt_layer:'<div class=\"fr-image-alt-layer fr-layer fr-active\" id=\"fr-image-alt-layer-'+t.id+'\"><div class=\"fr-input-line\"><input id=\"fr-image-alt-layer-text-'+t.id+'\" type=\"text\" placeholder=\"'+t.language.translate(\"Alternative Text\")+'\" tabIndex=\"1\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"imageSetAlt\" tabIndex=\"2\" role=\"button\">'+t.language.translate(\"Update\")+\"</button></div></div>\"},r=t.popups.create(\"image.alt\",o);return t.$wp&&t.events.$on(t.$wp,\"scroll.image-alt\",(function(){n&&t.popups.isVisible(\"image.alt\")&&U()})),r}function z(){var e=t.popups.get(\"image.size\");if(n)if(he()){var o=n.parent();o.get(0).style.width||(o=n.parent().parent()),e.find('input[name=\"width\"]').val(o.get(0).style.width).trigger(\"change\"),e.find('input[name=\"height\"]').val(o.get(0).style.height).trigger(\"change\")}else e.find('input[name=\"width\"]').val(n.get(0).style.width).trigger(\"change\"),e.find('input[name=\"height\"]').val(n.get(0).style.height).trigger(\"change\")}function W(){var e=t.popups.get(\"image.size\");e||(e=V()),k(),t.popups.refresh(\"image.size\"),t.popups.setContainer(\"image.size\",t.$sc);var n=fe();he()&&(n=n.find(\".fr-img-wrap\")),t.popups.showEl(\"image.size\",n)}function V(e){if(e)return t.popups.onRefresh(\"image.size\",z),!0;var o={buttons:'<div class=\"fr-buttons\">'+t.button.buildList(t.opts.imageSizeButtons)+\"</div>\",size_layer:'<div class=\"fr-image-size-layer fr-layer fr-active\" id=\"fr-image-size-layer-'+t.id+'\"><div class=\"fr-image-group\"><div class=\"fr-input-line\"><input id=\"fr-image-size-layer-width-'+t.id+'\" type=\"text\" name=\"width\" placeholder=\"'+t.language.translate(\"Width\")+'\" tabIndex=\"1\"></div><div class=\"fr-input-line\"><input id=\"fr-image-size-layer-height'+t.id+'\" type=\"text\" name=\"height\" placeholder=\"'+t.language.translate(\"Height\")+'\" tabIndex=\"1\"></div></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"imageSetSize\" tabIndex=\"2\" role=\"button\">'+t.language.translate(\"Update\")+\"</button></div></div>\"},r=t.popups.create(\"image.size\",o);return t.$wp&&t.events.$on(t.$wp,\"scroll.image-size\",(function(){n&&t.popups.isVisible(\"image.size\")&&W()})),r}function Y(e,t,n,o){return e.pageX=t,y.call(this,e),e.pageX=e.pageX+n*Math.floor(Math.pow(1.1,o)),w.call(this,e),S.call(this,e),++o}function q(n){(n=n||fe())&&!1!==t.events.trigger(\"image.beforeRemove\",[n])&&(t.popups.hideAll(),ce(),ne(!0),t.undo.canDo()||t.undo.saveStep(),n.get(0)==t.el?n.removeAttr(\"src\"):(n.get(0).parentNode&&\"A\"==n.get(0).parentNode.tagName?(t.selection.setBefore(n.get(0).parentNode)||t.selection.setAfter(n.get(0).parentNode)||n.parent().after(e.FE.MARKERS),e(n.get(0).parentNode).remove()):(t.selection.setBefore(n.get(0))||t.selection.setAfter(n.get(0))||n.after(e.FE.MARKERS),n.remove()),t.html.fillEmptyBlocks(),t.selection.restore()),t.undo.saveStep())}function X(o){var r=o.which;if(n&&(r==e.FE.KEYCODE.BACKSPACE||r==e.FE.KEYCODE.DELETE))return o.preventDefault(),o.stopPropagation(),q(),!1;if(n&&r==e.FE.KEYCODE.ESC){var i=n;return ne(!0),t.selection.setAfter(i.get(0)),t.selection.restore(),o.preventDefault(),!1}if(n&&(r==e.FE.KEYCODE.ARROW_LEFT||r==e.FE.KEYCODE.ARROW_RIGHT)){var a=n.get(0);return ne(!0),r==e.FE.KEYCODE.ARROW_LEFT?t.selection.setBefore(a):t.selection.setAfter(a),t.selection.restore(),o.preventDefault(),!1}return n&&r!=e.FE.KEYCODE.F10&&!t.keys.isBrowserAction(o)?(o.preventDefault(),o.stopPropagation(),!1):void 0}function j(e){if(e&&\"IMG\"==e.tagName){if(t.node.hasClass(e,\"fr-uploading\")||t.node.hasClass(e,\"fr-error\")?e.parentNode.removeChild(e):t.node.hasClass(e,\"fr-draggable\")&&e.classList.remove(\"fr-draggable\"),e.parentNode&&e.parentNode.parentNode&&t.node.hasClass(e.parentNode.parentNode,\"fr-img-caption\")){var n=e.parentNode.parentNode;n.removeAttribute(\"contenteditable\"),n.removeAttribute(\"draggable\"),n.classList.remove(\"fr-draggable\");var o=e.nextSibling;o&&o.removeAttribute(\"contenteditable\")}}else if(e&&e.nodeType==Node.ELEMENT_NODE)for(var r=e.querySelectorAll(\"img.fr-uploading, img.fr-error, img.fr-draggable\"),i=0;i<r.length;i++)j(r[i])}function G(o){if(!1===t.events.trigger(\"image.beforePasteUpload\",[o]))return!1;n=e(o),v(),p(),de(),T(),n.one(\"load\",(function(){v(),T()}));for(var r=e(o).attr(\"src\").split(\",\"),i=atob(r[1]),a=[],s=0;s<i.length;s++)a.push(i.charCodeAt(s));M([new Blob([new Uint8Array(a)],{type:r[0].replace(/data\\:/g,\"\").replace(/;base64/g,\"\")})],n)}function Q(){t.opts.imagePaste?t.$el.find(\"img[data-fr-image-pasted]\").each((function(n,o){if(t.opts.imagePasteProcess){var r=t.opts.imageDefaultWidth;r&&\"auto\"!=r&&(r+=t.opts.imageResizeWithPercent?\"%\":\"px\"),e(o).css(\"width\",r).removeClass(\"fr-dii fr-dib fr-fir fr-fil\"),ae(e(o),t.opts.imageDefaultDisplay,t.opts.imageDefaultAlign)}if(0===o.src.indexOf(\"data:\"))G(o);else if(0===o.src.indexOf(\"blob:\")||0===o.src.indexOf(\"http\")&&t.opts.imageUploadRemoteUrls){var i=new Image;i.crossOrigin=\"Anonymous\",i.onload=function(){var e=t.o_doc.createElement(\"CANVAS\"),n=e.getContext(\"2d\");e.height=this.naturalHeight,e.width=this.naturalWidth,n.drawImage(this,0,0),setTimeout((function(){G(o)}),0),o.src=e.toDataURL(\"image/jpeg\")},i.src=o.src}else 0!==o.src.indexOf(\"http\")||0===o.src.indexOf(\"https://mail.google.com/mail\")?(t.selection.save(),e(o).remove(),t.selection.restore()):e(o).removeAttr(\"data-fr-image-pasted\")})):t.$el.find(\"img[data-fr-image-pasted]\").remove()}function Z(e){var n=e.target.result,o=t.opts.imageDefaultWidth;o&&\"auto\"!=o&&(o+=t.opts.imageResizeWithPercent?\"%\":\"px\"),t.undo.saveStep(),t.html.insert('<img data-fr-image-pasted=\"true\" src=\"'+n+'\"'+(o?' style=\"width: '+o+';\"':\"\")+\">\");var r=t.$el.find('img[data-fr-image-pasted=\"true\"]');r&&ae(r,t.opts.imageDefaultDisplay,t.opts.imageDefaultAlign),t.events.trigger(\"paste.after\")}function J(e){if(e&&e.clipboardData&&e.clipboardData.items){var t=null;if(e.clipboardData.types&&-1!=e.clipboardData.types.indexOf(\"text/rtf\")||e.clipboardData.getData(\"text/rtf\"))t=e.clipboardData.items[0].getAsFile();else for(var n=0;n<e.clipboardData.items.length&&!(t=e.clipboardData.items[n].getAsFile());n++);if(t)return function(e){var t=new FileReader;t.onload=Z,t.readAsDataURL(e)}(t),!1}}function ee(e){return e=e.replace(/<img /gi,'<img data-fr-image-pasted=\"true\" ')}function te(o){if(\"false\"==e(this).parents(\"[contenteditable]:not(.fr-element):not(.fr-img-caption):not(body):first\").attr(\"contenteditable\"))return!0;if(o&&\"touchend\"==o.type&&s)return!0;if(o&&t.edit.isDisabled())return o.stopPropagation(),o.preventDefault(),!1;for(var r=0;r<e.FE.INSTANCES.length;r++)e.FE.INSTANCES[r]!=t&&e.FE.INSTANCES[r].events.trigger(\"image.hideResizer\");t.toolbar.disable(),o&&(o.stopPropagation(),o.preventDefault()),t.helpers.isMobile()&&(t.events.disableBlur(),t.$el.blur(),t.events.enableBlur()),t.opts.iframe&&t.size.syncIframe(),n=e(this),ce(),v(),p(),t.browser.msie?(t.popups.areVisible()&&t.events.disableBlur(),t.win.getSelection&&(t.win.getSelection().removeAllRanges(),t.win.getSelection().addRange(t.doc.createRange()))):t.selection.clear(),t.helpers.isIOS()&&(t.events.disableBlur(),t.$el.blur()),t.button.bulkRefresh(),t.events.trigger(\"video.hideResizer\")}function ne(e){n&&(oe||!0===e)&&(t.toolbar.enable(),o.removeClass(\"fr-active\"),t.popups.hide(\"image.edit\"),n=null,ie(),r=null,i&&i.hide())}d[1]=\"Image cannot be loaded from the passed link.\",d[2]=\"No link in upload response.\",d[3]=\"Error during file upload.\",d[4]=\"Parsing response failed.\",d[5]=\"File is too large.\",d[6]=\"Image file type is invalid.\",d[7]=\"Files can be uploaded only to same domain in IE 8 and IE 9.\",d[8]=\"Image file is corrupted.\";var oe=!1;function re(){oe=!0}function ie(){oe=!1}function ae(e,n,o){!t.opts.htmlUntouched&&t.opts.useClasses?(e.removeClass(\"fr-fil fr-fir fr-dib fr-dii\"),o&&e.addClass(\"fr-fi\"+o[0]),n&&e.addClass(\"fr-di\"+n[0])):\"inline\"==n?(e.css({display:\"inline-block\",verticalAlign:\"bottom\",margin:t.opts.imageDefaultMargin}),\"center\"==o?e.css({float:\"none\",marginBottom:\"\",marginTop:\"\",maxWidth:\"calc(100% - \"+2*t.opts.imageDefaultMargin+\"px)\",textAlign:\"center\"}):\"left\"==o?e.css({float:\"left\",marginLeft:0,maxWidth:\"calc(100% - \"+t.opts.imageDefaultMargin+\"px)\",textAlign:\"left\"}):e.css({float:\"right\",marginRight:0,maxWidth:\"calc(100% - \"+t.opts.imageDefaultMargin+\"px)\",textAlign:\"right\"})):\"block\"==n&&(e.css({display:\"block\",float:\"none\",verticalAlign:\"top\",margin:t.opts.imageDefaultMargin+\"px auto\",textAlign:\"center\"}),\"left\"==o?e.css({marginLeft:0,textAlign:\"left\"}):\"right\"==o&&e.css({marginRight:0,textAlign:\"right\"}))}function se(e){if(void 0===e&&(e=fe()),e){if(e.hasClass(\"fr-fil\"))return\"left\";if(e.hasClass(\"fr-fir\"))return\"right\";if(e.hasClass(\"fr-dib\")||e.hasClass(\"fr-dii\"))return\"center\";var t=e.css(\"float\");if(e.css(\"float\",\"none\"),\"block\"==e.css(\"display\")){if(e.css(\"float\",\"\"),e.css(\"float\")!=t&&e.css(\"float\",t),0===parseInt(e.css(\"margin-left\"),10))return\"left\";if(0===parseInt(e.css(\"margin-right\"),10))return\"right\"}else{if(e.css(\"float\",\"\"),e.css(\"float\")!=t&&e.css(\"float\",t),\"left\"==e.css(\"float\"))return\"left\";if(\"right\"==e.css(\"float\"))return\"right\"}}return\"center\"}function le(e){void 0===e&&(e=fe());var t=e.css(\"float\");return e.css(\"float\",\"none\"),\"block\"==e.css(\"display\")?(e.css(\"float\",\"\"),e.css(\"float\")!=t&&e.css(\"float\",t),\"block\"):(e.css(\"float\",\"\"),e.css(\"float\")!=t&&e.css(\"float\",t),\"inline\")}function de(){var e=t.popups.get(\"image.insert\");e||(e=P()),t.popups.isVisible(\"image.insert\")||(k(),t.popups.refresh(\"image.insert\"),t.popups.setContainer(\"image.insert\",t.$sc));var n=fe();he()&&(n=n.find(\".fr-img-wrap\")),t.popups.showEl(\"image.insert\",n)}function ce(){if(n){t.events.disableBlur(),t.selection.clear();var e=t.doc.createRange();e.selectNode(n.get(0)),t.browser.msie&&e.collapse(!0),t.selection.get().addRange(e),t.events.enableBlur()}}function pe(){return n}function fe(){return he()?n.parents(\".fr-img-caption:first\"):n}function he(){return!!n&&n.parents(\".fr-img-caption\").length>0}return{_init:function(){var o;t.events.$on(t.$el,t._mousedown,\"IMG\"==t.el.tagName?null:'img:not([contenteditable=\"false\"])',(function(n){if(\"false\"==e(this).parents(\"[contenteditable]:not(.fr-element):not(.fr-img-caption):not(body):first\").attr(\"contenteditable\"))return!0;t.helpers.isMobile()||t.selection.clear(),l=!0,t.popups.areVisible()&&t.events.disableBlur(),t.browser.msie&&(t.events.disableBlur(),t.$el.attr(\"contenteditable\",!1)),t.draggable||\"touchstart\"==n.type||n.preventDefault(),n.stopPropagation()})),t.events.$on(t.$el,t._mouseup,\"IMG\"==t.el.tagName?null:'img:not([contenteditable=\"false\"])',(function(n){if(\"false\"==e(this).parents(\"[contenteditable]:not(.fr-element):not(.fr-img-caption):not(body):first\").attr(\"contenteditable\"))return!0;l&&(l=!1,n.stopPropagation(),t.browser.msie&&(t.$el.attr(\"contenteditable\",!0),t.events.enableBlur()))})),t.events.on(\"keyup\",(function(n){if(n.shiftKey&&\"\"===t.selection.text().replace(/\\n/g,\"\")&&t.keys.isArrow(n.which)){var o=t.selection.element(),r=t.selection.endElement();o&&\"IMG\"==o.tagName?x(e(o)):r&&\"IMG\"==r.tagName&&x(e(r))}}),!0),t.events.on(\"drop\",B),t.events.on(\"element.beforeDrop\",I),t.events.on(\"mousedown window.mousedown\",re),t.events.on(\"window.touchmove\",ie),t.events.on(\"mouseup window.mouseup\",(function(){if(n)return ne(),!1;ie()})),t.events.on(\"commands.mousedown\",(function(e){e.parents(\".fr-toolbar\").length>0&&ne()})),t.events.on(\"image.resizeEnd\",(function(){t.opts.iframe&&t.size.syncIframe()})),t.events.on(\"blur image.hideResizer commands.undo commands.redo element.dropped\",(function(){l=!1,ne(!0)})),t.events.on(\"modals.hide\",(function(){n&&(ce(),t.selection.clear())})),t.events.on(\"image.resizeEnd\",(function(){t.win.getSelection&&x(n)})),t.opts.imageAddNewLine&&t.events.on(\"image.inserted\",(function(n){var o=n.get(0);for(o.nextSibling&&\"BR\"===o.nextSibling.tagName&&(o=o.nextSibling);o&&!t.node.isElement(o);)o=t.node.isLastSibling(o)?o.parentNode:null;t.node.isElement(o)&&(t.opts.enter===e.FE.ENTER_BR?n.after(\"<br>\"):e(t.node.blockParent(n.get(0))).after(\"<\"+t.html.defaultTag()+\"><br></\"+t.html.defaultTag()+\">\"))})),\"IMG\"==t.el.tagName&&t.$el.addClass(\"fr-view\"),t.events.$on(t.$el,t.helpers.isMobile()&&!t.helpers.isWindowsPhone()?\"touchend\":\"click\",\"IMG\"==t.el.tagName?null:'img:not([contenteditable=\"false\"])',te),t.helpers.isMobile()&&(t.events.$on(t.$el,\"touchstart\",\"IMG\"==t.el.tagName?null:'img:not([contenteditable=\"false\"])',(function(){s=!1})),t.events.$on(t.$el,\"touchmove\",(function(){s=!0}))),t.$wp?(t.events.on(\"window.keydown keydown\",X,!0),t.events.on(\"keyup\",(function(t){if(n&&t.which==e.FE.KEYCODE.ENTER)return!1}),!0),t.events.$on(t.$el,\"keydown\",(function(){var n=t.selection.element();n.nodeType===Node.TEXT_NODE&&(n=n.parentNode),t.node.hasClass(n,\"fr-inner\")||(t.node.hasClass(n,\"fr-img-caption\")||(n=e(n).parents(\".fr-img-caption\").get(0)),t.node.hasClass(n,\"fr-img-caption\")&&(e(n).after(e.FE.INVISIBLE_SPACE+e.FE.MARKERS),t.selection.restore()))}))):t.events.$on(t.$win,\"keydown\",X),t.events.on(\"toolbar.esc\",(function(){if(n){if(t.$wp)t.events.disableBlur(),t.events.focus();else{var e=n;ne(!0),t.selection.setAfter(e.get(0)),t.selection.restore()}return!1}}),!0),t.events.on(\"toolbar.focusEditor\",(function(){if(n)return!1}),!0),t.events.on(\"window.cut window.copy\",(function(o){if(n&&t.popups.isVisible(\"image.edit\")&&!t.popups.get(\"image.edit\").find(\":focus\").length){var r=fe();he()?(r.before(e.FE.START_MARKER),r.after(e.FE.END_MARKER),t.selection.restore(),t.paste.saveCopiedText(r.get(0).outerHTML,r.text())):(ce(),t.paste.saveCopiedText(n.get(0).outerHTML,n.attr(\"alt\"))),\"copy\"==o.type?setTimeout((function(){x(n)})):(ne(!0),t.undo.saveStep(),setTimeout((function(){t.undo.saveStep()}),0))}}),!0),t.browser.msie&&t.events.on(\"keydown\",(function(o){if(!t.selection.isCollapsed()||!n)return!0;var r=o.which;r==e.FE.KEYCODE.C&&t.keys.ctrlKey(o)?t.events.trigger(\"window.copy\"):r==e.FE.KEYCODE.X&&t.keys.ctrlKey(o)&&t.events.trigger(\"window.cut\")})),t.events.$on(e(t.o_win),\"keydown\",(function(t){var o=t.which;if(n&&o==e.FE.KEYCODE.BACKSPACE)return t.preventDefault(),!1})),t.events.$on(t.$win,\"keydown\",(function(t){var o=t.which;n&&n.hasClass(\"fr-uploading\")&&o==e.FE.KEYCODE.ESC&&n.trigger(\"abortUpload\")})),t.events.on(\"destroy\",(function(){n&&n.hasClass(\"fr-uploading\")&&n.trigger(\"abortUpload\")})),t.events.on(\"paste.before\",J),t.events.on(\"paste.beforeCleanup\",ee),t.events.on(\"paste.after\",Q),t.events.on(\"html.set\",g),t.events.on(\"html.inserted\",g),g(),t.events.on(\"destroy\",(function(){a=[]})),t.events.on(\"html.processGet\",j),t.opts.imageOutputSize&&t.events.on(\"html.beforeGet\",(function(){o=t.el.querySelectorAll(\"img\");for(var n=0;n<o.length;n++){var r=o[n].style.width||e(o[n]).width(),i=o[n].style.height||e(o[n]).height();r&&o[n].setAttribute(\"width\",(\"\"+r).replace(/px/,\"\")),i&&o[n].setAttribute(\"height\",(\"\"+i).replace(/px/,\"\"))}})),t.opts.iframe&&t.events.on(\"image.loaded\",t.size.syncIframe),t.$wp&&(m(),t.events.on(\"contentChanged\",m)),t.events.$on(e(t.o_win),\"orientationchange.image\",(function(){setTimeout((function(){n&&x(n)}),100)})),_(!0),P(!0),V(!0),H(!0),t.events.on(\"node.remove\",(function(e){if(\"IMG\"==e.get(0).tagName)return q(e),!1}))},showInsertPopup:function(){var e=t.$tb.find('.fr-command[data-cmd=\"insertImage\"]'),n=t.popups.get(\"image.insert\");if(n||(n=P()),k(),!n.hasClass(\"fr-active\"))if(t.popups.refresh(\"image.insert\"),t.popups.setContainer(\"image.insert\",t.$tb),e.is(\":visible\")){var o=e.offset().left+e.outerWidth()/2,r=e.offset().top+(t.opts.toolbarBottom?10:e.outerHeight()-10);t.popups.show(\"image.insert\",o,r,e.outerHeight())}else t.position.forSelection(n),t.popups.show(\"image.insert\")},showLayer:function(e){var o,r,i=t.popups.get(\"image.insert\");if(n||t.opts.toolbarInline){if(n){var a=fe();he()&&(a=a.find(\".fr-img-wrap\")),r=a.offset().top+a.outerHeight(),o=a.offset().left+a.outerWidth()/2}}else{var s=t.$tb.find('.fr-command[data-cmd=\"insertImage\"]');o=s.offset().left+s.outerWidth()/2,r=s.offset().top+(t.opts.toolbarBottom?10:s.outerHeight()-10)}!n&&t.opts.toolbarInline&&(r=i.offset().top-t.helpers.getPX(i.css(\"margin-top\")),i.hasClass(\"fr-above\")&&(r+=i.outerHeight())),i.find(\".fr-layer\").removeClass(\"fr-active\"),i.find(\".fr-\"+e+\"-layer\").addClass(\"fr-active\"),t.popups.show(\"image.insert\",o,r,n?n.outerHeight():0),t.accessibility.focusPopup(i)},refreshUploadButton:function(e){t.popups.get(\"image.insert\").find(\".fr-image-upload-layer\").hasClass(\"fr-active\")&&e.addClass(\"fr-active\").attr(\"aria-pressed\",!0)},refreshByURLButton:function(e){t.popups.get(\"image.insert\").find(\".fr-image-by-url-layer\").hasClass(\"fr-active\")&&e.addClass(\"fr-active\").attr(\"aria-pressed\",!0)},upload:M,insertByURL:function(){var e=t.popups.get(\"image.insert\").find(\".fr-image-by-url-layer input\");if(e.val().length>0){T(),A(t.language.translate(\"Loading image\"));var o=e.val().trim();if(t.opts.imageUploadRemoteUrls&&t.opts.imageUpload){var r=new XMLHttpRequest;r.onload=function(){200==this.status?M([new Blob([this.response],{type:this.response.type||\"image/png\"})],n):C(1)},r.onerror=function(){R(o,!0,[],n)},r.open(\"GET\",o,!0),r.responseType=\"blob\",r.send()}else R(o,!0,[],n);e.val(\"\"),e.blur()}},align:function(e){var n=fe();n.removeClass(\"fr-fir fr-fil\"),!t.opts.htmlUntouched&&t.opts.useClasses?\"left\"==e?n.addClass(\"fr-fil\"):\"right\"==e&&n.addClass(\"fr-fir\"):ae(n,le(),e),ce(),v(),p(),t.selection.clear()},refreshAlign:function(e){n&&e.find(\"> *:first\").replaceWith(t.icon.create(\"image-align-\"+se()))},refreshAlignOnShow:function(e,t){n&&t.find('.fr-command[data-param1=\"'+se()+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)},display:function(e){var n=fe();n.removeClass(\"fr-dii fr-dib\"),!t.opts.htmlUntouched&&t.opts.useClasses?\"inline\"==e?n.addClass(\"fr-dii\"):\"block\"==e&&n.addClass(\"fr-dib\"):ae(n,e,se()),ce(),v(),p(),t.selection.clear()},refreshDisplayOnShow:function(e,t){n&&t.find('.fr-command[data-param1=\"'+le()+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)},replace:de,back:function(){n?(t.events.disableBlur(),e(\".fr-popup input:focus\").blur(),x(n)):(t.events.disableBlur(),t.selection.restore(),t.events.enableBlur(),t.popups.hide(\"image.insert\"),t.toolbar.showInline())},get:pe,getEl:fe,set:function(e){n=e},insert:R,showProgressBar:T,remove:q,hideProgressBar:k,applyStyle:function(e,o,r){if(void 0===o&&(o=t.opts.imageStyles),void 0===r&&(r=t.opts.imageMultipleStyles),!n)return!1;var i=fe();if(!r){var a=Object.keys(o);a.splice(a.indexOf(e),1),i.removeClass(a.join(\" \"))}\"object\"==typeof o[e]?(i.removeAttr(\"style\"),i.css(o[e].style)):i.toggleClass(e),x(n)},showAltPopup:U,showSizePopup:W,setAlt:function(e){if(n){var o=t.popups.get(\"image.alt\");n.attr(\"alt\",e||o.find(\"input\").val()||\"\"),o.find(\"input:focus\").blur(),x(n)}},setSize:function(e,o){if(n){var r=t.popups.get(\"image.size\");e=e||r.find('input[name=\"width\"]').val()||\"\",o=o||r.find('input[name=\"height\"]').val()||\"\";var i=/^[\\d]+((px)|%)*$/g;n.removeAttr(\"width\").removeAttr(\"height\"),e.match(i)?n.css(\"width\",e):n.css(\"width\",\"\"),o.match(i)?n.css(\"height\",o):n.css(\"height\",\"\"),he()&&(n.parents(\".fr-img-caption\").removeAttr(\"width\").removeAttr(\"height\"),e.match(i)?n.parents(\".fr-img-caption\").css(\"width\",e):n.parents(\".fr-img-caption\").css(\"width\",\"\"),o.match(i)?n.parents(\".fr-img-caption\").css(\"height\",o):n.parents(\".fr-img-caption\").css(\"height\",\"\")),r&&r.find(\"input:focus\").blur(),x(n)}},toggleCaption:function(){var o;if(n&&!he()){o=n,n.parent().is(\"a\")&&(o=n.parent());var r=o.width();o.wrap(\"<span \"+(t.browser.mozilla?\"\":'contenteditable=\"false\"')+'class=\"fr-img-caption '+n.attr(\"class\")+'\" style=\"'+(t.opts.useClasses?\"\":o.attr(\"style\"))+'\" draggable=\"false\"></span>'),o.wrap('<span class=\"fr-img-wrap\"></span>'),o.after('<span class=\"fr-inner\"'+(t.browser.mozilla?\"\":' contenteditable=\"true\"')+\">\"+e.FE.START_MARKER+\"Image caption\"+e.FE.END_MARKER+\"</span>\"),n.removeAttr(\"class\").removeAttr(\"style\").removeAttr(\"width\"),n.parents(\".fr-img-caption\").css(\"width\",r+\"px\"),ne(!0),t.selection.restore()}else o=fe(),n.insertAfter(o),n.attr(\"class\",o.attr(\"class\").replace(\"fr-img-caption\",\"\")).attr(\"style\",o.attr(\"style\")),o.remove(),x(n)},hasCaption:he,exitEdit:ne,edit:x}},e.FE.DefineIcon(\"insertImage\",{NAME:\"image\"}),e.FE.RegisterShortcut(e.FE.KEYCODE.P,\"insertImage\",null,\"P\"),e.FE.RegisterCommand(\"insertImage\",{title:\"Insert Image\",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"image.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"image.insert\")):this.image.showInsertPopup()},plugin:\"image\"}),e.FE.DefineIcon(\"imageUpload\",{NAME:\"upload\"}),e.FE.RegisterCommand(\"imageUpload\",{title:\"Upload Image\",undo:!1,focus:!1,toggle:!0,callback:function(){this.image.showLayer(\"image-upload\")},refresh:function(e){this.image.refreshUploadButton(e)}}),e.FE.DefineIcon(\"imageByURL\",{NAME:\"link\"}),e.FE.RegisterCommand(\"imageByURL\",{title:\"By URL\",undo:!1,focus:!1,toggle:!0,callback:function(){this.image.showLayer(\"image-by-url\")},refresh:function(e){this.image.refreshByURLButton(e)}}),e.FE.RegisterCommand(\"imageInsertByURL\",{title:\"Insert Image\",undo:!0,refreshAfterCallback:!1,callback:function(){this.image.insertByURL()},refresh:function(e){this.image.get()?e.text(this.language.translate(\"Replace\")):e.text(this.language.translate(\"Insert\"))}}),e.FE.DefineIcon(\"imageDisplay\",{NAME:\"star-o\"}),e.FE.RegisterCommand(\"imageDisplay\",{title:\"Display\",type:\"dropdown\",options:{inline:\"Inline\",block:\"Break Text\"},callback:function(e,t){this.image.display(t)},refresh:function(e){this.opts.imageTextNear||e.addClass(\"fr-hidden\")},refreshOnShow:function(e,t){this.image.refreshDisplayOnShow(e,t)}}),e.FE.DefineIcon(\"image-align\",{NAME:\"align-left\"}),e.FE.DefineIcon(\"image-align-left\",{NAME:\"align-left\"}),e.FE.DefineIcon(\"image-align-right\",{NAME:\"align-right\"}),e.FE.DefineIcon(\"image-align-center\",{NAME:\"align-justify\"}),e.FE.DefineIcon(\"imageAlign\",{NAME:\"align-justify\"}),e.FE.RegisterCommand(\"imageAlign\",{type:\"dropdown\",title:\"Align\",options:{left:\"Align Left\",center:\"None\",right:\"Align Right\"},html:function(){var t='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=e.FE.COMMANDS.imageAlign.options;for(var o in n)n.hasOwnProperty(o)&&(t+='<li role=\"presentation\"><a class=\"fr-command fr-title\" tabIndex=\"-1\" role=\"option\" data-cmd=\"imageAlign\" data-param1=\"'+o+'\" title=\"'+this.language.translate(n[o])+'\">'+this.icon.create(\"image-align-\"+o)+'<span class=\"fr-sr-only\">'+this.language.translate(n[o])+\"</span></a></li>\");return t+=\"</ul>\"},callback:function(e,t){this.image.align(t)},refresh:function(e){this.image.refreshAlign(e)},refreshOnShow:function(e,t){this.image.refreshAlignOnShow(e,t)}}),e.FE.DefineIcon(\"imageReplace\",{NAME:\"exchange\",FA5NAME:\"exchange-alt\"}),e.FE.RegisterCommand(\"imageReplace\",{title:\"Replace\",undo:!1,focus:!1,popup:!0,refreshAfterCallback:!1,callback:function(){this.image.replace()}}),e.FE.DefineIcon(\"imageRemove\",{NAME:\"trash\"}),e.FE.RegisterCommand(\"imageRemove\",{title:\"Remove\",callback:function(){this.image.remove()}}),e.FE.DefineIcon(\"imageBack\",{NAME:\"arrow-left\"}),e.FE.RegisterCommand(\"imageBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,callback:function(){this.image.back()},refresh:function(e){this.image.get()||this.opts.toolbarInline?(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\")):(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\"))}}),e.FE.RegisterCommand(\"imageDismissError\",{title:\"OK\",undo:!1,callback:function(){this.image.hideProgressBar(!0)}}),e.FE.DefineIcon(\"imageStyle\",{NAME:\"magic\"}),e.FE.RegisterCommand(\"imageStyle\",{title:\"Style\",type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.imageStyles;for(var n in t)if(t.hasOwnProperty(n)){var o=t[n];\"object\"==typeof o&&(o=o.title),e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"imageStyle\" data-param1=\"'+n+'\">'+this.language.translate(o)+\"</a></li>\"}return e+=\"</ul>\"},callback:function(e,t){this.image.applyStyle(t)},refreshOnShow:function(t,n){var o=this.image.getEl();o&&n.find(\".fr-command\").each((function(){var t=e(this).data(\"param1\"),n=o.hasClass(t);e(this).toggleClass(\"fr-active\",n).attr(\"aria-selected\",n)}))}}),e.FE.DefineIcon(\"imageAlt\",{NAME:\"info\"}),e.FE.RegisterCommand(\"imageAlt\",{undo:!1,focus:!1,popup:!0,title:\"Alternative Text\",callback:function(){this.image.showAltPopup()}}),e.FE.RegisterCommand(\"imageSetAlt\",{undo:!0,focus:!1,title:\"Update\",refreshAfterCallback:!1,callback:function(){this.image.setAlt()}}),e.FE.DefineIcon(\"imageSize\",{NAME:\"arrows-alt\"}),e.FE.RegisterCommand(\"imageSize\",{undo:!1,focus:!1,popup:!0,title:\"Change Size\",callback:function(){this.image.showSizePopup()}}),e.FE.RegisterCommand(\"imageSetSize\",{undo:!0,focus:!1,title:\"Update\",refreshAfterCallback:!1,callback:function(){this.image.setSize()}}),e.FE.DefineIcon(\"imageCaption\",{NAME:\"commenting-o\",FA5NAME:\"comment-alt\"}),e.FE.RegisterCommand(\"imageCaption\",{undo:!0,focus:!1,title:\"Image Caption\",refreshAfterCallback:!0,callback:function(){this.image.toggleCaption()},refresh:function(e){this.image.get()&&e.toggleClass(\"fr-active\",this.image.hasCaption())}})}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{inlineStyles:{\"fr-class-code\":\"Code\",\"fr-class-highlighted\":\"Highlighted\",\"fr-class-transparency\":\"Transparent\"}}),e.FE.PLUGINS.inlineStyle=function(t){return{apply:function(e){t.format.toggle(\"span\",{class:e})},refreshOnShow:function(n,o){o.find(\".fr-command\").each((function(){var n=e(this).data(\"param1\"),o=t.format.is(\"span\",{class:n});e(this).toggleClass(\"fr-active\",o).attr(\"aria-selected\",o)}))}}},e.FE.RegisterCommand(\"inlineStyle\",{type:\"dropdown\",title:\"Inline Class\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.inlineStyles;for(var n in t)t.hasOwnProperty(n)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"inlineStyle\" data-param1=\"'+n+'\" title=\"'+t[n]+'\">'+t[n]+\"</a></li>\");return e+=\"</ul>\"},callback:function(e,t){this.inlineStyle.apply(t)},refreshOnShow:function(e,t){this.inlineStyle.refreshOnShow(e,t)},plugin:\"inlineStyle\"}),e.FE.DefineIcon(\"inlineStyle\",{NAME:\"tag\"})}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{inlineStylesRaw:{\"Big Red\":\"font-size: 20px; color: red;\",\"Small Blue\":\"font-size: 14px; color: blue;\"}}),e.FE.PLUGINS.inlineStyleRaw=function(t){return{apply:function(n){if(\"\"!==t.selection.text())for(var o=n.split(\";\"),r=0;r<o.length;r++){var i=o[r].split(\":\");o[r].length&&2==i.length&&t.format.applyStyle(i[0].trim(),i[1].trim())}else t.html.insert('<span style=\"'+n+'\">'+e.FE.INVISIBLE_SPACE+e.FE.MARKERS+\"</span>\")}}},e.FE.RegisterCommand(\"inlineStyleRaw\",{type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.inlineStylesRaw;for(var n in t){if(t.hasOwnProperty(n))e+='<li role=\"presentation\"><span style=\"'+(t[n]+(-1===t[n].indexOf(\"display:block;\")?\" display:block;\":\"\"))+'\" role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"inlineStyleRaw\" data-param1=\"'+t[n]+'\" title=\"'+this.language.translate(n)+'\">'+this.language.translate(n)+\"</a></span></li>\"}return e+=\"</ul>\"},title:\"Inline Style\",callback:function(e,t){this.inlineStyleRaw.apply(t)},plugin:\"inlineStyleRaw\"}),e.FE.DefineIcon(\"inlineStyleRaw\",{NAME:\"paint-brush\"})}(jQuery),function(e){e.extend(e.FE.POPUP_TEMPLATES,{\"link.edit\":\"[_BUTTONS_]\",\"link.insert\":\"[_BUTTONS_][_INPUT_LAYER_]\"}),e.extend(e.FE.DEFAULTS,{linkEditButtons:[\"linkOpen\",\"linkStyle\",\"linkEdit\",\"linkRemove\"],linkInsertButtons:[],linkAttributes:{},linkAutoPrefix:\"http://\",linkStyles:{\"fr-green\":\"Green\",\"fr-strong\":\"Thick\"},linkMultipleStyles:!0,linkConvertEmailAddress:!0,linkAlwaysBlank:!1,linkAlwaysNoFollow:!1,linkNoOpener:!0,linkNoReferrer:!0,linkList:[{text:\"Google\",href:\"https://google.com\",target:\"_blank\"},{displayText:\"Facebook\",href:\"https://facebook.com\"}],linkText:!0}),e.FE.PLUGINS.link=function(t){function n(){var n=t.image?t.image.get():null;if(!n&&t.$wp){var o=t.selection.ranges(0).commonAncestorContainer;try{o&&(o.contains&&o.contains(t.el)||!t.el.contains(o)||t.el==o)&&(o=null)}catch(e){o=null}if(o&&\"A\"===o.tagName)return o;var r=t.selection.element(),i=t.selection.endElement();\"A\"==r.tagName||t.node.isElement(r)||(r=e(r).parentsUntil(t.$el,\"a:first\").get(0)),\"A\"==i.tagName||t.node.isElement(i)||(i=e(i).parentsUntil(t.$el,\"a:first\").get(0));try{i&&(i.contains&&i.contains(t.el)||!t.el.contains(i)||t.el==i)&&(i=null)}catch(e){i=null}try{r&&(r.contains&&r.contains(t.el)||!t.el.contains(r)||t.el==r)&&(r=null)}catch(e){r=null}return i&&i==r&&\"A\"==i.tagName?(t.browser.msie||t.helpers.isMobile())&&(t.selection.info(r).atEnd||t.selection.info(r).atStart)?null:r:null}return\"A\"==t.el.tagName?t.el:n&&n.get(0).parentNode&&\"A\"==n.get(0).parentNode.tagName?n.get(0).parentNode:void 0}function o(){var e,n,o,r,i=t.image?t.image.get():null,a=[];if(i)\"A\"==i.get(0).parentNode.tagName&&a.push(i.get(0).parentNode);else if(t.win.getSelection){var s=t.win.getSelection();if(s.getRangeAt&&s.rangeCount){r=t.doc.createRange();for(var l=0;l<s.rangeCount;++l)if((n=(e=s.getRangeAt(l)).commonAncestorContainer)&&1!=n.nodeType&&(n=n.parentNode),n&&\"a\"==n.nodeName.toLowerCase())a.push(n);else{o=n.getElementsByTagName(\"a\");for(var d=0;d<o.length;++d)r.selectNodeContents(o[d]),r.compareBoundaryPoints(e.END_TO_START,e)<1&&r.compareBoundaryPoints(e.START_TO_END,e)>-1&&a.push(o[d])}}}else if(t.doc.selection&&\"Control\"!=t.doc.selection.type)if(\"a\"==(n=(e=t.doc.selection.createRange()).parentElement()).nodeName.toLowerCase())a.push(n);else{o=n.getElementsByTagName(\"a\"),r=t.doc.body.createTextRange();for(var c=0;c<o.length;++c)r.moveToElementText(o[c]),r.compareEndPoints(\"StartToEnd\",e)>-1&&r.compareEndPoints(\"EndToStart\",e)<1&&a.push(o[c])}return a}function r(o){if(t.core.hasFocus()){if(a(),o&&\"keyup\"===o.type&&(o.altKey||o.which==e.FE.KEYCODE.ALT))return!0;setTimeout((function(){if(!o||o&&(1==o.which||\"mouseup\"!=o.type)){var r=n(),a=t.image?t.image.get():null;if(r&&!a){if(t.image){var s=t.node.contents(r);if(1==s.length&&\"IMG\"==s[0].tagName){var l=t.selection.ranges(0);return 0===l.startOffset&&0===l.endOffset?e(r).before(e.FE.MARKERS):e(r).after(e.FE.MARKERS),t.selection.restore(),!1}}o&&o.stopPropagation(),i(r)}}}),t.helpers.isIOS()?100:0)}}function i(o){var r=t.popups.get(\"link.edit\");r||(r=function(){var e=\"\";t.opts.linkEditButtons.length>=1&&(\"A\"==t.el.tagName&&t.opts.linkEditButtons.indexOf(\"linkRemove\")>=0&&t.opts.linkEditButtons.splice(t.opts.linkEditButtons.indexOf(\"linkRemove\"),1),e='<div class=\"fr-buttons\">'+t.button.buildList(t.opts.linkEditButtons)+\"</div>\");var o={buttons:e},r=t.popups.create(\"link.edit\",o);t.$wp&&t.events.$on(t.$wp,\"scroll.link-edit\",(function(){n()&&t.popups.isVisible(\"link.edit\")&&i(n())}));return r}());var a=e(o);t.popups.isVisible(\"link.edit\")||t.popups.refresh(\"link.edit\"),t.popups.setContainer(\"link.edit\",t.$sc),t.popups.showEl(\"link.edit\",a)}function a(){t.popups.hide(\"link.edit\")}function s(){}function l(){var o=t.popups.get(\"link.insert\"),r=n();if(r){var i,a,s=e(r),l=o.find('input.fr-link-attr[type=\"text\"]'),d=o.find('input.fr-link-attr[type=\"checkbox\"]');for(i=0;i<l.length;i++)(a=e(l[i])).val(s.attr(a.attr(\"name\")||\"\"));for(d.prop(\"checked\",!1),i=0;i<d.length;i++)a=e(d[i]),s.attr(a.attr(\"name\"))==a.data(\"checked\")&&a.prop(\"checked\",!0);o.find('input.fr-link-attr[type=\"text\"][name=\"text\"]').val(s.text())}else o.find('input.fr-link-attr[type=\"text\"]').val(\"\"),o.find('input.fr-link-attr[type=\"checkbox\"]').prop(\"checked\",!1),o.find('input.fr-link-attr[type=\"text\"][name=\"text\"]').val(t.selection.text());o.find(\"input.fr-link-attr\").trigger(\"change\"),(t.image?t.image.get():null)?o.find('.fr-link-attr[name=\"text\"]').parent().hide():o.find('.fr-link-attr[name=\"text\"]').parent().show()}function d(e){if(e)return t.popups.onRefresh(\"link.insert\",l),t.popups.onHide(\"link.insert\",s),!0;var o=\"\";t.toolbar.hasButton(\"insertPageLink\")&&t.opts.linkInsertButtons.length>=1&&(o='<div class=\"fr-buttons\">'+t.button.buildList(t.opts.linkInsertButtons)+\"</div>\");var r=\"\",i=0;for(var a in r=`<div class=\"fr-link-insert-layer fr-layer fr-active\" id=\"fr-link-insert-layer-${t.id}\">`,r+=`\\n                <div class=\"fr-input-line\">\\n                    <input id=\"fr-link-insert-layer-url-${t.id}\" name=\"href\" type=\"text\" class=\"fr-link-attr\" placeholder=\"${t.language.translate(\"URL\")}\" tabIndex=\"${++i}\">\\n                </div>`,t.opts.linkText&&(r+=`\\n                    <div class=\"fr-input-line\">\\n                        <input id=\"fr-link-insert-layer-text-${t.id}\" name=\"text\" type=\"text\" class=\"fr-link-attr\" placeholder=\"${t.language.translate(\"Text\")}\" tabIndex=\"${++i}\">\\n                    </div>`),t.opts.linkAttributes)if(t.opts.linkAttributes.hasOwnProperty(a)){var d=t.opts.linkAttributes[a];r+=`\\n                        <div class=\"fr-input-line\">\\n                            <input name=\"${a}\" type=\"text\" class=\"fr-link-attr\" placeholder=\"${t.language.translate(d)}\" tabIndex=\"${++i}\">\\n                        </div>`}t.opts.linkAlwaysBlank||(r+=`\\n                    <div class=\"fr-checkbox-line\">\\n                        <span class=\"fr-checkbox\">\\n                            <input name=\"target\" class=\"fr-link-attr\" data-checked=\"_blank\" type=\"checkbox\" id=\"fr-link-target-${t.id}\" tabIndex=\"${++i}\">\\n                            <span><svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"10\" height=\"10\" viewBox=\"0 0 32 32\"><path d=\"M27 4l-15 15-7-7-5 5 12 12 20-20z\" fill=\"#FFF\"></path></svg></span>\\n                        </span>\\n                        <label for=\"fr-link-target-${t.id}\">${t.language.translate(\"Open in new tab\")}</label>\\n                    </div>`);var c={buttons:o,input_layer:r+=`\\n                <div class=\"fr-action-buttons\">\\n                    <button class=\"fr-command fr-submit\" role=\"button\" data-cmd=\"linkInsert\" href=\"#\" tabIndex=\"${++i}\" type=\"button\">\\n                        ${t.language.translate(\"Insert\")}\\n                    </button>\\n                </div>\\n            </div>`},h=t.popups.create(\"link.insert\",c);return t.$wp&&t.events.$on(t.$wp,\"scroll.link-insert\",(function(){(t.image?t.image.get():null)&&t.popups.isVisible(\"link.insert\")&&f(),n&&t.popups.isVisible(\"link.insert\")&&p()})),h}function c(i,a,s){if(void 0===s&&(s={}),!1===t.events.trigger(\"link.beforeInsert\",[i,a,s]))return!1;var l=t.image?t.image.get():null;l||\"A\"==t.el.tagName?\"A\"==t.el.tagName&&t.$el.focus():(t.selection.restore(),t.popups.hide(\"link.insert\"));var d=i;t.opts.linkConvertEmailAddress&&t.helpers.isEmail(i)&&!/^mailto:.*/i.test(i)&&(i=\"mailto:\"+i);if(\"\"===t.opts.linkAutoPrefix||new RegExp(\"^(\"+e.FE.LinkProtocols.join(\"|\")+\"):.\",\"i\").test(i)||/^data:image.*/i.test(i)||/^(https?:|ftps?:|file:|)\\/\\//i.test(i)||/^([A-Za-z]:(\\\\){1,2}|[A-Za-z]:((\\\\){1,2}[^\\\\]+)+)(\\\\)?$/i.test(i)||[\"/\",\"{\",\"[\",\"#\",\"(\",\".\"].indexOf((i||\"\")[0])<0&&(i=t.opts.linkAutoPrefix+t.helpers.sanitizeURL(i)),i=t.helpers.sanitizeURL(i),t.opts.linkAlwaysBlank&&(s.target=\"_blank\"),t.opts.linkAlwaysNoFollow&&(s.rel=\"nofollow\"),t.helpers.isEmail(d)&&(s.target=null,s.rel=null),\"_blank\"==s.target?(t.opts.linkNoOpener&&(s.rel?s.rel+=\" noopener\":s.rel=\"noopener\"),t.opts.linkNoReferrer&&(s.rel?s.rel+=\" noreferrer\":s.rel=\"noreferrer\")):null==s.target&&(s.rel?s.rel=s.rel.replace(/noopener/,\"\").replace(/noreferrer/,\"\"):s.rel=null),a=a||\"\",i===t.opts.linkAutoPrefix)return t.popups.get(\"link.insert\").find('input[name=\"href\"]').addClass(\"fr-error\"),t.events.trigger(\"link.bad\",[d]),!1;var c,p=n();if(p){if((c=e(p)).attr(\"href\",i),a.length>0&&c.text()!=a&&!l){for(var f=c.get(0);1===f.childNodes.length&&f.childNodes[0].nodeType==Node.ELEMENT_NODE;)f=f.childNodes[0];e(f).text(a)}l||c.prepend(e.FE.START_MARKER).append(e.FE.END_MARKER),c.attr(s),l||t.selection.restore()}else{l?l.wrap('<a href=\"'+i+'\"></a>'):(t.format.remove(\"a\"),t.selection.isCollapsed()?(a=0===a.length?d:a,t.html.insert('<a href=\"'+i+'\">'+e.FE.START_MARKER+a.replace(/&/g,\"&amp;\").replace(/</,\"&lt;\",\">\",\"&gt;\")+e.FE.END_MARKER+\"</a>\"),t.selection.restore()):a.length>0&&a!=t.selection.text().replace(/\\n/g,\"\")?(t.selection.remove(),t.html.insert('<a href=\"'+i+'\">'+e.FE.START_MARKER+a.replace(/&/g,\"&amp;\")+e.FE.END_MARKER+\"</a>\"),t.selection.restore()):(!function(){if(!t.selection.isCollapsed()){t.selection.save();for(var n=t.$el.find(\".fr-marker\").addClass(\"fr-unprocessed\").toArray();n.length;){var o=e(n.pop());o.removeClass(\"fr-unprocessed\");var r=t.node.deepestParent(o.get(0));if(r){var i=o.get(0),a=\"\",s=\"\";do{i=i.parentNode,t.node.isBlock(i)||(a+=t.node.closeTagString(i),s=t.node.openTagString(i)+s)}while(i!=r);var l=t.node.openTagString(o.get(0))+o.html()+t.node.closeTagString(o.get(0));o.replaceWith('<span id=\"fr-break\"></span>');var d=r.outerHTML;d=(d=d.replace(/<span id=\"fr-break\"><\\/span>/g,a+l+s)).replace(s+a,\"\"),r.outerHTML=d}n=t.$el.find(\".fr-marker.fr-unprocessed\").toArray()}t.html.cleanEmptyTags(),t.selection.restore()}}(),t.format.apply(\"a\",{href:i})));for(var h=o(),u=0;u<h.length;u++)(c=e(h[u])).attr(s),c.removeAttr(\"_moz_dirty\");1==h.length&&t.$wp&&!l&&(e(h[0]).prepend(e.FE.START_MARKER).append(e.FE.END_MARKER),t.selection.restore())}if(l){var g=t.popups.get(\"link.insert\");g&&g.find(\"input:focus\").blur(),t.image.edit(l)}else r()}function p(){a();var o=n();if(o){var r=t.popups.get(\"link.insert\");r||(r=d()),t.popups.isVisible(\"link.insert\")||(t.popups.refresh(\"link.insert\"),t.selection.save(),t.helpers.isMobile()&&(t.events.disableBlur(),t.$el.blur(),t.events.enableBlur())),t.popups.setContainer(\"link.insert\",t.$sc);var i=(t.image?t.image.get():null)||e(o);t.popups.showEl(\"link.insert\",i)}}function f(){var e=t.image?t.image.getEl():null;if(e){var n=t.popups.get(\"link.insert\");t.image.hasCaption()&&(e=e.find(\".fr-img-wrap\")),n||(n=d()),l(),t.popups.setContainer(\"link.insert\",t.$sc),t.popups.showEl(\"link.insert\",e)}}return{_init:function(){t.events.on(\"keyup\",(function(t){t.which!=e.FE.KEYCODE.ESC&&r(t)})),t.events.on(\"window.mouseup\",r),t.events.$on(t.$el,\"click\",\"a\",(function(e){t.edit.isDisabled()&&e.preventDefault()})),t.helpers.isMobile()&&t.events.$on(t.$doc,\"selectionchange\",r),d(!0),\"A\"==t.el.tagName&&t.$el.addClass(\"fr-view\"),t.events.on(\"toolbar.esc\",(function(){if(t.popups.isVisible(\"link.edit\"))return t.events.disableBlur(),t.events.focus(),!1}),!0)},remove:function(){var o=n(),r=t.image?t.image.get():null;if(!1===t.events.trigger(\"link.beforeRemove\",[o]))return!1;r&&o?(r.unwrap(),t.image.edit(r)):o&&(t.selection.save(),e(o).replaceWith(e(o).html()),t.selection.restore(),a())},showInsertPopup:function(){var n=t.$vtb?t.$vtb.find('[data-cmd=\"richeditor-toolbar-insertLink\"]'):t.$tb.find('.fr-command[data-cmd=\"insertLink\"]');n.is(\":visible\")||(n=e('[data-cmd=\"richeditor-toolbar-insertLink\"]:first'));var o=t.popups.get(\"link.insert\");o||(o=d()),o.hasClass(\"fr-active\")||(t.popups.refresh(\"link.insert\"),t.popups.setContainer(\"link.insert\",t.$sc),t.popups.showElToolbar(\"link.insert\",n))},usePredefined:function(n){var o,r,i=t.opts.linkList[n],a=t.popups.get(\"link.insert\"),s=a.find('input.fr-link-attr[type=\"text\"]'),l=a.find('input.fr-link-attr[type=\"checkbox\"]');for(r=0;r<s.length;r++)i[(o=e(s[r])).attr(\"name\")]?o.val(i[o.attr(\"name\")]):\"text\"!=o.attr(\"name\")&&o.val(\"\");for(r=0;r<l.length;r++)(o=e(l[r])).prop(\"checked\",o.data(\"checked\")==i[o.attr(\"name\")]);t.accessibility.focusPopup(a)},insertCallback:function(){var n,o,r=t.popups.get(\"link.insert\"),i=r.find('input.fr-link-attr[type=\"text\"]'),a=r.find('input.fr-link-attr[type=\"checkbox\"]'),s=(i.filter('[name=\"href\"]').val()||\"\").trim(),l=i.filter('[name=\"text\"]').val(),d={};for(o=0;o<i.length;o++)n=e(i[o]),[\"href\",\"text\"].indexOf(n.attr(\"name\"))<0&&(d[n.attr(\"name\")]=n.val());for(o=0;o<a.length;o++)(n=e(a[o])).is(\":checked\")?d[n.attr(\"name\")]=n.data(\"checked\"):d[n.attr(\"name\")]=n.data(\"unchecked\")||null;var p=t.helpers.scrollTop();c(s,l,d),e(t.o_win).scrollTop(p)},insert:c,update:p,get:n,allSelected:o,back:function(){(t.image?t.image.get():null)?t.image.back():(t.events.disableBlur(),t.selection.restore(),t.events.enableBlur(),n()&&t.$wp?(t.selection.restore(),a(),r()):\"A\"==t.el.tagName?(t.$el.focus(),r()):(t.popups.hide(\"link.insert\"),t.toolbar.showInline()))},imageLink:f,applyStyle:function(o,i,a){void 0===a&&(a=t.opts.linkMultipleStyles),void 0===i&&(i=t.opts.linkStyles);var s=n();if(!s)return!1;if(!a){var l=Object.keys(i);l.splice(l.indexOf(o),1),e(s).removeClass(l.join(\" \"))}e(s).toggleClass(o),r()}}},e.FE.DefineIcon(\"insertLink\",{NAME:\"link\"}),e.FE.RegisterShortcut(e.FE.KEYCODE.K,\"insertLink\",null,\"K\"),e.FE.RegisterCommand(\"insertLink\",{title:\"Insert Link\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"link.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"link.insert\")):this.link.showInsertPopup()},plugin:\"link\"}),e.FE.DefineIcon(\"linkOpen\",{NAME:\"external-link\",FA5NAME:\"external-link-alt\"}),e.FE.RegisterCommand(\"linkOpen\",{title:\"Open Link\",undo:!1,refresh:function(e){this.link.get()?e.removeClass(\"fr-hidden\"):e.addClass(\"fr-hidden\")},callback:function(){var e=this.link.get();e&&(-1!==e.href.indexOf(\"mailto:\")?this.o_win.open(e.href).close():oc.pageLookup&&-1!==e.href.indexOf(\"october://\")?this.o_win.open(oc.pageLookup.processLink(e.href),\"_blank\",\"noopener\"):this.o_win.open(e.href,\"_blank\",\"noopener\"),this.popups.hide(\"link.edit\"))},plugin:\"link\"}),e.FE.DefineIcon(\"linkEdit\",{NAME:\"edit\"}),e.FE.RegisterCommand(\"linkEdit\",{title:\"Edit Link\",undo:!1,refreshAfterCallback:!1,popup:!0,callback:function(){this.link.update()},refresh:function(e){this.link.get()?e.removeClass(\"fr-hidden\"):e.addClass(\"fr-hidden\")},plugin:\"link\"}),e.FE.DefineIcon(\"linkRemove\",{NAME:\"unlink\"}),e.FE.RegisterCommand(\"linkRemove\",{title:\"Unlink\",callback:function(){this.link.remove()},refresh:function(e){this.link.get()?e.removeClass(\"fr-hidden\"):e.addClass(\"fr-hidden\")},plugin:\"link\"}),e.FE.DefineIcon(\"linkBack\",{NAME:\"arrow-left\"}),e.FE.RegisterCommand(\"linkBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.link.back()},refresh:function(e){var t=this.link.get()&&this.doc.hasFocus();(this.image?this.image.get():null)||t||this.opts.toolbarInline?(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\")):(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\"))},plugin:\"link\"}),e.FE.DefineIcon(\"linkList\",{NAME:\"search\"}),e.FE.RegisterCommand(\"linkList\",{title:\"Choose Link\",type:\"dropdown\",focus:!1,undo:!1,refreshAfterCallback:!1,html:function(){for(var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.linkList,n=0;n<t.length;n++)e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"linkList\" data-param1=\"'+n+'\">'+(t[n].displayText||t[n].text)+\"</a></li>\";return e+=\"</ul>\"},callback:function(e,t){this.link.usePredefined(t)},plugin:\"link\"}),e.FE.RegisterCommand(\"linkInsert\",{focus:!1,refreshAfterCallback:!1,callback:function(){this.link.insertCallback()},refresh:function(e){this.link.get()?e.text(this.language.translate(\"Update\")):e.text(this.language.translate(\"Insert\"))},plugin:\"link\"}),e.FE.DefineIcon(\"imageLink\",{NAME:\"link\"}),e.FE.RegisterCommand(\"imageLink\",{title:\"Insert Link\",undo:!1,focus:!1,popup:!0,callback:function(){this.link.imageLink()},refresh:function(e){var t;this.link.get()?((t=e.prev()).hasClass(\"fr-separator\")&&t.removeClass(\"fr-hidden\"),e.addClass(\"fr-hidden\")):((t=e.prev()).hasClass(\"fr-separator\")&&t.addClass(\"fr-hidden\"),e.removeClass(\"fr-hidden\"))},plugin:\"link\"}),e.FE.DefineIcon(\"linkStyle\",{NAME:\"magic\"}),e.FE.RegisterCommand(\"linkStyle\",{title:\"Style\",type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.linkStyles;for(var n in t)t.hasOwnProperty(n)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"linkStyle\" data-param1=\"'+n+'\">'+this.language.translate(t[n])+\"</a></li>\");return e+=\"</ul>\"},callback:function(e,t){this.link.applyStyle(t)},refreshOnShow:function(t,n){var o=this.link.get();if(o){var r=e(o);n.find(\".fr-command\").each((function(){var t=e(this).data(\"param1\"),n=r.hasClass(t);e(this).toggleClass(\"fr-active\",n).attr(\"aria-selected\",n)}))}},refresh:function(e){this.link.get()?e.removeClass(\"fr-hidden\"):e.addClass(\"fr-hidden\")},plugin:\"link\"})}(jQuery),function(e){e.extend(e.FE.POPUP_TEMPLATES,{\"table.insert\":\"[_BUTTONS_][_ROWS_COLUMNS_]\",\"table.edit\":\"[_BUTTONS_]\",\"table.colors\":\"[_BUTTONS_][_COLORS_][_CUSTOM_COLOR_]\"}),e.extend(e.FE.DEFAULTS,{tableInsertMaxSize:10,tableEditButtons:[\"tableHeader\",\"tableRemove\",\"|\",\"tableRows\",\"tableColumns\",\"tableStyle\",\"-\",\"tableCells\",\"tableCellBackground\",\"tableCellVerticalAlign\",\"tableCellHorizontalAlign\",\"tableCellStyle\"],tableInsertButtons:[\"tableBack\",\"|\"],tableResizer:!0,tableDefaultWidth:\"100%\",tableResizerOffset:5,tableResizingLimit:30,tableColorsButtons:[\"tableBack\",\"|\"],tableColors:[\"#61BD6D\",\"#1ABC9C\",\"#54ACD2\",\"#2C82C9\",\"#9365B8\",\"#475577\",\"#CCCCCC\",\"#41A85F\",\"#00A885\",\"#3D8EB9\",\"#2969B0\",\"#553982\",\"#28324E\",\"#000000\",\"#F7DA64\",\"#FBA026\",\"#EB6B56\",\"#E25041\",\"#A38F84\",\"#EFEFEF\",\"#FFFFFF\",\"#FAC51C\",\"#F37934\",\"#D14841\",\"#B8312F\",\"#7C706B\",\"#D1D5D8\",\"REMOVE\"],tableColorsStep:7,tableCellStyles:{\"fr-highlighted\":\"Highlighted\",\"fr-thick\":\"Thick\"},tableStyles:{\"fr-dashed-borders\":\"Dashed Borders\",\"fr-alternate-rows\":\"Alternate Rows\"},tableCellMultipleStyles:!0,tableMultipleStyles:!0,tableInsertHelper:!0,tableInsertHelperOffset:15}),e.FE.PLUGINS.table=function(t){var n,o,r,i,a,s,l;function d(){var e=_();if(e){var n=t.popups.get(\"table.edit\");if(n||(n=g()),n){t.popups.setContainer(\"table.edit\",t.$sc);var o=O(e),r=(o.left+o.right)/2,i=o.bottom;t.popups.show(\"table.edit\",r,i,o.bottom-o.top),t.edit.isDisabled()&&(te().length>1&&t.toolbar.disable(),t.$el.removeClass(\"fr-no-selection\"),t.edit.on(),t.button.bulkRefresh(),t.selection.setAtEnd(t.$el.find(\".fr-selected-cell:last\").get(0)),t.selection.restore())}}}function c(){var n=_();if(n){var o=t.popups.get(\"table.colors\");o||(o=function(){var n=\"\";t.opts.tableColorsButtons.length>0&&(n='<div class=\"fr-buttons fr-table-colors-buttons\">'+t.button.buildList(t.opts.tableColorsButtons)+\"</div>\");var o=\"\";t.opts.colorsHEXInput&&(o='<div class=\"fr-table-colors-hex-layer fr-active fr-layer\" id=\"fr-table-colors-hex-layer-'+t.id+'\"><div class=\"fr-input-line\"><input maxlength=\"7\" id=\"fr-table-colors-hex-layer-text-'+t.id+'\" type=\"text\" placeholder=\"'+t.language.translate(\"HEX Color\")+'\" tabIndex=\"1\" aria-required=\"true\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"tableCellBackgroundCustomColor\" tabIndex=\"2\" role=\"button\">'+t.language.translate(\"OK\")+\"</button></div></div>\");var r={buttons:n,colors:m(),custom_color:o},i=t.popups.create(\"table.colors\",r);return t.events.$on(t.$wp,\"scroll.table-colors\",(function(){t.popups.isVisible(\"table.colors\")&&c()})),function(n){t.events.on(\"popup.tab\",(function(o){var r=e(o.currentTarget);if(!t.popups.isVisible(\"table.colors\")||!r.is(\"span\"))return!0;var i=o.which,a=!0;if(e.FE.KEYCODE.TAB==i){var s=n.find(\".fr-buttons\");a=!t.accessibility.focusToolbar(s,!!o.shiftKey)}else if(e.FE.KEYCODE.ARROW_UP==i||e.FE.KEYCODE.ARROW_DOWN==i||e.FE.KEYCODE.ARROW_LEFT==i||e.FE.KEYCODE.ARROW_RIGHT==i){var l=r.parent().find(\"span.fr-command\"),d=l.index(r),c=t.opts.colorsStep,p=Math.floor(l.length/c),f=d%c,h=Math.floor(d/c)*c+f,u=p*c;e.FE.KEYCODE.ARROW_UP==i?h=((h-c)%u+u)%u:e.FE.KEYCODE.ARROW_DOWN==i?h=(h+c)%u:e.FE.KEYCODE.ARROW_LEFT==i?h=((h-1)%u+u)%u:e.FE.KEYCODE.ARROW_RIGHT==i&&(h=(h+1)%u);var g=e(l.get(h));t.events.disableBlur(),g.focus(),a=!1}else e.FE.KEYCODE.ENTER==i&&(t.button.exec(r),a=!1);return!1===a&&(o.preventDefault(),o.stopPropagation()),a}),!0)}(i),i}()),t.popups.setContainer(\"table.colors\",t.$sc);var r=O(n),i=(r.left+r.right)/2,a=r.bottom;!function(){var e=t.popups.get(\"table.colors\"),n=t.$el.find(\".fr-selected-cell:first\"),o=t.helpers.RGBToHex(n.css(\"background-color\")),r=e.find(\".fr-table-colors-hex-layer input\");e.find(\".fr-selected-color\").removeClass(\"fr-selected-color fr-active-item\"),e.find('span[data-param1=\"'+o+'\"]').addClass(\"fr-selected-color fr-active-item\"),r.val(o).trigger(\"change\")}(),t.popups.show(\"table.colors\",i,a,r.bottom-r.top)}}function p(){0===te().length&&t.toolbar.enable()}function f(n){if(n)return t.popups.onHide(\"table.insert\",(function(){t.popups.get(\"table.insert\").find('.fr-table-size .fr-select-table-size > span[data-row=\"1\"][data-col=\"1\"]').trigger(\"mouseenter\")})),!0;var o=\"\";t.opts.tableInsertButtons.length>0&&(o='<div class=\"fr-buttons\">'+t.button.buildList(t.opts.tableInsertButtons)+\"</div>\");var r={buttons:o,rows_columns:u()},i=t.popups.create(\"table.insert\",r);return t.events.$on(i,\"mouseenter\",\".fr-table-size .fr-select-table-size .fr-table-cell\",(function(t){h(e(t.currentTarget))}),!0),function(n){t.events.$on(n,\"focus\",\"[tabIndex]\",(function(t){h(e(t.currentTarget))})),t.events.on(\"popup.tab\",(function(n){var o=e(n.currentTarget);if(!t.popups.isVisible(\"table.insert\")||!o.is(\"span, a\"))return!0;var r,i=n.which;if(e.FE.KEYCODE.ARROW_UP==i||e.FE.KEYCODE.ARROW_DOWN==i||e.FE.KEYCODE.ARROW_LEFT==i||e.FE.KEYCODE.ARROW_RIGHT==i){if(o.is(\"span.fr-table-cell\")){var a=o.parent().find(\"span.fr-table-cell\"),s=a.index(o),l=t.opts.tableInsertMaxSize,d=s%l,c=Math.floor(s/l);e.FE.KEYCODE.ARROW_UP==i?c=Math.max(0,c-1):e.FE.KEYCODE.ARROW_DOWN==i?c=Math.min(t.opts.tableInsertMaxSize-1,c+1):e.FE.KEYCODE.ARROW_LEFT==i?d=Math.max(0,d-1):e.FE.KEYCODE.ARROW_RIGHT==i&&(d=Math.min(t.opts.tableInsertMaxSize-1,d+1));var p=c*l+d,f=e(a.get(p));h(f),t.events.disableBlur(),f.focus(),r=!1}}else e.FE.KEYCODE.ENTER==i&&(t.button.exec(o),r=!1);return!1===r&&(n.preventDefault(),n.stopPropagation()),r}),!0)}(i),i}function h(e){var n=e.data(\"row\"),o=e.data(\"col\"),r=e.parent();r.siblings(\".fr-table-size-info\").html(n+\" &times; \"+o),r.find(\"> span\").removeClass(\"hover fr-active-item\");for(var i=1;i<=t.opts.tableInsertMaxSize;i++)for(var a=0;a<=t.opts.tableInsertMaxSize;a++){var s=r.find('> span[data-row=\"'+i+'\"][data-col=\"'+a+'\"]');i<=n&&a<=o?s.addClass(\"hover\"):i<=n+1||i<=2&&!t.helpers.isMobile()?s.css(\"display\",\"inline-block\"):i>2&&!t.helpers.isMobile()&&s.css(\"display\",\"none\")}e.addClass(\"fr-active-item\")}function u(){for(var e='<div class=\"fr-table-size\"><div class=\"fr-table-size-info\">1 &times; 1</div><div class=\"fr-select-table-size\">',n=1;n<=t.opts.tableInsertMaxSize;n++){for(var o=1;o<=t.opts.tableInsertMaxSize;o++){var r=\"inline-block\";n>2&&!t.helpers.isMobile()&&(r=\"none\");var i=\"fr-table-cell \";1==n&&1==o&&(i+=\" hover\"),e+='<span class=\"fr-command '+i+'\" tabIndex=\"-1\" data-cmd=\"tableInsert\" data-row=\"'+n+'\" data-col=\"'+o+'\" data-param1=\"'+n+'\" data-param2=\"'+o+'\" style=\"display: '+r+';\" role=\"button\"><span></span><span class=\"fr-sr-only\">'+n+\" &times; \"+o+\"&nbsp;&nbsp;&nbsp;</span></span>\"}e+='<div class=\"new-line\"></div>'}return e+=\"</div></div>\"}function g(e){if(e)return t.popups.onHide(\"table.edit\",p),!0;if(t.opts.tableEditButtons.length>0){var n={buttons:'<div class=\"fr-buttons\">'+t.button.buildList(t.opts.tableEditButtons)+\"</div>\"},o=t.popups.create(\"table.edit\",n);return t.events.$on(t.$wp,\"scroll.table-edit\",(function(){t.popups.isVisible(\"table.edit\")&&d()})),o}return!1}function m(){for(var e='<div class=\"fr-table-colors\">',n=0;n<t.opts.tableColors.length;n++)0!==n&&n%t.opts.tableColorsStep==0&&(e+=\"<br>\"),\"REMOVE\"!=t.opts.tableColors[n]?e+='<span class=\"fr-command\" style=\"background: '+t.opts.tableColors[n]+';\" tabIndex=\"-1\" role=\"button\" data-cmd=\"tableCellBackgroundColor\" data-param1=\"'+t.opts.tableColors[n]+'\"><span class=\"fr-sr-only\">'+t.language.translate(\"Color\")+\" \"+t.opts.tableColors[n]+\"&nbsp;&nbsp;&nbsp;</span></span>\":e+='<span class=\"fr-command\" data-cmd=\"tableCellBackgroundColor\" tabIndex=\"-1\" role=\"button\" data-param1=\"REMOVE\" title=\"'+t.language.translate(\"Clear Formatting\")+'\">'+t.icon.create(\"tableColorRemove\")+'<span class=\"fr-sr-only\">'+t.language.translate(\"Clear Formatting\")+\"</span></span>\";return e+=\"</div>\"}function v(){if(te().length>0){var e=ne();t.selection.setBefore(e.get(0))||t.selection.setAfter(e.get(0)),t.selection.restore(),t.popups.hide(\"table.edit\"),e.remove(),t.toolbar.enable()}}function b(n){var o=ne();if(o.length>0){if(t.$el.find(\"th.fr-selected-cell\").length>0&&\"above\"==n)return;var r,i,a,s=_(),l=R(s);i=\"above\"==n?l.min_i:l.max_i;var c=\"<tr>\";for(r=0;r<s[i].length;r++)if(\"below\"==n&&i<s.length-1&&s[i][r]==s[i+1][r]||\"above\"==n&&i>0&&s[i][r]==s[i-1][r]){if(0===r||r>0&&s[i][r]!=s[i][r-1]){var p=e(s[i][r]);p.attr(\"rowspan\",parseInt(p.attr(\"rowspan\"),10)+1)}}else c+=\"<td><br></td>\";c+=\"</tr>\",a=t.$el.find(\"th.fr-selected-cell\").length>0&&\"below\"==n?e(o.find(\"tbody\").not(o.find(\"table tbody\"))):e(o.find(\"tr\").not(o.find(\"table tr\")).get(i)),\"below\"==n?\"TBODY\"==a.prop(\"tagName\")?a.prepend(c):a.after(c):\"above\"==n&&(a.before(c),t.popups.isVisible(\"table.edit\")&&d())}}function E(e,t,n){var o,r,i,a,s,l=0,d=_(n);if((t=Math.min(t,d[0].length-1))>e)for(r=e;r<=t;r++)if(!(r>e&&d[0][r]==d[0][r-1])&&(a=Math.min(parseInt(d[0][r].getAttribute(\"colspan\"),10)||1,t-e+1))>1&&d[0][r]==d[0][r+1])for(l=a-1,o=1;o<d.length;o++)if(d[o][r]!=d[o-1][r]){for(i=r;i<r+a;i++)if((s=parseInt(d[o][i].getAttribute(\"colspan\"),10)||1)>1&&d[o][i]==d[o][i+1])i+=l=Math.min(l,s-1);else if(!(l=Math.max(0,l-1)))break;if(!l)break}l&&w(d,l,\"colspan\",0,d.length-1,e,t)}function y(e,t,n){var o,r,i,a,s,l=0,d=_(n);if((t=Math.min(t,d.length-1))>e)for(o=e;o<=t;o++)if(!(o>e&&d[o][0]==d[o-1][0])&&(a=Math.min(parseInt(d[o][0].getAttribute(\"rowspan\"),10)||1,t-e+1))>1&&d[o][0]==d[o+1][0])for(l=a-1,r=1;r<d[0].length;r++)if(d[o][r]!=d[o][r-1]){for(i=o;i<o+a;i++)if((s=parseInt(d[i][r].getAttribute(\"rowspan\"),10)||1)>1&&d[i][r]==d[i+1][r])i+=l=Math.min(l,s-1);else if(!(l=Math.max(0,l-1)))break;if(!l)break}l&&w(d,l,\"rowspan\",e,t,0,d[0].length-1)}function w(e,t,n,o,r,i,a){var s,l,d;for(s=o;s<=r;s++)for(l=i;l<=a;l++)s>o&&e[s][l]==e[s-1][l]||l>i&&e[s][l]==e[s][l-1]||(d=parseInt(e[s][l].getAttribute(n),10)||1)>1&&(d-t>1?e[s][l].setAttribute(n,d-t):e[s][l].removeAttribute(n))}function S(e,t,n,o,r){y(e,t,r),E(n,o,r)}function C(e){var n=t.$el.find(\".fr-selected-cell\");\"REMOVE\"!=e?n.css(\"background-color\",t.helpers.HEXtoRGB(e)):n.css(\"background-color\",\"\"),d()}function _(t){var n=[];return null==(t=t||null)&&te().length>0&&(t=ne()),t&&t.find(\"tr:visible\").not(t.find(\"table tr\")).each((function(t,o){var r=e(o),i=0;r.find(\"> th, > td\").each((function(o,r){for(var a=e(r),s=parseInt(a.attr(\"colspan\"),10)||1,l=parseInt(a.attr(\"rowspan\"),10)||1,d=t;d<t+l;d++)for(var c=i;c<i+s;c++)n[d]||(n[d]=[]),n[d][c]?i++:n[d][c]=r;i+=s}))})),n}function T(e,t){for(var n=0;n<t.length;n++)for(var o=0;o<t[n].length;o++)if(t[n][o]==e)return{row:n,col:o}}function k(e,t,n){for(var o=e+1,r=t+1;o<n.length;){if(n[o][t]!=n[e][t]){o--;break}o++}for(o==n.length&&o--;r<n[e].length;){if(n[e][r]!=n[e][t]){r--;break}r++}return r==n[e].length&&r--,{row:o,col:r}}function A(){t.el.querySelector(\".fr-cell-fixed\")&&t.el.querySelector(\".fr-cell-fixed\").classList.remove(\"fr-cell-fixed\"),t.el.querySelector(\".fr-cell-handler\")&&t.el.querySelector(\".fr-cell-handler\").classList.remove(\"fr-cell-handler\")}function x(){var n=t.$el.find(\".fr-selected-cell\");n.length>0&&n.each((function(){var t=e(this);t.removeClass(\"fr-selected-cell\"),\"\"===t.attr(\"class\")&&t.removeAttr(\"class\")})),A()}function N(){t.events.disableBlur(),t.selection.clear(),t.$el.addClass(\"fr-no-selection\"),t.$el.blur(),t.events.enableBlur()}function R(e){var n=t.$el.find(\".fr-selected-cell\");if(n.length>0){var o,r=e.length,i=0,a=e[0].length,s=0;for(o=0;o<n.length;o++){var l=T(n[o],e),d=k(l.row,l.col,e);r=Math.min(l.row,r),i=Math.max(d.row,i),a=Math.min(l.col,a),s=Math.max(d.col,s)}return{min_i:r,max_i:i,min_j:a,max_j:s}}return null}function F(t,n,o,r,i){var a,s,l,d,c=t,p=n,f=o,h=r;for(a=c;a<=p;a++)((parseInt(e(i[a][f]).attr(\"rowspan\"),10)||1)>1||(parseInt(e(i[a][f]).attr(\"colspan\"),10)||1)>1)&&(d=k((l=T(i[a][f],i)).row,l.col,i),c=Math.min(l.row,c),p=Math.max(d.row,p),f=Math.min(l.col,f),h=Math.max(d.col,h)),((parseInt(e(i[a][h]).attr(\"rowspan\"),10)||1)>1||(parseInt(e(i[a][h]).attr(\"colspan\"),10)||1)>1)&&(d=k((l=T(i[a][h],i)).row,l.col,i),c=Math.min(l.row,c),p=Math.max(d.row,p),f=Math.min(l.col,f),h=Math.max(d.col,h));for(s=f;s<=h;s++)((parseInt(e(i[c][s]).attr(\"rowspan\"),10)||1)>1||(parseInt(e(i[c][s]).attr(\"colspan\"),10)||1)>1)&&(d=k((l=T(i[c][s],i)).row,l.col,i),c=Math.min(l.row,c),p=Math.max(d.row,p),f=Math.min(l.col,f),h=Math.max(d.col,h)),((parseInt(e(i[p][s]).attr(\"rowspan\"),10)||1)>1||(parseInt(e(i[p][s]).attr(\"colspan\"),10)||1)>1)&&(d=k((l=T(i[p][s],i)).row,l.col,i),c=Math.min(l.row,c),p=Math.max(d.row,p),f=Math.min(l.col,f),h=Math.max(d.col,h));return c==t&&p==n&&f==o&&h==r?{min_i:t,max_i:n,min_j:o,max_j:r}:F(c,p,f,h,i)}function O(t){var n=R(t),o=e(t[n.min_i][n.min_j]),r=e(t[n.min_i][n.max_j]),i=e(t[n.max_i][n.min_j]);return{left:o.offset().left,right:r.offset().left+r.outerWidth(),top:o.offset().top,bottom:i.offset().top+i.outerHeight()}}function D(n,o){if(e(n).is(o))x(),e(n).addClass(\"fr-selected-cell\");else{N(),t.edit.off();var r=_(),i=T(n,r),a=T(o,r),s=F(Math.min(i.row,a.row),Math.max(i.row,a.row),Math.min(i.col,a.col),Math.max(i.col,a.col),r);x(),n.classList.add(\"fr-cell-fixed\"),o.classList.add(\"fr-cell-handler\");for(var l=s.min_i;l<=s.max_i;l++)for(var d=s.min_j;d<=s.max_j;d++)e(r[l][d]).addClass(\"fr-selected-cell\")}}function $(n){var o=null,r=e(n.target);return\"TD\"==n.target.tagName||\"TH\"==n.target.tagName?o=n.target:r.closest(\"td\").length>0?o=r.closest(\"td\").get(0):r.closest(\"th\").length>0&&(o=r.closest(\"th\").get(0)),0===t.$el.find(o).length?null:o}function L(){x(),t.popups.hide(\"table.edit\")}function M(n){var o=$(n);if(\"false\"==e(o).parents(\"[contenteditable]:not(.fr-element):not(.fr-img-caption):not(body):first\").attr(\"contenteditable\"))return!0;if(te().length>0&&!o&&L(),t.popups.hideAll([\"table.edit\"]),!t.edit.isDisabled()||t.popups.isVisible(\"table.edit\"))if(1!=n.which||1==n.which&&t.helpers.isMac()&&n.ctrlKey)(3==n.which||1==n.which&&t.helpers.isMac()&&n.ctrlKey)&&o&&L();else if(i=!0,o){te().length>0&&!n.shiftKey&&L(),n.stopPropagation(),t.events.trigger(\"image.hideResizer\"),t.events.trigger(\"video.hideResizer\"),r=!0;var s=o.tagName.toLowerCase();n.shiftKey&&t.$el.find(s+\".fr-selected-cell\").length>0?e(t.$el.find(s+\".fr-selected-cell\").closest(\"table\")).is(e(o).closest(\"table\"))?D(a,o):N():((t.keys.ctrlKey(n)||n.shiftKey)&&(te().length>1||0===e(o).find(t.selection.element()).length&&!e(o).is(t.selection.element()))&&N(),a=o,t.opts.tableEditButtons.length>0&&D(a,a))}}function I(o){if(t.popups.areVisible())return!0;if(r||t.$tb.is(o.target)||t.$tb.is(e(o.target).closest(t.$tb.get(0)))||(te().length>0&&t.toolbar.enable(),x()),!(1!=o.which||1==o.which&&t.helpers.isMac()&&o.ctrlKey)){if(i=!1,r)r=!1,$(o)||1!=te().length?te().length>0&&(t.selection.isCollapsed()?d():x()):x();if(l){l=!1,n.removeClass(\"fr-moving\"),t.$el.removeClass(\"fr-no-selection\"),t.edit.on();var a=parseFloat(n.css(\"left\"))+t.opts.tableResizerOffset+t.$wp.offset().left;t.opts.iframe&&(a-=t.$iframe.offset().left),n.data(\"release-position\",a),n.removeData(\"max-left\"),n.removeData(\"max-right\"),function(){var o=n.data(\"origin\"),r=n.data(\"release-position\");if(o!==r){var i=n.data(\"first\"),a=n.data(\"second\"),s=n.data(\"table\"),l=s.outerWidth();if(t.undo.canDo()||t.undo.saveStep(),null!==i&&null!==a){var d,c,p,f=_(s),h=[],u=[],g=[],m=[];for(d=0;d<f.length;d++)c=e(f[d][i]),p=e(f[d][a]),h[d]=c.outerWidth(),g[d]=p.outerWidth(),u[d]=h[d]/l*100,m[d]=g[d]/l*100;for(d=0;d<f.length;d++)if(c=e(f[d][i]),p=e(f[d][a]),f[d][i]!=f[d][a]){var v=(u[d]*(h[d]+r-o)/h[d]).toFixed(4);c.css(\"width\",v+\"%\"),p.css(\"width\",(u[d]+m[d]-v).toFixed(4)+\"%\")}}else{var b,E=s.parent(),y=l/E.width()*100,w=(parseInt(s.css(\"margin-left\"),10)||0)/E.width()*100,S=(parseInt(s.css(\"margin-right\"),10)||0)/E.width()*100;\"rtl\"==t.opts.direction&&0===a||\"rtl\"!=t.opts.direction&&0!==a?(b=(l+r-o)/l*y,s.css(\"margin-right\",\"calc(100% - \"+Math.round(b).toFixed(4)+\"% - \"+Math.round(w).toFixed(4)+\"%)\")):(\"rtl\"==t.opts.direction&&0!==a||\"rtl\"!=t.opts.direction&&0===a)&&(b=(l-r+o)/l*y,s.css(\"margin-left\",\"calc(100% - \"+Math.round(b).toFixed(4)+\"% - \"+Math.round(S).toFixed(4)+\"%)\")),s.css(\"width\",Math.round(b).toFixed(4)+\"%\")}t.selection.restore(),t.undo.saveStep(),t.events.trigger(\"table.resized\",[s.get(0)])}n.removeData(\"origin\"),n.removeData(\"release-position\"),n.removeData(\"first\"),n.removeData(\"second\"),n.removeData(\"table\")}(),H()}}}function B(n){if(!0===r&&t.opts.tableEditButtons.length>0){if(e(n.currentTarget).closest(\"table\").is(ne())){if(\"TD\"==n.currentTarget.tagName&&0===t.$el.find(\"th.fr-selected-cell\").length)return void D(a,n.currentTarget);if(\"TH\"==n.currentTarget.tagName&&0===t.$el.find(\"td.fr-selected-cell\").length)return void D(a,n.currentTarget)}N()}}function P(n,o,r,i){for(var a,s=o;s!=t.el&&\"TD\"!=s.tagName&&\"TH\"!=s.tagName&&(\"up\"==i?a=s.previousElementSibling:\"down\"==i&&(a=s.nextElementSibling),!a);)s=s.parentNode;\"TD\"==s.tagName||\"TH\"==s.tagName?function(n,o){for(var r=n;r&&\"TABLE\"!=r.tagName&&r.parentNode!=t.el;)r=r.parentNode;if(r&&\"TABLE\"==r.tagName){var i=_(e(r));\"up\"==o?K(T(n,i),r,i):\"down\"==o&&U(T(n,i),r,i)}}(s,i):a&&(\"up\"==i&&t.selection.setAtEnd(a),\"down\"==i&&t.selection.setAtStart(a))}function K(e,n,o){e.row>0?t.selection.setAtEnd(o[e.row-1][e.col]):P(0,n,0,\"up\")}function U(e,n,o){var r=parseInt(o[e.row][e.col].getAttribute(\"rowspan\"),10)||1;e.row<o.length-r?t.selection.setAtStart(o[e.row+r][e.col]):P(0,n,0,\"down\")}function H(){n&&(n.find(\"div\").css(\"opacity\",0),n.css(\"top\",0),n.css(\"left\",0),n.css(\"height\",0),n.find(\"div\").css(\"height\",0),n.hide())}function z(){o&&o.removeClass(\"fr-visible\").css(\"left\",\"-9999px\")}function W(o,r){var i=e(r),a=i.closest(\"table\"),s=a.parent();if(r&&\"TD\"!=r.tagName&&\"TH\"!=r.tagName&&(i.closest(\"td\").length>0?r=i.closest(\"td\"):i.closest(\"th\").length>0&&(r=i.closest(\"th\"))),!r||\"TD\"!=r.tagName&&\"TH\"!=r.tagName)n&&i.get(0)!=n.get(0)&&i.parent().get(0)!=n.get(0)&&t.core.sameInstance(n)&&H();else{if(i=e(r),0===t.$el.find(i).length)return!1;var d=i.offset().left-1,c=d+i.outerWidth();if(Math.abs(o.pageX-d)<=t.opts.tableResizerOffset||Math.abs(c-o.pageX)<=t.opts.tableResizerOffset){var p,f,h,u,g,m=_(a),v=T(r,m),b=k(v.row,v.col,m),E=a.offset().top,y=a.outerHeight()-1;\"rtl\"!=t.opts.direction?o.pageX-d<=t.opts.tableResizerOffset?(h=d,v.col>0?(u=d-j(v.col-1,m)+t.opts.tableResizingLimit,g=d+j(v.col,m)-t.opts.tableResizingLimit,p=v.col-1,f=v.col):(p=null,f=0,u=a.offset().left-1-parseInt(a.css(\"margin-left\"),10),g=a.offset().left-1+a.width()-m[0].length*t.opts.tableResizingLimit)):c-o.pageX<=t.opts.tableResizerOffset&&(h=c,b.col<m[b.row].length&&m[b.row][b.col+1]?(u=c-j(b.col,m)+t.opts.tableResizingLimit,g=c+j(b.col+1,m)-t.opts.tableResizingLimit,p=b.col,f=b.col+1):(p=b.col,f=null,u=a.offset().left-1+m[0].length*t.opts.tableResizingLimit,g=s.offset().left-1+s.width()+parseFloat(s.css(\"padding-left\")))):c-o.pageX<=t.opts.tableResizerOffset?(h=c,v.col>0?(u=c-j(v.col,m)+t.opts.tableResizingLimit,g=c+j(v.col-1,m)-t.opts.tableResizingLimit,p=v.col,f=v.col-1):(p=null,f=0,u=a.offset().left+m[0].length*t.opts.tableResizingLimit,g=s.offset().left-1+s.width()+parseFloat(s.css(\"padding-left\")))):o.pageX-d<=t.opts.tableResizerOffset&&(h=d,b.col<m[b.row].length&&m[b.row][b.col+1]?(u=d-j(b.col+1,m)+t.opts.tableResizingLimit,g=d+j(b.col,m)-t.opts.tableResizingLimit,p=b.col+1,f=b.col):(p=b.col,f=null,u=s.offset().left+parseFloat(s.css(\"padding-left\")),g=a.offset().left-1+a.width()-m[0].length*t.opts.tableResizingLimit)),n||(t.shared.$table_resizer||(t.shared.$table_resizer=e('<div class=\"fr-table-resizer\"><div></div></div>')),n=t.shared.$table_resizer,t.events.$on(n,\"mousedown\",(function(e){return!t.core.sameInstance(n)||(te().length>0&&L(),1==e.which?(t.selection.save(),l=!0,n.addClass(\"fr-moving\"),N(),t.edit.off(),n.find(\"div\").css(\"opacity\",1),!1):void 0)})),t.events.$on(n,\"mousemove\",(function(e){if(!t.core.sameInstance(n))return!0;l&&(t.opts.iframe&&(e.pageX-=t.$iframe.offset().left),Q(e))})),t.events.on(\"shared.destroy\",(function(){n.html(\"\").removeData().remove(),n=null}),!0),t.events.on(\"destroy\",(function(){t.$el.find(\".fr-selected-cell\").removeClass(\"fr-selected-cell\"),n.hide().appendTo(e(\"body:first\"))}),!0)),n.data(\"table\",a),n.data(\"first\",p),n.data(\"second\",f),n.data(\"instance\",t),t.$wp.append(n);var w=h-t.win.pageXOffset-t.opts.tableResizerOffset-t.$wp.offset().left,S=E-t.$wp.offset().top+t.$wp.scrollTop();t.opts.iframe&&(w+=t.$iframe.offset().left,S+=t.$iframe.offset().top,u+=t.$iframe.offset().left,g+=t.$iframe.offset().left),n.data(\"max-left\",u),n.data(\"max-right\",g),n.data(\"origin\",h-t.win.pageXOffset),n.css(\"top\",S),n.css(\"left\",w),n.css(\"height\",y),n.find(\"div\").css(\"height\",y),n.css(\"padding-left\",t.opts.tableResizerOffset),n.css(\"padding-right\",t.opts.tableResizerOffset),n.show()}else t.core.sameInstance(n)&&H()}}function V(n,r){if(t.$box.find(\".fr-line-breaker\").is(\":visible\"))return!1;o||J(),t.$box.append(o),o.data(\"instance\",t);var i,a=e(r).find(\"tr:first\"),s=n.pageX,l=0,d=0;t.opts.iframe&&(l+=t.$iframe.offset().left-t.helpers.scrollLeft(),d+=t.$iframe.offset().top-t.helpers.scrollTop()),a.find(\"th, td\").each((function(){var n=e(this);return n.offset().left<=s&&s<n.offset().left+n.outerWidth()/2?(i=parseInt(o.find(\"a\").css(\"width\"),10),o.css(\"top\",d+n.offset().top-t.$box.offset().top-i-5),o.css(\"left\",l+n.offset().left-t.$box.offset().left-i/2),o.data(\"selected-cell\",n),o.data(\"position\",\"before\"),o.addClass(\"fr-visible\"),!1):n.offset().left+n.outerWidth()/2<=s&&s<n.offset().left+n.outerWidth()?(i=parseInt(o.find(\"a\").css(\"width\"),10),o.css(\"top\",d+n.offset().top-t.$box.offset().top-i-5),o.css(\"left\",l+n.offset().left-t.$box.offset().left+n.outerWidth()-i/2),o.data(\"selected-cell\",n),o.data(\"position\",\"after\"),o.addClass(\"fr-visible\"),!1):void 0}))}function Y(n,r){if(t.$box.find(\".fr-line-breaker\").is(\":visible\"))return!1;o||J(),t.$box.append(o),o.data(\"instance\",t);var i,a=e(r),s=n.pageY,l=0,d=0;t.opts.iframe&&(l+=t.$iframe.offset().left-t.helpers.scrollLeft(),d+=t.$iframe.offset().top-t.helpers.scrollTop()),a.find(\"tr\").each((function(){var n=e(this);return n.offset().top<=s&&s<n.offset().top+n.outerHeight()/2?(i=parseInt(o.find(\"a\").css(\"width\"),10),o.css(\"top\",d+n.offset().top-t.$box.offset().top-i/2),o.css(\"left\",l+n.offset().left-t.$box.offset().left-i-5),o.data(\"selected-cell\",n.find(\"td:first\")),o.data(\"position\",\"above\"),o.addClass(\"fr-visible\"),!1):n.offset().top+n.outerHeight()/2<=s&&s<n.offset().top+n.outerHeight()?(i=parseInt(o.find(\"a\").css(\"width\"),10),o.css(\"top\",d+n.offset().top-t.$box.offset().top+n.outerHeight()-i/2),o.css(\"left\",l+n.offset().left-t.$box.offset().left-i-5),o.data(\"selected-cell\",n.find(\"td:first\")),o.data(\"position\",\"below\"),o.addClass(\"fr-visible\"),!1):void 0}))}function q(n){s=null;var r=t.doc.elementFromPoint(n.pageX-t.win.pageXOffset,n.pageY-t.win.pageYOffset);t.opts.tableResizer&&(!t.popups.areVisible()||t.popups.areVisible()&&t.popups.isVisible(\"table.edit\"))&&W(n,r),!t.opts.tableInsertHelper||t.popups.areVisible()||t.$tb.hasClass(\"fr-inline\")&&t.$tb.is(\":visible\")||function(n,r){if(0===te().length){var i,a,s;if(r&&(\"HTML\"==r.tagName||\"BODY\"==r.tagName||t.node.isElement(r)))for(i=1;i<=t.opts.tableInsertHelperOffset;i++){if(a=t.doc.elementFromPoint(n.pageX-t.win.pageXOffset,n.pageY-t.win.pageYOffset+i),e(a).hasClass(\"fr-tooltip\"))return!0;if(a&&(\"TH\"==a.tagName||\"TD\"==a.tagName||\"TABLE\"==a.tagName)&&(e(a).parents(\".fr-wrapper\").length||t.opts.iframe))return V(n,e(a).closest(\"table\")),!0;if(s=t.doc.elementFromPoint(n.pageX-t.win.pageXOffset+i,n.pageY-t.win.pageYOffset),e(s).hasClass(\"fr-tooltip\"))return!0;if(s&&(\"TH\"==s.tagName||\"TD\"==s.tagName||\"TABLE\"==s.tagName)&&(e(s).parents(\".fr-wrapper\").length||t.opts.iframe))return Y(n,e(s).closest(\"table\")),!0}t.core.sameInstance(o)&&z()}}(n,r)}function X(){if(l){var e=n.data(\"table\").offset().top-t.win.pageYOffset;t.opts.iframe&&(e+=t.$iframe.offset().top-t.helpers.scrollTop()),n.css(\"top\",e)}}function j(t,n){var o,r=e(n[0][t]).outerWidth();for(o=1;o<n.length;o++)r=Math.min(r,e(n[o][t]).outerWidth());return r}function G(e,t,n){var o,r=0;for(o=e;o<=t;o++)r+=j(o,n);return r}function Q(e){if(te().length>1&&i&&N(),!1===i&&!1===r&&!1===l)s&&clearTimeout(s),t.edit.isDisabled()&&!t.popups.isVisible(\"table.edit\")||(s=setTimeout(q,30,e));else if(l){var o=e.pageX-t.win.pageXOffset;t.opts.iframe&&(o+=t.$iframe.offset().left);var a=n.data(\"max-left\"),d=n.data(\"max-right\");o>=a&&o<=d?n.css(\"left\",o-t.opts.tableResizerOffset-t.$wp.offset().left):o<a&&parseFloat(n.css(\"left\"),10)>a-t.opts.tableResizerOffset?n.css(\"left\",a-t.opts.tableResizerOffset-t.$wp.offset().left):o>d&&parseFloat(n.css(\"left\"),10)<d-t.opts.tableResizerOffset&&n.css(\"left\",d-t.opts.tableResizerOffset-t.$wp.offset().left)}else i&&z()}function Z(n){t.node.isEmpty(n.get(0))?n.prepend(e.FE.MARKERS):n.prepend(e.FE.START_MARKER).append(e.FE.END_MARKER)}function J(){t.shared.$ti_helper||(t.shared.$ti_helper=e('<div class=\"fr-insert-helper\"><a class=\"fr-floating-btn\" role=\"button\" tabIndex=\"-1\" title=\"'+t.language.translate(\"Insert\")+'\"><svg viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M22,16.75 L16.75,16.75 L16.75,22 L15.25,22.000 L15.25,16.75 L10,16.75 L10,15.25 L15.25,15.25 L15.25,10 L16.75,10 L16.75,15.25 L22,15.25 L22,16.75 Z\"/></svg></a></div>'),t.events.bindClick(t.shared.$ti_helper,\"a\",(function(){var e=o.data(\"selected-cell\"),n=o.data(\"position\"),r=o.data(\"instance\")||t;\"before\"==n||\"after\"==n?(t.undo.saveStep(),e.addClass(\"fr-selected-cell\"),r.table.insertColumn(n),e.removeClass(\"fr-selected-cell\"),t.undo.saveStep()):(\"above\"==n||\"below\"==n)&&(t.undo.saveStep(),e.addClass(\"fr-selected-cell\"),r.table.insertRow(n),e.removeClass(\"fr-selected-cell\"),t.undo.saveStep()),z()})),t.events.on(\"shared.destroy\",(function(){t.shared.$ti_helper.html(\"\").removeData().remove(),t.shared.$ti_helper=null}),!0),t.events.$on(t.shared.$ti_helper,\"mousemove\",(function(e){e.stopPropagation()}),!0),t.events.$on(e(t.o_win),\"scroll\",(function(){z()}),!0),t.events.$on(t.$wp,\"scroll\",(function(){z()}),!0)),o=t.shared.$ti_helper,t.events.on(\"destroy\",(function(){o=null})),t.tooltip.bind(t.$box,\".fr-insert-helper > a.fr-floating-btn\")}function ee(){a=null,clearTimeout(s)}function te(){return t.el.querySelectorAll(\".fr-selected-cell\")}function ne(){var n=te();if(n.length){for(var o=n[0];o&&\"TABLE\"!=o.tagName&&o.parentNode!=t.el;)o=o.parentNode;return o&&\"TABLE\"==o.tagName?e(o):e([])}return e([])}return{_init:function(){if(!t.$wp)return!1;if(!t.helpers.isMobile()){i=!1,r=!1,l=!1,t.events.$on(t.$el,\"mousedown\",M),t.popups.onShow(\"image.edit\",(function(){x(),i=!1,r=!1})),t.popups.onShow(\"link.edit\",(function(){x(),i=!1,r=!1})),t.events.on(\"commands.mousedown\",(function(e){e.parents(\".fr-toolbar\").length>0&&x()})),t.events.$on(t.$el,\"mouseenter\",\"th, td\",B),t.events.$on(t.$win,\"mouseup\",I),t.opts.iframe&&t.events.$on(e(t.o_win),\"mouseup\",I),t.events.$on(t.$win,\"mousemove\",Q),t.events.$on(e(t.o_win),\"scroll\",X),t.events.on(\"contentChanged\",(function(){te().length>0&&(d(),t.$el.find(\"img\").on(\"load.selected-cells\",(function(){e(this).off(\"load.selected-cells\"),te().length>0&&d()})))})),t.events.$on(e(t.o_win),\"resize\",(function(){x()})),t.events.on(\"toolbar.esc\",(function(){if(te().length>0)return t.events.disableBlur(),t.events.focus(),!1}),!0),t.events.$on(e(t.o_win),\"keydown\",(function(){i&&r&&(i=!1,r=!1,t.$el.removeClass(\"fr-no-selection\"),t.edit.on(),t.selection.setAtEnd(t.$el.find(\".fr-selected-cell:last\").get(0)),t.selection.restore(),x())})),t.events.$on(t.$el,\"keydown\",(function(n){n.shiftKey?!1===function(n){var o=te();if(o.length>0){var r,i,a=_(),s=n.which;1==o.length?i=r=o[0]:(r=t.el.querySelector(\".fr-cell-fixed\"),i=t.el.querySelector(\".fr-cell-handler\"));var l=T(i,a);if(e.FE.KEYCODE.ARROW_RIGHT==s){if(l.col<a[0].length-1)return D(r,a[l.row][l.col+1]),!1}else if(e.FE.KEYCODE.ARROW_DOWN==s){if(l.row<a.length-1)return D(r,a[l.row+1][l.col]),!1}else if(e.FE.KEYCODE.ARROW_LEFT==s){if(l.col>0)return D(r,a[l.row][l.col-1]),!1}else if(e.FE.KEYCODE.ARROW_UP==s&&l.row>0)return D(r,a[l.row-1][l.col]),!1}}(n)&&setTimeout((function(){d()}),0):function(n){var o=n.which,r=t.selection.blocks();if(r.length&&(\"TD\"==(r=r[0]).tagName||\"TH\"==r.tagName)){for(var i=r;i&&\"TABLE\"!=i.tagName&&i.parentNode!=t.el;)i=i.parentNode;if(i&&\"TABLE\"==i.tagName&&(e.FE.KEYCODE.ARROW_LEFT==o||e.FE.KEYCODE.ARROW_UP==o||e.FE.KEYCODE.ARROW_RIGHT==o||e.FE.KEYCODE.ARROW_DOWN==o)&&(te().length>0&&L(),t.browser.webkit&&(e.FE.KEYCODE.ARROW_UP==o||e.FE.KEYCODE.ARROW_DOWN==o))){var a=t.selection.ranges(0).startContainer;if(a.nodeType==Node.TEXT_NODE&&(e.FE.KEYCODE.ARROW_UP==o&&a.previousSibling||e.FE.KEYCODE.ARROW_DOWN==o&&a.nextSibling))return;n.preventDefault(),n.stopPropagation();var s=_(e(i)),l=T(r,s);e.FE.KEYCODE.ARROW_UP==o?K(l,i,s):e.FE.KEYCODE.ARROW_DOWN==o&&U(l,i,s),t.selection.restore()}}}(n)})),t.events.on(\"keydown\",(function(n){if(!1===function(n){if(n.which==e.FE.KEYCODE.TAB){var o;if(te().length>0)o=t.$el.find(\".fr-selected-cell:last\");else{var r=t.selection.element();\"TD\"==r.tagName||\"TH\"==r.tagName?o=e(r):r!=t.el&&(e(r).parentsUntil(t.$el,\"td\").length>0?o=e(r).parents(\"td:first\"):e(r).parentsUntil(t.$el,\"th\").length>0&&(o=e(r).parents(\"th:first\")))}if(o)return n.preventDefault(),!!(e(t.selection.element()).parentsUntil(t.$el,\"ol, ul\").length>0&&(e(t.selection.element()).parents(\"li\").prev().length>0||e(t.selection.element()).is(\"li\")&&e(t.selection.element()).prev().length>0))||(L(),n.shiftKey?o.prev().length>0?Z(o.prev()):o.closest(\"tr\").length>0&&o.closest(\"tr\").prev().length>0?Z(o.closest(\"tr\").prev().find(\"td:last\")):o.closest(\"tbody\").length>0&&o.closest(\"table\").find(\"thead tr\").length>0&&Z(o.closest(\"table\").find(\"thead tr th:last\")):o.next().length>0?Z(o.next()):o.closest(\"tr\").length>0&&o.closest(\"tr\").next().length>0?Z(o.closest(\"tr\").next().find(\"td:first\")):o.closest(\"thead\").length>0&&o.closest(\"table\").find(\"tbody tr\").length>0?Z(o.closest(\"table\").find(\"tbody tr td:first\")):(o.addClass(\"fr-selected-cell\"),b(\"below\"),x(),Z(o.closest(\"tr\").next().find(\"td:first\"))),t.selection.restore(),!1)}}(n))return!1;var o=te();if(o.length>0){if(o.length>0&&t.keys.ctrlKey(n)&&n.which==e.FE.KEYCODE.A)return x(),t.popups.isVisible(\"table.edit\")&&t.popups.hide(\"table.edit\"),o=[],!0;if(n.which==e.FE.KEYCODE.ESC&&t.popups.isVisible(\"table.edit\"))return x(),t.popups.hide(\"table.edit\"),n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation(),o=[],!1;if(o.length>1&&(n.which==e.FE.KEYCODE.BACKSPACE||n.which==e.FE.KEYCODE.DELETE)){t.undo.saveStep();for(var r=0;r<o.length;r++)e(o[r]).html(\"<br>\"),r==o.length-1&&e(o[r]).prepend(e.FE.MARKERS);return t.selection.restore(),t.undo.saveStep(),o=[],!1}if(o.length>1&&n.which!=e.FE.KEYCODE.F10&&!t.keys.isBrowserAction(n))return n.preventDefault(),o=[],!1}else if(o=[],!1===function(n){if(n.altKey&&n.which==e.FE.KEYCODE.SPACE){var o,r=t.selection.element();if(\"TD\"==r.tagName||\"TH\"==r.tagName?o=r:e(r).closest(\"td\").length>0?o=e(r).closest(\"td\").get(0):e(r).closest(\"th\").length>0&&(o=e(r).closest(\"th\").get(0)),o)return n.preventDefault(),D(o,o),d(),!1}}(n))return!1}),!0);var n=[];t.events.on(\"html.beforeGet\",(function(){n=te();for(var e=0;e<n.length;e++)n[e].className=(n[e].className||\"\").replace(/fr-selected-cell/g,\"\")})),t.events.on(\"html.afterGet\",(function(){for(var e=0;e<n.length;e++)n[e].className=(n[e].className?n[e].className.trim()+\" \":\"\")+\"fr-selected-cell\";n=[]})),f(!0),g(!0)}t.events.on(\"destroy\",ee)},insert:function(n,o){var r,i,a=\"<table \"+(t.opts.tableDefaultWidth?'style=\"width: '+t.opts.tableDefaultWidth+';\" ':\"\")+'class=\"fr-inserted-table\"><tbody>',s=100/o;for(r=0;r<n;r++){for(a+=\"<tr>\",i=0;i<o;i++)a+=\"<td\"+(t.opts.tableDefaultWidth?' style=\"width: '+s.toFixed(4)+'%;\"':\"\")+\">\",0===r&&0===i&&(a+=e.FE.MARKERS),a+=\"<br></td>\";a+=\"</tr>\"}a+=\"</tbody></table>\",t.html.insert(a),t.selection.restore();var l=t.$el.find(\".fr-inserted-table\");l.removeClass(\"fr-inserted-table\"),t.events.trigger(\"table.inserted\",[l.get(0)])},remove:v,insertRow:b,deleteRow:function(){var n=ne();if(n.length>0){var o,r,i,a=_(),s=R(a);if(0===s.min_i&&s.max_i==a.length-1)v();else{for(o=s.max_i;o>=s.min_i;o--){for(i=e(n.find(\"tr\").not(n.find(\"table tr\")).get(o)),r=0;r<a[o].length;r++)if(0===r||a[o][r]!=a[o][r-1]){var l=e(a[o][r]);if(parseInt(l.attr(\"rowspan\"),10)>1){var d=parseInt(l.attr(\"rowspan\"),10)-1;1==d?l.removeAttr(\"rowspan\"):l.attr(\"rowspan\",d)}if(o<a.length-1&&a[o][r]==a[o+1][r]&&(0===o||a[o][r]!=a[o-1][r])){for(var c=a[o][r],p=r;p>0&&a[o][p]==a[o][p-1];)p--;0===p?e(n.find(\"tr\").not(n.find(\"table tr\")).get(o+1)).prepend(c):e(a[o+1][p-1]).after(c)}}var f=i.parent();i.remove(),0===f.find(\"tr\").length&&f.remove(),a=_(n)}S(0,a.length-1,0,a[0].length-1,n),s.min_i>0?t.selection.setAtEnd(a[s.min_i-1][0]):t.selection.setAtEnd(a[0][0]),t.selection.restore(),t.popups.hide(\"table.edit\")}}},insertColumn:function(n){var o=ne();if(o.length>0){var r,i=_(),a=R(i);r=\"before\"==n?a.min_j:a.max_j;var s,l=100/i[0].length,c=100/(i[0].length+1);o.find(\"th, td\").each((function(){(s=e(this)).data(\"old-width\",s.outerWidth()/o.outerWidth()*100)})),o.find(\"tr\").not(o.find(\"table tr\")).each((function(t){for(var o,a=e(this),s=0,d=0;s-1<r;){if(!(o=a.find(\"> th, > td\").get(d))){o=null;break}o==i[t][s]?(s+=parseInt(e(o).attr(\"colspan\"),10)||1,d++):(s+=parseInt(e(i[t][s]).attr(\"colspan\"),10)||1,\"after\"==n&&(o=0===d?-1:a.find(\"> th, > td\").get(d-1)))}var p,f=e(o);if(\"after\"==n&&s-1>r||\"before\"==n&&r>0&&i[t][r]==i[t][r-1]){if(0===t||t>0&&i[t][r]!=i[t-1][r]){var h=parseInt(f.attr(\"colspan\"),10)+1;f.attr(\"colspan\",h),f.css(\"width\",(f.data(\"old-width\")*c/l+c).toFixed(4)+\"%\"),f.removeData(\"old-width\")}}else p=a.find(\"th\").length>0?'<th style=\"width: '+c.toFixed(4)+'%;\"><br></th>':'<td style=\"width: '+c.toFixed(4)+'%;\"><br></td>',-1==o?a.prepend(p):null==o?a.append(p):\"before\"==n?f.before(p):\"after\"==n&&f.after(p)})),o.find(\"th, td\").each((function(){(s=e(this)).data(\"old-width\")&&(s.css(\"width\",(s.data(\"old-width\")*c/l).toFixed(4)+\"%\"),s.removeData(\"old-width\"))})),t.popups.isVisible(\"table.edit\")&&d()}},deleteColumn:function(){var n=ne();if(n.length>0){var o,r,i,a=_(),s=R(a);if(0===s.min_j&&s.max_j==a[0].length-1)v();else{var l=0;for(o=0;o<a.length;o++)for(r=0;r<a[0].length;r++)(i=e(a[o][r])).hasClass(\"fr-selected-cell\")||(i.data(\"old-width\",i.outerWidth()/n.outerWidth()*100),(r<s.min_j||r>s.max_j)&&(l+=i.outerWidth()/n.outerWidth()*100));for(l/=a.length,r=s.max_j;r>=s.min_j;r--)for(o=0;o<a.length;o++)if(0===o||a[o][r]!=a[o-1][r])if(i=e(a[o][r]),(parseInt(i.attr(\"colspan\"),10)||1)>1){var d=parseInt(i.attr(\"colspan\"),10)-1;1==d?i.removeAttr(\"colspan\"):i.attr(\"colspan\",d),i.css(\"width\",(100*(i.data(\"old-width\")-j(r,a))/l).toFixed(4)+\"%\"),i.removeData(\"old-width\")}else{var c=e(i.parent().get(0));i.remove(),0===c.find(\"> th, > td\").length&&(0===c.prev().length||0===c.next().length||c.prev().find(\"> th[rowspan], > td[rowspan]\").length<c.prev().find(\"> th, > td\").length)&&c.remove()}S(0,a.length-1,0,a[0].length-1,n),s.min_j>0?t.selection.setAtEnd(a[s.min_i][s.min_j-1]):t.selection.setAtEnd(a[s.min_i][0]),t.selection.restore(),t.popups.hide(\"table.edit\"),n.find(\"th, td\").each((function(){(i=e(this)).data(\"old-width\")&&(i.css(\"width\",(100*i.data(\"old-width\")/l).toFixed(4)+\"%\"),i.removeData(\"old-width\"))}))}}},mergeCells:function(){if(te().length>1&&(0===t.$el.find(\"th.fr-selected-cell\").length||0===t.$el.find(\"td.fr-selected-cell\").length)){A();var n,o,r=R(_()),i=t.$el.find(\".fr-selected-cell\"),a=e(i[0]),s=a.parent().find(\".fr-selected-cell\"),l=a.closest(\"table\"),c=a.html(),p=0;for(n=0;n<s.length;n++)p+=e(s[n]).outerWidth();for(a.css(\"width\",Math.min(100,p/l.outerWidth()*100).toFixed(4)+\"%\"),r.min_j<r.max_j&&a.attr(\"colspan\",r.max_j-r.min_j+1),r.min_i<r.max_i&&a.attr(\"rowspan\",r.max_i-r.min_i+1),n=1;n<i.length;n++)\"<br>\"!=(o=e(i[n])).html()&&\"\"!==o.html()&&(c+=\"<br>\"+o.html()),o.remove();a.html(c),t.selection.setAtEnd(a.get(0)),t.selection.restore(),t.toolbar.enable(),y(r.min_i,r.max_i,l);var f=l.find(\"tr:empty\");for(n=f.length-1;n>=0;n--)e(f[n]).remove();E(r.min_j,r.max_j,l),d()}},splitCellVertically:function(){if(1==te().length){var n=t.$el.find(\".fr-selected-cell\"),o=parseInt(n.attr(\"colspan\"),10)||1,r=n.parent().outerWidth(),i=n.outerWidth(),a=n.clone().html(\"<br>\"),s=_(),l=T(n.get(0),s);if(o>1){var d=Math.ceil(o/2);i=G(l.col,l.col+d-1,s)/r*100;var c=G(l.col+d,l.col+o-1,s)/r*100;d>1?n.attr(\"colspan\",d):n.removeAttr(\"colspan\"),o-d>1?a.attr(\"colspan\",o-d):a.removeAttr(\"colspan\"),n.css(\"width\",i.toFixed(4)+\"%\"),a.css(\"width\",c.toFixed(4)+\"%\")}else{var p;for(p=0;p<s.length;p++)if(0===p||s[p][l.col]!=s[p-1][l.col]){var f=e(s[p][l.col]);if(!f.is(n)){var h=(parseInt(f.attr(\"colspan\"),10)||1)+1;f.attr(\"colspan\",h)}}i=i/r*100/2,n.css(\"width\",i.toFixed(4)+\"%\"),a.css(\"width\",i.toFixed(4)+\"%\")}n.after(a),x(),t.popups.hide(\"table.edit\")}},splitCellHorizontally:function(){if(1==te().length){var n=t.$el.find(\".fr-selected-cell\"),o=n.parent(),r=n.closest(\"table\"),i=parseInt(n.attr(\"rowspan\"),10),a=_(),s=T(n.get(0),a),l=n.clone().html(\"<br>\");if(i>1){var d=Math.ceil(i/2);d>1?n.attr(\"rowspan\",d):n.removeAttr(\"rowspan\"),i-d>1?l.attr(\"rowspan\",i-d):l.removeAttr(\"rowspan\");for(var c=s.row+d,p=0===s.col?s.col:s.col-1;p>=0&&(a[c][p]==a[c][p-1]||c>0&&a[c][p]==a[c-1][p]);)p--;-1==p?e(r.find(\"tr\").not(r.find(\"table tr\")).get(c)).prepend(l):e(a[c][p]).after(l)}else{var f,h=e(\"<tr>\").append(l);for(f=0;f<a[0].length;f++)if(0===f||a[s.row][f]!=a[s.row][f-1]){var u=e(a[s.row][f]);u.is(n)||u.attr(\"rowspan\",(parseInt(u.attr(\"rowspan\"),10)||1)+1)}o.after(h)}x(),t.popups.hide(\"table.edit\")}},addHeader:function(){var t=ne();if(t.length>0&&0===t.find(\"th\").length){var n,o=\"<thead><tr>\",r=0;for(t.find(\"tr:first > td\").each((function(){var t=e(this);r+=parseInt(t.attr(\"colspan\"),10)||1})),n=0;n<r;n++)o+=\"<th><br></th>\";o+=\"</tr></thead>\",t.prepend(o),d()}},removeHeader:function(){var e=ne(),n=e.find(\"thead\");if(n.length>0)if(0===e.find(\"tbody tr\").length)v();else if(n.remove(),te().length>0)d();else{t.popups.hide(\"table.edit\");var o=e.find(\"tbody tr:first td:first\").get(0);o&&(t.selection.setAtEnd(o),t.selection.restore())}},setBackground:C,showInsertPopup:function(){var n=t.$vtb?t.$vtb.find('[data-cmd=\"richeditor-toolbar-insertTable\"]'):t.$tb.find('.fr-command[data-cmd=\"insertTable\"]');n.is(\":visible\")||(n=e('[data-cmd=\"richeditor-toolbar-insertTable\"]:first'));var o=t.popups.get(\"table.insert\");o||(o=f()),o.hasClass(\"fr-active\")||(t.popups.refresh(\"table.insert\"),t.popups.setContainer(\"table.insert\",t.$sc),t.popups.showElToolbar(\"table.insert\",n))},showEditPopup:d,showColorsPopup:c,back:function(){te().length>0?d():(t.popups.hide(\"table.insert\"),t.toolbar.showInline())},verticalAlign:function(e){t.$el.find(\".fr-selected-cell\").css(\"vertical-align\",e)},horizontalAlign:function(e){t.$el.find(\".fr-selected-cell\").css(\"text-align\",e)},applyStyle:function(e,t,n,o){if(t.length>0){if(!n){var r=Object.keys(o);r.splice(r.indexOf(e),1),t.removeClass(r.join(\" \"))}t.toggleClass(e)}},selectedTable:ne,selectedCells:te,customColor:function(){var e=t.popups.get(\"table.colors\").find(\".fr-table-colors-hex-layer input\");e.length&&C(e.val())},selectCells:D}},e.FE.DefineIcon(\"insertTable\",{NAME:\"table\"}),e.FE.RegisterCommand(\"insertTable\",{title:\"Insert Table\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"table.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"table.insert\")):this.table.showInsertPopup()},plugin:\"table\"}),e.FE.RegisterCommand(\"tableInsert\",{callback:function(e,t,n){this.table.insert(t,n),this.popups.hide(\"table.insert\")}}),e.FE.DefineIcon(\"tableHeader\",{NAME:\"header\",FA5NAME:\"heading\"}),e.FE.RegisterCommand(\"tableHeader\",{title:\"Table Header\",focus:!1,toggle:!0,callback:function(){this.popups.get(\"table.edit\").find('.fr-command[data-cmd=\"tableHeader\"]').hasClass(\"fr-active\")?this.table.removeHeader():this.table.addHeader()},refresh:function(e){var t=this.table.selectedTable();t.length>0&&(0===t.find(\"th\").length?e.removeClass(\"fr-active\").attr(\"aria-pressed\",!1):e.addClass(\"fr-active\").attr(\"aria-pressed\",!0))}}),e.FE.DefineIcon(\"tableRows\",{NAME:\"bars\"}),e.FE.RegisterCommand(\"tableRows\",{type:\"dropdown\",focus:!1,title:\"Row\",options:{above:\"Insert row above\",below:\"Insert row below\",delete:\"Delete row\"},html:function(){var t='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=e.FE.COMMANDS.tableRows.options;for(var o in n)n.hasOwnProperty(o)&&(t+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableRows\" data-param1=\"'+o+'\" title=\"'+this.language.translate(n[o])+'\">'+this.language.translate(n[o])+\"</a></li>\");return t+=\"</ul>\"},callback:function(e,t){\"above\"==t||\"below\"==t?this.table.insertRow(t):this.table.deleteRow()}}),e.FE.DefineIcon(\"tableColumns\",{NAME:\"bars fa-rotate-90\"}),e.FE.RegisterCommand(\"tableColumns\",{type:\"dropdown\",focus:!1,title:\"Column\",options:{before:\"Insert column before\",after:\"Insert column after\",delete:\"Delete column\"},html:function(){var t='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=e.FE.COMMANDS.tableColumns.options;for(var o in n)n.hasOwnProperty(o)&&(t+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableColumns\" data-param1=\"'+o+'\" title=\"'+this.language.translate(n[o])+'\">'+this.language.translate(n[o])+\"</a></li>\");return t+=\"</ul>\"},callback:function(e,t){\"before\"==t||\"after\"==t?this.table.insertColumn(t):this.table.deleteColumn()}}),e.FE.DefineIcon(\"tableCells\",{NAME:\"square-o\",FA5NAME:\"square\"}),e.FE.RegisterCommand(\"tableCells\",{type:\"dropdown\",focus:!1,title:\"Cell\",options:{merge:\"Merge cells\",\"vertical-split\":\"Vertical split\",\"horizontal-split\":\"Horizontal split\"},html:function(){var t='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=e.FE.COMMANDS.tableCells.options;for(var o in n)n.hasOwnProperty(o)&&(t+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableCells\" data-param1=\"'+o+'\" title=\"'+this.language.translate(n[o])+'\">'+this.language.translate(n[o])+\"</a></li>\");return t+=\"</ul>\"},callback:function(e,t){\"merge\"==t?this.table.mergeCells():\"vertical-split\"==t?this.table.splitCellVertically():this.table.splitCellHorizontally()},refreshOnShow:function(e,t){this.$el.find(\".fr-selected-cell\").length>1?(t.find('a[data-param1=\"vertical-split\"]').addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),t.find('a[data-param1=\"horizontal-split\"]').addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),t.find('a[data-param1=\"merge\"]').removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1)):(t.find('a[data-param1=\"merge\"]').addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),t.find('a[data-param1=\"vertical-split\"]').removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1),t.find('a[data-param1=\"horizontal-split\"]').removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1))}}),e.FE.DefineIcon(\"tableRemove\",{NAME:\"trash\"}),e.FE.RegisterCommand(\"tableRemove\",{title:\"Remove Table\",focus:!1,callback:function(){this.table.remove()}}),e.FE.DefineIcon(\"tableStyle\",{NAME:\"paint-brush\"}),e.FE.RegisterCommand(\"tableStyle\",{title:\"Table Style\",type:\"dropdown\",focus:!1,html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.tableStyles;for(var n in t)t.hasOwnProperty(n)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableStyle\" data-param1=\"'+n+'\" title=\"'+this.language.translate(t[n])+'\">'+this.language.translate(t[n])+\"</a></li>\");return e+=\"</ul>\"},callback:function(e,t){this.table.applyStyle(t,this.$el.find(\".fr-selected-cell\").closest(\"table\"),this.opts.tableMultipleStyles,this.opts.tableStyles)},refreshOnShow:function(t,n){var o=this.$el.find(\".fr-selected-cell\").closest(\"table\");o&&n.find(\".fr-command\").each((function(){var t=e(this).data(\"param1\"),n=o.hasClass(t);e(this).toggleClass(\"fr-active\",n).attr(\"aria-selected\",n)}))}}),e.FE.DefineIcon(\"tableCellBackground\",{NAME:\"tint\"}),e.FE.RegisterCommand(\"tableCellBackground\",{title:\"Cell Background\",focus:!1,popup:!0,callback:function(){this.table.showColorsPopup()}}),e.FE.RegisterCommand(\"tableCellBackgroundColor\",{undo:!0,focus:!1,callback:function(e,t){this.table.setBackground(t)}}),e.FE.DefineIcon(\"tableBack\",{NAME:\"arrow-left\"}),e.FE.RegisterCommand(\"tableBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,callback:function(){this.table.back()},refresh:function(e){0!==this.table.selectedCells().length||this.opts.toolbarInline?(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\")):(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\"))}}),e.FE.DefineIcon(\"tableCellVerticalAlign\",{NAME:\"arrows-v\",FA5NAME:\"arrows-alt-v\"}),e.FE.RegisterCommand(\"tableCellVerticalAlign\",{type:\"dropdown\",focus:!1,title:\"Vertical Align\",options:{Top:\"Align Top\",Middle:\"Align Middle\",Bottom:\"Align Bottom\"},html:function(){var t='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=e.FE.COMMANDS.tableCellVerticalAlign.options;for(var o in n)n.hasOwnProperty(o)&&(t+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableCellVerticalAlign\" data-param1=\"'+o.toLowerCase()+'\" title=\"'+this.language.translate(n[o])+'\">'+this.language.translate(o)+\"</a></li>\");return t+=\"</ul>\"},callback:function(e,t){this.table.verticalAlign(t)},refreshOnShow:function(e,t){t.find('.fr-command[data-param1=\"'+this.$el.find(\".fr-selected-cell\").css(\"vertical-align\")+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}}),e.FE.DefineIcon(\"tableCellHorizontalAlign\",{NAME:\"align-left\"}),e.FE.DefineIcon(\"align-left\",{NAME:\"align-left\"}),e.FE.DefineIcon(\"align-right\",{NAME:\"align-right\"}),e.FE.DefineIcon(\"align-center\",{NAME:\"align-center\"}),e.FE.DefineIcon(\"align-justify\",{NAME:\"align-justify\"}),e.FE.RegisterCommand(\"tableCellHorizontalAlign\",{type:\"dropdown\",focus:!1,title:\"Horizontal Align\",options:{left:\"Align Left\",center:\"Align Center\",right:\"Align Right\",justify:\"Align Justify\"},html:function(){var t='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=e.FE.COMMANDS.tableCellHorizontalAlign.options;for(var o in n)n.hasOwnProperty(o)&&(t+='<li role=\"presentation\"><a class=\"fr-command fr-title\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableCellHorizontalAlign\" data-param1=\"'+o+'\" title=\"'+this.language.translate(n[o])+'\">'+this.icon.create(\"align-\"+o)+'<span class=\"fr-sr-only\">'+this.language.translate(n[o])+\"</span></a></li>\");return t+=\"</ul>\"},callback:function(e,t){this.table.horizontalAlign(t)},refresh:function(t){var n=this.table.selectedCells();n.length&&t.find(\"> *:first\").replaceWith(this.icon.create(\"align-\"+this.helpers.getAlignment(e(n[0]))))},refreshOnShow:function(e,t){t.find('.fr-command[data-param1=\"'+this.helpers.getAlignment(this.$el.find(\".fr-selected-cell:first\"))+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}}),e.FE.DefineIcon(\"tableCellStyle\",{NAME:\"magic\"}),e.FE.RegisterCommand(\"tableCellStyle\",{title:\"Cell Style\",type:\"dropdown\",focus:!1,html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.tableCellStyles;for(var n in t)t.hasOwnProperty(n)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableCellStyle\" data-param1=\"'+n+'\" title=\"'+this.language.translate(t[n])+'\">'+this.language.translate(t[n])+\"</a></li>\");return e+=\"</ul>\"},callback:function(e,t){this.table.applyStyle(t,this.$el.find(\".fr-selected-cell\"),this.opts.tableCellMultipleStyles,this.opts.tableCellStyles)},refreshOnShow:function(t,n){var o=this.$el.find(\".fr-selected-cell:first\");o&&n.find(\".fr-command\").each((function(){var t=e(this).data(\"param1\"),n=o.hasClass(t);e(this).toggleClass(\"fr-active\",n).attr(\"aria-selected\",n)}))}}),e.FE.RegisterCommand(\"tableCellBackgroundCustomColor\",{title:\"OK\",undo:!0,callback:function(){this.table.customColor()}}),e.FE.DefineIcon(\"tableColorRemove\",{NAME:\"eraser\"})}(jQuery),function(e){\"use strict\";e.extend(e.FE.POPUP_TEMPLATES,{\"video.insert\":\"[_BUTTONS_][_BY_URL_LAYER_][_EMBED_LAYER_]\",\"video.edit\":\"[_BUTTONS_]\",\"video.size\":\"[_BUTTONS_][_SIZE_LAYER_]\"}),e.extend(e.FE.DEFAULTS,{videoInsertButtons:[\"videoBack\",\"|\",\"videoByURL\",\"videoEmbed\"],videoEditButtons:[\"videoDisplay\",\"videoAlign\",\"videoSize\",\"videoRemove\"],videoResize:!0,videoSizeButtons:[\"videoBack\",\"|\"],videoSplitHTML:!1,videoTextNear:!0,videoDefaultAlign:\"center\",videoDefaultDisplay:\"block\",videoMove:!0}),e.FE.VIDEO_PROVIDERS=[{test_regex:/^.*((youtu.be)|(youtube.com))\\/((v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))?\\??v?=?([^#\\&\\?]*).*/,url_regex:/(?:https?:\\/\\/)?(?:www\\.)?(?:m\\.)?(?:youtube\\.com|youtu\\.be)\\/(?:watch\\?v=|embed\\/)?([0-9a-zA-Z_\\-]+)(.+)?/g,url_text:\"//www.youtube.com/embed/$1\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}?wmode=opaque\" frameborder=\"0\" allowfullscreen></iframe>'},{test_regex:/^.*(vimeo\\.com\\/)((channels\\/[A-z]+\\/)|(groups\\/[A-z]+\\/videos\\/))?([0-9]+)/,url_regex:/(?:https?:\\/\\/)?(?:www\\.)?(?:vimeo\\.com)\\/(?:channels\\/[A-z]+\\/|groups\\/[A-z]+\\/videos\\/)?(.+)/g,url_text:\"//player.vimeo.com/video/$1\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}\" frameborder=\"0\" allowfullscreen></iframe>'},{test_regex:/^.+(dailymotion.com|dai.ly)\\/(video|hub)?\\/?([^_]+)[^#]*(#video=([^_&]+))?/,url_regex:/(?:https?:\\/\\/)?(?:www\\.)?(?:dailymotion\\.com|dai\\.ly)\\/(?:video|hub)?\\/?(.+)/g,url_text:\"//www.dailymotion.com/embed/video/$1\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}\" frameborder=\"0\" allowfullscreen></iframe>'},{test_regex:/^.+(screen.yahoo.com)\\/[^_&]+/,url_regex:\"\",url_text:\"\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}?format=embed\" frameborder=\"0\" allowfullscreen=\"true\" mozallowfullscreen=\"true\" webkitallowfullscreen=\"true\" allowtransparency=\"true\"></iframe>'},{test_regex:/^.+(rutube.ru)\\/[^_&]+/,url_regex:/(?:https?:\\/\\/)?(?:www\\.)?(?:rutube\\.ru)\\/(?:video)?\\/?(.+)/g,url_text:\"//rutube.ru/play/embed/$1\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}\" frameborder=\"0\" allowfullscreen=\"true\" mozallowfullscreen=\"true\" webkitallowfullscreen=\"true\" allowtransparency=\"true\"></iframe>'}],e.FE.VIDEO_EMBED_REGEX=/^\\W*((<iframe.*><\\/iframe>)|(<embed.*>))\\W*$/i,e.FE.PLUGINS.video=function(t){var n,o,r,i,a;function s(){var e=t.popups.get(\"video.insert\");e.find(\".fr-video-by-url-layer input\").val(\"\").trigger(\"change\"),e.find(\".fr-video-embed-layer textarea\").val(\"\").trigger(\"change\")}function l(){var n=t.popups.get(\"video.edit\");n||(n=function(){var e=\"\";t.opts.videoEditButtons.length>=1&&(e+='<div class=\"fr-buttons\">',e+=t.button.buildList(t.opts.videoEditButtons),e+=\"</div>\");var n={buttons:e},o=t.popups.create(\"video.edit\",n);return t.events.$on(t.$wp,\"scroll.video-edit\",(function(){i&&t.popups.isVisible(\"video.edit\")&&l()})),o}()),t.popups.setContainer(\"video.edit\",e(t.opts.scrollableContainer)),t.popups.refresh(\"video.edit\");var o=i.find(\"iframe, embed, video\");t.popups.showEl(\"video.edit\",o)}function d(e){if(e)return t.popups.onRefresh(\"video.insert\",s),!0;var n=\"\";t.opts.videoInsertButtons.length>1&&(n='<div class=\"fr-buttons\">'+t.button.buildList(t.opts.videoInsertButtons)+\"</div>\");var o=\"\";t.opts.videoInsertButtons.indexOf(\"videoByURL\")>=0&&(o='<div class=\"fr-video-by-url-layer fr-layer fr-active\" id=\"fr-video-by-url-layer-'+t.id+'\"><div class=\"fr-input-line\"><input type=\"text\" placeholder=\"http://\" tabIndex=\"1\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"videoInsertByURL\" tabIndex=\"2\">'+t.language.translate(\"Insert\")+\"</button></div></div>\");var r=\"\";t.opts.videoInsertButtons.indexOf(\"videoEmbed\")>=0&&(r='<div class=\"fr-video-embed-layer fr-layer\" id=\"fr-video-embed-layer-'+t.id+'\"><div class=\"fr-input-line\"><textarea type=\"text\" placeholder=\"'+t.language.translate(\"Embedded Code\")+'\" tabIndex=\"1\" rows=\"5\"></textarea></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"videoInsertEmbed\" tabIndex=\"2\">'+t.language.translate(\"Insert\")+\"</button></div></div>\");var i={buttons:n,by_url_layer:o,embed_layer:r};return t.popups.create(\"video.insert\",i)}function c(e){t.events.focus(!0),t.selection.restore(),t.html.insert('<span contenteditable=\"false\" draggable=\"true\" class=\"fr-jiv fr-video fr-dv'+t.opts.videoDefaultDisplay[0]+(\"center\"!=t.opts.videoDefaultAlign?\" fr-fv\"+t.opts.videoDefaultAlign[0]:\"\")+'\">'+e+\"</span>\",!1,t.opts.videoSplitHTML),t.popups.hide(\"video.insert\");var n=t.$el.find(\".fr-jiv\");n.removeClass(\"fr-jiv\"),n.toggleClass(\"fr-draggable\",t.opts.videoMove),t.events.trigger(\"video.inserted\",[n])}function p(i){if(!t.core.sameInstance(r))return!0;i.preventDefault(),i.stopPropagation();var a=i.pageX||(i.originalEvent.touches?i.originalEvent.touches[0].pageX:null),s=i.pageY||(i.originalEvent.touches?i.originalEvent.touches[0].pageY:null);if(!a||!s)return!1;t.undo.canDo()||t.undo.saveStep(),(o=e(this)).data(\"start-x\",a),o.data(\"start-y\",s),n.show(),t.popups.hideAll(),E()}function f(e){if(!t.core.sameInstance(r))return!0;if(o){e.preventDefault();var n=e.pageX||(e.originalEvent.touches?e.originalEvent.touches[0].pageX:null),a=e.pageY||(e.originalEvent.touches?e.originalEvent.touches[0].pageY:null);if(!n||!a)return!1;var s=o.data(\"start-x\"),l=o.data(\"start-y\");o.data(\"start-x\",n),o.data(\"start-y\",a);var d=n-s,c=a-l,p=i.find(\"iframe, embed, video\"),f=p.width(),h=p.height();(o.hasClass(\"fr-hnw\")||o.hasClass(\"fr-hsw\"))&&(d=0-d),(o.hasClass(\"fr-hnw\")||o.hasClass(\"fr-hne\"))&&(c=0-c),p.css(\"width\",f+d),p.css(\"height\",h+c),p.removeAttr(\"width\"),p.removeAttr(\"height\"),g()}}function h(e){if(!t.core.sameInstance(r))return!0;o&&i&&(e&&e.stopPropagation(),o=null,n.hide(),g(),l(),t.undo.saveStep())}function u(e){return'<div class=\"fr-handler fr-h'+e+'\"></div>'}function g(){var o;r||(t.shared.$video_resizer?(r=t.shared.$video_resizer,n=t.shared.$vid_overlay,t.events.on(\"destroy\",(function(){r.removeClass(\"fr-active\").appendTo(e(\"body\"))}),!0)):(t.shared.$video_resizer=e('<div class=\"fr-video-resizer\"></div>'),r=t.shared.$video_resizer,t.events.$on(r,\"mousedown\",(function(e){e.stopPropagation()}),!0),t.opts.videoResize&&(r.append(u(\"nw\")+u(\"ne\")+u(\"sw\")+u(\"se\")),t.shared.$vid_overlay=e('<div class=\"fr-video-overlay\"></div>'),n=t.shared.$vid_overlay,o=r.get(0).ownerDocument,e(o).find(\"body\").append(n))),t.events.on(\"shared.destroy\",(function(){r.html(\"\").removeData().remove(),r=null,t.opts.videoResize&&(n.remove(),n=null)}),!0),t.helpers.isMobile()||t.events.$on(e(t.o_win),\"resize.video\",(function(){v(!0)})),t.opts.videoResize&&(o=r.get(0).ownerDocument,t.events.$on(r,t._mousedown,\".fr-handler\",p),t.events.$on(e(o),t._mousemove,f),t.events.$on(e(o.defaultView||o.parentWindow),t._mouseup,h),t.events.$on(n,\"mouseleave\",h))),(t.$wp||e(t.opts.scrollableContainer)).append(r),r.data(\"instance\",t);var a=i.find(\"iframe, embed, video\");r.css(\"top\",(t.opts.iframe?a.offset().top-1:a.offset().top-t.$wp.offset().top-1)+t.$wp.scrollTop()).css(\"left\",(t.opts.iframe?a.offset().left-1:a.offset().left-t.$wp.offset().left-1)+t.$wp.scrollLeft()).css(\"width\",a.outerWidth()).css(\"height\",a.height()).addClass(\"fr-active\")}function m(n){if(n&&\"touchend\"==n.type&&a)return!0;if(n.preventDefault(),n.stopPropagation(),t.edit.isDisabled())return!1;for(var o=0;o<e.FE.INSTANCES.length;o++)e.FE.INSTANCES[o]!=t&&e.FE.INSTANCES[o].events.trigger(\"video.hideResizer\");t.toolbar.disable(),t.helpers.isMobile()&&(t.events.disableBlur(),t.$el.blur(),t.events.enableBlur()),i=e(this),e(this).addClass(\"fr-active\"),t.opts.iframe&&t.size.syncIframe(),g(),l(),t.selection.clear(),t.button.bulkRefresh(),t.events.trigger(\"image.hideResizer\")}function v(e){i&&(t.shared.vid_exit_flag||!0===e)&&(r.removeClass(\"fr-active\"),t.toolbar.enable(),i.removeClass(\"fr-active\"),i=null,E())}function b(){t.shared.vid_exit_flag=!0}function E(){t.shared.vid_exit_flag=!1}function y(){if(i){var e=t.popups.get(\"video.size\"),n=i.find(\"iframe, embed, video\");e.find('input[name=\"width\"]').val(n.get(0).style.width||n.attr(\"width\")).trigger(\"change\"),e.find('input[name=\"height\"]').val(n.get(0).style.height||n.attr(\"height\")).trigger(\"change\")}}function w(){var n=t.popups.get(\"video.size\");n||(n=S()),t.popups.refresh(\"video.size\"),t.popups.setContainer(\"video.size\",e(t.opts.scrollableContainer));var o=i.find(\"iframe, embed, video\");t.popups.showEl(\"video.size\",o)}function S(e){if(e)return t.popups.onRefresh(\"video.size\",y),!0;var n={buttons:'<div class=\"fr-buttons\">'+t.button.buildList(t.opts.videoSizeButtons)+\"</div>\",size_layer:'<div class=\"fr-video-size-layer fr-layer fr-active\" id=\"fr-video-size-layer-'+t.id+'\"><div class=\"fr-video-group\"><div class=\"fr-input-line\"><input type=\"text\" name=\"width\" placeholder=\"'+t.language.translate(\"Width\")+'\" tabIndex=\"1\"></div><div class=\"fr-input-line\"><input type=\"text\" name=\"height\" placeholder=\"'+t.language.translate(\"Height\")+'\" tabIndex=\"1\"></div></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"videoSetSize\" tabIndex=\"2\">'+t.language.translate(\"Update\")+\"</button></div></div>\"},o=t.popups.create(\"video.size\",n);return t.events.$on(t.$wp,\"scroll\",(function(){i&&t.popups.isVisible(\"video.size\")&&w()})),o}function C(){if(i&&!1!==t.events.trigger(\"video.beforeRemove\",[i])){var e=i;t.popups.hideAll(),v(!0),t.selection.setBefore(e.get(0))||t.selection.setAfter(e.get(0)),e.remove(),t.selection.restore(),t.html.fillEmptyBlocks(),t.events.trigger(\"video.removed\",[e])}}function _(e){if(!e.hasClass(\"fr-dvi\")&&!e.hasClass(\"fr-dvb\")){var n=e.css(\"float\");e.css(\"float\",\"none\"),\"block\"==e.css(\"display\")?(e.css(\"float\",n),0===parseInt(e.css(\"margin-left\"),10)&&(e.attr(\"style\")||\"\").indexOf(\"margin-right: auto\")>=0?e.addClass(\"fr-fvl\"):0===parseInt(e.css(\"margin-right\"),10)&&(e.attr(\"style\")||\"\").indexOf(\"margin-left: auto\")>=0&&e.addClass(\"fr-fvr\"),e.addClass(\"fr-dvb\")):(e.css(\"float\",n),\"left\"==e.css(\"float\")?e.addClass(\"fr-fvl\"):\"right\"==e.css(\"float\")&&e.addClass(\"fr-fvr\"),e.addClass(\"fr-dvi\")),e.css(\"margin\",\"\"),e.css(\"float\",\"\"),e.css(\"display\",\"\"),e.css(\"z-index\",\"\"),e.css(\"position\",\"\"),e.css(\"overflow\",\"\"),e.css(\"vertical-align\",\"\")}t.opts.videoTextNear||e.removeClass(\"fr-dvi\").addClass(\"fr-dvb\")}function T(){t.$el.find(\"video\").filter((function(){return 0===e(this).parents(\"span.fr-video\").length})).wrap('<span class=\"fr-video\" contenteditable=\"false\"></span>'),t.$el.find(\"embed, iframe\").filter((function(){if(t.browser.safari&&this.getAttribute(\"src\")&&this.setAttribute(\"src\",this.src),e(this).parents(\"span.fr-video\").length>0)return!1;for(var n=e(this).attr(\"src\"),o=0;o<e.FE.VIDEO_PROVIDERS.length;o++){if(e.FE.VIDEO_PROVIDERS[o].test_regex.test(n))return!0}return!1})).map((function(){return 0===e(this).parents(\"object\").length?this:e(this).parents(\"object\").get(0)})).wrap('<span class=\"fr-video\" contenteditable=\"false\"></span>');for(var n=t.$el.find(\"span.fr-video\"),o=0;o<n.length;o++)_(e(n[o]));n.toggleClass(\"fr-draggable\",t.opts.videoMove)}return t.shared.vid_exit_flag=!1,{_init:function(){t.events.on(\"mousedown window.mousedown\",b),t.events.on(\"window.touchmove\",E),t.events.on(\"mouseup window.mouseup\",v),t.events.on(\"commands.mousedown\",(function(e){e.parents(\".fr-toolbar\").length>0&&v()})),t.events.on(\"blur video.hideResizer commands.undo commands.redo element.dropped\",(function(){v(!0)})),t.helpers.isMobile()&&(t.events.$on(t.$el,\"touchstart\",\"span.fr-video\",(function(){a=!1})),t.events.$on(t.$el,\"touchmove\",(function(){a=!0}))),t.events.on(\"html.set\",T),T(),t.events.$on(t.$el,\"mousedown\",\"span.fr-video\",(function(e){e.stopPropagation()})),t.events.$on(t.$el,\"click touchend\",\"span.fr-video\",m),t.events.on(\"keydown\",(function(n){var o=n.which;return!i||o!=e.FE.KEYCODE.BACKSPACE&&o!=e.FE.KEYCODE.DELETE?i&&o==e.FE.KEYCODE.ESC?(v(!0),n.preventDefault(),!1):i&&!t.keys.ctrlKey(n)?(n.preventDefault(),!1):void 0:(n.preventDefault(),C(),!1)}),!0),t.events.on(\"keydown\",(function(){t.$el.find(\"span.fr-video:empty\").remove()})),d(!0),S(!0)},showInsertPopup:function(){var e=t.$tb.find('.fr-command[data-cmd=\"insertVideo\"]'),n=t.popups.get(\"video.insert\");if(n||(n=d()),!n.hasClass(\"fr-active\")){t.popups.refresh(\"video.insert\"),t.popups.setContainer(\"video.insert\",t.$tb);var o=e.offset().left+e.outerWidth()/2,r=e.offset().top+(t.opts.toolbarBottom?10:e.outerHeight()-10);t.popups.show(\"video.insert\",o,r,e.outerHeight())}},showLayer:function(e){var n,o,r=t.popups.get(\"video.insert\");if(!i&&!t.opts.toolbarInline){var a=t.$tb.find('.fr-command[data-cmd=\"insertVideo\"]');n=a.offset().left+a.outerWidth()/2,o=a.offset().top+(t.opts.toolbarBottom?10:a.outerHeight()-10)}t.opts.toolbarInline&&(o=r.offset().top-t.helpers.getPX(r.css(\"margin-top\")),r.hasClass(\"fr-above\")&&(o+=r.outerHeight())),r.find(\".fr-layer\").removeClass(\"fr-active\"),r.find(\".fr-\"+e+\"-layer\").addClass(\"fr-active\"),t.popups.show(\"video.insert\",n,o,0)},refreshByURLButton:function(e){t.popups.get(\"video.insert\").find(\".fr-video-by-url-layer\").hasClass(\"fr-active\")&&e.addClass(\"fr-active\")},refreshEmbedButton:function(e){t.popups.get(\"video.insert\").find(\".fr-video-embed-layer\").hasClass(\"fr-active\")&&e.addClass(\"fr-active\")},insertByURL:function(n){void 0===n&&(n=t.popups.get(\"video.insert\").find('.fr-video-by-url-layer input[type=\"text\"]').val()||\"\");var o=null;if(t.helpers.isURL(n))for(var r=0;r<e.FE.VIDEO_PROVIDERS.length;r++){var i=e.FE.VIDEO_PROVIDERS[r];if(i.test_regex.test(n)){o=n.replace(i.url_regex,i.url_text),o=i.html.replace(/\\{url\\}/,o);break}}o?c(o):t.events.trigger(\"video.linkError\",[n])},insertEmbed:function(n){void 0===n&&(n=t.popups.get(\"video.insert\").find(\".fr-video-embed-layer textarea\").val()||\"\"),0!==n.length&&e.FE.VIDEO_EMBED_REGEX.test(n)?c(n):t.events.trigger(\"video.codeError\",[n])},insert:c,align:function(e){i.removeClass(\"fr-fvr fr-fvl\"),\"left\"==e?i.addClass(\"fr-fvl\"):\"right\"==e&&i.addClass(\"fr-fvr\"),g(),l()},refreshAlign:function(e){if(!i)return!1;i.hasClass(\"fr-fvl\")?e.find(\"> *:first\").replaceWith(t.icon.create(\"align-left\")):i.hasClass(\"fr-fvr\")?e.find(\"> *:first\").replaceWith(t.icon.create(\"align-right\")):e.find(\"> *:first\").replaceWith(t.icon.create(\"align-justify\"))},refreshAlignOnShow:function(e,t){var n=\"justify\";i.hasClass(\"fr-fvl\")?n=\"left\":i.hasClass(\"fr-fvr\")&&(n=\"right\"),t.find('.fr-command[data-param1=\"'+n+'\"]').addClass(\"fr-active\")},display:function(e){i.removeClass(\"fr-dvi fr-dvb\"),\"inline\"==e?i.addClass(\"fr-dvi\"):\"block\"==e&&i.addClass(\"fr-dvb\"),g(),l()},refreshDisplayOnShow:function(e,t){var n=\"block\";i.hasClass(\"fr-dvi\")&&(n=\"inline\"),t.find('.fr-command[data-param1=\"'+n+'\"]').addClass(\"fr-active\")},remove:C,showSizePopup:w,back:function(){i?i.trigger(\"click\"):(t.events.disableBlur(),t.selection.restore(),t.events.enableBlur(),t.popups.hide(\"video.insert\"),t.toolbar.showInline())},setSize:function(e,n){if(i){var o=t.popups.get(\"video.size\"),r=i.find(\"iframe, embed, video\");r.css(\"width\",e||o.find('input[name=\"width\"]').val()),r.css(\"height\",n||o.find('input[name=\"height\"]').val()),r.get(0).style.width&&r.removeAttr(\"width\"),r.get(0).style.height&&r.removeAttr(\"height\"),o.find(\"input\").blur(),setTimeout((function(){i.trigger(\"click\")}),t.helpers.isAndroid()?50:0)}},get:function(){return i}}},e.FE.RegisterCommand(\"insertVideo\",{title:\"Insert Video\",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"video.insert\")?(this.$el.find(\".fr-marker\")&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"video.insert\")):this.video.showInsertPopup()},plugin:\"video\"}),e.FE.DefineIcon(\"insertVideo\",{NAME:\"video-camera\"}),e.FE.DefineIcon(\"videoByURL\",{NAME:\"link\"}),e.FE.RegisterCommand(\"videoByURL\",{title:\"By URL\",undo:!1,focus:!1,callback:function(){this.video.showLayer(\"video-by-url\")},refresh:function(e){this.video.refreshByURLButton(e)}}),e.FE.DefineIcon(\"videoEmbed\",{NAME:\"code\"}),e.FE.RegisterCommand(\"videoEmbed\",{title:\"Embedded Code\",undo:!1,focus:!1,callback:function(){this.video.showLayer(\"video-embed\")},refresh:function(e){this.video.refreshEmbedButton(e)}}),e.FE.RegisterCommand(\"videoInsertByURL\",{undo:!0,focus:!0,callback:function(){this.video.insertByURL()}}),e.FE.RegisterCommand(\"videoInsertEmbed\",{undo:!0,focus:!0,callback:function(){this.video.insertEmbed()}}),e.FE.DefineIcon(\"videoDisplay\",{NAME:\"star\"}),e.FE.RegisterCommand(\"videoDisplay\",{title:\"Display\",type:\"dropdown\",options:{inline:\"Inline\",block:\"Break Text\"},callback:function(e,t){this.video.display(t)},refresh:function(e){this.opts.videoTextNear||e.addClass(\"fr-hidden\")},refreshOnShow:function(e,t){this.video.refreshDisplayOnShow(e,t)}}),e.FE.DefineIcon(\"videoAlign\",{NAME:\"align-center\"}),e.FE.RegisterCommand(\"videoAlign\",{type:\"dropdown\",title:\"Align\",options:{left:\"Align Left\",justify:\"None\",right:\"Align Right\"},html:function(){var t='<ul class=\"fr-dropdown-list\">',n=e.FE.COMMANDS.videoAlign.options;for(var o in n)n.hasOwnProperty(o)&&(t+='<li><a class=\"fr-command fr-title\" data-cmd=\"videoAlign\" data-param1=\"'+o+'\" title=\"'+this.language.translate(n[o])+'\">'+this.icon.create(\"align-\"+o)+\"</a></li>\");return t+=\"</ul>\"},callback:function(e,t){this.video.align(t)},refresh:function(e){this.video.refreshAlign(e)},refreshOnShow:function(e,t){this.video.refreshAlignOnShow(e,t)}}),e.FE.DefineIcon(\"videoRemove\",{NAME:\"trash\"}),e.FE.RegisterCommand(\"videoRemove\",{title:\"Remove\",callback:function(){this.video.remove()}}),e.FE.DefineIcon(\"videoSize\",{NAME:\"arrows-alt\"}),e.FE.RegisterCommand(\"videoSize\",{undo:!1,focus:!1,title:\"Change Size\",callback:function(){this.video.showSizePopup()}}),e.FE.DefineIcon(\"videoBack\",{NAME:\"arrow-left\"}),e.FE.RegisterCommand(\"videoBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,callback:function(){this.video.back()},refresh:function(e){this.video.get()||this.opts.toolbarInline?(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\")):(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\"))}}),e.FE.RegisterCommand(\"videoSetSize\",{undo:!0,focus:!1,callback:function(){this.video.setSize()}})}(jQuery),function(e){\"use strict\";e.extend(e.FE.POPUP_TEMPLATES,{\"audio.insert\":\"[_BUTTONS_][_BY_URL_LAYER_][_EMBED_LAYER_]\",\"audio.edit\":\"[_BUTTONS_]\",\"audio.size\":\"[_BUTTONS_][_SIZE_LAYER_]\"}),e.extend(e.FE.DEFAULTS,{audioInsertButtons:[\"audioBack\",\"|\",\"audioByURL\",\"audioEmbed\"],audioEditButtons:[\"audioDisplay\",\"audioAlign\",\"audioSize\",\"audioRemove\"],audioResize:!0,audioSizeButtons:[\"audioBack\",\"|\"],audioSplitHTML:!1,audioTextNear:!0,audioDefaultAlign:\"center\",audioDefaultDisplay:\"block\",audioMove:!0}),e.FE.VIDEO_PROVIDERS=[],e.FE.VIDEO_EMBED_REGEX=/^\\W*((<iframe.*><\\/iframe>)|(<embed.*>))\\W*$/i,e.FE.PLUGINS.audio=function(t){var n,o,r,i,a;function s(){var e=t.popups.get(\"audio.insert\");e.find(\".fr-audio-by-url-layer input\").val(\"\").trigger(\"change\"),e.find(\".fr-audio-embed-layer textarea\").val(\"\").trigger(\"change\")}function l(){var n=t.popups.get(\"audio.edit\");n||(n=function(){var e=\"\";t.opts.audioEditButtons.length>=1&&(e+='<div class=\"fr-buttons\">',e+=t.button.buildList(t.opts.audioEditButtons),e+=\"</div>\");var n={buttons:e},o=t.popups.create(\"audio.edit\",n);return t.events.$on(t.$wp,\"scroll.audio-edit\",(function(){i&&t.popups.isVisible(\"audio.edit\")&&l()})),o}()),t.popups.setContainer(\"audio.edit\",e(t.opts.scrollableContainer)),t.popups.refresh(\"audio.edit\");var o=i.find(\"iframe, embed, audio\");t.popups.showEl(\"audio.edit\",o)}function d(e){if(e)return t.popups.onRefresh(\"audio.insert\",s),!0;var n=\"\";t.opts.audioInsertButtons.length>1&&(n='<div class=\"fr-buttons\">'+t.button.buildList(t.opts.audioInsertButtons)+\"</div>\");var o=\"\";t.opts.audioInsertButtons.indexOf(\"audioByURL\")>=0&&(o='<div class=\"fr-audio-by-url-layer fr-layer fr-active\" id=\"fr-audio-by-url-layer-'+t.id+'\"><div class=\"fr-input-line\"><input type=\"text\" placeholder=\"http://\" tabIndex=\"1\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"audioInsertByURL\" tabIndex=\"2\">'+t.language.translate(\"Insert\")+\"</button></div></div>\");var r=\"\";t.opts.audioInsertButtons.indexOf(\"audioEmbed\")>=0&&(r='<div class=\"fr-audio-embed-layer fr-layer\" id=\"fr-audio-embed-layer-'+t.id+'\"><div class=\"fr-input-line\"><textarea type=\"text\" placeholder=\"'+t.language.translate(\"Embedded Code\")+'\" tabIndex=\"1\" rows=\"5\"></textarea></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"audioInsertEmbed\" tabIndex=\"2\">'+t.language.translate(\"Insert\")+\"</button></div></div>\");var i={buttons:n,by_url_layer:o,embed_layer:r};return t.popups.create(\"audio.insert\",i)}function c(e){t.events.focus(!0),t.selection.restore(),t.html.insert('<span contenteditable=\"false\" draggable=\"true\" class=\"fr-jiv fr-video fr-dv'+t.opts.audioDefaultDisplay[0]+(\"center\"!=t.opts.audioDefaultAlign?\" fr-fv\"+t.opts.audioDefaultAlign[0]:\"\")+'\">'+e+\"</span>\",!1,t.opts.audioSplitHTML),t.popups.hide(\"audio.insert\");var n=t.$el.find(\".fr-jiv\");n.removeClass(\"fr-jiv\"),n.toggleClass(\"fr-draggable\",t.opts.audioMove),t.events.trigger(\"audio.inserted\",[n])}function p(i){if(!t.core.sameInstance(r))return!0;i.preventDefault(),i.stopPropagation();var a=i.pageX||(i.originalEvent.touches?i.originalEvent.touches[0].pageX:null),s=i.pageY||(i.originalEvent.touches?i.originalEvent.touches[0].pageY:null);if(!a||!s)return!1;t.undo.canDo()||t.undo.saveStep(),(o=e(this)).data(\"start-x\",a),o.data(\"start-y\",s),n.show(),t.popups.hideAll(),E()}function f(e){if(!t.core.sameInstance(r))return!0;if(o){e.preventDefault();var n=e.pageX||(e.originalEvent.touches?e.originalEvent.touches[0].pageX:null),a=e.pageY||(e.originalEvent.touches?e.originalEvent.touches[0].pageY:null);if(!n||!a)return!1;var s=o.data(\"start-x\"),l=o.data(\"start-y\");o.data(\"start-x\",n),o.data(\"start-y\",a);var d=n-s,c=a-l,p=i.find(\"iframe, embed, audio\"),f=p.width(),h=p.height();(o.hasClass(\"fr-hnw\")||o.hasClass(\"fr-hsw\"))&&(d=0-d),(o.hasClass(\"fr-hnw\")||o.hasClass(\"fr-hne\"))&&(c=0-c),p.css(\"width\",f+d),p.css(\"height\",h+c),p.removeAttr(\"width\"),p.removeAttr(\"height\"),g()}}function h(e){if(!t.core.sameInstance(r))return!0;o&&i&&(e&&e.stopPropagation(),o=null,n.hide(),g(),l(),t.undo.saveStep())}function u(e){return'<div class=\"fr-handler fr-h'+e+'\"></div>'}function g(){var o;r||(t.shared.$audio_resizer?(r=t.shared.$audio_resizer,n=t.shared.$audio_overlay,t.events.on(\"destroy\",(function(){r.removeClass(\"fr-active\").appendTo(e(\"body\"))}),!0)):(t.shared.$audio_resizer=e('<div class=\"fr-video-resizer\"></div>'),r=t.shared.$audio_resizer,t.events.$on(r,\"mousedown\",(function(e){e.stopPropagation()}),!0),t.opts.audioResize&&(r.append(u(\"nw\")+u(\"ne\")+u(\"sw\")+u(\"se\")),t.shared.$audio_overlay=e('<div class=\"fr-video-overlay\"></div>'),n=t.shared.$audio_overlay,o=r.get(0).ownerDocument,e(o).find(\"body\").append(n))),t.events.on(\"shared.destroy\",(function(){r.html(\"\").removeData().remove(),r=null,t.opts.audioResize&&(n.remove(),n=null)}),!0),t.helpers.isMobile()||t.events.$on(e(t.o_win),\"resize.audio\",(function(){v(!0)})),t.opts.audioResize&&(o=r.get(0).ownerDocument,t.events.$on(r,t._mousedown,\".fr-handler\",p),t.events.$on(e(o),t._mousemove,f),t.events.$on(e(o.defaultView||o.parentWindow),t._mouseup,h),t.events.$on(n,\"mouseleave\",h))),(t.$wp||e(t.opts.scrollableContainer)).append(r),r.data(\"instance\",t);var a=i.find(\"iframe, embed, audio\");r.css(\"top\",(t.opts.iframe?a.offset().top-1:a.offset().top-t.$wp.offset().top-1)+t.$wp.scrollTop()).css(\"left\",(t.opts.iframe?a.offset().left-1:a.offset().left-t.$wp.offset().left-1)+t.$wp.scrollLeft()).css(\"width\",a.outerWidth()).css(\"height\",a.height()).addClass(\"fr-active\")}function m(n){if(n&&\"touchend\"==n.type&&a)return!0;if(n.preventDefault(),n.stopPropagation(),t.edit.isDisabled())return!1;for(var o=0;o<e.FE.INSTANCES.length;o++)e.FE.INSTANCES[o]!=t&&e.FE.INSTANCES[o].events.trigger(\"audio.hideResizer\");t.toolbar.disable(),t.helpers.isMobile()&&(t.events.disableBlur(),t.$el.blur(),t.events.enableBlur()),i=e(this),e(this).addClass(\"fr-active\"),t.opts.iframe&&t.size.syncIframe(),g(),l(),t.selection.clear(),t.button.bulkRefresh(),t.events.trigger(\"image.hideResizer\")}function v(e){i&&(t.shared.audio_exit_flag||!0===e)&&(r.removeClass(\"fr-active\"),t.toolbar.enable(),i.removeClass(\"fr-active\"),i=null,E())}function b(){t.shared.audio_exit_flag=!0}function E(){t.shared.audio_exit_flag=!1}function y(){if(i){var e=t.popups.get(\"audio.size\"),n=i.find(\"iframe, embed, audio\");e.find('input[name=\"width\"]').val(n.get(0).style.width||n.attr(\"width\")).trigger(\"change\"),e.find('input[name=\"height\"]').val(n.get(0).style.height||n.attr(\"height\")).trigger(\"change\")}}function w(){var n=t.popups.get(\"audio.size\");n||(n=S()),t.popups.refresh(\"audio.size\"),t.popups.setContainer(\"audio.size\",e(t.opts.scrollableContainer));var o=i.find(\"iframe, embed, audio\");t.popups.showEl(\"audio.size\",o)}function S(e){if(e)return t.popups.onRefresh(\"audio.size\",y),!0;var n={buttons:'<div class=\"fr-buttons\">'+t.button.buildList(t.opts.audioSizeButtons)+\"</div>\",size_layer:'<div class=\"fr-video-size-layer fr-layer fr-active\" id=\"fr-video-size-layer-'+t.id+'\"><div class=\"fr-audio-group\"><div class=\"fr-input-line\"><input type=\"text\" name=\"width\" placeholder=\"'+t.language.translate(\"Width\")+'\" tabIndex=\"1\"></div><div class=\"fr-input-line\"><input type=\"text\" name=\"height\" placeholder=\"'+t.language.translate(\"Height\")+'\" tabIndex=\"1\"></div></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"audioSetSize\" tabIndex=\"2\">'+t.language.translate(\"Update\")+\"</button></div></div>\"},o=t.popups.create(\"audio.size\",n);return t.events.$on(t.$wp,\"scroll\",(function(){i&&t.popups.isVisible(\"audio.size\")&&w()})),o}function C(){if(i&&!1!==t.events.trigger(\"audio.beforeRemove\",[i])){var e=i;t.popups.hideAll(),v(!0),t.selection.setBefore(e.get(0))||t.selection.setAfter(e.get(0)),e.remove(),t.selection.restore(),t.html.fillEmptyBlocks(),t.events.trigger(\"audio.removed\",[e])}}function _(e){if(!e.hasClass(\"fr-dvi\")&&!e.hasClass(\"fr-dvb\")){var n=e.css(\"float\");e.css(\"float\",\"none\"),\"block\"==e.css(\"display\")?(e.css(\"float\",n),0===parseInt(e.css(\"margin-left\"),10)&&(e.attr(\"style\")||\"\").indexOf(\"margin-right: auto\")>=0?e.addClass(\"fr-fvl\"):0===parseInt(e.css(\"margin-right\"),10)&&(e.attr(\"style\")||\"\").indexOf(\"margin-left: auto\")>=0&&e.addClass(\"fr-fvr\"),e.addClass(\"fr-dvb\")):(e.css(\"float\",n),\"left\"==e.css(\"float\")?e.addClass(\"fr-fvl\"):\"right\"==e.css(\"float\")&&e.addClass(\"fr-fvr\"),e.addClass(\"fr-dvi\")),e.css(\"margin\",\"\"),e.css(\"float\",\"\"),e.css(\"display\",\"\"),e.css(\"z-index\",\"\"),e.css(\"position\",\"\"),e.css(\"overflow\",\"\"),e.css(\"vertical-align\",\"\")}t.opts.audioTextNear||e.removeClass(\"fr-dvi\").addClass(\"fr-dvb\")}function T(){t.$el.find(\"audio\").filter((function(){return 0===e(this).parents(\"span.fr-video\").length})).wrap('<span class=\"fr-video\" contenteditable=\"false\"></span>'),t.$el.find(\"embed, iframe\").filter((function(){if(t.browser.safari&&this.getAttribute(\"src\")&&this.setAttribute(\"src\",this.src),e(this).parents(\"span.fr-video\").length>0)return!1;for(var n=e(this).attr(\"src\"),o=0;o<e.FE.VIDEO_PROVIDERS.length;o++){if(e.FE.VIDEO_PROVIDERS[o].test_regex.test(n))return!0}return!1})).map((function(){return 0===e(this).parents(\"object\").length?this:e(this).parents(\"object\").get(0)})).wrap('<span class=\"fr-video\" contenteditable=\"false\"></span>');for(var n=t.$el.find(\"span.fr-video\"),o=0;o<n.length;o++)_(e(n[o]));n.toggleClass(\"fr-draggable\",t.opts.audioMove)}return t.shared.audio_exit_flag=!1,{_init:function(){t.events.on(\"mousedown window.mousedown\",b),t.events.on(\"window.touchmove\",E),t.events.on(\"mouseup window.mouseup\",v),t.events.on(\"commands.mousedown\",(function(e){e.parents(\".fr-toolbar\").length>0&&v()})),t.events.on(\"blur audio.hideResizer commands.undo commands.redo element.dropped\",(function(){v(!0)})),t.helpers.isMobile()&&(t.events.$on(t.$el,\"touchstart\",\"span.fr-video\",(function(){a=!1})),t.events.$on(t.$el,\"touchmove\",(function(){a=!0}))),t.events.on(\"html.set\",T),T(),t.events.$on(t.$el,\"mousedown\",\"span.fr-video\",(function(e){e.stopPropagation()})),t.events.$on(t.$el,\"click touchend\",\"span.fr-video\",m),t.events.on(\"keydown\",(function(n){var o=n.which;return!i||o!=e.FE.KEYCODE.BACKSPACE&&o!=e.FE.KEYCODE.DELETE?i&&o==e.FE.KEYCODE.ESC?(v(!0),n.preventDefault(),!1):i&&!t.keys.ctrlKey(n)?(n.preventDefault(),!1):void 0:(n.preventDefault(),C(),!1)}),!0),t.events.on(\"keydown\",(function(){t.$el.find(\"span.fr-video:empty\").remove()})),d(!0),S(!0)},showInsertPopup:function(){var e=t.$tb.find('.fr-command[data-cmd=\"insertAudio\"]'),n=t.popups.get(\"audio.insert\");if(n||(n=d()),!n.hasClass(\"fr-active\")){t.popups.refresh(\"audio.insert\"),t.popups.setContainer(\"audio.insert\",t.$tb);var o=e.offset().left+e.outerWidth()/2,r=e.offset().top+(t.opts.toolbarBottom?10:e.outerHeight()-10);t.popups.show(\"audio.insert\",o,r,e.outerHeight())}},showLayer:function(e){var n,o,r=t.popups.get(\"audio.insert\");if(!i&&!t.opts.toolbarInline){var a=t.$tb.find('.fr-command[data-cmd=\"insertAudio\"]');n=a.offset().left+a.outerWidth()/2,o=a.offset().top+(t.opts.toolbarBottom?10:a.outerHeight()-10)}t.opts.toolbarInline&&(o=r.offset().top-t.helpers.getPX(r.css(\"margin-top\")),r.hasClass(\"fr-above\")&&(o+=r.outerHeight())),r.find(\".fr-layer\").removeClass(\"fr-active\"),r.find(\".fr-\"+e+\"-layer\").addClass(\"fr-active\"),t.popups.show(\"audio.insert\",n,o,0)},refreshByURLButton:function(e){t.popups.get(\"audio.insert\").find(\".fr-audio-by-url-layer\").hasClass(\"fr-active\")&&e.addClass(\"fr-active\")},refreshEmbedButton:function(e){t.popups.get(\"audio.insert\").find(\".fr-audio-embed-layer\").hasClass(\"fr-active\")&&e.addClass(\"fr-active\")},insertByURL:function(n){void 0===n&&(n=t.popups.get(\"audio.insert\").find('.fr-audio-by-url-layer input[type=\"text\"]').val()||\"\");var o=null;if(t.helpers.isURL(n))for(var r=0;r<e.FE.VIDEO_PROVIDERS.length;r++){var i=e.FE.VIDEO_PROVIDERS[r];if(i.test_regex.test(n)){o=n.replace(i.url_regex,i.url_text),o=i.html.replace(/\\{url\\}/,o);break}}o?c(o):t.events.trigger(\"audio.linkError\",[n])},insertEmbed:function(n){void 0===n&&(n=t.popups.get(\"audio.insert\").find(\".fr-audio-embed-layer textarea\").val()||\"\"),0!==n.length&&e.FE.VIDEO_EMBED_REGEX.test(n)?c(n):t.events.trigger(\"audio.codeError\",[n])},insert:c,align:function(e){i.removeClass(\"fr-fvr fr-fvl\"),\"left\"==e?i.addClass(\"fr-fvl\"):\"right\"==e&&i.addClass(\"fr-fvr\"),g(),l()},refreshAlign:function(e){if(!i)return!1;i.hasClass(\"fr-fvl\")?e.find(\"> *:first\").replaceWith(t.icon.create(\"align-left\")):i.hasClass(\"fr-fvr\")?e.find(\"> *:first\").replaceWith(t.icon.create(\"align-right\")):e.find(\"> *:first\").replaceWith(t.icon.create(\"align-justify\"))},refreshAlignOnShow:function(e,t){var n=\"justify\";i.hasClass(\"fr-fvl\")?n=\"left\":i.hasClass(\"fr-fvr\")&&(n=\"right\"),t.find('.fr-command[data-param1=\"'+n+'\"]').addClass(\"fr-active\")},display:function(e){i.removeClass(\"fr-dvi fr-dvb\"),\"inline\"==e?i.addClass(\"fr-dvi\"):\"block\"==e&&i.addClass(\"fr-dvb\"),g(),l()},refreshDisplayOnShow:function(e,t){var n=\"block\";i.hasClass(\"fr-dvi\")&&(n=\"inline\"),t.find('.fr-command[data-param1=\"'+n+'\"]').addClass(\"fr-active\")},remove:C,showSizePopup:w,back:function(){i?i.trigger(\"click\"):(t.events.disableBlur(),t.selection.restore(),t.events.enableBlur(),t.popups.hide(\"audio.insert\"),t.toolbar.showInline())},setSize:function(e,n){if(i){var o=t.popups.get(\"audio.size\"),r=i.find(\"iframe, embed, audio\");r.css(\"width\",e||o.find('input[name=\"width\"]').val()),r.css(\"height\",n||o.find('input[name=\"height\"]').val()),r.get(0).style.width&&r.removeAttr(\"width\"),r.get(0).style.height&&r.removeAttr(\"height\"),o.find(\"input\").blur(),setTimeout((function(){i.trigger(\"click\")}),t.helpers.isAndroid()?50:0)}},get:function(){return i}}},e.FE.RegisterCommand(\"insertAudio\",{title:\"Insert Audio\",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"audio.insert\")?(this.$el.find(\".fr-marker\")&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"audio.insert\")):this.audio.showInsertPopup()},plugin:\"audio\"}),e.FE.DefineIcon(\"insertAudio\",{NAME:\"volume-up\"}),e.FE.DefineIcon(\"audioByURL\",{NAME:\"link\"}),e.FE.RegisterCommand(\"audioByURL\",{title:\"By URL\",undo:!1,focus:!1,callback:function(){this.audio.showLayer(\"audio-by-url\")},refresh:function(e){this.audio.refreshByURLButton(e)}}),e.FE.DefineIcon(\"audioEmbed\",{NAME:\"code\"}),e.FE.RegisterCommand(\"audioEmbed\",{title:\"Embedded Code\",undo:!1,focus:!1,callback:function(){this.audio.showLayer(\"audio-embed\")},refresh:function(e){this.audio.refreshEmbedButton(e)}}),e.FE.RegisterCommand(\"audioInsertByURL\",{undo:!0,focus:!0,callback:function(){this.audio.insertByURL()}}),e.FE.RegisterCommand(\"audioInsertEmbed\",{undo:!0,focus:!0,callback:function(){this.audio.insertEmbed()}}),e.FE.DefineIcon(\"audioDisplay\",{NAME:\"star\"}),e.FE.RegisterCommand(\"audioDisplay\",{title:\"Display\",type:\"dropdown\",options:{inline:\"Inline\",block:\"Break Text\"},callback:function(e,t){this.audio.display(t)},refresh:function(e){this.opts.audioTextNear||e.addClass(\"fr-hidden\")},refreshOnShow:function(e,t){this.audio.refreshDisplayOnShow(e,t)}}),e.FE.DefineIcon(\"audioAlign\",{NAME:\"align-center\"}),e.FE.RegisterCommand(\"audioAlign\",{type:\"dropdown\",title:\"Align\",options:{left:\"Align Left\",justify:\"None\",right:\"Align Right\"},html:function(){var t='<ul class=\"fr-dropdown-list\">',n=e.FE.COMMANDS.audioAlign.options;for(var o in n)n.hasOwnProperty(o)&&(t+='<li><a class=\"fr-command fr-title\" data-cmd=\"audioAlign\" data-param1=\"'+o+'\" title=\"'+this.language.translate(n[o])+'\">'+this.icon.create(\"align-\"+o)+\"</a></li>\");return t+=\"</ul>\"},callback:function(e,t){this.audio.align(t)},refresh:function(e){this.audio.refreshAlign(e)},refreshOnShow:function(e,t){this.audio.refreshAlignOnShow(e,t)}}),e.FE.DefineIcon(\"audioRemove\",{NAME:\"trash\"}),e.FE.RegisterCommand(\"audioRemove\",{title:\"Remove\",callback:function(){this.audio.remove()}}),e.FE.DefineIcon(\"audioSize\",{NAME:\"arrows-alt\"}),e.FE.RegisterCommand(\"audioSize\",{undo:!1,focus:!1,title:\"Change Size\",callback:function(){this.audio.showSizePopup()}}),e.FE.DefineIcon(\"audioBack\",{NAME:\"arrow-left\"}),e.FE.RegisterCommand(\"audioBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,callback:function(){this.audio.back()},refresh:function(e){this.audio.get()||this.opts.toolbarInline?(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\")):(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\"))}}),e.FE.RegisterCommand(\"audioSetSize\",{undo:!0,focus:!1,callback:function(){this.audio.setSize()}})}(jQuery),function(e){e.FE.PLUGINS.quote=function(t){function n(e){for(;e.parentNode&&e.parentNode!=t.el;)e=e.parentNode;return e}return{apply:function(o){t.selection.save(),t.html.wrap(!0,!0,!0,!0),t.selection.restore(),\"increase\"==o?function(){var o,r=t.selection.blocks();for(o=0;o<r.length;o++)r[o]=n(r[o]);t.selection.save();var i=e(\"<blockquote>\");for(i.insertBefore(r[0]),o=0;o<r.length;o++)i.append(r[o]);t.html.unwrap(),t.selection.restore()}():\"decrease\"==o&&function(){var n,o=t.selection.blocks();for(n=0;n<o.length;n++)\"BLOCKQUOTE\"!=o[n].tagName&&(o[n]=e(o[n]).parentsUntil(t.$el,\"BLOCKQUOTE\").get(0));for(t.selection.save(),n=0;n<o.length;n++)o[n]&&e(o[n]).replaceWith(o[n].innerHTML);t.html.unwrap(),t.selection.restore()}()}}},e.FE.RegisterShortcut(e.FE.KEYCODE.SINGLE_QUOTE,\"quote\",\"increase\",\"'\"),e.FE.RegisterShortcut(e.FE.KEYCODE.SINGLE_QUOTE,\"quote\",\"decrease\",\"'\",!0),e.FE.RegisterCommand(\"quote\",{title:\"Quote\",type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t={increase:\"Increase\",decrease:\"Decrease\"};for(var n in t)if(t.hasOwnProperty(n)){var o=this.shortcuts.get(\"quote.\"+n);e+='<li role=\"presentation\"><a class=\"fr-command fr-active '+n+'\" tabIndex=\"-1\" role=\"option\" data-cmd=\"quote\" data-param1=\"'+n+'\" title=\"'+t[n]+'\">'+this.language.translate(t[n])+(o?'<span class=\"fr-shortcut\">'+o+\"</span>\":\"\")+\"</a></li>\"}return e+=\"</ul>\"},callback:function(e,t){this.quote.apply(t)},plugin:\"quote\"}),e.FE.DefineIcon(\"quote\",{NAME:\"quote-left\"})}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{fontSize:[\"8\",\"9\",\"10\",\"11\",\"12\",\"14\",\"18\",\"24\",\"30\",\"36\",\"48\",\"60\",\"72\",\"96\"],fontSizeSelection:!1,fontSizeDefaultSelection:\"12\",fontSizeUnit:\"px\"}),e.FE.PLUGINS.fontSize=function(t){return{apply:function(e){t.format.applyStyle(\"font-size\",e)},refreshOnShow:function(n,o){var r=e(t.selection.element()).css(\"font-size\");\"pt\"===t.opts.fontSizeUnit&&(r=Math.round(72*parseFloat(r,10)/96)+\"pt\"),o.find(\".fr-command.fr-active\").removeClass(\"fr-active\").attr(\"aria-selected\",!1),o.find('.fr-command[data-param1=\"'+r+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0);var i=o.find(\".fr-dropdown-list\"),a=o.find(\".fr-active\").parent();a.length?i.parent().scrollTop(a.offset().top-i.offset().top-(i.parent().outerHeight()/2-a.outerHeight()/2)):i.parent().scrollTop(0)},refresh:function(n){if(t.opts.fontSizeSelection){var o=t.helpers.getPX(e(t.selection.element()).css(\"font-size\"));\"pt\"===t.opts.fontSizeUnit&&(o=Math.round(72*parseFloat(o,10)/96)+\"pt\"),n.find(\"> span\").text(o)}}}},e.FE.RegisterCommand(\"fontSize\",{type:\"dropdown\",title:\"Font Size\",displaySelection:function(e){return e.opts.fontSizeSelection},displaySelectionWidth:30,defaultSelection:function(e){return e.opts.fontSizeDefaultSelection},html:function(){for(var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.fontSize,n=0;n<t.length;n++){var o=t[n];e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"fontSize\" data-param1=\"'+o+this.opts.fontSizeUnit+'\" title=\"'+o+'\">'+o+\"</a></li>\"}return e+=\"</ul>\"},callback:function(e,t){this.fontSize.apply(t)},refresh:function(e){this.fontSize.refresh(e)},refreshOnShow:function(e,t){this.fontSize.refreshOnShow(e,t)},plugin:\"fontSize\"}),e.FE.DefineIcon(\"fontSize\",{NAME:\"text-height\"})}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{fontFamily:{\"Arial,Helvetica,sans-serif\":\"Arial\",\"Georgia,serif\":\"Georgia\",\"Impact,Charcoal,sans-serif\":\"Impact\",\"Tahoma,Geneva,sans-serif\":\"Tahoma\",\"Times New Roman,Times,serif,-webkit-standard\":\"Times New Roman\",\"Verdana,Geneva,sans-serif\":\"Verdana\"},fontFamilySelection:!1,fontFamilyDefaultSelection:\"Font Family\"}),e.FE.PLUGINS.fontFamily=function(t){function n(t){var n=t.replace(/(sans-serif|serif|monospace|cursive|fantasy)/gi,\"\").replace(/\"|'| /g,\"\").split(\",\");return e.grep(n,(function(e){return e.length>0}))}function o(e,t){for(var n=0;n<e.length;n++)for(var o=0;o<t.length;o++)if(e[n].toLowerCase()==t[o].toLowerCase())return[n,o];return null}function r(){var r=n(e(t.selection.element()).css(\"font-family\")),i=[];for(var a in t.opts.fontFamily)if(t.opts.fontFamily.hasOwnProperty(a)){var s=o(r,n(a));s&&i.push([a,s])}return 0===i.length?null:(i.sort((function(e,t){var n=e[1][0]-t[1][0];return 0===n?e[1][1]-t[1][1]:n})),i[0][0])}return{apply:function(e){t.format.applyStyle(\"font-family\",e)},refreshOnShow:function(e,t){t.find(\".fr-command.fr-active\").removeClass(\"fr-active\").attr(\"aria-selected\",!1),t.find('.fr-command[data-param1=\"'+r()+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0);var n=t.find(\".fr-dropdown-list\"),o=t.find(\".fr-active\").parent();o.length?n.parent().scrollTop(o.offset().top-n.offset().top-(n.parent().outerHeight()/2-o.outerHeight()/2)):n.parent().scrollTop(0)},refresh:function(n){if(t.opts.fontFamilySelection){var o=e(t.selection.element()).css(\"font-family\").replace(/(sans-serif|serif|monospace|cursive|fantasy)/gi,\"\").replace(/\"|'|/g,\"\").split(\",\");n.find(\"> span\").text(t.opts.fontFamily[r()]||o[0]||t.language.translate(t.opts.fontFamilyDefaultSelection))}}}},e.FE.RegisterCommand(\"fontFamily\",{type:\"dropdown\",displaySelection:function(e){return e.opts.fontFamilySelection},defaultSelection:function(e){return e.opts.fontFamilyDefaultSelection},displaySelectionWidth:120,html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',t=this.opts.fontFamily;for(var n in t)t.hasOwnProperty(n)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"fontFamily\" data-param1=\"'+n+'\" style=\"font-family: '+n+'\" title=\"'+t[n]+'\">'+t[n]+\"</a></li>\");return e+=\"</ul>\"},title:\"Font Family\",callback:function(e,t){this.fontFamily.apply(t)},refresh:function(e){this.fontFamily.refresh(e)},refreshOnShow:function(e,t){this.fontFamily.refreshOnShow(e,t)},plugin:\"fontFamily\"}),e.FE.DefineIcon(\"fontFamily\",{NAME:\"font\"})}(jQuery),function(e){e.extend(e.FE.POPUP_TEMPLATES,{icons:\"[_BUTTONS_][_ICONS_]\"}),e.extend(e.FE.DEFAULTS,{iconsStep:8,iconsSet:[{code:\"ph ph-address-book\",desc:\"Address Book\"},{code:\"ph ph-airplane\",desc:\"Airplane\"},{code:\"ph ph-airplane-in-flight\",desc:\"Airplane In Flight\"},{code:\"ph ph-airplane-landing\",desc:\"Airplane Landing\"},{code:\"ph ph-airplane-takeoff\",desc:\"Airplane Takeoff\"},{code:\"ph ph-airplane-tilt\",desc:\"Airplane Tilt\"},{code:\"ph ph-airplay\",desc:\"Airplay\"},{code:\"ph ph-air-traffic-control\",desc:\"Air Traffic Control\"},{code:\"ph ph-alarm\",desc:\"Alarm\"},{code:\"ph ph-alien\",desc:\"Alien\"},{code:\"ph ph-align-bottom\",desc:\"Align Bottom\"},{code:\"ph ph-align-bottom-simple\",desc:\"Align Bottom Simple\"},{code:\"ph ph-align-center-horizontal\",desc:\"Align Center Horizontal\"},{code:\"ph ph-align-center-horizontal-simple\",desc:\"Align Center Horizontal Simple\"},{code:\"ph ph-align-center-vertical\",desc:\"Align Center Vertical\"},{code:\"ph ph-align-center-vertical-simple\",desc:\"Align Center Vertical Simple\"},{code:\"ph ph-align-left\",desc:\"Align Left\"},{code:\"ph ph-align-left-simple\",desc:\"Align Left Simple\"},{code:\"ph ph-align-right\",desc:\"Align Right\"},{code:\"ph ph-align-right-simple\",desc:\"Align Right Simple\"},{code:\"ph ph-align-top\",desc:\"Align Top\"},{code:\"ph ph-align-top-simple\",desc:\"Align Top Simple\"},{code:\"ph ph-amazon-logo\",desc:\"Amazon Logo\"},{code:\"ph ph-anchor\",desc:\"Anchor\"},{code:\"ph ph-anchor-simple\",desc:\"Anchor Simple\"},{code:\"ph ph-android-logo\",desc:\"Android Logo\"},{code:\"ph ph-angular-logo\",desc:\"Angular Logo\"},{code:\"ph ph-aperture\",desc:\"Aperture\"},{code:\"ph ph-apple-logo\",desc:\"Apple Logo\"},{code:\"ph ph-apple-podcasts-logo\",desc:\"Apple Podcasts Logo\"},{code:\"ph ph-app-store-logo\",desc:\"App Store Logo\"},{code:\"ph ph-app-window\",desc:\"App Window\"},{code:\"ph ph-archive\",desc:\"Archive\"},{code:\"ph ph-archive-box\",desc:\"Archive Box\"},{code:\"ph ph-archive-tray\",desc:\"Archive Tray\"},{code:\"ph ph-armchair\",desc:\"Armchair\"},{code:\"ph ph-arrow-arc-left\",desc:\"Arrow Arc Left\"},{code:\"ph ph-arrow-arc-right\",desc:\"Arrow Arc Right\"},{code:\"ph ph-arrow-bend-double-up-left\",desc:\"Arrow Bend Double Up Left\"},{code:\"ph ph-arrow-bend-double-up-right\",desc:\"Arrow Bend Double Up Right\"},{code:\"ph ph-arrow-bend-down-left\",desc:\"Arrow Bend Down Left\"},{code:\"ph ph-arrow-bend-down-right\",desc:\"Arrow Bend Down Right\"},{code:\"ph ph-arrow-bend-left-down\",desc:\"Arrow Bend Left Down\"},{code:\"ph ph-arrow-bend-left-up\",desc:\"Arrow Bend Left Up\"},{code:\"ph ph-arrow-bend-right-down\",desc:\"Arrow Bend Right Down\"},{code:\"ph ph-arrow-bend-right-up\",desc:\"Arrow Bend Right Up\"},{code:\"ph ph-arrow-bend-up-left\",desc:\"Arrow Bend Up Left\"},{code:\"ph ph-arrow-bend-up-right\",desc:\"Arrow Bend Up Right\"},{code:\"ph ph-arrow-circle-down\",desc:\"Arrow Circle Down\"},{code:\"ph ph-arrow-circle-down-left\",desc:\"Arrow Circle Down Left\"},{code:\"ph ph-arrow-circle-down-right\",desc:\"Arrow Circle Down Right\"},{code:\"ph ph-arrow-circle-left\",desc:\"Arrow Circle Left\"},{code:\"ph ph-arrow-circle-right\",desc:\"Arrow Circle Right\"},{code:\"ph ph-arrow-circle-up\",desc:\"Arrow Circle Up\"},{code:\"ph ph-arrow-circle-up-left\",desc:\"Arrow Circle Up Left\"},{code:\"ph ph-arrow-circle-up-right\",desc:\"Arrow Circle Up Right\"},{code:\"ph ph-arrow-clockwise\",desc:\"Arrow Clockwise\"},{code:\"ph ph-arrow-counter-clockwise\",desc:\"Arrow Counter Clockwise\"},{code:\"ph ph-arrow-down\",desc:\"Arrow Down\"},{code:\"ph ph-arrow-down-left\",desc:\"Arrow Down Left\"},{code:\"ph ph-arrow-down-right\",desc:\"Arrow Down Right\"},{code:\"ph ph-arrow-elbow-down-left\",desc:\"Arrow Elbow Down Left\"},{code:\"ph ph-arrow-elbow-down-right\",desc:\"Arrow Elbow Down Right\"},{code:\"ph ph-arrow-elbow-left\",desc:\"Arrow Elbow Left\"},{code:\"ph ph-arrow-elbow-left-down\",desc:\"Arrow Elbow Left Down\"},{code:\"ph ph-arrow-elbow-left-up\",desc:\"Arrow Elbow Left Up\"},{code:\"ph ph-arrow-elbow-right\",desc:\"Arrow Elbow Right\"},{code:\"ph ph-arrow-elbow-right-down\",desc:\"Arrow Elbow Right Down\"},{code:\"ph ph-arrow-elbow-right-up\",desc:\"Arrow Elbow Right Up\"},{code:\"ph ph-arrow-elbow-up-left\",desc:\"Arrow Elbow Up Left\"},{code:\"ph ph-arrow-elbow-up-right\",desc:\"Arrow Elbow Up Right\"},{code:\"ph ph-arrow-fat-down\",desc:\"Arrow Fat Down\"},{code:\"ph ph-arrow-fat-left\",desc:\"Arrow Fat Left\"},{code:\"ph ph-arrow-fat-line-down\",desc:\"Arrow Fat Line Down\"},{code:\"ph ph-arrow-fat-line-left\",desc:\"Arrow Fat Line Left\"},{code:\"ph ph-arrow-fat-line-right\",desc:\"Arrow Fat Line Right\"},{code:\"ph ph-arrow-fat-lines-down\",desc:\"Arrow Fat Lines Down\"},{code:\"ph ph-arrow-fat-lines-left\",desc:\"Arrow Fat Lines Left\"},{code:\"ph ph-arrow-fat-lines-right\",desc:\"Arrow Fat Lines Right\"},{code:\"ph ph-arrow-fat-lines-up\",desc:\"Arrow Fat Lines Up\"},{code:\"ph ph-arrow-fat-line-up\",desc:\"Arrow Fat Line Up\"},{code:\"ph ph-arrow-fat-right\",desc:\"Arrow Fat Right\"},{code:\"ph ph-arrow-fat-up\",desc:\"Arrow Fat Up\"},{code:\"ph ph-arrow-left\",desc:\"Arrow Left\"},{code:\"ph ph-arrow-line-down\",desc:\"Arrow Line Down\"},{code:\"ph ph-arrow-line-down-left\",desc:\"Arrow Line Down Left\"},{code:\"ph ph-arrow-line-down-right\",desc:\"Arrow Line Down Right\"},{code:\"ph ph-arrow-line-left\",desc:\"Arrow Line Left\"},{code:\"ph ph-arrow-line-right\",desc:\"Arrow Line Right\"},{code:\"ph ph-arrow-line-up\",desc:\"Arrow Line Up\"},{code:\"ph ph-arrow-line-up-left\",desc:\"Arrow Line Up Left\"},{code:\"ph ph-arrow-line-up-right\",desc:\"Arrow Line Up Right\"},{code:\"ph ph-arrow-right\",desc:\"Arrow Right\"},{code:\"ph ph-arrows-clockwise\",desc:\"Arrows Clockwise\"},{code:\"ph ph-arrows-counter-clockwise\",desc:\"Arrows Counter Clockwise\"},{code:\"ph ph-arrows-down-up\",desc:\"Arrows Down Up\"},{code:\"ph ph-arrows-horizontal\",desc:\"Arrows Horizontal\"},{code:\"ph ph-arrows-in\",desc:\"Arrows In\"},{code:\"ph ph-arrows-in-cardinal\",desc:\"Arrows In Cardinal\"},{code:\"ph ph-arrows-in-line-horizontal\",desc:\"Arrows In Line Horizontal\"},{code:\"ph ph-arrows-in-line-vertical\",desc:\"Arrows In Line Vertical\"},{code:\"ph ph-arrows-in-simple\",desc:\"Arrows In Simple\"},{code:\"ph ph-arrows-left-right\",desc:\"Arrows Left Right\"},{code:\"ph ph-arrows-merge\",desc:\"Arrows Merge\"},{code:\"ph ph-arrows-out\",desc:\"Arrows Out\"},{code:\"ph ph-arrows-out-cardinal\",desc:\"Arrows Out Cardinal\"},{code:\"ph ph-arrows-out-line-horizontal\",desc:\"Arrows Out Line Horizontal\"},{code:\"ph ph-arrows-out-line-vertical\",desc:\"Arrows Out Line Vertical\"},{code:\"ph ph-arrows-out-simple\",desc:\"Arrows Out Simple\"},{code:\"ph ph-arrow-square-down\",desc:\"Arrow Square Down\"},{code:\"ph ph-arrow-square-down-left\",desc:\"Arrow Square Down Left\"},{code:\"ph ph-arrow-square-down-right\",desc:\"Arrow Square Down Right\"},{code:\"ph ph-arrow-square-in\",desc:\"Arrow Square In\"},{code:\"ph ph-arrow-square-left\",desc:\"Arrow Square Left\"},{code:\"ph ph-arrow-square-out\",desc:\"Arrow Square Out\"},{code:\"ph ph-arrow-square-right\",desc:\"Arrow Square Right\"},{code:\"ph ph-arrow-square-up\",desc:\"Arrow Square Up\"},{code:\"ph ph-arrow-square-up-left\",desc:\"Arrow Square Up Left\"},{code:\"ph ph-arrow-square-up-right\",desc:\"Arrow Square Up Right\"},{code:\"ph ph-arrows-split\",desc:\"Arrows Split\"},{code:\"ph ph-arrows-vertical\",desc:\"Arrows Vertical\"},{code:\"ph ph-arrow-u-down-left\",desc:\"Arrow U Down Left\"},{code:\"ph ph-arrow-u-down-right\",desc:\"Arrow U Down Right\"},{code:\"ph ph-arrow-u-left-down\",desc:\"Arrow U Left Down\"},{code:\"ph ph-arrow-u-left-up\",desc:\"Arrow U Left Up\"},{code:\"ph ph-arrow-up\",desc:\"Arrow Up\"},{code:\"ph ph-arrow-up-left\",desc:\"Arrow Up Left\"},{code:\"ph ph-arrow-up-right\",desc:\"Arrow Up Right\"},{code:\"ph ph-arrow-u-right-down\",desc:\"Arrow U Right Down\"},{code:\"ph ph-arrow-u-right-up\",desc:\"Arrow U Right Up\"},{code:\"ph ph-arrow-u-up-left\",desc:\"Arrow U Up Left\"},{code:\"ph ph-arrow-u-up-right\",desc:\"Arrow U Up Right\"},{code:\"ph ph-article\",desc:\"Article\"},{code:\"ph ph-article-medium\",desc:\"Article Medium\"},{code:\"ph ph-article-ny-times\",desc:\"Article Ny Times\"},{code:\"ph ph-asterisk\",desc:\"Asterisk\"},{code:\"ph ph-asterisk-simple\",desc:\"Asterisk Simple\"},{code:\"ph ph-at\",desc:\"At\"},{code:\"ph ph-atom\",desc:\"Atom\"},{code:\"ph ph-baby\",desc:\"Baby\"},{code:\"ph ph-backpack\",desc:\"Backpack\"},{code:\"ph ph-backspace\",desc:\"Backspace\"},{code:\"ph ph-bag\",desc:\"Bag\"},{code:\"ph ph-bag-simple\",desc:\"Bag Simple\"},{code:\"ph ph-balloon\",desc:\"Balloon\"},{code:\"ph ph-bandaids\",desc:\"Bandaids\"},{code:\"ph ph-bank\",desc:\"Bank\"},{code:\"ph ph-barbell\",desc:\"Barbell\"},{code:\"ph ph-barcode\",desc:\"Barcode\"},{code:\"ph ph-barricade\",desc:\"Barricade\"},{code:\"ph ph-baseball\",desc:\"Baseball\"},{code:\"ph ph-baseball-cap\",desc:\"Baseball Cap\"},{code:\"ph ph-basket\",desc:\"Basket\"},{code:\"ph ph-basketball\",desc:\"Basketball\"},{code:\"ph ph-bathtub\",desc:\"Bathtub\"},{code:\"ph ph-battery-charging\",desc:\"Battery Charging\"},{code:\"ph ph-battery-charging-vertical\",desc:\"Battery Charging Vertical\"},{code:\"ph ph-battery-empty\",desc:\"Battery Empty\"},{code:\"ph ph-battery-full\",desc:\"Battery Full\"},{code:\"ph ph-battery-high\",desc:\"Battery High\"},{code:\"ph ph-battery-low\",desc:\"Battery Low\"},{code:\"ph ph-battery-medium\",desc:\"Battery Medium\"},{code:\"ph ph-battery-plus\",desc:\"Battery Plus\"},{code:\"ph ph-battery-plus-vertical\",desc:\"Battery Plus Vertical\"},{code:\"ph ph-battery-vertical-empty\",desc:\"Battery Vertical Empty\"},{code:\"ph ph-battery-vertical-full\",desc:\"Battery Vertical Full\"},{code:\"ph ph-battery-vertical-high\",desc:\"Battery Vertical High\"},{code:\"ph ph-battery-vertical-low\",desc:\"Battery Vertical Low\"},{code:\"ph ph-battery-vertical-medium\",desc:\"Battery Vertical Medium\"},{code:\"ph ph-battery-warning\",desc:\"Battery Warning\"},{code:\"ph ph-battery-warning-vertical\",desc:\"Battery Warning Vertical\"},{code:\"ph ph-bed\",desc:\"Bed\"},{code:\"ph ph-beer-bottle\",desc:\"Beer Bottle\"},{code:\"ph ph-beer-stein\",desc:\"Beer Stein\"},{code:\"ph ph-behance-logo\",desc:\"Behance Logo\"},{code:\"ph ph-bell\",desc:\"Bell\"},{code:\"ph ph-bell-ringing\",desc:\"Bell Ringing\"},{code:\"ph ph-bell-simple\",desc:\"Bell Simple\"},{code:\"ph ph-bell-simple-ringing\",desc:\"Bell Simple Ringing\"},{code:\"ph ph-bell-simple-slash\",desc:\"Bell Simple Slash\"},{code:\"ph ph-bell-simple-z\",desc:\"Bell Simple Z\"},{code:\"ph ph-bell-slash\",desc:\"Bell Slash\"},{code:\"ph ph-bell-z\",desc:\"Bell Z\"},{code:\"ph ph-bezier-curve\",desc:\"Bezier Curve\"},{code:\"ph ph-bicycle\",desc:\"Bicycle\"},{code:\"ph ph-binoculars\",desc:\"Binoculars\"},{code:\"ph ph-bird\",desc:\"Bird\"},{code:\"ph ph-bluetooth\",desc:\"Bluetooth\"},{code:\"ph ph-bluetooth-connected\",desc:\"Bluetooth Connected\"},{code:\"ph ph-bluetooth-slash\",desc:\"Bluetooth Slash\"},{code:\"ph ph-bluetooth-x\",desc:\"Bluetooth X\"},{code:\"ph ph-boat\",desc:\"Boat\"},{code:\"ph ph-bone\",desc:\"Bone\"},{code:\"ph ph-book\",desc:\"Book\"},{code:\"ph ph-book-bookmark\",desc:\"Book Bookmark\"},{code:\"ph ph-bookmark\",desc:\"Bookmark\"},{code:\"ph ph-bookmarks\",desc:\"Bookmarks\"},{code:\"ph ph-bookmark-simple\",desc:\"Bookmark Simple\"},{code:\"ph ph-bookmarks-simple\",desc:\"Bookmarks Simple\"},{code:\"ph ph-book-open\",desc:\"Book Open\"},{code:\"ph ph-book-open-text\",desc:\"Book Open Text\"},{code:\"ph ph-books\",desc:\"Books\"},{code:\"ph ph-boot\",desc:\"Boot\"},{code:\"ph ph-bounding-box\",desc:\"Bounding Box\"},{code:\"ph ph-bowl-food\",desc:\"Bowl Food\"},{code:\"ph ph-brackets-angle\",desc:\"Brackets Angle\"},{code:\"ph ph-brackets-curly\",desc:\"Brackets Curly\"},{code:\"ph ph-brackets-round\",desc:\"Brackets Round\"},{code:\"ph ph-brackets-square\",desc:\"Brackets Square\"},{code:\"ph ph-brain\",desc:\"Brain\"},{code:\"ph ph-brandy\",desc:\"Brandy\"},{code:\"ph ph-bridge\",desc:\"Bridge\"},{code:\"ph ph-briefcase\",desc:\"Briefcase\"},{code:\"ph ph-briefcase-metal\",desc:\"Briefcase Metal\"},{code:\"ph ph-broadcast\",desc:\"Broadcast\"},{code:\"ph ph-broom\",desc:\"Broom\"},{code:\"ph ph-browser\",desc:\"Browser\"},{code:\"ph ph-browsers\",desc:\"Browsers\"},{code:\"ph ph-bug\",desc:\"Bug\"},{code:\"ph ph-bug-beetle\",desc:\"Bug Beetle\"},{code:\"ph ph-bug-droid\",desc:\"Bug Droid\"},{code:\"ph ph-buildings\",desc:\"Buildings\"},{code:\"ph ph-bus\",desc:\"Bus\"},{code:\"ph ph-butterfly\",desc:\"Butterfly\"},{code:\"ph ph-cactus\",desc:\"Cactus\"},{code:\"ph ph-cake\",desc:\"Cake\"},{code:\"ph ph-calculator\",desc:\"Calculator\"},{code:\"ph ph-calendar\",desc:\"Calendar\"},{code:\"ph ph-calendar-blank\",desc:\"Calendar Blank\"},{code:\"ph ph-calendar-check\",desc:\"Calendar Check\"},{code:\"ph ph-calendar-plus\",desc:\"Calendar Plus\"},{code:\"ph ph-calendar-x\",desc:\"Calendar X\"},{code:\"ph ph-call-bell\",desc:\"Call Bell\"},{code:\"ph ph-camera\",desc:\"Camera\"},{code:\"ph ph-camera-plus\",desc:\"Camera Plus\"},{code:\"ph ph-camera-rotate\",desc:\"Camera Rotate\"},{code:\"ph ph-camera-slash\",desc:\"Camera Slash\"},{code:\"ph ph-campfire\",desc:\"Campfire\"},{code:\"ph ph-car\",desc:\"Car\"},{code:\"ph ph-cardholder\",desc:\"Cardholder\"},{code:\"ph ph-cards\",desc:\"Cards\"},{code:\"ph ph-caret-circle-double-down\",desc:\"Caret Circle Double Down\"},{code:\"ph ph-caret-circle-double-left\",desc:\"Caret Circle Double Left\"},{code:\"ph ph-caret-circle-double-right\",desc:\"Caret Circle Double Right\"},{code:\"ph ph-caret-circle-double-up\",desc:\"Caret Circle Double Up\"},{code:\"ph ph-caret-circle-down\",desc:\"Caret Circle Down\"},{code:\"ph ph-caret-circle-left\",desc:\"Caret Circle Left\"},{code:\"ph ph-caret-circle-right\",desc:\"Caret Circle Right\"},{code:\"ph ph-caret-circle-up\",desc:\"Caret Circle Up\"},{code:\"ph ph-caret-circle-up-down\",desc:\"Caret Circle Up Down\"},{code:\"ph ph-caret-double-down\",desc:\"Caret Double Down\"},{code:\"ph ph-caret-double-left\",desc:\"Caret Double Left\"},{code:\"ph ph-caret-double-right\",desc:\"Caret Double Right\"},{code:\"ph ph-caret-double-up\",desc:\"Caret Double Up\"},{code:\"ph ph-caret-down\",desc:\"Caret Down\"},{code:\"ph ph-caret-left\",desc:\"Caret Left\"},{code:\"ph ph-caret-right\",desc:\"Caret Right\"},{code:\"ph ph-caret-up\",desc:\"Caret Up\"},{code:\"ph ph-caret-up-down\",desc:\"Caret Up Down\"},{code:\"ph ph-car-profile\",desc:\"Car Profile\"},{code:\"ph ph-carrot\",desc:\"Carrot\"},{code:\"ph ph-car-simple\",desc:\"Car Simple\"},{code:\"ph ph-cassette-tape\",desc:\"Cassette Tape\"},{code:\"ph ph-castle-turret\",desc:\"Castle Turret\"},{code:\"ph ph-cat\",desc:\"Cat\"},{code:\"ph ph-cell-signal-full\",desc:\"Cell Signal Full\"},{code:\"ph ph-cell-signal-high\",desc:\"Cell Signal High\"},{code:\"ph ph-cell-signal-low\",desc:\"Cell Signal Low\"},{code:\"ph ph-cell-signal-medium\",desc:\"Cell Signal Medium\"},{code:\"ph ph-cell-signal-none\",desc:\"Cell Signal None\"},{code:\"ph ph-cell-signal-slash\",desc:\"Cell Signal Slash\"},{code:\"ph ph-cell-signal-x\",desc:\"Cell Signal X\"},{code:\"ph ph-certificate\",desc:\"Certificate\"},{code:\"ph ph-chair\",desc:\"Chair\"},{code:\"ph ph-chalkboard\",desc:\"Chalkboard\"},{code:\"ph ph-chalkboard-simple\",desc:\"Chalkboard Simple\"},{code:\"ph ph-chalkboard-teacher\",desc:\"Chalkboard Teacher\"},{code:\"ph ph-champagne\",desc:\"Champagne\"},{code:\"ph ph-charging-station\",desc:\"Charging Station\"},{code:\"ph ph-chart-bar\",desc:\"Chart Bar\"},{code:\"ph ph-chart-bar-horizontal\",desc:\"Chart Bar Horizontal\"},{code:\"ph ph-chart-donut\",desc:\"Chart Donut\"},{code:\"ph ph-chart-line\",desc:\"Chart Line\"},{code:\"ph ph-chart-line-down\",desc:\"Chart Line Down\"},{code:\"ph ph-chart-line-up\",desc:\"Chart Line Up\"},{code:\"ph ph-chart-pie\",desc:\"Chart Pie\"},{code:\"ph ph-chart-pie-slice\",desc:\"Chart Pie Slice\"},{code:\"ph ph-chart-polar\",desc:\"Chart Polar\"},{code:\"ph ph-chart-scatter\",desc:\"Chart Scatter\"},{code:\"ph ph-chat\",desc:\"Chat\"},{code:\"ph ph-chat-centered\",desc:\"Chat Centered\"},{code:\"ph ph-chat-centered-dots\",desc:\"Chat Centered Dots\"},{code:\"ph ph-chat-centered-text\",desc:\"Chat Centered Text\"},{code:\"ph ph-chat-circle\",desc:\"Chat Circle\"},{code:\"ph ph-chat-circle-dots\",desc:\"Chat Circle Dots\"},{code:\"ph ph-chat-circle-text\",desc:\"Chat Circle Text\"},{code:\"ph ph-chat-dots\",desc:\"Chat Dots\"},{code:\"ph ph-chats\",desc:\"Chats\"},{code:\"ph ph-chats-circle\",desc:\"Chats Circle\"},{code:\"ph ph-chats-teardrop\",desc:\"Chats Teardrop\"},{code:\"ph ph-chat-teardrop\",desc:\"Chat Teardrop\"},{code:\"ph ph-chat-teardrop-dots\",desc:\"Chat Teardrop Dots\"},{code:\"ph ph-chat-teardrop-text\",desc:\"Chat Teardrop Text\"},{code:\"ph ph-chat-text\",desc:\"Chat Text\"},{code:\"ph ph-check\",desc:\"Check\"},{code:\"ph ph-check-circle\",desc:\"Check Circle\"},{code:\"ph ph-check-fat\",desc:\"Check Fat\"},{code:\"ph ph-checks\",desc:\"Checks\"},{code:\"ph ph-check-square\",desc:\"Check Square\"},{code:\"ph ph-check-square-offset\",desc:\"Check Square Offset\"},{code:\"ph ph-church\",desc:\"Church\"},{code:\"ph ph-circle\",desc:\"Circle\"},{code:\"ph ph-circle-dashed\",desc:\"Circle Dashed\"},{code:\"ph ph-circle-half\",desc:\"Circle Half\"},{code:\"ph ph-circle-half-tilt\",desc:\"Circle Half Tilt\"},{code:\"ph ph-circle-notch\",desc:\"Circle Notch\"},{code:\"ph ph-circles-four\",desc:\"Circles Four\"},{code:\"ph ph-circles-three\",desc:\"Circles Three\"},{code:\"ph ph-circles-three-plus\",desc:\"Circles Three Plus\"},{code:\"ph ph-circuitry\",desc:\"Circuitry\"},{code:\"ph ph-clipboard\",desc:\"Clipboard\"},{code:\"ph ph-clipboard-text\",desc:\"Clipboard Text\"},{code:\"ph ph-clock\",desc:\"Clock\"},{code:\"ph ph-clock-afternoon\",desc:\"Clock Afternoon\"},{code:\"ph ph-clock-clockwise\",desc:\"Clock Clockwise\"},{code:\"ph ph-clock-countdown\",desc:\"Clock Countdown\"},{code:\"ph ph-clock-counter-clockwise\",desc:\"Clock Counter Clockwise\"},{code:\"ph ph-closed-captioning\",desc:\"Closed Captioning\"},{code:\"ph ph-cloud\",desc:\"Cloud\"},{code:\"ph ph-cloud-arrow-down\",desc:\"Cloud Arrow Down\"},{code:\"ph ph-cloud-arrow-up\",desc:\"Cloud Arrow Up\"},{code:\"ph ph-cloud-check\",desc:\"Cloud Check\"},{code:\"ph ph-cloud-fog\",desc:\"Cloud Fog\"},{code:\"ph ph-cloud-lightning\",desc:\"Cloud Lightning\"},{code:\"ph ph-cloud-moon\",desc:\"Cloud Moon\"},{code:\"ph ph-cloud-rain\",desc:\"Cloud Rain\"},{code:\"ph ph-cloud-slash\",desc:\"Cloud Slash\"},{code:\"ph ph-cloud-snow\",desc:\"Cloud Snow\"},{code:\"ph ph-cloud-sun\",desc:\"Cloud Sun\"},{code:\"ph ph-cloud-warning\",desc:\"Cloud Warning\"},{code:\"ph ph-cloud-x\",desc:\"Cloud X\"},{code:\"ph ph-club\",desc:\"Club\"},{code:\"ph ph-coat-hanger\",desc:\"Coat Hanger\"},{code:\"ph ph-coda-logo\",desc:\"Coda Logo\"},{code:\"ph ph-code\",desc:\"Code\"},{code:\"ph ph-code-block\",desc:\"Code Block\"},{code:\"ph ph-codepen-logo\",desc:\"Codepen Logo\"},{code:\"ph ph-codesandbox-logo\",desc:\"Codesandbox Logo\"},{code:\"ph ph-code-simple\",desc:\"Code Simple\"},{code:\"ph ph-coffee\",desc:\"Coffee\"},{code:\"ph ph-coin\",desc:\"Coin\"},{code:\"ph ph-coins\",desc:\"Coins\"},{code:\"ph ph-coin-vertical\",desc:\"Coin Vertical\"},{code:\"ph ph-columns\",desc:\"Columns\"},{code:\"ph ph-command\",desc:\"Command\"},{code:\"ph ph-compass\",desc:\"Compass\"},{code:\"ph ph-compass-tool\",desc:\"Compass Tool\"},{code:\"ph ph-computer-tower\",desc:\"Computer Tower\"},{code:\"ph ph-confetti\",desc:\"Confetti\"},{code:\"ph ph-contactless-payment\",desc:\"Contactless Payment\"},{code:\"ph ph-control\",desc:\"Control\"},{code:\"ph ph-cookie\",desc:\"Cookie\"},{code:\"ph ph-cooking-pot\",desc:\"Cooking Pot\"},{code:\"ph ph-copy\",desc:\"Copy\"},{code:\"ph ph-copyleft\",desc:\"Copyleft\"},{code:\"ph ph-copyright\",desc:\"Copyright\"},{code:\"ph ph-copy-simple\",desc:\"Copy Simple\"},{code:\"ph ph-corners-in\",desc:\"Corners In\"},{code:\"ph ph-corners-out\",desc:\"Corners Out\"},{code:\"ph ph-couch\",desc:\"Couch\"},{code:\"ph ph-cpu\",desc:\"Cpu\"},{code:\"ph ph-credit-card\",desc:\"Credit Card\"},{code:\"ph ph-crop\",desc:\"Crop\"},{code:\"ph ph-cross\",desc:\"Cross\"},{code:\"ph ph-crosshair\",desc:\"Crosshair\"},{code:\"ph ph-crosshair-simple\",desc:\"Crosshair Simple\"},{code:\"ph ph-crown\",desc:\"Crown\"},{code:\"ph ph-crown-simple\",desc:\"Crown Simple\"},{code:\"ph ph-cube\",desc:\"Cube\"},{code:\"ph ph-cube-focus\",desc:\"Cube Focus\"},{code:\"ph ph-cube-transparent\",desc:\"Cube Transparent\"},{code:\"ph ph-currency-btc\",desc:\"Currency Btc\"},{code:\"ph ph-currency-circle-dollar\",desc:\"Currency Circle Dollar\"},{code:\"ph ph-currency-cny\",desc:\"Currency Cny\"},{code:\"ph ph-currency-dollar\",desc:\"Currency Dollar\"},{code:\"ph ph-currency-dollar-simple\",desc:\"Currency Dollar Simple\"},{code:\"ph ph-currency-eth\",desc:\"Currency Eth\"},{code:\"ph ph-currency-eur\",desc:\"Currency Eur\"},{code:\"ph ph-currency-gbp\",desc:\"Currency Gbp\"},{code:\"ph ph-currency-inr\",desc:\"Currency Inr\"},{code:\"ph ph-currency-jpy\",desc:\"Currency Jpy\"},{code:\"ph ph-currency-krw\",desc:\"Currency Krw\"},{code:\"ph ph-currency-kzt\",desc:\"Currency Kzt\"},{code:\"ph ph-currency-ngn\",desc:\"Currency Ngn\"},{code:\"ph ph-currency-rub\",desc:\"Currency Rub\"},{code:\"ph ph-cursor\",desc:\"Cursor\"},{code:\"ph ph-cursor-click\",desc:\"Cursor Click\"},{code:\"ph ph-cursor-text\",desc:\"Cursor Text\"},{code:\"ph ph-cylinder\",desc:\"Cylinder\"},{code:\"ph ph-database\",desc:\"Database\"},{code:\"ph ph-desktop\",desc:\"Desktop\"},{code:\"ph ph-desktop-tower\",desc:\"Desktop Tower\"},{code:\"ph ph-detective\",desc:\"Detective\"},{code:\"ph ph-device-mobile\",desc:\"Device Mobile\"},{code:\"ph ph-device-mobile-camera\",desc:\"Device Mobile Camera\"},{code:\"ph ph-device-mobile-speaker\",desc:\"Device Mobile Speaker\"},{code:\"ph ph-devices\",desc:\"Devices\"},{code:\"ph ph-device-tablet\",desc:\"Device Tablet\"},{code:\"ph ph-device-tablet-camera\",desc:\"Device Tablet Camera\"},{code:\"ph ph-device-tablet-speaker\",desc:\"Device Tablet Speaker\"},{code:\"ph ph-dev-to-logo\",desc:\"Dev To Logo\"},{code:\"ph ph-diamond\",desc:\"Diamond\"},{code:\"ph ph-diamonds-four\",desc:\"Diamonds Four\"},{code:\"ph ph-dice-five\",desc:\"Dice Five\"},{code:\"ph ph-dice-four\",desc:\"Dice Four\"},{code:\"ph ph-dice-one\",desc:\"Dice One\"},{code:\"ph ph-dice-six\",desc:\"Dice Six\"},{code:\"ph ph-dice-three\",desc:\"Dice Three\"},{code:\"ph ph-dice-two\",desc:\"Dice Two\"},{code:\"ph ph-disc\",desc:\"Disc\"},{code:\"ph ph-discord-logo\",desc:\"Discord Logo\"},{code:\"ph ph-divide\",desc:\"Divide\"},{code:\"ph ph-dna\",desc:\"Dna\"},{code:\"ph ph-dog\",desc:\"Dog\"},{code:\"ph ph-door\",desc:\"Door\"},{code:\"ph ph-door-open\",desc:\"Door Open\"},{code:\"ph ph-dot\",desc:\"Dot\"},{code:\"ph ph-dot-outline\",desc:\"Dot Outline\"},{code:\"ph ph-dots-nine\",desc:\"Dots Nine\"},{code:\"ph ph-dots-six\",desc:\"Dots Six\"},{code:\"ph ph-dots-six-vertical\",desc:\"Dots Six Vertical\"},{code:\"ph ph-dots-three\",desc:\"Dots Three\"},{code:\"ph ph-dots-three-circle\",desc:\"Dots Three Circle\"},{code:\"ph ph-dots-three-circle-vertical\",desc:\"Dots Three Circle Vertical\"},{code:\"ph ph-dots-three-outline\",desc:\"Dots Three Outline\"},{code:\"ph ph-dots-three-outline-vertical\",desc:\"Dots Three Outline Vertical\"},{code:\"ph ph-dots-three-vertical\",desc:\"Dots Three Vertical\"},{code:\"ph ph-download\",desc:\"Download\"},{code:\"ph ph-download-simple\",desc:\"Download Simple\"},{code:\"ph ph-dress\",desc:\"Dress\"},{code:\"ph ph-dribbble-logo\",desc:\"Dribbble Logo\"},{code:\"ph ph-drop\",desc:\"Drop\"},{code:\"ph ph-dropbox-logo\",desc:\"Dropbox Logo\"},{code:\"ph ph-drop-half\",desc:\"Drop Half\"},{code:\"ph ph-drop-half-bottom\",desc:\"Drop Half Bottom\"},{code:\"ph ph-ear\",desc:\"Ear\"},{code:\"ph ph-ear-slash\",desc:\"Ear Slash\"},{code:\"ph ph-egg\",desc:\"Egg\"},{code:\"ph ph-egg-crack\",desc:\"Egg Crack\"},{code:\"ph ph-eject\",desc:\"Eject\"},{code:\"ph ph-eject-simple\",desc:\"Eject Simple\"},{code:\"ph ph-elevator\",desc:\"Elevator\"},{code:\"ph ph-engine\",desc:\"Engine\"},{code:\"ph ph-envelope\",desc:\"Envelope\"},{code:\"ph ph-envelope-open\",desc:\"Envelope Open\"},{code:\"ph ph-envelope-simple\",desc:\"Envelope Simple\"},{code:\"ph ph-envelope-simple-open\",desc:\"Envelope Simple Open\"},{code:\"ph ph-equalizer\",desc:\"Equalizer\"},{code:\"ph ph-equals\",desc:\"Equals\"},{code:\"ph ph-eraser\",desc:\"Eraser\"},{code:\"ph ph-escalator-down\",desc:\"Escalator Down\"},{code:\"ph ph-escalator-up\",desc:\"Escalator Up\"},{code:\"ph ph-exam\",desc:\"Exam\"},{code:\"ph ph-exclude\",desc:\"Exclude\"},{code:\"ph ph-exclude-square\",desc:\"Exclude Square\"},{code:\"ph ph-export\",desc:\"Export\"},{code:\"ph ph-eye\",desc:\"Eye\"},{code:\"ph ph-eye-closed\",desc:\"Eye Closed\"},{code:\"ph ph-eyedropper\",desc:\"Eyedropper\"},{code:\"ph ph-eyedropper-sample\",desc:\"Eyedropper Sample\"},{code:\"ph ph-eyeglasses\",desc:\"Eyeglasses\"},{code:\"ph ph-eye-slash\",desc:\"Eye Slash\"},{code:\"ph ph-facebook-logo\",desc:\"Facebook Logo\"},{code:\"ph ph-face-mask\",desc:\"Face Mask\"},{code:\"ph ph-factory\",desc:\"Factory\"},{code:\"ph ph-faders\",desc:\"Faders\"},{code:\"ph ph-faders-horizontal\",desc:\"Faders Horizontal\"},{code:\"ph ph-fan\",desc:\"Fan\"},{code:\"ph ph-fast-forward\",desc:\"Fast Forward\"},{code:\"ph ph-fast-forward-circle\",desc:\"Fast Forward Circle\"},{code:\"ph ph-feather\",desc:\"Feather\"},{code:\"ph ph-figma-logo\",desc:\"Figma Logo\"},{code:\"ph ph-file\",desc:\"File\"},{code:\"ph ph-file-archive\",desc:\"File Archive\"},{code:\"ph ph-file-arrow-down\",desc:\"File Arrow Down\"},{code:\"ph ph-file-arrow-up\",desc:\"File Arrow Up\"},{code:\"ph ph-file-audio\",desc:\"File Audio\"},{code:\"ph ph-file-cloud\",desc:\"File Cloud\"},{code:\"ph ph-file-code\",desc:\"File Code\"},{code:\"ph ph-file-css\",desc:\"File Css\"},{code:\"ph ph-file-csv\",desc:\"File Csv\"},{code:\"ph ph-file-dashed\",desc:\"File Dashed\"},{code:\"ph ph-file-dotted\",desc:\"File Dotted\"},{code:\"ph ph-file-doc\",desc:\"File Doc\"},{code:\"ph ph-file-html\",desc:\"File Html\"},{code:\"ph ph-file-image\",desc:\"File Image\"},{code:\"ph ph-file-jpg\",desc:\"File Jpg\"},{code:\"ph ph-file-js\",desc:\"File Js\"},{code:\"ph ph-file-jsx\",desc:\"File Jsx\"},{code:\"ph ph-file-lock\",desc:\"File Lock\"},{code:\"ph ph-file-magnifying-glass\",desc:\"File Magnifying Glass\"},{code:\"ph ph-file-search\",desc:\"File Search\"},{code:\"ph ph-file-minus\",desc:\"File Minus\"},{code:\"ph ph-file-pdf\",desc:\"File Pdf\"},{code:\"ph ph-file-plus\",desc:\"File Plus\"},{code:\"ph ph-file-png\",desc:\"File Png\"},{code:\"ph ph-file-ppt\",desc:\"File Ppt\"},{code:\"ph ph-file-rs\",desc:\"File Rs\"},{code:\"ph ph-files\",desc:\"Files\"},{code:\"ph ph-file-sql\",desc:\"File Sql\"},{code:\"ph ph-file-svg\",desc:\"File Svg\"},{code:\"ph ph-file-text\",desc:\"File Text\"},{code:\"ph ph-file-ts\",desc:\"File Ts\"},{code:\"ph ph-file-tsx\",desc:\"File Tsx\"},{code:\"ph ph-file-video\",desc:\"File Video\"},{code:\"ph ph-file-vue\",desc:\"File Vue\"},{code:\"ph ph-file-x\",desc:\"File X\"},{code:\"ph ph-file-xls\",desc:\"File Xls\"},{code:\"ph ph-file-zip\",desc:\"File Zip\"},{code:\"ph ph-film-reel\",desc:\"Film Reel\"},{code:\"ph ph-film-script\",desc:\"Film Script\"},{code:\"ph ph-film-slate\",desc:\"Film Slate\"},{code:\"ph ph-film-strip\",desc:\"Film Strip\"},{code:\"ph ph-fingerprint\",desc:\"Fingerprint\"},{code:\"ph ph-fingerprint-simple\",desc:\"Fingerprint Simple\"},{code:\"ph ph-finn-the-human\",desc:\"Finn The Human\"},{code:\"ph ph-fire\",desc:\"Fire\"},{code:\"ph ph-fire-extinguisher\",desc:\"Fire Extinguisher\"},{code:\"ph ph-fire-simple\",desc:\"Fire Simple\"},{code:\"ph ph-first-aid\",desc:\"First Aid\"},{code:\"ph ph-first-aid-kit\",desc:\"First Aid Kit\"},{code:\"ph ph-fish\",desc:\"Fish\"},{code:\"ph ph-fish-simple\",desc:\"Fish Simple\"},{code:\"ph ph-flag\",desc:\"Flag\"},{code:\"ph ph-flag-banner\",desc:\"Flag Banner\"},{code:\"ph ph-flag-checkered\",desc:\"Flag Checkered\"},{code:\"ph ph-flag-pennant\",desc:\"Flag Pennant\"},{code:\"ph ph-flame\",desc:\"Flame\"},{code:\"ph ph-flashlight\",desc:\"Flashlight\"},{code:\"ph ph-flask\",desc:\"Flask\"},{code:\"ph ph-floppy-disk\",desc:\"Floppy Disk\"},{code:\"ph ph-floppy-disk-back\",desc:\"Floppy Disk Back\"},{code:\"ph ph-flow-arrow\",desc:\"Flow Arrow\"},{code:\"ph ph-flower\",desc:\"Flower\"},{code:\"ph ph-flower-lotus\",desc:\"Flower Lotus\"},{code:\"ph ph-flower-tulip\",desc:\"Flower Tulip\"},{code:\"ph ph-flying-saucer\",desc:\"Flying Saucer\"},{code:\"ph ph-folder\",desc:\"Folder\"},{code:\"ph ph-folder-dashed\",desc:\"Folder Dashed\"},{code:\"ph ph-folder-dotted\",desc:\"Folder Dotted\"},{code:\"ph ph-folder-lock\",desc:\"Folder Lock\"},{code:\"ph ph-folder-minus\",desc:\"Folder Minus\"},{code:\"ph ph-folder-notch\",desc:\"Folder Notch\"},{code:\"ph ph-folder-notch-minus\",desc:\"Folder Notch Minus\"},{code:\"ph ph-folder-notch-open\",desc:\"Folder Notch Open\"},{code:\"ph ph-folder-notch-plus\",desc:\"Folder Notch Plus\"},{code:\"ph ph-folder-open\",desc:\"Folder Open\"},{code:\"ph ph-folder-plus\",desc:\"Folder Plus\"},{code:\"ph ph-folders\",desc:\"Folders\"},{code:\"ph ph-folder-simple\",desc:\"Folder Simple\"},{code:\"ph ph-folder-simple-dashed\",desc:\"Folder Simple Dashed\"},{code:\"ph ph-folder-simple-dotted\",desc:\"Folder Simple Dotted\"},{code:\"ph ph-folder-simple-lock\",desc:\"Folder Simple Lock\"},{code:\"ph ph-folder-simple-minus\",desc:\"Folder Simple Minus\"},{code:\"ph ph-folder-simple-plus\",desc:\"Folder Simple Plus\"},{code:\"ph ph-folder-simple-star\",desc:\"Folder Simple Star\"},{code:\"ph ph-folder-simple-user\",desc:\"Folder Simple User\"},{code:\"ph ph-folder-star\",desc:\"Folder Star\"},{code:\"ph ph-folder-user\",desc:\"Folder User\"},{code:\"ph ph-football\",desc:\"Football\"},{code:\"ph ph-footprints\",desc:\"Footprints\"},{code:\"ph ph-fork-knife\",desc:\"Fork Knife\"},{code:\"ph ph-frame-corners\",desc:\"Frame Corners\"},{code:\"ph ph-framer-logo\",desc:\"Framer Logo\"},{code:\"ph ph-function\",desc:\"Function\"},{code:\"ph ph-funnel\",desc:\"Funnel\"},{code:\"ph ph-funnel-simple\",desc:\"Funnel Simple\"},{code:\"ph ph-game-controller\",desc:\"Game Controller\"},{code:\"ph ph-garage\",desc:\"Garage\"},{code:\"ph ph-gas-can\",desc:\"Gas Can\"},{code:\"ph ph-gas-pump\",desc:\"Gas Pump\"},{code:\"ph ph-gauge\",desc:\"Gauge\"},{code:\"ph ph-gavel\",desc:\"Gavel\"},{code:\"ph ph-gear\",desc:\"Gear\"},{code:\"ph ph-gear-fine\",desc:\"Gear Fine\"},{code:\"ph ph-gear-six\",desc:\"Gear Six\"},{code:\"ph ph-gender-female\",desc:\"Gender Female\"},{code:\"ph ph-gender-intersex\",desc:\"Gender Intersex\"},{code:\"ph ph-gender-male\",desc:\"Gender Male\"},{code:\"ph ph-gender-neuter\",desc:\"Gender Neuter\"},{code:\"ph ph-gender-nonbinary\",desc:\"Gender Nonbinary\"},{code:\"ph ph-gender-transgender\",desc:\"Gender Transgender\"},{code:\"ph ph-ghost\",desc:\"Ghost\"},{code:\"ph ph-gif\",desc:\"Gif\"},{code:\"ph ph-gift\",desc:\"Gift\"},{code:\"ph ph-git-branch\",desc:\"Git Branch\"},{code:\"ph ph-git-commit\",desc:\"Git Commit\"},{code:\"ph ph-git-diff\",desc:\"Git Diff\"},{code:\"ph ph-git-fork\",desc:\"Git Fork\"},{code:\"ph ph-github-logo\",desc:\"Github Logo\"},{code:\"ph ph-gitlab-logo\",desc:\"Gitlab Logo\"},{code:\"ph ph-gitlab-logo-simple\",desc:\"Gitlab Logo Simple\"},{code:\"ph ph-git-merge\",desc:\"Git Merge\"},{code:\"ph ph-git-pull-request\",desc:\"Git Pull Request\"},{code:\"ph ph-globe\",desc:\"Globe\"},{code:\"ph ph-globe-hemisphere-east\",desc:\"Globe Hemisphere East\"},{code:\"ph ph-globe-hemisphere-west\",desc:\"Globe Hemisphere West\"},{code:\"ph ph-globe-simple\",desc:\"Globe Simple\"},{code:\"ph ph-globe-stand\",desc:\"Globe Stand\"},{code:\"ph ph-goggles\",desc:\"Goggles\"},{code:\"ph ph-goodreads-logo\",desc:\"Goodreads Logo\"},{code:\"ph ph-google-cardboard-logo\",desc:\"Google Cardboard Logo\"},{code:\"ph ph-google-chrome-logo\",desc:\"Google Chrome Logo\"},{code:\"ph ph-google-drive-logo\",desc:\"Google Drive Logo\"},{code:\"ph ph-google-logo\",desc:\"Google Logo\"},{code:\"ph ph-google-photos-logo\",desc:\"Google Photos Logo\"},{code:\"ph ph-google-play-logo\",desc:\"Google Play Logo\"},{code:\"ph ph-google-podcasts-logo\",desc:\"Google Podcasts Logo\"},{code:\"ph ph-gradient\",desc:\"Gradient\"},{code:\"ph ph-graduation-cap\",desc:\"Graduation Cap\"},{code:\"ph ph-grains\",desc:\"Grains\"},{code:\"ph ph-grains-slash\",desc:\"Grains Slash\"},{code:\"ph ph-graph\",desc:\"Graph\"},{code:\"ph ph-grid-four\",desc:\"Grid Four\"},{code:\"ph ph-grid-nine\",desc:\"Grid Nine\"},{code:\"ph ph-guitar\",desc:\"Guitar\"},{code:\"ph ph-hamburger\",desc:\"Hamburger\"},{code:\"ph ph-hammer\",desc:\"Hammer\"},{code:\"ph ph-hand\",desc:\"Hand\"},{code:\"ph ph-handbag\",desc:\"Handbag\"},{code:\"ph ph-handbag-simple\",desc:\"Handbag Simple\"},{code:\"ph ph-hand-coins\",desc:\"Hand Coins\"},{code:\"ph ph-hand-eye\",desc:\"Hand Eye\"},{code:\"ph ph-hand-fist\",desc:\"Hand Fist\"},{code:\"ph ph-hand-grabbing\",desc:\"Hand Grabbing\"},{code:\"ph ph-hand-heart\",desc:\"Hand Heart\"},{code:\"ph ph-hand-palm\",desc:\"Hand Palm\"},{code:\"ph ph-hand-pointing\",desc:\"Hand Pointing\"},{code:\"ph ph-hands-clapping\",desc:\"Hands Clapping\"},{code:\"ph ph-handshake\",desc:\"Handshake\"},{code:\"ph ph-hand-soap\",desc:\"Hand Soap\"},{code:\"ph ph-hands-praying\",desc:\"Hands Praying\"},{code:\"ph ph-hand-swipe-left\",desc:\"Hand Swipe Left\"},{code:\"ph ph-hand-swipe-right\",desc:\"Hand Swipe Right\"},{code:\"ph ph-hand-tap\",desc:\"Hand Tap\"},{code:\"ph ph-hand-waving\",desc:\"Hand Waving\"},{code:\"ph ph-hard-drive\",desc:\"Hard Drive\"},{code:\"ph ph-hard-drives\",desc:\"Hard Drives\"},{code:\"ph ph-hash\",desc:\"Hash\"},{code:\"ph ph-hash-straight\",desc:\"Hash Straight\"},{code:\"ph ph-headlights\",desc:\"Headlights\"},{code:\"ph ph-headphones\",desc:\"Headphones\"},{code:\"ph ph-headset\",desc:\"Headset\"},{code:\"ph ph-heart\",desc:\"Heart\"},{code:\"ph ph-heartbeat\",desc:\"Heartbeat\"},{code:\"ph ph-heart-break\",desc:\"Heart Break\"},{code:\"ph ph-heart-half\",desc:\"Heart Half\"},{code:\"ph ph-heart-straight\",desc:\"Heart Straight\"},{code:\"ph ph-heart-straight-break\",desc:\"Heart Straight Break\"},{code:\"ph ph-hexagon\",desc:\"Hexagon\"},{code:\"ph ph-high-heel\",desc:\"High Heel\"},{code:\"ph ph-highlighter-circle\",desc:\"Highlighter Circle\"},{code:\"ph ph-hoodie\",desc:\"Hoodie\"},{code:\"ph ph-horse\",desc:\"Horse\"},{code:\"ph ph-hourglass\",desc:\"Hourglass\"},{code:\"ph ph-hourglass-high\",desc:\"Hourglass High\"},{code:\"ph ph-hourglass-low\",desc:\"Hourglass Low\"},{code:\"ph ph-hourglass-medium\",desc:\"Hourglass Medium\"},{code:\"ph ph-hourglass-simple\",desc:\"Hourglass Simple\"},{code:\"ph ph-hourglass-simple-high\",desc:\"Hourglass Simple High\"},{code:\"ph ph-hourglass-simple-low\",desc:\"Hourglass Simple Low\"},{code:\"ph ph-hourglass-simple-medium\",desc:\"Hourglass Simple Medium\"},{code:\"ph ph-house\",desc:\"House\"},{code:\"ph ph-house-line\",desc:\"House Line\"},{code:\"ph ph-house-simple\",desc:\"House Simple\"},{code:\"ph ph-ice-cream\",desc:\"Ice Cream\"},{code:\"ph ph-identification-badge\",desc:\"Identification Badge\"},{code:\"ph ph-identification-card\",desc:\"Identification Card\"},{code:\"ph ph-image\",desc:\"Image\"},{code:\"ph ph-images\",desc:\"Images\"},{code:\"ph ph-image-square\",desc:\"Image Square\"},{code:\"ph ph-images-square\",desc:\"Images Square\"},{code:\"ph ph-infinity\",desc:\"Infinity\"},{code:\"ph ph-info\",desc:\"Info\"},{code:\"ph ph-instagram-logo\",desc:\"Instagram Logo\"},{code:\"ph ph-intersect\",desc:\"Intersect\"},{code:\"ph ph-intersect-square\",desc:\"Intersect Square\"},{code:\"ph ph-intersect-three\",desc:\"Intersect Three\"},{code:\"ph ph-jeep\",desc:\"Jeep\"},{code:\"ph ph-kanban\",desc:\"Kanban\"},{code:\"ph ph-key\",desc:\"Key\"},{code:\"ph ph-keyboard\",desc:\"Keyboard\"},{code:\"ph ph-keyhole\",desc:\"Keyhole\"},{code:\"ph ph-key-return\",desc:\"Key Return\"},{code:\"ph ph-knife\",desc:\"Knife\"},{code:\"ph ph-ladder\",desc:\"Ladder\"},{code:\"ph ph-ladder-simple\",desc:\"Ladder Simple\"},{code:\"ph ph-lamp\",desc:\"Lamp\"},{code:\"ph ph-laptop\",desc:\"Laptop\"},{code:\"ph ph-layout\",desc:\"Layout\"},{code:\"ph ph-leaf\",desc:\"Leaf\"},{code:\"ph ph-lifebuoy\",desc:\"Lifebuoy\"},{code:\"ph ph-lightbulb\",desc:\"Lightbulb\"},{code:\"ph ph-lightbulb-filament\",desc:\"Lightbulb Filament\"},{code:\"ph ph-lighthouse\",desc:\"Lighthouse\"},{code:\"ph ph-lightning\",desc:\"Lightning\"},{code:\"ph ph-lightning-a\",desc:\"Lightning A\"},{code:\"ph ph-lightning-slash\",desc:\"Lightning Slash\"},{code:\"ph ph-line-segment\",desc:\"Line Segment\"},{code:\"ph ph-line-segments\",desc:\"Line Segments\"},{code:\"ph ph-link\",desc:\"Link\"},{code:\"ph ph-link-break\",desc:\"Link Break\"},{code:\"ph ph-linkedin-logo\",desc:\"Linkedin Logo\"},{code:\"ph ph-link-simple\",desc:\"Link Simple\"},{code:\"ph ph-link-simple-break\",desc:\"Link Simple Break\"},{code:\"ph ph-link-simple-horizontal\",desc:\"Link Simple Horizontal\"},{code:\"ph ph-link-simple-horizontal-break\",desc:\"Link Simple Horizontal Break\"},{code:\"ph ph-linux-logo\",desc:\"Linux Logo\"},{code:\"ph ph-list\",desc:\"List\"},{code:\"ph ph-list-bullets\",desc:\"List Bullets\"},{code:\"ph ph-list-checks\",desc:\"List Checks\"},{code:\"ph ph-list-dashes\",desc:\"List Dashes\"},{code:\"ph ph-list-magnifying-glass\",desc:\"List Magnifying Glass\"},{code:\"ph ph-list-numbers\",desc:\"List Numbers\"},{code:\"ph ph-list-plus\",desc:\"List Plus\"},{code:\"ph ph-lock\",desc:\"Lock\"},{code:\"ph ph-lockers\",desc:\"Lockers\"},{code:\"ph ph-lock-key\",desc:\"Lock Key\"},{code:\"ph ph-lock-key-open\",desc:\"Lock Key Open\"},{code:\"ph ph-lock-laminated\",desc:\"Lock Laminated\"},{code:\"ph ph-lock-laminated-open\",desc:\"Lock Laminated Open\"},{code:\"ph ph-lock-open\",desc:\"Lock Open\"},{code:\"ph ph-lock-simple\",desc:\"Lock Simple\"},{code:\"ph ph-lock-simple-open\",desc:\"Lock Simple Open\"},{code:\"ph ph-magic-wand\",desc:\"Magic Wand\"},{code:\"ph ph-magnet\",desc:\"Magnet\"},{code:\"ph ph-magnet-straight\",desc:\"Magnet Straight\"},{code:\"ph ph-magnifying-glass\",desc:\"Magnifying Glass\"},{code:\"ph ph-magnifying-glass-minus\",desc:\"Magnifying Glass Minus\"},{code:\"ph ph-magnifying-glass-plus\",desc:\"Magnifying Glass Plus\"},{code:\"ph ph-map-pin\",desc:\"Map Pin\"},{code:\"ph ph-map-pin-line\",desc:\"Map Pin Line\"},{code:\"ph ph-map-trifold\",desc:\"Map Trifold\"},{code:\"ph ph-marker-circle\",desc:\"Marker Circle\"},{code:\"ph ph-martini\",desc:\"Martini\"},{code:\"ph ph-mask-happy\",desc:\"Mask Happy\"},{code:\"ph ph-mask-sad\",desc:\"Mask Sad\"},{code:\"ph ph-math-operations\",desc:\"Math Operations\"},{code:\"ph ph-medal\",desc:\"Medal\"},{code:\"ph ph-medal-military\",desc:\"Medal Military\"},{code:\"ph ph-medium-logo\",desc:\"Medium Logo\"},{code:\"ph ph-megaphone\",desc:\"Megaphone\"},{code:\"ph ph-megaphone-simple\",desc:\"Megaphone Simple\"},{code:\"ph ph-messenger-logo\",desc:\"Messenger Logo\"},{code:\"ph ph-meta-logo\",desc:\"Meta Logo\"},{code:\"ph ph-metronome\",desc:\"Metronome\"},{code:\"ph ph-microphone\",desc:\"Microphone\"},{code:\"ph ph-microphone-slash\",desc:\"Microphone Slash\"},{code:\"ph ph-microphone-stage\",desc:\"Microphone Stage\"},{code:\"ph ph-microsoft-excel-logo\",desc:\"Microsoft Excel Logo\"},{code:\"ph ph-microsoft-outlook-logo\",desc:\"Microsoft Outlook Logo\"},{code:\"ph ph-microsoft-powerpoint-logo\",desc:\"Microsoft Powerpoint Logo\"},{code:\"ph ph-microsoft-teams-logo\",desc:\"Microsoft Teams Logo\"},{code:\"ph ph-microsoft-word-logo\",desc:\"Microsoft Word Logo\"},{code:\"ph ph-minus\",desc:\"Minus\"},{code:\"ph ph-minus-circle\",desc:\"Minus Circle\"},{code:\"ph ph-minus-square\",desc:\"Minus Square\"},{code:\"ph ph-money\",desc:\"Money\"},{code:\"ph ph-monitor\",desc:\"Monitor\"},{code:\"ph ph-monitor-play\",desc:\"Monitor Play\"},{code:\"ph ph-moon\",desc:\"Moon\"},{code:\"ph ph-moon-stars\",desc:\"Moon Stars\"},{code:\"ph ph-moped\",desc:\"Moped\"},{code:\"ph ph-moped-front\",desc:\"Moped Front\"},{code:\"ph ph-mosque\",desc:\"Mosque\"},{code:\"ph ph-motorcycle\",desc:\"Motorcycle\"},{code:\"ph ph-mountains\",desc:\"Mountains\"},{code:\"ph ph-mouse\",desc:\"Mouse\"},{code:\"ph ph-mouse-simple\",desc:\"Mouse Simple\"},{code:\"ph ph-music-note\",desc:\"Music Note\"},{code:\"ph ph-music-notes\",desc:\"Music Notes\"},{code:\"ph ph-music-note-simple\",desc:\"Music Note Simple\"},{code:\"ph ph-music-notes-plus\",desc:\"Music Notes Plus\"},{code:\"ph ph-music-notes-simple\",desc:\"Music Notes Simple\"},{code:\"ph ph-navigation-arrow\",desc:\"Navigation Arrow\"},{code:\"ph ph-needle\",desc:\"Needle\"},{code:\"ph ph-newspaper\",desc:\"Newspaper\"},{code:\"ph ph-newspaper-clipping\",desc:\"Newspaper Clipping\"},{code:\"ph ph-notches\",desc:\"Notches\"},{code:\"ph ph-note\",desc:\"Note\"},{code:\"ph ph-note-blank\",desc:\"Note Blank\"},{code:\"ph ph-notebook\",desc:\"Notebook\"},{code:\"ph ph-notepad\",desc:\"Notepad\"},{code:\"ph ph-note-pencil\",desc:\"Note Pencil\"},{code:\"ph ph-notification\",desc:\"Notification\"},{code:\"ph ph-notion-logo\",desc:\"Notion Logo\"},{code:\"ph ph-number-circle-eight\",desc:\"Number Circle Eight\"},{code:\"ph ph-number-circle-five\",desc:\"Number Circle Five\"},{code:\"ph ph-number-circle-four\",desc:\"Number Circle Four\"},{code:\"ph ph-number-circle-nine\",desc:\"Number Circle Nine\"},{code:\"ph ph-number-circle-one\",desc:\"Number Circle One\"},{code:\"ph ph-number-circle-seven\",desc:\"Number Circle Seven\"},{code:\"ph ph-number-circle-six\",desc:\"Number Circle Six\"},{code:\"ph ph-number-circle-three\",desc:\"Number Circle Three\"},{code:\"ph ph-number-circle-two\",desc:\"Number Circle Two\"},{code:\"ph ph-number-circle-zero\",desc:\"Number Circle Zero\"},{code:\"ph ph-number-eight\",desc:\"Number Eight\"},{code:\"ph ph-number-five\",desc:\"Number Five\"},{code:\"ph ph-number-four\",desc:\"Number Four\"},{code:\"ph ph-number-nine\",desc:\"Number Nine\"},{code:\"ph ph-number-one\",desc:\"Number One\"},{code:\"ph ph-number-seven\",desc:\"Number Seven\"},{code:\"ph ph-number-six\",desc:\"Number Six\"},{code:\"ph ph-number-square-eight\",desc:\"Number Square Eight\"},{code:\"ph ph-number-square-five\",desc:\"Number Square Five\"},{code:\"ph ph-number-square-four\",desc:\"Number Square Four\"},{code:\"ph ph-number-square-nine\",desc:\"Number Square Nine\"},{code:\"ph ph-number-square-one\",desc:\"Number Square One\"},{code:\"ph ph-number-square-seven\",desc:\"Number Square Seven\"},{code:\"ph ph-number-square-six\",desc:\"Number Square Six\"},{code:\"ph ph-number-square-three\",desc:\"Number Square Three\"},{code:\"ph ph-number-square-two\",desc:\"Number Square Two\"},{code:\"ph ph-number-square-zero\",desc:\"Number Square Zero\"},{code:\"ph ph-number-three\",desc:\"Number Three\"},{code:\"ph ph-number-two\",desc:\"Number Two\"},{code:\"ph ph-number-zero\",desc:\"Number Zero\"},{code:\"ph ph-nut\",desc:\"Nut\"},{code:\"ph ph-ny-times-logo\",desc:\"Ny Times Logo\"},{code:\"ph ph-octagon\",desc:\"Octagon\"},{code:\"ph ph-office-chair\",desc:\"Office Chair\"},{code:\"ph ph-option\",desc:\"Option\"},{code:\"ph ph-orange-slice\",desc:\"Orange Slice\"},{code:\"ph ph-package\",desc:\"Package\"},{code:\"ph ph-paint-brush\",desc:\"Paint Brush\"},{code:\"ph ph-paint-brush-broad\",desc:\"Paint Brush Broad\"},{code:\"ph ph-paint-brush-household\",desc:\"Paint Brush Household\"},{code:\"ph ph-paint-bucket\",desc:\"Paint Bucket\"},{code:\"ph ph-paint-roller\",desc:\"Paint Roller\"},{code:\"ph ph-palette\",desc:\"Palette\"},{code:\"ph ph-pants\",desc:\"Pants\"},{code:\"ph ph-paperclip\",desc:\"Paperclip\"},{code:\"ph ph-paperclip-horizontal\",desc:\"Paperclip Horizontal\"},{code:\"ph ph-paper-plane\",desc:\"Paper Plane\"},{code:\"ph ph-paper-plane-right\",desc:\"Paper Plane Right\"},{code:\"ph ph-paper-plane-tilt\",desc:\"Paper Plane Tilt\"},{code:\"ph ph-parachute\",desc:\"Parachute\"},{code:\"ph ph-paragraph\",desc:\"Paragraph\"},{code:\"ph ph-parallelogram\",desc:\"Parallelogram\"},{code:\"ph ph-park\",desc:\"Park\"},{code:\"ph ph-password\",desc:\"Password\"},{code:\"ph ph-path\",desc:\"Path\"},{code:\"ph ph-patreon-logo\",desc:\"Patreon Logo\"},{code:\"ph ph-pause\",desc:\"Pause\"},{code:\"ph ph-pause-circle\",desc:\"Pause Circle\"},{code:\"ph ph-paw-print\",desc:\"Paw Print\"},{code:\"ph ph-paypal-logo\",desc:\"Paypal Logo\"},{code:\"ph ph-peace\",desc:\"Peace\"},{code:\"ph ph-pen\",desc:\"Pen\"},{code:\"ph ph-pencil\",desc:\"Pencil\"},{code:\"ph ph-pencil-circle\",desc:\"Pencil Circle\"},{code:\"ph ph-pencil-line\",desc:\"Pencil Line\"},{code:\"ph ph-pencil-simple\",desc:\"Pencil Simple\"},{code:\"ph ph-pencil-simple-line\",desc:\"Pencil Simple Line\"},{code:\"ph ph-pencil-simple-slash\",desc:\"Pencil Simple Slash\"},{code:\"ph ph-pencil-slash\",desc:\"Pencil Slash\"},{code:\"ph ph-pen-nib\",desc:\"Pen Nib\"},{code:\"ph ph-pen-nib-straight\",desc:\"Pen Nib Straight\"},{code:\"ph ph-pentagram\",desc:\"Pentagram\"},{code:\"ph ph-pepper\",desc:\"Pepper\"},{code:\"ph ph-percent\",desc:\"Percent\"},{code:\"ph ph-person\",desc:\"Person\"},{code:\"ph ph-person-arms-spread\",desc:\"Person Arms Spread\"},{code:\"ph ph-person-simple\",desc:\"Person Simple\"},{code:\"ph ph-person-simple-bike\",desc:\"Person Simple Bike\"},{code:\"ph ph-person-simple-run\",desc:\"Person Simple Run\"},{code:\"ph ph-person-simple-throw\",desc:\"Person Simple Throw\"},{code:\"ph ph-person-simple-walk\",desc:\"Person Simple Walk\"},{code:\"ph ph-perspective\",desc:\"Perspective\"},{code:\"ph ph-phone\",desc:\"Phone\"},{code:\"ph ph-phone-call\",desc:\"Phone Call\"},{code:\"ph ph-phone-disconnect\",desc:\"Phone Disconnect\"},{code:\"ph ph-phone-incoming\",desc:\"Phone Incoming\"},{code:\"ph ph-phone-outgoing\",desc:\"Phone Outgoing\"},{code:\"ph ph-phone-plus\",desc:\"Phone Plus\"},{code:\"ph ph-phone-slash\",desc:\"Phone Slash\"},{code:\"ph ph-phone-x\",desc:\"Phone X\"},{code:\"ph ph-phosphor-logo\",desc:\"Phosphor Logo\"},{code:\"ph ph-pi\",desc:\"Pi\"},{code:\"ph ph-piano-keys\",desc:\"Piano Keys\"},{code:\"ph ph-picture-in-picture\",desc:\"Picture In Picture\"},{code:\"ph ph-piggy-bank\",desc:\"Piggy Bank\"},{code:\"ph ph-pill\",desc:\"Pill\"},{code:\"ph ph-pinterest-logo\",desc:\"Pinterest Logo\"},{code:\"ph ph-pinwheel\",desc:\"Pinwheel\"},{code:\"ph ph-pizza\",desc:\"Pizza\"},{code:\"ph ph-placeholder\",desc:\"Placeholder\"},{code:\"ph ph-planet\",desc:\"Planet\"},{code:\"ph ph-plant\",desc:\"Plant\"},{code:\"ph ph-play\",desc:\"Play\"},{code:\"ph ph-play-circle\",desc:\"Play Circle\"},{code:\"ph ph-playlist\",desc:\"Playlist\"},{code:\"ph ph-play-pause\",desc:\"Play Pause\"},{code:\"ph ph-plug\",desc:\"Plug\"},{code:\"ph ph-plug-charging\",desc:\"Plug Charging\"},{code:\"ph ph-plugs\",desc:\"Plugs\"},{code:\"ph ph-plugs-connected\",desc:\"Plugs Connected\"},{code:\"ph ph-plus\",desc:\"Plus\"},{code:\"ph ph-plus-circle\",desc:\"Plus Circle\"},{code:\"ph ph-plus-minus\",desc:\"Plus Minus\"},{code:\"ph ph-plus-square\",desc:\"Plus Square\"},{code:\"ph ph-poker-chip\",desc:\"Poker Chip\"},{code:\"ph ph-police-car\",desc:\"Police Car\"},{code:\"ph ph-polygon\",desc:\"Polygon\"},{code:\"ph ph-popcorn\",desc:\"Popcorn\"},{code:\"ph ph-potted-plant\",desc:\"Potted Plant\"},{code:\"ph ph-power\",desc:\"Power\"},{code:\"ph ph-prescription\",desc:\"Prescription\"},{code:\"ph ph-presentation\",desc:\"Presentation\"},{code:\"ph ph-presentation-chart\",desc:\"Presentation Chart\"},{code:\"ph ph-printer\",desc:\"Printer\"},{code:\"ph ph-prohibit\",desc:\"Prohibit\"},{code:\"ph ph-prohibit-inset\",desc:\"Prohibit Inset\"},{code:\"ph ph-projector-screen\",desc:\"Projector Screen\"},{code:\"ph ph-projector-screen-chart\",desc:\"Projector Screen Chart\"},{code:\"ph ph-pulse\",desc:\"Pulse\"},{code:\"ph ph-activity\",desc:\"Activity\"},{code:\"ph ph-push-pin\",desc:\"Push Pin\"},{code:\"ph ph-push-pin-simple\",desc:\"Push Pin Simple\"},{code:\"ph ph-push-pin-simple-slash\",desc:\"Push Pin Simple Slash\"},{code:\"ph ph-push-pin-slash\",desc:\"Push Pin Slash\"},{code:\"ph ph-puzzle-piece\",desc:\"Puzzle Piece\"},{code:\"ph ph-qr-code\",desc:\"Qr Code\"},{code:\"ph ph-question\",desc:\"Question\"},{code:\"ph ph-queue\",desc:\"Queue\"},{code:\"ph ph-quotes\",desc:\"Quotes\"},{code:\"ph ph-radical\",desc:\"Radical\"},{code:\"ph ph-radio\",desc:\"Radio\"},{code:\"ph ph-radioactive\",desc:\"Radioactive\"},{code:\"ph ph-radio-button\",desc:\"Radio Button\"},{code:\"ph ph-rainbow\",desc:\"Rainbow\"},{code:\"ph ph-rainbow-cloud\",desc:\"Rainbow Cloud\"},{code:\"ph ph-read-cv-logo\",desc:\"Read Cv Logo\"},{code:\"ph ph-receipt\",desc:\"Receipt\"},{code:\"ph ph-receipt-x\",desc:\"Receipt X\"},{code:\"ph ph-record\",desc:\"Record\"},{code:\"ph ph-rectangle\",desc:\"Rectangle\"},{code:\"ph ph-recycle\",desc:\"Recycle\"},{code:\"ph ph-reddit-logo\",desc:\"Reddit Logo\"},{code:\"ph ph-repeat\",desc:\"Repeat\"},{code:\"ph ph-repeat-once\",desc:\"Repeat Once\"},{code:\"ph ph-rewind\",desc:\"Rewind\"},{code:\"ph ph-rewind-circle\",desc:\"Rewind Circle\"},{code:\"ph ph-road-horizon\",desc:\"Road Horizon\"},{code:\"ph ph-robot\",desc:\"Robot\"},{code:\"ph ph-rocket\",desc:\"Rocket\"},{code:\"ph ph-rocket-launch\",desc:\"Rocket Launch\"},{code:\"ph ph-rows\",desc:\"Rows\"},{code:\"ph ph-rss\",desc:\"Rss\"},{code:\"ph ph-rss-simple\",desc:\"Rss Simple\"},{code:\"ph ph-rug\",desc:\"Rug\"},{code:\"ph ph-ruler\",desc:\"Ruler\"},{code:\"ph ph-scales\",desc:\"Scales\"},{code:\"ph ph-scan\",desc:\"Scan\"},{code:\"ph ph-scissors\",desc:\"Scissors\"},{code:\"ph ph-scooter\",desc:\"Scooter\"},{code:\"ph ph-screencast\",desc:\"Screencast\"},{code:\"ph ph-scribble-loop\",desc:\"Scribble Loop\"},{code:\"ph ph-scroll\",desc:\"Scroll\"},{code:\"ph ph-seal\",desc:\"Seal\"},{code:\"ph ph-seal-check\",desc:\"Seal Check\"},{code:\"ph ph-seal-question\",desc:\"Seal Question\"},{code:\"ph ph-seal-warning\",desc:\"Seal Warning\"},{code:\"ph ph-circle-wavy\",desc:\"Circle Wavy\"},{code:\"ph ph-circle-wavy-check\",desc:\"Circle Wavy Check\"},{code:\"ph ph-circle-wavy-question\",desc:\"Circle Wavy Question\"},{code:\"ph ph-circle-wavy-warning\",desc:\"Circle Wavy Warning\"},{code:\"ph ph-selection\",desc:\"Selection\"},{code:\"ph ph-selection-all\",desc:\"Selection All\"},{code:\"ph ph-selection-background\",desc:\"Selection Background\"},{code:\"ph ph-selection-foreground\",desc:\"Selection Foreground\"},{code:\"ph ph-selection-inverse\",desc:\"Selection Inverse\"},{code:\"ph ph-selection-plus\",desc:\"Selection Plus\"},{code:\"ph ph-selection-slash\",desc:\"Selection Slash\"},{code:\"ph ph-shapes\",desc:\"Shapes\"},{code:\"ph ph-share\",desc:\"Share\"},{code:\"ph ph-share-fat\",desc:\"Share Fat\"},{code:\"ph ph-share-network\",desc:\"Share Network\"},{code:\"ph ph-shield\",desc:\"Shield\"},{code:\"ph ph-shield-check\",desc:\"Shield Check\"},{code:\"ph ph-shield-checkered\",desc:\"Shield Checkered\"},{code:\"ph ph-shield-chevron\",desc:\"Shield Chevron\"},{code:\"ph ph-shield-plus\",desc:\"Shield Plus\"},{code:\"ph ph-shield-slash\",desc:\"Shield Slash\"},{code:\"ph ph-shield-star\",desc:\"Shield Star\"},{code:\"ph ph-shield-warning\",desc:\"Shield Warning\"},{code:\"ph ph-shirt-folded\",desc:\"Shirt Folded\"},{code:\"ph ph-shooting-star\",desc:\"Shooting Star\"},{code:\"ph ph-shopping-bag\",desc:\"Shopping Bag\"},{code:\"ph ph-shopping-bag-open\",desc:\"Shopping Bag Open\"},{code:\"ph ph-shopping-cart\",desc:\"Shopping Cart\"},{code:\"ph ph-shopping-cart-simple\",desc:\"Shopping Cart Simple\"},{code:\"ph ph-shower\",desc:\"Shower\"},{code:\"ph ph-shrimp\",desc:\"Shrimp\"},{code:\"ph ph-shuffle\",desc:\"Shuffle\"},{code:\"ph ph-shuffle-angular\",desc:\"Shuffle Angular\"},{code:\"ph ph-shuffle-simple\",desc:\"Shuffle Simple\"},{code:\"ph ph-sidebar\",desc:\"Sidebar\"},{code:\"ph ph-sidebar-simple\",desc:\"Sidebar Simple\"},{code:\"ph ph-sigma\",desc:\"Sigma\"},{code:\"ph ph-signature\",desc:\"Signature\"},{code:\"ph ph-sign-in\",desc:\"Sign In\"},{code:\"ph ph-sign-out\",desc:\"Sign Out\"},{code:\"ph ph-signpost\",desc:\"Signpost\"},{code:\"ph ph-sim-card\",desc:\"Sim Card\"},{code:\"ph ph-siren\",desc:\"Siren\"},{code:\"ph ph-sketch-logo\",desc:\"Sketch Logo\"},{code:\"ph ph-skip-back\",desc:\"Skip Back\"},{code:\"ph ph-skip-back-circle\",desc:\"Skip Back Circle\"},{code:\"ph ph-skip-forward\",desc:\"Skip Forward\"},{code:\"ph ph-skip-forward-circle\",desc:\"Skip Forward Circle\"},{code:\"ph ph-skull\",desc:\"Skull\"},{code:\"ph ph-slack-logo\",desc:\"Slack Logo\"},{code:\"ph ph-sliders\",desc:\"Sliders\"},{code:\"ph ph-sliders-horizontal\",desc:\"Sliders Horizontal\"},{code:\"ph ph-slideshow\",desc:\"Slideshow\"},{code:\"ph ph-smiley\",desc:\"Smiley\"},{code:\"ph ph-smiley-angry\",desc:\"Smiley Angry\"},{code:\"ph ph-smiley-blank\",desc:\"Smiley Blank\"},{code:\"ph ph-smiley-meh\",desc:\"Smiley Meh\"},{code:\"ph ph-smiley-nervous\",desc:\"Smiley Nervous\"},{code:\"ph ph-smiley-sad\",desc:\"Smiley Sad\"},{code:\"ph ph-smiley-sticker\",desc:\"Smiley Sticker\"},{code:\"ph ph-smiley-wink\",desc:\"Smiley Wink\"},{code:\"ph ph-smiley-x-eyes\",desc:\"Smiley X Eyes\"},{code:\"ph ph-snapchat-logo\",desc:\"Snapchat Logo\"},{code:\"ph ph-sneaker\",desc:\"Sneaker\"},{code:\"ph ph-sneaker-move\",desc:\"Sneaker Move\"},{code:\"ph ph-snowflake\",desc:\"Snowflake\"},{code:\"ph ph-soccer-ball\",desc:\"Soccer Ball\"},{code:\"ph ph-sort-ascending\",desc:\"Sort Ascending\"},{code:\"ph ph-sort-descending\",desc:\"Sort Descending\"},{code:\"ph ph-soundcloud-logo\",desc:\"Soundcloud Logo\"},{code:\"ph ph-spade\",desc:\"Spade\"},{code:\"ph ph-sparkle\",desc:\"Sparkle\"},{code:\"ph ph-speaker-hifi\",desc:\"Speaker Hifi\"},{code:\"ph ph-speaker-high\",desc:\"Speaker High\"},{code:\"ph ph-speaker-low\",desc:\"Speaker Low\"},{code:\"ph ph-speaker-none\",desc:\"Speaker None\"},{code:\"ph ph-speaker-simple-high\",desc:\"Speaker Simple High\"},{code:\"ph ph-speaker-simple-low\",desc:\"Speaker Simple Low\"},{code:\"ph ph-speaker-simple-none\",desc:\"Speaker Simple None\"},{code:\"ph ph-speaker-simple-slash\",desc:\"Speaker Simple Slash\"},{code:\"ph ph-speaker-simple-x\",desc:\"Speaker Simple X\"},{code:\"ph ph-speaker-slash\",desc:\"Speaker Slash\"},{code:\"ph ph-speaker-x\",desc:\"Speaker X\"},{code:\"ph ph-spinner\",desc:\"Spinner\"},{code:\"ph ph-spinner-gap\",desc:\"Spinner Gap\"},{code:\"ph ph-spiral\",desc:\"Spiral\"},{code:\"ph ph-split-horizontal\",desc:\"Split Horizontal\"},{code:\"ph ph-split-vertical\",desc:\"Split Vertical\"},{code:\"ph ph-spotify-logo\",desc:\"Spotify Logo\"},{code:\"ph ph-square\",desc:\"Square\"},{code:\"ph ph-square-half\",desc:\"Square Half\"},{code:\"ph ph-square-half-bottom\",desc:\"Square Half Bottom\"},{code:\"ph ph-square-logo\",desc:\"Square Logo\"},{code:\"ph ph-squares-four\",desc:\"Squares Four\"},{code:\"ph ph-square-split-horizontal\",desc:\"Square Split Horizontal\"},{code:\"ph ph-square-split-vertical\",desc:\"Square Split Vertical\"},{code:\"ph ph-stack\",desc:\"Stack\"},{code:\"ph ph-stack-overflow-logo\",desc:\"Stack Overflow Logo\"},{code:\"ph ph-stack-simple\",desc:\"Stack Simple\"},{code:\"ph ph-stairs\",desc:\"Stairs\"},{code:\"ph ph-stamp\",desc:\"Stamp\"},{code:\"ph ph-star\",desc:\"Star\"},{code:\"ph ph-star-and-crescent\",desc:\"Star And Crescent\"},{code:\"ph ph-star-four\",desc:\"Star Four\"},{code:\"ph ph-star-half\",desc:\"Star Half\"},{code:\"ph ph-star-of-david\",desc:\"Star Of David\"},{code:\"ph ph-steering-wheel\",desc:\"Steering Wheel\"},{code:\"ph ph-steps\",desc:\"Steps\"},{code:\"ph ph-stethoscope\",desc:\"Stethoscope\"},{code:\"ph ph-sticker\",desc:\"Sticker\"},{code:\"ph ph-stool\",desc:\"Stool\"},{code:\"ph ph-stop\",desc:\"Stop\"},{code:\"ph ph-stop-circle\",desc:\"Stop Circle\"},{code:\"ph ph-storefront\",desc:\"Storefront\"},{code:\"ph ph-strategy\",desc:\"Strategy\"},{code:\"ph ph-stripe-logo\",desc:\"Stripe Logo\"},{code:\"ph ph-student\",desc:\"Student\"},{code:\"ph ph-subtitles\",desc:\"Subtitles\"},{code:\"ph ph-subtract\",desc:\"Subtract\"},{code:\"ph ph-subtract-square\",desc:\"Subtract Square\"},{code:\"ph ph-suitcase\",desc:\"Suitcase\"},{code:\"ph ph-suitcase-rolling\",desc:\"Suitcase Rolling\"},{code:\"ph ph-suitcase-simple\",desc:\"Suitcase Simple\"},{code:\"ph ph-sun\",desc:\"Sun\"},{code:\"ph ph-sun-dim\",desc:\"Sun Dim\"},{code:\"ph ph-sunglasses\",desc:\"Sunglasses\"},{code:\"ph ph-sun-horizon\",desc:\"Sun Horizon\"},{code:\"ph ph-swap\",desc:\"Swap\"},{code:\"ph ph-swatches\",desc:\"Swatches\"},{code:\"ph ph-swimming-pool\",desc:\"Swimming Pool\"},{code:\"ph ph-sword\",desc:\"Sword\"},{code:\"ph ph-synagogue\",desc:\"Synagogue\"},{code:\"ph ph-syringe\",desc:\"Syringe\"},{code:\"ph ph-table\",desc:\"Table\"},{code:\"ph ph-tabs\",desc:\"Tabs\"},{code:\"ph ph-tag\",desc:\"Tag\"},{code:\"ph ph-tag-chevron\",desc:\"Tag Chevron\"},{code:\"ph ph-tag-simple\",desc:\"Tag Simple\"},{code:\"ph ph-target\",desc:\"Target\"},{code:\"ph ph-taxi\",desc:\"Taxi\"},{code:\"ph ph-telegram-logo\",desc:\"Telegram Logo\"},{code:\"ph ph-television\",desc:\"Television\"},{code:\"ph ph-television-simple\",desc:\"Television Simple\"},{code:\"ph ph-tennis-ball\",desc:\"Tennis Ball\"},{code:\"ph ph-tent\",desc:\"Tent\"},{code:\"ph ph-terminal\",desc:\"Terminal\"},{code:\"ph ph-terminal-window\",desc:\"Terminal Window\"},{code:\"ph ph-test-tube\",desc:\"Test Tube\"},{code:\"ph ph-text-aa\",desc:\"Text Aa\"},{code:\"ph ph-text-align-center\",desc:\"Text Align Center\"},{code:\"ph ph-text-align-justify\",desc:\"Text Align Justify\"},{code:\"ph ph-text-align-left\",desc:\"Text Align Left\"},{code:\"ph ph-text-align-right\",desc:\"Text Align Right\"},{code:\"ph ph-text-a-underline\",desc:\"Text A Underline\"},{code:\"ph ph-text-b\",desc:\"Text B\"},{code:\"ph ph-text-bolder\",desc:\"Text Bolder\"},{code:\"ph ph-textbox\",desc:\"Textbox\"},{code:\"ph ph-text-columns\",desc:\"Text Columns\"},{code:\"ph ph-text-h\",desc:\"Text H\"},{code:\"ph ph-text-h-five\",desc:\"Text H Five\"},{code:\"ph ph-text-h-four\",desc:\"Text H Four\"},{code:\"ph ph-text-h-one\",desc:\"Text H One\"},{code:\"ph ph-text-h-six\",desc:\"Text H Six\"},{code:\"ph ph-text-h-three\",desc:\"Text H Three\"},{code:\"ph ph-text-h-two\",desc:\"Text H Two\"},{code:\"ph ph-text-indent\",desc:\"Text Indent\"},{code:\"ph ph-text-italic\",desc:\"Text Italic\"},{code:\"ph ph-text-outdent\",desc:\"Text Outdent\"},{code:\"ph ph-text-strikethrough\",desc:\"Text Strikethrough\"},{code:\"ph ph-text-t\",desc:\"Text T\"},{code:\"ph ph-text-underline\",desc:\"Text Underline\"},{code:\"ph ph-thermometer\",desc:\"Thermometer\"},{code:\"ph ph-thermometer-cold\",desc:\"Thermometer Cold\"},{code:\"ph ph-thermometer-hot\",desc:\"Thermometer Hot\"},{code:\"ph ph-thermometer-simple\",desc:\"Thermometer Simple\"},{code:\"ph ph-thumbs-down\",desc:\"Thumbs Down\"},{code:\"ph ph-thumbs-up\",desc:\"Thumbs Up\"},{code:\"ph ph-ticket\",desc:\"Ticket\"},{code:\"ph ph-tidal-logo\",desc:\"Tidal Logo\"},{code:\"ph ph-tiktok-logo\",desc:\"Tiktok Logo\"},{code:\"ph ph-timer\",desc:\"Timer\"},{code:\"ph ph-tipi\",desc:\"Tipi\"},{code:\"ph ph-toggle-left\",desc:\"Toggle Left\"},{code:\"ph ph-toggle-right\",desc:\"Toggle Right\"},{code:\"ph ph-toilet\",desc:\"Toilet\"},{code:\"ph ph-toilet-paper\",desc:\"Toilet Paper\"},{code:\"ph ph-toolbox\",desc:\"Toolbox\"},{code:\"ph ph-tooth\",desc:\"Tooth\"},{code:\"ph ph-tote\",desc:\"Tote\"},{code:\"ph ph-tote-simple\",desc:\"Tote Simple\"},{code:\"ph ph-trademark\",desc:\"Trademark\"},{code:\"ph ph-trademark-registered\",desc:\"Trademark Registered\"},{code:\"ph ph-traffic-cone\",desc:\"Traffic Cone\"},{code:\"ph ph-traffic-sign\",desc:\"Traffic Sign\"},{code:\"ph ph-traffic-signal\",desc:\"Traffic Signal\"},{code:\"ph ph-train\",desc:\"Train\"},{code:\"ph ph-train-regional\",desc:\"Train Regional\"},{code:\"ph ph-train-simple\",desc:\"Train Simple\"},{code:\"ph ph-tram\",desc:\"Tram\"},{code:\"ph ph-translate\",desc:\"Translate\"},{code:\"ph ph-trash\",desc:\"Trash\"},{code:\"ph ph-trash-simple\",desc:\"Trash Simple\"},{code:\"ph ph-tray\",desc:\"Tray\"},{code:\"ph ph-tree\",desc:\"Tree\"},{code:\"ph ph-tree-evergreen\",desc:\"Tree Evergreen\"},{code:\"ph ph-tree-palm\",desc:\"Tree Palm\"},{code:\"ph ph-tree-structure\",desc:\"Tree Structure\"},{code:\"ph ph-trend-down\",desc:\"Trend Down\"},{code:\"ph ph-trend-up\",desc:\"Trend Up\"},{code:\"ph ph-triangle\",desc:\"Triangle\"},{code:\"ph ph-trophy\",desc:\"Trophy\"},{code:\"ph ph-truck\",desc:\"Truck\"},{code:\"ph ph-t-shirt\",desc:\"T Shirt\"},{code:\"ph ph-twitch-logo\",desc:\"Twitch Logo\"},{code:\"ph ph-twitter-logo\",desc:\"Twitter Logo\"},{code:\"ph ph-umbrella\",desc:\"Umbrella\"},{code:\"ph ph-umbrella-simple\",desc:\"Umbrella Simple\"},{code:\"ph ph-unite\",desc:\"Unite\"},{code:\"ph ph-unite-square\",desc:\"Unite Square\"},{code:\"ph ph-upload\",desc:\"Upload\"},{code:\"ph ph-upload-simple\",desc:\"Upload Simple\"},{code:\"ph ph-usb\",desc:\"Usb\"},{code:\"ph ph-user\",desc:\"User\"},{code:\"ph ph-user-circle\",desc:\"User Circle\"},{code:\"ph ph-user-circle-gear\",desc:\"User Circle Gear\"},{code:\"ph ph-user-circle-minus\",desc:\"User Circle Minus\"},{code:\"ph ph-user-circle-plus\",desc:\"User Circle Plus\"},{code:\"ph ph-user-focus\",desc:\"User Focus\"},{code:\"ph ph-user-gear\",desc:\"User Gear\"},{code:\"ph ph-user-list\",desc:\"User List\"},{code:\"ph ph-user-minus\",desc:\"User Minus\"},{code:\"ph ph-user-plus\",desc:\"User Plus\"},{code:\"ph ph-user-rectangle\",desc:\"User Rectangle\"},{code:\"ph ph-users\",desc:\"Users\"},{code:\"ph ph-users-four\",desc:\"Users Four\"},{code:\"ph ph-user-square\",desc:\"User Square\"},{code:\"ph ph-users-three\",desc:\"Users Three\"},{code:\"ph ph-user-switch\",desc:\"User Switch\"},{code:\"ph ph-van\",desc:\"Van\"},{code:\"ph ph-vault\",desc:\"Vault\"},{code:\"ph ph-vibrate\",desc:\"Vibrate\"},{code:\"ph ph-video\",desc:\"Video\"},{code:\"ph ph-video-camera\",desc:\"Video Camera\"},{code:\"ph ph-video-camera-slash\",desc:\"Video Camera Slash\"},{code:\"ph ph-vignette\",desc:\"Vignette\"},{code:\"ph ph-vinyl-record\",desc:\"Vinyl Record\"},{code:\"ph ph-virtual-reality\",desc:\"Virtual Reality\"},{code:\"ph ph-virus\",desc:\"Virus\"},{code:\"ph ph-voicemail\",desc:\"Voicemail\"},{code:\"ph ph-volleyball\",desc:\"Volleyball\"},{code:\"ph ph-wall\",desc:\"Wall\"},{code:\"ph ph-wallet\",desc:\"Wallet\"},{code:\"ph ph-warehouse\",desc:\"Warehouse\"},{code:\"ph ph-warning\",desc:\"Warning\"},{code:\"ph ph-warning-circle\",desc:\"Warning Circle\"},{code:\"ph ph-warning-diamond\",desc:\"Warning Diamond\"},{code:\"ph ph-warning-octagon\",desc:\"Warning Octagon\"},{code:\"ph ph-watch\",desc:\"Watch\"},{code:\"ph ph-waveform\",desc:\"Waveform\"},{code:\"ph ph-waves\",desc:\"Waves\"},{code:\"ph ph-wave-sawtooth\",desc:\"Wave Sawtooth\"},{code:\"ph ph-wave-sine\",desc:\"Wave Sine\"},{code:\"ph ph-wave-square\",desc:\"Wave Square\"},{code:\"ph ph-wave-triangle\",desc:\"Wave Triangle\"},{code:\"ph ph-webcam\",desc:\"Webcam\"},{code:\"ph ph-webcam-slash\",desc:\"Webcam Slash\"},{code:\"ph ph-webhooks-logo\",desc:\"Webhooks Logo\"},{code:\"ph ph-wechat-logo\",desc:\"Wechat Logo\"},{code:\"ph ph-whatsapp-logo\",desc:\"Whatsapp Logo\"},{code:\"ph ph-wheelchair\",desc:\"Wheelchair\"},{code:\"ph ph-wheelchair-motion\",desc:\"Wheelchair Motion\"},{code:\"ph ph-wifi-high\",desc:\"Wifi High\"},{code:\"ph ph-wifi-low\",desc:\"Wifi Low\"},{code:\"ph ph-wifi-medium\",desc:\"Wifi Medium\"},{code:\"ph ph-wifi-none\",desc:\"Wifi None\"},{code:\"ph ph-wifi-slash\",desc:\"Wifi Slash\"},{code:\"ph ph-wifi-x\",desc:\"Wifi X\"},{code:\"ph ph-wind\",desc:\"Wind\"},{code:\"ph ph-windows-logo\",desc:\"Windows Logo\"},{code:\"ph ph-wine\",desc:\"Wine\"},{code:\"ph ph-wrench\",desc:\"Wrench\"},{code:\"ph ph-x\",desc:\"X\"},{code:\"ph ph-x-circle\",desc:\"X Circle\"},{code:\"ph ph-x-square\",desc:\"X Square\"},{code:\"ph ph-yin-yang\",desc:\"Yin Yang\"},{code:\"ph ph-youtube-logo\",desc:\"YouTube Logo\"}],iconsButtons:[\"iconsBack\",\"|\"]}),e.FE.PLUGINS.icons=function(t){function n(){for(var e='<div style=\"text-align: center\">',n=0;n<t.opts.iconsSet.length;n++)0!==n&&n%t.opts.iconsStep==0&&(e+=\"<br>\"),e+='<span class=\"fr-command fr-icon\" tabIndex=\"-1\" data-cmd=\"insertIcon\" title=\"'+t.language.translate(t.opts.iconsSet[n].desc)+'\" role=\"button\" data-param1=\"'+t.opts.iconsSet[n].code+'\"><i class=\"'+t.opts.iconsSet[n].code+'\"></i><span class=\"fr-sr-only\">'+t.language.translate(t.opts.iconsSet[n].desc)+\"&nbsp;&nbsp;&nbsp;</span></span>\";return e+=\"</div>\"}return{_init:function(){var e=function(){for(var e=t.el.querySelectorAll(\"i.ph:not(.fr-deletable)\"),n=0;n<e.length;n++)e[n].className+=\" fr-deletable\"};e(),t.events.on(\"html.set\",e)},insert:function(n){var o=function(){if(!t.selection.isCollapsed())return!1;var e=t.selection.element(),n=t.selection.endElement();if(e&&t.node.hasClass(e,\"fr-icon\"))return e;if(n&&t.node.hasClass(n,\"fr-icon\"))return n;var o=t.selection.ranges(0),r=o.startContainer;if(r.nodeType==Node.ELEMENT_NODE&&r.childNodes.length>0&&o.startOffset>0){var i=r.childNodes[o.startOffset-1];if(t.node.hasClass(i,\"fr-icon\"))return i}return!1}(),r=t.selection.ranges(0);o?(0===r.startOffset&&t.selection.element()===o?e(o).before(e.FE.MARKERS+e.FE.INVISIBLE_SPACE):r.startOffset>0&&t.selection.element()===o&&r.commonAncestorContainer.parentNode.classList.contains(\"fr-icon\")&&e(o).after(e.FE.INVISIBLE_SPACE+e.FE.MARKERS),t.selection.restore(),t.html.insert('<i class=\"'+n+' fr-deletable\"></i>&nbsp;'+e.FE.MARKERS,!0)):t.html.insert('<i class=\"'+n+' fr-icon fr-deletable\"></i>&nbsp;',!0)},showIconsPopup:function(){var o=t.$tb.find('.fr-command[data-cmd=\"icons\"]'),r=t.popups.get(\"icons\");if(r||(r=function(){var o=\"\";t.opts.toolbarInline&&t.opts.iconsButtons.length>0&&(o='<div class=\"fr-buttons fr-icons-buttons\">'+t.button.buildList(t.opts.iconsButtons)+\"</div>\");var r={buttons:o,icons:n()},i=t.popups.create(\"icons\",r);return t.tooltip.bind(i,\".fr-icon\"),function(n){t.events.on(\"popup.tab\",(function(o){var r=e(o.currentTarget);if(!t.popups.isVisible(\"icons\")||!r.is(\"span, a\"))return!0;var i,a,s,l=o.which;if(e.FE.KEYCODE.TAB==l){if(r.is(\"span.fr-icon\")&&o.shiftKey||r.is(\"a\")&&!o.shiftKey){var d=n.find(\".fr-buttons\");i=!t.accessibility.focusToolbar(d,!!o.shiftKey)}if(!1!==i){var c=n.find(\"span.fr-icon:focus:first, span.fr-icon:visible:first, a\");r.is(\"span.fr-icon\")&&(c=c.not(\"span.fr-icon:not(:focus)\")),a=c.index(r),a=o.shiftKey?((a-1)%c.length+c.length)%c.length:(a+1)%c.length,s=c.get(a),t.events.disableBlur(),s.focus(),i=!1}}else if(e.FE.KEYCODE.ARROW_UP==l||e.FE.KEYCODE.ARROW_DOWN==l||e.FE.KEYCODE.ARROW_LEFT==l||e.FE.KEYCODE.ARROW_RIGHT==l){if(r.is(\"span.fr-icon\")){var p=r.parent().find(\"span.fr-icon\");a=p.index(r);var f=t.opts.iconsStep,h=Math.floor(p.length/f),u=a%f,g=Math.floor(a/f)*f+u,m=h*f;e.FE.KEYCODE.ARROW_UP==l?g=((g-f)%m+m)%m:e.FE.KEYCODE.ARROW_DOWN==l?g=(g+f)%m:e.FE.KEYCODE.ARROW_LEFT==l?g=((g-1)%m+m)%m:e.FE.KEYCODE.ARROW_RIGHT==l&&(g=(g+1)%m),s=e(p.get(g)),t.events.disableBlur(),s.focus(),i=!1}}else e.FE.KEYCODE.ENTER==l&&(r.is(\"a\")?r[0].click():t.button.exec(r),i=!1);return!1===i&&(o.preventDefault(),o.stopPropagation()),i}),!0)}(i),i.addClass(\"fr-popup-icons-plugin\"),i}()),!r.hasClass(\"fr-active\")){t.popups.refresh(\"icons\"),t.popups.setContainer(\"icons\",t.$tb);var i=o.offset().left+o.outerWidth()/2,a=o.offset().top+(t.opts.toolbarBottom?10:o.outerHeight()-10);t.popups.show(\"icons\",i,a,o.outerHeight())}},hideIconsPopup:function(){t.popups.hide(\"icons\")},back:function(){t.popups.hide(\"icons\"),t.toolbar.showInline()}}},e.FE.DefineIcon(\"icons\",{NAME:\"star\",FA5NAME:\"star\"}),e.FE.RegisterCommand(\"icons\",{title:\"Icons\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"icons\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"icons\")):this.icons.showIconsPopup()},plugin:\"icons\"}),e.FE.RegisterCommand(\"insertIcon\",{callback:function(e,t){this.icons.insert(t),this.icons.hideIconsPopup()}}),e.FE.DefineIcon(\"iconsBack\",{NAME:\"arrow-left\"}),e.FE.RegisterCommand(\"iconsBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.icons.back()}})}(jQuery),function(e){e.extend(e.FE.POPUP_TEMPLATES,{emoticons:\"[_BUTTONS_][_EMOTICONS_]\"}),e.extend(e.FE.DEFAULTS,{emoticonsStep:8,emoticonsSet:[{code:\"1f600\",desc:\"Grinning face\"},{code:\"1f601\",desc:\"Grinning face with smiling eyes\"},{code:\"1f602\",desc:\"Face with tears of joy\"},{code:\"1f603\",desc:\"Smiling face with open mouth\"},{code:\"1f604\",desc:\"Smiling face with open mouth and smiling eyes\"},{code:\"1f605\",desc:\"Smiling face with open mouth and cold sweat\"},{code:\"1f606\",desc:\"Smiling face with open mouth and tightly-closed eyes\"},{code:\"1f607\",desc:\"Smiling face with halo\"},{code:\"1f608\",desc:\"Smiling face with horns\"},{code:\"1f609\",desc:\"Winking face\"},{code:\"1f60a\",desc:\"Smiling face with smiling eyes\"},{code:\"1f60b\",desc:\"Face savoring delicious food\"},{code:\"1f60c\",desc:\"Relieved face\"},{code:\"1f60d\",desc:\"Smiling face with heart-shaped eyes\"},{code:\"1f60e\",desc:\"Smiling face with sunglasses\"},{code:\"1f60f\",desc:\"Smirking face\"},{code:\"1f610\",desc:\"Neutral face\"},{code:\"1f611\",desc:\"Expressionless face\"},{code:\"1f612\",desc:\"Unamused face\"},{code:\"1f613\",desc:\"Face with cold sweat\"},{code:\"1f614\",desc:\"Pensive face\"},{code:\"1f615\",desc:\"Confused face\"},{code:\"1f616\",desc:\"Confounded face\"},{code:\"1f617\",desc:\"Kissing face\"},{code:\"1f618\",desc:\"Face throwing a kiss\"},{code:\"1f619\",desc:\"Kissing face with smiling eyes\"},{code:\"1f61a\",desc:\"Kissing face with closed eyes\"},{code:\"1f61b\",desc:\"Face with stuck out tongue\"},{code:\"1f61c\",desc:\"Face with stuck out tongue and winking eye\"},{code:\"1f61d\",desc:\"Face with stuck out tongue and tightly-closed eyes\"},{code:\"1f61e\",desc:\"Disappointed face\"},{code:\"1f61f\",desc:\"Worried face\"},{code:\"1f620\",desc:\"Angry face\"},{code:\"1f621\",desc:\"Pouting face\"},{code:\"1f622\",desc:\"Crying face\"},{code:\"1f623\",desc:\"Persevering face\"},{code:\"1f624\",desc:\"Face with look of triumph\"},{code:\"1f625\",desc:\"Disappointed but relieved face\"},{code:\"1f626\",desc:\"Frowning face with open mouth\"},{code:\"1f627\",desc:\"Anguished face\"},{code:\"1f628\",desc:\"Fearful face\"},{code:\"1f629\",desc:\"Weary face\"},{code:\"1f62a\",desc:\"Sleepy face\"},{code:\"1f62b\",desc:\"Tired face\"},{code:\"1f62c\",desc:\"Grimacing face\"},{code:\"1f62d\",desc:\"Loudly crying face\"},{code:\"1f62e\",desc:\"Face with open mouth\"},{code:\"1f62f\",desc:\"Hushed face\"},{code:\"1f630\",desc:\"Face with open mouth and cold sweat\"},{code:\"1f631\",desc:\"Face screaming in fear\"},{code:\"1f632\",desc:\"Astonished face\"},{code:\"1f633\",desc:\"Flushed face\"},{code:\"1f634\",desc:\"Sleeping face\"},{code:\"1f635\",desc:\"Dizzy face\"},{code:\"1f636\",desc:\"Face without mouth\"},{code:\"1f637\",desc:\"Face with medical mask\"}],emoticonsButtons:[\"emoticonsBack\",\"|\"],emoticonsUseImage:!0}),e.FE.PLUGINS.emoticons=function(t){function n(){if(!t.selection.isCollapsed())return!1;var e=t.selection.element(),n=t.selection.endElement();if(e&&t.node.hasClass(e,\"fr-emoticon\"))return e;if(n&&t.node.hasClass(n,\"fr-emoticon\"))return n;var o=t.selection.ranges(0),r=o.startContainer;if(r.nodeType==Node.ELEMENT_NODE&&r.childNodes.length>0&&o.startOffset>0){var i=r.childNodes[o.startOffset-1];if(t.node.hasClass(i,\"fr-emoticon\"))return i}return!1}function o(){for(var e='<div style=\"text-align: center\">',n=0;n<t.opts.emoticonsSet.length;n++)0!==n&&n%t.opts.emoticonsStep==0&&(e+=\"<br>\"),e+='<span class=\"fr-command fr-emoticon\" tabIndex=\"-1\" data-cmd=\"insertEmoticon\" title=\"'+t.language.translate(t.opts.emoticonsSet[n].desc)+'\" role=\"button\" data-param1=\"'+t.opts.emoticonsSet[n].code+'\">'+(t.opts.emoticonsUseImage?'<img src=\"https://cdnjs.cloudflare.com/ajax/libs/emojione/2.0.1/assets/svg/'+t.opts.emoticonsSet[n].code+'.svg\"/>':\"&#x\"+t.opts.emoticonsSet[n].code+\";\")+'<span class=\"fr-sr-only\">'+t.language.translate(t.opts.emoticonsSet[n].desc)+\"&nbsp;&nbsp;&nbsp;</span></span>\";return t.opts.emoticonsUseImage&&(e+='<p style=\"font-size: 12px; text-align: center; padding: 0 5px;\">Emoji free by <a class=\"fr-link\" tabIndex=\"-1\" href=\"http://emojione.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" role=\"link\" aria-label=\"Open Emoji One website.\">Emoji One</a></p>'),e+=\"</div>\"}return{_init:function(){var o=function(){for(var e=t.el.querySelectorAll(\".fr-emoticon:not(.fr-deletable)\"),n=0;n<e.length;n++)e[n].className+=\" fr-deletable\"};o(),t.events.on(\"html.set\",o),t.events.on(\"keydown\",(function(o){if(t.keys.isCharacter(o.which)&&t.selection.inEditor()){var r=t.selection.ranges(0),i=n();t.node.hasClass(i,\"fr-emoticon-img\")&&i&&(0===r.startOffset&&t.selection.element()===i?e(i).before(e.FE.MARKERS+e.FE.INVISIBLE_SPACE):e(i).after(e.FE.INVISIBLE_SPACE+e.FE.MARKERS),t.selection.restore())}})),t.events.on(\"keyup\",(function(o){for(var r=t.el.querySelectorAll(\".fr-emoticon\"),i=0;i<r.length;i++)void 0!==r[i].textContent&&0===r[i].textContent.replace(/\\u200B/gi,\"\").length&&e(r[i]).remove();if(!(o.which>=e.FE.KEYCODE.ARROW_LEFT&&o.which<=e.FE.KEYCODE.ARROW_DOWN)){var a=n();t.node.hasClass(a,\"fr-emoticon-img\")&&(e(a).append(e.FE.MARKERS),t.selection.restore())}}))},insert:function(o,r){var i=n(),a=t.selection.ranges(0);i?(0===a.startOffset&&t.selection.element()===i?e(i).before(e.FE.MARKERS+e.FE.INVISIBLE_SPACE):a.startOffset>0&&t.selection.element()===i&&a.commonAncestorContainer.parentNode.classList.contains(\"fr-emoticon\")&&e(i).after(e.FE.INVISIBLE_SPACE+e.FE.MARKERS),t.selection.restore(),t.html.insert('<span class=\"fr-emoticon fr-deletable'+(r?\" fr-emoticon-img\":\"\")+'\"'+(r?' style=\"background: url('+r+');\"':\"\")+\">\"+(r?\"&nbsp;\":o)+\"</span>&nbsp;\"+e.FE.MARKERS,!0)):t.html.insert('<span class=\"fr-emoticon fr-deletable'+(r?\" fr-emoticon-img\":\"\")+'\"'+(r?' style=\"background: url('+r+');\"':\"\")+\">\"+(r?\"&nbsp;\":o)+\"</span>&nbsp;\",!0)},showEmoticonsPopup:function(){var n=t.$tb.find('.fr-command[data-cmd=\"emoticons\"]'),r=t.popups.get(\"emoticons\");if(r||(r=function(){var n=\"\";t.opts.toolbarInline&&t.opts.emoticonsButtons.length>0&&(n='<div class=\"fr-buttons fr-emoticons-buttons\">'+t.button.buildList(t.opts.emoticonsButtons)+\"</div>\");var r={buttons:n,emoticons:o()},i=t.popups.create(\"emoticons\",r);return t.tooltip.bind(i,\".fr-emoticon\"),function(n){t.events.on(\"popup.tab\",(function(o){var r=e(o.currentTarget);if(!t.popups.isVisible(\"emoticons\")||!r.is(\"span, a\"))return!0;var i,a,s,l=o.which;if(e.FE.KEYCODE.TAB==l){if(r.is(\"span.fr-emoticon\")&&o.shiftKey||r.is(\"a\")&&!o.shiftKey){var d=n.find(\".fr-buttons\");i=!t.accessibility.focusToolbar(d,!!o.shiftKey)}if(!1!==i){var c=n.find(\"span.fr-emoticon:focus:first, span.fr-emoticon:visible:first, a\");r.is(\"span.fr-emoticon\")&&(c=c.not(\"span.fr-emoticon:not(:focus)\")),a=c.index(r),a=o.shiftKey?((a-1)%c.length+c.length)%c.length:(a+1)%c.length,s=c.get(a),t.events.disableBlur(),s.focus(),i=!1}}else if(e.FE.KEYCODE.ARROW_UP==l||e.FE.KEYCODE.ARROW_DOWN==l||e.FE.KEYCODE.ARROW_LEFT==l||e.FE.KEYCODE.ARROW_RIGHT==l){if(r.is(\"span.fr-emoticon\")){var p=r.parent().find(\"span.fr-emoticon\");a=p.index(r);var f=t.opts.emoticonsStep,h=Math.floor(p.length/f),u=a%f,g=Math.floor(a/f)*f+u,m=h*f;e.FE.KEYCODE.ARROW_UP==l?g=((g-f)%m+m)%m:e.FE.KEYCODE.ARROW_DOWN==l?g=(g+f)%m:e.FE.KEYCODE.ARROW_LEFT==l?g=((g-1)%m+m)%m:e.FE.KEYCODE.ARROW_RIGHT==l&&(g=(g+1)%m),s=e(p.get(g)),t.events.disableBlur(),s.focus(),i=!1}}else e.FE.KEYCODE.ENTER==l&&(r.is(\"a\")?r[0].click():t.button.exec(r),i=!1);return!1===i&&(o.preventDefault(),o.stopPropagation()),i}),!0)}(i),i}()),!r.hasClass(\"fr-active\")){t.popups.refresh(\"emoticons\"),t.popups.setContainer(\"emoticons\",t.$tb);var i=n.offset().left+n.outerWidth()/2,a=n.offset().top+(t.opts.toolbarBottom?10:n.outerHeight()-10);t.popups.show(\"emoticons\",i,a,n.outerHeight())}},hideEmoticonsPopup:function(){t.popups.hide(\"emoticons\")},back:function(){t.popups.hide(\"emoticons\"),t.toolbar.showInline()}}},e.FE.DefineIcon(\"emoticons\",{NAME:\"smile-o\",FA5NAME:\"smile\"}),e.FE.RegisterCommand(\"emoticons\",{title:\"Emoticons\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"emoticons\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"emoticons\")):this.emoticons.showEmoticonsPopup()},plugin:\"emoticons\"}),e.FE.RegisterCommand(\"insertEmoticon\",{callback:function(e,t){this.emoticons.insert(\"&#x\"+t+\";\",this.opts.emoticonsUseImage?\"https://cdnjs.cloudflare.com/ajax/libs/emojione/2.0.1/assets/svg/\"+t+\".svg\":null),this.emoticons.hideEmoticonsPopup()}}),e.FE.DefineIcon(\"emoticonsBack\",{NAME:\"arrow-left\"}),e.FE.RegisterCommand(\"emoticonsBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.emoticons.back()}})}(jQuery),function(e){e.extend(e.FE.POPUP_TEMPLATES,{\"colors.picker\":\"[_BUTTONS_][_TEXT_COLORS_][_BACKGROUND_COLORS_][_CUSTOM_COLOR_]\"}),e.extend(e.FE.DEFAULTS,{colorsText:[\"#61BD6D\",\"#1ABC9C\",\"#54ACD2\",\"#2C82C9\",\"#9365B8\",\"#475577\",\"#CCCCCC\",\"#41A85F\",\"#00A885\",\"#3D8EB9\",\"#2969B0\",\"#553982\",\"#28324E\",\"#000000\",\"#F7DA64\",\"#FBA026\",\"#EB6B56\",\"#E25041\",\"#A38F84\",\"#EFEFEF\",\"#FFFFFF\",\"#FAC51C\",\"#F37934\",\"#D14841\",\"#B8312F\",\"#7C706B\",\"#D1D5D8\",\"REMOVE\"],colorsBackground:[\"#61BD6D\",\"#1ABC9C\",\"#54ACD2\",\"#2C82C9\",\"#9365B8\",\"#475577\",\"#CCCCCC\",\"#41A85F\",\"#00A885\",\"#3D8EB9\",\"#2969B0\",\"#553982\",\"#28324E\",\"#000000\",\"#F7DA64\",\"#FBA026\",\"#EB6B56\",\"#E25041\",\"#A38F84\",\"#EFEFEF\",\"#FFFFFF\",\"#FAC51C\",\"#F37934\",\"#D14841\",\"#B8312F\",\"#7C706B\",\"#D1D5D8\",\"REMOVE\"],colorsStep:7,colorsHEXInput:!0,colorsDefaultTab:\"text\",colorsButtons:[\"colorsBack\",\"|\",\"-\"]});var t=[\"text\",\"background\"];e.FE.PLUGINS.colors=function(n){function o(){n.popups.hide(\"colors.picker\")}function r(e){for(var t=\"text\"==e?n.opts.colorsText:n.opts.colorsBackground,o='<div class=\"fr-color-set fr-'+e+\"-color\"+(n.opts.colorsDefaultTab==e||\"text\"!=n.opts.colorsDefaultTab&&\"background\"!=n.opts.colorsDefaultTab&&\"text\"==e?\" fr-selected-set\":\"\")+'\">',r=0;r<t.length;r++)0!==r&&r%n.opts.colorsStep==0&&(o+=\"<br>\"),\"REMOVE\"!=t[r]?o+='<span class=\"fr-command fr-select-color\" style=\"background: '+t[r]+';\" tabIndex=\"-1\" aria-selected=\"false\" role=\"button\" data-cmd=\"'+e+'Color\" data-param1=\"'+t[r]+'\"><span class=\"fr-sr-only\">'+n.language.translate(\"Color\")+\" \"+t[r]+\"&nbsp;&nbsp;&nbsp;</span></span>\":o+='<span class=\"fr-command fr-select-color\" data-cmd=\"'+e+'Color\" tabIndex=\"-1\" role=\"button\" data-param1=\"REMOVE\" title=\"'+n.language.translate(\"Clear Formatting\")+'\">'+n.icon.create(\"remove\")+'<span class=\"fr-sr-only\">'+n.language.translate(\"Clear Formatting\")+\"</span></span>\";return o+\"</div>\"}function i(e){var t=n.popups.get(\"colors.picker\"),o=t.find(\".fr-\"+e+\"-color .fr-active-item\").attr(\"data-param1\"),r=t.find(\".fr-color-hex-layer input\"),i=t.find('.fr-colors-tab[data-param1=\"'+e+'\"]');r.length&&i.hasClass(\"fr-selected-tab\")&&r.val(o).trigger(\"change\")}function a(e){\"REMOVE\"!=e?n.format.applyStyle(\"background-color\",n.helpers.HEXtoRGB(e)):n.format.removeStyle(\"background-color\"),o()}function s(e){\"REMOVE\"!=e?n.format.applyStyle(\"color\",n.helpers.HEXtoRGB(e)):n.format.removeStyle(\"color\"),o()}return{showColorsPopup:function(){var o=n.$tb.find('.fr-command[data-cmd=\"color\"]'),a=n.popups.get(\"colors.picker\");if(a||(a=function(){var t='<div class=\"fr-buttons fr-colors-buttons\">';n.opts.toolbarInline&&n.opts.colorsButtons.length>0&&(t+=n.button.buildList(n.opts.colorsButtons));t+=(o='<div class=\"fr-colors-tabs fr-group\">',o+='<span class=\"fr-colors-tab '+(\"background\"==n.opts.colorsDefaultTab?\"\":\"fr-selected-tab \")+'fr-command\" tabIndex=\"-1\" role=\"button\" aria-pressed=\"'+(\"background\"!=n.opts.colorsDefaultTab)+'\" data-param1=\"text\" data-cmd=\"colorChangeSet\" title=\"'+n.language.translate(\"Text\")+'\">'+n.language.translate(\"Text\")+\"</span>\",(o+='<span class=\"fr-colors-tab '+(\"background\"==n.opts.colorsDefaultTab?\"fr-selected-tab\":\"\")+'fr-command\" tabIndex=\"-1\" role=\"button\" aria-pressed=\"'+(\"background\"==n.opts.colorsDefaultTab)+'\" data-param1=\"background\" data-cmd=\"colorChangeSet\" title=\"'+n.language.translate(\"Background\")+'\">'+n.language.translate(\"Background\")+\"</span>\")+\"</div></div>\");var o;var i=\"\";n.opts.colorsHEXInput&&(i='<div class=\"fr-color-hex-layer fr-active fr-layer\" id=\"fr-color-hex-layer-'+n.id+'\"><div class=\"fr-input-line\"><input maxlength=\"7\" id=\"fr-color-hex-layer-text-'+n.id+'\" type=\"text\" placeholder=\"'+n.language.translate(\"HEX Color\")+'\" tabIndex=\"1\" aria-required=\"true\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"customColor\" tabIndex=\"2\" role=\"button\">'+n.language.translate(\"OK\")+\"</button></div></div>\");var a={buttons:t,text_colors:r(\"text\"),background_colors:r(\"background\"),custom_color:i},s=n.popups.create(\"colors.picker\",a);return function(t){n.events.on(\"popup.tab\",(function(o){var r=e(o.currentTarget);if(!n.popups.isVisible(\"colors.picker\")||!r.is(\"span\"))return!0;var i=o.which,a=!0;if(e.FE.KEYCODE.TAB==i){var s=t.find(\".fr-buttons\");a=!n.accessibility.focusToolbar(s,!!o.shiftKey)}else if(e.FE.KEYCODE.ARROW_UP==i||e.FE.KEYCODE.ARROW_DOWN==i||e.FE.KEYCODE.ARROW_LEFT==i||e.FE.KEYCODE.ARROW_RIGHT==i){if(r.is(\"span.fr-select-color\")){var l=r.parent().find(\"span.fr-select-color\"),d=l.index(r),c=n.opts.colorsStep,p=Math.floor(l.length/c),f=d%c,h=Math.floor(d/c)*c+f,u=p*c;e.FE.KEYCODE.ARROW_UP==i?h=((h-c)%u+u)%u:e.FE.KEYCODE.ARROW_DOWN==i?h=(h+c)%u:e.FE.KEYCODE.ARROW_LEFT==i?h=((h-1)%u+u)%u:e.FE.KEYCODE.ARROW_RIGHT==i&&(h=(h+1)%u);var g=e(l.get(h));n.events.disableBlur(),g.focus(),a=!1}}else e.FE.KEYCODE.ENTER==i&&(n.button.exec(r),a=!1);return!1===a&&(o.preventDefault(),o.stopPropagation()),a}),!0)}(s),s}()),!a.hasClass(\"fr-active\"))if(n.popups.setContainer(\"colors.picker\",n.$tb),t.map((function(t){!function(t){var o,r=n.popups.get(\"colors.picker\"),a=e(n.selection.element());o=\"background\"==t?\"background-color\":\"color\";var s=r.find(\".fr-\"+t+\"-color .fr-select-color\");s.find(\".fr-selected-color\").remove(),s.removeClass(\"fr-active-item\"),s.not('[data-param1=\"REMOVE\"]').attr(\"aria-selected\",!1);for(;a.get(0)!=n.el;){if(\"transparent\"!=a.css(o)&&\"rgba(0, 0, 0, 0)\"!=a.css(o)){var l=r.find(\".fr-\"+t+'-color .fr-select-color[data-param1=\"'+n.helpers.RGBToHex(a.css(o))+'\"]');l.append('<span class=\"fr-selected-color\" aria-hidden=\"true\"></span>'),l.addClass(\"fr-active-item\").attr(\"aria-selected\",!0);break}a=a.parent()}i(t)}(t)})),o.is(\":visible\")){var s=o.offset().left+o.outerWidth()/2,l=o.offset().top+(n.opts.toolbarBottom?10:o.outerHeight()-10);n.popups.show(\"colors.picker\",s,l,o.outerHeight())}else n.position.forSelection(a),n.popups.show(\"colors.picker\")},hideColorsPopup:o,changeSet:function(e,t){e.hasClass(\"fr-selected-tab\")||(e.siblings().removeClass(\"fr-selected-tab\").attr(\"aria-pressed\",!1),e.addClass(\"fr-selected-tab\").attr(\"aria-pressed\",!0),e.parents(\".fr-popup\").find(\".fr-color-set\").removeClass(\"fr-selected-set\"),e.parents(\".fr-popup\").find(\".fr-color-set.fr-\"+t+\"-color\").addClass(\"fr-selected-set\"),i(t)),n.accessibility.focusPopup(e.parents(\".fr-popup\"))},background:a,customColor:function(){var e=n.popups.get(\"colors.picker\"),t=e.find(\".fr-color-hex-layer input\");if(t.length){var o=t.val();\"background\"==e.find(\".fr-selected-tab\").attr(\"data-param1\")?a(o):s(o)}},text:s,back:function(){n.popups.hide(\"colors.picker\"),n.toolbar.showInline()}}},e.FE.DefineIcon(\"colors\",{NAME:\"tint\"}),e.FE.RegisterCommand(\"color\",{title:\"Colors\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"colors.picker\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"colors.picker\")):this.colors.showColorsPopup()},plugin:\"colors\"}),e.FE.RegisterCommand(\"textColor\",{undo:!0,callback:function(e,t){this.colors.text(t)}}),e.FE.RegisterCommand(\"backgroundColor\",{undo:!0,callback:function(e,t){this.colors.background(t)}}),e.FE.RegisterCommand(\"colorChangeSet\",{undo:!1,focus:!1,callback:function(e,t){var n=this.popups.get(\"colors.picker\").find('.fr-command[data-cmd=\"'+e+'\"][data-param1=\"'+t+'\"]');this.colors.changeSet(n,t)}}),e.FE.DefineIcon(\"colorsBack\",{NAME:\"arrow-left\"}),e.FE.RegisterCommand(\"colorsBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.colors.back()}}),e.FE.RegisterCommand(\"customColor\",{title:\"OK\",undo:!0,callback:function(){this.colors.customColor()}}),e.FE.DefineIcon(\"remove\",{NAME:\"eraser\"})}(jQuery),function(e){e.FE.URLRegEx=\"(^| |\\\\u00A0)(\"+e.FE.LinkRegEx+\"|([a-z0-9+-_.]{1,}@[a-z0-9+-_.]{1,}\\\\.[a-z0-9+-_]{1,}))$\",e.FE.PLUGINS.url=function(t){var n=null;function o(e,o,r){for(var i=\"\";r.length&&\".\"==r[r.length-1];)i+=\".\",r=r.substring(0,r.length-1);var a=r;if(t.opts.linkConvertEmailAddress)t.helpers.isEmail(a)&&!/^mailto:.*/i.test(a)&&(a=\"mailto:\"+a);else if(t.helpers.isEmail(a))return o+r;return/^((http|https|ftp|ftps|mailto|tel|sms|notes|data)\\:)/i.test(a)||(a=\"//\"+a),(o||\"\")+\"<a\"+(t.opts.linkAlwaysBlank?' target=\"_blank\"':\"\")+(n?' rel=\"'+n+'\"':\"\")+' data-fr-linked=\"true\" href=\"'+a+'\">'+r.replace(/&amp;/g,\"&\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")+\"</a>\"+i}function r(){return new RegExp(e.FE.URLRegEx,\"gi\")}function i(e){return t.opts.linkAlwaysNoFollow&&(n=\"nofollow\"),t.opts.linkAlwaysBlank&&(t.opts.linkNoOpener&&(n?n+=\" noopener\":n=\"noopener\"),t.opts.linkNoReferrer&&(n?n+=\" noreferrer\":n=\"noreferrer\")),e.replace(r(),o)}function a(e){return!!e&&(\"A\"===e.tagName||!(!e.parentNode||e.parentNode==t.el)&&a(e.parentNode))}function s(e){var t=e.split(\" \");return t[t.length-1]}function l(){var n=t.selection.ranges(0),o=n.startContainer;if(!o||o.nodeType!==Node.TEXT_NODE||n.startOffset!==(o.textContent||\"\").length)return!1;if(a(o))return!1;if(r().test(s(o.textContent))){e(o).before(i(o.textContent));var l=e(o.parentNode).find(\"a[data-fr-linked]\");l.removeAttr(\"data-fr-linked\"),o.parentNode.removeChild(o),t.events.trigger(\"url.linked\",[l.get(0)])}else if(o.textContent.split(\" \").length<=2&&o.previousSibling&&\"A\"===o.previousSibling.tagName){var d=o.previousSibling.innerText+o.textContent;r().test(s(d))&&(e(o.previousSibling).replaceWith(i(d)),o.parentNode.removeChild(o))}}return{_init:function(){t.events.on(\"keypress\",(function(e){!t.selection.isCollapsed()||\".\"!=e.key&&\")\"!=e.key&&\"(\"!=e.key||l()}),!0),t.events.on(\"keydown\",(function(n){var o=n.which;!t.selection.isCollapsed()||o!=e.FE.KEYCODE.ENTER&&o!=e.FE.KEYCODE.SPACE||l()}),!0),t.events.on(\"paste.beforeCleanup\",(function(e){if(t.helpers.isURL(e)){var n=null;return t.opts.linkAlwaysBlank&&(t.opts.linkNoOpener&&(n?n+=\" noopener\":n=\"noopener\"),t.opts.linkNoReferrer&&(n?n+=\" noreferrer\":n=\"noreferrer\")),\"<a\"+(t.opts.linkAlwaysBlank?' target=\"_blank\"':\"\")+(n?' rel=\"'+n+'\"':\"\")+' href=\"'+e+'\" >'+e+\"</a>\"}}))}}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{lineBreakerTags:[\"table\",\"hr\",\"form\",\"dl\",\"span.fr-video\",\".fr-embedly\"],lineBreakerOffset:15,lineBreakerHorizontalOffset:10}),e.FE.PLUGINS.lineBreaker=function(t){var n,o,r;function i(o,r){var i,a,s,l,d,c,p,f;if(null==o)d=(l=r.parent()).offset().top,i=(p=r.offset().top)-Math.min((p-d)/2,t.opts.lineBreakerOffset),s=l.outerWidth(),a=l.offset().left;else if(null==r)(c=(l=o.parent()).offset().top+l.outerHeight())<(f=o.offset().top+o.outerHeight())&&(c=(l=e(l).parent()).offset().top+l.outerHeight()),i=f+Math.min(Math.abs(c-f)/2,t.opts.lineBreakerOffset),s=l.outerWidth(),a=l.offset().left;else{l=o.parent();var h=o.offset().top+o.height(),u=r.offset().top;if(h>u)return!1;i=(h+u)/2,s=l.outerWidth(),a=l.offset().left}t.opts.iframe&&(a+=t.$iframe.offset().left-t.helpers.scrollLeft(),i+=t.$iframe.offset().top-t.helpers.scrollTop()),t.$box.append(n),n.css(\"top\",i-t.win.pageYOffset),n.css(\"left\",a-t.win.pageXOffset),n.css(\"width\",s),n.data(\"tag1\",o),n.data(\"tag2\",r),n.addClass(\"fr-visible\").data(\"instance\",t)}function a(n){if(n){var o=e(n);if(0===t.$el.find(o).length)return null;if(n.nodeType!=Node.TEXT_NODE&&o.is(t.opts.lineBreakerTags.join(\",\")))return o;if(o.parents(t.opts.lineBreakerTags.join(\",\")).length>0)return n=o.parents(t.opts.lineBreakerTags.join(\",\")).get(0),0!==t.$el.find(n).length&&e(n).is(t.opts.lineBreakerTags.join(\",\"))?e(n):null}return null}function s(n,o){var r=t.doc.elementFromPoint(n,o);return r&&!e(r).closest(\".fr-line-breaker\").length&&!t.node.isElement(r)&&r!=t.$wp.get(0)&&function(e){if(void 0!==e.inFroalaWrapper)return e.inFroalaWrapper;for(var n=e;e.parentNode&&e.parentNode!==t.$wp.get(0);)e=e.parentNode;return n.inFroalaWrapper=e.parentNode==t.$wp.get(0),n.inFroalaWrapper}(r)?r:null}function l(e,n,o){for(var r=o,i=null;r<=t.opts.lineBreakerOffset&&!i;)(i=s(e,n-r))||(i=s(e,n+r)),r+=o;return i}function d(e,n,o){for(var r=null,i=100;!r&&e>t.$box.offset().left&&e<t.$box.offset().left+t.$box.outerWidth()&&i>0;)(r=s(e,n))||(r=l(e,n,5)),\"left\"==o?e-=t.opts.lineBreakerHorizontalOffset:e+=t.opts.lineBreakerHorizontalOffset,i-=t.opts.lineBreakerHorizontalOffset;return r}function c(e){r=null;var o=null,s=null,c=t.doc.elementFromPoint(e.pageX-t.win.pageXOffset,e.pageY-t.win.pageYOffset);c&&(\"HTML\"==c.tagName||\"BODY\"==c.tagName||t.node.isElement(c)||(c.getAttribute(\"class\")||\"\").indexOf(\"fr-line-breaker\")>=0)?((s=l(e.pageX-t.win.pageXOffset,e.pageY-t.win.pageYOffset,1))||(s=d(e.pageX-t.win.pageXOffset-t.opts.lineBreakerHorizontalOffset,e.pageY-t.win.pageYOffset,\"left\")),s||(s=d(e.pageX-t.win.pageXOffset+t.opts.lineBreakerHorizontalOffset,e.pageY-t.win.pageYOffset,\"right\")),o=a(s)):o=a(c),o?function(e,o){var r,s,l=e.offset().top,d=e.offset().top+e.outerHeight();if(Math.abs(d-o)<=t.opts.lineBreakerOffset||Math.abs(o-l)<=t.opts.lineBreakerOffset)if(Math.abs(d-o)<Math.abs(o-l)){for(var c=(s=e.get(0)).nextSibling;c&&c.nodeType==Node.TEXT_NODE&&0===c.textContent.length;)c=c.nextSibling;if(!c)return i(e,null),!0;if(r=a(c))return i(e,r),!0}else{if(!(s=e.get(0)).previousSibling)return i(null,e),!0;if(r=a(s.previousSibling))return i(r,e),!0}n.removeClass(\"fr-visible\").removeData(\"instance\")}(o,e.pageY):t.core.sameInstance(n)&&n.removeClass(\"fr-visible\").removeData(\"instance\")}function p(e){return!(n.hasClass(\"fr-visible\")&&!t.core.sameInstance(n))&&(t.popups.areVisible()||t.el.querySelector(\".fr-selected-cell\")?(n.removeClass(\"fr-visible\"),!0):void(!1!==o||t.edit.isDisabled()||(r&&clearTimeout(r),r=setTimeout(c,30,e))))}function f(){r&&clearTimeout(r),n&&n.hasClass(\"fr-visible\")&&n.removeClass(\"fr-visible\").removeData(\"instance\")}function h(){o=!0,f()}function u(){o=!1}function g(o){o.preventDefault();var r=n.data(\"instance\")||t;n.removeClass(\"fr-visible\").removeData(\"instance\");var i=n.data(\"tag1\"),a=n.data(\"tag2\"),s=t.html.defaultTag();null==i?s&&\"TD\"!=a.parent().get(0).tagName&&0===a.parents(s).length?a.before(\"<\"+s+\">\"+e.FE.MARKERS+\"<br></\"+s+\">\"):a.before(e.FE.MARKERS+\"<br>\"):s&&\"TD\"!=i.parent().get(0).tagName&&0===i.parents(s).length?i.after(\"<\"+s+\">\"+e.FE.MARKERS+\"<br></\"+s+\">\"):i.after(e.FE.MARKERS+\"<br>\"),r.selection.restore()}return{_init:function(){if(!t.$wp)return!1;t.shared.$line_breaker||(t.shared.$line_breaker=e('<div class=\"fr-line-breaker\"><a class=\"fr-floating-btn\" role=\"button\" tabIndex=\"-1\" title=\"'+t.language.translate(\"Break\")+'\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><rect x=\"21\" y=\"11\" width=\"2\" height=\"8\"/><rect x=\"14\" y=\"17\" width=\"7\" height=\"2\"/><path d=\"M14.000,14.000 L14.000,22.013 L9.000,18.031 L14.000,14.000 Z\"/></svg></a></div>')),n=t.shared.$line_breaker,t.events.on(\"shared.destroy\",(function(){n.html(\"\").removeData().remove(),n=null}),!0),t.events.on(\"destroy\",(function(){n.removeData(\"instance\").removeClass(\"fr-visible\").appendTo(\"body:first\"),clearTimeout(r)}),!0),t.events.$on(n,\"mousemove\",(function(e){e.stopPropagation()}),!0),t.events.bindClick(n,\"a\",g),o=!1,t.events.$on(t.$win,\"mousemove\",p),t.events.$on(e(t.win),\"scroll\",f),t.events.on(\"popups.show.table.edit\",f),t.events.on(\"commands.after\",f),t.events.$on(e(t.win),\"mousedown\",h),t.events.$on(e(t.win),\"mouseup\",u)}}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{entities:\"&quot;&#39;&iexcl;&cent;&pound;&curren;&yen;&brvbar;&sect;&uml;&copy;&ordf;&laquo;&not;&shy;&reg;&macr;&deg;&plusmn;&sup2;&sup3;&acute;&micro;&para;&middot;&cedil;&sup1;&ordm;&raquo;&frac14;&frac12;&frac34;&iquest;&Agrave;&Aacute;&Acirc;&Atilde;&Auml;&Aring;&AElig;&Ccedil;&Egrave;&Eacute;&Ecirc;&Euml;&Igrave;&Iacute;&Icirc;&Iuml;&ETH;&Ntilde;&Ograve;&Oacute;&Ocirc;&Otilde;&Ouml;&times;&Oslash;&Ugrave;&Uacute;&Ucirc;&Uuml;&Yacute;&THORN;&szlig;&agrave;&aacute;&acirc;&atilde;&auml;&aring;&aelig;&ccedil;&egrave;&eacute;&ecirc;&euml;&igrave;&iacute;&icirc;&iuml;&eth;&ntilde;&ograve;&oacute;&ocirc;&otilde;&ouml;&divide;&oslash;&ugrave;&uacute;&ucirc;&uuml;&yacute;&thorn;&yuml;&OElig;&oelig;&Scaron;&scaron;&Yuml;&fnof;&circ;&tilde;&Alpha;&Beta;&Gamma;&Delta;&Epsilon;&Zeta;&Eta;&Theta;&Iota;&Kappa;&Lambda;&Mu;&Nu;&Xi;&Omicron;&Pi;&Rho;&Sigma;&Tau;&Upsilon;&Phi;&Chi;&Psi;&Omega;&alpha;&beta;&gamma;&delta;&epsilon;&zeta;&eta;&theta;&iota;&kappa;&lambda;&mu;&nu;&xi;&omicron;&pi;&rho;&sigmaf;&sigma;&tau;&upsilon;&phi;&chi;&psi;&omega;&thetasym;&upsih;&piv;&ensp;&emsp;&thinsp;&zwnj;&zwj;&lrm;&rlm;&ndash;&mdash;&lsquo;&rsquo;&sbquo;&ldquo;&rdquo;&bdquo;&dagger;&Dagger;&bull;&hellip;&permil;&prime;&Prime;&lsaquo;&rsaquo;&oline;&frasl;&euro;&image;&weierp;&real;&trade;&alefsym;&larr;&uarr;&rarr;&darr;&harr;&crarr;&lArr;&uArr;&rArr;&dArr;&hArr;&forall;&part;&exist;&empty;&nabla;&isin;&notin;&ni;&prod;&sum;&minus;&lowast;&radic;&prop;&infin;&ang;&and;&or;&cap;&cup;&int;&there4;&sim;&cong;&asymp;&ne;&equiv;&le;&ge;&sub;&sup;&nsub;&sube;&supe;&oplus;&otimes;&perp;&sdot;&lceil;&rceil;&lfloor;&rfloor;&lang;&rang;&loz;&spades;&clubs;&hearts;&diams;\"}),e.FE.PLUGINS.entities=function(t){var n,o;function r(e){var t=e.textContent;if(t.match(n)){for(var r=\"\",i=0;i<t.length;i++)o[t[i]]?r+=o[t[i]]:r+=t[i];e.textContent=r}}function i(e){if(e&&[\"STYLE\",\"SCRIPT\",\"svg\",\"IFRAME\"].indexOf(e.tagName)>=0)return!0;for(var n=t.node.contents(e),o=0;o<n.length;o++)n[o].nodeType==Node.TEXT_NODE?r(n[o]):i(n[o]);e.nodeType==Node.TEXT_NODE&&r(e)}function a(e){return 0===e.length?\"\":t.clean.exec(e,i).replace(/\\&amp;/g,\"&\")}return{_init:function(){t.opts.htmlSimpleAmpersand||(t.opts.entities=t.opts.entities+\"&amp;\");var r=e(\"<div>\").html(t.opts.entities).text(),i=t.opts.entities.split(\";\");o={},n=\"\";for(var s=0;s<r.length;s++){var l=r.charAt(s);o[l]=i[s]+\";\",n+=\"\\\\\"+l+(s<r.length-1?\"|\":\"\")}n=new RegExp(\"(\"+n+\")\",\"g\"),t.events.on(\"html.get\",a,!0)}}}}(jQuery),function(e){e.extend(e.FE.DEFAULTS,{dragInline:!0}),e.FE.PLUGINS.draggable=function(t){function n(n){return!(!n.originalEvent||!n.originalEvent.target||n.originalEvent.target.nodeType!=Node.TEXT_NODE)||(n.target&&\"A\"==n.target.tagName&&1==n.target.childNodes.length&&\"IMG\"==n.target.childNodes[0].tagName&&(n.target=n.target.childNodes[0]),e(n.target).hasClass(\"fr-draggable\")?(t.undo.canDo()||t.undo.saveStep(),t.opts.dragInline?t.$el.attr(\"contenteditable\",!0):t.$el.attr(\"contenteditable\",!1),t.opts.toolbarInline&&t.toolbar.hide(),e(n.target).addClass(\"fr-dragging\"),t.browser.msie||t.browser.edge||t.selection.clear(),void n.originalEvent.dataTransfer.setData(\"text\",\"Froala\")):(t.browser.msie||n.preventDefault(),!1))}function o(e){return!(e&&(\"HTML\"==e.tagName||\"BODY\"==e.tagName||t.node.isElement(e)))}function r(e,n,o){t.opts.iframe&&(e+=t.$iframe.offset().top,n+=t.$iframe.offset().left),c.offset().top!=e&&c.css(\"top\",e),c.offset().left!=n&&c.css(\"left\",n),c.width()!=o&&c.css(\"width\",o)}function i(n){n.originalEvent.dataTransfer.dropEffect=\"move\",t.opts.dragInline?function(){for(var t=null,n=0;n<e.FE.INSTANCES.length;n++)if((t=e.FE.INSTANCES[n].$el.find(\".fr-dragging\")).length)return t.get(0)}()||!t.browser.msie&&!t.browser.edge||n.preventDefault():(n.preventDefault(),function(n){var i=t.doc.elementFromPoint(n.originalEvent.pageX-t.win.pageXOffset,n.originalEvent.pageY-t.win.pageYOffset);if(!o(i)){for(var a=0,s=i;!o(s)&&s==i&&n.originalEvent.pageY-t.win.pageYOffset-a>0;)a++,s=t.doc.elementFromPoint(n.originalEvent.pageX-t.win.pageXOffset,n.originalEvent.pageY-t.win.pageYOffset-a);(!o(s)||c&&0===t.$el.find(s).length&&s!=c.get(0))&&(s=null);for(var l=0,d=i;!o(d)&&d==i&&n.originalEvent.pageY-t.win.pageYOffset+l<e(t.doc).height();)l++,d=t.doc.elementFromPoint(n.originalEvent.pageX-t.win.pageXOffset,n.originalEvent.pageY-t.win.pageYOffset+l);(!o(d)||c&&0===t.$el.find(d).length&&d!=c.get(0))&&(d=null),i=null==d&&s?s:d&&null==s?d:d&&s?a<l?s:d:null}if(e(i).hasClass(\"fr-drag-helper\"))return!1;if(i&&!t.node.isBlock(i)&&(i=t.node.blockParent(i)),i&&[\"TD\",\"TH\",\"TR\",\"THEAD\",\"TBODY\"].indexOf(i.tagName)>=0&&(i=e(i).parents(\"table\").get(0)),i&&[\"LI\"].indexOf(i.tagName)>=0&&(i=e(i).parents(\"UL, OL\").get(0)),i&&!e(i).hasClass(\"fr-drag-helper\")){var p;c||(e.FE.$draggable_helper||(e.FE.$draggable_helper=e('<div class=\"fr-drag-helper\"></div>')),c=e.FE.$draggable_helper,t.events.on(\"shared.destroy\",(function(){c.html(\"\").removeData().remove(),c=null}),!0)),p=n.originalEvent.pageY<e(i).offset().top+e(i).outerHeight()/2;var f=e(i),h=0;p||0!==f.next().length?(p||(f=f.next()),\"before\"==c.data(\"fr-position\")&&f.is(c.data(\"fr-tag\"))||(f.prev().length>0&&(h=parseFloat(f.prev().css(\"margin-bottom\"))||0),h=Math.max(h,parseFloat(f.css(\"margin-top\"))||0),r(f.offset().top-h/2-t.$box.offset().top,f.offset().left-t.win.pageXOffset-t.$box.offset().left,f.width()),c.data(\"fr-position\",\"before\"))):\"after\"==c.data(\"fr-position\")&&f.is(c.data(\"fr-tag\"))||(h=parseFloat(f.css(\"margin-bottom\"))||0,r(f.offset().top+e(i).height()+h/2-t.$box.offset().top,f.offset().left-t.win.pageXOffset-t.$box.offset().left,f.width()),c.data(\"fr-position\",\"after\")),c.data(\"fr-tag\",f),c.addClass(\"fr-visible\"),c.appendTo(t.$box)}else c&&t.$box.find(c).length>0&&c.removeClass(\"fr-visible\")}(n))}function a(e){e.originalEvent.dataTransfer.dropEffect=\"move\",t.opts.dragInline||e.preventDefault()}function s(e){t.$el.attr(\"contenteditable\",!0);var n=t.$el.find(\".fr-dragging\");c&&c.hasClass(\"fr-visible\")&&t.$box.find(c).length?l(e):n.length&&(e.preventDefault(),e.stopPropagation()),c&&t.$box.find(c).length&&c.removeClass(\"fr-visible\"),n.removeClass(\"fr-dragging\")}function l(n){var o,r;\"true\"!==t.$el.attr(\"contenteditable\")&&t.$el.attr(\"contenteditable\",!0);for(var i=0;i<e.FE.INSTANCES.length;i++)if((o=e.FE.INSTANCES[i].$el.find(\".fr-dragging\")).length){r=e.FE.INSTANCES[i];break}if(o.length){if(n.preventDefault(),n.stopPropagation(),c&&c.hasClass(\"fr-visible\")&&t.$box.find(c).length)c.data(\"fr-tag\")[c.data(\"fr-position\")]('<span class=\"fr-marker\"></span>'),c.removeClass(\"fr-visible\");else if(!1===t.markers.insertAtPoint(n.originalEvent))return!1;if(o.removeClass(\"fr-dragging\"),!1===(o=t.events.chainTrigger(\"element.beforeDrop\",o)))return!1;var a=o;if(o.parent().is(\"A\")&&1==o.parent().get(0).childNodes.length&&(a=o.parent()),t.core.isEmpty())t.events.focus();else t.$el.find(\".fr-marker\").replaceWith(e.FE.MARKERS),t.selection.restore();if(r==t||t.undo.canDo()||t.undo.saveStep(),t.core.isEmpty())t.$el.html(a);else{var s=t.markers.insert();0===a.find(s).length?e(s).replaceWith(a):0===o.find(s).length&&e(s).replaceWith(o),o.after(e.FE.MARKERS),t.selection.restore()}return t.popups.hideAll(),t.selection.save(),t.$el.find(t.html.emptyBlockTagsQuery()).not(\"TD, TH, LI, .fr-inner\").not(t.opts.htmlAllowedEmptyTags.join(\",\")).remove(),t.html.wrap(),t.html.fillEmptyBlocks(),t.selection.restore(),t.undo.saveStep(),t.opts.iframe&&t.size.syncIframe(),r!=t&&(r.popups.hideAll(),r.$el.find(r.html.emptyBlockTagsQuery()).not(\"TD, TH, LI, .fr-inner\").remove(),r.html.wrap(),r.html.fillEmptyBlocks(),r.undo.saveStep(),r.events.trigger(\"element.dropped\"),r.opts.iframe&&r.size.syncIframe()),t.events.trigger(\"element.dropped\",[a]),!1}c&&c.removeClass(\"fr-visible\"),t.undo.canDo()||t.undo.saveStep(),setTimeout((function(){t.undo.saveStep()}),0)}function d(e){if(e&&\"DIV\"==e.tagName&&t.node.hasClass(e,\"fr-drag-helper\"))e.parentNode.removeChild(e);else if(e&&e.nodeType==Node.ELEMENT_NODE)for(var n=e.querySelectorAll(\"div.fr-drag-helper\"),o=0;o<n.length;o++)n[o].parentNode.removeChild(n[o])}var c;return{_init:function(){t.opts.enter==e.FE.ENTER_BR&&(t.opts.dragInline=!0),t.events.on(\"dragstart\",n,!0),t.events.on(\"dragover\",i,!0),t.events.on(\"dragenter\",a,!0),t.events.on(\"document.dragend\",s,!0),t.events.on(\"document.drop\",s,!0),t.events.on(\"drop\",l,!0),t.events.on(\"html.processGet\",d)}}}}(jQuery),jQuery.FE.PLUGINS.codeBeautifier=function(){var e,t,n,o,r={};function i(e,t){var n={\"@page\":!0,\"@font-face\":!0,\"@keyframes\":!0,\"@media\":!0,\"@supports\":!0,\"@document\":!0},o={\"@media\":!0,\"@supports\":!0,\"@document\":!0};t=t||{},e=(e=e||\"\").replace(/\\r\\n|[\\r\\u2028\\u2029]/g,\"\\n\");var r=t.indent_size||4,i=t.indent_char||\" \",a=void 0===t.selector_separator_newline||t.selector_separator_newline,s=void 0!==t.end_with_newline&&t.end_with_newline,l=void 0===t.newline_between_rules||t.newline_between_rules,d=t.eol?t.eol:\"\\n\";\"string\"==typeof r&&(r=parseInt(r,10)),t.indent_with_tabs&&(i=\"\\t\",r=1),d=d.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,\"\\n\");var c,p=/^\\s+$/,f=-1,h=0;function u(){return(c=e.charAt(++f))||\"\"}function g(t){var n,o=f;return t&&v(),n=e.charAt(f+1)||\"\",f=o-1,u(),n}function m(t){for(var n=f;u();)if(\"\\\\\"===c)u();else{if(-1!==t.indexOf(c))break;if(\"\\n\"===c)break}return e.substring(n,f+1)}function v(){for(var e=\"\";p.test(g());)u(),e+=c;return e}function b(){var e=\"\";for(c&&p.test(c)&&(e=c);p.test(u());)e+=c;return e}function E(t){var n=f;for(t=\"/\"===g(),u();u();){if(!t&&\"*\"===c&&\"/\"===g()){u();break}if(t&&\"\\n\"===c)return e.substring(n,f)}return e.substring(n,f)+c}function y(t){return e.substring(f-t.length,f).toLowerCase()===t}function w(){for(var t=0,n=f+1;n<e.length;n++){var o=e.charAt(n);if(\"{\"===o)return!0;if(\"(\"===o)t+=1;else if(\")\"===o){if(0==t)return!1;t-=1}else if(\";\"===o||\"}\"===o)return!1}return!1}for(var S,C,_=e.match(/^[\\t ]*/)[0],T=new Array(r+1).join(i),k=0,A=0,x={\"{\":function(e){x.singleSpace(),N.push(e),x.newLine()},\"}\":function(e){x.newLine(),N.push(e),x.newLine()},_lastCharWhitespace:function(){return p.test(N[N.length-1])},newLine:function(e){N.length&&(e||\"\\n\"===N[N.length-1]||x.trim(),N.push(\"\\n\"),_&&N.push(_))},singleSpace:function(){N.length&&!x._lastCharWhitespace()&&N.push(\" \")},preserveSingleSpace:function(){M&&x.singleSpace()},trim:function(){for(;x._lastCharWhitespace();)N.pop()}},N=[],R=!1,F=!1,O=!1,D=\"\",$=\"\";;){var L=b(),M=\"\"!==L,I=-1!==L.indexOf(\"\\n\");if($=D,D=c,!c)break;if(\"/\"===c&&\"*\"===g()){var B=0===k;(I||B)&&x.newLine(),N.push(E()),x.newLine(),B&&x.newLine(!0)}else if(\"/\"===c&&\"/\"===g())I||\"{\"===$||x.trim(),x.singleSpace(),N.push(E()),x.newLine();else if(\"@\"===c){x.preserveSingleSpace(),N.push(c);var P=(S=void 0,C=void 0,S=f,C=m(\": ,;{}()[]/='\\\"\"),f=S-1,u(),C);P.match(/[ :]$/)&&(u(),P=m(\": \").replace(/\\s$/,\"\"),N.push(P),x.singleSpace()),(P=P.replace(/\\s$/,\"\"))in n&&(A+=1,P in o&&(O=!0))}else\"#\"===c&&\"{\"===g()?(x.preserveSingleSpace(),N.push(m(\"}\"))):\"{\"===c?\"}\"===g(!0)?(v(),u(),x.singleSpace(),N.push(\"{}\"),x.newLine(),l&&0===k&&x.newLine(!0)):(k++,_+=T,x[\"{\"](c),O?(O=!1,R=k>A):R=k>=A):\"}\"===c?(k--,_=_.slice(0,-r),x[\"}\"](c),R=!1,F=!1,A&&A--,l&&0===k&&x.newLine(!0)):\":\"===c?(v(),!R&&!O||y(\"&\")||w()?\":\"===g()?(u(),N.push(\"::\")):N.push(\":\"):(F=!0,N.push(\":\"),x.singleSpace())):'\"'===c||\"'\"===c?(x.preserveSingleSpace(),N.push(m(c))):\";\"===c?(F=!1,N.push(c),x.newLine()):\"(\"===c?y(\"url\")?(N.push(c),v(),u()&&(\")\"!==c&&'\"'!==c&&\"'\"!==c?N.push(m(\")\")):f--)):(h++,x.preserveSingleSpace(),N.push(c),v()):\")\"===c?(N.push(c),h--):\",\"===c?(N.push(c),v(),a&&!F&&h<1?x.newLine():x.singleSpace()):\"]\"===c?N.push(c):\"[\"===c?(x.preserveSingleSpace(),N.push(c)):\"=\"===c?(v(),c=\"=\",N.push(c)):(x.preserveSingleSpace(),N.push(c))}var K=\"\";return _&&(K+=_),K+=N.join(\"\").replace(/[\\r\\n\\t ]+$/,\"\"),s&&(K+=\"\\n\"),\"\\n\"!=d&&(K=K.replace(/[\\n]/g,d)),K}function a(e,t){for(var n=0;n<t.length;n+=1)if(t[n]===e)return!0;return!1}function s(e){return e.replace(/^\\s+|\\s+$/g,\"\")}function l(e,t){return new m(e,t).beautify()}e=r,t=\"ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ﬀ-ﬆﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼＡ-Ｚａ-ｚｦ-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ\",n=new RegExp(\"[\"+t+\"]\"),o=new RegExp(\"[\"+t+\"̀-ͯ҃-֑҇-ׇֽֿׁׂׅׄؐ-ؚؠ-ىٲ-ۓۧ-ۨۻ-ۼܰ-݊ࠀ-ࠔࠛ-ࠣࠥ-ࠧࠩ-࠭ࡀ-ࡗࣤ-ࣾऀ-ःऺ-़ा-ॏ॑-ॗॢ-ॣ०-९ঁ-ঃ়া-ৄেৈৗয়-ৠਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢ-ૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୟ-ୠ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఁ-ఃె-ైొ-్ౕౖౢ-ౣ౦-౯ಂಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢ-ೣ೦-೯ംഃെ-ൈൗൢ-ൣ൦-൯ංඃ්ා-ුූෘ-ෟෲෳิ-ฺเ-ๅ๐-๙ິ-ູ່-ໍ໐-໙༘༙༠-༩༹༵༷ཁ-ཇཱ-྄྆-྇ྍ-ྗྙ-ྼ࿆က-ဩ၀-၉ၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟ᜎ-ᜐᜠ-ᜰᝀ-ᝐᝲᝳក-ឲ៝០-៩᠋-᠍᠐-᠙ᤠ-ᤫᤰ-᤻ᥑ-ᥭᦰ-ᧀᧈ-ᧉ᧐-᧙ᨀ-ᨕᨠ-ᩓ᩠-᩿᩼-᪉᪐-᪙ᭆ-ᭋ᭐-᭙᭫-᭳᮰-᮹᯦-᯳ᰀ-ᰢ᱀-᱉ᱛ-ᱽ᳐-᳒ᴀ-ᶾḁ-ἕ‌‍‿⁀⁔⃐-⃥⃜⃡-⃰ⶁ-ⶖⷠ-ⷿ〡-〨゙゚Ꙁ-ꙭꙴ-꙽ꚟ꛰-꛱ꟸ-ꠀ꠆ꠋꠣ-ꠧꢀ-ꢁꢴ-꣄꣐-꣙ꣳ-ꣷ꤀-꤉ꤦ-꤭ꤰ-ꥅꦀ-ꦃ꦳-꧀ꨀ-ꨧꩀ-ꩁꩌ-ꩍ꩐-꩙ꩻꫠ-ꫩꫲ-ꫳꯀ-ꯡ꯬꯭꯰-꯹ﬠ-ﬨ︀-️︠-︦︳︴﹍-﹏０-９＿]\"),e.newline=/[\\n\\r\\u2028\\u2029]/,e.lineBreak=new RegExp(\"\\r\\n|\"+e.newline.source),e.allLineBreaks=new RegExp(e.lineBreak.source,\"g\"),e.isIdentifierStart=function(e){return e<65?36===e||64===e:e<91||(e<97?95===e:e<123||e>=170&&n.test(String.fromCharCode(e)))},e.isIdentifierChar=function(e){return e<48?36===e:e<58||!(e<65)&&(e<91||(e<97?95===e:e<123||e>=170&&o.test(String.fromCharCode(e))))};var d=\"BlockStatement\",c=\"Statement\",p=\"ObjectLiteral\",f=\"ArrayLiteral\",h=\"ForInitializer\",u=\"Conditional\",g=\"Expression\";function m(e,t){var n,o,i,l,m,v,E,w,S,C,_,T,k,A=[],x=\"\";function N(e,t){var o=0;return e&&(o=e.indentation_level,!n.just_added_newline()&&e.line_indent_level>o&&(o=e.line_indent_level)),{mode:t,parent:e,last_text:e?e.last_text:\"\",last_word:e?e.last_word:\"\",declaration_statement:!1,declaration_assignment:!1,multiline_frame:!1,if_block:!1,else_block:!1,do_block:!1,do_while:!1,in_case_statement:!1,in_case:!1,case_body:!1,indentation_level:o,line_indent_level:e?e.line_indent_level:o,start_line_index:n.get_line_number(),ternary_depth:0}}for(T={TK_START_EXPR:function(){H();var e=g;if(\"[\"===l.text){if(\"TK_WORD\"===m||\")\"===w.last_text)return\"TK_RESERVED\"===m&&a(w.last_text,i.line_starters)&&(n.space_before_token=!0),I(e),L(),M(),void(k.space_in_paren&&(n.space_before_token=!0));e=f,B(w.mode)&&(\"[\"!==w.last_text&&(\",\"!==w.last_text||\"]\"!==v&&\"}\"!==v)||k.keep_array_indentation||D())}else\"TK_RESERVED\"===m&&\"for\"===w.last_text?e=h:\"TK_RESERVED\"===m&&a(w.last_text,[\"if\",\"while\"])&&(e=u);\";\"===w.last_text||\"TK_START_BLOCK\"===m?D():\"TK_END_EXPR\"===m||\"TK_START_EXPR\"===m||\"TK_END_BLOCK\"===m||\".\"===w.last_text?O(l.wanted_newline):\"TK_RESERVED\"===m&&\"(\"===l.text||\"TK_WORD\"===m||\"TK_OPERATOR\"===m?\"TK_RESERVED\"===m&&(\"function\"===w.last_word||\"typeof\"===w.last_word)||\"*\"===w.last_text&&\"function\"===v?k.space_after_anon_function&&(n.space_before_token=!0):\"TK_RESERVED\"!==m||!a(w.last_text,i.line_starters)&&\"catch\"!==w.last_text||k.space_before_conditional&&(n.space_before_token=!0):n.space_before_token=!0,\"(\"===l.text&&\"TK_RESERVED\"===m&&\"await\"===w.last_word&&(n.space_before_token=!0),\"(\"===l.text&&(\"TK_EQUALS\"!==m&&\"TK_OPERATOR\"!==m||U()||O()),I(e),L(),k.space_in_paren&&(n.space_before_token=!0),M()},TK_END_EXPR:function(){for(;w.mode===c;)K();w.multiline_frame&&O(\"]\"===l.text&&B(w.mode)&&!k.keep_array_indentation),k.space_in_paren&&(\"TK_START_EXPR\"!==m||k.space_in_empty_paren?n.space_before_token=!0:(n.trim(),n.space_before_token=!1)),\"]\"===l.text&&k.keep_array_indentation?(L(),K()):(K(),L()),n.remove_redundant_indentation(S),w.do_while&&S.mode===u&&(S.mode=g,w.do_block=!1,w.do_while=!1)},TK_START_BLOCK:function(){var e=W(1),t=W(2);t&&(\":\"===t.text&&a(e.type,[\"TK_STRING\",\"TK_WORD\",\"TK_RESERVED\"])||a(e.text,[\"get\",\"set\"])&&a(t.type,[\"TK_WORD\",\"TK_RESERVED\"]))?a(v,[\"class\",\"interface\"])?I(d):I(p):I(d);var o=!e.comments_before.length&&\"}\"===e.text&&\"function\"===w.last_word&&\"TK_END_EXPR\"===m;\"expand\"===k.brace_style||\"none\"===k.brace_style&&l.wanted_newline?\"TK_OPERATOR\"!==m&&(o||\"TK_EQUALS\"===m||\"TK_RESERVED\"===m&&z(w.last_text)&&\"else\"!==w.last_text)?n.space_before_token=!0:D(!1,!0):\"TK_OPERATOR\"!==m&&\"TK_START_EXPR\"!==m?\"TK_START_BLOCK\"===m?D():n.space_before_token=!0:B(S.mode)&&\",\"===w.last_text&&(\"}\"===v?n.space_before_token=!0:D()),L(),M()},TK_END_BLOCK:function(){for(;w.mode===c;)K();var e=\"TK_START_BLOCK\"===m;\"expand\"===k.brace_style?e||D():e||(B(w.mode)&&k.keep_array_indentation?(k.keep_array_indentation=!1,D(),k.keep_array_indentation=!0):D()),K(),L()},TK_WORD:V,TK_RESERVED:V,TK_SEMICOLON:function(){for(H()&&(n.space_before_token=!1);w.mode===c&&!w.if_block&&!w.do_block;)K();L()},TK_STRING:function(){H()||\"TK_RESERVED\"===m||\"TK_WORD\"===m?n.space_before_token=!0:\"TK_COMMA\"===m||\"TK_START_EXPR\"===m||\"TK_EQUALS\"===m||\"TK_OPERATOR\"===m?U()||O():D(),L()},TK_EQUALS:function(){H(),w.declaration_statement&&(w.declaration_assignment=!0),n.space_before_token=!0,L(),n.space_before_token=!0},TK_OPERATOR:function(){if(H(),\"TK_RESERVED\"===m&&z(w.last_text))return n.space_before_token=!0,void L();if(\"*\"!==l.text||\"TK_DOT\"!==m){if(\":\"===l.text&&w.in_case)return w.case_body=!0,M(),L(),D(),void(w.in_case=!1);if(\"::\"!==l.text){\"TK_OPERATOR\"===m&&O();var e=!0,t=!0;a(l.text,[\"--\",\"++\",\"!\",\"~\"])||a(l.text,[\"-\",\"+\"])&&(a(m,[\"TK_START_BLOCK\",\"TK_START_EXPR\",\"TK_EQUALS\",\"TK_OPERATOR\"])||a(w.last_text,i.line_starters)||\",\"===w.last_text)?(e=!1,t=!1,!l.wanted_newline||\"--\"!==l.text&&\"++\"!==l.text||D(!1,!0),\";\"===w.last_text&&P(w.mode)&&(e=!0),\"TK_RESERVED\"===m?e=!0:\"TK_END_EXPR\"===m?e=!(\"]\"===w.last_text&&(\"--\"===l.text||\"++\"===l.text)):\"TK_OPERATOR\"===m&&(e=a(l.text,[\"--\",\"-\",\"++\",\"+\"])&&a(w.last_text,[\"--\",\"-\",\"++\",\"+\"]),a(l.text,[\"+\",\"-\"])&&a(w.last_text,[\"--\",\"++\"])&&(t=!0)),w.mode!==d&&w.mode!==c||\"{\"!==w.last_text&&\";\"!==w.last_text||D()):\":\"===l.text?0===w.ternary_depth?e=!1:w.ternary_depth-=1:\"?\"===l.text?w.ternary_depth+=1:\"*\"===l.text&&\"TK_RESERVED\"===m&&\"function\"===w.last_text&&(e=!1,t=!1),n.space_before_token=n.space_before_token||e,L(),n.space_before_token=t}else L()}else L()},TK_COMMA:function(){if(w.declaration_statement)return P(w.parent.mode)&&(w.declaration_assignment=!1),L(),void(w.declaration_assignment?(w.declaration_assignment=!1,D(!1,!0)):(n.space_before_token=!0,k.comma_first&&O()));L(),w.mode===p||w.mode===c&&w.parent.mode===p?(w.mode===c&&K(),D()):(n.space_before_token=!0,k.comma_first&&O())},TK_BLOCK_COMMENT:function(){if(n.raw)return n.add_raw_token(l),void(l.directives&&\"end\"===l.directives.preserve&&(k.test_output_raw||(n.raw=!1)));if(l.directives)return D(!1,!0),L(),\"start\"===l.directives.preserve&&(n.raw=!0),void D(!1,!0);if(!r.newline.test(l.text)&&!l.wanted_newline)return n.space_before_token=!0,L(),void(n.space_before_token=!0);var e,t=function(e){e=e.replace(/\\x0d/g,\"\");for(var t=[],n=e.indexOf(\"\\n\");-1!==n;)t.push(e.substring(0,n)),n=(e=e.substring(n+1)).indexOf(\"\\n\");return e.length&&t.push(e),t}(l.text),o=!1,i=!1,a=l.whitespace_before,d=a.length;for(D(!1,!0),t.length>1&&(function(e,t){for(var n=0;n<e.length;n++)if(s(e[n]).charAt(0)!==t)return!1;return!0}(t.slice(1),\"*\")?o=!0:function(e,t){for(var n,o=0,r=e.length;o<r;o++)if((n=e[o])&&0!==n.indexOf(t))return!1;return!0}(t.slice(1),a)&&(i=!0)),L(t[0]),e=1;e<t.length;e++)D(!1,!0),o?L(\" \"+t[e].replace(/^\\s+/g,\"\")):i&&t[e].length>d?L(t[e].substring(d)):n.add_token(t[e]);D(!1,!0)},TK_COMMENT:function(){l.wanted_newline?D(!1,!0):n.trim(!0),n.space_before_token=!0,L(),D(!1,!0)},TK_DOT:function(){H(),\"TK_RESERVED\"===m&&z(w.last_text)?n.space_before_token=!0:O(\")\"===w.last_text&&k.break_chained_methods),L()},TK_UNKNOWN:function(){L(),\"\\n\"===l.text[l.text.length-1]&&D()},TK_EOF:function(){for(;w.mode===c;)K()}},k={},void 0!==(t=t||{}).braces_on_own_line&&(k.brace_style=t.braces_on_own_line?\"expand\":\"collapse\"),k.brace_style=t.brace_style?t.brace_style:k.brace_style?k.brace_style:\"collapse\",\"expand-strict\"===k.brace_style&&(k.brace_style=\"expand\"),k.indent_size=t.indent_size?parseInt(t.indent_size,10):4,k.indent_char=t.indent_char?t.indent_char:\" \",k.eol=t.eol?t.eol:\"\\n\",k.preserve_newlines=void 0===t.preserve_newlines||t.preserve_newlines,k.break_chained_methods=void 0!==t.break_chained_methods&&t.break_chained_methods,k.max_preserve_newlines=void 0===t.max_preserve_newlines?0:parseInt(t.max_preserve_newlines,10),k.space_in_paren=void 0!==t.space_in_paren&&t.space_in_paren,k.space_in_empty_paren=void 0!==t.space_in_empty_paren&&t.space_in_empty_paren,k.jslint_happy=void 0!==t.jslint_happy&&t.jslint_happy,k.space_after_anon_function=void 0!==t.space_after_anon_function&&t.space_after_anon_function,k.keep_array_indentation=void 0!==t.keep_array_indentation&&t.keep_array_indentation,k.space_before_conditional=void 0===t.space_before_conditional||t.space_before_conditional,k.unescape_strings=void 0!==t.unescape_strings&&t.unescape_strings,k.wrap_line_length=void 0===t.wrap_line_length?0:parseInt(t.wrap_line_length,10),k.e4x=void 0!==t.e4x&&t.e4x,k.end_with_newline=void 0!==t.end_with_newline&&t.end_with_newline,k.comma_first=void 0!==t.comma_first&&t.comma_first,k.test_output_raw=void 0!==t.test_output_raw&&t.test_output_raw,k.jslint_happy&&(k.space_after_anon_function=!0),t.indent_with_tabs&&(k.indent_char=\"\\t\",k.indent_size=1),k.eol=k.eol.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,\"\\n\"),E=\"\";k.indent_size>0;)E+=k.indent_char,k.indent_size-=1;var R=0;if(e&&e.length){for(;\" \"===e.charAt(R)||\"\\t\"===e.charAt(R);)x+=e.charAt(R),R+=1;e=e.substring(R)}function F(e){var t=e.newlines;if(k.keep_array_indentation&&B(w.mode))for(n=0;n<t;n+=1)D(n>0);else if(k.max_preserve_newlines&&t>k.max_preserve_newlines&&(t=k.max_preserve_newlines),k.preserve_newlines&&e.newlines>1){D();for(var n=1;n<t;n+=1)D(!0)}T[(l=e).type]()}function O(e){e=void 0!==e&&e,n.just_added_newline()||(k.preserve_newlines&&l.wanted_newline||e||k.wrap_line_length&&n.current_line.get_character_count()+l.text.length+(n.space_before_token?1:0)>=k.wrap_line_length)&&D(!1,!0)}function D(e,t){if(!t&&\";\"!==w.last_text&&\",\"!==w.last_text&&\"=\"!==w.last_text&&\"TK_OPERATOR\"!==m)for(;w.mode===c&&!w.if_block&&!w.do_block;)K();n.add_new_line(e)&&(w.multiline_frame=!0)}function $(){n.just_added_newline()&&(k.keep_array_indentation&&B(w.mode)&&l.wanted_newline?(n.current_line.push(l.whitespace_before),n.space_before_token=!1):n.set_indent(w.indentation_level)&&(w.line_indent_level=w.indentation_level))}function L(e){n.raw?n.add_raw_token(l):(k.comma_first&&\"TK_COMMA\"===m&&n.just_added_newline()&&\",\"===n.previous_line.last()&&(n.previous_line.pop(),$(),n.add_token(\",\"),n.space_before_token=!0),e=e||l.text,$(),n.add_token(e))}function M(){w.indentation_level+=1}function I(e){w?(C.push(w),S=w):S=N(null,e),w=N(S,e)}function B(e){return e===f}function P(e){return a(e,[g,h,u])}function K(){C.length>0&&(S=w,w=C.pop(),S.mode===c&&n.remove_redundant_indentation(S))}function U(){return w.parent.mode===p&&w.mode===c&&(\":\"===w.last_text&&0===w.ternary_depth||\"TK_RESERVED\"===m&&a(w.last_text,[\"get\",\"set\"]))}function H(){return!!(\"TK_RESERVED\"===m&&a(w.last_text,[\"var\",\"let\",\"const\"])&&\"TK_WORD\"===l.type||\"TK_RESERVED\"===m&&\"do\"===w.last_text||\"TK_RESERVED\"===m&&\"return\"===w.last_text&&!l.wanted_newline||\"TK_RESERVED\"===m&&\"else\"===w.last_text&&(\"TK_RESERVED\"!==l.type||\"if\"!==l.text)||\"TK_END_EXPR\"===m&&(S.mode===h||S.mode===u)||\"TK_WORD\"===m&&w.mode===d&&!w.in_case&&\"--\"!==l.text&&\"++\"!==l.text&&\"function\"!==v&&\"TK_WORD\"!==l.type&&\"TK_RESERVED\"!==l.type||w.mode===p&&(\":\"===w.last_text&&0===w.ternary_depth||\"TK_RESERVED\"===m&&a(w.last_text,[\"get\",\"set\"])))&&(I(c),M(),\"TK_RESERVED\"===m&&a(w.last_text,[\"var\",\"let\",\"const\"])&&\"TK_WORD\"===l.type&&(w.declaration_statement=!0),U()||O(\"TK_RESERVED\"===l.type&&a(l.text,[\"do\",\"for\",\"if\",\"while\"])),!0)}function z(e){return a(e,[\"case\",\"return\",\"do\",\"if\",\"throw\",\"else\"])}function W(e){var t=o+(e||0);return t<0||t>=A.length?null:A[t]}function V(){if(\"TK_RESERVED\"===l.type&&w.mode!==p&&a(l.text,[\"set\",\"get\"])&&(l.type=\"TK_WORD\"),\"TK_RESERVED\"===l.type&&w.mode===p&&\":\"==W(1).text&&(l.type=\"TK_WORD\"),H()||!l.wanted_newline||P(w.mode)||\"TK_OPERATOR\"===m&&\"--\"!==w.last_text&&\"++\"!==w.last_text||\"TK_EQUALS\"===m||!k.preserve_newlines&&\"TK_RESERVED\"===m&&a(w.last_text,[\"var\",\"let\",\"const\",\"set\",\"get\"])||D(),w.do_block&&!w.do_while){if(\"TK_RESERVED\"===l.type&&\"while\"===l.text)return n.space_before_token=!0,L(),n.space_before_token=!0,void(w.do_while=!0);D(),w.do_block=!1}if(w.if_block)if(w.else_block||\"TK_RESERVED\"!==l.type||\"else\"!==l.text){for(;w.mode===c;)K();w.if_block=!1,w.else_block=!1}else w.else_block=!0;return\"TK_RESERVED\"===l.type&&(\"case\"===l.text||\"default\"===l.text&&w.in_case_statement)?(D(),(w.case_body||k.jslint_happy)&&(w.indentation_level>0&&(!w.parent||w.indentation_level>w.parent.indentation_level)&&(w.indentation_level-=1),w.case_body=!1),L(),w.in_case=!0,void(w.in_case_statement=!0)):(\"TK_RESERVED\"===l.type&&\"function\"===l.text&&((a(w.last_text,[\"}\",\";\"])||n.just_added_newline()&&!a(w.last_text,[\"[\",\"{\",\":\",\"=\",\",\"]))&&(n.just_added_blankline()||l.comments_before.length||(D(),D(!0))),\"TK_RESERVED\"===m||\"TK_WORD\"===m?\"TK_RESERVED\"===m&&a(w.last_text,[\"get\",\"set\",\"new\",\"return\",\"export\",\"async\"])||\"TK_RESERVED\"===m&&\"default\"===w.last_text&&\"export\"===v?n.space_before_token=!0:D():\"TK_OPERATOR\"===m||\"=\"===w.last_text?n.space_before_token=!0:(w.multiline_frame||!P(w.mode)&&!B(w.mode))&&D()),\"TK_COMMA\"!==m&&\"TK_START_EXPR\"!==m&&\"TK_EQUALS\"!==m&&\"TK_OPERATOR\"!==m||U()||O(),\"TK_RESERVED\"===l.type&&a(l.text,[\"function\",\"get\",\"set\"])?(L(),void(w.last_word=l.text)):(_=\"NONE\",\"TK_END_BLOCK\"===m?\"TK_RESERVED\"===l.type&&a(l.text,[\"else\",\"catch\",\"finally\"])?\"expand\"===k.brace_style||\"end-expand\"===k.brace_style||\"none\"===k.brace_style&&l.wanted_newline?_=\"NEWLINE\":(_=\"SPACE\",n.space_before_token=!0):_=\"NEWLINE\":\"TK_SEMICOLON\"===m&&w.mode===d?_=\"NEWLINE\":\"TK_SEMICOLON\"===m&&P(w.mode)?_=\"SPACE\":\"TK_STRING\"===m?_=\"NEWLINE\":\"TK_RESERVED\"===m||\"TK_WORD\"===m||\"*\"===w.last_text&&\"function\"===v?_=\"SPACE\":\"TK_START_BLOCK\"===m?_=\"NEWLINE\":\"TK_END_EXPR\"===m&&(n.space_before_token=!0,_=\"NEWLINE\"),\"TK_RESERVED\"===l.type&&a(l.text,i.line_starters)&&\")\"!==w.last_text&&(_=\"else\"===w.last_text||\"export\"===w.last_text?\"SPACE\":\"NEWLINE\"),\"TK_RESERVED\"===l.type&&a(l.text,[\"else\",\"catch\",\"finally\"])?\"TK_END_BLOCK\"!==m||\"expand\"===k.brace_style||\"end-expand\"===k.brace_style||\"none\"===k.brace_style&&l.wanted_newline?D():(n.trim(!0),\"}\"!==n.current_line.last()&&D(),n.space_before_token=!0):\"NEWLINE\"===_?\"TK_RESERVED\"===m&&z(w.last_text)?n.space_before_token=!0:\"TK_END_EXPR\"!==m?\"TK_START_EXPR\"===m&&\"TK_RESERVED\"===l.type&&a(l.text,[\"var\",\"let\",\"const\"])||\":\"===w.last_text||(\"TK_RESERVED\"===l.type&&\"if\"===l.text&&\"else\"===w.last_text?n.space_before_token=!0:D()):\"TK_RESERVED\"===l.type&&a(l.text,i.line_starters)&&\")\"!==w.last_text&&D():w.multiline_frame&&B(w.mode)&&\",\"===w.last_text&&\"}\"===v?D():\"SPACE\"===_&&(n.space_before_token=!0),L(),w.last_word=l.text,\"TK_RESERVED\"===l.type&&\"do\"===l.text&&(w.do_block=!0),void(\"TK_RESERVED\"===l.type&&\"if\"===l.text&&(w.if_block=!0))))}m=\"TK_START_BLOCK\",v=\"\",(n=new b(E,x)).raw=k.test_output_raw,C=[],I(d),this.beautify=function(){var t,r;for(i=new y(e,k,E),A=i.tokenize(),o=0;t=W();){for(var a=0;a<t.comments_before.length;a++)F(t.comments_before[a]);F(t),v=w.last_text,m=t.type,w.last_text=t.text,o+=1}return r=n.get_code(),k.end_with_newline&&(r+=\"\\n\"),\"\\n\"!=k.eol&&(r=r.replace(/[\\n]/g,k.eol)),r}}function v(e){var t=0,n=-1,o=[],r=!0;this.set_indent=function(o){t=e.baseIndentLength+o*e.indent_length,n=o},this.get_character_count=function(){return t},this.is_empty=function(){return r},this.last=function(){return this._empty?null:o[o.length-1]},this.push=function(e){o.push(e),t+=e.length,r=!1},this.pop=function(){var e=null;return r||(e=o.pop(),t-=e.length,r=0===o.length),e},this.remove_indent=function(){n>0&&(n-=1,t-=e.indent_length)},this.trim=function(){for(;\" \"===this.last();)o.pop(),t-=1;r=0===o.length},this.toString=function(){var t=\"\";return this._empty||(n>=0&&(t=e.indent_cache[n]),t+=o.join(\"\")),t}}function b(e,t){t=t||\"\",this.indent_cache=[t],this.baseIndentLength=t.length,this.indent_length=e.length,this.raw=!1;var n=[];this.baseIndentString=t,this.indent_string=e,this.previous_line=null,this.current_line=null,this.space_before_token=!1,this.add_outputline=function(){this.previous_line=this.current_line,this.current_line=new v(this),n.push(this.current_line)},this.add_outputline(),this.get_line_number=function(){return n.length},this.add_new_line=function(e){return!(1===this.get_line_number()&&this.just_added_newline()||!e&&this.just_added_newline()||(this.raw||this.add_outputline(),0))},this.get_code=function(){return n.join(\"\\n\").replace(/[\\r\\n\\t ]+$/,\"\")},this.set_indent=function(e){if(n.length>1){for(;e>=this.indent_cache.length;)this.indent_cache.push(this.indent_cache[this.indent_cache.length-1]+this.indent_string);return this.current_line.set_indent(e),!0}return this.current_line.set_indent(0),!1},this.add_raw_token=function(e){for(var t=0;t<e.newlines;t++)this.add_outputline();this.current_line.push(e.whitespace_before),this.current_line.push(e.text),this.space_before_token=!1},this.add_token=function(e){this.add_space_before_token(),this.current_line.push(e)},this.add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&this.current_line.push(\" \"),this.space_before_token=!1},this.remove_redundant_indentation=function(e){if(!e.multiline_frame&&e.mode!==h&&e.mode!==u)for(var t=e.start_line_index,o=n.length;t<o;)n[t].remove_indent(),t++},this.trim=function(o){for(o=void 0!==o&&o,this.current_line.trim(e,t);o&&n.length>1&&this.current_line.is_empty();)n.pop(),this.current_line=n[n.length-1],this.current_line.trim();this.previous_line=n.length>1?n[n.length-2]:null},this.just_added_newline=function(){return this.current_line.is_empty()},this.just_added_blankline=function(){return!!this.just_added_newline()&&(1===n.length||n[n.length-2].is_empty())}}var E=function(e,t,n,o,r,i){this.type=e,this.text=t,this.comments_before=[],this.newlines=n||0,this.wanted_newline=n>0,this.whitespace_before=o||\"\",this.parent=null,this.directives=null};function y(e,t,n){var o=\"\\n\\r\\t \".split(\"\"),i=/[0-9]/,l=/[01234567]/,d=/[0123456789abcdefABCDEF]/,c=\"+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! ~ , : ? ^ ^= |= :: =>\".split(\" \");this.line_starters=\"continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export\".split(\",\");var p,f,h,u,g,m,v=this.line_starters.concat([\"do\",\"in\",\"else\",\"get\",\"set\",\"new\",\"catch\",\"finally\",\"typeof\",\"yield\",\"async\",\"await\"]),b=/([\\s\\S]*?)((?:\\*\\/)|$)/g,y=/([^\\n\\r\\u2028\\u2029]*)/g,w=/\\/\\* beautify( \\w+[:]\\w+)+ \\*\\//g,S=/ (\\w+)[:](\\w+)/g,C=/([\\s\\S]*?)((?:\\/\\*\\sbeautify\\signore:end\\s\\*\\/)|$)/g,_=/((<\\?php|<\\?=)[\\s\\S]*?\\?>)|(<%[\\s\\S]*?%>)/g;function T(){var n,T,k=[];if(p=0,f=\"\",g>=m)return[\"\",\"TK_EOF\"];T=u.length?u[u.length-1]:new E(\"TK_START_BLOCK\",\"{\");var A=e.charAt(g);for(g+=1;a(A,o);){if(r.newline.test(A)?\"\\n\"===A&&\"\\r\"===e.charAt(g-2)||(p+=1,k=[]):k.push(A),g>=m)return[\"\",\"TK_EOF\"];A=e.charAt(g),g+=1}if(k.length&&(f=k.join(\"\")),i.test(A)){var x=!0,N=!0,R=i;for(\"0\"===A&&g<m&&/[Xxo]/.test(e.charAt(g))?(x=!1,N=!1,A+=e.charAt(g),g+=1,R=/[o]/.test(e.charAt(g))?l:d):(A=\"\",g-=1);g<m&&R.test(e.charAt(g));)A+=e.charAt(g),g+=1,x&&g<m&&\".\"===e.charAt(g)&&(A+=e.charAt(g),g+=1,x=!1),N&&g<m&&/[Ee]/.test(e.charAt(g))&&(A+=e.charAt(g),(g+=1)<m&&/[+-]/.test(e.charAt(g))&&(A+=e.charAt(g),g+=1),N=!1,x=!1);return[A,\"TK_WORD\"]}if(r.isIdentifierStart(e.charCodeAt(g-1))){if(g<m)for(;r.isIdentifierChar(e.charCodeAt(g))&&(A+=e.charAt(g),(g+=1)!==m););return\"TK_DOT\"===T.type||\"TK_RESERVED\"===T.type&&a(T.text,[\"set\",\"get\"])||!a(A,v)?[A,\"TK_WORD\"]:\"in\"===A?[A,\"TK_OPERATOR\"]:[A,\"TK_RESERVED\"]}if(\"(\"===A||\"[\"===A)return[A,\"TK_START_EXPR\"];if(\")\"===A||\"]\"===A)return[A,\"TK_END_EXPR\"];if(\"{\"===A)return[A,\"TK_START_BLOCK\"];if(\"}\"===A)return[A,\"TK_END_BLOCK\"];if(\";\"===A)return[A,\"TK_SEMICOLON\"];if(\"/\"===A){var F=\"\";if(\"*\"===e.charAt(g)){var O;g+=1,b.lastIndex=g,F=\"/*\"+(O=b.exec(e))[0],g+=O[0].length;var D=function(e){if(!e.match(w))return null;var t={};S.lastIndex=0;for(var n=S.exec(e);n;)t[n[1]]=n[2],n=S.exec(e);return t}(F);return D&&\"start\"===D.ignore&&(C.lastIndex=g,F+=(O=C.exec(e))[0],g+=O[0].length),[F=F.replace(r.lineBreak,\"\\n\"),\"TK_BLOCK_COMMENT\",D]}if(\"/\"===e.charAt(g))return g+=1,y.lastIndex=g,F=\"//\"+(O=y.exec(e))[0],g+=O[0].length,[F,\"TK_COMMENT\"]}if(\"`\"===A||\"'\"===A||'\"'===A||(\"/\"===A||t.e4x&&\"<\"===A&&e.slice(g-1).match(/^<([-a-zA-Z:0-9_.]+|{[^{}]*}|!\\[CDATA\\[[\\s\\S]*?\\]\\])(\\s+[-a-zA-Z:0-9_.]+\\s*=\\s*('[^']*'|\"[^\"]*\"|{.*?}))*\\s*(\\/?)\\s*>/))&&(\"TK_RESERVED\"===T.type&&a(T.text,[\"return\",\"case\",\"throw\",\"else\",\"do\",\"typeof\",\"yield\"])||\"TK_END_EXPR\"===T.type&&\")\"===T.text&&T.parent&&\"TK_RESERVED\"===T.parent.type&&a(T.parent.text,[\"if\",\"while\",\"for\"])||a(T.type,[\"TK_COMMENT\",\"TK_START_EXPR\",\"TK_START_BLOCK\",\"TK_END_BLOCK\",\"TK_OPERATOR\",\"TK_EQUALS\",\"TK_EOF\",\"TK_SEMICOLON\",\"TK_COMMA\"]))){var $=A,L=!1,M=!1;if(n=A,\"/\"===$)for(var I=!1;g<m&&(L||I||e.charAt(g)!==$)&&!r.newline.test(e.charAt(g));)n+=e.charAt(g),L?L=!1:(L=\"\\\\\"===e.charAt(g),\"[\"===e.charAt(g)?I=!0:\"]\"===e.charAt(g)&&(I=!1)),g+=1;else if(t.e4x&&\"<\"===$){var B=/<(\\/?)([-a-zA-Z:0-9_.]+|{[^{}]*}|!\\[CDATA\\[[\\s\\S]*?\\]\\])(\\s+[-a-zA-Z:0-9_.]+\\s*=\\s*('[^']*'|\"[^\"]*\"|{.*?}))*\\s*(\\/?)\\s*>/g,P=e.slice(g-1),K=B.exec(P);if(K&&0===K.index){for(var U=K[2],H=0;K;){var z=!!K[1],W=K[2],V=!!K[K.length-1]||\"![CDATA[\"===W.slice(0,8);if(W!==U||V||(z?--H:++H),H<=0)break;K=B.exec(P)}var Y=K?K.index+K[0].length:P.length;return P=P.slice(0,Y),g+=Y-1,[P=P.replace(r.lineBreak,\"\\n\"),\"TK_STRING\"]}}else for(;g<m&&(L||e.charAt(g)!==$&&(\"`\"===$||!r.newline.test(e.charAt(g))));)(L||\"`\"===$)&&r.newline.test(e.charAt(g))?(\"\\r\"===e.charAt(g)&&\"\\n\"===e.charAt(g+1)&&(g+=1),n+=\"\\n\"):n+=e.charAt(g),L?(\"x\"!==e.charAt(g)&&\"u\"!==e.charAt(g)||(M=!0),L=!1):L=\"\\\\\"===e.charAt(g),g+=1;if(M&&t.unescape_strings&&(n=function(e){for(var t,n=!1,o=\"\",r=0,i=\"\",a=0;n||r<e.length;)if(t=e.charAt(r),r++,n){if(n=!1,\"x\"===t)i=e.substr(r,2),r+=2;else{if(\"u\"!==t){o+=\"\\\\\"+t;continue}i=e.substr(r,4),r+=4}if(!i.match(/^[0123456789abcdefABCDEF]+$/))return e;if((a=parseInt(i,16))>=0&&a<32){o+=\"x\"===t?\"\\\\x\"+i:\"\\\\u\"+i;continue}if(34===a||39===a||92===a)o+=\"\\\\\"+String.fromCharCode(a);else{if(\"x\"===t&&a>126&&a<=255)return e;o+=String.fromCharCode(a)}}else\"\\\\\"===t?n=!0:o+=t;return o}(n)),g<m&&e.charAt(g)===$&&(n+=$,g+=1,\"/\"===$))for(;g<m&&r.isIdentifierStart(e.charCodeAt(g));)n+=e.charAt(g),g+=1;return[n,\"TK_STRING\"]}if(\"#\"===A){if(0===u.length&&\"!\"===e.charAt(g)){for(n=A;g<m&&\"\\n\"!==A;)n+=A=e.charAt(g),g+=1;return[s(n)+\"\\n\",\"TK_UNKNOWN\"]}var q=\"#\";if(g<m&&i.test(e.charAt(g))){do{q+=A=e.charAt(g),g+=1}while(g<m&&\"#\"!==A&&\"=\"!==A);return\"#\"===A||(\"[\"===e.charAt(g)&&\"]\"===e.charAt(g+1)?(q+=\"[]\",g+=2):\"{\"===e.charAt(g)&&\"}\"===e.charAt(g+1)&&(q+=\"{}\",g+=2)),[q,\"TK_WORD\"]}}if(\"<\"===A&&(\"?\"===e.charAt(g)||\"%\"===e.charAt(g))){_.lastIndex=g-1;var X=_.exec(e);if(X)return A=X[0],g+=A.length-1,[A=A.replace(r.lineBreak,\"\\n\"),\"TK_STRING\"]}if(\"<\"===A&&\"\\x3c!--\"===e.substring(g-1,g+3)){for(g+=3,A=\"\\x3c!--\";!r.newline.test(e.charAt(g))&&g<m;)A+=e.charAt(g),g++;return h=!0,[A,\"TK_COMMENT\"]}if(\"-\"===A&&h&&\"--\\x3e\"===e.substring(g-1,g+2))return h=!1,g+=2,[\"--\\x3e\",\"TK_COMMENT\"];if(\".\"===A)return[A,\"TK_DOT\"];if(a(A,c)){for(;g<m&&a(A+e.charAt(g),c)&&(A+=e.charAt(g),!((g+=1)>=m)););return\",\"===A?[A,\"TK_COMMA\"]:\"=\"===A?[A,\"TK_EQUALS\"]:[A,\"TK_OPERATOR\"]}return[A,\"TK_UNKNOWN\"]}this.tokenize=function(){var t,n,o;m=e.length,g=0,h=!1,u=[];for(var r=null,i=[],a=[];!n||\"TK_EOF\"!==n.type;){for(o=T(),t=new E(o[1],o[0],p,f);\"TK_COMMENT\"===t.type||\"TK_BLOCK_COMMENT\"===t.type||\"TK_UNKNOWN\"===t.type;)\"TK_BLOCK_COMMENT\"===t.type&&(t.directives=o[2]),a.push(t),o=T(),t=new E(o[1],o[0],p,f);a.length&&(t.comments_before=a,a=[]),\"TK_START_BLOCK\"===t.type||\"TK_START_EXPR\"===t.type?(t.parent=n,i.push(r),r=t):(\"TK_END_BLOCK\"===t.type||\"TK_END_EXPR\"===t.type)&&r&&(\"]\"===t.text&&\"[\"===r.text||\")\"===t.text&&\"(\"===r.text||\"}\"===t.text&&\"{\"===r.text)&&(t.parent=r.parent,r=i.pop()),u.push(t),n=t}return u}}return{run:function(e,t){function n(e){return e.replace(/\\s+$/g,\"\")}var o,r,a,s,d,c,p,f,h,u,g,m,v,b;for(void 0!==(t=t||{}).wrap_line_length&&0!==parseInt(t.wrap_line_length,10)||void 0===t.max_char||0===parseInt(t.max_char,10)||(t.wrap_line_length=t.max_char),r=void 0!==t.indent_inner_html&&t.indent_inner_html,a=void 0===t.indent_size?4:parseInt(t.indent_size,10),s=void 0===t.indent_char?\" \":t.indent_char,c=void 0===t.brace_style?\"collapse\":t.brace_style,d=0===parseInt(t.wrap_line_length,10)?32786:parseInt(t.wrap_line_length||250,10),p=t.unformatted||[\"a\",\"span\",\"img\",\"bdo\",\"em\",\"strong\",\"dfn\",\"code\",\"samp\",\"kbd\",\"var\",\"cite\",\"abbr\",\"acronym\",\"q\",\"sub\",\"sup\",\"tt\",\"i\",\"b\",\"big\",\"small\",\"u\",\"s\",\"strike\",\"font\",\"ins\",\"del\",\"address\",\"pre\"],f=void 0===t.preserve_newlines||t.preserve_newlines,h=f?isNaN(parseInt(t.max_preserve_newlines,10))?32786:parseInt(t.max_preserve_newlines,10):0,u=void 0!==t.indent_handlebars&&t.indent_handlebars,g=void 0===t.wrap_attributes?\"auto\":t.wrap_attributes,m=void 0===t.wrap_attributes_indent_size?a:parseInt(t.wrap_attributes_indent_size,10)||a,v=void 0!==t.end_with_newline&&t.end_with_newline,b=Array.isArray(t.extra_liners)?t.extra_liners.concat():\"string\"==typeof t.extra_liners?t.extra_liners.split(\",\"):\"head,body,/html\".split(\",\"),t.indent_with_tabs&&(s=\"\\t\",a=1),o=new function(){return this.pos=0,this.token=\"\",this.current_mode=\"CONTENT\",this.tags={parent:\"parent1\",parentcount:1,parent1:\"\"},this.tag_type=\"\",this.token_text=this.last_token=this.last_text=this.token_type=\"\",this.newlines=0,this.indent_content=r,this.Utils={whitespace:\"\\n\\r\\t \".split(\"\"),single_token:\"br,input,link,meta,source,!doctype,basefont,base,area,hr,wbr,param,img,isindex,embed\".split(\",\"),extra_liners:b,in_array:function(e,t){for(var n=0;n<t.length;n++)if(e==t[n])return!0;return!1}},this.is_whitespace=function(e){for(;0<e.length;e++)if(!this.Utils.in_array(e.charAt(0),this.Utils.whitespace))return!1;return!0},this.traverse_whitespace=function(){var e=\"\";if(e=this.input.charAt(this.pos),this.Utils.in_array(e,this.Utils.whitespace)){for(this.newlines=0;this.Utils.in_array(e,this.Utils.whitespace);)f&&\"\\n\"==e&&this.newlines<=h&&(this.newlines+=1),this.pos++,e=this.input.charAt(this.pos);return!0}return!1},this.space_or_wrap=function(e){this.line_char_count>=this.wrap_line_length?(this.print_newline(!1,e),this.print_indentation(e)):(this.line_char_count++,e.push(\" \"))},this.get_content=function(){for(var e=\"\",t=[];\"<\"!=this.input.charAt(this.pos);){if(this.pos>=this.input.length)return t.length?t.join(\"\"):[\"\",\"TK_EOF\"];if(this.traverse_whitespace())this.space_or_wrap(t);else{if(u){var n=this.input.substr(this.pos,3);if(\"{{#\"==n||\"{{/\"==n)break;if(\"{{!\"==n)return[this.get_tag(),\"TK_TAG_HANDLEBARS_COMMENT\"];if(\"{{\"==this.input.substr(this.pos,2)&&\"{{else}}\"==this.get_tag(!0))break}e=this.input.charAt(this.pos),this.pos++,this.line_char_count++,t.push(e)}}return t.length?t.join(\"\"):\"\"},this.get_contents_to=function(e){if(this.pos==this.input.length)return[\"\",\"TK_EOF\"];var t=\"\",n=new RegExp(\"</\"+e+\"\\\\s*>\",\"igm\");n.lastIndex=this.pos;var o=n.exec(this.input),r=o?o.index:this.input.length;return this.pos<r&&(t=this.input.substring(this.pos,r),this.pos=r),t},this.record_tag=function(e){this.tags[e+\"count\"]?(this.tags[e+\"count\"]++,this.tags[e+this.tags[e+\"count\"]]=this.indent_level):(this.tags[e+\"count\"]=1,this.tags[e+this.tags[e+\"count\"]]=this.indent_level),this.tags[e+this.tags[e+\"count\"]+\"parent\"]=this.tags.parent,this.tags.parent=e+this.tags[e+\"count\"]},this.retrieve_tag=function(e){if(this.tags[e+\"count\"]){for(var t=this.tags.parent;t&&e+this.tags[e+\"count\"]!=t;)t=this.tags[t+\"parent\"];t&&(this.indent_level=this.tags[e+this.tags[e+\"count\"]],this.tags.parent=this.tags[t+\"parent\"]),delete this.tags[e+this.tags[e+\"count\"]+\"parent\"],delete this.tags[e+this.tags[e+\"count\"]],1==this.tags[e+\"count\"]?delete this.tags[e+\"count\"]:this.tags[e+\"count\"]--}},this.indent_to_tag=function(e){if(this.tags[e+\"count\"]){for(var t=this.tags.parent;t&&e+this.tags[e+\"count\"]!=t;)t=this.tags[t+\"parent\"];t&&(this.indent_level=this.tags[e+this.tags[e+\"count\"]])}},this.get_tag=function(e){var t,n,o=\"\",r=[],i=\"\",a=!1,l=!0,d=this.pos,c=this.line_char_count;e=void 0!==e&&e;do{if(this.pos>=this.input.length)return e&&(this.pos=d,this.line_char_count=c),r.length?r.join(\"\"):[\"\",\"TK_EOF\"];if(o=this.input.charAt(this.pos),this.pos++,this.Utils.in_array(o,this.Utils.whitespace))a=!0;else{if(\"'\"!=o&&'\"'!=o||(o+=this.get_unformatted(o),a=!0),\"=\"==o&&(a=!1),r.length&&\"=\"!=r[r.length-1]&&\">\"!=o&&a){if(this.space_or_wrap(r),a=!1,!l&&\"force\"==g&&\"/\"!=o){this.print_newline(!0,r),this.print_indentation(r);for(var f=0;f<m;f++)r.push(s)}for(var h=0;h<r.length;h++)if(\" \"==r[h]){l=!1;break}}if(u&&\"<\"==n&&o+this.input.charAt(this.pos)==\"{{\"&&(o+=this.get_unformatted(\"}}\"),r.length&&\" \"!=r[r.length-1]&&\"<\"!=r[r.length-1]&&(o=\" \"+o),a=!0),\"<\"!=o||n||(t=this.pos-1,n=\"<\"),u&&!n&&r.length>=2&&\"{\"==r[r.length-1]&&\"{\"==r[r.length-2]&&(t=\"#\"==o||\"/\"==o||\"!\"==o?this.pos-3:this.pos-2,n=\"{\"),this.line_char_count++,r.push(o),r[1]&&(\"!\"==r[1]||\"?\"==r[1]||\"%\"==r[1])){r=[this.get_comment(t)];break}if(u&&r[1]&&\"{\"==r[1]&&r[2]&&\"!\"==r[2]){r=[this.get_comment(t)];break}if(u&&\"{\"==n&&r.length>2&&\"}\"==r[r.length-2]&&\"}\"==r[r.length-1])break}}while(\">\"!=o);var v,b,E=r.join(\"\");v=-1!=E.indexOf(\" \")?E.indexOf(\" \"):\"{\"==E[0]?E.indexOf(\"}\"):E.indexOf(\">\"),b=\"<\"!=E[0]&&u?\"#\"==E[2]?3:2:1;var y=E.substring(b,v).toLowerCase();return\"/\"==E.charAt(E.length-2)||this.Utils.in_array(y,this.Utils.single_token)?e||(this.tag_type=\"SINGLE\"):u&&\"{\"==E[0]&&\"else\"==y?e||(this.indent_to_tag(\"if\"),this.tag_type=\"HANDLEBARS_ELSE\",this.indent_content=!0,this.traverse_whitespace()):this.is_unformatted(y,p)?(i=this.get_unformatted(\"</\"+y+\">\",E),r.push(i),this.pos,this.tag_type=\"SINGLE\"):\"script\"==y&&(-1==E.search(\"type\")||E.search(\"type\")>-1&&E.search(/\\b(text|application)\\/(x-)?(javascript|ecmascript|jscript|livescript)/)>-1)?e||(this.record_tag(y),this.tag_type=\"SCRIPT\"):\"style\"==y&&(-1==E.search(\"type\")||E.search(\"type\")>-1&&E.search(\"text/css\")>-1)?e||(this.record_tag(y),this.tag_type=\"STYLE\"):\"!\"==y.charAt(0)?e||(this.tag_type=\"SINGLE\",this.traverse_whitespace()):e||(\"/\"==y.charAt(0)?(this.retrieve_tag(y.substring(1)),this.tag_type=\"END\"):(this.record_tag(y),\"html\"!=y.toLowerCase()&&(this.indent_content=!0),this.tag_type=\"START\"),this.traverse_whitespace()&&this.space_or_wrap(r),this.Utils.in_array(y,this.Utils.extra_liners)&&(this.print_newline(!1,this.output),this.output.length&&\"\\n\"!=this.output[this.output.length-2]&&this.print_newline(!0,this.output))),e&&(this.pos=d,this.line_char_count=c),r.join(\"\")},this.get_comment=function(e){var t=\"\",n=\">\",o=!1;this.pos=e;var r=this.input.charAt(this.pos);for(this.pos++;this.pos<=this.input.length&&((t+=r)[t.length-1]!=n[n.length-1]||-1==t.indexOf(n));)!o&&t.length<10&&(0===t.indexOf(\"<![if\")?(n=\"<![endif]>\",o=!0):0===t.indexOf(\"<![cdata[\")?(n=\"]]>\",o=!0):0===t.indexOf(\"<![\")?(n=\"]>\",o=!0):0===t.indexOf(\"\\x3c!--\")?(n=\"--\\x3e\",o=!0):0===t.indexOf(\"{{!\")?(n=\"}}\",o=!0):0===t.indexOf(\"<?\")?(n=\"?>\",o=!0):0===t.indexOf(\"<%\")&&(n=\"%>\",o=!0)),r=this.input.charAt(this.pos),this.pos++;return t},this.get_unformatted=function(e,t){if(t&&-1!=t.toLowerCase().indexOf(e))return\"\";var n=\"\",o=\"\",r=0,i=!0;do{if(this.pos>=this.input.length)return o;if(n=this.input.charAt(this.pos),this.pos++,this.Utils.in_array(n,this.Utils.whitespace)){if(!i){this.line_char_count--;continue}if(\"\\n\"==n||\"\\r\"==n){o+=\"\\n\",this.line_char_count=0;continue}}o+=n,this.line_char_count++,i=!0,u&&\"{\"==n&&o.length&&\"{\"==o[o.length-2]&&(r=(o+=this.get_unformatted(\"}}\")).length)}while(-1==o.toLowerCase().indexOf(e,r));return o},this.get_token=function(){var e;if(\"TK_TAG_SCRIPT\"==this.last_token||\"TK_TAG_STYLE\"==this.last_token){var t=this.last_token.substr(7);return\"string\"!=typeof(e=this.get_contents_to(t))?e:[e,\"TK_\"+t]}return\"CONTENT\"==this.current_mode?\"string\"!=typeof(e=this.get_content())?e:[e,\"TK_CONTENT\"]:\"TAG\"==this.current_mode?\"string\"!=typeof(e=this.get_tag())?e:[e,\"TK_TAG_\"+this.tag_type]:void 0},this.get_full_indent=function(e){return(e=this.indent_level+e||0)<1?\"\":new Array(e+1).join(this.indent_string)},this.is_unformatted=function(e,t){if(!this.Utils.in_array(e,t))return!1;if(\"a\"!=e.toLowerCase()||!this.Utils.in_array(\"a\",t))return!0;var n=(this.get_tag(!0)||\"\").match(/^\\s*<\\s*\\/?([a-z]*)\\s*[^>]*>\\s*$/);return!(n&&!this.Utils.in_array(n,t))},this.printer=function(e,t,o,r,i){this.input=e||\"\",this.output=[],this.indent_character=t,this.indent_string=\"\",this.indent_size=o,this.brace_style=i,this.indent_level=0,this.wrap_line_length=r,this.line_char_count=0;for(var a=0;a<this.indent_size;a++)this.indent_string+=this.indent_character;this.print_newline=function(e,t){this.line_char_count=0,t&&t.length&&(e||\"\\n\"!=t[t.length-1])&&(\"\\n\"!=t[t.length-1]&&(t[t.length-1]=n(t[t.length-1])),t.push(\"\\n\"))},this.print_indentation=function(e){for(var t=0;t<this.indent_level;t++)e.push(this.indent_string),this.line_char_count+=this.indent_string.length},this.print_token=function(e){this.is_whitespace(e)&&!this.output.length||((e||\"\"!==e)&&this.output.length&&\"\\n\"==this.output[this.output.length-1]&&(this.print_indentation(this.output),e=e.replace(/^\\s+/g,\"\")),this.print_token_raw(e))},this.print_token_raw=function(e){this.newlines>0&&(e=n(e)),e&&\"\"!==e&&(e.length>1&&\"\\n\"==e[e.length-1]?(this.output.push(e.slice(0,-1)),this.print_newline(!1,this.output)):this.output.push(e));for(var t=0;t<this.newlines;t++)this.print_newline(t>0,this.output);this.newlines=0},this.indent=function(){this.indent_level++},this.unindent=function(){this.indent_level>0&&this.indent_level--}},this},o.printer(e,s,a,d,c);;){var E=o.get_token();if(o.token_text=E[0],o.token_type=E[1],\"TK_EOF\"==o.token_type)break;switch(o.token_type){case\"TK_TAG_START\":o.print_newline(!1,o.output),o.print_token(o.token_text),o.indent_content&&(o.indent(),o.indent_content=!1),o.current_mode=\"CONTENT\";break;case\"TK_TAG_STYLE\":case\"TK_TAG_SCRIPT\":o.print_newline(!1,o.output),o.print_token(o.token_text),o.current_mode=\"CONTENT\";break;case\"TK_TAG_END\":if(\"TK_CONTENT\"==o.last_token&&\"\"===o.last_text){var y=o.token_text.match(/\\w+/)[0],w=null;o.output.length&&(w=o.output[o.output.length-1].match(/(?:<|{{#)\\/?\\s*(\\w+)/)),(null==w||w[1]!=y&&!o.Utils.in_array(w[1],p))&&o.print_newline(!1,o.output)}o.print_token(o.token_text),o.current_mode=\"CONTENT\";break;case\"TK_TAG_SINGLE\":var S=o.token_text.match(/^\\s*<([a-z-]+)/i);S&&o.Utils.in_array(S[1],p)||o.print_newline(!1,o.output),o.print_token(o.token_text),o.current_mode=\"CONTENT\";break;case\"TK_TAG_HANDLEBARS_ELSE\":o.print_token(o.token_text),o.indent_content&&(o.indent(),o.indent_content=!1),o.current_mode=\"CONTENT\";break;case\"TK_TAG_HANDLEBARS_COMMENT\":case\"TK_CONTENT\":o.print_token(o.token_text),o.current_mode=\"TAG\";break;case\"TK_STYLE\":case\"TK_SCRIPT\":if(\"\"!==o.token_text){o.print_newline(!1,o.output);var C,_=o.token_text,T=1;\"TK_SCRIPT\"==o.token_type?C=l:\"TK_STYLE\"==o.token_type&&(C=i),\"keep\"==t.indent_scripts?T=0:\"separate\"==t.indent_scripts&&(T=-o.indent_level);var k=o.get_full_indent(T);if(C)_=C(_.replace(/^\\s*/,k),t);else{var A=_.match(/^\\s*/)[0].match(/[^\\n\\r]*$/)[0].split(o.indent_string).length-1,x=o.get_full_indent(T-A);_=_.replace(/^\\s*/,k).replace(/\\r\\n|\\r|\\n/g,\"\\n\"+x).replace(/\\s+$/,\"\")}_&&(o.print_token_raw(_),o.print_newline(!0,o.output))}o.current_mode=\"TAG\";break;default:\"\"!==o.token_text&&o.print_token(o.token_text)}o.last_token=o.token_type,o.last_text=o.token_text}var N=o.output.join(\"\").replace(/[\\r\\n\\t ]+$/,\"\");return v&&(N+=\"\\n\"),N}}},function(e){if(e.FroalaEditor.PLUGINS.mediaManager=function(t){function n(e){var n=t.$el.closest('[data-control=\"richeditor\"]'),o=e.substring(e.lastIndexOf(\"/\")+1);n.richEditor(\"insertVideo\",e,o),t.popups.hide(\"video.insert\")}function o(e){var n=t.$el.closest('[data-control=\"richeditor\"]'),o=e.substring(e.lastIndexOf(\"/\")+1);n.richEditor(\"insertAudio\",e,o),t.popups.hide(\"audio.insert\")}function r(){}return{_init:function(){t.events.on(\"destroy\",r,!0),t.events.on(\"video.linkError\",n),t.events.on(\"audio.linkError\",o)},insertFile:function(){t.selection.save(),new e.oc.mediaManager.popup({alias:\"ocmediamanager\",cropAndInsertButton:!1,onInsert:function(n){if(t.events.focus(!0),t.selection.restore(),n.length)if(n.length>1)e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_file_single_insert\"));else{for(var o,r=\"\"===(s=t.selection.text()).trim(),i=0,a=n.length;i<a;i++){var s=r?n[i].title:s;o=n[i].publicUrl}t.html.insert('<a href=\"'+o+'\" id=\"fr-inserted-file\" class=\"fr-file\">'+s+\"</a>\"),t.$el.find(\"#fr-inserted-file\").removeAttr(\"id\"),this.hide(),t.undo.saveStep()}else e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_file_empty_insert\"))}})},insertImage:function(){t.selection.save();var n=t.image.get();new e.oc.mediaManager.popup({alias:\"ocmediamanager\",cropAndInsertButton:!0,onInsert:function(o){if(t.events.focus(!0),t.selection.restore(),o.length){for(var r=0,i=0,a=(o=o.reverse()).length;i<a;i++)\"image\"===o[i].documentType?(t.image.insert(o[i].publicUrl,!1,{},n),1==++r&&(n=null)):e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_image_invalid_insert\",'The file \"'+o[i].title+'\" is not an image.'));0!==r&&(this.hide(),t.undo.saveStep())}else e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_image_empty_insert\"))}})},insertVideo:function(n){t.selection.save(),new e.oc.mediaManager.popup({alias:\"ocmediamanager\",cropAndInsertButton:!1,onInsert:function(o){if(t.events.focus(!0),t.selection.restore(),o.length)if(o.length>1)e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_file_single_insert\"));else{var r=o[0];if(\"video\"===r.documentType){if(n)n(r.publicUrl,r.title);else t.$el.closest('[data-control=\"richeditor\"]').richEditor(\"insertVideo\",r.publicUrl,r.title);this.hide()}else e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_video_invalid_insert\",'The file \"'+r.title+'\" is not a video.'))}else e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_video_empty_insert\"))}})},insertAudio:function(n){t.selection.save(),new e.oc.mediaManager.popup({alias:\"ocmediamanager\",cropAndInsertButton:!1,onInsert:function(o){if(t.events.focus(!0),t.selection.restore(),o.length)if(o.length>1)e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_file_single_insert\"));else{var r=o[0];if(\"audio\"===r.documentType){if(n)n(r.publicUrl,r.title);else t.$el.closest('[data-control=\"richeditor\"]').richEditor(\"insertAudio\",r.publicUrl,r.title);this.hide()}else e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_audio_invalid_insert\",'The file \"'+r.title+'\" is not an audio file.'))}else e.oc.alert(e.oc.lang.get(\"mediamanager.invalid_audio_empty_insert\"))}})}}},!(e.FE.PLUGINS.link&&e.FE.PLUGINS.file&&e.FE.PLUGINS.image&&e.FE.PLUGINS.video))throw new Error(\"Media manager plugin requires link, file, image and video plugin.\");e.FE.DEFAULTS.imageInsertButtons.push(\"mmImageManager\"),e.FE.RegisterCommand(\"mmImageManager\",{title:\"Browse\",undo:!1,focus:!1,callback:function(){this.mediaManager.insertImage()},plugin:\"mediaManager\"}),e.FE.DefineIcon(\"mmImageManager\",{NAME:\"folder-o\"}),e.FE.DEFAULTS.fileInsertButtons.push(\"mmFileManager\"),e.FE.RegisterCommand(\"mmFileManager\",{title:\"Browse\",undo:!1,focus:!1,callback:function(){this.mediaManager.insertFile()},plugin:\"mediaManager\"}),e.FE.DefineIcon(\"mmFileManager\",{NAME:\"folder-o\"}),e.FE.DEFAULTS.videoInsertButtons.push(\"mmVideoManager\"),e.FE.RegisterCommand(\"mmVideoManager\",{title:\"Browse\",undo:!1,focus:!1,callback:function(){this.mediaManager.insertVideo()},plugin:\"mediaManager\"}),e.FE.DefineIcon(\"mmVideoManager\",{NAME:\"folder-o\"}),e.FE.DEFAULTS.audioInsertButtons.push(\"mmAudioManager\"),e.FE.RegisterCommand(\"mmAudioManager\",{title:\"Browse\",undo:!1,focus:!1,callback:function(){this.mediaManager.insertAudio()},plugin:\"mediaManager\"}),e.FE.DefineIcon(\"mmAudioManager\",{NAME:\"folder-o\"})}(jQuery),function(e){e.FroalaEditor.PLUGINS.pageLinks=function(t){var n;function o(o){t.image&&n&&t.image.set(n),t.link.insert(o.link,e('input.fr-link-attr[name=\"text\"]',t.popups.get(\"link.insert\")).val()||o.params.title)}function r(){t.selection.save()}return{_init:function(){},insertLink:function(){n=t.image?t.image.get():null,oc.pageLookup.popup({alias:\"ocpagelookup\",value:e('input.fr-link-attr[name=\"href\"]',t.popups.get(\"link.insert\")).val(),onInsert:o,onShown:r,singleMode:!0})}}},e.FE.DefineIcon(\"linkPageRoute\",{NAME:\"folder-o\"}),e.FE.RegisterCommand(\"linkPageRoute\",{title:\"Choose Link\",undo:!1,focus:!1,callback:function(){this.pageLinks.insertLink()},plugin:\"pageLinks\"}),e.FE.DefineIcon(\"insertPageLink\",{NAME:\"link\"}),e.FE.RegisterShortcut(e.FE.KEYCODE.K,\"insertPageLink\",null,\"K\"),e.FE.RegisterCommand(\"insertPageLink\",{title:\"Insert Link\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"link.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"link.insert\")):this.link.showInsertPopup()},plugin:\"link\"}),e.FE.RegisterInsertPageLinkCommand=function(){e.FE.DEFAULTS.linkInsertButtons=[\"linkBack\",\"|\",\"linkPageRoute\"],e.FE.RegisterCommand(\"insertPageLink\",{title:\"Insert Link\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.link.showInsertPopup(),this.popups.hide(\"link.insert\"),this.pageLinks.insertLink()},plugin:\"pageLinks\"})},oc.pageLookup&&e.FE.RegisterInsertPageLinkCommand()}(jQuery),function(e){e.FroalaEditor.PLUGINS.figures=function(t){function n(n){var o=e(\"<div />\").append(n.clone()).remove().html();t.events.focus(!0),t.selection.restore(),t.html.insert(o),t.html.cleanEmptyTags(),e(\"figure\",t.$el).each((function(){var t=e(this),n=t.parent(\"p\"),o=t.next(\"p\");n.length&&t.insertAfter(n),o.length&&!e(\"> *:not(br)\",o).length&&0==o.text().trim().length&&o.remove()})),t.undo.saveStep(),r()}function o(){var t=e('<figure contenteditable=\"false\" tabindex=\"0\" data-ui-block=\"true\">&nbsp;</figure>');return t.get(0).contentEditable=!1,t}function r(){e(\"[data-video], [data-audio]\",t.$el).each((function(){e(this).addClass(\"fr-draggable\").attr({\"data-ui-block\":\"true\",draggable:\"true\",tabindex:\"0\"}).html(\"&nbsp;\"),this.contentEditable=!1}))}function i(e,n){void 0!==e.attr(\"data-ui-block\")&&0==n.text().trim().length&&(n.remove(),a(e),t.undo.saveStep())}function a(e){return void 0!==e.attr(\"data-ui-block\")&&(e.focus(),t.selection.clear(),!0)}function s(e,n){e.length&&(a(e)||(n?(t.selection.setAtStart(e.get(0)),t.selection.restore()):(t.selection.setAtEnd(e.get(0)),t.selection.restore())))}function l(n){if(function(n){if(\"ArrowDown\"===n.key||\"ArrowUp\"===n.key||\"Backspace\"===n.key||\"Delete\"===n.key){var o=e(t.selection.element());if(o.is(\"br\")&&(o=o.parent()),o.length)switch(n.key){case\"ArrowUp\":a(o.prev());break;case\"ArrowDown\":a(o.next());break;case\"Delete\":i(o.next(),o);break;case\"Backspace\":i(o.prev(),o)}}}(n),n.isDefaultPrevented())return!1}function d(n){if(n.target&&void 0!==e(n.target).attr(\"data-ui-block\")&&function(n,o){if(\"ArrowDown\"===n.key||\"ArrowUp\"===n.key||\"Enter\"===n.key||\"Backspace\"===n.key||\"Delete\"===n.key){switch(n.key){case\"ArrowDown\":s(e(o).next(),!0);break;case\"ArrowUp\":s(e(o).prev(),!1);break;case\"Enter\":e(\"<p><br/></p>\").insertAfter(o),t.selection.setAfter(o),t.selection.restore(),t.undo.saveStep();break;case\"Backspace\":case\"Delete\":var r=e(o).next(),i=!0;0==r.length&&(r=e(o).prev(),i=!1),s(r,i),e(o).remove(),t.undo.saveStep()}n.preventDefault()}}(n,n.target),n.isDefaultPrevented())return!1}function c(t){var n=e(\"<div>\"+t+\"</div>\");return n.find(\"[data-video], [data-audio]\").each((function(){e(this).removeAttr(\"contenteditable data-ui-block tabindex draggable\").removeClass(\"fr-draggable fr-dragging\")})),n.html()}function p(){t.$el.off(\"keydown\",\"figure\",d)}return{_init:function(){t.events.on(\"initialized\",r),t.events.on(\"html.set\",r),t.events.on(\"html.get\",c),t.events.on(\"keydown\",l),t.events.on(\"destroy\",p,!0),t.$el.on(\"keydown\",\"figure\",d)},insert:n,insertVideo:function(e,t){var r=o();r.attr(\"data-video\",e),r.attr(\"data-label\",t),n(r)},insertAudio:function(e,t){var r=o();r.attr(\"data-audio\",e),r.attr(\"data-label\",t),n(r)}}}}(jQuery),function(e){if(e.FroalaEditor.PLUGINS.snippets=function(t){function n(e){setTimeout((function(){t.events.trigger(\"contentChanged\"),e.target.focus()}),0)}function o(t){t.target&&32==t.which&&void 0!==e(t.target).attr(\"data-snippet\")&&e.oc.inspector.manager.createInspector(t.target)}function r(){setTimeout((function(){t.codeView&&t.codeView.isActive()||e(\"[data-snippet]\",t.$el).each((function(){var t=e(this);t.get(0).dataset.control=\"snippet\",t.html(\"&nbsp;\")}))}),0)}function i(t){if(!t.includes(\"figure\")||!t.includes(\"data-inspector-handler-alias\"))return t;var n=e(\"<div>\"+t+\"</div>\");return e(\"[data-snippet]\",n).each((function(){var t=e(this);oc.importControl(\"snippet\").cleanSnippet(t.get(0)),t.removeAttr(\"contenteditable data-control tabindex data-ui-block draggable\"),t.removeClass(\"fr-draggable fr-dragging\"),t.attr(\"class\")||t.removeAttr(\"class\")})),n.html()}function a(t){if(void 0!==t.attr(\"data-snippet\")){var n=t.parent(\"p\");n.length&&(t.insertAfter(n),e(\"> *:not(br)\",n).length||0!=n.text().trim().length||n.remove())}}function s(){t.$el.off(\"hidden.oc.inspector\",\"[data-snippet]\",n)}return{_init:function(){t.events.on(\"html.set\",r),t.events.on(\"html.get\",i),t.events.on(\"keydown\",o),t.events.on(\"element.dropped\",a),t.$el.on(\"hidden.oc.inspector\",\"[data-snippet]\",n),t.events.on(\"destroy\",s,!0)},insertSnippet:function(){oc.snippetLookup?(t.selection.save(),oc.snippetLookup.popup({onInsert:function(n){t.events.focus(!0),t.selection.restore();var o=e(oc.snippetLookup.generateSnippetHtml(n));o.attr(\"data-control\",\"snippet\"),t.figures.insert(o),this.hide()}})):console.error(\"Unable to insert snippet: Missing snippet lookup widget\")}}},e.FE.DefineIcon(\"insertSnippet\",{NAME:\"newspaper-o\"}),!e.FE.PLUGINS.figures)throw new Error(\"Snippets plugin requires figures plugin.\");e.FE.RegisterInsertSnippetCommand=function(){e.FE.RegisterCommand(\"insertSnippet\",{title:\"Insert Snippet\",undo:!1,focus:!1,callback:function(){this.snippets.insertSnippet()},plugin:\"snippets\"})},oc.snippetLookup&&e.FE.RegisterInsertSnippetCommand()}(jQuery);\n"
  },
  {
    "path": "modules/backend/formwidgets/richeditor/assets/js/richeditor.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\nimport RichEditorFormWidget from '../../../../vuecomponents/richeditordocumentconnector/assets/js/formwidget.js';\n\n/*\n * Rich text editor form field control (WYSIWYG)\n *\n * Data attributes:\n * - data-control=\"richeditor\" - enables the rich editor plugin\n *\n * JavaScript API:\n * oc.fetchControl(element, 'richeditor')\n *\n * Dependencies:\n * - Froala Editor (froala_editor.js)\n */\nregisterControl('richeditor', class extends ControlBase {\n    init() {\n        this.$el = $(this.element);\n        this.$textarea = this.$el.find('textarea[data-richeditor-textarea]:first');\n        this.$form = this.$el.closest('form');\n        this.editor = null;\n        this.vueWidget = null;\n\n        // Apply defaults to config\n        this.config = Object.assign({\n            linksHandler: null,\n            stylesheet: null,\n            fullpage: false,\n            editorLang: 'en',\n            editorOptions: null,\n            useMediaManager: false,\n            toolbarButtons: null,\n            allowEmptyTags: null,\n            allowTags: null,\n            allowAttrs: null,\n            noWrapTags: null,\n            removeTags: null,\n            lineBreakerTags: null,\n            imageStyles: null,\n            linkStyles: null,\n            paragraphStyles: null,\n            inlineStyles: null,\n            paragraphFormat: null,\n            tableStyles: null,\n            tableCellStyles: null,\n            useLineBreaks: null,\n            aceVendorPath: '/',\n            readOnly: false\n        }, this.config);\n\n        // Textarea must have an identifier\n        if (!this.$textarea.attr('id')) {\n            this.$textarea.attr('id', 'element-' + Math.random().toString(36).substring(7));\n        }\n\n        if (this.config.editorOptions.constructor !== {}.constructor) {\n            this.config.editorOptions = {};\n        }\n    }\n\n    connect() {\n        if (!this.config.legacyMode) {\n            this.initVueConnector();\n            return;\n        }\n\n        // Initialize Froala editor\n        this.initFroala();\n    }\n\n    disconnect() {\n        this.unregisterHandlers();\n\n        if (this.vueWidget) {\n            this.vueWidget.remove();\n            this.vueWidget = null;\n        }\n        else if (this.$textarea) {\n            this.$textarea.froalaEditor('destroy');\n        }\n\n        this.$el = null;\n        this.$textarea = null;\n        this.$form = null;\n        this.editor = null;\n    }\n\n    initFroala() {\n        var froalaOptions = {\n            ...this.config.editorOptions,\n            editorClass: 'control-richeditor',\n            language: this.config.editorLang,\n            fullPage: this.config.fullpage,\n            aceEditorVendorPath: this.config.aceVendorPath,\n            toolbarSticky: false\n        };\n\n        if (this.config.useLineBreaks) {\n            froalaOptions.enter = $.FroalaEditor.ENTER_BR;\n        }\n\n        if (this.config.toolbarButtons) {\n            froalaOptions.toolbarButtons = this.config.toolbarButtons.split(',');\n        }\n        else {\n            froalaOptions.toolbarButtons = oc.richEditorButtons;\n        }\n\n        froalaOptions.imageStyles = this.config.imageStyles\n            ? this.config.imageStyles\n            : {\n                'oc-img-rounded': 'Rounded',\n                'oc-img-bordered': 'Bordered'\n              };\n\n        froalaOptions.linkStyles = this.config.linkStyles\n            ? this.config.linkStyles\n            : {\n                'oc-link-green': 'Green',\n                'oc-link-strong': 'Thick'\n              };\n\n        froalaOptions.paragraphFormat = this.config.paragraphFormat\n            ? this.config.paragraphFormat\n            : {\n                'N': 'Normal',\n                'H1': 'Heading 1',\n                'H2': 'Heading 2',\n                'H3': 'Heading 3',\n                'H4': 'Heading 4',\n                'PRE': 'Code'\n            }\n\n        froalaOptions.paragraphStyles = this.config.paragraphStyles\n            ? this.config.paragraphStyles\n            : {\n                'oc-text-gray': 'Gray',\n                'oc-text-bordered': 'Bordered',\n                'oc-text-spaced': 'Spaced',\n                'oc-text-uppercase': 'Uppercase'\n              };\n\n        froalaOptions.inlineStyles = this.config.inlineStyles\n            ? this.config.inlineStyles\n            : {\n                'oc-class-code': 'Code',\n                'oc-class-highlighted': 'Highlighted',\n                'oc-class-transparency': 'Transparent'\n              };\n\n        froalaOptions.tableStyles = this.config.tableStyles\n            ? this.config.tableStyles\n            : {\n                'oc-dashed-borders': 'Dashed Borders',\n                'oc-alternate-rows': 'Alternate Rows'\n              };\n\n        froalaOptions.tableCellStyles = this.config.tableCellStyles\n            ? this.config.tableCellStyles\n            : {\n                'oc-cell-highlighted': 'Highlighted',\n                'oc-cell-thick-border': 'Thick'\n              };\n\n        froalaOptions.toolbarButtonsMD = froalaOptions.toolbarButtons;\n        froalaOptions.toolbarButtonsSM = froalaOptions.toolbarButtons;\n        froalaOptions.toolbarButtonsXS = froalaOptions.toolbarButtons;\n\n        if (this.config.allowEmptyTags) {\n            froalaOptions.htmlAllowedEmptyTags = this.config.allowEmptyTags.split(/[\\s,]+/);\n        }\n\n        if (this.config.allowTags) {\n            froalaOptions.htmlAllowedTags = this.config.allowTags.split(/[\\s,]+/);\n        }\n\n        if (this.config.allowAttrs) {\n            froalaOptions.htmlAllowedAttrs = $.extend($.FroalaEditor.DEFAULTS.htmlAllowedAttrs, this.config.allowAttrs.split(/[\\s,]+/));\n        }\n\n        if (this.config.noWrapTags) {\n            froalaOptions.htmlDoNotWrapTags = this.config.noWrapTags.split(/[\\s,]+/);\n        }\n\n        if (this.config.removeTags) {\n            froalaOptions.htmlRemoveTags = this.config.removeTags.split(/[\\s,]+/);\n        }\n\n        froalaOptions.lineBreakerTags = this.config.lineBreakerTags\n            ? this.config.lineBreakerTags.split(/[\\s,]+/)\n            : ['figure, table, hr, iframe, form, dl'];\n\n        froalaOptions.shortcutsEnabled = ['show', 'bold', 'italic', 'underline', 'indent', 'outdent', 'undo', 'redo'];\n\n        // File upload\n        froalaOptions.imageUploadURL = froalaOptions.fileUploadURL = window.location;\n        froalaOptions.imageUploadParam = froalaOptions.fileUploadParam = 'file_data';\n        froalaOptions.imageUploadParams = froalaOptions.fileUploadParams = {\n            X_OCTOBER_MEDIA_MANAGER_QUICK_UPLOAD: 1,\n            _token: $('meta[name=\"csrf-token\"]').attr('content')\n        };\n\n        var placeholder = this.$textarea.attr('placeholder');\n        froalaOptions.placeholderText = placeholder ? placeholder : '';\n\n        froalaOptions.height = this.$el.hasClass('stretch') ? Infinity : $('.height-indicator', this.$el).height();\n\n        if (!this.config.useMediaManager) {\n            delete $.FroalaEditor.PLUGINS.mediaManager;\n        }\n\n        this.$textarea.on('froalaEditor.initialized', this.proxy(this.build));\n        this.$textarea.on('froalaEditor.contentChanged', this.proxy(this.onChange));\n        this.$textarea.on('froalaEditor.html.get', this.proxy(this.onSyncContent));\n        this.$textarea.on('froalaEditor.html.set', this.proxy(this.onSetContent));\n        this.$textarea.on('froalaEditor.image.uploaded', this.proxy(this.onImageUploaded));\n        this.$form.on('oc.beforeRequest', this.proxy(this.onFormBeforeRequest));\n\n        this.$textarea.froalaEditor(froalaOptions);\n\n        this.editor = this.$textarea.data('froala.editor');\n\n        if (this.config.readOnly) {\n            this.editor.edit.off();\n        }\n\n        this.$el.on('keydown', '.fr-view figure', this.proxy(this.onFigureKeydown));\n    }\n\n    unregisterHandlers() {\n        if (this.$el) {\n            this.$el.off('keydown', '.fr-view figure', this.proxy(this.onFigureKeydown));\n        }\n\n        if (this.$textarea) {\n            this.$textarea.off('froalaEditor.initialized', this.proxy(this.build));\n            this.$textarea.off('froalaEditor.contentChanged', this.proxy(this.onChange));\n            this.$textarea.off('froalaEditor.html.get', this.proxy(this.onSyncContent));\n            this.$textarea.off('froalaEditor.html.set', this.proxy(this.onSetContent));\n            this.$textarea.off('froalaEditor.image.uploaded', this.proxy(this.onImageUploaded));\n        }\n\n        if (this.$form) {\n            this.$form.off('oc.beforeRequest', this.proxy(this.onFormBeforeRequest));\n        }\n\n        $(window).off('resize', this.proxy(this.updateLayout));\n        $(window).off('oc.updateUi', this.proxy(this.updateLayout));\n    }\n\n    build(event, editor) {\n        this.updateLayout();\n\n        $(window).on('resize', this.proxy(this.updateLayout));\n        $(window).on('oc.updateUi', this.proxy(this.updateLayout));\n\n        // Bind the keydown listener here to ensure it gets handled before the Froala handlers\n        editor.events.on('keydown', this.proxy(this.onKeydown), true);\n\n        this.$textarea.trigger('init.oc.richeditor', [this]);\n    }\n\n    isCodeViewActive() {\n        return this.editor && this.editor.codeView && this.editor.codeView.isActive();\n    }\n\n    getElement() {\n        return this.$el;\n    }\n\n    getEditor() {\n        if (!this.config.legacyMode) {\n            return this.vueWidget.getEditor();\n        }\n\n        return this.editor;\n    }\n\n    getTextarea() {\n        return this.$textarea;\n    }\n\n    getContent() {\n        return this.getEditor().html.get();\n    }\n\n    setContent(html) {\n        if (!this.config.legacyMode) {\n            this.vueWidget.setContent(html);\n            return;\n        }\n\n        this.getEditor().html.set(html);\n    }\n\n    syncContent() {\n        this.editor.events.trigger('contentChanged');\n    }\n\n    updateLayout() {\n        var $editor = $('.fr-wrapper', this.$el),\n            $codeEditor = $('.fr-code', this.$el),\n            $toolbar = $('.fr-toolbar', this.$el),\n            $box = $('.fr-box', this.$el);\n\n        if (!$editor.length) {\n            return;\n        }\n\n        if (this.$el.hasClass('stretch') && !$box.hasClass('fr-fullscreen')) {\n            var height = $toolbar.outerHeight(true);\n            $editor.css('top', height + 1);\n            $codeEditor.css('top', height);\n        }\n        else {\n            $editor.css('top', '');\n            $codeEditor.css('top', '');\n        }\n    }\n\n    insertHtml(html) {\n        this.getEditor().html.insert(html);\n        this.getEditor().selection.restore();\n    }\n\n    insertElement($el) {\n        this.insertHtml($('<div />').append($el.clone()).remove().html());\n    }\n\n    /*\n     * Inserts non-editable block (used for snippets, audio and video)\n     */\n    insertUiBlock($node) {\n        this.$textarea.froalaEditor('figures.insert', $node);\n    }\n\n    insertVideo(url, title) {\n        this.$textarea.froalaEditor('figures.insertVideo', url, title);\n    }\n\n    insertAudio(url, title) {\n        this.$textarea.froalaEditor('figures.insertAudio', url, title);\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    onSetContent(ev, editor) {\n        this.$textarea.trigger('setContent.oc.richeditor', [this]);\n    }\n\n    onSyncContent(ev, editor, html) {\n        // Beautify HTML.\n        if (editor.codeBeautifier) {\n            html = editor.codeBeautifier.run(html, editor.opts.codeBeautifierOptions);\n        }\n\n        var container = {\n            html: html\n        };\n\n        this.$textarea.trigger('syncContent.oc.richeditor', [this, container]);\n\n        return container.html;\n    }\n\n    onFocus() {\n        this.$el.addClass('editor-focus');\n    }\n\n    onBlur() {\n        this.$el.removeClass('editor-focus');\n    }\n\n    onFigureKeydown(ev) {\n        this.$textarea.trigger('figureKeydown.oc.richeditor', [ev, this]);\n    }\n\n    onKeydown(ev, editor, keyEv) {\n        this.$textarea.trigger('keydown.oc.richeditor', [keyEv, this]);\n\n        if (ev.isDefaultPrevented()) {\n            return false;\n        }\n    }\n\n    onChange(ev) {\n        this.$form.trigger('change');\n    }\n\n    onImageUploaded(ev, editor, response) {\n        try {\n            var data = JSON.parse(response);\n            if (data.error) {\n                oc.flashMsg({ text: data.error, class: 'error' });\n                editor.image.hideProgressBar(true);\n                editor.image.remove();\n                editor.edit.on();\n                return false;\n            }\n        }\n        catch (e) {}\n    }\n\n    /*\n     * Instantly synchronizes HTML content.\n     * The onSyncContent() method (above) is involved into this call,\n     * so the resulting HTML is (optionally) beautified.\n     */\n    onFormBeforeRequest(ev) {\n        if (!this.editor || !this.editor.html) {\n            return;\n        }\n\n        if (this.isCodeViewActive()) {\n            this.editor.html.set(this.editor.codeView.get());\n        }\n\n        this.$textarea.val(this.editor.html.get());\n    }\n\n    //\n    // Vue mode\n    //\n\n    initVueConnector() {\n        this.vueWidget = new RichEditorFormWidget(this.$textarea.get(0), this.config, () => {\n            this.$form.trigger('change');\n        });\n    }\n});\n\n// BUTTON DEFINITIONS\n// =================\n\noc.richEditorRegisterButton = $.FE.RegisterCommand;\n\noc.richEditorButtons = [\n    'paragraphFormat',\n    'align',\n    'bold',\n    'italic',\n    'underline',\n    '|',\n    'formatOL',\n    'formatUL',\n    '|',\n    'insertSnippet',\n    'insertTable',\n    'insertPageLink',\n    'insertImage',\n    'insertHR',\n    'html'\n];\n\n// @deprecated backwards compatibility\nif ($.oc === undefined) {\n    $.oc = {};\n}\n\n$.oc.richEditorButtons = oc.richEditorButtons;\n"
  },
  {
    "path": "modules/backend/formwidgets/richeditor/assets/less/base-styles.less",
    "content": "// Base styles\n@import \"../vendor/froala/less/style.less\";\n\n.fr-view {\n    @import \"../../../../models/editorsetting/default_styles.less\";\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/richeditor/assets/less/richeditor.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n@richeditor-toolbar-size: 30px;\n@richeditor-zindex: 600;\n@richeditor-gutter: 20px;\n\n// color-richeditor-toolbar: #dddddd;\n// color-richeditor-toolbar-btn-color: #404040;\n// color-richeditor-toolbar-btn-bg-hover: #999999;\n// color-richeditor-toolbar-btn-bg-active: #404040;\n// color-richeditor-toolbar-btn-color-hover: #ffffff;\n\n.fr-wrapper {\n    ::selection {\n        background: @input-selection-bg;\n        color: @input-selection-color;\n    }\n}\n\n//\n// Rich Editor\n//\n\n.field-flush .field-richeditor {\n    &,\n    &.editor-focus {\n        border: none;\n    }\n}\n\n.richeditor-set-height(@size) {\n    .fr-wrapper {\n        height: @size;\n        .fr-view {\n            min-height: @size;\n        }\n    }\n\n    .height-indicator {\n        height: @size;\n        display: none;\n    }\n}\n\n.field-richeditor {\n    border: 1px solid @input-border;\n    box-shadow: @input-box-shadow;\n    border-radius: @input-border-radius;\n    transition: @input-transition;\n\n    // Prevents an ugly flash during the time the editor loads\n    > textarea {\n        display: none;\n    }\n\n    &.editor-focus {\n        border-color: @input-border-focus;\n    }\n\n    &.size-tiny {\n        .richeditor-set-height(@size-tiny);\n    }\n    &.size-small {\n        .richeditor-set-height(@size-small);\n    }\n    &.size-large {\n        .richeditor-set-height(@size-large);\n    }\n    &.size-huge {\n        .richeditor-set-height(@size-huge);\n    }\n    &.size-giant {\n        .richeditor-set-height(@size-giant);\n    }\n}\n\n.fr-tooltip {\n    z-index: 9997 !important;\n}\n\n.fr-popup {\n    z-index: 9995 !important;\n}\n\n.fr-separator.fr-hs {\n    width: 100%;\n}\n\n//\n// Stretch\n//\n\n.field-richeditor.stretch {\n    .fr-box:not(.fr-fullscreen) {\n        display: block;\n        position: relative;\n        height: 100% !important;\n        width: 100% !important;\n        border-radius: 0 !important;\n        overflow: hidden;\n\n        .fr-toolbar {\n            border-radius: 0 !important;\n            border-top-color: transparent;\n        }\n\n        .fr-wrapper {\n            width: 100%;\n            left: 0;\n            top: 0;\n            bottom: 0;\n            position: absolute;\n            height: auto !important;\n            .fr-view {\n                min-height: 0;\n            }\n        }\n\n        .fr-placeholder {\n            top: 20px;\n            left: 20px;\n        }\n    }\n}\n\n//\n// For the Vue mode styling see\n// backend/vuecomponents/richeditordocumentconnector/assets/less/_formwidget.less\n//\n\n//\n// Placeholders and snippets\n//\n\n.control-richeditor {\n    figure[data-video],\n    figure[data-audio] {\n        display: inline-block;\n        width: 100%;\n        margin: 0 0 15px 0;\n        padding: 10px 10px 10px 13px;\n        border: 1px dashed #bdc3c7;\n        background: @input-bg;\n        position: relative;\n        color: @heading-color;\n        font-size: 15px;\n        font-weight: 600;\n        line-height: 150%;\n        font-weight: normal;\n        cursor: pointer;\n\n        &:focus,\n        &.inspector-open {\n            border-color: @brand-primary;\n            border-style: solid;\n            outline: none;\n        }\n\n        &:after {\n            content: attr(data-label);\n        }\n\n        &:before {\n            position: static;\n            margin-right: 8px;\n        }\n    }\n\n    figure[data-video] {\n        &:before {\n            .icon(@icon-video-camera);\n        }\n    }\n\n    figure[data-audio] {\n        &:before {\n            .icon(@icon-volume-up);\n        }\n    }\n}\n\n//\n// Quick Insert\n//\n\n.fr-quick-insert {\n    a.fr-floating-btn {\n        color: @btn-text;\n        text-decoration: none;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/richeditor/partials/_richeditor.php",
    "content": "<!-- Rich Editor -->\n<?php if ($this->previewMode): ?>\n    <div class=\"form-control\"><?= $value ?></div>\n<?php else: ?>\n    <div\n        id=\"<?= $this->getId() ?>\"\n        class=\"field-richeditor size-<?= $size ?> <?= $stretch?'layout-relative stretch':'' ?> <?= $legacyMode ? '' : 'vue-mode' ?>\"\n        <?php if ($fullPage): ?>data-fullpage=\"true\"<?php endif ?>\n        <?php if ($useLineBreaks): ?>data-use-line-breaks=\"true\"<?php endif ?>\n        <?php if ($readOnly): ?>data-read-only=\"true\"<?php endif ?>\n        <?php if ($useMediaManager): ?>data-use-media-manager=\"true\"<?php endif ?>\n        <?php if ($editorLang): ?>data-editor-lang=\"<?= $editorLang ?>\"<?php endif ?>\n        <?php if ($toolbarButtons): ?>data-toolbar-buttons=\"<?= implode(',', $toolbarButtons) ?>\"\n        <?php elseif ($globalToolbarButtons): ?>data-toolbar-buttons=\"<?= str_replace(\" \", \"\", $globalToolbarButtons) ?>\"<?php endif ?>\n        <?php if ($allowEmptyTags): ?>data-allow-empty-tags=\"<?= e($allowEmptyTags) ?>\"<?php endif ?>\n        <?php if ($allowTags): ?>data-allow-tags=\"<?= e($allowTags) ?>\"<?php endif ?>\n        <?php if ($allowAttrs): ?>data-allow-attrs=\"<?= e($allowAttrs) ?>\"<?php endif ?>\n        <?php if ($noWrapTags): ?>data-no-wrap-tags=\"<?= e($noWrapTags) ?>\"<?php endif ?>\n        <?php if ($removeTags): ?>data-remove-tags=\"<?= e($removeTags) ?>\"<?php endif ?>\n        <?php if ($lineBreakerTags): ?>data-line-breaker-tags=\"<?= e($lineBreakerTags) ?>\"<?php endif ?>\n        <?php if (isset($imageStyles)): ?>data-image-styles=\"<?= e(json_encode($imageStyles)) ?>\"<?php endif ?>\n        <?php if (isset($linkStyles)): ?>data-link-styles=\"<?= e(json_encode($linkStyles)) ?>\"<?php endif ?>\n        <?php if (isset($paragraphFormats)): ?>data-paragraph-format=\"<?= e(json_encode($paragraphFormats)) ?>\"<?php endif ?>\n        <?php if (isset($paragraphStyles)): ?>data-paragraph-styles=\"<?= e(json_encode($paragraphStyles)) ?>\"<?php endif ?>\n        <?php if (isset($inlineStyles)): ?>data-inline-styles=\"<?= e(json_encode($inlineStyles)) ?>\"<?php endif ?>\n        <?php if (isset($tableStyles)): ?>data-table-styles=\"<?= e(json_encode($tableStyles)) ?>\"<?php endif ?>\n        <?php if (isset($tableCellStyles)): ?>data-table-cell-styles=\"<?= e(json_encode($tableCellStyles)) ?>\"<?php endif ?>\n        <?php if (isset($editorOptions)): ?>data-editor-options=\"<?= e(json_encode($editorOptions)) ?>\"<?php endif ?>\n        <?php if ($showMargins): ?>data-show-margins=\"true\"<?php endif ?>\n        <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n        data-lang-fullscreen=\"<?= e(trans('backend::lang.form.toggle_full_screen')) ?>\"\n        data-legacy-mode=\"<?= $legacyMode ? 1 : 0 ?>\"\n        data-ace-vendor-path=\"<?= Url::asset('/modules/backend/formwidgets/codeeditor/assets/vendor/ace') ?>\"\n        data-control=\"richeditor\">\n            <?php if (!$legacyMode): ?><div class=\"editor-write layout-cell\"><?php endif ?>\n                <textarea\n                    data-richeditor-textarea\n                    placeholder=\"<?= e(__($field->placeholder)) ?>\"\n                    name=\"<?= $name ?>\"\n                    id=\"<?= $this->getId('textarea') ?>\"\n                    style=\"display: none\"\n                ><?= e($value) ?></textarea>\n                <div class=\"height-indicator\"></div>\n            <?php if (!$legacyMode): ?></div><?php endif ?>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/sensitive/assets/css/sensitive.css",
    "content": "div[data-control=sensitive] a[data-copy],div[data-control=sensitive] a[data-toggle]{border:1px solid var(--bs-border-color);border-left:0;box-shadow:none}\n"
  },
  {
    "path": "modules/backend/formwidgets/sensitive/assets/js/sensitive.js",
    "content": "/*\n * Sensitive field widget plugin\n *\n * Data attributes:\n * - data-control=\"sensitive\" - enables the plugin on an element\n *\n * JavaScript API:\n * $('div#someElement').sensitive({...})\n */\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype;\n\n    var Sensitive = function(element, options) {\n        this.$el = $(element);\n        this.options = options;\n        this.clean = !!this.$el.data('sensitive-clean');\n        this.hidden = true;\n\n        this.$input = $('[data-sensitive-input]:first', this.$el);\n        this.$toggle = $('[data-sensitive-toggle]:first', this.$el);\n        this.$icon = $('[data-sensitive-icon]:first', this.$el);\n        this.$loader = $('[data-sensitive-loader]:first', this.$el);\n        this.$copy = $('[data-sensitive-copy]:first', this.$el);\n        this.$facade = $('[data-sensitive-facade]:first', this.$el);\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        Base.call(this);\n        this.init();\n    }\n\n    Sensitive.DEFAULTS = {\n        readOnly: false,\n        disabled: false,\n        revealHandler: null,\n        hideOnTabChange: false,\n        displayMode: 'text'\n    }\n\n    Sensitive.prototype = Object.create(BaseProto);\n    Sensitive.prototype.constructor = Sensitive;\n\n    Sensitive.prototype.init = function() {\n        this.$input.on('keydown', this.proxy(this.onInput));\n        this.$toggle.on('click', this.proxy(this.onToggle));\n\n        if (this.options.hideOnTabChange) {\n            document.addEventListener('visibilitychange', this.proxy(this.onTabChange));\n        }\n\n        if (this.$copy.length) {\n            this.$copy.on('click', this.proxy(this.onCopy));\n        }\n\n        this.$el.one('dispose-control', this.proxy(this.dispose));\n    }\n\n    Sensitive.prototype.dispose = function () {\n        this.$input.off('keydown', this.proxy(this.onInput));\n        this.$toggle.off('click', this.proxy(this.onToggle));\n\n        if (this.options.hideOnTabChange) {\n            document.removeEventListener('visibilitychange', this.proxy(this.onTabChange));\n        }\n\n        if (this.$copy.length) {\n            this.$copy.off('click', this.proxy(this.onCopy));\n        }\n\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n        this.$el.removeData('oc.sensitive');\n\n        this.$input = null;\n        this.$toggle = null;\n        this.$icon = null;\n        this.$loader = null;\n        this.$el = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    Sensitive.prototype.onInput = function() {\n        if (this.clean) {\n            this.clean = false;\n            this.$input.val('');\n        }\n\n        return true\n    }\n\n    Sensitive.prototype.onToggle = function() {\n        if (this.$input.val() !== '' && this.clean) {\n            this.reveal();\n        }\n        else {\n            this.toggleVisibility();\n        }\n\n        return true;\n    }\n\n    Sensitive.prototype.onTabChange = function() {\n        if (document.hidden && !this.hidden) {\n            this.toggleVisibility();\n        }\n    }\n\n    Sensitive.prototype.onCopy = function() {\n        var self = this,\n            deferred = $.Deferred(),\n            isHidden = this.hidden,\n            isDisabled = this.$input.is(':disabled');\n\n        deferred.then(function () {\n            if (isDisabled) {\n                self.$input.attr('disabled', false);\n            }\n            if (self.hidden) {\n                self.toggleVisibility();\n            }\n\n            self.$input.focus();\n            self.$input.select();\n\n            try {\n                document.execCommand('copy');\n            }\n            catch (err) {\n            }\n\n            self.$input.blur();\n\n            if (isDisabled) {\n                self.$input.attr('disabled', true);\n            }\n\n            if (isHidden) {\n                self.toggleVisibility();\n            }\n        })\n\n        if (this.$input.val() !== '' && this.clean) {\n            this.reveal(deferred);\n        }\n        else {\n            deferred.resolve();\n        }\n    }\n\n    Sensitive.prototype.toggleVisibility = function() {\n\n        if (this.options.displayMode === 'textarea') {\n            this.$facade.toggle();\n            this.$input.toggle();\n        }\n        else {\n            if (this.hidden) {\n                this.$input.attr('type', 'text');\n            }\n            else {\n                this.$input.attr('type', 'password');\n            }\n        }\n\n        this.$icon.toggleClass('icon-eye icon-eye-slash');\n\n        this.hidden = !this.hidden;\n    }\n\n    Sensitive.prototype.reveal = function(deferred) {\n        var self = this;\n        this.$icon.css({\n            visibility: 'hidden'\n        });\n        this.$loader.removeClass('oc-hide');\n\n        this.$input.request(this.options.revealHandler, {\n            success: function (data) {\n                self.$input.val(data.value);\n                self.clean = false;\n\n                self.$icon.css({\n                    visibility: 'visible'\n                });\n                self.$loader.addClass('oc-hide');\n\n                self.toggleVisibility();\n\n                if (deferred) {\n                    deferred.resolve();\n                }\n            }\n        });\n    }\n\n    var old = $.fn.sensitive;\n\n    $.fn.sensitive = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result;\n        this.each(function () {\n            var $this   = $(this);\n            var data    = $this.data('oc.sensitive');\n            var options = $.extend({}, Sensitive.DEFAULTS, $this.data(), typeof option == 'object' && option);\n            if (!data) $this.data('oc.sensitive', (data = new Sensitive(this, options)));\n            if (typeof option == 'string') result = data[option].apply(data, args);\n            if (typeof result != 'undefined') return false;\n        })\n\n        return result ? result : this;\n    }\n\n    $.fn.sensitive.noConflict = function () {\n        $.fn.sensitive = old;\n        return this;\n    }\n\n    $(document).render(function () {\n        $('[data-control=\"sensitive\"]').sensitive();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/formwidgets/sensitive/assets/less/sensitive.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\ndiv[data-control=\"sensitive\"] {\n    a[data-toggle],\n    a[data-copy] {\n        box-shadow: none;\n        border: 1px solid @input-group-addon-border-color;\n        border-left: 0;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/sensitive/partials/_sensitive.php",
    "content": "<?php if ($displayMode === 'textarea'): ?>\n    <?= $this->makePartial('sensitive_textarea') ?>\n<?php else: ?>\n    <?= $this->makePartial('sensitive_input') ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/formwidgets/sensitive/partials/_sensitive_input.php",
    "content": "<div\n    data-control=\"sensitive\"\n    data-sensitive-clean=\"true\"\n    data-reveal-handler=\"<?= $this->getEventHandler('onShowValue') ?>\"\n    <?php if ($hideOnTabChange): ?>data-hide-on-tab-change=\"true\"<?php endif ?>\n>\n    <div class=\"loading-indicator-container size-form-field\">\n        <div class=\"input-group\">\n            <input\n                type=\"password\"\n                name=\"<?= $this->getFieldName() ?>\"\n                id=\"<?= $this->getId() ?>\"\n                value=\"<?= $hasValue ? $hiddenPlaceholder : '' ?>\"\n                placeholder=\"<?= e(__($this->formField->placeholder)) ?>\"\n                class=\"form-control\"\n                autocomplete=\"off\"\n                data-sensitive-input\n                <?= $this->previewMode ? 'disabled' : '' ?>\n            />\n            <?php if ($allowCopy): ?>\n                <a\n                    href=\"javascript:;\"\n                    class=\"input-group-addon btn btn-secondary\"\n                    data-sensitive-copy\n                >\n                    <i class=\"icon-copy\"></i>\n                </a>\n            <?php endif ?>\n            <a\n                href=\"javascript:;\"\n                class=\"input-group-addon btn btn-secondary\"\n                data-sensitive-toggle\n            >\n                <i class=\"icon-eye\" data-sensitive-icon></i>\n            </a>\n        </div>\n        <div class=\"loading-indicator oc-hide\" data-sensitive-loader>\n            <span class=\"p-4\"></span>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/sensitive/partials/_sensitive_textarea.php",
    "content": "<div\n    data-control=\"sensitive\"\n    data-sensitive-clean=\"true\"\n    data-display-mode=\"<?= e($displayMode) ?>\"\n    data-reveal-handler=\"<?= $this->getEventHandler('onShowValue') ?>\"\n    <?php if ($hideOnTabChange): ?>data-hide-on-tab-change=\"true\"<?php endif ?>\n>\n    <div class=\"loading-indicator-container size-form-field\">\n\n        <textarea\n            class=\"form-control field-textarea size-<?= $this->formField->size ?>\"\n            <?php if ($this->previewMode): ?>disabled=\"disabled\"<?php endif ?>\n            <?= !$hasValue ? 'style=\"display: none\"' : '' ?>\n            data-sensitive-facade\n        ><?= str_repeat('&bull;', strlen($hiddenPlaceholder)) ?></textarea>\n\n        <textarea\n            name=\"<?= $this->getFieldName() ?>\"\n            id=\"<?= $this->getId() ?>\"\n            placeholder=\"<?= e(__($this->formField->placeholder)) ?>\"\n            class=\"form-control field-textarea size-<?= $this->formField->size ?>\"\n            <?php if ($this->previewMode): ?>disabled=\"disabled\"<?php endif ?>\n            autocomplete=\"off\"\n            <?= $hasValue ? 'style=\"display: none\"' : '' ?>\n            data-sensitive-input\n        ><?= $hasValue ? $hiddenPlaceholder : '' ?></textarea>\n\n        <div class=\"mt-2\">\n            <?php if ($allowCopy): ?>\n                <a\n                    href=\"javascript:;\"\n                    class=\"input-group-addon btn btn-secondary\"\n                    data-sensitive-copy>\n                    <i class=\"icon-copy\"></i> <?= __(\"Copy to Clipboard\") ?>\n                </a>\n            <?php endif ?>\n            <a\n                href=\"javascript:;\"\n                class=\"input-group-addon btn btn-secondary\"\n                data-sensitive-toggle>\n                <i class=\"icon-eye\" data-sensitive-icon></i> <?= __(\"Reveal Contents\") ?>\n            </a>\n        </div>\n        <div class=\"loading-indicator oc-hide\" data-sensitive-loader>\n            <span class=\"p-4\"></span>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/formwidgets/taglist/HasRelationStore.php",
    "content": "<?php namespace Backend\\FormWidgets\\TagList;\n\nuse Illuminate\\Support\\Collection;\nuse October\\Rain\\Database\\Relations\\Relation as RelationBase;\nuse SystemException;\n\n/**\n * HasRelationStore contains logic for related tag items\n */\ntrait HasRelationStore\n{\n    /**\n     * getLoadValueFromRelation\n     */\n    protected function getLoadValueFromRelation($names)\n    {\n        // Take value from options\n        if ($this->useOptions) {\n            if (!$names) {\n                return [];\n            }\n\n            $result = (new Collection($this->formField->options()))\n                ->reject(function($value, $key) use ($names) {\n                    return !in_array($key, $names);\n                })\n                ->all();\n        }\n        // Take existing relationship\n        else {\n            $keyName = $this->useKey\n                ? $this->getRelationModel()->getQualifiedKeyName()\n                : $this->nameFrom;\n\n            $result = $this->getRelationObject()->pluck($keyName)->all();\n        }\n\n        // Default value\n        if (!$result && !$this->model->exists) {\n            return $names;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getFieldOptionsForRelation\n     */\n    protected function getFieldOptionsForRelation()\n    {\n        return RelationBase::noConstraints(function () {\n            $query = $this->getRelationObject()->newQuery();\n\n            // Even though \"no constraints\" is applied, belongsToMany constrains the query\n            // by joining its pivot table. Remove all joins from the query.\n            $query->getQuery()->getQuery()->joins = [];\n\n            $keyName = $this->getRelationModel()->getQualifiedKeyName();\n\n            return $query->pluck($this->nameFrom, $keyName)->all();\n        });\n    }\n\n    /**\n     * processSaveForRelation\n     */\n    protected function processSaveForRelation($values)\n    {\n        if (!$values) {\n            return $values;\n        }\n\n        $relationModel = $this->getRelationModel();\n\n        // Options from form field\n        if ($this->useOptions) {\n            $existingTags = (new Collection($this->formField->options()))\n                ->reject(function($value, $key) use ($values) {\n                    return !in_array($value, $values);\n                })\n                ->all()\n            ;\n        }\n        // Options from model, useKey uses IDs directly\n        elseif ($this->useKey) {\n            return $values;\n        }\n        // Options from model, lookup by name\n        else {\n            $existingTags = $relationModel\n                ->whereIn($this->nameFrom, $values)\n                ->pluck($this->nameFrom, $relationModel->getKeyName())\n                ->all()\n            ;\n        }\n\n        // Allow custom tags (only applicable when useKey is false)\n        if ($this->customTags) {\n            $newTags = array_diff($values, $existingTags);\n\n            // Cannot create new tags when read-only options are supplied\n            if ($newTags && $this->useOptions) {\n                throw new SystemException(\"[{$this->valueFrom}] Options are read-only so new tags cannot be created. Try setting customTags: false in the field configuration.\");\n            }\n\n            foreach ($newTags as $newTag) {\n                $newModel = $relationModel->newInstance();\n                $newModel->{$this->nameFrom} = $newTag;\n                $newModel->save(['force' => true]);\n\n                $existingTags[$newModel->getKey()] = $newTag;\n            }\n        }\n\n        return array_keys($existingTags);\n    }\n\n    /**\n     * getRelationQuery\n     */\n    protected function getRelationQuery()\n    {\n        $query = $this->getRelationModel()->newQuery();\n\n        $this->getRelationObject()->addDefinedConstraintsToQuery($query);\n\n        return $query;\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/taglist/HasStringStore.php",
    "content": "<?php namespace Backend\\FormWidgets\\TagList;\n\n/**\n * HasStringStore contains logic for related tag items\n */\ntrait HasStringStore\n{\n    /**\n     * getLoadValueFromString\n     */\n    protected function getLoadValueFromString($value)\n    {\n        if (empty($value)) {\n            return [];\n        }\n\n        return explode($this->getSeparatorCharacter(), $value);\n    }\n\n    /**\n     * processSaveForString\n     */\n    protected function processSaveForString($value)\n    {\n        if (is_array($value)) {\n            return implode($this->getSeparatorCharacter(), $value);\n        }\n\n        return $value;\n    }\n\n    /**\n     * getCustomSeparators returns character(s) to use for separating keywords.\n     * @return mixed\n     */\n    protected function getCustomSeparators()\n    {\n        if (!$this->customTags) {\n            return false;\n        }\n\n        $separators = [];\n\n        $separators[] = $this->getSeparatorCharacter();\n\n        return implode('|', $separators);\n    }\n\n    /**\n     * getSeparatorCharacter convert the character word to the singular character.\n     */\n    protected function getSeparatorCharacter(): string\n    {\n        switch (strtolower($this->separator)) {\n            case 'comma':\n                return ',';\n            case 'space':\n                return ' ';\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/formwidgets/taglist/partials/_taglist.php",
    "content": "<?php\n    $selectedValues = is_array($selectedValues) ? $selectedValues : [];\n    $flatOptions = $this->getFieldOptions();\n    $fieldOptions = $field->asOptionsDefinition($flatOptions);\n    if (!$useKey) {\n        $fieldOptions = $field->asOptionsDefinition($this->getKeylessOptions($selectedValues, $fieldOptions));\n    }\n    $previewOptions = $this->getPreviewOptions($selectedValues, $fieldOptions);\n?>\n<?php $renderTaglistOptionFunc = function($option, $value, $depth = 0) use (&$renderTaglistOptionFunc, $field, $selectedValues, $useKey) { ?>\n    <?php\n        $indentStr = str_repeat('&nbsp;&nbsp;&nbsp;', $depth);\n        $isSelected = $useKey ? in_array($value, $selectedValues) : in_array($option->label, $selectedValues);\n    ?>\n    <option\n        <?= $isSelected ? 'selected=\"selected\"' : '' ?>\n        <?php if ($option->color): ?>\n            data-status=\"<?= e($option->color) ?>\"\n        <?php elseif ($option->image): ?>\n            data-image=\"<?= e($option->image) ?>\"\n        <?php elseif ($option->icon): ?>\n            data-icon=\"<?= e($option->icon) ?>\"\n        <?php endif ?>\n        value=\"<?= e($useKey ? $value : $option->label) ?>\"\n    ><?= $indentStr ?><?= $field->getDisplayValue($option->label) ?></option>\n\n    <?php if ($option->children): ?>\n        <?php foreach ($option->children as $value => $option): ?>\n            <?php $renderTaglistOptionFunc($option, $value, $depth + 1) ?>\n        <?php endforeach ?>\n    <?php endif ?>\n<?php }; ?>\n\n<!-- Tag List -->\n<?php if ($this->previewMode || $field->readOnly || $field->disabled): ?>\n    <ul class=\"form-control taglist--preview\" <?= $field->readOnly || $field->disabled ? 'disabled=\"disabled\"' : '' ?>>\n        <?php foreach ($previewOptions as $option): ?>\n            <li class=\"taglist__item\"><?= $field->getDisplayValue($option->label) ?></li>\n        <?php endforeach ?>\n    </ul>\n    <?php if ($field->readOnly): ?>\n        <?php if (is_array($field->value)): ?>\n            <?php foreach ($previewOptions as $option): ?>\n                <input\n                    type=\"hidden\"\n                    name=\"<?= $field->getName() ?>[]\"\n                    value=\"<?= $option->value ?>\" />\n            <?php endforeach ?>\n        <?php else: ?>\n            <input\n                type=\"hidden\"\n                name=\"<?= $field->getName() ?>\"\n                value=\"<?= $field->value ?>\" />\n        <?php endif ?>\n    <?php endif ?>\n<?php else: ?>\n    <input\n        type=\"hidden\"\n        name=\"<?= $field->getName() ?>\"\n        value=\"\" />\n    <select\n        id=\"<?= $field->getId() ?>\"\n        name=\"<?= $field->getName() ?>[]\"\n        class=\"form-control custom-select <?= !count($fieldOptions) ? 'select-no-dropdown' : '' ?> select-hide-selected\"\n        <?= $customSeparators ? 'data-token-separators=\"'.$customSeparators.'\"' : '' ?>\n        <?= $placeholder ? 'data-placeholder=\"'.e(__($placeholder)).'\"' : '' ?>\n        <?= $maxItems ? 'data-maximum-selection-length=\"'.$maxItems.'\"' : '' ?>\n        multiple\n        <?= $field->getAttributes() ?>>\n        <?php foreach ($fieldOptions as $key => $option): ?>\n            <?php $renderTaglistOptionFunc($option, $key) ?>\n        <?php endforeach ?>\n    </select>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/helpers/Backend.php",
    "content": "<?php namespace Backend\\Helpers;\n\nuse Url;\nuse Html;\nuse Config;\nuse System;\nuse Request;\nuse Redirect;\nuse October\\Rain\\Router\\Helper as RouterHelper;\nuse System\\Helpers\\DateTime as DateTimeHelper;\nuse Backend\\Classes\\Skin;\nuse Exception;\n\n/**\n * Backend Helper\n *\n * @package october\\backend\n * @see \\Backend\\Facades\\Backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Backend\n{\n    /**\n     * assetVersion returns a unique identifier to cache bust backend assets. A salted\n     * hash is used to prevent guessing of the current build number\n     */\n    public function assetVersion(): string\n    {\n        return hash('crc32', filemtime(base_path('vendor/autoload.php')) . System::VERSION);\n    }\n\n    /**\n     * uri returns the backend URI segment\n     */\n    public function uri(): string\n    {\n        return ltrim(Config::get('backend.uri', Config::get('cms.backendUri', 'backend')), '/');\n    }\n\n    /**\n     * url returns a URL in context of the backend\n     */\n    public function url($path = null, $parameters = [], $secure = null)\n    {\n        return Url::to($this->uri() . '/' . $path, $parameters, $secure);\n    }\n\n    /**\n     * baseUrl returns the base backend URL\n     */\n    public function baseUrl($path = null)\n    {\n        $backendUri = $this->uri();\n        $baseUrl = Request::getBaseUrl();\n\n        if ($path === null) {\n            return $baseUrl . '/' . $backendUri;\n        }\n\n        $path = RouterHelper::normalizeUrl($path);\n        return $baseUrl . '/' . $backendUri . $path;\n    }\n\n    /**\n     * skinAsset returns a URL in context of the active Backend skin\n     */\n    public function skinAsset($path = null)\n    {\n        $skinPath = Skin::getActive()->getPath($path, true);\n        return Url::asset($skinPath);\n    }\n\n    /**\n     * redirect creates a new redirect response to a given backend path\n     */\n    public function redirect($path, $status = 302, $headers = [], $secure = null)\n    {\n        return Redirect::to($this->uri() . '/' . $path, $status, $headers, $secure);\n    }\n\n    /**\n     * redirectGuest creates a new backend redirect response, placing current URL in the session\n     */\n    public function redirectGuest($path, $status = 302, $headers = [], $secure = null)\n    {\n        return Redirect::guest($this->uri() . '/' . $path, $status, $headers, $secure);\n    }\n\n    /**\n     * redirectIntended creates a new redirect response to the previously intended backend location\n     */\n    public function redirectIntended($path, $status = 302, $headers = [], $secure = null)\n    {\n        return Redirect::intended($this->uri() . '/' . $path, $status, $headers, $secure);\n    }\n\n    /**\n     * makeCarbon converts mixed inputs to a Carbon object and sets the backend timezone\n     * @return \\Carbon\\Carbon\n     */\n    public static function makeCarbon($value, $throwException = true)\n    {\n        $carbon = DateTimeHelper::makeCarbon($value, $throwException);\n\n        try {\n            // Find user preference\n            $carbon->setTimezone(\\Backend\\Models\\Preference::get('timezone'));\n        }\n        catch (Exception $ex) {\n            // Use system default\n            $carbon->setTimezone(Config::get('backend.timezone', Config::get('app.timezone')));\n        }\n\n        return $carbon;\n    }\n\n    /**\n     * date is a proxy method for dateTime() using \"date\" format alias\n     * @return string\n     */\n    public function date($dateTime, $options = [])\n    {\n        return $this->dateTime($dateTime, $options + ['formatAlias' => 'date']);\n    }\n\n    /**\n     * dateTime returns the HTML for a date formatted in the backend\n     *\n     * Supported for formatAlias:\n     *   time             -> 6:28 AM\n     *   timeLong         -> 6:28:01 AM\n     *   date             -> 04/23/2016\n     *   dateMin          -> 4/23/2016\n     *   dateLong         -> April 23, 2016\n     *   dateLongMin      -> Apr 23, 2016\n     *   dateTime         -> April 23, 2016 6:28 AM\n     *   dateTimeMin      -> Apr 23, 2016 6:28 AM\n     *   dateTimeLong     -> Saturday, April 23, 2016 6:28 AM\n     *   dateTimeLongMin  -> Sat, Apr 23, 2016 6:29 AM\n     * @return string\n     */\n    public function dateTime($dateTime, $options = [])\n    {\n        extract(array_merge([\n            'defaultValue' => '',\n            'format' => null,\n            'formatAlias' => null,\n            'jsFormat' => null,\n            'timeTense' => false,\n            'timeSince' => false,\n            'useTimezone' => true,\n            // @deprecated API\n            'ignoreTimezone' => false,\n        ], $options));\n\n        // @deprecated API\n        if ($ignoreTimezone) {\n            $useTimezone = false;\n        }\n\n        if (!$dateTime) {\n            return '';\n        }\n\n        $carbon = DateTimeHelper::makeCarbon($dateTime);\n\n        if ($jsFormat !== null) {\n            $format = $jsFormat;\n        }\n        else {\n            $format = DateTimeHelper::momentFormat($format);\n        }\n\n        $attributes = [\n            'datetime' => $carbon,\n            'data-datetime-control' => 1,\n        ];\n\n        if (!$useTimezone) {\n            $attributes['data-ignore-timezone'] = true;\n        }\n\n        if ($timeTense) {\n            $attributes['data-time-tense'] = 1;\n        }\n        elseif ($timeSince) {\n            $attributes['data-time-since'] = 1;\n        }\n        elseif ($format) {\n            $attributes['data-format'] = $format;\n        }\n        elseif ($formatAlias) {\n            $attributes['data-format-alias'] = $formatAlias;\n        }\n\n        return '<time'.Html::attributes($attributes).'>'.e($defaultValue).'</time>'.PHP_EOL;\n    }\n\n    /**\n     * sizeToPixels converts a size name, e.g. large, small to a pixel size\n     */\n    public function sizeToPixels($size): int\n    {\n        if (is_numeric($size)) {\n            return (int) $size;\n        }\n\n        switch ($size) {\n            case 'tiny':\n                return 400;\n            case 'small':\n                return 500;\n            case 'medium':\n                return 600;\n            case 'large':\n                return 750;\n            case 'huge':\n                return 950;\n            case 'giant':\n                return 1200;\n        }\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "modules/backend/helpers/Inspector.php",
    "content": "<?php namespace Backend\\Helpers;\n\nuse Arr;\n\n/**\n * Inspector Helper\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Inspector\n{\n    /**\n     * getPropertyConfig converts PHP inspector to JS inspector configuration,\n     * including translations.\n     */\n    public static function getPropertyConfig(array $properties): array\n    {\n        $result = [];\n\n        foreach ($properties as $name => $params) {\n            $property = [\n                'property' => $name,\n                'title' => array_get($params, 'title', $name),\n                'type' => array_get($params, 'type', 'string'),\n                'showExternalParam' => array_get($params, 'showExternalParam', true)\n            ] + $params;\n\n            // Convert nested properties\n            $toNestProperty = ['itemProperties', 'properties', 'columns'];\n            foreach ($property as $name => &$value) {\n                if (!in_array($name, $toNestProperty) || !is_array($value)) {\n                    continue;\n                }\n\n                if (Arr::isList($value)) {\n                    continue;\n                }\n\n                $newValue = [];\n                $propName = $name === 'columns' ? 'column' : 'property';\n                foreach ($value as $_name => $_props) {\n                    $newValue[] = [\n                        $propName => $_name\n                    ] + $_props;\n                }\n                $value = $newValue;\n            }\n\n            $result[] = $property;\n        }\n\n        return self::localizePropertyConfig($result);\n    }\n\n    /**\n     * localizePropertyConfig translates human values\n     */\n    protected static function localizePropertyConfig(array $properties): array\n    {\n        // Translate these arrays\n        $toTranslateArr = [\n            'options'\n        ];\n\n        // Translate these scalars\n        $toTranslateStr = [\n            'title',\n            'description',\n            'placeholder',\n            'options',\n            'group',\n            'tab',\n            'message',\n            'validationMessage'\n        ];\n\n        // This is effectively array_walk_recursive except we can check if the value is an array\n        // and apply special logic, whereas the recursive function ignores array values\n        array_walk($properties, function(&$value, $key) use ($toTranslateStr, $toTranslateArr) {\n            if (is_array($value) && in_array($key, $toTranslateArr)) {\n                foreach ($value as &$_value) {\n                    if (is_string($_value) && strlen($_value) > 1) {\n                        $_value = __($_value);\n                    }\n                }\n            }\n            elseif (is_array($value)) {\n                $value = self::localizePropertyConfig($value);\n            }\n            elseif (is_string($value) && strlen($value) > 1 && in_array($key, $toTranslateStr)) {\n                $value = __($value);\n            }\n        });\n\n        return $properties;\n    }\n}\n"
  },
  {
    "path": "modules/backend/lang/ar/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'page' => [\n    'access_denied' => [\n      'label' => 'ممنوع الوصول',\n      'help' => 'ليس لديك الصلاحيات لعرض هذه الصفحة.',\n      'cms_link' => 'عودة للوحة الإدارة',\n    ],\n  ],\n  'account' => [\n    'sign_out' => 'تسجيل خروج',\n    'login_placeholder' => 'اسم المستخدم',\n    'password_placeholder' => 'كلمة المرور',\n  ],\n  'dashboard' => [\n    'menu_label' => 'لوحة الإدارة',\n    'status' => [\n      'widget_title_default' => 'حالة النظام',\n      'update_available' => '{0} تحديث متاح!|{1} تحديث متاح!|[2,Inf] تحديثات متاحة!',\n      'updates_pending' => 'تحديثات في الانتظار',\n      'updates_nil' => 'النظام محدث',\n      'updates_link' => 'تحديث',\n      'warnings_pending' => 'بعض الملاحظات تحتاج تأكيدك',\n      'warnings_nil' => 'ليس هناك تحذيرات',\n      'warnings_link' => 'عرض',\n      'core_build' => 'نسخة النظام',\n      'event_log' => 'سجل الأحداث',\n      'request_log' => 'سجل الطلبات',\n      'app_birthday' => 'أونلاين منذ',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'مرحباً',\n      'welcome_back_name' => 'مرحباً بك في :app, :name.',\n      'welcome_to_name' => 'مرحباً بك في :app, :name.',\n      'first_sign_in' => 'هذا هو أول تسجيل دخول لك.',\n      'last_sign_in' => 'آخر تسجيل دخول لك كان في',\n      'view_access_logs' => 'عرض سجلات الدخول',\n      'nice_message' => 'نتمنى لك يوماً سعيداً!',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'القائمة',\n    'search_prompt' => 'بحث...',\n    'no_records' => 'لا توجد سجلات.',\n    'pagination' => 'السجلات المعروضة: :from-:to من :total',\n    'delete_selected' => 'حذف المحدد',\n    'delete_selected_empty' => 'ليس هناك سجلات محددة لحذفها.',\n    'delete_selected_confirm' => 'هل أنت متأكد من حذف السجلات المحددة؟',\n    'delete_selected_success' => 'حذف السجلات المحددة.',\n    'column_switch_true' => 'نعم',\n    'column_switch_false' => 'لا',\n  ],\n  'form' => [\n    'action_confirm' => 'هل أنت متأكد؟',\n    'create' => 'إضافة',\n    'create_and_close' => 'إضافة وإغلاق',\n    'creating' => 'جاري الإضافة...',\n    'save' => 'حفظ',\n    'save_and_close' => 'حفظ وإغلاق',\n    'saving' => 'جاري الحفظ...',\n    'delete' => 'حذف',\n    'deleting' => 'جاري الحذف...',\n    'confirm_delete_multiple' => 'هل أنت متأكد من حذف السجلات المحددة?',\n    'cancel' => 'إلغاء الأمر',\n    'close' => 'إغلاق',\n    'confirm' => 'تأكيد',\n    'ok' => 'موافقة',\n    'or' => 'أو',\n    'create_title' => 'إضافة :name',\n    'update_title' => 'تعديل :name',\n    'preview_title' => 'عرض :name',\n    'restore_success' => 'تم استعادة :name بنجاح',\n    'reset_success' => 'تمت الاستعادة',\n    'missing_id' => 'لا يمكن العثور على هذا السجل.',\n    'creating_name' => 'إضافة :name...',\n    'saving_name' => 'حفظ :name...',\n    'confirm_delete' => 'هل أنت متأكد من الحذف?',\n    'deleting_name' => 'جاري حذف :name...',\n    'restore' => 'استعادة',\n    'restoring' => 'استعادة',\n    'confirm_restore' => 'هل أنت متأكد من استعادة هذا السجل?',\n    'add' => 'إضافة',\n    'apply' => 'تطبيق',\n    'reload' => 'إعادة تحميل',\n    'complete' => 'تم',\n    'select' => 'تحديد',\n    'select_all' => 'اختر الكل',\n    'select_none' => 'لا تختر شيء',\n    'insert_row' => 'إضافة سجل',\n    'return_to_list' => 'عودة للقائمة',\n  ],\n  'relation' => [\n    'help' => 'اضغط على عنصر لإضافته',\n    'add' => 'إضافة',\n    'link_selected' => 'ربط المحدد',\n    'cancel' => 'إلغاء الأمر',\n    'close' => 'إغلاق',\n    'create' => 'إنشاء',\n    'update' => 'تحديث',\n    'preview' => 'استعراض',\n    'remove_name' => 'إزالة :name',\n    'delete_name' => 'حذف :name',\n    'link' => 'ربط',\n    'unlink_name' => 'إلغاء ربط :name',\n  ],\n  'reorder' => [\n    'default_title' => 'إعادة الترتيب',\n    'no_records' => 'ليس هناك سجلات لإعادة ترتيبها.',\n  ],\n  'myaccount' => [],\n  'backend_preferences' => [],\n  'filter' => [\n    'all' => 'الكل',\n    'date_all' => 'كل الفترات',\n    'number_all' => 'كل الأرقام',\n  ],\n  'import_export' => [],\n  'media' => [\n    'menu_label' => 'الوسائط',\n    'delete_confirm' => 'هل أنت متأكد من حذف العناصر المحددة؟',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/ar.json",
    "content": "{\n  \"Update\": \"تحديث\",\n  \"Cancel\": \"يلغي\",\n  \"You are viewing as\": \"أنت تشاهد باسم\",\n  \"Preview Role\": \"معاينة الدور\",\n  \"This lets you test the actions this role can perform.\": \"يتيح لك هذا اختبار الإجراءات التي يمكن أن يؤديها هذا الدور.\",\n  \"View As Role\": \"عرض كـ دور\",\n  \"Return to Role Settings\": \"ارجع إلى إعدادات الدور\",\n  \"Password must have a minimum of length of :min characters\": \"يجب أن يكون الحد الأدنى لطول كلمة المرور: الحد الأدنى من الأحرف\",\n  \"Password must contain at least one uppercase character.\": \"يجب أن تحتوي كلمة المرور على حرف كبير واحد على الأقل.\",\n  \"Password must contain at least one lowercase character.\": \"يجب أن تحتوي كلمة المرور على حرف صغير واحد على الأقل.\",\n  \"Password must contain at least one number.\": \"يجب ان تحتوي كلمة المرور على الاقل رقما واحدا.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"يجب أن تحتوي كلمة المرور على حرف واحد غير أبجدي رقمي واحد على الأقل.\",\n  \"Welcome to your Administration Area, :name\": \"مرحبًا بك في منطقة الإدارة الخاصة بك ،: الاسم\",\n  \"Duplicate\": \"ينسخ\",\n  \"Expand\": \"يوسع\",\n  \"Collapse\": \"انهيار\",\n  \"Move Up\": \"تحرك\",\n  \"Move Down\": \"تحرك لأسفل\",\n  \"Remove\": \"إزالة\",\n  \"Manage Item\": \"إدارة العنصر\",\n  \"Clear Filters\": \"مسح عوامل التصفية\",\n  \"Filter Setup\": \"إعداد المرشح\",\n  \"Apply\": \"تطبيق\",\n  \"Clear\": \"صافي\",\n  \"is equal to\": \"يساوي\",\n  \"is between\": \"يتراوح ما بين\",\n  \"contains\": \"يحتوي على\",\n  \"is before\": \"من قبل\",\n  \"is after\": \"هو بعد\",\n  \"is greater than\": \"أكبر من\",\n  \"is less than\": \"اقل من\",\n  \"1. Export output format\": \"1. تصدير تنسيق الإخراج\",\n  \"File Format\": \"تنسيق الملف\",\n  \"Delimiter Character\": \"حرف المحدد\",\n  \"Enclosure Character\": \"شخصية الضميمة\",\n  \"Escape Character\": \"هروب الشخصية\",\n  \"2. Select columns to export\": \"2. حدد الأعمدة المراد تصديرها\",\n  \"Columns\": \"الأعمدة\",\n  \"3. Set export options\": \"3. تعيين خيارات التصدير\",\n  \"CSV Custom\": \"CSV مخصص\",\n  \"1. Upload an Import File\": \"1. تحميل ملف استيراد\",\n  \"Import File\": \"استيراد ملف\",\n  \"File Encoding\": \"ترميز الملف\",\n  \"First row contains column titles\": \"الصف الأول يحتوي على عناوين الأعمدة\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"اترك هذا محددًا إذا تم استخدام الصف الأول في ملف CSV كعناوين أعمدة.\",\n  \"2. Match the File Columns to Database Fields\": \"2. طابق أعمدة الملف بحقول قاعدة البيانات\",\n  \"File columns\": \"أعمدة الملف\",\n  \"Database fields\": \"حقول قاعدة البيانات\",\n  \"3. Set Import Options\": \"3. تعيين خيارات الاستيراد\",\n  \"Export progress\": \"تقدم عملية التصدير\",\n  \"Processing\": \"معالجة\",\n  \"Import progress\": \"تقدم الاستيراد\",\n  \"Import error\": \"خطأ في الاستيراد\",\n  \"Export error\": \"خطأ في التصدير\",\n  \"Column preview\": \"معاينة العمود\",\n  \"Column\": \"عمود\",\n  \"Disable\": \"إبطال\",\n  \"Enable\": \"ممكن\",\n  \"Delete\": \"حذف\",\n  \"Export\": \"يصدّر\",\n  \"Import\": \"يستورد\",\n  \"Select Action\": \"اختر فعلا\",\n  \"Please create a new account for logging in to the Administration Area.\": \"الرجاء إنشاء حساب جديد لتسجيل الدخول إلى منطقة الإدارة.\",\n  \"First Name\": \"الاسم الأول\",\n  \"Last Name\": \"الكنية\",\n  \"Email Address\": \"عنوان بريد الكتروني\",\n  \"Pick a Username\": \"اختر اسم مستخدم\",\n  \"Enter New Password\": \"أدخل كلمة مرور جديدة\",\n  \"Confirm Password\": \"تأكيد كلمة المرور\",\n  \"Create Account\": \"إنشاء حساب\",\n  \"Getting Ready\": \"يستعد\",\n  \"Just a few more minutes\": \"فقط بضع دقائق أخرى\",\n  \"Migrating Database\": \"ترحيل قاعدة البيانات\",\n  \"Access the Backend Panel\": \"قم بالوصول إلى لوحة الواجهة الخلفية\",\n  \"View Backend During Maintenance\": \"عرض الخلفية أثناء الصيانة\",\n  \"Perform Software Updates\": \"قم بإجراء تحديثات البرامج\",\n  \"In Maintenance\": \"في الصيانة\",\n  \"The site is currently in maintenance mode, please check back later.\": \"الموقع في وضع الصيانة حاليًا ، يرجى التحقق مرة أخرى لاحقًا.\",\n  \"Dashboard\": \"لوحة القيادة\",\n  \"Administrators\": \"المسؤولين\",\n  \"Manage Admins\": \"إدارة المسؤولين\",\n  \"Create Admins\": \"إنشاء المسؤولين\",\n  \"Moderate Admins\": \"مشرفون معتدلون\",\n  \"Manage account suspension and ban admin accounts\": \"إدارة تعليق الحساب وحظر حسابات المسؤول\",\n  \"Role Permissions\": \"إدارة الأدوار\",\n  \"Team Groups\": \"إدارة المجموعات\",\n  \"Manage Other Admins\": \"إدارة المسؤولين الآخرين\",\n  \"Allow users to reset passwords and update emails.\": \"يسمح بإعادة تعيين كلمات المرور وتحديث رسائل البريد الإلكتروني\",\n  \"Delete Admins\": \"حذف المسؤولين\",\n  \"Preferences\": \"التفضيلات\",\n  \"Settings\": \"إعدادات\",\n  \"Background Color\": \"لون الخلفية\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"اسمح للمستخدمين بإنشاء أدوار جديدة وتعديل الأدوار الأقل من أعلى مستوى لهم أو حذفها.\",\n  \"Save Changes\": \"حفظ التغييرات\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"يعرض هذا السجل قائمة بمحاولات تسجيل الدخول الناجحة بواسطة المسؤولين. يتم الاحتفاظ بالسجلات لما مجموعه: أيام أيام.\",\n  \"Access Log\": \"سجل الوصول\",\n  \"View a list of successful back-end user sign ins.\": \"اعرض قائمة بعمليات تسجيل دخول المستخدم الخلفية الناجحة.\",\n  \"ID\": \"بطاقة تعريف\",\n  \"Date & Time\": \"التاريخ والوقت\",\n  \"Type\": \"يكتب\",\n  \"IP address\": \"عنوان IP\",\n  \"Username\": \"اسم المستخدم\",\n  \"Login\": \"تسجيل دخول\",\n  \"First name\": \"الاسم الاول\",\n  \"Last name\": \"اللقب\",\n  \"Email\": \"البريد الإلكتروني\",\n  \"A custom schema is used for this file format.\": \"يتم استخدام مخطط مخصص لتنسيق الملف هذا.\",\n  \"Select\": \"يختار\",\n  \"Replace\": \"يحل محل\",\n  \"and\": \"و\",\n  \"Go\": \"يذهب\",\n  \"Go to page\": \"انتقل إلى صفحة\",\n  \"Copy to Clipboard\": \"نسخ إلى الحافظة\",\n  \"Reveal Contents\": \"كشف المحتويات\",\n  \"Selected Site\": \"الموقع المحدد\",\n  \"Use Emmet abbreviations\": \"استخدم اختصارات Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"لا يوجد سجل للموقع المحدد. اصنع واحدا؟\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"التفاصيل التي أدخلتها لا تتطابق مع سجلاتنا. يرجى التحقق مرة أخرى والمحاولة مرة أخرى.\",\n  \"Administration Area\": \"لوحة الإدارة\",\n  \"Password Reset\": \"إعادة تعيين كلمة المرور\",\n  \"Please enter a new password.\": \"الرجاء إدخال كلمة مرور جديدة.\",\n  \"Password\": \"كلمة المرور\",\n  \"Password Restore\": \"استعادة كلمة المرور\",\n  \"Please enter your login to restore the password.\": \"أدخل اسم المستخدم\",\n  \"A user could not be found with a login value of ':login'\": \"تعذر العثور على مستخدم بقيمة تسجيل دخول \\\": تسجيل الدخول\\\"\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"إذا تم العثور على حسابك ، فقد تم إرسال رسالة إلى عنوان بريدك الإلكتروني مع الإرشادات.\",\n  \"Invalid password reset data supplied. Please try again!\": \"تم توفير بيانات إعادة تعيين كلمة المرور غير صالحة. حاول مرة اخرى!\",\n  \"Unable to reset your password!\": \"غير قادر على إعادة تعيين كلمة المرور الخاصة بك!\",\n  \"Password has been reset. You may now sign in.\": \"تم إعادة تعيين كلمة السر. يمكنك الآن تسجيل الدخول.\",\n  \"Restore\": \"استرجاع\",\n  \"Reset\": \"استعادة\",\n  \"Stay logged in\": \"ابق متصلا\",\n  \"Forgot password?\": \"نسيت كلمة المرور؟\",\n  \"Global Editor Settings\": \"إعدادات المحرر العالمية\",\n  \"Manage Widgets\": \"إدارة التطبيقات\",\n  \"Add Widget\": \"إضافة القطعة\",\n  \"Set the current layout as the default?\": \"تعيين التخطيط الحالي باعتباره الافتراضي؟\",\n  \"Make Default\": \"جعل الافتراضي\",\n  \"Reset layout back to default?\": \"إعادة تعيين التخطيط إلى الافتراضي؟\",\n  \"Reset Layout\": \"إعادة تعيين التخطيط\",\n  \"Widget\": \"القطعة\",\n  \"please select\": \"من فضلك اختار\",\n  \"Width\": \"العرض\",\n  \"full width\": \"عرض كامل\",\n  \"Create Widgets\": \"إنشاء الحاجيات\",\n  \"not equal to\": \"لا يساوي\",\n  \"Light Mode\": \"وضع الضوء\",\n  \"Dark Mode\": \"الوضع الداكن\",\n  \"Auto Mode\": \"الوضع التلقائي\",\n  \"OS Default\": \"نظام التشغيل الافتراضي\",\n  \"Create a Custom Palette\": \"قم بإنشاء لوحة مخصصة\",\n  \"Custom Palette\": \"لوحة مخصصة\",\n  \"Primary Color\": \"لون أصلي\",\n  \"Secondary Color\": \"اللون الثانوي\",\n  \"Selection Color\": \"لون التحديد\",\n  \"Nav Text\": \"نص التنقل\",\n  \"Nav Background\": \"خلفية التنقل\",\n  \"Sidebar Text\": \"نص الشريط الجانبي\",\n  \"Sidebar Background\": \"خلفية الشريط الجانبي\",\n  \"Sidebar Active Text\": \"النص النشط للشريط الجانبي\",\n  \"Sidebar Active Background\": \"خلفية نشطة للشريط الجانبي\",\n  \"Sidebar Hover Background\": \"خلفية تحوم الشريط الجانبي\",\n  \"Settings Text\": \"نص الإعدادات\",\n  \"Settings Background\": \"إعدادات الخلفية\",\n  \"Settings Item Background\": \"إعدادات خلفية العنصر\",\n  \"Settings Active Color\": \"إعدادات اللون النشط\",\n  \"Settings Active Background\": \"الإعدادات الخلفية النشطة\",\n  \"Settings Hover Background\": \"إعدادات تحوم الخلفية\",\n  \"This name is shown in the title area of the back-end.\": \"يظهر هذا الاسم في منطقة العنوان للخلفية.\",\n  \"App Name\": \"اسم التطبيق\",\n  \"This name is shown on the sign in screen for the back-end.\": \"يظهر هذا الاسم على شاشة تسجيل الدخول للجهة الخلفية.\",\n  \"App Tagline\": \"سطر الوصف للتطبيق\",\n  \"Brand\": \"ماركة\",\n  \"Upload a custom logo to use in the back-end.\": \"قم بتحميل شعار مخصص لاستخدامه في النهاية الخلفية.\",\n  \"Logo\": \"شعار\",\n  \"Upload a custom favicon to use in the back-end\": \"قم بتحميل رمز مفضل مخصص لاستخدامه في النهاية الخلفية\",\n  \"Favicon\": \"فافيكون\",\n  \"Navigation Logo\": \"شعار الملاحة\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"يستبدل رابط لوحة المعلومات بشعار مخصص في التنقل.\",\n  \"Dashboard Icon\": \"رمز لوحة القيادة\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"استخدم صورة مخصصة لأيقونة لوحة القيادة (60 × 60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"تظهر هذه الرسالة على شاشة تسجيل الدخول للجهة الخلفية.\",\n  \"Welcome Message\": \"رسالة ترحيب\",\n  \"Login Page\": \"صفحة تسجيل الدخول\",\n  \"Background Type\": \"نوع الخلفية\",\n  \"Flat Color\": \"لون مسطح\",\n  \"Wallpaper\": \"ورق الجدران\",\n  \"Wallpaper Size\": \"حجم ورق الحائط\",\n  \"Auto\": \"آلي\",\n  \"Cover\": \"غطاء\",\n  \"Background Wallpaper Image\": \"صورة خلفية خلفية\",\n  \"Image\": \"صورة\",\n  \"Random Autumn Images\": \"صور الخريف العشوائية\",\n  \"Custom Image\": \"صورة مخصصة\",\n  \"Login Page Image\": \"صورة صفحة تسجيل الدخول\",\n  \"Colors\": \"الألوان\",\n  \"Color Mode\": \"وضع اللون\",\n  \"Color Preset\": \"اللون مسبقا\",\n  \"Menu Style\": \"نمط القائمة\",\n  \"Navigation\": \"ملاحة\",\n  \"Custom Stylesheet\": \"ورقة أنماط مخصصة\",\n  \"Styles\": \"الأنماط\",\n  \"Inline\": \"في النسق\",\n  \"Text\": \"نص\",\n  \"Tiles\": \"البلاط\",\n  \"Collapsed\": \"انهار\",\n  \"Icons\": \"الأيقونات\",\n  \"Left Side\": \"الجهه اليسرى\",\n  \"Add New Item\": \"أضف أداة جديدة\",\n  \"Link Color\": \"لون الارتباط\",\n  \"Current Password\": \"كلمة السر الحالية\",\n  \"New Password\": \"كلمة المرور الجديدة\",\n  \"Current password does not match. Please try again!\": \"كلمة المرور الحالية غير متطابقة. حاول مرة اخرى!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"لقد انتهت صلاحية كلمة المرور الخاصة بك ، يرجى إنشاء كلمة مرور جديدة لأسباب أمنية.\",\n  \"Region\": \"منطقة\",\n  \"Locale\": \"محلي\",\n  \"Select your desired locale for language use.\": \"حدد الموقع الذي تريده لاستخدام اللغة.\",\n  \"Timezone\": \"وحدة زمنية\",\n  \"Adjust displayed dates to this timezone.\": \"ضبط التواريخ المعروضة لهذه المنطقة الزمنية.\",\n  \"Code Editor\": \"محرر الكود\",\n  \"Color Scheme\": \"نظام الألوان\",\n  \"Word Wrap\": \"التفاف الكلمات\",\n  \"Off\": \"عن\",\n  \"40 Characters\": \"40 حرفًا\",\n  \"80 Characters\": \"80 حرفًا\",\n  \"Fluid\": \"سائل\",\n  \"Font Size\": \"حجم الخط\",\n  \"Tab Size\": \"حجم علامة التبويب\",\n  \"Code Folding\": \"طي الكود\",\n  \"Mark begin\": \"مارك ابدأ\",\n  \"Mark begin and end\": \"حدد البداية والنهاية\",\n  \"Autocompletion\": \"تكملة أوتوماتيكية\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"الإكمال التلقائي الأساسي (Ctrl + Space)\",\n  \"Live Autocompletion\": \"الإكمال التلقائي المباشر\",\n  \"Show gutter\": \"عرض الحضيض\",\n  \"Highlight active line\": \"قم بتمييز الخط النشط\",\n  \"Automatically close tags\": \"إغلاق العلامات تلقائيًا\",\n  \"Indent using tabs\": \"مسافة بادئة باستخدام علامات التبويب\",\n  \"Show indent guides\": \"إظهار أدلة المسافة البادئة\",\n  \"Show invisible characters\": \"إظهار الشخصيات غير المرئية\",\n  \"Show print margin\": \"إظهار هامش الطباعة\",\n  \"Custom styles to include in the HTML editor.\": \"أنماط مخصصة لتضمينها في محرر HTML.\",\n  \"Markup Styles\": \"أنماط الترميز\",\n  \"Paragraph Formats\": \"تنسيقات الفقرة\",\n  \"Markup Classes\": \"فئات الترميز\",\n  \"Tag Name\": \"اسم العلامة\",\n  \"Label\": \"ملصق\",\n  \"Paragraph\": \"فقرة\",\n  \"Class Name\": \"اسم الفصل\",\n  \"Link\": \"وصلة\",\n  \"Table\": \"طاولة\",\n  \"Table Cell\": \"خلية الجدول\",\n  \"Allowed Tags\": \"العلامات المسموح بها\",\n  \"The list of allowed tags.\": \"قائمة العلامات المسموح بها.\",\n  \"Markup Tags\": \"علامات الترميز\",\n  \"Allowed Empty Tags\": \"العلامات الفارغة المسموح بها\",\n  \"The list of tags that are not removed when they have no content inside.\": \"قائمة العلامات التي لم تتم إزالتها في حالة عدم وجود محتوى بداخلها.\",\n  \"Do Not Wrap Tags\": \"لا تغلف البطاقات\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"قائمة العلامات التي يجب عدم تغليفها داخل علامات الحظر.\",\n  \"Remove Tags\": \"إزالة العلامات\",\n  \"The list of tags that are removed together with their content.\": \"قائمة العلامات التي تمت إزالتها مع محتواها.\",\n  \"Line Breaker Tags\": \"الكلمات قواطع الخط\",\n  \"The list of tags that are used to place a line breaker element between.\": \"قائمة العلامات المستخدمة لوضع عنصر فاصل أسطر بينها.\",\n  \"Toolbar Buttons\": \"أزرار شريط الأدوات\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"يتم عرض أزرار شريط الأدوات في المحرر الغني افتراضيًا.\",\n  \"Insert a preset toolbar button configuration\": \"قم بإدراج تكوين زر شريط أدوات مُعد مسبقًا\",\n  \"Allowed Attributes\": \"السمات المسموح بها\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"قائمة سمات HTML المسموح بها ، بالإضافة إلى البدلات العادية.\",\n  \"Enable code snippets (Tab)\": \"تمكين مقتطفات التعليمات البرمجية (علامة تبويب)\",\n  \"Title\": \"عنوان\",\n  \"Description\": \"وصف\",\n  \"Attachment\": \"مرفق\",\n  \"Attachment URL\": \"رابط المرفق\",\n  \"Add a title and description for this attachment.\": \"أضف عنوانًا ووصفًا لهذا المرفق.\",\n  \"Upload\": \"رفع\",\n  \"Are you sure?\": \"هل أنت متأكد؟\",\n  \"Delete Selected\": \"حذف المحدد\",\n  \"Upload Error\": \"خطأ في التحميل\",\n  \"Remove File\": \"حذف الملف\",\n  \"Show Light Switch\": \"مفتاح إضاءة العرض\",\n  \"Allow users to toggle the color mode from the navigation.\": \"اسمح للمستخدمين بتبديل وضع الألوان من شريط التنقل.\",\n  \"Create :name\": \"إنشاء :name\",\n  \"Update :name\": \"تحديث :name\",\n  \"Add :name\": \"أضف :name\",\n  \"Link :name\": \"ربط :name\",\n  \"Unlink\": \"إلغاء ربط\",\n  \"Preview :name\": \"استعراض :name\",\n  \"Link a New :name\": \"ربط :name\",\n  \"Add a New :name\": \"أضف :name\",\n  \"Related :name Data\": \"بيانات :name المرتبطة\",\n  \":name Created\": \"تم إنشاء :name بنجاح\",\n  \":name Updated\": \"تم تعديل :name بنجاح\",\n  \":name Deleted\": \"تم حذف :name بنجاح\",\n  \":name Added\": \"تمت إضافة الاسم\",\n  \":name Linked\": \":name مرتبط\",\n  \":name Removed\": \":name تم الحذف\",\n  \":name Unlinked\": \":name غير مرتبط\",\n  \"Form record with an ID of :id could not be found.\": \"السجل رقم :id غير موجود.\",\n  \"Remove Selected\": \"إزالة المحدد\",\n  \"Unlink Selected\": \"إلغاء ربط المحدد\",\n  \"Preview the Website\": \"معاينة الموقع الإلكتروني\",\n  \"Manage back-end administrator users, groups and permissions.\": \"إدارة مستخدمي ومجموعات وصلاحيات مسؤول النظام الخلفي.\",\n  \"Define permissions for administrators based on their role.\": \"حدد صلاحيات المسؤولين بناءً على أدوارهم.\",\n  \"Add administrators to groups used for notifications and features.\": \"أضف مسؤولين إلى المجموعات المستخدمة للإشعارات والميزات.\",\n  \"Branding & Appearance\": \"العلامة التجارية والمظهر\",\n  \"Customize the administration area such as name, colors and logo.\": \"قم بتخصيص منطقة الإدارة من حيث الاسم والألوان والشعار.\",\n  \"Editor Settings\": \"إعدادات المحرر\",\n  \"Change the global editor preferences.\": \"قم بتغيير تفضيلات المحرر العامة.\",\n  \"My Account\": \"حسابي\",\n  \"Update your account details such as name, email address and password.\": \"قم بتحديث تفاصيل حسابك مثل الاسم وعنوان البريد الإلكتروني وكلمة المرور.\",\n  \"Backend Preferences\": \"تفضيلات لوحة الإدارة\",\n  \"Manage your account preferences such as desired language.\": \"قم بإدارة تفضيلات حسابك مثل اللغة التي ترغب بها.\",\n  \"security login\": \"تسجيل دخول آمن\",\n  \"List Setup\": \"إعداد القائمة\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"استخدم مربعات الاختيار لتحديد الأعمدة التي تريد عرضها في القائمة. يمكنك تغيير موضع الأعمدة عن طريق سحبها لأعلى أو لأسفل.\",\n  \"Records Per Page\": \"عدد السجلات في الصفحة\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"حدد عدد السجلات التي ترغب بعرضها في كل صفحة. يُرجى ملاحظة أن عرض عدد كبير من السجلات في صفحة واحدة قد يُؤثر سلبًا على الأداء.\",\n  \"Reset to Default\": \"إعادة الضبط إلى الوضع الافتراضي\",\n  \"Add Selected\": \"إضافة المحدد\",\n  \"Create & Close\": \"إنشاء وإغلاق\",\n  \"Creating :name...\": \"جارٍ إنشاء :name...\",\n  \"Save & Close\": \"حفظ وإغلاق\",\n  \"Saving :name...\": \"جارٍ الحفظ: الاسم...\",\n  \"Delete this record?\": \"هل تريد حذف هذا السجل؟\",\n  \"Deleting :name...\": \"جارٍ حذف :name...\",\n  \"Loading...\": \"تحميل...\",\n  \"Complete\": \"مكتمل\",\n  \"Please specify the modelClass property for :type\": \"يرجى تحديد خاصية modelClass لـ :type\",\n  \"Please specify some columns to export.\": \"يرجى تحديد بعض الأعمدة المراد تصديرها.\",\n  \"Missing column identifier\": \"معرف العمود مفقود\",\n  \"Unknown column\": \"عمود غير معروف\",\n  \"Please specify some columns to import.\": \"يرجى تحديد بعض الأعمدة المراد استيرادها.\",\n  \"Please match some columns first.\": \"يرجى مطابقة بعض الأعمدة أولاً.\",\n  \"Please specify a match for the required field :label.\": \"يرجى تحديد تطابق للحقل المطلوب :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"لم يتم التعرف على ترميز ملف المصدر. يرجى تحديد خيار تنسيق الملف المخصص مع الترميز الصحيح لاستيراد ملفك.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"يجب عليك تنفيذ سلوك وحدة التحكم ListController مع تمكين خيار التصدير 'useList'.\",\n  \"File export process completed!\": \"اكتملت عملية تصدير الملف!\",\n  \"The browser will now redirect to the file download.\": \"سيقوم المتصفح الآن بإعادة التوجيه إلى صفحة تنزيل الملف.\",\n  \"Ignore this column\": \"تجاهل هذا العمود\",\n  \"Drop column here...\": \"قم بإسقاط العمود هنا...\",\n  \"Please upload a valid CSV file.\": \"يرجى تحميل ملف CSV صالح.\",\n  \"Created\": \"تمت الإضافة\",\n  \"Updated\": \"تم التعديل\",\n  \"Skipped\": \"تم تجاهله\",\n  \"Warnings\": \"تحذيرات\",\n  \"Errors\": \"أخطاء\",\n  \"Skipped Rows\": \"صفوف متخطاة\",\n  \"Show Ignored Columns\": \"إظهار الأعمدة المتجاهلة\",\n  \"Auto Match Columns\": \"مطابقة الأعمدة تلقائيًا\",\n  \"File not found\": \"الملف غير موجود\",\n  \"There was no data supplied to export\": \"لم يتم تقديم أي بيانات للتصدير\",\n  \"Created At\": \"تم الإنشاء في\",\n  \"Updated At\": \"تم التحديث في\",\n  \"Deleted At\": \"تم الحذف في\",\n  \"Created By\": \"تم إنشاؤه بواسطة\",\n  \"Updated By\": \"تم التحديث بواسطة\",\n  \"Deleted By\": \"تم الحذف بواسطة\",\n  \"Create Dashboard\": \"إنشاء لوحة معلومات\",\n  \"Edit Dashboard\": \"تعديل لوحة التحكم\",\n  \"The dashboard was successfully created.\": \"تم إنشاء لوحة التحكم بنجاح.\",\n  \"The dashboard was successfully updated.\": \"تم تحديث لوحة التحكم بنجاح.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"هذه لوحة معلومات أنشأها النظام ولا يمكن حذفها.\",\n  \"Dashboard Name\": \"اسم لوحة التحكم\",\n  \"Please enter the dashboard name\": \"الرجاء إدخال اسم لوحة المعلومات\",\n  \"Please enter the dashboard code\": \"الرجاء إدخال رمز لوحة التحكم\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"لا يمكن أن يتضمن الرمز إلا الأحرف اللاتينية والأرقام والواصلات\",\n  \"Icon\": \"رمز\",\n  \"Please select an icon\": \"الرجاء اختيار رمز\",\n  \"Global Access\": \"الوصول العالمي\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"يمكن للمستخدمين الآخرين الاطلاع على لوحات المعلومات التي تم تمكين الوصول العالمي إليها.\",\n  \"Hide Interval\": \"إخفاء الفاصل الزمني\",\n  \"Check this if the dashboard does not use the date range picker.\": \"حدد هذا الخيار إذا كانت لوحة المعلومات لا تستخدم أداة اختيار نطاق التاريخ.\",\n  \"API Code\": \"كود واجهة برمجة التطبيقات\",\n  \"A unique code to refer to this dashboard using external systems.\": \"رمز فريد للإشارة إلى لوحة المعلومات هذه باستخدام الأنظمة الخارجية.\",\n  \"Select Dashboard\": \"حدد لوحة التحكم\",\n  \"Value\": \"قيمة\",\n  \"Difference with the previous period\": \"الفرق عن الفترة السابقة\",\n  \"Group\": \"مجموعة\",\n  \"Compare Totals\": \"قارن الإجماليات\",\n  \"Interval\": \"فاصلة\",\n  \"Date\": \"تاريخ\",\n  \"You don't have access to any dashboards.\": \"ليس لديك صلاحية الوصول إلى أي لوحات معلومات.\",\n  \"No dashboards have been set up yet.\": \"لم يتم إعداد أي لوحات تحكم حتى الآن.\",\n  \"Import Dashboard\": \"لوحة التحكم الرئيسية\",\n  \"The requested dashboard could not be found.\": \"لم يتم العثور على لوحة المعلومات المطلوبة.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"تم تفعيل وضع التصحيح. لا يُنصح باستخدامه في بيئات الإنتاج.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"عنوان URL الخاص بالخادم الخلفي عام جدًا. يُرجى تغييره إلى عنوان أكثر تميزًا.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"تم العثور على حساب باسم مستخدم عام. يرجى إعادة تسمية حساب المسؤول هذا.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"لم يتم تثبيت إضافة PHP المسماة :name. يرجى تثبيت هذه المكتبة وتفعيل الإضافة.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"الإضافة :name هي إحدى التبعيات ولكنها غير مثبتة. يرجى تثبيت هذه الإضافة.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"المجلد :name أو مجلداته الفرعية غير قابل للكتابة بواسطة PHP. يرجى تعيين الأذونات المناسبة لخادم الويب على هذا المجلد.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"لا يملك حسابك صلاحيات إنشاء أو تعديل لوحات المعلومات.\",\n  \"No records found\": \"لم يتم العثور على أي سجلات\",\n  \"Apply Changes\": \"تطبيق التغييرات\",\n  \"Error loading the widget data. See the browser error console for details.\": \"حدث خطأ أثناء تحميل بيانات الأداة. راجع وحدة تحكم أخطاء المتصفح لمزيد من التفاصيل.\",\n  \"Configure the widget\": \"قم بتهيئة الأداة\",\n  \"to manage its settings.\": \"لإدارة إعداداته.\",\n  \"Includes\": \"يشمل\",\n  \"Excludes\": \"باستثناء\"\n}"
  },
  {
    "path": "modules/backend/lang/be/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Выкарыстаны няправільны тып поля: \":type\"',\n    'options_method_invalid_model' => 'Для атрыбуту \":field\" не была знойздена адпаведная мадэль. Паспрабуйце яўна вызначыць метад опцый для мадэлі \":model\"',\n    'options_method_not_exists' => 'Клас мадэлі \":model\" павінен мець метад \":method()\", які вяртае опцыі для поля формы \":field\"',\n  ],\n  'widget' => [\n    'not_registered' => 'Віджэт з імем класа \":name\" не быў зарэгістрыраваны',\n    'not_bound' => 'Віджэт з імем класа \":name\" не быў злучаны з кантролерам',\n  ],\n  'page' => [\n    'untitled' => 'Без назвы',\n    'access_denied' => [\n      'label' => 'Доступ забаронены',\n      'help' => 'У вас няма патрэбных праў для прагляду гэтай старонкі',\n      'cms_link' => 'Вярнуцца у панэль кіравання',\n    ],\n    'no_database' => [\n      'label' => 'Няма базы дадзеных',\n      'help' => 'Неабходна база дадзеных мець доступ у панэль кіравання. Праверце, што база дадзеных правільна наладжаная, а міграцыі выкананыя, перад тым, як пасправаць зноў',\n      'cms_link' => 'Вярнуцца на хатнюю старонку',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Частковы шаблон \":name\" не знойдзены.',\n  ],\n  'account' => [\n    'sign_out' => 'Выйсці',\n    'login_placeholder' => 'Карыстальнік',\n    'password_placeholder' => 'Пароль',\n    'enter_email' => 'Увядзіце электронную пошту',\n    'email_placeholder' => 'Электронная пошта',\n    'apply' => 'Ужыць',\n    'cancel' => 'Адмяніць',\n    'delete' => 'Выдаліць',\n    'ok' => 'Добра',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Панэль кіравання',\n    'widget_inspector_title' => 'Канфігурацыя віджэта',\n    'widget_inspector_description' => 'Налада адлюстравання віджэта',\n    'widget_columns_label' => 'Шырыня :columns',\n    'widget_columns_description' => 'Шырыня віджэта, лічба паміж 1 і 10',\n    'widget_columns_error' => 'Калі ласка, ужывайце лічбы ад 1 да 10 у якасці шырыні віджэта',\n    'columns' => '{1} слупок|[2,4] слупкі|[5,Inf] слупкоў',\n    'widget_new_row_label' => 'Новы радок',\n    'widget_new_row_description' => 'Размясціць віджэт на новым радку',\n    'widget_title_label' => 'Назва віджэта',\n    'widget_title_error' => 'Віджэт павінен мець назву',\n    'reset_layout_success' => 'Макет быў скасаваны',\n    'make_default_success' => 'Гэты макет цяпер зыходны',\n    'status' => [\n      'widget_title_default' => 'Статус сістэмы',\n      'update_available' => '{0} абнаўленняў!|{1} абнаўленне!|[2,4] абнаўленні!|[5,Inf] абнаўленняў',\n      'updates_pending' => 'Абнаўленні праграмнага забеспячэння ў чаканні',\n      'updates_nil' => 'Праграмнае забеспячэнне ў актуальным стане',\n      'updates_link' => 'Абнавіць',\n      'warnings_pending' => 'Што патрабуе ўвагі',\n      'warnings_nil' => 'Няма папярэджанняў',\n      'warnings_link' => 'Прагледзець',\n      'core_build' => 'Зборка сістэмы',\n      'event_log' => 'Журнал падзей',\n      'request_log' => 'Спіс запытаў',\n      'app_birthday' => 'Анлайн з',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Сардэчна запрашаем',\n      'welcome_back_name' => 'Сардэчна запрашаем назад да :app, :name.',\n      'welcome_to_name' => 'Сардэчна запрашаем да :app, :name.',\n      'first_sign_in' => 'Гэта першы раз, калі Вы ўвайшлі',\n      'last_sign_in' => 'Ваш апошні ўваход быў',\n      'view_access_logs' => 'Прагледзець журнал доступу',\n      'nice_message' => 'Добрага дню!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Адміністратар',\n    'list_title' => 'Кіраванне адміністратарамі',\n    'new' => 'Новы адміністратар',\n    'first_name' => 'Імя',\n    'last_name' => 'Прозвішча',\n    'full_name' => 'Поўнае імя',\n    'email' => 'Электронная пошта',\n    'groups' => 'Групы',\n    'groups_comment' => 'Укажыце, да якіх груп павінен належаць профіль. Для карыстальнікаў групы вызначаюць дазволы, якія для кожнага карыстальніка могуць быць перапісаны на яго ўзроўні на вокладцы \"Дазволы\"',\n    'avatar' => 'Аватар',\n    'password' => 'Пароль',\n    'password_confirmation' => 'Пацвердзіце пароль',\n    'permissions' => 'Дазволы',\n    'account' => 'Профіль',\n    'superuser' => 'Супер карыстальнік',\n    'superuser_comment' => 'Надзяляе гэтага карыстальніка неабмежаванымі магчымасцямі ва ўсіх абласцях сістэмы. Супер карыстальнікі могуць дадаваць і змяняць іншых карыстальнікаў',\n    'send_invite' => 'Выслаць запрашэнне па электроннай пошце',\n    'send_invite_comment' => 'Дасылае вітальнае паведамленне з лагінам і паролем',\n    'delete_confirm' => 'Выдаліць гэтага адміністратара?',\n    'return' => 'Вярнуцца да спісу адміністратараў',\n    'allow' => 'Дазволіць',\n    'inherit' => 'Успадкаваць',\n    'deny' => 'Забараніць',\n    'activated' => 'Актываваны',\n    'last_login' => 'Апошні ўваход',\n    'created_at' => 'Створаны',\n    'updated_at' => 'Абноўлены',\n    'group' => [\n      'name' => 'Група',\n      'name_comment' => 'Імя адлюстроўваецца ў спісе груп на форме стварэння і рэдагавання адміністратараў',\n      'name_field' => 'Назва',\n      'description_field' => 'Апісанне',\n      'is_new_user_default_field_label' => 'Група па змаўчанні',\n      'is_new_user_default_field_comment' => 'Дадаваць новых адміністратараў у гэтую групу па змаўчанні',\n      'code_field' => 'Код',\n      'code_comment' => 'Увядзіце унікальны код, калі Вы жадаеце мець доступ да групы скрозь API',\n      'list_title' => 'Кіраванне групамі',\n      'new' => 'Новая група',\n      'delete_confirm' => 'Выдаліць гэтую адміністратарскую групу?',\n      'return' => 'Вярнуцца да спісу груп',\n      'users_count' => 'Карыстальнікі',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Немагчыма загрузіць ці захаваць налады для невядомага карыстальніка',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Спіс',\n    'search_prompt' => 'Пошук...',\n    'no_records' => 'Няма запісаў для прагляду',\n    'missing_model' => 'Для спіса, які выкарыстоўваецца ў класе \":class\", не знойдзена мадэль',\n    'missing_column' => 'Няма ніводных вызначэнняў слупкоў для \":columns\"',\n    'missing_columns' => 'Спіс, ужыты ў класе \":class\", не мае пэўных слупкоў',\n    'missing_definition' => 'Вызначаны спіс не мае слупка для поля \":field\"',\n    'missing_parent_definition' => 'Налады спіса не маюць вызначэнняў для \":definition\"',\n    'behavior_not_ready' => 'Паводзіны спіса не былі вызначаны, праверце, што Вы вызвалі makeLists() у кантролеры',\n    'invalid_column_datetime' => 'Значэнне слупку \":column\" не з\\'яўляецца аб\\'ектам тыпу DateTime, можа ў Вас адсутнічае спасылка на $dates у мадэлі?',\n    'pagination' => 'Паказаныя запісы: :from-:to з :total',\n    'prev_page' => 'Папярэдняя старонка',\n    'next_page' => 'Наступная старонка',\n    'refresh' => 'Абнавіць',\n    'updating' => 'Абнаўленне...',\n    'loading' => 'Загрузка...',\n    'check' => 'Праверыць',\n    'delete_selected' => 'Выдаліць абраныя',\n    'delete_selected_empty' => 'Няма абраных запісаў для выдалення',\n    'delete_selected_confirm' => 'Выдяліць абраныя запісы?',\n    'delete_selected_success' => 'Абраныя запісы былі выдаленыя',\n    'column_switch_true' => 'Так',\n    'column_switch_false' => 'Не',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Націсніце %s альбо перацягніце файл сюды, каб загрузіць',\n  ],\n  'form' => [\n    'create_title' => 'Новая :name',\n    'update_title' => 'Рэдагаваць :name',\n    'preview_title' => 'Папярэдні прагляд :name',\n    'reset_success' => 'Скід зроблены',\n    'missing_id' => 'Ідентыфікатар запісу формы не быў указаны',\n    'missing_model' => 'Для паводзінаў форму ў класе \":class\" няма вызначанай мадэлі',\n    'missing_definition' => 'Паводзіны формы не маюць поля для \":field\"',\n    'action_confirm' => 'Вы ўпэўнены?',\n    'create' => 'Стварыць',\n    'create_and_close' => 'Стварыць і зачыніць',\n    'creating' => 'Стварэнне...',\n    'creating_name' => 'Стварэнне :name...',\n    'save' => 'Захаваць',\n    'save_and_close' => 'Захаваць і зачыніць',\n    'saving' => 'Захаванне...',\n    'saving_name' => 'Захаванне :name...',\n    'delete' => 'Выдаліць',\n    'deleting' => 'Выдаленне...',\n    'confirm_delete' => 'Выдаліць запіс?',\n    'confirm_delete_multiple' => 'Выдаліць абраныя запісы?',\n    'deleting_name' => 'Выдаленне :name...',\n    'reset_default' => 'Скінуць да стану па змаўчанні',\n    'resetting' => 'Скіданне',\n    'resetting_name' => 'Скіданне :name',\n    'undefined_tab' => 'Рознае',\n    'field_off' => 'Выкл',\n    'field_on' => 'Укл',\n    'add' => 'Дадаць',\n    'apply' => 'Ужыць',\n    'cancel' => 'Адмяніць',\n    'close' => 'Зачыніць',\n    'confirm' => 'Пацвердзіць',\n    'reload' => 'Перазагрузіць',\n    'complete' => 'Завяршыць',\n    'ok' => 'Добра',\n    'or' => 'ці',\n    'confirm_tab_close' => 'Зачыніць вокладку? Незахаваныя змяненні будуць згубленыя',\n    'behavior_not_ready' => 'Паводзіны формы пакуль не былі ініцыялізаваныя, упэўніцеся, што Вы выканалі initForm() у сваім кантролеры',\n    'preview_no_files_message' => 'Няма загружаных файлаў',\n    'preview_no_record_message' => 'Няма выбраных запісаў',\n    'select' => 'Выбраць',\n    'select_all' => 'абраць усё',\n    'select_none' => 'выбраць няма',\n    'insert_row' => 'Уставіць радок',\n    'insert_row_below' => 'Уставіць радок ніжэй',\n    'delete_row' => 'Выдаліць радок',\n    'concurrency_file_changed_title' => 'Файл быў зменены',\n    'concurrency_file_changed_description' => 'Файл які вы рэдагуеце быў зменены на діску іншым карыстальнікам. Вы можаце альбо перазагрузіць файл і згубіць сваі змяненні, альбо перазапісаць файл на діску',\n    'return_to_list' => 'Вярнуцца да спісу',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Знайсці запіс',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Паводзіны стаўлення не маюць ніводнай канфігурацыі для \":config\"',\n    'missing_definition' => 'Паводзіны стаўлення не маюць вызначэнняў для поля \":field\"',\n    'missing_model' => 'Паводзіны стаўлення ў :class не маюць вызначанай мадэлі',\n    'invalid_action_single' => 'Гэтае дзеянне немагчыма выканаць на адзіночным стаўленні',\n    'invalid_action_multi' => 'Гэтае дзеянне немагчыма выканаць на множным стаўленні',\n    'help' => 'Націсніце на пункт, каб дадаць',\n    'add' => 'Дадаць',\n    'link_selected' => 'Звязаць выбраныя',\n    'cancel' => 'Адмяніць',\n    'close' => 'Зачыніць',\n    'create' => 'Стварыць',\n    'update' => 'Абнавіць',\n    'preview' => 'Папярэдні прагляд',\n    'remove_name' => 'Выдаліць :name',\n    'delete_name' => 'Выдаліць :name',\n    'link' => 'Звязаць',\n    'unlink_name' => 'Раз\\'яднаць :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Змяніць парадак запісаў',\n    'no_records' => 'Няма запісаў для сартавання',\n  ],\n  'model' => [\n    'name' => 'Мадэль',\n    'not_found' => 'Немагчыма знайсці мадэль \":class\" з ідэнтыфікатарам \":id\"',\n    'missing_id' => 'Не вызначаны ідэнтыфікатар для пошуку запісу мадэлі',\n    'missing_relation' => 'Мадэль \":class\" не мае вызначэнняў для \":relation\"',\n    'missing_method' => 'Мадэль \":class\" не мае метаду \":method\"',\n    'invalid_class' => 'Мадэль \":model\" выкарыстаная ў класе \":class\" неправільная, яна павінна ўспадкоўваць клас \\\\Model',\n    'mass_assignment_failed' => 'Памылковае масавае прызначэнне для атрыбуту \":attribute\"',\n  ],\n  'warnings' => [\n    'tips' => 'Парады па канфігурацыі сістэмы',\n    'tips_description' => 'Ёсць пытанні, на якія Вам неабходна звярнуць увагу, каб наладзіць сістэму належным чынам',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Маі налады',\n    'menu_description' => 'Налады для Вашага акаунту',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Акцэнтавы колер',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'all',\n    'options_method_not_exists' => 'The model class :model must define a method :method() returning options for the \\':filter\\' filter.',\n    'date_all' => 'all period',\n  ],\n  'import_export' => [],\n  'permissions' => [\n    'manage_media' => 'Загрузка і кіраванне медыя зместам - выявы, відэа, гукі, дакументы',\n  ],\n  'mediafinder' => [\n    'label' => 'Медыя каталог',\n    'default_prompt' => 'Націсніце %s кнопку, каб адшукаць медыя файлы',\n  ],\n  'media' => [\n    'menu_label' => 'Медыя',\n    'upload' => 'Загрузіць',\n    'move' => 'Перамясціць',\n    'delete' => 'Выдаліць',\n    'add_folder' => 'Дадаць каталог',\n    'search' => 'Пошук',\n    'display' => 'Паказаць',\n    'filter_everything' => 'Усё',\n    'filter_images' => 'Выявы',\n    'filter_video' => 'Відэа',\n    'filter_audio' => 'Аўдыё',\n    'filter_documents' => 'Дакументы',\n    'library' => 'Бібліятэка',\n    'size' => 'Памер',\n    'title' => 'Назва',\n    'last_modified' => 'Час апошняй мадыфікацыі',\n    'public_url' => 'Публічны URL',\n    'click_here' => 'Націсніце сюды',\n    'thumbnail_error' => 'Памылка падчас генерацыі мініяцюры',\n    'return_to_parent' => 'Вярнуцца да бацькоўскага каталогу',\n    'return_to_parent_label' => 'Падняцца ..',\n    'nothing_selected' => 'Нічога не выбрана',\n    'multiple_selected' => 'Шматлікія аб\\'екты выбраны',\n    'uploading_file_num' => 'Загрузка :number файла(аў)...',\n    'uploading_complete' => 'Загрузка скончаная',\n    'uploading_error' => 'Не атымалася загрузіць',\n    'type_blocked' => 'Гэты тып файлу заблакіраваны з-за небяспекі',\n    'order_by' => 'Сартаваць па',\n    'folder' => 'Каталог',\n    'no_files_found' => 'Не знойдзена файлаў па Вашым запыце',\n    'delete_empty' => 'Калі ласка, вызначце файлы для выдалення',\n    'delete_confirm' => 'Выдаліць абраныя аб\\'екты?',\n    'error_renaming_file' => 'Памылка падчас пераіменавання аб\\'екту',\n    'new_folder_title' => 'Новы каталог',\n    'folder_name' => 'Імя каталогу',\n    'error_creating_folder' => 'Памылка падчас стварэння каталогу',\n    'folder_or_file_exist' => 'Каталог альбо файл з такім імем ужо існуе',\n    'move_empty' => 'Калі ласка, выберыце аб\\'екты для перамяшчэння',\n    'move_popup_title' => 'Перамясціць файлы альбо каталогі',\n    'move_destination' => 'Каталог прызначэння',\n    'please_select_move_dest' => 'Калі ласка, выберыце каталог прызначэння',\n    'move_dest_src_match' => 'Калі ласка, выберыце іншы каталог прызначэння',\n    'empty_library' => 'Медыя бібліятэка пустая. Загрузіце файлы альбо стварыце каталогі, каб пачаць',\n    'insert' => 'Уставіць',\n    'crop_and_insert' => 'Абрэзаць і ўставіць',\n    'select_single_image' => 'Калі ласка, выберыце адну выяву',\n    'selection_not_image' => 'Абраны аб\\'ект не з\\'яўляецца файлам',\n    'restore' => 'Адмяніць усе змяненні',\n    'resize' => 'Змяніць памер...',\n    'selection_mode_normal' => 'Нармальны',\n    'selection_mode_fixed_ratio' => 'Фіксіраваныя суадносіны старонак',\n    'selection_mode_fixed_size' => 'Фіксіраваны памер',\n    'height' => 'Вышыня',\n    'width' => 'Шырыня',\n    'selection_mode' => 'Рэжым выбару',\n    'resize_image' => 'Змяніць памер',\n    'image_size' => 'Памер выявы:',\n    'selected_size' => 'Выбрана:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/be.json",
    "content": "{\n  \"Update\": \"Абнаўленне\",\n  \"Cancel\": \"Адмяніць\",\n  \"You are viewing as\": \"Вы праглядаеце як\",\n  \"Preview Role\": \"Папярэдні прагляд ролі\",\n  \"This lets you test the actions this role can perform.\": \"Гэта дазваляе праверыць дзеянні, якія можа выконваць гэтая роля.\",\n  \"View As Role\": \"Прагляд у ролі\",\n  \"Return to Role Settings\": \"Вярнуцца да налады роляў\",\n  \"Password must have a minimum of length of :min characters\": \"Пароль павінен мець мінімум сімвалаў :min\",\n  \"Password must contain at least one uppercase character.\": \"Пароль павінен утрымліваць прынамсі адзін вялікі рэгістр.\",\n  \"Password must contain at least one lowercase character.\": \"Пароль павінен утрымліваць прынамсі адзін сімвал ніжняга рэгістра.\",\n  \"Password must contain at least one number.\": \"Пароль павінен утрымліваць прынамсі адну лічбу.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Пароль павінен утрымліваць прынамсі адзін нелітарны сімвал.\",\n  \"Welcome to your Administration Area, :name\": \"Сардэчна запрашаем у вашу адміністрацыйную зону, :name\",\n  \"Duplicate\": \"Дубляваць\",\n  \"Expand\": \"Разгарнуць\",\n  \"Collapse\": \"Згарнуць\",\n  \"Move Up\": \"Рухайцеся ўверх\",\n  \"Move Down\": \"Рухайцеся ўніз\",\n  \"Remove\": \"Выдаліць\",\n  \"Manage Item\": \"Кіраваць прадметам\",\n  \"Clear Filters\": \"Ачысціць фільтры\",\n  \"Filter Setup\": \"Налада фільтра\",\n  \"Apply\": \"Ужыць\",\n  \"Clear\": \"Ясна\",\n  \"is equal to\": \"роўна\",\n  \"is between\": \"знаходзіцца паміж\",\n  \"contains\": \"змяшчае\",\n  \"is before\": \"гэта раней\",\n  \"is after\": \"пасля\",\n  \"is greater than\": \"больш, чым\",\n  \"is less than\": \"менш чым\",\n  \"1. Export output format\": \"1. Фармат выходнага файлу экспарту\",\n  \"File Format\": \"Фармат файлу\",\n  \"Delimiter Character\": \"Сімвал для абмежавання\",\n  \"Enclosure Character\": \"Сімвал для абгароджвання\",\n  \"Escape Character\": \"Сімвал для экранавання\",\n  \"2. Select columns to export\": \"2. Выберыце слупкі для экспарту\",\n  \"Columns\": \"Слупкі\",\n  \"3. Set export options\": \"3. Налады экспарту\",\n  \"CSV Custom\": \"Фармат карыстальніка\",\n  \"1. Upload an Import File\": \"1. Загрузіць CSV файл\",\n  \"Import File\": \"Імпартаваць файл\",\n  \"File Encoding\": \"Кадзіроўка файла\",\n  \"First row contains column titles\": \"Першы радок утрымлівае назвы слупкоў\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Пакіньце гэтую пазнаку, калі першы радок утрымлівае назвы слупкоў\",\n  \"2. Match the File Columns to Database Fields\": \"2. Суаднесці слупкі з палямі ў табліцы базы дадзеных\",\n  \"File columns\": \"Слупкі файла\",\n  \"Database fields\": \"Палі базы дадзеных\",\n  \"3. Set Import Options\": \"3. Налады імпарту\",\n  \"Export progress\": \"Прагрэс экспарту\",\n  \"Processing\": \"Абработка\",\n  \"Import progress\": \"Прагрэс імпарту\",\n  \"Import error\": \"Памылка імпарту\",\n  \"Export error\": \"Памылка экспарту\",\n  \"Column preview\": \"Прагляд слупкоў\",\n  \"Column\": \"Слупок\",\n  \"Disable\": \"Адключыць\",\n  \"Enable\": \"Уключыць\",\n  \"Delete\": \"Выдаліць\",\n  \"Export\": \"Экспарт\",\n  \"Import\": \"Імпарт\",\n  \"Select Action\": \"Выберыце Дзеянне\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Калі ласка, стварыце новы ўліковы запіс для ўваходу ў Адміністрацыйную зону.\",\n  \"First Name\": \"Імя\",\n  \"Last Name\": \"Прозвішча\",\n  \"Email Address\": \"Адрас электроннай пошты\",\n  \"Pick a Username\": \"Выберыце імя карыстальніка\",\n  \"Enter New Password\": \"Увядзіце новы пароль\",\n  \"Confirm Password\": \"Пацвердзіце пароль\",\n  \"Create Account\": \"Стварыць уліковы запіс\",\n  \"Getting Ready\": \"Рыхтавацца\",\n  \"Just a few more minutes\": \"Яшчэ некалькі хвілін\",\n  \"Migrating Database\": \"Міграцыя базы даных\",\n  \"Access the Backend Panel\": \"Доступ да бэкэнд-панэлі\",\n  \"View Backend During Maintenance\": \"Прагляд бэкэнд падчас тэхнічнага абслугоўвання\",\n  \"Perform Software Updates\": \"Выканайце абнаўленне праграмнага забеспячэння\",\n  \"In Maintenance\": \"У абслугоўванні\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Зараз сайт знаходзіцца ў рэжыме абслугоўвання, праверце пазней.\",\n  \"Dashboard\": \"Прыборная панэль\",\n  \"Administrators\": \"Адміністратары\",\n  \"Manage Admins\": \"Кіраванне адміністратарамі\",\n  \"Create Admins\": \"Стварыць адміністратараў\",\n  \"Moderate Admins\": \"Умераныя адміністратары\",\n  \"Manage account suspension and ban admin accounts\": \"Кіруйце прыпыненнем уліковых запісаў і забаронай уліковых запісаў адміністратара\",\n  \"Role Permissions\": \"Кіраванне ролямі\",\n  \"Team Groups\": \"Кіраванне групамі\",\n  \"Manage Other Admins\": \"Кіраванне іншымі адміністратарамі\",\n  \"Allow users to reset passwords and update emails.\": \"Дазваляе скідаць паролі і абнавіць электронную пошту\",\n  \"Delete Admins\": \"Выдаліць адміністратараў\",\n  \"Preferences\": \"Перавагі\",\n  \"Settings\": \"Налады\",\n  \"Background Color\": \"Колер фону\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Дазволіць карыстальнікам ствараць новыя ролі і рэдагаваць або выдаляць ролі ніжэйшыя за іх вышэйшую ролю.\",\n  \"Save Changes\": \"Захаваць змены\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Гэты ліст паказвае паспяховыя спробы ўваходу адміністратараў. Запісы захоўваюцца на працягу :days д\",\n  \"Access Log\": \"Дзеннік доступаў\",\n  \"View a list of successful back-end user sign ins.\": \"Прагледзець ліст паспяховых уваходаў у панэль кіравання\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Дата і час\",\n  \"Type\": \"Тып\",\n  \"IP address\": \"IP адрас\",\n  \"Username\": \"Імя карыстальніка\",\n  \"Login\": \"Увайсці\",\n  \"First name\": \"Імя\",\n  \"Last name\": \"Прозвішча\",\n  \"Email\": \"Электронная пошта\",\n  \"A custom schema is used for this file format.\": \"Для гэтага фармату файла выкарыстоўваецца спецыяльная схема.\",\n  \"Select\": \"Выберыце\",\n  \"Replace\": \"Замяніць\",\n  \"and\": \"і\",\n  \"Go\": \"Ідзі\",\n  \"Go to page\": \"Перайсці на старонку\",\n  \"Copy to Clipboard\": \"Скапіраваць у буфер абмену\",\n  \"Reveal Contents\": \"Паказаць змест\",\n  \"Selected Site\": \"Абраны сайт\",\n  \"Use Emmet abbreviations\": \"Выкарыстоўвайце скарачэнні Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Для абранага сайта не існуе запісу. Стварыць?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Уведзеныя вамі звесткі не супадаюць з нашымі запісамі. Праверце яшчэ раз і паўтарыце спробу.\",\n  \"Administration Area\": \"Панэль кіравання\",\n  \"Password Reset\": \"Скасаванне паролю\",\n  \"Please enter a new password.\": \"Увядзіце новы пароль\",\n  \"Password\": \"Пароль\",\n  \"Password Restore\": \"Аднаўленне пароля\",\n  \"Please enter your login to restore the password.\": \"Увядзіце імя карыстальніка\",\n  \"A user could not be found with a login value of ':login'\": \"Імя карыстальніка \\\":login\\\" не было знойдзена\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"На Вашу электронную пошту было адпраўлена паведамленне з інструкцыямі\",\n  \"Invalid password reset data supplied. Please try again!\": \"Няправільныя дадзеныя для змены пароля. Паспрабуйце яшчэ!\",\n  \"Unable to reset your password!\": \"Немагчыма змяніць пароль!\",\n  \"Password has been reset. You may now sign in.\": \"Пароль быў зменены, цяпер Вы можаце ўвайсці\",\n  \"Restore\": \"Аднавіць\",\n  \"Reset\": \"Скасаваць\",\n  \"Stay logged in\": \"Заставайцеся ў сістэме\",\n  \"Forgot password?\": \"Забыліся пароль?\",\n  \"Global Editor Settings\": \"Глабальныя налады рэдактара\",\n  \"Manage Widgets\": \"Кіраванне віджэтамі\",\n  \"Add Widget\": \"Дадаць віджэт\",\n  \"Set the current layout as the default?\": \"Зрабіць дадзены макет заходным?\",\n  \"Make Default\": \"Зрабіць зыходным\",\n  \"Reset layout back to default?\": \"Скасаваць макет да зыходных наладаў\",\n  \"Reset Layout\": \"Скасаваць макет\",\n  \"Widget\": \"Віджэт\",\n  \"please select\": \"Калі ласка, выберыце\",\n  \"Width\": \"Шырыня віджэта\",\n  \"full width\": \"Поўная шырыня\",\n  \"Create Widgets\": \"Стварэнне віджэтаў\",\n  \"not equal to\": \"не роўны\",\n  \"Light Mode\": \"Светлавы рэжым\",\n  \"Dark Mode\": \"Цёмны рэжым\",\n  \"Auto Mode\": \"Аўтаматычны рэжым\",\n  \"OS Default\": \"АС па змаўчанні\",\n  \"Create a Custom Palette\": \"Стварыце ўласную палітру\",\n  \"Custom Palette\": \"Карыстальніцкая палітра\",\n  \"Primary Color\": \"Галоўны колер\",\n  \"Secondary Color\": \"Дадатковы колер\",\n  \"Selection Color\": \"Колер выбару\",\n  \"Nav Text\": \"Тэкст навігацыі\",\n  \"Nav Background\": \"Навігацыйны фон\",\n  \"Sidebar Text\": \"Тэкст бакавой панэлі\",\n  \"Sidebar Background\": \"Фон бакавой панэлі\",\n  \"Sidebar Active Text\": \"Актыўны тэкст бакавой панэлі\",\n  \"Sidebar Active Background\": \"Актыўны фон бакавой панэлі\",\n  \"Sidebar Hover Background\": \"Фон навядзення курсора на бакавой панэлі\",\n  \"Settings Text\": \"Тэкст налад\",\n  \"Settings Background\": \"Фон налад\",\n  \"Settings Item Background\": \"Фон элемента налад\",\n  \"Settings Active Color\": \"Налады Актыўны колер\",\n  \"Settings Active Background\": \"Налады Актыўны фон\",\n  \"Settings Hover Background\": \"Налады Навядзіце фон\",\n  \"This name is shown in the title area of the back-end.\": \"Гэта імя паказваецца ў загалоўку панэлі кіравання\",\n  \"App Name\": \"Назва прыкладання\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Гэты слоган паказваецца на старонцы ўваходу\",\n  \"App Tagline\": \"Слоган прыкладання\",\n  \"Brand\": \"Брэнд\",\n  \"Upload a custom logo to use in the back-end.\": \"Загрузіце лагатып для ўжывання ў панэлі кіравання\",\n  \"Logo\": \"Лагатып\",\n  \"Upload a custom favicon to use in the back-end\": \"Загрузіце карыстальніцкі фавікон для выкарыстання ў бэкэнде\",\n  \"Favicon\": \"Фавікон\",\n  \"Navigation Logo\": \"Лагатып навігацыі\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Замяняе спасылку на прыборную панэль карыстальніцкім лагатыпам у навігацыі.\",\n  \"Dashboard Icon\": \"Значок прыборнай панэлі\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Выкарыстоўвайце нестандартную выяву для значка прыборнай панэлі (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Гэта паведамленне адлюстроўваецца на экране ўваходу ў серверную сістэму.\",\n  \"Welcome Message\": \"Прывітальнае паведамленне\",\n  \"Login Page\": \"Старонка ўваходу\",\n  \"Background Type\": \"Тып фону\",\n  \"Flat Color\": \"Плоскі колер\",\n  \"Wallpaper\": \"Шпалеры\",\n  \"Wallpaper Size\": \"Памер шпалер\",\n  \"Auto\": \"Аўто\",\n  \"Cover\": \"Вокладка\",\n  \"Background Wallpaper Image\": \"Фонавы малюнак шпалер\",\n  \"Image\": \"Карцінка\",\n  \"Random Autumn Images\": \"Выпадковыя восеньскія выявы\",\n  \"Custom Image\": \"Выява на заказ\",\n  \"Login Page Image\": \"Выява старонкі ўваходу\",\n  \"Colors\": \"Колеры\",\n  \"Color Mode\": \"Каляровы рэжым\",\n  \"Color Preset\": \"Прадусталяваны колер\",\n  \"Menu Style\": \"Стыль меню\",\n  \"Navigation\": \"Навігацыя\",\n  \"Custom Stylesheet\": \"Прыстасаваныя табліцы стыляў\",\n  \"Styles\": \"Стылі\",\n  \"Inline\": \"Строкавы\",\n  \"Text\": \"Тэкст\",\n  \"Tiles\": \"Плітка\",\n  \"Collapsed\": \"Выпадаючы\",\n  \"Icons\": \"Значкі\",\n  \"Left Side\": \"Левы бок\",\n  \"Add New Item\": \"Дадаць новы элемент\",\n  \"Link Color\": \"Колер спасылкі\",\n  \"Current Password\": \"Бягучы пароль\",\n  \"New Password\": \"Новы пароль\",\n  \"Current password does not match. Please try again!\": \"Бягучы пароль не супадае. Калі ласка, паспрабуйце яшчэ раз!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Тэрмін дзеяння вашага пароля скончыўся, у мэтах бяспекі стварыце новы.\",\n  \"Region\": \"Рэгіён\",\n  \"Locale\": \"Лакалізацыя\",\n  \"Select your desired locale for language use.\": \"Выберыце жаданую лакалізацыю, каб змяніць мову\",\n  \"Timezone\": \"Часавая зона\",\n  \"Adjust displayed dates to this timezone.\": \"Настройка адлюстравання дат у гэтым часавым поясе\",\n  \"Code Editor\": \"Рэдактар коду\",\n  \"Color Scheme\": \"Каляровая схема\",\n  \"Word Wrap\": \"Перанос слоў\",\n  \"Off\": \"Выкл\",\n  \"40 Characters\": \"40 сімвалаў\",\n  \"80 Characters\": \"80 сімвалаў\",\n  \"Fluid\": \"Вадкі\",\n  \"Font Size\": \"Памер шрыфта\",\n  \"Tab Size\": \"Памер табуляцыі\",\n  \"Code Folding\": \"Складванне коду\",\n  \"Mark begin\": \"Пазначыць пачатак\",\n  \"Mark begin and end\": \"Пазначыць пачатак і канец\",\n  \"Autocompletion\": \"Аўтазавяршэнне\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Простае аўтазавяршэнне (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Жывое аўтазавяршэнне\",\n  \"Show gutter\": \"Паказваць нумерацыю радкоў\",\n  \"Highlight active line\": \"Вылучыць актыўную лінію\",\n  \"Automatically close tags\": \"Аўтаматычна зачыняць тэгі\",\n  \"Indent using tabs\": \"Водступ з дапамогай табуляцыі\",\n  \"Show indent guides\": \"Паказываць водступы\",\n  \"Show invisible characters\": \"Паказваць нябачныя сімвалы\",\n  \"Show print margin\": \"Паказываць палі для друку\",\n  \"Custom styles to include in the HTML editor.\": \"Прыстасаваныя стылі якія патрэбна дадаць у рэдактар\",\n  \"Markup Styles\": \"Стылі макету\",\n  \"Paragraph Formats\": \"Фарматы абзацаў\",\n  \"Markup Classes\": \"Класы макету\",\n  \"Tag Name\": \"Назва тэга\",\n  \"Label\": \"Назва\",\n  \"Paragraph\": \"Параграф\",\n  \"Class Name\": \"Імя класу\",\n  \"Link\": \"Спасылка\",\n  \"Table\": \"Табліца\",\n  \"Table Cell\": \"Клетка табліцы\",\n  \"Allowed Tags\": \"Дазволеныя тэгі\",\n  \"The list of allowed tags.\": \"Ліст дазволеных тэгаў\",\n  \"Markup Tags\": \"Тэгі макету\",\n  \"Allowed Empty Tags\": \"Дазволеныя пустыя тэгі\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Ліст тэгаў, якія не выдаляюцца нават без зместу\",\n  \"Do Not Wrap Tags\": \"Не абгортваць тэгі\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Ліст тэгаў, якія не абгортваюцца блокавымі тэгамі\",\n  \"Remove Tags\": \"Выдаліць тэгі\",\n  \"The list of tags that are removed together with their content.\": \"Ліст тэгаў, якія выдаляюцца разам са зместам\",\n  \"Line Breaker Tags\": \"Тэгі разрыву лініі\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Спіс тэгаў, якія выкарыстоўваюцца для размяшчэння элемента разрыўніка радка паміж.\",\n  \"Toolbar Buttons\": \"Кнопкі панэлі інструментаў\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Кнопкі панэлі інструментаў, якія па змаўчанні будуць адлюстроўвацца ў Rich Editor.\",\n  \"Insert a preset toolbar button configuration\": \"Устаўце прадусталяваную канфігурацыю кнопак панэлі інструментаў\",\n  \"Allowed Attributes\": \"Дазволеныя атрыбуты\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Спіс дазволеных атрыбутаў HTML у дадатак да звычайных дазволаў.\",\n  \"Enable code snippets (Tab)\": \"Уключыць фрагменты кода (Tab)\",\n  \"Title\": \"Назва\",\n  \"Description\": \"Апісанне\",\n  \"Attachment\": \"Прымацаванне\",\n  \"Attachment URL\": \"URL прымацавання\",\n  \"Add a title and description for this attachment.\": \"Дадайце назву і апісанне для гэтага прымацавання\",\n  \"Upload\": \"Загрузіць\",\n  \"Are you sure?\": \"Вы ўпэўнены?\",\n  \"Delete Selected\": \"Выдаліць выбранае\",\n  \"Upload Error\": \"Памылка загрузкі\",\n  \"Remove File\": \"Выдаліць файл\",\n  \"Show Light Switch\": \"Паказаць выключальнік святла\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Дазволіць карыстальнікам пераключаць каляровы рэжым з навігацыі.\",\n  \"Create :name\": \"Стварыць :name\",\n  \"Update :name\": \"Абнавіць :name\",\n  \"Add :name\": \"Дадаць :name\",\n  \"Link :name\": \"Звязаць :name\",\n  \"Unlink\": \"Раз'яднаць\",\n  \"Preview :name\": \"Прагледзець :name\",\n  \"Link a New :name\": \"Звязаць з новым :name\",\n  \"Add a New :name\": \"Дадаць новае :name\",\n  \"Related :name Data\": \"Роднасныя :name дадзеныя\",\n  \":name Created\": \":name была створаная\",\n  \":name Updated\": \":name абноўленая\",\n  \":name Deleted\": \":name выдаленая\",\n  \":name Added\": \":name Дададзена\",\n  \":name Linked\": \":name Спасылка\",\n  \":name Removed\": \":name выдалена\",\n  \":name Unlinked\": \":name Адвязана\",\n  \"Form record with an ID of :id could not be found.\": \"Немагчыма знайсці запіс формы з ідэнтыфікатарам :id\",\n  \"Remove Selected\": \"Выдаліць выбранае\",\n  \"Unlink Selected\": \"Адлучыць выбранае\",\n  \"Preview the Website\": \"Праглядзець сайт\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Кіраванне карыстальнікамі панэлі кіравання, групамі і дазволамі\",\n  \"Define permissions for administrators based on their role.\": \"Вызначце правы доступу для адміністратараў у залежнасці ад іх ролі.\",\n  \"Add administrators to groups used for notifications and features.\": \"Дадайце адміністратараў у групы, якія выкарыстоўваюцца для апавяшчэнняў і функцый.\",\n  \"Branding & Appearance\": \"Налады адлюстравання панэлі кіравання\",\n  \"Customize the administration area such as name, colors and logo.\": \"Налады панэлі кіравання, такія як колер фона, лагатып, апісанні\",\n  \"Editor Settings\": \"Налады рэдактара\",\n  \"Change the global editor preferences.\": \"Налада глабальных наладаў рэдактара, такіх як памер шрыфта і каляровая схема\",\n  \"My Account\": \"Мой акаунт\",\n  \"Update your account details such as name, email address and password.\": \"Абнавіць прыватныя налады (імя, электронную пошту, пароль)\",\n  \"Backend Preferences\": \"Сістэмныя налады панэлі кіравання\",\n  \"Manage your account preferences such as desired language.\": \"Кіруйце такімі наладамі, як, напрыклад, мовай прыкладання\",\n  \"security login\": \"бяспека лагін\",\n  \"List Setup\": \"Налады лісту\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"З дапамогай сцяжкоў вызначце слупкі для лісту. Вы можаце змяніць пазіцыю слупкоў, перацягваючы іх уверх і ўніз\",\n  \"Records Per Page\": \"Запісаў на старонку\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Вызначце, колькі запісаў павінна быць на адной старонцы. Памятайце, што вялікая колькасць запісаў можа паменьшыць прадукцыйнасць\",\n  \"Reset to Default\": \"Скінуць да значэнняў па змаўчанні\",\n  \"Add Selected\": \"Дадаць выбраныя\",\n  \"Create & Close\": \"Стварыць і закрыць\",\n  \"Creating :name...\": \"Стварэнне :name...\",\n  \"Save & Close\": \"Захаваць і закрыць\",\n  \"Saving :name...\": \"Захаванне :name...\",\n  \"Delete this record?\": \"Выдаліць гэты запіс?\",\n  \"Deleting :name...\": \"Выдаленне :name...\",\n  \"Loading...\": \"Загрузка...\",\n  \"Complete\": \"Завершана\",\n  \"Please specify the modelClass property for :type\": \"Калі ласка вызначце modelClass уласцівасць для \\\":type\\\"\",\n  \"Please specify some columns to export.\": \"Калі ласка, вызначце слупкі для экспарту\",\n  \"Missing column identifier\": \"Прапушчаны ідэнтыфікатар слупка\",\n  \"Unknown column\": \"Невядомы слупок\",\n  \"Please specify some columns to import.\": \"Калі ласка, укажыце слупкі для імпарту\",\n  \"Please match some columns first.\": \"Калі ласка, спачатку суаднясіце некалькі слупкоў\",\n  \"Please specify a match for the required field :label.\": \"Калі ласка, вызначце суадносіны для патрэбнага слупка \\\":label\\\"\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Не атрымалася вызначыць кадзіроўку файла. Калі ласка, выберыце правільны фармат самастойна\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Вы павінны вызначыць паводзіны кантролера ListController з уключанай наладай \\\"useList\\\"\",\n  \"File export process completed!\": \"Экспарт завершаны!\",\n  \"The browser will now redirect to the file download.\": \"Браўзер зараз пяройдзе да пампавання файла\",\n  \"Ignore this column\": \"Ігнараваць гэты слупок\",\n  \"Drop column here...\": \"Скінуць слупок сюды...\",\n  \"Please upload a valid CSV file.\": \"Калі ласка, загрузіце правільны CSV файл\",\n  \"Created\": \"Створана\",\n  \"Updated\": \"Абноўлена\",\n  \"Skipped\": \"Прапушчана\",\n  \"Warnings\": \"Папярэджанні\",\n  \"Errors\": \"Памылкі\",\n  \"Skipped Rows\": \"Прапушчаныя радкі\",\n  \"Show Ignored Columns\": \"Паказаць слупкі якія ігнаруюцца\",\n  \"Auto Match Columns\": \"Аўтаматычныя суадносіны слупкоў\",\n  \"File not found\": \"Файл не знойдзены\",\n  \"There was no data supplied to export\": \"Няма дадзеных для экспарту\",\n  \"Created At\": \"Створана ў\",\n  \"Updated At\": \"Абноўлена ў\",\n  \"Deleted At\": \"Выдалена ў\",\n  \"Created By\": \"Створана\",\n  \"Updated By\": \"Абноўлена\",\n  \"Deleted By\": \"Выдалена\",\n  \"Create Dashboard\": \"Стварыць панэль кіравання\",\n  \"Edit Dashboard\": \"Рэдагаваць панэль кіравання\",\n  \"The dashboard was successfully created.\": \"Панэль кіравання паспяхова створана.\",\n  \"The dashboard was successfully updated.\": \"Панэль кіравання была паспяхова абноўлена.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"Гэта панэль кіравання, створаная сістэмай, і яе нельга выдаліць.\",\n  \"Dashboard Name\": \"Назва панэлі кіравання\",\n  \"Please enter the dashboard name\": \"Калі ласка, увядзіце назву панэлі кіравання\",\n  \"Please enter the dashboard code\": \"Калі ласка, увядзіце код панэлі кіравання\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"Код можа ўтрымліваць толькі лацінскія літары, лічбы і дэфісы\",\n  \"Icon\": \"Значок\",\n  \"Please select an icon\": \"Калі ласка, выберыце значок\",\n  \"Global Access\": \"Глабальны доступ\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Панэлі кіравання з уключаным глабальным доступам могуць праглядаць іншыя карыстальнікі.\",\n  \"Hide Interval\": \"Схаваць інтэрвал\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Пастаўце галачку, калі на панэлі кіравання не выкарыстоўваецца выбар дыяпазону дат.\",\n  \"API Code\": \"Код API\",\n  \"A unique code to refer to this dashboard using external systems.\": \"Унікальны код для спасылкі на гэтую панэль кіравання з дапамогай знешніх сістэм.\",\n  \"Select Dashboard\": \"Выберыце панэль кіравання\",\n  \"Value\": \"Значэнне\",\n  \"Difference with the previous period\": \"Розніца з папярэднім перыядам\",\n  \"Group\": \"Група\",\n  \"Compare Totals\": \"Параўнаць вынікі\",\n  \"Interval\": \"Інтэрвал\",\n  \"Date\": \"Дата\",\n  \"You don't have access to any dashboards.\": \"У вас няма доступу да якіх-небудзь панэляў кіравання.\",\n  \"No dashboards have been set up yet.\": \"Пакуль што панэлі кіравання не настроены.\",\n  \"Import Dashboard\": \"Імпартаваць панэль кіравання\",\n  \"The requested dashboard could not be found.\": \"Запытаная панэль кіравання не знойдзена.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Рэжым адладкі ўключаны. Гэта не рэкамендуецца для прадукцыйных установак.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"URL-адрас сервера :name занадта агульны. Калі ласка, усталюйце нешта больш унікальнае.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Знойдзены ўліковы запіс з агульным імем карыстальніка :name. Калі ласка, перайменуйце гэты ўліковы запіс адміністратара.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Пашыранне PHP \\\":name\\\" не ўсталявана. Калі ласка, ўсталюце пашырэнне і актывуйце яго\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Убудова :name з'яўляецца залежнасцю, але не ўсталявана. Калі ласка, усталюйце гэту ўбудову.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"PHP не можа пісаць у каталог \\\":name\\\" альбо ў яго падкаталогі. Калі ласка, вызначце патрэбныя дазволы ў наладах сервера для гэтага каталога\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Ваш уліковы запіс не мае дазволаў на стварэнне або рэдагаванне панэляў кіравання.\",\n  \"No records found\": \"Запісаў не знойдзена\",\n  \"Apply Changes\": \"Ужыць змены\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Памылка пры загрузцы дадзеных віджэта. Глядзіце кансоль памылак браўзера для атрымання падрабязнай інфармацыі.\",\n  \"Configure the widget\": \"Наладзьце віджэт\",\n  \"to manage its settings.\": \"кіраваць яго наладамі.\",\n  \"Includes\": \"Уключае\",\n  \"Excludes\": \"Выключае\"\n}"
  },
  {
    "path": "modules/backend/lang/bg/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Използвано невалиден тип поле :type.',\n    'options_method_not_exists' => 'Моделът клас :model трябва да се определя метод :method() връщайки настройки за \\':field\\' поле.',\n  ],\n  'widget' => [\n    'not_registered' => 'Името на класът за джаджата \\':name\\' не е било регистрирано',\n    'not_bound' => 'Джаджата с име на класът \\':name\\' не е бил свързан към контролера',\n  ],\n  'page' => [\n    'untitled' => 'Неозаглавен',\n    'access_denied' => [\n      'label' => 'Отказан достъп',\n      'help' => 'Вие нямате нужните права за да видите тази страница.',\n      'cms_link' => 'Върни се към администраторския-панел',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Частичната страница \\':name\\' не е намерена.',\n  ],\n  'account' => [\n    'sign_out' => 'Изход',\n    'login_placeholder' => 'вход',\n    'password_placeholder' => 'парола',\n    'enter_email' => 'Напиши своя имейл',\n    'email_placeholder' => 'имейл',\n    'apply' => 'Приложи',\n    'cancel' => 'Отказ',\n    'delete' => 'Изтрии',\n    'ok' => 'Потвърди',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Табло',\n    'widget_inspector_title' => 'Настойка на джаджи',\n    'widget_inspector_description' => 'Конфигуриране на джаджите за доклад',\n    'widget_columns_label' => 'Ширина :columns',\n    'widget_columns_description' => 'Ширина на джаджата, число между 1 и 10.',\n    'widget_columns_error' => 'Моля, въведете ширината на джаджа като число между 1 и 10.',\n    'columns' => '{1} column|[2,Inf] columns',\n    'widget_new_row_label' => 'Принудително добави нов ред',\n    'widget_new_row_description' => 'Поставете джаджа в нов ред.',\n    'widget_title_label' => 'Заглавие на джаджа',\n    'widget_title_error' => 'Заглавие на джаджа се изисква.',\n    'status' => [\n      'widget_title_default' => 'Състояние на системата',\n      'online' => 'на линия',\n      'maintenance' => 'в поддръжка',\n      'update_available' => '{0} актуализации налични!|{1} актуализация налична!|[2,Inf] актуализации налични!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Администратор',\n    'list_title' => 'Управление на администратори',\n    'new' => 'Нов администратор',\n    'first_name' => 'Име',\n    'last_name' => 'Фамилия',\n    'full_name' => 'Пълно име',\n    'email' => 'Имейл',\n    'groups' => 'Група',\n    'groups_comment' => 'Укажете към коя група принадлежи този акаунт.',\n    'avatar' => 'Картинка на профила',\n    'password' => 'Парола',\n    'password_confirmation' => 'Потвърди паролата',\n    'permissions' => 'Разрешения',\n    'account' => 'Потребителски профил',\n    'superuser' => 'Супер Потребител',\n    'superuser_comment' => 'Даване на този профил на неограничен достъп (права) до всички райони. ',\n    'send_invite' => 'Изпрати покана по имейл',\n    'send_invite_comment' => 'Изпраща приветствено съобщение, съдържащо информация за име и парола за вход.',\n    'delete_confirm' => 'Наистина ли искате да изтриете този администратор?',\n    'return' => 'Назад към списъка с администратори',\n    'allow' => 'Позволи',\n    'inherit' => 'Наследи',\n    'deny' => 'Откажи',\n    'group' => [\n      'name' => 'Група',\n      'name_field' => 'Име',\n      'description_field' => 'Описание',\n      'is_new_user_default_field' => 'Добавяне на нови администратори към тази група по подразбиране.',\n      'code_field' => 'Код',\n      'code_comment' => 'Въведете уникален код, ако искате да получите достъп до него с API.',\n      'list_title' => 'Управление на групи',\n      'new' => 'Нова група',\n      'delete_confirm' => 'Наистина ли искате да изтриете тази администраторска група?',\n      'return' => 'Назад към списъка с групи',\n      'users_count' => 'Потребители',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Няма удостоверен потребител, за да се зареди или запишат предпочитанията му.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Списък',\n    'search_prompt' => 'Търсене...',\n    'no_records' => 'Не са открити записи в тази гледка.',\n    'missing_model' => 'Режим на работа на списък в :class не разполага с дефиниран модел.',\n    'missing_column' => 'Все още няма дефиниции на колони за :columns.',\n    'missing_columns' => 'Списък използван в :class все още няма дефиниран списък колони',\n    'missing_definition' => 'Режим на работа на списък не съдържа колони за \\':field\\'.',\n    'behavior_not_ready' => 'Режим на работа на списък не беше зареден, проверете дали викате makeLists() във вашия контролер.',\n    'invalid_column_datetime' => 'Стойността на колона \\':column\\' не е дата/тайм обект, да не би да пропускате $dates препратка в Модела?',\n    'pagination' => 'Показаните записи: :from-:to от :total',\n    'prev_page' => 'Предишна страница',\n    'next_page' => 'Следваща страница',\n    'refresh' => 'Обнови',\n    'updating' => 'Обновяване...',\n    'loading' => 'Зареждане...',\n    'delete_selected' => 'Изтрии избраните',\n    'delete_selected_empty' => 'Не са избрани записи за изтриване.',\n    'delete_selected_confirm' => 'Изтриване на избраните записи?',\n    'delete_selected_success' => 'Успешно изтрити избраните записи.',\n    'column_switch_true' => 'Да',\n    'column_switch_false' => 'Не',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Кликнете на %s или плъзнете файла тук, за да го качите',\n  ],\n  'form' => [\n    'create_title' => 'Ново :name',\n    'update_title' => 'Промени :name',\n    'preview_title' => 'Прегледай :name',\n    'missing_id' => 'Форма ID на запис не е посочено.',\n    'missing_model' => 'Режим на работа на форма в :class не разполага с дефиниран модел.',\n    'missing_definition' => 'Режим на работа на форма не съдържа поле за \\':field\\'.',\n    'action_confirm' => 'Сигурни ли сте?',\n    'create' => 'Създай',\n    'create_and_close' => 'Създай и затвори',\n    'creating' => 'Създаване...',\n    'creating_name' => 'Създаване :name...',\n    'save' => 'Запази',\n    'save_and_close' => 'Запази и затвори',\n    'saving' => 'Запазване...',\n    'saving_name' => 'Запазване :name...',\n    'delete' => 'Изтрии',\n    'deleting' => 'Изтриване...',\n    'confirm_delete' => 'Наистина ли искате да изтриете този запис?',\n    'confirm_delete_multiple' => 'Наистина ли искате да изтриете избраните записи?',\n    'deleting_name' => 'Изтриване :name...',\n    'reset_default' => 'Възстанови по подразбиране',\n    'resetting' => 'Възстановяване',\n    'resetting_name' => 'Възстановяване :name',\n    'undefined_tab' => 'Разни',\n    'field_off' => 'Изключен',\n    'field_on' => 'Включен',\n    'add' => 'Добави',\n    'apply' => 'Приложи',\n    'cancel' => 'Отказ',\n    'close' => 'Затвори',\n    'confirm' => 'Потвърди',\n    'reload' => 'Презареди',\n    'complete' => 'Завърши',\n    'ok' => 'ОК',\n    'or' => 'или',\n    'confirm_tab_close' => 'Наистина ли искате да затворите раздела? Незапазените промени ще бъдат загубени.',\n    'behavior_not_ready' => 'Режим на работа на форма не беше зареден, проверете дали викате initForm() във вашия контролер.',\n    'preview_no_files_message' => 'Все още няма качени файлове.',\n    'preview_no_record_message' => 'Не е избран запис.',\n    'select' => 'Избери',\n    'select_all' => 'Избери всички',\n    'select_none' => 'изберете никой',\n    'insert_row' => 'Вмъкни ред',\n    'insert_row_below' => 'Вмъкни ред По-долу',\n    'delete_row' => 'Изтрии ред',\n    'concurrency_file_changed_title' => 'Файлът беше променен',\n    'concurrency_file_changed_description' => 'Файлът, който редактирате е бил променен на диска от друг потребител. Можете да презаредите файла и да загубите вашите промени или замени файла на диска.',\n    'return_to_list' => 'Назад към списъка',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Намери запис',\n  ],\n  'relation' => [\n    'missing_config' => 'Режим на работа на връзки няма никакви настройки за \\':config\\'.',\n    'missing_definition' => 'Режим на работа на връзки няма дефиниция за \\':field\\'.',\n    'missing_model' => 'Режим на работа на връзки използван в :class не разполага с дефиниран модел.',\n    'invalid_action_single' => 'Това действие не може да се извърши на единствена връзка',\n    'invalid_action_multi' => 'Това действие не може да се извърши на множество връзки.',\n    'help' => 'Щракнете върху елемент за добавяне',\n    'add' => 'Добави',\n    'link_selected' => 'Вържи избрани',\n    'cancel' => 'Отказ',\n    'close' => 'Затвори',\n    'create' => 'Създай',\n    'update' => 'Актуализация',\n    'preview' => 'Предварителен преглед',\n    'remove_name' => 'Премахване :name',\n    'delete_name' => 'Изтривам :name',\n    'link' => 'Вържи',\n    'unlink_name' => 'Прекратяване на връзката :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Пренареждане на записи',\n    'no_records' => 'Не са налични записи, за да сортирате.',\n  ],\n  'model' => [\n    'name' => 'Модел',\n    'not_found' => 'Модел \\':class\\' със ИД :id не може д абъде намерено.',\n    'missing_id' => 'Не е посочено ИД за търсене на записи в Модел ID.',\n    'missing_relation' => 'Модел \\':class\\' не съдържа определение за \\':relation\\'.',\n    'missing_method' => 'Модел \\':class\\'не съдържа метод \\':method\\'.',\n    'invalid_class' => 'Модел :model използван в :class не е валиден, той трябва да наследи \\\\Model клас.',\n    'mass_assignment_failed' => 'Масовото назначаване Mass assignment се провали за Модела атрибут \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Съвети за конфигурацията на системата',\n    'tips_description' => 'Има проблематични въпроси, на които трябва да се обърне внимание, за да конфигурирате системата правилно.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Моите Настройки',\n    'menu_description' => 'Настройки свързани с вашия администраторски профил',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'primary_light' => 'Първичен (Светъл)',\n    'primary_dark' => 'Първичен (Тъмен)',\n    'secondary_light' => 'Вторичен (Светъл)',\n    'secondary_dark' => 'Вторичен (Тъмен)',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'всичко',\n  ],\n  'import_export' => [\n    'upload_csv_file' => '1. Качи CSV файл',\n    'import_file' => 'Внеси файл',\n    'first_row_contains_titles' => 'Първия ред съдържа заглавията на колините ',\n    'first_row_contains_titles_desc' => 'Оставете това тикче ако на първия ред в CSV се използват като заглавията на колоните.',\n    'match_columns' => '2. Съчетайте колоните от файла с полетата на базата',\n    'file_columns' => 'Колони от файла',\n    'database_fields' => 'Полета на базата',\n    'set_import_options' => '3. Задаване на опции за внасяне',\n    'export_output_format' => '1. Изнесете изходен формат',\n    'file_format' => 'Формат за файла',\n    'standard_format' => 'Стандартен формат',\n    'custom_format' => 'Персонализиран формат',\n    'delimiter_char' => 'Разделителeн знак',\n    'enclosure_char' => 'Затварящ знак',\n    'escape_char' => 'Специален знак за избягване',\n    'select_columns' => '2. Изберете колони за изнасяне',\n    'columns' => 'Колони',\n    'set_export_options' => '3. Задайте опций за изнасяне',\n    'import_progress' => 'Прогрес на внасянето',\n    'processing' => 'Обработване',\n    'import_error' => 'Грешка при внасяне',\n    'export_progress' => 'Прогрес на изнасянето',\n    'export_error' => 'Грешка при изнасяне',\n  ],\n  'permissions' => [\n    'manage_media' => 'Управление на медия',\n  ],\n  'mediafinder' => [\n    'label' => 'Медия',\n    'default_prompt' => 'Кликнете върху %s бутон за да намерите медия',\n  ],\n  'media' => [\n    'menu_label' => 'Медия',\n    'upload' => 'Качи',\n    'move' => 'Премести',\n    'delete' => 'Изтрии',\n    'add_folder' => 'Добави папка',\n    'search' => 'Търсене',\n    'display' => 'Показване',\n    'filter_everything' => 'Всичко',\n    'filter_images' => 'Изображения',\n    'filter_video' => 'Видео',\n    'filter_audio' => 'Аудио',\n    'filter_documents' => 'Документи',\n    'library' => 'Библиотека',\n    'size' => 'Размер',\n    'title' => 'Заглавие',\n    'last_modified' => 'Последно модифициран',\n    'public_url' => 'Обществен URL',\n    'click_here' => 'Натисни тук',\n    'thumbnail_error' => 'Грешка при генериране на умалено изображение.',\n    'return_to_parent' => 'Върнете се към основната папка',\n    'return_to_parent_label' => 'Нагоре ..',\n    'nothing_selected' => 'Нищо не е избрано.',\n    'multiple_selected' => 'Множество предмети избрани.',\n    'uploading_file_num' => 'Качване: брой на файл(ове)...',\n    'uploading_complete' => 'Качването завършено',\n    'uploading_error' => 'Качването неуспешно',\n    'order_by' => 'Подредени по',\n    'folder' => 'Папка',\n    'no_files_found' => 'Не са намерени файлове по заявката ви.',\n    'delete_empty' => 'Моля изберете елементи, за които да бъдат изтрити.',\n    'delete_confirm' => 'Наистина ли искате да изтриете избрания елемент(и)?',\n    'error_renaming_file' => 'Грешка при преименуването на елемента.',\n    'new_folder_title' => 'Нова папка',\n    'folder_name' => 'Име на папка',\n    'error_creating_folder' => 'Грешка при създаване на папка',\n    'folder_or_file_exist' => 'Папка или файл с посоченото име вече съществува.',\n    'move_empty' => 'Моля изберете елементи които да бъдат преместени.',\n    'move_popup_title' => 'Преместване на файлове или папки',\n    'move_destination' => 'Дестинационна папка',\n    'please_select_move_dest' => 'Моля изберете папка за дестинация.',\n    'move_dest_src_match' => 'Моля, изберете друга папка за дестинация.',\n    'empty_library' => 'Медийната библиотека е празна. Качете файлове, или създайте папки, за да започнете.',\n    'insert' => 'Вмъквам',\n    'crop_and_insert' => 'Отрежи и вмъкни',\n    'select_single_image' => 'Моля, изберете едно изображение.',\n    'selection_not_image' => 'Избраният елемент не е изображение.',\n    'restore' => 'Отмяна на всички промени',\n    'resize' => 'Преоразмеряване...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Фиксиран  съотношение',\n    'selection_mode_fixed_size' => 'Фиксиран  размер',\n    'height' => 'Височина',\n    'width' => 'Широчина',\n    'selection_mode' => 'Режимът на избиране (селекция)',\n    'resize_image' => 'Преоразмеряване изображение',\n    'image_size' => 'Размер на изображение:',\n    'selected_size' => 'Избран:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/bg.json",
    "content": "{\n  \"Update\": \"Актуализация\",\n  \"Cancel\": \"Отмени\",\n  \"You are viewing as\": \"Вие гледате като\",\n  \"Preview Role\": \"Преглед на ролята\",\n  \"This lets you test the actions this role can perform.\": \"Това ви позволява да тествате действията, които тази роля може да изпълнява.\",\n  \"View As Role\": \"Преглед като роля\",\n  \"Return to Role Settings\": \"Върнете се към настройките на ролята\",\n  \"Password must have a minimum of length of :min characters\": \"Паролата трябва да има минимална дължина от :min символи\",\n  \"Password must contain at least one uppercase character.\": \"Паролата трябва да съдържа поне една главна буква.\",\n  \"Password must contain at least one lowercase character.\": \"Паролата трябва да съдържа поне един знак с малки букви.\",\n  \"Password must contain at least one number.\": \"Паролата трябва да съдържа поне една цифра.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Паролата трябва да съдържа поне един небуквено-цифров знак.\",\n  \"Welcome to your Administration Area, :name\": \"Добре дошли във вашата административна зона, :name\",\n  \"Duplicate\": \"Дублиране\",\n  \"Expand\": \"Разгънете\",\n  \"Collapse\": \"Свиване\",\n  \"Move Up\": \"Премести се нагоре\",\n  \"Move Down\": \"Премести надолу\",\n  \"Remove\": \"Премахване\",\n  \"Manage Item\": \"Управление на артикула\",\n  \"Clear Filters\": \"Изчистване на филтрите\",\n  \"Filter Setup\": \"Настройка на филтъра\",\n  \"Apply\": \"Приложи\",\n  \"Clear\": \"Изчисти\",\n  \"is equal to\": \"е равно на\",\n  \"is between\": \"е между\",\n  \"contains\": \"съдържа\",\n  \"is before\": \"е преди\",\n  \"is after\": \"е след\",\n  \"is greater than\": \"е по-голямо от\",\n  \"is less than\": \"е по-малко от\",\n  \"1. Export output format\": \"1. Изнесете изходен формат\",\n  \"File Format\": \"Формат за файла\",\n  \"Delimiter Character\": \"Разделителeн знак\",\n  \"Enclosure Character\": \"Затварящ знак\",\n  \"Escape Character\": \"Специален знак за избягване\",\n  \"2. Select columns to export\": \"2. Изберете колони за изнасяне\",\n  \"Columns\": \"Колони\",\n  \"3. Set export options\": \"3. Задайте опций за изнасяне\",\n  \"CSV Custom\": \"Персонализиран формат\",\n  \"1. Upload an Import File\": \"1. Качи CSV файл\",\n  \"Import File\": \"Внеси файл\",\n  \"File Encoding\": \"Кодиране на файлове\",\n  \"First row contains column titles\": \"Първия ред съдържа заглавията на колините \",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Оставете това тикче ако на първия ред в CSV се използват като заглавията на колоните.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Съчетайте колоните от файла с полетата на базата\",\n  \"File columns\": \"Колони от файла\",\n  \"Database fields\": \"Полета на базата\",\n  \"3. Set Import Options\": \"3. Задаване на опции за внасяне\",\n  \"Export progress\": \"Прогрес на изнасянето\",\n  \"Processing\": \"Обработване\",\n  \"Import progress\": \"Прогрес на внасянето\",\n  \"Import error\": \"Грешка при внасяне\",\n  \"Export error\": \"Грешка при изнасяне\",\n  \"Column preview\": \"Преглед колона\",\n  \"Column\": \"Колона\",\n  \"Disable\": \"Деактивирайте\",\n  \"Enable\": \"Активирайте\",\n  \"Delete\": \"Изтривам\",\n  \"Export\": \"Експортиране\",\n  \"Import\": \"Импортиране\",\n  \"Select Action\": \"Изберете Действие\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Моля, създайте нов акаунт за влизане в Административната област.\",\n  \"First Name\": \"Първо име\",\n  \"Last Name\": \"Фамилия\",\n  \"Email Address\": \"Имейл адрес\",\n  \"Pick a Username\": \"Изберете потребителско име\",\n  \"Enter New Password\": \"Въведете нова парола\",\n  \"Confirm Password\": \"Потвърди парола\",\n  \"Create Account\": \"Създай акаунт\",\n  \"Getting Ready\": \"Приготвям се\",\n  \"Just a few more minutes\": \"Само още няколко минути\",\n  \"Migrating Database\": \"Мигриране на база данни\",\n  \"Access the Backend Panel\": \"Достъп до админ панел\",\n  \"View Backend During Maintenance\": \"Преглед на бекенда по време на поддръжка\",\n  \"Perform Software Updates\": \"Извършване на актуализации на софтуера\",\n  \"In Maintenance\": \"В поддръжка\",\n  \"The site is currently in maintenance mode, please check back later.\": \"В момента сайтът е в режим на поддръжка, моля, проверете отново по-късно.\",\n  \"Dashboard\": \"Табло\",\n  \"Administrators\": \"Администратори\",\n  \"Manage Admins\": \"Управление на администратори\",\n  \"Create Admins\": \"Създаване на администратори\",\n  \"Moderate Admins\": \"Умерени администратори\",\n  \"Manage account suspension and ban admin accounts\": \"Управлявайте спирането на акаунти и забраняването на администраторски акаунти\",\n  \"Role Permissions\": \"Управление на ролите\",\n  \"Team Groups\": \"Групи\",\n  \"Manage Other Admins\": \"Управление на други администратори\",\n  \"Allow users to reset passwords and update emails.\": \"Позволява нулиране на пароли и актуализиране на имейли\",\n  \"Delete Admins\": \"Изтриване на администратори\",\n  \"Preferences\": \"Предпочитания\",\n  \"Settings\": \"Настройки\",\n  \"Background Color\": \"Цвят на фона\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Позволете на потребителите да създават нови роли и да редактират или изтриват роли, по-ниски от най-високата им роля.\",\n  \"Save Changes\": \"Запазите промените\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Този дневник показва списък на успешните опити за влизане от администраторите. Записите се съхраняват в продължение на общо :days дни.\",\n  \"Access Log\": \"Дневник (регистър) на влизанията\",\n  \"View a list of successful back-end user sign ins.\": \"Преглед на списък с успешни влизания на потребители в администраторския-панел.\",\n  \"ID\": \"ID номер\",\n  \"Date & Time\": \"Дата и Час\",\n  \"Type\": \"Тип\",\n  \"IP address\": \"ИП адрес\",\n  \"Username\": \"Потребителско име\",\n  \"Login\": \"Вход\",\n  \"First name\": \"Име\",\n  \"Last name\": \"Фамилия name\",\n  \"Email\": \"Имейл\",\n  \"A custom schema is used for this file format.\": \"За този файлов формат се използва персонализирана схема.\",\n  \"Select\": \"Изберете\",\n  \"Replace\": \"Сменете\",\n  \"and\": \"и\",\n  \"Go\": \"Отивам\",\n  \"Go to page\": \"Отиди на страница\",\n  \"Copy to Clipboard\": \"Копиране в клипборда\",\n  \"Reveal Contents\": \"Разкриване на съдържанието\",\n  \"Selected Site\": \"Избран сайт\",\n  \"Use Emmet abbreviations\": \"Използвайте съкращенията на Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Не съществува запис за избрания сайт. Създай един?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Въведените от вас данни не съответстват на нашите записи. Моля, проверете отново и опитайте отново.\",\n  \"Administration Area\": \"Администраторски Панел\",\n  \"Password Reset\": \"Смяна на паролата\",\n  \"Please enter a new password.\": \"Въведи нова парола\",\n  \"Password\": \"Парола\",\n  \"Password Restore\": \"Възстановяване на парола\",\n  \"Please enter your login to restore the password.\": \"Напиши своя акаунт\",\n  \"A user could not be found with a login value of ':login'\": \"Не е намерен акаунт със име ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Беше изпратен имейл до вашата поща със инструкций за въстановяване на паролата.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Невалиден данни за нулиране на паролата. Моля, опитайте отново!\",\n  \"Unable to reset your password!\": \"Неуспешно нулиране на паролата!\",\n  \"Password has been reset. You may now sign in.\": \"Вашата парола е  успешно нулирана. Сега може да се логнете.\",\n  \"Restore\": \"Възстановяване\",\n  \"Reset\": \"Нулиране\",\n  \"Stay logged in\": \"Останете влезли\",\n  \"Forgot password?\": \"Забравена парола?\",\n  \"Global Editor Settings\": \"Глобални настройки на редактора\",\n  \"Manage Widgets\": \"Управление на джаджи\",\n  \"Add Widget\": \"Добави джаджа\",\n  \"Set the current layout as the default?\": \"Задаване на текущото оформление като стандартно?\",\n  \"Make Default\": \"Направи по подразбиране\",\n  \"Reset layout back to default?\": \"Възстановяване на оформлението обратно по подразбиране?\",\n  \"Reset Layout\": \"Нулиране на оформлението\",\n  \"Widget\": \"Джаджа\",\n  \"please select\": \"моля изберете\",\n  \"Width\": \"Широчина\",\n  \"full width\": \"Пълна ширина\",\n  \"Create Widgets\": \"Създавайте Widgets\",\n  \"not equal to\": \"не е равно на\",\n  \"Light Mode\": \"Светъл режим\",\n  \"Dark Mode\": \"Тъмен режим\",\n  \"Auto Mode\": \"Автоматичен режим\",\n  \"OS Default\": \"OS по подразбиране\",\n  \"Create a Custom Palette\": \"Създайте персонализирана палитра\",\n  \"Custom Palette\": \"Персонализирана палитра\",\n  \"Primary Color\": \"Основен цвят\",\n  \"Secondary Color\": \"Вторичен цвят\",\n  \"Selection Color\": \"Цвят за избор\",\n  \"Nav Text\": \"Навигационен текст\",\n  \"Nav Background\": \"Навигационен фон\",\n  \"Sidebar Text\": \"Текст на страничната лента\",\n  \"Sidebar Background\": \"Фон на страничната лента\",\n  \"Sidebar Active Text\": \"Активен текст на страничната лента\",\n  \"Sidebar Active Background\": \"Активен фон на страничната лента\",\n  \"Sidebar Hover Background\": \"Фон на мишката върху страничната лента\",\n  \"Settings Text\": \"Настройки Текст\",\n  \"Settings Background\": \"Настройки Фон\",\n  \"Settings Item Background\": \"Настройки Елемент Фон\",\n  \"Settings Active Color\": \"Настройки Активен цвят\",\n  \"Settings Active Background\": \"Настройки Активен фон\",\n  \"Settings Hover Background\": \"Настройки Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"Това име се показва в областта за заглавието на администраторския-панел.\",\n  \"App Name\": \"Име\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Това име се показва на екрана за вход в администраторския-панел.\",\n  \"App Tagline\": \"Лозунг\",\n  \"Brand\": \"Марка\",\n  \"Upload a custom logo to use in the back-end.\": \"Качете ваше лого което да използвате за администраторския-панел.\",\n  \"Logo\": \"Лого\",\n  \"Upload a custom favicon to use in the back-end\": \"Качете персонализирана фавикона, която да използвате в задната част\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Лого за навигация\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Заменя връзката на таблото за управление с персонализирано лого в навигацията.\",\n  \"Dashboard Icon\": \"Икона на таблото\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Използвайте персонализирано изображение за иконата на таблото (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Това съобщение се показва на екрана за вход за задния край.\",\n  \"Welcome Message\": \"Поздравително съобщение\",\n  \"Login Page\": \"Страница за вход\",\n  \"Background Type\": \"Тип фон\",\n  \"Flat Color\": \"Плосък цвят\",\n  \"Wallpaper\": \"Тапет\",\n  \"Wallpaper Size\": \"Размер на тапета\",\n  \"Auto\": \"Автоматичен\",\n  \"Cover\": \"Покрийте\",\n  \"Background Wallpaper Image\": \"Фоново тапетно изображение\",\n  \"Image\": \"Изображение\",\n  \"Random Autumn Images\": \"Случайни есенни изображения\",\n  \"Custom Image\": \"Персонализирано изображение\",\n  \"Login Page Image\": \"Изображение на страницата за вход\",\n  \"Colors\": \"Цветове\",\n  \"Color Mode\": \"Цветен режим\",\n  \"Color Preset\": \"Предварително зададен цвят\",\n  \"Menu Style\": \"Стил на менюто\",\n  \"Navigation\": \"Навигация\",\n  \"Custom Stylesheet\": \"Персонализиран стилове\",\n  \"Styles\": \"Стилове\",\n  \"Inline\": \"В редица\",\n  \"Text\": \"Текст\",\n  \"Tiles\": \"Плочки\",\n  \"Collapsed\": \"Сгънати\",\n  \"Icons\": \"Икони\",\n  \"Left Side\": \"Лява страна\",\n  \"Add New Item\": \"Добавяне на нов артикул\",\n  \"Link Color\": \"Цвят на връзката\",\n  \"Current Password\": \"Настояща парола\",\n  \"New Password\": \"Нова парола\",\n  \"Current password does not match. Please try again!\": \"Текущата парола не съвпада. Моля, опитайте отново!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Вашата парола е изтекла, моля, създайте нова от съображения за сигурност.\",\n  \"Region\": \"Регион\",\n  \"Locale\": \"Език\",\n  \"Select your desired locale for language use.\": \"Изберете желаното местоположение за използване на език.\",\n  \"Timezone\": \"Часова зона\",\n  \"Adjust displayed dates to this timezone.\": \"Коригирайте показаните дати към тази часова зона.\",\n  \"Code Editor\": \"Редактор на кодове\",\n  \"Color Scheme\": \"Цветова схема\",\n  \"Word Wrap\": \"Събиране (разгъване) на текста\",\n  \"Off\": \"Изкл\",\n  \"40 Characters\": \"40 знака\",\n  \"80 Characters\": \"80 знака\",\n  \"Fluid\": \"течност\",\n  \"Font Size\": \"Размер шрифт\",\n  \"Tab Size\": \"Размер на табулацията\",\n  \"Code Folding\": \"Код сгъване\",\n  \"Mark begin\": \"Маркирайте начало\",\n  \"Mark begin and end\": \"Маркирайте начало и край\",\n  \"Autocompletion\": \"Автоматично довършване\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Основно автоматично довършване (Ctrl + интервал)\",\n  \"Live Autocompletion\": \"Автоматично довършване на живо\",\n  \"Show gutter\": \"Покажи gutter\",\n  \"Highlight active line\": \"Маркирайте активната линия\",\n  \"Automatically close tags\": \"Автоматично затваряне на тагове и специални символи\",\n  \"Indent using tabs\": \"Отстъпи използващи раздели\",\n  \"Show indent guides\": \"Показване на водачи за отстъп\",\n  \"Show invisible characters\": \"Покажи невидими знаци\",\n  \"Show print margin\": \"Показване на полето за печат\",\n  \"Custom styles to include in the HTML editor.\": \"Персонализирани стилове за включване в HTML редактора.\",\n  \"Markup Styles\": \"Стилове за маркиране\",\n  \"Paragraph Formats\": \"Формати на абзаци\",\n  \"Markup Classes\": \"Маркиращи класове\",\n  \"Tag Name\": \"Име на етикета\",\n  \"Label\": \"Етикет\",\n  \"Paragraph\": \"Параграф\",\n  \"Class Name\": \"Име на класа\",\n  \"Link\": \"Връзка\",\n  \"Table\": \"Таблица\",\n  \"Table Cell\": \"Таблица клетка\",\n  \"Allowed Tags\": \"Позволени етикети\",\n  \"The list of allowed tags.\": \"Списък с разрешени тагове.\",\n  \"Markup Tags\": \"Етикети за маркиране\",\n  \"Allowed Empty Tags\": \"Позволени празни тагове\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Списъкът с етикети, които не се премахват, когато нямат съдържание вътре.\",\n  \"Do Not Wrap Tags\": \"Не увивайте етикети\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Списъкът с тагове, които не трябва да се обвиват в блокови тагове.\",\n  \"Remove Tags\": \"Премахване на етикети\",\n  \"The list of tags that are removed together with their content.\": \"Списъкът с тагове, които се премахват заедно със съдържанието им.\",\n  \"Line Breaker Tags\": \"Етикети за прекъсване на редове\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Списъкът с тагове, които се използват за поставяне на елемент за прекъсване на ред между.\",\n  \"Toolbar Buttons\": \"Бутони на лентата с инструменти\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Бутоните на лентата с инструменти, които да се показват в Rich Editor по подразбиране.\",\n  \"Insert a preset toolbar button configuration\": \"Вмъкнете предварително зададена конфигурация на бутон на лентата с инструменти\",\n  \"Allowed Attributes\": \"Позволени атрибути\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Списъкът с разрешени HTML атрибути в допълнение към нормалните допустими стойности.\",\n  \"Enable code snippets (Tab)\": \"Активиране на кодови фрагменти (Tab)\",\n  \"Title\": \"Заглавие\",\n  \"Description\": \"Описание\",\n  \"Attachment\": \"Прикачен файл\",\n  \"Attachment URL\": \"Адрес на прикачен файл\",\n  \"Add a title and description for this attachment.\": \"Добавете заглавие и описание за този прикачен файл.\",\n  \"Upload\": \"Качи\",\n  \"Are you sure?\": \"Сигурни ли сте?\",\n  \"Delete Selected\": \"Изтриване на избраните\",\n  \"Upload Error\": \"Грешка при качване\",\n  \"Remove File\": \"Премахни файл\",\n  \"Show Light Switch\": \"Show Light Switch\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Позволете на потребителите да превключват цветовия режим от навигацията.\",\n  \"Create :name\": \"Създай :name\",\n  \"Update :name\": \"Актуализация :name\",\n  \"Add :name\": \"Добави :name\",\n  \"Link :name\": \"Връзка :name\",\n  \"Unlink\": \"Прекратяване на връзката\",\n  \"Preview :name\": \"Предварителен преглед :name\",\n  \"Link a New :name\": \"Вържи ново :name\",\n  \"Add a New :name\": \"Добави ново :name\",\n  \"Related :name Data\": \"Свързани :name данни\",\n  \":name Created\": \"Това :name беше създадено успешно.\",\n  \":name Updated\": \"Това :name беше актуализирано успешно.\",\n  \":name Deleted\": \"Това :name беше изтрито успешно.\",\n  \":name Added\": \":name - успешно добавено\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"Форма запис с ID на :id не може да бъде намерен.\",\n  \"Remove Selected\": \"Изтрий избраните\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Преглед на сайта\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Управление на админ-панелана: администратори, групи и разрешения.\",\n  \"Define permissions for administrators based on their role.\": \"Определете разрешенията за администраторите въз основа на тяхната роля.\",\n  \"Add administrators to groups used for notifications and features.\": \"Добавете администратори към групите, използвани за известия и функции.\",\n  \"Branding & Appearance\": \"Персонализирайте администраторския-панел\",\n  \"Customize the administration area such as name, colors and logo.\": \"Персонализирайте администраторския-панел, като име, цветове и лого.\",\n  \"Editor Settings\": \"Редактор Код предпочитания и настройки\",\n  \"Change the global editor preferences.\": \"Персонализирайте вашите предпочитания на редактора на код, като например размера на шрифта и цветова схема.\",\n  \"My Account\": \"Моят профил\",\n  \"Update your account details such as name, email address and password.\": \"Обнови данните на профила ви, като име, имейл адрес и парола.\",\n  \"Backend Preferences\": \"Администраторски-панел предпочитания\",\n  \"Manage your account preferences such as desired language.\": \"Управлявайте предпочитанията на профила си като например желания език.\",\n  \"security login\": \"вход за сигурност\",\n  \"List Setup\": \"Настройка на списък\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Използвайте тикчетата, за да изберете колони, които искате да видите в списъка. Можете да промените позицията на колони, като ги плъзнете нагоре или надолу.\",\n  \"Records Per Page\": \"Записи на страница\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Изберете брой на записи за показване на страница. Моля, имайте предвид, че голям брой записи на една страница може да забави работата на страницата.\",\n  \"Reset to Default\": \"Възстанови по подразбиране\",\n  \"Add Selected\": \"Добави избрани\",\n  \"Create & Close\": \"Създай и Затвори\",\n  \"Creating :name...\": \"Създаване :name...\",\n  \"Save & Close\": \"Запиши и затвори\",\n  \"Saving :name...\": \"Записва се :name...\",\n  \"Delete this record?\": \"Да се изтрие ли този запис?\",\n  \"Deleting :name...\": \"Изтрива се :name...\",\n  \"Loading...\": \"Зареждане...\",\n  \"Complete\": \"Завършено\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Моля, определете поне една колона за екпортиране.\",\n  \"Missing column identifier\": \"Липсващ идентификатор на колона\",\n  \"Unknown column\": \"Неизвестна колона\",\n  \"Please specify some columns to import.\": \"Моля, определете поне една колона за импортиране.\",\n  \"Please match some columns first.\": \"Моля, първо съпоставете колоните.\",\n  \"Please specify a match for the required field :label.\": \"Моля, посочете съответствие за задължителното поле :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Кодирането на изходния файл не е разпознато. Моля, изберете опцията за персонализиран файлов формат с правилното кодиране, за да импортирате вашия файл.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"Процес при износ на файла завърши успешно!\",\n  \"The browser will now redirect to the file download.\": \"Браузърът трябва да ви пренасочи автоматично за да свалите файла.\",\n  \"Ignore this column\": \"Игнорирай тази колона\",\n  \"Drop column here...\": \"Пуснете колоната тук...\",\n  \"Please upload a valid CSV file.\": \"Моля, качете валиден CSV файл\",\n  \"Created\": \"Създаден\",\n  \"Updated\": \"Обновен\",\n  \"Skipped\": \"Пропуснат\",\n  \"Warnings\": \"Предупреждения\",\n  \"Errors\": \"Грешки\",\n  \"Skipped Rows\": \"Пропуснати редове\",\n  \"Show Ignored Columns\": \"Покажи игнорираните колони\",\n  \"Auto Match Columns\": \"Автоматично обединяване на колони\",\n  \"File not found\": \"Файлът не е намерен\",\n  \"There was no data supplied to export\": \"Няма предоставени данни за изнасяне\",\n  \"Created At\": \"Създадено в\",\n  \"Updated At\": \"Актуализирано в\",\n  \"Deleted At\": \"Изтрито в\",\n  \"Created By\": \"Създадено от\",\n  \"Updated By\": \"Актуализирано от\",\n  \"Deleted By\": \"Изтрито от\",\n  \"Create Dashboard\": \"Създаване на табло за управление\",\n  \"Edit Dashboard\": \"Редактиране на таблото за управление\",\n  \"The dashboard was successfully created.\": \"Таблото за управление беше създадено успешно.\",\n  \"The dashboard was successfully updated.\": \"Таблото за управление беше успешно актуализирано.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"Това е системно генерирано табло и не може да бъде изтрито.\",\n  \"Dashboard Name\": \"Име на таблото за управление\",\n  \"Please enter the dashboard name\": \"Моля, въведете името на таблото за управление\",\n  \"Please enter the dashboard code\": \"Моля, въведете кода на таблото за управление\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"Кодът може да съдържа само латински букви, цифри и тирета\",\n  \"Icon\": \"Икона\",\n  \"Please select an icon\": \"Моля, изберете икона\",\n  \"Global Access\": \"Глобален достъп\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Таблата с активиран глобален достъп могат да бъдат преглеждани от други потребители.\",\n  \"Hide Interval\": \"Скриване на интервала\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Отбележете това, ако таблото за управление не използва инструмента за избор на диапазон от дати.\",\n  \"API Code\": \"API код\",\n  \"A unique code to refer to this dashboard using external systems.\": \"Уникален код за препратка към това табло за управление чрез външни системи.\",\n  \"Select Dashboard\": \"Изберете табло за управление\",\n  \"Value\": \"Стойност\",\n  \"Difference with the previous period\": \"Разлика с предходния период\",\n  \"Group\": \"Група\",\n  \"Compare Totals\": \"Сравнете общите суми\",\n  \"Interval\": \"Интервал\",\n  \"Date\": \"Дата\",\n  \"You don't have access to any dashboards.\": \"Нямате достъп до никакви табла за управление.\",\n  \"No dashboards have been set up yet.\": \"Все още не са настроени табла за управление.\",\n  \"Import Dashboard\": \"Табло за импортиране\",\n  \"The requested dashboard could not be found.\": \"Заявеното табло за управление не можа да бъде намерено.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Режимът за отстраняване на грешки е активиран. Това не се препоръчва за производствени инсталации.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"URL адресът :name на backend-а е твърде общ. Моля, задайте нещо по-уникално.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Намерен е акаунт с общо потребителско име (login:name). Моля, преименувайте този администраторски акаунт.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Разширението на PHP :name не е инсталирано. Моля инсталирайте тази библиотека и активирайте разширението.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Плъгинът :name е зависимост, но не е инсталиран. Моля, инсталирайте този плъгин.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Директория :name или нейните поддиректории не е достъпна за писане от PHP (Няма права). Моля, задайте съответните разрешения за уеб сървъра на тази директория (папка).\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Вашият акаунт няма разрешения за създаване или редактиране на табла за управление.\",\n  \"No records found\": \"Няма намерени записи\",\n  \"Apply Changes\": \"Прилагане на промените\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Грешка при зареждане на данните от уиджета. Вижте конзолата за грешки на браузъра за подробности.\",\n  \"Configure the widget\": \"Конфигуриране на джаджата\",\n  \"to manage its settings.\": \"за да управлявате настройките му.\",\n  \"Includes\": \"Включва\",\n  \"Excludes\": \"Изключва\",\n  \"Manage Roles\": \"Управление на ролите\",\n  \"Manage Groups\": \"Групи\",\n  \"Customize Backend\": \"Персонализирайте администраторския-панел\"\n}"
  },
  {
    "path": "modules/backend/lang/ca/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'El tipus de camp :type utilitzat és invàlid.',\n    'options_method_invalid_model' => 'L\\'atribut \\':field\\' no resol a un model vàlid. Intenta especificar explícitament el mètode d\\'opcions per la classe de model :model.',\n    'options_method_not_exists' => 'La classe de model :model ha de definir un mètode :method() que retorni opcions pel camp de formulari \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'No s\\'ha registrat un widget amb el nom de classe \\':name\\'',\n    'not_bound' => 'No s\\'ha vinculat al controlador un widget amb el nom de classe \\':name\\'',\n  ],\n  'page' => [\n    'untitled' => 'Sense títol',\n    'access_denied' => [\n      'label' => 'Accés denegat',\n      'help' => 'No tens els permisos necessaris per veure aquesta pàgina.',\n      'cms_link' => 'Tornar al panell d\\'administració',\n    ],\n    'no_database' => [\n      'label' => 'No es troba la base de dades',\n      'help' => 'Es requereix una base de dades per accedir al panell d\\'administració. Comprova que la base de dades estigui configurada i migrada abans de tornar-ho a intentar.',\n      'cms_link' => 'Tornar a la pàgina principal',\n    ],\n    'invalid_token' => [\n      'label' => 'Token de seguretat invàlid',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'El parcial \\':name\\' no s\\'ha trobat.',\n  ],\n  'account' => [\n    'signed_in_as' => 'Connectat com :full_name',\n    'sign_out' => 'Sortir',\n    'login_placeholder' => 'usuari',\n    'password_placeholder' => 'contrasenya',\n    'enter_email' => 'Introdueix el teu email',\n    'email_placeholder' => 'email',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancel·lar',\n    'delete' => 'Eliminar',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Escriptori',\n    'widget_inspector_title' => 'Configuració de widget',\n    'widget_inspector_description' => 'Configurar el widget',\n    'widget_columns_label' => 'Ample :columns',\n    'widget_columns_description' => 'L\\'ample del widget, un número entre 1 i 10.',\n    'widget_columns_error' => 'Si us plau introdueix l\\'ample del widget amb un número entre 1 i 10.',\n    'columns' => '{1} columna|[2,Inf] columnes',\n    'widget_new_row_label' => 'Forçar nova fila',\n    'widget_new_row_description' => 'Posar el widget en una nova fila.',\n    'widget_title_label' => 'Títol del widget',\n    'widget_title_error' => 'El títol del widget és obligatori.',\n    'reset_layout_success' => 'La disposició s\\'ha reiniciat',\n    'make_default_success' => 'La disposició actual és ara la disposició per defecte.',\n    'collapse_all' => 'Contraure tots',\n    'expand_all' => 'Expandir tots',\n    'status' => [\n      'widget_title_default' => 'Estat del sistema',\n      'update_available' => '{0} actualitzacions disponibles!|{1} actualització disponible!|[2,Inf] actualitzacions disponibles!',\n      'updates_pending' => 'Actualitzacions de software pendents',\n      'updates_nil' => 'El software està actualitzat',\n      'updates_link' => 'Actualitzar',\n      'warnings_pending' => 'Alguns problemes requereixen atenció',\n      'warnings_nil' => 'No hi ha avisos per mostrar',\n      'warnings_link' => 'Veure',\n      'core_build' => 'Versió del sistema',\n      'event_log' => 'Registre d\\'esdeveniments',\n      'request_log' => 'Registre de peticions',\n      'app_birthday' => 'En línia des de',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Benvingut',\n      'welcome_back_name' => 'Benvingut de nou a :app, :name.',\n      'welcome_to_name' => 'Benvingut a :app, :name.',\n      'first_sign_in' => 'Aquest és el primer cop que accedeixes.',\n      'last_sign_in' => 'L\\'últim cop que vas accedir va ser',\n      'view_access_logs' => 'Veure els registres d\\'accés',\n      'nice_message' => 'Que tinguis un gran dia!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrador',\n    'list_title' => 'Gestionar Administradors',\n    'new' => 'Nou Administrador',\n    'first_name' => 'Nom',\n    'last_name' => 'Cognom',\n    'full_name' => 'Nom complet',\n    'email' => 'Email',\n    'role_field' => 'Rol',\n    'role_comment' => 'Els rols defineixen els permisos d\\'usuari, que poden ser invalidats a nivell d\\'usuari, a la pestanya de permisos.',\n    'groups' => 'Grups',\n    'groups_comment' => 'Especificar a quins grups pertany aquest compte.',\n    'avatar' => 'Avatar',\n    'password' => 'Contrasenya',\n    'password_confirmation' => 'Confirmar contrasenya',\n    'permissions' => 'Permisos',\n    'account' => 'Compte',\n    'superuser' => 'Super Usuari',\n    'superuser_comment' => 'Concedeix a aquest compte accés il·limitat a totes les àrees del sistema. Els superusuaris poden afegir i gestionar altres usuaris.',\n    'send_invite' => 'Enviar invitació per email',\n    'send_invite_comment' => 'Envia un missatge de benvinguda que conté la informació d\\'usuari i contrasenya.',\n    'delete_confirm' => 'Eliminar aquest administrador?',\n    'return' => 'Tornar a la llista d\\'administradors',\n    'allow' => 'Permetre',\n    'inherit' => 'Heretar',\n    'deny' => 'Denegar',\n    'activated' => 'Activat',\n    'last_login' => 'Últim accés',\n    'created_at' => 'Creat el',\n    'updated_at' => 'Actualitzat el',\n    'group' => [\n      'name' => 'Grup',\n      'name_field' => 'Nom',\n      'name_comment' => 'El nom es mostra a la llista de grups del formulari d\\'administrador.',\n      'description_field' => 'Descripció',\n      'is_new_user_default_field_label' => 'Grup per defecte',\n      'is_new_user_default_field_comment' => 'Afegir nous administradors a aquest grup per defecte',\n      'code_field' => 'Codi',\n      'code_comment' => 'Introdueix un codi únic si vols accedir a l\\'objecte de grup amb l\\'API.',\n      'list_title' => 'Gestionar grups',\n      'new' => 'Nou grup',\n      'delete_confirm' => 'Eliminar aquest grup d\\'administració?',\n      'return' => 'Tornar a la llista de grups',\n      'users_count' => 'Usuaris',\n    ],\n    'role' => [\n      'name' => 'Rol',\n      'name_field' => 'Nom',\n      'name_comment' => 'El nom es mostra a la llista de rols del formulari d\\'administrador.',\n      'description_field' => 'Descripció',\n      'code_field' => 'Codi',\n      'code_comment' => 'Introdueix un codi únic si vols accedir a l\\'objecte de rol amb l\\'API.',\n      'list_title' => 'Gestionar rols',\n      'new' => 'Nou rol',\n      'delete_confirm' => 'Eliminar aquest rol d\\'administració?',\n      'return' => 'Tornar a la llista de rols',\n      'users_count' => 'Usuaris',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'No hi ha un usuari autenticat per a qui carregar o guardar les preferències.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Llista',\n    'search_prompt' => 'Cercar...',\n    'no_records' => 'No hi ha registres en aquesta vista.',\n    'missing_model' => 'El comportament List utilitzat a :class no té un model definit.',\n    'missing_column' => 'No hi ha definicions de columna per :columns.',\n    'missing_columns' => 'La llista utilitzada a :class no té columnes de llista definides.',\n    'missing_definition' => 'El comportament List no té una columna per \\':field\\'.',\n    'missing_parent_definition' => 'El comportament de llista no conté una definició per \\':definition\\'.',\n    'behavior_not_ready' => 'El comportament List no s\\'ha inicialitzat, comprova que has cridat makeLists() al controlador.',\n    'invalid_column_datetime' => 'El valor de columna \\':column\\' no és un objecte DateTime, et falta una referència a $dates al model?',\n    'pagination' => 'Mostrant registres: :from-:to de :total',\n    'first_page' => 'Primera pàgina',\n    'last_page' => 'Última pàgina',\n    'prev_page' => 'Pàgina anterior',\n    'next_page' => 'Pàgina següent',\n    'refresh' => 'Refrescar',\n    'updating' => 'Actualitzant...',\n    'loading' => 'Carregant...',\n    'check' => 'Marcar',\n    'delete_selected' => 'Eliminar els seleccionats',\n    'delete_selected_empty' => 'No hi ha registres seleccionats per eliminar.',\n    'delete_selected_confirm' => 'Eliminar els registres seleccionats?',\n    'delete_selected_success' => 'Registres eliminats.',\n    'column_switch_true' => 'Sí',\n    'column_switch_false' => 'No',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Clica el %s o arrossega un arxiu aquí per pujar',\n  ],\n  'form' => [\n    'create_title' => 'Nou :name',\n    'update_title' => 'Editar :name',\n    'preview_title' => 'Previsualitzar :name',\n    'reset_success' => 'Reinici completat',\n    'missing_id' => 'La ID del registre del formulari no s\\'ha especificat.',\n    'missing_model' => 'El comportament Form utilitzat a :class no té un model definit.',\n    'missing_definition' => 'El comportament Form no té un camp per \\':field\\'.',\n    'action_confirm' => 'N\\'estàs segur?',\n    'create' => 'Crear',\n    'create_and_close' => 'Crear i tancar',\n    'creating' => 'Creant...',\n    'creating_name' => 'Creant :name...',\n    'save' => 'Guardar',\n    'save_and_close' => 'Guardar i tancar',\n    'saving' => 'Guardant...',\n    'saving_name' => 'Guardant :name...',\n    'delete' => 'Eliminar',\n    'deleting' => 'Eliminant...',\n    'confirm_delete' => 'Eliminar registre?',\n    'confirm_delete_multiple' => 'Eliminar els registres seleccionats?',\n    'deleting_name' => 'Eliminant :name...',\n    'reset_default' => 'Reiniciar als valors per defecte',\n    'resetting' => 'Reiniciant',\n    'resetting_name' => 'Reiniciant :name',\n    'undefined_tab' => 'Misc',\n    'field_off' => 'Off',\n    'field_on' => 'On',\n    'add' => 'Afegir',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancel·lar',\n    'close' => 'Tancar',\n    'confirm' => 'Confirmar',\n    'reload' => 'Recarregar',\n    'complete' => 'Completat',\n    'ok' => 'OK',\n    'or' => 'o',\n    'confirm_tab_close' => 'Tancar la pestanya? Els canvis no guardats es perdran.',\n    'behavior_not_ready' => 'El comportament Form no s\\'ha inicialitzat, comprova que has cridat initForm() al controlador.',\n    'preview_no_files_message' => 'No hi ha arxius pujats.',\n    'preview_no_media_message' => 'No hi ha medis seleccionats.',\n    'preview_no_record_message' => 'No hi ha cap registre seleccionat.',\n    'select' => 'Seleccionar',\n    'select_all' => 'seleccionar tot',\n    'select_none' => 'no selecciona cap',\n    'insert_row' => 'Inserir fila',\n    'insert_row_below' => 'Inserir fila a sota',\n    'delete_row' => 'Eliminar fila',\n    'concurrency_file_changed_title' => 'L\\'arxiu ha canviat',\n    'concurrency_file_changed_description' => 'L\\'arxiu que estàs editant ha estat canviat al disc per un altre usuari. Pots o bé recarregar l\\'arxiu i perdre els teus canvis, o bé sobreescriure l\\'arxiu al disc.',\n    'return_to_list' => 'Tornar a la llista',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Trobar registre',\n    'cancel' => 'Cancel·lar',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'El comportament Relation no té una configuració per \\':config\\'.',\n    'missing_definition' => 'El comportament Relation no té una definició per \\':field\\'.',\n    'missing_model' => 'El comportament Relation utilitzat a :class no té un model definit.',\n    'invalid_action_single' => 'Aquesta acció no pot ser realitzada en una relació singular.',\n    'invalid_action_multi' => 'Aquesta acció no pot ser realitzada en una relació múltiple.',\n    'help' => 'Clica en un element per afegir-lo',\n    'add' => 'Afegir',\n    'link_selected' => 'Vincular seleccionats',\n    'cancel' => 'Cancel·lar',\n    'close' => 'Tancar',\n    'create' => 'Crear',\n    'update' => 'Actualitzar',\n    'preview' => 'Previsualitzar',\n    'remove_name' => 'Treure :name',\n    'delete_name' => 'Eliminar :name',\n    'link' => 'Vincular',\n    'unlink_name' => 'Desvincular :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Reordenar registres',\n    'no_records' => 'No hi ha registres disponibles per reordenar.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'El model \\':class\\' amb l\\'ID :id no s\\'ha trobat.',\n    'missing_id' => 'No s\\'ha especificat ID per trobar el registre de model.',\n    'missing_relation' => 'El model \\':class\\' no té una definició per \\':relation\\'.',\n    'missing_method' => 'El model \\':class\\' no té un mètode \\':method\\'.',\n    'invalid_class' => 'El model :model utilitzat a :class no és vàlid, ha d\\'heretar la classe \\\\Model.',\n    'mass_assignment_failed' => 'L\\'assignació massiva ha fallat per l\\'atribut \\':attribute\\' del model.',\n  ],\n  'warnings' => [\n    'tips' => 'Consells de configuració del sistema',\n    'tips_description' => 'Hi ha problemes que has d\\'atendre per configurar el sistema correctament.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Les meves opcions',\n    'menu_description' => 'Les opcions de configuració relacionades amb el teu compte d\\'administració',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Color d\\'accent',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'tots',\n    'options_method_not_exists' => 'La classe de model :model ha de definir un mètode :method() que retorni opcions pel filtre \\':filter\\'.',\n    'date_all' => 'tots els períodes',\n    'number_all' => 'tots els números',\n  ],\n  'import_export' => [\n    'row' => 'Fila :row',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Europa Occidental)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Europa Central)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, Europa del Sud)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, Europa del Nord)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Ciríl·lic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Aràbic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Grec)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebreu)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turc)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Regió Bàltica)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celta)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Europa Occidental - revisió amb signe de l\\'euro)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Puja i gestiona continguts multimèdia - imatges, vídeos, sons, documents',\n  ],\n  'mediafinder' => [\n    'label' => 'Cercador multimèdia',\n    'default_prompt' => 'Clica el botó %s per cercar un element multimèdia',\n  ],\n  'media' => [\n    'menu_label' => 'Mèdia',\n    'upload' => 'Pujar',\n    'move' => 'Moure',\n    'delete' => 'Eliminar',\n    'add_folder' => 'Afegir carpeta',\n    'search' => 'Cercar',\n    'display' => 'Mostrar',\n    'filter_everything' => 'Tot',\n    'filter_images' => 'Imatges',\n    'filter_video' => 'Vídeo',\n    'filter_audio' => 'Àudio',\n    'filter_documents' => 'Documents',\n    'library' => 'Biblioteca',\n    'size' => 'Mida',\n    'title' => 'Títol',\n    'last_modified' => 'Modificat per últim cop',\n    'public_url' => 'URL',\n    'click_here' => 'Clica aquí',\n    'thumbnail_error' => 'Error generant miniatura.',\n    'return_to_parent' => 'Tornar a la carpeta pare',\n    'return_to_parent_label' => 'Ves amunt ..',\n    'nothing_selected' => 'No hi ha res seleccionat.',\n    'multiple_selected' => 'Múltiples elements seleccionats.',\n    'uploading_file_num' => 'Pujant :number arxiu(s)...',\n    'uploading_complete' => 'Pujada completa',\n    'uploading_error' => 'Pujada fallida',\n    'type_blocked' => 'Aquest tipus d\\'arxiu està bloquejat per raons de seguretat.',\n    'order_by' => 'Ordenar per',\n    'direction' => 'Direcció',\n    'direction_asc' => 'Ascendent',\n    'direction_desc' => 'Descendent',\n    'folder' => 'Carpeta',\n    'no_files_found' => 'No s\\'han trobat arxius amb aquests paràmetres de cerca.',\n    'delete_empty' => 'Si us plau selecciona elements per eliminar.',\n    'delete_confirm' => 'Eliminar els elements seleccionats?',\n    'error_renaming_file' => 'Error reanomenant l\\'element.',\n    'new_folder_title' => 'Nova carpeta',\n    'folder_name' => 'Nom de carpeta',\n    'error_creating_folder' => 'Error creant carpeta',\n    'folder_or_file_exist' => 'Ja existeix una carpeta o arxiu amb aquest nom',\n    'move_empty' => 'Si us plau selecciona elements per moure.',\n    'move_popup_title' => 'Moure arxius o carpetes',\n    'move_destination' => 'Carpeta de destí',\n    'please_select_move_dest' => 'Si us plau selecciona una carpeta de destí.',\n    'move_dest_src_match' => 'Si us plau selecciona una altra carpeta de destí.',\n    'empty_library' => 'Això sembla una mica buit. Puja arxius o crea carpetes per començar.',\n    'insert' => 'Insertar',\n    'crop_and_insert' => 'Retallar i inserir',\n    'select_single_image' => 'Si us plau selecciona una única imatge.',\n    'selection_not_image' => 'L\\'element seleccionat no és una imatge.',\n    'restore' => 'Desfès tots els canvis',\n    'resize' => 'Redimensionar...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Ràtio fixa',\n    'selection_mode_fixed_size' => 'Mida fixa',\n    'height' => 'Alçada',\n    'width' => 'Amplada',\n    'selection_mode' => 'Selecciona mode',\n    'resize_image' => 'Redimensionar imatge',\n    'image_size' => 'Mida d\\'imatge:',\n    'selected_size' => 'Seleccionat:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/ca.json",
    "content": "{\n  \"Update\": \"Actualització\",\n  \"Cancel\": \"Cancel · lar\",\n  \"You are viewing as\": \"Estàs veient com\",\n  \"Preview Role\": \"Rol de vista prèvia\",\n  \"This lets you test the actions this role can perform.\": \"Això us permet provar les accions que aquesta funció pot realitzar.\",\n  \"View As Role\": \"Veure com a rol\",\n  \"Return to Role Settings\": \"Torna a la configuració del rol\",\n  \"Password must have a minimum of length of :min characters\": \"La contrasenya ha de tenir una longitud mínima de :min caràcters\",\n  \"Password must contain at least one uppercase character.\": \"La contrasenya ha de contenir almenys un caràcter en majúscula.\",\n  \"Password must contain at least one lowercase character.\": \"La contrasenya ha de contenir almenys un caràcter en minúscula.\",\n  \"Password must contain at least one number.\": \"La contrasenya ha de contenir com a mínim un número.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"La contrasenya ha de contenir almenys un caràcter no alfanumèric.\",\n  \"Welcome to your Administration Area, :name\": \"Benvingut a la vostra àrea d'administració, :name\",\n  \"Duplicate\": \"Duplicar\",\n  \"Expand\": \"Ampliar\",\n  \"Collapse\": \"Col·lapsar\",\n  \"Move Up\": \"Moure cap dalt\",\n  \"Move Down\": \"Moure cap baix\",\n  \"Remove\": \"Treure\",\n  \"Manage Item\": \"Gestiona l'element\",\n  \"Clear Filters\": \"Esborra els filtres\",\n  \"Filter Setup\": \"Configuració del filtre\",\n  \"Apply\": \"Aplicar\",\n  \"Clear\": \"Esborrar\",\n  \"is equal to\": \"és igual a\",\n  \"is between\": \"està entre\",\n  \"contains\": \"conté\",\n  \"is before\": \"és abans\",\n  \"is after\": \"és després\",\n  \"is greater than\": \"és més gran que\",\n  \"is less than\": \"és menys que\",\n  \"1. Export output format\": \"1. Format de sortida de l'exportació\",\n  \"File Format\": \"Format de l'arxiu\",\n  \"Delimiter Character\": \"Caràcter delimitador\",\n  \"Enclosure Character\": \"Caràcter de tancament de cadena\",\n  \"Escape Character\": \"Caràcter d'escapament\",\n  \"2. Select columns to export\": \"2. Seleccionar columnes per exportar\",\n  \"Columns\": \"Columnes\",\n  \"3. Set export options\": \"3. Establir les opcions d'exportació\",\n  \"CSV Custom\": \"Personalitzat\",\n  \"1. Upload an Import File\": \"1. Pujar un arxiu CSV\",\n  \"Import File\": \"Importar arxiu\",\n  \"File Encoding\": \"Codificació d'arxiu\",\n  \"First row contains column titles\": \"La primera fila conté els títols de columnes\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Deixa això marcat si la primera fila del CSV s'utilitza pels títols de les columnes.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Emparellar les columnes de l'arxiu amb camps de la base de dades\",\n  \"File columns\": \"Columnes de l'arxiu\",\n  \"Database fields\": \"Camps de la base de dades\",\n  \"3. Set Import Options\": \"3. Establir les opcions d'importació\",\n  \"Export progress\": \"Progrès d'exportació\",\n  \"Processing\": \"Processant\",\n  \"Import progress\": \"Progrés d'importació\",\n  \"Import error\": \"Error en la importació\",\n  \"Export error\": \"Error en l'exportació\",\n  \"Column preview\": \"Previsualitzar columna\",\n  \"Column\": \"Columna\",\n  \"Disable\": \"Desactivar\",\n  \"Enable\": \"Activa\",\n  \"Delete\": \"Eliminar\",\n  \"Export\": \"Exporta\",\n  \"Import\": \"Importar\",\n  \"Select Action\": \"Seleccioneu Acció\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Creeu un compte nou per iniciar sessió a l'àrea d'administració.\",\n  \"First Name\": \"Nom\",\n  \"Last Name\": \"Cognom\",\n  \"Email Address\": \"Correu electrònic\",\n  \"Pick a Username\": \"Trieu un nom d'usuari\",\n  \"Enter New Password\": \"Introduïu una nova contrasenya\",\n  \"Confirm Password\": \"Confirma la contrasenya\",\n  \"Create Account\": \"Crear compte\",\n  \"Getting Ready\": \"Preparant-se\",\n  \"Just a few more minutes\": \"Només uns minuts més\",\n  \"Migrating Database\": \"Base de dades en migració\",\n  \"Access the Backend Panel\": \"Accediu al panell de backend\",\n  \"View Backend During Maintenance\": \"Veure el backend durant el manteniment\",\n  \"Perform Software Updates\": \"Realitzar actualitzacions de programari\",\n  \"In Maintenance\": \"En Manteniment\",\n  \"The site is currently in maintenance mode, please check back later.\": \"El lloc està actualment en mode de manteniment, si us plau, torneu a comprovar-ho més tard.\",\n  \"Dashboard\": \"Panell\",\n  \"Administrators\": \"Administradors\",\n  \"Manage Admins\": \"Gestionar administradors\",\n  \"Create Admins\": \"Crear administradors\",\n  \"Moderate Admins\": \"Administradors moderats\",\n  \"Manage account suspension and ban admin accounts\": \"Gestioneu la suspensió del compte i prohibeu els comptes d'administrador\",\n  \"Role Permissions\": \"Gestionar rols\",\n  \"Team Groups\": \"Gestionar grups\",\n  \"Manage Other Admins\": \"Gestionar altres administradors\",\n  \"Allow users to reset passwords and update emails.\": \"Permet restablir contrasenyes i actualitzar correus electrònics\",\n  \"Delete Admins\": \"Elimina els administradors\",\n  \"Preferences\": \"Preferències\",\n  \"Settings\": \"Configuració\",\n  \"Background Color\": \"Color de fons\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Permet als usuaris crear rols nous i editar o suprimir rols inferiors al seu rol més alt.\",\n  \"Save Changes\": \"Guardar canvis\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Aquest registre mostra una llista dels accessos d'administradors. Els registres es guarden durant :days dies.\",\n  \"Access Log\": \"Registre d'accés\",\n  \"View a list of successful back-end user sign ins.\": \"Veure una llista d'accessos correctes al panell.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Data i Hora\",\n  \"Type\": \"Tipus\",\n  \"IP address\": \"Adreça IP\",\n  \"Username\": \"Nom d'usuari\",\n  \"Login\": \"Accedir\",\n  \"First name\": \"Nom\",\n  \"Last name\": \"Cognom\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"S'utilitza un esquema personalitzat per a aquest format de fitxer.\",\n  \"Select\": \"Seleccioneu\",\n  \"Replace\": \"Substitueix\",\n  \"and\": \"i\",\n  \"Go\": \"Vés\",\n  \"Go to page\": \"Ves a la pàgina\",\n  \"Copy to Clipboard\": \"Copiar al portapapers\",\n  \"Reveal Contents\": \"Revelar continguts\",\n  \"Selected Site\": \"Lloc seleccionat\",\n  \"Use Emmet abbreviations\": \"Utilitzeu les abreviatures d'Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"No existeix cap registre per al lloc seleccionat. Crear-ne un?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Els detalls que has introduït no corresponen als nostres registres. Si us plau revisa'ls i torna-ho a intentar.\",\n  \"Administration Area\": \"Àrea d'Administració\",\n  \"Password Reset\": \"Reiniciar contrasenya\",\n  \"Please enter a new password.\": \"Introdueix una nova contrasenya\",\n  \"Password\": \"Contrasenya\",\n  \"Password Restore\": \"Restaura la contrasenya\",\n  \"Please enter your login to restore the password.\": \"Introdueix el teu usuari\",\n  \"A user could not be found with a login value of ':login'\": \"No es pot trobar l'usuari ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Hem enviat un missatge al teu correu amb instruccions.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Dades per restablir contrasenya incorrectes. Si us plau intenta-ho de nou!\",\n  \"Unable to reset your password!\": \"No s'ha pogut restablir la contrasenya!\",\n  \"Password has been reset. You may now sign in.\": \"La contrasenya s'ha reiniciat. Ara pots accedir.\",\n  \"Restore\": \"Restaurar\",\n  \"Reset\": \"Reiniciar\",\n  \"Stay logged in\": \"Recordar-me\",\n  \"Forgot password?\": \"Has oblidat la teva contrasenya?\",\n  \"Global Editor Settings\": \"Configuració global de l'editor\",\n  \"Manage Widgets\": \"Gestionar widgets\",\n  \"Add Widget\": \"Afegir widget\",\n  \"Set the current layout as the default?\": \"Convertir la disposició actual en els valors per defecte?\",\n  \"Make Default\": \"Desar per defecte\",\n  \"Reset layout back to default?\": \"Reiniciar la disposició als valors per defecte?\",\n  \"Reset Layout\": \"Reiniciar disposició\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"si us plau selecciona\",\n  \"Width\": \"Ample\",\n  \"full width\": \"ample complet\",\n  \"Create Widgets\": \"Crea widgets\",\n  \"not equal to\": \"no igual a\",\n  \"Light Mode\": \"Mode de llum\",\n  \"Dark Mode\": \"Mode fosc\",\n  \"Auto Mode\": \"Mode automàtic\",\n  \"OS Default\": \"Sistema operatiu per defecte\",\n  \"Create a Custom Palette\": \"Creeu una paleta personalitzada\",\n  \"Custom Palette\": \"Paleta personalitzada\",\n  \"Primary Color\": \"Color primari\",\n  \"Secondary Color\": \"Color secundari\",\n  \"Selection Color\": \"Color de selecció\",\n  \"Nav Text\": \"Text de navegació\",\n  \"Nav Background\": \"Fons de navegació\",\n  \"Sidebar Text\": \"Text de la barra lateral\",\n  \"Sidebar Background\": \"Fons de la barra lateral\",\n  \"Sidebar Active Text\": \"Text actiu de la barra lateral\",\n  \"Sidebar Active Background\": \"Barra lateral Fons actiu\",\n  \"Sidebar Hover Background\": \"Fondo de la barra lateral\",\n  \"Settings Text\": \"Text de configuració\",\n  \"Settings Background\": \"Configuració de fons\",\n  \"Settings Item Background\": \"Fons de l'element de configuració\",\n  \"Settings Active Color\": \"Configuració Color actiu\",\n  \"Settings Active Background\": \"Configuració Fons actiu\",\n  \"Settings Hover Background\": \"Configuració de fons\",\n  \"This name is shown in the title area of the back-end.\": \"Aquest nom es mostra a l'àrea del títol del panell.\",\n  \"App Name\": \"Nom de l'aplicació\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Aquest text es mostra a la finestra d'accés al panell.\",\n  \"App Tagline\": \"Tagline de l'aplicació\",\n  \"Brand\": \"Marca\",\n  \"Upload a custom logo to use in the back-end.\": \"Pujar un logo personalitzat per utilitzar al panell.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Pengeu un favicon personalitzat per utilitzar-lo al fons\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Logotip de navegació\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Substitueix l'enllaç del tauler de control per un logotip personalitzat a la navegació.\",\n  \"Dashboard Icon\": \"Icona del tauler de control\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Utilitzeu una imatge personalitzada per a la icona del tauler (60 x 60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Aquest missatge es mostra a la pantalla d'inici de sessió del back-end.\",\n  \"Welcome Message\": \"Missatge de benvinguda\",\n  \"Login Page\": \"Pàgina d'inici de sessió\",\n  \"Background Type\": \"Tipus de fons\",\n  \"Flat Color\": \"Color pla\",\n  \"Wallpaper\": \"Fons de pantalla\",\n  \"Wallpaper Size\": \"Mida del fons de pantalla\",\n  \"Auto\": \"Automàtic\",\n  \"Cover\": \"Portada\",\n  \"Background Wallpaper Image\": \"Imatge de fons de pantalla\",\n  \"Image\": \"Imatge\",\n  \"Random Autumn Images\": \"Imatges aleatòries de tardor\",\n  \"Custom Image\": \"Imatge personalitzada\",\n  \"Login Page Image\": \"Imatge de la pàgina d'inici de sessió\",\n  \"Colors\": \"Colors\",\n  \"Color Mode\": \"Mode de color\",\n  \"Color Preset\": \"Color preestablert\",\n  \"Menu Style\": \"Estil del menú\",\n  \"Navigation\": \"Navegació\",\n  \"Custom Stylesheet\": \"Full d'estils personalitzat\",\n  \"Styles\": \"Estils\",\n  \"Inline\": \"En línia\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"Rajoles\",\n  \"Collapsed\": \"Comprimit\",\n  \"Icons\": \"Icones\",\n  \"Left Side\": \"Costat esquerre\",\n  \"Add New Item\": \"Afegeix un element nou\",\n  \"Link Color\": \"Color de l'enllaç\",\n  \"Current Password\": \"Contrasenya actual\",\n  \"New Password\": \"nova contrasenya\",\n  \"Current password does not match. Please try again!\": \"La contrasenya actual no coincideix. Siusplau torna-ho a provar!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"La vostra contrasenya ha caducat, creeu-ne una de nova per motius de seguretat.\",\n  \"Region\": \"Regió\",\n  \"Locale\": \"Idioma\",\n  \"Select your desired locale for language use.\": \"Selecciona el teu idioma preferit.\",\n  \"Timezone\": \"Zona horària\",\n  \"Adjust displayed dates to this timezone.\": \"Ajustar les dates mostrades a aquesta zona horària.\",\n  \"Code Editor\": \"Editor de codi\",\n  \"Color Scheme\": \"Esquema de color\",\n  \"Word Wrap\": \"Ajust de línia\",\n  \"Off\": \"Off\",\n  \"40 Characters\": \"40 caràcters\",\n  \"80 Characters\": \"80 caràcters\",\n  \"Fluid\": \"Fluit\",\n  \"Font Size\": \"Mida de la font\",\n  \"Tab Size\": \"Mida de la tabulació\",\n  \"Code Folding\": \"Plegat de codi\",\n  \"Mark begin\": \"Marca d'inici\",\n  \"Mark begin and end\": \"Marca d'inici i final\",\n  \"Autocompletion\": \"Autocompletat\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Autompletat bàsic (Ctrl + Espai)\",\n  \"Live Autocompletion\": \"Autompletat en viu\",\n  \"Show gutter\": \"Mostrar números de línia\",\n  \"Highlight active line\": \"Destacar la línia activa\",\n  \"Automatically close tags\": \"Tancar les etiquetes automàticament\",\n  \"Indent using tabs\": \"Indentar utilitzant tabulacions\",\n  \"Show indent guides\": \"Mostrar guies d'indentació\",\n  \"Show invisible characters\": \"Mostrar els caràcters invisibles\",\n  \"Show print margin\": \"Mostrar marge d'impressió\",\n  \"Custom styles to include in the HTML editor.\": \"Estils personalitzats per incloure a l'editor HTML.\",\n  \"Markup Styles\": \"Estils de marcat\",\n  \"Paragraph Formats\": \"Formats de paràgraf\",\n  \"Markup Classes\": \"Classes de marcat\",\n  \"Tag Name\": \"Nom de l'etiqueta\",\n  \"Label\": \"Etiqueta\",\n  \"Paragraph\": \"Paràgraf\",\n  \"Class Name\": \"Nom de classe\",\n  \"Link\": \"Enllaç\",\n  \"Table\": \"Taula\",\n  \"Table Cell\": \"Cel·la\",\n  \"Allowed Tags\": \"Etiquetes permeses\",\n  \"The list of allowed tags.\": \"La llista d'etiquetes permeses.\",\n  \"Markup Tags\": \"Etiquetes de marcat\",\n  \"Allowed Empty Tags\": \"Etiquetes buides permeses\",\n  \"The list of tags that are not removed when they have no content inside.\": \"La llista d'etiquetes que no s'eliminen quan no tenen contingut.\",\n  \"Do Not Wrap Tags\": \"No envoltar etiquetes\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"La llista d'etiquetes que no s'han d'envoltar dins d'etiquetes de bloc.\",\n  \"Remove Tags\": \"Eliminar etiquetes\",\n  \"The list of tags that are removed together with their content.\": \"La llista d'etiquetes que s'eliminen junt amb el seu contingut.\",\n  \"Line Breaker Tags\": \"Etiquetes de canvi de línia\",\n  \"The list of tags that are used to place a line breaker element between.\": \"La llista d'etiquetes que s'utilitzen per introduir un canvi de línia.\",\n  \"Toolbar Buttons\": \"Botons de la barra d'eines\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Els botons de la barra d'eines que es mostraran en l'editor de text enriquit per defecte.\",\n  \"Insert a preset toolbar button configuration\": \"Inseriu una configuració de botó de la barra d'eines predeterminada\",\n  \"Allowed Attributes\": \"Atributs permesos\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"La llista d'atributs HTML permesos, a més dels permisos normals.\",\n  \"Enable code snippets (Tab)\": \"Activar snippets de codi (Tab)\",\n  \"Title\": \"Títol\",\n  \"Description\": \"Descripció\",\n  \"Attachment\": \"Adjunt\",\n  \"Attachment URL\": \"URL de l'adjunt\",\n  \"Add a title and description for this attachment.\": \"Afegeix un títol i descripció per aquest adjunt.\",\n  \"Upload\": \"Pujada\",\n  \"Are you sure?\": \"N'estàs segur?\",\n  \"Delete Selected\": \"Suprimeix la selecció\",\n  \"Upload Error\": \"Error de pujada\",\n  \"Remove File\": \"Elminar arxiu\",\n  \"Show Light Switch\": \"Mostra l'interruptor de la llum\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Permet als usuaris alternar el mode de color des de la navegació.\",\n  \"Create :name\": \"Crear :name\",\n  \"Update :name\": \"Actualitzar :name\",\n  \"Add :name\": \"Afegir :name\",\n  \"Link :name\": \"Vincular :name\",\n  \"Unlink\": \"Desvincular\",\n  \"Preview :name\": \"Previsualitzar :name\",\n  \"Link a New :name\": \"Vincular un nou :name\",\n  \"Add a New :name\": \"Afegir un nou :name\",\n  \"Related :name Data\": \"Dada :name relacionada\",\n  \":name Created\": \":name creat\",\n  \":name Updated\": \":name actualitzat\",\n  \":name Deleted\": \":name eliminat\",\n  \":name Added\": \":nom Afegit\",\n  \":name Linked\": \":nom Enllaçat\",\n  \":name Removed\": \":nom Eliminat\",\n  \":name Unlinked\": \":name Desenllaçat\",\n  \"Form record with an ID of :id could not be found.\": \"El registre de formulari amb la ID :id no s'ha trobat.\",\n  \"Remove Selected\": \"Elimina la selecció\",\n  \"Unlink Selected\": \"Desenllaça la selecció\",\n  \"Preview the Website\": \"Previsualitzar el lloc web\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Gestionar els usuaris administradors del panell, grups i permisos.\",\n  \"Define permissions for administrators based on their role.\": \"Definir els permisos dels administradors en funció del seu rol.\",\n  \"Add administrators to groups used for notifications and features.\": \"Afegeix administradors als grups que s'utilitzen per a notificacions i funcions.\",\n  \"Branding & Appearance\": \"Personalitzar el panell d'administració\",\n  \"Customize the administration area such as name, colors and logo.\": \"Personalitzar l'aspecte de l'àrea d'administració, com ara el nom, els colors o el logo.\",\n  \"Editor Settings\": \"Opcions de l'editor\",\n  \"Change the global editor preferences.\": \"Personalitza les preferències globals de l'editor, com ara el mida de la font i l'esquema de colors.\",\n  \"My Account\": \"El meu compte\",\n  \"Update your account details such as name, email address and password.\": \"Actualitza els teus detalls de compte com ara el nom, adreça d'email i contrasenya.\",\n  \"Backend Preferences\": \"Preferències del panell\",\n  \"Manage your account preferences such as desired language.\": \"Gestiona les preferències del teu compte, com ara el teu idioma preferit.\",\n  \"security login\": \"seguretat acces security login\",\n  \"List Setup\": \"Configuració de llista\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Marca les caselles per seleccionar les columnes que vols veure a la llista. Pots canviar la posiciói de les columnes arrossegant-les amunt o avall.\",\n  \"Records Per Page\": \"Registres per pàgina\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Selecciona el número de registres per pàgina per mostrar. Si us plau tinguis en compte que un gran número de registres en una sola pàgina pot reduir el rendiment.\",\n  \"Reset to Default\": \"Restableix els valors predeterminats\",\n  \"Add Selected\": \"Afegir seleccionats\",\n  \"Create & Close\": \"Crea i tanca\",\n  \"Creating :name...\": \"Creant :nom...\",\n  \"Save & Close\": \"Desa i tanca\",\n  \"Saving :name...\": \"Desant :nom...\",\n  \"Delete this record?\": \"Voleu suprimir aquest registre?\",\n  \"Deleting :name...\": \"Suprimint :nom...\",\n  \"Loading...\": \"S'està carregant...\",\n  \"Complete\": \"Complet\",\n  \"Please specify the modelClass property for :type\": \"Si us plau especifica la propietat modelClass per :type\",\n  \"Please specify some columns to export.\": \"Si us plau indica alguna columna per exportar.\",\n  \"Missing column identifier\": \"Falta l'identificador de columna\",\n  \"Unknown column\": \"Columna desconeguda\",\n  \"Please specify some columns to import.\": \"Si us plau indica alguna columna per importar.\",\n  \"Please match some columns first.\": \"Si us plau emparella algunes columnes primer.\",\n  \"Please specify a match for the required field :label.\": \"Si us plau indica un emparellament pel camp requerit :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"La codificació de l'arxiu font no es reconeix. Si us plau selecciona l'opció de format d'arxiu personalitzat amb la codificació correcta per importar el teu arxiu.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Has d'implementar el comportament de controlador ListController amb l'opció d'exportació useList activada.\",\n  \"File export process completed!\": \"Procès d'exportació d'arxiu completat!\",\n  \"The browser will now redirect to the file download.\": \"El navegador et redigirirà aviat a la descàrrega de l'arxiu.\",\n  \"Ignore this column\": \"Ignora aquesta columna\",\n  \"Drop column here...\": \"Arrossega una columna aquí...\",\n  \"Please upload a valid CSV file.\": \"Si us plau puja un arxiu CSV vàlid.\",\n  \"Created\": \"Creat\",\n  \"Updated\": \"Actualitzat\",\n  \"Skipped\": \"Omesos\",\n  \"Warnings\": \"Avisos\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Files omeses\",\n  \"Show Ignored Columns\": \"Mostrar columnes ignorades\",\n  \"Auto Match Columns\": \"Emparellar columnes automàticament\",\n  \"File not found\": \"Arxiu no trobat\",\n  \"There was no data supplied to export\": \"No hi ha dades per exportar\",\n  \"Created At\": \"Creat a\",\n  \"Updated At\": \"Actualitzat a les\",\n  \"Deleted At\": \"Suprimit a\",\n  \"Created By\": \"Creat per\",\n  \"Updated By\": \"Actualitzat per\",\n  \"Deleted By\": \"Suprimit per\",\n  \"Create Dashboard\": \"Crea un tauler de control\",\n  \"Edit Dashboard\": \"Edita el tauler de control\",\n  \"The dashboard was successfully created.\": \"El tauler de control s'ha creat correctament.\",\n  \"The dashboard was successfully updated.\": \"El tauler de control s'ha actualitzat correctament.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"Aquest és un tauler de control generat pel sistema i no es pot suprimir.\",\n  \"Dashboard Name\": \"Nom del tauler de control\",\n  \"Please enter the dashboard name\": \"Si us plau, introduïu el nom del tauler de control\",\n  \"Please enter the dashboard code\": \"Si us plau, introduïu el codi del tauler de control\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"El codi només pot incloure lletres llatines, dígits i guions\",\n  \"Icon\": \"Icona\",\n  \"Please select an icon\": \"Si us plau, seleccioneu una icona\",\n  \"Global Access\": \"Accés global\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Els taulers de control amb accés global habilitat poden ser visualitzats per altres usuaris.\",\n  \"Hide Interval\": \"Amaga l'interval\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Marqueu això si el tauler de control no utilitza el selector d'interval de dates.\",\n  \"API Code\": \"Codi API\",\n  \"A unique code to refer to this dashboard using external systems.\": \"Un codi únic per fer referència a aquest quadre de comandament mitjançant sistemes externs.\",\n  \"Select Dashboard\": \"Selecciona el tauler de control\",\n  \"Value\": \"Valor\",\n  \"Difference with the previous period\": \"Diferència amb el període anterior\",\n  \"Group\": \"Grup\",\n  \"Compare Totals\": \"Comparar totals\",\n  \"Interval\": \"Interval\",\n  \"Date\": \"Data\",\n  \"You don't have access to any dashboards.\": \"No tens accés a cap tauler de control.\",\n  \"No dashboards have been set up yet.\": \"Encara no s'ha configurat cap quadre de comandament.\",\n  \"Import Dashboard\": \"Importa el tauler de control\",\n  \"The requested dashboard could not be found.\": \"No s'ha pogut trobar el tauler de control sol·licitat.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"El mode de depuració està habilitat. Això no es recomana per a instal·lacions de producció.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"L'URL del backend: name és massa genèrica. Si us plau, definiu-la en alguna cosa més única.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"S'ha trobat un compte amb un nom d'usuari genèric. Canvieu el nom d'aquest compte d'administrador.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"L'extensió :name no està instal·lada. Si us plau instal·la aquesta llibreria i activa l'extensió.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"El plugin :name és una dependència però no està instal·lat. Si us plau instal·la aquest plugin.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"El directori :name o un dels seus subdirectoris no pot ser escrit per PHP. Si us plau assigna els permisos corresponents pel servidor web en aquest directori.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"El vostre compte no té permisos per crear o editar taulers de control.\",\n  \"No records found\": \"No s'han trobat registres\",\n  \"Apply Changes\": \"Aplica els canvis\",\n  \"Error loading the widget data. See the browser error console for details.\": \"S'ha produït un error en carregar les dades del widget. Consulteu la consola d'errors del navegador per obtenir més informació.\",\n  \"Configure the widget\": \"Configura el widget\",\n  \"to manage its settings.\": \"per gestionar la seva configuració.\",\n  \"Includes\": \"Inclou\",\n  \"Excludes\": \"Exclou\"\n}"
  },
  {
    "path": "modules/backend/lang/cs/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Byl použitý špatný typ :type.',\n    'options_method_invalid_model' => 'Vlastnost \\':field\\' neodpovídá platnému modelu. Zkuste specifikovat metodu voleb pro modelovou třídu :model explicitně.',\n    'options_method_not_exists' => 'Modelová třída :model musí implementovat metodu :method(), která vrací volby pro formulářové pole \\':field\\'',\n  ],\n  'widget' => [\n    'not_registered' => 'Třída widgetu se jménem \\':name\\' není zaregistrovaná.',\n    'not_bound' => 'Widget s názvem třídy \\':name\\' není navázaná na kontroler.',\n  ],\n  'page' => [\n    'untitled' => 'Bez názvu',\n    'access_denied' => [\n      'label' => 'Přístup odmítnut',\n      'help' => 'Nemáte potřebná oprávnění k prohlížení této stránky.',\n      'cms_link' => 'Zpět do administrace',\n    ],\n    'no_database' => [\n      'label' => 'Chybí databáze',\n      'help' => 'K přístupu do administrace je zapotřebí databáze. Zkontrolujte, zda je databáze nakonfigurována a migrována a zkuste to znovu.',\n      'cms_link' => 'Zpět na úvodní stránku',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Dílčí šablona \\':name\\' nebyla nalezena.',\n  ],\n  'account' => [\n    'sign_out' => 'Odhlásit',\n    'login_placeholder' => 'Přihlašovací jméno',\n    'password_placeholder' => 'Heslo',\n    'enter_email' => 'Zadejte váš e-mail',\n    'email_placeholder' => 'E-mail',\n    'apply' => 'Použít',\n    'cancel' => 'Zrušit',\n    'delete' => 'Smazat',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Plocha',\n    'widget_inspector_title' => 'Nastavení widgetu',\n    'widget_inspector_description' => 'Zde si upravte všechna nastavení widgetu',\n    'widget_columns_label' => 'Šířka :columns',\n    'widget_columns_description' => 'Šířka widgetu, zadejte číslo mezi 1 a 10.',\n    'widget_columns_error' => 'Zadejte prosím šířku widgetu jako číslo mezi 1 a 10.',\n    'columns' => '{1} sloupec|[2,Inf] sloupce',\n    'widget_new_row_label' => 'Vždy na novém řádku',\n    'widget_new_row_description' => 'Vloží widget do nového řádku',\n    'widget_title_label' => 'Název widgetu',\n    'widget_title_error' => 'Musíte zadat název widgetu',\n    'reset_layout_success' => 'Výchozí uspořádání bylo obnoveno',\n    'make_default_success' => 'Aktuální uspořádání je nyní nastaveno jako výchozí',\n    'collapse_all' => 'Vše sbalit',\n    'expand_all' => 'Vše rozbalit',\n    'status' => [\n      'widget_title_default' => 'Stav systému',\n      'update_available' => '{0} dostupných aktualizací!|{1} dostupná aktualizace!|[2,Inf] dostupných aktualizací!',\n      'updates_pending' => 'Jsou dostupné aktualizace softwaru',\n      'updates_nil' => 'Software je aktuální',\n      'updates_link' => 'Aktualizovat',\n      'warnings_pending' => 'Některé problémy vyžadují pozornost',\n      'warnings_nil' => 'Žádné varování k zobrazení',\n      'warnings_link' => 'Zobrazit',\n      'core_build' => 'Verze systému',\n      'event_log' => 'Protokol událostí',\n      'request_log' => 'Protokol požadavků',\n      'app_birthday' => 'Online od',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Vítejte',\n      'welcome_back_name' => 'Vítejte zpět do :app, :name.',\n      'welcome_to_name' => 'Vítejte do :app, :name.',\n      'first_sign_in' => 'Toto je vaše první přihlášení.',\n      'last_sign_in' => 'Vaše poslední přihlášení bylo',\n      'view_access_logs' => 'Zobrazit protokol přihlášení',\n      'nice_message' => 'Hezký den!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrátor',\n    'list_title' => 'Správa administrátorů',\n    'new' => 'Nový administrátor',\n    'first_name' => 'Křestní jméno',\n    'last_name' => 'Příjmení',\n    'full_name' => 'Celé jméno',\n    'email' => 'E-mail',\n    'role_field' => 'Role',\n    'role_comment' => 'Role definují uživatelská oprávnění, která mohou být přepsána na uživatelské úrovni, na kartě Oprávnění.',\n    'groups' => 'Skupiny',\n    'groups_comment' => 'Vyberte do jakých skupin uživatel patří.',\n    'avatar' => 'Avatar',\n    'password' => 'Heslo',\n    'password_confirmation' => 'Potvrzení hesla',\n    'permissions' => 'Oprávnění',\n    'account' => 'Účet',\n    'superuser' => 'Super uživatel',\n    'superuser_comment' => 'Má neomezený přístup do všech stránek administrace.',\n    'send_invite' => 'Zaslat pozvánku e-mailem',\n    'send_invite_comment' => 'Odešle uvítací e-mail s údaji pro přihlášení.',\n    'delete_confirm' => 'Opravdu chcete smazat tohoto administrátora?',\n    'return' => 'Zpět na seznam administrátorů',\n    'allow' => 'Povolit',\n    'inherit' => 'Podědit',\n    'deny' => 'Odmítnout',\n    'activated' => 'Aktivován',\n    'last_login' => 'Poslední přihlášení',\n    'created_at' => 'Vytvořen',\n    'updated_at' => 'Aktualizován',\n    'group' => [\n      'name' => 'Skupina',\n      'name_field' => 'Jméno',\n      'name_comment' => 'Toto jméno je zobrazeno v seznamu skupin na formuláři správce.',\n      'description_field' => 'Popis',\n      'is_new_user_default_field_label' => 'Výchozí skupina',\n      'is_new_user_default_field_comment' => 'Zařadit nové administrátory automaticky do této skupiny',\n      'code_field' => 'Kód',\n      'code_comment' => 'Zadejte unikátní kód pro přístup přes API.',\n      'list_title' => 'Správa skupin',\n      'new' => 'Nová skupina',\n      'delete_confirm' => 'Opravdu chcete smazat tuto skupinu administrátorů?',\n      'return' => 'Zpět na seznam skupin',\n      'users_count' => 'Uživatelů',\n    ],\n    'role' => [\n      'name' => 'Role',\n      'name_field' => 'Jméno',\n      'name_comment' => 'Toto jméno je zobrazeno v seznamu skupin na formuláři správce.',\n      'description_field' => 'Popis',\n      'code_field' => 'Kód',\n      'code_comment' => 'Zadejte unikátní kód pro přístup přes API.',\n      'list_title' => 'Správa rolí',\n      'new' => 'Nová role',\n      'delete_confirm' => 'Opravdu chcete smazat tuto roli?',\n      'return' => 'Zpět na seznam rolí',\n      'users_count' => 'Uživatelů',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nebyl nalezen žádný přihlášený uživatel pro načtení, nebo uložení nastavení.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Seznam',\n    'search_prompt' => 'Hledat...',\n    'no_records' => 'Žádné záznamy v tomto pohledu.',\n    'missing_model' => 'Chování seznamu použité v :class nemá definovaný model.',\n    'missing_column' => 'Neexistují žádné definice sloupců pro :columns.',\n    'missing_columns' => 'Seznam použitý v :class nemá defonované žádné sloupce.',\n    'missing_definition' => 'Chování seznamu neobsahuje sloupec pro \\':field\\'.',\n    'missing_parent_definition' => 'Chování seznamu neobsahuje definici \\':definition\\'.',\n    'behavior_not_ready' => 'Chování seznamu nebylo inicializováno. Zkontrolujte, zda jste ve svém controlleru zavolali makeLists().',\n    'invalid_column_datetime' => 'Hodnota sloupce \\':column\\' není objekt typu DateTime. Nechybí vám odkaz $dates ve vašem Modelu?',\n    'pagination' => 'Zobrazuji záznamy: :from-:to z :total',\n    'first_page' => 'První stránka',\n    'last_page' => 'Poslední stránka',\n    'prev_page' => 'Předchozí stránka',\n    'next_page' => 'Další stránka',\n    'refresh' => 'Obnovit',\n    'updating' => 'Aktualizuji...',\n    'loading' => 'Načítám...',\n    'check' => 'Zaškrtnout',\n    'delete_selected' => 'Smazat vybrané záznamy',\n    'delete_selected_empty' => 'Nebyly vybrány žádné záznamy ke smazání.',\n    'delete_selected_confirm' => 'Opravdu chcete smazat vybrané záznamy?',\n    'delete_selected_success' => 'Vybrané záznamy byly smazány.',\n    'column_switch_true' => 'Ano',\n    'column_switch_false' => 'Ne',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Kliknutím na %s nebo přetažením na toto místo můžete soubor nahrát',\n  ],\n  'form' => [\n    'create_title' => 'Nový :name',\n    'update_title' => 'Upravit :name',\n    'preview_title' => 'Náhled :name',\n    'reset_success' => 'Úspěšně obnoveno',\n    'missing_id' => 'Musíte uvést ID záznamu.',\n    'missing_model' => 'Chování formuláře použité v :class nemá definovaný model.',\n    'missing_definition' => 'Chování formuláře neobsahuje pole pro \\':field\\'.',\n    'action_confirm' => 'Jste si jistí?',\n    'create' => 'Vytvořit',\n    'create_and_close' => 'Vytvořit a zavřít',\n    'creating' => 'Vytváření...',\n    'creating_name' => 'Vytváření :name...',\n    'save' => 'Uložit',\n    'save_and_close' => 'Uložit a zavřít',\n    'saving' => 'Ukládání...',\n    'saving_name' => 'Ukládání :name...',\n    'delete' => 'Smazat',\n    'deleting' => 'Mazání...',\n    'confirm_delete' => 'Opravdu chcete smazat záznam?',\n    'confirm_delete_multiple' => 'Opravdu chcete smazat vybrané záznamy?',\n    'deleting_name' => 'Mazání :name...',\n    'reset_default' => 'Obnovit výchozí',\n    'resetting' => 'Obnovování',\n    'resetting_name' => 'Obnovování :name',\n    'undefined_tab' => 'Ostatní',\n    'field_off' => 'Vyp',\n    'field_on' => 'Zap',\n    'add' => 'Přidat',\n    'apply' => 'Použít',\n    'cancel' => 'Zrušit',\n    'close' => 'Zavřít',\n    'confirm' => 'Potvrdit',\n    'reload' => 'Znovu načíst',\n    'complete' => 'Kompletní',\n    'ok' => 'OK',\n    'or' => 'nebo',\n    'confirm_tab_close' => 'Opravdu chcete zavřít záložku? Neuložené změny budou ztraceny.',\n    'behavior_not_ready' => 'Chování formuláře není inicializováno, zkontrolujte jestli voláte metodu initForm() ve vašem kontroléru.',\n    'preview_no_files_message' => 'Žádný soubor nebyl nahrán.',\n    'preview_no_media_message' => 'Žádné médium nebylo vybráno.',\n    'preview_no_record_message' => 'Žádný záznam není vybraný.',\n    'select' => 'Vybrat',\n    'select_all' => 'vybrat vše',\n    'select_none' => 'vyberte žádný',\n    'insert_row' => 'Vložit řádek',\n    'insert_row_below' => 'Vložit řádek pod',\n    'delete_row' => 'Smazat řádek',\n    'concurrency_file_changed_title' => 'Soubor byl změněn',\n    'concurrency_file_changed_description' => 'Soubor, který upravujete, byl na disku změněn jiným uživatelem. Můžete buď znovu načíst soubor a ztratit změny, nebo přepsat soubor na disku.',\n    'return_to_list' => 'Zpět na seznam',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Najít záznam',\n    'cancel' => 'Zrušit',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Chování relace nemá žádné nastavení pro \\':config\\'.',\n    'missing_definition' => 'Chování relace neobsahuje definici pro \\':field\\'.',\n    'missing_model' => 'Chování relace použité v :class nemá definovaný žádný model.',\n    'invalid_action_single' => 'Tato akce nemůže být provedena na jednoduché relaci (singular relationship).',\n    'invalid_action_multi' => 'Tato akce nemůže být provedena na vícenásobné relaci (multiple relationship).',\n    'help' => 'Pro přidání klikněte na položku',\n    'add' => 'Přidat',\n    'link_selected' => 'Vytvořit vazbu na vybrané',\n    'cancel' => 'Zrušit',\n    'close' => 'Zavřít',\n    'create' => 'Vytvořit',\n    'update' => 'Upravit',\n    'preview' => 'Náhled',\n    'remove_name' => 'Odstranit :name',\n    'delete_name' => 'Smazat :name',\n    'link' => 'Vazba',\n    'unlink_name' => 'Zrušit vazbu :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Seřadit záznamy',\n    'no_records' => 'Nenašli jsme žádné záznamy k seřazení.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' s ID :id nebyl nalezen',\n    'missing_id' => 'Není specifikované ID pro hledání záznamu v modelu.',\n    'missing_relation' => 'Model \\':class\\' neobsahuje definici pro \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' nemá implementovanou metodu \\':method\\'.',\n    'invalid_class' => 'Model :model použitý ve třídě :class není validní, musí dědit ze třídy Model.',\n    'mass_assignment_failed' => 'Hromadné přiřazení selhalo pro vlastnost \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Tipy pro konfiguraci systému',\n    'tips_description' => 'Existují problémy, které vyžadují vaši pozornost, aby byl systém správně nakonfigurován.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Moje nastavení',\n    'menu_description' => 'Nastavení vašeho administrátorského účtu',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Barva pro zvýraznění',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'Vše',\n    'options_method_not_exists' => 'Třída modelu :model musí definovat metodu :method(), která vrací položky filtru \\':filter\\'.',\n    'date_all' => 'Všechna období',\n  ],\n  'import_export' => [],\n  'permissions' => [\n    'manage_media' => 'Správa médií',\n  ],\n  'mediafinder' => [\n    'label' => 'Vyhledávač médií',\n    'default_prompt' => 'Klikněte na tlačítko %s pro hledání souboru',\n  ],\n  'media' => [\n    'menu_label' => 'Média',\n    'upload' => 'Nahrát',\n    'move' => 'Přesunout',\n    'delete' => 'Smazat',\n    'add_folder' => 'Přidat složku',\n    'search' => 'Vyhledat',\n    'display' => 'Zobrazit',\n    'filter_everything' => 'Vše',\n    'filter_images' => 'Obrázky',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Dokumenty',\n    'library' => 'Knihovna',\n    'size' => 'Velikost',\n    'title' => 'Název',\n    'last_modified' => 'Naposledy upraveno',\n    'public_url' => 'Veřejná URL',\n    'click_here' => 'Klikněte zde',\n    'thumbnail_error' => 'Chyba generování náhledu.',\n    'return_to_parent' => 'Zpět do nadřazené složky',\n    'return_to_parent_label' => 'Nahoru ..',\n    'nothing_selected' => 'Nic nevybráno.',\n    'multiple_selected' => 'Vybráno více položek.',\n    'uploading_file_num' => 'Nahrávám :number soubor(y)...',\n    'uploading_complete' => 'Nahrávání kompletní',\n    'uploading_error' => 'Nahrávání se nezdařilo',\n    'type_blocked' => 'Kvůli bezpečnosti je tento typ souborů zablokován.',\n    'order_by' => 'Seřadit dle',\n    'folder' => 'Složka',\n    'no_files_found' => 'Pro tento požadavek nebyly nalezeny žádné soubory.',\n    'delete_empty' => 'Vyberte položky ke smazání.',\n    'delete_confirm' => 'Opravu chcete smazat vybrané položky?',\n    'error_renaming_file' => 'Přejmenování se nezdařilo.',\n    'new_folder_title' => 'Nová složka',\n    'folder_name' => 'Název složky',\n    'error_creating_folder' => 'Chyba vytváření složky',\n    'folder_or_file_exist' => 'Adresář nebo soubor se zadaným názvem již existuje.',\n    'move_empty' => 'Vyberte položky k přesunutí.',\n    'move_popup_title' => 'Přesun souborů nebo složek',\n    'move_destination' => 'Cílová složka',\n    'please_select_move_dest' => 'Prosím vyberte cílovou složku.',\n    'move_dest_src_match' => 'Prosím vyberte jinou cílovou složku.',\n    'empty_library' => 'Knihovna médií je prázdná. Nahrajte prosím soubory, nebo vytvořte složky.',\n    'insert' => 'Vložit',\n    'crop_and_insert' => 'Oříznout & vložit',\n    'select_single_image' => 'Prosím vyberte pouze jeden obrázek.',\n    'selection_not_image' => 'Vybraná položka není obrázek.',\n    'restore' => 'Zpět všechny změny',\n    'resize' => 'Změnit velikost...',\n    'selection_mode_normal' => 'Normální',\n    'selection_mode_fixed_ratio' => 'Pevný poměr stran',\n    'selection_mode_fixed_size' => 'Pevná velikost',\n    'height' => 'Výška',\n    'width' => 'Šířka',\n    'selection_mode' => 'Způsob označování (selection mode)',\n    'resize_image' => 'Změnit velikost obrázku',\n    'image_size' => 'Velikost obrázku:',\n    'selected_size' => 'Vybráno:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/cs.json",
    "content": "{\n  \"Update\": \"Aktualizovat\",\n  \"Cancel\": \"Zrušit\",\n  \"You are viewing as\": \"Prohlížíte si jako\",\n  \"Preview Role\": \"Náhled role\",\n  \"This lets you test the actions this role can perform.\": \"To vám umožní otestovat akce, které tato role může provádět.\",\n  \"View As Role\": \"Zobrazit jako roli\",\n  \"Return to Role Settings\": \"Návrat do nastavení rolí\",\n  \"Password must have a minimum of length of :min characters\": \"Heslo musí mít minimální délku :min znaků\",\n  \"Password must contain at least one uppercase character.\": \"Heslo musí obsahovat alespoň jedno velké písmeno.\",\n  \"Password must contain at least one lowercase character.\": \"Heslo musí obsahovat alespoň jedno malé písmeno.\",\n  \"Password must contain at least one number.\": \"Heslo musí obsahovat alespoň jedno číslo.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Heslo musí obsahovat alespoň jeden nealfanumerický znak.\",\n  \"Welcome to your Administration Area, :name\": \"Vítejte ve své administrativní oblasti, :name\",\n  \"Duplicate\": \"Duplikát\",\n  \"Expand\": \"Rozšířit\",\n  \"Collapse\": \"Kolaps\",\n  \"Move Up\": \"Posunout nahoru\",\n  \"Move Down\": \"Posunout dolů\",\n  \"Remove\": \"Odstranit\",\n  \"Manage Item\": \"Spravovat položku\",\n  \"Clear Filters\": \"Vymazat filtry\",\n  \"Filter Setup\": \"Nastavení filtru\",\n  \"Apply\": \"Aplikovat\",\n  \"Clear\": \"Vymazat\",\n  \"is equal to\": \"je rovný\",\n  \"is between\": \"je mezi\",\n  \"contains\": \"obsahuje\",\n  \"is before\": \"je dříve\",\n  \"is after\": \"je po\",\n  \"is greater than\": \"je větší než\",\n  \"is less than\": \"je méně než\",\n  \"1. Export output format\": \"1. Nastavit formát exportu\",\n  \"File Format\": \"Formát souboru\",\n  \"Delimiter Character\": \" Oddělovací znak\",\n  \"Enclosure Character\": \"Znak pro ohraničení (enclosure character)\",\n  \"Escape Character\": \"Uvozovací znak (escape character)\",\n  \"2. Select columns to export\": \"2. Vybrat exportované sloupce\",\n  \"Columns\": \"Sloupce\",\n  \"3. Set export options\": \"3. Nastavit vlastnosti importu\",\n  \"CSV Custom\": \"Vlastní\",\n  \"1. Upload an Import File\": \"1. Nahrajte CSV soubor\",\n  \"Import File\": \"Soubor pro import\",\n  \"File Encoding\": \"Kódování souboru\",\n  \"First row contains column titles\": \"První řádek obsahuje názvy sloupců\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Nechte zaškrtnuto, pokud první řádek obsahuje názvy sloupců.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Vytvořit vazbu mezi sloupci v souboru a v databázi\",\n  \"File columns\": \"Sloupce souboru\",\n  \"Database fields\": \"Sloupce v databázi\",\n  \"3. Set Import Options\": \"3. Nastavit vlastnosti importu\",\n  \"Export progress\": \"Průběh exportu\",\n  \"Processing\": \"Zpracovávám\",\n  \"Import progress\": \"Průběh importu\",\n  \"Import error\": \"Chyba importu\",\n  \"Export error\": \"Chyba exportu\",\n  \"Column preview\": \"Náhled sloupce\",\n  \"Column\": \"Sloupec\",\n  \"Disable\": \"Zakázat\",\n  \"Enable\": \"Umožnit\",\n  \"Delete\": \"Smazat\",\n  \"Export\": \"Exportovat\",\n  \"Import\": \"Importovat\",\n  \"Select Action\": \"Vyberte možnost Akce\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Vytvořte si prosím nový účet pro přihlášení do Administrační oblasti.\",\n  \"First Name\": \"Jméno\",\n  \"Last Name\": \"Příjmení\",\n  \"Email Address\": \"Emailová adresa\",\n  \"Pick a Username\": \"Vyberte si uživatelské jméno\",\n  \"Enter New Password\": \"Zadejte nové heslo\",\n  \"Confirm Password\": \"Potvrďte heslo\",\n  \"Create Account\": \"Vytvořit účet\",\n  \"Getting Ready\": \"Připravovat se\",\n  \"Just a few more minutes\": \"Ještě pár minut\",\n  \"Migrating Database\": \"Migrace databáze\",\n  \"Access the Backend Panel\": \"Otevřete panel Backend\",\n  \"View Backend During Maintenance\": \"Zobrazit backend během údržby\",\n  \"Perform Software Updates\": \"Provádějte aktualizace softwaru\",\n  \"In Maintenance\": \"V údržbě\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Stránka je momentálně v režimu údržby, vraťte se prosím později.\",\n  \"Dashboard\": \"Přístrojová deska\",\n  \"Administrators\": \"Administrátoři\",\n  \"Manage Admins\": \"Spravovat administrátory\",\n  \"Create Admins\": \"Vytvořit správce\",\n  \"Moderate Admins\": \"Umírnění správci\",\n  \"Manage account suspension and ban admin accounts\": \"Spravujte pozastavení účtu a zakažte účty administrátorů\",\n  \"Role Permissions\": \"Role\",\n  \"Team Groups\": \"Skupiny\",\n  \"Manage Other Admins\": \"Spravovat ostatní administrátory\",\n  \"Allow users to reset passwords and update emails.\": \"Umožňuje resetování hesel a aktualizaci e-mailů\",\n  \"Delete Admins\": \"Smazat správce\",\n  \"Preferences\": \"Předvolby\",\n  \"Settings\": \"Nastavení\",\n  \"Background Color\": \"Barva pozadí\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Umožněte uživatelům vytvářet nové role a upravovat nebo mazat role nižší, než je jejich nejvyšší role.\",\n  \"Save Changes\": \"Uložit změny\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Tento záznam zobrazuje seznam úspěšných přihlášení do administrace. Záznamy jsou uchovávány :days dní.\",\n  \"Access Log\": \"Protokol přístupů\",\n  \"View a list of successful back-end user sign ins.\": \"Zobrazit seznam úspěšných přihlášení do administrace.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Datum & čas\",\n  \"Type\": \"Typ\",\n  \"IP address\": \"IP adresa\",\n  \"Username\": \"Uživatelské jméno\",\n  \"Login\": \"Přihlásit se\",\n  \"First name\": \"Jméno\",\n  \"Last name\": \"Příjmení\",\n  \"Email\": \"E-mail\",\n  \"A custom schema is used for this file format.\": \"Pro tento formát souboru se používá vlastní schéma.\",\n  \"Select\": \"Vybrat\",\n  \"Replace\": \"Nahradit\",\n  \"and\": \"a\",\n  \"Go\": \"Jít\",\n  \"Go to page\": \"Jdi na stránku\",\n  \"Copy to Clipboard\": \"Zkopírovat do schránky\",\n  \"Reveal Contents\": \"Odhalit obsah\",\n  \"Selected Site\": \"Vybraný web\",\n  \"Use Emmet abbreviations\": \"Používejte zkratky Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Pro vybraný web neexistuje záznam. Vytvořit jeden?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Údaje, které jste zadali, neodpovídaly našim záznamům. Zkontrolujte prosím a zkuste to znovu.\",\n  \"Administration Area\": \"Administrace\",\n  \"Password Reset\": \"Obnova hesla\",\n  \"Please enter a new password.\": \"Zadejte nové heslo\",\n  \"Password\": \"Heslo\",\n  \"Password Restore\": \"Obnovení hesla\",\n  \"Please enter your login to restore the password.\": \"Zadejte váš login\",\n  \"A user could not be found with a login value of ':login'\": \"Uživatel s přihlašovacím jménem ':login' nebyl nalezen\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"E-mail byl zaslán na vaší e-mailovou adresu s heslem a instrukcemi k obnově.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Data pro obnovu hesla nejsou správná. Prosím zkuste to znovu!\",\n  \"Unable to reset your password!\": \"Obnova hesla selhala!\",\n  \"Password has been reset. You may now sign in.\": \"Vaše heslo bylo úspěšně obnoveno. Nyní se můžete přihlásit.\",\n  \"Restore\": \"Obnovit\",\n  \"Reset\": \"Resetovat\",\n  \"Stay logged in\": \"Zůstat přihlášený\",\n  \"Forgot password?\": \"Zapomněli jste heslo?\",\n  \"Global Editor Settings\": \"Globální nastavení editoru\",\n  \"Manage Widgets\": \"Správa widgetů\",\n  \"Add Widget\": \"Přidat widget\",\n  \"Set the current layout as the default?\": \"Nastavit aktuální uspořádání jako výchozí?\",\n  \"Make Default\": \"Nastavit jako výchozí\",\n  \"Reset layout back to default?\": \"Skutečně obnovit výchozí uspořádání?\",\n  \"Reset Layout\": \"Obnovit výchozí uspořádání\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"Prosím vyberte\",\n  \"Width\": \"Šířka\",\n  \"full width\": \"Plná šířka\",\n  \"Create Widgets\": \"Vytvářejte widgety\",\n  \"not equal to\": \"nerovná se\",\n  \"Light Mode\": \"Světelný režim\",\n  \"Dark Mode\": \"Tmavý režim\",\n  \"Auto Mode\": \"Automatický režim\",\n  \"OS Default\": \"Výchozí OS\",\n  \"Create a Custom Palette\": \"Vytvořte vlastní paletu\",\n  \"Custom Palette\": \"Vlastní paleta\",\n  \"Primary Color\": \"Primární barva\",\n  \"Secondary Color\": \"Sekundární barva\",\n  \"Selection Color\": \"Výběr Barva\",\n  \"Nav Text\": \"Text navigace\",\n  \"Nav Background\": \"Nav pozadí\",\n  \"Sidebar Text\": \"Text postranního panelu\",\n  \"Sidebar Background\": \"Pozadí postranního panelu\",\n  \"Sidebar Active Text\": \"Aktivní text postranního panelu\",\n  \"Sidebar Active Background\": \"Aktivní pozadí postranního panelu\",\n  \"Sidebar Hover Background\": \"Postranní panel při najetí na pozadí\",\n  \"Settings Text\": \"Nastavení Text\",\n  \"Settings Background\": \"Pozadí nastavení\",\n  \"Settings Item Background\": \"Pozadí položky nastavení\",\n  \"Settings Active Color\": \"Nastavení Aktivní barva\",\n  \"Settings Active Background\": \"Nastavení Aktivní pozadí\",\n  \"Settings Hover Background\": \"Nastavení Pozadí přechodu myši\",\n  \"This name is shown in the title area of the back-end.\": \"Toto jméno se zobrazí v titulní liště stránek.\",\n  \"App Name\": \"Jméno aplikace\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Toto motto se zobrazí na přihlašovací stránce administrace.\",\n  \"App Tagline\": \"Popisek aplikace\",\n  \"Brand\": \"Značka\",\n  \"Upload a custom logo to use in the back-end.\": \"Nahrajte vlastní logo, které bude použité v administraci.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Nahrajte vlastní favicon pro použití v back-endu\",\n  \"Favicon\": \"Ikona stránky (favicon)\",\n  \"Navigation Logo\": \"Logo navigace\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Nahradí odkaz na řídicí panel vlastním logem v navigaci.\",\n  \"Dashboard Icon\": \"Ikona Dashboard\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Pro ikonu řídicího panelu použijte vlastní obrázek (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Tato zpráva se zobrazí na přihlašovací obrazovce pro back-end.\",\n  \"Welcome Message\": \"Uvítací zpráva\",\n  \"Login Page\": \"Přihlašovací stránka\",\n  \"Background Type\": \"Typ pozadí\",\n  \"Flat Color\": \"Plochá barva\",\n  \"Wallpaper\": \"Tapeta na zeď\",\n  \"Wallpaper Size\": \"Velikost tapety\",\n  \"Auto\": \"Automaticky\",\n  \"Cover\": \"Pokrýt\",\n  \"Background Wallpaper Image\": \"Obrázek tapety na pozadí\",\n  \"Image\": \"Obrázek\",\n  \"Random Autumn Images\": \"Náhodné podzimní obrázky\",\n  \"Custom Image\": \"Vlastní obrázek\",\n  \"Login Page Image\": \"Obrázek přihlašovací stránky\",\n  \"Colors\": \"Barvy\",\n  \"Color Mode\": \"Barevný režim\",\n  \"Color Preset\": \"Předvolba barev\",\n  \"Menu Style\": \"Styl menu\",\n  \"Navigation\": \"Navigace\",\n  \"Custom Stylesheet\": \"Vlastní styly\",\n  \"Styles\": \"Styly\",\n  \"Inline\": \"V řádku\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"V dlaždicích\",\n  \"Collapsed\": \"Sbalené\",\n  \"Icons\": \"ikony\",\n  \"Left Side\": \"Levá strana\",\n  \"Add New Item\": \"Přidat novou položku\",\n  \"Link Color\": \"Barva odkazu\",\n  \"Current Password\": \"Aktuální heslo\",\n  \"New Password\": \"nové heslo\",\n  \"Current password does not match. Please try again!\": \"Aktuální heslo se neshoduje. Prosím zkuste to znovu!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Platnost vašeho hesla vypršela, z bezpečnostních důvodů si prosím vytvořte nové.\",\n  \"Region\": \"Oblast\",\n  \"Locale\": \"Jazyk\",\n  \"Select your desired locale for language use.\": \"Vyberte jazyk administrace.\",\n  \"Timezone\": \"Časová zóna\",\n  \"Adjust displayed dates to this timezone.\": \"Upraví zobrazení času a data podle této časové zóny.\",\n  \"Code Editor\": \"Editor kódu\",\n  \"Color Scheme\": \"Barevné schéma\",\n  \"Word Wrap\": \"Zalamování slov\",\n  \"Off\": \"Vypnout\",\n  \"40 Characters\": \"40 znaků\",\n  \"80 Characters\": \"80 znaků\",\n  \"Fluid\": \"Plynulý (fluid)\",\n  \"Font Size\": \"Velikost písma\",\n  \"Tab Size\": \"Počet znaků odsazení\",\n  \"Code Folding\": \"Skládání kódu\",\n  \"Mark begin\": \"Označit začátek\",\n  \"Mark begin and end\": \"Označit začátek a konec\",\n  \"Autocompletion\": \"Automatické doplňování\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Základní automatické doplňování (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Živé automatické doplňování\",\n  \"Show gutter\": \"Zobrazit kurzor\",\n  \"Highlight active line\": \"Zvýraznit aktivní řádel\",\n  \"Automatically close tags\": \"Automaticky uzavírat značky\",\n  \"Indent using tabs\": \"Odsazení tabulátory\",\n  \"Show indent guides\": \"Zobrazit vodítka odsazení\",\n  \"Show invisible characters\": \"Zobrazit neviditelné znaky\",\n  \"Show print margin\": \"Zobrazit okraje tisku\",\n  \"Custom styles to include in the HTML editor.\": \"Vlastní styly, které chcete zahrnout do editoru HTML.\",\n  \"Markup Styles\": \"Styly\",\n  \"Paragraph Formats\": \"Formáty odstavců\",\n  \"Markup Classes\": \"Třídy stylů\",\n  \"Tag Name\": \"Název štítku\",\n  \"Label\": \"Popisek\",\n  \"Paragraph\": \"Odstavec\",\n  \"Class Name\": \"Název třídy\",\n  \"Link\": \"Odkaz\",\n  \"Table\": \"Tabulka\",\n  \"Table Cell\": \"Buňka tabulky\",\n  \"Allowed Tags\": \"Povolené značky\",\n  \"The list of allowed tags.\": \"Seznam povolených značek.\",\n  \"Markup Tags\": \"Značky\",\n  \"Allowed Empty Tags\": \"Povolené prázdné značky\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Seznam značek, které nejsou odstraněny, pokud neobsahují žádný obsah.\",\n  \"Do Not Wrap Tags\": \"Nezabalovat tyto značky\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Seznam značek, které by neměly být zabaleny uvnitř blokových značek.\",\n  \"Remove Tags\": \"Odstranit značky\",\n  \"The list of tags that are removed together with their content.\": \"Seznam značek, které jsou odstraněny spolu s jejich obsahem.\",\n  \"Line Breaker Tags\": \"Značky pro přerušení řádků\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Seznam značek, které se používají k umístění prvku pro oddělování řádků.\",\n  \"Toolbar Buttons\": \"Tlačítka na panelu nástrojů\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Seznam výchozích tlačítek na panelů nástrojů textového editoru.\",\n  \"Insert a preset toolbar button configuration\": \"Vložte přednastavenou konfiguraci tlačítka panelu nástrojů\",\n  \"Allowed Attributes\": \"Povolené atributy\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Seznam povolených atributů HTML, kromě normálních povolenek.\",\n  \"Enable code snippets (Tab)\": \"Povolte úryvky (snippets) kódu (Tab)\",\n  \"Title\": \"Název\",\n  \"Description\": \"Popis\",\n  \"Attachment\": \"Příloha\",\n  \"Attachment URL\": \"URL přílohy\",\n  \"Add a title and description for this attachment.\": \"Přidat název a popisek k příloze.\",\n  \"Upload\": \"Nahrát\",\n  \"Are you sure?\": \"Jste si jistí?\",\n  \"Delete Selected\": \"Smazat vybrané\",\n  \"Upload Error\": \"Chyba nahrávání\",\n  \"Remove File\": \"Odstranit soubor\",\n  \"Show Light Switch\": \"Zobrazit přepínač light/dark\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Povolit uživatelům přepnout barevný režim z navigace.\",\n  \"Create :name\": \"Vytvořit :name\",\n  \"Update :name\": \"Upravit :name\",\n  \"Add :name\": \"Přidat :name\",\n  \"Link :name\": \"Vazba :name\",\n  \"Unlink\": \"Zrušit vazbu\",\n  \"Preview :name\": \"Náhled :name\",\n  \"Link a New :name\": \"Vytvořit novou vazbu na :name\",\n  \"Add a New :name\": \"Přidat nový :name\",\n  \"Related :name Data\": \"Související data pro :name\",\n  \":name Created\": \":name byl úspěšně vytvořen\",\n  \":name Updated\": \":name byl úspěšně upraven\",\n  \":name Deleted\": \":name byl úspěšně smazán\",\n  \":name Added\": \":name přidáno\",\n  \":name Linked\": \":name propojeno\",\n  \":name Removed\": \":name odstraněno\",\n  \":name Unlinked\": \":name odpojeno\",\n  \"Form record with an ID of :id could not be found.\": \"Záznam formuláře s ID :id nebyl nalezen.\",\n  \"Remove Selected\": \"Odstranit vybrané\",\n  \"Unlink Selected\": \"Odpojit vybrané\",\n  \"Preview the Website\": \"Náhled stránek\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Správa uživatelů administrace, jejich skupin a opravnění.\",\n  \"Define permissions for administrators based on their role.\": \"Definujte oprávnění správců na základě jejich role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Přidat administrátory do skupin používaných pro oznámení a funkce.\",\n  \"Branding & Appearance\": \"Nastavení administrace\",\n  \"Customize the administration area such as name, colors and logo.\": \"Nastavte si název, logo a barvy použité v administraci.\",\n  \"Editor Settings\": \"Nastavení editoru kódu\",\n  \"Change the global editor preferences.\": \"Nastavení editoru kódu, velikosti písma a barevného schématu.\",\n  \"My Account\": \"Můj účet\",\n  \"Update your account details such as name, email address and password.\": \"Nastavte si svoje jméno, e-mailovou adresu a heslo.\",\n  \"Backend Preferences\": \"Nastavení administrace\",\n  \"Manage your account preferences such as desired language.\": \"Spravujte nastavení svého uživatelského účtu, jako je například jazyk apod.\",\n  \"security login\": \"bezpečnost login\",\n  \"List Setup\": \"Nastavení seznamu\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Zaškrtněte políčka pro výběr sloupců, které chcete vidět v seznamu. Můžete změnit pozici sloupců přetažením nahoru nebo dolů.\",\n  \"Records Per Page\": \"Počet záznamů na stránku\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Vyberte počet záznamů na stránku, které chcete zobrazit. Vezměte prosím na vědomí, že vysoký počet záznamů na jedné stránce může snížit výkon.\",\n  \"Reset to Default\": \"Obnovit výchozí nastavení\",\n  \"Add Selected\": \"Přidat vybrané\",\n  \"Create & Close\": \"Vytvořit a zavřít\",\n  \"Creating :name...\": \"Vytvářím :name...\",\n  \"Save & Close\": \"Uložit a zavřít\",\n  \"Saving :name...\": \"Ukládám :name...\",\n  \"Delete this record?\": \"Smazat tento záznam?\",\n  \"Deleting :name...\": \"Odstraňování :name...\",\n  \"Loading...\": \"Načítám...\",\n  \"Complete\": \"Dokončit\",\n  \"Please specify the modelClass property for :type\": \"Zadejte vlastnost modelClass pro :type\",\n  \"Please specify some columns to export.\": \"Vyberte některé sloupce pro export.\",\n  \"Missing column identifier\": \"Chybějící identifikátor sloupce\",\n  \"Unknown column\": \"Neznámý sloupec\",\n  \"Please specify some columns to import.\": \"Vyberte některé sloupce pro import.\",\n  \"Please match some columns first.\": \"Nejdříve prosím vytvořte vazbu mezi sloupci.\",\n  \"Please specify a match for the required field :label.\": \"Zadejte odpovídající hodnotu pro požadované pole :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Kódování zdrojového souboru nebylo rozpoznáno. Vyberte prosím možnost vlastního formátu souboru se správným kódováním pro import vašeho souboru.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Musíte implementovat chování controlleru ListController s povolenou možností exportu 'useList'.\",\n  \"File export process completed!\": \"Export souboru byl dokončen!\",\n  \"The browser will now redirect to the file download.\": \"Prohlížeč bude nyní přesměrován na stažení souboru.\",\n  \"Ignore this column\": \"Ignorovat tento sloupec\",\n  \"Drop column here...\": \"Sem přetáhněte sloupec...\",\n  \"Please upload a valid CSV file.\": \"Nahrajte prosím platný soubor CSV.\",\n  \"Created\": \"Vytvořeno\",\n  \"Updated\": \"Aktualizováno\",\n  \"Skipped\": \"Vynecháno\",\n  \"Warnings\": \"Upozornění\",\n  \"Errors\": \"Chyby\",\n  \"Skipped Rows\": \"Přeskočené řádky\",\n  \"Show Ignored Columns\": \"Zobrazit ignorované sloupce\",\n  \"Auto Match Columns\": \"Automaticky propojit sloupce\",\n  \"File not found\": \"Soubor nebyl nalezen\",\n  \"There was no data supplied to export\": \"K exportu nebyla nalezena žádná data\",\n  \"Created At\": \"Vytvořeno v\",\n  \"Updated At\": \"Aktualizováno v\",\n  \"Deleted At\": \"Smazáno v\",\n  \"Created By\": \"Vytvořil(a)\",\n  \"Updated By\": \"Aktualizováno uživatelem\",\n  \"Deleted By\": \"Smazáno uživatelem\",\n  \"Create Dashboard\": \"Vytvořit řídicí panel\",\n  \"Edit Dashboard\": \"Upravit řídicí panel\",\n  \"The dashboard was successfully created.\": \"Řídicí panel byl úspěšně vytvořen.\",\n  \"The dashboard was successfully updated.\": \"Řídicí panel byl úspěšně aktualizován.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"Toto je systémem generovaný dashboard a nelze jej smazat.\",\n  \"Dashboard Name\": \"Název řídicího panelu\",\n  \"Please enter the dashboard name\": \"Zadejte název řídicího panelu\",\n  \"Please enter the dashboard code\": \"Zadejte prosím kód řídicího panelu\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"Kód může obsahovat pouze latinská písmena, číslice a pomlčky\",\n  \"Icon\": \"Ikona\",\n  \"Please select an icon\": \"Vyberte prosím ikonu\",\n  \"Global Access\": \"Globální přístup\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Dashboardy s povoleným globálním přístupem si mohou prohlížet ostatní uživatelé.\",\n  \"Hide Interval\": \"Skrýt interval\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Zaškrtněte toto políčko, pokud řídicí panel nepoužívá výběr rozsahu dat.\",\n  \"API Code\": \"Kód API\",\n  \"A unique code to refer to this dashboard using external systems.\": \"Unikátní kód pro odkazování na tento dashboard pomocí externích systémů.\",\n  \"Select Dashboard\": \"Vyberte řídicí panel\",\n  \"Value\": \"Hodnota\",\n  \"Difference with the previous period\": \"Rozdíl oproti předchozímu období\",\n  \"Group\": \"Skupina\",\n  \"Compare Totals\": \"Porovnat součty\",\n  \"Interval\": \"Interval\",\n  \"Date\": \"Datum\",\n  \"You don't have access to any dashboards.\": \"Nemáte přístup k žádným řídicím panelům.\",\n  \"No dashboards have been set up yet.\": \"Zatím nebyly nastaveny žádné dashboardy.\",\n  \"Import Dashboard\": \"Importovat řídicí panel\",\n  \"The requested dashboard could not be found.\": \"Požadovaný dashboard se nepodařilo nalézt.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Je povolen režim ladění. Pro produkční instalace se to nedoporučuje.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"Adresa URL backendu :name je příliš obecná. Nastavte prosím něco jedinečnějšího.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Byl nalezen účet s generickým přihlašovacím jménem :name. Přejmenujte prosím tento administrátorský účet.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP rozšíření :name není nainstalováno. Prosím nainstalujte toto rozšíření a aktivujte ho.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Plugin :name je vyžadován, ale není nainstalovaný. Prosím nainstalujte tento plugin.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Do adresáře :name nebo jeho podadresářů nelze zapisovat z PHP. Prosím nastavte správná oprávnění.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Váš účet nemá oprávnění k vytváření ani úpravě dashboardů.\",\n  \"No records found\": \"Nenalezeny žádné záznamy\",\n  \"Apply Changes\": \"Použít změny\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Chyba při načítání dat widgetu. Podrobnosti naleznete v konzoli chyb prohlížeče.\",\n  \"Configure the widget\": \"Konfigurace widgetu\",\n  \"to manage its settings.\": \"spravovat jeho nastavení.\",\n  \"Includes\": \"Zahrnuje\",\n  \"Excludes\": \"Vylučuje\",\n  \"Manage Roles\": \"Role\",\n  \"Manage Groups\": \"Skupiny\",\n  \"Customize Backend\": \"Nastavení administrace\"\n}"
  },
  {
    "path": "modules/backend/lang/da/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Ugyldig felttype :type.',\n    'options_method_not_exists' => 'Model klassen :model skal implementere :method() som returnerer valgmuligheder for feltet \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'En widget klasse med navnet \\':name\\' er ikke registreret',\n    'not_bound' => 'En widget klasse med navnet \\':name\\' er ikke blevet bundet til controlleren',\n  ],\n  'page' => [\n    'untitled' => 'Unavngivet',\n    'access_denied' => [\n      'label' => 'Adgang nægtet',\n      'help' => 'Du har ikke de fornødne rettigheder til at se denne side.',\n      'cms_link' => 'Tilbage til backenden',\n    ],\n    'no_database' => [\n      'label' => 'Databasen kan ikke findes',\n      'help' => 'En database er påkrævet for at kunne tilgå backenden. Kontroller om databasen er konfigureret og migreret, inden du prøver igen.',\n      'cms_link' => 'Tilbage til hjemmesiden',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Partialen \\':name\\' kunne ikke findes.',\n  ],\n  'account' => [\n    'sign_out' => 'Log ud',\n    'login_placeholder' => 'Log ind',\n    'password_placeholder' => 'adgangskode',\n    'enter_email' => 'Indtast din email',\n    'email_placeholder' => 'email',\n    'apply' => 'Accepter',\n    'cancel' => 'Fortryd',\n    'delete' => 'Slet',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Dashboard',\n    'widget_inspector_title' => 'Widget konfiguration',\n    'widget_inspector_description' => 'Konfigurer widgeten',\n    'widget_columns_label' => 'Bredde :columns',\n    'widget_columns_description' => 'Widget bredden, et nummer mellem 1 og 10.',\n    'widget_columns_error' => 'Indtast venligst widget bredden som et nummer mellem 1 og 10.',\n    'columns' => '{1} kollone|[2,Inf] kolonner',\n    'widget_new_row_label' => 'Tving ny række',\n    'widget_new_row_description' => 'Læg widget på ny række.',\n    'widget_title_label' => 'Widget titel',\n    'widget_title_error' => 'Widget titlen er påkrævet.',\n    'reset_layout_success' => 'Layoutet er blevet nulstillet',\n    'make_default_success' => 'Nuværende layout er standardlayoutet',\n    'status' => [\n      'widget_title_default' => 'System status',\n      'update_available' => '{0} opdateringer!|{1} opdatering!|[2,Inf] opdateringer!',\n      'updates_pending' => 'Afventende softwareopdateringer',\n      'updates_nil' => 'Softwaren er up-to-date',\n      'updates_link' => 'Opdater',\n      'warnings_pending' => 'Nogle problemer har brug for din opmærksomhed',\n      'warnings_nil' => 'Ingen advarsler at vise',\n      'warnings_link' => 'Vis',\n      'core_build' => 'System build',\n      'event_log' => 'Event log',\n      'request_log' => 'Request log',\n      'app_birthday' => 'Online siden',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Velkommen',\n      'welcome_back_name' => 'Velkommen tilbage til :app, :name.',\n      'welcome_to_name' => 'Velkommen til :app, :name.',\n      'first_sign_in' => 'Dette er første gang du er logget ind.',\n      'last_sign_in' => 'Du var sidst logget ind',\n      'view_access_logs' => 'Vis access logs',\n      'nice_message' => 'Hav en god dag!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Administrer Administrators',\n    'new' => 'Ny Administrator',\n    'first_name' => 'Fornavn',\n    'last_name' => 'Efternavn',\n    'full_name' => 'Fulde navn',\n    'email' => 'Email',\n    'groups' => 'Grupper',\n    'groups_comment' => 'Vælg hvilke grupper kontoen skal tilhøre. Grupper definerer brugerrettigheder, som kan overskrives på den enkelte bruger..',\n    'avatar' => 'Avatar',\n    'password' => 'Adgangskode',\n    'password_confirmation' => 'Bekræft Adgangskode',\n    'permissions' => 'Rettigheder',\n    'account' => 'Konto',\n    'superuser' => 'Superbruger',\n    'superuser_comment' => 'Giver kontoen fuld adgang til hele systemet.',\n    'send_invite' => 'Send invitation på email',\n    'send_invite_comment' => 'Sender en velkomstbesked med login informationer.',\n    'delete_confirm' => 'Slet denne administrator?',\n    'return' => 'Tilbage til administrator liste',\n    'allow' => 'Tillad',\n    'inherit' => 'Nedarv',\n    'deny' => 'Tillad ikke',\n    'group' => [\n      'name' => 'Gruppe',\n      'name_comment' => 'Navnet vises i gruppelisten på Opret/rediger Administrator formularen.',\n      'name_field' => 'Navn',\n      'description_field' => 'Beskrivelse',\n      'is_new_user_default_field_label' => 'Standardgruppe',\n      'is_new_user_default_field_comment' => 'Tilføj automatisk nye administratorer til denne gruppe',\n      'code_field' => 'Kode',\n      'code_comment' => 'Skriv en unik kode hvis du vil tilgå gruppe objektet, via API\\'et.',\n      'list_title' => 'Administrer Grupper',\n      'new' => 'Ny Gruppe',\n      'delete_confirm' => 'Slet denne administratorgruppe??',\n      'return' => 'Tilbage til gruppelisten',\n      'users_count' => 'Brugere',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Der er ingen bruger at loade eller save preferencer for.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Liste',\n    'search_prompt' => 'Søg...',\n    'no_records' => 'Der er ingen records i dette view.',\n    'missing_model' => 'List behavioren brugt i :class har ikke defineret en model.',\n    'missing_column' => 'Der er ingen kolonnedefinition for :columns.',\n    'missing_columns' => 'Liste brugt i :class har ikke nogle listekolonner defineret.',\n    'missing_definition' => 'List behavioren har ikke en kolonne for \\':field\\'.',\n    'missing_parent_definition' => 'List behavioren har ingen definition for \\':definition\\'.',\n    'behavior_not_ready' => 'List behavioren er ikke blevet initialiseret. Kontroller om du har kaldt makeLists() i controlleren.',\n    'invalid_column_datetime' => 'Kolonneværdien \\':column\\' er ikke et DateTime objekt: Mangler du en $dates reference i Modellen?',\n    'pagination' => 'Viste records: :from-:to af :total',\n    'prev_page' => 'Forrige side',\n    'next_page' => 'Næste side',\n    'refresh' => 'Opdater',\n    'updating' => 'Opdaterer...',\n    'loading' => 'Loader...',\n    'check' => 'Check',\n    'delete_selected' => 'Slet valgte',\n    'delete_selected_empty' => 'Der er ingen valgte records at slette.',\n    'delete_selected_confirm' => 'Slet de valgte records?',\n    'delete_selected_success' => 'Slet valgte records.',\n    'column_switch_true' => 'Ja',\n    'column_switch_false' => 'Nej',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Tryk på %s eller træk en fil hertil, for at uploade',\n  ],\n  'form' => [\n    'create_title' => 'Ny :name',\n    'update_title' => 'Rediger :name',\n    'preview_title' => 'Forhåndsvisning :name',\n    'reset_success' => 'Nulstilning færdig',\n    'missing_id' => 'Formular record ID er ikke blevet angivet.',\n    'missing_model' => 'Form behavior used in :class does not have a model defined.',\n    'missing_definition' => 'Form behavioren indeholder ikke et felt for \\':field\\'.',\n    'action_confirm' => 'Er du sikker?',\n    'create' => 'Opret',\n    'create_and_close' => 'Opret og luk',\n    'creating' => 'Opretter...',\n    'creating_name' => 'Opretter :name...',\n    'save' => 'Gem',\n    'save_and_close' => 'Gem og luk',\n    'saving' => 'Gem...',\n    'saving_name' => 'Gemmer :name...',\n    'delete' => 'Slet',\n    'deleting' => 'Sletter...',\n    'confirm_delete' => 'Slet record?',\n    'confirm_delete_multiple' => 'Slet valgte records?',\n    'deleting_name' => 'Sletter :name...',\n    'reset_default' => 'Nulstil til standard',\n    'resetting' => 'Nulstiller',\n    'resetting_name' => 'Nulstiller :name',\n    'undefined_tab' => 'Andet',\n    'field_off' => 'Fra',\n    'field_on' => 'Til',\n    'add' => 'Tilføj',\n    'apply' => 'Slå til',\n    'cancel' => 'Fortryd',\n    'close' => 'Luk',\n    'confirm' => 'Bekræft',\n    'reload' => 'Reload',\n    'complete' => 'Færdig',\n    'ok' => 'OK',\n    'or' => 'eller',\n    'confirm_tab_close' => 'Luk tab? Ændringer der ikke er gemt vil blive tabt.',\n    'behavior_not_ready' => 'Form behavioren er ikke blevet initialiseret. Kontroller at du har kaldt initForm() in controlleren.',\n    'preview_no_files_message' => 'Der er ikke uploadet nogle filer.',\n    'preview_no_record_message' => 'Der er ikke valgt nogen record.',\n    'select' => 'Vælg',\n    'select_all' => 'Vælg alle',\n    'select_none' => 'vælg ingen',\n    'insert_row' => 'Indsæt Række',\n    'insert_row_below' => 'Indsæt Række Nedeunder',\n    'delete_row' => 'Slet Række',\n    'concurrency_file_changed_title' => 'Fil er blevet ændret',\n    'concurrency_file_changed_description' => 'Den fil du redigerer er blevet ændret på disken, af en anden bruger. Du kan enten reloade filen og miste ændringer eller overskrive filen på disken.',\n    'return_to_list' => 'Tilbage til listen',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Find Record',\n  ],\n  'relation' => [\n    'missing_config' => 'Relation behavioren har ingen konfiguration for \\':config\\'.',\n    'missing_definition' => 'Relation behavioren har ingen definition for \\':field\\'.',\n    'missing_model' => 'Relation behavioren brugt :class har ikke defineret en model.',\n    'invalid_action_single' => 'Denne handling kan ikke udføres på et \"enligt\" relationship.',\n    'invalid_action_multi' => 'Denne handling kan ikke udføres på et \"flere\" relationship.',\n    'help' => 'Tryk på en ting for at tilføje',\n    'add' => 'Tilføj',\n    'link_selected' => 'Link valgte',\n    'cancel' => 'Fortryd',\n    'close' => 'Luk',\n    'create' => 'Opret',\n    'update' => 'Opdater',\n    'preview' => 'Forhåndsvisning',\n    'remove_name' => 'Fjern :name',\n    'delete_name' => 'Slet :name',\n    'link' => 'Link',\n    'unlink_name' => 'Fjern link til :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Sorter records',\n    'no_records' => 'Der er ikke nogle records at sortere.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' with an ID of :id could not be found',\n    'missing_id' => 'Der er ikke angivet noget ID til model recorden.',\n    'missing_relation' => 'Model \\':class\\' har ingen definition af \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' har ikke metoden \\':method\\'.',\n    'invalid_class' => 'Model :model brugt i :class er ikke gyldig. Den skal nedarve fra \\\\Model Klassen.',\n    'mass_assignment_failed' => 'Mass assignment fejlede for Model attributen \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Systemkonfigurations-tips',\n    'tips_description' => 'Der er problemer du skal være opmærksom på for at konfigurre systemet ordenligt.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Mine indstillinger',\n    'menu_description' => 'Indstilling til din administrationsbruger',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accent color',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'alle',\n    'options_method_not_exists' => 'Model klassen :model skal implementere metoden :method() som returnerer muligheder til \\':filter\\' filteret.',\n    'date_all' => 'altid',\n  ],\n  'import_export' => [\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Vesteuropæisk)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Centralauropæisk)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, Sydeuropæisk)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, Nordeuropæisk)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabisk)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Græsk)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebraisk)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Tyrkisk)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordisk)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Keltisk)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Vesteuropæisk med eurotegn)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Upload og administrer media indhold - billeder, video, lyd, dokumenter',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'default_prompt' => 'Tryk på %s knappen for at finde et mediaobjekt',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Upload',\n    'move' => 'Flyt',\n    'delete' => 'Slet',\n    'add_folder' => 'Tilføj mappe',\n    'search' => 'Søg',\n    'display' => 'Vis',\n    'filter_everything' => 'Alt',\n    'filter_images' => 'Billeder',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Lyd',\n    'filter_documents' => 'Dokumenter',\n    'library' => 'Bibliotek',\n    'size' => 'Størrelse',\n    'title' => 'Titel',\n    'last_modified' => 'Sidst redigeret',\n    'public_url' => 'Offentlig URL',\n    'click_here' => 'Tryk her',\n    'thumbnail_error' => 'Fejl ved generering af thumbnail.',\n    'return_to_parent' => 'Gå en mappe tilbage',\n    'return_to_parent_label' => 'Gå op ..',\n    'nothing_selected' => 'Intet er valgt.',\n    'multiple_selected' => 'Flere ting valgt.',\n    'uploading_file_num' => 'Uploader :number fil(er)...',\n    'uploading_complete' => 'Upload færdig',\n    'uploading_error' => 'Upload fejlede',\n    'type_blocked' => 'Filtypen er blokeret af sikkerhedshensyn.',\n    'order_by' => 'Sorter efter',\n    'folder' => 'Mappe',\n    'no_files_found' => 'Ingen filer fundet fra din forespørgsel.',\n    'delete_empty' => 'Vælg venligst filer at slette.',\n    'delete_confirm' => 'Slet de valgte ting?',\n    'error_renaming_file' => 'Fejl ved omdøbning.',\n    'new_folder_title' => 'Ny mappe',\n    'folder_name' => 'Mappenavn',\n    'error_creating_folder' => 'Fejl ved opretning af mappe',\n    'folder_or_file_exist' => 'En mappe eller fil med det angivede navn, findes allerede.',\n    'move_empty' => 'Vælg venligst nogle ting du vil flytte.',\n    'move_popup_title' => 'Flyt filer eller mapper',\n    'move_destination' => 'Destinationmappe',\n    'please_select_move_dest' => 'Vælg venligst en destinationsmappe.',\n    'move_dest_src_match' => 'Vælg venligst en anden destinationsmappe.',\n    'empty_library' => 'Media biblioteket er tomt. Upload filer eller mapper for at starte.',\n    'insert' => 'Indsæt',\n    'crop_and_insert' => 'Beskær & Indsæt',\n    'select_single_image' => 'Vælg venligst et enkelt billede.',\n    'selection_not_image' => 'Det valgte objekt er ikke et billede.',\n    'restore' => 'Fortryd alle ændringer',\n    'resize' => 'Skaler...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Fast størrelsesforhold',\n    'selection_mode_fixed_size' => 'Fast størrelse',\n    'height' => 'Højde',\n    'width' => 'Bredde',\n    'selection_mode' => 'Udvælgelsesmetode',\n    'resize_image' => 'Skaler billede',\n    'image_size' => 'Billedstørrelse:',\n    'selected_size' => 'Valgt:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/da.json",
    "content": "{\n  \"Update\": \"Opdatering\",\n  \"Cancel\": \"Afbestille\",\n  \"You are viewing as\": \"Du ser som\",\n  \"Preview Role\": \"Forhåndsvisningsrolle\",\n  \"This lets you test the actions this role can perform.\": \"Dette lader dig teste de handlinger, som denne rolle kan udføre.\",\n  \"View As Role\": \"Se som rolle\",\n  \"Return to Role Settings\": \"Vend tilbage til rolleindstillinger\",\n  \"Password must have a minimum of length of :min characters\": \"Adgangskoden skal have en minimumslængde på :min tegn\",\n  \"Password must contain at least one uppercase character.\": \"Adgangskoden skal indeholde mindst ét stort tegn.\",\n  \"Password must contain at least one lowercase character.\": \"Adgangskoden skal indeholde mindst ét lille bogstav.\",\n  \"Password must contain at least one number.\": \"Kodeord skal indeholde mindst et tal.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Adgangskoden skal indeholde mindst ét ikke-alfanumerisk tegn.\",\n  \"Welcome to your Administration Area, :name\": \"Velkommen til dit administrationsområde, :name\",\n  \"Duplicate\": \"Duplikere\",\n  \"Expand\": \"Udvide\",\n  \"Collapse\": \"Falde sammen\",\n  \"Move Up\": \"Flyt op\",\n  \"Move Down\": \"Flyt ned\",\n  \"Remove\": \"Fjern\",\n  \"Manage Item\": \"Administrer vare\",\n  \"Clear Filters\": \"Ryd filtre\",\n  \"Filter Setup\": \"Filteropsætning\",\n  \"Apply\": \"ansøge\",\n  \"Clear\": \"Klar\",\n  \"is equal to\": \"er lig med\",\n  \"is between\": \"er mellem\",\n  \"contains\": \"indeholder\",\n  \"is before\": \"er før\",\n  \"is after\": \"er efter\",\n  \"is greater than\": \"er større end\",\n  \"is less than\": \"er mindre end\",\n  \"1. Export output format\": \"1. Eksporter output format\",\n  \"File Format\": \"Filformat\",\n  \"Delimiter Character\": \"Adskillelseskarakter\",\n  \"Enclosure Character\": \"Indramningskarakter\",\n  \"Escape Character\": \"Escapekarakter\",\n  \"2. Select columns to export\": \"2. Vælg kolonner der skal eksporteres\",\n  \"Columns\": \"Kolonner\",\n  \"3. Set export options\": \"3. Sæt eksport indstillinger\",\n  \"CSV Custom\": \"CSV Custom\",\n  \"1. Upload an Import File\": \"1. Upload en CSV fil\",\n  \"Import File\": \"Importer fil\",\n  \"File Encoding\": \"Filindkodning\",\n  \"First row contains column titles\": \"Første række indeholder kolonnetitler\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Lad denne være krydset hvis første række i CSV filen er brugt til kolonnetitler.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the filkolonnerne til databasekolonner\",\n  \"File columns\": \"Filkolonner\",\n  \"Database fields\": \"Databasekolonner\",\n  \"3. Set Import Options\": \"3. Sæt import indstillinger\",\n  \"Export progress\": \"Eksporteringprocess\",\n  \"Processing\": \"Arbejder\",\n  \"Import progress\": \"Import progress\",\n  \"Import error\": \"Import fejl\",\n  \"Export error\": \"Eksporteringsfejl\",\n  \"Column preview\": \"Kolonne forhåndsvisning\",\n  \"Column\": \"Kolonne\",\n  \"Disable\": \"Deaktiver\",\n  \"Enable\": \"Aktiver\",\n  \"Delete\": \"Slet\",\n  \"Export\": \"Eksport\",\n  \"Import\": \"Importere\",\n  \"Select Action\": \"Vælg Handling\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Opret en ny konto for at logge ind på administrationsområdet.\",\n  \"First Name\": \"Fornavn\",\n  \"Last Name\": \"Efternavn\",\n  \"Email Address\": \"Email adresse\",\n  \"Pick a Username\": \"Vælg et brugernavn\",\n  \"Enter New Password\": \"Indtast ny adgangskode\",\n  \"Confirm Password\": \"Bekræft kodeord\",\n  \"Create Account\": \"Opret konto\",\n  \"Getting Ready\": \"Gøre sig klar\",\n  \"Just a few more minutes\": \"Bare et par minutter mere\",\n  \"Migrating Database\": \"Migrering af database\",\n  \"Access the Backend Panel\": \"Få adgang til Backend-panelet\",\n  \"View Backend During Maintenance\": \"Se backend under vedligeholdelse\",\n  \"Perform Software Updates\": \"Udfør softwareopdateringer\",\n  \"In Maintenance\": \"Ved vedligeholdelse\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Siden er i øjeblikket i vedligeholdelsestilstand, tjek venligst tilbage senere.\",\n  \"Dashboard\": \"Dashboard\",\n  \"Administrators\": \"Administratorer\",\n  \"Manage Admins\": \"Administrer administratorer\",\n  \"Create Admins\": \"Opret administratorer\",\n  \"Moderate Admins\": \"Moderate administratorer\",\n  \"Manage account suspension and ban admin accounts\": \"Administrer kontosuspendering og udelukk administratorkonti\",\n  \"Role Permissions\": \"Administrer roller\",\n  \"Team Groups\": \"Administrer Grupper\",\n  \"Manage Other Admins\": \"Administrer andre administratorer\",\n  \"Allow users to reset passwords and update emails.\": \"Tillader nulstilling af adgangskoder og opdatering af e-mails\",\n  \"Delete Admins\": \"Slet administratorer\",\n  \"Preferences\": \"Præferencer\",\n  \"Settings\": \"Indstillinger\",\n  \"Background Color\": \"Baggrundsfarve\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Tillad brugere at oprette nye roller og redigere eller slette roller lavere end deres højeste rolle.\",\n  \"Save Changes\": \"Gem ændringer\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Denne log viser en liste af successfulde administratorlogins. Records bliver gemt i :days dage.\",\n  \"Access Log\": \"Access log\",\n  \"View a list of successful back-end user sign ins.\": \"Se en liste af successfulde backendbruger logins.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Dato & Tid\",\n  \"Type\": \"Type\",\n  \"IP address\": \"IP addresse\",\n  \"Username\": \"Brugernavn\",\n  \"Login\": \"Log ind\",\n  \"First name\": \"Fornavn\",\n  \"Last name\": \"Efternavn\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"Et brugerdefineret skema bruges til dette filformat.\",\n  \"Select\": \"Vælg\",\n  \"Replace\": \"Erstatte\",\n  \"and\": \"og\",\n  \"Go\": \"Gå\",\n  \"Go to page\": \"Gå til side\",\n  \"Copy to Clipboard\": \"Kopier til udklipsholder\",\n  \"Reveal Contents\": \"Afsløre indhold\",\n  \"Selected Site\": \"Valgt websted\",\n  \"Use Emmet abbreviations\": \"Brug Emmet-forkortelser\",\n  \"A record does not exist for the selected site. Create one?\": \"Der findes ikke en post for det valgte websted. Skab en?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"De oplysninger, du indtastede, stemte ikke overens med vores optegnelser. Dobbelttjek venligst og prøv igen.\",\n  \"Administration Area\": \"Administrationsområde\",\n  \"Password Reset\": \"Nulstil adgangskode\",\n  \"Please enter a new password.\": \"Skriv en ny adgangskode\",\n  \"Password\": \"Adgangskode\",\n  \"Password Restore\": \"Adgangskodegendannelse\",\n  \"Please enter your login to restore the password.\": \"Indtast din login-info\",\n  \"A user could not be found with a login value of ':login'\": \"En bruger med login-infoen ':login', kunne ikke findes\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"En besked med instruktioner, er blevet sendt til din email adresse.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Ugyldig adgangskode-nulstillings-data angivet. Prøv venligst igen!\",\n  \"Unable to reset your password!\": \"Kunne ikke nulstille din adgangskode!\",\n  \"Password has been reset. You may now sign in.\": \"Adgangskoden er blevet nulstillet. Du kan nu logge ind.\",\n  \"Restore\": \"Genopret\",\n  \"Reset\": \"Reset\",\n  \"Stay logged in\": \"Forbliv logget ind\",\n  \"Forgot password?\": \"Glemt din adgangskode?\",\n  \"Global Editor Settings\": \"Globale editorindstillinger\",\n  \"Manage Widgets\": \"Administrer widgets\",\n  \"Add Widget\": \"Tilføj widget\",\n  \"Set the current layout as the default?\": \"Sæt det nuværende layout som standardlayout\",\n  \"Make Default\": \"Gør til standard\",\n  \"Reset layout back to default?\": \"Nulstil layout?\",\n  \"Reset Layout\": \"Nulstil layout\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"Vælg venligst\",\n  \"Width\": \"Bredde\",\n  \"full width\": \"Fuld bredde\",\n  \"Create Widgets\": \"Opret widgets\",\n  \"not equal to\": \"ikke lig med\",\n  \"Light Mode\": \"Lys tilstand\",\n  \"Dark Mode\": \"Mørk tilstand\",\n  \"Auto Mode\": \"Automatisk tilstand\",\n  \"OS Default\": \"OS Standard\",\n  \"Create a Custom Palette\": \"Opret en brugerdefineret palet\",\n  \"Custom Palette\": \"Brugerdefineret palette\",\n  \"Primary Color\": \"Primær farve\",\n  \"Secondary Color\": \"Sekundær farve\",\n  \"Selection Color\": \"Valg farve\",\n  \"Nav Text\": \"Nav tekst\",\n  \"Nav Background\": \"Nav baggrund\",\n  \"Sidebar Text\": \"Sidebjælketekst\",\n  \"Sidebar Background\": \"Sidebar baggrund\",\n  \"Sidebar Active Text\": \"Sidebar aktiv tekst\",\n  \"Sidebar Active Background\": \"Sidebar aktiv baggrund\",\n  \"Sidebar Hover Background\": \"Sidebar Hover baggrund\",\n  \"Settings Text\": \"Indstillinger Tekst\",\n  \"Settings Background\": \"Indstillinger Baggrund\",\n  \"Settings Item Background\": \"Indstillinger Element Baggrund\",\n  \"Settings Active Color\": \"Indstillinger Aktiv farve\",\n  \"Settings Active Background\": \"Indstillinger Aktiv baggrund\",\n  \"Settings Hover Background\": \"Indstillinger Hover Baggrund\",\n  \"This name is shown in the title area of the back-end.\": \"Dette navn vises i titlen i backenden.\",\n  \"App Name\": \"App Navn\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Dette bliver vist ved backendlogin-siden.\",\n  \"App Tagline\": \"App Tagline\",\n  \"Brand\": \"Brand\",\n  \"Upload a custom logo to use in the back-end.\": \"Upload et custom logo, der skal bruges i backenden.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Upload et brugerdefineret favicon til brug i back-end\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigationslogo\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Erstatter dashboardlinket med et brugerdefineret logo i navigationen.\",\n  \"Dashboard Icon\": \"Dashboard-ikon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Brug et brugerdefineret billede til dashboard-ikonet (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Denne besked vises på login-skærmen for back-end.\",\n  \"Welcome Message\": \"Velkomstbesked\",\n  \"Login Page\": \"Login side\",\n  \"Background Type\": \"Baggrundstype\",\n  \"Flat Color\": \"Flad farve\",\n  \"Wallpaper\": \"Tapet\",\n  \"Wallpaper Size\": \"Tapet størrelse\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Dække over\",\n  \"Background Wallpaper Image\": \"Baggrundsbaggrundsbillede\",\n  \"Image\": \"Billede\",\n  \"Random Autumn Images\": \"Tilfældige efterårsbilleder\",\n  \"Custom Image\": \"Brugerdefineret billede\",\n  \"Login Page Image\": \"Login side billede\",\n  \"Colors\": \"Farver\",\n  \"Color Mode\": \"Farvetilstand\",\n  \"Color Preset\": \"Farve forudindstillet\",\n  \"Menu Style\": \"Menu Style\",\n  \"Navigation\": \"Navigation\",\n  \"Custom Stylesheet\": \"Custom stylesheet\",\n  \"Styles\": \"Styles\",\n  \"Inline\": \"På linie\",\n  \"Text\": \"Tekst\",\n  \"Tiles\": \"Stablet\",\n  \"Collapsed\": \"Kollapset\",\n  \"Icons\": \"Ikoner\",\n  \"Left Side\": \"Venstre side\",\n  \"Add New Item\": \"Tilføj nyt element\",\n  \"Link Color\": \"Link farve\",\n  \"Current Password\": \"Nuværende kodeord\",\n  \"New Password\": \"nyt kodeord\",\n  \"Current password does not match. Please try again!\": \"Den aktuelle adgangskode stemmer ikke overens. Prøv igen!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Din adgangskode er udløbet. Opret en ny af sikkerhedsmæssige årsager.\",\n  \"Region\": \"Region\",\n  \"Locale\": \"Locale\",\n  \"Select your desired locale for language use.\": \"Vælg din ønskede locale.\",\n  \"Timezone\": \"Tidszone\",\n  \"Adjust displayed dates to this timezone.\": \"Juster viste datoer til denne tidszone.\",\n  \"Code Editor\": \"Kode editor\",\n  \"Color Scheme\": \"Farveskema\",\n  \"Word Wrap\": \"Word Wrap\",\n  \"Off\": \"Fra\",\n  \"40 Characters\": \"40 Karakterer\",\n  \"80 Characters\": \"80 Karakterer\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"Skriftstørrelse\",\n  \"Tab Size\": \"Tab størrelse\",\n  \"Code Folding\": \"Kode foldning\",\n  \"Mark begin\": \"Marker begyndelse\",\n  \"Mark begin and end\": \"Marker begyndelse og endelse\",\n  \"Autocompletion\": \"Autocompletion\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Basic Autocompletion (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Live Autocompletion\",\n  \"Show gutter\": \"Vis gutter\",\n  \"Highlight active line\": \"Highlight den aktive linie\",\n  \"Automatically close tags\": \"Luk automatisk tags\",\n  \"Indent using tabs\": \"Indryk med tabs\",\n  \"Show indent guides\": \"Vis indrykningsguides\",\n  \"Show invisible characters\": \"Vis usynlige karakterer\",\n  \"Show print margin\": \"Vis print margin\",\n  \"Custom styles to include in the HTML editor.\": \"Custom styles som skal inkluderes i HTML editoren.\",\n  \"Markup Styles\": \"Markup Styles\",\n  \"Paragraph Formats\": \"Afsnitsformater\",\n  \"Markup Classes\": \"Markup Classes\",\n  \"Tag Name\": \"Tagnavn\",\n  \"Label\": \"Label\",\n  \"Paragraph\": \"Afsnit\",\n  \"Class Name\": \"Class navn\",\n  \"Link\": \"Link\",\n  \"Table\": \"Tabel\",\n  \"Table Cell\": \"Tabel Celle\",\n  \"Allowed Tags\": \"Tilladte tags\",\n  \"The list of allowed tags.\": \"Liste af tilladte tags.\",\n  \"Markup Tags\": \"Markup Tags\",\n  \"Allowed Empty Tags\": \"Tilladte tomme tags\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Liste af tags der ikke bliver fjernet, når de ikke har noget indhold.\",\n  \"Do Not Wrap Tags\": \"Omgiv ikke tags\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Liste af tags der ikke skal omgives af block tags.\",\n  \"Remove Tags\": \"Fjern tags\",\n  \"The list of tags that are removed together with their content.\": \"Liste af tags der bliver fjernet, inklusiv deres indhold.\",\n  \"Line Breaker Tags\": \"Line Breaker Tags\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Listen over tags, der bruges til at placere et linjeskiftelement imellem.\",\n  \"Toolbar Buttons\": \"Værktøjslinjeknapper\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Værktøjslinjeknapperne skal som standard vises i Rich Editor.\",\n  \"Insert a preset toolbar button configuration\": \"Indsæt en forudindstillet konfiguration af værktøjslinjeknap\",\n  \"Allowed Attributes\": \"Tilladte attributter\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Listen over tilladte HTML-attributter, ud over de normale kvoter.\",\n  \"Enable code snippets (Tab)\": \"Aktiver kode snippets (Tab)\",\n  \"Title\": \"Titel\",\n  \"Description\": \"Beskrivelse\",\n  \"Attachment\": \"Vedhæftning\",\n  \"Attachment URL\": \"Vedhæftnings URL\",\n  \"Add a title and description for this attachment.\": \"Tilføj en titel og beskrivelse til denne vedhæftning.\",\n  \"Upload\": \"Upload\",\n  \"Are you sure?\": \"Er du sikker?\",\n  \"Delete Selected\": \"Slet valgte\",\n  \"Upload Error\": \"Upload fejl\",\n  \"Remove File\": \"Fjern fil\",\n  \"Show Light Switch\": \"Vis lyskontakt\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Tillad brugerne at skifte farvetilstand fra navigationen.\",\n  \"Create :name\": \"Opret :name\",\n  \"Update :name\": \"Opdater :name\",\n  \"Add :name\": \"Tilføj :name\",\n  \"Link :name\": \"Link :name\",\n  \"Unlink\": \"Fjern link\",\n  \"Preview :name\": \"Forhåndsvis :name\",\n  \"Link a New :name\": \"Link en ny :name\",\n  \"Add a New :name\": \"Tilføj en ny :name\",\n  \"Related :name Data\": \"Relateret :name data\",\n  \":name Created\": \":name oprettet\",\n  \":name Updated\": \":name opdateret\",\n  \":name Deleted\": \":name slettet\",\n  \":name Added\": \":navn tilføjet\",\n  \":name Linked\": \":navn Tilknyttet\",\n  \":name Removed\": \":navn Fjernet\",\n  \":name Unlinked\": \":navn Ikke-tilknyttet\",\n  \"Form record with an ID of :id could not be found.\": \"Formular record med et ID'et :id kunne ikke findes.\",\n  \"Remove Selected\": \"Fjern valgte\",\n  \"Unlink Selected\": \"Fjern link til valgte\",\n  \"Preview the Website\": \"Forhåndsvis hjemmesiden\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Administrer back-end administratorbrugere, grupper og rettigheder.\",\n  \"Define permissions for administrators based on their role.\": \"Definer tilladelser for administratorer baseret på deres rolle.\",\n  \"Add administrators to groups used for notifications and features.\": \"Tilføj administratorer til grupper, der bruges til notifikationer og funktioner.\",\n  \"Branding & Appearance\": \"Tilpas back-end\",\n  \"Customize the administration area such as name, colors and logo.\": \"Tilpas backendområdet med eksempelvis navn, farver og logo.\",\n  \"Editor Settings\": \"Indstillinger for redigeringsværktøj\",\n  \"Change the global editor preferences.\": \"Tilpas de globale indstllinger for redigeringsværktøjet, som eksempelvis skriftstørrelse og farver.\",\n  \"My Account\": \"Min konto\",\n  \"Update your account details such as name, email address and password.\": \"Opdater dine kontodetaljer som eksempelvis navn, email-adresse og adgangskode.\",\n  \"Backend Preferences\": \"Backend indstillinger\",\n  \"Manage your account preferences such as desired language.\": \"Administrer dine backend indstillinger som eksempelvis dit ønskede sprog.\",\n  \"security login\": \"Sikkerhedslogin\",\n  \"List Setup\": \"Listeopsætning\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Brug afkrydsningsfelterne til at vælge de kolonner du vil se i listen. Du kan lndre position for kolonnerne ved at trække dem op og ned.\",\n  \"Records Per Page\": \"Records pr. side\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Vælg det antal records der skal vises pr. side. Vær opmærksom på at et stort antal records på en enkelt side, kan gøre siden langsom.\",\n  \"Reset to Default\": \"Nulstil til standard\",\n  \"Add Selected\": \"Tilføj valgte\",\n  \"Create & Close\": \"Opret og luk\",\n  \"Creating :name...\": \"Opretter :navn...\",\n  \"Save & Close\": \"Gem og luk\",\n  \"Saving :name...\": \"Gemmer :navn...\",\n  \"Delete this record?\": \"Slet denne post?\",\n  \"Deleting :name...\": \"Sletter :navn...\",\n  \"Loading...\": \"Indlæser...\",\n  \"Complete\": \"Komplet\",\n  \"Please specify the modelClass property for :type\": \"Agiv venligst modelklasse muligheden for :type\",\n  \"Please specify some columns to export.\": \"Vælg venligst nogle kolonner at eksportere.\",\n  \"Missing column identifier\": \"Mangler kolonne identifier\",\n  \"Unknown column\": \"Ukendt kolonne\",\n  \"Please specify some columns to import.\": \"Vælg venligst nogle kolonner at importere.\",\n  \"Please match some columns first.\": \"Match venligst nogle kolonner først.\",\n  \"Please specify a match for the required field :label.\": \"Vælg venligst et match til det påkrævede felt :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Fil indkodning kan ikke genkendes. Vælg venligst filformat med den korrekte indkodning for at importere filen.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Du skal implementere controller behavioren ListController med eksport \\\"useList\\\" mulighed aktiveret.\",\n  \"File export process completed!\": \"Fileksportprocess færdig!\",\n  \"The browser will now redirect to the file download.\": \"Browseren vil nu viderestille dig til fildownload.\",\n  \"Ignore this column\": \"Ignorer denne kolonne\",\n  \"Drop column here...\": \"Slip kolonne her...\",\n  \"Please upload a valid CSV file.\": \"Upload venligst en gyldig CSV fil.\",\n  \"Created\": \"Oprettet\",\n  \"Updated\": \"Opdateret\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Advarsler\",\n  \"Errors\": \"Fejl\",\n  \"Skipped Rows\": \"Skipped Rækker\",\n  \"Show Ignored Columns\": \"Vis ignorerede kolonner\",\n  \"Auto Match Columns\": \"Automatch kolonner\",\n  \"File not found\": \"Fil blev ikke fundet\",\n  \"There was no data supplied to export\": \"Der blev ikke leveret noget data til eksportering\",\n  \"Created At\": \"Oprettet ved\",\n  \"Updated At\": \"Opdateret kl.\",\n  \"Deleted At\": \"Slettet kl.\",\n  \"Created By\": \"Oprettet af\",\n  \"Updated By\": \"Opdateret af\",\n  \"Deleted By\": \"Slettet af\",\n  \"Create Dashboard\": \"Opret dashboard\",\n  \"Edit Dashboard\": \"Rediger dashboard\",\n  \"The dashboard was successfully created.\": \"Dashboardet blev oprettet.\",\n  \"The dashboard was successfully updated.\": \"Dashboardet blev opdateret.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"Dette er et systemgenereret dashboard og kan ikke slettes.\",\n  \"Dashboard Name\": \"Navn på dashboard\",\n  \"Please enter the dashboard name\": \"Indtast venligst navnet på dashboardet\",\n  \"Please enter the dashboard code\": \"Indtast venligst dashboardkoden\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"Koden må kun indeholde latinske bogstaver, cifre og bindestreger\",\n  \"Icon\": \"Ikon\",\n  \"Please select an icon\": \"Vælg venligst et ikon\",\n  \"Global Access\": \"Global adgang\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Dashboards med aktiveret global adgang kan ses af andre brugere.\",\n  \"Hide Interval\": \"Skjul interval\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Markér dette, hvis dashboardet ikke bruger datointervalvælgeren.\",\n  \"API Code\": \"API-kode\",\n  \"A unique code to refer to this dashboard using external systems.\": \"En unik kode, der henviser til dette dashboard ved hjælp af eksterne systemer.\",\n  \"Select Dashboard\": \"Vælg Dashboard\",\n  \"Value\": \"Værdi\",\n  \"Difference with the previous period\": \"Forskel i forhold til den foregående periode\",\n  \"Group\": \"Gruppe\",\n  \"Compare Totals\": \"Sammenlign totaler\",\n  \"Interval\": \"Interval\",\n  \"Date\": \"Dato\",\n  \"You don't have access to any dashboards.\": \"Du har ikke adgang til nogen dashboards.\",\n  \"No dashboards have been set up yet.\": \"Der er endnu ikke oprettet nogen dashboards.\",\n  \"Import Dashboard\": \"Importér dashboard\",\n  \"The requested dashboard could not be found.\": \"Det ønskede dashboard kunne ikke findes.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Fejlfindingstilstand er aktiveret. Dette anbefales ikke til produktionsinstallationer.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"Backend-URL'en :name er for generisk. Indstil venligst til noget mere unikt.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Der blev fundet en konto med et generisk loginnavn. Omdøb venligst denne administratorkonto.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP extensionen :name er ikke installeret. Installer og aktiver venligst denne extension.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Plugin'et :name er en afhængighed, men er ikke installeret. Installer venligst dette plugin.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Mappe :name eller dens undermapper, er ikke skrivbare for PHP. Konfigurer venligst webserverens rettigheder for denne mappe.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Din konto har ikke tilladelser til at oprette eller redigere dashboards.\",\n  \"No records found\": \"Ingen optegnelser fundet\",\n  \"Apply Changes\": \"Anvend ændringer\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Fejl ved indlæsning af widgetdata. Se browserens fejlkonsol for at få flere oplysninger.\",\n  \"Configure the widget\": \"Konfigurer widgetten\",\n  \"to manage its settings.\": \"at administrere dens indstillinger.\",\n  \"Includes\": \"Inkluderer\",\n  \"Excludes\": \"Ekskluderer\"\n}"
  },
  {
    "path": "modules/backend/lang/de/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Ungültiger Feldtyp :type.',\n    'options_method_invalid_model' => 'Das Attribut \":field\" löst sich nicht zu einen gültigen Model auf. Probiere die options Methode der Model-Klasse :model explicit zu definieren.',\n    'options_method_not_exists' => 'Die Modell-Klasse :model muss eine Methode :method() mit Rückgabe der Werte von \":field\" besitzen.',\n    'options_static_method_invalid_value' => 'Die statische Methode \\':method()\\' in der Klasse :class hat kein valides Optionsarray zurückgegeben.',\n    'colors_method_not_exists' => 'Die Modellklasse :model muss eine Methode :method() definieren, welche html color (HEX) codes für das \\':field\\' Formularfeld zurückgibt.',\n  ],\n  'widget' => [\n    'not_registered' => 'Ein Widget namens \\':name\\' wurde nicht registriert',\n    'not_bound' => 'Ein Widget mit dem Klassennamen \\':name\\' wurde nicht mit dem Controller verbunden',\n  ],\n  'page' => [\n    'untitled' => 'Unbenannt',\n    404 => [\n      'label' => 'Seite nicht gefunden',\n      'help' => 'Die von Ihnen angeforderte Seite konnte nicht gefunden werden.',\n      'back_link' => 'Zurück zur vorigen Seite',\n    ],\n    'access_denied' => [\n      'label' => 'Zugriff verweigert',\n      'help' => 'Sie haben nicht die erforderlichen Berechtigungen, um diese Seite zu sehen.',\n      'cms_link' => 'Zum CMS-Backend',\n    ],\n    'no_database' => [\n      'label' => 'Datenbank fehlt',\n      'help' => 'Eine Datenbank wird benötigt um Zugriff auf das Backend zu haben. Überprüfe die Datenbankkonfiguration und migriere die Datenbank bevor du es noch einmal probierst.',\n      'cms_link' => 'Zurück zur Homepage',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Das Partial \\':name\\' wurde nicht gefunden.',\n    'invalid_name' => 'Ungültiger Partial: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Ungültiger AJAX handler: :name.',\n    'not_found' => 'AJAX handler \\':name\\' wurde nicht gefunden.',\n  ],\n  'account' => [\n    'impersonate_confirm' => 'Sind Sie sicher, dass Sie sich als dieser Benutzer anmelden wollen? Sie können zu Ihrem ursprünglichen Zustand zurückkehren, indem Sie sich abmelden.',\n    'impersonate_success' => 'Sie sind jetzt als dieser Benutzer angemeldet',\n    'signed_in_as' => 'Angemeldet als :full_name',\n    'sign_out' => 'Abmelden',\n    'login_placeholder' => 'Benutzername',\n    'password_placeholder' => 'Passwort',\n    'enter_email' => 'Bitte E-Mail-Adresse eingeben',\n    'email_placeholder' => 'E-Mail',\n    'apply' => 'Anwenden',\n    'cancel' => 'Abbrechen',\n    'delete' => 'Löschen',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Dashboard',\n    'widget_inspector_title' => 'Widget Konfiguration',\n    'widget_inspector_description' => 'Dieses Widget konfigurieren',\n    'widget_columns_label' => 'Breite :columns',\n    'widget_columns_description' => 'Die Breite de Widgets, eine Zahl zwischen 1 und 10.',\n    'widget_columns_error' => 'Bitte geben sie als Breite des Widgets eine Zahl zwischen 1 und 10 ein.',\n    'columns' => '{1} Spalte|[2,Inf] Spalten',\n    'widget_new_row_label' => 'Neue Reihe erzwingen',\n    'widget_new_row_description' => 'Setzt das Widget in eine neue Reihe',\n    'widget_title_label' => 'Titel des Widgets',\n    'widget_title_error' => 'Ein Titel des Widgets wird benötigt.',\n    'reset_layout_success' => 'Layout wurde zurückgesetzt',\n    'make_default_success' => 'Das aktuelle Layout ist nun das Standardlayout',\n    'collapse_all' => 'Alles zusammenklappen',\n    'expand_all' => 'Alles ausklappen',\n    'status' => [\n      'widget_title_default' => 'System Status',\n      'update_available' => '{0} Updates verfügbar!|{1} Update verfügbar!|[2,Inf] Updates verfügbar!',\n      'updates_pending' => 'Software ',\n      'updates_nil' => 'Software ist auf dem neuesten Stand',\n      'updates_link' => 'Update',\n      'warnings_pending' => 'Es sind Probleme aufgetreten',\n      'warnings_nil' => 'Keine Probleme',\n      'warnings_link' => 'Untersuchen',\n      'core_build' => 'System Build',\n      'event_log' => 'Event Log',\n      'request_log' => 'Request Log',\n      'app_birthday' => 'Online seit',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Willkommen',\n      'welcome_back_name' => 'Willkommen zurück zu :app, :name.',\n      'welcome_to_name' => 'Willkommen zu :app, :name.',\n      'first_sign_in' => 'Das ist das erste mal, dass Sie sich eingeloggt haben.',\n      'last_sign_in' => 'Ihr letzter Login war',\n      'view_access_logs' => 'Zugriffsprotokoll betrachten',\n      'nice_message' => 'Wir wünschen einen schönen Tag!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Administratoren verwalten',\n    'new' => 'Neuer Administrator',\n    'first_name' => 'Vorname',\n    'last_name' => 'Nachname',\n    'full_name' => 'Kompletter Name',\n    'email' => 'E-Mail',\n    'role_field' => 'Rolle',\n    'role_comment' => 'Rollen definieren Benutzerberechtigungen, die auf Benutzerebene auf der Registerkarte Berechtigungen überschrieben werden können.',\n    'groups' => 'Gruppen',\n    'groups_comment' => 'Geben Sie hier die Gruppenzugehörigkeit an',\n    'avatar' => 'Avatar',\n    'password' => 'Passwort',\n    'password_confirmation' => 'Passwort bestätigen',\n    'permissions' => 'Rechte',\n    'account' => 'Account',\n    'superuser' => 'Super-User',\n    'superuser_comment' => 'Bestätigen Sie hier, um dem Nutzer Vollzugriff zu geben',\n    'send_invite' => 'Einladung per E-Mail versenden',\n    'send_invite_comment' => 'Hier bestätigen, dass eine Einladung per E-Mail erfolgt',\n    'delete_confirm' => 'Möchten Sie diesen Administrator-Account wirklich löschen?',\n    'return' => 'Zurück zur Administratoren Übersicht',\n    'allow' => 'Zulassen',\n    'inherit' => 'Vererben',\n    'deny' => 'Verbieten',\n    'activated' => 'Aktiviert',\n    'last_login' => 'Letzer login',\n    'created_at' => 'Erstellt am',\n    'updated_at' => 'Aktualisiert am',\n    'group' => [\n      'name' => 'Gruppe',\n      'name_comment' => 'Der Name, der angezeigt wird wenn  name is displayed in the group list on the Create/Edit Administrator form.',\n      'name_field' => 'Name',\n      'description_field' => 'Beschreibung',\n      'is_new_user_default_field_label' => 'Standard Gruppe',\n      'is_new_user_default_field_comment' => 'Fügt neue Administratoren zu dieser Gruppe standardmäßig hinzu.',\n      'code_field' => 'Code',\n      'code_comment' => 'Eindeutigen Code hinzufügen, wenn dies über die API bearbeitet werden soll.',\n      'list_title' => 'Gruppen verwalten',\n      'new' => 'Neue Administratoren Gruppe',\n      'delete_confirm' => 'Möchten Sie diesen Administratoren-Gruppe wirklich löschen?',\n      'return' => 'Zurück zur Gruppen-Übersicht',\n      'users_count' => 'Benutzer',\n    ],\n    'role' => [\n      'name' => 'Rolle',\n      'name_field' => 'Name',\n      'name_comment' => 'Der Name wird in der Rollenliste auf dem Administratorformular angezeigt.',\n      'description_field' => 'Beschreibung',\n      'code_field' => 'Code',\n      'code_comment' => 'Geben Sie einen eindeutigen Code an, wenn Sie mit der API auf das Rollenobjekt zugreifen möchten.',\n      'list_title' => 'Rollen verwalten',\n      'new' => 'Neue Rolle',\n      'delete_confirm' => 'Diese Administratorrolle löschen?',\n      'return' => 'Zurück zur Rollenliste',\n      'users_count' => 'Benutzer',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Zum Speichern oder Anzeigen dieser Einstellungen liegt kein Nutzerkonto vor',\n    ],\n    'trashed_hint_title' => 'Dieses Konto wurde gelöscht.',\n    'trashed_hint_desc' => 'Dieses Konto wurde gelöscht und kann nicht mehr angemeldet werden. Um es wiederherzustellen, klicken Sie auf das Symbol \"Benutzer wiederherstellen\" unten rechts',\n  ],\n  'list' => [\n    'default_title' => 'Auflisten',\n    'search_prompt' => 'Suchen...',\n    'no_records' => 'Keine Ergebnisse für diese Ansicht gefunden',\n    'missing_model' => 'In :class benutztes Lisstenverhalten hat kein Model definiert.',\n    'missing_column' => 'Keine Spaltendefinition für :columns.',\n    'missing_columns' => 'In :class benutzte Liste behinhaltet keine Spalten',\n    'missing_definition' => 'Der Liste fehlt eine Spalte für \\':field\\'.',\n    'missing_parent_definition' => 'Listenverhalten beinhaltet keine Definition von \\':definition\\'.',\n    'behavior_not_ready' => 'Listenverhalten kann nicht initialisiert werden, überprüfen Sie den Aufruf von makeLists() in Ihrem Controller.',\n    'invalid_column_datetime' => 'Spaltenwert \\':column\\' ist kein gültiges DateTime Objekt, haben Sie eine  $dates Referenz in dem Model vergessen?',\n    'pagination' => 'Angezeigte Aufzeichnungen: :from-:to von :total',\n    'first_page' => 'Erste Seite',\n    'last_page' => 'Letzte Seite',\n    'prev_page' => 'Vorherige Seite',\n    'next_page' => 'Nächste Seite',\n    'refresh' => 'Aktualisieren',\n    'updating' => 'Aktualisiere...',\n    'loading' => 'Laden...',\n    'check' => 'Auswählen',\n    'create_button' => ':name erstellen',\n    'delete_selected' => 'Markierte löschen',\n    'delete_selected_empty' => 'Keine Einträge zum Löschen markiert.',\n    'delete_selected_confirm' => 'Markierte Einträge löschen?',\n    'delete_selected_success' => 'Markierte Einträge erfolgreich gelöscht.',\n    'column_switch_true' => 'Ja',\n    'column_switch_false' => 'Nein',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Auf %s klicken oder eine Datei hierhin ziehen, um sie hochzuladen',\n  ],\n  'form' => [\n    'create_title' => ':name erstellen',\n    'update_title' => ':name bearbeiten',\n    'preview_title' => 'Vorschau für :name',\n    'reset_success' => 'Zurücksetzung abgeschlossen',\n    'missing_id' => 'Formulardatensatz-ID (Form record ID) fehlt.',\n    'missing_model' => 'In :class genutztes Formularverhalten (behaviour) hat kein definiertes Model',\n    'missing_definition' => 'Formverhalten fehlt ein Feld für \\':field\\'.',\n    'action_confirm' => 'Sind Sie sich sicher?',\n    'create' => 'Erstellen',\n    'create_and_close' => 'Erstellen und schließen',\n    'creating' => 'Erstellen...',\n    'creating_name' => 'Erstelle :name...',\n    'save' => 'Speichern',\n    'save_and_close' => 'Speichern und schließen',\n    'saving' => 'Wird gespeichert...',\n    'saving_name' => ':name wird gespeichert...',\n    'delete' => 'Löschen',\n    'deleting' => 'Löschen...',\n    'confirm_delete' => 'Wollen Sie diesen Eintrag wirklich löschen?',\n    'confirm_delete_multiple' => 'Wollen Sie diese Einträge wirklich löschen?',\n    'deleting_name' => 'Deleting :name...',\n    'reset_default' => 'Zurücksetzen',\n    'resetting' => 'Setze zurück...',\n    'resetting_name' => 'Setze :name zurück...',\n    'undefined_tab' => 'Verschiedenes',\n    'field_off' => 'Aus',\n    'field_on' => 'An',\n    'add' => 'Hinzufügen',\n    'apply' => 'Anwenden',\n    'cancel' => 'Abbrechen',\n    'close' => 'Schließen',\n    'confirm' => 'Bestätigen',\n    'reload' => 'Erneut laden',\n    'complete' => 'Abgeschlossen',\n    'ok' => 'OK',\n    'or' => 'oder',\n    'confirm_tab_close' => 'Wollen Sie den Tab wirklich schließen? Ungespeicherte Änderungen gehen verloren.',\n    'behavior_not_ready' => 'Formularverhalten kann nicht initialisiert werden, überprüfen Sie den Aufruf von makeLists() in Ihrem Controller.',\n    'preview_no_files_message' => 'Es wurden keine Dateien hochgeladen',\n    'preview_no_media_message' => 'Es wurde keine Media-Datei ausgewählt.',\n    'preview_no_record_message' => 'Es ist kein Eintrag ausgewählt.',\n    'select' => 'Auswählen',\n    'select_all' => 'Alles auswählen',\n    'select_none' => 'Nichts auswählen',\n    'insert_row' => 'Reihe einfügen',\n    'insert_row_below' => 'Neue Reihe darunter einfügen',\n    'delete_row' => 'Reihe löschen',\n    'concurrency_file_changed_title' => 'Datei wurde geändert',\n    'concurrency_file_changed_description' => 'Die Datei, welche Sie bearbeiten, wurde auf von einem anderen Benutzer geändert. Sie können die Datei entweder erneut laden, wodurch Ihre Änderungen verloren gehen oder Sie überschreiben die Datei auf dem Server',\n    'return_to_list' => 'Zurück zur Liste',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Finde Eintrag',\n    'cancel' => 'Abbrechen',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Verhalten (behaviour) der Verbindung hat keine Konfiguration für \\':config\\'.',\n    'missing_definition' => 'Verhalten (behaviour) der Verbindung umfasst keine Definition für \\':field\\'.',\n    'missing_model' => 'Verhalten (behaviour) der Verbindung, die in :class benutzt wird, hat kein definiertes Model',\n    'invalid_action_single' => 'Dieser Vorgang kann nicht auf eine Einwege-Verbindung (singular) angewendet werden.',\n    'invalid_action_multi' => 'Dieser Vorgang kann nicht auf eine Mehrwege-Verbindung (multiple) angewendet werden.',\n    'help' => 'Zum Hinzufügen auf ein Item klicken',\n    'add' => 'Hinzufügen',\n    'link_selected' => 'Auswahl verlinken',\n    'cancel' => 'Abbrechen',\n    'close' => 'Schließen',\n    'create' => 'Erstellen',\n    'update' => 'Update',\n    'preview' => 'Vorschau',\n    'remove_name' => ':name entfernen',\n    'delete_name' => ':name löschen',\n    'link' => 'Link',\n    'unlink_name' => 'Link von :name entfernen',\n  ],\n  'reorder' => [\n    'default_title' => 'Einträge sortieren',\n    'no_records' => 'Es gibt keine Einträge zum sortieren.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' mit ID :id konnte nicht gefunden werden',\n    'missing_id' => 'Für diesen Model-Datensatz ist keine ID angegeben',\n    'missing_relation' => 'Model \\':class\\' hat keine definierte Verbindung \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' besitzt keine Methode \\':method\\'.',\n    'invalid_class' => 'In :class benutztes Model :model ist ungültig, da es von der Klasse \\\\Model abgeleitet sein muss (inherit).',\n    'mass_assignment_failed' => 'Mass assignment failed for Model attribute \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'System Konfigurations Tipps',\n    'tips_description' => 'Es gibt Probleme, welche Sie beachten müssen, um das System korrekt zu konfigurieren.',\n    'decompileBackendAssets' => 'Assets im Backend sind derzeit dekompiliert. Dies wird für Produktionsinstallationen nicht empfohlen.',\n  ],\n  'editor' => [\n    'toolbar_buttons_presets' => [\n      'default' => 'Standard',\n      'minimal' => 'Minimal',\n      'full' => 'Vollständig',\n    ],\n    'paragraph_formats_comment' => 'Die Optionen, welche in der Dropdown-Liste für Absatzformatierungen angezeigt werden.',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Meine Einstellungen',\n    'menu_description' => 'Einstellungen beziehen sich auf Ihren Administratoren Account',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Akzentfarbe',\n    'menu_mode_inline_no_icons' => 'Inline (ohne Icons)',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'Alle',\n    'options_method_not_exists' => 'Die Modelklasse :model muss eine methode :method() definiert haben und returning options for the \\':filter\\' filter.',\n    'date_all' => 'Ganzen Zeitraum',\n  ],\n  'import_export' => [\n    'upload_csv_file' => '1. CSV-Datei hochladen',\n    'import_file' => 'Datei importieren',\n    'row' => 'Zeile :row',\n    'first_row_contains_titles' => 'Erste Zeile enthält Spaltentitel',\n    'first_row_contains_titles_desc' => 'Aktiviert lassen, falls erste Zeile Spaltentitel enthält.',\n    'match_columns' => '2. Spalten der Datei den Datenbankfeldern zuordnen',\n    'file_columns' => 'Spalten der Datei',\n    'database_fields' => 'Datenbankfelder',\n    'set_import_options' => '3. Importoptionen festlegen',\n    'export_output_format' => '1. Exportformat wählen',\n    'file_format' => 'Dateiformat',\n    'standard_format' => 'Standardformat',\n    'custom_format' => 'Benutzerdefiniertes Format',\n    'delimiter_char' => 'Trennzeichen',\n    'enclosure_char' => 'Textqualifizierer',\n    'escape_char' => 'Escape-Zeichen',\n    'select_columns' => '2. Spalten für den Export auswählen',\n    'columns' => 'Spalten',\n    'set_export_options' => '3. Exportoptionen festlegen',\n    'import_progress' => 'Import-Fortschritt',\n    'processing' => 'Verarbeite',\n    'import_error' => 'Import-Fehler',\n    'export_progress' => 'Export-Fortschritt',\n    'export_error' => 'Export-Fehler',\n    'encoding_format' => 'Datei encoding',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Medien verwalten',\n    'allow_unsafe_markdown' => 'Unsicheres Markdown verwenden (kann Javascript enthalten)',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'default_prompt' => 'Klicke auf %s um eine Mediendatei auszuwählen',\n  ],\n  'media' => [\n    'menu_label' => 'Medien',\n    'upload' => 'Hochladen',\n    'move' => 'Verschieben',\n    'delete' => 'Löschen',\n    'add_folder' => 'Ordner erstellen',\n    'search' => 'Suchen',\n    'display' => 'Anzeigen',\n    'filter_everything' => 'Alles',\n    'filter_images' => 'Bilder',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Dokumente',\n    'library' => 'Sammlung',\n    'size' => 'Größe',\n    'title' => 'Titel',\n    'last_modified' => 'Zuletzt bearbeitet',\n    'public_url' => 'Öffentliche URL',\n    'click_here' => 'Hier drücken',\n    'thumbnail_error' => 'Fehler beim Erstellen des Thumbnails.',\n    'return_to_parent' => 'Zu oberem Ordner zurückkehren',\n    'return_to_parent_label' => 'Stufe hoch ..',\n    'nothing_selected' => 'Nichts ausgewählt.',\n    'multiple_selected' => 'Mehrere Dateien ausgewählt.',\n    'uploading_file_num' => 'Lade :number Datei(en)...',\n    'uploading_complete' => 'Upload vollständig',\n    'uploading_error' => 'Upload fehlgeschlagen',\n    'type_blocked' => 'Der verwendete Dateityp ist aus Sicherheitsgründen gesperrt.',\n    'order_by' => 'Sortieren nach',\n    'direction' => 'Direction',\n    'direction_asc' => 'Aufsteigend',\n    'direction_desc' => 'Absteigend',\n    'folder' => 'Ordner',\n    'no_files_found' => 'Keine entsprechenden Dateien gefunden.',\n    'delete_empty' => 'Bitte Wählen Sie Dateien zum Löschen aus.',\n    'delete_confirm' => 'Wollen Sie wirklich die gewählte(n) Datei(en) löschen?',\n    'error_renaming_file' => 'Fehler beim Umbenennen.',\n    'new_folder_title' => 'Neuer Ordner',\n    'folder_name' => 'Ordnername',\n    'error_creating_folder' => 'Fehler beim Erstellen des Ordners',\n    'folder_or_file_exist' => 'Ein Ordner oder eine Datei mit dem gewählten Namen existiert bereits.',\n    'move_empty' => 'Bitte wählen Sie Dateien zum Verschieben aus',\n    'move_popup_title' => 'Verschiebe Dateien oder Ordner',\n    'move_destination' => 'Zielordner',\n    'please_select_move_dest' => 'Bitte wählen Sie einen Zielordner.',\n    'move_dest_src_match' => 'Bitte wählen Sie einen anderen Zielordner.',\n    'empty_library' => 'Diese Medienbibliothek ist leer. Laden Sie Dateien hoch oder erstellen Sie Ordner!',\n    'insert' => 'Einfügen',\n    'crop_and_insert' => 'Zuschneiden und Einfügen',\n    'select_single_image' => 'Bitte wählen Sie ein einzelnes Bild.',\n    'selection_not_image' => 'Die gewählte Datei ist kein Bild.',\n    'restore' => 'Alle Änderungen rückgängig machen',\n    'resize' => 'Größe anpassen...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Festes Verhältnis',\n    'selection_mode_fixed_size' => 'Feste Größe',\n    'height' => 'Höhe',\n    'width' => 'Breite',\n    'selection_mode' => 'Auswahlmodus',\n    'resize_image' => 'Bildgröße anpassen',\n    'image_size' => 'Dimensionen:',\n    'selected_size' => 'Ausgewählt:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/de.json",
    "content": "{\n  \"Update\": \"Aktualisieren\",\n  \"Cancel\": \"Abbrechen\",\n  \"You are viewing as\": \"Sie sehen als\",\n  \"Preview Role\": \"Vorschau der Rolle\",\n  \"This lets you test the actions this role can perform.\": \"Auf diese Weise können Sie die Aktionen testen, die diese Rolle ausführen kann.\",\n  \"View As Role\": \"Als Rolle ansehen\",\n  \"Return to Role Settings\": \"Zurück zu den Rolleneinstellungen\",\n  \"Password must have a minimum of length of :min characters\": \"Das Passwort muss eine Mindestlänge von :min Zeichen haben\",\n  \"Password must contain at least one uppercase character.\": \"Das Kennwort muss mindestens einen Großbuchstaben enthalten.\",\n  \"Password must contain at least one lowercase character.\": \"Das Passwort muss mindestens einen Kleinbuchstaben enthalten.\",\n  \"Password must contain at least one number.\": \"Das Passwort muss mindestens eine Ziffer enthalten.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Das Kennwort muss mindestens ein nicht alphanumerisches Zeichen enthalten.\",\n  \"Welcome to your Administration Area, :name\": \"Willkommen in Ihrem Administrationsbereich, :name\",\n  \"Duplicate\": \"Duplizieren\",\n  \"Expand\": \"Aufklappen\",\n  \"Collapse\": \"Einklappen\",\n  \"Move Up\": \"Nach oben\",\n  \"Move Down\": \"Nach unten\",\n  \"Remove\": \"Entfernen\",\n  \"Manage Item\": \"Artikel verwalten\",\n  \"Clear Filters\": \"Filter leeren\",\n  \"Filter Setup\": \"Filtereinrichtung\",\n  \"Apply\": \"Anwenden\",\n  \"Clear\": \"Zurücksetzen\",\n  \"is equal to\": \"ist gleich\",\n  \"is between\": \"ist zwischen\",\n  \"contains\": \"enthält\",\n  \"is before\": \"ist vor\",\n  \"is after\": \"ist danach\",\n  \"is greater than\": \"ist größer als\",\n  \"is less than\": \"ist weniger als\",\n  \"1. Export output format\": \"1. Exportformat wählen\",\n  \"File Format\": \"Dateiformat\",\n  \"Delimiter Character\": \"Trennzeichen\",\n  \"Enclosure Character\": \"Textqualifizierer\",\n  \"Escape Character\": \"Escape-Zeichen\",\n  \"2. Select columns to export\": \"2. Spalten für den Export auswählen\",\n  \"Columns\": \"Spalten\",\n  \"3. Set export options\": \"3. Exportoptionen festlegen\",\n  \"CSV Custom\": \"Benutzerdefiniertes Format\",\n  \"1. Upload an Import File\": \"1. CSV-Datei hochladen\",\n  \"Import File\": \"Datei importieren\",\n  \"File Encoding\": \"Datei encoding\",\n  \"First row contains column titles\": \"Erste Zeile enthält Spaltentitel\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Aktiviert lassen, falls erste Zeile Spaltentitel enthält.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Ordne die Felder den Datenbank-Spalten zu\",\n  \"File columns\": \"Spalten der Datei\",\n  \"Database fields\": \"Datenbankfelder\",\n  \"3. Set Import Options\": \"3. Wähle die Import-Optionen aus\",\n  \"Export progress\": \"Export-Fortschritt\",\n  \"Processing\": \"Verarbeite\",\n  \"Import progress\": \"Import-Fortschritt\",\n  \"Import error\": \"Import-Fehler\",\n  \"Export error\": \"Export-Fehler\",\n  \"Column preview\": \"Spaltenvorschau\",\n  \"Column\": \"Spalte\",\n  \"Disable\": \"Deaktivieren\",\n  \"Enable\": \"Aktivieren\",\n  \"Delete\": \"Löschen\",\n  \"Export\": \"Exportieren\",\n  \"Import\": \"Importieren\",\n  \"Select Action\": \"Aktion auswählen\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Bitte erstellen Sie ein neues Konto, um sich im Administrationsbereich anzumelden.\",\n  \"First Name\": \"Vorname\",\n  \"Last Name\": \"Nachname\",\n  \"Email Address\": \"E-Mail-Addresse\",\n  \"Pick a Username\": \"Wählen Sie einen Benutzernamen\",\n  \"Enter New Password\": \"Neues Passwort eingeben\",\n  \"Confirm Password\": \"Bestätigen Sie das Passwort\",\n  \"Create Account\": \"Benutzerkonto anlegen\",\n  \"Getting Ready\": \"Abschluss\",\n  \"Just a few more minutes\": \"Nur noch ein paar Minuten\",\n  \"Migrating Database\": \"Datenbank migrieren\",\n  \"Access the Backend Panel\": \"Greifen Sie auf das Backend-Panel zu\",\n  \"View Backend During Maintenance\": \"Backend während der Wartung anzeigen\",\n  \"Perform Software Updates\": \"Führen Sie Software-Updates durch\",\n  \"In Maintenance\": \"In Wartung\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Die Seite befindet sich derzeit im Wartungsmodus, bitte versuchen Sie es später erneut.\",\n  \"Dashboard\": \"Dashboard\",\n  \"Administrators\": \"Administratoren\",\n  \"Manage Admins\": \"Administratoren verwalten\",\n  \"Create Admins\": \"Administratoren erstellen\",\n  \"Moderate Admins\": \"Moderierte Administratoren\",\n  \"Manage account suspension and ban admin accounts\": \"Verwalten Sie die Kontosperrung und sperren Sie Administratorkonten\",\n  \"Role Permissions\": \"Rollen verwalten\",\n  \"Team Groups\": \"Gruppen\",\n  \"Manage Other Admins\": \"Andere Administratoren verwalten\",\n  \"Allow users to reset passwords and update emails.\": \"Ermöglicht das Zurücksetzen von Passwörtern und das Aktualisieren von E-Mails\",\n  \"Delete Admins\": \"Administratoren löschen\",\n  \"Preferences\": \"Einstellungen\",\n  \"Settings\": \"Einstellungen\",\n  \"Background Color\": \"Hintergrundfarbe\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Erlauben Sie Benutzern, neue Rollen zu erstellen und Rollen zu bearbeiten oder zu löschen, die niedriger als ihre höchste Rolle sind.\",\n  \"Save Changes\": \"Änderungen speichern\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Dieses Log zeigt eine Liste mit erfolgreichen Anmelde-Versuchen von Administratoren. Die Aufzeichnungen bleiben erhalten für :days Tage.\",\n  \"Access Log\": \"Zugriffslog\",\n  \"View a list of successful back-end user sign ins.\": \"Sehen Sie sich eine Liste mit erfolgreichen Backend Benutzeranmeldungen an.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Datum & Uhrzeit\",\n  \"Type\": \"Typ\",\n  \"IP address\": \"IP Adresse\",\n  \"Username\": \"Benutzername\",\n  \"Login\": \"Anmelden\",\n  \"First name\": \"Vorname\",\n  \"Last name\": \"Nachname\",\n  \"Email\": \"E-Mail\",\n  \"A custom schema is used for this file format.\": \"Für dieses Dateiformat wird ein benutzerdefiniertes Schema verwendet.\",\n  \"Select\": \"Auswählen\",\n  \"Replace\": \"Ersetzen\",\n  \"and\": \"und\",\n  \"Go\": \"Gehe zu\",\n  \"Go to page\": \"Gehe zu Seite\",\n  \"Copy to Clipboard\": \"In Zwischenablage kopieren\",\n  \"Reveal Contents\": \"Anzeigen\",\n  \"Selected Site\": \"Ausgewählte Site\",\n  \"Use Emmet abbreviations\": \"Emmet Abkürzungen verwenden\",\n  \"A record does not exist for the selected site. Create one?\": \"Es existiert noch kein Eintrag für die ausgewählte Site. Soll dieser Eintrag erstellt werden?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Die Angaben stimmen nicht mit unseren Aufzeichnungen überein. Überprüfen Sie diese und versuchen Sie es noch einmal.\",\n  \"Administration Area\": \"Admin-Bereich\",\n  \"Password Reset\": \"Passwort zurücksetzen\",\n  \"Please enter a new password.\": \"Bitte ein neues Passwort eingeben\",\n  \"Password\": \"Passwort\",\n  \"Password Restore\": \"Passwort wiederherstellen\",\n  \"Please enter your login to restore the password.\": \"Bitte Benutzernamen eingeben\",\n  \"A user could not be found with a login value of ':login'\": \"Ein Benutzer mit dem Namen ':login' wurde nicht gefunden\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Eine E-Mail mit weiteren Anweisungen zum Zurücksetzen Ihres Passworts wurde an Sie versandt\",\n  \"Invalid password reset data supplied. Please try again!\": \"Konnte Passwort nicht zurücksetzen. Bitte erneut versuchen!\",\n  \"Unable to reset your password!\": \"Passwort-Zurücksetzung nicht möglich!\",\n  \"Password has been reset. You may now sign in.\": \"Ihr Passwort wurde erfolgreich zurückgesetzt. Sie können sich jetzt anmelden.\",\n  \"Restore\": \"Wiederherstellen\",\n  \"Reset\": \"Zurücksetzen\",\n  \"Stay logged in\": \"Angemeldet bleiben\",\n  \"Forgot password?\": \"Passwort vergessen?\",\n  \"Global Editor Settings\": \"Globale Editor-Einstellungen\",\n  \"Manage Widgets\": \"Widgets verwalten\",\n  \"Add Widget\": \"Neues Widget\",\n  \"Set the current layout as the default?\": \"Das aktuelle Layout and Standard setzen\",\n  \"Make Default\": \"Setze Standard\",\n  \"Reset layout back to default?\": \"Layout auf Ursprungszustand zurücksetzen\",\n  \"Reset Layout\": \"Layout zurücksetzen\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"Bitte auswählen\",\n  \"Width\": \"Breite\",\n  \"full width\": \"ganze Breite\",\n  \"Create Widgets\": \"Widgets erstellen\",\n  \"not equal to\": \"ist ungleich\",\n  \"Light Mode\": \"Heller Modus\",\n  \"Dark Mode\": \"Dunkler Modus\",\n  \"Auto Mode\": \"Automatikmodus\",\n  \"OS Default\": \"Von OS übernehmen\",\n  \"Create a Custom Palette\": \"Benutzerdefinierte Farbpalette erstellen\",\n  \"Custom Palette\": \"Benutzerdefinierte Farbpalette\",\n  \"Primary Color\": \"Primärfarbe\",\n  \"Secondary Color\": \"Zweitfarbe\",\n  \"Selection Color\": \"Farbe der Auswahl\",\n  \"Nav Text\": \"Navigation Text\",\n  \"Nav Background\": \"Navigation Hintergrund\",\n  \"Sidebar Text\": \"Menüleistentext\",\n  \"Sidebar Background\": \"Sidebar Hintergrund\",\n  \"Sidebar Active Text\": \"Sidebar aktiver Text\",\n  \"Sidebar Active Background\": \"Sidebar aktiver Hintergrund\",\n  \"Sidebar Hover Background\": \"Sidebar hover Hintergrund\",\n  \"Settings Text\": \"Einstellungen Text\",\n  \"Settings Background\": \"Einstellungen Hintergrund\",\n  \"Settings Item Background\": \"Einstellungen Hintergrund\",\n  \"Settings Active Color\": \"Einstellungen aktiver Text\",\n  \"Settings Active Background\": \"Einstellungen aktiver Hintergrund\",\n  \"Settings Hover Background\": \"Einstellungen hover Hintergrund\",\n  \"This name is shown in the title area of the back-end.\": \"Dieser Name wird als Titel des Backends angezeigt.\",\n  \"App Name\": \"App-Name\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Die Tagline wird im Log-In-Bereich des Backends angezeigt.\",\n  \"App Tagline\": \"App-Tagline\",\n  \"Brand\": \"Marke\",\n  \"Upload a custom logo to use in the back-end.\": \"Lade ein eigenes Logo hoch, das im Backend verwendet werden soll.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Lade ein benutzerdefiniertes Favicon zur Verwendung im Backend hoch\",\n  \"Favicon\": \"Website-Symbol\",\n  \"Navigation Logo\": \"Navigationslogo\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Ersetzt den Dashboard-Link durch ein eigenes Logo in der Navigation.\",\n  \"Dashboard Icon\": \"Dashboard Symbol\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Benutzen Sie ein benutzerdefiniertes Bild für das Dashboard-Symbol (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Diese Nachricht wird auf dem Anmeldebildschirm für das Backend angezeigt.\",\n  \"Welcome Message\": \"Willkommensnachricht\",\n  \"Login Page\": \"Anmeldeseite\",\n  \"Background Type\": \"Hintergrundtyp\",\n  \"Flat Color\": \"Fläche füllen\",\n  \"Wallpaper\": \"Hintergrundbild\",\n  \"Wallpaper Size\": \"Hintergrundbild Größe\",\n  \"Auto\": \"Automatisch\",\n  \"Cover\": \"Cover\",\n  \"Background Wallpaper Image\": \"Hintergrundbild\",\n  \"Image\": \"Bild\",\n  \"Random Autumn Images\": \"Zufällige Herbstbilder\",\n  \"Custom Image\": \"Benutzerdefiniertes Bild\",\n  \"Login Page Image\": \"Anmeldeseite-Bild\",\n  \"Colors\": \"Farben\",\n  \"Color Mode\": \"Farbmodus\",\n  \"Color Preset\": \"Farbvorlage\",\n  \"Menu Style\": \"Menustyles\",\n  \"Navigation\": \"Navigationsleiste\",\n  \"Custom Stylesheet\": \"Custom stylesheet\",\n  \"Styles\": \"Styles\",\n  \"Inline\": \"Inline\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"Kacheln\",\n  \"Collapsed\": \"Eingeklappt\",\n  \"Icons\": \"Symbole\",\n  \"Left Side\": \"Linke Seite\",\n  \"Add New Item\": \"Neues Element hinzufügen\",\n  \"Link Color\": \"Linkfarbe\",\n  \"Current Password\": \"Aktuelles Passwort\",\n  \"New Password\": \"Neues Passwort\",\n  \"Current password does not match. Please try again!\": \"Aktuelles Passwort stimmt nicht überein. Bitte versuchen Sie es erneut!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Ihr Passwort ist abgelaufen. Bitte erstellen Sie aus Sicherheitsgründen ein neues Passwort.\",\n  \"Region\": \"Region\",\n  \"Locale\": \"Sprache\",\n  \"Select your desired locale for language use.\": \"Wählen Sie Ihre gewünschte Sprache für das Backend.\",\n  \"Timezone\": \"Zeitzone\",\n  \"Adjust displayed dates to this timezone.\": \"Passt die angzeigten Daten an diese Zeitzone an.\",\n  \"Code Editor\": \"Code-Editor\",\n  \"Color Scheme\": \"Farbschema\",\n  \"Word Wrap\": \"Zeilenumbruch\",\n  \"Off\": \"Aus\",\n  \"40 Characters\": \"40 Zeichen\",\n  \"80 Characters\": \"80 Zeichen\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"Schriftgrösse\",\n  \"Tab Size\": \"Tabgrösse\",\n  \"Code Folding\": \"Code-Folding\",\n  \"Mark begin\": \"Markierungsbeginn\",\n  \"Mark begin and end\": \"Markierungsbeginn und Ende\",\n  \"Autocompletion\": \"Autovervollständigung\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Einfache Autovervollständigung (Strg + Leertaste)\",\n  \"Live Autocompletion\": \"Live Autovervollständigung\",\n  \"Show gutter\": \"Gutter anzeigen\",\n  \"Highlight active line\": \"Aktive Zeile hervorheben\",\n  \"Automatically close tags\": \"Automatisch Tags schließen\",\n  \"Indent using tabs\": \"Gedankenstrich bei Tabs\",\n  \"Show indent guides\": \"Zeige Einrückungshilfen\",\n  \"Show invisible characters\": \"Unsichtbare Zeichen anzeigen\",\n  \"Show print margin\": \"Zeige Druckabstand\",\n  \"Custom styles to include in the HTML editor.\": \"Custom styles im HTML editor einbinden.\",\n  \"Markup Styles\": \"Markup Styles\",\n  \"Paragraph Formats\": \"Absatzformatierungen\",\n  \"Markup Classes\": \"Markup CSS-Klassen\",\n  \"Tag Name\": \"Tag Name\",\n  \"Label\": \"Beschriftung\",\n  \"Paragraph\": \"Absatz\",\n  \"Class Name\": \"CSS-Klassenname\",\n  \"Link\": \"Link\",\n  \"Table\": \"Tabelle\",\n  \"Table Cell\": \"Tabellenzelle\",\n  \"Allowed Tags\": \"Erlaubte tags\",\n  \"The list of allowed tags.\": \"Die Liste von erlaubten Tags.\",\n  \"Markup Tags\": \"Markup Tags\",\n  \"Allowed Empty Tags\": \"Erlaube leere Tags\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Die Liste von Tags welche nicht entfernt werden wenn sie keinen Inhalt haben (leer sind).\",\n  \"Do Not Wrap Tags\": \"Tags nicht wrappen\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Die Liste von Tags welche nicht in Block-Tags gepackt werden sollen.\",\n  \"Remove Tags\": \"Entferne Tags\",\n  \"The list of tags that are removed together with their content.\": \"Die Liste an Tags welche nicht zusammen entfernt werden mit ihrem Inhalt.\",\n  \"Line Breaker Tags\": \"Zeilenumbruch Tags\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Die Liste von Tags, zwischen die ein Zeilenumbruch-Element eingefügt wird.\",\n  \"Toolbar Buttons\": \"Toolbar-Buttons\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Die Toolbar-Buttons, die im Rich Editor standardmässig angezeigt werden sollen.\",\n  \"Insert a preset toolbar button configuration\": \"Standard-Vorlage für Toolbars übernehmen:\",\n  \"Allowed Attributes\": \"Erlaubte Attribute\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Die Liste der zulässigen HTML-Attribute, zusätzlich zu den normalen Zulässigkeiten.\",\n  \"Enable code snippets (Tab)\": \"Aktiviere Code-snippets (Tab)\",\n  \"Title\": \"Titel\",\n  \"Description\": \"Beschreibung\",\n  \"Attachment\": \"Anhang\",\n  \"Attachment URL\": \"Originaldatei-URL\",\n  \"Add a title and description for this attachment.\": \"Fügen Sie dem Anhang einen Titel und eine Beschreibung hinzu.\",\n  \"Upload\": \"Upload\",\n  \"Are you sure?\": \"Sind Sie sicher?\",\n  \"Delete Selected\": \"Ausgewählte löschen\",\n  \"Upload Error\": \"Fehler beim hochladen\",\n  \"Remove File\": \"Datei entfernen\",\n  \"Show Light Switch\": \"Lichtschalter anzeigen\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Benutzern erlauben, den Farbmodus in der Navigation umzustellen.\",\n  \"Create :name\": \"Erstelle :name\",\n  \"Update :name\": \":name aktualisieren\",\n  \"Add :name\": \":name hinzufügen\",\n  \"Link :name\": \":name verknüpfen\",\n  \"Unlink\": \"Link entfernen\",\n  \"Preview :name\": \"Vorschau :name\",\n  \"Link a New :name\": \":name  verlinken\",\n  \"Add a New :name\": \":name hinzufügen\",\n  \"Related :name Data\": \"Verwandte :name Daten\",\n  \":name Created\": \":name wurde erfolgreich erzeugt\",\n  \":name Updated\": \":name wurde erfolgreich aktualisiert\",\n  \":name Deleted\": \":name wurde erfolgreich gelöscht\",\n  \":name Added\": \":name hinzugefügt\",\n  \":name Linked\": \":name verknüpft\",\n  \":name Removed\": \":name entfernt\",\n  \":name Unlinked\": \"Verknüpfung von :name entfernt\",\n  \"Form record with an ID of :id could not be found.\": \"Formulareintrag mit der ID :id kann nicht gefunden werden.\",\n  \"Remove Selected\": \"Ausgewählte entfernen\",\n  \"Unlink Selected\": \"Verknüpfung für ausgewählte entfernen\",\n  \"Preview the Website\": \"Vorschau der Webseite\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Backend-Benutzer, Administratoren, Gruppen und Zugriffsrechte verwalten.\",\n  \"Define permissions for administrators based on their role.\": \"Berechtigungen für Administratoren basierend auf ihrer Rolle definieren.\",\n  \"Add administrators to groups used for notifications and features.\": \"Administratoren in Gruppen organisieren.\",\n  \"Branding & Appearance\": \"Backend anpassen\",\n  \"Customize the administration area such as name, colors and logo.\": \"Passe den Admin-Bereich an - z.B. Name, Farben und Logo.\",\n  \"Editor Settings\": \"Editor-Einstellungen\",\n  \"Change the global editor preferences.\": \"Verwalten der Code-Editor-Einstellungen.\",\n  \"My Account\": \"Mein Account\",\n  \"Update your account details such as name, email address and password.\": \"Updaten Sie Ihre Account-Details wie z.B. den Namen, die E-Mail-Adresse und das Passwort.\",\n  \"Backend Preferences\": \"Backend-Einstellungen\",\n  \"Manage your account preferences such as desired language.\": \"Verwalten der Spracheinstellungen und der Backend-Darstellung.\",\n  \"security login\": \"Sicheres Anmelden\",\n  \"List Setup\": \"Listen-Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Wähle mit den Checkboxen die sichtbaren Spalten für die Liste aus. Du kannst die Spalten mit der Maus in die gewünschte Reihenfolge sortieren.\",\n  \"Records Per Page\": \"Einträge pro Seite\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Wähle aus, wie viele Einträge pro Seite angezeigt werden sollen. Bitte beachte, dass eine hohe Anzahl die Ladezeit der Liste negativ beeinflussen kann.\",\n  \"Reset to Default\": \"Standard wiederherstellen\",\n  \"Add Selected\": \"Ausgewählte hinzufügen\",\n  \"Create & Close\": \"Erstellen und schliessen\",\n  \"Creating :name...\": \"Erstelle :name\",\n  \"Save & Close\": \"Speichern und schliessen\",\n  \"Saving :name...\": \"Speichere :name\",\n  \"Delete this record?\": \"Möchtest Du diesen Eintrag wirklich löschen?\",\n  \"Deleting :name...\": \"Lösche :name\",\n  \"Loading...\": \"Lade...\",\n  \"Complete\": \"Abgeschlossen\",\n  \"Please specify the modelClass property for :type\": \"Die modelCalls Eigenschaft für :type wird benötigt\",\n  \"Please specify some columns to export.\": \"Bitte definiere Spalten für den Export.\",\n  \"Missing column identifier\": \"Spalten-ID fehlt\",\n  \"Unknown column\": \"Unbekannte Spalte\",\n  \"Please specify some columns to import.\": \"Bitte definiere Spalten für den Import.\",\n  \"Please match some columns first.\": \"Bitte ordne die Spalten zu.\",\n  \"Please specify a match for the required field :label.\": \"Bitte definiere eine Zuordnung für das Pflichtfeld :label\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Die Kodierung der Quelldatei konnte nicht erkannt werden. Bitte wähle die \\\"eigenes Dateiformat\\\" Option aus und definiere die Kodierung für deine Datei.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Das ListController Behavior muss implementiert sein, um die Option 'useList' zu nutzen.\",\n  \"File export process completed!\": \"Export abgeschlossen!\",\n  \"The browser will now redirect to the file download.\": \"Der Browser wird nun den Dateidownload starten.\",\n  \"Ignore this column\": \"Spalte ignorieren\",\n  \"Drop column here...\": \"Spalte hier ablegen...\",\n  \"Please upload a valid CSV file.\": \"Bitte lade eine gültige CSV-Datei hoch.\",\n  \"Created\": \"Erstellt\",\n  \"Updated\": \"Aktualisiert\",\n  \"Skipped\": \"Übersprungen\",\n  \"Warnings\": \"Warnungen\",\n  \"Errors\": \"Fehler\",\n  \"Skipped Rows\": \"Übersprungene Zeilen\",\n  \"Show Ignored Columns\": \"Zeige ignorierte Spalten\",\n  \"Auto Match Columns\": \"Spalten automatisch zuordnen\",\n  \"File not found\": \"Datei nicht gefunden\",\n  \"There was no data supplied to export\": \"Es sind keine Daten zum Exportieren vorhanden\",\n  \"Created At\": \"Erstellt am\",\n  \"Updated At\": \"Aktualisiert am\",\n  \"Deleted At\": \"Gelöscht am\",\n  \"Created By\": \"Erstellt von\",\n  \"Updated By\": \"Aktualisiert von\",\n  \"Deleted By\": \"Gelöscht von\",\n  \"Create Dashboard\": \"Dashboard erstellen\",\n  \"Edit Dashboard\": \"Dashboard bearbeiten\",\n  \"The dashboard was successfully created.\": \"Das Dashboard wurde erfolgreich erstellt.\",\n  \"The dashboard was successfully updated.\": \"Das Dashboard wurde erfolgreich aktualisiert.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"Dies ist ein vom System generiertes Dashboard und kann nicht gelöscht werden.\",\n  \"Dashboard Name\": \"Dashboard-Name\",\n  \"Please enter the dashboard name\": \"Bitte geben Sie den Namen des Dashboards ein.\",\n  \"Please enter the dashboard code\": \"Bitte geben Sie den Dashboard-Code ein.\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"Der Code darf nur lateinische Buchstaben, Ziffern und Bindestriche enthalten.\",\n  \"Icon\": \"Symbol\",\n  \"Please select an icon\": \"Bitte wählen Sie ein Symbol aus.\",\n  \"Global Access\": \"Globaler Zugang\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Dashboards mit aktiviertem globalen Zugriff können von anderen Benutzern eingesehen werden.\",\n  \"Hide Interval\": \"Intervall ausblenden\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Prüfen Sie dies, falls das Dashboard keinen Datumsbereichswähler verwendet.\",\n  \"API Code\": \"API-Code\",\n  \"A unique code to refer to this dashboard using external systems.\": \"Ein eindeutiger Code, um über externe Systeme auf dieses Dashboard zuzugreifen.\",\n  \"Select Dashboard\": \"Dashboard auswählen\",\n  \"Value\": \"Wert\",\n  \"Difference with the previous period\": \"Unterschied zur Vorperiode\",\n  \"Group\": \"Gruppe\",\n  \"Compare Totals\": \"Vergleich der Summen\",\n  \"Interval\": \"Intervall\",\n  \"Date\": \"Datum\",\n  \"You don't have access to any dashboards.\": \"Sie haben keinen Zugriff auf Dashboards.\",\n  \"No dashboards have been set up yet.\": \"Es wurden noch keine Dashboards eingerichtet.\",\n  \"Import Dashboard\": \"Import-Dashboard\",\n  \"The requested dashboard could not be found.\": \"Das angeforderte Dashboard konnte nicht gefunden werden.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Der Debug-Modus ist aktiviert. Dies wird für Produktionsinstallationen nicht empfohlen.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"Die Backend-URL :name ist zu allgemein. Bitte geben Sie einen eindeutigeren Namen an.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Es wurde ein Konto mit dem generischen Benutzernamen gefunden. Bitte benennen Sie dieses Administratorkonto um.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Die PHP Erweiterung :name ist nicht installiert. Bitte installieren Sie diese Library und aktivieren Sie die Erweiterung.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Das Plugin :name hat eine Abhängigkeit die nicht installiert ist. Bitte installieren Sie alle benötigten Plugins.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Verzeichnis :name oder ein Unterverzeichnis kann nicht von PHP beschrieben werden. Bitte setzen Sie die korrekten Rechte für den Webserver in diesem Verzeichnis.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Ihr Konto verfügt nicht über die Berechtigung, Dashboards zu erstellen oder zu bearbeiten.\",\n  \"No records found\": \"Keine Datensätze gefunden\",\n  \"Apply Changes\": \"Änderungen anwenden\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Fehler beim Laden der Widget-Daten. Weitere Informationen finden Sie in der Browser-Fehlerkonsole.\",\n  \"Configure the widget\": \"Konfigurieren Sie das Widget.\",\n  \"to manage its settings.\": \"um seine Einstellungen zu verwalten.\",\n  \"Includes\": \"Beinhaltet\",\n  \"Excludes\": \"Ausgeschlossen\",\n  \"Manage Roles\": \"Rollen verwalten\",\n  \"Manage Groups\": \"Gruppen\",\n  \"Customize Backend\": \"Backend anpassen\"\n}"
  },
  {
    "path": "modules/backend/lang/el/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Χρησιμοποιήθηκε μη έγκυρος τύπος πεδίου :type.',\n    'options_method_not_exists' => 'H κλάση του μοντέλου πρέπει να καθορίζει μια μέθοδο :method() επιστροφής επίλογων για το πεδίο \\':field\\'',\n  ],\n  'widget' => [\n    'not_registered' => 'Δεν έχει καθοριστεί το όνομα \\':name\\' της κλάσης του Widget',\n    'not_bound' => 'Το Widget με το όνομα της κλάσης \\':name\\' δεν έχει βρεθεί στον χειριστή.',\n  ],\n  'page' => [\n    'untitled' => 'Χωρίς Τίτλο',\n    'access_denied' => [\n      'label' => 'Απαγορεύεται η πρόσβαση',\n      'help' => 'Δεν έχεις τα απαραίτητα δικαιώματα για να δεις αυτήν την σελίδα.',\n      'cms_link' => 'Επιστροφή στό back-end.',\n    ],\n    'no_database' => [\n      'label' => 'Δεν βρέθηκε η βάση δεδομένων',\n      'help' => 'Η βάση δεδομένων είναι απαραίτητη για να έχετε πρόσβαση στο back-end. Ελέγξτε εάν η βάση δεδομένων είναι ρυθμισμένη και συνδεδεμένη πριν προσπαθήσετε ξανά.',\n      'cms_link' => 'Επιστροφή στην αρχική',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Το μερικό \\':name\\' δεν βρέθηκε.',\n  ],\n  'account' => [\n    'sign_out' => 'Αποσύνδεση',\n    'login_placeholder' => 'σύνδεση',\n    'password_placeholder' => 'κωδικός',\n    'enter_email' => 'Συμπληρώστε το email σας',\n    'email_placeholder' => 'email',\n    'apply' => 'Εφαρμογή',\n    'cancel' => 'Άκυρο',\n    'delete' => 'Διαγραφή',\n    'ok' => 'Εντάξει',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Κέντρο Ελένχου',\n    'widget_inspector_title' => 'Ρύθμιση Widget',\n    'widget_inspector_description' => 'Ρύθμιση του widget αναφορών',\n    'widget_columns_label' => 'Πλάτος :columns',\n    'widget_columns_description' => 'Το πλάτος του widget, ένας αριθμός μεταξύ του 1 και του 10.',\n    'widget_columns_error' => 'Παρακαλούμε εισάγετε το πλάτος του widget σαν ένα αριθμό μεταξύ του 1 και του 10.',\n    'columns' => '{1} στηλη|[2,Inf] στήλες',\n    'widget_new_row_label' => 'Έναρξη νέας σειράς',\n    'widget_new_row_description' => 'Τοποθετείστε το widget σε νέα σειρά.',\n    'widget_title_label' => 'Τίτλος Widget',\n    'widget_title_error' => 'O τίτλος του Widget είναι απαραίτητος.',\n    'reset_layout_success' => 'Η διάταξη επαναφέρθηκε',\n    'make_default_success' => 'Η τρέχουσα διάταξη είναι τώρα η προκαθορισμένη.',\n    'status' => [\n      'widget_title_default' => 'Κατάσταση συστήματος',\n      'update_available' => '{0} διαθέσιμες ενημερώσεις!|{1} διαθέσιμη ενημέρωση!|[2,Inf] διαθέσιμες ενημερώσεις!',\n      'updates_pending' => 'Εκκρεμούν ενημερώσεις λογισμικού',\n      'updates_nil' => 'Το λογισμικό είναι ενημερωμένο',\n      'updates_link' => 'Ενημέρωση',\n      'warnings_pending' => 'Κάποια ζητήματα θέλουν  προσοχή',\n      'warnings_nil' => 'Δεν υπάρχουν προειδοποιήσεις',\n      'warnings_link' => 'Εμφάνιση',\n      'core_build' => 'Έκδοση συστήματος',\n      'event_log' => 'Καταγραφή συμβάντων',\n      'request_log' => 'Καταγραφή αιτήσεων',\n      'app_birthday' => 'Σε λειτουργία από',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Καλώς ορίσατε',\n      'welcome_back_name' => 'Καλώς ορίσατε ξανά στο :app, :name.',\n      'welcome_to_name' => 'Καλώς ορίσατε στο :app, :name.',\n      'first_sign_in' => 'Αυτή είναι η πρώτη φορά που συνδεεστε.',\n      'last_sign_in' => 'Η τελευταία σύνδεση σας ήταν',\n      'view_access_logs' => 'Προβολή του αρχείου καταγραφής προσβάσεων',\n      'nice_message' => 'Να έχετε μια υπέροχη ημέρα!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Διαχειριστής',\n    'list_title' => 'Διαχείριση Διαχειριστών',\n    'new' => 'Νέος Διαχειριστής',\n    'first_name' => 'Όνομα',\n    'last_name' => 'Επώνυμο',\n    'full_name' => 'Ονοματεπώνυμο',\n    'email' => 'e-Mail',\n    'groups' => 'Ομάδες',\n    'groups_comment' => 'Καθορίστε σε ποιες ομάδες ανήκει αυτός ο λογαριασμός. Οι ομαδες καθορισουν τα δικαώματα του χρηστη, τα οποια μπορουν να παρακαμφθουν στο επιπεδο του χρηστη, στην καρτελα Δικαιωματων.',\n    'avatar' => 'Avatar',\n    'password' => 'Κωδικός',\n    'password_confirmation' => 'Επιβεβαίωση Κωδικού',\n    'permissions' => 'Δικαιώματα',\n    'account' => 'Λογαριασμός',\n    'superuser' => 'Υπέρ-Χρήστης',\n    'superuser_comment' => 'Εκχώρηση σε αυτόν τον λογαριασμό απεριόριστη πρόσβαση σε όλες τις περιοχές του συστήματος. Οι υπερ-χρήστες μπορούν να προσθέσουν και να διαχειριστούν άλλους χρήστες.',\n    'send_invite' => 'Αποστολή πρόσκλησης μέσω email',\n    'send_invite_comment' => 'Αποστέλλει ένα μήνυμα καλωσορίσματος το οποίο περιέχει τις πληροφορίες σύνδεσης και του κωδικού.',\n    'delete_confirm' => 'Διαγράφη αυτού του διαχειριστή;',\n    'return' => 'Επιστροφή στην λίστα των διαχειριστών',\n    'allow' => 'Επέτρεψε',\n    'inherit' => 'Κληρονόμησε',\n    'deny' => 'Απαγόρευσε',\n    'group' => [\n      'name' => 'Ομάδες',\n      'name_comment' => 'Το όνομα εμφανίζεται στην λίστα των ομάδων κατά την Προσθήκη/Επεξεργασία της φόρμας των Διαχειριστών.',\n      'name_field' => 'Όνομα',\n      'description_field' => 'Περιγραφή',\n      'is_new_user_default_field_label' => 'Προεπιλεγμένη ομάδα',\n      'is_new_user_default_field_comment' => 'Προεπιλεγμένη προσθήκη νέων διαχειριστών σε αυτήν την ομάδα.',\n      'code_field' => 'Κώδικας',\n      'code_comment' => 'Συμπληρώστε ένα μοναδικό κωδικό αν θέλετε να έχετε πρόσβαση στο αντικείμενο της ομάδας μέσω του API.',\n      'list_title' => 'Διαχείριση Ομάδων',\n      'new' => 'Νέα Ομάδα',\n      'delete_confirm' => 'Διαγραφή αυτής της ομάδας διαχειριστών;',\n      'return' => 'Επιστροφή στην λίστα των ομάδων',\n      'users_count' => 'Χρήστες',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Δεν υπάρχει κανένας πιστοποιημένος χρήστης για να φορτωθούν ή να σωθούν οι ρυθμίσεις του.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Λίστα',\n    'search_prompt' => 'Αναζήτηση...',\n    'no_records' => 'Δεν υπάρχουν εγγραφές σε αυτήν την προβολή.',\n    'missing_model' => 'Η συμπεριφορά της λίστας χρησιμοποιήθηκε στην :class δεν έχει κάποιο καθορισμένο μοντέλο.',\n    'missing_column' => 'Δεν υπάρχει ορισμός στηλών για τα :columns.',\n    'missing_columns' => 'Η λίστα χρησιμοποιήθηκε στη :class δεν έχει ορισμένες στήλες λίστας.',\n    'missing_definition' => 'Η συμπεριφορά της λίστας δεν περιέχει μια στήλη για το \\':field\\'.',\n    'missing_parent_definition' => 'Λίστα με τις συμπεριφορές οι οποίες δεν περιλαμβάνουν έναν ορισμό για \\':definition\\'.',\n    'behavior_not_ready' => 'Η συμπεριφορά της λίστας δεν έχει αρχικοποιηθεί, ελέγξτε ότι έχετε καλέσει την makeLists() στον χειριστή.',\n    'invalid_column_datetime' => 'Η τιμή της στήλης \\':column\\' δεν είναι ένα αντικείμενο DateTime, μήπως διαφεύγει μια $dates αναφορά στο μοντέλο?',\n    'pagination' => 'Εμφάνιση εγγραφών: :from-:to απο :total',\n    'prev_page' => 'Προηγούμενη σελίδα',\n    'next_page' => 'Επόμενη σελίδα',\n    'refresh' => 'Ανανέωση',\n    'updating' => 'Αναβάθμιση...',\n    'loading' => 'Φόρτωμα...',\n    'check' => 'Έλεγχος',\n    'delete_selected' => 'Διαγραφή επιλεγμένου',\n    'delete_selected_empty' => 'Δεν υπάρχουν επιλεγμένες εγγραφές για να διαγράψετε.',\n    'delete_selected_confirm' => 'Να διαγραφούν οι επιλεγμένες εγγραφές;',\n    'delete_selected_success' => 'Διαγραφή επιλεγμένων εγγραφών.',\n    'column_switch_true' => 'Ναι',\n    'column_switch_false' => 'Όχι',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Κάντε κλικ στο %s ή σύρετε ένα αρχείο εδώ για να το ανεβάσετε',\n  ],\n  'form' => [\n    'create_title' => 'Νέο :name',\n    'update_title' => 'Επεξεργασία :name',\n    'preview_title' => 'Προεπισκόπηση :name',\n    'reset_success' => 'Η επαναφορά ολοκληρώθηκε',\n    'missing_id' => 'Το ID της εγγραφής στην φόρμα δεν έχει οριστεί.',\n    'missing_model' => 'Η συμπεριφορά της φόρμας που χρησιμοποιήθηκε στην :class δεν έχει καθορισμένο μοντέλο.',\n    'missing_definition' => 'Η συμπεριφορά της φόρμας δεν περιέχει ένα πεδίο για το \\':field\\'.',\n    'action_confirm' => 'Είστε σίγουροι;',\n    'create' => 'Δημιουργία',\n    'create_and_close' => 'Δημιουργία και κλείσιμο',\n    'creating' => 'Δημιουργία...',\n    'creating_name' => 'Δημιουργία :name...',\n    'save' => 'Αποθήκευση',\n    'save_and_close' => 'Αποθήκευση και κλείσιμο',\n    'saving' => 'Αποθήκευση...',\n    'saving_name' => 'Αποθήκευση :name...',\n    'delete' => 'Διαγραφή',\n    'deleting' => 'Διαγραφή...',\n    'confirm_delete' => 'Διαγραφή εγγραφής',\n    'confirm_delete_multiple' => 'Διαγραφή επιλεγμένων εγγραφών;',\n    'deleting_name' => 'Διαγραφή :name...',\n    'reset_default' => 'Επαναφορά στο προκαθορισμένο',\n    'resetting' => 'Επαναφορά',\n    'resetting_name' => 'Επαναφορά :name',\n    'undefined_tab' => 'Διάφορα',\n    'field_off' => 'Όχι',\n    'field_on' => 'Ναι',\n    'add' => 'Προσθήκη',\n    'apply' => 'Εφαρμογή',\n    'cancel' => 'Άκυρο',\n    'close' => 'Κλείσιμο',\n    'confirm' => 'Επιβεβαίωση',\n    'reload' => 'Επαναφόρτιση',\n    'complete' => 'Ολοκλήρωση',\n    'ok' => 'Εντάξει',\n    'or' => 'ή',\n    'confirm_tab_close' => 'Κλείσιμο της καρτέλας; Οι μη αποθηκευμένες αλλαγές θα χαθούν.',\n    'behavior_not_ready' => 'Η συμπεριφορά δεν έχει αρχικοποιήσεις, ελέγξτε εάν έχετε καλέσει το initForm() στον χειριστή.',\n    'preview_no_files_message' => 'Δεν υπάρχουν αρχεία που ανέβηκαν.',\n    'preview_no_record_message' => 'Δεν είναι επιλεγμένη καμία εγγραφή.',\n    'select' => 'Επιλογή',\n    'select_all' => 'επιλογή όλων',\n    'select_none' => 'επιλέξτε κανένα',\n    'insert_row' => 'Προσθήκη Σειράς',\n    'insert_row_below' => 'Προσθήκη Σειράς από Κάτω',\n    'delete_row' => 'Διαγραφή Σειράς',\n    'concurrency_file_changed_title' => 'Το αρχείο έχει αλλάξει',\n    'concurrency_file_changed_description' => 'Το αρχείο το οποίο επεξεργάζεστε έχει αλλάξει στον δίσκο από έναν άλλο χρήστη. Μπορείτε είτε να επαναφορτώσετε το αρχείο και να χάσετε τις αλλαγές σας είτε να παρακάμψετε το αρχείο στον δίσκο.',\n    'return_to_list' => 'Επιστροφή στην λίστα',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Ανεύρεση Εγγραφής',\n  ],\n  'relation' => [\n    'missing_config' => 'Η συμπεριφορά της σχέσης δεν έχει καμία ρύθμιση για το \\':config\\'.',\n    'missing_definition' => 'Η συμπεριφορά της σχέσης δεν περιέχει ορισμό για το \\':field\\'.',\n    'missing_model' => 'Η συμπεριφορά της σχέσης που χρησιμοποιήθηκε στην :class δεν έχει καθορισμένο μοντέλο.',\n    'invalid_action_single' => 'Αυτή η ενεργεία δεν μπορεί να εκτελεστεί σε μια μοναδική σχέση.',\n    'invalid_action_multi' => 'Αυτή η ενέργεια δεν μπορεί να εκτελεστεί σε μια πολλαπλή σχέση.',\n    'help' => 'Κάντε κλικ πάνω σε ένα αντικείμενο για να προσθέσετε',\n    'add' => 'Προσθήκη',\n    'link_selected' => 'Σύνδεση του επιλεγμένου',\n    'cancel' => 'Άκυρο',\n    'close' => 'Κλείσιμο',\n    'create' => 'Δημιουργία',\n    'update' => 'Ενημέρωση',\n    'preview' => 'Προεπισκόπηση',\n    'remove_name' => 'Αφαίρεση :name',\n    'delete_name' => 'Διαγραφή :name',\n    'link' => 'Σύνδεση',\n    'unlink_name' => 'Αποσύνδεση :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Αναδιάταξη εγγραφών',\n    'no_records' => 'Δεν υπάρχουν διαθέσιμες εγγραφές για ταξινόμηση.',\n  ],\n  'model' => [\n    'name' => 'Μοντέλο',\n    'not_found' => 'Η κλάση \\':class\\' του μοντέλου με ID :id δεν μπόρεσε να βρεθεί',\n    'missing_id' => 'Δεν έχει οριστεί το ID για να αναζητηθεί η εγγραφή του μοντέλου.',\n    'missing_relation' => 'Η κλάση \\':class\\' του μοντέλου δεν περιέχει ένα ορισμό για την \\':relation\\'.',\n    'missing_method' => 'Η κλάση \\':class\\' του μοντέλου δεν περιέχει την μέθοδο \\':method\\'.',\n    'invalid_class' => 'Το μοντέλο \\':model\\' που χρησιμοποιήθηκε στην :class δεν είναι έγκυρο, πρέπει να κληρονομεί την κλάση του \\\\Model.',\n    'mass_assignment_failed' => 'Η μαζική εκχώρηση για την ιδιότητα \\':attribute\\' του μοντέλου απέτυχε.',\n  ],\n  'warnings' => [\n    'tips' => 'Συμβουλές ρύθμισης του συστήματος',\n    'tips_description' => 'Υπάρχουν ζητήματα για τα οποία πρέπει να δώσετε προσοχή με σκοπό να ρυθμιστεί το σύστημα ορθά.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Οι ρυθμίσεις μου',\n    'menu_description' => 'Ρυθμίσεις σχετικές με τον λογαριασμό διαχειριστή σας',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Τονισμένο χρώμα',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'όλα',\n    'options_method_not_exists' => 'Η κλάση του μοντέλου :model πρέπει να καθορίζει τις επιστρεφόμενες επιλογές της μεθόδου :method() για το φίλτρο \\':filter\\'.',\n    'date_all' => 'όλη η περίοδος',\n  ],\n  'import_export' => [\n    'upload_csv_file' => '1. Ανέβασμα ενός CSV αρχείου',\n    'import_file' => 'Εισαγωγή αρχείου',\n    'first_row_contains_titles' => 'Η πρώτη γραμμή περιέχει τους τίτλούς των στηλων',\n    'first_row_contains_titles_desc' => 'Αφήστε το αυτό επιλεγμένο εάν η πρώτη γραμμή στο CSV χρησιμοποιείται για τον τίτλο των στηλών.',\n    'match_columns' => '2. Αντιστοίχιση των στηλών του αρχείου με τα πεδία στην βάση δεδομένων',\n    'file_columns' => 'Στήλες αρχείου',\n    'database_fields' => 'Πεδία βάσης δεδομένων',\n    'set_import_options' => '3. Ορισμός επίλογων εισαγωγής',\n    'export_output_format' => '1. Μορφή τύπου εξόδου',\n    'file_format' => 'Μορφή αρχείου',\n    'standard_format' => 'Τυποποιημένη μορφή',\n    'custom_format' => 'Προσαρμοσμένη μορφή',\n    'delimiter_char' => 'Χαρακτήρας Διαχωριστικού',\n    'enclosure_char' => 'Χαρακτήρας Enclosure',\n    'escape_char' => 'Χαρακτήρας Escape',\n    'select_columns' => '2. Επιλέξτε τις στήλες που θα εξαχθούν',\n    'columns' => 'Στήλες',\n    'set_export_options' => '3. Ορισμός επιλογών εξαγωγής',\n    'import_progress' => 'Πρόοδός εισαγωγής',\n    'processing' => 'Επεξεργασία',\n    'import_error' => 'Λάθος εισαγωγής',\n    'export_progress' => 'Πρόοδος εξαγωγής',\n    'export_error' => 'Εξαγωγή λάθους',\n    'encoding_format' => 'Κωδικοποίηση αρχείου',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Ανέβασμα και διαχείριση περιεχομένου μέσων - εικόνων, βίντεο, ήχων, εγγράφων,//Upload and manage media contents - images, videos, sounds, documents',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'default_prompt' => 'Click the %s button to find a media item',\n  ],\n  'media' => [\n    'menu_label' => 'Μέσα',\n    'upload' => 'Ανέβασμα',\n    'move' => 'Μετακίνηση',\n    'delete' => 'Διαγραφή',\n    'add_folder' => 'Προσθήκη καταλόγου',\n    'search' => 'Αναζήτηση',\n    'display' => 'Εμφάνιση',\n    'filter_everything' => 'Όλα',\n    'filter_images' => 'Εικόνες',\n    'filter_video' => 'Βίντεο',\n    'filter_audio' => 'Ήχος',\n    'filter_documents' => 'Έγγραφο',\n    'library' => 'Βιβλιοθήκη',\n    'size' => 'Μέγεθος',\n    'title' => 'Τίτλος',\n    'last_modified' => 'Τελευταία τροποποίηση',\n    'public_url' => 'Δημόσιο URL',\n    'click_here' => 'Κλικ εδώ',\n    'thumbnail_error' => 'Σφάλμα κατά την δημιουργία μικρογραφίας.',\n    'return_to_parent' => 'Επιστροφή στον γονικό κατάλογο',\n    'return_to_parent_label' => 'Πήγαινε επάνω...',\n    'nothing_selected' => 'Δεν επιλέχτηκε τίποτα.',\n    'multiple_selected' => 'Επιλέχτηκαν πολλαπλά αντικείμενα.',\n    'uploading_file_num' => 'Ανέβασμα :number αρχείων...',\n    'uploading_complete' => 'Το ανέβασμα ολοκληρώθηκε',\n    'uploading_error' => 'Το ανέβασμα απέτυχε',\n    'type_blocked' => 'Ο τύπος του αρχείου που χρησιμοποιήθηκε μπλοκαρίστηκε για λόγους ασφαλείας.',\n    'order_by' => 'Ταξινόμηση κατά',\n    'folder' => 'Κατάλογος',\n    'no_files_found' => 'Δεν βρέθηκαν αρχεία από το αίτημα σας.',\n    'delete_empty' => 'παρακαλούμε επιλέξτε αντικείμενά για να τα σβήσετε.',\n    'delete_confirm' => 'Διαγραφή των επιλεγμένων αντικείμενων;',\n    'error_renaming_file' => 'Σφάλμα κατά την μετονομασία του αντικειμένου.',\n    'new_folder_title' => 'Νέος κατάλογος',\n    'folder_name' => 'Όνομα καταλόγου',\n    'error_creating_folder' => 'Σφάλμα κατά την δημιουργία καταλόγου',\n    'folder_or_file_exist' => 'Ένας κατάλογος ή αρχείο με το ίδιο όνομα υπάρχει ήδη.',\n    'move_empty' => 'παρακαλούμε επιλέξτε αντικείμενα για να τα μετακινήσετε.',\n    'move_popup_title' => 'Μετακίνηση αρχείων ή καταλογών.',\n    'move_destination' => 'Κατάλογος προορισμού',\n    'please_select_move_dest' => 'Παρακαλούμε επιλέξτε ένα κατάλογο προορισμού.',\n    'move_dest_src_match' => 'Παρακαλούμε επιλέξτε έναν διαφορετικό κατάλογο προορισμού.',\n    'empty_library' => 'Η βιβλιοθήκη Μέσων είναι άδεια. Ανεβάστε αρχεία ή δημιουργήστε καταλόγους για να ξεκινήσετε.',\n    'insert' => 'Εισαγωγή',\n    'crop_and_insert' => 'Περικοπή & Εισαγωγή',\n    'select_single_image' => 'παρακαλούμε επιλέξτε μόνο μια εικόνα.',\n    'selection_not_image' => 'Το επιλεγμένο αντικείμενο δεν είναι εικόνα.',\n    'restore' => 'Αναίρεση όλων των αλλαγών',\n    'resize' => 'Αλλαγή μεγέθους...',\n    'selection_mode_normal' => 'Κανονικό',\n    'selection_mode_fixed_ratio' => 'Κλειδωμένη αναλογία',\n    'selection_mode_fixed_size' => 'Κλειδωμένο μέγεθος',\n    'height' => 'Ύψος',\n    'width' => 'Πλάτος',\n    'selection_mode' => 'Λειτουργία επιλογής',\n    'resize_image' => 'Αλλαγή μεγέθους εικόνας',\n    'image_size' => 'Μέγεθος εικόνας:',\n    'selected_size' => 'Επιλεγμένο:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/el.json",
    "content": "{\n  \"Update\": \"Εκσυγχρονίζω\",\n  \"Cancel\": \"Ματαίωση\",\n  \"You are viewing as\": \"Προβάλλετε ως\",\n  \"Preview Role\": \"Ρόλος προεπισκόπησης\",\n  \"This lets you test the actions this role can perform.\": \"Αυτό σας επιτρέπει να δοκιμάσετε τις ενέργειες που μπορεί να εκτελέσει αυτός ο ρόλος.\",\n  \"View As Role\": \"Προβολή ως ρόλος\",\n  \"Return to Role Settings\": \"Επιστρέψτε στις Ρυθμίσεις Ρόλων\",\n  \"Password must have a minimum of length of :min characters\": \"Ο κωδικός πρόσβασης πρέπει να έχει ελάχιστο μήκος :min χαρακτήρων\",\n  \"Password must contain at least one uppercase character.\": \"Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον έναν κεφαλαίο χαρακτήρα.\",\n  \"Password must contain at least one lowercase character.\": \"Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον έναν πεζό χαρακτήρα.\",\n  \"Password must contain at least one number.\": \"Ο κωδικός πρέπει να περιέχει τουλάχιστον έναν αριθμό.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον έναν μη αλφαριθμητικό χαρακτήρα.\",\n  \"Welcome to your Administration Area, :name\": \"Καλώς ορίσατε στην περιοχή διαχείρισης, :name\",\n  \"Duplicate\": \"Αντίγραφο\",\n  \"Expand\": \"Επεκτείνουν\",\n  \"Collapse\": \"Κατάρρευση\",\n  \"Move Up\": \"Μετακίνηση επάνω\",\n  \"Move Down\": \"Μετακινηθείτε προς τα κάτω\",\n  \"Remove\": \"Αφαίρεση\",\n  \"Manage Item\": \"Διαχείριση αντικειμένου\",\n  \"Clear Filters\": \"Διαγραφή φίλτρων\",\n  \"Filter Setup\": \"Ρύθμιση φίλτρου\",\n  \"Apply\": \"Ισχύουν\",\n  \"Clear\": \"Σαφή\",\n  \"is equal to\": \"είναι ίσο με\",\n  \"is between\": \"είναι μεταξύ\",\n  \"contains\": \"περιέχει\",\n  \"is before\": \"είναι πριν\",\n  \"is after\": \"είναι μετά\",\n  \"is greater than\": \"είναι μεγαλύτερο από\",\n  \"is less than\": \"είναι λιγότερο από\",\n  \"1. Export output format\": \"1. Μορφή τύπου εξόδου\",\n  \"File Format\": \"Μορφή αρχείου\",\n  \"Delimiter Character\": \"Χαρακτήρας Διαχωριστικού\",\n  \"Enclosure Character\": \"Χαρακτήρας Enclosure\",\n  \"Escape Character\": \"Χαρακτήρας Escape\",\n  \"2. Select columns to export\": \"2. Επιλέξτε τις στήλες που θα εξαχθούν\",\n  \"Columns\": \"Στήλες\",\n  \"3. Set export options\": \"3. Ορισμός επιλογών εξαγωγής\",\n  \"CSV Custom\": \"Προσαρμοσμένη μορφή\",\n  \"1. Upload an Import File\": \"1. Ανέβασμα ενός CSV αρχείου\",\n  \"Import File\": \"Εισαγωγή αρχείου\",\n  \"File Encoding\": \"Κωδικοποίηση αρχείου\",\n  \"First row contains column titles\": \"Η πρώτη γραμμή περιέχει τους τίτλούς των στηλων\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Αφήστε το αυτό επιλεγμένο εάν η πρώτη γραμμή στο CSV χρησιμοποιείται για τον τίτλο των στηλών.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Αντιστοίχιση των στηλών του αρχείου με τα πεδία στην βάση δεδομένων\",\n  \"File columns\": \"Στήλες αρχείου\",\n  \"Database fields\": \"Πεδία βάσης δεδομένων\",\n  \"3. Set Import Options\": \"3. Ορισμός επίλογων εισαγωγής\",\n  \"Export progress\": \"Πρόοδος εξαγωγής\",\n  \"Processing\": \"Επεξεργασία\",\n  \"Import progress\": \"Πρόοδός εισαγωγής\",\n  \"Import error\": \"Λάθος εισαγωγής\",\n  \"Export error\": \"Εξαγωγή λάθους\",\n  \"Column preview\": \"Προεπισκόπηση στήλης\",\n  \"Column\": \"Στήλη\",\n  \"Disable\": \"Καθιστώ ανίκανο\",\n  \"Enable\": \"επιτρέπω\",\n  \"Delete\": \"Διαγραφή\",\n  \"Export\": \"Εξαγωγή\",\n  \"Import\": \"Εισαγωγή\",\n  \"Select Action\": \"Επιλέξτε Ενέργεια\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Δημιουργήστε έναν νέο λογαριασμό για να συνδεθείτε στην περιοχή διαχείρισης.\",\n  \"First Name\": \"Ονομα\",\n  \"Last Name\": \"Επίθετο\",\n  \"Email Address\": \"Διεύθυνση ηλεκτρονικού ταχυδρομείου\",\n  \"Pick a Username\": \"ΔΙΑΛΕΞΕ ΟΝΟΜΑ ΧΡΗΣΤΗ\",\n  \"Enter New Password\": \"Εισάγετε νέο κωδικό\",\n  \"Confirm Password\": \"Επιβεβαίωση Κωδικού\",\n  \"Create Account\": \"Δημιουργήστε λογαριασμό\",\n  \"Getting Ready\": \"Ετοιμάζομαι\",\n  \"Just a few more minutes\": \"Λίγα λεπτά ακόμα\",\n  \"Migrating Database\": \"Μετανάστευση βάσης δεδομένων\",\n  \"Access the Backend Panel\": \"Πρόσβαση στον πίνακα υποστήριξης\",\n  \"View Backend During Maintenance\": \"Προβολή Backend κατά τη διάρκεια της συντήρησης\",\n  \"Perform Software Updates\": \"Εκτελέστε ενημερώσεις λογισμικού\",\n  \"In Maintenance\": \"Στη Συντήρηση\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Ο ιστότοπος βρίσκεται σε λειτουργία συντήρησης, ελέγξτε ξανά αργότερα.\",\n  \"Dashboard\": \"Ταμπλό\",\n  \"Administrators\": \"Διαχειριστές\",\n  \"Manage Admins\": \"Διαχείριση Διαχειριστών\",\n  \"Create Admins\": \"Δημιουργία διαχειριστών\",\n  \"Moderate Admins\": \"Μέτριοι Διαχειριστές\",\n  \"Manage account suspension and ban admin accounts\": \"Διαχείριση αναστολής λογαριασμού και αποκλεισμός λογαριασμών διαχειριστή\",\n  \"Role Permissions\": \"Διαχείριση ρόλων\",\n  \"Team Groups\": \"Διαχείρηση Ομάδων\",\n  \"Manage Other Admins\": \"Διαχείριση άλλων διαχειριστών\",\n  \"Allow users to reset passwords and update emails.\": \"Επιτρέπει την επαναφορά κωδικών πρόσβασης και την ενημέρωση email\",\n  \"Delete Admins\": \"Διαγραφή διαχειριστών\",\n  \"Preferences\": \"Προτιμήσεις\",\n  \"Settings\": \"Ρυθμίσεις\",\n  \"Background Color\": \"Χρώμα του φόντου\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Να επιτρέπεται στους χρήστες να δημιουργούν νέους ρόλους και να επεξεργάζονται ή να διαγράφουν ρόλους χαμηλότερους από τον υψηλότερο ρόλο τους.\",\n  \"Save Changes\": \"Αποθήκευσε τις αλλαγές\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Αυτό το αρχείο εμφανίζει μια λίστα με τις επιτυχημένες προσπάθειες σύνδεσης από τους διαχειριστές. Οι εγγραφές διατηρούνται για :days ημέρες.\",\n  \"Access Log\": \"Αρχείο καταγραφής προσβάσεων\",\n  \"View a list of successful back-end user sign ins.\": \"Λίστα με τις επιτυχημένες προσβάσεις στο back-end.\",\n  \"ID\": \"ταυτότητα\",\n  \"Date & Time\": \"Ημερομηνία & Ώρα\",\n  \"Type\": \"Τύπος\",\n  \"IP address\": \"Διεύθυνση IP\",\n  \"Username\": \"Όνομα χρήστη\",\n  \"Login\": \"Σύνδεση\",\n  \"First name\": \"Όνομα\",\n  \"Last name\": \"Επώνυμο\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"Για αυτήν τη μορφή αρχείου χρησιμοποιείται ένα προσαρμοσμένο σχήμα.\",\n  \"Select\": \"Επιλέγω\",\n  \"Replace\": \"Αντικαθιστώ\",\n  \"and\": \"και\",\n  \"Go\": \"Πηγαίνω\",\n  \"Go to page\": \"Πήγαινε στην σελίδα\",\n  \"Copy to Clipboard\": \"Αντιγραφή στο πρόχειρο\",\n  \"Reveal Contents\": \"Αποκάλυψη περιεχομένων\",\n  \"Selected Site\": \"Επιλεγμένος ιστότοπος\",\n  \"Use Emmet abbreviations\": \"Χρησιμοποιήστε συντομογραφίες Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Δεν υπάρχει εγγραφή για τον επιλεγμένο ιστότοπο. Δημιούργησε ένα?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Τα στοιχεία που εισαγάγατε δεν ταιριάζουν με τα αρχεία μας. Ελέγξτε ξανά και δοκιμάστε ξανά.\",\n  \"Administration Area\": \"Περιοχή Διαχείρισης\",\n  \"Password Reset\": \"Επαναφορά Κωδικού\",\n  \"Please enter a new password.\": \"Πληκτρολογήστε νέο κωδικό.\",\n  \"Password\": \"Κωδικός πρόσβασης\",\n  \"Password Restore\": \"Επαναφορά κωδικού πρόσβασης\",\n  \"Please enter your login to restore the password.\": \"Συμπληρώστε τον λογαριασμό σας\",\n  \"A user could not be found with a login value of ':login'\": \"Δεν βρέθηκε χρήστης με τα στοιχεία ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Ένα μήνυμα έχει σταλεί στην διεύθυνση ηλεκτρονικού ταχυδρομείου σου με οδηγίες.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Τα στοιχεία που έχουν δοθεί για την επαναφορά του κωδικού είναι μη έγκυρα. Παρακαλούμε δοκιμάστε ξανά!\",\n  \"Unable to reset your password!\": \"Δεν κατέστη δυνατό να επαναφερθεί ο κωδικός σας!\",\n  \"Password has been reset. You may now sign in.\": \"Ο κωδικός σας έχει επαναφερθεί. Μπορείτε τώρα να συνδεθείτε.\",\n  \"Restore\": \"Αποκατάσταση\",\n  \"Reset\": \"Επαναφορά\",\n  \"Stay logged in\": \"Μείνε συνδεδεμένος\",\n  \"Forgot password?\": \"Ξεχάσατε τον κωδικό σας;\",\n  \"Global Editor Settings\": \"Καθολικές ρυθμίσεις επεξεργασίας\",\n  \"Manage Widgets\": \"Διαχείριση Widgets\",\n  \"Add Widget\": \"Προσθήκη Widget\",\n  \"Set the current layout as the default?\": \"Να οριστεί η τρέχουσα διάταξη ως προκαθορισμένη;\",\n  \"Make Default\": \"Ορισμός προκαθορισμένης\",\n  \"Reset layout back to default?\": \"Επαναφορά της διάταξης στο προκαθορισμένο;\",\n  \"Reset Layout\": \"Επαναφορά διάταξης\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"παρακαλούμε επιλέξτε\",\n  \"Width\": \"Πλάτος\",\n  \"full width\": \"πλήρες πλάτος\",\n  \"Create Widgets\": \"Δημιουργία γραφικών στοιχείων\",\n  \"not equal to\": \"όχι ίσο με\",\n  \"Light Mode\": \"Λειτουργία φωτός\",\n  \"Dark Mode\": \"Σκοτεινή λειτουργία\",\n  \"Auto Mode\": \"Αυτόματη λειτουργία\",\n  \"OS Default\": \"Προεπιλογή λειτουργικού συστήματος\",\n  \"Create a Custom Palette\": \"Δημιουργήστε μια προσαρμοσμένη παλέτα\",\n  \"Custom Palette\": \"Προσαρμοσμένη παλέτα\",\n  \"Primary Color\": \"Πρωτεύων χρώμα\",\n  \"Secondary Color\": \"Δευτερεύων χρώμα\",\n  \"Selection Color\": \"Επιλογή χρώματος\",\n  \"Nav Text\": \"Κείμενο πλοήγησης\",\n  \"Nav Background\": \"Φόντο πλοήγησης\",\n  \"Sidebar Text\": \"Κείμενο πλευρικής γραμμής\",\n  \"Sidebar Background\": \"Φόντο πλαϊνής γραμμής\",\n  \"Sidebar Active Text\": \"Ενεργό κείμενο πλευρικής γραμμής\",\n  \"Sidebar Active Background\": \"Sidebar Ενεργό φόντο\",\n  \"Sidebar Hover Background\": \"Φόντο αιώρησης πλαϊνής γραμμής\",\n  \"Settings Text\": \"Κείμενο ρυθμίσεων\",\n  \"Settings Background\": \"Ρυθμίσεις φόντο\",\n  \"Settings Item Background\": \"Ρυθμίσεις στοιχείου φόντο\",\n  \"Settings Active Color\": \"Ρυθμίσεις Ενεργό χρώμα\",\n  \"Settings Active Background\": \"Ρυθμίσεις Ενεργό φόντο\",\n  \"Settings Hover Background\": \"Ρυθμίσεις Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"Το όνομα αυτό εμφανίζεται στην περιοχή τίλιου του back-end.\",\n  \"App Name\": \"Όνομα Εφαρμογής\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Αυτό το όνομα εμφανίζεται στην οθόνη σύνδεσης στο back-end.\",\n  \"App Tagline\": \"Ετικέτα Εφαρμογής\",\n  \"Brand\": \"Διακριτικός Τίτλος\",\n  \"Upload a custom logo to use in the back-end.\": \"Ανεβάστε ένα προσαρμοσμένο λογότυπο για την χρήση στο back-end.\",\n  \"Logo\": \"Λογότυπο\",\n  \"Upload a custom favicon to use in the back-end\": \"Ανεβάστε ένα προσαρμοσμένο favicon για χρήση στο back-end\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Λογότυπο πλοήγησης\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Αντικαθιστά τη σύνδεση του πίνακα εργαλείων με ένα προσαρμοσμένο λογότυπο στην πλοήγηση.\",\n  \"Dashboard Icon\": \"Εικονίδιο πίνακα ελέγχου\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Χρησιμοποιήστε μια προσαρμοσμένη εικόνα για το εικονίδιο του πίνακα εργαλείων (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Αυτό το μήνυμα εμφανίζεται στην οθόνη σύνδεσης για το back-end.\",\n  \"Welcome Message\": \"Μήνυμα καλωσορίσματος\",\n  \"Login Page\": \"Σελίδα σύνδεσης\",\n  \"Background Type\": \"Τύπος φόντου\",\n  \"Flat Color\": \"Επίπεδο χρώμα\",\n  \"Wallpaper\": \"Ταπετσαρία\",\n  \"Wallpaper Size\": \"Μέγεθος ταπετσαρίας\",\n  \"Auto\": \"Αυτο\",\n  \"Cover\": \"Κάλυμμα\",\n  \"Background Wallpaper Image\": \"Εικόνα φόντου ταπετσαρίας\",\n  \"Image\": \"Image\",\n  \"Random Autumn Images\": \"Τυχαίες φθινοπωρινές εικόνες\",\n  \"Custom Image\": \"Προσαρμοσμένη εικόνα\",\n  \"Login Page Image\": \"Εικόνα σελίδας σύνδεσης\",\n  \"Colors\": \"Χρώματα\",\n  \"Color Mode\": \"Λειτουργία χρώματος\",\n  \"Color Preset\": \"Προεπιλογή χρώματος\",\n  \"Menu Style\": \"Στυλ μενού\",\n  \"Navigation\": \"Πλοήγηση\",\n  \"Custom Stylesheet\": \"Custom stylesheet\",\n  \"Styles\": \"Στυλ\",\n  \"Inline\": \"Ενσωματωμένο\",\n  \"Text\": \"Κείμενο\",\n  \"Tiles\": \"Πλακίδια\",\n  \"Collapsed\": \"Συμπτυγμένο\",\n  \"Icons\": \"εικονίδια\",\n  \"Left Side\": \"Αριστερή πλευρά\",\n  \"Add New Item\": \"Προσθήκη νέου αντικειμένου\",\n  \"Link Color\": \"Χρώμα συνδέσμου\",\n  \"Current Password\": \"Τρέχων κωδικός πρόσβασης\",\n  \"New Password\": \"Νέος Κωδικός\",\n  \"Current password does not match. Please try again!\": \"Ο τρέχων κωδικός πρόσβασης δεν ταιριάζει. ΠΑΡΑΚΑΛΩ προσπαθησε ξανα!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Ο κωδικός πρόσβασής σας έχει λήξει, δημιουργήστε έναν νέο για λόγους ασφαλείας.\",\n  \"Region\": \"Περιοχή\",\n  \"Locale\": \"Τοποθεσία\",\n  \"Select your desired locale for language use.\": \"Επιλέξτε την επιθυμητή τοποθεσία για την χρήση γλώσσας.\",\n  \"Timezone\": \"Ζώνη ώρας\",\n  \"Adjust displayed dates to this timezone.\": \"Προσαρμογή των εμφανιζομένων ημερομηνιών σε αυτήν την ζώνη ώρας.\",\n  \"Code Editor\": \"Επεξεργαστής κώδικα\",\n  \"Color Scheme\": \"Color Scheme\",\n  \"Word Wrap\": \"Word Wrap\",\n  \"Off\": \"Off\",\n  \"40 Characters\": \"40 Characters\",\n  \"80 Characters\": \"80 Characters\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"Font size\",\n  \"Tab Size\": \"Tab size\",\n  \"Code Folding\": \"Code folding\",\n  \"Mark begin\": \"Mark begin\",\n  \"Mark begin and end\": \"Mark begin and end\",\n  \"Autocompletion\": \"Autocompletion\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Basic Autocompletion (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Live Autocompletion\",\n  \"Show gutter\": \"Show gutter\",\n  \"Highlight active line\": \"Highlight active line\",\n  \"Automatically close tags\": \"Automatically close tags\",\n  \"Indent using tabs\": \"Indent using tabs\",\n  \"Show indent guides\": \"Show indent guides\",\n  \"Show invisible characters\": \"Show invisible characters\",\n  \"Show print margin\": \"Show print margin\",\n  \"Custom styles to include in the HTML editor.\": \"Custom styles to include in the HTML editor.\",\n  \"Markup Styles\": \"Markup Styles\",\n  \"Paragraph Formats\": \"Μορφές παραγράφου\",\n  \"Markup Classes\": \"Markup Classes\",\n  \"Tag Name\": \"Όνομα ετικέτας\",\n  \"Label\": \"Label\",\n  \"Paragraph\": \"Paragraph\",\n  \"Class Name\": \"Class Name\",\n  \"Link\": \"Link\",\n  \"Table\": \"Table\",\n  \"Table Cell\": \"Table Cell\",\n  \"Allowed Tags\": \"Allowed tags\",\n  \"The list of allowed tags.\": \"The list of allowed tags.\",\n  \"Markup Tags\": \"Markup Tags\",\n  \"Allowed Empty Tags\": \"Allowed empty tags\",\n  \"The list of tags that are not removed when they have no content inside.\": \"The list of tags that are not removed when they have no content inside.\",\n  \"Do Not Wrap Tags\": \"Do not wrap tags\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"The list of tags that should not be wrapped inside block tags.\",\n  \"Remove Tags\": \"Remove tags\",\n  \"The list of tags that are removed together with their content.\": \"The list of tags that are removed together with their content.\",\n  \"Line Breaker Tags\": \"Ετικέτες διακόπτη γραμμής\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Η λίστα των ετικετών που χρησιμοποιούνται για την τοποθέτηση ενός στοιχείου διακόπτη γραμμής μεταξύ.\",\n  \"Toolbar Buttons\": \"Κουμπιά γραμμής εργαλείων\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Τα κουμπιά της γραμμής εργαλείων που θα εμφανίζονται στο Rich Editor από προεπιλογή.\",\n  \"Insert a preset toolbar button configuration\": \"Εισαγάγετε μια προκαθορισμένη διαμόρφωση κουμπιού γραμμής εργαλείων\",\n  \"Allowed Attributes\": \"Επιτρεπόμενα χαρακτηριστικά\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Η λίστα με τα επιτρεπόμενα χαρακτηριστικά HTML, εκτός από τα κανονικά δικαιώματα.\",\n  \"Enable code snippets (Tab)\": \"Enable code snippets (Tab)\",\n  \"Title\": \"Τίτλος\",\n  \"Description\": \"Περιγραφή\",\n  \"Attachment\": \"Επισύναψη\",\n  \"Attachment URL\": \"URL Συνημμένου\",\n  \"Add a title and description for this attachment.\": \"Προσθέστε τίτλο και περιγραφή για αυτήν την επισύναψη.\",\n  \"Upload\": \"Μεταφόρτωση\",\n  \"Are you sure?\": \"Είστε σίγουροι;\",\n  \"Delete Selected\": \"Διαγραφή επιλεγμένων\",\n  \"Upload Error\": \"Σφάλμα ανεβάσματος\",\n  \"Remove File\": \"Διαγραφή αρχείου\",\n  \"Show Light Switch\": \"Εμφάνιση διακόπτη φωτισμού\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Επιτρέψτε στους χρήστες να εναλλάσσουν τη λειτουργία χρώματος από την πλοήγηση.\",\n  \"Create :name\": \"Δημιουργία :name\",\n  \"Update :name\": \"Ενημέρωση :name\",\n  \"Add :name\": \"Προσθήκη :name\",\n  \"Link :name\": \"Σύνδεση :name\",\n  \"Unlink\": \"Αποσύνδεση\",\n  \"Preview :name\": \"Προεπισκόπηση :name\",\n  \"Link a New :name\": \"Σύνδεση ενός νέου :name \",\n  \"Add a New :name\": \"Προσθήκη νέου :name\",\n  \"Related :name Data\": \"Σχετικά :name δεδομένα\",\n  \":name Created\": \":name δημιουργήθηκε\",\n  \":name Updated\": \":name ενημερώθηκε\",\n  \":name Deleted\": \":name διαγράφηκε\",\n  \":name Added\": \":name Προστέθηκε\",\n  \":name Linked\": \":name Συνδεδεμένο\",\n  \":name Removed\": \":name Αφαιρέθηκε\",\n  \":name Unlinked\": \":name Αποσυνδεδεμένο\",\n  \"Form record with an ID of :id could not be found.\": \"Η εγγραφή της φόρμας με ID :id δεν βρέθηκε.\",\n  \"Remove Selected\": \"Αφαίρεση επιλεγμένων\",\n  \"Unlink Selected\": \"Αποσύνδεση επιλεγμένων\",\n  \"Preview the Website\": \"Προεπισκόπηση ιστοσελίδας\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Διευθέτηση των διαχειριστών, των ομάδων και των δικαιωμάτων του back-end\",\n  \"Define permissions for administrators based on their role.\": \"Ορίστε δικαιώματα για τους διαχειριστές με βάση τον ρόλο τους.\",\n  \"Add administrators to groups used for notifications and features.\": \"Προσθέστε διαχειριστές σε ομάδες που χρησιμοποιούνται για ειδοποιήσεις και λειτουργίες.\",\n  \"Branding & Appearance\": \"Προσαρμογή του back-end\",\n  \"Customize the administration area such as name, colors and logo.\": \"Προσαρμόστε την περιοχή διαχείρισης όπως το όνομα, τα χρώματα και το λογότυπο.\",\n  \"Editor Settings\": \"Editor settings\",\n  \"Change the global editor preferences.\": \"Customize the global editor preferences, such as font size and color scheme.\",\n  \"My Account\": \"Ο λογαριασμός μου\",\n  \"Update your account details such as name, email address and password.\": \"Ενημερώστε τις λεπτομερείς του λογαριασμού σας όπως το όνομα, την διεύθυνση email και τον κωδικού.\",\n  \"Backend Preferences\": \"Προτιμήσεις Back-End\",\n  \"Manage your account preferences such as desired language.\": \"Διαχειριστείτε τις ρυθμίσεις του λογαριασμού σας όπως την επιθυμητή γλώσσα.\",\n  \"security login\": \"ασφαλής σύνδεση\",\n  \"List Setup\": \"Ρύθμιση λίστας\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Χρησιμοποιήστε το πλαίσιο ελέγχου για να επιλέξετε τις στήλες που θέλετε να δείτε στην λίστα. Μπορείτε να αλλάξετε την θέση των στηλών με το σύρσιμο πάνω και κάτω.\",\n  \"Records Per Page\": \"Εγγραφές ανά σελίδα\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Επιλέξτε τον αριθμό των εγγραφών ανά σελίδα για εμφάνιση. Παρακαλούμε σημειώστε ότι ένας υψηλός αριθμός εγγραφών σε μια και μόνο σελίδα μπορεί να μειώσει την απόδοση.\",\n  \"Reset to Default\": \"Επαναφορά στις προεπιλογές\",\n  \"Add Selected\": \"Προσθήκη επιλεγμένου\",\n  \"Create & Close\": \"Δημιουργία & Κλείσιμο\",\n  \"Creating :name...\": \"Δημιουργία :name...\",\n  \"Save & Close\": \"Αποθήκευση & Κλείσιμο\",\n  \"Saving :name...\": \"Αποθήκευση: όνομα...\",\n  \"Delete this record?\": \"Διαγραφή αυτής της εγγραφής;\",\n  \"Deleting :name...\": \"Διαγραφή :name...\",\n  \"Loading...\": \"Φόρτωση...\",\n  \"Complete\": \"Πλήρης\",\n  \"Please specify the modelClass property for :type\": \"παρακαλούμε ορίστε την ιδιότητα modelClass για τον τύπο :type\",\n  \"Please specify some columns to export.\": \"Παρακαλούμε ορίστε κάποιες στήλες για να εξαχθούν.\",\n  \"Missing column identifier\": \"Λείπει το αναγνωριστικό στήλης\",\n  \"Unknown column\": \"Άγνωστη στήλη\",\n  \"Please specify some columns to import.\": \"παρακαλούμε ορίστε κάποιες στήλες για εισαγωγή.\",\n  \"Please match some columns first.\": \"Παρακαλούμε αντιστοιχήστε κάποιες στήλες πρώτα.\",\n  \"Please specify a match for the required field :label.\": \"Παρακαλούμε ορίστε μια αντιστοίχιση για το απαιτούμενο πεδίο :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Η κωδικοποίηση του αρχείου προέλευσης δεν αναγνωριστικέ. παρακαλούμε επιλέξτε την προσαρμοσμένη μορφή αρχείου με την κατάλληλη κωδικοποίηση για την εισαγωγή του αρχείου σας.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Πρέπει να υλοποιήσετε μια συμπεριφορά χειριστή ListController με την επιλογή εξαγωγής \\\"useList\\\" ενεργοποιημένη.\",\n  \"File export process completed!\": \"Η διαδικασία της εξαγωγής αρχείου ολοκληρώθηκε!\",\n  \"The browser will now redirect to the file download.\": \"Το πρόγραμμα περιήγησης θα μεταβεί στο κατέβασμα του αρχείου.\",\n  \"Ignore this column\": \"Αγνόησε αυτήν την στήλη\",\n  \"Drop column here...\": \"Σύρετε μια στήλη εδώ...\",\n  \"Please upload a valid CSV file.\": \"Παρακαλώ ανεβάστε εάν συμβατό CSV αρχείο.\",\n  \"Created\": \"Δημιουργήθηκε\",\n  \"Updated\": \"Ενημερώθηκε\",\n  \"Skipped\": \"Παραλήφθηκε\",\n  \"Warnings\": \"Προειδοποιήσεις\",\n  \"Errors\": \"Λάθη\",\n  \"Skipped Rows\": \"Σειρές που Παραλήφθηκαν\",\n  \"Show Ignored Columns\": \"Εμφάνιση αγνοούμενων στηλών\",\n  \"Auto Match Columns\": \"Αυτόματή αντιστοίχιση στηλών\",\n  \"File not found\": \"Το αρχείο δεν βρέθηκε\",\n  \"There was no data supplied to export\": \"Δεν υπάρχουν δεδομένα για σταλούν για εξαγωγή\",\n  \"Created At\": \"Δημιουργήθηκε στις\",\n  \"Updated At\": \"Ενημερώθηκε στις\",\n  \"Deleted At\": \"Διαγράφηκε στις\",\n  \"Created By\": \"Δημιουργήθηκε από\",\n  \"Updated By\": \"Ενημερώθηκε από\",\n  \"Deleted By\": \"Διαγράφηκε από\",\n  \"Create Dashboard\": \"Δημιουργία Πίνακα Ελέγχου\",\n  \"Edit Dashboard\": \"Επεξεργασία πίνακα ελέγχου\",\n  \"The dashboard was successfully created.\": \"Ο πίνακας ελέγχου δημιουργήθηκε με επιτυχία.\",\n  \"The dashboard was successfully updated.\": \"Ο πίνακας ελέγχου ενημερώθηκε με επιτυχία.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"Αυτός είναι ένας πίνακας ελέγχου που δημιουργείται από το σύστημα και δεν μπορεί να διαγραφεί.\",\n  \"Dashboard Name\": \"Όνομα πίνακα ελέγχου\",\n  \"Please enter the dashboard name\": \"Παρακαλώ εισάγετε το όνομα του πίνακα ελέγχου\",\n  \"Please enter the dashboard code\": \"Παρακαλώ εισάγετε τον κωδικό του πίνακα ελέγχου\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"Ο κώδικας μπορεί να περιλαμβάνει μόνο λατινικά γράμματα, ψηφία και παύλες\",\n  \"Icon\": \"Εικόνισμα\",\n  \"Please select an icon\": \"Επιλέξτε ένα εικονίδιο\",\n  \"Global Access\": \"Παγκόσμια Πρόσβαση\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Οι πίνακες ελέγχου με ενεργοποιημένη την Καθολική Πρόσβαση μπορούν να προβληθούν από άλλους χρήστες.\",\n  \"Hide Interval\": \"Απόκρυψη διαστήματος\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Επιλέξτε αυτό εάν ο πίνακας ελέγχου δεν χρησιμοποιεί την επιλογή εύρους ημερομηνιών.\",\n  \"API Code\": \"Κώδικας API\",\n  \"A unique code to refer to this dashboard using external systems.\": \"Ένας μοναδικός κωδικός για αναφορά σε αυτόν τον πίνακα ελέγχου χρησιμοποιώντας εξωτερικά συστήματα.\",\n  \"Select Dashboard\": \"Επιλογή Πίνακα Ελέγχου\",\n  \"Value\": \"Αξία\",\n  \"Difference with the previous period\": \"Διαφορά με την προηγούμενη περίοδο\",\n  \"Group\": \"Ομάδα\",\n  \"Compare Totals\": \"Σύγκριση Συνόλων\",\n  \"Interval\": \"Διάστημα\",\n  \"Date\": \"Ημερομηνία\",\n  \"You don't have access to any dashboards.\": \"Δεν έχετε πρόσβαση σε κανέναν πίνακα ελέγχου.\",\n  \"No dashboards have been set up yet.\": \"Δεν έχουν ρυθμιστεί ακόμη πίνακες ελέγχου.\",\n  \"Import Dashboard\": \"Εισαγωγή Πίνακα Ελέγχου\",\n  \"The requested dashboard could not be found.\": \"Δεν ήταν δυνατή η εύρεση του πίνακα ελέγχου που ζητήθηκε.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Η λειτουργία εντοπισμού σφαλμάτων είναι ενεργοποιημένη. Αυτό δεν συνιστάται για εγκαταστάσεις παραγωγής.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"Η διεύθυνση URL backend :name είναι πολύ γενική. Ορίστε την σε κάτι πιο μοναδικό.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Βρέθηκε ένας λογαριασμός με γενικό όνομα σύνδεσης :name. Μετονομάστε αυτόν τον λογαριασμό διαχειριστή.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Η επέκταση :name της PHP δεν έχει εγκατασταθεί. Παρακαλούμε εγκαταστήστε την βιβλιοθήκη και ενεργοποιήστε την επέκταση.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Το πρόσθετο :name είναι μια εξάρτηση αλλά δεν είναι εγκατεστημένο. Παρακαλώ εγκαταστήστε αυτό το πρόσθετο.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Ο φάκελος :name ή οι υποφάκελοι του δεν έχουν δικαίωμα εγγραφής για την PHP. Παρακαλούμε ρυθμίστε τα κατάλληλα δικαιώματα στον webserver για αυτό τον καταλογο.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Ο λογαριασμός σας δεν έχει δικαιώματα δημιουργίας ή επεξεργασίας πινάκων ελέγχου.\",\n  \"No records found\": \"Δεν βρέθηκαν εγγραφές\",\n  \"Apply Changes\": \"Εφαρμογή αλλαγών\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Σφάλμα κατά τη φόρτωση των δεδομένων του γραφικού στοιχείου. Ανατρέξτε στην κονσόλα σφαλμάτων του προγράμματος περιήγησης για λεπτομέρειες.\",\n  \"Configure the widget\": \"Ρύθμιση παραμέτρων του γραφικού στοιχείου\",\n  \"to manage its settings.\": \"για να διαχειριστείτε τις ρυθμίσεις του.\",\n  \"Includes\": \"Περιλαμβάνει\",\n  \"Excludes\": \"Εξαιρείται\"\n}"
  },
  {
    "path": "modules/backend/lang/en/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Invalid field type used :type.',\n    'options_method_invalid_model' => 'The attribute \\':field\\' does not resolve to a valid model. Try specifying the options method for model class :model explicitly.',\n    'options_method_not_exists' => 'The model class :model must define a method :method() returning options for the \\':field\\' form field.',\n    'colors_method_not_exists' => 'The model class :model must define a method :method() returning html color HEX codes for the \\':field\\' form field.',\n  ],\n  'widget' => [\n    'not_registered' => 'A widget class name \\':name\\' has not been registered',\n    'not_bound' => 'A widget with class name \\':name\\' has not been bound to the controller',\n  ],\n  'page' => [\n    'untitled' => 'Untitled',\n    'not_found' => [\n      'label' => 'Page Not Found',\n      'help' => 'The requested page cannot be found.',\n      'back_link' => 'Go back to the previous page',\n    ],\n    'access_denied' => [\n      'label' => 'Access Denied',\n      'help' => 'You don\\'t have the required permissions to view this page.',\n      'cms_link' => 'Return to the Backend',\n    ],\n    'no_database' => [\n      'label' => 'Database Missing',\n      'help' => 'A database is required to access the back-end. Check the database is configured and migrated before trying again.',\n      'cms_link' => 'Return to the Homepage',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'The partial \\':name\\' is not found.',\n    'invalid_name' => 'Invalid partial name: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Invalid AJAX handler name: :name.',\n    'not_found' => 'AJAX handler \\':name\\' was not found.',\n  ],\n  'account' => [\n    'impersonate' => 'Impersonate User',\n    'impersonate_confirm' => 'Are you sure you want to impersonate this user? You can revert to your original state by logging out.',\n    'impersonate_success' => 'You are now impersonating this user',\n    'impersonate_working' => 'Impersonating...',\n    'impersonating' => 'Impersonating :full_name',\n    'stop_impersonating' => 'Stop impersonating',\n    'signed_in_as' => 'Signed in as :full_name',\n    'sign_out' => 'Sign Out',\n    'login_prompt' => 'Welcome back! Please login to your account to continue.',\n    'login_placeholder' => 'username',\n    'password_placeholder' => 'password',\n    'enter_email' => 'Enter your email',\n    'email_placeholder' => 'email',\n    'apply' => 'Apply',\n    'cancel' => 'Cancel',\n    'delete' => 'Delete',\n    'ok' => 'OK',\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Manage Administrators',\n    'new' => 'New Administrator',\n    'first_name' => 'First Name',\n    'last_name' => 'Last Name',\n    'full_name' => 'Full Name',\n    'email' => 'Email',\n    'role_field' => 'Role',\n    'role_comment' => 'Roles define user permissions, which can be overridden on the user level, on the Permissions tab.',\n    'groups' => 'Groups',\n    'groups_comment' => 'Specify which groups this account should belong to.',\n    'avatar' => 'Avatar',\n    'password' => 'Password',\n    'password_confirmation' => 'Confirm Password',\n    'permissions' => 'Permissions',\n    'account' => 'Account',\n    'superuser' => 'Super User',\n    'superuser_comment' => 'Grants this account unlimited access to all areas of the system. Super users can add and manage other users. ',\n    'send_invite' => 'Send invitation by email',\n    'send_invite_comment' => 'Sends a welcome message containing login and password information.',\n    'delete_confirm' => 'Delete this administrator?',\n    'return' => 'Return to Admin List',\n    'allow' => 'Allow',\n    'inherit' => 'Inherit',\n    'deny' => 'Deny',\n    'activated' => 'Activated',\n    'last_login' => 'Last Login',\n    'created_at' => 'Created At',\n    'updated_at' => 'Updated At',\n    'deleted_at' => 'Deleted At',\n    'show_deleted' => 'Show Deleted',\n    'group' => [\n      'name' => 'Group',\n      'name_field' => 'Name',\n      'name_comment' => 'The name is displayed in the group list on the Administrator form.',\n      'description_field' => 'Description',\n      'is_new_user_default_field_label' => 'Default group',\n      'is_new_user_default_field_comment' => 'Add new administrators to this group by default',\n      'code_field' => 'Code',\n      'code_comment' => 'Enter a unique code if you want to access the group object with the API.',\n      'list_title' => 'Team Groups',\n      'new' => 'New Group',\n      'delete_confirm' => 'Delete this administrator group?',\n      'return' => 'Return to Group List',\n      'users_count' => 'Users',\n    ],\n    'role' => [\n      'name' => 'Role',\n      'name_field' => 'Name',\n      'name_comment' => 'The name is displayed in the role list on the Administrator form.',\n      'description_field' => 'Description',\n      'code_field' => 'Code',\n      'code_comment' => 'Enter a unique code if you want to access the role object with the API.',\n      'list_title' => 'Role Permissions',\n      'new' => 'New Role',\n      'delete_confirm' => 'Delete this administrator role?',\n      'return' => 'Return to Role List',\n      'users_count' => 'Users',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'There is no an authenticated user to load or save preferences for.',\n    ],\n    'trashed_hint_title' => 'This account has been deleted',\n    'trashed_hint_desc' => 'This account has been deleted and will be unable to be signed in under. To restore it, click the restore user icon in the bottom right',\n  ],\n  'list' => [\n    'default_title' => 'List',\n    'search_prompt' => 'Search...',\n    'no_records' => 'There are no records in this view.',\n    'missing_model' => 'List behavior used in :class does not have a model defined.',\n    'missing_column' => 'There are no column definitions for :columns.',\n    'missing_columns' => 'List used in :class has no list columns defined.',\n    'missing_definition' => 'List behavior does not contain a column for \\':field\\'.',\n    'missing_parent_definition' => 'List behavior does not contain a definition for \\':definition\\'.',\n    'behavior_not_ready' => 'List behavior has not been initialized, check that you have called makeLists() in your controller.',\n    'invalid_column_datetime' => 'Column value \\':column\\' is not a DateTime object, are you missing a $dates reference in the Model?',\n    'pagination' => 'Displayed Records: :from-:to of :total',\n    'first_page' => 'First page',\n    'last_page' => 'Last page',\n    'prev_page' => 'Previous page',\n    'next_page' => 'Next page',\n    'refresh' => 'Refresh',\n    'updating' => 'Updating...',\n    'loading' => 'Loading...',\n    'check' => 'Check',\n    'create_button' => 'New :name',\n    'delete_selected' => 'Delete selected',\n    'delete_selected_empty' => 'There are no selected records to delete.',\n    'delete_selected_confirm' => 'Delete the selected records?',\n    'delete_selected_success' => 'Deleted selected records.',\n    'column_switch_true' => 'Yes',\n    'column_switch_false' => 'No',\n  ],\n  'object_list' => [\n    'prop_cant_be_empty' => 'Property :property cannot be empty',\n    'key_value_exists' => 'Value is already defined: :property_value',\n  ],\n  'fileupload' => [],\n  'form' => [\n    'create_title' => 'New :name',\n    'update_title' => 'Edit :name',\n    'preview_title' => 'Preview :name',\n    'restore_success' => ':name Restored',\n    'reset_success' => 'Reset Complete',\n    'missing_id' => 'Form record ID has not been specified.',\n    'missing_tab' => 'Missing a valid tab definition.',\n    'missing_model' => 'Form behavior used in :class does not have a model defined.',\n    'missing_definition' => 'Form behavior does not contain a field for \\':field\\'.',\n    'action_confirm' => 'Are you sure?',\n    'create' => 'Create',\n    'create_and_close' => 'Create and close',\n    'creating' => 'Creating...',\n    'creating_name' => 'Creating :name...',\n    'save' => 'Save',\n    'save_and_close' => 'Save and Close',\n    'saving' => 'Saving...',\n    'saving_name' => 'Saving :name...',\n    'delete' => 'Delete',\n    'deleting' => 'Deleting...',\n    'confirm_delete' => 'Delete record?',\n    'confirm_delete_multiple' => 'Delete selected records?',\n    'deleting_name' => 'Deleting :name...',\n    'restore' => 'Restore',\n    'restoring' => 'Restoring',\n    'confirm_restore' => 'Are you sure you want to restore this record?',\n    'reset_default' => 'Reset to Default',\n    'resetting' => 'Resetting',\n    'resetting_name' => 'Resetting :name',\n    'undefined_tab' => 'Misc',\n    'field_off' => 'Off',\n    'field_on' => 'On',\n    'add' => 'Add',\n    'apply' => 'Apply',\n    'insert' => 'Insert',\n    'cancel' => 'Cancel',\n    'close' => 'Close',\n    'confirm' => 'Confirm',\n    'reload' => 'Reload',\n    'complete' => 'Complete',\n    'ok' => 'OK',\n    'or' => 'or',\n    'confirm_tab_close' => 'Close the tab? Unsaved changes will be lost.',\n    'behavior_not_ready' => 'Form behavior has not been initialized, check that you have called initForm() in your controller.',\n    'preview_no_files_message' => 'There are no files uploaded.',\n    'preview_no_media_message' => 'There is no media selected.',\n    'preview_no_record_message' => 'There is no record selected.',\n    'select' => 'Select',\n    'select_all' => 'Select All',\n    'select_none' => 'Select None',\n    'insert_row' => 'Insert Row',\n    'insert_row_below' => 'Insert Row Below',\n    'delete_row' => 'Delete Row',\n    'concurrency_file_changed_title' => 'File was changed',\n    'concurrency_file_changed_description' => 'The file you\\'re editing has been changed on disk by another user. You can either reload the file and lose your changes or override the file on the disk.',\n    'return_to_list' => 'Return to List',\n    'no_options_found' => 'No options found',\n    'error' => 'Error',\n    'toggle_full_screen' => 'Toggle Full Screen',\n  ],\n  'treeview' => [\n    'expand' => 'Expand',\n    'collapse' => 'Collapse',\n    'reorder' => 'Reorder',\n    'clear_search' => 'Clear Search',\n    'search' => 'Search',\n    'command_or_document' => 'Command or Document...',\n    'quick_access' => 'Quick Access',\n    'open' => 'Open',\n    'commands' => 'Commands',\n  ],\n  'tabs' => [\n    'close' => 'Close Tab',\n    'close_all' => 'Close All',\n    'close_others' => 'Close Others',\n    'close_saved' => 'Close Saved',\n    'full_screen' => 'Toggle Full Screen',\n  ],\n  'modal' => [\n    'close' => 'Close',\n  ],\n  'dropdownmenu' => [\n    'go_back' => 'Go Back',\n    'close_menu' => 'Close Menu',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Find Record',\n    'invalid_model_class' => 'The provided model class \":modelClass\" for the recordfinder is invalid',\n    'cancel' => 'Cancel',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Relation behavior does not have any configuration for \\':config\\'.',\n    'missing_definition' => 'Relation behavior does not contain a definition for \\':field\\'.',\n    'missing_model' => 'Relation behavior used in :class does not have a model defined.',\n    'invalid_action_single' => 'This action cannot be performed on a singular relationship.',\n    'invalid_action_multi' => 'This action cannot be performed on a multiple relationship.',\n    'help' => 'Click on an item to add',\n    'add' => 'Add',\n    'link_selected' => 'Link Selected',\n    'cancel' => 'Cancel',\n    'close' => 'Close',\n    'create' => 'Create',\n    'update' => 'Update',\n    'preview' => 'Preview',\n    'remove_name' => 'Remove :name',\n    'delete_name' => 'Delete :name',\n    'link' => 'Link',\n    'unlink_name' => 'Unlink :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Reorder Records',\n    'no_records' => 'There are no records available to sort.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' with an ID of :id could not be found',\n    'missing_id' => 'There is no ID specified for looking up the model record.',\n    'missing_relation' => 'Model \\':class\\' does not contain a definition for \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' does not contain a method \\':method\\'.',\n    'invalid_class' => 'Model :model used in :class is not valid, it must inherit the \\\\Model class.',\n    'mass_assignment_failed' => 'Mass assignment failed for Model attribute \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'System Configuration Tips',\n    'tips_description' => 'There are issues you need to pay attention to in order to configure the system properly.',\n  ],\n  'editor' => [\n    'toolbar_buttons_presets' => [\n      'default' => 'Default',\n      'minimal' => 'Minimal',\n      'full' => 'Full',\n    ],\n    'paragraph_formats_comment' => 'The options that will appear in the Paragraph Format dropdown.',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'My Settings',\n    'menu_description' => 'Settings related to your administration account',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accent Color',\n  ],\n  'backend_preferences' => [],\n  'filter' => [\n    'all' => 'all',\n    'options_method_not_exists' => 'The model class :model must define a method :method() returning options for the \\':filter\\' filter.',\n    'options_static_method_invalid_value' => 'The static method \\':method()\\' on :class does not return a valid options array.',\n    'date_all' => 'all periods',\n    'number_all' => 'all numbers',\n  ],\n  'import_export' => [\n    'row' => 'Row :row',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1250' => 'Windows-1250 (CP1250)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Upload and manage media contents - images, videos, sounds, documents',\n    'create_edit_dashboards' => 'Create and manage dashboards. Note that users granted this permission can access data from any dashboards and report widgets available in the system.',\n    'access_dashboard' => 'Dashboards a user can access are determined by individual dashboard access settings.',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'no_image' => 'The image could not be found',\n    'not_an_image' => 'The selected file is not an image',\n    'click_to_select_file' => 'Click to select a file',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Upload',\n    'move' => 'Move',\n    'delete' => 'Delete',\n    'add_folder' => 'Add Folder',\n    'search' => 'Search',\n    'display' => 'Display',\n    'filter_everything' => 'Everything',\n    'filter_images' => 'Images',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Documents',\n    'library' => 'Library',\n    'size' => 'Size',\n    'title' => 'Title',\n    'last_modified' => 'Last Modified',\n    'public_url' => 'URL',\n    'click_here' => 'Click here',\n    'thumbnail_error' => 'Error generating thumbnail.',\n    'return_to_parent' => 'Return to the Parent Folder',\n    'return_to_parent_label' => 'Go Up ..',\n    'nothing_selected' => 'Nothing is selected.',\n    'multiple_selected' => 'Multiple items selected.',\n    'uploading_file_num' => 'Uploading :number file(s)...',\n    'uploading_complete' => 'Upload Complete',\n    'uploading_error' => 'Upload Failed',\n    'type_blocked' => 'The file type used is blocked for security reasons.',\n    'overwrite_confirm' => 'Some files already exist. Do you want to replace them?',\n    'order_by' => 'Order by',\n    'direction' => 'Direction',\n    'direction_asc' => 'Ascending',\n    'direction_desc' => 'Descending',\n    'folder' => 'Folder',\n    'no_files_found' => 'No files found by your request.',\n    'delete_empty' => 'Please select items to delete.',\n    'delete_confirm' => 'Delete the selected item(s)?',\n    'error_renaming_file' => 'Error renaming the item.',\n    'new_folder_title' => 'New Folder',\n    'folder_name' => 'Folder Name',\n    'error_creating_folder' => 'Error creating folder',\n    'folder_or_file_exist' => 'A folder or file with the specified name already exists.',\n    'move_empty' => 'Please select items to move.',\n    'move_popup_title' => 'Move files or folders',\n    'move_destination' => 'Destination folder',\n    'please_select_move_dest' => 'Please select a destination folder.',\n    'move_dest_src_match' => 'Please select another destination folder.',\n    'empty_library' => 'It looks a bit empty here. Upload files or create folders to get started.',\n    'insert' => 'Insert',\n    'crop_and_insert' => 'Crop & Insert',\n    'select_single_image' => 'Please select a single image.',\n    'selection_not_image' => 'The selected item is not an image.',\n    'restore' => 'Undo all changes',\n    'resize' => 'Resize...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Fixed Ratio',\n    'selection_mode_fixed_size' => 'Fixed Size',\n    'height' => 'Height',\n    'width' => 'Width',\n    'selection_mode' => 'Selection mode',\n    'resize_image' => 'Resize Image',\n    'image_size' => 'Image Size:',\n    'selected_size' => 'Selected:',\n  ],\n  'table' => [\n    'add_item' => 'Add item',\n  ],\n  'dictionary' => [\n    'key_required' => 'The Key field is required',\n    'value_required' => 'The Value field is required',\n  ],\n  'uploader' => [\n    'uploading' => 'Uploading Files',\n    'complete' => 'Upload Complete',\n  ],\n  'richeditor' => [\n    'upload_from_computer' => 'Upload From Computer',\n    'embedding_code' => 'Embedding Code',\n    'url_required' => 'The URL is required',\n    'url_validation' => 'URL must start with http:// or https://',\n    'add_image' => 'Insert Image',\n    'add_video' => 'Insert Video',\n    'add_audio' => 'Insert Audio',\n    'add_file' => 'Insert File',\n    'embedding_code_required' => 'The embedding code is required',\n    'embedding_code_invalid' => 'Please enter valid HTML embedding code',\n    'embedding_code_invalid_title' => 'Invalid code',\n    'browse' => 'Browse Media Library',\n    'by_url' => 'By URL',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/en.json",
    "content": "{\n  \"Update\": \"Update\",\n  \"Cancel\": \"Cancel\",\n  \"You are viewing as\": \"You are viewing as\",\n  \"Preview Role\": \"Preview Role\",\n  \"This lets you test the actions this role can perform.\": \"This lets you test the actions this role can perform.\",\n  \"View As Role\": \"View As Role\",\n  \"Return to Role Settings\": \"Return to Role Settings\",\n  \"Password must have a minimum of length of :min characters\": \"Password must have a minimum of length of :min characters\",\n  \"Password must contain at least one uppercase character.\": \"Password must contain at least one uppercase character.\",\n  \"Password must contain at least one lowercase character.\": \"Password must contain at least one lowercase character.\",\n  \"Password must contain at least one number.\": \"Password must contain at least one number.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Password must contain at least one nonalphanumeric character.\",\n  \"Welcome to your Administration Area, :name\": \"Welcome to your Administration Area, :name\",\n  \"Duplicate\": \"Duplicate\",\n  \"Expand\": \"Expand\",\n  \"Collapse\": \"Collapse\",\n  \"Move Up\": \"Move Up\",\n  \"Move Down\": \"Move Down\",\n  \"Remove\": \"Remove\",\n  \"Manage Item\": \"Manage Item\",\n  \"Clear Filters\": \"Clear Filters\",\n  \"Filter Setup\": \"Filter Setup\",\n  \"Apply\": \"Apply\",\n  \"Clear\": \"Clear\",\n  \"is equal to\": \"is equal to\",\n  \"is between\": \"is between\",\n  \"contains\": \"contains\",\n  \"is before\": \"is before\",\n  \"is after\": \"is after\",\n  \"is greater than\": \"is greater than\",\n  \"is less than\": \"is less than\",\n  \"1. Export output format\": \"1. Export output format\",\n  \"File Format\": \"File Format\",\n  \"Delimiter Character\": \"Delimiter Character\",\n  \"Enclosure Character\": \"Enclosure Character\",\n  \"Escape Character\": \"Escape Character\",\n  \"2. Select columns to export\": \"2. Select columns to export\",\n  \"Columns\": \"Columns\",\n  \"3. Set export options\": \"3. Set export options\",\n  \"CSV Custom\": \"CSV Custom\",\n  \"1. Upload an Import File\": \"1. Upload an Import File\",\n  \"Import File\": \"Import File\",\n  \"File Encoding\": \"File Encoding\",\n  \"First row contains column titles\": \"First row contains column titles\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Leave this checked if the first row in the CSV is used as the column titles.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"File columns\",\n  \"Database fields\": \"Database fields\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Export progress\",\n  \"Processing\": \"Processing\",\n  \"Import progress\": \"Import progress\",\n  \"Import error\": \"Import error\",\n  \"Export error\": \"Export error\",\n  \"Column preview\": \"Column preview\",\n  \"Column\": \"Column\",\n  \"Disable\": \"Disable\",\n  \"Enable\": \"Enable\",\n  \"Delete\": \"Delete\",\n  \"Export\": \"Export\",\n  \"Import\": \"Import\",\n  \"Select Action\": \"Select Action\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Please create a new account for logging in to the Administration Area.\",\n  \"First Name\": \"First Name\",\n  \"Last Name\": \"Last Name\",\n  \"Email Address\": \"Email Address\",\n  \"Pick a Username\": \"Pick a Username\",\n  \"Enter New Password\": \"Enter New Password\",\n  \"Confirm Password\": \"Confirm Password\",\n  \"Create Account\": \"Create Account\",\n  \"Getting Ready\": \"Getting Ready\",\n  \"Just a few more minutes\": \"Just a few more minutes\",\n  \"Migrating Database\": \"Migrating Database\",\n  \"Access the Backend Panel\": \"Access the Backend Panel\",\n  \"View Backend During Maintenance\": \"View Backend During Maintenance\",\n  \"Perform Software Updates\": \"Perform Software Updates\",\n  \"In Maintenance\": \"In Maintenance\",\n  \"The site is currently in maintenance mode, please check back later.\": \"The site is currently in maintenance mode, please check back later.\",\n  \"Dashboard\": \"Dashboard\",\n  \"Administrators\": \"Administrators\",\n  \"Manage Admins\": \"Manage Admins\",\n  \"Create Admins\": \"Create Admins\",\n  \"Moderate Admins\": \"Moderate Admins\",\n  \"Manage account suspension and ban admin accounts\": \"Manage account suspension and ban admin accounts\",\n  \"Role Permissions\": \"Role Permissions\",\n  \"Team Groups\": \"Team Groups\",\n  \"Manage Other Admins\": \"Manage Other Admins\",\n  \"Allow users to reset passwords and update emails.\": \"Allow users to reset passwords and update emails.\",\n  \"Delete Admins\": \"Delete Admins\",\n  \"Preferences\": \"Preferences\",\n  \"Settings\": \"Settings\",\n  \"Background Color\": \"Background Color\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Allow users to create new roles and edit or delete roles lower than their highest role.\",\n  \"Save Changes\": \"Save Changes\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\",\n  \"Access Log\": \"Access Log\",\n  \"View a list of successful back-end user sign ins.\": \"View a list of successful back-end user sign ins.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Date & Time\",\n  \"Type\": \"Type\",\n  \"IP address\": \"IP address\",\n  \"Username\": \"Username\",\n  \"Login\": \"Login\",\n  \"First name\": \"First name\",\n  \"Last name\": \"Last name\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"A custom schema is used for this file format.\",\n  \"Select\": \"Select\",\n  \"Replace\": \"Replace\",\n  \"and\": \"and\",\n  \"Go\": \"Go\",\n  \"Go to page\": \"Go to page\",\n  \"Copy to Clipboard\": \"Copy to Clipboard\",\n  \"Reveal Contents\": \"Reveal Contents\",\n  \"Selected Site\": \"Selected Site\",\n  \"Use Emmet abbreviations\": \"Use Emmet abbreviations\",\n  \"A record does not exist for the selected site. Create one?\": \"A record does not exist for the selected site. Create one?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"The details you entered did not match our records. Please double-check and try again.\",\n  \"Administration Area\": \"Administration Area\",\n  \"Password Reset\": \"Password Reset\",\n  \"Please enter a new password.\": \"Please enter a new password.\",\n  \"Password\": \"Password\",\n  \"Password Restore\": \"Password Restore\",\n  \"Please enter your login to restore the password.\": \"Please enter your username to restore the password.\",\n  \"A user could not be found with a login value of ':login'\": \"A user could not be found with a login value of ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"If your account was found, a message has been sent to your email address with instructions.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Invalid password reset data supplied. Please try again!\",\n  \"Unable to reset your password!\": \"Unable to reset your password!\",\n  \"Password has been reset. You may now sign in.\": \"Password has been reset. You may now sign in.\",\n  \"Restore\": \"Restore\",\n  \"Reset\": \"Reset\",\n  \"Stay logged in\": \"Stay logged in\",\n  \"Forgot password?\": \"Forgot password?\",\n  \"Global Editor Settings\": \"Global Editor Settings\",\n  \"Manage Widgets\": \"Manage Widgets\",\n  \"Add Widget\": \"Add Widget\",\n  \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n  \"Make Default\": \"Make Default\",\n  \"Reset layout back to default?\": \"Reset layout back to default?\",\n  \"Reset Layout\": \"Reset Layout\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"please select\",\n  \"Width\": \"Width\",\n  \"full width\": \"full width\",\n  \"Create Widgets\": \"Create Widgets\",\n  \"not equal to\": \"not equal to\",\n  \"Light Mode\": \"Light Mode\",\n  \"Dark Mode\": \"Dark Mode\",\n  \"Auto Mode\": \"Auto Mode\",\n  \"OS Default\": \"OS Default\",\n  \"Create a Custom Palette\": \"Create a Custom Palette\",\n  \"Custom Palette\": \"Custom Palette\",\n  \"Primary Color\": \"Primary Color\",\n  \"Secondary Color\": \"Secondary Color\",\n  \"Selection Color\": \"Selection Color\",\n  \"Nav Text\": \"Nav Text\",\n  \"Nav Background\": \"Nav Background\",\n  \"Sidebar Text\": \"Sidebar Text\",\n  \"Sidebar Background\": \"Sidebar Background\",\n  \"Sidebar Active Text\": \"Sidebar Active Text\",\n  \"Sidebar Active Background\": \"Sidebar Active Background\",\n  \"Sidebar Hover Background\": \"Sidebar Hover Background\",\n  \"Settings Text\": \"Settings Text\",\n  \"Settings Background\": \"Settings Background\",\n  \"Settings Item Background\": \"Settings Item Background\",\n  \"Settings Active Color\": \"Settings Active Color\",\n  \"Settings Active Background\": \"Settings Active Background\",\n  \"Settings Hover Background\": \"Settings Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"This name is shown in the title area of the back-end.\",\n  \"App Name\": \"App Name\",\n  \"This name is shown on the sign in screen for the back-end.\": \"This name is shown on the sign in screen for the back-end.\",\n  \"App Tagline\": \"App Tagline\",\n  \"Brand\": \"Brand\",\n  \"Upload a custom logo to use in the back-end.\": \"Upload a custom logo to use in the back-end.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Upload a custom favicon to use in the back-end\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigation Logo\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Replaces the dashboard link with a custom logo in the navigation.\",\n  \"Dashboard Icon\": \"Dashboard Icon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Use a custom image for the dashboard icon (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"This message is shown on the sign in screen for the back-end.\",\n  \"Welcome Message\": \"Welcome Message\",\n  \"Login Page\": \"Login Page\",\n  \"Background Type\": \"Background Type\",\n  \"Flat Color\": \"Flat Color\",\n  \"Wallpaper\": \"Wallpaper\",\n  \"Wallpaper Size\": \"Wallpaper Size\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Cover\",\n  \"Background Wallpaper Image\": \"Background Wallpaper Image\",\n  \"Image\": \"Image\",\n  \"Random Autumn Images\": \"Random Autumn Images\",\n  \"Custom Image\": \"Custom Image\",\n  \"Login Page Image\": \"Login Page Image\",\n  \"Colors\": \"Colors\",\n  \"Color Mode\": \"Color Mode\",\n  \"Color Preset\": \"Color Preset\",\n  \"Menu Style\": \"Menu Style\",\n  \"Navigation\": \"Navigation\",\n  \"Custom Stylesheet\": \"Custom Stylesheet\",\n  \"Styles\": \"Styles\",\n  \"Inline\": \"Inline\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"Tiles\",\n  \"Collapsed\": \"Collapsed\",\n  \"Icons\": \"Icons\",\n  \"Left Side\": \"Left Side\",\n  \"Add New Item\": \"Add New Item\",\n  \"Link Color\": \"Link Color\",\n  \"Current Password\": \"Current Password\",\n  \"New Password\": \"New Password\",\n  \"Current password does not match. Please try again!\": \"Current password does not match. Please try again!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Your password has expired, please create a new one for security reasons.\",\n  \"Region\": \"Region\",\n  \"Locale\": \"Locale\",\n  \"Select your desired locale for language use.\": \"Select your desired locale for language use.\",\n  \"Timezone\": \"Timezone\",\n  \"Adjust displayed dates to this timezone.\": \"Adjust displayed dates to this timezone.\",\n  \"Code Editor\": \"Code Editor\",\n  \"Color Scheme\": \"Color Scheme\",\n  \"Word Wrap\": \"Word Wrap\",\n  \"Off\": \"Off\",\n  \"40 Characters\": \"40 Characters\",\n  \"80 Characters\": \"80 Characters\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"Font Size\",\n  \"Tab Size\": \"Tab Size\",\n  \"Code Folding\": \"Code Folding\",\n  \"Mark begin\": \"Mark begin\",\n  \"Mark begin and end\": \"Mark begin and end\",\n  \"Autocompletion\": \"Autocompletion\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Basic Autocompletion (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Live Autocompletion\",\n  \"Show gutter\": \"Show gutter\",\n  \"Highlight active line\": \"Highlight active line\",\n  \"Automatically close tags\": \"Automatically close tags\",\n  \"Indent using tabs\": \"Indent using tabs\",\n  \"Show indent guides\": \"Show indent guides\",\n  \"Show invisible characters\": \"Show invisible characters\",\n  \"Show print margin\": \"Show print margin\",\n  \"Custom styles to include in the HTML editor.\": \"Custom styles to include in the HTML editor.\",\n  \"Markup Styles\": \"Markup Styles\",\n  \"Paragraph Formats\": \"Paragraph Formats\",\n  \"Markup Classes\": \"Markup Classes\",\n  \"Tag Name\": \"Tag Name\",\n  \"Label\": \"Label\",\n  \"Paragraph\": \"Paragraph\",\n  \"Class Name\": \"Class Name\",\n  \"Link\": \"Link\",\n  \"Table\": \"Table\",\n  \"Table Cell\": \"Table Cell\",\n  \"Allowed Tags\": \"Allowed Tags\",\n  \"The list of allowed tags.\": \"The list of allowed tags.\",\n  \"Markup Tags\": \"Markup Tags\",\n  \"Allowed Empty Tags\": \"Allowed Empty Tags\",\n  \"The list of tags that are not removed when they have no content inside.\": \"The list of tags that are not removed when they have no content inside.\",\n  \"Do Not Wrap Tags\": \"Do Not Wrap Tags\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"The list of tags that should not be wrapped inside block tags.\",\n  \"Remove Tags\": \"Remove Tags\",\n  \"The list of tags that are removed together with their content.\": \"The list of tags that are removed together with their content.\",\n  \"Line Breaker Tags\": \"Line Breaker Tags\",\n  \"The list of tags that are used to place a line breaker element between.\": \"The list of tags that are used to place a line breaker element between.\",\n  \"Toolbar Buttons\": \"Toolbar Buttons\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"The Toolbar Buttons to be displayed in the Rich Editor by default.\",\n  \"Insert a preset toolbar button configuration\": \"Insert a preset toolbar button configuration\",\n  \"Allowed Attributes\": \"Allowed Attributes\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"The list of allowed HTML attributes, in addition to the normal allowances.\",\n  \"Enable code snippets (Tab)\": \"Enable code snippets (Tab)\",\n  \"Title\": \"Title\",\n  \"Description\": \"Description\",\n  \"Attachment\": \"Attachment\",\n  \"Attachment URL\": \"Attachment URL\",\n  \"Add a title and description for this attachment.\": \"Add a title and description for this attachment.\",\n  \"Upload\": \"Upload\",\n  \"Are you sure?\": \"Are you sure?\",\n  \"Delete Selected\": \"Delete Selected\",\n  \"Upload Error\": \"Upload Error\",\n  \"Remove File\": \"Remove File\",\n  \"Show Light Switch\": \"Show Light Switch\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Allow users to toggle the color mode from the navigation.\",\n  \"Create :name\": \"Create :name\",\n  \"Update :name\": \"Update :name\",\n  \"Add :name\": \"Add :name\",\n  \"Link :name\": \"Link :name\",\n  \"Unlink\": \"Unlink\",\n  \"Preview :name\": \"Preview :name\",\n  \"Link a New :name\": \"Link a New :name\",\n  \"Add a New :name\": \"Add a New :name\",\n  \"Related :name Data\": \"Related :name Data\",\n  \":name Created\": \":name Created\",\n  \":name Updated\": \":name Updated\",\n  \":name Deleted\": \":name Deleted\",\n  \":name Added\": \":name Added\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"Form record with an ID of :id could not be found.\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Preview the Website\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Manage back-end administrator users, groups and permissions.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Branding & Appearance\",\n  \"Customize the administration area such as name, colors and logo.\": \"Customize the administration area such as name, colors and logo.\",\n  \"Editor Settings\": \"Editor Settings\",\n  \"Change the global editor preferences.\": \"Change the global editor preferences.\",\n  \"My Account\": \"My Account\",\n  \"Update your account details such as name, email address and password.\": \"Update your account details such as name, email address and password.\",\n  \"Backend Preferences\": \"Backend Preferences\",\n  \"Manage your account preferences such as desired language.\": \"Manage your account preferences such as desired language.\",\n  \"security login\": \"security login\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create & Close\": \"Create & Close\",\n  \"Creating :name...\": \"Creating :name...\",\n  \"Save & Close\": \"Save & Close\",\n  \"Saving :name...\": \"Saving :name...\",\n  \"Delete this record?\": \"Delete this record?\",\n  \"Deleting :name...\": \"Deleting :name...\",\n  \"Loading...\": \"Loading...\",\n  \"Complete\": \"Complete\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Unknown column\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Ignore this column\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Created\",\n  \"Updated\": \"Updated\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Warnings\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Skipped Rows\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"File not found\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\",\n  \"Created At\": \"Created At\",\n  \"Updated At\": \"Updated At\",\n  \"Deleted At\": \"Deleted At\",\n  \"Created By\": \"Created By\",\n  \"Updated By\": \"Updated By\",\n  \"Deleted By\": \"Deleted By\",\n  \"Create Dashboard\": \"Create Dashboard\",\n  \"Edit Dashboard\": \"Edit Dashboard\",\n  \"The dashboard was successfully created.\": \"The dashboard was successfully created.\",\n  \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"This is a system generated dashboard and cannot be deleted.\",\n  \"Dashboard Name\": \"Dashboard Name\",\n  \"Please enter the dashboard name\": \"Please enter the dashboard name\",\n  \"Please enter the dashboard code\": \"Please enter the dashboard code\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"The code can only include Latin letters, digits, and hyphens\",\n  \"Icon\": \"Icon\",\n  \"Please select an icon\": \"Please select an icon\",\n  \"Global Access\": \"Global Access\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Dashboards with Global Access enabled can be viewed by other users.\",\n  \"Hide Interval\": \"Hide Interval\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Check this if the dashboard does not use the date range picker.\",\n  \"API Code\": \"API Code\",\n  \"A unique code to refer to this dashboard using external systems.\": \"A unique code to refer to this dashboard using external systems.\",\n  \"Select Dashboard\": \"Select Dashboard\",\n  \"Value\": \"Value\",\n  \"Difference with the previous period\": \"Difference with the previous period\",\n  \"Group\": \"Group\",\n  \"Compare Totals\": \"Compare Totals\",\n  \"Interval\": \"Interval\",\n  \"Date\": \"Date\",\n  \"You don't have access to any dashboards.\": \"You don't have access to any dashboards.\",\n  \"No dashboards have been set up yet.\": \"No dashboards have been set up yet.\",\n  \"Import Dashboard\": \"Import Dashboard\",\n  \"The requested dashboard could not be found.\": \"The requested dashboard could not be found.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Debug mode is enabled. This is not recommended for production installations.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"The backend URL :name is too generic. Please set to something more unique.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"An account with a generic login :name was found. Please rename this administrator account.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"The PHP extension :name is not installed. Please install this library and activate the extension.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"The plugin :name is a dependency but is not installed. Please install this plugin.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Your account doesn't have permissions do create or edit dashboards.\",\n  \"No records found\": \"No records found\",\n  \"Apply Changes\": \"Apply Changes\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Error loading the widget data. See the browser error console for details.\",\n  \"Configure the widget\": \"Configure the widget\",\n  \"to manage its settings.\": \"to manage its settings.\",\n  \"Includes\": \"Includes\",\n  \"Excludes\": \"Excludes\"\n}\n"
  },
  {
    "path": "modules/backend/lang/es/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'El tipo de campo utilizado es inválido :type.',\n    'options_method_not_exists' => 'El modelo clase :model debe definir un método :method() opciones recurrentes para el campo \":field\".',\n  ],\n  'widget' => [\n    'not_registered' => 'La clase del modulo \\':name\\' no ha sido registrada',\n    'not_bound' => 'El módulo con la clase \\':name\\' no se ha unido al controlador',\n  ],\n  'page' => [\n    'untitled' => 'Sin título',\n    'access_denied' => [\n      'label' => 'Acceso denegado',\n      'help' => 'No tiene permisos necesarios para ver esta página.',\n      'cms_link' => 'Volver al panel de administración',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'El parcial \\':name\\' no se encuentra.',\n  ],\n  'account' => [\n    'sign_out' => 'Desconectarse',\n    'login_prompt' => '¡Bienvenido! Inicie sesión para continuar.',\n    'login_placeholder' => 'usuario',\n    'password_placeholder' => 'contraseña',\n    'enter_email' => 'Ingrese su correo',\n    'email_placeholder' => 'correo',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancelar',\n    'delete' => 'Borrar',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Escritorio',\n    'widget_inspector_title' => 'Configuración del módulo',\n    'widget_inspector_description' => 'Configuración del módulo de reporte',\n    'widget_columns_label' => 'Ancho :columns',\n    'widget_columns_description' => 'El ancho del módulo, número entre 1 y 10.',\n    'widget_columns_error' => 'Por favor, ingrese un número entre 1 y 10 para el ancho del módulo.',\n    'columns' => '{1} columna|[2,Inf] columnas',\n    'widget_new_row_label' => 'Forzar nueva línea',\n    'widget_new_row_description' => 'Insertar el módulo en una nueva fila.',\n    'widget_title_label' => 'Título del módulo',\n    'widget_title_error' => 'El título del módulo es obligatorio.',\n    'reset_layout_success' => 'El diseño se ha restablecido',\n    'make_default_success' => 'Diseño actual es ahora el predeterminado',\n    'status' => [\n      'widget_title_default' => 'Estado del sistema',\n      'update_available' => '{0} actualizaciones disponibles!|{1} actualización disponible!|[2,Inf] actualizaciones disponibles!',\n      'updates_pending' => 'Actualizaciones de software pendientes',\n      'updates_nil' => 'Software está actualizado',\n      'updates_link' => 'Actualiza',\n      'warnings_pending' => 'Algunas incidencias necesitan atención',\n      'warnings_nil' => 'No hay avisos a mostrar',\n      'warnings_link' => 'Ver',\n      'core_build' => 'Versión del sistema',\n      'event_log' => 'Registro de eventos',\n      'request_log' => 'Registro de peticiones',\n      'app_birthday' => 'En línea desde',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Bienvenido',\n      'welcome_back_name' => 'Bienvenido de nuevo a :app, :name.',\n      'welcome_to_name' => 'Bienvenido a :app, :name.',\n      'first_sign_in' => 'Esta es la primera vez que ha iniciado sesión.',\n      'last_sign_in' => 'Su última sesión fue',\n      'view_access_logs' => 'Ver los registros de acceso',\n      'nice_message' => '¡Que tengas un gran día!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrador',\n    'list_title' => 'Gestionar administradores',\n    'new' => 'Nuevo Administrador',\n    'first_name' => 'Nombres',\n    'last_name' => 'Apellidos',\n    'full_name' => 'Nombre Completo',\n    'email' => 'Correo',\n    'groups' => 'Grupos',\n    'groups_comment' => 'Especificar a que grupos debe pertenecer la cuenta. Los grupos definen permisos de usuario, que pueden reemplazar los de nivel de usuario, en la ficha permisos.',\n    'avatar' => 'Avatar',\n    'password' => 'Contraseña',\n    'password_confirmation' => 'Confirmar Contraseña',\n    'permissions' => 'Permisos',\n    'account' => 'Cuenta',\n    'superuser' => 'Super Usuario',\n    'superuser_comment' => 'Permitir que esta cuenta tenga acceso a todas las áreas del sistema. Los super usuarios pueden añadir y gestionar otros usuarios.',\n    'send_invite' => 'Enviar invitación por correo electrónico',\n    'send_invite_comment' => 'Enviar una invitación conteniendo la información de inicio de sesión y contraseña.',\n    'delete_confirm' => '¿Eliminar este administrador?',\n    'return' => 'Regresar a la lista de administradores',\n    'allow' => 'Permitir',\n    'inherit' => 'Heredar',\n    'deny' => 'Denegar',\n    'group' => [\n      'name' => 'Grupo',\n      'name_comment' => 'El nombre aparece en la lista de grupo en el formulario de crear/editar de Administrador.',\n      'name_field' => 'Nombre',\n      'description_field' => 'Descripción',\n      'is_new_user_default_field_label' => 'Grupo por Defecto',\n      'is_new_user_default_field' => 'Añadir a los nuevos administradores a este grupo por defecto',\n      'code_field' => 'Código',\n      'code_comment' => 'Entrar un código único para acceder a ella con la API.',\n      'list_title' => 'Gestionar Grupos',\n      'new' => 'Nuevo Grupo',\n      'delete_confirm' => '¿Eliminar este grupo de administradores?',\n      'return' => 'Volver a la lista de grupos',\n      'users_count' => 'Usuarios',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'No existe un usuario autenticado para cargar o guardar las preferencias para.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Lista',\n    'search_prompt' => 'Buscar...',\n    'no_records' => 'No hay registros en esta vista.',\n    'missing_model' => 'El comportamiento de la lista utilizada en :class no tiene un modelo definido.',\n    'missing_column' => 'No hay definiciones de columna para :columns.',\n    'missing_columns' => 'Lista usada en :class no tiene lista columnas definidas.',\n    'missing_definition' => 'Comportamiento de la lista no contiene una columna para \\':field\\'.',\n    'missing_parent_definition' => 'Comportamiento de la lista no contiene una definición para \\':definition\\'.',\n    'behavior_not_ready' => 'Comportamiento de la lista no inicializado, compruebe que han llamado makeLists() en el controlador.',\n    'invalid_column_datetime' => '¿Valor de la columna \\':column\\' no es un objeto DateTime, le falta una referencia de $dates en el Modelo?',\n    'pagination' => 'Registros visualizados: :from-:to de :total',\n    'prev_page' => 'Página anterior',\n    'next_page' => 'Página siguiente',\n    'refresh' => 'Refrescar',\n    'updating' => 'Actualizando...',\n    'loading' => 'Cargando...',\n    'check' => 'Comprueba',\n    'delete_selected' => 'Eliminar seleccionados',\n    'delete_selected_empty' => 'No hay registros seleccionados para eliminar.',\n    'delete_selected_confirm' => '¿Borrar los registros seleccionados?',\n    'delete_selected_success' => 'Eliminados los registros seleccionados.',\n    'column_switch_true' => 'Sí',\n    'column_switch_false' => 'No',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Haz clic en %s o arrastra un archivo aquí para subir',\n  ],\n  'form' => [\n    'create_title' => 'Nuevo :name',\n    'update_title' => 'Editar :name',\n    'preview_title' => 'Vista previa de :name',\n    'reset_success' => 'Restablecido con éxito',\n    'missing_id' => 'No se ha especificado el identificador del registro de formulario.',\n    'missing_model' => 'El comportamiento del formulario utilizado en :class no tiene un modelo definido.',\n    'missing_definition' => 'El comportamiento del formulario no contiene un campo para \\':field\\'.',\n    'action_confirm' => '¿Está usted seguro?',\n    'create' => 'Crear',\n    'create_and_close' => 'Crear y cerrar',\n    'creating' => 'Creando...',\n    'creating_name' => 'Creando :name...',\n    'save' => 'Guardar',\n    'save_and_close' => 'Guardar y cerrar',\n    'saving' => 'Guardando...',\n    'saving_name' => 'Guardando :name...',\n    'delete' => 'Borrar',\n    'deleting' => 'Borrando...',\n    'confirm_delete' => '¿Borrar registro?',\n    'confirm_delete_multiple' => '¿Borrar los registros seleccionados?',\n    'deleting_name' => 'Borrando :name...',\n    'reset_default' => 'Restablecer por defecto',\n    'resetting' => 'Restableciendo',\n    'resetting_name' => 'Restableciendo :name',\n    'undefined_tab' => 'Varios',\n    'field_off' => 'Apagar',\n    'field_on' => 'Encender',\n    'add' => 'Agregar',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancelar',\n    'close' => 'Cerrar',\n    'confirm' => 'Confirmar',\n    'reload' => 'Recargar',\n    'complete' => 'Completo',\n    'ok' => 'OK',\n    'or' => 'o',\n    'confirm_tab_close' => '¿Cerrar la pestaña? Se perderán los cambios no guardados.',\n    'behavior_not_ready' => 'El comportamiento del formulario no se ha inicializado, compruebe que ha llamado initForm() en el controlador.',\n    'preview_no_files_message' => 'Los archivos no se han subido',\n    'preview_no_record_message' => 'No hay ningún registro seleccionado.',\n    'select' => 'Seleccionar',\n    'select_all' => 'seleccionar todo',\n    'select_none' => 'no seleccionar ninguno',\n    'insert_row' => 'Agregar Fila',\n    'insert_row_below' => 'Insertar fila debajo',\n    'delete_row' => 'Borrar Fila',\n    'concurrency_file_changed_title' => 'Archivo ha cambiado',\n    'concurrency_file_changed_description' => 'El archivo que está editando ha sido cambiado en el disco por otro usuario. Usted puede volver a cargar el archivo y perder los cambios o sobreescribir el archivo en el disco.',\n    'return_to_list' => 'Volver a listado',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Buscar Registro',\n  ],\n  'relation' => [\n    'missing_config' => 'Relación de comportamiento no tiene ninguna configuración para \\':config\\'.',\n    'missing_definition' => 'Relación de comportamiento no contiene una definición para \\':field\\'.',\n    'missing_model' => 'Relación de comportamiento utilizado en :class no tiene un modelo definido.',\n    'invalid_action_single' => 'Esta acción no se puede realizar en una relación singular.',\n    'invalid_action_multi' => 'Esta acción no se puede realizar en una relación múltiple.',\n    'help' => 'Haga clic en un elemento para añadir.',\n    'add' => 'Agregar',\n    'link_selected' => 'Vinculo selecionado',\n    'cancel' => 'Cancelar',\n    'close' => 'Cerrar',\n    'create' => 'Crear',\n    'update' => 'Actualizar',\n    'preview' => 'Vista previa',\n    'remove_name' => 'Remover :name',\n    'delete_name' => 'Borrar :name',\n    'link' => 'Vincular',\n    'unlink_name' => 'Desvincular :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Reordenar registros',\n    'no_records' => 'No existen registros disponibles para ordenar.',\n  ],\n  'model' => [\n    'name' => 'Modelo',\n    'not_found' => 'Modelo \\':class\\' con el ID :id no se pudo encontrar',\n    'missing_id' => 'No se ha especificado un ID para encontrar el modelo guardado.',\n    'missing_relation' => 'Modelo \\':class\\' no contiene una definición para \\':relation\\'.',\n    'missing_method' => 'Modelo \\':class\\' no contiene un método \\':method\\'.',\n    'invalid_class' => 'Modelo :model utilizado en :class no es váildo, este debería heredar la clase del \\\\Model.',\n    'mass_assignment_failed' => 'Asignación masiva falló para el atributo del Modelo \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Consejos de configuración del sistema',\n    'tips_description' => 'Hay problemas que necesitan de su atención para configurar el sistema correctamente.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Mis configuraciones',\n    'menu_description' => 'Configuraciones relacionadas con su cuenta',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Color de énfasis',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'todo',\n    'options_method_not_exists' => 'La clase de modelo :model debe definir un método :method() para regresar opciones para el filtro \\':filter\\'.',\n    'date_all' => 'todo el período',\n    'number_all' => 'todos los números',\n  ],\n  'import_export' => [\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Subir y gestionar contenidos multimedia - imágenes, vídeos, sonidos y documentos',\n  ],\n  'mediafinder' => [\n    'label' => 'Buscador de multimedia',\n    'default_prompt' => 'Haga clic en el botón %s para buscar un elemento multimedia',\n  ],\n  'media' => [\n    'menu_label' => 'Medios',\n    'upload' => 'Subir',\n    'move' => 'Mover',\n    'delete' => 'Eliminar',\n    'add_folder' => 'Nueva carpeta',\n    'search' => 'Buscar',\n    'display' => 'Mostrar',\n    'filter_everything' => 'Todo',\n    'filter_images' => 'Imágenes',\n    'filter_video' => 'Vídeo',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Documentos',\n    'library' => 'Biblioteca',\n    'size' => 'Tamaño',\n    'title' => 'Título',\n    'last_modified' => 'Última modificación',\n    'public_url' => 'URL pública',\n    'click_here' => 'Haz click aquí',\n    'thumbnail_error' => 'Error generando la miniatura.',\n    'return_to_parent' => 'Volver a la carpeta anterior',\n    'return_to_parent_label' => 'Atrás ..',\n    'nothing_selected' => 'No se ha seleccionado nada.',\n    'multiple_selected' => 'Se han seleccionado varios elementos.',\n    'uploading_file_num' => 'Subiendo :number archivo(s)...',\n    'uploading_complete' => 'Subida completada',\n    'uploading_error' => 'Error al subir',\n    'type_blocked' => 'El tipo de archivo usado ha sido bloqueado por motivos de seguridad.',\n    'order_by' => 'Ordenar por',\n    'folder' => 'Carpeta',\n    'no_files_found' => 'No se han encontrado archivos.',\n    'delete_empty' => 'Por favor, selecciona los elementos que quieres eliminar.',\n    'delete_confirm' => '¿Deseas eliminar los elementos seleccionados?',\n    'error_renaming_file' => 'Error al renombrar el elemento.',\n    'new_folder_title' => 'Nueva carpeta',\n    'folder_name' => 'Nombre de la carpeta',\n    'error_creating_folder' => 'Error al crear la carpeta',\n    'folder_or_file_exist' => 'Ya existe un archivo o carpeta con este nombre.',\n    'move_empty' => 'Por favor, selecciona los elementos que quieres mover.',\n    'move_popup_title' => 'Mover archivos o carpetas',\n    'move_destination' => 'Carpeta de destino',\n    'please_select_move_dest' => 'Por favor, selecciona una carpeta de destino.',\n    'move_dest_src_match' => 'Por favor, selecciona otra carpeta de destino.',\n    'empty_library' => 'La biblioteca de medios está vacía. Sube archivos o crea carpetas para empezar.',\n    'insert' => 'Insertar',\n    'crop_and_insert' => 'Cortar e insertar',\n    'select_single_image' => 'Por favor, selecciona sólo una imagen.',\n    'selection_not_image' => 'El elemento seleccionado no es una imagen.',\n    'restore' => 'Deshacer todos los cambios',\n    'resize' => 'Redimensionar...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Aspecto fijo',\n    'selection_mode_fixed_size' => 'Tamaño fijo',\n    'height' => 'Alto',\n    'width' => 'Ancho',\n    'selection_mode' => 'Modo de selección',\n    'resize_image' => 'Redimensionar imagen',\n    'image_size' => 'Tamaño de la imagen:',\n    'selected_size' => 'Selección:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/es-ar/lang.php",
    "content": "<?php return [\n  'field' => [\n    'invalid_type' => 'El tipo de campo utilizado es inválido :type.',\n    'options_method_not_exists' => 'La clase del modelo :model debe definir un método :method() que devuelva opciones para el campo \":field\".',\n  ],\n  'widget' => [\n    'not_registered' => 'No se ha registrado ningún módulo con la clase \\':name\\'.',\n    'not_bound' => 'El módulo con la clase \\':name\\' no se ha unido al controlador.',\n  ],\n  'page' => [\n    'untitled' => 'Sin título',\n    'access_denied' => [\n      'label' => 'Acceso denegado.',\n      'help' => 'No tiene permisos necesarios para ver esta página.',\n      'cms_link' => 'Regresar al backend.',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'No se encuentra el parcial \\':name\\'.',\n  ],\n  'account' => [\n    'sign_out' => 'Salir',\n    'login_placeholder' => 'Usuario',\n    'password_placeholder' => 'Contraseña',\n    'enter_email' => 'Ingrese su email',\n    'email_placeholder' => 'email',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancelar',\n    'delete' => 'Borrar',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Tablero',\n    'widget_inspector_title' => 'Configurar módulo',\n    'widget_inspector_description' => 'Configurar el módulo de informe.',\n    'widget_columns_label' => 'Ancho :columnas',\n    'widget_columns_description' => 'Ancho del módulo, un número entre 1 y 10.',\n    'widget_columns_error' => 'Por favor introduzca el ancho del módulo, un número entre 1 y 10.',\n    'columns' => '{1} columna|[2,Inf] columnas',\n    'widget_new_row_label' => 'Forzar nueva fila',\n    'widget_new_row_description' => 'Coloca el módulo en una nueva fila.',\n    'widget_title_label' => 'Título del módulo',\n    'widget_title_error' => 'El título del módulo es requerido.',\n    'status' => [\n      'widget_title_default' => 'Estado del sistema',\n      'online' => 'online',\n      'update_available' => '{0} actualizaciones disponibles!|{1} actualizaciones disponibles!|[2,Inf] actualizaciones disponibles!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrador',\n    'list_title' => 'Gestionar administradores',\n    'new' => 'Nuevo administrador',\n    'first_name' => 'Nombre',\n    'last_name' => 'Apellido',\n    'full_name' => 'Nombre completo',\n    'email' => 'Email',\n    'groups' => 'Grupos',\n    'groups_comment' => 'Especifique a qué grupos pertenece esta persona.',\n    'avatar' => 'Avatar',\n    'password' => 'Contraseña',\n    'password_confirmation' => 'Confirmar contraseña',\n    'superuser' => 'Super administrador',\n    'superuser_comment' => 'Marque esta casilla para permitir que esta persona tenga acceso a todas las áreas.',\n    'send_invite' => 'Enviar invitación por email.',\n    'send_invite_comment' => 'Utilice esta casilla de verificación para enviar una invitación al usuario por email.',\n    'delete_confirm' => 'Realmente desea eliminar este administrador?',\n    'return' => 'Regresar a la lista de administradores',\n    'allow' => 'Permitir',\n    'inherit' => 'Heredar',\n    'deny' => 'Denegar',\n    'group' => [\n      'name' => 'Grupo',\n      'name_field' => 'Nombre',\n      'list_title' => 'Gestionar Grupos',\n      'new' => 'Nuevo Grupo',\n      'delete_confirm' => 'Realmente desea eliminar este grupo de administradores?',\n      'return' => 'Regresar a la lista de grupos',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'No existe un usuario autenticado para cargar o guardar las preferencias.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Listar',\n    'search_prompt' => 'Buscar...',\n    'no_records' => 'No hay registros en esta lista.',\n    'missing_model' => 'El comportamiento de lista utilizado en :class no tiene un modelo definido.',\n    'missing_column' => 'No hay definiciones de columna para :columns.',\n    'missing_columns' => 'La lista utilizada en :class no tiene columnas definidas.',\n    'missing_definition' => 'Comportamiento de lista no contiene una columna para \\':field\\'.',\n    'behavior_not_ready' => 'Comportamiento de lista no se ha inicializado, compruebe que ha llamado makeLists() en el controlador.',\n    'invalid_column_datetime' => 'Columna valor \\':column\\' no es un objeto DateTime, has perdido la referencia $dates en el Modelo?',\n    'pagination' => 'Mostrando registros: :from-:to de :total',\n    'prev_page' => 'Página anterior',\n    'next_page' => 'Página siguiente',\n    'loading' => 'Cargando...',\n  ],\n  'fileupload' => [],\n  'form' => [\n    'create_title' => 'Nuevo :name',\n    'update_title' => 'Editar :name',\n    'preview_title' => 'Vista previa :name',\n    'missing_id' => 'El formulario de registro de identificación no se ha especificado.',\n    'missing_model' => 'El comportamiento del formulario utilizado en :class no tiene un modelo definido.',\n    'missing_definition' => 'El comportamiento de formulario no contiene un campo para\\':field\\'.',\n    'create' => 'Crear',\n    'create_and_close' => 'Crear y cerrar',\n    'creating' => 'Creando...',\n    'save' => 'Guardar',\n    'save_and_close' => 'Guardar y cerrar',\n    'saving' => 'Guardando...',\n    'delete' => 'Borrar',\n    'deleting' => 'Borrando...',\n    'undefined_tab' => 'Misc',\n    'field_off' => 'Off',\n    'field_on' => 'On',\n    'add' => 'Agregar',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancelar',\n    'close' => 'Cerrar',\n    'ok' => 'OK',\n    'or' => 'o',\n    'confirm_tab_close' => 'Realmente desea cerrar la cuenta? Se perderán los cambios no guardados.',\n    'behavior_not_ready' => 'Por favor compruebe que ha llamado a la funcion initForm() en el controlador.',\n    'preview_no_files_message' => 'Los archivos no fueron cargados.',\n    'select' => 'Seleccionar',\n    'select_all' => 'seleccionar todo',\n    'select_none' => 'no seleccionar ninguno',\n    'insert_row' => 'Insertar fila',\n    'delete_row' => 'Eliminar fila',\n    'concurrency-file-changed-title' => 'El archivo fue modificado',\n    'concurrency-file-changed-description' => 'El archivo que se encuentra editando fue modificado por otro usuario. Puede recargar el archivo y perder los cambios o sobreescribir el archivo en el disco.',\n    'reload' => 'Recargar',\n  ],\n  'relation' => [\n    'missing_definition' => 'Relación comportamiento no contiene una definición para \\':field\\'.',\n    'missing_model' => 'Relación comportamiento utilizado en :class no tiene un modelo definido.',\n    'invalid_action_single' => 'Esta acción no se puede realizar en una relación singular.',\n    'invalid_action_multi' => 'Esta acción no se puede realizar en una relación múltiple.',\n    'help' => 'Haga clic en un elemento para añadir.',\n    'add' => 'Agregar',\n    'cancel' => 'Cancelar',\n    'create' => 'Crear',\n    'update' => 'Actualizar',\n    'remove_name' => 'Remover :name',\n    'delete_name' => 'Borrar :name',\n  ],\n  'model' => [\n    'name' => 'Modelo',\n    'not_found' => 'No se pudo encontrar el modelo \\':class\\' con el ID :id.',\n    'missing_id' => 'No se especificó un ID para encontrar el modelo guardado.',\n    'missing_relation' => 'El modelo \\':class\\' no contiene una definición para \\':relation\\'.',\n    'invalid_class' => 'El modelo :model utilizado en :class no es váildo, este debería heredar la clase del \\\\Model.',\n    'mass_assignment_failed' => 'Asignación masiva falló para el atributo del modelo \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Consejos de configuración del sistema.',\n    'tips_description' => 'Hay problemas que necesitan de su atención para configurar el sistema correctamente.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Mi configuración',\n    'menu_description' => 'Ajustes relacionados con su cuenta de administración',\n  ],\n  'myaccount' => [],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'Todo',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/es-ar.json",
    "content": "{\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Este registro muestra la lista de ingresos al panel de administración. Los registros se mantienen por un total de :days días.\",\n  \"Access Log\": \"Registro de acceso\",\n  \"View a list of successful back-end user sign ins.\": \"Ver registro de ingresos al panel de administracion.\",\n  \"Date & Time\": \"Fecha y hora\",\n  \"IP address\": \"IP\",\n  \"Login\": \"Entrar\",\n  \"First name\": \"Nombre\",\n  \"Last name\": \"Apellido\",\n  \"Email\": \"Email\",\n  \"Password Reset\": \"Reiniciar contraseña.\",\n  \"Please enter a new password.\": \"Ingrese una nueva contraseña.\",\n  \"Please enter your login to restore the password.\": \"Ingrese su usuario\",\n  \"A user could not be found with a login value of ':login'\": \"El usuario no es válido ':login'.\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Le hemos enviado un email con la nueva contraseña.\",\n  \"Invalid password reset data supplied. Please try again!\": \"La contraseña es inválida. Por favor, intente otra vez.\",\n  \"Unable to reset your password!\": \"No se puede reiniciar su contraseña.\",\n  \"Password has been reset. You may now sign in.\": \"Su contraseña fue correctamente reiniciada.\",\n  \"Restore\": \"Restaurar\",\n  \"Reset\": \"Reiniciar\",\n  \"Forgot password?\": \"Olvidó su contraseña?\",\n  \"Add Widget\": \"Agregar módulo\",\n  \"Widget\": \"Módulo\",\n  \"please select\": \"Seleccionar\",\n  \"Width\": \"Ancho\",\n  \"full width\": \"Ancho completo\",\n  \"Locale\": \"Idioma\",\n  \"Select your desired locale for language use.\": \"Seleccione la localización para el uso del lenguaje.\",\n  \"Color Scheme\": \"Color del esquema\",\n  \"Word Wrap\": \"Ajuste de línea\",\n  \"Font Size\": \"Tamaño de la letra\",\n  \"Tab Size\": \">Tamaño de la solapa\",\n  \"Code Folding\": \"Código plegable\",\n  \"Show gutter\": \"Mostrar canal\",\n  \"Highlight active line\": \"Resaltar línea activa\",\n  \"Indent using tabs\": \"Espacio entre solapas\",\n  \"Show invisible characters\": \"Mostrar caracteres invisibles\",\n  \"Title\": \"Título\",\n  \"Description\": \"Descripción\",\n  \"Attachment\": \"Adjunto\",\n  \"Add a title and description for this attachment.\": \"Añadir un título y una descripción para este Adjunto.\",\n  \"Create :name\": \"Crear :name\",\n  \"Update :name\": \"Actualizar :name\",\n  \"Add :name\": \"Agregar :name\",\n  \"Delete\": \"Borrar\",\n  \"Remove\": \"Remover\",\n  \"Are you sure?\": \"Está seguro?\",\n  \"Add a New :name\": \"Agregar un nuevo :name\",\n  \"Related :name Data\": \"Relacionar :name datos.\",\n  \":name Created\": \":name ha sido creado con éxito.\",\n  \":name Updated\": \":name se ha actualizado correctamente.\",\n  \":name Deleted\": \":name se ha eliminado correctamente.\",\n  \"Form record with an ID of :id could not be found.\": \"El registro de formulario con el ID :id no se pudo encontrar.\",\n  \"Preview the Website\": \"Vista previa de la página web\",\n  \"Administrators\": \"Administradores\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Gestionar backend de administrador de usuarios, grupos y permisos.\",\n  \"Team Groups\": \"Grupos\",\n  \"Editor Settings\": \"Preferencias del editor de código\",\n  \"Change the global editor preferences.\": \"Configurar preferencias del editor de código, como el tamaño de la letra y el color del esquema.\",\n  \"My Account\": \"Mi cuenta\",\n  \"Update your account details such as name, email address and password.\": \"Actualizar información de su cuenta, como nombre, dirección de correo electrónico y contraseña.\",\n  \"Backend Preferences\": \"Preferencias de backend\",\n  \"Manage your account preferences such as desired language.\": \"Gestionar preferencias de idioma y la apariencia del backend.\",\n  \"security login\": \"Inicio seguro\",\n  \"List Setup\": \"Configuración de la lista\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Utilice las casillas de verificación para seleccionar las columnas que desea ver en la lista. Puede cambiar la posición de las columnas arrastrándolas hacia arriba o hacia abajo.\",\n  \"Records Per Page\": \"Registros por página\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Seleccione el número de registros por página para mostrar. Tenga en cuenta que un alto número de registros en una sola página puede reducir el rendimiento.\",\n  \"Add Selected\": \"Agregar seleccionado\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"La extensión PHP :name no está instalada. Por favor instale esta librería y active la extensión.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"El directorio :name o los subdirectorios no se puede escribir por PHP. Por favor establezca los permisos correctos para el servidor web en este directorio.\"\n}"
  },
  {
    "path": "modules/backend/lang/es.json",
    "content": "{\n  \"Update\": \"Actualizar\",\n  \"Cancel\": \"Cancelar\",\n  \"You are viewing as\": \"Estás viendo como\",\n  \"Preview Role\": \"Rol de vista previa\",\n  \"This lets you test the actions this role can perform.\": \"Esto le permite probar las acciones que puede realizar este rol.\",\n  \"View As Role\": \"Ver como rol\",\n  \"Return to Role Settings\": \"Volver a la configuración de roles\",\n  \"Password must have a minimum of length of :min characters\": \"La contraseña debe tener una longitud mínima de :min caracteres\",\n  \"Password must contain at least one uppercase character.\": \"La contraseña debe contener al menos un carácter en mayúscula.\",\n  \"Password must contain at least one lowercase character.\": \"La contraseña debe contener al menos un carácter en minúscula.\",\n  \"Password must contain at least one number.\": \"La contraseña debe contener al menos un número.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"La contraseña debe contener al menos un carácter no alfanumérico.\",\n  \"Welcome to your Administration Area, :name\": \"Bienvenido a su Área de Administración, :name\",\n  \"Duplicate\": \"Duplicar\",\n  \"Expand\": \"Expandir\",\n  \"Collapse\": \"Colapsar\",\n  \"Move Up\": \"Mover hacia arriba\",\n  \"Move Down\": \"Mover hacia abajo\",\n  \"Remove\": \"Remover\",\n  \"Manage Item\": \"Administrar elemento\",\n  \"Clear Filters\": \"Borrar filtros\",\n  \"Filter Setup\": \"Configuración del filtro\",\n  \"Apply\": \"Aplicar\",\n  \"Clear\": \"Borrar\",\n  \"is equal to\": \"es igual a\",\n  \"is between\": \"está entre\",\n  \"contains\": \"contiene\",\n  \"is before\": \"es antes\",\n  \"is after\": \"es despues\",\n  \"is greater than\": \"es mayor que\",\n  \"is less than\": \"es menos que\",\n  \"1. Export output format\": \"1. Formato de salida de la exportación\",\n  \"File Format\": \"Formato de archivo\",\n  \"Delimiter Character\": \"Caracter delimitador\",\n  \"Enclosure Character\": \"Carácter recinto\",\n  \"Escape Character\": \"Caracter de escape\",\n  \"2. Select columns to export\": \"2. Seleccionar columnas a exportar\",\n  \"Columns\": \"Columnas\",\n  \"3. Set export options\": \"3. Establecer opciones de exportación\",\n  \"CSV Custom\": \"Formato personalizado\",\n  \"1. Upload an Import File\": \"1. Subir un archivo CSV\",\n  \"Import File\": \"Importar archivo\",\n  \"File Encoding\": \"Codificación de archivo\",\n  \"First row contains column titles\": \"Primera fila contiene títulos de columna\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Dejelo activado si la primera fila en el CSV se utiliza como los títulos de columna.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Emparejar las columnas del archivo con los campos de la base de datos\",\n  \"File columns\": \"Archivo de columnas\",\n  \"Database fields\": \"Campos de base de datos\",\n  \"3. Set Import Options\": \"3. Establecer opciones de importación\",\n  \"Export progress\": \"Progreso de exportación\",\n  \"Processing\": \"Procesando\",\n  \"Import progress\": \"Progreso de Importación\",\n  \"Import error\": \"Error de importación\",\n  \"Export error\": \"Error de exportación\",\n  \"Column preview\": \"Previsualización de la columna\",\n  \"Column\": \"Columna\",\n  \"Disable\": \"Desactivar\",\n  \"Enable\": \"Activar\",\n  \"Delete\": \"Borrar\",\n  \"Export\": \"Exportar\",\n  \"Import\": \"Importar\",\n  \"Select Action\": \"Seleccione la acción\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Cree una nueva cuenta para iniciar sesión en el Área de Administración.\",\n  \"First Name\": \"Nombre\",\n  \"Last Name\": \"Apellido\",\n  \"Email Address\": \"Dirección de correo electrónico\",\n  \"Pick a Username\": \"Elige un nombre de usuario\",\n  \"Enter New Password\": \"Ingresar Nueva Contraseña\",\n  \"Confirm Password\": \"Confirmar Contraseña\",\n  \"Create Account\": \"Crear Cuenta\",\n  \"Getting Ready\": \"Preparándose\",\n  \"Just a few more minutes\": \"Solo unos minutos más\",\n  \"Migrating Database\": \"Migrando base de datos\",\n  \"Access the Backend Panel\": \"Acceder al panel de back-end\",\n  \"View Backend During Maintenance\": \"Ver backend durante el mantenimiento\",\n  \"Perform Software Updates\": \"Realizar actualizaciones de software\",\n  \"In Maintenance\": \"En mantenimiento\",\n  \"The site is currently in maintenance mode, please check back later.\": \"El sitio se encuentra actualmente en modo de mantenimiento, vuelva a consultar más tarde.\",\n  \"Dashboard\": \"Escritorio\",\n  \"Administrators\": \"Administradores\",\n  \"Manage Admins\": \"Gestionar administradores\",\n  \"Create Admins\": \"Crear administradores\",\n  \"Moderate Admins\": \"Moderar administradores\",\n  \"Manage account suspension and ban admin accounts\": \"Administrar la suspensión de la cuenta y prohibir las cuentas de administrador\",\n  \"Role Permissions\": \"Gestionar roles\",\n  \"Team Groups\": \"Gestionar Grupos\",\n  \"Manage Other Admins\": \"Gestionar otros administradores\",\n  \"Allow users to reset passwords and update emails.\": \"Permite restablecer contraseñas y actualizar correos electrónicos\",\n  \"Delete Admins\": \"Eliminar administradores\",\n  \"Preferences\": \"Preferencias\",\n  \"Settings\": \"Ajustes\",\n  \"Background Color\": \"Color de fondo\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Permita que los usuarios creen nuevos roles y editen o eliminen roles inferiores a su rol más alto.\",\n  \"Save Changes\": \"Guardar cambios\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Este registro muestra la lista de ingresos al panel de administración. Los registros se mantienen por un total de :days días.\",\n  \"Access Log\": \"Registro de acceso\",\n  \"View a list of successful back-end user sign ins.\": \"Ver registro de ingresos al panel de administracion.\",\n  \"ID\": \"IDENTIFICACIÓN\",\n  \"Date & Time\": \"Fecha y hora\",\n  \"Type\": \"Escribe\",\n  \"IP address\": \"IP\",\n  \"Username\": \"Nombre de usuario\",\n  \"Login\": \"Entrar\",\n  \"First name\": \"Nombre\",\n  \"Last name\": \"Apellido\",\n  \"Email\": \"Correo\",\n  \"A custom schema is used for this file format.\": \"Se utiliza un esquema personalizado para este formato de archivo.\",\n  \"Select\": \"Seleccione\",\n  \"Replace\": \"Reemplazar\",\n  \"and\": \"y\",\n  \"Go\": \"Ir\",\n  \"Go to page\": \"ir a la página\",\n  \"Copy to Clipboard\": \"Copiar al portapapeles\",\n  \"Reveal Contents\": \"Revelar contenidos\",\n  \"Selected Site\": \"Sitio Seleccionado\",\n  \"Use Emmet abbreviations\": \"Usar abreviaturas de Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"No existe un registro para el sitio seleccionado. ¿Crea uno?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Los detalles que ingresó no coinciden con nuestros registros. Vuelva a verificar y vuelva a intentarlo.\",\n  \"Administration Area\": \"Area de Administración\",\n  \"Password Reset\": \"Restablecer la contraseña\",\n  \"Please enter a new password.\": \"Ingrese una nueva contraseña.\",\n  \"Password\": \"Clave\",\n  \"Password Restore\": \"Restaurar contraseña\",\n  \"Please enter your login to restore the password.\": \"Ingrese su usuario\",\n  \"A user could not be found with a login value of ':login'\": \"No se ha encontrado el usuario ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Correo electrónico enviado a su dirección con las instruciones.\",\n  \"Invalid password reset data supplied. Please try again!\": \"La información para restablecer la contraseña no es valida. ¡Por favor, vuelva a intentarlo!\",\n  \"Unable to reset your password!\": \"¡No es posible restablecer la contraseña!\",\n  \"Password has been reset. You may now sign in.\": \"Contraseña ha sido restablecida. Ahora puede iniciar sesión\",\n  \"Restore\": \"Restaurar\",\n  \"Reset\": \"Restablecer\",\n  \"Stay logged in\": \"Permanecer conectado\",\n  \"Forgot password?\": \"¿Olvidó su clave?\",\n  \"Global Editor Settings\": \"Configuración del editor global\",\n  \"Manage Widgets\": \"Gestionar modulos\",\n  \"Add Widget\": \"Agregar un módulo\",\n  \"Set the current layout as the default?\": \"Establecer el diseño actual por defecto?\",\n  \"Make Default\": \"Establecer como predeterminado\",\n  \"Reset layout back to default?\": \"Restablecer diseño de vualta a los valores por defecto?\",\n  \"Reset Layout\": \"Restablecer diseño\",\n  \"Widget\": \"Módulo\",\n  \"please select\": \"por favor seleccione\",\n  \"Width\": \"Ancho\",\n  \"full width\": \"ancho completo\",\n  \"Create Widgets\": \"Crear Módulos\",\n  \"not equal to\": \"no igual a\",\n  \"Light Mode\": \"Modo Claro\",\n  \"Dark Mode\": \"Modo Oscuro\",\n  \"Auto Mode\": \"Modo automático\",\n  \"OS Default\": \"Valor predeterminado del sistema operativo\",\n  \"Create a Custom Palette\": \"Crear una paleta personalizada\",\n  \"Custom Palette\": \"paleta personalizada\",\n  \"Primary Color\": \"Primario color\",\n  \"Secondary Color\": \"Secundario color\",\n  \"Selection Color\": \"Color de selección\",\n  \"Nav Text\": \"Texto de navegación\",\n  \"Nav Background\": \"Fondo de navegación\",\n  \"Sidebar Text\": \"Texto de la barra lateral\",\n  \"Sidebar Background\": \"Fondo de la barra lateral\",\n  \"Sidebar Active Text\": \"Texto activo de la barra lateral\",\n  \"Sidebar Active Background\": \"Fondo activo de la barra lateral\",\n  \"Sidebar Hover Background\": \"Fondo flotante de la barra lateral\",\n  \"Settings Text\": \"Ajustes Texto\",\n  \"Settings Background\": \"Fondo de configuración\",\n  \"Settings Item Background\": \"Ajustes Elemento Fondo\",\n  \"Settings Active Color\": \"Ajustes Color activo\",\n  \"Settings Active Background\": \"Ajustes Activo Fondo\",\n  \"Settings Hover Background\": \"Ajustes Fondo flotante\",\n  \"This name is shown in the title area of the back-end.\": \"Este nombre se mostrará en el título del back-end.\",\n  \"App Name\": \"Nombre de la aplicación\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Se mostrará en la página de inicio de sesión del back-end.\",\n  \"App Tagline\": \"Eslogan\",\n  \"Brand\": \"Marca\",\n  \"Upload a custom logo to use in the back-end.\": \"Subir un logo personalizado para usarlo en el back-end.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Cargue un favicon personalizado para usar en el back-end\",\n  \"Favicon\": \"icono de favoritos\",\n  \"Navigation Logo\": \"Logotipo de navegación\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Reemplaza el vínculo del tablero con un logotipo personalizado en la navegación.\",\n  \"Dashboard Icon\": \"Icono del tablero\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Utilice una imagen personalizada para el icono del tablero (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Se mostrará en la página de inicio de sesión del back-end.\",\n  \"Welcome Message\": \"Mensaje de bienvenida\",\n  \"Login Page\": \"Página de inicio de sesión\",\n  \"Background Type\": \"Tipo de fondo\",\n  \"Flat Color\": \"Color Plano\",\n  \"Wallpaper\": \"Fondo de pantalla\",\n  \"Wallpaper Size\": \"Tamaño del fondo\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Cubrir\",\n  \"Background Wallpaper Image\": \"Imagen de fondo de pantalla\",\n  \"Image\": \"Imagen\",\n  \"Random Autumn Images\": \"Imágenes aleatorias de otoño\",\n  \"Custom Image\": \"Imagen personalizada\",\n  \"Login Page Image\": \"Imagen de la página de inicio de sesión\",\n  \"Colors\": \"Colores\",\n  \"Color Mode\": \"Modo de color\",\n  \"Color Preset\": \"Preajuste de color\",\n  \"Menu Style\": \"Estilo de Menú\",\n  \"Navigation\": \"Navegación\",\n  \"Custom Stylesheet\": \"Hoja de estilo personalizada\",\n  \"Styles\": \"Estilos\",\n  \"Inline\": \"En línea\",\n  \"Text\": \"Texto\",\n  \"Tiles\": \"Mosaicos\",\n  \"Collapsed\": \"Colapsado\",\n  \"Icons\": \"Iconos\",\n  \"Left Side\": \"Lado izquierdo\",\n  \"Add New Item\": \"Agregar ítem nuevo\",\n  \"Link Color\": \"Color de enlace\",\n  \"Current Password\": \"Contraseña actual\",\n  \"New Password\": \"Nueva contraseña\",\n  \"Current password does not match. Please try again!\": \"La contraseña actual no coincide. ¡Inténtalo de nuevo!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Su contraseña ha caducado, cree una nueva por razones de seguridad.\",\n  \"Region\": \"Región\",\n  \"Locale\": \"Idioma\",\n  \"Select your desired locale for language use.\": \"Seleccione su localización deseada para el uso del idioma.\",\n  \"Timezone\": \"Zona horaria\",\n  \"Adjust displayed dates to this timezone.\": \"Ajustar las fechas mostradas a esta zona horaria.\",\n  \"Code Editor\": \"Editor de Código\",\n  \"Color Scheme\": \"Color del esquema\",\n  \"Word Wrap\": \"Ajuste de línea\",\n  \"Off\": \"Desactivado\",\n  \"40 Characters\": \"40 Caracteres\",\n  \"80 Characters\": \"80 Caracteres\",\n  \"Fluid\": \"Fluido\",\n  \"Font Size\": \"Tamaño de la letra\",\n  \"Tab Size\": \"Tamaño de la Solapa\",\n  \"Code Folding\": \"Código Plegable\",\n  \"Mark begin\": \"Marca comienzo\",\n  \"Mark begin and end\": \"Marca comienzo y fin\",\n  \"Autocompletion\": \"Autocompletado\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Autocompletado Basico (Ctrl + Espacio)\",\n  \"Live Autocompletion\": \"Autocompletado en Vivo\",\n  \"Show gutter\": \"Mostrar numeros de línea\",\n  \"Highlight active line\": \"Resaltar línea activa\",\n  \"Automatically close tags\": \"Cerrado de etiquetas automático\",\n  \"Indent using tabs\": \"Indentar usando tabulación\",\n  \"Show indent guides\": \"Mostrar Guias de Identado\",\n  \"Show invisible characters\": \"Mostrar caracteres invisibles\",\n  \"Show print margin\": \"Mostrar Margen de impresión\",\n  \"Custom styles to include in the HTML editor.\": \"Estilos personalizados para incluir en el editor HTML.\",\n  \"Markup Styles\": \"Estilos de marcado\",\n  \"Paragraph Formats\": \"Formatos de párrafo\",\n  \"Markup Classes\": \"Clases de marcado\",\n  \"Tag Name\": \"Nombre de la etiqueta\",\n  \"Label\": \"Etiqueta\",\n  \"Paragraph\": \"Párrafo\",\n  \"Class Name\": \"Nombre de Clase\",\n  \"Link\": \"Enlace\",\n  \"Table\": \"Tabla\",\n  \"Table Cell\": \"Celda de Tabla\",\n  \"Allowed Tags\": \"Etiquetas permitidas\",\n  \"The list of allowed tags.\": \"La lista de etiquetas permitidas.\",\n  \"Markup Tags\": \"Etiquetas de marcado\",\n  \"Allowed Empty Tags\": \"Permitir etiquetas vacias\",\n  \"The list of tags that are not removed when they have no content inside.\": \"La lista de etiquetas que no se quitan cuando no tienen ningún contenido dentro.\",\n  \"Do Not Wrap Tags\": \"No envuelva las etiquetas\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"La lista de etiquetas que no deben estar envueltas dentro de etiquetas de bloque.\",\n  \"Remove Tags\": \"Quitar etiquetas\",\n  \"The list of tags that are removed together with their content.\": \"La lista de etiquetas que se eliminan junto con su contenido.\",\n  \"Line Breaker Tags\": \"Etiquetas de interruptor de línea\",\n  \"The list of tags that are used to place a line breaker element between.\": \"La lista de etiquetas que se utilizan para colocar un elemento de interrupción de línea entre ellas.\",\n  \"Toolbar Buttons\": \"Botones de la barra de herramientas\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Los botones de la barra de herramientas que se mostrarán en Rich Editor de forma predeterminada.\",\n  \"Insert a preset toolbar button configuration\": \"Insertar una configuración de botón de barra de herramientas predeterminada\",\n  \"Allowed Attributes\": \"Atributos permitidos\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"La lista de atributos HTML permitidos, además de los permisos normales.\",\n  \"Enable code snippets (Tab)\": \"Activar uso de Snippets\",\n  \"Title\": \"Título\",\n  \"Description\": \"Descripción\",\n  \"Attachment\": \"Adjunto\",\n  \"Attachment URL\": \"URL del Adjunto\",\n  \"Add a title and description for this attachment.\": \"Agregue un título y descripción al adjunto\",\n  \"Upload\": \"Subir\",\n  \"Are you sure?\": \"¿Está usted seguro?\",\n  \"Delete Selected\": \"Borrar Seleccionados\",\n  \"Upload Error\": \"Error al subir.\",\n  \"Remove File\": \"Eliminar archivo\",\n  \"Show Light Switch\": \"Mostrar interruptor de luz\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Permitir a los usuarios cambiar el modo de color desde la navegación.\",\n  \"Create :name\": \"Crear :name\",\n  \"Update :name\": \"Actualizar :name\",\n  \"Add :name\": \"Agregar :name\",\n  \"Link :name\": \"Vincular :name\",\n  \"Unlink\": \"Desvincular\",\n  \"Preview :name\": \"Vista previa :name\",\n  \"Link a New :name\": \"Vinculo a nuevo :name\",\n  \"Add a New :name\": \"Agregar un nuevo :name\",\n  \"Related :name Data\": \"Relacionar :name datos\",\n  \":name Created\": \":name creado\",\n  \":name Updated\": \":name actualizado\",\n  \":name Deleted\": \":name borrado\",\n  \":name Added\": \":name Added\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"El registro del formulario con un ID de :id no se pudo encontrar.\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Vista previa del sitio\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Gestionar usuarios, grupos y permisos para el back-end.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Personalizar back-end\",\n  \"Customize the administration area such as name, colors and logo.\": \"Perzonalizar el área de administración, así como el nombre, los colores y el logo.\",\n  \"Editor Settings\": \"Preferencias del Editor\",\n  \"Change the global editor preferences.\": \"Configurar las preferencias del editor de código, como el tamaño de la letra y el color del esquema.\",\n  \"My Account\": \"Mi Cuenta\",\n  \"Update your account details such as name, email address and password.\": \"Actualice la información de su cuenta, como nombre, dirección de correo electrónico y contraseña.\",\n  \"Backend Preferences\": \"Preferencias del panel de administración\",\n  \"Manage your account preferences such as desired language.\": \"Gestione la preferencia de idioma y la apariencia del panel.\",\n  \"security login\": \"Inicio de sesión de seguridad\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create & Close\": \"Create & Close\",\n  \"Creating :name...\": \"Creating :name...\",\n  \"Save & Close\": \"Save & Close\",\n  \"Saving :name...\": \"Saving :name...\",\n  \"Delete this record?\": \"Delete this record?\",\n  \"Deleting :name...\": \"Deleting :name...\",\n  \"Loading...\": \"Loading...\",\n  \"Complete\": \"Completado\",\n  \"Please specify the modelClass property for :type\": \"Por favor especifique la propiedad modelClass para :type\",\n  \"Please specify some columns to export.\": \"Por favor especifique algunas columnas para exportar.\",\n  \"Missing column identifier\": \"Falta el identificador de columna\",\n  \"Unknown column\": \"Columna desconocida\",\n  \"Please specify some columns to import.\": \"Por favor, especifique algunas columnas a importar.\",\n  \"Please match some columns first.\": \"Por favor empareje alguna columna primero.\",\n  \"Please specify a match for the required field :label.\": \"Por favor especifique alguna concordancia para el campo requerido :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"La codificación del archivo de origen no es reconocida. Por favor, seleccione la opción de formato de archivo personalizado con la codificación adecuada para importar su archivo.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Debe implementar el comportamiento del controlador ListController con la opción de exportación 'useList' habilitada.\",\n  \"File export process completed!\": \"¡Proceso de exportación de archivo completado!\",\n  \"The browser will now redirect to the file download.\": \"El navegador ahora redireccionará a la descarga de archivos.\",\n  \"Ignore this column\": \"Ignorar esta columna\",\n  \"Drop column here...\": \"Colocar columna aquí...\",\n  \"Please upload a valid CSV file.\": \"Por favor suba un archivo CSV válido.\",\n  \"Created\": \"Creado\",\n  \"Updated\": \"Actualizado\",\n  \"Skipped\": \"Omitidos\",\n  \"Warnings\": \"Advertencias\",\n  \"Errors\": \"Errores\",\n  \"Skipped Rows\": \"Filas Omitidas\",\n  \"Show Ignored Columns\": \"Mostrar Columnas Ignoradas\",\n  \"Auto Match Columns\": \"Emparejar columnas automáticamente\",\n  \"File not found\": \"Archivo no encontrado\",\n  \"There was no data supplied to export\": \"No hay datos suministrados para exportar\",\n  \"Created At\": \"Creado en\",\n  \"Updated At\": \"Actualizado en\",\n  \"Deleted At\": \"Eliminado en\",\n  \"Created By\": \"Creado por\",\n  \"Updated By\": \"Actualizado por\",\n  \"Deleted By\": \"Eliminado por\",\n  \"Create Dashboard\": \"Crear panel de control\",\n  \"Edit Dashboard\": \"Editar panel de control\",\n  \"The dashboard was successfully created.\": \"El panel de control se creó correctamente.\",\n  \"The dashboard was successfully updated.\": \"El panel de control se actualizó correctamente.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"Este es un panel de control generado por el sistema y no se puede eliminar.\",\n  \"Dashboard Name\": \"Nombre del panel de control\",\n  \"Please enter the dashboard name\": \"Por favor, introduzca el nombre del panel de control.\",\n  \"Please enter the dashboard code\": \"Por favor, introduzca el código del panel de control.\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"El código solo puede incluir letras latinas, dígitos y guiones.\",\n  \"Icon\": \"Icono\",\n  \"Please select an icon\": \"Seleccione un icono\",\n  \"Global Access\": \"Acceso global\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Los paneles de control con acceso global habilitado pueden ser vistos por otros usuarios.\",\n  \"Hide Interval\": \"Ocultar intervalo\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Compruebe esto si el panel de control no utiliza el selector de rango de fechas.\",\n  \"API Code\": \"Código API\",\n  \"A unique code to refer to this dashboard using external systems.\": \"Un código único para hacer referencia a este panel de control mediante sistemas externos.\",\n  \"Select Dashboard\": \"Seleccionar Panel de control\",\n  \"Value\": \"Valor\",\n  \"Difference with the previous period\": \"Diferencia con el período anterior\",\n  \"Group\": \"Grupo\",\n  \"Compare Totals\": \"Comparar totales\",\n  \"Interval\": \"Intervalo\",\n  \"Date\": \"Fecha\",\n  \"You don't have access to any dashboards.\": \"No tienes acceso a ningún panel de control.\",\n  \"No dashboards have been set up yet.\": \"Aún no se han configurado los paneles de control.\",\n  \"Import Dashboard\": \"Importar panel\",\n  \"The requested dashboard could not be found.\": \"No se pudo encontrar el panel de control solicitado.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"El modo de depuración está activado. No se recomienda su uso en instalaciones de producción.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"La URL del backend (nombre) es demasiado genérica. Por favor, cámbiela por algo más único.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Se ha encontrado una cuenta con un nombre de usuario genérico. Por favor, cambie el nombre de esta cuenta de administrador.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"La extensión PHP :name no está instalada. Por favor instalar esta librería y activar la extensión.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"El complemento :name es una dependencia pero no está instalado. Por favor, instale este complemento.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Directorio :name o los subdirectorios no se puede escribir por PHP. Por favor establecer los permisos correctos para el servidor web en este directorio.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Tu cuenta no tiene permisos para crear o editar paneles de control.\",\n  \"No records found\": \"No se encontraron registros\",\n  \"Apply Changes\": \"Aplicar cambios\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Error al cargar los datos del widget. Consulte la consola de errores del navegador para obtener más detalles.\",\n  \"Configure the widget\": \"Configurar el widget\",\n  \"to manage its settings.\": \"para gestionar su configuración.\",\n  \"Includes\": \"Incluye\",\n  \"Excludes\": \"Excluye\",\n  \"Manage Roles\": \"Gestionar roles\",\n  \"Manage Groups\": \"Gestionar Grupos\",\n  \"Customize Backend\": \"Personalizar back-end\"\n}"
  },
  {
    "path": "modules/backend/lang/et/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Välja tüüpi :type pole olemas.',\n    'options_method_invalid_model' => 'Atribuut \\':field\\' ei vasta ühelegi olemasolevale andmemudelile. Palun defineeri valikväärtuste funktioon :model andmemudelis.',\n    'options_method_not_exists' => 'Andmemudelis :model peab olema defineeritud funktsioon :method(), mis tagastab valikväärtused välja \\':field\\' jaoks.',\n  ],\n  'widget' => [\n    'not_registered' => 'Vidina klassinimi \\':name\\' pole registreeritud',\n    'not_bound' => 'Vidin klassinimega \\':name\\' pole seotud kontrolleriga',\n  ],\n  'page' => [\n    'untitled' => 'Nimeta',\n    'access_denied' => [\n      'label' => 'Juurdepääs keelatud',\n      'help' => 'Sul pole vajalikke õiguseid, et seda lehte näha.',\n      'cms_link' => 'Tagasi haldusliidesesse',\n    ],\n    'no_database' => [\n      'label' => 'Andmebaas puudub',\n      'help' => 'Haldusliidese kasutamiseks peab olemas seadistatud andmebaas. Enne jätkamist palun kontrolli andmebaasi seadistust.',\n      'cms_link' => 'Tagasi kodulehele',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Koodiblokki \\':name\\' ei leitud.',\n  ],\n  'account' => [\n    'sign_out' => 'Logi välja',\n    'login_placeholder' => 'logi sisse',\n    'password_placeholder' => 'parool',\n    'enter_email' => 'Sisesta oma e-post',\n    'email_placeholder' => 'e-post',\n    'apply' => 'Rakenda',\n    'cancel' => 'Loobu',\n    'delete' => 'Kustuta',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Töölaud',\n    'widget_inspector_title' => 'Vidina seaded',\n    'widget_inspector_description' => 'Seadista töölaua vidin',\n    'widget_columns_label' => 'Laius :columns',\n    'widget_columns_description' => 'Vidina laius ekraanil, vahemikus 1 kuni 10.',\n    'widget_columns_error' => 'Vidina laius peab olema täisarv vahemikus 1-10.',\n    'columns' => '{1} veerg|[2,Inf] veergu',\n    'widget_new_row_label' => 'Näita uuel real',\n    'widget_new_row_description' => 'Näita vidinat alati uuel real.',\n    'widget_title_label' => 'Vidina nimi',\n    'widget_title_error' => 'Vidina nimi on kohustuslik.',\n    'reset_layout_success' => 'Vidinate paigutus on lähtestatud',\n    'make_default_success' => 'Praegune paigutus on nüüd vaikeseade.',\n    'collapse_all' => 'Peida kõik',\n    'expand_all' => 'Näita kõiki',\n    'status' => [\n      'widget_title_default' => 'Süsteemi olek',\n      'update_available' => '{0} uuendust saadval!|{1} uuendus saadaval!|[2,Inf] uuendust saadaval!',\n      'updates_pending' => 'Ootel süsteemiuuendused',\n      'updates_nil' => 'Süsteem on ajakohane',\n      'updates_link' => 'Uuenda',\n      'warnings_pending' => 'Mõned küsimused nõuavad tähelepanu',\n      'warnings_nil' => 'Kõik on korras',\n      'warnings_link' => 'Vaata',\n      'core_build' => 'Süsteemi versioon',\n      'event_log' => 'Sündmuste logi',\n      'request_log' => 'Päringute logi',\n      'app_birthday' => 'Süsteem on töös alates',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Tere tulemast',\n      'welcome_back_name' => ':app. Tere tulemast tagasi, :name.',\n      'welcome_to_name' => ':app. Tere, :name.',\n      'first_sign_in' => 'See on esimene kord kui oled sisse loginud.',\n      'last_sign_in' => 'Sinu viimane sisselogimine oli',\n      'view_access_logs' => 'Vaata juurdepääsu logi',\n      'nice_message' => 'Kena päeva jätku!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administraator',\n    'list_title' => 'Halda administraatoreid',\n    'new' => 'Uus administraator',\n    'first_name' => 'Eesnimi',\n    'last_name' => 'Perenimi',\n    'full_name' => 'Täisnimi',\n    'email' => 'E-post',\n    'groups' => 'Grupid',\n    'groups_comment' => 'Määra millistesse gruppidesse kasutaja kuulub. Grupid määravad ära kasutaja juurdepääsu õigused, mida on võimalik eralid seadistada ka õiguste alt.',\n    'avatar' => 'Avatar',\n    'password' => 'Parool',\n    'password_confirmation' => 'Korda parooli',\n    'permissions' => 'Õigused',\n    'account' => 'Konto',\n    'superuser' => 'Ülemkasutaja',\n    'superuser_comment' => 'Ülemkasutajal on juurdepääs kogu süsteemile. Samuti on õigus luua uusi kasutajakontosid. ',\n    'send_invite' => 'Saada kutse e-postiga',\n    'send_invite_comment' => 'Saadat tervituskiri, mis sisaldab ka sisse logimiseks vajalikku kasutajanime ja parooli.',\n    'delete_confirm' => 'Kustuta administraator?',\n    'return' => 'Tagasin nimekirja',\n    'allow' => 'Luba',\n    'inherit' => 'Päritud',\n    'deny' => 'Keela',\n    'activated' => 'Aktiveeritud',\n    'last_login' => 'Viimane sisselogimine',\n    'created_at' => 'Loodud',\n    'updated_at' => 'Muudetud',\n    'group' => [\n      'name' => 'Grupp',\n      'name_comment' => 'Grupi nime kuvatakse administraatori loomise ja muutmise vormides olevas gruppide nimekirjas.',\n      'name_field' => 'Nimi',\n      'description_field' => 'Kirjeldus',\n      'is_new_user_default_field_label' => 'Vaikimisi grupp',\n      'is_new_user_default_field_comment' => 'Uued kasutajad lisatakse automaatselt sellesse gruppi',\n      'code_field' => 'Kood',\n      'code_comment' => 'Unikaalne kood, mida kasutatakse süsteemisiseselt.',\n      'list_title' => 'Halda gruppe',\n      'new' => 'Uus grupp',\n      'delete_confirm' => 'Kusuta see grupp?',\n      'return' => 'Tagasi nimekirja',\n      'users_count' => 'Kasutajad',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Puudub autoriseeritud kasutaja kellele seadeid laadida või salvestada.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Nimekiri',\n    'search_prompt' => 'Otsi...',\n    'no_records' => 'Siin vaates pole ühtegi kirjet.',\n    'missing_model' => 'Klassis :class ei ole nimekirjade jaoks defineeritud andmemudelit.',\n    'missing_column' => ':columns jaoks puuduvad veergude definitsioonid.',\n    'missing_columns' => 'Klassis :class kasutatud nimekirjal puudvad veergude definitsioonid.',\n    'missing_definition' => '\\':field\\' jaoks puudub nimekirja veeru definitsioon.',\n    'missing_parent_definition' => 'Nimekirjal puudub definitsioon \\':definition\\' kohta.',\n    'behavior_not_ready' => 'Nimekirjade funktsionaalsus pole initsialiseeritud, vaata üle, et makeLists() oleks kontrolleris välja kutsutud.',\n    'invalid_column_datetime' => 'Veeru väärtus \\':column\\' ei ole DateTime objekt. Võibolla on andmemudelis puudu $dates muutuja viide?',\n    'pagination' => 'Kuvatud kirjeid: :from-:to. Kokku: :total',\n    'first_page' => 'Esimene leht',\n    'last_page' => 'Viimane leht',\n    'prev_page' => 'Eelmine leht',\n    'next_page' => 'Järgmine leht',\n    'refresh' => 'Laadi uuesti',\n    'updating' => 'Uuendan...',\n    'loading' => 'Laen...',\n    'check' => 'Vali',\n    'delete_selected' => 'Kustuta valitud',\n    'delete_selected_empty' => 'Ühtegi kirjet ei valitud.',\n    'delete_selected_confirm' => 'Kustuta valitud kirjed?',\n    'delete_selected_success' => 'Valitud kirjed on kustutatud.',\n    'column_switch_true' => 'Jah',\n    'column_switch_false' => 'Ei',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Faili üleslaadimiseks kliki %s või lohista fail siia',\n  ],\n  'form' => [\n    'create_title' => 'Loomine: :name',\n    'update_title' => 'Muutmine: :name',\n    'preview_title' => 'Eelvaade: :name',\n    'reset_success' => 'Lähtestamine edukas',\n    'missing_id' => 'Vormis puudus kirje ID.',\n    'missing_model' => 'Klassis :class ei ole vormi jaoks defineeritud andmemudelit.',\n    'missing_definition' => 'Väli \\':field\\' ei ole vormis defineeritud.',\n    'action_confirm' => 'Oled sa kindel?',\n    'create' => 'Loo',\n    'create_and_close' => 'Loo ja sulge',\n    'creating' => 'Loon...',\n    'creating_name' => 'Loon objekti :name...',\n    'save' => 'Salvesta',\n    'save_and_close' => 'Salvesta ja sulge',\n    'saving' => 'Salvestan...',\n    'saving_name' => 'Salvestan objekti :name...',\n    'deleting' => 'Kustutan...',\n    'delete' => 'Kustuta',\n    'confirm_delete' => 'Kustuta kirje?',\n    'confirm_delete_multiple' => 'Kustuta valitud kirjed?',\n    'deleting_name' => 'Kustutan objekti :name...',\n    'reset_default' => 'Lähtesta vaikeväärtus',\n    'resetting' => 'Lähtestan',\n    'resetting_name' => 'Lähtestan objekti :name',\n    'undefined_tab' => 'Muu',\n    'field_off' => 'Ei',\n    'field_on' => 'Jah',\n    'add' => 'Lisa',\n    'apply' => 'Rakenda',\n    'cancel' => 'Loobu',\n    'close' => 'Sulge',\n    'confirm' => 'Kinnita',\n    'reload' => 'Lae uuesti',\n    'complete' => 'Lõpeta',\n    'ok' => 'OK',\n    'or' => 'või',\n    'confirm_tab_close' => 'Sulge vaheleht? Salvestamata muudatused lähevad kaduma.',\n    'behavior_not_ready' => 'Vormi funktsionaalsus pole initsialiseeritud, vaata üle, et initForm() oleks kontrolleris välja kutsutud.',\n    'preview_no_files_message' => 'Ühtegi faili pole üles laetud.',\n    'preview_no_media_message' => 'Ühtegi meediafaili pole valitud.',\n    'preview_no_record_message' => 'Ühtegi kirjet pole valitud.',\n    'select' => 'Vali',\n    'select_all' => 'Vali kõik',\n    'select_none' => 'vali ükski',\n    'insert_row' => 'Lisa rida',\n    'insert_row_below' => 'Lisa rida alla',\n    'delete_row' => 'Kustuta rida',\n    'concurrency_file_changed_title' => 'Faili on muudetud',\n    'concurrency_file_changed_description' => 'Teine kasutaja on muutnud sama faili, mida sina praegu muudad. Võid faili uuesti laadida ja sellega kaotada oma muudatused või kirjutada üle teise kasutaja muudatused.',\n    'return_to_list' => 'Tagasi nimekirja',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Leia kirje',\n    'cancel' => 'Loobu',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => '\\':config\\' jaoks puuduvad seoste definitsioonid.',\n    'missing_definition' => 'Välja \\':field\\' jaoks puudub seose definitsioon.',\n    'missing_model' => 'Klassis :class ei ole seoste jaoks defineeritud andmemudelit.',\n    'invalid_action_single' => 'Üks-ühele seosega ei saa seda tegevust sooritada.',\n    'invalid_action_multi' => 'Mitu-mitmele seosega ei saa seda tegevust sooritada.',\n    'help' => 'Lisamiseks kliki kirjel',\n    'add' => 'Lisa',\n    'link_selected' => 'Lisa valitud',\n    'cancel' => 'Loobu',\n    'close' => 'Sulge',\n    'create' => 'Loo',\n    'update' => 'Uuenda',\n    'preview' => 'Eelvaade',\n    'remove_name' => 'Eemalda :name',\n    'delete_name' => 'Kustuta :name',\n    'link' => 'Lisa seos',\n    'unlink_name' => 'Eemalda :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Muuda järjestust',\n    'no_records' => 'Ühtegi kirjet ei leitud.',\n  ],\n  'model' => [\n    'name' => 'Andmemudel',\n    'not_found' => 'Andmemudelit \\':class\\' ID-ga :id ei leitud',\n    'missing_id' => 'Andmemudeli ID väärtus puudub.',\n    'missing_relation' => 'Andmemudelil \\':class\\' puudub definitsioon seosele \\':relation\\'.',\n    'missing_method' => 'Andmemudelil \\':class\\' puudub funktsioon \\':method\\'.',\n    'invalid_class' => 'Klassis :class kasutatud andmemudel :model ei ole korrektne. See peab olema päritud klassist \\\\Model.',\n    'mass_assignment_failed' => 'Andmemudeli atribuudi \\':attribute\\' väärtuste määramine ebaõnnestus.',\n  ],\n  'warnings' => [\n    'tips' => 'Näpunäited süsteemi seadistamiseks',\n    'tips_description' => 'Süsteemi õigeks seadistamiseks on vaja meeles pidada paari olulist aspekti.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Minu seaded',\n    'menu_description' => 'Sinu haldusliidese kontoga seonduvad seadistused',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Aktsendi color',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'kõik',\n    'options_method_not_exists' => 'Andmemudelis :model peab olema defineeritud functioon :method(), mis tagastab valikud filtrile \\':filter\\'.',\n    'date_all' => 'kõik perioodid',\n  ],\n  'import_export' => [\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Upload and manage media contents - images, videos, sounds, documents',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'default_prompt' => 'Click the %s button to find a media item',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Upload',\n    'move' => 'Move',\n    'delete' => 'Delete',\n    'add_folder' => 'Add folder',\n    'search' => 'Search',\n    'display' => 'Display',\n    'filter_everything' => 'Everything',\n    'filter_images' => 'Images',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Documents',\n    'library' => 'Library',\n    'size' => 'Size',\n    'title' => 'Title',\n    'last_modified' => 'Last modified',\n    'public_url' => 'Download URL',\n    'click_here' => 'Click here',\n    'thumbnail_error' => 'Error generating thumbnail.',\n    'return_to_parent' => 'Return to the parent folder',\n    'return_to_parent_label' => 'Go up ..',\n    'nothing_selected' => 'Nothing is selected.',\n    'multiple_selected' => 'Multiple items selected.',\n    'uploading_file_num' => 'Uploading :number file(s)...',\n    'uploading_complete' => 'Upload complete',\n    'uploading_error' => 'Upload failed',\n    'type_blocked' => 'The file type used is blocked for security reasons.',\n    'order_by' => 'Order by',\n    'folder' => 'Folder',\n    'no_files_found' => 'No files found by your request.',\n    'delete_empty' => 'Please select items to delete.',\n    'delete_confirm' => 'Delete the selected item(s)?',\n    'error_renaming_file' => 'Error renaming the item.',\n    'new_folder_title' => 'New folder',\n    'folder_name' => 'Folder name',\n    'error_creating_folder' => 'Error creating folder',\n    'folder_or_file_exist' => 'A folder or file with the specified name already exists.',\n    'move_empty' => 'Please select items to move.',\n    'move_popup_title' => 'Move files or folders',\n    'move_destination' => 'Destination folder',\n    'please_select_move_dest' => 'Please select a destination folder.',\n    'move_dest_src_match' => 'Please select another destination folder.',\n    'empty_library' => 'It looks a bit empty here. Upload files or create folders to get started.',\n    'insert' => 'Insert',\n    'crop_and_insert' => 'Crop & Insert',\n    'select_single_image' => 'Please select a single image.',\n    'selection_not_image' => 'The selected item is not an image.',\n    'restore' => 'Undo all changes',\n    'resize' => 'Resize...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Fixed ratio',\n    'selection_mode_fixed_size' => 'Fixed size',\n    'height' => 'Height',\n    'width' => 'Width',\n    'selection_mode' => 'Selection mode',\n    'resize_image' => 'Resize image',\n    'image_size' => 'Image size:',\n    'selected_size' => 'Selected:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/et.json",
    "content": "{\n  \"Cancel\": \"Tühista\",\n  \"You are viewing as\": \"Te vaatate kui\",\n  \"Preview Role\": \"Rolli eelvaade\",\n  \"This lets you test the actions this role can perform.\": \"See võimaldab teil testida toiminguid, mida see roll teha saab.\",\n  \"View As Role\": \"Vaata rollina\",\n  \"Return to Role Settings\": \"Naaske rolliseadetesse\",\n  \"Password must have a minimum of length of :min characters\": \"Parooli pikkus peab olema vähemalt :min tähemärki\",\n  \"Password must contain at least one uppercase character.\": \"Parool peab sisaldama vähemalt ühte suurtähte.\",\n  \"Password must contain at least one lowercase character.\": \"Parool peab sisaldama vähemalt ühte väiketähte.\",\n  \"Password must contain at least one number.\": \"Parool peab sisaldama vähemalt üht numbrit.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Parool peab sisaldama vähemalt ühte mittetähtnumbrilist märki.\",\n  \"Welcome to your Administration Area, :name\": \"Tere tulemast oma haldusalasse :name\",\n  \"Duplicate\": \"Kopeeri\",\n  \"Expand\": \"Laienda\",\n  \"Collapse\": \"Ahenda\",\n  \"Move Up\": \"Üles liikuma\",\n  \"Move Down\": \"Liigu alla\",\n  \"Remove\": \"Eemalda\",\n  \"Manage Item\": \"Üksuse haldamine\",\n  \"Clear Filters\": \"Tühjenda filtrid\",\n  \"Filter Setup\": \"Filtri seadistamine\",\n  \"Apply\": \"Rakenda\",\n  \"Clear\": \"Tühista\",\n  \"is equal to\": \"on võrdne\",\n  \"is between\": \"on vahel\",\n  \"contains\": \"sisaldab\",\n  \"is before\": \"on enne\",\n  \"is after\": \"on pärast\",\n  \"is greater than\": \"on suurem kui\",\n  \"is less than\": \"on vähem kui\",\n  \"1. Export output format\": \"1. Ekspordi väljundi formaat\",\n  \"File Format\": \"Failiformaat\",\n  \"Delimiter Character\": \"Veergude eraldaja\",\n  \"Enclosure Character\": \"Veerud on ümbritsetud\",\n  \"Escape Character\": \"Paomärk\",\n  \"2. Select columns to export\": \"2. Vali veerud, mida eksportida\",\n  \"Columns\": \"Veerud\",\n  \"3. Set export options\": \"3. Määra ekspordi valikud\",\n  \"CSV Custom\": \"Kohandatud\",\n  \"1. Upload an Import File\": \"1. Lae Impordi fail üles\",\n  \"Import File\": \"Impordi fail\",\n  \"File Encoding\": \"Faili kodeering\",\n  \"First row contains column titles\": \"Esimene rida sisaldab veerupäiseid\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Märgi see kast kui üleslaetavas CSV failis on esimesel real veergude nimed.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"Faili veerud\",\n  \"Database fields\": \"Andmebaasi väljad\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Ekspordi progress\",\n  \"Processing\": \"Töötlen\",\n  \"Import progress\": \"Impordi progress\",\n  \"Import error\": \"Impordi viga\",\n  \"Export error\": \"Ekspordi viga\",\n  \"Column preview\": \"Veeru eelvaade\",\n  \"Column\": \"Veerg\",\n  \"Disable\": \"Keela\",\n  \"Enable\": \"Luba\",\n  \"Delete\": \"Kustuta\",\n  \"Export\": \"Ekspordi\",\n  \"Import\": \"Impordi\",\n  \"Select Action\": \"Valige Toiming\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Haldusalasse sisselogimiseks looge uus konto.\",\n  \"First Name\": \"Eesnimi\",\n  \"Last Name\": \"Perekonnanimi\",\n  \"Email Address\": \"E-posti aadress\",\n  \"Pick a Username\": \"Vali kasutajanimi\",\n  \"Enter New Password\": \"Sisestage uus parool\",\n  \"Confirm Password\": \"Kinnita salasõna\",\n  \"Create Account\": \"Loo konto\",\n  \"Getting Ready\": \"Valmis seadma\",\n  \"Just a few more minutes\": \"Veel paar minutit\",\n  \"Migrating Database\": \"Andmebaasi migreerimine\",\n  \"Access the Backend Panel\": \"Juurdepääs taustapaneelile\",\n  \"View Backend During Maintenance\": \"Vaata taustaprogrammi hoolduse ajal\",\n  \"Perform Software Updates\": \"Tehke tarkvaravärskendused\",\n  \"In Maintenance\": \"Hoolduses\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Sait on praegu hooldusrežiimis, palun vaadake hiljem uuesti.\",\n  \"Dashboard\": \"Töölaud\",\n  \"Administrators\": \"Administraatorid\",\n  \"Manage Admins\": \"Administraatorite haldamine\",\n  \"Create Admins\": \"Looge administraatorid\",\n  \"Moderate Admins\": \"Mõõdukad administraatorid\",\n  \"Manage account suspension and ban admin accounts\": \"Hallake konto peatamist ja blokeerige administraatorikontod\",\n  \"Role Permissions\": \"Halda rolle\",\n  \"Team Groups\": \"Halda gruppe\",\n  \"Manage Other Admins\": \"Teiste administraatorite haldamine\",\n  \"Allow users to reset passwords and update emails.\": \"Võimaldab paroole lähtestada ja e-kirju värskendada\",\n  \"Delete Admins\": \"Kustuta administraatorid\",\n  \"Preferences\": \"Eelistused\",\n  \"Settings\": \"Seaded\",\n  \"Background Color\": \"Taustavärv\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Lubage kasutajatel luua uusi rolle ja muuta või kustutada rolle, mis on madalamad kui nende kõrgeim roll.\",\n  \"Save Changes\": \"Salvesta muudatused\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"See logi sisaldab kõiki edukaid sisselogimisi haldusliidesesse. Andmeid hoitakse maksimaalselt :days päeva.\",\n  \"Access Log\": \"Juurdepääsu logi\",\n  \"View a list of successful back-end user sign ins.\": \"Näita kõiki õnnestunud sisselogimisi.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Kuupäev\",\n  \"Type\": \"Tüüp\",\n  \"IP address\": \"IP aaddress\",\n  \"Username\": \"Kasutajanimi\",\n  \"Login\": \"Logi sisse\",\n  \"First name\": \"Eesnimi\",\n  \"Last name\": \"Perenimi\",\n  \"Email\": \"E-post\",\n  \"A custom schema is used for this file format.\": \"Selle failivormingu jaoks kasutatakse kohandatud skeemi.\",\n  \"Select\": \"Valige\",\n  \"Replace\": \"Asenda\",\n  \"and\": \"ja\",\n  \"Go\": \"Mine\",\n  \"Go to page\": \"Mine lehele\",\n  \"Copy to Clipboard\": \"Kopeerida lõikelauale\",\n  \"Reveal Contents\": \"Avalda sisu\",\n  \"Selected Site\": \"Valitud sait\",\n  \"Use Emmet abbreviations\": \"Kasutage Emmeti lühendeid\",\n  \"A record does not exist for the selected site. Create one?\": \"Valitud saidi jaoks pole kirjet olemas. Kas luua?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Teie sisestatud üksikasjad ei vastanud meie andmetele. Palun kontrollige uuesti ja proovige uuesti.\",\n  \"Administration Area\": \"Haldusliides\",\n  \"Password Reset\": \"Parooli lähtestamine\",\n  \"Please enter a new password.\": \"Siseta uus parool\",\n  \"Password\": \"Parool\",\n  \"Password Restore\": \"Parooli taastamine\",\n  \"Please enter your login to restore the password.\": \"Sisesta oma kasutajanimi\",\n  \"A user could not be found with a login value of ':login'\": \"Sellist kasutajat ei ole süsteemis: ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Sinu e-posti aadressile saadeti kiri juhistega.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Sisestasid parooli lähtestamiseks vigased andmed. Palun proovi uuesti!\",\n  \"Unable to reset your password!\": \"Parooli lähtestamine ebaõnnestus!\",\n  \"Password has been reset. You may now sign in.\": \"Parool on lähtestatud, võid nüüd oma uue parooli sisse logida.\",\n  \"Restore\": \"Taasta\",\n  \"Reset\": \"Lähtesta\",\n  \"Stay logged in\": \"Jää sisselogituks\",\n  \"Forgot password?\": \"Unustasid parooli?\",\n  \"Global Editor Settings\": \"Globaalsed redaktori sätted\",\n  \"Manage Widgets\": \"Halda vidinaid\",\n  \"Add Widget\": \"Lisa vidin\",\n  \"Set the current layout as the default?\": \"Kas soovid määrata praeguse vidinate paigutuse vaikeseadeks?\",\n  \"Make Default\": \"Määra vaikeseadeks\",\n  \"Reset layout back to default?\": \"Lähtesta vidinate paigutus vaikeseadele?\",\n  \"Reset Layout\": \"Lähtesta paigutus\",\n  \"Widget\": \"Vidin\",\n  \"please select\": \"palun vali\",\n  \"Width\": \"Laius\",\n  \"full width\": \"täislaius\",\n  \"Create Widgets\": \"Loo vidinad\",\n  \"not equal to\": \"ei ole võrdne\",\n  \"Light Mode\": \"Valgusrežiim\",\n  \"Dark Mode\": \"Tume režiim\",\n  \"OS Default\": \"OS-i vaikeseade\",\n  \"Create a Custom Palette\": \"Loo kohandatud palett\",\n  \"Custom Palette\": \"Kohandatud palett\",\n  \"Primary Color\": \"Peamine värv\",\n  \"Secondary Color\": \"Teine color\",\n  \"Selection Color\": \"Värvivalik\",\n  \"Nav Text\": \"Navi tekst\",\n  \"Nav Background\": \"Navi taust\",\n  \"Sidebar Text\": \"Külgriba tekst\",\n  \"Sidebar Background\": \"Külgriba taust\",\n  \"Sidebar Active Text\": \"Külgriba aktiivne tekst\",\n  \"Sidebar Active Background\": \"Külgriba aktiivne taust\",\n  \"Sidebar Hover Background\": \"Külgriba hõljumise taust\",\n  \"Settings Text\": \"Seaded Tekst\",\n  \"Settings Background\": \"Seaded Taust\",\n  \"Settings Item Background\": \"Seaded Üksuse taust\",\n  \"Settings Active Color\": \"Seaded Aktiivne värv\",\n  \"Settings Active Background\": \"Seaded Aktiivne taust\",\n  \"Settings Hover Background\": \"Seaded Hõljutage taust\",\n  \"This name is shown in the title area of the back-end.\": \"Seda nime kuvatakse haldusliidese päises.\",\n  \"App Name\": \"Haldusliidese nimi\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Seda teksti kuvatakse haldusliidesesse sisselogimisel.\",\n  \"App Tagline\": \"Tervitustekst\",\n  \"Brand\": \"Bränd\",\n  \"Upload a custom logo to use in the back-end.\": \"Lae üles logo, mida kasutada haldusliideses.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Laadige üles kohandatud favicon, mida taustaprogrammis kasutada\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigatsiooni logo\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Asendab armatuurlaua lingi navigeerimisel kohandatud logoga.\",\n  \"Dashboard Icon\": \"Töölaua ikoon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Kasutage armatuurlaua ikooni jaoks kohandatud pilti (60 x 60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"See teade kuvatakse taustaprogrammi sisselogimiskuval.\",\n  \"Welcome Message\": \"Tervitussõnum\",\n  \"Login Page\": \"Sisselogimisleht\",\n  \"Background Type\": \"Tausta tüüp\",\n  \"Flat Color\": \"Tasane värv\",\n  \"Wallpaper\": \"Tapeet\",\n  \"Wallpaper Size\": \"Taustapildi suurus\",\n  \"Auto\": \"Automaatne\",\n  \"Cover\": \"Kaas\",\n  \"Background Wallpaper Image\": \"Taustapildi pilt\",\n  \"Image\": \"Pilt\",\n  \"Random Autumn Images\": \"Juhuslikud sügispildid\",\n  \"Custom Image\": \"Kohandatud pilt\",\n  \"Login Page Image\": \"Sisselogimislehe pilt\",\n  \"Colors\": \"Värvid\",\n  \"Color Mode\": \"Värvirežiim\",\n  \"Color Preset\": \"Värvi eelseadistus\",\n  \"Menu Style\": \"Menüü stiil\",\n  \"Navigation\": \"Navigatsioon\",\n  \"Custom Stylesheet\": \"Kohandatud CSS\",\n  \"Styles\": \"Stiilid\",\n  \"Inline\": \"Järjekorras\",\n  \"Text\": \"Tekst\",\n  \"Tiles\": \"Kastid\",\n  \"Collapsed\": \"Minimaalne\",\n  \"Icons\": \"Ikoonid\",\n  \"Left Side\": \"Vasak pool\",\n  \"Add New Item\": \"Lisa uus üksus\",\n  \"Link Color\": \"Lingi värv\",\n  \"Current Password\": \"Praegune salasõna\",\n  \"New Password\": \"uus salasõna\",\n  \"Current password does not match. Please try again!\": \"Praegune parool ei ühti. Palun proovi uuesti!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Teie parool on aegunud, turvakaalutlustel looge uus.\",\n  \"Region\": \"Regioon\",\n  \"Locale\": \"Keel\",\n  \"Select your desired locale for language use.\": \"Vali haldusliidese keel.\",\n  \"Timezone\": \"Ajatsoon\",\n  \"Adjust displayed dates to this timezone.\": \"Kuva kõiki kuupäevi selles ajatsoonis.\",\n  \"Code Editor\": \"Koodi redaktor\",\n  \"Color Scheme\": \"Värvivalik\",\n  \"Word Wrap\": \"Sõnamurdmine\",\n  \"Off\": \"Väljas\",\n  \"40 Characters\": \"40 tähemärki\",\n  \"80 Characters\": \"80 tähemärki\",\n  \"Fluid\": \"Voolav\",\n  \"Font Size\": \"Teksti suurus\",\n  \"Tab Size\": \"Taande suurus\",\n  \"Code Folding\": \"Koodi murdmine\",\n  \"Mark begin\": \"Murdmise algus\",\n  \"Mark begin and end\": \"Murdmise algus ja lõpp\",\n  \"Autocompletion\": \"Automaattäitmine\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Lihtne automaattäitmine (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Live automaattäitmine\",\n  \"Show gutter\": \"Näita jalust\",\n  \"Highlight active line\": \"Tõsta aktiivne rida esile\",\n  \"Automatically close tags\": \"Automaatselt sulge HTML tägid\",\n  \"Indent using tabs\": \"Ära kasuta taandel tühikuid\",\n  \"Show indent guides\": \"Näide taande juhtjooni\",\n  \"Show invisible characters\": \"Näita peidetu märke\",\n  \"Show print margin\": \"Näita printimise juhtjooni\",\n  \"Custom styles to include in the HTML editor.\": \"Kohandatud CSS reglid, mis lisada HTML redaktorile.\",\n  \"Markup Styles\": \"Markup stiilid\",\n  \"Paragraph Formats\": \"Lõigu vormingud\",\n  \"Markup Classes\": \"Markup klassid\",\n  \"Label\": \"Silt\",\n  \"Paragraph\": \"Lõik\",\n  \"Class Name\": \"Klassi nimi\",\n  \"Link\": \"Viide\",\n  \"Table\": \"Tabel\",\n  \"Table Cell\": \"Tabeli lahter\",\n  \"Allowed Tags\": \"Lubatud HTML tägid\",\n  \"The list of allowed tags.\": \"Nimekiri lubatud HTML tägidest.\",\n  \"Markup Tags\": \"Markup tägid\",\n  \"Allowed Empty Tags\": \"Luba tühjad HTML tägid\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Nimekiri HTML tägidest, mida automaatselt ei eemaldata kui neis pole sisu.\",\n  \"Do Not Wrap Tags\": \"HTML blokktägid\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Nimekiri HTML tägidest, mida ei ole automaatselt vaja panna blokktägide sisse.\",\n  \"Remove Tags\": \"Eemalda HTML tägid\",\n  \"The list of tags that are removed together with their content.\": \"Nimekiri HTML tägidest, mis eemaldatakse automaatselt koos sisuga.\",\n  \"Line Breaker Tags\": \"Line Breaker Sildid\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Nende siltide loend, mida kasutatakse reamurdja elemendi paigutamiseks vahele.\",\n  \"Toolbar Buttons\": \"Tööriistariba nupud\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Vaikimisi Rich Editoris kuvatavad tööriistariba nupud.\",\n  \"Insert a preset toolbar button configuration\": \"Sisestage tööriistariba nupu eelseadistatud konfiguratsioon\",\n  \"Allowed Attributes\": \"Lubatud atribuudid\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Lubatud HTML-i atribuutide loend, lisaks tavalistele piirangutele.\",\n  \"Enable code snippets (Tab)\": \"Kasuta eeldefineeritud koodijuppe (Tab)\",\n  \"Title\": \"Nimi\",\n  \"Description\": \"Kirjeldus\",\n  \"Attachment\": \"Manus\",\n  \"Attachment URL\": \"Manuse URL\",\n  \"Add a title and description for this attachment.\": \"Manuse nimi ja kirjeldus.\",\n  \"Upload\": \"Lae üles\",\n  \"Are you sure?\": \"Oled sa kindel?\",\n  \"Delete Selected\": \"Kustuta valitud\",\n  \"Upload Error\": \"Üleslaadimisel tekkis viga\",\n  \"Remove File\": \"Eemalda fail\",\n  \"Show Light Switch\": \"Näita valguslülitit\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Võimaldab kasutajatel värvirežiimi navigeerimisest ümber lülitada.\",\n  \"Create :name\": \"Loo :name\",\n  \"Update :name\": \"Uuenda objekti :name\",\n  \"Add :name\": \"Lisa :name\",\n  \"Link :name\": \"Lisa :name\",\n  \"Unlink\": \"Eemalda\",\n  \"Preview :name\": \"Objekti :name eelvaade\",\n  \"Link a New :name\": \"Lisa uus :name\",\n  \"Add a New :name\": \"Lisa uus :name\",\n  \"Related :name Data\": \"Seotud objekti andmed: :name\",\n  \":name Created\": \":name loodud\",\n  \":name Updated\": \":name muudetud\",\n  \":name Deleted\": \":name kustutatud\",\n  \":name Added\": \":name Added\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"Kirjet ID-ga :id ei leitud.\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Kodulehe eelvaade\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Muuda haldusliidese kasutajaid, õiguseid ja gruppe.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Isikupärasta haldusliidest\",\n  \"Customize the administration area such as name, colors and logo.\": \"Muuda haldusliidese välimust (nt nimi, värvid, logo)\",\n  \"Editor Settings\": \"Tekstiredaktori seadistused\",\n  \"Change the global editor preferences.\": \"Isikupärast kõikjal kasutatavaid redaktori seadeid, nagu teksti suurus ja värvivalik.\",\n  \"My Account\": \"Minu konto\",\n  \"Update your account details such as name, email address and password.\": \"Muuda oma konto andmeid nagu nimi, e-posti aadress ja parool.\",\n  \"Backend Preferences\": \"Haldusliidese seaded\",\n  \"Manage your account preferences such as desired language.\": \"Muuda oma haldusliidese seadeid nagu keel jm.\",\n  \"security login\": \"parool konto turva sala\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create & Close\": \"Loo ja sulge\",\n  \"Creating :name...\": \"Loomine :name...\",\n  \"Save & Close\": \"Salvesta ja sulge\",\n  \"Saving :name...\": \"Salvestan :name...\",\n  \"Delete this record?\": \"Kustuta see kirje?\",\n  \"Deleting :name...\": \"Kustutamine :name...\",\n  \"Loading...\": \"Laadimine...\",\n  \"Complete\": \"Complete\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Unknown column\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Ignore this column\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Created\",\n  \"Updated\": \"Updated\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Warnings\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Skipped Rows\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"File not found\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP laiendus :name ei ole paigaldatud. Süsteemi toimiseks on vajalik selle paigaldamine.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Plugin :name on vajalik süsteemi toimimiseks, kuid seda pole paigaldatud. Palun paigalda see plugin.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"PHP-l ei ole õigust kirjutada katallogi :name või selle alamkataloogidesse. Palun paranda kataloogide juurdepääsuõigused serveris.\"\n}"
  },
  {
    "path": "modules/backend/lang/fa/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'نوع فیلد :type نا معتبر می باشد.',\n    'options_method_invalid_model' => 'خصیصه \\':field\\' به مدل معتبری اشاره نمی کند. گزینه مورد نظر را در مدل :model ایجاد نمایید.',\n    'options_method_not_exists' => 'کلاس مدل :model باید شامل متد :method() باشد و گزینه های مورد نیاز \":field\" را بازنشاند.',\n  ],\n  'widget' => [\n    'not_registered' => 'کلاس مربوط به ابزارک \\':name\\' به سیستم معرفی نشده است',\n    'not_bound' => 'ابزارکی تعریف شده در کلاس با نام \\':name\\' به هیچ کنترلری ارتباط داده نشده است',\n  ],\n  'page' => [\n    'untitled' => 'بدون عنوان',\n    'access_denied' => [\n      'label' => 'شما مجوز دسترسی ندارید',\n      'help' => 'شما مجوز لازم براس دسترسی به این صفحه را ندارید.',\n      'cms_link' => 'بازگشت به مدیریت',\n    ],\n    'no_database' => [\n      'label' => 'پایگاه داده یافت نشد',\n      'help' => 'جهت استفاده از بخش مدیریت به یک پایگاه داده نیاز دارید. تنظیمات پایگاه داده را بررسی نموده و از نصب جدولها در آن اطمینان حاصل کنید.',\n      'cms_link' => 'Return to the homepage',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'بخشی با نام \\':name\\' یافت نشد.',\n  ],\n  'account' => [\n    'signed_in_as' => 'وارد شده به عنوان :full_name',\n    'sign_out' => 'خروج',\n    'login_placeholder' => 'ورود',\n    'password_placeholder' => 'کلمه عبور',\n    'enter_email' => 'پست الکترونیکی خود را وارد نمایید',\n    'email_placeholder' => 'پست الکترونیکی',\n    'apply' => 'اعمال کردن',\n    'cancel' => 'انصراف',\n    'delete' => 'حذف',\n    'ok' => 'تایید',\n  ],\n  'dashboard' => [\n    'menu_label' => 'میز کار',\n    'widget_inspector_title' => 'تنظیمات ابزارک',\n    'widget_inspector_description' => 'پیکر بندی ابزارک گزارشگیری',\n    'widget_columns_label' => 'عرض :columns',\n    'widget_columns_description' => 'عرض ابزارک باید عددی مابین 1 تا 10 باشد.',\n    'widget_columns_error' => 'لطفا عرض ابزارک را عددی مابین 1 تا 10 وارد نمایید.',\n    'columns' => '{1} ستون|[2,Inf] ستون ها',\n    'widget_new_row_label' => 'تحمیل سطر جدید',\n    'widget_new_row_description' => 'افزودن ابزارک در سطر جدید.',\n    'widget_title_label' => 'عنوان ابزارک',\n    'widget_title_error' => 'گزینه \"عنوان ابزارک\" حتما باید وارد شود.',\n    'reset_layout_success' => 'تنطیم مجدد طرح بندی انجام شد.',\n    'make_default_success' => 'طرح بندی کنونی به عنوان پیشفرض تایین شد.',\n    'collapse_all' => 'بستن همه',\n    'expand_all' => 'باز کردن همه',\n    'status' => [\n      'widget_title_default' => 'وضعیت سیستم',\n      'update_available' => '{0} به روز رسانی موجود است!|{1} به روز رسانی موجود است!|[2,Inf] به روز رسانی موجود است!',\n      'updates_pending' => 'به روزرسانی جدید موجود است.',\n      'updates_nil' => 'شما از آخرین نسخه استفاده می کنید.',\n      'updates_link' => 'به روز رسانی',\n      'warnings_pending' => 'مشکلی وجود دارد که نیاز به بررسی شما دارد.',\n      'warnings_nil' => 'مشکلی جهت نمایش وجود ندارد',\n      'warnings_link' => 'نمایش',\n      'core_build' => 'ویرایش سیستم',\n      'event_log' => 'گزارش رویداد ها',\n      'request_log' => 'گزارش درخواست ها',\n      'app_birthday' => 'نصب شده از',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'خوش آمدید',\n      'welcome_back_name' => ':name به :app خوش آمدید.',\n      'welcome_to_name' => ':name به :app خوش آمدید.',\n      'first_sign_in' => 'اولین ورود شما  به سیستم می باشد',\n      'last_sign_in' => 'آخرین ورود شما',\n      'view_access_logs' => 'نمایش گزارش دسترسی ها',\n      'nice_message' => 'روز خوبی داشته باشید',\n    ],\n  ],\n  'user' => [\n    'name' => 'مدیریت',\n    'list_title' => 'مدیریت مدیران',\n    'new' => 'مدیر جدید',\n    'first_name' => 'نام',\n    'last_name' => 'نام خانوادگی',\n    'full_name' => 'نام کامل',\n    'email' => 'ایمیل',\n    'role_field' => 'نقش',\n    'role_comment' => 'نقش ها، مجوز های کاربران را تعیین می کنند که توسط سطوح کاربرای در سربرگ مجوز ها می توانند مورد ارجحیت قرار گیرند و تغییر کنند.',\n    'groups' => 'گروه ها',\n    'groups_comment' => 'اختصاص به گروهی که این شخص به آن تعلق دارد.',\n    'avatar' => 'نمایه',\n    'password' => 'کلمه عبور',\n    'password_confirmation' => 'تکرار کلمه عبور',\n    'permissions' => 'مجوز های دسترسی',\n    'account' => 'حساب کاربری',\n    'superuser' => 'کاربر ممتاز',\n    'superuser_comment' => 'اگر میخواهید این شخص به تمام قسمت ها دسترسی داشته باشد این گزینه را فعال نمایید.',\n    'send_invite' => 'دعوت نامه توسط پست الکترونیکی ارسال شود',\n    'send_invite_comment' => 'جهت ارسال دعوت نامه به پست الکترونیکی این شخص این گزینه را فعال نمایید',\n    'delete_confirm' => 'آیا از حذف این مدیر اطمینان دارید؟',\n    'return' => 'بازگشت به لیست مدیران',\n    'allow' => 'اجازه دسترسی',\n    'inherit' => 'ارث بری',\n    'deny' => 'عدم دسترسی',\n    'activated' => 'فعال شده',\n    'last_login' => 'آخرین ورود',\n    'created_at' => 'ایجاد شده در',\n    'updated_at' => 'ویرایش شده در',\n    'group' => [\n      'name' => 'گروه',\n      'name_field' => 'نام',\n      'name_comment' => 'نام در لیست گروه های در فرم مدیریت در هنگام ویرایش یا ایجاد به  نمایش  در می آید.',\n      'description_field' => 'توضیحات',\n      'is_new_user_default_field_label' => 'گروه پیشفرض',\n      'is_new_user_default_field_comment' => 'بطور پیشفرض مدیران جدید را در این گروه ایجاد کن.',\n      'code_field' => 'کد',\n      'code_comment' => 'کد یکتایی را جهت دسترسی به آن توسط API وارد نمایید.',\n      'list_title' => 'مدیریت گروه ها',\n      'new' => 'گروه مدیریت جدید',\n      'delete_confirm' => 'آیا از حذف این گروه از مدیران اطمینان دارید?',\n      'return' => 'بازگشت به لیست گروه ها',\n      'users_count' => 'کاربران',\n    ],\n    'role' => [\n      'name' => 'نقش',\n      'name_field' => 'نام',\n      'name_comment' => 'نام در لیست نقشها در بخش مدیریت به نمایش در می آید.',\n      'description_field' => 'توضیحات',\n      'code_field' => 'کد',\n      'code_comment' => 'کد منحصربفرد نقش را جهت دسترسی به آن توسط رابط برنامه نویسی وارد نمایید.',\n      'list_title' => 'مدیریت نقش ها',\n      'new' => 'نقش جدید',\n      'delete_confirm' => 'آیا از حذف این نقش اطمینان دارید؟',\n      'return' => 'بازگشت به لیست نقش ها',\n      'users_count' => 'کاربران',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'هیچ کاربر ثبت شده ای جهت بارگذاری یا ذخیره تنظیمات وجود ندارد.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'لیست',\n    'search_prompt' => 'جستجو...',\n    'no_records' => 'چیزی یافت نشد.',\n    'missing_model' => 'هیچ مدلی برای لیست استفاده شده در کلاس :class تعریف نشده است.',\n    'missing_column' => 'ستونی برای :columns تعریف نشده است.',\n    'missing_columns' => 'ستونی برای لیست عریف شده در :class موجود نیست.',\n    'missing_definition' => 'در لیست تعریف شده ستونی برای \\':field\\' موجود نیست.',\n    'missing_parent_definition' => 'کنترل کننده لیست شامل تعریف \\':definition\\' نمی باشد.',\n    'behavior_not_ready' => 'لسیت مقدار دهی اولیه شده است ، لطفا بررسی نمایید که متد makeLists() در کنترلر خود فراخوانی کرده باشید.',\n    'invalid_column_datetime' => 'ستون \\':column\\' از نوع شی تاریخ نمی باشد ، لطفا بررسی نمایید که این ستون در مدل از نوع تاریخ تعریف شده باشد.',\n    'pagination' => 'نمایش :from تا :to از :total مورد',\n    'first_page' => 'اولین صفحه',\n    'last_page' => 'آخرین صفحه',\n    'prev_page' => 'صفحه قبل',\n    'next_page' => 'صفحه بعد',\n    'refresh' => 'بازنشانی',\n    'updating' => 'درحال به روز رسانی...',\n    'loading' => 'در حال بارگذاری...',\n    'check' => 'بررسی',\n    'delete_selected' => 'حذف انتخاب شده ها',\n    'delete_selected_empty' => 'مورد جهت حذف انتخاب نشده است.',\n    'delete_selected_confirm' => 'آیا میخواهید موارد انتخابی را حذف کنید؟',\n    'delete_selected_success' => 'حدف موارد انخابی انجام شد.',\n    'column_switch_true' => 'بله',\n    'column_switch_false' => 'خیر',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'فایل را جهت ارسال به این نقطه بکشید و یا %s را کلیک کنید',\n  ],\n  'form' => [\n    'create_title' => ':name جدید',\n    'update_title' => 'ویرایش :name',\n    'preview_title' => 'پیش نمایش :name',\n    'reset_success' => 'بازنشانی موفق بود',\n    'missing_id' => 'رکورد مشخصه (ID) برای فرم انتخاب نشده است.',\n    'missing_model' => 'مدلی برای فرن تعریف شده در کلاس :class مشخص نشده است.',\n    'missing_definition' => 'فرم مورد نظر شامل فیلدی برای \\':field\\' نمی باشد.',\n    'action_confirm' => 'آیا اطمینان دارید؟',\n    'create' => 'ایجاد',\n    'create_and_close' => 'ایجاد و خروج',\n    'creating' => 'در حال ایجاد...',\n    'creating_name' => 'درحال ایجاد :name...',\n    'save' => 'ذخیره',\n    'save_and_close' => 'ذخیره و خروج',\n    'saving' => 'در حال ذخیره...',\n    'saving_name' => 'درحال ذخیره :name...',\n    'delete' => 'حذف',\n    'deleting' => 'در حال حذف...',\n    'confirm_delete' => 'آیا از حذف این مورد اطمینان دارید؟',\n    'confirm_delete_multiple' => 'آیا از حذف موارد انتخاب شده اطمینان دارید؟',\n    'deleting_name' => 'درحال حذف :name...',\n    'reset_default' => 'بازگشت به پیش فرض',\n    'resetting' => 'بازنشانی',\n    'resetting_name' => 'بازنشانی name:',\n    'undefined_tab' => 'متفرقه',\n    'field_off' => 'بله',\n    'field_on' => 'خیر',\n    'add' => 'افزودن',\n    'apply' => 'اعمال',\n    'cancel' => 'انصراف',\n    'close' => 'خروج',\n    'confirm' => 'تایید',\n    'reload' => 'بارگذاری مجدد',\n    'complete' => 'تکمیل',\n    'ok' => 'تایید',\n    'or' => 'یا',\n    'confirm_tab_close' => 'در صورت بستن این پنجره موارد ذخیره نشده از بین خواهند رفت. آیا از حذف شدن این پنجره اطمینان دارید؟',\n    'behavior_not_ready' => 'فرم مور نظر مقدار دهی اولیه نشده است ، بررسی کنید که متد initForm() در کنترلر فرتخوانی شده باشد.',\n    'preview_no_files_message' => 'فایلی جهت ارسال وجود ندارد',\n    'preview_no_media_message' => 'رسانه ای انتخاب نشده است.',\n    'preview_no_record_message' => 'موردی انتخاب نشده است.',\n    'select' => 'انتخاب',\n    'select_all' => 'انتخاب همه',\n    'select_none' => 'هیچ کدام را انتخاب نکنید',\n    'insert_row' => 'افزودن سطر',\n    'insert_row_below' => 'افزودن سطر بعد از',\n    'delete_row' => 'حذف سطر',\n    'concurrency_file_changed_title' => 'فایل تغییر کرد',\n    'concurrency_file_changed_description' => 'فایلی که شما ویرایش کردید توسط کاربر دیگری تغییر یافته و ذخیره شده است. شما میتوانید فایل را مجددا بارگذاری نمایید و تغییراتی که اعمال کرده اید را از دست بدهید و یا تغییرات اعمال شده توسط آن کاربر را بین برده و فایل را بازنویسی نمایید.',\n    'return_to_list' => 'بازگشت به لیست',\n  ],\n  'recordfinder' => [\n    'find_record' => 'انتخاب مورد',\n    'cancel' => 'انصراف',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'کنترل کننده ارتباطات پایگاه داده شامل تعریفی برای \\':config\\' نمی باشد.',\n    'missing_definition' => 'در ارتباط مورد نظر فیلد \\':field\\' وجود ندارد.',\n    'missing_model' => 'مدلی برای ارتباط موجود در :class وجود ندارد.',\n    'invalid_action_single' => 'این عمل در ارتباط یک تعرفه نمبتواند اعمال شود.',\n    'invalid_action_multi' => 'این عمل در ارتباط چند طرفه نمیتواند اعمال شود.',\n    'help' => 'بر روی یک گزینه کلیک کنید تا افزوده شود',\n    'add' => 'افزودن',\n    'link_selected' => 'لینک انتخاب شده ها',\n    'cancel' => 'انصراف',\n    'close' => 'بستن',\n    'create' => 'ایجاد',\n    'update' => 'بروز رسانی',\n    'preview' => 'پیش نمایش',\n    'remove_name' => 'حذف :name',\n    'delete_name' => 'حذف :name',\n    'link' => 'لینک',\n    'unlink_name' => 'حذف لینک :name',\n  ],\n  'reorder' => [\n    'default_title' => 'مرتب سازی موارد',\n    'no_records' => 'موردی جهت مرتب سازی یافت نشد.',\n  ],\n  'model' => [\n    'name' => 'مدل',\n    'not_found' => 'مدل \\':class\\' با مشخصه ی :id یافت نشد',\n    'missing_id' => 'مشخصه ای برای مودل مورد نظر یافت نشد.',\n    'missing_relation' => 'مدل \\':class\\' شامل تعریفی از \\':relation\\'.',\n    'missing_method' => 'مدل \\':class\\' متدی با نام \\':method\\' ندارد.',\n    'invalid_class' => 'مدل :model استفاده شده در :class معتبر نمی باشد، این مدل باید از کلاس \\\\Model ارث برده باشد.',\n    'mass_assignment_failed' => 'عدم توانایی در مقدار دهی  \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'راهنمایی پیکر بندی سیستم',\n    'tips_description' => 'مشکلاتی در پیکربندی سیستم وجود دارد، شما باید تنظیمات زیر را بررسی نمایید.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'تنظیمات من',\n    'menu_description' => 'تنظیمات مربوط به حساب کاربری شما',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accent color',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'همه',\n    'options_method_not_exists' => 'مدل :model باید شامل متدی به نام :method() باشد که گزینه های \\':filter\\' را بازگرداند.',\n    'date_all' => 'تمام دوره های زمانی',\n    'number_all' => 'همه شماره ها',\n  ],\n  'import_export' => [\n    'upload_csv_file' => '1. ارسال فایل CSV.',\n    'import_file' => 'درورن ریزی فایل',\n    'first_row_contains_titles' => 'سطر اول شامل عنوان ستون ها می باشد',\n    'first_row_contains_titles_desc' => 'اگر سطر اول فایل CSV حاوی عنوان ستون ها می باشد این گزینه را انتخاب نمایید.',\n    'match_columns' => '2. مطابقت  سازی ستون های فایل با فیلد های پایگاه داده',\n    'file_columns' => 'ستون های فایل',\n    'database_fields' => 'فیلد های پایگاه داده',\n    'set_import_options' => '3. تنظیم گزینه های درون ریزی',\n    'export_output_format' => '1. قالب خروجی برون ریزی',\n    'file_format' => 'نوع فایل',\n    'standard_format' => 'قالب استاندارد',\n    'custom_format' => 'قالب سفارشی',\n    'delimiter_char' => 'کاراکار جدا کننده',\n    'enclosure_char' => 'کاراکتر Enclosure',\n    'escape_char' => 'کاراکتر Escape',\n    'select_columns' => '2. انتخاب ستون ها جهت برون ریزی',\n    'columns' => 'ستون ها',\n    'set_export_options' => '3. تنظیم گزینه های برون ریزی',\n    'import_progress' => 'پردازش درون ریزی',\n    'processing' => 'در حال پردازش',\n    'import_error' => 'خطا در درون ریزی',\n    'export_progress' => 'پردازش برون ریزی',\n    'export_error' => 'خطا در ایجاد خروجی',\n    'encoding_format' => 'کدینگ فایل',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'مدیریت چند رسانه ها',\n  ],\n  'mediafinder' => [\n    'label' => 'جستجوگر رسانه',\n    'default_prompt' => '%s را جهت انتخاب فایل چند رسانه ای انتخاب کنید',\n  ],\n  'media' => [\n    'menu_label' => 'چند رسانه ای',\n    'upload' => 'ارسال',\n    'move' => 'جابجایی',\n    'delete' => 'حذف',\n    'add_folder' => 'پوشه جدید',\n    'search' => 'جستجو',\n    'display' => 'نمایش',\n    'filter_everything' => 'همه',\n    'filter_images' => 'تصاویر',\n    'filter_video' => 'ویدیو',\n    'filter_audio' => 'صوتی',\n    'filter_documents' => 'اسناد',\n    'library' => 'کتاب خانه',\n    'size' => 'اندازه',\n    'title' => 'عنوان',\n    'last_modified' => 'آخرین تغییرات',\n    'public_url' => 'نشانی عمومی',\n    'click_here' => 'اینجا کلیک کنید',\n    'thumbnail_error' => 'خطا در ایجاد تصویر بند انگشتی',\n    'return_to_parent' => 'بازگشت به پوشه قبل',\n    'return_to_parent_label' => 'بازگشت ..',\n    'nothing_selected' => 'چیزی انتخاب نشده است.',\n    'multiple_selected' => 'چند مورد انتخاب شده است.',\n    'uploading_file_num' => 'ارسال :number فایل(ها)...',\n    'uploading_complete' => 'ارسال انجام شد',\n    'uploading_error' => 'خطا در ارسال',\n    'type_blocked' => 'نوع فایل استفاده شده به دلیل مسایل امنیتی مجاز نمی باشد..',\n    'order_by' => 'مرتب سازی با',\n    'direction' => 'جهت',\n    'direction_asc' => 'صعودی',\n    'direction_desc' => 'نزولی',\n    'folder' => 'پوشه',\n    'no_files_found' => 'فایلی با درخواست شما یافت نشد',\n    'delete_empty' => 'لطفا موارد را جهت حذف انتخاب نمایید',\n    'delete_confirm' => 'آیا از حذف مورد(های) انتخاب شده اطمینان دارید؟',\n    'error_renaming_file' => 'خطا در تغییر نام.',\n    'new_folder_title' => 'پوشه ی جدید',\n    'folder_name' => 'نام پوشه',\n    'error_creating_folder' => 'خطا در ایجاد پوشه',\n    'folder_or_file_exist' => 'پوشه یا فایلی با نام وارد شده از قبل وجود دارد.',\n    'move_empty' => 'لطفا موارد را جهت جابجایی انتخاب نمایید',\n    'move_popup_title' => 'جابحایی فایل یا پوشه ها',\n    'move_destination' => 'پوشه مقصد',\n    'please_select_move_dest' => 'لطفا پوشه مقصد را انتخاب نمائید.',\n    'move_dest_src_match' => 'لطفا پوشه دیگری را انتخاب نمایید.',\n    'empty_library' => 'اینجا کمی خالی به نظر می رسد. برای شروع فایل هایتان را بارگذاری کنید یا پوشه ای بسازید.',\n    'insert' => 'قرار دادن',\n    'crop_and_insert' => 'بریدن و افزودن',\n    'select_single_image' => 'لطفا یک تصویر انتخاب نمایید',\n    'selection_not_image' => 'مورد انتخاب شده تصویر نمی باشد',\n    'restore' => 'حذف همه تغییرات',\n    'resize' => 'تغییر اندازه...',\n    'selection_mode_normal' => 'معمولی',\n    'selection_mode_fixed_ratio' => 'نسبت ثابت',\n    'selection_mode_fixed_size' => 'اندازه ثابت',\n    'height' => 'ارتفاع',\n    'width' => 'عرض',\n    'selection_mode' => 'حالت انتخابی',\n    'resize_image' => 'تغییر اندازه تصویر',\n    'image_size' => 'اندازه تصویر:',\n    'selected_size' => 'انتخاب شده:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/fa.json",
    "content": "{\n  \"Cancel\": \"لغو کنید\",\n  \"You are viewing as\": \"شما به عنوان مشاهده می کنید\",\n  \"Preview Role\": \"نقش پیش نمایش\",\n  \"This lets you test the actions this role can perform.\": \"این به شما امکان می دهد اقداماتی را که این نقش می تواند انجام دهد را آزمایش کنید.\",\n  \"View As Role\": \"مشاهده به عنوان نقش\",\n  \"Return to Role Settings\": \"به تنظیمات نقش بازگردید\",\n  \"Password must have a minimum of length of :min characters\": \"رمز عبور باید حداقل دارای طول :min کاراکتر باشد\",\n  \"Password must contain at least one uppercase character.\": \"رمز عبور باید حداقل یک کاراکتر بزرگ داشته باشد.\",\n  \"Password must contain at least one lowercase character.\": \"رمز عبور باید حداقل یک نویسه کوچک داشته باشد.\",\n  \"Password must contain at least one number.\": \"رمز عبور باید حداقل یک عدد داشته باشد.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"رمز عبور باید حداقل یک نویسه غیر الفبایی داشته باشد.\",\n  \"Welcome to your Administration Area, :name\": \"به منطقه مدیریت خود، :name خوش آمدید\",\n  \"Duplicate\": \"تکراری\",\n  \"Expand\": \"بسط دادن\",\n  \"Collapse\": \"سقوط - فروپاشی\",\n  \"Move Up\": \"حرکت به بالا\",\n  \"Move Down\": \"حرکت به پایین\",\n  \"Remove\": \"حذف\",\n  \"Manage Item\": \"مدیریت آیتم\",\n  \"Clear Filters\": \"پاک کردن فیلترها\",\n  \"Filter Setup\": \"راه اندازی فیلتر\",\n  \"Apply\": \"درخواست دادن\",\n  \"Clear\": \"پاک کردن\",\n  \"is equal to\": \"برابر است با\",\n  \"is between\": \"بین است\",\n  \"contains\": \"شامل\",\n  \"is before\": \"قبل است\",\n  \"is after\": \"پس از آن است\",\n  \"is greater than\": \"بزرگتر است از\",\n  \"is less than\": \"کمتر است از\",\n  \"1. Export output format\": \"1. قالب خروجی برون ریزی\",\n  \"File Format\": \"نوع فایل\",\n  \"Delimiter Character\": \"کاراکار جدا کننده\",\n  \"Enclosure Character\": \"کاراکتر Enclosure\",\n  \"Escape Character\": \"کاراکتر Escape\",\n  \"2. Select columns to export\": \"2. انتخاب ستون ها جهت برون ریزی\",\n  \"Columns\": \"ستون ها\",\n  \"3. Set export options\": \"3. تنظیم گزینه های برون ریزی\",\n  \"CSV Custom\": \"قالب سفارشی\",\n  \"1. Upload an Import File\": \"1. ارسال فایل CSV.\",\n  \"Import File\": \"درورن ریزی فایل\",\n  \"File Encoding\": \"کدینگ فایل\",\n  \"First row contains column titles\": \"سطر اول شامل عنوان ستون ها می باشد\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"اگر سطر اول فایل CSV حاوی عنوان ستون ها می باشد این گزینه را انتخاب نمایید.\",\n  \"2. Match the File Columns to Database Fields\": \"2. مطابقت سازی ستون های فایل با فیلد های پایگاه داده\",\n  \"File columns\": \"ستون های فایل\",\n  \"Database fields\": \"فیلد های پایگاه داده\",\n  \"3. Set Import Options\": \"3. تنظیم گزینه های درون ریزی\",\n  \"Export progress\": \"پردازش برون ریزی\",\n  \"Processing\": \"در حال پردازش\",\n  \"Import progress\": \"پردازش درون ریزی\",\n  \"Import error\": \"خطا در درون ریزی\",\n  \"Export error\": \"خطا در ایجاد خروجی\",\n  \"Column preview\": \"پیش نمایش ستون\",\n  \"Column\": \"ستون\",\n  \"Disable\": \"غیر فعال کردن\",\n  \"Enable\": \"فعال کردن\",\n  \"Delete\": \"حذف\",\n  \"Export\": \"صادرات\",\n  \"Import\": \"وارد كردن\",\n  \"Select Action\": \"Action را انتخاب کنید\",\n  \"Please create a new account for logging in to the Administration Area.\": \"لطفا یک حساب کاربری جدید برای ورود به بخش مدیریت ایجاد کنید.\",\n  \"First Name\": \"نام کوچک\",\n  \"Last Name\": \"نام خانوادگی\",\n  \"Email Address\": \"آدرس ایمیل\",\n  \"Pick a Username\": \"یک نام کاربری انتخاب کن\",\n  \"Enter New Password\": \"رمز عبور جدید را وارد کنید\",\n  \"Confirm Password\": \"رمز عبور را تایید کنید\",\n  \"Create Account\": \"ایجاد حساب کاربری\",\n  \"Getting Ready\": \"آماده شدن\",\n  \"Just a few more minutes\": \"فقط چند دقیقه دیگر\",\n  \"Migrating Database\": \"پایگاه داده مهاجرت\",\n  \"Access the Backend Panel\": \"به پنل Backend دسترسی پیدا کنید\",\n  \"View Backend During Maintenance\": \"مشاهده Backend در حین تعمیر و نگهداری\",\n  \"Perform Software Updates\": \"انجام به روز رسانی نرم افزار\",\n  \"In Maintenance\": \"در تعمیر و نگهداری\",\n  \"The site is currently in maintenance mode, please check back later.\": \"سایت در حال حاضر در حالت تعمیر و نگهداری است، لطفاً بعداً دوباره بررسی کنید.\",\n  \"Dashboard\": \"داشبورد\",\n  \"Administrators\": \"مدیران\",\n  \"Manage Admins\": \"مدیریت ادمین ها\",\n  \"Create Admins\": \"ایجاد ادمین ها\",\n  \"Moderate Admins\": \"مدیران معتدل\",\n  \"Manage account suspension and ban admin accounts\": \"مدیریت تعلیق حساب و ممنوع کردن حساب های مدیریت\",\n  \"Role Permissions\": \"مدیریت نقش ها\",\n  \"Team Groups\": \"گروه ها\",\n  \"Manage Other Admins\": \"مدیریت سایر ادمین ها\",\n  \"Allow users to reset passwords and update emails.\": \"امکان بازنشانی رمزهای عبور و به‌روزرسانی ایمیل‌ها را می‌دهد\",\n  \"Delete Admins\": \"ادمین ها را حذف کنید\",\n  \"Preferences\": \"اولویت ها\",\n  \"Settings\": \"تنظیمات\",\n  \"Background Color\": \"رنگ پس زمینه\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"به کاربران اجازه ایجاد نقش های جدید و ویرایش یا حذف نقش های پایین تر از بالاترین نقش خود را بدهید.\",\n  \"Save Changes\": \"ذخیره تغییرات\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"این لیست نشاندهنده ورود کاربران مدیر به سیستم می باشد. موارد برای مدت :days روز نگهداری می شوند.\",\n  \"Access Log\": \"ثبت دسترسی ها\",\n  \"View a list of successful back-end user sign ins.\": \"نمایش لیست ورود موفقیت آمیز کاربران مدیر.\",\n  \"ID\": \"شناسه\",\n  \"Date & Time\": \"زمان و تاریخ\",\n  \"Type\": \"تایپ کنید\",\n  \"IP address\": \"نشانی IP\",\n  \"Username\": \"نام کاربری\",\n  \"Login\": \"ورود\",\n  \"First name\": \"نام\",\n  \"Last name\": \"نام خانوادگی\",\n  \"Email\": \"پست الکترونیکی\",\n  \"A custom schema is used for this file format.\": \"یک طرح سفارشی برای این فرمت فایل استفاده می شود.\",\n  \"Select\": \"انتخاب کنید\",\n  \"Replace\": \"جایگزین کردن\",\n  \"and\": \"و\",\n  \"Go\": \"برو\",\n  \"Go to page\": \"برو به صفحه\",\n  \"Copy to Clipboard\": \"کپی به کلیپ بورد\",\n  \"Reveal Contents\": \"فاش کردن مطالب\",\n  \"Selected Site\": \"سایت انتخاب شده\",\n  \"Use Emmet abbreviations\": \"از اختصارات Emmet استفاده کنید\",\n  \"A record does not exist for the selected site. Create one?\": \"سابقه ای برای سایت انتخاب شده وجود ندارد. یکی بساز؟\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"جزئیاتی که وارد کردید با سوابق ما مطابقت نداشت. لطفاً دوباره بررسی کنید و دوباره امتحان کنید.\",\n  \"Administration Area\": \"بخش مدیریت\",\n  \"Password Reset\": \"بازنشاندن کلمه عبور\",\n  \"Please enter a new password.\": \"کلمه عبور جدید را وارد نمایید\",\n  \"Password\": \"کلمه عبور\",\n  \"Password Restore\": \"بازیابی رمز عبور\",\n  \"Please enter your login to restore the password.\": \"نام کاربری خود را وارد نمایید\",\n  \"A user could not be found with a login value of ':login'\": \"کاربری با نام کاریری ':login' یافت نشد.\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"یک نامه به پست الکترونیکی شما جهت شروع عملیات بارگرداندن کلمه عبور ارسال شد.\",\n  \"Invalid password reset data supplied. Please try again!\": \"اطلاعات رمز عبور نا معتبر است , لطفا مجددا تلاش نمایید!\",\n  \"Unable to reset your password!\": \"عدم توانایی در بازنشاندن کلمه عبور شما!\",\n  \"Password has been reset. You may now sign in.\": \"کلمه عبور شما بارگردانی شد و شما هم اکنون میتوانید وارد سیستم شوید.\",\n  \"Restore\": \"بازنشاندن\",\n  \"Reset\": \"تنظیم مجدد\",\n  \"Stay logged in\": \"مرا به خاطر نگهدار\",\n  \"Forgot password?\": \"کلمه عبور خود را فراموش کرده اید؟\",\n  \"Global Editor Settings\": \"تنظیمات ویرایشگر جهانی\",\n  \"Manage Widgets\": \"مدیرت ابزارک ها\",\n  \"Add Widget\": \"افزودن ابزارک\",\n  \"Set the current layout as the default?\": \"آیا از استفاده طرح بندی کنونی به عنوان پیشفرض اطمینان دارید؟\",\n  \"Make Default\": \"استفاده به عنوان پیشفرض\",\n  \"Reset layout back to default?\": \"آیا از تنظیم مجدد طرح بندی به حالت پیشفرض اطمینان دارید؟\",\n  \"Reset Layout\": \"تنظیم مجدد طرح بندی\",\n  \"Widget\": \"ابزارک\",\n  \"please select\": \"لطفا انتخاب نمایید\",\n  \"Width\": \"عرض\",\n  \"full width\": \"عرض کامل\",\n  \"Create Widgets\": \"ابزارک ها را ایجاد کنید\",\n  \"not equal to\": \"برابر نیست با\",\n  \"Light Mode\": \"حالت نور\",\n  \"Dark Mode\": \"حالت تاریک\",\n  \"OS Default\": \"پیش فرض سیستم عامل\",\n  \"Create a Custom Palette\": \"یک پالت سفارشی ایجاد کنید\",\n  \"Custom Palette\": \"پالت سفارشی\",\n  \"Primary Color\": \"اصلی color\",\n  \"Secondary Color\": \"ثانویه color\",\n  \"Selection Color\": \"انتخاب رنگ\",\n  \"Nav Text\": \"Nav Text\",\n  \"Nav Background\": \"پس زمینه ناو\",\n  \"Sidebar Text\": \"متن نوار کناری\",\n  \"Sidebar Background\": \"پس زمینه نوار کناری\",\n  \"Sidebar Active Text\": \"نوار کناری متن فعال\",\n  \"Sidebar Active Background\": \"پس زمینه فعال نوار کناری\",\n  \"Sidebar Hover Background\": \"پس‌زمینه شناور نوار کناری\",\n  \"Settings Text\": \"متن تنظیمات\",\n  \"Settings Background\": \"تنظیمات پس زمینه\",\n  \"Settings Item Background\": \"پس‌زمینه مورد تنظیمات\",\n  \"Settings Active Color\": \"تنظیمات رنگ فعال\",\n  \"Settings Active Background\": \"تنظیمات پس زمینه فعال\",\n  \"Settings Hover Background\": \"تنظیمات Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"این نام در بخش عنوان قسمت مدیریت نمایش داده می شود.\",\n  \"App Name\": \"نام برنامه\",\n  \"This name is shown on the sign in screen for the back-end.\": \"این شعار در قسمت ورود به بخش مدیریت نمایش داده می شود.\",\n  \"App Tagline\": \"شعار برنامه\",\n  \"Brand\": \"برند\",\n  \"Upload a custom logo to use in the back-end.\": \"لوگوی شخصی سازی شده خود را جهت استفاده در بخش مدیریت ارسال نمایید.\",\n  \"Logo\": \"لوگو\",\n  \"Upload a custom favicon to use in the back-end\": \"یک فاویکون سفارشی را برای استفاده در بک‌اند آپلود کنید\",\n  \"Favicon\": \"فاویکون\",\n  \"Navigation Logo\": \"لوگوی ناوبری\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"پیوند داشبورد را با یک نشان‌واره سفارشی در مسیریابی جایگزین می‌کند.\",\n  \"Dashboard Icon\": \"نماد داشبورد\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"از یک تصویر سفارشی برای نماد داشبورد (60x60) استفاده کنید.\",\n  \"This message is shown on the sign in screen for the back-end.\": \"این پیام در صفحه ورود به سیستم برای back-end نشان داده می شود.\",\n  \"Welcome Message\": \"پیام خوش آمد\",\n  \"Login Page\": \"صفحه ورود\",\n  \"Background Type\": \"نوع پس زمینه\",\n  \"Flat Color\": \"رنگ مسطح\",\n  \"Wallpaper\": \"کاغذ دیواری\",\n  \"Wallpaper Size\": \"اندازه کاغذ دیواری\",\n  \"Auto\": \"خودکار\",\n  \"Cover\": \"پوشش\",\n  \"Background Wallpaper Image\": \"تصویر پس زمینه تصویر زمینه\",\n  \"Image\": \"تصویر\",\n  \"Random Autumn Images\": \"تصاویر تصادفی پاییزی\",\n  \"Custom Image\": \"تصویر سفارشی\",\n  \"Login Page Image\": \"تصویر صفحه ورود\",\n  \"Colors\": \"رنگ ها\",\n  \"Color Mode\": \"حالت رنگ\",\n  \"Color Preset\": \"رنگ از پیش تعیین شده\",\n  \"Menu Style\": \"سبک منو\",\n  \"Navigation\": \"ناو بری\",\n  \"Custom Stylesheet\": \"شیوه نامه های سفارشی\",\n  \"Styles\": \"شیوه نامه ها\",\n  \"Inline\": \"آیکون در کنار\",\n  \"Text\": \"متن\",\n  \"Tiles\": \"آیکون در بالا\",\n  \"Collapsed\": \"جمع شونده\",\n  \"Icons\": \"نمادها\",\n  \"Left Side\": \"سمت چپ\",\n  \"Add New Item\": \"مورد جدیدی اضافه کنید\",\n  \"Link Color\": \"رنگ پیوند\",\n  \"Current Password\": \"رمز عبور فعلی\",\n  \"New Password\": \"رمز عبور جدید\",\n  \"Current password does not match. Please try again!\": \"رمز عبور فعلی مطابقت ندارد. لطفا دوباره تلاش کنید!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"رمز عبور شما منقضی شده است، لطفاً به دلایل امنیتی یک رمز عبور جدید ایجاد کنید.\",\n  \"Region\": \"بخش\",\n  \"Locale\": \"زبان\",\n  \"Select your desired locale for language use.\": \"زبان مورد نظر خود را انتخاب نمایید.\",\n  \"Timezone\": \"منطقه زمانی\",\n  \"Adjust displayed dates to this timezone.\": \"تنطیم نمایش تاریخ زمانی در این محدوده\",\n  \"Code Editor\": \"ویرایشگر کد\",\n  \"Color Scheme\": \"رنگ بندی\",\n  \"Word Wrap\": \"چیدمان کلمات\",\n  \"Off\": \"خاموش\",\n  \"40 Characters\": \"40 کاراکتر\",\n  \"80 Characters\": \"80 کاراکتر\",\n  \"Fluid\": \"سیال\",\n  \"Font Size\": \"اندازه فونت\",\n  \"Tab Size\": \"اندازه کاراکتر TAB\",\n  \"Code Folding\": \"بلاک بندی کدها\",\n  \"Mark begin\": \"ابتدای علامت گذاری\",\n  \"Mark begin and end\": \"ابتدا و انتهای علامت گذاری\",\n  \"Autocompletion\": \"تکمیل خودکار\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"تکمیل خودکار عمومی (Ctrl + Space)\",\n  \"Live Autocompletion\": \"تکمیل خودکار زنده\",\n  \"Show gutter\": \"نمایش نشانگر\",\n  \"Highlight active line\": \"مشخص نودن خط فعال\",\n  \"Automatically close tags\": \"نشانه ها و کاراکترهای خاص بصورت خودکار بسته شوند\",\n  \"Indent using tabs\": \"فاصله گذاری با استفاده از TAB\",\n  \"Show indent guides\": \"نمایش راهنمای تو رفتگی\",\n  \"Show invisible characters\": \"نمایش کاراکتر های مخفی\",\n  \"Show print margin\": \"نمایش حاشیه چاپ\",\n  \"Custom styles to include in the HTML editor.\": \"شیوه نامه های سفارشی جهت وارد کردن در ویرایش گر HTML.\",\n  \"Markup Styles\": \"سبک نشانه گذاری\",\n  \"Paragraph Formats\": \"قالب های پاراگراف\",\n  \"Markup Classes\": \"کلاس های نشانه گذاری\",\n  \"Label\": \"برچسب\",\n  \"Paragraph\": \"پاراگراف\",\n  \"Class Name\": \"نام کلاس\",\n  \"Link\": \"لینک\",\n  \"Table\": \"جدول\",\n  \"Table Cell\": \"سلول جدول\",\n  \"Allowed Tags\": \"تگ های مجاز\",\n  \"The list of allowed tags.\": \"لیست تگ های مجاز\",\n  \"Markup Tags\": \"تگ های نشانه گذاری\",\n  \"Allowed Empty Tags\": \"اجاره استفاده از تگ های خالی\",\n  \"The list of tags that are not removed when they have no content inside.\": \"لیست تگ های ای که در صورت خالی بودن حذف نشوند.\",\n  \"Do Not Wrap Tags\": \"تگ های بدون دربرگیرنده\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"لیست تگ هایی که درون تک بلاک قرار نمیگیرند\",\n  \"Remove Tags\": \"تگ های غیر مجاز\",\n  \"The list of tags that are removed together with their content.\": \"تگ هایی که در صورت وارد شدن در ویرایش گر با محتوی خود حذف می شوند\",\n  \"Line Breaker Tags\": \"برچسب های خط شکن\",\n  \"The list of tags that are used to place a line breaker element between.\": \"لیست برچسب هایی که برای قرار دادن یک عنصر خط شکن بین آنها استفاده می شود.\",\n  \"Toolbar Buttons\": \"دکمه های جعبه ابزار\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"دکمه های پیشفرض جهت نمایش در ویرایشگر.\",\n  \"Insert a preset toolbar button configuration\": \"پیکربندی دکمه نوار ابزار از پیش تعیین شده را وارد کنید\",\n  \"Allowed Attributes\": \"ویژگی های مجاز\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"لیستی از ویژگی های مجاز HTML، علاوه بر کمک هزینه های معمولی.\",\n  \"Enable code snippets (Tab)\": \"فعال سازی قطعه کد ها (Tab)\",\n  \"Title\": \"عنوان\",\n  \"Description\": \"توضیحات\",\n  \"Attachment\": \"فایل ضمیمه\",\n  \"Attachment URL\": \"نشانی پیوست\",\n  \"Add a title and description for this attachment.\": \"برای فایل ضمیمه عنوان و توضیح اختصاص بهری وارد نمایید.\",\n  \"Are you sure?\": \"آبا اطمینان دارید؟\",\n  \"Upload Error\": \"خطا در ارسال فایل\",\n  \"Remove File\": \"حذف فایل\",\n  \"Create :name\": \"ایجاد :name\",\n  \"Update :name\": \"بروز رسانی :name\",\n  \"Add :name\": \"افزودن :name\",\n  \"Link :name\": \"لینک :name\",\n  \"Unlink\": \"حذف لینک\",\n  \"Preview :name\": \"پیش نمایش :name\",\n  \"Link a New :name\": \"لینک :name جدید\",\n  \"Add a New :name\": \":name جدید\",\n  \"Related :name Data\": \"اطلاعات :name مرتبط\",\n  \":name Created\": \":name با موفقیت ایجاد شد.\",\n  \":name Updated\": \":name با موفقیت به روز رسانی شد.\",\n  \":name Deleted\": \":name با موفقیت حذف شد.\",\n  \"Form record with an ID of :id could not be found.\": \"فرمی با مشخصه :id یافت نشد.\",\n  \"Preview the Website\": \"پیش نمایش وب سایت\",\n  \"Manage back-end administrator users, groups and permissions.\": \"مدیریت کاربران , گروه ها و دسترسی های مدیران.\",\n  \"Branding & Appearance\": \"شخصی سازی بخش مدیریت\",\n  \"Customize the administration area such as name, colors and logo.\": \"شخصی سازی بخش مدیریت مانند نام، رنگ ها  و لوگو.\",\n  \"Editor Settings\": \"تنظیمات ویرایشگر کد\",\n  \"Change the global editor preferences.\": \"سفارشی سازی ویرایشگر کد، مانند اندازه فونت و رنگ بندی آن.\",\n  \"My Account\": \"حساب کاربری من\",\n  \"Update your account details such as name, email address and password.\": \"به روز رسانی اطلاعات حساب کار بری شما مانند نام و کلمه عبور و ... .\",\n  \"Backend Preferences\": \"تنظیمات مدیریت\",\n  \"Manage your account preferences such as desired language.\": \"تنظیمات مربوط به زبان مربوط به قسمت مدیریت.\",\n  \"security login\": \"ورود امن\",\n  \"List Setup\": \"راه اندازی لیست\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"ستون هایی را که میخواهید مشاهده نمایید را انتخاب نمایید. میتوانید محل قرار گیری ستونها را با جابجا نمودن آنها به .\",\n  \"Records Per Page\": \"مورد در هر صفحه\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"تعداد موارد نمایش داده شده در هر صفحه را انتخاب نمایید. لطفا توجه نمایید نمایش تعداد زیادی از موارد در هر صفحه از کارایی سیستم میکاهد.\",\n  \"Add Selected\": \"افرودن انتخاب شده ها\",\n  \"Please specify the modelClass property for :type\": \"لطفا کلاس مدل  :type را مشخص نمایید.\",\n  \"Please specify some columns to export.\": \"لطفا ستون هایی را که میخواهید در فایل برون ریزی استفاده شوند را انتخاب نمایید.\",\n  \"Missing column identifier\": \"مشخصه ستون یافت نشد\",\n  \"Unknown column\": \"ستون نا مشخص\",\n  \"Please specify some columns to import.\": \"لطفا نام ستون جهت درون ریزی را انتخاب نمایید.\",\n  \"Please match some columns first.\": \"لطفا ستون ها را مطابقت دهید\",\n  \"Please specify a match for the required field :label.\": \"لطفا موردی را جهت :label که مورد نیاز می باشد را مطابقت دهید.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"نوع کدینگ فایل منبع قابل شناسایی نمی باشد. لطفا جهت درون ریزی نوع انکدینگ فایل را انتخاب نمایید.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"حهت برون ریزی باید کنترلر از  ListController در لیست کنترل کننده ها استفاده نماید.\",\n  \"File export process completed!\": \"عملیات برون ریزی فایل با موفقیت انجام شد\",\n  \"The browser will now redirect to the file download.\": \"مرورگر به صورت خودکار به نشانی دانلود فایل هدایت خواهد شد. \",\n  \"Ignore this column\": \"این ستون را نادیده بگیر\",\n  \"Drop column here...\": \"ستون را این جا بکشید...\",\n  \"Please upload a valid CSV file.\": \"لطفا فایل CSV معتبری را ارسال نمایید\",\n  \"Created\": \"ایجاد شده\",\n  \"Updated\": \"به روز رسانی شده\",\n  \"Skipped\": \"نادیده گرفته شده\",\n  \"Warnings\": \"هشدار ها\",\n  \"Errors\": \"خطاها\",\n  \"Skipped Rows\": \"سطر های نادیده گرفته شده\",\n  \"Show Ignored Columns\": \"نمایش ستون های نادیده گرفته شده\",\n  \"Auto Match Columns\": \"مطابقت خودکار ستون ها\",\n  \"File not found\": \"فایل یافت نشد\",\n  \"There was no data supplied to export\": \"داده ای جهت ایجاد خروجی وجود ندارد\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"افزونه PHP با نام :name نصب نشده است. لطفن این افزونه را نصب کرده و فعال نمایید.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"افزونه :name مورد نیاز است ولی نصب نشده. لطفا این افزونه را نصب کنید.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"پوشه :name یا یکی از زیر پوشه های آن برای PHP قابل نوشتن نیستند. لطفا تنظیمات این پوشه را تعییر دهید.\"\n}"
  },
  {
    "path": "modules/backend/lang/fi/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Kentän tyyppi :type ei ole sallittu.',\n    'options_method_invalid_model' => 'Attribuutti \\':field\\' ratkaise kelvollista mallia. Spesifioit vaihtoehtoinen metodi mallille :model explisiittisesti.',\n    'options_method_not_exists' => 'Luokan :model täytyy määritellä metodi :method(), joka palauttaa \\':field\\' lomakekentän ehdot.',\n    'colors_method_not_exists' => 'Malliluokka :model pitää määritellä :method() palauttaaksesi HEX-arvoisen värin \\':field\\' lomakekenttään.',\n  ],\n  'widget' => [\n    'not_registered' => 'Vimpaimen luokan nimi \\':name\\' ei ole rekisteröity',\n    'not_bound' => 'Vimpaimen luokkaa nimellä \\':name\\' ei ole löydetty ohjaimeen',\n  ],\n  'page' => [\n    'untitled' => 'Nimetön',\n    'not_found' => [\n      'label' => 'Sivua ei löytynyt',\n      'help' => 'Pyydettyä sivua ei löydy.',\n      'back_link' => 'Palaa takaisin edelliselle sivulle',\n    ],\n    'access_denied' => [\n      'label' => 'Pääsy kielletty',\n      'help' => 'Sinulla ei ole tarvittavia oikeuksia tälle sivulle.',\n      'cms_link' => 'Palaa ylläpitopuolelle',\n    ],\n    'no_database' => [\n      'label' => 'Tietokanta puuttuu',\n      'help' => 'Tietokanta on pakollinen. Varmista, että tietokanta on olemassa ja pystyssä kunnes kokeilet uudelleen.',\n      'cms_link' => 'Palaa kotisivulle',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Osiota \\':name\\' ei löydy.',\n    'invalid_name' => 'Virheellinen osion nimi: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Virheellinen AJAX-käsittelijän nimi: :name.',\n    'not_found' => 'AJAX-käsittelijää \\':name\\' ei löydy.',\n  ],\n  'account' => [\n    'impersonate' => 'Imitoi käyttäjää',\n    'impersonate_confirm' => 'Haluatko varmasti imitoida tätä käyttäjää? Voit palauttaa alkuperäisen käyttäjäsi kirjautumalla ulos.',\n    'impersonate_success' => 'Imitoit nyt valittua käyttäjää',\n    'impersonate_working' => 'Imitoidaan...',\n    'impersonating' => 'Imitoitava käyttäjä: :full_name',\n    'stop_impersonating' => 'Lopeta imitointi',\n    'signed_in_as' => 'Kirjauduit nimellä :full_name',\n    'sign_out' => 'Kirjaudu ulos',\n    'login_prompt' => 'Tervetuloa takaisin! Jatkaaksesi, sinun on kirjauduttava sisään käyttäjätilillesi.',\n    'login_placeholder' => 'tunnus',\n    'password_placeholder' => 'salasana',\n    'enter_email' => 'Kirjoita sähköpostiosoitteesi',\n    'email_placeholder' => 'sähköposti',\n    'apply' => 'Käytä',\n    'cancel' => 'Peruuta',\n    'delete' => 'Poista',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Dashboard',\n    'widget_label' => 'Vimpain',\n    'widget_width' => 'Leveys',\n    'full_width' => 'täysleveä',\n    'manage_widgets' => 'Hallinnoi vimpaimia',\n    'widget_inspector_title' => 'Vimpainten konfigurointi',\n    'widget_inspector_description' => 'Konfiguroi raporttivimpain',\n    'widget_columns_label' => 'Leveys :columns',\n    'widget_columns_description' => 'Vimpaimen leveys, numero 1 ja 10 väliltä.',\n    'widget_columns_error' => 'Anna vimpaimen leveys numeerisena 1–10 väliltä.',\n    'columns' => '{1} palsta|[2,Inf] palstaa',\n    'widget_new_row_label' => 'Pakota uusi rivi',\n    'widget_new_row_description' => 'Laita vimpain uudelle riville.',\n    'widget_title_label' => 'Vimpaimen nimi',\n    'widget_title_error' => 'Vimpaimen nimi on pakollinen.',\n    'reset_layout' => 'Nollaa ulkoasu',\n    'reset_layout_confirm' => 'Palauta oletusulkoasu?',\n    'reset_layout_success' => 'Ulkoasu on palautettu',\n    'make_default' => 'Aseta oletukseksi',\n    'make_default_confirm' => 'Tee nykyisestä ulkoasusta oletus?',\n    'make_default_success' => 'Nykyinen ulkoasu on nyt oletus',\n    'collapse_all' => 'Kutista kaikki',\n    'expand_all' => 'Laajenna kaikki',\n    'status' => [\n      'widget_title_default' => 'Järjestelmän tila',\n      'update_available' => '{0} päivitystä saatavilla!|{1} päivitys saatavilla!|[2,Inf] päivitystä saatavilla!',\n      'updates_pending' => 'Odottavat ohjelmistopäivitykset',\n      'updates_nil' => 'Ohjelmisto on ajantasalla',\n      'updates_link' => 'Päivitä',\n      'warnings_pending' => 'Muutama asia vaatii huomiotasi',\n      'warnings_nil' => 'Ei varoituksia näytettäväksi',\n      'warnings_link' => 'Näytä',\n      'core_build' => 'Järjestelmän versio',\n      'event_log' => 'Tapahtumaloki',\n      'request_log' => 'Pyyntöloki',\n      'app_birthday' => 'Linjoilla alkaen',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Tervetuloa',\n      'welcome_back_name' => 'Tervetuloa takaisin :app, :name.',\n      'welcome_to_name' => 'Tervetuloa takaisin :app, :name.',\n      'first_sign_in' => 'Tämä on ensimmäinen kirjautumisesi.',\n      'last_sign_in' => 'Viimeisin kirjautumisesi',\n      'view_access_logs' => 'Tarkastele kirjautumislokiasi',\n      'nice_message' => 'Hauskaa päivää!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Ylläpitäjä',\n    'list_title' => 'Hallinnoi ylläpitäjiä',\n    'new' => 'Uusi Ylläpitäjä',\n    'first_name' => 'Etunimi',\n    'last_name' => 'Sukunimi',\n    'full_name' => 'Koko nimi',\n    'email' => 'Sähköposti',\n    'role_field' => 'Rooli',\n    'role_comment' => 'Rooli määrittelee käyttöoikeustason, joka voidaan yliajaa käyttäjätasolla Oikeudet välilehdellä.',\n    'groups' => 'Ryhmät',\n    'groups_comment' => 'Valitse ryhmät, joihin tilin tulisi kuulua. Ryhmät määrittelevät oikeudet, jotka voidaan yliajaa käyttäjäkohtaisesti Oikeudet välilehdeltä.',\n    'avatar' => 'Avatar',\n    'password' => 'Salasana',\n    'password_confirmation' => 'Vahvista salasana',\n    'permissions' => 'Oikeudet',\n    'account' => 'Tili',\n    'superuser' => 'Superkäyttäjä',\n    'superuser_comment' => 'Anna tilille rajoittamattomat pääkäyttäjän oikeudet. Pääkäyttäjä voi hallinnoida käyttäjiä. ',\n    'send_invite' => 'Lähetä kutsu sähköpostitse',\n    'send_invite_comment' => 'Lähetä tervetuloviesti kirjautumistiedoilla.',\n    'delete_confirm' => 'Poista tämä ylläpitäjä?',\n    'return' => 'Palaa ylläpitäjälistaukseen',\n    'allow' => 'Salli',\n    'inherit' => 'Periytä',\n    'deny' => 'Kiellä',\n    'activated' => 'Aktivoitu',\n    'last_login' => 'Viimeisin kirjautuminen',\n    'created_at' => 'Luontipäivä',\n    'updated_at' => 'Päivityspäiväys',\n    'deleted_at' => 'Poistettu',\n    'show_deleted' => 'Näytä poistetut',\n    'group' => [\n      'name' => 'Ryhmä',\n      'name_field' => 'Nimi',\n      'name_comment' => 'Nimi näytetään ryhmän listauksessa Luo/Muokkaa ylläpitolomakkeella.',\n      'description_field' => 'Kuvaus',\n      'is_new_user_default_field_label' => 'Oletusryhmä',\n      'is_new_user_default_field_comment' => 'Lisää uudet ylläpitäjät tähän ryhmään automaattisesti',\n      'code_field' => 'Koodi',\n      'code_comment' => 'Lisää uniikkikoodi jolla päästään ryhmäobjektin API:in.',\n      'list_title' => 'Hallinnoi ryhmiä',\n      'new' => 'Uusi ryhmä',\n      'delete_confirm' => 'Poista tämä ylläpitoryhmä?',\n      'return' => 'Palaa ryhmälistaukseen',\n      'users_count' => 'Käyttäjät',\n    ],\n    'role' => [\n      'name' => 'Rooli',\n      'name_field' => 'Nimi',\n      'name_comment' => 'Nimi näytetään roolilistauksessa Hallintalomakkeella.',\n      'description_field' => 'Kuvaus',\n      'code_field' => 'Koodi',\n      'code_comment' => 'Anna uniikkikoodi, mikäli haluat päästä kiinni API:n kautta rooli objektiin.',\n      'list_title' => 'Hallitse Rooleja',\n      'new' => 'Uusi Rooli',\n      'delete_confirm' => 'Poista tämä hallintarooli?',\n      'return' => 'Palaa roolilistaukseen',\n      'users_count' => 'Käyttäjät',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Sallittua käyttäjää, joka voisi tallentaa asetukset, ei löydy.',\n    ],\n    'trashed_hint_title' => 'Tämä tili on poistettu',\n    'trashed_hint_desc' => 'Tämä tili on poistettu ja sillä ei voi kirjautua enää järjestelmään. Valitse Palauta käyttäjä ikoni (oikealla alhaalla) aktivoidaksesi tili uudelleen',\n  ],\n  'list' => [\n    'default_title' => 'Lista',\n    'search_prompt' => 'Etsi...',\n    'no_records' => 'Ei tietueita tässä näkymässä.',\n    'missing_model' => 'Luokalle :class ei löydy mallia.',\n    'missing_column' => 'Sarakkeille :columns ei ole määritelmiä.',\n    'missing_columns' => 'Lista luokassa :class ei määrittele sarakkeita.',\n    'missing_definition' => 'Lista ei sisällä saraketta \\':field\\'.',\n    'missing_parent_definition' => 'Lista ei sisällä määritelmää \\':definition\\'.',\n    'behavior_not_ready' => 'Luettelokäyttäytymistä ei ole alustettu, tarkista, että olet kutsunut makeLists() ohjaimessasi',\n    'invalid_column_datetime' => 'Sarakkeen \\':column\\' arvo ei ole DateTime objekti. Puuttuuko sinulta $dates referenssimallistasi?',\n    'pagination' => 'Näytetään tiedot: :from-:to / :total',\n    'first_page' => 'Ensimmäinen sivu',\n    'last_page' => 'Viimeinen sivu',\n    'prev_page' => 'Edellinen sivu',\n    'next_page' => 'Seuraava sivu',\n    'refresh' => 'Päivitä',\n    'updating' => 'Päivitetään...',\n    'loading' => 'Ladataan...',\n    'check' => 'Valitse',\n    'create_button' => 'Uusi :name',\n    'delete_selected' => 'Poista valitut',\n    'delete_selected_empty' => 'Yhtään tietuetta ei ole valittu poistettavaksi.',\n    'delete_selected_confirm' => 'Poistetaan valitut tietueet?',\n    'delete_selected_success' => 'Tietueet poistettu.',\n    'column_switch_true' => 'Kyllä',\n    'column_switch_false' => 'Ei',\n  ],\n  'object_list' => [\n    'prop_cant_be_empty' => 'Ominaisuus :property ei voi olla tyhjä',\n    'key_value_exists' => 'Arvo on jo määritelty: :property_value',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Napsauta %s tai raahaa tiedosto tähän siirtoa varten',\n  ],\n  'repeater' => [\n    'add_new_item' => 'Lisää uusi osio',\n    'min_items_failed' => ':name vaatii vähintään :min osiota, vain :items on annettu',\n    'max_items_failed' => ':name sallii vain :max osiota, :items on annettu',\n  ],\n  'form' => [\n    'create_title' => 'Uusi :name',\n    'update_title' => 'Muokkaa :name',\n    'preview_title' => 'Esikatsele :name',\n    'restore_success' => ':name palautettu',\n    'reset_success' => 'Palautus valmis',\n    'missing_id' => 'Lomakkeen tietue ID ei ole määritelty.',\n    'missing_tab' => 'Validi välilehden määrittely puuttuu.',\n    'missing_model' => 'Lomake luokassa :class ei ole mallia määriteltynä.',\n    'missing_definition' => 'Lomake ei sisällä kenttää \\':field\\'.',\n    'action_confirm' => 'Oletko aivan varma?',\n    'create' => 'Luo',\n    'create_and_close' => 'Luo ja sulje',\n    'creating' => 'Luodaan...',\n    'creating_name' => 'Luodaan :name...',\n    'save' => 'Tallenna',\n    'save_and_close' => 'Tallenna ja sulje',\n    'saving' => 'Tallennetaan...',\n    'saving_name' => 'Tallennetaan :name...',\n    'delete' => 'Poista',\n    'deleting' => 'Poistetaan...',\n    'confirm_delete' => 'Poista tietue?',\n    'confirm_delete_multiple' => 'Poista valitut tietueet?',\n    'deleting_name' => 'Poistetaan :name...',\n    'restore' => 'Palautus',\n    'restoring' => 'Palautetaan',\n    'confirm_restore' => 'Haluatko varmasti palauttaa tämän tietueen?',\n    'reset_default' => 'Palauta oletukseksi',\n    'resetting' => 'Palautetaan',\n    'resetting_name' => 'Palautetaan :name',\n    'undefined_tab' => 'Muuta',\n    'field_off' => 'Pois',\n    'field_on' => 'Päällä',\n    'add' => 'Lisää',\n    'apply' => 'Ota käyttöön',\n    'insert' => 'Sijoita',\n    'cancel' => 'Peruuta',\n    'close' => 'Sulje',\n    'confirm' => 'Vahvista',\n    'reload' => 'Lataa uudelleen',\n    'complete' => 'Valmista',\n    'ok' => 'OK',\n    'or' => 'tai',\n    'confirm_tab_close' => 'Sulje välilehti? Tallentamattomat muutokset häviävät.',\n    'behavior_not_ready' => 'Lomaketta ei ole alustettu, tarkista, että olet kutsunut initForm() ohjaimessasi.',\n    'preview_no_files_message' => 'Ei siirrettyjä tiedostoja.',\n    'preview_no_media_message' => 'Ei valittua mediaa.',\n    'preview_no_record_message' => 'Ei valittua tietuetta.',\n    'select' => 'Valitse',\n    'select_all' => 'Valitse kaikki',\n    'select_none' => 'Älä valitse mitään',\n    'select_placeholder' => 'ole hyvä ja valitse',\n    'insert_row' => 'Lisää rivi',\n    'insert_row_below' => 'Lisää rivi alapuolelle',\n    'delete_row' => 'Poista rivi',\n    'concurrency_file_changed_title' => 'Tiedosto muutettu',\n    'concurrency_file_changed_description' => 'Toinen käyttäjä on muokannut samaa tiedostoa, jota olet muokkaamassa. Voit joko ladata tiedoston ja menettää tekemäsi muutokset tai ylikirjoittaa toisen käyttäjän tekemät muutokset.',\n    'return_to_list' => 'Palaa listaukseen',\n    'no_options_found' => 'Vaihtoehtoja ei löytynyt',\n    'error' => 'Virhe',\n    'toggle_full_screen' => 'Kokoruudun tila',\n  ],\n  'treeview' => [\n    'expand' => 'Laajenna',\n    'collapse' => 'Sulje',\n    'reorder' => 'Järjestä',\n    'clear_search' => 'Tyhjennä haku',\n    'search' => 'Etsi',\n    'command_or_document' => 'Käsky tai Dokumentti...',\n    'quick_access' => 'Pikapääsy',\n    'open' => 'Avaa',\n    'commands' => 'Käskyt',\n  ],\n  'tabs' => [\n    'close' => 'Sulje välilehti',\n    'close_all' => 'Sulje kaikki',\n    'close_others' => 'Sulje muut',\n    'close_saved' => 'Sulje tallennetut',\n    'full_screen' => 'Kokoruudun tila',\n  ],\n  'modal' => [\n    'close' => 'Sulje',\n  ],\n  'dropdownmenu' => [\n    'go_back' => 'Takaisin',\n    'close_menu' => 'Sulje valittko',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Etsi tietue',\n    'invalid_model_class' => 'Annettu malliluokka \":modelClass\" recordfinderille on virheellinen',\n    'cancel' => 'Peruuta',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Suhteella ei ole mitään asetuksia \\':config\\'.',\n    'missing_definition' => 'Suhteella ei ole määritelmää \\':field\\'.',\n    'missing_model' => 'Suhde luokassa :class ei määrittele mallia.',\n    'invalid_action_single' => 'Tätä toimintoa ei voida suorittaa yksisuuntaisessa suhteessa.',\n    'invalid_action_multi' => 'Tätä toimintoa ei voida suorittaa monisuuntaisessa suhteessa.',\n    'help' => 'Valitse kohde lisättäväksi',\n    'add' => 'Lisää',\n    'link_selected' => 'Linkitä valittu',\n    'cancel' => 'Peruuta',\n    'close' => 'Sulje',\n    'create' => 'Luo',\n    'update' => 'Päivitä',\n    'preview' => 'Esikatsele',\n    'remove_name' => 'Poista :name',\n    'delete_name' => 'Poista :name',\n    'link' => 'Linkki',\n    'unlink_name' => 'Poista linkki :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Järjestä tietueet uudelleen',\n    'no_records' => 'Ei järjestettäviä tietueita.',\n  ],\n  'model' => [\n    'name' => 'Malli',\n    'not_found' => 'Mallia \\':class\\' ID:llä :id ei löydy',\n    'missing_id' => 'Mallikohteiden tarkastelemiseen ei ole määritetty ID:tä.',\n    'missing_relation' => 'Malli \\':class\\' ei sisällä määritelmää suhteelle \\':relation\\'.',\n    'missing_method' => 'Malli \\':class\\' ei sisällä metodia \\':method\\'.',\n    'invalid_class' => 'Mallia :model luokassa :class ei ole kelvollinen, sen täytyy periä \\\\Model luokka.',\n    'mass_assignment_failed' => 'Massan osoittaminen epäonnistui malli attribuutille \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Järjestelmän kokoonpanovinkkejä',\n    'tips_description' => 'On olemassa ongelmia, joihin sinun on kiinnitettävä huomiota järjestelmän oikein määrittelemiseksi.',\n  ],\n  'editor' => [\n    'toolbar_buttons_presets' => [\n      'default' => 'Oletus',\n      'minimal' => 'Minimaalinen',\n      'full' => 'Runsas',\n    ],\n    'paragraph_formats_comment' => 'The options that will appear in the Paragraph Format dropdown.',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Omat asetukset',\n    'menu_description' => 'Ylläpitäjän tiliin liittyvät asetukset.',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'brand' => 'Brändi',\n    'logo' => 'Logo',\n    'logo_description' => 'Siirrä haluamasi logo ylläpitopuolelle.',\n    'favicon' => 'Favicon',\n    'favicon_description' => 'Siirrä oma favicon, jota käytetään ylläpidossa',\n    'app_name' => 'Sovelluksen nimi',\n    'app_name_description' => 'Tämä näytetään ylläpidon Title-rivillä',\n    'app_tagline' => 'Sovelluksen esittelylause',\n    'app_tagline_description' => 'Tämä näytetään hallintapaneelin kirjautumissivulla',\n    'login_prompt' => 'Tervetuloa viesti',\n    'login_prompt_description' => 'Tämä viesti näytetään ylläpidon sisäänkirjautumisikkunassa.',\n    'colors' => 'Värit',\n    'primary_color' => 'Primaariväri',\n    'secondary_color' => 'Sekundaariväri',\n    'accent_color' => 'Korostusväri',\n    'selection_color' => 'Värivalinnat',\n    'login_background_type' => 'Taustan tyyppi',\n    'background_flat_color' => 'Väripinta',\n    'background_wallpaper' => 'Taustakuva',\n    'login_page' => 'Kirjautumissivu',\n    'login_image' => 'Kuva',\n    'login_page_image' => 'Kirjautumissivun kuva',\n    'login_image_random_autumn_images' => 'Satunnainen syksyaiheinen kuva',\n    'login_image_custom' => 'Haluamasi kuva',\n    'background_color' => 'Taustan väri',\n    'background_wallpaper_image' => 'Taustakuva',\n    'background_wallpaper_image_size' => 'Taustakuvan koko',\n    'background_wallpaper_size_auto' => 'Automaattinen',\n    'background_wallpaper_size_cover' => 'Täyspeitto',\n    'styles' => 'Tyylit',\n    'custom_stylesheet' => 'Omat tyylit',\n    'navigation' => 'Navigaatio',\n    'menu_mode' => 'Valikon tyyli',\n    'menu_mode_inline' => 'Inline',\n    'menu_mode_text' => 'Teksti',\n    'menu_mode_tile' => 'Tiles',\n    'menu_mode_icon' => 'Ikonit',\n    'menu_mode_collapsed' => 'Suljettu',\n    'menu_mode_left' => 'Vasenpuoli',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'kaikki',\n    'options_method_not_exists' => 'Mallin :model täytyy määritellä metodi :method(), joka palauttaa ehdot \\':filter\\' suodattimelle.',\n    'options_static_method_invalid_value' => 'Staattinen metodi \\':method()\\' luokassa :class ei palauta sopivaa vaihtoehtojonoa.',\n    'date_all' => 'kaikki jaksot',\n    'number_all' => 'kaikki numerot',\n  ],\n  'import_export' => [\n    'upload_csv_file' => '1. Vie CSV-tiedosto',\n    'import_file' => 'Tuo tiedosto',\n    'first_row_contains_titles' => 'Ensimmäinen rivi sisältää sarakkeiden nimet',\n    'first_row_contains_titles_desc' => 'Jätä tämä valituksi jos ensimmäinen rivi on käytössä sarakkeiden nimiin.',\n    'match_columns' => '2. Sovita tiedostosarakkeet tietokannan kenttiin',\n    'file_columns' => 'Tiedostosarakkeet',\n    'database_fields' => 'Tietokannan kentät',\n    'set_import_options' => '3. Aseta tuontiasetukset',\n    'export_output_format' => '1. Vientiformaatti',\n    'file_format' => 'Tiedostoformaatti',\n    'standard_format' => 'Oletusformaatti',\n    'custom_format' => 'Oma formaatti',\n    'delimiter_char' => 'Erotinmerkki',\n    'enclosure_char' => 'Sisällytysmerkki',\n    'escape_char' => 'Escape-merkki',\n    'select_columns' => '2. Valitse sarakkeet vientiin',\n    'column' => 'Sarake',\n    'columns' => 'Sarakkeet',\n    'set_export_options' => '3. Aseta vientiasetukset',\n    'import_progress' => 'Tuontiprosessi',\n    'processing' => 'Prosessoidaan',\n    'import_error' => 'Virhe tuonnissa',\n    'export_progress' => 'Vienti käynnissä',\n    'export_error' => 'Virhe viennissä',\n    'column_preview' => 'Sarakkeen esikatselu',\n    'encoding_format' => 'Tiedoston koodaus',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Länsi-Eurooppalainen)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Keski-Eurooppalainen)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, Etelä-Eurooppalainen)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, Pohjois-Eurooppalainen)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Kyrillinen)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, arabialainen)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Kreikkalainen)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Heprealainen)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkkilainen)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Pohjoismainen)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thaimaalainen)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Balttilainen)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Kelttiläinen)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Länsi-Eurooppalainen vedos euro symbolilla)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Siirrä ja hallitse mediaa - kuvat, videot, äänet, dokumentit',\n  ],\n  'mediafinder' => [\n    'label' => 'Mediaetsin',\n    'no_image' => 'Kuvaa ei löytynyt',\n    'not_an_image' => 'Valitsemasi tiedosto ei ole kuva',\n    'click_to_select_file' => 'Klikkaa valitaksesi kuva',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Siirrä palvelimelle',\n    'move' => 'Siirrä',\n    'delete' => 'Poista',\n    'add_folder' => 'Lisää kansio',\n    'search' => 'Etsi',\n    'display' => 'Näytä',\n    'filter_everything' => 'Kaikki',\n    'filter_images' => 'Kuvat',\n    'filter_video' => 'Videot',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Dokumentit',\n    'library' => 'Kirjasto',\n    'size' => 'Koko',\n    'title' => 'Otsikko',\n    'last_modified' => 'Viimeksi muokattu',\n    'public_url' => 'URL',\n    'click_here' => 'Klikkaa tässä',\n    'thumbnail_error' => 'Virhe luotaessa esikatselukuvaa.',\n    'return_to_parent' => 'Palaa isäntäkansioon',\n    'return_to_parent_label' => 'Siirry ylös ..',\n    'nothing_selected' => 'Ei valintaa.',\n    'multiple_selected' => 'Useita valittu.',\n    'uploading_file_num' => 'Siirretään :number tiedosto(a)...',\n    'uploading_complete' => 'Siirto valmis',\n    'uploading_error' => 'Siirto epäonnistui',\n    'type_blocked' => 'Tietoturvasyistä tiedosto muoto ei ole sallittu.',\n    'order_by' => 'Järjestä',\n    'direction' => 'Suunta',\n    'direction_asc' => 'Nouseva',\n    'direction_desc' => 'Laskeva',\n    'folder' => 'Kansio',\n    'no_files_found' => 'Pyynnölläsi ei löytynyt tiedostoja.',\n    'delete_empty' => 'Ole hyvä ja valitse poistettavat tiedostot.',\n    'delete_confirm' => 'Poistetaan tiedosto(t)?',\n    'error_renaming_file' => 'Virhe nimettäessä tiedostoa.',\n    'new_folder_title' => 'Uusi kansio',\n    'folder_name' => 'Kansion nimi',\n    'error_creating_folder' => 'Virhe luotaessa kasiota',\n    'folder_or_file_exist' => 'Samanniminen tiedosto tai kansio on jo olemassa.',\n    'move_empty' => 'Valitse siirrettävät tiedostot.',\n    'move_popup_title' => 'Siirrä tiedotoja tai kansioita',\n    'move_destination' => 'Kohdekansio',\n    'please_select_move_dest' => 'Ole hyvä ja valitse kohdekansio.',\n    'move_dest_src_match' => 'Ole hyvä ja valitse toinen kohdekansio.',\n    'empty_library' => 'Näyttää tyhjälle – alkajaisiksi, siirrä tiedosto tai luo kansio.',\n    'insert' => 'Liitä',\n    'crop_and_insert' => 'Rajaa & Liitä',\n    'select_single_image' => 'Valitse vain yksi kuva.',\n    'selection_not_image' => 'Valittu tiedosto ei ole kuva.',\n    'restore' => 'Hylkää kaikki muutokset',\n    'resize' => 'Muuta kokoa...',\n    'selection_mode_normal' => 'Normaali',\n    'selection_mode_fixed_ratio' => 'Säilytä mittasuhteet',\n    'selection_mode_fixed_size' => 'Säilytä koko',\n    'height' => 'Korkeus',\n    'width' => 'Leveys',\n    'selection_mode' => 'Valintamoodi',\n    'resize_image' => 'Muuta kuvakokoa',\n    'image_size' => 'Kuvakoko:',\n    'selected_size' => 'Valittuna:',\n  ],\n  'table' => [\n    'add_item' => 'Lisää kohde',\n  ],\n  'dictionary' => [\n    'key_required' => 'Avainkenttä on pakollinen',\n    'value_required' => 'Arvokenttä on pakollinen',\n  ],\n  'uploader' => [\n    'uploading' => 'Siirretään tiedostoja',\n    'complete' => 'Siirto valmis',\n  ],\n  'richeditor' => [\n    'upload_from_computer' => 'Siirrä tietokoneelta',\n    'embedding_code' => 'Liitetään koodia',\n    'url_required' => 'URL-osoite on pakollinen',\n    'url_validation' => 'URL-osoitteen on alettava http:// tai https://',\n    'add_image' => 'Lisää kuva',\n    'add_video' => 'Lisää video',\n    'add_audio' => 'Lisää audio',\n    'add_file' => 'Lisää tiedosto',\n    'embedding_code_required' => 'Upotuskoodi on pakollinen',\n    'embedding_code_invalid' => 'Liitä kelvollinen HTML-upotuskoodi',\n    'embedding_code_invalid_title' => 'Virheellinen koodi',\n    'browse' => 'Selaa mediakirjastoa',\n    'by_url' => 'URL-osoitteen mukaan',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/fi.json",
    "content": "{\n  \"Cancel\": \"Peruuta\",\n  \"You are viewing as\": \"Tarkasteluroolisi on\",\n  \"Preview Role\": \"Esikatselurooli\",\n  \"This lets you test the actions this role can perform.\": \"Tämän avulla voit tarkastella toimenpiteitä, joita rooli voi tehdä.\",\n  \"View As Role\": \"Katsele roolissa\",\n  \"Return to Role Settings\": \"Palaa rooli-asetuksiin\",\n  \"Password must have a minimum of length of :min characters\": \"Salasanassa on oltava vähintään :min merkkiä\",\n  \"Password must contain at least one uppercase character.\": \"Salasanassa on oltava vähintään yksi ISO kirjain.\",\n  \"Password must contain at least one lowercase character.\": \"Salasanassa on oltava vähintään yksi pieni kirjain.\",\n  \"Password must contain at least one number.\": \"Salasanassa on oltava vähintään yksi numero.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Salasanassa on oltava vähintään yksi erikoismerkki.\",\n  \"Welcome to your Administration Area, :name\": \"Tervetuloa ylläpito-osioon, :name\",\n  \"Duplicate\": \"Monista\",\n  \"Expand\": \"Laajenna\",\n  \"Collapse\": \"Sulje\",\n  \"Move Up\": \"Siirrä ylös\",\n  \"Move Down\": \"Siirrä alas\",\n  \"Remove\": \"Poista\",\n  \"Manage Item\": \"Hallitse kohdetta\",\n  \"Clear Filters\": \"Tyhjennä suotimet\",\n  \"Filter Setup\": \"Suotimen asetukset\",\n  \"Apply\": \"Käytä\",\n  \"Clear\": \"Tyhjennä\",\n  \"is equal to\": \"on yhtä suuri kuin\",\n  \"is between\": \"on välissä\",\n  \"contains\": \"sisältää\",\n  \"is before\": \"on ennen\",\n  \"is after\": \"on perässä\",\n  \"is greater than\": \"on suurempi kuin\",\n  \"is less than\": \"on vähemmän kuin\",\n  \"1. Export output format\": \"1. Vientiformaatti\",\n  \"File Format\": \"Tiedostoformaatti\",\n  \"Delimiter Character\": \"Erotinmerkki\",\n  \"Enclosure Character\": \"Sisällytysmerkki\",\n  \"Escape Character\": \"Escape-merkki\",\n  \"2. Select columns to export\": \"2. Valitse sarakkeet vientiin\",\n  \"Columns\": \"Sarakkeet\",\n  \"3. Set export options\": \"3. Aseta vientiasetukset\",\n  \"CSV Custom\": \"Oma CSV-tiedosto\",\n  \"1. Upload an Import File\": \"1. Vie CSV-tiedosto\",\n  \"Import File\": \"Tuo tiedosto\",\n  \"File Encoding\": \"Tiedoston koodaus\",\n  \"First row contains column titles\": \"Ensimmäinen rivi sisältää sarakkeiden nimet\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Jätä tämä valituksi jos ensimmäinen rivi on käytössä sarakkeiden nimiin.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Sovita tiedostosarakkeet tietokannan kenttiin\",\n  \"File columns\": \"Tiedostosarakkeet\",\n  \"Database fields\": \"Tietokannan kentät\",\n  \"3. Set Import Options\": \"3. Aseta tuontiasetukset\",\n  \"Export progress\": \"Vienti käynnissä\",\n  \"Processing\": \"Prosessoidaan\",\n  \"Import progress\": \"Tuonnin edityminen\",\n  \"Import error\": \"Virhe tuonnissa\",\n  \"Export error\": \"Virhe viennissä\",\n  \"Column preview\": \"Sarakkeen esikatselu\",\n  \"Column\": \"Sarake\",\n  \"Disable\": \"Poista käytöstä\",\n  \"Enable\": \"Ota käyttöön\",\n  \"Delete\": \"Poistaa\",\n  \"Export\": \"Vieti\",\n  \"Import\": \"Tuo\",\n  \"Select Action\": \"Valitse toiminto\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Luo uusi tili hallinta-alueelle kirjautumiseksi.\",\n  \"First Name\": \"Etunimi\",\n  \"Last Name\": \"Sukunimi\",\n  \"Email Address\": \"Sähköpostiosoite\",\n  \"Pick a Username\": \"Valitse käyttäjänimi\",\n  \"Enter New Password\": \"Syötä uusi salasana\",\n  \"Confirm Password\": \"Vahvista salasana\",\n  \"Create Account\": \"Luo tili\",\n  \"Getting Ready\": \"Valmistellaan\",\n  \"Just a few more minutes\": \"Vielä muutama minuutti\",\n  \"Migrating Database\": \"Tietokantaa siirretään\",\n  \"Access the Backend Panel\": \"Siirry ylläpitopaneeliin\",\n  \"View Backend During Maintenance\": \"Näytä ylläpito-osio huollon aikana\",\n  \"Perform Software Updates\": \"Suorita ohjelmistopäivitykset\",\n  \"In Maintenance\": \"Huoltotila\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Sivusto on tällä hetkellä huoltotilassa, tervetuloa myöhemmin uudelleen.\",\n  \"Dashboard\": \"Koontinäkymä\",\n  \"Administrators\": \"Ylläpitäjät\",\n  \"Manage Admins\": \"Hallinnoi järjestelmänvalvojia\",\n  \"Create Admins\": \"Luo järjestelmänvalvojat\",\n  \"Moderate Admins\": \"Maltilliset järjestelmänvalvojat\",\n  \"Manage account suspension and ban admin accounts\": \"Hallinnoi tilin jäädyttämistä ja estä järjestelmänvalvojatilejä\",\n  \"Role Permissions\": \"Hallinnoi Rooleja\",\n  \"Team Groups\": \"Hallinnoi ryhmiä\",\n  \"Manage Other Admins\": \"Hallitse muita järjestelmänvalvojia\",\n  \"Allow users to reset passwords and update emails.\": \"Mahdollistaa salasanojen nollauksen ja sähköpostien päivittämisen\",\n  \"Delete Admins\": \"Poista järjestelmänvalvojat\",\n  \"Preferences\": \"Asetukset\",\n  \"Settings\": \"Asetukset\",\n  \"Background Color\": \"Taustaväri\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Salli käyttäjien luoda uusia rooleja ja muokata tai poistaa korkeinta rooliaan alempia rooleja.\",\n  \"Save Changes\": \"Tallenna muutokset\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Tämä loki näyttää listan onnistuneista kirjautumisista järjestelmänvalvojilta. Tiedot pidetään tallessa :days päivää.\",\n  \"Access Log\": \"Kirjautumisloki\",\n  \"View a list of successful back-end user sign ins.\": \"Katso lista onnistuneista kirjautumisista ylläpito-osioon.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Pvm & aika\",\n  \"Type\": \"Tyyppi\",\n  \"IP address\": \"IP-osoite\",\n  \"Username\": \"Käyttäjänimi\",\n  \"Login\": \"Kirjaudu\",\n  \"First name\": \"Etunimi\",\n  \"Last name\": \"Sukunimi\",\n  \"Email\": \"Sähköposti\",\n  \"A custom schema is used for this file format.\": \"Tässä tiedostomuodossa käytetään mukautettua mallia.\",\n  \"Select\": \"Valitse\",\n  \"Replace\": \"Korvaa\",\n  \"and\": \"ja\",\n  \"Go\": \"Siirry\",\n  \"Go to page\": \"Siirry sivulle\",\n  \"Copy to Clipboard\": \"Kopioi leikepöydälle\",\n  \"Reveal Contents\": \"Paljasta sisältö\",\n  \"Selected Site\": \"Valitse sivusto\",\n  \"Use Emmet abbreviations\": \"Käytä Emmet-lyhennystä\",\n  \"A record does not exist for the selected site. Create one?\": \"Tietuetta ei löytynyt valitulle sivustolle. Luodaanko?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Antamasi kirjautumistiedot eivät täsmänneet tietoihin. Ole hyvä ja tarkista ne kokeillaksesi uudelleen.\",\n  \"Administration Area\": \"Ylläpitoalue\",\n  \"Password Reset\": \"Salasanan nollaus\",\n  \"Please enter a new password.\": \"Anna uusi salasana\",\n  \"Password\": \"Salasana\",\n  \"Password Restore\": \"Salasanan palautus\",\n  \"Please enter your login to restore the password.\": \"Kirjautumisesi\",\n  \"A user could not be found with a login value of ':login'\": \"':login' nimistä käyttäjää ei löydy.\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Viesti on lähetetty sähköpostiosoitteeseesi. Seuraa ohjeita.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Virheellinen salasanan nollausdata. Ole hyvä ja yritä uudelleen!\",\n  \"Unable to reset your password!\": \"Salasanaasi ei voida nollata!\",\n  \"Password has been reset. You may now sign in.\": \"Salasana nollattu. Voit kirjautua nyt sisään.\",\n  \"Restore\": \"Palauta\",\n  \"Reset\": \"Nollaa\",\n  \"Stay logged in\": \"Pysy kirjautuneena\",\n  \"Forgot password?\": \"Unohditko salasanasi?\",\n  \"Global Editor Settings\": \"Yleiset editorin asetukset\",\n  \"Manage Widgets\": \"Hallitse Vimpaimia\",\n  \"Add Widget\": \"Lisää Vimpain\",\n  \"Set the current layout as the default?\": \"Aseta nykyinen asettelu oletukseksi?\",\n  \"Make Default\": \"Aseta oletukseksi\",\n  \"Reset layout back to default?\": \"Palauta asettelu oletusarvoon?\",\n  \"Reset Layout\": \"Nollaa asettelu\",\n  \"Widget\": \"Vimpain\",\n  \"please select\": \"valitse\",\n  \"Width\": \"Leveys\",\n  \"full width\": \"täysi leveys\",\n  \"Create Widgets\": \"Luo Vimpaimia\",\n  \"not equal to\": \"ei ole yhtä suuri kuin\",\n  \"Light Mode\": \"Vaalea tila\",\n  \"Dark Mode\": \"Tumma tila\",\n  \"OS Default\": \"Järjestelmän oletus\",\n  \"Create a Custom Palette\": \"Luo oma paletti\",\n  \"Custom Palette\": \"Oma paletti\",\n  \"Primary Color\": \"Pääväri\",\n  \"Secondary Color\": \"Toissijainen väri\",\n  \"Selection Color\": \"Valintojen Väri\",\n  \"Nav Text\": \"Navigaation teksti\",\n  \"Nav Background\": \"Navigaation tausta\",\n  \"Sidebar Text\": \"Sivupalkin teksti\",\n  \"Sidebar Background\": \"Sivupalkin tausta\",\n  \"Sidebar Active Text\": \"Sivupalkin aktiivinen teksti\",\n  \"Sidebar Active Background\": \"Sivupalkin aktiivinen tausta\",\n  \"Sidebar Hover Background\": \"Sivupalkin hover-tausta\",\n  \"Settings Text\": \"Asetukset-teksti\",\n  \"Settings Background\": \"Asetukset-tausta\",\n  \"Settings Item Background\": \"Asetukset nimikkeen tausta\",\n  \"Settings Active Color\": \"Asetukset aktiivinen väri\",\n  \"Settings Active Background\": \"Asetukset aktiivinen tausta\",\n  \"Settings Hover Background\": \"Asetukset hover-tausta\",\n  \"This name is shown in the title area of the back-end.\": \"Nimi näytetään ylläpito-osion otsikkoalueella.\",\n  \"App Name\": \"Sovelluksen nimi\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Nimi näytetään ylläpito-osion kirjatumisruudulla.\",\n  \"App Tagline\": \"Sovelluksen nimike\",\n  \"Brand\": \"Brändi\",\n  \"Upload a custom logo to use in the back-end.\": \"Siirrä oma logo käytettäväksi ylläpito-osiossa.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Siirrä oma favicon käytettäväksi ylläpito-osiossa\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigaation logo\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Korvaa linkki koontinäkymään omalla logolla navigaatiossa.\",\n  \"Dashboard Icon\": \"Koontinäkymän kuvake\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Käytä omaa kuvaa koontinäkymän kuvakkeena (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Tämä viesti näytetään ylläpito-osion kirjautumisruudulla.\",\n  \"Welcome Message\": \"Tervetuloviesti\",\n  \"Login Page\": \"Kirjautumissivu\",\n  \"Background Type\": \"Taustan tyyppi\",\n  \"Flat Color\": \"Tasainen väri\",\n  \"Wallpaper\": \"Taustakuva\",\n  \"Wallpaper Size\": \"Taustakuvan koko\",\n  \"Auto\": \"Automaattinen\",\n  \"Cover\": \"Peitä\",\n  \"Background Wallpaper Image\": \"Taustan kuva\",\n  \"Image\": \"Kuva\",\n  \"Random Autumn Images\": \"Satunnainen syksyaiheinen kuva\",\n  \"Custom Image\": \"Oma kuva\",\n  \"Login Page Image\": \"Kirjautumisruudun kuva\",\n  \"Colors\": \"Värit\",\n  \"Color Mode\": \"Väritila\",\n  \"Color Preset\": \"Esiasetetut värit\",\n  \"Menu Style\": \"Valikon tyyli\",\n  \"Navigation\": \"Navigaatio\",\n  \"Custom Stylesheet\": \"Oma tyylitiedosto\",\n  \"Styles\": \"Tyylit\",\n  \"Inline\": \"Upotettu\",\n  \"Text\": \"Teksti\",\n  \"Tiles\": \"Tiilet\",\n  \"Collapsed\": \"Kutistettu\",\n  \"Icons\": \"Kuvakkeet\",\n  \"Left Side\": \"Vasen sivu\",\n  \"Add New Item\": \"Lisää uusi nimike\",\n  \"Link Color\": \"Linkkiväri\",\n  \"Current Password\": \"Nykyinen salasana\",\n  \"New Password\": \"Uusi salasana\",\n  \"Current password does not match. Please try again!\": \"Nykyinen salasana ei täsmää. Yritä uudestaan!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Salasanasi on vanhentunut, ole hyvä ja luo uusi salasana turvallisuussyistä.\",\n  \"Region\": \"Alue\",\n  \"Locale\": \"Kieli\",\n  \"Select your desired locale for language use.\": \"Valitse haluttu käyttöliittymän kieli.\",\n  \"Timezone\": \"Aikavyöhyke\",\n  \"Adjust displayed dates to this timezone.\": \"Säätää kellonajat tähän aikavyöhykkeeseen.\",\n  \"Code Editor\": \"Koodieditori\",\n  \"Color Scheme\": \"Väriteema\",\n  \"Word Wrap\": \"Tekstin rivitys\",\n  \"Off\": \"Pois pältä\",\n  \"40 Characters\": \"40 merkkiä\",\n  \"80 Characters\": \"80 merkkiä\",\n  \"Fluid\": \"Venyvä\",\n  \"Font Size\": \"Kirjasimen koko\",\n  \"Tab Size\": \"Tabulaattorin koko\",\n  \"Code Folding\": \"Koodin taitto\",\n  \"Mark begin\": \"Merkitse alku\",\n  \"Mark begin and end\": \"Merkitse alku ja loppu\",\n  \"Autocompletion\": \"Automaattinen täydennys\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Perus automaattinen täydennys (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Reaaliaikainen automaattinen täydennys\",\n  \"Show gutter\": \"Näytä palstojen väli\",\n  \"Highlight active line\": \"Korosta aktiivinen rivi\",\n  \"Automatically close tags\": \"Sulje tagit automaattisesti\",\n  \"Indent using tabs\": \"Sisennä tabulaattorin avulla\",\n  \"Show indent guides\": \"Näytä sisennyslinjat\",\n  \"Show invisible characters\": \"Näytä piilomerkit\",\n  \"Show print margin\": \"Näytä tulostusmarginaali\",\n  \"Custom styles to include in the HTML editor.\": \"Omat tyylit jotka käytetään HTML-editorissa.\",\n  \"Markup Styles\": \"Markup-tyylit\",\n  \"Paragraph Formats\": \"Kappaleen muotoilut\",\n  \"Markup Classes\": \"Markup-luokat\",\n  \"Label\": \"Nimi\",\n  \"Paragraph\": \"Kappale\",\n  \"Class Name\": \"Luokan nimi\",\n  \"Link\": \"Linkki\",\n  \"Table\": \"Taulukko\",\n  \"Table Cell\": \"Taulukon solu\",\n  \"Allowed Tags\": \"Sallitut tagit\",\n  \"The list of allowed tags.\": \"Lista sallituista tageista.\",\n  \"Markup Tags\": \"Markup-tagit\",\n  \"Allowed Empty Tags\": \"Sallitut tyhjät tagit\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Lista tageista, joita ei poisteta vaikka niiden sisällä ei ole sisältöä.\",\n  \"Do Not Wrap Tags\": \"Älä kääri tageja\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Lista tageista, joita ei tulisi kääriä block tagin sisälle.\",\n  \"Remove Tags\": \"Poista tagit\",\n  \"The list of tags that are removed together with their content.\": \"Lista tageista, jotka poistetaan sisältöineen.\",\n  \"Line Breaker Tags\": \"Rivinvaihtotägit\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Listaus tägeistä, joita käytetään rivinvaihtojen välissä.\",\n  \"Toolbar Buttons\": \"Työkalurivin nappulat\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Työkalurivin nappulat, jotka näytetään editorissa oletuksena.\",\n  \"Insert a preset toolbar button configuration\": \"Lisää valmiit työkalurivin nappuloiden konfiguroinnit\",\n  \"Allowed Attributes\": \"Sallitut attribuutit\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Tämä on listaus sallituista HTML-attribuuteista – normaalisti sallituujen lisäksi.\",\n  \"Enable code snippets (Tab)\": \"Ota koodinpätkät käyttöön (Sarkain)\",\n  \"Title\": \"Nimi\",\n  \"Description\": \"Kuvaus\",\n  \"Attachment\": \"Liite\",\n  \"Attachment URL\": \"Liitteen URL-osoite\",\n  \"Add a title and description for this attachment.\": \"Lisää nimi ja kuvaus tälle liitteelle.\",\n  \"Upload\": \"Siirrä\",\n  \"Are you sure?\": \"Oletko varma?\",\n  \"Delete Selected\": \"Poista valittu\",\n  \"Upload Error\": \"Virhe siirrossa\",\n  \"Remove File\": \"Poista tiedosto\",\n  \"Show Light Switch\": \"Näytä Vaalea-kytkin\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Salli käyttäjien vaihtaa väriteema valikosta.\",\n  \"Create :name\": \"Luo :name\",\n  \"Update :name\": \"Päivitä :name\",\n  \"Add :name\": \"Lisää :name\",\n  \"Link :name\": \"Linkitä :name\",\n  \"Unlink\": \"Poista linkitys\",\n  \"Preview :name\": \"Esikatsele :name\",\n  \"Link a New :name\": \"Linkitä uusi :name\",\n  \"Add a New :name\": \"Lisää uusi :name\",\n  \"Related :name Data\": \"Liittyvä data: :name\",\n  \":name Created\": \":name luotu\",\n  \":name Updated\": \":name päivitetty\",\n  \":name Deleted\": \":name poistettu\",\n  \":name Added\": \":name lisätty\",\n  \":name Linked\": \":name linkitetty\",\n  \":name Removed\": \":name poistettu\",\n  \":name Unlinked\": \":name poistettu linkityksestä\",\n  \"Form record with an ID of :id could not be found.\": \"Tietuetta ID :id ei löydy.\",\n  \"Remove Selected\": \"Poista valitut\",\n  \"Unlink Selected\": \"Poista valittujen linkitys\",\n  \"Preview the Website\": \"Esikatsele verkkosivusto\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Hallinnoi ylläpitäjiä, ryhmiä ja oikeuksia.\",\n  \"Define permissions for administrators based on their role.\": \"Määritä oikeudet järjestelmänvalvojille heidän rooliensa perusteella.\",\n  \"Add administrators to groups used for notifications and features.\": \"Lisää ylläpitäjiä ryhmiin, joita käytetään notifikaatioihin ja ominaisuuksiin.\",\n  \"Branding & Appearance\": \"Kustomoi ylläpito\",\n  \"Customize the administration area such as name, colors and logo.\": \"Muokkaa ylläpitoaluetta, kuten nimeä, värejä ja logo.\",\n  \"Editor Settings\": \"Editorin asetukset\",\n  \"Change the global editor preferences.\": \"Kustomoi peruasetuksia, kuten kirjasinkoko ja väriteema.\",\n  \"My Account\": \"Oma tili\",\n  \"Update your account details such as name, email address and password.\": \"Päivitä tilisi asetukset, kuten nimesi, sähköpostisi ja salasanasi.\",\n  \"Backend Preferences\": \"Hallinnan asetukset\",\n  \"Manage your account preferences such as desired language.\": \"Hallitse oman tilisi asetuksia, kuten kieltä.\",\n  \"security login\": \"tietoturvakirjautuminen\",\n  \"List Setup\": \"Listan asetukset\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Käytä valintaruutuja valitaksesi sarakkeita, jotka haluat nähdä luettelossa. Voit muuttaa sarakkeiden sijaintia vetämällä niitä ylös tai alas.\",\n  \"Records Per Page\": \"Tietueita per sivu\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Valitse näytettävän sivun tietueiden määrä. Huomaa, että suuri määrä tietueita yhdellä sivulla voi heikentää suorituskykyä.\",\n  \"Reset to Default\": \"Palauta oletusasetus\",\n  \"Add Selected\": \"Lisää valittu\",\n  \"Create & Close\": \"Luo & Sulje\",\n  \"Creating :name...\": \"Luodaan :name...\",\n  \"Save & Close\": \"Tallenna & Sulje\",\n  \"Saving :name...\": \"Tallennetaan :name...\",\n  \"Delete this record?\": \"Poistetaanko tämä tietue?\",\n  \"Deleting :name...\": \"Poistetaan :name...\",\n  \"Loading...\": \"Ladataan...\",\n  \"Complete\": \"Valmis\",\n  \"Please specify the modelClass property for :type\": \"Määritä modelClass ominaisuus kohteelle :type\",\n  \"Please specify some columns to export.\": \"Määritä joitakin vietäviä sarakkeita.\",\n  \"Missing column identifier\": \"Puuttuva sarakkeen tunniste\",\n  \"Unknown column\": \"Tuntematon sarake\",\n  \"Please specify some columns to import.\": \"Määritä joitakin tuotavia sarakkeita.\",\n  \"Please match some columns first.\": \"Ole hyvä ja sovita joitakin sarakkeita ensin.\",\n  \"Please specify a match for the required field :label.\": \"Ole hyvä ja määritä vastaavuus pakolliseen kenttään :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Lähdetiedostojen koodausta ei tunnisteta. Valitse mukautettu tiedostomuoto vaihtoehto oikealla koodauksella tuodaksesi tiedoston.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Sinun täytyy toteuttaa ohjaimen käyttäytyminen ListController viennin 'useList' -valinnan ollessa käytössä.\",\n  \"File export process completed!\": \"Tiedoston vienti suoritettu!\",\n  \"The browser will now redirect to the file download.\": \"Selain ohjaa nyt tiedoston lataamiseen.\",\n  \"Ignore this column\": \"Ohita tämä sarake\",\n  \"Drop column here...\": \"Pudota sarake tähän...\",\n  \"Please upload a valid CSV file.\": \"Ole hyvä ja lataa kelvollinen CSV-tiedosto.\",\n  \"Created\": \"Luotu\",\n  \"Updated\": \"Päivitetty\",\n  \"Skipped\": \"Ohitettu\",\n  \"Warnings\": \"Varoitukset\",\n  \"Errors\": \"Virheet\",\n  \"Skipped Rows\": \"Ohitetut rivit\",\n  \"Show Ignored Columns\": \"Näytä sivuutetut sarakkeet\",\n  \"Auto Match Columns\": \"Autom. sarakkeiden sovitus\",\n  \"File not found\": \"Tiedostoa ei löydy\",\n  \"There was no data supplied to export\": \"Ei dataa vietäväksi\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Debug-moodi on valittu. Tätä ei suositella julkaistuihin asennuksiin.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"Ylläpidon URL :name on liian yleinen. Anna jokin omaperäisempi.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Löytyi tili nimeltä :name, joka on liian yleinen. Ole hyvä ja vaihda jokin omaperäisempi nimi.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP laajennus :name ei ole asennettuna. Asenna ja aktivoi kyseinen laajennus.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Lisäosa :name on riippuvuus, mutta sitä ei ole asennettu. Asenna lisäosa.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Hakemisto :name tai sen alihakemistot ei ole PHP:n kirjoitettavissa. Aseta vastaavat oikeudet tälle hakemistolle verkkopalvelimella.\",\n  \"Manage Roles\": \"Hallinnoi Rooleja\",\n  \"Manage Groups\": \"Hallinnoi ryhmiä\",\n  \"Customize Backend\": \"Kustomoi ylläpito\"\n}"
  },
  {
    "path": "modules/backend/lang/fr/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Type de champ invalide :type.',\n    'options_method_invalid_model' => 'L’attribut \\':field\\' ne correspond à aucun modèle valide. Essayez de spécifier explicitement la méthode d’options pour la classe du modèle \\':model\\'.',\n    'options_method_not_exists' => 'La classe du modèle :model doit définir une méthode :method() renvoyant des options pour le champ \":field\" du formulaire.',\n    'colors_method_not_exists' => 'La classe du modèle :model doit définir une méthode :method() renvoyant le code html en hexadécimal de la couleur du champ \\':field\\' du formulaire.',\n  ],\n  'widget' => [\n    'not_registered' => 'Aucun widget au nom de classe \":name\" n’a été enregistré',\n    'not_bound' => 'Un widget au nom de classe \":name\" n’a pas été lié au contrôleur',\n  ],\n  'page' => [\n    'untitled' => 'Sans titre',\n    'not_found' => [\n      'label' => 'La page est introuvable',\n      'help' => 'La page demandée n’a pas pu être trouvée.',\n      'back_link' => 'Retourner à la page précédente',\n    ],\n    'access_denied' => [\n      'label' => 'Accès refusé',\n      'help' => 'Vous n’êtes pas autorisé à consulter cette page.',\n      'cms_link' => 'Retour à l’interface d’administration',\n    ],\n    'no_database' => [\n      'label' => 'Base de données introuvable',\n      'help' => 'Une base de données est requise pour l’accès à l’interface d’administration. Veuillez vérifier que la base de données existe et que les migrations ont été effectuées avant de ré-essayer.',\n      'cms_link' => 'Retour à l’accueil',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Le modèle partiel \":name\" est introuvable.',\n    'invalid_name' => 'Le nom du modèle partiel est incorrecte: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Le nom du handler AJAX est invalide: :name.',\n    'not_found' => 'Le handler AJAX \":name\" est introuvable.',\n  ],\n  'account' => [\n    'impersonate' => 'Imiter l’utilisateur',\n    'impersonate_confirm' => 'Êtes-vous certain de vouloir imiter cet utilisateur ? Vous pourrez retourner à l’état normal en vous déconnectant.',\n    'impersonate_success' => 'Vous imitez maintenant cet utilisateur',\n    'impersonate_working' => 'Imitation...',\n    'impersonating' => 'En train d’imiter :full_name',\n    'stop_impersonating' => 'Arrêter d’imiter',\n    'signed_in_as' => 'Connecté en tant que :full_name',\n    'sign_out' => 'Déconnexion',\n    'login_prompt' => 'Bienvenue! Veuillez vous connecter pour continuer.',\n    'login_placeholder' => 'identifiant',\n    'password_placeholder' => 'mot de passe',\n    'enter_email' => 'Saisir votre adresse e-mail',\n    'email_placeholder' => 'adresse e-mail',\n    'apply' => 'Appliquer',\n    'cancel' => 'Annuler',\n    'delete' => 'Supprimer',\n    'ok' => 'OK',\n  ],\n  'user' => [\n    'name' => 'Administrateur',\n    'list_title' => 'Gérer les administrateurs',\n    'new' => 'Créer un nouvel administrateur',\n    'first_name' => 'Prénom',\n    'last_name' => 'Nom',\n    'full_name' => 'Nom complet',\n    'email' => 'Adresse e-mail',\n    'role_field' => 'Rôle',\n    'role_comment' => 'Les rôles définissent les permissions de l\\'utilisateur, elles peuvent être écrasés au niveau de l\\'utilisateur dans l\\'onglet \"Permissions\".',\n    'groups' => 'Groupes',\n    'groups_comment' => 'Préciser les groupes auxquels ce compte doit appartenir.',\n    'avatar' => 'Avatar',\n    'password' => 'Mot de passe',\n    'password_confirmation' => 'Confirmer le mot de passe',\n    'permissions' => 'Permissions',\n    'account' => 'Compte',\n    'superuser' => 'Super utilisateur',\n    'superuser_comment' => 'Donner à ce compte un niveau d’accès illimité à toutes les sections du système. Les super-utilisateurs peuvent ajouter et gérer les autres utilisateurs. ',\n    'send_invite' => 'Envoyer une invitation par e-mail',\n    'send_invite_comment' => 'Envoyer une invitation aux utilisateurs par e-mail contenant l’identifiant et le mot de passe.',\n    'delete_confirm' => 'Supprimer cet administrateur ?',\n    'return' => 'Retour à la liste des administrateurs',\n    'allow' => 'Autoriser',\n    'inherit' => 'Hériter',\n    'deny' => 'Interdire',\n    'activated' => 'Activé',\n    'last_login' => 'Dernière connexion',\n    'created_at' => 'Créé le',\n    'updated_at' => 'Mis à jour le',\n    'deleted_at' => 'Supprimé le',\n    'show_deleted' => 'Afficher les supprimés',\n    'group' => [\n      'name' => 'Groupe',\n      'name_comment' => 'Le nom est affiché dans la liste des groupes dans le formulaire de création/modification des administrateurs.',\n      'name_field' => 'Nom',\n      'description_field' => 'Description',\n      'is_new_user_default_field_label' => 'Groupe par défaut',\n      'is_new_user_default_field_comment' => 'Ajouter les nouveaux administrateurs dans ce groupe par défaut.',\n      'code_field' => 'Code',\n      'code_comment' => 'Saisir un code d’accès unique si vous souhaitez accéder à ce groupe via l’API.',\n      'list_title' => 'Gérer les groupes',\n      'new' => 'Ajouter un groupe d’administrateur',\n      'delete_confirm' => 'Supprimer ce groupe d’administrateurs ?',\n      'return' => 'Retour à la liste des groupes',\n      'users_count' => 'Utilisateurs',\n    ],\n    'role' => [\n      'name' => 'Rôle',\n      'name_field' => 'Nom',\n      'name_comment' => 'Le nom est affiché dans la liste des rôles du formulaire de gestion des Administrateurs.',\n      'description_field' => 'Description',\n      'code_field' => 'Code',\n      'code_comment' => 'Saisir un code d’accès unique si vous souhaitez accéder à ce rôle via l’API.',\n      'list_title' => 'Gérer les rôles',\n      'new' => 'Nouveau rôle',\n      'delete_confirm' => 'Supprimer le rôle administrateur ?',\n      'return' => 'Retourner à la liste des rôles',\n      'users_count' => 'Utilisateurs',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Il n’y a aucun utilisateur authentifié pour lequel il est possible de charger ou modifier les préférences.',\n    ],\n    'trashed_hint_title' => 'Ce compte a été supprimé',\n    'trashed_hint_desc' => 'Ce compte a été supprimé et il sera impossible de se connecter avec. Pour le récupérer, cliquez sur l\\'icône \"Utilisateur\" en bas à droite.',\n  ],\n  'list' => [\n    'default_title' => 'Liste',\n    'search_prompt' => 'Rechercher…',\n    'no_records' => 'Il n’y a aucun résultat dans cette vue.',\n    'missing_model' => 'La liste utilisée dans la classe :class n’a pas de modèle défini.',\n    'missing_column' => 'Il n’y a pas de définition pour la colonne :columns.',\n    'missing_columns' => 'La liste utilisée dans la classe :class n’a pas de colonne de liste définie.',\n    'missing_definition' => 'La liste utilisée ne contient de pas de colonne pour le champ \":field\".',\n    'missing_parent_definition' => 'Le behavior List ne contient pas de définition pour \\':definition\\'.',\n    'behavior_not_ready' => 'La liste utilisée n’a pas été initialisée, vérifier que la méthode d’appel de makeLists() a été soumise au contrôleur.',\n    'invalid_column_datetime' => 'La valeur de la colonne \":column\" n’est pas un objet DateTime, manque-t-il une référence dans la propriété \\\\$dates du modèle ?',\n    'pagination' => 'Enregistrements affichés : :from-:to sur :total',\n    'first_page' => 'Première page',\n    'last_page' => 'Dernière page',\n    'prev_page' => 'Page précédente',\n    'next_page' => 'Page suivante',\n    'refresh' => 'Actualiser',\n    'updating' => 'Mise à jour…',\n    'loading' => 'Chargement…',\n    'check' => 'Sélectionner',\n    'create_button' => 'Nouveau :name',\n    'delete_selected' => 'Supprimer la sélection',\n    'delete_selected_empty' => 'Il n’y a aucun enregistrement à supprimer',\n    'delete_selected_confirm' => 'Confirmer la suppression des enregistrements sélectionnés ?',\n    'delete_selected_success' => 'Les enregistrements ont été supprimés.',\n    'column_switch_true' => 'Oui',\n    'column_switch_false' => 'Non',\n  ],\n  'object_list' => [\n    'prop_cant_be_empty' => 'La propriété :property ne peut pas être vide',\n    'key_value_exists' => 'La valeur est déjà définie: :property_value',\n  ],\n  'fileupload' => [],\n  'form' => [\n    'create_title' => 'Créer un(e) :name',\n    'update_title' => 'Mise à jour d\\'un(e) :name',\n    'preview_title' => 'Aperçu d\\'un(e) :name',\n    'restore_success' => ':name récuperé avec succès',\n    'reset_success' => 'Réinitialisation terminée',\n    'missing_id' => 'L’ID de l’enregistrement du formulaire n’est pas précisé.',\n    'missing_tab' => 'Il manque une définition valide de l’onglet.',\n    'missing_model' => 'Le behavior formulaire utilisé dans la classe :class n’a pas de modèle défini.',\n    'missing_definition' => 'Le behavior formulaire utilisé n’a pas de champ pour \":field\".',\n    'action_confirm' => 'Confirmer l’action ?',\n    'create' => 'Créer',\n    'create_and_close' => 'Créer et fermer',\n    'creating' => 'Création en cours…',\n    'creating_name' => 'Création d\\'un(e) :name en cours…',\n    'save' => 'Enregistrer',\n    'save_and_close' => 'Enregistrer et fermer',\n    'saving' => 'Enregistrement en cours…',\n    'saving_name' => 'Enregistrement d\\'un(e) :name en cours…',\n    'delete' => 'Supprimer',\n    'deleting' => 'Suppression en cours…',\n    'confirm_delete' => 'Supprimer cet enregistrement ?',\n    'confirm_delete_multiple' => 'Supprimer les enregistrements sélectionnés ?',\n    'deleting_name' => 'Suppression d\\'un(e) :name en cours…',\n    'restore' => 'Récupérer',\n    'restoring' => 'Récupération',\n    'confirm_restore' => 'Êtes-vous certain de vouloir récupérer cet enregistrement ?',\n    'reset_default' => 'Restaurer les valeurs par défaut',\n    'resetting' => 'Restauration',\n    'resetting_name' => 'Restauration d\\'un(e) :name',\n    'undefined_tab' => 'Divers',\n    'field_off' => 'Off',\n    'field_on' => 'On',\n    'add' => 'Ajouter',\n    'apply' => 'Appliquer',\n    'insert' => 'Insérer',\n    'cancel' => 'Annuler',\n    'close' => 'Fermer',\n    'confirm' => 'Confirmer',\n    'reload' => 'Recharger',\n    'complete' => 'Terminé',\n    'ok' => 'OK',\n    'or' => 'ou',\n    'confirm_tab_close' => 'Fermer cet onglet ? Les modifications réalisées seront perdues.',\n    'behavior_not_ready' => 'Le behavior formulaire n’a pas encore été initialisé, vérifiez que la méthode initForm() est appelée par le contrôleur.',\n    'preview_no_files_message' => 'Les fichiers ne sont pas envoyés.',\n    'preview_no_media_message' => 'Aucun média sélectionné.',\n    'preview_no_record_message' => 'Il n’y a aucun enregistrement sélectionné.',\n    'select' => 'Sélectionner',\n    'select_all' => 'Tout sélectionner',\n    'select_none' => 'Ne rien sélectionner',\n    'insert_row' => 'Insérer une ligne',\n    'insert_row_below' => 'Insérer une ligne dessous',\n    'delete_row' => 'Supprimer une ligne',\n    'concurrency_file_changed_title' => 'Le fichier à été modifié',\n    'concurrency_file_changed_description' => 'Un autre utilisateur a modifié ce fichier sur le disque. Vous pouvez charger à nouveau le fichier depuis le disque et perdre vos modifications) ou écraser le fichier sur le disque.',\n    'return_to_list' => 'Retourner à la liste',\n    'no_options_found' => 'Aucune option trouvée',\n    'error' => 'Erreur',\n    'toggle_full_screen' => 'Mode plein écran',\n  ],\n  'treeview' => [\n    'expand' => 'Afficher',\n    'collapse' => 'Masquer',\n    'reorder' => 'Réordonner',\n    'clear_search' => 'Vider la recherche',\n    'search' => 'Chercher',\n    'command_or_document' => 'Commande ou document...',\n    'quick_access' => 'Accès rapide',\n    'open' => 'Ouvrir',\n    'commands' => 'Commandes',\n  ],\n  'tabs' => [\n    'close' => 'Fermer l’onglet',\n    'close_all' => 'Fermer tous les onglets',\n    'close_others' => 'Fermer les autres onglets',\n    'close_saved' => 'Fermer les onglets enregistrés',\n    'full_screen' => 'Mode plein écran',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Trouver un enregistrement',\n    'invalid_model_class' => 'La clase du modèle \":modelClass\" pour le recordfinder est invalide',\n    'cancel' => 'Annuler',\n  ],\n  'modal' => [\n    'close' => 'Fermer',\n  ],\n  'dropdownmenu' => [\n    'go_back' => 'Retour en arrière',\n    'close_menu' => 'Fermer le menu',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'La behavior relation n’a pas de configuration pour \":config\".',\n    'missing_definition' => 'La behavior relation n’a pas de définition pour le champ \":field\".',\n    'missing_model' => 'La behavior relation utilisée dans la classe :class n’a pas de modèle défini.',\n    'invalid_action_single' => 'Cette action ne peut être effectuée sur une relation unique.',\n    'invalid_action_multi' => 'Cette action ne peut être effectuée sur une relation multiple.',\n    'help' => 'Cliquer sur un élément pour l’ajouter',\n    'add' => 'Ajouter',\n    'link_selected' => 'Lier la sélection',\n    'cancel' => 'Annuler',\n    'close' => 'Fermer',\n    'create' => 'Créer',\n    'update' => 'Mettre à jour',\n    'preview' => 'Aperçu',\n    'remove_name' => 'Retirer un(e) :name',\n    'delete_name' => 'Suppression d’un(e) :name',\n    'link' => 'Lier',\n    'unlink_name' => 'Détacher un(e) :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Réorganiser les enregistrements',\n    'no_records' => 'Il n’y a aucun enregistrement à trier.',\n  ],\n  'model' => [\n    'name' => 'Modèle',\n    'not_found' => 'Aucun modèle \":class\" ne correspond à l’ID :id',\n    'missing_id' => 'Il manque l’ID de l’enregistrement.',\n    'missing_relation' => 'Le modèle \":class\" ne contient pas de définition \":relation\".',\n    'missing_method' => 'Le modèle \":class\" ne contient pas de méthode \":method\".',\n    'invalid_class' => 'Le modèle :model utilisé dans la classe :class est invalide, il doit hériter de la classe \\\\Model.',\n    'mass_assignment_failed' => 'L’affectation de masse a échoué pour l’attribut \":attribute\" du modèle.',\n  ],\n  'warnings' => [\n    'tips' => 'Astuces de configuration du système',\n    'tips_description' => 'Il y a des éléments à prendre en compte pour configurer le système correctement.',\n  ],\n  'editor' => [\n    'toolbar_buttons_presets' => [\n      'default' => 'Par défaut',\n      'minimal' => 'Minimal',\n      'full' => 'Tous',\n    ],\n    'paragraph_formats_comment' => 'Les options pour formatter les paragraphes qui apparaitront dans le dropdown.',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Mes paramètres',\n    'menu_description' => 'Paramètres de votre compte administrateur',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Couleur d’accentuation',\n  ],\n  'backend_preferences' => [],\n  'filter' => [\n    'all' => 'tous',\n    'options_method_not_exists' => 'La classe du modèle :model doit définir une méthode :method() qui retourne les options pour le filtre \\':filter\\'.',\n    'options_static_method_invalid_value' => 'La méthode statique \\':method()\\' dans :class ne retourne pas un tableau valide d’options.',\n    'date_all' => 'toute la période',\n    'number_all' => 'tous les nombres',\n  ],\n  'import_export' => [\n    'row' => 'Ligne :row',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, européen occidental)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, européen central)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, européen du Sud)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, européen du Nord)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, cyrillique)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, arabe)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, grec)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, hébreu)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, turc)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, nordique)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, thaï)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, balte)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, celtique)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, européen occidental révisé avec le signe euro)',\n      'windows_1250' => 'Windows-1250 (CP1250)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Déposer et gérer les contenus media - images, vidéos, sons, documents',\n    'create_edit_dashboards' => 'Créer et gérer les tableaux de bord. Notez que les utilisateurs disposant de cette permission peuvent accéder aux données de tous les tableaux de bord et widgets de rapports disponibles dans le système.',\n    'access_dashboard' => 'Les tableaux de bord auxquels un utilisateur peut accéder sont déterminés par les paramètres d’accès individuels à chaque tableau de bord.',\n  ],\n  'mediafinder' => [\n    'label' => 'Galerie média',\n    'no_image' => 'L’image n’a pas été trouvée',\n    'not_an_image' => 'Le fichier sélectionné n’est pas une image',\n    'click_to_select_file' => 'Cliquez pour sélectionner un fichier',\n  ],\n  'media' => [\n    'menu_label' => 'Média',\n    'upload' => 'Déposer un fichier',\n    'move' => 'Déplacer',\n    'delete' => 'Supprimer',\n    'add_folder' => 'Ajouter un répertoire',\n    'search' => 'Rechercher',\n    'display' => 'Affichage',\n    'filter_everything' => 'Tout',\n    'filter_images' => 'Images',\n    'filter_video' => 'Vidéo',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Documents',\n    'library' => 'Librairie',\n    'size' => 'Taille',\n    'title' => 'Titre',\n    'last_modified' => 'Dernière modification',\n    'public_url' => 'Adresse URL publique',\n    'click_here' => 'Cliquer ici',\n    'thumbnail_error' => 'Erreur lors de la création de la miniature.',\n    'return_to_parent' => 'Retourner au répertoire parent',\n    'return_to_parent_label' => 'Remonter…',\n    'nothing_selected' => 'Aucune sélection.',\n    'multiple_selected' => 'Plusieurs éléments sélectionnés.',\n    'uploading_file_num' => 'Dépôt de :number fichier(s)…',\n    'uploading_complete' => 'Dépôt des fichiers terminé',\n    'uploading_error' => 'Le dépôt des fichiers a échoué',\n    'type_blocked' => 'Le type de fichier utilisé est bloqué pour des raisons de sécurité.',\n    'order_by' => 'Trier par',\n    'direction' => 'Ordre',\n    'direction_asc' => 'Croissant',\n    'direction_desc' => 'Décroissant',\n    'folder' => 'Répertoire',\n    'no_files_found' => 'Aucun fichier trouvé.',\n    'delete_empty' => 'Veuillez sélectionner les éléments à supprimer.',\n    'delete_confirm' => 'Confirmer la suppression de ces éléments ?',\n    'error_renaming_file' => 'Erreur lors du renommage de l’élément.',\n    'new_folder_title' => 'Nouveau répertoire',\n    'folder_name' => 'Nom du répertoire',\n    'error_creating_folder' => 'Erreur lors de la création du répertoire',\n    'folder_or_file_exist' => 'Un répertoire ou un fichier portant ce nom existe déjà.',\n    'move_empty' => 'Veuillez sélectionner les éléments à déplacer.',\n    'move_popup_title' => 'Déplacer des fichiers ou répertoires',\n    'move_destination' => 'Répertoire de destination',\n    'please_select_move_dest' => 'Veuillez sélectionner un répertoire de destination.',\n    'move_dest_src_match' => 'Veuillez sélectionner un autre répertoire de destination.',\n    'empty_library' => 'La librairie multimédia est vide. Pour commencer, téléchargez des fichiers ou répertoires.',\n    'insert' => 'Insérer',\n    'crop_and_insert' => 'Rogner et insérer',\n    'select_single_image' => 'Veuillez ne sélectionner qu\\'une seule image.',\n    'selection_not_image' => 'L’élément sélectionné n’est pas une image.',\n    'restore' => 'Annuler tous les changements',\n    'resize' => 'Redimensionner…',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Rapport fixe',\n    'selection_mode_fixed_size' => 'Taille fixe',\n    'height' => 'Hauteur',\n    'width' => 'Largeur',\n    'selection_mode' => 'Mode de sélection',\n    'resize_image' => 'Redimensionner l’image',\n    'image_size' => 'Taille de l’image :',\n    'selected_size' => 'Sélectionnée :',\n  ],\n  'table' => [\n    'add_item' => 'Ajouter un élément',\n  ],\n  'dictionary' => [\n    'key_required' => 'Le champ \"Key\" est requis',\n    'value_required' => 'Le champ \"Value\" est requis',\n  ],\n  'uploader' => [\n    'uploading' => 'Fichiers en cours d’ajout…',\n    'complete' => 'Ajout terminé',\n  ],\n  'richeditor' => [\n    'upload_from_computer' => 'Ajouter depuis l’ordinateur',\n    'embedding_code' => 'Code d’intégration',\n    'url_required' => 'l’URL est requise',\n    'url_validation' => 'l’URL doit commencer avec http:// ou https://',\n    'add_image' => 'Insérer une Image',\n    'add_video' => 'Insérer une Vidéo',\n    'add_audio' => 'Insérer un fichier Audio',\n    'add_file' => 'Insérer un Fichier',\n    'embedding_code_required' => 'Le code d’intégration est requis',\n    'embedding_code_invalid' => 'Veuillez saisir un code d’intégration HTML valide',\n    'embedding_code_invalid_title' => 'code invalide',\n    'browse' => 'Parcourir la librairie multimédia',\n    'by_url' => 'Par URL',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/fr.json",
    "content": "{\n  \"Update\": \"Mettre à jour\",\n  \"Cancel\": \"Annuler\",\n  \"You are viewing as\": \"Vous consultez en tant que\",\n  \"Preview Role\": \"Prévisualiser le rôle\",\n  \"This lets you test the actions this role can perform.\": \"Cela vous permet de tester les actions que ce rôle peut effectuer.\",\n  \"View As Role\": \"Voir en tant que rôle\",\n  \"Return to Role Settings\": \"Revenir aux paramètres de rôle\",\n  \"Password must have a minimum of length of :min characters\": \"Le mot de passe doit avoir une longueur minimale de :min caractères\",\n  \"Password must contain at least one uppercase character.\": \"Le mot de passe doit contenir au moins un caractère majuscule.\",\n  \"Password must contain at least one lowercase character.\": \"Le mot de passe doit contenir au moins un caractère minuscule.\",\n  \"Password must contain at least one number.\": \"Le mot de passe doit contenir au moins un chiffre.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Le mot de passe doit contenir au moins un caractère non alphanumérique.\",\n  \"Welcome to your Administration Area, :name\": \"Bienvenue dans votre espace d'administration, :name\",\n  \"Duplicate\": \"Dupliquer\",\n  \"Expand\": \"Développer\",\n  \"Collapse\": \"Réduire\",\n  \"Move Up\": \"Déplacer vers le haut\",\n  \"Move Down\": \"Descendre\",\n  \"Remove\": \"Retirer\",\n  \"Manage Item\": \"Gérer l'élément\",\n  \"Clear Filters\": \"Effacer les filtres\",\n  \"Filter Setup\": \"Configuration du filtre\",\n  \"Apply\": \"Appliquer\",\n  \"Clear\": \"Réinitialiser\",\n  \"is equal to\": \"est égal à\",\n  \"is between\": \"est entre\",\n  \"contains\": \"contient\",\n  \"is before\": \"est avant\",\n  \"is after\": \"est après\",\n  \"is greater than\": \"est supérieur à\",\n  \"is less than\": \"est inférieur à\",\n  \"1. Export output format\": \"1. Format de sortie de l’export\",\n  \"File Format\": \"Format du fichier\",\n  \"Delimiter Character\": \"Caractère séparateur\",\n  \"Enclosure Character\": \"Caractère d’encadrement\",\n  \"Escape Character\": \"Caractère d’échappement\",\n  \"2. Select columns to export\": \"2. Choisissez les colonnes à exporter\",\n  \"Columns\": \"Colonnes\",\n  \"3. Set export options\": \"3. Définir les options d’exportation\",\n  \"CSV Custom\": \"Format Personnalisé\",\n  \"1. Upload an Import File\": \"1. Envoyer un fichier CSV\",\n  \"Import File\": \"Importer un fichier\",\n  \"File Encoding\": \"Encodage du fichier\",\n  \"First row contains column titles\": \"La première ligne contient les titres des colonnes\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Laissez coché si la première ligne du fichier CSV contient les titres des colonnes.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Faire correspondre les colonnes du fichier avec les champs du modèle de données\",\n  \"File columns\": \"Colonnes du fichier\",\n  \"Database fields\": \"Champs de la base de données\",\n  \"3. Set Import Options\": \"3. Définir les options d’importation\",\n  \"Export progress\": \"Progression de l’export\",\n  \"Processing\": \"Traitement\",\n  \"Import progress\": \"Progression de l’import\",\n  \"Import error\": \"Erreur d’import\",\n  \"Export error\": \"Erreur d’export\",\n  \"Column preview\": \"Prévisualisation des colonnes\",\n  \"Column\": \"Colonne\",\n  \"Disable\": \"Désactiver\",\n  \"Enable\": \"Activer\",\n  \"Delete\": \"Supprimer\",\n  \"Export\": \"Exporter\",\n  \"Import\": \"Importer\",\n  \"Select Action\": \"Sélectionnez l'action\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Veuillez créer un nouveau compte pour vous connecter à la zone d'administration.\",\n  \"First Name\": \"Prénom\",\n  \"Last Name\": \"Nom de famille\",\n  \"Email Address\": \"Adresse e-mail\",\n  \"Pick a Username\": \"Choisissez un nom d'utilisateur\",\n  \"Enter New Password\": \"Entrez un nouveau mot de passe\",\n  \"Confirm Password\": \"Confirmez le mot de passe\",\n  \"Create Account\": \"Créer un compte\",\n  \"Getting Ready\": \"Se préparer\",\n  \"Just a few more minutes\": \"Encore quelques minutes\",\n  \"Migrating Database\": \"Migration de la base de données\",\n  \"Access the Backend Panel\": \"Accéder au panneau principal\",\n  \"View Backend During Maintenance\": \"Afficher le backend pendant la maintenance\",\n  \"Perform Software Updates\": \"Effectuer des mises à jour logicielles\",\n  \"In Maintenance\": \"En maintenance\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Le site est actuellement en mode maintenance, merci de revenir plus tard.\",\n  \"Dashboard\": \"Tableau de bord\",\n  \"Administrators\": \"Administrateurs\",\n  \"Manage Admins\": \"Gérer les administrateurs\",\n  \"Create Admins\": \"Créer des administrateurs\",\n  \"Moderate Admins\": \"Modérer les administrateurs\",\n  \"Manage account suspension and ban admin accounts\": \"Gérer la suspension des comptes et bannir les comptes administrateur\",\n  \"Role Permissions\": \"Gérer les rôles\",\n  \"Team Groups\": \"Groupes\",\n  \"Manage Other Admins\": \"Gérer les autres administrateurs\",\n  \"Allow users to reset passwords and update emails.\": \"Permet de réinitialiser les mots de passe et de mettre à jour les e-mails\",\n  \"Delete Admins\": \"Supprimer les administrateurs\",\n  \"Preferences\": \"Préférences\",\n  \"Settings\": \"Réglages\",\n  \"Background Color\": \"Couleur de l'arrière-plan\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Autoriser les utilisateurs à créer de nouveaux rôles et à modifier ou supprimer des rôles inférieurs à leur rôle le plus élevé.\",\n  \"Save Changes\": \"Sauvegarder les modifications\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Ce journal affiche la liste des tentatives d’authentification réussies des administrateurs. Les données sont sauvegardées pendant :days jours.\",\n  \"Access Log\": \"Journal des accès\",\n  \"View a list of successful back-end user sign ins.\": \"Affiche la liste des authentifications réussies des utilisateurs de l’interface d’administration.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Date et heure\",\n  \"Type\": \"Type\",\n  \"IP address\": \"Adresse IP\",\n  \"Username\": \"Nom d'utilisateur\",\n  \"Login\": \"OK\",\n  \"First name\": \"Prénom\",\n  \"Last name\": \"Nom\",\n  \"Email\": \"Adresse e-mail\",\n  \"A custom schema is used for this file format.\": \"Un schéma personnalisé est utilisé pour ce format de fichier.\",\n  \"Select\": \"Sélectionner\",\n  \"Replace\": \"Remplacer\",\n  \"and\": \"et\",\n  \"Go\": \"Aller\",\n  \"Go to page\": \"Aller à la page\",\n  \"Copy to Clipboard\": \"Copier dans le presse-papier\",\n  \"Reveal Contents\": \"Révéler le contenu\",\n  \"Selected Site\": \"Site sélectionné\",\n  \"Use Emmet abbreviations\": \"Utiliser les abréviations Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Il n'existe pas d'enregistrement pour le site sélectionné. Voulez-vous en créer un ?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Les informations saisies ne correspondent à aucun utilisateur enregistré. Merci de vérifier votre saisie et de réessayer.\",\n  \"Administration Area\": \"Zone d’administration\",\n  \"Password Reset\": \"Réinitialiser le mot de passe\",\n  \"Please enter a new password.\": \"Veuillez saisir un nouveau mot de passe.\",\n  \"Password\": \"Mot de passe\",\n  \"Password Restore\": \"Restauration du mot de passe\",\n  \"Please enter your login to restore the password.\": \"Saisir votre identifiant\",\n  \"A user could not be found with a login value of ':login'\": \"L’identifiant \\\":login\\\" ne correspond à aucun utilisateur\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Un e-mail contenant les instructions a été envoyé à l’adresse e-mail de votre compte.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Données de réinitialisation du mot de passe invalides. Veuillez réessayer !\",\n  \"Unable to reset your password!\": \"Réinitialisation du mot de passe impossible !\",\n  \"Password has been reset. You may now sign in.\": \"Mot de passe réinitialisé avec succès. Vous pouvez maintenant vous connecter.\",\n  \"Restore\": \"Restaurer\",\n  \"Reset\": \"Réinitialiser\",\n  \"Stay logged in\": \"Rester connecté\",\n  \"Forgot password?\": \"Mot de passe oublié ?\",\n  \"Global Editor Settings\": \"Paramètres globaux de l'éditeur\",\n  \"Manage Widgets\": \"Gestion des Widgets\",\n  \"Add Widget\": \"Ajouter un Widget\",\n  \"Set the current layout as the default?\": \"Définir la maquette actuelle comme celle par défaut ?\",\n  \"Make Default\": \"Par défaut\",\n  \"Reset layout back to default?\": \"Réinitialisation vers la maquette par défaut ?\",\n  \"Reset Layout\": \"Réinitialisation de la maquette\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"Sélectionner une valeur\",\n  \"Width\": \"Largeur\",\n  \"full width\": \"Plein écran\",\n  \"Create Widgets\": \"Créer un widget\",\n  \"not equal to\": \"pas égal à\",\n  \"Light Mode\": \"Mode Clair\",\n  \"Dark Mode\": \"Mode Sombre\",\n  \"OS Default\": \"Basé sur votre OS\",\n  \"Create a Custom Palette\": \"Créer une palette personnalisée\",\n  \"Custom Palette\": \"Palette personnalisée\",\n  \"Primary Color\": \"Couleur principale\",\n  \"Secondary Color\": \"Couleur secondaire\",\n  \"Selection Color\": \"Couleur de sélection\",\n  \"Nav Text\": \"Texte de navigation\",\n  \"Nav Background\": \"Arrière-plan de navigation\",\n  \"Sidebar Text\": \"Texte de la barre latérale\",\n  \"Sidebar Background\": \"Arrière-plan de la barre latérale\",\n  \"Sidebar Active Text\": \"Text actif de la barre latérale\",\n  \"Sidebar Active Background\": \"Arrière-plan actif de la barre latérale\",\n  \"Sidebar Hover Background\": \"Survol d'arrière plan de la barre latérale\",\n  \"Settings Text\": \"Paramètres du texte\",\n  \"Settings Background\": \"Paramètres arrière-plan\",\n  \"Settings Item Background\": \"Paramètres élément d'arrière-plan\",\n  \"Settings Active Color\": \"Paramètres couleur active\",\n  \"Settings Active Background\": \"Paramètres arrière-plan actif\",\n  \"Settings Hover Background\": \"Paramètres survol arrière-plan\",\n  \"This name is shown in the title area of the back-end.\": \"Ce nom est affiché comme titre dans l’interface d’administration.\",\n  \"App Name\": \"Nom de l’application\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Affiché sur la page de connexion à l’interface d’administration.\",\n  \"App Tagline\": \"Slogan de l’application\",\n  \"Brand\": \"Marque\",\n  \"Upload a custom logo to use in the back-end.\": \"Logo personnalisé à utiliser dans l’interface d’administration.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Favicon personnalisé à utiliser dans l’interface d’administration.\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Logo de Navigation\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Remplace le lien du tableau de bord par un logo personnalisé dans la navigation.\",\n  \"Dashboard Icon\": \"Icône du Tableau de bord\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Utiliser une image personnalisée pour l'icône du tableau de bord (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Ce message s'affiche sur la page de connexion à l'interface d'administration.\",\n  \"Welcome Message\": \"Message de bienvenue\",\n  \"Login Page\": \"Page de connexion\",\n  \"Background Type\": \"Type d'arrière-plan\",\n  \"Flat Color\": \"Couleur plate\",\n  \"Wallpaper\": \"Fond d'écran\",\n  \"Wallpaper Size\": \"Taille du fond d'écran\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Couverture\",\n  \"Background Wallpaper Image\": \"Image de fond d'écran\",\n  \"Image\": \"Image\",\n  \"Random Autumn Images\": \"Images automnales aléatoires\",\n  \"Custom Image\": \"Image personnalisée\",\n  \"Login Page Image\": \"Image de la page de connexion\",\n  \"Colors\": \"Couleurs\",\n  \"Color Mode\": \"Mode\",\n  \"Color Preset\": \"Palettes prédéfinies\",\n  \"Menu Style\": \"Style du menu\",\n  \"Navigation\": \"Navigation\",\n  \"Custom Stylesheet\": \"Feuille de styles personnalisée\",\n  \"Styles\": \"Styles\",\n  \"Inline\": \"Horizontal\",\n  \"Text\": \"Texte\",\n  \"Tiles\": \"Tuiles\",\n  \"Collapsed\": \"Réduit\",\n  \"Icons\": \"Icônes\",\n  \"Left Side\": \"Côté gauche\",\n  \"Add New Item\": \"Ajouter un nouvel élément\",\n  \"Link Color\": \"Couleur des lien\",\n  \"Current Password\": \"Mot de passe actuel\",\n  \"New Password\": \"Nouveau mot de passe\",\n  \"Current password does not match. Please try again!\": \"Votre mot de passe actuel ne correspond pas. Veuillez réessayer !\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Votre mot de passe a expiré. Pour des raisons de sécurité, veuillez en créer un nouveau.\",\n  \"Region\": \"Région\",\n  \"Locale\": \"Langue\",\n  \"Select your desired locale for language use.\": \"Choisir une langue.\",\n  \"Timezone\": \"Fuseau horaire\",\n  \"Adjust displayed dates to this timezone.\": \"Ajuster les dates affichées à ce fuseau horaire.\",\n  \"Code Editor\": \"Éditeur de code\",\n  \"Color Scheme\": \"Coloration syntaxique\",\n  \"Word Wrap\": \"Retour à la ligne\",\n  \"Off\": \"Désactivé\",\n  \"40 Characters\": \"40 caractères\",\n  \"80 Characters\": \"80 caractères\",\n  \"Fluid\": \"Fluide\",\n  \"Font Size\": \"Taille de la police\",\n  \"Tab Size\": \"Taille de la tabulation\",\n  \"Code Folding\": \"Replier le code\",\n  \"Mark begin\": \"Marquer le début\",\n  \"Mark begin and end\": \"Marquer le début et la fin\",\n  \"Autocompletion\": \"Auto-complétion\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Auto-complétion basique (Ctrl + Espace)\",\n  \"Live Autocompletion\": \"Auto-complétion en temps réel\",\n  \"Show gutter\": \"Afficher les numéros de ligne\",\n  \"Highlight active line\": \"Sélectionner la ligne active\",\n  \"Automatically close tags\": \"Fermer Automatiquement les tags\",\n  \"Indent using tabs\": \"Indentation par tabulation\",\n  \"Show indent guides\": \"Afficher les guides d’indentation\",\n  \"Show invisible characters\": \"Afficher les caractères invisibles\",\n  \"Show print margin\": \"Afficher les marges d’impression\",\n  \"Custom styles to include in the HTML editor.\": \"Styles personnalisés à inclure dans l’editeur HTML.\",\n  \"Markup Styles\": \"Styles du balisage\",\n  \"Paragraph Formats\": \"Formats des paragraphes\",\n  \"Markup Classes\": \"Classes de style\",\n  \"Tag Name\": \"Nom de la balise\",\n  \"Label\": \"Libellé\",\n  \"Paragraph\": \"Paragraphe\",\n  \"Class Name\": \"Nom de la classe\",\n  \"Link\": \"Lien\",\n  \"Table\": \"Tableau\",\n  \"Table Cell\": \"Cellule d’un tableau\",\n  \"Allowed Tags\": \"Balises autorisées\",\n  \"The list of allowed tags.\": \"Liste des balises autorisées.\",\n  \"Markup Tags\": \"Balises\",\n  \"Allowed Empty Tags\": \"Balises vides autorisées\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Liste des balises qui ne sont pas supprimées lorsqu’elles sont vides.\",\n  \"Do Not Wrap Tags\": \"Balises non encadrées\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Liste des balises qui ne doivent pas être encadrées dans par des balises de bloc.\",\n  \"Remove Tags\": \"Supprimer des Tags\",\n  \"The list of tags that are removed together with their content.\": \"Liste des balises qui sont supprimées ainsi que leur contenu.\",\n  \"Line Breaker Tags\": \"Balise de saut de ligne\",\n  \"The list of tags that are used to place a line breaker element between.\": \"La liste des balises qui sont utilisés pour mettre des sauts de ligne.\",\n  \"Toolbar Buttons\": \"Boutons de la barre d'outils\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Les boutons de la barre d'outils a afficher par défaut dans l'éditeur de texte enrichi.\",\n  \"Insert a preset toolbar button configuration\": \"Insérer une configuration des boutons par défaut\",\n  \"Allowed Attributes\": \"Attributs autorisés\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"La liste des attributs HTML autorisés, en plus des attributs normalement autorisés.\",\n  \"Enable code snippets (Tab)\": \"Activer les extraits de code (Tab)\",\n  \"Title\": \"Titre\",\n  \"Description\": \"Description\",\n  \"Attachment\": \"Pièce jointe\",\n  \"Attachment URL\": \"Adresse URL du fichier joint\",\n  \"Add a title and description for this attachment.\": \"Ajouter un titre et une description pour cette pièce jointe.\",\n  \"Upload\": \"Envoyer\",\n  \"Are you sure?\": \"Êtes vous sûr(e) ?\",\n  \"Delete Selected\": \"Supprimer la sélection\",\n  \"Upload Error\": \"Erreur lors du téléchargement\",\n  \"Remove File\": \"Supprimer le fichier\",\n  \"Show Light Switch\": \"Afficher le voyant\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Autoriser les utilisateurs à basculer le mode couleur à partir de la navigation.\",\n  \"Create :name\": \"Créer un(e) :name\",\n  \"Update :name\": \"Mise à jour d’un(e) :name\",\n  \"Add :name\": \"Ajouter un(e) :name\",\n  \"Link :name\": \"Lier un(e) :name\",\n  \"Unlink\": \"Détacher\",\n  \"Preview :name\": \"Aperçu d’un(e) :name\",\n  \"Link a New :name\": \"Lier un(e) :name\",\n  \"Add a New :name\": \"Ajouter un(e) :name\",\n  \"Related :name Data\": \"Donnée :name liée\",\n  \":name Created\": \":name créé(e) avec succès\",\n  \":name Updated\": \":name modifié(e) avec succès\",\n  \":name Deleted\": \":name supprimé(e) avec succès\",\n  \":name Added\": \":name Ajouté(e)\",\n  \":name Linked\": \":name Lié(e)\",\n  \":name Removed\": \":name Retiré(e)\",\n  \":name Unlinked\": \":name Délié(e)\",\n  \"Form record with an ID of :id could not be found.\": \"Aucun enregistrement de formulaire ne correspond à l’ID :id.\",\n  \"Remove Selected\": \"Supprimer la sélection\",\n  \"Unlink Selected\": \"Délier les éléments sélectionnés\",\n  \"Preview the Website\": \"Aperçu du site\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Gérer les utilisateurs, les groupes et les permissions de l’interface d’administration.\",\n  \"Define permissions for administrators based on their role.\": \"Définir des permissions pour les utilisateurs en fonction de leurs rôles.\",\n  \"Add administrators to groups used for notifications and features.\": \"Ajouter des administrateurs aux groupes pour les notifications et fonctionnalités.\",\n  \"Branding & Appearance\": \"Personnaliser l’interface d’administration\",\n  \"Customize the administration area such as name, colors and logo.\": \"Personnaliser l’interface d’administration comme le nom, les couleurs ou le logo.\",\n  \"Editor Settings\": \"Préférences de l’éditeur de code\",\n  \"Change the global editor preferences.\": \"Personnaliser la configuration de l’éditeur de code, telle que la taille de la police ou la coloration syntaxique.\",\n  \"My Account\": \"Mon compte\",\n  \"Update your account details such as name, email address and password.\": \"Modifier les informations de votre compte comme le nom, l’adresse e-mail ou le mot de passe.\",\n  \"Backend Preferences\": \"Préférences d’administration\",\n  \"Manage your account preferences such as desired language.\": \"Gérer les préférences de votre compte telles que la langue utilisée.\",\n  \"security login\": \"security login sécurité authentification identification\",\n  \"List Setup\": \"Configuration de la liste\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Utilisez les cases à cocher pour sélectionner les colonnes que vous souhaitez voir dans la liste. Vous pouvez changer la position des colonnes en les faisant glisser vers le haut ou vers le bas.\",\n  \"Records Per Page\": \"Enregistrements par page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Sélectionnez le nombre d'enregistrements par page à afficher. Veuillez noter qu'un nombre élevé d'enregistrements sur une seule page peut réduire les performances.\",\n  \"Reset to Default\": \"Réinitialiser aux valeurs par défaut\",\n  \"Add Selected\": \"Ajouter la sélection\",\n  \"Create & Close\": \"Créer & Fermer\",\n  \"Creating :name...\": \"Créer un(e) :name...\",\n  \"Save & Close\": \"Sauvegarder & Fermer\",\n  \"Saving :name...\": \"Enregistrement du thème :name ...\",\n  \"Delete this record?\": \"Supprimer cet enregistrement ?\",\n  \"Deleting :name...\": \"Suppression de :name...\",\n  \"Loading...\": \"Chargement...\",\n  \"Complete\": \"Effectué\",\n  \"Please specify the modelClass property for :type\": \"Veuillez spécifier la propriété du modelClass pour :type\",\n  \"Please specify some columns to export.\": \"Veuillez spécifier les colonnes à exporter.\",\n  \"Missing column identifier\": \"Identifiant de la colonne manquant\",\n  \"Unknown column\": \"Colonne inconnue\",\n  \"Please specify some columns to import.\": \"Veuillez spécifier des colonnes à importer.\",\n  \"Please match some columns first.\": \"Veuillez d'abord faire correspondre quelques colonnes.\",\n  \"Please specify a match for the required field :label.\": \"Veuillez spécifier une correspondance pour le champ obligatoire :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"L'encodage du fichier source n'est pas reconnu. Veuillez sélectionner l'option de format de fichier personnalisé avec le codage approprié pour importer votre fichier.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Vous devez implémenter le contrôleur de comportement ListController avec l'option d'export 'useList' d'activée.\",\n  \"File export process completed!\": \"Processus d'export du fichier terminé !\",\n  \"The browser will now redirect to the file download.\": \"Le navigateur va maintenant rediriger vers le téléchargement du fichier.\",\n  \"Ignore this column\": \"Ignorer cette colonne\",\n  \"Drop column here...\": \"Déposez la colonne ici...\",\n  \"Please upload a valid CSV file.\": \"Veuillez importer un fichier CSV valide.\",\n  \"Created\": \"Créé\",\n  \"Updated\": \"Actualisé\",\n  \"Skipped\": \"Ignoré\",\n  \"Warnings\": \"Avertissements\",\n  \"Errors\": \"Erreurs\",\n  \"Skipped Rows\": \"Lignes ignorées\",\n  \"Show Ignored Columns\": \"Afficher les colonnes ignorées\",\n  \"Auto Match Columns\": \"Correspondance automatique des colonnes\",\n  \"File not found\": \"Fichier introuvable\",\n  \"There was no data supplied to export\": \"Aucune donnée à exporter\",\n  \"Created At\": \"Créé le\",\n  \"Updated At\": \"Mis à jour le\",\n  \"Deleted At\": \"Supprimé le\",\n  \"Created By\": \"Créé par\",\n  \"Updated By\": \"Mis à jour par\",\n  \"Deleted By\": \"Supprimé par\",\n  \"Create Dashboard\": \"Créer un tableau de bord\",\n  \"Edit Dashboard\": \"Modifier le tableau de bord\",\n  \"The dashboard was successfully created.\": \"Le tableau de bord a été créé avec succès.\",\n  \"The dashboard was successfully updated.\": \"Le tableau de bord a été mis à jour avec succès.\",\n  \"This is a system generated dashboard and cannot be deleted.\": \"Il s'agit d'un tableau de bord généré par le système et ne peut pas être supprimé.\",\n  \"Dashboard Name\": \"Nom du tableau de bord\",\n  \"Please enter the dashboard name\": \"Veuillez entrer le nom du tableau de bord\",\n  \"Please enter the dashboard code\": \"Veuillez entrer le code du tableau de bord\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"Le code ne peut contenir que des lettres latines, des chiffres et des tirets\",\n  \"Icon\": \"Icône\",\n  \"Please select an icon\": \"Veuillez sélectionner une icône\",\n  \"Global Access\": \"Accès global\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Les tableaux de bord avec l'accès global activé peuvent être consultés par tous les utilisateurs, mais cela ne donne pas les permissions d'édition.\",\n  \"Hide Interval\": \"Masquer l'intervalle\",\n  \"Check this if the dashboard does not use the date range picker.\": \"Cochez ceci si le tableau de bord n'utilise pas le sélecteur de plage de dates.\",\n  \"API Code\": \"Code API\",\n  \"A unique code to refer to this dashboard using external systems.\": \"Un code unique pour référencer ce tableau de bord depuis des systèmes externes.\",\n  \"Select Dashboard\": \"Sélectionner un tableau de bord\",\n  \"Value\": \"Valeur\",\n  \"Difference with the previous period\": \"Différence avec la période précédente\",\n  \"Group\": \"Groupe\",\n  \"Compare Totals\": \"Comparer les totaux\",\n  \"Interval\": \"Intervalle\",\n  \"Date\": \"Date\",\n  \"You don't have access to any dashboards.\": \"Vous n'avez accès à aucun tableau de bord.\",\n  \"No dashboards have been set up yet.\": \"Aucun tableau de bord n'a encore été configuré.\",\n  \"Import Dashboard\": \"Importer un tableau de bord\",\n  \"The requested dashboard could not be found.\": \"Le tableau de bord demandé n'a pas pu être trouvé.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Le mode débug est activé. Ceci n’est pas recommandé pour les applications en production.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"l’URL pour l’administration :name est trop générique. Veuillez choisir quelque chose de plus unique.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Un compte avec un identifiant générique :name a été trouvé. Veuillez renommer ce compte administrateur.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"L’extension PHP :name n’est pas installée. Veuillez installer la librairie et activer l’extension.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Le plugin :name est une dépendance mais n'est pas installé. Veuillez installer le plugin.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"PHP ne peut pas écrire dans le répertoire :name et ses sous-dossiers. Veuillez modifier les permissions en écriture du serveur web pour ce répertoire.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Votre compte n'a pas les permissions nécessaires pour créer ou modifier des tableaux de bord.\",\n  \"No records found\": \"Aucun enregistrement trouvé\",\n  \"Apply Changes\": \"Appliquer les modifications\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Erreur lors du chargement des données du widget. Consultez la console d'erreur du navigateur pour plus de détails.\",\n  \"Configure the widget\": \"Configurer le widget\",\n  \"to manage its settings.\": \"pour gérer ses paramètres.\",\n  \"Includes\": \"Inclut\",\n  \"Excludes\": \"Exclut\",\n  \"Manage Roles\": \"Gérer les rôles\",\n  \"Manage Groups\": \"Groupes\",\n  \"Customize Backend\": \"Personnaliser l’interface d’administration\"\n}"
  },
  {
    "path": "modules/backend/lang/hu/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'A(z) :type mezőtípus érvénytelen.',\n    'options_method_invalid_model' => 'A(z) \\':field\\' tulajdonság nem passzol a modellhez. Próbálja meghatározni a beállítást, ami megfelelő a(z) :model osztály számára.',\n    'options_method_not_exists' => 'A(z) :model osztálynak egy :method() nevű metódust kell definiálnia a(z) \\':field\\' űrlapmező számára, ami visszaadja a beállításokat.',\n    'colors_method_not_exists' => 'A(z) :model modell osztálynak egy :method() nevű metódust kell definiálnia a(z) \\':field\\' űrlapmező számára, ami visszaadja a html HEX kódot.',\n  ],\n  'widget' => [\n    'not_registered' => 'A(z) \\':name\\' widget osztálynév regisztrálása nem történt meg.',\n    'not_bound' => 'A(z) \\':name\\' osztálynevű widget kötése nem történt meg a vezérlővel.',\n  ],\n  'page' => [\n    'untitled' => 'Névtelen',\n    'not_found' => [\n      'label' => 'Az oldal nem található',\n      'help' => 'A megadott webcím alatt nem jeleníthető meg tartalom. Kérjük próbálkozzon más címmel.',\n      'back_link' => 'Vissza az előző oldalra',\n    ],\n    'access_denied' => [\n      'label' => 'Hozzáférés megtagadva',\n      'help' => 'Nem rendelkezik a szükséges engedélyekkel ennek a lapnak a megtekintéséhez.',\n      'cms_link' => 'Vissza a látogatói oldalra',\n    ],\n    'no_database' => [\n      'label' => 'Az adatbázis nem elérhető',\n      'help' => 'Kérjük ellenőrizze a hozzáférési adatok helyességét majd próbálja újra betölteni az oldalt.',\n      'cms_link' => 'Vissza a weboldalra',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'A(z) \\':name\\' részlap nem található.',\n    'invalid_name' => 'Helytelen részlap név: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Helytelen AJAX handler név: :name.',\n    'not_found' => 'A(z) \\':name\\' AJAX handler nem található.',\n  ],\n  'account' => [\n    'impersonate' => 'Átjelentkezés a fiókba',\n    'impersonate_confirm' => 'Biztos, hogy átjelentkezik a felhasználó saját fiókjába? Ezáltal a jelenlegi munkamenetből ki lesz jelentkeztetve.',\n    'impersonate_success' => 'Sikeresen átjelentkezett a másik fiókba',\n    'impersonate_working' => 'Átjelentkezés...',\n    'impersonating' => 'Átjelentkezve mint :full_name',\n    'stop_impersonating' => 'Visszajelentkezés',\n    'signed_in_as' => 'Belépve mint :full_name',\n    'sign_out' => 'Kijelentkezés',\n    'login_prompt' => 'Üdvözöljük újra! Kérjük jelentkezzen be a weboldal menedzseléséhez.',\n    'login_placeholder' => 'felhasználó',\n    'password_placeholder' => 'jelszó',\n    'enter_email' => 'Adja meg az e-mail címét',\n    'email_placeholder' => 'e-mail cím',\n    'apply' => 'Alkalmaz',\n    'cancel' => 'Mégsem',\n    'delete' => 'Törlés',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Vezérlőpult',\n    'widget_inspector_title' => 'Widget testreszabása',\n    'widget_inspector_description' => 'A jelenlegi widgethez tartozó beállítások.',\n    'widget_columns_label' => 'Szélesség :columns',\n    'widget_columns_description' => 'A widget szélessége, egy 1 és 10 közötti szám.',\n    'widget_columns_error' => 'Adja meg a widget szélességét egy 1 és 10 közötti számként.',\n    'columns' => '{1} oszlop|[2,Inf] oszlop',\n    'widget_new_row_label' => 'Új sorba',\n    'widget_new_row_description' => 'A widget új sorba helyezése.',\n    'widget_title_label' => 'Megjelenő cím',\n    'widget_title_error' => 'A widget címének megadása kötelező.',\n    'reset_layout_success' => 'A visszaállítás megtörtént.',\n    'make_default_success' => 'A jelenlegi elrendezés lett az alapértelmezett.',\n    'collapse_all' => 'Összes becsukása',\n    'expand_all' => 'Összes kibontása',\n    'status' => [\n      'widget_title_default' => 'Rendszer állapota',\n      'update_available' => '{0} frissítés érhető el!|{1} frissítés érhető el!|[2,Inf] frissítés érhető el!',\n      'updates_pending' => 'Függőben lévő frissítések',\n      'updates_nil' => 'A weboldal naprakész',\n      'updates_link' => 'Frissítés',\n      'warnings_pending' => 'Függőben lévő teendők',\n      'warnings_nil' => 'Minden rendben van',\n      'warnings_link' => 'Megtekintés',\n      'core_build' => 'Verzió',\n      'event_log' => 'Esemény napló',\n      'request_log' => 'Kérelem napló',\n      'app_birthday' => 'Telepítve',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Üdvözöljük!',\n      'welcome_back_name' => 'Köszönjük, hogy visszatért a(z) :app weboldalra, :name.',\n      'welcome_to_name' => 'Köszöntjük a(z) :app weboldalon, :name.',\n      'first_sign_in' => 'Ez az első alkalom, hogy bejelentkezett.',\n      'last_sign_in' => 'Legutóbbi bejelentkezése:',\n      'view_access_logs' => 'Hozzáférés napló megtekintése',\n      'nice_message' => 'Legyen jó napja!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Admin',\n    'list_title' => 'Adminok kezelése',\n    'new' => 'Új admin',\n    'first_name' => 'Vezetéknév',\n    'last_name' => 'Keresztnév',\n    'full_name' => 'Teljes név',\n    'email' => 'E-mail cím',\n    'role_field' => 'Szerepkör',\n    'role_comment' => 'Meghatározza a felhasználó jogosultságait. Felülbírálható a felhasználó adatlapján, az Engedélyek fülön.',\n    'groups' => 'Csoportok',\n    'groups_comment' => 'Adja meg, hogy a felhasználó melyik csoport(ok)ba tartozzon.',\n    'avatar' => 'Profilkép',\n    'password' => 'Jelszó',\n    'password_confirmation' => 'Jelszó megerősítése',\n    'permissions' => 'Engedélyek',\n    'account' => 'Profil',\n    'superuser' => 'Szuperadmin',\n    'superuser_comment' => 'Korlátlan hozzáférést biztosít az admin felülethez.',\n    'send_invite' => 'Meghívó küldése e-mailben',\n    'send_invite_comment' => 'Csak a belépéshez szükséges adatokat tartalmazza.',\n    'delete_confirm' => 'Valóban törölni akarja ezt a felhasználót?',\n    'return' => 'Vissza az adminokhoz',\n    'allow' => 'Engedélyezés',\n    'inherit' => 'Öröklés',\n    'deny' => 'Tiltás',\n    'activated' => 'Aktivált',\n    'last_login' => 'Bejelentkezve',\n    'created_at' => 'Létrehozva',\n    'updated_at' => 'Módosítva',\n    'deleted_at' => 'Törölve',\n    'show_deleted' => 'Töröltek mutatása',\n    'group' => [\n      'name' => 'Csoport',\n      'name_field' => 'Név',\n      'name_comment' => 'A név a csoport létrehozásnál és szerkesztésnél jelenik meg.',\n      'description_field' => 'Leírás',\n      'is_new_user_default_field_label' => 'Alapértelmezett csoport',\n      'is_new_user_default_field_comment' => 'Az új adminisztrátorok hozzáadása ehhez a csoporthoz.',\n      'code_field' => 'Kód',\n      'code_comment' => 'Adjon meg egy egyedi kódot, ha az API-val kíván hozzáférni.',\n      'list_title' => 'Csoportok',\n      'new' => 'Új csoport',\n      'delete_confirm' => 'Valóban törölni akarja az admin csoportot?',\n      'return' => 'Vissza a csoportokhoz',\n      'users_count' => 'Felhasználók',\n    ],\n    'role' => [\n      'name' => 'Szerepkör',\n      'name_field' => 'Név',\n      'name_comment' => 'A szerepkör megnevezése, ami a listákban jelenik meg.',\n      'description_field' => 'Leírás',\n      'code_field' => 'Kód',\n      'code_comment' => 'Egyedi értéket adjon meg, amit az API elérés során használhat.',\n      'list_title' => 'Szerepkörök',\n      'new' => 'Új szerepkör',\n      'delete_confirm' => 'Valóban törölni akarja a szerepkört?',\n      'return' => 'Vissza a szerepkörhöz',\n      'users_count' => 'Felhasználók',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nincs olyan hitelesített felhasználó, aki számára betölthetők vagy menthetők a beállítások.',\n    ],\n    'trashed_hint_title' => 'Ez a fiók törölve lett',\n    'trashed_hint_desc' => 'A visszaállításához kattintson a jobb alsó sarokban található ikonra.',\n  ],\n  'list' => [\n    'default_title' => 'Lista',\n    'search_prompt' => 'Keresés...',\n    'no_records' => 'Nincs megjeleníthető tartalom',\n    'missing_model' => 'Nincs modell definiálva a(z) :class osztályban használt lista viselkedéshez.',\n    'missing_column' => 'Nincsenek oszlop definíciók a(z) :columns oszlopok számára.',\n    'missing_columns' => 'A(z) :class osztályban használt listának nincsenek definiált lista oszlopai.',\n    'missing_definition' => 'A lista viselkedés nem tartalmaz oszlopot a(z) \\':field\\' mező számára.',\n    'missing_parent_definition' => 'A lista viselkedés nem tartalmaz definíciót az alábbihoz: \\':definition\\'.',\n    'behavior_not_ready' => 'Nem történt meg a lista viselkedés inicializálása. Kérjük ellenőrizze, hogy meghívta-e a makeLists() függvényt a vezérlőben.',\n    'invalid_column_datetime' => 'A(z) \\':column\\' oszlopérték nem DateTime objektum, hiányzik egy $dates hivatkozás a modellben?',\n    'pagination' => 'Megjelenítve: :from-:to / :total',\n    'first_page' => 'Első lap',\n    'last_page' => 'Utolsó lap',\n    'prev_page' => 'Előző lap',\n    'next_page' => 'Következő lap',\n    'refresh' => 'Frissítés',\n    'updating' => 'Folyamatban...',\n    'loading' => 'Betöltés...',\n    'check' => 'Bejelöl',\n    'create_button' => 'Új :name',\n    'delete_selected' => 'Eltávolítás',\n    'delete_selected_empty' => 'A törléshez előbb ki kell választani elemet.',\n    'delete_selected_confirm' => 'Valóban töröljük a kiválasztott elemeket?',\n    'delete_selected_success' => 'Sikeresen törölve lettek a kiválasztott elemek.',\n    'column_switch_true' => 'Igen',\n    'column_switch_false' => 'Nem',\n  ],\n  'object_list' => [\n    'prop_cant_be_empty' => 'A tulajdonság :property nem lehet üres',\n    'key_value_exists' => 'Az érték már definiálva lett: :property_value',\n  ],\n  'fileupload' => [],\n  'form' => [\n    'create_title' => 'Új :name',\n    'update_title' => ':name szerkesztése',\n    'preview_title' => ':name gyorsnézete',\n    'restore_success' => 'A(z) :name visszaállítása sikerült',\n    'reset_success' => 'A visszaállítás sikerült',\n    'missing_id' => 'Nincs megadva az űrlap rekord azonosítója.',\n    'missing_tab' => 'Hiányzik egy érvényes fül definíció.',\n    'missing_model' => 'A(z) :class osztályban használt űrlap viselkedésének nincs definiált modellje.',\n    'missing_definition' => 'Az űrlap viselkedés nem tartalmaz mezőt a(z) \\':field\\' mezőhöz.',\n    'action_confirm' => 'Biztos benne?',\n    'create' => 'Létrehozás',\n    'create_and_close' => 'Létrehozás és bezárás',\n    'creating' => 'Létrehozás...',\n    'creating_name' => 'A(z) :name létrehozása...',\n    'save' => 'Mentés',\n    'save_and_close' => 'Mentés és bezárás',\n    'saving' => 'Mentés...',\n    'saving_name' => 'A(z) :name mentése...',\n    'delete' => 'Törlés',\n    'deleting' => 'Törlés...',\n    'confirm_delete' => 'Biztos, hogy törölhető?',\n    'confirm_delete_multiple' => 'Biztos, hogy mindegyik törölhető?',\n    'deleting_name' => 'A(z) :name törlése...',\n    'restore' => 'Visszaállítás',\n    'restoring' => 'Visszaállítás...',\n    'confirm_restore' => 'Biztos, hogy állítsuk vissza?',\n    'reset_default' => 'Alaphelyzet',\n    'resetting' => 'Visszaállítás',\n    'resetting_name' => 'A(z) :name visszaállítása',\n    'undefined_tab' => 'Egyebek',\n    'field_off' => 'Ki',\n    'field_on' => 'Be',\n    'add' => 'Hozzáadás',\n    'apply' => 'Alkalmaz',\n    'cancel' => 'Mégsem',\n    'close' => 'Bezárás',\n    'confirm' => 'Megerősítés',\n    'reload' => 'Újratöltés',\n    'complete' => 'Befejezés',\n    'ok' => 'Rendben',\n    'or' => 'vagy',\n    'confirm_tab_close' => 'Valóban be akarja zárni a fület? El fognak veszni a nem mentett módosítások.',\n    'behavior_not_ready' => 'Nem történt meg az űrlap viselkedésének inicializálása. Kérjük ellenőrizze, hogy meghívta-e az initForm() függvényt a vezérlőben.',\n    'preview_no_files_message' => 'Nincs megadva fájl.',\n    'preview_no_media_message' => 'Nincs megadva kép.',\n    'preview_no_record_message' => 'Nincs megadva mező.',\n    'select' => 'Kiválaszt',\n    'select_all' => 'mindegyik',\n    'select_none' => 'egyik sem',\n    'insert_row' => 'Sor beszúrása',\n    'insert_row_below' => 'Sor beszúrása alá',\n    'delete_row' => 'Sor törlése',\n    'concurrency_file_changed_title' => 'A fájl megváltozott',\n    'concurrency_file_changed_description' => 'A jelenleg szerkesztett fájlt egy másik felhasználó már módosította. Újratöltheti és elveszti a változtatásait, vagy felülírja a fájlt.',\n    'return_to_list' => 'Vissza a listához',\n    'no_options_found' => 'Nem találhatók lehetőségek',\n    'error' => 'Hiba',\n    'toggle_full_screen' => 'Teljes képernyőre váltás',\n  ],\n  'treeview' => [\n    'expand' => 'Kibont',\n    'collapse' => 'Összecsuk',\n    'clear_search' => 'Keresés törlése',\n    'search' => 'Keresés',\n    'command_or_document' => 'Parancs vagy dokumentum...',\n    'quick_access' => 'Gyors elérés',\n    'open' => 'Kinyit',\n    'commands' => 'Parancsok',\n  ],\n  'tabs' => [\n    'close' => 'Fül bezárása',\n    'close_all' => 'Összes bezárása',\n    'close_others' => 'Többi bezárása',\n    'close_saved' => 'Bezárás és mentés',\n    'full_screen' => 'Teljes képernyőre váltás',\n  ],\n  'modal' => [\n    'close' => 'Bezárás',\n  ],\n  'dropdownmenu' => [\n    'go_back' => 'Vissza',\n    'close_menu' => 'Menü bezárása',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Tartalom keresése',\n    'invalid_model_class' => 'A(z) \":modelClass\" modell osztály érvénytelen a tartalom kereséshez.',\n    'cancel' => 'Mégsem',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'A reláció viselkedésnek nincs semmilyen konfigurációja a következőhöz: \\':config\\'.',\n    'missing_definition' => 'A reláció viselkedés nem tartalmazza a(z) \\':field\\' mező definícióját.',\n    'missing_model' => 'A(z) :class osztályban használt reláció viselkedésnek nincs definiált modellje.',\n    'invalid_action_single' => 'Ez a művelet nem hajtható végre egyetlen kapcsolaton.',\n    'invalid_action_multi' => 'Ez a művelet nem hajtható végre több kapcsolaton.',\n    'help' => 'Kattintson egy elemre a hozzáadásához',\n    'add' => 'Hozzáadás',\n    'link_selected' => 'Kijelöltek csatolása',\n    'cancel' => 'Mégsem',\n    'close' => 'Bezárás',\n    'create' => 'Létrehozás',\n    'update' => 'Frissítés',\n    'preview' => 'Előnézet',\n    'remove_name' => 'A(z) :name eltávolítása',\n    'delete_name' => 'A(z) :name törlése',\n    'link' => 'Csatolás',\n    'unlink_name' => ':name csatolásának megszüntetése',\n  ],\n  'reorder' => [\n    'default_title' => 'Elemek újrarendezése',\n    'no_records' => 'Nincs elérhető tartalom a rendezéshez.',\n  ],\n  'model' => [\n    'name' => 'Modell',\n    'not_found' => 'Nem található :id azonosítójú \\':class\\' modell.',\n    'missing_id' => 'Nincs azonosító megadva a modell rekord kereséséhez.',\n    'missing_relation' => 'A(z) \\':class\\' modell nem tartalmaz definíciót a(z) \\':relation\\' reláció számára.',\n    'missing_method' => 'A(z) \\':class\\' modell nem tartalmaz \\':method\\' metódust.',\n    'invalid_class' => 'A(z) :class osztályban használt :model modell nem érvényes, örökölnie kell a \\\\Model osztályt.',\n    'mass_assignment_failed' => 'A tömeges hozzárendelés a(z) \\':attribute\\' modell attribútumhoz nem sikerült.',\n  ],\n  'warnings' => [\n    'tips' => 'Beállítási tippek',\n    'tips_description' => 'Az alábbi dolgokra figyeljen oda a rendszer megfelelő működése érdekében.',\n  ],\n  'editor' => [\n    'toolbar_buttons_presets' => [\n      'default' => 'Alapértelmezett',\n      'minimal' => 'Minimális',\n      'full' => 'Teljes',\n    ],\n    'paragraph_formats_comment' => 'A felvett értékek lenyíló listában fognak megjelenni.',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Beállításaim',\n    'menu_description' => 'A fiókkal kapcsolatos beállítások',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Hangsúlyos szín',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'mind',\n    'options_method_not_exists' => 'A(z) :model osztálynak kötelező definiálni a(z) :method() metódust a(z) \\':filter\\' szűrő feltételhez.',\n    'options_static_method_invalid_value' => 'A statikus metódus \\':method()\\' a(z) :class nem ad vissza érvényes beállítás tömböt.',\n    'date_all' => 'minden időszak',\n    'number_all' => 'minden szám',\n  ],\n  'import_export' => [\n    'row' => ':row sor',\n    'export_error' => 'Exportálási hiba',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Nyugat-európai)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Közép-európai)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, Dél-európai)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, Észak-európai)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cirill)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arab)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Görög)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Héber)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Török)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Északi)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Balti)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Kelta)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Nyugat-európai Euró jellel)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Média kezelése',\n  ],\n  'mediafinder' => [\n    'label' => 'Média',\n    'no_image' => 'A kép nem található',\n    'not_an_image' => 'A kiválasztott fájl nem kép',\n    'click_to_select_file' => 'Kattintson a fájl kiválasztásához',\n  ],\n  'media' => [\n    'menu_label' => 'Média',\n    'upload' => 'Feltöltés',\n    'move' => 'Áthelyezés',\n    'delete' => 'Törlés',\n    'add_folder' => 'Könyvtár létrehozása',\n    'search' => 'Keresés...',\n    'display' => 'Megjelenítés',\n    'filter_everything' => 'Összes',\n    'filter_images' => 'Kép',\n    'filter_video' => 'Videó',\n    'filter_audio' => 'Audió',\n    'filter_documents' => 'Dokumentum',\n    'library' => 'Média',\n    'size' => 'Méret',\n    'title' => 'Név',\n    'last_modified' => 'Módosítva',\n    'public_url' => 'Webcím',\n    'click_here' => 'Megtekintés',\n    'thumbnail_error' => 'Hiba a bélyegkép létrehozásánál.',\n    'return_to_parent' => 'Vissza a szülő könyvtárhoz',\n    'return_to_parent_label' => 'Eggyel vissza ..',\n    'nothing_selected' => 'Nincs kiválasztva fájl.',\n    'multiple_selected' => 'Több fájl kiválasztva.',\n    'uploading_file_num' => 'Feltöltve :number fájl...',\n    'uploading_complete' => 'Feltöltés sikeresen befejezve',\n    'uploading_error' => 'Feltöltés sikertelen',\n    'type_blocked' => 'A fájltípus blokkolva lett biztonsági okokból.',\n    'order_by' => 'Rendezés',\n    'direction' => 'Irány',\n    'direction_asc' => 'Növekvő',\n    'direction_desc' => 'Csökkenő',\n    'folder' => 'Könyvtár',\n    'no_files_found' => 'Nem található fájl a lekérésben.',\n    'delete_empty' => 'Kérjük válassza ki a törölni kívánt fájlokat.',\n    'delete_confirm' => 'Valóban törölni akarja a kiválasztott fájlokat?',\n    'error_renaming_file' => 'Hiba a fájl átnevezésében.',\n    'new_folder_title' => 'Új könyvtár',\n    'folder_name' => 'Könyvtár neve',\n    'error_creating_folder' => 'Hiba a könyvtár létrehozásánál',\n    'folder_or_file_exist' => 'Már létezik ilyen nevű fájl vagy könyvtár.',\n    'move_empty' => 'Kérjük válasszon ki fájlt az áthelyezéshez.',\n    'move_popup_title' => 'Fájlok vagy könyvtárak áthelyezése',\n    'move_destination' => 'Célkönyvtár',\n    'please_select_move_dest' => 'Kérjük válasszon célkönyvtárat.',\n    'move_dest_src_match' => 'Kérjük válasszon másik célkönyvtárat.',\n    'empty_library' => 'Kezdésként hozzon létre könyvtárat és töltsön fel fájlokat.',\n    'insert' => 'Beillesztés',\n    'crop_and_insert' => 'Vágás és beillesztés',\n    'select_single_image' => 'Kérjük válasszon ki egy képet.',\n    'selection_not_image' => 'A kiválasztott fájl nem kép.',\n    'restore' => 'Összes változtatás visszavonása',\n    'resize' => 'Átméretezés...',\n    'selection_mode_normal' => 'Normál',\n    'selection_mode_fixed_ratio' => 'Rögzített képarány',\n    'selection_mode_fixed_size' => 'Rögzített méret',\n    'height' => 'Magasság',\n    'width' => 'Szélesség',\n    'selection_mode' => 'Kiválasztás módja',\n    'resize_image' => 'Kép átméretezése',\n    'image_size' => 'Kép mérete:',\n    'selected_size' => 'Kiválasztva:',\n  ],\n  'table' => [\n    'add_item' => 'Hozzáadás',\n  ],\n  'dictionary' => [\n    'key_required' => 'A kulcs mező megadása kötelező',\n    'value_required' => 'Az érték mező megadása kötelező',\n  ],\n  'uploader' => [\n    'uploading' => 'Fájlok feltöltése',\n    'complete' => 'Feltöltés kész',\n  ],\n  'richeditor' => [\n    'upload_from_computer' => 'Feltöltés számítógépről',\n    'embedding_code' => 'Beágyazási kód',\n    'url_required' => 'A webcím megadása kötelező',\n    'url_validation' => 'A webcímnek http:// vagy https:// kell kezdődnie',\n    'add_image' => 'Kép beszúrása',\n    'add_video' => 'Videó beszúrása',\n    'add_audio' => 'Audió beszúrása',\n    'add_file' => 'Fájl beszúrása',\n    'embedding_code_required' => 'A beágyazási kód megadása kötelező',\n    'embedding_code_invalid' => 'Adjon meg érvényes HTML beágyazási kódot',\n    'embedding_code_invalid_title' => 'Érvénytelen kód',\n    'browse' => 'Böngészés a médiában',\n    'by_url' => 'Webcím szerint',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/hu.json",
    "content": "{\n  \"Cancel\": \"Mégsem\",\n  \"You are viewing as\": \"Bejelentkezve mint:\",\n  \"Preview Role\": \"Szerep előnézete\",\n  \"This lets you test the actions this role can perform.\": \"Lehetővé teszi a szerepkör által végrehajtható műveletek tesztelését.\",\n  \"View As Role\": \"Átjelentkezés\",\n  \"Return to Role Settings\": \"Vissza a beállításokhoz\",\n  \"Password must have a minimum of length of :min characters\": \"A jelszónak legalább :min karakter hosszúságúnak kell lennie\",\n  \"Password must contain at least one uppercase character.\": \"A jelszónak legalább egy nagybetűt kell tartalmaznia.\",\n  \"Password must contain at least one lowercase character.\": \"A jelszónak legalább egy kisbetűt kell tartalmaznia.\",\n  \"Password must contain at least one number.\": \"A jelszónak tartalmaznia kell legalább egy számot.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"A jelszónak legalább egy nem alfanumerikus karaktert kell tartalmaznia.\",\n  \"Welcome to your Administration Area, :name\": \"Üdvözöljük az adminisztrációs felületen, :name\",\n  \"Duplicate\": \"Másolás\",\n  \"Expand\": \"Kinyitás\",\n  \"Collapse\": \"Összecsukás\",\n  \"Move Up\": \"Mozgatás fel\",\n  \"Move Down\": \"Mozgatás le\",\n  \"Remove\": \"Eltávolítás\",\n  \"Manage Item\": \"Elem kezelése\",\n  \"Clear Filters\": \"Szűrők törlése\",\n  \"Filter Setup\": \"Szűrő beállítása\",\n  \"Apply\": \"Alkalmaz\",\n  \"Clear\": \"Alaphelyzet\",\n  \"is equal to\": \"egyenlő\",\n  \"is between\": \"között van\",\n  \"contains\": \"tartalmazza\",\n  \"is before\": \"előtte van\",\n  \"is after\": \"utána van\",\n  \"is greater than\": \"nagyobb mint\",\n  \"is less than\": \"kevesebb mint\",\n  \"1. Export output format\": \"1. CSV fájl\",\n  \"File Format\": \"Fájl formátuma\",\n  \"Delimiter Character\": \"Határoló karakter\",\n  \"Enclosure Character\": \"Elválasztó karakter\",\n  \"Escape Character\": \"Végjel karakter\",\n  \"2. Select columns to export\": \"2. Oszlopok kiválasztása\",\n  \"Columns\": \"Oszlopok\",\n  \"3. Set export options\": \"3. Exportálási beállítások\",\n  \"CSV Custom\": \"Egyedi formátum\",\n  \"1. Upload an Import File\": \"1. CSV fájl\",\n  \"Import File\": \"Fájl feltöltése\",\n  \"File Encoding\": \"Fájl kódolása\",\n  \"First row contains column titles\": \"Az első sor tartalmazza az oszlop neveit\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Hagyja bejelölve, amennyiben a CSV fájl első sora az oszlop neveket tartalmazza.\",\n  \"2. Match the File Columns to Database Fields\": \"Párosítsd a Fájl Oszlopokat az Adatbázis Mezőkkel\",\n  \"File columns\": \"Fájl oszlopok\",\n  \"Database fields\": \"Adatbázis oszlopok\",\n  \"3. Set Import Options\": \"Import Opciók Megadása\",\n  \"Export progress\": \"Exportálás folyamatban\",\n  \"Processing\": \"Folyamatban\",\n  \"Import progress\": \"Importálás folyamatban...\",\n  \"Import error\": \"Importálási hiba\",\n  \"Export error\": \"Exportálási hiba\",\n  \"Column preview\": \"Oszlop előnézete\",\n  \"Column\": \"Oszlop\",\n  \"Disable\": \"Letiltás\",\n  \"Enable\": \"Engedélyezze\",\n  \"Delete\": \"Törlés\",\n  \"Export\": \"Exportálás\",\n  \"Import\": \"Importálás\",\n  \"Select Action\": \"Művelet Kiválasztása\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Kérlek, hozz létre egy új fiókot az Adminisztrációs Felületre való bejelentkezéshez.\",\n  \"First Name\": \"Keresztnév\",\n  \"Last Name\": \"Vezetéknév\",\n  \"Email Address\": \"Email cím\",\n  \"Pick a Username\": \"Válassz felhasználónevet\",\n  \"Enter New Password\": \"Adj meg új jelszót\",\n  \"Confirm Password\": \"Jelszó megerősítése\",\n  \"Create Account\": \"Fiók létrehozása\",\n  \"Getting Ready\": \"Felkészülni\",\n  \"Just a few more minutes\": \"Csak még néhány perc\",\n  \"Migrating Database\": \"Adatbázis Migrálása\",\n  \"Access the Backend Panel\": \"Admin Felület Megnyitása\",\n  \"View Backend During Maintenance\": \"Admin panel elérése a karbantartás során\",\n  \"Perform Software Updates\": \"Szoftverfrissítések Végrehajtása\",\n  \"In Maintenance\": \"Karbantartás Alatt\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Az oldal jelenleg karbantartási módban van, kérjük, nézz vissza később.\",\n  \"Dashboard\": \"Irányítópult\",\n  \"Administrators\": \"Adminok\",\n  \"Manage Admins\": \"Adminok Kezelése\",\n  \"Create Admins\": \"Adminok Létrehozása\",\n  \"Moderate Admins\": \"Adminok Moderálása\",\n  \"Manage account suspension and ban admin accounts\": \"Fiókfelfüggesztés kezelése és adminisztrátori fiókok kitiltása\",\n  \"Role Permissions\": \"Szerepkörök Menedzselése\",\n  \"Team Groups\": \"Csoportok Menedzselése\",\n  \"Manage Other Admins\": \"Más Adminok Kezelése\",\n  \"Allow users to reset passwords and update emails.\": \"Lehetővé teszi a jelszavak visszaállítását és az e-mail címek frissítését.\",\n  \"Delete Admins\": \"Adminok Törlése\",\n  \"Preferences\": \"Preferenciák\",\n  \"Settings\": \"Beállítások\",\n  \"Background Color\": \"Háttér Színe\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Lehetővé teszi a felhasználók számára, hogy új szerepköröket hozzanak létre, és szerkesszenek vagy töröljenek olyan szerepköröket, amelyek alacsonyabbak a legmagasabb szerepüknél.\",\n  \"Save Changes\": \"Változtatások Mentése\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Ez a napló a felhasználók sikeres bejelentkezési kísérleteit listázza ki. A bejegyzéseket :days napig őrzi meg a rendszer.\",\n  \"Access Log\": \"Hozzáférés Napló\",\n  \"View a list of successful back-end user sign ins.\": \"A felhasználók sikeres bejelentkezéseinek listázása.\",\n  \"ID\": \"Azonosító\",\n  \"Date & Time\": \"Dátum & Idő\",\n  \"Type\": \"Típus\",\n  \"IP address\": \"IP cím\",\n  \"Username\": \"Felhasználónév\",\n  \"Login\": \"Belépés\",\n  \"First name\": \"Keresztnév\",\n  \"Last name\": \"Vezetéknév\",\n  \"Email\": \"E-mail cím\",\n  \"A custom schema is used for this file format.\": \"Ehhez a fájlformátumhoz egyéni séma van használatban.\",\n  \"Select\": \"Válassz\",\n  \"Replace\": \"Csere\",\n  \"and\": \"és\",\n  \"Go\": \"Ugrás\",\n  \"Go to page\": \"Ugrás az oldalra\",\n  \"Copy to Clipboard\": \"Másolás a Vágólapra\",\n  \"Reveal Contents\": \"Tartalom Megjelenítése\",\n  \"Selected Site\": \"Kiválasztott Webhely\",\n  \"Use Emmet abbreviations\": \"Emmet rövidítések használata\",\n  \"A record does not exist for the selected site. Create one?\": \"A rekord nem létezik a kiválasztott webhelyhez. Létrehozza?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"A megadott adatok nem egyeznek. Kérjük ellenőrízd őket és próbáld újra.\",\n  \"Administration Area\": \"Admin Felület\",\n  \"Password Reset\": \"Jelszó Visszaállítás\",\n  \"Please enter a new password.\": \"Adj meg egy új jelszót.\",\n  \"Password\": \"Jelszó\",\n  \"Password Restore\": \"Jelszó Visszaállítása\",\n  \"Please enter your login to restore the password.\": \"Add meg a felhasználóneved a jelszó visszaállításhoz.\",\n  \"A user could not be found with a login value of ':login'\": \"Nem található a(z) ':login' nevű felhasználó\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Amenniyben létező felhasználónevet adtál meg, az utasításokat tartalmazó üzenetet elküldtük az email címedre.\",\n  \"Invalid password reset data supplied. Please try again!\": \"A megadott jelszó visszaállítási adatok érvénytelenek. Próbáld újra!\",\n  \"Unable to reset your password!\": \"Nem állítható vissza a jelszavad!\",\n  \"Password has been reset. You may now sign in.\": \"A jelszó visszaállítás sikerült. Most már bejelentkezhetsz.\",\n  \"Restore\": \"Visszaállítás\",\n  \"Reset\": \"Alaphelyzet\",\n  \"Stay logged in\": \"Bejelentkezve maradok\",\n  \"Forgot password?\": \"Elfelejtetted a jelszavad?\",\n  \"Global Editor Settings\": \"Globális Szerkesztő Beállítások\",\n  \"Manage Widgets\": \"Widgetek Kezelése\",\n  \"Add Widget\": \"Widget Hozzáadása\",\n  \"Set the current layout as the default?\": \"A jelenlegi elrendezés legyen az alapértelmezett?\",\n  \"Make Default\": \"Elrendezés Mentése\",\n  \"Reset layout back to default?\": \"Visszaállítás az alapértelmezettre?\",\n  \"Reset Layout\": \"Elrendezés Visszaállítása\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"kérlek válassz\",\n  \"Width\": \"Szélesség\",\n  \"full width\": \"teljes szélesség\",\n  \"Create Widgets\": \"Widget Létrehozása\",\n  \"not equal to\": \"nem egyenlő\",\n  \"Light Mode\": \"Világos Mód\",\n  \"Dark Mode\": \"Sötét Mód\",\n  \"OS Default\": \"Rendszer szerinti alapértelmezett\",\n  \"Create a Custom Palette\": \"Egyéni Paletta Létrehozása\",\n  \"Custom Palette\": \"Egyéni Paletta\",\n  \"Primary Color\": \"Elsődleges Szín\",\n  \"Secondary Color\": \"Másodlagos Szín\",\n  \"Selection Color\": \"Kijelölés Színe\",\n  \"Nav Text\": \"Navigáció Szövege\",\n  \"Nav Background\": \"Navigáció Háttere\",\n  \"Sidebar Text\": \"Oldalsáv Szövege\",\n  \"Sidebar Background\": \"Oldalsáv Háttere\",\n  \"Sidebar Active Text\": \"Oldalsáv Aktív Szövege\",\n  \"Sidebar Active Background\": \"Oldalsáv Aktív Háttere\",\n  \"Sidebar Hover Background\": \"Oldalsáv Kiemelt Háttere\",\n  \"Settings Text\": \"Beállítások Szövege\",\n  \"Settings Background\": \"Beállítások Háttere\",\n  \"Settings Item Background\": \"Beállítás Elemek Háttere\",\n  \"Settings Active Color\": \"Beállítások Aktív Színe\",\n  \"Settings Active Background\": \"Beállítások Aktív Háttere\",\n  \"Settings Hover Background\": \"Beállítások Kiemelt Háttere\",\n  \"This name is shown in the title area of the back-end.\": \"A admin felület megnevezése.\",\n  \"App Name\": \"Alkalmazás Neve\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Az admin felület mottója, ami a bejelentkezési képernyőn látszik.\",\n  \"App Tagline\": \"Szlogen\",\n  \"Brand\": \"Márka\",\n  \"Upload a custom logo to use in the back-end.\": \"Egyedi logó az admin felülethez.\",\n  \"Logo\": \"Logó\",\n  \"Upload a custom favicon to use in the back-end\": \"Egyedi ikon az admin felülethez.\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigációs Logó\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"A irányítópultra mutató hivatkozás helyett egyedi logó használata a navigációban.\",\n  \"Dashboard Icon\": \"Irányítópult Ikon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Egyedi kép használata az irányítópult ikonja helyett (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Ez az üzenet az adminisztrációs felület bejelentkezési képernyőjén jelenik meg.\",\n  \"Welcome Message\": \"Üdvözlő Üzenet\",\n  \"Login Page\": \"Belépő Oldal\",\n  \"Background Type\": \"Háttér Típusa\",\n  \"Flat Color\": \"Egyszínű\",\n  \"Wallpaper\": \"Háttérkép\",\n  \"Wallpaper Size\": \"Háttérkép Méret\",\n  \"Auto\": \"Automatikus\",\n  \"Cover\": \"Borítókép\",\n  \"Background Wallpaper Image\": \"Háttérkép\",\n  \"Image\": \"Kép\",\n  \"Random Autumn Images\": \"Őszi Válogatás\",\n  \"Custom Image\": \"Saját kép\",\n  \"Login Page Image\": \"Saját Kép\",\n  \"Colors\": \"Színek\",\n  \"Color Mode\": \"Megjelenítési Mód\",\n  \"Color Preset\": \"Előre Beállított Színek\",\n  \"Menu Style\": \"Menü Stílusa\",\n  \"Navigation\": \"Navigáció\",\n  \"Custom Stylesheet\": \"Egyéni Megjelenés\",\n  \"Styles\": \"Stílusok\",\n  \"Inline\": \"Egysoros\",\n  \"Text\": \"Szöveges\",\n  \"Tiles\": \"Csempés\",\n  \"Collapsed\": \"Összezárt\",\n  \"Icons\": \"Ikonos\",\n  \"Left Side\": \"Oldalsó\",\n  \"Add New Item\": \"Új Elem Hozzáadása\",\n  \"Link Color\": \"Link Színe\",\n  \"Current Password\": \"Jelenlegi Jelszó\",\n  \"New Password\": \"Új Jelszó\",\n  \"Current password does not match. Please try again!\": \"A jelszó nem egyezik. Kérlek, próbáld újra!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Lejárt a jelszavad, kérlek, a biztonság érdekében adj meg egy új jelszót.\",\n  \"Region\": \"Régió\",\n  \"Locale\": \"Nyelv\",\n  \"Select your desired locale for language use.\": \"Válaszd ki az alapértelmezett nyelvet.\",\n  \"Timezone\": \"Időzóna\",\n  \"Adjust displayed dates to this timezone.\": \"Válaszd ki az alapértelmezett időzónát.\",\n  \"Code Editor\": \"Kódszerkesztő\",\n  \"Color Scheme\": \"Színséma\",\n  \"Word Wrap\": \"Tördelés\",\n  \"Off\": \"Nincs\",\n  \"40 Characters\": \"40 karakter\",\n  \"80 Characters\": \"80 karakter\",\n  \"Fluid\": \"Folytonos\",\n  \"Font Size\": \"Betűméret\",\n  \"Tab Size\": \"Tabulátor Mérete\",\n  \"Code Folding\": \"Kód Összecsukása\",\n  \"Mark begin\": \"Jelzés elejénél\",\n  \"Mark begin and end\": \"Jelzés elejénél és végénél\",\n  \"Autocompletion\": \"Automatikus Kiegészítés\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Egyszerű Mód (Ctrl + Szóköz)\",\n  \"Live Autocompletion\": \"Intelligens Mód\",\n  \"Show gutter\": \"Margó megjelenítése\",\n  \"Highlight active line\": \"Aktív sor kiemelése\",\n  \"Automatically close tags\": \"Automatikus kódlezárás\",\n  \"Indent using tabs\": \"Behúzás tabulátorokkal\",\n  \"Show indent guides\": \"Bekezdés megjelenítése\",\n  \"Show invisible characters\": \"Láthatatlan karakterek mutatása\",\n  \"Show print margin\": \"Nyomtatási margó mutatása\",\n  \"Custom styles to include in the HTML editor.\": \"Saját stílusok a HTML szerkesztőhöz.\",\n  \"Markup Styles\": \"Markup Stílusok\",\n  \"Paragraph Formats\": \"Bekezdés Formátumok\",\n  \"Markup Classes\": \"Markup CSS Osztályok\",\n  \"Label\": \"Címke\",\n  \"Paragraph\": \"Bekezdés\",\n  \"Class Name\": \"CSS Osztály\",\n  \"Link\": \"Hivatkozás\",\n  \"Table\": \"Táblázat\",\n  \"Table Cell\": \"Táblázat Cella\",\n  \"Allowed Tags\": \"Engedélyezett HTML Elemek\",\n  \"The list of allowed tags.\": \"Azon HTML elemek, amik használata megengedett.\",\n  \"Markup Tags\": \"Markup Elemek\",\n  \"Allowed Empty Tags\": \"Engedélyezett Üres Elemek\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Azon HTML elemek, amik üres érték esetén sem lesznek eltávolítva.\",\n  \"Do Not Wrap Tags\": \"Nem Tördelhető Elemek\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Azon HTML elemek, amik tartalma nem tördelhető.\",\n  \"Remove Tags\": \"Eltávolítható Elemek\",\n  \"The list of tags that are removed together with their content.\": \"Azon HTML elemek, amik a tartalmukkal együtt törölhetőek.\",\n  \"Line Breaker Tags\": \"Sortörő Elemek\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Azon HTML elemek, amik végén kötelezően egy új sor jelenik meg.\",\n  \"Toolbar Buttons\": \"Eszköztár Gombok\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Az alapértelmezetten megjelenő Eszköztár Gombok listája.\",\n  \"Insert a preset toolbar button configuration\": \"Előre beállított eszköztár gomb konfiguráció\",\n  \"Allowed Attributes\": \"Engedélyezett Attribútumok\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Az engedélyezett HTML attribútumok listája a normál engedélyezetteken kívül.\",\n  \"Enable code snippets (Tab)\": \"Kódrészletek engedélyezése (Tab)\",\n  \"Title\": \"Cím\",\n  \"Description\": \"Leírás\",\n  \"Attachment\": \"Csatolmány\",\n  \"Attachment URL\": \"Csatolmány webcíme\",\n  \"Add a title and description for this attachment.\": \"Add meg a csatolmány címét és a leírását.\",\n  \"Upload\": \"Feltöltés\",\n  \"Are you sure?\": \"Biztos vagy benne?\",\n  \"Delete Selected\": \"Kijelöltek Törlése\",\n  \"Upload Error\": \"Feltöltési Hiba\",\n  \"Remove File\": \"Fájl Eltávolítása\",\n  \"Show Light Switch\": \"Sötét/Világos Kapcsoló Megjelenítése\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Engedélyezi a felhasználóknak a sötét és világos mód közötti váltást a navigációból.\",\n  \"Create :name\": \":name létrehozása\",\n  \"Update :name\": \":name Frissítése\",\n  \"Add :name\": \":name hozzáadása\",\n  \"Link :name\": \":name csatolása\",\n  \"Unlink\": \"Csatolás Megszüntetése\",\n  \"Preview :name\": \":name előnézete\",\n  \"Link a New :name\": \"Új :name csatolása\",\n  \"Add a New :name\": \"Új :name hozzáadása\",\n  \"Related :name Data\": \"Kapcsolódó :name Adatok\",\n  \":name Created\": \":name Létrehozva\",\n  \":name Updated\": \":name Módosítva\",\n  \":name Deleted\": \":name Törölve\",\n  \":name Added\": \":name Hozzáadva\",\n  \":name Linked\": \":name Hozzácsatolva\",\n  \":name Removed\": \":name Eltávolítva\",\n  \":name Unlinked\": \":name Lecsatolva\",\n  \"Form record with an ID of :id could not be found.\": \"A(z) :id azonosítójú űrlap rekord nem található.\",\n  \"Remove Selected\": \"Kijelöltek Eltávolítása\",\n  \"Unlink Selected\": \"Kijelöltek Lecsatolása\",\n  \"Preview the Website\": \"Weboldal Megtekintése\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Felhasználók, jogosultságok, szerepkörök és csoportok kezelése.\",\n  \"Define permissions for administrators based on their role.\": \"Adminisztrátorok jogosultságainak meghatározása szerepük alapján.\",\n  \"Add administrators to groups used for notifications and features.\": \"Adminisztrátorok csoportokba rendezése az értesítésekhez és funkciókhoz.\",\n  \"Branding & Appearance\": \"Admin Felület Testreszabása\",\n  \"Customize the administration area such as name, colors and logo.\": \"Az admin felület nevének, színeinek, logójának, navigációjának testreszabása.\",\n  \"Editor Settings\": \"Szövegszerkesztő\",\n  \"Change the global editor preferences.\": \"A megjelenésének és működésének testreszabása.\",\n  \"My Account\": \"Fiókom\",\n  \"Update your account details such as name, email address and password.\": \"A felhasználói adatok módosítása.\",\n  \"Backend Preferences\": \"Beállításaim\",\n  \"Manage your account preferences such as desired language.\": \"A működésének testreszabása.\",\n  \"security login\": \"biztonságos bejelentkezés\",\n  \"List Setup\": \"Lista Beállítás\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Válaszd ki a listában megjelenítendő oszlopokat. Húzással az oszlopok sorrendjét is megváltoztathatod.\",\n  \"Records Per Page\": \"Rekordok Oldalanként\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Válaszd ki az oldalnként megjelenítendő rekordok számát. Vedd figyelembe, hogy nagy mennyiségű rekord egy oldalon csökkentheti az alkalmazás teljesítményét.\",\n  \"Reset to Default\": \"Visszaállítás Alapértelmezettre\",\n  \"Add Selected\": \"Kiválasztottak Hozzáadása\",\n  \"Create & Close\": \"Létrehoz & Bezár\",\n  \"Creating :name...\": \":name létrehozása...\",\n  \"Save & Close\": \"Mentés & Bezár\",\n  \"Saving :name...\": \":name mentése...\",\n  \"Delete this record?\": \"Törlöd ezt a rekordot?\",\n  \"Deleting :name...\": \":name törlése...\",\n  \"Loading...\": \"Betöltés...\",\n  \"Complete\": \"Befejez\",\n  \"Please specify the modelClass property for :type\": \"Kérlek, add meg a modelClass tulajdonságot a :type számára\",\n  \"Please specify some columns to export.\": \"Kérlek add meg az exportálandó oszlopokat.\",\n  \"Missing column identifier\": \"Hiányzó oszlop azonosító\",\n  \"Unknown column\": \"Ismeretlen oszlop\",\n  \"Please specify some columns to import.\": \"Kérlek add meg az importálandó oszlopokat.\",\n  \"Please match some columns first.\": \"Kérlek, először párosíts néhány oszlopot.\",\n  \"Please specify a match for the required field :label.\": \"Kérlek párosítsd a :label kötelező mezőt.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"A forrás fájl kódolása nem felismerhető. Kérlek válassz egyéni fájl formátumot a megfelelő kódolással a fájl importálásához.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Implementálnod kell a ListController kontroller viselkedést, ha az export 'useList' opció engedélyezve van.\",\n  \"File export process completed!\": \"A file exportálás elkészült!\",\n  \"The browser will now redirect to the file download.\": \"A böngésző most átirányít a fájl letöltéshez.\",\n  \"Ignore this column\": \"Oszlop figyelmen kívül hagyása\",\n  \"Drop column here...\": \"Dobd ide az oszlopot...\",\n  \"Please upload a valid CSV file.\": \"Kérlek tölts fel egy érvényes CSV fájlt.\",\n  \"Created\": \"Létrehozva\",\n  \"Updated\": \"Frissítve\",\n  \"Skipped\": \"Kihagyva\",\n  \"Warnings\": \"Figyelmeztetések\",\n  \"Errors\": \"Hibák\",\n  \"Skipped Rows\": \"Kihagyott Sorok\",\n  \"Show Ignored Columns\": \"Mutasd a Kihagyott Oszlopokat\",\n  \"Auto Match Columns\": \"Oszlopok Automatikus Egyeztetése\",\n  \"File not found\": \"A fájl nem található\",\n  \"There was no data supplied to export\": \"Nem lett megadva adat az exportáláshoz\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"A hibakeresési mód engedélyezve van. Ez nem ajánlott éles weboldal esetén.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"A(z) :name PHP kiterjesztés nincs telepítve. Telepítse ezt a függvénytárat és aktiválja a kiterjesztést.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"A(z) :name bővítményre szükség van, de nincs telepítve. Kérjük telepítse ezt a bővítményt.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"A(z) :name könyvtár vagy alkönyvtárai a PHP számára nem írhatóak. Adjon megfelelő engedélyeket a kiszolgálónak erre a könyvtárra.\",\n  \"Manage Roles\": \"Szerepkörök Menedzselése\",\n  \"Manage Groups\": \"Csoportok Menedzselése\",\n  \"Customize Backend\": \"Admin Felület Testreszabása\"\n}"
  },
  {
    "path": "modules/backend/lang/id/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Jenis bidang isian tidak valid karena menggunakan :type.',\n    'options_method_not_exists' => 'Kelas model :model harus menentukan metode :method() yang mengembalikan opsi untuk bidang isian \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'Widget bernama \\':name\\' belum terdaftar',\n    'not_bound' => 'Widget dengan kelas bernama \\':name\\' belum terikat pada controller',\n  ],\n  'page' => [\n    'untitled' => 'Tidak ada judul',\n    'access_denied' => [\n      'label' => 'Akses ditolak',\n      'help' => 'Anda tidak memiliki izin untuk melihat halaman ini.',\n      'cms_link' => 'Kembali ke back-end',\n    ],\n  ],\n  'partial' => [\n    'not_found' => 'Potongan halaman \\':name\\' tidak ditemukan.',\n  ],\n  'account' => [\n    'sign_out' => 'Keluar',\n    'login_placeholder' => 'Nama Pengguna',\n    'password_placeholder' => 'Kata Sandi',\n    'enter_email' => 'Masukan email Anda',\n    'email_placeholder' => 'Email',\n    'apply' => 'Terapkan',\n    'cancel' => 'Batalkan',\n    'delete' => 'Hapus',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Dasbor',\n    'widget_inspector_title' => 'Konfigurasi widget',\n    'widget_inspector_description' => 'Konfigurasi laporan widget',\n    'widget_columns_label' => 'Lebar :columns',\n    'widget_columns_description' => 'Lebar widget, di antara angka 1 sampai 10.',\n    'widget_columns_error' => 'Silakan masukan angka lebar widget di antara 1 sampai 10.',\n    'columns' => '{1} kolom|[2,Inf] kolom',\n    'widget_new_row_label' => 'Paksa untuk membuat baris baru',\n    'widget_new_row_description' => 'Letakkan widget pada baris baru.',\n    'widget_title_label' => 'Titel widget',\n    'widget_title_error' => 'Titel widget diperlukan.',\n    'status' => [\n      'widget_title_default' => 'Status sistem',\n      'update_available' => '{0} pembaruan tersedia!|{1} pembaruan tersedia!|[2,Inf] pembaruan tersedia!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Kelola Administrator',\n    'new' => 'Administrator Baru',\n    'first_name' => 'Name Depan',\n    'last_name' => 'Name Belakang',\n    'full_name' => 'Nama Lengkap',\n    'email' => 'Email',\n    'groups' => 'Grup',\n    'groups_comment' => 'Tentukan grup apa yang harus dimiliki pengguna ini.',\n    'avatar' => 'Avatar',\n    'password' => 'Kata Sandi',\n    'password_confirmation' => 'Konfirmasi kata sandi',\n    'permissions' => 'Izin',\n    'superuser' => 'Super User',\n    'superuser_comment' => 'Checkbox ini untuk memperbolehkan pengguna agar dapat mengakses semua area.',\n    'send_invite' => 'Kirim undangan lewat email',\n    'send_invite_comment' => 'Gunakan checkbox untuk mengirimkan undangan ke pengguna lewat email',\n    'delete_confirm' => 'Apakah Anda yakin akan menghapus administrator ini?',\n    'return' => 'Kembali ke menu administrator',\n    'allow' => 'Boleh',\n    'inherit' => 'Mewarisi',\n    'deny' => 'Tolak',\n    'group' => [\n      'name' => 'Grup',\n      'name_field' => 'Nama',\n      'description_field' => 'Deskripsi',\n      'is_new_user_default_field' => 'Tambahkan administrator baru pada grup ini secara original',\n      'code_field' => 'Kode',\n      'code_comment' => 'Masukkan kode unik jika Anda ingin mengakses ini dengan API.',\n      'list_title' => 'Kelola Grup',\n      'new' => 'Grup Administrator Baru',\n      'delete_confirm' => 'Apakah Anda yakin akan menghapus grup administrator ini?',\n      'return' => 'Kembali ke menu grup',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Tidak ada pengguna dengan autentikasi untuk mengatur atau menyimpan pengaturan.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Tabel',\n    'search_prompt' => 'Pencarian...',\n    'no_records' => 'Tidak ada data dalam tampilan ini.',\n    'missing_model' => 'Tidak ada Behavior Model di dalam :class.',\n    'missing_column' => 'Tidak mendefinisikan sebuah kolom :columns.',\n    'missing_columns' => 'Tabel yang digunakan dalam :class belum memiliki kolom.',\n    'missing_definition' => 'Behavior Tabel tidak mengandung sebuah kolom \\':field\\'.',\n    'behavior_not_ready' => 'Behavior Tabel belum diinisialisasi, periksa apakah Anda telah menggunakan makeLists() di dalam controller Anda.',\n    'invalid_column_datetime' => 'Nilai kolom \\':column\\' bukan objek DateTime, apakah Anda lupa menggunakan $dates dalam Model?',\n    'pagination' => 'Menampilkan data: :from s/d :to dari :total',\n    'prev_page' => 'Sebelumnya',\n    'next_page' => 'Berikutnya',\n    'loading' => 'Memuat...',\n    'delete_selected' => 'Hapus yang dipilih',\n    'delete_selected_empty' => 'Tidak ada data yang dipilih untuk dihapus.',\n    'delete_selected_confirm' => 'Hapus data yang dipilih?',\n    'delete_selected_success' => 'Berhasil menghapus data yang dipilih.',\n  ],\n  'fileupload' => [],\n  'form' => [\n    'create_title' => ':name Baru',\n    'update_title' => 'Ubah :name',\n    'preview_title' => 'Tampilan :name',\n    'missing_id' => 'Form record ID belum ditentukan.',\n    'missing_model' => 'Form Behavior yang digunakan dalam :class belum mendefinisikan model.',\n    'missing_definition' => 'Form Behavior tidak berisi bidang isian untuk \\':field\\'.',\n    'action_confirm' => 'Apakah Anda yakin?',\n    'create' => 'Buat',\n    'create_and_close' => 'Buat dan tutup',\n    'creating' => 'Membuat...',\n    'creating_name' => 'Membuat :name...',\n    'save' => 'Simpan',\n    'save_and_close' => 'Simpan dan tutup',\n    'saving' => 'Menyimpan...',\n    'saving_name' => 'Menyimpan :name...',\n    'delete' => 'Menghapus',\n    'deleting' => 'Menghapus...',\n    'deleting_name' => 'Menghapus :name...',\n    'reset_default' => 'Reset kembali ke awal',\n    'resetting' => 'Pengaturan ulang',\n    'resetting_name' => 'Pengaturan ulang :name',\n    'undefined_tab' => 'Lain-lain',\n    'field_off' => 'Off',\n    'field_on' => 'On',\n    'add' => 'Tambah',\n    'apply' => 'Terapkan',\n    'cancel' => 'Batal',\n    'close' => 'Tutup',\n    'confirm' => 'Memastikan',\n    'reload' => 'Muat ulang',\n    'ok' => 'OK',\n    'or' => 'atau',\n    'confirm_tab_close' => 'Apakah Anda yakin akan menutup tab? Perubahan yang belum tersimpan akan menghilang.',\n    'behavior_not_ready' => 'Form Behavior belum terinisialisasi, periksa apakah Anda telah menggunakan initForm() pada controller Anda.',\n    'preview_no_files_message' => 'Tidak ada berkas yang diunggah',\n    'select' => 'Pilih',\n    'select_all' => 'Pilih Semua',\n    'select_none' => 'Pilih tidak ada',\n    'insert_row' => 'Buat Baris',\n    'delete_row' => 'Hapus Baris',\n    'concurrency_file_changed_title' => 'Berkas telah diubah',\n    'concurrency_file_changed_description' => 'Berkas yang Anda sunting telah diubah di dalam penyimpanan oleh pengguna lain. Anda dapat memuat ulang berkas dan merelakan perubahan yang telah Anda buat atau menimpa berkas pada penyimpanan.',\n  ],\n  'relation' => [\n    'missing_config' => 'Relation Behavior tidak memiliki pengaturan untuk \\':config\\'.',\n    'missing_definition' => 'Relation Behavior tidak berisi tentuan untuk \\':field\\'.',\n    'missing_model' => 'Relation Behavior yang digunakan dalam :class belum mendefinisikan model.',\n    'invalid_action_single' => 'Aksi ini tidak dapat dilakukan di dalam relasi tunggal.',\n    'invalid_action_multi' => 'Aksi ini tidak dapat dilakukan di dalam relasi jamak.',\n    'help' => 'Klik pada item untuk menambah',\n    'add' => 'Tambah',\n    'link_selected' => 'Tautan terpilih',\n    'cancel' => 'Batal',\n    'close' => 'Tutup',\n    'create' => 'Buat',\n    'update' => 'Perbarui',\n    'preview' => 'Preview',\n    'remove_name' => 'Lepas :name',\n    'delete_name' => 'Hapus :name',\n    'link' => 'Tautan',\n    'unlink_name' => 'Buka Tautan :name',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' dengan ID :id tidak dapat ditemukan',\n    'missing_id' => 'Tidak ada ID yang spesifik untuk mencari data model.',\n    'missing_relation' => 'Model \\':class\\' tidak mengandung relasi dengan \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' tidak menggunakan metode \\':method\\'.',\n    'invalid_class' => 'Model :model yang digunakan pada :class tidak valid, model haruslah menggunakan turunan kelas \\\\Model.',\n    'mass_assignment_failed' => 'Keselarasan masal gagal untuk atribut Model \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Tips pengaturan sistem',\n    'tips_description' => 'Ada isu yang harus Anda perhatikan untuk mengatur sistem dengan tepat.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Pengaturanku',\n    'menu_description' => 'Pengaturan yang berkaitan dengan akun administrasi Anda',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Warna Aksen',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'semua',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/id.json",
    "content": "{\n  \"Cancel\": \"Batal\",\n  \"You are viewing as\": \"Anda melihat sebagai\",\n  \"Preview Role\": \"Preview Peran\",\n  \"This lets you test the actions this role can perform.\": \"Ini memungkinkan Anda menguji tindakan yang dapat dilakukan peran ini.\",\n  \"View As Role\": \"Lihat Sebagai Peran\",\n  \"Return to Role Settings\": \"Kembali ke Pengaturan Peran\",\n  \"Password must have a minimum of length of :min characters\": \"Kata sandi harus memiliki panjang minimal :min karakter\",\n  \"Password must contain at least one uppercase character.\": \"Kata sandi harus mengandung setidaknya satu karakter huruf besar.\",\n  \"Password must contain at least one lowercase character.\": \"Kata sandi harus mengandung setidaknya satu karakter huruf kecil.\",\n  \"Password must contain at least one number.\": \"Kata sandi harus berisi setidaknya satu nomor.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Kata sandi harus mengandung setidaknya satu karakter non-alfa numerik.\",\n  \"Welcome to your Administration Area, :name\": \"Selamat datang di Area Administrasi Anda, :nama\",\n  \"Duplicate\": \"Duplikat\",\n  \"Expand\": \"Ekspansi\",\n  \"Collapse\": \"Mekar\",\n  \"Move Up\": \"Pindah ke atas\",\n  \"Move Down\": \"Pindah ke bawah\",\n  \"Remove\": \"Lepas\",\n  \"Manage Item\": \"Kelola Item\",\n  \"Clear Filters\": \"Hapus Filter\",\n  \"Filter Setup\": \"Pengaturan Filter\",\n  \"Apply\": \"Terapkan\",\n  \"Clear\": \"Bersihkan\",\n  \"is equal to\": \"apakah sama dengan\",\n  \"is between\": \"apakah di antara\",\n  \"contains\": \"mengandung\",\n  \"is before\": \"apakah sebelum\",\n  \"is after\": \"apakah setelah\",\n  \"is greater than\": \"apakah lebih besar dari\",\n  \"is less than\": \"apakah kurang dari\",\n  \"1. Export output format\": \"1. Format keluaran expor\",\n  \"File Format\": \"Format Berkas\",\n  \"Delimiter Character\": \"Pembatas Karakter\",\n  \"Enclosure Character\": \"Pagar Karakter\",\n  \"Escape Character\": \"Karakter pelarian\",\n  \"2. Select columns to export\": \"2. Pilih kolom untuk diekspor\",\n  \"Columns\": \"kolom\",\n  \"3. Set export options\": \"3. Atur opsi ekspor\",\n  \"CSV Custom\": \"Kustomisasi CSV\",\n  \"1. Upload an Import File\": \"1. Unggah File Impor\",\n  \"Import File\": \"Impor Berkas\",\n  \"File Encoding\": \"Pengkodean File\",\n  \"First row contains column titles\": \"Baris pertama berisi judul kolom\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Biarkan ini dicentang jika baris pertama dalam CSV digunakan sebagai judul kolom.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Cocokkan kolom file dengan bidang database\",\n  \"File columns\": \"Kolom file\",\n  \"Database fields\": \"Bidang isian database\",\n  \"3. Set Import Options\": \"3. Atur opsi impor\",\n  \"Export progress\": \"Progres ekspor\",\n  \"Processing\": \"Sedang mengolah\",\n  \"Import progress\": \"Progres impor\",\n  \"Import error\": \"Kesalahan impor\",\n  \"Export error\": \"Kesalahan ekspor\",\n  \"Column preview\": \"Preview kolom\",\n  \"Column\": \"Kolom\",\n  \"Disable\": \"Deaktivasikan\",\n  \"Enable\": \"Aktifkan\",\n  \"Delete\": \"Hapus\",\n  \"Export\": \"Ekspor\",\n  \"Import\": \"Impor\",\n  \"Select Action\": \"Pilih Aksi\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Silakan buat akun baru untuk masuk ke Area Administrasi.\",\n  \"First Name\": \"Nama depan\",\n  \"Last Name\": \"Nama Belakang\",\n  \"Email Address\": \"Alamat email\",\n  \"Pick a Username\": \"Pilih Username\",\n  \"Enter New Password\": \"Masukan kata sandi baru\",\n  \"Confirm Password\": \"konfirmasi kata sandi\",\n  \"Create Account\": \"Buat Akun\",\n  \"Getting Ready\": \"Sedang bersiap\",\n  \"Just a few more minutes\": \"Tinggal beberapa menit lagi\",\n  \"Migrating Database\": \"Migrasi Database\",\n  \"Access the Backend Panel\": \"Akses Panel Backend\",\n  \"View Backend During Maintenance\": \"Lihat Backend Selama Pemeliharaan\",\n  \"Perform Software Updates\": \"Lakukan Pembaruan Perangkat Lunak\",\n  \"In Maintenance\": \"Sedang Dalam Pemeliharaan\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Situs sedang dalam mode pemeliharaan, silakan periksa kembali nanti.\",\n  \"Dashboard\": \"Dasbor\",\n  \"Administrators\": \"Administrator\",\n  \"Manage Admins\": \"Kelola Admin\",\n  \"Create Admins\": \"Buat Admin\",\n  \"Moderate Admins\": \"Moderasi Admin\",\n  \"Manage account suspension and ban admin accounts\": \"Kelola suspensi akun dan blokir akun admin\",\n  \"Role Permissions\": \"Kelola Peran\",\n  \"Team Groups\": \"Grup\",\n  \"Manage Other Admins\": \"Kelola Admin Lain\",\n  \"Allow users to reset passwords and update emails.\": \"Izinkan pengguna untuk mengatur ulang kata sandi dan memperbarui email\",\n  \"Delete Admins\": \"Hapus Admin\",\n  \"Preferences\": \"Preferensi\",\n  \"Settings\": \"Pengaturan\",\n  \"Background Color\": \"Warna latar belakang\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Izinkan pengguna membuat peran baru dan mengedit atau menghapus peran yang lebih rendah dari peran tertingginya.\",\n  \"Save Changes\": \"Simpan perubahan\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Catatan ini menampilkan daftar percobaan masuk yang berhasil oleh administrator. Data akan disimpan selama :days hari.\",\n  \"Access Log\": \"Akses Log\",\n  \"View a list of successful back-end user sign ins.\": \"Tampilakan daftar pengguna back-end yang berhasil masuk.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Tanggal & Waktu\",\n  \"Type\": \"Jenis\",\n  \"IP address\": \"Alamat IP\",\n  \"Username\": \"Nama belakang\",\n  \"Login\": \"Masuk\",\n  \"First name\": \"Nama depan\",\n  \"Last name\": \"Nama belakang\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"Skema kustom digunakan untuk format file ini.\",\n  \"Select\": \"Pilih\",\n  \"Replace\": \"Ganti\",\n  \"and\": \"dan\",\n  \"Go\": \"Pergi\",\n  \"Go to page\": \"Buka halaman\",\n  \"Copy to Clipboard\": \"Menyalin ke clipboard\",\n  \"Reveal Contents\": \"Ungkap Isi\",\n  \"Selected Site\": \"Situs yang Dipilih\",\n  \"Use Emmet abbreviations\": \"Gunakan singkatan Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Catatan tidak ada untuk situs yang dipilih. Buat satu?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Detail yang Anda masukkan tidak cocok dengan catatan kami. Harap periksa kembali dan coba lagi.\",\n  \"Administration Area\": \"Area Administrasi\",\n  \"Password Reset\": \"Atur ulang kata sandi\",\n  \"Please enter a new password.\": \"Masukkan kata sandi baru\",\n  \"Password\": \"Kata sandi\",\n  \"Password Restore\": \"Pemulihan Kata Sandi\",\n  \"Please enter your login to restore the password.\": \"Masukan nama pengguna Anda\",\n  \"A user could not be found with a login value of ':login'\": \"Pengguna dengan username ':login' tidak ditemukan\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Sebuah email yang berisi petunjuk pemulihan telah dikirim ke alamat email Anda.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Data untuk mengatur ulang kata sandi yang diberikan tidak valid. Silakan ulangi lagi!\",\n  \"Unable to reset your password!\": \"Tidak dapat mengatur ulang kata sandi Anda!\",\n  \"Password has been reset. You may now sign in.\": \"Kata sandi Anda telah diatur ulang. Anda dapat mengakses kembali sekarang.\",\n  \"Restore\": \"Memulihkan\",\n  \"Reset\": \"Reset\",\n  \"Stay logged in\": \"Tetap masuk\",\n  \"Forgot password?\": \"Anda lupa kata sandi?\",\n  \"Global Editor Settings\": \"Pengaturan Editor Global\",\n  \"Manage Widgets\": \"Kelola Widget\",\n  \"Add Widget\": \"Tambah Widget\",\n  \"Set the current layout as the default?\": \"Setel tata letak saat ini sebagai default?\",\n  \"Make Default\": \"Jadikan Default\",\n  \"Reset layout back to default?\": \"Setel ulang tata letak kembali ke default?\",\n  \"Reset Layout\": \"Atur Ulang Tata Letak\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"silakan pilih\",\n  \"Width\": \"Lebar Widget\",\n  \"full width\": \"Layar Lebar\",\n  \"Create Widgets\": \"Buat Widget\",\n  \"not equal to\": \"tidak sama dengan\",\n  \"Light Mode\": \"Modus Cahaya\",\n  \"Dark Mode\": \"Mode Gelap\",\n  \"OS Default\": \"Bawaan OS\",\n  \"Create a Custom Palette\": \"Buat Palet Kustom\",\n  \"Custom Palette\": \"Palet Kustom\",\n  \"Primary Color\": \"Warna Primer\",\n  \"Secondary Color\": \"Warna Sekunder\",\n  \"Selection Color\": \"Warna Pilihan\",\n  \"Nav Text\": \"Teks Nav\",\n  \"Nav Background\": \"Latar Belakang Angkatan Laut\",\n  \"Sidebar Text\": \"Teks Bilah Samping\",\n  \"Sidebar Background\": \"Latar Belakang Bilah Samping\",\n  \"Sidebar Active Text\": \"Teks Aktif Bilah Samping\",\n  \"Sidebar Active Background\": \"Latar Belakang Aktif Sidebar\",\n  \"Sidebar Hover Background\": \"Latar Belakang Hover Sidebar\",\n  \"Settings Text\": \"Teks Pengaturan\",\n  \"Settings Background\": \"Latar Belakang Pengaturan\",\n  \"Settings Item Background\": \"Pengaturan Item Latar Belakang\",\n  \"Settings Active Color\": \"Pengaturan Warna Aktif\",\n  \"Settings Active Background\": \"Pengaturan Latar Belakang Aktif\",\n  \"Settings Hover Background\": \"Pengaturan Arahkan Latar Belakang\",\n  \"This name is shown in the title area of the back-end.\": \"Nama ini ditampilkan pada area judul back-end.\",\n  \"App Name\": \"Nama Apl\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Tagline ini akan ditampilkan pada layar masuk back-end.\",\n  \"App Tagline\": \"Tagline Aplikasi\",\n  \"Brand\": \"Brand\",\n  \"Upload a custom logo to use in the back-end.\": \"Unggah kustomisasi logo untuk digunakan pada back-end.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Unggah favicon khusus untuk digunakan di back-end\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Logo Navigasi\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Mengganti tautan dasbor dengan logo khusus di navigasi.\",\n  \"Dashboard Icon\": \"Ikon Dasbor\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Gunakan gambar khusus untuk ikon dasbor (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Pesan ini ditampilkan di layar masuk untuk back-end.\",\n  \"Welcome Message\": \"Pesan Selamat Datang\",\n  \"Login Page\": \"Halaman masuk\",\n  \"Background Type\": \"Jenis Latar Belakang\",\n  \"Flat Color\": \"Warna Datar\",\n  \"Wallpaper\": \"Wallpaper\",\n  \"Wallpaper Size\": \"Ukuran Wallpaper\",\n  \"Auto\": \"Mobil\",\n  \"Cover\": \"Menutupi\",\n  \"Background Wallpaper Image\": \"Gambar Wallpaper Latar Belakang\",\n  \"Image\": \"Gambar\",\n  \"Random Autumn Images\": \"Gambar Musim Gugur Acak\",\n  \"Custom Image\": \"Gambar Kustom\",\n  \"Login Page Image\": \"Gambar Halaman Masuk\",\n  \"Colors\": \"Warna\",\n  \"Color Mode\": \"Modus Warna\",\n  \"Color Preset\": \"Prasetel Warna\",\n  \"Menu Style\": \"Gaya Menu\",\n  \"Navigation\": \"Navigasi\",\n  \"Custom Stylesheet\": \"Kustomisasi Stylesheet\",\n  \"Styles\": \"Gaya\",\n  \"Inline\": \"Di barisan\",\n  \"Text\": \"Teks\",\n  \"Tiles\": \"Ubin\",\n  \"Collapsed\": \"Runtuh\",\n  \"Icons\": \"Ikon\",\n  \"Left Side\": \"Sisi kiri\",\n  \"Add New Item\": \"Tambahkan Barang Baru\",\n  \"Link Color\": \"Warna Tautan\",\n  \"Current Password\": \"kata sandi saat ini\",\n  \"New Password\": \"kata sandi baru\",\n  \"Current password does not match. Please try again!\": \"Sandi saat ini tidak cocok. Silakan coba lagi!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Kata sandi Anda telah kedaluwarsa, harap buat kata sandi baru untuk alasan keamanan.\",\n  \"Region\": \"Wilayah\",\n  \"Locale\": \"Bahasa\",\n  \"Select your desired locale for language use.\": \"Pilih bahasa yang ingin digunakan.\",\n  \"Timezone\": \"Zona waktu\",\n  \"Adjust displayed dates to this timezone.\": \"Sesuaikan tanggal yang ditampilkan dengan zona waktu ini.\",\n  \"Code Editor\": \"Editor Kode\",\n  \"Color Scheme\": \"Skema warna\",\n  \"Word Wrap\": \"Bungkus kata\",\n  \"Off\": \"Mati\",\n  \"40 Characters\": \"40 Karakter\",\n  \"80 Characters\": \"80 Karakter\",\n  \"Fluid\": \"Cairan\",\n  \"Font Size\": \"Ukuran huruf\",\n  \"Tab Size\": \"Ukuran tab\",\n  \"Code Folding\": \"Melipat kode\",\n  \"Mark begin\": \"Tandai mulai\",\n  \"Mark begin and end\": \"Tandai awal dan akhir\",\n  \"Autocompletion\": \"Pelengkapan otomatis\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Pelengkapan Otomatis Dasar (Ctrl + Spasi)\",\n  \"Live Autocompletion\": \"Pelengkapan Otomatis Langsung\",\n  \"Show gutter\": \"Tampilkan Gutter\",\n  \"Highlight active line\": \"Sorot baris yang aktif\",\n  \"Automatically close tags\": \"Tutup tag secara otomatis\",\n  \"Indent using tabs\": \"Inden dengan tabs\",\n  \"Show indent guides\": \"Tampilkan panduan indentasi\",\n  \"Show invisible characters\": \"Tampilkan karakter yang tidak terlihat\",\n  \"Show print margin\": \"Tampilkan margin cetak\",\n  \"Custom styles to include in the HTML editor.\": \"Gaya khusus untuk disertakan dalam editor HTML.\",\n  \"Markup Styles\": \"Gaya Markup\",\n  \"Paragraph Formats\": \"Format Paragraf\",\n  \"Markup Classes\": \"Kelas Markup\",\n  \"Label\": \"Label\",\n  \"Paragraph\": \"Gugus kalimat\",\n  \"Class Name\": \"Nama kelas\",\n  \"Link\": \"Tautan\",\n  \"Table\": \"Meja\",\n  \"Table Cell\": \"Sel Tabel\",\n  \"Allowed Tags\": \"Tag yang Diizinkan\",\n  \"The list of allowed tags.\": \"Daftar tag yang diizinkan.\",\n  \"Markup Tags\": \"Tag Markup\",\n  \"Allowed Empty Tags\": \"Tag Kosong yang Diizinkan\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Daftar tag yang tidak dihapus ketika tidak ada konten di dalamnya.\",\n  \"Do Not Wrap Tags\": \"Jangan Bungkus Label\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Daftar tag yang tidak boleh dibungkus di dalam tag blok.\",\n  \"Remove Tags\": \"Hapus Tag\",\n  \"The list of tags that are removed together with their content.\": \"Daftar tag yang dihapus beserta isinya.\",\n  \"Line Breaker Tags\": \"Tag Pemutus Jalur\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Daftar tag yang digunakan untuk menempatkan elemen pemecah garis di antaranya.\",\n  \"Toolbar Buttons\": \"Tombol Bilah Alat\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Tombol Bilah Alat untuk ditampilkan di Editor Kaya secara default.\",\n  \"Insert a preset toolbar button configuration\": \"Masukkan konfigurasi tombol toolbar preset\",\n  \"Allowed Attributes\": \"Atribut yang Diizinkan\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Daftar atribut HTML yang diizinkan, selain kelonggaran normal.\",\n  \"Enable code snippets (Tab)\": \"Aktifkan cuplikan kode (Tab)\",\n  \"Title\": \"Judul\",\n  \"Description\": \"Deskripsi\",\n  \"Attachment\": \"Lampiran\",\n  \"Add a title and description for this attachment.\": \"Tambah judul dan deskripsi untuk lampiran ini.\",\n  \"Create :name\": \"Buat :name\",\n  \"Update :name\": \"Perbarui :name\",\n  \"Add :name\": \"Tambah :name\",\n  \"Link :name\": \"Tautan :name\",\n  \"Unlink\": \"Buka Tautan\",\n  \"Are you sure?\": \"Apakah Anda yakin?\",\n  \"Preview :name\": \"Preview :name\",\n  \"Link a New :name\": \"Tautan :name baru\",\n  \"Add a New :name\": \"Tambah :name baru\",\n  \"Related :name Data\": \"Hubungan data :name\",\n  \":name Created\": \":name berhasil dibuat\",\n  \":name Updated\": \":name berhasil diperbarui\",\n  \":name Deleted\": \":name berhasil dihapus\",\n  \"Form record with an ID of :id could not be found.\": \"Form untuk data dengan ID :id tidak ditemukan.\",\n  \"Preview the Website\": \"Preview situs\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Kelola pengguna administrator back-end, grup, dan perizinan.\",\n  \"Branding & Appearance\": \"Penyesuaian back-end\",\n  \"Customize the administration area such as name, colors and logo.\": \"Penyesuaian area administrasi seperti nama, warna dan logo.\",\n  \"Editor Settings\": \"Pengaturan Editor\",\n  \"Change the global editor preferences.\": \"Pengaturan Editor yang sesuai dengan keinginan Anda, seperti ukuran huruf dan skema warna.\",\n  \"My Account\": \"Akun Saya\",\n  \"Update your account details such as name, email address and password.\": \"Kelola rincian akun Anda seperti nama, alamat surel dan sandi lewat.\",\n  \"Backend Preferences\": \"Penyesuaian Back-end\",\n  \"Manage your account preferences such as desired language.\": \"Kelola penyesuaian akun Anda seperti bahasa yang diinginkan.\",\n  \"security login\": \"Kata kunci\",\n  \"List Setup\": \"Pengaturan Tabel\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Gunakan checkbox untuk memilih kolom yang ingin ditampilkan pada tabel. Anda dapat mengubah posisi kolom dengan cara menarik ke atas ke bawah.\",\n  \"Records Per Page\": \"Data per halaman\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Pilih jumlah data per halaman untuk ditampilkan. Mohon diingat, jumlah data yang banyak dalam satu halaman dapat menurunkan performa.\",\n  \"Add Selected\": \"Tambah terpilih\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Ekstensi PHP :name tidak terpasang. Silakan instalasi modul ini dan aktifkan ekstensi.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Direktori :name atau direktori di bawahnya tidak dapat ditulis oleh PHP. Silakan atur hak akses webserver yang sesuai pada direktori ini.\"\n}"
  },
  {
    "path": "modules/backend/lang/it/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Il tipo di campo :type non è valido.',\n    'options_method_not_exists' => 'La classe :model deve definire un metodo :method() che ritorni le opzioni per il campo \":field\".',\n  ],\n  'widget' => [\n    'not_registered' => 'Nessun widget \\':name\\' è stato registrato',\n    'not_bound' => 'Nessun widget \\':name\\' è stato legato al controller',\n  ],\n  'page' => [\n    'untitled' => 'Senza titolo',\n    'access_denied' => [\n      'label' => 'Accesso negato',\n      'help' => 'Non hai le autorizzazioni necessarie per accedere a questa pagina.',\n      'cms_link' => 'Ritorna al pannello di controllo',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'La vista parziale \\':name\\' non è stata trovata.',\n  ],\n  'account' => [\n    'sign_out' => 'Esci',\n    'login_placeholder' => 'login',\n    'password_placeholder' => 'password',\n    'enter_email' => 'Inserisci in tuo indirizzo e-mail',\n    'email_placeholder' => 'email',\n    'apply' => 'Applica',\n    'cancel' => 'Annulla',\n    'delete' => 'Elimina',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Dashboard',\n    'widget_inspector_title' => 'Configurazione widget',\n    'widget_inspector_description' => 'Configura il widget',\n    'widget_columns_label' => 'Larghezza :columns',\n    'widget_columns_description' => 'La larghezza del widget, un numero compreso tra 1 e 10.',\n    'widget_columns_error' => 'La larghezza del widget deve essere un numero compreso tra 1 e 10.',\n    'columns' => '{1} colonna|[2,Inf] colonne',\n    'widget_new_row_label' => 'Forza nuova riga',\n    'widget_new_row_description' => 'Inserisci il widget su una nuova riga.',\n    'widget_title_label' => 'Titolo del widget',\n    'widget_title_error' => 'Il titolo del widget è obbligatorio.',\n    'reset_layout_success' => 'Il layout è stato reimpostato',\n    'make_default_success' => 'Il layout corrente è ora il predefinito',\n    'status' => [\n      'widget_title_default' => 'Stato del sistema',\n      'update_available' => '{0} aggiornamenti disponibili!|{1} aggiornamento disponibile!|[2,Inf] aggiornamenti disponibili!',\n      'updates_pending' => 'Aggiornamenti software in attesa',\n      'updates_nil' => 'Il software è aggiornato',\n      'updates_link' => 'Aggiorna',\n      'warnings_pending' => 'Alcuni problemi hanno bisogno di attenzione',\n      'warnings_nil' => 'Nessun avviso da visualizzare',\n      'warnings_link' => 'Visualizza',\n      'core_build' => 'Build di sistema',\n      'event_log' => 'Log eventi',\n      'request_log' => 'Log richieste',\n      'app_birthday' => 'Online dal',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Benvenuto',\n      'welcome_back_name' => 'Bentornato su :app, :name.',\n      'welcome_to_name' => 'Benvenuto su :app, :name.',\n      'first_sign_in' => 'Questa è la prima volta che hai eseguito l\\'accesso.',\n      'last_sign_in' => 'Il tuo ultimo accesso è stato ',\n      'view_access_logs' => 'Visualizza log accessi',\n      'nice_message' => 'Buona giornata!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Amministratore',\n    'list_title' => 'Gestisci amministratori',\n    'new' => 'Nuovo amministratore',\n    'first_name' => 'Nome',\n    'last_name' => 'Cognome',\n    'full_name' => 'Nome completo',\n    'email' => 'Indirizzo e-mail',\n    'groups' => 'Gruppi',\n    'groups_comment' => 'Seleziona i gruppi a cui appartiene l\\'utente.',\n    'avatar' => 'Avatar',\n    'password' => 'Password',\n    'password_confirmation' => 'Conferma password',\n    'permissions' => 'Autorizzazioni',\n    'account' => 'Account',\n    'superuser' => 'Super User',\n    'superuser_comment' => 'Seleziona per consentire all\\'utente di accedere a tutte le aree.',\n    'send_invite' => 'Invia invito tramite e-mail',\n    'send_invite_comment' => 'Invia un messaggio di benvenuto contenente le credenziali per l\\'accesso.',\n    'delete_confirm' => 'Vuoi davvero eliminare questo amministratore?',\n    'return' => 'Ritorna alla lista degli amministratori',\n    'allow' => 'Consenti',\n    'inherit' => 'Eredita',\n    'deny' => 'Nega',\n    'group' => [\n      'name' => 'Gruppo',\n      'name_comment' => 'Il nome viene visualizzato nell\\'elenco dei gruppi del form di Creazione/Modifica Amministratore ',\n      'name_field' => 'Nome',\n      'description_field' => 'Descrizione',\n      'is_new_user_default_field_label' => 'Gruppo predefinito',\n      'is_new_user_default_field_comment' => 'Aggiungi i nuovi amministratori a questo gruppo per impostazione predefinita.',\n      'code_field' => 'Codice',\n      'code_comment' => 'Inserisci un codice univoco se vuoi accedere a questo elementro tramite API.',\n      'list_title' => 'Gestisci gruppi',\n      'new' => 'Nuovo gruppo',\n      'delete_confirm' => 'Vuoi davvero eliminare questo gruppo amministratore?',\n      'return' => 'Ritorna alla lista dei gruppi',\n      'users_count' => 'Utenti',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Non c\\'è nessun utente autenticato per cui caricare o salvare le preferenze.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Elenco',\n    'search_prompt' => 'Cerca...',\n    'no_records' => 'Nessun risultato trovato.',\n    'missing_model' => 'L\\'elenco utilizzato nella classe :class non ha un modello definito.',\n    'missing_column' => 'Non ci sono colonne definite per :columns.',\n    'missing_columns' => 'L\\'elenco utilizzato nella classe :class non ha un elenco di colonne definito.',\n    'missing_definition' => 'L\\'elenco non contiene una colonna per il campo \\':field\\'.',\n    'missing_parent_definition' => 'L\\\\\\'elenco non contiene una definizione per \\':definition\\'.',\n    'behavior_not_ready' => 'Il comportamento \"elenco\" non è stato inizializzato, controlla di aver chiamato il metodo makeLists() nel controller.',\n    'invalid_column_datetime' => 'Il valore della colonna \\':column\\' non è un oggetto di tipo DateTime, hai dimenticato un riferimento a $dates nel modello?',\n    'pagination' => 'Record visualizzati: :from-:to di :total',\n    'prev_page' => 'Pagina precedente',\n    'next_page' => 'Pagina successiva',\n    'refresh' => 'Ricarica',\n    'updating' => 'Aggiornamento in corso...',\n    'loading' => 'Caricamento...',\n    'check' => 'Spunta',\n    'create_button' => 'Crea :name',\n    'delete_selected' => 'Elimina selezionati',\n    'delete_selected_empty' => 'Non hai selezionato nessun record da eliminare.',\n    'delete_selected_confirm' => 'Elimina i record selezionati?',\n    'delete_selected_success' => 'I record selezionati sono stati eliminati con successo.',\n    'column_switch_true' => 'Sì',\n    'column_switch_false' => 'No',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Fai clic su %s o trascina un file qui per eseguire il caricamento',\n  ],\n  'form' => [\n    'create_title' => 'Crea :name',\n    'update_title' => 'Modifica :name',\n    'preview_title' => 'Anteprima :name',\n    'reset_success' => 'Reimpostazione completata',\n    'missing_id' => 'L\\'ID del record non è stato specificato.',\n    'missing_model' => 'Il form utilizzato nella classe :class non ha un modello definito.',\n    'missing_definition' => 'Il form non contiene il campo \\':field\\'.',\n    'action_confirm' => 'Sei sicuro?',\n    'create' => 'Crea',\n    'create_and_close' => 'Crea e chiudi',\n    'creating' => 'Creazione in corso...',\n    'creating_name' => 'Creazione :name in corso...',\n    'save' => 'Salva',\n    'save_and_close' => 'Salva e chiudi',\n    'saving' => 'Salvataggio in corso...',\n    'saving_name' => 'Salvataggio :name in corso...',\n    'delete' => 'Elimina',\n    'deleting' => 'Eliminazione in corso...',\n    'confirm_delete' => 'Elimina record?',\n    'confirm_delete_multiple' => 'Elimina i record selezionati?',\n    'deleting_name' => 'Eliminazione :name in corso...',\n    'reset_default' => 'Ripristina predefiniti',\n    'resetting' => 'Ripristino in corso',\n    'resetting_name' => 'Ripristino :name in corso',\n    'undefined_tab' => 'Varie',\n    'field_off' => 'Off',\n    'field_on' => 'On',\n    'add' => 'Aggiungi',\n    'apply' => 'Applica',\n    'cancel' => 'Annulla',\n    'close' => 'Chiudi',\n    'confirm' => 'Conferma',\n    'reload' => 'Ricarica',\n    'complete' => 'Completo',\n    'ok' => 'OK',\n    'or' => 'o',\n    'confirm_tab_close' => 'Vuoi davvero chiudere il tab? Le modifiche non salvate andranno perse.',\n    'behavior_not_ready' => 'Il comportamento del form non è stato inizializzato, verifica di aver chiamato il metodo initForm() nel controller.',\n    'preview_no_files_message' => 'Non ci sono file caricati.',\n    'preview_no_record_message' => 'Nessun record selezionato.',\n    'select' => 'Seleziona',\n    'select_all' => 'seleziona tutto',\n    'select_none' => 'deseleziona tutto',\n    'insert_row' => 'Inserisci riga',\n    'insert_row_below' => 'Inserisci riga sotto',\n    'delete_row' => 'Elimina riga',\n    'concurrency_file_changed_title' => 'Il file è stato cambiato',\n    'concurrency_file_changed_description' => 'Il file che stavi modificando è stato cambiato da un altro utente. Puoi ricaricare il file e perdere le tue modifiche oppure sovrascrivere il file sul disco.',\n    'return_to_list' => 'Ritorna all\\'elenco',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Trova record',\n  ],\n  'relation' => [\n    'missing_config' => 'La relazione non ha nessuna configurazione per \\':config\\'.',\n    'missing_definition' => 'La relazione non contiene una definizione per il campo \\':field\\'.',\n    'missing_model' => 'La relazione utilizzata nella classe :class non ha un modello definito.',\n    'invalid_action_single' => 'L\\'azione non può essere eseguita su una relazione singola.',\n    'invalid_action_multi' => 'L\\'azione non può essere eseguita su una relazione multipla.',\n    'help' => 'Fai clic su un elemento per aggiungere',\n    'add' => 'Aggiungi',\n    'link_selected' => 'Collega selezionati',\n    'cancel' => 'Annulla',\n    'close' => 'Chiudi',\n    'create' => 'Crea',\n    'update' => 'Aggiorna',\n    'preview' => 'Visualizza',\n    'remove_name' => 'Rimuovi :name',\n    'delete_name' => 'Elimina :name',\n    'link' => 'Collega',\n    'unlink_name' => 'Scollega :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Riordina record',\n    'no_records' => 'Non ci sono record disponibili per ordinare.',\n  ],\n  'model' => [\n    'name' => 'Modello',\n    'not_found' => 'Nessun modello \\':class\\' con ID :id trovato.',\n    'missing_id' => 'Nessun ID specificato per la ricerca.',\n    'missing_relation' => 'Il modello \\':class\\' non contiene una definizione per la relazione \\':relation\\'.',\n    'missing_method' => 'Il modello \\':class\\' non contiene un metodo \\':method\\'.',\n    'invalid_class' => 'Il modello :model utilizzato nella classe :class non è valido, deve ereditare la classe \\\\Model.',\n    'mass_assignment_failed' => 'Assegnazione massiva fallita per l\\'attributo \\':attribute\\' del modello.',\n  ],\n  'warnings' => [\n    'tips' => 'Suggerimenti per la configurazione del sistema',\n    'tips_description' => 'Ci sono elementi a cui è necessario prestare attenzione al fine di configurare il sistema in maniera corretta.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Impostazioni personali',\n    'menu_description' => 'Impostazioni legate al tuo account amministratore',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accent color',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'tutto',\n    'options_method_not_exists' => 'Il modello :model deve definire un metodo :method() che ritorni le opzioni per il filtro \\':filter\\'.',\n    'date_all' => 'tutte',\n  ],\n  'import_export' => [\n    'export_error' => 'Errore di esportazione',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latino-1, Europa Occidentale)',\n      'iso_8859_2' => 'ISO-8859-2 (Latino-2, Europa Centrale)',\n      'iso_8859_3' => 'ISO-8859-3 (Latino-3, Europa Meridionale)',\n      'iso_8859_4' => 'ISO-8859-4 (Latino-4, Europa Settentrionale)',\n      'iso_8859_5' => 'ISO-8859-5 (Latino, Cirillico)',\n      'iso_8859_6' => 'ISO-8859-6 (Latinp, Arabo)',\n      'iso_8859_7' => 'ISO-8859-7 (Latino, Greco)',\n      'iso_8859_8' => 'ISO-8859-8 (Latino, Ebraico)',\n      'iso_8859_0' => 'ISO-8859-9 (Latino-5, Turco)',\n      'iso_8859_10' => 'ISO-8859-10 (Latino-6, Nordico)',\n      'iso_8859_11' => 'ISO-8859-11 (Latino, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latino-7, Baltico)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtico)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Revisione di Europa Occidentale con il simbolo dell\\'euro)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Gestisci elementi multimediali',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'default_prompt' => 'Fai clic sul pulsante %s per trovare un elemento multimediale',\n  ],\n  'media' => [\n    'menu_label' => 'Elementi multimediali',\n    'upload' => 'Carica',\n    'move' => 'Sposta',\n    'delete' => 'Elimina',\n    'add_folder' => 'Aggiungi cartella',\n    'search' => 'Cerca',\n    'display' => 'Visualizza',\n    'filter_everything' => 'Tutto',\n    'filter_images' => 'Immagini',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Documenti',\n    'library' => 'Libreria',\n    'size' => 'Dimensione',\n    'title' => 'Titolo',\n    'last_modified' => 'Ultima modifica',\n    'public_url' => 'URL pubblico',\n    'click_here' => 'Fai clic qui',\n    'thumbnail_error' => 'Errore durante la generazione dell\\'anteprima.',\n    'return_to_parent' => 'Ritorna alla cartella superiore',\n    'return_to_parent_label' => 'Torna su ..',\n    'nothing_selected' => 'Nessun elemento selezionato.',\n    'multiple_selected' => 'Elementi multipli selezionati.',\n    'uploading_file_num' => 'Caricamento in corso di :number file(s)...',\n    'uploading_complete' => 'Caricamento completato',\n    'uploading_error' => 'Caricamento fallito',\n    'type_blocked' => 'Il tipo di file utilizzato è bloccato per questioni di sicurezza.',\n    'order_by' => 'Ordina per',\n    'folder' => 'Cartella',\n    'no_files_found' => 'Nessun file corrisponde alla tua richiesta.',\n    'delete_empty' => 'Seleziona elementi da eliminare.',\n    'delete_confirm' => 'Vuoi davvero eliminare gli elementi selezionati?',\n    'error_renaming_file' => 'Errore durante la rinominazione dell\\'elemento',\n    'new_folder_title' => 'Nuova cartella',\n    'folder_name' => 'Nome della cartella',\n    'error_creating_folder' => 'Errore durante la creazione della cartella',\n    'folder_or_file_exist' => 'Una cartella o un file con il nome specificato è già esistente.',\n    'move_empty' => 'Selezione elementi da spostare.',\n    'move_popup_title' => 'Sposta file o cartelle',\n    'move_destination' => 'Cartella di destinazione',\n    'please_select_move_dest' => 'Seleziona una cartella di destinazione.',\n    'move_dest_src_match' => 'Seleziona un\\'altra cartella di destinazione.',\n    'empty_library' => 'La libreria è vuota. Carica dei files o crea delle cartelle per iniziare.',\n    'insert' => 'Inserisci',\n    'crop_and_insert' => 'Ritaglia e inserisci',\n    'select_single_image' => 'Seleziona una singola immagine.',\n    'selection_not_image' => 'L\\'elemento selezionato non è un\\'immagine.',\n    'restore' => 'Annulla tutte le modifiche',\n    'resize' => 'Ridimensiona...',\n    'selection_mode_normal' => 'Normale',\n    'selection_mode_fixed_ratio' => 'Rapporto fisso',\n    'selection_mode_fixed_size' => 'Dimensione fissa',\n    'height' => 'Altezza',\n    'width' => 'Larghezza',\n    'selection_mode' => 'Metodo di selezione',\n    'resize_image' => 'Ridimensiona immagine',\n    'image_size' => 'Dimensione immagine:',\n    'selected_size' => 'Selezionati:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/it.json",
    "content": "{\n  \"Cancel\": \"Annulla\",\n  \"You are viewing as\": \"Stai visualizzando come\",\n  \"Preview Role\": \"Anteprima ruolo\",\n  \"This lets you test the actions this role can perform.\": \"Ciò consente di testare le azioni che questo ruolo può eseguire.\",\n  \"View As Role\": \"Visualizza come ruolo\",\n  \"Return to Role Settings\": \"Torna alle impostazioni del ruolo\",\n  \"Password must have a minimum of length of :min characters\": \"La password deve avere una lunghezza minima di :min caratteri\",\n  \"Password must contain at least one uppercase character.\": \"La password deve contenere almeno un carattere maiuscolo.\",\n  \"Password must contain at least one lowercase character.\": \"La password deve contenere almeno un carattere minuscolo.\",\n  \"Password must contain at least one number.\": \"La password deve contenere almeno un numero.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"La password deve contenere almeno un carattere non alfanumerico.\",\n  \"Welcome to your Administration Area, :name\": \"Benvenuto nella tua Area Amministrazione, :name\",\n  \"Duplicate\": \"Duplicare\",\n  \"Expand\": \"Espandere\",\n  \"Collapse\": \"Crollo\",\n  \"Move Up\": \"Andare avanti\",\n  \"Move Down\": \"Abbassati\",\n  \"Remove\": \"Rimuovi\",\n  \"Manage Item\": \"Gestisci articolo\",\n  \"Clear Filters\": \"Cancella filtri\",\n  \"Filter Setup\": \"Configurazione del filtro\",\n  \"Apply\": \"Applicare\",\n  \"Clear\": \"Chiaro\",\n  \"is equal to\": \"è uguale a\",\n  \"is between\": \"è tra\",\n  \"contains\": \"contiene\",\n  \"is before\": \"è prima\",\n  \"is after\": \"è dopo\",\n  \"is greater than\": \"è più grande di\",\n  \"is less than\": \"è meno di\",\n  \"1. Export output format\": \"1. Formato di output dell'esportazione\",\n  \"File Format\": \"Formato del file\",\n  \"Delimiter Character\": \"Carattere delimitatore\",\n  \"Enclosure Character\": \"Qualificatore di testo\",\n  \"Escape Character\": \"Carattere di escape\",\n  \"2. Select columns to export\": \"2. Seleziona le colonne da esportare\",\n  \"Columns\": \"Colonne\",\n  \"3. Set export options\": \"3. Imposta opzioni di esportazione\",\n  \"CSV Custom\": \"Formato personalizzato\",\n  \"1. Upload an Import File\": \"1. Carica un file CSV\",\n  \"Import File\": \"Importa file\",\n  \"File Encoding\": \"Codifica del file\",\n  \"First row contains column titles\": \"La prima riga contiene i titoli delle colonne\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Lasciare selezionato se la prima riga nel file CSV è utilizzata come nome di colonna.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Abbina le colonne del file ai campi del database\",\n  \"File columns\": \"Colonne del file\",\n  \"Database fields\": \"Campi del database\",\n  \"3. Set Import Options\": \"3. Imposta opzioni di importazione\",\n  \"Export progress\": \"Progresso esportazione\",\n  \"Processing\": \"Elaborazione\",\n  \"Import progress\": \"Progresso importazione\",\n  \"Import error\": \"Errore di importazione\",\n  \"Export error\": \"Errore di esportazione\",\n  \"Column preview\": \"Anteprima colonna\",\n  \"Column\": \"Colonna\",\n  \"Disable\": \"disattivare\",\n  \"Enable\": \"Abilitare\",\n  \"Delete\": \"Elimina\",\n  \"Export\": \"Esportare\",\n  \"Import\": \"Importare\",\n  \"Select Action\": \"Seleziona Azione\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Crea un nuovo account per accedere all'Area Amministrazione.\",\n  \"First Name\": \"Nome di battesimo\",\n  \"Last Name\": \"Cognome\",\n  \"Email Address\": \"Indirizzo e-mail\",\n  \"Pick a Username\": \"Scegli un nome utente\",\n  \"Enter New Password\": \"Inserire una nuova password\",\n  \"Confirm Password\": \"Conferma password\",\n  \"Create Account\": \"Creare un account\",\n  \"Getting Ready\": \"Prepararsi\",\n  \"Just a few more minutes\": \"Solo qualche minuto in più\",\n  \"Migrating Database\": \"Migrazione del database\",\n  \"Access the Backend Panel\": \"Accedi al pannello di backend\",\n  \"View Backend During Maintenance\": \"Visualizza back-end durante la manutenzione\",\n  \"Perform Software Updates\": \"Eseguire aggiornamenti software\",\n  \"In Maintenance\": \"In manutenzione\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Il sito è attualmente in modalità di manutenzione, per favore ricontrolla più tardi.\",\n  \"Dashboard\": \"Pannello\",\n  \"Administrators\": \"Amministratori\",\n  \"Manage Admins\": \"Gestisci gli amministratori\",\n  \"Create Admins\": \"Crea amministratori\",\n  \"Moderate Admins\": \"Amministratori moderati\",\n  \"Manage account suspension and ban admin accounts\": \"Gestisci la sospensione dell'account ed escludi gli account amministratore\",\n  \"Role Permissions\": \"Gestisci ruoli\",\n  \"Team Groups\": \"Gruppi\",\n  \"Manage Other Admins\": \"Gestisci altri amministratori\",\n  \"Allow users to reset passwords and update emails.\": \"Consente di reimpostare le password e aggiornare le e-mail\",\n  \"Delete Admins\": \"Elimina gli amministratori\",\n  \"Preferences\": \"Preferenze\",\n  \"Settings\": \"Impostazioni\",\n  \"Background Color\": \"Colore di sfondo\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Consenti agli utenti di creare nuovi ruoli e modificare o eliminare ruoli inferiori al loro ruolo più alto.\",\n  \"Save Changes\": \"Salvare le modifiche\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Questo registro visualizza un elenco dei tentativi di accesso di un amministratore avvenuti con successo. I record sono mantenuti per un totale di :days giorni.\",\n  \"Access Log\": \"Registro accessi\",\n  \"View a list of successful back-end user sign ins.\": \"Visualizza una lista degli accessi da parte degli amministratori.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Data e ora\",\n  \"Type\": \"Tipo\",\n  \"IP address\": \"Indirizzo IP\",\n  \"Username\": \"Nome utente\",\n  \"Login\": \"Accedi\",\n  \"First name\": \"Nome\",\n  \"Last name\": \"Cognome\",\n  \"Email\": \"Indirizzo e-mail\",\n  \"A custom schema is used for this file format.\": \"Per questo formato di file viene utilizzato uno schema personalizzato.\",\n  \"Select\": \"Selezionare\",\n  \"Replace\": \"Sostituire\",\n  \"and\": \"e\",\n  \"Go\": \"Andare\",\n  \"Go to page\": \"Vai alla pagina\",\n  \"Copy to Clipboard\": \"Copia negli appunti\",\n  \"Reveal Contents\": \"Rivela i contenuti\",\n  \"Selected Site\": \"Sito selezionato\",\n  \"Use Emmet abbreviations\": \"Usa le abbreviazioni di Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Non esiste un record per il sito selezionato. Crearne uno?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Le credenziali inserite non sono valide oppure non si dispone di un profilo. Si prega di ricontrollare e riprovare.\",\n  \"Administration Area\": \"Area di Amministrazione\",\n  \"Password Reset\": \"Reimposta password\",\n  \"Please enter a new password.\": \"Inserisci una nuova password\",\n  \"Password\": \"Parola d'ordine\",\n  \"Password Restore\": \"Ripristino password\",\n  \"Please enter your login to restore the password.\": \"Inserisci il tuo username.\",\n  \"A user could not be found with a login value of ':login'\": \"Nessun utente con username ':login' è stato trovato.\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Le istruzioni per reimpostare la password sono state inviate al tuo indirizzo e-mail.\",\n  \"Invalid password reset data supplied. Please try again!\": \"I dati forniti per la reimpostazione della password non sono validi. Riprova!\",\n  \"Unable to reset your password!\": \"Impossibile ripristinare la password!\",\n  \"Password has been reset. You may now sign in.\": \"La tua password è stata reimpostata con successo. Ora puoi effettuare l'accesso.\",\n  \"Restore\": \"Ripristina\",\n  \"Reset\": \"Reimposta\",\n  \"Stay logged in\": \"Rimani connesso\",\n  \"Forgot password?\": \"Password dimenticata?\",\n  \"Global Editor Settings\": \"Impostazioni globali dell'editor\",\n  \"Manage Widgets\": \"Gestisci widget\",\n  \"Add Widget\": \"Aggiungi widget\",\n  \"Set the current layout as the default?\": \"Impostare il layout corrente come predefinito?\",\n  \"Make Default\": \"Rendi predefinito\",\n  \"Reset layout back to default?\": \"Reimpostare il layout ai valori predefiniti?\",\n  \"Reset Layout\": \"Reimposta layout\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"seleziona\",\n  \"Width\": \"Larghezza\",\n  \"full width\": \"intera larghezza\",\n  \"Create Widgets\": \"Crea widget\",\n  \"not equal to\": \"non uguale a\",\n  \"Light Mode\": \"Modalità luce\",\n  \"Dark Mode\": \"Modalità scura\",\n  \"OS Default\": \"Sistema operativo predefinito\",\n  \"Create a Custom Palette\": \"Crea una tavolozza personalizzata\",\n  \"Custom Palette\": \"Tavolozza personalizzata\",\n  \"Primary Color\": \"Principale color\",\n  \"Secondary Color\": \"Secondario color\",\n  \"Selection Color\": \"Selezione Colore\",\n  \"Nav Text\": \"Testo di navigazione\",\n  \"Nav Background\": \"Sfondo di navigazione\",\n  \"Sidebar Text\": \"Testo della barra laterale\",\n  \"Sidebar Background\": \"Sfondo della barra laterale\",\n  \"Sidebar Active Text\": \"Testo attivo barra laterale\",\n  \"Sidebar Active Background\": \"Sfondo attivo della barra laterale\",\n  \"Sidebar Hover Background\": \"Sfondo al passaggio del mouse della barra laterale\",\n  \"Settings Text\": \"Impostazioni Testo\",\n  \"Settings Background\": \"Sfondo delle impostazioni\",\n  \"Settings Item Background\": \"Impostazioni Voce Sfondo\",\n  \"Settings Active Color\": \"Impostazioni Colore attivo\",\n  \"Settings Active Background\": \"Impostazioni Sfondo attivo\",\n  \"Settings Hover Background\": \"Impostazioni al passaggio del mouse sullo sfondo\",\n  \"This name is shown in the title area of the back-end.\": \"Questo campo verrà visualizzato nella barra del titolo del pannello di controllo.\",\n  \"App Name\": \"Nome dell'applicazione\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Questo campo verrà visualizzato nella schermata di login del pannello di controllo.\",\n  \"App Tagline\": \"Slogan dell'applicazione\",\n  \"Brand\": \"Marchio\",\n  \"Upload a custom logo to use in the back-end.\": \"Carica un logo personalizzato da utilizzare nel pannello di controllo.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Carica una favicon personalizzata da utilizzare nel back-end\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Logo di navigazione\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Sostituisce il collegamento al dashboard con un logo personalizzato nella navigazione.\",\n  \"Dashboard Icon\": \"Icona del cruscotto\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Utilizza un'immagine personalizzata per l'icona della dashboard (60 x 60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Questo messaggio viene visualizzato nella schermata di accesso per il back-end.\",\n  \"Welcome Message\": \"Messaggio di benvenuto\",\n  \"Login Page\": \"Pagina di login\",\n  \"Background Type\": \"Tipo di sfondo\",\n  \"Flat Color\": \"Colore piatto\",\n  \"Wallpaper\": \"Sfondo\",\n  \"Wallpaper Size\": \"Dimensione dello sfondo\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Copertina\",\n  \"Background Wallpaper Image\": \"Immagine di sfondo della carta da parati\",\n  \"Image\": \"Immagine\",\n  \"Random Autumn Images\": \"Immagini autunnali casuali\",\n  \"Custom Image\": \"Immagine personalizzata\",\n  \"Login Page Image\": \"Immagine della pagina di accesso\",\n  \"Colors\": \"Colori\",\n  \"Color Mode\": \"Modalità colore\",\n  \"Color Preset\": \"Colore preimpostato\",\n  \"Menu Style\": \"Stile menu\",\n  \"Navigation\": \"Navigazione\",\n  \"Custom Stylesheet\": \"Foglio di stile personalizzato\",\n  \"Styles\": \"Stili\",\n  \"Inline\": \"In linea\",\n  \"Text\": \"Testo\",\n  \"Tiles\": \"Piastrelle\",\n  \"Collapsed\": \"Compresso\",\n  \"Icons\": \"Icone\",\n  \"Left Side\": \"Lato sinistro\",\n  \"Add New Item\": \"Aggiungi un nuovo elemento\",\n  \"Link Color\": \"Colore collegamento\",\n  \"Current Password\": \"password attuale\",\n  \"New Password\": \"nuova password\",\n  \"Current password does not match. Please try again!\": \"La password corrente non corrisponde. Per favore riprova!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"La tua password è scaduta, creane una nuova per motivi di sicurezza.\",\n  \"Region\": \"Regione\",\n  \"Locale\": \"Lingua\",\n  \"Select your desired locale for language use.\": \"Seleziona la lingua da utilizzare.\",\n  \"Timezone\": \"Fuso orario\",\n  \"Adjust displayed dates to this timezone.\": \"Regola le date visualizzate su questo fuso orario.\",\n  \"Code Editor\": \"Editor di codice\",\n  \"Color Scheme\": \"Schema di colori\",\n  \"Word Wrap\": \"A capo automatico\",\n  \"Off\": \"No\",\n  \"40 Characters\": \"40 Caratteri\",\n  \"80 Characters\": \"80 Caratteri\",\n  \"Fluid\": \"Fluido\",\n  \"Font Size\": \"Dimensione carattere\",\n  \"Tab Size\": \"Dimensione Tab\",\n  \"Code Folding\": \"Raggruppa il codice\",\n  \"Mark begin\": \"Evidenzia inizio\",\n  \"Mark begin and end\": \"Evidenzia inizio e fine\",\n  \"Autocompletion\": \"Completamento automatico\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Completamento automatico di base (Ctrl + Spazio)\",\n  \"Live Autocompletion\": \"Completamento automatico in tempo reale\",\n  \"Show gutter\": \"Visualizza numeri di linea\",\n  \"Highlight active line\": \"Evidenzia la linea attiva\",\n  \"Automatically close tags\": \"Chiudi automaticamente i tag\",\n  \"Indent using tabs\": \"Indenta utilizzando i Tab\",\n  \"Show indent guides\": \"Visualizza guide di indentazione\",\n  \"Show invisible characters\": \"Mostra caratteri invisibili\",\n  \"Show print margin\": \"Visualizza margini di stampa\",\n  \"Custom styles to include in the HTML editor.\": \"Stili personalizzati da includere nell'editor HTML.\",\n  \"Markup Styles\": \"Stili di markup\",\n  \"Paragraph Formats\": \"Formati di paragrafo\",\n  \"Markup Classes\": \"Classi di markup\",\n  \"Label\": \"Etichetta\",\n  \"Paragraph\": \"Paragrafo\",\n  \"Class Name\": \"Nome della classe\",\n  \"Link\": \"Collegamento\",\n  \"Table\": \"Tabella\",\n  \"Table Cell\": \"Cella di una tabella\",\n  \"Allowed Tags\": \"Tag consentiti\",\n  \"The list of allowed tags.\": \"L'elenco dei tag consentiti.\",\n  \"Markup Tags\": \"Tag di markup\",\n  \"Allowed Empty Tags\": \"Tag vuoti consentiti\",\n  \"The list of tags that are not removed when they have no content inside.\": \"L'elenco dei tag che non sono rimossi quando non hanno nessun contenuto.\",\n  \"Do Not Wrap Tags\": \"Tag da non includere in blocchi\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"L'elenco dei tag che non devono essere contenuti all'interno di blocchi di tag.\",\n  \"Remove Tags\": \"Tag da rimuovere\",\n  \"The list of tags that are removed together with their content.\": \"L'elenco dei tag che sono rimossi insieme al loro contenuto.\",\n  \"Line Breaker Tags\": \"Tag dell'interruttore di linea\",\n  \"The list of tags that are used to place a line breaker element between.\": \"L'elenco di tag utilizzati per posizionare un elemento di interruzione di riga tra di essi.\",\n  \"Toolbar Buttons\": \"Pulsanti della barra degli strumenti\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"I pulsanti della barra degli strumenti da visualizzare nel Rich Editor per impostazione predefinita.\",\n  \"Insert a preset toolbar button configuration\": \"Inserisci una configurazione predefinita dei pulsanti della barra degli strumenti\",\n  \"Allowed Attributes\": \"Attributi consentiti\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"L'elenco degli attributi HTML consentiti, in aggiunta ai normali valori consentiti.\",\n  \"Enable code snippets (Tab)\": \"Abilita frammenti di codice (Tab)\",\n  \"Title\": \"Titolo\",\n  \"Description\": \"Descrizione\",\n  \"Attachment\": \"Allegato\",\n  \"Attachment URL\": \"URL Allegato\",\n  \"Add a title and description for this attachment.\": \"Aggiungi un titolo e una descrizione per questo allegato.\",\n  \"Are you sure?\": \"Sei sicuro?\",\n  \"Upload Error\": \"Errore nel caricamento\",\n  \"Remove File\": \"Rimuovi file\",\n  \"Create :name\": \"Crea :name\",\n  \"Update :name\": \"Aggiorna :name\",\n  \"Add :name\": \"Aggiungi :name\",\n  \"Link :name\": \"Collega :name\",\n  \"Unlink\": \"Scollega\",\n  \"Preview :name\": \"Visualizza :name\",\n  \"Link a New :name\": \"Collega nuovo :name\",\n  \"Add a New :name\": \"Aggiungi nuovo :name\",\n  \"Related :name Data\": \"Dati :name correlati\",\n  \":name Created\": \":name creato con successo\",\n  \":name Updated\": \":name modificato con successo\",\n  \":name Deleted\": \":name eliminato con successo\",\n  \"Form record with an ID of :id could not be found.\": \"Nessun record con ID :id è stato trovato.\",\n  \"Preview the Website\": \"Anteprima del sito web\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Gestisci gli utenti amministratori, i gruppi e le autorizzazioni.\",\n  \"Branding & Appearance\": \"Personalizza pannello di controllo\",\n  \"Customize the administration area such as name, colors and logo.\": \"Personalizza l'area di amministrazione, come il nome, i colori ed il logo.\",\n  \"Editor Settings\": \"Preferenze editor di codice\",\n  \"Change the global editor preferences.\": \"Personalizza le impostazioni dell'editor, come la dimensione del carattere e lo schema di colori.\",\n  \"My Account\": \"Il mio account\",\n  \"Update your account details such as name, email address and password.\": \"Aggiorna i dettagli del tuo account, come il nome, l'indirizzo e-mail e la password.\",\n  \"Backend Preferences\": \"Preferenze pannello di controllo\",\n  \"Manage your account preferences such as desired language.\": \"Gestisci le preferenze del tuo account, come la lingua.\",\n  \"security login\": \"sicurezza login\",\n  \"List Setup\": \"Configura elenco\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Utilizza le checkbox per selezionare le colonne che vuoi visualizzare nell'elenco. Puoi cambiare la posizione delle colonne trascinandole verso l'alto o il basso.\",\n  \"Records Per Page\": \"Record per pagina\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Seleziona il numero di record da visualizzare su ogni pagina. Ricorda che un numero elevato di record in una singola pagina può ridurre le prestazioni.\",\n  \"Add Selected\": \"Aggiungi selezionati\",\n  \"Please specify the modelClass property for :type\": \"Si prega di specificare la proprietà modelClass per :type\",\n  \"Please specify some columns to export.\": \"Si prega di specificare alcune colonne da esportare.\",\n  \"Missing column identifier\": \"Identificatore di colonna mancante\",\n  \"Unknown column\": \"Colonna sconosciuta\",\n  \"Please specify some columns to import.\": \"Si prega di specificare alcune colonne da importare.\",\n  \"Please match some columns first.\": \"Si prega di abbinare alcune colonne prima di procedere.\",\n  \"Please specify a match for the required field :label.\": \"Si prega di specificare un abbinamento per il campo obbligatorio :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"La codifica del file di origine non è stata riconosciuta. Si prega di selezionare l'opzione di formato personalizzato con la codifica corretta per importare il file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Devi implementare il comportamento del controller ListController con l'opzione di esportazione \\\"useList\\\" abilitata.\",\n  \"File export process completed!\": \"Processo di esportazione del file completato!\",\n  \"The browser will now redirect to the file download.\": \"Il browser ora ti reindirizzerà al download del file.\",\n  \"Ignore this column\": \"Ignora questa colonna\",\n  \"Drop column here...\": \"Rilascia qui la colonna...\",\n  \"Please upload a valid CSV file.\": \"Si prega di caricare un file CSV valido.\",\n  \"Created\": \"Creati\",\n  \"Updated\": \"Aggiornati\",\n  \"Skipped\": \"Saltati\",\n  \"Warnings\": \"Avvisi\",\n  \"Errors\": \"Errori\",\n  \"Skipped Rows\": \"Righe saltate\",\n  \"Show Ignored Columns\": \"Visualizza colonne ignorate\",\n  \"Auto Match Columns\": \"Abbinamento automatico colonne\",\n  \"File not found\": \"File non trovato\",\n  \"There was no data supplied to export\": \"Nessun dato fornito per l'esportazione.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"L'estensione di PHP :name non è installata. Installa questa libreria ed attiva l'estensione.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"La cartella :name o le sue sottocartelle non sono scrivibili da PHP. Imposta le corrette autorizzazioni per il server web su questa cartella.\"\n}"
  },
  {
    "path": "modules/backend/lang/ja/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => '無効なフィールドタイプ :type が使用されています。',\n    'options_method_not_exists' => 'モデルクラスの:modelは、\":field\"フォームフィールドのためにオプションを返す、:method()メソッドを定義しなくてはなりません。',\n  ],\n  'widget' => [\n    'not_registered' => '\\':name\\'は、ウィジット名として登録されていません。',\n    'not_bound' => 'ウィジットクラス名の\\':name\\'は、コントローラーと結び付けられていません。',\n  ],\n  'page' => [\n    'untitled' => 'タイトル無し',\n    'access_denied' => [\n      'label' => 'アクセスが拒否されました',\n      'help' => 'このページを表示するために必要な権限がありません。',\n      'cms_link' => 'CMSのバックエンドに行く',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => '\\':name\\'パーシャルは見つかりません。',\n  ],\n  'account' => [\n    'sign_out' => 'ログアウト',\n    'login_placeholder' => 'ユーザー名',\n    'password_placeholder' => 'パスワード',\n    'enter_email' => 'メールアドレスを入力してください',\n    'email_placeholder' => 'メールアドレス',\n    'apply' => '適用',\n    'cancel' => 'キャンセル',\n    'delete' => '削除',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'ダッシュボード',\n    'widget_inspector_title' => 'ウィジェットの設定',\n    'widget_inspector_description' => 'リポートウィジェットを設定します。',\n    'widget_columns_label' => '幅 :columns',\n    'widget_columns_description' => 'ウィジェット幅は1〜10の数字で指定してします。',\n    'widget_columns_error' => 'ウィジェット幅は1〜10の数字で指定してください。',\n    'columns' => '{1} カラム|[2,Inf] カラム',\n    'widget_new_row_label' => '次の行に配置',\n    'widget_new_row_description' => 'ウィジェットを次の行に配置します。',\n    'widget_title_label' => 'ウィジェットタイトル',\n    'widget_title_error' => 'ウィジェットタイトルを指定してください。',\n    'status' => [\n      'widget_title_default' => 'システム状態',\n      'update_available' => '{0}個のアップデートが見つかりました。|{1} 個のアップデートが見つかりました。|[2,Inf] 個のアップデートが見つかりました。',\n    ],\n  ],\n  'user' => [\n    'name' => 'システム管理者',\n    'list_title' => 'システム管理者の管理',\n    'new' => '新規システム管理者',\n    'first_name' => '名',\n    'last_name' => '姓',\n    'full_name' => '姓名',\n    'email' => 'メールアドレス',\n    'groups' => 'グループ',\n    'groups_comment' => 'このユーザーが所属するグループを指定してください。',\n    'avatar' => 'アバター',\n    'password' => 'パスワード',\n    'password_confirmation' => 'パスワード確認',\n    'permissions' => '権限',\n    'superuser' => 'スーパーユーザー',\n    'superuser_comment' => '全領域へのアクセスをこのユーザーに許可する場合、ボックスをチェックしてください。',\n    'send_invite' => 'メールにより招待送信',\n    'send_invite_comment' => 'このユーザーに、メールで招待状を送る場合、ボックスをチェックしてください。',\n    'delete_confirm' => 'この管理者を本当に削除しますか？',\n    'return' => 'システム管理者リストに戻る',\n    'allow' => '許可',\n    'inherit' => '継承',\n    'deny' => '拒否',\n    'group' => [\n      'name' => 'グループ',\n      'name_field' => '名前',\n      'description_field' => '説明',\n      'is_new_user_default_field' => 'デフォルトで新しいシステム管理者をこのグループに追加する。',\n      'code_field' => 'コード',\n      'code_comment' => 'もしあなたがAPIでアクセスしたい場合は、ユニークなコードを入力してください。',\n      'list_title' => 'グループ管理',\n      'new' => '新規グループ',\n      'delete_confirm' => '本当にこの管理者グループを削除しますか？',\n      'return' => 'グループリストへ戻る',\n    ],\n    'preferences' => [\n      'not_authenticated' => '設定を読み込み／保存する、認証されたユーザーが存在していません。',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'リスト',\n    'search_prompt' => '検索...',\n    'no_records' => 'このビューにはレコードがありません。',\n    'missing_model' => ':classクラスの中のリストビヘイビアーにモデルがありません。',\n    'missing_column' => ':columnsに対する、カラム定義がありません。',\n    'missing_columns' => ':classクラスの中のリストには、リストするカラムが定義されていません。',\n    'missing_definition' => 'リストビヘイビアーは、\\':field\\'に対するカラムを持っていません。',\n    'behavior_not_ready' => 'リストビヘイビアーは初期化されていません。コントローラーで、makeLists()を呼び出しているか確認してください。',\n    'invalid_column_datetime' => 'カラムの値 \\':column\\' はDateTimeオブジェクトではありません。モデル内の $dates に指定していますか？',\n    'pagination' => '表示中のレコード: :from-:to / :total',\n    'prev_page' => '前のページ',\n    'next_page' => '次のページ',\n    'loading' => 'ロード中...',\n  ],\n  'fileupload' => [],\n  'form' => [\n    'create_title' => '新規 :name',\n    'update_title' => '編集 :name',\n    'preview_title' => 'プレビュー :name',\n    'missing_id' => 'フォームのレコードIDが指定されていません。',\n    'missing_model' => ':classクラスで使用している、フォームビヘイビアーは、モデル定義を持っていません。',\n    'missing_definition' => 'フォームビヘイビアーは、\\':field\\'フィールドを持っていません。',\n    'action_confirm' => '削除していいですか？',\n    'create' => '作成',\n    'create_and_close' => '作成後閉じる',\n    'creating' => '作成中...',\n    'creating_name' => ':name を作成中...',\n    'save' => '保存',\n    'save_and_close' => '保存後閉じる',\n    'saving' => '保存中...',\n    'saving_name' => ':name を保存中...',\n    'delete' => '削除',\n    'deleting' => '削除中...',\n    'deleting_name' => ':name を削除中...',\n    'reset_default' => '初期値にリセット',\n    'resetting' => 'リセット',\n    'resetting_name' => ':name を初期値にリセット中...',\n    'undefined_tab' => 'その他',\n    'field_off' => '無効',\n    'field_on' => '',\n    'add' => 'Add',\n    'apply' => '適用',\n    'cancel' => 'キャンセル',\n    'close' => '閉じる',\n    'confirm' => '確認',\n    'reload' => 'リロード',\n    'ok' => 'OK',\n    'or' => 'または',\n    'confirm_tab_close' => '本当にタブを閉じますか？ 保存されていない変更は消えてしまいます。',\n    'behavior_not_ready' => 'フォームビヘイビアーは初期化されていません。コントローラーでinitForm()を呼び出しているか確認してください。',\n    'preview_no_files_message' => 'ファイルはアップロードされません。',\n    'select' => '選択',\n    'select_all' => 'すべて選択',\n    'select_none' => 'どれも選択しない',\n    'insert_row' => '行を挿入',\n    'delete_row' => '行を削除',\n    'concurrency_file_changed_title' => 'ファイルは変更されていません。',\n    'concurrency_file_changed_description' => '編集中のファイルが他のユーザーにより変更されました。リロードして加えた変更を破棄するか、そのまま上書きできます。',\n  ],\n  'relation' => [\n    'missing_config' => 'リレーションビヘイビアは、\\':config\\'に対する設定を持っていません。',\n    'missing_definition' => 'リレーションビヘイビアは、\\':field\\'フィールドに対する定義を持っていません。',\n    'missing_model' => ':classクラスで使用している、リレーションビヘイビアは、モデル定義を持っていません。',\n    'invalid_action_single' => 'このアクションは、単一リレーションでは実行できません。',\n    'invalid_action_multi' => 'このアクションは、複数リレーションでは実行できません。',\n    'help' => '項目をクリックすると追加されます。',\n    'add' => '追加',\n    'link_selected' => 'リンクは選択されています',\n    'cancel' => 'キャンセル',\n    'close' => '閉じる',\n    'create' => '作成',\n    'update' => '更新',\n    'preview' => 'プレビュー',\n    'remove_name' => '削除 :name',\n    'delete_name' => '削除 :name',\n    'link' => 'リンク',\n    'unlink_name' => 'リンク解除 :name',\n  ],\n  'model' => [\n    'name' => 'モデル',\n    'not_found' => 'IDが:idの、\\':class\\'モデルは見つかりません。',\n    'missing_id' => 'モデルレコードを探すためのIDが、指定されていません。',\n    'missing_relation' => '\\':class\\'モデルは、\\':relation\\'の定義を持っていません。',\n    'missing_method' => 'モデル \\':class\\' にメソッド \\':method\\' は定義されていません。',\n    'invalid_class' => ':classクラスで使用している、:modelモデルは正しくありません。\\\\Modelクラスを継承してください。',\n    'mass_assignment_failed' => 'モデル属性\\':attribute\\'の一括設定に失敗しました。',\n  ],\n  'warnings' => [\n    'tips' => 'システム構成のチップス',\n    'tips_description' => 'あなたが、システムを適切に設定するために注意を払う必要がある問題があります。',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'マイ設定',\n    'menu_description' => 'この管理者アカウントの設定をします。',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accent color',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'すべて',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/ja.json",
    "content": "{\n  \"Cancel\": \"キャンセル\",\n  \"You are viewing as\": \"あなたはとして見ています\",\n  \"Preview Role\": \"プレビューの役割\",\n  \"This lets you test the actions this role can perform.\": \"これにより、このロールが実行できるアクションをテストできます。\",\n  \"View As Role\": \"役割として表示\",\n  \"Return to Role Settings\": \"役割設定に戻る\",\n  \"Password must have a minimum of length of :min characters\": \"パスワードの長さは最小：min文字である必要があります\",\n  \"Password must contain at least one uppercase character.\": \"パスワードには、少なくとも1つの大文字が含まれている必要があります。\",\n  \"Password must contain at least one lowercase character.\": \"パスワードには、少なくとも1つの小文字が含まれている必要があります。\",\n  \"Password must contain at least one number.\": \"パスワードは、少なくとも1つの番号が含まれている必要があります。\",\n  \"Password must contain at least one nonalphanumeric character.\": \"パスワードには、少なくとも1つの英数字以外の文字が含まれている必要があります。\",\n  \"Welcome to your Administration Area, :name\": \"管理エリアへようこそ、：name\",\n  \"Duplicate\": \"複製\",\n  \"Expand\": \"拡大\",\n  \"Collapse\": \"崩壊\",\n  \"Move Up\": \"上に移動\",\n  \"Move Down\": \"下に移動\",\n  \"Remove\": \"削除\",\n  \"Manage Item\": \"アイテムの管理\",\n  \"Clear Filters\": \"フィルターをクリア\",\n  \"Filter Setup\": \"フィルタの設定\",\n  \"Apply\": \"申し込み\",\n  \"Clear\": \"クリア\",\n  \"is equal to\": \"に等しい\",\n  \"is between\": \"は間に\",\n  \"contains\": \"含む\",\n  \"is before\": \"前です\",\n  \"is after\": \"後です\",\n  \"is greater than\": \"より大きい\",\n  \"is less than\": \"より少ない\",\n  \"1. Export output format\": \"1.出力形式をエクスポートします\",\n  \"File Format\": \"ファイル形式\",\n  \"Delimiter Character\": \"区切り文字\",\n  \"Enclosure Character\": \"エンクロージャーキャラクター\",\n  \"Escape Character\": \"エスケープ文字\",\n  \"2. Select columns to export\": \"2.エクスポートする列を選択します\",\n  \"Columns\": \"列\",\n  \"3. Set export options\": \"3.エクスポートオプションを設定します\",\n  \"CSV Custom\": \"CSVカスタム\",\n  \"1. Upload an Import File\": \"1.インポートファイルをアップロードする\",\n  \"Import File\": \"インポートファイル\",\n  \"File Encoding\": \"ファイルエンコーディング\",\n  \"First row contains column titles\": \"最初の行には列のタイトルが含まれています\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"CSVの最初の行が列のタイトルとして使用されている場合は、これをオンのままにします。\",\n  \"2. Match the File Columns to Database Fields\": \"2.ファイル列をデータベースフィールドに一致させます\",\n  \"File columns\": \"ファイル列\",\n  \"Database fields\": \"データベースフィールド\",\n  \"3. Set Import Options\": \"3.インポートオプションを設定します\",\n  \"Export progress\": \"エクスポートの進捗状況\",\n  \"Processing\": \"処理\",\n  \"Import progress\": \"インポートの進行状況\",\n  \"Import error\": \"インポートエラー\",\n  \"Export error\": \"エクスポートエラー\",\n  \"Column preview\": \"カラムプレビュー\",\n  \"Column\": \"桁\",\n  \"Disable\": \"無効にする\",\n  \"Enable\": \"有効\",\n  \"Delete\": \"削除\",\n  \"Export\": \"書き出す\",\n  \"Import\": \"輸入\",\n  \"Select Action\": \"アクションを選択\",\n  \"Please create a new account for logging in to the Administration Area.\": \"管理エリアにログインするための新しいアカウントを作成してください。\",\n  \"First Name\": \"ファーストネーム\",\n  \"Last Name\": \"苗字\",\n  \"Email Address\": \"電子メールアドレス\",\n  \"Pick a Username\": \"ユーザー名を選択してください\",\n  \"Enter New Password\": \"新しいパスワードを入力してください\",\n  \"Confirm Password\": \"パスワードを認証する\",\n  \"Create Account\": \"アカウントを作成する\",\n  \"Getting Ready\": \"準備\",\n  \"Just a few more minutes\": \"あと数分\",\n  \"Migrating Database\": \"データベースの移行\",\n  \"Access the Backend Panel\": \"バックエンドパネルにアクセスする\",\n  \"View Backend During Maintenance\": \"メンテナンス中のバックエンドの表示\",\n  \"Perform Software Updates\": \"ソフトウェアアップデートを実行する\",\n  \"In Maintenance\": \"メンテナンス中\",\n  \"The site is currently in maintenance mode, please check back later.\": \"サイトは現在メンテナンスモードです。後でもう一度確認してください。\",\n  \"Dashboard\": \"ダッシュボード\",\n  \"Administrators\": \"システム管理者\",\n  \"Manage Admins\": \"管理者を管理する\",\n  \"Create Admins\": \"管理者を作成する\",\n  \"Moderate Admins\": \"中程度の管理者\",\n  \"Manage account suspension and ban admin accounts\": \"アカウントの停止を管理し、管理者アカウントを禁止する\",\n  \"Role Permissions\": \"役割の管理\",\n  \"Team Groups\": \"グループ\",\n  \"Manage Other Admins\": \"他の管理者を管理する\",\n  \"Allow users to reset passwords and update emails.\": \"パスワードのリセットとメールの更新を許可します\",\n  \"Delete Admins\": \"管理者を削除\",\n  \"Preferences\": \"環境設定\",\n  \"Settings\": \"設定\",\n  \"Background Color\": \"背景色\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"ユーザーが新しい役割を作成し、最高の役割よりも低い役割を編集または削除できるようにします。\",\n  \"Save Changes\": \"変更内容を保存\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"このログは管理者のサインインが成功したリストです。記録は:days日間保持されます。\",\n  \"Access Log\": \"アクセスログ\",\n  \"View a list of successful back-end user sign ins.\": \"サインインに成功したバックエンドユーザーを表示します。\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"日時\",\n  \"Type\": \"タイプ\",\n  \"IP address\": \"IPアドレス\",\n  \"Username\": \"ユーザー名\",\n  \"Login\": \"ログイン\",\n  \"First name\": \"名\",\n  \"Last name\": \"姓\",\n  \"Email\": \"メール\",\n  \"A custom schema is used for this file format.\": \"このファイル形式には、カスタム スキーマが使用されます。\",\n  \"Select\": \"選択する\",\n  \"Replace\": \"交換\",\n  \"and\": \"と\",\n  \"Go\": \"行く\",\n  \"Go to page\": \"ページに移動\",\n  \"Copy to Clipboard\": \"クリップボードにコピー\",\n  \"Reveal Contents\": \"内容を明らかにする\",\n  \"Selected Site\": \"選択したサイト\",\n  \"Use Emmet abbreviations\": \"Emmet の略語を使用する\",\n  \"A record does not exist for the selected site. Create one?\": \"選択したサイトにはレコードが存在しません。一つ作る？\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"入力された詳細は当社の記録と一致しませんでした。再確認してもう一度お試しください。\",\n  \"Administration Area\": \"システム管理者領域\",\n  \"Password Reset\": \"パスワードリセット\",\n  \"Please enter a new password.\": \"新しいパスワードを入力してください\",\n  \"Password\": \"パスワード\",\n  \"Password Restore\": \"パスワードの復元\",\n  \"Please enter your login to restore the password.\": \"ユーザー名を入力してください\",\n  \"A user could not be found with a login value of ':login'\": \"':login'というユーザーは登録されていません。\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"パスワードを元に戻すための手順を説明したメールを送信しました。\",\n  \"Invalid password reset data supplied. Please try again!\": \"間違ったパスワードリセットデータが送信されました。再実行してください。\",\n  \"Unable to reset your password!\": \"パスワードをリセットできませんでした。\",\n  \"Password has been reset. You may now sign in.\": \"パスワードがリセットされました。\",\n  \"Restore\": \"元に戻す\",\n  \"Reset\": \"リセット\",\n  \"Stay logged in\": \"ログインしたまま\",\n  \"Forgot password?\": \"パスワードを忘れましたか？\",\n  \"Global Editor Settings\": \"グローバルエディタ設定\",\n  \"Manage Widgets\": \"ウィジェットの管理\",\n  \"Add Widget\": \"ウィジェットの追加\",\n  \"Set the current layout as the default?\": \"現在のレイアウトをデフォルトとして設定しますか?\",\n  \"Make Default\": \"デフォルトにする\",\n  \"Reset layout back to default?\": \"レイアウトをデフォルトにリセットしますか?\",\n  \"Reset Layout\": \"レイアウトをリセット\",\n  \"Widget\": \"ウィジェット\",\n  \"please select\": \"選択してください\",\n  \"Width\": \"ウィジェット幅\",\n  \"full width\": \"全幅\",\n  \"Create Widgets\": \"ウィジェットの作成\",\n  \"not equal to\": \"等しくない\",\n  \"Light Mode\": \"ライトモード\",\n  \"Dark Mode\": \"ダークモード\",\n  \"OS Default\": \"OSのデフォルト\",\n  \"Create a Custom Palette\": \"カスタムパレットの作成\",\n  \"Custom Palette\": \"カスタムパレット\",\n  \"Primary Color\": \"プライマリ color\",\n  \"Secondary Color\": \"セカンダリ color\",\n  \"Selection Color\": \"選択色\",\n  \"Nav Text\": \"ナビテキスト\",\n  \"Nav Background\": \"ナビゲーションの背景\",\n  \"Sidebar Text\": \"サイドバーのテキスト\",\n  \"Sidebar Background\": \"サイドバーの背景\",\n  \"Sidebar Active Text\": \"サイドバーのアクティブテキスト\",\n  \"Sidebar Active Background\": \"サイドバーのアクティブな背景\",\n  \"Sidebar Hover Background\": \"サイドバーのホバー背景\",\n  \"Settings Text\": \"設定テキスト\",\n  \"Settings Background\": \"設定の背景\",\n  \"Settings Item Background\": \"設定項目の背景\",\n  \"Settings Active Color\": \"設定アクティブカラー\",\n  \"Settings Active Background\": \"設定 アクティブな背景\",\n  \"Settings Hover Background\": \"設定ホバー背景\",\n  \"This name is shown in the title area of the back-end.\": \"この名前はバックエンドのタイトル領域に表示されます。\",\n  \"App Name\": \"アプリ名\",\n  \"This name is shown on the sign in screen for the back-end.\": \"この名前はバックエンドのサインインページに表示されます。\",\n  \"App Tagline\": \"アプリタグライン\",\n  \"Brand\": \"ブランド\",\n  \"Upload a custom logo to use in the back-end.\": \"バックエンドで使用するロゴをアップロードします。\",\n  \"Logo\": \"ロゴ\",\n  \"Upload a custom favicon to use in the back-end\": \"バックエンドで使用するカスタム favicon をアップロードする\",\n  \"Favicon\": \"ファビコン\",\n  \"Navigation Logo\": \"ナビゲーションロゴ\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"ダッシュボードのリンクをナビゲーション内のカスタム ロゴに置き換えます。\",\n  \"Dashboard Icon\": \"ダッシュボードのアイコン\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"ダッシュボード アイコンにカスタム イメージ (60x60) を使用します。\",\n  \"This message is shown on the sign in screen for the back-end.\": \"このメッセージは、バックエンドのサインイン画面に表示されます。\",\n  \"Welcome Message\": \"ウェルカムメッセージ\",\n  \"Login Page\": \"ログインページ\",\n  \"Background Type\": \"背景の種類\",\n  \"Flat Color\": \"フラットカラー\",\n  \"Wallpaper\": \"壁紙\",\n  \"Wallpaper Size\": \"壁紙サイズ\",\n  \"Auto\": \"自動\",\n  \"Cover\": \"カバー\",\n  \"Background Wallpaper Image\": \"背景壁紙画像\",\n  \"Image\": \"画像\",\n  \"Random Autumn Images\": \"ランダムな秋の画像\",\n  \"Custom Image\": \"カスタムイメージ\",\n  \"Login Page Image\": \"ログインページの画像\",\n  \"Colors\": \"配色\",\n  \"Color Mode\": \"カラーモード\",\n  \"Color Preset\": \"カラープリセット\",\n  \"Menu Style\": \"メニュースタイル\",\n  \"Navigation\": \"ナビゲーション\",\n  \"Custom Stylesheet\": \"カスタムスタイルシート\",\n  \"Styles\": \"スタイル\",\n  \"Inline\": \"列をなして\",\n  \"Text\": \"文章\",\n  \"Tiles\": \"タイル\",\n  \"Collapsed\": \"崩壊した\",\n  \"Icons\": \"アイコン\",\n  \"Left Side\": \"左側\",\n  \"Add New Item\": \"新しいアイテムを追加\",\n  \"Link Color\": \"リンクの色\",\n  \"Current Password\": \"現在のパスワード\",\n  \"New Password\": \"新しいパスワード\",\n  \"Current password does not match. Please try again!\": \"現在のパスワードが一致しません。もう一度試してください。\",\n  \"Your password has expired, please create a new one for security reasons.\": \"パスワードの有効期限が切れています。セキュリティ上の理由から、新しいパスワードを作成してください。\",\n  \"Region\": \"領域\",\n  \"Locale\": \"ロケール\",\n  \"Select your desired locale for language use.\": \"使用する言語のロケールを選択してください。\",\n  \"Timezone\": \"タイムゾーン\",\n  \"Adjust displayed dates to this timezone.\": \"表示される日付をこのタイムゾーンに調整します。\",\n  \"Code Editor\": \"コードエディタ\",\n  \"Color Scheme\": \"カラーテーマ\",\n  \"Word Wrap\": \"ワードラップ\",\n  \"Off\": \"オフ\",\n  \"40 Characters\": \"40文字\",\n  \"80 Characters\": \"80文字\",\n  \"Fluid\": \"体液\",\n  \"Font Size\": \"フォントサイズ\",\n  \"Tab Size\": \"タブサイズ\",\n  \"Code Folding\": \"コード折りたたみ\",\n  \"Mark begin\": \"開始マークを付ける\",\n  \"Mark begin and end\": \"開始と終了をマークする\",\n  \"Autocompletion\": \"オートコンプリート\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"基本的なオートコンプリート (Ctrl + スペース)\",\n  \"Live Autocompletion\": \"ライブオートコンプリート\",\n  \"Show gutter\": \"行番号を表示する\",\n  \"Highlight active line\": \"選択行のハイライト\",\n  \"Automatically close tags\": \"タグを自動的に閉じる\",\n  \"Indent using tabs\": \"インデントにタブを使用する\",\n  \"Show indent guides\": \"インデントガイドを表示する\",\n  \"Show invisible characters\": \"見えない文字を表示する\",\n  \"Show print margin\": \"印刷余白を表示\",\n  \"Custom styles to include in the HTML editor.\": \"HTML エディターに含めるカスタム スタイル。\",\n  \"Markup Styles\": \"マークアップスタイル\",\n  \"Paragraph Formats\": \"段落の書式\",\n  \"Markup Classes\": \"マークアップクラス\",\n  \"Label\": \"ラベル\",\n  \"Paragraph\": \"段落\",\n  \"Class Name\": \"クラス名\",\n  \"Link\": \"リンク\",\n  \"Table\": \"テーブル\",\n  \"Table Cell\": \"表のセル\",\n  \"Allowed Tags\": \"許可されるタグ\",\n  \"The list of allowed tags.\": \"許可されるタグのリスト。\",\n  \"Markup Tags\": \"マークアップタグ\",\n  \"Allowed Empty Tags\": \"許可される空のタグ\",\n  \"The list of tags that are not removed when they have no content inside.\": \"タグの中にコンテンツがない場合に削除されないタグのリスト。\",\n  \"Do Not Wrap Tags\": \"タグをラップしないでください\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"ブロックタグ内にラップしないタグのリスト。\",\n  \"Remove Tags\": \"タグを削除する\",\n  \"The list of tags that are removed together with their content.\": \"コンテンツとともに削除されるタグのリスト。\",\n  \"Line Breaker Tags\": \"改行タグ\",\n  \"The list of tags that are used to place a line breaker element between.\": \"間に改行要素を配置するために使用されるタグのリスト。\",\n  \"Toolbar Buttons\": \"ツールバーのボタン\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"デフォルトでリッチエディターに表示されるツールバーボタン。\",\n  \"Insert a preset toolbar button configuration\": \"プリセットのツールバーボタン構成を挿入する\",\n  \"Allowed Attributes\": \"許可される属性\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"通常の許可に加えて、許可される HTML 属性のリスト。\",\n  \"Enable code snippets (Tab)\": \"コード スニペットを有効にする (タブ)\",\n  \"Title\": \"タイトル\",\n  \"Description\": \"説明\",\n  \"Attachment\": \"添付\",\n  \"Add a title and description for this attachment.\": \"この添付のタイトルと説明を追加します。\",\n  \"Create :name\": \"作成 :name\",\n  \"Update :name\": \"更新 :name\",\n  \"Add :name\": \"追加 :name\",\n  \"Link :name\": \"リンク :name\",\n  \"Unlink\": \"リンク解除\",\n  \"Are you sure?\": \"リンクを解除していいですか？\",\n  \"Preview :name\": \"プレビュー :name\",\n  \"Link a New :name\": \"新しいリンク :name\",\n  \"Add a New :name\": \"新しい追加 :name\",\n  \"Related :name Data\": \"関連するデータ :name\",\n  \":name Created\": \":nameを作成しました。\",\n  \":name Updated\": \":nameを更新しました。\",\n  \":name Deleted\": \":nameを削除しました。\",\n  \"Form record with an ID of :id could not be found.\": \"IDが:idのフォームレコードが見つかりません。\",\n  \"Preview the Website\": \"Webサイトをプレビューする\",\n  \"Manage back-end administrator users, groups and permissions.\": \"バックエンドの管理ユーザーとグループ、権限の管理。\",\n  \"Branding & Appearance\": \"バックエンドのカスタマイズ\",\n  \"Customize the administration area such as name, colors and logo.\": \"システム管理者領域を設定します。例えば、名前や色、ロゴ。\",\n  \"Editor Settings\": \"エディタ\",\n  \"Change the global editor preferences.\": \"コードエディタ設定の管理\",\n  \"My Account\": \"アカウント\",\n  \"Update your account details such as name, email address and password.\": \"名前、電子メールアドレス、パスワードなどのあなたのアカウント詳細をアップデートしてください。\",\n  \"Backend Preferences\": \"バックエンド\",\n  \"Manage your account preferences such as desired language.\": \"言語の設定などを行います。\",\n  \"security login\": \"セキュリティ ログイン\",\n  \"List Setup\": \"リストのセットアップ\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"リストの表示したいカラムをチェックボックスで選択してください。カラムの位置は上下にドラッグして変更できます。\",\n  \"Records Per Page\": \"ページ中のレコード数\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"ページあたりの表示レコード数を選択してください。1ページにたくさん表示するとパフォーマンスに影響があるので留意してください。\",\n  \"Add Selected\": \"追加は選択されています\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP拡張\\\":name\\\"はインストールされていません。PHP拡張をインストールして有効にしてください。\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"ディレクトリ\\\":name\\\"またはそのサブディレクトリは、PHPから書き込みできません。このディレクトリのパーミッションを設定してください。\"\n}"
  },
  {
    "path": "modules/backend/lang/kaa.json",
    "content": "{\n  \"Cancel\": \"Biykarlaw\",\n  \"You are viewing as\": \"You are viewing as\",\n  \"Preview Role\": \"Preview Role\",\n  \"This lets you test the actions this role can perform.\": \"This lets you test the actions this role can perform.\",\n  \"View As Role\": \"View As Role\",\n  \"Return to Role Settings\": \"Return to Role Settings\",\n  \"Password must have a minimum of length of :min characters\": \"Password must have a minimum of length of :min characters\",\n  \"Password must contain at least one uppercase character.\": \"Password must contain at least one uppercase character.\",\n  \"Password must contain at least one lowercase character.\": \"Password must contain at least one lowercase character.\",\n  \"Password must contain at least one number.\": \"Password must contain at least one number.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Password must contain at least one nonalphanumeric character.\",\n  \"Welcome to your Administration Area, :name\": \":name, administrator maydanıńızǵa xosh keldińiz\",\n  \"Duplicate\": \"Nusqalaw\",\n  \"Expand\": \"Keńeytiw\",\n  \"Collapse\": \"Qısqartıw\",\n  \"Move Up\": \"Move Up\",\n  \"Move Down\": \"Move Down\",\n  \"Remove\": \"Óshiriw\",\n  \"Manage Item\": \"Elementti sazlaw\",\n  \"Clear Filters\": \"Filtrdi tazalaw\",\n  \"Filter Setup\": \"Filtr sazlawı\",\n  \"Apply\": \"Qollanıw\",\n  \"Clear\": \"Tazalaw\",\n  \"is equal to\": \"teń\",\n  \"is between\": \"aralıǵında\",\n  \"contains\": \"óz ishine aladı\",\n  \"is before\": \"deyin\",\n  \"is after\": \"keyin\",\n  \"is greater than\": \"den kóp\",\n  \"is less than\": \"den az\",\n  \"1. Export output format\": \"1. Eksport formatın tańlaw\",\n  \"File Format\": \"Fayl formatı\",\n  \"Delimiter Character\": \"Delimiter Character\",\n  \"Enclosure Character\": \"Enclosure Character\",\n  \"Escape Character\": \"Escape Character\",\n  \"2. Select columns to export\": \"2. Select columns to export\",\n  \"Columns\": \"Columns\",\n  \"3. Set export options\": \"3. Set export options\",\n  \"CSV Custom\": \"Arnawlı CSV\",\n  \"1. Upload an Import File\": \"1. Import faylın júkleń\",\n  \"Import File\": \"Fayldı importlaw\",\n  \"File Encoding\": \"File Encoding\",\n  \"First row contains column titles\": \"First row contains column titles\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Leave this checked if the first row in the CSV is used as the column titles.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"File columns\",\n  \"Database fields\": \"Maǵlıwmatlar bazasınıń qatarları\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Export progress\",\n  \"Processing\": \"Processing\",\n  \"Import progress\": \"Import progress\",\n  \"Import error\": \"Importlaw qátesi\",\n  \"Export error\": \"Eksportlaw qátesi\",\n  \"Column preview\": \"Column preview\",\n  \"Column\": \"Qatar\",\n  \"Disable\": \"Óshiriw\",\n  \"Enable\": \"Qosıw\",\n  \"Delete\": \"Óshiriw\",\n  \"Export\": \"Eksportlaw\",\n  \"Import\": \"Importlaw\",\n  \"Select Action\": \"Háreketti tańlań\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Ótinish, administrator paneline kiriw ushın jańa akkaunt jaratıw.\",\n  \"First Name\": \"Atı\",\n  \"Last Name\": \"Familiyası\",\n  \"Email Address\": \"Elektron pochta mánzili\",\n  \"Pick a Username\": \"Paydalanıwshı atın tańlań\",\n  \"Enter New Password\": \"Jańa parol kirgiziń\",\n  \"Confirm Password\": \"Paroldi tastıyıqlań\",\n  \"Create Account\": \"Akkaunt jaratıw\",\n  \"Getting Ready\": \"Getting Ready\",\n  \"Just a few more minutes\": \"Jáne birneshe minut\",\n  \"Migrating Database\": \"Migrating Database\",\n  \"Access the Backend Panel\": \"Access the Backend Panel\",\n  \"View Backend During Maintenance\": \"Xızmet kórsetiw waqtında administrator panelin kóriw\",\n  \"Perform Software Updates\": \"Perform Software Updates\",\n  \"In Maintenance\": \"Xızmet kórsetiw rejiminde\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Bul sayt házirgi waqıtta xızmet kórsetiw rejiminde, ótinish, keyinirek kiriń.\",\n  \"Dashboard\": \"Dashboard\",\n  \"Administrators\": \"Administratorlar\",\n  \"Manage Admins\": \"Adminlerdi basqarıw\",\n  \"Create Admins\": \"Administratorlardı jaratıw\",\n  \"Moderate Admins\": \"Moderate Admins\",\n  \"Manage account suspension and ban admin accounts\": \"Manage account suspension and ban admin accounts\",\n  \"Role Permissions\": \"Role Permissions\",\n  \"Team Groups\": \"Toparlardı basqarıw\",\n  \"Manage Other Admins\": \"Basqa adminlerdi basqarıw\",\n  \"Allow users to reset passwords and update emails.\": \"Paydalanıwshılarǵa parolin tiklewge hám elektron pochtasın jańalawǵa ruqsat beriw.\",\n  \"Delete Admins\": \"Administratorlardı óshiriw\",\n  \"Preferences\": \"Preferences\",\n  \"Settings\": \"Sazlawlar\",\n  \"Background Color\": \"Fon reńi\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Allow users to create new roles and edit or delete roles lower than their highest role.\",\n  \"Save Changes\": \"Ózgerislerdi saqlaw\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\",\n  \"Access Log\": \"Kiriw esabı\",\n  \"View a list of successful back-end user sign ins.\": \"View a list of successful back-end user sign ins.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Sáne hám waqıt\",\n  \"Type\": \"Túr\",\n  \"IP address\": \"IP mánzil\",\n  \"Username\": \"Paydalanıwshı atı\",\n  \"Login\": \"Kiriw\",\n  \"First name\": \"Atı\",\n  \"Last name\": \"Familiyası\",\n  \"Email\": \"Elektron pochta\",\n  \"A custom schema is used for this file format.\": \"A custom schema is used for this file format.\",\n  \"Select\": \"Tańlaw\",\n  \"Replace\": \"Replace\",\n  \"and\": \"hám\",\n  \"Go\": \"Ótiw\",\n  \"Go to page\": \"Betke ótiw\",\n  \"Copy to Clipboard\": \"Almasıw buferine kóshirip alıw\",\n  \"Reveal Contents\": \"Reveal Contents\",\n  \"Selected Site\": \"Tańlanǵan sayt\",\n  \"Use Emmet abbreviations\": \"Use Emmet abbreviations\",\n  \"A record does not exist for the selected site. Create one?\": \"A record does not exist for the selected site. Create one?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"The details you entered did not match our records. Please double-check and try again.\",\n  \"Administration Area\": \"Administration Area\",\n  \"Password Reset\": \"Paroldi tiklew\",\n  \"Please enter a new password.\": \"Ótinish, jańa paroldi kirgiziń.\",\n  \"Password\": \"Parol\",\n  \"Password Restore\": \"Paroldi tiklew\",\n  \"Please enter your login to restore the password.\": \"Ótinish, paroldi tiklew ushın paydalanıwshı atın kirgiziń.\",\n  \"A user could not be found with a login value of ':login'\": \"Paydalanıwshı ':login' tabılmadı\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Eger siziń akkauntıńız bar bolsa, elektron pochtańızǵa paroldi tiklew boyınsha kórsetpe jiberiledi.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Nadurıs parol. Qayta urınıp kóriń!\",\n  \"Unable to reset your password!\": \"Parolińizdi tiklew múmkin emes!\",\n  \"Password has been reset. You may now sign in.\": \"Parol tabıslı tiklendi. Endi siz kiriwińiz múmkin.\",\n  \"Restore\": \"Tiklew\",\n  \"Reset\": \"Qayta ornatıw\",\n  \"Stay logged in\": \"Stay logged in\",\n  \"Forgot password?\": \"Parolińizdi umıttıńız ba?\",\n  \"Global Editor Settings\": \"Redaktordıń global sazlawları\",\n  \"Manage Widgets\": \"Vidjetlerdi basqarıw\",\n  \"Add Widget\": \"Vidjet qosıw\",\n  \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n  \"Make Default\": \"Make Default\",\n  \"Reset layout back to default?\": \"Reset layout back to default?\",\n  \"Reset Layout\": \"Reset Layout\",\n  \"Widget\": \"Vidjet\",\n  \"please select\": \"ótinish, tańlań\",\n  \"Width\": \"Width\",\n  \"full width\": \"full width\",\n  \"Create Widgets\": \"Vidjetlerdi jaratıw\",\n  \"not equal to\": \"teń emes\",\n  \"Light Mode\": \"Jaqtı tema\",\n  \"Dark Mode\": \"Qarańǵı tema\",\n  \"OS Default\": \"OS Default\",\n  \"Create a Custom Palette\": \"Create a Custom Palette\",\n  \"Custom Palette\": \"Custom Palette\",\n  \"Primary Color\": \"Tiykarǵı reń\",\n  \"Secondary Color\": \"Ekinshi reń\",\n  \"Selection Color\": \"Selection Color\",\n  \"Nav Text\": \"Nav Text\",\n  \"Nav Background\": \"Navigaciya fonı\",\n  \"Sidebar Text\": \"Sidebar Text\",\n  \"Sidebar Background\": \"Sidebar Background\",\n  \"Sidebar Active Text\": \"Sidebar Active Text\",\n  \"Sidebar Active Background\": \"Sidebar Active Background\",\n  \"Sidebar Hover Background\": \"Sidebar Hover Background\",\n  \"Settings Text\": \"Settings Text\",\n  \"Settings Background\": \"Settings Background\",\n  \"Settings Item Background\": \"Settings Item Background\",\n  \"Settings Active Color\": \"Settings Active Color\",\n  \"Settings Active Background\": \"Settings Active Background\",\n  \"Settings Hover Background\": \"Settings Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"This name is shown in the title area of the back-end.\",\n  \"App Name\": \"Qosımsha ataması\",\n  \"This name is shown on the sign in screen for the back-end.\": \"This name is shown on the sign in screen for the back-end.\",\n  \"App Tagline\": \"App Tagline\",\n  \"Brand\": \"Brand\",\n  \"Upload a custom logo to use in the back-end.\": \"Upload a custom logo to use in the back-end.\",\n  \"Logo\": \"Logotip\",\n  \"Upload a custom favicon to use in the back-end\": \"Upload a custom favicon to use in the back-end\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigaciya logotipi\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Replaces the dashboard link with a custom logo in the navigation.\",\n  \"Dashboard Icon\": \"Dashboard Icon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Use a custom image for the dashboard icon (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Bul xabar administrator paneline kiriw aynasında kórsetiledi.\",\n  \"Welcome Message\": \"Welcome Message\",\n  \"Login Page\": \"Kiriw beti\",\n  \"Background Type\": \"Fon túri\",\n  \"Flat Color\": \"Flat Color\",\n  \"Wallpaper\": \"Wallpaper\",\n  \"Wallpaper Size\": \"Wallpaper Size\",\n  \"Auto\": \"Avto\",\n  \"Cover\": \"Cover\",\n  \"Background Wallpaper Image\": \"Background Wallpaper Image\",\n  \"Image\": \"Súwret\",\n  \"Random Autumn Images\": \"Random Autumn Images\",\n  \"Custom Image\": \"Arnawlı súwret\",\n  \"Login Page Image\": \"Kiriw beti súwreti\",\n  \"Colors\": \"Reńler\",\n  \"Color Mode\": \"Reńli rejim\",\n  \"Color Preset\": \"Color Preset\",\n  \"Menu Style\": \"Menyu stili\",\n  \"Navigation\": \"Navigaciya\",\n  \"Custom Stylesheet\": \"Qosımsha CSS stiller\",\n  \"Styles\": \"Stiller\",\n  \"Inline\": \"Inline\",\n  \"Text\": \"Tekst\",\n  \"Tiles\": \"Tiles\",\n  \"Collapsed\": \"Qısqartılǵan\",\n  \"Icons\": \"Icons\",\n  \"Left Side\": \"Qaptalda\",\n  \"Add New Item\": \"Jańa element qosıw\",\n  \"Link Color\": \"Silteme reńi\",\n  \"Current Password\": \"Ámeldegi parol\",\n  \"New Password\": \"Jańa parol\",\n  \"Current password does not match. Please try again!\": \"Ámeldegi parol sáykes emes. Ótinish, qayta urınıp kóriń!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Your password has expired, please create a new one for security reasons.\",\n  \"Region\": \"Aymaq\",\n  \"Locale\": \"Til\",\n  \"Select your desired locale for language use.\": \"Basqarıw paneliniń tilin tańlań.\",\n  \"Timezone\": \"Timezone\",\n  \"Adjust displayed dates to this timezone.\": \"Adjust displayed dates to this timezone.\",\n  \"Code Editor\": \"Kod redaktorı\",\n  \"Color Scheme\": \"Color Scheme\",\n  \"Word Wrap\": \"Word Wrap\",\n  \"Off\": \"Óshirilgen\",\n  \"40 Characters\": \"40 Characters\",\n  \"80 Characters\": \"80 Characters\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"Shrift ólshemi\",\n  \"Tab Size\": \"Tab Size\",\n  \"Code Folding\": \"Kodtı qısqartıw\",\n  \"Mark begin\": \"Belgi basında\",\n  \"Mark begin and end\": \"Belgi basında hám sońında\",\n  \"Autocompletion\": \"Avtomat tárizde toltırıw\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Basic Autocompletion (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Live Autocompletion\",\n  \"Show gutter\": \"Show gutter\",\n  \"Highlight active line\": \"Highlight active line\",\n  \"Automatically close tags\": \"Avtomat tárizde teglerdi jabıw\",\n  \"Indent using tabs\": \"Indent using tabs\",\n  \"Show indent guides\": \"Show indent guides\",\n  \"Show invisible characters\": \"Show invisible characters\",\n  \"Show print margin\": \"Show print margin\",\n  \"Custom styles to include in the HTML editor.\": \"Custom styles to include in the HTML editor.\",\n  \"Markup Styles\": \"Markup Styles\",\n  \"Paragraph Formats\": \"Jańa jol formatı\",\n  \"Markup Classes\": \"Markup Classes\",\n  \"Label\": \"Label\",\n  \"Paragraph\": \"Paragraph\",\n  \"Class Name\": \"Klass ataması\",\n  \"Link\": \"Silteme\",\n  \"Table\": \"Keste\",\n  \"Table Cell\": \"Table Cell\",\n  \"Allowed Tags\": \"Ruqsat berilgen tegler\",\n  \"The list of allowed tags.\": \"Ruqsat berilgen tegler dizimi.\",\n  \"Markup Tags\": \"Markup Tags\",\n  \"Allowed Empty Tags\": \"Ruqsat berilgen bos tegler\",\n  \"The list of tags that are not removed when they have no content inside.\": \"The list of tags that are not removed when they have no content inside.\",\n  \"Do Not Wrap Tags\": \"Do Not Wrap Tags\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"The list of tags that should not be wrapped inside block tags.\",\n  \"Remove Tags\": \"Teglerdi óshiriw\",\n  \"The list of tags that are removed together with their content.\": \"The list of tags that are removed together with their content.\",\n  \"Line Breaker Tags\": \"Line Breaker Tags\",\n  \"The list of tags that are used to place a line breaker element between.\": \"The list of tags that are used to place a line breaker element between.\",\n  \"Toolbar Buttons\": \"Ásbaplar panelindegi túymeler\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"The Toolbar Buttons to be displayed in the Rich Editor by default.\",\n  \"Insert a preset toolbar button configuration\": \"Insert a preset toolbar button configuration\",\n  \"Allowed Attributes\": \"Allowed Attributes\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"The list of allowed HTML attributes, in addition to the normal allowances.\",\n  \"Enable code snippets (Tab)\": \"Enable code snippets (Tab)\",\n  \"Title\": \"Ataması\",\n  \"Description\": \"Táriyp\",\n  \"Attachment\": \"Attachment\",\n  \"Attachment URL\": \"Attachment URL\",\n  \"Add a title and description for this attachment.\": \"Add a title and description for this attachment.\",\n  \"Upload\": \"Júklew\",\n  \"Are you sure?\": \"Isenimińiz kámil me?\",\n  \"Delete Selected\": \"Delete Selected\",\n  \"Upload Error\": \"Júklew qáteligi\",\n  \"Remove File\": \"Fayldı óshiriw\",\n  \"Show Light Switch\": \"Show Light Switch\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Allow users to toggle the color mode from the navigation.\",\n  \"Create :name\": \"Create :name\",\n  \"Update :name\": \"Update :name\",\n  \"Add :name\": \"Add :name\",\n  \"Link :name\": \"Link :name\",\n  \"Unlink\": \"Unlink\",\n  \"Preview :name\": \"Preview :name\",\n  \"Link a New :name\": \"Link a New :name\",\n  \"Add a New :name\": \"Add a New :name\",\n  \"Related :name Data\": \"Related :name Data\",\n  \":name Created\": \":name Created\",\n  \":name Updated\": \":name Updated\",\n  \":name Deleted\": \":name Deleted\",\n  \":name Added\": \":name Added\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"Form record with an ID of :id could not be found.\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Preview the Website\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Manage back-end administrator users, groups and permissions.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Branding & Appearance\",\n  \"Customize the administration area such as name, colors and logo.\": \"Customize the administration area such as name, colors and logo.\",\n  \"Editor Settings\": \"Redaktor sazlawları\",\n  \"Change the global editor preferences.\": \"Change the global editor preferences.\",\n  \"My Account\": \"Meniń akkauntım\",\n  \"Update your account details such as name, email address and password.\": \"Update your account details such as name, email address and password.\",\n  \"Backend Preferences\": \"Basqarıw panelinıń sazlawları\",\n  \"Manage your account preferences such as desired language.\": \"Manage your account preferences such as desired language.\",\n  \"security login\": \"qáwipsiz kiriw\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create & Close\": \"Create & Close\",\n  \"Creating :name...\": \"Creating :name...\",\n  \"Save & Close\": \"Save & Close\",\n  \"Saving :name...\": \"Saving :name...\",\n  \"Delete this record?\": \"Delete this record?\",\n  \"Deleting :name...\": \"Deleting :name...\",\n  \"Loading...\": \"Loading...\",\n  \"Complete\": \"Complete\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Unknown column\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Ignore this column\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Created\",\n  \"Updated\": \"Updated\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Warnings\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Skipped Rows\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"File not found\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\"\n}"
  },
  {
    "path": "modules/backend/lang/kk.json",
    "content": "{\n  \"Cancel\": \"Доғару\",\n  \"You are viewing as\": \"You are viewing as\",\n  \"Preview Role\": \"Preview Role\",\n  \"This lets you test the actions this role can perform.\": \"This lets you test the actions this role can perform.\",\n  \"View As Role\": \"View As Role\",\n  \"Return to Role Settings\": \"Return to Role Settings\",\n  \"Password must have a minimum of length of :min characters\": \"Password must have a minimum of length of :min characters\",\n  \"Password must contain at least one uppercase character.\": \"Password must contain at least one uppercase character.\",\n  \"Password must contain at least one lowercase character.\": \"Password must contain at least one lowercase character.\",\n  \"Password must contain at least one number.\": \"Password must contain at least one number.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Password must contain at least one nonalphanumeric character.\",\n  \"Welcome to your Administration Area, :name\": \"Welcome to your Administration Area, :name\",\n  \"Duplicate\": \"Қайталаным\",\n  \"Expand\": \"Кеңейту\",\n  \"Collapse\": \"Жию\",\n  \"Move Up\": \"Жоғары жылжыту\",\n  \"Move Down\": \"Төменге жылжыту\",\n  \"Remove\": \"Жою\",\n  \"Manage Item\": \"Элементті басқару\",\n  \"Clear Filters\": \"Фильтрлерді тазалау\",\n  \"Filter Setup\": \"Фильтрлерді баптау\",\n  \"Apply\": \"Қолдану\",\n  \"Clear\": \"Тазарту\",\n  \"is equal to\": \"is equal to\",\n  \"is between\": \"is between\",\n  \"contains\": \"contains\",\n  \"is before\": \"is before\",\n  \"is after\": \"is after\",\n  \"is greater than\": \"is greater than\",\n  \"is less than\": \"is less than\",\n  \"1. Export output format\": \"1. Export output format\",\n  \"File Format\": \"File Format\",\n  \"Delimiter Character\": \"Delimiter Character\",\n  \"Enclosure Character\": \"Enclosure Character\",\n  \"Escape Character\": \"Escape Character\",\n  \"2. Select columns to export\": \"2. Select columns to export\",\n  \"Columns\": \"Бағаналар\",\n  \"3. Set export options\": \"3. Set export options\",\n  \"CSV Custom\": \"CSV Custom\",\n  \"1. Upload an Import File\": \"1. Upload an Import File\",\n  \"Import File\": \"Файлды импорттау\",\n  \"File Encoding\": \"Файлды кодтау\",\n  \"First row contains column titles\": \"Бірінші жолда баған тақырыптары бар\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Leave this checked if the first row in the CSV is used as the column titles.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"Файл бағаналары\",\n  \"Database fields\": \"Дерекқор өрісі\",\n  \"3. Set Import Options\": \"3. Импорттау параметрлерін орнату\",\n  \"Export progress\": \"Экспорттау барысы\",\n  \"Processing\": \"Өңделуде\",\n  \"Import progress\": \"Import progress\",\n  \"Import error\": \"Import error\",\n  \"Export error\": \"Export error\",\n  \"Column preview\": \"Column preview\",\n  \"Column\": \"Бағана\",\n  \"Disable\": \"Өшіру\",\n  \"Enable\": \"Қосу\",\n  \"Delete\": \"Жою\",\n  \"Export\": \"Экспорт\",\n  \"Import\": \"Импорт\",\n  \"Select Action\": \"Әрекетті таңдаңыз\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Please create a new account for logging in to the Administration Area.\",\n  \"First Name\": \"Аты\",\n  \"Last Name\": \"Тегі\",\n  \"Email Address\": \"Электронды поштаның мекенжайы\",\n  \"Pick a Username\": \"Пайдаланушы аты таңдаңыз\",\n  \"Enter New Password\": \"Жаңа құпия сөзді енгізіңіз\",\n  \"Confirm Password\": \"Құпия сөзді растау\",\n  \"Create Account\": \"Аккаунтты тіркеу\",\n  \"Getting Ready\": \"Getting Ready\",\n  \"Just a few more minutes\": \"Тағы бірнеше минут\",\n  \"Migrating Database\": \"Дерекқорды тасымалдау\",\n  \"Access the Backend Panel\": \"Ішкі панельге қол жеткізу\",\n  \"View Backend During Maintenance\": \"View Backend During Maintenance\",\n  \"Perform Software Updates\": \"Perform Software Updates\",\n  \"In Maintenance\": \"In Maintenance\",\n  \"The site is currently in maintenance mode, please check back later.\": \"The site is currently in maintenance mode, please check back later.\",\n  \"Dashboard\": \"Аспаптар панелі\",\n  \"Administrators\": \"Administrators\",\n  \"Manage Admins\": \"Manage Admins\",\n  \"Create Admins\": \"Create Admins\",\n  \"Moderate Admins\": \"Moderate Admins\",\n  \"Manage account suspension and ban admin accounts\": \"Manage account suspension and ban admin accounts\",\n  \"Role Permissions\": \"Role Permissions\",\n  \"Team Groups\": \"Team Groups\",\n  \"Manage Other Admins\": \"Manage Other Admins\",\n  \"Allow users to reset passwords and update emails.\": \"Allow users to reset passwords and update emails.\",\n  \"Delete Admins\": \"Delete Admins\",\n  \"Preferences\": \"Preferences\",\n  \"Settings\": \"Баптаулар\",\n  \"Background Color\": \"Фон түсі\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Allow users to create new roles and edit or delete roles lower than their highest role.\",\n  \"Save Changes\": \"Өзгерістерді сақтау\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\",\n  \"Access Log\": \"Access Log\",\n  \"View a list of successful back-end user sign ins.\": \"View a list of successful back-end user sign ins.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Күн & уақыт\",\n  \"Type\": \"Түр\",\n  \"IP address\": \"IP адресі\",\n  \"Username\": \"Қолданушы есімі\",\n  \"Login\": \"Кіру\",\n  \"First name\": \"Аты\",\n  \"Last name\": \"Тегі\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"A custom schema is used for this file format.\",\n  \"Select\": \"Тандау\",\n  \"Replace\": \"Replace\",\n  \"and\": \"және\",\n  \"Go\": \"Go\",\n  \"Go to page\": \"Go to page\",\n  \"Copy to Clipboard\": \"Copy to Clipboard\",\n  \"Reveal Contents\": \"Reveal Contents\",\n  \"Selected Site\": \"Selected Site\",\n  \"Use Emmet abbreviations\": \"Use Emmet abbreviations\",\n  \"A record does not exist for the selected site. Create one?\": \"A record does not exist for the selected site. Create one?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"The details you entered did not match our records. Please double-check and try again.\",\n  \"Administration Area\": \"Administration Area\",\n  \"Password Reset\": \"Password Reset\",\n  \"Please enter a new password.\": \"Please enter a new password.\",\n  \"Password\": \"Password\",\n  \"Password Restore\": \"Password Restore\",\n  \"Please enter your login to restore the password.\": \"Please enter your username to restore the password.\",\n  \"A user could not be found with a login value of ':login'\": \"A user could not be found with a login value of ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"If your account was found, a message has been sent to your email address with instructions.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Invalid password reset data supplied. Please try again!\",\n  \"Unable to reset your password!\": \"Unable to reset your password!\",\n  \"Password has been reset. You may now sign in.\": \"Password has been reset. You may now sign in.\",\n  \"Restore\": \"Restore\",\n  \"Reset\": \"Reset\",\n  \"Stay logged in\": \"Stay logged in\",\n  \"Forgot password?\": \"Forgot password?\",\n  \"Global Editor Settings\": \"Global Editor Settings\",\n  \"Manage Widgets\": \"Manage Widgets\",\n  \"Add Widget\": \"Add Widget\",\n  \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n  \"Make Default\": \"Make Default\",\n  \"Reset layout back to default?\": \"Reset layout back to default?\",\n  \"Reset Layout\": \"Reset Layout\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"please select\",\n  \"Width\": \"Width\",\n  \"full width\": \"full width\",\n  \"Create Widgets\": \"Create Widgets\",\n  \"not equal to\": \"not equal to\",\n  \"Light Mode\": \"Light Mode\",\n  \"Dark Mode\": \"Dark Mode\",\n  \"OS Default\": \"OS Default\",\n  \"Create a Custom Palette\": \"Create a Custom Palette\",\n  \"Custom Palette\": \"Custom Palette\",\n  \"Primary Color\": \"Primary Color\",\n  \"Secondary Color\": \"Secondary Color\",\n  \"Selection Color\": \"Selection Color\",\n  \"Nav Text\": \"Nav Text\",\n  \"Nav Background\": \"Nav Background\",\n  \"Sidebar Text\": \"Sidebar Text\",\n  \"Sidebar Background\": \"Sidebar Background\",\n  \"Sidebar Active Text\": \"Sidebar Active Text\",\n  \"Sidebar Active Background\": \"Sidebar Active Background\",\n  \"Sidebar Hover Background\": \"Sidebar Hover Background\",\n  \"Settings Text\": \"Settings Text\",\n  \"Settings Background\": \"Settings Background\",\n  \"Settings Item Background\": \"Settings Item Background\",\n  \"Settings Active Color\": \"Settings Active Color\",\n  \"Settings Active Background\": \"Settings Active Background\",\n  \"Settings Hover Background\": \"Settings Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"This name is shown in the title area of the back-end.\",\n  \"App Name\": \"App Name\",\n  \"This name is shown on the sign in screen for the back-end.\": \"This name is shown on the sign in screen for the back-end.\",\n  \"App Tagline\": \"App Tagline\",\n  \"Brand\": \"Brand\",\n  \"Upload a custom logo to use in the back-end.\": \"Upload a custom logo to use in the back-end.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Upload a custom favicon to use in the back-end\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigation Logo\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Replaces the dashboard link with a custom logo in the navigation.\",\n  \"Dashboard Icon\": \"Dashboard Icon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Use a custom image for the dashboard icon (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"This message is shown on the sign in screen for the back-end.\",\n  \"Welcome Message\": \"Welcome Message\",\n  \"Login Page\": \"Login Page\",\n  \"Background Type\": \"Background Type\",\n  \"Flat Color\": \"Flat Color\",\n  \"Wallpaper\": \"Wallpaper\",\n  \"Wallpaper Size\": \"Wallpaper Size\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Cover\",\n  \"Background Wallpaper Image\": \"Background Wallpaper Image\",\n  \"Image\": \"Image\",\n  \"Random Autumn Images\": \"Random Autumn Images\",\n  \"Custom Image\": \"Custom Image\",\n  \"Login Page Image\": \"Login Page Image\",\n  \"Colors\": \"Colors\",\n  \"Color Mode\": \"Color Mode\",\n  \"Color Preset\": \"Color Preset\",\n  \"Menu Style\": \"Menu Style\",\n  \"Navigation\": \"Navigation\",\n  \"Custom Stylesheet\": \"Custom Stylesheet\",\n  \"Styles\": \"Styles\",\n  \"Inline\": \"Inline\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"Tiles\",\n  \"Collapsed\": \"Collapsed\",\n  \"Icons\": \"Icons\",\n  \"Left Side\": \"Left Side\",\n  \"Add New Item\": \"Add New Item\",\n  \"Link Color\": \"Link Color\",\n  \"Current Password\": \"Current Password\",\n  \"New Password\": \"New Password\",\n  \"Current password does not match. Please try again!\": \"Current password does not match. Please try again!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Your password has expired, please create a new one for security reasons.\",\n  \"Region\": \"Region\",\n  \"Locale\": \"Locale\",\n  \"Select your desired locale for language use.\": \"Select your desired locale for language use.\",\n  \"Timezone\": \"Timezone\",\n  \"Adjust displayed dates to this timezone.\": \"Adjust displayed dates to this timezone.\",\n  \"Code Editor\": \"Code Editor\",\n  \"Color Scheme\": \"Color Scheme\",\n  \"Word Wrap\": \"Word Wrap\",\n  \"Off\": \"Off\",\n  \"40 Characters\": \"40 Characters\",\n  \"80 Characters\": \"80 Characters\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"Font Size\",\n  \"Tab Size\": \"Tab Size\",\n  \"Code Folding\": \"Code Folding\",\n  \"Mark begin\": \"Mark begin\",\n  \"Mark begin and end\": \"Mark begin and end\",\n  \"Autocompletion\": \"Autocompletion\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Basic Autocompletion (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Live Autocompletion\",\n  \"Show gutter\": \"Show gutter\",\n  \"Highlight active line\": \"Highlight active line\",\n  \"Automatically close tags\": \"Automatically close tags\",\n  \"Indent using tabs\": \"Indent using tabs\",\n  \"Show indent guides\": \"Show indent guides\",\n  \"Show invisible characters\": \"Show invisible characters\",\n  \"Show print margin\": \"Show print margin\",\n  \"Custom styles to include in the HTML editor.\": \"Custom styles to include in the HTML editor.\",\n  \"Markup Styles\": \"Markup Styles\",\n  \"Paragraph Formats\": \"Paragraph Formats\",\n  \"Markup Classes\": \"Markup Classes\",\n  \"Label\": \"Label\",\n  \"Paragraph\": \"Paragraph\",\n  \"Class Name\": \"Class Name\",\n  \"Link\": \"Link\",\n  \"Table\": \"Table\",\n  \"Table Cell\": \"Table Cell\",\n  \"Allowed Tags\": \"Allowed Tags\",\n  \"The list of allowed tags.\": \"The list of allowed tags.\",\n  \"Markup Tags\": \"Markup Tags\",\n  \"Allowed Empty Tags\": \"Allowed Empty Tags\",\n  \"The list of tags that are not removed when they have no content inside.\": \"The list of tags that are not removed when they have no content inside.\",\n  \"Do Not Wrap Tags\": \"Do Not Wrap Tags\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"The list of tags that should not be wrapped inside block tags.\",\n  \"Remove Tags\": \"Remove Tags\",\n  \"The list of tags that are removed together with their content.\": \"The list of tags that are removed together with their content.\",\n  \"Line Breaker Tags\": \"Line Breaker Tags\",\n  \"The list of tags that are used to place a line breaker element between.\": \"The list of tags that are used to place a line breaker element between.\",\n  \"Toolbar Buttons\": \"Toolbar Buttons\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"The Toolbar Buttons to be displayed in the Rich Editor by default.\",\n  \"Insert a preset toolbar button configuration\": \"Insert a preset toolbar button configuration\",\n  \"Allowed Attributes\": \"Allowed Attributes\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"The list of allowed HTML attributes, in addition to the normal allowances.\",\n  \"Enable code snippets (Tab)\": \"Enable code snippets (Tab)\",\n  \"Title\": \"Title\",\n  \"Description\": \"Description\",\n  \"Attachment\": \"Attachment\",\n  \"Attachment URL\": \"Attachment URL\",\n  \"Add a title and description for this attachment.\": \"Add a title and description for this attachment.\",\n  \"Upload\": \"Upload\",\n  \"Are you sure?\": \"Are you sure?\",\n  \"Delete Selected\": \"Delete Selected\",\n  \"Upload Error\": \"Upload Error\",\n  \"Remove File\": \"Remove File\",\n  \"Show Light Switch\": \"Show Light Switch\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Allow users to toggle the color mode from the navigation.\",\n  \"Create :name\": \"Create :name\",\n  \"Update :name\": \"Update :name\",\n  \"Add :name\": \"Add :name\",\n  \"Link :name\": \"Link :name\",\n  \"Unlink\": \"Unlink\",\n  \"Preview :name\": \"Preview :name\",\n  \"Link a New :name\": \"Link a New :name\",\n  \"Add a New :name\": \"Add a New :name\",\n  \"Related :name Data\": \"Related :name Data\",\n  \":name Created\": \":name Created\",\n  \":name Updated\": \":name Updated\",\n  \":name Deleted\": \":name Deleted\",\n  \":name Added\": \":name Added\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"Form record with an ID of :id could not be found.\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Preview the Website\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Manage back-end administrator users, groups and permissions.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Branding & Appearance\",\n  \"Customize the administration area such as name, colors and logo.\": \"Customize the administration area such as name, colors and logo.\",\n  \"Editor Settings\": \"Editor Settings\",\n  \"Change the global editor preferences.\": \"Change the global editor preferences.\",\n  \"My Account\": \"My Account\",\n  \"Update your account details such as name, email address and password.\": \"Update your account details such as name, email address and password.\",\n  \"Backend Preferences\": \"Backend Preferences\",\n  \"Manage your account preferences such as desired language.\": \"Manage your account preferences such as desired language.\",\n  \"security login\": \"security login\"\n}"
  },
  {
    "path": "modules/backend/lang/ko/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => '유효하지 않은 필드타입 사용 :type ',\n    'options_method_invalid_model' => '\\':field\\' 속성은 리졸브 될 수 없습니다. :model 모델 클래스의 특정 옵션 메소드를 명시적으로 사용해 보세요.',\n    'options_method_not_exists' => ':model 모델 클래스는 \":field\" 폼 필드의 옵션들을 반환하기위한  :method() 메소드를 정의해야 합니다.',\n  ],\n  'widget' => [\n    'not_registered' => '\\':name\\' 위젯 클래스로 등록되지 않았습니다.',\n    'not_bound' => '\\':name\\' 위젯 클래스는 컨트롤러와 바인드되지 않았습니다.',\n  ],\n  'page' => [\n    'untitled' => '타이틀 없음',\n    'access_denied' => [\n      'label' => '액세스가 거부되었습니다',\n      'help' => '이 페이지를 표시하기위한 권한이 없습니다.',\n      'cms_link' => 'CMS의 백엔드로 가기',\n    ],\n    'no_database' => [\n      'label' => 'DB를 찾을 수 없습니다',\n      'help' => '백엔드에 접속하기 위해선 DB가 필요합니다. 다시 접속하시기 전에 DB가 정상적으로 설정및 이전되었는지 확인해주세요.',\n      'cms_link' => '홈페이지로 돌아가기',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => '\\':name\\' 페이지를 찾을 수 없습니다.',\n  ],\n  'account' => [\n    'sign_out' => '로그아웃',\n    'login_placeholder' => '아이디',\n    'password_placeholder' => '비밀번호',\n    'enter_email' => '이메일 주소를 입력해주세요',\n    'email_placeholder' => '이메일 주소',\n    'apply' => '적용',\n    'cancel' => '취소',\n    'delete' => '삭제',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => '대시보드',\n    'widget_inspector_title' => '위젯 환경설정',\n    'widget_inspector_description' => '리포트 위젯',\n    'widget_columns_label' => '넓이 :columns',\n    'widget_columns_description' => '위젯 넓이는 1에서 10까지 숫자입니다.',\n    'widget_columns_error' => '위젯 넓이는 1에서 10까지의 숫자로 입력해주세요.',\n    'columns' => '{1} 열|[2,Inf] 열',\n    'widget_new_row_label' => '신규 행',\n    'widget_new_row_description' => '신규 행에 위젯을 놓습니다.',\n    'widget_title_label' => '위젯 제목',\n    'widget_title_error' => '위젯 제목이 필요합니다.',\n    'reset_layout_success' => '레이아웃이 초기화 되었습니다',\n    'make_default_success' => '현재 레이아웃을 기본값으로 설정했습니다',\n    'collapse_all' => '전체 접기',\n    'expand_all' => '전체 펼치기',\n    'status' => [\n      'widget_title_default' => '시스템 상태',\n      'update_available' => '{0} 업데이트 가능!|{1} 업데이트 가능!|[2,Inf] 업데이트 가능!',\n      'updates_pending' => 'SW 업데이트 보류',\n      'updates_nil' => 'SW가 업데이트 되었습니다',\n      'updates_link' => '업데이트',\n      'warnings_pending' => '몇몇 이슈는 주의가 필요합니다',\n      'warnings_nil' => '표시할 경고가 없습니다',\n      'warnings_link' => '보기',\n      'core_build' => '시스템 빌드',\n      'event_log' => '이벤트 로그',\n      'request_log' => '요청 로그',\n      'app_birthday' => '온라인시간 ',\n    ],\n    'welcome' => [\n      'widget_title_default' => '환영합니다',\n      'welcome_back_name' => ':app로 돌아오신것을 환영합니다, :name님',\n      'welcome_to_name' => ':app로 오신것을 환영합니다, :name님',\n      'first_sign_in' => '이번이 최초접속입니다.',\n      'last_sign_in' => '당신의 최종 접속은 ',\n      'view_access_logs' => '접속 로그 보기',\n      'nice_message' => '좋은 하루 되세요!',\n    ],\n  ],\n  'user' => [\n    'name' => '사용자관리',\n    'list_title' => '사용자 관리',\n    'new' => '신규사용자',\n    'first_name' => '이름',\n    'last_name' => '성',\n    'full_name' => '성명',\n    'email' => '이메일주소',\n    'groups' => '그룹',\n    'groups_comment' => '이 사용자가 소속될 그룹을 선택해 주세요.',\n    'avatar' => '아바타',\n    'password' => '비밀번호',\n    'password_confirmation' => '비밀번호 확인',\n    'permissions' => '권한',\n    'superuser' => '수퍼유저',\n    'superuser_comment' => '전영역의 접속을 이사용자에게 허가하길 원할경우 체크해주세요.',\n    'send_invite' => '이메일로 초대장 발송',\n    'send_invite_comment' => '이 사용자에 초대장을 발송하길 원할경우 체크해주세요.',\n    'delete_confirm' => '이 사용자를 정말로 삭제하시겠습니까?',\n    'return' => '사용자관리로 돌아가기',\n    'allow' => '허가',\n    'inherit' => '상속',\n    'deny' => '거부',\n    'activated' => '활성화됨',\n    'last_login' => '최종접속',\n    'created_at' => '생성일시',\n    'updated_at' => '변경일시',\n    'group' => [\n      'name' => '그룹',\n      'name_comment' => '사용자 관리폼에 표시될 그룹목록에 표시됩니다.',\n      'name_field' => '이름',\n      'description_field' => '설명',\n      'is_new_user_default_field_label' => '기본 그룹',\n      'is_new_user_default_field_comment' => '신규 사용자를 이 그룹에 자동으로 소속시킵니다.',\n      'code_field' => '코드',\n      'code_comment' => 'API로 그룹 오브젝트에 접근하길 원할경우 고유한 코드를 입력해주세요.',\n      'list_title' => '그룹 관리',\n      'new' => '신규 그룹',\n      'delete_confirm' => '이 사용자 그룹을 삭제하시겠습니까?',\n      'return' => '그룹 관리로 돌아가기',\n      'users_count' => '명',\n    ],\n    'preferences' => [\n      'not_authenticated' => '설정을 저장하기 위한 권한확인이 되지 않았습니다.',\n    ],\n  ],\n  'list' => [\n    'default_title' => '목록',\n    'search_prompt' => '검색...',\n    'no_records' => '표시할 기록이 없습니다.',\n    'missing_model' => ':class 클래스의 목록 행동이 모델 정의를 가지고 있지 않습니다.',\n    'missing_column' => ':columns 를 위한 칼럼정의가 없습니다.',\n    'missing_columns' => ':class 클래스에서 사용하는 List에 칼럼정의가 없습니다.',\n    'missing_definition' => '목록 행동이 \\':field\\' 칼럼을 포함하지 않습니다.',\n    'missing_parent_definition' => '목록 행동 \\':definition\\' 정의를 포함하지 않습니다.',\n    'behavior_not_ready' => '목록 행동이 초기화되지 않았습니다. 컨트롤러의 makeLists() 를 체크해주세요.',\n    'invalid_column_datetime' => '\\':column\\' 칼럼값이 DateTime 객체가 아닙니다. 모델에서 $dates 참조를 잊어버리지 않았습니까?',\n    'pagination' => '총 :total 중 표시된 기록: :from-:to',\n    'first_page' => '처음',\n    'last_page' => '마지막',\n    'prev_page' => '이전',\n    'next_page' => '다음',\n    'refresh' => '새로고침',\n    'updating' => '변경중...',\n    'loading' => '로딩중...',\n    'check' => '체크',\n    'delete_selected' => '선택삭제',\n    'delete_selected_empty' => '삭제할 기록이 없습니다.',\n    'delete_selected_confirm' => '선택하신 기록을 삭제하시겠습니까?',\n    'delete_selected_success' => '선택하신 기록을 삭제했습니다.',\n    'column_switch_true' => 'Y',\n    'column_switch_false' => 'N',\n  ],\n  'fileupload' => [\n    'default_prompt' => '여기에 %s 클릭하거나 파일 드래그하여 업로드',\n  ],\n  'form' => [\n    'create_title' => '신규 :name',\n    'update_title' => '수정 :name',\n    'preview_title' => '미리보기 :name',\n    'reset_success' => '재설정 완료',\n    'missing_id' => 'Form 기록의 ID가 특정되지 않았습니다.',\n    'missing_model' => ':class 에서 사용하는 폼 행동이 모델정의를 가지고 있지 않습니다.',\n    'missing_definition' => '폼 행동 \\':field\\' 를 위한 필드를 가지고 있지 않습니다.',\n    'action_confirm' => '진행하시겠습니까?',\n    'create' => '생성',\n    'create_and_close' => '생성후 닫기',\n    'creating' => '생성중...',\n    'creating_name' => '생성중 :name...',\n    'save' => '저장',\n    'save_and_close' => '저장후 닫기',\n    'saving' => '저장중...',\n    'saving_name' => '저장중 :name...',\n    'delete' => '삭제',\n    'deleting' => '삭제중...',\n    'confirm_delete' => '삭제하시겠습니까?',\n    'confirm_delete_multiple' => '선택하신 기록을 삭제하시겠습니까?',\n    'deleting_name' => '삭제중 :name...',\n    'reset_default' => '초기값으로 재설정',\n    'resetting' => '재설정중',\n    'resetting_name' => '재설정 :name',\n    'undefined_tab' => '기타',\n    'field_off' => '끔',\n    'field_on' => '켬',\n    'add' => '추가',\n    'apply' => '적용',\n    'cancel' => '취소',\n    'close' => '닫기',\n    'confirm' => '확인',\n    'reload' => '갱신',\n    'complete' => '완료',\n    'ok' => 'OK',\n    'or' => 'or',\n    'confirm_tab_close' => '탭을 닫으시겠습니까? 저장하지 않은 내용은 잃게됩니다.',\n    'behavior_not_ready' => '폼 행동이 초기화되지 않았습니다. 컨트롤러에서 initForm()을 체크해보세요.',\n    'preview_no_files_message' => '업로드할 파일이 없습니다.',\n    'preview_no_media_message' => '선택하신 미디어가 없습니다.',\n    'preview_no_record_message' => '선택하신 기록이 없습니다.',\n    'select' => '선택',\n    'select_all' => '모두 선택',\n    'select_none' => '없음을 선택하십시오',\n    'insert_row' => '행 추가',\n    'insert_row_below' => '아래 행 추가',\n    'delete_row' => '행 삭제',\n    'concurrency_file_changed_title' => '파일이 변경되었습니다',\n    'concurrency_file_changed_description' => '다른 사용자에의해 파일이 변경되었습니다. 갱신하여 변경내용을 버리거나 덮어쓰기를 하실 수 있습니다.',\n    'return_to_list' => '목록으로 돌아가기',\n  ],\n  'recordfinder' => [\n    'find_record' => '기록 찾기',\n    'cancel' => '취소',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => '릴레이션 행동은 \\':config\\' 설정을 가지고 있지 않습니다.',\n    'missing_definition' => '릴레이션 행동이 \\':field\\' 필드에 대한 정의를 가지고 있지 않습니다.',\n    'missing_model' => ':class 클래스에서 사용하는 릴레이션 행동은 모델정의를 가지고 있지 않습니다.',\n    'invalid_action_single' => '이 동작은 단 릴레이션에서는 실행하실 수 없습니다.',\n    'invalid_action_multi' => '이 동작은 복수 릴레이션에서는 실행하실 수 없습니다.',\n    'help' => '항목을 클릭하시면 추가합니다.',\n    'add' => '추가',\n    'link_selected' => '링크가 선택되어 있습니다',\n    'cancel' => '취소',\n    'close' => '닫기',\n    'create' => '생성',\n    'update' => '변경',\n    'preview' => '미리보기',\n    'remove_name' => '삭제 :name',\n    'delete_name' => '삭제 :name',\n    'link' => '링크',\n    'unlink_name' => '링크삭제 :name',\n  ],\n  'reorder' => [\n    'default_title' => '기록순서변경',\n    'no_records' => '분류할 기록이 없습니다.',\n  ],\n  'model' => [\n    'name' => '모델',\n    'not_found' => 'ID가 :id인 \\':class\\' 모델을 찾을 수 없습니다.',\n    'missing_id' => '모델 레코드를 찾기위한 ID 설정되어 있지 않습니다.',\n    'missing_relation' => '\\':class\\' 모델은 \\':relation\\'의 정의를 가지고있지 않습니다.',\n    'missing_method' => '\\':class\\' 모델에 \\':method\\' 메소드가 정의되어있지 않습니다.',\n    'invalid_class' => ':class 로 사용되는 :model 모델이 올바르지 않습니다. \\\\Model 클래스를 상속해주세요.',\n    'mass_assignment_failed' => '\\':attribute\\' 모델속성의 일괄설정에 실패하였습니다.',\n  ],\n  'warnings' => [\n    'tips' => '시스템설정 팁',\n    'tips_description' => '당신이 시스템을 적절하게 설정하기위해 명심해야할 이슈들이 있습니다.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => '내 설정',\n    'menu_description' => '사용자 계정의 설정을 합니다.',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => '강조 색상',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => '전체',\n    'options_method_not_exists' => ':model 모델클래스는 \\':filter\\' 필터옵션을 리턴하기위해서 반드시 :method() 메소드를 정의해야합니다.',\n    'date_all' => '전체기간',\n  ],\n  'import_export' => [\n    'upload_csv_file' => '1. CSV 파일 업로드',\n    'import_file' => '파일 가져오기',\n    'first_row_contains_titles' => '첫 행에 열 제목을 담기',\n    'first_row_contains_titles_desc' => '첫 행을 CSV의 열 타이틀로 쓰려면 이 항목을 체크해주세요.',\n    'match_columns' => '2. DB필드와 파일열을 일치',\n    'file_columns' => '파일 열',\n    'database_fields' => 'DB 필드',\n    'set_import_options' => '3. 가져오기 옵션 설정',\n    'export_output_format' => '1. 내보내기 출력 형식',\n    'file_format' => '파일 형식',\n    'standard_format' => '표준 형식',\n    'custom_format' => '다른 형식',\n    'delimiter_char' => '구분자 문자',\n    'enclosure_char' => '종결 문자',\n    'escape_char' => '회피 문자',\n    'select_columns' => '2. 내보낼 열을 선택',\n    'columns' => '열들',\n    'set_export_options' => '3. 내보내기 옵션 설정',\n    'import_progress' => '가져오기 처리',\n    'processing' => '처리중',\n    'import_error' => '가져오기 오류',\n    'export_progress' => '내보내기 처리',\n    'export_error' => '내보내기 오류',\n    'encoding_format' => '파일 인코딩',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => '미디어관리와 업로드 - 이미지, 동영상, 소리, 문서',\n  ],\n  'mediafinder' => [\n    'label' => '미디어 탐색기',\n    'default_prompt' => '%s 버튼 클릭하여 미디어 아이템 찾기',\n  ],\n  'media' => [\n    'menu_label' => '미디어',\n    'upload' => '업로드',\n    'move' => '이동',\n    'delete' => '삭제',\n    'add_folder' => '폴더 추가',\n    'search' => '검색',\n    'display' => '표시방법',\n    'filter_everything' => '전체표시',\n    'filter_images' => '이미지',\n    'filter_video' => '동영상',\n    'filter_audio' => '소리',\n    'filter_documents' => '문서',\n    'library' => '라이브러리',\n    'size' => '용량',\n    'title' => '제목',\n    'last_modified' => '최종변경',\n    'public_url' => '다운로드 URL',\n    'click_here' => '클릭해주세요',\n    'thumbnail_error' => '썸네일 생성 오류.',\n    'return_to_parent' => '상위 폴더로 돌아가기',\n    'return_to_parent_label' => '상위 폴더 ..',\n    'nothing_selected' => '선택없음.',\n    'multiple_selected' => '여러개 선택됨.',\n    'uploading_file_num' => ':number 파일 업로드중...',\n    'uploading_complete' => '업로드 완료',\n    'uploading_error' => '업로드 실패',\n    'type_blocked' => '보안문제로 해당 파일타입은 불가능합니다.',\n    'order_by' => '정렬방법',\n    'folder' => '폴더',\n    'no_files_found' => '요청하신 파일을 찾을 수 없습니다.',\n    'delete_empty' => '삭제할 대상을 선택해 주세요.',\n    'delete_confirm' => '선택하신 대상을 삭제하시겠습니까?',\n    'error_renaming_file' => '이름변경 오류.',\n    'new_folder_title' => '신규 폴더',\n    'folder_name' => '폴더 이름',\n    'error_creating_folder' => '폴더 생성 오류',\n    'folder_or_file_exist' => '해당 이름의 파일이나 폴더가 이미 존재합니다.',\n    'move_empty' => '이동할 대상을 선택하세요.',\n    'move_popup_title' => '파일이나 폴더를 이동',\n    'move_destination' => '목적지 폴더',\n    'please_select_move_dest' => '목적지 폴더를 선택하세요.',\n    'move_dest_src_match' => '다른 목적지 폴더를 선택하세요.',\n    'empty_library' => '라이브러리가 비어있습니다. 파일을 업로드하거나 폴더를 생성하여 시작해보세요.',\n    'insert' => '삽입',\n    'crop_and_insert' => '자르기 & 삽입',\n    'select_single_image' => '한개의 이미지를 선택해주세요.',\n    'selection_not_image' => '선택하신 것은 이미지가 아닙니다.',\n    'restore' => '모든 변경 되돌리기',\n    'resize' => '크기변경...',\n    'selection_mode_normal' => '일반',\n    'selection_mode_fixed_ratio' => '고정 비율',\n    'selection_mode_fixed_size' => '고정 크기',\n    'height' => '높이',\n    'width' => '넓이',\n    'selection_mode' => '선택 모드',\n    'resize_image' => '이미지 크기 변경',\n    'image_size' => '이미지 크기:',\n    'selected_size' => '선택크기:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/ko.json",
    "content": "{\n  \"Cancel\": \"취소\",\n  \"You are viewing as\": \"당신은 다음으로보고 있습니다\",\n  \"Preview Role\": \"미리보기 역할\",\n  \"This lets you test the actions this role can perform.\": \"이렇게 하면 이 역할이 수행할 수 있는 작업을 테스트할 수 있습니다.\",\n  \"View As Role\": \"역할로 보기\",\n  \"Return to Role Settings\": \"역할 설정으로 돌아가기\",\n  \"Password must have a minimum of length of :min characters\": \"비밀번호는 최소 :min 자 이상이어야 합니다.\",\n  \"Password must contain at least one uppercase character.\": \"암호는 적어도 하나의 대문자를 포함해야 합니다.\",\n  \"Password must contain at least one lowercase character.\": \"암호에는 소문자가 하나 이상 포함되어야 합니다.\",\n  \"Password must contain at least one number.\": \"비밀번호는 적어도 하나의 숫자를 포함해야합니다.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"암호에는 영숫자가 아닌 문자가 하나 이상 포함되어야 합니다.\",\n  \"Welcome to your Administration Area, :name\": \"관리 영역에 오신 것을 환영합니다. :name\",\n  \"Duplicate\": \"복제하다\",\n  \"Expand\": \"확장하다\",\n  \"Collapse\": \"무너지다\",\n  \"Move Up\": \"이동\",\n  \"Move Down\": \"아래로 이동\",\n  \"Remove\": \"삭제\",\n  \"Manage Item\": \"항목 관리\",\n  \"Clear Filters\": \"필터 지우기\",\n  \"Filter Setup\": \"필터 설정\",\n  \"Apply\": \"적용하다\",\n  \"Clear\": \"분명한\",\n  \"is equal to\": \"동일하다\",\n  \"is between\": \"사이에\",\n  \"contains\": \"포함\",\n  \"is before\": \"전에\",\n  \"is after\": \"이후\",\n  \"is greater than\": \"보다 크다\",\n  \"is less than\": \"보다 작다\",\n  \"1. Export output format\": \"1. 내보내기 출력 형식\",\n  \"File Format\": \"파일 형식\",\n  \"Delimiter Character\": \"구분자 문자\",\n  \"Enclosure Character\": \"종결 문자\",\n  \"Escape Character\": \"회피 문자\",\n  \"2. Select columns to export\": \"2. 내보낼 열을 선택\",\n  \"Columns\": \"열들\",\n  \"3. Set export options\": \"3. 내보내기 옵션 설정\",\n  \"CSV Custom\": \"다른 형식\",\n  \"1. Upload an Import File\": \"1. CSV 파일 업로드\",\n  \"Import File\": \"파일 가져오기\",\n  \"File Encoding\": \"파일 인코딩\",\n  \"First row contains column titles\": \"첫 행에 열 제목을 담기\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"첫 행을 CSV의 열 타이틀로 쓰려면 이 항목을 체크해주세요.\",\n  \"2. Match the File Columns to Database Fields\": \"2. DB필드와 파일열을 일치\",\n  \"File columns\": \"파일 열\",\n  \"Database fields\": \"DB 필드\",\n  \"3. Set Import Options\": \"3. 가져오기 옵션 설정\",\n  \"Export progress\": \"내보내기 처리\",\n  \"Processing\": \"처리중\",\n  \"Import progress\": \"가져오기 처리\",\n  \"Import error\": \"가져오기 오류\",\n  \"Export error\": \"내보내기 오류\",\n  \"Column preview\": \"열 미리보기\",\n  \"Column\": \"열\",\n  \"Disable\": \"장애를 입히다\",\n  \"Enable\": \"할 수 있게 하다\",\n  \"Delete\": \"삭제\",\n  \"Export\": \"내보내다\",\n  \"Import\": \"수입\",\n  \"Select Action\": \"작업 선택\",\n  \"Please create a new account for logging in to the Administration Area.\": \"관리 영역에 로그인하려면 새 계정을 만드십시오.\",\n  \"First Name\": \"이름\",\n  \"Last Name\": \"성\",\n  \"Email Address\": \"이메일 주소\",\n  \"Pick a Username\": \"사용자 이름 선택\",\n  \"Enter New Password\": \"새 비밀번호를 입력하십시오\",\n  \"Confirm Password\": \"비밀번호 확인\",\n  \"Create Account\": \"계정 만들기\",\n  \"Getting Ready\": \"준비하기\",\n  \"Just a few more minutes\": \"몇 분만 더\",\n  \"Migrating Database\": \"데이터베이스 마이그레이션\",\n  \"Access the Backend Panel\": \"백엔드 패널에 액세스\",\n  \"View Backend During Maintenance\": \"유지 관리 중 백엔드 보기\",\n  \"Perform Software Updates\": \"소프트웨어 업데이트 수행\",\n  \"In Maintenance\": \"유지 보수 중\",\n  \"The site is currently in maintenance mode, please check back later.\": \"사이트가 현재 유지 관리 모드에 있으므로 나중에 다시 확인하십시오.\",\n  \"Dashboard\": \"계기반\",\n  \"Administrators\": \"사용자관리\",\n  \"Manage Admins\": \"관리자 관리\",\n  \"Create Admins\": \"관리자 만들기\",\n  \"Moderate Admins\": \"보통 관리자\",\n  \"Manage account suspension and ban admin accounts\": \"계정 정지 관리 및 관리자 계정 금지\",\n  \"Role Permissions\": \"역할 관리\",\n  \"Team Groups\": \"그룹 관리\",\n  \"Manage Other Admins\": \"다른 관리자 관리\",\n  \"Allow users to reset passwords and update emails.\": \"사용자가 비밀번호를 재설정하고 이메일을 업데이트하도록 허용합니다.\",\n  \"Delete Admins\": \"관리자 삭제\",\n  \"Preferences\": \"기본 설정\",\n  \"Settings\": \"설정\",\n  \"Background Color\": \"배경색\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"사용자가 새 역할을 만들고 가장 높은 역할보다 낮은 역할을 편집하거나 삭제할 수 있습니다.\",\n  \"Save Changes\": \"변경 사항을 저장하다\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"이 로그는 사용자들의 성공적인 로그인 접속 기록 목록을 표시합니다. 총 :days일보관함.\",\n  \"Access Log\": \"접속 로그\",\n  \"View a list of successful back-end user sign ins.\": \"백엔드 계정의 성공 로그인 기록보기\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"일시\",\n  \"Type\": \"유형\",\n  \"IP address\": \"IP주소\",\n  \"Username\": \"사용자 이름\",\n  \"Login\": \"로그인\",\n  \"First name\": \"이름\",\n  \"Last name\": \"성\",\n  \"Email\": \"이메일\",\n  \"A custom schema is used for this file format.\": \"이 파일 형식에는 사용자 정의 스키마가 사용됩니다.\",\n  \"Select\": \"선택하다\",\n  \"Replace\": \"바꾸다\",\n  \"and\": \"그리고\",\n  \"Go\": \"가다\",\n  \"Go to page\": \"페이지로 이동\",\n  \"Copy to Clipboard\": \"클립 보드에 복사\",\n  \"Reveal Contents\": \"콘텐츠 공개\",\n  \"Selected Site\": \"선택한 사이트\",\n  \"Use Emmet abbreviations\": \"Emmet 약어 사용\",\n  \"A record does not exist for the selected site. Create one?\": \"선택한 사이트에 대한 레코드가 없습니다. 하나 만드시겠습니까?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"입력한 세부 정보가 기록과 일치하지 않습니다. 다시 확인하고 다시 시도해 주세요.\",\n  \"Administration Area\": \"시스템관리자영역\",\n  \"Password Reset\": \"비밀번호 재설정\",\n  \"Please enter a new password.\": \"변경할 비밀번호를 입력해주세요\",\n  \"Password\": \"비밀번호\",\n  \"Password Restore\": \"비밀번호 복원\",\n  \"Please enter your login to restore the password.\": \"아이디를 입력해 주세요\",\n  \"A user could not be found with a login value of ':login'\": \"':login' 아이디는 등록되어있지 않습니다.\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"비밀번호를 복구하기 위한 절차를 설명한 메일을 발송합니다.\",\n  \"Invalid password reset data supplied. Please try again!\": \"잘못된 비밀번호 재설정 데이터가 발송되었습니다. 다시 해주세요.\",\n  \"Unable to reset your password!\": \"비밀번호를 재설정 할 수 없습니다.\",\n  \"Password has been reset. You may now sign in.\": \"비밀번호가 재설정 되었습니다.\",\n  \"Restore\": \"되돌리기\",\n  \"Reset\": \"리셋\",\n  \"Stay logged in\": \"로그인 유지\",\n  \"Forgot password?\": \"비밀번호를 잊어버리셨습니까?\",\n  \"Global Editor Settings\": \"전역 편집기 설정\",\n  \"Manage Widgets\": \"위젯 관리\",\n  \"Add Widget\": \"위젯 추가\",\n  \"Set the current layout as the default?\": \"현재 레이아웃을 기본값으로 할까요?\",\n  \"Make Default\": \"기본값으로\",\n  \"Reset layout back to default?\": \"초기값으로 레이아웃을 재설정할까요?\",\n  \"Reset Layout\": \"레이아웃 재설정\",\n  \"Widget\": \"위젯\",\n  \"please select\": \"선택해주세요\",\n  \"Width\": \"위젯 넓이\",\n  \"full width\": \"전체 넓이\",\n  \"Create Widgets\": \"위젯 만들기\",\n  \"not equal to\": \"같지 않다\",\n  \"Light Mode\": \"라이트 모드\",\n  \"Dark Mode\": \"다크 모드\",\n  \"OS Default\": \"OS 기본값\",\n  \"Create a Custom Palette\": \"사용자 지정 팔레트 만들기\",\n  \"Custom Palette\": \"커스텀 팔레트\",\n  \"Primary Color\": \"주요 색상\",\n  \"Secondary Color\": \"부수적인 색상\",\n  \"Selection Color\": \"선택 색상\",\n  \"Nav Text\": \"탐색 텍스트\",\n  \"Nav Background\": \"탐색 배경\",\n  \"Sidebar Text\": \"사이드바 텍스트\",\n  \"Sidebar Background\": \"사이드바 배경\",\n  \"Sidebar Active Text\": \"사이드바 활성 텍스트\",\n  \"Sidebar Active Background\": \"사이드바 활성 배경\",\n  \"Sidebar Hover Background\": \"사이드바 호버 배경\",\n  \"Settings Text\": \"설정 텍스트\",\n  \"Settings Background\": \"설정 배경\",\n  \"Settings Item Background\": \"설정 항목 배경\",\n  \"Settings Active Color\": \"설정 활성 색상\",\n  \"Settings Active Background\": \"설정 활성 배경\",\n  \"Settings Hover Background\": \"설정 호버 배경\",\n  \"This name is shown in the title area of the back-end.\": \"이 이름은 백엔드의 타이틀영역에 표시됩니다.\",\n  \"App Name\": \"앱 이름\",\n  \"This name is shown on the sign in screen for the back-end.\": \"이 이름은 백엔드의 로그인 페이지에 표시됩니다.\",\n  \"App Tagline\": \"앱 테그라인\",\n  \"Brand\": \"브랜드\",\n  \"Upload a custom logo to use in the back-end.\": \"백엔드에서 사용하는 로고를 업로드합니다.\",\n  \"Logo\": \"로고\",\n  \"Upload a custom favicon to use in the back-end\": \"백엔드에서 사용할 맞춤 파비콘 업로드\",\n  \"Favicon\": \"파비콘\",\n  \"Navigation Logo\": \"탐색 로고\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"탐색에서 대시보드 링크를 사용자 지정 로고로 바꿉니다.\",\n  \"Dashboard Icon\": \"대시보드 아이콘\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"대시보드 아이콘에 사용자 정의 이미지를 사용하십시오(60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"이 메시지는 백엔드의 로그인 화면에 표시됩니다.\",\n  \"Welcome Message\": \"환영 메시지\",\n  \"Login Page\": \"로그인 페이지\",\n  \"Background Type\": \"배경 유형\",\n  \"Flat Color\": \"플랫 컬러\",\n  \"Wallpaper\": \"벽지\",\n  \"Wallpaper Size\": \"배경 화면 크기\",\n  \"Auto\": \"자동\",\n  \"Cover\": \"씌우다\",\n  \"Background Wallpaper Image\": \"배경화면 이미지\",\n  \"Image\": \"이미지\",\n  \"Random Autumn Images\": \"임의의 가을 이미지\",\n  \"Custom Image\": \"맞춤 이미지\",\n  \"Login Page Image\": \"로그인 페이지 이미지\",\n  \"Colors\": \"색상\",\n  \"Color Mode\": \"컬러 모드\",\n  \"Color Preset\": \"색상 사전 설정\",\n  \"Menu Style\": \"메뉴 스타일\",\n  \"Navigation\": \"네비게이션\",\n  \"Custom Stylesheet\": \"별도의 스타일시트\",\n  \"Styles\": \"스타일\",\n  \"Inline\": \"인라인\",\n  \"Text\": \"텍스트\",\n  \"Tiles\": \"타일\",\n  \"Collapsed\": \"접힘\",\n  \"Icons\": \"아이콘\",\n  \"Left Side\": \"왼쪽\",\n  \"Add New Item\": \"새 항목 추가\",\n  \"Link Color\": \"링크 색상\",\n  \"Current Password\": \"현재 비밀번호\",\n  \"New Password\": \"새 비밀번호\",\n  \"Current password does not match. Please try again!\": \"현재 비밀번호가 일치하지 않습니다. 다시 시도하십시오!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"비밀번호가 만료되었습니다. 보안상의 이유로 새 비밀번호를 만드십시오.\",\n  \"Region\": \"지역\",\n  \"Locale\": \"로케일\",\n  \"Select your desired locale for language use.\": \"사용언어에 맞는 로케일을 선택해주세요.\",\n  \"Timezone\": \"타임존\",\n  \"Adjust displayed dates to this timezone.\": \"타임존에 맞는 날짜 조정.\",\n  \"Code Editor\": \"코드 에디터\",\n  \"Color Scheme\": \"색상 스키마\",\n  \"Word Wrap\": \"줄바꿈\",\n  \"Off\": \"Off\",\n  \"40 Characters\": \"40 문자\",\n  \"80 Characters\": \"80 문자\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"폰트크기\",\n  \"Tab Size\": \"텝사이즈\",\n  \"Code Folding\": \"코드 접기\",\n  \"Mark begin\": \"마크사용\",\n  \"Mark begin and end\": \"마크사용과 종료\",\n  \"Autocompletion\": \"자동완성\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"기본 자동완성 (Ctrl + Space)\",\n  \"Live Autocompletion\": \"라이브 자동완성\",\n  \"Show gutter\": \"라인넘버보기\",\n  \"Highlight active line\": \"현재라인강조\",\n  \"Automatically close tags\": \"자동 테그닫기\",\n  \"Indent using tabs\": \"텝으로 들여쓰기사용\",\n  \"Show indent guides\": \"들여쓰기 가이드 표시\",\n  \"Show invisible characters\": \"보이지않는 문자 보기\",\n  \"Show print margin\": \"출력마진 보기\",\n  \"Custom styles to include in the HTML editor.\": \"에디터에 별도의 스타일시트를 포함시킨다.\",\n  \"Markup Styles\": \"마크업 스타일\",\n  \"Paragraph Formats\": \"단락 형식\",\n  \"Markup Classes\": \"마크업 클래스\",\n  \"Label\": \"라벨\",\n  \"Paragraph\": \"단락\",\n  \"Class Name\": \"클래스 이름\",\n  \"Link\": \"링크\",\n  \"Table\": \"테이블\",\n  \"Table Cell\": \"셀\",\n  \"Allowed Tags\": \"허용된 테그들\",\n  \"The list of allowed tags.\": \"허용된 테그목록\",\n  \"Markup Tags\": \"마크업 테그들\",\n  \"Allowed Empty Tags\": \"빈테그 허용\",\n  \"The list of tags that are not removed when they have no content inside.\": \"내용이 없어도 제거하지 않을 테그목록\",\n  \"Do Not Wrap Tags\": \"테그를 줄바꿈하지 않음\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"블록 테그안에서 줄바꿈 하지않을 테그목록\",\n  \"Remove Tags\": \"테그제거\",\n  \"The list of tags that are removed together with their content.\": \"내용과 함께 제거할 테그목록\",\n  \"Line Breaker Tags\": \"라인 브레이커 태그\",\n  \"The list of tags that are used to place a line breaker element between.\": \"사이에 줄 바꿈 요소를 배치하는 데 사용되는 태그 목록입니다.\",\n  \"Toolbar Buttons\": \"도구 모음 버튼\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Rich Editor에 기본적으로 표시되는 도구 모음 버튼입니다.\",\n  \"Insert a preset toolbar button configuration\": \"사전 설정 도구 모음 버튼 구성 삽입\",\n  \"Allowed Attributes\": \"허용된 속성\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"허용되는 HTML 속성 목록과 일반 허용치.\",\n  \"Enable code snippets (Tab)\": \"코드 스니핏 사용 (Tab)\",\n  \"Title\": \"제목\",\n  \"Description\": \"설명\",\n  \"Attachment\": \"첨부\",\n  \"Attachment URL\": \"첨부 URL\",\n  \"Add a title and description for this attachment.\": \"이 첨부에 대한 제목과  설명을 추가.\",\n  \"Are you sure?\": \"링크를 삭제해도 될까요？\",\n  \"Upload Error\": \"업로드 오류\",\n  \"Remove File\": \"파일 삭제\",\n  \"Create :name\": \"생성 :name\",\n  \"Update :name\": \"변경 :name\",\n  \"Add :name\": \"추가 :name\",\n  \"Link :name\": \"링크 :name\",\n  \"Unlink\": \"링크삭제\",\n  \"Preview :name\": \"미리보기 :name\",\n  \"Link a New :name\": \"신규링크 :name\",\n  \"Add a New :name\": \"신규추가 :name\",\n  \"Related :name Data\": \"관련데이터 :name\",\n  \":name Created\": \":name 생성됨\",\n  \":name Updated\": \":name 변경됨\",\n  \":name Deleted\": \":name 삭제됨\",\n  \"Form record with an ID of :id could not be found.\": \":id 아이디의 Form 레코드를 찾을 수 없습니다.\",\n  \"Preview the Website\": \"웹사이트 미리보기\",\n  \"Manage back-end administrator users, groups and permissions.\": \"백엔드 관리, 사용자,그룹 및 권한 관리.\",\n  \"Branding & Appearance\": \"백엔드 설정변경\",\n  \"Customize the administration area such as name, colors and logo.\": \"앱 이름이나 색, 로고 등의 시스템 설정을 변경합니다.\",\n  \"Editor Settings\": \"에디터 설정\",\n  \"Change the global editor preferences.\": \"폰트 사이즈나 컬러 스키마등의 전역 에디터의 설정.\",\n  \"My Account\": \"계정\",\n  \"Update your account details such as name, email address and password.\": \"이름, 이메일주소, 비밀번호 등의 계정 세부정보를 변경해주세요.\",\n  \"Backend Preferences\": \"백엔드 환경설정\",\n  \"Manage your account preferences such as desired language.\": \"당신 계정의 사용언어 등의 환경설정\",\n  \"security login\": \"보안 로그인\",\n  \"List Setup\": \"목록 설정\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"목록에 표시하길 원하는 열에 체크하세요. 위아래로 드래그해서 위치를 변경할 수 있습니다.\",\n  \"Records Per Page\": \"페이지당 목록갯수\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"페이지당 표시할 목록 갯수를 선택하세요. 많이 설정할수록 페이지 표시속도가 느려질 수 있습니다.\",\n  \"Add Selected\": \"추가가 선택되어 있습니다\",\n  \"Please specify the modelClass property for :type\": \":type 타입을 위한 모델 성질을 선택해주세요.\",\n  \"Please specify some columns to export.\": \"내보낼 열을 선택해주세요.\",\n  \"Missing column identifier\": \"잃은 열의 식별자\",\n  \"Unknown column\": \"모르는 열\",\n  \"Please specify some columns to import.\": \"가져올 열을 정해주세요.\",\n  \"Please match some columns first.\": \"먼저 일치시킬 열을 선택해주세요.\",\n  \"Please specify a match for the required field :label.\": \"필요한 :label 필드에 일치시킬 짝을 선택해주세요.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"원본 파일의 인코딩을 인식할 수 없습니다. 가져오기를 위해선 정당한 인코딩의 자체파일포멧을 선택해주세요.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"컨트롤러 행동 ListController를 useList 옵션을 켜고 내보내기를 시행해야만합니다.\",\n  \"File export process completed!\": \"파일 내보내기 과정이 완료되었습니다!\",\n  \"The browser will now redirect to the file download.\": \"브라우저가 파일다운로드 화면으로 이동합니다.\",\n  \"Ignore this column\": \"이 열을 무시\",\n  \"Drop column here...\": \"이곳에 열을 떨굼...\",\n  \"Please upload a valid CSV file.\": \"유효한 CSV파일을 업로드하세요.\",\n  \"Created\": \"생성됨\",\n  \"Updated\": \"변경됨\",\n  \"Skipped\": \"건너뜀\",\n  \"Warnings\": \"경고\",\n  \"Errors\": \"오류\",\n  \"Skipped Rows\": \"건너뛴 행\",\n  \"Show Ignored Columns\": \"무시한 열들 표시\",\n  \"Auto Match Columns\": \"자동 일치 열\",\n  \"File not found\": \"파일을 찾을 수 없습니다\",\n  \"There was no data supplied to export\": \"내보내기 위한 데이터가 없습니다\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"\\\":name\\\" PHP 익스텐션이 설치되어있지 않습니다. 설치후 활성화해주세요.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \":name 플러그인에 의존성이 해결되지 않았습니다. 이 플러그인을 설치해주세요.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"\\\":name\\\" 디렉토리 또는 서브디렉토리는 PHP에서 쓸 수 없습니다. 이 디렉토리의 퍼미션을 설정해주세요.\"\n}"
  },
  {
    "path": "modules/backend/lang/lt/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Netinkamas laukelio tipas :type.',\n    'options_method_invalid_model' => 'Artributas \\':field\\' nenuskaito tinkamo modelio. Bandykite nurodyti parinkties metodą išskirtinai modelio klasei :model',\n    'options_method_not_exists' => 'Modelio klasė :model turi nurodyti metodą :method() gražinantį parinktis \\':field\\' formos laukeliui.',\n  ],\n  'widget' => [\n    'not_registered' => 'Valdiklio klasės pavadinimas \\':name\\' neiregistruotas',\n    'not_bound' => 'Valdiklio klasės pavadinimas \\':name\\' nepriskirtas kontroleriui',\n  ],\n  'page' => [\n    'untitled' => 'Neužvardintas',\n    'access_denied' => [\n      'label' => 'Prieiga atmesta',\n      'help' => 'Neturite reikiamų prieigos teisių šio puslapio peržiūrai.',\n      'cms_link' => 'Grįžti į administraciją',\n    ],\n    'no_database' => [\n      'label' => 'Truksta duombazės',\n      'help' => 'Duomenų bazė reikalinga administracijos prieigai. Patikrinkite duomenų bazės konfigūraciją bei migracijas ir bandykite dar kartą.',\n      'cms_link' => 'Grįžti į svetainę',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Priedėlis \\':name\\' nerastas.',\n  ],\n  'account' => [\n    'sign_out' => 'Atsijungti',\n    'login_placeholder' => 'vartotojas',\n    'password_placeholder' => 'slaptažodis',\n    'enter_email' => 'Įveskite savo el.paštą',\n    'email_placeholder' => 'el.paštas',\n    'apply' => 'Taikyti',\n    'cancel' => 'Atšaukti',\n    'delete' => 'trinti',\n    'ok' => 'GERAI',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Valdymas',\n    'widget_inspector_title' => 'Skydelio konfigūracija',\n    'widget_inspector_description' => 'Konfigūruoti ataskaitų skydelį',\n    'widget_columns_label' => 'Plotis :columns',\n    'widget_columns_description' => 'Skydelio plotis, skaitmuo nuo 1 iki 10.',\n    'widget_columns_error' => 'Įveskite skydelio plotį skaitmenimisnuo 1 iki 10.',\n    'columns' => '{1} stulpelis|[2,Inf] stulpeliai',\n    'widget_new_row_label' => 'Priverstina nauja eilė',\n    'widget_new_row_description' => 'Kelti skydelį į naują eilę.',\n    'widget_title_label' => 'Skydelio pavadinimas',\n    'widget_title_error' => 'Skydelio pavadinimas yra būtinas.',\n    'reset_layout_success' => 'Išdėstymą atstatėme',\n    'make_default_success' => 'Dabartinis išdėstymas dabar yra pagrindinis',\n    'collapse_all' => 'Suskleisti visus',\n    'expand_all' => 'Išskleisti visus',\n    'status' => [\n      'widget_title_default' => 'Sistemos būsena',\n      'update_available' => '{0} galimų naujinimų!|{1} galimas naujinimas!|[2,Inf] galimi naujinimai!',\n      'updates_pending' => 'Laukiantys programos naujinimai',\n      'updates_nil' => 'Sistema yra pilnai atnaujinta',\n      'updates_link' => 'Naujinti',\n      'warnings_pending' => 'Tam tikros problemos reikalauja peržiūros',\n      'warnings_nil' => 'Įspėjimų nėra',\n      'warnings_link' => 'Žiūrėti',\n      'core_build' => 'Sistemos sudėtis',\n      'event_log' => 'Įvykių registras',\n      'request_log' => 'Užklausų registras',\n      'app_birthday' => 'Veikia nuo',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Sveiki!',\n      'welcome_back_name' => 'Sveiki sugrįžę į :app, :name.',\n      'welcome_to_name' => 'Prisijungėte į :app, :name.',\n      'first_sign_in' => 'Tai yra pirmas kartas kai prisijungiate.',\n      'last_sign_in' => 'Paskutinį kartą prisijungėte',\n      'view_access_logs' => 'Žiurėti prieigos registrą',\n      'nice_message' => 'Geros Jums dienos!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administratorius',\n    'list_title' => 'Tvarkyti Administratorius',\n    'new' => 'Naujas Administratorius',\n    'first_name' => 'Vardas',\n    'last_name' => 'Pavardė',\n    'full_name' => 'Pilnas vardas',\n    'email' => 'El.paštas',\n    'groups' => 'Grupės',\n    'groups_comment' => 'Priskirkite vartotoją grupėms. Grupės nurodo prieigos leidimus, kurie gali būti perrašyti redaguojant vartotoją, Prieigų lentelėje.',\n    'avatar' => 'Avataras/Foto',\n    'password' => 'Slaptažodis',\n    'password_confirmation' => 'Patvirtinti Slaptažodį',\n    'permissions' => 'Prieigos leidimai',\n    'account' => 'Vartotojas',\n    'superuser' => 'Super Vartotojas',\n    'superuser_comment' => 'Suteikia šiam vartotojui neribojamą prieigą į visus nustatymus sistemojeG. Super vartotojai gali pridėti bei tvarkyti vartotojus. ',\n    'send_invite' => 'Siųsti pakvietimą el.paštu',\n    'send_invite_comment' => 'Siunčia informuojantį laišką su prisijungimo informacija.',\n    'delete_confirm' => 'Trinti šį administratorių?',\n    'return' => 'Grįžti į administratorių sąrašą',\n    'allow' => 'Leisti',\n    'inherit' => 'Paveldima',\n    'deny' => 'Neleisti',\n    'activated' => 'Aktyvuotas',\n    'last_login' => 'Paskutinis Prisijungimas',\n    'created_at' => 'Sukurtas',\n    'updated_at' => 'Atnaujintas',\n    'group' => [\n      'name' => 'Grupė',\n      'name_comment' => 'Pavadinimas rodomas Administratoriaus pridėjimo formos grupių sąraše.',\n      'name_field' => 'Pavadinimas',\n      'description_field' => 'Aprašymas',\n      'is_new_user_default_field_label' => 'Pagrindinė grupė',\n      'is_new_user_default_field_comment' => 'Naujus administratorius priskirti šiai grupei automatiškai',\n      'code_field' => 'Kodas',\n      'code_comment' => 'Įveskite unikalų grupės kodą jei norėsite pasiekti šią grupę per API.',\n      'list_title' => 'Tvarkyti Grupes',\n      'new' => 'Nauja Grupė',\n      'delete_confirm' => 'Ištrinti šią administratorių grupę?',\n      'return' => 'Grįžti į grupių sąrašą',\n      'users_count' => 'Vartotojai(ų)',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nėra prisijungusio vartotojo, kurio nustatymus būtų galima užkrauti arba išsaugoti.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Sąrašas',\n    'search_prompt' => 'Ieškoti...',\n    'no_records' => 'Kolkas nėra jokių įrašų.',\n    'missing_model' => 'Sąrašo elgsenos nustatymai naudojami :class klasėje, neturi nurodyto modelio.',\n    'missing_column' => 'Nėra stulpelio aprašų :columns stulpeliui.',\n    'missing_columns' => 'Sąrašas naudojamas klasėje :class neturi nurodytų stulpelių.',\n    'missing_definition' => 'Sąrašo elgsena neturi stulpelio \\':field\\'.',\n    'missing_parent_definition' => 'Sąrašo elgsena neturi nurodymo laukeliui \\':definition\\'.',\n    'behavior_not_ready' => 'Sąrašo elgsena neinicijuota. Pasitikrinkite ar naudojate funckiją makeLists() savo kontroleryje.',\n    'invalid_column_datetime' => 'Stulpelio reikšmė \\':column\\' nėra DateTime objektas, galbūt nenurodėte $dates kvietinio modelyje?',\n    'pagination' => 'Rodomi įrašai: :from-:to iš :total',\n    'first_page' => 'Pirmas puslapis',\n    'last_page' => 'Paskutinis puslapis',\n    'prev_page' => 'Ankstesnis puslapis',\n    'next_page' => 'Sekantis puslapis',\n    'refresh' => 'Perkrauti',\n    'updating' => 'Atnaujinama...',\n    'loading' => 'Kraunama...',\n    'check' => 'Žymėti',\n    'delete_selected' => 'Trinti pasirinktus',\n    'delete_selected_empty' => 'Nepažymėjote nieko trynimui.',\n    'delete_selected_confirm' => 'Ištrinti pasirinktus įrašus?',\n    'delete_selected_success' => 'Pasirinktus įrašus ištrynėme.',\n    'column_switch_true' => 'Taip',\n    'column_switch_false' => 'Ne',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Spauskite %s arba įtempkite failus čia',\n  ],\n  'form' => [\n    'create_title' => 'Naujas :name',\n    'update_title' => 'Redaguoti :name',\n    'preview_title' => 'Peržiūrėti :name',\n    'reset_success' => 'Atstatymas baigtas',\n    'missing_id' => 'Formos įrašo ID nenurodytas.',\n    'missing_model' => 'Formos elgsena naudojama klasėje :class neturi nurodyto modelio.',\n    'missing_definition' => 'Formos elgsena neturi laukelio reikšmei \\':field\\'.',\n    'action_confirm' => 'Ar tikrai?',\n    'create' => 'Kurti',\n    'create_and_close' => 'Kurti ir uždaryti',\n    'creating' => 'Kuriama...',\n    'creating_name' => 'Kuriama :name...',\n    'save' => 'Saugoti',\n    'save_and_close' => 'Saugoti ir uždaryti',\n    'saving' => 'Saugome...',\n    'saving_name' => 'Saugome :name...',\n    'delete' => 'Trinti',\n    'deleting' => 'Triname...',\n    'confirm_delete' => 'Trinti įrašą?',\n    'confirm_delete_multiple' => 'Trinti pasirinktus įrašus?',\n    'deleting_name' => 'Triname :name...',\n    'reset_default' => 'Atstatyti į pradžią',\n    'resetting' => 'Atstatome',\n    'resetting_name' => 'Atstatome :name',\n    'undefined_tab' => 'Įvairus',\n    'field_off' => 'Išjungta',\n    'field_on' => 'Įjungta',\n    'add' => 'Pridėti',\n    'apply' => 'Taikyti',\n    'cancel' => 'Atšaukti',\n    'close' => 'Uždaryti',\n    'confirm' => 'Patvirtinti',\n    'reload' => 'Perkrauti',\n    'complete' => 'Užbaigti',\n    'ok' => 'GERAI',\n    'or' => 'arba',\n    'confirm_tab_close' => 'Uždaryti kortelę? Neišsaugoti pakeitimai bus prarasti.',\n    'behavior_not_ready' => 'Formos elgsena nebuvo inicijuota, pasitikrinkite ar užklausėte funkciją initForm() savo kontroleryje.',\n    'preview_no_files_message' => 'Nėra įkeltų failų.',\n    'preview_no_record_message' => 'Nėra pasirinktų įrašų.',\n    'select' => 'Pasirinkti',\n    'select_all' => 'pasirinkti viską',\n    'select_none' => 'neišsirinkite nė vieno',\n    'insert_row' => 'Pridėti Eilutę',\n    'insert_row_below' => 'Pridėti Eilutę Žemiau',\n    'delete_row' => 'Trinti Eilutę',\n    'concurrency_file_changed_title' => 'Failas buvo pakeistas',\n    'concurrency_file_changed_description' => 'Jūsų redaguojamą failą diske pakeitė kitas vartotojas. Galite perkrauti failą prarasdami pakeitimus arba perrašyti failą diske.',\n    'return_to_list' => 'Grįžti į sąrašą',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Rasti Įrašą',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Subendrinimo elgsena neturi konfigūracijos \\':config\\'.',\n    'missing_definition' => 'Subendrinimo elgsena neturi nustatymo \\':field\\' laukeliui.',\n    'missing_model' => 'Subendrinimo elgsena naudojama klasėje :class neturi nustatyto modelio.',\n    'invalid_action_single' => 'Šis veiksmas negalimas pavieniam subendrinimui.',\n    'invalid_action_multi' => 'Šis veiksmas negalimas daugialypiui subendrinimui.',\n    'help' => 'Spauskite elementą pridėjimui',\n    'add' => 'Pridėti',\n    'link_selected' => 'Pasirinkta nuoroda',\n    'cancel' => 'Atšaukti',\n    'close' => 'Uždaryti',\n    'create' => 'Kurti',\n    'update' => 'Atnaujinti',\n    'preview' => 'Peržiūrėti',\n    'remove_name' => 'Pašalinti :name',\n    'delete_name' => 'Ištrinti :name',\n    'link' => 'Nuoroda',\n    'unlink_name' => 'Atjungti :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Rūšiuoti įrašus',\n    'no_records' => 'Nėra įrašų galimų rūšiavimui.',\n  ],\n  'model' => [\n    'name' => 'Modelis',\n    'not_found' => 'Modelis \\':class\\' su ID :id nerastas',\n    'missing_id' => 'Nenurodytas ID modelio įrašui ieškoti.',\n    'missing_relation' => 'Modelis \\':class\\' neturi nustatymo \\':relation\\'.',\n    'missing_method' => 'Modelis \\':class\\' neturi metodo \\':method\\'.',\n    'invalid_class' => 'Modelis :model naudojamas klasėje :class yra netinkamas. Jis turi kreiptis į \\\\Model klasę.',\n    'mass_assignment_failed' => 'Masinis priskyrimas nepavyko Modelio atributui \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Sistemos konfigūracijos patarimai',\n    'tips_description' => 'Yra problemų į kurias turėtumėte atkreipti dėmesį norėdami sukonfigūruoti sistemą tinkamai.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Mano nustatymai',\n    'menu_description' => 'Nustatymai susieto su Jūsų administracine anketa',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Akcento spalva',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'viską',\n    'options_method_not_exists' => 'Modelio klasė :model turi nurodyti metodą :method() gražinantš parinktis \\':filter\\' filtrui.',\n    'date_all' => 'visas periodas',\n  ],\n  'import_export' => [\n    'export_error' => 'Eksportavimo klaida',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Įkelti ir tvarkyti media elementus - paveiksliukus, video, garsus, dokumentus',\n  ],\n  'mediafinder' => [\n    'label' => 'Failų Tvarkyklė',\n    'default_prompt' => 'Spauskite %s mygtuką media failų paieškai',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Įkelti',\n    'move' => 'Perkelti',\n    'delete' => 'Trinti',\n    'add_folder' => 'Pridėti katalogą',\n    'search' => 'Ieškoti',\n    'display' => 'Rodyti',\n    'filter_everything' => 'Viskas',\n    'filter_images' => 'Paveiksliukai',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Dokumentai',\n    'library' => 'Biblioteka',\n    'size' => 'Dydis',\n    'title' => 'Pavadinimas',\n    'last_modified' => 'Redaguotas',\n    'public_url' => 'Viešas URL',\n    'click_here' => 'Spauskite čia',\n    'thumbnail_error' => 'Nepavyko atvaizduoti miniatiūros.',\n    'return_to_parent' => 'Grįžti į pirminį katalogą',\n    'return_to_parent_label' => 'Eiti aukštyn ..',\n    'nothing_selected' => 'Nieko nepasirinkote.',\n    'multiple_selected' => 'Pasirinkote keletą elementų.',\n    'uploading_file_num' => 'Įkeliama :number failai(as)...',\n    'uploading_complete' => 'Įkėlimas įvykdytas',\n    'uploading_error' => 'Įkėlimas nepavyko',\n    'type_blocked' => 'Failo tipas yra blokuojamas saugumo sumetimais.',\n    'order_by' => 'Rūšiuoti pagal',\n    'folder' => 'Katalogas',\n    'no_files_found' => 'Pagal Jūsų paiešką failų neradome.',\n    'delete_empty' => 'Pasirinkite emelentus trynimui.',\n    'delete_confirm' => 'Trinti pasirinktus elementus?',\n    'error_renaming_file' => 'Klaida pervadinant elementą.',\n    'new_folder_title' => 'Naujas katalogas',\n    'folder_name' => 'Katalogo pavadinimas',\n    'error_creating_folder' => 'Klaida sukuriant katalogą',\n    'folder_or_file_exist' => 'Katalogas ar failas šiuo pavadinimu jau yra.',\n    'move_empty' => 'Pasirinkite elementus perkėlimui.',\n    'move_popup_title' => 'Perkelti failus ar katalogus',\n    'move_destination' => 'Paskirties katalogas',\n    'please_select_move_dest' => 'Pasirinkite paskirties katalogą.',\n    'move_dest_src_match' => 'Prašome pasirinkti kitą paskirties katalogą.',\n    'empty_library' => 'Media biblioteka tuščiay. Pradžiai įkelkite failus ar sukurkite katalogus.',\n    'insert' => 'Įterpti',\n    'crop_and_insert' => 'Apkirpti ir Įterpti',\n    'select_single_image' => 'Pasirinkite vieną paveiksliuką.',\n    'selection_not_image' => 'pasirinktas elementas nėra paveiksliukas.',\n    'restore' => 'Atstatyti visus pakeitimus',\n    'resize' => 'Keisti išmatavimus...',\n    'selection_mode_normal' => 'Normalus',\n    'selection_mode_fixed_ratio' => 'Fiksuotas sdantykis',\n    'selection_mode_fixed_size' => 'Fiksuotas dydis',\n    'height' => 'Aukštis',\n    'width' => 'Plotis',\n    'selection_mode' => 'Pasirinkimo būdas',\n    'resize_image' => 'Keisti paveiksliuko išmatavimus',\n    'image_size' => 'Paveiksliuko dydis:',\n    'selected_size' => 'Pasirinkta:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/lt.json",
    "content": "{\n  \"Cancel\": \"Atšaukti\",\n  \"You are viewing as\": \"Jūs žiūrite kaip\",\n  \"Preview Role\": \"Peržiūrėti vaidmenį\",\n  \"This lets you test the actions this role can perform.\": \"Tai leidžia išbandyti veiksmus, kuriuos gali atlikti šis vaidmuo.\",\n  \"View As Role\": \"Žiūrėti kaip vaidmenį\",\n  \"Return to Role Settings\": \"Grįžkite į vaidmenų nustatymus\",\n  \"Password must have a minimum of length of :min characters\": \"Slaptažodį turi sudaryti mažiausiai :min simbolių\",\n  \"Password must contain at least one uppercase character.\": \"Slaptažodyje turi būti bent viena didžioji raidė.\",\n  \"Password must contain at least one lowercase character.\": \"Slaptažodyje turi būti bent viena mažoji raidė.\",\n  \"Password must contain at least one number.\": \"Slaptažodyje turi būti bent vienas skaičius.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Slaptažodyje turi būti bent vienas ne raidinis ir skaitinis simbolis.\",\n  \"Welcome to your Administration Area, :name\": \"Sveiki atvykę į jūsų administravimo sritį, :name\",\n  \"Duplicate\": \"Pasikartoti\",\n  \"Expand\": \"Išskleisti\",\n  \"Collapse\": \"Sutraukti\",\n  \"Move Up\": \"Judėti aukštyn\",\n  \"Move Down\": \"Judėk žemyn\",\n  \"Remove\": \"Pašalinti\",\n  \"Manage Item\": \"Tvarkyti elementą\",\n  \"Clear Filters\": \"Išvalyti filtrus\",\n  \"Filter Setup\": \"Filtro sąranka\",\n  \"Apply\": \"Taikyti\",\n  \"Clear\": \"Aišku\",\n  \"is equal to\": \"yra lygus\",\n  \"is between\": \"yra tarp\",\n  \"contains\": \"yra\",\n  \"is before\": \"yra anksčiau\",\n  \"is after\": \"yra po\",\n  \"is greater than\": \"yra didesnis nei\",\n  \"is less than\": \"mažiau nei\",\n  \"1. Export output format\": \"1. Eksportavimo formatas\",\n  \"File Format\": \"Failo formatas\",\n  \"Delimiter Character\": \"Skirtuko simbolis\",\n  \"Enclosure Character\": \"Aptvėrimo simbolis\",\n  \"Escape Character\": \"Išėjimo simbolis\",\n  \"2. Select columns to export\": \"2. Pasirinkite stulpelius eksportavimui\",\n  \"Columns\": \"Stulpeliai\",\n  \"3. Set export options\": \"3. Nurodykite eksportavimo nustatymus\",\n  \"CSV Custom\": \"Individualus formatas\",\n  \"1. Upload an Import File\": \"1. Įkelkite CSV failą\",\n  \"Import File\": \"Importuoti failą\",\n  \"File Encoding\": \"Failo koduotė\",\n  \"First row contains column titles\": \"Pirma eilutė nurodo stulpelių pavadinimus\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Palikite pažymėtą jeigu norite naudoti pirmą eilutę kaip stulpelių pavadinimus.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Suderinkite failo stulpelius su duomenų bazės laukeliais\",\n  \"File columns\": \"Failo stulpeliai\",\n  \"Database fields\": \"Duombazės laukeliai\",\n  \"3. Set Import Options\": \"3. Nurodykite importavimo nustatymus\",\n  \"Export progress\": \"Eksportavimo progresas\",\n  \"Processing\": \"Vykdoma\",\n  \"Import progress\": \"Importavimo progresas\",\n  \"Import error\": \"Importavimo klaida\",\n  \"Export error\": \"Eksportavimo klaida\",\n  \"Column preview\": \"Stulpelio peržiūra\",\n  \"Column\": \"Stulpelis\",\n  \"Disable\": \"Išjungti\",\n  \"Enable\": \"Įgalinti\",\n  \"Delete\": \"Ištrinti\",\n  \"Export\": \"Eksportuoti\",\n  \"Import\": \"Importuoti\",\n  \"Select Action\": \"Pasirinkite Veiksmas\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Norėdami prisijungti prie administravimo srities, susikurkite naują paskyrą.\",\n  \"First Name\": \"Pirmas vardas\",\n  \"Last Name\": \"Pavardė\",\n  \"Email Address\": \"Elektroninio pašto adresas\",\n  \"Pick a Username\": \"Pasirinkite slapyvardį\",\n  \"Enter New Password\": \"Įveskite naują slaptažodį\",\n  \"Confirm Password\": \"Patvirtinti slaptažodį\",\n  \"Create Account\": \"Sukurti paskyrą\",\n  \"Getting Ready\": \"Pasiruošimas\",\n  \"Just a few more minutes\": \"Dar kelios minutės\",\n  \"Migrating Database\": \"Perkeliama duomenų bazė\",\n  \"Access the Backend Panel\": \"Pasiekite pagrindinį skydelį\",\n  \"View Backend During Maintenance\": \"Žiūrėti atgalinę dalį priežiūros metu\",\n  \"Perform Software Updates\": \"Atlikite programinės įrangos atnaujinimus\",\n  \"In Maintenance\": \"Priežiūroje\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Šiuo metu svetainė veikia priežiūros režimu, patikrinkite vėliau.\",\n  \"Dashboard\": \"Prietaisų skydelis\",\n  \"Administrators\": \"Administratoriai\",\n  \"Manage Admins\": \"Tvarkyti administratorius\",\n  \"Create Admins\": \"Sukurti administratorius\",\n  \"Moderate Admins\": \"Nuosaikūs administratoriai\",\n  \"Manage account suspension and ban admin accounts\": \"Tvarkyti paskyros sustabdymą ir uždrausti administratoriaus paskyras\",\n  \"Role Permissions\": \"Valdykite vaidmenis\",\n  \"Team Groups\": \"Tvarkyti Grupes\",\n  \"Manage Other Admins\": \"Tvarkyti kitus administratorius\",\n  \"Allow users to reset passwords and update emails.\": \"Leidžia iš naujo nustatyti slaptažodžius ir atnaujinti el\",\n  \"Delete Admins\": \"Ištrinti administratorius\",\n  \"Preferences\": \"Parinktys\",\n  \"Settings\": \"Nustatymai\",\n  \"Background Color\": \"Fono spalva\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Leiskite vartotojams kurti naujus vaidmenis ir redaguoti arba ištrinti vaidmenis, žemesnius nei jų aukščiausias vaidmuo.\",\n  \"Save Changes\": \"Išsaugoti pakeitimus\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Šis registras rodo sėkmingų administratoriaus prisijungimų sąrašą. Įrašai yra saugomi viso :days dienų.\",\n  \"Access Log\": \"Prieigos registras\",\n  \"View a list of successful back-end user sign ins.\": \"Žiūrėti sėkmingų administratoriaus prisijungimų sąrašą.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Data ir Laikas\",\n  \"Type\": \"Tipas\",\n  \"IP address\": \"IP adresas\",\n  \"Username\": \"Vartotojo vardas\",\n  \"Login\": \"Prisijungti\",\n  \"First name\": \"Vardas\",\n  \"Last name\": \"Pavardė\",\n  \"Email\": \"El.paštas\",\n  \"A custom schema is used for this file format.\": \"Šiam failo formatui naudojama tinkinta schema.\",\n  \"Select\": \"Pasirinkite\",\n  \"Replace\": \"Pakeiskite\",\n  \"and\": \"ir\",\n  \"Go\": \"Eik\",\n  \"Go to page\": \"Eiti į puslapį\",\n  \"Copy to Clipboard\": \"Nukopijuoti į iškarpinę\",\n  \"Reveal Contents\": \"Atskleiskite turinį\",\n  \"Selected Site\": \"Pasirinkta svetainė\",\n  \"Use Emmet abbreviations\": \"Naudokite Emmeto santrumpas\",\n  \"A record does not exist for the selected site. Create one?\": \"Pasirinktos svetainės įrašo nėra. Sukurk viena?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Jūsų įvesta informacija neatitiko mūsų įrašų. Dar kartą patikrinkite ir bandykite dar kartą.\",\n  \"Administration Area\": \"Administracijos zona\",\n  \"Password Reset\": \"Slaptažodžio Keitimas\",\n  \"Please enter a new password.\": \"Įveskite naują slaptažodį\",\n  \"Password\": \"Slaptažodis\",\n  \"Password Restore\": \"Slaptažodžio atkūrimas\",\n  \"Please enter your login to restore the password.\": \"Įveskite savo vartotojo vardą\",\n  \"A user could not be found with a login value of ':login'\": \"Vartotojas prisijungimo vardu ':login' nerastas\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Išsiuntėme Jums laišką el.paštu su tolimesnėmis instrukcijomis.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Peteikėte netinkamą slaptažodžio atstatymo informaciją. Bandykite dar kartą!\",\n  \"Unable to reset your password!\": \"Slaptažodžio pakeisti nepavyko!\",\n  \"Password has been reset. You may now sign in.\": \"Slaptažodį pakeitėme. Dabar galite prisijungti.\",\n  \"Restore\": \"Atstatyti\",\n  \"Reset\": \"Perstatyti\",\n  \"Stay logged in\": \"Likti prisijungus\",\n  \"Forgot password?\": \"Pamiršote slaptažodį?\",\n  \"Global Editor Settings\": \"Visuotiniai redaktoriaus nustatymai\",\n  \"Manage Widgets\": \"Tvarkyti skydelius\",\n  \"Add Widget\": \"Pridėti skydelį\",\n  \"Set the current layout as the default?\": \"Nustatyti dabartinį išdėstymą kaip pagrindinį?\",\n  \"Make Default\": \"Įrašyti kaip pagrindinį\",\n  \"Reset layout back to default?\": \"Atstatyti išdėstymą į pirminę?\",\n  \"Reset Layout\": \"Atstatyti išdėstymą\",\n  \"Widget\": \"Skydelis\",\n  \"please select\": \"prašome pasirinkti\",\n  \"Width\": \"Plotis\",\n  \"full width\": \"pilnas proltis\",\n  \"Create Widgets\": \"Kurti valdiklius\",\n  \"not equal to\": \"nelygu\",\n  \"Light Mode\": \"Šviesos režimas\",\n  \"Dark Mode\": \"Tamsusis režimas\",\n  \"OS Default\": \"OS numatytoji\",\n  \"Create a Custom Palette\": \"Sukurkite pasirinktinę paletę\",\n  \"Custom Palette\": \"Individualizuota paletė\",\n  \"Primary Color\": \"Pirminė spalva\",\n  \"Secondary Color\": \"Antrinė spalva\",\n  \"Selection Color\": \"Spalvos pasirinkimas\",\n  \"Nav Text\": \"Navigacijos tekstas\",\n  \"Nav Background\": \"Navigacijos fonas\",\n  \"Sidebar Text\": \"Šoninės juostos tekstas\",\n  \"Sidebar Background\": \"Šoninės juostos fonas\",\n  \"Sidebar Active Text\": \"Šoninės juostos aktyvus tekstas\",\n  \"Sidebar Active Background\": \"Šoninės juostos aktyvus fonas\",\n  \"Sidebar Hover Background\": \"Šoninės juostos užvedimo fonas\",\n  \"Settings Text\": \"Nustatymai Tekstas\",\n  \"Settings Background\": \"Nustatymai Fonas\",\n  \"Settings Item Background\": \"Nustatymai Elemento fonas\",\n  \"Settings Active Color\": \"Nustatymai Aktyvi spalva\",\n  \"Settings Active Background\": \"Nustatymai Aktyvus fonas\",\n  \"Settings Hover Background\": \"Nustatymai Užveskite pelės žymeklį fone\",\n  \"This name is shown in the title area of the back-end.\": \"Šis pavadinimas bus rodomas naršyklės kortelėje naudojant administracinę zoną.\",\n  \"App Name\": \"Programos Pavadinimas\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Šią antraštę matysite prisijungimo į administracinę zoną puslapyje.\",\n  \"App Tagline\": \"Programos Antraštė\",\n  \"Brand\": \"Prekės ženklas\",\n  \"Upload a custom logo to use in the back-end.\": \"Įkelkite logotipą, kurį norite naudoti posistemėje.\",\n  \"Logo\": \"Logotipas\",\n  \"Upload a custom favicon to use in the back-end\": \"Įkelkite tinkintą mėgstamą piktogramą, kurią naudosite fone\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigacijos logotipas\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Naršymo skydelyje prietaisų skydelio nuoroda pakeičiama tinkintu logotipu.\",\n  \"Dashboard Icon\": \"Prietaisų skydelio piktograma\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Prietaisų skydelio piktogramai naudokite tinkintą vaizdą (60 x 60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Šis pranešimas rodomas foninės sistemos prisijungimo ekrane.\",\n  \"Welcome Message\": \"Sveikinimo žinutė\",\n  \"Login Page\": \"Prisijungimo puslapis\",\n  \"Background Type\": \"Fono tipas\",\n  \"Flat Color\": \"Plokščia spalva\",\n  \"Wallpaper\": \"Tapetai\",\n  \"Wallpaper Size\": \"Tapeto dydis\",\n  \"Auto\": \"Automatinis\",\n  \"Cover\": \"Viršelis\",\n  \"Background Wallpaper Image\": \"Fono fono paveikslėlis\",\n  \"Image\": \"Paveiksliukas\",\n  \"Random Autumn Images\": \"Atsitiktiniai rudens vaizdai\",\n  \"Custom Image\": \"Pasirinktinis vaizdas\",\n  \"Login Page Image\": \"Prisijungimo puslapio vaizdas\",\n  \"Colors\": \"Spalvos\",\n  \"Color Mode\": \"Spalvų režimas\",\n  \"Color Preset\": \"Iš anksto nustatyta spalva\",\n  \"Menu Style\": \"Meniu stilius\",\n  \"Navigation\": \"Navigacija\",\n  \"Custom Stylesheet\": \"Custom stylesheet\",\n  \"Styles\": \"Stiliai\",\n  \"Inline\": \"Linijoje\",\n  \"Text\": \"Tekstas\",\n  \"Tiles\": \"Langeliais\",\n  \"Collapsed\": \"Sutraukta\",\n  \"Icons\": \"Piktogramos\",\n  \"Left Side\": \"Kairė pusė\",\n  \"Add New Item\": \"Pridėti naują elementą\",\n  \"Link Color\": \"Nuorodos spalva\",\n  \"Current Password\": \"Dabartinis slaptažodis\",\n  \"New Password\": \"Naujas Slaptažodis\",\n  \"Current password does not match. Please try again!\": \"Dabartinis slaptažodis nesutampa. Prašau, pabandykite dar kartą!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Jūsų slaptažodis baigėsi, saugumo sumetimais sukurkite naują.\",\n  \"Region\": \"Regionas\",\n  \"Locale\": \"Kalba\",\n  \"Select your desired locale for language use.\": \"Pasirinkite norimą kalbą.\",\n  \"Timezone\": \"Laiko Juosta\",\n  \"Adjust displayed dates to this timezone.\": \"Pritaikyti rodomas datas šiai laiko juostai.\",\n  \"Code Editor\": \"Kodo redaktorius\",\n  \"Color Scheme\": \"Spalvų schema\",\n  \"Word Wrap\": \"Perkėlimas\",\n  \"Off\": \"Išjungta\",\n  \"40 Characters\": \"40 Simbolių\",\n  \"80 Characters\": \"80 Simbolių\",\n  \"Fluid\": \"Paslankus\",\n  \"Font Size\": \"Šrifto dydis\",\n  \"Tab Size\": \"Kortelės dydis\",\n  \"Code Folding\": \"Kodo suskleidimas\",\n  \"Mark begin\": \"Žymėti pradžią\",\n  \"Mark begin and end\": \"Žymėti pradžią ir pabaigą\",\n  \"Autocompletion\": \"Autopildymas\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Paprastas autopildymas (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Autopildymas gyvai\",\n  \"Show gutter\": \"Rodyti paraštę\",\n  \"Highlight active line\": \"Paryškiti aktyvią eilutę\",\n  \"Automatically close tags\": \"Automatiškai uždaryti žymas\",\n  \"Indent using tabs\": \"Pastūmimas naudojant TAB\",\n  \"Show indent guides\": \"Rodyti pastūmimo gidą\",\n  \"Show invisible characters\": \"Rodyti nematomus simbolius\",\n  \"Show print margin\": \"Rodyti spausdinimo ribą\",\n  \"Custom styles to include in the HTML editor.\": \"Custom styles to include in the HTML editor.\",\n  \"Markup Styles\": \"Markup Styles\",\n  \"Paragraph Formats\": \"Pastraipų formatai\",\n  \"Markup Classes\": \"Žymėjimo Klasės\",\n  \"Label\": \"Žymeklis\",\n  \"Paragraph\": \"Pastraipa\",\n  \"Class Name\": \"Klasės pavadinimas\",\n  \"Link\": \"Nuoroda\",\n  \"Table\": \"Lentelė\",\n  \"Table Cell\": \"Lentelės Langelis\",\n  \"Allowed Tags\": \"Leidžiami tagai\",\n  \"The list of allowed tags.\": \"Leidžiamų tagų sąrašas.\",\n  \"Markup Tags\": \"Žymėjimo tagai\",\n  \"Allowed Empty Tags\": \"Leisti tuščius tagus\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Tagų sąrašas, kurie nepašalinami kai juose nėra turinio.\",\n  \"Do Not Wrap Tags\": \"Neperkelti tagų\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Tagų sąrašas, kurie nebus perkeliami blokuose.\",\n  \"Remove Tags\": \"Pašalinti tagus\",\n  \"The list of tags that are removed together with their content.\": \"Tagų sąrašas, kurie šalinami su esančiu turiniu juose.\",\n  \"Line Breaker Tags\": \"Line Breaker žymės\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Sąrašas žymų, kurios naudojamos eilutės skyriklio elementui tarp jų įdėti.\",\n  \"Toolbar Buttons\": \"Įrankių juostos mygtukai\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Įrankių juostos mygtukai, kurie pagal numatytuosius nustatymus bus rodomi Rich Editor.\",\n  \"Insert a preset toolbar button configuration\": \"Įdėkite iš anksto nustatytą įrankių juostos mygtuko konfigūraciją\",\n  \"Allowed Attributes\": \"Leidžiami atributai\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Leidžiamų HTML atributų sąrašas, be įprastų leidimų.\",\n  \"Enable code snippets (Tab)\": \"Įjungti kodo fragmentus (Tab)\",\n  \"Title\": \"Pavadinimas\",\n  \"Description\": \"Aprašymas\",\n  \"Attachment\": \"Priedas\",\n  \"Attachment URL\": \"Priedo URL\",\n  \"Add a title and description for this attachment.\": \"Įrašykite pavadinimą ir aprašymą šiam priedui.\",\n  \"Are you sure?\": \"Ar tikrai?\",\n  \"Upload Error\": \"Įkėlimo klaida\",\n  \"Remove File\": \"Pašalinti failą\",\n  \"Create :name\": \"Kurti :name\",\n  \"Update :name\": \"Atnaujinti :name\",\n  \"Add :name\": \"Pridėti :name\",\n  \"Link :name\": \"Nuoroda :name\",\n  \"Unlink\": \"Atjungti\",\n  \"Preview :name\": \"Peržiūrėti :name\",\n  \"Link a New :name\": \"Jungti naują :name\",\n  \"Add a New :name\": \"Pridėti naują :name\",\n  \"Related :name Data\": \"Giminingi :name duomenys\",\n  \":name Created\": \":name sukurtas\",\n  \":name Updated\": \":name atnaujintas\",\n  \":name Deleted\": \":name ištrintas\",\n  \"Form record with an ID of :id could not be found.\": \"Formos įrašas su ID :id nebuvo rastas.\",\n  \"Preview the Website\": \"Peržiūrėti svetainę\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Tvarkyti administracinius vartotojus, grupes ir prieigos leidimus.\",\n  \"Branding & Appearance\": \"Redaguoti posistemę\",\n  \"Customize the administration area such as name, colors and logo.\": \"Redaguoti adminsitracinės zonos pavadinimą, spalvas bei logotipą.\",\n  \"Editor Settings\": \"Redaktoriaus nustatymai\",\n  \"Change the global editor preferences.\": \"Redaguoti bendrąsias redaktoriaus savybes, tokias kaip šrifto dydis ir spalvų schema.\",\n  \"My Account\": \"Mano anketa\",\n  \"Update your account details such as name, email address and password.\": \"Atnaujinkite savo anketos informaciją tokią kaip vardas, el.paštas ir slaptažodis.\",\n  \"Backend Preferences\": \"Posistemės savybės\",\n  \"Manage your account preferences such as desired language.\": \"Tvarkykite savo anketos savybes tokias kaip norima kalba.\",\n  \"security login\": \"saugus prisijungimas\",\n  \"List Setup\": \"Sąrašo nustatymai\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Pažymėkite varnelėmis stulpelius, kuriuos norite matyti šąraše. Taip pat galite nustatyti stulpelių eiliškumą rikiuojant juos palės pagalba aukštyn ir žemyn.\",\n  \"Records Per Page\": \"Įrašų puslapyje\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Pasirinkite norimą įrašų skaičių puslapyje. Primename, kad didelis kiekis įrašų viename puslapyje įtakos užkrovimo našumą.\",\n  \"Add Selected\": \"Pridėti pasirinktus\",\n  \"Please specify the modelClass property for :type\": \"Prašome nurodyti modelClass atributą tipui :type\",\n  \"Please specify some columns to export.\": \"Prašome pasirinkti stulpelius, kuriuos norite eksportuoti.\",\n  \"Missing column identifier\": \"Truksta stulpelių identifikatoriaus\",\n  \"Unknown column\": \"Nežinomas stulpelis\",\n  \"Please specify some columns to import.\": \"Prašome pasirinkti stulpelius, kuriuos norite eksportuoti.\",\n  \"Please match some columns first.\": \"Prašome suderinti stulpelius.\",\n  \"Please specify a match for the required field :label.\": \"Prašome nurodyti atitikmenį laukeliui :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Nežinoma failo koduotė. Pasirinkite individualaus formato failą su tinkama koduote.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Turite įterpti kontrolerio elgesną ListController su aktyvuotu eksportavimo \\\"useList\\\" pasirinkimu.\",\n  \"File export process completed!\": \"Failo eksportavimas sėkmingai užbaigtas!\",\n  \"The browser will now redirect to the file download.\": \"Nukreipiame naršyklę į failo parsiuntimą.\",\n  \"Ignore this column\": \"Ignoruoti šį stulpelį\",\n  \"Drop column here...\": \"Ikelkite stulpelį čia...\",\n  \"Please upload a valid CSV file.\": \"Prašome įkelti tinkamą CSV failą.\",\n  \"Created\": \"Sukurta\",\n  \"Updated\": \"Atnaujinta\",\n  \"Skipped\": \"Praleista\",\n  \"Warnings\": \"Įspėjimai\",\n  \"Errors\": \"Klaidos\",\n  \"Skipped Rows\": \"Praleistos Eilutės\",\n  \"Show Ignored Columns\": \"Rodyti ignoruotus stulpelius\",\n  \"Auto Match Columns\": \"Automatiškai suderinti stulpelius\",\n  \"File not found\": \"Failas nerastas\",\n  \"There was no data supplied to export\": \"Nėra pateiktų duomenų eksportavimui\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP priedas :name nėra įdiegtas. Prašome įdiegti ir aktyvuoti šį priedą.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Direktorija :name arba jos subdirektorijos nėra įrašomos naudojant PHP. Prašome nustatyti rašymo prieigą serveryje šiai direktorijai.\"\n}"
  },
  {
    "path": "modules/backend/lang/lv/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Nederīgs lauka tips :type.',\n    'options_method_not_exists' => 'Moduļa klasei :model jādefinē metodi :method() atgrieztās vērtības \\':field\\' formas laukam.',\n  ],\n  'widget' => [\n    'not_registered' => 'Logrīka klases nosaukums \\':name\\' nav reģistrēts',\n    'not_bound' => 'Logrīks ar klases nosaukumu \\':name\\' nav piesaistīts kontrolierim',\n  ],\n  'page' => [\n    'untitled' => 'Bez nosaukuma',\n    'access_denied' => [\n      'label' => 'Piekļuve liegta',\n      'help' => 'Jums nav piekļuves tiesību, lai skatītu šo lapu.',\n      'cms_link' => 'Atgriezties back-end',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Daļa \\':name\\' nav atrasta.',\n  ],\n  'account' => [\n    'sign_out' => 'Izrakstīties',\n    'login_placeholder' => 'vārds',\n    'password_placeholder' => 'parole',\n    'enter_email' => 'Ievadiet epastu',\n    'email_placeholder' => 'epasts',\n    'apply' => 'Apstiprināt',\n    'cancel' => 'Atcelt',\n    'delete' => 'Dzēst',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Mērinstrumentu panelis',\n    'widget_inspector_title' => 'Logrīka konfigurācija',\n    'widget_inspector_description' => 'Konfigurējiet logrīku',\n    'widget_columns_label' => 'Platums :columns',\n    'widget_columns_description' => 'Logrīka platums, skaitlis starp 1 un 10.',\n    'widget_columns_error' => 'Lūdzu ievadiet logrīka platumu kā skaitli starp 1 un 10.',\n    'columns' => '{1} kolonna|[2,Inf] kolonnas',\n    'widget_new_row_label' => 'Piespiedu jauna rinda',\n    'widget_new_row_description' => 'Novietot logrīku jaunā rindā.',\n    'widget_title_label' => 'Logrīka virsraksts',\n    'widget_title_error' => 'Logrīka virsraksts ir obligāts.',\n    'status' => [\n      'widget_title_default' => 'Sistēmas statuss',\n      'update_available' => '{0} atjauninājumi pieejami!|{1} atjauninājums pieejams!|[2,Inf] atjauninājumi pieejami!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrātors',\n    'list_title' => 'Pārvaldīt Administrātorus',\n    'new' => 'Jauns Administrātors',\n    'first_name' => 'Vārds',\n    'last_name' => 'Uzvārds',\n    'full_name' => 'Pilnais vārds',\n    'email' => 'Epasts',\n    'groups' => 'Grupas',\n    'groups_comment' => 'Norādiet, kurai grupai šī persona pieder.',\n    'avatar' => 'Avatar',\n    'password' => 'Parole',\n    'password_confirmation' => 'Apstiprināt Paroli',\n    'permissions' => 'Tiesības',\n    'account' => 'Konts',\n    'superuser' => 'Super Lietotājs',\n    'superuser_comment' => 'Atķeksējiet šo aili, lai atļautu šai personai neierobežotu piekļuvi.',\n    'send_invite' => 'Nosūtīt uzaicinājumu pa Epastu',\n    'send_invite_comment' => 'Atķeksējiet šo aili, lai nosūtītu uzaicinājumu pa Epastu',\n    'delete_confirm' => 'Vai tiešām vēlaties dzēst šo administrātoru?',\n    'return' => 'Atgriezties administratoru sarakstā',\n    'allow' => 'Atļaut',\n    'inherit' => 'Pārmantot',\n    'deny' => 'Aizliegt',\n    'group' => [\n      'name' => 'Grupa',\n      'name_comment' => 'Nosaukums tiek attēlots Administratora Pievienošanas/Labošanas lapu grupu sarakstā.',\n      'name_field' => 'Nosaukums',\n      'description_field' => 'Apraksts',\n      'is_new_user_default_field_label' => 'Noklusējama grupa',\n      'is_new_user_default_field_comment' => 'Pievienot jaunos administrātorus šai grupai pēc noklusējuma',\n      'code_field' => 'Kods',\n      'code_comment' => 'Norādiet unikālu piekļuves kodu, ja vēlaties to sasniegt caur API.',\n      'list_title' => 'Pārvaldīt Grupas',\n      'new' => 'Jauna Administrātoru Grupa',\n      'delete_confirm' => 'Vai tiešām vēlaties dzēst šo administrātoru grupu?',\n      'return' => 'Atgriezties grupu sarakstā',\n      'users_count' => 'Lietotāji',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nav autentificēts lietotājs, kuram ielādēt vai saglabāt iestatījumus.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Saraksts',\n    'search_prompt' => 'Meklēt...',\n    'no_records' => 'Nav ierakstu šajā skatā.',\n    'missing_model' => 'Saraksta uzvedībai definētai :class nav definēts modulis.',\n    'missing_column' => 'Nav kolonnu definīciju :columns.',\n    'missing_columns' => 'Sarakstam definētam :class nav definētas kolonnas.',\n    'missing_definition' => 'Sarakstā nav kolonnas \\':field\\'.',\n    'missing_parent_definition' => 'Saraksts nesatur uzvedības definīciju priekš \\':definition\\'.',\n    'behavior_not_ready' => 'Saraksts nav inicializēts, pārbaudiet vai saucāt makeLists() jūsu kontrolierī.',\n    'invalid_column_datetime' => 'Kolonnas vērtība \\':column\\' nav DateTime objekts, vai esat definējis $dates savā modulī?',\n    'pagination' => 'Attēloti ieraksti: :from-:to no :total',\n    'prev_page' => 'Iepriekšējā lapa',\n    'next_page' => 'Nākamā lapa',\n    'refresh' => 'Atsvaidzināt',\n    'updating' => 'Atjaunināšana...',\n    'loading' => 'Ielādējam...',\n    'delete_selected' => 'Dzēst izvēlētos',\n    'delete_selected_empty' => 'Dzēšanai nav izvēlēts neviens ieraksts.',\n    'delete_selected_confirm' => 'Dzēst izvēlētos ierakstus?',\n    'delete_selected_success' => 'Izvēlētie ieraksti veiksmīgi dzēsti.',\n    'column_switch_true' => 'Jā',\n    'column_switch_false' => 'Nē',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Uzklikšķiniet uz %s vai nesiet failu šeit',\n  ],\n  'form' => [\n    'create_title' => 'Jauns :name',\n    'update_title' => 'Labot :name',\n    'preview_title' => 'Priekšskatīt :name',\n    'missing_id' => 'Formas ieraksta ID netika norādīts.',\n    'missing_model' => 'Formai iekš :class nav definēts modulis.',\n    'missing_definition' => 'Forma nesatur \\':field\\'.',\n    'action_confirm' => 'Vai esat pārliecināts?',\n    'create' => 'Izveidot',\n    'create_and_close' => 'Izveidot un aizvērt',\n    'creating' => 'Izveidojam...',\n    'creating_name' => 'Izveidojam :name...',\n    'save' => 'Saglabāt',\n    'save_and_close' => 'Saglabāt un aizvērt',\n    'saving' => 'Saglabājam...',\n    'saving_name' => 'Saglabājam :name...',\n    'delete' => 'Dzēst',\n    'deleting' => 'Dzēšam...',\n    'confirm_delete' => 'Vai tiešām vēlaties dzēst šo ierakstu?',\n    'confirm_delete_multiple' => 'Vai tiešām vēlaties dzēst šos ierakstus?',\n    'deleting_name' => 'Dzēšam :name...',\n    'reset_default' => 'Atiestatīt uz noklusējumu',\n    'resetting' => 'Atiestatam',\n    'resetting_name' => 'Atiestatam :name',\n    'undefined_tab' => 'Izvēles',\n    'field_off' => 'Izsl.',\n    'field_on' => 'Iesl.',\n    'add' => 'Pievienot',\n    'apply' => 'Apstiprināt',\n    'cancel' => 'Atcelt',\n    'close' => 'Aizvērt',\n    'confirm' => 'Apstiprināt',\n    'reload' => 'Pārlādēt',\n    'complete' => 'Pabeigt',\n    'ok' => 'OK',\n    'or' => 'vai',\n    'confirm_tab_close' => 'Vai tiešām vēlaties aizvērt šo cilni? Nesaglabātās izmaiņas būs zudušas.',\n    'behavior_not_ready' => 'Forma nav tikusi inicializēta, pārbaudiet vai izsaucāt initForm() savā kontrolierī.',\n    'preview_no_files_message' => 'Faili nav augšupielādēti',\n    'preview_no_record_message' => 'Nav izvēlētu ierakstu.',\n    'select' => 'Izvēlēties',\n    'select_all' => 'izvēlēties visus',\n    'select_none' => 'neizvēlēties nevienu',\n    'insert_row' => 'Ievietot rindu',\n    'insert_row_below' => 'Ievietot riendu zemāk',\n    'delete_row' => 'Dzēst rindu',\n    'concurrency_file_changed_title' => 'Fails tika modificēts',\n    'concurrency_file_changed_description' => 'Fails, kuru labojat ir ticis modificēts no cita lietotāja puses. Jūs varat pārlādēt failu un zaudēt savas izmaiņas vai arī pārrakstīt esošo failu uz diska.',\n    'return_to_list' => 'Atgriezties uz sarakstu',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Atrast ierakstu',\n  ],\n  'relation' => [\n    'missing_config' => 'Relācijām nav norādīta nekāda konfigurācija \\':config\\'.',\n    'missing_definition' => 'Relācijām nav definēts lauks \\':field\\'.',\n    'missing_model' => 'Relācijās izmantotajai klasei :class nav moduļa definīcijas.',\n    'invalid_action_single' => 'Šī darbība nevar tikt veikta ar vienmoduļa relāciju.',\n    'invalid_action_multi' => 'Šī darbība nevar tikt veikta ar daudzmoduļu relāciju.',\n    'help' => 'Spiediet uz vienuma, lai pievienotu',\n    'add' => 'Pievienot',\n    'link_selected' => 'Saite izvēlēta',\n    'cancel' => 'Atcelt',\n    'close' => 'Aizvērt',\n    'create' => 'Izveidot',\n    'update' => 'Atjaunot',\n    'preview' => 'Priekšskatīt',\n    'remove_name' => 'Noņemt :name',\n    'delete_name' => 'Dzēst :name',\n    'link' => 'Saistīt',\n    'unlink_name' => 'Atsaistīt :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Pārkārtot ierakstus',\n    'no_records' => 'Nav pieejami ieraksti, ko pārkārtot.',\n  ],\n  'model' => [\n    'name' => 'Modulis',\n    'not_found' => 'Modulis \\':class\\' ar ID :id netika atrasts',\n    'missing_id' => 'Nav ticis norādīts ID, lai meklētu ierakstu.',\n    'missing_relation' => 'Modulis \\':class\\' nesniedz informāciju par \\':relation\\'.',\n    'missing_method' => 'Modulis \\':class\\' nesatur metodi \\':method\\'.',\n    'invalid_class' => 'Modulis :model lietots :class ir nederīgs, tam jābūt mantotam no \\\\Moduļa klases.',\n    'mass_assignment_failed' => 'Masveida saistīšana neizdevās Moduļa atribūtam \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Sistēmas konfigurācijas padomi',\n    'tips_description' => 'Ir lietas, kurām vajadzētu pievērst uzmanību, lai konfigurētu sistēmu pareizi.',\n  ],\n  'editor' => [\n    'enable_basic_autocompletion' => 'Iespējot pamata automātisko pabeigšanu (Ctrl+Space)',\n    'enable_live_autocompletion' => 'Iespējot dzīvo automātisko pabeigšanu',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Mani Iestatījumi',\n    'menu_description' => 'Iestatījumi saistībā ar jūsu administrātora kontu',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Akcenta / Uzsvara krāsa',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'visi',\n  ],\n  'import_export' => [\n    'export_error' => 'Eksporta kļūda',\n  ],\n  'permissions' => [\n    'manage_media' => 'Pārvaldīt multividi',\n  ],\n  'mediafinder' => [\n    'default_prompt' => 'Klikšķiniet uz %s pogas, lai atrastu multividi',\n  ],\n  'media' => [\n    'menu_label' => 'Multimēdija',\n    'upload' => 'Augšupielādēt',\n    'move' => 'Pārvietot',\n    'delete' => 'Dzēst',\n    'add_folder' => 'Pievienot mapi',\n    'search' => 'Meklēt',\n    'display' => 'Attēlot',\n    'filter_everything' => 'Viss',\n    'filter_images' => 'Attēli',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Dokumenti',\n    'library' => 'Bibliotēka',\n    'size' => 'Izmērs',\n    'title' => 'Virsraksts',\n    'last_modified' => 'Pēdējoreiz modificēts',\n    'public_url' => 'Publiskā URL',\n    'click_here' => 'Spiest šeit',\n    'thumbnail_error' => 'Kļūda ģenerējot priekšskatījumu.',\n    'return_to_parent' => 'Atgriezties vecākmapē',\n    'return_to_parent_label' => 'Doties augšup ..',\n    'nothing_selected' => 'Nekas nav izvēlēts.',\n    'multiple_selected' => 'Vairāki izvēlēti objekti.',\n    'uploading_file_num' => 'Augšupielādējam :number failu(us)...',\n    'uploading_complete' => 'Augšupielāde pabeigta',\n    'order_by' => 'Kārtot pēc',\n    'folder' => 'Mape',\n    'no_files_found' => 'Jūsu pieprasītie faili netika atrasti.',\n    'delete_empty' => 'Lūdzu izvēlaties objektus, kurus dzēst.',\n    'delete_confirm' => 'Vai tiešām vēlaties izdzēst izvēlēto objektu(us)?',\n    'error_renaming_file' => 'Kļūda pārdēvējot objektu.',\n    'new_folder_title' => 'Jauna mape',\n    'folder_name' => 'Mapes nosaukums',\n    'error_creating_folder' => 'Kļūda izveidojot mapi',\n    'folder_or_file_exist' => 'Mape vai fails ar izvēlēto nosaukumu jau eksistē.',\n    'move_empty' => 'Izvēlēties objektus, kurus pārvietot.',\n    'move_popup_title' => 'Pārvietot failus vai mapes',\n    'move_destination' => 'Mērķdirektorija',\n    'please_select_move_dest' => 'Lūdzu izvēlieties mērķdirektoriju.',\n    'move_dest_src_match' => 'Lūdzu izvēlieties citu mērķdirektoriju.',\n    'empty_library' => 'Multimēdijas bibliotēka ir tukša. Augšupielādējiet failus vai izveidojat mapes, lai sāktu.',\n    'insert' => 'Ievietot',\n    'crop_and_insert' => 'Apgriezt un Ievietot',\n    'select_single_image' => 'Lūdzu izvēlieties vienu attēlu.',\n    'selection_not_image' => 'Izvēlētais objekts nav attēls.',\n    'restore' => 'Atcelt visas izmaiņas',\n    'resize' => 'Mērogot...',\n    'selection_mode_normal' => 'Normāls',\n    'selection_mode_fixed_ratio' => 'Fiksēta attiecība',\n    'selection_mode_fixed_size' => 'Fiksēts izmērs',\n    'height' => 'Augstums',\n    'width' => 'Platums',\n    'selection_mode' => 'Iezīmēšanas režīms',\n    'resize_image' => 'Mērogot attēlu',\n    'image_size' => 'Attēla izmērs:',\n    'selected_size' => 'Izvēlēts:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/lv.json",
    "content": "{\n  \"Cancel\": \"Atcelt\",\n  \"You are viewing as\": \"Jūs skatāties kā\",\n  \"Preview Role\": \"Priekšskatījuma loma\",\n  \"This lets you test the actions this role can perform.\": \"Tas ļauj pārbaudīt darbības, ko šī loma var veikt.\",\n  \"View As Role\": \"Skatīt kā lomu\",\n  \"Return to Role Settings\": \"Atgriezties uz lomu iestatījumiem\",\n  \"Password must have a minimum of length of :min characters\": \"Parolei ir jābūt vismaz :min rakstzīmēm\",\n  \"Password must contain at least one uppercase character.\": \"Parolē ir jābūt vismaz vienai lielajai rakstzīmei.\",\n  \"Password must contain at least one lowercase character.\": \"Parolē jāsatur vismaz viena mazā rakstzīme.\",\n  \"Password must contain at least one number.\": \"Parolei jāsastāv vismaz no viena cipara.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Parolē ir jāsatur vismaz viena rakstzīme, kas nav burtciparu.\",\n  \"Welcome to your Administration Area, :name\": \"Laipni lūdzam jūsu administrācijas apgabalā, :name\",\n  \"Duplicate\": \"Dublikāts\",\n  \"Expand\": \"Izvērst\",\n  \"Collapse\": \"Sakļaut\",\n  \"Move Up\": \"Pārvietot uz augšu\",\n  \"Move Down\": \"Pārvietot uz leju\",\n  \"Remove\": \"Noņemt\",\n  \"Manage Item\": \"Pārvaldīt vienumu\",\n  \"Clear Filters\": \"Notīrīt filtrus\",\n  \"Filter Setup\": \"Filtra iestatīšana\",\n  \"Apply\": \"Pieteikties\",\n  \"Clear\": \"Skaidrs\",\n  \"is equal to\": \"ir vienāds ar\",\n  \"is between\": \"ir starp\",\n  \"contains\": \"satur\",\n  \"is before\": \"ir pirms tam\",\n  \"is after\": \"ir pēc\",\n  \"is greater than\": \"ir labāks par\",\n  \"is less than\": \"ir mazāks par\",\n  \"1. Export output format\": \"1. Eksporta izvades formāts\",\n  \"File Format\": \"Faila formāts\",\n  \"Delimiter Character\": \"Delimiter rakstzīme (simbols)\",\n  \"Enclosure Character\": \"Enclosure rakstzīme (simbols)\",\n  \"Escape Character\": \"Escape rakstzīme (simbols)\",\n  \"2. Select columns to export\": \"2. Izvēlieties kolonnas, kuras ir jāeksportē\",\n  \"Columns\": \"Kolonnas\",\n  \"3. Set export options\": \"3. Iestatiet eksporta opcijas\",\n  \"CSV Custom\": \"Pielāgots formāts\",\n  \"1. Upload an Import File\": \"1. Augšupielādējiet CSV failu\",\n  \"Import File\": \"Importa fails\",\n  \"File Encoding\": \"Faila kodējums\",\n  \"First row contains column titles\": \"Pirmā rinda satur kolonnu nosaukumus / virsrakstus\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Atstājiet šo izvēles aili aktīvu, ja pirmā rinda Jūsu CSV failā satur kolonnu nosaukumus / virsrakstus.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Saskanējiet faila kolonnas ar datubāzes laukiem\",\n  \"File columns\": \"Faila kolonnas\",\n  \"Database fields\": \"Datubāzes lauki / kolonnas\",\n  \"3. Set Import Options\": \"3. Iestatiet importa opcijas\",\n  \"Export progress\": \"Eksporta progress\",\n  \"Processing\": \"Apstrāde\",\n  \"Import progress\": \"Importa progress\",\n  \"Import error\": \"Importa kļūda\",\n  \"Export error\": \"Eksporta kļūda\",\n  \"Column preview\": \"Kolonnas priekšskatījums\",\n  \"Column\": \"Kolonna\",\n  \"Disable\": \"Atspējot\",\n  \"Enable\": \"Iespējot\",\n  \"Delete\": \"Dzēst\",\n  \"Export\": \"Eksportēt\",\n  \"Import\": \"Importēt\",\n  \"Select Action\": \"Atlasiet Darbība\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Lūdzu, izveidojiet jaunu kontu, lai pieteiktos administrācijas apgabalā.\",\n  \"First Name\": \"Vārds\",\n  \"Last Name\": \"Uzvārds\",\n  \"Email Address\": \"Epasta adrese\",\n  \"Pick a Username\": \"Izvēlieties lietotājvārdu\",\n  \"Enter New Password\": \"Ievadiet jauno paroli\",\n  \"Confirm Password\": \"apstipriniet paroli\",\n  \"Create Account\": \"Izveidot profilu\",\n  \"Getting Ready\": \"Sagatavoties\",\n  \"Just a few more minutes\": \"Vēl tikai dažas minūtes\",\n  \"Migrating Database\": \"Datu bāzes migrēšana\",\n  \"Access the Backend Panel\": \"Piekļūstiet aizmugures panelim\",\n  \"View Backend During Maintenance\": \"Apkopes laikā skatiet aizmuguri\",\n  \"Perform Software Updates\": \"Veiciet programmatūras atjauninājumus\",\n  \"In Maintenance\": \"In Apkope\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Vietne pašlaik ir uzturēšanas režīmā, lūdzu, pārbaudiet vēlāk.\",\n  \"Dashboard\": \"Mērinstrumentu panelis\",\n  \"Administrators\": \"Administrātori\",\n  \"Manage Admins\": \"Pārvaldīt administratorus\",\n  \"Create Admins\": \"Izveidot administratorus\",\n  \"Moderate Admins\": \"Vidēji administratori\",\n  \"Manage account suspension and ban admin accounts\": \"Pārvaldiet konta apturēšanu un bloķējiet administratora kontus\",\n  \"Role Permissions\": \"Pārvaldīt lomas\",\n  \"Team Groups\": \"Grupas\",\n  \"Manage Other Admins\": \"Pārvaldīt citus administratorus\",\n  \"Allow users to reset passwords and update emails.\": \"Ļauj atiestatīt paroles un atjaunināt e-pastus\",\n  \"Delete Admins\": \"Dzēst administratorus\",\n  \"Preferences\": \"Preferences\",\n  \"Settings\": \"Iestatījumi\",\n  \"Background Color\": \"Fona krāsa\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Ļaujiet lietotājiem izveidot jaunas lomas un rediģēt vai dzēst lomas, kas ir zemākas par viņu augstāko lomu.\",\n  \"Save Changes\": \"Saglabāt izmaiņas\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Šis žurnāls rāda sarakstu ar vieksmīgajiem ielogošanās mēģinājumiem no administrātoriem. Ieraksti tiek saglabāti :days dienas.\",\n  \"Access Log\": \"Autorizēšanās žurnāls\",\n  \"View a list of successful back-end user sign ins.\": \"Rāda sarakstu ar veiksmīgajiem back-end autorizēšanās mēģinājumiem.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Datums & Laiks\",\n  \"Type\": \"Tips\",\n  \"IP address\": \"IP adrese\",\n  \"Username\": \"Lietotājvārds\",\n  \"Login\": \"Login\",\n  \"First name\": \"Vārds\",\n  \"Last name\": \"Uzvārds\",\n  \"Email\": \"Epasts\",\n  \"A custom schema is used for this file format.\": \"Šim faila formātam tiek izmantota pielāgota shēma.\",\n  \"Select\": \"Izvēlieties\",\n  \"Replace\": \"Aizvietot\",\n  \"and\": \"un\",\n  \"Go\": \"Aiziet\",\n  \"Go to page\": \"Iet uz lapu\",\n  \"Copy to Clipboard\": \"Kopēt starpliktuvē\",\n  \"Reveal Contents\": \"Atklājiet saturu\",\n  \"Selected Site\": \"Atlasītā vietne\",\n  \"Use Emmet abbreviations\": \"Izmantojiet Emmeta saīsinājumus\",\n  \"A record does not exist for the selected site. Create one?\": \"Ieraksts atlasītajai vietnei nepastāv. Izveidot vienu?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Jūsu ievadītā informācija neatbilda mūsu ierakstiem. Lūdzu, vēlreiz pārbaudiet un mēģiniet vēlreiz.\",\n  \"Administration Area\": \"Administrācijas vide\",\n  \"Password Reset\": \"Paroles atiestatīšana\",\n  \"Please enter a new password.\": \"Ievadiet jauno paroli\",\n  \"Password\": \"Parole\",\n  \"Password Restore\": \"Paroles atjaunošana\",\n  \"Please enter your login to restore the password.\": \"Ievadiet lietotājvārdu\",\n  \"A user could not be found with a login value of ':login'\": \"Lietotājs ar norādīto lietotājvārdu neeksistē ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Epasts tika nosūtīts uz norādīto adresi ar paroles atiestatīšanas norādēm.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Nederīgi paroles atiestatīšanas dati. Mēģiniet vēlreiz!\",\n  \"Unable to reset your password!\": \"Nebija iespējams atiestatīt paroli!\",\n  \"Password has been reset. You may now sign in.\": \"Jūsu parole tika veiksmīgi atiestatīta. Varat pieslēgties.\",\n  \"Restore\": \"Atjaunot\",\n  \"Reset\": \"Atiestatīt\",\n  \"Stay logged in\": \"Palieciet pieteicies\",\n  \"Forgot password?\": \"Aizmirsāt paroli?\",\n  \"Global Editor Settings\": \"Globālā redaktora iestatījumi\",\n  \"Manage Widgets\": \"Pārvaldīt logrīkus\",\n  \"Add Widget\": \"Pievienot logrīku\",\n  \"Set the current layout as the default?\": \"Vai iestatīt pašreizējo izkārtojumu kā noklusējuma izkārtojumu?\",\n  \"Make Default\": \"Padarīt noklusējumu\",\n  \"Reset layout back to default?\": \"Vai atiestatīt izkārtojumu atpakaļ uz noklusējuma vērtību?\",\n  \"Reset Layout\": \"Atiestatīt izkārtojumu\",\n  \"Widget\": \"Logrīks\",\n  \"please select\": \"lūdzu izvēlieties\",\n  \"Width\": \"Platums\",\n  \"full width\": \"pilns platums\",\n  \"Create Widgets\": \"Izveidot logrīkus\",\n  \"not equal to\": \"nav vienāds ar\",\n  \"Light Mode\": \"Gaismas režīms\",\n  \"Dark Mode\": \"Tumšais režīms\",\n  \"OS Default\": \"OS noklusējums\",\n  \"Create a Custom Palette\": \"Izveidojiet pielāgotu paleti\",\n  \"Custom Palette\": \"Pielāgota palete\",\n  \"Primary Color\": \"Primārā krāsa\",\n  \"Secondary Color\": \"Sekundārā krāsa\",\n  \"Selection Color\": \"Krāsu izvēle\",\n  \"Nav Text\": \"Nav teksts\",\n  \"Nav Background\": \"Nav fons\",\n  \"Sidebar Text\": \"Sānjoslas teksts\",\n  \"Sidebar Background\": \"Sānjoslas fons\",\n  \"Sidebar Active Text\": \"Sānjoslas aktīvais teksts\",\n  \"Sidebar Active Background\": \"Sānjoslas aktīvais fons\",\n  \"Sidebar Hover Background\": \"Sānjoslas kursora fons\",\n  \"Settings Text\": \"Iestatījumi Teksts\",\n  \"Settings Background\": \"Iestatījumi Fons\",\n  \"Settings Item Background\": \"Iestatījumi Vienuma fons\",\n  \"Settings Active Color\": \"Iestatījumi Aktīvā krāsa\",\n  \"Settings Active Background\": \"Iestatījumi Aktīvs fons\",\n  \"Settings Hover Background\": \"Iestatījumi Kursora novietošanas fons\",\n  \"This name is shown in the title area of the back-end.\": \"Šis nosaukums tiek rādīts augšpusē iekš back-end.\",\n  \"App Name\": \"Nosaukums\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Šis apraksts tiek rādīts back-end auteintificēšanās lapā.\",\n  \"App Tagline\": \"Apraksts\",\n  \"Brand\": \"Brends\",\n  \"Upload a custom logo to use in the back-end.\": \"Augšupielādējiet pielāgotu logo lai izmantotu back-end.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Augšupielādējiet pielāgotu favicon, ko izmantot aizmugursistēmā\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigācijas logotips\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Aizstāj informācijas paneļa saiti ar pielāgotu logotipu navigācijā.\",\n  \"Dashboard Icon\": \"Informācijas paneļa ikona\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Izmantojiet pielāgotu attēlu informācijas paneļa ikonai (60 x 60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Šis ziņojums tiek rādīts aizmugursistēmas pierakstīšanās ekrānā.\",\n  \"Welcome Message\": \"Sveiciena ziņojums\",\n  \"Login Page\": \"Pieteikšanās lapa\",\n  \"Background Type\": \"Fona tips\",\n  \"Flat Color\": \"Plakana krāsa\",\n  \"Wallpaper\": \"Tapetes\",\n  \"Wallpaper Size\": \"Tapetes izmērs\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Piesegt\",\n  \"Background Wallpaper Image\": \"Fona tapetes attēls\",\n  \"Image\": \"Attēls\",\n  \"Random Autumn Images\": \"Nejauši rudens attēli\",\n  \"Custom Image\": \"Pielāgots attēls\",\n  \"Login Page Image\": \"Pieteikšanās lapas attēls\",\n  \"Colors\": \"Krāsas\",\n  \"Color Mode\": \"Krāsu režīms\",\n  \"Color Preset\": \"Krāsu iepriekš iestatīts\",\n  \"Menu Style\": \"Izvēlnes stils\",\n  \"Navigation\": \"Navigācija\",\n  \"Custom Stylesheet\": \"Pielāgots css\",\n  \"Styles\": \"Stili\",\n  \"Inline\": \"Rindā (Inline)\",\n  \"Text\": \"Teksts\",\n  \"Tiles\": \"Flīzes (Tiles)\",\n  \"Collapsed\": \"Collapsed\",\n  \"Icons\": \"Ikonas\",\n  \"Left Side\": \"Kreisā puse\",\n  \"Add New Item\": \"Pievienot jaunu vienumu\",\n  \"Link Color\": \"Saites krāsa\",\n  \"Current Password\": \"Pašreizējā parole\",\n  \"New Password\": \"jauna parole\",\n  \"Current password does not match. Please try again!\": \"Pašreizējā parole neatbilst. Lūdzu mēģiniet vēlreiz!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Jūsu paroles derīguma termiņš ir beidzies. Drošības apsvērumu dēļ, lūdzu, izveidojiet jaunu.\",\n  \"Region\": \"Regions\",\n  \"Locale\": \"Valoda\",\n  \"Select your desired locale for language use.\": \"Izvēlieties kādu valodu izmantosiet.\",\n  \"Timezone\": \"Laika josla\",\n  \"Adjust displayed dates to this timezone.\": \"Pielāgojiet parādītos datumus šai laika joslai.\",\n  \"Code Editor\": \"Koda redaktors\",\n  \"Color Scheme\": \"Krāsu shēma\",\n  \"Word Wrap\": \"Vārdu aplaušana\",\n  \"Off\": \"Izslēgts\",\n  \"40 Characters\": \"40 rakstzīmes\",\n  \"80 Characters\": \"80 rakstzīmes\",\n  \"Fluid\": \"Šķidrums\",\n  \"Font Size\": \"Fonta izmērs\",\n  \"Tab Size\": \"Tabulācijas platums\",\n  \"Code Folding\": \"Koda savilkšana\",\n  \"Mark begin\": \"Atzīmējiet sākumu\",\n  \"Mark begin and end\": \"Atzīmējiet sākumu un beigas\",\n  \"Autocompletion\": \"Automātiskā pabeigšana\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Pamata automātiskā pabeigšana (Ctrl+Space)\",\n  \"Live Autocompletion\": \"Automātiskā pabeigšana tiešsaistē\",\n  \"Show gutter\": \"Rādīt līniju numurus\",\n  \"Highlight active line\": \"Iekrāsot aktīvo līniju\",\n  \"Automatically close tags\": \"Automātiski aizvērt birkas un īpašos simbolus\",\n  \"Indent using tabs\": \"Kārtot lietojot Tab\",\n  \"Show indent guides\": \"Rādīt atkāpju ceļvežus\",\n  \"Show invisible characters\": \"Rādīt slēptos simbolus\",\n  \"Show print margin\": \"Rādīt printēšanas rezervi\",\n  \"Custom styles to include in the HTML editor.\": \"Pielāgoti stili, kas jāiekļauj HTML redaktorā.\",\n  \"Markup Styles\": \"Iezīmēšanas stili\",\n  \"Paragraph Formats\": \"Rindkopu formāti\",\n  \"Markup Classes\": \"Marķējuma klases\",\n  \"Label\": \"Etiķete\",\n  \"Paragraph\": \"Paragrāfs\",\n  \"Class Name\": \"Klases nosaukums\",\n  \"Link\": \"Saite\",\n  \"Table\": \"Tabula\",\n  \"Table Cell\": \"Tabulas šūna\",\n  \"Allowed Tags\": \"Atļautās atzīmes\",\n  \"The list of allowed tags.\": \"Atļauto tagu saraksts.\",\n  \"Markup Tags\": \"Marķējuma tagi\",\n  \"Allowed Empty Tags\": \"Atļautas tukšas atzīmes\",\n  \"The list of tags that are not removed when they have no content inside.\": \"To atzīmju saraksts, kuras netiek noņemtas, ja tajās nav satura.\",\n  \"Do Not Wrap Tags\": \"Neaptiniet atzīmes\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"To tagu saraksts, kurus nevajadzētu ietīt bloku tagos.\",\n  \"Remove Tags\": \"Noņemt tagus\",\n  \"The list of tags that are removed together with their content.\": \"Noņemto atzīmju saraksts kopā ar to saturu.\",\n  \"Line Breaker Tags\": \"Line Breaker Tags\",\n  \"The list of tags that are used to place a line breaker element between.\": \"To tagu saraksts, kas tiek izmantoti, lai starp tiem novietotu rindiņu pārrāvuma elementu.\",\n  \"Toolbar Buttons\": \"Rīkjoslas pogas\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Rīkjoslas pogas, kas pēc noklusējuma tiek rādītas bagātinātajā redaktorā.\",\n  \"Insert a preset toolbar button configuration\": \"Ievietojiet iepriekš iestatītu rīkjoslas pogas konfigurāciju\",\n  \"Allowed Attributes\": \"Atļautie atribūti\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Atļauto HTML atribūtu saraksts papildus parastajiem pielaidēm.\",\n  \"Enable code snippets (Tab)\": \"Rādīt koda fragmentus automātiskajā pabeigšanā\",\n  \"Title\": \"Vrisraksts\",\n  \"Description\": \"Apraksts\",\n  \"Attachment\": \"Pielikums\",\n  \"Attachment URL\": \"Pielikuma URL\",\n  \"Add a title and description for this attachment.\": \"Pievienojiet virsrakstu un aprakstu šim pielikumam.\",\n  \"Are you sure?\": \"Vai esat pārliecināts?\",\n  \"Upload Error\": \"Augšupielādes kļūda\",\n  \"Remove File\": \"Noņemt failu\",\n  \"Create :name\": \"Izveidot :name\",\n  \"Update :name\": \"Atjaunot :name\",\n  \"Add :name\": \"Pievienot :name\",\n  \"Link :name\": \"Saistīt :name\",\n  \"Unlink\": \"Atsaistīt\",\n  \"Preview :name\": \"Priekšskatīt :name\",\n  \"Link a New :name\": \"Saistīt jaunu :name\",\n  \"Add a New :name\": \"Pievienot jaunu :name\",\n  \"Related :name Data\": \"Saistītie :name dati\",\n  \":name Created\": \":name tika veiksmīgi izveidots\",\n  \":name Updated\": \":name tika veiksmīgi atjaunināts\",\n  \":name Deleted\": \":name tika veiksmīgi izdzēsts\",\n  \"Form record with an ID of :id could not be found.\": \"Formas ieraksts ar ID :id netika atrasts.\",\n  \"Preview the Website\": \"Priekšskatīt web lapu\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Pārvaldiet back-end administrēšanas lietotājus, grupas un tiesības.\",\n  \"Branding & Appearance\": \"Back-end pielāgošana\",\n  \"Customize the administration area such as name, colors and logo.\": \"Pielāgojiet administratīvo vidi, piemēram nosaukumu, krāsas un logo.\",\n  \"Editor Settings\": \"Koda labotāja iestatījumi\",\n  \"Change the global editor preferences.\": \"Pielāgojiet sava kodu labotāja iestatījumus, tādus kā fontu izmēru un krāsu shēmu.\",\n  \"My Account\": \"Mans konts\",\n  \"Update your account details such as name, email address and password.\": \"Atjaunojiet sava konta detaļas, piemēram, vārdu, epastu un paroli.\",\n  \"Backend Preferences\": \"Back-end iestatījumi\",\n  \"Manage your account preferences such as desired language.\": \"Pārvaldiet sava konta iestatījumus, piemēram, valodu.\",\n  \"security login\": \"drošība login\",\n  \"List Setup\": \"Saraksta iestatīšana\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Izmantojiet rūtiņas lai izvēlētos kolonnas kuras vēlaties redzēt sarakstā. Varat mainīt kolonnu pozīcijas pārnesot tās augšup vai lejup.\",\n  \"Records Per Page\": \"Ieraksti uz lapu\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Izvēlieties cik ierakstus rādīt vienā lapā. Ņemiet vēra, ka daudz ierakstu var bremzēt lapas ielādi.\",\n  \"Add Selected\": \"Pievienot izvēlētos\",\n  \"Please specify the modelClass property for :type\": \"Lūdzu, norādiet modelClass īpašību priekš :type\",\n  \"Please specify some columns to export.\": \"Lūdzu, norādiet kādas kolonnas ir jāeksportē.\",\n  \"Missing column identifier\": \"Trūkstošs kolonnas identifikators\",\n  \"Unknown column\": \"Nezināma kolonna\",\n  \"Please specify some columns to import.\": \"Lūdzu, norādiet kādas kolonnas ir jāimportē.\",\n  \"Please match some columns first.\": \"Lūdzu, vispirms saskanējiet kolonnas.\",\n  \"Please specify a match for the required field :label.\": \"Lūdzu, norādiet attiecīgu datubāzes lauku obligātam laukam :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Izvēlētā faila kodējums nav atpazīts. Lūdzu, izvēlieties Pielāgota formāta opciju ar pareizu kodējumu lai Jūsu fails tiktu ieimportēts.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Jums ir jāisteno kontroliera uzvedība ListController Jūsu kontrolierī un jāiestata \\\"useList: true\\\" opcija Importa un Eksporta konfigurācijā.\",\n  \"File export process completed!\": \"Faila eksporta process ir sekmīgi pabeigts!\",\n  \"The browser will now redirect to the file download.\": \"Tagad pārlūks automātiski novirzīs uz faila lejupielādi.\",\n  \"Ignore this column\": \"Ignorēt šo kolonnu\",\n  \"Drop column here...\": \"Nesiet datubāzes lauku šeit...\",\n  \"Please upload a valid CSV file.\": \"Lūdzu, augšupielādējiet derīgu CSV failu.\",\n  \"Created\": \"Izveidoti\",\n  \"Updated\": \"Atjaunināti\",\n  \"Skipped\": \"Izlaisti\",\n  \"Warnings\": \"Brīdinājumi\",\n  \"Errors\": \"Kļūdas\",\n  \"Skipped Rows\": \"Izlaistas rindas\",\n  \"Show Ignored Columns\": \"Parādīt ignorētās kolonnas\",\n  \"Auto Match Columns\": \"Automātiski saskanēt kolonnas\",\n  \"File not found\": \"Fails nav atrasts\",\n  \"There was no data supplied to export\": \"Dati eksportam netika sniegti\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP paplašinājums :name nav instalēts. Lūdzu instalējiet šo papildinājumu un aktivizējiet to.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Mape :name vai tās apakšmapes nav ierakstāmas ar PHP. Lūdzu iestatiet pareizas tiesības web serverim šajā mapē.\"\n}"
  },
  {
    "path": "modules/backend/lang/nb-no/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Ugyldig felttype brukt :type.',\n    'options_method_not_exists' => 'Modellklassen :model må definere en metode :method() som returnerer vilkår for formfeltet \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'En widget med klassenavnet \\':name\\' har ikke blitt registrert',\n    'not_bound' => 'En widget med klassenavnet \\':name\\' er ikke bundet til kontrolleren',\n  ],\n  'page' => [\n    'untitled' => 'Uten navn',\n    'access_denied' => [\n      'label' => 'Ingen tilgang',\n      'help' => 'Du har ikke nødvendig tilgang til å se denne siden.',\n      'cms_link' => 'Tilbake til backend',\n    ],\n    'no_database' => [\n      'label' => 'Database mangler',\n      'help' => 'En database kreves for å koble til backend. Sjekk at databasetilgang er konfigurert og migrert før du prøver igjen.',\n      'cms_link' => 'Tilbake til hovedsiden',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'En partial ved navn \\':name\\' ble ikke funnet.',\n  ],\n  'account' => [\n    'sign_out' => 'Logg ut',\n    'login_placeholder' => 'brukernavn',\n    'password_placeholder' => 'passord',\n    'enter_email' => 'Din e-postadresse',\n    'email_placeholder' => 'e-postadresse',\n    'apply' => 'Fortsett',\n    'cancel' => 'Avbryt',\n    'delete' => 'Slett',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Dashboard',\n    'widget_inspector_title' => 'Widget-konfigurasjon',\n    'widget_inspector_description' => 'Konfigurer widgeten',\n    'widget_columns_label' => 'Bredde :columns',\n    'widget_columns_description' => 'Bredden på widgeten. Tall mellom 1 og 10.',\n    'widget_columns_error' => 'Vennligst spesifiser bredden på weidgeten som et tall mellom 1 og 10.',\n    'columns' => '{1} kolonne|[2,Inf] kolonner',\n    'widget_new_row_label' => 'Tving ny rad',\n    'widget_new_row_description' => 'Plasserer widgeten i en ny rad.',\n    'widget_title_label' => 'Widget-tittel',\n    'widget_title_error' => 'Tittel er obligatorisk.',\n    'reset_layout_success' => 'Layout er tilbakestilt',\n    'make_default_success' => 'Nåværende layout er nå standard',\n    'status' => [\n      'widget_title_default' => 'System status',\n      'update_available' => '{0} oppdateringer tilgjengelig!|{1} oppdatering tilgjengelig!|[2,Inf] oppdateringer tilgjengelig!',\n      'updates_pending' => 'Ventende oppdateringer',\n      'updates_nil' => 'Programvaren er oppdatert',\n      'updates_link' => 'Oppdater',\n      'warnings_pending' => 'Noen snubletråder du må se på',\n      'warnings_nil' => 'Ingen advarsler å vise',\n      'warnings_link' => 'Vis',\n      'core_build' => 'System build',\n      'event_log' => 'Event logg',\n      'request_log' => 'Request logg',\n      'app_birthday' => 'Online siden',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Velkommen',\n      'welcome_back_name' => 'Velkommen til :app, :name.',\n      'welcome_to_name' => 'Velkommen til :app, :name.',\n      'first_sign_in' => 'Dette er første gangen du har logget inn.',\n      'last_sign_in' => 'Forrige innlogging var',\n      'view_access_logs' => 'Vis adgangslogg',\n      'nice_message' => 'Ha en fantastisk dag!!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Håndter administratorer',\n    'new' => 'Ny administrator',\n    'first_name' => 'Fornavn',\n    'last_name' => 'Etternavn',\n    'full_name' => 'Fullt navn',\n    'email' => 'E-postadresse',\n    'groups' => 'Grupper',\n    'groups_comment' => 'Spesifiser hvilke grupper personen tilhører.',\n    'avatar' => 'Avatar',\n    'password' => 'Passord',\n    'password_confirmation' => 'Bekreft passord',\n    'permissions' => 'Tilganger',\n    'account' => 'konto',\n    'superuser' => 'Superbruker',\n    'superuser_comment' => 'Kryss av denne boksen for å gi personen tilgang til alle områder.',\n    'send_invite' => 'Send invitasjon via e-post',\n    'send_invite_comment' => 'Kryss av denne boksen for å sende personen en invitasjon via e-post',\n    'delete_confirm' => 'Vil du virkelig slette denne administratoren?',\n    'return' => 'Tilbake til administratoroversikten',\n    'allow' => 'Tillat',\n    'inherit' => 'Arv',\n    'deny' => 'Nekt',\n    'activated' => 'Aktivert',\n    'last_login' => 'Forrige innlogging',\n    'created_at' => 'Opprettet',\n    'updated_at' => 'Oppdatert',\n    'group' => [\n      'name' => 'Gruppe',\n      'name_comment' => 'Navnet vises i gruppelisten under valget for å opprette og redigere administratorer.',\n      'name_field' => 'Navn',\n      'description_field' => 'Beskrivelse',\n      'is_new_user_default_field_label' => 'Standardgruppe',\n      'is_new_user_default_field_comment' => 'Legg nye administratorer til denne gruppen som standard',\n      'code_field' => 'Kode',\n      'code_comment' => 'Fyll inn en unik kode for å bruke API-en.',\n      'list_title' => 'Administrere grupper',\n      'new' => 'Ny gruppe',\n      'delete_confirm' => 'Vil du virkelig slette denne administratorgruppen?',\n      'return' => 'Tilbake til gruppeoversikten',\n      'users_count' => 'Antall brukere',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Det er ingen autentiserte brukere å laste eller lagre innstillinger for.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Liste',\n    'search_prompt' => 'Søk...',\n    'no_records' => 'Det er ingen treff i denne visningen.',\n    'missing_model' => 'Listeegenskapen brukt i :class mangler en modelldefinisjon.',\n    'missing_column' => 'Det er ingen kolonnedefinisjoner for :columns.',\n    'missing_columns' => 'Liste brukt i :class har ingen definerte kolonner.',\n    'missing_definition' => 'Listeegenskapen inneholder ingen kolonner for \\':field\\'.',\n    'missing_parent_definition' => 'Listeegenskapen mangler definisjon for \\':definition\\'.',\n    'behavior_not_ready' => 'Listeegenskapen har ikke blir initialisert, sjekk at du har kalt makeList() i kontrolleren.',\n    'invalid_column_datetime' => 'Kolonneverdien \\':column\\' er ikke et DateTime-objekt, mangler du en $date-referanse i modellen?',\n    'pagination' => 'Viser rader: :from-:to av :total',\n    'prev_page' => 'Forrige side',\n    'next_page' => 'Neste side',\n    'refresh' => 'Oppdater',\n    'updating' => 'Oppdaterer...',\n    'loading' => 'Laster...',\n    'check' => 'Velg',\n    'delete_selected' => 'Slett valgte',\n    'delete_selected_empty' => 'Det er ingen valgte rader å slette.',\n    'delete_selected_confirm' => 'Vil du slette valgte rader?',\n    'delete_selected_success' => 'Rader har blitt slettet.',\n    'column_switch_true' => 'Ja',\n    'column_switch_false' => 'Nei',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Klikk %s eller dra filen hit for å laste opp',\n  ],\n  'form' => [\n    'create_title' => 'Ny :name',\n    'update_title' => 'Endre :name',\n    'preview_title' => 'Forhåndsvis :name',\n    'reset_success' => 'Tilbakestilling fullført',\n    'missing_id' => 'Record ID for skjemaet har ikke blitt spesifisert.',\n    'missing_model' => 'Skjemaegenskapen brukt i :class mangler en modell.',\n    'missing_definition' => 'Skjemaegenskapen mangler et felt for \\':field\\'.',\n    'action_confirm' => 'Er du sikker?',\n    'create' => 'Opprett',\n    'create_and_close' => 'Opprett og lukk',\n    'creating' => 'Oppretter...',\n    'creating_name' => 'Oppretter :name...',\n    'save' => 'Lagre',\n    'save_and_close' => 'Lagre og lukk',\n    'saving' => 'Lagrer...',\n    'saving_name' => 'Lagrer :name...',\n    'delete' => 'Slett',\n    'deleting' => 'Sletter...',\n    'confirm_delete' => 'Slett oppføring?',\n    'confirm_delete_multiple' => 'Slett valgte oppføringer?',\n    'deleting_name' => 'Sletter :name...',\n    'reset_default' => 'Tilbakestill',\n    'resetting' => 'Tilbakestiller',\n    'resetting_name' => 'Tilbakestiller :name',\n    'undefined_tab' => 'Div.',\n    'field_off' => 'Av',\n    'field_on' => 'På',\n    'add' => 'Legg til',\n    'apply' => 'Fortsett',\n    'cancel' => 'Avbryt',\n    'close' => 'Lukk',\n    'confirm' => 'Bekreft',\n    'reload' => 'Last på nytt',\n    'complete' => 'Fullført',\n    'ok' => 'OK',\n    'or' => 'eller',\n    'confirm_tab_close' => 'Vil du virkelig lukke fanen? Endringer som ikke er lagret vil gå tapt.',\n    'behavior_not_ready' => 'Skjemaegenskap har ikke blitt initialisert, sjekk at du har kalt initForm() i kontrolleren.',\n    'preview_no_files_message' => 'Filer er ikke opplastet',\n    'preview_no_record_message' => 'Det er ingen valgte oppføringer.',\n    'select' => 'Velg',\n    'select_all' => 'Velg alle',\n    'select_none' => 'Velg ingen',\n    'insert_row' => 'Sett inn rad',\n    'insert_row_below' => 'Sett inn rad under',\n    'delete_row' => 'Slett rad',\n    'concurrency_file_changed_title' => 'Filen er endret',\n    'concurrency_file_changed_description' => 'Filen du endrer på har blitt endret på disken av en annen bruker. Du kan enten oppdatere filen og tape endret data, eller overskrive filen på disken.',\n    'return_to_list' => 'Tilbake til listen',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Finn oppføring',\n  ],\n  'relation' => [\n    'missing_config' => 'Relasjonen mangler en konfigurasjon for \\':config\\'.',\n    'missing_definition' => 'Relasjonen mangler en definisjon for \\':field\\'.',\n    'missing_model' => 'Relasjonen brukt i :class har ingen definert modell.',\n    'invalid_action_single' => 'Denne handlingen kan ikke brukes på en enkel relasjon.',\n    'invalid_action_multi' => 'Denne relasjonen kan ikke brukes på fler-relasjoner.',\n    'help' => 'Klikk på et element for å legge til',\n    'add' => 'Legg til',\n    'link_selected' => 'Link valgte',\n    'cancel' => 'Avbryt',\n    'close' => 'Lukk',\n    'create' => 'Opprett',\n    'update' => 'Oppdater',\n    'preview' => 'Forhåndsvis',\n    'remove_name' => 'Fjern :name',\n    'delete_name' => 'Slett :name',\n    'link' => 'Link',\n    'unlink_name' => 'Fjern link :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Sortere oppføringer',\n    'no_records' => 'Det er ingen tilgjengelige oppføringer å sortere.',\n  ],\n  'model' => [\n    'name' => 'Modell',\n    'not_found' => 'Modellen \\':class\\' med ID-en :id ble ikke funnet',\n    'missing_id' => 'Det er ingen ID spesifisert for å se opp modellen.',\n    'missing_relation' => 'Modellen \\':class\\' mangler en definisjon for \\':relation\\'.',\n    'missing_method' => 'Modellen \\':class\\' mangler metoden \\':method\\'.',\n    'invalid_class' => 'Modellen :model som brukes i :class er ugyldig, den må arve \\\\Model-klassen.',\n    'mass_assignment_failed' => 'Mass assignment feilet for modell-attributten \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Tips for systemkonfigurasjon',\n    'tips_description' => 'Det er problemer du må være oppmerksom på for å konfigurere systemet riktig.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Mine innstillinger',\n    'menu_description' => 'Innstillinger relatert til din administratorkonto',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accentfarge',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'alle',\n    'options_method_not_exists' => 'Modellen :model må definere en metode :method() som sender tilbake regler for  \\':filter\\' filteret.',\n    'date_all' => 'hele perioden',\n  ],\n  'import_export' => [\n    'upload_csv_file' => '1. Last opp en CSV-fil',\n    'import_file' => 'Importere fil',\n    'first_row_contains_titles' => 'Første raden inneholder kolonnetitler',\n    'first_row_contains_titles_desc' => 'La denne være valgt hvis den første raden i CSV-filen inneholder titler på kolonnene.',\n    'match_columns' => '2. Koble kolonner til felter i databasen',\n    'file_columns' => 'Filkolonner',\n    'database_fields' => 'Databasefelter',\n    'set_import_options' => '3. Valg for import',\n    'export_output_format' => '1. Eksport-format',\n    'file_format' => 'Filformat',\n    'standard_format' => 'Standard format',\n    'custom_format' => 'Tilpasset format',\n    'delimiter_char' => 'Deletegn',\n    'enclosure_char' => 'Innhegningstegn',\n    'escape_char' => 'Escape-tegn',\n    'select_columns' => '2. Velg kolonner å eksportere',\n    'columns' => 'Kolonner',\n    'set_export_options' => '3. Valg for eksport',\n    'import_progress' => 'Status for import',\n    'processing' => 'Behandler',\n    'import_error' => 'Feil under import',\n    'export_progress' => 'Status for eksport',\n    'export_error' => 'Feil under eksport',\n    'encoding_format' => 'Filenkoding',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Last opp og behandle media - bilder, video, lydfiler, dokumenter',\n  ],\n  'mediafinder' => [\n    'default_prompt' => 'Klikk på %s knappen for å hente media',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Last opp',\n    'move' => 'Flytt',\n    'delete' => 'Slett',\n    'add_folder' => 'Ny mappe',\n    'search' => 'Søk',\n    'display' => 'Vis',\n    'filter_everything' => 'Alle filer',\n    'filter_images' => 'Bilder',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Lyd',\n    'filter_documents' => 'Dokumenter',\n    'library' => 'Bibliotek',\n    'size' => 'Størrelse',\n    'title' => 'Tittel',\n    'last_modified' => 'Sist endret',\n    'public_url' => 'URL',\n    'click_here' => 'Klikk her',\n    'thumbnail_error' => 'Kunne ikke lage thumbnail.',\n    'return_to_parent' => 'Gå til forrige mappe',\n    'return_to_parent_label' => 'Gå opp ..',\n    'nothing_selected' => 'Ingenting er valgt.',\n    'multiple_selected' => 'Flere filer er valgt.',\n    'uploading_file_num' => 'Laster opp :number fil(er)...',\n    'uploading_complete' => 'Opplasting fullført',\n    'uploading_error' => 'Opplasting feilet',\n    'type_blocked' => 'Filtypen er blokkert av sikkerhetsgrunner.',\n    'order_by' => 'Sorter etter',\n    'folder' => 'Mappe',\n    'no_files_found' => 'Ingen filer ble funnet.',\n    'delete_empty' => 'Ingen filer er valgt.',\n    'delete_confirm' => 'Vil du virkelig slette valgte fil(er)?',\n    'error_renaming_file' => 'Kunne ikke gi filen nytt navn.',\n    'new_folder_title' => 'Ny mappe',\n    'folder_name' => 'Mappenavn',\n    'error_creating_folder' => 'Kunne ikke opprette ny mappe',\n    'folder_or_file_exist' => 'En fil eller mappe med det navnet eksisterer allerede.',\n    'move_empty' => 'Vennligst velg filer å flytte.',\n    'move_popup_title' => 'Flytt filer eller mapper',\n    'move_destination' => 'Målmappe',\n    'please_select_move_dest' => 'Vennligst velg en målmappe.',\n    'move_dest_src_match' => 'Please select another destination folder.',\n    'empty_library' => 'Mediabiblioteket er tomt. Last opp filer eller opprett mapper for å komme i gang.',\n    'insert' => 'Insert',\n    'crop_and_insert' => 'Crop & Insert',\n    'select_single_image' => 'Vennligst velg ett enkelt bilde.',\n    'selection_not_image' => 'Valgte fil er ikke et bilde.',\n    'restore' => 'Angre endringer',\n    'resize' => 'Endre størrelse...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Fast forhold',\n    'selection_mode_fixed_size' => 'Fast størrelse',\n    'height' => 'Høyde',\n    'width' => 'Bredde',\n    'selection_mode' => 'Valgmodus',\n    'resize_image' => 'Endre bildestørrelse',\n    'image_size' => 'Bildestørrelse:',\n    'selected_size' => 'Valgt:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/nb-no.json",
    "content": "{\n  \"1. Export output format\": \"1. Eksport-format\",\n  \"File Format\": \"Filformat\",\n  \"Delimiter Character\": \"Deletegn\",\n  \"Enclosure Character\": \"Innhegningstegn\",\n  \"Escape Character\": \"Escape-tegn\",\n  \"2. Select columns to export\": \"2. Velg kolonner å eksportere\",\n  \"Columns\": \"Kolonner\",\n  \"3. Set export options\": \"3. Valg for eksport\",\n  \"CSV Custom\": \"Tilpasset format\",\n  \"1. Upload an Import File\": \"1. Last opp en CSV-fil\",\n  \"Import File\": \"Importere fil\",\n  \"File Encoding\": \"Filenkoding\",\n  \"First row contains column titles\": \"Første raden inneholder kolonnetitler\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"La denne være valgt hvis den første raden i CSV-filen inneholder titler på kolonnene.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Koble kolonner til felter i databasen\",\n  \"File columns\": \"Filkolonner\",\n  \"Database fields\": \"Databasefelter\",\n  \"3. Set Import Options\": \"3. Valg for import\",\n  \"Export progress\": \"Status for eksport\",\n  \"Processing\": \"Behandler\",\n  \"Import progress\": \"Status for import\",\n  \"Import error\": \"Feil under import\",\n  \"Export error\": \"Feil under eksport\",\n  \"Column preview\": \"Forhåndsvid kolonne\",\n  \"Column\": \"Kolonne\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Denne loggen viser en liste over vellykkede administratorinnlogginger. Innloggingene blir lagret i 60 dager.\",\n  \"Access Log\": \"Aksesslogg\",\n  \"View a list of successful back-end user sign ins.\": \"Se en liste over vellykkede innlogginger på backend.\",\n  \"Date & Time\": \"Tid\",\n  \"IP address\": \"IP-adresse\",\n  \"Login\": \"Logg inn\",\n  \"First name\": \"Fornavn\",\n  \"Last name\": \"Etternavn\",\n  \"Email\": \"E-postadresse\",\n  \"Administration Area\": \"Administrasjonsområde\",\n  \"Password Reset\": \"Gjenopprett passord\",\n  \"Please enter a new password.\": \"Skriv inn nytt passord\",\n  \"Please enter your login to restore the password.\": \"Ditt brukernavn\",\n  \"A user could not be found with a login value of ':login'\": \"Brukernavnet ':login' eksisterer ikke.\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"En e-post har blitt sendt til din e-postadresse med informasjon om gjenoppretting av passord.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Ugyldig data. Vennligst prøv igjen!\",\n  \"Unable to reset your password!\": \"Kunne ikke gjenopprette passord!\",\n  \"Password has been reset. You may now sign in.\": \"Ditt passord har blitt gjenopprettet. Du kan nå logge inn.\",\n  \"Restore\": \"Gjenopprett\",\n  \"Reset\": \"Nullstill\",\n  \"Forgot password?\": \"Glemt passordet ditt?\",\n  \"Manage Widgets\": \"Administrer widgets\",\n  \"Add Widget\": \"Legg til widget\",\n  \"Set the current layout as the default?\": \"Sett nåværende layout som standard?\",\n  \"Make Default\": \"Sett som standard\",\n  \"Reset layout back to default?\": \"Tilbakestille layout til originalen?\",\n  \"Reset Layout\": \"Tilbakestill layout\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"velg\",\n  \"Width\": \"Bredde\",\n  \"full width\": \"full bredde\",\n  \"Primary Color\": \"Primærfarge\",\n  \"Secondary Color\": \"Sekundærfarge\",\n  \"This name is shown in the title area of the back-end.\": \"Dette navnet vises i tittelområdet backend.\",\n  \"App Name\": \"App-navn\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Denne teksten vises på innloggingssiden backend.\",\n  \"App Tagline\": \"App Tagline\",\n  \"Brand\": \"Merkevare\",\n  \"Upload a custom logo to use in the back-end.\": \"Last opp logo for å bruke backend.\",\n  \"Logo\": \"Logo\",\n  \"Colors\": \"Farger\",\n  \"Menu Style\": \"Menystyil\",\n  \"Navigation\": \"Navigasjon\",\n  \"Custom Stylesheet\": \"Tilpasset stilsett (CSS)\",\n  \"Styles\": \"Stilsett\",\n  \"Inline\": \"Inline\",\n  \"Tiles\": \"Fliser\",\n  \"Collapsed\": \"Kollapset\",\n  \"Region\": \"Region\",\n  \"Locale\": \"Språk\",\n  \"Select your desired locale for language use.\": \"Velg ønsket språk.\",\n  \"Timezone\": \"Tidssone\",\n  \"Adjust displayed dates to this timezone.\": \"Formatér viste datoer til gjeldende tidssone.\",\n  \"Code Editor\": \"Kodeeditor\",\n  \"Color Scheme\": \"Fargetema\",\n  \"Word Wrap\": \"Orddeling\",\n  \"Off\": \"Av\",\n  \"40 Characters\": \"40 tegn\",\n  \"80 Characters\": \"80 tegn\",\n  \"Fluid\": \"Flytende\",\n  \"Font Size\": \"Tekststørrelse\",\n  \"Tab Size\": \"Tab-størrelse\",\n  \"Code Folding\": \"Code folding\",\n  \"Mark begin\": \"Merk start av code folding\",\n  \"Mark begin and end\": \"Merk start og slutt av code folding\",\n  \"Autocompletion\": \"Automatisk fullføring\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Enkel autofullføring (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Live autofullføring\",\n  \"Show gutter\": \"Vis linjenummer\",\n  \"Highlight active line\": \"Fremhev aktiv linje\",\n  \"Automatically close tags\": \"Lukk tager automatisk\",\n  \"Indent using tabs\": \"Inntrykk med tabs\",\n  \"Show indent guides\": \"Vis innrykk\",\n  \"Show invisible characters\": \"Vis usynlige tegn\",\n  \"Show print margin\": \"Vis utskriftsmargin\",\n  \"Custom styles to include in the HTML editor.\": \"Tilpassede CSS-stilregler å inkludere i HTML-editoren.\",\n  \"Markup Styles\": \"Markup-stiler\",\n  \"Markup Classes\": \"Markup-klasser\",\n  \"Label\": \"Label\",\n  \"Paragraph\": \"Avsnitt\",\n  \"Class Name\": \"Navn på klasse\",\n  \"Link\": \"Link\",\n  \"Table\": \"Tabell\",\n  \"Table Cell\": \"Celle\",\n  \"Image\": \"Bilde\",\n  \"Allowed Tags\": \"Tillatte tagger\",\n  \"The list of allowed tags.\": \"Liste over tillatte tagger.\",\n  \"Markup Tags\": \"Markup-tagger\",\n  \"Allowed Empty Tags\": \"Tillatte tomme tagger\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Liste av tagger som ikke fjernes til tross for at de ikke har innhold.\",\n  \"Do Not Wrap Tags\": \"Ikke pakk inn tagger\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Liste av tagger som ikke kan puttes inne i block-tagger.\",\n  \"Remove Tags\": \"Fjern tagger\",\n  \"The list of tags that are removed together with their content.\": \"Liste over tagger som fjernes med innholdet.\",\n  \"Enable code snippets (Tab)\": \"Aktivér kodesnippets (Tab)\",\n  \"Title\": \"Tittel\",\n  \"Description\": \"Beskrivelse\",\n  \"Attachment\": \"Vedlegg\",\n  \"Attachment URL\": \"URL til vedlegg\",\n  \"Add a title and description for this attachment.\": \"Legg til tittel og beskrivelse for dette vedlegget.\",\n  \"Are you sure?\": \"Er du sikker?\",\n  \"Upload Error\": \"Feil ved opplasting\",\n  \"Remove File\": \"Fjern filen\",\n  \"Create :name\": \"Opprett :name\",\n  \"Update :name\": \"Oppdater :name\",\n  \"Add :name\": \"Legg til :name\",\n  \"Link :name\": \"Link :name\",\n  \"Delete\": \"Slett\",\n  \"Remove\": \"Fjern\",\n  \"Unlink\": \"Fjern link\",\n  \"Preview :name\": \"Forhåndsvis :name\",\n  \"Link a New :name\": \"Link en ny :name\",\n  \"Add a New :name\": \"Legg til ny :name\",\n  \"Related :name Data\": \"Relatert :name data\",\n  \":name Created\": \":name har blitt opprettet\",\n  \":name Updated\": \":name har blitt endret\",\n  \":name Deleted\": \":name har blitt slettet\",\n  \"Form record with an ID of :id could not be found.\": \"Record ID :id ble ikke funnet.\",\n  \"Preview the Website\": \"Forhåndsvis nettsiden\",\n  \"Administrators\": \"Administratorer\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Administrer backend-administratorer, grupper og tilganger.\",\n  \"Team Groups\": \"Grupper\",\n  \"Branding & Appearance\": \"Tilpass backend\",\n  \"Customize the administration area such as name, colors and logo.\": \"Tilpass administratorområdet, for eksempel navn, farger og logo.\",\n  \"Editor Settings\": \"Teksteditor-innstillinger\",\n  \"Change the global editor preferences.\": \"Endre teksteditor-innstillingene dine, for eksemplem tekststørrelse og fargevalg.\",\n  \"My Account\": \"Min konto\",\n  \"Update your account details such as name, email address and password.\": \"Oppdater dine kontodetaljer, som navn, e-postadresse og passord.\",\n  \"Backend Preferences\": \"Backend-innstillinger\",\n  \"Manage your account preferences such as desired language.\": \"Administrer kontoinnstillinger som for eksempel språk.\",\n  \"security login\": \"sikkerhetsinnlogging\",\n  \"List Setup\": \"Listeinnstillinger\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Kryss av sjekkboksene for å velge hvilke kolonner du vil ha i listen. Du kan sortere kolonnene ved å dra sjekkboksene opp eller ned.\",\n  \"Records Per Page\": \"Rader per side\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Velg antall rader som skal vises på hver side. Vær oppmerksom på at et høyt antall kan redusere ytelsen på siden.\",\n  \"Add Selected\": \"Legg til valgte\",\n  \"Please specify the modelClass property for :type\": \"Vennligst spesifisér modelClass for :type\",\n  \"Please specify some columns to export.\": \"Vennligst velg kolonner å eksportere.\",\n  \"Missing column identifier\": \"Mangler kolonne\",\n  \"Unknown column\": \"Ukjent kolonne\",\n  \"Please specify some columns to import.\": \"Vennligst velg kolonner å importere.\",\n  \"Please match some columns first.\": \"Vennligst match kolonner først.\",\n  \"Please specify a match for the required field :label.\": \"Vennligst finn match for påkrevet felt :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Formatet i filen er ukjent. Vennligst velg tilpasset format med riktig enkodingvalg for å importere filen.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Du må implemnetere controlleren med ListController-egenskapen \\\"useList\\\" aktivert for eksport.\",\n  \"File export process completed!\": \"Eksport fullført!\",\n  \"The browser will now redirect to the file download.\": \"Nettleseren vil nå gå til nedlasting av fil.\",\n  \"Ignore this column\": \"Ignorer denne kolonnen\",\n  \"Drop column here...\": \"Dropp kolonne her...\",\n  \"Please upload a valid CSV file.\": \"Vennligst last opp en gyldig CSV-fil.\",\n  \"Created\": \"Opprettet\",\n  \"Updated\": \"Oppdatert\",\n  \"Skipped\": \"Ignorert\",\n  \"Warnings\": \"Advarsler\",\n  \"Errors\": \"Feil\",\n  \"Skipped Rows\": \"Ignorerte rader\",\n  \"Show Ignored Columns\": \"Vis ignorerte kolonner\",\n  \"Auto Match Columns\": \"Auto-match kolonner\",\n  \"File not found\": \"Filen ikke funnet\",\n  \"There was no data supplied to export\": \"Ingen data å eksportere\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP-extensionen :name er ikke installert..\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Mappen :name eller dens undermapper kan ikke skrives på av PHP. Vennligst sjekk skrivetilganger på serveren.\"\n}"
  },
  {
    "path": "modules/backend/lang/nl/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Ongeldig type veld: :type.',\n    'options_method_invalid_model' => 'Het attribuut \\':field\\' levert geen geldig model op. Probeer de opties methode expliciet te specifieren voor modelklasse :model.',\n    'options_method_not_exists' => 'De modelklasse :model moet de methode :method() definiëren met daarin opties voor het veld \":field\".',\n    'colors_method_not_exists' => 'De modelklasse :model moet de methode :method() definiëren met daarin html HEX kleurcodes voor het veld \":field\".',\n  ],\n  'widget' => [\n    'not_registered' => 'Een widget met klassenaam \\':name\\' is niet geregistreerd',\n    'not_bound' => 'Een widget met klassenaam \\':name\\' is niet gekoppeld aan de controller',\n  ],\n  'page' => [\n    'untitled' => 'Naamloos',\n    'not_found' => [\n      'label' => 'Sorry, we kunnen deze pagina niet meer vinden.',\n      'help' => 'We hebben ons best gedaan, maar het lijkt erop dat deze pagina niet (meer) bestaat of misschien verhuisd is.',\n      'back_link' => 'Terug naar de homepagina.',\n    ],\n    'access_denied' => [\n      'label' => 'Toegang geweigerd',\n      'help' => 'Je hebt niet de benodigde rechten om deze pagina te bekijken.',\n      'cms_link' => 'Terug naar CMS',\n    ],\n    'no_database' => [\n      'label' => 'Database niet gevonden',\n      'help' => 'Een database is nodig om toegang te krijgen tot de beheeromgeving. Controleer of de database juist is geconfigureerd en probeer het opnieuw.',\n      'cms_link' => 'Terug naar homepagina',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Het sjabloon (partial) \\':name\\' is niet gevonden.',\n    'invalid_name' => 'Ongeldige sjabloon (partial) naam: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Ongeldige AJAX verzoek met naam: :name.',\n    'not_found' => 'Het AJAX verzoek \\':name\\' kon niet worden gevonden.',\n  ],\n  'account' => [\n    'impersonate' => 'Inloggen als',\n    'impersonate_confirm' => 'Je gaat inloggen als deze gebruiker. Weet je het zeker? Keer terug door uit te loggen.',\n    'impersonate_success' => 'Je bent nu ingelogd als deze gebruiker',\n    'impersonate_working' => 'Inloggen als...',\n    'impersonating' => 'Inloggen als :full_name',\n    'stop_impersonating' => 'Terugkeren',\n    'signed_in_as' => 'Ingelogd als :full_name',\n    'sign_out' => 'Uitloggen',\n    'login_prompt' => 'Welkom terug! Log in op je account om door te gaan.',\n    'login_placeholder' => 'Gebruikersnaam',\n    'password_placeholder' => 'Wachtwoord',\n    'enter_email' => 'Vul e-mailadres in',\n    'email_placeholder' => 'E-mailadres',\n    'apply' => 'Toepassen',\n    'cancel' => 'Annuleren',\n    'delete' => 'Verwijderen',\n    'ok' => 'OK',\n  ],\n  'user' => [\n    'name' => 'Beheerder',\n    'list_title' => 'Beheer beheerders',\n    'new' => 'Nieuwe beheerder',\n    'first_name' => 'Voornaam',\n    'last_name' => 'Achternaam',\n    'full_name' => 'Volledige naam',\n    'email' => 'E-mailadres',\n    'role_field' => 'Rol',\n    'role_comment' => 'Rollen definiëren gebruikerspermissies die overschreven kunnen worden op gebruikersniveau (zie tabblad Rechten).',\n    'groups' => 'Groepen',\n    'groups_comment' => 'Selecteer de groepen waar deze gebruiker bij hoort.',\n    'avatar' => 'Avatar',\n    'password' => 'Wachtwoord',\n    'password_confirmation' => 'Bevestig wachtwoord',\n    'permissions' => 'Rechten',\n    'account' => 'Account',\n    'superuser' => 'Supergebruiker',\n    'superuser_comment' => 'Vink deze optie aan om de gebruiker volledige rechten tot het systeem te geven.',\n    'send_invite' => 'Stuur uitnodiging per e-mail',\n    'send_invite_comment' => 'Vink deze optie aan om de gebruiker een uitnodiging per e-mail te sturen',\n    'delete_confirm' => 'Weet je zeker dat je deze beheerder wilt verwijderen?',\n    'return' => 'Terug naar het beheerdersoverzicht',\n    'allow' => 'Toestaat',\n    'inherit' => 'Overerven',\n    'deny' => 'Weigeren',\n    'activated' => 'Geactiveerd',\n    'last_login' => 'Laatste login',\n    'created_at' => 'Aangemaakt op',\n    'updated_at' => 'Gewijzigd op',\n    'deleted_at' => 'Verwijderd op',\n    'show_deleted' => 'Toon verwijderd',\n    'group' => [\n      'name' => 'Groep',\n      'name_field' => 'Naam',\n      'name_comment' => 'De naam die wordt weergegeven in de groepenlijst bij het aanmaken of bewerken van een beheerder.',\n      'description_field' => 'Omschrijving',\n      'is_new_user_default_field_label' => 'Standaard groep',\n      'is_new_user_default_field_comment' => 'Voeg nieuwe beheerders automatisch toe aan deze groep.',\n      'code_field' => 'Code',\n      'code_comment' => 'Voer een unieke code in als je deze met de API wilt gebruiken.',\n      'list_title' => 'Beheer groepen',\n      'new' => 'Nieuwe beheerdersgroep',\n      'delete_confirm' => 'Weet je zeker dat je deze beheerdersgroep wilt verwijderen?',\n      'return' => 'Terug naar het groepenoverzicht',\n      'users_count' => 'Gebruikers',\n    ],\n    'role' => [\n      'name' => 'Rol',\n      'name_field' => 'Naam',\n      'name_comment' => 'De naam wordt weergegeven in de rollenlijst in het Beheerders formulier.',\n      'description_field' => 'Omschrijving',\n      'code_field' => 'Code',\n      'code_comment' => 'Voer een unieke code in als je deze met de API wilt gebruiken.',\n      'list_title' => 'Beheer rollen',\n      'new' => 'Nieuwe rol',\n      'delete_confirm' => 'Verwijder deze beheerdersrol?',\n      'return' => 'Terug naar het rollenoverzicht',\n      'users_count' => 'Gebruikers',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Er is geen geauthenticeerde gebruiker om gegevens voor te laden of op te slaan.',\n    ],\n    'trashed_hint_title' => 'Dit account is verwijderd',\n    'trashed_hint_desc' => 'Dit account is verwijderd en kan dus niet meer op ingelogd worden. Klik op het icoontje rechts onderin als je het account te herstellen.',\n  ],\n  'list' => [\n    'default_title' => 'Lijst',\n    'search_prompt' => 'Zoeken...',\n    'no_records' => 'Er zijn geen resultaten gevonden.',\n    'missing_model' => 'Geen model opgegeven voor het gedrag (behavior) van de lijst gebruikt in :class.',\n    'missing_column' => 'Er zijn geen kolomdefinities voor :columns.',\n    'missing_columns' => 'De gebruikte lijst in :class heeft geen kolommen gedefineerd.',\n    'missing_definition' => 'De behavior van de lijst bevat geen kolom voor \\':field\\'.',\n    'missing_parent_definition' => 'De lijst behavior bevat geen definitie voor \\':definition\\'.',\n    'behavior_not_ready' => 'Behavior van de lijst is niet geladen. Controleer of makeLists() in de controller is aangeroepen.',\n    'invalid_column_datetime' => 'De waarde van kolom \\':column\\' is geen DateTime object, mist er een $dates referentie in het Model?',\n    'pagination' => 'Getoonde resultaten: :from-:to van :total',\n    'first_page' => 'Eerste pagina',\n    'last_page' => 'Laatste pagina',\n    'prev_page' => 'Vorige pagina',\n    'next_page' => 'Volgende pagina',\n    'refresh' => 'Vernieuwen',\n    'updating' => 'Bijwerken...',\n    'loading' => 'Laden...',\n    'check' => 'Ingeschakeld',\n    'create_button' => 'Nieuwe :name',\n    'delete_selected' => 'Verwijder geselecteerde',\n    'delete_selected_empty' => 'Geen geselecteerde records om te verwijderen.',\n    'delete_selected_confirm' => 'Verwijder geselecteerde records?',\n    'delete_selected_success' => 'De geselecteerde records zijn succesvol verwijderd.',\n    'column_switch_true' => 'Ja',\n    'column_switch_false' => 'Nee',\n  ],\n  'object_list' => [\n    'prop_cant_be_empty' => 'Eigenschap :property mag niet leeg zijn',\n    'key_value_exists' => 'Waarde is reeds gedefinieerd: :property_value',\n  ],\n  'fileupload' => [],\n  'form' => [\n    'create_title' => 'Nieuwe :name',\n    'update_title' => 'Bewerk :name',\n    'preview_title' => 'Bekijk :name',\n    'restore_success' => ':name is succesvol hersteld',\n    'reset_success' => 'Resetten voltooid',\n    'missing_id' => 'Record ID van het formulier is niet opgegeven.',\n    'missing_tab' => 'Geldige tab definitie ontbreekt.',\n    'missing_model' => 'Geen model opgegeven voor het gedrag (behavior) van het formulier gebruikt in :class.',\n    'missing_definition' => 'Het gedrag (behavior) van het formulier bevat geen kolom voor \\':field\\'.',\n    'action_confirm' => 'Weet je het zeker?',\n    'create' => 'Maken',\n    'create_and_close' => 'Maken en sluiten',\n    'creating' => 'Maken...',\n    'creating_name' => ':name maken...',\n    'save' => 'Opslaan',\n    'save_and_close' => 'Opslaan en sluiten',\n    'saving' => 'Opslaan...',\n    'saving_name' => ':name opslaan...',\n    'delete' => 'Verwijderen',\n    'deleting' => 'Verwijderen...',\n    'confirm_delete' => 'Weet je zeker dat je dit record wilt verwijderen?',\n    'confirm_delete_multiple' => 'Weet je zeker dat je de geselecteerde records wilt verwijderen?',\n    'deleting_name' => ':name verwijderen...',\n    'restore' => 'Herstellen',\n    'restoring' => 'Herstellen...',\n    'confirm_restore' => 'Weet je zeker dat je dit record wil herstellen?',\n    'reset_default' => 'Terug naar standaard instellingen',\n    'resetting' => 'Bezig met terugzetten',\n    'resetting_name' => ':name terugzetten',\n    'undefined_tab' => 'Overig',\n    'field_off' => 'Uit',\n    'field_on' => 'Aan',\n    'add' => 'Toevoegen',\n    'apply' => 'Toepassen',\n    'insert' => 'Invoegen',\n    'cancel' => 'Annuleren',\n    'close' => 'Sluiten',\n    'confirm' => 'Bevestigen',\n    'reload' => 'Herladen',\n    'complete' => 'Voltooid',\n    'ok' => 'OK',\n    'or' => 'of',\n    'confirm_tab_close' => 'Weet je zeker dat je dit tabblad wilt sluiten? Niet opgeslagen wijzigingen gaan verloren.',\n    'behavior_not_ready' => 'Gedrag (behavior) van het formulier is niet geladen. Controleer of initForm() in de controller is aangeroepen.',\n    'preview_no_files_message' => 'Bestanden zijn niet geüpload.',\n    'preview_no_media_message' => 'Er zijn geen media geselecteerd.',\n    'preview_no_record_message' => 'Er zijn geen records geselecteerd.',\n    'select' => 'Selecteer',\n    'select_all' => 'selecteer alles',\n    'select_none' => 'selecteer niets',\n    'insert_row' => 'Rij invoegen',\n    'insert_row_below' => 'Rij onder invoegen',\n    'delete_row' => 'Rij verwijderen',\n    'concurrency_file_changed_title' => 'Bestand is gewijzigd',\n    'concurrency_file_changed_description' => 'Heb bestand wat je aan het bewerken bent is gewijzigd door een andere gebruiker. Je kunt het bestand opnieuw inladen (en wijzigingen verliezen) of het bestand te overschrijven.',\n    'return_to_list' => 'Terug naar lijst',\n    'no_options_found' => 'Geen opties gevonden',\n    'error' => 'Fout',\n    'toggle_full_screen' => 'Volledige schermweergave',\n  ],\n  'treeview' => [\n    'expand' => 'Uitklappen',\n    'collapse' => 'Inklappen',\n    'reorder' => 'Rangschikken',\n    'clear_search' => 'Wis zoekwaarde',\n    'search' => 'Zoeken',\n    'command_or_document' => 'Commando of Document...',\n    'quick_access' => 'Snelle toegang',\n    'open' => 'Open',\n    'commands' => 'Commando\\'s',\n  ],\n  'tabs' => [\n    'close' => 'Sluit tabblad',\n    'close_all' => 'Alles sluiten',\n    'close_others' => 'Sluit alle andere',\n    'close_saved' => 'Sluit alle opgeslagen',\n    'full_screen' => 'Volledige schermweergave',\n  ],\n  'modal' => [\n    'close' => 'Sluiten',\n  ],\n  'dropdownmenu' => [\n    'go_back' => 'Ga terug',\n    'close_menu' => 'Sluit menu',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Zoek record',\n    'invalid_model_class' => 'Het opgegeven model klasse \":modelClass\" voor de recordfinder is ongeldig',\n    'cancel' => 'Annuleren',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Het gedrag (behavior) van deze relatie bevat geen instellingen voor \\':config\\'.',\n    'missing_definition' => 'Het gedrag (behavior) van de relatie bevat geen kolom voor \\':field\\'.',\n    'missing_model' => 'Geen model opgegeven voor het gedrag (behavior) van relatie gebruikt in :class.',\n    'invalid_action_single' => 'Deze actie kan niet worden uitgevoerd op een enkele (singular) relatie.',\n    'invalid_action_multi' => 'Deze actie kan niet worden uitgevoerd op meerdere (multiple) relatie.',\n    'help' => 'Klik op een item om toe te voegen',\n    'add' => 'Toevoegen',\n    'link_selected' => 'Koppel geselecteerde',\n    'cancel' => 'Annuleer',\n    'close' => 'Sluiten',\n    'create' => 'Maken',\n    'update' => 'Wijzigen',\n    'preview' => 'Voorbeeldweergave',\n    'remove_name' => 'Verwijder :name',\n    'delete_name' => 'Wis :name',\n    'link' => 'Koppel',\n    'unlink_name' => 'Ontkoppel :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Rangschik records',\n    'no_records' => 'Er zijn geen records beschikbaar om te rangschikken.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' met ID :id is niet gevonden',\n    'missing_id' => 'Record ID van het model is niet opgegeven.',\n    'missing_relation' => 'Model \\':class\\' bevat geen definitie voor \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' bevat geen \\':method\\' methode.',\n    'invalid_class' => 'Model :model gebruikt in :class is ongeldig. Het moet van de \\\\Model klasse erven (inherit).',\n    'mass_assignment_failed' => 'Massa toewijzing voor Model attribute \\':attribute\\' mislukt.',\n  ],\n  'warnings' => [\n    'tips' => 'Systeem configuratie tips',\n    'tips_description' => 'Er zijn aandachtspunten die actie vereisen.',\n  ],\n  'editor' => [\n    'toolbar_buttons_presets' => [\n      'default' => 'Standaard',\n      'minimal' => 'Minimaal',\n      'full' => 'Volledig',\n    ],\n    'paragraph_formats_comment' => 'De opties die in de \"Paragraaf formaat\" lijst zullen verschijnen.',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Mijn instellingen',\n    'menu_description' => 'Instellingen gerelateerd aan jouw beheeraccount',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accentkleur',\n  ],\n  'backend_preferences' => [],\n  'filter' => [\n    'all' => 'alle',\n    'options_method_not_exists' => 'De model class :model moet de methode :method() gedefinieerd hebben die de opties voor de filter \\':filter\\' teruggeeft.',\n    'options_static_method_invalid_value' => 'De statische methode \\':method()\\' in :class geeft geen geldige optie-array terug.',\n    'date_all' => 'alle periodes',\n    'number_all' => 'alle nummers',\n  ],\n  'import_export' => [\n    'row' => 'Rij :row',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1250' => 'Windows-1250 (CP1250)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Beheer media (afbeeldingen, videos, geluiden, documenten)',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'no_image' => 'De afbeelding kan niet gevonden worden',\n    'not_an_image' => 'Het geselecteerde bestand is geen afbeelding',\n    'click_to_select_file' => 'Klik om een bestand te selecteren',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Uploaden',\n    'move' => 'Verplaatsen',\n    'delete' => 'Verwijderen',\n    'add_folder' => 'Map toevoegen',\n    'search' => 'Zoeken',\n    'display' => 'Weergeven',\n    'filter_everything' => 'Alles',\n    'filter_images' => 'Afbeeldingen',\n    'filter_video' => 'Video\\'s',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Documenten',\n    'library' => 'Bibliotheek',\n    'size' => 'Grootte',\n    'title' => 'Titel',\n    'last_modified' => 'Laatst gewijzigd',\n    'public_url' => 'URL',\n    'click_here' => 'Klik hier',\n    'thumbnail_error' => 'Fout opgetreden bij genereren miniatuurweergave.',\n    'return_to_parent' => 'Terug naar bovenliggende map',\n    'return_to_parent_label' => 'Naar bovenliggende ...',\n    'nothing_selected' => 'Er is niets geselecteerd.',\n    'multiple_selected' => 'Meerdere items geselecteerd.',\n    'uploading_file_num' => 'Uploaden van :number bestanden...',\n    'uploading_complete' => 'Uploaden voltooid',\n    'uploading_error' => 'Upload mislukt',\n    'type_blocked' => 'Het bestandstype is i.v.m. veiligheidsredenen geblokkeerd.',\n    'order_by' => 'Sorteer op',\n    'direction' => 'Sorteervolgorde',\n    'direction_asc' => 'Oplopend',\n    'direction_desc' => 'Aflopend',\n    'folder' => 'Map',\n    'no_files_found' => 'Er zijn geen bestanden gevonden.',\n    'delete_empty' => 'Selecteer items om te verwijderen.',\n    'delete_confirm' => 'Weet je zeker dat je de geselecteerde items wilt verwijderen?',\n    'error_renaming_file' => 'Fout bij wijzigen naam.',\n    'new_folder_title' => 'Nieuwe map',\n    'folder_name' => 'Mapnaam',\n    'error_creating_folder' => 'Fout bij maken van map',\n    'folder_or_file_exist' => 'Er bestaat reeds een map of bestand met deze naam.',\n    'move_empty' => 'Selecteer de items om te verplaatsen.',\n    'move_popup_title' => 'Verplaats bestanden of mappen',\n    'move_destination' => 'Doelmap',\n    'please_select_move_dest' => 'Selecteer een doelmap.',\n    'move_dest_src_match' => 'Selecteer een andere doelmap.',\n    'empty_library' => 'De media bibliotheek is leeg. Upload bestanden of maak mappen aan om te beginnen.',\n    'insert' => 'Invoegen',\n    'crop_and_insert' => 'Uitsnijden & Invoegen',\n    'select_single_image' => 'Selecteer één afbeelding.',\n    'selection_not_image' => 'Het geselecteerde item is geen afbeelding.',\n    'restore' => 'Alle wijzigingen ongedaan maken',\n    'resize' => 'Wijzig grootte...',\n    'selection_mode_normal' => 'Normaal',\n    'selection_mode_fixed_ratio' => 'Vaste ratio',\n    'selection_mode_fixed_size' => 'Vaste grootte',\n    'height' => 'Hoogte',\n    'width' => 'Breedte',\n    'selection_mode' => 'Selectie modus',\n    'resize_image' => 'Wijzig grootte van afbeelding',\n    'image_size' => 'Grootte afbeelding:',\n    'selected_size' => 'Geselecteerd:',\n  ],\n  'table' => [\n    'add_item' => 'Item toevoegen',\n  ],\n  'dictionary' => [\n    'key_required' => 'Het \\'Key\\' veld is verplicht',\n    'value_required' => 'Het \\'Value\\' veld is verplicht',\n  ],\n  'uploader' => [\n    'uploading' => 'Bestand aan het uploaden',\n    'complete' => 'Upload voltooid',\n  ],\n  'richeditor' => [\n    'upload_from_computer' => 'Uploaden vanaf computer',\n    'embedding_code' => 'Code invoegen',\n    'url_required' => 'De URL is vereist',\n    'url_validation' => 'De URL moet beginnen met http:// of https://',\n    'add_image' => 'Afbeelding invoegen',\n    'add_video' => 'Video invoegen',\n    'add_audio' => 'Audio invoegen',\n    'add_file' => 'Bestand invoegen',\n    'embedding_code_required' => 'De in te voegen code is vereist',\n    'embedding_code_invalid' => 'Geef geldige HTML-code op',\n    'embedding_code_invalid_title' => 'Ongeldige code',\n    'browse' => 'Blader in Media',\n    'by_url' => 'Op URL',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/nl.json",
    "content": "{\n  \"Update\": \"Bijwerken\",\n  \"Cancel\": \"Annuleren\",\n  \"You are viewing as\": \"Je bekijkt als\",\n  \"Preview Role\": \"Voorvertoning rol\",\n  \"This lets you test the actions this role can perform.\": \"Hiermee kun je de acties testen die deze rol kan uitvoeren.\",\n  \"View As Role\": \"Weergeven als rol\",\n  \"Return to Role Settings\": \"Terug naar instellingen\",\n  \"Password must have a minimum of length of :min characters\": \"Wachtwoord moet minimaal :min tekens lang zijn\",\n  \"Password must contain at least one uppercase character.\": \"Wachtwoord moet ten minste één hoofdletter bevatten.\",\n  \"Password must contain at least one lowercase character.\": \"Wachtwoord moet ten minste één kleine letter bevatten.\",\n  \"Password must contain at least one number.\": \"Het wachtwoord moet minstens één nummer bevatten.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Wachtwoord moet ten minste één niet-alfanumeriek teken bevatten.\",\n  \"Welcome to your Administration Area, :name\": \"Welkom in de beheeromgeving, :name\",\n  \"Duplicate\": \"Dupliceren\",\n  \"Expand\": \"Uitklappen\",\n  \"Collapse\": \"Inklappen\",\n  \"Move Up\": \"Verplaats naar boven\",\n  \"Move Down\": \"Verplaats naar beneden\",\n  \"Remove\": \"Verwijder\",\n  \"Manage Item\": \"Item beheren\",\n  \"Clear Filters\": \"Filters wissen\",\n  \"Filter Setup\": \"Filter instellingen\",\n  \"Apply\": \"Toepassen\",\n  \"Clear\": \"Wissen\",\n  \"is equal to\": \"is gelijk aan\",\n  \"is between\": \"is tussen\",\n  \"contains\": \"bevat\",\n  \"is before\": \"is voor\",\n  \"is after\": \"is na\",\n  \"is greater than\": \"is groter dan\",\n  \"is less than\": \"is minder dan\",\n  \"1. Export output format\": \"1. Export uitvoerformaat\",\n  \"File Format\": \"Bestandsformaat\",\n  \"Delimiter Character\": \"Scheidingsteken\",\n  \"Enclosure Character\": \"Tekstscheidingsteken\",\n  \"Escape Character\": \"Escape-teken\",\n  \"2. Select columns to export\": \"2. Selecteer kolommen om te exporteren\",\n  \"Columns\": \"Kolommen\",\n  \"3. Set export options\": \"3. Exporteer opties\",\n  \"CSV Custom\": \"CSV-formaat\",\n  \"1. Upload an Import File\": \"1. Upload een CSV bestand\",\n  \"Import File\": \"Importeer bestand\",\n  \"File Encoding\": \"Bestandscodering\",\n  \"First row contains column titles\": \"De eerste regel bevat kolomtitels\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Vink aan als de eerste regel kolomtitels bevat die gebruikt moeten worden.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Koppel de kolommen van het bestand aan de databasevelden\",\n  \"File columns\": \"Bestandskolommen\",\n  \"Database fields\": \"Database kolommen\",\n  \"3. Set Import Options\": \"3. Importeer opties\",\n  \"Export progress\": \"Voortgang exporteren\",\n  \"Processing\": \"Bezig met verwerken\",\n  \"Import progress\": \"Voortgang importeren\",\n  \"Import error\": \"Fout bij importeren\",\n  \"Export error\": \"Fout bij exporteren\",\n  \"Column preview\": \"Kolom voorbeeldweergave\",\n  \"Column\": \"Kolom\",\n  \"Disable\": \"Uitschakelen\",\n  \"Enable\": \"Inschakelen\",\n  \"Delete\": \"Wissen\",\n  \"Export\": \"Exporteren\",\n  \"Import\": \"Importeren\",\n  \"Select Action\": \"Selecteer actie\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Maak een nieuw account aan om in te loggen op de beheeromgeving.\",\n  \"First Name\": \"Voornaam\",\n  \"Last Name\": \"Achternaam\",\n  \"Email Address\": \"E-mailadres\",\n  \"Pick a Username\": \"Kies een gebruikersnaam\",\n  \"Enter New Password\": \"Voer een nieuw wachtwoord in\",\n  \"Confirm Password\": \"Bevestig wachtwoord\",\n  \"Create Account\": \"Nieuw account\",\n  \"Getting Ready\": \"Bezig met voorbereiden\",\n  \"Just a few more minutes\": \"Nog een paar minuten\",\n  \"Migrating Database\": \"Database migreren\",\n  \"Access the Backend Panel\": \"Toegang tot de beheeromgeving\",\n  \"View Backend During Maintenance\": \"Beheeromgeving bekijken tijdens onderhoud\",\n  \"Perform Software Updates\": \"Software updates uitvoeren\",\n  \"In Maintenance\": \"In onderhoud\",\n  \"The site is currently in maintenance mode, please check back later.\": \"De website is in onderhoud, probeer het later nog eens.\",\n  \"Dashboard\": \"Dashboard\",\n  \"Administrators\": \"Beheerders\",\n  \"Manage Admins\": \"Beheer beheerders\",\n  \"Create Admins\": \"Maak beheerders\",\n  \"Moderate Admins\": \"Beheerders modereren\",\n  \"Manage account suspension and ban admin accounts\": \"Beheer account schorsingen en verbanningen\",\n  \"Role Permissions\": \"Beheer rollen\",\n  \"Team Groups\": \"Beheer groepen\",\n  \"Manage Other Admins\": \"Beheer overige beheerders\",\n  \"Allow users to reset passwords and update emails.\": \"Sta doe dat gebruikers hun wachtwoord en/of e-mailadres kunnen wijzigen\",\n  \"Delete Admins\": \"Verwijder beheerders\",\n  \"Preferences\": \"Voorkeuren\",\n  \"Settings\": \"Instellingen\",\n  \"Background Color\": \"Achtergrondkleur\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Sta doe dat gebruikers nieuwe rollen mogen maken. En rollen mogen wijzigen of verwijderen van lagere rollen.\",\n  \"Save Changes\": \"Wijzigingen opslaan\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Dit logboek toont een lijst met succesvolle inlogpogingen door beheerders. Logboekregels blijven :days dagen bewaard.\",\n  \"Access Log\": \"Toegangslogboek\",\n  \"View a list of successful back-end user sign ins.\": \"Bekijk een lijst met succesvolle inlogpogingen van gebruikers.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Datum & tijd\",\n  \"Type\": \"Type\",\n  \"IP address\": \"IP-adres\",\n  \"Username\": \"Gebruikersnaam\",\n  \"Login\": \"Inloggen\",\n  \"First name\": \"Voornaam\",\n  \"Last name\": \"Achternaam\",\n  \"Email\": \"E-mailadres\",\n  \"A custom schema is used for this file format.\": \"Voor dit bestandsformaat wordt een aangepast schema gebruikt.\",\n  \"Select\": \"Selecteer\",\n  \"Replace\": \"Vervang\",\n  \"and\": \"en\",\n  \"Go\": \"Ga\",\n  \"Go to page\": \"Ga naar pagina\",\n  \"Copy to Clipboard\": \"Kopieer naar klembord\",\n  \"Reveal Contents\": \"Inhoud weergeven\",\n  \"Selected Site\": \"Geselecteerde site\",\n  \"Use Emmet abbreviations\": \"Gebruik Emmet-afkortingen\",\n  \"A record does not exist for the selected site. Create one?\": \"Er bestaat nog geen record voor de geselecteerde site. Een nieuwe aanmaken?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"De ingevoerde gegevens leveren geen resultaat. Controleer je invoer en probeer het opnieuw.\",\n  \"Administration Area\": \"Beheeromgeving\",\n  \"Password Reset\": \"Herstel wachtwoord\",\n  \"Please enter a new password.\": \"Vul een nieuw wachtwoord in\",\n  \"Password\": \"Wachtwoord\",\n  \"Password Restore\": \"Herstel wachtwoord\",\n  \"Please enter your login to restore the password.\": \"Vul je gebruikersnaam in om je wachtwoord te herstellen\",\n  \"A user could not be found with a login value of ':login'\": \"Een gebruiker met de gebruikersnaam ':login' is niet gevonden\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Een e-mail met instructies om het wachtwoord te herstellen is verzonden naar jouw e-mailadres.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Ongeldige herstelinformatie aangeboden. Probeer het opnieuw!\",\n  \"Unable to reset your password!\": \"Het is niet mogelijk het wachtwoord te herstellen!\",\n  \"Password has been reset. You may now sign in.\": \"Het wachtwoord is succesvol hersteld. Je kunt nu inloggen\",\n  \"Restore\": \"Herstellen\",\n  \"Reset\": \"Wijzigen\",\n  \"Stay logged in\": \"Blijf ingelogd\",\n  \"Forgot password?\": \"Wachtwoord vergeten?\",\n  \"Global Editor Settings\": \"Globale editor instellingen\",\n  \"Manage Widgets\": \"Beheer widgets\",\n  \"Add Widget\": \"Widget toevoegen\",\n  \"Set the current layout as the default?\": \"Huidige layout als standaard instellen?\",\n  \"Make Default\": \"Als standaard instellen\",\n  \"Reset layout back to default?\": \"Layout resetten naar standaard?\",\n  \"Reset Layout\": \"Layout resetten\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"selecteer\",\n  \"Width\": \"Breedte\",\n  \"full width\": \"Volledige breedte\",\n  \"Create Widgets\": \"Creëer Widgets\",\n  \"not equal to\": \"Niet gelijk aan\",\n  \"Light Mode\": \"Lichte modus\",\n  \"Dark Mode\": \"Donkere modus\",\n  \"OS Default\": \"OS Standaard\",\n  \"Create a Custom Palette\": \"Maak eigen kleurenpalet\",\n  \"Custom Palette\": \"Eigen kleurenpalet\",\n  \"Primary Color\": \"Primaire kleur\",\n  \"Secondary Color\": \"Secundaire kleur\",\n  \"Selection Color\": \"Selectiekleur\",\n  \"Nav Text\": \"Navigatie tekstkleur\",\n  \"Nav Background\": \"Navigatie achtergrondkleur\",\n  \"Sidebar Text\": \"Zijbalk tekstkleur\",\n  \"Sidebar Background\": \"Zijbalk achtergrondkleur\",\n  \"Sidebar Active Text\": \"Zijbalk actieve tekstkleur\",\n  \"Sidebar Active Background\": \"Zijbalk actieve achtergrondkleur\",\n  \"Sidebar Hover Background\": \"Zijbalk zwevend achtergrondkleur\",\n  \"Settings Text\": \"Instellingen tekstkleur\",\n  \"Settings Background\": \"Instellingen achtergrondkleur\",\n  \"Settings Item Background\": \"Instellingen item achtergrondkleur\",\n  \"Settings Active Color\": \"Instellingen actieve kleur\",\n  \"Settings Active Background\": \"Instellingen actieve achtergrondkleur\",\n  \"Settings Hover Background\": \"Instellingen zwevend achtergrondkleur\",\n  \"This name is shown in the title area of the back-end.\": \"Deze naam wordt weergegeven bij de titel van de beheeromgeving.\",\n  \"App Name\": \"Applicatie naam\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Deze slogan wordt weergegeven op het aanmeldscherm van de beheeromgeving.\",\n  \"App Tagline\": \"Applicatie slogan\",\n  \"Brand\": \"Uitstraling\",\n  \"Upload a custom logo to use in the back-end.\": \"Upload een logo om te gebruiken in de beheeromgeving.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Upload een favicon om te gebruiken in de beheeromgeving\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigatie logo\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Vervangt de dashboard link met een eigen logo in de navigatie.\",\n  \"Dashboard Icon\": \"Dashboard icoon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Gebruik een eigen afbeelding voor het dashboard icoon (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Dit bericht wordt getoond op het inlogscherm.\",\n  \"Welcome Message\": \"Welkomstbericht\",\n  \"Login Page\": \"Inlogpagina\",\n  \"Background Type\": \"Achtergrondtype\",\n  \"Flat Color\": \"Effen kleur\",\n  \"Wallpaper\": \"Afbeelding\",\n  \"Wallpaper Size\": \"Afbeelding grootte\",\n  \"Auto\": \"Automatisch schalen\",\n  \"Cover\": \"Bedek achtergrond volledig\",\n  \"Background Wallpaper Image\": \"Achtergrondafbeelding\",\n  \"Image\": \"Afbeelding\",\n  \"Random Autumn Images\": \"Willekeurige herfstafbeeldingen\",\n  \"Custom Image\": \"Selecteer eigen afbeelding\",\n  \"Login Page Image\": \"Abeelding op aanmeldscherm\",\n  \"Colors\": \"Kleuren\",\n  \"Color Mode\": \"Kleurmodus\",\n  \"Color Preset\": \"Kleuren preset\",\n  \"Menu Style\": \"Menustijl\",\n  \"Navigation\": \"Navigatie\",\n  \"Custom Stylesheet\": \"Eigen stylesheet\",\n  \"Styles\": \"Stijlen\",\n  \"Inline\": \"Inline-modus\",\n  \"Text\": \"Alleen tekst\",\n  \"Tiles\": \"Tegels\",\n  \"Collapsed\": \"Ingeklapt\",\n  \"Icons\": \"Iconen\",\n  \"Left Side\": \"Links gepositioneerd\",\n  \"Add New Item\": \"Nieuw item toevoegen\",\n  \"Link Color\": \"Link kleur\",\n  \"Current Password\": \"Huidig wachtwoord\",\n  \"New Password\": \"Nieuw wachtwoord\",\n  \"Current password does not match. Please try again!\": \"Huidige wachtwoord komt niet overeen. Probeer het opnieuw.\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Je wachtwoord is verlopen. Maak een nieuw wachtwoord aan.\",\n  \"Region\": \"Regio\",\n  \"Locale\": \"Taal\",\n  \"Select your desired locale for language use.\": \"Selecteer gewenste taal.\",\n  \"Timezone\": \"Tijdzone\",\n  \"Adjust displayed dates to this timezone.\": \"Datumweergave overal aanpassen naar deze tijdzone.\",\n  \"Code Editor\": \"Code-editor\",\n  \"Color Scheme\": \"Kleurschema\",\n  \"Word Wrap\": \"Tekstterugloop\",\n  \"Off\": \"Uit\",\n  \"40 Characters\": \"40 karakters\",\n  \"80 Characters\": \"80 karakters\",\n  \"Fluid\": \"Vloeiend\",\n  \"Font Size\": \"Lettergrootte\",\n  \"Tab Size\": \"Tab grootte\",\n  \"Code Folding\": \"Code invouwing\",\n  \"Mark begin\": \"Markeer begin\",\n  \"Mark begin and end\": \"Markeer begin en einde\",\n  \"Autocompletion\": \"Automatisch aanvullen\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Basis automatische aanvulling (Ctrl + Spatie)\",\n  \"Live Autocompletion\": \"Live automatische aanvulling\",\n  \"Show gutter\": \"Toon \\\"goot\\\"\",\n  \"Highlight active line\": \"Markeer actieve lijnen\",\n  \"Automatically close tags\": \"Sluit tags en speciale karakters automatisch\",\n  \"Indent using tabs\": \"Inspringen met tabs\",\n  \"Show indent guides\": \"Toon inspringing hulp\",\n  \"Show invisible characters\": \"Toon verborgen karakters\",\n  \"Show print margin\": \"Toon printmarges\",\n  \"Custom styles to include in the HTML editor.\": \"Eigen stijlen die in de HTML-editor gebruikt moeten worden.\",\n  \"Markup Styles\": \"Opmaakstijlen\",\n  \"Paragraph Formats\": \"Paragraaf formaten\",\n  \"Markup Classes\": \"Opmaak classes\",\n  \"Tag Name\": \"Tag naam\",\n  \"Label\": \"Label\",\n  \"Paragraph\": \"Paragraaf\",\n  \"Class Name\": \"Klasse naam\",\n  \"Link\": \"Link\",\n  \"Table\": \"Tabel\",\n  \"Table Cell\": \"Cel\",\n  \"Allowed Tags\": \"Toegestane HTML-tags\",\n  \"The list of allowed tags.\": \"Een lijst van toegestane HTML-tags.\",\n  \"Markup Tags\": \"Opmaak HTML-tags\",\n  \"Allowed Empty Tags\": \"Toegestane lege HTML-tags\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Een lijst van HTML-tags die niet worden verwijderd als ze leeg zijn.\",\n  \"Do Not Wrap Tags\": \"HTML-tags niet afbreken\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Een lijst van tags die niet worden afgebroken.\",\n  \"Remove Tags\": \"Te verwijderen HTML-tags\",\n  \"The list of tags that are removed together with their content.\": \"Een lijst van HTML-tags die samen met hun inhoud worden verwijderd.\",\n  \"Line Breaker Tags\": \"Line breaker tags\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Een lijst van HTML-tags waartussen een line breaker element wordt geplaatst.\",\n  \"Toolbar Buttons\": \"Toolbar knoppen\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"De toolbar knoppen die standaard getoond worden door de Rich Editor.\",\n  \"Insert a preset toolbar button configuration\": \"Voeg preset toe voor toolbar knoppen:\",\n  \"Allowed Attributes\": \"Toegestane attributen\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Een lijst van toegestane HTML-attributen (als toevoeging op de normaal toegestane attributen).\",\n  \"Enable code snippets (Tab)\": \"Inschakelen van code snippets (Tab)\",\n  \"Title\": \"Titel\",\n  \"Description\": \"Omschrijving\",\n  \"Attachment\": \"Bijlage\",\n  \"Attachment URL\": \"Bijlage URL\",\n  \"Add a title and description for this attachment.\": \"Voeg een titel en omschrijving toe aan deze bijlage.\",\n  \"Upload\": \"Uploaden\",\n  \"Are you sure?\": \"Weet je het zeker?\",\n  \"Delete Selected\": \"Verwijder geselecteerde\",\n  \"Upload Error\": \"Upload fout\",\n  \"Remove File\": \"Verwijder bestand\",\n  \"Show Light Switch\": \"Toon lichtschakelaar\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Gebruikers mogen kleurmodus aanpassen vanuit de navigatie.\",\n  \"Create :name\": \"Maak :name\",\n  \"Update :name\": \"Wijzig :name\",\n  \"Add :name\": \":name toevoegen\",\n  \"Link :name\": \"Koppel :name\",\n  \"Unlink\": \"Ontkoppel\",\n  \"Preview :name\": \"Voorbeeldweergave :name\",\n  \"Link a New :name\": \"Koppel een nieuwe :name\",\n  \"Add a New :name\": \"Nieuwe :name toevoegen\",\n  \"Related :name Data\": \"Gerelateerde :name data\",\n  \":name Created\": \":name is succesvol aangemaakt\",\n  \":name Updated\": \":name is succesvol bijgewerkt\",\n  \":name Deleted\": \":name is succesvol verwijderd\",\n  \":name Added\": \":name toegevoegd\",\n  \":name Linked\": \":name gekoppeld\",\n  \":name Removed\": \":name verwijderd\",\n  \":name Unlinked\": \":name losgekoppeld\",\n  \"Form record with an ID of :id could not be found.\": \"Het formulier met record ID :id is niet gevonden.\",\n  \"Remove Selected\": \"Verwijder geselecteerde\",\n  \"Unlink Selected\": \"Ontkoppel geselecteerde\",\n  \"Preview the Website\": \"Voorbeeldweergave website\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Beheer beheerders, groepen en rechten.\",\n  \"Define permissions for administrators based on their role.\": \"Definieer rechten voor beheerders gebaseerd op hun rol.\",\n  \"Add administrators to groups used for notifications and features.\": \"Voeg beheerders toe aan groepen t.b.v. notificaties en functionaliteiten.\",\n  \"Branding & Appearance\": \"Aanpassen beheeromgeving\",\n  \"Customize the administration area such as name, colors and logo.\": \"Pas de beheeromgeving aan zoals de naam, kleuren en logo.\",\n  \"Editor Settings\": \"Editor instellingen\",\n  \"Change the global editor preferences.\": \"Beheer editor instellingen, zoals lettergrootte en kleurschema.\",\n  \"My Account\": \"Mijn account\",\n  \"Update your account details such as name, email address and password.\": \"Werk accountinstellingen zoals naam, e-mailadres en wachtwoord bij.\",\n  \"Backend Preferences\": \"Voorkeuren beheeromgeving\",\n  \"Manage your account preferences such as desired language.\": \"Beheer taalvoorkeur en de weergave van het CMS.\",\n  \"security login\": \"login beveiliging\",\n  \"List Setup\": \"Lijst instellingen\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Selecteer door middel van vinkjes de kolommen die je in de lijst wilt zien. Je kunt de volgorde van kolommen veranderen door ze omhoog of omlaag te slepen.\",\n  \"Records Per Page\": \"Resultaten per pagina\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Selecteer het aantal resultaten dat per pagina getoond moet worden. Let op: een hoog getal kan voor prestatieproblemen zorgen.\",\n  \"Reset to Default\": \"Standaardinstellingen herstellen\",\n  \"Add Selected\": \"Selectie toevoegen\",\n  \"Create & Close\": \"Opslaan en sluiten\",\n  \"Creating :name...\": \"Aanmaken :name...\",\n  \"Save & Close\": \"Opslaan en sluiten\",\n  \"Saving :name...\": \":name opslaan...\",\n  \"Delete this record?\": \"Wil je deze regel verwijderen?\",\n  \"Deleting :name...\": \":name verwijderen...\",\n  \"Loading...\": \"Laden...\",\n  \"Complete\": \"Gereed\",\n  \"Close\": \"Sluiten\",\n  \"Please specify the modelClass property for :type\": \"Specifieer de `modelClass` eigenschap voor type :type\",\n  \"Please specify some columns to export.\": \"Geef enkele kolommen op die je wilt exporteren.\",\n  \"Missing column identifier\": \"Kolom-ID ontbreekt\",\n  \"Unknown column\": \"Onbekende kolom\",\n  \"Please specify some columns to import.\": \"Geef enkele kolommen op die je wilt importeren.\",\n  \"Please match some columns first.\": \"Match eerst een aantal kolommen.\",\n  \"Please specify a match for the required field :label.\": \"Specifieer een match voor het verplicht veld :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"De codering van bronbestand wordt niet herkend. Selecteer de juiste bestandscodering om het bestand te importeren.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Je moet de controller behavior ListController implementeren met de export \\\"useList\\\" optie ingeschakeld.\",\n  \"File export process completed!\": \"Bestandsexport is voltooid!\",\n  \"The browser will now redirect to the file download.\": \"De browser zal nu doorverwijzen naar het downloaden van het bestand.\",\n  \"Ignore this column\": \"Negeer deze kolom\",\n  \"Drop column here...\": \"Sleep kolom hierheen...\",\n  \"Please upload a valid CSV file.\": \"Upload een geldig CSV-bestand.\",\n  \"Created\": \"Aangemaakt\",\n  \"Updated\": \"Bijgewerkt\",\n  \"Skipped\": \"Overgeslagen\",\n  \"Warnings\": \"Waarschuwingen\",\n  \"Errors\": \"Fouten\",\n  \"Skipped Rows\": \"Overgeslagen rijen\",\n  \"Show Ignored Columns\": \"Toon genegeerde kolommen\",\n  \"Auto Match Columns\": \"Kolommen automatisch koppelen\",\n  \"File not found\": \"Bestand niet gevonden\",\n  \"There was no data supplied to export\": \"Er was geen data beschikbaar om te exporteren\",\n  \"Created At\": \"Aangemaakt op\",\n  \"Updated At\": \"Bijgewerkt op\",\n  \"Deleted At\": \"Verwijderd op\",\n  \"Created By\": \"Aangemaakt door\",\n  \"Updated By\": \"Bijgewerkt door\",\n  \"Deleted By\": \"Verwijderd door\",\n  \"Create Dashboard\": \"Dashboard aanmaken\",\n  \"Edit Dashboard\": \"Dashboard bewerken\",\n  \"The dashboard was successfully created.\": \"Het dashboard is succesvol aangemaakt.\",\n  \"The dashboard was successfully updated.\": \"Het dashboard is succesvol bijgewerkt.\",\n  \"Dashboard Name\": \"Dashboardnaam\",\n  \"Please enter the dashboard name\": \"Voer de dashboardnaam in\",\n  \"Please enter the dashboard code\": \"Voer de dashboardcode in\",\n  \"The code can only include Latin letters, digits, and hyphens\": \"De code mag alleen Latijnse letters, cijfers en koppeltekens bevatten\",\n  \"Icon\": \"Pictogram\",\n  \"Please select an icon\": \"Selecteer een pictogram\",\n  \"Global Access\": \"Globale toegang\",\n  \"Dashboards with Global Access enabled can be viewed by other users.\": \"Dashboards met globale toegang kunnen door elke gebruiker worden bekeken, maar dit geeft geen bewerkingsrechten.\",\n  \"Select Dashboard\": \"Selecteer dashboard\",\n  \"Value\": \"Waarde\",\n  \"Difference with the previous period\": \"Verschil met de vorige periode\",\n  \"Group\": \"Groep\",\n  \"Compare Totals\": \"Totalen vergelijken\",\n  \"Interval\": \"Interval\",\n  \"Date\": \"Datum\",\n  \"You don't have access to any dashboards.\": \"Je hebt geen toegang tot dashboards.\",\n  \"No dashboards have been set up yet.\": \"Er zijn nog geen dashboards ingesteld.\",\n  \"Import Dashboard\": \"Dashboard importeren\",\n  \"The requested dashboard could not be found.\": \"Het opgevraagde dashboard kon niet worden gevonden.\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Debug modus is ingeschakeld. Dit wordt niet aanbevolen op een productie-omgeving.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"De URL van de beheeromgeving is te generiek. Kies een unieke naam.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Er is een account met een generieke gebruikersnaam gevonden (:name). Pas de gebruikersnaam aan van dit account.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"De PHP extensie :name is niet geïnstalleerd. Installeer deze bibliotheek en activeer de extensie.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"De plugin :name is een afhankelijkheid maar is niet geïnstalleerd. Installeer deze plugin a.u.b.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"De map :name of de submappen zijn niet schrijfbaar voor PHP. Zet de bijhorende rechten voor de webserver in deze map.\",\n  \"Your account doesn't have permissions do create or edit dashboards.\": \"Je account heeft geen rechten om dashboards te maken of te bewerken.\",\n  \"No records found\": \"Geen gegevens gevonden\",\n  \"Apply Changes\": \"Wijzigingen toepassen\",\n  \"Error loading the widget data. See the browser error console for details.\": \"Fout bij het laden van de widgetgegevens. Zie de foutconsole van de browser voor details.\",\n  \"Configure the widget\": \"Configureer de widget\",\n  \"to manage its settings.\": \"om de instellingen te beheren.\",\n  \"Includes\": \"Bevat\",\n  \"Excludes\": \"Bevat niet\",\n  \"Manage Roles\": \"Beheer rollen\",\n  \"Manage Groups\": \"Beheer groepen\",\n  \"Customize Backend\": \"Aanpassen beheeromgeving\"\n}"
  },
  {
    "path": "modules/backend/lang/pl/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Użyto nieprawidłowego typu pola :type.',\n    'options_method_invalid_model' => 'Atrybut \\':field\\' nie jest poprawnym modelem. Spróbuj zdefiniować metodę zwracającą opcje dla modelu :model.',\n    'options_method_not_exists' => 'Model :model musi definiować metodę :method() zwracając opcję z pola \\':field\\' formularza.',\n    'colors_method_not_exists' => 'Model :model musi definiować metodę :method() zwracającą kolor zakodowany dla pola formularza \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'Nazwa klasy widgetu \\':name\\' nie została zarejestrowana',\n    'not_bound' => 'Nazwa klasy widgetu \\':name\\' nie została przepisana do kontrolera',\n  ],\n  'page' => [\n    'untitled' => 'Bez nazwy',\n    404 => [\n      'label' => 'Nie znaleziono strony',\n      'help' => 'Szukaliśmy i szukaliśmy, ale dla podanego adresu URL nic nie daliśmy rady znaleźć. Może szukałeś czegoś innego?',\n      'back_link' => 'Wróć na poprzednią stronę',\n    ],\n    'access_denied' => [\n      'label' => 'Odmowa dostępu',\n      'help' => 'Nie posiadasz odpowiednich uprawnień, aby zobaczyć tą stronę.',\n      'cms_link' => 'Powrót do panelu back-end',\n    ],\n    'no_database' => [\n      'label' => 'Brak bazy danych',\n      'help' => 'Baza danych jest wymagana do dostępu do panelu administracyjnego. Sprawdz czy baza danych jest prawidłowo skonfigurowana i zmigrowana przed ponowną próbą.',\n      'cms_link' => 'Powrót do strony głównej',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Blok \\':name\\' nie został odnaleziony.',\n    'invalid_name' => 'Niepoprawny fragment o nazwie: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Niepoprawna nazwa AJAX handlera: :name.',\n    'not_found' => 'AJAX handler o nazwie \\':name\\' nie został znaleziony.',\n  ],\n  'account' => [\n    'impersonate' => 'Wciel się w użytkownika',\n    'impersonate_confirm' => 'Czy na pewno chcesz wcielić się w tego użytkownika? Możesz wrócić do poprzedniego stanu przez wylogowanie się.',\n    'impersonate_success' => 'Wcieliłeś się w użytkownika',\n    'impersonate_working' => 'Wcielanie się',\n    'impersonating' => 'Wcielanie się w :full_name',\n    'stop_impersonating' => 'Zakończ wcielanie się w użytkownika',\n    'signed_in_as' => 'Zalogowany jako :full_name',\n    'sign_out' => 'Wyloguj',\n    'login_placeholder' => 'login',\n    'password_placeholder' => 'hasło',\n    'enter_email' => 'Wpisz swój email',\n    'email_placeholder' => 'email',\n    'apply' => 'Zastosuj',\n    'cancel' => 'Anuluj',\n    'delete' => 'Usuń',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Kokpit',\n    'widget_inspector_title' => 'Konfiguracja widgetu',\n    'widget_inspector_description' => 'Konfiguruj widget',\n    'widget_columns_label' => 'Szerokość: :columns',\n    'widget_columns_description' => 'Szerokość widgetu, cyfra pomiędzy 1 a 10.',\n    'widget_columns_error' => 'Proszę podać szerokość widgetu jako cyfrę pomiędzy 1 a 10.',\n    'columns' => '{1} kolumna|[2,Inf] kolumny',\n    'widget_new_row_label' => 'Wymuś nowy wiersz',\n    'widget_new_row_description' => 'Umieść widget w nowym wierszu.',\n    'widget_title_label' => 'Nazwa widgetu',\n    'widget_title_error' => 'Nazwa widgetu jest wymagana.',\n    'reset_layout_success' => 'Został przywrócony domyślny układ',\n    'make_default_success' => 'Obecny układ jest teraz domyślny',\n    'collapse_all' => 'Zwiń wszystkie',\n    'expand_all' => 'Rozwiń wszystkie',\n    'status' => [\n      'widget_title_default' => 'Status systemu',\n      'update_available' => '{0} dostępnych aktualizacji!|{1} dostępna aktualizacja!|[2,Inf] dostępne aktualizacje!',\n      'updates_pending' => 'Oczekujące aktualizacje',\n      'updates_nil' => 'Wersja systemu jest aktualna',\n      'updates_link' => 'Aktualizuj',\n      'warnings_pending' => 'Niektóre kwestie wymagają uwagi',\n      'warnings_nil' => 'Brak ostrzeżeń do wyświetlenia',\n      'warnings_link' => 'Wyświetl',\n      'core_build' => 'Wersja systemu',\n      'event_log' => 'Dziennik zdarzeń',\n      'request_log' => 'Log żądań',\n      'app_birthday' => 'Online od',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Witaj',\n      'welcome_back_name' => 'Witaj z powrotem w :app, :name.',\n      'welcome_to_name' => 'Witaj w :app, :name.',\n      'first_sign_in' => 'To jest twoje pierwsze logowanie.',\n      'last_sign_in' => 'Data ostatniego logowania',\n      'view_access_logs' => 'Zobacz dziennik zdarzeń',\n      'nice_message' => 'Miłego dnia!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Zarządzaj Administratorami',\n    'new' => 'Nowy Administrator',\n    'first_name' => 'Imię',\n    'last_name' => 'Nazwisko',\n    'full_name' => 'Imię i nazwisko',\n    'email' => 'E-mail',\n    'role_field' => 'Rola',\n    'role_comment' => 'Role definiują uprawnienia użytkowników, które mogą być nadpisane na poziomie użytkownika w zakładce Uprawnienia.',\n    'groups' => 'Grupa',\n    'groups_comment' => 'Określ, do której grupy należy ten użytkownik',\n    'avatar' => 'Awatar',\n    'password' => 'Hasło',\n    'password_confirmation' => 'Potwierdź hasło',\n    'permissions' => 'Uprawnienia',\n    'account' => 'Konto',\n    'superuser' => 'Super Użytkownik',\n    'superuser_comment' => 'Zaznacz to pole jeżeli chcesz zezwolić temu użytkownikowi na pełny dostęp do panelu.',\n    'send_invite' => 'Wyślij zaproszenie wiadomością email',\n    'send_invite_comment' => 'Zaznacz to pole, aby wysłać zaproszenie wiadomością email do tego użytkownika',\n    'delete_confirm' => 'Czy jesteś pewny, że chcesz usunąć tego administratora',\n    'return' => 'Wróc do listy administratorów',\n    'allow' => 'Zezwól',\n    'inherit' => 'Dziedzicz',\n    'deny' => 'Odmów',\n    'activated' => 'Aktywowany',\n    'last_login' => 'Ostatnie zalogowanie',\n    'created_at' => 'Stworzony',\n    'updated_at' => 'Zaktualizowany',\n    'deleted_at' => 'Usunięty',\n    'show_deleted' => 'Pokaż usunięte',\n    'group' => [\n      'name' => 'Grupa',\n      'name_field' => 'Nazwa',\n      'name_comment' => 'Nazwa wyświetlana na liście grup oraz w formularzu dodawania/edycji administratora.',\n      'description_field' => 'Opis',\n      'is_new_user_default_field_label' => 'Domyslna grupa',\n      'is_new_user_default_field_comment' => 'Dodaj nowych administratorów domyślnie do tej grupy',\n      'code_field' => 'Kod',\n      'code_comment' => 'Wpisz unikalny kod, jeżeli chcesz mieć do niego dostęp poprzez API.',\n      'list_title' => 'Zarządzaj grupami',\n      'new' => 'Nowa grupa Administratorów',\n      'delete_confirm' => 'Jesteś pewny, że chcesz usunąć tą grupę administratorów?',\n      'return' => 'Wróć do listy grup',\n      'users_count' => 'Użytkowników',\n      'is_new_user_default_field' => 'Dodawaj nowych administratorów do tej grupy jako domyślnej.',\n    ],\n    'role' => [\n      'name' => 'Rola',\n      'name_field' => 'Nazwa',\n      'name_comment' => 'Nazwa wyświetlana na liście ról w formularzu administratora.',\n      'description_field' => 'Opis',\n      'code_field' => 'Kod',\n      'code_comment' => 'Wprowadź unikalny kod, umożliwiający dostęp do obiektu roli przez API.',\n      'list_title' => 'Zarządzaj Rolami',\n      'new' => 'Nowa Rola',\n      'delete_confirm' => 'Czy na pewno?',\n      'return' => 'Powrót do listy ról',\n      'users_count' => 'Użytkownicy',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nie znaleziono uwierzytelnionego użytkownika, aby załadować lub zapisać ustawienia.',\n    ],\n    'trashed_hint_title' => 'To konto zostało usunięte',\n    'trashed_hint_desc' => 'To konto zostało usunięte i nie da się na nie zalogować. Żeby przywrócić normalne zachowanie użyj przycisku w prawym dolnym rogu.',\n  ],\n  'list' => [\n    'default_title' => 'Lista',\n    'search_prompt' => 'Szukaj...',\n    'no_records' => 'Brak rekordów w tym widoku.',\n    'missing_model' => 'Zachowanie listy użyte w :class nie ma zdefiniowanego modelu.',\n    'missing_column' => 'Brak definicji kolumn dla :columns.',\n    'missing_columns' => 'Lista użyta w :class nie posiada zdefiniowanej listy kolumn.',\n    'missing_definition' => 'Zachowanie listy nie posiada kolumn dla \\':field\\'.',\n    'missing_parent_definition' => 'Zachowanie listy nie zawiera definicji dla \\':definition\\'.',\n    'behavior_not_ready' => 'Zachowanie listy nie zostało zainicjowane, sprawdź czy wywołałeś makeLists() w swoim kontrolerze.',\n    'invalid_column_datetime' => 'Wartość kolumny \\':column\\' nie jest objektem typu DateTime, czy nie brakuje Ci referencji $dates w Modelu?',\n    'pagination' => 'Wyświetlono rekordy: :from-:to z :total',\n    'first_page' => 'First page',\n    'last_page' => 'Last page',\n    'prev_page' => 'Poprzednia strona',\n    'next_page' => 'Następna strona',\n    'refresh' => 'Odśwież',\n    'updating' => 'Aktualizowanie...',\n    'loading' => 'Wczytywanie...',\n    'check' => 'Sprawdź',\n    'delete_selected' => 'Usuń zaznaczone',\n    'delete_selected_empty' => 'Nie wybrano elementów do usunięcia.',\n    'delete_selected_confirm' => 'Usunąć zaznaczone elementy?',\n    'delete_selected_success' => 'Pomyślnie usunięto zaznaczone elementy.',\n    'column_switch_true' => 'Tak',\n    'column_switch_false' => 'Nie',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Kliknij %s lub upuść plik aby przesłać',\n  ],\n  'form' => [\n    'create_title' => 'Nowy :name',\n    'update_title' => 'Edytuj :name',\n    'preview_title' => 'Podgląd :name',\n    'restore_success' => ':name został przywrócony pomyślnie',\n    'reset_success' => 'Resetowanie zostało zakończone',\n    'missing_id' => 'ID rekordu formularza nie zostało znalezione.',\n    'missing_model' => 'Zachowanie formularza w klasie :class nie ma zadefiniowanego Modelu.',\n    'missing_definition' => 'Zachowanie formularza nie posiada pola dla \\':field\\'.',\n    'action_confirm' => 'Czy jesteś pewny?',\n    'create' => 'Stwórz',\n    'create_and_close' => 'Stwórz i zamknij',\n    'creating' => 'Tworzenie...',\n    'creating_name' => 'Tworzenie :name...',\n    'save' => 'Zapisz',\n    'save_and_close' => 'Zapisz i zamknij',\n    'saving' => 'Zapisywanie...',\n    'saving_name' => 'Zapisywanie :name...',\n    'delete' => 'Usuń',\n    'deleting' => 'Usuwanie...',\n    'confirm_delete' => 'Usunąć rekord?',\n    'confirm_delete_multiple' => 'Usunąć zaznaczone rekordy?',\n    'deleting_name' => 'Usuwanie :name...',\n    'restore' => 'Przywróć',\n    'restoring' => 'Przywracanie...',\n    'confirm_restore' => 'Czy na pewno chcesz przywrócić ten rekord?',\n    'reset_default' => 'Resetuj do domyślnych',\n    'resetting' => 'Resetowanie',\n    'resetting_name' => 'Resetowanie :name',\n    'undefined_tab' => 'Różne',\n    'field_off' => 'Wył.',\n    'field_on' => 'Wł.',\n    'add' => 'Dodaj',\n    'apply' => 'Zastosuj',\n    'cancel' => 'Anuluj',\n    'close' => 'Zamknij',\n    'confirm' => 'Potwierdź',\n    'reload' => 'Przeładuj',\n    'complete' => 'Zakończ',\n    'ok' => 'OK',\n    'or' => 'lub',\n    'confirm_tab_close' => 'Czy naprawdę chcesz zamknąć tą kartę? Wszystkie niezapisane zmiany zostaną utracone.',\n    'behavior_not_ready' => 'Zachowanie formularza nie zostało zainicjowane, sprawdź czy wywołałeś initForm() w swoim kontrolerze.',\n    'preview_no_files_message' => 'Brak wgranych plików.',\n    'preview_no_media_message' => 'Nie wybrano żadnych mediów.',\n    'preview_no_record_message' => 'Brak zaznaczonych elementów.',\n    'select' => 'Zaznacz',\n    'select_all' => 'Zaznacz wszystko',\n    'select_none' => 'Wybierz brak',\n    'insert_row' => 'Wstaw wiersz',\n    'insert_row_below' => 'Wstaw wiersz poniżej',\n    'delete_row' => 'Usuń wiersz',\n    'concurrency_file_changed_title' => 'Plik został zmieniony.',\n    'concurrency_file_changed_description' => 'Plik, który edytujesz został zmieniony na dysku przez innego użytkownika. Możesz przeładować plik i stracić swoje zmiany lub nadpisać plik na dysku.',\n    'return_to_list' => 'Powrót do listy',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Znajdź Rekord',\n    'invalid_model_class' => 'Klasa \":modelClass\" dla recordfinder jest niepoprawna',\n    'cancel' => 'Anuluj',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Zachowanie relacji nie zawiera konfiguracji dla pola \\':config\\'.',\n    'missing_definition' => 'Zachowanie relacji nie zawiera definicji dla pola \\':field\\'.',\n    'missing_model' => 'Zachowanie relacji użyte w klasie :class nie zawiera definicji modelu.',\n    'invalid_action_single' => 'Ta akcja nie może zostać wykonana na pojedynczej zależności.',\n    'invalid_action_multi' => 'Ta akcja nie może zostać wykonana na wielokrotnej zależności.',\n    'help' => 'Kliknij element, aby dodać.',\n    'add' => 'Dodaj',\n    'link_selected' => 'Dołącz zaznaczone',\n    'cancel' => 'Anuluj',\n    'close' => 'Zamknij',\n    'create' => 'Stwórz',\n    'update' => 'Aktualizuj',\n    'preview' => 'Podgląd',\n    'remove_name' => 'Usuń :name',\n    'delete_name' => 'Usuń :name',\n    'link' => 'Dołącz',\n    'unlink_name' => 'Odłącz :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Zmień kolejność',\n    'no_records' => 'Brak dostępnych rekordów do sortowania.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' o ID :id nie został znaleziony',\n    'missing_id' => 'Nie istnieje sprecyzowane ID dla szukania rekordu modelu.',\n    'missing_relation' => 'Model \\':class\\' nie zawiera definicji dla \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' nie zawiera metody \\':method\\'.',\n    'invalid_class' => 'Model :model użyty w klasie :class jest nieprawidłowy i musi dziedziczyć klasę \\\\Model.',\n    'mass_assignment_failed' => 'Masowe przydzielanie nie powiodło się dla atrybutu \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Konfiguracja Systemu - Porady',\n    'tips_description' => 'Istnieją pewne problemy, na które należy zwrócić uwagę, aby skonfigurować sytem poprawnie.',\n    'decompileBackendAssets' => 'Assety w Backendzie są zdekompilowane. To nie jest zalecane dla środowisk produkcyjnych.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Moje Ustawienia',\n    'menu_description' => 'Ustawienia związane z Twoim kontem administratora.',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Akcentowany kolor',\n    'menu_mode_inline_no_icons' => 'W linii (bez ikon)',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'wszystkie',\n    'options_method_not_exists' => 'Klasa modelu :model musi definiować metodę :method() zwracającą listę opcji dla filtru \\':filter\\'.',\n    'date_all' => 'Cały okres',\n    'number_all' => 'wszystkie liczby',\n  ],\n  'import_export' => [\n    'row' => 'Wiersz :row',\n    'export_error' => 'Błąd eksportu',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Europa Zachodnia)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Europa Centralna)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, Europa Południowa)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, Europa Północna)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrylica)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabski)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Grecki)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrajski)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turecki)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordycki)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Tajski)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Kraje Nadbałtyckie)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtycki)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Europa Zachodnia wersja ze znakiem euro)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Manage mediami',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'default_prompt' => 'Kliknij przycisk %s aby znaleźć element',\n    'no_image' => 'Obraz nie został znaleziony',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Prześlij',\n    'move' => 'Przenieś',\n    'delete' => 'Usuń',\n    'add_folder' => 'Dodaj folder',\n    'search' => 'Szukaj',\n    'display' => 'Pokaż',\n    'filter_everything' => 'Wszystko',\n    'filter_images' => 'Obrazki',\n    'filter_video' => 'Filmy',\n    'filter_audio' => 'Dźwięki',\n    'filter_documents' => 'Dokumenty',\n    'library' => 'Biblioteka',\n    'size' => 'Rozmiar',\n    'title' => 'Tytuł',\n    'last_modified' => 'Data modyfikacji',\n    'public_url' => 'Publiczny URL',\n    'click_here' => 'Kliknij tutaj',\n    'thumbnail_error' => 'Wystąpił błąd przy tworzeniu miniatury.',\n    'return_to_parent' => 'Wróć do folderu nadrzędnego',\n    'return_to_parent_label' => 'Idź w górę ..',\n    'nothing_selected' => 'Nic nie zaznaczono.',\n    'multiple_selected' => 'Wybrano wiele elementów.',\n    'uploading_file_num' => 'Przesyłanie :number pliku(ów)...',\n    'uploading_complete' => 'Przesyłanie zakończone',\n    'uploading_error' => 'Błąd przesyłania pliku',\n    'type_blocked' => 'Typ pliku jest zablokowany ze względów bezpieczeństwa.',\n    'order_by' => 'Sortowanie',\n    'direction' => 'Kierunek',\n    'direction_asc' => 'Rosnąco',\n    'direction_desc' => 'Malejąco',\n    'folder' => 'Folder',\n    'no_files_found' => 'Nie znaleziono żadnych pasujących elementów.',\n    'delete_empty' => 'Wybierz elementy do usunięcia.',\n    'delete_confirm' => 'Czy na pewno chcesz usunąć wybrane elementy?',\n    'error_renaming_file' => 'Wystąpił błąd przy zmianie nazwy elementu.',\n    'new_folder_title' => 'Nowy folder',\n    'folder_name' => 'Nazwa folderu',\n    'error_creating_folder' => 'Wystąpił błąd przy tworzeniu folderu',\n    'folder_or_file_exist' => 'Folder lub plik o podanej nazwie już istnieje.',\n    'move_empty' => 'Wybierz elementy do przeniesienia.',\n    'move_popup_title' => 'Przenieś pliki lub foldery',\n    'move_destination' => 'Folder docelowy',\n    'please_select_move_dest' => 'Wybierz folder docelowy.',\n    'move_dest_src_match' => 'Wybierz inny folder docelowy.',\n    'empty_library' => 'Biblioteka Mediów jest pusta. Na początek prześlij pliki lub utwórz foldery.',\n    'insert' => 'Wstaw',\n    'crop_and_insert' => 'Przytnij lub wstaw',\n    'select_single_image' => 'Wybierz pojedynczy obrazek.',\n    'selection_not_image' => 'Wybrany element nie jest obrazkiem.',\n    'restore' => 'Cofnij wszystkie zmiany',\n    'resize' => 'Skaluj...',\n    'selection_mode_normal' => 'Normalny',\n    'selection_mode_fixed_ratio' => 'Zablokuj proporcje',\n    'selection_mode_fixed_size' => 'Zablokuj rozmiar',\n    'height' => 'Wysokość',\n    'width' => 'Szerokość',\n    'selection_mode' => 'Tryb zaznaczenia',\n    'resize_image' => 'Zmień rozmiar obrazka',\n    'image_size' => 'Rozmiar obrazka:',\n    'selected_size' => 'Wybrano:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/pl.json",
    "content": "{\n  \"Cancel\": \"Anuluj\",\n  \"You are viewing as\": \"Oglądasz jako\",\n  \"Preview Role\": \"Podgląd roli\",\n  \"This lets you test the actions this role can perform.\": \"Pozwala to przetestować działania, które może wykonywać ta rola.\",\n  \"View As Role\": \"Wyświetl jako rolę\",\n  \"Return to Role Settings\": \"Wróć do ustawień ról\",\n  \"Password must have a minimum of length of :min characters\": \"Hasło musi mieć minimalną długość :min znaków\",\n  \"Password must contain at least one uppercase character.\": \"Hasło musi zawierać co najmniej jedną wielką literę.\",\n  \"Password must contain at least one lowercase character.\": \"Hasło musi zawierać co najmniej jedną małą literę.\",\n  \"Password must contain at least one number.\": \"Hasło musi zawierać co najmniej jedną cyfrę.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Hasło musi zawierać co najmniej jeden znak niealfanumeryczny.\",\n  \"Welcome to your Administration Area, :name\": \"Witamy w obszarze administracyjnym, :nazwa\",\n  \"Duplicate\": \"Duplikuj\",\n  \"Expand\": \"Rozwiń\",\n  \"Collapse\": \"Zwiń\",\n  \"Move Up\": \"Do góry\",\n  \"Move Down\": \"W dół\",\n  \"Remove\": \"Usuń\",\n  \"Manage Item\": \"Zarządzaj elementem\",\n  \"Clear Filters\": \"Wyczyść filtry\",\n  \"Filter Setup\": \"Konfiguracja filtrów\",\n  \"Apply\": \"Zastosuj\",\n  \"Clear\": \"Wyczyść\",\n  \"is equal to\": \"jest równe\",\n  \"is between\": \"jest pomiędzy\",\n  \"contains\": \"zawiera\",\n  \"is before\": \"jest przed\",\n  \"is after\": \"jest za\",\n  \"is greater than\": \"jest większy niż\",\n  \"is less than\": \"jest mniej niż\",\n  \"1. Export output format\": \"1. Format eksportowanego pliku\",\n  \"File Format\": \"Format pliku\",\n  \"Delimiter Character\": \"Znak rozdzielający (delimiter)\",\n  \"Enclosure Character\": \"Znak zawierający (enclosure)\",\n  \"Escape Character\": \"Znak modyfikacji/ucieczki (escape)\",\n  \"2. Select columns to export\": \"2. Wybierz kolumny do eksportu\",\n  \"Columns\": \"Kolumny\",\n  \"3. Set export options\": \"3. Ustaw opcje eksportu\",\n  \"CSV Custom\": \"Niestandardowy CSV\",\n  \"1. Upload an Import File\": \"1. Wgraj plik CSV\",\n  \"Import File\": \"Importuj Plik\",\n  \"File Encoding\": \"Kodowanie\",\n  \"First row contains column titles\": \"Pierwszy wiersz zawiera nazwy kolumn\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Zostaw to pole zaznaczone, jeżeli pierwszy wiersz w pliku CSV zawiera tytuły kolumn.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"Kolumny w pliku\",\n  \"Database fields\": \"Pola w bazie\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Postęp eksportu\",\n  \"Processing\": \"Przetwarzanie\",\n  \"Import progress\": \"Postęp importu\",\n  \"Import error\": \"Błąd importu\",\n  \"Export error\": \"Błąd eksportu\",\n  \"Column preview\": \"Podgląd kolumny\",\n  \"Column\": \"Kolumna\",\n  \"Disable\": \"Wyłącz\",\n  \"Enable\": \"Załącz\",\n  \"Delete\": \"Usuń\",\n  \"Export\": \"Eksport\",\n  \"Import\": \"Import\",\n  \"Select Action\": \"Wybierz akcję\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Utwórz nowe konto, aby zalogować się do panelu administracyjnego.\",\n  \"First Name\": \"Imię\",\n  \"Last Name\": \"Nazwisko\",\n  \"Email Address\": \"Adres e-mail\",\n  \"Pick a Username\": \"Wybierz nazwę użytkownika\",\n  \"Enter New Password\": \"Wprowadź nowe hasło\",\n  \"Confirm Password\": \"Potwierdź hasło\",\n  \"Create Account\": \"Utwórz konto\",\n  \"Getting Ready\": \"Przygotowywanie\",\n  \"Just a few more minutes\": \"Jeszcze tylko kilka minut\",\n  \"Migrating Database\": \"Migracja bazy danych\",\n  \"Access the Backend Panel\": \"Uzyskaj dostęp do panelu administracyjnego\",\n  \"View Backend During Maintenance\": \"Wyświetl panel administracyjny podczas konserwacji\",\n  \"Perform Software Updates\": \"Wykonaj aktualizacje oprogramowania\",\n  \"In Maintenance\": \"W trakcie konserwacji\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Witryna jest obecnie w trybie konserwacji, sprawdź ponownie później.\",\n  \"Dashboard\": \"Kokpit\",\n  \"Administrators\": \"Administratorzy\",\n  \"Manage Admins\": \"Zarządzaj administratorami\",\n  \"Create Admins\": \"Utwórz administratorów\",\n  \"Moderate Admins\": \"Zarządzaj administratorami\",\n  \"Manage account suspension and ban admin accounts\": \"Zarządzaj zawieszeniem konta i blokuj konta administratora\",\n  \"Role Permissions\": \"Zarządzaj rolami\",\n  \"Team Groups\": \"Grupy\",\n  \"Manage Other Admins\": \"Zarządzaj innymi kontami administratorów\",\n  \"Allow users to reset passwords and update emails.\": \"Umożliwia resetowanie haseł i aktualizowanie e-maili\",\n  \"Delete Admins\": \"Usuń administratorów\",\n  \"Preferences\": \"Preferencje\",\n  \"Settings\": \"Ustawienia\",\n  \"Background Color\": \"Kolor tła\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Zezwalaj użytkownikom na tworzenie nowych oraz edytowanie lub usuwanie ról niższych niż ich najwyższa prawa dostępu.\",\n  \"Save Changes\": \"Zapisz zmiany\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Ten log wyświetla listę udanych logowań administratorów. Dane są przechowywane przez :days dni.\",\n  \"Access Log\": \"Dziennik zdarzeń\",\n  \"View a list of successful back-end user sign ins.\": \"Zobacz listę pomyślnych logowań do panelu administracyjnego.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Data & Czas\",\n  \"Type\": \"Typ\",\n  \"IP address\": \"Adres IP\",\n  \"Username\": \"Username\",\n  \"Login\": \"Zaloguj\",\n  \"First name\": \"Imię\",\n  \"Last name\": \"Nazwisko\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"Dla tego formatu pliku używany jest schemat niestandardowy.\",\n  \"Select\": \"Wybierz\",\n  \"Replace\": \"Zastąp\",\n  \"and\": \"oraz\",\n  \"Go\": \"Go\",\n  \"Go to page\": \"Go to page\",\n  \"Copy to Clipboard\": \"Copy to Clipboard\",\n  \"Reveal Contents\": \"Reveal Contents\",\n  \"Selected Site\": \"Selected Site\",\n  \"Use Emmet abbreviations\": \"Use Emmet abbreviations\",\n  \"A record does not exist for the selected site. Create one?\": \"A record does not exist for the selected site. Create one?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Podane dane logowania są niepoprawne. Sprawdź je i spróbuj ponownie.\",\n  \"Administration Area\": \"Panel Administracyjny\",\n  \"Password Reset\": \"Zmień hasło\",\n  \"Please enter a new password.\": \"Wpisz swoje hasło\",\n  \"Password\": \"Password\",\n  \"Password Restore\": \"Password Restore\",\n  \"Please enter your login to restore the password.\": \"Wpisz swój login\",\n  \"A user could not be found with a login value of ':login'\": \"Nie znaleziono użytkownika z loginem ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Wysłano wiadomość na Twój adres email z hasłem oraz instrukcjami odzyskania.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Nieprawidłowe dane zmiany hasła. Spróbuj ponownie!\",\n  \"Unable to reset your password!\": \"Nie można zmienić Twojego hasła!\",\n  \"Password has been reset. You may now sign in.\": \"Twoje hasło zostało prawidłowo zresetowane. Możesz się teraz zalogować.\",\n  \"Restore\": \"Odzyskaj\",\n  \"Reset\": \"Reset\",\n  \"Stay logged in\": \"Zapamiętaj mnie\",\n  \"Forgot password?\": \"Zapomniałeś hasła?\",\n  \"Global Editor Settings\": \"Global Editor Settings\",\n  \"Manage Widgets\": \"Zarządzaj widgetami\",\n  \"Add Widget\": \"Dodaj widget\",\n  \"Set the current layout as the default?\": \"Ustawić obecny układ jako domyślny?\",\n  \"Make Default\": \"Ustaw jako domyślny\",\n  \"Reset layout back to default?\": \"Ustawić domyślny układ?\",\n  \"Reset Layout\": \"Resetuj układ\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"proszę zaznacz\",\n  \"Width\": \"Szerokość\",\n  \"full width\": \"pełna szerokość\",\n  \"Create Widgets\": \"Create Widgets\",\n  \"not equal to\": \"not equal to\",\n  \"Light Mode\": \"Light Mode\",\n  \"Dark Mode\": \"Dark Mode\",\n  \"OS Default\": \"OS Default\",\n  \"Create a Custom Palette\": \"Create a Custom Palette\",\n  \"Custom Palette\": \"Custom Palette\",\n  \"Primary Color\": \"Podstawowy kolor\",\n  \"Secondary Color\": \"Dodatkowy kolor\",\n  \"Selection Color\": \"Selection Color\",\n  \"Nav Text\": \"Nav Text\",\n  \"Nav Background\": \"Nav Background\",\n  \"Sidebar Text\": \"Sidebar Text\",\n  \"Sidebar Background\": \"Sidebar Background\",\n  \"Sidebar Active Text\": \"Sidebar Active Text\",\n  \"Sidebar Active Background\": \"Sidebar Active Background\",\n  \"Sidebar Hover Background\": \"Sidebar Hover Background\",\n  \"Settings Text\": \"Settings Text\",\n  \"Settings Background\": \"Settings Background\",\n  \"Settings Item Background\": \"Settings Item Background\",\n  \"Settings Active Color\": \"Settings Active Color\",\n  \"Settings Active Background\": \"Settings Active Background\",\n  \"Settings Hover Background\": \"Settings Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"Ta nazwa jest pokazywana w obszarze tytułu w kokpicie.\",\n  \"App Name\": \"Nazwa aplikacji\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Ten podpis jest wyświetlany na ekranie logowania do back-endu\",\n  \"App Tagline\": \"Podpis aplikacji\",\n  \"Brand\": \"Marka\",\n  \"Upload a custom logo to use in the back-end.\": \"Wyślij własne logo do użycia w panelu administracyjnym.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Wgraj faviconę, która zostanie użyta w backendzie\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigation Logo\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Replaces the dashboard link with a custom logo in the navigation.\",\n  \"Dashboard Icon\": \"Dashboard Icon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Use a custom image for the dashboard icon (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"This message is shown on the sign in screen for the back-end.\",\n  \"Welcome Message\": \"Welcome Message\",\n  \"Login Page\": \"Login Page\",\n  \"Background Type\": \"Background Type\",\n  \"Flat Color\": \"Flat Color\",\n  \"Wallpaper\": \"Wallpaper\",\n  \"Wallpaper Size\": \"Wallpaper Size\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Cover\",\n  \"Background Wallpaper Image\": \"Background Wallpaper Image\",\n  \"Image\": \"Obraz\",\n  \"Random Autumn Images\": \"Random Autumn Images\",\n  \"Custom Image\": \"Custom Image\",\n  \"Login Page Image\": \"Login Page Image\",\n  \"Colors\": \"Kolory\",\n  \"Color Mode\": \"Color Mode\",\n  \"Color Preset\": \"Color Preset\",\n  \"Menu Style\": \"Styl menu\",\n  \"Navigation\": \"Nawigacja\",\n  \"Custom Stylesheet\": \"Niestandardowy arkusz stylów\",\n  \"Styles\": \"Style\",\n  \"Inline\": \"W linii\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"Kafelki\",\n  \"Collapsed\": \"Zwinięte\",\n  \"Icons\": \"Icons\",\n  \"Left Side\": \"Left Side\",\n  \"Add New Item\": \"Dodaj nowy element\",\n  \"Link Color\": \"Link Color\",\n  \"Current Password\": \"Current Password\",\n  \"New Password\": \"New Password\",\n  \"Current password does not match. Please try again!\": \"Current password does not match. Please try again!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Your password has expired, please create a new one for security reasons.\",\n  \"Region\": \"Region\",\n  \"Locale\": \"Język\",\n  \"Select your desired locale for language use.\": \"Wybierz język, którego chciałbyś używać.\",\n  \"Timezone\": \"Strefa czasowa\",\n  \"Adjust displayed dates to this timezone.\": \"Dopasuj wyświetlanie dat do tej strefy czasowej.\",\n  \"Code Editor\": \"Edytor kodu\",\n  \"Color Scheme\": \"Schemat kolorów\",\n  \"Word Wrap\": \"Zawijanie wierszy\",\n  \"Off\": \"Off\",\n  \"40 Characters\": \"40 Znaków\",\n  \"80 Characters\": \"80 Znaków\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"Wielkość czcionki\",\n  \"Tab Size\": \"Wielkość karty\",\n  \"Code Folding\": \"Zawijanie kodu\",\n  \"Mark begin\": \"Oznacz początek\",\n  \"Mark begin and end\": \"Oznacz początek i koniec\",\n  \"Autocompletion\": \"Autouzupełnianie\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Podstawowe autouzupełnianie (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Autouzupełnianie na żywo\",\n  \"Show gutter\": \"Pokaż gutter\",\n  \"Highlight active line\": \"Podświetl aktywne linie\",\n  \"Automatically close tags\": \"Automatycznie zamykaj tagi i specjalne znaki\",\n  \"Indent using tabs\": \"Wcięcie tabulaturą\",\n  \"Show indent guides\": \"Pokaż wskazówki dla wcięcia\",\n  \"Show invisible characters\": \"Pokaż niewidzialne znaki\",\n  \"Show print margin\": \"Pokaż margines wydruku\",\n  \"Custom styles to include in the HTML editor.\": \"Niestandardowe style do dołączenia w edytorze HTML.\",\n  \"Markup Styles\": \"Style znaczników\",\n  \"Paragraph Formats\": \"Paragraph Formats\",\n  \"Markup Classes\": \"Klasy znaczników\",\n  \"Tag Name\": \"Nazwa taga\",\n  \"Label\": \"Etykieta\",\n  \"Paragraph\": \"Paragraf\",\n  \"Class Name\": \"Nazwa klasy\",\n  \"Link\": \"Link\",\n  \"Table\": \"Tabela\",\n  \"Table Cell\": \"Komórka Tabeli\",\n  \"Allowed Tags\": \"Dozwolone znaczniki\",\n  \"The list of allowed tags.\": \"Lista dozwolonych znaczników.\",\n  \"Markup Tags\": \"Znaczniki\",\n  \"Allowed Empty Tags\": \"Zezwól na puste znaczniki\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Lista znaczników, które nie będą usunięte w przypadku braku zawartości.\",\n  \"Do Not Wrap Tags\": \"Nie zawijaj znaczników\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Lista znaczników, które nie powinny być zawinięte w znacznik blokowy.\",\n  \"Remove Tags\": \"Usuń znaczniki\",\n  \"The list of tags that are removed together with their content.\": \"Lista znaczników, które zostaną usunięte wraz z zawartością.\",\n  \"Line Breaker Tags\": \"Tagi przełamania linii\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Lista tagów, pomiędzy którymi zostanie wstawiony znak przełamania linii.\",\n  \"Toolbar Buttons\": \"Przyciski paska narzędzi\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Przyciski domyślnie wyświetlane na pasku narzędzi Rich Editora.\",\n  \"Insert a preset toolbar button configuration\": \"Insert a preset toolbar button configuration\",\n  \"Allowed Attributes\": \"Allowed Attributes\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"The list of allowed HTML attributes, in addition to the normal allowances.\",\n  \"Enable code snippets (Tab)\": \"Włącz code snippets (Tab)\",\n  \"Title\": \"Tytuł\",\n  \"Description\": \"Opis\",\n  \"Attachment\": \"Załącznik\",\n  \"Attachment URL\": \"URL załącznika\",\n  \"Add a title and description for this attachment.\": \"Dodaj tytuł oraz opis załącznika.\",\n  \"Upload\": \"Upload\",\n  \"Are you sure?\": \"Jesteś pewien?\",\n  \"Delete Selected\": \"Delete Selected\",\n  \"Upload Error\": \"Błąd przesyłania\",\n  \"Remove File\": \"Usuń plik\",\n  \"Show Light Switch\": \"Show Light Switch\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Allow users to toggle the color mode from the navigation.\",\n  \"Create :name\": \"Stwórz :name\",\n  \"Update :name\": \"Aktualizuj :name\",\n  \"Add :name\": \"Dodaj :name\",\n  \"Link :name\": \"Dołącz :name\",\n  \"Unlink\": \"Odłącz\",\n  \"Preview :name\": \"Podgląd :name\",\n  \"Link a New :name\": \"Dołącz nowy :name\",\n  \"Add a New :name\": \"Dodaj nowy :name\",\n  \"Related :name Data\": \"Pokrewne :name dane\",\n  \":name Created\": \":name został stworzony pomyślnie\",\n  \":name Updated\": \":name został zaktualizowany pomyślnie\",\n  \":name Deleted\": \":name został usunięty pomyślnie\",\n  \":name Added\": \":name Added\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"Rekord formularza o ID :id nie został znaleziony.\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Podgląd strony\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Zarządzaj administratorami, użytkownikami, grupami i uprawnieniami.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Personalizuj panel administracyjny\",\n  \"Customize the administration area such as name, colors and logo.\": \"Personalizuj panel administracyjny, kolory, logo.\",\n  \"Editor Settings\": \"Ustawienia edytora kodu\",\n  \"Change the global editor preferences.\": \"Personalizuj ustawienia edytora kodu, takie jak wielkość czcionki oraz kolorostyka.\",\n  \"My Account\": \"Moje konto\",\n  \"Update your account details such as name, email address and password.\": \"Zmień informacje o koncie jak imię, email czy hasło.\",\n  \"Backend Preferences\": \"Ustawienia Back-end\",\n  \"Manage your account preferences such as desired language.\": \"Zarządzaj swoimi ustawieniami konta, jak język panelu.\",\n  \"security login\": \"security login\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create\": \"Utwórz\",\n  \"Create & Close\": \"Create & Close\",\n  \"Creating :name...\": \"Creating :name...\",\n  \"Save & Close\": \"Save & Close\",\n  \"Saving :name...\": \"Saving :name...\",\n  \"Delete this record?\": \"Delete this record?\",\n  \"Deleting :name...\": \"Deleting :name...\",\n  \"Loading...\": \"Loading...\",\n  \"Complete\": \"Complete\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Unknown column\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Ignore this column\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Created\",\n  \"Updated\": \"Updated\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Warnings\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Skipped Rows\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"File not found\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\",\n  \"Created At\": \"Data utworzenia\",\n  \"Updated At\": \"Data aktualizacji\",\n  \"Deleted At\": \"Data usunięcia\",\n  \"Created By\": \"Utworzone przez\",\n  \"Updated By\": \"Zaktualizowane przez\",\n  \"Deleted By\": \"Usunięte przez\",\n  \"Includes\": \"Zawiera\",\n  \"Excludes\": \"Nie zawiera\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Tryb debugowania jest włączony. To nie jest zalecane dla środowisk produkcyjnych.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Rozszerzenie PHP :name nie jest zainstalowane. Prosimy o instalację i aktywację rozszerzenia.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Plugin :name jest wymagany, ale nie został zainstalowany.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"PHP nie może zapisać danych w katalogu :name lub jego podkatalogach. Prosimy o przydzielenie odpowiednich uprawnień na serwerze.\",\n  \"Manage Roles\": \"Zarządzaj Rolami\",\n  \"Manage Groups\": \"Grupy\",\n  \"Customize Backend\": \"Personalizuj back-end\"\n}"
  },
  {
    "path": "modules/backend/lang/pt-br/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Tipo de campo inválido :type.',\n    'options_method_invalid_model' => 'O atributo \":field\" não resolve a classe. Tente especificar as opções do método para o modelo :model.',\n    'options_method_not_exists' => 'A classe :model deve definir um método :method() retornando opções para o campo \":field\".',\n    'colors_method_not_exists' => 'A classe de modelo :model deve definir um método :method() retornando códigos HEX de cor html para o campo de formulário \":field\".',\n  ],\n  'widget' => [\n    'not_registered' => 'Uma classe de widget com o nome \":name\" não foi definida',\n    'not_bound' => 'Um widget da classe \":name\" não foi ligado ao controlador',\n  ],\n  'page' => [\n    'untitled' => 'Sem Título',\n    'not_found' => [\n      'label' => 'Página não encontrada',\n      'help' => 'Pesquisamos e pesquisamos, mas a URL solicitada simplesmente não foi encontrada. Será que você estava procurando outra coisa?',\n      'back_link' => 'Volte para a página anterior',\n    ],\n    'access_denied' => [\n      'label' => 'Acesso negado',\n      'help' => 'Você não tem as permissões necessárias para visualizar esta página.',\n      'cms_link' => 'Retornar à área administrativa',\n    ],\n    'no_database' => [\n      'label' => 'Banco de dados ausente',\n      'help' => 'Um banco de dados é necessário para acessar o back-end. Verifique se o banco de dados está configurado e migrou antes de tentar novamente.',\n      'cms_link' => 'Retornar para a página inicial',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'O bloco \":name\" não foi encontrado.',\n    'invalid_name' => 'Nome do bloco é inválido: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Nome do manipulador AJAX inválido: :name.',\n    'not_found' => 'Manipulador AJAX \\':name\\' não foi encontrado.',\n  ],\n  'account' => [\n    'impersonate' => 'Representar usuário',\n    'impersonate_confirm' => 'Tem certeza de que deseja se passar por esse usuário? Você pode reverter para o seu estado original fazendo logout.',\n    'impersonate_success' => 'Você está se passando por esse usuário',\n    'impersonate_working' => 'Representando...',\n    'impersonating' => 'Representando :full_name',\n    'stop_impersonating' => 'Pare de representar',\n    'unsuspend' => 'Reativar',\n    'unsuspend_confirm' => 'Tem certeza de que deseja reativar este usuário?',\n    'unsuspend_success' => 'O usuário foi reativado.',\n    'unsuspend_working' => 'Reativando...',\n    'signed_in_as' => 'Assinado como :full_name',\n    'sign_out' => 'Sair',\n    'login_prompt' => 'Bem vindo de volta! Por favor, faça login na sua conta para continuar.',\n    'login_placeholder' => 'Usuário',\n    'password_placeholder' => 'Senha',\n    'enter_email' => 'Entre com seu email',\n    'email_placeholder' => 'E-mail',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancelar',\n    'delete' => 'Excluir',\n    'ok' => 'Ok',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Painel',\n    'widget_inspector_title' => 'Configurações do widget',\n    'widget_inspector_description' => 'Configurar widget de relatório',\n    'widget_columns_label' => 'Largura :columns',\n    'widget_columns_description' => 'Largura do widget, um número entre 1 e 10.',\n    'widget_columns_error' => 'Por favor, entre com a largura do widget. Deve ser um número entre 1 e 10.',\n    'columns' => '{1} coluna|[2,Inf] colunas',\n    'widget_new_row_label' => 'Forçar uma nova linha',\n    'widget_new_row_description' => 'Colocar o widget em uma nova linha.',\n    'widget_title_label' => 'Título do widget',\n    'widget_title_error' => 'O título do widget é necessário.',\n    'reset_layout_success' => 'Painel foi reinicializado',\n    'make_default_success' => 'Painel atual agora é o padrão',\n    'collapse_all' => 'Recolher tudo',\n    'expand_all' => 'Expandir tudo',\n    'status' => [\n      'widget_title_default' => 'Status do Sistema',\n      'update_available' => '{0} atualizações disponíveis!|{1} atualização disponível!|[2,Inf] atualizações disponíveis!',\n      'updates_pending' => 'Atualizações de softwares pendentes',\n      'updates_nil' => 'Software já está atualizado',\n      'updates_link' => 'Atualizar',\n      'warnings_pending' => 'Algumas questões precisam de atenção',\n      'warnings_nil' => 'Nenhuma advertência para exibir',\n      'warnings_link' => 'Visualizar',\n      'core_build' => 'Versão do sistema',\n      'event_log' => 'Registro de eventos',\n      'request_log' => 'Registro de requisições',\n      'app_birthday' => 'No ar desde',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Seja bem-vindo',\n      'welcome_back_name' => 'Seja bem-vindo no seu retorno ao :app, :name.',\n      'welcome_to_name' => 'Seja bem-vindo ao :app, :name.',\n      'first_sign_in' => 'Esta é a primeira vez que você acessa a área administrativa.',\n      'last_sign_in' => 'Seu último acesso foi em',\n      'view_access_logs' => 'Visualizar registros de acesso',\n      'nice_message' => 'Tenha um excelente dia!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrador',\n    'list_title' => 'Gerenciar administradores',\n    'new' => 'Novo administrador',\n    'first_name' => 'Nome',\n    'last_name' => 'Sobrenome',\n    'full_name' => 'Nome Completo',\n    'email' => 'E-mail',\n    'role_field' => 'Função',\n    'role_comment' => 'As funções definem as permissões do usuário, que podem ser substituídas no nível do usuário, na guia Permissões.',\n    'groups' => 'Grupos',\n    'groups_comment' => 'Defina a quais grupos essa pessoa pertence.',\n    'avatar' => 'Foto',\n    'password' => 'Senha',\n    'password_confirmation' => 'Confirme a senha',\n    'permissions' => 'Permissões',\n    'account' => 'Conta',\n    'superuser' => 'Super Usuário',\n    'superuser_comment' => 'Marque para liberar o acesso irrestrito para este usuário.',\n    'send_invite' => 'Enviar convite por e-mail',\n    'send_invite_comment' => 'Marque para enviar um convite por e-mail',\n    'delete_confirm' => 'Você realmente deseja apagar este administrador?',\n    'return' => 'Retornar à lista de administradores',\n    'allow' => 'Permitir',\n    'inherit' => 'Herdar',\n    'deny' => 'Negar',\n    'activated' => 'Ativado',\n    'last_login' => 'Último login',\n    'created_at' => 'Criado em',\n    'updated_at' => 'Atualizado em',\n    'deleted_at' => 'Excluído em',\n    'show_deleted' => 'Mostrar excluído',\n    'group' => [\n      'name' => 'Grupo',\n      'name_comment' => 'O nome é exibido na lista de grupos ao se criar/alterar um administrador.',\n      'name_field' => 'Nome',\n      'description_field' => 'Descrição',\n      'is_new_user_default_field_label' => 'Grupo padrão',\n      'is_new_user_default_field_comment' => 'Adicionar novos administradores a este grupo por padrão',\n      'code_field' => 'Código',\n      'code_comment' => 'Insira um código exclusivo se você quiser acessá-lo com a API.',\n      'list_title' => 'Gerenciar grupos',\n      'new' => 'Novo grupo administrador',\n      'delete_confirm' => 'Você realmente deseja excluir este grupo?',\n      'return' => 'Voltar para a lista de grupos',\n      'users_count' => 'Usuários',\n    ],\n    'role' => [\n      'name' => 'Função',\n      'name_field' => 'Nome',\n      'name_comment' => 'O nome é exibido na lista de funções no formulário Administrador.',\n      'description_field' => 'Descrição',\n      'code_field' => 'Código',\n      'code_comment' => 'Digite um código exclusivo se quiser acessar o objeto de função com a API.',\n      'list_title' => 'Gerenciar Funções',\n      'new' => 'Nova Função',\n      'delete_confirm' => 'Excluir esta função de administrador?',\n      'return' => 'Retornar para lista de funções',\n      'users_count' => 'Usuários',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nenhum usuário autenticado para carregar as preferências.',\n    ],\n    'trashed_hint_title' => 'Esta conta foi excluída',\n    'trashed_hint_desc' => 'Esta conta foi excluida e não poderá ser acessada. Para restaurá-la, clique no ícone de restauração do usuário no canto inferior direito',\n  ],\n  'list' => [\n    'default_title' => 'Lista',\n    'search_prompt' => 'Buscar...',\n    'no_records' => 'Nenhum registro encontrado.',\n    'missing_model' => 'Lista usada em :class não tem um model definido.',\n    'missing_column' => 'Não existe definição de coluna para :columns.',\n    'missing_columns' => 'Lista utilizada em :class não possui colunas de lista definidas.',\n    'missing_parent_definition' => 'Comportamento de lista não possui uma definição para \\':definition\\'.',\n    'missing_definition' => 'Lista não possui uma coluna para \":field\".',\n    'behavior_not_ready' => 'Lista não foi inicializada. Confira se você chamou makeLists() no controller.',\n    'invalid_column_datetime' => 'Valor da coluna \":column\" não é um objeto DateTime, você esqueceu registrar \\\\$dates no Model?',\n    'pagination' => 'Registros exibidos: :from-:to de :total',\n    'first_page' => 'Primeira página',\n    'last_page' => 'Última página',\n    'prev_page' => 'Anterior',\n    'next_page' => 'Próxima',\n    'refresh' => 'Atualizar',\n    'updating' => 'Atualizando...',\n    'loading' => 'Carregando...',\n    'check' => 'Marcar',\n    'create_button' => 'Criar :name',\n    'delete_selected' => 'Excluir selecionado',\n    'delete_selected_empty' => 'Não há registros selecionados para excluir.',\n    'delete_selected_confirm' => 'Excluir os registros selecionados?',\n    'delete_selected_success' => 'Registros selecionados excluídos com sucesso.',\n    'column_switch_true' => 'Sim',\n    'column_switch_false' => 'Não',\n  ],\n  'object_list' => [\n    'prop_cant_be_empty' => 'Propriedade :property não pode estar vazia',\n    'key_value_exists' => 'O valor já está definido: :property_value',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Clique em %s ou arraste um arquivo para cá para enviar',\n  ],\n  'form' => [\n    'create_title' => 'Novo :name',\n    'update_title' => 'Editar :name',\n    'preview_title' => 'Visualizar :name',\n    'restore_success' => ':name restaurado',\n    'reset_success' => 'Reinicialização completada',\n    'missing_id' => 'O ID do registro não foi fornecido',\n    'missing_tab' => 'Falta uma definição de aba válida.',\n    'missing_model' => 'Formulário utilizado na classe :class não tem um model definido.',\n    'missing_definition' => 'Formulário não contém um campo \":field\".',\n    'action_confirm' => 'Você tem certeza?',\n    'create' => 'Criar',\n    'create_and_close' => 'Criar e sair',\n    'creating' => 'Criando...',\n    'creating_name' => 'Criando :name...',\n    'save' => 'Salvar',\n    'save_and_close' => 'Salvar e fechar',\n    'saving' => 'Salvando...',\n    'saving_name' => 'Salvando :name...',\n    'delete' => 'Apagar',\n    'deleting' => 'Apagando...',\n    'confirm_delete' => 'Você realmente deseja apagar este registro?',\n    'confirm_delete_multiple' => 'Você realmente deseja apagar os registros selecionados?',\n    'deleting_name' => 'Apagando :name...',\n    'restore' => 'Restaurar',\n    'restoring' => 'Restaurando',\n    'confirm_restore' => 'Tem certeza de que deseja restaurar este registro?',\n    'reset_default' => 'Redefinir para o padrão',\n    'resetting' => 'Redefinindo',\n    'resetting_name' => 'Redefinindo :name',\n    'undefined_tab' => 'Outros',\n    'field_off' => 'Desl',\n    'field_on' => 'Lig',\n    'add' => 'Adicionar',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancelar',\n    'close' => 'Fechar',\n    'confirm' => 'Confirmar',\n    'reload' => 'Recarregar',\n    'complete' => 'Concluído',\n    'ok' => 'Ok',\n    'or' => 'ou',\n    'confirm_tab_close' => 'Tem certeza que deseja fechar essa aba? As alterações que não foram salvas serão perdidas',\n    'behavior_not_ready' => 'O formulário não foi inicializado. Confira se você chamou initForm() no controller.',\n    'preview_no_files_message' => 'Os arquivos não foram carregados',\n    'preview_no_media_message' => 'Não há mídia selecionada.',\n    'preview_no_record_message' => 'Nenhum registro selecionado.',\n    'select' => 'Selecionar',\n    'select_all' => 'Selecionar tudo',\n    'select_none' => 'Selecione nenhum',\n    'insert_row' => 'Inserir linha',\n    'insert_row_below' => 'Inserir linha abaixo',\n    'delete_row' => 'Excluir linha',\n    'concurrency_file_changed_title' => 'O arquivo foi alterado',\n    'concurrency_file_changed_description' => 'O arquivo que você está editando foi alterado em disco. Você pode recarregá-lo e perder suas alterações ou sobrescrever o arquivo do disco.',\n    'return_to_list' => 'Retornar à lista',\n    'no_options_found' => 'Nenhuma opção encontrada',\n    'error' => 'Erro',\n    'toggle_full_screen' => 'Alternar para tela cheia',\n  ],\n  'tabs' => [\n    'close' => 'Fechar Aba',\n    'close_all' => 'Fechar tudo',\n    'close_others' => 'Fechar os outros',\n    'close_saved' => 'Fechar Salvo',\n    'full_screen' => 'Alternar para tela cheia',\n  ],\n  'modal' => [\n    'close' => 'Fechar',\n  ],\n  'dropdownmenu' => [\n    'go_back' => 'Voltar',\n    'close_menu' => 'Fechar Menu',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Localizar Registro',\n    'invalid_model_class' => 'A classe de modelo fornecida \":modelClass\" para o recordfinder é inválida',\n    'cancel' => 'Cancelar',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Comportamento relation não tem uma configuração para \":config\".',\n    'missing_definition' => 'Comportamento relation não contém uma definição para \":field\".',\n    'missing_model' => 'Comportamento relation utilizado na classe :class não possui um model definido.',\n    'invalid_action_single' => 'Essa ação não pode ser realizada num relacionamento singular.',\n    'invalid_action_multi' => 'Essa ação não pode ser realizada num relacionamento múltiplo.',\n    'help' => 'Clique em um item para adicionar',\n    'add' => 'Adicionar',\n    'link_selected' => 'Vincular selecionado',\n    'cancel' => 'Cancelar',\n    'close' => 'Fechar',\n    'create' => 'Criar',\n    'update' => 'Atualizar',\n    'preview' => 'Visualizar',\n    'remove_name' => 'Remover :name',\n    'delete_name' => 'Excluir :name',\n    'link' => 'Vincular',\n    'unlink_name' => 'Desvincular :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Reordenar registros',\n    'no_records' => 'Não há registros disponíveis para ordenar.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \":class\" com ID :id não foi encontrado',\n    'missing_id' => 'ID do registro não especificado.',\n    'missing_relation' => 'Model \":class\" não contém uma definição para o relacionamento \":relation\".',\n    'missing_method' => 'Model \":class\" não contém o método \":method\".',\n    'invalid_class' => 'Model :model utilizado na classe :class não é válido. É necessário herdar a classe \\\\Model.',\n    'mass_assignment_failed' => 'Falha na atribuição em massa do atributo \":attribute\" do Model.',\n  ],\n  'warnings' => [\n    'tips' => 'Dicas de configuração do sistema',\n    'tips_description' => 'Há itens que demandam atenção para configurar o sistema corretamente.',\n    'decompileBackendAssets' => 'Os assets no Backend estão atualmente descompilados. Isso não é recomendado para instalações de produção.',\n  ],\n  'editor' => [\n    'preview' => 'Prévia',\n    'markup_tag' => 'Tag de marcação',\n    'toolbar_options' => 'Opções da barra de ferramentas',\n    'toolbar_buttons_presets' => [\n      'default' => 'Padrão',\n      'minimal' => 'Mínimo',\n      'full' => 'Completo',\n    ],\n    'paragraph_formats_comment' => 'As opções que aparecerão na lista de Formatos do parágrafo.',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Minhas Configurações',\n    'menu_description' => 'Configurações relacionadas à sua conta de administrador',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Cor de destaque',\n    'menu_mode_inline_no_icons' => 'Em linha (sem ícones)',\n  ],\n  'backend_preferences' => [],\n  'filter' => [\n    'all' => 'todos',\n    'options_method_not_exists' => 'A classe modelo :model deve definir um método :method() retornando opções para o filtro \\':filter\\'.',\n    'options_static_method_invalid_value' => 'O método estático \\':method()\\' na :class não retornou um array de opções válidas.',\n    'date_all' => 'todo o período',\n    'number_all' => 'todos os números',\n  ],\n  'import_export' => [\n    'row' => 'Linha :row',\n    'export_error' => 'Erro de exportação',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1250' => 'Windows-1250 (CP1250, Central and Eastern European)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Gerenciar mídias',\n  ],\n  'mediafinder' => [\n    'label' => 'Localizador de Mídia',\n    'default_prompt' => 'Clique no botão %s para localizar um arquivo de mídia',\n    'no_image' => 'A imagem não foi encontrada',\n    'not_an_image' => 'O arquivo selecionado não é uma imagem',\n    'click_to_select_file' => 'Clique para selecionar um arquivo',\n  ],\n  'media' => [\n    'menu_label' => 'Mídias',\n    'upload' => 'Enviar',\n    'move' => 'Mover',\n    'delete' => 'Excluir',\n    'add_folder' => 'Adicionar pasta',\n    'search' => 'Buscar',\n    'display' => 'Exibir',\n    'filter_everything' => 'Tudo',\n    'filter_images' => 'Imagens',\n    'filter_video' => 'Vídeos',\n    'filter_audio' => 'Áudios',\n    'filter_documents' => 'Documentos',\n    'library' => 'Biblioteca',\n    'size' => 'Tamanho',\n    'title' => 'Título',\n    'last_modified' => 'Última modificação',\n    'public_url' => 'URL pública',\n    'click_here' => 'Clique aqui',\n    'thumbnail_error' => 'Erro ao gerar a miniatura.',\n    'return_to_parent' => 'Retornar ao diretório anterior',\n    'return_to_parent_label' => 'Vá para ..',\n    'nothing_selected' => 'Nenhum item selecionado.',\n    'multiple_selected' => 'Múltiplos itens selecionados.',\n    'uploading_file_num' => 'Enviando :number arquivo(s)...',\n    'uploading_complete' => 'Envio finalizado',\n    'uploading_error' => 'Falha no envio',\n    'type_blocked' => 'O tipo de arquivo utilizado é bloqueado por motivos de segurança.',\n    'order_by' => 'Ordenar por',\n    'direction' => 'Direção',\n    'direction_asc' => 'Ascendente',\n    'direction_desc' => 'Descendente',\n    'folder' => 'Pasta',\n    'no_files_found' => 'Nenhum arquivo encontrado.',\n    'delete_empty' => 'Por favor, selecione um item para excluir.',\n    'delete_confirm' => 'Você deseja mesmo excluir o(s) arquivo(s) selecionado(s)?',\n    'error_renaming_file' => 'Erro ao renomear o arquivo.',\n    'new_folder_title' => 'Nova pasta',\n    'folder_name' => 'Nome da pasta',\n    'error_creating_folder' => 'Erro ao criar a pasta',\n    'folder_or_file_exist' => 'Uma pasta ou arquivo já existe com o nome especificado.',\n    'move_empty' => 'Por favor, selecione um item para mover.',\n    'move_popup_title' => 'Mover arquivos ou pastas',\n    'move_destination' => 'Pasta destino',\n    'please_select_move_dest' => 'Por favor, selecione a pasta destino.',\n    'move_dest_src_match' => 'Por favor, selecione outra pasta destino.',\n    'empty_library' => 'A biblioteca de mídias está vazia. Envie arquivos ou crie pastas para iniciar.',\n    'insert' => 'Inserir',\n    'crop_and_insert' => 'Cortar & Inserir',\n    'select_single_image' => 'Por favor, selecione uma única imagem.',\n    'selection_not_image' => 'O arquivo selecionado não é uma imagem.',\n    'restore' => 'Desfazer todas as alterações',\n    'resize' => 'Redimensionar...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Proporção fixa',\n    'selection_mode_fixed_size' => 'Tamanho fixo',\n    'height' => 'Altura',\n    'width' => 'Largura',\n    'selection_mode' => 'Modo de seleção',\n    'resize_image' => 'Redimensionar imagem',\n    'image_size' => 'Tamanho da imagem:',\n    'selected_size' => 'Selecionado:',\n  ],\n  'table' => [\n    'add_item' => 'Adicionar item',\n  ],\n  'dictionary' => [\n    'key_required' => 'O campo Chave é obrigatório',\n    'value_required' => 'O campo Valor é obrigatório',\n  ],\n  'uploader' => [\n    'uploading' => 'Enviando arquivos',\n    'complete' => 'Envio concluído',\n  ],\n  'richeditor' => [\n    'upload_from_computer' => 'Carregar do computador',\n    'embedding_code' => 'Código incorporado',\n    'url_required' => 'A URL é obrigatória',\n    'url_validation' => 'A URL deve começar com http:// ou https://',\n    'add_image' => 'Inserir Imagem',\n    'add_video' => 'Inserir Vídeo',\n    'add_audio' => 'Inserir Áudio',\n    'add_file' => 'Inserir Arquivo',\n    'embedding_code_required' => 'O código incorporado é obrigatório',\n    'embedding_code_invalid' => 'Insira um código de incorporação HTML válido',\n    'embedding_code_invalid_title' => 'Código inválido',\n    'browse' => 'Procurar na Gerenciador de Mídia',\n    'by_url' => 'Por URL',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/pt-br.json",
    "content": "{\n  \"Cancel\": \"Cancelar\",\n  \"You are viewing as\": \"Você está visualizando como\",\n  \"Preview Role\": \"Função de visualização\",\n  \"This lets you test the actions this role can perform.\": \"Isso permite que você teste as ações que esta função pode executar.\",\n  \"View As Role\": \"Ver como função\",\n  \"Return to Role Settings\": \"Retornar às configurações da função\",\n  \"Password must have a minimum of length of :min characters\": \"A senha deve ter um comprimento mínimo de: min caracteres\",\n  \"Password must contain at least one uppercase character.\": \"A senha deve conter pelo menos um caractere maiúsculo.\",\n  \"Password must contain at least one lowercase character.\": \"A senha deve conter pelo menos um caractere minúsculo.\",\n  \"Password must contain at least one number.\": \"A senha deve conter pelo menos um número.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"A senha deve conter pelo menos um caractere não alfanumérico.\",\n  \"Welcome to your Administration Area, :name\": \"Bem-vindo à sua área de administração,: nome\",\n  \"Duplicate\": \"Duplicar\",\n  \"Expand\": \"Expandir\",\n  \"Collapse\": \"Colapsar\",\n  \"Move Up\": \"Mover para cima\",\n  \"Move Down\": \"Mover para baixo\",\n  \"Remove\": \"Remover\",\n  \"Manage Item\": \"Gerenciar Item\",\n  \"Clear Filters\": \"Limpar Filtros\",\n  \"Filter Setup\": \"Configuração do filtro\",\n  \"Apply\": \"Aplicar\",\n  \"Clear\": \"Limpar\",\n  \"is equal to\": \"é igual a\",\n  \"is between\": \"está entre\",\n  \"contains\": \"contém\",\n  \"is before\": \"é antes\",\n  \"is after\": \"é depois\",\n  \"is greater than\": \"é maior que\",\n  \"is less than\": \"é menor do que\",\n  \"1. Export output format\": \"1. Formato de saída da exportação\",\n  \"File Format\": \"Formato do arquivo\",\n  \"Delimiter Character\": \"Caracter delimitador\",\n  \"Enclosure Character\": \"Caracter qualificador\",\n  \"Escape Character\": \"Caracter de escape\",\n  \"2. Select columns to export\": \"2. Selecione colunas para exportar\",\n  \"Columns\": \"Colunas\",\n  \"3. Set export options\": \"3. Definir opções de exportação\",\n  \"CSV Custom\": \"Formato personalizado\",\n  \"1. Upload an Import File\": \"1. Enviar arquivo CSV\",\n  \"Import File\": \"Importar arquivo\",\n  \"File Encoding\": \"Codificação do arquivo\",\n  \"First row contains column titles\": \"Primeira linha contém títulos das colunas\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Deixe marcado se primeira linha do CSV é utilizada como títulos das colunas.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"Colunas do arquivo\",\n  \"Database fields\": \"Campos do banco de dados\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Progresso da exportação\",\n  \"Processing\": \"Processando\",\n  \"Import progress\": \"Progresso da Importação\",\n  \"Import error\": \"Erro de importação\",\n  \"Export error\": \"Erro de exportação\",\n  \"Column preview\": \"Pré-visualizar coluna\",\n  \"Column\": \"Coluna\",\n  \"Disable\": \"Desabilitar\",\n  \"Enable\": \"Habilitar\",\n  \"Delete\": \"Excluir\",\n  \"Export\": \"Exportar\",\n  \"Import\": \"Importar\",\n  \"Select Action\": \"Selecionar ação\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Por favor, crie uma nova conta para fazer login na Área Administrativa.\",\n  \"First Name\": \"Primeiro Nome\",\n  \"Last Name\": \"Último Nome\",\n  \"Email Address\": \"Endereço de Email\",\n  \"Pick a Username\": \"Escolha um nome de usuário\",\n  \"Enter New Password\": \"Insira a nova senha\",\n  \"Confirm Password\": \"Confirma senha\",\n  \"Create Account\": \"Criar Conta\",\n  \"Getting Ready\": \"Se preparando\",\n  \"Just a few more minutes\": \"Apenas mais alguns minutos\",\n  \"Migrating Database\": \"Migrando banco de dados\",\n  \"Access the Backend Panel\": \"Acesse o painel administrativo\",\n  \"View Backend During Maintenance\": \"Vizualizar painel administrativo durante a manutenção\",\n  \"Perform Software Updates\": \"Realizar atualizações de software\",\n  \"In Maintenance\": \"Em manutenção\",\n  \"The site is currently in maintenance mode, please check back later.\": \"O site está atualmente em manutenção, por favor volte mais tarde.\",\n  \"Dashboard\": \"Painel\",\n  \"Administrators\": \"Administradores\",\n  \"Manage Admins\": \"Gerenciar Administradores\",\n  \"Create Admins\": \"Criar Administradores\",\n  \"Moderate Admins\": \"Moderar Administradores\",\n  \"Manage account suspension and ban admin accounts\": \"Gerenciar suspensão de conta e banir contas de administradores\",\n  \"Role Permissions\": \"Gerenciar Funções\",\n  \"Team Groups\": \"Grupos\",\n  \"Manage Other Admins\": \"Gerenciar outros administradores\",\n  \"Allow users to reset passwords and update emails.\": \"Permitir que os usuários redefinam senhas e atualizem e-mails.\",\n  \"Delete Admins\": \"Excluir administradores\",\n  \"Preferences\": \"Preferências\",\n  \"Settings\": \"Configurações\",\n  \"Background Color\": \"Cor de fundo\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Permitir que os usuários criem novas funções e editem ou excluam funções inferiores à sua função mais alta.\",\n  \"Save Changes\": \"Salvar alterações\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Este registro mostra a lista de acessos dos administradores. Os registros são mantidos por um período de :days dias.\",\n  \"Access Log\": \"Registro de Acesso\",\n  \"View a list of successful back-end user sign ins.\": \"Veja a lista de acessos à administração.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Data & Hora\",\n  \"Type\": \"Tipo\",\n  \"IP address\": \"Endereço IP\",\n  \"Username\": \"Usuário\",\n  \"Login\": \"Entrar\",\n  \"First name\": \"Nome\",\n  \"Last name\": \"Sobrenome\",\n  \"Email\": \"E-mail\",\n  \"A custom schema is used for this file format.\": \"Um esquema personalizado é usado para este formato de arquivo.\",\n  \"Select\": \"Selecionar\",\n  \"Replace\": \"Substituir\",\n  \"and\": \"e\",\n  \"Go\": \"Ir\",\n  \"Go to page\": \"Ir para página\",\n  \"Copy to Clipboard\": \"Copiar para área de transferência\",\n  \"Reveal Contents\": \"Revelar conteúdo\",\n  \"Selected Site\": \"Site Selecionado\",\n  \"Use Emmet abbreviations\": \"Usar abreviações Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Não existe um registro para o site selecionado. Deseja criar um?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Os dados digitados não correspondem aos nossos registros. Por favor, verifique e tente novamente.\",\n  \"Administration Area\": \"Área Administrativa\",\n  \"Password Reset\": \"Redefinir sua senha\",\n  \"Please enter a new password.\": \"Entre com uma nova senha\",\n  \"Password\": \"Senha\",\n  \"Password Restore\": \"Restaurar senha\",\n  \"Please enter your login to restore the password.\": \"Entre com seu nome de usuário\",\n  \"A user could not be found with a login value of ':login'\": \"O usuário \\\":login\\\" não foi encontrado\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Um e-mail com instruções para redefinir sua senha foi enviado ao seu endereço de e-mail.\",\n  \"Invalid password reset data supplied. Please try again!\": \"A senha redefinida é inválida. Por favor, tente de novo!\",\n  \"Unable to reset your password!\": \"Falha ao redefinir sua senha!\",\n  \"Password has been reset. You may now sign in.\": \"Sua senha foi redefinida com sucesso. Você já pode entrar novamente.\",\n  \"Restore\": \"Restaurar\",\n  \"Reset\": \"Redefinir\",\n  \"Stay logged in\": \"Permaneça logado\",\n  \"Forgot password?\": \"Esqueceu sua senha?\",\n  \"Global Editor Settings\": \"Configurações globais do editor\",\n  \"Manage Widgets\": \"Gerenciar widget\",\n  \"Add Widget\": \"Adicionar widget\",\n  \"Set the current layout as the default?\": \"Definir o painel atual como padrão?\",\n  \"Make Default\": \"Definir como padrão\",\n  \"Reset layout back to default?\": \"Reiniciar o painel para a configuração padrão?\",\n  \"Reset Layout\": \"Reiniciar painel\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"por favor, selecione\",\n  \"Width\": \"Largura\",\n  \"full width\": \"Largura total\",\n  \"Create Widgets\": \"Criar widget\",\n  \"not equal to\": \"diferente de\",\n  \"Light Mode\": \"Modo Claro\",\n  \"Dark Mode\": \"Modo Escuro\",\n  \"OS Default\": \"Padrão do SO\",\n  \"Create a Custom Palette\": \"Criar uma Paleta Personalizada\",\n  \"Custom Palette\": \"Paleta personalizada\",\n  \"Primary Color\": \"Cor primária\",\n  \"Secondary Color\": \"Cor secundária\",\n  \"Selection Color\": \"Cor da Seleção\",\n  \"Nav Text\": \"Texto da navegação\",\n  \"Nav Background\": \"Fundo de Navegação\",\n  \"Sidebar Text\": \"Texto da barra lateral\",\n  \"Sidebar Background\": \"Fundo da Barra Lateral\",\n  \"Sidebar Active Text\": \"Texto Ativo da Barra Lateral\",\n  \"Sidebar Active Background\": \"Fundo da Barra Lateral Ativa\",\n  \"Sidebar Hover Background\": \"Fundo da Barra Lateral ao Passar o Mouse\",\n  \"Settings Text\": \"Texto de Configurações\",\n  \"Settings Background\": \"Fundo das Configurações\",\n  \"Settings Item Background\": \"Fundo do Item das Configurações\",\n  \"Settings Active Color\": \"Cor Ativa das Configurações\",\n  \"Settings Active Background\": \"Fundo das Configurações Ativa\",\n  \"Settings Hover Background\": \"Fundo das Configurações ao Passar o Mouse\",\n  \"This name is shown in the title area of the back-end.\": \"Este nome é mostrado no título da área administrativa.\",\n  \"App Name\": \"Nome do Aplicativo\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Esta frase é mostrada na tela de login administrativo.\",\n  \"App Tagline\": \"Slogan do Aplicativo\",\n  \"Brand\": \"Marca\",\n  \"Upload a custom logo to use in the back-end.\": \"Fazer upload de uma logo para usar na área administrativa.\",\n  \"Logo\": \"Logotipo\",\n  \"Upload a custom favicon to use in the back-end\": \"Carregar um favicon personalizado para usar no back-end\",\n  \"Favicon\": \"Ícone do Site\",\n  \"Navigation Logo\": \"Logotipo de Navegação\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Substitui o link do painel por um logotipo personalizado na navegação.\",\n  \"Dashboard Icon\": \"Ícone do Painel\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Use uma imagem personalizada para o ícone do painel (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Essa mensagem é exibida na tela de login do painel\",\n  \"Welcome Message\": \"Mensagem de boas-vindas\",\n  \"Login Page\": \"Página de login\",\n  \"Background Type\": \"Tipo de Fundo\",\n  \"Flat Color\": \"Cor plana\",\n  \"Wallpaper\": \"Papel de parede\",\n  \"Wallpaper Size\": \"Tamanho do papel de parede\",\n  \"Auto\": \"Automático\",\n  \"Cover\": \"Capa\",\n  \"Background Wallpaper Image\": \"Imagem de fundo\",\n  \"Image\": \"Imagem\",\n  \"Random Autumn Images\": \"Imagens aleatórias de outono\",\n  \"Custom Image\": \"Imagem customizada\",\n  \"Login Page Image\": \"Imagem da página de login\",\n  \"Colors\": \"Cores\",\n  \"Color Mode\": \"Modo de cor\",\n  \"Color Preset\": \"Predefinição de cor\",\n  \"Menu Style\": \"Estilo de menu\",\n  \"Navigation\": \"Navegação\",\n  \"Custom Stylesheet\": \"Folha de estilo personalizada\",\n  \"Styles\": \"Estilos\",\n  \"Inline\": \"Em linha\",\n  \"Text\": \"Texto\",\n  \"Tiles\": \"Blocos\",\n  \"Collapsed\": \"Colapsados\",\n  \"Icons\": \"Ícones\",\n  \"Left Side\": \"Lado esquerdo\",\n  \"Add New Item\": \"Adicionar novo item\",\n  \"Link Color\": \"Cor do link\",\n  \"Current Password\": \"Senha atual\",\n  \"New Password\": \"Nova senha\",\n  \"Current password does not match. Please try again!\": \"Sua senha não coincide. Por favor, tente novamente!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Sua senha expirou, por favor crie uma nova por motivos de segurança.\",\n  \"Region\": \"Região\",\n  \"Locale\": \"Idioma\",\n  \"Select your desired locale for language use.\": \"Selecione o idioma de sua preferência.\",\n  \"Timezone\": \"Fuso horário\",\n  \"Adjust displayed dates to this timezone.\": \"Ajustar datas exibidas para este Fuso horário.\",\n  \"Code Editor\": \"Editor de código\",\n  \"Color Scheme\": \"Esquema de cores\",\n  \"Word Wrap\": \"Quebra de linha\",\n  \"Off\": \"Desligado\",\n  \"40 Characters\": \"40 caracteres\",\n  \"80 Characters\": \"80 caracteres\",\n  \"Fluid\": \"Fluido\",\n  \"Font Size\": \"Tamanho da fonte\",\n  \"Tab Size\": \"Tamanho do espaçamento\",\n  \"Code Folding\": \"Código flexível\",\n  \"Mark begin\": \"Marca de início\",\n  \"Mark begin and end\": \"Marca de início e fim\",\n  \"Autocompletion\": \"Autocompletar\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Autocompletar básico (Ctrl + Espaço)\",\n  \"Live Autocompletion\": \"Autocompletar em tempo real\",\n  \"Show gutter\": \"Mostrar numeração de linhas\",\n  \"Highlight active line\": \"Destaque na linha ativa\",\n  \"Automatically close tags\": \"Auto completar tags e caracteres especiais\",\n  \"Indent using tabs\": \"Recuo usando guias\",\n  \"Show indent guides\": \"Exibir guias de indentação\",\n  \"Show invisible characters\": \"Mostrar caracteres invisíveis\",\n  \"Show print margin\": \"Exibir margem de impressão\",\n  \"Custom styles to include in the HTML editor.\": \"Estilos personalizados para incluir no editor HTML.\",\n  \"Markup Styles\": \"Estilos de marcação\",\n  \"Paragraph Formats\": \"Formatos de parágrafo\",\n  \"Markup Classes\": \"Classes de marcação\",\n  \"Label\": \"Rótulo\",\n  \"Paragraph\": \"Parágrafo\",\n  \"Class Name\": \"Nome da classe\",\n  \"Link\": \"Link\",\n  \"Table\": \"Tabela\",\n  \"Table Cell\": \"Célula de tabela\",\n  \"Allowed Tags\": \"Etiquetas permitidas\",\n  \"The list of allowed tags.\": \"Lista de etiquetas permitidas.\",\n  \"Markup Tags\": \"Etiquetas de marcação\",\n  \"Allowed Empty Tags\": \"Permitir etiquetas vazias\",\n  \"The list of tags that are not removed when they have no content inside.\": \"A lista de etiquetas não é removida quando não há conteúdo.\",\n  \"Do Not Wrap Tags\": \"Não agrupe as etiquetas\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Lista de etiquetas que não devem ser agrupadas.\",\n  \"Remove Tags\": \"Excluir etiqueta\",\n  \"The list of tags that are removed together with their content.\": \"Lista de etiquetas que serão exclídas juntas com seu conteúdo.\",\n  \"Line Breaker Tags\": \"Tags de quebra de linha\",\n  \"The list of tags that are used to place a line breaker element between.\": \"A lista de tags usadas para colocar um elemento em quebra de linha.\",\n  \"Toolbar Buttons\": \"Botões da barra de ferramentas\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Os botões da barra de ferramentas a serem exibidos no Rich Editor por padrão.\",\n  \"Insert a preset toolbar button configuration\": \"Insira uma configuração predefinida de botãos na barra de ferramentas:\",\n  \"Allowed Attributes\": \"Atributos permitidos\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \":ista de atributos HTML permitidos, além das permissões normais.\",\n  \"Enable code snippets (Tab)\": \"Habilitar trechos de códigos (Tab)\",\n  \"Title\": \"Título\",\n  \"Description\": \"Descrição\",\n  \"Attachment\": \"Anexo\",\n  \"Attachment URL\": \"Anexar URL\",\n  \"Add a title and description for this attachment.\": \"Adicione um título e descrição a este anexo.\",\n  \"Upload\": \"Carregar\",\n  \"Are you sure?\": \"Você tem certeza?\",\n  \"Delete Selected\": \"Excluir selecionados\",\n  \"Upload Error\": \"Erro ao enviar\",\n  \"Remove File\": \"Remover arquivo\",\n  \"Show Light Switch\": \"Show Light Switch\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Permitir que os usuários alternem o modo de cor da navegação.\",\n  \"Create :name\": \"Criar :name\",\n  \"Update :name\": \"Atualizar :name\",\n  \"Add :name\": \"Adicionar :name\",\n  \"Link :name\": \"Vincular :name\",\n  \"Unlink\": \"Desvincular\",\n  \"Preview :name\": \"Visualizar :name\",\n  \"Link a New :name\": \"Vincular um novo :name\",\n  \"Add a New :name\": \"Adicionar um(a) novo(a) :name\",\n  \"Related :name Data\": \"Dados de :name relacionado\",\n  \":name Created\": \":name foi criado com sucesso\",\n  \":name Updated\": \":name foi atualizado com sucesso\",\n  \":name Deleted\": \":name foi apagado com sucesso\",\n  \":name Added\": \":name Adicionado(a)\",\n  \":name Linked\": \":name Vinculado(a)\",\n  \":name Removed\": \":name Removido(a)\",\n  \":name Unlinked\": \":name Desvinculado(a)\",\n  \"Form record with an ID of :id could not be found.\": \"Nenhum registro encontrado com o ID :id\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Visualizar a página\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Gerenciar administradores, grupos e permissões.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Personalização\",\n  \"Customize the administration area such as name, colors and logo.\": \"Personalizar detalhes da área administrativa, tais como título, cores e logo.\",\n  \"Editor Settings\": \"Definições do Editor\",\n  \"Change the global editor preferences.\": \"Gerenciar configurações do editor.\",\n  \"My Account\": \"Minha Conta\",\n  \"Update your account details such as name, email address and password.\": \"Atualizar detalhes da sua conta, como nome, e-mail e senha.\",\n  \"Backend Preferences\": \"Preferências da Administração\",\n  \"Manage your account preferences such as desired language.\": \"Gerenciar idiomas e aparência da administração.\",\n  \"security login\": \"login de segurança\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create & Close\": \"Create & Close\",\n  \"Creating :name...\": \"Creating :name...\",\n  \"Save & Close\": \"Save & Close\",\n  \"Saving :name...\": \"Saving :name...\",\n  \"Delete this record?\": \"Delete this record?\",\n  \"Deleting :name...\": \"Deleting :name...\",\n  \"Loading...\": \"Loading...\",\n  \"Complete\": \"Complete\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Unknown column\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Ignore this column\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Created\",\n  \"Updated\": \"Updated\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Warnings\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Skipped Rows\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"File not found\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"O modo de depuração está ativado. Isso não é recomendado para instalações de produção.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"A URL do painel :name é muito genérica. Por favor, defina para algo mais exclusivo.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Uma conta com e login genérica :name foi encontrada. Por favor, renomeie esta conta de administrador.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"A extensão PHP :name não está instalada. Por favor, instale esta biblioteca para ativar a extensão.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"O plugin :name é uma dependência, mas não está instalado. Por favor, instale este plugin.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Diretório :name ou seus subdiretórios não são graváveis pelo PHP. Por favor, defina permissões de escrita para o servidor neste diretório.\"\n}"
  },
  {
    "path": "modules/backend/lang/pt-pt/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Invalid field type used :type.',\n    'options_method_invalid_model' => 'O atributo \\':field\\' não é resolvido para um modelo válidol. Tente especificar o método de opções para a classe de modelo :model explicitamente.',\n    'options_method_not_exists' => 'A classe de modelo :model deve definir um método :method() que retorne opções para o campo de formulário \\':field\\'.',\n    'colors_method_not_exists' => 'A classe de modelo :model deve definir um método :method() que retorne códigos de côr hexadecimais html para o campo de formulário\\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'Uma classe de widget com o nome \":name\" não foi registada',\n    'not_bound' => 'Um widget da classe \":name\" não foi ligado ao controlador',\n  ],\n  'page' => [\n    'untitled' => 'Sem título',\n    404 => [\n      'label' => 'Página não encontrada',\n      'help' => 'Por muito que procuremos, o URL pedido não existe. Talvez esteja à procura de outra coisa?',\n      'back_link' => 'Voltar à página anterior',\n    ],\n    'access_denied' => [\n      'label' => 'Acesso negado',\n      'help' => 'Não tem as permissões necessárias para visualizar esta página.',\n      'cms_link' => 'Regressar à área administrativa',\n    ],\n    'no_database' => [\n      'label' => 'Base de dados não existente',\n      'help' => 'Uma base de dados é necessária para acesso ao back-end. Verifique se a base dados se encontra configurada e migrada antes de tentar novamente.',\n      'cms_link' => 'Regressar á página inicial',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'O bloco parcial \":name\" não foi encontrado.',\n    'invalid_name' => 'Nome de bloco parcial inválido: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Nome de processador AJAX inválido: :name.',\n    'not_found' => 'O processador AJAX \\':name\\' não foi encontrado.',\n  ],\n  'account' => [\n    'impersonate' => 'Personificar utilizador',\n    'impersonate_confirm' => 'Tem a certeza de que quer personificar este utilizador? Pode voltar ao seu estado inicial fazendo log out.',\n    'impersonate_success' => 'Está agora a personificar este utilizador',\n    'impersonate_working' => 'A personificar...',\n    'impersonating' => 'A personificar :full_name',\n    'stop_impersonating' => 'Parar de personificar',\n    'signed_in_as' => 'Sessão iniciada como :full_name',\n    'sign_out' => 'Sair',\n    'login_prompt' => 'Bem vindo de volta! Por favor, faça login na sua conta para continuar.',\n    'login_placeholder' => 'Utilizador',\n    'password_placeholder' => 'Senha',\n    'enter_email' => 'Coloque o seu email',\n    'email_placeholder' => 'E-mail',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancelar',\n    'delete' => 'Apagar',\n    'ok' => 'Ok',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Painel',\n    'widget_inspector_title' => 'Configuração de widgets',\n    'widget_inspector_description' => 'Configurar o widget',\n    'widget_columns_label' => 'Largura :columns',\n    'widget_columns_description' => 'A largura do widget, um número entre 1 e 12.',\n    'widget_columns_error' => 'Por favor introduza a largura do widget como um número entre 1 e 12.',\n    'columns' => '{1} coluna|[2,Inf] colunas',\n    'widget_new_row_label' => 'Forçar nova linha',\n    'widget_new_row_description' => 'Pôr o widget numa linha nova.',\n    'widget_title_label' => 'Título do widget',\n    'widget_title_error' => 'O título do widget é obrigatório.',\n    'reset_layout_success' => 'O layout foi reinicializado',\n    'make_default_success' => 'O layout actual é agora o pré-definido',\n    'collapse_all' => 'Contrair todos',\n    'expand_all' => 'Expandir todos ',\n    'status' => [\n      'widget_title_default' => 'Estado do Sistema',\n      'update_available' => '{0} actualizações disponíveis!|{1} actualização disponível!|[2,Inf] actualizações disponíveis!',\n      'updates_pending' => 'Actualizações de softwares pendentes',\n      'updates_nil' => 'O software já está actualizado',\n      'updates_link' => 'Actualizar',\n      'warnings_pending' => 'Algumas questões precisam de atenção',\n      'warnings_nil' => 'Nenhuma advertência para mostrar',\n      'warnings_link' => 'Visualizar',\n      'core_build' => 'Versão do sistema',\n      'event_log' => 'Registo de eventos',\n      'request_log' => 'Registo de requisições',\n      'app_birthday' => 'No ar desde',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Bem-vindo',\n      'welcome_back_name' => 'Seja bem vindo de volta ao :app, :name.',\n      'welcome_to_name' => 'Bem vindo ao :app, :name.',\n      'first_sign_in' => 'Esta é a primeira vez que acede à área administrativa.',\n      'last_sign_in' => 'O último acesso foi em',\n      'view_access_logs' => 'Visualizar registos de acesso',\n      'nice_message' => 'Tenha um excelente dia!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrador',\n    'list_title' => 'Gerir Administradores',\n    'new' => 'Novo Administrator',\n    'first_name' => 'Nome Próprio',\n    'last_name' => 'Apelido',\n    'full_name' => 'Nome Completo',\n    'email' => 'Email',\n    'role_field' => 'Papel',\n    'role_comment' => 'Papéis definem permissões de utilizador, que podem ser sobrepostas para cada utilizador no separador Permissões.',\n    'groups' => 'Grupos',\n    'groups_comment' => 'Defina os grupos a que esta conta deve pertencer. Os grupos definem permissões, que podem ser sobrepostas para cada utilizador no separador Permissões.',\n    'avatar' => 'Avatar',\n    'password' => 'Senha',\n    'password_confirmation' => 'Confirmar Senha',\n    'permissions' => 'Permissões',\n    'account' => 'Conta',\n    'superuser' => 'Super Utilizador',\n    'superuser_comment' => 'Permite accesso completo a todas as àreas do sistema para esta conta. Super utilizadores podem criar e gerir outros utilizadores.',\n    'send_invite' => 'Enviar convite por email',\n    'send_invite_comment' => 'Envia uma mensagem de boas-vindas com a informação de login e password.',\n    'delete_confirm' => 'Apagar este administrador?',\n    'return' => 'Voltar à lista de administradores',\n    'allow' => 'Permitir',\n    'inherit' => 'Herdar',\n    'deny' => 'Negar',\n    'activated' => 'Activado',\n    'last_login' => 'Última entrada',\n    'created_at' => 'Criado em',\n    'updated_at' => 'Modificado em',\n    'deleted_at' => 'Apagado em',\n    'show_deleted' => 'Mostrar apagados',\n    'group' => [\n      'name' => 'Grupo',\n      'name_comment' => 'O nome é exibido na lista de grupos ao criar/alterar um administrador.',\n      'name_field' => 'Nome',\n      'description_field' => 'Descrição',\n      'is_new_user_default_field_label' => 'Grupo padrão',\n      'is_new_user_default_field_comment' => 'Adicionar novos administradores a este grupo por padrão',\n      'code_field' => 'Código',\n      'code_comment' => 'Insira um código exclusivo se quiser utilizar o mesmo com a API.',\n      'list_title' => 'Gerir grupos',\n      'new' => 'Novo grupo administrador',\n      'delete_confirm' => 'Você realmente deseja apagar este grupo?',\n      'return' => 'Voltar para a lista de grupos',\n      'users_count' => 'Utilizadores',\n    ],\n    'role' => [\n      'name' => 'Papel',\n      'name_field' => 'Nome',\n      'name_comment' => 'O nome é exibido na lista de grupos ao criar/alterar um administrador.',\n      'description_field' => 'Descrição',\n      'code_field' => 'Código',\n      'code_comment' => 'Insira um código exclusivo se quiser utilizar o mesmo com a API.',\n      'list_title' => 'Gerir Papéis',\n      'new' => 'Novo Papel',\n      'delete_confirm' => 'Você realmente deseja apagar este papel?',\n      'return' => 'Voltar para a lista de papéis',\n      'users_count' => 'Utilizadores',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nenhum utilizador autenticado para carregar as preferências.',\n    ],\n    'trashed_hint_title' => 'Esta conta foi apagada',\n    'trashed_hint_desc' => 'Esta conta foi apagada e não pode iniciar sessão. Para a restaurar, clique no botão Restaurar Utilizador no canto inferior direito.',\n  ],\n  'list' => [\n    'default_title' => 'Lista',\n    'search_prompt' => 'Pesquisar...',\n    'no_records' => 'Nenhum registo encontrado.',\n    'missing_model' => 'A lista usada em :class não tem um modelo definido.',\n    'missing_column' => 'Não existe definição de coluna para :columns.',\n    'missing_columns' => 'A lista utilizada em :class não possui colunas de lista definidas.',\n    'missing_parent_definition' => 'Comportamento de lista não possui uma definição para \\':definition\\'.',\n    'missing_definition' => 'Lista não possui uma coluna para \":field\".',\n    'behavior_not_ready' => 'Lista não foi inicializada. Verifique se você chamou makeLists() no controlador.',\n    'invalid_column_datetime' => 'Valor da coluna \":column\" não é um objeto DateTime, esqueceu de referênciar \\\\$dates no modelo?',\n    'pagination' => 'Registos exibidos: :from-:to de :total',\n    'first_page' => 'Primeira página',\n    'last_page' => 'Última página',\n    'prev_page' => 'Anterior',\n    'next_page' => 'Próxima',\n    'refresh' => 'Actualizar',\n    'updating' => 'Actualizando...',\n    'loading' => 'Carregando...',\n    'check' => 'Marcar',\n    'delete_selected' => 'Apagar seleccionado',\n    'delete_selected_empty' => 'Não há registos seleccionados para apagar.',\n    'delete_selected_confirm' => 'Apagar os registos selecionados?',\n    'delete_selected_success' => 'Registos seleccionados apagados com sucesso.',\n    'column_switch_true' => 'Sim',\n    'column_switch_false' => 'Não',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Clique em %s ou arraste um ficheiro para cá para enviar',\n  ],\n  'form' => [\n    'create_title' => 'Novo :name',\n    'update_title' => 'Editar :name',\n    'preview_title' => 'Visualizar :name',\n    'restore_success' => ':name foi restaurado com sucesso',\n    'reset_success' => 'Reinicialização completa',\n    'missing_id' => 'O ID do registo não foi fornecido',\n    'missing_model' => 'Formulário utilizado na classe :class não tem um modelo definido.',\n    'missing_definition' => 'Formulário não contém um campo \":field\".',\n    'action_confirm' => 'Tem a certeza?',\n    'create' => 'Criar',\n    'create_and_close' => 'Criar e sair',\n    'creating' => 'Criando...',\n    'creating_name' => 'Criando :name...',\n    'save' => 'Guardar',\n    'save_and_close' => 'Guardar e fechar',\n    'saving' => 'Guardando...',\n    'saving_name' => 'Guardando :name...',\n    'delete' => 'Apagar',\n    'deleting' => 'Apagando...',\n    'confirm_delete' => 'Realmente deseja apagar este registo?',\n    'confirm_delete_multiple' => 'Realmente deseja apagar os registos seleccionados?',\n    'deleting_name' => 'Apagando :name...',\n    'restore' => 'Restaurar',\n    'restoring' => 'Restaurando',\n    'confirm_restore' => 'Realmente deseja restaurar este registo?',\n    'reset_default' => 'Redefinir para o padrão',\n    'resetting' => 'Redefinindo',\n    'resetting_name' => 'Redefinindo :name',\n    'undefined_tab' => 'Outros',\n    'field_off' => 'Desl',\n    'field_on' => 'Lig',\n    'add' => 'Adicionar',\n    'apply' => 'Aplicar',\n    'cancel' => 'Cancelar',\n    'close' => 'Fechar',\n    'confirm' => 'Confirmar',\n    'reload' => 'Recarregar',\n    'complete' => 'Concluído',\n    'ok' => 'Ok',\n    'or' => 'ou',\n    'confirm_tab_close' => 'Tem a certeza que deseja fechar esse separador? As alterações que não foram guardadas serão perdidas',\n    'behavior_not_ready' => 'O formulário não foi inicializado. Verifique se você chamou initForm() no controlador.',\n    'preview_no_files_message' => 'Os ficheiros não foram carregados',\n    'preview_no_media_message' => 'Nenhum conteúdo selecionado.',\n    'preview_no_record_message' => 'Nenhum registo selecionado.',\n    'select' => 'Selecionar',\n    'select_all' => 'Selecionar tudo',\n    'select_none' => 'Selecione nenhum',\n    'insert_row' => 'Inserir linha',\n    'insert_row_below' => 'Inserir linha abaixo',\n    'delete_row' => 'Apagar linha',\n    'concurrency_file_changed_title' => 'O ficheiro foi alterado',\n    'concurrency_file_changed_description' => 'O ficheiro que está editando foi alterado em disco. Pode recarregá-lo e perder suas alterações ou sobrescrever o ficheiro do disco.',\n    'return_to_list' => 'Regressar à lista',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Localizar Registo',\n    'invalid_model_class' => 'A classe modelo \":modelClass\" definida para o localizador de registos é inválida.',\n    'cancel' => 'Cancelar',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Comportamento da relação não tem uma configuração para \":config\".',\n    'missing_definition' => 'Comportamento da relação não contém uma definição para \":field\".',\n    'missing_model' => 'Comportamento da relação utilizado na classe :class não possui um modelo definido.',\n    'invalid_action_single' => 'Essa acção não pode ser realizada num relacionamento singular.',\n    'invalid_action_multi' => 'Essa acção não pode ser realizada num relacionamento múltiplo.',\n    'help' => 'Clique em um item para adicionar',\n    'add' => 'Adicionar',\n    'link_selected' => 'Vincular selecionado',\n    'cancel' => 'Cancelar',\n    'close' => 'Fechar',\n    'create' => 'Criar',\n    'update' => 'Actualizar',\n    'preview' => 'Visualizar',\n    'remove_name' => 'Remover :name',\n    'delete_name' => 'Apagar :name',\n    'link' => 'Vincular',\n    'unlink_name' => 'Desvincular :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Reordenar registos',\n    'no_records' => 'Não há registos disponíveis para ordenar.',\n  ],\n  'model' => [\n    'name' => 'Modelo',\n    'not_found' => 'O modelo \":class\" com ID :id não foi encontrado',\n    'missing_id' => 'ID do registo não especificado.',\n    'missing_relation' => 'O modelo \":class\" não contém uma definição para o relacionamento \":relation\".',\n    'missing_method' => 'O modelo \":class\" não contém o método \":method\".',\n    'invalid_class' => 'O modelo :model utilizado na classe :class não é válido. É necessário herdar a classe \\\\Model.',\n    'mass_assignment_failed' => 'Falha na atribuição em massa do atributo \":attribute\" do modelo.',\n  ],\n  'warnings' => [\n    'tips' => 'Dicas de configuração do sistema',\n    'tips_description' => 'Há itens que requerem atenção para configurar o sistema corretamente.',\n    'decompileBackendAssets' => 'Os recursos do backend não estao compilados. Isto não é recomendado em ambientes de produção.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'As minhas configurações',\n    'menu_description' => 'Configurações relacionadas com sua conta de administrador',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Cor destacada',\n    'menu_mode_inline_no_icons' => 'Em linha (sem icons)',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'todos',\n    'options_method_not_exists' => 'A classe modelo :model deve definir um método :method() retornando opções para o filtro \\':filter\\'.',\n    'date_all' => 'todo o período',\n    'number_all' => 'todos os números',\n  ],\n  'import_export' => [\n    'row' => 'Linha :row',\n    'export_error' => 'Erro de exportação',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Gerir conteúdo multimédia',\n  ],\n  'mediafinder' => [\n    'label' => 'Localizador de multimédia',\n    'default_prompt' => 'Clique no botão %s para localizar um ficheiro multimédia',\n    'no_image' => 'A imagem não foi encontrada',\n  ],\n  'media' => [\n    'menu_label' => 'Conteúdos',\n    'upload' => 'Enviar',\n    'move' => 'Mover',\n    'delete' => 'Excluir',\n    'add_folder' => 'Adicionar pasta',\n    'search' => 'Procurar',\n    'display' => 'Mostrar',\n    'filter_everything' => 'Tudo',\n    'filter_images' => 'Imagens',\n    'filter_video' => 'Vídeos',\n    'filter_audio' => 'Áudios',\n    'filter_documents' => 'Documentos',\n    'library' => 'Biblioteca',\n    'size' => 'Tamanho',\n    'title' => 'Título',\n    'last_modified' => 'Última modificação',\n    'public_url' => 'URL pública',\n    'click_here' => 'Clique aqui',\n    'thumbnail_error' => 'Erro ao gerar a miniatura.',\n    'return_to_parent' => 'Retornar à diretoria anterior',\n    'return_to_parent_label' => 'Acima ..',\n    'nothing_selected' => 'Nenhum item selecionado.',\n    'multiple_selected' => 'Múltiplos itens selecionados.',\n    'uploading_file_num' => 'Enviando :number ficheiro(s)...',\n    'uploading_complete' => 'Envio finalizado',\n    'uploading_error' => 'Falha no envio',\n    'type_blocked' => 'O tipo de ficheiro utilizado é bloqueado por motivos de segurança.',\n    'order_by' => 'Ordenar por',\n    'direction' => 'Direção',\n    'direction_asc' => 'Ascendente',\n    'direction_desc' => 'Descendente',\n    'folder' => 'Pasta',\n    'no_files_found' => 'Nenhum ficheiro encontrado.',\n    'delete_empty' => 'Por favor, selecione itens para apagar.',\n    'delete_confirm' => 'Deseja apagar o(s) ficheiro(s) selecionado(s)?',\n    'error_renaming_file' => 'Erro ao renomear o ficheiro.',\n    'new_folder_title' => 'Nova pasta',\n    'folder_name' => 'Nome da pasta',\n    'error_creating_folder' => 'Erro ao criar a pasta',\n    'folder_or_file_exist' => 'Uma pasta ou ficheiro já existe com o nome especificado.',\n    'move_empty' => 'Por favor, selecione os itens para mover.',\n    'move_popup_title' => 'Mover ficheiros ou pastas',\n    'move_destination' => 'Pasta destino',\n    'please_select_move_dest' => 'Por favor, selecione a pasta de destino.',\n    'move_dest_src_match' => 'Por favor, selecione outra pasta de destino.',\n    'empty_library' => 'A biblioteca de multimédia, está vazia. Envie ficheiros ou crie pastas para iniciar.',\n    'insert' => 'Inserir',\n    'crop_and_insert' => 'Cortar & Inserir',\n    'select_single_image' => 'Por favor, selecione uma única imagem.',\n    'selection_not_image' => 'O ficheiro selecionado não é uma imagem.',\n    'restore' => 'Desfazer todas as alterações',\n    'resize' => 'Redimensionar...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Proporção fixa',\n    'selection_mode_fixed_size' => 'Tamanho fixo',\n    'height' => 'Altura',\n    'width' => 'Largura',\n    'selection_mode' => 'Modo de seleção',\n    'resize_image' => 'Redimensionar imagem',\n    'image_size' => 'Tamanho da imagem:',\n    'selected_size' => 'Selecionado:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/pt-pt.json",
    "content": "{\n  \"Cancel\": \"Cancelar\",\n  \"You are viewing as\": \"Você está visualizando como\",\n  \"Preview Role\": \"Função de pré-visualização\",\n  \"This lets you test the actions this role can perform.\": \"Isso permite testar as ações que esta função pode executar.\",\n  \"View As Role\": \"View As Role\",\n  \"Return to Role Settings\": \"Retornar para as Configurações de Funções\",\n  \"Password must have a minimum of length of :min characters\": \"A senha deve ter no mínimo :min caracteres\",\n  \"Password must contain at least one uppercase character.\": \"A palavra-passe tem que conter pelo menos uma letra maiúscula.\",\n  \"Password must contain at least one lowercase character.\": \"A senha deve conter pelo menos uma letra minúscula.\",\n  \"Password must contain at least one number.\": \"A senha deve conter pelo menos um número.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"A senha deve conter pelo menos um carácter especial.\",\n  \"Welcome to your Administration Area, :name\": \"Bem-vindo à sua Área de Administração, :name\",\n  \"Duplicate\": \"Duplicar\",\n  \"Expand\": \"Expandir\",\n  \"Collapse\": \"Colapsar\",\n  \"Move Up\": \"Mover para cima\",\n  \"Move Down\": \"Mover para baixo\",\n  \"Remove\": \"Excluir\",\n  \"Manage Item\": \"Manage Item\",\n  \"Clear Filters\": \"Clear Filters\",\n  \"Filter Setup\": \"Filter Setup\",\n  \"Apply\": \"Apply\",\n  \"Clear\": \"Clear\",\n  \"is equal to\": \"is equal to\",\n  \"is between\": \"is between\",\n  \"contains\": \"contains\",\n  \"is before\": \"is before\",\n  \"is after\": \"is after\",\n  \"is greater than\": \"is greater than\",\n  \"is less than\": \"is less than\",\n  \"1. Export output format\": \"1. Formato de saída da exportação\",\n  \"File Format\": \"Formato do ficheiro\",\n  \"Delimiter Character\": \"Caracter delimitador\",\n  \"Enclosure Character\": \"Caracter qualificador\",\n  \"Escape Character\": \"Caracter de escape\",\n  \"2. Select columns to export\": \"2. Selecione colunas para exportar\",\n  \"Columns\": \"Colunas\",\n  \"3. Set export options\": \"3. Definir opções de exportação\",\n  \"CSV Custom\": \"Formato personalizado\",\n  \"1. Upload an Import File\": \"1. Enviar ficheiro CSV\",\n  \"Import File\": \"Importar ficheiro\",\n  \"File Encoding\": \"Codificação do arquivo\",\n  \"First row contains column titles\": \"Primeira linha contém títulos das colunas\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Deixe marcado se primeira linha do CSV é utilizada como títulos das colunas.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"Colunas do ficheiro\",\n  \"Database fields\": \"Campos do base de dados\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Progresso da exportação\",\n  \"Processing\": \"Processando\",\n  \"Import progress\": \"Progresso da importação\",\n  \"Import error\": \"Erro de importação\",\n  \"Export error\": \"Erro de exportação\",\n  \"Column preview\": \"Prévisualizar coluna\",\n  \"Column\": \"Coluna\",\n  \"Disable\": \"Disable\",\n  \"Enable\": \"Enable\",\n  \"Delete\": \"Delete\",\n  \"Export\": \"Export\",\n  \"Import\": \"Import\",\n  \"Select Action\": \"Select Action\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Please create a new account for logging in to the Administration Area.\",\n  \"First Name\": \"First Name\",\n  \"Last Name\": \"Last Name\",\n  \"Email Address\": \"Email Address\",\n  \"Pick a Username\": \"Pick a Username\",\n  \"Enter New Password\": \"Enter New Password\",\n  \"Confirm Password\": \"Confirm Password\",\n  \"Create Account\": \"Create Account\",\n  \"Getting Ready\": \"Getting Ready\",\n  \"Just a few more minutes\": \"Just a few more minutes\",\n  \"Migrating Database\": \"Migrating Database\",\n  \"Access the Backend Panel\": \"Access the Backend Panel\",\n  \"View Backend During Maintenance\": \"View Backend During Maintenance\",\n  \"Perform Software Updates\": \"Perform Software Updates\",\n  \"In Maintenance\": \"In Maintenance\",\n  \"The site is currently in maintenance mode, please check back later.\": \"The site is currently in maintenance mode, please check back later.\",\n  \"Dashboard\": \"Dashboard\",\n  \"Administrators\": \"Administradores\",\n  \"Manage Admins\": \"Manage Admins\",\n  \"Create Admins\": \"Create Admins\",\n  \"Moderate Admins\": \"Moderate Admins\",\n  \"Manage account suspension and ban admin accounts\": \"Manage account suspension and ban admin accounts\",\n  \"Role Permissions\": \"Gerir Papéis\",\n  \"Team Groups\": \"Grupos\",\n  \"Manage Other Admins\": \"Manage Other Admins\",\n  \"Allow users to reset passwords and update emails.\": \"Allow users to reset passwords and update emails.\",\n  \"Delete Admins\": \"Delete Admins\",\n  \"Preferences\": \"Preferences\",\n  \"Settings\": \"Settings\",\n  \"Background Color\": \"Background Color\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Allow users to create new roles and edit or delete roles lower than their highest role.\",\n  \"Save Changes\": \"Save Changes\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Este registo mostra a lista de acessos dos administradores. Os registros são mantidos por um período de :days dias.\",\n  \"Access Log\": \"Registo de Acesso\",\n  \"View a list of successful back-end user sign ins.\": \"Veja a lista de acessos à administração.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Data & Hora\",\n  \"Type\": \"Tipo\",\n  \"IP address\": \"Endereço IP\",\n  \"Username\": \"Username\",\n  \"Login\": \"Entrar\",\n  \"First name\": \"Nome\",\n  \"Last name\": \"Apelido\",\n  \"Email\": \"E-mail\",\n  \"A custom schema is used for this file format.\": \"A custom schema is used for this file format.\",\n  \"Select\": \"Select\",\n  \"Replace\": \"Replace\",\n  \"and\": \"and\",\n  \"Go\": \"Go\",\n  \"Go to page\": \"Go to page\",\n  \"Copy to Clipboard\": \"Copy to Clipboard\",\n  \"Reveal Contents\": \"Reveal Contents\",\n  \"Selected Site\": \"Selected Site\",\n  \"Use Emmet abbreviations\": \"Use Emmet abbreviations\",\n  \"A record does not exist for the selected site. Create one?\": \"A record does not exist for the selected site. Create one?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"As credenciais que introduziu não são válidas. Por favor verifique os seus dados e tente novamente.\",\n  \"Administration Area\": \"Área Administrativa\",\n  \"Password Reset\": \"Redefinir sua senha\",\n  \"Please enter a new password.\": \"Coloque uma nova senha\",\n  \"Password\": \"Password\",\n  \"Password Restore\": \"Password Restore\",\n  \"Please enter your login to restore the password.\": \"Coloque o nome de utilizador\",\n  \"A user could not be found with a login value of ':login'\": \"O utilizador \\\":login\\\" não foi encontrado\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Um e-mail com instruções para redefinir a sua senha foi enviado ao seu endereço de e-mail.\",\n  \"Invalid password reset data supplied. Please try again!\": \"A senha redefinida é inválida. Por favor, tente de novo!\",\n  \"Unable to reset your password!\": \"Falha ao redefinir sua senha!\",\n  \"Password has been reset. You may now sign in.\": \"Sua senha foi redefinida com sucesso. Já pode entrar novamente.\",\n  \"Restore\": \"Restaurar\",\n  \"Reset\": \"Redefinir\",\n  \"Stay logged in\": \"Manter sessão activa\",\n  \"Forgot password?\": \"Esqueceu sua senha?\",\n  \"Global Editor Settings\": \"Global Editor Settings\",\n  \"Manage Widgets\": \"Gerir widgets\",\n  \"Add Widget\": \"Adicionar widget\",\n  \"Set the current layout as the default?\": \"Guardar o layout actual como o pré-definido?\",\n  \"Make Default\": \"Guardar como pré-definido\",\n  \"Reset layout back to default?\": \"Reinicializar o layout para a configuração de origem?\",\n  \"Reset Layout\": \"Reinicializar layout\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"por favor, selecione\",\n  \"Width\": \"Largura\",\n  \"full width\": \"Largura completa\",\n  \"Create Widgets\": \"Create Widgets\",\n  \"not equal to\": \"not equal to\",\n  \"Light Mode\": \"Light Mode\",\n  \"Dark Mode\": \"Dark Mode\",\n  \"OS Default\": \"OS Default\",\n  \"Create a Custom Palette\": \"Create a Custom Palette\",\n  \"Custom Palette\": \"Custom Palette\",\n  \"Primary Color\": \"Cor primária\",\n  \"Secondary Color\": \"Cor secundária\",\n  \"Selection Color\": \"Selection Color\",\n  \"Nav Text\": \"Nav Text\",\n  \"Nav Background\": \"Nav Background\",\n  \"Sidebar Text\": \"Sidebar Text\",\n  \"Sidebar Background\": \"Sidebar Background\",\n  \"Sidebar Active Text\": \"Sidebar Active Text\",\n  \"Sidebar Active Background\": \"Sidebar Active Background\",\n  \"Sidebar Hover Background\": \"Sidebar Hover Background\",\n  \"Settings Text\": \"Settings Text\",\n  \"Settings Background\": \"Settings Background\",\n  \"Settings Item Background\": \"Settings Item Background\",\n  \"Settings Active Color\": \"Settings Active Color\",\n  \"Settings Active Background\": \"Settings Active Background\",\n  \"Settings Hover Background\": \"Settings Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"Este nome é mostrado no título da área administrativa.\",\n  \"App Name\": \"Nome da Aplicação\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Esta frase é mostrada no ecran de entrada administrativo.\",\n  \"App Tagline\": \"Slogan do Aplicativo\",\n  \"Brand\": \"Marca\",\n  \"Upload a custom logo to use in the back-end.\": \"Fazer carregamento de um logótipo para usar na área administrativa.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Carrege um favicon personalizado a usar na área administrativa\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigation Logo\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Replaces the dashboard link with a custom logo in the navigation.\",\n  \"Dashboard Icon\": \"Dashboard Icon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Use a custom image for the dashboard icon (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"This message is shown on the sign in screen for the back-end.\",\n  \"Welcome Message\": \"Welcome Message\",\n  \"Login Page\": \"Login Page\",\n  \"Background Type\": \"Background Type\",\n  \"Flat Color\": \"Flat Color\",\n  \"Wallpaper\": \"Wallpaper\",\n  \"Wallpaper Size\": \"Wallpaper Size\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Cover\",\n  \"Background Wallpaper Image\": \"Background Wallpaper Image\",\n  \"Image\": \"Imagem\",\n  \"Random Autumn Images\": \"Random Autumn Images\",\n  \"Custom Image\": \"Custom Image\",\n  \"Login Page Image\": \"Login Page Image\",\n  \"Colors\": \"Cores\",\n  \"Color Mode\": \"Color Mode\",\n  \"Color Preset\": \"Color Preset\",\n  \"Menu Style\": \"Estilo de menu\",\n  \"Navigation\": \"Navegação\",\n  \"Custom Stylesheet\": \"Folha de estilo personalizada\",\n  \"Styles\": \"Estilos\",\n  \"Inline\": \"Em linha\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"Blocos\",\n  \"Collapsed\": \"Colapsados\",\n  \"Icons\": \"Icons\",\n  \"Left Side\": \"Left Side\",\n  \"Add New Item\": \"Add New Item\",\n  \"Link Color\": \"Link Color\",\n  \"Current Password\": \"Current Password\",\n  \"New Password\": \"New Password\",\n  \"Current password does not match. Please try again!\": \"Current password does not match. Please try again!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Your password has expired, please create a new one for security reasons.\",\n  \"Region\": \"Região\",\n  \"Locale\": \"Idioma\",\n  \"Select your desired locale for language use.\": \"Selecione o idioma de sua preferência.\",\n  \"Timezone\": \"Fuso horário\",\n  \"Adjust displayed dates to this timezone.\": \"Ajustar datas exibidas para este fuso horário.\",\n  \"Code Editor\": \"Editor de código\",\n  \"Color Scheme\": \"Esquema de cores\",\n  \"Word Wrap\": \"Quebra de linha\",\n  \"Off\": \"Desligado\",\n  \"40 Characters\": \"40 caracteres\",\n  \"80 Characters\": \"80 caracteres\",\n  \"Fluid\": \"Fluido\",\n  \"Font Size\": \"Tamanho da fonte\",\n  \"Tab Size\": \"Tamanho do tabulação\",\n  \"Code Folding\": \"Código flexível\",\n  \"Mark begin\": \"Marca de início\",\n  \"Mark begin and end\": \"Marca de início e fim\",\n  \"Autocompletion\": \"Autocompletar\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Autocompletar básico (Ctrl + Espaço)\",\n  \"Live Autocompletion\": \"Autocompletar em tempo real\",\n  \"Show gutter\": \"Mostrar guias\",\n  \"Highlight active line\": \"Destaque na linha ativa\",\n  \"Automatically close tags\": \"Fechar etiquetas automáticamente\",\n  \"Indent using tabs\": \"Recuo usando guias\",\n  \"Show indent guides\": \"Mostrar guias de indentação\",\n  \"Show invisible characters\": \"Mostrar caracteres invisíveis\",\n  \"Show print margin\": \"Mostrar margem de impressão\",\n  \"Custom styles to include in the HTML editor.\": \"Estilos personalizados para incluir no editor HTML.\",\n  \"Markup Styles\": \"Estilos de marcação\",\n  \"Paragraph Formats\": \"Paragraph Formats\",\n  \"Markup Classes\": \"Classes de marcação\",\n  \"Label\": \"Rótulo\",\n  \"Paragraph\": \"Parágrafo\",\n  \"Class Name\": \"Nome da classe\",\n  \"Link\": \"Ligação\",\n  \"Table\": \"Tabela\",\n  \"Table Cell\": \"Célula de tabela\",\n  \"Allowed Tags\": \"Etiquetas permitidas\",\n  \"The list of allowed tags.\": \"Lista de etiquetas permitidas.\",\n  \"Markup Tags\": \"Etiquetas de marcação\",\n  \"Allowed Empty Tags\": \"Permitir etiquetas vazias\",\n  \"The list of tags that are not removed when they have no content inside.\": \"A lista de etiquetas que não é removida quando não há conteúdo.\",\n  \"Do Not Wrap Tags\": \"Não envolva as etiquetas\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Lista de etiquetas que não devem ser envolvidas num bloco de etiquetas.\",\n  \"Remove Tags\": \"Apagar etiquetas\",\n  \"The list of tags that are removed together with their content.\": \"Lista de etiquetas que serão excluídas incluíndo o conteúdo.\",\n  \"Line Breaker Tags\": \"Etiquetas de quebra de linha\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Lista de etiquetas entre as quais é inserida uma quebra de linha.\",\n  \"Toolbar Buttons\": \"Botões da barra de ferramentas\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Botões da barra de ferramentas do editor rico a serem mostradas por defeito.\",\n  \"Insert a preset toolbar button configuration\": \"Insert a preset toolbar button configuration\",\n  \"Allowed Attributes\": \"Allowed Attributes\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"The list of allowed HTML attributes, in addition to the normal allowances.\",\n  \"Enable code snippets (Tab)\": \"Activar trechos de códigos (Tab)\",\n  \"Title\": \"Título\",\n  \"Description\": \"Descrição\",\n  \"Attachment\": \"Anexo\",\n  \"Attachment URL\": \"Anexar URL\",\n  \"Add a title and description for this attachment.\": \"Adicione um título e descrição a este anexo.\",\n  \"Upload\": \"Upload\",\n  \"Are you sure?\": \"Tem a certeza?\",\n  \"Delete Selected\": \"Delete Selected\",\n  \"Upload Error\": \"Erro ao enviar\",\n  \"Remove File\": \"Remover ficheiro\",\n  \"Show Light Switch\": \"Show Light Switch\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Allow users to toggle the color mode from the navigation.\",\n  \"Create :name\": \"Create :name\",\n  \"Update :name\": \"Update :name\",\n  \"Add :name\": \"Add :name\",\n  \"Link :name\": \"Link :name\",\n  \"Unlink\": \"Unlink\",\n  \"Preview :name\": \"Preview :name\",\n  \"Link a New :name\": \"Link a New :name\",\n  \"Add a New :name\": \"Add a New :name\",\n  \"Related :name Data\": \"Related :name Data\",\n  \":name Created\": \":name Created\",\n  \":name Updated\": \":name Updated\",\n  \":name Deleted\": \":name Deleted\",\n  \":name Added\": \":name Added\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"Form record with an ID of :id could not be found.\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Prévisualizar a página\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Gerir utilizadores, grupos, e permissões de administração.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Personalização\",\n  \"Customize the administration area such as name, colors and logo.\": \"Personalizar detalhes da área administrativa, tais como título, cores e logo.\",\n  \"Editor Settings\": \"Definições do Editor\",\n  \"Change the global editor preferences.\": \"Gerir configurações globais do editor, como tamanho de fonte ou esquema de cores\",\n  \"My Account\": \"Minha Conta\",\n  \"Update your account details such as name, email address and password.\": \"Actualizar detalhes da sua conta, como nome, e-mail e senha.\",\n  \"Backend Preferences\": \"Preferências da Administração\",\n  \"Manage your account preferences such as desired language.\": \"Gerir idiomas e aparência da administração.\",\n  \"security login\": \"login de segurança\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create & Close\": \"Create & Close\",\n  \"Creating :name...\": \"Creating :name...\",\n  \"Save & Close\": \"Save & Close\",\n  \"Saving :name...\": \"Saving :name...\",\n  \"Delete this record?\": \"Delete this record?\",\n  \"Deleting :name...\": \"Deleting :name...\",\n  \"Loading...\": \"Loading...\",\n  \"Complete\": \"Complete\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Unknown column\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Ignore this column\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Created\",\n  \"Updated\": \"Updated\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Warnings\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Skipped Rows\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"File not found\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"O modo de depuração está activo. Isto não é recomendado em abientes de produção.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"A extensão PHP :name não está instalada. Por favor, instale esta biblioteca para activar a extensão.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"A extensão :name é uma dependência mas não está instalada. Por favor instale esta extensão.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Diretoria :name ou suas subdiretorias não são graváveis pelo PHP. Por favor, defina permissões de escrita para o servidor nesta diretoria.\"\n}"
  },
  {
    "path": "modules/backend/lang/ro/lang.php",
    "content": "<?php return [\n  'field' => [\n    'invalid_type' => 'Tipul campului folosit este invalid - :type.',\n    'options_method_not_exists' => 'Clasa model :model trebuie sa defineasca o metoda :method() returnand optiuni pentru campul \":field\".',\n  ],\n  'widget' => [\n    'not_registered' => 'Un nume de clasa de widget \\':name\\' nu a fost inregistrat',\n    'not_bound' => 'Un widget cu numele de clasa \\':name\\' nu a fost mapat la controller',\n  ],\n  'page' => [\n    'untitled' => 'Fara titlu',\n    'access_denied' => [\n      'label' => 'Acces restrictionat',\n      'help' => 'Nu aveti permisiuni pentru a vizualiza aceasta pagina.',\n      'cms_link' => 'Inapoi in panoul de administrare',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Partialul \\':name\\' nu a fost gasit.',\n  ],\n  'account' => [\n    'sign_out' => 'Deconectare',\n    'login_placeholder' => 'login',\n    'password_placeholder' => 'password',\n    'enter_email' => 'Introduceti email',\n    'email_placeholder' => 'email',\n    'apply' => 'Aplicare',\n    'cancel' => 'Anulare',\n    'delete' => 'Stergere',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Dashboard',\n    'widget_inspector_title' => 'Configurare widget',\n    'widget_inspector_description' => 'Configurare raport widget',\n    'widget_columns_label' => 'Latime :columns',\n    'widget_columns_description' => 'Latime widget, un numar intre 1 si 10.',\n    'widget_columns_error' => 'Va rugam sa introduceti latimea widget-ului ca un numar intre 1 si 10.',\n    'columns' => '{1} coloana|[2,Inf] coloane',\n    'widget_new_row_label' => 'Forteaza rand nou',\n    'widget_new_row_description' => 'Amplasare widget pe un rand nou.',\n    'widget_title_label' => 'Titlu widget',\n    'widget_title_error' => 'Titlul widget-ului este necesar.',\n    'status' => [\n      'widget_title_default' => 'Status sistem',\n      'online' => 'online',\n      'update_available' => '{0} actualizari disponibile!|{1} actualizare disponibila!|[2,Inf] actualizari disponibile!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Gestionare Administratori',\n    'new' => 'Administrator nou',\n    'first_name' => 'Prenume',\n    'last_name' => 'Nume',\n    'full_name' => 'Nume complet',\n    'email' => 'Email',\n    'groups' => 'Grupuri',\n    'groups_comment' => 'Specificati grupurile aferente acestei persoane.',\n    'avatar' => 'Avatar',\n    'password' => 'Parola',\n    'password_confirmation' => 'Confirmare Parola',\n    'superuser' => 'Super Utilizator',\n    'superuser_comment' => 'Bifati aceasta bifa pentru a permite acestei persoane sa aiba acces deplin.',\n    'send_invite' => 'Trimitere invitatie prin email',\n    'send_invite_comment' => 'Folositi aceasta bifa pentru a trimite o invitatie prin email catre utilizator',\n    'delete_confirm' => 'Sunteti sigur(a) ca vreti sa stergeti acest administrator?',\n    'return' => 'Intoarcere la lista de administratori',\n    'group' => [\n      'name' => 'Grup',\n      'name_field' => 'Nume',\n      'list_title' => 'Gestionare Grupuri',\n      'new' => 'Grup Nou de Administratori',\n      'delete_confirm' => 'Sunteti sigur(a) ca vreti sa stergeti acest grup de administratori?',\n      'return' => 'Intoarcere la lista de grupuri',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nu exista niciun utilizator autentificat pentru care sa se incarce sau salveze preferinte.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Lista',\n    'search_prompt' => 'Cautare...',\n    'no_records' => 'Nu exista inregistari pentru aceasta fereastra.',\n    'missing_model' => 'Lista folosita in clasa :class nu are un model definit.',\n    'missing_column' => 'Nu exista denifitii pentru coloana :columns.',\n    'missing_columns' => 'Lista folosita in clasa :class nu are coloane definite.',\n    'missing_definition' => 'Lista nu contine o coloana pentru campul \\':field\\'.',\n    'behavior_not_ready' => 'Setarile initiale ale listei nu au fost definite, verificati existenta functiei makeLists() in controller.',\n    'invalid_column_datetime' => 'Valoarea coloanei \\':column\\' nu este un obiect de tip DateTime, verificati existenta unei referinte $dates in Model?',\n    'pagination' => 'Afisare inregistrari: :from-:to din :total',\n    'apply_changes' => 'Aplicare schimbari',\n    'cancel' => 'Anulare',\n  ],\n  'form' => [\n    'create_title' => 'Nou :name',\n    'update_title' => 'Editare :name',\n    'preview_title' => 'Previzualizare :name',\n    'missing_id' => 'ID-ul inregistrarii formularului nu a fost specificat.',\n    'missing_model' => 'Formularul folosit in clasa :class nu are un model definit.',\n    'missing_definition' => 'Formularul nu contine un camp pentru campul \\':field\\'.',\n    'create' => 'Creare',\n    'create_and_close' => 'Creare si inchidere',\n    'creating' => 'Se creeaza...',\n    'save' => 'Salvare',\n    'save_and_close' => 'Salvare si inchidere',\n    'saving' => 'Se salveaza...',\n    'delete' => 'Stergere',\n    'deleting' => 'Se sterge...',\n    'undefined_tab' => 'Altele',\n    'field_off' => 'Dezactivat',\n    'field_on' => 'Activat',\n    'add' => 'Adaugare',\n    'apply' => 'Aplicare',\n    'cancel' => 'Anulare',\n    'close' => 'Inchidere',\n    'ok' => 'OK',\n    'or' => 'sau',\n    'confirm_tab_close' => 'Sunteti sigur(a) ca doriti sa inchideti acest tab? Modificarile nesalvate vor fi pierdute.',\n    'behavior_not_ready' => 'Setarile initiale ale formularului nu au fost definite, verificati existenta functiei initForm() in controller.',\n    'preview_no_files_message' => 'Fisierele nu au fost incarcate',\n    'select' => 'Selectare',\n    'select_all' => 'Selectează tot',\n    'select_none' => 'Selectați niciuna',\n  ],\n  'relation' => [\n    'missing_definition' => 'Relatia nu contine definitii pentru campul \\':field\\'.',\n    'missing_model' => 'Relatia folosita in clasa :class nu are un model definit.',\n    'invalid_action_single' => 'Aceasta actiune nu poate fi realizata pentru o relatie singulara.',\n    'invalid_action_multi' => 'Aceasta actiune nu poate fi realizata pentru o relatie multipla.',\n    'add' => 'Adaugare',\n    'create' => 'Creare',\n    'update' => 'Actualizare',\n    'remove_name' => 'Inlaturare :name',\n    'delete_name' => 'Stergere :name',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Modelul \\':class\\' cu ID-ul :id nu a putut fi gasit',\n    'missing_id' => 'Nu exista niciun ID specificat pentru care sa se realizeze cautarea inregistrarii modelului.',\n    'missing_relation' => 'Modelul \\':class\\' nu contine o definitie pentru relatia \\':relation\\'.',\n    'invalid_class' => 'Modelul :model folosit in clasa :class nu este valid, trebuie sa mosteneasca clasa \\\\Model.',\n    'mass_assignment_failed' => 'Atribuirea in masa a esuat pentru atributul modelului \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Sfaturi pentru configurarea sistemului',\n    'tips_description' => 'Exista anumite conditii care necesita atentie pentru a configura sistemul corect.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Setarile mele',\n    'menu_description' => 'Setarile in legatura cu contul de administrare',\n  ],\n  'myaccount' => [],\n  'backend_preferences' => [],\n  'access_log' => [],\n];\n"
  },
  {
    "path": "modules/backend/lang/ro.json",
    "content": "{\n  \"Cancel\": \"Anulare\",\n  \"You are viewing as\": \"Vizionați ca\",\n  \"Preview Role\": \"Previzualizare rol\",\n  \"This lets you test the actions this role can perform.\": \"Acest lucru vă permite să testați acțiunile pe care le poate efectua acest rol.\",\n  \"View As Role\": \"Vedeți ca rol\",\n  \"Return to Role Settings\": \"Reveniți la Setări rol\",\n  \"Password must have a minimum of length of :min characters\": \"Parola trebuie să aibă minim :min caractere\",\n  \"Password must contain at least one uppercase character.\": \"Parola trebuie să conțină cel puțin un caracter majuscul.\",\n  \"Password must contain at least one lowercase character.\": \"Parola trebuie să conțină cel puțin un caracter mic.\",\n  \"Password must contain at least one number.\": \"Parola trebuie să conțină cel puțin un număr.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Parola trebuie să conțină cel puțin un caracter non-alfanumeric.\",\n  \"Welcome to your Administration Area, :name\": \"Bun venit în zona dvs. de administrare, :name\",\n  \"Duplicate\": \"Duplicat\",\n  \"Expand\": \"Extinde\",\n  \"Collapse\": \"Colaps\",\n  \"Move Up\": \"Deplasați-vă în sus\",\n  \"Move Down\": \"Mutați în jos\",\n  \"Remove\": \"Inlaturare\",\n  \"Manage Item\": \"Gestionați elementul\",\n  \"Clear Filters\": \"Ștergeți filtrele\",\n  \"Filter Setup\": \"Configurarea filtrului\",\n  \"Apply\": \"aplica\",\n  \"Clear\": \"clar\",\n  \"is equal to\": \"este egal cu\",\n  \"is between\": \"este între\",\n  \"contains\": \"conţine\",\n  \"is before\": \"este înainte\",\n  \"is after\": \"este după\",\n  \"is greater than\": \"este mai mare decât\",\n  \"is less than\": \"e mai puțin decât\",\n  \"1. Export output format\": \"1. Export format de ieșire\",\n  \"File Format\": \"Tipul fisierului\",\n  \"Delimiter Character\": \"Caracter delimitator\",\n  \"Enclosure Character\": \"Caracter de incintă\",\n  \"Escape Character\": \"Escape Personaj\",\n  \"2. Select columns to export\": \"2. Selectați coloanele de exportat\",\n  \"Columns\": \"Coloane\",\n  \"3. Set export options\": \"3. Setați opțiunile de export\",\n  \"CSV Custom\": \"CSV personalizat\",\n  \"1. Upload an Import File\": \"1. Încărcați un fișier de import\",\n  \"Import File\": \"Fișier de import\",\n  \"File Encoding\": \"Codificarea fișierelor\",\n  \"First row contains column titles\": \"Primul rând conține titlurile coloanelor\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Lăsați bifată dacă primul rând din CSV este folosit ca titluri de coloană.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"Fișier coloane\",\n  \"Database fields\": \"Câmpurile bazei de date\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Progresul exportului\",\n  \"Processing\": \"Prelucrare\",\n  \"Import progress\": \"Progresul importului\",\n  \"Import error\": \"Eroare de import\",\n  \"Export error\": \"Eroare de export\",\n  \"Column preview\": \"Previzualizarea coloanei\",\n  \"Column\": \"Coloană\",\n  \"Disable\": \"Dezactivați\",\n  \"Enable\": \"Permite\",\n  \"Delete\": \"Stergere\",\n  \"Export\": \"Exportă\",\n  \"Import\": \"Importă\",\n  \"Select Action\": \"Selectați Acțiune\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Vă rugăm să creați un cont nou pentru a vă autentifica în Zona de administrare.\",\n  \"First Name\": \"Nume\",\n  \"Last Name\": \"Nume\",\n  \"Email Address\": \"Adresa de e-mail\",\n  \"Pick a Username\": \"Alege un nume de utilizator\",\n  \"Enter New Password\": \"Introduceți o nouă parolă\",\n  \"Confirm Password\": \"Confirmă parola\",\n  \"Create Account\": \"Creează cont\",\n  \"Getting Ready\": \"Se pregateste\",\n  \"Just a few more minutes\": \"Încă câteva minute\",\n  \"Migrating Database\": \"Migrarea bazei de date\",\n  \"Access the Backend Panel\": \"Accesați panoul de backend\",\n  \"View Backend During Maintenance\": \"Vizualizați backend-ul în timpul întreținerii\",\n  \"Perform Software Updates\": \"Efectuați actualizări software\",\n  \"In Maintenance\": \"În întreținere\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Site-ul este momentan în modul de întreținere, vă rugăm să reveniți mai târziu.\",\n  \"Dashboard\": \"Bord\",\n  \"Administrators\": \"Administratori\",\n  \"Manage Admins\": \"Gestionați administratorii\",\n  \"Create Admins\": \"Creați administratori\",\n  \"Moderate Admins\": \"Administratori moderati\",\n  \"Manage account suspension and ban admin accounts\": \"Gestionați suspendarea contului și interziceți conturile de administrator\",\n  \"Role Permissions\": \"Gestionați rolurile\",\n  \"Team Groups\": \"Grupuri\",\n  \"Manage Other Admins\": \"Gestionați alți administratori\",\n  \"Allow users to reset passwords and update emails.\": \"Permite resetarea parolelor și actualizarea e-mailurilor\",\n  \"Delete Admins\": \"Ștergeți administratorii\",\n  \"Preferences\": \"Preferințe\",\n  \"Settings\": \"Setări\",\n  \"Background Color\": \"Culoare de fundal\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Permiteți utilizatorilor să creeze noi roluri și să editeze sau să șteargă roluri mai mici decât rolul lor cel mai înalt.\",\n  \"Save Changes\": \"Salvează modificările\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Acest jurnal afiseaza o lista de conectari reusite, realizate de catre administratori. Inregistrarile sunt pastrate pentru un numar total de :days zile.\",\n  \"Access Log\": \"Jurnal acces\",\n  \"View a list of successful back-end user sign ins.\": \"Vizualizati o lista de conectari reusite, realizate de catre administratori.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Data & Ora\",\n  \"Type\": \"Tip\",\n  \"IP address\": \"Adresa IP\",\n  \"Username\": \"Nume de utilizator\",\n  \"Login\": \"Autentificare\",\n  \"First name\": \"Prenume\",\n  \"Last name\": \"Nume\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"Pentru acest format de fișier este utilizată o schemă personalizată.\",\n  \"Select\": \"Selectați\",\n  \"Replace\": \"A inlocui\",\n  \"and\": \"și\",\n  \"Go\": \"Merge\",\n  \"Go to page\": \"Mergi la pagina\",\n  \"Copy to Clipboard\": \"Copiați în clipboard\",\n  \"Reveal Contents\": \"Dezvăluie conținutul\",\n  \"Selected Site\": \"Site-ul selectat\",\n  \"Use Emmet abbreviations\": \"Folosiți abrevierile Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Nu există o înregistrare pentru site-ul selectat. Creeaza una?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Detaliile pe care le-ați introdus nu se potrivesc cu înregistrările noastre. Vă rugăm să verificați din nou și să încercați din nou.\",\n  \"Administration Area\": \"Zona de administrare\",\n  \"Password Reset\": \"Resetare parola\",\n  \"Please enter a new password.\": \"Introduceti o noua parola\",\n  \"Password\": \"Parola\",\n  \"Password Restore\": \"Restaurare parolă\",\n  \"Please enter your login to restore the password.\": \"Introduceti login\",\n  \"A user could not be found with a login value of ':login'\": \"Utilizatorul ':login' nu a fost gasit in sistem.\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Un mesaj a fost trimis catre adresa de email cu instructiuni pentru resetarea parolei.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Date invalide pentru resetarea parolei. Va rugam incercati din nou!\",\n  \"Unable to reset your password!\": \"Eroare la resetarea parolei!\",\n  \"Password has been reset. You may now sign in.\": \"Parola a fost resetata cu succes. Va puteti conecta.\",\n  \"Restore\": \"Restaurare\",\n  \"Reset\": \"Resetare\",\n  \"Stay logged in\": \"Rămâneți conectat\",\n  \"Forgot password?\": \"Ati uitat parola?\",\n  \"Global Editor Settings\": \"Setări globale ale editorului\",\n  \"Manage Widgets\": \"Gestionați widget-urile\",\n  \"Add Widget\": \"Adauga widget\",\n  \"Set the current layout as the default?\": \"Setați aspectul curent ca implicit?\",\n  \"Make Default\": \"Face implicit\",\n  \"Reset layout back to default?\": \"Resetați aspectul la implicit?\",\n  \"Reset Layout\": \"Resetați aspectul\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"te rog selecteaza\",\n  \"Width\": \"Latime\",\n  \"full width\": \"lățime maximă\",\n  \"Create Widgets\": \"Creați widgeturi\",\n  \"not equal to\": \"nu este egal cu\",\n  \"Light Mode\": \"Modul de lumină\",\n  \"Dark Mode\": \"Modul întunecat\",\n  \"OS Default\": \"OS Implicit\",\n  \"Create a Custom Palette\": \"Creați o paletă personalizată\",\n  \"Custom Palette\": \"Paleta personalizată\",\n  \"Primary Color\": \"Culoare primară\",\n  \"Secondary Color\": \"Culoare secundară\",\n  \"Selection Color\": \"Culoare de selecție\",\n  \"Nav Text\": \"Text de navigare\",\n  \"Nav Background\": \"Fundal Nav\",\n  \"Sidebar Text\": \"Text din bara laterală\",\n  \"Sidebar Background\": \"Fundal din bara laterală\",\n  \"Sidebar Active Text\": \"Text activ din bara laterală\",\n  \"Sidebar Active Background\": \"Fundal activ din bara laterală\",\n  \"Sidebar Hover Background\": \"Bara laterală Hover Background\",\n  \"Settings Text\": \"Setări Text\",\n  \"Settings Background\": \"Setări Fundal\",\n  \"Settings Item Background\": \"Setări Element de fundal\",\n  \"Settings Active Color\": \"Setări Culoare activă\",\n  \"Settings Active Background\": \"Setări Fundal activ\",\n  \"Settings Hover Background\": \"Setări Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"Acest nume este afișat în zona de titlu a back-end-ului.\",\n  \"App Name\": \"Numele aplicatiei\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Acest nume este afișat pe ecranul de conectare pentru back-end.\",\n  \"App Tagline\": \"Sloganul aplicației\",\n  \"Brand\": \"Marca\",\n  \"Upload a custom logo to use in the back-end.\": \"Încărcați o siglă personalizată pe care să o utilizați în back-end.\",\n  \"Logo\": \"Siglă\",\n  \"Upload a custom favicon to use in the back-end\": \"Încărcați o favicon personalizată pentru a o utiliza în back-end\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Logo de navigare\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Înlocuiește linkul tabloului de bord cu un logo personalizat în navigare.\",\n  \"Dashboard Icon\": \"Pictograma tabloului de bord\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Utilizați o imagine personalizată pentru pictograma tabloului de bord (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Acest mesaj este afișat pe ecranul de conectare pentru back-end.\",\n  \"Welcome Message\": \"Mesaj de intampinare\",\n  \"Login Page\": \"Pagina de logare\",\n  \"Background Type\": \"Tip de fundal\",\n  \"Flat Color\": \"Culoare plată\",\n  \"Wallpaper\": \"Tapet\",\n  \"Wallpaper Size\": \"Dimensiunea tapetului\",\n  \"Auto\": \"Auto\",\n  \"Cover\": \"Acoperi\",\n  \"Background Wallpaper Image\": \"Imagine de fundal\",\n  \"Image\": \"Imagine\",\n  \"Random Autumn Images\": \"Imagini aleatorii de toamnă\",\n  \"Custom Image\": \"Imagine personalizată\",\n  \"Login Page Image\": \"Imagine pagina de conectare\",\n  \"Colors\": \"Culori\",\n  \"Color Mode\": \"Modul color\",\n  \"Color Preset\": \"Presetare culoare\",\n  \"Menu Style\": \"Stil de meniu\",\n  \"Navigation\": \"Navigare\",\n  \"Custom Stylesheet\": \"Foaie de stil personalizată\",\n  \"Styles\": \"Stiluri\",\n  \"Inline\": \"În linie\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"Placi\",\n  \"Collapsed\": \"S-a prăbușit\",\n  \"Icons\": \"icoane\",\n  \"Left Side\": \"Partea stanga\",\n  \"Add New Item\": \"Adăugați un articol nou\",\n  \"Link Color\": \"Culoare link\",\n  \"Current Password\": \"Parola actuală\",\n  \"New Password\": \"Parolă Nouă\",\n  \"Current password does not match. Please try again!\": \"Parola curentă nu se potrivește. Vă rugăm să încercați din nou!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Parola dvs. a expirat, vă rugăm să creați una nouă din motive de securitate.\",\n  \"Region\": \"Regiune\",\n  \"Locale\": \"Limba\",\n  \"Select your desired locale for language use.\": \"Selectati limba dorita.\",\n  \"Timezone\": \"Fus orar\",\n  \"Adjust displayed dates to this timezone.\": \"Ajustați datele afișate la acest fus orar.\",\n  \"Code Editor\": \"Editor de coduri\",\n  \"Color Scheme\": \"Schema culori\",\n  \"Word Wrap\": \"Încadrare text\",\n  \"Off\": \"Oprit\",\n  \"40 Characters\": \"40 de caractere\",\n  \"80 Characters\": \"80 de caractere\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"Dimensiune font\",\n  \"Tab Size\": \"Lungime tab\",\n  \"Code Folding\": \"Code folding\",\n  \"Mark begin\": \"Mark începe\",\n  \"Mark begin and end\": \"Marcați începutul și sfârșitul\",\n  \"Autocompletion\": \"Completare automată\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Completare automată de bază (Ctrl + Spațiu)\",\n  \"Live Autocompletion\": \"Completare automată live\",\n  \"Show gutter\": \"Afiseaza panou\",\n  \"Highlight active line\": \"Evidentiere linie activa\",\n  \"Automatically close tags\": \"Inchide automat tag-uri si caractere speciale\",\n  \"Indent using tabs\": \"Indentare folosind tab-uri\",\n  \"Show indent guides\": \"Afișați ghidurile de indentare\",\n  \"Show invisible characters\": \"Arata caractere invizibile\",\n  \"Show print margin\": \"Afișați marginea de imprimare\",\n  \"Custom styles to include in the HTML editor.\": \"Stiluri personalizate de inclus în editorul HTML.\",\n  \"Markup Styles\": \"Stiluri de marcare\",\n  \"Paragraph Formats\": \"Formate de paragraf\",\n  \"Markup Classes\": \"Clasele de markup\",\n  \"Label\": \"Eticheta\",\n  \"Paragraph\": \"Paragraf\",\n  \"Class Name\": \"Numele clasei\",\n  \"Link\": \"Legătură\",\n  \"Table\": \"Masa\",\n  \"Table Cell\": \"Celulă de tabel\",\n  \"Allowed Tags\": \"Etichete permise\",\n  \"The list of allowed tags.\": \"Lista etichetelor permise.\",\n  \"Markup Tags\": \"Etichete de marcare\",\n  \"Allowed Empty Tags\": \"Etichete goale permise\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Lista etichetelor care nu sunt eliminate atunci când nu au conținut în interior.\",\n  \"Do Not Wrap Tags\": \"Nu împachetați etichete\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Lista etichetelor care nu ar trebui să fie împachetate în interiorul etichetelor bloc.\",\n  \"Remove Tags\": \"Eliminați etichetele\",\n  \"The list of tags that are removed together with their content.\": \"Lista etichetelor care sunt eliminate împreună cu conținutul lor.\",\n  \"Line Breaker Tags\": \"Etichete de întrerupere de linie\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Lista de etichete care sunt utilizate pentru a plasa un element întrerupător de linie între.\",\n  \"Toolbar Buttons\": \"Butoanele din bara de instrumente\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Butoanele din Bara de instrumente care vor fi afișate implicit în Editorul îmbogățit.\",\n  \"Insert a preset toolbar button configuration\": \"Inserați o configurație prestabilită a butoanelor din bara de instrumente\",\n  \"Allowed Attributes\": \"Atribute permise\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Lista atributelor HTML permise, pe lângă permisele normale.\",\n  \"Enable code snippets (Tab)\": \"Activați fragmentele de cod (Tab)\",\n  \"Title\": \"Titlu\",\n  \"Description\": \"Descriere\",\n  \"Attachment\": \"Atașament\",\n  \"Attachment URL\": \"URL Fișier\",\n  \"Add a title and description for this attachment.\": \"Adaugați un titlu și o descriere pentru acest atașament.\",\n  \"Upload\": \"Încarcă\",\n  \"Are you sure?\": \"Sunteți sigur?\",\n  \"Delete Selected\": \"Șterge cele selectate\",\n  \"Upload Error\": \"Eroare la încărcarea fișierului\",\n  \"Remove File\": \"Șterge fișierul\",\n  \"Show Light Switch\": \"Arată Comutator Lumină\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Permite utilizatorilor să schimbe modul de culoare din navigare.\",\n  \"Create :name\": \"Creare :name\",\n  \"Update :name\": \"Actualizare :name\",\n  \"Add :name\": \"Adaugare :name\",\n  \"Link :name\": \"Link :name\",\n  \"Unlink\": \"Deconectați\",\n  \"Preview :name\": \"Previzualizare :name\",\n  \"Link a New :name\": \"Link către un nou :name\",\n  \"Add a New :name\": \"Adaugă un :name nou\",\n  \"Related :name Data\": \"Date asociate :name\",\n  \":name Created\": \":name a fost creat cu succes\",\n  \":name Updated\": \":name a fost actualizat cu succes\",\n  \":name Deleted\": \":name a fost sters cu succes\",\n  \":name Added\": \":name adăugat\",\n  \":name Linked\": \":name asociat\",\n  \":name Removed\": \":name șters\",\n  \":name Unlinked\": \":name deconectat\",\n  \"Form record with an ID of :id could not be found.\": \"Inregistrarea formularului cu ID-ul :id nu a putut fi gasita.\",\n  \"Remove Selected\": \"Șterge cele selectate\",\n  \"Unlink Selected\": \"Decontectează legăturile selecate\",\n  \"Preview the Website\": \"Previzualizare site\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Gestionare administratori, grupuri si permisiuni.\",\n  \"Define permissions for administrators based on their role.\": \"Definește permisiuni pentru administratori în funcție de rolul lor.\",\n  \"Add administrators to groups used for notifications and features.\": \"Adăugați administratori la grupurile utilizate pentru notificări și funcționalități.\",\n  \"Branding & Appearance\": \"Personalizează Panou de Administrare\",\n  \"Customize the administration area such as name, colors and logo.\": \"Personalizați zona de administrare(ex: numele, culorile și logo-ul).\",\n  \"Editor Settings\": \"Preferinte Editor Cod\",\n  \"Change the global editor preferences.\": \"Personalizati preferintele editorului de cod, preferinte precum dimensiunea fontului si culorile folosite.\",\n  \"My Account\": \"Contul meu\",\n  \"Update your account details such as name, email address and password.\": \"Actualizati datele contului, precum nume, adresa de email si parola.\",\n  \"Backend Preferences\": \"Preferinte administrare\",\n  \"Manage your account preferences such as desired language.\": \"Gestionati preferinte limba si setari aspect panou de administrare.\",\n  \"security login\": \"securitate login\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create & Close\": \"Create & Close\",\n  \"Creating :name...\": \"Creating :name...\",\n  \"Save & Close\": \"Save & Close\",\n  \"Saving :name...\": \"Saving :name...\",\n  \"Delete this record?\": \"Delete this record?\",\n  \"Deleting :name...\": \"Deleting :name...\",\n  \"Loading...\": \"Loading...\",\n  \"Complete\": \"Complete\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Unknown column\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Ignore this column\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Created\",\n  \"Updated\": \"Updated\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Warnings\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Skipped Rows\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"File not found\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Libraria PHP :name nu este instalata. Va rugam sa instalati aceasta librarie si apoi sa activati extensia.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Directorul :name si subdirectoarele sale nu au permisiuni de scriere pentru PHP. Va rugam sa setati permisiunile corespunzatoare pentru acest director.\",\n  \"Manage Roles\": \"Gestionați rolurile\",\n  \"Manage Groups\": \"Grupuri\",\n  \"Customize Backend\": \"Personalizează Panou de Administrare\"\n}"
  },
  {
    "path": "modules/backend/lang/rs/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Iskorišćen tip polja nije validan :type.',\n    'options_method_invalid_model' => 'Atribut \\':field\\' ne vraća validni model. Pokušaj da eksplicitno specificiraš metod opcija za model klase :model.',\n    'options_method_not_exists' => 'Model klase :model mora definisati metod :method() koji vraća opcije za polje obrasca \\':field\\'.',\n    'colors_method_not_exists' => 'Model klase :model mora da definiše metod :method() koji vraća heksadecimalne kodove boje za polje obrasca \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'Klasa posredničkog elementa \\':name\\' nije registrovana',\n    'not_bound' => 'Kalasa posredničkog elementa \\':name\\' nije vezana za kontroler',\n  ],\n  'page' => [\n    'untitled' => 'Bez naziva',\n    404 => [\n      'label' => 'Stranica nije pronađena',\n      'help' => 'Traženi URL nije pronađen. Možda tražiš nešto drugo?',\n      'back_link' => 'Nazad na prošlu stranicu',\n    ],\n    'access_denied' => [\n      'label' => 'Pristup odbijen',\n      'help' => 'Nemaš odgovarajuće dozvole za pristup ovoj stranici.',\n      'cms_link' => 'Nazad na pozadinski sistem',\n    ],\n    'no_database' => [\n      'label' => 'Baza podataka nedostaje',\n      'help' => 'Baza podataka je neophodna za pristup pozadinskom sistemu. Proveri da li je baza podataka konfigurisana kako treba i pokušaj ponovo.',\n      'cms_link' => 'Nazad na početnu stranicu',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Parcijal \\':name\\' nije pronađen.',\n    'invalid_name' => 'Naziv parcijala nije validan: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Naziv AJAX rukovatelja nije validan: :name.',\n    'not_found' => 'AJAX rukovatelj \\':name\\' nije pronađen.',\n  ],\n  'account' => [\n    'impersonate' => 'Oponašaj korisnika',\n    'impersonate_confirm' => 'Da li zaista želiš da oponašaš ovog korisnika? Možeš se vratiti na originalno stanje kada se izloguješ.',\n    'impersonate_success' => 'Sada oponašaš ovog korisnika',\n    'impersonate_working' => 'Oponašanje...',\n    'impersonating' => 'Oponašanje :full_name',\n    'stop_impersonating' => 'Prestani sa oponašanjem',\n    'unsuspend' => 'Obustavljena suspenzija',\n    'unsuspend_confirm' => 'Da li zaista želiš da obustaviš suspenziju za ovog korisnika?',\n    'unsuspend_success' => 'Korisnik više nije supsendovan.',\n    'unsuspend_working' => 'Obustavljanje suspenzije...',\n    'signed_in_as' => 'Ulogovan kao :full_name',\n    'sign_out' => 'Izloguj se',\n    'login_placeholder' => 'login',\n    'password_placeholder' => 'lozinka',\n    'enter_email' => 'Unesi svoj email',\n    'email_placeholder' => 'email',\n    'apply' => 'Primeni',\n    'cancel' => 'Otkaži',\n    'delete' => 'Izbriši',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Kontrolna tabla',\n    'widget_inspector_title' => 'Konfiguracija posredničkog elementa',\n    'widget_inspector_description' => 'Konfiguriši izveštaj za posrednički element',\n    'widget_columns_label' => 'Širina :columns',\n    'widget_columns_description' => 'Širina posredničkog elementa, broj između 1 i 12.',\n    'widget_columns_error' => 'Unesi širinu posredničkog elementa kao broj između 1 i 12.',\n    'columns' => '{1} kolona|[2,Inf] kolone',\n    'widget_new_row_label' => 'Novi red na silu',\n    'widget_new_row_description' => 'Postavi posrednički element u novi red.',\n    'widget_title_label' => 'Naslov posredničkog elementa',\n    'widget_title_error' => 'Naslov za posrednički element je neophodan.',\n    'reset_layout_success' => 'Plan je resetovan',\n    'make_default_success' => 'Trenutni plan je sada podrazumevani',\n    'collapse_all' => 'Sklopi sve',\n    'expand_all' => 'Rasklopi sve',\n    'status' => [\n      'widget_title_default' => 'Status sistema',\n      'update_available' => '{0} ispravki dostupno!|{1} ispravka dostupna!|[2,Inf] ispravke dostupne!',\n      'updates_pending' => 'Čekaju se ispravke softvera',\n      'updates_nil' => 'Softver je ažuriran',\n      'updates_link' => 'Ažuriraj',\n      'warnings_pending' => 'Neki problemi zahtevaju vašu pažnju',\n      'warnings_nil' => 'Nema upozorenja za prikaz',\n      'warnings_link' => 'Pogled',\n      'core_build' => 'Verzija sistema',\n      'event_log' => 'Log događaja',\n      'request_log' => 'Log zahteva',\n      'app_birthday' => 'Na mreži od',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Dobrodošli',\n      'welcome_back_name' => 'Dobrodošli nazad na :app, :name.',\n      'welcome_to_name' => 'Dobrodošli na :app, :name.',\n      'first_sign_in' => 'Prvi put ste se ulogovali.',\n      'last_sign_in' => 'Vaše poslednje logovanje je bilo na',\n      'view_access_logs' => 'Prikaži logove pristupa',\n      'nice_message' => 'Lep dan želim!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Upravljanje administratorima',\n    'new' => 'Novi administrator',\n    'first_name' => 'Ime',\n    'last_name' => 'Prezime',\n    'full_name' => 'Ime i prezime',\n    'email' => 'Email',\n    'role_field' => 'Rola',\n    'role_comment' => 'Role definišu dozvole korisnika, koje mogu biti pregažene na korisničkom nivou ili preko taba za dozvole.',\n    'groups' => 'Grupe',\n    'groups_comment' => 'Speicificiraj grupe kojima nalog treba pripadati.',\n    'avatar' => 'Avatar',\n    'password' => 'Lozinka',\n    'password_confirmation' => 'Potvrdi lozinku',\n    'permissions' => 'Dozvole',\n    'account' => 'Nalog',\n    'superuser' => 'Super korisnik',\n    'superuser_comment' => 'Dozvoli ovom nalogu pristup svim delovima sistema bez ograničenja. Super korisnici mogu dodavati i upravljati drugim korisnicima.',\n    'send_invite' => 'Pošalji pozivnicu preko mejla',\n    'send_invite_comment' => 'Pošalji poruku dobrodošlice koja sadrži informacije za logovanje.',\n    'delete_confirm' => 'Obriši administratora?',\n    'return' => 'Nazad na listu administratora',\n    'allow' => 'Dozvoli',\n    'inherit' => 'Nasledi',\n    'deny' => 'Odbij',\n    'activated' => 'Aktiviran',\n    'last_login' => 'Poslednje logovanje:',\n    'created_at' => 'Napravljen:',\n    'updated_at' => 'Ažuriran:',\n    'deleted_at' => 'Obrisan:',\n    'show_deleted' => 'Prikaži izbrisane',\n    'group' => [\n      'name' => 'Grupe',\n      'name_field' => 'Naziv',\n      'name_comment' => 'Naziv je prikazan u listi grupa u administratorskom obrascu.',\n      'description_field' => 'Opis',\n      'is_new_user_default_field_label' => 'Osnovna grupa',\n      'is_new_user_default_field_comment' => 'Podrazumevano dodaj nove administratore ovoj grupi.',\n      'code_field' => 'Kod',\n      'code_comment' => 'Unesi jedinstveni kod ako želiš da pristupaš objektu grupe preko API-ja.',\n      'list_title' => 'Upravljaj grupama',\n      'new' => 'Nova grupa',\n      'delete_confirm' => 'Izbriši ovu administratorsku grupu?',\n      'return' => 'Nazad na listu grupa',\n      'users_count' => 'Korisnici',\n    ],\n    'role' => [\n      'name' => 'Rola',\n      'name_field' => 'Naziv',\n      'name_comment' => 'Naziv je prikazan u listi rola u administratorskom obrascu.',\n      'description_field' => 'Opis',\n      'code_field' => 'Kod',\n      'code_comment' => 'Unesi jedinstveni kod ako želiš da pristupaš objektu role preko API-ja.',\n      'list_title' => 'Upravljaj rolama',\n      'new' => 'Nova rola',\n      'delete_confirm' => 'Izbriši ovu administratorsku rolu?',\n      'return' => 'Nazad na listu rola',\n      'users_count' => 'Korisnici',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nema autentifikovanog korisnika za učitavanje ili čuvanje podeski.',\n    ],\n    'trashed_hint_title' => 'Ovaj nalog je izbrisan',\n    'trashed_hint_desc' => 'Ovaj nalog je izbrisan i neće više moći da se koristi za logovanje. Da ga povratiš, klikni na ikonicu u donjem desnom uglu',\n  ],\n  'list' => [\n    'default_title' => 'Lista',\n    'search_prompt' => 'Traži...',\n    'no_records' => 'Nema zapisa u ovom pogledu.',\n    'missing_model' => 'Lista ponašanja korišćena u klasi :class nema definisan model.',\n    'missing_column' => 'Nema definicija za sledeće kolone: :columns.',\n    'missing_columns' => 'Lista korišćena u klasi :class nema definisane kolone.',\n    'missing_definition' => 'Lista ponašanja ne sadrži definiciju za \\':field\\'.',\n    'missing_parent_definition' => 'Lista ponašanja ne sadrži definiciju za \\':definition\\'.',\n    'behavior_not_ready' => 'Lista ponašanja nije inicijalizovana, proveri da li je metoda makeLists() pozvana u kontroleru.',\n    'invalid_column_datetime' => 'Vrednost kolone \\':column\\' nije DateTime objekat, da li ti nedostaje $dates referenca u modelu?',\n    'pagination' => 'Prikazani zapisi: :from-:to od ukupno :total',\n    'first_page' => 'Prva strana',\n    'last_page' => 'Poslednja strana',\n    'prev_page' => 'Prošla strana',\n    'next_page' => 'Sledeća strana',\n    'refresh' => 'Osveži',\n    'updating' => 'Ažuriranje...',\n    'loading' => 'Učitavanje...',\n    'check' => 'Proveri',\n    'delete_selected' => 'Izbriši izabrane',\n    'delete_selected_empty' => 'Nema izabranih zapisa za brisanje.',\n    'delete_selected_confirm' => 'Izbriši izabrane zapise?',\n    'delete_selected_success' => 'Izabrani zapisi su obrisani.',\n    'column_switch_true' => 'Da',\n    'column_switch_false' => 'Ne',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Klikni na %s ili prevuci fajl ovde za otpremanje',\n  ],\n  'form' => [\n    'create_title' => 'Nova :name',\n    'update_title' => 'Izmeni :name',\n    'preview_title' => 'Pregledaj :name',\n    'restore_success' => ':name povraćen',\n    'reset_success' => 'Resetovanje završeno',\n    'missing_id' => 'ID obrasca nije specificiran.',\n    'missing_model' => 'Ponašanje obrasca koje se koristi u klasi :class nema definisan model.',\n    'missing_definition' => 'Ponašanje obrasca ne sadrži sledeće polje: \\':field\\'.',\n    'action_confirm' => 'Da li ste sigurni?',\n    'create' => 'Napravi',\n    'create_and_close' => 'Napravi i zatvori',\n    'creating' => 'Pravljenje...',\n    'creating_name' => 'Pravljenje :name...',\n    'save' => 'Sačuvaj',\n    'save_and_close' => 'Sačuvaj i zatvori',\n    'saving' => 'Čuvanje...',\n    'saving_name' => 'Čuvanje :name...',\n    'delete' => 'Izbriši',\n    'deleting' => 'Brisanje...',\n    'confirm_delete' => 'Izbriši zapis?',\n    'confirm_delete_multiple' => 'Izbriši odabrane zapise?',\n    'deleting_name' => 'Brisanje :name...',\n    'restore' => 'Povrati',\n    'restoring' => 'Vraćanje...',\n    'confirm_restore' => 'Da li zaista želite da povratite ovaj zapis?',\n    'reset_default' => 'Resetuj na osnovno',\n    'resetting' => 'Resetovanje',\n    'resetting_name' => 'Resetovanje :name',\n    'undefined_tab' => 'Razno',\n    'field_off' => 'Isključi',\n    'field_on' => 'Uključi',\n    'add' => 'Dodaj',\n    'apply' => 'Primeni',\n    'cancel' => 'Poništi',\n    'close' => 'Zatvori',\n    'confirm' => 'Potvrdi',\n    'reload' => 'Ponovo učitaj',\n    'complete' => 'Kompletno',\n    'ok' => 'OK',\n    'or' => 'ili',\n    'confirm_tab_close' => 'Zatvori tab? Nesačuvane promene će biti izgubljene.',\n    'behavior_not_ready' => 'Ponašanje obrasca se nije inicijalizovalo, proveri da li je metoda initForm() pozvana.',\n    'preview_no_files_message' => 'Nema otpremljenih fajlova.',\n    'preview_no_media_message' => 'Nema izabranih medija.',\n    'preview_no_record_message' => 'Nema izabranih zapisa.',\n    'select' => 'Izaberi',\n    'select_all' => 'Izaberi sve',\n    'select_none' => 'Ukloni odabire',\n    'insert_row' => 'Ubaci red',\n    'insert_row_below' => 'Ubaci red ispod',\n    'delete_row' => 'Izbriši red',\n    'concurrency_file_changed_title' => 'Fajl je izmenjen',\n    'concurrency_file_changed_description' => 'Fajl nad kojim je rađeno je u međuvremenu promenjen od strane drugog korisnika. Možeš ponovo da ga učitaš i izgubiš svoje promene, ili ga jednostavno pregaziš.',\n    'return_to_list' => 'Nazad na listu',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Pronađi zapis',\n    'invalid_model_class' => 'Klasa modela \":modelClass\" za pretragu nije validna',\n    'cancel' => 'Otkaži',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Relacioni odnos nema konfiguraciju za \\':config\\'.',\n    'missing_definition' => 'Relacioni odnos ne sadrži definiciju za polje \\':field\\'.',\n    'missing_model' => 'Relacioni odnos korišćen u klasi :class nema definisan model.',\n    'invalid_action_single' => 'Ova radnja se ne može izvršiti na jednoj vezi.',\n    'invalid_action_multi' => 'Ova radnja se ne može izvršiti na više veza.',\n    'help' => 'Klikni na element za dodavanje',\n    'add' => 'Dodaj',\n    'link_selected' => 'Zakači izabrane',\n    'cancel' => 'Otkaži',\n    'close' => 'Zatvori',\n    'create' => 'Napravi',\n    'update' => 'Ažuriraj',\n    'preview' => 'Pregledaj',\n    'remove_name' => 'Ukloni :name',\n    'delete_name' => 'Izbriši :name',\n    'link' => 'Zakači',\n    'unlink_name' => 'Otkači :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Promeni redosled',\n    'no_records' => 'Ne postoje elementi za razmeštanje.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' sa odabranim identifikatorom :id nije pronađen',\n    'missing_id' => 'ID za pretragu modela nije specificiran.',\n    'missing_relation' => 'Model \\':class\\' ne sadrži definiciju za relaciju: \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' ne sadrži metod: \\':method\\'.',\n    'invalid_class' => 'Model :model korišćen u klasi :class nije validan, mora da nasledi klasu \\\\Model.',\n    'mass_assignment_failed' => 'Greška pri masovnom dodeljivanju za atribut modela: \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Saveti za konfigurisanje sistema',\n    'tips_description' => 'Postoje problemi na koje bi trebalo da obratiš pažnju da bi konfigurisao sistem kako treba.',\n    'decompileBackendAssets' => 'Sredstva u pozadinskom sistemu trenutno nisu kompajlovana što nije preporučljivo.',\n  ],\n  'editor' => [\n    'toolbar_buttons_presets' => [\n      'default' => 'Osnovna',\n      'minimal' => 'Minimalna',\n      'full' => 'Kompletna',\n    ],\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Moja podešavanja',\n    'menu_description' => 'Podešavanja vezana za administratorski nalog',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Akcentovane boje',\n    'menu_mode_inline_no_icons' => 'Uveden (bez ikonica)',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'svi',\n    'options_method_not_exists' => 'Model klase :model mora definisati povratne opcije metoda :method() za \\':filter\\' filter.',\n    'date_all' => 'svi periodi',\n    'number_all' => 'svi brojevi',\n  ],\n  'import_export' => [\n    'row' => 'Red :row',\n    'export_error' => 'Greška pri izvozu',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Zapadnoevropski)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Srednjoevropski)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, Južnoevropski)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, Severnoevropski)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Ćirilični)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arapski)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Grčki)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrejski)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turski)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordijski)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Tajlandski)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltički region)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Keltski)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Zapadnoevropska revizija sa euro znakom)',\n      'windows_1250' => 'Windows-1250 (CP1250, Severnoevropski i istočnoevropski)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Otpremi i upravljaj medijima - slikama, video i audio zapisima, dokumentima',\n  ],\n  'mediafinder' => [\n    'label' => 'Pretražuj medije',\n    'default_prompt' => 'Klikni na %s dugme za traženje elementa',\n    'no_image' => 'Slika nije pronađena',\n  ],\n  'media' => [\n    'menu_label' => 'Mediji',\n    'upload' => 'Otpremanje',\n    'move' => 'Pomeri',\n    'delete' => 'Izbriši',\n    'add_folder' => 'Dodaj direktorijum',\n    'search' => 'Traži',\n    'display' => 'Prikaži',\n    'filter_everything' => 'Sve',\n    'filter_images' => 'Slike',\n    'filter_video' => 'Video zapisi',\n    'filter_audio' => 'Audio zapisi',\n    'filter_documents' => 'Dokumenta',\n    'library' => 'Biblioteka',\n    'size' => 'Veličina',\n    'title' => 'Naslov',\n    'last_modified' => 'Poslednja modifikacija',\n    'public_url' => 'URL',\n    'click_here' => 'Klikni ovde',\n    'thumbnail_error' => 'Greška pri generisanju pregledne slike.',\n    'return_to_parent' => 'Nazad na nadređeni direktorijum',\n    'return_to_parent_label' => 'Idi nazad ..',\n    'nothing_selected' => 'Ništa nije izabrano.',\n    'multiple_selected' => 'Više elemenata je izabrano.',\n    'uploading_file_num' => 'Otpremi :number fajl(ova)...',\n    'uploading_complete' => 'Otpremanje završeno',\n    'uploading_error' => 'Otpremanje neuspešno',\n    'type_blocked' => 'Fajl je blokiran iz bezbednosnih razloga.',\n    'order_by' => 'Sortiraj po',\n    'direction' => 'Pravac',\n    'direction_asc' => 'Uzlazni',\n    'direction_desc' => 'Silazni',\n    'folder' => 'Direktorijum',\n    'no_files_found' => 'Nijedan fajl nije pronađen.',\n    'delete_empty' => 'Izaberi elemente za brisanje.',\n    'delete_confirm' => 'Izbriši odabran element(e)?',\n    'error_renaming_file' => 'Greška pri promeni naziva elementa.',\n    'new_folder_title' => 'Novi direktorijum',\n    'folder_name' => 'Naziv direktorijuma',\n    'error_creating_folder' => 'Greška pri pravljenju direktorijuma',\n    'folder_or_file_exist' => 'Direktorijum ili fajl sa navedenim nazivom već postoji.',\n    'move_empty' => 'Izaberi elemente za pomeranje.',\n    'move_popup_title' => 'Pomeri fajlove ili direktorijume',\n    'move_destination' => 'Odredišni direktorijum',\n    'please_select_move_dest' => 'Izaberi odredišni direktorijum.',\n    'move_dest_src_match' => 'Izaberi drugi odredišni direktorijum.',\n    'empty_library' => 'Otpremi fajlove ili napravi direktorijume.',\n    'insert' => 'Ubaci',\n    'crop_and_insert' => 'Iseci & ubaci',\n    'select_single_image' => 'Izaberi jednu sliku.',\n    'selection_not_image' => 'Izabrani element nije slika.',\n    'restore' => 'Poništi sve promene',\n    'resize' => 'Promeni veličinu...',\n    'selection_mode_normal' => 'Normalna',\n    'selection_mode_fixed_ratio' => 'Fiksirani odnos',\n    'selection_mode_fixed_size' => 'Fiksirana veličina',\n    'height' => 'Visina',\n    'width' => 'Širina',\n    'selection_mode' => 'Mod selekcije',\n    'resize_image' => 'Promeni veličinu slike',\n    'image_size' => 'Veličina slike:',\n    'selected_size' => 'Izabrana veličina:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/rs.json",
    "content": "{\n  \"1. Export output format\": \"1. Izvezi izlazni format\",\n  \"File Format\": \"Format fajla\",\n  \"Delimiter Character\": \"Granični znak\",\n  \"Enclosure Character\": \"Ogradni znak\",\n  \"Escape Character\": \"Komandni znak\",\n  \"2. Select columns to export\": \"2. Izaberi kolone za izvoz\",\n  \"Columns\": \"Kolone\",\n  \"3. Set export options\": \"3. Postavi izvozne opcije\",\n  \"CSV Custom\": \"Proizvoljni format\",\n  \"1. Upload an Import File\": \"1. Otpremi CSV fajl\",\n  \"Import File\": \"Uvezi fajl\",\n  \"File Encoding\": \"Format enkodovanja\",\n  \"First row contains column titles\": \"Prvi red sadrži naslove kolona\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Ostavite ovo polje označeno ako se prvi red u CSV fajlu koristi za naslove kolona.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Upari kolone fajla sa kolonama baze podataka\",\n  \"File columns\": \"Kolone fajla\",\n  \"Database fields\": \"Polja u bazi podataka\",\n  \"3. Set Import Options\": \"3. Postavi uvozne opcije\",\n  \"Export progress\": \"Progres izvoza\",\n  \"Processing\": \"Procesovanje\",\n  \"Import progress\": \"Progres uvoza\",\n  \"Import error\": \"Greška pri uvozu\",\n  \"Export error\": \"Greška pri izvozu\",\n  \"Column preview\": \"Pregled kolone\",\n  \"Column\": \"Kolona\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Ovaj log prikazuje listu uspešnih logova od strane administratora. Logovi se čuvaju ukupno :days dana.\",\n  \"Access Log\": \"Logovi pristupa\",\n  \"View a list of successful back-end user sign ins.\": \"Prikaži listu uspešnih logovanja na pozadinski sistem.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Datum & vreme\",\n  \"Type\": \"Tip\",\n  \"IP address\": \"IP adresa\",\n  \"Login\": \"Logovanje\",\n  \"First name\": \"Ime\",\n  \"Last name\": \"Prezime\",\n  \"Email\": \"Email\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Unešeni detalji se ne podudaraju sa onima u bazi, pokušajte ponovo.\",\n  \"Administration Area\": \"Administratorska sekcija\",\n  \"Password Reset\": \"Resetovanje lozinke\",\n  \"Please enter a new password.\": \"Unesi novu lozinku\",\n  \"Please enter your login to restore the password.\": \"Unesi svoj login\",\n  \"A user could not be found with a login value of ':login'\": \"Korisnik nije pronađen sa navedenom vrednošću: ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Poruka sa instrukcijama je poslata na vašu adresu.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Priloženi podaci za resetovanje lozinke nisu validni. Pokušaj ponovo!\",\n  \"Unable to reset your password!\": \"Resetovanje lozinke nije moguće!\",\n  \"Password has been reset. You may now sign in.\": \"Lozinka je resetovana, možeš se ulogovati.\",\n  \"Restore\": \"Povrati\",\n  \"Reset\": \"Resetuj\",\n  \"Stay logged in\": \"Ostani ulogovan\",\n  \"Forgot password?\": \"Zaboravljena lozinka?\",\n  \"Manage Widgets\": \"Upravljanje posredničkim elementima\",\n  \"Add Widget\": \"Dodaj posrednički element\",\n  \"Set the current layout as the default?\": \"Postavi trenutni plan kao podrazumevani?\",\n  \"Make Default\": \"Učini podrazumevanim\",\n  \"Reset layout back to default?\": \"Resetuj plan na podrazumevani?\",\n  \"Reset Layout\": \"Resetuj plan\",\n  \"Widget\": \"Posrednički element\",\n  \"please select\": \"izaberi\",\n  \"Width\": \"Širina\",\n  \"full width\": \"puna širina\",\n  \"Primary Color\": \"Primarne boje\",\n  \"Secondary Color\": \"Sekundarne boje\",\n  \"This name is shown in the title area of the back-end.\": \"Ovo ime će se prikazati kao naslov pozadinskog sistema.\",\n  \"App Name\": \"Naziv aplikacije\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Ovaj slogan će se prikazati na strani za logovanje na pozadinski sistem.\",\n  \"App Tagline\": \"Slogan aplikacije\",\n  \"Brand\": \"Brend\",\n  \"Upload a custom logo to use in the back-end.\": \"Otpremi željeni logo za pozadinski sistem.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Otpremi željenu ikonicu za pozadinski sistem.\",\n  \"Favicon\": \"Ikonica\",\n  \"Colors\": \"Boje\",\n  \"Menu Style\": \"Stil menija\",\n  \"Navigation\": \"Navigacija\",\n  \"Custom Stylesheet\": \"Proizvoljni stilovi\",\n  \"Styles\": \"Stilovi\",\n  \"Inline\": \"Uveden\",\n  \"Tiles\": \"Poređan\",\n  \"Collapsed\": \"Sklopljen\",\n  \"Add New Item\": \"Dodaj novi element\",\n  \"Region\": \"Region\",\n  \"Locale\": \"Prevod\",\n  \"Select your desired locale for language use.\": \"Izaberi željeni jezik prevoda.\",\n  \"Timezone\": \"Vremenska zona\",\n  \"Adjust displayed dates to this timezone.\": \"Podesi prikazane datume na osnovu ove vremenske zone.\",\n  \"Code Editor\": \"Editor koda\",\n  \"Color Scheme\": \"Boje\",\n  \"Word Wrap\": \"Prelomi redove\",\n  \"Off\": \"Isključen mod\",\n  \"40 Characters\": \"40 karaktera\",\n  \"80 Characters\": \"80 karaktera\",\n  \"Fluid\": \"Fluidan mod\",\n  \"Font Size\": \"Veličina fonta\",\n  \"Tab Size\": \"Veličina taba\",\n  \"Code Folding\": \"Presavijanje koda\",\n  \"Mark begin\": \"Označi početak\",\n  \"Mark begin and end\": \"Označi početak i kraj\",\n  \"Autocompletion\": \"Automatsko dovršavanje\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Osnovno automatsko dovršavanje (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Instant automatsko dovršavanje\",\n  \"Show gutter\": \"Prikaži margine za povezivanje\",\n  \"Highlight active line\": \"Istakni aktivne linije\",\n  \"Automatically close tags\": \"Automatski zatvori tagove\",\n  \"Indent using tabs\": \"Uvođenje pomoću tabova\",\n  \"Show indent guides\": \"Prikaži pomoćne margine za uvođenje\",\n  \"Show invisible characters\": \"Prikaži nevidljive karaktere\",\n  \"Show print margin\": \"Prikaži margine za štampu\",\n  \"Custom styles to include in the HTML editor.\": \"Proizvoljni stilovi za uključivanje u HTML editor.\",\n  \"Markup Styles\": \"Stilovi označavanja\",\n  \"Markup Classes\": \"Klase označavanja\",\n  \"Label\": \"Oznaka\",\n  \"Paragraph\": \"Paragraf\",\n  \"Class Name\": \"Naziv klase\",\n  \"Link\": \"Link\",\n  \"Table\": \"Tabela\",\n  \"Table Cell\": \"Ćelija tabele\",\n  \"Image\": \"Slika\",\n  \"Allowed Tags\": \"Dozvoljeni tagovi\",\n  \"The list of allowed tags.\": \"Lista dozvoljenih tagova.\",\n  \"Markup Tags\": \"Tagovi označavanja\",\n  \"Allowed Empty Tags\": \"Dozvoljeni prazni tagovi\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Lista tagova koji se ne brišu kada nemaju sadržaj.\",\n  \"Do Not Wrap Tags\": \"Ne umeći tagove\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Lista tagova koji se ne trebaju umetati u blokovske tagove.\",\n  \"Remove Tags\": \"Ukloni tagove\",\n  \"The list of tags that are removed together with their content.\": \"Lista tagova koji se brišu zajedno sa njihovim sadržajem.\",\n  \"Line Breaker Tags\": \"Tagovi za liniju prekida\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Lista tagova koji se koriste za postavljanje linije prekida za elemente.\",\n  \"Toolbar Buttons\": \"Traka sa alatkama\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Traka sa alatkama će obično biti prikazana u editoru.\",\n  \"Insert a preset toolbar button configuration\": \"Ubaci već podešenu konfiguraciju za traku sa alatkama:\",\n  \"Enable code snippets (Tab)\": \"Uključi isečke za kod (Tab)\",\n  \"Title\": \"Naslov\",\n  \"Description\": \"Opis\",\n  \"Attachment\": \"Prilog\",\n  \"Attachment URL\": \"URL priloga\",\n  \"Add a title and description for this attachment.\": \"Dodaj naslov i opis za ovaj prilog.\",\n  \"Are you sure?\": \"Da li ste sigurni?\",\n  \"Upload Error\": \"Greška pri otpremanju\",\n  \"Remove File\": \"Izbriši fajl\",\n  \"Create :name\": \"Napravi :name\",\n  \"Update :name\": \"Ažuriraj :name\",\n  \"Add :name\": \"Dodaj :name\",\n  \"Link :name\": \"Zakači :name\",\n  \"Delete\": \"Izbriši\",\n  \"Remove\": \"Ukloni\",\n  \"Unlink\": \"Otkači\",\n  \"Preview :name\": \"Pregledaj :name\",\n  \"Link a New :name\": \"Zakači novu :name\",\n  \"Add a New :name\": \"Dodaj novu :name\",\n  \"Related :name Data\": \"Srodni podatak: :name\",\n  \":name Created\": \":name napravljen\",\n  \":name Updated\": \":name ažuriran\",\n  \":name Deleted\": \":name obrisan\",\n  \"Form record with an ID of :id could not be found.\": \"Zapis obrasca sa identifikatorom :id nije pronađen.\",\n  \"Preview the Website\": \"Pregledaj sajt\",\n  \"Administrators\": \"Administratori\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Upravljaj administratorima pozadinskog sistema, grupama i dozvolama.\",\n  \"Role Permissions\": \"Upravljaj rolama\",\n  \"Team Groups\": \"Upravljaj grupama\",\n  \"Branding & Appearance\": \"Izmene pozadinskog sistema\",\n  \"Customize the administration area such as name, colors and logo.\": \"Izmene za administratorsku sekciju poput naziva, boja, logoa, itd.\",\n  \"Editor Settings\": \"Podešavanje editora\",\n  \"Change the global editor preferences.\": \"Izmeni postavke globalnog editora, kao što su veličina fonta, boje, itd.\",\n  \"My Account\": \"Moj nalog\",\n  \"Update your account details such as name, email address and password.\": \"Ažuriraj detalje svog naloga kao što su ime, prezime, email adresa i lozinka.\",\n  \"Backend Preferences\": \"Postavke pozadinskog sistema\",\n  \"Manage your account preferences such as desired language.\": \"Upravljaj postavkama tvog naloga.\",\n  \"security login\": \"bezbednosno logovanje\",\n  \"List Setup\": \"Podešavanje liste\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Koristi polja za potvrdu za biranje kolona koje želiš da vidiš u listi. Možeš menjati položaj kolona prevlačenjem na gore ili dole.\",\n  \"Records Per Page\": \"Zapisa po strani\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Izaberi broj zapisa za prikazivanje po strani. Imaj samo na umu da veliki broj zapisa po strani može smanjiti performanse.\",\n  \"Add Selected\": \"Dodaj izabrane\",\n  \"Please specify the modelClass property for :type\": \"Izaberi svojstvo modela kalse za svojstvo: :type\",\n  \"Please specify some columns to export.\": \"Specificiraj kolone za izvoz.\",\n  \"Missing column identifier\": \"Identifikator kolone ne postoji\",\n  \"Unknown column\": \"Nepoznata kolona\",\n  \"Please specify some columns to import.\": \"Specificiraj neke kolone za uvoz.\",\n  \"Please match some columns first.\": \"Upari prvo neke kolone.\",\n  \"Please specify a match for the required field :label.\": \"Specificiraj par za obavezno polje: :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Kodiranje izvorne datoteke nije prepoznato. Izaberite opciju prilagođenog formata datoteke sa odgovarajućim kodiranjem da biste uvezli datoteku.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Moraš implementirati ponašanje za \\\"ListController\\\" sa omogućenom opcijom izvoza - \\\"useList.\\\"\",\n  \"File export process completed!\": \"Proces izvoza fajla je završen!\",\n  \"The browser will now redirect to the file download.\": \"Pretraživač će sada biti preusmeren na fajl za preuzimanje.\",\n  \"Ignore this column\": \"Ignoriši ovu kolonu\",\n  \"Drop column here...\": \"Spusti kolonu ovde...\",\n  \"Please upload a valid CSV file.\": \"Otpremi validan CSV fajl.\",\n  \"Created\": \"Napravljeni\",\n  \"Updated\": \"Ažurirani\",\n  \"Skipped\": \"Preskočeni\",\n  \"Warnings\": \"Upozorenja\",\n  \"Errors\": \"Greške\",\n  \"Skipped Rows\": \"Preskočeni redovi\",\n  \"Show Ignored Columns\": \"Prikaži ignorisane kolone\",\n  \"Auto Match Columns\": \"Automatski upari kolone\",\n  \"File not found\": \"Fajl nije pronađen\",\n  \"There was no data supplied to export\": \"Nije bilo podataka za izvoz\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Uključen je mod za ispravljanje grešaka što nije preporučljivo.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Produžetak za PHP :name nije instaliran. Instaliraj ovu biblioteku i produžetak.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Produžetak :name je obavezan ali nije instaliran. Instaliraj ovaj produžetak.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"PHP ne može pristupiti direktorijumu :name ili njegovim poddirektorijuma zarad upisivanja. Promeni RWX dozvole na serveru za ovaj direktorijum.\"\n}"
  },
  {
    "path": "modules/backend/lang/ru/lang.php",
    "content": "<?php return [\n  'auth' => [\n    'title' => 'Панель управления',\n    'invalid_login' => 'Вы ввели некорректные данные. Пожалуйста, перепроверьте их и попробуйте ещё раз.',\n  ],\n  'field' => [\n    'invalid_type' => 'Использован неверный тип поля: :type.',\n    'options_method_not_exists' => 'Класс модели :model должен содержать метод :method(), возвращающий опции для поля формы \\':field\\'.',\n    'colors_method_not_exists' => 'Класс модели :model должен содержать метод :method(), возвращающий HTML цвет в HEX для поля формы \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'Класс виджета \\':name\\' не зарегистрирован.',\n    'not_bound' => 'Виджет с именем класса \\':name\\' не связан с контроллером.',\n  ],\n  'page' => [\n    'untitled' => 'Без названия',\n    'not_found' => [\n      'label' => 'Страница не найдена',\n      'help' => 'Запрашиваемая страница не найдена.',\n      'back_link' => 'Вернутся к предыдущей странице',\n    ],\n    'access_denied' => [\n      'label' => 'Доступ запрещен',\n      'help' => 'У вас нет необходимых прав для просмотра этой страницы.',\n      'cms_link' => 'Перейти к CMS',\n    ],\n    'no_database' => [\n      'label' => 'Отсутствует база данных',\n      'help' => 'Для доступа к серверу требуется база данных. Проверьте, что база данных настроена и перенесена, прежде чем повторять попытку.',\n      'cms_link' => 'Вернуться на главную страницу',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Не удалось найти шаблон (partial) с именем :name.',\n    'invalid_name' => 'Неправильное название фрагмента: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Неправильное название AJAX метода: :name.',\n    'not_found' => 'AJAX метод \\':name\\' не найден.',\n  ],\n  'account' => [\n    'impersonate' => 'Имперсонация пользователя',\n    'impersonate_confirm' => 'Вы уверены что хотите авторизоваться этим пользователем? Вы можете вернутся к своему аккаунту выйдя из него.',\n    'impersonate_success' => 'Вы имперсонируете этого пользователя',\n    'impersonate_working' => 'Имперсонация...',\n    'impersonating' => 'Имперсонированы как :full_name',\n    'stop_impersonating' => 'Прекратить имперсонацию',\n    'signed_in_as' => 'Выполнен вход как :full_name',\n    'sign_out' => 'Выйти',\n    'login' => 'Вход',\n    'input_username' => 'Логин',\n    'input_password' => 'Пароль',\n    'login_prompt' => 'Добро пожаловать! Пожалуйста введите логин и пароль для входа чтобы продолжить.',\n    'reset' => 'Сбрость',\n    'restore' => 'Восстановить',\n    'login_placeholder' => 'Логин',\n    'password_restore' => 'Сбросить пароль',\n    'password_placeholder' => 'Пароль',\n    'remember_me' => 'Оставаться в системе',\n    'forgot_password' => 'Забыли пароль?',\n    'enter_email' => 'Введите свой email',\n    'enter_login' => 'Пожалуйста введите свой логин чтобы сбросить пароль.',\n    'email_placeholder' => 'email',\n    'enter_new_password' => 'Пожалуйста введите новый пароль.',\n    'password_reset' => 'Сброс пароля',\n    'restore_success' => 'Если аккаунт существует, на его электронную почту будет отправлено сообщение с инструкциями для восстановления пароля.',\n    'restore_error' => 'Пользователь \\':login\\' не найден',\n    'reset_success' => 'Пароль был успешно сброшен. Теперь вы можете войти в систему.',\n    'reset_error' => 'Неправильный пароль! Попробуйте еще раз',\n    'reset_fail' => 'Невозможно сбросить ваш пароль!',\n    'apply' => 'Применить',\n    'cancel' => 'Отменить',\n    'delete' => 'Удалить',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Дашборд',\n    'widget_inspector_title' => 'Конфигурации виджета',\n    'widget_inspector_description' => 'Настройка отображения виджета',\n    'widget_columns_label' => 'Ширина :columns',\n    'widget_columns_description' => 'Ширина виджета может варьироваться от 1 до 10.',\n    'widget_columns_error' => 'Пожалуйста, выберите ширину виджета.',\n    'columns' => '{1} колонка|[2,4] колонки|[5,Inf] колонок',\n    'widget_new_row_label' => 'Новая строка',\n    'widget_new_row_description' => 'Поставить виджет с новой строки.',\n    'widget_title_label' => 'Заголовок',\n    'widget_title_error' => 'Заголовок виджета обязателен.',\n    'reset_layout_success' => 'Расположение было сброшено',\n    'make_default_success' => 'Текущее расположение сохранено как расположение по умолчанию',\n    'collapse_all' => 'Свернуть всё',\n    'expand_all' => 'Развернуть всё',\n    'status' => [\n      'widget_title_default' => 'Статус системы',\n      'update_available' => '{0} нет новый обновлений!|{1} доступно новое обновление!|[2,Inf] доступны новые обновления!',\n      'updates_pending' => 'Доступны обновления',\n      'updates_nil' => 'Используется последняя версия',\n      'updates_link' => 'Обновить',\n      'warnings_pending' => 'Требуется ваше внимание',\n      'warnings_nil' => 'Ошибок нет',\n      'warnings_link' => 'Просмотр',\n      'core_build' => 'Сборка',\n      'event_log' => 'Лог событий',\n      'request_log' => 'Лог запросов',\n      'app_birthday' => 'Онлайн с',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Добро пожаловать',\n      'welcome_back_name' => 'С возвращением в :app, :name.',\n      'welcome_to_name' => 'Добро пожаловать в :app, :name.',\n      'first_sign_in' => 'Это первый раз, когда вы вошли в систему.',\n      'last_sign_in' => 'Последний раз вы заходили',\n      'view_access_logs' => 'Посмотреть лог доступа',\n      'nice_message' => 'Хорошего дня!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Администратора',\n    'list_title' => 'Управление администраторами',\n    'new' => 'Добавить администратора',\n    'first_name' => 'Имя',\n    'last_name' => 'Фамилия',\n    'full_name' => 'Полное имя',\n    'email' => 'Почта',\n    'role_field' => 'Роль',\n    'role_comment' => 'Роли определяют уровни доступа пользователей, которые могут быть изменены на уровне пользователя, на вкладке \"Разрешения\".',\n    'groups' => 'Группы',\n    'groups_comment' => 'Укажите, к какой группе должен принадлежать этот аккаунт.',\n    'avatar' => 'Аватар',\n    'password' => 'Пароль',\n    'password_confirmation' => 'Подтверждение пароля',\n    'permissions' => 'Полномочия',\n    'account' => 'Аккаунт',\n    'superuser' => 'Суперпользователь',\n    'superuser_comment' => 'Предоставляет этому аккаунту неограниченный доступ ко всем областям.',\n    'send_invite' => 'Отправить приглашение по электронной почте',\n    'send_invite_comment' => 'Отправляет приветственное сообщение, содержащее информацию о логине и пароле.',\n    'delete_confirm' => 'Вы действительно хотите удалить этого администратора?',\n    'return' => 'Вернуться к списку администраторов',\n    'allow' => 'Разрешить',\n    'inherit' => 'Наследовать',\n    'deny' => 'Запретить',\n    'activated' => 'Активирован',\n    'last_login' => 'Последний вход',\n    'created_at' => 'Создан',\n    'updated_at' => 'Обновлен',\n    'deleted_at' => 'Удален',\n    'show_deleted' => 'Показать удаленных',\n    'group' => [\n      'name' => 'Группы',\n      'name_field' => 'Название',\n      'name_comment' => 'Название отображается в списке групп в форме создания/редактирования администраторов.',\n      'description_field' => 'Описание',\n      'is_new_user_default_field_label' => 'Группа по умолчанию',\n      'is_new_user_default_field_comment' => 'Добавлять новых администраторов в эту группу по умолчанию.',\n      'code_field' => 'Уникальный код',\n      'code_comment' => 'Введите уникальный код, если вы хотите открыть доступ к нему с помощью API.',\n      'list_title' => 'Управление группами',\n      'new' => 'Добавить группу',\n      'delete_confirm' => 'Вы действительно хотите удалить эту группу администраторов?',\n      'return' => 'Вернуться к списку групп',\n      'users_count' => 'Пользователи',\n    ],\n    'role' => [\n      'name' => 'Роль',\n      'name_field' => 'Название',\n      'name_comment' => 'Название отображается в списке ролей в форме \"Администратор\".',\n      'description_field' => 'Описание',\n      'code_field' => 'Код',\n      'code_comment' => 'Введите уникальный код, если вы хотите получить доступ к объекту роли при помощи API.',\n      'list_title' => 'Управление ролями',\n      'new' => 'Новая роль',\n      'delete_confirm' => 'Удалить эту роль администратора?',\n      'return' => 'Вернуться к списку ролей',\n      'users_count' => 'Пользователи',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Невозможно загрузить или сохранить настройки для неавторизованного пользователя.',\n    ],\n    'trashed_hint_title' => 'Этот аккаунт был удален',\n    'trashed_hint_desc' => 'Этот аккаунт был удален и больше не имеет возможности авторизоваться. Чтобы восстановить этот аккаунт, нажмите на иконку восстановления в правом нижнем углу.',\n  ],\n  'list' => [\n    'default_title' => 'Список',\n    'search_prompt' => 'Поиск...',\n    'no_records' => 'По вашему запросу ничего не найдено.',\n    'missing_model' => 'Для списка используемого в :class не определена модель.',\n    'missing_column' => 'Нет никаких определений столбца для :columns.',\n    'missing_columns' => 'Список используемый в :class не имеет никаких столбцов.',\n    'missing_definition' => 'Поведение списка не содержит столбец для \\':field\\'.',\n    'missing_parent_definition' => 'Поведение списка не содержит определения для \\':definition\\'.',\n    'behavior_not_ready' => 'Поведение списка не было инициализировано, проверьте вызов makeLists() в вашем контроллере.',\n    'invalid_column_datetime' => 'Значение столбца \\':column\\' не является объектом DateTime. Отсутствует $dates ссылка в модели?',\n    'pagination' => 'Отображено записей: :from-:to из :total',\n    'first_page' => 'Первая страница',\n    'last_page' => 'Последняя страница',\n    'prev_page' => 'Предыдущая страница',\n    'next_page' => 'Следующая страница',\n    'refresh' => 'Обновить',\n    'updating' => 'Обновление...',\n    'loading' => 'Загрузка...',\n    'check' => 'Проверить',\n    'create_button' => 'Создать :name',\n    'delete_selected' => 'Удалить выбранное',\n    'delete_selected_empty' => 'Нет выбранных записей для удаления.',\n    'delete_selected_confirm' => 'Удалить выбранные записи?',\n    'delete_selected_success' => 'Выбранные записи успешно удалены.',\n    'column_switch_true' => 'Да',\n    'column_switch_false' => 'Нет',\n  ],\n  'object_list' => [\n    'prop_cant_be_empty' => 'Свойство :property не может быть пустым',\n    'key_value_exists' => 'Значение уже установлено: :property_value',\n  ],\n  'fileupload' => [\n    'clear' => 'Удалить',\n  ],\n  'form' => [\n    'create_title' => 'Создание :name',\n    'update_title' => 'Редактирование :name',\n    'preview_title' => 'Предпросмотр :name',\n    'restore_success' => ':name восстановлен',\n    'reset_success' => 'Сброс завершен',\n    'missing_id' => 'Идентификатор формы записи не указан.',\n    'missing_tab' => 'Отсутствует определение вкладки.',\n    'missing_model' => 'Для формы используемой в :class не определена модель.',\n    'missing_definition' => 'Поведение формы не содержит поле для\\':field\\'.',\n    'action_confirm' => 'Вы уверены, что хотите сделать это?',\n    'create' => 'Создать',\n    'create_and_close' => 'Создать и закрыть',\n    'creating' => 'Создание...',\n    'creating_name' => 'Создание :name...',\n    'save' => 'Сохранить',\n    'save_and_close' => 'Сохранить и закрыть',\n    'saving' => 'Сохранение...',\n    'saving_name' => 'Сохранение :name...',\n    'delete' => 'Удалить',\n    'deleting' => 'Удаление...',\n    'confirm_delete' => 'Вы действительно хотите удалить эту запись?',\n    'confirm_delete_multiple' => 'Вы действительно хотите удалить выбранные записи?',\n    'deleting_name' => 'Удаление :name...',\n    'restore' => 'Восстановить',\n    'restoring' => 'Восстановление',\n    'confirm_restore' => 'Вы уверены что хотите восстановить эту запись?',\n    'reset_default' => 'Сбросить настройки',\n    'resetting' => 'Сброс',\n    'resetting_name' => 'Сброс :name',\n    'undefined_tab' => 'Разное',\n    'field_off' => 'Выкл',\n    'field_on' => 'Вкл',\n    'add' => 'Добавить',\n    'apply' => 'Применить',\n    'cancel' => 'Отмена',\n    'close' => 'Закрыть',\n    'confirm' => 'Подтвердить',\n    'reload' => 'Обновить',\n    'complete' => 'Завершить',\n    'ok' => 'OK',\n    'or' => 'или',\n    'confirm_tab_close' => 'Закрыть вкладку? Несохраненные изменения будут потеряны.',\n    'behavior_not_ready' => 'Поведение формы не было инициализировано, проверьте вызов initForm() в вашем контроллере.',\n    'preview_no_files_message' => 'Нет загруженных файлов.',\n    'preview_no_media_message' => 'Нет выбранного медиа.',\n    'preview_no_record_message' => 'Нет выбранных записей.',\n    'select' => 'Выбрать',\n    'select_all' => 'Выбрать все',\n    'select_none' => 'Отменить',\n    'insert_row' => 'Вставить строку',\n    'insert_row_below' => 'Вставить строку ниже',\n    'delete_row' => 'Удалить строку',\n    'concurrency_file_changed_title' => 'Файл был изменен',\n    'concurrency_file_changed_description' => 'Файл,редактируемый вами, был изменен другим пользователем. Вы можете перезагрузить файл и потерять ваши изменения или перезаписать его',\n    'return_to_list' => 'Вернуться к списку',\n    'no_options_found' => 'Опции не найдены',\n    'error' => 'Ошибка',\n    'toggle_full_screen' => 'Перейти в полноэкранный режим',\n  ],\n  'treeview' => [\n    'expand' => 'Раскрыть',\n    'collapse' => 'Скрыть',\n    'reorder' => 'Сортировка',\n    'clear_search' => 'Очистить поиск',\n    'search' => 'Поиск',\n    'command_or_document' => 'Команда или документ...',\n    'quick_access' => 'Быстрый доступ',\n    'open' => 'Открыть',\n    'commands' => 'Команды',\n  ],\n  'tabs' => [\n    'close' => 'Закрыть вкладку',\n    'close_all' => 'Закрыть все вкладки',\n    'close_others' => 'Закрыть остальные вкладки',\n    'close_saved' => 'Закрыть сохраненные вкладки',\n    'full_screen' => 'Переключить полноэкранный режим',\n  ],\n  'modal' => [\n    'close' => 'Close',\n  ],\n  'dropdownmenu' => [\n    'go_back' => 'Назад',\n    'close_menu' => 'Закрыть меню',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Найти запись',\n    'invalid_model_class' => 'Предоставленный класс модели \":modelClass\" для recordfinder недействителен.',\n    'cancel' => 'Отмена',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Поведение отношения не имеет конфигурации для \\':config\\'.',\n    'missing_definition' => 'Поведение отношения не содержит определения для \\':field\\'.',\n    'missing_model' => 'Для поведения отношения, используемого в :class не определена модель.',\n    'invalid_action_single' => 'Это действие не может быть выполнено для особого отношения.',\n    'invalid_action_multi' => 'Это действие не может быть выполнено для множественных отношений.',\n    'help' => 'Нажмите на элемент, который нужно добавить',\n    'add' => 'Добавить',\n    'link_selected' => 'Связать выбранное',\n    'cancel' => 'Отмена',\n    'close' => 'Закрыть',\n    'create' => 'Создать',\n    'update' => 'Обновить',\n    'preview' => 'Предпросмотр',\n    'remove_name' => 'Удаление :name',\n    'delete_name' => 'Удаление :name',\n    'link' => 'Ссылка',\n    'unlink_name' => 'Разъединение :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Сортировать записи',\n    'no_records' => 'Нет доступных записей для сортировки.',\n  ],\n  'model' => [\n    'name' => 'Модель',\n    'not_found' => 'Модель \\':class\\' с идентификатором :id не найдена',\n    'missing_id' => 'Нет идентификатора для поиска модели записи.',\n    'missing_relation' => 'Модель \\':class\\' не содержит определения для \\':relation\\'',\n    'missing_method' => 'Модель \\':class\\' не содержит метод \\':method\\'.',\n    'invalid_class' => 'Модель :model используемая в :class не допустима, она должна наследовать класс \\\\Model.',\n    'mass_assignment_failed' => 'Массовое заполнение недоступно для атрибута модели \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Подсказки по конфигурации системы',\n    'tips_description' => 'Есть проблемы, на которые стоит обратить внимание, чтобы правильно настроить систему.',\n  ],\n  'editor' => [\n    'toolbar_buttons_presets' => [\n      'default' => 'По умолчанию',\n      'minimal' => 'Минимальный',\n      'full' => 'Полный',\n    ],\n    'paragraph_formats_comment' => 'Опции появляющиеся в выпадающем списке Форматы абзацев.',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Мои настройки',\n    'menu_description' => 'Управление настройками учетной записи администратора.',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Акцентный цвет',\n  ],\n  'backend_preferences' => [],\n  'filter' => [\n    'all' => 'все',\n    'options_method_not_exists' => 'Модель класса :model должна определить метод :method() возвращающего варианты для фильтра \\':filter\\'.',\n    'options_static_method_invalid_value' => 'Статичный метод \\':method()\\' в :class не возвращает правильный массив опций.',\n    'date_all' => 'весь период',\n    'number_all' => 'все номера',\n  ],\n  'import_export' => [\n    'row' => 'Строка :row',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Управление медиафайлами',\n  ],\n  'mediafinder' => [\n    'label' => 'Поиск медиа',\n    'no_image' => 'Невозможно найти изображение',\n    'select' => 'Выбрать',\n    'replace' => 'Заменить',\n    'not_an_image' => 'Выбранный файл не изображение',\n    'click_to_select_file' => 'Нажмите чтобы выбрать файл',\n  ],\n  'media' => [\n    'menu_label' => 'Медиафайлы',\n    'upload' => 'Загрузить',\n    'move' => 'Переместить',\n    'delete' => 'Удалить',\n    'add_folder' => 'Создать папку',\n    'search' => 'Поиск',\n    'display' => 'Отобразить',\n    'filter_everything' => 'Все файлы',\n    'filter_images' => 'Изображения',\n    'filter_video' => 'Видео',\n    'filter_audio' => 'Музыка',\n    'filter_documents' => 'Документы',\n    'library' => 'Библиотека',\n    'size' => 'Размер',\n    'title' => 'Имя',\n    'last_modified' => 'Последнее изменение',\n    'public_url' => 'Публичный адрес',\n    'click_here' => 'Нажмите здесь',\n    'thumbnail_error' => 'Ошибка создания миниатюры.',\n    'return_to_parent' => 'Вернуться в родительскую папку',\n    'return_to_parent_label' => 'Подняться на уровень выше ..',\n    'nothing_selected' => 'Ничего не выбрано.',\n    'multiple_selected' => 'Выбрано несколько объектов.',\n    'uploading_file_num' => 'Загрузка файлов: :number ...',\n    'uploading_complete' => 'Загрузка файлов завершена!',\n    'uploading_error' => 'Ошибка загрузки',\n    'type_blocked' => 'Используемый тип файла блокируется по соображениям безопасности.',\n    'order_by' => 'Сортировать по',\n    'direction' => 'Направление сортировки',\n    'direction_asc' => 'По возрастанию',\n    'direction_desc' => 'По убыванию',\n    'folder' => 'Папка',\n    'no_files_found' => 'Ни один из файлов не удовлетворяет вашему запросу.',\n    'delete_empty' => 'Пожалуйста, выберите объекты для удаления.',\n    'delete_confirm' => 'Вы действительно хотите удалить выбранные объекты?',\n    'error_renaming_file' => 'Ошибка изменения имени файла.',\n    'new_folder_title' => 'Новая папка',\n    'folder_name' => 'Название папки',\n    'error_creating_folder' => 'Ошибка создания папки',\n    'folder_or_file_exist' => 'Папка или файл с таким именем уже существует.',\n    'move_empty' => 'Пожалуйста, выберите объекты для перемещения.',\n    'move_popup_title' => 'Перемещение файлов или папок',\n    'move_destination' => 'Папка назначения',\n    'please_select_move_dest' => 'Пожалуйста, выберите папку назначения для перемещения.',\n    'move_dest_src_match' => 'Пожалуйста, выберите другую папку.',\n    'empty_library' => 'Библиотека медиафайлов пуста. Для начала загрузите файлы или создайте папки.',\n    'insert' => 'Вставить',\n    'crop_and_insert' => 'Обрезать и вставить',\n    'select_single_image' => 'Пожалуйста, выберите одно изображение.',\n    'selection_not_image' => 'Выбранный элемент не является изображением.',\n    'restore' => 'Отменить все изменения',\n    'resize' => 'Изменение размера...',\n    'selection_mode_normal' => 'Нормальный',\n    'selection_mode_fixed_ratio' => 'Фиксированное соотношение',\n    'selection_mode_fixed_size' => 'Фиксированный размер',\n    'height' => 'Высота',\n    'width' => 'Ширина',\n    'selection_mode' => 'Режим выделения',\n    'resize_image' => 'Изменение размера изображения',\n    'image_size' => 'Размер изображения:',\n    'selected_size' => 'Выбрано:',\n  ],\n  'table' => [\n    'add_item' => 'Добавить элемент',\n  ],\n  'dictionary' => [\n    'key_required' => 'Ключ должен быть указан',\n    'value_required' => 'Значение должно быть заполнено',\n  ],\n  'uploader' => [\n    'uploading' => 'Загрузка файлов',\n    'complete' => 'Загрузка завершена',\n  ],\n  'richeditor' => [\n    'upload_from_computer' => 'Загрузить с компьютера',\n    'embedding_code' => 'Вставить код',\n    'url_required' => 'Адрес обязателен',\n    'url_validation' => 'Адрес должен начинаться с http:// или https://',\n    'add_image' => 'Вставить изображение',\n    'add_video' => 'Вставить видео',\n    'add_audio' => 'Вставить аудио',\n    'add_file' => 'Вставить файл',\n    'embedding_code_required' => 'Вставка кода обязательна',\n    'embedding_code_invalid' => 'Пожалуйста укажите правильный HTML код',\n    'embedding_code_invalid_title' => 'Неправильный код',\n    'browse' => 'Просмотр медиафайлов',\n    'by_url' => 'Ссылка на изображение',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/ru.json",
    "content": "{\n  \"Cancel\": \"Отмена\",\n  \"You are viewing as\": \"Вы просматриваете панель управления от роли\",\n  \"Preview Role\": \"Имперсонация роли\",\n  \"This lets you test the actions this role can perform.\": \"Это позволяет вам протестировать действия, которые может выполнять эта роль.\",\n  \"View As Role\": \"Просмотр от лица роли\",\n  \"Return to Role Settings\": \"Вернуться к настройкам ролей\",\n  \"Password must have a minimum of length of :min characters\": \"Пароль должен содержать минимум :min символов.\",\n  \"Password must contain at least one uppercase character.\": \"Пароль должен содержать хотя бы один символ верхнего регистра.\",\n  \"Password must contain at least one lowercase character.\": \"Пароль должен содержать хотя бы один символ нижнего регистра.\",\n  \"Password must contain at least one number.\": \"Пароль должен содержать как минимум одну цифру.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Пароль должен содержать хотя бы один не буквенно-цифровой символ.\",\n  \"Welcome to your Administration Area, :name\": \"Добро пожаловать в вашу административную зону :name\",\n  \"Duplicate\": \"Дублировать\",\n  \"Expand\": \"Раскрыть\",\n  \"Collapse\": \"Скрыть\",\n  \"Move Up\": \"Вверх\",\n  \"Move Down\": \"Вниз\",\n  \"Remove\": \"Удалить\",\n  \"Manage Item\": \"Настроить элемент\",\n  \"Clear Filters\": \"Очистить фильтры\",\n  \"Filter Setup\": \"Настройка фильтра\",\n  \"Apply\": \"Применить\",\n  \"Clear\": \"Очистить\",\n  \"is equal to\": \"равно\",\n  \"is between\": \"между\",\n  \"contains\": \"содержит\",\n  \"is before\": \"до\",\n  \"is after\": \"после\",\n  \"is greater than\": \"больше, чем\",\n  \"is less than\": \"меньше чем\",\n  \"1. Export output format\": \"1. Выбор формата экспорта\",\n  \"File Format\": \"Формат файла\",\n  \"Delimiter Character\": \"Символ-разделитель\",\n  \"Enclosure Character\": \"Символ обрамления полей\",\n  \"Escape Character\": \"Экранирующий символ\",\n  \"2. Select columns to export\": \"2. Выберите столбцы для экспорта\",\n  \"Columns\": \"Столбцы\",\n  \"3. Set export options\": \"3. Установка параметров экспорта\",\n  \"CSV Custom\": \"Пользовательский CSV\",\n  \"1. Upload an Import File\": \"1. Загрузите файл импорта\",\n  \"Import File\": \"Импорт файла\",\n  \"File Encoding\": \"Кодировка файла\",\n  \"First row contains column titles\": \"Первая строка содержит заголовки столбцов\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Выберите эту опцию, если первая строка в CSV-файле используется как заголовки для столбцов.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"Столбцы файла\",\n  \"Database fields\": \"Поля базы данных\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Прогресс экспорта\",\n  \"Processing\": \"Обработка\",\n  \"Import progress\": \"Прогресс импорта\",\n  \"Import error\": \"Ошибка импорта\",\n  \"Export error\": \"Ошибка экспорта\",\n  \"Column preview\": \"Предпросмотр столбца\",\n  \"Column\": \"Столбец\",\n  \"Disable\": \"Отключить\",\n  \"Enable\": \"Включить\",\n  \"Delete\": \"Удалить\",\n  \"Export\": \"Экспорт\",\n  \"Import\": \"Импорт\",\n  \"Select Action\": \"Выберите действие\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Создайте новую учетную запись для входа в панель администратора.\",\n  \"First Name\": \"Имя\",\n  \"Last Name\": \"Фамилия\",\n  \"Email Address\": \"Адрес электронной почты\",\n  \"Pick a Username\": \"Выберите имя пользователя\",\n  \"Enter New Password\": \"Введите новый пароль\",\n  \"Confirm Password\": \"Подтвердите пароль\",\n  \"Create Account\": \"Создать учетную запись\",\n  \"Getting Ready\": \"Готовимся к запуску\",\n  \"Just a few more minutes\": \"Еще несколько минут\",\n  \"Migrating Database\": \"Перенос базы данных\",\n  \"Access the Backend Panel\": \"Доступ к панели администратора\",\n  \"View Backend During Maintenance\": \"Просмотр панели администратора во время обслуживания\",\n  \"Perform Software Updates\": \"Обновить систему\",\n  \"In Maintenance\": \"В режиме обслуживания\",\n  \"The site is currently in maintenance mode, please check back later.\": \"В настоящее время сайт находится в режиме обслуживания, зайдите позже.\",\n  \"Dashboard\": \"Консоль\",\n  \"Administrators\": \"Администраторы\",\n  \"Manage Admins\": \"Управление админами\",\n  \"Create Admins\": \"Добавить админа\",\n  \"Moderate Admins\": \"Модерировать админа\",\n  \"Manage account suspension and ban admin accounts\": \"Управляйте блокировками и приостановками учетной записи администратора\",\n  \"Role Permissions\": \"Управление ролями\",\n  \"Team Groups\": \"Управление группами\",\n  \"Manage Other Admins\": \"Управление другими админами\",\n  \"Allow users to reset passwords and update emails.\": \"Разрешить менять пароли и обновлять электронную почту\",\n  \"Delete Admins\": \"Удалить админов\",\n  \"Preferences\": \"Предпочтения\",\n  \"Settings\": \"Настройки\",\n  \"Background Color\": \"Цвет фона\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Разрешить пользователям создавать новые роли, а также изменять или удалять роли ниже их самой высокой роли.\",\n  \"Save Changes\": \"Сохранить изменения\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"В этом журнале отображается список успешных попыток авторизаций администраторов. Записи хранятся :days дней.\",\n  \"Access Log\": \"Журнал доступа\",\n  \"View a list of successful back-end user sign ins.\": \"Просмотр списка успешных авторизаций администраторов.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Дата и время\",\n  \"Type\": \"Тип\",\n  \"IP address\": \"IP адрес\",\n  \"Username\": \"Имя пользователя\",\n  \"Login\": \"Логин\",\n  \"First name\": \"Имя\",\n  \"Last name\": \"Фамилия\",\n  \"Email\": \"Почта\",\n  \"A custom schema is used for this file format.\": \"Для этого формата файла используется пользовательская схема.\",\n  \"Select\": \"Выбрать\",\n  \"Replace\": \"Заменить\",\n  \"and\": \"и\",\n  \"Go\": \"Перейти\",\n  \"Go to page\": \"Перейти на страницу\",\n  \"Copy to Clipboard\": \"Скопировать в буфер обмена\",\n  \"Reveal Contents\": \"Отобразить содержимое\",\n  \"Selected Site\": \"Выбранный сайт\",\n  \"Use Emmet abbreviations\": \"Используйте сокращения Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Запись не существует для выбранного сайта. Создать?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Вы ввели некорректные данные. Пожалуйста, перепроверьте их и попробуйте ещё раз.\",\n  \"Administration Area\": \"Панель управления\",\n  \"Password Reset\": \"Сброс пароля\",\n  \"Please enter a new password.\": \"Пожалуйста, введите новый пароль.\",\n  \"Password\": \"Пароль\",\n  \"Password Restore\": \"Восстановить пароль\",\n  \"Please enter your login to restore the password.\": \"Пожалуйста, введите свой логин, чтобы сбросить пароль.\",\n  \"A user could not be found with a login value of ':login'\": \"Пользователь ':login' не найден\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Если аккаунт существует, на его электронную почту будет отправлено сообщение с инструкциями для восстановления пароля.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Неправильный пароль. Попробуйте еще раз!\",\n  \"Unable to reset your password!\": \"Невозможно сбросить ваш пароль!\",\n  \"Password has been reset. You may now sign in.\": \"Пароль был успешно сброшен. Теперь вы можете войти в систему.\",\n  \"Restore\": \"Восстановить\",\n  \"Reset\": \"Сбросить\",\n  \"Stay logged in\": \"Оставаться в системе\",\n  \"Forgot password?\": \"Забыли пароль?\",\n  \"Global Editor Settings\": \"Глобальные Настройки Редактора\",\n  \"Manage Widgets\": \"Управление виджетами\",\n  \"Add Widget\": \"Добавить виджет\",\n  \"Set the current layout as the default?\": \"Установить текущий макет по умолчанию?\",\n  \"Make Default\": \"Установить по умолчанию\",\n  \"Reset layout back to default?\": \"Сбросить макет к значению по умолчанию?\",\n  \"Reset Layout\": \"Сбросить макет\",\n  \"Widget\": \"Виджет\",\n  \"please select\": \"пожалуйста, выберите\",\n  \"Width\": \"Ширина\",\n  \"full width\": \"полная ширина\",\n  \"Create Widgets\": \"Создать виджеты\",\n  \"not equal to\": \"не равно\",\n  \"Light Mode\": \"Светлая тема\",\n  \"Dark Mode\": \"Тёмная тема\",\n  \"OS Default\": \"По умолчанию ОС\",\n  \"Create a Custom Palette\": \"Создать Собственную Палитру\",\n  \"Custom Palette\": \"Собственная Палитра\",\n  \"Primary Color\": \"Основной цвет\",\n  \"Secondary Color\": \"Вторичный цвет\",\n  \"Selection Color\": \"Цвет выделения\",\n  \"Nav Text\": \"Навиг. Текст\",\n  \"Nav Background\": \"Навиг. Фон\",\n  \"Sidebar Text\": \"Текст Боковой Панели\",\n  \"Sidebar Background\": \"Фон Боковой панели\",\n  \"Sidebar Active Text\": \"Действующий текст боковой панели\",\n  \"Sidebar Active Background\": \"Действующий Фон Боковой Панели\",\n  \"Sidebar Hover Background\": \"Фон при Наведении на Боковую панель\",\n  \"Settings Text\": \"Раздел настроек — текст\",\n  \"Settings Background\": \"Раздел настроек — фон\",\n  \"Settings Item Background\": \"Раздел настроек — цвет фона пункта меню\",\n  \"Settings Active Color\": \"Настройки активного цвета\",\n  \"Settings Active Background\": \"Настройки — фон активного пункта меню\",\n  \"Settings Hover Background\": \"Раздел настроек — фон при наведении\",\n  \"This name is shown in the title area of the back-end.\": \"Это имя отображается в заголовке панели управления\",\n  \"App Name\": \"Название приложения\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Название будет отображаться на экране входа в панель управления.\",\n  \"App Tagline\": \"Слоган приложения\",\n  \"Brand\": \"Бренд\",\n  \"Upload a custom logo to use in the back-end.\": \"Загрузите логотип для панели управления\",\n  \"Logo\": \"Логотип\",\n  \"Upload a custom favicon to use in the back-end\": \"Загрузите пользовательский значок для панели управления\",\n  \"Favicon\": \"Значок\",\n  \"Navigation Logo\": \"Логотип навигации\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Заменяет ссылку консоли пользовательским логотипом в навигации.\",\n  \"Dashboard Icon\": \"Иконка консоли\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Используйте пользовательское изображение для иконки консоли (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Данное сообщение отображается на окне входа в панель администратора.\",\n  \"Welcome Message\": \"Приветственное сообщение\",\n  \"Login Page\": \"Страница входа\",\n  \"Background Type\": \"Тип фона\",\n  \"Flat Color\": \"Заливка цветом\",\n  \"Wallpaper\": \"Картинка\",\n  \"Wallpaper Size\": \"Размер фона\",\n  \"Auto\": \"Авто\",\n  \"Cover\": \"Вместить в экран\",\n  \"Background Wallpaper Image\": \"Фоновое изображение\",\n  \"Image\": \"Изображение\",\n  \"Random Autumn Images\": \"Случайные осенние картинки\",\n  \"Custom Image\": \"Пользовательское изображение\",\n  \"Login Page Image\": \"Изображение страницы входа\",\n  \"Colors\": \"Цвета\",\n  \"Color Mode\": \"Цветовое оформление\",\n  \"Color Preset\": \"Цветовая тема\",\n  \"Menu Style\": \"Стиль меню\",\n  \"Navigation\": \"Навигация\",\n  \"Custom Stylesheet\": \"Дополнительные CSS стили\",\n  \"Styles\": \"Стили\",\n  \"Inline\": \"Строчный\",\n  \"Text\": \"Текст\",\n  \"Tiles\": \"Плитка\",\n  \"Collapsed\": \"Скрытый\",\n  \"Icons\": \"Иконки\",\n  \"Left Side\": \"Боковое слева\",\n  \"Add New Item\": \"Добавить элемент\",\n  \"Link Color\": \"Цвет ссылки\",\n  \"Current Password\": \"Текущий пароль\",\n  \"New Password\": \"Новый пароль\",\n  \"Current password does not match. Please try again!\": \"Пароли не совпадают. Пожалуйста, попробуйте еще раз!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Срок действия вашего пароля истек, пожалуйста, создайте новый пароль по соображениям безопасности.\",\n  \"Region\": \"Регион\",\n  \"Locale\": \"Язык\",\n  \"Select your desired locale for language use.\": \"Выберите желаемый язык панели управления.\",\n  \"Timezone\": \"Часовой пояс\",\n  \"Adjust displayed dates to this timezone.\": \"Выводить даты в выбранном часовом поясе.\",\n  \"Code Editor\": \"Редактор кода\",\n  \"Color Scheme\": \"Цветовая схема\",\n  \"Word Wrap\": \"Перенос слов\",\n  \"Off\": \"Выключено\",\n  \"40 Characters\": \"40 символов\",\n  \"80 Characters\": \"80 символов\",\n  \"Fluid\": \"Адаптивный\",\n  \"Font Size\": \"Размер шрифта\",\n  \"Tab Size\": \"Размер табуляции\",\n  \"Code Folding\": \"Свертывание кода\",\n  \"Mark begin\": \"Отметьте начало\",\n  \"Mark begin and end\": \"Отметьте начало и конец\",\n  \"Autocompletion\": \"Автозаполнение\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Базовое автозаполнение (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Автозаполнение\",\n  \"Show gutter\": \"Показывать нумерацию строк\",\n  \"Highlight active line\": \"Подсвечивать активную строку\",\n  \"Automatically close tags\": \"Автоматически закрывать теги\",\n  \"Indent using tabs\": \"Использовать табуляцию для индентации\",\n  \"Show indent guides\": \"Показывать символы перевода строки\",\n  \"Show invisible characters\": \"Показывать невидимые символы\",\n  \"Show print margin\": \"Показывать границу печати\",\n  \"Custom styles to include in the HTML editor.\": \"Дополнительные стили для использования в HTML редакторе.\",\n  \"Markup Styles\": \"Стили разметки\",\n  \"Paragraph Formats\": \"Форматы абзацев\",\n  \"Markup Classes\": \"Классы разметки\",\n  \"Label\": \"Название\",\n  \"Paragraph\": \"Параграф\",\n  \"Class Name\": \"Имя класс\",\n  \"Link\": \"Ссылка\",\n  \"Table\": \"Таблица\",\n  \"Table Cell\": \"Ячейка таблицы\",\n  \"Allowed Tags\": \"Разрешенные теги\",\n  \"The list of allowed tags.\": \"Список разрешенных тегов.\",\n  \"Markup Tags\": \"Теги разметки\",\n  \"Allowed Empty Tags\": \"Разрешенные пустые теги\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Список тегов, которые не будут удаляться, если внутри них нет содержания.\",\n  \"Do Not Wrap Tags\": \"Не оборачивать теги\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Список тегов, которые не должны быть в заблокированных тегах.\",\n  \"Remove Tags\": \"Удалить теги\",\n  \"The list of tags that are removed together with their content.\": \"Список тегов, которые будут удалены вместе с их содержанием.\",\n  \"Line Breaker Tags\": \"Теги с переводом строки\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Список тегов, в которых будет использоваться тег перевода строки.\",\n  \"Toolbar Buttons\": \"Кнопки панели инструментов\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Кнопки панели инструментов, которые будут отображаться в Rich Editor по умолчанию.\",\n  \"Insert a preset toolbar button configuration\": \"Выберите вариант конфигурации панели инструментов\",\n  \"Allowed Attributes\": \"Разрешенные атрибуты\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Список разрешенных HTML атрибутов, в дополнение к стандартным атрибутам.\",\n  \"Enable code snippets (Tab)\": \"Включить сниппеты (Tab)\",\n  \"Title\": \"Название\",\n  \"Description\": \"Описание\",\n  \"Attachment\": \"Вложение\",\n  \"Attachment URL\": \"URL\",\n  \"Add a title and description for this attachment.\": \"Добавьте заголовок и описание для этого вложения.\",\n  \"Upload\": \"Загрузить\",\n  \"Are you sure?\": \"Вы уверены?\",\n  \"Delete Selected\": \"Удалить выбранное\",\n  \"Upload Error\": \"Ошибка загрузки\",\n  \"Remove File\": \"Удалить файл\",\n  \"Show Light Switch\": \"Показать переключатель оформления\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Разрешить пользователям переключать цветовое оформление из навигации.\",\n  \"Create :name\": \"Создание :name\",\n  \"Update :name\": \"Обновление :name\",\n  \"Add :name\": \"Добавление :name\",\n  \"Link :name\": \"Соединение :name\",\n  \"Unlink\": \"Отвязать\",\n  \"Preview :name\": \"Предпросмотр :name\",\n  \"Link a New :name\": \"Присоединить :name\",\n  \"Add a New :name\": \"Добавить новый :name\",\n  \"Related :name Data\": \"Связанные данные :name\",\n  \":name Created\": \":name успешно создан\",\n  \":name Updated\": \":name успешно сохранен\",\n  \":name Deleted\": \":name успешно удален\",\n  \":name Added\": \":name успешно добавлен\",\n  \":name Linked\": \":name успешно связан\",\n  \":name Removed\": \":name успешно убран\",\n  \":name Unlinked\": \":name успешно отвязан\",\n  \"Form record with an ID of :id could not be found.\": \"Форма записи с идентификатором :ID не найдена.\",\n  \"Remove Selected\": \"Убрать выделенное\",\n  \"Unlink Selected\": \"Отвязать выбранное\",\n  \"Preview the Website\": \"Просмотр сайта\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Управление администраторами, создание групп и полномочий.\",\n  \"Define permissions for administrators based on their role.\": \"Настройте полномочия для администраторов в зависимости от их роли.\",\n  \"Add administrators to groups used for notifications and features.\": \"Добавьте администраторов в группы используемые для уведомлений и остальных функций.\",\n  \"Branding & Appearance\": \"Персонализация панели управления\",\n  \"Customize the administration area such as name, colors and logo.\": \"Настройка внешнего вида, названия, цвета и логотип.\",\n  \"Editor Settings\": \"Настройки WYSIWYG редактора\",\n  \"Change the global editor preferences.\": \"Изменить глобальные настройки WYSIWYG редактора.\",\n  \"My Account\": \"Мой аккаунт\",\n  \"Update your account details such as name, email address and password.\": \"Обновите данные своего аккаунта, такие как имя, адрес электронной почты и пароль.\",\n  \"Backend Preferences\": \"Настройки панели управления\",\n  \"Manage your account preferences such as desired language.\": \"Управление языком и внешним видом панели управления.\",\n  \"security login\": \"Безопасный вход\",\n  \"List Setup\": \"Настройка списка\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Используйте чекбоксы, чтобы выбрать столбики, которые хотите видеть в списке. Вы можете менять порядок столбцов перетаскивая их вверх или вниз.\",\n  \"Records Per Page\": \"Записей на страницу\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Выберите количество записей отображаемое на одной странице. Обратите внимание, большое количество записей на одной странице может снизить производительность.\",\n  \"Reset to Default\": \"Сбросить на значения по умолчанию\",\n  \"Add Selected\": \"Добавить выбранное\",\n  \"Create & Close\": \"Создать и закрыть\",\n  \"Creating :name...\": \"Создание :name...\",\n  \"Save & Close\": \"Сохранить и закрыть\",\n  \"Saving :name...\": \"Сохранение :name...\",\n  \"Delete this record?\": \"Удалить эту запись?\",\n  \"Deleting :name...\": \"Удаление :name...\",\n  \"Loading...\": \"Загрузка...\",\n  \"Complete\": \"Завершено\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Неизвестный столбец\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Пропустить столбец\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Создано\",\n  \"Updated\": \"Обновлено\",\n  \"Skipped\": \"Пропущено\",\n  \"Warnings\": \"Предупреждения\",\n  \"Errors\": \"Ошибки\",\n  \"Skipped Rows\": \"Пропущенные строки\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"Файл не найден\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Включен режим отладки. Не рекомендуется использовать режим отладки для сайта в продакшене.\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"Адрес \\\":name\\\" панели управления слишком простой. Пожалуйста укажите что-нибудь более уникальное.\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"Найден аккаунт с логином \\\":name\\\". Пожалуйста переименуйте его.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Расширение PHP :name не установлено. Установите эту библиотеку и активируйте расширение.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Плагин :name имеет зависимость. Установите этот плагин.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Каталог :name или его подкаталоги недоступны для записи. Укажите соответствующие разрешения для веб-сервера.\",\n  \"Manage Roles\": \"Управление ролями\",\n  \"Manage Groups\": \"Управление группами\",\n  \"Customize Backend\": \"Персонализация панели управления\"\n}"
  },
  {
    "path": "modules/backend/lang/sk/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Bol použitý zlý typ :type.',\n    'options_method_invalid_model' => 'Vlastnosť \\':field\\' nezodpovedá platnému modelu. Skúste špecifikovať metódu možností pre triedu modelu :model explicitne.',\n    'options_method_not_exists' => 'Trieda modelu :model musí implementovať metódu :method(), ktorá vracia možností pre formulárové pole \\':field\\'.',\n    'colors_method_not_exists' => 'Trieda modelu :model musí implementovať metódu :method(), ktorá vracia html farbu HEX poľa \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'Trieda widgetu s menom \\':name\\' nie je zaregistrovaná',\n    'not_bound' => 'Widget s názvom triedy \\':name\\' nie je naviazaný na controller',\n  ],\n  'page' => [\n    'untitled' => 'Bez názvu',\n    'not_found' => [\n      'label' => 'Stránka nenájdená',\n      'help' => 'Hľadali sme a hľadali, ale požadovanú adresu URL jednoducho nebolo možné nájsť. Možno ste hľadali niečo iné?',\n      'back_link' => 'Späť na predchodzú stránku',\n    ],\n    'access_denied' => [\n      'label' => 'Prístup odmietnutý',\n      'help' => 'Nemáte potrebné oprávnenia na zobrazenie tejto stránky.',\n      'cms_link' => 'Späť do administrácie',\n    ],\n    'no_database' => [\n      'label' => 'Chýba databáza',\n      'help' => 'Pre prístup do administrácie je potrebná databáza. Zkontrolujte, či je databáza nakonfigurovaná a zmigrovaná a skúste to znova.',\n      'cms_link' => 'Späť na úvodnú stránku',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Čiastočná šablona \\':name\\' nebola nájdená.',\n    'invalid_name' => 'Neplatný názov čiastočnej šablóny: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Neplatný názov AJAX handler: :name.',\n    'not_found' => 'AJAX handler \\':name\\' nebol najdený.',\n  ],\n  'account' => [\n    'signed_in_as' => 'Prihlásený ako :full_name',\n    'sign_out' => 'Odhlásiť',\n    'login_placeholder' => 'prihlasovacie meno',\n    'password_placeholder' => 'heslo',\n    'enter_email' => 'Zadajte váš email',\n    'email_placeholder' => 'email',\n    'apply' => 'Použiť',\n    'cancel' => 'Zrušiť',\n    'delete' => 'Zmazať',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Hlavný panel',\n    'widget_inspector_title' => 'Nastavenie widgetu',\n    'widget_inspector_description' => 'Tu si upravte všetky nastavenia widgetu',\n    'widget_columns_label' => 'Šírka :columns',\n    'widget_columns_description' => 'Šírka widgetu, číslo medzi 1 a 10.',\n    'widget_columns_error' => 'Zadajte prosím šírku widgetu ako číslo medzi 1 a 10.',\n    'columns' => '{1} stĺpec|[2,4] stĺpce|[5,Inf] stĺpcov',\n    'widget_new_row_label' => 'Vždy na novom riadku',\n    'widget_new_row_description' => 'Umiestniť widget do nového riadku.',\n    'widget_title_label' => 'Názov widgetu',\n    'widget_title_error' => 'Musíte zadať názov widgetu.',\n    'reset_layout_success' => 'Pôvodné usporiadanie bolo obnovené',\n    'make_default_success' => 'Aktuálne usporiadanie je teraz nastavené ako predvolené',\n    'collapse_all' => 'Zbaliť všetko',\n    'expand_all' => 'Rozbaliť všetko',\n    'status' => [\n      'widget_title_default' => 'Stav systému',\n      'update_available' => '{0} dostupných aktualizácií!|{1} dostupná aktualizácia!|[2,4] dostupné aktualizácie!|[4,Inf] dostupných aktualizácií!',\n      'updates_pending' => 'Sú dostupné aktualizácie softwaru',\n      'updates_nil' => 'Software je aktuálny',\n      'updates_link' => 'Aktualizovať',\n      'warnings_pending' => 'Niektoré problémy vyžadujú pozornosť',\n      'warnings_nil' => 'Žiadne varovania na zobrazenie',\n      'warnings_link' => 'Zobraziť',\n      'core_build' => 'Verzia systému',\n      'event_log' => 'Záznam udalostí',\n      'request_log' => 'Záznam požiadavkov',\n      'app_birthday' => 'Online od',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Vitajte',\n      'welcome_back_name' => 'Vitajte späť na :app, :name.',\n      'welcome_to_name' => 'Vitajte na :app, :name.',\n      'first_sign_in' => 'Toto je vaše prvé prihlásenie.',\n      'last_sign_in' => 'Vaše posledné prihlásenie bolo',\n      'view_access_logs' => 'Zobraziť záznam prihlásení',\n      'nice_message' => 'Pekný deň!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrátor',\n    'list_title' => 'Správa administrátorov',\n    'new' => 'Nový administrátor',\n    'first_name' => 'Krstné meno',\n    'last_name' => 'Priezvisko',\n    'full_name' => 'Celé meno',\n    'email' => 'E-mail',\n    'role_field' => 'Rola',\n    'role_comment' => 'Role definujú užívateľské oprávnenia, ktoré môžu byť prepísané na užívateľskej úrovni, na karte Oprávnení.',\n    'groups' => 'Skupiny',\n    'groups_comment' => 'Vyberto do akých skupín tento účet patrí.',\n    'avatar' => 'Avatar',\n    'password' => 'Heslo',\n    'password_confirmation' => 'Potvrdiť heslo',\n    'permissions' => 'Oprávnenia',\n    'account' => 'Účet',\n    'superuser' => 'Super užívateľ',\n    'superuser_comment' => 'Umožňuje tomuto účtu neomedzený prístup do všetkých častí systému. Super užívatelia môžu pridávať a spravovať ostatných užívateľov.',\n    'send_invite' => 'Poslať pozvánku e-mailom.',\n    'send_invite_comment' => 'Pošle uvítací e-mail s prihlasovacími údajmi.',\n    'delete_confirm' => 'Skutočne zmazať tohto administrátora?',\n    'return' => 'Späť na zoznam adminitrátorov',\n    'allow' => 'Povoliť',\n    'inherit' => 'Zdediť',\n    'deny' => 'Zakázať',\n    'activated' => 'Aktivovaný',\n    'last_login' => 'Posledné prihlásenie',\n    'created_at' => 'Vytvorený',\n    'updated_at' => 'Aktualizovaný',\n    'group' => [\n      'name' => 'Skupina',\n      'name_field' => 'Meno',\n      'name_comment' => 'Meno je zobrazené v zozname skupín na formulári administrátora.',\n      'description_field' => 'Popis',\n      'is_new_user_default_field_label' => 'Predvolená skupina',\n      'is_new_user_default_field_comment' => 'Automaticky zaradiť nových administrátorov do tejto skupiny',\n      'code_field' => 'Kód',\n      'code_comment' => 'Zadajte unikátny kód pre prístup cez API k objektu skupiny.',\n      'list_title' => 'Správa skupín',\n      'new' => 'Nová skupina',\n      'delete_confirm' => 'Skutočne zmazať túto skupinu administrátorov?',\n      'return' => 'Späť na zoznam skupín',\n      'users_count' => 'Užívateľov',\n    ],\n    'role' => [\n      'name' => 'Rola',\n      'name_field' => 'Meno',\n      'name_comment' => 'Meno je zobrazené v zozname rolí na formulári administrátora.',\n      'description_field' => 'Popis',\n      'code_field' => 'Kód',\n      'code_comment' => 'Zadajte unikátny kód pre prístup cez API k objektu role.',\n      'list_title' => 'Správa rolí',\n      'new' => 'Nová rola',\n      'delete_confirm' => 'Skutočne znazať túto rolu?',\n      'return' => 'Späť na zoznam rolí',\n      'users_count' => 'Užívatelia',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Nebol nájdený žiadny prihlásený užívateľ pre načítanie alebo uloženie nastavení.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Zoznam',\n    'search_prompt' => 'Hľadať...',\n    'no_records' => 'Žiadne záznamy na zobrazenie.',\n    'missing_model' => 'Správanie zoznamu použité v :class nemá definovaný model.',\n    'missing_column' => 'Neexistujú žiadne definície stĺpcov pre :columns.',\n    'missing_columns' => 'Zoznam použitý v :class nemá definované žiadne stĺpce.',\n    'missing_definition' => 'Správanie zoznamu neobsahuje stĺpec pre \\':field\\'.',\n    'missing_parent_definition' => 'Správanie zoznamu neobsahuje definíciu pre \\':definition\\'.',\n    'behavior_not_ready' => 'Správanie zoznamu nebolo inicializovanéd, skontrolujte, či ste zavolali metódu makeLists() vo svojom kontroleri.',\n    'invalid_column_datetime' => 'Hodnotu stĺpca \\':column\\' nie je objekt typu DateTime, nechýba vám referencia $dates v modeli?',\n    'pagination' => 'Zobrazené záznamy: :from-:to z :total',\n    'first_page' => 'Prvá stránka',\n    'last_page' => 'Posledná stránka',\n    'prev_page' => 'Predchádzajúca stránka',\n    'next_page' => 'Nasledujúca stránka',\n    'refresh' => 'Obnoviť',\n    'updating' => 'Aktualizujem...',\n    'loading' => 'Načítavam...',\n    'check' => 'Zaškrtnúť',\n    'create_button' => 'Vytvoriť :name',\n    'delete_selected' => 'Zmazať vybrané',\n    'delete_selected_empty' => 'Neboli vybrané žiadne záznamy na zmazanie.',\n    'delete_selected_confirm' => 'Skutočne chcete zmazať vybrané záznamy?',\n    'delete_selected_success' => 'Vybrané záznamy boli zmazané.',\n    'column_switch_true' => 'Áno',\n    'column_switch_false' => 'Nie',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Kliknutím na %s alebo potiahnutím na toto miesto môžete súbor nahrať',\n  ],\n  'form' => [\n    'create_title' => 'Nový :name',\n    'update_title' => 'Upraviť :name',\n    'preview_title' => 'Náhľad :name',\n    'reset_success' => 'Úspešne obnovené',\n    'missing_id' => 'Musíte uviesť ID záznamu.',\n    'missing_model' => 'Správanie formulára použité v :class nemá definovaný model.',\n    'missing_definition' => 'Správanie formulára neobsahuje pole pre \\':field\\'.',\n    'action_confirm' => 'Ste si istý?',\n    'create' => 'Vytvoriť',\n    'create_and_close' => 'Vytvoriť a zavrieť',\n    'creating' => 'Vytváranie...',\n    'creating_name' => 'Vytváranie :name...',\n    'save' => 'Uložiť',\n    'save_and_close' => 'Uložiť a zatvoriť',\n    'saving' => 'Ukladanie...',\n    'saving_name' => 'Ukladanie :name...',\n    'delete' => 'Zmazať',\n    'deleting' => 'Mazanie...',\n    'confirm_delete' => 'Zmazať záznam?',\n    'confirm_delete_multiple' => 'SKutočne zmazať vybrané záznamy?',\n    'deleting_name' => 'Mazanie :name...',\n    'reset_default' => 'Obnoviť predvolené',\n    'resetting' => 'Obnova',\n    'resetting_name' => 'Obnova :name',\n    'undefined_tab' => 'Ostatné',\n    'field_off' => 'Vyp',\n    'field_on' => 'Zap',\n    'add' => 'Pridať',\n    'apply' => 'Použiť',\n    'cancel' => 'Zrušiť',\n    'close' => 'Zavrieť',\n    'confirm' => 'Potvrdiť',\n    'reload' => 'Znovu načítať',\n    'complete' => 'Kompletné',\n    'ok' => 'OK',\n    'or' => 'alebo',\n    'confirm_tab_close' => 'Skutočne zavrieť kartu? Neuložené zmeny budú stratené.',\n    'behavior_not_ready' => 'Správanie formulára nebolo inicializované, skontrolujte či voláte funkciu initForm() vo svojom kontroleri.',\n    'preview_no_files_message' => 'Žiadny súbor nebol nahraný.',\n    'preview_no_media_message' => 'Žiadne médium nebolo vybrané.',\n    'preview_no_record_message' => 'Žiadny záznam nie je vybraný',\n    'select' => 'Vybrať',\n    'select_all' => 'vybrať všetko',\n    'select_none' => 'nevyber nič',\n    'insert_row' => 'Vložiť riadok',\n    'insert_row_below' => 'Vložiť riadok pod',\n    'delete_row' => 'Zmazať riadok',\n    'concurrency_file_changed_title' => 'Súbor bol zmenený',\n    'concurrency_file_changed_description' => 'Súbor, ktorý upravujete bol na disku zmenený iným užívateľom. Môžete buď znovu načítať súbor a stratiť zmeny alebo prepísať súbor na disku.',\n    'return_to_list' => 'Spať na zoznam',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Nájsť záznam',\n    'cancel' => 'Zrušiť',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Správanie relácie nemá žiadne nastavenie pre \\':config\\'.',\n    'missing_definition' => 'Správanie ralácie neobsahuje definíciu pre \\':field\\'.',\n    'missing_model' => 'Správanie relácie použité v :class nemá definovaný žiadny model.',\n    'invalid_action_single' => 'Táto akcia nemôže byť vykonaná na jednoduchej relácií.',\n    'invalid_action_multi' => 'Táto akcia nemôže byť vykonaná na viacnásobnej relácií.',\n    'help' => 'Pre pridanie kliknite na položku',\n    'add' => 'Pridať',\n    'link_selected' => 'Vytvoriť väzbu na vybrané',\n    'cancel' => 'Zrušiť',\n    'close' => 'Zatvoriť',\n    'create' => 'Vytvoriť',\n    'update' => 'Upraviť',\n    'preview' => 'Náhľad',\n    'remove_name' => 'Odstrániť :name',\n    'delete_name' => 'Zmazať :name',\n    'link' => 'Väzba',\n    'unlink_name' => 'Zrušiť väzbu :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Zoradiť záznamy',\n    'no_records' => 'Nenašli sa žiadne záznamy na zoradenie.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' s ID :id nebol nájdený',\n    'missing_id' => 'Nie je špecifikované ID pre hľadanie záznamov v modeli.',\n    'missing_relation' => 'Model \\':class\\' neobsahuje definíciu pre \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' nemá implementovanú metódu \\':method\\'.',\n    'invalid_class' => 'Model :model použitý v :class nie je platný, musí dediť triedu \\\\Model.',\n    'mass_assignment_failed' => 'Hromadné priradenie zlyhalo pre atribút \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Tipy pre konfiguráciu systému',\n    'tips_description' => 'Existujú problémy, ktoré vyžadujú vašu pozornosť, aby vol systém správne nastavený.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Moje nastavenia',\n    'menu_description' => 'Nastavenia vášho administrátorského účtu',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Farba zvýraznenia',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'všetko',\n    'options_method_not_exists' => 'Trieda modelu :model musí definovať metódu :method() vracajúcu možnosti pre \\':filter\\' filter.',\n    'date_all' => 'všetky obdobia',\n    'number_all' => 'všetky čísla',\n  ],\n  'import_export' => [\n    'row' => 'Riadok :row',\n    'export_error' => 'Chyba exportu',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Nahrávanie a správa mediálneho obsahu - obrázkov, videí, zvukov, dokumentov',\n  ],\n  'mediafinder' => [\n    'label' => 'Vyhľadávač médií',\n    'default_prompt' => 'Kliknite na tlačítko %s pre hľadanie súboru',\n  ],\n  'media' => [\n    'menu_label' => 'Médiá',\n    'upload' => 'Nahrať',\n    'move' => 'Presunúť',\n    'delete' => 'Zmazať',\n    'add_folder' => 'Pridať priečinok',\n    'search' => 'Hľadať',\n    'display' => 'Zobraziť',\n    'filter_everything' => 'Všetko',\n    'filter_images' => 'Obrázky',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Dokumenty',\n    'library' => 'Knižnica',\n    'size' => 'Veľkosť',\n    'title' => 'Názov',\n    'last_modified' => 'Naposledy zmenené',\n    'public_url' => 'URL',\n    'click_here' => 'Kliknite sem',\n    'thumbnail_error' => 'Chyba pri generovaní náhľadu.',\n    'return_to_parent' => 'Späť do nadradeného priečinka',\n    'return_to_parent_label' => 'Hore ..',\n    'nothing_selected' => 'Nič nevybrané.',\n    'multiple_selected' => 'Vybraných viac položiek.',\n    'uploading_file_num' => 'Nahrávam :number súbor(y)...',\n    'uploading_complete' => 'Nahrávanie dokončené',\n    'uploading_error' => 'Nahrávanie zlyhalo',\n    'type_blocked' => 'Použitý typ súboru je blokovaný z bezpečnostných dôvodov.',\n    'order_by' => 'Zoradiť podľa',\n    'direction' => 'Smer',\n    'direction_asc' => 'Vzostupne',\n    'direction_desc' => 'Zostupne',\n    'folder' => 'Priečinok',\n    'no_files_found' => 'Pre túto požiadavku neboli nájdené žiaadne súbory.',\n    'delete_empty' => 'Prosím vyberte položky pre zmazanie.',\n    'delete_confirm' => 'Skutočne zmazať vybrané položky?',\n    'error_renaming_file' => 'Cyba pri premenovávaní súboru.',\n    'new_folder_title' => 'Nový priečinok',\n    'folder_name' => 'Názov priečinka',\n    'error_creating_folder' => 'Chyba pri vytváraní priečinka',\n    'folder_or_file_exist' => 'Priečinok alebo súbor s daným menom už existuje.',\n    'move_empty' => 'Prosím vyberte položky na presunutie.',\n    'move_popup_title' => 'Presunúť súbory alebo priečinky',\n    'move_destination' => 'Cieľový priečinok',\n    'please_select_move_dest' => 'Prosím vyberte cieľový priečinok.',\n    'move_dest_src_match' => 'Prosím vyberte iný cieľový priečinok.',\n    'empty_library' => 'Knižnica médií je prázdna. Nahrajte súbory alebo vytvorte priečinky.',\n    'insert' => 'Vložiť',\n    'crop_and_insert' => 'Orezať a vložiť',\n    'select_single_image' => 'Prosím vyberte iba jeden obrázok.',\n    'selection_not_image' => 'Vybraná položka nie je obrázok.',\n    'restore' => 'Späť všetky zmeny',\n    'resize' => 'Zmeniť veľkosť...',\n    'selection_mode_normal' => 'Normálna',\n    'selection_mode_fixed_ratio' => 'Pevný pomer strán',\n    'selection_mode_fixed_size' => 'Pevná veľkosť',\n    'height' => 'Výška',\n    'width' => 'Šírka',\n    'selection_mode' => 'Spôsob označovania',\n    'resize_image' => 'Zmeniť veľkosť obrázku',\n    'image_size' => 'Veľkosť obrázku:',\n    'selected_size' => 'Vybrané:',\n  ],\n  'table' => [\n    'add_item' => 'Pridať položku',\n  ],\n  'dictionary' => [\n    'key_required' => 'Kľúč je povinný',\n    'value_required' => 'Hodnota je povinná',\n  ],\n  'uploader' => [\n    'uploading' => 'Nahrávam súbory',\n    'complete' => 'Nahrávanie dokončené',\n  ],\n  'richeditor' => [\n    'upload_from_computer' => 'Nahrať z počítača',\n    'embedding_code' => 'Vložiť kód',\n    'url_required' => 'URL je povinný',\n    'url_validation' => 'URL musí byť s http:// alebo https://',\n    'add_image' => 'Pridať obrázok',\n    'add_video' => 'Pridať video',\n    'add_audio' => 'Pridať audio',\n    'add_file' => 'Pridať súbor',\n    'embedding_code_required' => 'Kód je povinný',\n    'embedding_code_invalid' => 'Zadaný kód nie je platný',\n    'embedding_code_invalid_title' => 'Neplatný kód',\n    'browse' => 'Prehľadávať médiá',\n    'by_url' => 'Podľa URL',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/sk.json",
    "content": "{\n  \"Cancel\": \"Zrušiť\",\n  \"You are viewing as\": \"Prezeráte si ako\",\n  \"Preview Role\": \"Ukážka roly\",\n  \"This lets you test the actions this role can perform.\": \"To vám umožní otestovať akcie, ktoré môže táto rola vykonávať.\",\n  \"View As Role\": \"Zobraziť ako rolu\",\n  \"Return to Role Settings\": \"Vráťte sa na nastavenia roly\",\n  \"Password must have a minimum of length of :min characters\": \"Heslo musí mať minimálnu dĺžku :min znakov\",\n  \"Password must contain at least one uppercase character.\": \"Heslo musí obsahovať aspoň jedno veľké písmeno.\",\n  \"Password must contain at least one lowercase character.\": \"Heslo musí obsahovať aspoň jedno malé písmeno.\",\n  \"Password must contain at least one number.\": \"Heslo musí obsahovať aspoň jednu číslicu.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Heslo musí obsahovať aspoň jeden nealfanumerický znak.\",\n  \"Welcome to your Administration Area, :name\": \"Vitajte vo svojej administratívnej oblasti, :name\",\n  \"Duplicate\": \"Duplicitné\",\n  \"Expand\": \"Rozbaliť\",\n  \"Collapse\": \"Zbaliť\",\n  \"Move Up\": \"Posunúť hore\",\n  \"Move Down\": \"Posunúť nadol\",\n  \"Remove\": \"Odstrániť\",\n  \"Manage Item\": \"Spravovať položku\",\n  \"Clear Filters\": \"Vymazať filtre\",\n  \"Filter Setup\": \"Nastavenie filtra\",\n  \"Apply\": \"Použiť\",\n  \"Clear\": \"Zrušiť\",\n  \"is equal to\": \"rovná sa\",\n  \"is between\": \"je medzi\",\n  \"contains\": \"obsahuje\",\n  \"is before\": \"je predtým\",\n  \"is after\": \"je po\",\n  \"is greater than\": \"je väčší ako\",\n  \"is less than\": \"je menej než\",\n  \"1. Export output format\": \"1. Formát exportu\",\n  \"File Format\": \"Formát súboru\",\n  \"Delimiter Character\": \"Oddeľovací znak\",\n  \"Enclosure Character\": \"Znak pre ohraničenie (enclosure character)\",\n  \"Escape Character\": \"Ukončovací znak (escape character)\",\n  \"2. Select columns to export\": \"2. Vybrať exportované stĺpce\",\n  \"Columns\": \"Stĺpce\",\n  \"3. Set export options\": \"3. Nastaviť vlastnosti exportu\",\n  \"CSV Custom\": \"Vlastný formát CSV\",\n  \"1. Upload an Import File\": \"1. Nahrať CSV súbor\",\n  \"Import File\": \"Importovať súbor\",\n  \"File Encoding\": \"Kódovanie súboru\",\n  \"First row contains column titles\": \"Prvý riadok obsahuje názvy stĺpcov\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Nechajte zaškrtnuté ak prvý riadok v CSV je použitý pre názvy stĺpcov.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Spárovať stĺpce importu so stĺpcami databázy\",\n  \"File columns\": \"Sĺpce súboru\",\n  \"Database fields\": \"Polia v databáze\",\n  \"3. Set Import Options\": \"3. Nastaviť možnosti importu\",\n  \"Export progress\": \"Priebeh exportu\",\n  \"Processing\": \"Spracovávam\",\n  \"Import progress\": \"Priebeh importu\",\n  \"Import error\": \"Chyba importu\",\n  \"Export error\": \"Chyba exportu\",\n  \"Column preview\": \"Náhľad stĺpa\",\n  \"Column\": \"Stĺpec\",\n  \"Disable\": \"Zakázať\",\n  \"Enable\": \"Povoliť\",\n  \"Delete\": \"Zmazať\",\n  \"Export\": \"Exportovať\",\n  \"Import\": \"Importovať\",\n  \"Select Action\": \"Vyberte položku Akcia\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Vytvorte si nový účet na prihlásenie do Administračnej oblasti.\",\n  \"First Name\": \"Krstné meno\",\n  \"Last Name\": \"Priezvisko\",\n  \"Email Address\": \"Emailová adresa\",\n  \"Pick a Username\": \"Vybrať používateľské meno\",\n  \"Enter New Password\": \"Zadajte nové heslo\",\n  \"Confirm Password\": \"Potvrďte heslo\",\n  \"Create Account\": \"Vytvoriť účet\",\n  \"Getting Ready\": \"Pripravovať sa\",\n  \"Just a few more minutes\": \"Ešte pár minút\",\n  \"Migrating Database\": \"Migrácia databázy\",\n  \"Access the Backend Panel\": \"Prejdite na panel Backend\",\n  \"View Backend During Maintenance\": \"Zobraziť backend počas údržby\",\n  \"Perform Software Updates\": \"Vykonajte aktualizácie softvéru\",\n  \"In Maintenance\": \"V údržbe\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Stránka je momentálne v režime údržby, vráťte sa sem neskôr.\",\n  \"Dashboard\": \"Hlavný panel\",\n  \"Administrators\": \"Administrátori\",\n  \"Manage Admins\": \"Spravovať administrátorov\",\n  \"Create Admins\": \"Vytvoriť administrátorov\",\n  \"Moderate Admins\": \"Moderovať administrátorov\",\n  \"Manage account suspension and ban admin accounts\": \"Spravujte pozastavenie účtu a zablokujte účty správcu\",\n  \"Role Permissions\": \"Spravovať roly\",\n  \"Team Groups\": \"Spravovať skupiny\",\n  \"Manage Other Admins\": \"Spravovať ostatných administrátorov\",\n  \"Allow users to reset passwords and update emails.\": \"Umožňuje obnovenie hesiel a aktualizáciu e-mailov\",\n  \"Delete Admins\": \"Odstrániť administrátorov\",\n  \"Preferences\": \"Predvoľby\",\n  \"Settings\": \"Nastavenia\",\n  \"Background Color\": \"Farba pozadia\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Umožnite používateľom vytvárať nové roly a upravovať alebo odstraňovať roly nižšie, ako je ich najvyššia rola.\",\n  \"Save Changes\": \"Uložiť zmeny\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Tento záznam zobrazuje zoznam úspešných administrátorských prihlásení. Záznamy sú uchovávané po dobu :days dní.\",\n  \"Access Log\": \"Záznam prihlásení\",\n  \"View a list of successful back-end user sign ins.\": \"Zobraziť zoznam úspešných prihlásení do administrácie.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Čas a dátum\",\n  \"Type\": \"Typ\",\n  \"IP address\": \"IP adresa\",\n  \"Username\": \"Používateľské meno\",\n  \"Login\": \"Prihlásiť sa\",\n  \"First name\": \"Meno\",\n  \"Last name\": \"Priezvisko\",\n  \"Email\": \"E-mail\",\n  \"A custom schema is used for this file format.\": \"Pre tento formát súboru sa používa vlastná schéma.\",\n  \"Select\": \"Vyberte\",\n  \"Replace\": \"Nahradiť\",\n  \"and\": \"a\",\n  \"Go\": \"Prejsť\",\n  \"Go to page\": \"Prejsť na stránku\",\n  \"Copy to Clipboard\": \"Skopírovať do schránky\",\n  \"Reveal Contents\": \"Odhaliť obsah\",\n  \"Selected Site\": \"Zvolená stránka\",\n  \"Use Emmet abbreviations\": \"Use Emmet abbreviations\",\n  \"A record does not exist for the selected site. Create one?\": \"A record does not exist for the selected site. Create one?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Údaje, ktoré ste zadali sú nesprávne. Prosím skontrolujte údaje a skúste to znova.\",\n  \"Administration Area\": \"Administrácia\",\n  \"Password Reset\": \"Obnova hesla\",\n  \"Please enter a new password.\": \"Zadajte nové heslo.\",\n  \"Password\": \"Heslo\",\n  \"Password Restore\": \"Obnova hesla\",\n  \"Please enter your login to restore the password.\": \"Zadajte vaše prihlasovacie meno.\",\n  \"A user could not be found with a login value of ':login'\": \"Užívateľ s prihlasovacím menom ':login' nebol nájdený\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"E-mail s inštrukciami bol zaslaný na vašu e-mailovú adresu.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Dáta pre obnovu hesla nie sú správne. Prosím skúste to znova!\",\n  \"Unable to reset your password!\": \"Obnova hesla zlyhala!\",\n  \"Password has been reset. You may now sign in.\": \"Vaše heslo bolo úspešne obnovené. Teraz sa môžete prihlásiť.\",\n  \"Restore\": \"Obnoviť\",\n  \"Reset\": \"Resetovať\",\n  \"Stay logged in\": \"Ostať prihlásený\",\n  \"Forgot password?\": \"Zabudli ste heslo?\",\n  \"Global Editor Settings\": \"Global Editor Settings\",\n  \"Manage Widgets\": \"Správa widgetov\",\n  \"Add Widget\": \"Pridať widget\",\n  \"Set the current layout as the default?\": \"Nastaviť aktuálne usporiadanie ako predvolené?\",\n  \"Make Default\": \"Nastaviť ako predvolené\",\n  \"Reset layout back to default?\": \"Naozaj obnoviť pôvodné usporiadanie?\",\n  \"Reset Layout\": \"Obnoviť pôvodné usporiadanie\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"prosím vyberte\",\n  \"Width\": \"Šírka\",\n  \"full width\": \"plná šírka\",\n  \"Create Widgets\": \"Vytvoriť widget\",\n  \"not equal to\": \"nerovná sa\",\n  \"Light Mode\": \"Svetlý režim\",\n  \"Dark Mode\": \"Tmavý režim\",\n  \"OS Default\": \"OS Default\",\n  \"Create a Custom Palette\": \"Vytvoriť vlastnú paletu\",\n  \"Custom Palette\": \"Vlastná paleta\",\n  \"Primary Color\": \"Primárna farba\",\n  \"Secondary Color\": \"Sekundárna farba\",\n  \"Selection Color\": \"Farba výberu\",\n  \"Nav Text\": \"Nav Text\",\n  \"Nav Background\": \"Nav Background\",\n  \"Sidebar Text\": \"Text bočného panela\",\n  \"Sidebar Background\": \"Pozadie bočného panela\",\n  \"Sidebar Active Text\": \"Sidebar Active Text\",\n  \"Sidebar Active Background\": \"Pozadie aktívneho bočného panela\",\n  \"Sidebar Hover Background\": \"Pozadie po umiestnení kurzora myši na bočný panel\",\n  \"Settings Text\": \"Text nastavenia\",\n  \"Settings Background\": \"Settings Background\",\n  \"Settings Item Background\": \"Settings Item Background\",\n  \"Settings Active Color\": \"Settings Active Color\",\n  \"Settings Active Background\": \"Settings Active Background\",\n  \"Settings Hover Background\": \"Settings Hover Background\",\n  \"This name is shown in the title area of the back-end.\": \"Toto meno se zobrazí v úvodnej lište stránok.\",\n  \"App Name\": \"Meno aplikácie\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Toto motto se zobrazí na prihlasovacej stránke administrácie.\",\n  \"App Tagline\": \"Motto aplikácie\",\n  \"Brand\": \"Značka\",\n  \"Upload a custom logo to use in the back-end.\": \"Nahrajte vlastné logo, ktoré bude použité v administrácií.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Upload a custom favicon to use in the back-end\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Logo navigácie\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Replaces the dashboard link with a custom logo in the navigation.\",\n  \"Dashboard Icon\": \"Ikony hlavného panela\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Use a custom image for the dashboard icon (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Táto správa se zobrazí na prihlasovacej stránke administrácie.\",\n  \"Welcome Message\": \"Uvítacia správa\",\n  \"Login Page\": \"Prihlasovacia stránka\",\n  \"Background Type\": \"Typ pozadia\",\n  \"Flat Color\": \"Flat Color\",\n  \"Wallpaper\": \"Pozadie\",\n  \"Wallpaper Size\": \"Veľkosť pozadia\",\n  \"Auto\": \"Automaticky\",\n  \"Cover\": \"Cover\",\n  \"Background Wallpaper Image\": \"Background Wallpaper Image\",\n  \"Image\": \"Obrázok\",\n  \"Random Autumn Images\": \"Náhodné jesenné obrázky\",\n  \"Custom Image\": \"Vlastný obrázok\",\n  \"Login Page Image\": \"Obrázok prihlasovacej stránky\",\n  \"Colors\": \"Farby\",\n  \"Color Mode\": \"Farebný režim\",\n  \"Color Preset\": \"Predvolená farba\",\n  \"Menu Style\": \"Štýl menu\",\n  \"Navigation\": \"Navigácia\",\n  \"Custom Stylesheet\": \"Vlastné štýly\",\n  \"Styles\": \"Štýly\",\n  \"Inline\": \"V riadku\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"Dlaždice\",\n  \"Collapsed\": \"Zbalené\",\n  \"Icons\": \"Ikony\",\n  \"Left Side\": \"Ľavá strana\",\n  \"Add New Item\": \"Pridať novú položku\",\n  \"Link Color\": \"Farba odkazu\",\n  \"Current Password\": \"Súčasné heslo\",\n  \"New Password\": \"Nové heslo\",\n  \"Current password does not match. Please try again!\": \"Súčasné heslo sa nezhoduje. Prosím, skúste to znovu!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Your password has expired, please create a new one for security reasons.\",\n  \"Region\": \"Región\",\n  \"Locale\": \"Jazyk\",\n  \"Select your desired locale for language use.\": \"Vyberte jazyk administrácie.\",\n  \"Timezone\": \"Časové pásmo\",\n  \"Adjust displayed dates to this timezone.\": \"Upraví zobrazenie času podľa tejto časovej zóny.\",\n  \"Code Editor\": \"Editor kódu\",\n  \"Color Scheme\": \"Farebná schéma\",\n  \"Word Wrap\": \"Zalamovanie slov\",\n  \"Off\": \"Vyp\",\n  \"40 Characters\": \"40 znakov\",\n  \"80 Characters\": \"80 znakov\",\n  \"Fluid\": \"Plynulý\",\n  \"Font Size\": \"Veľkosť písma\",\n  \"Tab Size\": \"Počet znakov odsadenia\",\n  \"Code Folding\": \"Skladanie kódu\",\n  \"Mark begin\": \"Označiť začiatok\",\n  \"Mark begin and end\": \"Označiť začiatok a koniec\",\n  \"Autocompletion\": \"Automatické doplňovanie\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Základné automatické doplňovanie (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Živé automatické doplňovanie\",\n  \"Show gutter\": \"Zobraziť kurzor\",\n  \"Highlight active line\": \"Zvýrazniť aktívny riadok\",\n  \"Automatically close tags\": \"Automaticky uzatvárať značky\",\n  \"Indent using tabs\": \"Odsadenia tabulatorom\",\n  \"Show indent guides\": \"Zobraziť vodítka odsadenia\",\n  \"Show invisible characters\": \"Zobraziť neviditeľné znaky\",\n  \"Show print margin\": \"Zobraziť okraje tlače\",\n  \"Custom styles to include in the HTML editor.\": \"Vlastné štýly, ktoré budú zahrnuté do editora HTML.\",\n  \"Markup Styles\": \"Štýly\",\n  \"Paragraph Formats\": \"Paragraph Formats\",\n  \"Markup Classes\": \"Triedy štýlov\",\n  \"Label\": \"Popis\",\n  \"Paragraph\": \"Odstavec\",\n  \"Class Name\": \"Názov triedy\",\n  \"Link\": \"Odkaz\",\n  \"Table\": \"Tabuľka\",\n  \"Table Cell\": \"Bunka tabuľky\",\n  \"Allowed Tags\": \"Povolené značky\",\n  \"The list of allowed tags.\": \"Zoznam povolených značiek.\",\n  \"Markup Tags\": \"Značky\",\n  \"Allowed Empty Tags\": \"Povolené prázdne značky\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Zoznam značiek, ktoré nie sú odstránené v prípade, že nemajú žiadny obsah.\",\n  \"Do Not Wrap Tags\": \"Nezabaľovať tieto značky\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Zoznam značiek, ktoré by nemali byť zabalené vnútri blokových značiek.\",\n  \"Remove Tags\": \"Odstrániť značky\",\n  \"The list of tags that are removed together with their content.\": \"Zoznam značiek, ktoré sú odstránené spolu s ich obsahom.\",\n  \"Line Breaker Tags\": \"Line Breaker Tags\",\n  \"The list of tags that are used to place a line breaker element between.\": \"The list of tags that are used to place a line breaker element between.\",\n  \"Toolbar Buttons\": \"Tlačidlá na paneli nástrojov\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Predvolené tlačidlá, ktoré budú zobrazené na paneli nástrojov textového editoru.\",\n  \"Insert a preset toolbar button configuration\": \"Insert a preset toolbar button configuration\",\n  \"Allowed Attributes\": \"Povolené atribúty\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"The list of allowed HTML attributes, in addition to the normal allowances.\",\n  \"Enable code snippets (Tab)\": \"Povoliť úryvky (snippets) kódu (Tab)\",\n  \"Title\": \"Názov\",\n  \"Description\": \"Popis\",\n  \"Attachment\": \"Príloha\",\n  \"Attachment URL\": \"URL prílohy\",\n  \"Add a title and description for this attachment.\": \"Pridať názov a popis pre túto prílohu.\",\n  \"Upload\": \"Nahrať\",\n  \"Are you sure?\": \"Ste si istý?\",\n  \"Delete Selected\": \"Odstrániť vybrané\",\n  \"Upload Error\": \"Chyba nahrávania\",\n  \"Remove File\": \"Odstrániť súbor\",\n  \"Show Light Switch\": \"Zobraziť vypínač svetla\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Umožniť používateľom prepínať farebný režim z navigácie.\",\n  \"Create :name\": \"Vytvoriť :name\",\n  \"Update :name\": \"Upraviť :name\",\n  \"Add :name\": \"Pridať :name\",\n  \"Link :name\": \"Väzba :name\",\n  \"Unlink\": \"Zrušiť väzbu\",\n  \"Preview :name\": \"Náhľad :name\",\n  \"Link a New :name\": \"Vytvoriť novú väzbu na :name\",\n  \"Add a New :name\": \"Pridať nový :name\",\n  \"Related :name Data\": \"Súvisiace dáta pre :name\",\n  \":name Created\": \":name bol vytvorený\",\n  \":name Updated\": \":name bol upravený\",\n  \":name Deleted\": \":name bol zmazaný\",\n  \":name Added\": \":name Added\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"Záznam formulíára s ID :id nebol nájdený.\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Náhľad stránok\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Správa administrátorov, skupín a oprávnení.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Nastavenia administrácie\",\n  \"Customize the administration area such as name, colors and logo.\": \"Nastavte si mano, použité farby a logo v administrácií.\",\n  \"Editor Settings\": \"Nastavenia editora kódu\",\n  \"Change the global editor preferences.\": \"Upraviť globálne nastavenia editora, napríklad veľkosť písma a farebnú schému.\",\n  \"My Account\": \"Môj účet\",\n  \"Update your account details such as name, email address and password.\": \"Nastavte si detaily svojho účtu ako meno, e-mail a heslo.\",\n  \"Backend Preferences\": \"Nastavenia administrácie\",\n  \"Manage your account preferences such as desired language.\": \"Spravujte nastavenia svojho účtu ako napríklad jazyk.\",\n  \"security login\": \"bezpečnosť login\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create & Close\": \"Create & Close\",\n  \"Creating :name...\": \"Creating :name...\",\n  \"Save & Close\": \"Save & Close\",\n  \"Saving :name...\": \"Saving :name...\",\n  \"Delete this record?\": \"Delete this record?\",\n  \"Deleting :name...\": \"Deleting :name...\",\n  \"Loading...\": \"Loading...\",\n  \"Complete\": \"Complete\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Unknown column\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Ignore this column\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Created\",\n  \"Updated\": \"Updated\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Warnings\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Skipped Rows\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"File not found\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP rozšírenie :name nie je nainštalované. Prosím nainštalujte túto knižnicu a aktivujte rozšírenie.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Plugin :name je vyžadovaný ale nie je nainštalovaný. Prosím nainštaujte tento plugin.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Do adresára :name alebo jeho podadresárov sa nedá zapisovať z PHP. Prosím nastavte správne oprávnenia tomuto adresáru.\",\n  \"Manage Roles\": \"Spravovať roly\",\n  \"Manage Groups\": \"Spravovať skupiny\",\n  \"Customize Backend\": \"Nastavenia administrácie\"\n}"
  },
  {
    "path": "modules/backend/lang/sl/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Uporabljen je neveljaven tip polja :type.',\n    'options_method_invalid_model' => 'Atribut \\':field\\' ne ustreza veljavnemu modelu. Poskusite natančno določiti možnosti metode za model :model.',\n    'options_method_not_exists' => 'Model :model mora vsebovati metodo :method(), ki vrača možnosti za polje \\':field\\' na obrazcu.',\n    'options_static_method_invalid_value' => 'Statična metoda \\':method()\\' v razredu :class ni vrnila veljavnih možnosti.',\n    'colors_method_not_exists' => 'Model :model mora vsebovati metodo :method(), ki vrača HTML barvne kode v HEX formatu za polje \\':field\\' na obrazcu.',\n  ],\n  'widget' => [\n    'not_registered' => 'Ime vtičnika \\':name\\' ni bilo registrirano.',\n    'not_bound' => 'Vtičnik z imenom \\':name\\' ni vezan na kontroler.',\n  ],\n  'page' => [\n    'untitled' => 'Brez naslova',\n    404 => [\n      'label' => 'Stran ne obstaja',\n      'help' => 'Kljub intenzivnemu iskanju, zahtevanega URL-ja preprosto ni mogoče najti. Ste morda iskali kaj drugega?',\n      'back_link' => 'Vrni se na prejšnjo stran',\n    ],\n    'access_denied' => [\n      'label' => 'Dostop zavrnjen',\n      'help' => 'Nimate potrebnih dovoljenj za ogled te strani.',\n      'cms_link' => 'Vrni se v administracijo',\n    ],\n    'no_database' => [\n      'label' => 'Podatkovna zbirka manjka',\n      'help' => 'Za dostop do administracije je potrebna podatkovna zbirka. Preverite, če je podatkovna zbirka pravilno nastavljena in če so bile migracije pognane ter poskusite ponovno.',\n      'cms_link' => 'Vrni se na domačo stran',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Predloge \\':name\\' ni mogoče najti.',\n    'invalid_name' => 'Neveljavno ime predloge: :name.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Neveljavno ime AJAX akcije \\':name\\'.',\n    'not_found' => 'Ni mogoče najti AJAX akcije \\':name\\'.',\n  ],\n  'account' => [\n    'impersonate' => 'Impersonacija uporabnika',\n    'impersonate_confirm' => 'Ali ste prepričani, da želite impersonirati tega uporabnika? V prvotno stanje se lahko vrnete tako, da se odjavite.',\n    'impersonate_success' => 'Sedaj impersonirate tega uporabnika.',\n    'impersonate_working' => 'Impersoniram...',\n    'impersonating' => 'Impersonacija uporabnika :full_name',\n    'stop_impersonating' => 'Prekliči impersonacijo',\n    'unsuspend' => 'Odsuspendiraj',\n    'unsuspend_confirm' => 'Ali ste prepričani, da želite odsuspendirati tega uporabnika?',\n    'unsuspend_success' => 'Uporabnik je odsuspendiran.',\n    'unsuspend_working' => 'Odsuspendiram...',\n    'signed_in_as' => 'Prijavljeni ste kot :full_name',\n    'sign_out' => 'Odjava',\n    'login_placeholder' => 'uporabniško ime',\n    'password_placeholder' => 'geslo',\n    'enter_email' => 'Vnesite svoj e-poštni naslov',\n    'email_placeholder' => 'e-pošta',\n    'apply' => 'Sprejmi',\n    'cancel' => 'Prekliči',\n    'delete' => 'Izbriši',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Namizje',\n    'widget_inspector_title' => 'Nastavitve vtičnika',\n    'widget_inspector_description' => 'Nastavitve prikaza vtičnika',\n    'widget_columns_label' => 'Širina :columns',\n    'widget_columns_description' => 'Širina vtičnika, število stolpcev med 1 in 12.',\n    'widget_columns_error' => 'Prosimo, vnesite širino vtičnika v obliki števila med 1 in 10.',\n    'columns' => '{1} stolpec|{2} stolpca|[3,4] stolpci|[5,Inf] stolpcev',\n    'widget_new_row_label' => 'Vsili novo vrstico',\n    'widget_new_row_description' => 'Postavi vtičnik v novo vrstico.',\n    'widget_title_label' => 'Naslov vtičnika',\n    'widget_title_error' => 'Potreben je vnos naslova vtičnika.',\n    'reset_layout_success' => 'Postavitev je bila ponastavljena',\n    'make_default_success' => 'Trenutna postavitev je nastavljena kot privzeta.',\n    'collapse_all' => 'Strni vse',\n    'expand_all' => 'Razširi vse',\n    'status' => [\n      'widget_title_default' => 'Status sistema',\n      'update_available' => '[0,1] posodobitev na voljo!|{2} posodobitvi na voljo!|[3,4] posodobitve na voljo!|[5,Inf] posodobitev na voljo!',\n      'updates_pending' => 'Posodobitev programske opreme je na voljo',\n      'updates_nil' => 'Programska oprema je posodobljena',\n      'updates_link' => 'Posodobi',\n      'warnings_pending' => 'Nekatere zadeve potrebujejo vašo pozornost',\n      'warnings_nil' => 'Ni opozoril za prikaz',\n      'warnings_link' => 'Prikaži',\n      'core_build' => 'Različica sistema',\n      'event_log' => 'Dnevnik dogodkov',\n      'request_log' => 'Dnevnik zahtev',\n      'app_birthday' => 'Na spletu od',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Dobrodošli',\n      'welcome_back_name' => 'Dobrodošli nazaj v :app, :name.',\n      'welcome_to_name' => 'Dobrodošli v :app, :name.',\n      'first_sign_in' => 'To je vaša prva prijava.',\n      'last_sign_in' => 'Vaša zadnja prijava je zabeležena.',\n      'view_access_logs' => 'Prikaži dnevnik prijav',\n      'nice_message' => 'Imejte lep dan!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Upravljanje administratorjev',\n    'new' => 'Nov administrator',\n    'first_name' => 'Ime',\n    'last_name' => 'Priimek',\n    'full_name' => 'Polno ime',\n    'email' => 'E-poštni naslov',\n    'role_field' => 'Vloga',\n    'role_comment' => 'Vloge določajo uporabniška dovoljenja, ki jih je možno spremeniti na ravni uporabnika, na zavihku \"Dovoljenja\".',\n    'groups' => 'Skupine',\n    'groups_comment' => 'Določite, katerim skupinam pripada ta uporabniški račun.',\n    'avatar' => 'Avatar',\n    'password' => 'Geslo',\n    'password_confirmation' => 'Potrdite geslo',\n    'permissions' => 'Dovoljenja',\n    'account' => 'Uporabniški račun',\n    'superuser' => 'Super administrator',\n    'superuser_comment' => 'Temu uporabniškemu računu omogoča neomejen dostop do vseh področij sistema. Super administrator lahko dodaja in upravlja druge uporabnike.',\n    'send_invite' => 'Pošlji vabilo po e-pošti',\n    'send_invite_comment' => 'Pošlje pozdravno e-poštno sporočilo s podatki o uporabniškem imenu in geslu.',\n    'delete_confirm' => 'Želite izbrisati tega administratorja?',\n    'return' => 'Vrni se na seznam administratorjev',\n    'allow' => 'Dovoli',\n    'inherit' => 'Podeduj',\n    'deny' => 'Ne dovoli',\n    'activated' => 'Aktiviran',\n    'last_login' => 'Zadnja prijava',\n    'created_at' => 'Ustvarjen',\n    'updated_at' => 'Posodobljen',\n    'deleted_at' => 'Izbrisan',\n    'show_deleted' => 'Prikaži izbrisane',\n    'group' => [\n      'name' => 'Skupina',\n      'name_field' => 'Ime',\n      'name_comment' => 'Ime je prikazano na seznamu skupin na administratorskem obrazcu.',\n      'description_field' => 'Opis',\n      'is_new_user_default_field_label' => 'Privzeta skupina',\n      'is_new_user_default_field_comment' => 'Nove administratorje vedno vključi v to skupino.',\n      'code_field' => 'Koda',\n      'code_comment' => 'Vnesite unikatno kodo, če želite dostopati do objekta skupine preko API klica.',\n      'list_title' => 'Upravljanje s skupinami',\n      'new' => 'Nova skupina',\n      'delete_confirm' => 'Želite odstraniti to administratorsko skupino?',\n      'return' => 'Vrni se na seznam skupin',\n      'users_count' => 'Uporabniki',\n    ],\n    'role' => [\n      'name' => 'Vloga ',\n      'name_field' => 'Ime',\n      'name_comment' => 'Ime je prikazano na seznamu vlog na administratorskem obrazcu.',\n      'description_field' => 'Opis',\n      'code_field' => 'Koda',\n      'code_comment' => 'Vnesite unikatno kodo, če želite dostopati do objekta vloge preko API klica.',\n      'list_title' => 'Upravljanje z vlogami',\n      'new' => 'Nova vloga',\n      'delete_confirm' => 'Želite odstraniti to administratorsko vlogo?',\n      'return' => 'Vrni se na seznam vlog',\n      'users_count' => 'Uporabniki',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Ni overjenega uporabnika, za katerega bi lahko naložili ali shranili nastavitve.',\n    ],\n    'trashed_hint_title' => 'Ta uporabniški račun je bil izbrisan',\n    'trashed_hint_desc' => 'Ta uporabniški račun je bil izbrisan in prijava z njim ni več mogoča. Če ga želite obnoviti, kliknite ikono za obnovitev uporabnika v spodnjem desnem kotu.',\n  ],\n  'list' => [\n    'default_title' => 'Seznam',\n    'search_prompt' => 'Iskanje...',\n    'no_records' => 'Ni najdenih zapisov.',\n    'missing_model' => 'Seznam, uporabljen v :class, nima definiranega modela.',\n    'missing_column' => 'Manjkajo definicije stolpcev za stolpce :columns.',\n    'missing_columns' => 'Seznam, uporabljen v :class, nima definiranih stolpcev seznama.',\n    'missing_definition' => 'Seznam ne vsebuje stolpca za \\':field\\'.',\n    'missing_parent_definition' => 'Seznam ne vsebuje definicije za \\':definition\\'.',\n    'behavior_not_ready' => 'Seznam se ni inicializiral. Preverite, če ste v kontrolerju poklicali metodo makeLists().',\n    'invalid_column_datetime' => 'Vrednost stolpca \\':column\\' ni DateTime objekt. Preverite, če imate v vašem modelu definirano referenco $dates.',\n    'pagination' => 'Prikazani zapisi: :from-:to od :total',\n    'first_page' => 'Prva stran',\n    'last_page' => 'Zadnja stran',\n    'prev_page' => 'Prejšnja stran',\n    'next_page' => 'Naslednja stran',\n    'refresh' => 'Osveži',\n    'updating' => 'Posodabljanje...',\n    'loading' => 'Nalaganje...',\n    'check' => 'Označi',\n    'delete_selected' => 'Izbriši izbrano',\n    'delete_selected_empty' => 'Ni izbranih zapisov za izbris.',\n    'delete_selected_confirm' => 'Želite izbrisati izbrane zapise?',\n    'delete_selected_success' => 'Izbrani zapisi so izbrisani.',\n    'column_switch_true' => 'Da',\n    'column_switch_false' => 'Ne',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Če želite naložiti datoteko, kliknite %s ali povlecite datoteko v to polje.',\n  ],\n  'form' => [\n    'create_title' => 'Ustvari element \":name\"',\n    'update_title' => 'Uredi element \":name\"',\n    'preview_title' => 'Predogled elementa \":name\"',\n    'restore_success' => 'Element \":name\" je obnovljen',\n    'reset_success' => 'Ponastavitev je zaključena',\n    'missing_id' => 'ID obrazca ni bil določen.',\n    'missing_model' => 'Obrazec, uporabljen v :class, nima definiranega modela.',\n    'missing_definition' => 'Obrazec ne vsebuje stolpca za \\':field\\'.',\n    'action_confirm' => 'Ali ste prepričani?',\n    'create' => 'Ustvari',\n    'create_and_close' => 'Ustvari in zapri',\n    'creating' => 'Ustvarjanje...',\n    'creating_name' => 'Ustvarjanje :name...',\n    'save' => 'Shrani',\n    'save_and_close' => 'Shrani in zapri',\n    'saving' => 'Shranjevanje...',\n    'saving_name' => 'Shranjevanje :name...',\n    'delete' => 'Izbriši',\n    'deleting' => 'Brisanje...',\n    'confirm_delete' => 'Želite izbrisati zapis?',\n    'confirm_delete_multiple' => 'Želite izbrisati izbrane zapise?',\n    'deleting_name' => 'Brisanje :name...',\n    'restore' => 'Obnovi',\n    'restoring' => 'Obnavljanje',\n    'confirm_restore' => 'Ali ste prepričani, da želite obnoviti ta zapis?',\n    'reset_default' => 'Ponastavi na privzeto',\n    'resetting' => 'Ponastavljanje',\n    'resetting_name' => 'Ponastavljanje :name',\n    'undefined_tab' => 'Razno',\n    'field_off' => 'Ne',\n    'field_on' => 'Da',\n    'add' => 'Dodaj',\n    'apply' => 'Uporabi',\n    'cancel' => 'Prekliči',\n    'close' => 'Zapri',\n    'confirm' => 'Potrdi',\n    'reload' => 'Ponovno naloži',\n    'complete' => 'Zaključi',\n    'ok' => 'OK',\n    'or' => 'ali',\n    'confirm_tab_close' => 'Zaprem zavihek? Neshranjene spremembe bodo izgubljene.',\n    'behavior_not_ready' => 'Obrazec se ni inicializiral. Preverite, če ste v kontrolerju poklicali metodo initForm().',\n    'preview_no_files_message' => 'Ni naloženih datotek.',\n    'preview_no_media_message' => 'Ni izbranih media datotek.',\n    'preview_no_record_message' => 'Ni izbranih zapisov.',\n    'select' => 'Izberi',\n    'select_all' => 'vse',\n    'select_none' => 'nobenega',\n    'insert_row' => 'Vstavi vrstico',\n    'insert_row_below' => 'Vstavi vrstico spodaj',\n    'delete_row' => 'Izbriši vrstico',\n    'concurrency_file_changed_title' => 'Datoteka je bila spremenjena',\n    'concurrency_file_changed_description' => 'Datoteka, ki jo urejate, je bila spremenjena s strani drugega uporabnika. Datoteko lahko znova naložite in izgubite vaše spremembe ali pa jo prepišete s svojimi spremembami.',\n    'return_to_list' => 'Vrni se na seznam',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Poišči zapis',\n    'invalid_model_class' => 'Model \":modelClass\", določen za iskalnik zapisov, je neveljaven.',\n    'cancel' => 'Prekliči',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Relacija ne vsebuje nastavitev za \\':config\\'.',\n    'missing_definition' => 'Relacija ne vsebuje definicije za \\':field\\'.',\n    'missing_model' => 'Relacija, uporabljena v :class, nima definiranega modela.',\n    'invalid_action_single' => 'Tega dejanja ni mogoče izvesti na relaciji ena proti ena.',\n    'invalid_action_multi' => 'Tega dejanja ni mogoče izvesti na relaciji mnogo proti mnogo.',\n    'help' => 'Kliknite na element, ki ga želite dodati.',\n    'add' => 'Dodaj',\n    'link_selected' => 'Povezava je izbrana',\n    'cancel' => 'Prekliči',\n    'close' => 'Zapri',\n    'create' => 'Ustvari',\n    'update' => 'Posodobi',\n    'preview' => 'Predogled',\n    'remove_name' => 'Odstrani :name',\n    'delete_name' => 'Izbriši :name',\n    'link' => 'Povezava',\n    'unlink_name' => 'Odstrani povezavo :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Razvrsti zapise',\n    'no_records' => 'Na voljo ni nobenih zapisov za razvrščanje.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Modela \\':class\\' z ID-jem :id ni mogoče najti',\n    'missing_id' => 'Za iskanje modela ni določen noben ID.',\n    'missing_relation' => 'Model \\':class\\' nima definirane relacije \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' ne vsebuje metode \\':method\\'.',\n    'invalid_class' => 'Model :model, uporabljen v :class ni veljaven. Dedovati mora objekt \\\\Model.',\n    'mass_assignment_failed' => 'Masovna dodelitev je bila neuspešna za atribut \\':attribute\\' na modelu.',\n  ],\n  'warnings' => [\n    'tips' => 'Nasveti glede nastavitev sistema',\n    'tips_description' => 'Za pravilno nastavitev sistema morate biti pozorni na določene podrobnosti.',\n    'decompileBackendAssets' => 'Oblikovne datoteke (CSS, JavaSrcipt) v administraciji so trenutno ne-stisnjene. To ni priporočljivo za produkcijsko okolje.',\n  ],\n  'editor' => [\n    'markup_tag' => 'Označevalna oznaka',\n    'toolbar_options' => 'Nastavitve orodne vrstice',\n    'toolbar_buttons_presets' => [\n      'default' => 'Privzeto',\n      'minimal' => 'Minimalno',\n      'full' => 'Polno',\n    ],\n    'paragraph_formats_comment' => 'Možnosti, ki se prikažejo v spustnem seznamu Format odstavka.',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Moje nastavitve',\n    'menu_description' => 'Nastavitve, povezane z vašim administratorskim računom',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Poudarjena barva',\n    'menu_mode_inline_no_icons' => 'Vrstični (brez ikon)',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'vsi',\n    'options_method_not_exists' => 'Model :model mora vsebovati metodo :method(), ki vrača možnosti za filter \\':filter\\'.',\n    'date_all' => 'vse periode',\n    'number_all' => 'vsa števila',\n  ],\n  'import_export' => [\n    'row' => 'Vrstica :row',\n    'export_error' => 'Napaka pri izvozu',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1250' => 'Windows-1250 (CP1250, Central and Eastern European)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Nalaganje in upravljanje z media vsebinami - slike, video posnetki, zvočni posnetki, dokumenti',\n    'allow_unsafe_markdown' => 'Dovoli uporabo nevarnih označb (lahko vključi Javascript)',\n  ],\n  'mediafinder' => [\n    'label' => 'Media brskalnik',\n    'default_prompt' => 'Kliknite gumb %s za iskanje media elementa',\n    'no_image' => 'Slike ni mogoče najti',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Naloži',\n    'move' => 'Premakni',\n    'delete' => 'Izbriši',\n    'add_folder' => 'Dodaj mapo',\n    'search' => 'Iskanje',\n    'display' => 'Prikaz',\n    'filter_everything' => 'Vse',\n    'filter_images' => 'Slike',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Dokumenti',\n    'library' => 'Knjižnica',\n    'size' => 'Velikost',\n    'title' => 'Naslov',\n    'last_modified' => 'Zadnja sprememba',\n    'public_url' => 'URL',\n    'click_here' => 'Kliknite tukaj',\n    'thumbnail_error' => 'Napaka pri ustvarjanju sličice.',\n    'return_to_parent' => 'Vrni se v nadrejeno mapo',\n    'return_to_parent_label' => 'Pojdi gor ..',\n    'nothing_selected' => 'Nič ni izbrano.',\n    'multiple_selected' => 'Izbranih je več elementov.',\n    'uploading_file_num' => 'Nalaganje :number datotek(e)...',\n    'uploading_complete' => 'Nalaganje zaključeno',\n    'uploading_error' => 'Nalaganje ni uspelo',\n    'type_blocked' => 'Izbrani tip datoteke je blokiran iz varnostnih razlogov.',\n    'order_by' => 'Razvrsti po',\n    'direction' => 'Smer',\n    'direction_asc' => 'Naraščajoče',\n    'direction_desc' => 'Padajoče',\n    'folder' => 'Mapa',\n    'no_files_found' => 'Vaše iskanje se ne ujema z nobeno datoteko.',\n    'delete_empty' => 'Prosimo, izberite elemente, ki jih želite izbrisati.',\n    'delete_confirm' => 'Želite izbrisati izbrane elemente?',\n    'error_renaming_file' => 'Napaka pri preimenovanju elementa.',\n    'new_folder_title' => 'Nova mapa',\n    'folder_name' => 'Ime mape',\n    'error_creating_folder' => 'Napaka pri ustvarjanju mape',\n    'folder_or_file_exist' => 'Datoteka ali mapa z izbranim imenom že obstaja.',\n    'move_empty' => 'Prosimo, izberite elemente, ki jih želite premakniti.',\n    'move_popup_title' => 'Premakni datoteke ali mape',\n    'move_destination' => 'Ciljna mapa',\n    'please_select_move_dest' => 'Prosimo, izberite ciljno mapo.',\n    'move_dest_src_match' => 'Prosimo, izberite drugo ciljno mapo.',\n    'empty_library' => 'Tukaj izgleda malo prazno. Za začetek naložite datoteke ali ustvarite mape.',\n    'insert' => 'Vstavi',\n    'crop_and_insert' => 'Obreži in vstavi',\n    'select_single_image' => 'Prosimo, izberite samo eno sliko.',\n    'selection_not_image' => 'Izbrani element ni slika.',\n    'restore' => 'Razveljavi vse spremembe',\n    'resize' => 'Spremeni velikost...',\n    'selection_mode_normal' => 'Normalno',\n    'selection_mode_fixed_ratio' => 'Fiksno razmerje',\n    'selection_mode_fixed_size' => 'Fiksna velikost',\n    'height' => 'Višina',\n    'width' => 'Širina',\n    'selection_mode' => 'Izbirni način',\n    'resize_image' => 'Spremeni velikost slike',\n    'image_size' => 'Velikost slike:',\n    'selected_size' => 'Izbrano:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/sl.json",
    "content": "{\n  \"Cancel\": \"Prekliči\",\n  \"You are viewing as\": \"Ogledujete si kot\",\n  \"Preview Role\": \"Vloga za predogled\",\n  \"This lets you test the actions this role can perform.\": \"S tem lahko preizkusite dejanja, ki jih lahko izvede ta vloga.\",\n  \"View As Role\": \"Poglej v vlogi\",\n  \"Return to Role Settings\": \"Vrnite se v nastavitve vlog\",\n  \"Password must have a minimum of length of :min characters\": \"Geslo mora vsebovati najmanj :min znakov\",\n  \"Password must contain at least one uppercase character.\": \"Geslo mora vsebovati vsaj eno veliko črko.\",\n  \"Password must contain at least one lowercase character.\": \"Geslo mora vsebovati vsaj eno malo črko.\",\n  \"Password must contain at least one number.\": \"Geslo mora vsebovati vsaj eno številko.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Geslo mora vsebovati vsaj en nealfanumerični znak.\",\n  \"Welcome to your Administration Area, :name\": \"Dobrodošli na vašem administrativnem območju, :name\",\n  \"Duplicate\": \"Podvoji\",\n  \"Expand\": \"Razširi\",\n  \"Collapse\": \"Podri\",\n  \"Move Up\": \"Pomakni gor\",\n  \"Move Down\": \"Pomakni dol\",\n  \"Remove\": \"Odstrani\",\n  \"Manage Item\": \"Upravljaj element\",\n  \"Clear Filters\": \"Počisti filtre\",\n  \"Filter Setup\": \"Nastavitve filtra\",\n  \"Apply\": \"Apliciraj\",\n  \"Clear\": \"Izprazni\",\n  \"is equal to\": \"je enako\",\n  \"is between\": \"je med\",\n  \"contains\": \"vsebuje\",\n  \"is before\": \"je pred\",\n  \"is after\": \"je po\",\n  \"is greater than\": \"je več od\",\n  \"is less than\": \"je manj od\",\n  \"1. Export output format\": \"1. Izberite format izvozne datoteke\",\n  \"File Format\": \"Format datoteke\",\n  \"Delimiter Character\": \"Ločilni znak\",\n  \"Enclosure Character\": \"Ovojni znak\",\n  \"Escape Character\": \"Ubežni znak\",\n  \"2. Select columns to export\": \"2. Označite stolpce za izvoz\",\n  \"Columns\": \"Stolpci\",\n  \"3. Set export options\": \"3. Nastavitve izvoza\",\n  \"CSV Custom\": \"Format po meri\",\n  \"1. Upload an Import File\": \"1. Naložite CSV datoteko\",\n  \"Import File\": \"Uvozi datoteko\",\n  \"File Encoding\": \"Kodiranje datoteke\",\n  \"First row contains column titles\": \"Prva vrstica vsebuje naslove stolpcev\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"To polje pustite označeno, če prva vrstica v vaši CSV datoteki vsebuje naslove stolpcev.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Match the File Columns to Database Fields\",\n  \"File columns\": \"Stolpci v datoteki\",\n  \"Database fields\": \"Polja v podatkovni zbirki\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Napredek izvoza\",\n  \"Processing\": \"Procesiranje\",\n  \"Import progress\": \"Napredek uvoza\",\n  \"Import error\": \"Napaka pri uvozu\",\n  \"Export error\": \"Napaka pri izvozu\",\n  \"Column preview\": \"Predogled stolpca\",\n  \"Column\": \"Stolpec\",\n  \"Disable\": \"Onemogoči\",\n  \"Enable\": \"Omogoči\",\n  \"Delete\": \"Izbriši\",\n  \"Export\": \"Izvozi\",\n  \"Import\": \"Uvozi\",\n  \"Select Action\": \"Izberite Dejanje\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Ustvarite nov račun za prijavo v Upravno območje.\",\n  \"First Name\": \"Ime\",\n  \"Last Name\": \"Priimek\",\n  \"Email Address\": \"E-poštni naslov\",\n  \"Pick a Username\": \"Izberite uporabniško ime\",\n  \"Enter New Password\": \"Vnesite novo geslo\",\n  \"Confirm Password\": \"Potrdite geslo\",\n  \"Create Account\": \"Ustvari račun\",\n  \"Getting Ready\": \"Sistem se pripravlja\",\n  \"Just a few more minutes\": \"Samo še nekaj minut\",\n  \"Migrating Database\": \"Migracija baze podatkov\",\n  \"Access the Backend Panel\": \"Dostop do administracijskega vmesnika\",\n  \"View Backend During Maintenance\": \"Prikaži administracijki vmesnik med vzdrževanjem\",\n  \"Perform Software Updates\": \"Izvedi posodobitve programske opreme\",\n  \"In Maintenance\": \"V Vzdrževanju\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Spletno mesto je trenutno v načinu vzdrževanja, preverite znova pozneje.\",\n  \"Dashboard\": \"Nadzorna plošča\",\n  \"Administrators\": \"Administratorji\",\n  \"Manage Admins\": \"Upravljaj skrbnike\",\n  \"Create Admins\": \"Ustvari skrbnike\",\n  \"Moderate Admins\": \"Upravljaj z administratorji\",\n  \"Manage account suspension and ban admin accounts\": \"Upravljaj z blokado računa in onemogoči skrbniške račune\",\n  \"Role Permissions\": \"Upravljanje z vlogami\",\n  \"Team Groups\": \"Upravljanje s skupinami\",\n  \"Manage Other Admins\": \"Upravljanje drugih skrbnikov\",\n  \"Allow users to reset passwords and update emails.\": \"Omogoča ponastavitev gesel in posodabljanje e-pošte\",\n  \"Delete Admins\": \"Izbriši skrbnike\",\n  \"Preferences\": \"Preference\",\n  \"Settings\": \"Nastavitve\",\n  \"Background Color\": \"Barva ozadja\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Uporabnikom dovoli ustvarjanje novih vlog ter urejanje ali brisanje vlog nižjih od najvišje lastne vloge.\",\n  \"Save Changes\": \"Shrani spremembe\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Ta dnevnik beleži seznam uspešnih prijav administratorjev. Zapisi se hranijo :days dni.\",\n  \"Access Log\": \"Dnevnik dostopov\",\n  \"View a list of successful back-end user sign ins.\": \"Prikaz seznama uspešnih prijav administratorjev.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Datum in čas\",\n  \"Type\": \"Tip\",\n  \"IP address\": \"IP naslov\",\n  \"Username\": \"Uporabniško ime\",\n  \"Login\": \"Prijava\",\n  \"First name\": \"Ime\",\n  \"Last name\": \"Priimek\",\n  \"Email\": \"E-pošta\",\n  \"A custom schema is used for this file format.\": \"Za to obliko datoteke je uporabljena shema po meri.\",\n  \"Select\": \"Izberite\",\n  \"Replace\": \"Zamenjati\",\n  \"and\": \"in\",\n  \"Go\": \"Pojdi\",\n  \"Go to page\": \"Pojdi na stran\",\n  \"Copy to Clipboard\": \"Kopiraj v odložišče\",\n  \"Reveal Contents\": \"Razkrij vsebino\",\n  \"Selected Site\": \"Izbrano spletno mesto\",\n  \"Use Emmet abbreviations\": \"Uporabite okrajšave Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"A record does not exist for the selected site. Create one?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Podatki, ki ste jih vnesli, se ne ujemajo z našimi zapisi. Prosimo, ponovno preverite podatke in poskusite znova.\",\n  \"Administration Area\": \"Nadzorna plošča\",\n  \"Password Reset\": \"Ponastavitev gesla\",\n  \"Please enter a new password.\": \"Vnesite novo geslo\",\n  \"Password\": \"Geslo\",\n  \"Password Restore\": \"Obnovitev gesla\",\n  \"Please enter your login to restore the password.\": \"Vnesite svoje uporabniško ime\",\n  \"A user could not be found with a login value of ':login'\": \"Uporabnika z uporabniškim imenom ':login' ni mogoče najti.\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Na vaš e-poštni naslov je bilo poslano sporočilo z navodili.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Posredovani so bili neveljavni podatki za ponastavitev gesla. Prosimo, poskusite znova!\",\n  \"Unable to reset your password!\": \"Gesla ni bilo mogoče ponastaviti!\",\n  \"Password has been reset. You may now sign in.\": \"Geslo je bilo ponastavljeno. Sedaj se lahko prijavite.\",\n  \"Restore\": \"Obnovi\",\n  \"Reset\": \"Ponastavi\",\n  \"Stay logged in\": \"Ostanite prijavljeni\",\n  \"Forgot password?\": \"Ste pozabili svoje geslo?\",\n  \"Global Editor Settings\": \"Globalne nastavitve urejevalnika\",\n  \"Manage Widgets\": \"Upravljanje vtičnikov\",\n  \"Add Widget\": \"Dodaj vtičnik\",\n  \"Set the current layout as the default?\": \"Želite trenutno postavitev nastaviti za privzeto?\",\n  \"Make Default\": \"Nastavi za privzeto\",\n  \"Reset layout back to default?\": \"Želite postavitev ponastaviti nazaj na privzeto obliko?\",\n  \"Reset Layout\": \"Ponastavi postavitev\",\n  \"Widget\": \"Vtičnik\",\n  \"please select\": \"izberite\",\n  \"Width\": \"Širina\",\n  \"full width\": \"Celotna širina\",\n  \"Create Widgets\": \"Ustvari vtičnik\",\n  \"not equal to\": \"ni enako\",\n  \"Light Mode\": \"Svetli način\",\n  \"Dark Mode\": \"Temni način\",\n  \"OS Default\": \"Privzeti OS\",\n  \"Create a Custom Palette\": \"Ustvarite paleto po meri\",\n  \"Custom Palette\": \"Paleta po meri\",\n  \"Primary Color\": \"Primarna barva\",\n  \"Secondary Color\": \"Sekundarna barva\",\n  \"Selection Color\": \"Izbirna barva\",\n  \"Nav Text\": \"Nav besedilo\",\n  \"Nav Background\": \"Nav ozadje\",\n  \"Sidebar Text\": \"Besedilo stranske vrstice\",\n  \"Sidebar Background\": \"Ozadje stranske vrstice\",\n  \"Sidebar Active Text\": \"Aktivno besedilo stranske vrstice\",\n  \"Sidebar Active Background\": \"Aktivno ozadje stranske vrstice\",\n  \"Sidebar Hover Background\": \"Lebdeče ozadje stranske vrstice\",\n  \"Settings Text\": \"Besedilo nastavitev\",\n  \"Settings Background\": \"Ozadje nastavitev\",\n  \"Settings Item Background\": \"Ozadje elementa nastavitev\",\n  \"Settings Active Color\": \"Aktivna barva nastavitev\",\n  \"Settings Active Background\": \"Aktivno ozadje nastavitev\",\n  \"Settings Hover Background\": \"Lebdeče ozadje nastavitev\",\n  \"This name is shown in the title area of the back-end.\": \"Ime je prikazano v naslovni vrstici administracije.\",\n  \"App Name\": \"Ime aplikacije\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Slogan je prikazan na prijavnem oknu administracije.\",\n  \"App Tagline\": \"Slogan aplikacije\",\n  \"Brand\": \"Znamka\",\n  \"Upload a custom logo to use in the back-end.\": \"Naložite poljuben logotip, ki ga želite prikazati v administraciji.\",\n  \"Logo\": \"Logotip\",\n  \"Upload a custom favicon to use in the back-end\": \"Naložite poljubno ikono zaznamka za administracijo.\",\n  \"Favicon\": \"Ikona zaznamka (favicon)\",\n  \"Navigation Logo\": \"Navigacijski logotip\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"V navigaciji zamenja povezavo nadzorne plošče z logotipom po meri.\",\n  \"Dashboard Icon\": \"Ikona nadzorne plošče\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Uporabite sliko po meri za ikono nadzorne plošče (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Sporočilo je prikazano na prijavnem oknu administracije.\",\n  \"Welcome Message\": \"Pozdravno sporočilo\",\n  \"Login Page\": \"Stran za prijavo\",\n  \"Background Type\": \"Vrsta ozadja\",\n  \"Flat Color\": \"Ravna barva\",\n  \"Wallpaper\": \"Tapeta\",\n  \"Wallpaper Size\": \"Velikost tapete\",\n  \"Auto\": \"Samodejno\",\n  \"Cover\": \"Pokrijte\",\n  \"Background Wallpaper Image\": \"Slika za ozadje\",\n  \"Image\": \"Slika\",\n  \"Random Autumn Images\": \"Naključne jesenske slike\",\n  \"Custom Image\": \"Slika po meri\",\n  \"Login Page Image\": \"Slika prijavne strani\",\n  \"Colors\": \"Barve\",\n  \"Color Mode\": \"Barvni način\",\n  \"Color Preset\": \"Barvna prednastavitev\",\n  \"Menu Style\": \"Slog menija\",\n  \"Navigation\": \"Navigacija\",\n  \"Custom Stylesheet\": \"Slog po meri\",\n  \"Styles\": \"CSS slogi\",\n  \"Inline\": \"Vrstični\",\n  \"Text\": \"Besedilo\",\n  \"Tiles\": \"Ploščice\",\n  \"Collapsed\": \"Strnjen\",\n  \"Icons\": \"Ikone\",\n  \"Left Side\": \"Leva stran\",\n  \"Add New Item\": \"Dodaj nov element\",\n  \"Link Color\": \"Barva povezave\",\n  \"Current Password\": \"Current Password\",\n  \"New Password\": \"New Password\",\n  \"Current password does not match. Please try again!\": \"Current password does not match. Please try again!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Your password has expired, please create a new one for security reasons.\",\n  \"Region\": \"Regija\",\n  \"Locale\": \"Jezik\",\n  \"Select your desired locale for language use.\": \"Izberite želeni jezik za uporabo v administraciji.\",\n  \"Timezone\": \"Časovni pas\",\n  \"Adjust displayed dates to this timezone.\": \"Prikazani datumi se prilagodijo glede na izbran časovni pas.\",\n  \"Code Editor\": \"Urejevalnik kode\",\n  \"Color Scheme\": \"Barvna shema\",\n  \"Word Wrap\": \"Prelom besed\",\n  \"Off\": \"Izključi\",\n  \"40 Characters\": \"40 znakov\",\n  \"80 Characters\": \"80 znakov\",\n  \"Fluid\": \"Fluidno\",\n  \"Font Size\": \"Velikost pisave\",\n  \"Tab Size\": \"Širina tabulatorja\",\n  \"Code Folding\": \"Strnjevanje kode\",\n  \"Mark begin\": \"Označi začetek\",\n  \"Mark begin and end\": \"Označi začetek in konec\",\n  \"Autocompletion\": \"Samodejno dokončanje\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Osnovno samodejno dokončanje (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Instantno samodejno dokončanje\",\n  \"Show gutter\": \"Prikaži odmike\",\n  \"Highlight active line\": \"Označi aktivno vrstico\",\n  \"Automatically close tags\": \"Samodejno zapri označbe\",\n  \"Indent using tabs\": \"Odmik s tabulatorjem\",\n  \"Show indent guides\": \"Prikaži vodila za odmike\",\n  \"Show invisible characters\": \"Prikaži nevidne znake\",\n  \"Show print margin\": \"Prikaži rob tiskanja\",\n  \"Custom styles to include in the HTML editor.\": \"Slogi, ki jih želite vključiti v urejevalnik HTML.\",\n  \"Markup Styles\": \"Označevalni slogi\",\n  \"Paragraph Formats\": \"Formati odstavkov\",\n  \"Markup Classes\": \"Označevalni razredi\",\n  \"Label\": \"Opis\",\n  \"Paragraph\": \"Odstavek\",\n  \"Class Name\": \"Oznaka razreda\",\n  \"Link\": \"Povezava\",\n  \"Table\": \"Tabela\",\n  \"Table Cell\": \"Celica tabele\",\n  \"Allowed Tags\": \"Dovoljene oznake\",\n  \"The list of allowed tags.\": \"Seznam dovoljenih oznak.\",\n  \"Markup Tags\": \"Označevalne oznake\",\n  \"Allowed Empty Tags\": \"Dovoljene prazne oznake\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Seznam oznak, ki niso odstranjene, če v njih ni vsebine.\",\n  \"Do Not Wrap Tags\": \"Ne-zavite oznake\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Seznam oznak, ki naj ne bodo zavite znotraj blokovskih oznak.\",\n  \"Remove Tags\": \"Odstrani oznake\",\n  \"The list of tags that are removed together with their content.\": \"Seznam oznak, ki so odstranjene skupaj z njihovo vsebino.\",\n  \"Line Breaker Tags\": \"Oznake prekinitve vrstic\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Seznam oznak, ki se uporabljajo za postavitev elementa prekinitve med vrstice.\",\n  \"Toolbar Buttons\": \"Gumbi orodne vrstice\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Gumbi orodne vrstice, ki se privzeto prikažejo v urejevalniku.\",\n  \"Insert a preset toolbar button configuration\": \"Vstavite prednastavljeno konfiguracijo gumbov orodne vrstice:\",\n  \"Allowed Attributes\": \"Allowed Attributes\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"The list of allowed HTML attributes, in addition to the normal allowances.\",\n  \"Enable code snippets (Tab)\": \"Omogoči odseke kode (Tab)\",\n  \"Title\": \"Naslov\",\n  \"Description\": \"Opis\",\n  \"Attachment\": \"Priponka\",\n  \"Attachment URL\": \"URL priloge\",\n  \"Add a title and description for this attachment.\": \"Dodajte naslov in opis za to priponko.\",\n  \"Upload\": \"Upload\",\n  \"Are you sure?\": \"Ali ste prepričani?\",\n  \"Delete Selected\": \"Delete Selected\",\n  \"Upload Error\": \"Napaka pri nalaganju\",\n  \"Remove File\": \"Odstrani datoteko\",\n  \"Show Light Switch\": \"Show Light Switch\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Allow users to toggle the color mode from the navigation.\",\n  \"Create :name\": \"Ustvari :name\",\n  \"Update :name\": \"Posodobi :name\",\n  \"Add :name\": \"Dodaj :name\",\n  \"Link :name\": \"Povezava za :name\",\n  \"Unlink\": \"Odstrani povezavo\",\n  \"Preview :name\": \"Predogled za :name\",\n  \"Link a New :name\": \"Poveži novo :name\",\n  \"Add a New :name\": \"Dodaj novo :name\",\n  \"Related :name Data\": \"Povezani podatki :name\",\n  \":name Created\": \"Element \\\":name\\\" je ustvarjen\",\n  \":name Updated\": \"Element \\\":name\\\" je posodobljen\",\n  \":name Deleted\": \"Element \\\":name\\\" je izbrisan\",\n  \":name Added\": \":name Added\",\n  \":name Linked\": \":name Linked\",\n  \":name Removed\": \":name Removed\",\n  \":name Unlinked\": \":name Unlinked\",\n  \"Form record with an ID of :id could not be found.\": \"Obrazca z ID-jem :id ni mogoče najti.\",\n  \"Remove Selected\": \"Remove Selected\",\n  \"Unlink Selected\": \"Unlink Selected\",\n  \"Preview the Website\": \"Ogled spletne strani\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Upravljanje z administratorji, skupinami in dovoljenji.\",\n  \"Define permissions for administrators based on their role.\": \"Define permissions for administrators based on their role.\",\n  \"Add administrators to groups used for notifications and features.\": \"Add administrators to groups used for notifications and features.\",\n  \"Branding & Appearance\": \"Prilagoditev administracije\",\n  \"Customize the administration area such as name, colors and logo.\": \"Prilagoditev okolja administracije, kot so npr. ime, barve in logotip.\",\n  \"Editor Settings\": \"Nastavitve urejevalnika\",\n  \"Change the global editor preferences.\": \"Splošne nastavitve urejevalnika, kot npr. velikost pisave in barvna shema.\",\n  \"My Account\": \"Moj profil\",\n  \"Update your account details such as name, email address and password.\": \"Urejanje podatkov vašega profila, kot so ime, e-pošta in geslo.\",\n  \"Backend Preferences\": \"Nastavitve administracije\",\n  \"Manage your account preferences such as desired language.\": \"Upravljajte nastavitve vašega profila, kot je npr. jezik.\",\n  \"security login\": \"varnostna prijava\",\n  \"List Setup\": \"List Setup\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\",\n  \"Reset to Default\": \"Reset to Default\",\n  \"Add Selected\": \"Add Selected\",\n  \"Create & Close\": \"Create & Close\",\n  \"Creating :name...\": \"Creating :name...\",\n  \"Save & Close\": \"Save & Close\",\n  \"Saving :name...\": \"Saving :name...\",\n  \"Delete this record?\": \"Delete this record?\",\n  \"Deleting :name...\": \"Deleting :name...\",\n  \"Loading...\": \"Loading...\",\n  \"Complete\": \"Complete\",\n  \"Please specify the modelClass property for :type\": \"Please specify the modelClass property for :type\",\n  \"Please specify some columns to export.\": \"Please specify some columns to export.\",\n  \"Missing column identifier\": \"Missing column identifier\",\n  \"Unknown column\": \"Unknown column\",\n  \"Please specify some columns to import.\": \"Please specify some columns to import.\",\n  \"Please match some columns first.\": \"Please match some columns first.\",\n  \"Please specify a match for the required field :label.\": \"Please specify a match for the required field :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"You must implement the controller behavior ListController with the export 'useList' option enabled.\",\n  \"File export process completed!\": \"File export process completed!\",\n  \"The browser will now redirect to the file download.\": \"The browser will now redirect to the file download.\",\n  \"Ignore this column\": \"Ignore this column\",\n  \"Drop column here...\": \"Drop column here...\",\n  \"Please upload a valid CSV file.\": \"Please upload a valid CSV file.\",\n  \"Created\": \"Created\",\n  \"Updated\": \"Updated\",\n  \"Skipped\": \"Skipped\",\n  \"Warnings\": \"Warnings\",\n  \"Errors\": \"Errors\",\n  \"Skipped Rows\": \"Skipped Rows\",\n  \"Show Ignored Columns\": \"Show Ignored Columns\",\n  \"Auto Match Columns\": \"Auto Match Columns\",\n  \"File not found\": \"File not found\",\n  \"There was no data supplied to export\": \"There was no data supplied to export\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"Način za odpravljanje napak je omogočen. Ta način ni priporočljiv za produkcijsko okolje.\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP razširitev (extension) :name ni nameščena. Prosimo, namestite ustrezno knjižnico in aktivirajte razširitev.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Za delovanje je potreben vtičnik :name, vendar ni nameščen. Prosimo, namestite ta vtičnik.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"PHP ne more pisati v mapo :name in njene podmape. Prosimo, nastavite spletnemu strežniku ustrezna dovoljenja za to mapo.\",\n  \"Manage Roles\": \"Upravljanje z vlogami\",\n  \"Manage Groups\": \"Upravljanje s skupinami\",\n  \"Customize Backend\": \"Prilagoditev administracije\"\n}"
  },
  {
    "path": "modules/backend/lang/sv/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Felaktig fälttyp använd :type.',\n    'options_method_not_exists' => 'Modellklassen :model måste definera en metod :method() som returnerar villkor för formfältet \":field\"',\n  ],\n  'widget' => [\n    'not_registered' => 'En widget med klassnamnet \\':name\\' har inte blivit registrerad',\n    'not_bound' => 'En widget med klassnamnet \\':name\\' saknas i controllern',\n  ],\n  'page' => [\n    'untitled' => 'Ej namngiven',\n    'access_denied' => [\n      'label' => 'Nekat tillträde',\n      'help' => 'Du har inte behörighet att visa den här sidan.',\n      'cms_link' => 'Gå till CMS backend',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'En partial med namn \\':name\\' kunde inte hittas',\n  ],\n  'account' => [\n    'sign_out' => 'Logga ut',\n    'login_placeholder' => 'användarnamn',\n    'password_placeholder' => 'lösenord',\n    'enter_email' => 'Ange din e-postadress',\n    'email_placeholder' => 'e-post',\n    'apply' => 'Spara',\n    'cancel' => 'Avbryt',\n    'delete' => 'Radera',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Kontrollpanelen',\n    'widget_inspector_title' => 'Widget inställningar',\n    'widget_inspector_description' => 'Widget informations inställningar',\n    'widget_columns_label' => 'Bredd :columns',\n    'widget_columns_description' => 'Bredden på widgeten ska vara ett nummer mellan 1 och 10.',\n    'widget_columns_error' => 'Vänligen ange widgetens bredden som ett nummer mellan 1 och 10.',\n    'columns' => '{1} column|[2,Inf] kolonner',\n    'widget_new_row_label' => 'Forcera en ny rad',\n    'widget_new_row_description' => 'Lägg widgeten på en ny rad.',\n    'widget_title_label' => 'Widget-titel',\n    'widget_title_error' => 'En widgets titel är tvingande.',\n    'status' => [\n      'widget_title_default' => 'Systemstatus',\n      'update_available' => '{0} uppdateringar tillgängliga!|{1} uppdatering tillgänglig!|[2,Inf] uppdateringar tillgängliga!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administratör',\n    'list_title' => 'Hantera administratörer',\n    'new' => 'Ny administratör',\n    'first_name' => 'Förnamn',\n    'last_name' => 'Efternamn',\n    'full_name' => 'Fullständigt namn',\n    'email' => 'E-post',\n    'groups' => 'Grupper',\n    'groups_comment' => 'Välj vilken grupp denna person hör till',\n    'avatar' => 'Avatar',\n    'password' => 'Lösenord',\n    'password_confirmation' => 'Bekräfta lösenord',\n    'permissions' => 'Rättigheter',\n    'account' => 'Konto',\n    'superuser' => 'Superanvändare',\n    'superuser_comment' => 'Markera denna checkbox för att ge denna person tillgång till alla områden',\n    'send_invite' => 'Inbjudan är sänd via e-post',\n    'send_invite_comment' => 'Markera denna checkbox för att skicka en inbjudan till användaren via e-post',\n    'delete_confirm' => 'Vill du verkligen radera denna administratör?',\n    'return' => 'Återgå till administratörlistan',\n    'allow' => 'Tillåt',\n    'inherit' => 'Ärv',\n    'deny' => 'Förbjud',\n    'group' => [\n      'name' => 'Grupp',\n      'name_field' => 'Namn',\n      'description_field' => 'Beskriving',\n      'is_new_user_default_field' => 'Lägg till nya administratörer till gruppen som standard',\n      'code_field' => 'Kod',\n      'code_comment' => 'Ange en unik kod om du vill komma åt det med API.',\n      'list_title' => 'Hantera grupper',\n      'new' => 'Ny administratörsgrupp',\n      'delete_confirm' => 'Vill du verkligen radera denna administratörsgrupp?',\n      'return' => 'Återgå till grupplistan',\n      'users_count' => 'Användare',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Det finns ingen autentiserad användare att ladda eller spara inställningar för',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Lista',\n    'search_prompt' => 'Sök...',\n    'no_records' => 'Det finns inga träffar för denna vy',\n    'missing_model' => 'List-egenskapen i :class har ingen modell definerad',\n    'missing_column' => 'Det finns inga kolumndefinitioner för :columns',\n    'missing_columns' => 'Listan som används i :class har inga listkolumner definerade',\n    'missing_definition' => 'Listegenskapen saknar en kolumn för \\':field\\'',\n    'behavior_not_ready' => 'Listegenskapen har inte blivit initierad, kontrollera att du har anropat makeLists() i din controller',\n    'invalid_column_datetime' => 'Kolumns värde \\':column\\' är inte ett DateTime objekt, saknar du en $dates referens i Model?',\n    'pagination' => 'Visade poster: :from-:to av :total',\n    'prev_page' => 'Föregående sida',\n    'next_page' => 'Nästa sida',\n    'loading' => 'Laddar...',\n    'delete_selected' => 'Radera utvald',\n    'delete_selected_empty' => 'Det finns inga markerad post att radera.',\n    'delete_selected_confirm' => 'Ta bort de markerade posterna?',\n    'delete_selected_success' => 'De markerade posterna är raderade.',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Klicka på %s eller dra en fil hit för att ladda upp',\n  ],\n  'form' => [\n    'create_title' => 'Skapa :name',\n    'update_title' => 'Redigera :name',\n    'preview_title' => 'Förhandsgranska :name',\n    'missing_id' => 'Rad-ID för formuläret har inte blivit specificerat',\n    'missing_model' => 'Formuläregenskapen som används i :class har ingen modell definierad',\n    'missing_definition' => 'Formuläregenskapen saknar ett fält för \\':field\\'',\n    'action_confirm' => 'Är du säker?',\n    'create' => 'Skapa',\n    'create_and_close' => 'Skapa och stäng',\n    'creating' => 'Skapar...',\n    'creating_name' => 'Skapar :name...',\n    'save' => 'Spara',\n    'save_and_close' => 'Spara och stäng',\n    'saving' => 'Sparar...',\n    'saving_name' => 'Sparar :name...',\n    'delete' => 'Radera',\n    'deleting' => 'Raderar...',\n    'deleting_name' => 'Raderar :name...',\n    'reset_default' => 'Äterställ till utgångsläge',\n    'resetting' => 'Återställer',\n    'resetting_name' => 'Återställer :name',\n    'undefined_tab' => 'Övrigt',\n    'field_off' => 'Av',\n    'field_on' => 'På',\n    'add' => 'Lägg till',\n    'apply' => 'Spara',\n    'cancel' => 'Avbryt',\n    'close' => 'Stäng',\n    'confirm' => 'Bekräfta',\n    'reload' => 'Ladda om',\n    'complete' => 'Slutför',\n    'ok' => 'OK',\n    'or' => 'eller',\n    'confirm_tab_close' => 'Vill du verkligen stänga fliken? Ej sparade ändringar kommer gå förlorade',\n    'behavior_not_ready' => 'Formuläregenskap har inte blivit initierad, kontrollera att du anropat initForm() i din controller',\n    'preview_no_files_message' => 'Filen är inte uppladdad',\n    'preview_no_record_message' => 'Ingen rad är vald.',\n    'select' => 'Välj',\n    'select_all' => 'Välj alla',\n    'select_none' => 'Välj ingen',\n    'insert_row' => 'Lägg till rad',\n    'delete_row' => 'Radera rad',\n    'concurrency_file_changed_title' => 'Filen var ändrad',\n    'concurrency_file_changed_description' => 'Filen du redigerar har ändrats av en annan användare. Du kan antingen ladda om sidan och förlora dina ändringar eller skriva över filen med dina ändringar.',\n  ],\n  'relation' => [\n    'missing_config' => 'Relationsbeteendet har ingen konfiguration för \\': config \\'.',\n    'missing_definition' => 'Relationen saknar en definintion för \\':field\\'',\n    'missing_model' => 'Relationen som används i :class har ingen modell definierad',\n    'invalid_action_single' => 'Den här åtgärden kan inte appliceras på en enskild relation',\n    'invalid_action_multi' => 'Denna åtgärd kan inte appliceras på flera relationer',\n    'help' => 'Klicka på en post för att lägga till',\n    'add' => 'Lägg till',\n    'link_selected' => 'Länka vald',\n    'cancel' => 'Avbryt',\n    'close' => 'Stäng',\n    'create' => 'Skapa',\n    'update' => 'Uppdatera',\n    'preview' => 'Förhandsgranska',\n    'remove_name' => 'Ta bort :name',\n    'delete_name' => 'Radera :name',\n    'link' => 'Länka',\n    'unlink_name' => 'Avlänka :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Ordna om rader',\n    'no_records' => 'Det finns inga rader att sortera.',\n  ],\n  'model' => [\n    'name' => 'Modell',\n    'not_found' => 'Modellen \\':class\\' med ID :id kunde inte hittas',\n    'missing_id' => 'Det finns inget ID anviget för modellen',\n    'missing_relation' => 'Modellen \\':class\\' saknar en definition för \\':relation\\'',\n    'missing_method' => 'Modellen \\':class\\' innehåller inte metoden \\':method\\'.',\n    'invalid_class' => 'Modellen :model i klass :class är inte giltig. Den måste ärva från \\\\Model-klassen',\n    'mass_assignment_failed' => 'Massuppdraget misslyckades för Modell-attributet \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Systemkonfigurationstips',\n    'tips_description' => 'Det finns problem som du behöver åtgärda för att konfigurera systemet ordentligt.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Mina inställningar',\n    'menu_description' => 'Inställningar rörande ditt administrationskonto',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accent color',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'alla',\n  ],\n  'permissions' => [\n    'manage_media' => 'Hantera media',\n  ],\n  'mediafinder' => [\n    'default_prompt' => 'Klicka på %s knappen för att hitta ett mediaföremål',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Ladda upp',\n    'move' => 'Flytta',\n    'delete' => 'Radera',\n    'add_folder' => 'Ny mapp',\n    'search' => 'Sök',\n    'display' => 'Visa',\n    'filter_everything' => 'Allt',\n    'filter_images' => 'Bilder',\n    'filter_video' => 'Videor',\n    'filter_audio' => 'Ljud',\n    'filter_documents' => 'Dokument',\n    'library' => 'Bibliotek',\n    'size' => 'Storlek',\n    'title' => 'Titel',\n    'last_modified' => 'Senast ändrad',\n    'public_url' => 'Publik URL',\n    'click_here' => 'Klicka här',\n    'thumbnail_error' => 'Fel vid generering av thumbnail.',\n    'return_to_parent' => 'Återgå till mappens förälder',\n    'return_to_parent_label' => 'Upp ..',\n    'nothing_selected' => 'Inget är valt.',\n    'multiple_selected' => 'Flera föremål valda.',\n    'uploading_file_num' => 'Laddar upp :number fil(er)...',\n    'uploading_complete' => 'Uppladdning slutförd',\n    'order_by' => 'Ordna efter',\n    'folder' => 'Mapp',\n    'no_files_found' => 'Inga filer kunde hittas baserat på din sökning.',\n    'delete_empty' => 'Vänligen välj föremål att radera.',\n    'delete_confirm' => 'Är du säker att du vill radera de valda föremålen?',\n    'error_renaming_file' => 'Fel vid namnbyte av föremålet.',\n    'new_folder_title' => 'Ny mapp',\n    'folder_name' => 'Mappnamn',\n    'error_creating_folder' => 'Fel vid skapande av mapp',\n    'folder_or_file_exist' => 'En mapp eller fil med det angivna namnet existerar redan.',\n    'move_empty' => 'Vänligen välj föremål att flytta.',\n    'move_popup_title' => 'Flytta filer eller mappar',\n    'move_destination' => 'Destinationsmapp',\n    'please_select_move_dest' => 'Vänligen välj en destinationsmapp.',\n    'move_dest_src_match' => 'Vänligen välj en annan destinationsmapp.',\n    'empty_library' => 'Mediabiblioteket är tomt. Ladda upp filer eller skapa mappar för att börja.',\n    'insert' => 'Infoga',\n    'crop_and_insert' => 'Beskär & infoga',\n    'select_single_image' => 'Vänligen välj en enskild bild.',\n    'selection_not_image' => 'Det valda föremålet är inte en bild.',\n    'restore' => 'Ångra alla ändringar',\n    'resize' => 'Anpassa storlek...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Fast proportion',\n    'selection_mode_fixed_size' => 'Fast storlek',\n    'height' => 'Höjd',\n    'width' => 'Bredd',\n    'selection_mode' => 'Urvalsläge',\n    'resize_image' => 'Anpassa bildstorlek',\n    'image_size' => 'Bildstorlek:',\n    'selected_size' => 'Vald:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/sv.json",
    "content": "{\n  \"Cancel\": \"Annullera\",\n  \"You are viewing as\": \"Du ser som\",\n  \"Preview Role\": \"Förhandsgranska roll\",\n  \"This lets you test the actions this role can perform.\": \"Detta låter dig testa de åtgärder som den här rollen kan utföra.\",\n  \"View As Role\": \"Visa som roll\",\n  \"Return to Role Settings\": \"Återgå till Rollinställningar\",\n  \"Password must have a minimum of length of :min characters\": \"Lösenordet måste ha en minsta längd på :min tecken\",\n  \"Password must contain at least one uppercase character.\": \"Lösenordet måste innehålla minst en versal.\",\n  \"Password must contain at least one lowercase character.\": \"Lösenordet måste innehålla minst ett gement tecken.\",\n  \"Password must contain at least one number.\": \"Lösenordet måste innehålla minst en siffra.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Lösenordet måste innehålla minst ett icke-alfanumeriskt tecken.\",\n  \"Welcome to your Administration Area, :name\": \"Välkommen till ditt administrationsområde, :name\",\n  \"Duplicate\": \"Duplicera\",\n  \"Expand\": \"Bygga ut\",\n  \"Collapse\": \"Kollaps\",\n  \"Move Up\": \"Flytta upp\",\n  \"Move Down\": \"Flytta ner\",\n  \"Remove\": \"Ta bort\",\n  \"Manage Item\": \"Hantera objekt\",\n  \"Clear Filters\": \"Rensa filter\",\n  \"Filter Setup\": \"Filterinställningar\",\n  \"Apply\": \"Tillämpa\",\n  \"Clear\": \"Klar\",\n  \"is equal to\": \"är lika med\",\n  \"is between\": \"är mellan\",\n  \"contains\": \"innehåller\",\n  \"is before\": \"är innan\",\n  \"is after\": \"är efter\",\n  \"is greater than\": \"är större än\",\n  \"is less than\": \"är mindre än\",\n  \"1. Export output format\": \"1. Exportera utdataformat\",\n  \"File Format\": \"Filformat\",\n  \"Delimiter Character\": \"Avgränsningstecken\",\n  \"Enclosure Character\": \"Kapslingskaraktär\",\n  \"Escape Character\": \"Escape karaktär\",\n  \"2. Select columns to export\": \"2. Välj kolumner att exportera\",\n  \"Columns\": \"Kolumner\",\n  \"3. Set export options\": \"3. Ställ in exportalternativ\",\n  \"CSV Custom\": \"CSV anpassad\",\n  \"1. Upload an Import File\": \"1. Ladda upp en importfil\",\n  \"Import File\": \"Importera fil\",\n  \"File Encoding\": \"Filkodning\",\n  \"First row contains column titles\": \"Första raden innehåller kolumntitlar\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Låt detta vara markerat om den första raden i CSV-filen används som kolumnrubriker.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Matcha filkolumnerna med databasfält\",\n  \"File columns\": \"Fil kolumner\",\n  \"Database fields\": \"Databasfält\",\n  \"3. Set Import Options\": \"3. Ställ in importalternativ\",\n  \"Export progress\": \"Exportförlopp\",\n  \"Processing\": \"Bearbetning\",\n  \"Import progress\": \"Importförlopp\",\n  \"Import error\": \"Importfel\",\n  \"Export error\": \"Exportfel\",\n  \"Column preview\": \"Kolumnförhandsgranskning\",\n  \"Column\": \"Kolumn\",\n  \"Disable\": \"Inaktivera\",\n  \"Enable\": \"Gör det möjligt\",\n  \"Delete\": \"Radera\",\n  \"Export\": \"Exportera\",\n  \"Import\": \"Importera\",\n  \"Select Action\": \"Välj Åtgärd\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Skapa ett nytt konto för att logga in på administrationsområdet.\",\n  \"First Name\": \"Förnamn\",\n  \"Last Name\": \"Efternamn\",\n  \"Email Address\": \"E-postadress\",\n  \"Pick a Username\": \"Välj ett användarnamn\",\n  \"Enter New Password\": \"Ange nytt lösenord\",\n  \"Confirm Password\": \"Bekräfta lösenord\",\n  \"Create Account\": \"Skapa konto\",\n  \"Getting Ready\": \"Gör mig i ordning\",\n  \"Just a few more minutes\": \"Bara några minuter till\",\n  \"Migrating Database\": \"Migrera databas\",\n  \"Access the Backend Panel\": \"Öppna Backend Panel\",\n  \"View Backend During Maintenance\": \"Se backend under underhåll\",\n  \"Perform Software Updates\": \"Utför programuppdateringar\",\n  \"In Maintenance\": \"I underhåll\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Webbplatsen är för närvarande i underhållsläge, kom tillbaka senare.\",\n  \"Dashboard\": \"instrumentbräda\",\n  \"Administrators\": \"Administratörer\",\n  \"Manage Admins\": \"Hantera administratörer\",\n  \"Create Admins\": \"Skapa administratörer\",\n  \"Moderate Admins\": \"Moderata administratörer\",\n  \"Manage account suspension and ban admin accounts\": \"Hantera kontoavstängning och blockera administratörskonton\",\n  \"Role Permissions\": \"Hantera roller\",\n  \"Team Groups\": \"Grupper\",\n  \"Manage Other Admins\": \"Hantera andra administratörer\",\n  \"Allow users to reset passwords and update emails.\": \"Tillåter återställning av lösenord och uppdatering av e-post\",\n  \"Delete Admins\": \"Ta bort administratörer\",\n  \"Preferences\": \"Inställningar\",\n  \"Settings\": \"inställningar\",\n  \"Background Color\": \"Bakgrundsfärg\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Tillåt användare att skapa nya roller och redigera eller ta bort roller lägre än deras högsta roll.\",\n  \"Save Changes\": \"Spara ändringar\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Denna logg visar en lista över lyckade inloggningsförsök till administratrationen. Registret behålls i :days dagar.\",\n  \"Access Log\": \"Åtkomstlogg\",\n  \"View a list of successful back-end user sign ins.\": \"Visa en lista över framgångsrika inloggningar av back-end användare.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Dataum och tid\",\n  \"Type\": \"Typ\",\n  \"IP address\": \"IP adress\",\n  \"Username\": \"Användarnamn\",\n  \"Login\": \"Logga in\",\n  \"First name\": \"Förnamn\",\n  \"Last name\": \"Efternamn\",\n  \"Email\": \"E-post\",\n  \"A custom schema is used for this file format.\": \"Ett anpassat schema används för detta filformat.\",\n  \"Select\": \"Välj\",\n  \"Replace\": \"Byta ut\",\n  \"and\": \"och\",\n  \"Go\": \"Gå\",\n  \"Go to page\": \"Gå till sidan\",\n  \"Copy to Clipboard\": \"Kopiera till Urklipp\",\n  \"Reveal Contents\": \"Avslöja innehållet\",\n  \"Selected Site\": \"Vald webbplats\",\n  \"Use Emmet abbreviations\": \"Använd Emmet-förkortningar\",\n  \"A record does not exist for the selected site. Create one?\": \"Det finns ingen post för den valda platsen. Skapa en?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"De uppgifter du angav matchade inte våra uppgifter. Dubbelkolla och försök igen.\",\n  \"Administration Area\": \"Administrationsområde\",\n  \"Password Reset\": \"Återställ lösenord\",\n  \"Please enter a new password.\": \"Välj ett nytt lösenord\",\n  \"Password\": \"Lösenord\",\n  \"Password Restore\": \"Lösenordsåterställ\",\n  \"Please enter your login to restore the password.\": \"Ange ditt användarnamn\",\n  \"A user could not be found with a login value of ':login'\": \"En användare med användarnamnet ':login' kunde inte hittas\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Ett meddelande har skickats till din e-postadress med instruktioner om hur du återställer ditt lösenord\",\n  \"Invalid password reset data supplied. Please try again!\": \"Felaktig data för lösenordsåterställning. Var vänlig försök igen\",\n  \"Unable to reset your password!\": \"Det gick tyvärr inte att nollställa ditt lösenord\",\n  \"Password has been reset. You may now sign in.\": \"Ditt lösenord har blivit återställt. Du kan nu logga in\",\n  \"Restore\": \"Återställ\",\n  \"Reset\": \"Nollställ\",\n  \"Stay logged in\": \"Stanna inloggad\",\n  \"Forgot password?\": \"Glömt ditt lösenord?\",\n  \"Global Editor Settings\": \"Globala redigeringsinställningar\",\n  \"Manage Widgets\": \"Hantera widgets\",\n  \"Add Widget\": \"Lägg till widget\",\n  \"Set the current layout as the default?\": \"Ange den nuvarande layouten som standard?\",\n  \"Make Default\": \"Göra default\",\n  \"Reset layout back to default?\": \"Återställa layouten tillbaka till standard?\",\n  \"Reset Layout\": \"Återställ layout\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"Vänligen välj\",\n  \"Width\": \"Bredd\",\n  \"full width\": \"max bredd\",\n  \"Create Widgets\": \"Skapa widgets\",\n  \"not equal to\": \"inte lika med\",\n  \"Light Mode\": \"Ljusläge\",\n  \"Dark Mode\": \"Mörkt läge\",\n  \"OS Default\": \"OS Standard\",\n  \"Create a Custom Palette\": \"Skapa en anpassad palett\",\n  \"Custom Palette\": \"Anpassad palett\",\n  \"Primary Color\": \"Primär color\",\n  \"Secondary Color\": \"Sekundär color\",\n  \"Selection Color\": \"Urvalsfärg\",\n  \"Nav Text\": \"Nav Text\",\n  \"Nav Background\": \"Nav Bakgrund\",\n  \"Sidebar Text\": \"Sidofältstext\",\n  \"Sidebar Background\": \"Sidofältsbakgrund\",\n  \"Sidebar Active Text\": \"Aktiv text i sidofältet\",\n  \"Sidebar Active Background\": \"Sidofältet aktiv bakgrund\",\n  \"Sidebar Hover Background\": \"Bakgrund för sidofältet\",\n  \"Settings Text\": \"Inställningar Text\",\n  \"Settings Background\": \"Inställningar Bakgrund\",\n  \"Settings Item Background\": \"Inställningar Objekt Bakgrund\",\n  \"Settings Active Color\": \"Inställningar Aktiv färg\",\n  \"Settings Active Background\": \"Inställningar Aktiv bakgrund\",\n  \"Settings Hover Background\": \"Inställningar Hover Bakgrund\",\n  \"This name is shown in the title area of the back-end.\": \"Detta namn visas i titelområdet back-end.\",\n  \"App Name\": \"Applikationsnamn\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Detta namn visas på inloggningsskärmen för back-end.\",\n  \"App Tagline\": \"Applikationstaggning\",\n  \"Brand\": \"Varumärke\",\n  \"Upload a custom logo to use in the back-end.\": \"Ladda upp en egen logotyp för att använda i back-end.\",\n  \"Logo\": \"Logga\",\n  \"Upload a custom favicon to use in the back-end\": \"Ladda upp en anpassad favoritikon att använda i back-end\",\n  \"Favicon\": \"Favoritikon\",\n  \"Navigation Logo\": \"Navigationslogotyp\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Ersätter instrumentpanelslänken med en anpassad logotyp i navigeringen.\",\n  \"Dashboard Icon\": \"Instrumentpanel ikon\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Använd en anpassad bild för instrumentpanelsikonen (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Detta meddelande visas på inloggningsskärmen för back-end.\",\n  \"Welcome Message\": \"Välkomstmeddelande\",\n  \"Login Page\": \"Login sida\",\n  \"Background Type\": \"Bakgrundstyp\",\n  \"Flat Color\": \"Platt färg\",\n  \"Wallpaper\": \"Tapet\",\n  \"Wallpaper Size\": \"Tapetstorlek\",\n  \"Auto\": \"Bil\",\n  \"Cover\": \"Omslag\",\n  \"Background Wallpaper Image\": \"Bakgrundsbild\",\n  \"Image\": \"Bild\",\n  \"Random Autumn Images\": \"Slumpmässiga höstbilder\",\n  \"Custom Image\": \"Anpassad bild\",\n  \"Login Page Image\": \"Bild på inloggningssidan\",\n  \"Colors\": \"Färger\",\n  \"Color Mode\": \"Färg läge\",\n  \"Color Preset\": \"Förinställd färg\",\n  \"Menu Style\": \"Menystil\",\n  \"Navigation\": \"Navigering\",\n  \"Custom Stylesheet\": \"Anpassad formatmall\",\n  \"Styles\": \"Formatmallar\",\n  \"Inline\": \"I kö\",\n  \"Text\": \"Text\",\n  \"Tiles\": \"Kakel\",\n  \"Collapsed\": \"Kollapsade\",\n  \"Icons\": \"Ikoner\",\n  \"Left Side\": \"Vänster sida\",\n  \"Add New Item\": \"Lägg till nytt föremål\",\n  \"Link Color\": \"Länkfärg\",\n  \"Current Password\": \"Nuvarande lösenord\",\n  \"New Password\": \"nytt lösenord\",\n  \"Current password does not match. Please try again!\": \"Aktuellt lösenord matchar inte. Var god försök igen!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Ditt lösenord har upphört att gälla, skapa ett nytt av säkerhetsskäl.\",\n  \"Region\": \"Område\",\n  \"Locale\": \"Språk\",\n  \"Select your desired locale for language use.\": \"Välj önskat språk.\",\n  \"Timezone\": \"Tidszon\",\n  \"Adjust displayed dates to this timezone.\": \"Justera visade datum till denna tidszon.\",\n  \"Code Editor\": \"Kodredigerare\",\n  \"Color Scheme\": \"Färgschema\",\n  \"Word Wrap\": \"Radbryting\",\n  \"Off\": \"Av\",\n  \"40 Characters\": \"40 tecken\",\n  \"80 Characters\": \"80 tecken\",\n  \"Fluid\": \"Vätska\",\n  \"Font Size\": \"Teckenstorlek\",\n  \"Tab Size\": \"Tab längd\",\n  \"Code Folding\": \"Dölj kod\",\n  \"Mark begin\": \"Mark börjar\",\n  \"Mark begin and end\": \"Markera början och slut\",\n  \"Autocompletion\": \"Autoslutförande\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Grundläggande autoslutförande (Ctrl + Mellanslag)\",\n  \"Live Autocompletion\": \"Live autokomplettering\",\n  \"Show gutter\": \"Visa ränna\",\n  \"Highlight active line\": \"Markera aktiv rad\",\n  \"Automatically close tags\": \"Stäng taggar och specialtecken automatiskt\",\n  \"Indent using tabs\": \"Indentera med tab\",\n  \"Show indent guides\": \"Visa indragsguider\",\n  \"Show invisible characters\": \"Visa dolda tecken\",\n  \"Show print margin\": \"Visa utskriftsmarginal\",\n  \"Custom styles to include in the HTML editor.\": \"Anpassade stilar att inkludera i HTML-redigeraren.\",\n  \"Markup Styles\": \"Markup Styles\",\n  \"Paragraph Formats\": \"Styckeformat\",\n  \"Markup Classes\": \"Markup-klasser\",\n  \"Label\": \"Märka\",\n  \"Paragraph\": \"Paragraf\",\n  \"Class Name\": \"Klassnamn\",\n  \"Link\": \"Länk\",\n  \"Table\": \"Tabell\",\n  \"Table Cell\": \"Tabellcell\",\n  \"Allowed Tags\": \"Tillåtna taggar\",\n  \"The list of allowed tags.\": \"Listan över tillåtna taggar.\",\n  \"Markup Tags\": \"Markup-taggar\",\n  \"Allowed Empty Tags\": \"Tillåtet tomma taggar\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Listan över taggar som inte tas bort när de inte har något innehåll inuti.\",\n  \"Do Not Wrap Tags\": \"Linda inte taggar\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Listan över taggar som inte bör lindas inuti blocktaggar.\",\n  \"Remove Tags\": \"Ta bort taggar\",\n  \"The list of tags that are removed together with their content.\": \"Listan över taggar som tas bort tillsammans med deras innehåll.\",\n  \"Line Breaker Tags\": \"Line Breaker Tags\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Listan över taggar som används för att placera ett radbrytarelement mellan.\",\n  \"Toolbar Buttons\": \"Verktygsfältsknappar\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Verktygsfältsknapparna som ska visas i Rich Editor som standard.\",\n  \"Insert a preset toolbar button configuration\": \"Infoga en förinställd knappkonfiguration för verktygsfältet\",\n  \"Allowed Attributes\": \"Tillåtna attribut\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Listan över tillåtna HTML-attribut, utöver de normala tillstånden.\",\n  \"Enable code snippets (Tab)\": \"Aktivera kodavsnitt (flik)\",\n  \"Title\": \"Titel\",\n  \"Description\": \"Beskriving\",\n  \"Attachment\": \"Bilaga\",\n  \"Attachment URL\": \"Bilage-URL\",\n  \"Add a title and description for this attachment.\": \"Lägg till en och beskriving för denna bilagan.\",\n  \"Are you sure?\": \"Är du säker?\",\n  \"Upload Error\": \"Fel vid uppladdning\",\n  \"Remove File\": \"Radera fil\",\n  \"Create :name\": \"Skapa :name\",\n  \"Update :name\": \"Uppdatera :name\",\n  \"Add :name\": \"Lägg till :name\",\n  \"Link :name\": \"Länka :name\",\n  \"Unlink\": \"Avlänka\",\n  \"Preview :name\": \"Förhandsgranska :name\",\n  \"Link a New :name\": \"Länka till ny :name\",\n  \"Add a New :name\": \"Lägg till ny :name\",\n  \"Related :name Data\": \"Relaterad :name data\",\n  \":name Created\": \":name har skapats\",\n  \":name Updated\": \":name har uppdaterats\",\n  \":name Deleted\": \":name kunde inte raderas\",\n  \"Form record with an ID of :id could not be found.\": \"Rad-ID :id för formuläret kunde inte hittas\",\n  \"Preview the Website\": \"Förhandsgranska websidan\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Hantera administratörer, grupper och behörigheter.\",\n  \"Branding & Appearance\": \"Anpassa back-end\",\n  \"Customize the administration area such as name, colors and logo.\": \"Anpassa administrations området såsom namn, färger och logotyp.\",\n  \"Editor Settings\": \"Kodnings preferenser\",\n  \"Change the global editor preferences.\": \"Anpassa dina preferenser för kodredigering, så som typsnitt och färgschema.\",\n  \"My Account\": \"Mitt konto\",\n  \"Update your account details such as name, email address and password.\": \"Uppdatera dina kontouppgifter såsom namn, e-postadress och lösenord.\",\n  \"Backend Preferences\": \"Back-end preferenser\",\n  \"Manage your account preferences such as desired language.\": \"Hantera dina kontoinställningar såsom önskat språk.\",\n  \"security login\": \"säkerhets inloggning\",\n  \"List Setup\": \"List inställningar\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Använd kryssrutorna för att välja kolumner du vill se i listan. Du kan ändra positionen på kolumnerna genom att dra dem upp eller ner.\",\n  \"Records Per Page\": \"Poster per sida\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Välj antalet poster som ska visas per sida. Observera att högt antal poster per sida kan påverka prestandan.\",\n  \"Add Selected\": \"Lägg till vald\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP-tillägget: Namnet är inte installerat. Vänligen installera och aktivera det biblioteket.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Katalogen :name eller dess underkataloger är inte skrivbara av PHP. Väligen ändra dess motsvarande behörigheter för web-servern i denna katalogen.\"\n}"
  },
  {
    "path": "modules/backend/lang/th/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'ประเภทของฟิลด์ไม่ถูกต้อง :type.',\n  ],\n  'widget' => [\n    'not_registered' => 'วิดเจทชื่อ \\':name\\' ยังไม่ได้ถูกลงทะเบียน',\n    'not_bound' => 'วิดเจทชื่อ \\':name\\' ยังไม่ได้ถูกผูกกับคอนโทรลเลอร์',\n  ],\n  'page' => [\n    'untitled' => 'ไม่มีชื่อเรื่อง',\n    404 => [\n      'label' => 'ไม่พบหน้านี้',\n      'help' => 'เราพยายามค้นหาแล้ว แต่ไม่พบ URL ที่ร้องขอ บางทีคุณกำลังหาอย่างอื่นอยู่หรือเปล่า?',\n      'back_link' => 'กลับไปยังหน้าที่แล้ว',\n    ],\n    'access_denied' => [\n      'label' => 'ไม่อนุญาตให้เข้าถึง',\n      'help' => 'คุณไม่มีสิทธิ์ที่จำเป็นในการดูหน้านี้',\n      'cms_link' => 'กลับสู่หน้าเว็บหลังบ้าน',\n    ],\n    'no_database' => [\n      'label' => 'ไม่พบฐานข้อมูล',\n      'help' => 'จำเป็นต้องมีฐานข้อมูลในการเข้าถึงหน้าเว็บหลังบ้าน ตรวจสอบว่าฐานข้อมูลได้ถูกตั้งค่าและโอนย้ายก่อนลองอีกครั้ง',\n      'cms_link' => 'กลับสู่หน้าเว็บหลัก',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'ไม่พบส่วนย่อย \\':name\\'',\n    'invalid_name' => 'ส่วนย่อยชื่อ: :name ไม่ถูกต้อง',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'ชื่อผู้จัดการ AJAX: :name ไม่ถูกต้อง',\n    'not_found' => 'หาผู้จัดการ AJAX \\':name\\' ไม่พบ',\n  ],\n  'account' => [\n    'impersonate' => 'ปลอมตัวเป็นผู้ใช้',\n    'impersonate_confirm' => 'คุณแน่ใจว่าต้องการปลอมตัวเป็นผู้ใช้คนนี้? คุณสามารถย้อนกลับโดยการล็อกเอาท์',\n    'impersonate_success' => 'คุณกำลังปลอมตัวเป็นผู้ใช้คนนี้',\n    'impersonate_working' => 'กำลังปลอมตัว...',\n    'impersonating' => 'กำลังปลอมตัว :full_name',\n    'stop_impersonating' => 'หยุดการปลอมตัว',\n    'signed_in_as' => 'ลงชื่อเข้าโดยใช้ชื่อ :full_name',\n    'sign_out' => 'ลงชื่อออก',\n    'login_placeholder' => 'ชื่อล็อกอิน',\n    'password_placeholder' => 'รหัสผ่าน',\n    'enter_email' => 'ใส่ข้อมูลอีเมลของคุณ',\n    'email_placeholder' => 'อีเมล',\n    'apply' => 'นำไปใช้',\n    'cancel' => 'ยกเลิก',\n    'delete' => 'ลบ',\n    'ok' => 'ตกลง',\n  ],\n  'dashboard' => [\n    'menu_label' => 'แผงควบคุม',\n    'widget_inspector_title' => 'การปรับแต่งค่าวิดเจ็ท',\n    'widget_inspector_description' => 'ปรับแต่งค่าวิดเจ็ทแบบรายงาน',\n    'widget_columns_label' => 'กว้าง :columns',\n    'widget_columns_description' => 'ความกว้างของวิดเจ็ท, ตัวเลขระหว่าง 1 ถึง 10',\n    'widget_columns_error' => 'กรุณาใส่ค่าความกว้างของวิดเจ็ทเป็นตัวเลขระหว่าง 1 ถึง 10',\n    'columns' => '{1} คอลัมน์|[2,Inf] คอลัมน์',\n    'widget_new_row_label' => 'บังคับขึ้นแถวใหม่',\n    'widget_new_row_description' => 'วางวิดเจ็ทไว้ในแถวใหม่',\n    'widget_title_label' => 'หัวเรื่องวิดเจ็ท',\n    'widget_title_error' => 'ต้องมีหัวเรื่องวิดเจ็ท',\n    'reset_layout_success' => 'ตั้งค่าการวางโครงร่างเป็นค่าเริ่มต้นแล้ว',\n    'make_default_success' => 'ตั้งการวางโครงร่างปัจจุบันเป็นค่าเริ่มต้นแล้ว',\n    'collapse_all' => 'ย่อทั้งหมด',\n    'expand_all' => 'ขยายทั้งหมด',\n    'status' => [\n      'widget_title_default' => 'สถานะระบบ',\n      'updates_pending' => 'รอการอัพเดทซอฟต์แวร์',\n      'updates_nil' => 'ซอฟต์แวร์เป็นปัจจุบันแล้ว',\n      'updates_link' => 'อัพเดท',\n      'warnings_pending' => 'มีปัญหาบางอย่างต้องตรวจสอบ',\n      'warnings_nil' => 'ไม่มีคำเตือนให้แสดง',\n      'warnings_link' => 'ดู',\n      'core_build' => 'ระบบ',\n      'event_log' => 'บันทึกเหตุการณ์',\n      'request_log' => 'บันทึกการขอเข้าใช้งาน',\n      'app_birthday' => 'ออนไลน์ตั้งแต่',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'ยินดีต้อนรับ',\n      'welcome_back_name' => 'ยินดีต้อนรับกลับมาสู่ :app, :name.',\n      'welcome_to_name' => 'ยินดีต้อนรับสู่ :app, :name.',\n      'first_sign_in' => 'นี่เป็นครั้งแรกที่คุณได้ลงชื่อเข้า',\n      'last_sign_in' => 'คุณได้ลงชื่อเข้าครั้งสุดท้ายเมื่อ',\n      'view_access_logs' => 'ดูบันทึกการเข้าถึง',\n      'nice_message' => 'ขอให้มีวันที่ยอดเยี่ยม!',\n    ],\n  ],\n  'user' => [\n    'name' => 'ผู้ดูแลระบบ',\n    'list_title' => 'จัดการผู้ดูแลระบบ',\n    'new' => 'สร้างผู้ดูแลระบบใหม่',\n    'first_name' => 'ชื่อ',\n    'last_name' => 'นามสกุล',\n    'full_name' => 'ชื่อเต็ม',\n    'email' => 'อีเมล',\n    'role_field' => 'บทบาท',\n    'role_comment' => 'บทบาทกำหนดสิทธิ์การใช้งานของผู้ใช้ ซึ่งสามารถกำหนดทับเป็นรายผู้ใช้ได้ ที่แท็บสิทธิ์การใช้งาน',\n    'groups' => 'กลุ่ม',\n    'groups_comment' => 'กำหนดว่ามีกลุ่มไหนบ้างที่ผู้ใช้เป็นสมาชิก',\n    'avatar' => 'อวตาร',\n    'password' => 'รหัสผ่าน',\n    'password_confirmation' => 'ยืนยันรหัสผ่าน',\n    'permissions' => 'สิทธิ์การใช้งาน',\n    'account' => 'บัญชีผู้ใช้',\n    'superuser' => 'Super User',\n    'superuser_comment' => 'อนุญาตให้บัญชีผู้ใช้นี้สามารถเข้าถึงได้ทุกระบบ Super user สามารถเพิ่มหรือจัดการผู้ใช้คนอื่นได้',\n    'send_invite' => 'ส่งคำเชิญทางอีเมล',\n    'send_invite_comment' => 'ส่งข้อความยินดีต้อนรับ พร้อมข้อมูลล็อกอินและรหัสผ่าน',\n    'delete_confirm' => 'ลบผู้ดูแลระบบนี้?',\n    'return' => 'กลับสู่รายชื่อผู้ดูแลระบบ',\n    'allow' => 'อนุญาต',\n    'inherit' => 'สืบต่อ',\n    'deny' => 'ปฏิเสธ',\n    'activated' => 'เริ่มการทำงานแล้ว',\n    'last_login' => 'ล็อกอินครั้งสุดท้าย',\n    'created_at' => 'สร้างเมื่อ',\n    'updated_at' => 'อัพเดทเมื่อ',\n    'deleted_at' => 'ลบเมื่อ',\n    'show_deleted' => 'แสดงคนที่ถูกลบ',\n    'group' => [\n      'name' => 'กลุ่ม',\n      'name_field' => 'ชื่อ',\n      'name_comment' => 'เป็นชื่อที่ถูกแสดงผลในรายการกลุ่มในหน้าผู้ดูแลระบบ',\n      'description_field' => 'รายละเอียด',\n      'is_new_user_default_field_label' => 'เข้ากลุ่มอัตโนมัติ',\n      'is_new_user_default_field_comment' => 'เพิ่มผู้ดูแลระบบใหม่เข้ากลุ่มนี้โดยอัตโนมัติ',\n      'code_field' => 'รหัส',\n      'code_comment' => 'ใส่รหัสที่ไม่ซ้ำ ถ้าคุณต้องการเข้าถึงกลุ่มผ่านทาง API',\n      'list_title' => 'จัดการกลุ่ม',\n      'new' => 'กลุ่มใหม่',\n      'delete_confirm' => 'ลบกลุ่มนี้?',\n      'return' => 'กลับสู่รายชื่อกลุ่ม',\n      'users_count' => 'จำนวนผู้ใช้',\n    ],\n    'role' => [\n      'name' => 'บทบาท',\n      'name_field' => 'ชื่อ',\n      'name_comment' => 'เป็นชื่อที่ถูกแสดงผลในรายการบทบาทในหน้าผู้ดูแลระบบ',\n      'description_field' => 'รายละเอียด',\n      'code_field' => 'รหัส',\n      'code_comment' => 'ใส่รหัสที่ไม่ซ้ำ ถ้าคุณต้องการเข้าถึงบทบาทผ่านทาง API',\n      'list_title' => 'จัดการบทบาท',\n      'new' => 'บทบาทใหม่',\n      'delete_confirm' => 'ลบบทบาทนี้?',\n      'return' => 'กลับสู่รายชื่อบทบาท',\n      'users_count' => 'จำนวนผู้ใช้',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'ไม่พบผู้ใช้ที่ได้รับการยืนยันแล้วสำหรับอ่านหรือบันทึกค่าที่เลือก',\n    ],\n    'trashed_hint_title' => 'บัญชีผู้ใช้นี้ถูกลบไปแล้ว',\n    'trashed_hint_desc' => 'บัญชีผู้ใช้นี้ถูกลบไปแล้ว และจะไม่สามารถลงชื่อเข้าระบบได้ หากต้องการกู้คืน, คลิกไอคอน restore user ที่มุมล่างขวา',\n  ],\n  'list' => [\n    'default_title' => 'รายการ',\n    'search_prompt' => 'ค้นหา...',\n    'no_records' => 'ไม่มีข้อมูลในหน้านี้',\n    'missing_column' => 'ไม่มีการกำหนดค่าคอลัมน์ :columns.',\n    'pagination' => 'แสดงข้อมูล: :from-:to จาก :total',\n    'first_page' => 'หน้าแรก',\n    'last_page' => 'หน้าสุดท้าย',\n    'prev_page' => 'หน้าก่อน',\n    'next_page' => 'หน้าถัดไป',\n    'refresh' => 'รีเฟรช',\n    'updating' => 'กำลังอัพเดท...',\n    'loading' => 'กำลังโหลด...',\n    'check' => 'ตรวจสอบ',\n    'delete_selected' => 'ลบรายการที่เลือกไว้',\n    'delete_selected_empty' => 'ไม่มีรายการที่เลือกไว้',\n    'delete_selected_confirm' => 'ต้องการลบรายการที่เลือกไว้?',\n    'delete_selected_success' => 'ลบรายการที่เลือกไว้แล้ว',\n    'column_switch_true' => 'ใช่',\n    'column_switch_false' => 'ไม่',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'คลิก %s หรือลากไฟล์มาวางที่นี่เพื่ออัพโหลด',\n  ],\n  'form' => [\n    'create_title' => 'สร้าง :name',\n    'update_title' => 'แก้ไข :name',\n    'preview_title' => 'ดูตัวอย่าง :name',\n    'restore_success' => 'กู้คืน :name แล้ว',\n    'reset_success' => 'ตั้งค่าเริ่มต้นสำเร็จ',\n    'action_confirm' => 'คุณแน่ใจหรือไม่?',\n    'create' => 'สร้าง',\n    'create_and_close' => 'สร้าง และ ปิด',\n    'creating' => 'กำลังสร้าง...',\n    'creating_name' => 'กำลังสร้าง :name...',\n    'save' => 'บันทึก',\n    'save_and_close' => 'บันทึก และ ปิด',\n    'saving' => 'กำลังบันทึก...',\n    'saving_name' => 'กำลังบันทึก :name...',\n    'delete' => 'ลบ',\n    'deleting' => 'กำลังลบ...',\n    'confirm_delete' => 'ลบข้อมูล?',\n    'confirm_delete_multiple' => 'ลบข้อมูลที่เลือกไว้?',\n    'deleting_name' => 'กำลังลบ :name...',\n    'restore' => 'กู้คืน',\n    'restoring' => 'กำลังกู้คืน',\n    'confirm_restore' => 'คุณแน่ใจว่าต้องการกู้คืนข้อมูลนี้?',\n    'reset_default' => 'ตั้งค่าเริ่มต้น',\n    'resetting' => 'กำลังตั้งค่าเริ่มต้น',\n    'resetting_name' => 'กำลังตั้งค่าเริ่มต้น :name',\n    'undefined_tab' => 'อื่นๆ',\n    'field_off' => 'ปิด',\n    'field_on' => 'เปิด',\n    'add' => 'เพิ่ม',\n    'apply' => 'นำไปใช้',\n    'cancel' => 'ยกเลิก',\n    'close' => 'ปิด',\n    'confirm' => 'ยืนยัน',\n    'reload' => 'Reload',\n    'complete' => 'เสร็จสมบูรณ์',\n    'ok' => 'ตกลง',\n    'or' => 'หรือ',\n    'confirm_tab_close' => 'ปิดแท็บนี้? การเปลี่ยนแปลงที่ยังไม่ได้บันทึกจะสูญหาย',\n    'preview_no_files_message' => 'ไม่มีไฟล์ถูกอัพโหลด',\n    'preview_no_media_message' => 'ไม่มีสื่อบันทึกที่ถูกเลือก',\n    'select' => 'เลือก',\n    'select_all' => 'เลือกทั้งหมด',\n    'select_none' => 'ไม่เลือกเลย',\n    'insert_row' => 'เพิ่มบรรทัด',\n    'insert_row_below' => 'เพิ่มบรรทัดด้านล่าง',\n    'delete_row' => 'ลบบรรทัด',\n    'concurrency_file_changed_title' => 'ไฟล์ได้ถูกแก้ไข',\n    'concurrency_file_changed_description' => 'ไฟล์ที่คุณกำลังแก้ไขได้ถูกเปลี่ยนแปลงโดยผู้ใช้ท่านอื่น คุณสามารถโหลดไฟล์ใหม่แต่สิ่งที่แก้ไขไว้จะหายไป หรือบันทึกการแก้ไขทับ',\n    'return_to_list' => 'กลับสู่หน้ารายการ',\n  ],\n  'recordfinder' => [\n    'cancel' => 'ยกเลิก',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'add' => 'เพิ่ม',\n    'link_selected' => 'ลิงก์รายการที่เลือก',\n    'cancel' => 'ยกเลิก',\n    'close' => 'ปิด',\n    'create' => 'สร้าง',\n    'update' => 'อัพเดท',\n    'preview' => 'ดูตัวอย่าง',\n    'remove_name' => 'เอาออก :name',\n    'delete_name' => 'ลบ :name',\n    'link' => 'ลิงก์',\n    'unlink_name' => 'ยกเลิกลิงก์ :name',\n  ],\n  'warnings' => [\n    'tips' => 'เคล็ดลับการตั้งค่าระบบ',\n    'tips_description' => 'ประเด็นต่างๆที่ท่านต้องให้ความสนใจเพื่อตั้งค่าระบบได้อย่างเหมาะสม',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'การตั้งค่าของฉัน',\n    'menu_description' => 'การตั้งค่าที่เกี่ยวกับบัญชีผู้ดูแลระบบของท่าน',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'สีเน้น',\n    'menu_mode_inline_no_icons' => 'อยู่ในบรรทัดเดียว (ไม่มีไอคอน)',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'ทั้งหมด',\n    'date_all' => 'ช่วงเวลาทั้งหมด',\n    'number_all' => 'เลขทั้งหมด',\n  ],\n  'import_export' => [],\n  'permissions' => [\n    'manage_media' => 'อัพโหลดและจัดการเนื้อหาสื่อบันทึก - รูปภาพ, วิดีโอ, เสียง, เอกสาร',\n  ],\n  'mediafinder' => [\n    'label' => 'ตัวค้นหาคลังข้อมูล',\n    'default_prompt' => 'คลิกปุ่ม %s เพื่อค้นหา',\n    'no_image' => 'หารูปภาพไม่พบ',\n  ],\n  'media' => [\n    'menu_label' => 'สื่อบันทึก',\n    'upload' => 'อัพโหลด',\n    'move' => 'ย้าย',\n    'delete' => 'ลบ',\n    'add_folder' => 'เพิ่มโฟลเดอร์',\n    'search' => 'ค้นหา',\n    'display' => 'แสดงผล',\n    'filter_everything' => 'ทุกอย่าง',\n    'filter_images' => 'รูปภาพ',\n    'filter_video' => 'วิดีโอ',\n    'filter_audio' => 'เสียง',\n    'filter_documents' => 'เอกสาร',\n    'library' => 'คลัง',\n    'size' => 'ขนาด',\n    'title' => 'หัวเรื่อง',\n    'last_modified' => 'แก้ไขครั้งสุดท้าย',\n    'public_url' => 'URL',\n    'click_here' => 'คลิกที่นี่',\n    'thumbnail_error' => 'การสร้างรูปย่อผิดพลาด',\n    'return_to_parent' => 'กลับสู่โฟลเดอร์บน',\n    'return_to_parent_label' => 'ไปข้างบน ..',\n    'nothing_selected' => 'ไม่มีรายการที่ถูกเลือก',\n    'multiple_selected' => 'มีหลายรายการถูกเลือก',\n    'uploading_file_num' => 'กำลังอัพโหลด :number ไฟล์...',\n    'uploading_complete' => 'อัพโหลดสำเร็จ',\n    'uploading_error' => 'อัพโหลดไม่สำเร็จ',\n    'type_blocked' => 'ประเภทไฟล์นี้ถูกบล๊อกเพื่อความปลอดภัย',\n    'order_by' => 'เรียงลำดับโดย',\n    'direction' => 'ทิศทาง',\n    'direction_asc' => 'จากน้อยไปมาก',\n    'direction_desc' => 'จากมากไปน้อย',\n    'folder' => 'โฟลเดอร์',\n    'no_files_found' => 'ไม่พบไฟล์',\n    'delete_empty' => 'กรุณาเลือกไฟล์หรือโฟลเดอร์ที่ต้องการลบ',\n    'delete_confirm' => 'ลบไฟล์หรือโฟลเดอร์ที่ถูกเลือก?',\n    'error_renaming_file' => 'มีปัญหาการเปลี่ยนชื่อ',\n    'new_folder_title' => 'โฟลเดอร์ใหม่',\n    'folder_name' => 'ชื่อโฟลเดอร์',\n    'error_creating_folder' => 'มีข้อผิดพลาดในการสร้างโฟลเดอร์',\n    'folder_or_file_exist' => 'ไฟล์หรือโฟลเดอร์ตามชื่อนี้มีอยู่แล้ว',\n    'move_empty' => 'กรุณาเลือกไฟล์หรือโฟลเดอร์ที่ต้องการย้าย',\n    'move_popup_title' => 'ย้ายไฟล์หรือโฟลเดอร์',\n    'move_destination' => 'โฟลเดอร์ปลายทาง',\n    'please_select_move_dest' => 'กรุณาเลือกโฟลเดอร์ปลายทาง',\n    'move_dest_src_match' => 'กรุณาเลือกโฟลเดอร์ปลายทางอื่น',\n    'empty_library' => 'มันดูว่างๆไปหน่อยนะ เริ่มด้วยการอัพโหลดไฟล์ หรือสร้างโฟลเดอร์เลย',\n    'insert' => 'แทรก',\n    'crop_and_insert' => 'หั่น & แทรก',\n    'select_single_image' => 'กรุณาเลือกไฟล์รูปภาพไฟล์เดียว',\n    'selection_not_image' => 'รายการที่ถูกเลือกไม่ใช่รูปภาพ',\n    'restore' => 'ยกเลิกการเปลี่ยนแปลง',\n    'resize' => 'เปลี่ยนขนาด...',\n    'selection_mode_normal' => 'ปกติ',\n    'selection_mode_fixed_ratio' => 'อัตราส่วนคงที่',\n    'selection_mode_fixed_size' => 'ขนาดคงที่',\n    'height' => 'ความสูง',\n    'width' => 'ความกว้าง',\n    'selection_mode' => 'โหมดการเลือก',\n    'resize_image' => 'เปลี่ยนขนาดรูปภาพ',\n    'image_size' => 'ขนาดรูปภาพ:',\n    'selected_size' => 'พื้นที่เลือก:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/th.json",
    "content": "{\n  \"Cancel\": \"ยกเลิก\",\n  \"You are viewing as\": \"คุณกำลังดูเป็น\",\n  \"Preview Role\": \"แสดงตัวอย่างบทบาท\",\n  \"This lets you test the actions this role can perform.\": \"ซึ่งช่วยให้คุณทดสอบการกระทำที่บทบาทนี้สามารถดำเนินการได้\",\n  \"View As Role\": \"ดูตามบทบาท\",\n  \"Return to Role Settings\": \"กลับไปที่การตั้งค่าบทบาท\",\n  \"Password must have a minimum of length of :min characters\": \"รหัสผ่านต้องมีความยาวอย่างน้อย :min ตัวอักษร\",\n  \"Password must contain at least one uppercase character.\": \"รหัสผ่านต้องมีตัวพิมพ์ใหญ่อย่างน้อยหนึ่งตัว\",\n  \"Password must contain at least one lowercase character.\": \"รหัสผ่านต้องมีอักขระตัวพิมพ์เล็กอย่างน้อยหนึ่งตัว\",\n  \"Password must contain at least one number.\": \"รหัสผ่านต้องมีตัวเลขอย่างน้อยหนึ่งตัว\",\n  \"Password must contain at least one nonalphanumeric character.\": \"รหัสผ่านต้องมีอักขระที่ไม่ใช่ตัวเลขและตัวอักษรอย่างน้อยหนึ่งตัว\",\n  \"Welcome to your Administration Area, :name\": \"ยินดีต้อนรับสู่เขตบริหารของคุณ :name\",\n  \"Duplicate\": \"ทำซ้ำ\",\n  \"Expand\": \"ขยาย\",\n  \"Collapse\": \"ทรุด\",\n  \"Move Up\": \"ขยับขึ้น\",\n  \"Move Down\": \"ย้ายลง\",\n  \"Remove\": \"เอาออก\",\n  \"Manage Item\": \"จัดการรายการ\",\n  \"Clear Filters\": \"ล้างตัวกรอง\",\n  \"Filter Setup\": \"การตั้งค่าตัวกรอง\",\n  \"Apply\": \"นำมาใช้\",\n  \"Clear\": \"ชัดเจน\",\n  \"is equal to\": \"เท่ากับ\",\n  \"is between\": \"อยู่ระหว่าง\",\n  \"contains\": \"ประกอบด้วย\",\n  \"is before\": \"มาก่อน\",\n  \"is after\": \"คือหลังจาก\",\n  \"is greater than\": \"มีค่ามากกว่า\",\n  \"is less than\": \"น้อยกว่า\",\n  \"1. Export output format\": \"1. ส่งออกรูปแบบเอาต์พุต\",\n  \"File Format\": \"รูปแบบไฟล์\",\n  \"Delimiter Character\": \"ตัวคั่นอักขระ\",\n  \"Enclosure Character\": \"อักขระที่แนบมา\",\n  \"Escape Character\": \"ตัวละครหนี\",\n  \"2. Select columns to export\": \"2. เลือกคอลัมน์ที่จะส่งออก\",\n  \"Columns\": \"คอลัมน์\",\n  \"3. Set export options\": \"3. ตั้งค่าตัวเลือกการส่งออก\",\n  \"CSV Custom\": \"CSV กำหนดเอง\",\n  \"1. Upload an Import File\": \"1. อัพโหลดไฟล์ CSV\",\n  \"Import File\": \"นำเข้าไฟล์\",\n  \"File Encoding\": \"การเข้ารหัสไฟล์\",\n  \"First row contains column titles\": \"แถวแรกมีชื่อคอลัมน์\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"ปล่อยช่องนี้ไว้หากใช้แถวแรกใน CSV เป็นชื่อคอลัมน์\",\n  \"2. Match the File Columns to Database Fields\": \"2. จับคู่คอลัมน์ไฟล์กับช่องฐานข้อมูล\",\n  \"File columns\": \"คอลัมน์ไฟล์\",\n  \"Database fields\": \"ช่องฐานข้อมูล\",\n  \"3. Set Import Options\": \"3. ตั้งค่าตัวเลือกการนำเข้า\",\n  \"Export progress\": \"ความคืบหน้าการส่งออก\",\n  \"Processing\": \"กำลังประมวลผล\",\n  \"Import progress\": \"นำเข้าความคืบหน้า\",\n  \"Import error\": \"นำเข้าผิดพลาด\",\n  \"Export error\": \"ส่งออกผิดพลาด\",\n  \"Column preview\": \"ตัวอย่างคอลัมน์\",\n  \"Column\": \"คอลัมน์\",\n  \"Disable\": \"ปิดการใช้งาน\",\n  \"Enable\": \"เปิดใช้งาน\",\n  \"Delete\": \"ลบ\",\n  \"Export\": \"ส่งออก\",\n  \"Import\": \"นำเข้า\",\n  \"Select Action\": \"เลือกการดำเนินการ\",\n  \"Please create a new account for logging in to the Administration Area.\": \"โปรดสร้างบัญชีใหม่เพื่อเข้าสู่ระบบในเขตบริหาร\",\n  \"First Name\": \"ชื่อจริง\",\n  \"Last Name\": \"นามสกุล\",\n  \"Email Address\": \"ที่อยู่อีเมล\",\n  \"Pick a Username\": \"เลือกชื่อผู้ใช้\",\n  \"Enter New Password\": \"ใส่รหัสผ่านใหม่\",\n  \"Confirm Password\": \"ยืนยันรหัสผ่าน\",\n  \"Create Account\": \"สร้างบัญชี\",\n  \"Getting Ready\": \"เตรียมพร้อม\",\n  \"Just a few more minutes\": \"อีกไม่กี่นาที\",\n  \"Migrating Database\": \"การย้ายฐานข้อมูล\",\n  \"Access the Backend Panel\": \"เข้าถึงแผงแบ็กเอนด์\",\n  \"View Backend During Maintenance\": \"ดูแบ็กเอนด์ระหว่างการบำรุงรักษา\",\n  \"Perform Software Updates\": \"ดำเนินการอัปเดตซอฟต์แวร์\",\n  \"In Maintenance\": \"ในการบำรุงรักษา\",\n  \"The site is currently in maintenance mode, please check back later.\": \"ไซต์อยู่ในโหมดบำรุงรักษา โปรดกลับมาตรวจสอบในภายหลัง\",\n  \"Dashboard\": \"แผงควบคุม\",\n  \"Administrators\": \"ผู้ดูแลระบบ\",\n  \"Manage Admins\": \"จัดการผู้ดูแลระบบ\",\n  \"Create Admins\": \"สร้างผู้ดูแลระบบ\",\n  \"Moderate Admins\": \"ผู้ดูแลระบบระดับปานกลาง\",\n  \"Manage account suspension and ban admin accounts\": \"จัดการระงับบัญชีและแบนบัญชีผู้ดูแลระบบ\",\n  \"Role Permissions\": \"จัดการบทบาท\",\n  \"Team Groups\": \"จัดการกลุ่ม\",\n  \"Manage Other Admins\": \"จัดการผู้ดูแลระบบคนอื่น\",\n  \"Allow users to reset passwords and update emails.\": \"อนุญาตให้รีเซ็ตรหัสผ่านและอัปเดตอีเมล\",\n  \"Delete Admins\": \"ลบผู้ดูแลระบบ\",\n  \"Preferences\": \"การตั้งค่า\",\n  \"Settings\": \"การตั้งค่า\",\n  \"Background Color\": \"สีพื้นหลัง\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"อนุญาตให้ผู้ใช้สร้างบทบาทใหม่และแก้ไขหรือลบบทบาทที่ต่ำกว่าบทบาทสูงสุดของพวกเขา\",\n  \"Save Changes\": \"บันทึกการเปลี่ยนแปลง\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"บันทึกนี้แสดงรายการการล็อกอินที่สำเร็จโดยผู้ดูแลระบบ บันทึกจะถูกเก็บไว้เป็นเวลา :days วัน\",\n  \"Access Log\": \"บันทึกการเข้าถึง\",\n  \"View a list of successful back-end user sign ins.\": \"แสดงรายการของการลงชื่อที่สำเร็จของผู้ใช้หลังบ้าน\",\n  \"ID\": \"ไอดี\",\n  \"Date & Time\": \"วันเวลา\",\n  \"Type\": \"ประเภท\",\n  \"IP address\": \"ไอพีแอดเดรส\",\n  \"Username\": \"ชื่อผู้ใช้\",\n  \"Login\": \"ล็อกอิน\",\n  \"First name\": \"ชื่อ\",\n  \"Last name\": \"นามสกุล\",\n  \"Email\": \"อีเมล\",\n  \"A custom schema is used for this file format.\": \"สคีมาที่กำหนดเองใช้สำหรับรูปแบบไฟล์นี้\",\n  \"Select\": \"เลือก\",\n  \"Replace\": \"แทนที่\",\n  \"and\": \"และ\",\n  \"Go\": \"ไป\",\n  \"Go to page\": \"ไปที่หน้า\",\n  \"Copy to Clipboard\": \"คัดลอกไปยังคลิปบอร์ด\",\n  \"Reveal Contents\": \"เปิดเผยเนื้อหา\",\n  \"Selected Site\": \"ไซต์ที่เลือก\",\n  \"Use Emmet abbreviations\": \"ใช้ตัวย่อ Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"ไม่มีระเบียนสำหรับไซต์ที่เลือก สร้างหนึ่ง?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"รายละเอียดที่คุณเพิ่มเข้ามาไม่ตรงกับข้อมูลของเรา กรุณาตรวจสอบและลองอีกครั้ง\",\n  \"Administration Area\": \"ส่วนการจัดการ\",\n  \"Password Reset\": \"ตั้งค่ารหัสผ่านใหม่\",\n  \"Please enter a new password.\": \"ใส่ข้อมูลรหัสผ่านใหม่\",\n  \"Password\": \"รหัสผ่าน\",\n  \"Password Restore\": \"กู้คืนรหัสผ่าน\",\n  \"Please enter your login to restore the password.\": \"ใส่ข้อมูลล็อกอินของคุณ\",\n  \"A user could not be found with a login value of ':login'\": \"ไม่เจอผู้ใช้ชื่อ ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"ได้ส่งข้อความไปทางอีเมลของคุณพร้อมด้วยขั้นตอนการทำงาน\",\n  \"Invalid password reset data supplied. Please try again!\": \"ข้อมูลที่ใช้ตั้งรหัสผ่านไม่ถูกต้อง กรุณาลองใหม่!\",\n  \"Unable to reset your password!\": \"ไม่สามารถตั้งค่ารหัสผ่านของคุณใหม่ได้!\",\n  \"Password has been reset. You may now sign in.\": \"ตั้งรหัสผ่านใหม่แล้ว คุณสามารถลงชื่อเข้าใช้ได้\",\n  \"Restore\": \"กู้คืน\",\n  \"Reset\": \"ตั้งใหม่\",\n  \"Stay logged in\": \"ให้ล็อกอินค้างไว้\",\n  \"Forgot password?\": \"ลืมรหัสผ่านของคุณ?\",\n  \"Global Editor Settings\": \"การตั้งค่าตัวแก้ไขส่วนกลาง\",\n  \"Manage Widgets\": \"จัดการวิดเจ็ท\",\n  \"Add Widget\": \"เพิ่มวิดเจ็ท\",\n  \"Set the current layout as the default?\": \"ตั้งการวางโครงร่างปัจจุบันเป็นค่าเริ่มต้น?\",\n  \"Make Default\": \"ทำให้เป็นค่าเริ่มต้น\",\n  \"Reset layout back to default?\": \"ตั้งค่าการวางโครงร่างกลับสู่ค่าเริ่มต้น?\",\n  \"Reset Layout\": \"ตั้งค่าเริ่มต้นการวางโครงร่าง\",\n  \"Widget\": \"วิดเจ็ท\",\n  \"please select\": \"กรุณาเลือก\",\n  \"Width\": \"ความกว้าง\",\n  \"full width\": \"ความกว้างเต็มหน้า\",\n  \"Create Widgets\": \"สร้างวิดเจ็ต\",\n  \"not equal to\": \"ไม่เท่ากับ\",\n  \"Light Mode\": \"โหมดแสง\",\n  \"Dark Mode\": \"โหมดมืด\",\n  \"OS Default\": \"ระบบปฏิบัติการเริ่มต้น\",\n  \"Create a Custom Palette\": \"สร้างจานสีแบบกำหนดเอง\",\n  \"Custom Palette\": \"จานสีที่กำหนดเอง\",\n  \"Primary Color\": \"สีหลัก\",\n  \"Secondary Color\": \"สีรอง\",\n  \"Selection Color\": \"สีที่เลือก\",\n  \"Nav Text\": \"ข้อความนำทาง\",\n  \"Nav Background\": \"พื้นหลังนำทาง\",\n  \"Sidebar Text\": \"ข้อความแถบด้านข้าง\",\n  \"Sidebar Background\": \"พื้นหลังแถบด้านข้าง\",\n  \"Sidebar Active Text\": \"ข้อความที่ใช้งานแถบด้านข้าง\",\n  \"Sidebar Active Background\": \"พื้นหลังที่ใช้งานแถบด้านข้าง\",\n  \"Sidebar Hover Background\": \"เลื่อนพื้นหลังแถบด้านข้าง\",\n  \"Settings Text\": \"ข้อความการตั้งค่า\",\n  \"Settings Background\": \"พื้นหลังการตั้งค่า\",\n  \"Settings Item Background\": \"พื้นหลังรายการการตั้งค่า\",\n  \"Settings Active Color\": \"การตั้งค่า Active Color\",\n  \"Settings Active Background\": \"การตั้งค่าพื้นหลังที่ใช้งานอยู่\",\n  \"Settings Hover Background\": \"การตั้งค่า เลื่อนพื้นหลัง\",\n  \"This name is shown in the title area of the back-end.\": \"ชื่อนี้จะถูกแสดงที่หัวเรื่องของหน้าเว็บหลังบ้าน\",\n  \"App Name\": \"ชื่อแอป\",\n  \"This name is shown on the sign in screen for the back-end.\": \"สโลแกนนี้จะถูกแสดงในหน้าลงชื่อเข้าระบบของเว็บหลังบ้าน\",\n  \"App Tagline\": \"สโลแกนของแอป\",\n  \"Brand\": \"เครื่องหมายการค้า\",\n  \"Upload a custom logo to use in the back-end.\": \"อัพโหลดโลโก้สำหรับใช้ในหน้าเว็บหลังบ้าน\",\n  \"Logo\": \"โลโก้\",\n  \"Upload a custom favicon to use in the back-end\": \"อัพโหลดไอคอนสำหรับเว็บไซต์สำหรับใช้ในหน้าเว็บหลังบ้าน\",\n  \"Favicon\": \"ไอคอนสำหรับเว็บไซต์ (Favicon)\",\n  \"Navigation Logo\": \"โลโก้นำทาง\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"แทนที่ลิงก์แดชบอร์ดด้วยโลโก้ที่กำหนดเองในการนำทาง\",\n  \"Dashboard Icon\": \"ไอคอนแดชบอร์ด\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"ใช้รูปภาพที่กำหนดเองสำหรับไอคอนแดชบอร์ด (60x60)\",\n  \"This message is shown on the sign in screen for the back-end.\": \"ข้อความนี้แสดงบนหน้าจอลงชื่อเข้าใช้สำหรับส่วนหลัง\",\n  \"Welcome Message\": \"ข้อความต้อนรับ\",\n  \"Login Page\": \"หน้าเข้าสู่ระบบ\",\n  \"Background Type\": \"ประเภทพื้นหลัง\",\n  \"Flat Color\": \"สีแบน\",\n  \"Wallpaper\": \"วอลล์เปเปอร์\",\n  \"Wallpaper Size\": \"ขนาดวอลเปเปอร์\",\n  \"Auto\": \"อัตโนมัติ\",\n  \"Cover\": \"ปิดบัง\",\n  \"Background Wallpaper Image\": \"ภาพพื้นหลังภาพพื้นหลัง\",\n  \"Image\": \"รูปภาพ\",\n  \"Random Autumn Images\": \"รูปภาพฤดูใบไม้ร่วงแบบสุ่ม\",\n  \"Custom Image\": \"รูปภาพที่กำหนดเอง\",\n  \"Login Page Image\": \"รูปภาพหน้าเข้าสู่ระบบ\",\n  \"Colors\": \"สี\",\n  \"Color Mode\": \"โหมดสี\",\n  \"Color Preset\": \"พรีเซ็ตสี\",\n  \"Menu Style\": \"รูปแบบเมนู\",\n  \"Navigation\": \"ตัวนำทาง\",\n  \"Custom Stylesheet\": \"กำหนด stylesheet เอง\",\n  \"Styles\": \"รูปแบบ\",\n  \"Inline\": \"อยู่ในบรรทัดเดียว\",\n  \"Text\": \"ข้อความ\",\n  \"Tiles\": \"กระเบื้อง\",\n  \"Collapsed\": \"ย่อ\",\n  \"Icons\": \"ไอคอน\",\n  \"Left Side\": \"ด้านซ้าย\",\n  \"Add New Item\": \"เพิ่มรายการใหม่\",\n  \"Link Color\": \"สีลิงค์\",\n  \"Current Password\": \"รหัสผ่านปัจจุบัน\",\n  \"New Password\": \"รหัสผ่านใหม่\",\n  \"Current password does not match. Please try again!\": \"รหัสผ่านปัจจุบันไม่ตรงกัน กรุณาลองอีกครั้ง!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"รหัสผ่านของคุณหมดอายุแล้ว โปรดสร้างรหัสผ่านใหม่เพื่อความปลอดภัย\",\n  \"Region\": \"ภูมิภาค\",\n  \"Locale\": \"ภาษาท้องถิ่น (Locale)\",\n  \"Select your desired locale for language use.\": \"เลือกภาษาท้องถิ่นที่ต้องการ\",\n  \"Timezone\": \"เขตเวลา (Timezone)\",\n  \"Adjust displayed dates to this timezone.\": \"ปรับแก้การแสดงวันเวลาตามเขตเวลานี้\",\n  \"Code Editor\": \"ตัวแก้ไขโค้ด\",\n  \"Color Scheme\": \"แผนผังสี\",\n  \"Word Wrap\": \"ขึ้นบรรทัดใหม่\",\n  \"Off\": \"ปิด\",\n  \"40 Characters\": \"40 ตัวอักษร\",\n  \"80 Characters\": \"80 ตัวอักษร\",\n  \"Fluid\": \"ลื่นไหล\",\n  \"Font Size\": \"ขนาดฟอนท์\",\n  \"Tab Size\": \"ขนาดแท็บ\",\n  \"Code Folding\": \"พับย่อโค้ด\",\n  \"Mark begin\": \"ทำเครื่องหมายที่บรรทัดเริ่มต้น\",\n  \"Mark begin and end\": \"ทำเครื่องหมายที่บรรทัดเริ่มต้นและสุดท้าย\",\n  \"Autocompletion\": \"การเติมคำโดยอัตโนมัติ\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"การเติมคำอัตโนมัติพื้นฐาน (คอนโทรล + สเปซ)\",\n  \"Live Autocompletion\": \"การเติมคำอัตโนมัติทันที\",\n  \"Show gutter\": \"แสดงเลขบรรทัด\",\n  \"Highlight active line\": \"ไฮไลท์บรรทัดที่เลือก\",\n  \"Automatically close tags\": \"ปิดแท็กโดยอัตโนมัติ\",\n  \"Indent using tabs\": \"ย่อหน้าโดยใช้แท็บ\",\n  \"Show indent guides\": \"แสดงแนวเส้นย่อหน้า\",\n  \"Show invisible characters\": \"แสดงตัวอักษรที่มองไม่เห็น\",\n  \"Show print margin\": \"แสดงขอบการพิมพ์\",\n  \"Custom styles to include in the HTML editor.\": \"รูปแบบกำหนดเองที่จะเพิ่มในตัวแก้ไข HTML\",\n  \"Markup Styles\": \"รูปแบบ\",\n  \"Paragraph Formats\": \"รูปแบบย่อหน้า\",\n  \"Markup Classes\": \"คลาส\",\n  \"Label\": \"ป้ายชื่อ\",\n  \"Paragraph\": \"ย่อหน้า\",\n  \"Class Name\": \"ชื่อคลาส\",\n  \"Link\": \"ลิงก์\",\n  \"Table\": \"ตาราง\",\n  \"Table Cell\": \"เซลล์ตาราง\",\n  \"Allowed Tags\": \"แท็กที่ใช้ได้\",\n  \"The list of allowed tags.\": \"รายการแท็กที่อนุญาตให้ใช้\",\n  \"Markup Tags\": \"แท็ก\",\n  \"Allowed Empty Tags\": \"แท็กเปล่าที่อนุญาตให้ใช้ได้\",\n  \"The list of tags that are not removed when they have no content inside.\": \"รายการแท็กที่ไม่ถูกเอาออกถ้าไม่มีเนื้อหาภายในแท็ก\",\n  \"Do Not Wrap Tags\": \"แท็กที่ไม่ควรห่อ\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"รายการแท็กที่ไม่ควรถูกห่ออยู่ในบล๊อก\",\n  \"Remove Tags\": \"เอาแท็กออก\",\n  \"The list of tags that are removed together with their content.\": \"รายการของแท็กที่ถูกเอาออกรวมถึงเนื้อหาข้างใน\",\n  \"Line Breaker Tags\": \"แท็กสำหรับขึ้นบรรทัดใหม่\",\n  \"The list of tags that are used to place a line breaker element between.\": \"รายการของแท็กที่ให้ตัวขึ้นบรรทัดใหม่วางคั่นได้\",\n  \"Toolbar Buttons\": \"ปุ่มในแถบเครื่องมือ\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"ปุ่มในแถบเครื่องมือที่จะแสดงในหน้าแก้ไขโดยอัตโนมัติ\",\n  \"Insert a preset toolbar button configuration\": \"แทรกการกำหนดค่าปุ่มแถบเครื่องมือที่กำหนดไว้ล่วงหน้า\",\n  \"Allowed Attributes\": \"แอตทริบิวต์ที่อนุญาต\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"รายการแอตทริบิวต์ HTML ที่อนุญาต นอกเหนือจากการอนุญาตปกติ\",\n  \"Enable code snippets (Tab)\": \"เปิดใช้งาน code snippets (แท็บ)\",\n  \"Title\": \"หัวเรื่อง\",\n  \"Description\": \"รายละเอียด\",\n  \"Attachment\": \"สิ่งที่แนบมา\",\n  \"Attachment URL\": \"URL ไฟล์แนบ\",\n  \"Add a title and description for this attachment.\": \"เพิ่มหัวเรื่องและรายละเอียดสำหรับไฟล์แนบนี้\",\n  \"Are you sure?\": \"คุณแน่ใจหรือไม่?\",\n  \"Upload Error\": \"อัพโหลดผิดพลาด\",\n  \"Remove File\": \"ลบไฟล์\",\n  \"Create :name\": \"สร้าง :name\",\n  \"Update :name\": \"อัพเดท :name\",\n  \"Add :name\": \"เพิ่ม :name\",\n  \"Link :name\": \"ลิงก์ :name\",\n  \"Unlink\": \"ยกเลิกลิงก์\",\n  \"Preview :name\": \"ดูตัวอย่าง :name\",\n  \"Link a New :name\": \"ลิงก์ใหม่ :name\",\n  \"Add a New :name\": \"เพิ่มใหม่ :name\",\n  \":name Created\": \"สร้าง :name แล้ว\",\n  \":name Updated\": \"แก้ไข :name แล้ว\",\n  \":name Deleted\": \"ลบ :name แล้ว\",\n  \"Preview the Website\": \"ดูตัวอย่างเว็บไซต์\",\n  \"Manage back-end administrator users, groups and permissions.\": \"กำหนด ผู้ใช้ กลุ่ม และสิทธิ์การใช้งาน ของหน้าเว็บหลังบ้าน\",\n  \"Branding & Appearance\": \"ปรับแก้หน้าเว็บหลังบ้าน\",\n  \"Customize the administration area such as name, colors and logo.\": \"ปรับแก้ส่วนจัดการระบบ เช่น ชื่อ สี และโลโก้\",\n  \"Editor Settings\": \"การตั้งค่าตัวแก้ไข\",\n  \"Change the global editor preferences.\": \"ปรับแก้ตามความชอบตัวแก้ไข เช่น ขนาดฟอนท์ และแผนผังสี\",\n  \"My Account\": \"บัญชีของฉัน\",\n  \"Update your account details such as name, email address and password.\": \"อัพเดทรายละเอียดบัญชีผู้ใช้ของท่านเช่น ชื่อ อีเมล และรหัสผ่าน\",\n  \"Backend Preferences\": \"หน้าเว็บหลังบ้านตามใจชอบ\",\n  \"Manage your account preferences such as desired language.\": \"จัดการบัญชีผู้ใช้ของคุณตามใจชอบ เช่นเลือกภาษาที่ต้องการ\",\n  \"List Setup\": \"กำหนดค่ารายการ\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"เลือก checkbox เพื่อเลือกคอลัมน์ที่คุณต้องการแสดงผลในตาราง คุณสามารถย้ายตำแหน่งของคอลัมน์โดยลากคอลัมน์ขึ้นหรือลง\",\n  \"Records Per Page\": \"ข้อมูลต่อหน้า\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"เลือกจำนวนข้อมูลต่อหน้าในการแสดงผล การเลือกจำนวนต่อหน้ามากๆทำให้ประสิทธิภาพลดลงได้\",\n  \"Add Selected\": \"เพิ่มรายการที่เลือก\",\n  \"Created\": \"สร้างแล้ว\",\n  \"Updated\": \"อัพเดทแล้ว\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"ส่วนต่อเติม PHP :name ไม่ถูกติดตั้ง กรุณาติดตั้งส่วนต่อเติมนี้และเปิดการใช้งานส่วนต่อเติม\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"ปลั๊กอิน :name เป็น dependency แต่ไม่ถูกติดตั้ง กรุณาติดตั้งปลั๊กอินนี้\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"โฟลเดอร์ :name หรือโฟลเดอร์ย่อยของมัน ไม่สามารถเขียนได้โดย PHP กรุณาตั้งสิทธิ์ที่สอดคล้องกับเว็บเซิร์ฟเวอร์ที่โฟลเดอร์นี้\"\n}"
  },
  {
    "path": "modules/backend/lang/tr/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Geçersiz alan tipi :type.',\n    'options_method_invalid_model' => '\\':field\\' metodu, geçerli bir model ile eşleşmiyor. :model Model\\'i için options metodu tanımlamalısınız.',\n    'options_method_not_exists' => ':model Model\\'i içerisinde \\':field\\' formuna geri dönüş için bir :method() metodu tanımlanmalıdır.',\n    'colors_method_not_exists' => ':model Model\\'i içerisinde \\':field\\' form alanı için html renk HEX kodu üreten :method() metodu tanımlanmalıdır.',\n  ],\n  'widget' => [\n    'not_registered' => '\\':name\\' isimli widget sınıfı sistemde kayıtlı değil',\n    'not_bound' => '\\':name\\' isimli widget sınıfı controllerda tanımlanmamış',\n  ],\n  'page' => [\n    'untitled' => 'Başlıksız',\n    'access_denied' => [\n      'label' => 'Giriş engellendi',\n      'help' => 'Bu sayfayı görüntülemek için gerekli izinlere sahip değilsiniz.',\n      'cms_link' => 'Ana sayfaya dön',\n    ],\n    'no_database' => [\n      'label' => 'Veritabanı yapılandırılmamış',\n      'help' => 'Yönetim paneline erişebilmeniz için geçerli bir veritabanı yapılandırması yapmalısınız. Lütfen ayarların kontrol edin.',\n      'cms_link' => 'Anasayfaya dön',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => '\\':name\\' bölümü bulunamadı.',\n  ],\n  'account' => [\n    'signed_in_as' => ':full_name olarak giriş yapıldı',\n    'sign_out' => 'Çıkış',\n    'login_placeholder' => 'kullanıcı adı',\n    'password_placeholder' => 'şifre',\n    'enter_email' => 'Email adresinizi girin',\n    'email_placeholder' => 'email',\n    'apply' => 'Onayla',\n    'cancel' => 'İptal',\n    'delete' => 'Sil',\n    'ok' => 'Tamam',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Anasayfa',\n    'widget_inspector_title' => 'Eklenti ayarları',\n    'widget_inspector_description' => 'Eklentinin ayarlarını düzenleyin',\n    'widget_columns_label' => 'Genişlik :columns',\n    'widget_columns_description' => 'Eklenti genişliği, 1 ile 10 arasında bir sayı.',\n    'widget_columns_error' => 'Lütfen eklenti genişliğini 1 ile 10 arasında girin.',\n    'columns' => '{1} sütun|[2,Inf] sütun',\n    'widget_new_row_label' => 'Yeni satıra zorla',\n    'widget_new_row_description' => 'Eklentiyi yeni satıra indir.',\n    'widget_title_label' => 'Eklenti başlığı',\n    'widget_title_error' => 'Eklenti Başlığı gerekli.',\n    'reset_layout_success' => 'Şablonu sıfırlandı',\n    'make_default_success' => 'Geçerli şablon öntanımlı olarak ayarlandı',\n    'collapse_all' => 'Tümünü daralt',\n    'expand_all' => 'Tümünü genişlet',\n    'status' => [\n      'widget_title_default' => 'Sistem durumu',\n      'update_available' => '{0} güncelleme var!|{1} güncelleme var!|[2,Inf] güncelleme var!',\n      'updates_pending' => 'Bekleyen güncelleme var',\n      'updates_nil' => 'Sistem güncel',\n      'updates_link' => 'Güncelle',\n      'warnings_pending' => 'İncelemeniz gereken değişiklikler var',\n      'warnings_nil' => 'Gösterilecek uyarı yok',\n      'warnings_link' => 'Göster',\n      'core_build' => 'Altyapı sürümü',\n      'event_log' => 'Olay günlüğü',\n      'request_log' => 'Hatalı istek günlüğü',\n      'app_birthday' => 'İlk aktiflik tarihi',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Hoşgeldiniz',\n      'welcome_back_name' => ':app yönetim paneline tekrar hoşgeldiniz Sayın :name.',\n      'welcome_to_name' => ':app yönetim paneline hoşgeldiniz Sayın :name.',\n      'first_sign_in' => 'Bu sizin ilk ziyaretiniz.',\n      'last_sign_in' => 'En yakın giriş yaptığınız tarih',\n      'view_access_logs' => 'Erişim günlüğüne göz at',\n      'nice_message' => 'İyi çalışmalar dileriz!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Yönetici',\n    'list_title' => 'Yöneticileri Yönet',\n    'new' => 'Yeni Yönetici',\n    'first_name' => 'İsim',\n    'last_name' => 'Soyisim',\n    'full_name' => 'Tam Adı',\n    'email' => 'Email',\n    'role_field' => 'Roller',\n    'role_comment' => 'Roller kullanıcı izinlerini tanımlar. Bu roller, izinler sekmesinden kullanıcı düzeyinde değiştirilebilir.',\n    'groups' => 'Gruplar',\n    'groups_comment' => 'Kullanıcının hangi gruba bağlı olduğunu belirleyin.',\n    'avatar' => 'Avatar',\n    'password' => 'Şifre',\n    'password_confirmation' => 'Şifre (Tekrar)',\n    'permissions' => 'İzinler',\n    'account' => 'Hesap',\n    'superuser' => 'Süper Kullanıcı',\n    'superuser_comment' => 'Kullanıcıya her alanda yetki vermek için burayı işaretleyin.',\n    'send_invite' => 'Email ile davet gönder',\n    'send_invite_comment' => 'Kullanıcının email adresine davet göndermek için burayı işaretleyin',\n    'delete_confirm' => 'Bu yöneticiyi silmek istiyor musunuz?',\n    'return' => 'Yöneticiler listesine dön',\n    'allow' => 'Yetki Var',\n    'inherit' => 'Grup Yetkisi',\n    'deny' => 'Yetki Yok',\n    'activated' => 'Aktifleştirildi',\n    'last_login' => 'Son giriş',\n    'created_at' => 'Oluşturulma',\n    'updated_at' => 'Güncellenme',\n    'deleted_at' => 'Silinme',\n    'show_deleted' => 'Silinenleri göster',\n    'group' => [\n      'name' => 'Grup',\n      'name_comment' => 'Grup ismi, grup listesinde Yönetici Ekleme/Düzenleme formunda görüntülenecek.',\n      'name_field' => 'Adı',\n      'description_field' => 'Açıklama',\n      'is_new_user_default_field_label' => 'Öntanımlı grup',\n      'is_new_user_default_field_comment' => 'Yeni eklenen yöneticileri bu gruba dahil et',\n      'code_field' => 'Grup kodu',\n      'code_comment' => 'Grup kodunu yazın',\n      'list_title' => 'Grupları Yönet',\n      'new' => 'Yeni Yönetici Grubu',\n      'delete_confirm' => 'Bu yönetici grubunu silmek istiyor musunuz?',\n      'return' => 'Grup listesine dön',\n      'users_count' => 'Kişiler',\n    ],\n    'role' => [\n      'name' => 'Rol',\n      'name_field' => 'İsim',\n      'name_comment' => 'Rol ismi, Yönetici formundaki rol listesinde görüntülenir.',\n      'description_field' => 'Açıklama',\n      'code_field' => 'Kod',\n      'code_comment' => 'API ile rol nesnesine erişmek istiyorsanız, eşsiz bir kod girin.',\n      'list_title' => 'Rolleri Yönet',\n      'new' => 'Yeni Rol',\n      'delete_confirm' => 'Bu yönetici rolü silinsin mi?',\n      'return' => 'Rol listesine dön',\n      'users_count' => 'Kişiler',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Ayarları görüntülemek veya düzenlemek için yetkili bir kullanıcı yok.',\n    ],\n    'trashed_hint_title' => 'Bu hesap silindi',\n    'trashed_hint_desc' => 'Bu hesap silindi ve oturum açılamadı. Tekrar aktifleştirmek için sağ alt kısımdaki kullanıcıyı aktifleştir simgesine tıklayın.',\n  ],\n  'list' => [\n    'default_title' => 'Liste',\n    'search_prompt' => 'Arama...',\n    'no_records' => 'Bu alan için görüntülenecek kayıt yok.',\n    'missing_model' => ':class da kullanılan liste için model değeri tanımlanmamış.',\n    'missing_column' => ':columns için sütun değeri tanımlanmamış.',\n    'missing_columns' => ':class da kullanılan liste için sütun değeri tanımlanmamış.',\n    'missing_definition' => 'Liste \\':field\\' için bir sütun değeri içermiyor.',\n    'missing_parent_definition' => 'Liste davranışı \\':definition\\' tanımlaması için tanımlama bilgisi içermiyor.',\n    'behavior_not_ready' => 'Liste oluşturulamadı, controller da makeLists() metodunu kontrol edin.',\n    'invalid_column_datetime' => '\\':column\\' için sütun değeri DateTime nesnesi değil, Model kısmında $dates referansını unutmuş olabilir misiniz?',\n    'pagination' => 'Gösterilen kayıtlar: :from-:to Toplam: :total',\n    'first_page' => 'İlk sayfa',\n    'last_page' => 'Son sayfa',\n    'prev_page' => 'Önceki sayfa',\n    'next_page' => 'Sonraki sayfa',\n    'refresh' => 'Yenile',\n    'updating' => 'Güncelleniyor...',\n    'loading' => 'Yükleniyor...',\n    'check' => 'Kontrol et',\n    'delete_selected' => 'Seçili olanı sil',\n    'delete_selected_empty' => 'Silinecek seçili kayıt bulunamadı.',\n    'delete_selected_confirm' => 'Seçili kayıtları silmek istediğize emin misiniz?',\n    'delete_selected_success' => 'Seçili kayıtlar başarıyla silindi.',\n    'column_switch_true' => 'Evet',\n    'column_switch_false' => 'Hayır',\n  ],\n  'fileupload' => [\n    'default_prompt' => '%s e tıkla ya da bir dosya sürükleyin',\n  ],\n  'form' => [\n    'create_title' => ':name Oluştur',\n    'update_title' => ':name Düzenle',\n    'preview_title' => ':name Görüntüle',\n    'restore_success' => ':name geri yüklendi',\n    'reset_success' => 'Sıfırlama başarılı',\n    'missing_id' => 'Form kayıt ID\\'si belirtilmedi.',\n    'missing_model' => ':class da kullanılan form için model değeri tanımlanmamış.',\n    'missing_definition' => 'Form \\':field\\' için bir sütun değeri içermiyor.',\n    'action_confirm' => 'Emin misiniz?',\n    'create' => 'Oluştur',\n    'create_and_close' => 'Oluştur ve Kapat',\n    'creating' => 'Oluşturuluyor...',\n    'creating_name' => 'Oluşturuluyor :name...',\n    'save' => 'Kaydet',\n    'save_and_close' => 'Kaydet ve Kapat',\n    'saving' => 'Kaydediliyor...',\n    'saving_name' => 'Kaydediliyor :name...',\n    'delete' => 'Sil',\n    'deleting' => 'Siliniyor...',\n    'confirm_delete' => 'Bu kaydı silmek istediğinize emin misiniz?',\n    'confirm_delete_multiple' => 'Seçilen kayıtları silmek istediğinize emin misiniz?',\n    'deleting_name' => 'Siliniyor :name...',\n    'restore' => 'Geri yükle',\n    'restoring' => 'Geri yükleniyor',\n    'confirm_restore' => 'Bu kaydı geri yüklemek istediğinize emin misiniz?',\n    'reset_default' => 'Ön Tanımlı Ayarlara Dön!',\n    'resetting' => 'İşleniyor',\n    'resetting_name' => ':name İşleniyor',\n    'undefined_tab' => 'Çeşitli',\n    'field_off' => 'Kapalı',\n    'field_on' => 'Açık',\n    'add' => 'Ekle',\n    'apply' => 'Uygula',\n    'cancel' => 'İptal',\n    'close' => 'Kapat',\n    'confirm' => 'Onayla',\n    'reload' => 'Yenile',\n    'complete' => 'Tamamla',\n    'ok' => 'Tamam',\n    'or' => 'veya',\n    'confirm_tab_close' => 'Bu sekmeyi kapatmak istediğinize emin misiniz? Kaydedilmemiş değişiklikleri kaybedeceksiniz.',\n    'behavior_not_ready' => 'Form oluşturulamadı, controller da initForm() metodunu kontrol edin.',\n    'preview_no_files_message' => 'Dosyalar yüklenmedi',\n    'preview_no_media_message' => 'Seçilmiş medya yok.',\n    'preview_no_record_message' => 'Seçili kayıt yok.',\n    'select' => 'Seç',\n    'select_all' => 'hepsini seç',\n    'select_none' => 'hiçbir şey seçilmedi',\n    'insert_row' => 'Kayıt Ekle',\n    'insert_row_below' => 'Alt Satıra Kayıt Ekle',\n    'delete_row' => 'Kayıt Sil',\n    'concurrency_file_changed_title' => 'Dosya değiştirildi',\n    'concurrency_file_changed_description' => 'Düzenlemeye çalıştığınız dosya disk üzerinde başka bir kullanıcı tarafından değiştirilmiş. Dosyayı yeniden yükleyebilir ve değişiklikleri kaybedersiniz ya da diskteki dosyayı kendi düzenlediğiniz hali ile değiştirebilirsiniz.',\n    'return_to_list' => 'Listeye dön',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Kayıt Bul',\n    'cancel' => 'İptal',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'İlişki \\':config\\' için bir yapılandırma ayarı içermiyor.',\n    'missing_definition' => 'İlişki \\':field\\' için bir sütun değeri içermiyor.',\n    'missing_model' => ':class da kullanılan ilişki için model değeri tanımlanmamış.',\n    'invalid_action_single' => 'Bu işlem tekli ilişkilendirme için kullanılamaz.',\n    'invalid_action_multi' => 'Bu işlem çoklu ilişkilendirme için kullanılamaz.',\n    'help' => 'Eklemek için bir öğeye tıklayın',\n    'add' => 'Ekle',\n    'link_selected' => 'Seçileni bağla',\n    'cancel' => 'İptal',\n    'close' => 'Kapat',\n    'create' => 'Oluştur',\n    'update' => 'Güncelle',\n    'preview' => 'Önizle',\n    'remove_name' => ':name Kaldır',\n    'delete_name' => ':name Sil',\n    'link' => 'Bağla',\n    'unlink_name' => ':name bağlamasını kaldır',\n  ],\n  'reorder' => [\n    'default_title' => 'Kayıtları yeniden sırala',\n    'no_records' => 'Sıralamak için bir kayıt bulunamadı.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'ID\\'si :id olan \\':class\\' Model bulunamadı.',\n    'missing_id' => 'Aranılan model için ID belirtilmedi.',\n    'missing_relation' => '\\':class\\' Model\\'i \\':relation\\' ilişkisi için tanımlanmamış.',\n    'missing_method' => '\\':class\\' Model\\'i \\':method\\' isimli bir metod içermiyor.',\n    'invalid_class' => ':class da tanımlanan :model Model\\'i geçerli değil, \\\\Model sınıfını extend almalı.',\n    'mass_assignment_failed' => '\\':attribute\\' Model değeri için toplu atama başarısız.',\n  ],\n  'warnings' => [\n    'tips' => 'Sistem ayar ipuçları',\n    'tips_description' => 'Sistemin düzgün çalışabilmesi için dikkat etmeniz gereken sorunlar var.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Ayarlarım',\n    'menu_description' => 'Yönetim hesabı ile ilgili ayarlar',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accent color',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'tümü',\n    'options_method_not_exists' => ':model modelinde :method() metodu bulunmalı ve \\':filter\\' filtresi için uygun seçenekleri döndermelidir.',\n    'date_all' => 'tüm periyotlar',\n    'number_all' => 'Tüm numaralar',\n  ],\n  'import_export' => [\n    'row' => 'Satır :row',\n    'export_error' => 'Dışarı aktarma hatası',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Batı Avrupa)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Merkez Avrupa)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, Güney Avrupa)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, Kuzey Avrupa)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Kril)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arapça)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Yunanca)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, İbranice)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Türkçe)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Norveççe)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai Dili)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltık Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic Dili)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Euro işareti revizyonlu Batı Avrupa)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Medyaları düzenleyebilsin',\n  ],\n  'mediafinder' => [\n    'label' => 'Medya Bulucu',\n    'default_prompt' => 'Bir medya öğesi bulmak için %s butonuna tıklayın',\n  ],\n  'media' => [\n    'menu_label' => 'Medya',\n    'upload' => 'Yükle',\n    'move' => 'Taşı',\n    'delete' => 'Sil',\n    'add_folder' => 'Yeni Klasör',\n    'search' => 'Ara',\n    'display' => 'Görüntüle',\n    'filter_everything' => 'Her şey',\n    'filter_images' => 'Resimler',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Ses',\n    'filter_documents' => 'Belgeler',\n    'library' => 'Kütüphane',\n    'size' => 'Boyut',\n    'title' => 'Başlık',\n    'last_modified' => 'Son düzenleme tarihi',\n    'public_url' => 'Public URL',\n    'click_here' => 'Buraya tıkla',\n    'thumbnail_error' => 'Önizleme oluşturulurken hata.',\n    'return_to_parent' => 'Ana klasöre geri dön',\n    'return_to_parent_label' => 'Yukarı git..',\n    'nothing_selected' => 'Hiçbir şey seçilmedi.',\n    'multiple_selected' => 'Birden fazla öğe seçildi.',\n    'uploading_file_num' => ':number adet dosya yükleniyor...',\n    'uploading_complete' => 'Yükleme tamamlandı',\n    'uploading_error' => 'Yükleme hatası',\n    'type_blocked' => 'Seçilen dosya türünü güvenlik nedenleriyle izin verilmiyor.',\n    'order_by' => 'Sırala',\n    'direction' => 'Yön',\n    'direction_asc' => 'Artan',\n    'direction_desc' => 'Azalan',\n    'folder' => 'Klasör',\n    'no_files_found' => 'İsteğiniz doğrultusunda hiçbir dosya bulunamadı.',\n    'delete_empty' => 'Lütfen silinecek öğeleri seçiniz.',\n    'delete_confirm' => 'Bu öğe veya öğeleri gerçekten silmek istediğinize emin misiniz?',\n    'error_renaming_file' => 'Öğeyi yeniden isimlendirirken hata.',\n    'new_folder_title' => 'Yeni Klasör',\n    'folder_name' => 'Klasör ismi',\n    'error_creating_folder' => 'Klasör oluştururken hata',\n    'folder_or_file_exist' => 'Belirtilen isimde bir klasör ya da dosya zaten mevcut.',\n    'move_empty' => 'Lütfen taşınacak öğeleri seçiniz.',\n    'move_popup_title' => 'Dosyaları veya klasörleri taşı',\n    'move_destination' => 'Hedef klasör',\n    'please_select_move_dest' => 'Lütfen hedef klasörü seçiniz.',\n    'move_dest_src_match' => 'Lütfen başka bir hedef klasör seçiniz.',\n    'empty_library' => 'Medya kütüphanesi boş. Başlamak için dosya yükleyin yada klasör oluşturun.',\n    'insert' => 'Ekle',\n    'crop_and_insert' => 'Kırp ve Ekle',\n    'select_single_image' => 'Lütfen sadece bir tane resim seçiniz.',\n    'selection_not_image' => 'Seçili öğe bir resim değil.',\n    'restore' => 'Tüm değişiklikleri geri al',\n    'resize' => 'Yeniden boyutlandırma...',\n    'selection_mode_normal' => 'Normal',\n    'selection_mode_fixed_ratio' => 'Sabit oran',\n    'selection_mode_fixed_size' => 'Sabit boyut',\n    'height' => 'Yükseklik',\n    'width' => 'Genişlik',\n    'selection_mode' => 'Seçim modu',\n    'resize_image' => 'Resimi yeniden boyutlandırs',\n    'image_size' => 'Resim boyutu:',\n    'selected_size' => 'Seçili:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/tr.json",
    "content": "{\n  \"Cancel\": \"İptal\",\n  \"You are viewing as\": \"olarak görüntülüyorsunuz\",\n  \"Preview Role\": \"Önizleme Rolü\",\n  \"This lets you test the actions this role can perform.\": \"Bu, bu rolün gerçekleştirebileceği eylemleri test etmenizi sağlar.\",\n  \"View As Role\": \"Rol Olarak Görüntüle\",\n  \"Return to Role Settings\": \"Rol Ayarlarına Dön\",\n  \"Password must have a minimum of length of :min characters\": \"Parola en az :min karakter uzunluğunda olmalıdır\",\n  \"Password must contain at least one uppercase character.\": \"Parola en az bir büyük harf içermelidir.\",\n  \"Password must contain at least one lowercase character.\": \"Parola en az bir küçük harf içermelidir.\",\n  \"Password must contain at least one number.\": \"Şifre en az bir sayı içermelidir.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Parola en az bir alfasayısal olmayan karakter içermelidir.\",\n  \"Welcome to your Administration Area, :name\": \"Yönetim Alanınıza hoş geldiniz, :name\",\n  \"Duplicate\": \"Kopyalamak\",\n  \"Expand\": \"Genişletmek\",\n  \"Collapse\": \"Çöküş\",\n  \"Move Up\": \"Yukarı Taşı\",\n  \"Move Down\": \"Aşağı inmek\",\n  \"Remove\": \"Kaldır\",\n  \"Manage Item\": \"Öğeyi Yönet\",\n  \"Clear Filters\": \"Filtreleri Temizle\",\n  \"Filter Setup\": \"Filtre Kurulumu\",\n  \"Apply\": \"Uygulamak\",\n  \"Clear\": \"Temizlemek\",\n  \"is equal to\": \"eşittir\",\n  \"is between\": \"arasında\",\n  \"contains\": \"içerir\",\n  \"is before\": \"önce\",\n  \"is after\": \"sonra\",\n  \"is greater than\": \"daha büyüktür\",\n  \"is less than\": \"daha az\",\n  \"1. Export output format\": \"1. Dışarı aktarma formatı\",\n  \"File Format\": \"Dosya formatı\",\n  \"Delimiter Character\": \"Ayırıcı karakter\",\n  \"Enclosure Character\": \"Kapsayıcı karakter\",\n  \"Escape Character\": \"Kaçış karakteri\",\n  \"2. Select columns to export\": \"2. Dışarı aktarılacak sütunları seçin\",\n  \"Columns\": \"Sütunlar\",\n  \"3. Set export options\": \"3. Dışarı aktarmayı yapılandırın\",\n  \"CSV Custom\": \"Özel format\",\n  \"1. Upload an Import File\": \"1. Bir CSV dosyası yükleyin\",\n  \"Import File\": \"Dosya İçeri Aktar\",\n  \"File Encoding\": \"Dosya karakter kodlaması\",\n  \"First row contains column titles\": \"İlk satır, sütun isimlerini içermelidir\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Eğer CSV dosyanızda ilk satır, sütun isimlerini içeriyorsa bu seçeneği işaretleyin.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Veritabanı sütunları ile dosyanızdaki verileri eşleştirin\",\n  \"File columns\": \"Dosyadaki sütunlar\",\n  \"Database fields\": \"Veritabanındaki sütunlar\",\n  \"3. Set Import Options\": \"3. İçeri aktarmayı yapılandırın\",\n  \"Export progress\": \"Dışarı aktarma ilerlemesi\",\n  \"Processing\": \"İşleniyor\",\n  \"Import progress\": \"İçeri aktarma ilerlemesi\",\n  \"Import error\": \"İçeri aktarma hatası\",\n  \"Export error\": \"Dışarı aktarma hatası\",\n  \"Column preview\": \"Sütun önizlemesi\",\n  \"Column\": \"Sütun\",\n  \"Disable\": \"Devre dışı bırakmak\",\n  \"Enable\": \"Olanak vermek\",\n  \"Delete\": \"Sil\",\n  \"Export\": \"İhracat\",\n  \"Import\": \"İçe aktarmak\",\n  \"Select Action\": \"Eylemi seç\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Yönetim Alanına giriş yapmak için lütfen yeni bir hesap oluşturun.\",\n  \"First Name\": \"İlk adı\",\n  \"Last Name\": \"Soyadı\",\n  \"Email Address\": \"E\",\n  \"Pick a Username\": \"Bir kullanıcı adı seçin\",\n  \"Enter New Password\": \"Yeni Şifreyi Girin\",\n  \"Confirm Password\": \"Şifreyi Onayla\",\n  \"Create Account\": \"Hesap oluştur\",\n  \"Getting Ready\": \"Hazır olmak\",\n  \"Just a few more minutes\": \"Sadece birkaç dakika daha\",\n  \"Migrating Database\": \"Veritabanını Taşıma\",\n  \"Access the Backend Panel\": \"Arka Uç Paneline Erişin\",\n  \"View Backend During Maintenance\": \"Bakım Sırasında Arka Uç Görüntüle\",\n  \"Perform Software Updates\": \"Yazılım Güncellemelerini Gerçekleştirin\",\n  \"In Maintenance\": \"Bakımda\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Site şu anda bakım modunda, lütfen daha sonra tekrar kontrol edin.\",\n  \"Dashboard\": \"Gösterge Paneli\",\n  \"Administrators\": \"Yöneticiler\",\n  \"Manage Admins\": \"Yöneticileri Yönet\",\n  \"Create Admins\": \"Yöneticiler Oluşturun\",\n  \"Moderate Admins\": \"Yöneticileri Denetle\",\n  \"Manage account suspension and ban admin accounts\": \"Hesabın askıya alınmasını yönetin ve yönetici hesaplarını yasaklayın\",\n  \"Role Permissions\": \"Rolleri Yönet\",\n  \"Team Groups\": \"Gruplar\",\n  \"Manage Other Admins\": \"Diğer Yöneticileri Yönet\",\n  \"Allow users to reset passwords and update emails.\": \"Şifrelerin sıfırlanmasına ve e-postaların güncellenmesine izin verir\",\n  \"Delete Admins\": \"Yöneticileri Sil\",\n  \"Preferences\": \"tercihler\",\n  \"Settings\": \"Ayarlar\",\n  \"Background Color\": \"Arka plan rengi\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Kullanıcıların yeni roller oluşturmasına ve en yüksek rollerinden daha düşük rolleri düzenlemesine veya silmesine izin verin.\",\n  \"Save Changes\": \"Değişiklikleri Kaydet\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Bu kayıtlar yöneticiler tarafından başarılı şekilde yapılan girişleri gösterir. Kayıtlar :days gün boyunca saklanır.\",\n  \"Access Log\": \"Yönetim paneli erişim kayıtları\",\n  \"View a list of successful back-end user sign ins.\": \"Yönetim paneline başarılı şekilde yapılan girişleri görüntüler.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Tarih & Saat\",\n  \"Type\": \"Tipi\",\n  \"IP address\": \"IP adres\",\n  \"Username\": \"Kullanıcı adı\",\n  \"Login\": \"Giriş\",\n  \"First name\": \"İsim\",\n  \"Last name\": \"Soyisim\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"Bu dosya biçimi için özel bir şema kullanılır.\",\n  \"Select\": \"Seçme\",\n  \"Replace\": \"Yer değiştirmek\",\n  \"and\": \"ve\",\n  \"Go\": \"Gitmek\",\n  \"Go to page\": \"Sayfaya git\",\n  \"Copy to Clipboard\": \"Panoya kopyala\",\n  \"Reveal Contents\": \"İçeriği Göster\",\n  \"Selected Site\": \"Seçili Site\",\n  \"Use Emmet abbreviations\": \"Emmet kısaltmalarını kullanın\",\n  \"A record does not exist for the selected site. Create one?\": \"Seçilen site için bir kayıt mevcut değil. Bir tane yarat?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Girdiğiniz bilgiler kayıtlarla eşleşmiyor. Lütfen kontrol edip tekrar deneyin.\",\n  \"Administration Area\": \"Yönetim Paneli\",\n  \"Password Reset\": \"Şifre Sıfırla\",\n  \"Please enter a new password.\": \"Yeni Şifrenizi girin\",\n  \"Password\": \"Şifre\",\n  \"Password Restore\": \"Şifre Geri Yükleme\",\n  \"Please enter your login to restore the password.\": \"Kullanıcı adınızı girin\",\n  \"A user could not be found with a login value of ':login'\": \"':login' kullanıcı adı bulunamadı.\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Email adresinize şifrenizi nasıl sıfırlayacağınıza dair bilgiler gönderildi.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Hatalı giriş yaptınız. Lütfen tekrar deneyin!\",\n  \"Unable to reset your password!\": \"Şifre sıfırlanamadı!\",\n  \"Password has been reset. You may now sign in.\": \"Şifreniz başarıyla sıfırlandı. Giriş yapabilirsiniz.\",\n  \"Restore\": \"Geri yükle\",\n  \"Reset\": \"Sıfırla\",\n  \"Stay logged in\": \"Beni hatırla\",\n  \"Forgot password?\": \"Şifrenizi mi unuttunuz?\",\n  \"Global Editor Settings\": \"Genel Düzenleyici Ayarları\",\n  \"Manage Widgets\": \"Eklentileri yönet\",\n  \"Add Widget\": \"Eklenti ekle\",\n  \"Set the current layout as the default?\": \"Şuan kullanılan şablonu öntanımlı yapmak istediğinize emin misiniz?\",\n  \"Make Default\": \"Öntanımlı yap\",\n  \"Reset layout back to default?\": \"Şablonu özgün haline döndermek istediğinize emin misiniz?\",\n  \"Reset Layout\": \"Şablonu sıfırla\",\n  \"Widget\": \"Eklenti\",\n  \"please select\": \"lütfen seçin\",\n  \"Width\": \"Genişlik\",\n  \"full width\": \"tam genişlik\",\n  \"Create Widgets\": \"Widget'lar Oluşturun\",\n  \"not equal to\": \"eşit değil\",\n  \"Light Mode\": \"Işık Modu\",\n  \"Dark Mode\": \"Karanlık Mod\",\n  \"OS Default\": \"İşletim Sistemi Varsayılanı\",\n  \"Create a Custom Palette\": \"Özel Palet Oluşturun\",\n  \"Custom Palette\": \"Özel Palet\",\n  \"Primary Color\": \"Ana Renk color\",\n  \"Secondary Color\": \"İkincil Renk color\",\n  \"Selection Color\": \"Seçim Rengi\",\n  \"Nav Text\": \"Gezinme Metni\",\n  \"Nav Background\": \"Gezinme Arka Planı\",\n  \"Sidebar Text\": \"Kenar Çubuğu Metni\",\n  \"Sidebar Background\": \"Kenar çubuğu arka planı\",\n  \"Sidebar Active Text\": \"Kenar Çubuğu Etkin Metni\",\n  \"Sidebar Active Background\": \"Kenar Çubuğu Etkin Arka Planı\",\n  \"Sidebar Hover Background\": \"Kenar Çubuğu Vurgulu Arka Plan\",\n  \"Settings Text\": \"Ayarlar Metni\",\n  \"Settings Background\": \"Ayarlar Arka Planı\",\n  \"Settings Item Background\": \"Ayarlar Öğe Arka Planı\",\n  \"Settings Active Color\": \"Ayarlar Etkin Renk\",\n  \"Settings Active Background\": \"Ayarlar Etkin Arka Plan\",\n  \"Settings Hover Background\": \"Ayarlar Vurgulu Arka Plan\",\n  \"This name is shown in the title area of the back-end.\": \"Bu isim, Yönetim Panelinde başlık olarak kullanılacaktır.\",\n  \"App Name\": \"Site Adı\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Bu motto Yönetim Paneli giriş ekranında görüntülenecektir.\",\n  \"App Tagline\": \"Site Mottosu\",\n  \"Brand\": \"Marka\",\n  \"Upload a custom logo to use in the back-end.\": \"Yönetim Panelinde kullanılacak logoyu yükleyin.\",\n  \"Logo\": \"Logo\",\n  \"Upload a custom favicon to use in the back-end\": \"Arka uçta kullanmak için özel bir favicon yükleyin\",\n  \"Favicon\": \"Favicon\",\n  \"Navigation Logo\": \"Navigasyon Logosu\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Gezinmede pano bağlantısını özel bir logoyla değiştirir.\",\n  \"Dashboard Icon\": \"Pano Simgesi\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Pano simgesi (60x60) için özel bir resim kullanın.\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Bu mesaj, arka uç için oturum açma ekranında gösterilir.\",\n  \"Welcome Message\": \"Karşılama mesajı\",\n  \"Login Page\": \"Giriş sayfası\",\n  \"Background Type\": \"Arka Plan Türü\",\n  \"Flat Color\": \"Düz Renk\",\n  \"Wallpaper\": \"duvar kağıdı\",\n  \"Wallpaper Size\": \"Duvar Kağıdı Boyutu\",\n  \"Auto\": \"Oto\",\n  \"Cover\": \"Kapak\",\n  \"Background Wallpaper Image\": \"Arka Plan Duvar Kağıdı Resmi\",\n  \"Image\": \"Resim\",\n  \"Random Autumn Images\": \"Rastgele Sonbahar Görüntüleri\",\n  \"Custom Image\": \"Özel Resim\",\n  \"Login Page Image\": \"Giriş Sayfası Resmi\",\n  \"Colors\": \"Renkler\",\n  \"Color Mode\": \"Renk Modu\",\n  \"Color Preset\": \"Renk Ön Ayarı\",\n  \"Menu Style\": \"Menü stili\",\n  \"Navigation\": \"Navigsyon\",\n  \"Custom Stylesheet\": \"Özel CSS\",\n  \"Styles\": \"Stiller\",\n  \"Inline\": \"Sıralı\",\n  \"Text\": \"Metin\",\n  \"Tiles\": \"Mozaik\",\n  \"Collapsed\": \"Katlanmış\",\n  \"Icons\": \"simgeler\",\n  \"Left Side\": \"Sol Taraf\",\n  \"Add New Item\": \"Yeni öğe ekle\",\n  \"Link Color\": \"Bağlantı rengi\",\n  \"Current Password\": \"Mevcut Şifre\",\n  \"New Password\": \"Yeni Şifre\",\n  \"Current password does not match. Please try again!\": \"Geçerli parola eşleşmiyor. Lütfen tekrar deneyin!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Şifrenizin süresi dolmuştur, lütfen güvenlik nedeniyle yeni bir şifre oluşturunuz.\",\n  \"Region\": \"Bölge\",\n  \"Locale\": \"Dil\",\n  \"Select your desired locale for language use.\": \"Yönetim Paneli dil seçiminizi belirleyin.\",\n  \"Timezone\": \"Zaman Dilimi\",\n  \"Adjust displayed dates to this timezone.\": \"Tarihleri bu zaman dilimine göre göster.\",\n  \"Code Editor\": \"Kod editörü\",\n  \"Color Scheme\": \"Renk şeması\",\n  \"Word Wrap\": \"Uzun kelimeleri yeni satırda göster\",\n  \"Off\": \"Kapalı\",\n  \"40 Characters\": \"40 Karakter\",\n  \"80 Characters\": \"80 Karakter\",\n  \"Fluid\": \"Akışkan\",\n  \"Font Size\": \"Font büyüklüğü\",\n  \"Tab Size\": \"Tab genişliği\",\n  \"Code Folding\": \"Kod katlama (Alt satıra inme)\",\n  \"Mark begin\": \"Başlangıcı işaretle\",\n  \"Mark begin and end\": \"Başlangıcı ve sonu işaretle\",\n  \"Autocompletion\": \"Otomatik kod tamamlama\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Otomatik tamamlama (Temel) (Ctrl + Boşluk)\",\n  \"Live Autocompletion\": \"Anlık Otomatik tamamlama\",\n  \"Show gutter\": \"Satır numarasını göster\",\n  \"Highlight active line\": \"Aktif satırı vurgula\",\n  \"Automatically close tags\": \"Etiketleri ve özel karakterleri otomatik kapat\",\n  \"Indent using tabs\": \"Tab girintisi\",\n  \"Show indent guides\": \"İçeri girintileri göster\",\n  \"Show invisible characters\": \"Gizli karakterleri göster\",\n  \"Show print margin\": \"Yazdırma boşluklarını göster\",\n  \"Custom styles to include in the HTML editor.\": \"HTML editöre uygulanacak özel stiller.\",\n  \"Markup Styles\": \"Markup Stilleri\",\n  \"Paragraph Formats\": \"Paragraf Biçimleri\",\n  \"Markup Classes\": \"Markup Classlar\",\n  \"Label\": \"Etiket\",\n  \"Paragraph\": \"Paragraf\",\n  \"Class Name\": \"Class ismi\",\n  \"Link\": \"Link\",\n  \"Table\": \"Tablo\",\n  \"Table Cell\": \"Tablo Hücresi\",\n  \"Allowed Tags\": \"İzin verilen taglar\",\n  \"The list of allowed tags.\": \"İzin verilen taglar listesi.\",\n  \"Markup Tags\": \"Markup Tagları\",\n  \"Allowed Empty Tags\": \"İzin verilen boş taglar\",\n  \"The list of tags that are not removed when they have no content inside.\": \"İçeriği olmasada kaydederken silinmeyen, bulunmasına izin verilen taglar.\",\n  \"Do Not Wrap Tags\": \"Tagları sarmalama\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Tag blokları içinde sarmalanmayacak taglar listesi.\",\n  \"Remove Tags\": \"Silinecek taglar\",\n  \"The list of tags that are removed together with their content.\": \"İçeriği ile birlikte silinecek taglar listesi.\",\n  \"Line Breaker Tags\": \"Satır atlatma etiketleri\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Aralarına bir satır atlatma öğesi yerleştirmek için kullanılan etiketlerin listesi.\",\n  \"Toolbar Buttons\": \"Araç Çubuğu Düğmeleri\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Rich Editor'de varsayılan olarak görüntülenecek Araç Çubuğu düğmeleri.\",\n  \"Insert a preset toolbar button configuration\": \"Önceden ayarlanmış bir araç çubuğu düğmesi yapılandırması ekleyin\",\n  \"Allowed Attributes\": \"İzin Verilen Özellikler\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Normal izinlere ek olarak izin verilen HTML özelliklerinin listesi.\",\n  \"Enable code snippets (Tab)\": \"Kod snippetlerini aktifleştir (Tab)\",\n  \"Title\": \"Başlık\",\n  \"Description\": \"Tanım\",\n  \"Attachment\": \"Dosya Eki\",\n  \"Attachment URL\": \"Ek URLsi\",\n  \"Add a title and description for this attachment.\": \"Bu ek için bir başlık ve tanım girin.\",\n  \"Are you sure?\": \"Emin misiniz?\",\n  \"Upload Error\": \"Dosya yükleme hatası\",\n  \"Remove File\": \"Dosyayı sil\",\n  \"Create :name\": \":name Oluştur\",\n  \"Update :name\": \":name Güncelle\",\n  \"Add :name\": \":name Ekle\",\n  \"Link :name\": \":name bağla\",\n  \"Unlink\": \"Bağlamayı kaldır\",\n  \"Preview :name\": \":name Önizle\",\n  \"Link a New :name\": \"Yeni bir :name bağla\",\n  \"Add a New :name\": \"Yeni bir :name ekle\",\n  \"Related :name Data\": \"İlişkili veri :name\",\n  \":name Created\": \":name başarıyla oluşturuldu\",\n  \":name Updated\": \":name başarıyla güncellendi\",\n  \":name Deleted\": \":name başarıyla silindi\",\n  \"Form record with an ID of :id could not be found.\": \"ID'si :id olan Form bulunamadı.\",\n  \"Preview the Website\": \"Websiteyi Önizle\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Yönetim paneli gruplarını, kullanıcılarını ve izinlerini yönetin.\",\n  \"Branding & Appearance\": \"Yönetim paneli ayarlarını düzenle\",\n  \"Customize the administration area such as name, colors and logo.\": \"Yönetim Panelinin isim, renk şeması ve logo gibi ayarlarını düzenleyin.\",\n  \"Editor Settings\": \"Editör ayarları\",\n  \"Change the global editor preferences.\": \"Metin editörü ayarlarını düzenleyebilirsiniz.\",\n  \"My Account\": \"Kişisel Bilgilerim\",\n  \"Update your account details such as name, email address and password.\": \"Hesabınızın ismi, email adresi ve şifresi gibi bilgilerini düzenleyebilirsiniz.\",\n  \"Backend Preferences\": \"Panel Ayarları\",\n  \"Manage your account preferences such as desired language.\": \"Hesabınızın tercih edilen dil ayarını değiştirebilirsiniz.\",\n  \"security login\": \"güvenli oturum açma\",\n  \"List Setup\": \"Liste Ayarları\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Listede görmek istediğiniz sütunları seçmek için onay kutularını kullanın. Sütunları yukarı veya aşağı sürükleyerek konumlarını değiştirebilirsiniz.\",\n  \"Records Per Page\": \"Sayfa başına kayıt sayısı\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Sayfa başına görüntülenecek kayıt sayısını seçin. Tek sayfada yüksek miktarda kayıt görüntülemek sistem performansını azaltabilir.\",\n  \"Add Selected\": \"Seçilenleri ekle\",\n  \"Please specify the modelClass property for :type\": \":type tipi için modelClass özelliği tanımlamalısınız\",\n  \"Please specify some columns to export.\": \"Lütfen dışarı aktarılacak veri sütunlarını seçin.\",\n  \"Missing column identifier\": \"Sütun tnaımlayıcı eksik\",\n  \"Unknown column\": \"Tanımlanamayan sütun\",\n  \"Please specify some columns to import.\": \"Lütfen içeri aktarılacak veri sütunlarını seçin.\",\n  \"Please match some columns first.\": \"Önce sütunları eşleştirin.\",\n  \"Please specify a match for the required field :label.\": \"Gerekli alan olan :label için bir eşleştirme yapın.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Kaynak dosyanın karakter kodlaması tanımlanamadı. Lütfen düzgün bir dosyayı özel dosya formatı seçeneğini seçerek içeri aktarmayı deneyin.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"ListController davranışını \\\"useList\\\" seçeneği aktif olacak şekilde sistem altyapısında Controller kısmında aktifleştirmelisiniz.\",\n  \"File export process completed!\": \"Dosya dışarı aktarma işlemi başarıyla tamamlandı!\",\n  \"The browser will now redirect to the file download.\": \"Tarayıcınız dosyayı otomatik olarak indirecektir\",\n  \"Ignore this column\": \"Bu sütunu göz ardı et\",\n  \"Drop column here...\": \"Sütunu buraya bırakın...\",\n  \"Please upload a valid CSV file.\": \"Lütfen geçerli bir CSV dosyası seçin.\",\n  \"Created\": \"Oluşturulma\",\n  \"Updated\": \"Güncellenme\",\n  \"Skipped\": \"Atlandı\",\n  \"Warnings\": \"Uyarılar\",\n  \"Errors\": \"Hatalar\",\n  \"Skipped Rows\": \"Atlanan Satırlar\",\n  \"Show Ignored Columns\": \"Göz ardı edilen sütunları göster\",\n  \"Auto Match Columns\": \"Sütunları otomatik eşleştir\",\n  \"File not found\": \"Dosya bulunamadı\",\n  \"There was no data supplied to export\": \"Dışarı aktarılacak veri bulunamadı\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \":name PHP eklentisi sistemde yüklü değil. Lütfen kütüphaneyi kurun ve eklentiyi aktifleştirin.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \":name isimli eklenti gerekli, fakat yüklenmemiş. Lütfen bu eklentiyi yükleyin.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \":name dizini ve alt dizinleri PHP tarafından yazılabilir değil. Lütfen bu dizindeki webserver için gerekli yazma izinlerini verin.\"\n}"
  },
  {
    "path": "modules/backend/lang/uk/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Неправильний тип поля :type.',\n    'options_method_invalid_model' => 'The attribute \\':field\\' does not resolve to a valid model. Try specifying the options method for model class :model explicitly.',\n    'options_method_not_exists' => 'Клас моделі :model повинен містити метод :method(), що повертає опції для поля \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'Назву класу віджету \\':name\\' не зареєстровано',\n    'not_bound' => 'Клас віджета \\':name\\' не прив\\'зано до контролера',\n  ],\n  'page' => [\n    'untitled' => 'Без назви',\n    'access_denied' => [\n      'label' => 'Доступ заборонено',\n      'help' => 'У Вас немає необхідних прав для перегляду цієї сторінки.',\n      'cms_link' => 'Повернутися до back-end-у',\n    ],\n    'no_database' => [\n      'label' => 'База данних відсутня',\n      'help' => 'Для доступу до back-end - потрібна база данних. Перевірте, налаштування та міграції бази данних, перш ніж спробувати знову.',\n      'cms_link' => 'Повернутися на домашню сторінку',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Частину \\':name\\' не знайдено.',\n  ],\n  'account' => [\n    'sign_out' => 'Вийти',\n    'login_placeholder' => 'логін',\n    'password_placeholder' => 'пароль',\n    'enter_email' => 'Введіть свою електронну адресу',\n    'email_placeholder' => 'електронна адреса',\n    'apply' => 'Застосувати',\n    'cancel' => 'Скасувати',\n    'delete' => 'Видалити',\n    'ok' => 'ОК',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Панель керування',\n    'widget_inspector_title' => 'Налаштування віджету',\n    'widget_inspector_description' => 'Налаштування віджету',\n    'widget_columns_label' => 'Ширина :columns',\n    'widget_columns_description' => 'Ширина віджету, число між 1 та 10.',\n    'widget_columns_error' => 'Будь ласка, уведіть ширину віджету як число між 1 та 10.',\n    'columns' => '{1} колонка|[2,4] колонки|[5,Inf] колонок',\n    'widget_new_row_label' => 'Перенести на новий рядок',\n    'widget_new_row_description' => 'Помістити віджет у новий рядок.',\n    'widget_title_label' => 'Назва віджету',\n    'widget_title_error' => 'Назва віджету є обов\\'язковою.',\n    'reset_layout_success' => 'Макет був скинутий',\n    'make_default_success' => 'Поточне розташування тепер за замовчуванням',\n    'collapse_all' => 'Згорнути',\n    'expand_all' => 'Розгорнути',\n    'status' => [\n      'widget_title_default' => 'Статус системи',\n      'update_available' => 'Доступно {0} оновлень!|Доступно {1} оновлення!|Доступно [2,4] оновленя|Доступно [5,Inf] оновлень!',\n      'updates_pending' => 'В очікуванні оновлення програмного забезпечення',\n      'updates_nil' => 'Програмне забезпечення в актуальному стані',\n      'updates_link' => 'Оновити',\n      'warnings_pending' => 'Деякі питання потребують уваги',\n      'warnings_nil' => 'Немає попереджень для відображення',\n      'warnings_link' => 'Переглянути',\n      'core_build' => 'Версія системи',\n      'event_log' => 'Журнал подій',\n      'request_log' => 'Журнал запитів',\n      'app_birthday' => 'Сайт засновано',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Ласкаво просимо',\n      'welcome_back_name' => 'Ласкаво просимо до :app, :name.',\n      'welcome_to_name' => 'Ласкаво просимо до :app, :name.',\n      'first_sign_in' => 'Це ваша перша авторизація.',\n      'last_sign_in' => 'Дата останньої авторизації',\n      'view_access_logs' => 'Перегляд журналу доступу',\n      'nice_message' => 'Гарного дня!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Адміністратор',\n    'list_title' => 'Керування адміністраторами',\n    'new' => 'Новий адміністратор',\n    'first_name' => 'Ім\\'я',\n    'last_name' => 'Прізвище',\n    'full_name' => 'Повне ім\\'я',\n    'email' => 'Електронна пошта',\n    'role_field' => 'Роль',\n    'role_comment' => 'Ролі визначають рівні доступу користувачів, які можна визначити у вкладці \"Права\".',\n    'groups' => 'Групи',\n    'groups_comment' => 'Вкажіть до яких груп повинен належати цей обліковий запис.',\n    'avatar' => 'Аватар',\n    'password' => 'Пароль',\n    'password_confirmation' => 'Підтвердження паролю',\n    'permissions' => 'Дозволи',\n    'account' => 'Обліковий запис',\n    'superuser' => 'Супер-адміністратор',\n    'superuser_comment' => 'Надає цьому обліковому запису необмежений доступ.',\n    'send_invite' => 'Надіслати запрошення за електронною адресою',\n    'send_invite_comment' => 'Надсилає вітальне повідомлення, що містить інформацію про ім\\'я користувача та пароль.',\n    'delete_confirm' => 'Ви дійсно хочете видалити цього адміністратора?',\n    'return' => 'Повернутися до списку адміністраторів',\n    'allow' => 'Дозволити',\n    'inherit' => 'Успадкувати',\n    'deny' => 'Заборонити',\n    'activated' => 'Активований',\n    'last_login' => 'Останній вхід',\n    'created_at' => 'Створено',\n    'updated_at' => 'Оновлено',\n    'group' => [\n      'name' => 'Група',\n      'name_comment' => 'Назва відображається на сторінці стоврення/редагування адміністратора.',\n      'name_field' => 'Назва',\n      'description_field' => 'Опис',\n      'is_new_user_default_field_label' => 'Група за замовчуванням',\n      'is_new_user_default_field_comment' => 'Додавання нових адміністраторів в цю групу за замовчуванням',\n      'code_field' => 'Код',\n      'code_comment' => 'Введіть унікальний код якщо Ви хочете отримувати до неї доступ через API.',\n      'list_title' => 'Керування групами',\n      'new' => 'Нова група',\n      'delete_confirm' => 'Видалити цю групу адміністраторів?',\n      'return' => 'Повернутись до списку груп',\n      'users_count' => 'Користувачі',\n    ],\n    'role' => [\n      'name' => 'Роль',\n      'name_field' => 'Назва',\n      'name_comment' => 'Назва відображається у списку ролей у формі \"Адміністратор\".',\n      'description_field' => 'Опис',\n      'code_field' => 'Код',\n      'code_comment' => 'Введіть унікальний код, якщо ви хочете отримати доступ до об\\'єкту ролі за допомогою API.',\n      'list_title' => 'Керування ролями',\n      'new' => 'Нова роль',\n      'delete_confirm' => 'Видалити цю роль адміністратора?',\n      'return' => 'Повернутися до списку ролей',\n      'users_count' => 'Користувачі',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Немає автентифікованих користувачів, чиї налаштування можна завантажити або зберегти.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Список',\n    'search_prompt' => 'Пошук…',\n    'no_records' => 'У цьому вигляді немає записів.',\n    'missing_model' => 'Поведінка списку, що використовується в :class не містить визначення моделі.',\n    'missing_column' => 'Немає визначень колонок для :columns.',\n    'missing_columns' => 'Список використаний в :class не містить визначених колонок.',\n    'missing_definition' => 'Поведінка списку не містить колонки для \\':field\\'.',\n    'missing_parent_definition' => 'Список поведінки не містить визначення \\':definition\\'.',\n    'behavior_not_ready' => 'Поведінку списку не було ініціалізовано, перевірте чи Ви викликали makeLists() у своєму контролері.',\n    'invalid_column_datetime' => 'Значення колонки \\':column\\' не є DateTime-об\\'єктом, Ви не пропускаєте посилання на $dates посилання в моделі?',\n    'pagination' => 'Показано записів: :from-:to з :total',\n    'first_page' => 'Перша сторінка',\n    'last_page' => 'Остання',\n    'prev_page' => 'Попередня сторінка',\n    'next_page' => 'Наступна сторінка',\n    'refresh' => 'Оновити',\n    'updating' => 'Оновлення…',\n    'loading' => 'Завантаження…',\n    'check' => 'Перевірити',\n    'delete_selected' => 'Видалити обрані',\n    'delete_selected_empty' => 'Немає обраних записів до видалення.',\n    'delete_selected_confirm' => 'Видалити обрані записи?',\n    'delete_selected_success' => 'Обрані записи успішно видалено',\n    'column_switch_true' => 'Так',\n    'column_switch_false' => 'Ні',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Натисніть %s або перетягніть файл сюди для завантаження',\n  ],\n  'form' => [\n    'create_title' => 'Нова :name',\n    'update_title' => 'Редагувати :name',\n    'preview_title' => 'Попередній перегляд :name',\n    'reset_success' => 'Успішно скасовано',\n    'missing_id' => 'Ідентифікатор запису форми не було вказано.',\n    'missing_model' => 'Поведінка форми, що використовується в :class не містить визначення моделі.',\n    'missing_definition' => 'Поведніка форми не містить поля для \\':field\\'.',\n    'action_confirm' => 'Ви впевнені?',\n    'create' => 'Створити',\n    'create_and_close' => 'Створити та закрити',\n    'creating' => 'Створення…',\n    'creating_name' => 'Створення :name…',\n    'save' => 'Зберегти',\n    'save_and_close' => 'Зберегти та закрити',\n    'saving' => 'Збереження…',\n    'saving_name' => 'Збереження :name…',\n    'delete' => 'Видалити',\n    'deleting' => 'Видалення…',\n    'confirm_delete' => 'Ви дійсно хочете видалити цей запис?',\n    'confirm_delete_multiple' => 'Ви дійсно хочете видалити обрані записи?',\n    'deleting_name' => 'Видалення :name…',\n    'reset_default' => 'Скинути за замовчуванням',\n    'resetting' => 'Скидання',\n    'resetting_name' => 'Скидання :name',\n    'undefined_tab' => 'Різне',\n    'field_off' => 'Викл',\n    'field_on' => 'Вкл',\n    'add' => 'Додати',\n    'apply' => 'Застосувати',\n    'cancel' => 'Скасувати',\n    'close' => 'Закрити',\n    'confirm' => 'Підтвердити',\n    'reload' => 'Перезавантажити',\n    'complete' => 'Готово',\n    'ok' => 'ОК',\n    'or' => 'або',\n    'confirm_tab_close' => 'Ви дійсно хочете закрити цю вкладку? Незбережені зміни буде втрачено.',\n    'behavior_not_ready' => 'Поведінку форми не було ініціалізовано, перевірте чи Ви викликали initForm() у своєму контролері.',\n    'preview_no_files_message' => 'Немає завантажених файлів.',\n    'preview_no_media_message' => 'Немає обраного файла.',\n    'preview_no_record_message' => 'Немає обраних записів.',\n    'select' => 'Обрати',\n    'select_all' => 'вибрати все',\n    'select_none' => 'вибрати жоден',\n    'insert_row' => 'Вставити рядок',\n    'insert_row_below' => 'Вставити рядок нижче',\n    'delete_row' => 'Видалити рядок',\n    'concurrency_file_changed_title' => 'Файл було змінено',\n    'concurrency_file_changed_description' => 'Файл, що Ви редагуєте, було змінено на диску іншим користувачем. Ви можете або перезавантажити файл та втратити свої зміни, або перезаписати файл на диску.',\n    'return_to_list' => 'Повернутися до списку',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Знайти запис',\n    'cancel' => 'Скасувати',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Поведінка відношення не містить жодного налаштування для \\':config\\'.',\n    'missing_definition' => 'Поведінка відношення не містить визначення для \\':field\\'.',\n    'missing_model' => 'Поведінка відношення, що використовується в :class не містить визначення моделі.',\n    'invalid_action_single' => 'Ця дія не може бути здійсненою щодо одного відношення.',\n    'invalid_action_multi' => 'Ця дія не може бути здійснена щодо кількох відношень.',\n    'help' => 'Натисніть по елементу щоб додати',\n    'add' => 'Додати',\n    'link_selected' => 'Обрано зв\\'язок',\n    'cancel' => 'Скасувати',\n    'close' => 'Закрити',\n    'create' => 'Створити',\n    'update' => 'Оновити',\n    'preview' => 'Попередній перегляд',\n    'remove_name' => 'Видалити :name',\n    'delete_name' => 'Видалити :name',\n    'link' => 'Зв\\'язати',\n    'unlink_name' => 'Відв\\'язати :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Перевпорядкувати записи',\n    'no_records' => 'Немає доступних до сортування записів.',\n  ],\n  'model' => [\n    'name' => 'Модель',\n    'not_found' => 'Модель \\':class\\' з ідентифікатором :id не знайдено',\n    'missing_id' => 'Не вказано ідентифікатор для пошуку запису моделі.',\n    'missing_relation' => 'Модель \\':class\\' не містить визначення для \\':relation\\'.',\n    'missing_method' => 'Модель \\':class\\' не містить метод \\':method\\'.',\n    'invalid_class' => 'Модель :model використана в :class не є правильною, вона повинна успадковувати клас \\\\Model .',\n    'mass_assignment_failed' => 'Масове призначення не вдалось для атрибуту \\':attribute\\' моделі.',\n  ],\n  'warnings' => [\n    'tips' => 'Підказки з налаштування системи',\n    'tips_description' => 'Є речі, на які потрібно звернути увагу щоб правильно налаштувати систему.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Мої налаштування',\n    'menu_description' => 'Налаштування, що стосуються Вашого адміністративного облікового запису',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Акцентний колір',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'всі',\n    'options_method_not_exists' => 'Модель класу :model повинна містити метод :method() який повертає значення для поля \\':filter\\'.',\n    'date_all' => 'весь період',\n  ],\n  'import_export' => [\n    'export_error' => 'Помилка експорту',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Керування медіафайлами',\n  ],\n  'mediafinder' => [\n    'label' => 'Пошук медіа',\n    'default_prompt' => 'Натисніть на кнопку %s, щоб знайти медіафайл',\n  ],\n  'media' => [\n    'menu_label' => 'Медіафайли',\n    'upload' => 'Завантажити',\n    'move' => 'Перемістити',\n    'delete' => 'Видалити',\n    'add_folder' => 'Створити папку',\n    'search' => 'Пошук',\n    'display' => 'Показати',\n    'filter_everything' => 'Всі файли',\n    'filter_images' => 'Зображення',\n    'filter_video' => 'Відео',\n    'filter_audio' => 'Музика',\n    'filter_documents' => 'Документи',\n    'library' => 'Бібліотека',\n    'size' => 'Розмір',\n    'title' => 'Ім\\'я',\n    'last_modified' => 'Остання зміна',\n    'public_url' => 'Публічна адреса',\n    'click_here' => 'Натисніть тут',\n    'thumbnail_error' => 'Помилка створення мініатюри.',\n    'return_to_parent' => 'Повернутися до батьківської папки',\n    'return_to_parent_label' => 'Піднятися на рівень вище...',\n    'nothing_selected' => 'Нічого не обрано.',\n    'multiple_selected' => 'Обрано кілька об\\'єктів.',\n    'uploading_file_num' => 'Завантаження файлів: :number',\n    'uploading_complete' => 'Завантаження файлів завершено!',\n    'uploading_error' => 'Помилка завантаження',\n    'type_blocked' => 'Тип файлу, який використовується заблокований з міркувань безпеки.',\n    'order_by' => 'Сортувати за',\n    'folder' => 'Папка',\n    'no_files_found' => 'Жоден з файлів не задовольняє вашому запиту.',\n    'delete_empty' => 'Будь ласка, оберіть об\\'єкти для видалення.',\n    'delete_confirm' => 'Ви дійсно хочете видалити вибрані об\\'єкти?',\n    'error_renaming_file' => 'Помилка зміни імені файлу.',\n    'new_folder_title' => 'Нова папка',\n    'folder_name' => 'Назва папки',\n    'error_creating_folder' => 'Помилка створення папки',\n    'folder_or_file_exist' => 'Папка або файл з таким ім\\'ям вже існує.',\n    'move_empty' => 'Будь ласка, оберіть об\\'єкти для переміщення.',\n    'move_popup_title' => 'Переміщення файлів або папок',\n    'move_destination' => 'Папка призначення',\n    'please_select_move_dest' => 'Будь ласка, оберіть папку призначення для переміщення.',\n    'move_dest_src_match' => 'Будь ласка, оберіть іншу папку.',\n    'empty_library' => 'Бібліотека медіафайлів порожня. Для початку завантажте файли або створіть папки.',\n    'insert' => 'Вставити',\n    'crop_and_insert' => 'Обрізати і вставити',\n    'select_single_image' => 'Будь ласка, оберіть одне зображення.',\n    'selection_not_image' => 'Обраний елемент не є зображенням.',\n    'restore' => 'Скасувати всі зміни',\n    'resize' => 'Зміна розміру...',\n    'selection_mode_normal' => 'Нормальний',\n    'selection_mode_fixed_ratio' => 'Фіксоване співвідношення',\n    'selection_mode_fixed_size' => 'Фіксований розмір',\n    'height' => 'Висота',\n    'width' => 'Ширина',\n    'selection_mode' => 'Режим виділення',\n    'resize_image' => 'Зміна розміру зображення',\n    'image_size' => 'Розмір зображення:',\n    'selected_size' => 'Обрано:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/uk.json",
    "content": "{\n  \"Cancel\": \"Скасувати\",\n  \"You are viewing as\": \"Ви переглядаєте як\",\n  \"Preview Role\": \"Перегляд ролі\",\n  \"This lets you test the actions this role can perform.\": \"Це дозволяє перевірити дії, які може виконувати ця роль.\",\n  \"View As Role\": \"Переглянути роль\",\n  \"Return to Role Settings\": \"Повернутися до налаштувань ролі\",\n  \"Password must have a minimum of length of :min characters\": \"Пароль має містити мінімум :min символів\",\n  \"Password must contain at least one uppercase character.\": \"Пароль має містити принаймні один символ верхнього регістру.\",\n  \"Password must contain at least one lowercase character.\": \"Пароль має містити принаймні один символ нижнього регістру.\",\n  \"Password must contain at least one number.\": \"Пароль має містити принаймні одне число.\",\n  \"Password must contain at least one nonalphanumeric character.\": \"Пароль має містити принаймні один спецсимвол.\",\n  \"Welcome to your Administration Area, :name\": \"Ласкаво просимо до вашої адміністративної зони, :name\",\n  \"Duplicate\": \"Дублювати\",\n  \"Expand\": \"Розгорнути\",\n  \"Collapse\": \"Згорнути\",\n  \"Move Up\": \"↑ Підняти\",\n  \"Move Down\": \"↓ Опустити\",\n  \"Remove\": \"Видалити\",\n  \"Manage Item\": \"Керувати елементом\",\n  \"Clear Filters\": \"Очистити фільтри\",\n  \"Filter Setup\": \"Налаштування фільтра\",\n  \"Apply\": \"Застосувати\",\n  \"Clear\": \"Очистити\",\n  \"is equal to\": \"дорівнює\",\n  \"is between\": \"знаходиться між\",\n  \"contains\": \"містить\",\n  \"is before\": \"є перед\",\n  \"is after\": \"є після\",\n  \"is greater than\": \"більше ніж\",\n  \"is less than\": \"менше ніж\",\n  \"1. Export output format\": \"1. Експортувати формат виводу\",\n  \"File Format\": \"Формат файлу\",\n  \"Delimiter Character\": \"Розділювач\",\n  \"Enclosure Character\": \"Символ закриття\",\n  \"Escape Character\": \"Символ екранування\",\n  \"2. Select columns to export\": \"2. Оберіть колонки для експорту\",\n  \"Columns\": \"Колонки\",\n  \"3. Set export options\": \"3. Встановіть опції експорту\",\n  \"CSV Custom\": \"Власний формат\",\n  \"1. Upload an Import File\": \"1. Завантажити CSV-файл\",\n  \"Import File\": \"Імпортувати файл\",\n  \"File Encoding\": \"Кодування файлу\",\n  \"First row contains column titles\": \"Перший рядок містить назви колонок\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Залиште це відміченим якщо перший рядок CSV використовується для назв колонок.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Співставити колонки файлу до полів бази даних\",\n  \"File columns\": \"Колонки файлу\",\n  \"Database fields\": \"Поля бази даних\",\n  \"3. Set Import Options\": \"3. Встановити опції імпорту\",\n  \"Export progress\": \"Прогрес експорту\",\n  \"Processing\": \"Обробка\",\n  \"Import progress\": \"Прогрес імпорту\",\n  \"Import error\": \"Помилка імпорту\",\n  \"Export error\": \"Помилка експорту\",\n  \"Column preview\": \"Попередній перегляд колонки\",\n  \"Column\": \"Колонка\",\n  \"Disable\": \"Вимкнути\",\n  \"Enable\": \"Увімкнути\",\n  \"Delete\": \"Видалити\",\n  \"Export\": \"Експорт\",\n  \"Import\": \"Імпорт\",\n  \"Select Action\": \"Оберіть Дію\",\n  \"Please create a new account for logging in to the Administration Area.\": \"Будь ласка, створіть новий обліковий запис для входу в Адміністративну область.\",\n  \"First Name\": \"Ім'я\",\n  \"Last Name\": \"Прізвище\",\n  \"Email Address\": \"Адреса електронної пошти\",\n  \"Pick a Username\": \"Виберіть ім’я користувача\",\n  \"Enter New Password\": \"Введіть новий пароль\",\n  \"Confirm Password\": \"Підтвердьте пароль\",\n  \"Create Account\": \"Створити обліковий запис\",\n  \"Getting Ready\": \"Майже готово\",\n  \"Just a few more minutes\": \"Ще кілька хвилин\",\n  \"Migrating Database\": \"Міграція бази даних\",\n  \"Access the Backend Panel\": \"Доступ до панелі управління\",\n  \"View Backend During Maintenance\": \"Перегляд серверної частини під час обслуговування\",\n  \"Perform Software Updates\": \"Виконуйте оновлення програмного забезпечення\",\n  \"In Maintenance\": \"На технічному обслуговуванні\",\n  \"The site is currently in maintenance mode, please check back later.\": \"Зараз сайт перебуває в режимі обслуговування, будь ласка, перевірте пізніше.\",\n  \"Dashboard\": \"Панель приладів\",\n  \"Administrators\": \"Адміністратори\",\n  \"Manage Admins\": \"Керування адмінами\",\n  \"Create Admins\": \"Створити адміністраторів\",\n  \"Moderate Admins\": \"Помірні адміністратори\",\n  \"Manage account suspension and ban admin accounts\": \"Керуйте призупиненням облікового запису та блокуванням облікових записів адміністратора\",\n  \"Role Permissions\": \"Керування ролями\",\n  \"Team Groups\": \"Групи\",\n  \"Manage Other Admins\": \"Керування іншими адмінами\",\n  \"Allow users to reset passwords and update emails.\": \"Дозволяє скидати паролі та оновлювати електронні листи.\",\n  \"Delete Admins\": \"Видалити адміністраторів\",\n  \"Preferences\": \"Вподобання\",\n  \"Settings\": \"Налаштування\",\n  \"Background Color\": \"Колір фону\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"Дозволити користувачам створювати нові ролі та редагувати або видаляти ролі, нижчі за їх найвищу роль.\",\n  \"Save Changes\": \"Зберегти зміни\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Цей журнал показує список успішних спроб входу адміністраторів. Записи зберігаються :days днів.\",\n  \"Access Log\": \"Журнал доступу\",\n  \"View a list of successful back-end user sign ins.\": \"Переглянути список успішних авторизацій в панелі управління.\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"Дата та час\",\n  \"Type\": \"Тип\",\n  \"IP address\": \"IP-адреса\",\n  \"Username\": \"Логін\",\n  \"Login\": \"Увійти\",\n  \"First name\": \"Ім'я\",\n  \"Last name\": \"Прізвище\",\n  \"Email\": \"Електронна адреса\",\n  \"A custom schema is used for this file format.\": \"Для цього формату файлу використовується спеціальна схема.\",\n  \"Select\": \"Обрати\",\n  \"Replace\": \"Замінити\",\n  \"and\": \"і\",\n  \"Go\": \"Перейти\",\n  \"Go to page\": \"Перейти на сторінку\",\n  \"Copy to Clipboard\": \"Копіювати в буфер\",\n  \"Reveal Contents\": \"Показати вміст\",\n  \"Selected Site\": \"Обраний сайт\",\n  \"Use Emmet abbreviations\": \"Використовувати скорочення Emmet\",\n  \"A record does not exist for the selected site. Create one?\": \"Запис не існує для обраного сайту. Створити новий?\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"Дані які ви ввели, не відповідають нашим записам. Будь ласка, перевірте і повторіть спробу.\",\n  \"Administration Area\": \"Зона адміністрування\",\n  \"Password Reset\": \"Скинути пароль\",\n  \"Please enter a new password.\": \"Введіть новий пароль.\",\n  \"Password\": \"Пароль\",\n  \"Password Restore\": \"Відновлення паролю\",\n  \"Please enter your login to restore the password.\": \"Введіть своє ім'я користувача.\",\n  \"A user could not be found with a login value of ':login'\": \"Неможливо знайти користувача з логіном ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"На Вашу електронну адресу було надіслано інструкції з відновлення паролю.\",\n  \"Invalid password reset data supplied. Please try again!\": \"Надано неправильні дані з відновлення паролю. Будь ласка, спробуйте знову!\",\n  \"Unable to reset your password!\": \"Не вдалося змінити Ваш пароль!\",\n  \"Password has been reset. You may now sign in.\": \"Ваш пароль було успішно змінено. Тепер Ви можете ввійти.\",\n  \"Restore\": \"Відновити\",\n  \"Reset\": \"Скинути\",\n  \"Stay logged in\": \"Залишатись в системі\",\n  \"Forgot password?\": \"Забули свій пароль?\",\n  \"Global Editor Settings\": \"Глобальні параметри редактора\",\n  \"Manage Widgets\": \"Керування віджетами\",\n  \"Add Widget\": \"Додати віджет\",\n  \"Set the current layout as the default?\": \"Встановіть поточну схему розташування за замовчуванням?\",\n  \"Make Default\": \"Використовувати за замовчуванням\",\n  \"Reset layout back to default?\": \"Ви дійсно хочете встановити за замовчуванням?\",\n  \"Reset Layout\": \"Скидання макета\",\n  \"Widget\": \"Віджет\",\n  \"please select\": \"будь ласка, оберіть\",\n  \"Width\": \"Ширина\",\n  \"full width\": \"повна ширина\",\n  \"Create Widgets\": \"Створити віджети\",\n  \"not equal to\": \"не дорівнює\",\n  \"Light Mode\": \"Світлий режим\",\n  \"Dark Mode\": \"Темний режим\",\n  \"OS Default\": \"Системний режим\",\n  \"Create a Custom Palette\": \"Створити власну палітру\",\n  \"Custom Palette\": \"Власна палітра\",\n  \"Primary Color\": \"Основний колір\",\n  \"Secondary Color\": \"Вторинний колір\",\n  \"Selection Color\": \"Колір виділення\",\n  \"Nav Text\": \"Текст навігації\",\n  \"Nav Background\": \"Фон навігації\",\n  \"Sidebar Text\": \"Текст бокової панелі\",\n  \"Sidebar Background\": \"Фон бокової панелі\",\n  \"Sidebar Active Text\": \"Активний текст на бічній панелі\",\n  \"Sidebar Active Background\": \"Фон активної бічної панелі\",\n  \"Sidebar Hover Background\": \"Фон при наведенні бічної панелі\",\n  \"Settings Text\": \"Текст налаштувань\",\n  \"Settings Background\": \"Фон налаштувань\",\n  \"Settings Item Background\": \"Фон елементу налаштувань\",\n  \"Settings Active Color\": \"Активний колір налаштувань\",\n  \"Settings Active Background\": \"Активний фон налаштувань\",\n  \"Settings Hover Background\": \"Фон наведення налаштувань\",\n  \"This name is shown in the title area of the back-end.\": \"Ця назва показується в заголовку адмін панелі.\",\n  \"App Name\": \"Назва додатку\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Ця назва показується на екрані входу до адмін панелі.\",\n  \"App Tagline\": \"Девіз додатку\",\n  \"Brand\": \"Бренд\",\n  \"Upload a custom logo to use in the back-end.\": \"Завантажити власне лого для використання в адмін панелі.\",\n  \"Logo\": \"Лого\",\n  \"Upload a custom favicon to use in the back-end\": \"Завантажити власне лого для використання в панелі\",\n  \"Favicon\": \"Іконка сайту\",\n  \"Navigation Logo\": \"Логотип навігації\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"Замінює посилання на панель власним логотипом в навігації.\",\n  \"Dashboard Icon\": \"Значок панелі\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"Використовувати власне зображення для панелі (60x60).\",\n  \"This message is shown on the sign in screen for the back-end.\": \"Ця назва показується на екрані входу до панелі.\",\n  \"Welcome Message\": \"Привітальне повідомлення\",\n  \"Login Page\": \"Сторінка входу\",\n  \"Background Type\": \"Тип фону\",\n  \"Flat Color\": \"Плоский колір\",\n  \"Wallpaper\": \"Шпалери\",\n  \"Wallpaper Size\": \"Розмір шпалер\",\n  \"Auto\": \"Авто\",\n  \"Cover\": \"Розтягнути\",\n  \"Background Wallpaper Image\": \"Фоновий малюнок\",\n  \"Image\": \"Зображення\",\n  \"Random Autumn Images\": \"Випадкові осінні зображення\",\n  \"Custom Image\": \"Власне зображення\",\n  \"Login Page Image\": \"Зображення сторінки входу\",\n  \"Colors\": \"Кольори\",\n  \"Color Mode\": \"Колірний режим\",\n  \"Color Preset\": \"Заготовки кольорів\",\n  \"Menu Style\": \"Cтиль меню\",\n  \"Navigation\": \"Навігація\",\n  \"Custom Stylesheet\": \"Спеціальна таблиця стилів\",\n  \"Styles\": \"Стилі\",\n  \"Inline\": \"В лінію\",\n  \"Text\": \"Текст\",\n  \"Tiles\": \"Плитка\",\n  \"Collapsed\": \"Згорнутий\",\n  \"Icons\": \"Значки\",\n  \"Left Side\": \"Лівий бік\",\n  \"Add New Item\": \"Додати новий пункт\",\n  \"Link Color\": \"Колір посилання\",\n  \"Current Password\": \"Поточний пароль\",\n  \"New Password\": \"Новий пароль\",\n  \"Current password does not match. Please try again!\": \"Поточний пароль не збігається. Будь ласка, спробуйте ще раз!\",\n  \"Your password has expired, please create a new one for security reasons.\": \"Ваш пароль закінчився. Будь ласка, створіть новий з міркувань безпеки.\",\n  \"Region\": \"Область\",\n  \"Locale\": \"Мова\",\n  \"Select your desired locale for language use.\": \"Оберіть бажану мову для використання.\",\n  \"Timezone\": \"Часовий пояс\",\n  \"Adjust displayed dates to this timezone.\": \"Виводити дати в обраному часовому поясі.\",\n  \"Code Editor\": \"Редактор коду\",\n  \"Color Scheme\": \"Кольорова схема\",\n  \"Word Wrap\": \"Перенос слів\",\n  \"Off\": \"Вимкнено\",\n  \"40 Characters\": \"40 символів\",\n  \"80 Characters\": \"80 символів\",\n  \"Fluid\": \"Адаптивно\",\n  \"Font Size\": \"Розмір шрифту\",\n  \"Tab Size\": \"Розмір табуляції\",\n  \"Code Folding\": \"Згортання коду\",\n  \"Mark begin\": \"Відмітка на початку блоку\",\n  \"Mark begin and end\": \"Відмітка на початку та кінці блоку\",\n  \"Autocompletion\": \"Заповнити форму\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Автозаповнення (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Живе автозаповнення\",\n  \"Show gutter\": \"Показувати нумерацію рядків\",\n  \"Highlight active line\": \"Підсвічувати активні рядки\",\n  \"Automatically close tags\": \"Автоматично закривати теги та спецсимволи\",\n  \"Indent using tabs\": \"Відступ табуляціями\",\n  \"Show indent guides\": \"Показати відступ напрямних\",\n  \"Show invisible characters\": \"Показувати невидимі символи\",\n  \"Show print margin\": \"Показати запас друку\",\n  \"Custom styles to include in the HTML editor.\": \"Спеціальні стилі для включення в редактор HTML.\",\n  \"Markup Styles\": \"Стилі розмітки\",\n  \"Paragraph Formats\": \"Формати абзацу\",\n  \"Markup Classes\": \"Класи розмітки\",\n  \"Label\": \"Назва поля\",\n  \"Paragraph\": \"Абзац\",\n  \"Class Name\": \"Назва класу\",\n  \"Link\": \"Посилання\",\n  \"Table\": \"Таблиця\",\n  \"Table Cell\": \"Клітинки таблиці\",\n  \"Allowed Tags\": \"Дозволені теги\",\n  \"The list of allowed tags.\": \"Список дозволених тегів.\",\n  \"Markup Tags\": \"Теги розмітки\",\n  \"Allowed Empty Tags\": \"Дозволені порожні теги\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Контактні дані, які не видаляються, коли вони не мають ніякого змісту всередині.\",\n  \"Do Not Wrap Tags\": \"Не обертати теги\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Список тегів, які не повинні бути обгорнуті в блокові елементи.\",\n  \"Remove Tags\": \"Видалити теги\",\n  \"The list of tags that are removed together with their content.\": \"Теги які видаляються разом з їх вмістом.\",\n  \"Line Breaker Tags\": \"Теги переносу рядка\",\n  \"The list of tags that are used to place a line breaker element between.\": \"Список тегів, що використовуються для розриву між рядками.\",\n  \"Toolbar Buttons\": \"Кнопки панелі інструментів\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Кнопки панелі інструментів, які за замовчуванням відображаються в редакторі.\",\n  \"Insert a preset toolbar button configuration\": \"Вставити заготовку панелі з кнопками налаштувань\",\n  \"Allowed Attributes\": \"Дозволені атрибути\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"Перелік дозволених HTML-атрибутів, окрім вже прийнятних.\",\n  \"Enable code snippets (Tab)\": \"Увімкнути фрагменти коду (Tab)\",\n  \"Title\": \"Назва\",\n  \"Description\": \"Опис\",\n  \"Attachment\": \"Прикріплення\",\n  \"Attachment URL\": \"URL прикріплення\",\n  \"Add a title and description for this attachment.\": \"Додайте назву та опис для цього прикріплення.\",\n  \"Upload\": \"Завантажити\",\n  \"Are you sure?\": \"Ви впевнені?\",\n  \"Delete Selected\": \"Вилучити обрані\",\n  \"Upload Error\": \"Помилка завантаження\",\n  \"Remove File\": \"Видалити файл\",\n  \"Show Light Switch\": \"Показувати перемикач\",\n  \"Allow users to toggle the color mode from the navigation.\": \"Дозволити користувачам обирати режим кольору з навігації.\",\n  \"Create :name\": \"Створити :name\",\n  \"Update :name\": \"Оновити :name\",\n  \"Add :name\": \"Додати :name\",\n  \"Link :name\": \"Зв'язати :name\",\n  \"Unlink\": \"Відв'язати\",\n  \"Preview :name\": \"Попередній перегляд :name\",\n  \"Link a New :name\": \"Зв'язати нове :name\",\n  \"Add a New :name\": \"Додати нове :name\",\n  \"Related :name Data\": \"Відносяться дані :name\",\n  \":name Created\": \":name створено\",\n  \":name Updated\": \":name оновлено\",\n  \":name Deleted\": \":name видалено\",\n  \":name Added\": \":name додано\",\n  \":name Linked\": \":name пов'язано\",\n  \":name Removed\": \":name видалено\",\n  \":name Unlinked\": \":name відв’язано\",\n  \"Form record with an ID of :id could not be found.\": \"Запис форми з ідентифікатором :id не знайдено.\",\n  \"Remove Selected\": \"Видалити позначені\",\n  \"Unlink Selected\": \"Від'єднати вибрані\",\n  \"Preview the Website\": \"Перегляд сайту\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Керування користувачами, групами та дозволами в адмін панелі.\",\n  \"Define permissions for administrators based on their role.\": \"Визначити права для адміністраторів на основі їх ролі.\",\n  \"Add administrators to groups used for notifications and features.\": \"Додати адміністраторів до груп, що використовуються для сповіщень та функцій.\",\n  \"Branding & Appearance\": \"Налаштування вигляду back-end-у\",\n  \"Customize the administration area such as name, colors and logo.\": \"Налаштуйте адміністративну зону, зокрема ім'я, кольори та лого.\",\n  \"Editor Settings\": \"Налаштування редактору коду\",\n  \"Change the global editor preferences.\": \"Персоналізуйте свої налаштування редактору коду, такі як розмір шрифту та колір.\",\n  \"My Account\": \"Мій обліковий запис\",\n  \"Update your account details such as name, email address and password.\": \"Оновіть свої деталі облікового запису, такі як ім'я, електронна адреса та пароль.\",\n  \"Backend Preferences\": \"Налаштування адмін панелі\",\n  \"Manage your account preferences such as desired language.\": \"Керуйте своїми налаштуваннями облікового запису, як то бажана мова.\",\n  \"security login\": \"безпека ім'я користувача\",\n  \"List Setup\": \"Налаштування списку\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Використовуйте прапорці для вибору стовпців, які ви хочете бачити у списку. Ви можете змінити розташування стовпців, перетягуючи їх вгору або вниз.\",\n  \"Records Per Page\": \"Записів на сторінці\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Виберіть кількість записів на сторінці для відображення. Будь ласка, зверніть увагу, що велика кількість записів на одній сторінці може зменшити продуктивність.\",\n  \"Reset to Default\": \"Відновити за замовчуванням\",\n  \"Add Selected\": \"Додати вибрані\",\n  \"Create & Close\": \"Створити та закрити\",\n  \"Creating :name...\": \"Створення :name...\",\n  \"Save & Close\": \"Зберегти та закрити\",\n  \"Saving :name...\": \"Збереження :name...\",\n  \"Delete this record?\": \"Видалити цей запис?\",\n  \"Deleting :name...\": \"Видалення :name...\",\n  \"Loading...\": \"Завантаження...\",\n  \"Complete\": \"Готово\",\n  \"Please specify the modelClass property for :type\": \"Вкажіть властивість modelClass для :type\",\n  \"Please specify some columns to export.\": \"Оберіть стовпці для експорту.\",\n  \"Missing column identifier\": \"Відсутній ідентифікатор стовпця\",\n  \"Unknown column\": \"Невідомий стовпчик\",\n  \"Please specify some columns to import.\": \"Оберіть стовпці для імпорту.\",\n  \"Please match some columns first.\": \"Будь ласка, спочатку призначте кілька стовпців.\",\n  \"Please specify a match for the required field :label.\": \"Будь ласка, вкажіть відповідник для обов'язкового поля :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Неможливо розпізнати кодування файлу. Будь ласка, виберіть бажаний формат файлу з відповідним кодуванням для імпорту.\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Ви повинні реалізувати контролер ListController з увімкненим параметром експорту 'useList'.\",\n  \"File export process completed!\": \"Процес експорту файлів завершено!\",\n  \"The browser will now redirect to the file download.\": \"Браузер тепер перенаправлятиме до завантаження файлу.\",\n  \"Ignore this column\": \"Ігнорувати цей стовпець\",\n  \"Drop column here...\": \"Перетягніть стовпець сюди...\",\n  \"Please upload a valid CSV file.\": \"Будь ласка, завантажте правильний CSV-файл.\",\n  \"Created\": \"Створено\",\n  \"Updated\": \"Оновлено\",\n  \"Skipped\": \"Пропущено\",\n  \"Warnings\": \"Попередження\",\n  \"Errors\": \"Помилки\",\n  \"Skipped Rows\": \"Пропущені рядки\",\n  \"Show Ignored Columns\": \"Показати пропущені колонки\",\n  \"Auto Match Columns\": \"Автоматичне співставлення колонок\",\n  \"File not found\": \"Файл не знайдено\",\n  \"There was no data supplied to export\": \"Немає даних для експорту\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"Розширення PHP :name не встановлено. Будь ласка, встановіть цю бібліотеку та активуйте розширення.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Плагін :name має залежності, які не встановлено. Будь ласка, встановіть ці плагіни.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"Директорія :name та її субдиректорії не мають дозволу для запису для PHP. Будь ласка, встановіть відповідні дозволи для веб-серверу для цієї директорії.\",\n  \"Manage Roles\": \"Керування ролями\",\n  \"Manage Groups\": \"Групи\",\n  \"Customize Backend\": \"Налаштування адмін панелі\"\n}"
  },
  {
    "path": "modules/backend/lang/vn/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => 'Loại Field không hợp lệ :type.',\n    'options_method_invalid_model' => 'Thuộc tính \\':field\\' không đưa ra được model hợp lệ. Hãy thử chỉ định phương pháp tùy chọn cho model :model một cách rõ ràng.',\n    'options_method_not_exists' => 'Model class :model phải khai báo :method() trả về tùy chọn cho trường \\':field\\'.',\n  ],\n  'widget' => [\n    'not_registered' => 'Tên của widget class \\':name\\' chưa được đăng ký',\n    'not_bound' => 'Widget với tên class \\':name\\' đã không bị ràng buộc với controller',\n  ],\n  'page' => [\n    'untitled' => 'Không có tiêu đề',\n    'access_denied' => [\n      'label' => 'Truy cập bị chặn',\n      'help' => 'Bạn không đủ quyền để xem trang này.',\n      'cms_link' => 'Quay lại trang quản trị',\n    ],\n    'no_database' => [\n      'label' => 'Không tìm thấy Database',\n      'help' => 'Bắt buộc phải có 1 database để truy cập vào trang quản trị. Kiểm tra lại cấu hình database và migrated trước khi thử lại.',\n      'cms_link' => 'Quay lại trang chủ',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => 'Không tìm thấy partial \\':name\\'.',\n  ],\n  'account' => [\n    'signed_in_as' => 'Đã đăng nhập với :full_name',\n    'sign_out' => 'Đăng xuất',\n    'login_placeholder' => 'đăng nhập',\n    'password_placeholder' => 'mật khẩu',\n    'enter_email' => 'Nhập email của bạn',\n    'email_placeholder' => 'email',\n    'apply' => 'Áp dụng',\n    'cancel' => 'Bỏ qua',\n    'delete' => 'Xóa',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => 'Bảng điều khiển chính',\n    'widget_inspector_title' => 'Cấu hình widget',\n    'widget_inspector_description' => 'Cấu hình widget',\n    'widget_columns_label' => 'Độ rộng :columns',\n    'widget_columns_description' => 'Độ rộng của widget, là một số nguyên trong khoảng 1 đến 10.',\n    'widget_columns_error' => 'Vui lòng nhập vào độ rộng của widget là một số nguyên trong khoảng 1 đến 10.',\n    'columns' => '{1} cột|[2,Inf] cột',\n    'widget_new_row_label' => 'Một hàng mới',\n    'widget_new_row_description' => 'Đẩy widget thành 1 hàng mới',\n    'widget_title_label' => 'Tên Widget',\n    'widget_title_error' => 'Tên của widget là bắt buộc',\n    'reset_layout_success' => 'Layout đã được reset',\n    'make_default_success' => 'Layout hiện tại đã trở thành layout mặc định',\n    'collapse_all' => 'Thu gọn tất cả',\n    'expand_all' => 'Mở rộng tất cả',\n    'status' => [\n      'widget_title_default' => 'Tình trạng hệ thống',\n      'update_available' => '{0} cập nhật có sãn!|{1} cập nhật có sẵn!|[2,Inf] cập nhật có sẵn!',\n      'updates_pending' => 'Đang chờ cập nhật phần mềm',\n      'updates_nil' => 'Phần mềm đã được cập nhật',\n      'updates_link' => 'Cập nhật',\n      'warnings_pending' => 'Một số vấn đề cần chú ý',\n      'warnings_nil' => 'Không có cảnh báo nào',\n      'warnings_link' => 'Chi tiết',\n      'core_build' => 'Phiên bản hệ thống',\n      'event_log' => 'Nhật ký các sự kiện',\n      'request_log' => 'Nhật ký các request thất bại',\n      'app_birthday' => 'Lần đăng nhập gần nhất',\n    ],\n    'welcome' => [\n      'widget_title_default' => 'Xin chào',\n      'welcome_back_name' => 'Chào mừng :name quay trở lại :app.',\n      'welcome_to_name' => 'Chào mừng :name đến với :app.',\n      'first_sign_in' => 'Đây là lần đầu tiên bạn đang nhập vào hệ thống.',\n      'last_sign_in' => 'Lần cuối bạn đăng nhập vào lúc',\n      'view_access_logs' => 'Xem nhật ký các lần đăng nhập',\n      'nice_message' => 'Chúc bạn một ngày vui vẻ!',\n    ],\n  ],\n  'user' => [\n    'name' => 'Administrator',\n    'list_title' => 'Quản lý Administrators',\n    'new' => 'Thêm mới Administrator',\n    'first_name' => 'Họ',\n    'last_name' => 'Tên',\n    'full_name' => 'Tên đầy đủ',\n    'email' => 'Email',\n    'role_field' => 'Role',\n    'role_comment' => 'Các Role định nghĩa sẵn một số quyền của người dùng, nó có thể bị ghi đè bởi cấp độ của người dùng trong tab quyền hạn',\n    'groups' => 'Nhóm quản trị',\n    'groups_comment' => 'Chỉ định nhóm quản trị cho người dùng',\n    'avatar' => 'Avatar',\n    'password' => 'Mật khẩu',\n    'password_confirmation' => 'Nhập lại mật khẩu',\n    'permissions' => 'Các quyền truy cập',\n    'account' => 'Tài khoản',\n    'superuser' => 'Super User',\n    'superuser_comment' => 'Super User có thể truy cập không giới hạn vào tất cả mọi nơi của hệ thống. Super User có thể quản lý, thêm mới các user khác ',\n    'send_invite' => 'Gửi email chào mừng đến user',\n    'send_invite_comment' => 'Gửi một tin nhắn chào mừng đến user với thông tin đăng nhập và mật khẩu',\n    'delete_confirm' => 'Xóa administrator này?',\n    'return' => 'Quay lại danh sách admin',\n    'allow' => 'Cho phép',\n    'inherit' => 'Inherit',\n    'deny' => 'Không cho phép',\n    'activated' => 'Đã active',\n    'last_login' => 'Lần cuối đăng nhập',\n    'created_at' => 'Tạo lúc',\n    'updated_at' => 'Chỉnh sửa vào lúc',\n    'group' => [\n      'name' => 'Nhóm quản trị',\n      'name_field' => 'Tên',\n      'name_comment' => 'Tên được hiển thị trong danh sách nhóm',\n      'description_field' => 'Mô tả',\n      'is_new_user_default_field_label' => 'Nhóm mặc định',\n      'is_new_user_default_field_comment' => 'Khi thêm mới administrators mặc định sẽ vào nhóm này',\n      'code_field' => 'Code',\n      'code_comment' => 'Nhập mã code không được trùng lặp nếu bạn muốn truy cập group objectuop bằng API',\n      'list_title' => 'Quản lý các nhóm',\n      'new' => 'Nhóm mới',\n      'delete_confirm' => 'Xóa nhóm này?',\n      'return' => 'Quay lại danh sách nhóm',\n      'users_count' => 'Số user',\n    ],\n    'role' => [\n      'name' => 'Role',\n      'name_field' => 'Tên Role',\n      'name_comment' => 'Tên hiển thị trong danh sách Role.',\n      'description_field' => 'Mô tả',\n      'code_field' => 'Code',\n      'code_comment' => 'Nhập mã code không được trùng lặp nếu bạn muốn truy cập group objectuop bằng API.',\n      'list_title' => 'Quản lý các Role',\n      'new' => 'Thêm mới Role',\n      'delete_confirm' => 'Xóa role này?',\n      'return' => 'Quay lại trang  danh sách role',\n      'users_count' => 'Số user',\n    ],\n    'preferences' => [\n      'not_authenticated' => 'Người dùng không xác định.',\n    ],\n  ],\n  'list' => [\n    'default_title' => 'Trang danh sách các bản ghi',\n    'search_prompt' => 'Tìm kiếm...',\n    'no_records' => 'Không có bản ghi nào.',\n    'missing_model' => 'List behavior sử dụng trong :class không được định nghĩa trong model nào.',\n    'missing_column' => 'Column chưa được định nghĩa :columns.',\n    'missing_columns' => 'List đã dử dụng trong :class chưa được định nghĩa (list columns).',\n    'missing_definition' => 'List behavior không chứa cột \\':field\\'.',\n    'missing_parent_definition' => 'List behavior không có định nghĩa cho \\':definition\\'.',\n    'behavior_not_ready' => 'List behavior chưa được khởi tạo,kiểm tra lại xem bạn đã gọi makeLists() trong controller chưa.',\n    'invalid_column_datetime' => 'Giá trị Column \\':column\\' không phải là DateTime object, bạn đã thiếu $dates trong model?',\n    'pagination' => 'Hiển thị bản ghi: :from-:to của :total',\n    'first_page' => 'Trang đầu tiên',\n    'last_page' => 'Trang cuối cùng',\n    'prev_page' => 'Trang trước',\n    'next_page' => 'Trang tiếp theo',\n    'refresh' => 'Làm mới',\n    'updating' => 'Đang cập nhật...',\n    'loading' => 'Đang tải...',\n    'check' => 'Kiểm tra',\n    'delete_selected' => 'Xóa các mục đã chọn',\n    'delete_selected_empty' => 'Không có bản ghi nào được chọn',\n    'delete_selected_confirm' => 'Xóa các bản ghi đã chọn?',\n    'delete_selected_success' => 'Xóa thành công các bản ghi.',\n    'column_switch_true' => 'Có',\n    'column_switch_false' => 'Không',\n  ],\n  'fileupload' => [\n    'default_prompt' => 'Bấm vào %s hoặc kéo thả file vào đây để upload',\n  ],\n  'form' => [\n    'create_title' => 'Thêm mới :name',\n    'update_title' => 'Chỉnh sửa :name',\n    'preview_title' => 'Xem trước :name',\n    'reset_success' => 'Reset thành công',\n    'missing_id' => 'Không xác định được ID của bản ghi.',\n    'missing_model' => 'Form behavior sử dụng trong :class không có trong model nào.',\n    'missing_definition' => 'Form behavior không chứa \\':field\\'.',\n    'action_confirm' => 'Bạn chắc chắn không?',\n    'create' => 'Thêm mới',\n    'create_and_close' => 'Thêm và đóng lại',\n    'creating' => 'Đang tạo...',\n    'creating_name' => 'Đang tạo :name...',\n    'save' => 'Lưu lại',\n    'save_and_close' => 'Lưu và đóng',\n    'saving' => 'Đang lưu...',\n    'saving_name' => 'Đang lưu :name...',\n    'delete' => 'Xóa',\n    'deleting' => 'Đang xóa...',\n    'confirm_delete' => 'Xóa bản ghi này?',\n    'confirm_delete_multiple' => 'Xóa bản ghi đã chọn?',\n    'deleting_name' => 'Đang xóa :name...',\n    'reset_default' => 'Đặt về mặc định',\n    'resetting' => 'Đang đặt lại',\n    'resetting_name' => 'Đang đặt lại :name',\n    'undefined_tab' => 'Misc',\n    'field_off' => 'Tắt',\n    'field_on' => 'Bật',\n    'add' => 'Thêm',\n    'apply' => 'Áp dụng',\n    'cancel' => 'Bỏ qua',\n    'close' => 'Đóng',\n    'confirm' => 'Xác nhận',\n    'reload' => 'Tại lại',\n    'complete' => 'Hoàn thành',\n    'ok' => 'OK',\n    'or' => 'or',\n    'confirm_tab_close' => 'Đóng tab? Các thay đổi của bạn sẽ không được lưu.',\n    'behavior_not_ready' => 'Form behavior chưa được khởi tạo, kiểm tra lại đã gọi initForm() trong controller cửa bạn chưa.',\n    'preview_no_files_message' => 'Chưa có file nào được upload lên.',\n    'preview_no_media_message' => 'Không có file media nào được chọn.',\n    'preview_no_record_message' => 'Không có bản ghi nào được chọn.',\n    'select' => 'Select',\n    'select_all' => 'chọn tất cả',\n    'select_none' => 'không chọn',\n    'insert_row' => 'Thêm mới Row',\n    'insert_row_below' => 'Thêm Row dưới đây',\n    'delete_row' => 'Xóa Row',\n    'concurrency_file_changed_title' => 'File đã được thay đổi',\n    'concurrency_file_changed_description' => 'File bạn đang chỉnh sửa đã bị thay đổi bởi người khác. Bạn có thể tải lại và các thay đổi của bạn không được lưu hoặc ghi đè lên file đó',\n    'return_to_list' => 'Quay lại trang danh sách',\n  ],\n  'recordfinder' => [\n    'find_record' => 'Tìm kiếm bản ghi',\n    'cancel' => 'Cancel',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => 'Relation behavior không được cấu hình cho \\':config\\'.',\n    'missing_definition' => 'Relation behavior không có định nghĩa cho \\':field\\'.',\n    'missing_model' => 'Relation behavior đã sử dụng trong :class chưa được định nghĩa trong model nào.',\n    'invalid_action_single' => 'Hành động này không thể thực hiện trên một singular relationship.',\n    'invalid_action_multi' => 'Hành động này không thể thực hiện trên một multiple relationship.',\n    'help' => 'Bấm vào 1 item để thêm mới',\n    'add' => 'Thêm mới',\n    'link_selected' => 'Link đã chọn',\n    'cancel' => 'Cancel',\n    'close' => 'Đóng lại',\n    'create' => 'Thêm mới',\n    'update' => 'Cập nhật',\n    'preview' => 'Xem trước',\n    'remove_name' => 'Xóa :name',\n    'delete_name' => 'Xóa :name',\n    'link' => 'Link',\n    'unlink_name' => 'Unlink :name',\n  ],\n  'reorder' => [\n    'default_title' => 'Xắp xếp các bản ghi',\n    'no_records' => 'Không có bản ghi nào để sắp xếp.',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Không tìm thấy Model \\':class\\' với id :id',\n    'missing_id' => 'Không xác định được ID tìm kiếm.',\n    'missing_relation' => 'Model \\':class\\' không được định nghĩa cho \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' không có phương thức \\':method\\'.',\n    'invalid_class' => 'Model :model sử dụng trong :class không hợp lệ, nó phải được kế thừa từ \\\\Model class.',\n    'mass_assignment_failed' => 'Có lỗi của Model attribute \\':attribute\\'.',\n  ],\n  'warnings' => [\n    'tips' => 'Hướng dẫn cấu hình hệ thống',\n    'tips_description' => 'Một số điều bạn cần chú ý để cấu hình hệ thống đúng cách.',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => 'Những cài đặt của tôi',\n    'menu_description' => 'Những cài đặt liên quan đến tài khoản quản trị của bạn',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Màu tạo các điểm nhấn',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => 'tất cả',\n    'options_method_not_exists' => 'Model class :model cần phải khai báo method :method() trả về các tùy chọn lọc \\':filter\\'.',\n    'date_all' => 'tất cả',\n    'number_all' => 'tất cả',\n  ],\n  'import_export' => [\n    'upload_csv_file' => '1. Tải lên tệp  CSV',\n    'import_file' => 'Import file',\n    'first_row_contains_titles' => 'Dòng đầu tiên là tiêu đề cột',\n    'first_row_contains_titles_desc' => 'Bỏ check nếu dòng đầu tiên trong file CSV là tiêu đề của cột.',\n    'match_columns' => '2. Các cột dữ liệu trùng với các cột dữ liệu của database',\n    'file_columns' => 'Các cột của tệp CSV',\n    'database_fields' => 'Các cột của database',\n    'set_import_options' => '3. Set import options',\n    'export_output_format' => '1. Định dạng dữ liệu xuất ra',\n    'file_format' => 'Định dang file',\n    'standard_format' => 'Định dạng chuẩn',\n    'custom_format' => 'Định dạng khác',\n    'delimiter_char' => 'Delimiter character',\n    'enclosure_char' => 'Enclosure character',\n    'escape_char' => 'Escape character',\n    'select_columns' => '2. Chọn cột để xuất ra',\n    'columns' => 'Columns',\n    'set_export_options' => '3. Các tùy chọn xuất file',\n    'import_progress' => 'Tiến độ nhập file',\n    'processing' => 'Đang xử lý',\n    'import_error' => 'Lỗi nhập file',\n    'export_progress' => 'Tiến độ xuất file',\n    'export_error' => 'Lỗi xuất file',\n    'encoding_format' => 'Kiểu mã hóa(encoding)',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => 'Tải lên và quản lý các tập tin đa phương tiện - images, videos, sounds, documents',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'default_prompt' => 'Bấm vào nút %s để tìm kiếm medai file',\n  ],\n  'media' => [\n    'menu_label' => 'Media',\n    'upload' => 'Tải lên',\n    'move' => 'Di chuyển',\n    'delete' => 'Xóa',\n    'add_folder' => 'Thêm folder',\n    'search' => 'Tìm kiếm',\n    'display' => 'Hiển thị',\n    'filter_everything' => 'Mọi thứ',\n    'filter_images' => 'Images',\n    'filter_video' => 'Video',\n    'filter_audio' => 'Audio',\n    'filter_documents' => 'Documents',\n    'library' => 'Thư viện',\n    'size' => 'Kích thước',\n    'title' => 'Tên ảnh',\n    'last_modified' => 'Lần cuối chỉnh sửa',\n    'public_url' => 'URL',\n    'click_here' => 'Bấm vào đây',\n    'thumbnail_error' => 'Lỗi tạo thumbnail.',\n    'return_to_parent' => 'Trả về thư mục cha',\n    'return_to_parent_label' => 'Lên trên ..',\n    'nothing_selected' => 'Chưa chọn mục nào.',\n    'multiple_selected' => 'Đã chọn nhiều mục.',\n    'uploading_file_num' => 'Đang tải lên :number file...',\n    'uploading_complete' => 'Tải lên hoàn tất',\n    'uploading_error' => 'Lỗi tải lên',\n    'type_blocked' => 'Loại file này bị khóa vì lý do bảo mật.',\n    'order_by' => 'Xắp xếp theo',\n    'direction' => 'Theo hướng',\n    'direction_asc' => 'Tăng dần',\n    'direction_desc' => 'Giảm dần',\n    'folder' => 'Thư mục',\n    'no_files_found' => 'Không tìm thấy file bạn yêu cầu.',\n    'delete_empty' => 'Vui lòng chọn các mục để xóa.',\n    'delete_confirm' => 'Xác nhận xóa các mục đã chọn?',\n    'error_renaming_file' => 'Lỗi đổi tên file.',\n    'new_folder_title' => 'Thư mục mới',\n    'folder_name' => 'Tên thư mục',\n    'error_creating_folder' => 'Lỗi khi tạo thư mục mới',\n    'folder_or_file_exist' => 'Tên file hoặc thư mục đã tồn tại.',\n    'move_empty' => 'Chọn một mục để di chuyển.',\n    'move_popup_title' => 'Di chuyển file hoặc thư mục',\n    'move_destination' => 'Chọn nơi đến',\n    'please_select_move_dest' => 'Chọn nơi mà file hoặc thư mục cần chuyển đến.',\n    'move_dest_src_match' => 'Chọn thư mục khác.',\n    'empty_library' => 'Thư mục trống.Vui lòng tải tệp tin lên hoặc tạo thư mục mới để bắt đầu.',\n    'insert' => 'Chàn vào',\n    'crop_and_insert' => 'Cắt & Chèn vào',\n    'select_single_image' => 'vui lòng chọn một hình ảnh.',\n    'selection_not_image' => 'Mục đã chọn không phải là hình ảnh.',\n    'restore' => 'Hoàn lại tất cả các thay đổi',\n    'resize' => 'Đổi kích thước...',\n    'selection_mode_normal' => 'Bình thường',\n    'selection_mode_fixed_ratio' => 'Tỉ lệ cố định',\n    'selection_mode_fixed_size' => 'Kích thước cố định',\n    'height' => 'Chiều cao',\n    'width' => 'Chiều rộng',\n    'selection_mode' => 'Lựa chọn chế độ',\n    'resize_image' => 'Đổi kích thước ảnh',\n    'image_size' => 'Kích thước ảnh:',\n    'selected_size' => 'Đã chọn:',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/vn.json",
    "content": "{\n  \"1. Export output format\": \"1. Định dạng dữ liệu xuất ra\",\n  \"File Format\": \"Định dang file\",\n  \"Delimiter Character\": \"Delimiter Character\",\n  \"Enclosure Character\": \"Enclosure Character\",\n  \"Escape Character\": \"Escape Character\",\n  \"2. Select columns to export\": \"2. Chọn cột để xuất ra\",\n  \"Columns\": \"Columns\",\n  \"3. Set export options\": \"3. Các tùy chọn xuất file\",\n  \"CSV Custom\": \"Định dạng khác\",\n  \"1. Upload an Import File\": \"1. Tải lên tệp CSV\",\n  \"Import File\": \"Import File\",\n  \"File Encoding\": \"Kiểu mã hóa(encoding)\",\n  \"First row contains column titles\": \"Dòng đầu tiên là tiêu đề cột\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"Bỏ check nếu dòng đầu tiên trong file CSV là tiêu đề của cột.\",\n  \"2. Match the File Columns to Database Fields\": \"2. Các cột dữ liệu trùng với các cột dữ liệu của database\",\n  \"File columns\": \"Các cột của tệp CSV\",\n  \"Database fields\": \"Các cột của database\",\n  \"3. Set Import Options\": \"3. Set Import Options\",\n  \"Export progress\": \"Tiến độ xuất file\",\n  \"Processing\": \"Đang xử lý\",\n  \"Import progress\": \"Tiến độ nhập file\",\n  \"Import error\": \"Lỗi nhập file\",\n  \"Export error\": \"Lỗi xuất file\",\n  \"Column preview\": \"Xem trước cột\",\n  \"Column\": \"Column\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"Nhật ký những lần đăng nhập thành công của administrators. Số bản ghi được lưu trữ trong :days ngày.\",\n  \"Access Log\": \"Nhật ký truy cập\",\n  \"View a list of successful back-end user sign ins.\": \"Danh sách các lần người quản trị đăng nhập thành công.\",\n  \"Date & Time\": \"Thời gian\",\n  \"IP address\": \"Địa chỉ IP\",\n  \"Login\": \"Đăng nhập\",\n  \"First name\": \"First name\",\n  \"Last name\": \"Last name\",\n  \"Email\": \"Email\",\n  \"Administration Area\": \"Khu vực quản trị\",\n  \"Password Reset\": \"Lấy lại mật khẩu\",\n  \"Please enter a new password.\": \"Nhập mật khẩu mới\",\n  \"Please enter your login to restore the password.\": \"Tên đăng nhập\",\n  \"A user could not be found with a login value of ':login'\": \"Không tìm thấy người dùng có tên ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"Một tin nhắn đã được gửi vào email của bạn. Vui lòng làm theo hướng dẫn\",\n  \"Invalid password reset data supplied. Please try again!\": \"Dữ liệu khôi phục mật khẩu không hợp lệ. Vui lòng thử lại!\",\n  \"Unable to reset your password!\": \"Không thể đặt lại mật khẩu của bạn!\",\n  \"Password has been reset. You may now sign in.\": \"Đã đặt lại mật khẩu. Bạn có thể đăng nhập ngay bây giờ\",\n  \"Restore\": \"Khôi phục\",\n  \"Reset\": \"Reset\",\n  \"Stay logged in\": \"Giữ trạng thái đăng nhập\",\n  \"Forgot password?\": \"Quên mật khẩu?\",\n  \"Manage Widgets\": \"Quản lý widgets\",\n  \"Add Widget\": \"Thêm mới widget\",\n  \"Set the current layout as the default?\": \"Đặt layout hiện tại thành mặc định?\",\n  \"Make Default\": \"Đặt thành mặc định\",\n  \"Reset layout back to default?\": \"Reset  layout về mặc định?\",\n  \"Reset Layout\": \"Reset Layout\",\n  \"Widget\": \"Widget\",\n  \"please select\": \"Vui lòng lựa chọn\",\n  \"Width\": \"chiều rộng\",\n  \"full width\": \"rộng toàn màn hình\",\n  \"Primary Color\": \"Màu chủ đạo\",\n  \"Secondary Color\": \"Màu thứ hai\",\n  \"This name is shown in the title area of the back-end.\": \"Tên này sẽ được làm tiêu đề cho trang quản trị.\",\n  \"App Name\": \"Tên ứng dụng\",\n  \"This name is shown on the sign in screen for the back-end.\": \"Mục này hiển thị ở màn hình đăng nhập trang quản trị.\",\n  \"App Tagline\": \"App Tagline\",\n  \"Brand\": \"Nhãn\",\n  \"Upload a custom logo to use in the back-end.\": \"Tải lên logo sử dụng cho trang quản trị.\",\n  \"Logo\": \"Logo\",\n  \"Colors\": \"Màu sắc\",\n  \"Menu Style\": \"Kiểu menu\",\n  \"Navigation\": \"Thanh menu\",\n  \"Custom Stylesheet\": \"Stylesheet tùy chỉnh\",\n  \"Styles\": \"Styles\",\n  \"Inline\": \"Icon và tiêu đề cùng một dòng\",\n  \"Tiles\": \"Icon và tiêu đề khác dòng\",\n  \"Collapsed\": \"Thu gọn icon và tiêu đề\",\n  \"Region\": \"Khu vực\",\n  \"Locale\": \"Ngôn ngữ địa phương\",\n  \"Select your desired locale for language use.\": \"Chọn khu vực của bạn để sử dụng đúng ngôn ngữ.\",\n  \"Timezone\": \"Múi giờ\",\n  \"Adjust displayed dates to this timezone.\": \"Điều chỉnh thời gian hiển thị cho múi giờ này.\",\n  \"Code Editor\": \"Code editor\",\n  \"Color Scheme\": \"Color Scheme\",\n  \"Word Wrap\": \"Không bị xuống dòng(word wrap)\",\n  \"Off\": \"Off\",\n  \"40 Characters\": \"40 ký tự\",\n  \"80 Characters\": \"80 ký tự\",\n  \"Fluid\": \"Fluid\",\n  \"Font Size\": \"Kích thước chữ\",\n  \"Tab Size\": \"Kích thước Tab\",\n  \"Code Folding\": \"Thu gọn code\",\n  \"Mark begin\": \"Đánh dấu điểm bắt đầu\",\n  \"Mark begin and end\": \"Đánh dấu điểm bắt đầu và kết thúc\",\n  \"Autocompletion\": \"Autocompletion\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"Basic Autocompletion (Ctrl + Space)\",\n  \"Live Autocompletion\": \"Live Autocompletion\",\n  \"Show gutter\": \"Hiện lề bên trong\",\n  \"Highlight active line\": \"Hiện nổi bật dòng đang trỏ chuột\",\n  \"Automatically close tags\": \"Tự động đóng thẻ\",\n  \"Indent using tabs\": \"Sử dụng tabs để lùi dòng\",\n  \"Show indent guides\": \"Hiển thị hướng dẫn căn lề\",\n  \"Show invisible characters\": \"Hiển thị các ký tự ẩn\",\n  \"Show print margin\": \"Hiện lề in\",\n  \"Custom styles to include in the HTML editor.\": \"Styles tùy chỉnh được thêm vào HTML editor.\",\n  \"Markup Styles\": \"Markup Styles\",\n  \"Markup Classes\": \"Markup Classes\",\n  \"Label\": \"Label\",\n  \"Paragraph\": \"Paragraph\",\n  \"Class Name\": \"Class Name\",\n  \"Link\": \"Link\",\n  \"Table\": \"Table\",\n  \"Table Cell\": \"Table Cell\",\n  \"Image\": \"Image\",\n  \"Allowed Tags\": \"Các tag được phép sử dụng\",\n  \"The list of allowed tags.\": \"Danh sách tag được phép sử dụng trong Markup.\",\n  \"Markup Tags\": \"Markup Tags\",\n  \"Allowed Empty Tags\": \"Cho phép tags trống\",\n  \"The list of tags that are not removed when they have no content inside.\": \"Danh sách tag sẽ không bị xóa khi chúng không có nội dung bên trong.\",\n  \"Do Not Wrap Tags\": \"Không thu gọn tag\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"Danh sách các tag sẽ không bị thu gọn nội dung bên trong block tags.\",\n  \"Remove Tags\": \"Xóa các tag\",\n  \"The list of tags that are removed together with their content.\": \"Danh sách tag bị xóa kể cả nội dung của chúng.\",\n  \"Toolbar Buttons\": \"Các nút trên thanh công cụ\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"Các nút mặc định ở trên thanh công cụ  của Rich Editor.\",\n  \"Enable code snippets (Tab)\": \"Kích hoạt snippets (Tab)\",\n  \"Title\": \"Tên\",\n  \"Description\": \"Mô tả\",\n  \"Attachment\": \"Tệp đính kèm\",\n  \"Attachment URL\": \"URL file\",\n  \"Add a title and description for this attachment.\": \"Tên và mô tả cho tệp.\",\n  \"Are you sure?\": \"Bạn có chắc muốn xóa?\",\n  \"Upload Error\": \"Lỗi upload\",\n  \"Remove File\": \"Xóa file\",\n  \"Create :name\": \"Thêm mới :name\",\n  \"Update :name\": \"Cập nhật :name\",\n  \"Add :name\": \"Thêm :name\",\n  \"Link :name\": \"Link :name\",\n  \"Delete\": \"Xóa\",\n  \"Remove\": \"Xóa\",\n  \"Unlink\": \"Unlink\",\n  \"Preview :name\": \"Xem trước :name\",\n  \"Link a New :name\": \"Link mới :name\",\n  \"Add a New :name\": \"Thêm mới :name\",\n  \"Related :name Data\": \"Dữ liệu quan đến :name\",\n  \":name Created\": \":name đã được tạo\",\n  \":name Updated\": \"Cập nhật thành công :name\",\n  \":name Deleted\": \"Xóa thành công :name\",\n  \"Form record with an ID of :id could not be found.\": \"Không tìm thấy bản ghi có id: :id.\",\n  \"Preview the Website\": \"Xem trước website\",\n  \"Administrators\": \"Administrators\",\n  \"Manage back-end administrator users, groups and permissions.\": \"Quản lý các administrator, nhóm quản trị và quyền truy cập.\",\n  \"Role Permissions\": \"Quản lý các Role\",\n  \"Team Groups\": \"Quản lý các nhóm\",\n  \"Branding & Appearance\": \"Tùy chỉnh trang quản trị\",\n  \"Customize the administration area such as name, colors and logo.\": \"Tùy chỉnh trang quản trị, ví dụ như chỉnh sửa tên,màu sắc, logo.\",\n  \"Editor Settings\": \"Cài đặt trình biên tập (Code editor)\",\n  \"Change the global editor preferences.\": \"Tùy chỉnh trình biên tập (Code editor) cho toàn trang, ví dụ kích thước chữ,màu nền cho trình biên tập.\",\n  \"My Account\": \"Tài khoản của tôi\",\n  \"Update your account details such as name, email address and password.\": \"Cập nhật thông tin tài khoản của bạn ví dụ như tên, email hoặc mật khẩu.\",\n  \"Backend Preferences\": \"Tùy chỉnh cá nhân\",\n  \"Manage your account preferences such as desired language.\": \"Cá nhân hóa trang quản trị với tài khoản của bạn, ví dụ chọn ngôn ngữ.\",\n  \"security login\": \"bảo mật đăng nhập\",\n  \"List Setup\": \"Cài đặt trang danh sách\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"Chọn các cột bạn muốn hiển thị ở trang danh sách các bản ghi. Bạn có thể thay đổi vị trí của chúng bằng các kéo lên hoặc xuống.\",\n  \"Records Per Page\": \"Số bản ghi trên một trang\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"Điền vào số bản ghi bạn muốn hiển thị trên một trang. Chú ý quá nhiều bản ghi trên một trang sẽ khiến trang tải chậm\",\n  \"Add Selected\": \"Thêm các mục đã chọn\",\n  \"Please specify the modelClass property for :type\": \"Ghi rõ thuộc tính modelClass cho :type\",\n  \"Please specify some columns to export.\": \"Vui lòng chọn các cột để xuất ra.\",\n  \"Missing column identifier\": \"Không xác định được cột\",\n  \"Unknown column\": \"Cột không xác định\",\n  \"Please specify some columns to import.\": \"Vui lòng chọn một số cột để nhập vào.\",\n  \"Please match some columns first.\": \"Các cột chưa khớp nhau.\",\n  \"Please specify a match for the required field :label.\": \"Trường bắt buộc sau đây chưa khớp :label.\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"Kiểu mã hóa(encoding) của tập tin sai. Vui lòng chọn lại kiểu mã hóa phù hợp để import\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"Bạn cần phải implement cái controller behavior ListCotroller với tùy chọn \\\"useList\\\" được chọn\",\n  \"File export process completed!\": \"Xuất file thành công!\",\n  \"The browser will now redirect to the file download.\": \"Bạn sẽ được chuyển đến nơi tải file về ngay bây giờ.\",\n  \"Ignore this column\": \"Bỏ qua cột này\",\n  \"Drop column here...\": \"Kéo cột vào đây...\",\n  \"Please upload a valid CSV file.\": \"Vui lòng tải lên tệp CSV hợp lệ\",\n  \"Created\": \"Đã tạo\",\n  \"Updated\": \"Đã cập nhật\",\n  \"Skipped\": \"Đã bỏ qua\",\n  \"Warnings\": \"Cảnh báo\",\n  \"Errors\": \"Lỗi\",\n  \"Skipped Rows\": \"Các dòng đã bỏ qua\",\n  \"Show Ignored Columns\": \"Hiển thị các cột bị bỏ qua\",\n  \"Auto Match Columns\": \"Tự động khớp các cột\",\n  \"File not found\": \"Không tìm thấy file\",\n  \"There was no data supplied to export\": \"Không có dữ liệu để xuất ra\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP extension :name chưa được cài đặt. Vui lòng cài đặt extension này từ thư viện và kích hoạt nó.\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"Plugin :name cần phải cài đặt. Vui lòng cài đặt plugin này.\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"PHP không có quyền ghi trong thư mục :name hoặc các thư mục con của nó. Vui lòng kiểm tra lại quyền ghi cho thư mục này.\"\n}"
  },
  {
    "path": "modules/backend/lang/zh-cn/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => '不合法的字段类型 :type.',\n    'options_method_invalid_model' => '属性 \\':field\\' 不能解析为有效模型. 请尝试为模型类:model指定一个可选方法.',\n    'options_method_not_exists' => '模型 :model 必须定义一个返回 \\':field\\' 表单字段选项的方法 :method()。',\n    'colors_method_not_exists' => '模型 :model 必须定义一个返回十六进制格式的颜色值 \\':field\\' 字段的 :method() 方法。 ',\n  ],\n  'widget' => [\n    'not_registered' => '未注册部件 \\':name\\' ',\n    'not_bound' => '部件 \\':name\\' 未绑定至控制器',\n  ],\n  'page' => [\n    'untitled' => '未命名',\n    'not_found' => [\n      'label' => '找不到页面',\n      'help' => '无法找到请求的页面',\n      'back_link' => '返回上个页面',\n    ],\n    'access_denied' => [\n      'label' => '拒绝访问',\n      'help' => '您没有访问该页面所需的权限.',\n      'cms_link' => '返回后台',\n    ],\n    'no_database' => [\n      'label' => '无法找到数据库',\n      'help' => '需要数据库以访问后端。请在再次尝试之前检查数据库的配置和迁移。',\n      'cms_link' => '返回首页',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => '未找到部件 \\':name\\' ',\n    'invalid_name' => '未知的部件名称 :name ',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => '未知的AJAX处理方法 :name.',\n    'not_found' => '无法找到AJAX处理方法 \\':name\\' ',\n  ],\n  'account' => [\n    'impersonate' => '模拟用户',\n    'impersonate_confirm' => '您确定要模拟该用户吗？ 您可以通过注销来恢复到原来的状态。',\n    'impersonate_success' => '您现在正在模拟该用户',\n    'impersonate_working' => '模拟中...',\n    'impersonating' => '模拟 :full_name',\n    'stop_impersonating' => '停止模拟',\n    'signed_in_as' => '以 :full_name 身份登录',\n    'sign_out' => '登出',\n    'login_prompt' => '欢迎回来！ 请登录您的帐户以继续。',\n    'login_placeholder' => '登录',\n    'password_placeholder' => '密码',\n    'enter_email' => '输入邮件地址',\n    'email_placeholder' => '邮件',\n    'apply' => '应用',\n    'cancel' => '取消',\n    'delete' => '删除',\n    'ok' => '好',\n  ],\n  'dashboard' => [\n    'menu_label' => '仪表盘',\n    'widget_inspector_title' => '小部件配置',\n    'widget_inspector_description' => '配置报告小部件',\n    'widget_columns_label' => '宽度 :columns',\n    'widget_columns_description' => '小部件宽度， 1 到 10',\n    'widget_columns_error' => '请输入小部件宽度，1 到 10',\n    'columns' => '{1} 栏|[2,Inf] 栏',\n    'widget_new_row_label' => '强制新行',\n    'widget_new_row_description' => '把小部件放到新行',\n    'widget_title_label' => '小部件标题',\n    'widget_title_error' => '需要小部件标题',\n    'reset_layout_success' => '布局已经复位',\n    'make_default_success' => '当前布局为默认布局',\n    'collapse_all' => '全部折叠',\n    'expand_all' => '展开全部',\n    'status' => [\n      'widget_title_default' => '系统状态',\n      'update_available' => '{0} 个可用更新！|{1} 个可用更新！|[2,Inf] 个可用更新！',\n      'updates_pending' => '等待软件更新',\n      'updates_nil' => '软件已为最新版本',\n      'updates_link' => '更新',\n      'warnings_pending' => '您需要留意一些问题',\n      'warnings_nil' => '没有警告显示',\n      'warnings_link' => '查看',\n      'core_build' => '系统构建',\n      'event_log' => '事件日志',\n      'request_log' => '请求日志',\n      'app_birthday' => '在线日期',\n    ],\n    'welcome' => [\n      'widget_title_default' => '欢迎',\n      'welcome_back_name' => '欢迎归来 :app, :name.',\n      'welcome_to_name' => '欢迎到 :app, :name.',\n      'first_sign_in' => '这是您首次登录.',\n      'last_sign_in' => '您最后登录是',\n      'view_access_logs' => '访问登录日志',\n      'nice_message' => '祝你有美好的一天！',\n    ],\n  ],\n  'user' => [\n    'name' => '管理员',\n    'list_title' => '管理',\n    'new' => '新管理员',\n    'first_name' => '名',\n    'last_name' => '姓',\n    'full_name' => '全名',\n    'email' => '邮件',\n    'role_field' => '角色',\n    'role_comment' => '角色指定了用户的权限，您可以在权限栏中进行修改。',\n    'groups' => '团队',\n    'groups_comment' => '指定成员所归属的组.',\n    'avatar' => '头像',\n    'password' => '密码',\n    'password_confirmation' => '确认密码',\n    'permissions' => '权限',\n    'account' => '帐号',\n    'superuser' => '超级用户',\n    'superuser_comment' => '选中并允许此成员访问所有区域.',\n    'send_invite' => '发送邀请邮件',\n    'send_invite_comment' => '发送一封包含用户名和密码的欢迎邮件',\n    'delete_confirm' => '您真的想要删除这个管理员?',\n    'return' => '返回管理员列表',\n    'allow' => '允许',\n    'inherit' => '继承',\n    'deny' => '拒绝',\n    'activated' => '已激活',\n    'last_login' => '最后登录',\n    'created_at' => '创建时间',\n    'updated_at' => '更新时间',\n    'deleted_at' => '删除时间',\n    'show_deleted' => '显示已删除',\n    'group' => [\n      'name' => '组',\n      'name_field' => '名称',\n      'name_comment' => '该名称显示在管理员表单的组列表中。',\n      'description_field' => '描述',\n      'is_new_user_default_field_label' => '默认组',\n      'is_new_user_default_field_comment' => '默认添加新管理员到该组',\n      'code_field' => '代码',\n      'code_comment' => '如果要使用 API 访问组对象，请输入唯一代码。',\n      'list_title' => '管理群组',\n      'new' => '新组',\n      'delete_confirm' => '删除这个管理员组？',\n      'return' => '返回群组列表',\n      'users_count' => '用户',\n    ],\n    'role' => [\n      'name' => '角色',\n      'name_field' => '名称',\n      'name_comment' => '该名称显示在管理员表单的角色列表中。',\n      'description_field' => '描述',\n      'code_field' => '代码',\n      'code_comment' => '如果要使用 API 访问角色对象，请输入唯一代码。',\n      'list_title' => '管理角色',\n      'new' => '新角色',\n      'delete_confirm' => '删除这个管理员角色？',\n      'return' => '返回角色列表',\n      'users_count' => '用户',\n    ],\n    'preferences' => [\n      'not_authenticated' => '没有经过身份验证的用户可以加载或保存首选项。',\n    ],\n    'trashed_hint_title' => '该账户已经被删除',\n    'trashed_hint_desc' => '该账户已经被删除而无法登录。你可以点击右下角的恢复按钮进行恢复。',\n  ],\n  'list' => [\n    'default_title' => '列表',\n    'search_prompt' => '搜索...',\n    'no_records' => '当前视图中没有记录',\n    'missing_model' => '在 :class 中使用的列表行为没有定义模型。',\n    'missing_column' => '没有 :columns 的列定义。',\n    'missing_columns' => '在 :class 中使用的列表没有定义列表列。',\n    'missing_definition' => '列表行为不包含 \\':field\\' 的列。',\n    'missing_parent_definition' => '列表行为不包含 \\':definition\\' 的定义。',\n    'behavior_not_ready' => '列表行为尚未初始化，请检查您是否在控制器中调用了 makeLists()。',\n    'invalid_column_datetime' => '列值 \\':column\\' 不是 DateTime 对象，您是否缺少模型中的 $dates 引用？',\n    'pagination' => '显示的记录：第:from-:to项，共 :total 项',\n    'first_page' => '首页',\n    'last_page' => '末页',\n    'prev_page' => '上一页',\n    'next_page' => '下一页',\n    'refresh' => '刷新',\n    'updating' => '正在更新...',\n    'loading' => '加载中...',\n    'check' => '检查',\n    'create_button' => '新 :name',\n    'delete_selected' => '删除选中',\n    'delete_selected_empty' => '没有要删除的选定记录。',\n    'delete_selected_confirm' => '删除选中的记录？',\n    'delete_selected_success' => '已删除选定的记录。',\n    'column_switch_true' => '是',\n    'column_switch_false' => '否',\n  ],\n  'object_list' => [\n    'prop_cant_be_empty' => '属性：:property不能为空',\n    'key_value_exists' => '值已经定义：:property_value',\n  ],\n  'fileupload' => [],\n  'form' => [\n    'create_title' => '新的 :name',\n    'update_title' => '编辑 :name',\n    'preview_title' => '预览 :name',\n    'restore_success' => '成功恢复 :name',\n    'reset_success' => '重置完成',\n    'missing_id' => '未指定表单记录ID。',\n    'missing_tab' => '缺少有效的标签定义。',\n    'missing_model' => '在 :class 中使用的表单无定义模型。',\n    'missing_definition' => '表单行为不包含 \\':field\\' 的字段。',\n    'action_confirm' => '你确定吗？',\n    'create' => '创建',\n    'create_and_close' => '创建并关闭',\n    'creating' => '创建中...',\n    'creating_name' => '创建:name...',\n    'save' => '保存',\n    'save_and_close' => '保存并关闭',\n    'saving' => '保存...',\n    'saving_name' => '正在保存：:name...',\n    'delete' => '删除',\n    'deleting' => '正在删除...',\n    'confirm_delete' => '删除记录？',\n    'confirm_delete_multiple' => '您确定删除记录？',\n    'deleting_name' => '删除:name...',\n    'restore' => '恢复',\n    'restoring' => '恢复中...',\n    'confirm_restore' => '您确定要恢复这条记录吗？',\n    'reset_default' => '重置为默认值',\n    'resetting' => '重置',\n    'resetting_name' => '重置:name',\n    'undefined_tab' => '杂项',\n    'field_off' => '关闭',\n    'field_on' => '开启',\n    'add' => '添加',\n    'apply' => '应用',\n    'insert' => '插入',\n    'cancel' => '取消',\n    'close' => '关闭',\n    'confirm' => '确认',\n    'reload' => '重新加载',\n    'complete' => '完成',\n    'ok' => '好',\n    'or' => '或',\n    'confirm_tab_close' => '您真的想要关闭这个标签页吗？未保存的更改将会丢失。',\n    'behavior_not_ready' => '表单未初始化，请确认您已调用控制器 initForm().',\n    'preview_no_files_message' => '无上传文件。',\n    'preview_no_media_message' => '无选中媒体.',\n    'preview_no_record_message' => '无选择记录。',\n    'select' => '选择',\n    'select_all' => '全选',\n    'select_none' => '选择无',\n    'insert_row' => '插入行',\n    'insert_row_below' => '在下面插入行',\n    'delete_row' => '删除行',\n    'concurrency_file_changed_title' => '文件已更改',\n    'concurrency_file_changed_description' => '您正在编辑的文件正在被其他用户修改，您可以重载或覆盖磁盘上的文件。',\n    'return_to_list' => '返回列表',\n    'no_options_found' => '没有找到选项',\n    'error' => '错误',\n    'toggle_full_screen' => '切换全屏',\n  ],\n  'treeview' => [\n    'expand' => '展开',\n    'collapse' => '折叠',\n    'reorder' => '重新排序',\n    'clear_search' => '清除搜索',\n    'search' => '搜索',\n    'command_or_document' => '命令或文档...',\n    'quick_access' => '快速访问',\n    'open' => '打开',\n    'commands' => '命令',\n  ],\n  'tabs' => [\n    'close' => '关闭标签',\n    'close_all' => '关闭所有',\n    'close_others' => '关闭其他',\n    'close_saved' => '保存并关闭',\n    'full_screen' => '切换全屏',\n  ],\n  'modal' => [\n    'close' => '关闭',\n  ],\n  'dropdownmenu' => [\n    'go_back' => '返回',\n    'close_menu' => '关闭菜单',\n  ],\n  'recordfinder' => [\n    'find_record' => '查找记录',\n    'invalid_model_class' => '提供的 \":modelClass\" 不可用',\n    'cancel' => '取消',\n  ],\n  'pagelist' => [],\n  'relation' => [\n    'missing_config' => '关系无配置文件 \\':config\\'',\n    'missing_definition' => '关系无定义 \\':field\\' ',\n    'missing_model' => ':class 关系中无已定义模型',\n    'invalid_action_single' => '此操作无法在单一关系上执行.',\n    'invalid_action_multi' => '此操作无法在多重关系上执行.',\n    'help' => '点击增加',\n    'add' => '增加',\n    'link_selected' => '关联选中',\n    'cancel' => '取消',\n    'close' => '关闭',\n    'create' => '创建',\n    'update' => '更新',\n    'preview' => '预览',\n    'remove_name' => '移除 :name',\n    'delete_name' => '删除 :name',\n    'link' => '关联',\n    'unlink_name' => '取消关联 :name',\n  ],\n  'reorder' => [\n    'default_title' => '重新排序记录',\n    'no_records' => '没有可供排序的记录.',\n  ],\n  'model' => [\n    'name' => '模型',\n    'not_found' => '无法找到ID为 :id 的模型 \\':class\\'',\n    'missing_id' => '无法找到指定ID的模型记录.',\n    'missing_relation' => '模型 \\':class\\' 不包含 \\':relation\\'.',\n    'missing_method' => '模型 \\':class\\' 不包含 \\':method\\'.',\n    'invalid_class' => '模型 :model 在 :class 中是不合法的，它必须继承 \\\\Model 类.',\n    'mass_assignment_failed' => '为模型属性\\':attribute\\'赋值失败.',\n  ],\n  'warnings' => [\n    'tips' => '系统配置提示',\n    'tips_description' => '为了正确配置系统，您需要注意一些问题。',\n  ],\n  'editor' => [\n    'toolbar_buttons_presets' => [\n      'default' => '默认',\n      'minimal' => '精简',\n      'full' => '完整',\n    ],\n    'paragraph_formats_comment' => '将出现在段落格式下拉列表中的选项。',\n  ],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => '我的设置',\n    'menu_description' => '涉及您管理帐号的设置',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => '强调色',\n  ],\n  'backend_preferences' => [],\n  'filter' => [\n    'all' => '全部',\n    'options_method_not_exists' => '模型类 :model 必须定义一个方法 :method() 返回 \\':filter\\' 过滤器的选项。',\n    'options_static_method_invalid_value' => ':class 上的静态方法 \\':method()\\' 没有返回有效的选项数组。',\n    'date_all' => '所有时期',\n    'number_all' => '所有数字',\n  ],\n  'import_export' => [\n    'row' => ':row 行',\n    'encodings' => [\n      'utf_8' => 'UTF-8',\n      'us_ascii' => 'US-ASCII',\n      'iso_8859_1' => 'ISO-8859-1 (Latin-1, Western European)',\n      'iso_8859_2' => 'ISO-8859-2 (Latin-2, Central European)',\n      'iso_8859_3' => 'ISO-8859-3 (Latin-3, South European)',\n      'iso_8859_4' => 'ISO-8859-4 (Latin-4, North European)',\n      'iso_8859_5' => 'ISO-8859-5 (Latin, Cyrillic)',\n      'iso_8859_6' => 'ISO-8859-6 (Latin, Arabic)',\n      'iso_8859_7' => 'ISO-8859-7 (Latin, Greek)',\n      'iso_8859_8' => 'ISO-8859-8 (Latin, Hebrew)',\n      'iso_8859_0' => 'ISO-8859-9 (Latin-5, Turkish)',\n      'iso_8859_10' => 'ISO-8859-10 (Latin-6, Nordic)',\n      'iso_8859_11' => 'ISO-8859-11 (Latin, Thai)',\n      'iso_8859_13' => 'ISO-8859-13 (Latin-7, Baltic Rim)',\n      'iso_8859_14' => 'ISO-8859-14 (Latin-8, Celtic)',\n      'iso_8859_15' => 'ISO-8859-15 (Latin-9, Western European revision with euro sign)',\n      'windows_1251' => 'Windows-1251 (CP1251)',\n      'windows_1252' => 'Windows-1252 (CP1252)',\n    ],\n  ],\n  'permissions' => [\n    'manage_media' => '上传和管理媒体内容 - 图像、视频、声音、文档',\n  ],\n  'mediafinder' => [\n    'label' => '媒体查找器',\n    'no_image' => '找不到图片',\n    'not_an_image' => '所选文件不是图像',\n    'click_to_select_file' => '点击选择文件',\n  ],\n  'media' => [\n    'menu_label' => '媒体',\n    'upload' => '上传',\n    'move' => '移动',\n    'delete' => '删除',\n    'add_folder' => '增加文件夹',\n    'search' => '搜索',\n    'display' => '显示',\n    'filter_everything' => '所有',\n    'filter_images' => '图片',\n    'filter_video' => '视频',\n    'filter_audio' => '音频',\n    'filter_documents' => '文档',\n    'library' => '库',\n    'size' => '大小',\n    'title' => '标题',\n    'last_modified' => '最近修改',\n    'public_url' => '公开URL',\n    'click_here' => '点击这里',\n    'thumbnail_error' => '生成缩略图错误.',\n    'return_to_parent' => '返回上层文件夹',\n    'return_to_parent_label' => '返回 ..',\n    'nothing_selected' => '没有选中.',\n    'multiple_selected' => '多选.',\n    'uploading_file_num' => '上传 :number 文件...',\n    'uploading_complete' => '上传完毕',\n    'uploading_error' => '上传失败',\n    'type_blocked' => '该文件类型因安全问题被禁止使用。',\n    'order_by' => '排序',\n    'direction' => '升降序',\n    'direction_asc' => '升序',\n    'direction_desc' => '降序',\n    'folder' => '文件夹',\n    'no_files_found' => '未找到您所请求的文件.',\n    'delete_empty' => '请选择删除项.',\n    'delete_confirm' => '您是否想要删除选中项?',\n    'error_renaming_file' => '重命名错误.',\n    'new_folder_title' => '新文件',\n    'folder_name' => '文件夹名',\n    'error_creating_folder' => '新建文件夹错误',\n    'folder_or_file_exist' => '文件夹或文件已经存在.',\n    'move_empty' => '请选择移动项.',\n    'move_popup_title' => '移动文件或文件夹',\n    'move_destination' => '目标文件夹',\n    'please_select_move_dest' => '请选择目标文件夹.',\n    'move_dest_src_match' => '请选择另一个目标文件夹.',\n    'empty_library' => '媒体库为空。请上传文件或新建文件夹。',\n    'insert' => '插入',\n    'crop_and_insert' => '裁剪并插入',\n    'select_single_image' => '请选择图片.',\n    'selection_not_image' => '所选项不为图片.',\n    'restore' => '取消所有更改',\n    'resize' => '调整大小...',\n    'selection_mode_normal' => '正常',\n    'selection_mode_fixed_ratio' => '固定比例',\n    'selection_mode_fixed_size' => '固定大小',\n    'height' => '高度',\n    'width' => '宽度',\n    'selection_mode' => '选择模式',\n    'resize_image' => '调整图片',\n    'image_size' => '图片大小:',\n    'selected_size' => '选中:',\n  ],\n  'table' => [\n    'add_item' => '添加项目',\n  ],\n  'dictionary' => [\n    'key_required' => 'Key 字段是必需的',\n    'value_required' => 'Value字段是必需的',\n  ],\n  'uploader' => [\n    'uploading' => '上传文件',\n    'complete' => '上传完成',\n  ],\n  'richeditor' => [\n    'upload_from_computer' => '从计算机上传',\n    'embedding_code' => '嵌入代码',\n    'url_required' => 'URL 是必需的',\n    'url_validation' => 'URL 必须以 http:// 或 https:// 开头',\n    'add_image' => '插入图片',\n    'add_video' => '插入视频',\n    'add_audio' => '插入音频',\n    'add_file' => '插入文件',\n    'embedding_code_required' => '需要嵌入代码',\n    'embedding_code_invalid' => '请输入有效的 HTML 嵌入代码',\n    'embedding_code_invalid_title' => '无效代码',\n    'browse' => '浏览媒体库',\n    'by_url' => '按网址',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/zh-cn.json",
    "content": "{\n  \"Cancel\": \"取消\",\n  \"You are viewing as\": \"您正在查看\",\n  \"Preview Role\": \"预览角色\",\n  \"This lets you test the actions this role can perform.\": \"这让您可以测试此角色可以执行的操作。\",\n  \"View As Role\": \"按角色查看\",\n  \"Return to Role Settings\": \"返回角色设置\",\n  \"Password must have a minimum of length of :min characters\": \"密码长度必须至少为 :min 个字符\",\n  \"Password must contain at least one uppercase character.\": \"密码必须至少包含一个大写字符。\",\n  \"Password must contain at least one lowercase character.\": \"密码必须至少包含一个小写字符。\",\n  \"Password must contain at least one number.\": \"密码必须包含至少一个数字。\",\n  \"Password must contain at least one nonalphanumeric character.\": \"密码必须至少包含一个非字母数字字符。\",\n  \"Welcome to your Administration Area, :name\": \"欢迎来到您的管理区域，:name\",\n  \"Duplicate\": \"复制\",\n  \"Expand\": \"展开\",\n  \"Collapse\": \"折叠\",\n  \"Move Up\": \"上移\",\n  \"Move Down\": \"下移\",\n  \"Remove\": \"移除\",\n  \"Manage Item\": \"管理项目\",\n  \"Clear Filters\": \"清除过滤器\",\n  \"Filter Setup\": \"过滤器设置\",\n  \"Apply\": \"应用\",\n  \"Clear\": \"清除\",\n  \"is equal to\": \"等于\",\n  \"is between\": \"在...之间\",\n  \"contains\": \"包含\",\n  \"is before\": \"在之前\",\n  \"is after\": \"在之后\",\n  \"is greater than\": \"大于\",\n  \"is less than\": \"小于\",\n  \"1. Export output format\": \"1. 导出输出格式\",\n  \"File Format\": \"文件格式\",\n  \"Delimiter Character\": \"定界符\",\n  \"Enclosure Character\": \"包围字符\",\n  \"Escape Character\": \"转义字符\",\n  \"2. Select columns to export\": \"2. 选择导出的列\",\n  \"Columns\": \"列\",\n  \"3. Set export options\": \"3. 设置导出选项\",\n  \"CSV Custom\": \"自定义格式\",\n  \"1. Upload an Import File\": \"1. 上传一个 CSV 文件\",\n  \"Import File\": \"导入文件\",\n  \"File Encoding\": \"文件编码\",\n  \"First row contains column titles\": \"第一行包含列标题\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"如果将 CSV 中的第一行用作列标题，请选中此选项。\",\n  \"2. Match the File Columns to Database Fields\": \"2. 将文件列与数据库字段匹配\",\n  \"File columns\": \"文件列\",\n  \"Database fields\": \"数据库字段\",\n  \"3. Set Import Options\": \"3. 设置导入选项\",\n  \"Export progress\": \"导出进度\",\n  \"Processing\": \"处理中...\",\n  \"Import progress\": \"导入进度\",\n  \"Import error\": \"导入错误\",\n  \"Export error\": \"导出错误\",\n  \"Column preview\": \"预览列\",\n  \"Column\": \"列\",\n  \"Disable\": \"禁用\",\n  \"Enable\": \"启用\",\n  \"Delete\": \"删除\",\n  \"Export\": \"导出\",\n  \"Import\": \"导入\",\n  \"Select Action\": \"选择动作\",\n  \"Please create a new account for logging in to the Administration Area.\": \"请创建一个新帐户以登录管理区。\",\n  \"First Name\": \"名\",\n  \"Last Name\": \"姓\",\n  \"Email Address\": \"电子邮件地址\",\n  \"Pick a Username\": \"选择一个用户名\",\n  \"Enter New Password\": \"输入新密码\",\n  \"Confirm Password\": \"确认密码\",\n  \"Create Account\": \"创建帐号\",\n  \"Getting Ready\": \"准备\",\n  \"Just a few more minutes\": \"再过几分钟\",\n  \"Migrating Database\": \"迁移数据库\",\n  \"Access the Backend Panel\": \"访问后端面板\",\n  \"View Backend During Maintenance\": \"在维护期间查看后端\",\n  \"Perform Software Updates\": \"执行软件更新\",\n  \"In Maintenance\": \"维护中\",\n  \"The site is currently in maintenance mode, please check back later.\": \"该网站目前处于维护模式，请稍后再回来查看。\",\n  \"Dashboard\": \"仪表盘\",\n  \"Administrators\": \"管理员\",\n  \"Manage Admins\": \"管理管理员\",\n  \"Create Admins\": \"创建管理员\",\n  \"Moderate Admins\": \"中级管理员\",\n  \"Manage account suspension and ban admin accounts\": \"管理帐户暂停和禁止管理员帐户\",\n  \"Role Permissions\": \"管理角色\",\n  \"Team Groups\": \"管理群组\",\n  \"Manage Other Admins\": \"管理其他管理员\",\n  \"Allow users to reset passwords and update emails.\": \"允许重置密码和更新电子邮件\",\n  \"Delete Admins\": \"删除管理员\",\n  \"Preferences\": \"优先\",\n  \"Settings\": \"设置\",\n  \"Background Color\": \"背景颜色\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"允许用户创建新角色以及编辑或删除低于其最高角色的角色。\",\n  \"Save Changes\": \"保存更改\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"此日志显示管理员成功登录信息。记录将保存 :days 天。\",\n  \"Access Log\": \"访问日志\",\n  \"View a list of successful back-end user sign ins.\": \"查看已登录的后台用户日志。\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"日期 & 时间\",\n  \"Type\": \"类型\",\n  \"IP address\": \"IP地址\",\n  \"Username\": \"用户名\",\n  \"Login\": \"登录\",\n  \"First name\": \"名\",\n  \"Last name\": \"姓\",\n  \"Email\": \"电子邮箱\",\n  \"A custom schema is used for this file format.\": \"自定义架构用于此文件格式。\",\n  \"Select\": \"选择\",\n  \"Replace\": \"替换\",\n  \"and\": \"和\",\n  \"Go\": \"前往\",\n  \"Go to page\": \"跳页\",\n  \"Copy to Clipboard\": \"复制到剪贴板\",\n  \"Reveal Contents\": \"显示内容\",\n  \"Selected Site\": \"选择站点\",\n  \"Use Emmet abbreviations\": \"使用Emmet缩写\",\n  \"A record does not exist for the selected site. Create one?\": \"所选站点的记录不存在,创建一个？\",\n  \"The details you entered did not match our records. Please double-check and try again.\": \"无法匹配到您输入的相关内容，请检查后重试。\",\n  \"Administration Area\": \"管理\",\n  \"Password Reset\": \"密码重置\",\n  \"Please enter a new password.\": \"请输入新密码。\",\n  \"Password\": \"密码\",\n  \"Password Restore\": \"密码恢复\",\n  \"Please enter your login to restore the password.\": \"请输入您的登录名以恢复密码。\",\n  \"A user could not be found with a login value of ':login'\": \"找不到用户 ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"密码重置邮件已发至您的邮箱。\",\n  \"Invalid password reset data supplied. Please try again!\": \"密码重置失败. 请重试！\",\n  \"Unable to reset your password!\": \"无法重置您的密码！\",\n  \"Password has been reset. You may now sign in.\": \"密码已重置。 您现在可以登录了。\",\n  \"Restore\": \"还原\",\n  \"Reset\": \"重置\",\n  \"Stay logged in\": \"保持登录状态\",\n  \"Forgot password?\": \"忘记密码?\",\n  \"Global Editor Settings\": \"全局编辑器设置\",\n  \"Manage Widgets\": \"管理小部件\",\n  \"Add Widget\": \"添加小部件\",\n  \"Set the current layout as the default?\": \"是否设置当前布局作为默认？\",\n  \"Make Default\": \"设为默认\",\n  \"Reset layout back to default?\": \"是否将布局恢复为默认？\",\n  \"Reset Layout\": \"重置布局\",\n  \"Widget\": \"小工具\",\n  \"please select\": \"请选择\",\n  \"Width\": \"宽度\",\n  \"full width\": \"全部宽度\",\n  \"Create Widgets\": \"创建小工具\",\n  \"not equal to\": \"不等于\",\n  \"Light Mode\": \"浅色模式\",\n  \"Dark Mode\": \"深色模式\",\n  \"OS Default\": \"跟随系统\",\n  \"Create a Custom Palette\": \"创建自定义调色板\",\n  \"Custom Palette\": \"自定义调色板\",\n  \"Primary Color\": \"主色\",\n  \"Secondary Color\": \"次要颜色\",\n  \"Selection Color\": \"选中颜色\",\n  \"Nav Text\": \"导航文本\",\n  \"Nav Background\": \"导航背景\",\n  \"Sidebar Text\": \"边栏文本\",\n  \"Sidebar Background\": \"边栏背景\",\n  \"Sidebar Active Text\": \"边栏活动文本\",\n  \"Sidebar Active Background\": \"边栏活动背景\",\n  \"Sidebar Hover Background\": \"边栏悬停背景\",\n  \"Settings Text\": \"设置文本\",\n  \"Settings Background\": \"设置背景\",\n  \"Settings Item Background\": \"设置项目背景\",\n  \"Settings Active Color\": \"设置活动颜色\",\n  \"Settings Active Background\": \"设置活动背景\",\n  \"Settings Hover Background\": \"设置悬停背景\",\n  \"This name is shown in the title area of the back-end.\": \"这个名称显示在后台的标题区域.\",\n  \"App Name\": \"站点名称\",\n  \"This name is shown on the sign in screen for the back-end.\": \"此名称显示在后端的登录屏幕上。\",\n  \"App Tagline\": \"站点标语\",\n  \"Brand\": \"品牌\",\n  \"Upload a custom logo to use in the back-end.\": \"上传自定义图标到后台.\",\n  \"Logo\": \"图标\",\n  \"Upload a custom favicon to use in the back-end\": \"上传自定义后台浏览器的favicon\",\n  \"Favicon\": \"浏览器favicon\",\n  \"Navigation Logo\": \"导航徽标\",\n  \"Replaces the dashboard link with a custom logo in the navigation.\": \"在导航中将仪表板链接替换为自定义徽标。\",\n  \"Dashboard Icon\": \"仪表盘图标\",\n  \"Use a custom image for the dashboard icon (60x60).\": \"使用自定义图像作为仪表板图标(60x60)\",\n  \"This message is shown on the sign in screen for the back-end.\": \"此消息显示在后端的登录屏幕上。\",\n  \"Welcome Message\": \"欢迎语\",\n  \"Login Page\": \"登录页面\",\n  \"Background Type\": \"背景类型\",\n  \"Flat Color\": \"纯色\",\n  \"Wallpaper\": \"壁纸\",\n  \"Wallpaper Size\": \"壁纸尺寸\",\n  \"Auto\": \"自动\",\n  \"Cover\": \"封面\",\n  \"Background Wallpaper Image\": \"背景壁纸图片\",\n  \"Image\": \"图像\",\n  \"Random Autumn Images\": \"随机秋季图片\",\n  \"Custom Image\": \"自定义图片\",\n  \"Login Page Image\": \"登录页面图片\",\n  \"Colors\": \"颜色\",\n  \"Color Mode\": \"颜色模式\",\n  \"Color Preset\": \"颜色预设\",\n  \"Menu Style\": \"菜单样式\",\n  \"Navigation\": \"导航\",\n  \"Custom Stylesheet\": \"定制样式表\",\n  \"Styles\": \"样式\",\n  \"Inline\": \"内联\",\n  \"Text\": \"文本\",\n  \"Tiles\": \"磁贴\",\n  \"Collapsed\": \"折叠\",\n  \"Icons\": \"图标\",\n  \"Left Side\": \"左侧\",\n  \"Add New Item\": \"添加新项目\",\n  \"Link Color\": \"链接颜色\",\n  \"Current Password\": \"当前密码\",\n  \"New Password\": \"新密码\",\n  \"Current password does not match. Please try again!\": \"您的密码不匹配。请再试一次。\",\n  \"Your password has expired, please create a new one for security reasons.\": \"您的密码已过期，基于安全原因请创建一个新密码。\",\n  \"Region\": \"地区\",\n  \"Locale\": \"语言\",\n  \"Select your desired locale for language use.\": \"选择您想要的语言环境.\",\n  \"Timezone\": \"时区\",\n  \"Adjust displayed dates to this timezone.\": \"选择您希望使用的本地语言。\",\n  \"Code Editor\": \"代码编辑器\",\n  \"Color Scheme\": \"色彩主题\",\n  \"Word Wrap\": \"自动换行\",\n  \"Off\": \"关闭\",\n  \"40 Characters\": \"40字符\",\n  \"80 Characters\": \"80字符\",\n  \"Fluid\": \"流体\",\n  \"Font Size\": \"字体大小\",\n  \"Tab Size\": \"标签大小\",\n  \"Code Folding\": \"代码折叠\",\n  \"Mark begin\": \"标记开始\",\n  \"Mark begin and end\": \"标记开始与结束\",\n  \"Autocompletion\": \"自动完成\",\n  \"Basic Autocompletion (Ctrl + Space)\": \"基本自动完成 (Ctrl + Space)\",\n  \"Live Autocompletion\": \"实时自动完成\",\n  \"Show gutter\": \"显示侧边栏\",\n  \"Highlight active line\": \"高亮活动行\",\n  \"Automatically close tags\": \"自动关闭标签\",\n  \"Indent using tabs\": \"使用标签页缩进\",\n  \"Show indent guides\": \"显示缩进指南\",\n  \"Show invisible characters\": \"显示隐藏字符\",\n  \"Show print margin\": \"显示打印边距\",\n  \"Custom styles to include in the HTML editor.\": \"在HTML编辑器中包含自定义样式\",\n  \"Markup Styles\": \"标记样式\",\n  \"Paragraph Formats\": \"段落格式\",\n  \"Markup Classes\": \"标记类\",\n  \"Label\": \"标签\",\n  \"Paragraph\": \"段落\",\n  \"Class Name\": \"类名\",\n  \"Link\": \"链接\",\n  \"Table\": \"表格\",\n  \"Table Cell\": \"单元格\",\n  \"Allowed Tags\": \"允许标签\",\n  \"The list of allowed tags.\": \"允许标签列表.\",\n  \"Markup Tags\": \"标记标签\",\n  \"Allowed Empty Tags\": \"允许空标签\",\n  \"The list of tags that are not removed when they have no content inside.\": \"当标签内无内容时，其不会被移除.\",\n  \"Do Not Wrap Tags\": \"无法包裹标签\",\n  \"The list of tags that should not be wrapped inside block tags.\": \"所列标签无法包裹于快级标签中\",\n  \"Remove Tags\": \"移除标签\",\n  \"The list of tags that are removed together with their content.\": \"连同其内容一起被删除的标签列表。\",\n  \"Line Breaker Tags\": \"换行标签\",\n  \"The list of tags that are used to place a line breaker element between.\": \"用于在其间放置换行符元素的标签列表。\",\n  \"Toolbar Buttons\": \"工具栏按钮\",\n  \"The Toolbar Buttons to be displayed in the Rich Editor by default.\": \"默认显示在富文本编辑器中的工具栏按钮。\",\n  \"Insert a preset toolbar button configuration\": \"插入预设的工具栏按钮配置\",\n  \"Allowed Attributes\": \"允许的属性\",\n  \"The list of allowed HTML attributes, in addition to the normal allowances.\": \"除了标准属性之外，还允许使用 HTML 属性列表。\",\n  \"Enable code snippets (Tab)\": \"开启代码片段 (Tab)\",\n  \"Title\": \"标题\",\n  \"Description\": \"描述\",\n  \"Attachment\": \"附件\",\n  \"Attachment URL\": \"附件网址\",\n  \"Add a title and description for this attachment.\": \"为此附件添加标题和描述。\",\n  \"Upload\": \"上传\",\n  \"Are you sure?\": \"您确定?\",\n  \"Delete Selected\": \"删除选中\",\n  \"Upload Error\": \"上传错误\",\n  \"Remove File\": \"删除文件\",\n  \"Show Light Switch\": \"显示颜色模式开关\",\n  \"Allow users to toggle the color mode from the navigation.\": \"允许用户切换导航栏中的颜色模式。\",\n  \"Create :name\": \"创建 :name\",\n  \"Update :name\": \"更新 :name\",\n  \"Add :name\": \"增加 :name\",\n  \"Link :name\": \"关联 :name\",\n  \"Unlink\": \"取消关联\",\n  \"Preview :name\": \"预览 :name\",\n  \"Link a New :name\": \"关联新的 :name\",\n  \"Add a New :name\": \"增加新的 :name\",\n  \"Related :name Data\": \"相关的 :name\",\n  \":name Created\": \"成功创建 :name\",\n  \":name Updated\": \"成功更新 :name\",\n  \":name Deleted\": \"成功删除 :name\",\n  \":name Added\": \":name 已添加\",\n  \":name Linked\": \":name 已关联\",\n  \":name Removed\": \":name 已删除\",\n  \":name Unlinked\": \":name 已取消关联\",\n  \"Form record with an ID of :id could not be found.\": \"无法找到 ID 为 :id 的表单记录。\",\n  \"Remove Selected\": \"移除所选\",\n  \"Unlink Selected\": \"取消选择\",\n  \"Preview the Website\": \"预览网站\",\n  \"Manage back-end administrator users, groups and permissions.\": \"管理后台管理员用户, 组和权限.\",\n  \"Define permissions for administrators based on their role.\": \"根据管理员的角色定义他们的权限。\",\n  \"Add administrators to groups used for notifications and features.\": \"将管理员添加到用于通知和功能的组。\",\n  \"Branding & Appearance\": \"自定义后台\",\n  \"Customize the administration area such as name, colors and logo.\": \"自定义管理区域, 比如名字, 颜色和图标.\",\n  \"Editor Settings\": \"代码编辑器选项\",\n  \"Change the global editor preferences.\": \"自定义代码编辑器选项，比如字体大小和颜色主题.\",\n  \"My Account\": \"我的账户\",\n  \"Update your account details such as name, email address and password.\": \"更新你的账户细节, 如姓名、邮件地址和密码.\",\n  \"Backend Preferences\": \"偏好设置\",\n  \"Manage your account preferences such as desired language.\": \"管理你的后台偏好设置，如使用语言。\",\n  \"security login\": \"安全登录\",\n  \"List Setup\": \"列表设置\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"使用复选框选择您想要在列表中看到的列。您可以通过向上或向下拖动来更改列的位置。\",\n  \"Records Per Page\": \"每页记录数\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"选择每个页面要显示的记录数量。请注意单个页面上的记录数量太多可能会降低性能。\",\n  \"Reset to Default\": \"重置默认\",\n  \"Add Selected\": \"添加选中项\",\n  \"Create & Close\": \"创建并关闭\",\n  \"Creating :name...\": \"创建 :name...\",\n  \"Save & Close\": \"保存并关闭\",\n  \"Saving :name...\": \"正在保存 :name...\",\n  \"Delete this record?\": \"删除这条记录？\",\n  \"Deleting :name...\": \"正在删除 :name...\",\n  \"Loading...\": \"加载中…\",\n  \"Complete\": \"完成\",\n  \"Please specify the modelClass property for :type\": \"请指定 :type 的 modelClass 属性\",\n  \"Please specify some columns to export.\": \"请指定要导出的列。\",\n  \"Missing column identifier\": \"缺少列标识符\",\n  \"Unknown column\": \"未知列\",\n  \"Please specify some columns to import.\": \"请指定要导出的列。\",\n  \"Please match some columns first.\": \"请先匹配一些列。\",\n  \"Please specify a match for the required field :label.\": \"请指定一个匹配的字段:label。\",\n  \"Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.\": \"源文件编码无法识别。请选择带正确编码的自定义文件格式选项以导入文件。\",\n  \"You must implement the controller behavior ListController with the export 'useList' option enabled.\": \"您必须实现控制器行为列表控制器，并启用了导出“useList”选项。\",\n  \"File export process completed!\": \"文件导出已完成！\",\n  \"The browser will now redirect to the file download.\": \"浏览器将重定向到文件下载。\",\n  \"Ignore this column\": \"忽略此列\",\n  \"Drop column here...\": \"将列拖放到此处...\",\n  \"Please upload a valid CSV file.\": \"请上传有效的 XLSX 文件。\",\n  \"Created\": \"已创建\",\n  \"Updated\": \"已更新\",\n  \"Skipped\": \"已跳过\",\n  \"Warnings\": \"警告\",\n  \"Errors\": \"出错\",\n  \"Skipped Rows\": \"跳过行\",\n  \"Show Ignored Columns\": \"显示忽略的列\",\n  \"Auto Match Columns\": \"自动匹配列\",\n  \"File not found\": \"未能找到文件\",\n  \"There was no data supplied to export\": \"没有提供要导出的数据\",\n  \"Debug mode is enabled. This is not recommended for production installations.\": \"调试模式已启用。 不建议将其用于生产安装。\",\n  \"The backend URL :name is too generic. Please set to something more unique.\": \"后端URL :name 太普通。请设置为更特殊的内容。\",\n  \"An account with a generic login :name was found. Please rename this administrator account.\": \"找到具有通用登录名：name 的帐户。请重命名此管理员帐户。\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP 扩展名 :name 未安装。 请安装这个库并激活扩展。\",\n  \"The plugin :name is a dependency but is not installed. Please install this plugin.\": \"插件 :name 是一个依赖项，但尚未安装。 请安装这个插件。\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"目录 :name 或其子目录对于 PHP 不可写。 请为该目录的网络服务器设置相应的权限。\"\n}"
  },
  {
    "path": "modules/backend/lang/zh-tw/lang.php",
    "content": "<?php return [\n  'auth' => [],\n  'field' => [\n    'invalid_type' => '錯誤的字串類型 :type',\n    'options_method_not_exists' => '模型 :model 必須定義一個返回 \\':field\\' 表單字串選項的方法 :method()。',\n  ],\n  'widget' => [\n    'not_registered' => '元件 \\':name\\' 還沒註冊',\n    'not_bound' => '元件 \\':name\\' 沒綁到控制器',\n  ],\n  'page' => [\n    'untitled' => '未命名',\n    'access_denied' => [\n      'label' => '拒絕訪問',\n      'help' => '您沒有訪問這個頁面需要的權限.',\n      'cms_link' => '返回管理介面',\n    ],\n  ],\n  'partial' => [\n    'not_found_name' => '元件 \\':name\\' 找不到.',\n  ],\n  'account' => [\n    'sign_out' => '登出',\n    'login_placeholder' => '登入',\n    'password_placeholder' => '密碼',\n    'enter_email' => '輸入您的email',\n    'email_placeholder' => 'email',\n    'apply' => '套用',\n    'cancel' => '取消',\n    'delete' => '刪除',\n    'ok' => 'OK',\n  ],\n  'dashboard' => [\n    'menu_label' => '儀表板',\n    'widget_inspector_title' => '元件設定',\n    'widget_inspector_description' => '設定報表元件',\n    'widget_columns_label' => '寬度 :columns',\n    'widget_columns_description' => '元件寬度, 1 到 10',\n    'widget_columns_error' => '請輸入元件寬度, 1 到 10',\n    'columns' => '{1} 欄|[2,Inf] 欄',\n    'widget_new_row_label' => '強制新列',\n    'widget_new_row_description' => '把元件放到新列',\n    'widget_title_label' => '元件標題',\n    'widget_title_error' => '需要元件標題',\n    'reset_layout_success' => '版面已重置。',\n    'make_default_success' => '已設定此版面為預設。',\n    'status' => [\n      'widget_title_default' => '系統狀態',\n      'update_available' => '{0} 更新可用!|{1} 更新可用!|[2,Inf] 更新可用!',\n    ],\n  ],\n  'user' => [\n    'name' => '管理員',\n    'list_title' => '管理',\n    'new' => '新管理員',\n    'first_name' => '名',\n    'last_name' => '姓',\n    'full_name' => '全名',\n    'email' => '郵件',\n    'groups' => '團隊',\n    'groups_comment' => '指定這個人屬於哪個群組',\n    'avatar' => '頭像',\n    'password' => '密碼',\n    'password_confirmation' => '確認密碼',\n    'permissions' => '權限',\n    'account' => '帳號',\n    'superuser' => '超級使用者',\n    'superuser_comment' => '選取並允許這個人訪問全部區域',\n    'send_invite' => '發送邀請郵件',\n    'send_invite_comment' => '發送一封包含使用者名和密碼的歡迎郵件',\n    'delete_confirm' => '您真的想要刪除這個管理員?',\n    'return' => '返回管理員列表',\n    'allow' => '允許',\n    'inherit' => '繼承',\n    'deny' => '拒絕',\n    'group' => [\n      'name' => '群組',\n      'name_field' => '名字',\n      'description_field' => '描述',\n      'is_new_user_default_field' => '預設增加新管理員到這個群組',\n      'code_field' => '代碼',\n      'code_comment' => '如果您想訪問 API, 請輸入唯一碼',\n      'list_title' => '管理群組',\n      'new' => '新管理群組',\n      'delete_confirm' => '您真的想要刪除這個管理群組?',\n      'return' => '返回群組列表',\n    ],\n    'preferences' => [\n      'not_authenticated' => '沒有認證使用者載入或儲存設定',\n    ],\n  ],\n  'list' => [\n    'default_title' => '列表',\n    'search_prompt' => '搜尋...',\n    'no_records' => '目前頁面中沒有記錄',\n    'missing_model' => ':class 中的列表沒有定義好的模型。',\n    'missing_column' => '沒有 :columns 的欄定義',\n    'missing_columns' => ':class 中使用的列表沒有定義好的欄',\n    'missing_definition' => '列表不包含 \\':field\\' 欄.',\n    'behavior_not_ready' => '列表沒有初始化, 確認您的控制器中調用了makeLists()',\n    'invalid_column_datetime' => '欄值 \\':column\\' 不是時間對象, 缺少了 $dates 在模型中的引用嗎?',\n    'pagination' => '顯示記錄: :from-:to :total',\n    'prev_page' => '之前頁',\n    'next_page' => '下一頁',\n    'loading' => '載入中...',\n    'delete_selected' => '刪除選擇的',\n    'delete_selected_empty' => '沒有需要刪除的記錄',\n    'delete_selected_confirm' => '刪除選取的記錄?',\n    'delete_selected_success' => '成功刪除選擇的記錄',\n  ],\n  'fileupload' => [],\n  'form' => [\n    'create_title' => '新 :name',\n    'update_title' => '編輯 :name',\n    'preview_title' => '預覽 :name',\n    'missing_id' => '表單記錄ID沒有指定',\n    'missing_model' => ':class 中使用的表單沒有定義的model',\n    'missing_definition' => '表單不包含字串 \\':field\\'.',\n    'action_confirm' => '您確定?',\n    'create' => '建立',\n    'create_and_close' => '建立和關閉',\n    'creating' => '建立中...',\n    'creating_name' => '建立 :name...',\n    'save' => '儲存',\n    'save_and_close' => '儲存和關閉',\n    'saving' => '儲存...',\n    'saving_name' => '儲存 :name...',\n    'delete' => '刪除',\n    'deleting' => '刪除中...',\n    'deleting_name' => '刪除 :name...',\n    'reset_default' => '重置到預設',\n    'resetting' => '重置',\n    'resetting_name' => '重置 :name',\n    'undefined_tab' => '雜項',\n    'field_off' => '關',\n    'field_on' => '開',\n    'add' => '增加',\n    'apply' => '確定',\n    'cancel' => '取消',\n    'close' => '關閉',\n    'confirm' => '確認',\n    'reload' => '重新載入',\n    'ok' => 'OK',\n    'or' => '或',\n    'confirm_tab_close' => '您真的想要關閉這個標籤嗎? 未儲存的改變會丟失',\n    'behavior_not_ready' => '表單還沒初始化, 確保您調用了控制器中的 initForm()',\n    'preview_no_files_message' => '檔案沒有上傳',\n    'select' => '選擇',\n    'select_all' => '全選',\n    'select_none' => '選擇無',\n    'insert_row' => '插入行',\n    'delete_row' => '刪除行',\n    'concurrency_file_changed_title' => '檔案異動',\n    'concurrency_file_changed_description' => '您正在編輯的檔案正在被其他使用者修改. 您可以重新載入或覆蓋硬碟上的檔案.',\n  ],\n  'relation' => [\n    'missing_config' => '關聯沒有\\':config\\'的設定檔案.',\n    'missing_definition' => '關聯不包含 \\':field\\' 的定義.',\n    'missing_model' => '用於 :class 的關聯沒有定義好的model.',\n    'invalid_action_single' => '這個操作不能在單一關聯上執行.',\n    'invalid_action_multi' => '這個操作不能在多重關聯上執行.',\n    'help' => '點選增加',\n    'add' => '增加',\n    'link_selected' => '關聯選取',\n    'cancel' => '取消',\n    'close' => '關閉',\n    'create' => '建立',\n    'update' => '更新',\n    'preview' => '預覽',\n    'remove_name' => '移除 :name',\n    'delete_name' => '刪除 :name',\n    'link' => '關聯',\n    'unlink_name' => '取消關聯 :name',\n  ],\n  'model' => [\n    'name' => 'Model',\n    'not_found' => 'Model \\':class\\' ID :id 找不到',\n    'missing_id' => '沒有指定的ID搜尋model記錄',\n    'missing_relation' => 'Model \\':class\\' 不包含 \\':relation\\'.',\n    'missing_method' => 'Model \\':class\\' 不包含 \\':method\\'.',\n    'invalid_class' => 'Model :model 在 :class 中是錯誤的, 必須繼承 \\\\Model class.',\n    'mass_assignment_failed' => '針對Model屬性\\':attribute\\'的大量賦值失敗.',\n  ],\n  'warnings' => [\n    'tips' => '系統設定技巧',\n    'tips_description' => '您需要注意那些issue, 以使系統設定正確',\n  ],\n  'editor' => [],\n  'tooltips' => [],\n  'mysettings' => [\n    'menu_label' => '我的設定',\n    'menu_description' => '設定涉及到您的管理帳號',\n  ],\n  'myaccount' => [],\n  'branding' => [\n    'accent_color' => 'Accent color',\n  ],\n  'backend_preferences' => [],\n  'access_log' => [],\n  'filter' => [\n    'all' => '全部',\n    'date_all' => '全部區間',\n    'number_all' => '全部數目',\n  ],\n  'permissions' => [\n    'manage_media' => 'Create new media items - images, videos, sounds, documents',\n  ],\n  'mediafinder' => [\n    'label' => 'Media Finder',\n    'default_prompt' => 'Click the %s button to find a media item',\n  ],\n  'media' => [\n    'menu_label' => '媒體',\n    'upload' => '上傳',\n    'move' => '移動',\n    'delete' => '刪除',\n    'add_folder' => '增加檔案夾',\n    'search' => '搜尋',\n    'display' => '顯示',\n    'filter_everything' => '所有',\n    'filter_images' => '圖片',\n    'filter_video' => '影片',\n    'filter_audio' => '音訊',\n    'filter_documents' => '文檔',\n    'library' => '媒體庫',\n    'size' => '大小',\n    'title' => '標題',\n    'last_modified' => '最近修改',\n    'public_url' => '公開URL',\n    'click_here' => '點選這裡',\n    'thumbnail_error' => '生產縮略圖錯誤.',\n    'return_to_parent' => '返回上層檔案夾',\n    'return_to_parent_label' => '返回 ..',\n    'nothing_selected' => '沒有選中.',\n    'multiple_selected' => '多選.',\n    'uploading_file_num' => '上傳 :number 檔案...',\n    'uploading_complete' => '上傳完畢',\n    'order_by' => '排列方式',\n    'folder' => '檔案夾',\n    'no_files_found' => '沒找到您請求的檔案.',\n    'delete_empty' => '請選擇刪除項.',\n    'delete_confirm' => '您是否想要刪除選中項?',\n    'error_renaming_file' => '重命名錯誤.',\n    'new_folder_title' => '新檔案',\n    'folder_name' => '檔案夾名',\n    'error_creating_folder' => '新建檔案夾錯誤',\n    'folder_or_file_exist' => '檔案夾或檔案已經存在.',\n    'move_empty' => '請選擇移動項.',\n    'move_popup_title' => '移動檔案或檔案夾',\n    'move_destination' => '目標檔案夾',\n    'please_select_move_dest' => '請選擇目標檔案夾.',\n    'move_dest_src_match' => '請選擇另一個目標檔案夾.',\n    'empty_library' => '媒體庫是空的. 從上傳檔案或建立檔案夾開始.',\n    'insert' => '插入',\n    'crop_and_insert' => '裁剪並插入',\n    'select_single_image' => '請選擇一張圖片.',\n    'selection_not_image' => '選擇的不是一張圖片.',\n    'restore' => '取消所有更改',\n    'resize' => '調整大小...',\n    'selection_mode_normal' => '正常',\n    'selection_mode_fixed_ratio' => '固定比例',\n    'selection_mode_fixed_size' => '固定大小',\n    'height' => '高度',\n    'width' => '寬度',\n    'selection_mode' => '選擇模式',\n    'resize_image' => '調整圖片',\n    'image_size' => '圖片大小:',\n    'selected_size' => '選中:',\n    'direction' => '順序',\n    'direction_asc' => '升冪',\n    'direction_desc' => '降冪',\n  ],\n];\n"
  },
  {
    "path": "modules/backend/lang/zh-tw.json",
    "content": "{\n  \"Cancel\": \"取消\",\n  \"You are viewing as\": \"您正在查看\",\n  \"Preview Role\": \"預覽角色\",\n  \"This lets you test the actions this role can perform.\": \"這讓您可以測試此角色可以執行的操作。\",\n  \"View As Role\": \"按角色查看\",\n  \"Return to Role Settings\": \"返回角色設置\",\n  \"Password must have a minimum of length of :min characters\": \"密碼長度必須至少為 :min 個字符\",\n  \"Password must contain at least one uppercase character.\": \"密碼必須至少包含一個大寫字符。\",\n  \"Password must contain at least one lowercase character.\": \"密碼必須至少包含一個小寫字符。\",\n  \"Password must contain at least one number.\": \"密碼必須包含至少一個數字。\",\n  \"Password must contain at least one nonalphanumeric character.\": \"密碼必須至少包含一個非字母數字字符。\",\n  \"Welcome to your Administration Area, :name\": \"歡迎來到您的管理區域，:name\",\n  \"Duplicate\": \"複製\",\n  \"Expand\": \"擴張\",\n  \"Collapse\": \"坍塌\",\n  \"Move Up\": \"提升\",\n  \"Move Down\": \"下移\",\n  \"Remove\": \"移除\",\n  \"Manage Item\": \"管理項目\",\n  \"Clear Filters\": \"清除過濾器\",\n  \"Filter Setup\": \"過濾器設置\",\n  \"Apply\": \"申請\",\n  \"Clear\": \"清除\",\n  \"is equal to\": \"等於\",\n  \"is between\": \"在。。。之間\",\n  \"contains\": \"包含\",\n  \"is before\": \"是之前\",\n  \"is after\": \"在之後\",\n  \"is greater than\": \"大於\",\n  \"is less than\": \"小於\",\n  \"1. Export output format\": \"1.導出輸出格式\",\n  \"File Format\": \"文件格式\",\n  \"Delimiter Character\": \"分隔符\",\n  \"Enclosure Character\": \"外殼字符\",\n  \"Escape Character\": \"轉義字符\",\n  \"2. Select columns to export\": \"2.選擇要導出的列\",\n  \"Columns\": \"列\",\n  \"3. Set export options\": \"3.設置導出選項\",\n  \"CSV Custom\": \"CSV 自定義\",\n  \"1. Upload an Import File\": \"1.上傳導入文件\",\n  \"Import File\": \"導入文件\",\n  \"File Encoding\": \"文件編碼\",\n  \"First row contains column titles\": \"第一行包含列標題\",\n  \"Leave this checked if the first row in the CSV is used as the column titles.\": \"如果 CSV 中的第一行用作列標題，請選中此項。\",\n  \"2. Match the File Columns to Database Fields\": \"2.將文件列與數據庫字段匹配\",\n  \"File columns\": \"文件欄\",\n  \"Database fields\": \"數據庫字段\",\n  \"3. Set Import Options\": \"3.設置導入選項\",\n  \"Export progress\": \"出口進度\",\n  \"Processing\": \"加工\",\n  \"Import progress\": \"導入進度\",\n  \"Import error\": \"導入錯誤\",\n  \"Export error\": \"導出錯誤\",\n  \"Column preview\": \"列預覽\",\n  \"Column\": \"柱子\",\n  \"Disable\": \"禁用\",\n  \"Enable\": \"使能夠\",\n  \"Delete\": \"刪除\",\n  \"Export\": \"出口\",\n  \"Import\": \"進口\",\n  \"Select Action\": \"選擇動作\",\n  \"Please create a new account for logging in to the Administration Area.\": \"請創建一個新帳戶以登錄管理區。\",\n  \"First Name\": \"名\",\n  \"Last Name\": \"姓\",\n  \"Email Address\": \"電子郵件地址\",\n  \"Pick a Username\": \"選擇一個用戶名\",\n  \"Enter New Password\": \"輸入新密碼\",\n  \"Confirm Password\": \"確認密碼\",\n  \"Create Account\": \"創建帳號\",\n  \"Getting Ready\": \"準備\",\n  \"Just a few more minutes\": \"再過幾分鐘\",\n  \"Migrating Database\": \"遷移數據庫\",\n  \"Access the Backend Panel\": \"訪問後端面板\",\n  \"View Backend During Maintenance\": \"在維護期間查看後端\",\n  \"Perform Software Updates\": \"執行軟件更新\",\n  \"In Maintenance\": \"維護中\",\n  \"The site is currently in maintenance mode, please check back later.\": \"該網站目前處於維護模式，請稍後再回來查看。\",\n  \"Dashboard\": \"儀錶盤\",\n  \"Administrators\": \"管理員\",\n  \"Manage Admins\": \"管理管理員\",\n  \"Create Admins\": \"創建管理員\",\n  \"Moderate Admins\": \"中級管理員\",\n  \"Manage account suspension and ban admin accounts\": \"管理帳戶暫停和禁止管理員帳戶\",\n  \"Role Permissions\": \"管理角色\",\n  \"Team Groups\": \"群組\",\n  \"Manage Other Admins\": \"管理其他管理員\",\n  \"Allow users to reset passwords and update emails.\": \"允許重置密碼和更新電子郵件\",\n  \"Delete Admins\": \"刪除管理員\",\n  \"Preferences\": \"優先\",\n  \"Settings\": \"設置\",\n  \"Background Color\": \"背景顏色\",\n  \"Allow users to create new roles and edit or delete roles lower than their highest role.\": \"允許用戶創建新角色以及編輯或刪除低於其最高角色的角色。\",\n  \"Save Changes\": \"保存更改\",\n  \"This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.\": \"這個log顯示了管理員成功登入的訊息. 記錄保持:days天。\",\n  \"Access Log\": \"訪問日誌\",\n  \"View a list of successful back-end user sign ins.\": \"查看成功登入管理介面使用者日誌。\",\n  \"ID\": \"ID\",\n  \"Date & Time\": \"日期 & 時間\",\n  \"Type\": \"類型\",\n  \"IP address\": \"IP地址\",\n  \"Login\": \"登入\",\n  \"First name\": \"名\",\n  \"Last name\": \"姓\",\n  \"Email\": \"Email\",\n  \"A custom schema is used for this file format.\": \"自定義架構用於此文件格式。\",\n  \"Select\": \"選擇\",\n  \"Replace\": \"代替\",\n  \"and\": \"和\",\n  \"Administration Area\": \"管理介面\",\n  \"Password Reset\": \"密碼重置\",\n  \"Please enter a new password.\": \"輸入新密碼\",\n  \"Please enter your login to restore the password.\": \"輸入帳號\",\n  \"A user could not be found with a login value of ':login'\": \"找不到使用者 ':login'\",\n  \"If your account was found, a message has been sent to your email address with instructions.\": \"密碼重置的郵件已發送到您的電子信箱\",\n  \"Invalid password reset data supplied. Please try again!\": \"密碼重置失敗. 請重試!\",\n  \"Unable to reset your password!\": \"不能重置您的密碼!\",\n  \"Password has been reset. You may now sign in.\": \"您的密碼已經重置成功. 您現在可以登入了\",\n  \"Restore\": \"還原\",\n  \"Reset\": \"重置\",\n  \"Forgot password?\": \"忘記您的密碼?\",\n  \"Manage Widgets\": \"管理元件\",\n  \"Add Widget\": \"新增元件\",\n  \"Set the current layout as the default?\": \"確定將此版面設定為預設？\",\n  \"Make Default\": \"設定為預設\",\n  \"Reset layout back to default?\": \"確定重置為預設版面？\",\n  \"Reset Layout\": \"重置版面\",\n  \"Widget\": \"元件\",\n  \"please select\": \"請選擇\",\n  \"Width\": \"寬度\",\n  \"full width\": \"全部寬度\",\n  \"Primary Color\": \"主要 color\",\n  \"Secondary Color\": \"次要 color\",\n  \"This name is shown in the title area of the back-end.\": \"這個名稱顯示在管理介面的標題區域\",\n  \"App Name\": \"網站名稱\",\n  \"This name is shown on the sign in screen for the back-end.\": \"標語顯示在管理介面的登入介面\",\n  \"App Tagline\": \"網站標語\",\n  \"Brand\": \"品牌\",\n  \"Upload a custom logo to use in the back-end.\": \"上傳自訂logo到管理介面\",\n  \"Logo\": \"Logo\",\n  \"Colors\": \"顏色\",\n  \"Custom Stylesheet\": \"自訂樣式\",\n  \"Styles\": \"樣式\",\n  \"Locale\": \"語言\",\n  \"Select your desired locale for language use.\": \"選擇您希望使用的本地語言。\",\n  \"Color Scheme\": \"色彩主題\",\n  \"Word Wrap\": \"自動換行\",\n  \"Font Size\": \"字體大小\",\n  \"Tab Size\": \"標籤大小\",\n  \"Code Folding\": \"代碼摺疊\",\n  \"Show gutter\": \"顯示gutter\",\n  \"Highlight active line\": \"醒目顯示操作中的行\",\n  \"Indent using tabs\": \"使用tabs縮進\",\n  \"Show invisible characters\": \"顯示隱藏字元\",\n  \"Title\": \"標題\",\n  \"Description\": \"描述\",\n  \"Attachment\": \"附件\",\n  \"Add a title and description for this attachment.\": \"給附件新增標題和描述\",\n  \"Create :name\": \"建立 :name\",\n  \"Update :name\": \"更新 :name\",\n  \"Add :name\": \"增加 :name\",\n  \"Link :name\": \"關聯 :name\",\n  \"Unlink\": \"取消關聯\",\n  \"Are you sure?\": \"您確定?\",\n  \"Preview :name\": \"預覽 :name\",\n  \"Link a New :name\": \"關聯一個新的 :name\",\n  \"Add a New :name\": \"增加一個新的 :name\",\n  \"Related :name Data\": \"相關的 :name\",\n  \":name Created\": \":name 建立成功\",\n  \":name Updated\": \":name 更新成功\",\n  \":name Deleted\": \":name 刪除成功\",\n  \"Form record with an ID of :id could not be found.\": \"表單 ID :id 找不到\",\n  \"Preview the Website\": \"預覽網站\",\n  \"Manage back-end administrator users, groups and permissions.\": \"管理管理介面管理員使用者, 群組和權限\",\n  \"Branding & Appearance\": \"自訂管理介面\",\n  \"Customize the administration area such as name, colors and logo.\": \"自訂管理區域, 例如名字, 顏色和logo\",\n  \"Editor Settings\": \"代碼編輯器選項\",\n  \"Change the global editor preferences.\": \"自訂代碼編輯器選項, 例如字體大小和顏色主題\",\n  \"My Account\": \"我的帳號\",\n  \"Update your account details such as name, email address and password.\": \"更新您的帳號細節, 例如名字, 郵件地址和密碼\",\n  \"Backend Preferences\": \"管理介面設定\",\n  \"Manage your account preferences such as desired language.\": \"管理您的管理介面設定, 例如希望使用的語言。\",\n  \"security login\": \"安全登入\",\n  \"List Setup\": \"建立列表\",\n  \"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\": \"使用多選框選擇您想在列表中看到的欄. 您可以通過拖拽調整欄的位置\",\n  \"Records Per Page\": \"每頁的記錄\",\n  \"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\": \"選擇每頁想顯示的記錄數量. 請注意一頁中太多記錄可能會降低性能\",\n  \"Add Selected\": \"增加選取的\",\n  \"The PHP extension :name is not installed. Please install this library and activate the extension.\": \"PHP外掛 :name 沒安裝. 請安裝這個庫並且啟用外掛\",\n  \"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\": \"目錄 :name 或子目錄對PHP不可寫. 請對這個目錄上的webserver設定正確的權限\"\n}"
  },
  {
    "path": "modules/backend/layouts/_custom_styles.php",
    "content": "<?php\n    use Backend\\Models\\BrandSetting;\n    use Backend\\Models\\EditorSetting;\n?>\n<?php if (BrandSetting::isConfigured() || BrandSetting::isBaseConfigured()): ?>\n    <style>\n        <?= BrandSetting::renderCss() ?>\n    </style>\n<?php endif ?>\n<?php if (EditorSetting::isConfigured() || EditorSetting::isBaseConfigured()): ?>\n    <style>\n        <?= EditorSetting::renderCss() ?>\n    </style>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/layouts/_flash_messages.php",
    "content": "<?php foreach (Flash::all() as $type => $message): ?>\n    <div data-control=\"flash-message\" class=\"oc-hide\" data-type=\"<?= $type ?>\" data-interval=\"5\"><?= e($message) ?></div>\n<?php endforeach ?>\n"
  },
  {
    "path": "modules/backend/layouts/_footer.php",
    "content": "<!-- Flash Messages -->\n<div id=\"layout-flash-messages\"><?= $this->makeLayoutPartial('flash_messages') ?></div>\n\n<?= $this->makeLayoutPartial('vue_templates') ?>\n<?= Block::placeholder('footer') ?>\n"
  },
  {
    "path": "modules/backend/layouts/_head.php",
    "content": "<title data-title-template=\"<?= empty($this->pageTitleTemplate) ? '%s' : e($this->pageTitleTemplate) ?> | <?= e(Backend\\Models\\BrandSetting::get('app_name')) ?>\">\n    <?= e(__($this->pageTitle)) ?> | <?= e(Backend\\Models\\BrandSetting::get('app_name')) ?>\n</title>\n<?php if ($customFavicon = Backend\\Models\\BrandSetting::getFavicon()): ?>\n    <link rel=\"icon\" type=\"image/png\" href=\"<?= e($customFavicon) ?>\">\n<?php else: ?>\n    <link rel=\"icon\" type=\"image/png\" href=\"<?= e(Backend::skinAsset('assets/images/favicon.png')) ?>\" data-favicon-dark=\"<?= e(Backend::skinAsset('assets/images/favicon-dark.png')) ?>\">\n<?php endif ?>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0\">\n<meta name=\"robots\" content=\"noindex\">\n<meta name=\"mobile-web-app-capable\" content=\"yes\">\n<meta name=\"app-timezone\" content=\"<?= e(Config::get('app.timezone')) ?>\">\n<meta name=\"backend-base-path\" content=\"<?= Backend::baseUrl() ?>\">\n<meta name=\"backend-timezone\" content=\"<?= e(Backend\\Models\\Preference::get('timezone')) ?>\">\n<meta name=\"backend-locale\" content=\"<?= e(Backend\\Models\\Preference::get('locale')) ?>\">\n<meta name=\"backend-site\" content=\"<?= Site::getEditSiteId() ?>\">\n<meta name=\"csrf-token\" content=\"<?= csrf_token() ?>\">\n<?php foreach ($this->getTurboMetaTags() as $turboMeta): ?>\n    <meta name=\"<?= $turboMeta['name'] ?>\" content=\"<?= $turboMeta['content'] ?>\" />\n<?php endforeach ?>\n<?php\n    $coreBuild = Backend::assetVersion();\n    $vendorPath = Url::asset('modules/system/assets/vendor');\n?>\n<script type=\"importmap\">\n{\n    \"imports\": {\n        \"larajax\": \"<?= Url::asset('modules/system/assets/js/framework.esm.js') ?>\",\n        \"bootstrap\": \"<?= $vendorPath ?>/bootstrap/bootstrap.esm.js\",\n        \"vue\": \"<?= $vendorPath ?>/vue/vue.esm.js\",\n        \"vue-router\": \"<?= $vendorPath ?>/vue-router/vue-router.esm.js\",\n        \"js-cookie\": \"<?= $vendorPath ?>/js-cookie/js.cookie.esm.js\",\n        \"sortablejs\": \"<?= $vendorPath ?>/sortablejs/sortable.esm.js\",\n        \"dropzone\": \"<?= $vendorPath ?>/dropzone/dropzone.esm.js\",\n        \"chart.js\": \"<?= $vendorPath ?>/chartjs/chart.esm.js\",\n        \"p-queue\": \"<?= $vendorPath ?>/p-queue/p-queue.esm.js\"\n    }\n}\n</script>\n<script src=\"<?= Url::asset('modules/system/assets/js/vendor.js') ?>?v<?= $coreBuild ?>\"></script>\n<script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>?v<?= $coreBuild ?>\"></script>\n<script src=\"<?= Url::asset('modules/system/assets/js/foundation.js') ?>?v<?= $coreBuild ?>\"></script>\n<script type=\"module\" src=\"<?= Url::asset('modules/system/assets/js/main.js') ?>?v<?= $coreBuild ?>\"></script>\n<script type=\"module\" src=\"<?= Url::asset('modules/backend/assets/js/main.js') ?>?v<?= $coreBuild ?>\"></script>\n<script type=\"module\" src=\"<?= Url::asset('modules/system/assets/js/lang/lang.'.App::getLocale().'.js') ?>?v<?= $coreBuild ?>\"></script>\n<link href=\"<?= Url::asset('modules/system/assets/css/main.css') ?>?v<?= $coreBuild ?>\" rel=\"stylesheet\" />\n<link href=\"<?= Url::asset('modules/backend/assets/css/main.css') ?>?v<?= $coreBuild ?>\" rel=\"stylesheet\" />\n\n<?php if (!Config::get('backend.enable_service_workers', false)): ?>\n    <script> oc.waitFor(() => window.unregisterServiceWorkers).then(() => unregisterServiceWorkers()) </script>\n<?php endif ?>\n\n<?= $this->makeAssets() ?>\n<?= Block::placeholder('head') ?>\n<?= $this->makeLayoutPartial('custom_styles') ?>\n"
  },
  {
    "path": "modules/backend/layouts/_hint.php",
    "content": "<?php if (empty($hintName) || !$this->isBackendHintHidden($hintName)): ?>\n    <?php\n        $type = !empty($type) ? $type : 'info';\n        $cssClasses = ['callout fade show'];\n        $cssClasses[] = 'callout-'.$type;\n        if (empty($icon)) $cssClasses[] = 'no-icon';\n        if (empty($subtitle)) $cssClasses[] = 'no-subheader';\n        if (empty($title)) $cssClasses[] = 'no-title';\n        if (!empty($cssClass)) $cssClasses[] = $cssClass;\n    ?>\n    <div class=\"<?= implode(' ', $cssClasses) ?>\">\n        <?php if (!empty($hintName)): ?>\n            <button\n                type=\"button\"\n                class=\"close\"\n                data-request=\"onHideBackendHint\"\n                data-request-data=\"name: '<?= $hintName ?>'\"\n                data-dismiss=\"callout\"\n                aria-hidden=\"true\">&times;</button>\n        <?php endif ?>\n        <?php if (!empty($title)): ?>\n            <div class=\"header\">\n                <?php if (!empty($icon)): ?><i class=\"<?= $icon ?>\"></i><?php endif ?>\n                <h3><?= $title ?></h3>\n                <?php if (!empty($subtitle)): ?><p><?= $subtitle ?></p><?php endif ?>\n            </div>\n        <?php endif ?>\n        <div class=\"content\">\n            <?php if ($hintContent): ?>\n                <?= $hintContent ?>\n            <?php else: ?>\n                <?= $this->makePartial($hintPartial, $hintParams) ?>\n            <?php endif ?>\n        </div>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/layouts/_mainmenu.php",
    "content": "<?php\n    use Backend\\Models\\BrandSetting;\n    $activeItem = BackendMenu::getActiveMainMenuItem();\n    $navbarMode = BrandSetting::get('menu_mode', BrandSetting::MENU_INLINE);\n    $context = BackendMenu::getContext();\n    $isVerticalMenu = isset($isVerticalMenu) ? $isVerticalMenu : false;\n    $navLogo = BrandSetting::getNavLogo();\n?>\n<div class=\"main-menu-container\">\n    <nav class=\"navbar control-toolbar navbar-mode-<?= $navbarMode ?> <?= $navLogo ? 'has-logo' : '' ?> flex\" role=\"navigation\">\n        <?php if (!$isVerticalMenu && $navLogo): ?>\n            <div class=\"toolbar-item toolbar-logo fix-width\">\n                <a href=\"<?= Backend::url() ?>\" class=\"mainmenu-logo <?= BackendMenu::isDashboardItemActive() ? 'active' : '' ?>\">\n                    <img\n                        src=\"<?= e($navLogo) ?>\"\n                        alt=\"\"\n                        class=\"nav-logo\"\n                        loading=\"lazy\"\n                    />\n                </a>\n            </div>\n        <?php endif ?>\n        <div class=\"toolbar-item toolbar-primary\">\n            <div data-control=\"toolbar\" <?= $isVerticalMenu ? 'data-vertical=\"true\"' : '' ?>>\n                <ul class=\"mainmenu-items mainmenu-general\" data-main-menu>\n                    <?= $this->makeLayoutPartial('mainmenu_items', [\n                        'context' => $context,\n                        'hideDashitem' => !!$navLogo\n                    ]) ?>\n                </ul>\n            </div>\n        </div>\n        <?= $this->fireViewEvent('backend.layout.extendMainMenuToolbar') ?>\n        <div class=\"toolbar-item fix-width\">\n            <ul class=\"mainmenu-items mainmenu-extras\" data-main-menu>\n                <?php /* Extra Taskbar Item Sample\n                <li class=\"mainmenu-item mainmenu-taskbar has-nolabel\">\n                    <a href=\"<?= Url::to('/') ?>\" target=\"_blank\" rel=\"noopener noreferrer\">\n                        <span class=\"nav-icon\">\n                            <i class=\"bi bi-bell\"></i>\n                        </span>\n                    </a>\n                </li>\n                */ ?>\n                <?php if ($siteSwitcher = $this->getWidget('siteSwitcher')): ?>\n                    <?= $siteSwitcher->render(['isVerticalMenu' => $isVerticalMenu]) ?>\n                <?php endif ?>\n                <li class=\"mainmenu-item mainmenu-account has-subitems <?= !$isVerticalMenu ? 'hidden-xs' : '' ?>\" data-submenu-index=\"account\">\n                    <a href=\"javascript:;\">\n                        <span class=\"nav-icon\">\n                            <div class=\"mainmenu-account-avatar\">\n                                <img\n                                    src=\"<?= $this->user->getAvatarThumb(168, ['mode' => 'cover', 'extension' => 'png']) ?>\"\n                                    loading=\"lazy\"\n                                    width=\"84\"\n                                    height=\"84\" />\n                            </div>\n                        </span>\n                        <?php if ($isVerticalMenu): ?>\n                            <span class=\"nav-label\">\n                                <?= e($this->user->full_name ?: $this->user->login) ?>\n                            </span>\n                        <?php endif ?>\n                    </a>\n                </li>\n                <?php if (!$isVerticalMenu): ?>\n                    <li class=\"mainmenu-item mainmenu-toggle\">\n                        <a href=\"javascript:;\">☰</a>\n                    </li>\n                <?php endif ?>\n            </ul>\n        </div>\n    </nav>\n</div>\n\n<?php if (!$isVerticalMenu): ?>\n    <?php foreach (BackendMenu::listMainMenuItemsWithSubitems() as $itemIndex => $itemInfo): ?>\n        <?php if ($itemInfo->subMenuHasDropdown): ?>\n            <ul class=\"mainmenu-items mainmenu-submenu-dropdown hover-effects\" data-submenu-index=\"<?= $itemIndex ?>\">\n                <?= $this->makeLayoutPartial('submenu_items', [\n                    'sideMenuItems' => $itemInfo->subMenuItems,\n                    'mainMenuItemActive' => BackendMenu::isMainMenuItemActive($itemInfo->mainMenuItem),\n                    'mainMenuItemCode' => $itemInfo->mainMenuItem->code,\n                    'context' => $context\n                ]) ?>\n            </ul>\n        <?php endif ?>\n    <?php endforeach ?>\n\n    <?php if ($siteSwitcher = $this->getWidget('siteSwitcher')): ?>\n        <?= $siteSwitcher->renderSubmenu() ?>\n    <?php endif ?>\n\n    <ul class=\"mainmenu-items mainmenu-submenu-dropdown hover-effects\" data-submenu-index=\"account\">\n        <li class=\"mainmenu-item section-title section-user-title\">\n            <span class=\"nav-label\"><?= e($this->user->full_name ?: $this->user->login) ?></span>\n        </li>\n        <?= $this->makeLayoutPartial('my_settings_menu_items', ['context' => $context]) ?>\n    </ul>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/layouts/_mainmenu_item.php",
    "content": "<span class=\"nav-icon\">\n    <?php if ($item->iconSvg): ?>\n        <img\n            src=\"<?= Url::asset($item->iconSvg) ?>\"\n            class=\"svg-icon\"\n            loading=\"lazy\"\n        />\n    <?php else: ?>\n        <i class=\"<?= $item->iconSvg ? 'svg-replace' : '' ?> <?= $item->icon ?>\"></i>\n    <?php endif ?>\n</span>\n<span class=\"nav-label\">\n    <?= e(__($item->label)) ?>\n</span>\n<?php if (!isset($noCounter)): ?>\n    <span\n        class=\"counter <?= !$item->counter ? 'empty' : '' ?>\"\n        data-menu-id=\"<?= !isset($isSubmenu) ? e($item->code) : e($mainMenuItemCode.'/'.$item->code) ?>\"\n        <?php if ($item->counterLabel): ?>title=\"<?= e(__($item->counterLabel)) ?>\"<?php endif ?>\n    ><?= e($item->counter) ?></span>\n<?php endif?>\n"
  },
  {
    "path": "modules/backend/layouts/_mainmenu_items.php",
    "content": "<?php foreach (BackendMenu::listMainMenuItemsWithSubitems() as $itemIndex => $itemInfo): ?>\n    <?php\n        $item = $itemInfo->mainMenuItem;\n        $isActive = BackendMenu::isMainMenuItemActive($item);\n        $isDashboard = $item->owner === 'October.Dashboard' && $item->code === 'dashboard';\n        if ($isDashboard && ($customDashIcon = Backend\\Models\\BrandSetting::getNavDashboardIcon())) {\n            $item->iconSvg = $customDashIcon;\n        }\n    ?>\n    <li\n        class=\"svg-icon-container svg-active-effects mainmenu-item <?= $isActive ? 'active' : '' ?> <?= $itemInfo->subMenuHasDropdown ? 'has-subitems' : '' ?> <?= $isDashboard ? 'is-dashboard' : '' ?>\"\n        data-submenu-index=\"<?= $itemIndex ?>\">\n        <a href=\"<?= $item->url ?>\">\n            <?= $this->makeLayoutPartial('mainmenu_item', ['item' => $item]) ?>\n        </a>\n    </li>\n<?php endforeach ?>\n"
  },
  {
    "path": "modules/backend/layouts/_mainmenu_responsive.php",
    "content": "<?php\n    $context = BackendMenu::getContext();\n?>\n<div id=\"layout-mainmenu-responsive-container\">\n    <nav class=\"responsive-menu-pane mainmenu-pane\">\n        <div class=\"menu-header\">\n            <a href=\"javascript:;\" class=\"close-link\">←</a>\n            <div class=\"mainmenu-item active has-subitems\" data-submenu-index=\"account\">\n                <div class=\"mainmenu-item-container\">\n                    <span class=\"nav-icon\">\n                       <div class=\"mainmenu-account-avatar\">\n                            <img\n                                src=\"<?= $this->user->getAvatarThumb(80, ['mode' => 'cover', 'extension' => 'png']) ?>\"\n                                loading=\"lazy\"\n                                width=\"80\"\n                                height=\"80\"\n                            />\n                        </div>\n                    </span>\n\n                    <span class=\"nav-label\">\n                        <div class=\"company-name\"><?= e(Backend\\Models\\BrandSetting::get('app_name')) ?></div>\n                        <div class=\"user-name\"><?= e($this->user->full_name ?: $this->user->login) ?></div>\n                    </span>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"scrollable-panel-container\">\n            <ul class=\"mainmenu-items hover-effects scrollable\">\n\n            </ul>\n        </div>\n    </nav>\n\n    <nav class=\"responsive-menu-pane submenu-pane\">\n        <div class=\"menu-header svg-icon-container has-back-link\">\n            <a href=\"javascript:;\" class=\"go-back-link\">←</a>\n            <div class=\"mainmenu-item active\">\n\n            </div>\n        </div>\n\n        <div class=\"scrollable-panel-container\">\n            <ul class=\"mainmenu-items hover-effects scrollable\">\n\n            </ul>\n        </div>\n    </nav>\n</div>\n"
  },
  {
    "path": "modules/backend/layouts/_my_settings_menu_items.php",
    "content": "<?php\n    $mySettings = System\\Classes\\SettingsManager::instance()->listItems('mysettings');\n?>\n<?php foreach ($mySettings as $category => $items): ?>\n    <?php foreach ($items as $item): ?>\n        <li class=\"mainmenu-item\" <?= $item->itemAttributes() ?>>\n            <a href=\"<?= $item->url ?>\" <?= $item->linkAttributes() ?>>\n                <?= $this->makeLayoutPartial('mainmenu_item', [\n                    'item' => $item,\n                    'noCounter' => true\n                ]) ?>\n            </a>\n        </li>\n    <?php endforeach ?>\n    <?php /* <li class=\"divider\"></li> */ ?>\n<?php endforeach ?>\n\n<li class=\"mainmenu-item\">\n    <a href=\"<?= Backend::url('backend/auth/signout') ?>\">\n        <span class=\"nav-icon\">\n            <i class=\"icon-exit\"></i>\n        </span>\n        <span class=\"nav-label\">\n            <?= e(trans('backend::lang.account.sign_out')) ?>\n        </span>\n    </a>\n</li>\n"
  },
  {
    "path": "modules/backend/layouts/_sidenav-responsive.php",
    "content": "<?php\n    $context = BackendMenu::getContext();\n    $sideMenuItems = BackendMenu::listMainMenuSubItems();\n?>\n<?php if ($sideMenuItems): ?>\n    <div class=\"control-toolbar responsive-sidebar-toolbar\" role=\"navigation\">\n        <div data-control=\"toolbar\">\n            <nav class=\"layout-sidenav sidenav-responsive\">\n                <ul class=\"mainmenu-items\">\n                    <?= $this->makeLayoutPartial('submenu_items', [\n                        'sideMenuItems' => $sideMenuItems,\n                        'mainMenuItemActive' => true,\n                        'mainMenuItemCode' => $context->mainMenuCode,\n                        'noSvgEffects' => true,\n                        'context' => $context\n                    ]) ?>\n                </ul>\n            </nav>\n        </div>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/layouts/_sidenav.php",
    "content": "<?php\n    $context = BackendMenu::getContext();\n    $contextSidenav = BackendMenu::getContextSidenavPartial($context->owner, $context->mainMenuCode);\n?>\n<?php if (!$contextSidenav): ?>\n    <?php\n        $sideMenuItems = BackendMenu::listMainMenuSubItems();\n    ?>\n    <?php if ($sideMenuItems): ?>\n        <div class=\"layout-sidenav-container\">\n            <div class=\"layout-sidenav-spacer\">\n                <nav\n                    id=\"layout-sidenav\"\n                    class=\"layout-sidenav\"\n                    data-active-class=\"active\"\n                    data-control=\"sidenav\">\n                    <ul class=\"mainmenu-items\">\n                        <?= $this->makeLayoutPartial('submenu_items', [\n                            'sideMenuItems' => $sideMenuItems,\n                            'mainMenuItemActive' => true,\n                            'mainMenuItemCode' => $context->mainMenuCode,\n                            'noSvgEffects' => true,\n                            'context' => $context\n                        ]) ?>\n                    </ul>\n                </nav>\n            </div>\n        </div>\n    <?php endif ?>\n<?php else: ?>\n    <?= $this->makePartial($contextSidenav) ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/layouts/_submenu_items.php",
    "content": "<?php foreach ($sideMenuItems as $sideItemCode => $item): ?>\n    <?php if (BackendMenu::isSideMenuItemVisible($item)): ?>\n        <?php if ($item->itemType === 'section'): ?>\n            <li\n                class=\"mainmenu-item section-title\" <?= $item->itemAttributes() ?>>\n                <span class=\"nav-label\">\n                    <?= e(__($item->label)) ?>\n                </span>\n            </li>\n        <?php elseif ($item->itemType === 'ruler'): ?>\n            <li class=\"mainmenu-item divider\" <?= $item->itemAttributes() ?>></li>\n        <?php else: ?>\n            <li\n                class=\"\n                    mainmenu-item\n                    svg-icon-container\n                    <?= !isset($noSvgEffects) ? 'svg-active-effects' : '' ?>\n                    <?= $mainMenuItemActive && BackendMenu::isSideMenuItemActive($item) ? 'active' : null ?>\n                    <?= $item->itemType == 'primary' ? 'sidebar-button' : null ?>\n                    <?= $item->counter ? 'has-counter' : '' ?>\n                \"\n                <?= $item->itemAttributes() ?>\n            >\n                <a href=\"<?= $item->url ?>\" <?= $item->linkAttributes() ?>>\n                    <?= $this->makeLayoutPartial('mainmenu_item', [\n                        'item' => $item,\n                        'isSubmenu' => true,\n                        'mainMenuItemCode' => $mainMenuItemCode\n                    ]) ?>\n                </a>\n            </li>\n        <?php endif ?>\n    <?php endif ?>\n<?php endforeach ?>\n"
  },
  {
    "path": "modules/backend/layouts/_vue_templates.php",
    "content": "<?= $this->outputVueComponentTemplates() ?>\n"
  },
  {
    "path": "modules/backend/layouts/auth.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\" class=\"no-js\">\n    <head>\n        <link rel=\"icon\" type=\"image/png\" href=\"<?= e(Backend\\Models\\BrandSetting::getFavicon() ?: Backend::skinAsset('assets/images/favicon.png')) ?>\">\n        <title><?= __('Administration Area') ?> | <?= e(Backend\\Models\\BrandSetting::get('app_name')) ?></title>\n        <meta charset=\"utf-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0\">\n        <meta name=\"robots\" content=\"noindex\">\n        <meta name=\"mobile-web-app-capable\" content=\"yes\">\n        <meta name=\"backend-base-path\" content=\"<?= Backend::baseUrl() ?>\">\n        <meta name=\"csrf-token\" content=\"<?= csrf_token() ?>\">\n        <meta name=\"turbo-visit-control\" content=\"disable\">\n        <?php\n            $coreBuild = Backend::assetVersion();\n            $vendorPath = Url::asset('modules/system/assets/vendor');\n        ?>\n        <script type=\"importmap\">\n        {\n            \"imports\": {\n                \"larajax\": \"<?= Url::asset('modules/system/assets/js/framework.esm.js') ?>\",\n                \"bootstrap\": \"<?= $vendorPath ?>/bootstrap/bootstrap.esm.js\",\n                \"vue\": \"<?= $vendorPath ?>/vue/vue.esm.js\"\n            }\n        }\n        </script>\n        <script src=\"<?= Url::asset('modules/system/assets/js/vendor.js') ?>?v<?= $coreBuild ?>\"></script>\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>?v<?= $coreBuild ?>\"></script>\n        <script src=\"<?= Url::asset('modules/system/assets/js/foundation.js') ?>?v<?= $coreBuild ?>\"></script>\n        <script type=\"module\" src=\"<?= Url::asset('modules/system/assets/js/main.js') ?>?v<?= $coreBuild ?>\"></script>\n        <script type=\"module\" src=\"<?= Url::asset('modules/backend/assets/js/main.js') ?>?v<?= $coreBuild ?>\"></script>\n        <script type=\"module\" src=\"<?= Url::asset('modules/system/assets/js/lang/lang.'.App::getLocale().'.js') ?>?v<?= $coreBuild ?>\"></script>\n        <script src=\"<?= Url::asset('modules/backend/assets/js/auth/auth.js') ?>?v<?= $coreBuild ?>\"></script>\n        <link href=\"<?= Url::asset('modules/system/assets/css/main.css') ?>?v<?= $coreBuild ?>\" rel=\"stylesheet\" />\n        <link href=\"<?= Url::asset('modules/backend/assets/css/main.css') ?>?v<?= $coreBuild ?>\" rel=\"stylesheet\" />\n\n        <?php if (!Config::get('backend.enable_service_workers', false)): ?>\n            <script> oc.waitFor(() => window.unregisterServiceWorkers).then(() => unregisterServiceWorkers()) </script>\n        <?php endif ?>\n\n        <?= $this->makeAssets() ?>\n        <?= Block::placeholder('head') ?>\n        <?= $this->makeLayoutPartial('custom_styles') ?>\n        <?= $this->fireViewEvent('backend.layout.extendHead', ['auth']) ?>\n        <?php\n            $customizationVars = Backend\\Classes\\LoginCustomization::getCustomizationVariables($this);\n            $logo = $customizationVars->logo;\n            $loginCustomization = $customizationVars->loginCustomization;\n            $loginBackgroundType = $loginCustomization->loginBackgroundType;\n            $defaultImage1x = $customizationVars->defaultImage1x;\n            $defaultImage2x = $customizationVars->defaultImage2x;\n\n            if ($loginBackgroundType === 'ai_images') {\n                $aiImageIndex = rand(0, 8);\n                $generatedImageData = Backend\\Classes\\LoginCustomization::getGeneratedImageData();\n            }\n        ?>\n    </head>\n    <body class=\"outer <?= $this->bodyClass ?> message-outer-layout\">\n        <div id=\"layout-canvas\">\n\n            <div class=\"d-flex h-100\">\n                <div class=\"outer-form-cell\">\n                    <div class=\"outer-form-container\">\n                        <h1>\n                            <?= e(Backend\\Models\\BrandSetting::get('app_name')) ?>\n                            <img src=\"<?= e($logo) ?>\" style=\"max-width: 180px\" alt=\"\" />\n                        </h1>\n\n                        <?= Block::placeholder('body') ?>\n                    </div>\n                </div>\n\n                <div\n                    class=\"outer-theme-cell flex-grow-1\"\n                    <?php if ($loginBackgroundType === 'ai_images'): ?>style=\"<?= e($generatedImageData->background) ?>\"<?php endif ?>\n                >\n                    <div class=\"d-flex h-100 flex-column align-items-center justify-content-center\">\n                        <?php if ($loginBackgroundType === 'gradient'): ?>\n                            <link href=\"<?= Backend::skinAsset('assets/images/october-login-gradients/1.css') . '?v=' . $coreBuild ?>\" rel=\"stylesheet\" />\n                            <div class=\"gradient-background\">\n                                <div class=\"blob blob1\"></div>\n                                <div class=\"blob blob2\"></div>\n                            </div>\n                        <?php elseif ($loginBackgroundType === 'ai_images'): ?>\n                            <img\n                                width=\"512\"\n                                height=\"512\"\n                                src=\"<?= Url::asset('/modules/backend/assets/images/october-login-ai-generated/'.$generatedImageData->img) ?>\"\n                                alt=\"\"\n                            />\n                        <?php else: ?>\n                            <?php if ($loginCustomization->loginImageType == 'autumn_images'): ?>\n                                <img\n                                    src=\"<?= Url::asset('/modules/backend/assets/images/october-login-theme/'.$defaultImage1x) ?>\"\n                                    srcset=\"<?= Url::asset('/modules/backend/assets/images/october-login-theme/'.$defaultImage1x) ?>,\n                                    <?= Url::asset('/modules/backend/assets/images/october-login-theme/'.$defaultImage2x) ?> 2x\"\n                                    alt=\"\"\n                                />\n                            <?php elseif ($loginCustomization->loginCustomImage): ?>\n                                <img\n                                    src=\"<?= e($loginCustomization->loginCustomImage) ?>\"\n                                    alt=\"\"\n                                />\n                            <?php endif ?>\n                        <?php endif ?>\n                    </div>\n                </div>\n            </div>\n\n        </div>\n\n        <!-- Flash Messages -->\n        <div id=\"layout-flash-messages\"><?= $this->makeLayoutPartial('flash_messages') ?></div>\n\n        <?= $this->makeLayoutPartial('vue_templates') ?>\n        <?= Block::placeholder('footer') ?>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/backend/layouts/default.php",
    "content": "<?php\n    use Backend\\Models\\BrandSetting;\n    $navbarMode = BrandSetting::get('menu_mode', BrandSetting::MENU_INLINE);\n?>\n<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\" class=\"no-js <?= Backend\\Models\\BrandSetting::isColorModeAuto() ? 'color-mode-auto' : '' ?>\" data-bs-theme=\"<?= e(Backend\\Models\\BrandSetting::getColorMode()) ?>\">\n    <head>\n        <?= $this->makeLayoutPartial('head') ?>\n        <?= $this->fireViewEvent('backend.layout.extendHead', ['default']) ?>\n    </head>\n    <body class=\"<?= $this->bodyClass ?> <?= $navbarMode === BrandSetting::MENU_LEFT ? 'main-menu-left' : '' ?> <?= $this->pageSize ? \"has-page-size\" : '' ?>\">\n        <div id=\"layout-canvas\">\n\n            <div class=\"d-flex h-100\">\n                <div class=\"left-side-menu-container flex-shrink-0\">\n                    <div class=\"layout-mainmenu\" id=\"layout-mainmenu-left\">\n                        <?= $this->makeLayoutPartial('mainmenu', ['isVerticalMenu' => true]) ?>\n                    </div>\n                </div>\n\n                <div class=\"flex-grow-1\">\n                    <div class=\"d-flex h-100 flex-column\">\n                        <?php if ($bannerAreaContent = Block::placeholder('banner-area')): ?>\n                            <!-- Banner Area -->\n                            <div class=\"layout-banner-area\" id=\"layout-banner-area\">\n                                <?= $bannerAreaContent ?>\n                            </div>\n                        <?php endif ?>\n\n                        <!-- Main Menu -->\n                        <?php if (!isset($hideMainMenu)): ?>\n                            <div class=\"layout-mainmenu\" id=\"layout-mainmenu\">\n                                <?= $this->makeLayoutPartial('mainmenu') ?>\n                            </div>\n                        <?php endif ?>\n\n                        <div class=\"secondary-nav\" id=\"layout-sidenav-responsive\">\n                            <?= $this->makeLayoutPartial('sidenav-responsive') ?>\n                        </div>\n\n                        <?php $flyoutContent = Block::placeholder('sidepanel-flyout') ?>\n\n                        <div class=\"flex-grow-1\">\n                            <div class=\"d-flex h-100 flyout-container\"\n                                <?php if ($flyoutContent): ?>\n                                    data-control=\"flyout\"\n                                    data-flyout-width=\"400\"\n                                    data-flyout-toggle=\"#layout-sidenav\"\n                                <?php endif ?>\n                            >\n                                <?php if ($flyoutContent): ?>\n                                    <div class=\"flyout-content\"> <?= $flyoutContent ?></div>\n                                <?php endif ?>\n\n                                <!-- Side Navigation -->\n                                <?= $this->makeLayoutPartial('sidenav') ?>\n\n                                <!-- Side Panel -->\n                                <?php if ($sidePanelContent = Block::placeholder('sidepanel')): ?>\n                                    <div class=\"w-350 hide-on-small\" id=\"layout-side-panel\" data-control=\"layout-sidepanel\">\n                                        <?= $sidePanelContent ?>\n                                    </div>\n                                <?php endif ?>\n\n                                <!-- Content Body -->\n                                <div id=\"layout-body\" class=\"layout-container flex-grow-1 <?= $this->pageSize ? \"mw-{$this->pageSize}\" : '' ?>\">\n                                    <div class=\"d-flex flex-column h-100\">\n                                        <?= Block::placeholder('layout-top-row') ?>\n\n                                        <?php if ($breadcrumbContent = Block::placeholder('breadcrumb')): ?>\n                                            <!-- Breadcrumb -->\n                                            <nav class=\"control-breadcrumb\">\n                                                <?= $breadcrumbContent ?>\n                                            </nav>\n                                        <?php endif ?>\n\n                                        <!-- Content -->\n                                        <div class=\"flex-grow-1 position-relative\">\n                                            <?= Block::placeholder('body') ?>\n                                        </div>\n                                    </div>\n                                </div>\n\n                            </div>\n                        </div>\n\n                    </div>\n                </div>\n            </div>\n        </div>\n        <?= $this->makeLayoutPartial('mainmenu_responsive') ?>\n        <?= $this->makeLayoutPartial('footer') ?>\n        <?= $this->fireViewEvent('backend.layout.extendFooter', ['default']) ?>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/backend/layouts/form-with-sidebar.php",
    "content": "<div class=\"d-flex h-100 form-with-sidebar sidebar-width-<?= $sidebarWidth ?? 300 ?>\">\n    <div class=\"flex-grow-1 form-contents\">\n\n        <div class=\"d-flex h-100 flex-column\">\n            <?php if ($breadcrumbContent = Block::placeholder('breadcrumb')): ?>\n                <!-- Breadcrumb -->\n                <nav class=\"control-breadcrumb breadcrumb-flush\">\n                    <?= $breadcrumbContent ?>\n                </nav>\n            <?php endif ?>\n\n            <!-- Content -->\n            <div class=\"flex-grow-1 position-relative\">\n                <div class=\"padded-container layout\">\n                    <?= Block::placeholder('form-contents') ?>\n                </div>\n            </div>\n        </div>\n\n    </div>\n    <div class=\"flex-shrink-0 form-sidebar control-scrollpanel\">\n        <div class=\"position-relative h-100\">\n            <div class=\"form-with-sidebar-canvas\">\n                <div class=\"control-scrollbar\" data-control=\"scrollbar\">\n                    <div class=\"padded-container\">\n                        <?= Block::placeholder('form-sidebar') ?>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/models/AccessLog.php",
    "content": "<?php namespace Backend\\Models;\n\nuse Model;\nuse Request;\n\n/**\n * AccessLog for logging access to the backend\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass AccessLog extends Model\n{\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'backend_access_log';\n\n    /**\n     * @var array Relations\n     */\n    public $belongsTo = [\n        'user' => User::class\n    ];\n\n    /**\n     * Creates a log record\n     * @param Backend\\Models\\User $user Admin user\n     * @return self\n     */\n    public static function add($user)\n    {\n        $record = new static;\n        $record->user = $user;\n        $record->ip_address = Request::getClientIp();\n        $record->save();\n\n        return $record;\n    }\n\n    /**\n     * Returns a recent entry, latest entry is not considered recent\n     * if the creation day is the same as today.\n     * @return self\n     */\n    public static function getRecent($user)\n    {\n        $records = static::where('user_id', $user->id)\n            ->orderBy('created_at', 'desc')\n            ->limit(2)\n            ->get()\n        ;\n\n        if (!count($records)) {\n            return null;\n        }\n\n        $first = $records->first();\n\n        return !$first->created_at->isToday() ? $first : $records->pop();\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/BrandSetting.php",
    "content": "<?php namespace Backend\\Models;\n\nuse Url;\nuse File;\nuse Html;\nuse Lang;\nuse Cache;\nuse Config;\nuse System;\nuse Backend;\nuse Less_Parser;\nuse System\\Models\\SettingModel;\nuse Exception;\n\n/**\n * BrandSetting that affect all users\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass BrandSetting extends SettingModel\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n    use \\Backend\\Models\\BrandSetting\\HasPalettes;\n\n    /**\n     * @var string settingsCode is a unique code for this object\n     */\n    public $settingsCode = 'backend_brand_settings';\n\n    /**\n     * @var mixed settingsFields definition file\n     */\n    public $settingsFields = 'fields.yaml';\n\n    /**\n     * @var array attachOne relations\n     */\n    public $attachOne = [\n        'favicon' => \\System\\Models\\File::class,\n        'logo' => \\System\\Models\\File::class,\n        'login_background_wallpaper' => \\System\\Models\\File::class,\n        'login_custom_image' => \\System\\Models\\File::class,\n        'menu_logo' => \\System\\Models\\File::class,\n        'dashboard_icon' => \\System\\Models\\File::class\n    ];\n\n    /**\n     * @var string cacheKey to store rendered CSS in the cache under\n     */\n    public $cacheKey = 'backend::brand.custom_css';\n\n    const COLOR_AUTO = 'auto';\n    const COLOR_LIGHT = 'light';\n    const COLOR_DARK = 'dark';\n\n    const MENU_INLINE = 'inline';\n    const MENU_TEXT = 'text';\n    const MENU_TILE = 'tile';\n    const MENU_COLLAPSE = 'collapse';\n    const MENU_ICONS = 'icons';\n    const MENU_LEFT = 'left';\n\n    const DEFAULT_PALETTE_COLOR = 'default';\n    const DEFAULT_LOGIN_COLOR = '#fef6eb';\n    const DEFAULT_LOGIN_BG_TYPE = 'gradient';\n    const DEFAULT_LOGIN_IMG_TYPE = 'autumn_images';\n    const DEFAULT_WALLPAPER_SIZE = 'auto';\n\n    /**\n     * rules for validation\n     */\n    public $rules = [\n        'app_name' => 'required',\n        'app_tagline' => 'required',\n        'login_prompt' => 'required'\n    ];\n\n    /**\n     * initSettingsData initializes the seed data for this model. This only executes\n     * when the model is first created or reset to default.\n     */\n    public function initSettingsData(): void\n    {\n        $this->app_name = self::getBaseConfig('app_name', Lang::get('system::lang.app.name'));\n        $this->app_tagline = self::getBaseConfig('tagline', Lang::get('system::lang.app.tagline'));\n        $this->login_prompt = self::getBaseConfig('login_prompt', Lang::get('backend::lang.account.login_prompt'));\n        $this->color_mode = self::getBaseConfig('color_mode', self::COLOR_LIGHT);\n        $this->menu_mode = self::getBaseConfig('menu_mode', self::MENU_INLINE);\n        $this->login_background_type = self::getBaseConfig('login_background_type', self::DEFAULT_LOGIN_BG_TYPE);\n        $this->login_background_color = self::getBaseConfig('login_background_color', self::DEFAULT_LOGIN_COLOR);\n        $this->login_background_wallpaper_size = self::getBaseConfig('login_background_wallpaper_size', self::DEFAULT_WALLPAPER_SIZE);\n        $this->login_image_type = self::getBaseConfig('login_image_type', self::DEFAULT_LOGIN_IMG_TYPE);\n\n        $defaultPalette = self::getBaseConfig('color_palette', self::DEFAULT_PALETTE_COLOR);\n\n        $this->color_palette = [\n            'preset' => $defaultPalette,\n        ] + $this->getPaletteColors($defaultPalette);\n\n        // Attempt to load custom CSS\n        $brandCssPath = File::symbolizePath(self::getBaseConfig('stylesheet_path'));\n        if ($brandCssPath && File::exists($brandCssPath)) {\n            $this->custom_css = File::get($brandCssPath);\n        }\n    }\n\n    /**\n     * beforeSave\n     */\n    public function beforeSave()\n    {\n        if ($this->isDirty('custom_css')) {\n            $this->custom_css = Html::clean($this->custom_css);\n\n            if (System::checkSafeMode()) {\n                $this->custom_css = str_ireplace('@import', 'import', $this->custom_css);\n            }\n        }\n    }\n\n    /**\n     * clearCache\n     */\n    public function clearCache()\n    {\n        parent::clearCache();\n\n        Cache::forget($this->cacheKey . '.stylesheet');\n        Cache::forget($this->cacheKey . '.favicon');\n        Cache::forget($this->cacheKey . '.menu_logo');\n        Cache::forget($this->cacheKey . '.dashboard_icon');\n    }\n\n    /**\n     * getColorMode\n     */\n    public static function getColorMode(): string\n    {\n        $settings = self::instance();\n        $allowedModes = [self::COLOR_AUTO, self::COLOR_LIGHT, self::COLOR_DARK];\n\n        // Determine the base mode (user cookie overrides brand setting)\n        $baseMode = null;\n        if (isset($_COOKIE['admin_color_mode_user'])) {\n            $userMode = $_COOKIE['admin_color_mode_user'];\n            if (in_array($userMode, $allowedModes, true)) {\n                $baseMode = $userMode;\n            }\n        }\n\n        if ($baseMode === null) {\n            $baseMode = (string) $settings->color_mode;\n        }\n\n        // Resolve auto mode using the cached OS preference\n        if (\n            $baseMode === self::COLOR_AUTO &&\n            isset($_COOKIE['admin_color_mode_setting'])\n        ) {\n            $cookieMode = $_COOKIE['admin_color_mode_setting'];\n            if (in_array($cookieMode, [self::COLOR_LIGHT, self::COLOR_DARK], true)) {\n                return $cookieMode;\n            }\n        }\n\n        return $baseMode;\n    }\n\n    /**\n     * isColorModeAuto checks if the effective color mode is auto\n     */\n    public static function isColorModeAuto(): bool\n    {\n        if (isset($_COOKIE['admin_color_mode_user'])) {\n            return $_COOKIE['admin_color_mode_user'] === self::COLOR_AUTO;\n        }\n\n        return self::get('color_mode') === self::COLOR_AUTO;\n    }\n\n    /**\n     * getFavicon\n     */\n    public static function getFavicon()\n    {\n        $cacheKey = self::instance()->cacheKey . '.favicon';\n\n        return Cache::memo()->rememberForever($cacheKey, function() {\n            $settings = self::instance();\n\n            if ($settings->favicon) {\n                return $settings->favicon->getPath();\n            }\n\n            return self::getBaseConfigPath('favicon_path', '');\n        });\n    }\n\n    /**\n     * getLogo\n     */\n    public static function getLogo()\n    {\n        $settings = self::instance();\n\n        if ($settings->logo) {\n            return $settings->logo->getPath();\n        }\n\n        return self::getDefaultLogo() ?: null;\n    }\n\n    /**\n     * getNavLogo\n     */\n    public static function getNavLogo()\n    {\n        $cacheKey = self::instance()->cacheKey . '.menu_logo';\n\n        return Cache::memo()->rememberForever($cacheKey, function() {\n            $settings = self::instance();\n\n            if ($settings->menu_logo) {\n                return $settings->menu_logo->getPath();\n            }\n\n            return self::getBaseConfigPath('menu_logo_path', '');\n        });\n    }\n\n    /**\n     * getNavDashboardIcon\n     */\n    public static function getNavDashboardIcon()\n    {\n        $cacheKey = self::instance()->cacheKey . '.dashboard_icon';\n\n        return Cache::memo()->rememberForever($cacheKey, function() {\n            $settings = self::instance();\n\n            if ($settings->dashboard_icon) {\n                return $settings->dashboard_icon->getPath();\n            }\n\n            return self::getBaseConfigPath('dashboard_icon_path', '');\n        });\n    }\n\n    /**\n     * getLoginWallpaperImage\n     */\n    public static function getLoginWallpaperImage()\n    {\n        $bgType = self::get('login_background_type', self::DEFAULT_LOGIN_BG_TYPE);\n        if ($bgType == self::DEFAULT_LOGIN_BG_TYPE) {\n            return null;\n        }\n\n        $settings = self::instance();\n\n        if ($settings->login_background_wallpaper) {\n            return $settings->login_background_wallpaper->getPath();\n        }\n\n        return self::getBaseConfigPath('login_background_wallpaper');\n    }\n\n    /**\n     * getLoginCustomImage\n     */\n    public static function getLoginCustomImage()\n    {\n        $imgType = self::get('login_image_type', self::DEFAULT_LOGIN_IMG_TYPE);\n        if ($imgType == self::DEFAULT_LOGIN_IMG_TYPE) {\n            return null;\n        }\n\n        $settings = self::instance();\n        if ($settings->login_custom_image) {\n            return $settings->login_custom_image->getPath();\n        }\n\n        return self::getBaseConfigPath('login_custom_image');\n    }\n\n    /**\n     * renderCss for the backend area\n     */\n    public static function renderCss()\n    {\n        try {\n            $cacheKey = self::instance()->cacheKey . '.stylesheet';\n\n            $customCss = Cache::memo()->rememberForever($cacheKey, function() {\n                return self::compileCss() ?: '';\n            });\n        }\n        catch (Exception $ex) {\n            $customCss = '/* ' . e($ex->getMessage()) . ' */';\n        }\n\n        return $customCss;\n    }\n\n    /**\n     * compileCss for the backend area\n     */\n    public static function compileCss()\n    {\n        $instance = self::instance();\n        $basePath = base_path('modules/backend/models/brandsetting');\n\n        // Process settings\n        $loginBgColor = $instance->login_background_color ?? self::DEFAULT_LOGIN_COLOR;\n        $wallpaperSize = $instance->login_background_wallpaper_size ?? self::DEFAULT_WALLPAPER_SIZE;\n\n        // Process palettes\n        $preset = $instance->color_palette['preset'] ?? 'default';\n        $usePalette = $preset !== 'default';\n        $lightPalette = $instance->getPaletteStyleVarsFor($preset, 'light', $instance->color_palette['light'] ?? []);\n        $darkPalette = $instance->getPaletteStyleVarsFor($preset, 'dark', $instance->color_palette['dark'] ?? []);\n\n        // Prepare LESS content\n        $lessContent = '';\n        if ($usePalette) {\n            $lessContent .= File::get($basePath . '/style_palette.less');\n        }\n        $lessContent .= File::get($basePath . '/style_custom.less');\n        $lessContent .= self::get('custom_css');\n\n        // Prepare LESS vars\n        $lessVars = [\n            'logo-image' => \"'\".self::getLogo().\"'\",\n            'login-bg-color' => $loginBgColor,\n            'login-wallpaper-size' => $wallpaperSize,\n            'login-wallpaper' => \"'\".self::getLoginWallpaperImage().\"'\"\n        ] + $lightPalette + $darkPalette;\n\n        // Compile LESS\n        $parser = new Less_Parser(['compress' => true]);\n        $parser->ModifyVars($lessVars);\n        $parser->parse($lessContent);\n        return $parser->getCss();\n    }\n\n    /**\n     * getLoginPageCustomization returns customization properties used by the login page\n     */\n    public static function getLoginPageCustomization()\n    {\n        return (object)[\n            'loginImageType' => self::get('login_image_type', self::DEFAULT_LOGIN_IMG_TYPE),\n            'loginCustomImage' => self::getLoginCustomImage(),\n            'loginBackgroundType' => self::get('login_background_type', self::DEFAULT_LOGIN_BG_TYPE)\n        ];\n    }\n\n    //\n    // Base line configuration\n    //\n\n    /**\n     * getBaseConfig will only look at base config if the enabled flag is true\n     */\n    public static function getBaseConfig(string $value, ?string $default = null): ?string\n    {\n        if (!self::isBaseConfigured()) {\n            return $default;\n        }\n\n        return Config::get('backend.brand.'.$value, $default);\n    }\n\n    /**\n     * getBaseConfigPath returns a configured path from base config\n     */\n    public static function getBaseConfigPath(string $value, ?string $default = null): ?string\n    {\n        $configValue = self::getBaseConfig($value);\n        if (!$configValue) {\n            return $default;\n        }\n\n        $configPath = File::symbolizePath($configValue);\n        if ($configPath && File::exists($configPath)) {\n            return Url::asset(File::localToPublic($configPath));\n        }\n\n        return $default;\n    }\n\n    /**\n     * isBaseConfigured checks if base brand settings found in config\n     */\n    public static function isBaseConfigured(): bool\n    {\n        return (bool) Config::get('backend.brand.enabled', false);\n    }\n\n    /**\n     * getDefaultLogo returns a default backend logo image\n     */\n    public static function getDefaultLogo()\n    {\n        return self::getBaseConfigPath('logo_path');\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/EditorSetting.php",
    "content": "<?php namespace Backend\\Models;\n\nuse File;\nuse Html;\nuse Cache;\nuse Config;\nuse System;\nuse Less_Parser;\nuse System\\Models\\SettingModel;\nuse Exception;\n\n/**\n * EditorSetting that affect all users\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass EditorSetting extends SettingModel\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string settingsCode is a unique code for this object.\n     */\n    public $settingsCode = 'backend_editor_settings';\n\n    /**\n     * @var mixed settingsFields form fields\n     */\n    public $settingsFields = 'fields.yaml';\n\n    /**\n     * @var string The key to store rendered CSS in the cache under\n     */\n    public $cacheKey = 'backend::editor.custom_css';\n\n    /**\n     * @var string defaultHtmlAllowEmptyTags\n     */\n    protected $defaultHtmlAllowEmptyTags = 'textarea, a, i, iframe, object, video, style, script, .icon, .bi, .fa, .fr-emoticon, .fr-inner, path, line';\n\n    /**\n     * @var string defaultHtmlAllowTags\n     */\n    protected $defaultHtmlAllowTags = 'a, abbr, address, area, article, aside, audio, b, base, bdi, bdo, blockquote, br, button, canvas, caption, cite, code, col, colgroup, datalist, dd, del, details, dfn, dialog, div, dl, dt, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, hr, i, iframe, img, input, ins, kbd, keygen, label, legend, li, link, main, map, mark, menu, menuitem, meter, nav, noscript, object, ol, optgroup, option, output, p, param, pre, progress, queue, rp, rt, ruby, s, samp, script, style, section, select, small, source, span, strike, strong, sub, summary, sup, table, tbody, td, textarea, tfoot, th, thead, time, title, tr, track, u, ul, var, video, wbr';\n\n    /**\n     * @var string defaultHtmlAllowAttrs\n     */\n    protected $defaultHtmlAllowAttrs = '';\n\n    /**\n     * @var string defaultHtmlNoWrapTags\n     */\n    protected $defaultHtmlNoWrapTags = 'figure, script, style';\n\n    /**\n     * @var string defaultHtmlRemoveTags\n     */\n    protected $defaultHtmlRemoveTags = 'script, style';\n\n    /**\n     * @var string defaultHtmlLineBreakerTags\n     */\n    protected $defaultHtmlLineBreakerTags = 'figure, table, hr, iframe, form, dl';\n\n    /**\n     * @var array defaultHtmlStyleImage\n     */\n    protected $defaultHtmlStyleImage = [\n        'oc-img-rounded' => 'Rounded',\n        'oc-img-bordered' => 'Bordered',\n    ];\n\n    /**\n     * @var array defaultHtmlStyleLink\n     */\n    protected $defaultHtmlStyleLink = [\n        'oc-link-green' => 'Green',\n        'oc-link-strong' => 'Strong',\n    ];\n\n    /**\n     * @var array defaultHtmlStyleParagraph\n     */\n    protected $defaultHtmlStyleParagraph = [\n        'oc-text-bordered' => 'Bordered',\n        'oc-text-gray' => 'Gray',\n        'oc-text-spaced' => 'Spaced',\n        'oc-text-uppercase' => 'Uppercase',\n    ];\n\n    protected $defaultHtmlStyleInline = [\n        'oc-class-code' => 'Code',\n        'oc-class-highlighted' => 'Highlighted',\n        'oc-class-transparency' => 'Transparent',\n    ];\n\n    /**\n     * @var array defaultHtmlStyleTable\n     */\n    protected $defaultHtmlStyleTable = [\n        'oc-dashed-borders' => 'Dashed Borders',\n        'oc-alternate-rows' => 'Alternate Rows',\n    ];\n\n    /**\n     * @var array defaultHtmlStyleTableCell\n     */\n    protected $defaultHtmlStyleTableCell = [\n        'oc-cell-highlighted' => 'Highlighted',\n        'oc-cell-thick-border' => 'Thick Border',\n    ];\n\n    /**\n     * @var array defaultHtmlParagraphFormats\n     */\n    protected $defaultHtmlParagraphFormats = [\n        'N' => 'Normal',\n        'H1' => 'Heading 1',\n        'H2' => 'Heading 2',\n        'H3' => 'Heading 3',\n        'H4' => 'Heading 4',\n        'PRE' => 'Code',\n    ];\n\n    /**\n     * @var array editorToolbarPresets for Froala\n     */\n    protected $editorToolbarPresets = [\n        'default' => 'paragraphFormat, paragraphStyle, quote, bold, italic, align, formatOL, formatUL, insertTable,\n                      insertSnippet, insertPageLink, insertImage, insertVideo, insertAudio, insertFile, insertHR, fullscreen, html',\n        'minimal' => 'bold, italic, underline, |, insertSnippet, insertPageLink, insertImage, |, html',\n        'full'    => 'undo, redo, |, bold, italic, underline, |, paragraphFormat, paragraphStyle, inlineStyle, |,\n                      strikeThrough, subscript, superscript, clearFormatting, |, fontFamily, fontSize, |, color,\n                      emoticons, icons, -, selectAll, |, align, formatOL, formatUL, outdent, indent, quote, |, insertHR,\n                      insertSnippet, insertPageLink, insertImage, insertVideo, insertAudio, insertFile, insertTable, |, selectAll,\n                      html, fullscreen',\n    ];\n\n    /**\n     * Validation rules\n     */\n    public $rules = [];\n\n    /**\n     * Initialize the seed data for this model. This only executes when the\n     * model is first created or reset to default.\n     * @return void\n     */\n    public function initSettingsData()\n    {\n        $this->html_toolbar_buttons = static::getBaseConfig('toolbar_buttons', '');\n        $this->html_allow_empty_tags = static::getBaseConfig('allow_empty_tags', $this->defaultHtmlAllowEmptyTags);\n        $this->html_allow_tags = static::getBaseConfig('allow_tags', $this->defaultHtmlAllowTags);\n        $this->html_no_wrap_tags = static::getBaseConfig('no_wrap_tags', $this->defaultHtmlNoWrapTags);\n        $this->html_remove_tags = static::getBaseConfig('remove_tags', $this->defaultHtmlRemoveTags);\n        $this->html_line_breaker_tags = static::getBaseConfig('line_breaker_tags', $this->defaultHtmlLineBreakerTags);\n        $this->html_style_image = $this->makeStylesForTable(static::getBaseConfig('style_image', $this->defaultHtmlStyleImage));\n        $this->html_style_link = $this->makeStylesForTable(static::getBaseConfig('style_link', $this->defaultHtmlStyleLink));\n        $this->html_paragraph_formats = $this->makeFormatsForTable(static::getBaseConfig('paragraph_formats', $this->defaultHtmlParagraphFormats));\n        $this->html_style_paragraph = $this->makeStylesForTable(static::getBaseConfig('style_paragraph', $this->defaultHtmlStyleParagraph));\n        $this->html_style_inline = $this->makeStylesForTable(static::getBaseConfig('style_inline', $this->defaultHtmlStyleInline));\n        $this->html_style_table = $this->makeStylesForTable(static::getBaseConfig('style_table', $this->defaultHtmlStyleTable));\n        $this->html_style_table_cell = $this->makeStylesForTable(static::getBaseConfig('style_table_cell', $this->defaultHtmlStyleTableCell));\n\n        // Attempt to load custom CSS\n        $htmlCssPath = File::symbolizePath(self::getBaseConfig('stylesheet_path', '~/modules/backend/models/editorsetting/default_styles.less'));\n        if ($htmlCssPath && File::exists($htmlCssPath)) {\n            $this->html_custom_styles = File::get($htmlCssPath);\n        }\n    }\n\n    /**\n     * beforeSave\n     */\n    public function beforeSave()\n    {\n        if ($this->isDirty('html_custom_styles')) {\n            $this->html_custom_styles = Html::clean($this->html_custom_styles);\n\n            if (System::checkSafeMode()) {\n                $this->html_custom_styles = str_ireplace('@import', 'import', $this->html_custom_styles);\n            }\n        }\n\n        $this->cleanMarkupClasses();\n    }\n\n    /**\n     * cleanMarkupClasses removes invalid characters from CSS class names\n     * to prevent XSS via Froala editor dropdown rendering\n     */\n    protected function cleanMarkupClasses()\n    {\n        $styleFields = [\n            'html_style_image',\n            'html_style_link',\n            'html_style_paragraph',\n            'html_style_inline',\n            'html_style_table',\n            'html_style_table_cell',\n        ];\n\n        $value = $this->value;\n\n        foreach ($styleFields as $field) {\n            if (is_array($value[$field] ?? null)) {\n                foreach ($value[$field] as $key => $row) {\n                    if (isset($row['class_name'])) {\n                        // Only allow valid CSS class characters: letters, digits, hyphens, underscores\n                        $value[$field][$key]['class_name'] = preg_replace(\n                            '/[^a-zA-Z0-9_-]/',\n                            '',\n                            $row['class_name']\n                        );\n                    }\n                }\n            }\n        }\n\n        $this->value = $value;\n    }\n\n    /**\n     * clearCache\n     */\n    public function clearCache()\n    {\n        parent::clearCache();\n\n        Cache::forget($this->cacheKey);\n    }\n\n    /**\n     * makeStylesForTable\n     */\n    protected function makeStylesForTable($arr)\n    {\n        $count = 0;\n\n        return array_build($arr, function ($key, $value) use (&$count) {\n            return [$count++, ['class_label' => $value, 'class_name' => $key]];\n        });\n    }\n\n    /**\n     * makeFormatsForTable\n     */\n    protected function makeFormatsForTable($arr)\n    {\n        $count = 0;\n\n        return array_build($arr, function ($key, $value) use (&$count) {\n            return [$count++, ['format_label' => $value, 'format_tag' => $key]];\n        });\n    }\n\n    /**\n     * getConfiguredStyles same as getConfigured but uses special style structure.\n     */\n    public static function getConfiguredStyles($key, $default = null)\n    {\n        $instance = static::instance();\n\n        $value = $instance->get($key);\n\n        $defaultValue = $instance->getDefaultValue($key);\n\n        if (is_array($value)) {\n            $value = array_filter(array_build($value, function ($key, $value) {\n                if (array_has($value, ['class_name', 'class_label'])) {\n                    return [\n                        array_get($value, 'class_name'),\n                        array_get($value, 'class_label')\n                    ];\n                }\n            }));\n        }\n\n        return $value != $defaultValue ? $value : $default;\n    }\n\n    /**\n     * getConfiguredFormats same as getConfigured but uses a special structure for paragraph formats.\n     */\n    public static function getConfiguredFormats($key, $default = null)\n    {\n        $instance = static::instance();\n\n        $value = $instance->get($key);\n\n        $defaultValue = $instance->getDefaultValue($key);\n\n        if (is_array($value)) {\n            $value = array_filter(array_build($value, function ($key, $value) {\n                if (array_has($value, ['format_tag', 'format_label'])) {\n                    return [\n                        array_get($value, 'format_tag'),\n                        array_get($value, 'format_label')\n                    ];\n                }\n            }));\n        }\n\n        return $value != $defaultValue ? $value : $default;\n    }\n\n    /**\n     * getConfigured returns the value only if it differs from the default value.\n     */\n    public static function getConfigured($key, $default = null)\n    {\n        $instance = static::instance();\n\n        $value = $instance->get($key);\n\n        $defaultValue = $instance->getDefaultValue($key);\n\n        return $value != $defaultValue ? $value : $default;\n    }\n\n    /**\n     * getDefaultValue\n     */\n    public function getDefaultValue($attribute)\n    {\n        $property = 'default'.studly_case($attribute);\n\n        return $this->$property;\n    }\n\n    /**\n     * getEditorToolbarPresets returns the editor toolbar presets without line breaks.\n     */\n    public function getEditorToolbarPresets(): array\n    {\n        return array_map(function($value) {\n            return preg_replace('/\\s+/', ' ', $value);\n        }, $this->editorToolbarPresets);\n    }\n\n    /**\n     * renderCss\n     */\n    public static function renderCss()\n    {\n        $cacheKey = self::instance()->cacheKey;\n\n        if ($cache = Cache::memo()->get($cacheKey)) {\n            return $cache;\n        }\n\n        try {\n            $customCss = self::compileCss();\n            Cache::forever($cacheKey, $customCss);\n        }\n        catch (Exception $ex) {\n            $customCss = '/* ' . e($ex->getMessage()) . ' */';\n        }\n\n        return $customCss;\n    }\n\n    /**\n     * compileCss\n     */\n    public static function compileCss()\n    {\n        $parser = new Less_Parser(['compress' => true]);\n\n        $customStyles = '.fr-view {';\n        $customStyles .= self::get('html_custom_styles');\n        $customStyles .= '}';\n\n        $parser->parse($customStyles);\n\n        return $parser->getCss();\n    }\n\n    //\n    // Base line configuration\n    //\n\n    /**\n     * getBaseConfig will only look at base config if the enabled flag is true\n     */\n    public static function getBaseConfig(string $value, $default = null)\n    {\n        if (!self::isBaseConfigured()) {\n            return $default;\n        }\n\n        return Config::get('editor.html_defaults.'.$value, $default);\n    }\n\n    /**\n     * isBaseConfigured checks if base brand settings found in config\n     */\n    public static function isBaseConfigured(): bool\n    {\n        return (bool) Config::get('editor.html_defaults.enabled', false);\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/ExportModel.php",
    "content": "<?php namespace Backend\\Models;\n\nuse Arr;\nuse File;\nuse Lang;\nuse Model;\nuse Response;\nuse ApplicationException;\n\n/**\n * ExportModel used for exporting data\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class ExportModel extends Model\n{\n    use \\Backend\\Models\\ExportModel\\EncodesCsv;\n    use \\Backend\\Models\\ExportModel\\EncodesJson;\n\n    /**\n     * @var array guarded attributes that aren't mass assignable.\n     */\n    protected $guarded = [];\n\n    /**\n     * exportData is called when data is being exported.\n     * The return value should be an array in the format of:\n     *\n     *   [\n     *       'db_name1' => 'Some attribute value',\n     *       'db_name2' => 'Another attribute value'\n     *   ],\n     *   [...]\n     *\n     */\n    abstract public function exportData($columns, $sessionKey = null);\n\n    /**\n     * export data based on column names and labels.\n     * The $columns array should be in the format of:\n     *\n     *   [\n     *       'db_name1' => 'Column label',\n     *       'db_name2' => 'Another label',\n     *       ...\n     *   ]\n     *\n     */\n    public function export($columns, $options)\n    {\n        $sessionKey = array_get($options, 'sessionKey');\n\n        $columns = $this->processColumnKeys($columns);\n\n        $data = $this->exportData(array_keys($columns), $sessionKey);\n\n        return $this->processExportData($columns, $data, $options);\n    }\n\n    /**\n     * exportDownload returns a download response\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function exportDownload($outputName, $options = [])\n    {\n        $columns = $options['columns'] ?? [];\n\n        return $this->download($this->export($columns, $options), $outputName);\n    }\n\n    /**\n     * download a previously compiled export file.\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function download($name, $outputName = null)\n    {\n        if (!preg_match('/^oc[0-9a-z]*$/i', $name)) {\n            throw new ApplicationException(__(\"File not found\"));\n        }\n\n        $csvPath = $this->getTemporaryExportPath($name);\n        if (!file_exists($csvPath)) {\n            throw new ApplicationException(__(\"File not found\"));\n        }\n\n        $contentType = ends_with($name, 'xjson')\n            ? 'application/json'\n            : 'text/csv';\n\n        return Response::download($csvPath, $outputName, [\n            'Content-Type' => $contentType,\n        ])->deleteFileAfterSend(true);\n    }\n\n    /**\n     * processColumnKeys will detect a numerical array or an associative array to determine column keys,\n     * the expected output format is [column_name => Column Label]\n     */\n    protected function processColumnKeys(array $columns): array\n    {\n        if (Arr::isList($columns)) {\n            $columns = array_combine($columns, $columns);\n        }\n\n        return $columns;\n    }\n\n    /**\n     * processExportData converts a data collection to a CSV file.\n     */\n    protected function processExportData($columns, $results, $options)\n    {\n        // Validate\n        if (!$results) {\n            throw new ApplicationException(__(\"There was no data supplied to export\"));\n        }\n\n        // Extend columns\n        $columns = $this->exportExtendColumns($columns);\n\n        // Save for download\n        $fileName = uniqid('oc');\n\n        // Prepare export\n        if ($this->file_format === 'json') {\n            $fileName .= 'xjson';\n            $options['savePath'] = $this->getTemporaryExportPath($fileName);\n            $this->processExportDataAsJson($columns, $results, $options);\n        }\n        else {\n            $fileName .= 'xcsv';\n            $options['savePath'] = $this->getTemporaryExportPath($fileName);\n            $this->processExportDataAsCsv($columns, $results, $options);\n        }\n\n        return $fileName;\n    }\n\n    /**\n     * getTemporaryExportPath\n     */\n    protected function getTemporaryExportPath($fileName)\n    {\n        $path = temp_path('export');\n\n        if (!File::isDirectory($path)) {\n            File::makeDirectory($path, 0755, true, true);\n        }\n\n        return $path.'/'.$fileName;\n    }\n\n    /**\n     * exportExtendColumns used to override column definitions at export time.\n     */\n    protected function exportExtendColumns($columns)\n    {\n        return $columns;\n    }\n\n    /**\n     * getColumnHeaders extracts the headers from the column definitions.\n     */\n    protected function getColumnHeaders($columns)\n    {\n        $headers = [];\n\n        foreach ($columns as $column => $label) {\n            $headers[] = Lang::get($label);\n        }\n\n        return $headers;\n    }\n\n    /**\n     * matchDataToColumns ensures the correct order of the column data.\n     */\n    protected function matchDataToColumns($data, $columns)\n    {\n        $results = [];\n\n        foreach ($columns as $column => $label) {\n            $results[] = array_get($data, $column);\n        }\n\n        return $results;\n    }\n\n    /**\n     * encodeArrayValue prepares an array object for the file type.\n     * @return mixed\n     */\n    protected function encodeArrayValue($data, $delimiter = '|')\n    {\n        if (!is_array($data)) {\n            return '';\n        }\n\n        if ($this->file_format === 'json') {\n            return $this->encodeArrayValueForJson($data);\n        }\n        else {\n            return $this->encodeArrayValueForCsv($data, $delimiter);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/ImportModel.php",
    "content": "<?php namespace Backend\\Models;\n\nuse Model;\nuse ApplicationException;\n\n/**\n * ImportModel for importing data\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class ImportModel extends Model\n{\n    use \\Backend\\Models\\ImportModel\\DecodesCsv;\n    use \\Backend\\Models\\ImportModel\\DecodesJson;\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var array guarded attributes that aren't mass assignable.\n     */\n    protected $guarded = [];\n\n    /**\n     * attachOne relations\n     */\n    public $attachOne = [\n        'import_file' => [\\System\\Models\\File::class, 'public' => false],\n    ];\n\n    /**\n     * @var array resultStats is the import statistics store.\n     */\n    protected $resultStats = [\n        'updated' => 0,\n        'created' => 0,\n        'errors' => [],\n        'warnings' => [],\n        'skipped' => []\n    ];\n\n    /**\n     * importData is called when data is being imported.\n     * The $results array should be in the format of:\n     *\n     *    [\n     *        'db_name1' => 'Some value',\n     *        'db_name2' => 'Another value'\n     *    ],\n     *    [...]\n     *\n     */\n    abstract public function importData($results, $sessionKey = null);\n\n    /**\n     * import data based on column names matching header indexes in the CSV.\n     * The $matches array should be in the format of:\n     *\n     *    [\n     *        0 => [db_name1, db_name2],\n     *        1 => [db_name3],\n     *        ...\n     *    ]\n     *\n     * The key (0, 1) is the column index in the CSV and the value\n     * is another array of target database column names.\n     */\n    public function import($matches, $options = [])\n    {\n        $sessionKey = $options['sessionKey'] ?? null;\n\n        $importFilePath = $options['importFilePath'] ?? null;\n\n        $path = $importFilePath ?: $this->getImportFilePath($sessionKey);\n\n        if (!$path) {\n            throw new ApplicationException(\"The import file was not found using session key [$sessionKey]\");\n        }\n\n        $data = $this->processImportData($path, $matches, $options);\n\n        return $this->importData($data, $sessionKey);\n    }\n\n    /**\n     * importFile imports a file directly from disk\n     */\n    public function importFile($filePath, $options = [])\n    {\n        $matches = $options['matches'] ?? null;\n\n        return $this->import($matches, ['importFilePath' => $filePath] + $options);\n    }\n\n    /**\n     * processImportData converts column index to database column map to an array containing\n     * database column names and values pulled from the CSV file. Eg:\n     *\n     *   [0 => [first_name], 1 => [last_name]]\n     *\n     * Will return:\n     *\n     *   [first_name => Joe, last_name => Blogs],\n     *   [first_name => Harry, last_name => Potter],\n     *   [...]\n     *\n     * @return array\n     */\n    protected function processImportData($filePath, $matches, $options)\n    {\n        // Prepare output\n        if ($this->file_format === 'json') {\n            $result = $this->processImportDataAsJson($filePath, $matches, $options);\n        }\n        else {\n            if (!$matches) {\n                throw new ApplicationException('Importing as CSV requires column matches definition');\n            }\n\n            $result = $this->processImportDataAsCsv($filePath, $matches, $options);\n        }\n\n        return $result;\n    }\n\n    /**\n     * decodeArrayValue prepares an array object for the file type.\n     * @return array\n     */\n    protected function decodeArrayValue($value, $delimiter = '|')\n    {\n        if ($this->file_format === 'json') {\n            return $this->decodeArrayValueForJson($value);\n        }\n        else {\n            return $this->decodeArrayValueForCsv($value, $delimiter);\n        }\n    }\n\n    /**\n     * getImportFilePath returns an attached imported file local path, if available\n     * @return string\n     */\n    public function getImportFilePath($sessionKey = null)\n    {\n        $file = $this\n            ->import_file()\n            ->withDeferred($sessionKey)\n            ->orderBy('id', 'desc')\n            ->first()\n        ;\n\n        if (!$file) {\n            return null;\n        }\n\n        return $file->getLocalPath();\n    }\n\n    /**\n     * getResultStats\n     */\n    public function getResultStats()\n    {\n        $this->resultStats['errorCount'] = count($this->resultStats['errors']);\n        $this->resultStats['warningCount'] = count($this->resultStats['warnings']);\n        $this->resultStats['skippedCount'] = count($this->resultStats['skipped']);\n\n        $this->resultStats['hasMessages'] = (\n            $this->resultStats['errorCount'] > 0 ||\n            $this->resultStats['warningCount'] > 0 ||\n            $this->resultStats['skippedCount'] > 0\n        );\n\n        return (object) $this->resultStats;\n    }\n\n    /**\n     * logUpdated\n     */\n    protected function logUpdated()\n    {\n        $this->resultStats['updated']++;\n    }\n\n    /**\n     * logCreated\n     */\n    protected function logCreated()\n    {\n        $this->resultStats['created']++;\n    }\n\n    /**\n     * logError\n     */\n    protected function logError($rowIndex, $message)\n    {\n        $this->resultStats['errors'][$rowIndex] = $message;\n    }\n\n    /**\n     * logWarning\n     */\n    protected function logWarning($rowIndex, $message)\n    {\n        $this->resultStats['warnings'][$rowIndex] = $message;\n    }\n\n    /**\n     * logSkipped\n     */\n    protected function logSkipped($rowIndex, $message)\n    {\n        $this->resultStats['skipped'][$rowIndex] = $message;\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/Preference.php",
    "content": "<?php namespace Backend\\Models;\n\nuse App;\nuse Lang;\nuse Config;\nuse Session;\nuse BackendAuth;\nuse System\\Helpers\\Preset as PresetHelper;\nuse System\\Helpers\\DateTime as DateTimeHelper;\nuse Backend\\Models\\UserPreferenceModel;\n\n/**\n * Preference model for the backend user\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Preference extends UserPreferenceModel\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    const DEFAULT_THEME = 'twilight';\n\n    /**\n     * @var string settingsCode is a unique code\n     */\n    public $settingsCode = 'backend::backend.preferences';\n\n    /**\n     * @var mixed settingsFields form field definitions\n     */\n    public $settingsFields = 'fields.yaml';\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [];\n\n    /**\n     * initSettingsData for this model. This only executes when the\n     * model is first created or reset to default.\n     * @return void\n     */\n    public function initSettingsData()\n    {\n        $config = App::make('config');\n        $this->locale = $config->get('backend.locale', $config->get('app.locale', 'en'));\n        $this->fallback_locale = $this->getFallbackLocale($this->locale);\n        $this->timezone = $config->get('backend.timezone', $config->get('app.timezone'));\n\n        $this->editor_theme = $config->get('editor.theme', static::DEFAULT_THEME);\n        $this->editor_word_wrap = $config->get('editor.word_wrap', 'off');\n        $this->editor_font_size = $config->get('editor.font_size', 12);\n        $this->editor_tab_size = $config->get('editor.tab_size', 4);\n        $this->editor_code_folding = $config->get('editor.code_folding', 'manual');\n        $this->editor_autocompletion = $config->get('editor.editor_autocompletion', 'manual');\n        $this->editor_use_emmet = $config->get('editor.use_emmet', true);\n        $this->editor_show_gutter = $config->get('editor.show_gutter', true);\n        $this->editor_highlight_active_line = $config->get('editor.highlight_active_line', true);\n        $this->editor_auto_closing = $config->get('editor.auto_closing', true);\n        $this->editor_use_hard_tabs = $config->get('editor.use_hard_tabs', false);\n        $this->editor_display_indent_guides = $config->get('editor.display_indent_guides', false);\n        $this->editor_show_invisibles = $config->get('editor.show_invisibles', true);\n        $this->editor_show_print_margin = $config->get('editor.show_print_margin', false);\n    }\n\n    /**\n     * setAppLocale based on the user preference.\n     */\n    public static function setAppLocale()\n    {\n        $prefLocale = null;\n        if (Session::has('locale')) {\n            $prefLocale = Session::get('locale');\n        }\n        elseif (BackendAuth::getUser() && ($locale = static::get('locale'))) {\n            Session::put('locale', $locale);\n            $prefLocale = $locale;\n        }\n\n        if ($prefLocale) {\n            if (Config::get('app.original_locale') === null) {\n                Config::set('app.original_locale', Config::get('app.locale'));\n            }\n\n            App::setLocale($prefLocale);\n        }\n    }\n\n    /**\n     * setAppFallbackLocale is the same as setAppLocale except for the fallback definition.\n     */\n    public static function setAppFallbackLocale()\n    {\n        $prefLocale = null;\n        if (Session::has('fallback_locale')) {\n            $prefLocale = Session::get('fallback_locale');\n        }\n        elseif (BackendAuth::getUser() && ($locale = static::get('fallback_locale'))) {\n            Session::put('fallback_locale', $locale);\n            $prefLocale = $locale;\n        }\n\n        if ($prefLocale) {\n            Lang::setFallback($prefLocale);\n        }\n    }\n\n    //\n    // Events\n    //\n\n    /**\n     * beforeValidate\n     */\n    public function beforeValidate()\n    {\n        $this->fallback_locale = $this->getFallbackLocale($this->locale);\n    }\n\n    /**\n     * afterSave\n     */\n    public function afterSave()\n    {\n        Session::put('locale', $this->locale);\n        Session::put('fallback_locale', $this->fallback_locale);\n    }\n\n    //\n    // Utils\n    //\n\n    /**\n     * Called when this model is reset to default by the user.\n     * @return void\n     */\n    public function resetDefault()\n    {\n        parent::resetDefault();\n        Session::forget('locale');\n        Session::forget('fallback_locale');\n    }\n\n    /**\n     * @deprecated whole method not used\n     */\n    public static function applyConfigValues()\n    {\n        $settings = self::instance();\n        if (Config::get('app.original_locale') === null) {\n            Config::set('app.original_locale', Config::get('app.locale'));\n        }\n\n        Config::set('app.locale', $settings->locale);\n        Config::set('app.fallback_locale', $settings->fallback_locale);\n    }\n\n    //\n    // Getters\n    //\n\n    /**\n     * getFallbackLocale attempts to extract the language from the locale,\n     * otherwise use the configuration.\n     * @return string\n     */\n    protected function getFallbackLocale($locale)\n    {\n        if ($position = strpos($locale, '-')) {\n            $target = substr($locale, 0, $position);\n            $available = $this->getLocaleOptions();\n            if (isset($available[$target])) {\n                return $target;\n            }\n        }\n\n        return Config::get('app.fallback_locale');\n    }\n\n    /**\n     * getLocaleOptions returns available options for the \"locale\" attribute.\n     * @return array\n     */\n    public function getLocaleOptions()\n    {\n        return PresetHelper::flags();\n    }\n\n    /**\n     * getTimezoneOptions returns all available timezone options.\n     * @return array\n     */\n    public function getTimezoneOptions()\n    {\n        return PresetHelper::timezones();\n    }\n\n    /**\n     * getEditorThemeOptions returns the theme options for the backend editor.\n     * @return array\n     */\n    public function getEditorThemeOptions()\n    {\n        return [\n            static::DEFAULT_THEME => 'Dark',\n            'sqlserver' => 'Light',\n            'merbivore' => 'High Contrast',\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/User.php",
    "content": "<?php namespace Backend\\Models;\n\nuse Str;\nuse Mail;\nuse Event;\nuse Config;\nuse Backend;\nuse October\\Rain\\Auth\\Models\\User as UserBase;\nuse ValidationException;\n\n/**\n * User is an administrator model\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass User extends UserBase\n{\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'backend_users';\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [\n        'email' => 'required|between:6,255|email|unique:backend_users',\n        'login' => 'required|between:2,255|unique:backend_users',\n        'password' => 'required:create|between:4,255|confirmed',\n        'password_confirmation' => 'required_with:password|between:4,255'\n    ];\n\n    /**\n     * @var array dates attributes that should be mutated to dates\n     */\n    protected $dates = [\n        'password_changed_at',\n        'activated_at',\n        'last_login',\n        'created_at',\n        'updated_at',\n        'deleted_at',\n    ];\n\n    /**\n     * belongsToMany relation\n     */\n    public $belongsToMany = [\n        'groups' => [UserGroup::class, 'table' => 'backend_users_groups']\n    ];\n\n    public $belongsTo = [\n        'role' => UserRole::class\n    ];\n\n    public $attachOne = [\n        'avatar' => \\System\\Models\\File::class\n    ];\n\n    /**\n     * @var array fillable fields\n     */\n    protected $fillable = [\n        'first_name',\n        'last_name',\n        'login',\n        'email',\n        'password',\n        'password_confirmation',\n        'send_invite',\n    ];\n\n    /**\n     * @var array purgeable list of attribute names which should not be saved to the database\n     */\n    protected $purgeable = ['password_confirmation', 'send_invite'];\n\n    /**\n     * @var string loginAttribute\n     */\n    public static $loginAttribute = 'login';\n\n    /**\n     * getFullNameAttribute returns the user's full name\n     */\n    public function getFullNameAttribute(): string\n    {\n        return \"{$this->first_name} {$this->last_name}\";\n    }\n\n    /**\n     * getPersistCode gets a code for when the user is persisted to a cookie or session\n     * which identifies the user\n     * @return string\n     */\n    public function getPersistCode()\n    {\n        if (!$this->persist_code || Config::get('backend.force_single_session', false)) {\n            return parent::getPersistCode();\n        }\n\n        return $this->persist_code;\n    }\n\n    /**\n     * getAvatarThumb returns the public image file path to this user's avatar\n     */\n    public function getAvatarThumb($size = 25, $options = null)\n    {\n        if (is_string($options)) {\n            $options = ['default' => $options];\n        }\n        elseif (!is_array($options)) {\n            $options = [];\n        }\n\n        // User has avatar defined\n        if ($this->avatar) {\n            return $this->avatar->getThumb($size, $size, $options);\n        }\n\n        // User has no avatar, look for default\n        $defaultConfig = Config::get('backend.default_avatar', 'gravatar');\n\n        // Default gravatar is \"retro\"\n        if ($defaultConfig === 'gravatar') {\n            $default = array_get($options, 'default', 'retro');\n\n            return '//www.gravatar.com/avatar/' .\n                md5(strtolower(trim($this->email))) .\n                '?s='. $size .\n                '&d='. urlencode($default);\n        }\n\n        // Default backend image\n        if ($defaultConfig === 'local') {\n            return Backend::skinAsset('assets/images/default-avatar.png');\n        }\n\n        // Custom URL\n        return $defaultConfig;\n    }\n\n    /**\n     * beforeValidate event\n     */\n    public function beforeValidate()\n    {\n        if ($this->validationForced) {\n            return;\n        }\n\n        // Will pass if password attribute is dirty\n        if ($password = $this->getOriginalHashValue('password')) {\n            $this->password_changed_at = $this->freshTimestamp();\n            $this->validatePasswordPolicy($password);\n        }\n    }\n\n    /**\n     * beforeCreate\n     */\n    public function beforeCreate()\n    {\n        if ($this->send_invite) {\n            $this->is_password_expired = true;\n        }\n    }\n\n    /**\n     * afterCreate event\n     */\n    public function afterCreate()\n    {\n        $this->restorePurgedValues();\n\n        if ($this->send_invite) {\n            $this->sendInvitation();\n        }\n    }\n\n    /**\n     * afterFetch event\n     */\n    public function afterFetch()\n    {\n        if (is_array($this->permissions)) {\n            $this->permissions = UserRole::applyPermissionPatches($this->permissions);\n        }\n    }\n\n    /**\n     * afterLogin event\n     */\n    public function afterLogin()\n    {\n        parent::afterLogin();\n\n        /**\n         * @event backend.user.login\n         * Provides an opportunity to interact with the Backend User model after the user has logged in\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.user.login', function ((\\Backend\\Models\\User) $user) {\n         *         Flash::success(sprintf('Welcome %s!', $user->getFullNameAttribute()));\n         *     });\n         *\n         */\n        Event::fire('backend.user.login', [$this]);\n    }\n\n    /**\n     * sendInvitation sends an invitation to the user using template \"backend:invite\"\n     */\n    public function sendInvitation()\n    {\n        $data = [\n            'name' => $this->full_name,\n            'login' => $this->login,\n            'password' => $this->getOriginalHashValue('password'),\n            'link' => Backend::url('backend'),\n        ];\n\n        Mail::send('backend:invite', $data, function ($message) {\n            $message->to($this->email, $this->full_name);\n        });\n    }\n\n    /**\n     * getGroupsOptions returns available group options\n     */\n    public function getGroupsOptions()\n    {\n        $result = [];\n\n        foreach (UserGroup::all() as $group) {\n            $result[$group->id] = [$group->name, $group->description];\n        }\n\n        return $result;\n    }\n\n    /**\n     * getRoleOptions returns available role options\n     */\n    public function getRoleOptions()\n    {\n        $result = [];\n\n        foreach (UserRole::all() as $role) {\n            $result[$role->id] = [$role->name, $role->description];\n        }\n\n        return $result;\n    }\n\n    /**\n     * createDefaultAdmin inserts a new administrator with the default feature set\n     */\n    public static function createDefaultAdmin(array $data)\n    {\n        // Look up default role\n        $roleId = UserRole::where('code', UserRole::CODE_DEVELOPER)->first()->id ?? null;\n\n        // Create admin\n        $user = new self;\n        $user->forceFill([\n            'last_name' => array_get($data, 'last_name'),\n            'first_name' => array_get($data, 'first_name'),\n            'email' => array_get($data, 'email'),\n            'login' => array_get($data, 'login'),\n            'password' => array_get($data, 'password'),\n            'password_confirmation' => array_get($data, 'password_confirmation'),\n            'permissions' => [],\n            'is_superuser' => true,\n            'is_activated' => true,\n            'role_id' => $roleId\n        ]);\n        $user->save();\n\n        // Add to default group\n        if ($group = UserGroup::where('code', UserGroup::CODE_OWNERS)->first()) {\n            $user->addGroup($group);\n        }\n\n        return $user;\n    }\n\n    /**\n     * hasPasswordExpired checks if the password has expired for this user\n     */\n    public function hasPasswordExpired(): bool\n    {\n        if ($this->is_password_expired) {\n            return true;\n        }\n\n        $expireDays = Config::get('backend.password_policy.expire_days');\n        if (!$expireDays) {\n            return false;\n        }\n\n        $changedDays = (int) $this->freshTimestamp()\n            ->diffInDays($this->password_changed_at ?: $this->created_at);\n\n        return $changedDays > $expireDays;\n    }\n\n    /**\n     * validatePasswordPolicy will check the password based on the backend policy\n     */\n    public function validatePasswordPolicy($password)\n    {\n        $policy = Config::get('backend.password_policy', []);\n\n        if ($minLength = $policy['min_length'] ?? 4) {\n            if (mb_strlen($password) < $minLength) {\n                throw new ValidationException(['password' => __('Password must have a minimum of length of :min characters', ['min'=>$minLength])]);\n            }\n        }\n\n        if ($policy['require_uppercase'] ?? false) {\n            if (mb_strtolower($password) === $password) {\n                throw new ValidationException(['password' => __('Password must contain at least one uppercase character.')]);\n            }\n        }\n\n        if ($policy['require_lowercase'] ?? false) {\n            if (mb_strtoupper($password) === $password) {\n                throw new ValidationException(['password' => __('Password must contain at least one lowercase character.')]);\n            }\n        }\n\n        if ($policy['require_number'] ?? false) {\n            if (!array_filter(str_split($password), 'is_numeric')) {\n                throw new ValidationException(['password' => __('Password must contain at least one number.')]);\n            }\n        }\n\n        if ($policy['require_nonalpha'] ?? false) {\n            if (!Str::contains($password, str_split(\"!@#$%^&*()_+-=[]{}|'\"))) {\n                throw new ValidationException(['password' => __('Password must contain at least one nonalphanumeric character.')]);\n            }\n        }\n\n        /**\n         * @event user.validatePasswordPolicy\n         * Called when the user password is validated against the policy\n         *\n         * Example usage:\n         *\n         *     $model->bindEvent('user.validatePasswordPolicy', function (string $password) use ($model) {\n         *         throw new ValidationException(['password' => 'Prevent anything from validating ever!']);\n         *     });\n         *\n         */\n        $this->fireEvent('user.validatePasswordPolicy', compact('password'));\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/UserGroup.php",
    "content": "<?php namespace Backend\\Models;\n\nuse October\\Rain\\Auth\\Models\\Group as GroupBase;\n\n/**\n * UserGroup for an administrator\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass UserGroup extends GroupBase\n{\n    const CODE_OWNERS = 'owners';\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'backend_user_groups';\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [\n        'name' => 'required|between:2,128|unique:backend_user_groups',\n    ];\n\n    /**\n     * @var array belongsToMany relationship\n     */\n    public $belongsToMany = [\n        'users' => [User::class, 'table' => 'backend_users_groups']\n    ];\n\n    /**\n     * afterCreate event\n     */\n    public function afterCreate()\n    {\n        if ($this->is_new_user_default) {\n            $this->addAllUsersToGroup();\n        }\n    }\n\n    /**\n     * addAllUsersToGroup adds everyone to this group\n     */\n    public function addAllUsersToGroup()\n    {\n        $this->users()->sync(User::lists('id'));\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/UserPreference.php",
    "content": "<?php namespace Backend\\Models;\n\nuse BackendAuth;\nuse SystemException;\nuse October\\Rain\\Auth\\Models\\Preferences as PreferencesBase;\n\n/**\n * UserPreference stores all preferences for the backend user\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass UserPreference extends PreferencesBase\n{\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'backend_user_preferences';\n\n    /**\n     * @var bool timestamps enabled\n     */\n    public $timestamps = false;\n\n    /**\n     * @var array cache\n     */\n    protected static $cache = [];\n\n    /**\n     * resolveUser checks for a supplied user or uses the default logged in. You should\n     * override this method\n     *\n     * @param mixed $user An optional back-end user object.\n     * @return User object\n     */\n    public function resolveUser($user)\n    {\n        $user = BackendAuth::getUser();\n        if (!$user) {\n            throw new SystemException(trans('backend::lang.user.preferences.not_authenticated'));\n        }\n\n        return $user;\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/UserPreferenceModel.php",
    "content": "<?php namespace Backend\\Models;\n\nuse Site;\nuse System\\Models\\SettingModel;\n\n/**\n * UserPreferenceModel base class, same as SettingModel except values are\n * saved with the logged in user's preferences via Backend\\Models\\UserPreference\n *\n * Add this the model class definition:\n *\n *     public $settingsCode = 'author_plugin_code';\n *     public $settingsFields = 'fields.yaml';\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass UserPreferenceModel extends SettingModel\n{\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'backend_user_preferences';\n\n    /**\n     * @var array expandoPassthru attributes that should not be serialized\n     */\n    protected $expandoPassthru = ['user_id', 'namespace', 'group', 'item', 'site_id', 'site_root_id'];\n\n    /**\n     * settingBeforeSave\n     */\n    public function settingBeforeSave()\n    {\n        $preferences = UserPreference::forUser();\n\n        [$namespace, $group, $item] = $preferences->parseKey($this->settingsCode);\n\n        $this->item = $item;\n        $this->group = $group;\n        $this->namespace = $namespace;\n        $this->user_id = $preferences->userContext->id;\n    }\n\n    /**\n     * getSettingsRecord returns the raw Model record that stores the settings.\n     * @return Model\n     */\n    public function getSettingsRecord()\n    {\n        $record = $this->newQuery()\n            ->remember(1440, $this->getCacheKey())\n            ->first();\n\n        return $record ?: null;\n    }\n\n    /**\n     * newQuery applies a local scope\n     */\n    public function newQuery()\n    {\n        $query = $this->registerGlobalScopes($this->newQueryWithoutScopes());\n\n        $item = UserPreference::forUser();\n\n        return $item->scopeApplyKeyAndUser($query, $this->settingsCode, $item->userContext);\n    }\n\n    /**\n     * getCacheKey returns a cache key for this record.\n     */\n    public function getCacheKey()\n    {\n        $item = UserPreference::forUser();\n\n        $userId = $item->userContext ? $item->userContext->id : 0;\n\n        $key = 'backend::userpreference.' . $this->settingsCode . '-' . $userId . '-' . Site::getSiteIdFromContext();\n\n        if ($this->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class)) {\n            $key .= '-' . ($this->site_id ?: Site::getSiteIdFromContext());\n        }\n\n        return $key;\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/UserRole.php",
    "content": "<?php namespace Backend\\Models;\n\nuse Backend\\Classes\\RoleManager;\nuse October\\Rain\\Auth\\Models\\Role as RoleBase;\n\n/**\n * UserRole for an administrator\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass UserRole extends RoleBase\n{\n    use \\October\\Rain\\Database\\Traits\\Sortable;\n\n    const CODE_DEVELOPER = 'developer';\n    const CODE_PUBLISHER = 'publisher';\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'backend_user_roles';\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [\n        'name' => 'required|between:2,128|unique:backend_user_roles',\n        'code' => 'unique:backend_user_roles',\n    ];\n\n    /**\n     * @var array hasMany relationship\n     */\n    public $hasMany = [\n        'users' => [User::class, 'key' => 'role_id']\n    ];\n\n    /**\n     * @var array fillable fields\n     */\n    protected $fillable = [\n        'name',\n        'code',\n        'description',\n        'color_background'\n    ];\n\n    /**\n     * filterFields used by the form controller\n     */\n    public function filterFields($fields)\n    {\n        if ($this->is_system) {\n            $fields->code->disabled = true;\n            $fields->permissions->disabled = true;\n        }\n    }\n\n    /**\n     * afterFetch event\n     */\n    public function afterFetch()\n    {\n        if ($this->is_system) {\n            $this->permissions = $this->getDefaultPermissions();\n        }\n\n        if (is_array($this->permissions)) {\n            $this->permissions = static::applyPermissionPatches($this->permissions);\n        }\n    }\n\n    /**\n     * beforeSave event\n     */\n    public function beforeSave()\n    {\n        if ($this->isSystemRole()) {\n            $this->is_system = true;\n            $this->permissions = [];\n        }\n    }\n\n    /**\n     * isSystemRole checks if a role is locked by the system\n     */\n    public function isSystemRole(): bool\n    {\n        if (!$this->code || !strlen(trim($this->code))) {\n            return false;\n        }\n\n        if ($this->is_system || in_array($this->code, [\n            self::CODE_DEVELOPER,\n            self::CODE_PUBLISHER\n        ])) {\n            return true;\n        }\n\n        return RoleManager::instance()->hasPermissionsForRole($this->code);\n    }\n\n    /**\n     * getDefaultPermissions returns default permissions for a role\n     */\n    public function getDefaultPermissions()\n    {\n        return RoleManager::instance()->listPermissionsForRole($this->code);\n    }\n\n    /**\n     * applyPermissionPatches replaces old permission codes with new ones. It leaves\n     * the old ones in place since there shouldn't be any harm in doing so.\n     */\n    public static function applyPermissionPatches(array $permissions): array\n    {\n        $toReplace = [\n            'admins.manage.roles' => 'admins.roles',\n            'admins.manage.groups' => 'admins.groups',\n        ];\n\n        foreach ($permissions as $key => $value) {\n            if (!isset($toReplace[$key])) {\n                continue;\n            }\n\n            $permissions[$toReplace[$key]] = $value;\n        }\n\n        return $permissions;\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/UserThrottle.php",
    "content": "<?php namespace Backend\\Models;\n\nuse October\\Rain\\Auth\\Models\\Throttle as ThrottleBase;\n\n/**\n * UserThrottle model for backend users\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass UserThrottle extends ThrottleBase\n{\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'backend_user_throttle';\n\n    /**\n     * @var array belongsTo relation\n     */\n    public $belongsTo = [\n        'user' => User::class\n    ];\n}\n"
  },
  {
    "path": "modules/backend/models/accesslog/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    id:\n        label: ID\n        searchable: true\n        invisible: true\n        width: 75px\n\n    created_at:\n        label: Date & Time\n        searchable: true\n        type: timetense\n        width: 160px\n\n    ip_address:\n        label: IP address\n        searchable: true\n\n    login:\n        label: Login\n        relation: user\n        select: login\n        searchable: true\n        sortable: false\n\n    first_name:\n        label: First name\n        relation: user\n        select: first_name\n        searchable: true\n        sortable: false\n\n    last_name:\n        label: Last name\n        relation: user\n        select: last_name\n        searchable: true\n        sortable: false\n\n    email:\n        label: Email\n        relation: user\n        select: email\n        searchable: true\n        sortable: false\n"
  },
  {
    "path": "modules/backend/models/accesslog/scopes.yaml",
    "content": "# ===================================\n# Filter Scope Definitions\n# ===================================\n\nscopes:\n    created_at:\n        label: Date & Time\n        type: daterange\n        conditions: created_at >= ':after' AND created_at <= ':before'\n\n    user:\n        label: Login\n        modelClass: Backend\\Models\\User\n        conditions: user_id in (:filtered)\n        nameFrom: login\n"
  },
  {
    "path": "modules/backend/models/brandsetting/HasPalettes.php",
    "content": "<?php namespace Backend\\Models\\BrandSetting;\n\nuse Event;\n\n/**\n * HasPalettes for brand settings\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasPalettes\n{\n    /**\n     * @var array presets\n     */\n    protected $presets = [\n        'default' => [\n            'name' => 'Default',\n            'light' => [\n                'primary' => '#6a6cf7',\n                'secondary' => '#72809d',\n                'selection' => '#6bc48d',\n                'link_color' => '#3498db',\n                'mainnav_color' => '#ffffff',\n                'mainnav_bg' => '#2d3134',\n                'sidebar_color' => '#536061',\n                'sidebar_bg' => '#e9edf3',\n                'sidebar_active_color' => '#333333',\n                'sidebar_active_bg' => '#ffffff',\n                'sidebar_hover_bg' => '#ffffff',\n                'settings_color' => '#536061',\n                'settings_bg' => '#f0f4f8',\n                'settings_item' => '#ffffff',\n                'settings_active_color' => '#ffffff',\n                'settings_active_bg' => '#6bc48d',\n                'settings_hover_bg' => '#dfe7ee',\n            ],\n            'dark' => [\n                'link_color' => '#a6a7fa',\n                'sidebar_color' => '#d7e1eA',\n                'sidebar_bg' => '#292a2d',\n                'sidebar_active_color' => '#ffffff',\n                'sidebar_active_bg' => '#424242',\n                'sidebar_hover_bg' => '#424242',\n                'settings_color' => '#adb5bd',\n                'settings_bg' => '#1b1f22',\n                'settings_item' => '#212529',\n                'settings_active_color' => '#ffffff',\n                'settings_active_bg' => '#2b3442',\n                'settings_hover_bg' => '#2b3442',\n            ],\n        ],\n\n        'classic' => [\n            'name' => 'Classic',\n            'light' => [\n                'primary' => '#1991d1',\n                'secondary' => '#656d79',\n                'selection' => '#e67e22',\n                'mainnav_color' => '#ffffff',\n                'mainnav_bg' => '#000000',\n                'sidebar_color' => '#aeb6bf',\n                'sidebar_bg' => '#34495e',\n                'sidebar_active_color' => '#ffffff',\n                'sidebar_active_bg' => '#1991d1',\n                'sidebar_hover_bg' => '#151d26',\n                'settings_color' => '#e0e0e0',\n                'settings_bg' => '#34495e',\n                'settings_item' => '#2c3e50',\n                'settings_active_color' => '#ffffff',\n                'settings_active_bg' => '#1991d1',\n                'settings_hover_bg' => '#151d26',\n            ],\n            'dark' => [\n            ],\n        ],\n\n        'oxford' => [\n            'name' => 'Oxford',\n            'light' => [\n                'primary' => '#6698c8',\n                'secondary' => '#4a5664',\n                'selection' => '#78af8f',\n                'mainnav_color' => '#ffffff',\n                'mainnav_bg' => '#2c3849',\n                'sidebar_color' => '#ffffff',\n                'sidebar_bg' => '#303e4d',\n                'sidebar_active_color' => '#ffffff',\n                'sidebar_active_bg' => '#6698c8',\n                'sidebar_hover_bg' => '#4a5664',\n                'settings_active_bg' => '#6698c8',\n            ],\n            'dark' => [\n                'settings_active_bg' => '#2c3849',\n            ],\n        ],\n\n        'console' => [\n            'name' => 'Console',\n            'light' => [\n                'primary' => '#0d6efd',\n                'secondary' => '#223b2f',\n                'selection' => '#1c913d',\n                'mainnav_color' => '#4ee077',\n                'mainnav_bg' => '#1a2b23',\n                'sidebar_color' => '#4ee077',\n                'sidebar_bg' => '#181818',\n                'sidebar_active_color' => '#1a1d21',\n                'sidebar_active_bg' => '#4ee077',\n                'sidebar_hover_bg' => '#1a2b23',\n            ],\n            'dark' => [\n                'settings_bg' => '#181818',\n                'settings_active_color' => '#4ee077',\n                'settings_active_bg' => '#1a2b23',\n                'settings_hover_bg' => '#1a2b23',\n            ],\n        ],\n\n        'valentino' => [\n            'name' => 'Valentino',\n            'light' => [\n                'primary' => '#1164a3',\n                'secondary' => '#6c8497',\n                'selection' => '#2bac76',\n                'mainnav_color' => '#ffffff',\n                'mainnav_bg' => '#350d36',\n                'sidebar_color' => '#ece7ec',\n                'sidebar_bg' => '#3f0e40',\n                'sidebar_active_color' => '#ffffff',\n                'sidebar_active_bg' => '#1164a3',\n                'sidebar_hover_bg' => '#4d2a51',\n                'settings_bg' => '#f0f4f8',\n                'settings_active_color' => '#ffffff',\n                'settings_active_bg' => '#1164a3',\n            ],\n            'dark' => [\n                'primary' => '#1164a3',\n                'mainnav_bg' => '#121016',\n                'sidebar_bg' => '#19171d',\n                'settings_bg' => '#1d151d',\n                'sidebar_active_bg' => '#1164a3',\n                'sidebar_hover_bg' => '#27242c',\n                'settings_active_bg' => '#1164a3',\n            ],\n        ],\n\n        'punch' => [\n            'name' => 'Punch',\n            'light' => [\n                'primary' => '#ff8f21',\n                'secondary' => '#8b7e60',\n                'selection' => '#d94422',\n                'mainnav_color' => '#ffd476',\n                'mainnav_bg' => '#461412',\n                'sidebar_color' => '#ffd476',\n                'sidebar_bg' => '#6A1B1B',\n                'sidebar_active_color' => '#FDF6E3',\n                'sidebar_active_bg' => '#d94422',\n                'sidebar_hover_bg' => '#461412',\n                'settings_color' => '#6A1B1B',\n                'settings_bg' => '#e2dfd7',\n                'settings_item' => '#ffffff',\n                'settings_active_color' => '#fdf6e3',\n                'settings_active_bg' => '#d94422',\n                'settings_hover_bg' => '#f3f2ef',\n            ],\n            'dark' => [\n                'sidebar_color' => '#d2a454',\n                'sidebar_bg' => '#171a1e',\n                'sidebar_active_color' => '#FFD476',\n                'sidebar_active_bg' => '#6A1B1B',\n                'sidebar_hover_bg' => '#461412',\n                'settings_color' => '#FFD476',\n                'settings_bg' => '#1f1818',\n                'settings_item' => '#221b1b',\n                'settings_hover_bg' => '#461412',\n            ],\n        ],\n    ];\n\n    /**\n     * @var array|null presetCache\n     */\n    protected $presetCache;\n\n    /**\n     * getPalettePresets\n     */\n    protected function getPalettePresets()\n    {\n        if ($this->presetCache !== null) {\n            return $this->presetCache;\n        }\n\n        $presets = $this->presets;\n\n        /**\n         * @event backend.brand.getPalettePresets\n         * Add or remove backend branding palettes.\n         *\n         * The format of the $presets variable can be found in\n         * Backend\\Models\\BrandSetting\\HasPalettes::$presets\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.brand.getPalettePresets', function(&$presets) {\n         *         unset($presets['punch']);\n         *     });\n         *\n         */\n        Event::fire('backend.brand.getPalettePresets', [&$presets]);\n\n        return $this->presetCache = $presets;\n    }\n\n    /**\n     * getPaletteColors\n     */\n    public function getPaletteColors(?string $preset = null): array\n    {\n        if ($preset === null) {\n            $preset = 'default';\n        }\n\n        return [\n            'light' => $this->getPaletteColorsFor($preset, 'light'),\n            'dark' => $this->getPaletteColorsFor($preset, 'dark')\n        ];\n    }\n\n    /**\n     * getPaletteStyleVarsFor returns variables for use within a LESS compiler\n     */\n    public function getPaletteStyleVarsFor(string $preset, string $mode, array $customColors = []): array\n    {\n        // Merge defaults\n        $result = array_merge(\n            $this->getPaletteColorsFor('default', $mode),\n            $this->getPaletteColorsFor($preset, $mode) ?: $customColors\n        );\n\n        // Convert keys to kebab from snake case\n        foreach ($result as $key => $val) {\n            $newKey = 'brand-'.str_replace('_', '-', $key);\n            if ($mode !== 'light') {\n                $newKey .= '-dark';\n            }\n            $result[$newKey] = $val;\n            unset($result[$key]);\n        }\n\n        return $result;\n    }\n\n    /**\n     * getPaletteColorsFor\n     */\n    public function getPaletteColorsFor(string $preset, string $mode): array\n    {\n        $presets = $this->getPalettePresets();\n\n        if (!isset($presets[$preset])) {\n            return [];\n        }\n\n        return array_merge(\n            $presets['default'][$mode] ?? [],\n            $presets[$preset]['light'] ?? [],\n            $presets[$preset][$mode] ?? []\n        );\n    }\n\n    /**\n     * getPaletteDefinitions\n     */\n    public function getPaletteDefinitions(): array\n    {\n        $result = [];\n        $presets = $this->getPalettePresets();\n\n        foreach ($presets as $palette => $info) {\n            $result[$palette] = $info;\n            $result[$palette]['light'] = array_merge(\n                $presets['default']['light'],\n                $info['light'] ?? []\n            );\n            $result[$palette]['dark'] = array_merge(\n                $presets['default']['dark'],\n                $info['light'] ?? [],\n                $info['dark'] ?? []\n            );\n        }\n\n        return $result;\n    }\n\n    /**\n     * getPaletteOptions\n     */\n    public function getPaletteOptions(): array\n    {\n        $result = [];\n        $presets = $this->getPalettePresets();\n\n        foreach ($presets as $palette => $info) {\n            $result[$palette] = $info['name'] ?? '???';\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/brandsetting/_color_mode.php",
    "content": "<?php\n    use Backend\\Models\\BrandSetting;\n?>\n<div class=\"control-simplelist color-mode-selector is-selectable-box is-flush\">\n    <ul>\n        <li class=\"<?= $field->value === BrandSetting::COLOR_LIGHT ? 'active' : ''?>\" data-color-mode=\"<?= BrandSetting::COLOR_LIGHT ?>\">\n            <a href=\"javascript:;\">\n                <div class=\"color-mode-box\">\n                    <h5 class=\"heading d-flex\">\n                        <span class=\"flex-grow-1\"><?= __(\"Light Mode\") ?></span>\n                        <i class=\"icon icon-sun\"></i>\n                    </h5>\n                </div>\n            </a>\n        </li>\n        <li class=\"<?= $field->value === BrandSetting::COLOR_DARK ? 'active' : ''?>\" data-color-mode=\"<?= BrandSetting::COLOR_DARK ?>\">\n            <a href=\"javascript:;\">\n                <div class=\"color-mode-box\">\n                    <h5 class=\"heading d-flex\">\n                        <span class=\"flex-grow-1\"><?= __(\"Dark Mode\") ?></span>\n                        <i class=\"icon icon-moon\"></i>\n                    </h5>\n                </div>\n            </a>\n        </li>\n        <li class=\"<?= $field->value === BrandSetting::COLOR_AUTO ? 'active' : ''?>\" data-color-mode=\"<?= BrandSetting::COLOR_AUTO ?>\">\n            <a href=\"javascript:;\">\n                <div class=\"color-mode-box\">\n                    <h5 class=\"heading d-flex\">\n                        <span class=\"flex-grow-1\"><?= __(\"OS Default\") ?></span>\n                        <i class=\"icon icon-adjust\"></i>\n                    </h5>\n                </div>\n            </a>\n        </li>\n    </ul>\n</div>\n\n<input\n    type=\"hidden\"\n    name=\"<?= $field->getName() ?>\"\n    value=\"<?= e($field->value) ?>\"\n    id=\"<?= $field->getId() ?>\"\n/>\n\n<script>\n    $(document).on('click', '[data-color-mode]', function() {\n        backendBrandSettingSetColorMode($(this).data('color-mode'));\n\n        // Reset the color switcher preference cookie\n        Cookies.remove('admin_color_mode_user');\n\n        // Always force a reload of the next page\n        oc.AjaxTurbo && oc.AjaxTurbo.controller.disable();\n    });\n\n    function backendBrandSettingSetColorMode(mode) {\n        $('[data-color-mode]').removeClass('active');\n        $('[data-color-mode=\"'+mode+'\"]').addClass('active');\n\n        var $element = document.querySelector('#<?= $field->getId() ?>');\n        if ($element) {\n            $element.value = mode;\n            oc.Events.dispatch('change', { target: $element });\n        }\n\n        if (mode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n            document.body.setAttribute('data-bs-theme', 'dark');\n        }\n        else {\n            document.body.setAttribute('data-bs-theme', mode);\n        }\n    }\n</script>\n"
  },
  {
    "path": "modules/backend/models/brandsetting/_menu_mode.php",
    "content": "<?php\n    use Backend\\Models\\BrandSetting;\n?>\n<div class=\"control-simplelist menu-mode-selector is-selectable-box is-flush\">\n    <ul>\n        <li class=\"<?= $field->value === BrandSetting::MENU_INLINE ? 'active' : ''?>\" data-menu-mode=\"<?= BrandSetting::MENU_INLINE ?>\">\n            <a href=\"javascript:;\">\n                <div class=\"menu-mode-box menu-mode-box-inline\">\n                    <span class=\"mode-image\"></span>\n                    <h5 class=\"heading\"><?= __(\"Inline\") ?></h5>\n                </div>\n            </a>\n        </li>\n        <li class=\"<?= $field->value === BrandSetting::MENU_TEXT ? 'active' : ''?>\" data-menu-mode=\"<?= BrandSetting::MENU_TEXT ?>\">\n            <a href=\"javascript:;\">\n                <div class=\"menu-mode-box menu-mode-box-text\">\n                    <span class=\"mode-image\"></span>\n                    <h5 class=\"heading\"><?= __(\"Text\") ?></h5>\n                </div>\n            </a>\n        </li>\n        <li class=\"<?= $field->value === BrandSetting::MENU_TILE ? 'active' : ''?>\" data-menu-mode=\"<?= BrandSetting::MENU_TILE ?>\">\n            <a href=\"javascript:;\">\n                <div class=\"menu-mode-box menu-mode-box-tiles\">\n                    <span class=\"mode-image\"></span>\n                    <h5 class=\"heading\"><?= __(\"Tiles\") ?></h5>\n                </div>\n            </a>\n        </li>\n        <li class=\"<?= $field->value === BrandSetting::MENU_COLLAPSE ? 'active' : ''?>\" data-menu-mode=\"<?= BrandSetting::MENU_COLLAPSE ?>\">\n            <a href=\"javascript:;\">\n                <div class=\"menu-mode-box menu-mode-box-collapsed\">\n                    <span class=\"mode-image\"></span>\n                    <h5 class=\"heading\"><?= __(\"Collapsed\") ?></h5>\n                </div>\n            </a>\n        </li>\n        <li class=\"<?= $field->value === BrandSetting::MENU_ICONS ? 'active' : ''?>\" data-menu-mode=\"<?= BrandSetting::MENU_ICONS ?>\">\n            <a href=\"javascript:;\">\n                <div class=\"menu-mode-box menu-mode-box-icons\">\n                    <span class=\"mode-image\"></span>\n                    <h5 class=\"heading\"><?= __(\"Icons\") ?></h5>\n                </div>\n            </a>\n        </li>\n        <li class=\"<?= $field->value === BrandSetting::MENU_LEFT ? 'active' : ''?>\" data-menu-mode=\"<?= BrandSetting::MENU_LEFT ?>\">\n            <a href=\"javascript:;\">\n                <div class=\"menu-mode-box menu-mode-box-left\">\n                    <span class=\"mode-image\"></span>\n                    <h5 class=\"heading\"><?= __(\"Left Side\") ?></h5>\n                </div>\n            </a>\n        </li>\n    </ul>\n</div>\n\n<input\n    type=\"hidden\"\n    name=\"<?= $field->getName() ?>\"\n    value=\"<?= e($field->value) ?>\"\n    id=\"<?= $field->getId() ?>\"\n/>\n\n<script>\n    $(document).on('click', '[data-menu-mode]', function() {\n        backendBrandSettingSetMenuMode($(this).data('menu-mode'));\n\n        // Always force a reload of the next page\n        oc.AjaxTurbo && oc.AjaxTurbo.controller.disable();\n    })\n\n    function backendBrandSettingSetMenuMode(mode) {\n        $('[data-menu-mode]').removeClass('active');\n        $('[data-menu-mode=\"'+mode+'\"]').addClass('active');\n        $('#<?= $field->getId() ?>').val(mode);\n\n        $('#layout-mainmenu .main-menu-container > nav.navbar')\n            .removeClass('navbar-mode-icons navbar-mode-inline navbar-mode-text navbar-mode-tile navbar-mode-collapse')\n            .addClass('navbar-mode-' + mode);\n\n        $(document.body).toggleClass('main-menu-left', mode === 'left');\n    }\n</script>\n"
  },
  {
    "path": "modules/backend/models/brandsetting/fields.yaml",
    "content": "# ==================================='\n#  Field' Definitions\n# ==================================='\n\ntabs:\n    fields:\n\n        app_name:\n            label: App Name\n            commentAbove: This name is shown in the title area of the back-end.\n            tab: Brand\n            span: left\n\n        app_tagline:\n            label: App Tagline\n            commentAbove: This name is shown on the sign in screen for the back-end.\n            tab: Brand\n            span: right\n\n        logo:\n            label: Logo\n            type: fileupload\n            commentAbove: Upload a custom logo to use in the back-end.\n            mode: image\n            imageHeight: 170\n            tab: Brand\n            span: left\n            fileTypes: jpg,jpeg,bmp,png,webp,gif,svg\n\n        favicon:\n            label: Favicon\n            type: fileupload\n            commentAbove: Upload a custom favicon to use in the back-end\n            # (32x32)\n            mode: image\n            imageHeight: 32\n            imageWidth: 32\n            tab: Brand\n            span: right\n            fileTypes: jpg,jpeg,bmp,png,webp,gif,svg,ico\n\n        _ruler1:\n            type: ruler\n            tab: Brand\n\n        menu_logo:\n            label: Navigation Logo\n            tab: Brand\n            type: fileupload\n            commentAbove: Replaces the dashboard link with a custom logo in the navigation.\n            mode: image\n            imageHeight: 60\n            span: left\n            fileTypes: jpg,jpeg,bmp,png,webp,gif,svg\n\n        dashboard_icon:\n            label: Dashboard Icon\n            tab: Brand\n            type: fileupload\n            commentAbove: Use a custom image for the dashboard icon (60x60).\n            mode: image\n            imageHeight: 60\n            imageWidth: 60\n            span: right\n            fileTypes: jpg,jpeg,bmp,png,webp,gif,svg\n\n        login_prompt:\n            label: Welcome Message\n            commentAbove: This message is shown on the sign in screen for the back-end.\n            tab: Login Page\n            span: full\n\n        login_background_type:\n            label: Background Type\n            tab: Login Page\n            type: dropdown\n            default: color\n            options:\n                color: Flat Color\n                wallpaper: Wallpaper\n                gradient: Gradient\n                ai_images: AI Generated Images\n            span: left\n\n        login_background_color:\n            label: Background Color\n            tab: Login Page\n            type: colorpicker\n            availableColors: ['#6a6cf7', '#16a085', '#27ae60', '#6bc48d', '#3498db', '#9b59b6', '#34495e', '#f1c40f', '#e67e22', '#e74c3c', '#ecf0f1', '#95a5a6']\n            span: full\n            trigger:\n                action: show\n                field: login_background_type\n                condition: value[color]\n\n        login_background_wallpaper:\n            label: Background Wallpaper Image\n            type: fileupload\n            mode: image\n            tab: Login Page\n            span: right\n            fileTypes: jpg,jpeg,png\n            trigger:\n                action: show\n                field: login_background_type\n                condition: value[wallpaper]\n\n        login_background_wallpaper_size:\n            label: Wallpaper Size\n            tab: Login Page\n            span: left\n            type: radio\n            default: auto\n            trigger:\n                action: show\n                field: login_background_type\n                condition: value[wallpaper]\n            options:\n                auto: Auto\n                cover: Cover\n\n        login_image_type:\n            label: Image\n            tab: Login Page\n            type: dropdown\n            options:\n                autumn_images: Random Autumn Images\n                custom: Custom Image\n            trigger:\n                action: show\n                field: login_background_type\n                condition: value[color][wallpaper]\n            span: left\n\n        login_custom_image:\n            label: Login Page Image\n            type: fileupload\n            mode: image\n            tab: Login Page\n            span: right\n            fileTypes: jpg,jpeg,png\n            trigger:\n                action: show\n                field: login_image_type\n                condition: value[custom]\n\n        show_light_switch:\n            label: Show Light Switch\n            comment: Allow users to toggle the color mode from the navigation.\n            tab: Colors\n            type: checkbox\n\n        color_mode:\n            label: Color Mode\n            tab: Colors\n            type: partial\n            path: ~/modules/backend/models/brandsetting/_color_mode.php\n\n        color_palette:\n            label: Color Preset\n            type: Backend\\FormWidgets\\PaletteEditor\n            tab: Colors\n\n        menu_mode:\n            label: Menu Style\n            tab: Navigation\n            type: partial\n            path: ~/modules/backend/models/brandsetting/_menu_mode.php\n\n        custom_css:\n            label: Custom Stylesheet\n            type: codeeditor\n            tab: Styles\n            size: giant\n            language: css\n"
  },
  {
    "path": "modules/backend/models/brandsetting/style_custom.less",
    "content": "//\n// Coded variables\n//\n// @logo-image\n// @login-bg-color\n// @login-wallpaper\n// @login-wallpaper-size\n//\n\n//\n// Logos\n//\n\n.oc-logo-transparent when not (@logo-image = '') {\n    background-image: url('@{logo-image}') !important;\n}\n\n.oc-logo when not (@logo-image = '') {\n    background-image: url('@{logo-image}');\n}\n\n//\n// Login page\n//\n\n.setLoginWallpaper(@login-wallpaper) when not (@login-wallpaper = '') {\n    background-image: url('@{login-wallpaper}');\n    background-position: left top;\n    background-repeat: repeat;\n    background-size: @login-wallpaper-size;\n}\n\n.setLoginWallpaper(@login-wallpaper) when (@login-wallpaper = '') {\n    background-image: none;\n}\n\nbody.outer {\n    .outer-theme-cell {\n        background-color: @login-bg-color;\n        .setLoginWallpaper(@login-wallpaper);\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/brandsetting/style_palette.less",
    "content": ":root, [data-bs-theme=\"light\"] {\n    --bs-primary: @brand-primary;\n    --oc-primary-hover-bg: tint(@brand-primary, 15%);\n    --oc-primary-active-bg: tint(@brand-primary, 20%);\n\n    --bs-link-color: @brand-link-color;\n    --bs-link-color-rgb: red(@brand-link-color), green(@brand-link-color), blue(@brand-link-color);\n    --bs-link-hover-color: shade(@brand-link-color, 20%);\n    --bs-link-hover-color-rgb: red(shade(@brand-link-color, 20%)), green(shade(@brand-link-color, 20%)), blue(shade(@brand-link-color, 20%));\n\n    --bs-secondary: @brand-secondary;\n    --oc-selection: @brand-selection;\n\n    --oc-mainnav-color: @brand-mainnav-color;\n    --oc-mainnav-bg: @brand-mainnav-bg;\n    --oc-mainnav-icon-color: contrast(@brand-mainnav-bg, black, white);\n\n    --oc-sidebar-color: @brand-sidebar-color;\n    --oc-sidebar-bg: @brand-sidebar-bg;\n    --oc-sidebar-active-color: @brand-sidebar-active-color;\n    --oc-sidebar-active-bg: @brand-sidebar-active-bg;\n    --oc-sidebar-hover-bg: @brand-sidebar-hover-bg;\n\n    --oc-settings-color: @brand-settings-color;\n    --oc-settings-bg: @brand-settings-bg;\n    --oc-settings-item: @brand-settings-item;\n    --oc-settings-active-color: @brand-settings-active-color;\n    --oc-settings-active-bg: @brand-settings-active-bg;\n    --oc-settings-hover-bg: @brand-settings-hover-bg;\n}\n\n[data-bs-theme=\"dark\"] {\n    --bs-primary: @brand-primary-dark;\n    --oc-primary-hover-bg: tint(@brand-primary-dark, 15%);\n    --oc-primary-active-bg: tint(@brand-primary-dark, 20%);\n\n    --bs-link-color: @brand-link-color-dark;\n    --bs-link-color-rgb: red(@brand-link-color-dark), green(@brand-link-color-dark), blue(@brand-link-color-dark);\n    --bs-link-hover-color: shade(@brand-link-color-dark, 20%);\n    --bs-link-hover-color-rgb: red(shade(@brand-link-color-dark, 20%)), green(shade(@brand-link-color-dark, 20%)), blue(shade(@brand-link-color-dark, 20%));\n\n    --bs-secondary: @brand-secondary-dark;\n    --oc-selection: @brand-selection-dark;\n\n    --oc-mainnav-color: @brand-mainnav-color-dark;\n    --oc-mainnav-bg: @brand-mainnav-bg-dark;\n    --oc-mainnav-icon-color: contrast(@brand-mainnav-bg-dark, black, white);\n\n    --oc-sidebar-color: @brand-sidebar-color-dark;\n    --oc-sidebar-bg: @brand-sidebar-bg-dark;\n    --oc-sidebar-active-color: @brand-sidebar-active-color-dark;\n    --oc-sidebar-active-bg: @brand-sidebar-active-bg-dark;\n    --oc-sidebar-hover-bg: @brand-sidebar-hover-bg-dark;\n\n    --oc-settings-color: @brand-settings-color-dark;\n    --oc-settings-bg: @brand-settings-bg-dark;\n    --oc-settings-item: @brand-settings-item-dark;\n    --oc-settings-active-color: @brand-settings-active-color-dark;\n    --oc-settings-active-bg: @brand-settings-active-bg-dark;\n    --oc-settings-hover-bg: @brand-settings-hover-bg-dark;\n}\n"
  },
  {
    "path": "modules/backend/models/editorsetting/_toolbar_presets.php",
    "content": "<div>\n    <?php foreach ($this->formWidget->model->getEditorToolbarPresets() as $name => $preset): ?>\n        <button\n            class=\"btn btn-default btn-sm\"\n            data-preset=\"<?= e($preset) ?>\"\n            onclick=\"onClickSetToolbarPresets(this)\"\n            type=\"button\">\n            <?= e(trans('backend::lang.editor.toolbar_buttons_presets.' . $name)) ?>\n        </button>\n    <?php endforeach ?>\n</div>\n<script>\n    function onClickSetToolbarPresets(el) {\n        document.querySelector('#Form-field-EditorSetting-html_toolbar_buttons').value = el.dataset.preset;\n    }\n</script>\n"
  },
  {
    "path": "modules/backend/models/editorsetting/default_styles.less",
    "content": "/*\n * Text\n */\n.oc-text-gray {\n    color: #AAA !important;\n}\n.oc-text-bordered {\n    border-top: solid 1px #222;\n    border-bottom: solid 1px #222;\n    padding: 10px 0;\n}\n.oc-text-spaced {\n    letter-spacing: 1px;\n}\n.oc-text-uppercase {\n    text-transform: uppercase;\n}\n\n/*\n * Inline\n */\n.oc-class-highlighted {\n    background-color:#ffff00;\n}\n\n.oc-class-code {\n    border-color: #cccccc;\n    border-radius: 2px;\n    background: #f5f5f5;\n    padding: 10px;\n    font-family: \"Courier New\", Courier, monospace;\n}\n\n.oc-class-transparency {\n    opacity: 0.5;\n}\n\n/*\n * Links\n */\na.oc-link-strong {\n    font-weight: 700;\n}\na.oc-link-green {\n    color: green;\n}\n\n/*\n * Table\n */\ntable.oc-dashed-borders td,\ntable.oc-dashed-borders th {\n    border-style: dashed;\n}\ntable.oc-alternate-rows tbody tr:nth-child(2n) {\n    background: #f5f5f5;\n}\n\n/*\n * Table cell\n */\ntable td.oc-cell-highlighted,\ntable th.oc-cell-highlighted {\n    border: 1px double red;\n}\ntable td.oc-cell-thick-border,\ntable th.oc-cell-thick-border {\n    border-width: 2px;\n}\n\n/*\n * Images\n */\nimg.oc-img-rounded {\n    border-radius: 100%;\n    background-clip: padding-box;\n}\nimg.oc-img-bordered {\n    border: solid 10px #CCC;\n    box-sizing: content-box;\n}\n"
  },
  {
    "path": "modules/backend/models/editorsetting/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    fields:\n\n        html_custom_styles:\n            label: Custom Stylesheet\n            commentAbove: Custom styles to include in the HTML editor.\n            tab: Markup Styles\n            type: codeeditor\n            size: giant\n            language: css\n\n        html_paragraph_formats:\n            label: Paragraph Formats\n            tab: Markup Classes\n            type: datatable\n            span: full\n            columns:\n                format_tag:\n                    title: Tag Name\n                format_label:\n                    title: Label\n\n        html_style_paragraph:\n            label: Paragraph\n            tab: Markup Classes\n            span: auto\n            type: datatable\n            columns:\n                class_name:\n                    title: Class Name\n                class_label:\n                    title: Label\n\n        html_style_inline:\n            label: Inline\n            tab: Markup Classes\n            span: auto\n            type: datatable\n            columns:\n                class_name:\n                    title: Class Name\n                class_label:\n                    title: Label\n\n        html_style_link:\n            label: Link\n            tab: Markup Classes\n            span: auto\n            type: datatable\n            columns:\n                class_name:\n                    title: Class Name\n                class_label:\n                    title: Label\n\n        html_style_image:\n            label: Image\n            tab: Markup Classes\n            span: auto\n            type: datatable\n            columns:\n                class_name:\n                    title: Class Name\n                class_label:\n                    title: Label\n\n        html_style_table:\n            label: Table\n            tab: Markup Classes\n            span: auto\n            type: datatable\n            columns:\n                class_name:\n                    title: Class Name\n                class_label:\n                    title: Label\n\n        html_style_table_cell:\n            label: Table Cell\n            tab: Markup Classes\n            span: auto\n            type: datatable\n            columns:\n                class_name:\n                    title: Class Name\n                class_label:\n                    title: Label\n\n        html_allow_tags:\n            label: Allowed Tags\n            comment: The list of allowed tags.\n            tab: Markup Tags\n            type: textarea\n\n        html_allow_empty_tags:\n            label: Allowed Empty Tags\n            comment: The list of tags that are not removed when they have no content inside.\n            tab: Markup Tags\n            type: textarea\n            size: small\n            span: auto\n\n        html_no_wrap_tags:\n            label: Do Not Wrap Tags\n            comment: The list of tags that should not be wrapped inside block tags.\n            tab: Markup Tags\n            type: textarea\n            size: small\n            span: auto\n\n        html_remove_tags:\n            label: Remove Tags\n            comment: The list of tags that are removed together with their content.\n            tab: Markup Tags\n            type: textarea\n            size: small\n            span: auto\n\n        html_line_breaker_tags:\n            label: Line Breaker Tags\n            comment: The list of tags that are used to place a line breaker element between.\n            tab: Markup Tags\n            type: textarea\n            size: small\n            span: auto\n\n        html_toolbar_buttons:\n            label: Toolbar Buttons\n            comment: The Toolbar Buttons to be displayed in the Rich Editor by default.\n            tab: Toolbar Buttons\n            type: textarea\n            span: left\n\n        _html_toolbar_buttons_presets:\n            label: Insert a preset toolbar button configuration\n            tab: Toolbar Buttons\n            type: partial\n            path: ~/modules/backend/models/editorsetting/_toolbar_presets.php\n            span: right\n\n        html_allow_attrs:\n            label: Allowed Attributes\n            comment: The list of allowed HTML attributes, in addition to the normal allowances.\n            tab: Markup Tags\n            type: text\n            span: left\n"
  },
  {
    "path": "modules/backend/models/exportmodel/EncodesCsv.php",
    "content": "<?php namespace Backend\\Models\\ExportModel;\n\nuse Lang;\nuse Config;\nuse League\\Csv\\Writer as CsvWriter;\nuse League\\Csv\\CharsetConverter;\nuse SplTempFileObject;\nuse SystemException;\n\n/**\n * EncodesCsv format for export\n */\ntrait EncodesCsv\n{\n    /**\n     * getFormatEncodingOptions returns all available encodings values from the localization config\n     * @return array\n     */\n    public function getFormatEncodingOptions()\n    {\n        return (array) Config::get('backend.available_export_encodings', [\n            'utf-8' => Lang::get('backend::lang.import_export.encodings.utf_8'),\n            'us-ascii' => Lang::get('backend::lang.import_export.encodings.us_ascii'),\n            'iso-8859-1' => Lang::get('backend::lang.import_export.encodings.iso_8859_1'),\n            'iso-8859-2' => Lang::get('backend::lang.import_export.encodings.iso_8859_2'),\n            'iso-8859-3' => Lang::get('backend::lang.import_export.encodings.iso_8859_3'),\n            'iso-8859-4' => Lang::get('backend::lang.import_export.encodings.iso_8859_4'),\n            'iso-8859-5' => Lang::get('backend::lang.import_export.encodings.iso_8859_5'),\n            'iso-8859-6' => Lang::get('backend::lang.import_export.encodings.iso_8859_6'),\n            'iso-8859-7' => Lang::get('backend::lang.import_export.encodings.iso_8859_7'),\n            'iso-8859-8' => Lang::get('backend::lang.import_export.encodings.iso_8859_8'),\n            'iso-8859-0' => Lang::get('backend::lang.import_export.encodings.iso_8859_0'),\n            'iso-8859-10' => Lang::get('backend::lang.import_export.encodings.iso_8859_10'),\n            'iso-8859-11' => Lang::get('backend::lang.import_export.encodings.iso_8859_11'),\n            'iso-8859-13' => Lang::get('backend::lang.import_export.encodings.iso_8859_13'),\n            'iso-8859-14' => Lang::get('backend::lang.import_export.encodings.iso_8859_14'),\n            'iso-8859-15' => Lang::get('backend::lang.import_export.encodings.iso_8859_15'),\n            'Windows-1250' => Lang::get('backend::lang.import_export.encodings.windows_1250'),\n            'Windows-1251' => Lang::get('backend::lang.import_export.encodings.windows_1251'),\n            'Windows-1252' => Lang::get('backend::lang.import_export.encodings.windows_1252'),\n        ]);\n    }\n\n    /**\n     * encodeArrayValueForCsv\n     */\n    protected function encodeArrayValueForCsv(array $data, $delimiter = '|')\n    {\n        // Multi dimension arrays have no choice but to base64 encode\n        if (count($data) !== count($data, COUNT_RECURSIVE)) {\n            return 'base64:' . base64_encode(json_encode($data));\n        }\n\n        // Implode single dimension array as a string\n        $newData = [];\n        foreach ($data as $value) {\n            $newData[] = str_replace($delimiter, '\\\\'.$delimiter, $value);\n        }\n\n        return implode($delimiter, $newData);\n    }\n\n    /**\n     * processExportDataAsCsv returns the export data as a CSV string\n     */\n    protected function processExportDataAsCsv($columns, $results, $options)\n    {\n        // Parse options\n        $options = array_merge([\n            'firstRowTitles' => true,\n            'savePath' => null,\n            'useOutput' => false,\n            'fileName' => null,\n            'delimiter' => null,\n            'enclosure' => null,\n            'escape' => null,\n            'encoding' => null\n        ], $options);\n\n        // Prepare CSV\n        $csv = CsvWriter::createFromString();\n        $csv->setOutputBOM(CsvWriter::BOM_UTF8);\n\n        if ($options['delimiter'] !== null) {\n            $csv->setDelimiter($options['delimiter']);\n        }\n\n        if ($options['enclosure'] !== null) {\n            $csv->setEnclosure($options['enclosure']);\n        }\n\n        if ($options['escape'] !== null) {\n            $csv->setEscape($options['escape']);\n        }\n\n        if (\n            $options['encoding'] !== null &&\n            $csv->supportsStreamFilterOnWrite()\n        ) {\n            CharsetConverter::addTo($csv, 'UTF-8', $options['encoding']);\n        }\n\n        // Add headers\n        if ($options['firstRowTitles']) {\n            $headers = $this->getColumnHeaders($columns);\n            $csv->insertOne($headers);\n        }\n\n        // Add records\n        foreach ($results as $result) {\n            $data = $this->matchDataToColumns($result, $columns);\n            $csv->insertOne($data);\n        }\n\n        // Output\n        if ($options['useOutput']) {\n            $csv->output($options['fileName']);\n            return;\n        }\n\n        // Save to file\n        if ($path = $options['savePath']) {\n            $resource = @fopen($path, 'w+');\n            if (!is_resource($resource)) {\n                throw new SystemException(\"{$path}: failed to open stream for export: No such file or directory.\");\n            }\n            foreach ($csv->chunk(8192) as $chunk) {\n                fwrite($resource, $chunk);\n            }\n            fclose($resource);\n            return;\n        }\n\n        return $csv->toString();\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/exportmodel/EncodesJson.php",
    "content": "<?php namespace Backend\\Models\\ExportModel;\n\nuse File;\nuse Response;\n\n/**\n * EncodesJson format for import\n */\ntrait EncodesJson\n{\n    /**\n     * encodeArrayValueForJson\n     */\n    protected function encodeArrayValueForJson(array $data)\n    {\n        return $data;\n    }\n\n    /**\n     * processExportDataAsJson returns the export data as a JSON string\n     */\n    protected function processExportDataAsJson($columns, $results, $options)\n    {\n        // Parse options\n        $options = array_merge([\n            'savePath' => null,\n            'useOutput' => false,\n            'customJson' => false,\n        ], $options);\n\n        $result = [];\n        $encodeFlags = JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT;\n\n        // Raw output\n        if ($options['customJson']) {\n            $result = $results;\n        }\n        // Compiled output\n        else {\n            foreach ($results as $data) {\n                $row = [];\n                foreach ($columns as $column => $label) {\n                    $row[$column] = array_get($data, $column);\n                }\n\n                $result[] = $row;\n            }\n        }\n\n        // Output\n        if ($options['useOutput']) {\n            Response::json($result)->send();\n            return;\n        }\n\n        // Save to file\n        if ($options['savePath']) {\n            File::put($options['savePath'], json_encode($result, $encodeFlags));\n            return;\n        }\n\n        return json_encode($result, $encodeFlags);\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/importmodel/DecodesCsv.php",
    "content": "<?php namespace Backend\\Models\\ImportModel;\n\nuse Lang;\nuse Config;\nuse League\\Csv\\Reader as CsvReader;\nuse League\\Csv\\Statement as CsvStatement;\nuse Backend\\Behaviors\\ImportExportController\\TranscodeFilter;\n\n/**\n * DecodesCsv format for import\n */\ntrait DecodesCsv\n{\n    /**\n     * getFormatEncodingOptions returns all available encodings values from the localization config\n     * @return array\n     */\n    public function getFormatEncodingOptions()\n    {\n        return (array) Config::get('backend.available_import_encodings', [\n            'utf-8' => Lang::get('backend::lang.import_export.encodings.utf_8'),\n            'us-ascii' => Lang::get('backend::lang.import_export.encodings.us_ascii'),\n            'iso-8859-1' => Lang::get('backend::lang.import_export.encodings.iso_8859_1'),\n            'iso-8859-2' => Lang::get('backend::lang.import_export.encodings.iso_8859_2'),\n            'iso-8859-3' => Lang::get('backend::lang.import_export.encodings.iso_8859_3'),\n            'iso-8859-4' => Lang::get('backend::lang.import_export.encodings.iso_8859_4'),\n            'iso-8859-5' => Lang::get('backend::lang.import_export.encodings.iso_8859_5'),\n            'iso-8859-6' => Lang::get('backend::lang.import_export.encodings.iso_8859_6'),\n            'iso-8859-7' => Lang::get('backend::lang.import_export.encodings.iso_8859_7'),\n            'iso-8859-8' => Lang::get('backend::lang.import_export.encodings.iso_8859_8'),\n            'iso-8859-0' => Lang::get('backend::lang.import_export.encodings.iso_8859_0'),\n            'iso-8859-10' => Lang::get('backend::lang.import_export.encodings.iso_8859_10'),\n            'iso-8859-11' => Lang::get('backend::lang.import_export.encodings.iso_8859_11'),\n            'iso-8859-13' => Lang::get('backend::lang.import_export.encodings.iso_8859_13'),\n            'iso-8859-14' => Lang::get('backend::lang.import_export.encodings.iso_8859_14'),\n            'iso-8859-15' => Lang::get('backend::lang.import_export.encodings.iso_8859_15'),\n            'Windows-1250' => Lang::get('backend::lang.import_export.encodings.windows_1250'),\n            'Windows-1251' => Lang::get('backend::lang.import_export.encodings.windows_1251'),\n            'Windows-1252' => Lang::get('backend::lang.import_export.encodings.windows_1252'),\n        ]);\n    }\n\n    /**\n     * decodeArrayValueForCsv\n     */\n    protected function decodeArrayValueForCsv($value, $delimiter = '|')\n    {\n        if (starts_with($value, 'base64:')) {\n            return json_decode(base64_decode(substr($value, strlen('base64:'))), true);\n        }\n\n        if (strpos($value, $delimiter) === false) {\n            return [$value];\n        }\n\n        $data = preg_split('~(?<!\\\\\\)' . preg_quote($delimiter, '~') . '~', $value);\n        $newData = [];\n\n        foreach ($data as $_value) {\n            $newData[] = str_replace('\\\\'.$delimiter, $delimiter, $_value);\n        }\n\n        return $newData;\n    }\n\n    /**\n     * processImportDataAsCsv\n     */\n    protected function processImportDataAsCsv($filePath, $matches, $options)\n    {\n        // Parse options\n        $defaultOptions = [\n            'firstRowTitles' => true,\n            'delimiter' => null,\n            'enclosure' => null,\n            'escape' => null,\n            'encoding' => null\n        ];\n\n        $options = array_merge($defaultOptions, $options);\n\n        // Read CSV\n        $reader = CsvReader::createFromPath($filePath);\n\n        if ($options['delimiter'] !== null) {\n            $reader->setDelimiter($options['delimiter']);\n        }\n\n        if ($options['enclosure'] !== null) {\n            $reader->setEnclosure($options['enclosure']);\n        }\n\n        if ($options['escape'] !== null) {\n            $reader->setEscape($options['escape']);\n        }\n\n        if (\n            $options['encoding'] !== null &&\n            $reader->supportsStreamFilterOnRead()\n        ) {\n            $reader->addStreamFilter(sprintf(\n                '%s%s:%s',\n                TranscodeFilter::FILTER_NAME,\n                strtolower($options['encoding']),\n                'utf-8'\n            ));\n        }\n\n        // Create reader statement\n        $stmt = (new CsvStatement)\n            ->where(function (array $row) {\n                // Filter out empty rows\n                return count($row) > 1 || reset($row) !== null;\n            })\n        ;\n\n        if ($options['firstRowTitles']) {\n            $stmt = $stmt->offset(1);\n        }\n\n        $result = [];\n        $contents = $stmt->process($reader);\n\n        foreach ($contents as $row) {\n            $result[] = $this->processCsvImportRow($row, $matches);\n        }\n\n        return $result;\n    }\n\n    /**\n     * processCsvImportRow converts a single row of CSV data to the column map\n     * @return array\n     */\n    protected function processCsvImportRow($rowData, $matches)\n    {\n        $newRow = [];\n\n        foreach ($matches as $columnIndex => $dbNames) {\n            $value = array_get($rowData, $columnIndex);\n            foreach ((array) $dbNames as $dbName) {\n                $newRow[$dbName] = $value;\n            }\n        }\n\n        return $newRow;\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/importmodel/DecodesJson.php",
    "content": "<?php namespace Backend\\Models\\ImportModel;\n\nuse File;\n\n/**\n * DecodesJson format for export\n */\ntrait DecodesJson\n{\n    /**\n     * decodeArrayValueForJson\n     */\n    protected function decodeArrayValueForJson($value, $delimiter = '|')\n    {\n        if (is_array($value)) {\n            return $value;\n        }\n\n        return $this->decodeArrayValueForCsv($value, $delimiter);\n    }\n\n    /**\n     * processImportDataAsJson\n     */\n    protected function processImportDataAsJson($filePath, $matches, $options)\n    {\n        // Parse options\n        $options = array_merge([\n            'customJson' => false,\n        ], $options);\n\n        $jsonFile = File::get($filePath);\n        $contents = json_decode($jsonFile, true);\n\n        $result = [];\n\n        // Raw output\n        if ($options['customJson']) {\n            $result = $contents;\n        }\n        // Compiled output\n        else {\n            foreach ($contents as $row) {\n                $result[] = $this->processJsonImportRow($row, $matches);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * processJsonImportRow converts a single row of JSON data to the column map\n     * @return array\n     */\n    protected function processJsonImportRow($rowData, $matches)\n    {\n        // Only JSON can do this\n        if ($matches === null) {\n            return $rowData;\n        }\n\n        $newRow = [];\n        $rowIndexes = array_keys($rowData);\n\n        foreach ($matches as $columnIndex => $dbNames) {\n            $columnName = array_get($rowIndexes, $columnIndex);\n            $value = array_get($rowData, $columnName);\n            foreach ((array) $dbNames as $dbName) {\n                $newRow[$dbName] = $value;\n            }\n        }\n\n        return $newRow;\n    }\n}\n"
  },
  {
    "path": "modules/backend/models/preference/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    fields:\n\n        locale:\n            tab: Region\n            label: Locale\n            comment: Select your desired locale for language use.\n            type: dropdown\n            span: left\n\n        timezone:\n            tab: Region\n            label: Timezone\n            comment: Adjust displayed dates to this timezone.\n            type: dropdown\n            span: left\n\n        editor_preview:\n            type: partial\n            tab: Code Editor\n            path: field_editor_preview\n\n        editor_theme:\n            label: Color Scheme\n            tab: Code Editor\n            span: auto\n            type: dropdown\n\n        editor_word_wrap:\n            label: Word Wrap\n            tab: Code Editor\n            type: dropdown\n            span: auto\n            options:\n                off: \"Off\"\n                40: 40 Characters\n                80: 80 Characters\n                fluid: Fluid\n\n        editor_font_size:\n            label: Font Size\n            tab: Code Editor\n            span: auto\n            type: dropdown\n            options:\n                11: 11px\n                12: 12px\n                13: 13px\n                14: 14px\n                15: 15px\n                16: 16px\n\n        editor_tab_size:\n            label: Tab Size\n            tab: Code Editor\n            span: auto\n            type: dropdown\n            options:\n                2: 2\n                3: 3\n                4: 4\n                5: 5\n                6: 6\n                7: 7\n                8: 8\n\n        editor_code_folding:\n            label: Code Folding\n            tab: Code Editor\n            type: dropdown\n            span: auto\n            options:\n                manual: \"Off\"\n                markbegin: Mark begin\n                markbeginend: Mark begin and end\n\n        editor_autocompletion:\n            label: Autocompletion\n            tab: Code Editor\n            type: dropdown\n            span: auto\n            options:\n                manual: \"Off\"\n                basic: Basic Autocompletion (Ctrl + Space)\n                live: Live Autocompletion\n\n        editor_use_emmet:\n            label: Use Emmet abbreviations\n            tab: Code Editor\n            type: checkbox\n            span: auto\n\n        editor_show_gutter:\n            label: Show gutter\n            tab: Code Editor\n            type: checkbox\n            span: auto\n\n        editor_highlight_active_line:\n            label: Highlight active line\n            tab: Code Editor\n            type: checkbox\n            span: auto\n\n        editor_auto_closing:\n            label: Automatically close tags\n            tab: Code Editor\n            type: checkbox\n            span: auto\n\n        editor_use_hard_tabs:\n            label: Indent using tabs\n            tab: Code Editor\n            type: checkbox\n            span: auto\n\n        editor_display_indent_guides:\n            label: Show indent guides\n            tab: Code Editor\n            type: checkbox\n            span: auto\n\n        editor_show_invisibles:\n            label: Show invisible characters\n            tab: Code Editor\n            type: checkbox\n            span: auto\n\n        editor_show_print_margin:\n            label: Show print margin\n            tab: Code Editor\n            type: checkbox\n            span: auto\n"
  },
  {
    "path": "modules/backend/models/user/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n\n    first_name:\n        label: backend::lang.user.first_name\n        searchable: true\n        invisible: true\n\n    last_name:\n        label: backend::lang.user.last_name\n        searchable: true\n        invisible: true\n\n    full_name:\n        label: backend::lang.user.full_name\n        select: concat(first_name, ' ', last_name)\n        searchable: true\n        invisible: true\n\n    login:\n        label: Username\n        searchable: true\n        width: 15%\n\n    email:\n        label: backend::lang.user.email\n        searchable: true\n\n    groups:\n        label: backend::lang.user.groups\n        relation: groups\n        select: name\n        sortable: false\n\n    role:\n        label: backend::lang.user.role.name\n        relation: role\n        select: name\n        sortable: true\n        searchable: true\n\n    last_login:\n        label: backend::lang.user.last_login\n        searchable: true\n        type: datetime\n\n    created_at:\n        label: backend::lang.user.created_at\n        searchable: true\n        invisible: true\n        type: datetime\n\n    updated_at:\n        label: backend::lang.user.updated_at\n        searchable: true\n        invisible: true\n        type: datetime\n\n    deleted_at:\n        label: backend::lang.user.deleted_at\n        searchable: true\n        invisible: true\n        type: datetime\n\n    is_activated:\n        label: backend::lang.user.activated\n        invisible: true\n        type: switch\n\n    is_superuser:\n        label: backend::lang.user.superuser\n        invisible: true\n        type: switch\n"
  },
  {
    "path": "modules/backend/models/user/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    defaultTab: backend::lang.user.account\n\n    fields:\n        login:\n            span: left\n            label: Username\n\n        email:\n            span: right\n            type: email\n            label: backend::lang.user.email\n\n        send_invite:\n            context: create\n            type: checkbox\n            label: backend::lang.user.send_invite\n            comment: backend::lang.user.send_invite_comment\n            default: true\n\n        first_name:\n            span: left\n            label: backend::lang.user.first_name\n\n        last_name:\n            span: right\n            label: backend::lang.user.last_name\n\n        password:\n            type: password\n            span: left\n            label: backend::lang.user.password\n\n        password_confirmation:\n            type: password\n            span: right\n            label: backend::lang.user.password_confirmation\n\n        role:\n            context: [create, update]\n            label: backend::lang.user.role_field\n            commentAbove: backend::lang.user.role_comment\n            type: radio\n            permissions: admins.manage\n\n        groups:\n            label: backend::lang.user.groups\n            commentAbove: backend::lang.user.groups_comment\n            type: checkboxlist\n            tab: backend::lang.user.groups\n            permissions: admins.manage\n\n        permissions:\n            context: [create, update]\n            tab: backend::lang.user.permissions\n            type: Backend\\FormWidgets\\PermissionEditor\n            permissions: admins.roles\n            trigger:\n                action: disable\n                field: is_superuser\n                condition: checked\n\nsecondaryTabs:\n    fields:\n        avatar:\n            label: backend::lang.user.avatar\n            type: fileupload\n            mode: image\n            imageHeight: 250\n            imageWidth: 250\n"
  },
  {
    "path": "modules/backend/models/user/scopes.yaml",
    "content": "# ===================================\n# Filter Scope Definitions\n# ===================================\n\nscopes:\n\n    is_superuser:\n        label: backend::lang.user.superuser\n        type: switch\n        conditions:\n            - is_superuser = false\n            - is_superuser = true\n\n    last_login:\n        label: backend::lang.user.last_login\n        type: daterange\n        conditions: last_login >= ':after' AND last_login <= ':before'\n\n    role_id:\n        label: backend::lang.user.role.name\n        modelClass: Backend\\Models\\UserRole\n        conditions: role_id in (:filtered)\n        nameFrom: name\n\n    show_deleted:\n        label: backend::lang.user.show_deleted\n        type: checkbox\n        modelClass: Backend\\Models\\User\n        scope: withTrashed\n        default: 0\n        permissions: admins.manage.delete\n"
  },
  {
    "path": "modules/backend/models/usergroup/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    name:\n        label: backend::lang.user.group.name_field\n        searchable: true\n\n    code:\n        label: backend::lang.user.group.code_field\n        searchable: true\n        invisible: true\n\n    description:\n        label: backend::lang.user.group.description_field\n        searchable: true\n\n    users_count:\n        label: backend::lang.user.group.users_count\n        relation: users\n        relationCount: true\n        type: number\n        sortable: false\n\n    created_at:\n        label: backend::lang.user.created_at\n        searchable: true\n        invisible: true\n        type: datetime\n\n    updated_at:\n        label: backend::lang.user.updated_at\n        searchable: true\n        invisible: true\n        type: datetime\n"
  },
  {
    "path": "modules/backend/models/usergroup/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    defaultTab: backend::lang.user.group.name\n\n    fields:\n        is_new_user_default:\n            label: backend::lang.user.group.is_new_user_default_field_label\n            comment: backend::lang.user.group.is_new_user_default_field_comment\n            type: switch\n\n        name:\n            label: backend::lang.user.group.name_field\n            comment: backend::lang.user.group.name_comment\n            span: auto\n\n        code:\n            label: backend::lang.user.group.code_field\n            comment: backend::lang.user.group.code_comment\n            span: auto\n\n        description:\n            label: backend::lang.user.group.description_field\n            type: textarea\n            size: tiny\n\n        users:\n            type: partial\n            path: relation_users\n            tab: backend::lang.user.group.users_count\n"
  },
  {
    "path": "modules/backend/models/userrole/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    name:\n        label: backend::lang.user.role.name_field\n        searchable: true\n\n    code:\n        label: backend::lang.user.role.code_field\n        searchable: true\n        invisible: true\n\n    description:\n        label: backend::lang.user.role.description_field\n        searchable: true\n\n    users_count:\n        label: backend::lang.user.role.users_count\n        relation: users\n        relationCount: true\n        type: number\n        sortable: false\n\n    created_at:\n        label: backend::lang.user.created_at\n        searchable: true\n        invisible: true\n        type: datetime\n\n    updated_at:\n        label: backend::lang.user.updated_at\n        searchable: true\n        invisible: true\n        type: datetime\n\n    color_background:\n        shortLabel: ''\n        cssClass: text-end\n        type: colorpicker\n        sortable: false\n"
  },
  {
    "path": "modules/backend/models/userrole/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    stretch: true\n    defaultTab: backend::lang.user.role.name\n    fields:\n        _view_as:\n            type: partial\n            path: ~/modules/backend/controllers/userroles/_action_view_as.php\n            context: update\n\n        name:\n            label: backend::lang.user.role.name_field\n            comment: backend::lang.user.role.name_comment\n            span: auto\n\n        code:\n            label: backend::lang.user.role.code_field\n            comment: backend::lang.user.role.code_comment\n            span: auto\n\n        description:\n            label: backend::lang.user.role.description_field\n            type: textarea\n            size: tiny\n\n        color_background:\n            label: Background Color\n            type: colorpicker\n\n        permissions:\n            tab: backend::lang.user.permissions\n            type: Backend\\FormWidgets\\PermissionEditor\n            mode: checkbox\n"
  },
  {
    "path": "modules/backend/reportwidgets/Welcome.php",
    "content": "<?php namespace Backend\\ReportWidgets;\n\nuse BackendAuth;\nuse Backend\\Models\\AccessLog;\nuse Backend\\Classes\\ReportWidgetBase;\nuse Backend\\Models\\BrandSetting;\nuse Exception;\n\n/**\n * User welcome report widget.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Welcome extends ReportWidgetBase\n{\n    /**\n     * @var string A unique alias to identify this widget.\n     */\n    protected $defaultAlias = 'welcome';\n\n    /**\n     * Renders the widget.\n     */\n    public function render()\n    {\n        try {\n            $this->loadData();\n        }\n        catch (Exception $ex) {\n            $this->vars['error'] = $ex->getMessage();\n        }\n\n        return $this->makePartial('widget');\n    }\n\n    public function defineProperties()\n    {\n        return [\n            'title' => [\n                'title' => \"Widget title\",\n                'default' => \"Welcome\",\n                'type' => 'string',\n                'validationPattern' => '^.+$',\n                'validationMessage' => \"The Widget Title is required.\",\n            ]\n        ];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/welcome.css');\n    }\n\n    protected function loadData()\n    {\n        $this->vars['user'] = $user = BackendAuth::getUser();\n        $this->vars['appName'] = BrandSetting::get('app_name');\n        $this->vars['lastSeen'] = AccessLog::getRecent($user);\n    }\n}\n"
  },
  {
    "path": "modules/backend/reportwidgets/welcome/assets/css/welcome.css",
    "content": ".widget-welcome .welcome-container {\n    margin-top: -15px;\n    overflow: hidden; /* clearfix */\n}\n\n.widget-welcome .welcome-message {\n    margin-left: 220px;\n    color: #7e8c8d;\n    margin-top: 15px;\n}\n.widget-welcome .welcome-message strong {\n    color: var(--oc-primary-color);\n}\n\n.widget-welcome .welcome-logo {\n    background: var(--bs-body-bg);\n    width: 200px;\n    padding: 15px;\n    float: left;\n}\n\n.widget-welcome .welcome-logo .oc-logo {\n    height: 80px;\n}\n\n@media (max-width: 468px) {\n    .widget-welcome .welcome-logo {\n        float: none;\n    }\n    .widget-welcome .welcome-message {\n        margin-left: 0;\n    }\n}\n"
  },
  {
    "path": "modules/backend/reportwidgets/welcome/partials/_widget.php",
    "content": "<div class=\"report-widget widget-welcome\">\n    <h3><?= e(__($this->property('title'))) ?></h3>\n\n    <?php if (!isset($error)): ?>\n        <div class=\"welcome-container\">\n            <div class=\"welcome-logo\">\n                <div class=\"oc-logo\"></div>\n            </div>\n            <div class=\"welcome-message\">\n                <?php if ($lastSeen): ?>\n                    <p>\n                        <?= e(__(\"Welcome back to :app, :name.\", ['app'=>$appName, 'name'=>$user->first_name])) ?>\n                        <?= e(__(\"Your last sign in was\")) ?>\n                    </p>\n                    <p>\n                        <strong><?= Backend::dateTime($lastSeen->created_at, ['formatAlias' => 'dateTimeLongMin']) ?></strong>\n                    </p>\n                    <?php if (BackendAuth::userHasAccess('utilities.logs')): ?>\n                        <p>\n                            <a href=\"<?= Backend::url('backend/accesslogs') ?>\"><?= e(__(\"View Access Logs\")) ?></a>\n                        </p>\n                    <?php endif ?>\n                <?php else: ?>\n                    <p>\n                        <?= e(__(\"Welcome to :app, :name.\", ['app'=>$appName, 'name'=>$user->first_name])) ?>\n                    </p>\n                    <p>\n                        <?= e(__(\"This is the first time you have signed in.\")) ?>\n                    </p>\n                    <p>\n                        <?= e(__(\"Have a great day!\")) ?>\n                    </p>\n                <?php endif ?>\n            </div>\n        </div>\n    <?php else: ?>\n        <div class=\"callout callout-warning\">\n            <div class=\"content\"><?= e($error) ?></div>\n        </div>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/routes.php",
    "content": "<?php\n\n/**\n * Register Backend routes before all user routes.\n */\nApp::before(function ($request) {\n    /**\n     * @event backend.beforeRoute\n     * Fires before backend routes get added\n     *\n     * Example usage:\n     *\n     *     Event::listen('backend.beforeRoute', function () {\n     *         // your code here\n     *     });\n     *\n     */\n    Event::fire('backend.beforeRoute');\n\n    /*\n     * Other pages\n     */\n    Route::group([\n            'middleware' => Config::get('backend.middleware_group', 'web'),\n            'prefix' => Backend::uri()\n        ], function () {\n            Route::any('{slug?}', [\\Backend\\Classes\\BackendController::class, 'run'])\n                ->where('slug', '(.*)?')\n            ;\n        })\n    ;\n\n    /*\n     * Entry point\n     */\n    Route::any(Backend::uri(), [\\Backend\\Classes\\BackendController::class, 'run'])\n        ->middleware(Config::get('backend.middleware_group', 'web'))\n    ;\n\n    /**\n     * @event backend.route\n     * Fires after backend routes have been added\n     *\n     * Example usage:\n     *\n     *     Event::listen('backend.route', function () {\n     *         // your code here\n     *     });\n     *\n     */\n    Event::fire('backend.route');\n});\n"
  },
  {
    "path": "modules/backend/skins/Standard.php",
    "content": "<?php namespace Backend\\Skins;\n\nuse File;\nuse Backend\\Classes\\Skin;\nuse October\\Rain\\Router\\Helper as RouterHelper;\n\n/**\n * Standard skin information file.\n *\n * This skin uses the default paths always, there is no lookup required.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\n\nclass Standard extends Skin\n{\n\n    /**\n     * @inheritDoc\n     */\n    public function __construct()\n    {\n        $this->skinPath = $this->defaultSkinPath = base_path() . '/modules/backend';\n        $this->publicSkinPath = $this->defaultPublicSkinPath = File::localToPublic($this->skinPath);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function skinDetails()\n    {\n        return [\n            'name' => 'Default Skin'\n        ];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getPath($path = null, $isPublic = false)\n    {\n        $path = RouterHelper::normalizeUrl($path);\n\n        return $isPublic\n            ? $this->defaultPublicSkinPath . $path\n            : $this->defaultSkinPath . $path;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getLayoutPaths()\n    {\n        return [$this->skinPath.'/layouts'];\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/classes/NavigationManagerTest.php",
    "content": "<?php\n\nuse Backend\\Classes\\NavigationManager;\nuse October\\Rain\\Exception\\SystemException;\n\nclass NavigationManagerTest extends TestCase\n{\n    protected $instance;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->instance = NavigationManager::instance();\n        $this->instance->registerMenuItems('October.TestCase', []);\n    }\n\n    public function testRegisterMenuItems()\n    {\n        $manager = $this->instance;\n        $items = $manager->listMainMenuItems();\n        $this->assertArrayNotHasKey('OCTOBER.TEST.DASHBOARD', $items);\n\n        $manager->registerMenuItems('October.Test', [\n            'dashboard' => [\n                'label' => 'Dashboard',\n                'icon' => 'icon-dashboard',\n                'url' => 'http://dashboard.tld',\n                'order' => 100\n            ]\n        ]);\n\n        $items = $manager->listMainMenuItems();\n        $this->assertArrayHasKey('OCTOBER.TEST.DASHBOARD', $items);\n\n        $item = $items['OCTOBER.TEST.DASHBOARD'];\n        $itemArr = $item->toArray();\n        $this->assertArrayHasKey('code', $itemArr);\n        $this->assertArrayHasKey('label', $itemArr);\n        $this->assertArrayHasKey('icon', $itemArr);\n        $this->assertArrayHasKey('url', $itemArr);\n        $this->assertArrayHasKey('owner', $itemArr);\n        $this->assertArrayHasKey('order', $itemArr);\n        $this->assertArrayHasKey('permissions', $itemArr);\n        $this->assertArrayHasKey('sideMenu', $itemArr);\n\n        $this->assertEquals('dashboard', $item->code);\n        $this->assertEquals('Dashboard', $item->label);\n        $this->assertEquals('icon-dashboard', $item->icon);\n        $this->assertEquals('http://dashboard.tld', $item->url);\n        $this->assertEquals(100, $item->order);\n        $this->assertEquals('October.Test', $item->owner);\n    }\n\n    public function testListMainMenuItems()\n    {\n        $manager = $this->instance;\n        $items = $manager->listMainMenuItems();\n\n        $this->assertArrayHasKey('OCTOBER.TESTER.BLOG', $items);\n    }\n\n    public function testListSideMenuItems()\n    {\n        $manager = $this->instance;\n\n        $items = $manager->listSideMenuItems();\n        $this->assertEmpty($items);\n\n        $manager->setContext('October.Tester', 'blog');\n\n        $items = $manager->listSideMenuItems();\n        $this->assertIsArray($items);\n        $this->assertArrayHasKey('posts', $items);\n        $this->assertArrayHasKey('categories', $items);\n\n        $item = $items['posts'];\n        $otherItem = $items['categories'];\n        $this->assertIsObject($item);\n        $this->assertArrayHasKey('code', $item);\n        $this->assertArrayHasKey('owner', $item);\n        $this->assertEquals('posts', $item->code);\n        $this->assertEquals('October.Tester', $item->owner);\n\n        $this->assertArrayHasKey('permissions', $item);\n        $this->assertIsArray($item->permissions);\n        $this->assertCount(1, $item->permissions);\n\n        $this->assertArrayHasKey('order', $item);\n        $this->assertArrayHasKey('order', $otherItem);\n        $this->assertEquals(100, $item->order);\n        $this->assertEquals(200, $otherItem->order);\n    }\n\n    public function testAddMainMenuItems()\n    {\n        $manager = $this->instance;\n        $manager->addMainMenuItems('October.Tester', [\n            'print' => [\n                'label' => 'Print',\n                'icon' => 'icon-print',\n                'url' => 'javascript:window.print()'\n            ]\n        ]);\n\n        $items = $manager->listMainMenuItems();\n\n        $this->assertIsArray($items);\n        $this->assertArrayHasKey('OCTOBER.TESTER.PRINT', $items);\n\n        $item = $items['OCTOBER.TESTER.PRINT'];\n        $this->assertEquals('print', $item->code);\n        $this->assertEquals('Print', $item->label);\n        $this->assertEquals('icon-print', $item->icon);\n        $this->assertEquals('javascript:window.print()', $item->url);\n        $this->assertEquals(500, $item->order);\n        $this->assertEquals('October.Tester', $item->owner);\n    }\n\n    public function testRemoveMainMenuItem()\n    {\n        $manager = $this->instance;\n        $manager->addMainMenuItems('October.Tester', [\n            'close' => [\n                'label' => 'Close',\n                'icon' => 'icon-times',\n                'url' => 'javascript:window.close()'\n            ]\n        ]);\n\n        $items = $manager->listMainMenuItems();\n        $this->assertArrayHasKey('OCTOBER.TESTER.CLOSE', $items);\n\n        $manager->removeMainMenuItem('October.Tester', 'close');\n\n        $items = $manager->listMainMenuItems();\n        $this->assertArrayNotHasKey('OCTOBER.TESTER.CLOSE', $items);\n    }\n\n    public function testAddSideMenuItems()\n    {\n        $manager = $this->instance;\n\n        $manager->addSideMenuItems('October.Tester', 'blog', [\n            'foo' => [\n                'label' => 'Bar',\n                'icon' => 'icon-derp',\n                'url' => 'http://google.com',\n                'permissions' => [\n                    'october.tester.access_foo',\n                    'october.tester.access_bar'\n                ]\n            ]\n        ]);\n\n        $manager->setContext('October.Tester', 'blog');\n        $items = $manager->listSideMenuItems();\n\n        $this->assertIsArray($items);\n        $this->assertArrayHasKey('foo', $items);\n\n        $item = $items['foo'];\n        $this->assertIsObject($item);\n        $this->assertArrayHasKey('code', $item);\n        $this->assertArrayHasKey('owner', $item);\n        $this->assertArrayHasKey('order', $item);\n\n        $this->assertEquals(-1, $item->order);\n        $this->assertEquals('foo', $item->code);\n        $this->assertEquals('October.Tester', $item->owner);\n\n        $this->assertArrayHasKey('permissions', $item);\n        $this->assertIsArray($item->permissions);\n        $this->assertCount(2, $item->permissions);\n        $this->assertContains('october.tester.access_foo', $item->permissions);\n        $this->assertContains('october.tester.access_bar', $item->permissions);\n    }\n\n    public function testRemoveSideMenuItem()\n    {\n        $manager = $this->instance;\n        $manager->addSideMenuItems('October.Tester', 'blog', [\n            'bar' => [\n                'label' => 'Bar',\n                'icon' => 'icon-bars',\n                'url' => 'http://yahoo.com'\n            ]\n        ]);\n\n        $manager->setContext('October.Tester', 'blog');\n\n        $items = $manager->listSideMenuItems();\n        $this->assertArrayHasKey('bar', $items);\n\n        $manager->removeSideMenuItem('October.Tester', 'blog', 'bar');\n\n        $items = $manager->listSideMenuItems();\n        $this->assertArrayNotHasKey('bar', $items);\n    }\n\n    public function testCannotRemovePermissionsBeforeLoaded()\n    {\n        $this->expectException(SystemException::class);\n        $this->expectExceptionMessage('Unable to remove navigation items before they are loaded.');\n\n        $manager = new NavigationManager;\n        $manager->removeMainMenuItem('October.Tester', 'blog');\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/classes/RoleManagerTest.php",
    "content": "<?php\n\nuse Backend\\Classes\\RoleManager;\nuse October\\Rain\\Exception\\SystemException;\n\n/**\n * RoleManagerTest\n */\nclass RoleManagerTest extends TestCase\n{\n    protected $instance;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->instance = RoleManager::instance();\n        $this->instance->registerPermissions('October.TestCase', [\n            'test.permission_one' => [\n                'label' => 'Test Permission 1',\n                'tab' => 'Test',\n                'order' => 200\n            ],\n            'test.permission_two' => [\n                'label' => 'Test Permission 2',\n                'tab' => 'Test',\n                'order' => 300\n            ]\n        ]);\n    }\n\n    public function testListPermissions()\n    {\n        $manager = $this->instance;\n        $permissions = $manager->listPermissions();\n        $permissionCodes = collect($permissions)->pluck('code')->toArray();\n        $this->assertContains('test.permission_one', $permissionCodes);\n        $this->assertContains('test.permission_two', $permissionCodes);\n    }\n\n    public function testRegisterPermissions()\n    {\n        $manager = $this->instance;\n        $manager->registerPermissions('October.TestCase', [\n            'test.permission_three' => [\n                'label' => 'Test Permission 3',\n                'tab' => 'Test',\n                'order' => 100\n            ]\n        ]);\n\n        $permissions = $manager->listPermissions();\n        $permissionCodes = collect($permissions)->pluck('code')->toArray();\n\n        $this->assertContains('test.permission_one', $permissionCodes);\n        $this->assertContains('test.permission_two', $permissionCodes);\n        $this->assertContains('test.permission_three', $permissionCodes);\n\n        // Continue\n        $manager->registerPermissions('October.TestCase', [\n            'test.permission_three' => [\n                'label' => 'Test Permission 3',\n                'tab' => 'Test',\n                'order' => 100\n            ]\n        ]);\n\n        $manager->registerPermissions('October.TestCase', [\n            'test.permission_four' => [\n                'label' => 'Test Permission 4',\n                'tab' => 'Test',\n                'order' => 400\n            ]\n        ]);\n\n        $permissions = $manager->listPermissions();\n        $permissionCodes = collect($permissions)->pluck('code')->toArray();\n\n        $this->assertContains('test.permission_one', $permissionCodes);\n        $this->assertContains('test.permission_two', $permissionCodes);\n        $this->assertContains('test.permission_three', $permissionCodes);\n        $this->assertContains('test.permission_four', $permissionCodes);\n    }\n\n    public function testRegisterAdditionalTab()\n    {\n        $manager = $this->instance;\n\n        $manager->registerPermissions('October.TestCase', [\n            'test.permission_three' => [\n                'label' => 'Test Permission 3',\n                'tab' => 'Test 2',\n                'order' => 100\n            ]\n        ]);\n\n        $manager->registerCallback(function ($manager) {\n            $manager->registerPermissions('October.TestCase', [\n                'test.permission_four' => [\n                    'label' => 'Test Permission 4',\n                    'tab' => 'Test 2',\n                    'order' => 400\n                ]\n            ]);\n        });\n\n        $tabs = $this->listTabbedPermissions($manager->listPermissions());\n        $this->assertArrayHasKey('Test', $tabs);\n        $this->assertArrayHasKey('Test 2', $tabs);\n\n        $tabs1 = collect($tabs['Test'])->pluck('code')->toArray();\n        $this->assertContains('test.permission_one', $tabs1);\n        $this->assertContains('test.permission_two', $tabs1);\n\n        $tabs2 = collect($tabs['Test 2'])->pluck('code')->toArray();\n        $this->assertContains('test.permission_three', $tabs2);\n        $this->assertContains('test.permission_four', $tabs2);\n    }\n\n    public function testRemovePermission()\n    {\n        $manager = $this->instance;\n        $manager->removePermission('October.TestCase', 'test.permission_one');\n\n        $permissions = $manager->listPermissions();\n        $permissionCodes = collect($permissions)->pluck('code')->toArray();\n        $this->assertNotContains('test.permission_one', $permissionCodes);\n    }\n\n    public function testCannotRemovePermissionsBeforeLoaded()\n    {\n        $this->expectException(SystemException::class);\n        $this->expectExceptionMessage('Unable to remove permissions before they are loaded.');\n\n        $manager = new RoleManager;\n        $manager->removePermission('October.TestCase', 'test.permission_one');\n    }\n\n    protected function listTabbedPermissions($permissions)\n    {\n        $tabs = [];\n\n        foreach ($permissions as $permission) {\n            $tab = $permission->tab ?? 'backend::lang.form.undefined_tab';\n\n            if (!array_key_exists($tab, $tabs)) {\n                $tabs[$tab] = [];\n            }\n\n            $tabs[$tab][] = $permission;\n        }\n\n        return $tabs;\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/classes/WidgetManagerTest.php",
    "content": "<?php\n\nuse Backend\\Classes\\WidgetManager;\n\nclass WidgetManagerTest extends TestCase\n{\n    public function testListFormWidgets()\n    {\n        $manager = WidgetManager::instance();\n        $widgets = $manager->listFormWidgets();\n\n        $this->assertArrayHasKey('TestVendor\\Test\\FormWidgets\\Sample', $widgets);\n        $this->assertArrayHasKey('October\\Tester\\FormWidgets\\Preview', $widgets);\n    }\n\n    public function testIfWidgetsCanBeExtended()\n    {\n        $manager = WidgetManager::instance();\n        $manager->registerReportWidget(\\Acme\\Fake\\ReportWidget\\HelloWorld::class, [\n            'name' => 'Hello World Test',\n            'context' => 'dashboard'\n        ]);\n        $widgets = $manager->listReportWidgets();\n\n        $this->assertArrayHasKey(\\Acme\\Fake\\ReportWidget\\HelloWorld::class, $widgets);\n    }\n\n    public function testIfWidgetsCanBeRemoved()\n    {\n        $manager = WidgetManager::instance();\n        $manager->registerReportWidget(\\Acme\\Fake\\ReportWidget\\HelloWorld::class, [\n            'name' => 'Hello World Test',\n            'context' => 'dashboard'\n        ]);\n        $manager->registerReportWidget(\\Acme\\Fake\\ReportWidget\\ByeWorld::class, [\n            'name' => 'Hello World Bye',\n            'context' => 'dashboard'\n        ]);\n\n        $manager->removeReportWidget(\\Acme\\Fake\\ReportWidget\\ByeWorld::class);\n\n        $widgets = $manager->listReportWidgets();\n\n        $this->assertCount(1, $widgets);\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/database/ImportModelDbTest.php",
    "content": "<?php\n\nuse Backend\\Models\\ImportModel;\nuse System\\Models\\File as FileModel;\n\nclass ExampleDbImportModel extends ImportModel\n{\n    public $rules = [];\n\n    public function importData($results, $sessionKey = null)\n    {\n        return [];\n    }\n}\n\nclass ImportModelDbTest extends PluginTestCase\n{\n    public function testGetImportFilePath()\n    {\n        $model = new ExampleDbImportModel;\n        $sessionKey = uniqid('session_key', true);\n\n        $file1 = new FileModel;\n        $file1->is_public = false;\n        $file1->fromFile(base_path('modules/backend/tests/fixtures/reference/file1.txt'));\n        $file1->save();\n\n        $file2 = new FileModel;\n        $file2->is_public = false;\n        $file2->fromFile(base_path('modules/backend/tests/fixtures/reference/file2.txt'));\n        $file2->save();\n\n        $model->import_file()->add($file1, $sessionKey);\n        $model->import_file()->add($file2, $sessionKey);\n\n        $this->assertEquals(\n            $file2->getLocalPath(),\n            $model->getImportFilePath($sessionKey),\n            'ImportModel::getImportFilePath() should return the last uploaded file.'\n        );\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/fixtures/models/BackendUserFixture.php",
    "content": "<?php\n\nuse Backend\\Models\\User;\n\nclass BackendUserFixture extends User\n{\n    public function __construct(array $attributes = [])\n    {\n        parent::__construct($attributes);\n\n        $this->fill([\n            'first_name' => 'Test',\n            'last_name' => 'User',\n            'login' => 'testuser',\n            'email' => 'testuser@test.com',\n            'password' => '',\n            'activation_code' => null,\n            'persist_code' => null,\n            'reset_password_code' => null,\n            'permissions' => null,\n            'is_activated' => true,\n            'role_id' => null,\n            'activated_at' => null,\n            'last_login' => '2019-09-27 12:00:00',\n            'created_at' => '2019-09-27 12:00:00',\n            'updated_at' => '2019-09-27 12:00:00',\n            'deleted_at' => null,\n            'is_superuser' => false\n        ]);\n    }\n\n    public function asSuperUser()\n    {\n        $this->setAttribute('is_superuser', true);\n\n        return $this;\n    }\n\n    public function asDeletedUser()\n    {\n        $this->setAttribute('deleted_at', date('Y-m-d H:i:s'));\n\n        return $this;\n    }\n\n    public function withPermission($permission, bool $granted = true)\n    {\n        $currentPermissions = $this->getAttribute('permissions');\n\n        if (is_string($permission)) {\n            $permission = [\n                $permission => (int) $granted\n            ];\n        }\n\n        if (is_array($currentPermissions)) {\n            $this->setAttribute('permissions', array_replace($currentPermissions, $permission));\n        }\n        else {\n            $this->setAttribute('permissions', $permission);\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/fixtures/reference/file1.txt",
    "content": "File one contents\n"
  },
  {
    "path": "modules/backend/tests/fixtures/reference/file2.txt",
    "content": "FILE TWO CONTENTS\n"
  },
  {
    "path": "modules/backend/tests/models/ExportModelTest.php",
    "content": "<?php\n\nuse Backend\\Models\\ExportModel;\n\nif (!class_exists('Model')) {\n    class_alias('October\\Rain\\Database\\Model', 'Model');\n}\n\nclass ExportModelTest extends TestCase\n{\n    public function testEncodeArrayValue()\n    {\n        $model = new ExampleExportModel;\n        $data = ['foo', 'bar'];\n        $result = self::callProtectedMethod($model, 'encodeArrayValue', [$data]);\n        $this->assertEquals('foo|bar', $result);\n\n        $data = ['dps | heals | tank', 'paladin', 'berserker', 'gunner'];\n        $result = self::callProtectedMethod($model, 'encodeArrayValue', [$data]);\n        $this->assertEquals('dps \\| heals \\| tank|paladin|berserker|gunner', $result);\n\n        $data = ['art direction', 'roman empire', 'sci-fi'];\n        $result = self::callProtectedMethod($model, 'encodeArrayValue', [$data, '-']);\n        $this->assertEquals('art direction-roman empire-sci\\-fi', $result);\n    }\n\n    public function testDownloadCsv()\n    {\n        $model = new ExampleExportModel;\n        $csvName = 'myexport.csv';\n\n        $response = $model->exportDownload($csvName, [\n            'columns' => [\n                'foo' => 'title',\n                'bar' => 'title2'\n            ],\n            'file_format' => 'csv'\n        ]);\n\n        $request = new Illuminate\\Http\\Request;\n        $response->prepare($request);\n\n        $this->assertTrue($response->headers->has('Content-Type'), \"Response is missing the Content-Type header!\");\n        $this->assertTrue(\n            $response->headers->contains('Content-Type', 'text/csv; charset=utf-8'),\n            \"Content-Type should be either text/csv; charset=utf-8. Found: \" . $response->headers->get('Content-Type')\n        );\n\n        ob_start();\n        $response->send();\n        $output = ob_get_clean();\n\n        $this->assertEquals(\"\\xEF\\xBB\\xBFtitle,title2\\nbar,foo\\nbar2,foo2\\n\", $output, \"CSV is not right!\");\n\n        // Check file was deleted\n        $filePath = temp_path('export/'.$csvName);\n        $fileGotDeleted = !is_file($filePath);\n        $this->assertTrue($fileGotDeleted, \"Export CSV temp file wasn't deleted.\");\n        if (!$fileGotDeleted) {\n            unlink($filePath);\n        }\n    }\n}\n\nclass ExampleExportModel extends ExportModel\n{\n    public function exportData($columns, $sessionKey = null)\n    {\n        return [\n            [\n                'foo' => 'bar',\n                'bar' => 'foo',\n                'foobar' => 'Hello World!',\n            ],\n            [\n                'foo' => 'bar2',\n                'bar' => 'foo2',\n                'foobar' => 'Hello World2!',\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/models/ImportModelTest.php",
    "content": "<?php\n\nuse Backend\\Models\\ImportModel;\n\nif (!class_exists('Model')) {\n    class_alias('October\\Rain\\Database\\Model', 'Model');\n}\n\nclass ImportModelTest extends TestCase\n{\n    public function testDecodeArrayValue()\n    {\n        $model = new ExampleImportModel;\n        $data = 'foo|bar';\n        $result = self::callProtectedMethod($model, 'decodeArrayValue', [$data]);\n        $this->assertEquals(['foo', 'bar'], $result);\n\n        $data = 'dps \\| heals \\| tank|paladin|berserker|gunner';\n        $result = self::callProtectedMethod($model, 'decodeArrayValue', [$data]);\n        $this->assertEquals(['dps | heals | tank', 'paladin', 'berserker', 'gunner'], $result);\n\n        $data = 'art direction-roman empire-sci\\-fi';\n        $result = self::callProtectedMethod($model, 'decodeArrayValue', [$data, '-']);\n        $this->assertEquals(['art direction', 'roman empire', 'sci-fi'], $result);\n    }\n}\n\nclass ExampleImportModel extends ImportModel\n{\n    public $rules = [];\n\n    public function importData($results, $sessionKey = null)\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/traits/WidgetMakerTest.php",
    "content": "<?php\n\nuse Backend\\Classes\\Controller;\n\n/**\n * WidgetMakerTest\n */\nclass WidgetMakerTest extends TestCase\n{\n    /**\n     * testMakeWidget\n     */\n    public function testMakeWidget()\n    {\n        $manager = new ExampleTraitClass;\n\n        $widget = $manager->makeWidget(\\Backend\\Widgets\\Search::class);\n        $this->assertInstanceOf(\\Backend\\Widgets\\Search::class, $widget);\n        $this->assertInstanceOf(\\Backend\\Classes\\Controller::class, $widget->getController());\n\n        $config = ['test' => 'config'];\n        $widget = $manager->makeWidget(\\Backend\\Widgets\\Search::class, $config);\n        $this->assertInstanceOf(\\Backend\\Widgets\\Search::class, $widget);\n        $this->assertEquals('config', $widget->getConfig('test'));\n    }\n}\n\n/**\n * ExampleTraitClass\n */\nclass ExampleTraitClass\n{\n    use \\Backend\\Traits\\WidgetMaker;\n\n    public function __construct()\n    {\n        $this->controller = new Controller;\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/widgets/FilterWidgetTest.php",
    "content": "<?php\n\nuse Backend\\Classes\\WidgetManager;\nuse Backend\\Classes\\Controller;\nuse Backend\\Widgets\\Filter;\nuse Backend\\Models\\User;\n\nrequire_once __DIR__.'/../fixtures/models/BackendUserFixture.php';\n\nclass FilterWidgetTest extends PluginTestCase\n{\n    /**\n     * setUp test case\n     */\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        WidgetManager::instance()->registerFilterWidgets(function ($manager) {\n            $manager->registerFilterWidget(\\Backend\\FilterWidgets\\Text::class, 'text');\n        });\n    }\n\n    public function testFilterWidgetsAreRegistered()\n    {\n        $widgetManager = WidgetManager::instance();\n\n        $widgetClass = $widgetManager->resolveFilterWidget('text');\n        $this->assertTrue(class_exists($widgetClass));\n    }\n\n    public function testRestrictedScopeWithUserWithNoPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user);\n\n        $filter = $this->restrictedFilterFixture();\n        $filter->render();\n\n        $this->assertNotNull($filter->getScope('id'));\n\n        // Expect an exception\n        $this->expectException(ApplicationException::class);\n        $this->expectExceptionMessage('No definition for scope [email] found');\n        $filter->getScope('email');\n    }\n\n    public function testRestrictedScopeWithUserWithWrongPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.wrong_permission', true));\n\n        $filter = $this->restrictedFilterFixture();\n        $filter->render();\n\n        $this->assertNotNull($filter->getScope('id'));\n\n        // Expect an exception\n        $this->expectException(ApplicationException::class);\n        $this->expectExceptionMessage('No definition for scope [email] found');\n        $filter->getScope('email');\n    }\n\n    public function testRestrictedScopeWithUserWithRightPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.access_field', true));\n\n        $filter = $this->restrictedFilterFixture();\n        $filter->render();\n\n        $this->assertNotNull($filter->getScope('id'));\n        $this->assertNotNull($filter->getScope('email'));\n    }\n\n    public function testRestrictedScopeWithUserWithRightWildcardPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.access_field', true));\n\n        $filter = $this->makeFilterWidget([\n            'model' => new User,\n            'arrayName' => 'array',\n            'scopes' => [\n                'id' => [\n                    'type' => 'text',\n                    'label' => 'ID'\n                ],\n                'email' => [\n                    'type' => 'text',\n                    'label' => 'Email',\n                    'permission' => 'test.*'\n                ]\n            ]\n        ]);\n        $filter->render();\n\n        $this->assertNotNull($filter->getScope('id'));\n        $this->assertNotNull($filter->getScope('email'));\n    }\n\n    public function testRestrictedScopeWithSuperuser()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->asSuperUser());\n\n        $filter = $this->restrictedFilterFixture();\n        $filter->render();\n\n        $this->assertNotNull($filter->getScope('id'));\n        $this->assertNotNull($filter->getScope('email'));\n    }\n\n    public function testRestrictedScopeSinglePermissionWithUserWithWrongPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.wrong_permission', true));\n\n        $filter = $this->restrictedFilterFixture(true);\n        $filter->render();\n\n        $this->assertNotNull($filter->getScope('id'));\n\n        // Expect an exception\n        $this->expectException(ApplicationException::class);\n        $this->expectExceptionMessage('No definition for scope [email] found');\n        $filter->getScope('email');\n    }\n\n    public function testRestrictedScopeSinglePermissionWithUserWithRightPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.access_field', true));\n\n        $filter = $this->restrictedFilterFixture(true);\n        $filter->render();\n\n        $this->assertNotNull($filter->getScope('id'));\n        $this->assertNotNull($filter->getScope('email'));\n    }\n\n    protected function restrictedFilterFixture(bool $singlePermission = false)\n    {\n        return $this->makeFilterWidget([\n            'model' => new User,\n            'arrayName' => 'array',\n            'scopes' => [\n                'id' => [\n                    'type' => 'text',\n                    'label' => 'ID'\n                ],\n                'email' => [\n                    'type' => 'text',\n                    'label' => 'Email',\n                    'permissions' => ($singlePermission) ? 'test.access_field' : [\n                        'test.access_field'\n                    ]\n                ]\n            ]\n        ]);\n    }\n\n    protected function makeFilterWidget($config)\n    {\n        return new Filter(new Controller, $config);\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/widgets/FormWidgetTest.php",
    "content": "<?php\n\nuse Backend\\Widgets\\Form;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nrequire_once __DIR__.'/../fixtures/models/BackendUserFixture.php';\n\nclass FormTestModel extends Model\n{\n\n}\n\nclass FormWidgetTest extends PluginTestCase\n{\n    public function testCleanSaveDataInternal()\n    {\n        $form = new Form(null, [\n            'model' => new FormTestModel,\n            'fields' => [\n                'name' => [\n                    'label' => 'Author Name',\n                    'commentAbove' => 'Text field, inside a popup.',\n                ],\n                'post[name]' => [\n                    'comment' => 'This Comment belongs to the Post selected above.',\n                    'disabled' => true\n                ]\n            ]\n        ]);\n\n        self::callProtectedMethod($form, 'defineFormFields');\n\n        $data = self::callProtectedMethod($form, 'cleanSaveDataInternal', [[\n            'name' => 'First Level',\n            'post' => ['name' => 'Second Level']\n        ]]);\n\n        $this->assertEquals([\n            'name' => 'First Level',\n            'post' => []\n        ], $data);\n\n       $data = self::callProtectedMethod($form, 'cleanSaveDataInternal', [[\n            'name' => 'First Level'\n        ]]);\n\n        $this->assertEquals([\n            'name' => 'First Level'\n        ], $data);\n    }\n\n    public function testRestrictedFieldWithUserWithNoPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user);\n\n        $form = $this->restrictedFormFixture();\n\n        $form->render();\n        $this->assertNull($form->getField('testRestricted'));\n    }\n\n    public function testRestrictedFieldWithUserWithWrongPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.wrong_permission', true));\n\n        $form = $this->restrictedFormFixture();\n\n        $form->render();\n        $this->assertNull($form->getField('testRestricted'));\n    }\n\n    public function testRestrictedFieldWithUserWithRightPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.access_field', true));\n\n        $form = $this->restrictedFormFixture();\n\n        $form->render();\n        $this->assertNotNull($form->getField('testRestricted'));\n    }\n\n    public function testRestrictedFieldWithUserWithRightWildcardPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.access_field', true));\n\n        $form = new Form(null, [\n            'model' => new FormTestModel,\n            'arrayName' => 'array',\n            'fields' => [\n                'testField' => [\n                    'type' => 'text',\n                    'label' => 'Test 1'\n                ],\n                'testRestricted' => [\n                    'type' => 'text',\n                    'label' => 'Test 2',\n                    'permission' => 'test.*'\n                ]\n            ]\n        ]);\n\n        $form->render();\n        $this->assertNotNull($form->getField('testRestricted'));\n    }\n\n    public function testRestrictedFieldWithSuperuser()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->asSuperUser());\n\n        $form = $this->restrictedFormFixture();\n\n        $form->render();\n        $this->assertNotNull($form->getField('testRestricted'));\n    }\n\n    public function testRestrictedFieldSinglePermissionWithUserWithWrongPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.wrong_permission', true));\n\n        $form = $this->restrictedFormFixture(true);\n\n        $form->render();\n        $this->assertNull($form->getField('testRestricted'));\n    }\n\n    public function testRestrictedFieldSinglePermissionWithUserWithRightPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.access_field', true));\n\n        $form = $this->restrictedFormFixture(true);\n\n        $form->render();\n        $this->assertNotNull($form->getField('testRestricted'));\n    }\n\n    public function testCheckboxlistTrigger()\n    {\n        $form = new Form(null, [\n            'model' => new FormTestModel,\n            'arrayName' => 'array',\n            'fields' => [\n                'trigger' => [\n                    'type' => 'checkboxlist',\n                    'options' => [\n                        '1' => 'Value One'\n                    ]\n                ],\n                'triggered' => [\n                    'type' => 'text',\n                    'trigger' => [\n                        'field' => 'trigger[]',\n                        'action' => 'show',\n                        'condition' => 'value[1]'\n                    ]\n                ]\n            ]\n        ]);\n\n        $form->render();\n\n        $attributes = $form->getField('triggered')->getAttributes('container', false);\n        $this->assertEquals('[name=\"array[trigger][]\"]', array_get($attributes, 'data-trigger'));\n    }\n\n    protected function restrictedFormFixture(bool $singlePermission = false)\n    {\n        return new Form(null, [\n            'model' => new FormTestModel,\n            'arrayName' => 'array',\n            'fields' => [\n                'testField' => [\n                    'type' => 'text',\n                    'label' => 'Test 1'\n                ],\n                'testRestricted' => [\n                    'type' => 'text',\n                    'label' => 'Test 2',\n                    'permissions' => ($singlePermission) ? 'test.access_field' : [\n                        'test.access_field'\n                    ]\n                ]\n            ]\n        ]);\n    }\n}\n"
  },
  {
    "path": "modules/backend/tests/widgets/ListsWidgetTest.php",
    "content": "<?php\n\nuse Backend\\Models\\User;\nuse Backend\\Widgets\\Lists;\nuse October\\Rain\\Exception\\ApplicationException;\n\nrequire_once __DIR__.'/../fixtures/models/BackendUserFixture.php';\n\nclass ListsWidgetTest extends PluginTestCase\n{\n    public function testRestrictedColumnWithUserWithNoPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user);\n\n        $list = $this->restrictedListsFixture();\n        $list->render();\n\n        $this->assertNotNull($list->getColumn('id'));\n\n        // Expect an exception\n        $this->expectException(ApplicationException::class);\n        $this->expectExceptionMessage('No definition for column email');\n        $column = $list->getColumn('email');\n    }\n\n    public function testRestrictedColumnWithUserWithWrongPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.wrong_permission', true));\n\n        $list = $this->restrictedListsFixture();\n        $list->render();\n\n        $this->assertNotNull($list->getColumn('id'));\n\n        // Expect an exception\n        $this->expectException(ApplicationException::class);\n        $this->expectExceptionMessage('No definition for column email');\n        $column = $list->getColumn('email');\n    }\n\n    public function testRestrictedColumnWithUserWithRightPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.access_field', true));\n\n        $list = $this->restrictedListsFixture();\n        $list->render();\n\n        $this->assertNotNull($list->getColumn('id'));\n        $this->assertNotNull($list->getColumn('email'));\n    }\n\n    public function testRestrictedColumnWithUserWithRightWildcardPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.access_field', true));\n\n        $list = new Lists(null, [\n            'model' => new User,\n            'arrayName' => 'array',\n            'columns' => [\n                'id' => [\n                    'type' => 'text',\n                    'label' => 'ID'\n                ],\n                'email' => [\n                    'type' => 'text',\n                    'label' => 'Email',\n                    'permission' => 'test.*'\n                ]\n            ]\n        ]);\n        $list->render();\n\n        $this->assertNotNull($list->getColumn('id'));\n        $this->assertNotNull($list->getColumn('email'));\n    }\n\n    public function testRestrictedColumnWithSuperuser()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->asSuperUser());\n\n        $list = $this->restrictedListsFixture();\n        $list->render();\n\n        $this->assertNotNull($list->getColumn('id'));\n        $this->assertNotNull($list->getColumn('email'));\n    }\n\n    public function testRestrictedColumnSinglePermissionWithUserWithWrongPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.wrong_permission', true));\n\n        $list = $this->restrictedListsFixture(true);\n        $list->render();\n\n        $this->assertNotNull($list->getColumn('id'));\n\n        // Expect an exception\n        $this->expectException(ApplicationException::class);\n        $this->expectExceptionMessage('No definition for column email');\n        $column = $list->getColumn('email');\n    }\n\n    public function testRestrictedColumnSinglePermissionWithUserWithRightPermissions()\n    {\n        $user = new BackendUserFixture;\n        $this->actingAs($user->withPermission('test.access_field', true));\n\n        $list = $this->restrictedListsFixture(true);\n        $list->render();\n\n        $this->assertNotNull($list->getColumn('id'));\n        $this->assertNotNull($list->getColumn('email'));\n    }\n\n    protected function restrictedListsFixture(bool $singlePermission = false)\n    {\n        return new Lists(null, [\n            'model' => new User,\n            'arrayName' => 'array',\n            'columns' => [\n                'id' => [\n                    'type' => 'text',\n                    'label' => 'ID'\n                ],\n                'email' => [\n                    'type' => 'text',\n                    'label' => 'Email',\n                    'permissions' => ($singlePermission) ? 'test.access_field' : [\n                        'test.access_field'\n                    ]\n                ]\n            ]\n        ]);\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/CollapsableWidget.php",
    "content": "<?php namespace Backend\\Traits;\n\n/**\n * Collapsable Widget Trait\n * Adds collapse/expand item features to back-end widgets\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\n\ntrait CollapsableWidget\n{\n    /**\n     * @var string The key name to use when storing collapsed states in the session.\n     */\n    public $collapseSessionKey = 'groups';\n\n    /**\n     * @var array|false Memory cache of collapsed states.\n     */\n    protected $collapseGroupStatusCache = false;\n\n    /**\n     * AJAX handler to toggle a collapsed state. This should take two post variables:\n     * - group: The collapsible group name\n     * - status: The state of the group. Usually a 1 or a 0.\n     *\n     * @return void\n     */\n    public function onSetCollapseStatus()\n    {\n        $this->setCollapseStatus(post('group'), post('status'));\n    }\n\n    /**\n     * Returns the array of all collapsed states belonging to this widget.\n     *\n     * @return array\n     */\n    protected function getCollapseStatuses()\n    {\n        if ($this->collapseGroupStatusCache !== false) {\n            return $this->collapseGroupStatusCache;\n        }\n\n        $groups = $this->getSession($this->collapseSessionKey, []);\n\n        if (!is_array($groups)) {\n            return $this->collapseGroupStatusCache = [];\n        }\n\n        return $this->collapseGroupStatusCache = $groups;\n    }\n\n    /**\n     * Sets a collapsed state.\n     *\n     * @param string $group\n     * @param string $status\n     */\n    protected function setCollapseStatus($group, $status)\n    {\n        $statuses = $this->getCollapseStatuses();\n\n        $statuses[$group] = $status;\n\n        $this->collapseGroupStatusCache = $statuses;\n\n        $this->putSession($this->collapseSessionKey, $statuses);\n    }\n\n    /**\n     * Gets a collapsed state.\n     *\n     * @param string $group\n     * @param bool $default\n     * @return bool|string\n     */\n    protected function getCollapseStatus($group, $default = true)\n    {\n        $statuses = $this->getCollapseStatuses();\n\n        if (array_key_exists($group, $statuses)) {\n            return $statuses[$group];\n        }\n\n        return $default;\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/ErrorMaker.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Log;\nuse System\\Classes\\ErrorHandler;\nuse October\\Rain\\Exception\\ApplicationException;\nuse Illuminate\\Validation\\ValidationException;\n\n/**\n * ErrorMaker Trait adds exception based methods to a class, goes well with `System\\Traits\\ViewMaker`\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait ErrorMaker\n{\n    /**\n     * @var string|null fatalError stores the object used for a fatal error.\n     */\n    protected $fatalError;\n\n    /**\n     * hasFatalError returns true if a fatal error has been set.\n     */\n    public function hasFatalError()\n    {\n        return !is_null($this->fatalError);\n    }\n\n    /**\n     * getFatalError returns error message\n     */\n    public function getFatalError()\n    {\n        return $this->fatalError;\n    }\n\n    /**\n     * handleError sets standard page variables in the case of a controller error.\n     */\n    public function handleError($exception)\n    {\n        if (\n            !$exception instanceof ApplicationException &&\n            !$exception instanceof ValidationException\n        ) {\n            Log::error($exception);\n        }\n\n        $errorMessage = ErrorHandler::getDetailedMessage($exception);\n        $this->fatalError = $errorMessage;\n        $this->vars['fatalError'] = $errorMessage;\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/FormModelSaver.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Db;\nuse Str;\nuse Backend\\Classes\\FormField;\nuse October\\Rain\\Database\\Model as DatabaseModel;\nuse October\\Rain\\Exception\\ValidationException;\n\n/**\n * FormModelSaver implements special logic for processing form data, typically\n * from postback, and filling the model attributes and attributes of any related\n * models. This is a customized, safer and simplified version of `$model->push()`\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait FormModelSaver\n{\n    /**\n     * @var array modelsToSave are models that require saving\n     */\n    protected $modelsToSave = [];\n\n    /**\n     * performSaveOnModel saves complex data against a model inside\n     * a database transaction.\n     */\n    protected function performSaveOnModel($model, $data, $options = null)\n    {\n        if (is_string($options)) {\n            $options = ['sessionKey' => $options];\n        }\n\n        $modelsToSave = $this->prepareModelsToSave($model, $data);\n        Db::transaction(function () use ($modelsToSave, $options) {\n            foreach ($modelsToSave as $attrChain => $modelToSave) {\n                try {\n                    $modelToSave->save($options);\n                }\n                catch (ValidationException $ve) {\n                    $ve->setFieldPrefix(explode('.', $attrChain));\n                    throw $ve;\n                }\n            }\n        });\n    }\n\n    /**\n     * prepareModelsToSave takes a model and fills it with data from a\n     * multidimensional array. If an attribute is found to be a relationship,\n     * that relationship is also filled.\n     *\n     *     $modelsToSave = $this->prepareModelsToSave($model, [...]);\n     *\n     *     foreach ($modelsToSave as $modelToSave) {\n     *         $modelToSave->save();\n     *     }\n     *\n     * @param \\October\\Rain\\Database\\Model $model Model to fill.\n     * @param array $saveData Attribute values to fill model.\n     * @return array The collection of models to save.\n     */\n    protected function prepareModelsToSave($model, $saveData)\n    {\n        $this->modelsToSave = [];\n\n        $this->setModelAttributes($model, $saveData);\n\n        $this->modelsToSave = array_reverse($this->modelsToSave);\n\n        return $this->modelsToSave;\n    }\n\n    /**\n     * setModelAttributes sets a data collection to a model attributes,\n     * relations are also set.\n     *\n     * @param \\October\\Rain\\Database\\Model $model Model to fill.\n     * @param array $saveData Attribute values to fill model.\n     * @return void\n     */\n    protected function setModelAttributes($model, $saveData, $attrName = '')\n    {\n        if (!$model || !is_array($saveData)) {\n            return;\n        }\n\n        $this->modelsToSave[$attrName] = $model;\n\n        if (!$model instanceof DatabaseModel) {\n            if (method_exists($model, 'fill')) {\n                $model->fill($saveData);\n            }\n            return;\n        }\n\n        $attributesToPurge = [];\n        foreach ($saveData as $attribute => $value) {\n            $isNested = $attribute === 'pivot' || $model->isRelationTypeSingular($attribute);\n            if ($isNested && is_array($value)) {\n                $attrChain = $attrName !== '' ? $attrName . '.' . $attribute : $attribute;\n                $this->setModelAttributes($model->{$attribute}, $value, $attrChain);\n            }\n            elseif ($value !== FormField::NO_SAVE_DATA) {\n                if (Str::startsWith($attribute, '_')) {\n                    $attributesToPurge[] = $attribute;\n                }\n                $model->{$attribute} = $value;\n            }\n        }\n\n        if ($attributesToPurge) {\n            $this->deferPurgedSaveAttributes($model, $attributesToPurge);\n        }\n    }\n\n    /**\n     * deferPurgedSaveAttributes removes an array of attributes from the model.\n     * If the model implements the Purgeable trait, this is preferred over the\n     * internal logic.\n     *\n     * @param \\October\\Rain\\Database\\Model $model Model to adjust.\n     * @param array $attributesToPurge Attribute values to remove from the model.\n     * @return void\n     */\n    protected function deferPurgedSaveAttributes($model, $attributesToPurge)\n    {\n        if (!is_array($attributesToPurge)) {\n            return;\n        }\n\n        // Compatibility with Purgeable trait so attributes can be restored\n        if (method_exists($model, 'getPurgeableAttributes')) {\n            $model->addPurgeable($attributesToPurge);\n        }\n        else {\n            $model->bindEventOnce('model.saveInternal', function () use ($model, $attributesToPurge) {\n                foreach ($attributesToPurge as $attribute) {\n                    unset($model->attributes[$attribute]);\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/FormModelWidget.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Lang;\nuse ApplicationException;\nuse Exception;\n\n/**\n * FormModelWidget Trait\n *\n * Special logic for for form widgets that use a database stored model.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait FormModelWidget\n{\n    /**\n     * Returns the final model and attribute name of\n     * a nested HTML array attribute.\n     * Eg: [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n     * @param  string $attribute.\n     * @return array\n     */\n    public function resolveModelAttribute($attribute)\n    {\n        try {\n            return $this->formField->resolveModelAttribute($this->model, $attribute);\n        }\n        catch (Exception $ex) {\n            throw new ApplicationException(Lang::get('backend::lang.model.missing_relation', [\n                'class' => get_class($this->model),\n                'relation' => $attribute\n            ]));\n        }\n    }\n\n    /**\n     * nearestModelAttribute\n     */\n    public function nearestModelAttribute($attribute)\n    {\n        return $this->formField->nearestModelAttribute($this->model, $attribute);\n    }\n\n    /**\n     * Returns the model of a relation type,\n     * supports nesting via HTML array.\n     * @return Relation\n     */\n    protected function getRelationModel()\n    {\n        [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n\n        if (!$model) {\n            throw new ApplicationException(Lang::get('backend::lang.model.missing_relation', [\n                'class' => get_class($this->model),\n                'relation' => $this->valueFrom\n            ]));\n        }\n\n        if (!$model->hasRelation($attribute)) {\n            throw new ApplicationException(Lang::get('backend::lang.model.missing_relation', [\n                'class' => get_class($model),\n                'relation' => $attribute\n            ]));\n        }\n\n        return $model->makeRelation($attribute);\n    }\n\n    /**\n     * Returns the value as a relation object from the model,\n     * supports nesting via HTML array.\n     * @return Relation\n     */\n    protected function getRelationObject()\n    {\n        [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n\n        if (!$model) {\n            throw new ApplicationException(Lang::get('backend::lang.model.missing_relation', [\n                'class' => get_class($this->model),\n                'relation' => $this->valueFrom\n            ]));\n        }\n\n        if (!$model->hasRelation($attribute)) {\n            throw new ApplicationException(Lang::get('backend::lang.model.missing_relation', [\n                'class' => get_class($model),\n                'relation' => $attribute\n            ]));\n        }\n\n        return $model->{$attribute}();\n    }\n\n    /**\n     * getRelationType returns the value as a relation type from the model,\n     * supports nesting via HTML array.\n     * @return string\n     */\n    protected function getRelationType()\n    {\n        [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n        return $model->getRelationType($attribute);\n    }\n\n    /**\n     * isRelationTypeSingular checks if the related model is singular.\n     */\n    protected function isRelationTypeSingular(): bool\n    {\n        [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom);\n        return $model->isRelationTypeSingular($attribute);\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/InspectableContainer.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Lang;\nuse ApplicationException;\n\n/**\n * InspectableContainer is an extension for controllers that can host\n * inspectable widgets (Components, etc.)\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait InspectableContainer\n{\n    /**\n     * onInspectableGetOptions\n     */\n    public function onInspectableGetOptions()\n    {\n        // Disable asset broadcasting\n        $this->flushAssets();\n\n        $property = trim(post('inspectorProperty'));\n        if (!$property) {\n            throw new ApplicationException('The property name is not specified.');\n        }\n\n        $className = trim(post('inspectorClassName'));\n        if (!$className || $className === 'undefined') {\n            throw new ApplicationException('The inspectable class name is not specified.');\n        }\n\n        $traitFound = in_array(\\System\\Traits\\PropertyContainer::class, class_uses_recursive($className));\n        if (!$traitFound) {\n            throw new ApplicationException('Dynamic Inspector control options cannot be loaded for the specified class.');\n        }\n\n        $obj = new $className(null);\n        $obj->setProperties(post());\n\n        // Nested properties have names like object.property.\n        // Convert them to Object.Property.\n        $propertyNameParts = explode('.', $property);\n        $propertyMethodName = '';\n        foreach ($propertyNameParts as $part) {\n            $part = trim($part);\n\n            if (!strlen($part)) {\n                continue;\n            }\n\n            $propertyMethodName .= ucfirst($part);\n        }\n\n        // Find options method\n        $propertyConfig = $obj->defineProperties()[$property] ?? [];\n        $optionsMethod = $propertyConfig['optionsMethod'] ?? ($propertyConfig['options'] ?? null);\n        $methodName = is_string($optionsMethod)\n            ? $optionsMethod\n            : 'get'.$propertyMethodName.'Options';\n\n        if (method_exists($obj, $methodName)) {\n            $options = $obj->$methodName();\n        }\n        else {\n            $options = $obj->getPropertyOptions($property);\n        }\n\n        // Convert to array to retain the sort order in JavaScript\n        $optionsArray = [];\n        foreach ((array) $options as $value => $title) {\n            $optionsArray[] = ['value' => $value, 'title' => Lang::get($title)];\n        }\n\n        return [\n            'options' => $optionsArray\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/PreferenceMaker.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Str;\nuse Backend\\Models\\UserPreference;\n\n/**\n * PreferenceMaker Trait adds methods for modifying user preferences in a controller class,\n * or a class that contains a `$controller` property referencing a controller.\n */\ntrait PreferenceMaker\n{\n    /**\n     * Cache for retrieved user preferences.\n     * @var array\n     */\n    protected static $preferenceCache = [];\n\n    /**\n     * Saves a widget related key/value pair in to the users preferences\n     * @param string $key Unique key for the data store.\n     * @param mixed $value The value to store.\n     * @return void\n     */\n    public function putUserPreference(string $key, $value)\n    {\n        $preferences = $this->getUserPreferences();\n        $preferences[$key] = $value;\n\n        $this->getPreferenceStorage()->set($this->getPreferenceKey(), $preferences);\n\n        // Re-cache user preferences\n        self::$preferenceCache[$this->getPreferenceKey()] = $preferences;\n    }\n\n    /**\n     * Retrieves a widget related key/value pair from the user preferences\n     * @param string $key Unique key for the data store.\n     * @param mixed $default A default value to use when value is not found.\n     * @return mixed\n     */\n    public function getUserPreference(?string $key = null, $default = null)\n    {\n        $preferences = $this->getUserPreferences();\n\n        return (isset($preferences[$key])) ? $preferences[$key] : $default;\n    }\n\n    /**\n     * Retrieves and caches all user preferences for this particular controller/widget.\n     * @return array\n     */\n    public function getUserPreferences()\n    {\n        if (isset(self::$preferenceCache[$this->getPreferenceKey()])) {\n            return self::$preferenceCache[$this->getPreferenceKey()];\n        }\n\n        $preferences = $this->getPreferenceStorage()->get($this->getPreferenceKey(), []);\n\n        // Cache user preferences\n        self::$preferenceCache[$this->getPreferenceKey()] = $preferences;\n\n        return $preferences;\n    }\n\n    /**\n     * Clears a single preference key from the user preferences for this controller/widget.\n     * @param string $key Unique key for the data store.\n     * @return void\n     */\n    public function resetUserPreference(string $key)\n    {\n        $preferences = $this->getUserPreferences();\n\n        if (!isset($preferences[$key])) {\n            return;\n        }\n\n        unset($preferences[$key]);\n\n        if (count($preferences)) {\n            $this->getPreferenceStorage()->set($this->getPreferenceKey(), $preferences);\n\n            // Re-cache user preferences\n            self::$preferenceCache[$this->getPreferenceKey()] = $preferences;\n        }\n        else {\n            // Remove record from user preferences\n            $this->resetUserPreferences();\n        }\n    }\n\n    /**\n     * Clears all user preferences for this controller/widget.\n     * @return void\n     */\n    public function resetUserPreferences()\n    {\n        $this->getPreferenceStorage()->reset($this->getPreferenceKey());\n\n        self::$preferenceCache[$this->getPreferenceKey()] = [];\n    }\n\n    /**\n     * Returns a unique identifier for this widget and controller action for preference storage.\n     * @return string\n     */\n    protected function getPreferenceKey()\n    {\n        $controller = property_exists($this, 'controller') && $this->controller\n            ? $this->controller\n            : $this;\n\n        $uniqueId = method_exists($this, 'getId')\n            ? $this->getId()\n            : $controller->getId();\n\n        // Removes Class name and \"Controllers\" directory\n        $rootNamespace = Str::getClassId(Str::getClassNamespace(Str::getClassNamespace($controller)));\n\n        // The controller action is intentionally omitted, preferences should be shared for all actions\n        return $rootNamespace . '::' . strtolower(class_basename($controller)) . '.' . strtolower($uniqueId);\n    }\n\n    /**\n     * Specifies the model used for storing the user preferences.\n     * @return October\\Rain\\Database\\Model\n     */\n    protected function getPreferenceStorage()\n    {\n        return UserPreference::forUser();\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/SearchableWidget.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Str;\n\n/**\n * SearchableWidget adds search features to back-end widgets\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\n\ntrait SearchableWidget\n{\n    /**\n     * @var bool searchTerm\n     */\n    protected $searchTerm = false;\n\n    /**\n     * getSearchTerm\n     */\n    protected function getSearchTerm()\n    {\n        return $this->searchTerm !== false ? $this->searchTerm : $this->getSession('search');\n    }\n\n    /**\n     * setSearchTerm\n     */\n    protected function setSearchTerm($term)\n    {\n        $this->searchTerm = trim($term);\n        $this->putSession('search', $this->searchTerm);\n    }\n\n    /**\n     * textMatchesSearch\n     */\n    protected function textMatchesSearch(&$words, $text)\n    {\n        foreach ($words as $word) {\n            $word = trim($word);\n            if (!strlen($word)) {\n                continue;\n            }\n\n            if (Str::contains(Str::lower($text), $word)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/SelectableWidget.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Input;\n\n/**\n * SelectableWidget trait adds item selection features to back-end widgets\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait SelectableWidget\n{\n    /**\n     * @var bool selectedItemsCache\n     */\n    protected $selectedItemsCache = false;\n\n    /**\n     * @var string selectionInputName\n     */\n    protected $selectionInputName = 'object';\n\n    /**\n     * onSelect\n     */\n    public function onSelect()\n    {\n        $this->extendSelection();\n    }\n\n    /**\n     * getSelectedItems\n     */\n    protected function getSelectedItems()\n    {\n        if ($this->selectedItemsCache !== false) {\n            return $this->selectedItemsCache;\n        }\n\n        $items = $this->getSession('selected', []);\n        if (!is_array($items)) {\n            return $this->selectedItemsCache = [];\n        }\n\n        return $this->selectedItemsCache = $items;\n    }\n\n    /**\n     * extendSelection\n     */\n    protected function extendSelection()\n    {\n        $items = (array) Input::get($this->selectionInputName, []);\n        $currentSelection = $this->getSelectedItems();\n\n        $this->putSession('selected', $currentSelection + $items);\n    }\n\n    /**\n     * resetSelection\n     */\n    protected function resetSelection()\n    {\n        $this->putSession('selected', []);\n    }\n\n    /**\n     * removeSelection\n     */\n    protected function removeSelection($itemId)\n    {\n        $currentSelection = $this->getSelectedItems();\n\n        unset($currentSelection[$itemId]);\n        $this->putSession('selected', $currentSelection);\n        $this->selectedItemsCache = $currentSelection;\n    }\n\n    /**\n     * isItemSelected\n     */\n    protected function isItemSelected($itemId)\n    {\n        $selectedItems = $this->getSelectedItems();\n        if (!is_array($selectedItems) || !isset($selectedItems[$itemId])) {\n            return false;\n        }\n\n        return $selectedItems[$itemId];\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/SessionMaker.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Str;\nuse Session;\n\n/**\n * Session Maker Trait\n *\n * Adds session management based methods to a controller class, or a class\n * that contains a `$controller` property referencing a controller.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait SessionMaker\n{\n    /**\n     * Saves a widget related key/value pair in to session data.\n     * @param string $key Unique key for the data store.\n     * @param string $value The value to store.\n     * @return void\n     */\n    protected function putSession($key, $value)\n    {\n        $sessionId = $this->makeSessionId();\n\n        $currentStore = $this->getSession();\n\n        $currentStore[$key] = $value;\n\n        Session::put($sessionId, base64_encode(serialize($currentStore)));\n    }\n\n    /**\n     * Retrieves a widget related key/value pair from session data.\n     * @param string $key Unique key for the data store.\n     * @param string $default A default value to use when value is not found.\n     * @return string\n     */\n    protected function getSession($key = null, $default = null)\n    {\n        $sessionId = $this->makeSessionId();\n\n        $currentStore = [];\n\n        if (\n            Session::has($sessionId) &&\n            ($cached = @unserialize(@base64_decode(Session::get($sessionId)))) !== false\n        ) {\n            $currentStore = $cached;\n        }\n\n        if ($key === null) {\n            return $currentStore;\n        }\n\n        return array_get($currentStore, $key, $default);\n    }\n\n    /**\n     * Returns a unique session identifier for this widget and controller action.\n     * @return string\n     */\n    protected function makeSessionId()\n    {\n        $controller = property_exists($this, 'controller') && $this->controller\n            ? $this->controller\n            : $this;\n\n        $uniqueId = method_exists($this, 'getId') ? $this->getId() : $controller->getId();\n\n        // Removes Class name and \"Controllers\" directory\n        $rootNamespace = Str::getClassId(Str::getClassNamespace(Str::getClassNamespace($controller)));\n\n        // The controller action is intentionally omitted, session should be shared for all actions\n        return 'widget.' . $rootNamespace . '-' . class_basename($controller) . '-' . $uniqueId;\n    }\n\n    /**\n     * Resets all session data related to this widget.\n     * @return void\n     */\n    public function resetSession()\n    {\n        $sessionId = $this->makeSessionId();\n\n        Session::forget($sessionId);\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/VueMaker.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Str;\nuse Request;\nuse SystemException;\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * VueMaker Trait adds Vue based methods to a class\n *\n * To add a component call the `registerVueComponent` method:\n *\n *     $this->registerVueComponent('Plugin/VueComponents/MyComponent');\n *\n * This will automatically load the component's JavaScript definition,\n * component template, and CSS file.\n *\n * @see \\Backend\\Classes\\VueComponentBase\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait VueMaker\n{\n    /**\n     * @var array vueComponents contains Vue component classes\n     */\n    protected $vueComponents = [];\n\n    /**\n     * @var array vueComponentClasses tracks registered class names for O(1) lookup\n     */\n    protected $vueComponentClasses = [];\n\n    /**\n     * registerVueComponent to be loaded when the action view renders.\n     * @param string $className\n     */\n    public function registerVueComponent($className)\n    {\n        if ($this->isVueComponentRegistered($className)) {\n            return;\n        }\n\n        $component = $this->makeVueComponent($className);\n        $this->vueComponents[] = $component;\n        $this->vueComponentClasses[$className] = true;\n\n        $requiredComponents = $component->getDependencies();\n        if (!is_array($requiredComponents)) {\n            throw new SystemException(sprintf('getDependencies() must return an array: %s', $className));\n        }\n\n        foreach ($requiredComponents as $className) {\n            if (!$this->isVueComponentRegistered($className)) {\n                $this->registerVueComponent($className);\n            }\n        }\n    }\n\n    /**\n     * outputVueComponentTemplates outputs templates and ESM component registration.\n     * This method:\n     * 1. Renders text/template scripts for each component\n     * 2. Imports ESM modules and registers them as Vue components with template injection\n     */\n    public function outputVueComponentTemplates()\n    {\n        $registrations = $this->getVueComponentRegistrations();\n\n        if (empty($registrations)) {\n            return '';\n        }\n\n        $result = [];\n\n        // Output template script blocks\n        foreach ($registrations as $reg) {\n            $result[] = sprintf('<script type=\"text/template\" id=\"%s\">', $reg['templateId']);\n            $result[] = $reg['template'];\n            $result[] = '</script>';\n        }\n\n        // Output ESM imports and Vue component registration\n        $result[] = '<script type=\"module\">';\n        $result[] = 'if (!window.oc) window.oc = {};';\n        $result[] = 'if (!window.oc.vueComponents) window.oc.vueComponents = {};';\n\n        foreach ($registrations as $reg) {\n            $result[] = sprintf(\"import %s from '%s';\", $reg['importName'], $reg['url']);\n        }\n\n        foreach ($registrations as $reg) {\n            $result[] = sprintf(\n                \"window.oc.vueComponents['%s'] = { ...%s, template: document.getElementById('%s').innerHTML };\",\n                $reg['name'],\n                $reg['importName'],\n                $reg['templateId']\n            );\n        }\n\n        $result[] = '</script>';\n\n        return implode(PHP_EOL, $result);\n    }\n\n    /**\n     * outputVueComponentsForAjax sends Vue component ESM files and registration\n     * code through the AJAX response asset pipeline, so they are loaded and\n     * registered before DOM patching occurs.\n     */\n    public function outputVueComponentsForAjax($response)\n    {\n        if (empty($this->vueComponents) || !Request::ajax()) {\n            return $response;\n        }\n\n        $registrations = $this->getVueComponentRegistrations();\n\n        if (empty($registrations)) {\n            return $response;\n        }\n\n        // Load ESM files via asset pipeline\n        foreach ($registrations as $reg) {\n            $response->js($reg['url'], ['type' => 'module']);\n        }\n\n        // Generate inline registration module\n        $lines = [];\n        $lines[] = 'if (!window.oc) window.oc = {};';\n        $lines[] = 'if (!window.oc.vueComponents) window.oc.vueComponents = {};';\n\n        foreach ($registrations as $reg) {\n            $lines[] = sprintf(\"import %s from '%s';\", $reg['importName'], $reg['url']);\n        }\n\n        foreach ($registrations as $reg) {\n            $escapedTemplate = str_replace(\n                ['\\\\', '`', '${'],\n                ['\\\\\\\\', '\\\\`', '\\\\${'],\n                $reg['template']\n            );\n            $lines[] = sprintf(\n                \"window.oc.vueComponents['%s'] = { ...%s, template: `%s` };\",\n                $reg['name'],\n                $reg['importName'],\n                $escapedTemplate\n            );\n        }\n\n        $response->jsInline(implode(\"\\n\", $lines), ['type' => 'module']);\n\n        return $response;\n    }\n\n    /**\n     * getVueComponentRegistrations builds a flat list of component registrations\n     * including subcomponents, with ESM URLs, names, templates, and import aliases.\n     */\n    protected function getVueComponentRegistrations(): array\n    {\n        $registrations = [];\n        $importIndex = 0;\n\n        foreach ($this->vueComponents as $component) {\n            $templateId = Str::getClassId($component);\n            $registrations[] = [\n                'url' => $this->getEsmModuleUrl($component->getEsmModulePath()),\n                'name' => $component->getComponentName(),\n                'template' => $component->render(),\n                'templateId' => $templateId,\n                'importName' => 'c' . $importIndex++,\n            ];\n\n            foreach ($component->getSubcomponents() as $subcomponent) {\n                $subTemplateId = str_replace(['.', '-'], '_', $templateId . '_' . $subcomponent);\n                $registrations[] = [\n                    'url' => $this->getEsmModuleUrl($component->getSubcomponentEsmPath($subcomponent)),\n                    'name' => $component->getSubcomponentName($subcomponent),\n                    'template' => $component->renderSubcomponent($subcomponent),\n                    'templateId' => $subTemplateId,\n                    'importName' => 'c' . $importIndex++,\n                ];\n            }\n        }\n\n        return $registrations;\n    }\n\n    /**\n     * getEsmModuleUrl converts a file path to a public URL\n     */\n    protected function getEsmModuleUrl(string $path): string\n    {\n        $basePath = base_path();\n        if (str_starts_with($path, $basePath)) {\n            $path = substr($path, strlen($basePath));\n        }\n        return str_replace('\\\\', '/', $path);\n    }\n\n    /**\n     * makeVueComponent\n     */\n    protected function makeVueComponent($className)\n    {\n        if (!class_exists($className)) {\n            throw new SystemException(sprintf('Vue component class not found: %s', $className));\n        }\n\n        if (!is_subclass_of($className, VueComponentBase::class)) {\n            throw new SystemException(\n                sprintf('Vue component class must be a descendant of Backend\\Classes\\VueComponentBase: %s', $className)\n            );\n        }\n\n        return new $className($this);\n    }\n\n    /**\n     * isVueComponentRegistered\n     */\n    protected function isVueComponentRegistered($className)\n    {\n        return isset($this->vueComponentClasses[$className]);\n    }\n}\n"
  },
  {
    "path": "modules/backend/traits/WidgetMaker.php",
    "content": "<?php namespace Backend\\Traits;\n\nuse Lang;\nuse Backend\\Classes\\FormField;\nuse SystemException;\n\n/**\n * WidgetMaker Trait\n *\n * Adds widget based methods to a controller class, or a class that\n * contains a `$controller` property referencing a controller.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait WidgetMaker\n{\n    /**\n     * getWidget\n     */\n    public function getWidget(string $name)\n    {\n        $controller = property_exists($this, 'controller') && $this->controller\n            ? $this->controller\n            : $this;\n\n        return $controller->widget->{$name} ?? null;\n    }\n\n    /**\n     * makeWidget object with the supplied configuration file.\n     * @param string $class\n     * @param array $widgetConfig\n     * @return \\Backend\\Classes\\WidgetBase\n     */\n    public function makeWidget($class, $widgetConfig = [])\n    {\n        $controller = property_exists($this, 'controller') && $this->controller\n            ? $this->controller\n            : $this;\n\n        if (!class_exists($class)) {\n            throw new SystemException(Lang::get('backend::lang.widget.not_registered', [\n                'name' => $class\n            ]));\n        }\n\n        return new $class($controller, $widgetConfig);\n    }\n\n    /**\n     * makeFormWidget object with the supplied form field and widget configuration.\n     * The fieldConfig is a field name, an array of config or a FormField object.\n     * @param string $class\n     * @param mixed $fieldConfig\n     * @param array $widgetConfig\n     * @return \\Backend\\Classes\\FormWidgetBase\n     */\n    public function makeFormWidget($class, $fieldConfig = [], $widgetConfig = [])\n    {\n        $controller = property_exists($this, 'controller') && $this->controller\n            ? $this->controller\n            : $this;\n\n        if (!class_exists($class)) {\n            throw new SystemException(Lang::get('backend::lang.widget.not_registered', [\n                'name' => $class\n            ]));\n        }\n\n        if (is_string($fieldConfig)) {\n            $fieldConfig = ['fieldName' => $fieldConfig];\n        }\n\n        if (is_array($fieldConfig)) {\n            if (isset($fieldConfig['name'])) {\n                $fieldConfig['fieldName'] = $fieldConfig['name'];\n            }\n\n            $formField = new FormField($fieldConfig);\n            $formField->displayAs('widget', $fieldConfig);\n        }\n        else {\n            $formField = $fieldConfig;\n        }\n\n        return new $class($controller, $formField, $widgetConfig);\n    }\n}\n"
  },
  {
    "path": "modules/backend/views/404.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\">\n    <head>\n        <title><?= Lang::get('backend::lang.page.not_found.label') ?></title>\n        <link href=\"<?= Url::asset('/modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <h1><i class=\"icon-chain-broken warning\"></i> <?= Lang::get('backend::lang.page.not_found.label') ?></h1>\n            <br>\n            <p class=\"lead\"><?= Lang::get('backend::lang.page.not_found.help') ?></p>\n            <p class=\"lead\"><span style=\"font-family: monospace;\"> <?= e(url()->current()) ?></span></p>\n            <p><a href=\"javascript:history.go(-1)\"><?= Lang::get('backend::lang.page.not_found.back_link') ?></a></p>\n            <p><a href=\"<?= Backend::url('') ?>\"><?= Lang::get('backend::lang.page.access_denied.cms_link') ?></a></p>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/backend/views/access_denied.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\">\n    <head>\n        <title><?= Lang::get('backend::lang.page.access_denied.label') ?></title>\n        <link href=\"<?= Url::asset('/modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <h1><i class=\"icon-lock warning\"></i> <?= Lang::get('backend::lang.page.access_denied.label') ?></h1>\n            <p class=\"lead\"><?= Lang::get('backend::lang.page.access_denied.help') ?></p>\n            <p><a href=\"javascript:history.go(-1)\"><?= Lang::get('backend::lang.page.not_found.back_link') ?></a></p>\n            <?php if (BackendAuth::userHasAccess('general.backend')): ?>\n                <p><a href=\"<?= Backend::url('') ?>\"><?= Lang::get('backend::lang.page.access_denied.cms_link') ?></a></p>\n            <?php endif ?>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/backend/views/in_maintenance.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\">\n    <head>\n        <title><?= __(\"In Maintenance\") ?></title>\n        <link href=\"<?= Url::asset('/modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <h1><i class=\"icon-cogs warning\"></i> <?= __(\"In Maintenance\") ?></h1>\n            <p class=\"lead\"><?= __(\"The site is currently in maintenance mode, please check back later.\") ?></p>\n            <p><a href=\"javascript:history.go(-1)\"><?= Lang::get('backend::lang.page.not_found.back_link') ?></a></p>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/backend/views/mail/contact-form.htm",
    "content": "subject = \"Contact form submitted by: {{ email }}\"\nlayout = \"system\"\ndescription = \"Notify the admins that a contact form was submitted\"\n==\nHello\n\nA website user has submitted the contact form via **{{ appName }}**.\n\n{% partial 'panel' body %}\n- First Name: {{ first_name }}\n- Last Name: {{ last_name }}\n- Email: {{ email }}\n{% endpartial %}\n\nTheir message is below:\n\n{% partial 'subcopy' body %}\n    {{ comments }}\n{% endpartial %}\n\n{% partial 'button' url='mailto:'~email~'?subject=Contact form via '~appName body %}\nReply via Email\n{% endpartial %}\n"
  },
  {
    "path": "modules/backend/views/mail/invite.htm",
    "content": "subject = \"Welcome to {{ appName|raw }}\"\nlayout = \"system\"\ndescription = \"Invite new admin to the site\"\n==\nHi {{ name }}\n\nA user account has been created for you on **{{ appName }}**.\n\n{% partial 'panel' body %}\n- Login: `{{ login ?: 'sample' }}`\n- Password: `{{ (password ?: '********')|raw }}`\n{% endpartial %}\n\nYou can use the following link to sign in:\n\n{% partial 'button' url=link body %}\n    Sign in to Admin Panel\n{% endpartial %}\n\nAfter signing in you should change your password by clicking your name on the top right corner of the administration area.\n"
  },
  {
    "path": "modules/backend/views/mail/restore.htm",
    "content": "subject = \"Password Reset\"\nlayout = \"system\"\ndescription = \"Reset an admin password\"\n==\nHello {{ name }}\n\nSomebody has requested a password reset for your account, if this was not you, please ignore this email.\n\nYou can use the following link to restore your password:\n\n{% partial 'button' url=link type='positive' body %}\nRestore Password\n{% endpartial %}\n"
  },
  {
    "path": "modules/backend/views/no_database.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\">\n    <head>\n        <title><?= Lang::get('backend::lang.page.no_database.label') ?></title>\n        <link href=\"<?= Url::asset('/modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <h1><i class=\"icon-database warning\"></i> <?= Lang::get('backend::lang.page.no_database.label') ?></h1>\n            <p class=\"lead\"><?= Lang::get('backend::lang.page.no_database.help') ?></p>\n            <a href=\"<?= Url::to('/') ?>\"><?= Lang::get('backend::lang.page.no_database.cms_link') ?></a>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/backend/vuecomponents/Autocomplete.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Autocomplete Vue component\n *\n * @link https://github.com/trevoreyre/autocomplete\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Autocomplete extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-autocomplete';\n\n    /**\n     * loadDependencyAssets\n     */\n    protected function loadDependencyAssets()\n    {\n        $this->addCss('vendor/vue-autocomplete/vue-autocomplete.min.css');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/CodeEditor.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Url;\nuse Backend\\Classes\\VueComponentBase;\nuse Backend\\Models\\Preference as BackendPreference;\n\n/**\n * CodeEditor Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CodeEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-codeeditor';\n\n    /**\n     * loadAssets adds component specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * The default component script and CSS file are loaded automatically.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        // This Vue component uses Ace dependencies from the form widget\n        //\n        $this->addJs('../../../formwidgets/codeeditor/assets/js/build-min.js');\n    }\n\n    /**\n     * prepareVars required by the component's partials\n     */\n    protected function prepareVars()\n    {\n        $preferences = BackendPreference::instance();\n\n        $configuration = [\n            'fontSize' => $preferences->editor_font_size,\n            'wordWrap' => $preferences->editor_word_wrap,\n            'codeFolding' => $preferences->editor_code_folding,\n            'autoClosing' => $preferences->editor_auto_closing,\n            'tabSize' => $preferences->editor_tab_size,\n            'theme' => $preferences->editor_theme,\n            'showInvisibles' => !!$preferences->editor_show_invisibles,\n            'highlightActiveLine' => !!$preferences->editor_highlight_active_line,\n            'useSoftTabs' => !$preferences->editor_use_hard_tabs,\n            'showGutter' => !!$preferences->editor_show_gutter,\n            'autocompletion' => $preferences->editor_autocompletion,\n            'displayIndentGuides' => !!$preferences->editor_display_indent_guides,\n            'showPrintMargin' => !!$preferences->editor_show_print_margin,\n            'margin' => 0,\n            'vendorPath' => Url::asset('/modules/backend/formwidgets/codeeditor/assets/vendor/ace')\n        ];\n\n        $this->vars['configuration'] = json_encode($configuration);\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/Document.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Document UI entity Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Document extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-document';\n\n    protected $require = [\n        \\Backend\\VueComponents\\DropdownMenu::class,\n        \\Backend\\VueComponents\\LoadingIndicator::class\n    ];\n\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('toolbar');\n        $this->registerSubcomponent('toolbar-button');\n        $this->registerSubcomponent('header');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/DocumentMarkdownEditor.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse App;\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Markdown editor for the Document UI Vue component.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DocumentMarkdownEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-document-markdowneditor';\n\n    protected $require = [\n        \\Backend\\VueComponents\\Document::class,\n        \\Backend\\VueComponents\\Uploader::class,\n        \\Backend\\VueComponents\\Modal::class,\n        \\Backend\\VueComponents\\Inspector::class\n    ];\n\n    /**\n     * Adds component specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * The default component script and CSS file are loaded automatically.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('/modules/backend/vuecomponents/documentmarkdowneditor/assets/vendor/easymde@2.12.0/easymde.min.js');\n        $this->addCss('/modules/backend/vuecomponents/documentmarkdowneditor/assets/vendor/easymde@2.12.0/easymde.min.css');\n        $this->addJs('js/formwidget.js', ['type' => 'module']);\n    }\n\n    /**\n     * Adds dependency assets required for the component.\n     * This method is called before the component's default resources are loaded.\n     * Use $this->addJs() and $this->addCss() to register new assets to include\n     * on the page.\n     * @return void\n     */\n    protected function loadDependencyAssets()\n    {\n        $this->addJs('vendor/marked@1.2.0/marked.min.js');\n        $this->addJs('vendor/dompurify@2.1.1/purify.min.js');\n    }\n\n    /**\n     * Prepares variables required by the component's partials\n     */\n    protected function prepareVars()\n    {\n        $configuration = [\n            'lang' => [\n                'command_upload_from_computer' => trans('backend::lang.richeditor.upload_from_computer'),\n                'browse' => trans('backend::lang.richeditor.browse'),\n                'by_url' => trans('backend::lang.richeditor.by_url'),\n                'url_required' => trans('backend::lang.richeditor.url_required'),\n                'url_validation' => trans('backend::lang.richeditor.url_validation'),\n                'add_image_title' => trans('backend::lang.richeditor.add_image'),\n                'add_file_title' => trans('backend::lang.richeditor.add_file')\n            ]\n        ];\n\n        $this->vars['configuration'] = json_encode($configuration);\n    }\n\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('formwidgetconnector');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/Dropdown.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Document dropdown Vue component\n *\n * @link https://github.com/shentao/vue-multiselect\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Dropdown extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-dropdown';\n\n    protected function loadDependencyAssets()\n    {\n        $this->addCss('vendor/vue-multiselect/vue-multiselect.min.css');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/DropdownMenu.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Dropdown menu Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DropdownMenu extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-dropdown-menu';\n\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('sheet');\n        $this->registerSubcomponent('menuitem');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/DropdownMenuButton.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * A generic button with a drop-down menu Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DropdownMenuButton extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-dropdown-menu-button';\n\n    protected $require = [\n        \\Backend\\VueComponents\\DropdownMenu::class\n    ];\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/InfoTable.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * InfoTable is a read-only information table Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass InfoTable extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-info-table';\n\n    /**\n     * registerSubcomponents\n     */\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('item');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/Inspector.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Inspector Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Inspector extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-inspector';\n\n    protected $require = [\n        \\Backend\\VueComponents\\Splitter::class,\n        \\Backend\\VueComponents\\Tabs::class,\n        \\Backend\\VueComponents\\Dropdown::class,\n        \\Backend\\VueComponents\\Modal::class,\n        \\Backend\\VueComponents\\Autocomplete::class,\n        \\Backend\\VueComponents\\LoadingIndicator::class,\n    ];\n\n    /**\n     * Adds component specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * The default component script and CSS file are loaded automatically.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('vendor/ajv/ajv.min.js');\n        $this->addJs('js/classes/index.js', ['type' => 'module']);\n    }\n\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('panel');\n        $this->registerSubcomponent('group');\n        $this->registerSubcomponent('grouphost');\n        $this->registerSubcomponent('controlhost');\n        $this->registerSubcomponent('controlhost-row');\n        $this->registerSubcomponent('control-text');\n        $this->registerSubcomponent('control-dropdown');\n        $this->registerSubcomponent('control-checkbox');\n        $this->registerSubcomponent('control-table');\n        $this->registerSubcomponent('control-table-head');\n        $this->registerSubcomponent('control-table-headcell');\n        $this->registerSubcomponent('control-table-row');\n        $this->registerSubcomponent('control-table-cell');\n        $this->registerSubcomponent('control-table-text');\n        $this->registerSubcomponent('control-table-dropdown');\n        $this->registerSubcomponent('control-object');\n        $this->registerSubcomponent('control-set');\n        $this->registerSubcomponent('control-dictionary');\n        $this->registerSubcomponent('control-objectlist');\n        $this->registerSubcomponent('control-objectlist-records');\n        $this->registerSubcomponent('control-objectlist-recordtitle');\n        $this->registerSubcomponent('control-autocomplete');\n        $this->registerSubcomponent('control-mediafinder');\n        $this->registerSubcomponent('host-modal');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/LoadingIndicator.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * LoadingIndicator Vue component.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass LoadingIndicator extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-loading-indicator';\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/Modal.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Modal dialog Vue component.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Modal extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-modal';\n\n    /**\n     * @var string assetDefaults is the default attributes for assets.\n     * @deprecated we don't use bundles anymore (remove this)\n     */\n    protected $assetDefaults = ['build' => 'global'];\n\n    /**\n     * loadAssets adds component specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page. The default component script and CSS\n     * file are loaded automatically.\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/classes/index.js', ['type' => 'module']);\n    }\n\n    /**\n     * registerSubcomponents\n     */\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('alert');\n        $this->registerSubcomponent('confirm');\n        $this->registerSubcomponent('basic');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/MonacoEditor.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Url;\nuse Event;\nuse Backend\\Classes\\VueComponentBase;\nuse Backend\\Models\\Preference as BackendPreference;\n\n/**\n * MonacoEditor Vue component\n *\n * Dev notes:\n * - Automatic tag closing is not implemented. See https://github.com/microsoft/monaco-editor/issues/221\n *\n * @link https://github.com/microsoft/monaco-editor\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MonacoEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-monacoeditor';\n\n    /**\n     * @var array require other components\n     */\n    protected $require = [\n        \\Backend\\VueComponents\\Tabs::class\n    ];\n\n    /**\n     * @var array yamlDefinitions can only be defined once\n     */\n    protected static $yamlDefinitions;\n\n    /**\n     * loadDependencyAssets required for the component.\n     * This method is called before the component's default resources are loaded.\n     * Use $this->addJs() and $this->addCss() to register new assets to include\n     * on the page.\n     * @return void\n     */\n    protected function loadDependencyAssets()\n    {\n        $this->addJs('vendor/monaco-yaml/monaco-yaml.min.js');\n        $this->addJs('vendor/emmet-monaco-es/emmet-monaco.min.js');\n        $this->addJs('vendor/monaco/vs/loader.js');\n    }\n\n    /**\n     * prepareVars\n     */\n    protected function prepareVars()\n    {\n        $preferences = BackendPreference::instance();\n\n        $configuration = [\n            'vendorPath' => Url::asset('/modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco'),\n            'fontSize' => $preferences->editor_font_size.'px',\n            'tabSize' => $preferences->editor_tab_size,\n            'useEmmet' => !!$preferences->editor_use_emmet,\n            'yamlSchemas' => $this->getYamlSchemaDefinitions(),\n            'renderLineHighlight' => $preferences->editor_highlight_active_line ? 'all' : 'none',\n            'useTabStops' => !!$preferences->editor_use_hard_tabs,\n            'renderIndentGuides' => !!$preferences->editor_display_indent_guides,\n            'renderWhitespace' => $preferences->editor_show_invisibles ? 'all' : 'none',\n            'autoClosingBrackets' => $preferences->editor_auto_closing ? 'languageDefined' : 'never',\n            'autoClosingQuotes' => $preferences->editor_auto_closing ? 'languageDefined' : 'never',\n            'hover' => ['delay' => 750]\n        ];\n\n        if (!$preferences->editor_show_gutter) {\n            $configuration['lineDecorationsWidth'] = 0;\n            $configuration['lineNumbersMinChars'] = 0;\n            $configuration['lineNumbers'] = false;\n        }\n\n        $wordWrap = $preferences->editor_word_wrap;\n        if ($wordWrap === 'off') {\n            $configuration['wordWrap'] = $wordWrap;\n        }\n        elseif ($wordWrap === 'fluid') {\n            $configuration['wordWrap'] = 'on';\n        }\n        else {\n            $configuration['wordWrap'] = 'wordWrapColumn';\n            $configuration['wordWrapColumn'] = $wordWrap;\n        }\n\n        $theme = $preferences->editor_theme;\n        if ($theme === 'sqlserver') {\n            $configuration['theme'] = 'vs';\n        }\n        elseif ($theme === 'merbivore') {\n            $configuration['theme'] = 'hc-black';\n        }\n        else {\n            $configuration['theme'] = 'vs-dark';\n        }\n\n        $this->vars['configuration'] = json_encode($configuration);\n    }\n\n    /**\n     * getYamlSchemaDefinitions\n     */\n    protected function getYamlSchemaDefinitions()\n    {\n\n        /**\n         * @event editor.extension.defineYamlSchemas\n         * @link https://github.com/domsew/monaco-yaml\n         * Injects YAML schema definitions for the Monaco Editor based on the monaco-yaml package\n         *\n         * Example usage:\n         *\n         *     Event::listen('editor.extension.defineYamlSchemas', function () {\n         *         return [\n         *             [\n         *                 'uri' => Url::asset('modules/tailor/assets/js/blueprint-yaml-definition.json'),\n         *                 'fileMatch' => ['*-blueprint.yaml']\n         *             ]\n         *         ];\n         *     });\n         *\n         */\n        if (!self::$yamlDefinitions) {\n            self::$yamlDefinitions = array_collapse(Event::fire('editor.extension.defineYamlSchemas'));\n        }\n\n        return self::$yamlDefinitions ?: null;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/Popover.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Popover Vue component.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Popover extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-popover';\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/RichEditor.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse App;\nuse Url;\nuse File;\nuse BackendAuth;\nuse Backend\\Models\\EditorSetting;\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * RichEditor Vue component.\n *\n * Manages an instance of Froala Editor.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RichEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-richeditor';\n\n    /**\n     * Prepares variables required by the component's partials\n     */\n    protected function prepareVars()\n    {\n        $configuration = [\n            'editorLang' => $this->getValidEditorLang(),\n            'useMediaManager' => BackendAuth::userHasAccess('media.library'),\n            'iframeStylesFile' => Url::asset('/modules/backend/vuecomponents/richeditor/assets/css/iframestyles.css'),\n\n            'globalToolbarButtons' => $this->getGlobalButtons(),\n            'allowEmptyTags' => EditorSetting::getConfigured('html_allow_empty_tags'),\n            'allowTags' => EditorSetting::getConfigured('html_allow_tags'),\n            'allowAttrs' => EditorSetting::getConfigured('html_allow_attrs'),\n            'noWrapTags' => EditorSetting::getConfigured('html_no_wrap_tags'),\n            'removeTags' => EditorSetting::getConfigured('html_remove_tags'),\n            'lineBreakerTags' => EditorSetting::getConfigured('html_line_breaker_tags'),\n\n            'imageStyles' => EditorSetting::getConfiguredStyles('html_style_image'),\n            'linkStyles' => EditorSetting::getConfiguredStyles('html_style_link'),\n            'paragraphFormat' => EditorSetting::getConfiguredFormats('html_paragraph_formats'),\n            'paragraphStyles' => EditorSetting::getConfiguredStyles('html_style_paragraph'),\n            'inlineStyles' => EditorSetting::getConfiguredStyles('html_style_inline'),\n            'tableStyles' => EditorSetting::getConfiguredStyles('html_style_table'),\n            'tableCellStyles' => EditorSetting::getConfiguredStyles('html_style_table_cell')\n        ];\n\n        $this->vars['configuration'] = json_encode($configuration);\n    }\n\n    /**\n     * Adds component specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * The default component script and CSS file are loaded automatically.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        // This Vue component uses Froala dependencies from the rich editor form widget\n        // $this->addJs('/modules/backend/formwidgets/richeditor/assets/js/richeditor.js');\n        $this->addCss('/modules/backend/formwidgets/richeditor/assets/css/richeditor.css');\n    }\n\n    /**\n     * getValidEditorLang returns a proposed language code for Froala.\n     * @return string|null\n     */\n    protected function getValidEditorLang()\n    {\n        $locale = App::getLocale();\n\n        // English is baked in\n        if ($locale !== 'en') {\n            return str_replace('-', '_', strtolower($locale));\n        }\n\n        return null;\n    }\n\n    /**\n     * getGlobalButtons\n     */\n    protected function getGlobalButtons()\n    {\n        $result = EditorSetting::getConfigured('html_toolbar_buttons');\n        if (!$result) {\n            return null;\n        }\n\n        $result = explode(',', $result);\n        $buttons = [];\n        foreach ($result as $button) {\n            $buttons[] = trim($button);\n        }\n\n        return $buttons;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/RichEditorDocumentConnector.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Url;\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Rich Editor Document connector Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RichEditorDocumentConnector extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-richeditor-document-connector';\n\n    /**\n     * @var array require\n     */\n    protected $require = [\n        \\Backend\\VueComponents\\Document::class,\n        \\Backend\\VueComponents\\RichEditor::class,\n        \\Backend\\VueComponents\\Uploader::class,\n        \\Backend\\VueComponents\\Modal::class,\n        \\Backend\\VueComponents\\Inspector::class,\n        \\Backend\\VueComponents\\MonacoEditor::class\n    ];\n\n    /**\n     * Adds component specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * The default component script and CSS file are loaded automatically.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/formwidget.js', ['type' => 'module']);\n    }\n\n    /**\n     * Prepares variables required by the component's partials\n     */\n    protected function prepareVars()\n    {\n        $configuration = [\n            'lang' => [\n                'command_upload_from_computer' => trans('backend::lang.richeditor.upload_from_computer'),\n                'browse' => trans('backend::lang.richeditor.browse'),\n                'by_url' => trans('backend::lang.richeditor.by_url'),\n                'url_required' => trans('backend::lang.richeditor.url_required'),\n                'url_validation' => trans('backend::lang.richeditor.url_validation'),\n                'add_image_title' => trans('backend::lang.richeditor.add_image'),\n                'add_video_title' => trans('backend::lang.richeditor.add_video'),\n                'add_audio_title' => trans('backend::lang.richeditor.add_audio'),\n                'add_file_title' => trans('backend::lang.richeditor.add_file'),\n                'embedding_code' => trans('backend::lang.richeditor.embedding_code'),\n                'embedding_code_required' => trans('backend::lang.richeditor.embedding_code_required'),\n                'invalid_embedding_code_title' => trans('backend::lang.richeditor.embedding_code_invalid_title'),\n                'invalid_embedding_code_message' => trans('backend::lang.richeditor.embedding_code_invalid'),\n            ],\n            'vendorPath' => Url::asset('/modules/backend/vuecomponents/richeditordocumentconnector/assets/vendor/'),\n        ];\n\n        $this->vars['configuration'] = json_encode($configuration);\n    }\n\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('formwidgetconnector');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/ScrollablePanel.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Scrollable Panel Vue component.\n *\n * Creates a vertically scrollable area with\n * the elevation effect.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ScrollablePanel extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-scrollable-panel';\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/Splitter.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Splitter Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Splitter extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-splitter';\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/Tabs.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Tabs Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Tabs extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-tabs';\n\n    protected $require = [\n        \\Backend\\VueComponents\\DropdownMenu::class\n    ];\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/TreeView.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Treeview Vue component.\n *\n * See NodeDefinition for node options.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass TreeView extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-treeview';\n\n    protected $require = [\n        \\Backend\\VueComponents\\ScrollablePanel::class,\n        \\Backend\\VueComponents\\DropdownMenu::class,\n        \\Backend\\VueComponents\\Modal::class\n    ];\n\n    /**\n     * Adds component specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * The default component script and CSS file are loaded automatically.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/classes/index.js', ['type' => 'module']);\n    }\n\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('node');\n        $this->registerSubcomponent('section');\n        $this->registerSubcomponent('quickaccess');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/Uploader.php",
    "content": "<?php namespace Backend\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Universal file uploader Vue component.\n *\n * JavaScript dependencies:\n *\n * - modules/editor/assets/vendor/bluebirdjs/bluebird.min.js\n * - modules/editor/assets/vendor/promise-queue/promise-queue.js\n *\n * Promise cancellation must be enabled.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Uploader extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'backend-uploader';\n\n    protected $require = [\n        \\Backend\\VueComponents\\ScrollablePanel::class,\n        \\Backend\\VueComponents\\LoadingIndicator::class\n    ];\n\n    /**\n     * Adds dependency assets required for the component.\n     * This method is called before the component's default resources are loaded.\n     * Use $this->addJs() and $this->addCss() to register new assets to include\n     * on the page.\n     * @return void\n     */\n    protected function loadDependencyAssets()\n    {\n        $this->addJs('js/utils.js', ['type' => 'module']);\n    }\n\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('item');\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/autocomplete/assets/js/autocomplete.js",
    "content": "import Autocomplete from '../vendor/vue-autocomplete/vue-autocomplete.esm.js';\nexport default Autocomplete;\n"
  },
  {
    "path": "modules/backend/vuecomponents/autocomplete/assets/vendor/vue-autocomplete/LICENSE.txt",
    "content": "\nCopyright 2019 Trevor Eyre\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "modules/backend/vuecomponents/autocomplete/assets/vendor/vue-autocomplete/october-patch.txt",
    "content": "The vue-autocomplete.min.js script is patched:\n\n1. Added self-invoking function around the file contents.\n2. Global Autocomplete object moved to window.vueAutocomplete"
  },
  {
    "path": "modules/backend/vuecomponents/autocomplete/assets/vendor/vue-autocomplete/vue-autocomplete.esm.js",
    "content": "import{useId as _,openBlock as g,createElementBlock as w,mergeProps as p,renderSlot as V,createElementVNode as y,normalizeProps as F,guardReactiveProps as K,toHandlers as M,Fragment as j,renderList as N,toDisplayString as z}from\"vue\";function q(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function W(t,e,s){return Object.defineProperty(t,\"prototype\",{writable:!1}),t}function u(t,e,s){return(e=Y(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function G(t,e){if(typeof t!=\"object\"||!t)return t;var s=t[Symbol.toPrimitive];if(s!==void 0){var i=s.call(t,e||\"default\");if(typeof i!=\"object\")return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(e===\"string\"?String:Number)(t)}function Y(t){var e=G(t,\"string\");return typeof e==\"symbol\"?e:e+\"\"}var J=function(e,s){return e.matches?e.matches(s):e.msMatchesSelector?e.msMatchesSelector(s):e.webkitMatchesSelector?e.webkitMatchesSelector(s):null},Q=function(e,s){for(var i=e;i&&i.nodeType===1;){if(J(i,s))return i;i=i.parentNode}return null},X=function(e,s){return e.closest?e.closest(s):Q(e,s)},Z=function(e){return!!(e&&typeof e.then==\"function\")},ee=W(function t(){var e=this,s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=s.search,l=s.autoSelect,o=l===void 0?!1:l,a=s.setValue,h=a===void 0?function(){}:a,f=s.setAttribute,L=f===void 0?function(){}:f,P=s.onUpdate,E=P===void 0?function(){}:P,R=s.onSubmit,U=R===void 0?function(){}:R,S=s.onShow,D=S===void 0?function(){}:S,I=s.autocorrect,B=I===void 0?!1:I,x=s.onHide,H=x===void 0?function(){}:x,C=s.onLoading,$=C===void 0?function(){}:C,k=s.onLoaded,O=k===void 0?function(){}:k,A=s.submitOnEnter,T=A===void 0?!1:A;q(this,t),u(this,\"value\",\"\"),u(this,\"searchCounter\",0),u(this,\"results\",[]),u(this,\"selectedIndex\",-1),u(this,\"selectedResult\",null),u(this,\"destroy\",function(){e.search=null,e.setValue=null,e.setAttribute=null,e.onUpdate=null,e.onSubmit=null,e.autocorrect=null,e.onShow=null,e.onHide=null,e.onLoading=null,e.onLoaded=null}),u(this,\"handleInput\",function(n){var r=n.target.value;e.updateResults(r),e.value=r}),u(this,\"handleKeyDown\",function(n){var r=n.key;switch(r){case\"Up\":case\"Down\":case\"ArrowUp\":case\"ArrowDown\":{var d=r===\"ArrowUp\"||r===\"Up\"?e.selectedIndex-1:e.selectedIndex+1;n.preventDefault(),e.handleArrows(d);break}case\"Tab\":{e.selectResult();break}case\"Enter\":{var c=n.target.getAttribute(\"aria-activedescendant\").length>0;e.selectedResult=e.results[e.selectedIndex]||e.selectedResult,e.selectResult(),e.submitOnEnter?e.selectedResult&&e.onSubmit(e.selectedResult):c?n.preventDefault():(e.selectedResult&&e.onSubmit(e.selectedResult),e.selectedResult=null);break}case\"Esc\":case\"Escape\":{e.hideResults(),e.setValue();break}default:return}}),u(this,\"handleFocus\",function(n){var r=n.target.value;e.updateResults(r),e.value=r}),u(this,\"handleBlur\",function(){e.hideResults()}),u(this,\"handleResultMouseDown\",function(n){n.preventDefault()}),u(this,\"handleResultClick\",function(n){var r=n.target,d=X(r,\"[data-result-index]\");if(d){e.selectedIndex=parseInt(d.dataset.resultIndex,10);var c=e.results[e.selectedIndex];e.selectResult(),e.onSubmit(c)}}),u(this,\"handleArrows\",function(n){var r=e.results.length;e.selectedIndex=(n%r+r)%r,e.onUpdate(e.results,e.selectedIndex)}),u(this,\"selectResult\",function(){var n=e.results[e.selectedIndex];n&&e.setValue(n),e.hideResults()}),u(this,\"updateResults\",function(n){var r=++e.searchCounter;e.onLoading(),e.search(n).then(function(d){if(r===e.searchCounter){if(e.results=d,e.onLoaded(),e.results.length===0){e.hideResults();return}e.selectedIndex=e.autoSelect?0:-1,e.onUpdate(e.results,e.selectedIndex),e.showResults()}})}),u(this,\"showResults\",function(){e.setAttribute(\"aria-expanded\",!0),e.onShow()}),u(this,\"hideResults\",function(){e.selectedIndex=-1,e.results=[],e.setAttribute(\"aria-expanded\",!1),e.setAttribute(\"aria-activedescendant\",\"\"),e.onUpdate(e.results,e.selectedIndex),e.onHide()}),u(this,\"checkSelectedResultVisible\",function(n){var r=n.querySelector('[data-result-index=\"'.concat(e.selectedIndex,'\"]'));if(r){var d=n.getBoundingClientRect(),c=r.getBoundingClientRect();c.top<d.top?n.scrollTop-=d.top-c.top:c.bottom>d.bottom&&(n.scrollTop+=c.bottom-d.bottom)}}),this.search=Z(i)?i:function(n){return Promise.resolve(i(n))},this.autoSelect=o,this.setValue=h,this.setAttribute=L,this.onUpdate=E,this.onSubmit=U,this.autocorrect=B,this.onShow=D,this.onHide=H,this.onLoading=$,this.onLoaded=O,this.submitOnEnter=T}),te=function(e,s){var i=e.getBoundingClientRect(),l=s.getBoundingClientRect(),o=i.bottom+l.height>window.innerHeight&&window.innerHeight-i.bottom<i.top&&window.pageYOffset+i.top-l.height>0;return o?\"above\":\"below\"},se=function(e,s,i){var l;return function(){var a=this,h=arguments,f=function(){l=null,e.apply(a,h)};clearTimeout(l),l=setTimeout(f,s)}},ne=function(e){if(e!=null&&e.length){var s=e.startsWith(\"#\");return{attribute:s?\"aria-labelledby\":\"aria-label\",content:s?e.substring(1):e}}},m={name:\"Autocomplete\",inheritAttrs:!1,props:{search:{type:Function,required:!0},baseClass:{type:String,default:\"autocomplete\"},autoSelect:{type:Boolean,default:!1},getResultValue:{type:Function,default:t=>t},defaultValue:{type:String,default:\"\"},debounceTime:{type:Number,default:0},resultListLabel:{type:String,default:void 0},submitOnEnter:{type:Boolean,default:!1}},emits:[\"update\",\"submit\"],data(){let t=new ee({search:this.search,autoSelect:this.autoSelect,setValue:this.setValue,onUpdate:this.handleUpdate,onSubmit:this.handleSubmit,onShow:this.handleShow,onHide:this.handleHide,onLoading:this.handleLoading,onLoaded:this.handleLoaded,submitOnEnter:this.submitOnEnter});return this.debounceTime>0&&(t.handleInput=se(t.handleInput,this.debounceTime)),{core:t,value:this.defaultValue,resultListId:`${this.baseClass}-result-list-${_()}`,results:[],selectedIndex:-1,expanded:!1,loading:!1,position:\"below\",resetPosition:!0}},computed:{rootProps(){return{class:this.baseClass,style:{position:\"relative\"},\"data-expanded\":this.expanded,\"data-loading\":this.loading,\"data-position\":this.position}},inputProps(){let{class:t,style:e,...s}=this.$attrs;return{class:`${this.baseClass}-input`,value:this.value,role:\"combobox\",autocomplete:\"off\",autocapitalize:\"off\",autocorrect:\"off\",spellcheck:\"false\",\"aria-autocomplete\":\"list\",\"aria-haspopup\":\"listbox\",\"aria-owns\":this.resultListId,\"aria-expanded\":this.expanded?\"true\":\"false\",\"aria-activedescendant\":this.selectedIndex>-1?this.resultProps[this.selectedIndex].id:\"\",...s}},inputListeners(){return{input:this.handleInput,keydown:this.core.handleKeyDown,focus:this.core.handleFocus,blur:this.core.handleBlur}},resultListProps(){let t=this.position===\"below\"?\"top\":\"bottom\",e=ne(this.resultListLabel);return{id:this.resultListId,class:`${this.baseClass}-result-list`,role:\"listbox\",[e?.attribute]:e?.content,style:{position:\"absolute\",zIndex:1,width:\"100%\",visibility:this.expanded?\"visible\":\"hidden\",pointerEvents:this.expanded?\"auto\":\"none\",[t]:\"100%\"}}},resultListListeners(){return{mousedown:this.core.handleResultMouseDown,click:this.core.handleResultClick}},resultProps(){return this.results.map((t,e)=>({id:`${this.baseClass}-result-${e}`,class:`${this.baseClass}-result`,\"data-result-index\":e,role:\"option\",...this.selectedIndex===e?{\"aria-selected\":\"true\"}:{}}))}},mounted(){document.body.addEventListener(\"click\",this.handleDocumentClick)},beforeUnmount(){document.body.removeEventListener(\"click\",this.handleDocumentClick)},updated(){!this.$refs.input||!this.$refs.resultList||(this.resetPosition&&this.results.length>0&&(this.resetPosition=!1,this.position=te(this.$refs.input,this.$refs.resultList)),this.core.checkSelectedResultVisible(this.$refs.resultList))},methods:{setValue(t){this.value=t?this.getResultValue(t):\"\"},handleUpdate(t,e){this.results=t,this.selectedIndex=e,this.$emit(\"update\",t,e)},handleShow(){this.expanded=!0},handleHide(){this.expanded=!1,this.resetPosition=!0},handleLoading(){this.loading=!0},handleLoaded(){this.loading=!1},handleInput(t){this.value=t.target.value,this.core.handleInput(t)},handleSubmit(t){this.$emit(\"submit\",t)},handleDocumentClick(t){this.$refs.root.contains(t.target)||this.core.hideResults()}}};function ie(t,e,s,i,l,o){return g(),w(\"div\",p({ref:\"root\"},{class:t.$attrs.class,...t.$attrs.style?{style:t.$attrs.style}:{}}),[V(t.$slots,\"default\",{rootProps:o.rootProps,inputProps:o.inputProps,inputListeners:o.inputListeners,resultListProps:o.resultListProps,resultListListeners:o.resultListListeners,results:l.results,resultProps:o.resultProps},()=>[y(\"div\",F(K(o.rootProps)),[y(\"input\",p({ref:\"input\"},o.inputProps,{onInput:e[0]||(e[0]=(...a)=>o.handleInput&&o.handleInput(...a)),onKeydown:e[1]||(e[1]=(...a)=>l.core.handleKeyDown&&l.core.handleKeyDown(...a)),onFocus:e[2]||(e[2]=(...a)=>l.core.handleFocus&&l.core.handleFocus(...a)),onBlur:e[3]||(e[3]=(...a)=>l.core.handleBlur&&l.core.handleBlur(...a))}),null,16),y(\"ul\",p({ref:\"resultList\"},o.resultListProps,M(o.resultListListeners,!0)),[(g(!0),w(j,null,N(l.results,(a,h)=>V(t.$slots,\"result\",{result:a,props:o.resultProps[h]},()=>[(g(),w(\"li\",p({key:o.resultProps[h].id,ref_for:!0},o.resultProps[h]),z(s.getResultValue(a)),17))])),256))],16)],16)])],16)}m.render=ie;m.__file=\"packages/autocomplete-vue/Autocomplete.vue\";function b(t){b.installed||(b.installed=!0,t.component(\"Autocomplete\",m))}var oe={install:b};m.install=b;export{m as default};\n"
  },
  {
    "path": "modules/backend/vuecomponents/autocomplete/partials/_autocomplete.php",
    "content": ""
  },
  {
    "path": "modules/backend/vuecomponents/codeeditor/assets/css/_autocomplete.css",
    "content": "html {\n    .ace_editor.ace_autocomplete {\n        background-color: #252526;\n        border: 1px solid #454545;\n        color: white;\n        border-radius: 2px;\n        line-height: 150%;\n\n        .ace_completion-highlight {\n            color: var(--bs-primary);\n            font-weight: bold;\n        }\n\n        .ace_marker-layer {\n            .ace_active-line {\n                background-color: var(--bs-primary);\n                opacity: 0.4;\n            }\n\n            .ace_line-hover {\n                background-color: rgba(255, 255, 255, 0.1);\n                border: none;\n            }\n        }\n\n        .ace_rightAlignedText {\n            display: none;\n            color: rgba(255, 255, 255, 0.7);\n            padding: 1px 4px;\n            margin-top: -1px;\n            border-radius: 2px;\n            z-index: 1;\n        }\n\n        .ace_line {\n            padding-left: 21px;\n\n            &:before {\n                width: 14px;\n                height: 16px;\n                display: block;\n                margin-top: 3px;\n                left: 4px;\n                position: absolute;\n                background-position: -144px -38px;\n            }\n\n            &.october-cms-tag {\n                &:before {\n                    width: 14px;\n                    left: 6px;\n                    background-position: -130px -40px;\n                }\n            }\n\n            &.october-cms-partial {\n                &:before {\n                    width: 11px;\n                    height: 11px;\n                    margin-top: 4px;\n                    background-position: -165px -40px;\n                }\n            }\n\n            &.ace_selected {\n                .ace_rightAlignedText {\n                    display: inline-block;\n                    background-color: #373738;\n                }\n            }\n        }\n    }\n\n    .ace_tooltip.ace_doc-tooltip {\n        background-color: #252526;\n        border: 1px solid #454545;\n        color: white;\n        border-radius: 2px;\n        padding: 7px 10px;\n        line-height: 150%;\n        white-space: normal;\n        max-width: 250px;\n        outline: none;\n        font-size: 13px;\n        margin: 0 10px !important;\n\n        a {\n            color: white;\n            text-decoration: underline;\n        }\n    }\n\n    .ace_marker-layer .ace_link_marker {\n        position: absolute;\n        border-bottom: 1px solid var(--bs-primary);\n        border-radius: 0;\n        cursor: pointer;\n        pointer-events: auto;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/codeeditor/assets/css/codeeditor.css",
    "content": "@import \"_autocomplete.css\";\n\n.component-backend-codeeditor {\n    position: relative;\n\n    .editor-element {\n        position: absolute;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n\n        border-radius: 4px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/codeeditor/assets/js/codeeditor.js",
    "content": "jQuery(function() {\n    // Fix EMMET HTML when syntax is Twig\n    //\n    +(function(exports) {\n        if (exports.ace && typeof exports.ace.require == 'function') {\n            var emmetExt = exports.ace.require('ace/ext/emmet');\n\n            if (emmetExt && emmetExt.AceEmmetEditor && emmetExt.AceEmmetEditor.prototype.getSyntax) {\n                var coreGetSyntax = emmetExt.AceEmmetEditor.prototype.getSyntax;\n\n                emmetExt.AceEmmetEditor.prototype.getSyntax = function() {\n                    var $syntax = $.proxy(coreGetSyntax, this)();\n                    return $syntax == 'twig' ? 'html' : $syntax;\n                };\n            }\n        }\n    })(window);\n});\n\nfunction configureAceEditor(component) {\n    var editor = component.editor;\n\n    // Fixes a weird notice about scrolling\n    editor.$blockScrolling = Infinity;\n\n    editor.on('change', component.onEditorChange);\n    component.lastCachedValue = component.value === null ? '' : component.value;\n    editor.getSession().setValue(component.lastCachedValue);\n\n    var options = JSON.parse(component.$el.getAttribute('data-configuration'));\n\n    // Set theme, anticipated languages should be preloaded\n    //\n    oc.AssetManager.load(\n        {\n            js: [options.vendorPath + '/theme-' + options.theme + '.js']\n        },\n        function() {\n            editor.setTheme('ace/theme/' + options.theme);\n            editor.getSession().setMode({\n                path: 'ace/mode/' + component.language,\n                inline: component.language === 'php'\n            });\n        }\n    );\n\n    editor.setShowInvisibles(options.showInvisibles);\n    editor.setBehavioursEnabled(options.autoCloseTags);\n    editor.setHighlightActiveLine(options.highlightActiveLine);\n    editor.renderer.setShowGutter(options.showGutter);\n    editor.renderer.setShowPrintMargin(options.showPrintMargin);\n    editor.setHighlightSelectedWord(options.highlightSelectedWord);\n    editor.renderer.setHScrollBarAlwaysVisible(options.hScrollBarAlwaysVisible);\n    editor.setDisplayIndentGuides(options.displayIndentGuides);\n    editor.getSession().setUseSoftTabs(options.useSoftTabs);\n    editor.getSession().setTabSize(parseInt(options.tabSize) || 4);\n    editor.setReadOnly(component.readOnly);\n    editor.getSession().setFoldStyle(options.codeFolding);\n    editor.setFontSize(parseInt(options.fontSize) || 12);\n\n    setWordWrap(options.wordWrap, editor);\n\n    ace.require('ace/config').set('basePath', options.vendorPath);\n\n    var autocompletion = options.autocompletion || 'manual';\n    editor.setOptions({\n        enableEmmet: component.enableEmmet,\n        enableBasicAutocompletion: autocompletion === 'basic',\n        enableSnippets: options.enableSnippets,\n        enableLiveAutocompletion: autocompletion === 'live'\n    });\n\n    editor.renderer.setScrollMargin(options.margin, options.margin, 0, 0);\n    editor.renderer.setPadding(options.margin);\n\n    if (component.completers) {\n        // The concat operation does not change the original\n        // array but instead returns a new array. This is the\n        // desired behavior because we want to add the completers\n        // only to a specific Ace instance.\n        //\n        editor.completers = editor.completers.concat(component.completers);\n    }\n\n    editor.commands.on('afterExec', function(e) {\n        if (e.command.name == 'insertstring') {\n            component.$emit('insertstring', e, ace);\n        }\n    });\n\n    component.$emit('initeditor', editor, ace);\n}\n\nfunction setWordWrap(mode, editor) {\n    var session = editor.getSession(),\n        renderer = editor.renderer;\n\n    switch (mode + '') {\n        default:\n        case 'off':\n            session.setUseWrapMode(false);\n            renderer.setPrintMarginColumn(80);\n            break;\n        case '40':\n            session.setUseWrapMode(true);\n            session.setWrapLimitRange(40, 40);\n            renderer.setPrintMarginColumn(40);\n            break;\n        case '80':\n            session.setUseWrapMode(true);\n            session.setWrapLimitRange(80, 80);\n            renderer.setPrintMarginColumn(80);\n            break;\n        case 'fluid':\n            session.setUseWrapMode(true);\n            session.setWrapLimitRange(null, null);\n            renderer.setPrintMarginColumn(80);\n            break;\n    }\n}\n\nfunction checkSize(component) {\n    if (!component.editor) {\n        return;\n    }\n\n    if (component.$el.offsetParent === null) {\n        return;\n    }\n\n    if (component.width === null) {\n        component.width = component.$el.offsetWidth;\n    }\n\n    if (component.height === null) {\n        component.height = component.$el.offsetHeight;\n    }\n\n    if (component.width != component.$el.offsetWidth || component.height != component.$el.offsetHeight) {\n        component.editor.resize();\n    }\n\n    component.width = component.$el.offsetWidth;\n    component.height = component.$el.offsetHeight;\n}\n\nexport default {\n    props: {\n        fullHeight: {\n            type: Boolean,\n            default: true\n        },\n        readOnly: {\n            type: Boolean,\n            default: false\n        },\n        enableEmmet: {\n            type: Boolean,\n            default: true\n        },\n        containerCssClass: {\n            type: String,\n            default: ''\n        },\n        completers: Array,\n        value: String,\n        language: String\n    },\n    data: function() {\n        return {\n            editorId: null,\n            editor: null,\n            changeTimeoutlId: null,\n            width: null,\n            height: null,\n            sizeIntervalId: null,\n            lastCachedValue: ''\n        };\n    },\n    computed: {\n        cssClass: function computeCssClass() {\n            var result = '';\n\n            if (this.fullHeight) {\n                result += ' full-height-strict';\n            }\n\n            result += ' ' + this.containerCssClass;\n\n            return result;\n        }\n    },\n    methods: {\n        onEditorChange: function onEditorChange() {\n            if (this.changeTimeoutlId !== null) {\n                clearTimeout(this.changeTimeoutlId);\n                this.changeTimeoutlId = null;\n            }\n\n            var that = this;\n            this.changeTimeoutlId = setTimeout(function() {\n                that.lastCachedValue = that.editor.getSession().getValue();\n                that.$emit('input', that.lastCachedValue);\n                that.changeTimeoutlId = null;\n            }, 100);\n        }\n    },\n    mounted: function onMounted() {\n        this.editorId = $.oc.domIdManager.generate('codeeditor');\n\n        var that = this;\n        Vue.nextTick(function() {\n            that.editor = Vue.markRaw(ace.edit(that.editorId));\n\n            configureAceEditor(that);\n        });\n\n        this.sizeIntervalId = setInterval(function() {\n            checkSize(that);\n        }, 500);\n    },\n    beforeUnmount: function beforeUnmount() {\n        this.$emit('destroy', this.editor);\n\n        this.editor.destroy();\n        this.editor.off('change', this.onEditorChange);\n\n        var keys = Object.keys(this.editor.renderer);\n        for (var i = 0, len = keys.length; i < len; i++) {\n            this.editor.renderer[keys[i]] = null;\n        }\n\n        keys = Object.keys(this.editor);\n        for (var i = 0, len = keys.length; i < len; i++) {\n            this.editor[keys[i]] = null;\n        }\n\n        clearInterval(this.sizeIntervalId);\n\n        this.editor = null;\n    },\n    watch: {\n        value: function onValueChanged(newValue, oldValue) {\n            if (this.editor) {\n                if (newValue === null) {\n                    newValue = '';\n                }\n\n                if (newValue == this.lastCachedValue) {\n                    return;\n                }\n\n                this.editor.getSession().setValue(newValue);\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/codeeditor/partials/_codeeditor.php",
    "content": "<div\n    class=\"component-backend-codeeditor flex-layout-column\"\n    :class=\"cssClass\"\n    data-configuration=\"<?= e($configuration) ?>\"\n>\n    <div class=\"flex-layout-item stretch relative\">\n        <div v-bind:id=\"editorId\" class=\"editor-element\"></div>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/document/assets/css/_contents.css",
    "content": ".component-backend-document {\n    .document-content-container {\n        background-color: var(--oc-document-content-bg);\n    }\n\n    .document-progress-indicator {\n        position: absolute;\n        top: -1px;\n    }\n\n    .processing-fade-in-enter-active {\n        transition: opacity 0.3s;\n    }\n\n    .processing-fade-in-enter {\n        opacity: 0;\n    }\n\n    .document-loading-error {\n        position: relative;\n        padding-left: 45px;\n        max-width: 550px;\n        margin: 0 30px;\n\n        &:before {\n            display: block;\n            width: 27px;\n            height: 31px;\n            background-position: 0 -35px;\n            position: absolute;\n            left: 0;\n            top: 0;\n        }\n\n        h3 {\n            font-size: 16px;\n            margin: 0;\n            padding: 6px 0 9px 0;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/assets/css/_header.css",
    "content": ".component-backend-document {\n    .document-header-container {\n        opacity: 1;\n        padding: 10px 20px;\n        border-bottom: 1px solid var(--oc-primary-border);\n\n        .document-header {\n            position: relative;\n\n            &.has-document-icon {\n                padding-left: 30px;\n            }\n\n            &.has-close-icon {\n                padding-right: 30px;\n            }\n        }\n\n        .close-icon {\n            position: absolute;\n            top: 11px;\n            right: 0;\n            width: 19px;\n            height: 19px;\n            border-radius: 20px;\n\n            opacity: 1;\n            font-size: 0;\n            color: transparent;\n\n            &:after {\n                display: none !important;\n            }\n\n            &:focus {\n                outline: none;\n                background-color: var(--oc-toolbar-hover-bg);\n            }\n\n            &:before {\n                display: block;\n                width: 11px;\n                height: 11px;\n                position: absolute;\n                background-position: -253px 0;\n                top: 4px;\n                right: 4px;\n            }\n\n            &:focus,\n            &:hover {\n                &:before {\n                    background-position: -268px 0;\n                }\n            }\n        }\n\n        .document-icon {\n            display: block;\n            position: absolute;\n            left: 0;\n            top: 11px;\n            width: 18px;\n            height: 18px;\n            border-radius: 4px;\n\n            i {\n                display: block;\n                color: white;\n                position: absolute;\n                left: 4px;\n                top: 4px;\n                font-size: 10px;\n            }\n        }\n\n        input.header-title, input.header-subtitle {\n            border: 1px solid var(--bs-body-bg);\n            color: var(--bs-body-color);\n            outline: none;\n            background: transparent;\n            border-radius: 4px;\n            padding: 1px;\n            -webkit-appearance: none;\n\n            &[disabled] {\n                color: var(--oc-form-control-disabled-color);\n            }\n        }\n\n        input.header-title {\n            display: block;\n            font-size: 24px;\n            width: 100%;\n            margin: 0 -2px;\n        }\n\n        .subtitle-label {\n            color: var(--oc-primary-color);\n            margin-right: 3px;\n        }\n    }\n\n    .document-header-fade-enter-active {\n        transition: opacity .3s;\n    }\n\n    .document-header-fade-leave-active {\n        transition: opacity .1s;\n    }\n\n    .document-header-fade-enter, .document-header-fade-leave-to {\n        opacity: 0;\n    }\n\n    &.no-header-elements .document-header-container {\n        padding: 0;\n    }\n}\n\n@media (hover: hover) {\n    .component-backend-document {\n        .document-header-container {\n            input.header-title, input.header-subtitle {\n                &:not([disabled]):hover {\n                    border: 1px solid var(--bs-border-color);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/assets/css/_toolbar.css",
    "content": ".component-backend-document {\n    .document-toolbar-container {\n        background-color: var(--oc-document-toolbar-bg);\n        border-bottom: 1px solid var(--oc-primary-border);\n\n        > div {\n            font-size: 0;\n            white-space: nowrap;\n            padding: 3px 0;\n        }\n    }\n\n    &.no-toolbar-elements .document-toolbar-container {\n        display: none;\n    }\n\n    .document-toolbar-scrollable {\n        width: 100%;\n        overflow: hidden;\n    }\n\n    .document-toolbar-element {\n        display: inline-block;\n        font-size: 14px;\n        color: var(--oc-toolbar-color);\n        line-height: 33px;\n        margin-right: 8px;\n        vertical-align: top;\n        user-select: none;\n\n        &.button-icon-only {\n            + .button-icon-only {\n                margin-left: -6px;\n            }\n        }\n\n        &:first-child {\n            margin-left: -4px;\n            padding-left: 20px;\n        }\n\n        &:last-child {\n            margin-right: 0;\n            padding-right: 20px;\n        }\n\n        &.element-type-separator {\n            border-right: 1px solid var(--oc-primary-border);\n            height: 25px;\n            position: relative;\n            top: 5px;\n\n            &:first-child {\n                border-right: none;\n                padding-left: 0 !important;\n            }\n\n            &:last-child {\n                display: none; /* Do not display separators in the end of the toolbar */\n            }\n        }\n\n        .backend-toolbar-button {\n            vertical-align: top;\n            text-align: left;\n\n            &.icon-only {\n                text-align: center;\n            }\n\n            &.has-menu-trigger {\n                border-top-right-radius: 0;\n                border-bottom-right-radius: 0;\n            }\n\n            &.menu-trigger {\n                padding: 0;\n                border-top-left-radius: 0;\n                border-bottom-left-radius: 0;\n                width: 18px;\n                min-width: 0;\n                position: relative;\n\n                &:before {\n                    content: '';\n                    display: block;\n                    border-right: 1px solid var(--oc-primary-border);\n                    height: 15px;\n                    position: absolute;\n                    top: 10px;\n                    margin-left: -2px;\n                    transition: top 0.1s, height 0.1s;\n                }\n\n                &.pressed:before {\n                    border-right-color: var(--oc-selection-text);\n                    opacity: 0.5;\n                }\n\n                &:after {\n                    font-family: 'octo-icon' !important;\n                    speak: none;\n                    font-style: normal;\n                    font-weight: normal;\n                    font-variant: normal;\n                    text-transform: none;\n                    line-height: 1;\n                    -webkit-font-smoothing: antialiased;\n                    -moz-osx-font-smoothing: grayscale;\n                    content: \"\\e90a\";\n                    font-size: 16px;\n                    vertical-align: middle;\n                    position: relative;\n                    top: -1px;\n                }\n            }\n\n            &.pressed {\n                background: rgba(var(--oc-selection-rgb), .2) !important;\n                color: var(--oc-selection-text);\n            }\n\n            .button-label {\n                display: inline-block;\n            }\n        }\n\n        &:hover {\n            .backend-toolbar-button {\n                background: var(--oc-toolbar-hover-bg);\n\n                &.menu-trigger:before {\n                    border-right: 1px solid #95A5A6;\n                    top: 7px;\n                    height: 20px;\n                }\n            }\n        }\n    }\n\n    &.built-in-mode {\n        .document-toolbar-element {\n            &:first-child {\n                margin-left: 0;\n                padding-left: 4px;\n            }\n\n            &:last-child {\n                padding-right: 4px !important;\n            }\n        }\n    }\n\n    .fixed-right:after,\n    .document-toolbar-scroll-container:before {\n        content: '';\n        position: absolute;\n        display: block;\n        width: 5px;\n        height: 39px;\n        opacity: 0;\n        transition: opacity 0.3s;\n    }\n\n    .fixed-right {\n        position: relative;\n\n        &:after {\n            background: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, #000 100%);\n            left: -5px;\n            top: -3px;\n        }\n\n        .document-toolbar-element {\n            &:first-child {\n                margin-left: 0;\n                padding-left: 5px;\n            }\n\n            &:last-child {\n                padding-right: 14px;\n            }\n        }\n    }\n\n    .document-toolbar-scroll-container {\n        position: relative;\n\n        &:before {\n            left: 0;\n            top: 0;\n            background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, 0) 100%);\n        }\n\n        &.scroll-before:before {\n            opacity: 0.15;\n        }\n\n        &.scroll-after {\n            .fixed-right:after {\n                opacity: 0.15;\n            }\n        }\n    }\n}\n\n.backend-document-toolbar-button-length-tester {\n    white-space: pre-wrap;\n    font-size: 14px;\n    position: fixed;\n    visibility: hidden;\n    left: -1000em;\n    top: -1000em;\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/assets/css/document.css",
    "content": "@import \"_header.css\";\n@import \"_contents.css\";\n@import \"_toolbar.css\";\n\n.component-backend-document {\n    &.full-screen {\n        background: var(--bs-body-bg);\n        position: fixed;\n        left: 0;\n        top: 0;\n        width: 100%;\n        height: 100%;\n        z-index: var(--oc-zindex-dropdown);\n    }\n\n    .document-fade-in-enter-active {\n        transition: opacity 0.3s;\n    }\n\n    .document-fade-in-enter {\n        opacity: 0;\n    }\n}\n\nbody.backend-document-layout {\n    /* Fixes Edge/IE11 page horizontal toolbars */\n    overflow-x: hidden;\n}\n\nbody.component-backend-document-fullscreen {\n    overflow: hidden;\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/assets/js/document.js",
    "content": "export default {\n    props: {\n        fullHeight: {\n            type: Boolean,\n            default: true\n        },\n        headerCollapsed: {\n            type: Boolean,\n            default: false\n        },\n        fullScreen: {\n            type: Boolean,\n            default: false\n        },\n        loading: {\n            type: Boolean,\n            default: false\n        },\n        processing: {\n            type: Boolean,\n            default: false\n        },\n        errorLoadingDocument: {\n            type: String,\n            default: ''\n        },\n        errorLoadingDocumentHeader: {\n            type: String,\n            default: 'Error loading document'\n        },\n        containerCssClass: {\n            type: String,\n            default: ''\n        },\n        builtInMode: {\n            type: Boolean,\n            default: false\n        },\n        toolbarCommandEventBus: null\n    },\n    computed: {\n        cssClass: function computeCssClass() {\n            var result = '';\n\n            if (this.fullHeight) {\n                result += ' full-height-strict';\n            }\n\n            if (this.fullScreen) {\n                result += ' full-screen';\n            }\n\n            if (this.loading || this.errorLoadingDocument) {\n                result += ' justify-center align-center';\n            }\n\n            if (this.builtInMode) {\n                result += ' built-in-mode';\n            }\n\n            if (!this.$slots.header) {\n                result += ' no-header-elements';\n            }\n\n            if (!this.$slots.toolbar) {\n                result += ' no-toolbar-elements';\n            }\n\n            result += ' ' + this.containerCssClass;\n\n            return result;\n        }\n    },\n    methods: {\n        onDocumentToolbarCommand: function onDocumentToolbarCommand(ev, eventData) {\n            // In Vue 3, $children is removed. Child components should listen to\n            // toolbarCommandEventBus directly via their internalEventBus.\n            if (this.toolbarCommandEventBus) {\n                this.toolbarCommandEventBus.emit('toolbarcmd', eventData);\n            }\n        }\n    },\n    mounted: function onMounted() {\n        $(this.$el).on('documenttoolbarcmd.document', this.onDocumentToolbarCommand);\n    },\n    watch: {\n        fullScreen: function watchFullScreen(value) {\n            $(document.body).toggleClass('component-backend-document-fullscreen', value);\n        }\n    },\n    beforeUnmount: function beforeUnmount() {\n        $(this.$el).off('.document');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/assets/js/header.js",
    "content": "export default {\n    props: {\n        data: {\n            type: Object,\n            required: true\n        },\n        titleProperty: {\n            type: String\n        },\n        subtitleProperty: {\n            type: String\n        },\n        hideSubtitleEditor: {\n            type: Boolean,\n            default: false\n        },\n        disableTitleEditor: {\n            type: Boolean,\n            default: false\n        },\n        isNewDocument: {\n            type: Boolean,\n            default: true\n        },\n        subtitleLabel: String,\n        disabled: Boolean,\n        subtitlePresetType: {\n            type: String,\n            validator: function (value) {\n                return ['url', 'file', 'exact', 'camel'].indexOf(value) !== -1;\n            }\n        },\n        documentIcon: {\n            type: Object,\n            default: null\n        },\n        showCloseIcon: {\n            type: Boolean,\n            default: false\n        },\n        subtitlePresetRemoveWords: Boolean\n    },\n    data: function () {\n        var subtitleEdited = false;\n\n        if (this.subtitleProperty) {\n            subtitleEdited = this.data[this.subtitleProperty] !== undefined;\n        }\n\n        return {\n            subtitleEdited: subtitleEdited\n        };\n    },\n    computed: {\n        documentIconStyle: function computeDocumentIconStyle() {\n            return {\n                'background-color': this.documentIcon.backgroundColor ? this.documentIcon.backgroundColor : '#E67E21'\n            };\n        },\n    },\n    methods: {\n        focusTitle: function focusTitle() {\n            if (this.$refs.titleInput) {\n                this.$refs.titleInput.focus();\n            }\n        },\n\n        onTitleInput: function onTitleInput() {\n            if (!this.isNewDocument || this.subtitleEdited || !this.subtitlePresetType || !this.subtitleProperty) {\n                return;\n            }\n\n            var value = oc.InputPresetEngine.formatValue(\n                {\n                    inputPresetType: this.subtitlePresetType,\n                    inputPresetRemoveWords: this.subtitlePresetRemoveWords\n                },\n                this.data[this.titleProperty]\n            );\n\n            // Vue 3: Direct assignment is reactive\n            this.data[this.subtitleProperty] = value;\n            this.$emit('titleinput');\n        },\n\n        onSubtitleInput: function onSubtitleInput() {\n            this.subtitleEdited = true;\n        }\n    },\n    mounted: function onMounted() {\n        this.onTitleInput();\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/assets/js/toolbar-button.js",
    "content": "export default {\n    props: {\n        settings: Object,\n        toolbarDisabled: Boolean\n    },\n    computed: {\n        icon: function computeIcon() {\n            if (this.settings.icon) {\n                return this.settings.icon;\n            }\n        },\n\n        command: function computeCommand() {\n            if (this.settings.command) {\n                return this.settings.command;\n            }\n        },\n\n        label: function computeLabel() {\n            var label = '';\n\n            if (this.settings.label) {\n                label = this.settings.label;\n            }\n\n            if (this.settings.labelFromSelectedItem && this.settings.menuitems) {\n                for (var index = 0; index < this.settings.menuitems.length; index++) {\n                    var menuItem = this.settings.menuitems[index];\n\n                    if (menuItem.checked) {\n                        label = menuItem.label;\n                        break;\n                    }\n                }\n            }\n\n            return label;\n        },\n\n        tooltip: function computeTooltip() {\n            if (this.settings.tooltip) {\n                return this.settings.tooltip;\n            }\n        },\n\n        tooltipHotkey: function computeTooltipHotkey() {\n            if (this.settings.tooltip) {\n                return this.settings.tooltipHotkey;\n            }\n        },\n\n        ariaControlsId: function computeAiaControlsId() {\n            if (this.settings.type === 'dropdown') {\n                return this.menuId;\n            }\n        },\n\n        cssClass: function computeCssClass() {\n            return {\n                'has-menu': this.settings.type === 'dropdown',\n                'icon-only': !this.label,\n                'has-menu-trigger': this.settings.type != 'dropdown' && this.settings.menuitems,\n                'disabled-button': this.settings.disabled || this.toolbarDisabled,\n                pressed: !!this.settings.pressed\n            };\n        },\n\n        menuTriggerCssClass: function computeMenuTriggerCssClass() {\n            return {\n                pressed: !!this.settings.pressed\n            };\n        },\n\n        titleStyle: function computeTitleStyle() {\n            var result = {};\n\n            if (!this.settings.labelFromSelectedItem || !this.settings.menuitems) {\n                return result;\n            }\n\n            var $testerContainer = $('<div class=\"backend-document-toolbar-button-length-tester\">'),\n                labelsText = '';\n            for (var index = 0; index < this.settings.menuitems.length; index++) {\n                var menuItem = this.settings.menuitems[index];\n                if (typeof menuItem.label !== 'string') {\n                    continue;\n                }\n\n                labelsText += '\\n' + menuItem.label;\n            }\n\n            $testerContainer.text(labelsText);\n\n            $(document.body).append($testerContainer);\n            result.width = $testerContainer.width() + 'px';\n            $testerContainer.remove();\n\n            return result;\n        }\n    },\n    data: function () {\n        return {\n            menuId: null,\n            buttonId: null,\n            menuButtonId: null\n        };\n    },\n    methods: {\n        onClick: function onClick(ev, isHotkey, isMenuButton) {\n            Vue.nextTick(oc.octoberTooltips.clear, 1);\n\n            if (this.settings.disabled || this.toolbarDisabled || $(document.body).hasClass('drag')) {\n                ev.preventDefault();\n                ev.stopPropagation();\n                return false;\n            }\n\n            if (this.settings.href) {\n                if (isHotkey) {\n                    window.open(this.settings.href, this.settings.target ? this.settings.target : '_self');\n                }\n\n                return;\n            }\n\n            ev.preventDefault();\n            ev.stopPropagation();\n\n            if (this.settings.type != 'dropdown' && !isMenuButton) {\n                if (!this.settings.command) {\n                    throw new Error('command option is not set for toolbar button');\n                }\n\n                this.$emit('command', this.settings.command, isHotkey, ev, this.$el, this.settings.customData);\n                return false;\n            }\n\n            if (this.settings.emitCommandBeforeMenu) {\n                this.$emit('command', this.settings.emitCommandBeforeMenu, isHotkey, ev, this.$el, this.settings.customData);\n            }\n\n            this.$refs.menu.showMenu(this.settings.type == 'dropdown' ? this.$refs.button : this.$refs.menuButton);\n            return false;\n        },\n\n        onMenuClosedWithEsc: function onMenuClosedWithEsc() {\n            var that = this;\n            Vue.nextTick(function () {\n                that.$refs.button.focus();\n            });\n        },\n\n        onMenuItemCommand: function onMenuItemCommand(command) {\n            this.$emit('command', command, false, null, this.$el);\n        },\n\n        onMenuShown: function onMenuShown() {\n            $(this.$refs.button).attr('aria-expanded', 'true');\n            this.$emit('dropdowncontentshown');\n        },\n\n        onMenuHidden: function onMenuHidden() {\n            $(this.$refs.button).removeAttr('aria-expanded');\n            this.$emit('dropdowncontenthidden');\n        },\n\n        onAlignToTrigger: function onAlignToTrigger(ev) {\n            if (this.settings.type == 'dropdown') {\n                ev.triggerElement = this.$refs.button;\n            }\n            else {\n                ev.triggerElement = this.$refs.menuButton;\n            }\n        },\n\n        onHotkey: function onHotkey(ev) {\n            ev.preventDefault();\n\n            if ((this.settings.type == 'dropdown' || this.settings.href) && !$(this.$el).is(':visible')) {\n                // Ignore hotkeys for invisible link buttons and buttons with dropdown menus\n                //\n                return;\n            }\n\n            this.onClick(ev, true);\n        }\n    },\n    mounted: function onMounted() {\n        this.menuId = $.oc.domIdManager.generate('dropdown-menu');\n        this.buttonId = $.oc.domIdManager.generate('document-toolbar-button');\n        this.menuButtonId = $.oc.domIdManager.generate('document-toolbar-menu-button');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/assets/js/toolbar.js",
    "content": "export default {\n    props: {\n        elements: Array,\n        disabled: Boolean\n    },\n    methods: {\n        onElementCommand: function onElementCommand(command, isHotkey, ev, targetElement, customData) {\n            this.$emit('command', command, isHotkey, ev, targetElement, customData);\n            $(this.$el).trigger('documenttoolbarcmd', {\n                command: command,\n                isHotkey: isHotkey,\n                ev\n            });\n        },\n\n        onDropdownContentShown: function onDropdownContentShown() {\n            $(this.$refs.scrollable).dragScroll('pause');\n        },\n\n        onDropdownContentHidden: function onDropdownContentHidden() {\n            $(this.$refs.scrollable).dragScroll('resume');\n        }\n    },\n    computed: {\n        flattenedElements: function computeFlattenedElements() {\n            if (!this.elements) {\n                return [];\n            }\n\n            var result = [];\n\n            for (var index = 0; index < this.elements.length; index++) {\n                var element = this.elements[index];\n                if (!Array.isArray(element)) {\n                    result.push(element);\n                }\n                else {\n                    result = result.concat(element);\n                }\n            }\n\n            return result;\n        },\n\n        scrollableElements: function computeScrollableElements() {\n            return this.flattenedElements.filter(function (el) {\n                return !el.fixedRight;\n            });\n        },\n\n        fixedRightElements: function computeFixedRightElements() {\n            return this.flattenedElements.filter(function (el) {\n                return el.fixedRight;\n            });\n        }\n    },\n    mounted: function mounted() {\n        $(this.$refs.scrollable).dragScroll({\n            useDrag: true,\n            useNative: false,\n            noScrollClasses: false,\n            scrollClassContainer: this.$refs.toolbarContainer\n        });\n    },\n    beforeUnmount: function beforeUnmount() {\n        $(this.$refs.scrollable).dragScroll('dispose');\n    },\n    watch: {\n        elements: function watchElements() {\n            $(this.$refs.scrollable).dragScroll('fixScrollClasses');\n        },\n        disabled: function watchDisabled() {\n            Vue.nextTick(oc.octoberTooltips.clear, 1);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/partials/_document.php",
    "content": "<div\n    class=\"component-backend-document flex-layout-column\"\n    :class=\"cssClass\"\n>\n    <transition name=\"document-fade-in\">\n        <template v-if=\"!loading && !errorLoadingDocument\">\n            <transition name=\"document-header-fade\">\n                <div class=\"document-header-container flex-layout-item fix\" v-show=\"!headerCollapsed\">\n                    <slot name=\"header\"></slot>\n                </div>\n            </transition>\n        </template>\n    </transition>\n\n    <transition name=\"document-fade-in\">\n        <div v-if=\"!loading && !errorLoadingDocument\" class=\"document-toolbar-container flex-layout-item fix\">\n            <slot name=\"toolbar\"></slot>\n        </div>\n    </transition>\n\n    <div v-if=\"!loading && !errorLoadingDocument\" class=\"flex-layout-item fix\">\n        <slot name=\"drawer\"></slot>\n    </div>\n\n    <transition name=\"document-fade-in\">\n        <div v-if=\"!loading && !errorLoadingDocument\" class=\"document-content-container flex-layout-item stretch relative\">\n            <slot name=\"content\"></slot>\n\n            <transition name=\"processing-fade-in\">\n                <backend-loading-indicator\n                    v-if=\"processing\"\n                    indicator-style=\"stripe\"\n                    css-class=\"document-progress-indicator\"\n                ></backend-loading-indicator>\n            </transition>\n        </div>\n    </transition>\n\n    <div v-if=\"loading\" class=\"flex-layout-item justify-center\">\n        <backend-loading-indicator\n            size=\"small\"\n        ></backend-loading-indicator>\n    </div>\n\n    <transition name=\"processing-fade-in\">\n        <div v-if=\"errorLoadingDocument\" class=\"flex-layout-item justify-center\">\n            <div class=\"document-loading-error backend-icon-background-pseudo\">\n                <h3 v-text=\"errorLoadingDocumentHeader\"></h3>\n                <p v-text=\"errorLoadingDocument\"></p>\n            </div>\n        </div>\n    </transition>\n</div>\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/partials/_header.php",
    "content": "<div class=\"document-header\" :class=\"{'has-document-icon': documentIcon, 'has-close-icon': showCloseIcon}\">\n    <span\n        v-if=\"documentIcon\"\n        class=\"document-icon\"\n        v-bind:style=\"documentIconStyle\"\n    >\n        <i :class=\"documentIcon.cssClass\"></i>\n    </span>\n\n    <input type=\"text\" ref=\"titleInput\" class=\"header-title\" v-model=\"data[titleProperty]\" v-bind:disabled=\"disabled || disableTitleEditor\" @input=\"onTitleInput\"></input>\n\n    <div class=\"flex-layout-row\" v-if=\"subtitleProperty\" v-show=\"!hideSubtitleEditor\">\n        <div class=\"flex-layout-item fix subtitle-label center\" v-text=\"subtitleLabel + ':'\"></div>\n        <input\n            type=\"text\"\n            class=\"header-subtitle flex-layout-item stretch\"\n            v-model=\"data[subtitleProperty]\"\n            v-bind:disabled=\"disabled\"\n            @input=\"onSubtitleInput\"\n        ></input>\n    </div>\n\n    <button\n        v-if=\"showCloseIcon\"\n        class=\"close close-icon backend-icon-background-pseudo\"\n        @click=\"$emit('documentcloseclick')\"\n    >\n        <span aria-hidden=\"true\">×</span>\n    </button>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/document/partials/_toolbar-button.php",
    "content": "<div v-oc-hotkey:[settings.hotkey]=\"onHotkey\" v-if=\"!settings.hidden\">\n    <a\n        role=\"button\"\n        v-if=\"settings.href\"\n        v-bind:href=\"settings.href\"\n        v-bind:target=\"settings.target ? settings.target : '_self'\"\n        v-bind:disabled=\"(settings.disabled || toolbarDisabled) || null\"\n        v-bind:tabindex=\"settings.disabled || toolbarDisabled ? -1 : 0\"\n        v-bind:aria-controls=\"ariaControlsId\"\n        v-bind:aria-haspopup=\"settings.type == 'dropdown'\"\n        v-bind:id=\"buttonId\"\n        v-bind:data-cmd=\"command\"\n        v-bind:data-tooltip-text=\"tooltip\"\n        v-bind:data-tooltip-hotkey=\"tooltipHotkey\"\n        class=\"backend-toolbar-button\"\n        :class=\"cssClass\"\n        @click=\"onClick\"\n        ref=\"button\"\n    >\n        <i v-if=\"icon\" :class=\"icon\"></i>\n        <span class=\"button-label\" v-if=\"label\" v-text=\"label\"></span>\n    </a>\n    <button\n        type=\"button\"\n        v-else\n        v-bind:disabled=\"settings.disabled || toolbarDisabled\"\n        v-bind:tabindex=\"settings.disabled || toolbarDisabled ? -1 : 0\"\n        v-bind:aria-controls=\"ariaControlsId\"\n        v-bind:aria-haspopup=\"settings.type == 'dropdown'\"\n        v-bind:id=\"buttonId\"\n        v-bind:data-cmd=\"command\"\n        v-bind:data-tooltip-text=\"tooltip\"\n        v-bind:data-tooltip-hotkey=\"tooltipHotkey\"\n        class=\"backend-toolbar-button\"\n        :class=\"cssClass\"\n        @click=\"onClick\"\n        ref=\"button\"\n    >\n        <i v-if=\"icon\" :class=\"icon\"></i>\n        <span class=\"button-label\" v-if=\"label\" v-text=\"label\" :style=\"titleStyle\"></span>\n    </button\n    ><button\n        type=\"button\"\n        v-if=\"settings.type != 'dropdown' && settings.menuitems\"\n        class=\"backend-toolbar-button menu-trigger\"\n        :class=\"menuTriggerCssClass\"\n        aria-haspopup=\"true\"\n        v-bind:disabled=\"settings.disabled || toolbarDisabled\"\n        v-bind:tabindex=\"settings.disabled || toolbarDisabled ? -1 : 0\"\n        v-bind:id=\"menuButtonId\"\n        v-bind:aria-controls=\"menuId\"\n        @click=\"onClick($event, false, true)\"\n        ref=\"menuButton\"\n    >\n        <span v-if=\"settings.showBadge\" class=\"badge\"></span>\n    </button>\n\n    <backend-dropdown-menu\n        v-if=\"settings.menuitems\"\n        :items=settings.menuitems\n        :menu-id=\"menuId\"\n        :labeled-by-id=\"buttonId\"\n        ref=\"menu\"\n        @closedwithesc=\"onMenuClosedWithEsc\"\n        @command=\"onMenuItemCommand\"\n        @shown=\"onMenuShown\"\n        @hidden=\"onMenuHidden\"\n        @aligntotrigger=\"onAlignToTrigger\"\n    ></backend-dropdown-menu>\n</div>\n"
  },
  {
    "path": "modules/backend/vuecomponents/document/partials/_toolbar.php",
    "content": "<div class=\"flex-layout-row document-toolbar-scroll-container\" ref=\"toolbarContainer\">\n    <div class=\"document-toolbar-scrollable flex-layout-item stretch\" ref=\"scrollable\">\n        <template v-for=\"element in scrollableElements\" :key=\"element.uniqueKey\">\n            <template v-if=\"!element.hidden\">\n                <?= $this->makePartial('toolbarelementlist') ?>\n            </template>\n        </template>\n    </div>\n\n    <div class=\"flex-layout-item fix fixed-right\">\n        <template v-for=\"element in fixedRightElements\" :key=\"element.uniqueKey\">\n            <template v-if=\"!element.hidden\">\n                <?= $this->makePartial('toolbarelementlist') ?>\n            </template>\n        </template>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/document/partials/_toolbarelementlist.php",
    "content": "<div\n    class=\"document-toolbar-element\"\n    :class=\"['element-type-'+element.type, {'button-group': !!element.buttonGroup, 'button-icon-only': element.type == 'button' && !element.label}]\">\n    <backend-document-toolbar-button\n        v-if=\"element.type == 'button' || element.type == 'dropdown'\"\n        :settings=element\n        :toolbar-disabled=\"disabled\"\n        @dropdowncontentshown=\"onDropdownContentShown\"\n        @dropdowncontenthidden=\"onDropdownContentHidden\"\n        @command=\"onElementCommand\"\n    ></backend-document-toolbar-button>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/assets/css/documentmarkdowneditor.css",
    "content": ".component-backend-documentmarkdowneditor {\n    .EasyMDEContainer {\n        .editor-toolbar,\n        .editor-statusbar {\n            display: none;\n        }\n\n        .editor-preview-side {\n            background-color: var(--oc-form-control-bg);\n            color: var(--bs-body-color);\n            border: none;\n            border-left: var(--oc-primary-border) 1px solid;\n        }\n\n        .CodeMirror {\n            border: none;\n            border-radius: 0;\n            position: absolute;\n            height: 100%;\n            width: 100%;\n        }\n    }\n\n    .CodeMirror-sided.sided--no-fullscreen {\n        flex: none;\n        height: 100%;\n        position: absolute;\n        left: 0;\n        top: 0;\n        width: 50%;\n        z-index: 0;\n    }\n\n    .editor-preview-active-side.sided--no-fullscreen {\n        flex: none;\n        height: 100%;\n        position: absolute;\n        right: 0;\n        top: 0;\n        width: 50%;\n        z-index: 0;\n    }\n\n    /* Base editor styles */\n\n    a {\n        text-decoration: underline;\n        color: var(--oc-link-color);\n    }\n\n    h1 {\n        font-size: 34px;\n        font-weight: normal;\n        margin-bottom: 20px;\n    }\n\n    h2 {\n        font-size: 26px;\n        font-weight: normal;\n        margin-bottom: 20px;\n    }\n\n    h3 {\n        font-size: 21px;\n        font-weight: normal;\n        margin-bottom: 20px;\n    }\n\n    h4 {\n        font-size: 18px;\n        font-weight: normal;\n        margin: 20px 0;\n    }\n\n    h5 {\n        font-size: 16px;\n        font-weight: normal;\n        color: #434343;\n    }\n\n    strong {\n        font-weight: 700;\n    }\n\n    pre {\n        white-space: pre-wrap;\n        word-wrap: break-word;\n        padding: 5px 10px;\n        border-radius: 4px;\n    }\n\n    code {\n        background: #eee;\n        padding: 0px 3px 2px;\n        display: inline-block;\n        border-radius: 4px;\n    }\n\n    blockquote {\n        border-left: solid 2px #5e35b1;\n        margin-left: 0;\n        padding-left: 5px;\n        color: #5e35b1;\n        font-size: inherit;\n\n        blockquote {\n            border-color: #00bcd4;\n            color: #00bcd4;\n\n            blockquote {\n                border-color: #43a047;\n                color: #43a047;\n            }\n        }\n    }\n\n    table {\n        border: none;\n        border-collapse: collapse;\n        empty-cells: show;\n        max-width: 100%;\n        margin-bottom: 10px;\n\n        td,\n        th {\n            border: 1px solid #ddd;\n            padding: 5px;\n\n            &:empty {\n                height: 20px;\n            }\n        }\n\n        th {\n            background: #e6e6e6;\n        }\n    }\n\n    hr {\n        clear: both;\n        user-select: none;\n        page-break-after: always;\n    }\n}\n\n/* Override vendor styles */\n.CodeMirror {\n    background-color: var(--oc-form-control-bg);\n    color: var(--bs-body-color);\n}\n\n[data-bs-theme=\"dark\"] {\n    .cm-s-easymde .cm-string {\n        color: #3498db;\n    }\n    .cm-s-easymde .cm-attribute {\n        color: #a6a7fa;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/assets/js/documentmarkdowneditor.js",
    "content": "import utils from './utils.js';\nimport octoberCommands from './octobercommands.js';\n\nexport default {\n    props: {\n        toolbarContainer: Array,\n        fullHeight: {\n            type: Boolean,\n            default: true\n        },\n        containerCssClass: {\n            type: String,\n            default: ''\n        },\n        useMediaManager: {\n            type: Boolean,\n            default: false\n        },\n        sideBySide: {\n            type: Boolean,\n            default: true\n        },\n        builtInMode: {\n            type: Boolean,\n            default: false\n        },\n        modelValue: String,\n        externalToolbarAppState: String\n    },\n    data: function() {\n        const imageDropdownItems = [];\n        const fileDropdownItems = [];\n        const internalEventBus = Vue.markRaw(mitt());\n\n        if (this.useMediaManager) {\n            imageDropdownItems.push({\n                command: 'oc-upload-image',\n                label: 'command_upload_from_computer'\n            });\n\n            fileDropdownItems.push({\n                command: 'oc-upload-file',\n                label: 'command_upload_from_computer'\n            });\n\n            imageDropdownItems.push({\n                command: 'oc-browse-image',\n                label: 'browse'\n            });\n\n            fileDropdownItems.push({\n                command: 'oc-browse-file',\n                label: 'browse'\n            });\n        }\n\n        imageDropdownItems.push({\n            command: 'oc-enter-image-url',\n            label: 'by_url'\n        });\n\n        fileDropdownItems.push({\n            command: 'oc-enter-file-url',\n            label: 'by_url'\n        });\n\n        const result = {\n            internalEventBus: internalEventBus,\n            editor: null,\n            editorId: null,\n            $buttons: null,\n            updateDebounceTimeoutId: null,\n            lastCachedValue: this.modelValue,\n            lastCachedPreview: null,\n            config: null,\n            defaultButtons: [\n                {\n                    name: 'bold',\n                    action: EasyMDE.toggleBold,\n                    className: 'fa fa-bold',\n                    title: oc.lang.get('markdowneditor.bold')\n                },\n                {\n                    name: 'italic',\n                    action: EasyMDE.toggleItalic,\n                    className: 'fa fa-italic',\n                    title: oc.lang.get('markdowneditor.italic')\n                },\n                {\n                    name: 'strikethrough',\n                    action: EasyMDE.toggleStrikethrough,\n                    className: 'fa fa-strikethrough',\n                    title: oc.lang.get('markdowneditor.strikethrough')\n                },\n                {\n                    name: 'heading-1',\n                    action: EasyMDE.toggleHeading1,\n                    className: 'fa fa-header header-1',\n                    title: oc.lang.get('markdowneditor.header1')\n                },\n                {\n                    name: 'heading-2',\n                    action: EasyMDE.toggleHeading2,\n                    className: 'fa fa-header header-2',\n                    title: oc.lang.get('markdowneditor.header2')\n                },\n                {\n                    name: 'heading-3',\n                    action: EasyMDE.toggleHeading3,\n                    className: 'fa fa-header header-3',\n                    title: oc.lang.get('markdowneditor.header3')\n                },\n                '|',\n                {\n                    name: 'code',\n                    action: EasyMDE.toggleCodeBlock,\n                    className: 'fa fa-code',\n                    title: oc.lang.get('markdowneditor.code')\n                },\n                {\n                    name: 'quote',\n                    action: EasyMDE.toggleBlockquote,\n                    className: 'fa fa-code',\n                    title: oc.lang.get('markdowneditor.quote')\n                },\n                {\n                    name: 'unordered-list',\n                    action: EasyMDE.toggleUnorderedList,\n                    className: 'fa fa-list-ul',\n                    title: oc.lang.get('markdowneditor.unorderedlist')\n                },\n                {\n                    name: 'ordered-list',\n                    action: EasyMDE.toggleOrderedList,\n                    className: 'fa fa-list-ol',\n                    title: oc.lang.get('markdowneditor.orderedlist')\n                },\n                {\n                    name: 'clean-block',\n                    action: EasyMDE.cleanBlock,\n                    className: 'fa fa-eraser',\n                    title: oc.lang.get('markdowneditor.cleanblock')\n                },\n                '|',\n                {\n                    name: 'snippet',\n                    action: 'snippet',\n                    className: 'fa fa-newspaper',\n                    title: oc.lang.get('markdowneditor.snippet')\n                },\n                {\n                    name: 'link',\n                    action: EasyMDE.drawLink,\n                    className: 'fa fa-link',\n                    title: oc.lang.get('markdowneditor.link')\n                },\n                {\n                    name: 'image',\n                    action: EasyMDE.drawImage,\n                    className: 'fa fa-picture',\n                    title: oc.lang.get('markdowneditor.image')\n                },\n                {\n                    name: 'attachment',\n                    action: 'attachment',\n                    className: 'fa fa-bold',\n                    title: 'add_file_title'\n                },\n                {\n                    name: 'table',\n                    action: EasyMDE.drawTable,\n                    className: 'fa fa-table',\n                    title: oc.lang.get('markdowneditor.table')\n                },\n                {\n                    name: 'horizontal-rule',\n                    action: EasyMDE.drawHorizontalRule,\n                    className: 'fa fa-minus',\n                    title: oc.lang.get('markdowneditor.horizontalrule')\n                },\n                {\n                    name: 'side-by-side',\n                    action: EasyMDE.toggleSideBySide,\n                    className: 'fa fa-columns no-disable no-mobile',\n                    title: oc.lang.get('markdowneditor.sidebyside')\n                }\n            ],\n            buttonConfig: {\n                heading: {\n                    ignore: true\n                },\n                preview: {\n                    ignore: true\n                },\n                guide: {\n                    ignore: true\n                },\n                undo: {\n                    ignore: true\n                },\n                redo: {\n                    ignore: true\n                },\n                fullscreen: {\n                    ignore: true\n                },\n                snippet: {\n                    ignorePressState: true,\n                    cmd: 'oc-snippet'\n                },\n                link: {\n                    ignorePressState: true,\n                    cmd: oc.pageLookup ? 'oc-link' : 'link'\n                },\n                image: {\n                    dropdown: imageDropdownItems,\n                    ignorePressState: true\n                },\n                attachment: {\n                    dropdown: fileDropdownItems\n                }\n            },\n            iconMap: {\n                strikethrough: 'text-strikethrough',\n                'heading-1': 'text-h1',\n                'heading-2': 'text-h2',\n                'heading-3': 'text-h3',\n                code: 'text-code-block',\n                'unordered-list': 'text-format-ul',\n                'ordered-list': 'text-format-ol',\n                'clean-block': 'text-eraser',\n                image: 'text-image',\n                table: 'text-insert-table',\n                'horizontal-rule': 'horizontal-line',\n                'side-by-side': 'window-split',\n                snippet: 'newspaper'\n            }\n        };\n\n        return result;\n    },\n    computed: {\n        cssClass: function computeCssClass() {\n            var result = '';\n\n            if (this.fullHeight) {\n                result += ' full-height-strict';\n            }\n\n            result += ' ' + this.containerCssClass;\n\n            return result;\n        },\n\n        configuration: function computeConfiguration() {\n            if (this.config === null) {\n                this.config = JSON.parse(this.$el.getAttribute('data-configuration'));\n            }\n\n            return this.config;\n        },\n\n        externalToolbarEventBusObj: function computeExternalToolbarEventBusObj() {\n            if (!this.externalToolbarAppState) {\n                return null;\n            }\n\n            const point = $.oc.vueUtils.getToolbarExtensionPoint(\n                this.externalToolbarAppState,\n                this.$el\n            );\n\n            return point ? point.bus : null;\n        },\n\n        hasExternalToolbar: function computeHasExternalToolbar() {\n            return !!this.externalToolbarEventBusObj;\n        }\n    },\n    methods: {\n        extendToolbar: function extendToolbar() {\n            // Guard against unmounted component during retry\n            if (!this.$el) {\n                return;\n            }\n\n            // Find buttons fresh each time - EasyMDE may not be ready on first call\n            var $buttons = $(this.$el).find('.editor-toolbar button, .editor-toolbar i.separator');\n\n            // If no buttons found, editor isn't ready yet - retry after a delay.\n            // Uses setTimeout instead of Vue.nextTick because nextTick creates\n            // microtasks that never yield to the browser, causing infinite loops.\n            if (!$buttons.length) {\n                setTimeout(() => {\n                    this.extendToolbar();\n                }, 50);\n                return;\n            }\n\n            this.$buttons = $buttons;\n            this.toolbarContainer.splice(0, this.toolbarContainer.length);\n            const that = this;\n\n            if (!this.builtInMode || this.hasExternalToolbar) {\n                utils.addSeparator(that);\n            }\n\n            $buttons.each(function() {\n                const $button = $(this);\n\n                if ($button.hasClass('separator')) {\n                    utils.addSeparator(that);\n                    return;\n                }\n\n                const cmd = utils.getButtonCommand($button);\n                if (that.buttonConfig[cmd] && that.buttonConfig[cmd].ignore) {\n                    return;\n                }\n\n                const hasCustomDropdown = that.buttonConfig[cmd] && that.buttonConfig[cmd].dropdown;\n                if (!hasCustomDropdown) {\n                    utils.buttonFromButton(that, $button);\n                }\n                else {\n                    utils.dropdownFromButton(that, $button);\n                }\n            });\n\n            const lastIndex = this.toolbarContainer.length - 1;\n            if (this.toolbarContainer[lastIndex].type === 'separator') {\n                this.toolbarContainer.pop();\n            }\n        },\n\n        extendExternalToolbar: function extendExternalToolbar() {\n            // Guard against unmounted component during retry\n            if (!this.$el) {\n                return;\n            }\n\n            if ($(this.$el).is(\":visible\")) {\n                this.extendToolbar();\n            }\n            else {\n                // Element not visible yet, retry after a delay.\n                // Uses setTimeout instead of Vue.nextTick because nextTick creates\n                // microtasks that never yield to the browser, causing infinite loops.\n                setTimeout(() => {\n                    this.extendExternalToolbar();\n                }, 50);\n            }\n        },\n\n        updateUi: function updateUi() {\n            if (this.updateDebounceTimeoutId !== null) {\n                clearTimeout(this.updateDebounceTimeoutId);\n            }\n\n            this.updateDebounceTimeoutId = setTimeout(\n                this.hasExternalToolbar ? this.extendExternalToolbar : this.extendToolbar,\n                30\n            );\n        },\n\n        trans: function trans(key) {\n            if (this.configuration.lang[key] === undefined) {\n                return key;\n            }\n\n            return this.configuration.lang[key];\n        },\n\n        enableSideBySide: function enableSideBySide() {\n            this.onToolbarCommand({\n                command: 'markdowneditor-toolbar-side-by-side'\n            });\n        },\n\n        refresh: function refresh() {\n            if (this.editor) {\n                this.editor.codemirror.refresh();\n            }\n        },\n\n        clearHistory: function clearHistory() {\n            if (this.editor) {\n                this.editor.codemirror.doc.clearHistory();\n            }\n        },\n\n        mountEventBus: function mountEventBus() {\n            if (!this.externalToolbarEventBusObj) {\n                return;\n            }\n\n            this.externalToolbarEventBusObj.on('toolbarcmd', this.onToolbarExternalCommand);\n            this.externalToolbarEventBusObj.on('extendapptoolbar', this.extendExternalToolbar);\n        },\n\n        unmountEventBus: function unmountEventBus() {\n            if (!this.externalToolbarEventBusObj) {\n                return;\n            }\n\n            this.externalToolbarEventBusObj.off('toolbarcmd', this.onToolbarExternalCommand);\n            this.externalToolbarEventBusObj.off('extendapptoolbar', this.extendExternalToolbar);\n        },\n\n        onToolbarExternalCommand: function (command) {\n            if ($(this.$el).is(\":visible\")) {\n                this.onToolbarCommand(command);\n            }\n        },\n\n        onToolbarCommand: function(commandData) {\n            const command = utils.parseCommandString(commandData.command);\n            if (command === null) {\n                return;\n            }\n\n            if (command.isOctoberCommand) {\n                this.onOctoberCommand(command);\n            }\n\n            let $button = $(this.$el).find('.editor-toolbar button[class*=\"' + command.editorCommand + '\"]');\n            if (!$button.length) {\n                return;\n            }\n\n            $button.trigger('click');\n            this.updateUi();\n        },\n\n        onEditorContextChanged: function onEditorContextChanged() {\n            this.updateUi();\n        },\n\n        onOctoberCommand: function onOctoberCommand(command) {\n            octoberCommands.invoke(command.editorCommand, this.editor, this);\n        },\n\n        onChange: function onChange() {\n            this.onEditorContextChanged();\n\n            this.lastCachedValue = this.editor.value();\n            this.$emit('update:modelValue', this.lastCachedValue);\n        },\n\n        onFocus: function onFocus() {\n            this.$emit('focus');\n        },\n\n        onBlur: function onBlur() {\n            this.$emit('blur');\n        }\n    },\n    mounted: function onMounted() {\n        this.editorId = $.oc.domIdManager.generate('markdowneditor');\n        this.editor = Vue.markRaw(new EasyMDE({\n            element: this.$refs.textarea,\n            toolbar: this.defaultButtons,\n            previewImagesInEditor: false,\n            sideBySideFullscreen: false,\n            autoDownloadFontAwesome: false,\n            syncSideBySidePreviewScroll: true,\n            initialValue: this.modelValue,\n            status: true,\n            sanitizerFunction: function(htmlText) {\n                return DOMPurify.sanitize(htmlText);\n            },\n            previewRender: function(plainText) {\n                // Optimization: prevent rendering same thing twice\n                if (this.lastCachedPreview == plainText) {\n                    return null;\n                }\n                this.lastCachedPreview = plainText;\n\n                // Process page lookup links\n                if (oc.pageLookup) {\n                    plainText = oc.pageLookup.processLinks(plainText);\n                }\n\n                // Process snippets\n                if (oc.snippetLookup) {\n                    plainText = oc.snippetLookup.processSnippets(plainText);\n\n                    // Disable the preview update\n                    if (oc.snippetLookup.pauseRendering) {\n                        return null;\n                    }\n                }\n\n                // Inherit default logic, includes logic processing\n                // anchors so links open in a new window\n                return this.parent.markdown(plainText);\n            }\n        }));\n\n        this.editor.codemirror.on('cursorActivity', this.onEditorContextChanged);\n        this.editor.codemirror.on('change', this.onChange);\n        this.editor.codemirror.on('focus', this.onFocus);\n        this.editor.codemirror.on('blur', this.onBlur);\n        $(window).on('oc.updateUi', this.refresh);\n        this.internalEventBus.on('toolbarcmd', this.onToolbarCommand);\n\n        Vue.nextTick(() => {\n            if (this.hasExternalToolbar) {\n                this.extendExternalToolbar();\n            }\n            else {\n                this.extendToolbar();\n            }\n\n            this.mountEventBus();\n\n            if (this.sideBySide) {\n                this.enableSideBySide();\n            }\n        });\n    },\n    beforeUnmount: function beforeUnmount() {\n        if (this.editor) {\n            this.editor.toTextArea();\n            this.editor.codemirror.off('cursorActivity', this.onEditorContextChanged);\n            this.editor.codemirror.off('change', this.onEditorContextChanged);\n            this.editor.codemirror.off('focus', this.onFocus);\n            this.editor.codemirror.off('blur', this.onBlur);\n        }\n\n        $(window).off('oc.updateUi', this.refresh);\n        this.unmountEventBus();\n        this.internalEventBus.off('toolbarcmd', this.onToolbarCommand);\n\n        this.editor = null;\n        this.$buttons = null;\n    },\n    watch: {\n        modelValue: function onValueChanged(newValue) {\n            if (this.editor) {\n                if (newValue === null) {\n                    newValue = '';\n                }\n\n                if (newValue == this.lastCachedValue) {\n                    return;\n                }\n            }\n\n            this.editor.value(newValue);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/assets/js/formwidget.js",
    "content": "class FormWidget {\n    constructor(element, options, changeCallback) {\n        this.element = element;\n        this.changeCallback = changeCallback;\n\n        // Create wrapper element for Vue app\n        this.wrapperEl = document.createElement('div');\n        element.parentNode.appendChild(this.wrapperEl);\n\n        // Create and mount Vue 3 app after page scripts have loaded\n        const self = this;\n        oc.pageReady().then(() => {\n            this.app = oc.createVueApp({\n                data() {\n                    return {\n                        textarea: element,\n                        useMediaManager: options.useMediaManager,\n                        sideBySide: options.sideBySide,\n                        options: options,\n                        lang: $(element).closest('.field-markdowneditor').data()\n                    };\n                },\n                template: '<backend-document-markdowneditor-formwidgetconnector ref=\"connector\" :textarea=\"textarea\" :use-media-manager=\"useMediaManager\" :side-by-side=\"sideBySide\" :options=\"options\" :lang=\"lang\" @change=\"onChange\" @focus=\"onFocus\" @blur=\"onBlur\" />',\n                methods: {\n                    onChange() {\n                        if (self.changeCallback) {\n                            self.changeCallback();\n                        }\n                    },\n                    onFocus() {\n                        $(element).closest('.field-markdowneditor').addClass('editor-focus');\n                    },\n                    onBlur() {\n                        $(element).closest('.field-markdowneditor').removeClass('editor-focus');\n                    }\n                }\n            });\n\n            this.vm = this.app.mount(this.wrapperEl);\n            this.element.addEventListener('change', this.onChangeTextarea);\n        });\n    }\n\n    onChangeTextarea = () => {\n        this.setContent(this.element.value);\n    }\n\n    get connectorInstance() {\n        return this.vm?.$refs?.connector;\n    }\n\n    setContent(str) {\n        if (this.connectorInstance) {\n            this.connectorInstance.value = this.element.value;\n        }\n    }\n\n    remove() {\n        this.element.removeEventListener('change', this.onChangeTextarea);\n\n        if (this.app) {\n            this.app.unmount();\n            $(this.wrapperEl).remove();\n        }\n\n        this.app = null;\n        this.vm = null;\n        this.wrapperEl = null;\n        this.element = null;\n    }\n}\n\nexport default FormWidget;"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/assets/js/formwidgetconnector.js",
    "content": "export default {\n    props: {\n        textarea: null,\n        lang: {},\n        useMediaManager: {\n            type: Boolean,\n            default: false\n        },\n        sideBySide: {\n            type: Boolean,\n            default: true\n        },\n        options: Object\n    },\n    data: function () {\n        const toolbarExtensionPoint = [];\n\n        return {\n            toolbarExtensionPoint,\n            fullScreen: false,\n            value: ''\n        };\n    },\n    computed: {\n        toolbarElements: function computeToolbarElements() {\n            return [\n                this.toolbarExtensionPoint,\n                {\n                    type: 'button',\n                    icon: this.fullScreen ? 'icon-fullscreen-collapse' : 'icon-fullscreen',\n                    command: 'document:toggleFullscreen',\n                    pressed: this.fullScreen,\n                    fixedRight: true,\n                    tooltip: this.lang.langFullscreen\n                }\n            ]\n        },\n\n        externalToolbarAppState: function computeExternalToolbarAppState() {\n            return this.options.externalToolbarAppState;\n        },\n\n        toolbarExtensionPointProxy: function computeToolbarExtensionPointProxy() {\n            if (!this.options.externalToolbarAppState) {\n                return this.toolbarExtensionPoint;\n            }\n\n            const point = $.oc.vueUtils.getToolbarExtensionPoint(\n                this.options.externalToolbarAppState,\n                this.textarea\n            );\n\n            return point ? point.state : this.toolbarExtensionPoint;\n        },\n\n        hasExternalToolbar: function computeHasExternalToolbar() {\n            return !!this.options.externalToolbarAppState;\n        }\n    },\n    mounted: function onMounted() {\n        this.value = this.textarea.value;\n\n        Vue.nextTick(() => {\n            this.$refs.markdownEditor.clearHistory();\n        });\n    },\n    methods: {\n        onFocus: function onFocus() {\n            this.$emit('focus');\n        },\n\n        onBlur: function onBlur() {\n            this.$emit('blur');\n        },\n\n        onToolbarCommand: function onToolbarCommand(cmd, ev) {\n            if (cmd == 'document:toggleFullscreen') {\n                this.fullScreen = !this.fullScreen;\n\n                Vue.nextTick(() => {\n                    this.$refs.markdownEditor.refresh();\n                });\n                return;\n            }\n\n            // Forward toolbar commands to the markdown editor\n            const editor = this.$refs.markdownEditor;\n            if (editor && editor.internalEventBus) {\n                editor.internalEventBus.emit('toolbarcmd', { command: cmd, ev: ev });\n            }\n        }\n    },\n    beforeUnmount: function beforeUnmount() {\n    },\n    watch: {\n        value: function watchValue(newValue) {\n            if (newValue != this.textarea.value) {\n                this.textarea.value = newValue;\n                this.$emit('change');\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/assets/js/octobercommands.js",
    "content": "import { host as inspectorHost } from '../../../inspector/assets/js/classes/index.js';\n\nfunction getUrlPopupConfig(component) {\n    return [\n        {\n            property: 'url',\n            title: 'URL',\n            type: 'string',\n            defaultFocus: true,\n            placeholder: 'https://...',\n            validation: {\n                required: {\n                    message: component.trans('url_required')\n                },\n                regex: {\n                    message: component.trans('url_validation'),\n                    pattern: '^https?:\\\\/\\\\/'\n                }\n            }\n        }\n    ];\n}\n\nclass OctoberCommands {\n    invoke(command, editor, component) {\n        switch (command) {\n            case 'oc-snippet':\n                return this.insertSnippet(editor);\n\n            case 'oc-link':\n                return this.browseLink(editor);\n\n            case 'oc-upload-image':\n                return this.uploadImage(editor);\n\n            case 'oc-browse-image':\n                return this.browseImage(editor);\n\n            case 'oc-enter-image-url':\n                return this.addImageByUrl(editor, component);\n\n            case 'oc-browse-file':\n                return this.browseFile(editor);\n\n            case 'oc-upload-file':\n                return this.uploadFile(editor);\n\n            case 'oc-enter-file-url':\n                return this.addFileByUrl(editor, component);\n        }\n    }\n\n    uploadMedia(callback, accept) {\n        const uploaderUtils = oc.vueComponentHelpers.uploader.utils;\n        uploaderUtils.selectAndUploadMediaManagerFiles(\n            callback,\n            true,\n            accept\n        );\n    }\n\n    titleFromUrl(url) {\n        const parts = url.split('/');\n        for (let index = parts.length - 1; index >= 0; index--) {\n            const part = parts[index];\n            if (part.length === 0) {\n                continue;\n            }\n\n            return decodeURIComponent(part);\n        }\n\n        return decodeURIComponent(url);\n    }\n\n    insertFileLink(link, editor, addNewline) {\n        let str = '[' + this.titleFromUrl(link) + '](' + link + ')';\n        if (addNewline) {\n            str += '\\n';\n        }\n\n        editor.codemirror.replaceSelection(str);\n    }\n\n    uploadImage(editor) {\n        this.uploadMedia((link, isMultiple, isLast) => {\n            let str = '![' + this.titleFromUrl(link) + '](' + link + ')';\n            if (isMultiple && !isLast) {\n                str += '\\n';\n            }\n            editor.codemirror.replaceSelection(str);\n        }, '.png, .jpg, .jpeg, .gif, .svg');\n    }\n\n    browseImage(editor) {\n        const that = this;\n\n        new oc.mediaManager.popup({\n            alias: 'ocmediamanager',\n            cropAndInsertButton: true,\n            onInsert: function(items) {\n                if (!items.length) {\n                    oc.alert($.oc.lang.get('mediamanager.invalid_image_empty_insert'));\n                    return;\n                }\n\n                let imagesInserted = 0;\n\n                for (let i = 0, len = items.length; i < len; i++) {\n                    if (items[i].documentType !== 'image') {\n                        oc.alert(\n                            $.oc.lang.get(\n                                'mediamanager.invalid_image_invalid_insert',\n                                'The file \"' + items[i].title + '\" is not an image.'\n                            )\n                        );\n                        continue;\n                    }\n\n                    let str = '![' + that.titleFromUrl(items[i].publicUrl) + '](' + items[i].publicUrl + ')';\n                    if (i < items.length - 1) {\n                        str += '\\n';\n                    }\n\n                    editor.codemirror.replaceSelection(str);\n\n                    imagesInserted++;\n                }\n\n                if (imagesInserted !== 0) {\n                    this.hide();\n                }\n            }\n        });\n    }\n\n    addImageByUrl(editor, component) {\n        const config = getUrlPopupConfig(component);\n        const data = {\n            url: ''\n        };\n\n        inspectorHost\n            .showModal(component.trans('add_image_title'), data, config, 'file-url', {\n                beforeApplyCallback: (updatedData) => {\n                    editor.codemirror.replaceSelection(\n                        '![' + this.titleFromUrl(updatedData.url) + '](' + updatedData.url + ')'\n                    );\n                    return Promise.resolve();\n                }\n            })\n            .then($.noop, $.noop);\n    }\n\n    insertSnippet(editor) {\n        oc.snippetLookup.popup({\n            alias: 'ocsnippetlookup',\n            onInsert: function(snippet) {\n                var str = oc.snippetLookup.generateSnippetHtml(snippet);\n                editor.codemirror.replaceSelection(str);\n                this.hide();\n            }\n        });\n    }\n\n    browseLink(editor) {\n        oc.pageLookup.popup({\n            alias: 'ocpagelookup',\n            onInsert: function(item) {\n                if (!item) {\n                    oc.alert($.oc.lang.get('mediamanager.invalid_file_empty_insert'));\n                    return;\n                }\n\n                let str = '[' + (item.params.title || '') + '](' + item.link + ')';\n                editor.codemirror.replaceSelection(str);\n                this.hide();\n            },\n            singleMode: true\n        });\n    }\n\n    browseFile(editor) {\n        const that = this;\n\n        new oc.mediaManager.popup({\n            alias: 'ocmediamanager',\n            cropAndInsertButton: false,\n            onInsert: function(items) {\n                if (!items.length) {\n                    oc.alert($.oc.lang.get('mediamanager.invalid_file_empty_insert'));\n                    return;\n                }\n\n                for (let i = 0, len = items.length; i < len; i++) {\n                    let str = '[' + that.titleFromUrl(items[i].publicUrl) + '](' + items[i].publicUrl + ')';\n\n                    if (i < items.length - 1) {\n                        str += '\\n';\n                    }\n\n                    editor.codemirror.replaceSelection(str);\n                }\n\n                this.hide();\n            }\n        });\n    }\n\n    uploadFile(editor) {\n        this.uploadMedia((link, isMultiple, isLast) => {\n            this.insertFileLink(link, editor, isMultiple && !isLast);\n        });\n    }\n\n    addFileByUrl(editor, component) {\n        const config = getUrlPopupConfig(component);\n        const data = {\n            url: ''\n        };\n\n        inspectorHost\n            .showModal(component.trans('add_file_title'), data, config, 'file-url', {\n                beforeApplyCallback: (updatedData) => {\n                    this.insertFileLink(updatedData.url, editor);\n                    return Promise.resolve();\n                }\n            })\n            .then($.noop, $.noop);\n    }\n}\n\nexport default new OctoberCommands();"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/assets/js/utils.js",
    "content": "class Utils {\n    isLastElementSeparator(component) {\n        const elements = component.toolbarContainer;\n        const element = elements[elements.length - 1];\n\n        if (!element) {\n            return false;\n        }\n\n        return element.type === 'separator';\n    }\n\n    mapIconName(component, editorIconName) {\n        if (component.iconMap[editorIconName] === undefined) {\n            return editorIconName;\n        }\n\n        return component.iconMap[editorIconName];\n    }\n\n    addSeparator(component) {\n        if (!this.isLastElementSeparator(component)) {\n            component.toolbarContainer.push({ type: 'separator' });\n        }\n    }\n\n    getButtonCommand($button) {\n        const classes = $button.attr('class').split(' ');\n\n        for (let index = 0; index < classes.length; index++) {\n            const className = classes[index];\n            if (['active'].indexOf(className) === -1) {\n                return className;\n            }\n        }\n\n        return null;\n    }\n\n    dropdownFromButton(component, $button) {\n        const cmd = this.getButtonCommand($button);\n        const basicConfig = this.basicButtonConfig(component, $button);\n        basicConfig.type = 'dropdown';\n        basicConfig.menuitems = [];\n\n        const knownButtonConfig = component.buttonConfig[cmd];\n\n        knownButtonConfig.dropdown.forEach((dropdownItem) => {\n            basicConfig.menuitems.push({\n                type: 'text',\n                command: 'markdowneditor-toolbar-' + dropdownItem.command,\n                label: component.trans(dropdownItem.label)\n            });\n        });\n\n        component.toolbarContainer.push(basicConfig);\n    }\n\n    basicButtonConfig(component, $button) {\n        const cmd = this.getButtonCommand($button);\n\n        if (cmd === null) {\n            console.log('Markdown button command not found', $button);\n            return;\n        }\n\n        let buttonCmd = cmd;\n        const knownButtonConfig = component.buttonConfig[cmd];\n        if (knownButtonConfig && knownButtonConfig.cmd) {\n            buttonCmd = knownButtonConfig.cmd;\n        }\n\n        let ignorePressState = false;\n        if (knownButtonConfig) {\n            ignorePressState = knownButtonConfig.ignorePressState;\n        }\n\n        return {\n            type: 'button',\n            icon: 'icon-' + this.mapIconName(component, cmd),\n            command: 'markdowneditor-toolbar-' + buttonCmd,\n            tooltip: component.trans($button.attr('title')),\n            pressed: !ignorePressState && $button.hasClass('active')\n        };\n    }\n\n    buttonFromButton(component, $button) {\n        component.toolbarContainer.push(this.basicButtonConfig(component, $button));\n    }\n\n    parseCommandString(command) {\n        if (!/^markdowneditor\\-toolbar-/.test(command) || !/^[0-9a-z\\-\\@:\\|;,\\s]+$/i.test(command)) {\n            return null;\n        }\n\n        const editorCommand = command.substring(23);\n        const isOctoberCommand = editorCommand.substring(0, 3) === 'oc-';\n\n        return {\n            editorCommand,\n            isOctoberCommand\n        };\n    }\n}\n\nexport default new Utils();"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/assets/vendor/dompurify@2.1.1/LICENSE.txt",
    "content": "DOMPurify\nCopyright 2015 Mario Heiderich\n\nDOMPurify is free software; you can redistribute it and/or modify it under the\nterms of either:\n\na) the Apache License Version 2.0, or\nb) the Mozilla Public License Version 2.0\n\n-----------------------------------------------------------------------------\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n-----------------------------------------------------------------------------\nMozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/assets/vendor/easymde@2.12.0/LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Sparksuite, Inc.\nCopyright (c) 2017 Jeroen Akkerman.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/assets/vendor/marked@1.2.0/LICENSE.md",
    "content": "# License information\n\n## Contribution License Agreement\n\nIf you contribute code to this project, you are implicitly allowing your code\nto be distributed under the MIT license. You are also implicitly verifying that\nall code is your original work. `</legalese>`\n\n## Marked\n\nCopyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n## Markdown\n\nCopyright © 2004, John Gruber \nhttp://daringfireball.net/ \nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n* Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nThis software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.\n"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/partials/_documentmarkdowneditor.php",
    "content": "<div\n    class=\"component-backend-documentmarkdowneditor flex-layout-column\"\n    :class=\"cssClass\"\n    data-configuration=\"<?= e($configuration) ?>\"\n>\n    <div class=\"flex-layout-item stretch relative\">\n        <textarea ref=\"textarea\" v-bind:id=\"editorId\"></textarea>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/vuecomponents/documentmarkdowneditor/partials/_formwidgetconnector.php",
    "content": "<backend-document\n    container-css-class=\"fill-container\"\n    :built-in-mode=\"true\"\n    :full-screen=\"fullScreen\"\n    ref=\"document\"\n>\n    <template v-slot:toolbar v-if=\"!hasExternalToolbar\">\n        <backend-document-toolbar\n            :elements=\"toolbarElements\"\n            @command=\"onToolbarCommand\"\n            ref=\"toolbar\"\n        ></backend-document-toolbar>\n    </template>\n\n    <template v-slot:content>\n        <div class=\"flex-layout-column fill-container\" ref=\"contentContainer\">\n            <div class=\"flex-layout-item stretch editor-panel relative\">\n                <backend-document-markdowneditor\n                    v-model=\"value\"\n                    ref=\"markdownEditor\"\n                    container-css-class=\"fill-container\"\n                    :built-in-mode=\"true\"\n                    :toolbar-container=\"toolbarExtensionPointProxy\"\n                    :external-toolbar-app-state=\"externalToolbarAppState\"\n                    :use-media-manager=\"useMediaManager\"\n                    :side-by-side=\"sideBySide\"\n                    @focus=\"onFocus\"\n                    @blur=\"onBlur\"\n                >\n                </backend-document-markdowneditor>\n            </div>\n        </div>\n    </template>\n</backend-document>\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdown/assets/js/dropdown.js",
    "content": "import VueMultiselect from '../vendor/vue-multiselect/vue-multiselect.esm.js';\nexport default VueMultiselect;\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdown/assets/vendor/vue-multiselect/LICENSE.txt",
    "content": "MIT License\n\nCopyright (c) 2016 Damian Dulisz\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdown/assets/vendor/vue-multiselect/vue-multiselect.esm.js",
    "content": "import{openBlock as d,createElementBlock as p,normalizeClass as y,withKeys as f,withModifiers as r,renderSlot as o,createElementVNode as u,withDirectives as v,Fragment as L,renderList as $,toDisplayString as g,vShow as w,createCommentVNode as c,createVNode as B,Transition as k,withCtx as T,normalizeStyle as S,createTextVNode as b,createBlock as E,Teleport as A}from\"vue\";function V(e){return e===0?!1:Array.isArray(e)&&e.length===0?!0:!e}function M(e){return(...t)=>!e(...t)}function P(e,t){return e===void 0&&(e=\"undefined\"),e===null&&(e=\"null\"),e===!1&&(e=\"false\"),e.toString().toLowerCase().indexOf(t.trim())!==-1}function C(e){return e.filter(t=>!t.$isLabel)}function O(e,t){return i=>i.reduce((l,a)=>a[e]&&a[e].length?(l.push({$groupLabel:a[t],$isLabel:!0}),l.concat(a[e])):l,[])}var D=(...e)=>t=>e.reduce((i,l)=>l(i),t),F={data(){return{search:\"\",isOpen:!1,preferredOpenDirection:\"below\",optimizedHeight:this.maxHeight}},props:{internalSearch:{type:Boolean,default:!0},options:{type:Array,required:!0},multiple:{type:Boolean,default:!1},trackBy:{type:String},label:{type:String},searchable:{type:Boolean,default:!0},clearOnSelect:{type:Boolean,default:!0},hideSelected:{type:Boolean,default:!1},placeholder:{type:String,default:\"Select option\"},allowEmpty:{type:Boolean,default:!0},resetAfter:{type:Boolean,default:!1},closeOnSelect:{type:Boolean,default:!0},customLabel:{type:Function,default(e,t){return V(e)?\"\":t?e[t]:e}},taggable:{type:Boolean,default:!1},tagPlaceholder:{type:String,default:\"Press enter to create a tag\"},tagPosition:{type:String,default:\"top\"},max:{type:[Number,Boolean],default:!1},id:{default:null},optionsLimit:{type:Number,default:1e3},groupValues:{type:String},groupLabel:{type:String},groupSelect:{type:Boolean,default:!1},blockKeys:{type:Array,default(){return[]}},preserveSearch:{type:Boolean,default:!1},preselectFirst:{type:Boolean,default:!1},preventAutofocus:{type:Boolean,default:!1},filteringSortFunc:{type:Function,default:null}},mounted(){!this.multiple&&this.max&&console.warn(\"[Vue-Multiselect warn]: Max prop should not be used when prop Multiple equals false.\"),this.preselectFirst&&!this.internalValue.length&&this.options.length&&this.select(this.filteredOptions[0])},computed:{internalValue(){return this.modelValue||this.modelValue===0?Array.isArray(this.modelValue)?this.modelValue:[this.modelValue]:[]},filteredOptions(){let e=this.search||\"\",t=e.toLowerCase().trim(),i=this.options.concat();return this.internalSearch?i=this.groupValues?this.filterAndFlat(i,t,this.label):this.filterOptions(i,t,this.label,this.customLabel):i=this.groupValues?O(this.groupValues,this.groupLabel)(i):i,i=this.hideSelected?i.filter(M(this.isSelected)):i,this.taggable&&t.length&&!this.isExistingOption(t)&&(this.tagPosition===\"bottom\"?i.push({isTag:!0,label:e}):i.unshift({isTag:!0,label:e})),i.slice(0,this.optionsLimit)},valueKeys(){return this.trackBy?this.internalValue.map(e=>e[this.trackBy]):this.internalValue},optionKeys(){return(this.groupValues?this.flatAndStrip(this.options):this.options).map(t=>this.customLabel(t,this.label).toString().toLowerCase())},currentOptionLabel(){return this.multiple?this.searchable?\"\":this.placeholder:this.internalValue.length?this.getOptionLabel(this.internalValue[0]):this.searchable?\"\":this.placeholder}},watch:{internalValue:{handler(){this.resetAfter&&this.internalValue.length&&(this.search=\"\",this.$emit(\"update:modelValue\",this.multiple?[]:null))},deep:!0},search(){this.$emit(\"search-change\",this.search)}},emits:[\"open\",\"search-change\",\"close\",\"select\",\"update:modelValue\",\"remove\",\"tag\"],methods:{getValue(){return this.multiple?this.internalValue:this.internalValue.length===0?null:this.internalValue[0]},filterAndFlat(e,t,i){return D(this.filterGroups(t,i,this.groupValues,this.groupLabel,this.customLabel),O(this.groupValues,this.groupLabel))(e)},flatAndStrip(e){return D(O(this.groupValues,this.groupLabel),C)(e)},updateSearch(e){this.search=e},isExistingOption(e){return this.options?this.optionKeys.indexOf(e)>-1:!1},isSelected(e){let t=this.trackBy?e[this.trackBy]:e;return this.valueKeys.indexOf(t)>-1},isOptionDisabled(e){return!!e.$isDisabled},getOptionLabel(e){if(V(e))return\"\";if(e.isTag)return e.label;if(e.$isLabel)return e.$groupLabel;let t=this.customLabel(e,this.label);return V(t)?\"\":t},select(e,t){if(e.$isLabel&&this.groupSelect){this.selectGroup(e);return}if(!(this.blockKeys.indexOf(t)!==-1||this.disabled||e.$isDisabled||e.$isLabel)&&!(this.max&&this.multiple&&this.internalValue.length===this.max)&&!(t===\"Tab\"&&!this.pointerDirty)){if(e.isTag)this.$emit(\"tag\",e.label,this.id),this.search=\"\",this.closeOnSelect&&!this.multiple&&this.deactivate();else{if(this.isSelected(e)){t!==\"Tab\"&&this.removeElement(e);return}this.multiple?this.$emit(\"update:modelValue\",this.internalValue.concat([e])):this.$emit(\"update:modelValue\",e),this.$emit(\"select\",e,this.id),this.clearOnSelect&&(this.search=\"\")}this.closeOnSelect&&this.deactivate()}},selectGroup(e){let t=this.options.find(i=>i[this.groupLabel]===e.$groupLabel);if(t){if(this.wholeGroupSelected(t)){this.$emit(\"remove\",t[this.groupValues],this.id);let i=this.trackBy?t[this.groupValues].map(a=>a[this.trackBy]):t[this.groupValues],l=this.internalValue.filter(a=>i.indexOf(this.trackBy?a[this.trackBy]:a)===-1);this.$emit(\"update:modelValue\",l)}else{let i=t[this.groupValues].filter(l=>!(this.isOptionDisabled(l)||this.isSelected(l)));this.max&&i.splice(this.max-this.internalValue.length),this.$emit(\"select\",i,this.id),this.$emit(\"update:modelValue\",this.internalValue.concat(i))}this.closeOnSelect&&this.deactivate()}},wholeGroupSelected(e){return e[this.groupValues].every(t=>this.isSelected(t)||this.isOptionDisabled(t))},wholeGroupDisabled(e){return e[this.groupValues].every(this.isOptionDisabled)},removeElement(e,t=!0){if(this.disabled||e.$isDisabled)return;if(!this.allowEmpty&&this.internalValue.length<=1){this.deactivate();return}let i=typeof e==\"object\"?this.valueKeys.indexOf(e[this.trackBy]):this.valueKeys.indexOf(e);if(this.multiple){let l=this.internalValue.slice(0,i).concat(this.internalValue.slice(i+1));this.$emit(\"update:modelValue\",l)}else this.$emit(\"update:modelValue\",null);this.$emit(\"remove\",e,this.id),this.closeOnSelect&&t&&this.deactivate()},removeLastElement(){this.blockKeys.indexOf(\"Delete\")===-1&&this.search.length===0&&Array.isArray(this.internalValue)&&this.internalValue.length&&this.removeElement(this.internalValue[this.internalValue.length-1],!1)},activate(){this.isOpen||this.disabled||(this.adjustPosition(),this.groupValues&&this.pointer===0&&this.filteredOptions.length&&(this.pointer=1),this.isOpen=!0,this.searchable?(this.preserveSearch||(this.search=\"\"),this.preventAutofocus||this.$nextTick(()=>this.$refs.search&&this.$refs.search.focus())):this.preventAutofocus||typeof this.$el<\"u\"&&this.$el.focus(),this.$emit(\"open\",this.id))},deactivate(){this.isOpen&&(this.isOpen=!1,this.searchable?this.$refs.search!==null&&typeof this.$refs.search<\"u\"&&this.$refs.search.blur():typeof this.$el<\"u\"&&this.$el.blur(),this.preserveSearch||(this.search=\"\"),this.$emit(\"close\",this.getValue(),this.id))},toggle(){this.isOpen?this.deactivate():this.activate()},adjustPosition(){if(typeof window>\"u\")return;let e=this.$el.getBoundingClientRect().top,t=window.innerHeight-this.$el.getBoundingClientRect().bottom;t>this.maxHeight||t>e||this.openDirection===\"below\"||this.openDirection===\"bottom\"?(this.preferredOpenDirection=\"below\",this.optimizedHeight=Math.min(t-40,this.maxHeight)):(this.preferredOpenDirection=\"above\",this.optimizedHeight=Math.min(e-40,this.maxHeight))},filterOptions(e,t,i,l){return t?e.filter(a=>P(l(a,i),t)).sort((a,n)=>typeof this.filteringSortFunc==\"function\"?this.filteringSortFunc(a,n):l(a,i).length-l(n,i).length):e},filterGroups(e,t,i,l,a){return n=>n.map(s=>{if(!s[i])return console.warn(\"Options passed to vue-multiselect do not contain groups, despite the config.\"),[];let h=this.filterOptions(s[i],e,t,a);return h.length?{[l]:s[l],[i]:h}:[]})}}},G={data(){return{pointer:0,pointerDirty:!1}},props:{showPointer:{type:Boolean,default:!0},optionHeight:{type:Number,default:40}},computed:{pointerPosition(){return this.pointer*this.optionHeight},visibleElements(){return this.optimizedHeight/this.optionHeight}},watch:{filteredOptions(){this.pointerAdjust()},isOpen(){this.pointerDirty=!1},pointer(){this.$refs.search&&this.$refs.search.setAttribute(\"aria-activedescendant\",this.id+\"-\"+this.pointer.toString())}},methods:{optionHighlight(e,t){return{\"multiselect__option--highlight\":e===this.pointer&&this.showPointer,\"multiselect__option--selected\":this.isSelected(t)}},groupHighlight(e,t){if(!this.groupSelect)return[\"multiselect__option--disabled\",{\"multiselect__option--group\":t.$isLabel}];let i=this.options.find(l=>l[this.groupLabel]===t.$groupLabel);return i&&!this.wholeGroupDisabled(i)?[\"multiselect__option--group\",{\"multiselect__option--highlight\":e===this.pointer&&this.showPointer},{\"multiselect__option--group-selected\":this.wholeGroupSelected(i)}]:\"multiselect__option--disabled\"},addPointerElement({key:e}=\"Enter\"){this.filteredOptions.length>0&&this.select(this.filteredOptions[this.pointer],e),this.pointerReset()},pointerForward(){this.pointer<this.filteredOptions.length-1&&(this.pointer++,this.$refs.list?.scrollTop<=this.pointerPosition-(this.visibleElements-1)*this.optionHeight&&(this.$refs.list.scrollTop=this.pointerPosition-(this.visibleElements-1)*this.optionHeight),this.filteredOptions[this.pointer]&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerForward()),this.pointerDirty=!0},pointerBackward(){this.pointer>0?(this.pointer--,this.$refs.list?.scrollTop>=this.pointerPosition&&(this.$refs.list.scrollTop=this.pointerPosition),this.filteredOptions[this.pointer]&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerBackward()):this.filteredOptions[this.pointer]&&this.filteredOptions[0].$isLabel&&!this.groupSelect&&this.pointerForward(),this.pointerDirty=!0},pointerReset(){this.closeOnSelect&&(this.pointer=0,this.$refs.list&&(this.$refs.list.scrollTop=0))},pointerAdjust(){this.pointer>=this.filteredOptions.length-1&&(this.pointer=this.filteredOptions.length?this.filteredOptions.length-1:0),this.filteredOptions.length>0&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerForward()},pointerSet(e){this.pointer=e,this.pointerDirty=!0}}},H={name:\"vue-multiselect\",mixins:[F,G],compatConfig:{MODE:3,ATTR_ENUMERATED_COERCION:!1},props:{name:{type:String,default:\"\"},modelValue:{type:null,default(){return[]}},selectLabel:{type:String,default:\"Press enter to select\"},selectGroupLabel:{type:String,default:\"Press enter to select group\"},selectedLabel:{type:String,default:\"Selected\"},deselectLabel:{type:String,default:\"Press enter to remove\"},deselectGroupLabel:{type:String,default:\"Press enter to deselect group\"},showLabels:{type:Boolean,default:!0},limit:{type:Number,default:99999},maxHeight:{type:Number,default:300},limitText:{type:Function,default:e=>`and ${e} more`},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},spellcheck:{type:Boolean,default:!1},openDirection:{type:String,default:\"\"},showNoOptions:{type:Boolean,default:!0},showNoResults:{type:Boolean,default:!0},tabindex:{type:Number,default:0},required:{type:Boolean,default:!1},useTeleport:{type:Boolean,default:!1},contentWrapperClass:{type:[String,Array,Object],default:\"\"}},data(){return{dropdownStyles:{},ready:!1}},computed:{hasOptionGroup(){return this.groupValues&&this.groupLabel&&this.groupSelect},isSingleLabelVisible(){return(this.singleValue||this.singleValue===0)&&(!this.isOpen||!this.searchable)&&!this.visibleValues.length},isPlaceholderVisible(){return!this.internalValue.length&&(!this.searchable||!this.isOpen)},visibleValues(){return this.multiple?this.internalValue.slice(0,this.limit):[]},singleValue(){return this.internalValue[0]},deselectLabelText(){return this.showLabels?this.deselectLabel:\"\"},deselectGroupLabelText(){return this.showLabels?this.deselectGroupLabel:\"\"},selectLabelText(){return this.showLabels?this.selectLabel:\"\"},selectGroupLabelText(){return this.showLabels?this.selectGroupLabel:\"\"},selectedLabelText(){return this.showLabels?this.selectedLabel:\"\"},inputStyle(){return this.searchable||this.multiple&&this.modelValue&&this.modelValue.length?this.isOpen?{width:\"100%\"}:{width:\"0\",position:\"absolute\",padding:\"0\"}:\"\"},contentStyle(){return this.options.length?{display:\"inline-block\"}:{display:\"block\"}},isAbove(){return this.openDirection===\"above\"||this.openDirection===\"top\"?!0:this.openDirection===\"below\"||this.openDirection===\"bottom\"?!1:this.preferredOpenDirection===\"above\"},showSearchInput(){return this.searchable&&(this.hasSingleSelectedSlot&&(this.visibleSingleValue||this.visibleSingleValue===0)?this.isOpen:!0)},isRequired(){return this.required===!1?!1:this.internalValue.length<=0}},watch:{isOpen(e){e&&(this.useTeleport?(this.ready=!1,this.$nextTick(()=>{let t=this.$el.getBoundingClientRect();this.dropdownStyles={position:\"absolute\",top:`${t.bottom+window.scrollY}px`,left:`${t.left+window.scrollX}px`,width:`${t.width}px`,zIndex:9999},this.ready=!0})):this.ready=!0)}}},N=[\"tabindex\",\"aria-expanded\",\"aria-owns\",\"aria-activedescendant\"],K={ref:\"tags\",class:\"multiselect__tags\"},R={class:\"multiselect__tags-wrap\"},q=[\"textContent\"],z=[\"onKeydown\",\"onMousedown\"],j=[\"textContent\"],I={class:\"multiselect__spinner\"},W=[\"name\",\"id\",\"spellcheck\",\"placeholder\",\"required\",\"value\",\"disabled\",\"tabindex\",\"aria-label\",\"aria-controls\"],U=[\"id\",\"aria-multiselectable\"],X={key:0},Y={class:\"multiselect__option\"},J=[\"aria-selected\",\"id\",\"role\"],Q=[\"onClick\",\"onMouseenter\",\"data-select\",\"data-selected\",\"data-deselect\"],Z=[\"data-select\",\"data-deselect\",\"onMouseenter\",\"onMousedown\"],x={class:\"multiselect__option\"},_={class:\"multiselect__option\"};function ee(e,t,i,l,a,n){return d(),p(\"div\",{tabindex:e.searchable?-1:i.tabindex,class:y([{\"multiselect--active\":e.isOpen,\"multiselect--disabled\":i.disabled,\"multiselect--above\":n.isAbove,\"multiselect--has-options-group\":n.hasOptionGroup},\"multiselect\"]),onFocus:t[14]||(t[14]=s=>e.activate()),onBlur:t[15]||(t[15]=s=>e.searchable?!1:e.deactivate()),onKeydown:[t[16]||(t[16]=f(r(s=>e.pointerForward(),[\"self\",\"prevent\"]),[\"down\"])),t[17]||(t[17]=f(r(s=>e.pointerBackward(),[\"self\",\"prevent\"]),[\"up\"])),t[18]||(t[18]=f(r(s=>e.addPointerElement(s),[\"stop\",\"self\"]),[\"enter\",\"tab\"]))],onKeyup:t[19]||(t[19]=f(s=>e.deactivate(),[\"esc\"])),role:\"combobox\",\"aria-expanded\":e.isOpen,\"aria-owns\":\"listbox-\"+e.id,\"aria-activedescendant\":e.isOpen&&e.pointer!==null?e.id+\"-\"+e.pointer:null},[o(e.$slots,\"caret\",{toggle:e.toggle},()=>[u(\"div\",{onMousedown:t[0]||(t[0]=r(s=>e.toggle(),[\"prevent\",\"stop\"])),class:\"multiselect__select\"},null,32)]),o(e.$slots,\"clear\",{search:e.search}),u(\"div\",K,[o(e.$slots,\"selection\",{search:e.search,remove:e.removeElement,values:n.visibleValues,isOpen:e.isOpen},()=>[v(u(\"div\",R,[(d(!0),p(L,null,$(n.visibleValues,(s,h)=>o(e.$slots,\"tag\",{option:s,search:e.search,remove:e.removeElement},()=>[(d(),p(\"span\",{class:\"multiselect__tag\",key:h,onMousedown:t[1]||(t[1]=r(()=>{},[\"prevent\"]))},[u(\"span\",{textContent:g(e.getOptionLabel(s))},null,8,q),u(\"i\",{tabindex:\"1\",onKeydown:f(r(m=>e.removeElement(s),[\"prevent\"]),[\"enter\"]),onMousedown:r(m=>e.removeElement(s),[\"prevent\"]),class:\"multiselect__tag-icon\"},null,40,z)],32))])),256))],512),[[w,n.visibleValues.length>0]]),e.internalValue&&e.internalValue.length>i.limit?o(e.$slots,\"limit\",{key:0},()=>[u(\"strong\",{class:\"multiselect__strong\",textContent:g(i.limitText(e.internalValue.length-i.limit))},null,8,j)]):c(\"v-if\",!0)]),B(k,{name:\"multiselect__loading\"},{default:T(()=>[o(e.$slots,\"loading\",{},()=>[v(u(\"div\",I,null,512),[[w,i.loading]])])]),_:3}),e.searchable?(d(),p(\"input\",{key:0,ref:\"search\",name:i.name,id:e.id,type:\"text\",autocomplete:\"off\",spellcheck:i.spellcheck,placeholder:e.placeholder,required:n.isRequired,style:S(n.inputStyle),value:e.search,disabled:i.disabled,tabindex:i.tabindex,\"aria-label\":i.name+\"-searchbox\",onInput:t[2]||(t[2]=s=>e.updateSearch(s.target.value)),onFocus:t[3]||(t[3]=r(s=>e.activate(),[\"prevent\"])),onBlur:t[4]||(t[4]=r(s=>e.deactivate(),[\"prevent\"])),onKeyup:t[5]||(t[5]=f(s=>e.deactivate(),[\"esc\"])),onKeydown:[t[6]||(t[6]=f(r(s=>e.pointerForward(),[\"prevent\"]),[\"down\"])),t[7]||(t[7]=f(r(s=>e.pointerBackward(),[\"prevent\"]),[\"up\"])),t[8]||(t[8]=f(r(s=>e.addPointerElement(s),[\"prevent\",\"stop\",\"self\"]),[\"enter\"])),t[9]||(t[9]=f(r(s=>e.removeLastElement(),[\"stop\"]),[\"delete\"]))],class:\"multiselect__input\",\"aria-controls\":\"listbox-\"+e.id},null,44,W)):c(\"v-if\",!0),n.isSingleLabelVisible?(d(),p(\"span\",{key:1,class:\"multiselect__single\",onMousedown:t[10]||(t[10]=r((...s)=>e.toggle&&e.toggle(...s),[\"prevent\"]))},[o(e.$slots,\"singleLabel\",{option:n.singleValue},()=>[b(g(e.currentOptionLabel),1)])],32)):c(\"v-if\",!0),n.isPlaceholderVisible?(d(),p(\"span\",{key:2,class:\"multiselect__placeholder\",onMousedown:t[11]||(t[11]=r((...s)=>e.toggle&&e.toggle(...s),[\"prevent\"]))},[o(e.$slots,\"placeholder\",{},()=>[b(g(e.placeholder),1)])],32)):c(\"v-if\",!0)],512),(d(),E(A,{to:\"body\",disabled:!i.useTeleport},[B(k,{name:\"multiselect\"},{default:T(()=>[e.isOpen&&a.ready?(d(),p(\"div\",{key:0,class:y([\"multiselect__content-wrapper\",i.contentWrapperClass]),onFocus:t[12]||(t[12]=(...s)=>e.activate&&e.activate(...s)),tabindex:\"-1\",onMousedown:t[13]||(t[13]=r(()=>{},[\"prevent\"])),style:S([a.dropdownStyles,{maxHeight:e.optimizedHeight+\"px\"}]),ref:\"list\"},[u(\"ul\",{class:\"multiselect__content\",style:S(n.contentStyle),role:\"listbox\",id:\"listbox-\"+e.id,\"aria-multiselectable\":e.multiple},[o(e.$slots,\"beforeList\"),e.multiple&&e.max===e.internalValue.length?(d(),p(\"li\",X,[u(\"span\",Y,[o(e.$slots,\"maxElements\",{},()=>[b(\"Maximum of \"+g(e.max)+\" options selected. First remove a selected option to select another.\",1)])])])):c(\"v-if\",!0),!e.max||e.internalValue.length<e.max?(d(!0),p(L,{key:1},$(e.filteredOptions,(s,h)=>(d(),p(\"li\",{class:\"multiselect__element\",key:h,\"aria-selected\":e.isSelected(s),id:e.id+\"-\"+h,role:s&&(s.$isLabel||s.$isDisabled)?null:\"option\"},[s&&(s.$isLabel||s.$isDisabled)?c(\"v-if\",!0):(d(),p(\"span\",{key:0,class:y([e.optionHighlight(h,s),\"multiselect__option\"]),onClick:r(m=>e.select(s),[\"stop\"]),onMouseenter:r(m=>e.pointerSet(h),[\"self\"]),\"data-select\":s&&s.isTag?e.tagPlaceholder:n.selectLabelText,\"data-selected\":n.selectedLabelText,\"data-deselect\":n.deselectLabelText},[o(e.$slots,\"option\",{option:s,search:e.search,index:h},()=>[u(\"span\",null,g(e.getOptionLabel(s)),1)])],42,Q)),s&&(s.$isLabel||s.$isDisabled)?(d(),p(\"span\",{key:1,\"data-select\":e.groupSelect&&n.selectGroupLabelText,\"data-deselect\":e.groupSelect&&n.deselectGroupLabelText,class:y([e.groupHighlight(h,s),\"multiselect__option\"]),onMouseenter:r(m=>e.groupSelect&&e.pointerSet(h),[\"self\"]),onMousedown:r(m=>e.selectGroup(s),[\"prevent\"])},[o(e.$slots,\"option\",{option:s,search:e.search,index:h},()=>[u(\"span\",null,g(e.getOptionLabel(s)),1)])],42,Z)):c(\"v-if\",!0)],8,J))),128)):c(\"v-if\",!0),v(u(\"li\",null,[u(\"span\",x,[o(e.$slots,\"noResult\",{search:e.search},()=>[t[20]||(t[20]=b(\"No elements found. Consider changing the search query.\"))])])],512),[[w,i.showNoResults&&e.filteredOptions.length===0&&e.search&&!i.loading]]),v(u(\"li\",null,[u(\"span\",_,[o(e.$slots,\"noOptions\",{},()=>[t[21]||(t[21]=b(\"List is empty.\"))])])],512),[[w,i.showNoOptions&&(e.options.length===0||n.hasOptionGroup===!0&&e.filteredOptions.length===0)&&!e.search&&!i.loading]]),o(e.$slots,\"afterList\")],12,U)],38)):c(\"v-if\",!0)]),_:3})],8,[\"disabled\"]))],42,N)}H.render=ee;export{H as Multiselect,H as default,F as multiselectMixin,G as pointerMixin};\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdown/partials/_dropdown.php",
    "content": ""
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenu/ItemDefinition.php",
    "content": "<?php namespace Backend\\VueComponents\\DropdownMenu;\n\nuse SystemException;\n\n/**\n * ItemDefinition encapsulates Dropdown menu item information.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ItemDefinition\n{\n    const TYPE_TEXT = 'text';\n    const TYPE_CHECKBOX = 'checkbox';\n    const TYPE_RADIOBUTTON = 'radiobutton';\n    const TYPE_SEPARATOR = 'separator';\n\n    /**\n     * @var bool disabled\n     */\n    protected $disabled = false;\n\n    /**\n     * @var string type\n     */\n    protected $type = ItemDefinition::TYPE_TEXT;\n\n    /**\n     * @var string label\n     */\n    protected $label;\n\n    /**\n     * @var string linkHref\n     */\n    protected $linkHref;\n\n    /**\n     * @var string linkTarget\n     */\n    protected $linkTarget;\n\n    /**\n     * @var string icon\n     */\n    protected $icon;\n\n    /**\n     * @var string command\n     */\n    protected $command;\n\n    /**\n     * @var array items\n     */\n    protected $items = [];\n\n    /**\n     * @var bool checked\n     */\n    protected $checked = false;\n\n    /**\n     * @var array|null userData\n     */\n    protected $userData = null;\n\n    /**\n     * @var string|null key\n     */\n    protected $key = null;\n\n    /**\n     * @var string|null group\n     */\n    protected $group;\n\n    /**\n     * __construct\n     */\n    public function __construct($type, ?string $label = null, ?string $command = null)\n    {\n        $this->type = $type;\n\n        if ($type != ItemDefinition::TYPE_SEPARATOR && !strlen($label)) {\n            throw new SystemException('Dropdown menu item label is not provided for item type '.$type);\n        }\n\n        if ($type != ItemDefinition::TYPE_SEPARATOR && !strlen($command)) {\n            throw new SystemException('Dropdown menu item command is not provided for item type '.$type);\n        }\n\n        $this->label = $label;\n        $this->command = $command;\n    }\n\n    /**\n     * Sets optional item key attribute\n     */\n    public function setKey(string $value)\n    {\n        $this->key = $value;\n    }\n\n    /**\n     * setLinkHref\n     */\n    public function setLinkHref(string $value)\n    {\n        $this->linkHref = $value;\n\n        return $this;\n    }\n\n    /**\n     * setLinkTarget\n     */\n    public function setLinkTarget(string $value)\n    {\n        $this->linkTarget = $value;\n\n        return $this;\n    }\n\n    /**\n     * setDisabled\n     */\n    public function setDisabled(bool $value)\n    {\n        $this->disabled = $value;\n\n        return $this;\n    }\n\n    /**\n     * setIcon\n     */\n    public function setIcon(string $value)\n    {\n        if (in_array($this->type, [self::TYPE_CHECKBOX, self::TYPE_RADIOBUTTON])) {\n            throw new SystemException('Checkbox and radiobutton dropdown menu items cannot have icons');\n        }\n\n        $this->icon = $value;\n\n        return $this;\n    }\n\n    /**\n     * setChecked\n     */\n    public function setChecked(bool $value)\n    {\n        $this->checked = $value;\n    }\n\n    /**\n     * addItem\n     */\n    public function addItem($type, ?string $label = null, ?string $command = null)\n    {\n        return $this->items[] = new ItemDefinition($type, $label, $command);\n    }\n\n    /**\n     * addItemObject\n     */\n    public function addItemObject(ItemDefinition $item)\n    {\n        return $this->items[] = $item;\n    }\n\n    /**\n     * hasItems\n     */\n    public function hasItems()\n    {\n        return count($this->items) > 0;\n    }\n\n    /**\n     * Sets optional user data object.\n     */\n    public function setUserData(array $userData)\n    {\n        $this->userData = $userData;\n\n        return $this;\n    }\n\n    /**\n     * setGroup\n     */\n    public function setGroup(string $group)\n    {\n        $this->group = $group;\n\n        return $this;\n    }\n\n    /**\n     * toArray\n     */\n    public function toArray()\n    {\n        $result = [\n            'type' => $this->type,\n            'icon' => $this->icon,\n            'command' => $this->command,\n            'label' => $this->label,\n            'href' => $this->linkHref,\n            'target' => $this->linkTarget,\n            'disabled' => $this->disabled,\n            'checked' => $this->checked\n        ];\n\n        if ($this->group) {\n            $result['group'] = $this->group;\n        }\n\n        if ($this->userData) {\n            $result['userData'] = $this->userData;\n        }\n\n        if ($this->key) {\n            $result['key'] = $this->key;\n        }\n\n        $result['items'] = [];\n\n        if ($this->items) {\n            $subItems = [];\n\n            foreach ($this->items as $item) {\n                $subItems[] = $item->toArray();\n            }\n\n            $result['items'] = $subItems;\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenu/assets/css/dropdownmenu.css",
    "content": ".dropdown-menu.backend-dropdownmenu {\n    display: block;\n    top: auto;\n    left: auto;\n\n    padding: 0;\n    background: transparent;\n    border: none;\n    box-shadow: none;\n\n    .dropdown-container {\n        > ul {\n            overflow: visible; /* Visible is required for submenus */\n            line-height: 34px;\n            padding: 4px 0;\n\n            &:before, &:after {\n                display: none;\n            }\n\n            > li {\n                &.submenu-header {\n                    display: none;\n                }\n\n                > a, > button {\n                    display: block;\n                    position: relative;\n                    font-size: 14px;\n                    padding: 0 10px;\n                    width: 100%;\n                    text-align: left;\n                    -webkit-appearance: none;\n                    border: none;\n                    background: transparent;\n                    outline: none;\n\n                    i {\n                        display: inline-block;\n                        font-size: 16px;\n                        position: absolute;\n                        left: 10px;\n                        top: 8px;\n\n                        &.submenu-indicator {\n                            left: auto;\n                            right: 15px;\n                            top: 13px;\n\n                            &:before {\n                                display: block;\n                                width: 5px;\n                                height: 9px;\n                                background-position: -283px -22px;\n                            }\n                        }\n                    }\n\n                    &.has-submenu:not([disabled]) {\n                        &:hover, &:active, &:focus:active {\n                            i.submenu-indicator:before {\n                                background-position: -293px -22px;\n                            }\n                        }\n                    }\n\n                    &[disabled] {\n                        > i, span {\n                            opacity: 0.5;\n                        }\n                    }\n\n                    &:focus {\n                        background-color: var(--oc-toolbar-hover-bg);\n                    }\n                }\n\n                &.separator {\n                    border-top: var(--oc-popup-border);\n                }\n\n                a[aria-checked=true][role=\"menuitemradio\"],\n                button[aria-checked=true][role=\"menuitemradio\"] {\n                    i {\n                        width: 6px;\n                        height: 6px;\n                        left: 14px;\n                        top: 13px;\n\n                        &:before {\n                            display: block;\n                            width: 6px;\n                            height: 6px;\n                            background-position: -285px 0;\n                        }\n                    }\n\n                    &:not([disabled]) {\n                        &:hover, &:active, &:focus:active {\n                            i:before {\n                                background-position: -293px 0;\n                            }\n                        }\n                    }\n                }\n\n                button[aria-checked=true][role=\"menuitemcheckbox\"] {\n                    i {\n                        width: 9px;\n                        height: 9px;\n                        left: 13px;\n                        top: 13px;\n\n                        &:before {\n                            display: block;\n                            width: 9px;\n                            height: 9px;\n                            background-position: -281px -10px;\n                        }\n                    }\n\n                    &:not([disabled]) {\n                        &:hover, &:active, &:focus:active {\n                            i:before {\n                                background-position: -290px -10px;\n                            }\n                        }\n                    }\n                }\n\n                &.first {\n                    > a, > button {\n                        border-top-left-radius: 0;\n                        border-top-right-radius: 0;\n                    }\n                }\n\n                &:last-child {\n                    > a, > button {\n                        border-bottom-left-radius: 0;\n                        border-bottom-right-radius: 0;\n                    }\n                }\n            }\n\n            &.has-icons {\n                > li {\n                    > a, > button {\n                        padding-left: 35px;\n                    }\n                }\n            }\n\n            &.has-submenus {\n                > li {\n                    > a, > button {\n                        padding-right: 35px;\n                    }\n                }\n            }\n        }\n    }\n}\n\n.backend-dropdownmenu-overlay {\n    position: fixed;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    background: rgba(255, 255, 255, 0.001);\n    z-index: calc(var(--oc-zindex-dropdown) - 1);\n    user-select: none;\n}\n\n@media (max-width: 414px) {\n    .backend-dropdownmenu-overlay {\n        background: rgba(0, 0, 0, 0.3);\n    }\n\n    .dropdown-menu.backend-dropdownmenu {\n        .dropdown-container {\n            position: fixed;\n            bottom: 0;\n            left: 0;\n            width: 100%;\n            padding: 15px;\n\n            > ul {\n                position: static;\n                border: none;\n                padding: 0;\n                margin: 0;\n                border-radius: 8px;\n                box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n\n                > li {\n                    &.submenu-header {\n                        display: block;\n                        border-bottom: var(--oc-popup-border);\n\n                        button.go-back-link,\n                        button.close-link {\n                            position: relative;\n                            height: 30px;\n                            margin: 15px 0;\n                            box-sizing: content-box;\n\n                            &:hover, &:active, &:focus:active {\n                                background-color: transparent!important;\n                            }\n\n                            &:before {\n                                display: block;\n                                position: absolute;\n                            }\n                        }\n\n                        button.go-back-link {\n                            float: left;\n                            width: 30px;\n                            font-size: 0;\n                            color: transparent;\n\n                            &:before {\n                                background-position: -52px -18px;\n                                width: 24px;\n                                height: 11px;\n                                top: 9px;\n                            }\n                        }\n\n                        button.close-link {\n                            float: right;\n                            width: 30px;\n                            margin-right: 10px;\n                            padding: 0;\n                            font-size: 0;\n                            color: transparent;\n\n                            &:before {\n                                background-position: -80px -18px;\n                                width: 11px;\n                                height: 11px;\n                                top: 9px;\n                                left: 10px;\n                            }\n                        }\n                    }\n\n                    > a, > button {\n                        font-size: 16px;\n                        line-height: 50px;\n\n                        i {\n                            top: 17px;\n\n                            &.submenu-indicator {\n                                top: 20px;\n                            }\n                        }\n\n                        &[aria-checked=true] {\n                            &[role=\"menuitemradio\"],\n                            &[role=\"menuitemcheckbox\"] {\n                                i {\n                                    top: 22px;\n                                }\n                            }\n                        }\n                    }\n\n                    &.first {\n                        > a, > button {\n                            border-top-left-radius: 8px;\n                            border-top-right-radius: 8px;\n                        }\n                    }\n\n                    &.submenu-header + li.first {\n                        > a, > button {\n                            border-top-left-radius: 0;\n                            border-top-right-radius: 0;\n                        }\n                    }\n\n                    &:last-child {\n                        > a, > button {\n                            border-bottom-left-radius: 8px;\n                            border-bottom-right-radius: 8px;\n                        }\n                    }\n                }\n\n                &.submenu-visible {\n                    > li:not(.submenu-expanded) {\n                        display: none;\n                    }\n                }\n            }\n        }\n    }\n\n    .backend-dropdown-overlay-touch-screen-enter-active,\n    .backend-dropdown-overlay-touch-screen-leave-active {\n        transition: opacity .2s;\n    }\n\n    .backend-dropdown-overlay-touch-screen-enter,\n    .backend-dropdown-overlay-touch-screen-leave-to {\n        opacity: 0;\n    }\n\n    .backend-dropdown-menu-touch-screen-enter-active,\n    .backend-dropdown-menu-touch-screen-leave-active {\n        transition: transform 0.2s ease-out;\n    }\n\n    .backend-dropdown-menu-touch-screen-enter,\n    .backend-dropdown-menu-touch-screen-leave-to {\n        transform: translate(0, 100%);\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenu/assets/js/dropdownmenu-utils.js",
    "content": "class DropdownmenuUtils {\n    alignToTriggerElement(triggerElementOrEvent, positionContainer, isSubmenu, preferablePosition) {\n        var calculatedLeft = 0,\n            calculatedTop = 0,\n            $positionContainer = $(positionContainer),\n            containerOffsetParentOffset = $positionContainer.offsetParent().offset();\n\n        if (triggerElementOrEvent.pageX !== undefined && triggerElementOrEvent.pageY !== undefined) {\n            calculatedLeft = triggerElementOrEvent.pageX - containerOffsetParentOffset.left;\n            calculatedTop = triggerElementOrEvent.pageY - containerOffsetParentOffset.top;\n        }\n        else {\n            // Here we calculate the position of the menu element\n            // relative to its offset parent, using the coordinates\n            // of the trigger element relative to the document.\n            //\n            var $triggerElement = $(triggerElementOrEvent),\n                $triggerOffset = $triggerElement.offset(),\n                calculatedLeft = $triggerOffset.left - containerOffsetParentOffset.left,\n                calculatedTop =\n                    $triggerOffset.top - containerOffsetParentOffset.top + $triggerElement.outerHeight();\n\n            if (isSubmenu) {\n                calculatedLeft += $triggerElement.width();\n                calculatedTop -= $triggerElement.height();\n            }\n            else if (preferablePosition === 'right') {\n                calculatedLeft += $triggerElement.outerWidth() + 12;\n                calculatedTop -= $triggerElement.outerHeight();\n            }\n            else if (preferablePosition === 'bottom-right') {\n                calculatedLeft -= $positionContainer.outerWidth() - $triggerElement.outerWidth();\n            }\n        }\n\n        // Adjust the position if the menu is close to the\n        // right edge of the page.\n        //\n        var containerWidth = $positionContainer.width(),\n            documentWidth = $(document.body).width(),\n            calculatedLeftInDocCoords = calculatedLeft + containerOffsetParentOffset.left;\n\n        if (calculatedLeftInDocCoords + containerWidth + 15 >= documentWidth) {\n            var offset = calculatedLeftInDocCoords + containerWidth - documentWidth + 15;\n\n            calculatedLeft -= offset;\n        }\n\n        // Adjust the bottom edge if the menu is close\n        // to the bottom of the page\n        //\n        var containerHeight = $positionContainer.height(),\n            documentHeight = $(document).height(),\n            calculatedTopInDocCoords = calculatedTop + containerOffsetParentOffset.top;\n\n        if (calculatedTopInDocCoords + containerHeight + 15 >= documentHeight) {\n            var offset = calculatedTopInDocCoords + containerHeight - documentHeight + 15;\n\n            calculatedTop -= offset;\n\n            var newTopInDocCoords = calculatedTop + containerOffsetParentOffset.top;\n            if (newTopInDocCoords < 15) {\n                calculatedTop -= calculatedTop + containerOffsetParentOffset.top - 15;\n            }\n        }\n\n        $positionContainer.css('left', calculatedLeft);\n        $positionContainer.css('top', calculatedTop);\n    }\n\n    findMenuItem(items, keyPathArray, property) {\n        return $.oc.vueUtils.findObjectByKeyPath(items, keyPathArray, 'items', property);\n    }\n\n    findMenuItems(items, keyPathArrays, property) {\n        var result = {};\n\n        for (var index = 0; index < keyPathArrays.length; index++) {\n            var keyPathArray = keyPathArrays[index];\n\n            result[keyPathArray.join('-')] = this.findMenuItem(items, keyPathArray, property);\n        }\n\n        return result;\n    }\n\n    checkItemInGroup(groupItems, checkedItemCommand) {\n        for (var index = 0; index < groupItems.length; index++) {\n            var item = groupItems[index];\n            item.checked = item.command == checkedItemCommand;\n        }\n    }\n}\n\nexport default new DropdownmenuUtils();\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenu/assets/js/dropdownmenu.js",
    "content": "export default {\n    props: {\n        items: Array,\n        menuId: String,\n        labeledById: String,\n        managedTriggerSelector: String,\n        preferablePosition: {\n            type: String,\n            validator: function (value) {\n                return ['right', 'bottom-right'].indexOf(value) !== -1;\n            }\n        }\n    },\n    data: function () {\n        return {\n            visible: false\n        };\n    },\n    computed: {},\n    beforeUnmount: function beforeUnmount() {\n        $(document.body).off('.backenddropdownmenu', this.onKeyDown);\n    },\n    methods: {\n        showMenu: function showMenu(triggerElementOrEvent) {\n            this.visible = true;\n            this.$refs.sheet.show(triggerElementOrEvent);\n\n            $(document.body).on('keydown.backenddropdownmenu', this.onKeyDown);\n\n            var that = this;\n            Vue.nextTick(function () {\n                that.$emit('shown');\n\n                if (that.managedTriggerSelector) {\n                    $(that.managedTriggerSelector).attr('aria-expanded', 'true');\n                }\n            });\n        },\n\n        hideMenu: function hideMenu(sheetHidden) {\n            $(document.body).off('.backenddropdownmenu', this.onKeyDown);\n\n            if (!sheetHidden && this.$refs.sheet) {\n                this.$refs.sheet.hide();\n            }\n\n            this.visible = false;\n            var that = this;\n            Vue.nextTick(function () {\n                that.$emit('hidden');\n\n                if (that.managedTriggerSelector) {\n                    $(that.managedTriggerSelector).removeAttr('aria-expanded', 'true');\n                }\n            });\n        },\n\n        onOverlayClick: function onOverlayClick() {\n            this.hideMenu();\n        },\n\n        onSheetHidden: function onMenuHidden(ev) {\n            this.hideMenu(true);\n        },\n\n        onKeyDown: function onKeyDown(ev) {\n            if (ev.keyCode == 27) {\n                this.hideMenu();\n                this.$emit('closedwithesc');\n\n                if (this.managedTriggerSelector) {\n                    var that = this;\n                    Vue.nextTick(function () {\n                        $(that.managedTriggerSelector).focus();\n                    });\n                }\n\n                return;\n            }\n\n            return this.$refs.sheet.onKeyDown(ev);\n        },\n\n        onOverlayContextMenu: function onOverlayContextMenu(ev) { }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenu/assets/js/menuitem.js",
    "content": "export default {\n    props: {\n        type: {\n            type: String,\n            required: true,\n            validator: function (value) {\n                return ['radiobutton', 'checkbox', 'text', 'separator'].indexOf(value) !== -1;\n            }\n        },\n        disabled: Boolean,\n        href: String,\n        target: String,\n        checked: Boolean,\n        items: Array,\n        icon: String,\n        label: String,\n        itemStyle: String,\n        command: [String, Object],\n        isFirst: Boolean\n    },\n    data: function () {\n        return {\n            menuItemId: null,\n            submenuId: null,\n            isSubmenuExpanded: false,\n            componentUid: null\n        };\n    },\n    computed: {\n        itemRole: function computeItemRole() {\n            if (this.type !== 'radiobutton' && this.type !== 'checkbox') {\n                return 'menuitem';\n            }\n\n            if (this.type == 'checkbox') {\n                return 'menuitemcheckbox';\n            }\n\n            return 'menuitemradio';\n        },\n\n        itemIsChecked: function computeItemIsChecked() {\n            if (this.type !== 'radiobutton' && this.type !== 'checkbox') {\n                return false;\n            }\n\n            return !!this.checked;\n        },\n\n        hasSubmenu: function computeHasSubmenu() {\n            return this.items && this.items.length > 0;\n        }\n    },\n    methods: {\n        hideSubmenu: function hideSubmenu() {\n            if (this.hasSubmenu) {\n                this.$refs.submenu.hide();\n            }\n        },\n\n        showSubmenu: function showSubmenu() {\n            if (this.hasSubmenu && !this.disabled && this.$refs.submenu) {\n                if (this.$refs.submenu.show(this.$el)) {\n                    this.isSubmenuExpanded = true;\n                    this.$emit('submenushown');\n                }\n            }\n        },\n\n        notifyMenuClosing: function notifyMenuClosing() {\n            if (this.hasSubmenu) {\n                this.$refs.submenu.notifyMenuClosing();\n                this.isSubmenuExpanded = false;\n            }\n        },\n\n        onClick: function onClick(ev, item) {\n            if (this.disabled) {\n                ev.preventDefault();\n                ev.stopPropagation();\n                return false;\n            }\n\n            if (this.hasSubmenu) {\n                this.showSubmenu();\n                ev.preventDefault();\n                ev.stopPropagation();\n                return false;\n            }\n\n            if (this.href) {\n                this.$emit('closemenu');\n                return;\n            }\n\n            if (!this.command) {\n                throw new Error('command option is not set for menu item');\n            }\n\n            ev.preventDefault();\n            ev.stopPropagation();\n\n            this.$emit('command', this.command);\n            return false;\n        },\n\n        onMouseEnter: function onMouseEnter() {\n            this.$emit('itemmouseenter', this.componentUid);\n            this.showSubmenu();\n\n            if (!this.disabled && this.$refs.itemElement) {\n                var that = this;\n                Vue.nextTick(function () {\n                    that.$refs.itemElement.focus();\n                });\n            }\n        },\n\n        onKeyDown: function onKeyDown(ev) {\n            if (this.hasSubmenu) {\n                this.$refs.submenu.onKeyDown(ev);\n            }\n        },\n\n        onSubmenuHidden: function onSubmenuHidden(ev) {\n            this.$refs.itemElement.focus();\n            this.isSubmenuExpanded = false;\n            this.$emit('submenuhidden');\n        }\n    },\n    mounted: function onMounted() {\n        this.menuItemId = $.oc.domIdManager.generate('menuitem');\n        this.submenuId = $.oc.domIdManager.generate('dropdown-submenu');\n        this.componentUid = $.oc.domIdManager.generate('menuitem-uid');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenu/assets/js/sheet.js",
    "content": "import dropdownMenuUtils from './dropdownmenu-utils.js';\n\nexport default {\n    props: {\n        items: Array,\n        menuId: String,\n        labeledById: String,\n        isSubmenu: Boolean,\n        preferablePosition: String\n    },\n    data: function() {\n        return {\n            visible: false,\n            submenuVisible: false,\n            menuItemRefs: [],\n            componentUid: null\n        };\n    },\n    computed: {\n        menuClassName: function computeMenuClassName() {\n            var hasIcons = false,\n                hasSubmenus = false;\n\n            for (var index = 0; index < this.items.length; index++) {\n                var hasState = ['radiobutton', 'checkbox'].indexOf(this.items[index].type) !== -1;\n\n                if (this.items[index].icon && hasState) {\n                    throw new Error('Radio button and checkbox dropdown menu items cannot have icons');\n                }\n\n                if (this.items[index].icon || hasState) {\n                    hasIcons = true;\n                }\n\n                if (this.items[index].items && this.items[index].items.length) {\n                    hasSubmenus = true;\n                }\n            }\n\n            var result = [];\n            if (hasIcons) {\n                result.push('has-icons');\n            }\n\n            if (hasSubmenus) {\n                result.push('has-submenus');\n            }\n\n            if (this.submenuVisible) {\n                result.push('submenu-visible');\n            }\n\n            return result.join(' ');\n        }\n    },\n    methods: {\n        setMenuItemRef: function setMenuItemRef(el, index) {\n            if (el) {\n                this.menuItemRefs[index] = el;\n            }\n        },\n\n        getMenuItems: function getMenuItems() {\n            return this.menuItemRefs.filter(function(item) {\n                return item != null;\n            });\n        },\n\n        show: function show(triggerElementOrEvent) {\n            if (this.visible) {\n                return;\n            }\n\n            this.menuItemRefs = [];\n            this.visible = true;\n\n            var that = this;\n            Vue.nextTick(function() {\n                $.oc.modalFocusManager.push(that.onFocusIn, 'dropdownmenu-sheet', that.componentUid);\n\n                if (!triggerElementOrEvent) {\n                    var eventData = {\n                        triggerElementOrEvent: null\n                    };\n                    that.$emit('aligntotrigger', eventData);\n                    if (eventData.triggerElement !== null) {\n                        that.onAlignToTrigger(eventData.triggerElement);\n                    }\n                }\n                else {\n                    that.onAlignToTrigger(triggerElementOrEvent);\n                }\n            });\n\n            return true;\n        },\n\n        hide: function hide() {\n            if (!this.visible) {\n                return false;\n            }\n\n            this.visible = false;\n            this.notifyMenuClosing();\n\n            var that = this;\n            Vue.nextTick(function() {\n                $.oc.modalFocusManager.pop();\n                that.$emit('hidden');\n            });\n\n            return true;\n        },\n\n        notifyMenuClosing: function notifyMenuClosing() {\n            this.submenuVisible = false;\n\n            var menuItems = this.getMenuItems();\n            for (var index = 0; index < menuItems.length; index++) {\n                var item = menuItems[index];\n                item.notifyMenuClosing();\n            }\n        },\n\n        getFocusedItem: function getCurrentFocus() {\n            return $(this.$el).find('li [data-menuitem]:focus').closest('li');\n        },\n\n        onFocusIn: function onFocusIn(ev) {\n            if (!ev) {\n                $(this.$el).find('li:not([disabled]):not(.separator) [data-menuitem]').first().focus();\n\n                return;\n            }\n\n            if (document !== event.target && this.$el !== event.target && !this.$el.contains(event.target)) {\n                $(this.$el).find('li:not([disabled]):not(.separator) [data-menuitem]').first().focus();\n            }\n        },\n\n        onKeyDown: function onKeyDown(ev) {\n            if (!this.visible) {\n                return;\n            }\n\n            var menuItems = this.getMenuItems();\n            for (var index = 0; index < menuItems.length; index++) {\n                var item = menuItems[index];\n                item.onKeyDown(ev);\n            }\n\n            if (!$.oc.modalFocusManager.isUidTop(this.componentUid)) {\n                return;\n            }\n\n            // Up/down/tab arrow handling\n            //\n\n            if ([9, 37, 38, 39, 40].indexOf(ev.keyCode) === -1) {\n                return;\n            }\n\n            if (ev.keyCode == 37 && this.isSubmenu) {\n                this.hide();\n\n                ev.preventDefault();\n                ev.stopPropagation();\n                return;\n            }\n\n            var focused = this.getFocusedItem(),\n                newFocused = [];\n\n            if (focused.length) {\n                if (ev.keyCode == 40 || ev.keyCode == 9) {\n                    newFocused = focused.nextAll('li.item:not([disabled]):not(.separator)').first();\n\n                    if (!newFocused.length && ev.keyCode == 9) {\n                        // Allow Tab to cycle\n                        newFocused = $(this.$el).find('li.item:not([disabled]):not(.separator)').first();\n                    }\n                }\n\n                if (ev.keyCode == 38) {\n                    newFocused = focused.prevAll('li.item:not([disabled]):not(.separator)').first();\n                }\n\n                if (ev.keyCode == 39) {\n                    var item = focused.find('> [data-menuitem].has-submenu:not([disabled])');\n                    if (item.length) {\n                        item.trigger('click');\n\n                        ev.preventDefault();\n                        ev.stopPropagation();\n                        return;\n                    }\n                }\n            }\n            else {\n                newFocused = $(this.$el).find('li.item:not([disabled]):not(.separator)').first();\n            }\n\n            if (newFocused.length) {\n                newFocused.find('[data-menuitem]').focus();\n            }\n\n            ev.preventDefault();\n            ev.stopPropagation();\n            return false;\n        },\n\n        onAlignToTrigger: function(triggerElementOrEvent) {\n            var positionContainer = $(this.$el).closest('[data-menu-position-container]').get(0);\n            dropdownMenuUtils.alignToTriggerElement(\n                triggerElementOrEvent,\n                positionContainer,\n                this.isSubmenu,\n                this.preferablePosition\n            );\n        },\n\n        onCommand: function onCommand(data) {\n            this.hide();\n            this.$emit('command', data);\n        },\n\n        onHide: function onHide() {\n            this.hide();\n        },\n\n        onItemMouseEnter: function onItemMouseEnter(uid) {\n            var menuItems = this.getMenuItems();\n            for (var index = 0; index < menuItems.length; index++) {\n                var item = menuItems[index];\n\n                if (item.componentUid != uid) {\n                    item.hideSubmenu();\n                }\n            }\n        },\n\n        onAfterLeave: function onAfterLeave() {\n            if ($.oc.isTouchEnabled()) {\n                Vue.nextTick(function() {\n                    //  $('document.body').removeClass(''); // TODO for a root sheet\n                });\n            }\n        },\n\n        onItemSubmenuShown: function onItemSubmenuShown() {\n            this.submenuVisible = true;\n        },\n\n        onItemSubmenuHidden: function onItemSubmenuShown() {\n            this.submenuVisible = false;\n        },\n\n        onCloseClick: function onCloseClick() {\n            this.$emit('closemenu');\n        },\n\n        onGoBackClick: function onGoBackClick() {\n            this.hide();\n        }\n    },\n    mounted: function onMounted() {\n        this.componentUid = $.oc.domIdManager.generate('dropdown-sheet-uid');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenu/partials/_dropdownmenu.php",
    "content": "<div>\n    <transition name=\"backend-dropdown-overlay-touch-screen\">\n        <div v-if=\"visible\" class=\"backend-dropdownmenu-overlay\" @click.prevent=\"onOverlayClick\" @contextmenu.prevent=\"onOverlayContextMenu\"></div>\n    </transition>\n\n    <backend-dropdown-menu-sheet\n        ref=\"sheet\"\n        :items=\"items\"\n        :labeled-by-id=\"labeledById\"\n        :menu-id=\"menuId\"\n        :preferable-position=\"preferablePosition\"\n        @aligntotrigger=\"$emit('aligntotrigger', $event)\"\n        @command=\"$emit('command', $event)\"\n        @hidden=\"onSheetHidden\"\n        @closemenu=\"hideMenu\"\n    ></backend-dropdown-menu-sheet>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenu/partials/_menuitem.php",
    "content": "<li\n    class=\"item\"\n    :class=\"{\n        separator: type == 'separator',\n        first: isFirst,\n        'submenu-expanded': isSubmenuExpanded\n    }\"\n    v-bind:role=\"type == 'separator' ? 'separator' : 'presentation'\"\n    v-bind:disabled=\"disabled\"\n>\n    <button v-if=\"!href && type != 'separator'\"\n        ref=\"itemElement\"\n        v-bind:tabindex=\"disabled ? -1 : 0\"\n        v-bind:disabled=\"disabled\"\n        v-bind:aria-disabled=\"disabled\"\n        v-bind:role=\"itemRole\"\n        v-bind:aria-checked=\"itemIsChecked ? 'true' : 'false'\"\n        v-bind:id=\"menuItemId\"\n        v-bind:aria-haspopup=\"hasSubmenu\"\n        v-bind:aria-expanded=\"isSubmenuExpanded\"\n        :class=\"{'has-submenu': hasSubmenu}\"\n        :style=\"itemStyle\"\n        @click=\"onClick($event)\"\n        @mouseenter=\"onMouseEnter\"\n        data-menuitem\n    >\n        <i :class=\"icon\" v-if=\"icon\"></i>\n        <i\n            class=\"backend-icon-background-pseudo\"\n            v-if=\"type == 'checkbox' || type == 'radiobutton'\"\n        ></i>\n        <i\n            class=\"backend-icon-background-pseudo submenu-indicator\"\n            v-if=\"hasSubmenu\"\n        ></i>\n        <span v-text=\"label\"></span>\n    </button>\n\n    <a\n        ref=\"itemElement\"\n        v-if=\"href && type != 'separator'\"\n        v-bind:href=\"href\"\n        v-bind:target=\"target ? target : '_self'\"\n        v-bind:tabindex=\"disabled ? -1 : 0\"\n        v-bind:disabled=\"disabled || undefined\"\n        v-bind:aria-disabled=\"disabled || undefined\"\n        v-bind:aria-checked=\"itemIsChecked ? 'true' : 'false'\"\n        v-bind:role=\"itemRole\"\n        :style=\"itemStyle\"\n        @click=\"onClick($event)\"\n        @mouseenter=\"onMouseEnter\"\n        data-menuitem\n    >\n        <i :class=\"icon\" v-if=\"icon\"></i>\n        <i\n            class=\"backend-icon-background-pseudo\"\n            v-if=\"type == 'checkbox' || type == 'radiobutton'\"\n        ></i>\n        <span v-text=\"label\"></span>\n    </a>\n\n    <backend-dropdown-menu-sheet\n        v-if=\"hasSubmenu\"\n        ref=\"submenu\"\n        :items=\"items\"\n        :labeled-by-id=\"menuItemId\"\n        :menu-id=\"submenuId\"\n        :is-submenu=\"true\"\n        @command=\"$emit('command', $event)\"\n        @hidden=\"onSubmenuHidden\"\n        @closemenu=\"$emit('closemenu', $event)\"\n    ></backend-dropdown-menu-sheet>\n</li>"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenu/partials/_sheet.php",
    "content": "<div class=\"dropdown-menu backend-dropdownmenu\" data-menu-position-container>\n    <div class=\"dropdown-container\">\n        <transition name=\"backend-dropdown-menu-touch-screen\" v-on:after-leave=\"onAfterLeave\">\n            <ul\n                role=\"menu\"\n                :class=\"menuClassName\"\n                ref=\"menu\"\n                v-if=\"visible\"\n                v-bind:id=\"menuId\"\n                v-bind:aria-labelledby=\"labeledById\"\n            >\n                <li class=\"submenu-header clearfix\" v-if=\"isSubmenu\">\n                    <button\n                        class=\"go-back-link backend-icon-background-pseudo\"\n                        @click.stop.prevent=\"onGoBackClick\"\n                    ><?= e(trans('backend::lang.dropdownmenu.go_back')) ?></button>\n                    <button\n                        class=\"close-link backend-icon-background-pseudo\"\n                        @click.stop.prevent=\"onCloseClick\"\n                    ><?= e(trans('backend::lang.dropdownmenu.close_menu')) ?></button>\n                </li>\n\n                <backend-dropdown-menu-menuitem\n                    v-for=\"(item, index) in items\"\n                    :ref=\"el => setMenuItemRef(el, index)\"\n                    :type=\"item.type\"\n                    :disabled=\"item.disabled\"\n                    :href=\"item.href\"\n                    :target=\"item.target\"\n                    :checked=\"item.checked\"\n                    :items=\"item.items\"\n                    :icon=\"item.icon\"\n                    :label=\"item.label\"\n                    :command=\"item.command\"\n                    :itemStyle=\"item.style\"\n                    :key=\"index\"\n                    :is-first=\"index == 0\"\n                    @command=\"onCommand($event)\"\n                    @hide=\"onHide\"\n                    @itemmouseenter=\"onItemMouseEnter\"\n                    @submenushown=\"onItemSubmenuShown\"\n                    @submenuhidden=\"onItemSubmenuHidden\"\n                    @closemenu=\"$emit('closemenu', $event)\"\n                ></backend-dropdown-menu-menuitem>\n            </ul>\n        </transition>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenubutton/assets/js/dropdownmenubutton.js",
    "content": "export default {\n    props: {\n        menuitems: {\n            type: Array,\n            required: true\n        },\n        disabled: Boolean,\n        cssClass: String,\n        label: String,\n        preferableMenuPosition: String,\n        currentLabelCommand: String\n    },\n    data: function () {\n        return {\n            menuId: null,\n            buttonId: null,\n            menuButtonId: null\n        };\n    },\n    computed: {\n        buttonText: function computeButtonText() {\n            if (this.currentLabelCommand === null) {\n                return this.label;\n            }\n\n            if (!this.menuitems) {\n                return null;\n            }\n\n            const item = this.menuitems.find(item => item.command == this.currentLabelCommand);\n            if (!item) {\n                return null;\n            }\n\n            return item.label;\n        }\n    },\n    methods: {\n        onClick: function onClick(ev, isHotkey, isMenuButton) {\n            if (this.disabled || $(document.body).hasClass('drag')) {\n                ev.preventDefault();\n                ev.stopPropagation();\n                return false;\n            }\n\n            ev.preventDefault();\n            ev.stopPropagation();\n\n            this.$refs.menu.showMenu(this.$el);\n            return false;\n        },\n\n        onMenuShown: function onMenuShown() {\n            $(this.$refs.button).attr('aria-expanded', 'true');\n        },\n\n        onMenuHidden: function onMenuHidden() {\n            $(this.$refs.button).removeAttr('aria-expanded');\n        },\n\n        onMenuItemCommand: function onMenuItemCommand(command) {\n            this.$emit('command', command, false, null, this.$el);\n        }\n    },\n    mounted: function onMounted() {\n        this.menuId = $.oc.domIdManager.generate('dropdown-menu');\n        this.buttonId = $.oc.domIdManager.generate('dropdownmenubutton-button');\n        this.menuButtonId = $.oc.domIdManager.generate('dropdownmenubutton-menu');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/dropdownmenubutton/partials/_dropdownmenubutton.php",
    "content": "<div>\n    <button\n        v-bind:disabled=\"disabled\"\n        v-bind:tabindex=\"disabled ? -1 : 0\"\n        v-bind:id=\"buttonId\"\n        ref=\"button\"\n        :class=\"cssClass\"\n        @click=\"onClick\"\n    >\n        <span class=\"button-label\" v-text=\"buttonText\"></span>\n    </button>\n\n    <backend-dropdown-menu\n        :items=menuitems\n        :menu-id=\"menuId\"\n        :labeled-by-id=\"buttonId\"\n        ref=\"menu\"\n        @command=\"onMenuItemCommand\"\n        @shown=\"onMenuShown\"\n        @hidden=\"onMenuHidden\"\n        :preferable-position=\"preferableMenuPosition\"\n    ></backend-dropdown-menu>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/infotable/assets/css/infotable.css",
    "content": ".component-backend-infotable {\n    width: 100%;\n    margin-bottom: 30px;\n\n    > tbody > tr {\n        > th,\n        > td {\n            line-height: 150%;\n            padding: 7px;\n            font-weight: normal;\n            border-bottom: 1px solid var(--oc-primary-border);\n            color: var(--oc-toolbar-color);\n            vertical-align: top;\n        }\n\n        > td {\n            padding-right: 0;\n        }\n\n        > th {\n            padding-left: 0;\n            font-weight: 600;\n            color: var(--oc-primary-color);\n            width: 100px;\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/infotable/assets/js/infotable.js",
    "content": "/*\n *  Read-only information table implementation\n */\nexport default {\n    props: {\n        items: {\n            type: Array,\n            required: true\n        }\n    },\n    data: function () {\n        return {};\n    },\n    computed: {},\n    methods: {}\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/infotable/assets/js/item.js",
    "content": "/*\n *  Read-only information table item implementation\n */\nexport default {\n    props: {\n        title: {\n            type: String,\n            required: true\n        },\n        value: {\n            type: String,\n            required: true\n        }\n    },\n    data: function () {\n        return {};\n    },\n    computed: {},\n    methods: {}\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/infotable/partials/_infotable.php",
    "content": "<table class=\"component-backend-infotable\">\n    <tbody>\n        <backend-info-table-item\n            v-for=\"item in items\"\n            :title=\"item.title\"\n            :value=\"item.value\"\n            :key=\"item.title\"\n        >\n        </backend-info-table-item>\n    </tbody>\n</table>"
  },
  {
    "path": "modules/backend/vuecomponents/infotable/partials/_item.php",
    "content": "<tr>\n    <th v-text=\"title\"></th>\n    <td v-text=\"value\"></td>\n</tr>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_control-autocomplete.css",
    "content": ".component-backend-inspector-panel .component-backend-inspector-controlhost {\n    div.autocomplete {\n        input.autocomplete-input {\n            height: var(--inspector-control-height);\n            padding-top: 0;\n            padding-left: var(--inspector-base-control-side-padding);\n            padding-right: 0;\n            padding-bottom: 0;\n            line-height: var(--inspector-control-height);\n            border: none;\n            display: block;\n            -webkit-appearance: none;\n            width: 100%;\n            box-sizing: border-box;\n            outline: none;\n            background-color: transparent;\n            color: var(--bs-body-color);\n            font-size: inherit;\n            background-image: none;\n\n            &[readonly] {\n                color: var(--oc-form-control-disabled-color) !important;\n            }\n\n            &.clickable {\n                cursor: pointer;\n                user-select: none;\n\n                &[readonly] {\n                    cursor: default;\n                }\n            }\n\n            &.act-as-text-input {\n                overflow: hidden;\n                text-overflow: ellipsis;\n                white-space: nowrap;\n            }\n\n            &.placeholder {\n                color: var(--inspector-placeholder-color);\n                background-color: transparent;\n            }\n\n            &::placeholder {\n                color: var(--inspector-placeholder-color) !important;\n            }\n\n            &:focus, &[aria-expanded=true] {\n                box-shadow: none;\n            }\n        }\n\n        ul.autocomplete-result-list {\n            margin-top: 3px;\n            border-radius: 4px;\n            border-color: var(--oc-primary-border);\n            padding: 3px;\n            user-select: none;\n            box-shadow: -2px 2px 5px rgba(67, 86, 100, 0.12);\n\n            li.autocomplete-result {\n                padding: 0 var(--inspector-base-control-side-padding);\n                border-radius: 2px;\n                min-height: 30px;\n                line-height: 30px;\n                background-image: none;\n\n                &[aria-selected=true] {\n                    background: var(--oc-selection) !important;\n                    color: white !important;\n                }\n\n                &:hover {\n                    background: var(--oc-toolbar-hover-bg);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_control-checkbox.css",
    "content": ".component-backend-inspector-panel .component-backend-inspector-controlhost {\n    .component-backend-inspector-checkbox {\n        label {\n            margin: 0;\n            padding: 0;\n            outline: none;\n            border-radius: 4px;\n            position: relative;\n            top: 2px;\n\n            &:focus {\n                box-shadow: 0 0 0px 2px rgba(0, 0, 0, 0.15);\n            }\n\n            input {\n                display: none;\n            }\n\n            span {\n                display: block;\n                width: 16px;\n                height: 16px;\n\n                &:before {\n                    width: 16px;\n                    height: 16px;\n                    display: block;\n                    background-position: -88px -40px;\n                }\n            }\n\n            input:checked + span:before {\n                background-position: -68px -40px;\n            }\n\n            input[readonly]:checked + span:before {\n                background-position: -108px -40px;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_control-dropdown.css",
    "content": ".component-backend-inspector-panel .component-backend-inspector-controlhost {\n    div.multiselect {\n        font-size: 14px;\n        color: inherit;\n        min-height: 0;\n\n        &, .multiselect__input, .multiselect__single {\n            font-size: 14px;\n        }\n\n        &.multiselect--disabled, .multiselect--disabled {\n            &, .multiselect__select {\n                background: transparent;\n                opacity: 1;\n                color: #899C9D;\n            }\n\n            .multiselect__select {\n                opacity: 0.5;\n            }\n        }\n\n        .multiselect__content-wrapper {\n            z-index: 1000;\n        }\n\n        .multiselect__single {\n            overflow: hidden;\n            text-overflow: ellipsis;\n            width: 100%;\n            white-space: nowrap;\n        }\n\n        /* Placeholder */\n        span > .multiselect__single {\n            color: var(--inspector-placeholder-color);\n        }\n\n        .multiselect__input, .multiselect__single {\n            line-height: var(--inspector-control-height);\n            height: var(--inspector-control-height);\n            padding: 0;\n            margin: 0;\n        }\n\n        .multiselect__input::placeholder {\n            color: var(--inspector-placeholder-color) !important;\n        }\n\n        .multiselect__content-wrapper {\n            margin-left: -1px;\n            margin-top: 3px;\n            border-radius: 4px;\n            box-sizing: content-box;\n            border-color: var(--oc-primary-border);\n            border-top: 1px solid var(--oc-primary-border);\n            padding: 3px;\n            box-shadow: -2px 2px 5px rgba(67, 86, 100, 0.12);\n\n            ul.multiselect__content {\n                display: block !important;\n\n                li span.multiselect__option {\n                    min-height: 30px;\n                    line-height: 30px;\n                    padding: 0 var(--inspector-base-control-side-padding);\n                    border-radius: 2px;\n\n                    &.multiselect__option--highlight {\n                        background: var(--oc-selection);\n                    }\n\n                    &.multiselect__option--selected {\n                        font-weight: 600;\n                    }\n\n                    span {\n                        display: block;\n                        text-overflow: ellipsis;\n                        overflow: hidden;\n                        white-space: nowrap;\n                    }\n                }\n            }\n        }\n\n        .multiselect__tags {\n            border: none;\n            padding: 0 15px 0 var(--inspector-base-control-side-padding);\n            margin: 0;\n            line-height: var(--inspector-control-height);\n            min-height: var(--inspector-control-height);\n            height: var(--inspector-control-height);\n        }\n\n        .multiselect__select {\n            top: 0;\n            right: 0;\n            height: var(--inspector-control-height);\n            width: 15px;\n            margin: 0;\n            padding: 0;\n            transition: none;\n\n            &:before {\n                width: 10px;\n                height: 6px;\n                margin: 0;\n                right: 0;\n                top: 9px;\n                border: none;\n                display: inline-block;\n                background-position: -182px 0;\n            }\n        }\n\n        &.multiselect--above {\n            .multiselect__content-wrapper {\n                margin-top: 0;\n                margin-bottom: 3px;\n                border-bottom: 1px solid var(--oc-primary-border);\n            }\n        }\n\n        &.multiselect--active {\n            .multiselect__select:before {\n                top: 7px;\n            }\n        }\n\n        .multiselect-enter-active,\n        .multiselect-leave-active {\n            transition: none;\n        }\n\n        .option-with-icon {\n            display: flex;\n\n            .option-icon {\n                width: 26px;\n                font-size: 22px;\n                position: relative;\n\n                &:before {\n                    top: 4px;\n                    left: -4px;\n                    position: absolute;\n                }\n            }\n        }\n\n        .option-with-color {\n            display: flex;\n\n            .option-color {\n                width: 18px;\n                height: 18px;\n                position: relative;\n                top: 5px;\n                border: 1px solid white;\n                margin-right: 5px;\n            }\n        }\n    }\n\n    /* Override vendor styles */\n    div.multiselect {\n        .multiselect__input,\n        .multiselect__single,\n        .multiselect__tags {\n            background: transparent;\n            color: var(--bs-body-color);\n        }\n        .multiselect__content-wrapper {\n            background: var(--oc-form-control-bg);\n        }\n        .multiselect__option--selected {\n            color: var(--bs-secondary-color);\n            background: var(--bs-tertiary-bg);\n        }\n        .multiselect__option--highlight {\n            color: #fff;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_control-table-dropdown.css",
    "content": ".component-backend-inspector-panel .component-backend-inspector-controlhost .component-backend-inspector-table table tbody {\n    td {\n        --dropdown-height: 36px;\n\n        .inspector-table-dropdown-container {\n            padding-right: 0;\n\n            .dropdown-placeholder {\n                position: absolute;\n                padding: 0 42px 0 12px;\n                white-space: nowrap;\n                text-overflow: ellipsis;\n                overflow: hidden;\n                width: 100%;\n                left: 0;\n                top: 0;\n                line-height: var(--dropdown-height);\n                color: var(--inspector-placeholder-color);\n            }\n        }\n\n        div.multiselect {\n            .multiselect__select {\n                height: var(--dropdown-height);\n                width: 20px;\n\n                &:before {\n                    top: 8px;\n                }\n            }\n\n            .multiselect__tags {\n                padding-right: 20px;\n                height: var(--dropdown-height);\n                line-height: var(--dropdown-height);\n                min-height: var(--dropdown-height);\n            }\n\n            .multiselect__single {\n                line-height: var(--dropdown-height);\n                height: var(--dropdown-height);\n            }\n\n            .multiselect__input {\n                line-height: var(--dropdown-height);\n                height: var(--dropdown-height);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_control-table-text.css",
    "content": ".component-backend-inspector-panel .component-backend-inspector-controlhost .component-backend-inspector-table table tbody {\n    td {\n        input.inspector-table-control-text {\n            padding: var(--table-cell-base-padding-v) 0 var(--table-cell-base-padding-v) var(--table-cell-base-padding-h);\n            background: transparent;\n            border: none;\n            outline: none;\n            display: block;\n            width: 100%;\n\n            &[readonly] {\n                color: #899C9D;\n            }\n        }\n\n        &:first-child {\n            input.inspector-table-control-text {\n                padding-left: 0;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_control-table.css",
    "content": "@import \"_control-table-text.css\";\n@import \"_control-table-dropdown.css\";\n\n.component-backend-inspector-panel .component-backend-inspector-controlhost {\n    .component-backend-inspector-table {\n        --table-cell-base-padding-v: 8px;\n        --table-cell-base-padding-h: 10px;\n        --table-first-cell-padding: 20px;\n        --table-last-cell-padding: 23px;\n\n        table {\n            width: 100%;\n            table-layout: fixed;\n            border-top: 1px solid var(--oc-primary-border);\n\n            th, td {\n                border-right: 1px solid var(--oc-primary-border);\n                border-bottom: 1px solid var(--oc-primary-border);\n\n                &:last-child {\n                    border-right: none;\n                }\n            }\n\n            thead {\n                th {\n                    background-color: transparent;\n                    font-weight: 600;\n                    color: #5E6D8C;\n                    min-width: 50px;\n\n                    .header-cell-container {\n                        padding: var(--table-cell-base-padding-v) var(--table-cell-base-padding-h);\n                        position: relative;\n                        text-overflow: ellipsis;\n                        overflow: hidden;\n                        width: 100%;\n                        white-space: nowrap;\n\n                        .cell-resize-handle {\n                            position: absolute;\n                            left: -1px;\n                            top: 1px;\n                            width: 3px;\n                            height: 100%;\n                            cursor: col-resize;\n                        }\n                    }\n\n                    &:first-child .header-cell-container {\n                        padding-left: var(--table-first-cell-padding);\n                    }\n                }\n            }\n\n            tbody {\n                td {\n                    .table-cell-container {\n                        position: relative;\n                        padding-right: var(--table-cell-base-padding-h);\n                    }\n\n                    &:first-child {\n                        padding-left: var(--table-first-cell-padding);\n                    }\n\n                    &:last-child {\n                        .table-cell-container {\n                            padding-right: var(--table-last-cell-padding);\n                        }\n                    }\n\n                    &.no-sub-controls {\n                        padding-top: 7px;\n                        padding-bottom: 8px;\n                    }\n\n                    &.clickable {\n                        cursor: pointer;\n\n                        &:hover {\n                            background: var(--oc-toolbar-hover-bg);\n                        }\n\n                        .clickable-data-container {\n                            position: relative;\n                            display: flex;\n                            justify-content: space-between;\n\n                            .title-container {\n                                display: flex;\n                            }\n\n                            > span {\n                                word-break: break-all;\n                            }\n\n                            .remove-row-btn {\n                                position: relative;\n                                top: 4px;\n                            }\n                        }\n                    }\n\n                    .record-color {\n                        width: 18px;\n                        height: 18px;\n                        position: relative;\n                        top: 2px;\n                        border: 1px solid white;\n                        margin-right: 5px;\n                        flex-shrink: 0;\n                    }\n                }\n\n                tr.focused {\n                    td {\n                        border-bottom: 1px solid var(--bs-primary);\n                    }\n                }\n\n                tr.has-errors {\n                    &, &.focused {\n                        td {\n                            border-bottom: 1px solid var(--bs-danger);\n                        }\n                    }\n                }\n\n                .remove-row-btn {\n                    border: none;\n                    background: transparent;\n                    position: absolute;\n                    -webkit-appearance: none;\n                    width: 16px;\n                    height: 16px;\n                    right: 8px;\n                    top: 11px;\n                    padding: 0;\n                    outline: none;\n\n                    &:hover, &:focus {\n                        &:before {\n                            color: var(--bs-danger);\n                        }\n                    }\n\n                    &:before {\n                        font-family: 'octo-icon' !important;\n                        speak: none;\n                        font-style: normal;\n                        font-weight: normal;\n                        font-variant: normal;\n                        text-transform: none;\n                        line-height: 1;\n                        -webkit-font-smoothing: antialiased;\n                        -moz-osx-font-smoothing: grayscale;\n                        content: \"\\e93e\";\n                        font-size: 13px;\n                        display: inline-block;\n                        position: absolute;\n                        color: #72809d;\n                        left: 2px;\n                        top: 1px;\n                    }\n                }\n            }\n        }\n\n        .table-control-links {\n            padding-top: 10px;\n            padding-bottom: 10px;\n\n            a {\n                color: #72809d;\n                text-decoration: underline;\n\n                &:active, &:focus {\n                    color: var(--oc-link-color);\n                    outline: none;\n                }\n\n                &.disabled {\n                    cursor: default;\n                    color: #d7e1eA !important;\n                }\n            }\n        }\n    }\n\n    .no-property-title > .component-backend-inspector-table {\n        table {\n            border-top: none;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_control-text.css",
    "content": ".component-backend-inspector-panel .component-backend-inspector-controlhost {\n    .component-backend-inspector-textinput {\n        resize: none;\n        min-height: var(--inspector-control-height);\n        line-height: 150%;\n        padding-top: 7px;\n        padding-bottom: 5px;\n\n        &[readonly] {\n            color: #899C9D;\n        }\n\n        &.size-small {\n            max-height: 75px;\n        }\n\n        &.size-medium {\n            max-height: 150px;\n        }\n\n        &.size-large {\n            max-height: 300px;\n        }\n    }\n\n    .inspector-textarea-shadow {\n        max-height: none;\n        height: auto;\n        white-space: pre-wrap;\n        position: fixed;\n        left: -1000em;\n        top: -1000em;\n        visibility: hidden;\n\n        &:after {\n            content: '';\n            display: inline-block;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_controlhost.css",
    "content": ".component-backend-inspector-panel {\n    .component-backend-inspector-controlhost {\n        width: 100%;\n        table-layout: fixed; /* The fixed layout doesn't work well in some cases but it still must be \"fixed\" */\n        background-color: transparent;\n        border-top: 1px solid var(--oc-primary-border);\n\n        > tbody > tr {\n            > th,\n            > td {\n                padding: 0;\n                border-bottom: 1px solid var(--oc-primary-border);\n            }\n\n            &.hide-bottom-border {\n                > th,\n                > td {\n                    border-bottom: none;\n                }\n            }\n\n            &.focused {\n                > th,\n                > td {\n                    border-bottom: 1px solid var(--bs-primary);\n                }\n            }\n\n            &.has-errors {\n                &, &.focused {\n                    > th,\n                    > td {\n                        border-bottom: 1px solid var(--bs-danger);\n\n                        > .inspector-label-container {\n                            > label {\n                                color: var(--bs-danger);\n                            }\n                        }\n                    }\n                }\n            }\n\n            th {\n                background: #f0f4f8;\n                vertical-align: top;\n                user-select: none;\n            }\n        }\n\n        .inspector-control-container {\n            position: relative;\n\n            > div[tabindex] {\n                outline: none;\n            }\n\n            &:before {\n                content: '';\n                position: absolute;\n                left: -1px;\n                top: 0;\n                height: 100%;\n                width: 1px;\n                border-left: 1px dotted var(--oc-primary-border);\n                opacity: 1;\n                transition: opacity 0.35s;\n            }\n\n            .inspector-drag-handle {\n                position: absolute;\n                left: -1px;\n                top: 1px;\n                width: 3px;\n                height: 100%;\n                cursor: col-resize;\n            }\n\n            .component-backend-loading-indicator {\n                margin-left: var(--inspector-base-control-side-padding);\n            }\n        }\n\n        .inspector-label-container {\n            position: relative;\n\n            &.has-description label {\n                margin-right: 25px;\n            }\n\n            label {\n                display: block;\n                height: 35px;\n                padding-top: 0;\n                padding-bottom: 0;\n                padding-right: var(--inspector-base-control-side-padding);\n                margin: 0;\n                font-size: 14px;\n                line-height: 35px;\n                white-space: nowrap;\n                overflow: hidden;\n                text-overflow: ellipsis;\n                font-weight: 600;\n                color: var(--oc-primary-color);\n            }\n\n            .property-description {\n                display: block;\n                position: absolute;\n                right: 5px;\n                top: 8px;\n                width: 19px;\n                height: 19px;\n                border-radius: 25px;\n\n                &:before {\n                    width: 5px;\n                    height: 11px;\n                    left: 7px;\n                    top: 4px;\n                    background-position: -52px -35px;\n                    position: absolute;\n                }\n            }\n        }\n\n        .full-width-control-label {\n            padding-top: 8px;\n\n            label {\n                display: block;\n                line-height: 35px;\n                font-weight: 600;\n            }\n\n            label, .full-width-property-description {\n                word-break: break-all;\n                color: var(--oc-primary-color);\n            }\n\n            .full-width-property-description {\n                margin-top: -9px;\n                margin-bottom: 10px;\n            }\n        }\n    }\n\n    > .component-backend-inspector-grouphost > .component-backend-inspector-controlhost,\n    .tabpanel > .component-backend-inspector-grouphost > .component-backend-inspector-controlhost:first-child {\n        border-top: none;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_controls.css",
    "content": "@import \"_control-dropdown.css\";\n@import \"_control-text.css\";\n@import \"_control-checkbox.css\";\n@import \"_control-table.css\";\n@import \"_control-autocomplete.css\";\n\n.component-backend-inspector-panel .component-backend-inspector-controlhost {\n    .inspector-control {\n        height: var(--inspector-control-height);\n        padding-top: 0;\n        padding-left: var(--inspector-base-control-side-padding);\n        padding-right: 0;\n        padding-bottom: 0;\n        line-height: var(--inspector-control-height);\n        border: none;\n        display: block;\n        -webkit-appearance: none;\n        width: 100%;\n        box-sizing: border-box;\n        outline: none;\n        background-color: transparent;\n        color: var(--bs-body-color);\n\n        &[readonly] {\n            color: var(--oc-form-control-disabled-color) !important;\n        }\n\n        &.clickable {\n            cursor: pointer;\n            user-select: none;\n\n            &[readonly] {\n                cursor: default;\n            }\n        }\n\n        &.act-as-text-input {\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n        }\n\n        &.placeholder {\n            color: var(--inspector-placeholder-color);\n            background-color: transparent;\n        }\n\n        &::placeholder {\n            color: var(--inspector-placeholder-color) !important;\n        }\n    }\n\n    .inspector-control-clearable {\n        padding-right: 5px;\n\n        button.clear-value {\n            border: none;\n            background: transparent;\n            position: absolute;\n            -webkit-appearance: none;\n            width: 16px;\n            height: 16px;\n            right: 8px;\n            top: 11px;\n            padding: 0;\n            outline: none;\n\n            &:hover, &:focus {\n                &:before {\n                    color: var(--bs-danger);\n                }\n            }\n\n            &:before {\n                font-family: 'octo-icon' !important;\n                speak: none;\n                font-style: normal;\n                font-weight: normal;\n                font-variant: normal;\n                text-transform: none;\n                line-height: 1;\n                -webkit-font-smoothing: antialiased;\n                -moz-osx-font-smoothing: grayscale;\n                content: \"\\e93e\";\n                font-size: 13px;\n                display: inline-block;\n                position: absolute;\n                color: #72809d;\n                left: 2px;\n                top: 1px;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_group.css",
    "content": ".component-backend-inspector-panel .component-backend-inspector-group {\n    .group-name {\n        position: relative;\n        background: transparent;\n        padding-top: 6px;\n        padding-bottom: 6px;\n        cursor: pointer;\n        font-weight: 600;\n        color: var(--oc-toolbar-color);\n        user-select: none;\n\n        span {\n            display: block;\n            padding-left: 14px;\n            margin-left: -14px;\n            position: relative;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n\n            &:before {\n                position: absolute;\n                width: 10px;\n                height: 6px;\n                left: 0;\n                top: 7px;\n                background-position: -182px 0;\n                transform: rotate(-90deg);\n                transition: transform 0.3s;\n            }\n        }\n\n        &.loading {\n            span {\n                margin-right: 50px;\n\n                &:before {\n                    display: none;\n                }\n            }\n\n            .component-backend-loading-indicator {\n                float: right;\n                margin-top: -20px;\n            }\n        }\n\n        &.expanded span:before {\n            transform: rotate(0);\n        }\n\n        &.collapsed {\n            border-bottom: 1px solid var(--oc-primary-border);\n        }\n\n        &.hide-bottom-border-collapsed.collapsed {\n            border-bottom: none;\n        }\n\n        &.has-errors {\n            color: var(--bs-danger);\n        }\n    }\n\n    .group-fade-in-enter-active {\n        transition: opacity 0.3s;\n    }\n\n    .group-fade-in-enter {\n        opacity: 0;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/_host.css",
    "content": ".inspector-modal-host {\n    .component-backend-inspector-panel {\n        padding-bottom: 30px;\n\n        .component-backend-inspector-controlhost {\n            .inspector-control-container:before {\n                top: -5px;\n                bottom: -5px;\n                height: auto;\n            }\n\n            &:not(:hover) {\n                .inspector-control-container:before {\n                    opacity: 0;\n                }\n            }\n\n            .inspector-control-clearable {\n                padding-right: 20px;\n            }\n\n            > tbody > tr {\n                th {\n                    background: transparent;\n                }\n\n                &:first-child {\n                    > td {\n                        .inspector-control-container:before {\n                            top: 0;\n                        }\n                    }\n                }\n            }\n\n            .component-backend-inspector-table {\n                margin-left: -20px;\n                margin-right: -20px;\n\n                .table-control-links {\n                    padding-left: 20px;\n                }\n            }\n\n            .component-backend-inspector-group {\n                .component-backend-inspector-table {\n                    margin-left: 0;\n                    margin-right: 0;\n\n                    table tbody td:first-child {\n                        padding-left: 10px;\n                    }\n\n                    .table-control-links {\n                        padding-left: 10px;\n                    }\n                }\n            }\n        }\n\n        .inspector-padding-control-left {\n            padding-left: 0;\n        }\n\n        .inspector-control-container {\n            padding-right: 0;\n        }\n\n        .inspector-padding-control-right {\n            padding-right: 0;\n        }\n\n        .component-backend-tabs.style-inspector > .tablist-container {\n            position: relative;\n            margin-left: -20px;\n            margin-right: -20px;\n\n            .tablist {\n                button:first-child {\n                    margin-left: 15px;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/css/inspector.css",
    "content": "@import \"_host.css\";\n@import \"_controlhost.css\";\n@import \"_controls.css\";\n@import \"_group.css\";\n\n.component-backend-inspector-panel {\n    --inspector-base-control-side-padding: 12px;\n    --inspector-placeholder-color: var(--bs-tertiary-color);\n    --inspector-control-height: 35px;\n\n    .inspector-padding-control-left {\n        padding-left: 20px;\n    }\n\n    .inspector-control-container {\n        padding-right: 20px;\n    }\n\n    .inspector-padding-control-right {\n        padding-right: 20px;\n    }\n\n    .component-backend-tabs.style-inspector > .tablist-container .tablist button {\n        padding-left: 5px;\n        padding-right: 5px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/control-base.js",
    "content": "import utils from './utils.js';\nimport ValidatorSet from './validatorset.js';\nimport dataLoader from './dataloader.js';\n\nexport const ControlBase = {\n    inject: {\n        inspectorControlRegistry: { default: null }\n    },\n    props: {\n        control: {\n            type: Object,\n            required: true\n        },\n        obj: {\n            type: Object,\n            required: true\n        },\n        parentObj: {\n            type: Object,\n            required: false\n        },\n        controlId: {\n            type: String,\n            required: true\n        },\n        inspectorPreferences: {\n            type: Object\n        }\n    },\n    data: function () {\n        return {\n            loadingDynamicOptions: false\n        }\n    },\n    computed: {\n        value: function computeValueProperty() {\n            return this.computeValue()\n        },\n\n        serverClassName: function computeServerClassName() {\n            if (this.control.serverClassName) {\n                return this.control.serverClassName;\n            }\n\n            return this.inspectorPreferences.inspectorClass;\n        }\n    },\n    methods: {\n        computeValue: function computeValue() {\n            var result = utils.getProperty(this.obj, this.control.property);\n\n            if (result !== undefined) {\n                return result;\n            }\n\n            if (this.control.default !== undefined) {\n                var defaultValue = this.control.default;\n                if (typeof defaultValue === 'object') {\n                    defaultValue = $.oc.vueUtils.getCleanObject(defaultValue);\n                }\n\n                utils.setProperty(this.obj, this.control.property, defaultValue);\n            }\n            else {\n                var controlDefaultValue = this.getDefaultValue();\n                utils.setProperty(this.obj, this.control.property, controlDefaultValue);\n            }\n\n            return utils.getProperty(this.obj, this.control.property);\n        },\n\n        validatePropertyValue: function validatePropertyValue() {\n            var validatorSet = new ValidatorSet(\n                this.control,\n                this.control.property\n            ),\n                result = validatorSet.validate(this.value);\n\n            if (result !== null) {\n                this.$emit('invalid');\n                this.onInvalid();\n            }\n            else {\n                this.$emit('valid');\n                this.onValid();\n            }\n\n            return result;\n        },\n\n        markValid: function markValid() {\n            this.$emit('valid');\n            this.onValid();\n        },\n\n        getDefaultValue: function getDefaultValue() {\n            return undefined;\n        },\n\n        onInvalid: function onInvalid() {\n        },\n\n        onValid: function onValid() {\n        },\n\n        setManagedValue: function setManagedValue(value) {\n            utils.setProperty(this.obj, this.control.property, value);\n        },\n\n        refreshDisplayedValue: function refreshDisplayedValue() { },\n\n        focusControl: function focusControl() { },\n\n        inspectorGetTab: function inspectorGetTab() {\n            return this.control.tab;\n        },\n\n        loadDynamicOptions: function loadDynamicOptions() {\n            var data = Object.assign({}, $.oc.vueUtils.getCleanObject(this.parentObj), $.oc.vueUtils.getCleanObject(this.obj));\n            if (typeof this.control.getDynamicOptionsExtraData === 'function') {\n                const extraData = this.control.getDynamicOptionsExtraData();\n                if (typeof extraData !== 'object') {\n                    throw new Error('getDynamicOptionsExtraData must return an object');\n                }\n\n                Object.assign(data, extraData);\n            }\n\n            this.loadingDynamicOptions = true;\n\n            data['inspectorProperty'] = this.control.property;\n            data['inspectorClassName'] = this.serverClassName;\n\n            var handlerAlias = this.inspectorPreferences.handlerAlias,\n                optionsHandler = handlerAlias\n                    ? handlerAlias + '::onInspectableGetOptions'\n                    : 'onInspectableGetOptions';\n\n            return dataLoader.requestOptions(\n                    this.$el,\n                    this.serverClassName,\n                    optionsHandler,\n                    data,\n                    this.control.dataCacheKeyName,\n                    this.control.dataCacheKeyPropertyNames\n                )\n                .then(data => this.dynamicOptionsLoaded(data))\n                .finally(() => this.loadingDynamicOptions = false);\n        },\n\n        dynamicOptionsLoaded: function dynamicOptionsLoaded(data) {}\n    },\n    mounted: function() {\n        if (this.inspectorControlRegistry) {\n            this.inspectorControlRegistry.register(this);\n        }\n    },\n    beforeUnmount: function() {\n        if (this.inspectorControlRegistry) {\n            this.inspectorControlRegistry.unregister(this);\n        }\n    }\n};\n\nexport default ControlBase;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/control-table-base.js",
    "content": "import ValidatorSet from './validatorset.js';\n\nexport const TableControlBase = {\n    props: {\n        row: Object,\n        column: Object,\n        cellIndex: Number,\n        inspectorPreferences: Object\n    },\n    methods: {\n        focusControl: function focusControl() {\n        },\n\n        validatePropertyValue: function validate() {\n            var validatorSet = new ValidatorSet(\n                    this.column,\n                    this.column.column\n                ),\n                result = validatorSet.validate(this.row[this.column.column]);\n\n            if (result !== null) {\n                this.$emit('invalid');\n            }\n            else {\n                this.$emit('valid');\n            }\n\n            return result;\n        },\n    }\n};\n\nexport default TableControlBase;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/dataloader.js",
    "content": "export class DataLoader {\n    constructor() {\n        this.cache = {};\n    }\n\n    requestOptions($el, serverClassName, handlerName, data, cacheKeyName, cacheKeyPropertyNames) {\n        const cacheKeyPropertyValues = {};\n\n        if (cacheKeyName && Array.isArray(cacheKeyPropertyNames)) {\n            cacheKeyPropertyNames.forEach(prop => cacheKeyPropertyValues[prop] = data[prop]);\n        }\n\n        const key = !cacheKeyName ? null : JSON.stringify({\n            serverClassName,\n            handlerName,\n            cacheKeyName,\n            cacheKeyPropertyValues\n        });\n\n        if (key !== null && key in this.cache) {\n            if (typeof this.cache[key].then === 'function') {\n                return this.cache[key];\n            }\n\n            return Promise.resolve(this.cache[key]);\n        }\n\n        const promise = new Promise((resolve, reject) => {\n            oc.request($el, handlerName, {\n                data: data,\n                progressBar: false\n            })\n            .done(data => {\n                key && (this.cache[key] = data);\n                resolve(data);\n            })\n            .fail(err => {\n                key && delete this.cache[key];\n                reject(err);\n            });\n        });\n\n        key && (this.cache[key] = promise);\n\n        return promise;\n    }\n}\n\nexport const dataLoader = new DataLoader();\n\nexport default dataLoader;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/dataschema.js",
    "content": "export const dataSchema = {\n    type: 'array',\n    items: {\n        \"$ref\": '#/definitions/property'\n    },\n    definitions: {\n        property: {\n            type: 'object',\n            properties: {\n                property: {\n                    type: 'string',\n                    minLength: 1\n                },\n                title: {\n                    type: 'string',\n                    minLength: 0\n                },\n                description: {\n                    type: 'string'\n                },\n                type: {\n                    type: 'string',\n                    minLength: 1\n                },\n                placeholder: {\n                    type: 'string'\n                },\n                tab: {\n                    type: 'string'\n                },\n                group: {\n                    type: 'string'\n                },\n                preset: {\"$ref\": '#/definitions/preset'}\n            },\n            required: ['property', 'type', 'title']\n        },\n        preset: {\n            type: 'object',\n            properties: {\n                type: {\n                    type: 'string',\n                    enum: ['url', 'file', 'exact', 'camel']\n                },\n                property: {\n                    type: 'string',\n                    minLength: 1\n                },\n                removeWords: {\n                    type: 'boolean'\n                }\n            },\n            required: ['property', 'type']\n        }\n    }\n};\n\nexport default dataSchema;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/host.js",
    "content": "export class InspectorHost {\n    showModal(title, obj, dataSchema, uniqueId, options, parentObj) {\n        if (typeof title !== 'string' || !title.length) {\n            throw new Error('Inspector title is a required string');\n        }\n\n        if (typeof obj !== 'object') {\n            throw new Error('Inspector Object must be an object');\n        }\n\n        if (parentObj !== undefined && typeof parentObj !== 'object') {\n            throw new Error('Inspector Parent Object must be an object');\n        }\n\n        if (!Array.isArray(dataSchema)) {\n            throw new Error('Inspector data schema must be an array');\n        }\n\n        if (typeof uniqueId !== 'string' || !uniqueId.length) {\n            throw new Error('Inspector unique key is a required string');\n        }\n\n        if (options) {\n            if (typeof options !== 'object') {\n                throw new Error('options must be an object');\n            }\n\n            if (options.buttonText && typeof options.buttonText !== 'string') {\n                throw new Error('options.buttonText must be a string');\n            }\n\n            if (options.size && typeof options.size !== 'string') {\n                throw new Error('options.size must be a string');\n            }\n\n            if (options.description && typeof options.description !== 'string') {\n                throw new Error('options.description must be a string');\n            }\n\n            if (options.resizableWidth && typeof options.resizableWidth !== 'boolean') {\n                throw new Error('options.resizableWidth must be boolean');\n            }\n\n            if (options.beforeApplyCallback && typeof options.beforeApplyCallback !== 'function') {\n                throw new Error('options.beforeApplyCallback must be a function');\n            }\n\n            if (options.liveMode && typeof options.liveMode !== 'boolean') {\n                throw new Error('options.liveMode must be boolean');\n            }\n        }\n\n        options = options || {};\n\n        return new Promise(function (resolve, reject) {\n            var applyClicked = false;\n\n            // Create container element for Vue app\n            var wrapperEl = document.createElement('div');\n            document.body.appendChild(wrapperEl);\n\n            // Create Vue 3 app with event handlers\n            var app = oc.createVueApp({\n                data() {\n                    return {\n                        title: title,\n                        description: options.description || '',\n                        dataSchema: dataSchema,\n                        inspectorData: {\n                            obj: obj,\n                            parentObj: parentObj\n                        },\n                        buttonText: options.buttonText,\n                        size: options.size || 'normal',\n                        uniqueId: uniqueId,\n                        handlerAlias: options.handlerAlias,\n                        resizableWidth: options.resizableWidth,\n                        liveMode: options.liveMode\n                    };\n                },\n                template: '<backend-inspector-host-modal :title=\"title\" :description=\"description\" :data-schema=\"dataSchema\" :data=\"inspectorData\" :button-text=\"buttonText\" :size=\"size\" :unique-id=\"uniqueId\" :handler-alias=\"handlerAlias\" :resizable-width=\"resizableWidth\" :live-mode=\"liveMode\" @beforeapply=\"onBeforeApply\" @applyclick=\"onApplyClick\" @close=\"onClose\" />',\n                methods: {\n                    onBeforeApply(callbackHolder) {\n                        if (options.beforeApplyCallback) {\n                            callbackHolder.callback = options.beforeApplyCallback;\n                        }\n                    },\n                    onApplyClick() {\n                        applyClicked = true;\n                        resolve();\n                    },\n                    onClose() {\n                        app.unmount();\n                        document.body.removeChild(wrapperEl);\n\n                        if (!applyClicked) {\n                            reject();\n                        }\n                    }\n                }\n            });\n\n            app.mount(wrapperEl);\n        });\n    }\n}\n\nexport const host = new InspectorHost();\n\nexport default host;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/index.js",
    "content": "import utils, { InspectorUtils } from './utils.js';\nimport dataLoader, { DataLoader } from './dataloader.js';\nimport dataSchema from './dataschema.js';\nimport ValidatorSet from './validatorset.js';\nimport validators from './validators/index.js';\nimport ControlBase from './control-base.js';\nimport TableControlBase from './control-table-base.js';\nimport host, { InspectorHost } from './host.js';\n\nexport {\n    utils,\n    InspectorUtils,\n    dataLoader,\n    DataLoader,\n    dataSchema,\n    ValidatorSet,\n    validators,\n    ControlBase,\n    TableControlBase,\n    host,\n    InspectorHost\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/utils.js",
    "content": "import dataSchema from './dataschema.js';\n\nexport class InspectorUtils {\n    #validator = null;\n\n    #getValidator() {\n        if (this.#validator) {\n            return this.#validator;\n        }\n\n        var ajv = new Ajv({\n            jsonPointers: true\n        });\n        this.#validator = ajv.compile(dataSchema);\n\n        return this.#validator;\n    }\n\n    #shouldSkipValidation(component) {\n        var parent = component.$parent;\n        while (parent) {\n            if (parent.shouldSkipInspectorValidation) {\n                if (parent.shouldSkipInspectorValidation() === true) {\n                    return true;\n                }\n            }\n\n            parent = parent.$parent;\n        }\n\n        return false;\n    }\n\n    validateDataSchema(obj) {\n        var validator = this.#getValidator(),\n            result = validator(obj);\n\n        if (result === true) {\n            return result;\n        }\n\n        var error = validator.errors[0];\n\n        return 'Inspector data schema error. ' + error.dataPath + ' ' + error.message;\n    }\n\n    groupControls(controls) {\n        var result = {\n            ungrouped: []\n        };\n\n        for (var index = 0; index < controls.length; index++) {\n            var control = controls[index];\n\n            if (!control.group) {\n                result.ungrouped.push(control);\n            }\n            else {\n                if (result[control.group] === undefined) {\n                    result[control.group] = [];\n                }\n\n                result[control.group].push(control);\n            }\n        }\n\n        return result;\n    }\n\n    clearPanelValidationErrors(registeredControls) {\n        for (var index = 0; index < registeredControls.length; index++) {\n            var control = registeredControls[index];\n\n            if (control.markValid) {\n                control.markValid();\n            }\n        }\n\n        return null;\n    }\n\n    validatePanelControls(registeredControls) {\n        for (var index = 0; index < registeredControls.length; index++) {\n            var control = registeredControls[index];\n\n            if (control.validatePropertyValue) {\n                if (!this.#shouldSkipValidation(control)) {\n                    var result = control.validatePropertyValue();\n                    if (result !== null) {\n                        return {\n                            message: result,\n                            component: control\n                        };\n                    }\n                }\n                else {\n                    control.markValid();\n                }\n            }\n        }\n\n        return null;\n    }\n\n    findErrorComponentTab(component) {\n        var parent = component;\n        while (parent) {\n            if (parent.inspectorGetTab) {\n                var result = parent.inspectorGetTab();\n                if (result) {\n                    return result;\n                }\n            }\n\n            parent = parent.$parent;\n        }\n    }\n\n    expandControlParents(component) {\n        return new Promise(function (resolve, reject) {\n            var parent = component.$parent;\n            while (parent) {\n                if (parent.expandInspectorControl) {\n                    parent.expandInspectorControl();\n                }\n\n                parent = parent.$parent;\n            }\n\n            resolve();\n        });\n    }\n\n    getProperty(obj, dotNotationPath) {\n        if (dotNotationPath === undefined) {\n            return undefined;\n        }\n\n        function reducer(obj, i) {\n            if (!obj) {\n                return undefined;\n            }\n\n            return obj[i];\n        }\n\n        return dotNotationPath.split('.').reduce(reducer, obj);\n    }\n\n    setProperty(obj, dotNotationPath, value) {\n        var parts = dotNotationPath.split('.');\n\n        function setPropertyAtPath(currentObj, pathParts) {\n            var property = pathParts.shift();\n\n            if (!pathParts.length) {\n                // Vue 3: Direct assignment is reactive\n                currentObj[property] = value;\n                return;\n            }\n\n            if (currentObj[property] === undefined) {\n                // Vue 3: Direct assignment is reactive\n                currentObj[property] = {};\n            }\n\n            setPropertyAtPath(currentObj[property], pathParts);\n        }\n\n        setPropertyAtPath(obj, parts);\n    }\n\n    deleteProperty(obj, dotNotationPath) {\n        var parts = dotNotationPath.split('.');\n\n        function deletePropertyAtPath(currentObj, pathParts) {\n            var property = pathParts.shift();\n\n            if (!pathParts.length && currentObj[property] !== undefined) {\n                // Vue 3: Use delete operator\n                delete currentObj[property];\n                return;\n            }\n\n            if (currentObj[property] === undefined) {\n                return;\n            }\n\n            deletePropertyAtPath(currentObj[property], pathParts);\n        }\n\n        deletePropertyAtPath(obj, parts);\n    }\n\n    isValueEmpty(value) {\n        return value === undefined\n            || value === null\n            || (typeof value == 'object' && $.isEmptyObject(value))\n            || (typeof value == 'string' && $.trim(value).length === 0)\n            || (Object.prototype.toString.call(value) === '[object Array]' && value.length === 0);\n    }\n\n    getLocalStorageKey(component, key) {\n        return 'inspector-' + component.inspectorUniqueId + '-' + key;\n    }\n\n    deepCloneObject(src, dst) {\n        function deepCloneProperty(value) {\n            if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n                return value;\n            }\n\n            var result = {};\n            for (var key in value) {\n                result[key] = deepCloneProperty(value[key]);\n            }\n\n            return result;\n        }\n\n        for (var key in src) {\n            var value = src[key];\n            // Vue 3: Direct assignment is reactive\n            dst[key] = deepCloneProperty(value);\n        }\n\n        for (var key in dst) {\n            if (src[key] === undefined) {\n                // Vue 3: Use delete operator\n                delete dst[key];\n            }\n        }\n    }\n}\n\nexport const utils = new InspectorUtils();\n\nexport default utils;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/validators/base.js",
    "content": "export class BaseValidator {\n    constructor(propertyName, options) {\n        this.options = options;\n        this.propertyName = propertyName;\n        this.defaultMessage = 'Invalid property value.';\n    }\n\n    getMessage(defaultMessage) {\n        if (this.options.message !== undefined) {\n            return this.options.message;\n        }\n\n        if (defaultMessage !== undefined) {\n            return defaultMessage;\n        }\n\n        return this.defaultMessage;\n    }\n\n    isScalar(value) {\n        if (value === undefined || value === null) {\n            return true;\n        }\n\n        return !!(typeof value === 'string' || typeof value == 'number' || typeof value == 'boolean');\n    }\n\n    throwError(errorMessage) {\n        throw new Error(errorMessage + ' Property: ' + this.propertyName);\n    }\n\n    validate(value) {\n        return null;\n    }\n}\n\nexport default BaseValidator;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/validators/index.js",
    "content": "import BaseValidator from './base.js';\nimport RequiredValidator from './required.js';\nimport RegexValidator from './regex.js';\nimport NumberBaseValidator from './number-base.js';\nimport IntegerValidator from './integer.js';\n\nexport const validators = {\n    base: BaseValidator,\n    required: RequiredValidator,\n    regex: RegexValidator,\n    numberbase: NumberBaseValidator,\n    integer: IntegerValidator\n};\n\nexport {\n    BaseValidator,\n    RequiredValidator,\n    RegexValidator,\n    NumberBaseValidator,\n    IntegerValidator\n};\n\nexport default validators;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/validators/integer.js",
    "content": "import NumberBaseValidator from './number-base.js';\n\nexport class IntegerValidator extends NumberBaseValidator {\n    validate(value) {\n        if (!this.isScalar(value) || typeof value == 'boolean') {\n            this.throwError('The Integer Inspector validator can only be used with string values.');\n        }\n\n        if (value === undefined || value === null) {\n            return null;\n        }\n\n        var string = String(value).trim();\n\n        if (string.length === 0) {\n            return null;\n        }\n\n        var testResult = this.options.allowNegative ?\n            /^\\-?[0-9]*$/.test(string) :\n            /^[0-9]*$/.test(string);\n\n        if (!testResult) {\n            var defaultMessage = this.options.allowNegative ?\n                'The value should be an integer.' :\n                'The value should be a positive integer.';\n\n            return this.getMessage(defaultMessage);\n        }\n\n        return this.doCommonChecks(parseInt(string));\n    }\n}\n\nexport default IntegerValidator;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/validators/number-base.js",
    "content": "import BaseValidator from './base.js';\n\nexport class NumberBaseValidator extends BaseValidator {\n    doCommonChecks(value) {\n        if (this.options.min !== undefined || this.options.max !== undefined) {\n            if (this.options.min !== undefined) {\n                if (this.options.min.value === undefined) {\n                    throw new Error('The min.value parameter is not defined in the Inspector validator configuration');\n                }\n\n                if (value < this.options.min.value) {\n                    return this.options.min.message !== undefined ?\n                        this.options.min.message :\n                        \"The value should not be less than \" + this.options.min.value;\n                }\n            }\n\n            if (this.options.max !== undefined) {\n                if (this.options.max.value === undefined) {\n                    throw new Error('The max.value parameter is not defined in the table Inspector validator configuration');\n                }\n\n                if (value > this.options.max.value) {\n                    return this.options.max.message !== undefined ?\n                        this.options.max.message :\n                        \"The value should not be greater than \" + this.options.max.value;\n                }\n            }\n        }\n    }\n}\n\nexport default NumberBaseValidator;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/validators/regex.js",
    "content": "import BaseValidator from './base.js';\n\nexport class RegexValidator extends BaseValidator {\n    validate(value) {\n        if (this.options.pattern === undefined) {\n            this.throwError('The pattern parameter is not defined in the Regex Inspector validator configuration.');\n        }\n\n        if (!this.isScalar(value)) {\n            this.throwError('The Regex Inspector validator can only be used with string values.');\n        }\n\n        if (value === undefined || value === null) {\n            return null;\n        }\n\n        var string = String(value).trim();\n        if (string.length === 0) {\n            return null;\n        }\n\n        var regexObj = new RegExp(this.options.pattern, this.options.modifiers);\n        return regexObj.test(string) ? null : this.getMessage();\n    }\n}\n\nexport default RegexValidator;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/validators/required.js",
    "content": "import BaseValidator from './base.js';\n\nexport class RequiredValidator extends BaseValidator {\n    validate(value) {\n        if (value === undefined || value === null) {\n            return this.getMessage();\n        }\n\n        if (typeof value === 'boolean') {\n            return value ? null : this.getMessage();\n        }\n\n        if (typeof value === 'object') {\n            return Object.keys(value).length > 0 ? null : this.getMessage();\n        }\n\n        return String(value).trim().length > 0 ? null : this.getMessage();\n    }\n}\n\nexport default RequiredValidator;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/classes/validatorset.js",
    "content": "import validators from './validators/index.js';\n\nexport class ValidatorSet {\n    #validators = [];\n    #propertyName;\n\n    constructor(options, propertyName) {\n        this.#propertyName = propertyName;\n        this.#makeValidators(options);\n    }\n\n    #throwError(errorMessage) {\n        throw new Error(errorMessage + ' Property: ' + this.#propertyName);\n    }\n\n    #makeValidators(options) {\n        // Handle legacy validation syntax properties:\n        //\n        // - required\n        // - validationPattern\n        // - validationMessage\n\n        if ((options.required !== undefined ||\n            options.validationPattern !== undefined ||\n            options.validationMessage !== undefined) &&\n            options.validation !== undefined) {\n            this.#throwError('Legacy and new validation syntax should not be mixed.');\n        }\n\n        if (options.required !== undefined && options.required) {\n            var validator = new validators.required(this.#propertyName, {\n                    message: options.validationMessage\n                });\n\n            this.#validators.push(validator);\n        }\n\n        if (options.validationPattern !== undefined) {\n            var validator = new validators.regex(this.#propertyName, {\n                    message: options.validationMessage,\n                    pattern: options.validationPattern\n                });\n\n            this.#validators.push(validator);\n        }\n\n        //\n        // Handle new validation syntax\n        //\n\n        if (options.validation === undefined) {\n            return;\n        }\n\n        for (var validatorName in options.validation) {\n            if (validators[validatorName] == undefined) {\n                this.#throwError('Inspector validator \"' + validatorName + '\" is not found.');\n            }\n\n            this.#validators.push(\n                new validators[validatorName] (\n                    this.#propertyName,\n                    options.validation[validatorName]\n                )\n            );\n        }\n    }\n\n    validate(value) {\n        try {\n            for (var i=0; i<this.#validators.length; i++) {\n                var validator = this.#validators[i],\n                    errorMessage = validator.validate(value);\n\n                if (typeof errorMessage === 'string') {\n                    return errorMessage;\n                }\n            }\n\n            return null;\n        }\n        catch (err) {\n            this.#throwError(err);\n        }\n    }\n}\n\nexport default ValidatorSet;\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-autocomplete.js",
    "content": "import { ControlBase } from './classes/index.js';\n\n/*\n * Vue Inspector autocomplete control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {},\n    data: function () {\n        return {\n            dynamicItems: {},\n            initialValue: this.computeValue()\n        };\n    },\n    computed: {\n        items: function computeItems() {\n            var items = this.control.items ? this.control.items : this.dynamicItems;\n\n            return items;\n        },\n\n        placeholder: function computePlaceholder() {\n            return this.control.placeholder;\n        }\n    },\n    methods: {\n        updateValue: function updateValue(value) {\n            this.setManagedValue(value);\n        },\n\n        onFocus: function onFocus() {\n            this.$emit('focus', { target: this.$refs.autocomplete.$el });\n        },\n\n        onBlur: function onBlur() {\n            this.$emit('blur', { target: this.$refs.autocomplete.$el });\n        },\n\n        focusControl: function focusControl() {\n            this.$refs.autocomplete.$refs.input.focus();\n        },\n\n        getResultValue: function (result) {\n            return result.key;\n        },\n\n        dynamicOptionsLoaded: function dynamicOptionsLoaded(data) {\n            if (data.options) {\n                var loadedItems = {};\n                for (var i = data.options.length - 1; i >= 0; i--) {\n                    loadedItems[data.options[i].value] = data.options[i].title\n                }\n\n                // Vue 3: Direct assignment is reactive\n                this.dynamicItems = this.prepareItems(loadedItems);\n            }\n        },\n\n        prepareItems: function prepareItems(items) {\n            var result = {}\n\n            if (Array.isArray(items)) {\n                for (var i = 0, len = items.length; i < len; i++) {\n                    result[items[i]] = items[i];\n                }\n            }\n            else {\n                result = items;\n            }\n\n            return result;\n        },\n\n        onInput: function onInput() {\n            this.updateValue(this.$refs.autocomplete.value);\n        },\n\n        onChange: function onChange() {\n            this.updateValue(this.$refs.autocomplete.value);\n        },\n\n        onUpdate: function onUpdate() {\n            this.updateValue(this.$refs.autocomplete.value);\n        },\n\n        onSearch: function onSearch(input) {\n            var result = [],\n                input = input.toLowerCase();\n\n            var keys = Object.keys(this.items);\n            for (var i = 0; i < keys.length; i++) {\n                var key = keys[i].toLowerCase(),\n                    item = this.items[key].toLowerCase();\n\n                if ($.oc.vueUtils.stringFuzzySearch(input, key)\n                    || $.oc.vueUtils.stringFuzzySearch(input, item)) {\n                    result.push({\n                        value: this.items[key],\n                        key: key\n                    });\n                }\n            }\n\n            return result;\n        }\n    },\n    mounted: function () {\n        if (!this.control.items) {\n            this.loadDynamicOptions();\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-checkbox.js",
    "content": "import { ControlBase } from './classes/index.js';\n\n/*\n * Vue Inspector checkbox control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {\n    },\n    data: function () {\n        return {};\n    },\n    computed: {\n        isChecked: function () {\n            var value = this.value;\n\n            if (value == '0' || value == 'false') {\n                return false;\n            }\n\n            return value;\n        }\n    },\n    methods: {\n        updateValue: function updateValue() {\n            var value = this.$refs.input.checked ? 1 : 0;\n\n            this.setManagedValue(value);\n        },\n\n        onLabelKeydown: function onLabelKeydown(ev) {\n            if (ev.keyCode == 32) {\n                this.$refs.input.checked = !this.$refs.input.checked;\n                ev.stopPropagation();\n                ev.preventDefault();\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-dictionary.js",
    "content": "import { ControlBase } from './classes/index.js';\n\n/*\n * Vue Inspector dictionary control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: Object,\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        inspectorUniqueId: {\n            type: String,\n            required: true\n        },\n        depth: {\n            type: Number,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        }\n    },\n    data: function () {\n        var value = this.computeValue(),\n            initialValue = {\n                tableData: []\n            };\n\n        if (typeof value === 'object') {\n            for (var prop in value) {\n                if (!value.hasOwnProperty(prop)) {\n                    continue;\n                }\n\n                initialValue.tableData.push({\n                    key: prop,\n                    value: value[prop]\n                });\n            }\n        }\n\n        return {\n            editedObject: initialValue,\n            lang: {},\n            nestedControlProperties: []\n        };\n    },\n    computed: {\n        groupValue: function computeGroupValue() {\n            var value = this.computeValue();\n\n            if (typeof value !== 'object') {\n                return '';\n            }\n\n            var itemNumber = Object.keys(value).length;\n            if (itemNumber === 0) {\n                return '';\n            }\n\n            return '[' + itemNumber + ']';\n        }\n    },\n    methods: {\n        updateValue: function updateValue(value) {\n            if (!value.tableData) {\n                return;\n            }\n\n            var storedValue = {};\n\n            if (Array.isArray(value.tableData)) {\n                value.tableData.forEach(function (tableItem) {\n                    if (typeof tableItem.key === 'string') {\n                        var key = tableItem.key.trim(),\n                            value = tableItem.value;\n\n                        if (typeof value !== 'string') {\n                            value = '';\n                        }\n\n                        if (key.length === 0) {\n                            return;\n                        }\n\n                        storedValue[key] = value.trim();\n                    }\n                })\n            }\n\n            this.setManagedValue(storedValue);\n        },\n\n        initNestedControls: function initNestedControls() {\n            this.nestedControlProperties = [\n                {\n                    type: 'table',\n                    property: 'tableData',\n                    columns: [\n                        {\n                            'column': 'key',\n                            'type': 'string',\n                            'title': 'Key',\n                            \"validation\": {\n                                \"required\": {\n                                    \"message\": this.lang.keyRequired\n                                }\n                            }\n                        },\n                        {\n                            'column': 'value',\n                            'type': 'string',\n                            'title': 'Value',\n                            \"validation\": {\n                                \"required\": {\n                                    \"message\": this.lang.valueRequired\n                                }\n                            }\n                        }\n                    ]\n                }\n            ];\n        },\n\n        getDefaultValue: function getDefaultValue() {\n            return {};\n        },\n\n        focusControl: function focusControl() {\n            // TODO\n        }\n    },\n    created: function created() {\n\n    },\n    mounted: function mounted() {\n        this.$emit('hidefullwidthlabel');\n        // this.$emit('hidebottomborder');\n\n        this.lang.keyRequired = this.$el.getAttribute('data-lang-key-required');\n        this.lang.valueRequired = this.$el.getAttribute('data-lang-value-required');\n        this.initNestedControls();\n    },\n    watch: {\n        editedObject: {\n            deep: true,\n            handler: function (newValue, oldValue) {\n                this.updateValue(newValue);\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-dropdown.js",
    "content": "import { ControlBase } from './classes/index.js';\n\n/*\n * Vue Inspector dropdown control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {},\n    data: function () {\n        return {\n            dynamicOptions: {},\n            selectedValue: null,\n            prevSelectedValue: null,\n            editorFocused: false,\n            unwatches: []\n        };\n    },\n    computed: {\n        options: function computeOptions() {\n            var options = this.control.options ? this.control.options : this.dynamicOptions,\n                optionKeys = Object.keys(options),\n                result = [];\n\n            optionKeys.forEach(function (key) {\n                result.push({\n                    label: options[key],\n                    code: key\n                });\n            });\n\n            return result;\n        },\n\n        useValuesAsIcons: function computeUseValuesAsIcons() {\n            return !!this.control.useValuesAsIcons;\n        },\n\n        useValuesAsColors: function computeUseValuesAsColors() {\n            return !!this.control.useValuesAsColors;\n        },\n\n        containerTabIndex: function computeContainerTabIndex() {\n            return this.editorFocused ? -1 : 0;\n        }\n    },\n    methods: {\n        focusControl: function focusControl() {\n            if (this.$refs.input) {\n                this.$refs.input.activate();\n                this.editorFocused = true;\n            }\n        },\n\n        updateValue: function updateValue(option) {\n            if (option === null) {\n                // Vue Multiselect deselects the selected value\n                // if the user clicks it. It's not a desired\n                // behavior for the Inspector dropdown control.\n                this.selectedValue = this.prevSelectedValue;\n                return;\n            }\n\n            var value = option ? option.code : null;\n            this.setManagedValue(value);\n        },\n\n        findOptionByValue: function findOptionByValue(value) {\n            if (!this.options) {\n                return null;\n            }\n\n            for (var index = 0; index < this.options.length; index++) {\n                if (this.options[index].code == value) {\n                    return this.options[index];\n                }\n            }\n        },\n\n        refreshDisplayedValue: function refreshDisplayedValue() {\n            this.setInitialValue();\n        },\n\n        setInitialValue: function () {\n            var value = this.value;\n            // TODO - make this conversion configurable.\n            // It works for CMS page layouts where we get null\n            // as an input value but want to return an empty string\n            // if the empty value is selected.\n            if (value === null) {\n                value = '';\n            }\n\n            if (value !== undefined) {\n                this.selectedValue = this.findOptionByValue(value);\n            }\n        },\n\n        dynamicOptionsLoaded: function dynamicOptionsLoaded(data) {\n            this.dynamicOptions = {};\n\n            if (data.options) {\n                for (var i = 0, len = data.options.length; i < len; i++) {\n                    // Vue 3: Direct assignment is reactive\n                    this.dynamicOptions[data.options[i].value] = data.options[i].title;\n                }\n            }\n\n            this.setInitialValue();\n        },\n\n        onDropdownMounted: function onDropdownMounted() {\n            $(this.$el).find('.multiselect__select').addClass('backend-icon-background-pseudo');\n        },\n\n        onFocus: function onFocus() {\n            this.$emit('focus', { target: this.$refs.input.$el });\n            this.editorFocused = true;\n        },\n\n        onBlur: function onBlur() {\n            this.$emit('blur', { target: this.$refs.input.$el });\n            this.editorFocused = false;\n        },\n\n        onInspectorLabelClick: function onInspectorLabelClick() {\n            if (this.$refs.input) {\n                this.$refs.input.activate();\n            }\n        },\n\n        onContainerFocus: function onContainerFocus() {\n            if (this.$refs.input) {\n                this.$refs.input.activate();\n            }\n        }\n    },\n    mounted: function () {\n        if (!this.control.options) {\n            this.loadDynamicOptions();\n        }\n        else {\n            this.setInitialValue();\n        }\n\n        if (Array.isArray(this.control.depends)) {\n            this.control.depends.forEach(dependsOn => {\n                this.unwatches.push(\n                    this.$watch('obj.' + dependsOn, (newVal) => {\n                        const originalValue = this.value;\n                        this.loadDynamicOptions().then(() => {\n                            if (!this.findOptionByValue(originalValue)) {\n                                this.setManagedValue(null);\n                            }\n                        })\n                    }, {\n                        deep: true\n                    })\n                );\n            })\n        }\n    },\n    beforeUnmount: function () {\n        this.unwatches.forEach(unwatch => {\n            unwatch();\n        })\n    },\n    watch: {\n        selectedValue: function (newValue, oldValue) {\n            this.prevSelectedValue = newValue;\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-mediafinder.js",
    "content": "import { ControlBase, utils } from './classes/index.js';\n\n/*\n * Vue Inspector media finder control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        }\n    },\n    data: function () {\n        return {\n            lang: {}\n        };\n    },\n    computed: {\n        cssClass: function computeCssClass() {\n            return {\n                'placeholder': utils.isValueEmpty(this.value)\n            };\n        },\n\n        displayedText: function computeDisplayedText() {\n            if (utils.isValueEmpty(this.value)) {\n                return this.control.placeholder ? this.control.placeholder : this.lang.placeholder;\n            }\n\n            return this.value;\n        }\n    },\n    methods: {\n        updateValue: function updateValue(value) {\n            this.setManagedValue(value);\n        },\n\n        focusControl: function focusControl() {\n            this.$refs.input.focus();\n        },\n\n        onInspectorLabelClick: function onInspectorLabelClick() {\n            this.onClick();\n        },\n\n        onFocus: function onFocus() {\n            this.$emit('focus', { target: this.$refs.input });\n        },\n\n        onBlur: function onBlur() {\n            this.$emit('blur', { target: this.$refs.input });\n        },\n\n        onClearClick: function onClearClick() {\n            if (this.inspectorPreferences.readOnly) {\n                return;\n            }\n\n            this.updateValue(null);\n        },\n\n        onKeyDown: function onKeyDown(ev) {\n            if (ev.keyCode == 27 || ev.keyCode == 13) {\n                this.onClick();\n            }\n\n            if (ev.keyCode == 8) {\n                this.onClearClick();\n            }\n        },\n\n        onClick: function onClick() {\n            if (this.inspectorPreferences.readOnly) {\n                return;\n            }\n\n            var that = this,\n                mediaType = that.control.mediaType;\n\n            if (this.layoutUpdateData) {\n                // Vue 3: Direct assignment is reactive\n                this.layoutUpdateData.modalTemporaryHidden = true;\n            }\n\n            new oc.mediaManager.popup({\n                alias: 'ocmediamanager',\n                cropAndInsertButton: true,\n                onClose: function () {\n                    if (that.layoutUpdateData) {\n                        // Vue 3: Direct assignment is reactive\n                        that.layoutUpdateData.modalTemporaryHidden = false;\n                    }\n                },\n                onInsert: function (items) {\n                    if (!items.length) {\n                        oc.alert($.oc.lang.get('mediamanager.invalid_file_empty_insert'))\n                        return\n                    }\n\n                    if (items.length > 1) {\n                        oc.alert($.oc.lang.get('mediamanager.invalid_file_single_insert'))\n                        return\n                    }\n\n                    if (mediaType === 'image' && items[0].documentType !== 'image') {\n                        oc.alert(\n                            $.oc.lang.get(\n                                'mediamanager.invalid_image_invalid_insert',\n                                that.lang.errorNotImage\n                            )\n                        );\n                        return;\n                    }\n\n                    that.updateValue(items[0].path);\n                    this.hide();\n                    that.$refs.input.focus();\n                }\n            });\n        }\n    },\n    watch: {\n    },\n    mounted: function mounted() {\n        // Vue 3: Direct assignment is reactive\n        this.lang.errorNotImage = this.$el.getAttribute('data-lang-error-not-image');\n        this.lang.placeholder = this.$el.getAttribute('data-lang-placeholder');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-object.js",
    "content": "import { ControlBase, utils } from './classes/index.js';\n\n/*\n * Vue Inspector object control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: Object,\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        inspectorUniqueId: {\n            type: String,\n            required: true\n        },\n        depth: {\n            type: Number,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        }\n    },\n    data: function () {\n        return {\n            // We manipulate this object directly. It's\n            // a model of the Inspector's target object\n            // which copy is created when the component\n            // instantiates.\n            //\n            // The Inspector's target object is updated\n            // when editedObject is changed. This way we\n            // intentionally break a two-way binding\n            // between object properties and inputs. This\n            // is needed because when ignoreIfPropertyEmpty\n            // is in use and object evaluates to an empty\n            // value we don't want to clear inputs.\n            //\n            editedObject: this.computeValue()\n        };\n    },\n    computed: {\n    },\n    methods: {\n        updateValue: function updateValue(value) {\n            if (this.control.ignoreIfPropertyEmpty !== undefined) {\n                var targetProperty = this.control.ignoreIfPropertyEmpty;\n                if (utils.isValueEmpty(value[targetProperty])) {\n                    value = undefined;\n                }\n            }\n\n            this.setManagedValue(value);\n        },\n\n        getDefaultValue: function getDefaultValue() {\n            return {};\n        },\n\n        shouldSkipInspectorValidation: function shouldSkipInspectorValidation() {\n            if (this.control.ignoreIfPropertyEmpty === undefined) {\n                return false;\n            }\n\n            var targetProperty = this.control.ignoreIfPropertyEmpty;\n            return utils.isValueEmpty(this.editedObject[targetProperty]);\n        },\n\n        focusControl: function focusControl() {\n            // TODO\n        },\n\n        onInvalid: function onInvalid() {\n            this.$refs.group.setHasValidationErrors(true);\n        },\n\n        onValid: function onValid() {\n            this.$refs.group.setHasValidationErrors(false);\n        }\n    },\n    created: function created() {\n\n    },\n    mounted: function mounted() {\n        this.$emit('hidefullwidthlabel');\n        this.$emit('hidebottomborder');\n    },\n    watch: {\n        editedObject: {\n            deep: true,\n            handler: function (newValue, oldValue) {\n                this.updateValue(newValue);\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-objectlist-records.js",
    "content": "import { ControlBase, utils } from './classes/index.js';\n\n/*\n * Vue Inspector object list records control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {\n        obj: {\n            type: [Object, Array],\n            required: true\n        },\n        parentObj: {\n            type: Object,\n            required: false\n        },\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: Object\n    },\n    data: function () {\n        return {\n            lang: {\n                addItem: \"\"\n            }\n        };\n    },\n    computed: {\n        hasValues: function computeHasValues() {\n            return !utils.isValueEmpty(this.obj);\n        },\n\n        displayAddItem: function computeDisplayAddItem() {\n            if (!this.control.parentControl.maxItems) {\n                return true;\n            }\n\n            const itemCount = Array.isArray(this.obj) ? this.obj.length : Object.keys(this.obj).length;\n            return itemCount < this.control.parentControl.maxItems;\n        }\n    },\n    methods: {\n        onRemoveItemClick: function onRemoveItemClick(index) {\n            if (Array.isArray(this.obj)) {\n                this.obj.splice(index, 1);\n            }\n            else {\n                // Vue 3: Use delete operator\n                delete this.obj[index];\n            }\n        },\n\n        onAddItemClick: function onAddItemClick() {\n            if (this.inspectorPreferences.readOnly || !this.displayAddItem) {\n                return;\n            }\n\n            this.$emit('inspectorcommand', {\n                command: 'addItem'\n            });\n        },\n\n        onItemClick: function onItemClick(key) {\n            if (this.inspectorPreferences.readOnly) {\n                return;\n            }\n\n            this.$emit('inspectorcommand', {\n                command: 'editItem',\n                key: key\n            });\n        }\n    },\n    mounted: function mounted() {\n        this.$emit('hidefullwidthlabel');\n        this.$emit('hidebottomborder');\n        this.lang.addItem = this.$el.getAttribute('data-lang-add-item');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-objectlist-recordtitle.js",
    "content": "export default {\n    props: {\n        record: {\n            type: [Object],\n            required: true\n        },\n        obj: {\n            type: [Object, Array],\n            required: true\n        },\n        parentObj: {\n            type: Object,\n            required: false\n        },\n        control: {\n            type: Object,\n            required: true\n        },\n    },\n    data: function () {\n        return {\n            fetchedTitle: \"\",\n            loadingDynamicTitle: false\n        };\n    },\n    computed: {\n        recordTitle: function computeRecordTitle() {\n            if (this.control.formatItemTitle) {\n                this.fetchTitle();\n                return this.fetchedTitle;\n            }\n\n            return this.record[this.control.titleProperty];\n        },\n\n        recordColor: function computeRecordColor() {\n            if (!this.control.colorProperty) {\n                return null;\n            }\n\n            return this.record[this.control.colorProperty];\n        },\n    },\n    methods: {\n        fetchTitle: async function () {\n            const titleData = this.control.formatItemTitle(this.record, this.obj, this.parentObj);\n            const isPromise = !!titleData\n                && (typeof titleData === 'object' || typeof titleData === 'function')\n                && typeof titleData.then === 'function';\n\n            if (isPromise) {\n                this.loadingDynamicTitle = true;\n                try {\n                    this.fetchedTitle = await titleData;\n                } finally {\n                    this.loadingDynamicTitle = false;\n                }\n            }\n            else {\n                this.fetchedTitle = titleData;\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-objectlist.js",
    "content": "import { ControlBase, utils, host } from './classes/index.js';\nimport { modalUtils } from '../../../modal/assets/js/classes/index.js';\n\n/*\n * Vue Inspector object list control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: Object,\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        inspectorUniqueId: {\n            type: String,\n            required: true\n        },\n        depth: {\n            type: Number,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        }\n    },\n    data: function () {\n        return {\n            editedObject: this.computeValue(),\n            nestedControlProperties: [\n                {\n                    type: 'objectListRecords',\n                    titleProperty: this.control.titleProperty,\n                    colorProperty: this.control.colorProperty,\n                    formatItemTitle: this.control.formatItemTitle,\n                    parentControl: this.control\n                }\n            ],\n            lang: {},\n            unwatches: []\n        };\n    },\n    computed: {\n        keyProperty: function computeKeyProperty() {\n            if (!this.control.keyProperty) {\n                return null;\n            }\n\n            var property = this.findProperty(this.control.keyProperty);\n            if (property) {\n                return property;\n            }\n\n            throw new Error('Key property ' + this.control.keyProperty + ' is not found in the object list itemProperties array. Property: ' + this.control.property);\n        },\n\n        titleProperty: function computeTitleProperty() {\n            var property = this.findProperty(this.control.titleProperty);\n            if (property) {\n                return property;\n            }\n\n            throw new Error('Title property ' + this.control.titleProperty + ' is not found in the object list itemProperties array. Property: ' + this.control.property);\n        },\n\n        editPopupTitleStr: function computeEditPopupTitleStr() {\n            return this.control.editPopupTitle ? this.control.editPopupTitle : this.control.title;\n        }\n    },\n    methods: {\n        findProperty: function findProperty(propertyName) {\n            for (var index = 0; index < this.control.itemProperties.length; index++) {\n                if (this.control.itemProperties[index].property == propertyName) {\n                    return this.control.itemProperties[index];\n                }\n            }\n        },\n\n        shouldSkipInspectorValidation: function shouldSkipInspectorValidation() {\n            return true;\n        },\n\n        updateValue: function updateValue(value) {\n            this.setManagedValue(value);\n        },\n\n        getDefaultValue: function getDefaultValue() {\n            if (this.control.keyProperty !== undefined) {\n                return {};\n            }\n\n            return [];\n        },\n\n        focusControl: function focusControl() {\n            // TODO\n        },\n\n        validateMandatoryProperty(data, propertyName) {\n            var propertyObj = this[propertyName],\n                propertyValue = data[propertyObj.property];\n\n            if (utils.isValueEmpty(propertyValue)) {\n                modalUtils.showAlert(\n                    this.lang.error,\n                    this.lang.propCantBeEmpty.replace(':property', propertyObj.title)\n                );\n\n                return false;\n            }\n\n            return true;\n        },\n\n        addItem: function addItem(inspectorData) {\n            var keyProperty = this.keyProperty,\n                that = this;\n\n            return new Promise(function (resolve, reject) {\n                if (!that.validateMandatoryProperty(inspectorData, 'titleProperty')) {\n                    reject();\n                    return;\n                }\n\n                if (!keyProperty) {\n                    that.editedObject.push(inspectorData);\n\n                    resolve();\n                    return;\n                }\n\n                if (!that.validateMandatoryProperty(inspectorData, 'keyProperty')) {\n                    reject();\n                    return;\n                }\n\n                var keyPropertyValue = $.trim(inspectorData[keyProperty.property]);\n\n                if (that.editedObject[keyPropertyValue]) {\n                    modalUtils.showAlert(\n                        that.lang.error,\n                        that.lang.keyValueExists.replace(':property_value', keyPropertyValue)\n                    );\n\n                    reject();\n                    return;\n                }\n\n                // Vue 3: Direct assignment is reactive\n                that.editedObject[keyPropertyValue] = inspectorData;\n                resolve();\n            });\n        },\n\n        updateItem: function updateItem(inspectorData, key) {\n            var keyProperty = this.keyProperty,\n                that = this;\n\n            return new Promise(function (resolve, reject) {\n                if (!that.validateMandatoryProperty(inspectorData, 'titleProperty')) {\n                    reject();\n                    return;\n                }\n\n                if (!keyProperty) {\n                    resolve();\n                    return;\n                }\n\n                if (!that.validateMandatoryProperty(inspectorData, 'keyProperty')) {\n                    reject();\n                    return;\n                }\n\n                var keyPropertyValue = inspectorData[keyProperty.property].trim();\n\n                if (keyPropertyValue != key && that.editedObject[keyPropertyValue]) {\n                    modalUtils.showAlert(\n                        that.lang.error,\n                        that.lang.keyValueExists.replace(':property_value', keyPropertyValue)\n                    );\n\n                    reject();\n                    return;\n                }\n\n                if (keyPropertyValue != key) {\n                    // Vue 3: Use delete operator and direct assignment\n                    delete that.editedObject[key];\n                    that.editedObject[keyPropertyValue] = inspectorData;\n                }\n\n                resolve();\n            });\n        },\n\n        handleAddItem: function handleAddItem() {\n            var obj = {},\n                that = this;\n\n            host\n                .showModal(\n                    this.editPopupTitleStr,\n                    obj,\n                    this.control.itemProperties,\n                    'inspector-object-list-record',\n                    {\n                        handlerAlias: this.inspectorPreferences.handlerAlias,\n                        resizableWidth: true,\n                        beforeApplyCallback: function (inspectorData) {\n                            return that.addItem(inspectorData);\n                        }\n                    },\n                    this.obj\n                )\n                .then($.noop, $.noop);\n        },\n\n        handleEditItem: function handleEditItem(key) {\n            var obj = this.editedObject[key],\n                that = this;\n\n            host\n                .showModal(\n                    this.editPopupTitleStr,\n                    obj,\n                    this.control.itemProperties,\n                    'inspector-object-list-record',\n                    {\n                        handlerAlias: this.inspectorPreferences.handlerAlias,\n                        resizableWidth: true,\n                        beforeApplyCallback: function (inspectorData) {\n                            return that.updateItem(inspectorData, key);\n                        }\n                    },\n                    this.obj\n                )\n                .then($.noop, $.noop);\n        },\n\n        onInspectorCommand: function onInspectorCommand(ev) {\n            if (ev.command === 'addItem') {\n                return this.handleAddItem();\n            }\n\n            if (ev.command == 'editItem') {\n                return this.handleEditItem(ev.key);\n            }\n        },\n\n        onInvalid: function onInvalid() {\n            this.$refs.group.setHasValidationErrors(true);\n        },\n\n        onValid: function onValid() {\n            this.$refs.group.setHasValidationErrors(false);\n        }\n    },\n    created: function created() {\n\n    },\n    mounted: function mounted() {\n        if (!this.control.titleProperty) {\n            var error = 'Inspector object list titleProperty cannot be empty. Property: ' + this.control.property;\n            throw new Error(error);\n        }\n\n        if (this.control.keyProperty) {\n            var keyProperty = this.keyProperty;\n            if (keyProperty.type && keyProperty.type != 'string' && keyProperty.type != 'text') {\n                var error = 'Inspector object list keyProperty can only refer to a string or text property. Property: '\n                    + this.control.property +\n                    ', keyProperty: ' + this.control.keyProperty +\n                    ', unsupported type: ' + keyProperty.type;\n                throw new Error(error);\n            }\n        }\n\n        if (Array.isArray(this.control.depends)) {\n            this.control.depends.forEach(dependsOn => {\n                this.unwatches.push(\n                    this.$watch('obj.' + dependsOn, (newVal) => {\n                        this.editedObject = [];\n                        this.setManagedValue([]);\n                    })\n                );\n            })\n        }\n\n        this.$emit('hidefullwidthlabel');\n        this.$emit('hidebottomborder');\n\n        this.lang.error = this.$el.getAttribute('data-lang-error');\n        this.lang.propCantBeEmpty = this.$el.getAttribute('data-lang-prop-cant-be-empty');\n        this.lang.keyValueExists = this.$el.getAttribute('data-lang-key-value-exists');\n    },\n    watch: {\n        editedObject: {\n            deep: true,\n            handler: function (newValue, oldValue) {\n                this.updateValue(newValue);\n            }\n        }\n    },\n    beforeUnmount: function () {\n        this.unwatches.forEach(unwatch => {\n            unwatch();\n        })\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-set.js",
    "content": "import { ControlBase } from './classes/index.js';\n\n/*\n * Vue Inspector set control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: Object,\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        inspectorUniqueId: {\n            type: String,\n            required: true\n        },\n        depth: {\n            type: Number,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        }\n    },\n    data: function () {\n        var value = this.computeValue(),\n            initialValue = {};\n\n        if (Array.isArray(value)) {\n            value.forEach(function (element) {\n                initialValue[element] = 1;\n            });\n        }\n        else if (typeof value === 'object') {\n            initialValue = value;\n        }\n\n        return {\n            editedObject: initialValue,\n            loadedItems: {},\n            unwatches: []\n        };\n    },\n    computed: {\n        nestedControlProperties: function computeNestedControlProperties() {\n            var items = this.items,\n                result = [];\n\n            for (var prop in items) {\n                if (!items.hasOwnProperty(prop)) {\n                    continue;\n                }\n\n                result.push({\n                    'property': prop,\n                    'title': items[prop],\n                    'type': 'checkbox',\n                    'default': false\n                });\n            }\n\n            return result;\n        },\n\n        items: function computeItems() {\n            var items = this.control.items ? this.control.items : this.loadedItems;\n\n            return items;\n        },\n\n        groupValue: function computeGroupValue() {\n            var value = this.computeValue();\n            if (Array.isArray(value) && value.length > 0) {\n                var items = this.items,\n                    titles = [];\n\n                for (var i = 0; i < value.length; i++) {\n                    var currentValue = value[i];\n                    if (items[currentValue] != undefined) {\n                        titles.push(items[currentValue]);\n                    }\n                }\n\n                if (titles.length > 0) {\n                    return '[' + titles.join(', ') + ']';\n                }\n\n                return '';\n            }\n\n            return '';\n        }\n    },\n    methods: {\n        updateValue: function updateValue(value) {\n            var storedValue = [];\n\n            if (typeof value === 'object') {\n                for (var prop in value) {\n                    if (!value.hasOwnProperty(prop)) {\n                        continue;\n                    }\n\n                    if (value[prop]) {\n                        storedValue.push(prop);\n                    }\n                }\n            }\n\n            this.setManagedValue(storedValue);\n        },\n\n        dynamicOptionsLoaded: function dynamicOptionsLoaded(data) {\n            if (data.options) {\n                this.loadedItems = {};\n                for (var i = 0, len = data.options.length; i < len; i++) {\n                    // Vue 3: Direct assignment is reactive\n                    this.loadedItems[data.options[i].value] = data.options[i].title;\n                }\n            }\n        },\n\n        getDefaultValue: function getDefaultValue() {\n            return {};\n        },\n\n        findOptionByValue: function findOptionByValue(value) {\n            if (!this.options) {\n                return null;\n            }\n\n            for (var index = 0; index < this.options.length; index++) {\n                if (this.options[index].code == value) {\n                    return this.options[index];\n                }\n            }\n        },\n    },\n    created: function created() {\n\n    },\n    mounted: function mounted() {\n        this.$emit('hidefullwidthlabel');\n        this.$emit('hidebottomborder');\n\n        if (!this.control.items) {\n            this.loadDynamicOptions();\n        }\n\n        if (Array.isArray(this.control.depends)) {\n            this.control.depends.forEach(dependsOn => {\n                this.unwatches.push(\n                    this.$watch('obj.' + dependsOn, (newVal) => {\n                        const originalValue = this.value;\n                        this.loadDynamicOptions().then(() => {\n                            if (!this.findOptionByValue(originalValue)) {\n                                this.setManagedValue([]);\n                            }\n                        })\n                    }, {\n                        deep: true\n                    })\n                );\n            })\n        }\n    },\n    watch: {\n        editedObject: {\n            deep: true,\n            handler: function (newValue, oldValue) {\n                this.updateValue(newValue);\n            }\n        }\n    },\n    beforeUnmount: function () {\n        this.unwatches.forEach(unwatch => {\n            unwatch();\n        })\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-table-cell.js",
    "content": "/*\n * Vue Inspector table control implementation\n */\nexport default {\n    props: {\n        row: Object,\n        column: Object,\n        cellIndex: Number,\n        inspectorPreferences: Object,\n        tableConfiguration: Object,\n        isLastCell: Boolean\n    },\n    data: function () {\n        return {\n        };\n    },\n    computed: {\n    },\n    methods: {\n        focusControl: function focusControl() {\n            this.$refs.editor.focusControl();\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-table-dropdown.js",
    "content": "import { TableControlBase } from './classes/index.js';\n\n/*\n * Vue Inspector table dropdown control implementation\n */\nexport default {\n    extends: TableControlBase,\n    props: {\n    },\n    data: function () {\n        return {\n            dynamicOptions: {},\n            selectedValue: null,\n            editorFocused: false\n        };\n    },\n    computed: {\n        options: function computeOptions() {\n            var options = this.column.options ? this.column.options : this.dynamicOptions,\n                optionKeys = Object.keys(options),\n                result = [];\n\n            optionKeys.forEach(function (key) {\n                result.push({\n                    label: options[key],\n                    code: key\n                });\n            });\n\n            return result;\n        },\n\n        hasValue: function computeHasValue() {\n            var value = this.row[this.column.column];\n            return typeof value === 'string' && value.length > 0;\n        },\n\n        containerTabIndex: function computeContainerTabIndex() {\n            return this.editorFocused ? -1 : 0;\n        }\n    },\n    methods: {\n        focusEditor: function focusEditor() {\n            this.$refs.editor.activate();\n        },\n\n        updateValue: function updateValue(option) {\n            var value = option ? option.code : null;\n            // Vue 3: Direct assignment is reactive\n            this.row[this.column.column] = value;\n        },\n\n        setInitialValue: function () {\n            var value = this.row[this.column.column],\n                options = this.column.options ? this.column.options : this.dynamicOptions;\n\n            // TODO - make this conversion configurable.\n            if (value === null) {\n                value = '';\n            }\n\n            if (value !== undefined) {\n                this.selectedValue = {\n                    code: value,\n                    label: options[value]\n                };\n            }\n        },\n\n        onContainerFocus: function onContainerFocus() {\n            this.$refs.editor.activate();\n        },\n\n        onFocus: function onFocus() {\n            this.$emit('focus', { target: this.$refs.editor.$el });\n            this.editorFocused = true;\n        },\n\n        onBlur: function onBlur() {\n            this.$emit('blur', { target: this.$refs.editor.$el });\n            this.editorFocused = false;\n        },\n    },\n    mounted: function () {\n        $(this.$el).find('.multiselect__select').addClass('backend-icon-background-pseudo');\n\n        if (this.loadingDynamicOptions) {\n            // TODO - load options and call setInitialValue()\n        }\n        else {\n            this.setInitialValue();\n        }\n    },\n    watch: {\n        row: {\n            deep: true,\n            handler: function (newValue) {\n                this.setInitialValue();\n            }\n        }\n    },\n    created: function created() {\n        if (!this.column.options) {\n            this.loadingDynamicOptions = true;\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-table-head.js",
    "content": "/*\n * Vue Inspector table control implementation\n */\nexport default {\n    props: {\n        columns: Array\n    },\n    data: function () {\n        return {\n            draggedHandle: null,\n            draggedColumnIndex: null,\n            draggedColumnInitialPosition: null,\n            draggedColumnInitialWidth: null,\n            columnWidth: {},\n            minColumnSize: 50 // TODO - make a property of columns\n        };\n    },\n    computed: {\n        columnsHash: function computeColumnsHash() {\n            var str = JSON.stringify(this.columns);\n\n            var hash = 0;\n            if (str.length == 0) {\n                return hash\n            };\n\n            for (i = 0; i < str.length; i++) {\n                char = str.charCodeAt(i);\n                hash = ((hash << 5) - hash) + char;\n                hash = hash & hash; // Convert to 32bit integer\n            }\n\n            return hash;\n        },\n\n        columnsWidthStorageKey: function computeColumnsWidthStorageKey() {\n            return 'inspector-table-column-width-' + this.columnsHash;\n        }\n    },\n    methods: {\n        initCellWidths: function initCellWidths(column) {\n            var cells = column.closest('thead').find('th'),\n                component = this,\n                lastIndex = cells.length - 1,\n                widthList = []\n\n            cells.each(function (index, cell) {\n                var $cell = $(cell);\n\n                if ($cell.data('widthSet')) {\n                    return;\n                }\n\n                var width = $cell.width();\n\n                widthList.push(width);\n                $cell.data('widthSet', true);\n\n                // Vue 3: Direct assignment is reactive\n                component.columnWidth[index] = width;\n            });\n\n            for (var index = 0; index < widthList.length; index++) {\n                $(cells[index]).width(widthList[index]);\n            }\n        },\n\n        onHandleMouseDown: function onHandleMouseDown(ev) {\n            if (!$(ev.target).hasClass('cell-resize-handle')) {\n                return;\n            }\n\n            this.draggedHandle = ev.target;\n            var column = $(this.draggedHandle).closest('th');\n\n            this.containerSize = $(this.$el).width();\n            this.draggedColumnIndex = column.index();\n            this.draggedColumnInitialPosition = $(this.draggedHandle).offset().left;\n\n            this.initCellWidths(column);\n\n            this.draggedColumnInitialWidth = this.columnWidth[this.draggedColumnIndex];\n            $(document.body).addClass('splitter-dragging-vertical');\n\n            document.addEventListener('mousemove', this.onMouseMove, { passive: true });\n            document.addEventListener('mouseup', this.onMouseUp);\n        },\n\n        onMouseMove: function onMouseMove(ev) {\n            if (ev.buttons != 1) {\n                // Handle the case when the button was released\n                // outside of the viewport. mouseup doesn't fire\n                // in that case.\n                //\n                this.onMouseUp();\n            }\n\n            var delta = ev.pageX - this.draggedColumnInitialPosition,\n                minSize = this.minColumnSize,\n                newWidth = 0,\n                widthDelta = 0;\n\n            newWidth = Math.max(this.draggedColumnInitialWidth - delta, minSize);\n\n            if (delta < 0) {\n                // Dragging to the left, increasing the current\n                // column width and potentially shrinking a\n                // previous column.\n\n                var maxWidth = this.columnWidth[this.draggedColumnIndex]\n                    + this.columnWidth[this.draggedColumnIndex - 1]\n                    - minSize;\n\n                newWidth = Math.min(newWidth, maxWidth);\n            }\n\n            widthDelta = this.columnWidth[this.draggedColumnIndex] - newWidth;\n\n            var newPrevColumnWidth = this.columnWidth[this.draggedColumnIndex - 1] + widthDelta;\n            // Vue 3: Direct assignment is reactive\n            this.columnWidth[this.draggedColumnIndex - 1] = newPrevColumnWidth;\n            this.columnWidth[this.draggedColumnIndex] = newWidth;\n        },\n\n        onMouseUp: function onMouseUp() {\n            this.draggedHandle = null;\n\n            document.removeEventListener('mousemove', this.onMouseMove, { passive: true });\n            document.removeEventListener('mouseup', this.onMouseUp);\n\n            $(document.body).removeClass('splitter-dragging-vertical');\n\n            localStorage.setItem(this.columnsWidthStorageKey, JSON.stringify(this.columnWidth));\n        }\n    },\n    mounted: function () {\n        var storedWidth = localStorage.getItem(this.columnsWidthStorageKey);\n        if (!storedWidth) {\n            return;\n        }\n\n        try {\n            storedWidth = JSON.parse(storedWidth);\n\n            if (typeof storedWidth !== 'object') {\n                return;\n            }\n\n            var keys = Object.keys(storedWidth);\n            for (var index = 0; index < keys.length; index++) {\n                if (index !== 0) {\n                    // Vue 3: Direct assignment is reactive\n                    this.columnWidth[keys[index]] = storedWidth[index];\n                }\n            }\n        }\n        catch (e) { }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-table-headcell.js",
    "content": "/*\n * Vue Inspector table control implementation\n */\nexport default {\n    props: {\n        column: Object,\n        columnIndex: Number,\n        columnWidth: Object\n    },\n    data: function () {\n        return {\n        };\n    },\n    computed: {\n        cellStyle: function computeCellStyle() {\n            if (this.columnWidth[this.columnIndex] === undefined) {\n                return {};\n            }\n\n            return {\n                width: this.columnWidth[this.columnIndex] + 'px'\n            }\n        }\n    },\n    methods: {\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-table-row.js",
    "content": "/*\n * Vue Inspector table control implementation\n */\nexport default {\n    props: {\n        columns: Array,\n        row: Object,\n        inspectorPreferences: Object,\n        tableConfiguration: Object,\n        rowIndex: Number\n    },\n    data: function () {\n        return {\n            focused: false,\n            isTableRow: true,\n            hasErrors: false,\n            cellRefs: []\n        };\n    },\n    computed: {\n    },\n    methods: {\n        setCellRef: function setCellRef(el, index) {\n            if (el) {\n                this.cellRefs[index] = el;\n            }\n        },\n\n        focusFirst: function focusFirst() {\n            var cells = this.cellRefs.filter(function(cell) { return cell != null; });\n            if (cells.length) {\n                cells[0].focusControl();\n            }\n        },\n\n        onCellFocus: function onCellFocus() {\n            this.focused = true;\n        },\n\n        onCellBlur: function onCellBlur() {\n            this.focused = false;\n        },\n\n        onValid: function onValid() {\n            this.hasErrors = false;\n        },\n\n        onInvalid: function onInvalid() {\n            this.hasErrors = true;\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-table-text.js",
    "content": "import { TableControlBase } from './classes/index.js';\n\n/*\n * Vue Inspector table text control implementation\n */\nexport default {\n    extends: TableControlBase,\n    props: {\n    },\n    data: function () {\n        return {\n        };\n    },\n    computed: {\n    },\n    methods: {\n        focusControl: function focusControl() {\n            this.$refs.input.focus();\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-table.js",
    "content": "import { ControlBase } from './classes/index.js';\n\n/*\n * Vue Inspector table control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: Object\n    },\n    data: function () {\n        return {\n            edited: false,\n            lang: {\n                addItem: \"\"\n            },\n            rowRefs: []\n        };\n    },\n    computed: {\n        columns: function computeColumns() {\n            if (!Array.isArray(this.control.columns)) {\n                throw new Error('The columns property not found in the Inspector table definition. Property: '\n                    + this.control.property);\n            }\n\n            return this.control.columns;\n        },\n\n        tableConfiguration: function computeTableConfiguration() {\n            return {\n                deleting: this.control.deleting || this.control.deleting === undefined,\n                adding: this.control.adding || this.control.adding === undefined\n            };\n        }\n    },\n    methods: {\n        setRowRef: function setRowRef(el, index) {\n            if (el) {\n                this.rowRefs[index] = el;\n            }\n        },\n\n        updateValue: function updateValue() {\n            this.edited = true;\n            this.setManagedValue(this.$refs.input.value);\n        },\n\n        getTableRowComponents: function getTableRowComponents() {\n            return this.rowRefs.filter(function (row) {\n                return row != null && row.isTableRow;\n            });\n        },\n\n        getDefaultValue: function getDefaultValue() {\n            return [];\n        },\n\n        focusControl: function focusControl() {\n            var rows = this.getTableRowComponents();\n            if (rows.length) {\n                rows[0].focusFirst();\n            }\n        },\n\n        onRemoveRowClick: function onRemoveRowClick(index) {\n            this.value.splice(index, 1);\n        },\n\n        onAddItemClick: function onAddItemClick() {\n            if (this.inspectorPreferences.readOnly) {\n                return;\n            }\n\n            var newObj = {};\n\n            this.columns.forEach(function (column) {\n                newObj[column.column] = null;\n            });\n\n            this.value.push(newObj);\n            this.rowRefs = [];\n\n            var that = this;\n            Vue.nextTick(function () {\n                var rows = that.getTableRowComponents();\n                rows[rows.length - 1].focusFirst();\n            });\n        }\n    },\n    created: function created() {\n\n    },\n    mounted: function mounted() {\n        this.lang.addItem = this.$el.getAttribute('data-lang-add-item');\n        this.$emit('hidebottomborder');\n\n        if (!this.control.title) {\n            this.$emit('hidefullwidthlabel');\n        }\n    },\n    watch: {\n        'layoutUpdateData.modalShown': function onModalShown() {\n            if (this.control.defaultFocus) {\n                // Focus after visbility animations are ready\n                var self = this;\n                setTimeout(function () {\n                    self.focusControl();\n                }, 100);\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/control-text.js",
    "content": "import { ControlBase, utils } from './classes/index.js';\n\n/*\n * Vue Inspector text control implementation\n */\nexport default {\n    extends: ControlBase,\n    props: {\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        }\n    },\n    data: function () {\n        return {\n            edited: false\n        };\n    },\n    computed: {\n        presetValue: function computePresetValue() {\n            if (!this.control.preset || this.edited) {\n                return undefined;\n            }\n\n            var sourceValue = utils.getProperty(this.obj, this.control.preset.property);\n\n            if (sourceValue === undefined || sourceValue === null) {\n                sourceValue = '';\n            }\n\n            return oc.InputPresetEngine.formatValue(\n                {\n                    inputPresetType: this.control.preset.type,\n                    inputPresetRemoveWords:\n                        this.control.preset.removeWords === undefined ? true : this.control.preset.removeWords\n                },\n                sourceValue\n            );\n        },\n\n        valueWithPreset: function computeValueWithPreset() {\n            var value = this.value,\n                presetValue = this.presetValue;\n\n            return presetValue !== undefined ? presetValue : value;\n        },\n\n        cssClass: function computeCssClass() {\n            if (this.control.type != 'text') {\n                return {};\n            }\n\n            return {\n                'size-small': this.control.size === undefined || this.control.size == 'small',\n                'size-medium': this.control.size == 'medium',\n                'size-large': this.control.size == 'large'\n            };\n        }\n    },\n    methods: {\n        updateValue: function updateValue() {\n            this.edited = true;\n            this.setManagedValue(this.$refs.input.value);\n            this.updateTextareaHeight();\n        },\n\n        updateTextareaHeight: function updateHeight() {\n            if (this.control.type != 'text') {\n                return;\n            }\n\n            var that = this;\n            Vue.nextTick(function () {\n                var $shadow = $(that.$refs.textareaShadow),\n                    $input = $(that.$refs.input);\n\n                $shadow.width($input.width());\n                $input.height($shadow.height());\n            });\n        },\n\n        focusControl: function focusControl() {\n            this.$refs.input.focus();\n        }\n    },\n    created: function created() {\n        if (this.value !== undefined && this.value != this.control.default) {\n            this.edited = true;\n        }\n    },\n    mounted: function mounted() {\n        this.updateTextareaHeight();\n    },\n    watch: {\n        'splitterData.position': function onSplitterPositionChanged() {\n            this.updateTextareaHeight();\n        },\n        'panelUpdateData.tabChanged': function onPanelTabChanged() {\n            this.updateTextareaHeight();\n        },\n        valueWithPreset: function onValueWithPresetChanged() {\n            this.updateTextareaHeight();\n        },\n        presetValue: function onPresetValueChanged(value) {\n            if (value !== undefined) {\n                Vue.nextTick(() => {\n                    this.setManagedValue(this.$refs.input.value);\n                });\n            }\n        },\n        'layoutUpdateData.updateValue': function onLayoutUpdateValueChanged() {\n            this.updateTextareaHeight();\n        },\n        'layoutUpdateData.modalShown': function onModalShown() {\n            if (this.control.defaultFocus) {\n                // Focus after visbility animations are ready\n                var self = this;\n                setTimeout(function () {\n                    self.focusControl();\n                }, 100);\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/controlhost-row.js",
    "content": "import { utils } from './classes/index.js';\n\n/*\n * Vue Inspector control host row implementation\n */\nexport default {\n    props: {\n        obj: {\n            type: [Object, Array],\n            required: true\n        },\n        parentObj: {\n            type: Object,\n            required: false\n        },\n        control: {\n            type: Object,\n            required: true\n        },\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        depth: {\n            type: Number,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        controlHostUniqueId: {\n            type: String,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: {\n            type: Object\n        },\n        isFullWidth: {\n            type: Boolean\n        },\n        inspectorUniqueId: {\n            type: String,\n            required: true\n        }\n    },\n    data: function () {\n        return {\n            hasErrors: false,\n            controlLabelHidden: false,\n            bottomBorderHidden: false\n        };\n    },\n    computed: {\n        titlePanelStyle: function computeTitlePanelStyle() {\n            var result = {},\n                sizePx = this.splitterData.position + 'px';\n\n            result['width'] = sizePx;\n\n            return result;\n        },\n\n        rowVisible: function computeRowVisible() {\n            if (!this.control.visibility) {\n                return true;\n            }\n\n            const visibility = this.control.visibility;\n            const sourceValue = utils.getProperty(this.obj, visibility.source_property);\n\n            let visible = true;\n            if (typeof visibility === 'function') {\n                visible = visibility(this.obj);\n            }\n            else {\n                if (visibility.value !== '--any--') {\n                    if (Array.isArray(visibility.value)) {\n                        visible = visibility.value.includes(sourceValue)\n                    }\n                    else {\n                        visible = sourceValue == visibility.value;\n                    }\n                }\n                else {\n                    visible = !utils.isValueEmpty(sourceValue);\n                }\n\n                if (visibility.inverse) {\n                    visible = !visible;\n                }\n            }\n\n\n            if (visible) {\n                const currentValue = utils.getProperty(this.obj, this.control.property);\n                if (currentValue === null) {\n                    utils.setProperty(this.obj, this.control.property, this.control.default);\n                    this.$refs.editor.refreshDisplayedValue();\n                }\n\n                if (this.control.type === 'string' && !this.control.no_focus_on_visible) {\n                    Vue.nextTick(() => {\n                        this.$refs.editor.focusControl();\n                    });\n                }\n            }\n            else {\n                utils.setProperty(this.obj, this.control.property, null);\n            }\n\n            return visible;\n        },\n\n        controlColspan: function computeControlColspan() {\n            return this.isFullWidth || this.controlLabelHidden ? 2 : 1;\n        },\n\n        labelStyle: function computeLabelStyle() {\n            if (!this.depth) {\n                return {};\n            }\n\n            return {\n                'margin-left': (this.depth * 10) + 'px'\n            };\n        },\n\n        controlEditorId: function computeControlEditorId() {\n            return this.controlHostUniqueId + this.control.property;\n        }\n    },\n    methods: {\n        onEditorFocus: function onEditorFocus() {\n            $(this.$el).closest('.component-backend-inspector-panel').find('tr.inspector-control-row').removeClass('focused');\n            $(this.$el).addClass('focused');\n        },\n\n        onEditorBlur: function onEditorBlur() {\n            $(this.$el).removeClass('focused');\n        },\n\n        onLabelClick: function onLabelClick() {\n            if (this.$refs.editor.onInspectorLabelClick !== undefined) {\n                this.$refs.editor.onInspectorLabelClick();\n            }\n        },\n\n        onEditorInvalid: function onEditorInvalid() {\n            this.hasErrors = true;\n        },\n\n        onEditorValid: function onEditorValid() {\n            this.hasErrors = false;\n        }\n    },\n    created: function created() {\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/controlhost.js",
    "content": "import { utils } from './classes/index.js';\n\n/*\n * Vue Inspector control host implementation\n */\nexport default {\n    props: {\n        controls: {\n            type: Array,\n            required: true\n        },\n        obj: {\n            type: [Object, Array],\n            required: true\n        },\n        parentObj: {\n            type: Object,\n            required: false\n        },\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        depth: {\n            type: Number,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorUniqueId: {\n            type: String,\n            required: true\n        },\n        inspectorPreferences: {\n            type: Object\n        }\n    },\n    data: function () {\n        return {\n            uniqueId: $.oc.domIdManager.generate('inspector-control-host'),\n            containerSize: 0,\n            draggedHandle: null,\n            fullWidthControls: [\n                'table',\n                'object',\n                'objectList',\n                'objectListRecords',\n                'set',\n                'dictionary'\n            ]\n        };\n    },\n    computed: {\n    },\n    methods: {\n        isFullWidthControl: function isFullWidthControl(control) {\n            return this.fullWidthControls.indexOf(control.type) !== -1;\n        },\n\n        onHandleMouseDown: function onHandleMouseDown(ev) {\n            if (!$(ev.target).hasClass('inspector-drag-handle')) {\n                return;\n            }\n\n            this.draggedHandle = ev.target;\n            this.containerSize = $(this.$el).width();\n            $(document.body).addClass('splitter-dragging-vertical');\n\n            document.addEventListener('mousemove', this.onMouseMove, { passive: true });\n            document.addEventListener('mouseup', this.onMouseUp);\n        },\n\n        onMouseMove: function onMouseMove(ev) {\n            if (ev.buttons != 1) {\n                // Handle the case when the button was released\n                // outside of the viewport. mouseup doesn't fire\n                // in that case.\n                //\n                this.onMouseUp();\n            }\n\n            var handlePos = $(this.draggedHandle).offset(),\n                delta = ev.pageX - handlePos.left,\n                minSize = this.splitterData.minSize;\n\n            if (delta <= 0) {\n                this.splitterData.position = Math.max(this.splitterData.position + delta, minSize);\n            }\n            else {\n                this.splitterData.position = Math.min(this.splitterData.position + delta, this.containerSize - minSize);\n            }\n        },\n\n        onMouseUp: function onMouseUp() {\n            this.draggedHandle = null;\n\n            document.removeEventListener('mousemove', this.onMouseMove, { passive: true });\n            document.removeEventListener('mouseup', this.onMouseUp);\n\n            $(document.body).removeClass('splitter-dragging-vertical');\n\n            var storageKey = utils.getLocalStorageKey(this, 'splitter');\n            localStorage.setItem(storageKey, Math.round(this.splitterData.position));\n        }\n    },\n    created: function created() {\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/group.js",
    "content": "/*\n * Vue Inspector control group implementation\n */\nexport default {\n    props: {\n        controls: {\n            type: Array,\n            required: true\n        },\n        obj: {\n            type: [Object, Array],\n            required: true\n        },\n        parentObj: {\n            type: Object,\n            required: false\n        },\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        groupName: {\n            type: String,\n            required: true\n        },\n        inspectorUniqueId: {\n            type: String,\n            required: true\n        },\n        depth: {\n            type: Number,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: {\n            type: Object\n        },\n        loading: {\n            type: Boolean\n        },\n        groupValue: String,\n        hideBottomBorder: Boolean\n    },\n    data: function () {\n        return {\n            expanded: true,\n            hasErrors: false\n        };\n    },\n    computed: {\n        expandStatusStorageKey: function computeExpandStatusStorageKey() {\n            return this.inspectorUniqueId + '-group-status-' + $.oc.vueUtils.stringHashCode(this.groupName);\n        },\n\n        nameAndValue: function computeNameAndValue() {\n            if (typeof this.groupValue !== 'string') {\n                return this.groupName;\n            }\n\n            return this.groupName + ' ' + this.groupValue;\n        },\n\n        nameStyle: function computeNameStyle() {\n            if (!this.depth) {\n                return {};\n            }\n\n            return {\n                'margin-left': (this.depth * 10) + 'px'\n            };\n        }\n    },\n    methods: {\n        onToggleGroup: function onToggleGroup() {\n            this.expanded = !this.expanded;\n\n            if (this.expanded) {\n                localStorage.setItem(this.expandStatusStorageKey, '1');\n            }\n            else {\n                localStorage.removeItem(this.expandStatusStorageKey);\n            }\n        },\n\n        expandInspectorControl: function expandInspectorControl() {\n            if (!this.expanded) {\n                this.onToggleGroup();\n            }\n        },\n\n        setHasValidationErrors: function setHasValidationErrors(value) {\n            this.hasErrors = value;\n        }\n    },\n    mounted: function onMounted() {\n        this.expanded = localStorage.getItem(this.expandStatusStorageKey) == '1';\n    },\n    created: function created() {\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/grouphost.js",
    "content": "import { utils } from './classes/index.js';\n\n/*\n * Vue Inspector group host implementation\n */\nexport default {\n    props: {\n        controls: {\n            type: Array,\n            required: true\n        },\n        obj: {\n            type: Object,\n            required: true\n        },\n        parentObj: {\n            type: Object,\n            required: false\n        },\n        splitterData: {\n            type: Object,\n            required: true\n        },\n        inspectorUniqueId: {\n            type: String,\n            required: true\n        },\n        depth: {\n            type: Number,\n            required: true\n        },\n        panelUpdateData: {\n            type: Object,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: {\n            type: Object\n        }\n    },\n    data: function () {\n        return {\n        };\n    },\n    computed: {\n        groupedControls: function computeGroupedUntabbedControls() {\n            return utils.groupControls(this.controls);\n        }\n    },\n    methods: {\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/host-modal.js",
    "content": "/*\n * Vue modal host implementation\n */\nexport default {\n    props: {\n        title: {\n            type: String,\n            required: true\n        },\n        description: {\n            type: String\n        },\n        buttonText: {\n            type: String,\n            required: false\n        },\n        size: {\n            type: String,\n            default: 'normal',\n            validator: function (value) {\n                return ['small', 'normal', 'large'].indexOf(value) !== -1;\n            }\n        },\n        dataSchema: {\n            type: Array,\n            required: true\n        },\n        liveMode: {\n            type: Boolean,\n            default: false\n        },\n        data: {\n            type: Object,\n            required: true\n        },\n        uniqueId: {\n            type: String,\n            required: true\n        },\n        handlerAlias: {\n            type: String,\n            required: false\n        },\n        resizableWidth: {\n            type: Boolean,\n            default: false\n        }\n    },\n    data: function () {\n        return {\n            modalTitleId: $.oc.domIdManager.generate('modal-inspector-title'),\n            primaryButtonText: '',\n            layoutUpdateData: {\n                updateValue: 0,\n                modalShown: 0,\n                modalTemporaryHidden: false\n            },\n            readOnly: false\n        };\n    },\n    computed: {},\n    methods: {\n        applyAndClose: function emitApplyAndClose() {\n            this.$refs.inspector.applyChanges();\n            this.$emit('applyclick');\n            this.$refs.modal.hide();\n        },\n\n        onHidden: function onHidden() {\n            this.$emit('close');\n        },\n\n        onApplyClick: function onApplyClick() {\n            if (this.readOnly) {\n                return;\n            }\n\n            var inspector = this.$refs.inspector,\n                that = this;\n\n            that.readOnly = true;\n\n            this.$refs.inspector.validate().then(\n                function validateResolve() {\n                    var beforeApplyCallbackHolder = {};\n                    that.$emit('beforeapply', beforeApplyCallbackHolder);\n\n                    if (beforeApplyCallbackHolder.callback) {\n                        var beforeApplyPromise = beforeApplyCallbackHolder.callback(inspector.getCleanObject());\n                        if (typeof beforeApplyPromise !== 'object') {\n                            throw new Error('The beforeapply callback must return a promise');\n                        }\n\n                        if (typeof beforeApplyPromise.then !== 'function') {\n                            throw new Error('The beforeapply callback must return a promise');\n                        }\n\n                        beforeApplyPromise.then(\n                            function beforeApplyPromiseResolve(result) {\n                                if (result !== false) {\n                                    that.applyAndClose();\n                                }\n                                that.readOnly = false;\n                            },\n                            function beforeApplyPromiseReject() {\n                                that.readOnly = false;\n                            }\n                        );\n                    }\n                    else {\n                        that.readOnly = false;\n                        that.applyAndClose();\n                    }\n                },\n                function validateReject() {\n                    that.readOnly = false;\n                }\n            );\n        },\n\n        onCloseClick: function onCloseClick() {\n            if (this.readOnly) {\n                return;\n            }\n\n            this.$refs.modal.hide();\n        },\n\n        onCancelClick: function onCancelClick() {\n            if (this.liveMode) {\n                this.$refs.inspector.revertChanges();\n            }\n\n            this.onCloseClick();\n        },\n\n        onResized: function onResized() {\n            this.layoutUpdateData.updateValue++;\n        },\n\n        onShown: function onShown() {\n            this.$refs.inspector.onModalShown();\n        },\n\n        onEnterKey: function onEnterKey(ev) {\n            ev.stopPropagation();\n            ev.preventDefault();\n            this.onApplyClick();\n        }\n    },\n    mounted: function onMounted() {\n        if (this.buttonText) {\n            this.primaryButtonText = this.buttonText;\n        }\n        else {\n            this.primaryButtonText = $(this.$el).attr('data-default-button-text');\n        }\n\n        this.$refs.modal.show();\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/inspector.js",
    "content": "import { utils } from './classes/index.js';\n\n/*\n * Vue Inspector implementation\n */\nexport default {\n    props: {\n        dataSchema: {\n            type: Array,\n            required: true\n        },\n        data: {\n            type: Object,\n            required: true\n        },\n        liveMode: {\n            type: Boolean,\n            default: false\n        },\n        uniqueId: {\n            type: String,\n            required: true\n        },\n        handlerAlias: {\n            type: String\n        },\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorClass: {\n            type: String\n        },\n        readOnly: {\n            type: Boolean,\n            default: false\n        }\n    },\n    data: function () {\n        if (typeof this.data !== 'object') {\n            throw new Error('Inspector data.obj must be an object');\n        }\n\n        return {\n            liveObject: this.liveMode ? this.data.obj : $.oc.vueUtils.getCleanObject(this.data.obj),\n            originalData: this.liveMode ? $.oc.vueUtils.getCleanObject(this.data.obj) : null,\n            parentObject: this.data.parentObj ? this.data.parentObj : {}\n        };\n    },\n    computed: {\n        inspectorPreferences: function computeInspectorPreferences() {\n            return {\n                readOnly: this.readOnly,\n                inspectorClass: this.inspectorClass,\n                handlerAlias: this.handlerAlias\n            };\n        }\n    },\n    methods: {\n        getCleanObject: function getCleanObject() {\n            return $.oc.vueUtils.getCleanObject(this.liveObject);\n        },\n\n        applyChanges: function applyChanges() {\n            utils.deepCloneObject(this.getCleanObject(), this.data.obj);\n        },\n\n        revertChanges: function cancelChanges() {\n            if (!this.liveMode) {\n                throw new Error('Changes can only be reverted in live mode.');\n            }\n\n            utils.deepCloneObject(this.originalData, this.data.obj);\n        },\n\n        validate: function validate() {\n            return this.$refs.panel.validate();\n        },\n\n        onModalShown: function onModalShown() {\n            this.layoutUpdateData.modalShown++;\n        }\n    },\n    created: function created() {\n        var validationError = utils.validateDataSchema(this.dataSchema);\n\n        if (typeof validationError === 'string') {\n            console.log(this.dataSchema);\n            throw new Error(validationError);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/js/panel.js",
    "content": "import { utils } from './classes/index.js';\nimport { modalUtils } from '../../../modal/assets/js/classes/index.js';\n\n/*\n * Vue Inspector panel implementation\n */\nexport default {\n    provide: function() {\n        return {\n            inspectorControlRegistry: {\n                controls: this.registeredControls,\n                register: this.registerControl,\n                unregister: this.unregisterControl\n            }\n        };\n    },\n    props: {\n        controls: {\n            type: Array,\n            required: true\n        },\n        obj: {\n            type: Object,\n            required: true\n        },\n        parentObj: {\n            type: Object,\n            required: false\n        },\n        inspectorUniqueId: {\n            type: String,\n            required: true\n        },\n        layoutUpdateData: {\n            type: Object\n        },\n        inspectorPreferences: {\n            type: Object\n        }\n    },\n    data: function () {\n        var storageKey = utils.getLocalStorageKey(this, 'splitter'),\n            splitterPosition = parseInt(localStorage.getItem(storageKey));\n\n        return {\n            splitterData: {\n                position: !splitterPosition ? 200 : splitterPosition,\n                minSize: 100\n            },\n            panelUpdateData: {\n                tabChanged: 0\n            },\n            registeredControls: []\n        };\n    },\n    computed: {\n        untabbedControls: function computeUntabbedControls() {\n            return this.controls.filter(function (propDefinition) {\n                if (!propDefinition.tab) {\n                    return true;\n                }\n            });\n        },\n\n        tabbedControls: function computeTabbedControls() {\n            var result = {};\n\n            this.controls.forEach(function (propDefinition) {\n                if (propDefinition.tab) {\n                    if (result[propDefinition.tab] === undefined) {\n                        result[propDefinition.tab] = [];\n                    }\n\n                    result[propDefinition.tab].push(propDefinition);\n                }\n            });\n\n            return result;\n        },\n\n        tabs: function computeTabs() {\n            var result = [];\n\n            Object.keys(this.tabbedControls).forEach(function (tabName) {\n                result.push({\n                    label: tabName,\n                    key: tabName\n                });\n            });\n\n            return result;\n        }\n    },\n    methods: {\n        registerControl: function(control) {\n            if (this.registeredControls.indexOf(control) === -1) {\n                this.registeredControls.push(control);\n            }\n        },\n\n        unregisterControl: function(control) {\n            var index = this.registeredControls.indexOf(control);\n            if (index !== -1) {\n                this.registeredControls.splice(index, 1);\n            }\n        },\n\n        validate: function () {\n            var that = this;\n\n            utils.clearPanelValidationErrors(that.registeredControls);\n\n            return new Promise(function (resolve, reject) {\n                var result = utils.validatePanelControls(that.registeredControls);\n                if (result === null) {\n                    resolve();\n                }\n                else {\n                    return utils.expandControlParents(result.component)\n                        .then(function () {\n                            var controlTab = utils.findErrorComponentTab(result.component);\n                            if (controlTab && that.tabbedControls[controlTab]) {\n                                that.$refs.tabs.selectTab(controlTab);\n                            }\n\n                            return modalUtils\n                                .showAlert(that.$el.getAttribute('data-validation-alert-title'), result.message)\n                                .then(function () {\n                                    result.component.focusControl();\n                                    reject(result.message);\n                                });\n                        });\n                }\n            });\n        },\n\n        onTabSelected: function () {\n            this.panelUpdateData.tabChanged++;\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/assets/vendor/ajv/LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015-2017 Evgeny Poberezkin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-autocomplete.php",
    "content": "<div>\n    <backend-loading-indicator v-if=\"loadingDynamicOptions\"\n        size=\"tiny\"\n    ></backend-loading-indicator>\n\n    <backend-autocomplete\n        v-if=\"!loadingDynamicOptions\"\n        ref=\"autocomplete\"\n        :search=\"onSearch\"\n        :getResultValue=\"getResultValue\"\n        :placeholder=\"placeholder\"\n        :defaultValue=\"initialValue\"\n        :readonly=\"inspectorPreferences.readOnly\"\n        v-bind:id=\"controlId\"\n        @input=\"onInput\"\n        @change=\"onChange\"\n        @update=\"onUpdate\"\n        @focus=\"onFocus\"\n        @blur=\"onBlur\"\n    >\n        <template #result=\"{ result, props }\">\n            <li v-bind=\"props\" class=\"autocomplete-result\">\n                {{ result.value }}\n            </li>\n        </template>\n    </backend-autocomplete>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-checkbox.php",
    "content": "<div class=\"inspector-control\">\n    <div\n        class=\"component-backend-inspector-checkbox\"\n    >\n        <label\n            tabindex=\"0\"\n            @keydown=\"onLabelKeydown\"\n            @focus=\"$emit('focus', $event)\"\n            @blur=\"$emit('blur', $event)\"\n        >\n            <input\n                type=\"checkbox\"\n                ref=\"input\"\n                value=\"1\"\n                v-bind:checked=\"isChecked\"\n                v-bind:id=\"controlId\"\n                v-bind:readonly=\"inspectorPreferences.readOnly\"\n                v-bind:disabled=\"inspectorPreferences.readOnly\"\n                @input=\"updateValue\"\n            /><span class=\"backend-icon-background-pseudo\"></span>\n        </label>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-dictionary.php",
    "content": "<div\n    data-lang-key-required=\"<?= e(trans('backend::lang.dictionary.key_required')) ?>\"\n    data-lang-value-required=\"<?= e(trans('backend::lang.dictionary.value_required')) ?>\"\n>\n    <backend-inspector-group\n        :group-name=\"control.title\"\n        :obj=\"editedObject\"\n        :controls=\"nestedControlProperties\"\n        :splitter-data=\"splitterData\"\n        :depth=\"depth\"\n        :panel-update-data=\"panelUpdateData\"\n        :group-value=\"groupValue\"\n        :layout-update-data=\"layoutUpdateData\"\n        :inspector-unique-id=\"inspectorUniqueId\"\n        :inspector-preferences=\"inspectorPreferences\"\n        :hide-bottom-border=\"true\"\n        ref=\"group\"\n    >\n    </backend-inspector-group>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-dropdown.php",
    "content": "<div v-bind:tabindex=\"containerTabIndex\" @focus=\"onContainerFocus\">\n    <backend-loading-indicator v-if=\"loadingDynamicOptions\"\n        size=\"tiny\"\n    ></backend-loading-indicator>\n\n    <backend-dropdown\n        v-if=\"!loadingDynamicOptions\"\n        :options=\"options\"\n        :id=\"controlId\"\n        :placeholder=\"control.placeholder\"\n        :tabindex=\"0\"\n        :disabled=\"inspectorPreferences.readOnly\"\n        :allow-empty=\"true\"\n        track-by=\"code\"\n        label=\"label\"\n        ref=\"input\"\n        v-model=\"selectedValue\"\n        select-label=\"\"\n        selected-label=\"\"\n        deselect-label=\"\"\n        @update:model-value=\"updateValue\"\n        @open=\"onFocus\"\n        @close=\"onBlur\"\n        @vue:mounted=\"onDropdownMounted\"\n    >\n        <template #noResult>\n            <span><?= e(trans('backend::lang.form.no_options_found')) ?></span>\n        </template>\n        <template v-if=\"useValuesAsIcons || useValuesAsColors\" #option=\"props\">\n            <div class=\"option-with-icon\" v-if=\"useValuesAsIcons\">\n                <div class=\"option-icon\" :class=\"props.option.code\"></div>\n                <span>{{ props.option.label }}</span>\n            </div>\n\n            <div class=\"option-with-color\" v-if=\"useValuesAsColors\">\n                <div class=\"option-color\" :style=\"{'background-color': props.option.code}\"></div>\n                <span>{{ props.option.label }}</span>\n            </div>\n        </template>\n    </backend-dropdown>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-mediafinder.php",
    "content": "<div\n    data-lang-error-not-image=\"<?= e(trans('backend::lang.mediafinder.not_an_image')) ?>\"\n    data-lang-placeholder=\"<?= e(trans('backend::lang.mediafinder.click_to_select_file')) ?>\"\n    class=\"inspector-control-clearable\"\n>\n    <div\n        class=\"inspector-control clickable act-as-text-input\"\n        :class=\"cssClass\"\n        :tabindex=\"0\"\n        @focus=\"onFocus\"\n        @blur=\"onBlur\"\n        ref=\"input\"\n        v-text:value=\"displayedText\"\n        v-bind:readonly=\"inspectorPreferences.readOnly\"\n        @click.stop=\"onClick\"\n        @keydown.stop=\"onKeyDown\"\n    ></div>\n\n    <button v-if=\"this.value && !inspectorPreferences.readOnly\" @click.stop=\"onClearClick\" class=\"clear-value\"></button>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-object.php",
    "content": "<div>\n    <backend-inspector-group\n        :group-name=\"control.title\"\n        :obj=\"editedObject\"\n        :controls=\"control.properties\"\n        :splitter-data=\"splitterData\"\n        :depth=\"depth\"\n        :panel-update-data=\"panelUpdateData\"\n        :layout-update-data=\"layoutUpdateData\"\n        :inspector-unique-id=\"inspectorUniqueId\"\n        :inspector-preferences=\"inspectorPreferences\"\n        ref=\"group\"\n    >\n    </backend-inspector-group>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-objectlist-records.php",
    "content": "<div\n    class=\"component-backend-inspector-table\"\n    data-lang-add-item=\"<?= e(trans('backend::lang.table.add_item')) ?>\"\n>\n    <table v-if=\"hasValues\">\n        <tbody>\n            <tr v-for=\"(record, key) in obj\">\n                <td class=\"no-sub-controls\" :class=\"{clickable: !inspectorPreferences.readOnly}\" @click.stop=\"onItemClick(key)\">\n                    <div class=\"clickable-data-container\">\n                        <backend-inspector-control-objectlist-recordtitle\n                            :control=\"control\"\n                            :record=\"record\"\n                            :parent-obj=\"parentObj\"\n                            :obj=\"obj\"\n                        ></backend-inspector-control-objectlist-recordtitle>\n                        <button v-if=\"!inspectorPreferences.readOnly\" @click.stop.prevent=\"onRemoveItemClick(key)\" class=\"remove-row-btn\"></button>\n                    </div>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n\n    <div class=\"inspector-padding-control-left table-control-links\">\n        <a\n            href=\"#\"\n            class=\"add-item-link\"\n            :class=\"{disabled: inspectorPreferences.readOnly || !displayAddItem}\"\n            :disabled=\"inspectorPreferences.readOnly || !displayAddItem\"\n            @click.stop.prevent=\"onAddItemClick\"\n            v-text=\"lang.addItem\"\n        ></a>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-objectlist-recordtitle.php",
    "content": "<div class=\"title-container\">\n    <backend-loading-indicator v-if=\"loadingDynamicTitle\"\n        size=\"tiny\"\n    ></backend-loading-indicator>\n    <template v-else>\n        <span class=\"record-color\" v-if=\"recordColor\" :style=\"{'background-color': recordColor}\"></span>\n        <span v-text=\"recordTitle\"></span>\n    </template>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-objectlist.php",
    "content": "<div\n    data-lang-error=\"<?= e(trans('backend::lang.form.error')) ?>\"\n    data-lang-prop-cant-be-empty=\"<?= e(trans('backend::lang.object_list.prop_cant_be_empty')) ?>\"\n    data-lang-key-value-exists=\"<?= e(trans('backend::lang.object_list.key_value_exists')) ?>\"\n>\n    <backend-inspector-group\n        :group-name=\"control.title\"\n        :obj=\"editedObject\"\n        :parent-obj=\"obj\"\n        :controls=\"nestedControlProperties\"\n        :splitter-data=\"splitterData\"\n        :depth=\"depth\"\n        :panel-update-data=\"panelUpdateData\"\n        :layout-update-data=\"layoutUpdateData\"\n        :inspector-unique-id=\"inspectorUniqueId\"\n        :inspector-preferences=\"inspectorPreferences\"\n        ref=\"group\"\n        @inspectorcommand=\"onInspectorCommand\"\n    >\n    </backend-inspector-group>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-set.php",
    "content": "<div>\n    <backend-inspector-group\n        :group-name=\"control.title\"\n        :obj=\"editedObject\"\n        :controls=\"nestedControlProperties\"\n        :splitter-data=\"splitterData\"\n        :depth=\"depth\"\n        :group-value=\"groupValue\"\n        :panel-update-data=\"panelUpdateData\"\n        :layout-update-data=\"layoutUpdateData\"\n        :inspector-unique-id=\"inspectorUniqueId\"\n        :inspector-preferences=\"inspectorPreferences\"\n        :loading=\"loadingDynamicOptions\"\n        ref=\"group\"\n    >\n    </backend-inspector-group>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-table-cell.php",
    "content": "<td>\n    <div class=\"table-cell-container\">\n        <backend-inspector-control-table-text\n            v-if=\"column.type == 'string'\"\n            :row=\"row\"\n            :column=\"column\"\n            :cell-index=\"cellIndex\"\n            :inspector-preferences=\"inspectorPreferences\"\n            ref=\"editor\"\n            @focus=\"$emit('focus', $event)\"\n            @blur=\"$emit('blur', $event)\"\n            @valid=\"$emit('valid', $event)\"\n            @invalid=\"$emit('invalid', $event)\"\n        >\n        </backend-inspector-control-table-text>\n\n        <backend-inspector-control-table-dropdown\n            v-if=\"column.type == 'dropdown'\"\n            :row=\"row\"\n            :column=\"column\"\n            :cell-index=\"cellIndex\"\n            :inspector-preferences=\"inspectorPreferences\"\n            ref=\"editor\"\n            @focus=\"$emit('focus', $event)\"\n            @blur=\"$emit('blur', $event)\"\n            @valid=\"$emit('valid', $event)\"\n            @invalid=\"$emit('invalid', $event)\"\n        >\n        </backend-inspector-control-table-dropdown>\n\n        <button v-if=\"isLastCell && tableConfiguration.deleting && !inspectorPreferences.readOnly\" @click.stop=\"$emit('removerow')\" class=\"remove-row-btn\"></button>\n    </div>\n</td>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-table-dropdown.php",
    "content": "<div\n    v-bind:tabindex=\"containerTabIndex\"\n    @focus=\"onContainerFocus\"\n    class=\"inspector-table-dropdown-container\"\n>\n    <backend-dropdown\n        :options=\"options\"\n        :placeholder=\"column.placeholder\"\n        :tabindex=\"0\"\n        :disabled=\"inspectorPreferences.readOnly\"\n        :allow-empty=\"true\"\n        track-by=\"code\"\n        label=\"label\"\n        ref=\"editor\"\n        v-model=\"selectedValue\"\n        select-label=\"\"\n        selected-label=\"\"\n        deselect-label=\"\"\n        @update:model-value=\"updateValue\"\n        @open=\"onFocus\"\n        @close=\"onBlur\"\n    >\n        <template #noResult>\n            <span><?= e(trans('backend::lang.form.no_options_found')) ?></span>\n        </template>\n    </backend-dropdown>\n\n    <div class=\"dropdown-placeholder\" v-if=\"!hasValue\" v-text=\"column.placeholder\"></div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-table-head.php",
    "content": "<thead @mousedown.stop=\"onHandleMouseDown\">\n    <tr>\n        <backend-inspector-control-table-headcell\n            v-for=\"(column, index) in columns\"\n            :key=\"index\"\n            :column=\"column\"\n            :column-index=\"index\"\n            :column-width=\"columnWidth\"\n        >\n        </backend-inspector-control-table-headcell>\n    </tr>\n</thead>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-table-headcell.php",
    "content": "<th v-bind:style=\"cellStyle\">\n    <div class=\"header-cell-container\">\n        <div v-if=\"columnIndex != 0\" class=\"cell-resize-handle\"></div>\n        <span v-text=\"column.title\"></span>\n    </div>\n</th>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-table-row.php",
    "content": "<tr :class=\"{focused: focused, 'has-errors': hasErrors}\">\n    <backend-inspector-control-table-cell\n        v-for=\"(column, index) in columns\"\n        :ref=\"el => setCellRef(el, index)\"\n        :key=\"index\"\n        :column=\"column\"\n        :row=\"row\"\n        :cell-index=\"index\"\n        :inspector-preferences=\"inspectorPreferences\"\n        :table-configuration=\"tableConfiguration\"\n        :is-last-cell=\"index == columns.length-1\"\n        @focus=\"onCellFocus\"\n        @blur=\"onCellBlur\"\n        @valid=\"onValid\"\n        @invalid=\"onInvalid\"\n        @removerow=\"$emit('removerow', rowIndex)\"\n    >\n    </backend-inspector-control-table-cell>\n</tr>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-table-text.php",
    "content": "<input\n    type=\"text\"\n    class=\"inspector-table-control-text\"\n    v-model=\"row[column.column]\"\n    ref=\"input\"\n    v-bind:readonly=\"inspectorPreferences.readOnly\"\n    @focus=\"$emit('focus', $event)\"\n    @blur=\"$emit('blur', $event)\"\n/>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-table.php",
    "content": "<div\n    class=\"component-backend-inspector-table\"\n    data-lang-add-item=\"<?= e(trans('backend::lang.table.add_item')) ?>\"\n>\n    <table>\n        <backend-inspector-control-table-head\n            :columns=\"columns\"\n        >\n        </backend-inspector-control-table-head>\n        <tbody>\n            <backend-inspector-control-table-row\n                v-for=\"(row, index) in value\"\n                :ref=\"el => setRowRef(el, index)\"\n                :row=\"row\"\n                :key=\"index\"\n                :columns=\"columns\"\n                :row-index=\"index\"\n                :inspector-preferences=\"inspectorPreferences\"\n                :table-configuration=\"tableConfiguration\"\n                @removerow=\"onRemoveRowClick\"\n            >\n            </backend-inspector-control-table-row>\n        </tbody>\n    </table>\n\n    <div v-if=\"tableConfiguration.adding\" class=\"inspector-padding-control-left table-control-links\">\n        <a\n            href=\"#\"\n            class=\"add-item-link\"\n            :class=\"{disabled: inspectorPreferences.readOnly}\"\n            @click.stop.prevent=\"onAddItemClick\"\n            v-text=\"control.btnAddRowLabel === undefined ? lang.addItem : control.btnAddRowLabel\"\n        ></a>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_control-text.php",
    "content": "<div>\n    <input\n        v-if=\"control.type == 'string'\"\n        class=\"inspector-control\"\n        type=\"text\"\n        ref=\"input\"\n        v-bind:value=\"valueWithPreset\"\n        v-bind:id=\"controlId\"\n        v-bind:placeholder=\"control.placeholder\"\n        v-bind:readonly=\"inspectorPreferences.readOnly\"\n        @input=\"updateValue\"\n        @focus=\"$emit('focus', $event)\"\n        @blur=\"$emit('blur', $event)\"\n    />\n\n    <textarea\n        v-if=\"control.type == 'text'\"\n        class=\"component-backend-inspector-textinput inspector-control\"\n        :class=\"cssClass\"\n        ref=\"input\"\n        v-bind:value=\"valueWithPreset\"\n        v-bind:id=\"controlId\"\n        v-bind:placeholder=\"control.placeholder\"\n        v-bind:readonly=\"inspectorPreferences.readOnly\"\n        @keydown.enter.stop\n        @input=\"updateValue\"\n        @focus=\"$emit('focus', $event)\"\n        @blur=\"$emit('blur', $event)\"\n    ></textarea>\n\n    <div\n        v-if=\"control.type == 'text'\"\n        class=\"inspector-textarea-shadow inspector-control component-backend-inspector-textinput\"\n        ref=\"textareaShadow\"\n        v-text=\"valueWithPreset\"\n    ></div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_controlhost-row-controls.php",
    "content": "<backend-inspector-control-text\n    v-if=\"control.type == 'string' || control.type == 'text'\"\n    :obj=\"obj\"\n    :parent-obj=\"parentObj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :splitter-data=\"splitterData\"\n    :panel-update-data=\"panelUpdateData\"\n    :layout-update-data=\"layoutUpdateData\"\n    :inspector-preferences=\"inspectorPreferences\"\n    ref=\"editor\"\n    @focus=\"onEditorFocus\"\n    @blur=\"onEditorBlur\"\n    @invalid=\"onEditorInvalid\"\n    @valid=\"onEditorValid\"\n></backend-inspector-control-text>\n\n<backend-inspector-control-dropdown\n    v-if=\"control.type == 'dropdown'\"\n    :obj=\"obj\"\n    :parent-obj=\"parentObj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :inspector-preferences=\"inspectorPreferences\"\n    ref=\"editor\"\n    @focus=\"onEditorFocus\"\n    @blur=\"onEditorBlur\"\n    @invalid=\"onEditorInvalid\"\n    @valid=\"onEditorValid\"\n></backend-inspector-control-dropdown>\n\n<backend-inspector-control-autocomplete\n    v-if=\"control.type == 'autocomplete'\"\n    :obj=\"obj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :inspector-preferences=\"inspectorPreferences\"\n    ref=\"editor\"\n    @focus=\"onEditorFocus\"\n    @blur=\"onEditorBlur\"\n    @invalid=\"onEditorInvalid\"\n    @valid=\"onEditorValid\"\n></backend-inspector-control-autocomplete>\n\n<backend-inspector-control-checkbox\n    v-if=\"control.type == 'checkbox'\"\n    :obj=\"obj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :inspector-preferences=\"inspectorPreferences\"\n    ref=\"editor\"\n    @focus=\"onEditorFocus\"\n    @blur=\"onEditorBlur\"\n    @invalid=\"onEditorInvalid\"\n    @valid=\"onEditorValid\"\n></backend-inspector-control-checkbox>\n\n<backend-inspector-control-table\n    v-if=\"control.type == 'table'\"\n    :obj=\"obj\"\n    :parent-obj=\"parentObj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :inspector-preferences=\"inspectorPreferences\"\n    ref=\"editor\"\n    @hidebottomborder=\"bottomBorderHidden = true\"\n    @hidefullwidthlabel=\"controlLabelHidden = true\"\n></backend-inspector-control-table>\n\n<backend-inspector-control-object\n    v-if=\"control.type == 'object'\"\n    :obj=\"obj\"\n    :parent-obj=\"parentObj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :inspector-preferences=\"inspectorPreferences\"\n    :splitter-data=\"splitterData\"\n    :inspector-unique-id=\"inspectorUniqueId\"\n    :depth=\"depth\"\n    :panel-update-data=\"panelUpdateData\"\n    :layout-update-data=\"layoutUpdateData\"\n    ref=\"editor\"\n    @hidefullwidthlabel=\"controlLabelHidden = true\"\n    @hidebottomborder=\"bottomBorderHidden = true\"\n></backend-inspector-control-object>\n\n<backend-inspector-control-set\n    v-if=\"control.type == 'set'\"\n    :obj=\"obj\"\n    :parent-obj=\"parentObj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :inspector-preferences=\"inspectorPreferences\"\n    :splitter-data=\"splitterData\"\n    :inspector-unique-id=\"inspectorUniqueId\"\n    :depth=\"depth\"\n    :panel-update-data=\"panelUpdateData\"\n    :layout-update-data=\"layoutUpdateData\"\n    ref=\"editor\"\n    @hidefullwidthlabel=\"controlLabelHidden = true\"\n    @hidebottomborder=\"bottomBorderHidden = true\"\n></backend-inspector-control-set>\n\n<backend-inspector-control-objectlist\n    v-if=\"control.type == 'objectList'\"\n    :obj=\"obj\"\n    :parent-obj=\"parentObj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :inspector-preferences=\"inspectorPreferences\"\n    :splitter-data=\"splitterData\"\n    :inspector-unique-id=\"inspectorUniqueId\"\n    :depth=\"depth\"\n    :panel-update-data=\"panelUpdateData\"\n    :layout-update-data=\"layoutUpdateData\"\n    ref=\"editor\"\n    @hidefullwidthlabel=\"controlLabelHidden = true\"\n    @hidebottomborder=\"bottomBorderHidden = true\"\n></backend-inspector-control-objectlist>\n\n<backend-inspector-control-objectlist-records\n    v-if=\"control.type == 'objectListRecords'\"\n    :obj=\"obj\"\n    :parent-obj=\"parentObj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :inspector-preferences=\"inspectorPreferences\"\n    :splitter-data=\"splitterData\"\n    :inspector-unique-id=\"inspectorUniqueId\"\n    :depth=\"depth\"\n    :panel-update-data=\"panelUpdateData\"\n    :layout-update-data=\"layoutUpdateData\"\n    ref=\"editor\"\n    @hidefullwidthlabel=\"controlLabelHidden = true\"\n    @hidebottomborder=\"bottomBorderHidden = true\"\n    @inspectorcommand=\"$emit('inspectorcommand', $event)\"\n></backend-inspector-control-objectlist-records>\n\n<backend-inspector-control-dictionary\n    v-if=\"control.type == 'dictionary'\"\n    :obj=\"obj\"\n    :parent-obj=\"parentObj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :inspector-preferences=\"inspectorPreferences\"\n    :splitter-data=\"splitterData\"\n    :inspector-unique-id=\"inspectorUniqueId\"\n    :depth=\"depth\"\n    :panel-update-data=\"panelUpdateData\"\n    :layout-update-data=\"layoutUpdateData\"\n    ref=\"editor\"\n    @hidefullwidthlabel=\"controlLabelHidden = true\"\n    @hidebottomborder=\"bottomBorderHidden = true\"\n></backend-inspector-control-dictionary>\n\n<backend-inspector-control-mediafinder\n    v-if=\"control.type == 'mediafinder'\"\n    :obj=\"obj\"\n    :parent-obj=\"parentObj\"\n    :control=\"control\"\n    :control-id=\"controlEditorId\"\n    :splitter-data=\"splitterData\"\n    :panel-update-data=\"panelUpdateData\"\n    :layout-update-data=\"layoutUpdateData\"\n    :inspector-preferences=\"inspectorPreferences\"\n    ref=\"editor\"\n    @focus=\"onEditorFocus\"\n    @blur=\"onEditorBlur\"\n    @invalid=\"onEditorInvalid\"\n    @valid=\"onEditorValid\"\n></backend-inspector-control-mediafinder>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_controlhost-row.php",
    "content": "<tr class=\"inspector-control-row\" :class=\"{'has-errors': hasErrors, 'hide-bottom-border': bottomBorderHidden}\" v-show=\"rowVisible\">\n    <th v-if=\"!isFullWidth && !controlLabelHidden\" :style=\"titlePanelStyle\">\n        <div class=\"inspector-label-container\" :class=\"{'has-description': control.description}\">\n            <label\n                class=\"inspector-padding-control-left\"\n                v-text=\"control.title\"\n                v-bind:for=\"controlEditorId\"\n                :style=\"labelStyle\"\n                @click.stop=\"onLabelClick\"\n            ></label>\n            <span\n                v-if=\"control.description\"\n                class=\"property-description backend-icon-background-pseudo\"\n                v-bind:data-tooltip-text=\"control.description\"\n            ></span>\n        </div>\n    </th>\n\n    <td v-bind:colspan=\"controlColspan\">\n        <div class=\"full-width-control-label\" v-if=\"isFullWidth && (control.title || control.description) && ! controlLabelHidden\">\n            <label\n                class=\"inspector-padding-control-left\"\n                v-text=\"control.title\"\n                v-bind:for=\"controlEditorId\"\n                :style=\"labelStyle\"\n                @click.stop=\"onLabelClick\"\n            ></label>\n            <div\n                v-if=\"control.description\"\n                class=\"inspector-padding-control-left full-width-property-description\"\n                v-text=\"control.description\"\n                :style=\"labelStyle\"\n            ></div> \n        </div>\n\n        <div :class=\"{'inspector-control-container': !isFullWidth, 'no-property-title': !control.title && !control.description}\">\n            <div v-if=\"!isFullWidth\" class=\"inspector-drag-handle\"></div>\n\n            <?= $this->makePartial('controlhost-row-controls') ?>\n        </div>\n    </td>\n</tr>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_controlhost.php",
    "content": "<table class=\"component-backend-inspector-controlhost\" @mousedown.stop=\"onHandleMouseDown\">\n    <tbody>\n        <backend-inspector-controlhost-row\n            v-for=\"control in controls\"\n            :obj=\"obj\"\n            :parent-obj=\"parentObj\"\n            :key=\"control.property\"\n            :control-host-unique-id=\"uniqueId\"\n            :control=\"control\"\n            :splitter-data=\"splitterData\"\n            :depth=\"depth\"\n            :panel-update-data=\"panelUpdateData\"\n            :layout-update-data=\"layoutUpdateData\"\n            :inspector-preferences=\"inspectorPreferences\"\n            :inspector-unique-id=\"inspectorUniqueId\"\n            :is-full-width=\"isFullWidthControl(control)\"\n            @inspectorcommand=\"$emit('inspectorcommand', $event)\"\n        >\n        </backend-inspector-controlhost-row>\n    </tbody>\n</table>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_group.php",
    "content": "<div class=\"component-backend-inspector-group\">\n    <div\n        class=\"group-name inspector-padding-control-left inspector-padding-control-right\"\n        :class=\"{expanded: expanded, collapsed: !expanded, loading: loading, 'has-errors': hasErrors, 'hide-bottom-border-collapsed': hideBottomBorder}\"\n        @click.stop=\"onToggleGroup\"\n    >\n        <div :style=\"nameStyle\">\n            <span\n                v-text=\"nameAndValue\"\n                class=\"backend-icon-background-pseudo\"\n            ></span>\n\n            <backend-loading-indicator v-if=\"loading\"\n                size=\"tiny\"\n            ></backend-loading-indicator>\n        </div>\n    </div>\n    <transition name=\"group-fade-in\">\n        <backend-inspector-controlhost\n            v-show=\"expanded\"\n            :controls=\"controls\"\n            :obj=\"obj\"\n            :parent-obj=\"parentObj\"\n            :splitter-data=\"splitterData\"\n            :depth=\"depth + 1\"\n            :panel-update-data=\"panelUpdateData\"\n            :inspector-preferences=\"inspectorPreferences\"\n            :inspector-unique-id=\"inspectorUniqueId\"\n            @inspectorcommand=\"$emit('inspectorcommand', $event)\"\n        >\n        </backend-inspector-controlhost>\n    </transition>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_grouphost.php",
    "content": "<div class=\"component-backend-inspector-grouphost\">\n    <backend-inspector-controlhost\n        :controls=\"groupedControls.ungrouped\"\n        :obj=\"obj\"\n        :parent-obj=\"parentObj\"\n        :splitter-data=\"splitterData\"\n        :depth=\"depth\"\n        :panel-update-data=\"panelUpdateData\"\n        :layout-update-data=\"layoutUpdateData\"\n        :inspector-unique-id=\"inspectorUniqueId\"\n        :inspector-preferences=\"inspectorPreferences\"\n    >\n    </backend-inspector-controlhost>\n\n    <template v-for=\"(controls, groupName) in groupedControls\" :key=\"groupName\">\n        <backend-inspector-group\n            v-if=\"groupName != 'ungrouped'\"\n            :group-name=\"groupName\"\n            :obj=\"obj\"\n            :parent-obj=\"parentObj\"\n            :controls=\"controls\"\n            :splitter-data=\"splitterData\"\n            :depth=\"depth\"\n            :panel-update-data=\"panelUpdateData\"\n            :layout-update-data=\"layoutUpdateData\"\n            :inspector-unique-id=\"inspectorUniqueId\"\n            :inspector-preferences=\"inspectorPreferences\"\n        >\n        </backend-inspector-group>\n    </template>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_host-modal.php",
    "content": "<div\n    data-default-button-text=\"<?= e(trans('backend::lang.form.ok')) ?>\"\n>\n    <backend-modal\n        ref=\"modal\"\n        :aria-labeled-by=\"modalTitleId\"\n        :unique-key=\"uniqueId\"\n        :size=\"size\"\n        :store-position=\"true\"\n        :resizable=\"resizableWidth ? 'horizontal' : false\"\n        :resize-default-width=\"600\"\n        :close-by-esc=\"!readOnly\"\n        :modal-temporary-hidden=\"layoutUpdateData.modalTemporaryHidden\"\n        @hidden=\"onHidden\"\n        @resized=\"onResized\"\n        @shown=\"onShown\"\n        @enterkey=\"onEnterKey\"\n    >\n        <template v-slot:content>\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" v-bind:id=\"modalTitleId\" v-text=\"title\"></h4>\n                <button\n                    @click.prevent=\"onCloseClick\"\n                    type=\"button\"\n                    class=\"btn-close\"\n                    v-bind:disabled=\"readOnly\"\n                    aria-label=\"<?= e(trans('backend::lang.form.close')) ?>\"\n                    tabindex=\"0\"\n                    ></button>\n            </div>\n            <div class=\"modal-body inspector-modal-host\">\n                <backend-inspector\n                    :data-schema=\"dataSchema\"\n                    :data=\"data\"\n                    :live-mode=\"liveMode\"\n                    :unique-id=\"uniqueId\"\n                    :handler-alias=\"handlerAlias\"\n                    :layout-update-data=\"layoutUpdateData\"\n                    :read-only=\"readOnly\"\n                    ref=\"inspector\"\n                >\n                </backend-inspector>\n            </div>\n            <div class=\"modal-footer\">\n                <button\n                    type=\"button\"\n                    class=\"btn btn-primary btn-default-action\"\n                    data-default-focus\n                    @click=\"onApplyClick\"\n                    v-text=\"primaryButtonText\"\n                    v-bind:disabled=\"readOnly\"\n                ></button>\n                <span class=\"button-separator\"><?= e(trans('backend::lang.form.or')) ?></span>\n                <button\n                    class=\"btn btn-link text-muted\"\n                    :class=\"{disabled: readOnly}\"\n                    @click.prevent=\"onCancelClick\"\n                ><?= e(trans('backend::lang.form.cancel')) ?></button>\n            </div>\n        </template>\n    </backend-modal>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_inspector.php",
    "content": "<backend-inspector-panel\n    ref=\"panel\"\n    :controls=\"dataSchema\"\n    :obj=\"liveObject\"\n    :parent-obj=\"parentObject\"\n    :inspector-unique-id=\"uniqueId\"\n    :layout-update-data=\"layoutUpdateData\"\n    :inspector-preferences=\"inspectorPreferences\"\n>\n</backend-inspector-panel>"
  },
  {
    "path": "modules/backend/vuecomponents/inspector/partials/_panel.php",
    "content": "<div\n    class=\"component-backend-inspector-panel\"\n    data-validation-alert-title=\"<?= e(trans('backend::lang.form.error')) ?>\"\n>\n    <backend-inspector-grouphost\n        :controls=\"untabbedControls\"\n        :obj=\"obj\"\n        :parent-obj=\"parentObj\"\n        :splitter-data=\"splitterData\"\n        :inspector-unique-id=\"inspectorUniqueId\"\n        :depth=\"0\"\n        :panel-update-data=\"panelUpdateData\"\n        :layout-update-data=\"layoutUpdateData\"\n        :inspector-preferences=\"inspectorPreferences\"\n    ></backend-inspector-grouphost>\n\n    <backend-tabs\n        v-show=\"tabs.length > 0\"\n        ref=\"tabs\"\n        :tabs=\"tabs\"\n        :closeable=\"false\"\n        :use-slots=\"true\"\n        tabs-style=\"inspector\"\n        @tabselected=\"onTabSelected\"\n    >\n        <template v-for=\"tabInfo in tabs\" v-slot:[tabInfo.key]>\n            <backend-inspector-grouphost\n                :controls=\"tabbedControls[tabInfo.key]\"\n                :obj=\"obj\"\n                :parent-obj=\"parentObj\"\n                :splitter-data=\"splitterData\"\n                :inspector-unique-id=\"inspectorUniqueId\"\n                :depth=\"0\"\n                :panel-update-data=\"panelUpdateData\"\n                :layout-update-data=\"layoutUpdateData\"\n                :inspector-preferences=\"inspectorPreferences\"\n            ></backend-inspector-grouphost>\n        </template>\n    </backend-tabs>\n</div>\n"
  },
  {
    "path": "modules/backend/vuecomponents/loadingindicator/assets/css/_bar.css",
    "content": "div.component-backend-loading-indicator {\n    .bar-indicator {\n        overflow: hidden;\n        height: 6px;\n        border-radius: 6px;\n        background: var(--oc-primary-border);\n\n        .stripe-indicator {\n            height: 6px;\n\n            > div {\n                transition: width 0.3s, height 0.3s;\n\n                &:before {\n                    position: absolute;\n                    content: '';\n                    top: 0;\n                    left: 0;\n                    bottom: 0;\n                    right: 0;\n                    z-index: 2;\n                    background: var(--bs-success);\n                    opacity: 0;\n                    transition: opacity 0.3s;\n                }\n\n                &.progress-done:before {\n                    opacity: 1;\n                }\n            }\n        }\n    }\n\n    &.orientation-vertical {\n        .bar-indicator {\n            width: 6px;\n            height: 100%;\n            position: absolute;\n\n            .stripe-indicator {\n                width: 6px;\n                height: 100%;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/loadingindicator/assets/css/_circles.css",
    "content": "div.component-backend-loading-indicator {\n    &.style-circles {\n        .spinner {\n            margin: 0 auto;\n            width: 70px;\n            text-align: center;\n\n            > div {\n                width: 18px;\n                height: 18px;\n                background-color: var(--bs-secondary);\n\n                border-radius: 100%;\n                display: inline-block;\n                animation: bouncedelay-component-loadingindicator 1.4s infinite ease-in-out both;\n\n                &.bounce1 {\n                    animation-delay: -0.32s;\n                }\n\n                &.bounce2 {\n                    animation-delay: -0.16s;\n                }\n            }\n        }\n\n        &.size-small {\n            width: 50px;\n\n            .spinner {\n                width: 50px;\n\n                > div {\n                    width: 10px;\n                    height: 10px;\n                    margin-right: 5px;\n\n                    &:last-child {\n                        margin-right: 0;\n                    }\n                }\n            }\n        }\n\n        &.size-tiny {\n            width: 39px;\n\n            .spinner {\n                width: 39px;\n\n                > div {\n                    width: 7px;\n                    height: 7px;\n                    margin-right: 4px;\n\n                    &:last-child {\n                        margin-right: 0;\n                    }\n                }\n            }\n        }\n    }\n}\n\n@keyframes bouncedelay-component-loadingindicator {\n    0%, 80%, 100% {\n        transform: scale(0);\n    }\n    40% {\n        transform: scale(1.0);\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/loadingindicator/assets/css/_stripe.css",
    "content": "div.component-backend-loading-indicator {\n    &.style-stripe,\n    &.style-bar {\n        width: 100%;\n\n        .stripe-indicator {\n            position: relative;\n            height: 4px;\n\n            div {\n                height: 100%;\n                position: relative;\n                overflow: hidden;\n                background-color: var(--bs-primary);\n\n                &:after {\n                    content: '';\n                    position: absolute;\n                    top: 0;\n                    left: 0;\n                    bottom: 0;\n                    right: 0;\n                    z-index: 1;\n                    overflow: hidden;\n                    background-image: linear-gradient(\n                        -45deg,\n                        rgba(255, 255, 255, .3) 25%,\n                        transparent 25%,\n                        transparent 50%,\n                        rgba(255, 255, 255, .3) 50%,\n                        rgba(255, 255, 255, .3) 75%,\n                        transparent 75%,\n                        transparent\n                    );\n                    background-size: 50px 50px;\n                    animation: moveStripes 2s linear infinite;\n                }\n            }\n        }\n    }\n\n    &.orientation-vertical {\n        &.style-bar,\n        &.style-stripe {\n            .stripe-indicator {\n                height: 100%;\n                width: 4px;\n\n                > div {\n                    position: absolute;\n                    left: 0;\n                    bottom: 0;\n                    width: 100%;\n\n                    &:after {\n                        transform: rotateX(180deg);\n                    }\n                }\n            }\n        }\n    }\n}\n\n@keyframes moveStripes {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 50px 50px;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/loadingindicator/assets/css/loadingindicator.css",
    "content": "@import \"_circles.css\";\n@import \"_stripe.css\";\n@import \"_bar.css\";\n"
  },
  {
    "path": "modules/backend/vuecomponents/loadingindicator/assets/js/loadingindicator.js",
    "content": "/*\n * Vue loading indicator implementation.\n */\nexport default {\n    props: {\n        indicatorStyle: {\n            type: String,\n            default: 'circles',\n            validator: function (value) {\n                return ['circles', 'stripe', 'bar'].indexOf(value) !== -1;\n            }\n        },\n        size: {\n            type: String,\n            default: 'small',\n            validator: function (value) {\n                return ['small', 'large', 'tiny'].indexOf(value) !== -1;\n            }\n        },\n        progress: {\n            type: Number,\n            default: 0,\n            validator: function (value) {\n                return value >= 0 && value <= 100;\n            }\n        },\n        orientation: {\n            type: String,\n            default: 'horizontal',\n            validator: function (value) {\n                return ['horizontal', 'vertical'].indexOf(value) !== -1;\n            }\n        },\n        cssClass: {\n            type: String,\n            default: ''\n        }\n    },\n    computed: {\n        className: function computeClassName() {\n            return (\n                'size-' +\n                this.size +\n                ' ' +\n                this.cssClass +\n                ' style-' +\n                this.indicatorStyle +\n                ' orientation-' +\n                this.orientation\n            );\n        },\n\n        barIndicatorStyle: function computeBarIndicatorStyle() {\n            if (this.orientation === 'horizontal') {\n                return {\n                    width: this.progress + '%'\n                };\n            }\n\n            return {\n                height: this.progress + '%'\n            };\n        }\n    },\n    methods: {},\n    mounted: function mounted() { },\n    beforeUnmount: function beforeUnmount() { }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/loadingindicator/partials/_loadingindicator.php",
    "content": "<div class=\"component-backend-loading-indicator\" :class=\"className\">\n    <div class=\"spinner\" v-if=\"indicatorStyle == 'circles'\">\n        <div class=\"bounce1\"></div>\n        <div class=\"bounce2\"></div>\n        <div class=\"bounce3\"></div>\n    </div>\n\n    <div v-if=\"indicatorStyle == 'stripe'\">\n        <div class=\"stripe-indicator\">\n            <div></div>\n        </div>\n    </div>\n\n    <div v-if=\"indicatorStyle == 'bar'\" class=\"bar-indicator\">\n        <div class=\"stripe-indicator\">\n            <div :style=\"barIndicatorStyle\" :class=\"{'progress-done': this.progress == 100}\"></div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/css/_resizing.css",
    "content": "@media (min-width: 768px) {\n    .modal.component-backend-modal {\n        .modal-content {\n            .resize-handle {\n                position: absolute;\n\n                &[data-side=bt], &[data-side=tp] {\n                    height: 3px;\n                    width: 100%;\n                    cursor: ns-resize;\n                    left: 0;\n                }\n\n                &[data-side=lf], &[data-side=rt] {\n                    top: 0;\n                    height: 100%;\n                    width: 3px;\n                    cursor: ew-resize;\n                }\n\n                &[data-side=bt-rt], &[data-side=bt-lf],\n                &[data-side=tp-rt], &[data-side=tp-lf] {\n                    width: 6px;\n                    height: 6px;\n                }\n\n                &[data-side=bt-rt] {\n                    bottom: 0;\n                    right: 0;\n                    cursor: nwse-resize;\n                }\n\n                &[data-side=bt-lf] {\n                    bottom: 0;\n                    left: 0;\n                    cursor: nesw-resize;\n                }\n\n                &[data-side=tp-rt] {\n                    top: 0;\n                    right: 0;\n                    cursor: nesw-resize;\n                }\n\n                &[data-side=tp-lf] {\n                    top: 0;\n                    left: 0;\n                    cursor: nwse-resize;\n                }\n\n                &[data-side=bt] {\n                    bottom: 0;\n                }\n\n                &[data-side=tp] {\n                    top: 0;\n                }\n\n                &[data-side=lf] {\n                    left: 0;\n                }\n\n                &[data-side=rt] {\n                    right: 0;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/css/modal.css",
    "content": "@import \"_resizing.css\";\n\n.modal.component-backend-modal {\n    &.fade {\n        &:not(.show) {\n            pointer-events: none;\n        }\n\n        .modal-dialog {\n            opacity: 0;\n            transition: all 0.15s, width 0s;\n            transform: scale(0.95);\n        }\n    }\n\n    &.fade.show {\n        .modal-dialog {\n            opacity: 1;\n            transform: scale(1);\n        }\n    }\n}\n\n.modal.component-backend-modal {\n    display: block;\n\n    &.non-modal {\n        overflow: visible;\n        overflow-y: visible;\n        right: auto;\n        bottom: auto;\n        left: 0;\n        top: 0;\n        width: 0;\n        height: 0;\n\n        .modal-dialog {\n            width: auto;\n            margin: 0;\n        }\n    }\n\n    &.temporary-hidden {\n        display: none;\n    }\n\n    .modal-content {\n        border: var(--oc-popup-border);\n        border-radius: 8px;\n        box-shadow: 0 0 32px rgba(67, 86, 100, 0.2);\n        background-color: var(--oc-popup-bg);\n        overflow: visible;\n        word-break: break-word;\n\n        .modal-header {\n            border-bottom: var(--oc-popup-border);\n            padding: 15px 20px;\n\n            .close {\n                width: 19px;\n                height: 19px;\n                border-radius: 20px;\n                position: relative;\n                top: 5px;\n                opacity: 1;\n                font-size: 0;\n                color: transparent;\n\n                &:after {\n                    display: none!important;\n                }\n\n                &[disabled] {\n                    opacity: 0.5;\n                    cursor: default;\n                }\n\n                &:focus {\n                    outline: none;\n                    background-color: var(--oc-toolbar-hover-bg);\n                }\n\n                &:before {\n                    display: block;\n                    width: 11px;\n                    height: 11px;\n                    position: absolute;\n                    background-position: -253px 0;\n                    top: 4px;\n                    right: 4px;\n                }\n\n                &:not([disabled]):focus,\n                &:not([disabled]):hover {\n                    &:before {\n                        background-position: -268px 0;\n                    }\n                }\n            }\n\n            h4 + p {\n                margin-top: 10px;\n                margin-bottom: 0;\n            }\n        }\n\n        &.draggable .modal-header {\n            user-select: none;\n        }\n\n        &.animate-position {\n            transition: left .2s, top .2s;\n        }\n\n        .modal-body {\n            padding-top: 15px;\n        }\n\n        .modal-footer {\n            text-align: left;\n        }\n    }\n}\n\n@media (max-width: 768px) {\n    .modal.component-backend-modal:not(.non-modal) .modal-content {\n        width: auto !important;\n        height: auto !important;\n        left: 0 !important;\n        top: 0 !important;\n    }\n}\n\n@media (min-width: 415px) {\n    .modal.component-backend-modal .modal-content {\n        &.show-modal-frame {\n            animation: modal-showframe 0.4s;\n        }\n    }\n\n    @keyframes modal-showframe {\n        0%,\n        50% {\n            box-shadow: 0 0 32px rgba(67, 86, 100, 0.2), 0 0 0 3px #6a6cf7;\n        }\n\n        25%,\n        75% {\n            box-shadow: 0 0 32px rgba(67, 86, 100, 0.2);\n        }\n    }\n}\n\n@media (max-width: 414px) {\n    .modal.component-backend-modal:not(.non-modal) {\n        .modal-dialog {\n            margin: 0;\n\n            .modal-content {\n                border: none;\n                top: 0 !important;\n                left: 0 !important;\n                box-shadow: 0 16px 32px rgba(67, 86, 100, 0.2);\n\n                border-bottom-left-radius: 8px;\n                border-bottom-right-radius: 8px;\n                border-top-left-radius: 0;\n                border-top-right-radius: 0;\n            }\n        }\n    }\n}\n\nbody.modal-dragging {\n    * {\n        user-select: none;\n    }\n}\n\nbody.modal-dragging {\n    * {\n        cursor: move !important;\n    }\n\n    &.modal-dragging-ns * {\n        cursor: ns-resize !important;\n    }\n\n    &.modal-dragging-ew * {\n        cursor: ew-resize !important;\n    }\n\n    &.modal-dragging-nesw * {\n        cursor: nesw-resize !important;\n    }\n\n    &.modal-dragging-nwse * {\n        cursor: nwse-resize !important;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/js/alert.js",
    "content": "/*\n * Vue modal alert implementation\n */\nexport default {\n    props: {\n        title: {\n            type: String,\n            required: true\n        },\n        text: {\n            type: String,\n            required: true\n        },\n        buttonText: {\n            type: String,\n            required: false\n        },\n        size: {\n            type: String,\n            default: 'normal',\n            validator: function (value) {\n                return ['small', 'normal', 'large'].indexOf(value) !== -1;\n            }\n        }\n    },\n    data: function () {\n        return {\n            uniqueKey: $.oc.domIdManager.generate('modal-alert'),\n            modalTitleId: $.oc.domIdManager.generate('modal-alert-title'),\n            primaryButtonText: \"\"\n        };\n    },\n    computed: {\n    },\n    methods: {\n        onHidden: function onHidden() {\n            this.$emit('close');\n        }\n    },\n    mounted: function onMounted() {\n        if (this.buttonText) {\n            this.primaryButtonText = this.buttonText;\n        }\n        else {\n            this.primaryButtonText = $(this.$el).attr('data-default-button-text');\n        }\n\n        this.$refs.modal.show();\n    },\n    beforeUnmount: function beforeUnmount() {\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/js/basic.js",
    "content": "/*\n * Vue basic modal implementation\n */\nimport alert from './alert.js';\n\nexport default {\n    extends: alert,\n    methods: {\n        onCloseClick: function onCloseClick() {\n            this.$refs.modal.hide();\n        },\n        onClick: function onClick(ev) {\n            if (!ev.target.dataset.closePopup) {\n                return;\n            }\n\n            this.$emit('closeclick', ev.target.dataset.closePopup);\n            this.$refs.modal.hide();\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/js/classes/index.js",
    "content": "import modalPosition, { ModalPosition } from './position.js';\nimport modalSize, { ModalSize } from './size.js';\nimport modalUtils, { ModalUtils } from './utils.js';\n\n// Register globals for backwards compatibility with non-ESM scripts\nif (oc.vueComponentHelpers === undefined) {\n    oc.vueComponentHelpers = {};\n}\n\noc.vueComponentHelpers.modalPosition = modalPosition;\noc.vueComponentHelpers.modalSize = modalSize;\noc.vueComponentHelpers.modalUtils = modalUtils;\n\nexport {\n    modalPosition,\n    ModalPosition,\n    modalSize,\n    ModalSize,\n    modalUtils,\n    ModalUtils\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/js/classes/position.js",
    "content": "/*\n * Modal position helper\n */\nexport class ModalPosition {\n    #lastPoint = { x: 0, y: 0 };\n    #$content = null;\n    #offset = {};\n    #mouseUpCallback = null;\n\n    #clear() {\n        this.#$content = null;\n        this.#offset = {};\n        this.#mouseUpCallback = null;\n    }\n\n    #onMouseUp = (ev) => {\n        document.removeEventListener('mousemove', this.#onMouseMove, { passive: true });\n        document.removeEventListener('mouseup', this.#onMouseUp);\n\n        $(document.body).removeClass('modal-dragging');\n\n        this.fixPosition(this.#$content, true, this.#offset);\n\n        this.#mouseUpCallback();\n\n        this.#clear();\n    };\n\n    #onMouseMove = (ev) => {\n        if (ev.buttons != 1) {\n            // Handle the case when the button was released\n            // outside of the viewport. mouseup doesn't fire\n            // in that case.\n            //\n            this.#onMouseUp();\n        }\n\n        var deltaX = ev.pageX - this.#lastPoint.x,\n            deltaY = ev.pageY - this.#lastPoint.y;\n\n        this.#lastPoint.x = ev.pageX;\n        this.#lastPoint.y = ev.pageY;\n\n        this.#offset.left += deltaX;\n        this.#offset.top += deltaY;\n    };\n\n    fixPosition($contentElement, animate, offsetObj) {\n        var contentOffset = $contentElement.offset();\n\n        contentOffset.top -= window.scrollY;\n\n        var contentWidth = $contentElement.width(),\n            contentHeight = $contentElement.height(),\n            contentRight = contentOffset.left + contentWidth,\n            contentBottom = contentOffset.top + contentHeight,\n            documentWidth = $(document).width(),\n            documentHeight = $(document).height();\n\n        if (\n            animate &&\n            (contentOffset.left < 10 ||\n                contentOffset.top < 10 ||\n                contentRight > documentWidth - 10 ||\n                contentBottom > documentHeight - 10)\n        ) {\n            $contentElement.addClass('animate-position');\n        }\n\n        if (contentOffset.left < 10) {\n            offsetObj.left -= contentOffset.left - 10;\n        }\n\n        if (contentOffset.top < 10) {\n            offsetObj.top -= contentOffset.top - 10;\n        }\n\n        if (contentRight > documentWidth - 10) {\n            offsetObj.left -= contentRight - documentWidth + 10;\n        }\n\n        if (contentBottom > documentHeight - 10) {\n            var delta = contentBottom - documentHeight + 10;\n            offsetObj.top -= delta;\n\n            contentOffset.top -= delta;\n            if (contentOffset.top < 10) {\n                offsetObj.top -= contentOffset.top - 10;\n            }\n        }\n    }\n\n    getInitialOffset(isModal) {\n        var count = $.oc.modalFocusManager.getNumberOfType('modal');\n\n        if (isModal) {\n            return count * 20;\n        }\n\n        return 150 + count * 20;\n    }\n\n    applyConstraint(value, min, max) {\n        value = Math.max(value, min);\n        value = Math.min(value, max);\n\n        return value;\n    }\n\n    onMouseDown(ev, content, offsetObj, mouseUp) {\n        if (ev.target.tagName === 'BUTTON' || ev.target.tagName === 'A') {\n            return;\n        }\n\n        this.#$content = $(content);\n        this.#offset = offsetObj;\n        this.#mouseUpCallback = mouseUp;\n\n        $(document.body).addClass('modal-dragging');\n        document.addEventListener('mousemove', this.#onMouseMove, { passive: true });\n        document.addEventListener('mouseup', this.#onMouseUp);\n\n        this.#lastPoint.x = ev.pageX;\n        this.#lastPoint.y = ev.pageY;\n\n        ev.preventDefault();\n        ev.stopPropagation();\n    }\n\n    onMouseUp() {\n        this.#onMouseUp();\n    }\n}\n\nexport const modalPosition = new ModalPosition();\nexport default modalPosition;\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/js/classes/size.js",
    "content": "import modalPosition from './position.js';\n\n/*\n * Modal size helper\n */\nexport class ModalSize {\n    #lastPoint = { x: 0, y: 0 };\n    #$content = null;\n    #size = {};\n    #offset = {};\n    #mouseUpCallback = null;\n    #side = null;\n    #resizeMinWidth = 0;\n    #resizeMinHeight = 0;\n\n    #clear() {\n        this.#$content = null;\n        this.#size = {};\n        this.#offset = {};\n        this.#mouseUpCallback = null;\n    }\n\n    #initSizeObj() {\n        if (!this.#size.width) {\n            this.#size.width = this.#$content.outerWidth();\n            this.#size.height = this.#$content.outerHeight();\n        }\n    }\n\n    #getDragClassName() {\n        if (this.#side == 'bt' || this.#side == 'tp') {\n            return 'modal-dragging-ns';\n        }\n\n        if (this.#side == 'lf' || this.#side == 'rt') {\n            return 'modal-dragging-ew';\n        }\n\n        if (this.#side == 'bt-lf' || this.#side == 'tp-rt') {\n            return 'modal-dragging-nesw';\n        }\n\n        if (this.#side == 'tp-lf' || this.#side == 'bt-rt') {\n            return 'modal-dragging-nwse';\n        }\n    }\n\n    #onMouseUp = (ev) => {\n        document.removeEventListener('mousemove', this.#onMouseMove, { passive: true });\n        document.removeEventListener('mouseup', this.#onMouseUp);\n        $(document.body).removeClass('modal-dragging ' + this.#getDragClassName());\n\n        modalPosition.fixPosition(this.#$content, true, this.#offset);\n\n        Vue.nextTick(this.#mouseUpCallback);\n\n        this.#clear();\n    };\n\n    #updateLf(deltaX) {\n        var sizeDelta = this.#size.width - Math.max(this.#resizeMinWidth, this.#size.width - deltaX);\n        if (sizeDelta != 0) {\n            this.#offset.left += sizeDelta;\n            this.#size.width -= sizeDelta;\n        }\n    }\n\n    #updateTp(deltaY) {\n        var sizeDelta = this.#size.height - Math.max(this.#resizeMinHeight, this.#size.height - deltaY);\n        if (sizeDelta != 0) {\n            this.#offset.top += sizeDelta;\n            this.#size.height -= sizeDelta;\n        }\n    }\n\n    #onMouseMove = (ev) => {\n        if (ev.buttons != 1) {\n            // Handle the case when the button was released\n            // outside of the viewport. mouseup doesn't fire\n            // in that case.\n            //\n            this.#onMouseUp();\n        }\n\n        this.#initSizeObj();\n\n        var deltaX = ev.pageX - this.#lastPoint.x,\n            deltaY = ev.pageY - this.#lastPoint.y,\n            prevHeight = this.#size.height,\n            prevWidth = this.#size.width;\n\n        switch (this.#side) {\n            case 'bt':\n                this.#size.height += deltaY;\n                break;\n            case 'rt':\n                this.#size.width += deltaX;\n                break;\n            case 'bt-rt':\n                this.#size.height += deltaY;\n                this.#size.width += deltaX;\n                break;\n            case 'tp-lf':\n                this.#updateTp(deltaY);\n                this.#updateLf(deltaX);\n                break;\n            case 'bt-lf':\n                this.#size.height += deltaY;\n                this.#updateLf(deltaX);\n                break;\n            case 'tp-rt':\n                this.#size.width += deltaX;\n                this.#updateTp(deltaY);\n                break;\n            case 'tp':\n                this.#updateTp(deltaY);\n                break;\n            case 'lf':\n                this.#updateLf(deltaX);\n                break;\n        }\n\n        this.#size.height = Math.max(this.#resizeMinHeight, this.#size.height);\n        this.#size.width = Math.max(this.#resizeMinWidth, this.#size.width);\n\n        if (prevHeight != this.#size.height) {\n            this.#lastPoint.y = ev.pageY;\n        }\n\n        if (prevWidth != this.#size.width) {\n            this.#lastPoint.x = ev.pageX;\n        }\n    };\n\n    onMouseDown(ev, contentObj, sizeObj, offsetObj, mouseUp, minWidth, minHeight) {\n        this.#side = ev.target.getAttribute('data-side');\n        this.#$content = $(contentObj);\n        this.#size = sizeObj;\n        this.#offset = offsetObj;\n        this.#mouseUpCallback = mouseUp;\n\n        this.#resizeMinWidth = minWidth;\n        this.#resizeMinHeight = minHeight;\n\n        $(document.body).addClass('modal-dragging ' + this.#getDragClassName());\n        document.addEventListener('mousemove', this.#onMouseMove, { passive: true });\n        document.addEventListener('mouseup', this.#onMouseUp);\n\n        this.#lastPoint.x = ev.pageX;\n        this.#lastPoint.y = ev.pageY;\n\n        ev.preventDefault();\n        ev.stopPropagation();\n    }\n\n    onMouseUp() {\n        this.#onMouseUp();\n    }\n}\n\nexport const modalSize = new ModalSize();\nexport default modalSize;\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/js/classes/utils.js",
    "content": "/*\n * Modal utilities helper\n */\nexport class ModalUtils {\n    #validateAlertOptions(options) {\n        if (options) {\n            if (typeof options !== 'object') {\n                throw new Error('options must be an object');\n            }\n\n            if (options.buttonText && typeof options.buttonText !== 'string') {\n                throw new Error('options.buttonText must be a string');\n            }\n\n            if (options.size && typeof options.size !== 'string') {\n                throw new Error('options.size must be a string');\n            }\n        }\n\n        return options || {};\n    }\n\n    #validateBasicArguments(title, text) {\n        if (typeof title !== 'string' || !title.length) {\n            throw new Error('Modal title is required');\n        }\n\n        if (typeof text !== 'string' || !text.length) {\n            throw new Error('Modal text is required');\n        }\n    }\n\n    showAlert(title, text, options) {\n        options = this.#validateAlertOptions(options);\n        this.#validateBasicArguments(title, text);\n\n        return new Promise((resolve, reject) => {\n            // Create container element for Vue app\n            const wrapperEl = document.createElement('div');\n            document.body.appendChild(wrapperEl);\n\n            // Create Vue 3 app\n            const app = oc.createVueApp({\n                data() {\n                    return {\n                        title: title,\n                        text: text,\n                        buttonText: options.buttonText,\n                        size: options.size || 'normal'\n                    };\n                },\n                template: '<backend-modal-alert :title=\"title\" :text=\"text\" :button-text=\"buttonText\" :size=\"size\" @close=\"onClose\" />',\n                methods: {\n                    onClose() {\n                        app.unmount();\n                        document.body.removeChild(wrapperEl);\n                        resolve();\n                    }\n                }\n            });\n\n            app.mount(wrapperEl);\n        });\n    }\n\n    showBasic(title, content) {\n        this.#validateBasicArguments(title, content);\n\n        return new Promise((resolve, reject) => {\n            // Create container element for Vue app\n            const wrapperEl = document.createElement('div');\n            document.body.appendChild(wrapperEl);\n\n            let buttonClicked = false;\n\n            // Create Vue 3 app\n            const app = oc.createVueApp({\n                data() {\n                    return {\n                        title: title,\n                        text: content,\n                        buttonText: \"\"\n                    };\n                },\n                template: '<backend-modal-basic :title=\"title\" :text=\"text\" :button-text=\"buttonText\" @close=\"onClose\" @closeclick=\"onCloseClick\" />',\n                methods: {\n                    onClose() {\n                        app.unmount();\n                        document.body.removeChild(wrapperEl);\n\n                        if (!buttonClicked) {\n                            reject(false);\n                        }\n                    },\n                    onCloseClick(button) {\n                        buttonClicked = true;\n                        resolve(button);\n                    }\n                }\n            });\n\n            app.mount(wrapperEl);\n        });\n    }\n\n    showConfirm(title, text, options) {\n        options = this.#validateAlertOptions(options);\n        this.#validateBasicArguments(title, text);\n\n        if (options.isDanger !== undefined && typeof options.isDanger !== 'boolean') {\n            throw new Error('showConfirm options.isDanger must be Boolean');\n        }\n\n        return new Promise((resolve, reject) => {\n            // Create container element for Vue app\n            const wrapperEl = document.createElement('div');\n            document.body.appendChild(wrapperEl);\n\n            let buttonClicked = false;\n\n            // Create Vue 3 app\n            const app = oc.createVueApp({\n                data() {\n                    return {\n                        title: title,\n                        text: text,\n                        isDanger: options.isDanger,\n                        buttonText: options.buttonText,\n                        size: options.size || 'normal'\n                    };\n                },\n                template: '<backend-modal-confirm :title=\"title\" :text=\"text\" :is-danger=\"isDanger\" :button-text=\"buttonText\" :size=\"size\" @close=\"onClose\" @buttonclick=\"onButtonClick\" />',\n                methods: {\n                    onClose() {\n                        app.unmount();\n                        document.body.removeChild(wrapperEl);\n\n                        if (!buttonClicked) {\n                            reject(false);\n                        }\n                    },\n                    onButtonClick() {\n                        buttonClicked = true;\n                        resolve();\n                    }\n                }\n            });\n\n            app.mount(wrapperEl);\n        });\n    }\n}\n\nexport const modalUtils = new ModalUtils();\nexport default modalUtils;\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/js/confirm.js",
    "content": "/*\n * Vue modal confirmation implementation\n */\nimport alert from './alert.js';\n\nexport default {\n    extends: alert,\n    props: {\n        isDanger: {\n            type: Boolean,\n            default: false\n        }\n    },\n    methods: {\n        onButtonClick: function onButtonClick() {\n            this.$emit('buttonclick');\n            this.$refs.modal.hide();\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/assets/js/modal.js",
    "content": "import { modalPosition, modalSize } from './classes/index.js';\n\n/*\n * Vue modal implementation\n */\nexport default {\n    props: {\n        ariaLabeledBy: {\n            type: String,\n            required: true\n        },\n        closeByEsc: {\n            type: Boolean,\n            default: true\n        },\n        modalCssClass: {\n            type: String,\n            default: ''\n        },\n        closeByOverlayClick: {\n            type: Boolean,\n            default: false\n        },\n        draggable: {\n            type: Boolean,\n            default: true\n        },\n        resizable: {\n            type: [String, Boolean],\n            default: false,\n            validator: function (value) {\n                if (value === undefined) {\n                    return;\n                }\n\n                if (typeof value === 'string') {\n                    return ['horizontal', 'vertical'].indexOf(value) !== -1;\n                }\n\n                return typeof value === 'boolean';\n            }\n        },\n        uniqueKey: {\n            type: String,\n            required: true\n        },\n        size: {\n            type: String,\n            default: 'normal',\n            validator: function (value) {\n                return ['small', 'normal', 'large'].indexOf(value) !== -1;\n            }\n        },\n        storePosition: {\n            type: Boolean,\n            default: true\n        },\n        resizeMinWidth: {\n            type: Number,\n            default: 300\n        },\n        resizeDefaultWidth: {\n            type: Number,\n            default: 300\n        },\n        resizeMinHeight: {\n            type: Number,\n            default: 200\n        },\n        resizeDefaultHeight: {\n            type: Number,\n            default: 200\n        },\n        isModal: {\n            type: Boolean,\n            default: true\n        },\n        baseZIndex: {\n            type: Number,\n            default: 600\n        },\n        modalTemporaryHidden: {\n            type: Boolean,\n            default: false\n        },\n        contentCssClass: String\n    },\n    data: function () {\n        return {\n            baseModalZindex: 600,\n            visible: false,\n            loadingPosition: true,\n            wasResizingOrDragging: false,\n            fadeIn: false,\n            offset: {\n                left: 0,\n                top: 0\n            },\n            userSize: {\n                width: null,\n                height: null\n            },\n            zIndex: 600,\n            componentUid: null\n        };\n    },\n    computed: {\n        modalStyle: function computeModalStyle() {\n            var result = {\n                top: this.offset.top + 'px',\n                left: this.offset.left + 'px'\n            };\n\n            if (this.resizable === true || this.resizable === 'horizontal') {\n                if (this.userSize.width !== null) {\n                    result.width = Math.max(this.resizeMinWidth, this.userSize.width) + 'px';\n                }\n                else {\n                    result.width = Math.max(this.resizeMinWidth, this.resizeDefaultWidth) + 'px';\n                }\n            }\n\n            if (this.resizable === true || this.resizable === 'vertical') {\n                if (this.userSize.height !== null) {\n                    result.height = Math.max(this.resizeMinHeight, this.userSize.height) + 'px';\n                }\n                else {\n                    result.height = Math.max(this.resizeMinHeight, this.resizeDefaultHeight) + 'px';\n                }\n            }\n\n            return result;\n        },\n\n        containerStyle: function computeContainerStyle() {\n            if (!this.loadingPosition) {\n                return {\n                    'z-index': this.zIndex\n                };\n            }\n\n            return {\n                visibility: 'hidden'\n            };\n        },\n\n        contentCssClassName: function computeContentCssClassName() {\n            var result = '';\n\n            if (this.draggable) {\n                result = 'draggable';\n            }\n\n            if (this.contentCssClass) {\n                result += ' ' + this.contentCssClass;\n            }\n\n            return result;\n        },\n\n        storageKey: function computeStorageKey() {\n            return this.uniqueKey + '-modal';\n        },\n\n        containerCssClass: function computeContainerCssClass() {\n            var result = this.modalCssClass;\n\n            if (this.fadeIn) {\n                result += ' show ';\n            }\n\n            if (!this.isModal) {\n                return result + ' non-modal';\n            }\n\n            if (this.modalTemporaryHidden) {\n                result += ' temporary-hidden';\n            }\n\n            return result;\n        },\n\n        cssClass: function computeCssClass() {\n            if (this.size == 'small') {\n                return 'modal-sm';\n            }\n\n            if (this.size == 'large') {\n                return 'modal-lg';\n            }\n\n            return '';\n        },\n\n        isVisible: function computeIsVisible() {\n            return this.visible;\n        }\n    },\n    methods: {\n        show: function show() {\n            this.visible = true;\n\n            var that = this;\n            Vue.nextTick(function () {\n                that.fadeIn = true;\n                that.loadPosition();\n            });\n\n            $(document.body).on('keydown', this.onKeyDown);\n        },\n\n        hide: function hide(byEscape) {\n            this.fadeIn = false;\n            $(document.body).off('keydown', this.onKeyDown);\n\n            var that = this;\n            setTimeout(function () {\n                that.visible = false;\n                that.loadingPosition = true;\n                that.offset = {\n                    left: 0,\n                    top: 0\n                };\n\n                Vue.nextTick(function () {\n                    $.oc.modalFocusManager.pop();\n                    that.$emit('hidden', byEscape);\n                });\n            }, 300);\n        },\n\n        savePosition: function savePosition() {\n            if (!this.storePosition) {\n                return;\n            }\n\n            var that = this;\n\n            Vue.nextTick(function () {\n                var offset = $(that.$refs.content).offset();\n\n                sessionStorage.setItem(that.storageKey + '-x', Math.round(offset.left));\n                sessionStorage.setItem(that.storageKey + '-y', Math.round(offset.top));\n\n                if (that.userSize.width || (that.userSize.height && that.resizable !== false)) {\n                    if (that.resizable === 'horizontal' || that.resizable === true) {\n                        sessionStorage.setItem(that.storageKey + '-width', Math.round(that.userSize.width));\n                    }\n\n                    if (that.resizable === 'vertical' || that.resizable === true) {\n                        sessionStorage.setItem(that.storageKey + '-height', Math.round(that.userSize.height));\n                    }\n                }\n            });\n        },\n\n        loadPosition: function loadPosition() {\n            var left = parseInt(sessionStorage.getItem(this.storageKey + '-x')),\n                top = parseInt(sessionStorage.getItem(this.storageKey + '-y')),\n                width = parseInt(sessionStorage.getItem(this.storageKey + '-width')),\n                height = parseInt(sessionStorage.getItem(this.storageKey + '-height')),\n                initialOffset = modalPosition.getInitialOffset(this.isModal),\n                contentOffset = $(this.$refs.content).offset();\n\n            this.offset.top = !isNaN(top) ? top - contentOffset.top : initialOffset;\n            this.offset.left = !isNaN(left) ? left - contentOffset.left : initialOffset;\n\n            if (!isNaN(width)) {\n                this.userSize.width = width;\n            }\n\n            if (this.userSize.width === null && !this.isModal) {\n                this.userSize.width = this.resizeMinWidth;\n            }\n\n            if (this.userSize.height === null && !this.isModal) {\n                this.userSize.height = this.resizeMinHeight;\n            }\n\n            if (!isNaN(height)) {\n                this.userSize.height = height;\n            }\n\n            var that = this;\n            Vue.nextTick(function () {\n                modalPosition.fixPosition($(that.$refs.content), false, that.offset);\n                that.loadingPosition = false;\n\n                Vue.nextTick(function () {\n                    $.oc.modalFocusManager.push(that.onFocusIn, 'modal', that.componentUid, that.isModal);\n                    that.zIndex = that.baseModalZindex + $.oc.modalFocusManager.getNumberOfType('modal');\n                    that.$emit('shown');\n                });\n            });\n        },\n\n        onKeyDown: function onKeyDown(ev) {\n            if (!$.oc.modalFocusManager.isUidTop(this.componentUid)) {\n                return;\n            }\n\n            if (this.modalTemporaryHidden) {\n                return;\n            }\n\n            if (ev.keyCode == 27) {\n                if (!this.closeByEsc) {\n                    return;\n                }\n\n                var event = $.Event('escapepressed');\n\n                this.$emit('escapepressed', event);\n                if (!event.isDefaultPrevented()) {\n                    this.hide(true);\n\n                    ev.stopPropagation();\n                    ev.preventDefault();\n                }\n            }\n\n            if (ev.keyCode == 13) {\n                this.$emit('enterkey', ev);\n            }\n        },\n\n        onFocusIn: function onFocusIn(ev) {\n            if (!ev) {\n                var event = $.Event('setdefaultfocus');\n\n                this.$emit('setdefaultfocus', event);\n                if (event.isDefaultPrevented()) {\n                    return;\n                }\n\n                // Focus after visbility animations are ready\n                var defaultFocus = $(this.$refs.content).find('[data-default-focus]').first();\n                setTimeout(function () {\n                    defaultFocus.focus();\n                }, 100);\n\n                return;\n            }\n\n            if (!this.isModal) {\n                return;\n            }\n\n            if (\n                document !== ev.target &&\n                this.$refs.content !== ev.target &&\n                this.$el !== ev.target &&\n                !this.$refs.content.contains(ev.target)\n            ) {\n                // Focus after visbility animations are ready\n                var defaultFocus = $(this.$refs.content).find('[data-default-focus]').first();\n                setTimeout(function () {\n                    defaultFocus.focus();\n                }, 100);\n\n                return false;\n            }\n        },\n\n        onTransitionEnd: function onTransitionEnd() {\n            $(this.$refs.content).removeClass('animate-position');\n            this.savePosition();\n        },\n\n        onResizeMouseUp: function onResizeMouseUp() {\n            this.wasResizingOrDragging = true;\n            this.savePosition();\n\n            var that = this;\n            setTimeout(function () {\n                that.wasResizingOrDragging = false;\n            }, 5);\n        },\n\n        onMouseDown: function onMouseDown(ev) {\n            if ($(window).width() <= 768) {\n                return;\n            }\n\n            if (this.draggable && $(ev.target.closest('.modal-header')).length) {\n                return modalPosition.onMouseDown(\n                    ev,\n                    this.$refs.content,\n                    this.offset,\n                    this.onResizeMouseUp\n                );\n            }\n\n            if (this.resizable && $(ev.target).hasClass('resize-handle')) {\n                return modalSize.onMouseDown(\n                    ev,\n                    this.$refs.content,\n                    this.userSize,\n                    this.offset,\n                    this.onResizeMouseUp,\n                    this.resizeMinWidth,\n                    this.resizeMinHeight\n                );\n            }\n        },\n\n        onOverlayClick: function onOverlayClick(ev) {\n            if (!this.visible || this.wasResizingOrDragging || !this.isModal) {\n                return;\n            }\n\n            var $content = $(this.$refs.content);\n            if ($content.has(ev.target).length) {\n                return;\n            }\n\n            if (this.$refs.content == ev.target) {\n                return;\n            }\n\n            if (this.closeByOverlayClick) {\n                this.hide(true);\n                return;\n            }\n\n            $content.addClass('show-modal-frame');\n            setTimeout(function () {\n                $content.removeClass('show-modal-frame');\n            }, 400);\n        }\n    },\n    watch: {\n        userSize: {\n            handler: function onUserSizeChanged() {\n                this.$emit('resized');\n            },\n            deep: true\n        }\n    },\n    mounted: function onMounted() {\n        this.baseModalZindex = this.baseZIndex;\n        this.componentUid = $.oc.domIdManager.generate('modal-uid');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/modal/partials/_alert.php",
    "content": "<div\n    data-default-button-text=\"<?= e(trans('backend::lang.form.ok')) ?>\"\n>\n    <backend-modal\n        ref=\"modal\"\n        :aria-labeled-by=\"modalTitleId\"\n        :unique-key=\"uniqueKey\"\n        :size=\"size\"\n        :storePosition=\"false\"\n        @hidden=\"onHidden\"\n    >\n        <template v-slot:content>\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" v-bind:id=\"modalTitleId\" v-text=\"title\"></h4>\n                <button\n                    @click.prevent=\"$refs.modal.hide()\"\n                    type=\"button\"\n                    class=\"btn-close\"\n                    aria-label=\"<?= e(trans('backend::lang.form.close')) ?>\"\n                    tabindex=\"0\"\n                    ></button>\n            </div>\n            <div class=\"modal-body\">\n                <p v-text=\"text\"></p>\n            </div>\n            <div class=\"modal-footer\">\n                <button\n                    type=\"button\"\n                    class=\"btn btn-primary btn-default-action\"\n                    data-default-focus\n                    @click=\"$refs.modal.hide()\"\n                    v-text=\"primaryButtonText\"\n                ></button>\n            </div>\n        </template>\n    </backend-modal>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/modal/partials/_basic.php",
    "content": "<div>\n    <backend-modal\n        ref=\"modal\"\n        :aria-labeled-by=\"modalTitleId\"\n        :unique-key=\"uniqueKey\"\n        :size=\"size\"\n        :storePosition=\"false\"\n        @hidden=\"onHidden\"\n    >\n        <template v-slot:content>\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" v-bind:id=\"modalTitleId\" v-text=\"title\"></h4>\n                <button\n                    @click.prevent=\"$refs.modal.hide()\"\n                    type=\"button\"\n                    class=\"btn-close\"\n                    aria-label=\"<?= e(trans('backend::lang.form.close')) ?>\"\n                    tabindex=\"0\"\n                ></button>\n            </div>\n            <div v-html=\"text\" @click=\"onClick\"></div>\n        </template>\n    </backend-modal>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/modal/partials/_confirm.php",
    "content": "<div\n    data-default-button-text=\"<?= e(trans('backend::lang.form.ok')) ?>\"\n>\n    <backend-modal\n        ref=\"modal\"\n        :aria-labeled-by=\"modalTitleId\"\n        :unique-key=\"uniqueKey\"\n        :size=\"size\"\n        :storePosition=\"false\"\n        @hidden=\"onHidden\"\n    >\n        <template v-slot:content>\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" v-bind:id=\"modalTitleId\" v-text=\"title\"></h4>\n                <button\n                    @click.prevent=\"$refs.modal.hide()\"\n                    type=\"button\"\n                    class=\"btn-close\"\n                    aria-label=\"<?= e(trans('backend::lang.form.close')) ?>\"\n                    tabindex=\"0\"\n                    ></button>\n            </div>\n            <div class=\"modal-body\">\n                <p v-text=\"text\"></p>\n            </div>\n            <div class=\"modal-footer\">\n                <button\n                    type=\"button\"\n                    class=\"btn btn-primary btn-default-action\"\n                    :class=\"{'btn-primary': !isDanger, 'btn-danger': isDanger}\"\n                    v-bind:data-default-focus=\"!isDanger\"\n                    @click=\"onButtonClick\"\n                    v-text=\"primaryButtonText\"\n                ></button>\n                <span class=\"button-separator\"><?= e(trans('backend::lang.form.or')) ?></span>\n                <button\n                    class=\"btn btn-link text-muted\"\n                    @click.prevent=\"$refs.modal.hide()\"\n                    v-bind:data-default-focus=\"isDanger\"\n                ><?= e(trans('backend::lang.form.cancel')) ?></button>\n            </div>\n        </template>\n    </backend-modal>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/modal/partials/_modal.php",
    "content": "<div\n    class=\"modal fade component-backend-modal\"\n    role=\"dialog\"\n    aria-modal=\"true\"\n    v-if=\"visible\"\n    v-bind:aria-labelledby=\"ariaLabeledBy\"\n    :style=\"containerStyle\"\n    :class=\"containerCssClass\"\n    @click=\"onOverlayClick\"\n>\n    <div\n        ref=\"document\"\n        role=\"document\"\n        class=\"modal-dialog\"\n        :class=\"cssClass\"\n    >\n        <div\n            ref=\"content\"\n            class=\"modal-content\"\n            :class=\"contentCssClassName\"\n            :style=\"modalStyle\"\n            @mousedown=\"onMouseDown\"\n            @transitionend=\"onTransitionEnd\"\n        >\n            <slot name=\"content\"></slot>\n\n            <template v-if=\"resizable\">\n                <div v-if=\"resizable === true || resizable === 'vertical'\" class=\"resize-handle\" data-side=\"bt\"></div>\n                <div v-if=\"resizable === true || resizable === 'vertical'\" class=\"resize-handle\" data-side=\"tp\"></div>\n                <div v-if=\"resizable === true || resizable === 'horizontal'\" class=\"resize-handle\" data-side=\"lf\"></div>\n                <div v-if=\"resizable === true || resizable === 'horizontal'\" class=\"resize-handle\" data-side=\"rt\"></div>\n                <div v-if=\"resizable === true\" class=\"resize-handle\" data-side=\"bt-rt\"></div>\n                <div v-if=\"resizable === true\" class=\"resize-handle\" data-side=\"bt-lf\"></div>\n                <div v-if=\"resizable === true\" class=\"resize-handle\" data-side=\"tp-rt\"></div>\n                <div v-if=\"resizable === true\" class=\"resize-handle\" data-side=\"tp-lf\"></div>\n            </template>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/css/_container-style.css",
    "content": ".component-backend-monaco-editor {\n    .editor-container {\n        &.editor-container-vs-dark {\n            background: #1e1e1e;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/css/_decorations.css",
    "content": ".component-backend-monaco-editor {\n    .monaco-editor {\n        .hover-row > div:not(.hover-contents) {\n            padding: 4px 8px;\n            font-size: 12px;\n        }\n\n        .monaco-error-glyph {\n            margin-left: 5px;\n\n            &:before {\n                content: '';\n                display: block;\n                width: 11px;\n                height: 11px;\n                background-color: red;\n                border-radius: 100%;\n            }\n        }\n\n        .monaco-error-line {\n            background: rgba(255, 0, 0, 0.4);\n        }\n\n        .monaco-warning-glyph {\n            margin-left: 5px;\n\n            &:before {\n                content: '';\n                display: block;\n                width: 11px;\n                height: 11px;\n                background-color: #f0ad4e;\n                border-radius: 100%;\n            }\n        }\n\n        .monaco-warning-line {\n            background: rgba(240, 173, 78, 0.25);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/css/_editor-widgets.css",
    "content": ".component-backend-monaco-editor {\n    .monaco-editor {\n        .suggest-widget a {\n            &:hover {\n                text-decoration: none;\n            }\n        }\n\n        .rename-box {\n            /* Removes extra white space below the editor.\n               See https://github.com/microsoft/monaco-editor/issues/29#issuecomment-307536220 */\n            top: 0;\n        }\n    }\n\n    .monaco-menu {\n        .action-menu-item {\n            text-decoration: none !important;\n            &:hover {\n                color: white !important;\n                background: var(--bs-primary)!important;\n            }\n        }\n    }\n\n    .monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name {\n        text-decoration: none !important;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/css/_tabs-style-monacoeditor.css",
    "content": ".component-backend-monaco-editor {\n    .component-backend-tabs {\n        &.style-monaco-editor {\n            > .tablist-container {\n                .tablist {\n                    button {\n                        font-weight: 600;\n                        padding-top: 7px;\n                        padding-bottom: 7px;\n\n                        span.tab-icon {\n                            top: 9px;\n                            box-shadow: none !important;\n\n                            .tab-icon-background {\n                                background-color: transparent !important;\n\n                                i {\n                                    left: 0;\n                                    top: 0;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n\n            &.monaco-tabs-vs-dark {\n                > .tablist-container {\n                    background: #2d2d2d;\n\n                    .tablist {\n                        button {\n                            border-right: 1px solid #1e1e1e;\n                            color: #969696;\n\n                            &.active {\n                                color: white;\n                                background: #1e1e1e;\n                            }\n                        }\n                    }\n                }\n            }\n\n            &.monaco-tabs-hc-black {\n                > .tablist-container {\n                    background: #2d2d2d;\n\n                    .tablist {\n                        button {\n                            border-right: 1px solid #000000;\n                            color: #969696;\n\n                            &.active {\n                                color: white;\n                                background: #000000;\n                            }\n                        }\n                    }\n                }\n            }\n\n            &.monaco-tabs-vs {\n                > .tablist-container {\n                    .tabs-scrollable {\n                        overflow: visible;\n                    }\n\n                    border-bottom: 1px solid var(--oc-primary-border);\n\n                    .tablist {\n                        button {\n                            border-right: 1px solid var(--oc-primary-border);\n                            overflow: visible;\n\n                            &.active {\n                                color: #2C3E4F;\n                                span[role=text]:after {\n                                    position: absolute;\n                                    content: '';\n                                    width: 100%;\n                                    height: 1px;\n                                    bottom: -1px;\n                                    left: 0;\n\n                                    background-color: #ffffff;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/css/monacoeditor.css",
    "content": "@import \"_tabs-style-monacoeditor.css\";\n@import \"_container-style.css\";\n@import \"_editor-widgets.css\";\n@import \"_decorations.css\";\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/js/modeldefinition.js",
    "content": "import ModelReference from './modelreference.js';\n\nlet modelCounter = 0;\n\nclass ModelDefinition {\n    uriString;\n    language;\n    tabTitle;\n    valueHolderObj;\n    valueHolderProperty;\n    iconCssClass;\n    autoPrefix;\n    autoPrefixRegex;\n    customAttributes;\n\n    constructor(language, tabTitle, valueHolderObj, valueHolderProperty, iconCssClass, uriString) {\n        if (!uriString) {\n            uriString = 'model';\n        }\n\n        this.uriString = ++modelCounter + '-' + uriString;\n        this.language = language;\n        this.tabTitle = tabTitle;\n        this.valueHolderObj = valueHolderObj;\n        this.valueHolderProperty = valueHolderProperty;\n        this.iconCssClass = iconCssClass;\n        this.customAttributes = {};\n    }\n\n    get value() {\n        return this.valueHolderObj[this.valueHolderProperty];\n    }\n\n    set value(value) {\n        this.valueHolderObj[this.valueHolderProperty] = this.postProcess(value);\n    }\n\n    setModelTags(tags) {\n        if (!Array.isArray(tags)) {\n            throw new Error('The tags argument must be an array');\n        }\n\n        this.modelTags = tags;\n    }\n\n    hasTag(tag) {\n        if (!Array.isArray(this.modelTags)) {\n            return false;\n        }\n\n        return this.modelTags.indexOf(tag) !== -1;\n    }\n\n    setAutoPrefix(prefix, prefixRegex) {\n        this.autoPrefix = prefix;\n        this.autoPrefixRegex = prefixRegex;\n    }\n\n    setHolderObject(valueHolderObj) {\n        this.valueHolderObj = valueHolderObj;\n    }\n\n    preprocess(value) {\n        const val = typeof value === 'string' ? value : '';\n\n        if (typeof this.autoPrefix === 'string') {\n            return this.autoPrefix + val;\n        }\n\n        return val;\n    }\n\n    postProcess(value) {\n        const val = typeof value === 'string' ? value : '';\n\n        if (!this.autoPrefixRegex) {\n            return val;\n        }\n\n        return val.replace(this.autoPrefixRegex, '').trim();\n    }\n\n    setModelCustomAttribute(name, value) {\n        this.customAttributes[name] = value;\n    }\n\n    makeModelReference(options) {\n        const uri = new monaco.Uri().with({ path: this.uriString });\n        const model = monaco.editor.createModel(this.preprocess(this.value), this.language, uri);\n\n        if (this.modelTags) {\n            model.octoberEditorCmsTags = this.modelTags;\n        }\n\n        model.updateOptions({ tabSize: options.tabSize });\n\n        model.octoberEditorAttributes = {};\n        Object.keys(this.customAttributes).forEach((customAttributeName) => {\n            model.octoberEditorAttributes[customAttributeName] = this.customAttributes[customAttributeName];\n        });\n\n        return new ModelReference(\n            model,\n            model.onDidChangeContent(() => {\n                this.value = model.getValue();\n            }),\n            this.uriString\n        );\n    }\n}\n\nexport default ModelDefinition;"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/js/modelreference.js",
    "content": "class ModelReference {\n    model;\n    subscription;\n    uriString;\n    viewState;\n\n    constructor(model, subscription, uriString) {\n        this.model = model;\n        this.subscription = subscription;\n        this.uriString = uriString;\n    }\n\n    setViewState(viewState) {\n        this.viewState = viewState;\n    }\n\n    dispose() {\n        this.subscription.dispose();\n        this.model.dispose();\n    }\n}\n\nexport default ModelReference;"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/js/monacoeditor.js",
    "content": "import ModelDefinition from './modeldefinition.js';\n\nlet environmentInitialized = false;\nlet emmetInitialized = false;\nlet yamlInitialized = false;\n\nfunction initEnvironment(baseUrl) {\n    if (environmentInitialized) {\n        return;\n    }\n\n    environmentInitialized = true;\n\n    require.config({\n        paths: { vs: baseUrl + '/vs' }\n    });\n\n    const proxy = URL.createObjectURL(\n        new Blob(\n            [`\n                self.MonacoEnvironment = {\n                    baseUrl: '${baseUrl}/'\n                };\n                importScripts('${baseUrl}/vs/base/worker/workerMain.js');\n            `],\n            { type: 'text/javascript' }\n        )\n    );\n\n    // window.MonacoEnvironment = { getWorkerUrl: () => proxy };\n    window.MonacoEnvironment = {\n        getWorker: (moduleId, label) => {\n            switch (label) {\n                case 'yaml':\n                    return new Worker(new URL('monaco-yaml/yaml.worker.min.js', baseUrl));\n                case 'editorWorkerService':\n                    return new Worker(proxy);\n                default:\n                    throw new Error(`Unknown label ${label}`);\n            }\n        }\n    };\n}\n\nfunction initEditor(component, options) {\n    // Vue 3: Mark model references as raw to prevent Vue from making Monaco objects reactive\n    component.modelReferences = Vue.markRaw(component.modelDefinitions.map((def) => {\n        return def.makeModelReference(options);\n    }));\n\n    if (options.useEmmet && !emmetInitialized) {\n        emmetMonaco.emmetHTML(monaco, [\"html\", \"twig\", \"php\"]);\n        emmetMonaco.emmetCSS(monaco, [\"css\", \"less\", \"scss\"]);\n        emmetInitialized = true;\n    }\n\n    if (options.yamlSchemas && !yamlInitialized) {\n        configureMonacoYaml(monaco, {\n            enableSchemaRequest: true,\n            schemas: options.yamlSchemas\n        });\n        yamlInitialized = true;\n    }\n\n    // Vue 3: Mark editor instance as raw to prevent Vue from making it reactive\n    component.editor = Vue.markRaw(monaco.editor.create(component.$refs.editorContainer, options));\n\n    if (component.modelReferences.length > 0) {\n        component.editor.setModel(component.modelReferences[0].model);\n    }\n\n    const getSupportedActions = component.editor.getSupportedActions;\n    component.editor.getSupportedActions = function() {\n        const actions = getSupportedActions.apply(this);\n        const payload = {\n            editor: component.editor,\n            actions: actions\n        };\n        component.$emit('filtersupportedactions', payload);\n\n        return payload.actions;\n    };\n\n    const contextmenu = component.editor.getContribution('editor.contrib.contextmenu');\n    const onContextMenu = contextmenu._onContextMenu;\n    contextmenu._onContextMenu = function(eventData) {\n        const payload = {\n            editor: component.editor,\n            target: eventData.target\n        };\n        component.$emit('contextmenu', payload);\n        onContextMenu.apply(contextmenu, arguments);\n    };\n\n    component.timerId = setInterval(component.autoLayout, 100);\n}\n\n/*\n * Vue Monaco editor implementation.\n */\nexport default {\n    props: {\n        fullHeight: {\n            type: Boolean,\n            default: true\n        },\n        containerCssClass: {\n            type: String,\n            default: ''\n        },\n        supportDragEvents: {\n            type: Boolean,\n            default: false\n        },\n        forceSingleTab: {\n            type: Boolean,\n            default: false\n        },\n        modelDefinitions: {\n            type: Array,\n            required: true,\n            validator: (value) => {\n                return !value.some((definition) => !definition instanceof ModelDefinition);\n            }\n        },\n        glyphMargin: {\n            type: Boolean,\n            default: false\n        }\n    },\n    computed: {\n        cssClass: function computeCssClass() {\n            var result = '';\n\n            if (this.fullHeight) {\n                result += ' full-height-strict';\n            }\n\n            result += ' ' + this.containerCssClass;\n\n            return result;\n        },\n\n        showTabs: function computeShowTabs() {\n            return this.modelDefinitions.length > 1 || this.forceSingleTab;\n        },\n\n        editorTabs: function computeEditorTabs() {\n            return this.modelDefinitions.map((def) => {\n                const result = {\n                    label: def.tabTitle,\n                    key: def.uriString\n                };\n\n                if (def.iconCssClass) {\n                    result.icon = {\n                        cssClass: def.iconCssClass\n                    };\n                }\n\n                return result;\n            });\n        },\n\n        tabsContainerCssClass: function tabsContainerCssClass() {\n            return 'monaco-tabs-' + this.theme;\n        },\n\n        editorContainerCssClass: function computeEditorContainerCssClass() {\n            return 'editor-container editor-container-' + this.theme;\n        }\n    },\n    data: function() {\n        return {\n            editor: null,\n            modelReferences: [],\n            timerId: null,\n            lastWidth: null,\n            lastHeight: null,\n            theme: 'vs-dark',\n            decorationsIds: []\n        };\n    },\n    methods: {\n        findModelReferenceByUri: function findModelReferenceByUri(uriString) {\n            return this.modelReferences.find((ref) => ref.uriString == uriString);\n        },\n\n        updateValue: function updateValue(modelDefinition, value) {\n            const ref = this.findModelReferenceByUri(modelDefinition.uriString);\n            if (ref && ref.model.getValue != value) {\n                ref.model.setValue(modelDefinition.preprocess(value));\n            }\n        },\n\n        updateLanguage: function updateLanguage(modelDefinition, value) {\n            const ref = this.findModelReferenceByUri(modelDefinition.uriString);\n            if (ref && ref.model.getLanguageId() != value) {\n                monaco.editor.setModelLanguage(ref.model, value);\n            }\n        },\n\n        makeRange: function makeRange(startLine, startColumn, endLine, endColumn) {\n            return new monaco.Range(startLine, startColumn, endLine, endColumn);\n        },\n\n        updateDecorations: function updateDecorations(decorations) {\n            this.decorationsIds = this.editor.deltaDecorations(this.decorationsIds, decorations);\n        },\n\n        setModelCustomAttribute: function setModelCustomAttribute(modelDefinition, name, value) {\n            const ref = this.findModelReferenceByUri(modelDefinition.uriString);\n            if (!ref || !ref.model) {\n                return false;\n            }\n\n            ref.model.octoberEditorAttributes[name] = value;\n\n            return true;\n        },\n\n        layout: function layout() {\n            this.editor.layout();\n        },\n\n        formatCode: function formatCode() {\n            this.editor.getAction('editor.action.formatDocument').run();\n        },\n\n        emitCustomEvent: function emitCustomEvent(eventName, payload) {\n            this.$emit('customevent', eventName, payload);\n        },\n\n        autoLayout: function autoLayout() {\n            if (this.lastWidth === null) {\n                this.lastWidth = this.$el.clientWidth;\n                this.lastHeight = this.$el.clientHeight;\n\n                return;\n            }\n\n            if (this.lastWidth != this.$el.clientWidth || this.lastHeight != this.$el.clientHeight) {\n                window.requestAnimationFrame(() => {\n                    this.layout();\n                });\n\n                this.lastWidth = this.$el.clientWidth;\n                this.lastHeight = this.$el.clientHeight;\n            }\n        },\n\n        insertText: function insertText(str) {\n            const position = this.editor.getPosition();\n            this.editor.executeEdits('', [\n                {\n                    range: {\n                        startLineNumber: position.lineNumber,\n                        startColumn: position.column,\n                        endLineNumber: position.lineNumber,\n                        endColumn: position.column\n                    },\n                    text: str\n                }\n            ]);\n            this.editor.setSelection(\n                new monaco.Selection(position.lineNumber, position.column, position.lineNumber, position.column)\n            );\n        },\n\n        replaceText: function replaceText(text, replacement, modelDefinition) {\n            const ref = this.findModelReferenceByUri(modelDefinition.uriString);\n            if (!ref) {\n                return;\n            }\n\n            const matches = ref.model.findMatches(text, false, false, false, null, true);\n            matches.forEach((match) => {\n                ref.model.pushEditOperations(\n                    [],\n                    [\n                        {\n                            range: match.range,\n                            text: replacement\n                        }\n                    ]\n                );\n            });\n        },\n\n        replaceAsSnippet: function replaceAsSnippet(model, range, str) {\n            const tab = ' '.repeat(range.startColumn - 1);\n            const paddedStr = str.replace(/^/gm, tab).replace(/^\\s+/, '');\n\n            model.pushEditOperations(\n                [],\n                [\n                    {\n                        range: range,\n                        text: paddedStr\n                    }\n                ]\n            );\n        },\n\n        getCurrentModelUri: function getCurrentModelUri() {\n            if (!this.editor) {\n                return null;\n            }\n\n            return this.editor.getModel().uri.path.replace(/^\\//, '');\n        },\n\n        onDragOver: function onDragOver(ev) {\n            if (!this.supportDragEvents || !this.editor) {\n                return;\n            }\n\n            const targetAtPoint = this.editor.getTargetAtClientPoint(ev.clientX, ev.clientY);\n            if (!targetAtPoint || !targetAtPoint.position) {\n                return;\n            }\n\n            if (!this.editor.hasTextFocus()) {\n                this.editor.focus();\n            }\n\n            this.editor.setPosition(targetAtPoint.position);\n\n            ev.preventDefault();\n            return false;\n        },\n\n        onDragDrop: function onDragDrop(ev) {\n            if (!this.supportDragEvents || !this.editor) {\n                return;\n            }\n\n            ev.stopPropagation();\n            ev.preventDefault();\n\n            this.$emit('drop', this.editor, ev);\n        },\n\n        onTabSelected: function onTabSelected(newKey, oldKey) {\n            const newRef = this.findModelReferenceByUri(newKey);\n            const oldRef = this.findModelReferenceByUri(oldKey);\n\n            if (oldRef) {\n                oldRef.setViewState(this.editor.saveViewState());\n            }\n\n            if (newRef) {\n                this.editor.setModel(newRef.model);\n                if (newRef.viewState) {\n                    this.editor.restoreViewState(newRef.viewState);\n                }\n            }\n        }\n    },\n    mounted: function mounted() {\n        const options = JSON.parse(this.$el.getAttribute('data-configuration'));\n        initEnvironment(options.vendorPath);\n\n        this.theme = options.theme;\n        if (!this.theme) {\n            this.theme = 'vs-dark';\n        }\n\n        options.theme = this.theme;\n        options.glyphMargin = this.glyphMargin;\n        options.tabCompletion = 'on';\n        options.automaticLayout = true;\n        options.unusualLineTerminators = 'auto';\n        options.minimap = {\n            enabled: true\n        };\n        options.quickSuggestions = {\n            other: true,\n            comments: false,\n            strings: true\n        };\n\n        // Allows plugins to override the editor options\n        if (oc.monacoEditorOptions) {\n            Object.assign(options, oc.monacoEditorOptions);\n        }\n\n        require(['vs/editor/editor.main'], () => {\n            initEditor(this, options);\n            this.$emit('monacoloaded', monaco, this.editor);\n        });\n    },\n    beforeUnmount: function beforeUnmount() {\n        this.$emit('dispose', this.editor);\n        this.editor && this.editor.dispose();\n        this.modelReferences.forEach((ref) => ref.dispose());\n\n        if (this.timerId) {\n            clearInterval(this.timerId);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.de.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls.de\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"Array\",\"Boolescher Wert\",\"Klasse\",\"Konstante\",\"Konstruktor\",\"Enumeration\",\"Enumerationsmember\",\"Ereignis\",\"Feld\",\"Datei\",\"Funktion\",\"Schnittstelle\",\"Schl\\xFCssel\",\"Methode\",\"Modul\",\"Namespace\",\"NULL\",\"Zahl\",\"Objekt\",\"Operator\",\"Paket\",\"Eigenschaft\",\"Zeichenfolge\",\"Struktur\",\"Typparameter\",\"Variable\",\"{0} ({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.de.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.es.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls.es\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"matriz\",\"booleano\",\"clase\",\"constante\",\"constructor\",\"enumeraci\\xF3n\",\"miembro de la enumeraci\\xF3n\",\"evento\",\"campo\",\"archivo\",\"funci\\xF3n\",\"interfaz\",\"clave\",\"m\\xE9todo\",\"m\\xF3dulo\",\"espacio de nombres\",\"NULL\",\"n\\xFAmero\",\"objeto\",\"operador\",\"paquete\",\"propiedad\",\"cadena\",\"estructura\",\"par\\xE1metro de tipo\",\"variable\",\"{0} ({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.es.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.fr.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls.fr\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"tableau\",\"bool\\xE9en\",\"classe\",\"constante\",\"constructeur\",\"\\xE9num\\xE9ration\",\"membre d'\\xE9num\\xE9ration\",\"\\xE9v\\xE9nement\",\"champ\",\"fichier\",\"fonction\",\"interface\",\"cl\\xE9\",\"m\\xE9thode\",\"module\",\"espace de noms\",\"NULL\",\"nombre\",\"objet\",\"op\\xE9rateur\",\"package\",\"propri\\xE9t\\xE9\",\"cha\\xEEne\",\"struct\",\"param\\xE8tre de type\",\"variable\",\"{0} ({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.fr.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.it.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls.it\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"matrice\",\"valore booleano\",\"classe\",\"costante\",\"costruttore\",\"enumerazione\",\"membro di enumerazione\",\"evento\",\"campo\",\"file\",\"funzione\",\"interfaccia\",\"chiave\",\"metodo\",\"modulo\",\"spazio dei nomi\",\"Null\",\"numero\",\"oggetto\",\"operatore\",\"pacchetto\",\"propriet\\xE0\",\"stringa\",\"struct\",\"parametro di tipo\",\"variabile\",\"{0} ({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.it.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.ja.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls.ja\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"\\u914D\\u5217\",\"\\u30D6\\u30FC\\u30EB\\u5024\",\"\\u30AF\\u30E9\\u30B9\",\"\\u5B9A\\u6570\",\"\\u30B3\\u30F3\\u30B9\\u30C8\\u30E9\\u30AF\\u30BF\\u30FC\",\"\\u5217\\u6319\\u578B\",\"\\u5217\\u6319\\u578B\\u30E1\\u30F3\\u30D0\\u30FC\",\"\\u30A4\\u30D9\\u30F3\\u30C8\",\"\\u30D5\\u30A3\\u30FC\\u30EB\\u30C9\",\"\\u30D5\\u30A1\\u30A4\\u30EB\",\"\\u95A2\\u6570\",\"\\u30A4\\u30F3\\u30BF\\u30FC\\u30D5\\u30A7\\u30A4\\u30B9\",\"\\u30AD\\u30FC\",\"\\u30E1\\u30BD\\u30C3\\u30C9\",\"\\u30E2\\u30B8\\u30E5\\u30FC\\u30EB\",\"\\u540D\\u524D\\u7A7A\\u9593\",\"NULL\",\"\\u6570\\u5024\",\"\\u30AA\\u30D6\\u30B8\\u30A7\\u30AF\\u30C8\",\"\\u6F14\\u7B97\\u5B50\",\"\\u30D1\\u30C3\\u30B1\\u30FC\\u30B8\",\"\\u30D7\\u30ED\\u30D1\\u30C6\\u30A3\",\"\\u6587\\u5B57\\u5217\",\"\\u69CB\\u9020\\u4F53\",\"\\u578B\\u30D1\\u30E9\\u30E1\\u30FC\\u30BF\\u30FC\",\"\\u5909\\u6570\",\"{0} ({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ja.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"array\",\"boolean\",\"class\",\"constant\",\"constructor\",\"enumeration\",\"enumeration member\",\"event\",\"field\",\"file\",\"function\",\"interface\",\"key\",\"method\",\"module\",\"namespace\",\"null\",\"number\",\"object\",\"operator\",\"package\",\"property\",\"string\",\"struct\",\"type parameter\",\"variable\",\"{0} ({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.ko.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls.ko\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"\\uBC30\\uC5F4\",\"\\uBD80\\uC6B8\",\"\\uD074\\uB798\\uC2A4\",\"\\uC0C1\\uC218\",\"\\uC0DD\\uC131\\uC790\",\"\\uC5F4\\uAC70\\uD615\",\"\\uC5F4\\uAC70\\uD615 \\uBA64\\uBC84\",\"\\uC774\\uBCA4\\uD2B8\",\"\\uD544\\uB4DC\",\"\\uD30C\\uC77C\",\"\\uD568\\uC218\",\"\\uC778\\uD130\\uD398\\uC774\\uC2A4\",\"\\uD0A4\",\"\\uBA54\\uC11C\\uB4DC\",\"\\uBAA8\\uB4C8\",\"\\uB124\\uC784\\uC2A4\\uD398\\uC774\\uC2A4\",\"Null\",\"\\uC22B\\uC790\",\"\\uAC1C\\uCCB4\",\"\\uC5F0\\uC0B0\\uC790\",\"\\uD328\\uD0A4\\uC9C0\",\"\\uC18D\\uC131\",\"\\uBB38\\uC790\\uC5F4\",\"\\uAD6C\\uC870\\uCCB4\",\"\\uD615\\uC2DD \\uB9E4\\uAC1C \\uBCC0\\uC218\",\"\\uBCC0\\uC218\",\"{0}({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ko.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.ru.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls.ru\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"\\u043C\\u0430\\u0441\\u0441\\u0438\\u0432\",\"\\u043B\\u043E\\u0433\\u0438\\u0447\\u0435\\u0441\\u043A\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435\",\"\\u043A\\u043B\\u0430\\u0441\\u0441\",\"\\u043A\\u043E\\u043D\\u0441\\u0442\\u0430\\u043D\\u0442\\u0430\",\"\\u043A\\u043E\\u043D\\u0441\\u0442\\u0440\\u0443\\u043A\\u0442\\u043E\\u0440\",\"\\u043F\\u0435\\u0440\\u0435\\u0447\\u0438\\u0441\\u043B\\u0435\\u043D\\u0438\\u0435\",\"\\u044D\\u043B\\u0435\\u043C\\u0435\\u043D\\u0442 \\u043F\\u0435\\u0440\\u0435\\u0447\\u0438\\u0441\\u043B\\u0435\\u043D\\u0438\\u044F\",\"\\u0441\\u043E\\u0431\\u044B\\u0442\\u0438\\u0435\",\"\\u043F\\u043E\\u043B\\u0435\",\"\\u0444\\u0430\\u0439\\u043B\",\"\\u0444\\u0443\\u043D\\u043A\\u0446\\u0438\\u044F\",\"\\u0438\\u043D\\u0442\\u0435\\u0440\\u0444\\u0435\\u0439\\u0441\",\"\\u043A\\u043B\\u044E\\u0447\",\"\\u043C\\u0435\\u0442\\u043E\\u0434\",\"\\u043C\\u043E\\u0434\\u0443\\u043B\\u044C\",\"\\u043F\\u0440\\u043E\\u0441\\u0442\\u0440\\u0430\\u043D\\u0441\\u0442\\u0432\\u043E \\u0438\\u043C\\u0435\\u043D\",\"NULL\",\"\\u0447\\u0438\\u0441\\u043B\\u043E\",\"\\u043E\\u0431\\u044A\\u0435\\u043A\\u0442\",\"\\u043E\\u043F\\u0435\\u0440\\u0430\\u0442\\u043E\\u0440\",\"\\u043F\\u0430\\u043A\\u0435\\u0442\",\"\\u0441\\u0432\\u043E\\u0439\\u0441\\u0442\\u0432\\u043E\",\"\\u0441\\u0442\\u0440\\u043E\\u043A\\u0430\",\"\\u0441\\u0442\\u0440\\u0443\\u043A\\u0442\\u0443\\u0440\\u0430\",\"\\u043F\\u0430\\u0440\\u0430\\u043C\\u0435\\u0442\\u0440 \\u0442\\u0438\\u043F\\u0430\",\"\\u041F\\u0435\\u0440\\u0435\\u043C\\u0435\\u043D\\u043D\\u0430\\u044F\",\"{0} ({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ru.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.zh-cn.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls.zh-cn\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"\\u6570\\u7EC4\",\"\\u5E03\\u5C14\\u503C\",\"\\u7C7B\",\"\\u5E38\\u6570\",\"\\u6784\\u9020\\u51FD\\u6570\",\"\\u679A\\u4E3E\",\"\\u679A\\u4E3E\\u6210\\u5458\",\"\\u4E8B\\u4EF6\",\"\\u5B57\\u6BB5\",\"\\u6587\\u4EF6\",\"\\u51FD\\u6570\",\"\\u63A5\\u53E3\",\"\\u952E\",\"\\u65B9\\u6CD5\",\"\\u6A21\\u5757\",\"\\u547D\\u540D\\u7A7A\\u95F4\",\"Null\",\"\\u6570\\u5B57\",\"\\u5BF9\\u8C61\",\"\\u8FD0\\u7B97\\u7B26\",\"\\u5305\",\"\\u5C5E\\u6027\",\"\\u5B57\\u7B26\\u4E32\",\"\\u7ED3\\u6784\",\"\\u7C7B\\u578B\\u53C2\\u6570\",\"\\u53D8\\u91CF\",\"{0} ({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.zh-cn.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/common/worker/simpleWorker.nls.zh-tw.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/base/common/worker/simpleWorker.nls.zh-tw\",{\"vs/base/common/platform\":[\"_\"],\"vs/editor/common/languages\":[\"\\u9663\\u5217\",\"\\u5E03\\u6797\\u503C\",\"\\u985E\\u5225\",\"\\u5E38\\u6578\",\"\\u5EFA\\u69CB\\u51FD\\u5F0F\",\"\\u5217\\u8209\",\"\\u5217\\u8209\\u6210\\u54E1\",\"\\u4E8B\\u4EF6\",\"\\u6B04\\u4F4D\",\"\\u6A94\\u6848\",\"\\u51FD\\u5F0F\",\"\\u4ECB\\u9762\",\"\\u7D22\\u5F15\\u9375\",\"\\u65B9\\u6CD5\",\"\\u6A21\\u7D44\",\"\\u547D\\u540D\\u7A7A\\u9593\",\"null\",\"\\u6578\\u5B57\",\"\\u7269\\u4EF6\",\"\\u904B\\u7B97\\u5B50\",\"\\u5957\\u4EF6\",\"\\u5C6C\\u6027\",\"\\u5B57\\u4E32\",\"\\u7D50\\u69CB\",\"\\u578B\\u5225\\u53C3\\u6578\",\"\\u8B8A\\u6578\",\"{0} ({1})\"]});\n\n//# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.zh-tw.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/base/worker/workerMain.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/(function(){var X=[\"require\",\"exports\",\"vs/editor/common/core/range\",\"vs/editor/common/core/offsetRange\",\"vs/editor/common/core/position\",\"vs/base/common/errors\",\"vs/base/common/strings\",\"vs/base/common/arrays\",\"vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm\",\"vs/base/common/event\",\"vs/editor/common/core/lineRange\",\"vs/base/common/arraysFind\",\"vs/base/common/assert\",\"vs/base/common/lifecycle\",\"vs/base/common/objects\",\"vs/editor/common/diff/defaultLinesDiffComputer/utils\",\"vs/editor/common/diff/rangeMapping\",\"vs/base/common/platform\",\"vs/base/common/uri\",\"vs/nls\",\"vs/base/common/functional\",\"vs/base/common/iterator\",\"vs/base/common/linkedList\",\"vs/base/common/stopwatch\",\"vs/base/common/diff/diff\",\"vs/base/common/types\",\"vs/base/common/uint\",\"vs/editor/common/core/characterClassifier\",\"vs/editor/common/core/wordHelper\",\"vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm\",\"vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence\",\"vs/editor/common/diff/linesDiffComputer\",\"vs/base/common/cache\",\"vs/base/common/color\",\"vs/base/common/diff/diffChange\",\"vs/base/common/keyCodes\",\"vs/base/common/lazy\",\"vs/base/common/map\",\"vs/base/common/cancellation\",\"vs/base/common/hash\",\"vs/base/common/codicons\",\"vs/editor/common/core/selection\",\"vs/editor/common/core/wordCharacterClassifier\",\"vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations\",\"vs/editor/common/diff/defaultLinesDiffComputer/lineSequence\",\"vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing\",\"vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines\",\"vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer\",\"vs/editor/common/diff/legacyLinesDiffComputer\",\"vs/editor/common/diff/linesDiffComputers\",\"vs/editor/common/languages/defaultDocumentColorsComputer\",\"vs/editor/common/languages/linkComputer\",\"vs/editor/common/languages/supports/inplaceReplaceSupport\",\"vs/editor/common/model\",\"vs/editor/common/model/prefixSumComputer\",\"vs/editor/common/model/mirrorTextModel\",\"vs/editor/common/model/textModelSearch\",\"vs/editor/common/services/unicodeTextModelHighlighter\",\"vs/editor/common/standalone/standaloneEnums\",\"vs/editor/common/tokenizationRegistry\",\"vs/nls!vs/base/common/platform\",\"vs/nls!vs/base/common/worker/simpleWorker\",\"vs/base/common/process\",\"vs/base/common/path\",\"vs/nls!vs/editor/common/languages\",\"vs/editor/common/languages\",\"vs/editor/common/services/editorBaseApi\",\"vs/base/common/worker/simpleWorker\",\"vs/editor/common/services/editorSimpleWorker\"],J=function(q){for(var n=[],M=0,A=q.length;M<A;M++)n[M]=X[q[M]];return n};const Ne=this,Re=typeof global==\"object\"?global:{};var le;(function(q){q.global=Ne;class n{get isWindows(){return this._detect(),this._isWindows}get isNode(){return this._detect(),this._isNode}get isElectronRenderer(){return this._detect(),this._isElectronRenderer}get isWebWorker(){return this._detect(),this._isWebWorker}get isElectronNodeIntegrationWebWorker(){return this._detect(),this._isElectronNodeIntegrationWebWorker}constructor(){this._detected=!1,this._isWindows=!1,this._isNode=!1,this._isElectronRenderer=!1,this._isWebWorker=!1,this._isElectronNodeIntegrationWebWorker=!1}_detect(){this._detected||(this._detected=!0,this._isWindows=n._isWindows(),this._isNode=typeof module<\"u\"&&!!module.exports,this._isElectronRenderer=typeof process<\"u\"&&typeof process.versions<\"u\"&&typeof process.versions.electron<\"u\"&&process.type===\"renderer\",this._isWebWorker=typeof q.global.importScripts==\"function\",this._isElectronNodeIntegrationWebWorker=this._isWebWorker&&typeof process<\"u\"&&typeof process.versions<\"u\"&&typeof process.versions.electron<\"u\"&&process.type===\"worker\")}static _isWindows(){return typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.indexOf(\"Windows\")>=0?!0:typeof process<\"u\"?process.platform===\"win32\":!1}}q.Environment=n})(le||(le={}));var le;(function(q){class n{constructor(d,b,p){this.type=d,this.detail=b,this.timestamp=p}}q.LoaderEvent=n;class M{constructor(d){this._events=[new n(1,\"\",d)]}record(d,b){this._events.push(new n(d,b,q.Utilities.getHighPerformanceTimestamp()))}getEvents(){return this._events}}q.LoaderEventRecorder=M;class A{record(d,b){}getEvents(){return[]}}A.INSTANCE=new A,q.NullLoaderEventRecorder=A})(le||(le={}));var le;(function(q){class n{static fileUriToFilePath(A,i){if(i=decodeURI(i).replace(/%23/g,\"#\"),A){if(/^file:\\/\\/\\//.test(i))return i.substr(8);if(/^file:\\/\\//.test(i))return i.substr(5)}else if(/^file:\\/\\//.test(i))return i.substr(7);return i}static startsWith(A,i){return A.length>=i.length&&A.substr(0,i.length)===i}static endsWith(A,i){return A.length>=i.length&&A.substr(A.length-i.length)===i}static containsQueryString(A){return/^[^\\#]*\\?/gi.test(A)}static isAbsolutePath(A){return/^((http:\\/\\/)|(https:\\/\\/)|(file:\\/\\/)|(\\/))/.test(A)}static forEachProperty(A,i){if(A){let d;for(d in A)A.hasOwnProperty(d)&&i(d,A[d])}}static isEmpty(A){let i=!0;return n.forEachProperty(A,()=>{i=!1}),i}static recursiveClone(A){if(!A||typeof A!=\"object\"||A instanceof RegExp||!Array.isArray(A)&&Object.getPrototypeOf(A)!==Object.prototype)return A;let i=Array.isArray(A)?[]:{};return n.forEachProperty(A,(d,b)=>{b&&typeof b==\"object\"?i[d]=n.recursiveClone(b):i[d]=b}),i}static generateAnonymousModule(){return\"===anonymous\"+n.NEXT_ANONYMOUS_ID+++\"===\"}static isAnonymousModule(A){return n.startsWith(A,\"===anonymous\")}static getHighPerformanceTimestamp(){return this.PERFORMANCE_NOW_PROBED||(this.PERFORMANCE_NOW_PROBED=!0,this.HAS_PERFORMANCE_NOW=q.global.performance&&typeof q.global.performance.now==\"function\"),this.HAS_PERFORMANCE_NOW?q.global.performance.now():Date.now()}}n.NEXT_ANONYMOUS_ID=1,n.PERFORMANCE_NOW_PROBED=!1,n.HAS_PERFORMANCE_NOW=!1,q.Utilities=n})(le||(le={}));var le;(function(q){function n(i){if(i instanceof Error)return i;const d=new Error(i.message||String(i)||\"Unknown Error\");return i.stack&&(d.stack=i.stack),d}q.ensureError=n;class M{static validateConfigurationOptions(d){function b(p){if(p.phase===\"loading\"){console.error('Loading \"'+p.moduleId+'\" failed'),console.error(p),console.error(\"Here are the modules that depend on it:\"),console.error(p.neededBy);return}if(p.phase===\"factory\"){console.error('The factory function of \"'+p.moduleId+'\" has thrown an exception'),console.error(p),console.error(\"Here are the modules that depend on it:\"),console.error(p.neededBy);return}}if(d=d||{},typeof d.baseUrl!=\"string\"&&(d.baseUrl=\"\"),typeof d.isBuild!=\"boolean\"&&(d.isBuild=!1),typeof d.paths!=\"object\"&&(d.paths={}),typeof d.config!=\"object\"&&(d.config={}),typeof d.catchError>\"u\"&&(d.catchError=!1),typeof d.recordStats>\"u\"&&(d.recordStats=!1),typeof d.urlArgs!=\"string\"&&(d.urlArgs=\"\"),typeof d.onError!=\"function\"&&(d.onError=b),Array.isArray(d.ignoreDuplicateModules)||(d.ignoreDuplicateModules=[]),d.baseUrl.length>0&&(q.Utilities.endsWith(d.baseUrl,\"/\")||(d.baseUrl+=\"/\")),typeof d.cspNonce!=\"string\"&&(d.cspNonce=\"\"),typeof d.preferScriptTags>\"u\"&&(d.preferScriptTags=!1),d.nodeCachedData&&typeof d.nodeCachedData==\"object\"&&(typeof d.nodeCachedData.seed!=\"string\"&&(d.nodeCachedData.seed=\"seed\"),(typeof d.nodeCachedData.writeDelay!=\"number\"||d.nodeCachedData.writeDelay<0)&&(d.nodeCachedData.writeDelay=1e3*7),!d.nodeCachedData.path||typeof d.nodeCachedData.path!=\"string\")){const p=n(new Error(\"INVALID cached data configuration, 'path' MUST be set\"));p.phase=\"configuration\",d.onError(p),d.nodeCachedData=void 0}return d}static mergeConfigurationOptions(d=null,b=null){let p=q.Utilities.recursiveClone(b||{});return q.Utilities.forEachProperty(d,(h,o)=>{h===\"ignoreDuplicateModules\"&&typeof p.ignoreDuplicateModules<\"u\"?p.ignoreDuplicateModules=p.ignoreDuplicateModules.concat(o):h===\"paths\"&&typeof p.paths<\"u\"?q.Utilities.forEachProperty(o,(L,e)=>p.paths[L]=e):h===\"config\"&&typeof p.config<\"u\"?q.Utilities.forEachProperty(o,(L,e)=>p.config[L]=e):p[h]=q.Utilities.recursiveClone(o)}),M.validateConfigurationOptions(p)}}q.ConfigurationOptionsUtil=M;class A{constructor(d,b){if(this._env=d,this.options=M.mergeConfigurationOptions(b),this._createIgnoreDuplicateModulesMap(),this._createSortedPathsRules(),this.options.baseUrl===\"\"&&this.options.nodeRequire&&this.options.nodeRequire.main&&this.options.nodeRequire.main.filename&&this._env.isNode){let p=this.options.nodeRequire.main.filename,h=Math.max(p.lastIndexOf(\"/\"),p.lastIndexOf(\"\\\\\"));this.options.baseUrl=p.substring(0,h+1)}}_createIgnoreDuplicateModulesMap(){this.ignoreDuplicateModulesMap={};for(let d=0;d<this.options.ignoreDuplicateModules.length;d++)this.ignoreDuplicateModulesMap[this.options.ignoreDuplicateModules[d]]=!0}_createSortedPathsRules(){this.sortedPathsRules=[],q.Utilities.forEachProperty(this.options.paths,(d,b)=>{Array.isArray(b)?this.sortedPathsRules.push({from:d,to:b}):this.sortedPathsRules.push({from:d,to:[b]})}),this.sortedPathsRules.sort((d,b)=>b.from.length-d.from.length)}cloneAndMerge(d){return new A(this._env,M.mergeConfigurationOptions(d,this.options))}getOptionsLiteral(){return this.options}_applyPaths(d){let b;for(let p=0,h=this.sortedPathsRules.length;p<h;p++)if(b=this.sortedPathsRules[p],q.Utilities.startsWith(d,b.from)){let o=[];for(let L=0,e=b.to.length;L<e;L++)o.push(b.to[L]+d.substr(b.from.length));return o}return[d]}_addUrlArgsToUrl(d){return q.Utilities.containsQueryString(d)?d+\"&\"+this.options.urlArgs:d+\"?\"+this.options.urlArgs}_addUrlArgsIfNecessaryToUrl(d){return this.options.urlArgs?this._addUrlArgsToUrl(d):d}_addUrlArgsIfNecessaryToUrls(d){if(this.options.urlArgs)for(let b=0,p=d.length;b<p;b++)d[b]=this._addUrlArgsToUrl(d[b]);return d}moduleIdToPaths(d){if(this._env.isNode&&this.options.amdModulesPattern instanceof RegExp&&!this.options.amdModulesPattern.test(d))return this.isBuild()?[\"empty:\"]:[\"node|\"+d];let b=d,p;if(!q.Utilities.endsWith(b,\".js\")&&!q.Utilities.isAbsolutePath(b)){p=this._applyPaths(b);for(let h=0,o=p.length;h<o;h++)this.isBuild()&&p[h]===\"empty:\"||(q.Utilities.isAbsolutePath(p[h])||(p[h]=this.options.baseUrl+p[h]),!q.Utilities.endsWith(p[h],\".js\")&&!q.Utilities.containsQueryString(p[h])&&(p[h]=p[h]+\".js\"))}else!q.Utilities.endsWith(b,\".js\")&&!q.Utilities.containsQueryString(b)&&(b=b+\".js\"),p=[b];return this._addUrlArgsIfNecessaryToUrls(p)}requireToUrl(d){let b=d;return q.Utilities.isAbsolutePath(b)||(b=this._applyPaths(b)[0],q.Utilities.isAbsolutePath(b)||(b=this.options.baseUrl+b)),this._addUrlArgsIfNecessaryToUrl(b)}isBuild(){return this.options.isBuild}shouldInvokeFactory(d){return!!(!this.options.isBuild||q.Utilities.isAnonymousModule(d)||this.options.buildForceInvokeFactory&&this.options.buildForceInvokeFactory[d])}isDuplicateMessageIgnoredFor(d){return this.ignoreDuplicateModulesMap.hasOwnProperty(d)}getConfigForModule(d){if(this.options.config)return this.options.config[d]}shouldCatchError(){return this.options.catchError}shouldRecordStats(){return this.options.recordStats}onError(d){this.options.onError(d)}}q.Configuration=A})(le||(le={}));var le;(function(q){class n{constructor(o){this._env=o,this._scriptLoader=null,this._callbackMap={}}load(o,L,e,a){if(!this._scriptLoader)if(this._env.isWebWorker)this._scriptLoader=new i;else if(this._env.isElectronRenderer){const{preferScriptTags:c}=o.getConfig().getOptionsLiteral();c?this._scriptLoader=new M:this._scriptLoader=new d(this._env)}else this._env.isNode?this._scriptLoader=new d(this._env):this._scriptLoader=new M;let u={callback:e,errorback:a};if(this._callbackMap.hasOwnProperty(L)){this._callbackMap[L].push(u);return}this._callbackMap[L]=[u],this._scriptLoader.load(o,L,()=>this.triggerCallback(L),c=>this.triggerErrorback(L,c))}triggerCallback(o){let L=this._callbackMap[o];delete this._callbackMap[o];for(let e=0;e<L.length;e++)L[e].callback()}triggerErrorback(o,L){let e=this._callbackMap[o];delete this._callbackMap[o];for(let a=0;a<e.length;a++)e[a].errorback(L)}}class M{attachListeners(o,L,e){let a=()=>{o.removeEventListener(\"load\",u),o.removeEventListener(\"error\",c)},u=m=>{a(),L()},c=m=>{a(),e(m)};o.addEventListener(\"load\",u),o.addEventListener(\"error\",c)}load(o,L,e,a){if(/^node\\|/.test(L)){let u=o.getConfig().getOptionsLiteral(),c=b(o.getRecorder(),u.nodeRequire||q.global.nodeRequire),m=L.split(\"|\"),f=null;try{f=c(m[1])}catch(y){a(y);return}o.enqueueDefineAnonymousModule([],()=>f),e()}else{let u=document.createElement(\"script\");u.setAttribute(\"async\",\"async\"),u.setAttribute(\"type\",\"text/javascript\"),this.attachListeners(u,e,a);const{trustedTypesPolicy:c}=o.getConfig().getOptionsLiteral();c&&(L=c.createScriptURL(L)),u.setAttribute(\"src\",L);const{cspNonce:m}=o.getConfig().getOptionsLiteral();m&&u.setAttribute(\"nonce\",m),document.getElementsByTagName(\"head\")[0].appendChild(u)}}}function A(h){const{trustedTypesPolicy:o}=h.getConfig().getOptionsLiteral();try{return(o?self.eval(o.createScript(\"\",\"true\")):new Function(\"true\")).call(self),!0}catch{return!1}}class i{constructor(){this._cachedCanUseEval=null}_canUseEval(o){return this._cachedCanUseEval===null&&(this._cachedCanUseEval=A(o)),this._cachedCanUseEval}load(o,L,e,a){if(/^node\\|/.test(L)){const u=o.getConfig().getOptionsLiteral(),c=b(o.getRecorder(),u.nodeRequire||q.global.nodeRequire),m=L.split(\"|\");let f=null;try{f=c(m[1])}catch(y){a(y);return}o.enqueueDefineAnonymousModule([],function(){return f}),e()}else{const{trustedTypesPolicy:u}=o.getConfig().getOptionsLiteral();if(!(/^((http:)|(https:)|(file:))/.test(L)&&L.substring(0,self.origin.length)!==self.origin)&&this._canUseEval(o)){fetch(L).then(m=>{if(m.status!==200)throw new Error(m.statusText);return m.text()}).then(m=>{m=`${m}\n//# sourceURL=${L}`,(u?self.eval(u.createScript(\"\",m)):new Function(m)).call(self),e()}).then(void 0,a);return}try{u&&(L=u.createScriptURL(L)),importScripts(L),e()}catch(m){a(m)}}}}class d{constructor(o){this._env=o,this._didInitialize=!1,this._didPatchNodeRequire=!1}_init(o){this._didInitialize||(this._didInitialize=!0,this._fs=o(\"fs\"),this._vm=o(\"vm\"),this._path=o(\"path\"),this._crypto=o(\"crypto\"))}_initNodeRequire(o,L){const{nodeCachedData:e}=L.getConfig().getOptionsLiteral();if(!e||this._didPatchNodeRequire)return;this._didPatchNodeRequire=!0;const a=this,u=o(\"module\");function c(m){const f=m.constructor;let y=function(E){try{return m.require(E)}finally{}};return y.resolve=function(E,S){return f._resolveFilename(E,m,!1,S)},y.resolve.paths=function(E){return f._resolveLookupPaths(E,m)},y.main=process.mainModule,y.extensions=f._extensions,y.cache=f._cache,y}u.prototype._compile=function(m,f){const y=u.wrap(m.replace(/^#!.*/,\"\")),w=L.getRecorder(),E=a._getCachedDataPath(e,f),S={filename:f};let C;try{const R=a._fs.readFileSync(E);C=R.slice(0,16),S.cachedData=R.slice(16),w.record(60,E)}catch{w.record(61,E)}const r=new a._vm.Script(y,S),s=r.runInThisContext(S),l=a._path.dirname(f),_=c(this),g=[this.exports,_,this,f,l,process,Re,Buffer],v=s.apply(this.exports,g);return a._handleCachedData(r,y,E,!S.cachedData,L),a._verifyCachedData(r,y,E,C,L),v}}load(o,L,e,a){const u=o.getConfig().getOptionsLiteral(),c=b(o.getRecorder(),u.nodeRequire||q.global.nodeRequire),m=u.nodeInstrumenter||function(y){return y};this._init(c),this._initNodeRequire(c,o);let f=o.getRecorder();if(/^node\\|/.test(L)){let y=L.split(\"|\"),w=null;try{w=c(y[1])}catch(E){a(E);return}o.enqueueDefineAnonymousModule([],()=>w),e()}else{L=q.Utilities.fileUriToFilePath(this._env.isWindows,L);const y=this._path.normalize(L),w=this._getElectronRendererScriptPathOrUri(y),E=!!u.nodeCachedData,S=E?this._getCachedDataPath(u.nodeCachedData,L):void 0;this._readSourceAndCachedData(y,S,f,(C,r,s,l)=>{if(C){a(C);return}let _;r.charCodeAt(0)===d._BOM?_=d._PREFIX+r.substring(1)+d._SUFFIX:_=d._PREFIX+r+d._SUFFIX,_=m(_,y);const g={filename:w,cachedData:s},v=this._createAndEvalScript(o,_,g,e,a);this._handleCachedData(v,_,S,E&&!s,o),this._verifyCachedData(v,_,S,l,o)})}}_createAndEvalScript(o,L,e,a,u){const c=o.getRecorder();c.record(31,e.filename);const m=new this._vm.Script(L,e),f=m.runInThisContext(e),y=o.getGlobalAMDDefineFunc();let w=!1;const E=function(){return w=!0,y.apply(null,arguments)};return E.amd=y.amd,f.call(q.global,o.getGlobalAMDRequireFunc(),E,e.filename,this._path.dirname(e.filename)),c.record(32,e.filename),w?a():u(new Error(`Didn't receive define call in ${e.filename}!`)),m}_getElectronRendererScriptPathOrUri(o){if(!this._env.isElectronRenderer)return o;let L=o.match(/^([a-z])\\:(.*)/i);return L?`file:///${(L[1].toUpperCase()+\":\"+L[2]).replace(/\\\\/g,\"/\")}`:`file://${o}`}_getCachedDataPath(o,L){const e=this._crypto.createHash(\"md5\").update(L,\"utf8\").update(o.seed,\"utf8\").update(process.arch,\"\").digest(\"hex\"),a=this._path.basename(L).replace(/\\.js$/,\"\");return this._path.join(o.path,`${a}-${e}.code`)}_handleCachedData(o,L,e,a,u){o.cachedDataRejected?this._fs.unlink(e,c=>{u.getRecorder().record(62,e),this._createAndWriteCachedData(o,L,e,u),c&&u.getConfig().onError(c)}):a&&this._createAndWriteCachedData(o,L,e,u)}_createAndWriteCachedData(o,L,e,a){let u=Math.ceil(a.getConfig().getOptionsLiteral().nodeCachedData.writeDelay*(1+Math.random())),c=-1,m=0,f;const y=()=>{setTimeout(()=>{f||(f=this._crypto.createHash(\"md5\").update(L,\"utf8\").digest());const w=o.createCachedData();if(!(w.length===0||w.length===c||m>=5)){if(w.length<c){y();return}c=w.length,this._fs.writeFile(e,Buffer.concat([f,w]),E=>{E&&a.getConfig().onError(E),a.getRecorder().record(63,e),y()})}},u*Math.pow(4,m++))};y()}_readSourceAndCachedData(o,L,e,a){if(!L)this._fs.readFile(o,{encoding:\"utf8\"},a);else{let u,c,m,f=2;const y=w=>{w?a(w):--f===0&&a(void 0,u,c,m)};this._fs.readFile(o,{encoding:\"utf8\"},(w,E)=>{u=E,y(w)}),this._fs.readFile(L,(w,E)=>{!w&&E&&E.length>0?(m=E.slice(0,16),c=E.slice(16),e.record(60,L)):e.record(61,L),y()})}}_verifyCachedData(o,L,e,a,u){a&&(o.cachedDataRejected||setTimeout(()=>{const c=this._crypto.createHash(\"md5\").update(L,\"utf8\").digest();a.equals(c)||(u.getConfig().onError(new Error(`FAILED TO VERIFY CACHED DATA, deleting stale '${e}' now, but a RESTART IS REQUIRED`)),this._fs.unlink(e,m=>{m&&u.getConfig().onError(m)}))},Math.ceil(5e3*(1+Math.random()))))}}d._BOM=65279,d._PREFIX=\"(function (require, define, __filename, __dirname) { \",d._SUFFIX=`\n});`;function b(h,o){if(o.__$__isRecorded)return o;const L=function(a){h.record(33,a);try{return o(a)}finally{h.record(34,a)}};return L.__$__isRecorded=!0,L}q.ensureRecordedNodeRequire=b;function p(h){return new n(h)}q.createScriptLoader=p})(le||(le={}));var le;(function(q){class n{constructor(h){let o=h.lastIndexOf(\"/\");o!==-1?this.fromModulePath=h.substr(0,o+1):this.fromModulePath=\"\"}static _normalizeModuleId(h){let o=h,L;for(L=/\\/\\.\\//;L.test(o);)o=o.replace(L,\"/\");for(o=o.replace(/^\\.\\//g,\"\"),L=/\\/(([^\\/])|([^\\/][^\\/\\.])|([^\\/\\.][^\\/])|([^\\/][^\\/][^\\/]+))\\/\\.\\.\\//;L.test(o);)o=o.replace(L,\"/\");return o=o.replace(/^(([^\\/])|([^\\/][^\\/\\.])|([^\\/\\.][^\\/])|([^\\/][^\\/][^\\/]+))\\/\\.\\.\\//,\"\"),o}resolveModule(h){let o=h;return q.Utilities.isAbsolutePath(o)||(q.Utilities.startsWith(o,\"./\")||q.Utilities.startsWith(o,\"../\"))&&(o=n._normalizeModuleId(this.fromModulePath+o)),o}}n.ROOT=new n(\"\"),q.ModuleIdResolver=n;class M{constructor(h,o,L,e,a,u){this.id=h,this.strId=o,this.dependencies=L,this._callback=e,this._errorback=a,this.moduleIdResolver=u,this.exports={},this.error=null,this.exportsPassedIn=!1,this.unresolvedDependenciesCount=this.dependencies.length,this._isComplete=!1}static _safeInvokeFunction(h,o){try{return{returnedValue:h.apply(q.global,o),producedError:null}}catch(L){return{returnedValue:null,producedError:L}}}static _invokeFactory(h,o,L,e){return h.shouldInvokeFactory(o)?h.shouldCatchError()?this._safeInvokeFunction(L,e):{returnedValue:L.apply(q.global,e),producedError:null}:{returnedValue:null,producedError:null}}complete(h,o,L,e){this._isComplete=!0;let a=null;if(this._callback)if(typeof this._callback==\"function\"){h.record(21,this.strId);let u=M._invokeFactory(o,this.strId,this._callback,L);a=u.producedError,h.record(22,this.strId),!a&&typeof u.returnedValue<\"u\"&&(!this.exportsPassedIn||q.Utilities.isEmpty(this.exports))&&(this.exports=u.returnedValue)}else this.exports=this._callback;if(a){let u=q.ensureError(a);u.phase=\"factory\",u.moduleId=this.strId,u.neededBy=e(this.id),this.error=u,o.onError(u)}this.dependencies=null,this._callback=null,this._errorback=null,this.moduleIdResolver=null}onDependencyError(h){return this._isComplete=!0,this.error=h,this._errorback?(this._errorback(h),!0):!1}isComplete(){return this._isComplete}}q.Module=M;class A{constructor(){this._nextId=0,this._strModuleIdToIntModuleId=new Map,this._intModuleIdToStrModuleId=[],this.getModuleId(\"exports\"),this.getModuleId(\"module\"),this.getModuleId(\"require\")}getMaxModuleId(){return this._nextId}getModuleId(h){let o=this._strModuleIdToIntModuleId.get(h);return typeof o>\"u\"&&(o=this._nextId++,this._strModuleIdToIntModuleId.set(h,o),this._intModuleIdToStrModuleId[o]=h),o}getStrModuleId(h){return this._intModuleIdToStrModuleId[h]}}class i{constructor(h){this.id=h}}i.EXPORTS=new i(0),i.MODULE=new i(1),i.REQUIRE=new i(2),q.RegularDependency=i;class d{constructor(h,o,L){this.id=h,this.pluginId=o,this.pluginParam=L}}q.PluginDependency=d;class b{constructor(h,o,L,e,a=0){this._env=h,this._scriptLoader=o,this._loaderAvailableTimestamp=a,this._defineFunc=L,this._requireFunc=e,this._moduleIdProvider=new A,this._config=new q.Configuration(this._env),this._hasDependencyCycle=!1,this._modules2=[],this._knownModules2=[],this._inverseDependencies2=[],this._inversePluginDependencies2=new Map,this._currentAnonymousDefineCall=null,this._recorder=null,this._buildInfoPath=[],this._buildInfoDefineStack=[],this._buildInfoDependencies=[],this._requireFunc.moduleManager=this}reset(){return new b(this._env,this._scriptLoader,this._defineFunc,this._requireFunc,this._loaderAvailableTimestamp)}getGlobalAMDDefineFunc(){return this._defineFunc}getGlobalAMDRequireFunc(){return this._requireFunc}static _findRelevantLocationInStack(h,o){let L=u=>u.replace(/\\\\/g,\"/\"),e=L(h),a=o.split(/\\n/);for(let u=0;u<a.length;u++){let c=a[u].match(/(.*):(\\d+):(\\d+)\\)?$/);if(c){let m=c[1],f=c[2],y=c[3],w=Math.max(m.lastIndexOf(\" \")+1,m.lastIndexOf(\"(\")+1);if(m=m.substr(w),m=L(m),m===e){let E={line:parseInt(f,10),col:parseInt(y,10)};return E.line===1&&(E.col-=53),E}}}throw new Error(\"Could not correlate define call site for needle \"+h)}getBuildInfo(){if(!this._config.isBuild())return null;let h=[],o=0;for(let L=0,e=this._modules2.length;L<e;L++){let a=this._modules2[L];if(!a)continue;let u=this._buildInfoPath[a.id]||null,c=this._buildInfoDefineStack[a.id]||null,m=this._buildInfoDependencies[a.id];h[o++]={id:a.strId,path:u,defineLocation:u&&c?b._findRelevantLocationInStack(u,c):null,dependencies:m,shim:null,exports:a.exports}}return h}getRecorder(){return this._recorder||(this._config.shouldRecordStats()?this._recorder=new q.LoaderEventRecorder(this._loaderAvailableTimestamp):this._recorder=q.NullLoaderEventRecorder.INSTANCE),this._recorder}getLoaderEvents(){return this.getRecorder().getEvents()}enqueueDefineAnonymousModule(h,o){if(this._currentAnonymousDefineCall!==null)throw new Error(\"Can only have one anonymous define call per script file\");let L=null;this._config.isBuild()&&(L=new Error(\"StackLocation\").stack||null),this._currentAnonymousDefineCall={stack:L,dependencies:h,callback:o}}defineModule(h,o,L,e,a,u=new n(h)){let c=this._moduleIdProvider.getModuleId(h);if(this._modules2[c]){this._config.isDuplicateMessageIgnoredFor(h)||console.warn(\"Duplicate definition of module '\"+h+\"'\");return}let m=new M(c,h,this._normalizeDependencies(o,u),L,e,u);this._modules2[c]=m,this._config.isBuild()&&(this._buildInfoDefineStack[c]=a,this._buildInfoDependencies[c]=(m.dependencies||[]).map(f=>this._moduleIdProvider.getStrModuleId(f.id))),this._resolve(m)}_normalizeDependency(h,o){if(h===\"exports\")return i.EXPORTS;if(h===\"module\")return i.MODULE;if(h===\"require\")return i.REQUIRE;let L=h.indexOf(\"!\");if(L>=0){let e=o.resolveModule(h.substr(0,L)),a=o.resolveModule(h.substr(L+1)),u=this._moduleIdProvider.getModuleId(e+\"!\"+a),c=this._moduleIdProvider.getModuleId(e);return new d(u,c,a)}return new i(this._moduleIdProvider.getModuleId(o.resolveModule(h)))}_normalizeDependencies(h,o){let L=[],e=0;for(let a=0,u=h.length;a<u;a++)L[e++]=this._normalizeDependency(h[a],o);return L}_relativeRequire(h,o,L,e){if(typeof o==\"string\")return this.synchronousRequire(o,h);this.defineModule(q.Utilities.generateAnonymousModule(),o,L,e,null,h)}synchronousRequire(h,o=new n(h)){let L=this._normalizeDependency(h,o),e=this._modules2[L.id];if(!e)throw new Error(\"Check dependency list! Synchronous require cannot resolve module '\"+h+\"'. This is the first mention of this module!\");if(!e.isComplete())throw new Error(\"Check dependency list! Synchronous require cannot resolve module '\"+h+\"'. This module has not been resolved completely yet.\");if(e.error)throw e.error;return e.exports}configure(h,o){let L=this._config.shouldRecordStats();o?this._config=new q.Configuration(this._env,h):this._config=this._config.cloneAndMerge(h),this._config.shouldRecordStats()&&!L&&(this._recorder=null)}getConfig(){return this._config}_onLoad(h){if(this._currentAnonymousDefineCall!==null){let o=this._currentAnonymousDefineCall;this._currentAnonymousDefineCall=null,this.defineModule(this._moduleIdProvider.getStrModuleId(h),o.dependencies,o.callback,null,o.stack)}}_createLoadError(h,o){let L=this._moduleIdProvider.getStrModuleId(h),e=(this._inverseDependencies2[h]||[]).map(u=>this._moduleIdProvider.getStrModuleId(u));const a=q.ensureError(o);return a.phase=\"loading\",a.moduleId=L,a.neededBy=e,a}_onLoadError(h,o){const L=this._createLoadError(h,o);this._modules2[h]||(this._modules2[h]=new M(h,this._moduleIdProvider.getStrModuleId(h),[],()=>{},null,null));let e=[];for(let c=0,m=this._moduleIdProvider.getMaxModuleId();c<m;c++)e[c]=!1;let a=!1,u=[];for(u.push(h),e[h]=!0;u.length>0;){let c=u.shift(),m=this._modules2[c];m&&(a=m.onDependencyError(L)||a);let f=this._inverseDependencies2[c];if(f)for(let y=0,w=f.length;y<w;y++){let E=f[y];e[E]||(u.push(E),e[E]=!0)}}a||this._config.onError(L)}_hasDependencyPath(h,o){let L=this._modules2[h];if(!L)return!1;let e=[];for(let u=0,c=this._moduleIdProvider.getMaxModuleId();u<c;u++)e[u]=!1;let a=[];for(a.push(L),e[h]=!0;a.length>0;){let c=a.shift().dependencies;if(c)for(let m=0,f=c.length;m<f;m++){let y=c[m];if(y.id===o)return!0;let w=this._modules2[y.id];w&&!e[y.id]&&(e[y.id]=!0,a.push(w))}}return!1}_findCyclePath(h,o,L){if(h===o||L===50)return[h];let e=this._modules2[h];if(!e)return null;let a=e.dependencies;if(a)for(let u=0,c=a.length;u<c;u++){let m=this._findCyclePath(a[u].id,o,L+1);if(m!==null)return m.push(h),m}return null}_createRequire(h){let o=(L,e,a)=>this._relativeRequire(h,L,e,a);return o.toUrl=L=>this._config.requireToUrl(h.resolveModule(L)),o.getStats=()=>this.getLoaderEvents(),o.hasDependencyCycle=()=>this._hasDependencyCycle,o.config=(L,e=!1)=>{this.configure(L,e)},o.__$__nodeRequire=q.global.nodeRequire,o}_loadModule(h){if(this._modules2[h]||this._knownModules2[h])return;this._knownModules2[h]=!0;let o=this._moduleIdProvider.getStrModuleId(h),L=this._config.moduleIdToPaths(o),e=/^@[^\\/]+\\/[^\\/]+$/;this._env.isNode&&(o.indexOf(\"/\")===-1||e.test(o))&&L.push(\"node|\"+o);let a=-1,u=c=>{if(a++,a>=L.length)this._onLoadError(h,c);else{let m=L[a],f=this.getRecorder();if(this._config.isBuild()&&m===\"empty:\"){this._buildInfoPath[h]=m,this.defineModule(this._moduleIdProvider.getStrModuleId(h),[],null,null,null),this._onLoad(h);return}f.record(10,m),this._scriptLoader.load(this,m,()=>{this._config.isBuild()&&(this._buildInfoPath[h]=m),f.record(11,m),this._onLoad(h)},y=>{f.record(12,m),u(y)})}};u(null)}_loadPluginDependency(h,o){if(this._modules2[o.id]||this._knownModules2[o.id])return;this._knownModules2[o.id]=!0;let L=e=>{this.defineModule(this._moduleIdProvider.getStrModuleId(o.id),[],e,null,null)};L.error=e=>{this._config.onError(this._createLoadError(o.id,e))},h.load(o.pluginParam,this._createRequire(n.ROOT),L,this._config.getOptionsLiteral())}_resolve(h){let o=h.dependencies;if(o)for(let L=0,e=o.length;L<e;L++){let a=o[L];if(a===i.EXPORTS){h.exportsPassedIn=!0,h.unresolvedDependenciesCount--;continue}if(a===i.MODULE){h.unresolvedDependenciesCount--;continue}if(a===i.REQUIRE){h.unresolvedDependenciesCount--;continue}let u=this._modules2[a.id];if(u&&u.isComplete()){if(u.error){h.onDependencyError(u.error);return}h.unresolvedDependenciesCount--;continue}if(this._hasDependencyPath(a.id,h.id)){this._hasDependencyCycle=!0,console.warn(\"There is a dependency cycle between '\"+this._moduleIdProvider.getStrModuleId(a.id)+\"' and '\"+this._moduleIdProvider.getStrModuleId(h.id)+\"'. The cyclic path follows:\");let c=this._findCyclePath(a.id,h.id,0)||[];c.reverse(),c.push(a.id),console.warn(c.map(m=>this._moduleIdProvider.getStrModuleId(m)).join(` => \n`)),h.unresolvedDependenciesCount--;continue}if(this._inverseDependencies2[a.id]=this._inverseDependencies2[a.id]||[],this._inverseDependencies2[a.id].push(h.id),a instanceof d){let c=this._modules2[a.pluginId];if(c&&c.isComplete()){this._loadPluginDependency(c.exports,a);continue}let m=this._inversePluginDependencies2.get(a.pluginId);m||(m=[],this._inversePluginDependencies2.set(a.pluginId,m)),m.push(a),this._loadModule(a.pluginId);continue}this._loadModule(a.id)}h.unresolvedDependenciesCount===0&&this._onModuleComplete(h)}_onModuleComplete(h){let o=this.getRecorder();if(h.isComplete())return;let L=h.dependencies,e=[];if(L)for(let m=0,f=L.length;m<f;m++){let y=L[m];if(y===i.EXPORTS){e[m]=h.exports;continue}if(y===i.MODULE){e[m]={id:h.strId,config:()=>this._config.getConfigForModule(h.strId)};continue}if(y===i.REQUIRE){e[m]=this._createRequire(h.moduleIdResolver);continue}let w=this._modules2[y.id];if(w){e[m]=w.exports;continue}e[m]=null}const a=m=>(this._inverseDependencies2[m]||[]).map(f=>this._moduleIdProvider.getStrModuleId(f));h.complete(o,this._config,e,a);let u=this._inverseDependencies2[h.id];if(this._inverseDependencies2[h.id]=null,u)for(let m=0,f=u.length;m<f;m++){let y=u[m],w=this._modules2[y];w.unresolvedDependenciesCount--,w.unresolvedDependenciesCount===0&&this._onModuleComplete(w)}let c=this._inversePluginDependencies2.get(h.id);if(c){this._inversePluginDependencies2.delete(h.id);for(let m=0,f=c.length;m<f;m++)this._loadPluginDependency(h.exports,c[m])}}}q.ModuleManager=b})(le||(le={}));var Y,le;(function(q){const n=new q.Environment;let M=null;const A=function(p,h,o){typeof p!=\"string\"&&(o=h,h=p,p=null),(typeof h!=\"object\"||!Array.isArray(h))&&(o=h,h=null),h||(h=[\"require\",\"exports\",\"module\"]),p?M.defineModule(p,h,o,null,null):M.enqueueDefineAnonymousModule(h,o)};A.amd={jQuery:!0};const i=function(p,h=!1){M.configure(p,h)},d=function(){if(arguments.length===1){if(arguments[0]instanceof Object&&!Array.isArray(arguments[0])){i(arguments[0]);return}if(typeof arguments[0]==\"string\")return M.synchronousRequire(arguments[0])}if((arguments.length===2||arguments.length===3)&&Array.isArray(arguments[0])){M.defineModule(q.Utilities.generateAnonymousModule(),arguments[0],arguments[1],arguments[2],null);return}throw new Error(\"Unrecognized require call\")};d.config=i,d.getConfig=function(){return M.getConfig().getOptionsLiteral()},d.reset=function(){M=M.reset()},d.getBuildInfo=function(){return M.getBuildInfo()},d.getStats=function(){return M.getLoaderEvents()},d.define=A;function b(){if(typeof q.global.require<\"u\"||typeof require<\"u\"){const p=q.global.require||require;if(typeof p==\"function\"&&typeof p.resolve==\"function\"){const h=q.ensureRecordedNodeRequire(M.getRecorder(),p);q.global.nodeRequire=h,d.nodeRequire=h,d.__$__nodeRequire=h}}n.isNode&&!n.isElectronRenderer&&!n.isElectronNodeIntegrationWebWorker?module.exports=d:(n.isElectronRenderer||(q.global.define=A),q.global.require=d)}q.init=b,(typeof q.global.define!=\"function\"||!q.global.define.amd)&&(M=new q.ModuleManager(n,q.createScriptLoader(n),A,d,q.Utilities.getHighPerformanceTimestamp()),typeof q.global.require<\"u\"&&typeof q.global.require!=\"function\"&&d.config(q.global.require),Y=function(){return A.apply(null,arguments)},Y.amd=A.amd,typeof doNotInitLoader>\"u\"&&b())})(le||(le={})),Y(X[19],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.load=n.create=n.setPseudoTranslation=n.getConfiguredDefaultLocale=n.localize2=n.localize=void 0;let M=typeof document<\"u\"&&document.location&&document.location.hash.indexOf(\"pseudo=true\")>=0;const A=\"i-default\";function i(f,y){let w;return y.length===0?w=f:w=f.replace(/\\{(\\d+)\\}/g,(E,S)=>{const C=S[0],r=y[C];let s=E;return typeof r==\"string\"?s=r:(typeof r==\"number\"||typeof r==\"boolean\"||r===void 0||r===null)&&(s=String(r)),s}),M&&(w=\"\\uFF3B\"+w.replace(/[aouei]/g,\"$&$&\")+\"\\uFF3D\"),w}function d(f,y){let w=f[y];return w||(w=f[\"*\"],w)?w:null}function b(f){return f.charAt(f.length-1)===\"/\"?f:f+\"/\"}async function p(f,y,w){const E=b(f)+b(y)+\"vscode/\"+b(w),S=await fetch(E);if(S.ok)return await S.json();throw new Error(`${S.status} - ${S.statusText}`)}function h(f){return function(y,w){const E=Array.prototype.slice.call(arguments,2);return i(f[y],E)}}function o(f){return(y,w,...E)=>({value:i(f[y],E),original:i(w,E)})}function L(f,y,...w){return i(y,w)}n.localize=L;function e(f,y,...w){const E=i(y,w);return{value:E,original:E}}n.localize2=e;function a(f){}n.getConfiguredDefaultLocale=a;function u(f){M=f}n.setPseudoTranslation=u;function c(f,y){var w;return{localize:h(y[f]),localize2:o(y[f]),getConfiguredDefaultLocale:(w=y.getConfiguredDefaultLocale)!==null&&w!==void 0?w:E=>{}}}n.create=c;function m(f,y,w,E){var S;const C=(S=E[\"vs/nls\"])!==null&&S!==void 0?S:{};if(!f||f.length===0)return w({localize:L,localize2:e,getConfiguredDefaultLocale:()=>{var g;return(g=C.availableLanguages)===null||g===void 0?void 0:g[\"*\"]}});const r=C.availableLanguages?d(C.availableLanguages,f):null,s=r===null||r===A;let l=\".nls\";s||(l=l+\".\"+r);const _=g=>{Array.isArray(g)?(g.localize=h(g),g.localize2=o(g)):(g.localize=h(g[f]),g.localize2=o(g[f])),g.getConfiguredDefaultLocale=()=>{var v;return(v=C.availableLanguages)===null||v===void 0?void 0:v[\"*\"]},w(g)};typeof C.loadBundle==\"function\"?C.loadBundle(f,r,(g,v)=>{g?y([f+\".nls\"],_):_(v)}):C.translationServiceUrl&&!s?(async()=>{var g;try{const v=await p(C.translationServiceUrl,r,f);return _(v)}catch(v){if(!r.includes(\"-\"))return console.error(v),y([f+\".nls\"],_);try{const R=r.split(\"-\")[0],N=await p(C.translationServiceUrl,R,f);return(g=C.availableLanguages)!==null&&g!==void 0||(C.availableLanguages={}),C.availableLanguages[\"*\"]=R,_(N)}catch(R){return console.error(R),y([f+\".nls\"],_)}}})():y([f+l],_,g=>{if(l===\".nls\"){console.error(\"Failed trying to load default language strings\",g);return}console.error(`Failed to load message bundle for language ${r}. Falling back to the default language:`,g),y([f+\".nls\"],_)})}n.load=m}),function(){const q=globalThis.MonacoEnvironment,n=q&&q.baseUrl?q.baseUrl:\"../../../\";function M(L,e){var a;if(q?.createTrustedTypesPolicy)try{return q.createTrustedTypesPolicy(L,e)}catch(u){console.warn(u);return}try{return(a=self.trustedTypes)===null||a===void 0?void 0:a.createPolicy(L,e)}catch(u){console.warn(u);return}}const A=M(\"amdLoader\",{createScriptURL:L=>L,createScript:(L,...e)=>{const a=e.slice(0,-1).join(\",\"),u=e.pop().toString();return`(function anonymous(${a}) { ${u}\n})`}});function i(){try{return(A?globalThis.eval(A.createScript(\"\",\"true\")):new Function(\"true\")).call(globalThis),!0}catch{return!1}}function d(){return new Promise((L,e)=>{if(typeof globalThis.define==\"function\"&&globalThis.define.amd)return L();const a=n+\"vs/loader.js\";if(!(/^((http:)|(https:)|(file:))/.test(a)&&a.substring(0,globalThis.origin.length)!==globalThis.origin)&&i()){fetch(a).then(c=>{if(c.status!==200)throw new Error(c.statusText);return c.text()}).then(c=>{c=`${c}\n//# sourceURL=${a}`,(A?globalThis.eval(A.createScript(\"\",c)):new Function(c)).call(globalThis),L()}).then(void 0,e);return}A?importScripts(A.createScriptURL(a)):importScripts(a),L()})}function b(){require.config({baseUrl:n,catchError:!0,trustedTypesPolicy:A,amdModulesPattern:/^vs\\//})}function p(L){d().then(()=>{b(),require([L],function(e){setTimeout(function(){const a=e.create((u,c)=>{globalThis.postMessage(u,c)},null);for(globalThis.onmessage=u=>a.onmessage(u.data,u.ports);o.length>0;){const u=o.shift();a.onmessage(u.data,u.ports)}},0)})})}typeof globalThis.define==\"function\"&&globalThis.define.amd&&b();let h=!0;const o=[];globalThis.onmessage=L=>{if(!h){o.push(L);return}h=!1,p(L.data)}}(),Y(X[7],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.CallbackIterable=n.ArrayQueue=n.reverseOrder=n.booleanComparator=n.numberComparator=n.tieBreakComparators=n.compareBy=n.CompareResult=n.splice=n.insertInto=n.asArray=n.pushMany=n.pushToEnd=n.pushToStart=n.arrayInsert=n.range=n.firstOrDefault=n.distinct=n.isNonEmptyArray=n.isFalsyOrEmpty=n.coalesceInPlace=n.coalesce=n.forEachWithNeighbors=n.forEachAdjacent=n.groupAdjacentBy=n.groupBy=n.quickSelect=n.binarySearch2=n.binarySearch=n.removeFastWithoutKeepingOrder=n.equals=n.tail2=n.tail=void 0;function M(k,O=0){return k[k.length-(1+O)]}n.tail=M;function A(k){if(k.length===0)throw new Error(\"Invalid tail call\");return[k.slice(0,k.length-1),k[k.length-1]]}n.tail2=A;function i(k,O,I=(W,z)=>W===z){if(k===O)return!0;if(!k||!O||k.length!==O.length)return!1;for(let W=0,z=k.length;W<z;W++)if(!I(k[W],O[W]))return!1;return!0}n.equals=i;function d(k,O){const I=k.length-1;O<I&&(k[O]=k[I]),k.pop()}n.removeFastWithoutKeepingOrder=d;function b(k,O,I){return p(k.length,W=>I(k[W],O))}n.binarySearch=b;function p(k,O){let I=0,W=k-1;for(;I<=W;){const z=(I+W)/2|0,G=O(z);if(G<0)I=z+1;else if(G>0)W=z-1;else return z}return-(I+1)}n.binarySearch2=p;function h(k,O,I){if(k=k|0,k>=O.length)throw new TypeError(\"invalid index\");const W=O[Math.floor(O.length*Math.random())],z=[],G=[],t=[];for(const se of O){const ce=I(se,W);ce<0?z.push(se):ce>0?G.push(se):t.push(se)}return k<z.length?h(k,z,I):k<z.length+t.length?t[0]:h(k-(z.length+t.length),G,I)}n.quickSelect=h;function o(k,O){const I=[];let W;for(const z of k.slice(0).sort(O))!W||O(W[0],z)!==0?(W=[z],I.push(W)):W.push(z);return I}n.groupBy=o;function*L(k,O){let I,W;for(const z of k)W!==void 0&&O(W,z)?I.push(z):(I&&(yield I),I=[z]),W=z;I&&(yield I)}n.groupAdjacentBy=L;function e(k,O){for(let I=0;I<=k.length;I++)O(I===0?void 0:k[I-1],I===k.length?void 0:k[I])}n.forEachAdjacent=e;function a(k,O){for(let I=0;I<k.length;I++)O(I===0?void 0:k[I-1],k[I],I+1===k.length?void 0:k[I+1])}n.forEachWithNeighbors=a;function u(k){return k.filter(O=>!!O)}n.coalesce=u;function c(k){let O=0;for(let I=0;I<k.length;I++)k[I]&&(k[O]=k[I],O+=1);k.length=O}n.coalesceInPlace=c;function m(k){return!Array.isArray(k)||k.length===0}n.isFalsyOrEmpty=m;function f(k){return Array.isArray(k)&&k.length>0}n.isNonEmptyArray=f;function y(k,O=I=>I){const I=new Set;return k.filter(W=>{const z=O(W);return I.has(z)?!1:(I.add(z),!0)})}n.distinct=y;function w(k,O){return k.length>0?k[0]:O}n.firstOrDefault=w;function E(k,O){let I=typeof O==\"number\"?k:0;typeof O==\"number\"?I=k:(I=0,O=k);const W=[];if(I<=O)for(let z=I;z<O;z++)W.push(z);else for(let z=I;z>O;z--)W.push(z);return W}n.range=E;function S(k,O,I){const W=k.slice(0,O),z=k.slice(O);return W.concat(I,z)}n.arrayInsert=S;function C(k,O){const I=k.indexOf(O);I>-1&&(k.splice(I,1),k.unshift(O))}n.pushToStart=C;function r(k,O){const I=k.indexOf(O);I>-1&&(k.splice(I,1),k.push(O))}n.pushToEnd=r;function s(k,O){for(const I of O)k.push(I)}n.pushMany=s;function l(k){return Array.isArray(k)?k:[k]}n.asArray=l;function _(k,O,I){const W=v(k,O),z=k.length,G=I.length;k.length=z+G;for(let t=z-1;t>=W;t--)k[t+G]=k[t];for(let t=0;t<G;t++)k[t+W]=I[t]}n.insertInto=_;function g(k,O,I,W){const z=v(k,O);let G=k.splice(z,I);return G===void 0&&(G=[]),_(k,z,W),G}n.splice=g;function v(k,O){return O<0?Math.max(O+k.length,0):Math.min(O,k.length)}var R;(function(k){function O(G){return G<0}k.isLessThan=O;function I(G){return G<=0}k.isLessThanOrEqual=I;function W(G){return G>0}k.isGreaterThan=W;function z(G){return G===0}k.isNeitherLessOrGreaterThan=z,k.greaterThan=1,k.lessThan=-1,k.neitherLessOrGreaterThan=0})(R||(n.CompareResult=R={}));function N(k,O){return(I,W)=>O(k(I),k(W))}n.compareBy=N;function D(...k){return(O,I)=>{for(const W of k){const z=W(O,I);if(!R.isNeitherLessOrGreaterThan(z))return z}return R.neitherLessOrGreaterThan}}n.tieBreakComparators=D;const x=(k,O)=>k-O;n.numberComparator=x;const T=(k,O)=>(0,n.numberComparator)(k?1:0,O?1:0);n.booleanComparator=T;function F(k){return(O,I)=>-k(O,I)}n.reverseOrder=F;class B{constructor(O){this.items=O,this.firstIdx=0,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(O){let I=this.firstIdx;for(;I<this.items.length&&O(this.items[I]);)I++;const W=I===this.firstIdx?null:this.items.slice(this.firstIdx,I);return this.firstIdx=I,W}takeFromEndWhile(O){let I=this.lastIdx;for(;I>=0&&O(this.items[I]);)I--;const W=I===this.lastIdx?null:this.items.slice(I+1,this.lastIdx+1);return this.lastIdx=I,W}peek(){if(this.length!==0)return this.items[this.firstIdx]}dequeue(){const O=this.items[this.firstIdx];return this.firstIdx++,O}takeCount(O){const I=this.items.slice(this.firstIdx,this.firstIdx+O);return this.firstIdx+=O,I}}n.ArrayQueue=B;class V{constructor(O){this.iterate=O}toArray(){const O=[];return this.iterate(I=>(O.push(I),!0)),O}filter(O){return new V(I=>this.iterate(W=>O(W)?I(W):!0))}map(O){return new V(I=>this.iterate(W=>I(O(W))))}findLast(O){let I;return this.iterate(W=>(O(W)&&(I=W),!0)),I}findLastMaxBy(O){let I,W=!0;return this.iterate(z=>((W||R.isGreaterThan(O(z,I)))&&(W=!1,I=z),!0)),I}}n.CallbackIterable=V,V.empty=new V(k=>{})}),Y(X[11],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.mapFindFirst=n.findMaxIdxBy=n.findFirstMinBy=n.findLastMaxBy=n.findFirstMaxBy=n.MonotonousArray=n.findFirstIdxMonotonousOrArrLen=n.findFirstMonotonous=n.findLastIdxMonotonous=n.findLastMonotonous=n.findLastIdx=n.findLast=void 0;function M(c,m,f){const y=A(c,m);if(y!==-1)return c[y]}n.findLast=M;function A(c,m,f=c.length-1){for(let y=f;y>=0;y--){const w=c[y];if(m(w))return y}return-1}n.findLastIdx=A;function i(c,m){const f=d(c,m);return f===-1?void 0:c[f]}n.findLastMonotonous=i;function d(c,m,f=0,y=c.length){let w=f,E=y;for(;w<E;){const S=Math.floor((w+E)/2);m(c[S])?w=S+1:E=S}return w-1}n.findLastIdxMonotonous=d;function b(c,m){const f=p(c,m);return f===c.length?void 0:c[f]}n.findFirstMonotonous=b;function p(c,m,f=0,y=c.length){let w=f,E=y;for(;w<E;){const S=Math.floor((w+E)/2);m(c[S])?E=S:w=S+1}return w}n.findFirstIdxMonotonousOrArrLen=p;class h{constructor(m){this._array=m,this._findLastMonotonousLastIdx=0}findLastMonotonous(m){if(h.assertInvariants){if(this._prevFindLastPredicate){for(const y of this._array)if(this._prevFindLastPredicate(y)&&!m(y))throw new Error(\"MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.\")}this._prevFindLastPredicate=m}const f=d(this._array,m,this._findLastMonotonousLastIdx);return this._findLastMonotonousLastIdx=f+1,f===-1?void 0:this._array[f]}}n.MonotonousArray=h,h.assertInvariants=!1;function o(c,m){if(c.length===0)return;let f=c[0];for(let y=1;y<c.length;y++){const w=c[y];m(w,f)>0&&(f=w)}return f}n.findFirstMaxBy=o;function L(c,m){if(c.length===0)return;let f=c[0];for(let y=1;y<c.length;y++){const w=c[y];m(w,f)>=0&&(f=w)}return f}n.findLastMaxBy=L;function e(c,m){return o(c,(f,y)=>-m(f,y))}n.findFirstMinBy=e;function a(c,m){if(c.length===0)return-1;let f=0;for(let y=1;y<c.length;y++){const w=c[y];m(w,c[f])>0&&(f=y)}return f}n.findMaxIdxBy=a;function u(c,m){for(const f of c){const y=m(f);if(y!==void 0)return y}}n.mapFindFirst=u}),Y(X[32],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.CachedFunction=n.LRUCachedFunction=void 0;class M{constructor(d){this.fn=d,this.lastCache=void 0,this.lastArgKey=void 0}get(d){const b=JSON.stringify(d);return this.lastArgKey!==b&&(this.lastArgKey=b,this.lastCache=this.fn(d)),this.lastCache}}n.LRUCachedFunction=M;class A{get cachedValues(){return this._map}constructor(d){this.fn=d,this._map=new Map}get(d){if(this._map.has(d))return this._map.get(d);const b=this.fn(d);return this._map.set(d,b),b}}n.CachedFunction=A}),Y(X[33],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Color=n.HSVA=n.HSLA=n.RGBA=void 0;function M(p,h){const o=Math.pow(10,h);return Math.round(p*o)/o}class A{constructor(h,o,L,e=1){this._rgbaBrand=void 0,this.r=Math.min(255,Math.max(0,h))|0,this.g=Math.min(255,Math.max(0,o))|0,this.b=Math.min(255,Math.max(0,L))|0,this.a=M(Math.max(Math.min(1,e),0),3)}static equals(h,o){return h.r===o.r&&h.g===o.g&&h.b===o.b&&h.a===o.a}}n.RGBA=A;class i{constructor(h,o,L,e){this._hslaBrand=void 0,this.h=Math.max(Math.min(360,h),0)|0,this.s=M(Math.max(Math.min(1,o),0),3),this.l=M(Math.max(Math.min(1,L),0),3),this.a=M(Math.max(Math.min(1,e),0),3)}static equals(h,o){return h.h===o.h&&h.s===o.s&&h.l===o.l&&h.a===o.a}static fromRGBA(h){const o=h.r/255,L=h.g/255,e=h.b/255,a=h.a,u=Math.max(o,L,e),c=Math.min(o,L,e);let m=0,f=0;const y=(c+u)/2,w=u-c;if(w>0){switch(f=Math.min(y<=.5?w/(2*y):w/(2-2*y),1),u){case o:m=(L-e)/w+(L<e?6:0);break;case L:m=(e-o)/w+2;break;case e:m=(o-L)/w+4;break}m*=60,m=Math.round(m)}return new i(m,f,y,a)}static _hue2rgb(h,o,L){return L<0&&(L+=1),L>1&&(L-=1),L<1/6?h+(o-h)*6*L:L<1/2?o:L<2/3?h+(o-h)*(2/3-L)*6:h}static toRGBA(h){const o=h.h/360,{s:L,l:e,a}=h;let u,c,m;if(L===0)u=c=m=e;else{const f=e<.5?e*(1+L):e+L-e*L,y=2*e-f;u=i._hue2rgb(y,f,o+1/3),c=i._hue2rgb(y,f,o),m=i._hue2rgb(y,f,o-1/3)}return new A(Math.round(u*255),Math.round(c*255),Math.round(m*255),a)}}n.HSLA=i;class d{constructor(h,o,L,e){this._hsvaBrand=void 0,this.h=Math.max(Math.min(360,h),0)|0,this.s=M(Math.max(Math.min(1,o),0),3),this.v=M(Math.max(Math.min(1,L),0),3),this.a=M(Math.max(Math.min(1,e),0),3)}static equals(h,o){return h.h===o.h&&h.s===o.s&&h.v===o.v&&h.a===o.a}static fromRGBA(h){const o=h.r/255,L=h.g/255,e=h.b/255,a=Math.max(o,L,e),u=Math.min(o,L,e),c=a-u,m=a===0?0:c/a;let f;return c===0?f=0:a===o?f=((L-e)/c%6+6)%6:a===L?f=(e-o)/c+2:f=(o-L)/c+4,new d(Math.round(f*60),m,a,h.a)}static toRGBA(h){const{h:o,s:L,v:e,a}=h,u=e*L,c=u*(1-Math.abs(o/60%2-1)),m=e-u;let[f,y,w]=[0,0,0];return o<60?(f=u,y=c):o<120?(f=c,y=u):o<180?(y=u,w=c):o<240?(y=c,w=u):o<300?(f=c,w=u):o<=360&&(f=u,w=c),f=Math.round((f+m)*255),y=Math.round((y+m)*255),w=Math.round((w+m)*255),new A(f,y,w,a)}}n.HSVA=d;class b{static fromHex(h){return b.Format.CSS.parseHex(h)||b.red}static equals(h,o){return!h&&!o?!0:!h||!o?!1:h.equals(o)}get hsla(){return this._hsla?this._hsla:i.fromRGBA(this.rgba)}get hsva(){return this._hsva?this._hsva:d.fromRGBA(this.rgba)}constructor(h){if(h)if(h instanceof A)this.rgba=h;else if(h instanceof i)this._hsla=h,this.rgba=i.toRGBA(h);else if(h instanceof d)this._hsva=h,this.rgba=d.toRGBA(h);else throw new Error(\"Invalid color ctor argument\");else throw new Error(\"Color needs a value\")}equals(h){return!!h&&A.equals(this.rgba,h.rgba)&&i.equals(this.hsla,h.hsla)&&d.equals(this.hsva,h.hsva)}getRelativeLuminance(){const h=b._relativeLuminanceForComponent(this.rgba.r),o=b._relativeLuminanceForComponent(this.rgba.g),L=b._relativeLuminanceForComponent(this.rgba.b),e=.2126*h+.7152*o+.0722*L;return M(e,4)}static _relativeLuminanceForComponent(h){const o=h/255;return o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4)}isLighter(){return(this.rgba.r*299+this.rgba.g*587+this.rgba.b*114)/1e3>=128}isLighterThan(h){const o=this.getRelativeLuminance(),L=h.getRelativeLuminance();return o>L}isDarkerThan(h){const o=this.getRelativeLuminance(),L=h.getRelativeLuminance();return o<L}lighten(h){return new b(new i(this.hsla.h,this.hsla.s,this.hsla.l+this.hsla.l*h,this.hsla.a))}darken(h){return new b(new i(this.hsla.h,this.hsla.s,this.hsla.l-this.hsla.l*h,this.hsla.a))}transparent(h){const{r:o,g:L,b:e,a}=this.rgba;return new b(new A(o,L,e,a*h))}isTransparent(){return this.rgba.a===0}isOpaque(){return this.rgba.a===1}opposite(){return new b(new A(255-this.rgba.r,255-this.rgba.g,255-this.rgba.b,this.rgba.a))}makeOpaque(h){if(this.isOpaque()||h.rgba.a!==1)return this;const{r:o,g:L,b:e,a}=this.rgba;return new b(new A(h.rgba.r-a*(h.rgba.r-o),h.rgba.g-a*(h.rgba.g-L),h.rgba.b-a*(h.rgba.b-e),1))}toString(){return this._toString||(this._toString=b.Format.CSS.format(this)),this._toString}static getLighterColor(h,o,L){if(h.isLighterThan(o))return h;L=L||.5;const e=h.getRelativeLuminance(),a=o.getRelativeLuminance();return L=L*(a-e)/a,h.lighten(L)}static getDarkerColor(h,o,L){if(h.isDarkerThan(o))return h;L=L||.5;const e=h.getRelativeLuminance(),a=o.getRelativeLuminance();return L=L*(e-a)/e,h.darken(L)}}n.Color=b,b.white=new b(new A(255,255,255,1)),b.black=new b(new A(0,0,0,1)),b.red=new b(new A(255,0,0,1)),b.blue=new b(new A(0,0,255,1)),b.green=new b(new A(0,255,0,1)),b.cyan=new b(new A(0,255,255,1)),b.lightgrey=new b(new A(211,211,211,1)),b.transparent=new b(new A(0,0,0,0)),function(p){let h;(function(o){let L;(function(e){function a(r){return r.rgba.a===1?`rgb(${r.rgba.r}, ${r.rgba.g}, ${r.rgba.b})`:p.Format.CSS.formatRGBA(r)}e.formatRGB=a;function u(r){return`rgba(${r.rgba.r}, ${r.rgba.g}, ${r.rgba.b}, ${+r.rgba.a.toFixed(2)})`}e.formatRGBA=u;function c(r){return r.hsla.a===1?`hsl(${r.hsla.h}, ${(r.hsla.s*100).toFixed(2)}%, ${(r.hsla.l*100).toFixed(2)}%)`:p.Format.CSS.formatHSLA(r)}e.formatHSL=c;function m(r){return`hsla(${r.hsla.h}, ${(r.hsla.s*100).toFixed(2)}%, ${(r.hsla.l*100).toFixed(2)}%, ${r.hsla.a.toFixed(2)})`}e.formatHSLA=m;function f(r){const s=r.toString(16);return s.length!==2?\"0\"+s:s}function y(r){return`#${f(r.rgba.r)}${f(r.rgba.g)}${f(r.rgba.b)}`}e.formatHex=y;function w(r,s=!1){return s&&r.rgba.a===1?p.Format.CSS.formatHex(r):`#${f(r.rgba.r)}${f(r.rgba.g)}${f(r.rgba.b)}${f(Math.round(r.rgba.a*255))}`}e.formatHexA=w;function E(r){return r.isOpaque()?p.Format.CSS.formatHex(r):p.Format.CSS.formatRGBA(r)}e.format=E;function S(r){const s=r.length;if(s===0||r.charCodeAt(0)!==35)return null;if(s===7){const l=16*C(r.charCodeAt(1))+C(r.charCodeAt(2)),_=16*C(r.charCodeAt(3))+C(r.charCodeAt(4)),g=16*C(r.charCodeAt(5))+C(r.charCodeAt(6));return new p(new A(l,_,g,1))}if(s===9){const l=16*C(r.charCodeAt(1))+C(r.charCodeAt(2)),_=16*C(r.charCodeAt(3))+C(r.charCodeAt(4)),g=16*C(r.charCodeAt(5))+C(r.charCodeAt(6)),v=16*C(r.charCodeAt(7))+C(r.charCodeAt(8));return new p(new A(l,_,g,v/255))}if(s===4){const l=C(r.charCodeAt(1)),_=C(r.charCodeAt(2)),g=C(r.charCodeAt(3));return new p(new A(16*l+l,16*_+_,16*g+g))}if(s===5){const l=C(r.charCodeAt(1)),_=C(r.charCodeAt(2)),g=C(r.charCodeAt(3)),v=C(r.charCodeAt(4));return new p(new A(16*l+l,16*_+_,16*g+g,(16*v+v)/255))}return null}e.parseHex=S;function C(r){switch(r){case 48:return 0;case 49:return 1;case 50:return 2;case 51:return 3;case 52:return 4;case 53:return 5;case 54:return 6;case 55:return 7;case 56:return 8;case 57:return 9;case 97:return 10;case 65:return 10;case 98:return 11;case 66:return 11;case 99:return 12;case 67:return 12;case 100:return 13;case 68:return 13;case 101:return 14;case 69:return 14;case 102:return 15;case 70:return 15}return 0}})(L=o.CSS||(o.CSS={}))})(h=p.Format||(p.Format={}))}(b||(n.Color=b={}))}),Y(X[34],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.DiffChange=void 0;class M{constructor(i,d,b,p){this.originalStart=i,this.originalLength=d,this.modifiedStart=b,this.modifiedLength=p}getOriginalEnd(){return this.originalStart+this.originalLength}getModifiedEnd(){return this.modifiedStart+this.modifiedLength}}n.DiffChange=M}),Y(X[5],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.BugIndicatingError=n.ErrorNoTelemetry=n.NotSupportedError=n.illegalState=n.illegalArgument=n.canceled=n.CancellationError=n.isCancellationError=n.transformErrorForSerialization=n.onUnexpectedExternalError=n.onUnexpectedError=n.errorHandler=n.ErrorHandler=void 0;class M{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(f){setTimeout(()=>{throw f.stack?u.isErrorNoTelemetry(f)?new u(f.message+`\n\n`+f.stack):new Error(f.message+`\n\n`+f.stack):f},0)}}emit(f){this.listeners.forEach(y=>{y(f)})}onUnexpectedError(f){this.unexpectedErrorHandler(f),this.emit(f)}onUnexpectedExternalError(f){this.unexpectedErrorHandler(f)}}n.ErrorHandler=M,n.errorHandler=new M;function A(m){p(m)||n.errorHandler.onUnexpectedError(m)}n.onUnexpectedError=A;function i(m){p(m)||n.errorHandler.onUnexpectedExternalError(m)}n.onUnexpectedExternalError=i;function d(m){if(m instanceof Error){const{name:f,message:y}=m,w=m.stacktrace||m.stack;return{$isError:!0,name:f,message:y,stack:w,noTelemetry:u.isErrorNoTelemetry(m)}}return m}n.transformErrorForSerialization=d;const b=\"Canceled\";function p(m){return m instanceof h?!0:m instanceof Error&&m.name===b&&m.message===b}n.isCancellationError=p;class h extends Error{constructor(){super(b),this.name=this.message}}n.CancellationError=h;function o(){const m=new Error(b);return m.name=m.message,m}n.canceled=o;function L(m){return m?new Error(`Illegal argument: ${m}`):new Error(\"Illegal argument\")}n.illegalArgument=L;function e(m){return m?new Error(`Illegal state: ${m}`):new Error(\"Illegal state\")}n.illegalState=e;class a extends Error{constructor(f){super(\"NotSupported\"),f&&(this.message=f)}}n.NotSupportedError=a;class u extends Error{constructor(f){super(f),this.name=\"CodeExpectedError\"}static fromError(f){if(f instanceof u)return f;const y=new u;return y.message=f.message,y.stack=f.stack,y}static isErrorNoTelemetry(f){return f.name===\"CodeExpectedError\"}}n.ErrorNoTelemetry=u;class c extends Error{constructor(f){super(f||\"An unexpected bug occurred.\"),Object.setPrototypeOf(this,c.prototype)}}n.BugIndicatingError=c}),Y(X[12],J([0,1,5]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.checkAdjacentItems=n.assertFn=n.softAssert=n.assertNever=n.ok=void 0;function A(h,o){if(!h)throw new Error(o?`Assertion failed (${o})`:\"Assertion Failed\")}n.ok=A;function i(h,o=\"Unreachable\"){throw new Error(o)}n.assertNever=i;function d(h){h||(0,M.onUnexpectedError)(new M.BugIndicatingError(\"Assertion Failed\"))}n.softAssert=d;function b(h){if(!h()){debugger;h(),(0,M.onUnexpectedError)(new M.BugIndicatingError(\"Assertion Failed\"))}}n.assertFn=b;function p(h,o){let L=0;for(;L<h.length-1;){const e=h[L],a=h[L+1];if(!o(e,a))return!1;L++}return!0}n.checkAdjacentItems=p}),Y(X[20],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.createSingleCallFunction=void 0;function M(A,i){const d=this;let b=!1,p;return function(){if(b)return p;if(b=!0,i)try{p=A.apply(d,arguments)}finally{i()}else p=A.apply(d,arguments);return p}}n.createSingleCallFunction=M}),Y(X[21],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Iterable=void 0;var M;(function(A){function i(r){return r&&typeof r==\"object\"&&typeof r[Symbol.iterator]==\"function\"}A.is=i;const d=Object.freeze([]);function b(){return d}A.empty=b;function*p(r){yield r}A.single=p;function h(r){return i(r)?r:p(r)}A.wrap=h;function o(r){return r||d}A.from=o;function*L(r){for(let s=r.length-1;s>=0;s--)yield r[s]}A.reverse=L;function e(r){return!r||r[Symbol.iterator]().next().done===!0}A.isEmpty=e;function a(r){return r[Symbol.iterator]().next().value}A.first=a;function u(r,s){for(const l of r)if(s(l))return!0;return!1}A.some=u;function c(r,s){for(const l of r)if(s(l))return l}A.find=c;function*m(r,s){for(const l of r)s(l)&&(yield l)}A.filter=m;function*f(r,s){let l=0;for(const _ of r)yield s(_,l++)}A.map=f;function*y(...r){for(const s of r)yield*s}A.concat=y;function w(r,s,l){let _=l;for(const g of r)_=s(_,g);return _}A.reduce=w;function*E(r,s,l=r.length){for(s<0&&(s+=r.length),l<0?l+=r.length:l>r.length&&(l=r.length);s<l;s++)yield r[s]}A.slice=E;function S(r,s=Number.POSITIVE_INFINITY){const l=[];if(s===0)return[l,r];const _=r[Symbol.iterator]();for(let g=0;g<s;g++){const v=_.next();if(v.done)return[l,A.empty()];l.push(v.value)}return[l,{[Symbol.iterator](){return _}}]}A.consume=S;async function C(r){const s=[];for await(const l of r)s.push(l);return Promise.resolve(s)}A.asyncToArray=C})(M||(n.Iterable=M={}))}),Y(X[35],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.KeyChord=n.KeyCodeUtils=n.IMMUTABLE_KEY_CODE_TO_CODE=n.IMMUTABLE_CODE_TO_KEY_CODE=n.NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE=n.EVENT_KEY_CODE_MAP=void 0;class M{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(a,u){this._keyCodeToStr[a]=u,this._strToKeyCode[u.toLowerCase()]=a}keyCodeToStr(a){return this._keyCodeToStr[a]}strToKeyCode(a){return this._strToKeyCode[a.toLowerCase()]||0}}const A=new M,i=new M,d=new M;n.EVENT_KEY_CODE_MAP=new Array(230),n.NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE={};const b=[],p=Object.create(null),h=Object.create(null);n.IMMUTABLE_CODE_TO_KEY_CODE=[],n.IMMUTABLE_KEY_CODE_TO_CODE=[];for(let e=0;e<=193;e++)n.IMMUTABLE_CODE_TO_KEY_CODE[e]=-1;for(let e=0;e<=132;e++)n.IMMUTABLE_KEY_CODE_TO_CODE[e]=-1;(function(){const e=\"\",a=[[1,0,\"None\",0,\"unknown\",0,\"VK_UNKNOWN\",e,e],[1,1,\"Hyper\",0,e,0,e,e,e],[1,2,\"Super\",0,e,0,e,e,e],[1,3,\"Fn\",0,e,0,e,e,e],[1,4,\"FnLock\",0,e,0,e,e,e],[1,5,\"Suspend\",0,e,0,e,e,e],[1,6,\"Resume\",0,e,0,e,e,e],[1,7,\"Turbo\",0,e,0,e,e,e],[1,8,\"Sleep\",0,e,0,\"VK_SLEEP\",e,e],[1,9,\"WakeUp\",0,e,0,e,e,e],[0,10,\"KeyA\",31,\"A\",65,\"VK_A\",e,e],[0,11,\"KeyB\",32,\"B\",66,\"VK_B\",e,e],[0,12,\"KeyC\",33,\"C\",67,\"VK_C\",e,e],[0,13,\"KeyD\",34,\"D\",68,\"VK_D\",e,e],[0,14,\"KeyE\",35,\"E\",69,\"VK_E\",e,e],[0,15,\"KeyF\",36,\"F\",70,\"VK_F\",e,e],[0,16,\"KeyG\",37,\"G\",71,\"VK_G\",e,e],[0,17,\"KeyH\",38,\"H\",72,\"VK_H\",e,e],[0,18,\"KeyI\",39,\"I\",73,\"VK_I\",e,e],[0,19,\"KeyJ\",40,\"J\",74,\"VK_J\",e,e],[0,20,\"KeyK\",41,\"K\",75,\"VK_K\",e,e],[0,21,\"KeyL\",42,\"L\",76,\"VK_L\",e,e],[0,22,\"KeyM\",43,\"M\",77,\"VK_M\",e,e],[0,23,\"KeyN\",44,\"N\",78,\"VK_N\",e,e],[0,24,\"KeyO\",45,\"O\",79,\"VK_O\",e,e],[0,25,\"KeyP\",46,\"P\",80,\"VK_P\",e,e],[0,26,\"KeyQ\",47,\"Q\",81,\"VK_Q\",e,e],[0,27,\"KeyR\",48,\"R\",82,\"VK_R\",e,e],[0,28,\"KeyS\",49,\"S\",83,\"VK_S\",e,e],[0,29,\"KeyT\",50,\"T\",84,\"VK_T\",e,e],[0,30,\"KeyU\",51,\"U\",85,\"VK_U\",e,e],[0,31,\"KeyV\",52,\"V\",86,\"VK_V\",e,e],[0,32,\"KeyW\",53,\"W\",87,\"VK_W\",e,e],[0,33,\"KeyX\",54,\"X\",88,\"VK_X\",e,e],[0,34,\"KeyY\",55,\"Y\",89,\"VK_Y\",e,e],[0,35,\"KeyZ\",56,\"Z\",90,\"VK_Z\",e,e],[0,36,\"Digit1\",22,\"1\",49,\"VK_1\",e,e],[0,37,\"Digit2\",23,\"2\",50,\"VK_2\",e,e],[0,38,\"Digit3\",24,\"3\",51,\"VK_3\",e,e],[0,39,\"Digit4\",25,\"4\",52,\"VK_4\",e,e],[0,40,\"Digit5\",26,\"5\",53,\"VK_5\",e,e],[0,41,\"Digit6\",27,\"6\",54,\"VK_6\",e,e],[0,42,\"Digit7\",28,\"7\",55,\"VK_7\",e,e],[0,43,\"Digit8\",29,\"8\",56,\"VK_8\",e,e],[0,44,\"Digit9\",30,\"9\",57,\"VK_9\",e,e],[0,45,\"Digit0\",21,\"0\",48,\"VK_0\",e,e],[1,46,\"Enter\",3,\"Enter\",13,\"VK_RETURN\",e,e],[1,47,\"Escape\",9,\"Escape\",27,\"VK_ESCAPE\",e,e],[1,48,\"Backspace\",1,\"Backspace\",8,\"VK_BACK\",e,e],[1,49,\"Tab\",2,\"Tab\",9,\"VK_TAB\",e,e],[1,50,\"Space\",10,\"Space\",32,\"VK_SPACE\",e,e],[0,51,\"Minus\",88,\"-\",189,\"VK_OEM_MINUS\",\"-\",\"OEM_MINUS\"],[0,52,\"Equal\",86,\"=\",187,\"VK_OEM_PLUS\",\"=\",\"OEM_PLUS\"],[0,53,\"BracketLeft\",92,\"[\",219,\"VK_OEM_4\",\"[\",\"OEM_4\"],[0,54,\"BracketRight\",94,\"]\",221,\"VK_OEM_6\",\"]\",\"OEM_6\"],[0,55,\"Backslash\",93,\"\\\\\",220,\"VK_OEM_5\",\"\\\\\",\"OEM_5\"],[0,56,\"IntlHash\",0,e,0,e,e,e],[0,57,\"Semicolon\",85,\";\",186,\"VK_OEM_1\",\";\",\"OEM_1\"],[0,58,\"Quote\",95,\"'\",222,\"VK_OEM_7\",\"'\",\"OEM_7\"],[0,59,\"Backquote\",91,\"`\",192,\"VK_OEM_3\",\"`\",\"OEM_3\"],[0,60,\"Comma\",87,\",\",188,\"VK_OEM_COMMA\",\",\",\"OEM_COMMA\"],[0,61,\"Period\",89,\".\",190,\"VK_OEM_PERIOD\",\".\",\"OEM_PERIOD\"],[0,62,\"Slash\",90,\"/\",191,\"VK_OEM_2\",\"/\",\"OEM_2\"],[1,63,\"CapsLock\",8,\"CapsLock\",20,\"VK_CAPITAL\",e,e],[1,64,\"F1\",59,\"F1\",112,\"VK_F1\",e,e],[1,65,\"F2\",60,\"F2\",113,\"VK_F2\",e,e],[1,66,\"F3\",61,\"F3\",114,\"VK_F3\",e,e],[1,67,\"F4\",62,\"F4\",115,\"VK_F4\",e,e],[1,68,\"F5\",63,\"F5\",116,\"VK_F5\",e,e],[1,69,\"F6\",64,\"F6\",117,\"VK_F6\",e,e],[1,70,\"F7\",65,\"F7\",118,\"VK_F7\",e,e],[1,71,\"F8\",66,\"F8\",119,\"VK_F8\",e,e],[1,72,\"F9\",67,\"F9\",120,\"VK_F9\",e,e],[1,73,\"F10\",68,\"F10\",121,\"VK_F10\",e,e],[1,74,\"F11\",69,\"F11\",122,\"VK_F11\",e,e],[1,75,\"F12\",70,\"F12\",123,\"VK_F12\",e,e],[1,76,\"PrintScreen\",0,e,0,e,e,e],[1,77,\"ScrollLock\",84,\"ScrollLock\",145,\"VK_SCROLL\",e,e],[1,78,\"Pause\",7,\"PauseBreak\",19,\"VK_PAUSE\",e,e],[1,79,\"Insert\",19,\"Insert\",45,\"VK_INSERT\",e,e],[1,80,\"Home\",14,\"Home\",36,\"VK_HOME\",e,e],[1,81,\"PageUp\",11,\"PageUp\",33,\"VK_PRIOR\",e,e],[1,82,\"Delete\",20,\"Delete\",46,\"VK_DELETE\",e,e],[1,83,\"End\",13,\"End\",35,\"VK_END\",e,e],[1,84,\"PageDown\",12,\"PageDown\",34,\"VK_NEXT\",e,e],[1,85,\"ArrowRight\",17,\"RightArrow\",39,\"VK_RIGHT\",\"Right\",e],[1,86,\"ArrowLeft\",15,\"LeftArrow\",37,\"VK_LEFT\",\"Left\",e],[1,87,\"ArrowDown\",18,\"DownArrow\",40,\"VK_DOWN\",\"Down\",e],[1,88,\"ArrowUp\",16,\"UpArrow\",38,\"VK_UP\",\"Up\",e],[1,89,\"NumLock\",83,\"NumLock\",144,\"VK_NUMLOCK\",e,e],[1,90,\"NumpadDivide\",113,\"NumPad_Divide\",111,\"VK_DIVIDE\",e,e],[1,91,\"NumpadMultiply\",108,\"NumPad_Multiply\",106,\"VK_MULTIPLY\",e,e],[1,92,\"NumpadSubtract\",111,\"NumPad_Subtract\",109,\"VK_SUBTRACT\",e,e],[1,93,\"NumpadAdd\",109,\"NumPad_Add\",107,\"VK_ADD\",e,e],[1,94,\"NumpadEnter\",3,e,0,e,e,e],[1,95,\"Numpad1\",99,\"NumPad1\",97,\"VK_NUMPAD1\",e,e],[1,96,\"Numpad2\",100,\"NumPad2\",98,\"VK_NUMPAD2\",e,e],[1,97,\"Numpad3\",101,\"NumPad3\",99,\"VK_NUMPAD3\",e,e],[1,98,\"Numpad4\",102,\"NumPad4\",100,\"VK_NUMPAD4\",e,e],[1,99,\"Numpad5\",103,\"NumPad5\",101,\"VK_NUMPAD5\",e,e],[1,100,\"Numpad6\",104,\"NumPad6\",102,\"VK_NUMPAD6\",e,e],[1,101,\"Numpad7\",105,\"NumPad7\",103,\"VK_NUMPAD7\",e,e],[1,102,\"Numpad8\",106,\"NumPad8\",104,\"VK_NUMPAD8\",e,e],[1,103,\"Numpad9\",107,\"NumPad9\",105,\"VK_NUMPAD9\",e,e],[1,104,\"Numpad0\",98,\"NumPad0\",96,\"VK_NUMPAD0\",e,e],[1,105,\"NumpadDecimal\",112,\"NumPad_Decimal\",110,\"VK_DECIMAL\",e,e],[0,106,\"IntlBackslash\",97,\"OEM_102\",226,\"VK_OEM_102\",e,e],[1,107,\"ContextMenu\",58,\"ContextMenu\",93,e,e,e],[1,108,\"Power\",0,e,0,e,e,e],[1,109,\"NumpadEqual\",0,e,0,e,e,e],[1,110,\"F13\",71,\"F13\",124,\"VK_F13\",e,e],[1,111,\"F14\",72,\"F14\",125,\"VK_F14\",e,e],[1,112,\"F15\",73,\"F15\",126,\"VK_F15\",e,e],[1,113,\"F16\",74,\"F16\",127,\"VK_F16\",e,e],[1,114,\"F17\",75,\"F17\",128,\"VK_F17\",e,e],[1,115,\"F18\",76,\"F18\",129,\"VK_F18\",e,e],[1,116,\"F19\",77,\"F19\",130,\"VK_F19\",e,e],[1,117,\"F20\",78,\"F20\",131,\"VK_F20\",e,e],[1,118,\"F21\",79,\"F21\",132,\"VK_F21\",e,e],[1,119,\"F22\",80,\"F22\",133,\"VK_F22\",e,e],[1,120,\"F23\",81,\"F23\",134,\"VK_F23\",e,e],[1,121,\"F24\",82,\"F24\",135,\"VK_F24\",e,e],[1,122,\"Open\",0,e,0,e,e,e],[1,123,\"Help\",0,e,0,e,e,e],[1,124,\"Select\",0,e,0,e,e,e],[1,125,\"Again\",0,e,0,e,e,e],[1,126,\"Undo\",0,e,0,e,e,e],[1,127,\"Cut\",0,e,0,e,e,e],[1,128,\"Copy\",0,e,0,e,e,e],[1,129,\"Paste\",0,e,0,e,e,e],[1,130,\"Find\",0,e,0,e,e,e],[1,131,\"AudioVolumeMute\",117,\"AudioVolumeMute\",173,\"VK_VOLUME_MUTE\",e,e],[1,132,\"AudioVolumeUp\",118,\"AudioVolumeUp\",175,\"VK_VOLUME_UP\",e,e],[1,133,\"AudioVolumeDown\",119,\"AudioVolumeDown\",174,\"VK_VOLUME_DOWN\",e,e],[1,134,\"NumpadComma\",110,\"NumPad_Separator\",108,\"VK_SEPARATOR\",e,e],[0,135,\"IntlRo\",115,\"ABNT_C1\",193,\"VK_ABNT_C1\",e,e],[1,136,\"KanaMode\",0,e,0,e,e,e],[0,137,\"IntlYen\",0,e,0,e,e,e],[1,138,\"Convert\",0,e,0,e,e,e],[1,139,\"NonConvert\",0,e,0,e,e,e],[1,140,\"Lang1\",0,e,0,e,e,e],[1,141,\"Lang2\",0,e,0,e,e,e],[1,142,\"Lang3\",0,e,0,e,e,e],[1,143,\"Lang4\",0,e,0,e,e,e],[1,144,\"Lang5\",0,e,0,e,e,e],[1,145,\"Abort\",0,e,0,e,e,e],[1,146,\"Props\",0,e,0,e,e,e],[1,147,\"NumpadParenLeft\",0,e,0,e,e,e],[1,148,\"NumpadParenRight\",0,e,0,e,e,e],[1,149,\"NumpadBackspace\",0,e,0,e,e,e],[1,150,\"NumpadMemoryStore\",0,e,0,e,e,e],[1,151,\"NumpadMemoryRecall\",0,e,0,e,e,e],[1,152,\"NumpadMemoryClear\",0,e,0,e,e,e],[1,153,\"NumpadMemoryAdd\",0,e,0,e,e,e],[1,154,\"NumpadMemorySubtract\",0,e,0,e,e,e],[1,155,\"NumpadClear\",131,\"Clear\",12,\"VK_CLEAR\",e,e],[1,156,\"NumpadClearEntry\",0,e,0,e,e,e],[1,0,e,5,\"Ctrl\",17,\"VK_CONTROL\",e,e],[1,0,e,4,\"Shift\",16,\"VK_SHIFT\",e,e],[1,0,e,6,\"Alt\",18,\"VK_MENU\",e,e],[1,0,e,57,\"Meta\",91,\"VK_COMMAND\",e,e],[1,157,\"ControlLeft\",5,e,0,\"VK_LCONTROL\",e,e],[1,158,\"ShiftLeft\",4,e,0,\"VK_LSHIFT\",e,e],[1,159,\"AltLeft\",6,e,0,\"VK_LMENU\",e,e],[1,160,\"MetaLeft\",57,e,0,\"VK_LWIN\",e,e],[1,161,\"ControlRight\",5,e,0,\"VK_RCONTROL\",e,e],[1,162,\"ShiftRight\",4,e,0,\"VK_RSHIFT\",e,e],[1,163,\"AltRight\",6,e,0,\"VK_RMENU\",e,e],[1,164,\"MetaRight\",57,e,0,\"VK_RWIN\",e,e],[1,165,\"BrightnessUp\",0,e,0,e,e,e],[1,166,\"BrightnessDown\",0,e,0,e,e,e],[1,167,\"MediaPlay\",0,e,0,e,e,e],[1,168,\"MediaRecord\",0,e,0,e,e,e],[1,169,\"MediaFastForward\",0,e,0,e,e,e],[1,170,\"MediaRewind\",0,e,0,e,e,e],[1,171,\"MediaTrackNext\",124,\"MediaTrackNext\",176,\"VK_MEDIA_NEXT_TRACK\",e,e],[1,172,\"MediaTrackPrevious\",125,\"MediaTrackPrevious\",177,\"VK_MEDIA_PREV_TRACK\",e,e],[1,173,\"MediaStop\",126,\"MediaStop\",178,\"VK_MEDIA_STOP\",e,e],[1,174,\"Eject\",0,e,0,e,e,e],[1,175,\"MediaPlayPause\",127,\"MediaPlayPause\",179,\"VK_MEDIA_PLAY_PAUSE\",e,e],[1,176,\"MediaSelect\",128,\"LaunchMediaPlayer\",181,\"VK_MEDIA_LAUNCH_MEDIA_SELECT\",e,e],[1,177,\"LaunchMail\",129,\"LaunchMail\",180,\"VK_MEDIA_LAUNCH_MAIL\",e,e],[1,178,\"LaunchApp2\",130,\"LaunchApp2\",183,\"VK_MEDIA_LAUNCH_APP2\",e,e],[1,179,\"LaunchApp1\",0,e,0,\"VK_MEDIA_LAUNCH_APP1\",e,e],[1,180,\"SelectTask\",0,e,0,e,e,e],[1,181,\"LaunchScreenSaver\",0,e,0,e,e,e],[1,182,\"BrowserSearch\",120,\"BrowserSearch\",170,\"VK_BROWSER_SEARCH\",e,e],[1,183,\"BrowserHome\",121,\"BrowserHome\",172,\"VK_BROWSER_HOME\",e,e],[1,184,\"BrowserBack\",122,\"BrowserBack\",166,\"VK_BROWSER_BACK\",e,e],[1,185,\"BrowserForward\",123,\"BrowserForward\",167,\"VK_BROWSER_FORWARD\",e,e],[1,186,\"BrowserStop\",0,e,0,\"VK_BROWSER_STOP\",e,e],[1,187,\"BrowserRefresh\",0,e,0,\"VK_BROWSER_REFRESH\",e,e],[1,188,\"BrowserFavorites\",0,e,0,\"VK_BROWSER_FAVORITES\",e,e],[1,189,\"ZoomToggle\",0,e,0,e,e,e],[1,190,\"MailReply\",0,e,0,e,e,e],[1,191,\"MailForward\",0,e,0,e,e,e],[1,192,\"MailSend\",0,e,0,e,e,e],[1,0,e,114,\"KeyInComposition\",229,e,e,e],[1,0,e,116,\"ABNT_C2\",194,\"VK_ABNT_C2\",e,e],[1,0,e,96,\"OEM_8\",223,\"VK_OEM_8\",e,e],[1,0,e,0,e,0,\"VK_KANA\",e,e],[1,0,e,0,e,0,\"VK_HANGUL\",e,e],[1,0,e,0,e,0,\"VK_JUNJA\",e,e],[1,0,e,0,e,0,\"VK_FINAL\",e,e],[1,0,e,0,e,0,\"VK_HANJA\",e,e],[1,0,e,0,e,0,\"VK_KANJI\",e,e],[1,0,e,0,e,0,\"VK_CONVERT\",e,e],[1,0,e,0,e,0,\"VK_NONCONVERT\",e,e],[1,0,e,0,e,0,\"VK_ACCEPT\",e,e],[1,0,e,0,e,0,\"VK_MODECHANGE\",e,e],[1,0,e,0,e,0,\"VK_SELECT\",e,e],[1,0,e,0,e,0,\"VK_PRINT\",e,e],[1,0,e,0,e,0,\"VK_EXECUTE\",e,e],[1,0,e,0,e,0,\"VK_SNAPSHOT\",e,e],[1,0,e,0,e,0,\"VK_HELP\",e,e],[1,0,e,0,e,0,\"VK_APPS\",e,e],[1,0,e,0,e,0,\"VK_PROCESSKEY\",e,e],[1,0,e,0,e,0,\"VK_PACKET\",e,e],[1,0,e,0,e,0,\"VK_DBE_SBCSCHAR\",e,e],[1,0,e,0,e,0,\"VK_DBE_DBCSCHAR\",e,e],[1,0,e,0,e,0,\"VK_ATTN\",e,e],[1,0,e,0,e,0,\"VK_CRSEL\",e,e],[1,0,e,0,e,0,\"VK_EXSEL\",e,e],[1,0,e,0,e,0,\"VK_EREOF\",e,e],[1,0,e,0,e,0,\"VK_PLAY\",e,e],[1,0,e,0,e,0,\"VK_ZOOM\",e,e],[1,0,e,0,e,0,\"VK_NONAME\",e,e],[1,0,e,0,e,0,\"VK_PA1\",e,e],[1,0,e,0,e,0,\"VK_OEM_CLEAR\",e,e]],u=[],c=[];for(const m of a){const[f,y,w,E,S,C,r,s,l]=m;if(c[y]||(c[y]=!0,b[y]=w,p[w]=y,h[w.toLowerCase()]=y,f&&(n.IMMUTABLE_CODE_TO_KEY_CODE[y]=E,E!==0&&E!==3&&E!==5&&E!==4&&E!==6&&E!==57&&(n.IMMUTABLE_KEY_CODE_TO_CODE[E]=y))),!u[E]){if(u[E]=!0,!S)throw new Error(`String representation missing for key code ${E} around scan code ${w}`);A.define(E,S),i.define(E,s||S),d.define(E,l||s||S)}C&&(n.EVENT_KEY_CODE_MAP[C]=E),r&&(n.NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE[r]=E)}n.IMMUTABLE_KEY_CODE_TO_CODE[3]=46})();var o;(function(e){function a(w){return A.keyCodeToStr(w)}e.toString=a;function u(w){return A.strToKeyCode(w)}e.fromString=u;function c(w){return i.keyCodeToStr(w)}e.toUserSettingsUS=c;function m(w){return d.keyCodeToStr(w)}e.toUserSettingsGeneral=m;function f(w){return i.strToKeyCode(w)||d.strToKeyCode(w)}e.fromUserSettings=f;function y(w){if(w>=98&&w<=113)return null;switch(w){case 16:return\"Up\";case 18:return\"Down\";case 15:return\"Left\";case 17:return\"Right\"}return A.keyCodeToStr(w)}e.toElectronAccelerator=y})(o||(n.KeyCodeUtils=o={}));function L(e,a){const u=(a&65535)<<16>>>0;return(e|u)>>>0}n.KeyChord=L}),Y(X[36],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Lazy=void 0;class M{constructor(i){this.executor=i,this._didRun=!1}get value(){if(!this._didRun)try{this._value=this.executor()}catch(i){this._error=i}finally{this._didRun=!0}if(this._error)throw this._error;return this._value}get rawValue(){return this._value}}n.Lazy=M}),Y(X[13],J([0,1,20,21]),function(q,n,M,A){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.DisposableMap=n.ImmortalReference=n.RefCountedDisposable=n.MutableDisposable=n.Disposable=n.DisposableStore=n.toDisposable=n.combinedDisposable=n.dispose=n.isDisposable=n.markAsSingleton=n.markAsDisposed=n.trackDisposable=n.setDisposableTracker=void 0;const i=!1;let d=null;function b(r){d=r}if(n.setDisposableTracker=b,i){const r=\"__is_disposable_tracked__\";b(new class{trackDisposable(s){const l=new Error(\"Potentially leaked disposable\").stack;setTimeout(()=>{s[r]||console.log(l)},3e3)}setParent(s,l){if(s&&s!==y.None)try{s[r]=!0}catch{}}markAsDisposed(s){if(s&&s!==y.None)try{s[r]=!0}catch{}}markAsSingleton(s){}})}function p(r){return d?.trackDisposable(r),r}n.trackDisposable=p;function h(r){d?.markAsDisposed(r)}n.markAsDisposed=h;function o(r,s){d?.setParent(r,s)}function L(r,s){if(d)for(const l of r)d.setParent(l,s)}function e(r){return d?.markAsSingleton(r),r}n.markAsSingleton=e;function a(r){return typeof r.dispose==\"function\"&&r.dispose.length===0}n.isDisposable=a;function u(r){if(A.Iterable.is(r)){const s=[];for(const l of r)if(l)try{l.dispose()}catch(_){s.push(_)}if(s.length===1)throw s[0];if(s.length>1)throw new AggregateError(s,\"Encountered errors while disposing of store\");return Array.isArray(r)?[]:r}else if(r)return r.dispose(),r}n.dispose=u;function c(...r){const s=m(()=>u(r));return L(r,s),s}n.combinedDisposable=c;function m(r){const s=p({dispose:(0,M.createSingleCallFunction)(()=>{h(s),r()})});return s}n.toDisposable=m;class f{constructor(){this._toDispose=new Set,this._isDisposed=!1,p(this)}dispose(){this._isDisposed||(h(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{u(this._toDispose)}finally{this._toDispose.clear()}}add(s){if(!s)return s;if(s===this)throw new Error(\"Cannot register a disposable on itself!\");return o(s,this),this._isDisposed?f.DISABLE_DISPOSED_WARNING||console.warn(new Error(\"Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!\").stack):this._toDispose.add(s),s}deleteAndLeak(s){s&&this._toDispose.has(s)&&(this._toDispose.delete(s),o(s,null))}}n.DisposableStore=f,f.DISABLE_DISPOSED_WARNING=!1;class y{constructor(){this._store=new f,p(this),o(this._store,this)}dispose(){h(this),this._store.dispose()}_register(s){if(s===this)throw new Error(\"Cannot register a disposable on itself!\");return this._store.add(s)}}n.Disposable=y,y.None=Object.freeze({dispose(){}});class w{constructor(){this._isDisposed=!1,p(this)}get value(){return this._isDisposed?void 0:this._value}set value(s){var l;this._isDisposed||s===this._value||((l=this._value)===null||l===void 0||l.dispose(),s&&o(s,this),this._value=s)}clear(){this.value=void 0}dispose(){var s;this._isDisposed=!0,h(this),(s=this._value)===null||s===void 0||s.dispose(),this._value=void 0}}n.MutableDisposable=w;class E{constructor(s){this._disposable=s,this._counter=1}acquire(){return this._counter++,this}release(){return--this._counter===0&&this._disposable.dispose(),this}}n.RefCountedDisposable=E;class S{constructor(s){this.object=s}dispose(){}}n.ImmortalReference=S;class C{constructor(){this._store=new Map,this._isDisposed=!1,p(this)}dispose(){h(this),this._isDisposed=!0,this.clearAndDisposeAll()}clearAndDisposeAll(){if(this._store.size)try{u(this._store.values())}finally{this._store.clear()}}get(s){return this._store.get(s)}set(s,l,_=!1){var g;this._isDisposed&&console.warn(new Error(\"Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!\").stack),_||(g=this._store.get(s))===null||g===void 0||g.dispose(),this._store.set(s,l)}deleteAndDispose(s){var l;(l=this._store.get(s))===null||l===void 0||l.dispose(),this._store.delete(s)}[Symbol.iterator](){return this._store[Symbol.iterator]()}}n.DisposableMap=C}),Y(X[22],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.LinkedList=void 0;class M{constructor(d){this.element=d,this.next=M.Undefined,this.prev=M.Undefined}}M.Undefined=new M(void 0);class A{constructor(){this._first=M.Undefined,this._last=M.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===M.Undefined}clear(){let d=this._first;for(;d!==M.Undefined;){const b=d.next;d.prev=M.Undefined,d.next=M.Undefined,d=b}this._first=M.Undefined,this._last=M.Undefined,this._size=0}unshift(d){return this._insert(d,!1)}push(d){return this._insert(d,!0)}_insert(d,b){const p=new M(d);if(this._first===M.Undefined)this._first=p,this._last=p;else if(b){const o=this._last;this._last=p,p.prev=o,o.next=p}else{const o=this._first;this._first=p,p.next=o,o.prev=p}this._size+=1;let h=!1;return()=>{h||(h=!0,this._remove(p))}}shift(){if(this._first!==M.Undefined){const d=this._first.element;return this._remove(this._first),d}}pop(){if(this._last!==M.Undefined){const d=this._last.element;return this._remove(this._last),d}}_remove(d){if(d.prev!==M.Undefined&&d.next!==M.Undefined){const b=d.prev;b.next=d.next,d.next.prev=b}else d.prev===M.Undefined&&d.next===M.Undefined?(this._first=M.Undefined,this._last=M.Undefined):d.next===M.Undefined?(this._last=this._last.prev,this._last.next=M.Undefined):d.prev===M.Undefined&&(this._first=this._first.next,this._first.prev=M.Undefined);this._size-=1}*[Symbol.iterator](){let d=this._first;for(;d!==M.Undefined;)yield d.element,d=d.next}}n.LinkedList=A}),Y(X[37],J([0,1]),function(q,n){\"use strict\";var M,A;Object.defineProperty(n,\"__esModule\",{value:!0}),n.SetMap=n.BidirectionalMap=n.LRUCache=n.LinkedMap=n.ResourceMap=void 0;class i{constructor(a,u){this.uri=a,this.value=u}}function d(e){return Array.isArray(e)}class b{constructor(a,u){if(this[M]=\"ResourceMap\",a instanceof b)this.map=new Map(a.map),this.toKey=u??b.defaultToKey;else if(d(a)){this.map=new Map,this.toKey=u??b.defaultToKey;for(const[c,m]of a)this.set(c,m)}else this.map=new Map,this.toKey=a??b.defaultToKey}set(a,u){return this.map.set(this.toKey(a),new i(a,u)),this}get(a){var u;return(u=this.map.get(this.toKey(a)))===null||u===void 0?void 0:u.value}has(a){return this.map.has(this.toKey(a))}get size(){return this.map.size}clear(){this.map.clear()}delete(a){return this.map.delete(this.toKey(a))}forEach(a,u){typeof u<\"u\"&&(a=a.bind(u));for(const[c,m]of this.map)a(m.value,m.uri,this)}*values(){for(const a of this.map.values())yield a.value}*keys(){for(const a of this.map.values())yield a.uri}*entries(){for(const a of this.map.values())yield[a.uri,a.value]}*[(M=Symbol.toStringTag,Symbol.iterator)](){for(const[,a]of this.map)yield[a.uri,a.value]}}n.ResourceMap=b,b.defaultToKey=e=>e.toString();class p{constructor(){this[A]=\"LinkedMap\",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){var a;return(a=this._head)===null||a===void 0?void 0:a.value}get last(){var a;return(a=this._tail)===null||a===void 0?void 0:a.value}has(a){return this._map.has(a)}get(a,u=0){const c=this._map.get(a);if(c)return u!==0&&this.touch(c,u),c.value}set(a,u,c=0){let m=this._map.get(a);if(m)m.value=u,c!==0&&this.touch(m,c);else{switch(m={key:a,value:u,next:void 0,previous:void 0},c){case 0:this.addItemLast(m);break;case 1:this.addItemFirst(m);break;case 2:this.addItemLast(m);break;default:this.addItemLast(m);break}this._map.set(a,m),this._size++}return this}delete(a){return!!this.remove(a)}remove(a){const u=this._map.get(a);if(u)return this._map.delete(a),this.removeItem(u),this._size--,u.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error(\"Invalid list\");const a=this._head;return this._map.delete(a.key),this.removeItem(a),this._size--,a.value}forEach(a,u){const c=this._state;let m=this._head;for(;m;){if(u?a.bind(u)(m.value,m.key,this):a(m.value,m.key,this),this._state!==c)throw new Error(\"LinkedMap got modified during iteration.\");m=m.next}}keys(){const a=this,u=this._state;let c=this._head;const m={[Symbol.iterator](){return m},next(){if(a._state!==u)throw new Error(\"LinkedMap got modified during iteration.\");if(c){const f={value:c.key,done:!1};return c=c.next,f}else return{value:void 0,done:!0}}};return m}values(){const a=this,u=this._state;let c=this._head;const m={[Symbol.iterator](){return m},next(){if(a._state!==u)throw new Error(\"LinkedMap got modified during iteration.\");if(c){const f={value:c.value,done:!1};return c=c.next,f}else return{value:void 0,done:!0}}};return m}entries(){const a=this,u=this._state;let c=this._head;const m={[Symbol.iterator](){return m},next(){if(a._state!==u)throw new Error(\"LinkedMap got modified during iteration.\");if(c){const f={value:[c.key,c.value],done:!1};return c=c.next,f}else return{value:void 0,done:!0}}};return m}[(A=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(a){if(a>=this.size)return;if(a===0){this.clear();return}let u=this._head,c=this.size;for(;u&&c>a;)this._map.delete(u.key),u=u.next,c--;this._head=u,this._size=c,u&&(u.previous=void 0),this._state++}addItemFirst(a){if(!this._head&&!this._tail)this._tail=a;else if(this._head)a.next=this._head,this._head.previous=a;else throw new Error(\"Invalid list\");this._head=a,this._state++}addItemLast(a){if(!this._head&&!this._tail)this._head=a;else if(this._tail)a.previous=this._tail,this._tail.next=a;else throw new Error(\"Invalid list\");this._tail=a,this._state++}removeItem(a){if(a===this._head&&a===this._tail)this._head=void 0,this._tail=void 0;else if(a===this._head){if(!a.next)throw new Error(\"Invalid list\");a.next.previous=void 0,this._head=a.next}else if(a===this._tail){if(!a.previous)throw new Error(\"Invalid list\");a.previous.next=void 0,this._tail=a.previous}else{const u=a.next,c=a.previous;if(!u||!c)throw new Error(\"Invalid list\");u.previous=c,c.next=u}a.next=void 0,a.previous=void 0,this._state++}touch(a,u){if(!this._head||!this._tail)throw new Error(\"Invalid list\");if(!(u!==1&&u!==2)){if(u===1){if(a===this._head)return;const c=a.next,m=a.previous;a===this._tail?(m.next=void 0,this._tail=m):(c.previous=m,m.next=c),a.previous=void 0,a.next=this._head,this._head.previous=a,this._head=a,this._state++}else if(u===2){if(a===this._tail)return;const c=a.next,m=a.previous;a===this._head?(c.previous=void 0,this._head=c):(c.previous=m,m.next=c),a.next=void 0,a.previous=this._tail,this._tail.next=a,this._tail=a,this._state++}}}toJSON(){const a=[];return this.forEach((u,c)=>{a.push([c,u])}),a}fromJSON(a){this.clear();for(const[u,c]of a)this.set(u,c)}}n.LinkedMap=p;class h extends p{constructor(a,u=1){super(),this._limit=a,this._ratio=Math.min(Math.max(0,u),1)}get limit(){return this._limit}set limit(a){this._limit=a,this.checkTrim()}get(a,u=2){return super.get(a,u)}peek(a){return super.get(a,0)}set(a,u){return super.set(a,u,2),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}}n.LRUCache=h;class o{constructor(a){if(this._m1=new Map,this._m2=new Map,a)for(const[u,c]of a)this.set(u,c)}clear(){this._m1.clear(),this._m2.clear()}set(a,u){this._m1.set(a,u),this._m2.set(u,a)}get(a){return this._m1.get(a)}getKey(a){return this._m2.get(a)}delete(a){const u=this._m1.get(a);return u===void 0?!1:(this._m1.delete(a),this._m2.delete(u),!0)}keys(){return this._m1.keys()}values(){return this._m1.values()}}n.BidirectionalMap=o;class L{constructor(){this.map=new Map}add(a,u){let c=this.map.get(a);c||(c=new Set,this.map.set(a,c)),c.add(u)}delete(a,u){const c=this.map.get(a);c&&(c.delete(u),c.size===0&&this.map.delete(a))}forEach(a,u){const c=this.map.get(a);c&&c.forEach(u)}get(a){const u=this.map.get(a);return u||new Set}}n.SetMap=L}),Y(X[23],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.StopWatch=void 0;const M=globalThis.performance&&typeof globalThis.performance.now==\"function\";class A{static create(d){return new A(d)}constructor(d){this._now=M&&d===!1?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}elapsed(){return this._stopTime!==-1?this._stopTime-this._startTime:this._now()-this._startTime}}n.StopWatch=A}),Y(X[9],J([0,1,5,20,13,22,23]),function(q,n,M,A,i,d,b){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Relay=n.EventBufferer=n.EventMultiplexer=n.MicrotaskEmitter=n.DebounceEmitter=n.PauseableEmitter=n.createEventDeliveryQueue=n.Emitter=n.EventProfiling=n.Event=void 0;const p=!1,h=!1;var o;(function(g){g.None=()=>i.Disposable.None;function v(K){if(h){const{onDidAddListener:j}=K,Z=u.create();let Q=0;K.onDidAddListener=()=>{++Q===2&&(console.warn(\"snapshotted emitter LIKELY used public and SHOULD HAVE BEEN created with DisposableStore. snapshotted here\"),Z.print()),j?.()}}}function R(K,j){return I(K,()=>{},0,void 0,!0,void 0,j)}g.defer=R;function N(K){return(j,Z=null,Q)=>{let ee=!1,ne;return ne=K(ie=>{if(!ee)return ne?ne.dispose():ee=!0,j.call(Z,ie)},null,Q),ee&&ne.dispose(),ne}}g.once=N;function D(K,j,Z){return k((Q,ee=null,ne)=>K(ie=>Q.call(ee,j(ie)),null,ne),Z)}g.map=D;function x(K,j,Z){return k((Q,ee=null,ne)=>K(ie=>{j(ie),Q.call(ee,ie)},null,ne),Z)}g.forEach=x;function T(K,j,Z){return k((Q,ee=null,ne)=>K(ie=>j(ie)&&Q.call(ee,ie),null,ne),Z)}g.filter=T;function F(K){return K}g.signal=F;function B(...K){return(j,Z=null,Q)=>{const ee=(0,i.combinedDisposable)(...K.map(ne=>ne(ie=>j.call(Z,ie))));return O(ee,Q)}}g.any=B;function V(K,j,Z,Q){let ee=Z;return D(K,ne=>(ee=j(ee,ne),ee),Q)}g.reduce=V;function k(K,j){let Z;const Q={onWillAddFirstListener(){Z=K(ee.fire,ee)},onDidRemoveLastListener(){Z?.dispose()}};j||v(Q);const ee=new y(Q);return j?.add(ee),ee.event}function O(K,j){return j instanceof Array?j.push(K):j&&j.add(K),K}function I(K,j,Z=100,Q=!1,ee=!1,ne,ie){let ae,P,U,H=0,$;const te={leakWarningThreshold:ne,onWillAddFirstListener(){ae=K(ue=>{H++,P=j(P,ue),Q&&!U&&(re.fire(P),P=void 0),$=()=>{const ge=P;P=void 0,U=void 0,(!Q||H>1)&&re.fire(ge),H=0},typeof Z==\"number\"?(clearTimeout(U),U=setTimeout($,Z)):U===void 0&&(U=0,queueMicrotask($))})},onWillRemoveListener(){ee&&H>0&&$?.()},onDidRemoveLastListener(){$=void 0,ae.dispose()}};ie||v(te);const re=new y(te);return ie?.add(re),re.event}g.debounce=I;function W(K,j=0,Z){return g.debounce(K,(Q,ee)=>Q?(Q.push(ee),Q):[ee],j,void 0,!0,void 0,Z)}g.accumulate=W;function z(K,j=(Q,ee)=>Q===ee,Z){let Q=!0,ee;return T(K,ne=>{const ie=Q||!j(ne,ee);return Q=!1,ee=ne,ie},Z)}g.latch=z;function G(K,j,Z){return[g.filter(K,j,Z),g.filter(K,Q=>!j(Q),Z)]}g.split=G;function t(K,j=!1,Z=[],Q){let ee=Z.slice(),ne=K(P=>{ee?ee.push(P):ae.fire(P)});Q&&Q.add(ne);const ie=()=>{ee?.forEach(P=>ae.fire(P)),ee=null},ae=new y({onWillAddFirstListener(){ne||(ne=K(P=>ae.fire(P)),Q&&Q.add(ne))},onDidAddFirstListener(){ee&&(j?setTimeout(ie):ie())},onDidRemoveLastListener(){ne&&ne.dispose(),ne=null}});return Q&&Q.add(ae),ae.event}g.buffer=t;function se(K,j){return(Q,ee,ne)=>{const ie=j(new me);return K(function(ae){const P=ie.evaluate(ae);P!==ce&&Q.call(ee,P)},void 0,ne)}}g.chain=se;const ce=Symbol(\"HaltChainable\");class me{constructor(){this.steps=[]}map(j){return this.steps.push(j),this}forEach(j){return this.steps.push(Z=>(j(Z),Z)),this}filter(j){return this.steps.push(Z=>j(Z)?Z:ce),this}reduce(j,Z){let Q=Z;return this.steps.push(ee=>(Q=j(Q,ee),Q)),this}latch(j=(Z,Q)=>Z===Q){let Z=!0,Q;return this.steps.push(ee=>{const ne=Z||!j(ee,Q);return Z=!1,Q=ee,ne?ee:ce}),this}evaluate(j){for(const Z of this.steps)if(j=Z(j),j===ce)break;return j}}function ve(K,j,Z=Q=>Q){const Q=(...ae)=>ie.fire(Z(...ae)),ee=()=>K.on(j,Q),ne=()=>K.removeListener(j,Q),ie=new y({onWillAddFirstListener:ee,onDidRemoveLastListener:ne});return ie.event}g.fromNodeEventEmitter=ve;function pe(K,j,Z=Q=>Q){const Q=(...ae)=>ie.fire(Z(...ae)),ee=()=>K.addEventListener(j,Q),ne=()=>K.removeEventListener(j,Q),ie=new y({onWillAddFirstListener:ee,onDidRemoveLastListener:ne});return ie.event}g.fromDOMEventEmitter=pe;function Le(K){return new Promise(j=>N(K)(j))}g.toPromise=Le;function we(K){const j=new y;return K.then(Z=>{j.fire(Z)},()=>{j.fire(void 0)}).finally(()=>{j.dispose()}),j.event}g.fromPromise=we;function be(K,j,Z){return j(Z),K(Q=>j(Q))}g.runAndSubscribe=be;class Ce{constructor(j,Z){this._observable=j,this._counter=0,this._hasChanged=!1;const Q={onWillAddFirstListener:()=>{j.addObserver(this)},onDidRemoveLastListener:()=>{j.removeObserver(this)}};Z||v(Q),this.emitter=new y(Q),Z&&Z.add(this.emitter)}beginUpdate(j){this._counter++}handlePossibleChange(j){}handleChange(j,Z){this._hasChanged=!0}endUpdate(j){this._counter--,this._counter===0&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}function Se(K,j){return new Ce(K,j).emitter.event}g.fromObservable=Se;function ye(K){return(j,Z,Q)=>{let ee=0,ne=!1;const ie={beginUpdate(){ee++},endUpdate(){ee--,ee===0&&(K.reportChanges(),ne&&(ne=!1,j.call(Z)))},handlePossibleChange(){},handleChange(){ne=!0}};K.addObserver(ie),K.reportChanges();const ae={dispose(){K.removeObserver(ie)}};return Q instanceof i.DisposableStore?Q.add(ae):Array.isArray(Q)&&Q.push(ae),ae}}g.fromObservableLight=ye})(o||(n.Event=o={}));class L{constructor(v){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${v}_${L._idPool++}`,L.all.add(this)}start(v){this._stopWatch=new b.StopWatch,this.listenerCount=v}stop(){if(this._stopWatch){const v=this._stopWatch.elapsed();this.durations.push(v),this.elapsedOverall+=v,this.invocationCount+=1,this._stopWatch=void 0}}}n.EventProfiling=L,L.all=new Set,L._idPool=0;let e=-1;class a{constructor(v,R=Math.random().toString(18).slice(2,5)){this.threshold=v,this.name=R,this._warnCountdown=0}dispose(){var v;(v=this._stacks)===null||v===void 0||v.clear()}check(v,R){const N=this.threshold;if(N<=0||R<N)return;this._stacks||(this._stacks=new Map);const D=this._stacks.get(v.value)||0;if(this._stacks.set(v.value,D+1),this._warnCountdown-=1,this._warnCountdown<=0){this._warnCountdown=N*.5;let x,T=0;for(const[F,B]of this._stacks)(!x||T<B)&&(x=F,T=B);console.warn(`[${this.name}] potential listener LEAK detected, having ${R} listeners already. MOST frequent listener (${T}):`),console.warn(x)}return()=>{const x=this._stacks.get(v.value)||0;this._stacks.set(v.value,x-1)}}}class u{static create(){var v;return new u((v=new Error().stack)!==null&&v!==void 0?v:\"\")}constructor(v){this.value=v}print(){console.warn(this.value.split(`\n`).slice(2).join(`\n`))}}class c{constructor(v){this.value=v}}const m=2,f=(g,v)=>{if(g instanceof c)v(g);else for(let R=0;R<g.length;R++){const N=g[R];N&&v(N)}};class y{constructor(v){var R,N,D,x,T;this._size=0,this._options=v,this._leakageMon=e>0||!((R=this._options)===null||R===void 0)&&R.leakWarningThreshold?new a((D=(N=this._options)===null||N===void 0?void 0:N.leakWarningThreshold)!==null&&D!==void 0?D:e):void 0,this._perfMon=!((x=this._options)===null||x===void 0)&&x._profName?new L(this._options._profName):void 0,this._deliveryQueue=(T=this._options)===null||T===void 0?void 0:T.deliveryQueue}dispose(){var v,R,N,D;if(!this._disposed){if(this._disposed=!0,((v=this._deliveryQueue)===null||v===void 0?void 0:v.current)===this&&this._deliveryQueue.reset(),this._listeners){if(p){const x=this._listeners;queueMicrotask(()=>{f(x,T=>{var F;return(F=T.stack)===null||F===void 0?void 0:F.print()})})}this._listeners=void 0,this._size=0}(N=(R=this._options)===null||R===void 0?void 0:R.onDidRemoveLastListener)===null||N===void 0||N.call(R),(D=this._leakageMon)===null||D===void 0||D.dispose()}}get event(){var v;return(v=this._event)!==null&&v!==void 0||(this._event=(R,N,D)=>{var x,T,F,B,V;if(this._leakageMon&&this._size>this._leakageMon.threshold*3)return console.warn(`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far`),i.Disposable.None;if(this._disposed)return i.Disposable.None;N&&(R=R.bind(N));const k=new c(R);let O,I;this._leakageMon&&this._size>=Math.ceil(this._leakageMon.threshold*.2)&&(k.stack=u.create(),O=this._leakageMon.check(k.stack,this._size+1)),p&&(k.stack=I??u.create()),this._listeners?this._listeners instanceof c?((V=this._deliveryQueue)!==null&&V!==void 0||(this._deliveryQueue=new E),this._listeners=[this._listeners,k]):this._listeners.push(k):((T=(x=this._options)===null||x===void 0?void 0:x.onWillAddFirstListener)===null||T===void 0||T.call(x,this),this._listeners=k,(B=(F=this._options)===null||F===void 0?void 0:F.onDidAddFirstListener)===null||B===void 0||B.call(F,this)),this._size++;const W=(0,i.toDisposable)(()=>{O?.(),this._removeListener(k)});return D instanceof i.DisposableStore?D.add(W):Array.isArray(D)&&D.push(W),W}),this._event}_removeListener(v){var R,N,D,x;if((N=(R=this._options)===null||R===void 0?void 0:R.onWillRemoveListener)===null||N===void 0||N.call(R,this),!this._listeners)return;if(this._size===1){this._listeners=void 0,(x=(D=this._options)===null||D===void 0?void 0:D.onDidRemoveLastListener)===null||x===void 0||x.call(D,this),this._size=0;return}const T=this._listeners,F=T.indexOf(v);if(F===-1)throw console.log(\"disposed?\",this._disposed),console.log(\"size?\",this._size),console.log(\"arr?\",JSON.stringify(this._listeners)),new Error(\"Attempted to dispose unknown listener\");this._size--,T[F]=void 0;const B=this._deliveryQueue.current===this;if(this._size*m<=T.length){let V=0;for(let k=0;k<T.length;k++)T[k]?T[V++]=T[k]:B&&(this._deliveryQueue.end--,V<this._deliveryQueue.i&&this._deliveryQueue.i--);T.length=V}}_deliver(v,R){var N;if(!v)return;const D=((N=this._options)===null||N===void 0?void 0:N.onListenerError)||M.onUnexpectedError;if(!D){v.value(R);return}try{v.value(R)}catch(x){D(x)}}_deliverQueue(v){const R=v.current._listeners;for(;v.i<v.end;)this._deliver(R[v.i++],v.value);v.reset()}fire(v){var R,N,D,x;if(!((R=this._deliveryQueue)===null||R===void 0)&&R.current&&(this._deliverQueue(this._deliveryQueue),(N=this._perfMon)===null||N===void 0||N.stop()),(D=this._perfMon)===null||D===void 0||D.start(this._size),this._listeners)if(this._listeners instanceof c)this._deliver(this._listeners,v);else{const T=this._deliveryQueue;T.enqueue(this,v,this._listeners.length),this._deliverQueue(T)}(x=this._perfMon)===null||x===void 0||x.stop()}hasListeners(){return this._size>0}}n.Emitter=y;const w=()=>new E;n.createEventDeliveryQueue=w;class E{constructor(){this.i=-1,this.end=0}enqueue(v,R,N){this.i=0,this.end=N,this.current=v,this.value=R}reset(){this.i=this.end,this.current=void 0,this.value=void 0}}class S extends y{constructor(v){super(v),this._isPaused=0,this._eventQueue=new d.LinkedList,this._mergeFn=v?.merge}pause(){this._isPaused++}resume(){if(this._isPaused!==0&&--this._isPaused===0)if(this._mergeFn){if(this._eventQueue.size>0){const v=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(v))}}else for(;!this._isPaused&&this._eventQueue.size!==0;)super.fire(this._eventQueue.shift())}fire(v){this._size&&(this._isPaused!==0?this._eventQueue.push(v):super.fire(v))}}n.PauseableEmitter=S;class C extends S{constructor(v){var R;super(v),this._delay=(R=v.delay)!==null&&R!==void 0?R:100}fire(v){this._handle||(this.pause(),this._handle=setTimeout(()=>{this._handle=void 0,this.resume()},this._delay)),super.fire(v)}}n.DebounceEmitter=C;class r extends y{constructor(v){super(v),this._queuedEvents=[],this._mergeFn=v?.merge}fire(v){this.hasListeners()&&(this._queuedEvents.push(v),this._queuedEvents.length===1&&queueMicrotask(()=>{this._mergeFn?super.fire(this._mergeFn(this._queuedEvents)):this._queuedEvents.forEach(R=>super.fire(R)),this._queuedEvents=[]}))}}n.MicrotaskEmitter=r;class s{constructor(){this.hasListeners=!1,this.events=[],this.emitter=new y({onWillAddFirstListener:()=>this.onFirstListenerAdd(),onDidRemoveLastListener:()=>this.onLastListenerRemove()})}get event(){return this.emitter.event}add(v){const R={event:v,listener:null};this.events.push(R),this.hasListeners&&this.hook(R);const N=()=>{this.hasListeners&&this.unhook(R);const D=this.events.indexOf(R);this.events.splice(D,1)};return(0,i.toDisposable)((0,A.createSingleCallFunction)(N))}onFirstListenerAdd(){this.hasListeners=!0,this.events.forEach(v=>this.hook(v))}onLastListenerRemove(){this.hasListeners=!1,this.events.forEach(v=>this.unhook(v))}hook(v){v.listener=v.event(R=>this.emitter.fire(R))}unhook(v){v.listener&&v.listener.dispose(),v.listener=null}dispose(){this.emitter.dispose()}}n.EventMultiplexer=s;class l{constructor(){this.buffers=[]}wrapEvent(v){return(R,N,D)=>v(x=>{const T=this.buffers[this.buffers.length-1];T?T.push(()=>R.call(N,x)):R.call(N,x)},void 0,D)}bufferEvents(v){const R=[];this.buffers.push(R);const N=v();return this.buffers.pop(),R.forEach(D=>D()),N}}n.EventBufferer=l;class _{constructor(){this.listening=!1,this.inputEvent=o.None,this.inputEventListener=i.Disposable.None,this.emitter=new y({onDidAddFirstListener:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onDidRemoveLastListener:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(v){this.inputEvent=v,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=v(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}}n.Relay=_}),Y(X[38],J([0,1,9]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.CancellationTokenSource=n.CancellationToken=void 0;const A=Object.freeze(function(p,h){const o=setTimeout(p.bind(h),0);return{dispose(){clearTimeout(o)}}});var i;(function(p){function h(o){return o===p.None||o===p.Cancelled||o instanceof d?!0:!o||typeof o!=\"object\"?!1:typeof o.isCancellationRequested==\"boolean\"&&typeof o.onCancellationRequested==\"function\"}p.isCancellationToken=h,p.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:M.Event.None}),p.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:A})})(i||(n.CancellationToken=i={}));class d{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?A:(this._emitter||(this._emitter=new M.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}}class b{constructor(h){this._token=void 0,this._parentListener=void 0,this._parentListener=h&&h.onCancellationRequested(this.cancel,this)}get token(){return this._token||(this._token=new d),this._token}cancel(){this._token?this._token instanceof d&&this._token.cancel():this._token=i.Cancelled}dispose(h=!1){var o;h&&this.cancel(),(o=this._parentListener)===null||o===void 0||o.dispose(),this._token?this._token instanceof d&&this._token.dispose():this._token=i.None}}n.CancellationTokenSource=b}),Y(X[6],J([0,1,32,36]),function(q,n,M,A){\"use strict\";var i;Object.defineProperty(n,\"__esModule\",{value:!0}),n.InvisibleCharacters=n.AmbiguousCharacters=n.noBreakWhitespace=n.getLeftDeleteOffset=n.singleLetterHash=n.containsUppercaseCharacter=n.startsWithUTF8BOM=n.UTF8_BOM_CHARACTER=n.isEmojiImprecise=n.isFullWidthCharacter=n.containsUnusualLineTerminators=n.UNUSUAL_LINE_TERMINATORS=n.isBasicASCII=n.containsRTL=n.getCharContainingOffset=n.prevCharLength=n.nextCharLength=n.GraphemeIterator=n.CodePointIterator=n.getNextCodePoint=n.computeCodePoint=n.isLowSurrogate=n.isHighSurrogate=n.commonSuffixLength=n.commonPrefixLength=n.startsWithIgnoreCase=n.equalsIgnoreCase=n.isUpperAsciiLetter=n.isLowerAsciiLetter=n.isAsciiDigit=n.compareSubstringIgnoreCase=n.compareIgnoreCase=n.compareSubstring=n.compare=n.lastNonWhitespaceIndex=n.getLeadingWhitespace=n.firstNonWhitespaceIndex=n.splitLines=n.regExpLeadsToEndlessLoop=n.createRegExp=n.stripWildcards=n.convertSimple2RegExpPattern=n.rtrim=n.ltrim=n.trim=n.escapeRegExpCharacters=n.escape=n.htmlAttributeEncodeValue=n.format=n.isFalsyOrWhitespace=void 0;function d(P){return!P||typeof P!=\"string\"?!0:P.trim().length===0}n.isFalsyOrWhitespace=d;const b=/{(\\d+)}/g;function p(P,...U){return U.length===0?P:P.replace(b,function(H,$){const te=parseInt($,10);return isNaN(te)||te<0||te>=U.length?H:U[te]})}n.format=p;function h(P){return P.replace(/[<>\"'&]/g,U=>{switch(U){case\"<\":return\"&lt;\";case\">\":return\"&gt;\";case'\"':return\"&quot;\";case\"'\":return\"&apos;\";case\"&\":return\"&amp;\"}return U})}n.htmlAttributeEncodeValue=h;function o(P){return P.replace(/[<>&]/g,function(U){switch(U){case\"<\":return\"&lt;\";case\">\":return\"&gt;\";case\"&\":return\"&amp;\";default:return U}})}n.escape=o;function L(P){return P.replace(/[\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\[\\]\\(\\)]/g,\"\\\\$&\")}n.escapeRegExpCharacters=L;function e(P,U=\" \"){const H=a(P,U);return u(H,U)}n.trim=e;function a(P,U){if(!P||!U)return P;const H=U.length;if(H===0||P.length===0)return P;let $=0;for(;P.indexOf(U,$)===$;)$=$+H;return P.substring($)}n.ltrim=a;function u(P,U){if(!P||!U)return P;const H=U.length,$=P.length;if(H===0||$===0)return P;let te=$,re=-1;for(;re=P.lastIndexOf(U,te-1),!(re===-1||re+H!==te);){if(re===0)return\"\";te=re}return P.substring(0,te)}n.rtrim=u;function c(P){return P.replace(/[\\-\\\\\\{\\}\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g,\"\\\\$&\").replace(/[\\*]/g,\".*\")}n.convertSimple2RegExpPattern=c;function m(P){return P.replace(/\\*/g,\"\")}n.stripWildcards=m;function f(P,U,H={}){if(!P)throw new Error(\"Cannot create regex from empty string\");U||(P=L(P)),H.wholeWord&&(/\\B/.test(P.charAt(0))||(P=\"\\\\b\"+P),/\\B/.test(P.charAt(P.length-1))||(P=P+\"\\\\b\"));let $=\"\";return H.global&&($+=\"g\"),H.matchCase||($+=\"i\"),H.multiline&&($+=\"m\"),H.unicode&&($+=\"u\"),new RegExp(P,$)}n.createRegExp=f;function y(P){return P.source===\"^\"||P.source===\"^$\"||P.source===\"$\"||P.source===\"^\\\\s*$\"?!1:!!(P.exec(\"\")&&P.lastIndex===0)}n.regExpLeadsToEndlessLoop=y;function w(P){return P.split(/\\r\\n|\\r|\\n/)}n.splitLines=w;function E(P){for(let U=0,H=P.length;U<H;U++){const $=P.charCodeAt(U);if($!==32&&$!==9)return U}return-1}n.firstNonWhitespaceIndex=E;function S(P,U=0,H=P.length){for(let $=U;$<H;$++){const te=P.charCodeAt($);if(te!==32&&te!==9)return P.substring(U,$)}return P.substring(U,H)}n.getLeadingWhitespace=S;function C(P,U=P.length-1){for(let H=U;H>=0;H--){const $=P.charCodeAt(H);if($!==32&&$!==9)return H}return-1}n.lastNonWhitespaceIndex=C;function r(P,U){return P<U?-1:P>U?1:0}n.compare=r;function s(P,U,H=0,$=P.length,te=0,re=U.length){for(;H<$&&te<re;H++,te++){const fe=P.charCodeAt(H),oe=U.charCodeAt(te);if(fe<oe)return-1;if(fe>oe)return 1}const ue=$-H,ge=re-te;return ue<ge?-1:ue>ge?1:0}n.compareSubstring=s;function l(P,U){return _(P,U,0,P.length,0,U.length)}n.compareIgnoreCase=l;function _(P,U,H=0,$=P.length,te=0,re=U.length){for(;H<$&&te<re;H++,te++){let fe=P.charCodeAt(H),oe=U.charCodeAt(te);if(fe===oe)continue;if(fe>=128||oe>=128)return s(P.toLowerCase(),U.toLowerCase(),H,$,te,re);v(fe)&&(fe-=32),v(oe)&&(oe-=32);const he=fe-oe;if(he!==0)return he}const ue=$-H,ge=re-te;return ue<ge?-1:ue>ge?1:0}n.compareSubstringIgnoreCase=_;function g(P){return P>=48&&P<=57}n.isAsciiDigit=g;function v(P){return P>=97&&P<=122}n.isLowerAsciiLetter=v;function R(P){return P>=65&&P<=90}n.isUpperAsciiLetter=R;function N(P,U){return P.length===U.length&&_(P,U)===0}n.equalsIgnoreCase=N;function D(P,U){const H=U.length;return U.length>P.length?!1:_(P,U,0,H)===0}n.startsWithIgnoreCase=D;function x(P,U){const H=Math.min(P.length,U.length);let $;for($=0;$<H;$++)if(P.charCodeAt($)!==U.charCodeAt($))return $;return H}n.commonPrefixLength=x;function T(P,U){const H=Math.min(P.length,U.length);let $;const te=P.length-1,re=U.length-1;for($=0;$<H;$++)if(P.charCodeAt(te-$)!==U.charCodeAt(re-$))return $;return H}n.commonSuffixLength=T;function F(P){return 55296<=P&&P<=56319}n.isHighSurrogate=F;function B(P){return 56320<=P&&P<=57343}n.isLowSurrogate=B;function V(P,U){return(P-55296<<10)+(U-56320)+65536}n.computeCodePoint=V;function k(P,U,H){const $=P.charCodeAt(H);if(F($)&&H+1<U){const te=P.charCodeAt(H+1);if(B(te))return V($,te)}return $}n.getNextCodePoint=k;function O(P,U){const H=P.charCodeAt(U-1);if(B(H)&&U>1){const $=P.charCodeAt(U-2);if(F($))return V($,H)}return H}class I{get offset(){return this._offset}constructor(U,H=0){this._str=U,this._len=U.length,this._offset=H}setOffset(U){this._offset=U}prevCodePoint(){const U=O(this._str,this._offset);return this._offset-=U>=65536?2:1,U}nextCodePoint(){const U=k(this._str,this._len,this._offset);return this._offset+=U>=65536?2:1,U}eol(){return this._offset>=this._len}}n.CodePointIterator=I;class W{get offset(){return this._iterator.offset}constructor(U,H=0){this._iterator=new I(U,H)}nextGraphemeLength(){const U=j.getInstance(),H=this._iterator,$=H.offset;let te=U.getGraphemeBreakType(H.nextCodePoint());for(;!H.eol();){const re=H.offset,ue=U.getGraphemeBreakType(H.nextCodePoint());if(K(te,ue)){H.setOffset(re);break}te=ue}return H.offset-$}prevGraphemeLength(){const U=j.getInstance(),H=this._iterator,$=H.offset;let te=U.getGraphemeBreakType(H.prevCodePoint());for(;H.offset>0;){const re=H.offset,ue=U.getGraphemeBreakType(H.prevCodePoint());if(K(ue,te)){H.setOffset(re);break}te=ue}return $-H.offset}eol(){return this._iterator.eol()}}n.GraphemeIterator=W;function z(P,U){return new W(P,U).nextGraphemeLength()}n.nextCharLength=z;function G(P,U){return new W(P,U).prevGraphemeLength()}n.prevCharLength=G;function t(P,U){U>0&&B(P.charCodeAt(U))&&U--;const H=U+z(P,U);return[H-G(P,H),H]}n.getCharContainingOffset=t;let se;function ce(){return/(?:[\\u05BE\\u05C0\\u05C3\\u05C6\\u05D0-\\u05F4\\u0608\\u060B\\u060D\\u061B-\\u064A\\u066D-\\u066F\\u0671-\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1-\\u07EA\\u07F4\\u07F5\\u07FA\\u07FE-\\u0815\\u081A\\u0824\\u0828\\u0830-\\u0858\\u085E-\\u088E\\u08A0-\\u08C9\\u200F\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFD3D\\uFD50-\\uFDC7\\uFDF0-\\uFDFC\\uFE70-\\uFEFC]|\\uD802[\\uDC00-\\uDD1B\\uDD20-\\uDE00\\uDE10-\\uDE35\\uDE40-\\uDEE4\\uDEEB-\\uDF35\\uDF40-\\uDFFF]|\\uD803[\\uDC00-\\uDD23\\uDE80-\\uDEA9\\uDEAD-\\uDF45\\uDF51-\\uDF81\\uDF86-\\uDFF6]|\\uD83A[\\uDC00-\\uDCCF\\uDD00-\\uDD43\\uDD4B-\\uDFFF]|\\uD83B[\\uDC00-\\uDEBB])/}function me(P){return se||(se=ce()),se.test(P)}n.containsRTL=me;const ve=/^[\\t\\n\\r\\x20-\\x7E]*$/;function pe(P){return ve.test(P)}n.isBasicASCII=pe,n.UNUSUAL_LINE_TERMINATORS=/[\\u2028\\u2029]/;function Le(P){return n.UNUSUAL_LINE_TERMINATORS.test(P)}n.containsUnusualLineTerminators=Le;function we(P){return P>=11904&&P<=55215||P>=63744&&P<=64255||P>=65281&&P<=65374}n.isFullWidthCharacter=we;function be(P){return P>=127462&&P<=127487||P===8986||P===8987||P===9200||P===9203||P>=9728&&P<=10175||P===11088||P===11093||P>=127744&&P<=128591||P>=128640&&P<=128764||P>=128992&&P<=129008||P>=129280&&P<=129535||P>=129648&&P<=129782}n.isEmojiImprecise=be,n.UTF8_BOM_CHARACTER=String.fromCharCode(65279);function Ce(P){return!!(P&&P.length>0&&P.charCodeAt(0)===65279)}n.startsWithUTF8BOM=Ce;function Se(P,U=!1){return P?(U&&(P=P.replace(/\\\\./g,\"\")),P.toLowerCase()!==P):!1}n.containsUppercaseCharacter=Se;function ye(P){return P=P%(2*26),P<26?String.fromCharCode(97+P):String.fromCharCode(65+P-26)}n.singleLetterHash=ye;function K(P,U){return P===0?U!==5&&U!==7:P===2&&U===3?!1:P===4||P===2||P===3||U===4||U===2||U===3?!0:!(P===8&&(U===8||U===9||U===11||U===12)||(P===11||P===9)&&(U===9||U===10)||(P===12||P===10)&&U===10||U===5||U===13||U===7||P===1||P===13&&U===14||P===6&&U===6)}class j{static getInstance(){return j._INSTANCE||(j._INSTANCE=new j),j._INSTANCE}constructor(){this._data=Z()}getGraphemeBreakType(U){if(U<32)return U===10?3:U===13?2:4;if(U<127)return 0;const H=this._data,$=H.length/3;let te=1;for(;te<=$;)if(U<H[3*te])te=2*te;else if(U>H[3*te+1])te=2*te+1;else return H[3*te+2];return 0}}j._INSTANCE=null;function Z(){return JSON.parse(\"[0,0,0,51229,51255,12,44061,44087,12,127462,127487,6,7083,7085,5,47645,47671,12,54813,54839,12,128678,128678,14,3270,3270,5,9919,9923,14,45853,45879,12,49437,49463,12,53021,53047,12,71216,71218,7,128398,128399,14,129360,129374,14,2519,2519,5,4448,4519,9,9742,9742,14,12336,12336,14,44957,44983,12,46749,46775,12,48541,48567,12,50333,50359,12,52125,52151,12,53917,53943,12,69888,69890,5,73018,73018,5,127990,127990,14,128558,128559,14,128759,128760,14,129653,129655,14,2027,2035,5,2891,2892,7,3761,3761,5,6683,6683,5,8293,8293,4,9825,9826,14,9999,9999,14,43452,43453,5,44509,44535,12,45405,45431,12,46301,46327,12,47197,47223,12,48093,48119,12,48989,49015,12,49885,49911,12,50781,50807,12,51677,51703,12,52573,52599,12,53469,53495,12,54365,54391,12,65279,65279,4,70471,70472,7,72145,72147,7,119173,119179,5,127799,127818,14,128240,128244,14,128512,128512,14,128652,128652,14,128721,128722,14,129292,129292,14,129445,129450,14,129734,129743,14,1476,1477,5,2366,2368,7,2750,2752,7,3076,3076,5,3415,3415,5,4141,4144,5,6109,6109,5,6964,6964,5,7394,7400,5,9197,9198,14,9770,9770,14,9877,9877,14,9968,9969,14,10084,10084,14,43052,43052,5,43713,43713,5,44285,44311,12,44733,44759,12,45181,45207,12,45629,45655,12,46077,46103,12,46525,46551,12,46973,46999,12,47421,47447,12,47869,47895,12,48317,48343,12,48765,48791,12,49213,49239,12,49661,49687,12,50109,50135,12,50557,50583,12,51005,51031,12,51453,51479,12,51901,51927,12,52349,52375,12,52797,52823,12,53245,53271,12,53693,53719,12,54141,54167,12,54589,54615,12,55037,55063,12,69506,69509,5,70191,70193,5,70841,70841,7,71463,71467,5,72330,72342,5,94031,94031,5,123628,123631,5,127763,127765,14,127941,127941,14,128043,128062,14,128302,128317,14,128465,128467,14,128539,128539,14,128640,128640,14,128662,128662,14,128703,128703,14,128745,128745,14,129004,129007,14,129329,129330,14,129402,129402,14,129483,129483,14,129686,129704,14,130048,131069,14,173,173,4,1757,1757,1,2200,2207,5,2434,2435,7,2631,2632,5,2817,2817,5,3008,3008,5,3201,3201,5,3387,3388,5,3542,3542,5,3902,3903,7,4190,4192,5,6002,6003,5,6439,6440,5,6765,6770,7,7019,7027,5,7154,7155,7,8205,8205,13,8505,8505,14,9654,9654,14,9757,9757,14,9792,9792,14,9852,9853,14,9890,9894,14,9937,9937,14,9981,9981,14,10035,10036,14,11035,11036,14,42654,42655,5,43346,43347,7,43587,43587,5,44006,44007,7,44173,44199,12,44397,44423,12,44621,44647,12,44845,44871,12,45069,45095,12,45293,45319,12,45517,45543,12,45741,45767,12,45965,45991,12,46189,46215,12,46413,46439,12,46637,46663,12,46861,46887,12,47085,47111,12,47309,47335,12,47533,47559,12,47757,47783,12,47981,48007,12,48205,48231,12,48429,48455,12,48653,48679,12,48877,48903,12,49101,49127,12,49325,49351,12,49549,49575,12,49773,49799,12,49997,50023,12,50221,50247,12,50445,50471,12,50669,50695,12,50893,50919,12,51117,51143,12,51341,51367,12,51565,51591,12,51789,51815,12,52013,52039,12,52237,52263,12,52461,52487,12,52685,52711,12,52909,52935,12,53133,53159,12,53357,53383,12,53581,53607,12,53805,53831,12,54029,54055,12,54253,54279,12,54477,54503,12,54701,54727,12,54925,54951,12,55149,55175,12,68101,68102,5,69762,69762,7,70067,70069,7,70371,70378,5,70720,70721,7,71087,71087,5,71341,71341,5,71995,71996,5,72249,72249,7,72850,72871,5,73109,73109,5,118576,118598,5,121505,121519,5,127245,127247,14,127568,127569,14,127777,127777,14,127872,127891,14,127956,127967,14,128015,128016,14,128110,128172,14,128259,128259,14,128367,128368,14,128424,128424,14,128488,128488,14,128530,128532,14,128550,128551,14,128566,128566,14,128647,128647,14,128656,128656,14,128667,128673,14,128691,128693,14,128715,128715,14,128728,128732,14,128752,128752,14,128765,128767,14,129096,129103,14,129311,129311,14,129344,129349,14,129394,129394,14,129413,129425,14,129466,129471,14,129511,129535,14,129664,129666,14,129719,129722,14,129760,129767,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2307,2307,7,2382,2383,7,2497,2500,5,2563,2563,7,2677,2677,5,2763,2764,7,2879,2879,5,2914,2915,5,3021,3021,5,3142,3144,5,3263,3263,5,3285,3286,5,3398,3400,7,3530,3530,5,3633,3633,5,3864,3865,5,3974,3975,5,4155,4156,7,4229,4230,5,5909,5909,7,6078,6085,7,6277,6278,5,6451,6456,7,6744,6750,5,6846,6846,5,6972,6972,5,7074,7077,5,7146,7148,7,7222,7223,5,7416,7417,5,8234,8238,4,8417,8417,5,9000,9000,14,9203,9203,14,9730,9731,14,9748,9749,14,9762,9763,14,9776,9783,14,9800,9811,14,9831,9831,14,9872,9873,14,9882,9882,14,9900,9903,14,9929,9933,14,9941,9960,14,9974,9974,14,9989,9989,14,10006,10006,14,10062,10062,14,10160,10160,14,11647,11647,5,12953,12953,14,43019,43019,5,43232,43249,5,43443,43443,5,43567,43568,7,43696,43696,5,43765,43765,7,44013,44013,5,44117,44143,12,44229,44255,12,44341,44367,12,44453,44479,12,44565,44591,12,44677,44703,12,44789,44815,12,44901,44927,12,45013,45039,12,45125,45151,12,45237,45263,12,45349,45375,12,45461,45487,12,45573,45599,12,45685,45711,12,45797,45823,12,45909,45935,12,46021,46047,12,46133,46159,12,46245,46271,12,46357,46383,12,46469,46495,12,46581,46607,12,46693,46719,12,46805,46831,12,46917,46943,12,47029,47055,12,47141,47167,12,47253,47279,12,47365,47391,12,47477,47503,12,47589,47615,12,47701,47727,12,47813,47839,12,47925,47951,12,48037,48063,12,48149,48175,12,48261,48287,12,48373,48399,12,48485,48511,12,48597,48623,12,48709,48735,12,48821,48847,12,48933,48959,12,49045,49071,12,49157,49183,12,49269,49295,12,49381,49407,12,49493,49519,12,49605,49631,12,49717,49743,12,49829,49855,12,49941,49967,12,50053,50079,12,50165,50191,12,50277,50303,12,50389,50415,12,50501,50527,12,50613,50639,12,50725,50751,12,50837,50863,12,50949,50975,12,51061,51087,12,51173,51199,12,51285,51311,12,51397,51423,12,51509,51535,12,51621,51647,12,51733,51759,12,51845,51871,12,51957,51983,12,52069,52095,12,52181,52207,12,52293,52319,12,52405,52431,12,52517,52543,12,52629,52655,12,52741,52767,12,52853,52879,12,52965,52991,12,53077,53103,12,53189,53215,12,53301,53327,12,53413,53439,12,53525,53551,12,53637,53663,12,53749,53775,12,53861,53887,12,53973,53999,12,54085,54111,12,54197,54223,12,54309,54335,12,54421,54447,12,54533,54559,12,54645,54671,12,54757,54783,12,54869,54895,12,54981,55007,12,55093,55119,12,55243,55291,10,66045,66045,5,68325,68326,5,69688,69702,5,69817,69818,5,69957,69958,7,70089,70092,5,70198,70199,5,70462,70462,5,70502,70508,5,70750,70750,5,70846,70846,7,71100,71101,5,71230,71230,7,71351,71351,5,71737,71738,5,72000,72000,7,72160,72160,5,72273,72278,5,72752,72758,5,72882,72883,5,73031,73031,5,73461,73462,7,94192,94193,7,119149,119149,7,121403,121452,5,122915,122916,5,126980,126980,14,127358,127359,14,127535,127535,14,127759,127759,14,127771,127771,14,127792,127793,14,127825,127867,14,127897,127899,14,127945,127945,14,127985,127986,14,128000,128007,14,128021,128021,14,128066,128100,14,128184,128235,14,128249,128252,14,128266,128276,14,128335,128335,14,128379,128390,14,128407,128419,14,128444,128444,14,128481,128481,14,128499,128499,14,128526,128526,14,128536,128536,14,128543,128543,14,128556,128556,14,128564,128564,14,128577,128580,14,128643,128645,14,128649,128649,14,128654,128654,14,128660,128660,14,128664,128664,14,128675,128675,14,128686,128689,14,128695,128696,14,128705,128709,14,128717,128719,14,128725,128725,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129009,129023,14,129160,129167,14,129296,129304,14,129320,129327,14,129340,129342,14,129356,129356,14,129388,129392,14,129399,129400,14,129404,129407,14,129432,129442,14,129454,129455,14,129473,129474,14,129485,129487,14,129648,129651,14,129659,129660,14,129671,129679,14,129709,129711,14,129728,129730,14,129751,129753,14,129776,129782,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2274,2274,1,2363,2363,7,2377,2380,7,2402,2403,5,2494,2494,5,2507,2508,7,2558,2558,5,2622,2624,7,2641,2641,5,2691,2691,7,2759,2760,5,2786,2787,5,2876,2876,5,2881,2884,5,2901,2902,5,3006,3006,5,3014,3016,7,3072,3072,5,3134,3136,5,3157,3158,5,3260,3260,5,3266,3266,5,3274,3275,7,3328,3329,5,3391,3392,7,3405,3405,5,3457,3457,5,3536,3537,7,3551,3551,5,3636,3642,5,3764,3772,5,3895,3895,5,3967,3967,7,3993,4028,5,4146,4151,5,4182,4183,7,4226,4226,5,4253,4253,5,4957,4959,5,5940,5940,7,6070,6070,7,6087,6088,7,6158,6158,4,6432,6434,5,6448,6449,7,6679,6680,5,6742,6742,5,6754,6754,5,6783,6783,5,6912,6915,5,6966,6970,5,6978,6978,5,7042,7042,7,7080,7081,5,7143,7143,7,7150,7150,7,7212,7219,5,7380,7392,5,7412,7412,5,8203,8203,4,8232,8232,4,8265,8265,14,8400,8412,5,8421,8432,5,8617,8618,14,9167,9167,14,9200,9200,14,9410,9410,14,9723,9726,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9774,14,9786,9786,14,9794,9794,14,9823,9823,14,9828,9828,14,9833,9850,14,9855,9855,14,9875,9875,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9935,9935,14,9939,9939,14,9962,9962,14,9972,9972,14,9978,9978,14,9986,9986,14,9997,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10133,10135,14,10548,10549,14,11093,11093,14,12330,12333,5,12441,12442,5,42608,42610,5,43010,43010,5,43045,43046,5,43188,43203,7,43302,43309,5,43392,43394,5,43446,43449,5,43493,43493,5,43571,43572,7,43597,43597,7,43703,43704,5,43756,43757,5,44003,44004,7,44009,44010,7,44033,44059,12,44089,44115,12,44145,44171,12,44201,44227,12,44257,44283,12,44313,44339,12,44369,44395,12,44425,44451,12,44481,44507,12,44537,44563,12,44593,44619,12,44649,44675,12,44705,44731,12,44761,44787,12,44817,44843,12,44873,44899,12,44929,44955,12,44985,45011,12,45041,45067,12,45097,45123,12,45153,45179,12,45209,45235,12,45265,45291,12,45321,45347,12,45377,45403,12,45433,45459,12,45489,45515,12,45545,45571,12,45601,45627,12,45657,45683,12,45713,45739,12,45769,45795,12,45825,45851,12,45881,45907,12,45937,45963,12,45993,46019,12,46049,46075,12,46105,46131,12,46161,46187,12,46217,46243,12,46273,46299,12,46329,46355,12,46385,46411,12,46441,46467,12,46497,46523,12,46553,46579,12,46609,46635,12,46665,46691,12,46721,46747,12,46777,46803,12,46833,46859,12,46889,46915,12,46945,46971,12,47001,47027,12,47057,47083,12,47113,47139,12,47169,47195,12,47225,47251,12,47281,47307,12,47337,47363,12,47393,47419,12,47449,47475,12,47505,47531,12,47561,47587,12,47617,47643,12,47673,47699,12,47729,47755,12,47785,47811,12,47841,47867,12,47897,47923,12,47953,47979,12,48009,48035,12,48065,48091,12,48121,48147,12,48177,48203,12,48233,48259,12,48289,48315,12,48345,48371,12,48401,48427,12,48457,48483,12,48513,48539,12,48569,48595,12,48625,48651,12,48681,48707,12,48737,48763,12,48793,48819,12,48849,48875,12,48905,48931,12,48961,48987,12,49017,49043,12,49073,49099,12,49129,49155,12,49185,49211,12,49241,49267,12,49297,49323,12,49353,49379,12,49409,49435,12,49465,49491,12,49521,49547,12,49577,49603,12,49633,49659,12,49689,49715,12,49745,49771,12,49801,49827,12,49857,49883,12,49913,49939,12,49969,49995,12,50025,50051,12,50081,50107,12,50137,50163,12,50193,50219,12,50249,50275,12,50305,50331,12,50361,50387,12,50417,50443,12,50473,50499,12,50529,50555,12,50585,50611,12,50641,50667,12,50697,50723,12,50753,50779,12,50809,50835,12,50865,50891,12,50921,50947,12,50977,51003,12,51033,51059,12,51089,51115,12,51145,51171,12,51201,51227,12,51257,51283,12,51313,51339,12,51369,51395,12,51425,51451,12,51481,51507,12,51537,51563,12,51593,51619,12,51649,51675,12,51705,51731,12,51761,51787,12,51817,51843,12,51873,51899,12,51929,51955,12,51985,52011,12,52041,52067,12,52097,52123,12,52153,52179,12,52209,52235,12,52265,52291,12,52321,52347,12,52377,52403,12,52433,52459,12,52489,52515,12,52545,52571,12,52601,52627,12,52657,52683,12,52713,52739,12,52769,52795,12,52825,52851,12,52881,52907,12,52937,52963,12,52993,53019,12,53049,53075,12,53105,53131,12,53161,53187,12,53217,53243,12,53273,53299,12,53329,53355,12,53385,53411,12,53441,53467,12,53497,53523,12,53553,53579,12,53609,53635,12,53665,53691,12,53721,53747,12,53777,53803,12,53833,53859,12,53889,53915,12,53945,53971,12,54001,54027,12,54057,54083,12,54113,54139,12,54169,54195,12,54225,54251,12,54281,54307,12,54337,54363,12,54393,54419,12,54449,54475,12,54505,54531,12,54561,54587,12,54617,54643,12,54673,54699,12,54729,54755,12,54785,54811,12,54841,54867,12,54897,54923,12,54953,54979,12,55009,55035,12,55065,55091,12,55121,55147,12,55177,55203,12,65024,65039,5,65520,65528,4,66422,66426,5,68152,68154,5,69291,69292,5,69633,69633,5,69747,69748,5,69811,69814,5,69826,69826,5,69932,69932,7,70016,70017,5,70079,70080,7,70095,70095,5,70196,70196,5,70367,70367,5,70402,70403,7,70464,70464,5,70487,70487,5,70709,70711,7,70725,70725,7,70833,70834,7,70843,70844,7,70849,70849,7,71090,71093,5,71103,71104,5,71227,71228,7,71339,71339,5,71344,71349,5,71458,71461,5,71727,71735,5,71985,71989,7,71998,71998,5,72002,72002,7,72154,72155,5,72193,72202,5,72251,72254,5,72281,72283,5,72344,72345,5,72766,72766,7,72874,72880,5,72885,72886,5,73023,73029,5,73104,73105,5,73111,73111,5,92912,92916,5,94095,94098,5,113824,113827,4,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,125252,125258,5,127183,127183,14,127340,127343,14,127377,127386,14,127491,127503,14,127548,127551,14,127744,127756,14,127761,127761,14,127769,127769,14,127773,127774,14,127780,127788,14,127796,127797,14,127820,127823,14,127869,127869,14,127894,127895,14,127902,127903,14,127943,127943,14,127947,127950,14,127972,127972,14,127988,127988,14,127992,127994,14,128009,128011,14,128019,128019,14,128023,128041,14,128064,128064,14,128102,128107,14,128174,128181,14,128238,128238,14,128246,128247,14,128254,128254,14,128264,128264,14,128278,128299,14,128329,128330,14,128348,128359,14,128371,128377,14,128392,128393,14,128401,128404,14,128421,128421,14,128433,128434,14,128450,128452,14,128476,128478,14,128483,128483,14,128495,128495,14,128506,128506,14,128519,128520,14,128528,128528,14,128534,128534,14,128538,128538,14,128540,128542,14,128544,128549,14,128552,128555,14,128557,128557,14,128560,128563,14,128565,128565,14,128567,128576,14,128581,128591,14,128641,128642,14,128646,128646,14,128648,128648,14,128650,128651,14,128653,128653,14,128655,128655,14,128657,128659,14,128661,128661,14,128663,128663,14,128665,128666,14,128674,128674,14,128676,128677,14,128679,128685,14,128690,128690,14,128694,128694,14,128697,128702,14,128704,128704,14,128710,128714,14,128716,128716,14,128720,128720,14,128723,128724,14,128726,128727,14,128733,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129008,129008,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129661,129663,14,129667,129670,14,129680,129685,14,129705,129708,14,129712,129718,14,129723,129727,14,129731,129733,14,129744,129750,14,129754,129759,14,129768,129775,14,129783,129791,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2192,2193,1,2250,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3132,3132,5,3137,3140,7,3146,3149,5,3170,3171,5,3202,3203,7,3262,3262,7,3264,3265,7,3267,3268,7,3271,3272,7,3276,3277,5,3298,3299,5,3330,3331,7,3390,3390,5,3393,3396,5,3402,3404,7,3406,3406,1,3426,3427,5,3458,3459,7,3535,3535,5,3538,3540,5,3544,3550,7,3570,3571,7,3635,3635,7,3655,3662,5,3763,3763,7,3784,3789,5,3893,3893,5,3897,3897,5,3953,3966,5,3968,3972,5,3981,3991,5,4038,4038,5,4145,4145,7,4153,4154,5,4157,4158,5,4184,4185,5,4209,4212,5,4228,4228,7,4237,4237,5,4352,4447,8,4520,4607,10,5906,5908,5,5938,5939,5,5970,5971,5,6068,6069,5,6071,6077,5,6086,6086,5,6089,6099,5,6155,6157,5,6159,6159,5,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6862,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7679,5,8204,8204,5,8206,8207,4,8233,8233,4,8252,8252,14,8288,8292,4,8294,8303,4,8413,8416,5,8418,8420,5,8482,8482,14,8596,8601,14,8986,8987,14,9096,9096,14,9193,9196,14,9199,9199,14,9201,9202,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9729,14,9732,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9775,9775,14,9784,9785,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9874,14,9876,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9934,14,9936,9936,14,9938,9938,14,9940,9940,14,9961,9961,14,9963,9967,14,9970,9971,14,9973,9973,14,9975,9977,14,9979,9980,14,9982,9985,14,9987,9988,14,9992,9996,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10083,14,10085,10087,14,10145,10145,14,10175,10175,14,11013,11015,14,11088,11088,14,11503,11505,5,11744,11775,5,12334,12335,5,12349,12349,14,12951,12951,14,42607,42607,5,42612,42621,5,42736,42737,5,43014,43014,5,43043,43044,7,43047,43047,7,43136,43137,7,43204,43205,5,43263,43263,5,43335,43345,5,43360,43388,8,43395,43395,7,43444,43445,7,43450,43451,7,43454,43456,7,43561,43566,5,43569,43570,5,43573,43574,5,43596,43596,5,43644,43644,5,43698,43700,5,43710,43711,5,43755,43755,7,43758,43759,7,43766,43766,5,44005,44005,5,44008,44008,5,44012,44012,7,44032,44032,11,44060,44060,11,44088,44088,11,44116,44116,11,44144,44144,11,44172,44172,11,44200,44200,11,44228,44228,11,44256,44256,11,44284,44284,11,44312,44312,11,44340,44340,11,44368,44368,11,44396,44396,11,44424,44424,11,44452,44452,11,44480,44480,11,44508,44508,11,44536,44536,11,44564,44564,11,44592,44592,11,44620,44620,11,44648,44648,11,44676,44676,11,44704,44704,11,44732,44732,11,44760,44760,11,44788,44788,11,44816,44816,11,44844,44844,11,44872,44872,11,44900,44900,11,44928,44928,11,44956,44956,11,44984,44984,11,45012,45012,11,45040,45040,11,45068,45068,11,45096,45096,11,45124,45124,11,45152,45152,11,45180,45180,11,45208,45208,11,45236,45236,11,45264,45264,11,45292,45292,11,45320,45320,11,45348,45348,11,45376,45376,11,45404,45404,11,45432,45432,11,45460,45460,11,45488,45488,11,45516,45516,11,45544,45544,11,45572,45572,11,45600,45600,11,45628,45628,11,45656,45656,11,45684,45684,11,45712,45712,11,45740,45740,11,45768,45768,11,45796,45796,11,45824,45824,11,45852,45852,11,45880,45880,11,45908,45908,11,45936,45936,11,45964,45964,11,45992,45992,11,46020,46020,11,46048,46048,11,46076,46076,11,46104,46104,11,46132,46132,11,46160,46160,11,46188,46188,11,46216,46216,11,46244,46244,11,46272,46272,11,46300,46300,11,46328,46328,11,46356,46356,11,46384,46384,11,46412,46412,11,46440,46440,11,46468,46468,11,46496,46496,11,46524,46524,11,46552,46552,11,46580,46580,11,46608,46608,11,46636,46636,11,46664,46664,11,46692,46692,11,46720,46720,11,46748,46748,11,46776,46776,11,46804,46804,11,46832,46832,11,46860,46860,11,46888,46888,11,46916,46916,11,46944,46944,11,46972,46972,11,47000,47000,11,47028,47028,11,47056,47056,11,47084,47084,11,47112,47112,11,47140,47140,11,47168,47168,11,47196,47196,11,47224,47224,11,47252,47252,11,47280,47280,11,47308,47308,11,47336,47336,11,47364,47364,11,47392,47392,11,47420,47420,11,47448,47448,11,47476,47476,11,47504,47504,11,47532,47532,11,47560,47560,11,47588,47588,11,47616,47616,11,47644,47644,11,47672,47672,11,47700,47700,11,47728,47728,11,47756,47756,11,47784,47784,11,47812,47812,11,47840,47840,11,47868,47868,11,47896,47896,11,47924,47924,11,47952,47952,11,47980,47980,11,48008,48008,11,48036,48036,11,48064,48064,11,48092,48092,11,48120,48120,11,48148,48148,11,48176,48176,11,48204,48204,11,48232,48232,11,48260,48260,11,48288,48288,11,48316,48316,11,48344,48344,11,48372,48372,11,48400,48400,11,48428,48428,11,48456,48456,11,48484,48484,11,48512,48512,11,48540,48540,11,48568,48568,11,48596,48596,11,48624,48624,11,48652,48652,11,48680,48680,11,48708,48708,11,48736,48736,11,48764,48764,11,48792,48792,11,48820,48820,11,48848,48848,11,48876,48876,11,48904,48904,11,48932,48932,11,48960,48960,11,48988,48988,11,49016,49016,11,49044,49044,11,49072,49072,11,49100,49100,11,49128,49128,11,49156,49156,11,49184,49184,11,49212,49212,11,49240,49240,11,49268,49268,11,49296,49296,11,49324,49324,11,49352,49352,11,49380,49380,11,49408,49408,11,49436,49436,11,49464,49464,11,49492,49492,11,49520,49520,11,49548,49548,11,49576,49576,11,49604,49604,11,49632,49632,11,49660,49660,11,49688,49688,11,49716,49716,11,49744,49744,11,49772,49772,11,49800,49800,11,49828,49828,11,49856,49856,11,49884,49884,11,49912,49912,11,49940,49940,11,49968,49968,11,49996,49996,11,50024,50024,11,50052,50052,11,50080,50080,11,50108,50108,11,50136,50136,11,50164,50164,11,50192,50192,11,50220,50220,11,50248,50248,11,50276,50276,11,50304,50304,11,50332,50332,11,50360,50360,11,50388,50388,11,50416,50416,11,50444,50444,11,50472,50472,11,50500,50500,11,50528,50528,11,50556,50556,11,50584,50584,11,50612,50612,11,50640,50640,11,50668,50668,11,50696,50696,11,50724,50724,11,50752,50752,11,50780,50780,11,50808,50808,11,50836,50836,11,50864,50864,11,50892,50892,11,50920,50920,11,50948,50948,11,50976,50976,11,51004,51004,11,51032,51032,11,51060,51060,11,51088,51088,11,51116,51116,11,51144,51144,11,51172,51172,11,51200,51200,11,51228,51228,11,51256,51256,11,51284,51284,11,51312,51312,11,51340,51340,11,51368,51368,11,51396,51396,11,51424,51424,11,51452,51452,11,51480,51480,11,51508,51508,11,51536,51536,11,51564,51564,11,51592,51592,11,51620,51620,11,51648,51648,11,51676,51676,11,51704,51704,11,51732,51732,11,51760,51760,11,51788,51788,11,51816,51816,11,51844,51844,11,51872,51872,11,51900,51900,11,51928,51928,11,51956,51956,11,51984,51984,11,52012,52012,11,52040,52040,11,52068,52068,11,52096,52096,11,52124,52124,11,52152,52152,11,52180,52180,11,52208,52208,11,52236,52236,11,52264,52264,11,52292,52292,11,52320,52320,11,52348,52348,11,52376,52376,11,52404,52404,11,52432,52432,11,52460,52460,11,52488,52488,11,52516,52516,11,52544,52544,11,52572,52572,11,52600,52600,11,52628,52628,11,52656,52656,11,52684,52684,11,52712,52712,11,52740,52740,11,52768,52768,11,52796,52796,11,52824,52824,11,52852,52852,11,52880,52880,11,52908,52908,11,52936,52936,11,52964,52964,11,52992,52992,11,53020,53020,11,53048,53048,11,53076,53076,11,53104,53104,11,53132,53132,11,53160,53160,11,53188,53188,11,53216,53216,11,53244,53244,11,53272,53272,11,53300,53300,11,53328,53328,11,53356,53356,11,53384,53384,11,53412,53412,11,53440,53440,11,53468,53468,11,53496,53496,11,53524,53524,11,53552,53552,11,53580,53580,11,53608,53608,11,53636,53636,11,53664,53664,11,53692,53692,11,53720,53720,11,53748,53748,11,53776,53776,11,53804,53804,11,53832,53832,11,53860,53860,11,53888,53888,11,53916,53916,11,53944,53944,11,53972,53972,11,54000,54000,11,54028,54028,11,54056,54056,11,54084,54084,11,54112,54112,11,54140,54140,11,54168,54168,11,54196,54196,11,54224,54224,11,54252,54252,11,54280,54280,11,54308,54308,11,54336,54336,11,54364,54364,11,54392,54392,11,54420,54420,11,54448,54448,11,54476,54476,11,54504,54504,11,54532,54532,11,54560,54560,11,54588,54588,11,54616,54616,11,54644,54644,11,54672,54672,11,54700,54700,11,54728,54728,11,54756,54756,11,54784,54784,11,54812,54812,11,54840,54840,11,54868,54868,11,54896,54896,11,54924,54924,11,54952,54952,11,54980,54980,11,55008,55008,11,55036,55036,11,55064,55064,11,55092,55092,11,55120,55120,11,55148,55148,11,55176,55176,11,55216,55238,9,64286,64286,5,65056,65071,5,65438,65439,5,65529,65531,4,66272,66272,5,68097,68099,5,68108,68111,5,68159,68159,5,68900,68903,5,69446,69456,5,69632,69632,7,69634,69634,7,69744,69744,5,69759,69761,5,69808,69810,7,69815,69816,7,69821,69821,1,69837,69837,1,69927,69931,5,69933,69940,5,70003,70003,5,70018,70018,7,70070,70078,5,70082,70083,1,70094,70094,7,70188,70190,7,70194,70195,7,70197,70197,7,70206,70206,5,70368,70370,7,70400,70401,5,70459,70460,5,70463,70463,7,70465,70468,7,70475,70477,7,70498,70499,7,70512,70516,5,70712,70719,5,70722,70724,5,70726,70726,5,70832,70832,5,70835,70840,5,70842,70842,5,70845,70845,5,70847,70848,5,70850,70851,5,71088,71089,7,71096,71099,7,71102,71102,7,71132,71133,5,71219,71226,5,71229,71229,5,71231,71232,5,71340,71340,7,71342,71343,7,71350,71350,7,71453,71455,5,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,118528,118573,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123566,123566,5,125136,125142,5,126976,126979,14,126981,127182,14,127184,127231,14,127279,127279,14,127344,127345,14,127374,127374,14,127405,127461,14,127489,127490,14,127514,127514,14,127538,127546,14,127561,127567,14,127570,127743,14,127757,127758,14,127760,127760,14,127762,127762,14,127766,127768,14,127770,127770,14,127772,127772,14,127775,127776,14,127778,127779,14,127789,127791,14,127794,127795,14,127798,127798,14,127819,127819,14,127824,127824,14,127868,127868,14,127870,127871,14,127892,127893,14,127896,127896,14,127900,127901,14,127904,127940,14,127942,127942,14,127944,127944,14,127946,127946,14,127951,127955,14,127968,127971,14,127973,127984,14,127987,127987,14,127989,127989,14,127991,127991,14,127995,127999,5,128008,128008,14,128012,128014,14,128017,128018,14,128020,128020,14,128022,128022,14,128042,128042,14,128063,128063,14,128065,128065,14,128101,128101,14,128108,128109,14,128173,128173,14,128182,128183,14,128236,128237,14,128239,128239,14,128245,128245,14,128248,128248,14,128253,128253,14,128255,128258,14,128260,128263,14,128265,128265,14,128277,128277,14,128300,128301,14,128326,128328,14,128331,128334,14,128336,128347,14,128360,128366,14,128369,128370,14,128378,128378,14,128391,128391,14,128394,128397,14,128400,128400,14,128405,128406,14,128420,128420,14,128422,128423,14,128425,128432,14,128435,128443,14,128445,128449,14,128453,128464,14,128468,128475,14,128479,128480,14,128482,128482,14,128484,128487,14,128489,128494,14,128496,128498,14,128500,128505,14,128507,128511,14,128513,128518,14,128521,128525,14,128527,128527,14,128529,128529,14,128533,128533,14,128535,128535,14,128537,128537,14]\")}function Q(P,U){if(P===0)return 0;const H=ee(P,U);if(H!==void 0)return H;const $=new I(U,P);return $.prevCodePoint(),$.offset}n.getLeftDeleteOffset=Q;function ee(P,U){const H=new I(U,P);let $=H.prevCodePoint();for(;ne($)||$===65039||$===8419;){if(H.offset===0)return;$=H.prevCodePoint()}if(!be($))return;let te=H.offset;return te>0&&H.prevCodePoint()===8205&&(te=H.offset),te}function ne(P){return 127995<=P&&P<=127999}n.noBreakWhitespace=\"\\xA0\";class ie{static getInstance(U){return i.cache.get(Array.from(U))}static getLocales(){return i._locales.value}constructor(U){this.confusableDictionary=U}isAmbiguous(U){return this.confusableDictionary.has(U)}getPrimaryConfusable(U){return this.confusableDictionary.get(U)}getConfusableCodePoints(){return new Set(this.confusableDictionary.keys())}}n.AmbiguousCharacters=ie,i=ie,ie.ambiguousCharacterData=new A.Lazy(()=>JSON.parse('{\"_common\":[8232,32,8233,32,5760,32,8192,32,8193,32,8194,32,8195,32,8196,32,8197,32,8198,32,8200,32,8201,32,8202,32,8287,32,8199,32,8239,32,2042,95,65101,95,65102,95,65103,95,8208,45,8209,45,8210,45,65112,45,1748,45,8259,45,727,45,8722,45,10134,45,11450,45,1549,44,1643,44,8218,44,184,44,42233,44,894,59,2307,58,2691,58,1417,58,1795,58,1796,58,5868,58,65072,58,6147,58,6153,58,8282,58,1475,58,760,58,42889,58,8758,58,720,58,42237,58,451,33,11601,33,660,63,577,63,2429,63,5038,63,42731,63,119149,46,8228,46,1793,46,1794,46,42510,46,68176,46,1632,46,1776,46,42232,46,1373,96,65287,96,8219,96,8242,96,1370,96,1523,96,8175,96,65344,96,900,96,8189,96,8125,96,8127,96,8190,96,697,96,884,96,712,96,714,96,715,96,756,96,699,96,701,96,700,96,702,96,42892,96,1497,96,2036,96,2037,96,5194,96,5836,96,94033,96,94034,96,65339,91,10088,40,10098,40,12308,40,64830,40,65341,93,10089,41,10099,41,12309,41,64831,41,10100,123,119060,123,10101,125,65342,94,8270,42,1645,42,8727,42,66335,42,5941,47,8257,47,8725,47,8260,47,9585,47,10187,47,10744,47,119354,47,12755,47,12339,47,11462,47,20031,47,12035,47,65340,92,65128,92,8726,92,10189,92,10741,92,10745,92,119311,92,119355,92,12756,92,20022,92,12034,92,42872,38,708,94,710,94,5869,43,10133,43,66203,43,8249,60,10094,60,706,60,119350,60,5176,60,5810,60,5120,61,11840,61,12448,61,42239,61,8250,62,10095,62,707,62,119351,62,5171,62,94015,62,8275,126,732,126,8128,126,8764,126,65372,124,65293,45,120784,50,120794,50,120804,50,120814,50,120824,50,130034,50,42842,50,423,50,1000,50,42564,50,5311,50,42735,50,119302,51,120785,51,120795,51,120805,51,120815,51,120825,51,130035,51,42923,51,540,51,439,51,42858,51,11468,51,1248,51,94011,51,71882,51,120786,52,120796,52,120806,52,120816,52,120826,52,130036,52,5070,52,71855,52,120787,53,120797,53,120807,53,120817,53,120827,53,130037,53,444,53,71867,53,120788,54,120798,54,120808,54,120818,54,120828,54,130038,54,11474,54,5102,54,71893,54,119314,55,120789,55,120799,55,120809,55,120819,55,120829,55,130039,55,66770,55,71878,55,2819,56,2538,56,2666,56,125131,56,120790,56,120800,56,120810,56,120820,56,120830,56,130040,56,547,56,546,56,66330,56,2663,57,2920,57,2541,57,3437,57,120791,57,120801,57,120811,57,120821,57,120831,57,130041,57,42862,57,11466,57,71884,57,71852,57,71894,57,9082,97,65345,97,119834,97,119886,97,119938,97,119990,97,120042,97,120094,97,120146,97,120198,97,120250,97,120302,97,120354,97,120406,97,120458,97,593,97,945,97,120514,97,120572,97,120630,97,120688,97,120746,97,65313,65,119808,65,119860,65,119912,65,119964,65,120016,65,120068,65,120120,65,120172,65,120224,65,120276,65,120328,65,120380,65,120432,65,913,65,120488,65,120546,65,120604,65,120662,65,120720,65,5034,65,5573,65,42222,65,94016,65,66208,65,119835,98,119887,98,119939,98,119991,98,120043,98,120095,98,120147,98,120199,98,120251,98,120303,98,120355,98,120407,98,120459,98,388,98,5071,98,5234,98,5551,98,65314,66,8492,66,119809,66,119861,66,119913,66,120017,66,120069,66,120121,66,120173,66,120225,66,120277,66,120329,66,120381,66,120433,66,42932,66,914,66,120489,66,120547,66,120605,66,120663,66,120721,66,5108,66,5623,66,42192,66,66178,66,66209,66,66305,66,65347,99,8573,99,119836,99,119888,99,119940,99,119992,99,120044,99,120096,99,120148,99,120200,99,120252,99,120304,99,120356,99,120408,99,120460,99,7428,99,1010,99,11429,99,43951,99,66621,99,128844,67,71922,67,71913,67,65315,67,8557,67,8450,67,8493,67,119810,67,119862,67,119914,67,119966,67,120018,67,120174,67,120226,67,120278,67,120330,67,120382,67,120434,67,1017,67,11428,67,5087,67,42202,67,66210,67,66306,67,66581,67,66844,67,8574,100,8518,100,119837,100,119889,100,119941,100,119993,100,120045,100,120097,100,120149,100,120201,100,120253,100,120305,100,120357,100,120409,100,120461,100,1281,100,5095,100,5231,100,42194,100,8558,68,8517,68,119811,68,119863,68,119915,68,119967,68,120019,68,120071,68,120123,68,120175,68,120227,68,120279,68,120331,68,120383,68,120435,68,5024,68,5598,68,5610,68,42195,68,8494,101,65349,101,8495,101,8519,101,119838,101,119890,101,119942,101,120046,101,120098,101,120150,101,120202,101,120254,101,120306,101,120358,101,120410,101,120462,101,43826,101,1213,101,8959,69,65317,69,8496,69,119812,69,119864,69,119916,69,120020,69,120072,69,120124,69,120176,69,120228,69,120280,69,120332,69,120384,69,120436,69,917,69,120492,69,120550,69,120608,69,120666,69,120724,69,11577,69,5036,69,42224,69,71846,69,71854,69,66182,69,119839,102,119891,102,119943,102,119995,102,120047,102,120099,102,120151,102,120203,102,120255,102,120307,102,120359,102,120411,102,120463,102,43829,102,42905,102,383,102,7837,102,1412,102,119315,70,8497,70,119813,70,119865,70,119917,70,120021,70,120073,70,120125,70,120177,70,120229,70,120281,70,120333,70,120385,70,120437,70,42904,70,988,70,120778,70,5556,70,42205,70,71874,70,71842,70,66183,70,66213,70,66853,70,65351,103,8458,103,119840,103,119892,103,119944,103,120048,103,120100,103,120152,103,120204,103,120256,103,120308,103,120360,103,120412,103,120464,103,609,103,7555,103,397,103,1409,103,119814,71,119866,71,119918,71,119970,71,120022,71,120074,71,120126,71,120178,71,120230,71,120282,71,120334,71,120386,71,120438,71,1292,71,5056,71,5107,71,42198,71,65352,104,8462,104,119841,104,119945,104,119997,104,120049,104,120101,104,120153,104,120205,104,120257,104,120309,104,120361,104,120413,104,120465,104,1211,104,1392,104,5058,104,65320,72,8459,72,8460,72,8461,72,119815,72,119867,72,119919,72,120023,72,120179,72,120231,72,120283,72,120335,72,120387,72,120439,72,919,72,120494,72,120552,72,120610,72,120668,72,120726,72,11406,72,5051,72,5500,72,42215,72,66255,72,731,105,9075,105,65353,105,8560,105,8505,105,8520,105,119842,105,119894,105,119946,105,119998,105,120050,105,120102,105,120154,105,120206,105,120258,105,120310,105,120362,105,120414,105,120466,105,120484,105,618,105,617,105,953,105,8126,105,890,105,120522,105,120580,105,120638,105,120696,105,120754,105,1110,105,42567,105,1231,105,43893,105,5029,105,71875,105,65354,106,8521,106,119843,106,119895,106,119947,106,119999,106,120051,106,120103,106,120155,106,120207,106,120259,106,120311,106,120363,106,120415,106,120467,106,1011,106,1112,106,65322,74,119817,74,119869,74,119921,74,119973,74,120025,74,120077,74,120129,74,120181,74,120233,74,120285,74,120337,74,120389,74,120441,74,42930,74,895,74,1032,74,5035,74,5261,74,42201,74,119844,107,119896,107,119948,107,120000,107,120052,107,120104,107,120156,107,120208,107,120260,107,120312,107,120364,107,120416,107,120468,107,8490,75,65323,75,119818,75,119870,75,119922,75,119974,75,120026,75,120078,75,120130,75,120182,75,120234,75,120286,75,120338,75,120390,75,120442,75,922,75,120497,75,120555,75,120613,75,120671,75,120729,75,11412,75,5094,75,5845,75,42199,75,66840,75,1472,108,8739,73,9213,73,65512,73,1633,108,1777,73,66336,108,125127,108,120783,73,120793,73,120803,73,120813,73,120823,73,130033,73,65321,73,8544,73,8464,73,8465,73,119816,73,119868,73,119920,73,120024,73,120128,73,120180,73,120232,73,120284,73,120336,73,120388,73,120440,73,65356,108,8572,73,8467,108,119845,108,119897,108,119949,108,120001,108,120053,108,120105,73,120157,73,120209,73,120261,73,120313,73,120365,73,120417,73,120469,73,448,73,120496,73,120554,73,120612,73,120670,73,120728,73,11410,73,1030,73,1216,73,1493,108,1503,108,1575,108,126464,108,126592,108,65166,108,65165,108,1994,108,11599,73,5825,73,42226,73,93992,73,66186,124,66313,124,119338,76,8556,76,8466,76,119819,76,119871,76,119923,76,120027,76,120079,76,120131,76,120183,76,120235,76,120287,76,120339,76,120391,76,120443,76,11472,76,5086,76,5290,76,42209,76,93974,76,71843,76,71858,76,66587,76,66854,76,65325,77,8559,77,8499,77,119820,77,119872,77,119924,77,120028,77,120080,77,120132,77,120184,77,120236,77,120288,77,120340,77,120392,77,120444,77,924,77,120499,77,120557,77,120615,77,120673,77,120731,77,1018,77,11416,77,5047,77,5616,77,5846,77,42207,77,66224,77,66321,77,119847,110,119899,110,119951,110,120003,110,120055,110,120107,110,120159,110,120211,110,120263,110,120315,110,120367,110,120419,110,120471,110,1400,110,1404,110,65326,78,8469,78,119821,78,119873,78,119925,78,119977,78,120029,78,120081,78,120185,78,120237,78,120289,78,120341,78,120393,78,120445,78,925,78,120500,78,120558,78,120616,78,120674,78,120732,78,11418,78,42208,78,66835,78,3074,111,3202,111,3330,111,3458,111,2406,111,2662,111,2790,111,3046,111,3174,111,3302,111,3430,111,3664,111,3792,111,4160,111,1637,111,1781,111,65359,111,8500,111,119848,111,119900,111,119952,111,120056,111,120108,111,120160,111,120212,111,120264,111,120316,111,120368,111,120420,111,120472,111,7439,111,7441,111,43837,111,959,111,120528,111,120586,111,120644,111,120702,111,120760,111,963,111,120532,111,120590,111,120648,111,120706,111,120764,111,11423,111,4351,111,1413,111,1505,111,1607,111,126500,111,126564,111,126596,111,65259,111,65260,111,65258,111,65257,111,1726,111,64428,111,64429,111,64427,111,64426,111,1729,111,64424,111,64425,111,64423,111,64422,111,1749,111,3360,111,4125,111,66794,111,71880,111,71895,111,66604,111,1984,79,2534,79,2918,79,12295,79,70864,79,71904,79,120782,79,120792,79,120802,79,120812,79,120822,79,130032,79,65327,79,119822,79,119874,79,119926,79,119978,79,120030,79,120082,79,120134,79,120186,79,120238,79,120290,79,120342,79,120394,79,120446,79,927,79,120502,79,120560,79,120618,79,120676,79,120734,79,11422,79,1365,79,11604,79,4816,79,2848,79,66754,79,42227,79,71861,79,66194,79,66219,79,66564,79,66838,79,9076,112,65360,112,119849,112,119901,112,119953,112,120005,112,120057,112,120109,112,120161,112,120213,112,120265,112,120317,112,120369,112,120421,112,120473,112,961,112,120530,112,120544,112,120588,112,120602,112,120646,112,120660,112,120704,112,120718,112,120762,112,120776,112,11427,112,65328,80,8473,80,119823,80,119875,80,119927,80,119979,80,120031,80,120083,80,120187,80,120239,80,120291,80,120343,80,120395,80,120447,80,929,80,120504,80,120562,80,120620,80,120678,80,120736,80,11426,80,5090,80,5229,80,42193,80,66197,80,119850,113,119902,113,119954,113,120006,113,120058,113,120110,113,120162,113,120214,113,120266,113,120318,113,120370,113,120422,113,120474,113,1307,113,1379,113,1382,113,8474,81,119824,81,119876,81,119928,81,119980,81,120032,81,120084,81,120188,81,120240,81,120292,81,120344,81,120396,81,120448,81,11605,81,119851,114,119903,114,119955,114,120007,114,120059,114,120111,114,120163,114,120215,114,120267,114,120319,114,120371,114,120423,114,120475,114,43847,114,43848,114,7462,114,11397,114,43905,114,119318,82,8475,82,8476,82,8477,82,119825,82,119877,82,119929,82,120033,82,120189,82,120241,82,120293,82,120345,82,120397,82,120449,82,422,82,5025,82,5074,82,66740,82,5511,82,42211,82,94005,82,65363,115,119852,115,119904,115,119956,115,120008,115,120060,115,120112,115,120164,115,120216,115,120268,115,120320,115,120372,115,120424,115,120476,115,42801,115,445,115,1109,115,43946,115,71873,115,66632,115,65331,83,119826,83,119878,83,119930,83,119982,83,120034,83,120086,83,120138,83,120190,83,120242,83,120294,83,120346,83,120398,83,120450,83,1029,83,1359,83,5077,83,5082,83,42210,83,94010,83,66198,83,66592,83,119853,116,119905,116,119957,116,120009,116,120061,116,120113,116,120165,116,120217,116,120269,116,120321,116,120373,116,120425,116,120477,116,8868,84,10201,84,128872,84,65332,84,119827,84,119879,84,119931,84,119983,84,120035,84,120087,84,120139,84,120191,84,120243,84,120295,84,120347,84,120399,84,120451,84,932,84,120507,84,120565,84,120623,84,120681,84,120739,84,11430,84,5026,84,42196,84,93962,84,71868,84,66199,84,66225,84,66325,84,119854,117,119906,117,119958,117,120010,117,120062,117,120114,117,120166,117,120218,117,120270,117,120322,117,120374,117,120426,117,120478,117,42911,117,7452,117,43854,117,43858,117,651,117,965,117,120534,117,120592,117,120650,117,120708,117,120766,117,1405,117,66806,117,71896,117,8746,85,8899,85,119828,85,119880,85,119932,85,119984,85,120036,85,120088,85,120140,85,120192,85,120244,85,120296,85,120348,85,120400,85,120452,85,1357,85,4608,85,66766,85,5196,85,42228,85,94018,85,71864,85,8744,118,8897,118,65366,118,8564,118,119855,118,119907,118,119959,118,120011,118,120063,118,120115,118,120167,118,120219,118,120271,118,120323,118,120375,118,120427,118,120479,118,7456,118,957,118,120526,118,120584,118,120642,118,120700,118,120758,118,1141,118,1496,118,71430,118,43945,118,71872,118,119309,86,1639,86,1783,86,8548,86,119829,86,119881,86,119933,86,119985,86,120037,86,120089,86,120141,86,120193,86,120245,86,120297,86,120349,86,120401,86,120453,86,1140,86,11576,86,5081,86,5167,86,42719,86,42214,86,93960,86,71840,86,66845,86,623,119,119856,119,119908,119,119960,119,120012,119,120064,119,120116,119,120168,119,120220,119,120272,119,120324,119,120376,119,120428,119,120480,119,7457,119,1121,119,1309,119,1377,119,71434,119,71438,119,71439,119,43907,119,71919,87,71910,87,119830,87,119882,87,119934,87,119986,87,120038,87,120090,87,120142,87,120194,87,120246,87,120298,87,120350,87,120402,87,120454,87,1308,87,5043,87,5076,87,42218,87,5742,120,10539,120,10540,120,10799,120,65368,120,8569,120,119857,120,119909,120,119961,120,120013,120,120065,120,120117,120,120169,120,120221,120,120273,120,120325,120,120377,120,120429,120,120481,120,5441,120,5501,120,5741,88,9587,88,66338,88,71916,88,65336,88,8553,88,119831,88,119883,88,119935,88,119987,88,120039,88,120091,88,120143,88,120195,88,120247,88,120299,88,120351,88,120403,88,120455,88,42931,88,935,88,120510,88,120568,88,120626,88,120684,88,120742,88,11436,88,11613,88,5815,88,42219,88,66192,88,66228,88,66327,88,66855,88,611,121,7564,121,65369,121,119858,121,119910,121,119962,121,120014,121,120066,121,120118,121,120170,121,120222,121,120274,121,120326,121,120378,121,120430,121,120482,121,655,121,7935,121,43866,121,947,121,8509,121,120516,121,120574,121,120632,121,120690,121,120748,121,1199,121,4327,121,71900,121,65337,89,119832,89,119884,89,119936,89,119988,89,120040,89,120092,89,120144,89,120196,89,120248,89,120300,89,120352,89,120404,89,120456,89,933,89,978,89,120508,89,120566,89,120624,89,120682,89,120740,89,11432,89,1198,89,5033,89,5053,89,42220,89,94019,89,71844,89,66226,89,119859,122,119911,122,119963,122,120015,122,120067,122,120119,122,120171,122,120223,122,120275,122,120327,122,120379,122,120431,122,120483,122,7458,122,43923,122,71876,122,66293,90,71909,90,65338,90,8484,90,8488,90,119833,90,119885,90,119937,90,119989,90,120041,90,120197,90,120249,90,120301,90,120353,90,120405,90,120457,90,918,90,120493,90,120551,90,120609,90,120667,90,120725,90,5059,90,42204,90,71849,90,65282,34,65284,36,65285,37,65286,38,65290,42,65291,43,65294,46,65295,47,65296,48,65297,49,65298,50,65299,51,65300,52,65301,53,65302,54,65303,55,65304,56,65305,57,65308,60,65309,61,65310,62,65312,64,65316,68,65318,70,65319,71,65324,76,65329,81,65330,82,65333,85,65334,86,65335,87,65343,95,65346,98,65348,100,65350,102,65355,107,65357,109,65358,110,65361,113,65362,114,65364,116,65365,117,65367,119,65370,122,65371,123,65373,125,119846,109],\"_default\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"cs\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"de\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"es\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"fr\":[65374,126,65306,58,65281,33,8216,96,8245,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"it\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"ja\":[8211,45,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65292,44,65307,59],\"ko\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"pl\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"pt-BR\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"qps-ploc\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"ru\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,305,105,921,73,1009,112,215,120,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"tr\":[160,32,8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"zh-hans\":[65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41],\"zh-hant\":[8211,45,65374,126,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65307,59]}')),ie.cache=new M.LRUCachedFunction(P=>{function U(oe){const he=new Map;for(let de=0;de<oe.length;de+=2)he.set(oe[de],oe[de+1]);return he}function H(oe,he){const de=new Map(oe);for(const[_e,Ee]of he)de.set(_e,Ee);return de}function $(oe,he){if(!oe)return he;const de=new Map;for(const[_e,Ee]of oe)he.has(_e)&&de.set(_e,Ee);return de}const te=i.ambiguousCharacterData.value;let re=P.filter(oe=>!oe.startsWith(\"_\")&&oe in te);re.length===0&&(re=[\"_default\"]);let ue;for(const oe of re){const he=U(te[oe]);ue=$(ue,he)}const ge=U(te._common),fe=H(ge,ue);return new i(fe)}),ie._locales=new A.Lazy(()=>Object.keys(i.ambiguousCharacterData.value).filter(P=>!P.startsWith(\"_\")));class ae{static getRawData(){return JSON.parse(\"[9,10,11,12,13,32,127,160,173,847,1564,4447,4448,6068,6069,6155,6156,6157,6158,7355,7356,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8234,8235,8236,8237,8238,8239,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,10240,12288,12644,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65279,65440,65520,65521,65522,65523,65524,65525,65526,65527,65528,65532,78844,119155,119156,119157,119158,119159,119160,119161,119162,917504,917505,917506,917507,917508,917509,917510,917511,917512,917513,917514,917515,917516,917517,917518,917519,917520,917521,917522,917523,917524,917525,917526,917527,917528,917529,917530,917531,917532,917533,917534,917535,917536,917537,917538,917539,917540,917541,917542,917543,917544,917545,917546,917547,917548,917549,917550,917551,917552,917553,917554,917555,917556,917557,917558,917559,917560,917561,917562,917563,917564,917565,917566,917567,917568,917569,917570,917571,917572,917573,917574,917575,917576,917577,917578,917579,917580,917581,917582,917583,917584,917585,917586,917587,917588,917589,917590,917591,917592,917593,917594,917595,917596,917597,917598,917599,917600,917601,917602,917603,917604,917605,917606,917607,917608,917609,917610,917611,917612,917613,917614,917615,917616,917617,917618,917619,917620,917621,917622,917623,917624,917625,917626,917627,917628,917629,917630,917631,917760,917761,917762,917763,917764,917765,917766,917767,917768,917769,917770,917771,917772,917773,917774,917775,917776,917777,917778,917779,917780,917781,917782,917783,917784,917785,917786,917787,917788,917789,917790,917791,917792,917793,917794,917795,917796,917797,917798,917799,917800,917801,917802,917803,917804,917805,917806,917807,917808,917809,917810,917811,917812,917813,917814,917815,917816,917817,917818,917819,917820,917821,917822,917823,917824,917825,917826,917827,917828,917829,917830,917831,917832,917833,917834,917835,917836,917837,917838,917839,917840,917841,917842,917843,917844,917845,917846,917847,917848,917849,917850,917851,917852,917853,917854,917855,917856,917857,917858,917859,917860,917861,917862,917863,917864,917865,917866,917867,917868,917869,917870,917871,917872,917873,917874,917875,917876,917877,917878,917879,917880,917881,917882,917883,917884,917885,917886,917887,917888,917889,917890,917891,917892,917893,917894,917895,917896,917897,917898,917899,917900,917901,917902,917903,917904,917905,917906,917907,917908,917909,917910,917911,917912,917913,917914,917915,917916,917917,917918,917919,917920,917921,917922,917923,917924,917925,917926,917927,917928,917929,917930,917931,917932,917933,917934,917935,917936,917937,917938,917939,917940,917941,917942,917943,917944,917945,917946,917947,917948,917949,917950,917951,917952,917953,917954,917955,917956,917957,917958,917959,917960,917961,917962,917963,917964,917965,917966,917967,917968,917969,917970,917971,917972,917973,917974,917975,917976,917977,917978,917979,917980,917981,917982,917983,917984,917985,917986,917987,917988,917989,917990,917991,917992,917993,917994,917995,917996,917997,917998,917999]\")}static getData(){return this._data||(this._data=new Set(ae.getRawData())),this._data}static isInvisibleCharacter(U){return ae.getData().has(U)}static get codePoints(){return ae.getData()}}n.InvisibleCharacters=ae,ae._data=void 0}),Y(X[39],J([0,1,6]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.StringSHA1=n.toHexString=n.stringHash=n.numberHash=n.doHash=n.hash=void 0;function A(m){return i(m,0)}n.hash=A;function i(m,f){switch(typeof m){case\"object\":return m===null?d(349,f):Array.isArray(m)?h(m,f):o(m,f);case\"string\":return p(m,f);case\"boolean\":return b(m,f);case\"number\":return d(m,f);case\"undefined\":return d(937,f);default:return d(617,f)}}n.doHash=i;function d(m,f){return(f<<5)-f+m|0}n.numberHash=d;function b(m,f){return d(m?433:863,f)}function p(m,f){f=d(149417,f);for(let y=0,w=m.length;y<w;y++)f=d(m.charCodeAt(y),f);return f}n.stringHash=p;function h(m,f){return f=d(104579,f),m.reduce((y,w)=>i(w,y),f)}function o(m,f){return f=d(181387,f),Object.keys(m).sort().reduce((y,w)=>(y=p(w,y),i(m[w],y)),f)}function L(m,f,y=32){const w=y-f,E=~((1<<w)-1);return(m<<f|(E&m)>>>w)>>>0}function e(m,f=0,y=m.byteLength,w=0){for(let E=0;E<y;E++)m[f+E]=w}function a(m,f,y=\"0\"){for(;m.length<f;)m=y+m;return m}function u(m,f=32){return m instanceof ArrayBuffer?Array.from(new Uint8Array(m)).map(y=>y.toString(16).padStart(2,\"0\")).join(\"\"):a((m>>>0).toString(16),f/4)}n.toHexString=u;class c{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(64+3),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(f){const y=f.length;if(y===0)return;const w=this._buff;let E=this._buffLen,S=this._leftoverHighSurrogate,C,r;for(S!==0?(C=S,r=-1,S=0):(C=f.charCodeAt(0),r=0);;){let s=C;if(M.isHighSurrogate(C))if(r+1<y){const l=f.charCodeAt(r+1);M.isLowSurrogate(l)?(r++,s=M.computeCodePoint(C,l)):s=65533}else{S=C;break}else M.isLowSurrogate(C)&&(s=65533);if(E=this._push(w,E,s),r++,r<y)C=f.charCodeAt(r);else break}this._buffLen=E,this._leftoverHighSurrogate=S}_push(f,y,w){return w<128?f[y++]=w:w<2048?(f[y++]=192|(w&1984)>>>6,f[y++]=128|(w&63)>>>0):w<65536?(f[y++]=224|(w&61440)>>>12,f[y++]=128|(w&4032)>>>6,f[y++]=128|(w&63)>>>0):(f[y++]=240|(w&1835008)>>>18,f[y++]=128|(w&258048)>>>12,f[y++]=128|(w&4032)>>>6,f[y++]=128|(w&63)>>>0),y>=64&&(this._step(),y-=64,this._totalLen+=64,f[0]=f[64+0],f[1]=f[64+1],f[2]=f[64+2]),y}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),u(this._h0)+u(this._h1)+u(this._h2)+u(this._h3)+u(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,e(this._buff,this._buffLen),this._buffLen>56&&(this._step(),e(this._buff));const f=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(f/4294967296),!1),this._buffDV.setUint32(60,f%4294967296,!1),this._step()}_step(){const f=c._bigBlock32,y=this._buffDV;for(let g=0;g<64;g+=4)f.setUint32(g,y.getUint32(g,!1),!1);for(let g=64;g<320;g+=4)f.setUint32(g,L(f.getUint32(g-12,!1)^f.getUint32(g-32,!1)^f.getUint32(g-56,!1)^f.getUint32(g-64,!1),1),!1);let w=this._h0,E=this._h1,S=this._h2,C=this._h3,r=this._h4,s,l,_;for(let g=0;g<80;g++)g<20?(s=E&S|~E&C,l=1518500249):g<40?(s=E^S^C,l=1859775393):g<60?(s=E&S|E&C|S&C,l=2400959708):(s=E^S^C,l=3395469782),_=L(w,5)+s+r+l+f.getUint32(g*4,!1)&4294967295,r=C,C=S,S=L(E,30),E=w,w=_;this._h0=this._h0+w&4294967295,this._h1=this._h1+E&4294967295,this._h2=this._h2+S&4294967295,this._h3=this._h3+C&4294967295,this._h4=this._h4+r&4294967295}}n.StringSHA1=c,c._bigBlock32=new DataView(new ArrayBuffer(320))}),Y(X[24],J([0,1,34,39]),function(q,n,M,A){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.LcsDiff=n.stringDiff=n.StringDiffSequence=void 0;class i{constructor(e){this.source=e}getElements(){const e=this.source,a=new Int32Array(e.length);for(let u=0,c=e.length;u<c;u++)a[u]=e.charCodeAt(u);return a}}n.StringDiffSequence=i;function d(L,e,a){return new o(new i(L),new i(e)).ComputeDiff(a).changes}n.stringDiff=d;class b{static Assert(e,a){if(!e)throw new Error(a)}}class p{static Copy(e,a,u,c,m){for(let f=0;f<m;f++)u[c+f]=e[a+f]}static Copy2(e,a,u,c,m){for(let f=0;f<m;f++)u[c+f]=e[a+f]}}class h{constructor(){this.m_changes=[],this.m_originalStart=1073741824,this.m_modifiedStart=1073741824,this.m_originalCount=0,this.m_modifiedCount=0}MarkNextChange(){(this.m_originalCount>0||this.m_modifiedCount>0)&&this.m_changes.push(new M.DiffChange(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(e,a){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,a),this.m_originalCount++}AddModifiedElement(e,a){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,a),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class o{constructor(e,a,u=null){this.ContinueProcessingPredicate=u,this._originalSequence=e,this._modifiedSequence=a;const[c,m,f]=o._getElements(e),[y,w,E]=o._getElements(a);this._hasStrings=f&&E,this._originalStringElements=c,this._originalElementsOrHash=m,this._modifiedStringElements=y,this._modifiedElementsOrHash=w,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(e){return e.length>0&&typeof e[0]==\"string\"}static _getElements(e){const a=e.getElements();if(o._isStringArray(a)){const u=new Int32Array(a.length);for(let c=0,m=a.length;c<m;c++)u[c]=(0,A.stringHash)(a[c],0);return[a,u,!0]}return a instanceof Int32Array?[[],a,!1]:[[],new Int32Array(a),!1]}ElementsAreEqual(e,a){return this._originalElementsOrHash[e]!==this._modifiedElementsOrHash[a]?!1:this._hasStrings?this._originalStringElements[e]===this._modifiedStringElements[a]:!0}ElementsAreStrictEqual(e,a){if(!this.ElementsAreEqual(e,a))return!1;const u=o._getStrictElement(this._originalSequence,e),c=o._getStrictElement(this._modifiedSequence,a);return u===c}static _getStrictElement(e,a){return typeof e.getStrictElement==\"function\"?e.getStrictElement(a):null}OriginalElementsAreEqual(e,a){return this._originalElementsOrHash[e]!==this._originalElementsOrHash[a]?!1:this._hasStrings?this._originalStringElements[e]===this._originalStringElements[a]:!0}ModifiedElementsAreEqual(e,a){return this._modifiedElementsOrHash[e]!==this._modifiedElementsOrHash[a]?!1:this._hasStrings?this._modifiedStringElements[e]===this._modifiedStringElements[a]:!0}ComputeDiff(e){return this._ComputeDiff(0,this._originalElementsOrHash.length-1,0,this._modifiedElementsOrHash.length-1,e)}_ComputeDiff(e,a,u,c,m){const f=[!1];let y=this.ComputeDiffRecursive(e,a,u,c,f);return m&&(y=this.PrettifyChanges(y)),{quitEarly:f[0],changes:y}}ComputeDiffRecursive(e,a,u,c,m){for(m[0]=!1;e<=a&&u<=c&&this.ElementsAreEqual(e,u);)e++,u++;for(;a>=e&&c>=u&&this.ElementsAreEqual(a,c);)a--,c--;if(e>a||u>c){let C;return u<=c?(b.Assert(e===a+1,\"originalStart should only be one more than originalEnd\"),C=[new M.DiffChange(e,0,u,c-u+1)]):e<=a?(b.Assert(u===c+1,\"modifiedStart should only be one more than modifiedEnd\"),C=[new M.DiffChange(e,a-e+1,u,0)]):(b.Assert(e===a+1,\"originalStart should only be one more than originalEnd\"),b.Assert(u===c+1,\"modifiedStart should only be one more than modifiedEnd\"),C=[]),C}const f=[0],y=[0],w=this.ComputeRecursionPoint(e,a,u,c,f,y,m),E=f[0],S=y[0];if(w!==null)return w;if(!m[0]){const C=this.ComputeDiffRecursive(e,E,u,S,m);let r=[];return m[0]?r=[new M.DiffChange(E+1,a-(E+1)+1,S+1,c-(S+1)+1)]:r=this.ComputeDiffRecursive(E+1,a,S+1,c,m),this.ConcatenateChanges(C,r)}return[new M.DiffChange(e,a-e+1,u,c-u+1)]}WALKTRACE(e,a,u,c,m,f,y,w,E,S,C,r,s,l,_,g,v,R){let N=null,D=null,x=new h,T=a,F=u,B=s[0]-g[0]-c,V=-1073741824,k=this.m_forwardHistory.length-1;do{const O=B+e;O===T||O<F&&E[O-1]<E[O+1]?(C=E[O+1],l=C-B-c,C<V&&x.MarkNextChange(),V=C,x.AddModifiedElement(C+1,l),B=O+1-e):(C=E[O-1]+1,l=C-B-c,C<V&&x.MarkNextChange(),V=C-1,x.AddOriginalElement(C,l+1),B=O-1-e),k>=0&&(E=this.m_forwardHistory[k],e=E[0],T=1,F=E.length-1)}while(--k>=-1);if(N=x.getReverseChanges(),R[0]){let O=s[0]+1,I=g[0]+1;if(N!==null&&N.length>0){const W=N[N.length-1];O=Math.max(O,W.getOriginalEnd()),I=Math.max(I,W.getModifiedEnd())}D=[new M.DiffChange(O,r-O+1,I,_-I+1)]}else{x=new h,T=f,F=y,B=s[0]-g[0]-w,V=1073741824,k=v?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const O=B+m;O===T||O<F&&S[O-1]>=S[O+1]?(C=S[O+1]-1,l=C-B-w,C>V&&x.MarkNextChange(),V=C+1,x.AddOriginalElement(C+1,l+1),B=O+1-m):(C=S[O-1],l=C-B-w,C>V&&x.MarkNextChange(),V=C,x.AddModifiedElement(C+1,l+1),B=O-1-m),k>=0&&(S=this.m_reverseHistory[k],m=S[0],T=1,F=S.length-1)}while(--k>=-1);D=x.getChanges()}return this.ConcatenateChanges(N,D)}ComputeRecursionPoint(e,a,u,c,m,f,y){let w=0,E=0,S=0,C=0,r=0,s=0;e--,u--,m[0]=0,f[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const l=a-e+(c-u),_=l+1,g=new Int32Array(_),v=new Int32Array(_),R=c-u,N=a-e,D=e-u,x=a-c,F=(N-R)%2===0;g[R]=e,v[N]=a,y[0]=!1;for(let B=1;B<=l/2+1;B++){let V=0,k=0;S=this.ClipDiagonalBound(R-B,B,R,_),C=this.ClipDiagonalBound(R+B,B,R,_);for(let I=S;I<=C;I+=2){I===S||I<C&&g[I-1]<g[I+1]?w=g[I+1]:w=g[I-1]+1,E=w-(I-R)-D;const W=w;for(;w<a&&E<c&&this.ElementsAreEqual(w+1,E+1);)w++,E++;if(g[I]=w,w+E>V+k&&(V=w,k=E),!F&&Math.abs(I-N)<=B-1&&w>=v[I])return m[0]=w,f[0]=E,W<=v[I]&&1447>0&&B<=1447+1?this.WALKTRACE(R,S,C,D,N,r,s,x,g,v,w,a,m,E,c,f,F,y):null}const O=(V-e+(k-u)-B)/2;if(this.ContinueProcessingPredicate!==null&&!this.ContinueProcessingPredicate(V,O))return y[0]=!0,m[0]=V,f[0]=k,O>0&&1447>0&&B<=1447+1?this.WALKTRACE(R,S,C,D,N,r,s,x,g,v,w,a,m,E,c,f,F,y):(e++,u++,[new M.DiffChange(e,a-e+1,u,c-u+1)]);r=this.ClipDiagonalBound(N-B,B,N,_),s=this.ClipDiagonalBound(N+B,B,N,_);for(let I=r;I<=s;I+=2){I===r||I<s&&v[I-1]>=v[I+1]?w=v[I+1]-1:w=v[I-1],E=w-(I-N)-x;const W=w;for(;w>e&&E>u&&this.ElementsAreEqual(w,E);)w--,E--;if(v[I]=w,F&&Math.abs(I-R)<=B&&w<=g[I])return m[0]=w,f[0]=E,W>=g[I]&&1447>0&&B<=1447+1?this.WALKTRACE(R,S,C,D,N,r,s,x,g,v,w,a,m,E,c,f,F,y):null}if(B<=1447){let I=new Int32Array(C-S+2);I[0]=R-S+1,p.Copy2(g,S,I,1,C-S+1),this.m_forwardHistory.push(I),I=new Int32Array(s-r+2),I[0]=N-r+1,p.Copy2(v,r,I,1,s-r+1),this.m_reverseHistory.push(I)}}return this.WALKTRACE(R,S,C,D,N,r,s,x,g,v,w,a,m,E,c,f,F,y)}PrettifyChanges(e){for(let a=0;a<e.length;a++){const u=e[a],c=a<e.length-1?e[a+1].originalStart:this._originalElementsOrHash.length,m=a<e.length-1?e[a+1].modifiedStart:this._modifiedElementsOrHash.length,f=u.originalLength>0,y=u.modifiedLength>0;for(;u.originalStart+u.originalLength<c&&u.modifiedStart+u.modifiedLength<m&&(!f||this.OriginalElementsAreEqual(u.originalStart,u.originalStart+u.originalLength))&&(!y||this.ModifiedElementsAreEqual(u.modifiedStart,u.modifiedStart+u.modifiedLength));){const E=this.ElementsAreStrictEqual(u.originalStart,u.modifiedStart);if(this.ElementsAreStrictEqual(u.originalStart+u.originalLength,u.modifiedStart+u.modifiedLength)&&!E)break;u.originalStart++,u.modifiedStart++}const w=[null];if(a<e.length-1&&this.ChangesOverlap(e[a],e[a+1],w)){e[a]=w[0],e.splice(a+1,1),a--;continue}}for(let a=e.length-1;a>=0;a--){const u=e[a];let c=0,m=0;if(a>0){const C=e[a-1];c=C.originalStart+C.originalLength,m=C.modifiedStart+C.modifiedLength}const f=u.originalLength>0,y=u.modifiedLength>0;let w=0,E=this._boundaryScore(u.originalStart,u.originalLength,u.modifiedStart,u.modifiedLength);for(let C=1;;C++){const r=u.originalStart-C,s=u.modifiedStart-C;if(r<c||s<m||f&&!this.OriginalElementsAreEqual(r,r+u.originalLength)||y&&!this.ModifiedElementsAreEqual(s,s+u.modifiedLength))break;const _=(r===c&&s===m?5:0)+this._boundaryScore(r,u.originalLength,s,u.modifiedLength);_>E&&(E=_,w=C)}u.originalStart-=w,u.modifiedStart-=w;const S=[null];if(a>0&&this.ChangesOverlap(e[a-1],e[a],S)){e[a-1]=S[0],e.splice(a,1),a++;continue}}if(this._hasStrings)for(let a=1,u=e.length;a<u;a++){const c=e[a-1],m=e[a],f=m.originalStart-c.originalStart-c.originalLength,y=c.originalStart,w=m.originalStart+m.originalLength,E=w-y,S=c.modifiedStart,C=m.modifiedStart+m.modifiedLength,r=C-S;if(f<5&&E<20&&r<20){const s=this._findBetterContiguousSequence(y,E,S,r,f);if(s){const[l,_]=s;(l!==c.originalStart+c.originalLength||_!==c.modifiedStart+c.modifiedLength)&&(c.originalLength=l-c.originalStart,c.modifiedLength=_-c.modifiedStart,m.originalStart=l+f,m.modifiedStart=_+f,m.originalLength=w-m.originalStart,m.modifiedLength=C-m.modifiedStart)}}}return e}_findBetterContiguousSequence(e,a,u,c,m){if(a<m||c<m)return null;const f=e+a-m+1,y=u+c-m+1;let w=0,E=0,S=0;for(let C=e;C<f;C++)for(let r=u;r<y;r++){const s=this._contiguousSequenceScore(C,r,m);s>0&&s>w&&(w=s,E=C,S=r)}return w>0?[E,S]:null}_contiguousSequenceScore(e,a,u){let c=0;for(let m=0;m<u;m++){if(!this.ElementsAreEqual(e+m,a+m))return 0;c+=this._originalStringElements[e+m].length}return c}_OriginalIsBoundary(e){return e<=0||e>=this._originalElementsOrHash.length-1?!0:this._hasStrings&&/^\\s*$/.test(this._originalStringElements[e])}_OriginalRegionIsBoundary(e,a){if(this._OriginalIsBoundary(e)||this._OriginalIsBoundary(e-1))return!0;if(a>0){const u=e+a;if(this._OriginalIsBoundary(u-1)||this._OriginalIsBoundary(u))return!0}return!1}_ModifiedIsBoundary(e){return e<=0||e>=this._modifiedElementsOrHash.length-1?!0:this._hasStrings&&/^\\s*$/.test(this._modifiedStringElements[e])}_ModifiedRegionIsBoundary(e,a){if(this._ModifiedIsBoundary(e)||this._ModifiedIsBoundary(e-1))return!0;if(a>0){const u=e+a;if(this._ModifiedIsBoundary(u-1)||this._ModifiedIsBoundary(u))return!0}return!1}_boundaryScore(e,a,u,c){const m=this._OriginalRegionIsBoundary(e,a)?1:0,f=this._ModifiedRegionIsBoundary(u,c)?1:0;return m+f}ConcatenateChanges(e,a){const u=[];if(e.length===0||a.length===0)return a.length>0?a:e;if(this.ChangesOverlap(e[e.length-1],a[0],u)){const c=new Array(e.length+a.length-1);return p.Copy(e,0,c,0,e.length-1),c[e.length-1]=u[0],p.Copy(a,1,c,e.length,a.length-1),c}else{const c=new Array(e.length+a.length);return p.Copy(e,0,c,0,e.length),p.Copy(a,0,c,e.length,a.length),c}}ChangesOverlap(e,a,u){if(b.Assert(e.originalStart<=a.originalStart,\"Left change is not less than or equal to right change\"),b.Assert(e.modifiedStart<=a.modifiedStart,\"Left change is not less than or equal to right change\"),e.originalStart+e.originalLength>=a.originalStart||e.modifiedStart+e.modifiedLength>=a.modifiedStart){const c=e.originalStart;let m=e.originalLength;const f=e.modifiedStart;let y=e.modifiedLength;return e.originalStart+e.originalLength>=a.originalStart&&(m=a.originalStart+a.originalLength-e.originalStart),e.modifiedStart+e.modifiedLength>=a.modifiedStart&&(y=a.modifiedStart+a.modifiedLength-e.modifiedStart),u[0]=new M.DiffChange(c,m,f,y),!0}else return u[0]=null,!1}ClipDiagonalBound(e,a,u,c){if(e>=0&&e<c)return e;const m=u,f=c-u-1,y=a%2===0;if(e<0){const w=m%2===0;return y===w?0:1}else{const w=f%2===0;return y===w?c-1:c-2}}}n.LcsDiff=o}),Y(X[25],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.validateConstraint=n.validateConstraints=n.isFunction=n.assertIsDefined=n.assertType=n.isUndefinedOrNull=n.isDefined=n.isUndefined=n.isBoolean=n.isIterable=n.isNumber=n.isTypedArray=n.isObject=n.isString=void 0;function M(f){return typeof f==\"string\"}n.isString=M;function A(f){return typeof f==\"object\"&&f!==null&&!Array.isArray(f)&&!(f instanceof RegExp)&&!(f instanceof Date)}n.isObject=A;function i(f){const y=Object.getPrototypeOf(Uint8Array);return typeof f==\"object\"&&f instanceof y}n.isTypedArray=i;function d(f){return typeof f==\"number\"&&!isNaN(f)}n.isNumber=d;function b(f){return!!f&&typeof f[Symbol.iterator]==\"function\"}n.isIterable=b;function p(f){return f===!0||f===!1}n.isBoolean=p;function h(f){return typeof f>\"u\"}n.isUndefined=h;function o(f){return!L(f)}n.isDefined=o;function L(f){return h(f)||f===null}n.isUndefinedOrNull=L;function e(f,y){if(!f)throw new Error(y?`Unexpected type, expected '${y}'`:\"Unexpected type\")}n.assertType=e;function a(f){if(L(f))throw new Error(\"Assertion Failed: argument is undefined or null\");return f}n.assertIsDefined=a;function u(f){return typeof f==\"function\"}n.isFunction=u;function c(f,y){const w=Math.min(f.length,y.length);for(let E=0;E<w;E++)m(f[E],y[E])}n.validateConstraints=c;function m(f,y){if(M(y)){if(typeof f!==y)throw new Error(`argument does not match constraint: typeof ${y}`)}else if(u(y)){try{if(f instanceof y)return}catch{}if(!L(f)&&f.constructor===y||y.length===1&&y.call(void 0,f)===!0)return;throw new Error(\"argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true\")}}n.validateConstraint=m}),Y(X[40],J([0,1,25]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Codicon=n.getCodiconFontCharacters=void 0;const A=Object.create(null);function i(b,p){if((0,M.isString)(p)){const h=A[p];if(h===void 0)throw new Error(`${b} references an unknown codicon: ${p}`);p=h}return A[b]=p,{id:b}}function d(){return A}n.getCodiconFontCharacters=d,n.Codicon={add:i(\"add\",6e4),plus:i(\"plus\",6e4),gistNew:i(\"gist-new\",6e4),repoCreate:i(\"repo-create\",6e4),lightbulb:i(\"lightbulb\",60001),lightBulb:i(\"light-bulb\",60001),repo:i(\"repo\",60002),repoDelete:i(\"repo-delete\",60002),gistFork:i(\"gist-fork\",60003),repoForked:i(\"repo-forked\",60003),gitPullRequest:i(\"git-pull-request\",60004),gitPullRequestAbandoned:i(\"git-pull-request-abandoned\",60004),recordKeys:i(\"record-keys\",60005),keyboard:i(\"keyboard\",60005),tag:i(\"tag\",60006),tagAdd:i(\"tag-add\",60006),tagRemove:i(\"tag-remove\",60006),gitPullRequestLabel:i(\"git-pull-request-label\",60006),person:i(\"person\",60007),personFollow:i(\"person-follow\",60007),personOutline:i(\"person-outline\",60007),personFilled:i(\"person-filled\",60007),gitBranch:i(\"git-branch\",60008),gitBranchCreate:i(\"git-branch-create\",60008),gitBranchDelete:i(\"git-branch-delete\",60008),sourceControl:i(\"source-control\",60008),mirror:i(\"mirror\",60009),mirrorPublic:i(\"mirror-public\",60009),star:i(\"star\",60010),starAdd:i(\"star-add\",60010),starDelete:i(\"star-delete\",60010),starEmpty:i(\"star-empty\",60010),comment:i(\"comment\",60011),commentAdd:i(\"comment-add\",60011),alert:i(\"alert\",60012),warning:i(\"warning\",60012),search:i(\"search\",60013),searchSave:i(\"search-save\",60013),logOut:i(\"log-out\",60014),signOut:i(\"sign-out\",60014),logIn:i(\"log-in\",60015),signIn:i(\"sign-in\",60015),eye:i(\"eye\",60016),eyeUnwatch:i(\"eye-unwatch\",60016),eyeWatch:i(\"eye-watch\",60016),circleFilled:i(\"circle-filled\",60017),primitiveDot:i(\"primitive-dot\",60017),closeDirty:i(\"close-dirty\",60017),debugBreakpoint:i(\"debug-breakpoint\",60017),debugBreakpointDisabled:i(\"debug-breakpoint-disabled\",60017),debugBreakpointPending:i(\"debug-breakpoint-pending\",60377),debugHint:i(\"debug-hint\",60017),primitiveSquare:i(\"primitive-square\",60018),edit:i(\"edit\",60019),pencil:i(\"pencil\",60019),info:i(\"info\",60020),issueOpened:i(\"issue-opened\",60020),gistPrivate:i(\"gist-private\",60021),gitForkPrivate:i(\"git-fork-private\",60021),lock:i(\"lock\",60021),mirrorPrivate:i(\"mirror-private\",60021),close:i(\"close\",60022),removeClose:i(\"remove-close\",60022),x:i(\"x\",60022),repoSync:i(\"repo-sync\",60023),sync:i(\"sync\",60023),clone:i(\"clone\",60024),desktopDownload:i(\"desktop-download\",60024),beaker:i(\"beaker\",60025),microscope:i(\"microscope\",60025),vm:i(\"vm\",60026),deviceDesktop:i(\"device-desktop\",60026),file:i(\"file\",60027),fileText:i(\"file-text\",60027),more:i(\"more\",60028),ellipsis:i(\"ellipsis\",60028),kebabHorizontal:i(\"kebab-horizontal\",60028),mailReply:i(\"mail-reply\",60029),reply:i(\"reply\",60029),organization:i(\"organization\",60030),organizationFilled:i(\"organization-filled\",60030),organizationOutline:i(\"organization-outline\",60030),newFile:i(\"new-file\",60031),fileAdd:i(\"file-add\",60031),newFolder:i(\"new-folder\",60032),fileDirectoryCreate:i(\"file-directory-create\",60032),trash:i(\"trash\",60033),trashcan:i(\"trashcan\",60033),history:i(\"history\",60034),clock:i(\"clock\",60034),folder:i(\"folder\",60035),fileDirectory:i(\"file-directory\",60035),symbolFolder:i(\"symbol-folder\",60035),logoGithub:i(\"logo-github\",60036),markGithub:i(\"mark-github\",60036),github:i(\"github\",60036),terminal:i(\"terminal\",60037),console:i(\"console\",60037),repl:i(\"repl\",60037),zap:i(\"zap\",60038),symbolEvent:i(\"symbol-event\",60038),error:i(\"error\",60039),stop:i(\"stop\",60039),variable:i(\"variable\",60040),symbolVariable:i(\"symbol-variable\",60040),array:i(\"array\",60042),symbolArray:i(\"symbol-array\",60042),symbolModule:i(\"symbol-module\",60043),symbolPackage:i(\"symbol-package\",60043),symbolNamespace:i(\"symbol-namespace\",60043),symbolObject:i(\"symbol-object\",60043),symbolMethod:i(\"symbol-method\",60044),symbolFunction:i(\"symbol-function\",60044),symbolConstructor:i(\"symbol-constructor\",60044),symbolBoolean:i(\"symbol-boolean\",60047),symbolNull:i(\"symbol-null\",60047),symbolNumeric:i(\"symbol-numeric\",60048),symbolNumber:i(\"symbol-number\",60048),symbolStructure:i(\"symbol-structure\",60049),symbolStruct:i(\"symbol-struct\",60049),symbolParameter:i(\"symbol-parameter\",60050),symbolTypeParameter:i(\"symbol-type-parameter\",60050),symbolKey:i(\"symbol-key\",60051),symbolText:i(\"symbol-text\",60051),symbolReference:i(\"symbol-reference\",60052),goToFile:i(\"go-to-file\",60052),symbolEnum:i(\"symbol-enum\",60053),symbolValue:i(\"symbol-value\",60053),symbolRuler:i(\"symbol-ruler\",60054),symbolUnit:i(\"symbol-unit\",60054),activateBreakpoints:i(\"activate-breakpoints\",60055),archive:i(\"archive\",60056),arrowBoth:i(\"arrow-both\",60057),arrowDown:i(\"arrow-down\",60058),arrowLeft:i(\"arrow-left\",60059),arrowRight:i(\"arrow-right\",60060),arrowSmallDown:i(\"arrow-small-down\",60061),arrowSmallLeft:i(\"arrow-small-left\",60062),arrowSmallRight:i(\"arrow-small-right\",60063),arrowSmallUp:i(\"arrow-small-up\",60064),arrowUp:i(\"arrow-up\",60065),bell:i(\"bell\",60066),bold:i(\"bold\",60067),book:i(\"book\",60068),bookmark:i(\"bookmark\",60069),debugBreakpointConditionalUnverified:i(\"debug-breakpoint-conditional-unverified\",60070),debugBreakpointConditional:i(\"debug-breakpoint-conditional\",60071),debugBreakpointConditionalDisabled:i(\"debug-breakpoint-conditional-disabled\",60071),debugBreakpointDataUnverified:i(\"debug-breakpoint-data-unverified\",60072),debugBreakpointData:i(\"debug-breakpoint-data\",60073),debugBreakpointDataDisabled:i(\"debug-breakpoint-data-disabled\",60073),debugBreakpointLogUnverified:i(\"debug-breakpoint-log-unverified\",60074),debugBreakpointLog:i(\"debug-breakpoint-log\",60075),debugBreakpointLogDisabled:i(\"debug-breakpoint-log-disabled\",60075),briefcase:i(\"briefcase\",60076),broadcast:i(\"broadcast\",60077),browser:i(\"browser\",60078),bug:i(\"bug\",60079),calendar:i(\"calendar\",60080),caseSensitive:i(\"case-sensitive\",60081),check:i(\"check\",60082),checklist:i(\"checklist\",60083),chevronDown:i(\"chevron-down\",60084),dropDownButton:i(\"drop-down-button\",60084),chevronLeft:i(\"chevron-left\",60085),chevronRight:i(\"chevron-right\",60086),chevronUp:i(\"chevron-up\",60087),chromeClose:i(\"chrome-close\",60088),chromeMaximize:i(\"chrome-maximize\",60089),chromeMinimize:i(\"chrome-minimize\",60090),chromeRestore:i(\"chrome-restore\",60091),circle:i(\"circle\",60092),circleOutline:i(\"circle-outline\",60092),debugBreakpointUnverified:i(\"debug-breakpoint-unverified\",60092),circleSlash:i(\"circle-slash\",60093),circuitBoard:i(\"circuit-board\",60094),clearAll:i(\"clear-all\",60095),clippy:i(\"clippy\",60096),closeAll:i(\"close-all\",60097),cloudDownload:i(\"cloud-download\",60098),cloudUpload:i(\"cloud-upload\",60099),code:i(\"code\",60100),collapseAll:i(\"collapse-all\",60101),colorMode:i(\"color-mode\",60102),commentDiscussion:i(\"comment-discussion\",60103),compareChanges:i(\"compare-changes\",60157),creditCard:i(\"credit-card\",60105),dash:i(\"dash\",60108),dashboard:i(\"dashboard\",60109),database:i(\"database\",60110),debugContinue:i(\"debug-continue\",60111),debugDisconnect:i(\"debug-disconnect\",60112),debugPause:i(\"debug-pause\",60113),debugRestart:i(\"debug-restart\",60114),debugStart:i(\"debug-start\",60115),debugStepInto:i(\"debug-step-into\",60116),debugStepOut:i(\"debug-step-out\",60117),debugStepOver:i(\"debug-step-over\",60118),debugStop:i(\"debug-stop\",60119),debug:i(\"debug\",60120),deviceCameraVideo:i(\"device-camera-video\",60121),deviceCamera:i(\"device-camera\",60122),deviceMobile:i(\"device-mobile\",60123),diffAdded:i(\"diff-added\",60124),diffIgnored:i(\"diff-ignored\",60125),diffModified:i(\"diff-modified\",60126),diffRemoved:i(\"diff-removed\",60127),diffRenamed:i(\"diff-renamed\",60128),diff:i(\"diff\",60129),discard:i(\"discard\",60130),editorLayout:i(\"editor-layout\",60131),emptyWindow:i(\"empty-window\",60132),exclude:i(\"exclude\",60133),extensions:i(\"extensions\",60134),eyeClosed:i(\"eye-closed\",60135),fileBinary:i(\"file-binary\",60136),fileCode:i(\"file-code\",60137),fileMedia:i(\"file-media\",60138),filePdf:i(\"file-pdf\",60139),fileSubmodule:i(\"file-submodule\",60140),fileSymlinkDirectory:i(\"file-symlink-directory\",60141),fileSymlinkFile:i(\"file-symlink-file\",60142),fileZip:i(\"file-zip\",60143),files:i(\"files\",60144),filter:i(\"filter\",60145),flame:i(\"flame\",60146),foldDown:i(\"fold-down\",60147),foldUp:i(\"fold-up\",60148),fold:i(\"fold\",60149),folderActive:i(\"folder-active\",60150),folderOpened:i(\"folder-opened\",60151),gear:i(\"gear\",60152),gift:i(\"gift\",60153),gistSecret:i(\"gist-secret\",60154),gist:i(\"gist\",60155),gitCommit:i(\"git-commit\",60156),gitCompare:i(\"git-compare\",60157),gitMerge:i(\"git-merge\",60158),githubAction:i(\"github-action\",60159),githubAlt:i(\"github-alt\",60160),globe:i(\"globe\",60161),grabber:i(\"grabber\",60162),graph:i(\"graph\",60163),gripper:i(\"gripper\",60164),heart:i(\"heart\",60165),home:i(\"home\",60166),horizontalRule:i(\"horizontal-rule\",60167),hubot:i(\"hubot\",60168),inbox:i(\"inbox\",60169),issueClosed:i(\"issue-closed\",60324),issueReopened:i(\"issue-reopened\",60171),issues:i(\"issues\",60172),italic:i(\"italic\",60173),jersey:i(\"jersey\",60174),json:i(\"json\",60175),bracket:i(\"bracket\",60175),kebabVertical:i(\"kebab-vertical\",60176),key:i(\"key\",60177),law:i(\"law\",60178),lightbulbAutofix:i(\"lightbulb-autofix\",60179),linkExternal:i(\"link-external\",60180),link:i(\"link\",60181),listOrdered:i(\"list-ordered\",60182),listUnordered:i(\"list-unordered\",60183),liveShare:i(\"live-share\",60184),loading:i(\"loading\",60185),location:i(\"location\",60186),mailRead:i(\"mail-read\",60187),mail:i(\"mail\",60188),markdown:i(\"markdown\",60189),megaphone:i(\"megaphone\",60190),mention:i(\"mention\",60191),milestone:i(\"milestone\",60192),gitPullRequestMilestone:i(\"git-pull-request-milestone\",60192),mortarBoard:i(\"mortar-board\",60193),move:i(\"move\",60194),multipleWindows:i(\"multiple-windows\",60195),mute:i(\"mute\",60196),noNewline:i(\"no-newline\",60197),note:i(\"note\",60198),octoface:i(\"octoface\",60199),openPreview:i(\"open-preview\",60200),package:i(\"package\",60201),paintcan:i(\"paintcan\",60202),pin:i(\"pin\",60203),play:i(\"play\",60204),run:i(\"run\",60204),plug:i(\"plug\",60205),preserveCase:i(\"preserve-case\",60206),preview:i(\"preview\",60207),project:i(\"project\",60208),pulse:i(\"pulse\",60209),question:i(\"question\",60210),quote:i(\"quote\",60211),radioTower:i(\"radio-tower\",60212),reactions:i(\"reactions\",60213),references:i(\"references\",60214),refresh:i(\"refresh\",60215),regex:i(\"regex\",60216),remoteExplorer:i(\"remote-explorer\",60217),remote:i(\"remote\",60218),remove:i(\"remove\",60219),replaceAll:i(\"replace-all\",60220),replace:i(\"replace\",60221),repoClone:i(\"repo-clone\",60222),repoForcePush:i(\"repo-force-push\",60223),repoPull:i(\"repo-pull\",60224),repoPush:i(\"repo-push\",60225),report:i(\"report\",60226),requestChanges:i(\"request-changes\",60227),rocket:i(\"rocket\",60228),rootFolderOpened:i(\"root-folder-opened\",60229),rootFolder:i(\"root-folder\",60230),rss:i(\"rss\",60231),ruby:i(\"ruby\",60232),saveAll:i(\"save-all\",60233),saveAs:i(\"save-as\",60234),save:i(\"save\",60235),screenFull:i(\"screen-full\",60236),screenNormal:i(\"screen-normal\",60237),searchStop:i(\"search-stop\",60238),server:i(\"server\",60240),settingsGear:i(\"settings-gear\",60241),settings:i(\"settings\",60242),shield:i(\"shield\",60243),smiley:i(\"smiley\",60244),sortPrecedence:i(\"sort-precedence\",60245),splitHorizontal:i(\"split-horizontal\",60246),splitVertical:i(\"split-vertical\",60247),squirrel:i(\"squirrel\",60248),starFull:i(\"star-full\",60249),starHalf:i(\"star-half\",60250),symbolClass:i(\"symbol-class\",60251),symbolColor:i(\"symbol-color\",60252),symbolCustomColor:i(\"symbol-customcolor\",60252),symbolConstant:i(\"symbol-constant\",60253),symbolEnumMember:i(\"symbol-enum-member\",60254),symbolField:i(\"symbol-field\",60255),symbolFile:i(\"symbol-file\",60256),symbolInterface:i(\"symbol-interface\",60257),symbolKeyword:i(\"symbol-keyword\",60258),symbolMisc:i(\"symbol-misc\",60259),symbolOperator:i(\"symbol-operator\",60260),symbolProperty:i(\"symbol-property\",60261),wrench:i(\"wrench\",60261),wrenchSubaction:i(\"wrench-subaction\",60261),symbolSnippet:i(\"symbol-snippet\",60262),tasklist:i(\"tasklist\",60263),telescope:i(\"telescope\",60264),textSize:i(\"text-size\",60265),threeBars:i(\"three-bars\",60266),thumbsdown:i(\"thumbsdown\",60267),thumbsup:i(\"thumbsup\",60268),tools:i(\"tools\",60269),triangleDown:i(\"triangle-down\",60270),triangleLeft:i(\"triangle-left\",60271),triangleRight:i(\"triangle-right\",60272),triangleUp:i(\"triangle-up\",60273),twitter:i(\"twitter\",60274),unfold:i(\"unfold\",60275),unlock:i(\"unlock\",60276),unmute:i(\"unmute\",60277),unverified:i(\"unverified\",60278),verified:i(\"verified\",60279),versions:i(\"versions\",60280),vmActive:i(\"vm-active\",60281),vmOutline:i(\"vm-outline\",60282),vmRunning:i(\"vm-running\",60283),watch:i(\"watch\",60284),whitespace:i(\"whitespace\",60285),wholeWord:i(\"whole-word\",60286),window:i(\"window\",60287),wordWrap:i(\"word-wrap\",60288),zoomIn:i(\"zoom-in\",60289),zoomOut:i(\"zoom-out\",60290),listFilter:i(\"list-filter\",60291),listFlat:i(\"list-flat\",60292),listSelection:i(\"list-selection\",60293),selection:i(\"selection\",60293),listTree:i(\"list-tree\",60294),debugBreakpointFunctionUnverified:i(\"debug-breakpoint-function-unverified\",60295),debugBreakpointFunction:i(\"debug-breakpoint-function\",60296),debugBreakpointFunctionDisabled:i(\"debug-breakpoint-function-disabled\",60296),debugStackframeActive:i(\"debug-stackframe-active\",60297),circleSmallFilled:i(\"circle-small-filled\",60298),debugStackframeDot:i(\"debug-stackframe-dot\",60298),debugStackframe:i(\"debug-stackframe\",60299),debugStackframeFocused:i(\"debug-stackframe-focused\",60299),debugBreakpointUnsupported:i(\"debug-breakpoint-unsupported\",60300),symbolString:i(\"symbol-string\",60301),debugReverseContinue:i(\"debug-reverse-continue\",60302),debugStepBack:i(\"debug-step-back\",60303),debugRestartFrame:i(\"debug-restart-frame\",60304),callIncoming:i(\"call-incoming\",60306),callOutgoing:i(\"call-outgoing\",60307),menu:i(\"menu\",60308),expandAll:i(\"expand-all\",60309),feedback:i(\"feedback\",60310),gitPullRequestReviewer:i(\"git-pull-request-reviewer\",60310),groupByRefType:i(\"group-by-ref-type\",60311),ungroupByRefType:i(\"ungroup-by-ref-type\",60312),account:i(\"account\",60313),gitPullRequestAssignee:i(\"git-pull-request-assignee\",60313),bellDot:i(\"bell-dot\",60314),debugConsole:i(\"debug-console\",60315),library:i(\"library\",60316),output:i(\"output\",60317),runAll:i(\"run-all\",60318),syncIgnored:i(\"sync-ignored\",60319),pinned:i(\"pinned\",60320),githubInverted:i(\"github-inverted\",60321),debugAlt:i(\"debug-alt\",60305),serverProcess:i(\"server-process\",60322),serverEnvironment:i(\"server-environment\",60323),pass:i(\"pass\",60324),stopCircle:i(\"stop-circle\",60325),playCircle:i(\"play-circle\",60326),record:i(\"record\",60327),debugAltSmall:i(\"debug-alt-small\",60328),vmConnect:i(\"vm-connect\",60329),cloud:i(\"cloud\",60330),merge:i(\"merge\",60331),exportIcon:i(\"export\",60332),graphLeft:i(\"graph-left\",60333),magnet:i(\"magnet\",60334),notebook:i(\"notebook\",60335),redo:i(\"redo\",60336),checkAll:i(\"check-all\",60337),pinnedDirty:i(\"pinned-dirty\",60338),passFilled:i(\"pass-filled\",60339),circleLargeFilled:i(\"circle-large-filled\",60340),circleLarge:i(\"circle-large\",60341),circleLargeOutline:i(\"circle-large-outline\",60341),combine:i(\"combine\",60342),gather:i(\"gather\",60342),table:i(\"table\",60343),variableGroup:i(\"variable-group\",60344),typeHierarchy:i(\"type-hierarchy\",60345),typeHierarchySub:i(\"type-hierarchy-sub\",60346),typeHierarchySuper:i(\"type-hierarchy-super\",60347),gitPullRequestCreate:i(\"git-pull-request-create\",60348),runAbove:i(\"run-above\",60349),runBelow:i(\"run-below\",60350),notebookTemplate:i(\"notebook-template\",60351),debugRerun:i(\"debug-rerun\",60352),workspaceTrusted:i(\"workspace-trusted\",60353),workspaceUntrusted:i(\"workspace-untrusted\",60354),workspaceUnspecified:i(\"workspace-unspecified\",60355),terminalCmd:i(\"terminal-cmd\",60356),terminalDebian:i(\"terminal-debian\",60357),terminalLinux:i(\"terminal-linux\",60358),terminalPowershell:i(\"terminal-powershell\",60359),terminalTmux:i(\"terminal-tmux\",60360),terminalUbuntu:i(\"terminal-ubuntu\",60361),terminalBash:i(\"terminal-bash\",60362),arrowSwap:i(\"arrow-swap\",60363),copy:i(\"copy\",60364),personAdd:i(\"person-add\",60365),filterFilled:i(\"filter-filled\",60366),wand:i(\"wand\",60367),debugLineByLine:i(\"debug-line-by-line\",60368),inspect:i(\"inspect\",60369),layers:i(\"layers\",60370),layersDot:i(\"layers-dot\",60371),layersActive:i(\"layers-active\",60372),compass:i(\"compass\",60373),compassDot:i(\"compass-dot\",60374),compassActive:i(\"compass-active\",60375),azure:i(\"azure\",60376),issueDraft:i(\"issue-draft\",60377),gitPullRequestClosed:i(\"git-pull-request-closed\",60378),gitPullRequestDraft:i(\"git-pull-request-draft\",60379),debugAll:i(\"debug-all\",60380),debugCoverage:i(\"debug-coverage\",60381),runErrors:i(\"run-errors\",60382),folderLibrary:i(\"folder-library\",60383),debugContinueSmall:i(\"debug-continue-small\",60384),beakerStop:i(\"beaker-stop\",60385),graphLine:i(\"graph-line\",60386),graphScatter:i(\"graph-scatter\",60387),pieChart:i(\"pie-chart\",60388),bracketDot:i(\"bracket-dot\",60389),bracketError:i(\"bracket-error\",60390),lockSmall:i(\"lock-small\",60391),azureDevops:i(\"azure-devops\",60392),verifiedFilled:i(\"verified-filled\",60393),newLine:i(\"newline\",60394),layout:i(\"layout\",60395),layoutActivitybarLeft:i(\"layout-activitybar-left\",60396),layoutActivitybarRight:i(\"layout-activitybar-right\",60397),layoutPanelLeft:i(\"layout-panel-left\",60398),layoutPanelCenter:i(\"layout-panel-center\",60399),layoutPanelJustify:i(\"layout-panel-justify\",60400),layoutPanelRight:i(\"layout-panel-right\",60401),layoutPanel:i(\"layout-panel\",60402),layoutSidebarLeft:i(\"layout-sidebar-left\",60403),layoutSidebarRight:i(\"layout-sidebar-right\",60404),layoutStatusbar:i(\"layout-statusbar\",60405),layoutMenubar:i(\"layout-menubar\",60406),layoutCentered:i(\"layout-centered\",60407),layoutSidebarRightOff:i(\"layout-sidebar-right-off\",60416),layoutPanelOff:i(\"layout-panel-off\",60417),layoutSidebarLeftOff:i(\"layout-sidebar-left-off\",60418),target:i(\"target\",60408),indent:i(\"indent\",60409),recordSmall:i(\"record-small\",60410),errorSmall:i(\"error-small\",60411),arrowCircleDown:i(\"arrow-circle-down\",60412),arrowCircleLeft:i(\"arrow-circle-left\",60413),arrowCircleRight:i(\"arrow-circle-right\",60414),arrowCircleUp:i(\"arrow-circle-up\",60415),heartFilled:i(\"heart-filled\",60420),map:i(\"map\",60421),mapFilled:i(\"map-filled\",60422),circleSmall:i(\"circle-small\",60423),bellSlash:i(\"bell-slash\",60424),bellSlashDot:i(\"bell-slash-dot\",60425),commentUnresolved:i(\"comment-unresolved\",60426),gitPullRequestGoToChanges:i(\"git-pull-request-go-to-changes\",60427),gitPullRequestNewChanges:i(\"git-pull-request-new-changes\",60428),searchFuzzy:i(\"search-fuzzy\",60429),commentDraft:i(\"comment-draft\",60430),send:i(\"send\",60431),sparkle:i(\"sparkle\",60432),insert:i(\"insert\",60433),mic:i(\"mic\",60434),thumbsDownFilled:i(\"thumbsdown-filled\",60435),thumbsUpFilled:i(\"thumbsup-filled\",60436),coffee:i(\"coffee\",60437),snake:i(\"snake\",60438),game:i(\"game\",60439),vr:i(\"vr\",60440),chip:i(\"chip\",60441),piano:i(\"piano\",60442),music:i(\"music\",60443),micFilled:i(\"mic-filled\",60444),gitFetch:i(\"git-fetch\",60445),copilot:i(\"copilot\",60446),lightbulbSparkle:i(\"lightbulb-sparkle\",60447),lightbulbSparkleAutofix:i(\"lightbulb-sparkle-autofix\",60447),robot:i(\"robot\",60448),sparkleFilled:i(\"sparkle-filled\",60449),diffSingle:i(\"diff-single\",60450),diffMultiple:i(\"diff-multiple\",60451),surroundWith:i(\"surround-with\",60452),gitStash:i(\"git-stash\",60454),gitStashApply:i(\"git-stash-apply\",60455),gitStashPop:i(\"git-stash-pop\",60456),dialogError:i(\"dialog-error\",\"error\"),dialogWarning:i(\"dialog-warning\",\"warning\"),dialogInfo:i(\"dialog-info\",\"info\"),dialogClose:i(\"dialog-close\",\"close\"),treeItemExpanded:i(\"tree-item-expanded\",\"chevron-down\"),treeFilterOnTypeOn:i(\"tree-filter-on-type-on\",\"list-filter\"),treeFilterOnTypeOff:i(\"tree-filter-on-type-off\",\"list-selection\"),treeFilterClear:i(\"tree-filter-clear\",\"close\"),treeItemLoading:i(\"tree-item-loading\",\"loading\"),menuSelection:i(\"menu-selection\",\"check\"),menuSubmenu:i(\"menu-submenu\",\"chevron-right\"),menuBarMore:i(\"menubar-more\",\"more\"),scrollbarButtonLeft:i(\"scrollbar-button-left\",\"triangle-left\"),scrollbarButtonRight:i(\"scrollbar-button-right\",\"triangle-right\"),scrollbarButtonUp:i(\"scrollbar-button-up\",\"triangle-up\"),scrollbarButtonDown:i(\"scrollbar-button-down\",\"triangle-down\"),toolBarMore:i(\"toolbar-more\",\"more\"),quickInputBack:i(\"quick-input-back\",\"arrow-left\")}}),Y(X[14],J([0,1,25]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.createProxyObject=n.getAllMethodNames=n.getAllPropertyNames=n.equals=n.mixin=n.cloneAndChange=n.deepFreeze=n.deepClone=void 0;function A(u){if(!u||typeof u!=\"object\"||u instanceof RegExp)return u;const c=Array.isArray(u)?[]:{};return Object.entries(u).forEach(([m,f])=>{c[m]=f&&typeof f==\"object\"?A(f):f}),c}n.deepClone=A;function i(u){if(!u||typeof u!=\"object\")return u;const c=[u];for(;c.length>0;){const m=c.shift();Object.freeze(m);for(const f in m)if(d.call(m,f)){const y=m[f];typeof y==\"object\"&&!Object.isFrozen(y)&&!(0,M.isTypedArray)(y)&&c.push(y)}}return u}n.deepFreeze=i;const d=Object.prototype.hasOwnProperty;function b(u,c){return p(u,c,new Set)}n.cloneAndChange=b;function p(u,c,m){if((0,M.isUndefinedOrNull)(u))return u;const f=c(u);if(typeof f<\"u\")return f;if(Array.isArray(u)){const y=[];for(const w of u)y.push(p(w,c,m));return y}if((0,M.isObject)(u)){if(m.has(u))throw new Error(\"Cannot clone recursive data-structure\");m.add(u);const y={};for(const w in u)d.call(u,w)&&(y[w]=p(u[w],c,m));return m.delete(u),y}return u}function h(u,c,m=!0){return(0,M.isObject)(u)?((0,M.isObject)(c)&&Object.keys(c).forEach(f=>{f in u?m&&((0,M.isObject)(u[f])&&(0,M.isObject)(c[f])?h(u[f],c[f],m):u[f]=c[f]):u[f]=c[f]}),u):c}n.mixin=h;function o(u,c){if(u===c)return!0;if(u==null||c===null||c===void 0||typeof u!=typeof c||typeof u!=\"object\"||Array.isArray(u)!==Array.isArray(c))return!1;let m,f;if(Array.isArray(u)){if(u.length!==c.length)return!1;for(m=0;m<u.length;m++)if(!o(u[m],c[m]))return!1}else{const y=[];for(f in u)y.push(f);y.sort();const w=[];for(f in c)w.push(f);if(w.sort(),!o(y,w))return!1;for(m=0;m<y.length;m++)if(!o(u[y[m]],c[y[m]]))return!1}return!0}n.equals=o;function L(u){let c=[];for(;Object.prototype!==u;)c=c.concat(Object.getOwnPropertyNames(u)),u=Object.getPrototypeOf(u);return c}n.getAllPropertyNames=L;function e(u){const c=[];for(const m of L(u))typeof u[m]==\"function\"&&c.push(m);return c}n.getAllMethodNames=e;function a(u,c){const m=y=>function(){const w=Array.prototype.slice.call(arguments,0);return c(y,w)},f={};for(const y of u)f[y]=m(y);return f}n.createProxyObject=a}),Y(X[26],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.toUint32=n.toUint8=void 0;function M(i){return i<0?0:i>255?255:i|0}n.toUint8=M;function A(i){return i<0?0:i>4294967295?4294967295:i|0}n.toUint32=A}),Y(X[27],J([0,1,26]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.CharacterSet=n.CharacterClassifier=void 0;class A{constructor(b){const p=(0,M.toUint8)(b);this._defaultValue=p,this._asciiMap=A._createAsciiMap(p),this._map=new Map}static _createAsciiMap(b){const p=new Uint8Array(256);return p.fill(b),p}set(b,p){const h=(0,M.toUint8)(p);b>=0&&b<256?this._asciiMap[b]=h:this._map.set(b,h)}get(b){return b>=0&&b<256?this._asciiMap[b]:this._map.get(b)||this._defaultValue}clear(){this._asciiMap.fill(this._defaultValue),this._map.clear()}}n.CharacterClassifier=A;class i{constructor(){this._actual=new A(0)}add(b){this._actual.set(b,1)}has(b){return this._actual.get(b)===1}clear(){return this._actual.clear()}}n.CharacterSet=i}),Y(X[3],J([0,1,5]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.OffsetRangeSet=n.OffsetRange=void 0;class A{static addRange(b,p){let h=0;for(;h<p.length&&p[h].endExclusive<b.start;)h++;let o=h;for(;o<p.length&&p[o].start<=b.endExclusive;)o++;if(h===o)p.splice(h,0,b);else{const L=Math.min(b.start,p[h].start),e=Math.max(b.endExclusive,p[o-1].endExclusive);p.splice(h,o-h,new A(L,e))}}static ofLength(b){return new A(0,b)}static ofStartAndLength(b,p){return new A(b,b+p)}constructor(b,p){if(this.start=b,this.endExclusive=p,b>p)throw new M.BugIndicatingError(`Invalid range: ${this.toString()}`)}get isEmpty(){return this.start===this.endExclusive}delta(b){return new A(this.start+b,this.endExclusive+b)}deltaStart(b){return new A(this.start+b,this.endExclusive)}deltaEnd(b){return new A(this.start,this.endExclusive+b)}get length(){return this.endExclusive-this.start}toString(){return`[${this.start}, ${this.endExclusive})`}contains(b){return this.start<=b&&b<this.endExclusive}join(b){return new A(Math.min(this.start,b.start),Math.max(this.endExclusive,b.endExclusive))}intersect(b){const p=Math.max(this.start,b.start),h=Math.min(this.endExclusive,b.endExclusive);if(p<=h)return new A(p,h)}intersects(b){const p=Math.max(this.start,b.start),h=Math.min(this.endExclusive,b.endExclusive);return p<h}isBefore(b){return this.endExclusive<=b.start}isAfter(b){return this.start>=b.endExclusive}slice(b){return b.slice(this.start,this.endExclusive)}clip(b){if(this.isEmpty)throw new M.BugIndicatingError(`Invalid clipping range: ${this.toString()}`);return Math.max(this.start,Math.min(this.endExclusive-1,b))}clipCyclic(b){if(this.isEmpty)throw new M.BugIndicatingError(`Invalid clipping range: ${this.toString()}`);return b<this.start?this.endExclusive-(this.start-b)%this.length:b>=this.endExclusive?this.start+(b-this.start)%this.length:b}forEach(b){for(let p=this.start;p<this.endExclusive;p++)b(p)}}n.OffsetRange=A;class i{constructor(){this._sortedRanges=[]}addRange(b){let p=0;for(;p<this._sortedRanges.length&&this._sortedRanges[p].endExclusive<b.start;)p++;let h=p;for(;h<this._sortedRanges.length&&this._sortedRanges[h].start<=b.endExclusive;)h++;if(p===h)this._sortedRanges.splice(p,0,b);else{const o=Math.min(b.start,this._sortedRanges[p].start),L=Math.max(b.endExclusive,this._sortedRanges[h-1].endExclusive);this._sortedRanges.splice(p,h-p,new A(o,L))}}toString(){return this._sortedRanges.map(b=>b.toString()).join(\", \")}intersectsStrict(b){let p=0;for(;p<this._sortedRanges.length&&this._sortedRanges[p].endExclusive<=b.start;)p++;return p<this._sortedRanges.length&&this._sortedRanges[p].start<b.endExclusive}intersectWithRange(b){const p=new i;for(const h of this._sortedRanges){const o=h.intersect(b);o&&p.addRange(o)}return p}intersectWithRangeLength(b){return this.intersectWithRange(b).length}get length(){return this._sortedRanges.reduce((b,p)=>b+p.length,0)}}n.OffsetRangeSet=i}),Y(X[4],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Position=void 0;class M{constructor(i,d){this.lineNumber=i,this.column=d}with(i=this.lineNumber,d=this.column){return i===this.lineNumber&&d===this.column?this:new M(i,d)}delta(i=0,d=0){return this.with(this.lineNumber+i,this.column+d)}equals(i){return M.equals(this,i)}static equals(i,d){return!i&&!d?!0:!!i&&!!d&&i.lineNumber===d.lineNumber&&i.column===d.column}isBefore(i){return M.isBefore(this,i)}static isBefore(i,d){return i.lineNumber<d.lineNumber?!0:d.lineNumber<i.lineNumber?!1:i.column<d.column}isBeforeOrEqual(i){return M.isBeforeOrEqual(this,i)}static isBeforeOrEqual(i,d){return i.lineNumber<d.lineNumber?!0:d.lineNumber<i.lineNumber?!1:i.column<=d.column}static compare(i,d){const b=i.lineNumber|0,p=d.lineNumber|0;if(b===p){const h=i.column|0,o=d.column|0;return h-o}return b-p}clone(){return new M(this.lineNumber,this.column)}toString(){return\"(\"+this.lineNumber+\",\"+this.column+\")\"}static lift(i){return new M(i.lineNumber,i.column)}static isIPosition(i){return i&&typeof i.lineNumber==\"number\"&&typeof i.column==\"number\"}toJSON(){return{lineNumber:this.lineNumber,column:this.column}}}n.Position=M}),Y(X[2],J([0,1,4]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Range=void 0;class A{constructor(d,b,p,h){d>p||d===p&&b>h?(this.startLineNumber=p,this.startColumn=h,this.endLineNumber=d,this.endColumn=b):(this.startLineNumber=d,this.startColumn=b,this.endLineNumber=p,this.endColumn=h)}isEmpty(){return A.isEmpty(this)}static isEmpty(d){return d.startLineNumber===d.endLineNumber&&d.startColumn===d.endColumn}containsPosition(d){return A.containsPosition(this,d)}static containsPosition(d,b){return!(b.lineNumber<d.startLineNumber||b.lineNumber>d.endLineNumber||b.lineNumber===d.startLineNumber&&b.column<d.startColumn||b.lineNumber===d.endLineNumber&&b.column>d.endColumn)}static strictContainsPosition(d,b){return!(b.lineNumber<d.startLineNumber||b.lineNumber>d.endLineNumber||b.lineNumber===d.startLineNumber&&b.column<=d.startColumn||b.lineNumber===d.endLineNumber&&b.column>=d.endColumn)}containsRange(d){return A.containsRange(this,d)}static containsRange(d,b){return!(b.startLineNumber<d.startLineNumber||b.endLineNumber<d.startLineNumber||b.startLineNumber>d.endLineNumber||b.endLineNumber>d.endLineNumber||b.startLineNumber===d.startLineNumber&&b.startColumn<d.startColumn||b.endLineNumber===d.endLineNumber&&b.endColumn>d.endColumn)}strictContainsRange(d){return A.strictContainsRange(this,d)}static strictContainsRange(d,b){return!(b.startLineNumber<d.startLineNumber||b.endLineNumber<d.startLineNumber||b.startLineNumber>d.endLineNumber||b.endLineNumber>d.endLineNumber||b.startLineNumber===d.startLineNumber&&b.startColumn<=d.startColumn||b.endLineNumber===d.endLineNumber&&b.endColumn>=d.endColumn)}plusRange(d){return A.plusRange(this,d)}static plusRange(d,b){let p,h,o,L;return b.startLineNumber<d.startLineNumber?(p=b.startLineNumber,h=b.startColumn):b.startLineNumber===d.startLineNumber?(p=b.startLineNumber,h=Math.min(b.startColumn,d.startColumn)):(p=d.startLineNumber,h=d.startColumn),b.endLineNumber>d.endLineNumber?(o=b.endLineNumber,L=b.endColumn):b.endLineNumber===d.endLineNumber?(o=b.endLineNumber,L=Math.max(b.endColumn,d.endColumn)):(o=d.endLineNumber,L=d.endColumn),new A(p,h,o,L)}intersectRanges(d){return A.intersectRanges(this,d)}static intersectRanges(d,b){let p=d.startLineNumber,h=d.startColumn,o=d.endLineNumber,L=d.endColumn;const e=b.startLineNumber,a=b.startColumn,u=b.endLineNumber,c=b.endColumn;return p<e?(p=e,h=a):p===e&&(h=Math.max(h,a)),o>u?(o=u,L=c):o===u&&(L=Math.min(L,c)),p>o||p===o&&h>L?null:new A(p,h,o,L)}equalsRange(d){return A.equalsRange(this,d)}static equalsRange(d,b){return!d&&!b?!0:!!d&&!!b&&d.startLineNumber===b.startLineNumber&&d.startColumn===b.startColumn&&d.endLineNumber===b.endLineNumber&&d.endColumn===b.endColumn}getEndPosition(){return A.getEndPosition(this)}static getEndPosition(d){return new M.Position(d.endLineNumber,d.endColumn)}getStartPosition(){return A.getStartPosition(this)}static getStartPosition(d){return new M.Position(d.startLineNumber,d.startColumn)}toString(){return\"[\"+this.startLineNumber+\",\"+this.startColumn+\" -> \"+this.endLineNumber+\",\"+this.endColumn+\"]\"}setEndPosition(d,b){return new A(this.startLineNumber,this.startColumn,d,b)}setStartPosition(d,b){return new A(d,b,this.endLineNumber,this.endColumn)}collapseToStart(){return A.collapseToStart(this)}static collapseToStart(d){return new A(d.startLineNumber,d.startColumn,d.startLineNumber,d.startColumn)}collapseToEnd(){return A.collapseToEnd(this)}static collapseToEnd(d){return new A(d.endLineNumber,d.endColumn,d.endLineNumber,d.endColumn)}delta(d){return new A(this.startLineNumber+d,this.startColumn,this.endLineNumber+d,this.endColumn)}static fromPositions(d,b=d){return new A(d.lineNumber,d.column,b.lineNumber,b.column)}static lift(d){return d?new A(d.startLineNumber,d.startColumn,d.endLineNumber,d.endColumn):null}static isIRange(d){return d&&typeof d.startLineNumber==\"number\"&&typeof d.startColumn==\"number\"&&typeof d.endLineNumber==\"number\"&&typeof d.endColumn==\"number\"}static areIntersectingOrTouching(d,b){return!(d.endLineNumber<b.startLineNumber||d.endLineNumber===b.startLineNumber&&d.endColumn<b.startColumn||b.endLineNumber<d.startLineNumber||b.endLineNumber===d.startLineNumber&&b.endColumn<d.startColumn)}static areIntersecting(d,b){return!(d.endLineNumber<b.startLineNumber||d.endLineNumber===b.startLineNumber&&d.endColumn<=b.startColumn||b.endLineNumber<d.startLineNumber||b.endLineNumber===d.startLineNumber&&b.endColumn<=d.startColumn)}static compareRangesUsingStarts(d,b){if(d&&b){const o=d.startLineNumber|0,L=b.startLineNumber|0;if(o===L){const e=d.startColumn|0,a=b.startColumn|0;if(e===a){const u=d.endLineNumber|0,c=b.endLineNumber|0;if(u===c){const m=d.endColumn|0,f=b.endColumn|0;return m-f}return u-c}return e-a}return o-L}return(d?1:0)-(b?1:0)}static compareRangesUsingEnds(d,b){return d.endLineNumber===b.endLineNumber?d.endColumn===b.endColumn?d.startLineNumber===b.startLineNumber?d.startColumn-b.startColumn:d.startLineNumber-b.startLineNumber:d.endColumn-b.endColumn:d.endLineNumber-b.endLineNumber}static spansMultipleLines(d){return d.endLineNumber>d.startLineNumber}toJSON(){return this}}n.Range=A}),Y(X[10],J([0,1,5,3,2,11]),function(q,n,M,A,i,d){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.LineRangeSet=n.LineRange=void 0;class b{static fromRangeInclusive(o){return new b(o.startLineNumber,o.endLineNumber+1)}static joinMany(o){if(o.length===0)return[];let L=new p(o[0].slice());for(let e=1;e<o.length;e++)L=L.getUnion(new p(o[e].slice()));return L.ranges}static ofLength(o,L){return new b(o,o+L)}static deserialize(o){return new b(o[0],o[1])}constructor(o,L){if(o>L)throw new M.BugIndicatingError(`startLineNumber ${o} cannot be after endLineNumberExclusive ${L}`);this.startLineNumber=o,this.endLineNumberExclusive=L}contains(o){return this.startLineNumber<=o&&o<this.endLineNumberExclusive}get isEmpty(){return this.startLineNumber===this.endLineNumberExclusive}delta(o){return new b(this.startLineNumber+o,this.endLineNumberExclusive+o)}deltaLength(o){return new b(this.startLineNumber,this.endLineNumberExclusive+o)}get length(){return this.endLineNumberExclusive-this.startLineNumber}join(o){return new b(Math.min(this.startLineNumber,o.startLineNumber),Math.max(this.endLineNumberExclusive,o.endLineNumberExclusive))}toString(){return`[${this.startLineNumber},${this.endLineNumberExclusive})`}intersect(o){const L=Math.max(this.startLineNumber,o.startLineNumber),e=Math.min(this.endLineNumberExclusive,o.endLineNumberExclusive);if(L<=e)return new b(L,e)}intersectsStrict(o){return this.startLineNumber<o.endLineNumberExclusive&&o.startLineNumber<this.endLineNumberExclusive}overlapOrTouch(o){return this.startLineNumber<=o.endLineNumberExclusive&&o.startLineNumber<=this.endLineNumberExclusive}equals(o){return this.startLineNumber===o.startLineNumber&&this.endLineNumberExclusive===o.endLineNumberExclusive}toInclusiveRange(){return this.isEmpty?null:new i.Range(this.startLineNumber,1,this.endLineNumberExclusive-1,Number.MAX_SAFE_INTEGER)}toExclusiveRange(){return new i.Range(this.startLineNumber,1,this.endLineNumberExclusive,1)}mapToLineArray(o){const L=[];for(let e=this.startLineNumber;e<this.endLineNumberExclusive;e++)L.push(o(e));return L}forEach(o){for(let L=this.startLineNumber;L<this.endLineNumberExclusive;L++)o(L)}serialize(){return[this.startLineNumber,this.endLineNumberExclusive]}includes(o){return this.startLineNumber<=o&&o<this.endLineNumberExclusive}toOffsetRange(){return new A.OffsetRange(this.startLineNumber-1,this.endLineNumberExclusive-1)}}n.LineRange=b;class p{constructor(o=[]){this._normalizedRanges=o}get ranges(){return this._normalizedRanges}addRange(o){if(o.length===0)return;const L=(0,d.findFirstIdxMonotonousOrArrLen)(this._normalizedRanges,a=>a.endLineNumberExclusive>=o.startLineNumber),e=(0,d.findLastIdxMonotonous)(this._normalizedRanges,a=>a.startLineNumber<=o.endLineNumberExclusive)+1;if(L===e)this._normalizedRanges.splice(L,0,o);else if(L===e-1){const a=this._normalizedRanges[L];this._normalizedRanges[L]=a.join(o)}else{const a=this._normalizedRanges[L].join(this._normalizedRanges[e-1]).join(o);this._normalizedRanges.splice(L,e-L,a)}}contains(o){const L=(0,d.findLastMonotonous)(this._normalizedRanges,e=>e.startLineNumber<=o);return!!L&&L.endLineNumberExclusive>o}intersects(o){const L=(0,d.findLastMonotonous)(this._normalizedRanges,e=>e.startLineNumber<o.endLineNumberExclusive);return!!L&&L.endLineNumberExclusive>o.startLineNumber}getUnion(o){if(this._normalizedRanges.length===0)return o;if(o._normalizedRanges.length===0)return this;const L=[];let e=0,a=0,u=null;for(;e<this._normalizedRanges.length||a<o._normalizedRanges.length;){let c=null;if(e<this._normalizedRanges.length&&a<o._normalizedRanges.length){const m=this._normalizedRanges[e],f=o._normalizedRanges[a];m.startLineNumber<f.startLineNumber?(c=m,e++):(c=f,a++)}else e<this._normalizedRanges.length?(c=this._normalizedRanges[e],e++):(c=o._normalizedRanges[a],a++);u===null?u=c:u.endLineNumberExclusive>=c.startLineNumber?u=new b(u.startLineNumber,Math.max(u.endLineNumberExclusive,c.endLineNumberExclusive)):(L.push(u),u=c)}return u!==null&&L.push(u),new p(L)}subtractFrom(o){const L=(0,d.findFirstIdxMonotonousOrArrLen)(this._normalizedRanges,c=>c.endLineNumberExclusive>=o.startLineNumber),e=(0,d.findLastIdxMonotonous)(this._normalizedRanges,c=>c.startLineNumber<=o.endLineNumberExclusive)+1;if(L===e)return new p([o]);const a=[];let u=o.startLineNumber;for(let c=L;c<e;c++){const m=this._normalizedRanges[c];m.startLineNumber>u&&a.push(new b(u,m.startLineNumber)),u=m.endLineNumberExclusive}return u<o.endLineNumberExclusive&&a.push(new b(u,o.endLineNumberExclusive)),new p(a)}toString(){return this._normalizedRanges.map(o=>o.toString()).join(\", \")}getIntersection(o){const L=[];let e=0,a=0;for(;e<this._normalizedRanges.length&&a<o._normalizedRanges.length;){const u=this._normalizedRanges[e],c=o._normalizedRanges[a],m=u.intersect(c);m&&!m.isEmpty&&L.push(m),u.endLineNumberExclusive<c.endLineNumberExclusive?e++:a++}return new p(L)}getWithDelta(o){return new p(this._normalizedRanges.map(L=>L.delta(o)))}}n.LineRangeSet=p}),Y(X[41],J([0,1,4,2]),function(q,n,M,A){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Selection=void 0;class i extends A.Range{constructor(b,p,h,o){super(b,p,h,o),this.selectionStartLineNumber=b,this.selectionStartColumn=p,this.positionLineNumber=h,this.positionColumn=o}toString(){return\"[\"+this.selectionStartLineNumber+\",\"+this.selectionStartColumn+\" -> \"+this.positionLineNumber+\",\"+this.positionColumn+\"]\"}equalsSelection(b){return i.selectionsEqual(this,b)}static selectionsEqual(b,p){return b.selectionStartLineNumber===p.selectionStartLineNumber&&b.selectionStartColumn===p.selectionStartColumn&&b.positionLineNumber===p.positionLineNumber&&b.positionColumn===p.positionColumn}getDirection(){return this.selectionStartLineNumber===this.startLineNumber&&this.selectionStartColumn===this.startColumn?0:1}setEndPosition(b,p){return this.getDirection()===0?new i(this.startLineNumber,this.startColumn,b,p):new i(b,p,this.startLineNumber,this.startColumn)}getPosition(){return new M.Position(this.positionLineNumber,this.positionColumn)}getSelectionStart(){return new M.Position(this.selectionStartLineNumber,this.selectionStartColumn)}setStartPosition(b,p){return this.getDirection()===0?new i(b,p,this.endLineNumber,this.endColumn):new i(this.endLineNumber,this.endColumn,b,p)}static fromPositions(b,p=b){return new i(b.lineNumber,b.column,p.lineNumber,p.column)}static fromRange(b,p){return p===0?new i(b.startLineNumber,b.startColumn,b.endLineNumber,b.endColumn):new i(b.endLineNumber,b.endColumn,b.startLineNumber,b.startColumn)}static liftSelection(b){return new i(b.selectionStartLineNumber,b.selectionStartColumn,b.positionLineNumber,b.positionColumn)}static selectionsArrEqual(b,p){if(b&&!p||!b&&p)return!1;if(!b&&!p)return!0;if(b.length!==p.length)return!1;for(let h=0,o=b.length;h<o;h++)if(!this.selectionsEqual(b[h],p[h]))return!1;return!0}static isISelection(b){return b&&typeof b.selectionStartLineNumber==\"number\"&&typeof b.selectionStartColumn==\"number\"&&typeof b.positionLineNumber==\"number\"&&typeof b.positionColumn==\"number\"}static createWithDirection(b,p,h,o,L){return L===0?new i(b,p,h,o):new i(h,o,b,p)}}n.Selection=i}),Y(X[42],J([0,1,27]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.getMapForWordSeparators=n.WordCharacterClassifier=void 0;class A extends M.CharacterClassifier{constructor(b){super(0);for(let p=0,h=b.length;p<h;p++)this.set(b.charCodeAt(p),2);this.set(32,1),this.set(9,1)}}n.WordCharacterClassifier=A;function i(d){const b={};return p=>(b.hasOwnProperty(p)||(b[p]=d(p)),b[p])}n.getMapForWordSeparators=i(d=>new A(d))}),Y(X[28],J([0,1,21,22]),function(q,n,M,A){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.getWordAtText=n.ensureValidWordDefinition=n.DEFAULT_WORD_REGEXP=n.USUAL_WORD_SEPARATORS=void 0,n.USUAL_WORD_SEPARATORS=\"`~!@#$%^&*()-=+[{]}\\\\|;:'\\\",.<>/?\";function i(o=\"\"){let L=\"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\";for(const e of n.USUAL_WORD_SEPARATORS)o.indexOf(e)>=0||(L+=\"\\\\\"+e);return L+=\"\\\\s]+)\",new RegExp(L,\"g\")}n.DEFAULT_WORD_REGEXP=i();function d(o){let L=n.DEFAULT_WORD_REGEXP;if(o&&o instanceof RegExp)if(o.global)L=o;else{let e=\"g\";o.ignoreCase&&(e+=\"i\"),o.multiline&&(e+=\"m\"),o.unicode&&(e+=\"u\"),L=new RegExp(o.source,e)}return L.lastIndex=0,L}n.ensureValidWordDefinition=d;const b=new A.LinkedList;b.unshift({maxLen:1e3,windowSize:15,timeBudget:150});function p(o,L,e,a,u){if(L=d(L),u||(u=M.Iterable.first(b)),e.length>u.maxLen){let w=o-u.maxLen/2;return w<0?w=0:a+=w,e=e.substring(w,o+u.maxLen/2),p(o,L,e,a,u)}const c=Date.now(),m=o-1-a;let f=-1,y=null;for(let w=1;!(Date.now()-c>=u.timeBudget);w++){const E=m-u.windowSize*w;L.lastIndex=Math.max(0,E);const S=h(L,e,m,f);if(!S&&y||(y=S,E<=0))break;f=E}if(y){const w={word:y[0],startColumn:a+1+y.index,endColumn:a+1+y.index+y[0].length};return L.lastIndex=0,w}return null}n.getWordAtText=p;function h(o,L,e,a){let u;for(;u=o.exec(L);){const c=u.index||0;if(c<=e&&o.lastIndex>=e)return u;if(a>0&&c>a)return null}return null}}),Y(X[8],J([0,1,7,5,3]),function(q,n,M,A,i){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.DateTimeout=n.InfiniteTimeout=n.OffsetPair=n.SequenceDiff=n.DiffAlgorithmResult=void 0;class d{static trivial(e,a){return new d([new b(i.OffsetRange.ofLength(e.length),i.OffsetRange.ofLength(a.length))],!1)}static trivialTimedOut(e,a){return new d([new b(i.OffsetRange.ofLength(e.length),i.OffsetRange.ofLength(a.length))],!0)}constructor(e,a){this.diffs=e,this.hitTimeout=a}}n.DiffAlgorithmResult=d;class b{static invert(e,a){const u=[];return(0,M.forEachAdjacent)(e,(c,m)=>{u.push(b.fromOffsetPairs(c?c.getEndExclusives():p.zero,m?m.getStarts():new p(a,(c?c.seq2Range.endExclusive-c.seq1Range.endExclusive:0)+a)))}),u}static fromOffsetPairs(e,a){return new b(new i.OffsetRange(e.offset1,a.offset1),new i.OffsetRange(e.offset2,a.offset2))}constructor(e,a){this.seq1Range=e,this.seq2Range=a}swap(){return new b(this.seq2Range,this.seq1Range)}toString(){return`${this.seq1Range} <-> ${this.seq2Range}`}join(e){return new b(this.seq1Range.join(e.seq1Range),this.seq2Range.join(e.seq2Range))}delta(e){return e===0?this:new b(this.seq1Range.delta(e),this.seq2Range.delta(e))}deltaStart(e){return e===0?this:new b(this.seq1Range.deltaStart(e),this.seq2Range.deltaStart(e))}deltaEnd(e){return e===0?this:new b(this.seq1Range.deltaEnd(e),this.seq2Range.deltaEnd(e))}intersect(e){const a=this.seq1Range.intersect(e.seq1Range),u=this.seq2Range.intersect(e.seq2Range);if(!(!a||!u))return new b(a,u)}getStarts(){return new p(this.seq1Range.start,this.seq2Range.start)}getEndExclusives(){return new p(this.seq1Range.endExclusive,this.seq2Range.endExclusive)}}n.SequenceDiff=b;class p{constructor(e,a){this.offset1=e,this.offset2=a}toString(){return`${this.offset1} <-> ${this.offset2}`}delta(e){return e===0?this:new p(this.offset1+e,this.offset2+e)}equals(e){return this.offset1===e.offset1&&this.offset2===e.offset2}}n.OffsetPair=p,p.zero=new p(0,0),p.max=new p(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER);class h{isValid(){return!0}}n.InfiniteTimeout=h,h.instance=new h;class o{constructor(e){if(this.timeout=e,this.startTime=Date.now(),this.valid=!0,e<=0)throw new A.BugIndicatingError(\"timeout must be positive\")}isValid(){if(!(Date.now()-this.startTime<this.timeout)&&this.valid){this.valid=!1;debugger}return this.valid}}n.DateTimeout=o}),Y(X[29],J([0,1,3,8]),function(q,n,M,A){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.MyersDiffAlgorithm=void 0;class i{compute(o,L,e=A.InfiniteTimeout.instance){if(o.length===0||L.length===0)return A.DiffAlgorithmResult.trivial(o,L);const a=o,u=L;function c(s,l){for(;s<a.length&&l<u.length&&a.getElement(s)===u.getElement(l);)s++,l++;return s}let m=0;const f=new b;f.set(0,c(0,0));const y=new p;y.set(0,f.get(0)===0?null:new d(null,0,0,f.get(0)));let w=0;e:for(;;){if(m++,!e.isValid())return A.DiffAlgorithmResult.trivialTimedOut(a,u);const s=-Math.min(m,u.length+m%2),l=Math.min(m,a.length+m%2);for(w=s;w<=l;w+=2){let _=0;const g=w===l?-1:f.get(w+1),v=w===s?-1:f.get(w-1)+1;_++;const R=Math.min(Math.max(g,v),a.length),N=R-w;if(_++,R>a.length||N>u.length)continue;const D=c(R,N);f.set(w,D);const x=R===g?y.get(w+1):y.get(w-1);if(y.set(w,D!==R?new d(x,R,N,D-R):x),f.get(w)===a.length&&f.get(w)-w===u.length)break e}}let E=y.get(w);const S=[];let C=a.length,r=u.length;for(;;){const s=E?E.x+E.length:0,l=E?E.y+E.length:0;if((s!==C||l!==r)&&S.push(new A.SequenceDiff(new M.OffsetRange(s,C),new M.OffsetRange(l,r))),!E)break;C=E.x,r=E.y,E=E.prev}return S.reverse(),new A.DiffAlgorithmResult(S,!1)}}n.MyersDiffAlgorithm=i;class d{constructor(o,L,e,a){this.prev=o,this.x=L,this.y=e,this.length=a}}class b{constructor(){this.positiveArr=new Int32Array(10),this.negativeArr=new Int32Array(10)}get(o){return o<0?(o=-o-1,this.negativeArr[o]):this.positiveArr[o]}set(o,L){if(o<0){if(o=-o-1,o>=this.negativeArr.length){const e=this.negativeArr;this.negativeArr=new Int32Array(e.length*2),this.negativeArr.set(e)}this.negativeArr[o]=L}else{if(o>=this.positiveArr.length){const e=this.positiveArr;this.positiveArr=new Int32Array(e.length*2),this.positiveArr.set(e)}this.positiveArr[o]=L}}}class p{constructor(){this.positiveArr=[],this.negativeArr=[]}get(o){return o<0?(o=-o-1,this.negativeArr[o]):this.positiveArr[o]}set(o,L){o<0?(o=-o-1,this.negativeArr[o]=L):this.positiveArr[o]=L}}}),Y(X[43],J([0,1,7,3,8]),function(q,n,M,A,i){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.removeVeryShortMatchingTextBetweenLongDiffs=n.removeVeryShortMatchingLinesBetweenDiffs=n.extendDiffsToEntireWordIfAppropriate=n.removeShortMatches=n.optimizeSequenceDiffs=void 0;function d(c,m,f){let y=f;return y=b(c,m,y),y=b(c,m,y),y=p(c,m,y),y}n.optimizeSequenceDiffs=d;function b(c,m,f){if(f.length===0)return f;const y=[];y.push(f[0]);for(let E=1;E<f.length;E++){const S=y[y.length-1];let C=f[E];if(C.seq1Range.isEmpty||C.seq2Range.isEmpty){const r=C.seq1Range.start-S.seq1Range.endExclusive;let s;for(s=1;s<=r&&!(c.getElement(C.seq1Range.start-s)!==c.getElement(C.seq1Range.endExclusive-s)||m.getElement(C.seq2Range.start-s)!==m.getElement(C.seq2Range.endExclusive-s));s++);if(s--,s===r){y[y.length-1]=new i.SequenceDiff(new A.OffsetRange(S.seq1Range.start,C.seq1Range.endExclusive-r),new A.OffsetRange(S.seq2Range.start,C.seq2Range.endExclusive-r));continue}C=C.delta(-s)}y.push(C)}const w=[];for(let E=0;E<y.length-1;E++){const S=y[E+1];let C=y[E];if(C.seq1Range.isEmpty||C.seq2Range.isEmpty){const r=S.seq1Range.start-C.seq1Range.endExclusive;let s;for(s=0;s<r&&!(!c.isStronglyEqual(C.seq1Range.start+s,C.seq1Range.endExclusive+s)||!m.isStronglyEqual(C.seq2Range.start+s,C.seq2Range.endExclusive+s));s++);if(s===r){y[E+1]=new i.SequenceDiff(new A.OffsetRange(C.seq1Range.start+r,S.seq1Range.endExclusive),new A.OffsetRange(C.seq2Range.start+r,S.seq2Range.endExclusive));continue}s>0&&(C=C.delta(s))}w.push(C)}return y.length>0&&w.push(y[y.length-1]),w}function p(c,m,f){if(!c.getBoundaryScore||!m.getBoundaryScore)return f;for(let y=0;y<f.length;y++){const w=y>0?f[y-1]:void 0,E=f[y],S=y+1<f.length?f[y+1]:void 0,C=new A.OffsetRange(w?w.seq1Range.endExclusive+1:0,S?S.seq1Range.start-1:c.length),r=new A.OffsetRange(w?w.seq2Range.endExclusive+1:0,S?S.seq2Range.start-1:m.length);E.seq1Range.isEmpty?f[y]=h(E,c,m,C,r):E.seq2Range.isEmpty&&(f[y]=h(E.swap(),m,c,r,C).swap())}return f}function h(c,m,f,y,w){let S=1;for(;c.seq1Range.start-S>=y.start&&c.seq2Range.start-S>=w.start&&f.isStronglyEqual(c.seq2Range.start-S,c.seq2Range.endExclusive-S)&&S<100;)S++;S--;let C=0;for(;c.seq1Range.start+C<y.endExclusive&&c.seq2Range.endExclusive+C<w.endExclusive&&f.isStronglyEqual(c.seq2Range.start+C,c.seq2Range.endExclusive+C)&&C<100;)C++;if(S===0&&C===0)return c;let r=0,s=-1;for(let l=-S;l<=C;l++){const _=c.seq2Range.start+l,g=c.seq2Range.endExclusive+l,v=c.seq1Range.start+l,R=m.getBoundaryScore(v)+f.getBoundaryScore(_)+f.getBoundaryScore(g);R>s&&(s=R,r=l)}return c.delta(r)}function o(c,m,f){const y=[];for(const w of f){const E=y[y.length-1];if(!E){y.push(w);continue}w.seq1Range.start-E.seq1Range.endExclusive<=2||w.seq2Range.start-E.seq2Range.endExclusive<=2?y[y.length-1]=new i.SequenceDiff(E.seq1Range.join(w.seq1Range),E.seq2Range.join(w.seq2Range)):y.push(w)}return y}n.removeShortMatches=o;function L(c,m,f){const y=i.SequenceDiff.invert(f,c.length),w=[];let E=new i.OffsetPair(0,0);function S(r,s){if(r.offset1<E.offset1||r.offset2<E.offset2)return;const l=c.findWordContaining(r.offset1),_=m.findWordContaining(r.offset2);if(!l||!_)return;let g=new i.SequenceDiff(l,_);const v=g.intersect(s);let R=v.seq1Range.length,N=v.seq2Range.length;for(;y.length>0;){const D=y[0];if(!(D.seq1Range.intersects(l)||D.seq2Range.intersects(_)))break;const T=c.findWordContaining(D.seq1Range.start),F=m.findWordContaining(D.seq2Range.start),B=new i.SequenceDiff(T,F),V=B.intersect(D);if(R+=V.seq1Range.length,N+=V.seq2Range.length,g=g.join(B),g.seq1Range.endExclusive>=D.seq1Range.endExclusive)y.shift();else break}R+N<(g.seq1Range.length+g.seq2Range.length)*2/3&&w.push(g),E=g.getEndExclusives()}for(;y.length>0;){const r=y.shift();r.seq1Range.isEmpty||(S(r.getStarts(),r),S(r.getEndExclusives().delta(-1),r))}return e(f,w)}n.extendDiffsToEntireWordIfAppropriate=L;function e(c,m){const f=[];for(;c.length>0||m.length>0;){const y=c[0],w=m[0];let E;y&&(!w||y.seq1Range.start<w.seq1Range.start)?E=c.shift():E=m.shift(),f.length>0&&f[f.length-1].seq1Range.endExclusive>=E.seq1Range.start?f[f.length-1]=f[f.length-1].join(E):f.push(E)}return f}function a(c,m,f){let y=f;if(y.length===0)return y;let w=0,E;do{E=!1;const S=[y[0]];for(let C=1;C<y.length;C++){let l=function(g,v){const R=new A.OffsetRange(s.seq1Range.endExclusive,r.seq1Range.start);return c.getText(R).replace(/\\s/g,\"\").length<=4&&(g.seq1Range.length+g.seq2Range.length>5||v.seq1Range.length+v.seq2Range.length>5)};const r=y[C],s=S[S.length-1];l(s,r)?(E=!0,S[S.length-1]=S[S.length-1].join(r)):S.push(r)}y=S}while(w++<10&&E);return y}n.removeVeryShortMatchingLinesBetweenDiffs=a;function u(c,m,f){let y=f;if(y.length===0)return y;let w=0,E;do{E=!1;const C=[y[0]];for(let r=1;r<y.length;r++){let _=function(v,R){const N=new A.OffsetRange(l.seq1Range.endExclusive,s.seq1Range.start);if(c.countLinesIn(N)>5||N.length>500)return!1;const x=c.getText(N).trim();if(x.length>20||x.split(/\\r\\n|\\r|\\n/).length>1)return!1;const T=c.countLinesIn(v.seq1Range),F=v.seq1Range.length,B=m.countLinesIn(v.seq2Range),V=v.seq2Range.length,k=c.countLinesIn(R.seq1Range),O=R.seq1Range.length,I=m.countLinesIn(R.seq2Range),W=R.seq2Range.length,z=2*40+50;function G(t){return Math.min(t,z)}return Math.pow(Math.pow(G(T*40+F),1.5)+Math.pow(G(B*40+V),1.5),1.5)+Math.pow(Math.pow(G(k*40+O),1.5)+Math.pow(G(I*40+W),1.5),1.5)>(z**1.5)**1.5*1.3};const s=y[r],l=C[C.length-1];_(l,s)?(E=!0,C[C.length-1]=C[C.length-1].join(s)):C.push(s)}y=C}while(w++<10&&E);const S=[];return(0,M.forEachWithNeighbors)(y,(C,r,s)=>{let l=r;function _(x){return x.length>0&&x.trim().length<=3&&r.seq1Range.length+r.seq2Range.length>100}const g=c.extendToFullLines(r.seq1Range),v=c.getText(new A.OffsetRange(g.start,r.seq1Range.start));_(v)&&(l=l.deltaStart(-v.length));const R=c.getText(new A.OffsetRange(r.seq1Range.endExclusive,g.endExclusive));_(R)&&(l=l.deltaEnd(R.length));const N=i.SequenceDiff.fromOffsetPairs(C?C.getEndExclusives():i.OffsetPair.zero,s?s.getStarts():i.OffsetPair.max),D=l.intersect(N);S.length>0&&D.getStarts().equals(S[S.length-1].getEndExclusives())?S[S.length-1]=S[S.length-1].join(D):S.push(D)}),S}n.removeVeryShortMatchingTextBetweenLongDiffs=u}),Y(X[44],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.LineSequence=void 0;class M{constructor(d,b){this.trimmedHash=d,this.lines=b}getElement(d){return this.trimmedHash[d]}get length(){return this.trimmedHash.length}getBoundaryScore(d){const b=d===0?0:A(this.lines[d-1]),p=d===this.lines.length?0:A(this.lines[d]);return 1e3-(b+p)}getText(d){return this.lines.slice(d.start,d.endExclusive).join(`\n`)}isStronglyEqual(d,b){return this.lines[d]===this.lines[b]}}n.LineSequence=M;function A(i){let d=0;for(;d<i.length&&(i.charCodeAt(d)===32||i.charCodeAt(d)===9);)d++;return d}}),Y(X[15],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.LineRangeFragment=n.isSpace=n.Array2D=void 0;class M{constructor(b,p){this.width=b,this.height=p,this.array=[],this.array=new Array(b*p)}get(b,p){return this.array[b+p*this.width]}set(b,p,h){this.array[b+p*this.width]=h}}n.Array2D=M;function A(d){return d===32||d===9}n.isSpace=A;class i{static getKey(b){let p=this.chrKeys.get(b);return p===void 0&&(p=this.chrKeys.size,this.chrKeys.set(b,p)),p}constructor(b,p,h){this.range=b,this.lines=p,this.source=h,this.histogram=[];let o=0;for(let L=b.startLineNumber-1;L<b.endLineNumberExclusive-1;L++){const e=p[L];for(let u=0;u<e.length;u++){o++;const c=e[u],m=i.getKey(c);this.histogram[m]=(this.histogram[m]||0)+1}o++;const a=i.getKey(`\n`);this.histogram[a]=(this.histogram[a]||0)+1}this.totalCount=o}computeSimilarity(b){var p,h;let o=0;const L=Math.max(this.histogram.length,b.histogram.length);for(let e=0;e<L;e++)o+=Math.abs(((p=this.histogram[e])!==null&&p!==void 0?p:0)-((h=b.histogram[e])!==null&&h!==void 0?h:0));return 1-o/(this.totalCount+b.totalCount)}}n.LineRangeFragment=i,i.chrKeys=new Map}),Y(X[45],J([0,1,3,8,15]),function(q,n,M,A,i){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.DynamicProgrammingDiffing=void 0;class d{compute(p,h,o=A.InfiniteTimeout.instance,L){if(p.length===0||h.length===0)return A.DiffAlgorithmResult.trivial(p,h);const e=new i.Array2D(p.length,h.length),a=new i.Array2D(p.length,h.length),u=new i.Array2D(p.length,h.length);for(let S=0;S<p.length;S++)for(let C=0;C<h.length;C++){if(!o.isValid())return A.DiffAlgorithmResult.trivialTimedOut(p,h);const r=S===0?0:e.get(S-1,C),s=C===0?0:e.get(S,C-1);let l;p.getElement(S)===h.getElement(C)?(S===0||C===0?l=0:l=e.get(S-1,C-1),S>0&&C>0&&a.get(S-1,C-1)===3&&(l+=u.get(S-1,C-1)),l+=L?L(S,C):1):l=-1;const _=Math.max(r,s,l);if(_===l){const g=S>0&&C>0?u.get(S-1,C-1):0;u.set(S,C,g+1),a.set(S,C,3)}else _===r?(u.set(S,C,0),a.set(S,C,1)):_===s&&(u.set(S,C,0),a.set(S,C,2));e.set(S,C,_)}const c=[];let m=p.length,f=h.length;function y(S,C){(S+1!==m||C+1!==f)&&c.push(new A.SequenceDiff(new M.OffsetRange(S+1,m),new M.OffsetRange(C+1,f))),m=S,f=C}let w=p.length-1,E=h.length-1;for(;w>=0&&E>=0;)a.get(w,E)===3?(y(w,E),w--,E--):a.get(w,E)===1?w--:E--;return y(-1,-1),c.reverse(),new A.DiffAlgorithmResult(c,!1)}}n.DynamicProgrammingDiffing=d}),Y(X[30],J([0,1,11,3,4,2,15]),function(q,n,M,A,i,d,b){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.LinesSliceCharSequence=void 0;class p{constructor(u,c,m){this.lines=u,this.considerWhitespaceChanges=m,this.elements=[],this.firstCharOffsetByLine=[],this.additionalOffsetByLine=[];let f=!1;c.start>0&&c.endExclusive>=u.length&&(c=new A.OffsetRange(c.start-1,c.endExclusive),f=!0),this.lineRange=c,this.firstCharOffsetByLine[0]=0;for(let y=this.lineRange.start;y<this.lineRange.endExclusive;y++){let w=u[y],E=0;if(f)E=w.length,w=\"\",f=!1;else if(!m){const S=w.trimStart();E=w.length-S.length,w=S.trimEnd()}this.additionalOffsetByLine.push(E);for(let S=0;S<w.length;S++)this.elements.push(w.charCodeAt(S));y<u.length-1&&(this.elements.push(`\n`.charCodeAt(0)),this.firstCharOffsetByLine[y-this.lineRange.start+1]=this.elements.length)}this.additionalOffsetByLine.push(0)}toString(){return`Slice: \"${this.text}\"`}get text(){return this.getText(new A.OffsetRange(0,this.length))}getText(u){return this.elements.slice(u.start,u.endExclusive).map(c=>String.fromCharCode(c)).join(\"\")}getElement(u){return this.elements[u]}get length(){return this.elements.length}getBoundaryScore(u){const c=e(u>0?this.elements[u-1]:-1),m=e(u<this.elements.length?this.elements[u]:-1);if(c===7&&m===8)return 0;if(c===8)return 150;let f=0;return c!==m&&(f+=10,c===0&&m===1&&(f+=1)),f+=L(c),f+=L(m),f}translateOffset(u){if(this.lineRange.isEmpty)return new i.Position(this.lineRange.start+1,1);const c=(0,M.findLastIdxMonotonous)(this.firstCharOffsetByLine,m=>m<=u);return new i.Position(this.lineRange.start+c+1,u-this.firstCharOffsetByLine[c]+this.additionalOffsetByLine[c]+1)}translateRange(u){return d.Range.fromPositions(this.translateOffset(u.start),this.translateOffset(u.endExclusive))}findWordContaining(u){if(u<0||u>=this.elements.length||!h(this.elements[u]))return;let c=u;for(;c>0&&h(this.elements[c-1]);)c--;let m=u;for(;m<this.elements.length&&h(this.elements[m]);)m++;return new A.OffsetRange(c,m)}countLinesIn(u){return this.translateOffset(u.endExclusive).lineNumber-this.translateOffset(u.start).lineNumber}isStronglyEqual(u,c){return this.elements[u]===this.elements[c]}extendToFullLines(u){var c,m;const f=(c=(0,M.findLastMonotonous)(this.firstCharOffsetByLine,w=>w<=u.start))!==null&&c!==void 0?c:0,y=(m=(0,M.findFirstMonotonous)(this.firstCharOffsetByLine,w=>u.endExclusive<=w))!==null&&m!==void 0?m:this.elements.length;return new A.OffsetRange(f,y)}}n.LinesSliceCharSequence=p;function h(a){return a>=97&&a<=122||a>=65&&a<=90||a>=48&&a<=57}const o={[0]:0,[1]:0,[2]:0,[3]:10,[4]:2,[5]:30,[6]:3,[7]:10,[8]:10};function L(a){return o[a]}function e(a){return a===10?8:a===13?7:(0,b.isSpace)(a)?6:a>=97&&a<=122?0:a>=65&&a<=90?1:a>=48&&a<=57?2:a===-1?3:a===44||a===59?5:4}}),Y(X[31],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.MovedText=n.LinesDiff=void 0;class M{constructor(d,b,p){this.changes=d,this.moves=b,this.hitTimeout=p}}n.LinesDiff=M;class A{constructor(d,b){this.lineRangeMapping=d,this.changes=b}}n.MovedText=A}),Y(X[16],J([0,1,10]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.RangeMapping=n.DetailedLineRangeMapping=n.LineRangeMapping=void 0;class A{static inverse(p,h,o){const L=[];let e=1,a=1;for(const c of p){const m=new A(new M.LineRange(e,c.original.startLineNumber),new M.LineRange(a,c.modified.startLineNumber));m.modified.isEmpty||L.push(m),e=c.original.endLineNumberExclusive,a=c.modified.endLineNumberExclusive}const u=new A(new M.LineRange(e,h+1),new M.LineRange(a,o+1));return u.modified.isEmpty||L.push(u),L}static clip(p,h,o){const L=[];for(const e of p){const a=e.original.intersect(h),u=e.modified.intersect(o);a&&!a.isEmpty&&u&&!u.isEmpty&&L.push(new A(a,u))}return L}constructor(p,h){this.original=p,this.modified=h}toString(){return`{${this.original.toString()}->${this.modified.toString()}}`}flip(){return new A(this.modified,this.original)}join(p){return new A(this.original.join(p.original),this.modified.join(p.modified))}}n.LineRangeMapping=A;class i extends A{constructor(p,h,o){super(p,h),this.innerChanges=o}flip(){var p;return new i(this.modified,this.original,(p=this.innerChanges)===null||p===void 0?void 0:p.map(h=>h.flip()))}}n.DetailedLineRangeMapping=i;class d{constructor(p,h){this.originalRange=p,this.modifiedRange=h}toString(){return`{${this.originalRange.toString()}->${this.modifiedRange.toString()}}`}flip(){return new d(this.modifiedRange,this.originalRange)}}n.RangeMapping=d}),Y(X[46],J([0,1,8,16,7,11,37,10,3,30,15,29]),function(q,n,M,A,i,d,b,p,h,o,L,e){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.computeMovedLines=void 0;function a(E,S,C,r,s,l){let{moves:_,excludedChanges:g}=c(E,S,C,l);if(!l.isValid())return[];const v=E.filter(N=>!g.has(N)),R=m(v,r,s,S,C,l);return(0,i.pushMany)(_,R),_=y(_),_=_.filter(N=>{const D=N.original.toOffsetRange().slice(S).map(T=>T.trim());return D.join(`\n`).length>=15&&u(D,T=>T.length>=2)>=2}),_=w(E,_),_}n.computeMovedLines=a;function u(E,S){let C=0;for(const r of E)S(r)&&C++;return C}function c(E,S,C,r){const s=[],l=E.filter(v=>v.modified.isEmpty&&v.original.length>=3).map(v=>new L.LineRangeFragment(v.original,S,v)),_=new Set(E.filter(v=>v.original.isEmpty&&v.modified.length>=3).map(v=>new L.LineRangeFragment(v.modified,C,v))),g=new Set;for(const v of l){let R=-1,N;for(const D of _){const x=v.computeSimilarity(D);x>R&&(R=x,N=D)}if(R>.9&&N&&(_.delete(N),s.push(new A.LineRangeMapping(v.range,N.range)),g.add(v.source),g.add(N.source)),!r.isValid())return{moves:s,excludedChanges:g}}return{moves:s,excludedChanges:g}}function m(E,S,C,r,s,l){const _=[],g=new b.SetMap;for(const x of E)for(let T=x.original.startLineNumber;T<x.original.endLineNumberExclusive-2;T++){const F=`${S[T-1]}:${S[T+1-1]}:${S[T+2-1]}`;g.add(F,{range:new p.LineRange(T,T+3)})}const v=[];E.sort((0,i.compareBy)(x=>x.modified.startLineNumber,i.numberComparator));for(const x of E){let T=[];for(let F=x.modified.startLineNumber;F<x.modified.endLineNumberExclusive-2;F++){const B=`${C[F-1]}:${C[F+1-1]}:${C[F+2-1]}`,V=new p.LineRange(F,F+3),k=[];g.forEach(B,({range:O})=>{for(const W of T)if(W.originalLineRange.endLineNumberExclusive+1===O.endLineNumberExclusive&&W.modifiedLineRange.endLineNumberExclusive+1===V.endLineNumberExclusive){W.originalLineRange=new p.LineRange(W.originalLineRange.startLineNumber,O.endLineNumberExclusive),W.modifiedLineRange=new p.LineRange(W.modifiedLineRange.startLineNumber,V.endLineNumberExclusive),k.push(W);return}const I={modifiedLineRange:V,originalLineRange:O};v.push(I),k.push(I)}),T=k}if(!l.isValid())return[]}v.sort((0,i.reverseOrder)((0,i.compareBy)(x=>x.modifiedLineRange.length,i.numberComparator)));const R=new p.LineRangeSet,N=new p.LineRangeSet;for(const x of v){const T=x.modifiedLineRange.startLineNumber-x.originalLineRange.startLineNumber,F=R.subtractFrom(x.modifiedLineRange),B=N.subtractFrom(x.originalLineRange).getWithDelta(T),V=F.getIntersection(B);for(const k of V.ranges){if(k.length<3)continue;const O=k,I=k.delta(-T);_.push(new A.LineRangeMapping(I,O)),R.addRange(O),N.addRange(I)}}_.sort((0,i.compareBy)(x=>x.original.startLineNumber,i.numberComparator));const D=new d.MonotonousArray(E);for(let x=0;x<_.length;x++){const T=_[x],F=D.findLastMonotonous(G=>G.original.startLineNumber<=T.original.startLineNumber),B=(0,d.findLastMonotonous)(E,G=>G.modified.startLineNumber<=T.modified.startLineNumber),V=Math.max(T.original.startLineNumber-F.original.startLineNumber,T.modified.startLineNumber-B.modified.startLineNumber),k=D.findLastMonotonous(G=>G.original.startLineNumber<T.original.endLineNumberExclusive),O=(0,d.findLastMonotonous)(E,G=>G.modified.startLineNumber<T.modified.endLineNumberExclusive),I=Math.max(k.original.endLineNumberExclusive-T.original.endLineNumberExclusive,O.modified.endLineNumberExclusive-T.modified.endLineNumberExclusive);let W;for(W=0;W<V;W++){const G=T.original.startLineNumber-W-1,t=T.modified.startLineNumber-W-1;if(G>r.length||t>s.length||R.contains(t)||N.contains(G)||!f(r[G-1],s[t-1],l))break}W>0&&(N.addRange(new p.LineRange(T.original.startLineNumber-W,T.original.startLineNumber)),R.addRange(new p.LineRange(T.modified.startLineNumber-W,T.modified.startLineNumber)));let z;for(z=0;z<I;z++){const G=T.original.endLineNumberExclusive+z,t=T.modified.endLineNumberExclusive+z;if(G>r.length||t>s.length||R.contains(t)||N.contains(G)||!f(r[G-1],s[t-1],l))break}z>0&&(N.addRange(new p.LineRange(T.original.endLineNumberExclusive,T.original.endLineNumberExclusive+z)),R.addRange(new p.LineRange(T.modified.endLineNumberExclusive,T.modified.endLineNumberExclusive+z))),(W>0||z>0)&&(_[x]=new A.LineRangeMapping(new p.LineRange(T.original.startLineNumber-W,T.original.endLineNumberExclusive+z),new p.LineRange(T.modified.startLineNumber-W,T.modified.endLineNumberExclusive+z)))}return _}function f(E,S,C){if(E.trim()===S.trim())return!0;if(E.length>300&&S.length>300)return!1;const s=new e.MyersDiffAlgorithm().compute(new o.LinesSliceCharSequence([E],new h.OffsetRange(0,1),!1),new o.LinesSliceCharSequence([S],new h.OffsetRange(0,1),!1),C);let l=0;const _=M.SequenceDiff.invert(s.diffs,E.length);for(const N of _)N.seq1Range.forEach(D=>{(0,L.isSpace)(E.charCodeAt(D))||l++});function g(N){let D=0;for(let x=0;x<E.length;x++)(0,L.isSpace)(N.charCodeAt(x))||D++;return D}const v=g(E.length>S.length?E:S);return l/v>.6&&v>10}function y(E){if(E.length===0)return E;E.sort((0,i.compareBy)(C=>C.original.startLineNumber,i.numberComparator));const S=[E[0]];for(let C=1;C<E.length;C++){const r=S[S.length-1],s=E[C],l=s.original.startLineNumber-r.original.endLineNumberExclusive,_=s.modified.startLineNumber-r.modified.endLineNumberExclusive;if(l>=0&&_>=0&&l+_<=2){S[S.length-1]=r.join(s);continue}S.push(s)}return S}function w(E,S){const C=new d.MonotonousArray(E);return S=S.filter(r=>{const s=C.findLastMonotonous(g=>g.original.startLineNumber<r.original.endLineNumberExclusive)||new A.LineRangeMapping(new p.LineRange(1,1),new p.LineRange(1,1)),l=(0,d.findLastMonotonous)(E,g=>g.modified.startLineNumber<r.modified.endLineNumberExclusive);return s!==l}),S}}),Y(X[47],J([0,1,7,12,10,3,2,8,45,29,46,43,31,16,30,44]),function(q,n,M,A,i,d,b,p,h,o,L,e,a,u,c,m){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.getLineRangeMapping=n.lineRangeMappingFromRangeMappings=n.DefaultLinesDiffComputer=void 0;class f{constructor(){this.dynamicProgrammingDiffing=new h.DynamicProgrammingDiffing,this.myersDiffingAlgorithm=new o.MyersDiffAlgorithm}computeDiff(S,C,r){if(S.length<=1&&(0,M.equals)(S,C,(z,G)=>z===G))return new a.LinesDiff([],[],!1);if(S.length===1&&S[0].length===0||C.length===1&&C[0].length===0)return new a.LinesDiff([new u.DetailedLineRangeMapping(new i.LineRange(1,S.length+1),new i.LineRange(1,C.length+1),[new u.RangeMapping(new b.Range(1,1,S.length,S[0].length+1),new b.Range(1,1,C.length,C[0].length+1))])],[],!1);const s=r.maxComputationTimeMs===0?p.InfiniteTimeout.instance:new p.DateTimeout(r.maxComputationTimeMs),l=!r.ignoreTrimWhitespace,_=new Map;function g(z){let G=_.get(z);return G===void 0&&(G=_.size,_.set(z,G)),G}const v=S.map(z=>g(z.trim())),R=C.map(z=>g(z.trim())),N=new m.LineSequence(v,S),D=new m.LineSequence(R,C),x=(()=>N.length+D.length<1700?this.dynamicProgrammingDiffing.compute(N,D,s,(z,G)=>S[z]===C[G]?C[G].length===0?.1:1+Math.log(1+C[G].length):.99):this.myersDiffingAlgorithm.compute(N,D))();let T=x.diffs,F=x.hitTimeout;T=(0,e.optimizeSequenceDiffs)(N,D,T),T=(0,e.removeVeryShortMatchingLinesBetweenDiffs)(N,D,T);const B=[],V=z=>{if(l)for(let G=0;G<z;G++){const t=k+G,se=O+G;if(S[t]!==C[se]){const ce=this.refineDiff(S,C,new p.SequenceDiff(new d.OffsetRange(t,t+1),new d.OffsetRange(se,se+1)),s,l);for(const me of ce.mappings)B.push(me);ce.hitTimeout&&(F=!0)}}};let k=0,O=0;for(const z of T){(0,A.assertFn)(()=>z.seq1Range.start-k===z.seq2Range.start-O);const G=z.seq1Range.start-k;V(G),k=z.seq1Range.endExclusive,O=z.seq2Range.endExclusive;const t=this.refineDiff(S,C,z,s,l);t.hitTimeout&&(F=!0);for(const se of t.mappings)B.push(se)}V(S.length-k);const I=y(B,S,C);let W=[];return r.computeMoves&&(W=this.computeMoves(I,S,C,v,R,s,l)),(0,A.assertFn)(()=>{function z(t,se){if(t.lineNumber<1||t.lineNumber>se.length)return!1;const ce=se[t.lineNumber-1];return!(t.column<1||t.column>ce.length+1)}function G(t,se){return!(t.startLineNumber<1||t.startLineNumber>se.length+1||t.endLineNumberExclusive<1||t.endLineNumberExclusive>se.length+1)}for(const t of I){if(!t.innerChanges)return!1;for(const se of t.innerChanges)if(!(z(se.modifiedRange.getStartPosition(),C)&&z(se.modifiedRange.getEndPosition(),C)&&z(se.originalRange.getStartPosition(),S)&&z(se.originalRange.getEndPosition(),S)))return!1;if(!G(t.modified,C)||!G(t.original,S))return!1}return!0}),new a.LinesDiff(I,W,F)}computeMoves(S,C,r,s,l,_,g){return(0,L.computeMovedLines)(S,C,r,s,l,_).map(N=>{const D=this.refineDiff(C,r,new p.SequenceDiff(N.original.toOffsetRange(),N.modified.toOffsetRange()),_,g),x=y(D.mappings,C,r,!0);return new a.MovedText(N,x)})}refineDiff(S,C,r,s,l){const _=new c.LinesSliceCharSequence(S,r.seq1Range,l),g=new c.LinesSliceCharSequence(C,r.seq2Range,l),v=_.length+g.length<500?this.dynamicProgrammingDiffing.compute(_,g,s):this.myersDiffingAlgorithm.compute(_,g,s);let R=v.diffs;return R=(0,e.optimizeSequenceDiffs)(_,g,R),R=(0,e.extendDiffsToEntireWordIfAppropriate)(_,g,R),R=(0,e.removeShortMatches)(_,g,R),R=(0,e.removeVeryShortMatchingTextBetweenLongDiffs)(_,g,R),{mappings:R.map(D=>new u.RangeMapping(_.translateRange(D.seq1Range),g.translateRange(D.seq2Range))),hitTimeout:v.hitTimeout}}}n.DefaultLinesDiffComputer=f;function y(E,S,C,r=!1){const s=[];for(const l of(0,M.groupAdjacentBy)(E.map(_=>w(_,S,C)),(_,g)=>_.original.overlapOrTouch(g.original)||_.modified.overlapOrTouch(g.modified))){const _=l[0],g=l[l.length-1];s.push(new u.DetailedLineRangeMapping(_.original.join(g.original),_.modified.join(g.modified),l.map(v=>v.innerChanges[0])))}return(0,A.assertFn)(()=>!r&&s.length>0&&s[0].original.startLineNumber!==s[0].modified.startLineNumber?!1:(0,A.checkAdjacentItems)(s,(l,_)=>_.original.startLineNumber-l.original.endLineNumberExclusive===_.modified.startLineNumber-l.modified.endLineNumberExclusive&&l.original.endLineNumberExclusive<_.original.startLineNumber&&l.modified.endLineNumberExclusive<_.modified.startLineNumber)),s}n.lineRangeMappingFromRangeMappings=y;function w(E,S,C){let r=0,s=0;E.modifiedRange.endColumn===1&&E.originalRange.endColumn===1&&E.originalRange.startLineNumber+r<=E.originalRange.endLineNumber&&E.modifiedRange.startLineNumber+r<=E.modifiedRange.endLineNumber&&(s=-1),E.modifiedRange.startColumn-1>=C[E.modifiedRange.startLineNumber-1].length&&E.originalRange.startColumn-1>=S[E.originalRange.startLineNumber-1].length&&E.originalRange.startLineNumber<=E.originalRange.endLineNumber+s&&E.modifiedRange.startLineNumber<=E.modifiedRange.endLineNumber+s&&(r=1);const l=new i.LineRange(E.originalRange.startLineNumber+r,E.originalRange.endLineNumber+1+s),_=new i.LineRange(E.modifiedRange.startLineNumber+r,E.modifiedRange.endLineNumber+1+s);return new u.DetailedLineRangeMapping(l,_,[E])}n.getLineRangeMapping=w}),Y(X[48],J([0,1,24,31,16,6,2,12,10]),function(q,n,M,A,i,d,b,p,h){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.DiffComputer=n.LegacyLinesDiffComputer=void 0;const o=3;class L{computeDiff(r,s,l){var _;const v=new y(r,s,{maxComputationTime:l.maxComputationTimeMs,shouldIgnoreTrimWhitespace:l.ignoreTrimWhitespace,shouldComputeCharChanges:!0,shouldMakePrettyDiff:!0,shouldPostProcessCharChanges:!0}).computeDiff(),R=[];let N=null;for(const D of v.changes){let x;D.originalEndLineNumber===0?x=new h.LineRange(D.originalStartLineNumber+1,D.originalStartLineNumber+1):x=new h.LineRange(D.originalStartLineNumber,D.originalEndLineNumber+1);let T;D.modifiedEndLineNumber===0?T=new h.LineRange(D.modifiedStartLineNumber+1,D.modifiedStartLineNumber+1):T=new h.LineRange(D.modifiedStartLineNumber,D.modifiedEndLineNumber+1);let F=new i.DetailedLineRangeMapping(x,T,(_=D.charChanges)===null||_===void 0?void 0:_.map(B=>new i.RangeMapping(new b.Range(B.originalStartLineNumber,B.originalStartColumn,B.originalEndLineNumber,B.originalEndColumn),new b.Range(B.modifiedStartLineNumber,B.modifiedStartColumn,B.modifiedEndLineNumber,B.modifiedEndColumn))));N&&(N.modified.endLineNumberExclusive===F.modified.startLineNumber||N.original.endLineNumberExclusive===F.original.startLineNumber)&&(F=new i.DetailedLineRangeMapping(N.original.join(F.original),N.modified.join(F.modified),N.innerChanges&&F.innerChanges?N.innerChanges.concat(F.innerChanges):void 0),R.pop()),R.push(F),N=F}return(0,p.assertFn)(()=>(0,p.checkAdjacentItems)(R,(D,x)=>x.original.startLineNumber-D.original.endLineNumberExclusive===x.modified.startLineNumber-D.modified.endLineNumberExclusive&&D.original.endLineNumberExclusive<x.original.startLineNumber&&D.modified.endLineNumberExclusive<x.modified.startLineNumber)),new A.LinesDiff(R,[],v.quitEarly)}}n.LegacyLinesDiffComputer=L;function e(C,r,s,l){return new M.LcsDiff(C,r,s).ComputeDiff(l)}class a{constructor(r){const s=[],l=[];for(let _=0,g=r.length;_<g;_++)s[_]=w(r[_],1),l[_]=E(r[_],1);this.lines=r,this._startColumns=s,this._endColumns=l}getElements(){const r=[];for(let s=0,l=this.lines.length;s<l;s++)r[s]=this.lines[s].substring(this._startColumns[s]-1,this._endColumns[s]-1);return r}getStrictElement(r){return this.lines[r]}getStartLineNumber(r){return r+1}getEndLineNumber(r){return r+1}createCharSequence(r,s,l){const _=[],g=[],v=[];let R=0;for(let N=s;N<=l;N++){const D=this.lines[N],x=r?this._startColumns[N]:1,T=r?this._endColumns[N]:D.length+1;for(let F=x;F<T;F++)_[R]=D.charCodeAt(F-1),g[R]=N+1,v[R]=F,R++;!r&&N<l&&(_[R]=10,g[R]=N+1,v[R]=D.length+1,R++)}return new u(_,g,v)}}class u{constructor(r,s,l){this._charCodes=r,this._lineNumbers=s,this._columns=l}toString(){return\"[\"+this._charCodes.map((r,s)=>(r===10?\"\\\\n\":String.fromCharCode(r))+`-(${this._lineNumbers[s]},${this._columns[s]})`).join(\", \")+\"]\"}_assertIndex(r,s){if(r<0||r>=s.length)throw new Error(\"Illegal index\")}getElements(){return this._charCodes}getStartLineNumber(r){return r>0&&r===this._lineNumbers.length?this.getEndLineNumber(r-1):(this._assertIndex(r,this._lineNumbers),this._lineNumbers[r])}getEndLineNumber(r){return r===-1?this.getStartLineNumber(r+1):(this._assertIndex(r,this._lineNumbers),this._charCodes[r]===10?this._lineNumbers[r]+1:this._lineNumbers[r])}getStartColumn(r){return r>0&&r===this._columns.length?this.getEndColumn(r-1):(this._assertIndex(r,this._columns),this._columns[r])}getEndColumn(r){return r===-1?this.getStartColumn(r+1):(this._assertIndex(r,this._columns),this._charCodes[r]===10?1:this._columns[r]+1)}}class c{constructor(r,s,l,_,g,v,R,N){this.originalStartLineNumber=r,this.originalStartColumn=s,this.originalEndLineNumber=l,this.originalEndColumn=_,this.modifiedStartLineNumber=g,this.modifiedStartColumn=v,this.modifiedEndLineNumber=R,this.modifiedEndColumn=N}static createFromDiffChange(r,s,l){const _=s.getStartLineNumber(r.originalStart),g=s.getStartColumn(r.originalStart),v=s.getEndLineNumber(r.originalStart+r.originalLength-1),R=s.getEndColumn(r.originalStart+r.originalLength-1),N=l.getStartLineNumber(r.modifiedStart),D=l.getStartColumn(r.modifiedStart),x=l.getEndLineNumber(r.modifiedStart+r.modifiedLength-1),T=l.getEndColumn(r.modifiedStart+r.modifiedLength-1);return new c(_,g,v,R,N,D,x,T)}}function m(C){if(C.length<=1)return C;const r=[C[0]];let s=r[0];for(let l=1,_=C.length;l<_;l++){const g=C[l],v=g.originalStart-(s.originalStart+s.originalLength),R=g.modifiedStart-(s.modifiedStart+s.modifiedLength);Math.min(v,R)<o?(s.originalLength=g.originalStart+g.originalLength-s.originalStart,s.modifiedLength=g.modifiedStart+g.modifiedLength-s.modifiedStart):(r.push(g),s=g)}return r}class f{constructor(r,s,l,_,g){this.originalStartLineNumber=r,this.originalEndLineNumber=s,this.modifiedStartLineNumber=l,this.modifiedEndLineNumber=_,this.charChanges=g}static createFromDiffResult(r,s,l,_,g,v,R){let N,D,x,T,F;if(s.originalLength===0?(N=l.getStartLineNumber(s.originalStart)-1,D=0):(N=l.getStartLineNumber(s.originalStart),D=l.getEndLineNumber(s.originalStart+s.originalLength-1)),s.modifiedLength===0?(x=_.getStartLineNumber(s.modifiedStart)-1,T=0):(x=_.getStartLineNumber(s.modifiedStart),T=_.getEndLineNumber(s.modifiedStart+s.modifiedLength-1)),v&&s.originalLength>0&&s.originalLength<20&&s.modifiedLength>0&&s.modifiedLength<20&&g()){const B=l.createCharSequence(r,s.originalStart,s.originalStart+s.originalLength-1),V=_.createCharSequence(r,s.modifiedStart,s.modifiedStart+s.modifiedLength-1);if(B.getElements().length>0&&V.getElements().length>0){let k=e(B,V,g,!0).changes;R&&(k=m(k)),F=[];for(let O=0,I=k.length;O<I;O++)F.push(c.createFromDiffChange(k[O],B,V))}}return new f(N,D,x,T,F)}}class y{constructor(r,s,l){this.shouldComputeCharChanges=l.shouldComputeCharChanges,this.shouldPostProcessCharChanges=l.shouldPostProcessCharChanges,this.shouldIgnoreTrimWhitespace=l.shouldIgnoreTrimWhitespace,this.shouldMakePrettyDiff=l.shouldMakePrettyDiff,this.originalLines=r,this.modifiedLines=s,this.original=new a(r),this.modified=new a(s),this.continueLineDiff=S(l.maxComputationTime),this.continueCharDiff=S(l.maxComputationTime===0?0:Math.min(l.maxComputationTime,5e3))}computeDiff(){if(this.original.lines.length===1&&this.original.lines[0].length===0)return this.modified.lines.length===1&&this.modified.lines[0].length===0?{quitEarly:!1,changes:[]}:{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:1,modifiedStartLineNumber:1,modifiedEndLineNumber:this.modified.lines.length,charChanges:void 0}]};if(this.modified.lines.length===1&&this.modified.lines[0].length===0)return{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:this.original.lines.length,modifiedStartLineNumber:1,modifiedEndLineNumber:1,charChanges:void 0}]};const r=e(this.original,this.modified,this.continueLineDiff,this.shouldMakePrettyDiff),s=r.changes,l=r.quitEarly;if(this.shouldIgnoreTrimWhitespace){const R=[];for(let N=0,D=s.length;N<D;N++)R.push(f.createFromDiffResult(this.shouldIgnoreTrimWhitespace,s[N],this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges));return{quitEarly:l,changes:R}}const _=[];let g=0,v=0;for(let R=-1,N=s.length;R<N;R++){const D=R+1<N?s[R+1]:null,x=D?D.originalStart:this.originalLines.length,T=D?D.modifiedStart:this.modifiedLines.length;for(;g<x&&v<T;){const F=this.originalLines[g],B=this.modifiedLines[v];if(F!==B){{let V=w(F,1),k=w(B,1);for(;V>1&&k>1;){const O=F.charCodeAt(V-2),I=B.charCodeAt(k-2);if(O!==I)break;V--,k--}(V>1||k>1)&&this._pushTrimWhitespaceCharChange(_,g+1,1,V,v+1,1,k)}{let V=E(F,1),k=E(B,1);const O=F.length+1,I=B.length+1;for(;V<O&&k<I;){const W=F.charCodeAt(V-1),z=F.charCodeAt(k-1);if(W!==z)break;V++,k++}(V<O||k<I)&&this._pushTrimWhitespaceCharChange(_,g+1,V,O,v+1,k,I)}}g++,v++}D&&(_.push(f.createFromDiffResult(this.shouldIgnoreTrimWhitespace,D,this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges)),g+=D.originalLength,v+=D.modifiedLength)}return{quitEarly:l,changes:_}}_pushTrimWhitespaceCharChange(r,s,l,_,g,v,R){if(this._mergeTrimWhitespaceCharChange(r,s,l,_,g,v,R))return;let N;this.shouldComputeCharChanges&&(N=[new c(s,l,s,_,g,v,g,R)]),r.push(new f(s,s,g,g,N))}_mergeTrimWhitespaceCharChange(r,s,l,_,g,v,R){const N=r.length;if(N===0)return!1;const D=r[N-1];return D.originalEndLineNumber===0||D.modifiedEndLineNumber===0?!1:D.originalEndLineNumber===s&&D.modifiedEndLineNumber===g?(this.shouldComputeCharChanges&&D.charChanges&&D.charChanges.push(new c(s,l,s,_,g,v,g,R)),!0):D.originalEndLineNumber+1===s&&D.modifiedEndLineNumber+1===g?(D.originalEndLineNumber=s,D.modifiedEndLineNumber=g,this.shouldComputeCharChanges&&D.charChanges&&D.charChanges.push(new c(s,l,s,_,g,v,g,R)),!0):!1}}n.DiffComputer=y;function w(C,r){const s=d.firstNonWhitespaceIndex(C);return s===-1?r:s+1}function E(C,r){const s=d.lastNonWhitespaceIndex(C);return s===-1?r:s+2}function S(C){if(C===0)return()=>!0;const r=Date.now();return()=>Date.now()-r<C}}),Y(X[49],J([0,1,48,47]),function(q,n,M,A){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.linesDiffComputers=void 0,n.linesDiffComputers={getLegacy:()=>new M.LegacyLinesDiffComputer,getDefault:()=>new A.DefaultLinesDiffComputer}}),Y(X[50],J([0,1,33]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.computeDefaultDocumentColors=void 0;function A(a){const u=[];for(const c of a){const m=Number(c);(m||m===0&&c.replace(/\\s/g,\"\")!==\"\")&&u.push(m)}return u}function i(a,u,c,m){return{red:a/255,blue:c/255,green:u/255,alpha:m}}function d(a,u){const c=u.index,m=u[0].length;if(!c)return;const f=a.positionAt(c);return{startLineNumber:f.lineNumber,startColumn:f.column,endLineNumber:f.lineNumber,endColumn:f.column+m}}function b(a,u){if(!a)return;const c=M.Color.Format.CSS.parseHex(u);if(c)return{range:a,color:i(c.rgba.r,c.rgba.g,c.rgba.b,c.rgba.a)}}function p(a,u,c){if(!a||u.length!==1)return;const f=u[0].values(),y=A(f);return{range:a,color:i(y[0],y[1],y[2],c?y[3]:1)}}function h(a,u,c){if(!a||u.length!==1)return;const f=u[0].values(),y=A(f),w=new M.Color(new M.HSLA(y[0],y[1]/100,y[2]/100,c?y[3]:1));return{range:a,color:i(w.rgba.r,w.rgba.g,w.rgba.b,w.rgba.a)}}function o(a,u){return typeof a==\"string\"?[...a.matchAll(u)]:a.findMatches(u)}function L(a){const u=[],m=o(a,/\\b(rgb|rgba|hsl|hsla)(\\([0-9\\s,.\\%]*\\))|(#)([A-Fa-f0-9]{3})\\b|(#)([A-Fa-f0-9]{4})\\b|(#)([A-Fa-f0-9]{6})\\b|(#)([A-Fa-f0-9]{8})\\b/gm);if(m.length>0)for(const f of m){const y=f.filter(C=>C!==void 0),w=y[1],E=y[2];if(!E)continue;let S;if(w===\"rgb\"){const C=/^\\(\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*\\)$/gm;S=p(d(a,f),o(E,C),!1)}else if(w===\"rgba\"){const C=/^\\(\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(0[.][0-9]+|[.][0-9]+|[01][.]|[01])\\s*\\)$/gm;S=p(d(a,f),o(E,C),!0)}else if(w===\"hsl\"){const C=/^\\(\\s*(36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*\\)$/gm;S=h(d(a,f),o(E,C),!1)}else if(w===\"hsla\"){const C=/^\\(\\s*(36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*,\\s*(0[.][0-9]+|[.][0-9]+|[01][.]|[01])\\s*\\)$/gm;S=h(d(a,f),o(E,C),!0)}else w===\"#\"&&(S=b(d(a,f),w+E));S&&u.push(S)}return u}function e(a){return!a||typeof a.getValue!=\"function\"||typeof a.positionAt!=\"function\"?[]:L(a)}n.computeDefaultDocumentColors=e}),Y(X[51],J([0,1,27]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.computeLinks=n.LinkComputer=n.StateMachine=void 0;class A{constructor(a,u,c){const m=new Uint8Array(a*u);for(let f=0,y=a*u;f<y;f++)m[f]=c;this._data=m,this.rows=a,this.cols=u}get(a,u){return this._data[a*this.cols+u]}set(a,u,c){this._data[a*this.cols+u]=c}}class i{constructor(a){let u=0,c=0;for(let f=0,y=a.length;f<y;f++){const[w,E,S]=a[f];E>u&&(u=E),w>c&&(c=w),S>c&&(c=S)}u++,c++;const m=new A(c,u,0);for(let f=0,y=a.length;f<y;f++){const[w,E,S]=a[f];m.set(w,E,S)}this._states=m,this._maxCharCode=u}nextState(a,u){return u<0||u>=this._maxCharCode?0:this._states.get(a,u)}}n.StateMachine=i;let d=null;function b(){return d===null&&(d=new i([[1,104,2],[1,72,2],[1,102,6],[1,70,6],[2,116,3],[2,84,3],[3,116,4],[3,84,4],[4,112,5],[4,80,5],[5,115,9],[5,83,9],[5,58,10],[6,105,7],[6,73,7],[7,108,8],[7,76,8],[8,101,9],[8,69,9],[9,58,10],[10,47,11],[11,47,12]])),d}let p=null;function h(){if(p===null){p=new M.CharacterClassifier(0);const e=` \t<>'\"\\u3001\\u3002\\uFF61\\uFF64\\uFF0C\\uFF0E\\uFF1A\\uFF1B\\u2018\\u3008\\u300C\\u300E\\u3014\\uFF08\\uFF3B\\uFF5B\\uFF62\\uFF63\\uFF5D\\uFF3D\\uFF09\\u3015\\u300F\\u300D\\u3009\\u2019\\uFF40\\uFF5E\\u2026`;for(let u=0;u<e.length;u++)p.set(e.charCodeAt(u),1);const a=\".,;:\";for(let u=0;u<a.length;u++)p.set(a.charCodeAt(u),2)}return p}class o{static _createLink(a,u,c,m,f){let y=f-1;do{const w=u.charCodeAt(y);if(a.get(w)!==2)break;y--}while(y>m);if(m>0){const w=u.charCodeAt(m-1),E=u.charCodeAt(y);(w===40&&E===41||w===91&&E===93||w===123&&E===125)&&y--}return{range:{startLineNumber:c,startColumn:m+1,endLineNumber:c,endColumn:y+2},url:u.substring(m,y+1)}}static computeLinks(a,u=b()){const c=h(),m=[];for(let f=1,y=a.getLineCount();f<=y;f++){const w=a.getLineContent(f),E=w.length;let S=0,C=0,r=0,s=1,l=!1,_=!1,g=!1,v=!1;for(;S<E;){let R=!1;const N=w.charCodeAt(S);if(s===13){let D;switch(N){case 40:l=!0,D=0;break;case 41:D=l?0:1;break;case 91:g=!0,_=!0,D=0;break;case 93:g=!1,D=_?0:1;break;case 123:v=!0,D=0;break;case 125:D=v?0:1;break;case 39:case 34:case 96:r===N?D=1:r===39||r===34||r===96?D=0:D=1;break;case 42:D=r===42?1:0;break;case 124:D=r===124?1:0;break;case 32:D=g?0:1;break;default:D=c.get(N)}D===1&&(m.push(o._createLink(c,w,f,C,S)),R=!0)}else if(s===12){let D;N===91?(_=!0,D=0):D=c.get(N),D===1?R=!0:s=13}else s=u.nextState(s,N),s===0&&(R=!0);R&&(s=1,l=!1,_=!1,v=!1,C=S+1,r=N),S++}s===13&&m.push(o._createLink(c,w,f,C,E))}return m}}n.LinkComputer=o;function L(e){return!e||typeof e.getLineCount!=\"function\"||typeof e.getLineContent!=\"function\"?[]:o.computeLinks(e)}n.computeLinks=L}),Y(X[52],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.BasicInplaceReplace=void 0;class M{constructor(){this._defaultValueSet=[[\"true\",\"false\"],[\"True\",\"False\"],[\"Private\",\"Public\",\"Friend\",\"ReadOnly\",\"Partial\",\"Protected\",\"WriteOnly\"],[\"public\",\"protected\",\"private\"]]}navigateValueSet(i,d,b,p,h){if(i&&d){const o=this.doNavigateValueSet(d,h);if(o)return{range:i,value:o}}if(b&&p){const o=this.doNavigateValueSet(p,h);if(o)return{range:b,value:o}}return null}doNavigateValueSet(i,d){const b=this.numberReplace(i,d);return b!==null?b:this.textReplace(i,d)}numberReplace(i,d){const b=Math.pow(10,i.length-(i.lastIndexOf(\".\")+1));let p=Number(i);const h=parseFloat(i);return!isNaN(p)&&!isNaN(h)&&p===h?p===0&&!d?null:(p=Math.floor(p*b),p+=d?b:-b,String(p/b)):null}textReplace(i,d){return this.valueSetsReplace(this._defaultValueSet,i,d)}valueSetsReplace(i,d,b){let p=null;for(let h=0,o=i.length;p===null&&h<o;h++)p=this.valueSetReplace(i[h],d,b);return p}valueSetReplace(i,d,b){let p=i.indexOf(d);return p>=0?(p+=b?1:-1,p<0?p=i.length-1:p%=i.length,i[p]):null}}n.BasicInplaceReplace=M,M.INSTANCE=new M}),Y(X[53],J([0,1,14]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.shouldSynchronizeModel=n.ApplyEditsResult=n.SearchData=n.ValidAnnotatedEditOperation=n.isITextSnapshot=n.FindMatch=n.TextModelResolvedOptions=n.InjectedTextCursorStops=n.MinimapPosition=n.GlyphMarginLane=n.OverviewRulerLane=void 0;var A;(function(c){c[c.Left=1]=\"Left\",c[c.Center=2]=\"Center\",c[c.Right=4]=\"Right\",c[c.Full=7]=\"Full\"})(A||(n.OverviewRulerLane=A={}));var i;(function(c){c[c.Left=1]=\"Left\",c[c.Center=2]=\"Center\",c[c.Right=3]=\"Right\"})(i||(n.GlyphMarginLane=i={}));var d;(function(c){c[c.Inline=1]=\"Inline\",c[c.Gutter=2]=\"Gutter\"})(d||(n.MinimapPosition=d={}));var b;(function(c){c[c.Both=0]=\"Both\",c[c.Right=1]=\"Right\",c[c.Left=2]=\"Left\",c[c.None=3]=\"None\"})(b||(n.InjectedTextCursorStops=b={}));class p{get originalIndentSize(){return this._indentSizeIsTabSize?\"tabSize\":this.indentSize}constructor(m){this._textModelResolvedOptionsBrand=void 0,this.tabSize=Math.max(1,m.tabSize|0),m.indentSize===\"tabSize\"?(this.indentSize=this.tabSize,this._indentSizeIsTabSize=!0):(this.indentSize=Math.max(1,m.indentSize|0),this._indentSizeIsTabSize=!1),this.insertSpaces=!!m.insertSpaces,this.defaultEOL=m.defaultEOL|0,this.trimAutoWhitespace=!!m.trimAutoWhitespace,this.bracketPairColorizationOptions=m.bracketPairColorizationOptions}equals(m){return this.tabSize===m.tabSize&&this._indentSizeIsTabSize===m._indentSizeIsTabSize&&this.indentSize===m.indentSize&&this.insertSpaces===m.insertSpaces&&this.defaultEOL===m.defaultEOL&&this.trimAutoWhitespace===m.trimAutoWhitespace&&(0,M.equals)(this.bracketPairColorizationOptions,m.bracketPairColorizationOptions)}createChangeEvent(m){return{tabSize:this.tabSize!==m.tabSize,indentSize:this.indentSize!==m.indentSize,insertSpaces:this.insertSpaces!==m.insertSpaces,trimAutoWhitespace:this.trimAutoWhitespace!==m.trimAutoWhitespace}}}n.TextModelResolvedOptions=p;class h{constructor(m,f){this._findMatchBrand=void 0,this.range=m,this.matches=f}}n.FindMatch=h;function o(c){return c&&typeof c.read==\"function\"}n.isITextSnapshot=o;class L{constructor(m,f,y,w,E,S){this.identifier=m,this.range=f,this.text=y,this.forceMoveMarkers=w,this.isAutoWhitespaceEdit=E,this._isTracked=S}}n.ValidAnnotatedEditOperation=L;class e{constructor(m,f,y){this.regex=m,this.wordSeparators=f,this.simpleSearch=y}}n.SearchData=e;class a{constructor(m,f,y){this.reverseEdits=m,this.changes=f,this.trimAutoWhitespaceLineNumbers=y}}n.ApplyEditsResult=a;function u(c){return!c.isTooLargeForSyncing()&&!c.isForSimpleWidget}n.shouldSynchronizeModel=u}),Y(X[54],J([0,1,7,26]),function(q,n,M,A){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.PrefixSumIndexOfResult=n.ConstantTimePrefixSumComputer=n.PrefixSumComputer=void 0;class i{constructor(h){this.values=h,this.prefixSum=new Uint32Array(h.length),this.prefixSumValidIndex=new Int32Array(1),this.prefixSumValidIndex[0]=-1}insertValues(h,o){h=(0,A.toUint32)(h);const L=this.values,e=this.prefixSum,a=o.length;return a===0?!1:(this.values=new Uint32Array(L.length+a),this.values.set(L.subarray(0,h),0),this.values.set(L.subarray(h),h+a),this.values.set(o,h),h-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=h-1),this.prefixSum=new Uint32Array(this.values.length),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(e.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}setValue(h,o){return h=(0,A.toUint32)(h),o=(0,A.toUint32)(o),this.values[h]===o?!1:(this.values[h]=o,h-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=h-1),!0)}removeValues(h,o){h=(0,A.toUint32)(h),o=(0,A.toUint32)(o);const L=this.values,e=this.prefixSum;if(h>=L.length)return!1;const a=L.length-h;return o>=a&&(o=a),o===0?!1:(this.values=new Uint32Array(L.length-o),this.values.set(L.subarray(0,h),0),this.values.set(L.subarray(h+o),h),this.prefixSum=new Uint32Array(this.values.length),h-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=h-1),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(e.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}getTotalSum(){return this.values.length===0?0:this._getPrefixSum(this.values.length-1)}getPrefixSum(h){return h<0?0:(h=(0,A.toUint32)(h),this._getPrefixSum(h))}_getPrefixSum(h){if(h<=this.prefixSumValidIndex[0])return this.prefixSum[h];let o=this.prefixSumValidIndex[0]+1;o===0&&(this.prefixSum[0]=this.values[0],o++),h>=this.values.length&&(h=this.values.length-1);for(let L=o;L<=h;L++)this.prefixSum[L]=this.prefixSum[L-1]+this.values[L];return this.prefixSumValidIndex[0]=Math.max(this.prefixSumValidIndex[0],h),this.prefixSum[h]}getIndexOf(h){h=Math.floor(h),this.getTotalSum();let o=0,L=this.values.length-1,e=0,a=0,u=0;for(;o<=L;)if(e=o+(L-o)/2|0,a=this.prefixSum[e],u=a-this.values[e],h<u)L=e-1;else if(h>=a)o=e+1;else break;return new b(e,h-u)}}n.PrefixSumComputer=i;class d{constructor(h){this._values=h,this._isValid=!1,this._validEndIndex=-1,this._prefixSum=[],this._indexBySum=[]}getTotalSum(){return this._ensureValid(),this._indexBySum.length}getPrefixSum(h){return this._ensureValid(),h===0?0:this._prefixSum[h-1]}getIndexOf(h){this._ensureValid();const o=this._indexBySum[h],L=o>0?this._prefixSum[o-1]:0;return new b(o,h-L)}removeValues(h,o){this._values.splice(h,o),this._invalidate(h)}insertValues(h,o){this._values=(0,M.arrayInsert)(this._values,h,o),this._invalidate(h)}_invalidate(h){this._isValid=!1,this._validEndIndex=Math.min(this._validEndIndex,h-1)}_ensureValid(){if(!this._isValid){for(let h=this._validEndIndex+1,o=this._values.length;h<o;h++){const L=this._values[h],e=h>0?this._prefixSum[h-1]:0;this._prefixSum[h]=e+L;for(let a=0;a<L;a++)this._indexBySum[e+a]=h}this._prefixSum.length=this._values.length,this._indexBySum.length=this._prefixSum[this._prefixSum.length-1],this._isValid=!0,this._validEndIndex=this._values.length-1}}setValue(h,o){this._values[h]!==o&&(this._values[h]=o,this._invalidate(h))}}n.ConstantTimePrefixSumComputer=d;class b{constructor(h,o){this.index=h,this.remainder=o,this._prefixSumIndexOfResultBrand=void 0,this.index=h,this.remainder=o}}n.PrefixSumIndexOfResult=b}),Y(X[55],J([0,1,6,4,54]),function(q,n,M,A,i){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.MirrorTextModel=void 0;class d{constructor(p,h,o,L){this._uri=p,this._lines=h,this._eol=o,this._versionId=L,this._lineStarts=null,this._cachedTextValue=null}dispose(){this._lines.length=0}get version(){return this._versionId}getText(){return this._cachedTextValue===null&&(this._cachedTextValue=this._lines.join(this._eol)),this._cachedTextValue}onEvents(p){p.eol&&p.eol!==this._eol&&(this._eol=p.eol,this._lineStarts=null);const h=p.changes;for(const o of h)this._acceptDeleteRange(o.range),this._acceptInsertText(new A.Position(o.range.startLineNumber,o.range.startColumn),o.text);this._versionId=p.versionId,this._cachedTextValue=null}_ensureLineStarts(){if(!this._lineStarts){const p=this._eol.length,h=this._lines.length,o=new Uint32Array(h);for(let L=0;L<h;L++)o[L]=this._lines[L].length+p;this._lineStarts=new i.PrefixSumComputer(o)}}_setLineText(p,h){this._lines[p]=h,this._lineStarts&&this._lineStarts.setValue(p,this._lines[p].length+this._eol.length)}_acceptDeleteRange(p){if(p.startLineNumber===p.endLineNumber){if(p.startColumn===p.endColumn)return;this._setLineText(p.startLineNumber-1,this._lines[p.startLineNumber-1].substring(0,p.startColumn-1)+this._lines[p.startLineNumber-1].substring(p.endColumn-1));return}this._setLineText(p.startLineNumber-1,this._lines[p.startLineNumber-1].substring(0,p.startColumn-1)+this._lines[p.endLineNumber-1].substring(p.endColumn-1)),this._lines.splice(p.startLineNumber,p.endLineNumber-p.startLineNumber),this._lineStarts&&this._lineStarts.removeValues(p.startLineNumber,p.endLineNumber-p.startLineNumber)}_acceptInsertText(p,h){if(h.length===0)return;const o=(0,M.splitLines)(h);if(o.length===1){this._setLineText(p.lineNumber-1,this._lines[p.lineNumber-1].substring(0,p.column-1)+o[0]+this._lines[p.lineNumber-1].substring(p.column-1));return}o[o.length-1]+=this._lines[p.lineNumber-1].substring(p.column-1),this._setLineText(p.lineNumber-1,this._lines[p.lineNumber-1].substring(0,p.column-1)+o[0]);const L=new Uint32Array(o.length-1);for(let e=1;e<o.length;e++)this._lines.splice(p.lineNumber+e-1,0,o[e]),L[e-1]=o[e].length+this._eol.length;this._lineStarts&&this._lineStarts.insertValues(p.lineNumber,L)}}n.MirrorTextModel=d}),Y(X[56],J([0,1,6,42,4,2,53]),function(q,n,M,A,i,d,b){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.Searcher=n.isValidMatch=n.TextModelSearch=n.createFindMatch=n.isMultilineRegexSource=n.SearchParams=void 0;const p=999;class h{constructor(w,E,S,C){this.searchString=w,this.isRegex=E,this.matchCase=S,this.wordSeparators=C}parseSearchRequest(){if(this.searchString===\"\")return null;let w;this.isRegex?w=o(this.searchString):w=this.searchString.indexOf(`\n`)>=0;let E=null;try{E=M.createRegExp(this.searchString,this.isRegex,{matchCase:this.matchCase,wholeWord:!1,multiline:w,global:!0,unicode:!0})}catch{return null}if(!E)return null;let S=!this.isRegex&&!w;return S&&this.searchString.toLowerCase()!==this.searchString.toUpperCase()&&(S=this.matchCase),new b.SearchData(E,this.wordSeparators?(0,A.getMapForWordSeparators)(this.wordSeparators):null,S?this.searchString:null)}}n.SearchParams=h;function o(y){if(!y||y.length===0)return!1;for(let w=0,E=y.length;w<E;w++){const S=y.charCodeAt(w);if(S===10)return!0;if(S===92){if(w++,w>=E)break;const C=y.charCodeAt(w);if(C===110||C===114||C===87)return!0}}return!1}n.isMultilineRegexSource=o;function L(y,w,E){if(!E)return new b.FindMatch(y,null);const S=[];for(let C=0,r=w.length;C<r;C++)S[C]=w[C];return new b.FindMatch(y,S)}n.createFindMatch=L;class e{constructor(w){const E=[];let S=0;for(let C=0,r=w.length;C<r;C++)w.charCodeAt(C)===10&&(E[S++]=C);this._lineFeedsOffsets=E}findLineFeedCountBeforeOffset(w){const E=this._lineFeedsOffsets;let S=0,C=E.length-1;if(C===-1||w<=E[0])return 0;for(;S<C;){const r=S+((C-S)/2>>0);E[r]>=w?C=r-1:E[r+1]>=w?(S=r,C=r):S=r+1}return S+1}}class a{static findMatches(w,E,S,C,r){const s=E.parseSearchRequest();return s?s.regex.multiline?this._doFindMatchesMultiline(w,S,new f(s.wordSeparators,s.regex),C,r):this._doFindMatchesLineByLine(w,S,s,C,r):[]}static _getMultilineMatchRange(w,E,S,C,r,s){let l,_=0;C?(_=C.findLineFeedCountBeforeOffset(r),l=E+r+_):l=E+r;let g;if(C){const D=C.findLineFeedCountBeforeOffset(r+s.length)-_;g=l+s.length+D}else g=l+s.length;const v=w.getPositionAt(l),R=w.getPositionAt(g);return new d.Range(v.lineNumber,v.column,R.lineNumber,R.column)}static _doFindMatchesMultiline(w,E,S,C,r){const s=w.getOffsetAt(E.getStartPosition()),l=w.getValueInRange(E,1),_=w.getEOL()===`\\r\n`?new e(l):null,g=[];let v=0,R;for(S.reset(0);R=S.next(l);)if(g[v++]=L(this._getMultilineMatchRange(w,s,l,_,R.index,R[0]),R,C),v>=r)return g;return g}static _doFindMatchesLineByLine(w,E,S,C,r){const s=[];let l=0;if(E.startLineNumber===E.endLineNumber){const g=w.getLineContent(E.startLineNumber).substring(E.startColumn-1,E.endColumn-1);return l=this._findMatchesInLine(S,g,E.startLineNumber,E.startColumn-1,l,s,C,r),s}const _=w.getLineContent(E.startLineNumber).substring(E.startColumn-1);l=this._findMatchesInLine(S,_,E.startLineNumber,E.startColumn-1,l,s,C,r);for(let g=E.startLineNumber+1;g<E.endLineNumber&&l<r;g++)l=this._findMatchesInLine(S,w.getLineContent(g),g,0,l,s,C,r);if(l<r){const g=w.getLineContent(E.endLineNumber).substring(0,E.endColumn-1);l=this._findMatchesInLine(S,g,E.endLineNumber,0,l,s,C,r)}return s}static _findMatchesInLine(w,E,S,C,r,s,l,_){const g=w.wordSeparators;if(!l&&w.simpleSearch){const N=w.simpleSearch,D=N.length,x=E.length;let T=-D;for(;(T=E.indexOf(N,T+D))!==-1;)if((!g||m(g,E,x,T,D))&&(s[r++]=new b.FindMatch(new d.Range(S,T+1+C,S,T+1+D+C),null),r>=_))return r;return r}const v=new f(w.wordSeparators,w.regex);let R;v.reset(0);do if(R=v.next(E),R&&(s[r++]=L(new d.Range(S,R.index+1+C,S,R.index+1+R[0].length+C),R,l),r>=_))return r;while(R);return r}static findNextMatch(w,E,S,C){const r=E.parseSearchRequest();if(!r)return null;const s=new f(r.wordSeparators,r.regex);return r.regex.multiline?this._doFindNextMatchMultiline(w,S,s,C):this._doFindNextMatchLineByLine(w,S,s,C)}static _doFindNextMatchMultiline(w,E,S,C){const r=new i.Position(E.lineNumber,1),s=w.getOffsetAt(r),l=w.getLineCount(),_=w.getValueInRange(new d.Range(r.lineNumber,r.column,l,w.getLineMaxColumn(l)),1),g=w.getEOL()===`\\r\n`?new e(_):null;S.reset(E.column-1);const v=S.next(_);return v?L(this._getMultilineMatchRange(w,s,_,g,v.index,v[0]),v,C):E.lineNumber!==1||E.column!==1?this._doFindNextMatchMultiline(w,new i.Position(1,1),S,C):null}static _doFindNextMatchLineByLine(w,E,S,C){const r=w.getLineCount(),s=E.lineNumber,l=w.getLineContent(s),_=this._findFirstMatchInLine(S,l,s,E.column,C);if(_)return _;for(let g=1;g<=r;g++){const v=(s+g-1)%r,R=w.getLineContent(v+1),N=this._findFirstMatchInLine(S,R,v+1,1,C);if(N)return N}return null}static _findFirstMatchInLine(w,E,S,C,r){w.reset(C-1);const s=w.next(E);return s?L(new d.Range(S,s.index+1,S,s.index+1+s[0].length),s,r):null}static findPreviousMatch(w,E,S,C){const r=E.parseSearchRequest();if(!r)return null;const s=new f(r.wordSeparators,r.regex);return r.regex.multiline?this._doFindPreviousMatchMultiline(w,S,s,C):this._doFindPreviousMatchLineByLine(w,S,s,C)}static _doFindPreviousMatchMultiline(w,E,S,C){const r=this._doFindMatchesMultiline(w,new d.Range(1,1,E.lineNumber,E.column),S,C,10*p);if(r.length>0)return r[r.length-1];const s=w.getLineCount();return E.lineNumber!==s||E.column!==w.getLineMaxColumn(s)?this._doFindPreviousMatchMultiline(w,new i.Position(s,w.getLineMaxColumn(s)),S,C):null}static _doFindPreviousMatchLineByLine(w,E,S,C){const r=w.getLineCount(),s=E.lineNumber,l=w.getLineContent(s).substring(0,E.column-1),_=this._findLastMatchInLine(S,l,s,C);if(_)return _;for(let g=1;g<=r;g++){const v=(r+s-g-1)%r,R=w.getLineContent(v+1),N=this._findLastMatchInLine(S,R,v+1,C);if(N)return N}return null}static _findLastMatchInLine(w,E,S,C){let r=null,s;for(w.reset(0);s=w.next(E);)r=L(new d.Range(S,s.index+1,S,s.index+1+s[0].length),s,C);return r}}n.TextModelSearch=a;function u(y,w,E,S,C){if(S===0)return!0;const r=w.charCodeAt(S-1);if(y.get(r)!==0||r===13||r===10)return!0;if(C>0){const s=w.charCodeAt(S);if(y.get(s)!==0)return!0}return!1}function c(y,w,E,S,C){if(S+C===E)return!0;const r=w.charCodeAt(S+C);if(y.get(r)!==0||r===13||r===10)return!0;if(C>0){const s=w.charCodeAt(S+C-1);if(y.get(s)!==0)return!0}return!1}function m(y,w,E,S,C){return u(y,w,E,S,C)&&c(y,w,E,S,C)}n.isValidMatch=m;class f{constructor(w,E){this._wordSeparators=w,this._searchRegex=E,this._prevMatchStartIndex=-1,this._prevMatchLength=0}reset(w){this._searchRegex.lastIndex=w,this._prevMatchStartIndex=-1,this._prevMatchLength=0}next(w){const E=w.length;let S;do{if(this._prevMatchStartIndex+this._prevMatchLength===E||(S=this._searchRegex.exec(w),!S))return null;const C=S.index,r=S[0].length;if(C===this._prevMatchStartIndex&&r===this._prevMatchLength){if(r===0){M.getNextCodePoint(w,E,this._searchRegex.lastIndex)>65535?this._searchRegex.lastIndex+=2:this._searchRegex.lastIndex+=1;continue}return null}if(this._prevMatchStartIndex=C,this._prevMatchLength=r,!this._wordSeparators||m(this._wordSeparators,w,E,C,r))return S}while(S);return null}}n.Searcher=f}),Y(X[57],J([0,1,2,56,6,12,28]),function(q,n,M,A,i,d,b){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.UnicodeTextModelHighlighter=void 0;class p{static computeUnicodeHighlights(a,u,c){const m=c?c.startLineNumber:1,f=c?c.endLineNumber:a.getLineCount(),y=new o(u),w=y.getCandidateCodePoints();let E;w===\"allNonBasicAscii\"?E=new RegExp(\"[^\\\\t\\\\n\\\\r\\\\x20-\\\\x7E]\",\"g\"):E=new RegExp(`${h(Array.from(w))}`,\"g\");const S=new A.Searcher(null,E),C=[];let r=!1,s,l=0,_=0,g=0;e:for(let v=m,R=f;v<=R;v++){const N=a.getLineContent(v),D=N.length;S.reset(0);do if(s=S.next(N),s){let x=s.index,T=s.index+s[0].length;if(x>0){const k=N.charCodeAt(x-1);i.isHighSurrogate(k)&&x--}if(T+1<D){const k=N.charCodeAt(T-1);i.isHighSurrogate(k)&&T++}const F=N.substring(x,T);let B=(0,b.getWordAtText)(x+1,b.DEFAULT_WORD_REGEXP,N,0);B&&B.endColumn<=x+1&&(B=null);const V=y.shouldHighlightNonBasicASCII(F,B?B.word:null);if(V!==0){V===3?l++:V===2?_++:V===1?g++:(0,d.assertNever)(V);const k=1e3;if(C.length>=k){r=!0;break e}C.push(new M.Range(v,x+1,v,T+1))}}while(s)}return{ranges:C,hasMore:r,ambiguousCharacterCount:l,invisibleCharacterCount:_,nonBasicAsciiCharacterCount:g}}static computeUnicodeHighlightReason(a,u){const c=new o(u);switch(c.shouldHighlightNonBasicASCII(a,null)){case 0:return null;case 2:return{kind:1};case 3:{const f=a.codePointAt(0),y=c.ambiguousCharacters.getPrimaryConfusable(f),w=i.AmbiguousCharacters.getLocales().filter(E=>!i.AmbiguousCharacters.getInstance(new Set([...u.allowedLocales,E])).isAmbiguous(f));return{kind:0,confusableWith:String.fromCodePoint(y),notAmbiguousInLocales:w}}case 1:return{kind:2}}}}n.UnicodeTextModelHighlighter=p;function h(e,a){return`[${i.escapeRegExpCharacters(e.map(c=>String.fromCodePoint(c)).join(\"\"))}]`}class o{constructor(a){this.options=a,this.allowedCodePoints=new Set(a.allowedCodePoints),this.ambiguousCharacters=i.AmbiguousCharacters.getInstance(new Set(a.allowedLocales))}getCandidateCodePoints(){if(this.options.nonBasicASCII)return\"allNonBasicAscii\";const a=new Set;if(this.options.invisibleCharacters)for(const u of i.InvisibleCharacters.codePoints)L(String.fromCodePoint(u))||a.add(u);if(this.options.ambiguousCharacters)for(const u of this.ambiguousCharacters.getConfusableCodePoints())a.add(u);for(const u of this.allowedCodePoints)a.delete(u);return a}shouldHighlightNonBasicASCII(a,u){const c=a.codePointAt(0);if(this.allowedCodePoints.has(c))return 0;if(this.options.nonBasicASCII)return 1;let m=!1,f=!1;if(u)for(const y of u){const w=y.codePointAt(0),E=i.isBasicASCII(y);m=m||E,!E&&!this.ambiguousCharacters.isAmbiguous(w)&&!i.InvisibleCharacters.isInvisibleCharacter(w)&&(f=!0)}return!m&&f?0:this.options.invisibleCharacters&&!L(a)&&i.InvisibleCharacters.isInvisibleCharacter(c)?2:this.options.ambiguousCharacters&&this.ambiguousCharacters.isAmbiguous(c)?3:0}}function L(e){return e===\" \"||e===`\n`||e===\"\t\"}}),Y(X[58],J([0,1]),function(q,n){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.WrappingIndent=n.TrackedRangeStickiness=n.TextEditorCursorStyle=n.TextEditorCursorBlinkingStyle=n.SymbolTag=n.SymbolKind=n.SignatureHelpTriggerKind=n.ShowLightbulbIconMode=n.SelectionDirection=n.ScrollbarVisibility=n.ScrollType=n.RenderMinimap=n.RenderLineNumbersType=n.PositionAffinity=n.OverviewRulerLane=n.OverlayWidgetPositionPreference=n.MouseTargetType=n.MinimapPosition=n.MarkerTag=n.MarkerSeverity=n.KeyCode=n.InlineCompletionTriggerKind=n.InlayHintKind=n.InjectedTextCursorStops=n.IndentAction=n.GlyphMarginLane=n.EndOfLineSequence=n.EndOfLinePreference=n.EditorOption=n.EditorAutoIndentStrategy=n.DocumentHighlightKind=n.DefaultEndOfLine=n.CursorChangeReason=n.ContentWidgetPositionPreference=n.CompletionTriggerKind=n.CompletionItemTag=n.CompletionItemKind=n.CompletionItemInsertTextRule=n.CodeActionTriggerType=n.AccessibilitySupport=void 0;var M;(function(t){t[t.Unknown=0]=\"Unknown\",t[t.Disabled=1]=\"Disabled\",t[t.Enabled=2]=\"Enabled\"})(M||(n.AccessibilitySupport=M={}));var A;(function(t){t[t.Invoke=1]=\"Invoke\",t[t.Auto=2]=\"Auto\"})(A||(n.CodeActionTriggerType=A={}));var i;(function(t){t[t.None=0]=\"None\",t[t.KeepWhitespace=1]=\"KeepWhitespace\",t[t.InsertAsSnippet=4]=\"InsertAsSnippet\"})(i||(n.CompletionItemInsertTextRule=i={}));var d;(function(t){t[t.Method=0]=\"Method\",t[t.Function=1]=\"Function\",t[t.Constructor=2]=\"Constructor\",t[t.Field=3]=\"Field\",t[t.Variable=4]=\"Variable\",t[t.Class=5]=\"Class\",t[t.Struct=6]=\"Struct\",t[t.Interface=7]=\"Interface\",t[t.Module=8]=\"Module\",t[t.Property=9]=\"Property\",t[t.Event=10]=\"Event\",t[t.Operator=11]=\"Operator\",t[t.Unit=12]=\"Unit\",t[t.Value=13]=\"Value\",t[t.Constant=14]=\"Constant\",t[t.Enum=15]=\"Enum\",t[t.EnumMember=16]=\"EnumMember\",t[t.Keyword=17]=\"Keyword\",t[t.Text=18]=\"Text\",t[t.Color=19]=\"Color\",t[t.File=20]=\"File\",t[t.Reference=21]=\"Reference\",t[t.Customcolor=22]=\"Customcolor\",t[t.Folder=23]=\"Folder\",t[t.TypeParameter=24]=\"TypeParameter\",t[t.User=25]=\"User\",t[t.Issue=26]=\"Issue\",t[t.Snippet=27]=\"Snippet\"})(d||(n.CompletionItemKind=d={}));var b;(function(t){t[t.Deprecated=1]=\"Deprecated\"})(b||(n.CompletionItemTag=b={}));var p;(function(t){t[t.Invoke=0]=\"Invoke\",t[t.TriggerCharacter=1]=\"TriggerCharacter\",t[t.TriggerForIncompleteCompletions=2]=\"TriggerForIncompleteCompletions\"})(p||(n.CompletionTriggerKind=p={}));var h;(function(t){t[t.EXACT=0]=\"EXACT\",t[t.ABOVE=1]=\"ABOVE\",t[t.BELOW=2]=\"BELOW\"})(h||(n.ContentWidgetPositionPreference=h={}));var o;(function(t){t[t.NotSet=0]=\"NotSet\",t[t.ContentFlush=1]=\"ContentFlush\",t[t.RecoverFromMarkers=2]=\"RecoverFromMarkers\",t[t.Explicit=3]=\"Explicit\",t[t.Paste=4]=\"Paste\",t[t.Undo=5]=\"Undo\",t[t.Redo=6]=\"Redo\"})(o||(n.CursorChangeReason=o={}));var L;(function(t){t[t.LF=1]=\"LF\",t[t.CRLF=2]=\"CRLF\"})(L||(n.DefaultEndOfLine=L={}));var e;(function(t){t[t.Text=0]=\"Text\",t[t.Read=1]=\"Read\",t[t.Write=2]=\"Write\"})(e||(n.DocumentHighlightKind=e={}));var a;(function(t){t[t.None=0]=\"None\",t[t.Keep=1]=\"Keep\",t[t.Brackets=2]=\"Brackets\",t[t.Advanced=3]=\"Advanced\",t[t.Full=4]=\"Full\"})(a||(n.EditorAutoIndentStrategy=a={}));var u;(function(t){t[t.acceptSuggestionOnCommitCharacter=0]=\"acceptSuggestionOnCommitCharacter\",t[t.acceptSuggestionOnEnter=1]=\"acceptSuggestionOnEnter\",t[t.accessibilitySupport=2]=\"accessibilitySupport\",t[t.accessibilityPageSize=3]=\"accessibilityPageSize\",t[t.ariaLabel=4]=\"ariaLabel\",t[t.ariaRequired=5]=\"ariaRequired\",t[t.autoClosingBrackets=6]=\"autoClosingBrackets\",t[t.autoClosingComments=7]=\"autoClosingComments\",t[t.screenReaderAnnounceInlineSuggestion=8]=\"screenReaderAnnounceInlineSuggestion\",t[t.autoClosingDelete=9]=\"autoClosingDelete\",t[t.autoClosingOvertype=10]=\"autoClosingOvertype\",t[t.autoClosingQuotes=11]=\"autoClosingQuotes\",t[t.autoIndent=12]=\"autoIndent\",t[t.automaticLayout=13]=\"automaticLayout\",t[t.autoSurround=14]=\"autoSurround\",t[t.bracketPairColorization=15]=\"bracketPairColorization\",t[t.guides=16]=\"guides\",t[t.codeLens=17]=\"codeLens\",t[t.codeLensFontFamily=18]=\"codeLensFontFamily\",t[t.codeLensFontSize=19]=\"codeLensFontSize\",t[t.colorDecorators=20]=\"colorDecorators\",t[t.colorDecoratorsLimit=21]=\"colorDecoratorsLimit\",t[t.columnSelection=22]=\"columnSelection\",t[t.comments=23]=\"comments\",t[t.contextmenu=24]=\"contextmenu\",t[t.copyWithSyntaxHighlighting=25]=\"copyWithSyntaxHighlighting\",t[t.cursorBlinking=26]=\"cursorBlinking\",t[t.cursorSmoothCaretAnimation=27]=\"cursorSmoothCaretAnimation\",t[t.cursorStyle=28]=\"cursorStyle\",t[t.cursorSurroundingLines=29]=\"cursorSurroundingLines\",t[t.cursorSurroundingLinesStyle=30]=\"cursorSurroundingLinesStyle\",t[t.cursorWidth=31]=\"cursorWidth\",t[t.disableLayerHinting=32]=\"disableLayerHinting\",t[t.disableMonospaceOptimizations=33]=\"disableMonospaceOptimizations\",t[t.domReadOnly=34]=\"domReadOnly\",t[t.dragAndDrop=35]=\"dragAndDrop\",t[t.dropIntoEditor=36]=\"dropIntoEditor\",t[t.emptySelectionClipboard=37]=\"emptySelectionClipboard\",t[t.experimentalWhitespaceRendering=38]=\"experimentalWhitespaceRendering\",t[t.extraEditorClassName=39]=\"extraEditorClassName\",t[t.fastScrollSensitivity=40]=\"fastScrollSensitivity\",t[t.find=41]=\"find\",t[t.fixedOverflowWidgets=42]=\"fixedOverflowWidgets\",t[t.folding=43]=\"folding\",t[t.foldingStrategy=44]=\"foldingStrategy\",t[t.foldingHighlight=45]=\"foldingHighlight\",t[t.foldingImportsByDefault=46]=\"foldingImportsByDefault\",t[t.foldingMaximumRegions=47]=\"foldingMaximumRegions\",t[t.unfoldOnClickAfterEndOfLine=48]=\"unfoldOnClickAfterEndOfLine\",t[t.fontFamily=49]=\"fontFamily\",t[t.fontInfo=50]=\"fontInfo\",t[t.fontLigatures=51]=\"fontLigatures\",t[t.fontSize=52]=\"fontSize\",t[t.fontWeight=53]=\"fontWeight\",t[t.fontVariations=54]=\"fontVariations\",t[t.formatOnPaste=55]=\"formatOnPaste\",t[t.formatOnType=56]=\"formatOnType\",t[t.glyphMargin=57]=\"glyphMargin\",t[t.gotoLocation=58]=\"gotoLocation\",t[t.hideCursorInOverviewRuler=59]=\"hideCursorInOverviewRuler\",t[t.hover=60]=\"hover\",t[t.inDiffEditor=61]=\"inDiffEditor\",t[t.inlineSuggest=62]=\"inlineSuggest\",t[t.letterSpacing=63]=\"letterSpacing\",t[t.lightbulb=64]=\"lightbulb\",t[t.lineDecorationsWidth=65]=\"lineDecorationsWidth\",t[t.lineHeight=66]=\"lineHeight\",t[t.lineNumbers=67]=\"lineNumbers\",t[t.lineNumbersMinChars=68]=\"lineNumbersMinChars\",t[t.linkedEditing=69]=\"linkedEditing\",t[t.links=70]=\"links\",t[t.matchBrackets=71]=\"matchBrackets\",t[t.minimap=72]=\"minimap\",t[t.mouseStyle=73]=\"mouseStyle\",t[t.mouseWheelScrollSensitivity=74]=\"mouseWheelScrollSensitivity\",t[t.mouseWheelZoom=75]=\"mouseWheelZoom\",t[t.multiCursorMergeOverlapping=76]=\"multiCursorMergeOverlapping\",t[t.multiCursorModifier=77]=\"multiCursorModifier\",t[t.multiCursorPaste=78]=\"multiCursorPaste\",t[t.multiCursorLimit=79]=\"multiCursorLimit\",t[t.occurrencesHighlight=80]=\"occurrencesHighlight\",t[t.overviewRulerBorder=81]=\"overviewRulerBorder\",t[t.overviewRulerLanes=82]=\"overviewRulerLanes\",t[t.padding=83]=\"padding\",t[t.pasteAs=84]=\"pasteAs\",t[t.parameterHints=85]=\"parameterHints\",t[t.peekWidgetDefaultFocus=86]=\"peekWidgetDefaultFocus\",t[t.definitionLinkOpensInPeek=87]=\"definitionLinkOpensInPeek\",t[t.quickSuggestions=88]=\"quickSuggestions\",t[t.quickSuggestionsDelay=89]=\"quickSuggestionsDelay\",t[t.readOnly=90]=\"readOnly\",t[t.readOnlyMessage=91]=\"readOnlyMessage\",t[t.renameOnType=92]=\"renameOnType\",t[t.renderControlCharacters=93]=\"renderControlCharacters\",t[t.renderFinalNewline=94]=\"renderFinalNewline\",t[t.renderLineHighlight=95]=\"renderLineHighlight\",t[t.renderLineHighlightOnlyWhenFocus=96]=\"renderLineHighlightOnlyWhenFocus\",t[t.renderValidationDecorations=97]=\"renderValidationDecorations\",t[t.renderWhitespace=98]=\"renderWhitespace\",t[t.revealHorizontalRightPadding=99]=\"revealHorizontalRightPadding\",t[t.roundedSelection=100]=\"roundedSelection\",t[t.rulers=101]=\"rulers\",t[t.scrollbar=102]=\"scrollbar\",t[t.scrollBeyondLastColumn=103]=\"scrollBeyondLastColumn\",t[t.scrollBeyondLastLine=104]=\"scrollBeyondLastLine\",t[t.scrollPredominantAxis=105]=\"scrollPredominantAxis\",t[t.selectionClipboard=106]=\"selectionClipboard\",t[t.selectionHighlight=107]=\"selectionHighlight\",t[t.selectOnLineNumbers=108]=\"selectOnLineNumbers\",t[t.showFoldingControls=109]=\"showFoldingControls\",t[t.showUnused=110]=\"showUnused\",t[t.snippetSuggestions=111]=\"snippetSuggestions\",t[t.smartSelect=112]=\"smartSelect\",t[t.smoothScrolling=113]=\"smoothScrolling\",t[t.stickyScroll=114]=\"stickyScroll\",t[t.stickyTabStops=115]=\"stickyTabStops\",t[t.stopRenderingLineAfter=116]=\"stopRenderingLineAfter\",t[t.suggest=117]=\"suggest\",t[t.suggestFontSize=118]=\"suggestFontSize\",t[t.suggestLineHeight=119]=\"suggestLineHeight\",t[t.suggestOnTriggerCharacters=120]=\"suggestOnTriggerCharacters\",t[t.suggestSelection=121]=\"suggestSelection\",t[t.tabCompletion=122]=\"tabCompletion\",t[t.tabIndex=123]=\"tabIndex\",t[t.unicodeHighlighting=124]=\"unicodeHighlighting\",t[t.unusualLineTerminators=125]=\"unusualLineTerminators\",t[t.useShadowDOM=126]=\"useShadowDOM\",t[t.useTabStops=127]=\"useTabStops\",t[t.wordBreak=128]=\"wordBreak\",t[t.wordSeparators=129]=\"wordSeparators\",t[t.wordWrap=130]=\"wordWrap\",t[t.wordWrapBreakAfterCharacters=131]=\"wordWrapBreakAfterCharacters\",t[t.wordWrapBreakBeforeCharacters=132]=\"wordWrapBreakBeforeCharacters\",t[t.wordWrapColumn=133]=\"wordWrapColumn\",t[t.wordWrapOverride1=134]=\"wordWrapOverride1\",t[t.wordWrapOverride2=135]=\"wordWrapOverride2\",t[t.wrappingIndent=136]=\"wrappingIndent\",t[t.wrappingStrategy=137]=\"wrappingStrategy\",t[t.showDeprecated=138]=\"showDeprecated\",t[t.inlayHints=139]=\"inlayHints\",t[t.editorClassName=140]=\"editorClassName\",t[t.pixelRatio=141]=\"pixelRatio\",t[t.tabFocusMode=142]=\"tabFocusMode\",t[t.layoutInfo=143]=\"layoutInfo\",t[t.wrappingInfo=144]=\"wrappingInfo\",t[t.defaultColorDecorators=145]=\"defaultColorDecorators\",t[t.colorDecoratorsActivatedOn=146]=\"colorDecoratorsActivatedOn\",t[t.inlineCompletionsAccessibilityVerbose=147]=\"inlineCompletionsAccessibilityVerbose\"})(u||(n.EditorOption=u={}));var c;(function(t){t[t.TextDefined=0]=\"TextDefined\",t[t.LF=1]=\"LF\",t[t.CRLF=2]=\"CRLF\"})(c||(n.EndOfLinePreference=c={}));var m;(function(t){t[t.LF=0]=\"LF\",t[t.CRLF=1]=\"CRLF\"})(m||(n.EndOfLineSequence=m={}));var f;(function(t){t[t.Left=1]=\"Left\",t[t.Center=2]=\"Center\",t[t.Right=3]=\"Right\"})(f||(n.GlyphMarginLane=f={}));var y;(function(t){t[t.None=0]=\"None\",t[t.Indent=1]=\"Indent\",t[t.IndentOutdent=2]=\"IndentOutdent\",t[t.Outdent=3]=\"Outdent\"})(y||(n.IndentAction=y={}));var w;(function(t){t[t.Both=0]=\"Both\",t[t.Right=1]=\"Right\",t[t.Left=2]=\"Left\",t[t.None=3]=\"None\"})(w||(n.InjectedTextCursorStops=w={}));var E;(function(t){t[t.Type=1]=\"Type\",t[t.Parameter=2]=\"Parameter\"})(E||(n.InlayHintKind=E={}));var S;(function(t){t[t.Automatic=0]=\"Automatic\",t[t.Explicit=1]=\"Explicit\"})(S||(n.InlineCompletionTriggerKind=S={}));var C;(function(t){t[t.DependsOnKbLayout=-1]=\"DependsOnKbLayout\",t[t.Unknown=0]=\"Unknown\",t[t.Backspace=1]=\"Backspace\",t[t.Tab=2]=\"Tab\",t[t.Enter=3]=\"Enter\",t[t.Shift=4]=\"Shift\",t[t.Ctrl=5]=\"Ctrl\",t[t.Alt=6]=\"Alt\",t[t.PauseBreak=7]=\"PauseBreak\",t[t.CapsLock=8]=\"CapsLock\",t[t.Escape=9]=\"Escape\",t[t.Space=10]=\"Space\",t[t.PageUp=11]=\"PageUp\",t[t.PageDown=12]=\"PageDown\",t[t.End=13]=\"End\",t[t.Home=14]=\"Home\",t[t.LeftArrow=15]=\"LeftArrow\",t[t.UpArrow=16]=\"UpArrow\",t[t.RightArrow=17]=\"RightArrow\",t[t.DownArrow=18]=\"DownArrow\",t[t.Insert=19]=\"Insert\",t[t.Delete=20]=\"Delete\",t[t.Digit0=21]=\"Digit0\",t[t.Digit1=22]=\"Digit1\",t[t.Digit2=23]=\"Digit2\",t[t.Digit3=24]=\"Digit3\",t[t.Digit4=25]=\"Digit4\",t[t.Digit5=26]=\"Digit5\",t[t.Digit6=27]=\"Digit6\",t[t.Digit7=28]=\"Digit7\",t[t.Digit8=29]=\"Digit8\",t[t.Digit9=30]=\"Digit9\",t[t.KeyA=31]=\"KeyA\",t[t.KeyB=32]=\"KeyB\",t[t.KeyC=33]=\"KeyC\",t[t.KeyD=34]=\"KeyD\",t[t.KeyE=35]=\"KeyE\",t[t.KeyF=36]=\"KeyF\",t[t.KeyG=37]=\"KeyG\",t[t.KeyH=38]=\"KeyH\",t[t.KeyI=39]=\"KeyI\",t[t.KeyJ=40]=\"KeyJ\",t[t.KeyK=41]=\"KeyK\",t[t.KeyL=42]=\"KeyL\",t[t.KeyM=43]=\"KeyM\",t[t.KeyN=44]=\"KeyN\",t[t.KeyO=45]=\"KeyO\",t[t.KeyP=46]=\"KeyP\",t[t.KeyQ=47]=\"KeyQ\",t[t.KeyR=48]=\"KeyR\",t[t.KeyS=49]=\"KeyS\",t[t.KeyT=50]=\"KeyT\",t[t.KeyU=51]=\"KeyU\",t[t.KeyV=52]=\"KeyV\",t[t.KeyW=53]=\"KeyW\",t[t.KeyX=54]=\"KeyX\",t[t.KeyY=55]=\"KeyY\",t[t.KeyZ=56]=\"KeyZ\",t[t.Meta=57]=\"Meta\",t[t.ContextMenu=58]=\"ContextMenu\",t[t.F1=59]=\"F1\",t[t.F2=60]=\"F2\",t[t.F3=61]=\"F3\",t[t.F4=62]=\"F4\",t[t.F5=63]=\"F5\",t[t.F6=64]=\"F6\",t[t.F7=65]=\"F7\",t[t.F8=66]=\"F8\",t[t.F9=67]=\"F9\",t[t.F10=68]=\"F10\",t[t.F11=69]=\"F11\",t[t.F12=70]=\"F12\",t[t.F13=71]=\"F13\",t[t.F14=72]=\"F14\",t[t.F15=73]=\"F15\",t[t.F16=74]=\"F16\",t[t.F17=75]=\"F17\",t[t.F18=76]=\"F18\",t[t.F19=77]=\"F19\",t[t.F20=78]=\"F20\",t[t.F21=79]=\"F21\",t[t.F22=80]=\"F22\",t[t.F23=81]=\"F23\",t[t.F24=82]=\"F24\",t[t.NumLock=83]=\"NumLock\",t[t.ScrollLock=84]=\"ScrollLock\",t[t.Semicolon=85]=\"Semicolon\",t[t.Equal=86]=\"Equal\",t[t.Comma=87]=\"Comma\",t[t.Minus=88]=\"Minus\",t[t.Period=89]=\"Period\",t[t.Slash=90]=\"Slash\",t[t.Backquote=91]=\"Backquote\",t[t.BracketLeft=92]=\"BracketLeft\",t[t.Backslash=93]=\"Backslash\",t[t.BracketRight=94]=\"BracketRight\",t[t.Quote=95]=\"Quote\",t[t.OEM_8=96]=\"OEM_8\",t[t.IntlBackslash=97]=\"IntlBackslash\",t[t.Numpad0=98]=\"Numpad0\",t[t.Numpad1=99]=\"Numpad1\",t[t.Numpad2=100]=\"Numpad2\",t[t.Numpad3=101]=\"Numpad3\",t[t.Numpad4=102]=\"Numpad4\",t[t.Numpad5=103]=\"Numpad5\",t[t.Numpad6=104]=\"Numpad6\",t[t.Numpad7=105]=\"Numpad7\",t[t.Numpad8=106]=\"Numpad8\",t[t.Numpad9=107]=\"Numpad9\",t[t.NumpadMultiply=108]=\"NumpadMultiply\",t[t.NumpadAdd=109]=\"NumpadAdd\",t[t.NUMPAD_SEPARATOR=110]=\"NUMPAD_SEPARATOR\",t[t.NumpadSubtract=111]=\"NumpadSubtract\",t[t.NumpadDecimal=112]=\"NumpadDecimal\",t[t.NumpadDivide=113]=\"NumpadDivide\",t[t.KEY_IN_COMPOSITION=114]=\"KEY_IN_COMPOSITION\",t[t.ABNT_C1=115]=\"ABNT_C1\",t[t.ABNT_C2=116]=\"ABNT_C2\",t[t.AudioVolumeMute=117]=\"AudioVolumeMute\",t[t.AudioVolumeUp=118]=\"AudioVolumeUp\",t[t.AudioVolumeDown=119]=\"AudioVolumeDown\",t[t.BrowserSearch=120]=\"BrowserSearch\",t[t.BrowserHome=121]=\"BrowserHome\",t[t.BrowserBack=122]=\"BrowserBack\",t[t.BrowserForward=123]=\"BrowserForward\",t[t.MediaTrackNext=124]=\"MediaTrackNext\",t[t.MediaTrackPrevious=125]=\"MediaTrackPrevious\",t[t.MediaStop=126]=\"MediaStop\",t[t.MediaPlayPause=127]=\"MediaPlayPause\",t[t.LaunchMediaPlayer=128]=\"LaunchMediaPlayer\",t[t.LaunchMail=129]=\"LaunchMail\",t[t.LaunchApp2=130]=\"LaunchApp2\",t[t.Clear=131]=\"Clear\",t[t.MAX_VALUE=132]=\"MAX_VALUE\"})(C||(n.KeyCode=C={}));var r;(function(t){t[t.Hint=1]=\"Hint\",t[t.Info=2]=\"Info\",t[t.Warning=4]=\"Warning\",t[t.Error=8]=\"Error\"})(r||(n.MarkerSeverity=r={}));var s;(function(t){t[t.Unnecessary=1]=\"Unnecessary\",t[t.Deprecated=2]=\"Deprecated\"})(s||(n.MarkerTag=s={}));var l;(function(t){t[t.Inline=1]=\"Inline\",t[t.Gutter=2]=\"Gutter\"})(l||(n.MinimapPosition=l={}));var _;(function(t){t[t.UNKNOWN=0]=\"UNKNOWN\",t[t.TEXTAREA=1]=\"TEXTAREA\",t[t.GUTTER_GLYPH_MARGIN=2]=\"GUTTER_GLYPH_MARGIN\",t[t.GUTTER_LINE_NUMBERS=3]=\"GUTTER_LINE_NUMBERS\",t[t.GUTTER_LINE_DECORATIONS=4]=\"GUTTER_LINE_DECORATIONS\",t[t.GUTTER_VIEW_ZONE=5]=\"GUTTER_VIEW_ZONE\",t[t.CONTENT_TEXT=6]=\"CONTENT_TEXT\",t[t.CONTENT_EMPTY=7]=\"CONTENT_EMPTY\",t[t.CONTENT_VIEW_ZONE=8]=\"CONTENT_VIEW_ZONE\",t[t.CONTENT_WIDGET=9]=\"CONTENT_WIDGET\",t[t.OVERVIEW_RULER=10]=\"OVERVIEW_RULER\",t[t.SCROLLBAR=11]=\"SCROLLBAR\",t[t.OVERLAY_WIDGET=12]=\"OVERLAY_WIDGET\",t[t.OUTSIDE_EDITOR=13]=\"OUTSIDE_EDITOR\"})(_||(n.MouseTargetType=_={}));var g;(function(t){t[t.TOP_RIGHT_CORNER=0]=\"TOP_RIGHT_CORNER\",t[t.BOTTOM_RIGHT_CORNER=1]=\"BOTTOM_RIGHT_CORNER\",t[t.TOP_CENTER=2]=\"TOP_CENTER\"})(g||(n.OverlayWidgetPositionPreference=g={}));var v;(function(t){t[t.Left=1]=\"Left\",t[t.Center=2]=\"Center\",t[t.Right=4]=\"Right\",t[t.Full=7]=\"Full\"})(v||(n.OverviewRulerLane=v={}));var R;(function(t){t[t.Left=0]=\"Left\",t[t.Right=1]=\"Right\",t[t.None=2]=\"None\",t[t.LeftOfInjectedText=3]=\"LeftOfInjectedText\",t[t.RightOfInjectedText=4]=\"RightOfInjectedText\"})(R||(n.PositionAffinity=R={}));var N;(function(t){t[t.Off=0]=\"Off\",t[t.On=1]=\"On\",t[t.Relative=2]=\"Relative\",t[t.Interval=3]=\"Interval\",t[t.Custom=4]=\"Custom\"})(N||(n.RenderLineNumbersType=N={}));var D;(function(t){t[t.None=0]=\"None\",t[t.Text=1]=\"Text\",t[t.Blocks=2]=\"Blocks\"})(D||(n.RenderMinimap=D={}));var x;(function(t){t[t.Smooth=0]=\"Smooth\",t[t.Immediate=1]=\"Immediate\"})(x||(n.ScrollType=x={}));var T;(function(t){t[t.Auto=1]=\"Auto\",t[t.Hidden=2]=\"Hidden\",t[t.Visible=3]=\"Visible\"})(T||(n.ScrollbarVisibility=T={}));var F;(function(t){t[t.LTR=0]=\"LTR\",t[t.RTL=1]=\"RTL\"})(F||(n.SelectionDirection=F={}));var B;(function(t){t.Off=\"off\",t.OnCode=\"onCode\",t.On=\"on\"})(B||(n.ShowLightbulbIconMode=B={}));var V;(function(t){t[t.Invoke=1]=\"Invoke\",t[t.TriggerCharacter=2]=\"TriggerCharacter\",t[t.ContentChange=3]=\"ContentChange\"})(V||(n.SignatureHelpTriggerKind=V={}));var k;(function(t){t[t.File=0]=\"File\",t[t.Module=1]=\"Module\",t[t.Namespace=2]=\"Namespace\",t[t.Package=3]=\"Package\",t[t.Class=4]=\"Class\",t[t.Method=5]=\"Method\",t[t.Property=6]=\"Property\",t[t.Field=7]=\"Field\",t[t.Constructor=8]=\"Constructor\",t[t.Enum=9]=\"Enum\",t[t.Interface=10]=\"Interface\",t[t.Function=11]=\"Function\",t[t.Variable=12]=\"Variable\",t[t.Constant=13]=\"Constant\",t[t.String=14]=\"String\",t[t.Number=15]=\"Number\",t[t.Boolean=16]=\"Boolean\",t[t.Array=17]=\"Array\",t[t.Object=18]=\"Object\",t[t.Key=19]=\"Key\",t[t.Null=20]=\"Null\",t[t.EnumMember=21]=\"EnumMember\",t[t.Struct=22]=\"Struct\",t[t.Event=23]=\"Event\",t[t.Operator=24]=\"Operator\",t[t.TypeParameter=25]=\"TypeParameter\"})(k||(n.SymbolKind=k={}));var O;(function(t){t[t.Deprecated=1]=\"Deprecated\"})(O||(n.SymbolTag=O={}));var I;(function(t){t[t.Hidden=0]=\"Hidden\",t[t.Blink=1]=\"Blink\",t[t.Smooth=2]=\"Smooth\",t[t.Phase=3]=\"Phase\",t[t.Expand=4]=\"Expand\",t[t.Solid=5]=\"Solid\"})(I||(n.TextEditorCursorBlinkingStyle=I={}));var W;(function(t){t[t.Line=1]=\"Line\",t[t.Block=2]=\"Block\",t[t.Underline=3]=\"Underline\",t[t.LineThin=4]=\"LineThin\",t[t.BlockOutline=5]=\"BlockOutline\",t[t.UnderlineThin=6]=\"UnderlineThin\"})(W||(n.TextEditorCursorStyle=W={}));var z;(function(t){t[t.AlwaysGrowsWhenTypingAtEdges=0]=\"AlwaysGrowsWhenTypingAtEdges\",t[t.NeverGrowsWhenTypingAtEdges=1]=\"NeverGrowsWhenTypingAtEdges\",t[t.GrowsOnlyWhenTypingBefore=2]=\"GrowsOnlyWhenTypingBefore\",t[t.GrowsOnlyWhenTypingAfter=3]=\"GrowsOnlyWhenTypingAfter\"})(z||(n.TrackedRangeStickiness=z={}));var G;(function(t){t[t.None=0]=\"None\",t[t.Same=1]=\"Same\",t[t.Indent=2]=\"Indent\",t[t.DeepIndent=3]=\"DeepIndent\"})(G||(n.WrappingIndent=G={}))}),Y(X[59],J([0,1,9,13]),function(q,n,M,A){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.TokenizationRegistry=void 0;class i{constructor(){this._tokenizationSupports=new Map,this._factories=new Map,this._onDidChange=new M.Emitter,this.onDidChange=this._onDidChange.event,this._colorMap=null}handleChange(p){this._onDidChange.fire({changedLanguages:p,changedColorMap:!1})}register(p,h){return this._tokenizationSupports.set(p,h),this.handleChange([p]),(0,A.toDisposable)(()=>{this._tokenizationSupports.get(p)===h&&(this._tokenizationSupports.delete(p),this.handleChange([p]))})}get(p){return this._tokenizationSupports.get(p)||null}registerFactory(p,h){var o;(o=this._factories.get(p))===null||o===void 0||o.dispose();const L=new d(this,p,h);return this._factories.set(p,L),(0,A.toDisposable)(()=>{const e=this._factories.get(p);!e||e!==L||(this._factories.delete(p),e.dispose())})}async getOrCreate(p){const h=this.get(p);if(h)return h;const o=this._factories.get(p);return!o||o.isResolved?null:(await o.resolve(),this.get(p))}isResolved(p){if(this.get(p))return!0;const o=this._factories.get(p);return!!(!o||o.isResolved)}setColorMap(p){this._colorMap=p,this._onDidChange.fire({changedLanguages:Array.from(this._tokenizationSupports.keys()),changedColorMap:!0})}getColorMap(){return this._colorMap}getDefaultBackground(){return this._colorMap&&this._colorMap.length>2?this._colorMap[2]:null}}n.TokenizationRegistry=i;class d extends A.Disposable{get isResolved(){return this._isResolved}constructor(p,h,o){super(),this._registry=p,this._languageId=h,this._factory=o,this._isDisposed=!1,this._resolvePromise=null,this._isResolved=!1}dispose(){this._isDisposed=!0,super.dispose()}async resolve(){return this._resolvePromise||(this._resolvePromise=this._create()),this._resolvePromise}async _create(){const p=await this._factory.tokenizationSupport;this._isResolved=!0,p&&!this._isDisposed&&this._register(this._registry.register(this._languageId,p))}}}),Y(X[60],J([19,61]),function(q,n){return q.create(\"vs/base/common/platform\",n)}),Y(X[17],J([0,1,60]),function(q,n,M){\"use strict\";var A;Object.defineProperty(n,\"__esModule\",{value:!0}),n.isAndroid=n.isEdge=n.isSafari=n.isFirefox=n.isChrome=n.isLittleEndian=n.OS=n.setTimeout0=n.setTimeout0IsFaster=n.language=n.userAgent=n.isMobile=n.isIOS=n.webWorkerOrigin=n.isWebWorker=n.isWeb=n.isNative=n.isLinux=n.isMacintosh=n.isWindows=n.LANGUAGE_DEFAULT=void 0,n.LANGUAGE_DEFAULT=\"en\";let i=!1,d=!1,b=!1,p=!1,h=!1,o=!1,L=!1,e=!1,a=!1,u=!1,c,m=n.LANGUAGE_DEFAULT,f=n.LANGUAGE_DEFAULT,y,w;const E=globalThis;let S;typeof E.vscode<\"u\"&&typeof E.vscode.process<\"u\"?S=E.vscode.process:typeof process<\"u\"&&(S=process);const C=typeof((A=S?.versions)===null||A===void 0?void 0:A.electron)==\"string\",r=C&&S?.type===\"renderer\";if(typeof S==\"object\"){i=S.platform===\"win32\",d=S.platform===\"darwin\",b=S.platform===\"linux\",p=b&&!!S.env.SNAP&&!!S.env.SNAP_REVISION,L=C,a=!!S.env.CI||!!S.env.BUILD_ARTIFACTSTAGINGDIRECTORY,c=n.LANGUAGE_DEFAULT,m=n.LANGUAGE_DEFAULT;const v=S.env.VSCODE_NLS_CONFIG;if(v)try{const R=JSON.parse(v),N=R.availableLanguages[\"*\"];c=R.locale,f=R.osLocale,m=N||n.LANGUAGE_DEFAULT,y=R._translationsConfigFile}catch{}h=!0}else typeof navigator==\"object\"&&!r?(w=navigator.userAgent,i=w.indexOf(\"Windows\")>=0,d=w.indexOf(\"Macintosh\")>=0,e=(w.indexOf(\"Macintosh\")>=0||w.indexOf(\"iPad\")>=0||w.indexOf(\"iPhone\")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,b=w.indexOf(\"Linux\")>=0,u=w?.indexOf(\"Mobi\")>=0,o=!0,c=M.getConfiguredDefaultLocale(M.localize(0,null))||n.LANGUAGE_DEFAULT,m=c,f=navigator.language):console.error(\"Unable to resolve platform.\");let s=0;d?s=1:i?s=3:b&&(s=2),n.isWindows=i,n.isMacintosh=d,n.isLinux=b,n.isNative=h,n.isWeb=o,n.isWebWorker=o&&typeof E.importScripts==\"function\",n.webWorkerOrigin=n.isWebWorker?E.origin:void 0,n.isIOS=e,n.isMobile=u,n.userAgent=w,n.language=m,n.setTimeout0IsFaster=typeof E.postMessage==\"function\"&&!E.importScripts,n.setTimeout0=(()=>{if(n.setTimeout0IsFaster){const v=[];E.addEventListener(\"message\",N=>{if(N.data&&N.data.vscodeScheduleAsyncWork)for(let D=0,x=v.length;D<x;D++){const T=v[D];if(T.id===N.data.vscodeScheduleAsyncWork){v.splice(D,1),T.callback();return}}});let R=0;return N=>{const D=++R;v.push({id:D,callback:N}),E.postMessage({vscodeScheduleAsyncWork:D},\"*\")}}return v=>setTimeout(v)})(),n.OS=d||e?2:i?1:3;let l=!0,_=!1;function g(){if(!_){_=!0;const v=new Uint8Array(2);v[0]=1,v[1]=2,l=new Uint16Array(v.buffer)[0]===(2<<8)+1}return l}n.isLittleEndian=g,n.isChrome=!!(n.userAgent&&n.userAgent.indexOf(\"Chrome\")>=0),n.isFirefox=!!(n.userAgent&&n.userAgent.indexOf(\"Firefox\")>=0),n.isSafari=!!(!n.isChrome&&n.userAgent&&n.userAgent.indexOf(\"Safari\")>=0),n.isEdge=!!(n.userAgent&&n.userAgent.indexOf(\"Edg/\")>=0),n.isAndroid=!!(n.userAgent&&n.userAgent.indexOf(\"Android\")>=0)}),Y(X[62],J([0,1,17]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.platform=n.env=n.cwd=void 0;let A;const i=globalThis.vscode;if(typeof i<\"u\"&&typeof i.process<\"u\"){const d=i.process;A={get platform(){return d.platform},get arch(){return d.arch},get env(){return d.env},cwd(){return d.cwd()}}}else typeof process<\"u\"?A={get platform(){return process.platform},get arch(){return process.arch},get env(){return process.env},cwd(){return process.env.VSCODE_CWD||process.cwd()}}:A={get platform(){return M.isWindows?\"win32\":M.isMacintosh?\"darwin\":\"linux\"},get arch(){},get env(){return{}},cwd(){return\"/\"}};n.cwd=A.cwd,n.env=A.env,n.platform=A.platform}),Y(X[63],J([0,1,62]),function(q,n,M){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.sep=n.extname=n.basename=n.dirname=n.relative=n.resolve=n.normalize=n.posix=n.win32=void 0;const A=65,i=97,d=90,b=122,p=46,h=47,o=92,L=58,e=63;class a extends Error{constructor(s,l,_){let g;typeof l==\"string\"&&l.indexOf(\"not \")===0?(g=\"must not be\",l=l.replace(/^not /,\"\")):g=\"must be\";const v=s.indexOf(\".\")!==-1?\"property\":\"argument\";let R=`The \"${s}\" ${v} ${g} of type ${l}`;R+=`. Received type ${typeof _}`,super(R),this.code=\"ERR_INVALID_ARG_TYPE\"}}function u(r,s){if(r===null||typeof r!=\"object\")throw new a(s,\"Object\",r)}function c(r,s){if(typeof r!=\"string\")throw new a(s,\"string\",r)}const m=M.platform===\"win32\";function f(r){return r===h||r===o}function y(r){return r===h}function w(r){return r>=A&&r<=d||r>=i&&r<=b}function E(r,s,l,_){let g=\"\",v=0,R=-1,N=0,D=0;for(let x=0;x<=r.length;++x){if(x<r.length)D=r.charCodeAt(x);else{if(_(D))break;D=h}if(_(D)){if(!(R===x-1||N===1))if(N===2){if(g.length<2||v!==2||g.charCodeAt(g.length-1)!==p||g.charCodeAt(g.length-2)!==p){if(g.length>2){const T=g.lastIndexOf(l);T===-1?(g=\"\",v=0):(g=g.slice(0,T),v=g.length-1-g.lastIndexOf(l)),R=x,N=0;continue}else if(g.length!==0){g=\"\",v=0,R=x,N=0;continue}}s&&(g+=g.length>0?`${l}..`:\"..\",v=2)}else g.length>0?g+=`${l}${r.slice(R+1,x)}`:g=r.slice(R+1,x),v=x-R-1;R=x,N=0}else D===p&&N!==-1?++N:N=-1}return g}function S(r,s){u(s,\"pathObject\");const l=s.dir||s.root,_=s.base||`${s.name||\"\"}${s.ext||\"\"}`;return l?l===s.root?`${l}${_}`:`${l}${r}${_}`:_}n.win32={resolve(...r){let s=\"\",l=\"\",_=!1;for(let g=r.length-1;g>=-1;g--){let v;if(g>=0){if(v=r[g],c(v,\"path\"),v.length===0)continue}else s.length===0?v=M.cwd():(v=M.env[`=${s}`]||M.cwd(),(v===void 0||v.slice(0,2).toLowerCase()!==s.toLowerCase()&&v.charCodeAt(2)===o)&&(v=`${s}\\\\`));const R=v.length;let N=0,D=\"\",x=!1;const T=v.charCodeAt(0);if(R===1)f(T)&&(N=1,x=!0);else if(f(T))if(x=!0,f(v.charCodeAt(1))){let F=2,B=F;for(;F<R&&!f(v.charCodeAt(F));)F++;if(F<R&&F!==B){const V=v.slice(B,F);for(B=F;F<R&&f(v.charCodeAt(F));)F++;if(F<R&&F!==B){for(B=F;F<R&&!f(v.charCodeAt(F));)F++;(F===R||F!==B)&&(D=`\\\\\\\\${V}\\\\${v.slice(B,F)}`,N=F)}}}else N=1;else w(T)&&v.charCodeAt(1)===L&&(D=v.slice(0,2),N=2,R>2&&f(v.charCodeAt(2))&&(x=!0,N=3));if(D.length>0)if(s.length>0){if(D.toLowerCase()!==s.toLowerCase())continue}else s=D;if(_){if(s.length>0)break}else if(l=`${v.slice(N)}\\\\${l}`,_=x,x&&s.length>0)break}return l=E(l,!_,\"\\\\\",f),_?`${s}\\\\${l}`:`${s}${l}`||\".\"},normalize(r){c(r,\"path\");const s=r.length;if(s===0)return\".\";let l=0,_,g=!1;const v=r.charCodeAt(0);if(s===1)return y(v)?\"\\\\\":r;if(f(v))if(g=!0,f(r.charCodeAt(1))){let N=2,D=N;for(;N<s&&!f(r.charCodeAt(N));)N++;if(N<s&&N!==D){const x=r.slice(D,N);for(D=N;N<s&&f(r.charCodeAt(N));)N++;if(N<s&&N!==D){for(D=N;N<s&&!f(r.charCodeAt(N));)N++;if(N===s)return`\\\\\\\\${x}\\\\${r.slice(D)}\\\\`;N!==D&&(_=`\\\\\\\\${x}\\\\${r.slice(D,N)}`,l=N)}}}else l=1;else w(v)&&r.charCodeAt(1)===L&&(_=r.slice(0,2),l=2,s>2&&f(r.charCodeAt(2))&&(g=!0,l=3));let R=l<s?E(r.slice(l),!g,\"\\\\\",f):\"\";return R.length===0&&!g&&(R=\".\"),R.length>0&&f(r.charCodeAt(s-1))&&(R+=\"\\\\\"),_===void 0?g?`\\\\${R}`:R:g?`${_}\\\\${R}`:`${_}${R}`},isAbsolute(r){c(r,\"path\");const s=r.length;if(s===0)return!1;const l=r.charCodeAt(0);return f(l)||s>2&&w(l)&&r.charCodeAt(1)===L&&f(r.charCodeAt(2))},join(...r){if(r.length===0)return\".\";let s,l;for(let v=0;v<r.length;++v){const R=r[v];c(R,\"path\"),R.length>0&&(s===void 0?s=l=R:s+=`\\\\${R}`)}if(s===void 0)return\".\";let _=!0,g=0;if(typeof l==\"string\"&&f(l.charCodeAt(0))){++g;const v=l.length;v>1&&f(l.charCodeAt(1))&&(++g,v>2&&(f(l.charCodeAt(2))?++g:_=!1))}if(_){for(;g<s.length&&f(s.charCodeAt(g));)g++;g>=2&&(s=`\\\\${s.slice(g)}`)}return n.win32.normalize(s)},relative(r,s){if(c(r,\"from\"),c(s,\"to\"),r===s)return\"\";const l=n.win32.resolve(r),_=n.win32.resolve(s);if(l===_||(r=l.toLowerCase(),s=_.toLowerCase(),r===s))return\"\";let g=0;for(;g<r.length&&r.charCodeAt(g)===o;)g++;let v=r.length;for(;v-1>g&&r.charCodeAt(v-1)===o;)v--;const R=v-g;let N=0;for(;N<s.length&&s.charCodeAt(N)===o;)N++;let D=s.length;for(;D-1>N&&s.charCodeAt(D-1)===o;)D--;const x=D-N,T=R<x?R:x;let F=-1,B=0;for(;B<T;B++){const k=r.charCodeAt(g+B);if(k!==s.charCodeAt(N+B))break;k===o&&(F=B)}if(B!==T){if(F===-1)return _}else{if(x>T){if(s.charCodeAt(N+B)===o)return _.slice(N+B+1);if(B===2)return _.slice(N+B)}R>T&&(r.charCodeAt(g+B)===o?F=B:B===2&&(F=3)),F===-1&&(F=0)}let V=\"\";for(B=g+F+1;B<=v;++B)(B===v||r.charCodeAt(B)===o)&&(V+=V.length===0?\"..\":\"\\\\..\");return N+=F,V.length>0?`${V}${_.slice(N,D)}`:(_.charCodeAt(N)===o&&++N,_.slice(N,D))},toNamespacedPath(r){if(typeof r!=\"string\"||r.length===0)return r;const s=n.win32.resolve(r);if(s.length<=2)return r;if(s.charCodeAt(0)===o){if(s.charCodeAt(1)===o){const l=s.charCodeAt(2);if(l!==e&&l!==p)return`\\\\\\\\?\\\\UNC\\\\${s.slice(2)}`}}else if(w(s.charCodeAt(0))&&s.charCodeAt(1)===L&&s.charCodeAt(2)===o)return`\\\\\\\\?\\\\${s}`;return r},dirname(r){c(r,\"path\");const s=r.length;if(s===0)return\".\";let l=-1,_=0;const g=r.charCodeAt(0);if(s===1)return f(g)?r:\".\";if(f(g)){if(l=_=1,f(r.charCodeAt(1))){let N=2,D=N;for(;N<s&&!f(r.charCodeAt(N));)N++;if(N<s&&N!==D){for(D=N;N<s&&f(r.charCodeAt(N));)N++;if(N<s&&N!==D){for(D=N;N<s&&!f(r.charCodeAt(N));)N++;if(N===s)return r;N!==D&&(l=_=N+1)}}}}else w(g)&&r.charCodeAt(1)===L&&(l=s>2&&f(r.charCodeAt(2))?3:2,_=l);let v=-1,R=!0;for(let N=s-1;N>=_;--N)if(f(r.charCodeAt(N))){if(!R){v=N;break}}else R=!1;if(v===-1){if(l===-1)return\".\";v=l}return r.slice(0,v)},basename(r,s){s!==void 0&&c(s,\"ext\"),c(r,\"path\");let l=0,_=-1,g=!0,v;if(r.length>=2&&w(r.charCodeAt(0))&&r.charCodeAt(1)===L&&(l=2),s!==void 0&&s.length>0&&s.length<=r.length){if(s===r)return\"\";let R=s.length-1,N=-1;for(v=r.length-1;v>=l;--v){const D=r.charCodeAt(v);if(f(D)){if(!g){l=v+1;break}}else N===-1&&(g=!1,N=v+1),R>=0&&(D===s.charCodeAt(R)?--R===-1&&(_=v):(R=-1,_=N))}return l===_?_=N:_===-1&&(_=r.length),r.slice(l,_)}for(v=r.length-1;v>=l;--v)if(f(r.charCodeAt(v))){if(!g){l=v+1;break}}else _===-1&&(g=!1,_=v+1);return _===-1?\"\":r.slice(l,_)},extname(r){c(r,\"path\");let s=0,l=-1,_=0,g=-1,v=!0,R=0;r.length>=2&&r.charCodeAt(1)===L&&w(r.charCodeAt(0))&&(s=_=2);for(let N=r.length-1;N>=s;--N){const D=r.charCodeAt(N);if(f(D)){if(!v){_=N+1;break}continue}g===-1&&(v=!1,g=N+1),D===p?l===-1?l=N:R!==1&&(R=1):l!==-1&&(R=-1)}return l===-1||g===-1||R===0||R===1&&l===g-1&&l===_+1?\"\":r.slice(l,g)},format:S.bind(null,\"\\\\\"),parse(r){c(r,\"path\");const s={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(r.length===0)return s;const l=r.length;let _=0,g=r.charCodeAt(0);if(l===1)return f(g)?(s.root=s.dir=r,s):(s.base=s.name=r,s);if(f(g)){if(_=1,f(r.charCodeAt(1))){let F=2,B=F;for(;F<l&&!f(r.charCodeAt(F));)F++;if(F<l&&F!==B){for(B=F;F<l&&f(r.charCodeAt(F));)F++;if(F<l&&F!==B){for(B=F;F<l&&!f(r.charCodeAt(F));)F++;F===l?_=F:F!==B&&(_=F+1)}}}}else if(w(g)&&r.charCodeAt(1)===L){if(l<=2)return s.root=s.dir=r,s;if(_=2,f(r.charCodeAt(2))){if(l===3)return s.root=s.dir=r,s;_=3}}_>0&&(s.root=r.slice(0,_));let v=-1,R=_,N=-1,D=!0,x=r.length-1,T=0;for(;x>=_;--x){if(g=r.charCodeAt(x),f(g)){if(!D){R=x+1;break}continue}N===-1&&(D=!1,N=x+1),g===p?v===-1?v=x:T!==1&&(T=1):v!==-1&&(T=-1)}return N!==-1&&(v===-1||T===0||T===1&&v===N-1&&v===R+1?s.base=s.name=r.slice(R,N):(s.name=r.slice(R,v),s.base=r.slice(R,N),s.ext=r.slice(v,N))),R>0&&R!==_?s.dir=r.slice(0,R-1):s.dir=s.root,s},sep:\"\\\\\",delimiter:\";\",win32:null,posix:null};const C=(()=>{if(m){const r=/\\\\/g;return()=>{const s=M.cwd().replace(r,\"/\");return s.slice(s.indexOf(\"/\"))}}return()=>M.cwd()})();n.posix={resolve(...r){let s=\"\",l=!1;for(let _=r.length-1;_>=-1&&!l;_--){const g=_>=0?r[_]:C();c(g,\"path\"),g.length!==0&&(s=`${g}/${s}`,l=g.charCodeAt(0)===h)}return s=E(s,!l,\"/\",y),l?`/${s}`:s.length>0?s:\".\"},normalize(r){if(c(r,\"path\"),r.length===0)return\".\";const s=r.charCodeAt(0)===h,l=r.charCodeAt(r.length-1)===h;return r=E(r,!s,\"/\",y),r.length===0?s?\"/\":l?\"./\":\".\":(l&&(r+=\"/\"),s?`/${r}`:r)},isAbsolute(r){return c(r,\"path\"),r.length>0&&r.charCodeAt(0)===h},join(...r){if(r.length===0)return\".\";let s;for(let l=0;l<r.length;++l){const _=r[l];c(_,\"path\"),_.length>0&&(s===void 0?s=_:s+=`/${_}`)}return s===void 0?\".\":n.posix.normalize(s)},relative(r,s){if(c(r,\"from\"),c(s,\"to\"),r===s||(r=n.posix.resolve(r),s=n.posix.resolve(s),r===s))return\"\";const l=1,_=r.length,g=_-l,v=1,R=s.length-v,N=g<R?g:R;let D=-1,x=0;for(;x<N;x++){const F=r.charCodeAt(l+x);if(F!==s.charCodeAt(v+x))break;F===h&&(D=x)}if(x===N)if(R>N){if(s.charCodeAt(v+x)===h)return s.slice(v+x+1);if(x===0)return s.slice(v+x)}else g>N&&(r.charCodeAt(l+x)===h?D=x:x===0&&(D=0));let T=\"\";for(x=l+D+1;x<=_;++x)(x===_||r.charCodeAt(x)===h)&&(T+=T.length===0?\"..\":\"/..\");return`${T}${s.slice(v+D)}`},toNamespacedPath(r){return r},dirname(r){if(c(r,\"path\"),r.length===0)return\".\";const s=r.charCodeAt(0)===h;let l=-1,_=!0;for(let g=r.length-1;g>=1;--g)if(r.charCodeAt(g)===h){if(!_){l=g;break}}else _=!1;return l===-1?s?\"/\":\".\":s&&l===1?\"//\":r.slice(0,l)},basename(r,s){s!==void 0&&c(s,\"ext\"),c(r,\"path\");let l=0,_=-1,g=!0,v;if(s!==void 0&&s.length>0&&s.length<=r.length){if(s===r)return\"\";let R=s.length-1,N=-1;for(v=r.length-1;v>=0;--v){const D=r.charCodeAt(v);if(D===h){if(!g){l=v+1;break}}else N===-1&&(g=!1,N=v+1),R>=0&&(D===s.charCodeAt(R)?--R===-1&&(_=v):(R=-1,_=N))}return l===_?_=N:_===-1&&(_=r.length),r.slice(l,_)}for(v=r.length-1;v>=0;--v)if(r.charCodeAt(v)===h){if(!g){l=v+1;break}}else _===-1&&(g=!1,_=v+1);return _===-1?\"\":r.slice(l,_)},extname(r){c(r,\"path\");let s=-1,l=0,_=-1,g=!0,v=0;for(let R=r.length-1;R>=0;--R){const N=r.charCodeAt(R);if(N===h){if(!g){l=R+1;break}continue}_===-1&&(g=!1,_=R+1),N===p?s===-1?s=R:v!==1&&(v=1):s!==-1&&(v=-1)}return s===-1||_===-1||v===0||v===1&&s===_-1&&s===l+1?\"\":r.slice(s,_)},format:S.bind(null,\"/\"),parse(r){c(r,\"path\");const s={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(r.length===0)return s;const l=r.charCodeAt(0)===h;let _;l?(s.root=\"/\",_=1):_=0;let g=-1,v=0,R=-1,N=!0,D=r.length-1,x=0;for(;D>=_;--D){const T=r.charCodeAt(D);if(T===h){if(!N){v=D+1;break}continue}R===-1&&(N=!1,R=D+1),T===p?g===-1?g=D:x!==1&&(x=1):g!==-1&&(x=-1)}if(R!==-1){const T=v===0&&l?1:v;g===-1||x===0||x===1&&g===R-1&&g===v+1?s.base=s.name=r.slice(T,R):(s.name=r.slice(T,g),s.base=r.slice(T,R),s.ext=r.slice(g,R))}return v>0?s.dir=r.slice(0,v-1):l&&(s.dir=\"/\"),s},sep:\"/\",delimiter:\":\",win32:null,posix:null},n.posix.win32=n.win32.win32=n.win32,n.posix.posix=n.win32.posix=n.posix,n.normalize=m?n.win32.normalize:n.posix.normalize,n.resolve=m?n.win32.resolve:n.posix.resolve,n.relative=m?n.win32.relative:n.posix.relative,n.dirname=m?n.win32.dirname:n.posix.dirname,n.basename=m?n.win32.basename:n.posix.basename,n.extname=m?n.win32.extname:n.posix.extname,n.sep=m?n.win32.sep:n.posix.sep}),Y(X[18],J([0,1,63,17]),function(q,n,M,A){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.uriToFsPath=n.URI=void 0;const i=/^\\w[\\w\\d+.-]*$/,d=/^\\//,b=/^\\/\\//;function p(l,_){if(!l.scheme&&_)throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${l.authority}\", path: \"${l.path}\", query: \"${l.query}\", fragment: \"${l.fragment}\"}`);if(l.scheme&&!i.test(l.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(l.path){if(l.authority){if(!d.test(l.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(b.test(l.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}}function h(l,_){return!l&&!_?\"file\":l}function o(l,_){switch(l){case\"https\":case\"http\":case\"file\":_?_[0]!==e&&(_=e+_):_=e;break}return _}const L=\"\",e=\"/\",a=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;class u{static isUri(_){return _ instanceof u?!0:_?typeof _.authority==\"string\"&&typeof _.fragment==\"string\"&&typeof _.path==\"string\"&&typeof _.query==\"string\"&&typeof _.scheme==\"string\"&&typeof _.fsPath==\"string\"&&typeof _.with==\"function\"&&typeof _.toString==\"function\":!1}constructor(_,g,v,R,N,D=!1){typeof _==\"object\"?(this.scheme=_.scheme||L,this.authority=_.authority||L,this.path=_.path||L,this.query=_.query||L,this.fragment=_.fragment||L):(this.scheme=h(_,D),this.authority=g||L,this.path=o(this.scheme,v||L),this.query=R||L,this.fragment=N||L,p(this,D))}get fsPath(){return E(this,!1)}with(_){if(!_)return this;let{scheme:g,authority:v,path:R,query:N,fragment:D}=_;return g===void 0?g=this.scheme:g===null&&(g=L),v===void 0?v=this.authority:v===null&&(v=L),R===void 0?R=this.path:R===null&&(R=L),N===void 0?N=this.query:N===null&&(N=L),D===void 0?D=this.fragment:D===null&&(D=L),g===this.scheme&&v===this.authority&&R===this.path&&N===this.query&&D===this.fragment?this:new m(g,v,R,N,D)}static parse(_,g=!1){const v=a.exec(_);return v?new m(v[2]||L,s(v[4]||L),s(v[5]||L),s(v[7]||L),s(v[9]||L),g):new m(L,L,L,L,L)}static file(_){let g=L;if(A.isWindows&&(_=_.replace(/\\\\/g,e)),_[0]===e&&_[1]===e){const v=_.indexOf(e,2);v===-1?(g=_.substring(2),_=e):(g=_.substring(2,v),_=_.substring(v)||e)}return new m(\"file\",g,_,L,L)}static from(_,g){return new m(_.scheme,_.authority,_.path,_.query,_.fragment,g)}static joinPath(_,...g){if(!_.path)throw new Error(\"[UriError]: cannot call joinPath on URI without path\");let v;return A.isWindows&&_.scheme===\"file\"?v=u.file(M.win32.join(E(_,!0),...g)).path:v=M.posix.join(_.path,...g),_.with({path:v})}toString(_=!1){return S(this,_)}toJSON(){return this}static revive(_){var g,v;if(_){if(_ instanceof u)return _;{const R=new m(_);return R._formatted=(g=_.external)!==null&&g!==void 0?g:null,R._fsPath=_._sep===c&&(v=_.fsPath)!==null&&v!==void 0?v:null,R}}else return _}}n.URI=u;const c=A.isWindows?1:void 0;class m extends u{constructor(){super(...arguments),this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=E(this,!1)),this._fsPath}toString(_=!1){return _?S(this,!0):(this._formatted||(this._formatted=S(this,!1)),this._formatted)}toJSON(){const _={$mid:1};return this._fsPath&&(_.fsPath=this._fsPath,_._sep=c),this._formatted&&(_.external=this._formatted),this.path&&(_.path=this.path),this.scheme&&(_.scheme=this.scheme),this.authority&&(_.authority=this.authority),this.query&&(_.query=this.query),this.fragment&&(_.fragment=this.fragment),_}}const f={[58]:\"%3A\",[47]:\"%2F\",[63]:\"%3F\",[35]:\"%23\",[91]:\"%5B\",[93]:\"%5D\",[64]:\"%40\",[33]:\"%21\",[36]:\"%24\",[38]:\"%26\",[39]:\"%27\",[40]:\"%28\",[41]:\"%29\",[42]:\"%2A\",[43]:\"%2B\",[44]:\"%2C\",[59]:\"%3B\",[61]:\"%3D\",[32]:\"%20\"};function y(l,_,g){let v,R=-1;for(let N=0;N<l.length;N++){const D=l.charCodeAt(N);if(D>=97&&D<=122||D>=65&&D<=90||D>=48&&D<=57||D===45||D===46||D===95||D===126||_&&D===47||g&&D===91||g&&D===93||g&&D===58)R!==-1&&(v+=encodeURIComponent(l.substring(R,N)),R=-1),v!==void 0&&(v+=l.charAt(N));else{v===void 0&&(v=l.substr(0,N));const x=f[D];x!==void 0?(R!==-1&&(v+=encodeURIComponent(l.substring(R,N)),R=-1),v+=x):R===-1&&(R=N)}}return R!==-1&&(v+=encodeURIComponent(l.substring(R))),v!==void 0?v:l}function w(l){let _;for(let g=0;g<l.length;g++){const v=l.charCodeAt(g);v===35||v===63?(_===void 0&&(_=l.substr(0,g)),_+=f[v]):_!==void 0&&(_+=l[g])}return _!==void 0?_:l}function E(l,_){let g;return l.authority&&l.path.length>1&&l.scheme===\"file\"?g=`//${l.authority}${l.path}`:l.path.charCodeAt(0)===47&&(l.path.charCodeAt(1)>=65&&l.path.charCodeAt(1)<=90||l.path.charCodeAt(1)>=97&&l.path.charCodeAt(1)<=122)&&l.path.charCodeAt(2)===58?_?g=l.path.substr(1):g=l.path[1].toLowerCase()+l.path.substr(2):g=l.path,A.isWindows&&(g=g.replace(/\\//g,\"\\\\\")),g}n.uriToFsPath=E;function S(l,_){const g=_?w:y;let v=\"\",{scheme:R,authority:N,path:D,query:x,fragment:T}=l;if(R&&(v+=R,v+=\":\"),(N||R===\"file\")&&(v+=e,v+=e),N){let F=N.indexOf(\"@\");if(F!==-1){const B=N.substr(0,F);N=N.substr(F+1),F=B.lastIndexOf(\":\"),F===-1?v+=g(B,!1,!1):(v+=g(B.substr(0,F),!1,!1),v+=\":\",v+=g(B.substr(F+1),!1,!0)),v+=\"@\"}N=N.toLowerCase(),F=N.lastIndexOf(\":\"),F===-1?v+=g(N,!1,!0):(v+=g(N.substr(0,F),!1,!0),v+=N.substr(F))}if(D){if(D.length>=3&&D.charCodeAt(0)===47&&D.charCodeAt(2)===58){const F=D.charCodeAt(1);F>=65&&F<=90&&(D=`/${String.fromCharCode(F+32)}:${D.substr(3)}`)}else if(D.length>=2&&D.charCodeAt(1)===58){const F=D.charCodeAt(0);F>=65&&F<=90&&(D=`${String.fromCharCode(F+32)}:${D.substr(2)}`)}v+=g(D,!0,!1)}return x&&(v+=\"?\",v+=g(x,!1,!1)),T&&(v+=\"#\",v+=_?T:y(T,!1,!1)),v}function C(l){try{return decodeURIComponent(l)}catch{return l.length>3?l.substr(0,3)+C(l.substr(3)):l}}const r=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function s(l){return l.match(r)?l.replace(r,_=>C(_)):l}}),Y(X[67],J([0,1,5,9,13,14,17,6]),function(q,n,M,A,i,d,b,p){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.create=n.SimpleWorkerServer=n.SimpleWorkerClient=n.logOnceWebWorkerWarning=void 0;const h=\"$initialize\";let o=!1;function L(s){b.isWeb&&(o||(o=!0,console.warn(\"Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq\")),console.warn(s.message))}n.logOnceWebWorkerWarning=L;class e{constructor(l,_,g,v){this.vsWorker=l,this.req=_,this.method=g,this.args=v,this.type=0}}class a{constructor(l,_,g,v){this.vsWorker=l,this.seq=_,this.res=g,this.err=v,this.type=1}}class u{constructor(l,_,g,v){this.vsWorker=l,this.req=_,this.eventName=g,this.arg=v,this.type=2}}class c{constructor(l,_,g){this.vsWorker=l,this.req=_,this.event=g,this.type=3}}class m{constructor(l,_){this.vsWorker=l,this.req=_,this.type=4}}class f{constructor(l){this._workerId=-1,this._handler=l,this._lastSentReq=0,this._pendingReplies=Object.create(null),this._pendingEmitters=new Map,this._pendingEvents=new Map}setWorkerId(l){this._workerId=l}sendMessage(l,_){const g=String(++this._lastSentReq);return new Promise((v,R)=>{this._pendingReplies[g]={resolve:v,reject:R},this._send(new e(this._workerId,g,l,_))})}listen(l,_){let g=null;const v=new A.Emitter({onWillAddFirstListener:()=>{g=String(++this._lastSentReq),this._pendingEmitters.set(g,v),this._send(new u(this._workerId,g,l,_))},onDidRemoveLastListener:()=>{this._pendingEmitters.delete(g),this._send(new m(this._workerId,g)),g=null}});return v.event}handleMessage(l){!l||!l.vsWorker||this._workerId!==-1&&l.vsWorker!==this._workerId||this._handleMessage(l)}_handleMessage(l){switch(l.type){case 1:return this._handleReplyMessage(l);case 0:return this._handleRequestMessage(l);case 2:return this._handleSubscribeEventMessage(l);case 3:return this._handleEventMessage(l);case 4:return this._handleUnsubscribeEventMessage(l)}}_handleReplyMessage(l){if(!this._pendingReplies[l.seq]){console.warn(\"Got reply to unknown seq\");return}const _=this._pendingReplies[l.seq];if(delete this._pendingReplies[l.seq],l.err){let g=l.err;l.err.$isError&&(g=new Error,g.name=l.err.name,g.message=l.err.message,g.stack=l.err.stack),_.reject(g);return}_.resolve(l.res)}_handleRequestMessage(l){const _=l.req;this._handler.handleMessage(l.method,l.args).then(v=>{this._send(new a(this._workerId,_,v,void 0))},v=>{v.detail instanceof Error&&(v.detail=(0,M.transformErrorForSerialization)(v.detail)),this._send(new a(this._workerId,_,void 0,(0,M.transformErrorForSerialization)(v)))})}_handleSubscribeEventMessage(l){const _=l.req,g=this._handler.handleEvent(l.eventName,l.arg)(v=>{this._send(new c(this._workerId,_,v))});this._pendingEvents.set(_,g)}_handleEventMessage(l){if(!this._pendingEmitters.has(l.req)){console.warn(\"Got event for unknown req\");return}this._pendingEmitters.get(l.req).fire(l.event)}_handleUnsubscribeEventMessage(l){if(!this._pendingEvents.has(l.req)){console.warn(\"Got unsubscribe for unknown req\");return}this._pendingEvents.get(l.req).dispose(),this._pendingEvents.delete(l.req)}_send(l){const _=[];if(l.type===0)for(let g=0;g<l.args.length;g++)l.args[g]instanceof ArrayBuffer&&_.push(l.args[g]);else l.type===1&&l.res instanceof ArrayBuffer&&_.push(l.res);this._handler.sendMessage(l,_)}}class y extends i.Disposable{constructor(l,_,g){super();let v=null;this._worker=this._register(l.create(\"vs/base/common/worker/simpleWorker\",F=>{this._protocol.handleMessage(F)},F=>{v?.(F)})),this._protocol=new f({sendMessage:(F,B)=>{this._worker.postMessage(F,B)},handleMessage:(F,B)=>{if(typeof g[F]!=\"function\")return Promise.reject(new Error(\"Missing method \"+F+\" on main thread host.\"));try{return Promise.resolve(g[F].apply(g,B))}catch(V){return Promise.reject(V)}},handleEvent:(F,B)=>{if(E(F)){const V=g[F].call(g,B);if(typeof V!=\"function\")throw new Error(`Missing dynamic event ${F} on main thread host.`);return V}if(w(F)){const V=g[F];if(typeof V!=\"function\")throw new Error(`Missing event ${F} on main thread host.`);return V}throw new Error(`Malformed event name ${F}`)}}),this._protocol.setWorkerId(this._worker.getId());let R=null;const N=globalThis.require;typeof N<\"u\"&&typeof N.getConfig==\"function\"?R=N.getConfig():typeof globalThis.requirejs<\"u\"&&(R=globalThis.requirejs.s.contexts._.config);const D=(0,d.getAllMethodNames)(g);this._onModuleLoaded=this._protocol.sendMessage(h,[this._worker.getId(),JSON.parse(JSON.stringify(R)),_,D]);const x=(F,B)=>this._request(F,B),T=(F,B)=>this._protocol.listen(F,B);this._lazyProxy=new Promise((F,B)=>{v=B,this._onModuleLoaded.then(V=>{F(S(V,x,T))},V=>{B(V),this._onError(\"Worker failed to load \"+_,V)})})}getProxyObject(){return this._lazyProxy}_request(l,_){return new Promise((g,v)=>{this._onModuleLoaded.then(()=>{this._protocol.sendMessage(l,_).then(g,v)},v)})}_onError(l,_){console.error(l),console.info(_)}}n.SimpleWorkerClient=y;function w(s){return s[0]===\"o\"&&s[1]===\"n\"&&p.isUpperAsciiLetter(s.charCodeAt(2))}function E(s){return/^onDynamic/.test(s)&&p.isUpperAsciiLetter(s.charCodeAt(9))}function S(s,l,_){const g=N=>function(){const D=Array.prototype.slice.call(arguments,0);return l(N,D)},v=N=>function(D){return _(N,D)},R={};for(const N of s){if(E(N)){R[N]=v(N);continue}if(w(N)){R[N]=_(N,void 0);continue}R[N]=g(N)}return R}class C{constructor(l,_){this._requestHandlerFactory=_,this._requestHandler=null,this._protocol=new f({sendMessage:(g,v)=>{l(g,v)},handleMessage:(g,v)=>this._handleMessage(g,v),handleEvent:(g,v)=>this._handleEvent(g,v)})}onmessage(l){this._protocol.handleMessage(l)}_handleMessage(l,_){if(l===h)return this.initialize(_[0],_[1],_[2],_[3]);if(!this._requestHandler||typeof this._requestHandler[l]!=\"function\")return Promise.reject(new Error(\"Missing requestHandler or method: \"+l));try{return Promise.resolve(this._requestHandler[l].apply(this._requestHandler,_))}catch(g){return Promise.reject(g)}}_handleEvent(l,_){if(!this._requestHandler)throw new Error(\"Missing requestHandler\");if(E(l)){const g=this._requestHandler[l].call(this._requestHandler,_);if(typeof g!=\"function\")throw new Error(`Missing dynamic event ${l} on request handler.`);return g}if(w(l)){const g=this._requestHandler[l];if(typeof g!=\"function\")throw new Error(`Missing event ${l} on request handler.`);return g}throw new Error(`Malformed event name ${l}`)}initialize(l,_,g,v){this._protocol.setWorkerId(l);const D=S(v,(x,T)=>this._protocol.sendMessage(x,T),(x,T)=>this._protocol.listen(x,T));return this._requestHandlerFactory?(this._requestHandler=this._requestHandlerFactory(D),Promise.resolve((0,d.getAllMethodNames)(this._requestHandler))):(_&&(typeof _.baseUrl<\"u\"&&delete _.baseUrl,typeof _.paths<\"u\"&&typeof _.paths.vs<\"u\"&&delete _.paths.vs,typeof _.trustedTypesPolicy<\"u\"&&delete _.trustedTypesPolicy,_.catchError=!0,globalThis.require.config(_)),new Promise((x,T)=>{(globalThis.require||q)([g],B=>{if(this._requestHandler=B.create(D),!this._requestHandler){T(new Error(\"No RequestHandler!\"));return}x((0,d.getAllMethodNames)(this._requestHandler))},T)}))}}n.SimpleWorkerServer=C;function r(s){return new C(s,null)}n.create=r}),Y(X[64],J([19,61]),function(q,n){return q.create(\"vs/editor/common/languages\",n)}),Y(X[65],J([0,1,40,18,2,59,64]),function(q,n,M,A,i,d,b){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.TokenizationRegistry=n.LazyTokenizationSupport=n.InlayHintKind=n.Command=n.FoldingRangeKind=n.TextEdit=n.SymbolKinds=n.getAriaLabelForSymbol=n.symbolKindNames=n.isLocationLink=n.DocumentHighlightKind=n.SignatureHelpTriggerKind=n.SelectedSuggestionInfo=n.InlineCompletionTriggerKind=n.CompletionItemKinds=n.EncodedTokenizationResult=n.TokenizationResult=n.Token=void 0;class p{constructor(l,_,g){this.offset=l,this.type=_,this.language=g,this._tokenBrand=void 0}toString(){return\"(\"+this.offset+\", \"+this.type+\")\"}}n.Token=p;class h{constructor(l,_){this.tokens=l,this.endState=_,this._tokenizationResultBrand=void 0}}n.TokenizationResult=h;class o{constructor(l,_){this.tokens=l,this.endState=_,this._encodedTokenizationResultBrand=void 0}}n.EncodedTokenizationResult=o;var L;(function(s){const l=new Map;l.set(0,M.Codicon.symbolMethod),l.set(1,M.Codicon.symbolFunction),l.set(2,M.Codicon.symbolConstructor),l.set(3,M.Codicon.symbolField),l.set(4,M.Codicon.symbolVariable),l.set(5,M.Codicon.symbolClass),l.set(6,M.Codicon.symbolStruct),l.set(7,M.Codicon.symbolInterface),l.set(8,M.Codicon.symbolModule),l.set(9,M.Codicon.symbolProperty),l.set(10,M.Codicon.symbolEvent),l.set(11,M.Codicon.symbolOperator),l.set(12,M.Codicon.symbolUnit),l.set(13,M.Codicon.symbolValue),l.set(15,M.Codicon.symbolEnum),l.set(14,M.Codicon.symbolConstant),l.set(15,M.Codicon.symbolEnum),l.set(16,M.Codicon.symbolEnumMember),l.set(17,M.Codicon.symbolKeyword),l.set(27,M.Codicon.symbolSnippet),l.set(18,M.Codicon.symbolText),l.set(19,M.Codicon.symbolColor),l.set(20,M.Codicon.symbolFile),l.set(21,M.Codicon.symbolReference),l.set(22,M.Codicon.symbolCustomColor),l.set(23,M.Codicon.symbolFolder),l.set(24,M.Codicon.symbolTypeParameter),l.set(25,M.Codicon.account),l.set(26,M.Codicon.issues);function _(R){let N=l.get(R);return N||(console.info(\"No codicon found for CompletionItemKind \"+R),N=M.Codicon.symbolProperty),N}s.toIcon=_;const g=new Map;g.set(\"method\",0),g.set(\"function\",1),g.set(\"constructor\",2),g.set(\"field\",3),g.set(\"variable\",4),g.set(\"class\",5),g.set(\"struct\",6),g.set(\"interface\",7),g.set(\"module\",8),g.set(\"property\",9),g.set(\"event\",10),g.set(\"operator\",11),g.set(\"unit\",12),g.set(\"value\",13),g.set(\"constant\",14),g.set(\"enum\",15),g.set(\"enum-member\",16),g.set(\"enumMember\",16),g.set(\"keyword\",17),g.set(\"snippet\",27),g.set(\"text\",18),g.set(\"color\",19),g.set(\"file\",20),g.set(\"reference\",21),g.set(\"customcolor\",22),g.set(\"folder\",23),g.set(\"type-parameter\",24),g.set(\"typeParameter\",24),g.set(\"account\",25),g.set(\"issue\",26);function v(R,N){let D=g.get(R);return typeof D>\"u\"&&!N&&(D=9),D}s.fromString=v})(L||(n.CompletionItemKinds=L={}));var e;(function(s){s[s.Automatic=0]=\"Automatic\",s[s.Explicit=1]=\"Explicit\"})(e||(n.InlineCompletionTriggerKind=e={}));class a{constructor(l,_,g,v){this.range=l,this.text=_,this.completionKind=g,this.isSnippetText=v}equals(l){return i.Range.lift(this.range).equalsRange(l.range)&&this.text===l.text&&this.completionKind===l.completionKind&&this.isSnippetText===l.isSnippetText}}n.SelectedSuggestionInfo=a;var u;(function(s){s[s.Invoke=1]=\"Invoke\",s[s.TriggerCharacter=2]=\"TriggerCharacter\",s[s.ContentChange=3]=\"ContentChange\"})(u||(n.SignatureHelpTriggerKind=u={}));var c;(function(s){s[s.Text=0]=\"Text\",s[s.Read=1]=\"Read\",s[s.Write=2]=\"Write\"})(c||(n.DocumentHighlightKind=c={}));function m(s){return s&&A.URI.isUri(s.uri)&&i.Range.isIRange(s.range)&&(i.Range.isIRange(s.originSelectionRange)||i.Range.isIRange(s.targetSelectionRange))}n.isLocationLink=m,n.symbolKindNames={[17]:(0,b.localize)(0,null),[16]:(0,b.localize)(1,null),[4]:(0,b.localize)(2,null),[13]:(0,b.localize)(3,null),[8]:(0,b.localize)(4,null),[9]:(0,b.localize)(5,null),[21]:(0,b.localize)(6,null),[23]:(0,b.localize)(7,null),[7]:(0,b.localize)(8,null),[0]:(0,b.localize)(9,null),[11]:(0,b.localize)(10,null),[10]:(0,b.localize)(11,null),[19]:(0,b.localize)(12,null),[5]:(0,b.localize)(13,null),[1]:(0,b.localize)(14,null),[2]:(0,b.localize)(15,null),[20]:(0,b.localize)(16,null),[15]:(0,b.localize)(17,null),[18]:(0,b.localize)(18,null),[24]:(0,b.localize)(19,null),[3]:(0,b.localize)(20,null),[6]:(0,b.localize)(21,null),[14]:(0,b.localize)(22,null),[22]:(0,b.localize)(23,null),[25]:(0,b.localize)(24,null),[12]:(0,b.localize)(25,null)};function f(s,l){return(0,b.localize)(26,null,s,n.symbolKindNames[l])}n.getAriaLabelForSymbol=f;var y;(function(s){const l=new Map;l.set(0,M.Codicon.symbolFile),l.set(1,M.Codicon.symbolModule),l.set(2,M.Codicon.symbolNamespace),l.set(3,M.Codicon.symbolPackage),l.set(4,M.Codicon.symbolClass),l.set(5,M.Codicon.symbolMethod),l.set(6,M.Codicon.symbolProperty),l.set(7,M.Codicon.symbolField),l.set(8,M.Codicon.symbolConstructor),l.set(9,M.Codicon.symbolEnum),l.set(10,M.Codicon.symbolInterface),l.set(11,M.Codicon.symbolFunction),l.set(12,M.Codicon.symbolVariable),l.set(13,M.Codicon.symbolConstant),l.set(14,M.Codicon.symbolString),l.set(15,M.Codicon.symbolNumber),l.set(16,M.Codicon.symbolBoolean),l.set(17,M.Codicon.symbolArray),l.set(18,M.Codicon.symbolObject),l.set(19,M.Codicon.symbolKey),l.set(20,M.Codicon.symbolNull),l.set(21,M.Codicon.symbolEnumMember),l.set(22,M.Codicon.symbolStruct),l.set(23,M.Codicon.symbolEvent),l.set(24,M.Codicon.symbolOperator),l.set(25,M.Codicon.symbolTypeParameter);function _(g){let v=l.get(g);return v||(console.info(\"No codicon found for SymbolKind \"+g),v=M.Codicon.symbolProperty),v}s.toIcon=_})(y||(n.SymbolKinds=y={}));class w{}n.TextEdit=w;class E{static fromValue(l){switch(l){case\"comment\":return E.Comment;case\"imports\":return E.Imports;case\"region\":return E.Region}return new E(l)}constructor(l){this.value=l}}n.FoldingRangeKind=E,E.Comment=new E(\"comment\"),E.Imports=new E(\"imports\"),E.Region=new E(\"region\");var S;(function(s){function l(_){return!_||typeof _!=\"object\"?!1:typeof _.id==\"string\"&&typeof _.title==\"string\"}s.is=l})(S||(n.Command=S={}));var C;(function(s){s[s.Type=1]=\"Type\",s[s.Parameter=2]=\"Parameter\"})(C||(n.InlayHintKind=C={}));class r{constructor(l){this.createSupport=l,this._tokenizationSupport=null}dispose(){this._tokenizationSupport&&this._tokenizationSupport.then(l=>{l&&l.dispose()})}get tokenizationSupport(){return this._tokenizationSupport||(this._tokenizationSupport=this.createSupport()),this._tokenizationSupport}}n.LazyTokenizationSupport=r,n.TokenizationRegistry=new d.TokenizationRegistry}),Y(X[66],J([0,1,38,9,35,18,4,2,41,65,58]),function(q,n,M,A,i,d,b,p,h,o,L){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.createMonacoBaseAPI=n.KeyMod=void 0;class e{static chord(c,m){return(0,i.KeyChord)(c,m)}}n.KeyMod=e,e.CtrlCmd=2048,e.Shift=1024,e.Alt=512,e.WinCtrl=256;function a(){return{editor:void 0,languages:void 0,CancellationTokenSource:M.CancellationTokenSource,Emitter:A.Emitter,KeyCode:L.KeyCode,KeyMod:e,Position:b.Position,Range:p.Range,Selection:h.Selection,SelectionDirection:L.SelectionDirection,MarkerSeverity:L.MarkerSeverity,MarkerTag:L.MarkerTag,Uri:d.URI,Token:o.Token}}n.createMonacoBaseAPI=a}),Y(X[68],J([0,1,24,18,4,2,55,28,51,52,66,23,57,49,14,50]),function(q,n,M,A,i,d,b,p,h,o,L,e,a,u,c,m){\"use strict\";Object.defineProperty(n,\"__esModule\",{value:!0}),n.create=n.EditorSimpleWorker=void 0;class f extends b.MirrorTextModel{get uri(){return this._uri}get eol(){return this._eol}getValue(){return this.getText()}findMatches(S){const C=[];for(let r=0;r<this._lines.length;r++){const s=this._lines[r],l=this.offsetAt(new i.Position(r+1,1)),_=s.matchAll(S);for(const g of _)(g.index||g.index===0)&&(g.index=g.index+l),C.push(g)}return C}getLinesContent(){return this._lines.slice(0)}getLineCount(){return this._lines.length}getLineContent(S){return this._lines[S-1]}getWordAtPosition(S,C){const r=(0,p.getWordAtText)(S.column,(0,p.ensureValidWordDefinition)(C),this._lines[S.lineNumber-1],0);return r?new d.Range(S.lineNumber,r.startColumn,S.lineNumber,r.endColumn):null}words(S){const C=this._lines,r=this._wordenize.bind(this);let s=0,l=\"\",_=0,g=[];return{*[Symbol.iterator](){for(;;)if(_<g.length){const v=l.substring(g[_].start,g[_].end);_+=1,yield v}else if(s<C.length)l=C[s],g=r(l,S),_=0,s+=1;else break}}}getLineWords(S,C){const r=this._lines[S-1],s=this._wordenize(r,C),l=[];for(const _ of s)l.push({word:r.substring(_.start,_.end),startColumn:_.start+1,endColumn:_.end+1});return l}_wordenize(S,C){const r=[];let s;for(C.lastIndex=0;(s=C.exec(S))&&s[0].length!==0;)r.push({start:s.index,end:s.index+s[0].length});return r}getValueInRange(S){if(S=this._validateRange(S),S.startLineNumber===S.endLineNumber)return this._lines[S.startLineNumber-1].substring(S.startColumn-1,S.endColumn-1);const C=this._eol,r=S.startLineNumber-1,s=S.endLineNumber-1,l=[];l.push(this._lines[r].substring(S.startColumn-1));for(let _=r+1;_<s;_++)l.push(this._lines[_]);return l.push(this._lines[s].substring(0,S.endColumn-1)),l.join(C)}offsetAt(S){return S=this._validatePosition(S),this._ensureLineStarts(),this._lineStarts.getPrefixSum(S.lineNumber-2)+(S.column-1)}positionAt(S){S=Math.floor(S),S=Math.max(0,S),this._ensureLineStarts();const C=this._lineStarts.getIndexOf(S),r=this._lines[C.index].length;return{lineNumber:1+C.index,column:1+Math.min(C.remainder,r)}}_validateRange(S){const C=this._validatePosition({lineNumber:S.startLineNumber,column:S.startColumn}),r=this._validatePosition({lineNumber:S.endLineNumber,column:S.endColumn});return C.lineNumber!==S.startLineNumber||C.column!==S.startColumn||r.lineNumber!==S.endLineNumber||r.column!==S.endColumn?{startLineNumber:C.lineNumber,startColumn:C.column,endLineNumber:r.lineNumber,endColumn:r.column}:S}_validatePosition(S){if(!i.Position.isIPosition(S))throw new Error(\"bad position\");let{lineNumber:C,column:r}=S,s=!1;if(C<1)C=1,r=1,s=!0;else if(C>this._lines.length)C=this._lines.length,r=this._lines[C-1].length+1,s=!0;else{const l=this._lines[C-1].length+1;r<1?(r=1,s=!0):r>l&&(r=l,s=!0)}return s?{lineNumber:C,column:r}:S}}class y{constructor(S,C){this._host=S,this._models=Object.create(null),this._foreignModuleFactory=C,this._foreignModule=null}dispose(){this._models=Object.create(null)}_getModel(S){return this._models[S]}_getModels(){const S=[];return Object.keys(this._models).forEach(C=>S.push(this._models[C])),S}acceptNewModel(S){this._models[S.url]=new f(A.URI.parse(S.url),S.lines,S.EOL,S.versionId)}acceptModelChanged(S,C){if(!this._models[S])return;this._models[S].onEvents(C)}acceptRemovedModel(S){this._models[S]&&delete this._models[S]}async computeUnicodeHighlights(S,C,r){const s=this._getModel(S);return s?a.UnicodeTextModelHighlighter.computeUnicodeHighlights(s,C,r):{ranges:[],hasMore:!1,ambiguousCharacterCount:0,invisibleCharacterCount:0,nonBasicAsciiCharacterCount:0}}async computeDiff(S,C,r,s){const l=this._getModel(S),_=this._getModel(C);return!l||!_?null:y.computeDiff(l,_,r,s)}static computeDiff(S,C,r,s){const l=s===\"advanced\"?u.linesDiffComputers.getDefault():u.linesDiffComputers.getLegacy(),_=S.getLinesContent(),g=C.getLinesContent(),v=l.computeDiff(_,g,r),R=v.changes.length>0?!1:this._modelsAreIdentical(S,C);function N(D){return D.map(x=>{var T;return[x.original.startLineNumber,x.original.endLineNumberExclusive,x.modified.startLineNumber,x.modified.endLineNumberExclusive,(T=x.innerChanges)===null||T===void 0?void 0:T.map(F=>[F.originalRange.startLineNumber,F.originalRange.startColumn,F.originalRange.endLineNumber,F.originalRange.endColumn,F.modifiedRange.startLineNumber,F.modifiedRange.startColumn,F.modifiedRange.endLineNumber,F.modifiedRange.endColumn])]})}return{identical:R,quitEarly:v.hitTimeout,changes:N(v.changes),moves:v.moves.map(D=>[D.lineRangeMapping.original.startLineNumber,D.lineRangeMapping.original.endLineNumberExclusive,D.lineRangeMapping.modified.startLineNumber,D.lineRangeMapping.modified.endLineNumberExclusive,N(D.changes)])}}static _modelsAreIdentical(S,C){const r=S.getLineCount(),s=C.getLineCount();if(r!==s)return!1;for(let l=1;l<=r;l++){const _=S.getLineContent(l),g=C.getLineContent(l);if(_!==g)return!1}return!0}async computeMoreMinimalEdits(S,C,r){const s=this._getModel(S);if(!s)return C;const l=[];let _;C=C.slice(0).sort((v,R)=>{if(v.range&&R.range)return d.Range.compareRangesUsingStarts(v.range,R.range);const N=v.range?0:1,D=R.range?0:1;return N-D});let g=0;for(let v=1;v<C.length;v++)d.Range.getEndPosition(C[g].range).equals(d.Range.getStartPosition(C[v].range))?(C[g].range=d.Range.fromPositions(d.Range.getStartPosition(C[g].range),d.Range.getEndPosition(C[v].range)),C[g].text+=C[v].text):(g++,C[g]=C[v]);C.length=g+1;for(let{range:v,text:R,eol:N}of C){if(typeof N==\"number\"&&(_=N),d.Range.isEmpty(v)&&!R)continue;const D=s.getValueInRange(v);if(R=R.replace(/\\r\\n|\\n|\\r/g,s.eol),D===R)continue;if(Math.max(R.length,D.length)>y._diffLimit){l.push({range:v,text:R});continue}const x=(0,M.stringDiff)(D,R,r),T=s.offsetAt(d.Range.lift(v).getStartPosition());for(const F of x){const B=s.positionAt(T+F.originalStart),V=s.positionAt(T+F.originalStart+F.originalLength),k={text:R.substr(F.modifiedStart,F.modifiedLength),range:{startLineNumber:B.lineNumber,startColumn:B.column,endLineNumber:V.lineNumber,endColumn:V.column}};s.getValueInRange(k.range)!==k.text&&l.push(k)}}return typeof _==\"number\"&&l.push({eol:_,text:\"\",range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0}}),l}async computeLinks(S){const C=this._getModel(S);return C?(0,h.computeLinks)(C):null}async computeDefaultDocumentColors(S){const C=this._getModel(S);return C?(0,m.computeDefaultDocumentColors)(C):null}async textualSuggest(S,C,r,s){const l=new e.StopWatch,_=new RegExp(r,s),g=new Set;e:for(const v of S){const R=this._getModel(v);if(R){for(const N of R.words(_))if(!(N===C||!isNaN(Number(N)))&&(g.add(N),g.size>y._suggestionsLimit))break e}}return{words:Array.from(g),duration:l.elapsed()}}async computeWordRanges(S,C,r,s){const l=this._getModel(S);if(!l)return Object.create(null);const _=new RegExp(r,s),g=Object.create(null);for(let v=C.startLineNumber;v<C.endLineNumber;v++){const R=l.getLineWords(v,_);for(const N of R){if(!isNaN(Number(N.word)))continue;let D=g[N.word];D||(D=[],g[N.word]=D),D.push({startLineNumber:v,startColumn:N.startColumn,endLineNumber:v,endColumn:N.endColumn})}}return g}async navigateValueSet(S,C,r,s,l){const _=this._getModel(S);if(!_)return null;const g=new RegExp(s,l);C.startColumn===C.endColumn&&(C={startLineNumber:C.startLineNumber,startColumn:C.startColumn,endLineNumber:C.endLineNumber,endColumn:C.endColumn+1});const v=_.getValueInRange(C),R=_.getWordAtPosition({lineNumber:C.startLineNumber,column:C.startColumn},g);if(!R)return null;const N=_.getValueInRange(R);return o.BasicInplaceReplace.INSTANCE.navigateValueSet(C,v,R,N,r)}loadForeignModule(S,C,r){const s=(g,v)=>this._host.fhr(g,v),_={host:(0,c.createProxyObject)(r,s),getMirrorModels:()=>this._getModels()};return this._foreignModuleFactory?(this._foreignModule=this._foreignModuleFactory(_,C),Promise.resolve((0,c.getAllMethodNames)(this._foreignModule))):new Promise((g,v)=>{q([S],R=>{this._foreignModule=R.create(_,C),g((0,c.getAllMethodNames)(this._foreignModule))},v)})}fmr(S,C){if(!this._foreignModule||typeof this._foreignModule[S]!=\"function\")return Promise.reject(new Error(\"Missing requestHandler or method: \"+S));try{return Promise.resolve(this._foreignModule[S].apply(this._foreignModule,C))}catch(r){return Promise.reject(r)}}}n.EditorSimpleWorker=y,y._diffLimit=1e5,y._suggestionsLimit=1e4;function w(E){return new y(E,null)}n.create=w,typeof importScripts==\"function\"&&(globalThis.monaco=(0,L.createMonacoBaseAPI)())})}).call(this);\n\n//# sourceMappingURL=../../../../min-maps/vs/base/worker/workerMain.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/css/css.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/css/css\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var r=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var m=(t,e)=>{for(var o in e)r(t,o,{get:e[o],enumerable:!0})},c=(t,e,o,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of s(e))!l.call(t,n)&&n!==o&&r(t,n,{get:()=>e[n],enumerable:!(i=a(e,n))||i.enumerable});return t};var d=t=>c(r({},\"__esModule\",{value:!0}),t);var k={};m(k,{conf:()=>u,language:()=>p});var u={wordPattern:/(#?-?\\d*\\.\\d\\w*%?)|((::|[@#.!:])?[\\w-?]+%?)|::|[@#.!:]/g,comments:{blockComment:[\"/*\",\"*/\"]},brackets:[[\"{\",\"}\"],[\"[\",\"]\"],[\"(\",\")\"]],autoClosingPairs:[{open:\"{\",close:\"}\",notIn:[\"string\",\"comment\"]},{open:\"[\",close:\"]\",notIn:[\"string\",\"comment\"]},{open:\"(\",close:\")\",notIn:[\"string\",\"comment\"]},{open:'\"',close:'\"',notIn:[\"string\",\"comment\"]},{open:\"'\",close:\"'\",notIn:[\"string\",\"comment\"]}],surroundingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:'\"',close:'\"'},{open:\"'\",close:\"'\"}],folding:{markers:{start:new RegExp(\"^\\\\s*\\\\/\\\\*\\\\s*#region\\\\b\\\\s*(.*?)\\\\s*\\\\*\\\\/\"),end:new RegExp(\"^\\\\s*\\\\/\\\\*\\\\s*#endregion\\\\b.*\\\\*\\\\/\")}}},p={defaultToken:\"\",tokenPostfix:\".css\",ws:`[ \t\n\\r\\f]*`,identifier:\"-?-?([a-zA-Z]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))([\\\\w\\\\-]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))*\",brackets:[{open:\"{\",close:\"}\",token:\"delimiter.bracket\"},{open:\"[\",close:\"]\",token:\"delimiter.bracket\"},{open:\"(\",close:\")\",token:\"delimiter.parenthesis\"},{open:\"<\",close:\">\",token:\"delimiter.angle\"}],tokenizer:{root:[{include:\"@selector\"}],selector:[{include:\"@comments\"},{include:\"@import\"},{include:\"@strings\"},[\"[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)\",{token:\"keyword\",next:\"@keyframedeclaration\"}],[\"[@](page|content|font-face|-moz-document)\",{token:\"keyword\"}],[\"[@](charset|namespace)\",{token:\"keyword\",next:\"@declarationbody\"}],[\"(url-prefix)(\\\\()\",[\"attribute.value\",{token:\"delimiter.parenthesis\",next:\"@urldeclaration\"}]],[\"(url)(\\\\()\",[\"attribute.value\",{token:\"delimiter.parenthesis\",next:\"@urldeclaration\"}]],{include:\"@selectorname\"},[\"[\\\\*]\",\"tag\"],[\"[>\\\\+,]\",\"delimiter\"],[\"\\\\[\",{token:\"delimiter.bracket\",next:\"@selectorattribute\"}],[\"{\",{token:\"delimiter.bracket\",next:\"@selectorbody\"}]],selectorbody:[{include:\"@comments\"},[\"[*_]?@identifier@ws:(?=(\\\\s|\\\\d|[^{;}]*[;}]))\",\"attribute.name\",\"@rulevalue\"],[\"}\",{token:\"delimiter.bracket\",next:\"@pop\"}]],selectorname:[[\"(\\\\.|#(?=[^{])|%|(@identifier)|:)+\",\"tag\"]],selectorattribute:[{include:\"@term\"},[\"]\",{token:\"delimiter.bracket\",next:\"@pop\"}]],term:[{include:\"@comments\"},[\"(url-prefix)(\\\\()\",[\"attribute.value\",{token:\"delimiter.parenthesis\",next:\"@urldeclaration\"}]],[\"(url)(\\\\()\",[\"attribute.value\",{token:\"delimiter.parenthesis\",next:\"@urldeclaration\"}]],{include:\"@functioninvocation\"},{include:\"@numbers\"},{include:\"@name\"},{include:\"@strings\"},[\"([<>=\\\\+\\\\-\\\\*\\\\/\\\\^\\\\|\\\\~,])\",\"delimiter\"],[\",\",\"delimiter\"]],rulevalue:[{include:\"@comments\"},{include:\"@strings\"},{include:\"@term\"},[\"!important\",\"keyword\"],[\";\",\"delimiter\",\"@pop\"],[\"(?=})\",{token:\"\",next:\"@pop\"}]],warndebug:[[\"[@](warn|debug)\",{token:\"keyword\",next:\"@declarationbody\"}]],import:[[\"[@](import)\",{token:\"keyword\",next:\"@declarationbody\"}]],urldeclaration:[{include:\"@strings\"},[`[^)\\r\n]+`,\"string\"],[\"\\\\)\",{token:\"delimiter.parenthesis\",next:\"@pop\"}]],parenthizedterm:[{include:\"@term\"},[\"\\\\)\",{token:\"delimiter.parenthesis\",next:\"@pop\"}]],declarationbody:[{include:\"@term\"},[\";\",\"delimiter\",\"@pop\"],[\"(?=})\",{token:\"\",next:\"@pop\"}]],comments:[[\"\\\\/\\\\*\",\"comment\",\"@comment\"],[\"\\\\/\\\\/+.*\",\"comment\"]],comment:[[\"\\\\*\\\\/\",\"comment\",\"@pop\"],[/[^*/]+/,\"comment\"],[/./,\"comment\"]],name:[[\"@identifier\",\"attribute.value\"]],numbers:[[\"-?(\\\\d*\\\\.)?\\\\d+([eE][\\\\-+]?\\\\d+)?\",{token:\"attribute.value.number\",next:\"@units\"}],[\"#[0-9a-fA-F_]+(?!\\\\w)\",\"attribute.value.hex\"]],units:[[\"(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?\",\"attribute.value.unit\",\"@pop\"]],keyframedeclaration:[[\"@identifier\",\"attribute.value\"],[\"{\",{token:\"delimiter.bracket\",switchTo:\"@keyframebody\"}]],keyframebody:[{include:\"@term\"},[\"{\",{token:\"delimiter.bracket\",next:\"@selectorbody\"}],[\"}\",{token:\"delimiter.bracket\",next:\"@pop\"}]],functioninvocation:[[\"@identifier\\\\(\",{token:\"attribute.value\",next:\"@functionarguments\"}]],functionarguments:[[\"\\\\$@identifier@ws:\",\"attribute.name\"],[\"[,]\",\"delimiter\"],{include:\"@term\"},[\"\\\\)\",{token:\"attribute.value\",next:\"@pop\"}]],strings:[['~?\"',{token:\"string\",next:\"@stringenddoublequote\"}],[\"~?'\",{token:\"string\",next:\"@stringendquote\"}]],stringenddoublequote:[[\"\\\\\\\\.\",\"string\"],['\"',{token:\"string\",next:\"@pop\"}],[/[^\\\\\"]+/,\"string\"],[\".\",\"string\"]],stringendquote:[[\"\\\\\\\\.\",\"string\"],[\"'\",{token:\"string\",next:\"@pop\"}],[/[^\\\\']+/,\"string\"],[\".\",\"string\"]]}};return d(k);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/html/html.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/html/html\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var u=Object.create;var a=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var k=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(t,n)=>(typeof require<\"u\"?require:t)[n]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var E=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),T=(e,t)=>{for(var n in t)a(e,n,{get:t[n],enumerable:!0})},o=(e,t,n,s)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let r of x(t))!g.call(e,r)&&r!==n&&a(e,r,{get:()=>t[r],enumerable:!(s=b(t,r))||s.enumerable});return e},d=(e,t,n)=>(o(e,t,\"default\"),n&&o(n,t,\"default\")),m=(e,t,n)=>(n=e!=null?u(y(e)):{},o(t||!e||!e.__esModule?a(n,\"default\",{value:e,enumerable:!0}):n,e)),w=e=>o(a({},\"__esModule\",{value:!0}),e);var l=E((A,p)=>{var h=m(k(\"vs/editor/editor.api\"));p.exports=h});var $={};T($,{conf:()=>v,language:()=>f});var i={};d(i,m(l()));var c=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"menuitem\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"],v={wordPattern:/(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\$\\^\\&\\*\\(\\)\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\s]+)/g,comments:{blockComment:[\"<!--\",\"-->\"]},brackets:[[\"<!--\",\"-->\"],[\"<\",\">\"],[\"{\",\"}\"],[\"(\",\")\"]],autoClosingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:'\"',close:'\"'},{open:\"'\",close:\"'\"}],surroundingPairs:[{open:'\"',close:'\"'},{open:\"'\",close:\"'\"},{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:\"<\",close:\">\"}],onEnterRules:[{beforeText:new RegExp(`<(?!(?:${c.join(\"|\")}))([_:\\\\w][_:\\\\w-.\\\\d]*)([^/>]*(?!/)>)[^<]*$`,\"i\"),afterText:/^<\\/([_:\\w][_:\\w-.\\d]*)\\s*>$/i,action:{indentAction:i.languages.IndentAction.IndentOutdent}},{beforeText:new RegExp(`<(?!(?:${c.join(\"|\")}))(\\\\w[\\\\w\\\\d]*)([^/>]*(?!/)>)[^<]*$`,\"i\"),action:{indentAction:i.languages.IndentAction.Indent}}],folding:{markers:{start:new RegExp(\"^\\\\s*<!--\\\\s*#region\\\\b.*-->\"),end:new RegExp(\"^\\\\s*<!--\\\\s*#endregion\\\\b.*-->\")}}},f={defaultToken:\"\",tokenPostfix:\".html\",ignoreCase:!0,tokenizer:{root:[[/<!DOCTYPE/,\"metatag\",\"@doctype\"],[/<!--/,\"comment\",\"@comment\"],[/(<)((?:[\\w\\-]+:)?[\\w\\-]+)(\\s*)(\\/>)/,[\"delimiter\",\"tag\",\"\",\"delimiter\"]],[/(<)(script)/,[\"delimiter\",{token:\"tag\",next:\"@script\"}]],[/(<)(style)/,[\"delimiter\",{token:\"tag\",next:\"@style\"}]],[/(<)((?:[\\w\\-]+:)?[\\w\\-]+)/,[\"delimiter\",{token:\"tag\",next:\"@otherTag\"}]],[/(<\\/)((?:[\\w\\-]+:)?[\\w\\-]+)/,[\"delimiter\",{token:\"tag\",next:\"@otherTag\"}]],[/</,\"delimiter\"],[/[^<]+/]],doctype:[[/[^>]+/,\"metatag.content\"],[/>/,\"metatag\",\"@pop\"]],comment:[[/-->/,\"comment\",\"@pop\"],[/[^-]+/,\"comment.content\"],[/./,\"comment.content\"]],otherTag:[[/\\/?>/,\"delimiter\",\"@pop\"],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/[ \\t\\r\\n]+/]],script:[[/type/,\"attribute.name\",\"@scriptAfterType\"],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/>/,{token:\"delimiter\",next:\"@scriptEmbedded\",nextEmbedded:\"text/javascript\"}],[/[ \\t\\r\\n]+/],[/(<\\/)(script\\s*)(>)/,[\"delimiter\",\"tag\",{token:\"delimiter\",next:\"@pop\"}]]],scriptAfterType:[[/=/,\"delimiter\",\"@scriptAfterTypeEquals\"],[/>/,{token:\"delimiter\",next:\"@scriptEmbedded\",nextEmbedded:\"text/javascript\"}],[/[ \\t\\r\\n]+/],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],scriptAfterTypeEquals:[[/\"module\"/,{token:\"attribute.value\",switchTo:\"@scriptWithCustomType.text/javascript\"}],[/'module'/,{token:\"attribute.value\",switchTo:\"@scriptWithCustomType.text/javascript\"}],[/\"([^\"]*)\"/,{token:\"attribute.value\",switchTo:\"@scriptWithCustomType.$1\"}],[/'([^']*)'/,{token:\"attribute.value\",switchTo:\"@scriptWithCustomType.$1\"}],[/>/,{token:\"delimiter\",next:\"@scriptEmbedded\",nextEmbedded:\"text/javascript\"}],[/[ \\t\\r\\n]+/],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],scriptWithCustomType:[[/>/,{token:\"delimiter\",next:\"@scriptEmbedded.$S2\",nextEmbedded:\"$S2\"}],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/[ \\t\\r\\n]+/],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],scriptEmbedded:[[/<\\/script/,{token:\"@rematch\",next:\"@pop\",nextEmbedded:\"@pop\"}],[/[^<]+/,\"\"]],style:[[/type/,\"attribute.name\",\"@styleAfterType\"],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/>/,{token:\"delimiter\",next:\"@styleEmbedded\",nextEmbedded:\"text/css\"}],[/[ \\t\\r\\n]+/],[/(<\\/)(style\\s*)(>)/,[\"delimiter\",\"tag\",{token:\"delimiter\",next:\"@pop\"}]]],styleAfterType:[[/=/,\"delimiter\",\"@styleAfterTypeEquals\"],[/>/,{token:\"delimiter\",next:\"@styleEmbedded\",nextEmbedded:\"text/css\"}],[/[ \\t\\r\\n]+/],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],styleAfterTypeEquals:[[/\"([^\"]*)\"/,{token:\"attribute.value\",switchTo:\"@styleWithCustomType.$1\"}],[/'([^']*)'/,{token:\"attribute.value\",switchTo:\"@styleWithCustomType.$1\"}],[/>/,{token:\"delimiter\",next:\"@styleEmbedded\",nextEmbedded:\"text/css\"}],[/[ \\t\\r\\n]+/],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],styleWithCustomType:[[/>/,{token:\"delimiter\",next:\"@styleEmbedded.$S2\",nextEmbedded:\"$S2\"}],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/[ \\t\\r\\n]+/],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],styleEmbedded:[[/<\\/style/,{token:\"@rematch\",next:\"@pop\",nextEmbedded:\"@pop\"}],[/[^<]+/,\"\"]]}};return w($);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/javascript/javascript.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/javascript/javascript\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var x=Object.create;var a=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var y=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(t,n)=>(typeof require<\"u\"?require:t)[n]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var w=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),h=(e,t)=>{for(var n in t)a(e,n,{get:t[n],enumerable:!0})},s=(e,t,n,c)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let r of f(t))!k.call(e,r)&&r!==n&&a(e,r,{get:()=>t[r],enumerable:!(c=u(t,r))||c.enumerable});return e},g=(e,t,n)=>(s(e,t,\"default\"),n&&s(n,t,\"default\")),p=(e,t,n)=>(n=e!=null?x(b(e)):{},s(t||!e||!e.__esModule?a(n,\"default\",{value:e,enumerable:!0}):n,e)),v=e=>s(a({},\"__esModule\",{value:!0}),e);var d=w((C,l)=>{var A=p(y(\"vs/editor/editor.api\"));l.exports=A});var _={};h(_,{conf:()=>$,language:()=>T});var i={};g(i,p(d()));var m={wordPattern:/(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,comments:{lineComment:\"//\",blockComment:[\"/*\",\"*/\"]},brackets:[[\"{\",\"}\"],[\"[\",\"]\"],[\"(\",\")\"]],onEnterRules:[{beforeText:/^\\s*\\/\\*\\*(?!\\/)([^\\*]|\\*(?!\\/))*$/,afterText:/^\\s*\\*\\/$/,action:{indentAction:i.languages.IndentAction.IndentOutdent,appendText:\" * \"}},{beforeText:/^\\s*\\/\\*\\*(?!\\/)([^\\*]|\\*(?!\\/))*$/,action:{indentAction:i.languages.IndentAction.None,appendText:\" * \"}},{beforeText:/^(\\t|(\\ \\ ))*\\ \\*(\\ ([^\\*]|\\*(?!\\/))*)?$/,action:{indentAction:i.languages.IndentAction.None,appendText:\"* \"}},{beforeText:/^(\\t|(\\ \\ ))*\\ \\*\\/\\s*$/,action:{indentAction:i.languages.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:'\"',close:'\"',notIn:[\"string\"]},{open:\"'\",close:\"'\",notIn:[\"string\",\"comment\"]},{open:\"`\",close:\"`\",notIn:[\"string\",\"comment\"]},{open:\"/**\",close:\" */\",notIn:[\"string\"]}],folding:{markers:{start:new RegExp(\"^\\\\s*//\\\\s*#?region\\\\b\"),end:new RegExp(\"^\\\\s*//\\\\s*#?endregion\\\\b\")}}},o={defaultToken:\"invalid\",tokenPostfix:\".ts\",keywords:[\"abstract\",\"any\",\"as\",\"asserts\",\"bigint\",\"boolean\",\"break\",\"case\",\"catch\",\"class\",\"continue\",\"const\",\"constructor\",\"debugger\",\"declare\",\"default\",\"delete\",\"do\",\"else\",\"enum\",\"export\",\"extends\",\"false\",\"finally\",\"for\",\"from\",\"function\",\"get\",\"if\",\"implements\",\"import\",\"in\",\"infer\",\"instanceof\",\"interface\",\"is\",\"keyof\",\"let\",\"module\",\"namespace\",\"never\",\"new\",\"null\",\"number\",\"object\",\"out\",\"package\",\"private\",\"protected\",\"public\",\"override\",\"readonly\",\"require\",\"global\",\"return\",\"satisfies\",\"set\",\"static\",\"string\",\"super\",\"switch\",\"symbol\",\"this\",\"throw\",\"true\",\"try\",\"type\",\"typeof\",\"undefined\",\"unique\",\"unknown\",\"var\",\"void\",\"while\",\"with\",\"yield\",\"async\",\"await\",\"of\"],operators:[\"<=\",\">=\",\"==\",\"!=\",\"===\",\"!==\",\"=>\",\"+\",\"-\",\"**\",\"*\",\"/\",\"%\",\"++\",\"--\",\"<<\",\"</\",\">>\",\">>>\",\"&\",\"|\",\"^\",\"!\",\"~\",\"&&\",\"||\",\"??\",\"?\",\":\",\"=\",\"+=\",\"-=\",\"*=\",\"**=\",\"/=\",\"%=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"|=\",\"^=\",\"@\"],symbols:/[=><!~?:&|+\\-*\\/\\^%]+/,escapes:/\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\\d+(_+\\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,regexpctl:/[(){}\\[\\]\\$\\^|\\-*+?\\.]/,regexpesc:/\\\\(?:[bBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:{root:[[/[{}]/,\"delimiter.bracket\"],{include:\"common\"}],common:[[/#?[a-z_$][\\w$]*/,{cases:{\"@keywords\":\"keyword\",\"@default\":\"identifier\"}}],[/[A-Z][\\w\\$]*/,\"type.identifier\"],{include:\"@whitespace\"},[/\\/(?=([^\\\\\\/]|\\\\.)+\\/([dgimsuy]*)(\\s*)(\\.|;|,|\\)|\\]|\\}|$))/,{token:\"regexp\",bracket:\"@open\",next:\"@regexp\"}],[/[()\\[\\]]/,\"@brackets\"],[/[<>](?!@symbols)/,\"@brackets\"],[/!(?=([^=]|$))/,\"delimiter\"],[/@symbols/,{cases:{\"@operators\":\"delimiter\",\"@default\":\"\"}}],[/(@digits)[eE]([\\-+]?(@digits))?/,\"number.float\"],[/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?/,\"number.float\"],[/0[xX](@hexdigits)n?/,\"number.hex\"],[/0[oO]?(@octaldigits)n?/,\"number.octal\"],[/0[bB](@binarydigits)n?/,\"number.binary\"],[/(@digits)n?/,\"number\"],[/[;,.]/,\"delimiter\"],[/\"([^\"\\\\]|\\\\.)*$/,\"string.invalid\"],[/'([^'\\\\]|\\\\.)*$/,\"string.invalid\"],[/\"/,\"string\",\"@string_double\"],[/'/,\"string\",\"@string_single\"],[/`/,\"string\",\"@string_backtick\"]],whitespace:[[/[ \\t\\r\\n]+/,\"\"],[/\\/\\*\\*(?!\\/)/,\"comment.doc\",\"@jsdoc\"],[/\\/\\*/,\"comment\",\"@comment\"],[/\\/\\/.*$/,\"comment\"]],comment:[[/[^\\/*]+/,\"comment\"],[/\\*\\//,\"comment\",\"@pop\"],[/[\\/*]/,\"comment\"]],jsdoc:[[/[^\\/*]+/,\"comment.doc\"],[/\\*\\//,\"comment.doc\",\"@pop\"],[/[\\/*]/,\"comment.doc\"]],regexp:[[/(\\{)(\\d+(?:,\\d*)?)(\\})/,[\"regexp.escape.control\",\"regexp.escape.control\",\"regexp.escape.control\"]],[/(\\[)(\\^?)(?=(?:[^\\]\\\\\\/]|\\\\.)+)/,[\"regexp.escape.control\",{token:\"regexp.escape.control\",next:\"@regexrange\"}]],[/(\\()(\\?:|\\?=|\\?!)/,[\"regexp.escape.control\",\"regexp.escape.control\"]],[/[()]/,\"regexp.escape.control\"],[/@regexpctl/,\"regexp.escape.control\"],[/[^\\\\\\/]/,\"regexp\"],[/@regexpesc/,\"regexp.escape\"],[/\\\\\\./,\"regexp.invalid\"],[/(\\/)([dgimsuy]*)/,[{token:\"regexp\",bracket:\"@close\",next:\"@pop\"},\"keyword.other\"]]],regexrange:[[/-/,\"regexp.escape.control\"],[/\\^/,\"regexp.invalid\"],[/@regexpesc/,\"regexp.escape\"],[/[^\\]]/,\"regexp\"],[/\\]/,{token:\"regexp.escape.control\",next:\"@pop\",bracket:\"@close\"}]],string_double:[[/[^\\\\\"]+/,\"string\"],[/@escapes/,\"string.escape\"],[/\\\\./,\"string.escape.invalid\"],[/\"/,\"string\",\"@pop\"]],string_single:[[/[^\\\\']+/,\"string\"],[/@escapes/,\"string.escape\"],[/\\\\./,\"string.escape.invalid\"],[/'/,\"string\",\"@pop\"]],string_backtick:[[/\\$\\{/,{token:\"delimiter.bracket\",next:\"@bracketCounting\"}],[/[^\\\\`$]+/,\"string\"],[/@escapes/,\"string.escape\"],[/\\\\./,\"string.escape.invalid\"],[/`/,\"string\",\"@pop\"]],bracketCounting:[[/\\{/,\"delimiter.bracket\",\"@bracketCounting\"],[/\\}/,\"delimiter.bracket\",\"@pop\"],{include:\"common\"}]}};var $=m,T={defaultToken:\"invalid\",tokenPostfix:\".js\",keywords:[\"break\",\"case\",\"catch\",\"class\",\"continue\",\"const\",\"constructor\",\"debugger\",\"default\",\"delete\",\"do\",\"else\",\"export\",\"extends\",\"false\",\"finally\",\"for\",\"from\",\"function\",\"get\",\"if\",\"import\",\"in\",\"instanceof\",\"let\",\"new\",\"null\",\"return\",\"set\",\"static\",\"super\",\"switch\",\"symbol\",\"this\",\"throw\",\"true\",\"try\",\"typeof\",\"undefined\",\"var\",\"void\",\"while\",\"with\",\"yield\",\"async\",\"await\",\"of\"],typeKeywords:[],operators:o.operators,symbols:o.symbols,escapes:o.escapes,digits:o.digits,octaldigits:o.octaldigits,binarydigits:o.binarydigits,hexdigits:o.hexdigits,regexpctl:o.regexpctl,regexpesc:o.regexpesc,tokenizer:o.tokenizer};return v(_);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/less/less.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/less/less\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var d=(t,e)=>{for(var i in e)r(t,i,{get:e[i],enumerable:!0})},u=(t,e,i,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of a(e))!l.call(t,n)&&n!==i&&r(t,n,{get:()=>e[n],enumerable:!(o=s(e,n))||o.enumerable});return t};var c=t=>u(r({},\"__esModule\",{value:!0}),t);var p={};d(p,{conf:()=>m,language:()=>g});var m={wordPattern:/(#?-?\\d*\\.\\d\\w*%?)|([@#!.:]?[\\w-?]+%?)|[@#!.]/g,comments:{blockComment:[\"/*\",\"*/\"],lineComment:\"//\"},brackets:[[\"{\",\"}\"],[\"[\",\"]\"],[\"(\",\")\"]],autoClosingPairs:[{open:\"{\",close:\"}\",notIn:[\"string\",\"comment\"]},{open:\"[\",close:\"]\",notIn:[\"string\",\"comment\"]},{open:\"(\",close:\")\",notIn:[\"string\",\"comment\"]},{open:'\"',close:'\"',notIn:[\"string\",\"comment\"]},{open:\"'\",close:\"'\",notIn:[\"string\",\"comment\"]}],surroundingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:'\"',close:'\"'},{open:\"'\",close:\"'\"}],folding:{markers:{start:new RegExp(\"^\\\\s*\\\\/\\\\*\\\\s*#region\\\\b\\\\s*(.*?)\\\\s*\\\\*\\\\/\"),end:new RegExp(\"^\\\\s*\\\\/\\\\*\\\\s*#endregion\\\\b.*\\\\*\\\\/\")}}},g={defaultToken:\"\",tokenPostfix:\".less\",identifier:\"-?-?([a-zA-Z]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))([\\\\w\\\\-]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))*\",identifierPlus:\"-?-?([a-zA-Z:.]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))([\\\\w\\\\-:.]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))*\",brackets:[{open:\"{\",close:\"}\",token:\"delimiter.curly\"},{open:\"[\",close:\"]\",token:\"delimiter.bracket\"},{open:\"(\",close:\")\",token:\"delimiter.parenthesis\"},{open:\"<\",close:\">\",token:\"delimiter.angle\"}],tokenizer:{root:[{include:\"@nestedJSBegin\"},[\"[ \\\\t\\\\r\\\\n]+\",\"\"],{include:\"@comments\"},{include:\"@keyword\"},{include:\"@strings\"},{include:\"@numbers\"},[\"[*_]?[a-zA-Z\\\\-\\\\s]+(?=:.*(;|(\\\\\\\\$)))\",\"attribute.name\",\"@attribute\"],[\"url(\\\\-prefix)?\\\\(\",{token:\"tag\",next:\"@urldeclaration\"}],[\"[{}()\\\\[\\\\]]\",\"@brackets\"],[\"[,:;]\",\"delimiter\"],[\"#@identifierPlus\",\"tag.id\"],[\"&\",\"tag\"],[\"\\\\.@identifierPlus(?=\\\\()\",\"tag.class\",\"@attribute\"],[\"\\\\.@identifierPlus\",\"tag.class\"],[\"@identifierPlus\",\"tag\"],{include:\"@operators\"},[\"@(@identifier(?=[:,\\\\)]))\",\"variable\",\"@attribute\"],[\"@(@identifier)\",\"variable\"],[\"@\",\"key\",\"@atRules\"]],nestedJSBegin:[[\"``\",\"delimiter.backtick\"],[\"`\",{token:\"delimiter.backtick\",next:\"@nestedJSEnd\",nextEmbedded:\"text/javascript\"}]],nestedJSEnd:[[\"`\",{token:\"delimiter.backtick\",next:\"@pop\",nextEmbedded:\"@pop\"}]],operators:[[\"[<>=\\\\+\\\\-\\\\*\\\\/\\\\^\\\\|\\\\~]\",\"operator\"]],keyword:[[\"(@[\\\\s]*import|![\\\\s]*important|true|false|when|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem|hue|saturation|lightness|alpha|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|round|ceil|floor|percentage)\\\\b\",\"keyword\"]],urldeclaration:[{include:\"@strings\"},[`[^)\\r\n]+`,\"string\"],[\"\\\\)\",{token:\"tag\",next:\"@pop\"}]],attribute:[{include:\"@nestedJSBegin\"},{include:\"@comments\"},{include:\"@strings\"},{include:\"@numbers\"},{include:\"@keyword\"},[\"[a-zA-Z\\\\-]+(?=\\\\()\",\"attribute.value\",\"@attribute\"],[\">\",\"operator\",\"@pop\"],[\"@identifier\",\"attribute.value\"],{include:\"@operators\"},[\"@(@identifier)\",\"variable\"],[\"[)\\\\}]\",\"@brackets\",\"@pop\"],[\"[{}()\\\\[\\\\]>]\",\"@brackets\"],[\"[;]\",\"delimiter\",\"@pop\"],[\"[,=:]\",\"delimiter\"],[\"\\\\s\",\"\"],[\".\",\"attribute.value\"]],comments:[[\"\\\\/\\\\*\",\"comment\",\"@comment\"],[\"\\\\/\\\\/+.*\",\"comment\"]],comment:[[\"\\\\*\\\\/\",\"comment\",\"@pop\"],[\".\",\"comment\"]],numbers:[[\"(\\\\d*\\\\.)?\\\\d+([eE][\\\\-+]?\\\\d+)?\",{token:\"attribute.value.number\",next:\"@units\"}],[\"#[0-9a-fA-F_]+(?!\\\\w)\",\"attribute.value.hex\"]],units:[[\"(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?\",\"attribute.value.unit\",\"@pop\"]],strings:[['~?\"',{token:\"string.delimiter\",next:\"@stringsEndDoubleQuote\"}],[\"~?'\",{token:\"string.delimiter\",next:\"@stringsEndQuote\"}]],stringsEndDoubleQuote:[['\\\\\\\\\"',\"string\"],['\"',{token:\"string.delimiter\",next:\"@popall\"}],[\".\",\"string\"]],stringsEndQuote:[[\"\\\\\\\\'\",\"string\"],[\"'\",{token:\"string.delimiter\",next:\"@popall\"}],[\".\",\"string\"]],atRules:[{include:\"@comments\"},{include:\"@strings\"},[\"[()]\",\"delimiter\"],[\"[\\\\{;]\",\"delimiter\",\"@pop\"],[\".\",\"key\"]]}};return c(p);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/markdown/markdown.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/markdown/markdown\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var s=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var o in e)s(t,o,{get:e[o],enumerable:!0})},m=(t,e,o,a)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of c(e))!i.call(t,n)&&n!==o&&s(t,n,{get:()=>e[n],enumerable:!(a=r(e,n))||a.enumerable});return t};var d=t=>m(s({},\"__esModule\",{value:!0}),t);var b={};l(b,{conf:()=>p,language:()=>g});var p={comments:{blockComment:[\"<!--\",\"-->\"]},brackets:[[\"{\",\"}\"],[\"[\",\"]\"],[\"(\",\")\"]],autoClosingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:\"<\",close:\">\",notIn:[\"string\"]}],surroundingPairs:[{open:\"(\",close:\")\"},{open:\"[\",close:\"]\"},{open:\"`\",close:\"`\"}],folding:{markers:{start:new RegExp(\"^\\\\s*<!--\\\\s*#?region\\\\b.*-->\"),end:new RegExp(\"^\\\\s*<!--\\\\s*#?endregion\\\\b.*-->\")}}},g={defaultToken:\"\",tokenPostfix:\".md\",control:/[\\\\`*_\\[\\]{}()#+\\-\\.!]/,noncontrol:/[^\\\\`*_\\[\\]{}()#+\\-\\.!]/,escapes:/\\\\(?:@control)/,jsescapes:/\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,empty:[\"area\",\"base\",\"basefont\",\"br\",\"col\",\"frame\",\"hr\",\"img\",\"input\",\"isindex\",\"link\",\"meta\",\"param\"],tokenizer:{root:[[/^\\s*\\|/,\"@rematch\",\"@table_header\"],[/^(\\s{0,3})(#+)((?:[^\\\\#]|@escapes)+)((?:#+)?)/,[\"white\",\"keyword\",\"keyword\",\"keyword\"]],[/^\\s*(=+|\\-+)\\s*$/,\"keyword\"],[/^\\s*((\\*[ ]?)+)\\s*$/,\"meta.separator\"],[/^\\s*>+/,\"comment\"],[/^\\s*([\\*\\-+:]|\\d+\\.)\\s/,\"keyword\"],[/^(\\t|[ ]{4})[^ ].*$/,\"string\"],[/^\\s*~~~\\s*((?:\\w|[\\/\\-#])+)?\\s*$/,{token:\"string\",next:\"@codeblock\"}],[/^\\s*```\\s*((?:\\w|[\\/\\-#])+).*$/,{token:\"string\",next:\"@codeblockgh\",nextEmbedded:\"$1\"}],[/^\\s*```\\s*$/,{token:\"string\",next:\"@codeblock\"}],{include:\"@linecontent\"}],table_header:[{include:\"@table_common\"},[/[^\\|]+/,\"keyword.table.header\"]],table_body:[{include:\"@table_common\"},{include:\"@linecontent\"}],table_common:[[/\\s*[\\-:]+\\s*/,{token:\"keyword\",switchTo:\"table_body\"}],[/^\\s*\\|/,\"keyword.table.left\"],[/^\\s*[^\\|]/,\"@rematch\",\"@pop\"],[/^\\s*$/,\"@rematch\",\"@pop\"],[/\\|/,{cases:{\"@eos\":\"keyword.table.right\",\"@default\":\"keyword.table.middle\"}}]],codeblock:[[/^\\s*~~~\\s*$/,{token:\"string\",next:\"@pop\"}],[/^\\s*```\\s*$/,{token:\"string\",next:\"@pop\"}],[/.*$/,\"variable.source\"]],codeblockgh:[[/```\\s*$/,{token:\"string\",next:\"@pop\",nextEmbedded:\"@pop\"}],[/[^`]+/,\"variable.source\"]],linecontent:[[/&\\w+;/,\"string.escape\"],[/@escapes/,\"escape\"],[/\\b__([^\\\\_]|@escapes|_(?!_))+__\\b/,\"strong\"],[/\\*\\*([^\\\\*]|@escapes|\\*(?!\\*))+\\*\\*/,\"strong\"],[/\\b_[^_]+_\\b/,\"emphasis\"],[/\\*([^\\\\*]|@escapes)+\\*/,\"emphasis\"],[/`([^\\\\`]|@escapes)+`/,\"variable\"],[/\\{+[^}]+\\}+/,\"string.target\"],[/(!?\\[)((?:[^\\]\\\\]|@escapes)*)(\\]\\([^\\)]+\\))/,[\"string.link\",\"\",\"string.link\"]],[/(!?\\[)((?:[^\\]\\\\]|@escapes)*)(\\])/,\"string.link\"],{include:\"html\"}],html:[[/<(\\w+)\\/>/,\"tag\"],[/<(\\w+)(\\-|\\w)*/,{cases:{\"@empty\":{token:\"tag\",next:\"@tag.$1\"},\"@default\":{token:\"tag\",next:\"@tag.$1\"}}}],[/<\\/(\\w+)(\\-|\\w)*\\s*>/,{token:\"tag\"}],[/<!--/,\"comment\",\"@comment\"]],comment:[[/[^<\\-]+/,\"comment.content\"],[/-->/,\"comment\",\"@pop\"],[/<!--/,\"comment.content.invalid\"],[/[<\\-]/,\"comment.content\"]],tag:[[/[ \\t\\r\\n]+/,\"white\"],[/(type)(\\s*=\\s*)(\")([^\"]+)(\")/,[\"attribute.name.html\",\"delimiter.html\",\"string.html\",{token:\"string.html\",switchTo:\"@tag.$S2.$4\"},\"string.html\"]],[/(type)(\\s*=\\s*)(')([^']+)(')/,[\"attribute.name.html\",\"delimiter.html\",\"string.html\",{token:\"string.html\",switchTo:\"@tag.$S2.$4\"},\"string.html\"]],[/(\\w+)(\\s*=\\s*)(\"[^\"]*\"|'[^']*')/,[\"attribute.name.html\",\"delimiter.html\",\"string.html\"]],[/\\w+/,\"attribute.name.html\"],[/\\/>/,\"tag\",\"@pop\"],[/>/,{cases:{\"$S2==style\":{token:\"tag\",switchTo:\"embeddedStyle\",nextEmbedded:\"text/css\"},\"$S2==script\":{cases:{$S3:{token:\"tag\",switchTo:\"embeddedScript\",nextEmbedded:\"$S3\"},\"@default\":{token:\"tag\",switchTo:\"embeddedScript\",nextEmbedded:\"text/javascript\"}}},\"@default\":{token:\"tag\",next:\"@pop\"}}}]],embeddedStyle:[[/[^<]+/,\"\"],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\",nextEmbedded:\"@pop\"}],[/</,\"\"]],embeddedScript:[[/[^<]+/,\"\"],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\",nextEmbedded:\"@pop\"}],[/</,\"\"]]}};return d(b);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/php/php.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/php/php\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var i=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var s=(t,e)=>{for(var n in e)i(t,n,{get:e[n],enumerable:!0})},h=(t,e,n,r)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let p of m(e))!a.call(t,p)&&p!==n&&i(t,p,{get:()=>e[p],enumerable:!(r=o(e,p))||r.enumerable});return t};var l=t=>h(i({},\"__esModule\",{value:!0}),t);var u={};s(u,{conf:()=>d,language:()=>c});var d={wordPattern:/(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,comments:{lineComment:\"//\",blockComment:[\"/*\",\"*/\"]},brackets:[[\"{\",\"}\"],[\"[\",\"]\"],[\"(\",\")\"]],autoClosingPairs:[{open:\"{\",close:\"}\",notIn:[\"string\"]},{open:\"[\",close:\"]\",notIn:[\"string\"]},{open:\"(\",close:\")\",notIn:[\"string\"]},{open:'\"',close:'\"',notIn:[\"string\"]},{open:\"'\",close:\"'\",notIn:[\"string\",\"comment\"]}],folding:{markers:{start:new RegExp(\"^\\\\s*(#|//)region\\\\b\"),end:new RegExp(\"^\\\\s*(#|//)endregion\\\\b\")}}},c={defaultToken:\"\",tokenPostfix:\"\",tokenizer:{root:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.root\"}],[/<!DOCTYPE/,\"metatag.html\",\"@doctype\"],[/<!--/,\"comment.html\",\"@comment\"],[/(<)(\\w+)(\\/>)/,[\"delimiter.html\",\"tag.html\",\"delimiter.html\"]],[/(<)(script)/,[\"delimiter.html\",{token:\"tag.html\",next:\"@script\"}]],[/(<)(style)/,[\"delimiter.html\",{token:\"tag.html\",next:\"@style\"}]],[/(<)([:\\w]+)/,[\"delimiter.html\",{token:\"tag.html\",next:\"@otherTag\"}]],[/(<\\/)(\\w+)/,[\"delimiter.html\",{token:\"tag.html\",next:\"@otherTag\"}]],[/</,\"delimiter.html\"],[/[^<]+/]],doctype:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.comment\"}],[/[^>]+/,\"metatag.content.html\"],[/>/,\"metatag.html\",\"@pop\"]],comment:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.comment\"}],[/-->/,\"comment.html\",\"@pop\"],[/[^-]+/,\"comment.content.html\"],[/./,\"comment.content.html\"]],otherTag:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.otherTag\"}],[/\\/?>/,\"delimiter.html\",\"@pop\"],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/[ \\t\\r\\n]+/]],script:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.script\"}],[/type/,\"attribute.name\",\"@scriptAfterType\"],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/>/,{token:\"delimiter.html\",next:\"@scriptEmbedded.text/javascript\",nextEmbedded:\"text/javascript\"}],[/[ \\t\\r\\n]+/],[/(<\\/)(script\\s*)(>)/,[\"delimiter.html\",\"tag.html\",{token:\"delimiter.html\",next:\"@pop\"}]]],scriptAfterType:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.scriptAfterType\"}],[/=/,\"delimiter\",\"@scriptAfterTypeEquals\"],[/>/,{token:\"delimiter.html\",next:\"@scriptEmbedded.text/javascript\",nextEmbedded:\"text/javascript\"}],[/[ \\t\\r\\n]+/],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],scriptAfterTypeEquals:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.scriptAfterTypeEquals\"}],[/\"([^\"]*)\"/,{token:\"attribute.value\",switchTo:\"@scriptWithCustomType.$1\"}],[/'([^']*)'/,{token:\"attribute.value\",switchTo:\"@scriptWithCustomType.$1\"}],[/>/,{token:\"delimiter.html\",next:\"@scriptEmbedded.text/javascript\",nextEmbedded:\"text/javascript\"}],[/[ \\t\\r\\n]+/],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],scriptWithCustomType:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.scriptWithCustomType.$S2\"}],[/>/,{token:\"delimiter.html\",next:\"@scriptEmbedded.$S2\",nextEmbedded:\"$S2\"}],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/[ \\t\\r\\n]+/],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],scriptEmbedded:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInEmbeddedState.scriptEmbedded.$S2\",nextEmbedded:\"@pop\"}],[/<\\/script/,{token:\"@rematch\",next:\"@pop\",nextEmbedded:\"@pop\"}]],style:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.style\"}],[/type/,\"attribute.name\",\"@styleAfterType\"],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/>/,{token:\"delimiter.html\",next:\"@styleEmbedded.text/css\",nextEmbedded:\"text/css\"}],[/[ \\t\\r\\n]+/],[/(<\\/)(style\\s*)(>)/,[\"delimiter.html\",\"tag.html\",{token:\"delimiter.html\",next:\"@pop\"}]]],styleAfterType:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.styleAfterType\"}],[/=/,\"delimiter\",\"@styleAfterTypeEquals\"],[/>/,{token:\"delimiter.html\",next:\"@styleEmbedded.text/css\",nextEmbedded:\"text/css\"}],[/[ \\t\\r\\n]+/],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],styleAfterTypeEquals:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.styleAfterTypeEquals\"}],[/\"([^\"]*)\"/,{token:\"attribute.value\",switchTo:\"@styleWithCustomType.$1\"}],[/'([^']*)'/,{token:\"attribute.value\",switchTo:\"@styleWithCustomType.$1\"}],[/>/,{token:\"delimiter.html\",next:\"@styleEmbedded.text/css\",nextEmbedded:\"text/css\"}],[/[ \\t\\r\\n]+/],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],styleWithCustomType:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInSimpleState.styleWithCustomType.$S2\"}],[/>/,{token:\"delimiter.html\",next:\"@styleEmbedded.$S2\",nextEmbedded:\"$S2\"}],[/\"([^\"]*)\"/,\"attribute.value\"],[/'([^']*)'/,\"attribute.value\"],[/[\\w\\-]+/,\"attribute.name\"],[/=/,\"delimiter\"],[/[ \\t\\r\\n]+/],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],styleEmbedded:[[/<\\?((php)|=)?/,{token:\"@rematch\",switchTo:\"@phpInEmbeddedState.styleEmbedded.$S2\",nextEmbedded:\"@pop\"}],[/<\\/style/,{token:\"@rematch\",next:\"@pop\",nextEmbedded:\"@pop\"}]],phpInSimpleState:[[/<\\?((php)|=)?/,\"metatag.php\"],[/\\?>/,{token:\"metatag.php\",switchTo:\"@$S2.$S3\"}],{include:\"phpRoot\"}],phpInEmbeddedState:[[/<\\?((php)|=)?/,\"metatag.php\"],[/\\?>/,{token:\"metatag.php\",switchTo:\"@$S2.$S3\",nextEmbedded:\"$S3\"}],{include:\"phpRoot\"}],phpRoot:[[/[a-zA-Z_]\\w*/,{cases:{\"@phpKeywords\":{token:\"keyword.php\"},\"@phpCompileTimeConstants\":{token:\"constant.php\"},\"@default\":\"identifier.php\"}}],[/[$a-zA-Z_]\\w*/,{cases:{\"@phpPreDefinedVariables\":{token:\"variable.predefined.php\"},\"@default\":\"variable.php\"}}],[/[{}]/,\"delimiter.bracket.php\"],[/[\\[\\]]/,\"delimiter.array.php\"],[/[()]/,\"delimiter.parenthesis.php\"],[/[ \\t\\r\\n]+/],[/(#|\\/\\/)$/,\"comment.php\"],[/(#|\\/\\/)/,\"comment.php\",\"@phpLineComment\"],[/\\/\\*/,\"comment.php\",\"@phpComment\"],[/\"/,\"string.php\",\"@phpDoubleQuoteString\"],[/'/,\"string.php\",\"@phpSingleQuoteString\"],[/[\\+\\-\\*\\%\\&\\|\\^\\~\\!\\=\\<\\>\\/\\?\\;\\:\\.\\,\\@]/,\"delimiter.php\"],[/\\d*\\d+[eE]([\\-+]?\\d+)?/,\"number.float.php\"],[/\\d*\\.\\d+([eE][\\-+]?\\d+)?/,\"number.float.php\"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/,\"number.hex.php\"],[/0[0-7']*[0-7]/,\"number.octal.php\"],[/0[bB][0-1']*[0-1]/,\"number.binary.php\"],[/\\d[\\d']*/,\"number.php\"],[/\\d/,\"number.php\"]],phpComment:[[/\\*\\//,\"comment.php\",\"@pop\"],[/[^*]+/,\"comment.php\"],[/./,\"comment.php\"]],phpLineComment:[[/\\?>/,{token:\"@rematch\",next:\"@pop\"}],[/.$/,\"comment.php\",\"@pop\"],[/[^?]+$/,\"comment.php\",\"@pop\"],[/[^?]+/,\"comment.php\"],[/./,\"comment.php\"]],phpDoubleQuoteString:[[/[^\\\\\"]+/,\"string.php\"],[/@escapes/,\"string.escape.php\"],[/\\\\./,\"string.escape.invalid.php\"],[/\"/,\"string.php\",\"@pop\"]],phpSingleQuoteString:[[/[^\\\\']+/,\"string.php\"],[/@escapes/,\"string.escape.php\"],[/\\\\./,\"string.escape.invalid.php\"],[/'/,\"string.php\",\"@pop\"]]},phpKeywords:[\"abstract\",\"and\",\"array\",\"as\",\"break\",\"callable\",\"case\",\"catch\",\"cfunction\",\"class\",\"clone\",\"const\",\"continue\",\"declare\",\"default\",\"do\",\"else\",\"elseif\",\"enddeclare\",\"endfor\",\"endforeach\",\"endif\",\"endswitch\",\"endwhile\",\"extends\",\"false\",\"final\",\"for\",\"foreach\",\"function\",\"global\",\"goto\",\"if\",\"implements\",\"interface\",\"instanceof\",\"insteadof\",\"namespace\",\"new\",\"null\",\"object\",\"old_function\",\"or\",\"private\",\"protected\",\"public\",\"resource\",\"static\",\"switch\",\"throw\",\"trait\",\"try\",\"true\",\"use\",\"var\",\"while\",\"xor\",\"die\",\"echo\",\"empty\",\"exit\",\"eval\",\"include\",\"include_once\",\"isset\",\"list\",\"require\",\"require_once\",\"return\",\"print\",\"unset\",\"yield\",\"__construct\"],phpCompileTimeConstants:[\"__CLASS__\",\"__DIR__\",\"__FILE__\",\"__LINE__\",\"__NAMESPACE__\",\"__METHOD__\",\"__FUNCTION__\",\"__TRAIT__\"],phpPreDefinedVariables:[\"$GLOBALS\",\"$_SERVER\",\"$_GET\",\"$_POST\",\"$_FILES\",\"$_REQUEST\",\"$_SESSION\",\"$_ENV\",\"$_COOKIE\",\"$php_errormsg\",\"$HTTP_RAW_POST_DATA\",\"$http_response_header\",\"$argc\",\"$argv\"],escapes:/\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/};return l(u);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/scss/scss.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/scss/scss\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var i=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var c=(t,e)=>{for(var o in e)i(t,o,{get:e[o],enumerable:!0})},m=(t,e,o,r)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of l(e))!d.call(t,n)&&n!==o&&i(t,n,{get:()=>e[n],enumerable:!(r=a(e,n))||r.enumerable});return t};var s=t=>m(i({},\"__esModule\",{value:!0}),t);var k={};c(k,{conf:()=>u,language:()=>p});var u={wordPattern:/(#?-?\\d*\\.\\d\\w*%?)|([@$#!.:]?[\\w-?]+%?)|[@#!.]/g,comments:{blockComment:[\"/*\",\"*/\"],lineComment:\"//\"},brackets:[[\"{\",\"}\"],[\"[\",\"]\"],[\"(\",\")\"]],autoClosingPairs:[{open:\"{\",close:\"}\",notIn:[\"string\",\"comment\"]},{open:\"[\",close:\"]\",notIn:[\"string\",\"comment\"]},{open:\"(\",close:\")\",notIn:[\"string\",\"comment\"]},{open:'\"',close:'\"',notIn:[\"string\",\"comment\"]},{open:\"'\",close:\"'\",notIn:[\"string\",\"comment\"]}],surroundingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:'\"',close:'\"'},{open:\"'\",close:\"'\"}],folding:{markers:{start:new RegExp(\"^\\\\s*\\\\/\\\\*\\\\s*#region\\\\b\\\\s*(.*?)\\\\s*\\\\*\\\\/\"),end:new RegExp(\"^\\\\s*\\\\/\\\\*\\\\s*#endregion\\\\b.*\\\\*\\\\/\")}}},p={defaultToken:\"\",tokenPostfix:\".scss\",ws:`[ \t\n\\r\\f]*`,identifier:\"-?-?([a-zA-Z]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))([\\\\w\\\\-]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))*\",brackets:[{open:\"{\",close:\"}\",token:\"delimiter.curly\"},{open:\"[\",close:\"]\",token:\"delimiter.bracket\"},{open:\"(\",close:\")\",token:\"delimiter.parenthesis\"},{open:\"<\",close:\">\",token:\"delimiter.angle\"}],tokenizer:{root:[{include:\"@selector\"}],selector:[{include:\"@comments\"},{include:\"@import\"},{include:\"@variabledeclaration\"},{include:\"@warndebug\"},[\"[@](include)\",{token:\"keyword\",next:\"@includedeclaration\"}],[\"[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)\",{token:\"keyword\",next:\"@keyframedeclaration\"}],[\"[@](page|content|font-face|-moz-document)\",{token:\"keyword\"}],[\"[@](charset|namespace)\",{token:\"keyword\",next:\"@declarationbody\"}],[\"[@](function)\",{token:\"keyword\",next:\"@functiondeclaration\"}],[\"[@](mixin)\",{token:\"keyword\",next:\"@mixindeclaration\"}],[\"url(\\\\-prefix)?\\\\(\",{token:\"meta\",next:\"@urldeclaration\"}],{include:\"@controlstatement\"},{include:\"@selectorname\"},[\"[&\\\\*]\",\"tag\"],[\"[>\\\\+,]\",\"delimiter\"],[\"\\\\[\",{token:\"delimiter.bracket\",next:\"@selectorattribute\"}],[\"{\",{token:\"delimiter.curly\",next:\"@selectorbody\"}]],selectorbody:[[\"[*_]?@identifier@ws:(?=(\\\\s|\\\\d|[^{;}]*[;}]))\",\"attribute.name\",\"@rulevalue\"],{include:\"@selector\"},[\"[@](extend)\",{token:\"keyword\",next:\"@extendbody\"}],[\"[@](return)\",{token:\"keyword\",next:\"@declarationbody\"}],[\"}\",{token:\"delimiter.curly\",next:\"@pop\"}]],selectorname:[[\"#{\",{token:\"meta\",next:\"@variableinterpolation\"}],[\"(\\\\.|#(?=[^{])|%|(@identifier)|:)+\",\"tag\"]],selectorattribute:[{include:\"@term\"},[\"]\",{token:\"delimiter.bracket\",next:\"@pop\"}]],term:[{include:\"@comments\"},[\"url(\\\\-prefix)?\\\\(\",{token:\"meta\",next:\"@urldeclaration\"}],{include:\"@functioninvocation\"},{include:\"@numbers\"},{include:\"@strings\"},{include:\"@variablereference\"},[\"(and\\\\b|or\\\\b|not\\\\b)\",\"operator\"],{include:\"@name\"},[\"([<>=\\\\+\\\\-\\\\*\\\\/\\\\^\\\\|\\\\~,])\",\"operator\"],[\",\",\"delimiter\"],[\"!default\",\"literal\"],[\"\\\\(\",{token:\"delimiter.parenthesis\",next:\"@parenthizedterm\"}]],rulevalue:[{include:\"@term\"},[\"!important\",\"literal\"],[\";\",\"delimiter\",\"@pop\"],[\"{\",{token:\"delimiter.curly\",switchTo:\"@nestedproperty\"}],[\"(?=})\",{token:\"\",next:\"@pop\"}]],nestedproperty:[[\"[*_]?@identifier@ws:\",\"attribute.name\",\"@rulevalue\"],{include:\"@comments\"},[\"}\",{token:\"delimiter.curly\",next:\"@pop\"}]],warndebug:[[\"[@](warn|debug)\",{token:\"keyword\",next:\"@declarationbody\"}]],import:[[\"[@](import)\",{token:\"keyword\",next:\"@declarationbody\"}]],variabledeclaration:[[\"\\\\$@identifier@ws:\",\"variable.decl\",\"@declarationbody\"]],urldeclaration:[{include:\"@strings\"},[`[^)\\r\n]+`,\"string\"],[\"\\\\)\",{token:\"meta\",next:\"@pop\"}]],parenthizedterm:[{include:\"@term\"},[\"\\\\)\",{token:\"delimiter.parenthesis\",next:\"@pop\"}]],declarationbody:[{include:\"@term\"},[\";\",\"delimiter\",\"@pop\"],[\"(?=})\",{token:\"\",next:\"@pop\"}]],extendbody:[{include:\"@selectorname\"},[\"!optional\",\"literal\"],[\";\",\"delimiter\",\"@pop\"],[\"(?=})\",{token:\"\",next:\"@pop\"}]],variablereference:[[\"\\\\$@identifier\",\"variable.ref\"],[\"\\\\.\\\\.\\\\.\",\"operator\"],[\"#{\",{token:\"meta\",next:\"@variableinterpolation\"}]],variableinterpolation:[{include:\"@variablereference\"},[\"}\",{token:\"meta\",next:\"@pop\"}]],comments:[[\"\\\\/\\\\*\",\"comment\",\"@comment\"],[\"\\\\/\\\\/+.*\",\"comment\"]],comment:[[\"\\\\*\\\\/\",\"comment\",\"@pop\"],[\".\",\"comment\"]],name:[[\"@identifier\",\"attribute.value\"]],numbers:[[\"(\\\\d*\\\\.)?\\\\d+([eE][\\\\-+]?\\\\d+)?\",{token:\"number\",next:\"@units\"}],[\"#[0-9a-fA-F_]+(?!\\\\w)\",\"number.hex\"]],units:[[\"(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?\",\"number\",\"@pop\"]],functiondeclaration:[[\"@identifier@ws\\\\(\",{token:\"meta\",next:\"@parameterdeclaration\"}],[\"{\",{token:\"delimiter.curly\",switchTo:\"@functionbody\"}]],mixindeclaration:[[\"@identifier@ws\\\\(\",{token:\"meta\",next:\"@parameterdeclaration\"}],[\"@identifier\",\"meta\"],[\"{\",{token:\"delimiter.curly\",switchTo:\"@selectorbody\"}]],parameterdeclaration:[[\"\\\\$@identifier@ws:\",\"variable.decl\"],[\"\\\\.\\\\.\\\\.\",\"operator\"],[\",\",\"delimiter\"],{include:\"@term\"},[\"\\\\)\",{token:\"meta\",next:\"@pop\"}]],includedeclaration:[{include:\"@functioninvocation\"},[\"@identifier\",\"meta\"],[\";\",\"delimiter\",\"@pop\"],[\"(?=})\",{token:\"\",next:\"@pop\"}],[\"{\",{token:\"delimiter.curly\",switchTo:\"@selectorbody\"}]],keyframedeclaration:[[\"@identifier\",\"meta\"],[\"{\",{token:\"delimiter.curly\",switchTo:\"@keyframebody\"}]],keyframebody:[{include:\"@term\"},[\"{\",{token:\"delimiter.curly\",next:\"@selectorbody\"}],[\"}\",{token:\"delimiter.curly\",next:\"@pop\"}]],controlstatement:[[\"[@](if|else|for|while|each|media)\",{token:\"keyword.flow\",next:\"@controlstatementdeclaration\"}]],controlstatementdeclaration:[[\"(in|from|through|if|to)\\\\b\",{token:\"keyword.flow\"}],{include:\"@term\"},[\"{\",{token:\"delimiter.curly\",switchTo:\"@selectorbody\"}]],functionbody:[[\"[@](return)\",{token:\"keyword\"}],{include:\"@variabledeclaration\"},{include:\"@term\"},{include:\"@controlstatement\"},[\";\",\"delimiter\"],[\"}\",{token:\"delimiter.curly\",next:\"@pop\"}]],functioninvocation:[[\"@identifier\\\\(\",{token:\"meta\",next:\"@functionarguments\"}]],functionarguments:[[\"\\\\$@identifier@ws:\",\"attribute.name\"],[\"[,]\",\"delimiter\"],{include:\"@term\"},[\"\\\\)\",{token:\"meta\",next:\"@pop\"}]],strings:[['~?\"',{token:\"string.delimiter\",next:\"@stringenddoublequote\"}],[\"~?'\",{token:\"string.delimiter\",next:\"@stringendquote\"}]],stringenddoublequote:[[\"\\\\\\\\.\",\"string\"],['\"',{token:\"string.delimiter\",next:\"@pop\"}],[\".\",\"string\"]],stringendquote:[[\"\\\\\\\\.\",\"string\"],[\"'\",{token:\"string.delimiter\",next:\"@pop\"}],[\".\",\"string\"]]}};return s(k);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/twig/twig.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/twig/twig\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var m=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var s=(e,t)=>{for(var r in t)m(e,r,{get:t[r],enumerable:!0})},d=(e,t,r,o)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of n(t))!a.call(e,i)&&i!==r&&m(e,i,{get:()=>t[i],enumerable:!(o=l(t,i))||o.enumerable});return e};var p=e=>d(m({},\"__esModule\",{value:!0}),e);var g={};s(g,{conf:()=>h,language:()=>c});var h={wordPattern:/(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\$\\^\\&\\*\\(\\)\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\s]+)/g,comments:{blockComment:[\"{#\",\"#}\"]},brackets:[[\"{#\",\"#}\"],[\"{%\",\"%}\"],[\"{{\",\"}}\"],[\"(\",\")\"],[\"[\",\"]\"],[\"<!--\",\"-->\"],[\"<\",\">\"]],autoClosingPairs:[{open:\"{# \",close:\" #}\"},{open:\"{% \",close:\" %}\"},{open:\"{{ \",close:\" }}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:'\"',close:'\"'},{open:\"'\",close:\"'\"}],surroundingPairs:[{open:'\"',close:'\"'},{open:\"'\",close:\"'\"},{open:\"<\",close:\">\"}]},c={defaultToken:\"\",tokenPostfix:\"\",ignoreCase:!0,keywords:[\"apply\",\"autoescape\",\"block\",\"deprecated\",\"do\",\"embed\",\"extends\",\"flush\",\"for\",\"from\",\"if\",\"import\",\"include\",\"macro\",\"sandbox\",\"set\",\"use\",\"verbatim\",\"with\",\"endapply\",\"endautoescape\",\"endblock\",\"endembed\",\"endfor\",\"endif\",\"endmacro\",\"endsandbox\",\"endset\",\"endwith\",\"true\",\"false\"],tokenizer:{root:[[/\\s+/],[/{#/,\"comment.twig\",\"@commentState\"],[/{%[-~]?/,\"delimiter.twig\",\"@blockState\"],[/{{[-~]?/,\"delimiter.twig\",\"@variableState\"],[/<!DOCTYPE/,\"metatag.html\",\"@doctype\"],[/<!--/,\"comment.html\",\"@comment\"],[/(<)((?:[\\w\\-]+:)?[\\w\\-]+)(\\s*)(\\/>)/,[\"delimiter.html\",\"tag.html\",\"\",\"delimiter.html\"]],[/(<)(script)/,[\"delimiter.html\",{token:\"tag.html\",next:\"@script\"}]],[/(<)(style)/,[\"delimiter.html\",{token:\"tag.html\",next:\"@style\"}]],[/(<)((?:[\\w\\-]+:)?[\\w\\-]+)/,[\"delimiter.html\",{token:\"tag.html\",next:\"@otherTag\"}]],[/(<\\/)((?:[\\w\\-]+:)?[\\w\\-]+)/,[\"delimiter.html\",{token:\"tag.html\",next:\"@otherTag\"}]],[/</,\"delimiter.html\"],[/[^<{]+/]],commentState:[[/#}/,\"comment.twig\",\"@pop\"],[/./,\"comment.twig\"]],blockState:[[/[-~]?%}/,\"delimiter.twig\",\"@pop\"],[/\\s+/],[/(verbatim)(\\s*)([-~]?%})/,[\"keyword.twig\",\"\",{token:\"delimiter.twig\",next:\"@rawDataState\"}]],{include:\"expression\"}],rawDataState:[[/({%[-~]?)(\\s*)(endverbatim)(\\s*)([-~]?%})/,[\"delimiter.twig\",\"\",\"keyword.twig\",\"\",{token:\"delimiter.twig\",next:\"@popall\"}]],[/./,\"string.twig\"]],variableState:[[/[-~]?}}/,\"delimiter.twig\",\"@pop\"],{include:\"expression\"}],stringState:[[/\"/,\"string.twig\",\"@pop\"],[/#{\\s*/,\"string.twig\",\"@interpolationState\"],[/[^#\"\\\\]*(?:(?:\\\\.|#(?!\\{))[^#\"\\\\]*)*/,\"string.twig\"]],interpolationState:[[/}/,\"string.twig\",\"@pop\"],{include:\"expression\"}],expression:[[/\\s+/],[/\\+|-|\\/{1,2}|%|\\*{1,2}/,\"operators.twig\"],[/(and|or|not|b-and|b-xor|b-or)(\\s+)/,[\"operators.twig\",\"\"]],[/==|!=|<|>|>=|<=/,\"operators.twig\"],[/(starts with|ends with|matches)(\\s+)/,[\"operators.twig\",\"\"]],[/(in)(\\s+)/,[\"operators.twig\",\"\"]],[/(is)(\\s+)/,[\"operators.twig\",\"\"]],[/\\||~|:|\\.{1,2}|\\?{1,2}/,\"operators.twig\"],[/[^\\W\\d][\\w]*/,{cases:{\"@keywords\":\"keyword.twig\",\"@default\":\"variable.twig\"}}],[/\\d+(\\.\\d+)?/,\"number.twig\"],[/\\(|\\)|\\[|\\]|{|}|,/,\"delimiter.twig\"],[/\"([^#\"\\\\]*(?:\\\\.[^#\"\\\\]*)*)\"|\\'([^\\'\\\\]*(?:\\\\.[^\\'\\\\]*)*)\\'/,\"string.twig\"],[/\"/,\"string.twig\",\"@stringState\"],[/=>/,\"operators.twig\"],[/=/,\"operators.twig\"]],doctype:[[/[^>]+/,\"metatag.content.html\"],[/>/,\"metatag.html\",\"@pop\"]],comment:[[/-->/,\"comment.html\",\"@pop\"],[/[^-]+/,\"comment.content.html\"],[/./,\"comment.content.html\"]],otherTag:[[/\\/?>/,\"delimiter.html\",\"@pop\"],[/\"([^\"]*)\"/,\"attribute.value.html\"],[/'([^']*)'/,\"attribute.value.html\"],[/[\\w\\-]+/,\"attribute.name.html\"],[/=/,\"delimiter.html\"],[/[ \\t\\r\\n]+/]],script:[[/type/,\"attribute.name.html\",\"@scriptAfterType\"],[/\"([^\"]*)\"/,\"attribute.value.html\"],[/'([^']*)'/,\"attribute.value.html\"],[/[\\w\\-]+/,\"attribute.name.html\"],[/=/,\"delimiter.html\"],[/>/,{token:\"delimiter.html\",next:\"@scriptEmbedded\",nextEmbedded:\"text/javascript\"}],[/[ \\t\\r\\n]+/],[/(<\\/)(script\\s*)(>)/,[\"delimiter.html\",\"tag.html\",{token:\"delimiter.html\",next:\"@pop\"}]]],scriptAfterType:[[/=/,\"delimiter.html\",\"@scriptAfterTypeEquals\"],[/>/,{token:\"delimiter.html\",next:\"@scriptEmbedded\",nextEmbedded:\"text/javascript\"}],[/[ \\t\\r\\n]+/],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],scriptAfterTypeEquals:[[/\"([^\"]*)\"/,{token:\"attribute.value.html\",switchTo:\"@scriptWithCustomType.$1\"}],[/'([^']*)'/,{token:\"attribute.value.html\",switchTo:\"@scriptWithCustomType.$1\"}],[/>/,{token:\"delimiter.html\",next:\"@scriptEmbedded\",nextEmbedded:\"text/javascript\"}],[/[ \\t\\r\\n]+/],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],scriptWithCustomType:[[/>/,{token:\"delimiter.html\",next:\"@scriptEmbedded.$S2\",nextEmbedded:\"$S2\"}],[/\"([^\"]*)\"/,\"attribute.value.html\"],[/'([^']*)'/,\"attribute.value.html\"],[/[\\w\\-]+/,\"attribute.name.html\"],[/=/,\"delimiter.html\"],[/[ \\t\\r\\n]+/],[/<\\/script\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],scriptEmbedded:[[/<\\/script/,{token:\"@rematch\",next:\"@pop\",nextEmbedded:\"@pop\"}],[/[^<]+/,\"\"]],style:[[/type/,\"attribute.name.html\",\"@styleAfterType\"],[/\"([^\"]*)\"/,\"attribute.value.html\"],[/'([^']*)'/,\"attribute.value.html\"],[/[\\w\\-]+/,\"attribute.name.html\"],[/=/,\"delimiter.html\"],[/>/,{token:\"delimiter.html\",next:\"@styleEmbedded\",nextEmbedded:\"text/css\"}],[/[ \\t\\r\\n]+/],[/(<\\/)(style\\s*)(>)/,[\"delimiter.html\",\"tag.html\",{token:\"delimiter.html\",next:\"@pop\"}]]],styleAfterType:[[/=/,\"delimiter.html\",\"@styleAfterTypeEquals\"],[/>/,{token:\"delimiter.html\",next:\"@styleEmbedded\",nextEmbedded:\"text/css\"}],[/[ \\t\\r\\n]+/],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],styleAfterTypeEquals:[[/\"([^\"]*)\"/,{token:\"attribute.value.html\",switchTo:\"@styleWithCustomType.$1\"}],[/'([^']*)'/,{token:\"attribute.value.html\",switchTo:\"@styleWithCustomType.$1\"}],[/>/,{token:\"delimiter.html\",next:\"@styleEmbedded\",nextEmbedded:\"text/css\"}],[/[ \\t\\r\\n]+/],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],styleWithCustomType:[[/>/,{token:\"delimiter.html\",next:\"@styleEmbedded.$S2\",nextEmbedded:\"$S2\"}],[/\"([^\"]*)\"/,\"attribute.value.html\"],[/'([^']*)'/,\"attribute.value.html\"],[/[\\w\\-]+/,\"attribute.name.html\"],[/=/,\"delimiter.html\"],[/[ \\t\\r\\n]+/],[/<\\/style\\s*>/,{token:\"@rematch\",next:\"@pop\"}]],styleEmbedded:[[/<\\/style/,{token:\"@rematch\",next:\"@pop\",nextEmbedded:\"@pop\"}],[/[^<]+/,\"\"]]}};return p(g);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/typescript/typescript.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/typescript/typescript\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var l=Object.create;var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty;var f=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(t,n)=>(typeof require<\"u\"?require:t)[n]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var k=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),y=(e,t)=>{for(var n in t)s(e,n,{get:t[n],enumerable:!0})},i=(e,t,n,c)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let r of x(t))!u.call(e,r)&&r!==n&&s(e,r,{get:()=>t[r],enumerable:!(c=m(t,r))||c.enumerable});return e},a=(e,t,n)=>(i(e,t,\"default\"),n&&i(n,t,\"default\")),p=(e,t,n)=>(n=e!=null?l(b(e)):{},i(t||!e||!e.__esModule?s(n,\"default\",{value:e,enumerable:!0}):n,e)),w=e=>i(s({},\"__esModule\",{value:!0}),e);var d=k((T,g)=>{var A=p(f(\"vs/editor/editor.api\"));g.exports=A});var h={};y(h,{conf:()=>v,language:()=>$});var o={};a(o,p(d()));var v={wordPattern:/(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,comments:{lineComment:\"//\",blockComment:[\"/*\",\"*/\"]},brackets:[[\"{\",\"}\"],[\"[\",\"]\"],[\"(\",\")\"]],onEnterRules:[{beforeText:/^\\s*\\/\\*\\*(?!\\/)([^\\*]|\\*(?!\\/))*$/,afterText:/^\\s*\\*\\/$/,action:{indentAction:o.languages.IndentAction.IndentOutdent,appendText:\" * \"}},{beforeText:/^\\s*\\/\\*\\*(?!\\/)([^\\*]|\\*(?!\\/))*$/,action:{indentAction:o.languages.IndentAction.None,appendText:\" * \"}},{beforeText:/^(\\t|(\\ \\ ))*\\ \\*(\\ ([^\\*]|\\*(?!\\/))*)?$/,action:{indentAction:o.languages.IndentAction.None,appendText:\"* \"}},{beforeText:/^(\\t|(\\ \\ ))*\\ \\*\\/\\s*$/,action:{indentAction:o.languages.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:'\"',close:'\"',notIn:[\"string\"]},{open:\"'\",close:\"'\",notIn:[\"string\",\"comment\"]},{open:\"`\",close:\"`\",notIn:[\"string\",\"comment\"]},{open:\"/**\",close:\" */\",notIn:[\"string\"]}],folding:{markers:{start:new RegExp(\"^\\\\s*//\\\\s*#?region\\\\b\"),end:new RegExp(\"^\\\\s*//\\\\s*#?endregion\\\\b\")}}},$={defaultToken:\"invalid\",tokenPostfix:\".ts\",keywords:[\"abstract\",\"any\",\"as\",\"asserts\",\"bigint\",\"boolean\",\"break\",\"case\",\"catch\",\"class\",\"continue\",\"const\",\"constructor\",\"debugger\",\"declare\",\"default\",\"delete\",\"do\",\"else\",\"enum\",\"export\",\"extends\",\"false\",\"finally\",\"for\",\"from\",\"function\",\"get\",\"if\",\"implements\",\"import\",\"in\",\"infer\",\"instanceof\",\"interface\",\"is\",\"keyof\",\"let\",\"module\",\"namespace\",\"never\",\"new\",\"null\",\"number\",\"object\",\"out\",\"package\",\"private\",\"protected\",\"public\",\"override\",\"readonly\",\"require\",\"global\",\"return\",\"satisfies\",\"set\",\"static\",\"string\",\"super\",\"switch\",\"symbol\",\"this\",\"throw\",\"true\",\"try\",\"type\",\"typeof\",\"undefined\",\"unique\",\"unknown\",\"var\",\"void\",\"while\",\"with\",\"yield\",\"async\",\"await\",\"of\"],operators:[\"<=\",\">=\",\"==\",\"!=\",\"===\",\"!==\",\"=>\",\"+\",\"-\",\"**\",\"*\",\"/\",\"%\",\"++\",\"--\",\"<<\",\"</\",\">>\",\">>>\",\"&\",\"|\",\"^\",\"!\",\"~\",\"&&\",\"||\",\"??\",\"?\",\":\",\"=\",\"+=\",\"-=\",\"*=\",\"**=\",\"/=\",\"%=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"|=\",\"^=\",\"@\"],symbols:/[=><!~?:&|+\\-*\\/\\^%]+/,escapes:/\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\\d+(_+\\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,regexpctl:/[(){}\\[\\]\\$\\^|\\-*+?\\.]/,regexpesc:/\\\\(?:[bBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:{root:[[/[{}]/,\"delimiter.bracket\"],{include:\"common\"}],common:[[/#?[a-z_$][\\w$]*/,{cases:{\"@keywords\":\"keyword\",\"@default\":\"identifier\"}}],[/[A-Z][\\w\\$]*/,\"type.identifier\"],{include:\"@whitespace\"},[/\\/(?=([^\\\\\\/]|\\\\.)+\\/([dgimsuy]*)(\\s*)(\\.|;|,|\\)|\\]|\\}|$))/,{token:\"regexp\",bracket:\"@open\",next:\"@regexp\"}],[/[()\\[\\]]/,\"@brackets\"],[/[<>](?!@symbols)/,\"@brackets\"],[/!(?=([^=]|$))/,\"delimiter\"],[/@symbols/,{cases:{\"@operators\":\"delimiter\",\"@default\":\"\"}}],[/(@digits)[eE]([\\-+]?(@digits))?/,\"number.float\"],[/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?/,\"number.float\"],[/0[xX](@hexdigits)n?/,\"number.hex\"],[/0[oO]?(@octaldigits)n?/,\"number.octal\"],[/0[bB](@binarydigits)n?/,\"number.binary\"],[/(@digits)n?/,\"number\"],[/[;,.]/,\"delimiter\"],[/\"([^\"\\\\]|\\\\.)*$/,\"string.invalid\"],[/'([^'\\\\]|\\\\.)*$/,\"string.invalid\"],[/\"/,\"string\",\"@string_double\"],[/'/,\"string\",\"@string_single\"],[/`/,\"string\",\"@string_backtick\"]],whitespace:[[/[ \\t\\r\\n]+/,\"\"],[/\\/\\*\\*(?!\\/)/,\"comment.doc\",\"@jsdoc\"],[/\\/\\*/,\"comment\",\"@comment\"],[/\\/\\/.*$/,\"comment\"]],comment:[[/[^\\/*]+/,\"comment\"],[/\\*\\//,\"comment\",\"@pop\"],[/[\\/*]/,\"comment\"]],jsdoc:[[/[^\\/*]+/,\"comment.doc\"],[/\\*\\//,\"comment.doc\",\"@pop\"],[/[\\/*]/,\"comment.doc\"]],regexp:[[/(\\{)(\\d+(?:,\\d*)?)(\\})/,[\"regexp.escape.control\",\"regexp.escape.control\",\"regexp.escape.control\"]],[/(\\[)(\\^?)(?=(?:[^\\]\\\\\\/]|\\\\.)+)/,[\"regexp.escape.control\",{token:\"regexp.escape.control\",next:\"@regexrange\"}]],[/(\\()(\\?:|\\?=|\\?!)/,[\"regexp.escape.control\",\"regexp.escape.control\"]],[/[()]/,\"regexp.escape.control\"],[/@regexpctl/,\"regexp.escape.control\"],[/[^\\\\\\/]/,\"regexp\"],[/@regexpesc/,\"regexp.escape\"],[/\\\\\\./,\"regexp.invalid\"],[/(\\/)([dgimsuy]*)/,[{token:\"regexp\",bracket:\"@close\",next:\"@pop\"},\"keyword.other\"]]],regexrange:[[/-/,\"regexp.escape.control\"],[/\\^/,\"regexp.invalid\"],[/@regexpesc/,\"regexp.escape\"],[/[^\\]]/,\"regexp\"],[/\\]/,{token:\"regexp.escape.control\",next:\"@pop\",bracket:\"@close\"}]],string_double:[[/[^\\\\\"]+/,\"string\"],[/@escapes/,\"string.escape\"],[/\\\\./,\"string.escape.invalid\"],[/\"/,\"string\",\"@pop\"]],string_single:[[/[^\\\\']+/,\"string\"],[/@escapes/,\"string.escape\"],[/\\\\./,\"string.escape.invalid\"],[/'/,\"string\",\"@pop\"]],string_backtick:[[/\\$\\{/,{token:\"delimiter.bracket\",next:\"@bracketCounting\"}],[/[^\\\\`$]+/,\"string\"],[/@escapes/,\"string.escape\"],[/\\\\./,\"string.escape.invalid\"],[/`/,\"string\",\"@pop\"]],bracketCounting:[[/\\{/,\"delimiter.bracket\",\"@bracketCounting\"],[/\\}/,\"delimiter.bracket\",\"@pop\"],{include:\"common\"}]}};return w(h);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/basic-languages/yaml/yaml.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/yaml/yaml\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var m=Object.create;var l=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var w=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(n,t)=>(typeof require<\"u\"?require:n)[t]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var S=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),k=(e,n)=>{for(var t in n)l(e,t,{get:n[t],enumerable:!0})},a=(e,n,t,i)=>{if(n&&typeof n==\"object\"||typeof n==\"function\")for(let r of p(n))!f.call(e,r)&&r!==t&&l(e,r,{get:()=>n[r],enumerable:!(i=b(n,r))||i.enumerable});return e},c=(e,n,t)=>(a(e,n,\"default\"),t&&a(t,n,\"default\")),u=(e,n,t)=>(t=e!=null?m(g(e)):{},a(n||!e||!e.__esModule?l(t,\"default\",{value:e,enumerable:!0}):t,e)),y=e=>a(l({},\"__esModule\",{value:!0}),e);var d=S((C,s)=>{var h=u(w(\"vs/editor/editor.api\"));s.exports=h});var $={};k($,{conf:()=>N,language:()=>x});var o={};c(o,u(d()));var N={comments:{lineComment:\"#\"},brackets:[[\"{\",\"}\"],[\"[\",\"]\"],[\"(\",\")\"]],autoClosingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:'\"',close:'\"'},{open:\"'\",close:\"'\"}],surroundingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:'\"',close:'\"'},{open:\"'\",close:\"'\"}],folding:{offSide:!0},onEnterRules:[{beforeText:/:\\s*$/,action:{indentAction:o.languages.IndentAction.Indent}}]},x={tokenPostfix:\".yaml\",brackets:[{token:\"delimiter.bracket\",open:\"{\",close:\"}\"},{token:\"delimiter.square\",open:\"[\",close:\"]\"}],keywords:[\"true\",\"True\",\"TRUE\",\"false\",\"False\",\"FALSE\",\"null\",\"Null\",\"Null\",\"~\"],numberInteger:/(?:0|[+-]?[0-9]+)/,numberFloat:/(?:0|[+-]?[0-9]+)(?:\\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,numberOctal:/0o[0-7]+/,numberHex:/0x[0-9a-fA-F]+/,numberInfinity:/[+-]?\\.(?:inf|Inf|INF)/,numberNaN:/\\.(?:nan|Nan|NAN)/,numberDate:/\\d{4}-\\d\\d-\\d\\d([Tt ]\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(( ?[+-]\\d\\d?(:\\d\\d)?)|Z)?)?/,escapes:/\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,tokenizer:{root:[{include:\"@whitespace\"},{include:\"@comment\"},[/%[^ ]+.*$/,\"meta.directive\"],[/---/,\"operators.directivesEnd\"],[/\\.{3}/,\"operators.documentEnd\"],[/[-?:](?= )/,\"operators\"],{include:\"@anchor\"},{include:\"@tagHandle\"},{include:\"@flowCollections\"},{include:\"@blockStyle\"},[/@numberInteger(?![ \\t]*\\S+)/,\"number\"],[/@numberFloat(?![ \\t]*\\S+)/,\"number.float\"],[/@numberOctal(?![ \\t]*\\S+)/,\"number.octal\"],[/@numberHex(?![ \\t]*\\S+)/,\"number.hex\"],[/@numberInfinity(?![ \\t]*\\S+)/,\"number.infinity\"],[/@numberNaN(?![ \\t]*\\S+)/,\"number.nan\"],[/@numberDate(?![ \\t]*\\S+)/,\"number.date\"],[/(\".*?\"|'.*?'|[^#'\"]*?)([ \\t]*)(:)( |$)/,[\"type\",\"white\",\"operators\",\"white\"]],{include:\"@flowScalars\"},[/.+?(?=(\\s+#|$))/,{cases:{\"@keywords\":\"keyword\",\"@default\":\"string\"}}]],object:[{include:\"@whitespace\"},{include:\"@comment\"},[/\\}/,\"@brackets\",\"@pop\"],[/,/,\"delimiter.comma\"],[/:(?= )/,\"operators\"],[/(?:\".*?\"|'.*?'|[^,\\{\\[]+?)(?=: )/,\"type\"],{include:\"@flowCollections\"},{include:\"@flowScalars\"},{include:\"@tagHandle\"},{include:\"@anchor\"},{include:\"@flowNumber\"},[/[^\\},]+/,{cases:{\"@keywords\":\"keyword\",\"@default\":\"string\"}}]],array:[{include:\"@whitespace\"},{include:\"@comment\"},[/\\]/,\"@brackets\",\"@pop\"],[/,/,\"delimiter.comma\"],{include:\"@flowCollections\"},{include:\"@flowScalars\"},{include:\"@tagHandle\"},{include:\"@anchor\"},{include:\"@flowNumber\"},[/[^\\],]+/,{cases:{\"@keywords\":\"keyword\",\"@default\":\"string\"}}]],multiString:[[/^( +).+$/,\"string\",\"@multiStringContinued.$1\"]],multiStringContinued:[[/^( *).+$/,{cases:{\"$1==$S2\":\"string\",\"@default\":{token:\"@rematch\",next:\"@popall\"}}}]],whitespace:[[/[ \\t\\r\\n]+/,\"white\"]],comment:[[/#.*$/,\"comment\"]],flowCollections:[[/\\[/,\"@brackets\",\"@array\"],[/\\{/,\"@brackets\",\"@object\"]],flowScalars:[[/\"([^\"\\\\]|\\\\.)*$/,\"string.invalid\"],[/'([^'\\\\]|\\\\.)*$/,\"string.invalid\"],[/'[^']*'/,\"string\"],[/\"/,\"string\",\"@doubleQuotedString\"]],doubleQuotedString:[[/[^\\\\\"]+/,\"string\"],[/@escapes/,\"string.escape\"],[/\\\\./,\"string.escape.invalid\"],[/\"/,\"string\",\"@pop\"]],blockStyle:[[/[>|][0-9]*[+-]?$/,\"operators\",\"@multiString\"]],flowNumber:[[/@numberInteger(?=[ \\t]*[,\\]\\}])/,\"number\"],[/@numberFloat(?=[ \\t]*[,\\]\\}])/,\"number.float\"],[/@numberOctal(?=[ \\t]*[,\\]\\}])/,\"number.octal\"],[/@numberHex(?=[ \\t]*[,\\]\\}])/,\"number.hex\"],[/@numberInfinity(?=[ \\t]*[,\\]\\}])/,\"number.infinity\"],[/@numberNaN(?=[ \\t]*[,\\]\\}])/,\"number.nan\"],[/@numberDate(?=[ \\t]*[,\\]\\}])/,\"number.date\"]],tagHandle:[[/\\![^ ]*/,\"tag\"]],anchor:[[/[&*][^ ]+/,\"namespace\"]]}};return y($);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/editor/editor.main.css",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/.monaco-action-bar{white-space:nowrap;height:100%}.monaco-action-bar .actions-container{display:flex;margin:0 auto;padding:0;height:100%;width:100%;align-items:center}.monaco-action-bar.vertical .actions-container{display:inline-block}.monaco-action-bar .action-item{display:block;align-items:center;justify-content:center;cursor:pointer;position:relative}.monaco-action-bar .action-item.disabled{cursor:default}.monaco-action-bar .action-item .codicon,.monaco-action-bar .action-item .icon{display:block}.monaco-action-bar .action-item .codicon{display:flex;align-items:center;width:16px;height:16px}.monaco-action-bar .action-label{display:flex;font-size:11px;padding:3px;border-radius:5px}.monaco-action-bar .action-item.disabled .action-label,.monaco-action-bar .action-item.disabled .action-label:before,.monaco-action-bar .action-item.disabled .action-label:hover{opacity:.6}.monaco-action-bar.vertical{text-align:left}.monaco-action-bar.vertical .action-item{display:block}.monaco-action-bar.vertical .action-label.separator{display:block;border-bottom:1px solid #bbb;padding-top:1px;margin-left:.8em;margin-right:.8em}.monaco-action-bar .action-item .action-label.separator{width:1px;height:16px;margin:5px 4px!important;cursor:default;min-width:1px;padding:0;background-color:#bbb}.secondary-actions .monaco-action-bar .action-label{margin-left:6px}.monaco-action-bar .action-item.select-container{overflow:hidden;flex:1;max-width:170px;min-width:60px;display:flex;align-items:center;justify-content:center;margin-right:10px}.monaco-action-bar .action-item.action-dropdown-item{display:flex}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator{display:flex;align-items:center;cursor:default}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator>div{width:1px}.monaco-aria-container{position:absolute;left:-999em}.monaco-text-button{box-sizing:border-box;display:flex;width:100%;padding:4px;border-radius:2px;text-align:center;cursor:pointer;justify-content:center;align-items:center;border:1px solid var(--vscode-button-border,transparent);line-height:18px}.monaco-text-button:focus{outline-offset:2px!important}.monaco-text-button:hover{text-decoration:none!important}.monaco-button.disabled,.monaco-button.disabled:focus{opacity:.4!important;cursor:default}.monaco-text-button .codicon{margin:0 .2em;color:inherit!important}.monaco-text-button.monaco-text-button-with-short-label{flex-direction:row;flex-wrap:wrap;padding:0 4px;overflow:hidden;height:28px}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label{flex-basis:100%}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{flex-grow:1;width:0;overflow:hidden}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label,.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{display:flex;justify-content:center;align-items:center;font-weight:400;font-style:inherit;padding:4px 0}.monaco-button-dropdown{display:flex;cursor:pointer}.monaco-button-dropdown.disabled{cursor:default}.monaco-button-dropdown>.monaco-button:focus{outline-offset:-1px!important}.monaco-button-dropdown.disabled>.monaco-button-dropdown-separator,.monaco-button-dropdown.disabled>.monaco-button.disabled,.monaco-button-dropdown.disabled>.monaco-button.disabled:focus{opacity:.4!important}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-right-width:0!important}.monaco-button-dropdown .monaco-button-dropdown-separator{padding:4px 0;cursor:default}.monaco-button-dropdown .monaco-button-dropdown-separator>div{height:100%;width:1px}.monaco-button-dropdown>.monaco-button.monaco-dropdown-button{border:1px solid var(--vscode-button-border,transparent);border-left-width:0!important;border-radius:0 2px 2px 0;display:flex;align-items:center}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-radius:2px 0 0 2px}.monaco-description-button{display:flex;flex-direction:column;align-items:center;margin:4px 5px}.monaco-description-button .monaco-button-description{font-style:italic;font-size:11px;padding:4px 20px}.monaco-description-button .monaco-button-description,.monaco-description-button .monaco-button-label{display:flex;justify-content:center;align-items:center}.monaco-description-button .monaco-button-description>.codicon,.monaco-description-button .monaco-button-label>.codicon{margin:0 .2em;color:inherit!important}.monaco-button-dropdown.default-colors>.monaco-button,.monaco-button.default-colors{color:var(--vscode-button-foreground);background-color:var(--vscode-button-background)}.monaco-button-dropdown.default-colors>.monaco-button:hover,.monaco-button.default-colors:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-button-dropdown.default-colors>.monaco-button.secondary,.monaco-button.default-colors.secondary{color:var(--vscode-button-secondaryForeground);background-color:var(--vscode-button-secondaryBackground)}.monaco-button-dropdown.default-colors>.monaco-button.secondary:hover,.monaco-button.default-colors.secondary:hover{background-color:var(--vscode-button-secondaryHoverBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator{background-color:var(--vscode-button-background);border-top:1px solid var(--vscode-button-border);border-bottom:1px solid var(--vscode-button-border)}.monaco-button-dropdown.default-colors .monaco-button.secondary+.monaco-button-dropdown-separator{background-color:var(--vscode-button-secondaryBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator>div{background-color:var(--vscode-button-separator)}@font-face{font-family:codicon;font-display:block;src:url(../base/browser/ui/codicons/codicon/codicon.ttf) format(\"truetype\")}.codicon[class*=codicon-]{font:normal normal normal 16px/1 codicon;display:inline-block;text-decoration:none;text-rendering:auto;text-align:center;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;user-select:none;-webkit-user-select:none}.codicon-wrench-subaction{opacity:.5}@keyframes codicon-spin{to{transform:rotate(1turn)}}.codicon-gear.codicon-modifier-spin,.codicon-loading.codicon-modifier-spin,.codicon-notebook-state-executing.codicon-modifier-spin,.codicon-sync.codicon-modifier-spin{animation:codicon-spin 1.5s steps(30) infinite}.codicon-modifier-disabled{opacity:.4}.codicon-loading,.codicon-tree-item-loading:before{animation-duration:1s!important;animation-timing-function:cubic-bezier(.53,.21,.29,.67)!important}.context-view{position:absolute}.context-view.fixed{all:initial;font-family:inherit;font-size:13px;position:fixed;color:inherit}.monaco-count-badge{padding:3px 6px;border-radius:11px;font-size:11px;min-width:18px;min-height:18px;line-height:11px;font-weight:400;text-align:center;display:inline-block;box-sizing:border-box}.monaco-count-badge.long{padding:2px 3px;border-radius:2px;min-height:auto;line-height:normal}.monaco-dropdown{height:100%;padding:0}.monaco-dropdown>.dropdown-label{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center}.monaco-dropdown>.dropdown-label>.action-label.disabled{cursor:default}.monaco-dropdown-with-primary{display:flex!important;flex-direction:row;border-radius:5px}.monaco-dropdown-with-primary>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;padding-left:0;padding-right:0;line-height:16px;margin-left:-3px}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{display:block;background-size:16px;background-position:50%;background-repeat:no-repeat}.monaco-findInput{position:relative}.monaco-findInput .monaco-inputbox{font-size:13px;width:100%}.monaco-findInput>.controls{position:absolute;top:3px;right:2px}.vs .monaco-findInput.disabled{background-color:#e1e1e1}.vs-dark .monaco-findInput.disabled{background-color:#333}.hc-light .monaco-findInput.highlight-0 .controls,.monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-0 .1s linear 0s}.hc-light .monaco-findInput.highlight-1 .controls,.monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-1 .1s linear 0s}.hc-black .monaco-findInput.highlight-0 .controls,.vs-dark .monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-dark-0 .1s linear 0s}.hc-black .monaco-findInput.highlight-1 .controls,.vs-dark .monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-dark-1 .1s linear 0s}@keyframes monaco-findInput-highlight-0{0%{background:rgba(253,255,0,.8)}to{background:transparent}}@keyframes monaco-findInput-highlight-1{0%{background:rgba(253,255,0,.8)}99%{background:transparent}}@keyframes monaco-findInput-highlight-dark-0{0%{background:hsla(0,0%,100%,.44)}to{background:transparent}}@keyframes monaco-findInput-highlight-dark-1{0%{background:hsla(0,0%,100%,.44)}99%{background:transparent}}.monaco-hover{cursor:default;position:absolute;overflow:hidden;user-select:text;-webkit-user-select:text;box-sizing:border-box;animation:fadein .1s linear;line-height:1.5em;white-space:var(--vscode-hover-whiteSpace,normal)}.monaco-hover.hidden{display:none}.monaco-hover a:hover:not(.disabled){cursor:pointer}.monaco-hover .hover-contents:not(.html-hover-contents){padding:4px 8px}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents){max-width:var(--vscode-hover-maxWidth,500px);word-wrap:break-word}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents) hr{min-width:100%}.monaco-hover .code,.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6,.monaco-hover p,.monaco-hover ul{margin:8px 0}.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6{line-height:1.1}.monaco-hover code{font-family:var(--monaco-monospace-font)}.monaco-hover hr{box-sizing:border-box;border-left:0;border-right:0;margin:4px -8px -4px;height:1px}.monaco-hover .code:first-child,.monaco-hover p:first-child,.monaco-hover ul:first-child{margin-top:0}.monaco-hover .code:last-child,.monaco-hover p:last-child,.monaco-hover ul:last-child{margin-bottom:0}.monaco-hover ol,.monaco-hover ul{padding-left:20px}.monaco-hover li>p{margin-bottom:0}.monaco-hover li>ul{margin-top:0}.monaco-hover code{border-radius:3px;padding:0 .4em}.monaco-hover .monaco-tokenized-source{white-space:var(--vscode-hover-sourceWhiteSpace,pre-wrap)}.monaco-hover .hover-row.status-bar{font-size:12px;line-height:22px}.monaco-hover .hover-row.status-bar .info{font-style:italic;padding:0 8px}.monaco-hover .hover-row.status-bar .actions{display:flex;padding:0 8px}.monaco-hover .hover-row.status-bar .actions .action-container{margin-right:16px;cursor:pointer}.monaco-hover .hover-row.status-bar .actions .action-container .action .icon{padding-right:4px}.monaco-hover .markdown-hover .hover-contents .codicon{color:inherit;font-size:inherit;vertical-align:middle}.monaco-hover .hover-contents a.code-link,.monaco-hover .hover-contents a.code-link:hover{color:inherit}.monaco-hover .hover-contents a.code-link:before{content:\"(\"}.monaco-hover .hover-contents a.code-link:after{content:\")\"}.monaco-hover .hover-contents a.code-link>span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under;color:var(--vscode-textLink-foreground)}.monaco-hover .hover-contents a.code-link>span:hover{color:var(--vscode-textLink-activeForeground)}.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents):not(.html-hover-contents) span{margin-bottom:4px;display:inline-block}.monaco-hover-content .action-container a{-webkit-user-select:none;user-select:none}.monaco-hover-content .action-container.disabled{pointer-events:none;opacity:.4;cursor:default}.monaco-icon-label{display:flex;overflow:hidden;text-overflow:ellipsis}.monaco-icon-label:before{background-size:16px;background-position:0;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;line-height:inherit!important;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top;flex-shrink:0}.monaco-icon-label-container.disabled{color:var(--vscode-disabledForeground)}.monaco-icon-label>.monaco-icon-label-container{min-width:0;overflow:hidden;text-overflow:ellipsis;flex:1}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{color:inherit;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name>.label-separator{margin:0 2px;opacity:.5}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-suffix-container>.label-suffix{opacity:.7;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.7;margin-left:.5em;font-size:.9em;white-space:pre}.monaco-icon-label.nowrap>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{white-space:nowrap}.vs .monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.95}.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-description-container>.label-description,.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{font-style:italic}.monaco-icon-label.deprecated{text-decoration:line-through;opacity:.66}.monaco-icon-label.italic:after{font-style:italic}.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-description-container>.label-description,.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{text-decoration:line-through}.monaco-icon-label:after{opacity:.75;font-size:90%;font-weight:600;margin:auto 16px 0 5px;text-align:center}.monaco-list:focus .selected .monaco-icon-label,.monaco-list:focus .selected .monaco-icon-label:after{color:inherit!important}.monaco-list-row.focused.selected .label-description,.monaco-list-row.selected .label-description{opacity:.8}.monaco-inputbox{position:relative;display:block;padding:0;box-sizing:border-box;border-radius:2px;font-size:inherit}.monaco-inputbox>.ibwrapper>.input,.monaco-inputbox>.ibwrapper>.mirror{padding:4px 6px}.monaco-inputbox>.ibwrapper{position:relative;width:100%;height:100%}.monaco-inputbox>.ibwrapper>.input{display:inline-block;box-sizing:border-box;width:100%;height:100%;line-height:inherit;border:none;font-family:inherit;font-size:inherit;resize:none;color:inherit}.monaco-inputbox>.ibwrapper>input{text-overflow:ellipsis}.monaco-inputbox>.ibwrapper>textarea.input{display:block;scrollbar-width:none;outline:none}.monaco-inputbox>.ibwrapper>textarea.input::-webkit-scrollbar{display:none}.monaco-inputbox>.ibwrapper>textarea.input.empty{white-space:nowrap}.monaco-inputbox>.ibwrapper>.mirror{position:absolute;display:inline-block;width:100%;top:0;left:0;box-sizing:border-box;white-space:pre-wrap;visibility:hidden;word-wrap:break-word}.monaco-inputbox-container{text-align:right}.monaco-inputbox-container .monaco-inputbox-message{display:inline-block;overflow:hidden;text-align:left;width:100%;box-sizing:border-box;padding:.4em;font-size:12px;line-height:17px;margin-top:-1px;word-wrap:break-word}.monaco-inputbox .monaco-action-bar{position:absolute;right:2px;top:4px}.monaco-inputbox .monaco-action-bar .action-item{margin-left:2px}.monaco-inputbox .monaco-action-bar .action-item .codicon{background-repeat:no-repeat;width:16px;height:16px}.monaco-keybinding{display:flex;align-items:center;line-height:10px}.monaco-keybinding>.monaco-keybinding-key{display:inline-block;border-style:solid;border-width:1px;border-radius:3px;vertical-align:middle;font-size:11px;padding:3px 5px;margin:0 2px}.monaco-keybinding>.monaco-keybinding-key:first-child{margin-left:0}.monaco-keybinding>.monaco-keybinding-key:last-child{margin-right:0}.monaco-keybinding>.monaco-keybinding-key-separator{display:inline-block}.monaco-keybinding>.monaco-keybinding-key-chord-separator{width:6px}.monaco-list{position:relative;height:100%;width:100%;white-space:nowrap}.monaco-list.mouse-support{user-select:none;-webkit-user-select:none}.monaco-list>.monaco-scrollable-element{height:100%}.monaco-list-rows{position:relative;width:100%;height:100%}.monaco-list.horizontal-scrolling .monaco-list-rows{width:auto;min-width:100%}.monaco-list-row{position:absolute;box-sizing:border-box;overflow:hidden;width:100%}.monaco-list.mouse-support .monaco-list-row{cursor:pointer;touch-action:none}.monaco-list .monaco-scrollable-element>.scrollbar.vertical,.monaco-pane-view>.monaco-split-view2.vertical>.monaco-scrollable-element>.scrollbar.vertical{z-index:14}.monaco-list-row.scrolling{display:none!important}.monaco-list.element-focused,.monaco-list.selection-multiple,.monaco-list.selection-single{outline:0!important}.monaco-drag-image{display:inline-block;padding:1px 7px;border-radius:10px;font-size:12px;position:absolute;z-index:1000}.monaco-list-type-filter-message{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;padding:40px 1em 1em;text-align:center;white-space:normal;opacity:.7;pointer-events:none}.monaco-list-type-filter-message:empty{display:none}.monaco-mouse-cursor-text{cursor:text}.monaco-progress-container{width:100%;height:2px;overflow:hidden}.monaco-progress-container .progress-bit{width:2%;height:2px;position:absolute;left:0;display:none}.monaco-progress-container.active .progress-bit{display:inherit}.monaco-progress-container.discrete .progress-bit{left:0;transition:width .1s linear}.monaco-progress-container.discrete.done .progress-bit{width:100%}.monaco-progress-container.infinite .progress-bit{animation-name:progress;animation-duration:4s;animation-iteration-count:infinite;transform:translateZ(0);animation-timing-function:linear}.monaco-progress-container.infinite.infinite-long-running .progress-bit{animation-timing-function:steps(100)}@keyframes progress{0%{transform:translateX(0) scaleX(1)}50%{transform:translateX(2500%) scaleX(3)}to{transform:translateX(4900%) scaleX(1)}}:root{--vscode-sash-size:4px;--vscode-sash-hover-size:4px}.monaco-sash{position:absolute;z-index:35;touch-action:none}.monaco-sash.disabled{pointer-events:none}.monaco-sash.mac.vertical{cursor:col-resize}.monaco-sash.vertical.minimum{cursor:e-resize}.monaco-sash.vertical.maximum{cursor:w-resize}.monaco-sash.mac.horizontal{cursor:row-resize}.monaco-sash.horizontal.minimum{cursor:s-resize}.monaco-sash.horizontal.maximum{cursor:n-resize}.monaco-sash.disabled{cursor:default!important;pointer-events:none!important}.monaco-sash.vertical{cursor:ew-resize;top:0;width:var(--vscode-sash-size);height:100%}.monaco-sash.horizontal{cursor:ns-resize;left:0;width:100%;height:var(--vscode-sash-size)}.monaco-sash:not(.disabled)>.orthogonal-drag-handle{content:\" \";height:calc(var(--vscode-sash-size)*2);width:calc(var(--vscode-sash-size)*2);z-index:100;display:block;cursor:all-scroll;position:absolute}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.start,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.end{cursor:nwse-resize}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.end,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.start{cursor:nesw-resize}.monaco-sash.vertical>.orthogonal-drag-handle.start{left:calc(var(--vscode-sash-size)*-0.5);top:calc(var(--vscode-sash-size)*-1)}.monaco-sash.vertical>.orthogonal-drag-handle.end{left:calc(var(--vscode-sash-size)*-0.5);bottom:calc(var(--vscode-sash-size)*-1)}.monaco-sash.horizontal>.orthogonal-drag-handle.start{top:calc(var(--vscode-sash-size)*-0.5);left:calc(var(--vscode-sash-size)*-1)}.monaco-sash.horizontal>.orthogonal-drag-handle.end{top:calc(var(--vscode-sash-size)*-0.5);right:calc(var(--vscode-sash-size)*-1)}.monaco-sash:before{content:\"\";pointer-events:none;position:absolute;width:100%;height:100%;background:transparent}.monaco-workbench:not(.reduce-motion) .monaco-sash:before{transition:background-color .1s ease-out}.monaco-sash.active:before,.monaco-sash.hover:before{background:var(--vscode-sash-hoverBorder)}.monaco-sash.vertical:before{width:var(--vscode-sash-hover-size);left:calc(50% - var(--vscode-sash-hover-size)/2)}.monaco-sash.horizontal:before{height:var(--vscode-sash-hover-size);top:calc(50% - var(--vscode-sash-hover-size)/2)}.pointer-events-disabled{pointer-events:none!important}.monaco-sash.debug{background:#0ff}.monaco-sash.debug.disabled{background:rgba(0,255,255,.2)}.monaco-sash.debug:not(.disabled)>.orthogonal-drag-handle{background:red}.monaco-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.monaco-scrollable-element>.visible{opacity:1;background:transparent;transition:opacity .1s linear;z-index:11}.monaco-scrollable-element>.invisible{opacity:0;pointer-events:none}.monaco-scrollable-element>.invisible.fade{transition:opacity .8s linear}.monaco-scrollable-element>.shadow{position:absolute;display:none}.monaco-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset}.monaco-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.monaco-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset}.monaco-scrollable-element>.scrollbar>.slider{background:var(--vscode-scrollbarSlider-background)}.monaco-scrollable-element>.scrollbar>.slider:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-scrollable-element>.scrollbar>.slider.active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-select-box{width:100%;cursor:pointer;border-radius:2px}.monaco-select-box-dropdown-container{font-size:13px;font-weight:400;text-transform:none}.monaco-action-bar .action-item.select-container{cursor:default}.monaco-action-bar .action-item .monaco-select-box{cursor:pointer;min-width:100px;min-height:18px;padding:2px 23px 2px 8px}.mac .monaco-action-bar .action-item .monaco-select-box{font-size:11px;border-radius:5px}.monaco-select-box-dropdown-padding{--dropdown-padding-top:1px;--dropdown-padding-bottom:1px}.hc-black .monaco-select-box-dropdown-padding,.hc-light .monaco-select-box-dropdown-padding{--dropdown-padding-top:3px;--dropdown-padding-bottom:4px}.monaco-select-box-dropdown-container{display:none;box-sizing:border-box}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown *{margin:0}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown a:focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown code{line-height:15px;font-family:var(--monaco-monospace-font)}.monaco-select-box-dropdown-container.visible{display:flex;flex-direction:column;text-align:left;width:1px;overflow:hidden;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container{flex:0 0 auto;align-self:flex-start;padding-top:var(--dropdown-padding-top);padding-bottom:var(--dropdown-padding-bottom);padding-left:1px;padding-right:1px;width:100%;overflow:hidden;box-sizing:border-box}.monaco-select-box-dropdown-container>.select-box-details-pane{padding:5px}.hc-black .monaco-select-box-dropdown-container>.select-box-dropdown-list-container{padding-top:var(--dropdown-padding-top);padding-bottom:var(--dropdown-padding-bottom)}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row{cursor:pointer}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-text{text-overflow:ellipsis;overflow:hidden;padding-left:3.5px;white-space:nowrap;float:left}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-detail{text-overflow:ellipsis;overflow:hidden;padding-left:3.5px;white-space:nowrap;float:left;opacity:.7}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-decorator-right{text-overflow:ellipsis;overflow:hidden;padding-right:10px;white-space:nowrap;float:right}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.visually-hidden{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control{flex:1 1 auto;align-self:flex-start;opacity:0}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div{overflow:hidden;max-height:0}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div>.option-text-width-control{padding-left:4px;padding-right:8px;white-space:nowrap}.monaco-split-view2{position:relative;width:100%;height:100%}.monaco-split-view2>.sash-container{position:absolute;width:100%;height:100%;pointer-events:none}.monaco-split-view2>.sash-container>.monaco-sash{pointer-events:auto}.monaco-split-view2>.monaco-scrollable-element{width:100%;height:100%}.monaco-split-view2>.monaco-scrollable-element>.split-view-container{width:100%;height:100%;white-space:nowrap;position:relative}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view{white-space:normal;position:absolute}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view:not(.visible){display:none}.monaco-split-view2.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view{width:100%}.monaco-split-view2.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view{height:100%}.monaco-split-view2.separator-border>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{content:\" \";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--separator-border)}.monaco-split-view2.separator-border.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:100%;width:1px}.monaco-split-view2.separator-border.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:1px;width:100%}.monaco-table{display:flex;flex-direction:column;position:relative;height:100%;width:100%;white-space:nowrap;overflow:hidden}.monaco-table>.monaco-split-view2{border-bottom:1px solid transparent}.monaco-table>.monaco-list{flex:1}.monaco-table-tr{display:flex;height:100%}.monaco-table-th{width:100%;height:100%;font-weight:700;overflow:hidden;text-overflow:ellipsis}.monaco-table-td,.monaco-table-th{box-sizing:border-box;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{content:\"\";position:absolute;left:calc(var(--vscode-sash-size)/2);width:0;border-left:1px solid transparent}.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2,.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{transition:border-color .2s ease-out}.monaco-custom-toggle{margin-left:2px;float:left;cursor:pointer;overflow:hidden;width:20px;height:20px;border-radius:3px;border:1px solid transparent;padding:1px;box-sizing:border-box;user-select:none;-webkit-user-select:none}.monaco-custom-toggle:hover{background-color:var(--vscode-inputOption-hoverBackground)}.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle:hover{border:1px dashed var(--vscode-focusBorder)}.hc-black .monaco-custom-toggle,.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle,.hc-light .monaco-custom-toggle:hover{background:none}.monaco-custom-toggle.monaco-checkbox{height:18px;width:18px;border:1px solid transparent;border-radius:3px;margin-right:9px;margin-left:0;padding:0;opacity:1;background-size:16px!important}.monaco-action-bar .checkbox-action-item{display:flex;align-items:center}.monaco-action-bar .checkbox-action-item>.monaco-custom-toggle.monaco-checkbox{margin-right:4px}.monaco-action-bar .checkbox-action-item>.checkbox-label{font-size:12px}.monaco-custom-toggle.monaco-checkbox:not(.checked):before{visibility:hidden}.monaco-toolbar{height:100%}.monaco-toolbar .toolbar-toggle-more{display:inline-block;padding:0}.monaco-tl-row{display:flex;height:100%;align-items:center;position:relative}.monaco-tl-row.disabled{cursor:default}.monaco-tl-indent{height:100%;position:absolute;top:0;left:16px;pointer-events:none}.hide-arrows .monaco-tl-indent{left:12px}.monaco-tl-indent>.indent-guide{display:inline-block;box-sizing:border-box;height:100%;border-left:1px solid transparent}.monaco-workbench:not(.reduce-motion) .monaco-tl-indent>.indent-guide{transition:border-color .1s linear}.monaco-tl-contents,.monaco-tl-twistie{height:100%}.monaco-tl-twistie{font-size:10px;text-align:right;padding-right:6px;flex-shrink:0;width:16px;display:flex!important;align-items:center;justify-content:center;transform:translateX(3px)}.monaco-tl-contents{flex:1;overflow:hidden}.monaco-tl-twistie:before{border-radius:20px}.monaco-tl-twistie.collapsed:before{transform:rotate(-90deg)}.monaco-tl-twistie.codicon-tree-item-loading:before{animation:codicon-spin 1.25s steps(30) infinite}.monaco-tree-type-filter{position:absolute;top:0;display:flex;padding:3px;max-width:200px;z-index:100;margin:0 6px;border:1px solid var(--vscode-widget-border);border-bottom-left-radius:4px;border-bottom-right-radius:4px}.monaco-workbench:not(.reduce-motion) .monaco-tree-type-filter{transition:top .3s}.monaco-tree-type-filter.disabled{top:-40px!important}.monaco-tree-type-filter-grab{display:flex!important;align-items:center;justify-content:center;cursor:grab;margin-right:2px}.monaco-tree-type-filter-grab.grabbing{cursor:grabbing}.monaco-tree-type-filter-input{flex:1}.monaco-tree-type-filter-input .monaco-inputbox{height:23px}.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.input,.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.mirror{padding:2px 4px}.monaco-tree-type-filter-input .monaco-findInput>.controls{top:2px}.monaco-tree-type-filter-actionbar{margin-left:4px}.monaco-tree-type-filter-actionbar .monaco-action-bar .action-label{padding:2px}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container{position:absolute;top:0;left:0;width:100%;height:0;z-index:13;background-color:var(--vscode-sideBar-background)}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row.monaco-list-row{position:absolute;width:100%;opacity:1!important;overflow:hidden;background-color:var(--vscode-sideBar-background)}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row:hover{background-color:var(--vscode-list-hoverBackground)!important;cursor:pointer}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container.empty,.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container.empty .monaco-tree-sticky-container-shadow{display:none}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-container-shadow{position:absolute;bottom:-3px;left:0;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container[tabindex=\"0\"]:focus{outline:none}.monaco-editor .inputarea{min-width:0;min-height:0;margin:0;padding:0;position:absolute;outline:none!important;resize:none;border:none;overflow:hidden;color:transparent;background-color:transparent;z-index:-10}.monaco-editor .inputarea.ime-input{z-index:10;caret-color:var(--vscode-editorCursor-foreground);color:var(--vscode-editor-foreground)}.monaco-editor .blockDecorations-container{position:absolute;top:0;pointer-events:none}.monaco-editor .blockDecorations-block{position:absolute;box-sizing:border-box}.monaco-editor .margin-view-overlays .current-line,.monaco-editor .view-overlays .current-line{display:block;position:absolute;left:0;top:0;box-sizing:border-box}.monaco-editor .margin-view-overlays .current-line.current-line-margin.current-line-margin-both{border-right:0}.monaco-editor .lines-content .cdr{position:absolute}.monaco-editor .glyph-margin{position:absolute;top:0}.monaco-editor .glyph-margin-widgets .cgmr{position:absolute;display:flex;align-items:center;justify-content:center}.monaco-editor .glyph-margin-widgets .cgmr.codicon-modifier-spin:before{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.monaco-editor .lines-content .core-guide{position:absolute;box-sizing:border-box}.monaco-editor .margin-view-overlays .line-numbers{font-variant-numeric:tabular-nums;position:absolute;text-align:right;display:inline-block;vertical-align:middle;box-sizing:border-box;cursor:default;height:100%}.monaco-editor .relative-current-line-number{text-align:left;display:inline-block;width:100%}.monaco-editor .margin-view-overlays .line-numbers.lh-odd{margin-top:1px}.monaco-editor .line-numbers{color:var(--vscode-editorLineNumber-foreground)}.monaco-editor .line-numbers.active-line-number{color:var(--vscode-editorLineNumber-activeForeground)}.mtkcontrol{color:#fff!important;background:#960000!important}.mtkoverflow{background-color:var(--vscode-button-background,var(--vscode-editor-background));color:var(--vscode-button-foreground,var(--vscode-editor-foreground));border:1px solid var(--vscode-contrastBorder);border-radius:2px;padding:4px;cursor:pointer}.mtkoverflow:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-editor.no-user-select .lines-content,.monaco-editor.no-user-select .view-line,.monaco-editor.no-user-select .view-lines{user-select:none;-webkit-user-select:none}.monaco-editor.mac .lines-content:hover,.monaco-editor.mac .view-line:hover,.monaco-editor.mac .view-lines:hover{user-select:text;-webkit-user-select:text;-ms-user-select:text}.monaco-editor.enable-user-select{user-select:initial;-webkit-user-select:initial}.monaco-editor .view-lines{white-space:nowrap}.monaco-editor .view-line{position:absolute;width:100%}.monaco-editor .mtkw,.monaco-editor .mtkz{color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .mtkz{display:inline-block}.monaco-editor .lines-decorations{position:absolute;top:0;background:#fff}.monaco-editor .margin-view-overlays .cldr{position:absolute;height:100%}.monaco-editor .margin{background-color:var(--vscode-editorGutter-background)}.monaco-editor .margin-view-overlays .cmdr{position:absolute;left:0;width:100%;height:100%}.monaco-editor .minimap.slider-mouseover .minimap-slider{opacity:0;transition:opacity .1s linear}.monaco-editor .minimap.slider-mouseover .minimap-slider.active,.monaco-editor .minimap.slider-mouseover:hover .minimap-slider{opacity:1}.monaco-editor .minimap-slider .minimap-slider-horizontal{background:var(--vscode-minimapSlider-background)}.monaco-editor .minimap-slider:hover .minimap-slider-horizontal{background:var(--vscode-minimapSlider-hoverBackground)}.monaco-editor .minimap-slider.active .minimap-slider-horizontal{background:var(--vscode-minimapSlider-activeBackground)}.monaco-editor .minimap-shadow-visible{box-shadow:var(--vscode-scrollbar-shadow) -6px 0 6px -6px inset}.monaco-editor .minimap-shadow-hidden{position:absolute;width:0}.monaco-editor .minimap-shadow-visible{position:absolute;left:-6px;width:6px}.monaco-editor.no-minimap-shadow .minimap-shadow-visible{position:absolute;left:-1px;width:1px}.minimap.autohide{opacity:0;transition:opacity .5s}.minimap.autohide:hover{opacity:1}.monaco-editor .minimap{z-index:5}.monaco-editor .overlayWidgets{position:absolute;top:0;left:0}.monaco-editor .view-ruler{position:absolute;top:0;box-shadow:1px 0 0 0 var(--vscode-editorRuler-foreground) inset}.monaco-editor .scroll-decoration{position:absolute;top:0;left:0;height:6px;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-editor .lines-content .cslr{position:absolute}.monaco-editor .focused .selected-text{background-color:var(--vscode-editor-selectionBackground)}.monaco-editor .selected-text{background-color:var(--vscode-editor-inactiveSelectionBackground)}.monaco-editor .top-left-radius{border-top-left-radius:3px}.monaco-editor .bottom-left-radius{border-bottom-left-radius:3px}.monaco-editor .top-right-radius{border-top-right-radius:3px}.monaco-editor .bottom-right-radius{border-bottom-right-radius:3px}.monaco-editor.hc-black .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-black .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-black .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-black .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor.hc-light .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-light .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-light .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-light .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor .cursors-layer{position:absolute;top:0}.monaco-editor .cursors-layer>.cursor{position:absolute;overflow:hidden;box-sizing:border-box}.monaco-editor .cursors-layer.cursor-smooth-caret-animation>.cursor{transition:all 80ms}.monaco-editor .cursors-layer.cursor-block-outline-style>.cursor{background:transparent!important;border-style:solid;border-width:1px}.monaco-editor .cursors-layer.cursor-underline-style>.cursor{border-bottom-width:2px;border-bottom-style:solid;background:transparent!important}.monaco-editor .cursors-layer.cursor-underline-thin-style>.cursor{border-bottom-width:1px;border-bottom-style:solid;background:transparent!important}@keyframes monaco-cursor-smooth{0%,20%{opacity:1}60%,to{opacity:0}}@keyframes monaco-cursor-phase{0%,20%{opacity:1}90%,to{opacity:0}}@keyframes monaco-cursor-expand{0%,20%{transform:scaleY(1)}80%,to{transform:scaleY(0)}}.cursor-smooth{animation:monaco-cursor-smooth .5s ease-in-out 0s 20 alternate}.cursor-phase{animation:monaco-cursor-phase .5s ease-in-out 0s 20 alternate}.cursor-expand>.cursor{animation:monaco-cursor-expand .5s ease-in-out 0s 20 alternate}.monaco-editor .mwh{position:absolute;color:var(--vscode-editorWhitespace-foreground)!important}.monaco-diff-editor .diff-review-line-number{text-align:right;display:inline-block;color:var(--vscode-editorLineNumber-foreground)}.monaco-diff-editor .diff-review{position:absolute;user-select:none;-webkit-user-select:none;z-index:99}.monaco-diff-editor .diff-review-summary{padding-left:10px}.monaco-diff-editor .diff-review-shadow{position:absolute;box-shadow:var(--vscode-scrollbar-shadow) 0 -6px 6px -6px inset}.monaco-diff-editor .diff-review-row{white-space:pre}.monaco-diff-editor .diff-review-table{display:table;min-width:100%}.monaco-diff-editor .diff-review-row{display:table-row;width:100%}.monaco-diff-editor .diff-review-spacer{display:inline-block;width:10px;vertical-align:middle}.monaco-diff-editor .diff-review-spacer>.codicon{font-size:9px!important}.monaco-diff-editor .diff-review-actions{display:inline-block;position:absolute;right:10px;top:2px;z-index:100}.monaco-diff-editor .diff-review-actions .action-label{width:16px;height:16px;margin:2px 0}.monaco-diff-editor .revertButton{cursor:pointer}.monaco-editor .diff-hidden-lines-widget{width:100%}.monaco-editor .diff-hidden-lines{height:0;transform:translateY(-10px);font-size:13px;line-height:14px}.monaco-editor .diff-hidden-lines .bottom.dragging,.monaco-editor .diff-hidden-lines .top.dragging,.monaco-editor .diff-hidden-lines:not(.dragging) .bottom:hover,.monaco-editor .diff-hidden-lines:not(.dragging) .top:hover{background-color:var(--vscode-focusBorder)}.monaco-editor .diff-hidden-lines .bottom,.monaco-editor .diff-hidden-lines .top{transition:background-color .1s ease-out;height:4px;background-color:transparent;background-clip:padding-box;border-bottom:2px solid transparent;border-top:4px solid transparent}.monaco-editor .diff-hidden-lines .bottom.canMoveTop:not(.canMoveBottom),.monaco-editor .diff-hidden-lines .top.canMoveTop:not(.canMoveBottom),.monaco-editor.draggingUnchangedRegion.canMoveTop:not(.canMoveBottom) *{cursor:n-resize!important}.monaco-editor .diff-hidden-lines .bottom:not(.canMoveTop).canMoveBottom,.monaco-editor .diff-hidden-lines .top:not(.canMoveTop).canMoveBottom,.monaco-editor.draggingUnchangedRegion:not(.canMoveTop).canMoveBottom *{cursor:s-resize!important}.monaco-editor .diff-hidden-lines .bottom.canMoveTop.canMoveBottom,.monaco-editor .diff-hidden-lines .top.canMoveTop.canMoveBottom,.monaco-editor.draggingUnchangedRegion.canMoveTop.canMoveBottom *{cursor:ns-resize!important}.monaco-editor .diff-hidden-lines .top{transform:translateY(4px)}.monaco-editor .diff-hidden-lines .bottom{transform:translateY(-6px)}.monaco-editor .diff-unchanged-lines{background:var(--vscode-diffEditor-unchangedCodeBackground)}.monaco-editor .noModificationsOverlay{z-index:1;background:var(--vscode-editor-background);display:flex;justify-content:center;align-items:center}.monaco-editor .diff-hidden-lines .center{background:var(--vscode-diffEditor-unchangedRegionBackground);color:var(--vscode-diffEditor-unchangedRegionForeground);overflow:hidden;display:block;text-overflow:ellipsis;white-space:nowrap;height:24px;box-shadow:inset 0 -5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow),inset 0 5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow)}.monaco-editor .diff-hidden-lines .center span.codicon{vertical-align:middle}.monaco-editor .diff-hidden-lines .center a:hover .codicon{cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .diff-hidden-lines div.breadcrumb-item{cursor:pointer}.monaco-editor .diff-hidden-lines div.breadcrumb-item:hover{color:var(--vscode-editorLink-activeForeground)}.monaco-editor .movedModified,.monaco-editor .movedOriginal{border:2px solid var(--vscode-diffEditor-move-border)}.monaco-editor .movedModified.currentMove,.monaco-editor .movedOriginal.currentMove{border:2px solid var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path.currentMove{stroke:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path{pointer-events:visiblestroke}.monaco-diff-editor .moved-blocks-lines .arrow{fill:var(--vscode-diffEditor-move-border)}.monaco-diff-editor .moved-blocks-lines .arrow.currentMove{fill:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines .arrow-rectangle{fill:var(--vscode-editor-background)}.monaco-diff-editor .moved-blocks-lines{position:absolute;pointer-events:none}.monaco-diff-editor .moved-blocks-lines path{fill:none;stroke:var(--vscode-diffEditor-move-border);stroke-width:2}.monaco-editor .char-delete.diff-range-empty{margin-left:-1px;border-left:3px solid var(--vscode-diffEditor-removedTextBackground)}.monaco-editor .char-insert.diff-range-empty{border-left:3px solid var(--vscode-diffEditor-insertedTextBackground)}.monaco-editor .fold-unchanged{cursor:pointer}.monaco-diff-editor .diff-moved-code-block{display:flex;justify-content:flex-end;margin-top:-4px}.monaco-diff-editor .diff-moved-code-block .action-bar .action-label.codicon{width:12px;height:12px;font-size:12px}.monaco-diff-editor .diffOverview{z-index:9}.monaco-diff-editor .diffOverview .diffViewport{z-index:10}.monaco-diff-editor.vs .diffOverview{background:rgba(0,0,0,.03)}.monaco-diff-editor.vs-dark .diffOverview{background:hsla(0,0%,100%,.01)}.monaco-scrollable-element.modified-in-monaco-diff-editor.vs-dark .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.vs .scrollbar{background:transparent}.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-black .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-light .scrollbar{background:none}.monaco-scrollable-element.modified-in-monaco-diff-editor .slider{z-index:10}.modified-in-monaco-diff-editor .slider.active{background:hsla(0,0%,67.1%,.4)}.modified-in-monaco-diff-editor.hc-black .slider.active,.modified-in-monaco-diff-editor.hc-light .slider.active{background:none}.monaco-diff-editor .delete-sign,.monaco-diff-editor .insert-sign,.monaco-editor .delete-sign,.monaco-editor .insert-sign{font-size:11px!important;opacity:.7!important;display:flex!important;align-items:center}.monaco-diff-editor.hc-black .delete-sign,.monaco-diff-editor.hc-black .insert-sign,.monaco-diff-editor.hc-light .delete-sign,.monaco-diff-editor.hc-light .insert-sign,.monaco-editor.hc-black .delete-sign,.monaco-editor.hc-black .insert-sign,.monaco-editor.hc-light .delete-sign,.monaco-editor.hc-light .insert-sign{opacity:1}.monaco-editor .inline-added-margin-view-zone,.monaco-editor .inline-deleted-margin-view-zone{text-align:right}.monaco-editor .arrow-revert-change{z-index:10;position:absolute}.monaco-editor .arrow-revert-change:hover{cursor:pointer}.monaco-editor .view-zones .view-lines .view-line span{display:inline-block}.monaco-editor .margin-view-zones .lightbulb-glyph:hover{cursor:pointer}.monaco-diff-editor .char-insert,.monaco-editor .char-insert{background-color:var(--vscode-diffEditor-insertedTextBackground)}.monaco-diff-editor .line-insert,.monaco-editor .line-insert{background-color:var(--vscode-diffEditor-insertedLineBackground,var(--vscode-diffEditor-insertedTextBackground))}.monaco-editor .char-insert,.monaco-editor .line-insert{box-sizing:border-box;border:1px solid var(--vscode-diffEditor-insertedTextBorder)}.monaco-editor.hc-black .char-insert,.monaco-editor.hc-black .line-insert,.monaco-editor.hc-light .char-insert,.monaco-editor.hc-light .line-insert{border-style:dashed}.monaco-editor .char-delete,.monaco-editor .line-delete{box-sizing:border-box;border:1px solid var(--vscode-diffEditor-removedTextBorder)}.monaco-editor.hc-black .char-delete,.monaco-editor.hc-black .line-delete,.monaco-editor.hc-light .char-delete,.monaco-editor.hc-light .line-delete{border-style:dashed}.monaco-diff-editor .gutter-insert,.monaco-editor .gutter-insert,.monaco-editor .inline-added-margin-view-zone{background-color:var(--vscode-diffEditorGutter-insertedLineBackground,var(--vscode-diffEditor-insertedLineBackground),var(--vscode-diffEditor-insertedTextBackground))}.monaco-diff-editor .char-delete,.monaco-editor .char-delete{background-color:var(--vscode-diffEditor-removedTextBackground)}.monaco-diff-editor .line-delete,.monaco-editor .line-delete{background-color:var(--vscode-diffEditor-removedLineBackground,var(--vscode-diffEditor-removedTextBackground))}.monaco-diff-editor .gutter-delete,.monaco-editor .gutter-delete,.monaco-editor .inline-deleted-margin-view-zone{background-color:var(--vscode-diffEditorGutter-removedLineBackground,var(--vscode-diffEditor-removedLineBackground),var(--vscode-diffEditor-removedTextBackground))}.monaco-diff-editor.side-by-side .editor.modified{box-shadow:-6px 0 5px -5px var(--vscode-scrollbar-shadow);border-left:1px solid var(--vscode-diffEditor-border)}.monaco-diff-editor .diffViewport{background:var(--vscode-scrollbarSlider-background)}.monaco-diff-editor .diffViewport:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-diff-editor .diffViewport:active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-editor .diagonal-fill{background-image:linear-gradient(-45deg,var(--vscode-diffEditor-diagonalFill) 12.5%,transparent 0,transparent 50%,var(--vscode-diffEditor-diagonalFill) 0,var(--vscode-diffEditor-diagonalFill) 62.5%,transparent 0,transparent);background-size:8px 8px}.monaco-workbench .workbench-hover{position:relative;font-size:13px;line-height:19px;z-index:40;overflow:hidden;max-width:700px;background:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);border-radius:3px;color:var(--vscode-editorHoverWidget-foreground);box-shadow:0 2px 8px var(--vscode-widget-shadow)}.monaco-workbench .workbench-hover hr{border-bottom:none}.monaco-workbench .workbench-hover:not(.skip-fade-in){animation:fadein .1s linear}.monaco-workbench .workbench-hover.compact{font-size:12px}.monaco-workbench .workbench-hover.compact .hover-contents{padding:2px 8px}.monaco-workbench .workbench-hover-container.locked .workbench-hover{outline:1px solid var(--vscode-editorHoverWidget-border)}.monaco-workbench .workbench-hover-container.locked .workbench-hover:focus,.monaco-workbench .workbench-hover-lock:focus{outline:1px solid var(--vscode-focusBorder)}.monaco-workbench .workbench-hover-container.locked .workbench-hover-lock:hover{background:var(--vscode-toolbar-hoverBackground)}.monaco-workbench .workbench-hover-pointer{position:absolute;z-index:41;pointer-events:none}.monaco-workbench .workbench-hover-pointer:after{content:\"\";position:absolute;width:5px;height:5px;background-color:var(--vscode-editorHoverWidget-background);border-right:1px solid var(--vscode-editorHoverWidget-border);border-bottom:1px solid var(--vscode-editorHoverWidget-border)}.monaco-workbench .locked .workbench-hover-pointer:after{width:4px;height:4px;border-right-width:2px;border-bottom-width:2px}.monaco-workbench .workbench-hover-pointer.left{left:-3px}.monaco-workbench .workbench-hover-pointer.right{right:3px}.monaco-workbench .workbench-hover-pointer.top{top:-3px}.monaco-workbench .workbench-hover-pointer.bottom{bottom:3px}.monaco-workbench .workbench-hover-pointer.left:after{transform:rotate(135deg)}.monaco-workbench .workbench-hover-pointer.right:after{transform:rotate(315deg)}.monaco-workbench .workbench-hover-pointer.top:after{transform:rotate(225deg)}.monaco-workbench .workbench-hover-pointer.bottom:after{transform:rotate(45deg)}.monaco-workbench .workbench-hover a{color:var(--vscode-textLink-foreground)}.monaco-workbench .workbench-hover a:focus{outline:1px solid;outline-offset:-1px;text-decoration:underline;outline-color:var(--vscode-focusBorder)}.monaco-workbench .workbench-hover a:active,.monaco-workbench .workbench-hover a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-workbench .workbench-hover code{background:var(--vscode-textCodeBlock-background)}.monaco-workbench .workbench-hover .hover-row .actions{background:var(--vscode-editorHoverWidget-statusBarBackground)}.monaco-workbench .workbench-hover.right-aligned{left:1px}.monaco-workbench .workbench-hover.right-aligned .hover-row.status-bar .actions{flex-direction:row-reverse}.monaco-workbench .workbench-hover.right-aligned .hover-row.status-bar .actions .action-container{margin-right:0;margin-left:16px}.monaco-editor .rendered-markdown kbd{background-color:var(--vscode-keybindingLabel-background);color:var(--vscode-keybindingLabel-foreground);border-radius:3px;border:1px solid var(--vscode-keybindingLabel-border);border-bottom-color:var(--vscode-keybindingLabel-bottomBorder);box-shadow:inset 0 -1px 0 var(--vscode-widget-shadow);vertical-align:middle;padding:1px 3px}::-ms-clear{display:none}.monaco-editor .editor-widget input{color:inherit}.monaco-editor{position:relative;overflow:visible;-webkit-text-size-adjust:100%;color:var(--vscode-editor-foreground)}.monaco-editor,.monaco-editor-background{background-color:var(--vscode-editor-background)}.monaco-editor .rangeHighlight{background-color:var(--vscode-editor-rangeHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-rangeHighlightBorder)}.monaco-editor.hc-black .rangeHighlight,.monaco-editor.hc-light .rangeHighlight{border-style:dotted}.monaco-editor .symbolHighlight{background-color:var(--vscode-editor-symbolHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-symbolHighlightBorder)}.monaco-editor.hc-black .symbolHighlight,.monaco-editor.hc-light .symbolHighlight{border-style:dotted}.monaco-editor .overflow-guard{position:relative;overflow:hidden}.monaco-editor .view-overlays{position:absolute;top:0}.monaco-editor .squiggly-error{border-bottom:4px double var(--vscode-editorError-border)}.monaco-editor .squiggly-error:before{display:block;content:\"\";width:100%;height:100%;background:var(--vscode-editorError-background)}.monaco-editor .squiggly-warning{border-bottom:4px double var(--vscode-editorWarning-border)}.monaco-editor .squiggly-warning:before{display:block;content:\"\";width:100%;height:100%;background:var(--vscode-editorWarning-background)}.monaco-editor .squiggly-info{border-bottom:4px double var(--vscode-editorInfo-border)}.monaco-editor .squiggly-info:before{display:block;content:\"\";width:100%;height:100%;background:var(--vscode-editorInfo-background)}.monaco-editor .squiggly-hint{border-bottom:2px dotted var(--vscode-editorHint-border)}.monaco-editor.showUnused .squiggly-unnecessary{border-bottom:2px dashed var(--vscode-editorUnnecessaryCode-border)}.monaco-editor.showDeprecated .squiggly-inline-deprecated{text-decoration:line-through;text-decoration-color:var(--vscode-editor-foreground,inherit)}.monaco-component.multiDiffEditor{background:var(--vscode-multiDiffEditor-background);overflow-y:hidden}.monaco-component .multiDiffEntry{display:flex;flex-direction:column;flex:1;overflow:hidden;border-bottom:1px solid var(--vscode-multiDiffEditor-border)}.monaco-component .multiDiffEntry .collapse-button{margin:0 5px;cursor:pointer}.monaco-component .multiDiffEntry .collapse-button a{display:block}.monaco-component .multiDiffEntry .header{display:flex;align-items:center;padding:8px 5px;color:var(--vscode-foreground);background:var(--vscode-editor-background);z-index:1000;border-top:1px solid var(--vscode-multiDiffEditor-border);border-bottom:1px solid var(--vscode-sideBarSectionHeader-border)}.monaco-component .multiDiffEntry .header.shadow{box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px}.monaco-component .multiDiffEntry .header .file-path{display:flex;flex:1;min-width:0}.monaco-component .multiDiffEntry .header .file-path .title{font-size:14px;line-height:22px}.monaco-component .multiDiffEntry .header .file-path .status{font-weight:600;opacity:.75;margin:0 10px;line-height:22px}.monaco-component .multiDiffEntry .header .file-path .title.original{flex:1;min-width:0;text-overflow:ellipsis}.monaco-component .multiDiffEntry .header .actions{padding:0 8px}.monaco-component .multiDiffEntry .editorParent{flex:1;display:flex;flex-direction:column}.monaco-component .multiDiffEntry .editorContainer{flex:1}.monaco-editor .selection-anchor{background-color:#007acc;width:2px!important}.monaco-editor .bracket-match{box-sizing:border-box;background-color:var(--vscode-editorBracketMatch-background);border:1px solid var(--vscode-editorBracketMatch-border)}.monaco-editor .lightBulbWidget{display:flex;align-items:center;justify-content:center}.monaco-editor .lightBulbWidget:hover{cursor:pointer}.monaco-editor .lightBulbWidget.codicon-light-bulb,.monaco-editor .lightBulbWidget.codicon-lightbulb-sparkle{color:var(--vscode-editorLightBulb-foreground)}.monaco-editor .lightBulbWidget.codicon-lightbulb-autofix,.monaco-editor .lightBulbWidget.codicon-lightbulb-sparkle-autofix{color:var(--vscode-editorLightBulbAutoFix-foreground,var(--vscode-editorLightBulb-foreground))}.monaco-editor .lightBulbWidget.codicon-sparkle-filled{color:var(--vscode-editorLightBulbAi-foreground,var(--vscode-icon-foreground))}.monaco-editor .lightBulbWidget:before{position:relative;z-index:2}.monaco-editor .lightBulbWidget:after{position:absolute;top:0;left:0;content:\"\";display:block;width:100%;height:100%;opacity:.3;background-color:var(--vscode-editor-background);z-index:1}.monaco-editor .codelens-decoration{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap;color:var(--vscode-editorCodeLens-foreground);line-height:var(--vscode-editorCodeLens-lineHeight);font-size:var(--vscode-editorCodeLens-fontSize);padding-right:calc(var(--vscode-editorCodeLens-fontSize)*0.5);font-feature-settings:var(--vscode-editorCodeLens-fontFeatureSettings);font-family:var(--vscode-editorCodeLens-fontFamily),var(--vscode-editorCodeLens-fontFamilyDefault)}.monaco-editor .codelens-decoration>a,.monaco-editor .codelens-decoration>span{user-select:none;-webkit-user-select:none;white-space:nowrap;vertical-align:sub}.monaco-editor .codelens-decoration>a{text-decoration:none}.monaco-editor .codelens-decoration>a:hover{cursor:pointer}.monaco-editor .codelens-decoration>a:hover,.monaco-editor .codelens-decoration>a:hover .codicon{color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .codelens-decoration .codicon{vertical-align:middle;color:currentColor!important;color:var(--vscode-editorCodeLens-foreground);line-height:var(--vscode-editorCodeLens-lineHeight);font-size:var(--vscode-editorCodeLens-fontSize)}.monaco-editor .codelens-decoration>a:hover .codicon:before{cursor:pointer}@keyframes fadein{0%{opacity:0;visibility:visible}to{opacity:1}}.monaco-editor .codelens-decoration.fadein{animation:fadein .1s linear}.colorpicker-widget{height:190px;user-select:none;-webkit-user-select:none}.colorpicker-color-decoration,.hc-light .colorpicker-color-decoration{border:.1em solid #000;box-sizing:border-box;margin:.1em .2em 0;width:.8em;height:.8em;line-height:.8em;display:inline-block;cursor:pointer}.hc-black .colorpicker-color-decoration,.vs-dark .colorpicker-color-decoration{border:.1em solid #eee}.colorpicker-header{display:flex;height:24px;position:relative;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=);background-size:9px 9px;image-rendering:pixelated}.colorpicker-header .picked-color{width:240px;display:flex;align-items:center;justify-content:center;line-height:24px;cursor:pointer;color:#fff;flex:1;white-space:nowrap;overflow:hidden}.colorpicker-header .picked-color .picked-color-presentation{white-space:nowrap;margin-left:5px;margin-right:5px}.colorpicker-header .picked-color .codicon{color:inherit;font-size:14px}.colorpicker-header .picked-color.light{color:#000}.colorpicker-header .original-color{width:74px;z-index:inherit;cursor:pointer}.standalone-colorpicker{color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.colorpicker-header.standalone-colorpicker{border-bottom:none}.colorpicker-header .close-button{cursor:pointer;background-color:var(--vscode-editorHoverWidget-background);border-left:1px solid var(--vscode-editorHoverWidget-border)}.colorpicker-header .close-button-inner-div{width:100%;height:100%;text-align:center}.colorpicker-header .close-button-inner-div:hover{background-color:var(--vscode-toolbar-hoverBackground)}.colorpicker-header .close-icon{padding:3px}.colorpicker-body{display:flex;padding:8px;position:relative}.colorpicker-body .saturation-wrap{overflow:hidden;height:150px;position:relative;min-width:220px;flex:1}.colorpicker-body .saturation-box{height:150px;position:absolute}.colorpicker-body .saturation-selection{width:9px;height:9px;margin:-5px 0 0 -5px;border:1px solid #fff;border-radius:100%;box-shadow:0 0 2px rgba(0,0,0,.8);position:absolute}.colorpicker-body .strip{width:25px;height:150px}.colorpicker-body .standalone-strip{width:25px;height:122px}.colorpicker-body .hue-strip{position:relative;margin-left:8px;cursor:grab;background:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.colorpicker-body .opacity-strip{position:relative;margin-left:8px;cursor:grab;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=);background-size:9px 9px;image-rendering:pixelated}.colorpicker-body .strip.grabbing{cursor:grabbing}.colorpicker-body .slider{position:absolute;top:0;left:-2px;width:calc(100% + 4px);height:4px;box-sizing:border-box;border:1px solid hsla(0,0%,100%,.71);box-shadow:0 0 1px rgba(0,0,0,.85)}.colorpicker-body .strip .overlay{height:150px;pointer-events:none}.colorpicker-body .standalone-strip .standalone-overlay{height:122px;pointer-events:none}.standalone-colorpicker-body{display:block;border:1px solid transparent;border-bottom:1px solid var(--vscode-editorHoverWidget-border);overflow:hidden}.colorpicker-body .insert-button{position:absolute;height:20px;width:58px;padding:0;right:8px;bottom:8px;background:var(--vscode-button-background);color:var(--vscode-button-foreground);border-radius:2px;border:none;cursor:pointer}.colorpicker-body .insert-button:hover{background:var(--vscode-button-hoverBackground)}.monaco-editor.hc-light .dnd-target,.monaco-editor.vs .dnd-target{border-right:2px dotted #000;color:#fff}.monaco-editor.vs-dark .dnd-target{border-right:2px dotted #aeafad;color:#51504f}.monaco-editor.hc-black .dnd-target{border-right:2px dotted #fff;color:#000}.monaco-editor.hc-black.mac.mouse-default .view-lines,.monaco-editor.hc-light.mac.mouse-default .view-lines,.monaco-editor.mouse-default .view-lines,.monaco-editor.vs-dark.mac.mouse-default .view-lines{cursor:default}.monaco-editor.hc-black.mac.mouse-copy .view-lines,.monaco-editor.hc-light.mac.mouse-copy .view-lines,.monaco-editor.mouse-copy .view-lines,.monaco-editor.vs-dark.mac.mouse-copy .view-lines{cursor:copy}.post-edit-widget{box-shadow:0 0 8px 2px var(--vscode-widget-shadow);border:1px solid var(--vscode-widget-border,transparent);border-radius:4px;background-color:var(--vscode-editorWidget-background);overflow:hidden}.post-edit-widget .monaco-button{padding:2px;border:none;border-radius:0}.post-edit-widget .monaco-button:hover{background-color:var(--vscode-button-secondaryHoverBackground)!important}.post-edit-widget .monaco-button .codicon{margin:0}.monaco-editor .findOptionsWidget{background-color:var(--vscode-editorWidget-background);color:var(--vscode-editorWidget-foreground);box-shadow:0 0 8px 2px var(--vscode-widget-shadow);border:2px solid var(--vscode-contrastBorder)}.monaco-editor .find-widget{position:absolute;z-index:35;height:33px;overflow:hidden;line-height:19px;transition:transform .2s linear;padding:0 4px;box-sizing:border-box;transform:translateY(calc(-100% - 10px));border-bottom-left-radius:4px;border-bottom-right-radius:4px}.monaco-workbench.reduce-motion .monaco-editor .find-widget{transition:transform 0ms linear}.monaco-editor .find-widget textarea{margin:0}.monaco-editor .find-widget.hiddenEditor{display:none}.monaco-editor .find-widget.replaceToggled>.replace-part{display:flex}.monaco-editor .find-widget.visible{transform:translateY(0)}.monaco-editor .find-widget .monaco-inputbox.synthetic-focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px}.monaco-editor .find-widget .monaco-inputbox .input{background-color:transparent;min-height:0}.monaco-editor .find-widget .monaco-findInput .input{font-size:13px}.monaco-editor .find-widget>.find-part,.monaco-editor .find-widget>.replace-part{margin:3px 25px 0 17px;font-size:12px;display:flex}.monaco-editor .find-widget>.find-part .monaco-inputbox,.monaco-editor .find-widget>.replace-part .monaco-inputbox{min-height:25px}.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.mirror{padding-right:22px}.monaco-editor .find-widget>.find-part .monaco-inputbox>.ibwrapper>.input,.monaco-editor .find-widget>.find-part .monaco-inputbox>.ibwrapper>.mirror,.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.input,.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.mirror{padding-top:2px;padding-bottom:2px}.monaco-editor .find-widget>.find-part .find-actions,.monaco-editor .find-widget>.replace-part .replace-actions{height:25px;display:flex;align-items:center}.monaco-editor .find-widget .monaco-findInput{vertical-align:middle;display:flex;flex:1}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element{width:100%}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element .scrollbar.vertical{opacity:0}.monaco-editor .find-widget .matchesCount{display:flex;flex:initial;margin:0 0 0 3px;padding:2px 0 0 2px;height:25px;vertical-align:middle;box-sizing:border-box;text-align:center;line-height:23px}.monaco-editor .find-widget .button{width:16px;height:16px;padding:3px;border-radius:5px;flex:initial;margin-left:3px;background-position:50%;background-repeat:no-repeat;cursor:pointer;display:flex;align-items:center;justify-content:center}.monaco-editor .find-widget .codicon-find-selection{width:22px;height:22px;padding:3px;border-radius:5px}.monaco-editor .find-widget .button.left{margin-left:0;margin-right:3px}.monaco-editor .find-widget .button.wide{width:auto;padding:1px 6px;top:-1px}.monaco-editor .find-widget .button.toggle{position:absolute;top:0;left:3px;width:18px;height:100%;border-radius:0;box-sizing:border-box}.monaco-editor .find-widget .button.toggle.disabled{display:none}.monaco-editor .find-widget .disabled{color:var(--vscode-disabledForeground);cursor:default}.monaco-editor .find-widget>.replace-part{display:none}.monaco-editor .find-widget>.replace-part>.monaco-findInput{position:relative;display:flex;vertical-align:middle;flex:auto;flex-grow:0;flex-shrink:0}.monaco-editor .find-widget>.replace-part>.monaco-findInput>.controls{position:absolute;top:3px;right:2px}.monaco-editor .find-widget.reduced-find-widget .matchesCount{display:none}.monaco-editor .find-widget.narrow-find-widget{max-width:257px!important}.monaco-editor .find-widget.collapsed-find-widget{max-width:170px!important}.monaco-editor .find-widget.collapsed-find-widget .button.next,.monaco-editor .find-widget.collapsed-find-widget .button.previous,.monaco-editor .find-widget.collapsed-find-widget .button.replace,.monaco-editor .find-widget.collapsed-find-widget .button.replace-all,.monaco-editor .find-widget.collapsed-find-widget>.find-part .monaco-findInput .controls{display:none}.monaco-editor .findMatch{animation-duration:0;animation-name:inherit!important}.monaco-editor .find-widget .monaco-sash{left:0!important}.monaco-editor.hc-black .find-widget .button:before{position:relative;top:1px;left:2px}.monaco-editor .find-widget>.button.codicon-widget-close{position:absolute;top:5px;right:4px}.monaco-editor .margin-view-overlays .codicon-folding-collapsed,.monaco-editor .margin-view-overlays .codicon-folding-expanded,.monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed,.monaco-editor .margin-view-overlays .codicon-folding-manual-expanded{cursor:pointer;opacity:0;transition:opacity .5s;display:flex;align-items:center;justify-content:center;font-size:140%;margin-left:2px}.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-collapsed,.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-expanded,.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed,.monaco-workbench.reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-expanded{transition:initial}.monaco-editor .margin-view-overlays .codicon.alwaysShowFoldIcons,.monaco-editor .margin-view-overlays .codicon.codicon-folding-collapsed,.monaco-editor .margin-view-overlays .codicon.codicon-folding-manual-collapsed,.monaco-editor .margin-view-overlays:hover .codicon{opacity:1}.monaco-editor .inline-folded:after{color:grey;margin:.1em .2em 0;content:\"\\22EF\";display:inline;line-height:1em;cursor:pointer}.monaco-editor .folded-background{background-color:var(--vscode-editor-foldBackground)}.monaco-editor .cldr.codicon.codicon-folding-collapsed,.monaco-editor .cldr.codicon.codicon-folding-expanded,.monaco-editor .cldr.codicon.codicon-folding-manual-collapsed,.monaco-editor .cldr.codicon.codicon-folding-manual-expanded{color:var(--vscode-editorGutter-foldingControlForeground)!important}.monaco-editor .peekview-widget .head .peekview-title .severity-icon{display:inline-block;vertical-align:text-top;margin-right:4px}.monaco-editor .marker-widget{text-overflow:ellipsis;white-space:nowrap}.monaco-editor .marker-widget>.stale{opacity:.6;font-style:italic}.monaco-editor .marker-widget .title{display:inline-block;padding-right:5px}.monaco-editor .marker-widget .descriptioncontainer{position:absolute;white-space:pre;user-select:text;-webkit-user-select:text;padding:8px 12px 0 20px}.monaco-editor .marker-widget .descriptioncontainer .message{display:flex;flex-direction:column}.monaco-editor .marker-widget .descriptioncontainer .message .details{padding-left:6px}.monaco-editor .marker-widget .descriptioncontainer .message .source,.monaco-editor .marker-widget .descriptioncontainer .message span.code{opacity:.6}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link{opacity:.6;color:inherit}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:before{content:\"(\"}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:after{content:\")\"}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link>span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under;color:var(--vscode-textLink-activeForeground)}.monaco-editor .marker-widget .descriptioncontainer .filename{cursor:pointer;color:var(--vscode-textLink-activeForeground)}.monaco-editor .goto-definition-link{text-decoration:underline;cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .zone-widget .zone-widget-container.reference-zone-widget{border-top-width:1px;border-bottom-width:1px}.monaco-editor .reference-zone-widget .inline{display:inline-block;vertical-align:top}.monaco-editor .reference-zone-widget .messages{height:100%;width:100%;text-align:center;padding:3em 0}.monaco-editor .reference-zone-widget .ref-tree{line-height:23px;background-color:var(--vscode-peekViewResult-background);color:var(--vscode-peekViewResult-lineForeground)}.monaco-editor .reference-zone-widget .ref-tree .reference{text-overflow:ellipsis;overflow:hidden}.monaco-editor .reference-zone-widget .ref-tree .reference-file{display:inline-flex;width:100%;height:100%;color:var(--vscode-peekViewResult-fileForeground)}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .selected .reference-file{color:inherit!important}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows>.monaco-list-row.selected:not(.highlighted){background-color:var(--vscode-peekViewResult-selectionBackground);color:var(--vscode-peekViewResult-selectionForeground)!important}.monaco-editor .reference-zone-widget .ref-tree .reference-file .count{margin-right:12px;margin-left:auto}.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight{background-color:var(--vscode-peekViewResult-matchHighlightBackground)}.monaco-editor .reference-zone-widget .preview .reference-decoration{background-color:var(--vscode-peekViewEditor-matchHighlightBackground);border:2px solid var(--vscode-peekViewEditor-matchHighlightBorder);box-sizing:border-box}.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input,.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background{background-color:var(--vscode-peekViewEditor-background)}.monaco-editor .reference-zone-widget .preview .monaco-editor .margin{background-color:var(--vscode-peekViewEditorGutter-background)}.monaco-editor.hc-black .reference-zone-widget .ref-tree .reference-file,.monaco-editor.hc-light .reference-zone-widget .ref-tree .reference-file{font-weight:700}.monaco-editor.hc-black .reference-zone-widget .ref-tree .referenceMatch .highlight,.monaco-editor.hc-light .reference-zone-widget .ref-tree .referenceMatch .highlight{border:1px dotted var(--vscode-contrastActiveBorder,transparent);box-sizing:border-box}.monaco-editor .hoverHighlight{background-color:var(--vscode-editor-hoverHighlightBackground)}.monaco-editor .monaco-hover{color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);border-radius:3px}.monaco-editor .monaco-hover a{color:var(--vscode-textLink-foreground)}.monaco-editor .monaco-hover a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .monaco-hover .hover-row .actions{background-color:var(--vscode-editorHoverWidget-statusBarBackground)}.monaco-editor .monaco-hover code{background-color:var(--vscode-textCodeBlock-background)}.monaco-editor.vs .valueSetReplacement{outline:solid 2px var(--vscode-editorBracketMatch-border)}.monaco-editor .suggest-preview-additional-widget{white-space:nowrap}.monaco-editor .suggest-preview-additional-widget .content-spacer{color:transparent;white-space:pre}.monaco-editor .suggest-preview-additional-widget .button{display:inline-block;cursor:pointer;text-decoration:underline;text-underline-position:under}.monaco-editor .ghost-text-hidden{opacity:0;font-size:0}.monaco-editor .ghost-text-decoration,.monaco-editor .suggest-preview-text .ghost-text{font-style:italic}.monaco-editor .inline-completion-text-to-replace{text-decoration:underline;text-underline-position:under}.monaco-editor .ghost-text-decoration,.monaco-editor .ghost-text-decoration-preview,.monaco-editor .suggest-preview-text .ghost-text{color:var(--vscode-editorGhostText-foreground)!important;background-color:var(--vscode-editorGhostText-background);border:1px solid var(--vscode-editorGhostText-border)}.monaco-editor .inlineSuggestionsHints.withBorder{z-index:39;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor .inlineSuggestionsHints a,.monaco-editor .inlineSuggestionsHints a:hover{color:var(--vscode-foreground)}.monaco-editor .inlineSuggestionsHints .keybinding{display:flex;margin-left:4px;opacity:.6}.monaco-editor .inlineSuggestionsHints .keybinding .monaco-keybinding-key{font-size:8px;padding:2px 3px}.monaco-editor .inlineSuggestionsHints .availableSuggestionCount a{display:flex;min-width:19px;justify-content:center}.monaco-editor .inlineSuggestionStatusBarItemLabel{margin-right:2px}.inline-editor-progress-decoration{display:inline-block;width:1em;height:1em}.inline-progress-widget{display:flex!important;justify-content:center;align-items:center}.inline-progress-widget .icon{font-size:80%!important}.inline-progress-widget:hover .icon{font-size:90%!important;animation:none}.inline-progress-widget:hover .icon:before{content:\"\\ea76\"}.monaco-editor .linked-editing-decoration{background-color:var(--vscode-editor-linkedEditingBackground);min-width:1px}.monaco-editor .detected-link,.monaco-editor .detected-link-active{text-decoration:underline;text-underline-position:under}.monaco-editor .detected-link-active{cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .monaco-editor-overlaymessage{padding-bottom:8px;z-index:10000}.monaco-editor .monaco-editor-overlaymessage.below{padding-bottom:0;padding-top:8px;z-index:10000}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.monaco-editor .monaco-editor-overlaymessage.fadeIn{animation:fadeIn .15s ease-out}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.monaco-editor .monaco-editor-overlaymessage.fadeOut{animation:fadeOut .1s ease-out}.monaco-editor .monaco-editor-overlaymessage .message{padding:2px 4px;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-inputValidation-infoBorder);border-radius:3px}.monaco-editor .monaco-editor-overlaymessage .message p{margin-block:0}.monaco-editor .monaco-editor-overlaymessage .message a{color:var(--vscode-textLink-foreground)}.monaco-editor .monaco-editor-overlaymessage .message a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor.hc-black .monaco-editor-overlaymessage .message,.monaco-editor.hc-light .monaco-editor-overlaymessage .message{border-width:2px}.monaco-editor .monaco-editor-overlaymessage .anchor{width:0!important;height:0!important;z-index:1000;border:8px solid transparent;position:absolute;left:2px}.monaco-editor .monaco-editor-overlaymessage .anchor.top{border-bottom-color:var(--vscode-inputValidation-infoBorder)}.monaco-editor .monaco-editor-overlaymessage .anchor.below{border-top-color:var(--vscode-inputValidation-infoBorder)}.monaco-editor .monaco-editor-overlaymessage.below .anchor.below,.monaco-editor .monaco-editor-overlaymessage:not(.below) .anchor.top{display:none}.monaco-editor .monaco-editor-overlaymessage.below .anchor.top{display:inherit;top:-8px}.monaco-editor .parameter-hints-widget{z-index:39;display:flex;flex-direction:column;line-height:1.5em;cursor:default;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.hc-black .monaco-editor .parameter-hints-widget,.hc-light .monaco-editor .parameter-hints-widget{border-width:2px}.monaco-editor .parameter-hints-widget>.phwrapper{max-width:440px;display:flex;flex-direction:row}.monaco-editor .parameter-hints-widget.multiple{min-height:3.3em;padding:0}.monaco-editor .parameter-hints-widget.multiple .body:before{content:\"\";display:block;height:100%;position:absolute;opacity:.5;border-left:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor .parameter-hints-widget p,.monaco-editor .parameter-hints-widget ul{margin:8px 0}.monaco-editor .parameter-hints-widget .body,.monaco-editor .parameter-hints-widget .monaco-scrollable-element{display:flex;flex:1;flex-direction:column;min-height:100%}.monaco-editor .parameter-hints-widget .signature{padding:4px 5px;position:relative}.monaco-editor .parameter-hints-widget .signature.has-docs:after{content:\"\";display:block;position:absolute;left:0;width:100%;padding-top:4px;opacity:.5;border-bottom:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor .parameter-hints-widget .docs{padding:0 10px 0 5px;white-space:pre-wrap}.monaco-editor .parameter-hints-widget .docs.empty{display:none}.monaco-editor .parameter-hints-widget .docs a{color:var(--vscode-textLink-foreground)}.monaco-editor .parameter-hints-widget .docs a:hover{color:var(--vscode-textLink-activeForeground);cursor:pointer}.monaco-editor .parameter-hints-widget .docs .markdown-docs{white-space:normal}.monaco-editor .parameter-hints-widget .docs code{font-family:var(--monaco-monospace-font);border-radius:3px;padding:0 .4em;background-color:var(--vscode-textCodeBlock-background)}.monaco-editor .parameter-hints-widget .docs .code,.monaco-editor .parameter-hints-widget .docs .monaco-tokenized-source{white-space:pre-wrap}.monaco-editor .parameter-hints-widget .controls{display:none;flex-direction:column;align-items:center;min-width:22px;justify-content:flex-end}.monaco-editor .parameter-hints-widget.multiple .controls{display:flex;padding:0 2px}.monaco-editor .parameter-hints-widget.multiple .button{width:16px;height:16px;background-repeat:no-repeat;cursor:pointer}.monaco-editor .parameter-hints-widget .button.previous{bottom:24px}.monaco-editor .parameter-hints-widget .overloads{text-align:center;height:12px;line-height:12px;font-family:var(--monaco-monospace-font)}.monaco-editor .parameter-hints-widget .signature .parameter.active{color:var(--vscode-editorHoverWidget-highlightForeground);font-weight:700}.monaco-editor .parameter-hints-widget .documentation-parameter>.parameter{font-weight:700;margin-right:.5em}.monaco-editor .peekview-widget .head{box-sizing:border-box;display:flex;justify-content:space-between;flex-wrap:nowrap}.monaco-editor .peekview-widget .head .peekview-title{display:flex;align-items:baseline;font-size:13px;margin-left:20px;min-width:0;text-overflow:ellipsis;overflow:hidden}.monaco-editor .peekview-widget .head .peekview-title.clickable{cursor:pointer}.monaco-editor .peekview-widget .head .peekview-title .dirname:not(:empty){font-size:.9em;margin-left:.5em}.monaco-editor .peekview-widget .head .peekview-title .dirname,.monaco-editor .peekview-widget .head .peekview-title .filename,.monaco-editor .peekview-widget .head .peekview-title .meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.monaco-editor .peekview-widget .head .peekview-title .meta:not(:empty):before{content:\"-\";padding:0 .3em}.monaco-editor .peekview-widget .head .peekview-actions{flex:1;text-align:right;padding-right:2px}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar{display:inline-block}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar,.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar>.actions-container{height:100%}.monaco-editor .peekview-widget>.body{border-top:1px solid;position:relative}.monaco-editor .peekview-widget .head .peekview-title .codicon{margin-right:4px;align-self:center}.monaco-editor .peekview-widget .monaco-list .monaco-list-row.focused .codicon{color:inherit!important}.monaco-editor .rename-box{z-index:100;color:inherit;border-radius:4px}.monaco-editor .rename-box.preview{padding:4px 4px 0}.monaco-editor .rename-box .rename-input{padding:3px;border-radius:2px}.monaco-editor .rename-box .rename-label{display:none;opacity:.8}.monaco-editor .rename-box.preview .rename-label{display:inherit}.monaco-editor .snippet-placeholder{min-width:2px;outline-style:solid;outline-width:1px;background-color:var(--vscode-editor-snippetTabstopHighlightBackground,transparent);outline-color:var(--vscode-editor-snippetTabstopHighlightBorder,transparent)}.monaco-editor .finish-snippet-placeholder{outline-style:solid;outline-width:1px;background-color:var(--vscode-editor-snippetFinalTabstopHighlightBackground,transparent);outline-color:var(--vscode-editor-snippetFinalTabstopHighlightBorder,transparent)}.monaco-editor .sticky-widget{overflow:hidden}.monaco-editor .sticky-widget-line-numbers{float:left;background-color:inherit}.monaco-editor .sticky-widget-lines-scrollable{display:inline-block;position:absolute;overflow:hidden;width:var(--vscode-editorStickyScroll-scrollableWidth);background-color:inherit}.monaco-editor .sticky-widget-lines{position:absolute;background-color:inherit}.monaco-editor .sticky-line-content,.monaco-editor .sticky-line-number{color:var(--vscode-editorLineNumber-foreground);white-space:nowrap;display:inline-block;position:absolute;background-color:inherit}.monaco-editor .sticky-line-number .codicon-folding-collapsed,.monaco-editor .sticky-line-number .codicon-folding-expanded{float:right;transition:var(--vscode-editorStickyScroll-foldingOpacityTransition)}.monaco-editor .sticky-line-content{width:var(--vscode-editorStickyScroll-scrollableWidth);background-color:inherit;white-space:nowrap}.monaco-editor .sticky-line-number-inner{display:inline-block;text-align:right}.monaco-editor .sticky-widget{border-bottom:1px solid var(--vscode-editorStickyScroll-border)}.monaco-editor .sticky-line-content:hover{background-color:var(--vscode-editorStickyScrollHover-background);cursor:pointer}.monaco-editor .sticky-widget{width:100%;box-shadow:var(--vscode-editorStickyScroll-shadow) 0 3px 2px -2px;z-index:4;background-color:var(--vscode-editorStickyScroll-background)}.monaco-editor .sticky-widget.peek{background-color:var(--vscode-peekViewEditorStickyScroll-background)}.monaco-editor .suggest-widget{width:430px;z-index:40;display:flex;flex-direction:column;border-radius:3px}.monaco-editor .suggest-widget.message{flex-direction:row;align-items:center}.monaco-editor .suggest-details,.monaco-editor .suggest-widget{flex:0 1 auto;width:100%;border:1px solid var(--vscode-editorSuggestWidget-border);background-color:var(--vscode-editorSuggestWidget-background)}.monaco-editor.hc-black .suggest-details,.monaco-editor.hc-black .suggest-widget,.monaco-editor.hc-light .suggest-details,.monaco-editor.hc-light .suggest-widget{border-width:2px}.monaco-editor .suggest-widget .suggest-status-bar{box-sizing:border-box;display:none;flex-flow:row nowrap;justify-content:space-between;width:100%;font-size:80%;padding:0 4px;border-top:1px solid var(--vscode-editorSuggestWidget-border);overflow:hidden}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar{display:flex}.monaco-editor .suggest-widget .suggest-status-bar .left{padding-right:8px}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-label{color:var(--vscode-editorSuggestWidgetStatus-foreground)}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label{margin-right:0}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label:after{content:\", \";margin-right:.3em}.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore,.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label{width:100%}.monaco-editor .suggest-widget>.message{padding-left:22px}.monaco-editor .suggest-widget>.tree{height:100%;width:100%}.monaco-editor .suggest-widget .monaco-list{user-select:none;-webkit-user-select:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row{display:flex;-mox-box-sizing:border-box;box-sizing:border-box;padding-right:10px;background-repeat:no-repeat;background-position:2px 2px;white-space:nowrap;cursor:pointer;touch-action:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused{color:var(--vscode-editorSuggestWidget-selectedForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused .codicon{color:var(--vscode-editorSuggestWidget-selectedIconForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents{flex:1;height:100%;overflow:hidden;padding-left:2px}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:pre;justify-content:space-between}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{display:flex}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label{color:var(--vscode-editorSuggestWidget-foreground)}.monaco-editor .suggest-widget:not(.frozen) .monaco-highlighted-label .highlight{font-weight:700}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-highlightForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-focusHighlightForeground)}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:before{color:inherit;opacity:1;font-size:14px;cursor:pointer}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close{position:absolute;top:6px;right:2px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close:hover,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:hover{opacity:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{opacity:.7}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label{overflow:hidden;text-overflow:ellipsis;opacity:.6}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label{margin-left:12px;opacity:.4;font-size:85%;line-height:normal;text-overflow:ellipsis;overflow:hidden;align-self:center}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{font-size:85%;margin-left:1.1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source{display:inline}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{display:none}.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label,.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label,.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label{display:inline}.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right.can-expand-details>.details-label{width:calc(100% - 26px)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left{flex-shrink:1;flex-grow:1;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label{flex-shrink:0}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label{max-width:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label{flex-shrink:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{overflow:hidden;flex-shrink:4;max-width:70%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:inline-block;position:absolute;right:10px;width:18px;height:18px;visibility:hidden}.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none!important}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore{display:inline-block}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right>.readMore{visibility:visible}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated{opacity:.66;text-decoration:unset}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container{text-decoration:line-through}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label:before{height:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon{display:block;height:16px;width:16px;margin-left:2px;background-repeat:no-repeat;background-size:80%;background-position:50%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.hide{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .suggest-icon{display:flex;align-items:center;margin-right:4px}.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .icon,.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .suggest-icon:before{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.customcolor .colorspan{margin:0 0 0 .3em;border:.1em solid #000;width:.7em;height:.7em;display:inline-block}.monaco-editor .suggest-details-container{z-index:41}.monaco-editor .suggest-details{display:flex;flex-direction:column;cursor:default;color:var(--vscode-editorSuggestWidget-foreground)}.monaco-editor .suggest-details.focused{border-color:var(--vscode-focusBorder)}.monaco-editor .suggest-details a{color:var(--vscode-textLink-foreground)}.monaco-editor .suggest-details a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .suggest-details code{background-color:var(--vscode-textCodeBlock-background)}.monaco-editor .suggest-details.no-docs{display:none}.monaco-editor .suggest-details>.monaco-scrollable-element{flex:1}.monaco-editor .suggest-details>.monaco-scrollable-element>.body{box-sizing:border-box;height:100%;width:100%}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type{flex:2;overflow:hidden;text-overflow:ellipsis;opacity:.7;white-space:pre;margin:0 24px 0 0;padding:4px 0 12px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type.auto-wrap{white-space:normal;word-break:break-all}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs{margin:0;padding:4px 5px;white-space:pre-wrap}.monaco-editor .suggest-details.no-type>.monaco-scrollable-element>.body>.docs{margin-right:24px;overflow:hidden}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs{padding:0;white-space:normal;min-height:calc(1rem + 8px)}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div,.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>span:not(:empty){padding:4px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:first-child{margin-top:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:last-child{margin-bottom:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .monaco-tokenized-source{white-space:pre}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs .code{white-space:pre-wrap;word-wrap:break-word}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .codicon{vertical-align:sub}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>p:empty{display:none}.monaco-editor .suggest-details code{border-radius:3px;padding:0 .4em}.monaco-editor .suggest-details ol,.monaco-editor .suggest-details ul{padding-left:20px}.monaco-editor .suggest-details p code{font-family:var(--monaco-monospace-font)}.monaco-editor .codicon.codicon-symbol-array,.monaco-workbench .codicon.codicon-symbol-array{color:var(--vscode-symbolIcon-arrayForeground)}.monaco-editor .codicon.codicon-symbol-boolean,.monaco-workbench .codicon.codicon-symbol-boolean{color:var(--vscode-symbolIcon-booleanForeground)}.monaco-editor .codicon.codicon-symbol-class,.monaco-workbench .codicon.codicon-symbol-class{color:var(--vscode-symbolIcon-classForeground)}.monaco-editor .codicon.codicon-symbol-method,.monaco-workbench .codicon.codicon-symbol-method{color:var(--vscode-symbolIcon-methodForeground)}.monaco-editor .codicon.codicon-symbol-color,.monaco-workbench .codicon.codicon-symbol-color{color:var(--vscode-symbolIcon-colorForeground)}.monaco-editor .codicon.codicon-symbol-constant,.monaco-workbench .codicon.codicon-symbol-constant{color:var(--vscode-symbolIcon-constantForeground)}.monaco-editor .codicon.codicon-symbol-constructor,.monaco-workbench .codicon.codicon-symbol-constructor{color:var(--vscode-symbolIcon-constructorForeground)}.monaco-editor .codicon.codicon-symbol-enum,.monaco-editor .codicon.codicon-symbol-value,.monaco-workbench .codicon.codicon-symbol-enum,.monaco-workbench .codicon.codicon-symbol-value{color:var(--vscode-symbolIcon-enumeratorForeground)}.monaco-editor .codicon.codicon-symbol-enum-member,.monaco-workbench .codicon.codicon-symbol-enum-member{color:var(--vscode-symbolIcon-enumeratorMemberForeground)}.monaco-editor .codicon.codicon-symbol-event,.monaco-workbench .codicon.codicon-symbol-event{color:var(--vscode-symbolIcon-eventForeground)}.monaco-editor .codicon.codicon-symbol-field,.monaco-workbench .codicon.codicon-symbol-field{color:var(--vscode-symbolIcon-fieldForeground)}.monaco-editor .codicon.codicon-symbol-file,.monaco-workbench .codicon.codicon-symbol-file{color:var(--vscode-symbolIcon-fileForeground)}.monaco-editor .codicon.codicon-symbol-folder,.monaco-workbench .codicon.codicon-symbol-folder{color:var(--vscode-symbolIcon-folderForeground)}.monaco-editor .codicon.codicon-symbol-function,.monaco-workbench .codicon.codicon-symbol-function{color:var(--vscode-symbolIcon-functionForeground)}.monaco-editor .codicon.codicon-symbol-interface,.monaco-workbench .codicon.codicon-symbol-interface{color:var(--vscode-symbolIcon-interfaceForeground)}.monaco-editor .codicon.codicon-symbol-key,.monaco-workbench .codicon.codicon-symbol-key{color:var(--vscode-symbolIcon-keyForeground)}.monaco-editor .codicon.codicon-symbol-keyword,.monaco-workbench .codicon.codicon-symbol-keyword{color:var(--vscode-symbolIcon-keywordForeground)}.monaco-editor .codicon.codicon-symbol-module,.monaco-workbench .codicon.codicon-symbol-module{color:var(--vscode-symbolIcon-moduleForeground)}.monaco-editor .codicon.codicon-symbol-namespace,.monaco-workbench .codicon.codicon-symbol-namespace{color:var(--vscode-symbolIcon-namespaceForeground)}.monaco-editor .codicon.codicon-symbol-null,.monaco-workbench .codicon.codicon-symbol-null{color:var(--vscode-symbolIcon-nullForeground)}.monaco-editor .codicon.codicon-symbol-number,.monaco-workbench .codicon.codicon-symbol-number{color:var(--vscode-symbolIcon-numberForeground)}.monaco-editor .codicon.codicon-symbol-object,.monaco-workbench .codicon.codicon-symbol-object{color:var(--vscode-symbolIcon-objectForeground)}.monaco-editor .codicon.codicon-symbol-operator,.monaco-workbench .codicon.codicon-symbol-operator{color:var(--vscode-symbolIcon-operatorForeground)}.monaco-editor .codicon.codicon-symbol-package,.monaco-workbench .codicon.codicon-symbol-package{color:var(--vscode-symbolIcon-packageForeground)}.monaco-editor .codicon.codicon-symbol-property,.monaco-workbench .codicon.codicon-symbol-property{color:var(--vscode-symbolIcon-propertyForeground)}.monaco-editor .codicon.codicon-symbol-reference,.monaco-workbench .codicon.codicon-symbol-reference{color:var(--vscode-symbolIcon-referenceForeground)}.monaco-editor .codicon.codicon-symbol-snippet,.monaco-workbench .codicon.codicon-symbol-snippet{color:var(--vscode-symbolIcon-snippetForeground)}.monaco-editor .codicon.codicon-symbol-string,.monaco-workbench .codicon.codicon-symbol-string{color:var(--vscode-symbolIcon-stringForeground)}.monaco-editor .codicon.codicon-symbol-struct,.monaco-workbench .codicon.codicon-symbol-struct{color:var(--vscode-symbolIcon-structForeground)}.monaco-editor .codicon.codicon-symbol-text,.monaco-workbench .codicon.codicon-symbol-text{color:var(--vscode-symbolIcon-textForeground)}.monaco-editor .codicon.codicon-symbol-type-parameter,.monaco-workbench .codicon.codicon-symbol-type-parameter{color:var(--vscode-symbolIcon-typeParameterForeground)}.monaco-editor .codicon.codicon-symbol-unit,.monaco-workbench .codicon.codicon-symbol-unit{color:var(--vscode-symbolIcon-unitForeground)}.monaco-editor .codicon.codicon-symbol-variable,.monaco-workbench .codicon.codicon-symbol-variable{color:var(--vscode-symbolIcon-variableForeground)}.editor-banner{box-sizing:border-box;cursor:default;width:100%;font-size:12px;display:flex;overflow:visible;height:26px;background:var(--vscode-banner-background)}.editor-banner .icon-container{display:flex;flex-shrink:0;align-items:center;padding:0 6px 0 10px}.editor-banner .icon-container.custom-icon{background-repeat:no-repeat;background-position:50%;background-size:16px;width:16px;padding:0;margin:0 6px 0 10px}.editor-banner .message-container{display:flex;align-items:center;line-height:26px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.editor-banner .message-container p{margin-block-start:0;margin-block-end:0}.editor-banner .message-actions-container{flex-grow:1;flex-shrink:0;line-height:26px;margin:0 4px}.editor-banner .message-actions-container a.monaco-button{width:inherit;margin:2px 8px;padding:0 12px}.editor-banner .message-actions-container a{padding:3px;margin-left:12px;text-decoration:underline}.editor-banner .action-container{padding:0 10px 0 6px}.editor-banner{background-color:var(--vscode-banner-background)}.editor-banner,.editor-banner .action-container .codicon,.editor-banner .message-actions-container .monaco-link{color:var(--vscode-banner-foreground)}.editor-banner .icon-container .codicon{color:var(--vscode-banner-iconForeground)}.monaco-editor .unicode-highlight{border:1px solid var(--vscode-editorUnicodeHighlight-border);background-color:var(--vscode-editorUnicodeHighlight-background);box-sizing:border-box}.monaco-editor .focused .selectionHighlight{background-color:var(--vscode-editor-selectionHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-selectionHighlightBorder)}.monaco-editor.hc-black .focused .selectionHighlight,.monaco-editor.hc-light .focused .selectionHighlight{border-style:dotted}.monaco-editor .wordHighlight{background-color:var(--vscode-editor-wordHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-wordHighlightBorder)}.monaco-editor.hc-black .wordHighlight,.monaco-editor.hc-light .wordHighlight{border-style:dotted}.monaco-editor .wordHighlightStrong{background-color:var(--vscode-editor-wordHighlightStrongBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-wordHighlightStrongBorder)}.monaco-editor.hc-black .wordHighlightStrong,.monaco-editor.hc-light .wordHighlightStrong{border-style:dotted}.monaco-editor .wordHighlightText{background-color:var(--vscode-editor-wordHighlightTextBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-wordHighlightTextBorder)}.monaco-editor.hc-black .wordHighlightText,.monaco-editor.hc-light .wordHighlightText{border-style:dotted}.monaco-editor .zone-widget{position:absolute;z-index:10}.monaco-editor .zone-widget .zone-widget-container{border-top-style:solid;border-bottom-style:solid;border-top-width:0;border-bottom-width:0;position:relative}.monaco-editor .iPadShowKeyboard{width:58px;min-width:0;height:36px;min-height:0;margin:0;padding:0;position:absolute;resize:none;overflow:hidden;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00OC4wMzYgNC4wMUg0LjAwOFYzMi4wM2g0NC4wMjhWNC4wMXpNNC4wMDguMDA4QTQuMDAzIDQuMDAzIDAgMDAuMDA1IDQuMDFWMzIuMDNhNC4wMDMgNC4wMDMgMCAwMDQuMDAzIDQuMDAyaDQ0LjAyOGE0LjAwMyA0LjAwMyAwIDAwNC4wMDMtNC4wMDJWNC4wMUE0LjAwMyA0LjAwMyAwIDAwNDguMDM2LjAwOEg0LjAwOHpNOC4wMSA4LjAxM2g0LjAwM3Y0LjAwM0g4LjAxVjguMDEzem0xMi4wMDggMGgtNC4wMDJ2NC4wMDNoNC4wMDJWOC4wMTN6bTQuMDAzIDBoNC4wMDJ2NC4wMDNoLTQuMDAyVjguMDEzem0xMi4wMDggMGgtNC4wMDN2NC4wMDNoNC4wMDNWOC4wMTN6bTQuMDAyIDBoNC4wMDN2NC4wMDNINDAuMDNWOC4wMTN6bS0yNC4wMTUgOC4wMDVIOC4wMXY0LjAwM2g4LjAwNnYtNC4wMDN6bTQuMDAyIDBoNC4wMDN2NC4wMDNoLTQuMDAzdi00LjAwM3ptMTIuMDA4IDBoLTQuMDAzdjQuMDAzaDQuMDAzdi00LjAwM3ptMTIuMDA4IDB2NC4wMDNoLTguMDA1di00LjAwM2g4LjAwNXptLTMyLjAyMSA4LjAwNUg4LjAxdjQuMDAzaDQuMDAzdi00LjAwM3ptNC4wMDMgMGgyMC4wMTN2NC4wMDNIMTYuMDE2di00LjAwM3ptMjguMDE4IDBINDAuMDN2NC4wMDNoNC4wMDN2LTQuMDAzeiIgZmlsbD0iIzQyNDI0MiIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAwIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUzdjM2SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) 50% no-repeat;border:4px solid #f6f6f6;border-radius:4px}.monaco-editor.vs-dark .iPadShowKeyboard{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00OC4wMzYgNC4wMUg0LjAwOFYzMi4wM2g0NC4wMjhWNC4wMXpNNC4wMDguMDA4QTQuMDAzIDQuMDAzIDAgMDAuMDA1IDQuMDFWMzIuMDNhNC4wMDMgNC4wMDMgMCAwMDQuMDAzIDQuMDAyaDQ0LjAyOGE0LjAwMyA0LjAwMyAwIDAwNC4wMDMtNC4wMDJWNC4wMUE0LjAwMyA0LjAwMyAwIDAwNDguMDM2LjAwOEg0LjAwOHpNOC4wMSA4LjAxM2g0LjAwM3Y0LjAwM0g4LjAxVjguMDEzem0xMi4wMDggMGgtNC4wMDJ2NC4wMDNoNC4wMDJWOC4wMTN6bTQuMDAzIDBoNC4wMDJ2NC4wMDNoLTQuMDAyVjguMDEzem0xMi4wMDggMGgtNC4wMDN2NC4wMDNoNC4wMDNWOC4wMTN6bTQuMDAyIDBoNC4wMDN2NC4wMDNINDAuMDNWOC4wMTN6bS0yNC4wMTUgOC4wMDVIOC4wMXY0LjAwM2g4LjAwNnYtNC4wMDN6bTQuMDAyIDBoNC4wMDN2NC4wMDNoLTQuMDAzdi00LjAwM3ptMTIuMDA4IDBoLTQuMDAzdjQuMDAzaDQuMDAzdi00LjAwM3ptMTIuMDA4IDB2NC4wMDNoLTguMDA1di00LjAwM2g4LjAwNXptLTMyLjAyMSA4LjAwNUg4LjAxdjQuMDAzaDQuMDAzdi00LjAwM3ptNC4wMDMgMGgyMC4wMTN2NC4wMDNIMTYuMDE2di00LjAwM3ptMjguMDE4IDBINDAuMDN2NC4wMDNoNC4wMDN2LTQuMDAzeiIgZmlsbD0iI0M1QzVDNSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAwIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUzdjM2SDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+) 50% no-repeat;border:4px solid #252526}.monaco-editor .tokens-inspect-widget{z-index:50;user-select:text;-webkit-user-select:text;padding:10px;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor.hc-black .tokens-inspect-widget,.monaco-editor.hc-light .tokens-inspect-widget{border-width:2px}.monaco-editor .tokens-inspect-widget .tokens-inspect-separator{height:1px;border:0;background-color:var(--vscode-editorHoverWidget-border)}.monaco-editor .tokens-inspect-widget .tm-token{font-family:var(--monaco-monospace-font)}.monaco-editor .tokens-inspect-widget .tm-token-length{font-weight:400;font-size:60%;float:right}.monaco-editor .tokens-inspect-widget .tm-metadata-table{width:100%}.monaco-editor .tokens-inspect-widget .tm-metadata-value{font-family:var(--monaco-monospace-font);text-align:right}.monaco-editor .tokens-inspect-widget .tm-token-type{font-family:var(--monaco-monospace-font)}.quick-input-widget{font-size:13px}.quick-input-widget .monaco-highlighted-label .highlight{color:#0066bf}.vs .quick-input-widget .monaco-list-row.focused .monaco-highlighted-label .highlight{color:#9dddff}.vs-dark .quick-input-widget .monaco-highlighted-label .highlight{color:#0097fb}.hc-black .quick-input-widget .monaco-highlighted-label .highlight{color:#f38518}.hc-light .quick-input-widget .monaco-highlighted-label .highlight{color:#0f4a85}.monaco-keybinding>.monaco-keybinding-key{background-color:hsla(0,0%,86.7%,.4);border:1px solid hsla(0,0%,80%,.4);border-bottom-color:hsla(0,0%,73.3%,.4);box-shadow:inset 0 -1px 0 hsla(0,0%,73.3%,.4);color:#555}.hc-black .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:1px solid #6fc3df;box-shadow:none;color:#fff}.hc-light .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:1px solid #0f4a85;box-shadow:none;color:#292929}.vs-dark .monaco-keybinding>.monaco-keybinding-key{background-color:hsla(0,0%,50.2%,.17);border:1px solid rgba(51,51,51,.6);border-bottom-color:rgba(68,68,68,.6);box-shadow:inset 0 -1px 0 rgba(68,68,68,.6);color:#ccc}.monaco-editor{font-family:-apple-system,BlinkMacSystemFont,Segoe WPC,Segoe UI,HelveticaNeue-Light,system-ui,Ubuntu,Droid Sans,sans-serif;--monaco-monospace-font:\"SF Mono\",Monaco,Menlo,Consolas,\"Ubuntu Mono\",\"Liberation Mono\",\"DejaVu Sans Mono\",\"Courier New\",monospace}.monaco-editor.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.hc-light .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-hover p{margin:0}.monaco-aria-container{position:absolute!important;top:0;height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%)}.monaco-diff-editor .synthetic-focus,.monaco-diff-editor [tabindex=\"0\"]:focus,.monaco-diff-editor [tabindex=\"-1\"]:focus,.monaco-diff-editor button:focus,.monaco-diff-editor input[type=button]:focus,.monaco-diff-editor input[type=checkbox]:focus,.monaco-diff-editor input[type=search]:focus,.monaco-diff-editor input[type=text]:focus,.monaco-diff-editor select:focus,.monaco-diff-editor textarea:focus,.monaco-editor{outline-width:1px;outline-style:solid;outline-offset:-1px;outline-color:var(--vscode-focusBorder);opacity:1}.action-widget{font-size:13px;border-radius:0;min-width:160px;max-width:80vw;z-index:40;display:block;width:100%;border:1px solid var(--vscode-editorWidget-border)!important;border-radius:2px;background-color:var(--vscode-editorWidget-background);color:var(--vscode-editorWidget-foreground)}.context-view-block{z-index:-1}.context-view-block,.context-view-pointerBlock{position:fixed;cursor:auto;left:0;top:0;width:100%;height:100%}.context-view-pointerBlock{z-index:2}.action-widget .monaco-list{user-select:none;-webkit-user-select:none;border:0!important}.action-widget .monaco-list:focus:before{outline:0!important}.action-widget .monaco-list .monaco-scrollable-element{overflow:visible}.action-widget .monaco-list .monaco-list-row{padding:0 10px;white-space:nowrap;cursor:pointer;touch-action:none;width:100%}.action-widget .monaco-list .monaco-list-row.action.focused:not(.option-disabled){background-color:var(--vscode-quickInputList-focusBackground)!important;color:var(--vscode-quickInputList-focusForeground);outline:1px solid var(--vscode-menu-selectionBorder,transparent);outline-offset:-1px}.action-widget .monaco-list-row.group-header{color:var(--vscode-descriptionForeground)!important;font-weight:600}.action-widget .monaco-list .group-header,.action-widget .monaco-list .option-disabled,.action-widget .monaco-list .option-disabled .focused,.action-widget .monaco-list .option-disabled .focused:before,.action-widget .monaco-list .option-disabled:before{cursor:default!important;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;background-color:transparent!important;outline:0 solid!important}.action-widget .monaco-list-row.action{display:flex;gap:6px;align-items:center}.action-widget .monaco-list-row.action.option-disabled,.action-widget .monaco-list-row.action.option-disabled .codicon,.action-widget .monaco-list:focus .monaco-list-row.focused.action.option-disabled,.action-widget .monaco-list:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused).option-disabled{color:var(--vscode-disabledForeground)}.action-widget .monaco-list-row.action:not(.option-disabled) .codicon{color:inherit}.action-widget .monaco-list-row.action .title{flex:1;overflow:hidden;text-overflow:ellipsis}.action-widget .monaco-list-row.action .monaco-keybinding>.monaco-keybinding-key{background-color:var(--vscode-keybindingLabel-background);color:var(--vscode-keybindingLabel-foreground);border-radius:3px;border:1px solid var(--vscode-keybindingLabel-border);border-bottom-color:var(--vscode-keybindingLabel-bottomBorder);box-shadow:inset 0 -1px 0 var(--vscode-widget-shadow)}.action-widget .action-widget-action-bar{background-color:var(--vscode-editorHoverWidget-statusBarBackground);border-top:1px solid var(--vscode-editorHoverWidget-border)}.action-widget .action-widget-action-bar:before{display:block;content:\"\";width:100%}.action-widget .action-widget-action-bar .actions-container{padding:0 8px}.action-widget-action-bar .action-label{color:var(--vscode-textLink-activeForeground);font-size:12px;line-height:22px;padding:0;pointer-events:all}.action-widget-action-bar .action-item{margin-right:16px;pointer-events:none}.action-widget-action-bar .action-label:hover{background-color:transparent!important}.monaco-action-bar .actions-container.highlight-toggled .action-label.checked{background:var(--vscode-actionBar-toggledBackground)!important}.monaco-action-bar .action-item.menu-entry .action-label.icon{width:16px;height:16px;background-repeat:no-repeat;background-position:50%;background-size:16px}.monaco-dropdown-with-default{display:flex!important;flex-direction:row;border-radius:5px}.monaco-dropdown-with-default>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-default>.action-container.menu-entry>.action-label.icon{width:16px;height:16px;background-repeat:no-repeat;background-position:50%;background-size:16px}.monaco-dropdown-with-default:hover{background-color:var(--vscode-toolbar-hoverBackground)}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;padding-left:0;padding-right:0;line-height:16px;margin-left:-3px}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{display:block;background-size:16px;background-position:50%;background-repeat:no-repeat}.monaco-link{color:var(--vscode-textLink-foreground)}.monaco-link:hover{color:var(--vscode-textLink-activeForeground)}.quick-input-widget{position:absolute;width:600px;z-index:2550;left:50%;margin-left:-300px;-webkit-app-region:no-drag;border-radius:6px}.quick-input-titlebar{display:flex;align-items:center;border-top-left-radius:5px;border-top-right-radius:5px}.quick-input-left-action-bar{display:flex;margin-left:4px;flex:1}.quick-input-title{padding:3px 0;text-align:center;text-overflow:ellipsis;overflow:hidden}.quick-input-right-action-bar{display:flex;margin-right:4px;flex:1}.quick-input-right-action-bar>.actions-container{justify-content:flex-end}.quick-input-titlebar .monaco-action-bar .action-label.codicon{background-position:50%;background-repeat:no-repeat;padding:2px}.quick-input-description{margin:6px 6px 6px 11px}.quick-input-header .quick-input-description{margin:4px 2px;flex:1}.quick-input-header{display:flex;padding:8px 6px 6px}.quick-input-widget.hidden-input .quick-input-header{padding:0;margin-bottom:0}.quick-input-and-message{display:flex;flex-direction:column;flex-grow:1;min-width:0;position:relative}.quick-input-check-all{align-self:center;margin:0}.quick-input-filter{flex-grow:1;display:flex;position:relative}.quick-input-box{flex-grow:1}.quick-input-widget.show-checkboxes .quick-input-box,.quick-input-widget.show-checkboxes .quick-input-message{margin-left:5px}.quick-input-visible-count{position:absolute;left:-10000px}.quick-input-count{align-self:center;position:absolute;right:4px;display:flex;align-items:center}.quick-input-count .monaco-count-badge{vertical-align:middle;padding:2px 4px;border-radius:2px;min-height:auto;line-height:normal}.quick-input-action{margin-left:6px}.quick-input-action .monaco-text-button{font-size:11px;padding:0 6px;display:flex;height:25px;align-items:center}.quick-input-message{margin-top:-1px;padding:5px;overflow-wrap:break-word}.quick-input-message>.codicon{margin:0 .2em;vertical-align:text-bottom}.quick-input-message a{color:inherit}.quick-input-progress.monaco-progress-container{position:relative}.quick-input-list{line-height:22px}.quick-input-widget.hidden-input .quick-input-list{margin-top:4px;padding-bottom:4px}.quick-input-list .monaco-list{overflow:hidden;max-height:440px;padding-bottom:5px}.quick-input-list .monaco-scrollable-element{padding:0 5px}.quick-input-list .quick-input-list-entry{box-sizing:border-box;overflow:hidden;display:flex;height:100%;padding:0 6px}.quick-input-list .quick-input-list-entry.quick-input-list-separator-border{border-top-width:1px;border-top-style:solid}.quick-input-list .monaco-list-row{border-radius:3px}.quick-input-list .monaco-list-row[data-index=\"0\"] .quick-input-list-entry.quick-input-list-separator-border{border-top-style:none}.quick-input-list .quick-input-list-label{overflow:hidden;display:flex;height:100%;flex:1}.quick-input-list .quick-input-list-checkbox{align-self:center;margin:0}.quick-input-list .quick-input-list-icon{background-size:16px;background-position:0;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;display:flex;align-items:center;justify-content:center}.quick-input-list .quick-input-list-rows{overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;height:100%;flex:1;margin-left:5px}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-rows{margin-left:10px}.quick-input-widget .quick-input-list .quick-input-list-checkbox{display:none}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-checkbox{display:inline}.quick-input-list .quick-input-list-rows>.quick-input-list-row{display:flex;align-items:center}.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label,.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label .monaco-icon-label-container>.monaco-icon-name-container{flex:1}.quick-input-list .quick-input-list-rows>.quick-input-list-row .codicon[class*=codicon-]{vertical-align:text-bottom}.quick-input-list .quick-input-list-rows .monaco-highlighted-label>span{opacity:1}.quick-input-list .quick-input-list-entry .quick-input-list-entry-keybinding{margin-right:8px}.quick-input-list .quick-input-list-label-meta{opacity:.7;line-height:normal;text-overflow:ellipsis;overflow:hidden}.quick-input-list .monaco-highlighted-label .highlight{font-weight:700}.quick-input-list .quick-input-list-entry .quick-input-list-separator{margin-right:4px}.quick-input-list .quick-input-list-entry-action-bar{display:flex;flex:0;overflow:visible}.quick-input-list .quick-input-list-entry-action-bar .action-label{display:none}.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon{margin-right:4px;padding:0 2px 2px}.quick-input-list .quick-input-list-entry-action-bar{margin-top:1px;margin-right:4px}.quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label,.quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible,.quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label{display:flex}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key,.quick-input-list .monaco-list-row.focused .quick-input-list-entry .quick-input-list-separator{color:inherit}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key{background:none}.quick-input-list .quick-input-list-separator-as-item{font-weight:600;font-size:12px}.extension-editor .codicon.codicon-error,.extensions-viewlet>.extensions .codicon.codicon-error,.markers-panel .marker-icon .codicon.codicon-error,.markers-panel .marker-icon.error,.monaco-editor .zone-widget .codicon.codicon-error,.preferences-editor .codicon.codicon-error,.text-search-provider-messages .providerMessage .codicon.codicon-error{color:var(--vscode-problemsErrorIcon-foreground)}.extension-editor .codicon.codicon-warning,.extensions-viewlet>.extensions .codicon.codicon-warning,.markers-panel .marker-icon .codicon.codicon-warning,.markers-panel .marker-icon.warning,.monaco-editor .zone-widget .codicon.codicon-warning,.preferences-editor .codicon.codicon-warning,.text-search-provider-messages .providerMessage .codicon.codicon-warning{color:var(--vscode-problemsWarningIcon-foreground)}.extension-editor .codicon.codicon-info,.extensions-viewlet>.extensions .codicon.codicon-info,.markers-panel .marker-icon .codicon.codicon-info,.markers-panel .marker-icon.info,.monaco-editor .zone-widget .codicon.codicon-info,.preferences-editor .codicon.codicon-info,.text-search-provider-messages .providerMessage .codicon.codicon-info{color:var(--vscode-problemsInfoIcon-foreground)}"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/editor/editor.main.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/(function(){var se=[\"exports\",\"require\",\"vs/base/common/lifecycle\",\"vs/nls\",\"vs/nls!vs/editor/editor.main\",\"vs/editor/common/core/range\",\"vs/base/common/event\",\"vs/base/browser/dom\",\"vs/platform/instantiation/common/instantiation\",\"vs/css!vs/editor/editor.main\",\"vs/editor/common/core/position\",\"vs/base/common/strings\",\"vs/base/common/errors\",\"vs/base/common/arrays\",\"vs/base/common/async\",\"vs/platform/contextkey/common/contextkey\",\"vs/editor/browser/editorExtensions\",\"vs/base/common/platform\",\"vs/editor/common/services/languageFeatures\",\"vs/base/common/cancellation\",\"vs/base/common/types\",\"vs/editor/common/editorContextKeys\",\"vs/base/common/uri\",\"vs/platform/theme/common/themeService\",\"vs/editor/common/core/selection\",\"vs/platform/commands/common/commands\",\"vs/base/common/codicons\",\"vs/platform/configuration/common/configuration\",\"vs/base/common/themables\",\"vs/platform/theme/common/colorRegistry\",\"vs/platform/actions/common/actions\",\"vs/editor/common/languages\",\"vs/editor/common/languages/languageConfigurationRegistry\",\"vs/editor/browser/services/codeEditorService\",\"vs/platform/keybinding/common/keybinding\",\"vs/base/common/observable\",\"vs/editor/common/config/editorOptions\",\"vs/platform/registry/common/platform\",\"vs/editor/common/model/textModel\",\"vs/base/common/color\",\"vs/base/browser/fastDomNode\",\"vs/editor/common/model\",\"vs/base/common/actions\",\"vs/editor/common/languages/language\",\"vs/base/browser/window\",\"vs/platform/instantiation/common/extensions\",\"vs/base/browser/keyboardEvent\",\"vs/base/common/network\",\"vs/base/browser/ui/aria/aria\",\"vs/base/common/resources\",\"vs/platform/notification/common/notification\",\"vs/editor/common/services/model\",\"vs/base/common/iterator\",\"vs/base/common/map\",\"vs/base/browser/browser\",\"vs/base/common/objects\",\"vs/editor/browser/view/viewPart\",\"vs/platform/opener/common/opener\",\"vs/base/common/htmlContent\",\"vs/platform/contextview/browser/contextView\",\"vs/base/common/arraysFind\",\"vs/base/common/stopwatch\",\"vs/editor/common/core/lineRange\",\"vs/base/browser/touch\",\"vs/platform/log/common/log\",\"vs/base/common/keyCodes\",\"vs/base/common/linkedList\",\"vs/base/browser/mouseEvent\",\"vs/editor/common/services/resolverService\",\"vs/platform/accessibility/common/accessibility\",\"vs/platform/quickinput/common/quickInput\",\"vs/base/common/filters\",\"vs/editor/browser/config/domFontInfo\",\"vs/editor/common/core/offsetRange\",\"vs/editor/common/core/editOperation\",\"vs/editor/common/cursorCommon\",\"vs/base/browser/ui/widget\",\"vs/base/browser/ui/scrollbar/scrollableElement\",\"vs/base/browser/ui/actionbar/actionbar\",\"vs/editor/common/services/languageFeatureDebounce\",\"vs/editor/common/languages/modesRegistry\",\"vs/platform/telemetry/common/telemetry\",\"vs/platform/theme/common/iconRegistry\",\"vs/editor/common/core/editorColorRegistry\",\"vs/base/browser/event\",\"vs/editor/common/core/cursorColumns\",\"vs/editor/common/viewModel\",\"vs/editor/browser/widget/diffEditor/utils\",\"vs/platform/progress/common/progress\",\"vs/platform/theme/common/theme\",\"vs/base/common/assert\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length\",\"vs/platform/storage/common/storage\",\"vs/base/browser/trustedTypes\",\"vs/editor/common/tokens/lineTokens\",\"vs/base/common/path\",\"vs/editor/common/standaloneStrings\",\"vs/platform/markers/common/markers\",\"vs/platform/configuration/common/configurationRegistry\",\"vs/base/common/lazy\",\"vs/base/common/severity\",\"vs/editor/contrib/hover/browser/hoverTypes\",\"vs/editor/common/core/stringBuilder\",\"vs/platform/clipboard/common/clipboardService\",\"vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer\",\"vs/editor/contrib/editorState/browser/editorState\",\"vs/platform/theme/browser/defaultStyles\",\"vs/base/common/decorators\",\"vs/base/common/functional\",\"vs/base/common/mime\",\"vs/base/common/observableInternal/base\",\"vs/base/common/hash\",\"vs/editor/common/diff/rangeMapping\",\"vs/editor/common/languages/languageConfiguration\",\"vs/editor/common/textModelEvents\",\"vs/editor/browser/view/dynamicViewOverlay\",\"vs/editor/contrib/codeAction/common/types\",\"vs/editor/contrib/snippet/browser/snippetParser\",\"vs/base/browser/ui/iconLabel/iconLabels\",\"vs/base/browser/ui/list/listWidget\",\"vs/editor/common/viewLayout/viewLineRenderer\",\"vs/editor/common/services/editorWorker\",\"vs/platform/audioCues/browser/audioCueService\",\"vs/platform/layout/browser/layoutService\",\"vs/platform/keybinding/common/keybindingsRegistry\",\"vs/base/common/keybindings\",\"vs/base/common/iconLabels\",\"vs/editor/browser/stableEditorScroll\",\"vs/editor/common/core/characterClassifier\",\"vs/editor/common/core/eolCounter\",\"vs/editor/common/commands/replaceCommand\",\"vs/editor/common/editorFeatures\",\"vs/editor/common/encodedTokenAttributes\",\"vs/editor/common/languages/supports\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet\",\"vs/base/browser/ui/actionbar/actionViewItems\",\"vs/editor/browser/services/bulkEditService\",\"vs/editor/standalone/common/standaloneTheme\",\"vs/editor/contrib/suggest/browser/suggest\",\"vs/platform/quickinput/common/quickAccess\",\"vs/editor/contrib/codeAction/browser/codeAction\",\"vs/platform/actions/browser/menuEntryActionViewItem\",\"vs/editor/contrib/peekView/browser/peekView\",\"vs/base/browser/ui/tree/tree\",\"vs/base/common/buffer\",\"vs/base/common/numbers\",\"vs/base/common/observableInternal/logging\",\"vs/base/common/scrollable\",\"vs/editor/browser/view/renderingContext\",\"vs/editor/common/config/editorZoom\",\"vs/editor/common/core/wordCharacterClassifier\",\"vs/editor/common/core/wordHelper\",\"vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm\",\"vs/editor/browser/editorBrowser\",\"vs/editor/common/viewEventHandler\",\"vs/editor/common/viewLayout/lineDecorations\",\"vs/editor/contrib/inlineCompletions/browser/utils\",\"vs/base/browser/globalPointerMoveMonitor\",\"vs/base/browser/ui/sash/sash\",\"vs/base/browser/ui/toggle/toggle\",\"vs/editor/common/languages/nullTokenize\",\"vs/editor/contrib/gotoSymbol/browser/referencesModel\",\"vs/platform/dialogs/common/dialogs\",\"vs/platform/instantiation/common/serviceCollection\",\"vs/platform/label/common/label\",\"vs/editor/contrib/documentSymbols/browser/outlineModel\",\"vs/editor/contrib/message/browser/messageController\",\"vs/editor/browser/editorDom\",\"vs/editor/browser/widget/embeddedCodeEditorWidget\",\"vs/platform/workspace/common/workspace\",\"vs/base/common/idGenerator\",\"vs/base/common/observableInternal/derived\",\"vs/base/common/range\",\"vs/base/common/diff/diff\",\"vs/base/common/uint\",\"vs/base/common/uuid\",\"vs/base/common/dataTransfer\",\"vs/base/browser/ui/codicons/codiconStyles\",\"vs/css!vs/platform/quickinput/browser/media/quickInput\",\"vs/editor/common/core/textModelDefaults\",\"vs/editor/common/editorCommon\",\"vs/editor/common/cursor/cursorWordOperations\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast\",\"vs/editor/common/model/textModelSearch\",\"vs/editor/contrib/folding/browser/foldingRanges\",\"vs/base/browser/markdownRenderer\",\"vs/base/browser/ui/tree/abstractTree\",\"vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture\",\"vs/editor/common/services/textResourceConfiguration\",\"vs/editor/browser/controller/textAreaInput\",\"vs/editor/browser/coreCommands\",\"vs/platform/list/browser/listService\",\"vs/platform/undoRedo/common/undoRedo\",\"vs/editor/browser/widget/codeEditorWidget\",\"vs/editor/contrib/find/browser/findModel\",\"vs/editor/contrib/snippet/browser/snippetController2\",\"vs/base/browser/ui/scrollbar/scrollbarState\",\"vs/base/browser/dnd\",\"vs/base/common/ternarySearchTree\",\"vs/base/browser/ui/mouseCursor/mouseCursor\",\"vs/css!vs/editor/contrib/colorPicker/browser/colorPicker\",\"vs/editor/browser/config/tabFocus\",\"vs/editor/common/core/indentation\",\"vs/editor/common/diff/defaultLinesDiffComputer/utils\",\"vs/editor/common/diff/linesDiffComputer\",\"vs/editor/common/cursor/cursorMoveOperations\",\"vs/editor/common/cursor/cursorDeleteOperations\",\"vs/editor/common/cursor/cursorMoveCommands\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer\",\"vs/editor/common/model/utils\",\"vs/editor/common/standalone/standaloneEnums\",\"vs/editor/common/textModelGuides\",\"vs/editor/browser/viewParts/glyphMargin/glyphMargin\",\"vs/editor/common/viewEvents\",\"vs/editor/common/viewModelEventDispatcher\",\"vs/editor/contrib/inlineCompletions/browser/commandIds\",\"vs/editor/contrib/inlineCompletions/browser/ghostText\",\"vs/base/common/keybindingLabels\",\"vs/base/browser/canIUse\",\"vs/base/browser/ui/tree/indexTreeModel\",\"vs/base/browser/ui/tree/objectTreeModel\",\"vs/base/common/extpath\",\"vs/base/common/marshalling\",\"vs/base/browser/ui/keybindingLabel/keybindingLabel\",\"vs/base/browser/ui/resizable/resizable\",\"vs/base/browser/ui/scrollbar/scrollbarArrow\",\"vs/base/browser/ui/hover/hoverWidget\",\"vs/base/browser/ui/list/listView\",\"vs/base/browser/ui/button/button\",\"vs/base/browser/ui/iconLabel/iconLabel\",\"vs/base/browser/ui/inputbox/inputBox\",\"vs/base/browser/ui/findinput/findInput\",\"vs/editor/browser/view/viewLayer\",\"vs/editor/common/languages/supports/richEditBrackets\",\"vs/editor/common/config/fontInfo\",\"vs/platform/instantiation/common/descriptors\",\"vs/editor/common/services/markerDecorations\",\"vs/editor/common/services/semanticTokensStyling\",\"vs/editor/contrib/dropOrPasteInto/browser/edit\",\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys\",\"vs/editor/contrib/parameterHints/browser/provideSignatureHelp\",\"vs/platform/contextkey/common/contextkeys\",\"vs/platform/environment/common/environment\",\"vs/platform/hover/browser/hover\",\"vs/platform/jsonschemas/common/jsonContributionRegistry\",\"vs/editor/common/config/editorConfigurationSchema\",\"vs/editor/browser/services/editorWorkerService\",\"vs/editor/common/languages/autoIndent\",\"vs/editor/common/languages/enterAction\",\"vs/editor/common/commands/shiftCommand\",\"vs/editor/common/cursor/cursorTypeOperations\",\"vs/editor/contrib/gotoSymbol/browser/goToSymbol\",\"vs/editor/contrib/hover/browser/markdownHoverParticipant\",\"vs/editor/contrib/symbolIcons/browser/symbolIcons\",\"vs/editor/browser/viewParts/lines/viewLine\",\"vs/editor/common/services/semanticTokensProviderStyling\",\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget\",\"vs/editor/browser/widget/diffEditor/registrations.contribution\",\"vs/editor/browser/widget/diffEditor/diffEditorWidget\",\"vs/editor/contrib/codeAction/browser/codeActionController\",\"vs/editor/contrib/folding/browser/folding\",\"vs/editor/contrib/inlineProgress/browser/inlineProgress\",\"vs/editor/contrib/gotoSymbol/browser/goToCommands\",\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController\",\"vs/editor/standalone/browser/standaloneServices\",\"vs/base/browser/performance\",\"vs/base/common/cache\",\"vs/base/common/collections\",\"vs/base/common/observableInternal/autorun\",\"vs/base/common/ime\",\"vs/base/common/symbols\",\"vs/css!vs/base/browser/ui/actionbar/actionbar\",\"vs/css!vs/base/browser/ui/dropdown/dropdown\",\"vs/css!vs/base/browser/ui/findinput/findInput\",\"vs/css!vs/base/browser/ui/list/list\",\"vs/css!vs/platform/actionWidget/browser/actionWidget\",\"vs/editor/browser/viewParts/minimap/minimapCharSheet\",\"vs/editor/common/config/diffEditor\",\"vs/editor/browser/view/viewUserInputEvents\",\"vs/editor/browser/controller/textAreaState\",\"vs/editor/common/core/rgba\",\"vs/editor/common/cursor/cursorAtomicMoveOperations\",\"vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm\",\"vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations\",\"vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence\",\"vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer\",\"vs/editor/common/editorAction\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/brackets\",\"vs/editor/common/model/prefixSumComputer\",\"vs/editor/common/model/textModelPart\",\"vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase\",\"vs/editor/common/modelLineProjectionData\",\"vs/editor/common/services/treeViewsDnd\",\"vs/editor/common/services/unicodeTextModelHighlighter\",\"vs/editor/common/model/guidesTextModelPart\",\"vs/editor/common/tokens/contiguousMultilineTokensBuilder\",\"vs/editor/browser/viewParts/margin/margin\",\"vs/editor/common/viewModel/overviewZoneManager\",\"vs/editor/contrib/comment/browser/blockCommentCommand\",\"vs/editor/contrib/folding/browser/foldingModel\",\"vs/editor/contrib/folding/browser/indentRangeProvider\",\"vs/editor/contrib/folding/browser/syntaxRangeProvider\",\"vs/editor/contrib/format/browser/formattingEdit\",\"vs/editor/contrib/indentation/browser/indentUtils\",\"vs/editor/contrib/inlineCompletions/browser/singleTextEdit\",\"vs/editor/contrib/semanticTokens/common/semanticTokensConfig\",\"vs/editor/contrib/smartSelect/browser/bracketSelections\",\"vs/editor/contrib/stickyScroll/browser/stickyScrollElement\",\"vs/editor/contrib/suggest/browser/completionModel\",\"vs/editor/contrib/suggest/browser/wordDistance\",\"vs/editor/standalone/common/monarch/monarchCommon\",\"vs/base/common/process\",\"vs/base/common/glob\",\"vs/base/browser/dompurify/dompurify\",\"vs/base/browser/formattedTextRenderer\",\"vs/base/browser/ui/contextview/contextview\",\"vs/base/browser/ui/countBadge/countBadge\",\"vs/base/browser/ui/highlightedlabel/highlightedLabel\",\"vs/base/browser/ui/scrollbar/abstractScrollbar\",\"vs/base/browser/ui/splitview/splitview\",\"vs/base/browser/ui/findinput/findInputToggles\",\"vs/base/browser/ui/iconLabel/iconLabelHover\",\"vs/base/browser/ui/dropdown/dropdownActionViewItem\",\"vs/base/browser/ui/tree/objectTree\",\"vs/base/common/worker/simpleWorker\",\"vs/editor/browser/config/elementSizeObserver\",\"vs/editor/common/core/textChange\",\"vs/editor/common/languageSelector\",\"vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer\",\"vs/editor/contrib/hover/browser/hoverOperation\",\"vs/editor/contrib/inlayHints/browser/inlayHints\",\"vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature\",\"vs/editor/browser/config/fontMeasurements\",\"vs/editor/common/viewModel/viewModelDecorations\",\"vs/editor/common/languages/textToHtmlTokenizer\",\"vs/editor/common/services/editorBaseApi\",\"vs/editor/common/viewModel/minimapTokensColorTracker\",\"vs/editor/common/model/editStack\",\"vs/platform/files/common/files\",\"vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature\",\"vs/editor/contrib/codelens/browser/codelens\",\"vs/editor/contrib/semanticTokens/common/getSemanticTokens\",\"vs/editor/standalone/common/monarch/monarchLexer\",\"vs/editor/contrib/dropOrPasteInto/browser/postEditWidget\",\"vs/platform/keybinding/common/keybindingResolver\",\"vs/platform/keybinding/common/resolvedKeybindingItem\",\"vs/editor/standalone/browser/standaloneLayoutService\",\"vs/platform/quickinput/browser/quickInputUtils\",\"vs/platform/dnd/browser/dnd\",\"vs/editor/browser/dnd\",\"vs/editor/contrib/colorPicker/browser/defaultDocumentColorProvider\",\"vs/editor/contrib/colorPicker/browser/color\",\"vs/editor/contrib/suggest/browser/suggestWidgetDetails\",\"vs/platform/configuration/common/configurationModels\",\"vs/platform/history/browser/contextScopedHistoryWidget\",\"vs/editor/contrib/suggest/browser/suggestMemory\",\"vs/editor/browser/widget/diffEditor/diffEditorViewModel\",\"vs/editor/contrib/codeAction/browser/codeActionModel\",\"vs/editor/contrib/codeAction/browser/lightBulbWidget\",\"vs/editor/contrib/format/browser/format\",\"vs/editor/contrib/hover/browser/getHover\",\"vs/editor/contrib/wordOperations/browser/wordOperations\",\"vs/editor/browser/controller/mouseTarget\",\"vs/platform/quickinput/browser/quickInputList\",\"vs/platform/quickinput/browser/quickInput\",\"vs/editor/browser/widget/diffEditor/features/overviewRulerFeature\",\"vs/editor/browser/viewParts/lineNumbers/lineNumbers\",\"vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess\",\"vs/editor/standalone/browser/standaloneCodeEditorService\",\"vs/editor/standalone/browser/standaloneThemeService\",\"vs/platform/actions/browser/toolbar\",\"vs/editor/browser/widget/multiDiffEditorWidget/diffEditorItemTemplate\",\"vs/editor/contrib/colorPicker/browser/colorDetector\",\"vs/editor/contrib/colorPicker/browser/colorHoverParticipant\",\"vs/editor/contrib/find/browser/findController\",\"vs/editor/contrib/folding/browser/foldingDecorations\",\"vs/editor/contrib/hover/browser/contentHover\",\"vs/editor/contrib/dropOrPasteInto/browser/copyPasteController\",\"vs/editor/contrib/wordHighlighter/browser/highlightDecorations\",\"vs/editor/contrib/gotoError/browser/gotoError\",\"vs/editor/contrib/gotoSymbol/browser/peek/referencesController\",\"vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition\",\"vs/editor/contrib/hover/browser/hover\",\"vs/editor/contrib/inlayHints/browser/inlayHintsLocations\",\"vs/editor/contrib/inlayHints/browser/inlayHintsController\",\"vs/editor/contrib/stickyScroll/browser/stickyScrollController\",\"vs/editor/contrib/dropOrPasteInto/browser/defaultProviders\",\"vs/editor/contrib/snippet/browser/snippetSession\",\"vs/editor/contrib/suggest/browser/suggestModel\",\"vs/editor/contrib/suggest/browser/suggestController\",\"vs/platform/workspace/common/workspaceTrust\",\"vs/base/browser/iframe\",\"vs/base/browser/ui/list/list\",\"vs/base/browser/ui/list/splice\",\"vs/base/common/diff/diffChange\",\"vs/base/common/comparers\",\"vs/base/common/linkedText\",\"vs/base/common/marked/marked\",\"vs/base/common/naturalLanguage/korean\",\"vs/base/common/navigator\",\"vs/base/common/history\",\"vs/base/common/observableInternal/utils\",\"vs/base/browser/ui/list/rangeMap\",\"vs/base/common/search\",\"vs/base/common/tfIdf\",\"vs/css!vs/base/browser/ui/aria/aria\",\"vs/css!vs/base/browser/ui/button/button\",\"vs/css!vs/base/browser/ui/codicons/codicon/codicon\",\"vs/css!vs/base/browser/ui/codicons/codicon/codicon-modifiers\",\"vs/css!vs/base/browser/ui/contextview/contextview\",\"vs/css!vs/base/browser/ui/countBadge/countBadge\",\"vs/css!vs/base/browser/ui/hover/hover\",\"vs/css!vs/base/browser/ui/iconLabel/iconlabel\",\"vs/css!vs/base/browser/ui/inputbox/inputBox\",\"vs/css!vs/base/browser/ui/keybindingLabel/keybindingLabel\",\"vs/css!vs/base/browser/ui/mouseCursor/mouseCursor\",\"vs/css!vs/base/browser/ui/progressbar/progressbar\",\"vs/css!vs/base/browser/ui/sash/sash\",\"vs/css!vs/base/browser/ui/scrollbar/media/scrollbars\",\"vs/css!vs/base/browser/ui/selectBox/selectBox\",\"vs/css!vs/base/browser/ui/selectBox/selectBoxCustom\",\"vs/css!vs/base/browser/ui/splitview/splitview\",\"vs/css!vs/base/browser/ui/table/table\",\"vs/css!vs/base/browser/ui/toggle/toggle\",\"vs/css!vs/base/browser/ui/toolbar/toolbar\",\"vs/css!vs/base/browser/ui/tree/media/tree\",\"vs/css!vs/editor/browser/controller/textAreaHandler\",\"vs/css!vs/editor/browser/viewParts/blockDecorations/blockDecorations\",\"vs/css!vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight\",\"vs/css!vs/editor/browser/viewParts/decorations/decorations\",\"vs/css!vs/editor/browser/viewParts/glyphMargin/glyphMargin\",\"vs/css!vs/editor/browser/viewParts/indentGuides/indentGuides\",\"vs/css!vs/editor/browser/viewParts/lineNumbers/lineNumbers\",\"vs/css!vs/editor/browser/viewParts/lines/viewLines\",\"vs/css!vs/editor/browser/viewParts/linesDecorations/linesDecorations\",\"vs/css!vs/editor/browser/viewParts/margin/margin\",\"vs/css!vs/editor/browser/viewParts/marginDecorations/marginDecorations\",\"vs/css!vs/editor/browser/viewParts/minimap/minimap\",\"vs/css!vs/editor/browser/viewParts/overlayWidgets/overlayWidgets\",\"vs/css!vs/editor/browser/viewParts/rulers/rulers\",\"vs/css!vs/editor/browser/viewParts/scrollDecoration/scrollDecoration\",\"vs/css!vs/editor/browser/viewParts/selections/selections\",\"vs/css!vs/editor/browser/viewParts/viewCursors/viewCursors\",\"vs/css!vs/editor/browser/viewParts/whitespace/whitespace\",\"vs/css!vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer\",\"vs/css!vs/editor/browser/widget/diffEditor/style\",\"vs/css!vs/editor/browser/widget/hoverWidget/hover\",\"vs/css!vs/editor/browser/widget/markdownRenderer/browser/renderedMarkdown\",\"vs/css!vs/editor/browser/widget/media/editor\",\"vs/css!vs/editor/browser/widget/multiDiffEditorWidget/style\",\"vs/css!vs/editor/contrib/anchorSelect/browser/anchorSelect\",\"vs/css!vs/editor/contrib/bracketMatching/browser/bracketMatching\",\"vs/css!vs/editor/contrib/codeAction/browser/lightBulbWidget\",\"vs/css!vs/editor/contrib/codelens/browser/codelensWidget\",\"vs/css!vs/editor/contrib/dnd/browser/dnd\",\"vs/css!vs/editor/contrib/dropOrPasteInto/browser/postEditWidget\",\"vs/css!vs/editor/contrib/find/browser/findOptionsWidget\",\"vs/css!vs/editor/contrib/find/browser/findWidget\",\"vs/css!vs/editor/contrib/folding/browser/folding\",\"vs/css!vs/editor/contrib/gotoError/browser/media/gotoErrorWidget\",\"vs/css!vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition\",\"vs/css!vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget\",\"vs/css!vs/editor/contrib/hover/browser/hover\",\"vs/css!vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace\",\"vs/css!vs/editor/contrib/inlineCompletions/browser/ghostText\",\"vs/css!vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget\",\"vs/css!vs/editor/contrib/inlineProgress/browser/inlineProgressWidget\",\"vs/css!vs/editor/contrib/linkedEditing/browser/linkedEditing\",\"vs/css!vs/editor/contrib/links/browser/links\",\"vs/css!vs/editor/contrib/message/browser/messageController\",\"vs/css!vs/editor/contrib/parameterHints/browser/parameterHints\",\"vs/css!vs/editor/contrib/peekView/browser/media/peekViewWidget\",\"vs/css!vs/editor/contrib/rename/browser/renameInputField\",\"vs/css!vs/editor/contrib/snippet/browser/snippetSession\",\"vs/css!vs/editor/contrib/stickyScroll/browser/stickyScroll\",\"vs/css!vs/editor/contrib/suggest/browser/media/suggest\",\"vs/css!vs/editor/contrib/symbolIcons/browser/symbolIcons\",\"vs/css!vs/editor/contrib/unicodeHighlighter/browser/bannerController\",\"vs/css!vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter\",\"vs/css!vs/editor/contrib/wordHighlighter/browser/highlightDecorations\",\"vs/css!vs/editor/contrib/zoneWidget/browser/zoneWidget\",\"vs/css!vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard\",\"vs/css!vs/editor/standalone/browser/inspectTokens/inspectTokens\",\"vs/css!vs/editor/standalone/browser/quickInput/standaloneQuickInput\",\"vs/css!vs/editor/standalone/browser/standalone-tokens\",\"vs/css!vs/platform/actions/browser/menuEntryActionViewItem\",\"vs/css!vs/platform/opener/browser/link\",\"vs/css!vs/platform/severityIcon/browser/media/severityIcon\",\"vs/editor/browser/config/charWidthReader\",\"vs/editor/browser/config/migrateOptions\",\"vs/editor/browser/viewParts/lines/domReadingContext\",\"vs/editor/browser/viewParts/lines/rangeUtil\",\"vs/editor/browser/viewParts/minimap/minimapCharRenderer\",\"vs/editor/browser/viewParts/minimap/minimapPreBaked\",\"vs/editor/browser/viewParts/minimap/minimapCharRendererFactory\",\"vs/editor/browser/widget/diffEditor/delegatingEditorImpl\",\"vs/editor/browser/widget/multiDiffEditorWidget/objectPool\",\"vs/editor/common/commands/trimTrailingWhitespaceCommand\",\"vs/editor/common/commands/surroundSelectionCommand\",\"vs/editor/common/cursor/cursorContext\",\"vs/editor/common/diff/defaultLinesDiffComputer/lineSequence\",\"vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing\",\"vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines\",\"vs/editor/common/diff/legacyLinesDiffComputer\",\"vs/editor/common/diff/linesDiffComputers\",\"vs/editor/common/editorTheme\",\"vs/editor/common/languages/defaultDocumentColorsComputer\",\"vs/editor/common/languages/linkComputer\",\"vs/editor/common/cursor/cursorColumnSelection\",\"vs/editor/common/cursor/oneCursor\",\"vs/editor/common/cursor/cursorCollection\",\"vs/editor/common/languages/supports/characterPair\",\"vs/editor/common/languages/supports/indentRules\",\"vs/editor/common/languages/supports/inplaceReplaceSupport\",\"vs/editor/common/languages/supports/languageBracketsConfiguration\",\"vs/editor/common/languages/supports/onEnter\",\"vs/editor/common/languages/supports/tokenization\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/nodeReader\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/concat23Trees\",\"vs/editor/common/model/bracketPairsTextModelPart/fixBrackets\",\"vs/editor/common/model/fixedArray\",\"vs/editor/common/model/indentationGuesser\",\"vs/editor/common/model/intervalTree\",\"vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase\",\"vs/editor/common/model/mirrorTextModel\",\"vs/editor/common/textModelBracketPairs\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree\",\"vs/editor/common/tokenizationRegistry\",\"vs/editor/common/tokens/contiguousMultilineTokens\",\"vs/editor/common/tokens/contiguousTokensEditing\",\"vs/editor/common/tokens/contiguousTokensStore\",\"vs/editor/common/tokens/sparseMultilineTokens\",\"vs/editor/common/tokens/sparseTokensStore\",\"vs/editor/browser/viewParts/blockDecorations/blockDecorations\",\"vs/editor/browser/viewParts/decorations/decorations\",\"vs/editor/browser/viewParts/linesDecorations/linesDecorations\",\"vs/editor/browser/viewParts/marginDecorations/marginDecorations\",\"vs/editor/browser/viewParts/rulers/rulers\",\"vs/editor/browser/viewParts/scrollDecoration/scrollDecoration\",\"vs/editor/browser/viewParts/viewZones/viewZones\",\"vs/editor/common/viewLayout/linePart\",\"vs/editor/common/viewLayout/linesLayout\",\"vs/editor/common/viewLayout/viewLinesViewportData\",\"vs/editor/common/viewModel/glyphLanesModel\",\"vs/editor/common/viewModel/modelLineProjection\",\"vs/editor/common/viewModel/monospaceLineBreaksComputer\",\"vs/editor/browser/viewParts/overviewRuler/overviewRuler\",\"vs/editor/common/viewModel/viewContext\",\"vs/editor/common/viewLayout/viewLayout\",\"vs/editor/contrib/caretOperations/browser/moveCaretCommand\",\"vs/editor/contrib/colorPicker/browser/colorPickerModel\",\"vs/editor/contrib/comment/browser/lineCommentCommand\",\"vs/editor/contrib/dnd/browser/dragAndDropCommand\",\"vs/editor/contrib/find/browser/replaceAllCommand\",\"vs/editor/contrib/find/browser/replacePattern\",\"vs/editor/contrib/folding/browser/hiddenRangeModel\",\"vs/editor/contrib/inPlaceReplace/browser/inPlaceReplaceCommand\",\"vs/editor/contrib/linesOperations/browser/copyLinesCommand\",\"vs/editor/contrib/linesOperations/browser/sortLinesCommand\",\"vs/editor/contrib/smartSelect/browser/wordSelections\",\"vs/editor/contrib/suggest/browser/suggestCommitCharacters\",\"vs/editor/contrib/suggest/browser/suggestOvertypingCapturer\",\"vs/editor/standalone/common/monarch/monarchCompile\",\"vs/nls!vs/base/browser/ui/actionbar/actionViewItems\",\"vs/nls!vs/base/browser/ui/findinput/findInput\",\"vs/nls!vs/base/browser/ui/findinput/findInputToggles\",\"vs/nls!vs/base/browser/ui/findinput/replaceInput\",\"vs/nls!vs/base/browser/ui/hover/hoverWidget\",\"vs/nls!vs/base/browser/ui/iconLabel/iconLabelHover\",\"vs/nls!vs/base/browser/ui/inputbox/inputBox\",\"vs/nls!vs/base/browser/ui/keybindingLabel/keybindingLabel\",\"vs/nls!vs/base/browser/ui/selectBox/selectBoxCustom\",\"vs/nls!vs/base/browser/ui/toolbar/toolbar\",\"vs/nls!vs/base/browser/ui/tree/abstractTree\",\"vs/nls!vs/base/common/actions\",\"vs/editor/browser/widget/multiDiffEditorWidget/utils\",\"vs/nls!vs/base/common/errorMessage\",\"vs/base/common/errorMessage\",\"vs/nls!vs/base/common/keybindingLabels\",\"vs/nls!vs/base/common/platform\",\"vs/base/browser/ui/scrollbar/scrollbarVisibilityController\",\"vs/base/browser/ui/tree/compressedObjectTreeModel\",\"vs/base/common/hotReload\",\"vs/base/common/fuzzyScorer\",\"vs/base/common/labels\",\"vs/base/browser/ui/dropdown/dropdown\",\"vs/base/browser/ui/list/rowCache\",\"vs/base/browser/ui/progressbar/progressbar\",\"vs/base/browser/ui/selectBox/selectBoxNative\",\"vs/base/browser/ui/scrollbar/horizontalScrollbar\",\"vs/base/browser/ui/scrollbar/verticalScrollbar\",\"vs/base/browser/ui/list/listPaging\",\"vs/base/browser/ui/table/tableWidget\",\"vs/base/browser/ui/selectBox/selectBoxCustom\",\"vs/base/browser/ui/selectBox/selectBox\",\"vs/base/browser/ui/findinput/replaceInput\",\"vs/base/browser/ui/menu/menu\",\"vs/base/browser/ui/toolbar/toolbar\",\"vs/base/browser/ui/tree/dataTree\",\"vs/base/browser/ui/tree/asyncDataTree\",\"vs/base/browser/defaultWorkerFactory\",\"vs/base/parts/storage/common/storage\",\"vs/editor/browser/viewParts/contentWidgets/contentWidgets\",\"vs/editor/browser/viewParts/overlayWidgets/overlayWidgets\",\"vs/editor/browser/widget/codeEditorContributions\",\"vs/editor/browser/widget/diffEditor/components/diffEditorSash\",\"vs/editor/browser/view/domLineBreaksComputer\",\"vs/editor/browser/view/viewOverlays\",\"vs/editor/common/languageFeatureRegistry\",\"vs/editor/common/languages/supports/electricCharacter\",\"vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl\",\"vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder\",\"vs/editor/common/services/semanticTokensDto\",\"vs/editor/contrib/hover/browser/resizableContentWidget\",\"vs/editor/contrib/inlineCompletions/browser/provideInlineCompletions\",\"vs/nls!vs/editor/browser/controller/textAreaHandler\",\"vs/nls!vs/editor/browser/coreCommands\",\"vs/nls!vs/editor/browser/editorExtensions\",\"vs/nls!vs/editor/browser/widget/codeEditorWidget\",\"vs/nls!vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer\",\"vs/nls!vs/editor/browser/widget/diffEditor/components/diffEditorEditors\",\"vs/nls!vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin\",\"vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin\",\"vs/nls!vs/editor/browser/widget/diffEditor/diffEditor.contribution\",\"vs/nls!vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature\",\"vs/nls!vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature\",\"vs/nls!vs/editor/browser/widget/diffEditor/features/revertButtonsFeature\",\"vs/editor/browser/widget/diffEditor/features/revertButtonsFeature\",\"vs/nls!vs/editor/browser/widget/diffEditor/registrations.contribution\",\"vs/nls!vs/editor/browser/widget/hoverWidget/hoverWidget\",\"vs/nls!vs/editor/browser/widget/multiDiffEditorWidget/colors\",\"vs/nls!vs/editor/common/config/editorConfigurationSchema\",\"vs/nls!vs/editor/common/config/editorOptions\",\"vs/editor/browser/viewParts/viewCursors/viewCursor\",\"vs/editor/browser/widget/diffEditor/diffEditorOptions\",\"vs/nls!vs/editor/common/core/editorColorRegistry\",\"vs/nls!vs/editor/common/editorContextKeys\",\"vs/nls!vs/editor/common/languages\",\"vs/editor/common/model/textModelTokens\",\"vs/editor/common/model/tokenizationTextModelPart\",\"vs/editor/common/services/editorSimpleWorker\",\"vs/nls!vs/editor/common/languages/modesRegistry\",\"vs/nls!vs/editor/common/model/editStack\",\"vs/nls!vs/editor/common/standaloneStrings\",\"vs/nls!vs/editor/common/viewLayout/viewLineRenderer\",\"vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines\",\"vs/nls!vs/editor/contrib/anchorSelect/browser/anchorSelect\",\"vs/nls!vs/editor/contrib/bracketMatching/browser/bracketMatching\",\"vs/nls!vs/editor/contrib/caretOperations/browser/caretOperations\",\"vs/nls!vs/editor/contrib/caretOperations/browser/transpose\",\"vs/nls!vs/editor/contrib/clipboard/browser/clipboard\",\"vs/nls!vs/editor/contrib/codeAction/browser/codeAction\",\"vs/nls!vs/editor/contrib/codeAction/browser/codeActionCommands\",\"vs/nls!vs/editor/contrib/codeAction/browser/codeActionContributions\",\"vs/nls!vs/editor/contrib/codeAction/browser/codeActionController\",\"vs/nls!vs/editor/contrib/codeAction/browser/codeActionMenu\",\"vs/nls!vs/editor/contrib/codeAction/browser/lightBulbWidget\",\"vs/nls!vs/editor/contrib/codelens/browser/codelensController\",\"vs/nls!vs/editor/contrib/colorPicker/browser/colorPickerWidget\",\"vs/nls!vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions\",\"vs/nls!vs/editor/contrib/comment/browser/comment\",\"vs/nls!vs/editor/contrib/contextmenu/browser/contextmenu\",\"vs/nls!vs/editor/contrib/cursorUndo/browser/cursorUndo\",\"vs/nls!vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution\",\"vs/nls!vs/editor/contrib/dropOrPasteInto/browser/copyPasteController\",\"vs/nls!vs/editor/contrib/dropOrPasteInto/browser/defaultProviders\",\"vs/nls!vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution\",\"vs/nls!vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController\",\"vs/nls!vs/editor/contrib/editorState/browser/keybindingCancellation\",\"vs/nls!vs/editor/contrib/find/browser/findController\",\"vs/nls!vs/editor/contrib/find/browser/findWidget\",\"vs/nls!vs/editor/contrib/folding/browser/folding\",\"vs/nls!vs/editor/contrib/folding/browser/foldingDecorations\",\"vs/nls!vs/editor/contrib/fontZoom/browser/fontZoom\",\"vs/nls!vs/editor/contrib/format/browser/formatActions\",\"vs/nls!vs/editor/contrib/gotoError/browser/gotoError\",\"vs/nls!vs/editor/contrib/gotoError/browser/gotoErrorWidget\",\"vs/nls!vs/editor/contrib/gotoSymbol/browser/goToCommands\",\"vs/nls!vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition\",\"vs/nls!vs/editor/contrib/gotoSymbol/browser/peek/referencesController\",\"vs/nls!vs/editor/contrib/gotoSymbol/browser/peek/referencesTree\",\"vs/nls!vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget\",\"vs/nls!vs/editor/contrib/gotoSymbol/browser/referencesModel\",\"vs/nls!vs/editor/contrib/gotoSymbol/browser/symbolNavigation\",\"vs/nls!vs/editor/contrib/hover/browser/hover\",\"vs/nls!vs/editor/contrib/hover/browser/markdownHoverParticipant\",\"vs/nls!vs/editor/contrib/hover/browser/markerHoverParticipant\",\"vs/nls!vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace\",\"vs/nls!vs/editor/contrib/indentation/browser/indentation\",\"vs/nls!vs/editor/contrib/inlayHints/browser/inlayHintsHover\",\"vs/nls!vs/editor/contrib/inlineCompletions/browser/commands\",\"vs/nls!vs/editor/contrib/inlineCompletions/browser/hoverParticipant\",\"vs/nls!vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys\",\"vs/nls!vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController\",\"vs/nls!vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget\",\"vs/nls!vs/editor/contrib/lineSelection/browser/lineSelection\",\"vs/nls!vs/editor/contrib/linesOperations/browser/linesOperations\",\"vs/nls!vs/editor/contrib/linkedEditing/browser/linkedEditing\",\"vs/nls!vs/editor/contrib/links/browser/links\",\"vs/nls!vs/editor/contrib/message/browser/messageController\",\"vs/nls!vs/editor/contrib/multicursor/browser/multicursor\",\"vs/nls!vs/editor/contrib/parameterHints/browser/parameterHints\",\"vs/nls!vs/editor/contrib/parameterHints/browser/parameterHintsWidget\",\"vs/nls!vs/editor/contrib/peekView/browser/peekView\",\"vs/nls!vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess\",\"vs/nls!vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess\",\"vs/nls!vs/editor/contrib/readOnlyMessage/browser/contribution\",\"vs/nls!vs/editor/contrib/rename/browser/rename\",\"vs/nls!vs/editor/contrib/rename/browser/renameInputField\",\"vs/nls!vs/editor/contrib/smartSelect/browser/smartSelect\",\"vs/nls!vs/editor/contrib/snippet/browser/snippetController2\",\"vs/nls!vs/editor/contrib/snippet/browser/snippetVariables\",\"vs/nls!vs/editor/contrib/stickyScroll/browser/stickyScrollActions\",\"vs/nls!vs/editor/contrib/suggest/browser/suggest\",\"vs/nls!vs/editor/contrib/suggest/browser/suggestController\",\"vs/nls!vs/editor/contrib/suggest/browser/suggestWidget\",\"vs/nls!vs/editor/contrib/suggest/browser/suggestWidgetDetails\",\"vs/nls!vs/editor/contrib/suggest/browser/suggestWidgetRenderer\",\"vs/nls!vs/editor/contrib/suggest/browser/suggestWidgetStatus\",\"vs/nls!vs/editor/contrib/symbolIcons/browser/symbolIcons\",\"vs/nls!vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode\",\"vs/nls!vs/editor/contrib/tokenization/browser/tokenization\",\"vs/nls!vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter\",\"vs/nls!vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators\",\"vs/nls!vs/editor/contrib/wordHighlighter/browser/highlightDecorations\",\"vs/nls!vs/editor/contrib/wordHighlighter/browser/wordHighlighter\",\"vs/nls!vs/editor/contrib/wordOperations/browser/wordOperations\",\"vs/nls!vs/platform/action/common/actionCommonCategories\",\"vs/nls!vs/platform/actionWidget/browser/actionList\",\"vs/nls!vs/platform/actionWidget/browser/actionWidget\",\"vs/nls!vs/platform/actions/browser/menuEntryActionViewItem\",\"vs/nls!vs/platform/actions/browser/toolbar\",\"vs/nls!vs/platform/actions/common/menuService\",\"vs/nls!vs/platform/audioCues/browser/audioCueService\",\"vs/nls!vs/platform/configuration/common/configurationRegistry\",\"vs/nls!vs/platform/contextkey/browser/contextKeyService\",\"vs/nls!vs/platform/contextkey/common/contextkey\",\"vs/nls!vs/platform/contextkey/common/contextkeys\",\"vs/nls!vs/platform/contextkey/common/scanner\",\"vs/nls!vs/platform/history/browser/contextScopedHistoryWidget\",\"vs/nls!vs/platform/keybinding/common/abstractKeybindingService\",\"vs/nls!vs/platform/list/browser/listService\",\"vs/nls!vs/platform/markers/common/markers\",\"vs/nls!vs/platform/quickinput/browser/commandsQuickAccess\",\"vs/nls!vs/platform/quickinput/browser/helpQuickAccess\",\"vs/nls!vs/platform/quickinput/browser/quickInput\",\"vs/nls!vs/platform/quickinput/browser/quickInputController\",\"vs/nls!vs/platform/quickinput/browser/quickInputList\",\"vs/nls!vs/platform/quickinput/browser/quickInputUtils\",\"vs/nls!vs/platform/theme/common/colorRegistry\",\"vs/nls!vs/platform/theme/common/iconRegistry\",\"vs/nls!vs/platform/undoRedo/common/undoRedoService\",\"vs/nls!vs/platform/workspace/common/workspace\",\"vs/platform/action/common/action\",\"vs/platform/action/common/actionCommonCategories\",\"vs/platform/contextkey/common/scanner\",\"vs/platform/editor/common/editor\",\"vs/platform/extensions/common/extensions\",\"vs/platform/history/browser/historyWidgetKeybindingHint\",\"vs/platform/instantiation/common/graph\",\"vs/editor/common/services/languageFeaturesService\",\"vs/editor/common/services/treeViewsDndService\",\"vs/editor/contrib/inlineCompletions/browser/ghostTextWidget\",\"vs/editor/contrib/links/browser/getLinks\",\"vs/editor/standalone/browser/colorizer\",\"vs/editor/contrib/parameterHints/browser/parameterHintsModel\",\"vs/editor/contrib/suggest/browser/suggestAlternatives\",\"vs/editor/contrib/suggest/browser/wordContextKey\",\"vs/editor/browser/config/editorConfiguration\",\"vs/platform/contextkey/browser/contextKeyService\",\"vs/platform/instantiation/common/instantiationService\",\"vs/platform/keybinding/common/baseResolvedKeybinding\",\"vs/platform/keybinding/common/abstractKeybindingService\",\"vs/platform/keybinding/common/usLayoutResolvedKeybinding\",\"vs/platform/accessibility/browser/accessibilityService\",\"vs/platform/contextview/browser/contextViewService\",\"vs/editor/contrib/diffEditorBreadcrumbs/browser/contribution\",\"vs/editor/contrib/documentSymbols/browser/documentSymbols\",\"vs/platform/clipboard/browser/clipboardService\",\"vs/platform/log/common/logService\",\"vs/editor/contrib/gotoError/browser/markerNavigationService\",\"vs/platform/markers/common/markerService\",\"vs/editor/browser/services/openerService\",\"vs/platform/opener/browser/link\",\"vs/platform/quickinput/browser/pickerQuickAccess\",\"vs/platform/quickinput/browser/quickInputBox\",\"vs/editor/browser/widget/hoverWidget/hoverWidget\",\"vs/editor/browser/services/webWorker\",\"vs/editor/common/cursor/cursor\",\"vs/editor/common/services/getIconClasses\",\"vs/editor/common/services/languagesAssociations\",\"vs/editor/common/services/languagesRegistry\",\"vs/editor/common/services/languageService\",\"vs/editor/contrib/hover/browser/marginHover\",\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsSource\",\"vs/editor/contrib/linesOperations/browser/moveLinesCommand\",\"vs/platform/configuration/common/configurations\",\"vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode\",\"vs/platform/quickinput/browser/helpQuickAccess\",\"vs/editor/standalone/browser/quickAccess/standaloneHelpQuickAccess\",\"vs/platform/quickinput/browser/quickAccess\",\"vs/platform/severityIcon/browser/severityIcon\",\"vs/editor/contrib/codelens/browser/codeLensCache\",\"vs/platform/actions/common/menuService\",\"vs/editor/browser/services/markerDecorations\",\"vs/editor/browser/view/viewController\",\"vs/editor/browser/widget/diffEditor/diffProviderFactoryService\",\"vs/editor/contrib/anchorSelect/browser/anchorSelect\",\"vs/editor/contrib/caretOperations/browser/caretOperations\",\"vs/editor/contrib/caretOperations/browser/transpose\",\"vs/editor/contrib/comment/browser/comment\",\"vs/editor/contrib/cursorUndo/browser/cursorUndo\",\"vs/editor/contrib/editorState/browser/keybindingCancellation\",\"vs/editor/contrib/codeAction/browser/codeActionKeybindingResolver\",\"vs/editor/contrib/fontZoom/browser/fontZoom\",\"vs/editor/contrib/format/browser/formatActions\",\"vs/editor/contrib/gotoSymbol/browser/symbolNavigation\",\"vs/editor/contrib/indentation/browser/indentation\",\"vs/editor/contrib/lineSelection/browser/lineSelection\",\"vs/editor/contrib/linesOperations/browser/linesOperations\",\"vs/editor/contrib/longLinesHelper/browser/longLinesHelper\",\"vs/editor/contrib/readOnlyMessage/browser/contribution\",\"vs/editor/contrib/smartSelect/browser/smartSelect\",\"vs/editor/contrib/tokenization/browser/tokenization\",\"vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators\",\"vs/editor/contrib/wordPartOperations/browser/wordPartOperations\",\"vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard\",\"vs/editor/standalone/browser/inspectTokens/inspectTokens\",\"vs/platform/quickinput/browser/commandsQuickAccess\",\"vs/editor/contrib/quickAccess/browser/commandsQuickAccess\",\"vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess\",\"vs/editor/browser/viewParts/minimap/minimap\",\"vs/editor/browser/widget/multiDiffEditorWidget/colors\",\"vs/editor/contrib/codeAction/browser/codeActionMenu\",\"vs/editor/contrib/gotoSymbol/browser/peek/referencesTree\",\"vs/platform/actionWidget/browser/actionList\",\"vs/platform/actionWidget/browser/actionWidget\",\"vs/platform/contextview/browser/contextMenuHandler\",\"vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer\",\"vs/editor/contrib/colorPicker/browser/colorPickerWidget\",\"vs/editor/contrib/parameterHints/browser/parameterHintsWidget\",\"vs/editor/contrib/parameterHints/browser/parameterHints\",\"vs/editor/contrib/unicodeHighlighter/browser/bannerController\",\"vs/platform/theme/browser/iconsStyleSheet\",\"vs/editor/browser/controller/mouseHandler\",\"vs/editor/browser/controller/pointerHandler\",\"vs/editor/browser/viewParts/lines/viewLines\",\"vs/platform/quickinput/browser/quickInputController\",\"vs/editor/browser/services/abstractCodeEditorService\",\"vs/editor/browser/services/hoverService\",\"vs/editor/browser/viewParts/editorScrollbar/editorScrollbar\",\"vs/editor/browser/viewParts/selections/selections\",\"vs/editor/browser/widget/diffEditor/components/diffEditorEditors\",\"vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight\",\"vs/editor/browser/viewParts/indentGuides/indentGuides\",\"vs/editor/browser/controller/textAreaHandler\",\"vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler\",\"vs/editor/browser/viewParts/viewCursors/viewCursors\",\"vs/editor/browser/viewParts/whitespace/whitespace\",\"vs/editor/browser/view\",\"vs/editor/common/model/bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider\",\"vs/editor/common/services/markerDecorationsService\",\"vs/editor/common/services/semanticTokensStylingService\",\"vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess\",\"vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess\",\"vs/editor/contrib/rename/browser/renameInputField\",\"vs/editor/contrib/rename/browser/rename\",\"vs/editor/contrib/semanticTokens/browser/documentSemanticTokens\",\"vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens\",\"vs/editor/contrib/suggest/browser/suggestWidgetRenderer\",\"vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess\",\"vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess\",\"vs/editor/standalone/common/themes\",\"vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast\",\"vs/editor/contrib/suggest/browser/suggestWidgetStatus\",\"vs/platform/contextview/browser/contextMenuService\",\"vs/platform/quickinput/browser/quickInputService\",\"vs/editor/standalone/browser/quickInput/standaloneQuickInputService\",\"vs/editor/browser/widget/diffEditor/components/diffEditorDecorations\",\"vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones\",\"vs/editor/common/services/modelService\",\"vs/editor/common/viewModel/viewModelLines\",\"vs/editor/common/viewModel/viewModelImpl\",\"vs/editor/browser/widget/diffEditor/diffEditor.contribution\",\"vs/editor/browser/widget/multiDiffEditorWidget/multiDiffEditorWidgetImpl\",\"vs/editor/browser/widget/multiDiffEditorWidget/multiDiffEditorWidget\",\"vs/editor/contrib/bracketMatching/browser/bracketMatching\",\"vs/editor/contrib/codeAction/browser/codeActionCommands\",\"vs/editor/contrib/codeAction/browser/codeActionContributions\",\"vs/editor/contrib/codelens/browser/codelensWidget\",\"vs/editor/contrib/codelens/browser/codelensController\",\"vs/editor/contrib/dnd/browser/dnd\",\"vs/editor/contrib/find/browser/findDecorations\",\"vs/editor/contrib/find/browser/findOptionsWidget\",\"vs/editor/contrib/find/browser/findState\",\"vs/editor/contrib/find/browser/findWidget\",\"vs/editor/contrib/colorPicker/browser/standaloneColorPickerWidget\",\"vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions\",\"vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace\",\"vs/editor/contrib/clipboard/browser/clipboard\",\"vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController\",\"vs/editor/contrib/linkedEditing/browser/linkedEditing\",\"vs/editor/contrib/links/browser/links\",\"vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider\",\"vs/editor/contrib/stickyScroll/browser/stickyScrollProvider\",\"vs/editor/contrib/stickyScroll/browser/stickyScrollWidget\",\"vs/editor/contrib/suggest/browser/suggestWidget\",\"vs/editor/contrib/multicursor/browser/multicursor\",\"vs/editor/contrib/wordHighlighter/browser/wordHighlighter\",\"vs/editor/contrib/zoneWidget/browser/zoneWidget\",\"vs/editor/contrib/gotoError/browser/gotoErrorWidget\",\"vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget\",\"vs/editor/contrib/hover/browser/markerHoverParticipant\",\"vs/editor/contrib/colorPicker/browser/colorContributions\",\"vs/editor/contrib/inlayHints/browser/inlayHintsHover\",\"vs/editor/contrib/inlayHints/browser/inlayHintsContribution\",\"vs/editor/contrib/stickyScroll/browser/stickyScrollActions\",\"vs/editor/contrib/stickyScroll/browser/stickyScrollContribution\",\"vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch\",\"vs/platform/undoRedo/common/undoRedoService\",\"vs/editor/contrib/contextmenu/browser/contextmenu\",\"vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution\",\"vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution\",\"vs/editor/contrib/snippet/browser/snippetVariables\",\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsModel\",\"vs/editor/contrib/inlineCompletions/browser/suggestWidgetInlineCompletionProvider\",\"vs/editor/contrib/inlineCompletions/browser/commands\",\"vs/editor/contrib/inlineCompletions/browser/hoverParticipant\",\"vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution\",\"vs/editor/contrib/suggest/browser/suggestInlineCompletions\",\"vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter\",\"vs/editor/editor.all\",\"vs/editor/standalone/browser/standaloneCodeEditor\",\"vs/editor/standalone/browser/standaloneEditor\",\"vs/editor/standalone/browser/standaloneLanguages\",\"vs/editor/editor.api\",\"vs/css\",\"vs/editor/edcore.main\"],oe=function(te){for(var e=[],L=0,k=te.length;L<k;L++)e[L]=se[te[L]];return e};define(se[939],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.load=void 0;function L(p,_,v,b){if(b=b||{},(b[\"vs/css\"]||{}).disabled){v({});return}const i=_.toUrl(p+\".css\");k(p,i,()=>{v({})},n=>{typeof v.error==\"function\"&&v.error(\"Could not find \"+i+\".\")})}e.load=L;function k(p,_,v,b){if(y(p,_)){v();return}E(p,_,v,b)}function y(p,_){const v=window.document.getElementsByTagName(\"link\");for(let b=0,a=v.length;b<a;b++){const i=v[b].getAttribute(\"data-name\"),n=v[b].getAttribute(\"href\");if(i===p||n===_)return!0}return!1}function E(p,_,v,b){const a=document.createElement(\"link\");a.setAttribute(\"rel\",\"stylesheet\"),a.setAttribute(\"type\",\"text/css\"),a.setAttribute(\"data-name\",p),S(p,a,v,b),a.setAttribute(\"href\",_),(window.document.head||window.document.getElementsByTagName(\"head\")[0]).appendChild(a)}function S(p,_,v,b){const a=()=>{_.removeEventListener(\"load\",i),_.removeEventListener(\"error\",n)},i=t=>{a(),v()},n=t=>{a(),b(t)};_.addEventListener(\"load\",i),_.addEventListener(\"error\",n)}}),define(se[3],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.load=e.create=e.setPseudoTranslation=e.getConfiguredDefaultLocale=e.localize2=e.localize=void 0;let L=typeof document<\"u\"&&document.location&&document.location.hash.indexOf(\"pseudo=true\")>=0;const k=\"i-default\";function y(u,f){let c;return f.length===0?c=u:c=u.replace(/\\{(\\d+)\\}/g,(d,s)=>{const l=s[0],o=f[l];let g=d;return typeof o==\"string\"?g=o:(typeof o==\"number\"||typeof o==\"boolean\"||o===void 0||o===null)&&(g=String(o)),g}),L&&(c=\"\\uFF3B\"+c.replace(/[aouei]/g,\"$&$&\")+\"\\uFF3D\"),c}function E(u,f){let c=u[f];return c||(c=u[\"*\"],c)?c:null}function S(u){return u.charAt(u.length-1)===\"/\"?u:u+\"/\"}async function p(u,f,c){const d=S(u)+S(f)+\"vscode/\"+S(c),s=await fetch(d);if(s.ok)return await s.json();throw new Error(`${s.status} - ${s.statusText}`)}function _(u){return function(f,c){const d=Array.prototype.slice.call(arguments,2);return y(u[f],d)}}function v(u){return(f,c,...d)=>({value:y(u[f],d),original:y(c,d)})}function b(u,f,...c){return y(f,c)}e.localize=b;function a(u,f,...c){const d=y(f,c);return{value:d,original:d}}e.localize2=a;function i(u){}e.getConfiguredDefaultLocale=i;function n(u){L=u}e.setPseudoTranslation=n;function t(u,f){var c;return{localize:_(f[u]),localize2:v(f[u]),getConfiguredDefaultLocale:(c=f.getConfiguredDefaultLocale)!==null&&c!==void 0?c:d=>{}}}e.create=t;function r(u,f,c,d){var s;const l=(s=d[\"vs/nls\"])!==null&&s!==void 0?s:{};if(!u||u.length===0)return c({localize:b,localize2:a,getConfiguredDefaultLocale:()=>{var C;return(C=l.availableLanguages)===null||C===void 0?void 0:C[\"*\"]}});const o=l.availableLanguages?E(l.availableLanguages,u):null,g=o===null||o===k;let h=\".nls\";g||(h=h+\".\"+o);const m=C=>{Array.isArray(C)?(C.localize=_(C),C.localize2=v(C)):(C.localize=_(C[u]),C.localize2=v(C[u])),C.getConfiguredDefaultLocale=()=>{var w;return(w=l.availableLanguages)===null||w===void 0?void 0:w[\"*\"]},c(C)};typeof l.loadBundle==\"function\"?l.loadBundle(u,o,(C,w)=>{C?f([u+\".nls\"],m):m(w)}):l.translationServiceUrl&&!g?(async()=>{var C;try{const w=await p(l.translationServiceUrl,o,u);return m(w)}catch(w){if(!o.includes(\"-\"))return console.error(w),f([u+\".nls\"],m);try{const D=o.split(\"-\")[0],I=await p(l.translationServiceUrl,D,u);return(C=l.availableLanguages)!==null&&C!==void 0||(l.availableLanguages={}),l.availableLanguages[\"*\"]=D,m(I)}catch(D){return console.error(D),f([u+\".nls\"],m)}}})():f([u+h],m,C=>{if(h===\".nls\"){console.error(\"Failed trying to load default language strings\",C);return}console.error(`Failed to load message bundle for language ${o}. Falling back to the default language:`,C),f([u+\".nls\"],m)})}e.load=r});/*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */const{entries:Bt,setPrototypeOf:Wt,isFrozen:Zt,getPrototypeOf:Yt,getOwnPropertyDescriptor:Qt}=Object;let{freeze:gt,seal:bt,create:Xt}=Object,{apply:Nt,construct:At}=typeof Reflect<\"u\"&&Reflect;Nt||(Nt=function(e,L,k){return e.apply(L,k)}),gt||(gt=function(e){return e}),bt||(bt=function(e){return e}),At||(At=function(e,L){return new e(...L)});const Jt=Ct(Array.prototype.forEach),Vt=Ct(Array.prototype.pop),Et=Ct(Array.prototype.push),kt=Ct(String.prototype.toLowerCase),Rt=Ct(String.prototype.toString),ei=Ct(String.prototype.match),_t=Ct(String.prototype.replace),ti=Ct(String.prototype.indexOf),ii=Ct(String.prototype.trim),vt=Ct(RegExp.prototype.test),It=ni(TypeError);function Ct(te){return function(e){for(var L=arguments.length,k=new Array(L>1?L-1:0),y=1;y<L;y++)k[y-1]=arguments[y];return Nt(te,e,k)}}function ni(te){return function(){for(var e=arguments.length,L=new Array(e),k=0;k<e;k++)L[k]=arguments[k];return At(te,L)}}function Ye(te,e,L){var k;L=(k=L)!==null&&k!==void 0?k:kt,Wt&&Wt(te,null);let y=e.length;for(;y--;){let E=e[y];if(typeof E==\"string\"){const S=L(E);S!==E&&(Zt(e)||(e[y]=S),E=S)}te[E]=!0}return te}function Lt(te){const e=Xt(null);for(const[L,k]of Bt(te))e[L]=k;return e}function Tt(te,e){for(;te!==null;){const k=Qt(te,e);if(k){if(k.get)return Ct(k.get);if(typeof k.value==\"function\")return Ct(k.value)}te=Yt(te)}function L(k){return console.warn(\"fallback value for\",k),null}return L}const zt=gt([\"a\",\"abbr\",\"acronym\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"bdi\",\"bdo\",\"big\",\"blink\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"center\",\"cite\",\"code\",\"col\",\"colgroup\",\"content\",\"data\",\"datalist\",\"dd\",\"decorator\",\"del\",\"details\",\"dfn\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"element\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"font\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"nobr\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"select\",\"shadow\",\"small\",\"source\",\"spacer\",\"span\",\"strike\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]),Pt=gt([\"svg\",\"a\",\"altglyph\",\"altglyphdef\",\"altglyphitem\",\"animatecolor\",\"animatemotion\",\"animatetransform\",\"circle\",\"clippath\",\"defs\",\"desc\",\"ellipse\",\"filter\",\"font\",\"g\",\"glyph\",\"glyphref\",\"hkern\",\"image\",\"line\",\"lineargradient\",\"marker\",\"mask\",\"metadata\",\"mpath\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialgradient\",\"rect\",\"stop\",\"style\",\"switch\",\"symbol\",\"text\",\"textpath\",\"title\",\"tref\",\"tspan\",\"view\",\"vkern\"]),Ot=gt([\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feDropShadow\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\"]),si=gt([\"animate\",\"color-profile\",\"cursor\",\"discard\",\"font-face\",\"font-face-format\",\"font-face-name\",\"font-face-src\",\"font-face-uri\",\"foreignobject\",\"hatch\",\"hatchpath\",\"mesh\",\"meshgradient\",\"meshpatch\",\"meshrow\",\"missing-glyph\",\"script\",\"set\",\"solidcolor\",\"unknown\",\"use\"]),Ft=gt([\"math\",\"menclose\",\"merror\",\"mfenced\",\"mfrac\",\"mglyph\",\"mi\",\"mlabeledtr\",\"mmultiscripts\",\"mn\",\"mo\",\"mover\",\"mpadded\",\"mphantom\",\"mroot\",\"mrow\",\"ms\",\"mspace\",\"msqrt\",\"mstyle\",\"msub\",\"msup\",\"msubsup\",\"mtable\",\"mtd\",\"mtext\",\"mtr\",\"munder\",\"munderover\",\"mprescripts\"]),oi=gt([\"maction\",\"maligngroup\",\"malignmark\",\"mlongdiv\",\"mscarries\",\"mscarry\",\"msgroup\",\"mstack\",\"msline\",\"msrow\",\"semantics\",\"annotation\",\"annotation-xml\",\"mprescripts\",\"none\"]),Ht=gt([\"#text\"]),Ut=gt([\"accept\",\"action\",\"align\",\"alt\",\"autocapitalize\",\"autocomplete\",\"autopictureinpicture\",\"autoplay\",\"background\",\"bgcolor\",\"border\",\"capture\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"clear\",\"color\",\"cols\",\"colspan\",\"controls\",\"controlslist\",\"coords\",\"crossorigin\",\"datetime\",\"decoding\",\"default\",\"dir\",\"disabled\",\"disablepictureinpicture\",\"disableremoteplayback\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"face\",\"for\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"id\",\"inputmode\",\"integrity\",\"ismap\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"multiple\",\"muted\",\"name\",\"nonce\",\"noshade\",\"novalidate\",\"nowrap\",\"open\",\"optimum\",\"pattern\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"rev\",\"reversed\",\"role\",\"rows\",\"rowspan\",\"spellcheck\",\"scope\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"srclang\",\"start\",\"src\",\"srcset\",\"step\",\"style\",\"summary\",\"tabindex\",\"title\",\"translate\",\"type\",\"usemap\",\"valign\",\"value\",\"width\",\"xmlns\",\"slot\"]),xt=gt([\"accent-height\",\"accumulate\",\"additive\",\"alignment-baseline\",\"ascent\",\"attributename\",\"attributetype\",\"azimuth\",\"basefrequency\",\"baseline-shift\",\"begin\",\"bias\",\"by\",\"class\",\"clip\",\"clippathunits\",\"clip-path\",\"clip-rule\",\"color\",\"color-interpolation\",\"color-interpolation-filters\",\"color-profile\",\"color-rendering\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"diffuseconstant\",\"direction\",\"display\",\"divisor\",\"dur\",\"edgemode\",\"elevation\",\"end\",\"fill\",\"fill-opacity\",\"fill-rule\",\"filter\",\"filterunits\",\"flood-color\",\"flood-opacity\",\"font-family\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-variant\",\"font-weight\",\"fx\",\"fy\",\"g1\",\"g2\",\"glyph-name\",\"glyphref\",\"gradientunits\",\"gradienttransform\",\"height\",\"href\",\"id\",\"image-rendering\",\"in\",\"in2\",\"k\",\"k1\",\"k2\",\"k3\",\"k4\",\"kerning\",\"keypoints\",\"keysplines\",\"keytimes\",\"lang\",\"lengthadjust\",\"letter-spacing\",\"kernelmatrix\",\"kernelunitlength\",\"lighting-color\",\"local\",\"marker-end\",\"marker-mid\",\"marker-start\",\"markerheight\",\"markerunits\",\"markerwidth\",\"maskcontentunits\",\"maskunits\",\"max\",\"mask\",\"media\",\"method\",\"mode\",\"min\",\"name\",\"numoctaves\",\"offset\",\"operator\",\"opacity\",\"order\",\"orient\",\"orientation\",\"origin\",\"overflow\",\"paint-order\",\"path\",\"pathlength\",\"patterncontentunits\",\"patterntransform\",\"patternunits\",\"points\",\"preservealpha\",\"preserveaspectratio\",\"primitiveunits\",\"r\",\"rx\",\"ry\",\"radius\",\"refx\",\"refy\",\"repeatcount\",\"repeatdur\",\"restart\",\"result\",\"rotate\",\"scale\",\"seed\",\"shape-rendering\",\"specularconstant\",\"specularexponent\",\"spreadmethod\",\"startoffset\",\"stddeviation\",\"stitchtiles\",\"stop-color\",\"stop-opacity\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke\",\"stroke-width\",\"style\",\"surfacescale\",\"systemlanguage\",\"tabindex\",\"targetx\",\"targety\",\"transform\",\"transform-origin\",\"text-anchor\",\"text-decoration\",\"text-rendering\",\"textlength\",\"type\",\"u1\",\"u2\",\"unicode\",\"values\",\"viewbox\",\"visibility\",\"version\",\"vert-adv-y\",\"vert-origin-x\",\"vert-origin-y\",\"width\",\"word-spacing\",\"wrap\",\"writing-mode\",\"xchannelselector\",\"ychannelselector\",\"x\",\"x1\",\"x2\",\"xmlns\",\"y\",\"y1\",\"y2\",\"z\",\"zoomandpan\"]),Kt=gt([\"accent\",\"accentunder\",\"align\",\"bevelled\",\"close\",\"columnsalign\",\"columnlines\",\"columnspan\",\"denomalign\",\"depth\",\"dir\",\"display\",\"displaystyle\",\"encoding\",\"fence\",\"frame\",\"height\",\"href\",\"id\",\"largeop\",\"length\",\"linethickness\",\"lspace\",\"lquote\",\"mathbackground\",\"mathcolor\",\"mathsize\",\"mathvariant\",\"maxsize\",\"minsize\",\"movablelimits\",\"notation\",\"numalign\",\"open\",\"rowalign\",\"rowlines\",\"rowspacing\",\"rowspan\",\"rspace\",\"rquote\",\"scriptlevel\",\"scriptminsize\",\"scriptsizemultiplier\",\"selection\",\"separator\",\"separators\",\"stretchy\",\"subscriptshift\",\"supscriptshift\",\"symmetric\",\"voffset\",\"width\",\"xmlns\"]),Mt=gt([\"xlink:href\",\"xml:id\",\"xlink:title\",\"xml:space\",\"xmlns:xlink\"]),ri=bt(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm),ai=bt(/<%[\\w\\W]*|[\\w\\W]*%>/gm),li=bt(/\\${[\\w\\W]*}/gm),di=bt(/^data-[\\-\\w.\\u00B7-\\uFFFF]/),ci=bt(/^aria-[\\-\\w]+$/),qt=bt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i),ui=bt(/^(?:\\w+script|data):/i),hi=bt(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g),jt=bt(/^html$/i);var $t=Object.freeze({__proto__:null,MUSTACHE_EXPR:ri,ERB_EXPR:ai,TMPLIT_EXPR:li,DATA_ATTR:di,ARIA_ATTR:ci,IS_ALLOWED_URI:qt,IS_SCRIPT_OR_DATA:ui,ATTR_WHITESPACE:hi,DOCTYPE_NAME:jt});const gi=()=>typeof window>\"u\"?null:window,fi=function(e,L){if(typeof e!=\"object\"||typeof e.createPolicy!=\"function\")return null;let k=null;const y=\"data-tt-policy-suffix\";L&&L.hasAttribute(y)&&(k=L.getAttribute(y));const E=\"dompurify\"+(k?\"#\"+k:\"\");try{return e.createPolicy(E,{createHTML(S){return S},createScriptURL(S){return S}})}catch{return console.warn(\"TrustedTypes policy \"+E+\" could not be created.\"),null}};function Gt(){let te=arguments.length>0&&arguments[0]!==void 0?arguments[0]:gi();const e=Te=>Gt(Te);if(e.version=\"3.0.5\",e.removed=[],!te||!te.document||te.document.nodeType!==9)return e.isSupported=!1,e;const L=te.document,k=L.currentScript;let{document:y}=te;const{DocumentFragment:E,HTMLTemplateElement:S,Node:p,Element:_,NodeFilter:v,NamedNodeMap:b=te.NamedNodeMap||te.MozNamedAttrMap,HTMLFormElement:a,DOMParser:i,trustedTypes:n}=te,t=_.prototype,r=Tt(t,\"cloneNode\"),u=Tt(t,\"nextSibling\"),f=Tt(t,\"childNodes\"),c=Tt(t,\"parentNode\");if(typeof S==\"function\"){const Te=y.createElement(\"template\");Te.content&&Te.content.ownerDocument&&(y=Te.content.ownerDocument)}let d,s=\"\";const{implementation:l,createNodeIterator:o,createDocumentFragment:g,getElementsByTagName:h}=y,{importNode:m}=L;let C={};e.isSupported=typeof Bt==\"function\"&&typeof c==\"function\"&&l&&l.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:w,ERB_EXPR:D,TMPLIT_EXPR:I,DATA_ATTR:T,ARIA_ATTR:A,IS_SCRIPT_OR_DATA:P,ATTR_WHITESPACE:N}=$t;let{IS_ALLOWED_URI:M}=$t,R=null;const x=Ye({},[...zt,...Pt,...Ot,...Ft,...Ht]);let O=null;const B=Ye({},[...Ut,...xt,...Kt,...Mt]);let W=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),V=null,K=null,F=!0,q=!0,ie=!1,ae=!0,ne=!1,$=!1,J=!1,Q=!1,re=!1,de=!1,he=!1,me=!0,X=!1;const U=\"user-content-\";let G=!0,z=!1,H={},Y=null;const j=Ye({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]);let Z=null;const ee=Ye({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]);let le=null;const ue=Ye({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"role\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),ce=\"http://www.w3.org/1998/Math/MathML\",pe=\"http://www.w3.org/2000/svg\",ve=\"http://www.w3.org/1999/xhtml\";let Ce=ve,Se=!1,_e=null;const Ee=Ye({},[ce,pe,ve],Rt);let Ae;const xe=[\"application/xhtml+xml\",\"text/html\"],Be=\"text/html\";let De,Ie=null;const fe=y.createElement(\"form\"),be=function(we){return we instanceof RegExp||we instanceof Function},Ne=function(we){if(!(Ie&&Ie===we)){if((!we||typeof we!=\"object\")&&(we={}),we=Lt(we),Ae=xe.indexOf(we.PARSER_MEDIA_TYPE)===-1?Ae=Be:Ae=we.PARSER_MEDIA_TYPE,De=Ae===\"application/xhtml+xml\"?Rt:kt,R=\"ALLOWED_TAGS\"in we?Ye({},we.ALLOWED_TAGS,De):x,O=\"ALLOWED_ATTR\"in we?Ye({},we.ALLOWED_ATTR,De):B,_e=\"ALLOWED_NAMESPACES\"in we?Ye({},we.ALLOWED_NAMESPACES,Rt):Ee,le=\"ADD_URI_SAFE_ATTR\"in we?Ye(Lt(ue),we.ADD_URI_SAFE_ATTR,De):ue,Z=\"ADD_DATA_URI_TAGS\"in we?Ye(Lt(ee),we.ADD_DATA_URI_TAGS,De):ee,Y=\"FORBID_CONTENTS\"in we?Ye({},we.FORBID_CONTENTS,De):j,V=\"FORBID_TAGS\"in we?Ye({},we.FORBID_TAGS,De):{},K=\"FORBID_ATTR\"in we?Ye({},we.FORBID_ATTR,De):{},H=\"USE_PROFILES\"in we?we.USE_PROFILES:!1,F=we.ALLOW_ARIA_ATTR!==!1,q=we.ALLOW_DATA_ATTR!==!1,ie=we.ALLOW_UNKNOWN_PROTOCOLS||!1,ae=we.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ne=we.SAFE_FOR_TEMPLATES||!1,$=we.WHOLE_DOCUMENT||!1,re=we.RETURN_DOM||!1,de=we.RETURN_DOM_FRAGMENT||!1,he=we.RETURN_TRUSTED_TYPE||!1,Q=we.FORCE_BODY||!1,me=we.SANITIZE_DOM!==!1,X=we.SANITIZE_NAMED_PROPS||!1,G=we.KEEP_CONTENT!==!1,z=we.IN_PLACE||!1,M=we.ALLOWED_URI_REGEXP||qt,Ce=we.NAMESPACE||ve,W=we.CUSTOM_ELEMENT_HANDLING||{},we.CUSTOM_ELEMENT_HANDLING&&be(we.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(W.tagNameCheck=we.CUSTOM_ELEMENT_HANDLING.tagNameCheck),we.CUSTOM_ELEMENT_HANDLING&&be(we.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(W.attributeNameCheck=we.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),we.CUSTOM_ELEMENT_HANDLING&&typeof we.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements==\"boolean\"&&(W.allowCustomizedBuiltInElements=we.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ne&&(q=!1),de&&(re=!0),H&&(R=Ye({},[...Ht]),O=[],H.html===!0&&(Ye(R,zt),Ye(O,Ut)),H.svg===!0&&(Ye(R,Pt),Ye(O,xt),Ye(O,Mt)),H.svgFilters===!0&&(Ye(R,Ot),Ye(O,xt),Ye(O,Mt)),H.mathMl===!0&&(Ye(R,Ft),Ye(O,Kt),Ye(O,Mt))),we.ADD_TAGS&&(R===x&&(R=Lt(R)),Ye(R,we.ADD_TAGS,De)),we.ADD_ATTR&&(O===B&&(O=Lt(O)),Ye(O,we.ADD_ATTR,De)),we.ADD_URI_SAFE_ATTR&&Ye(le,we.ADD_URI_SAFE_ATTR,De),we.FORBID_CONTENTS&&(Y===j&&(Y=Lt(Y)),Ye(Y,we.FORBID_CONTENTS,De)),G&&(R[\"#text\"]=!0),$&&Ye(R,[\"html\",\"head\",\"body\"]),R.table&&(Ye(R,[\"tbody\"]),delete V.tbody),we.TRUSTED_TYPES_POLICY){if(typeof we.TRUSTED_TYPES_POLICY.createHTML!=\"function\")throw It('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');if(typeof we.TRUSTED_TYPES_POLICY.createScriptURL!=\"function\")throw It('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');d=we.TRUSTED_TYPES_POLICY,s=d.createHTML(\"\")}else d===void 0&&(d=fi(n,k)),d!==null&&typeof s==\"string\"&&(s=d.createHTML(\"\"));gt&&gt(we),Ie=we}},Pe=Ye({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),ze=Ye({},[\"foreignobject\",\"desc\",\"title\",\"annotation-xml\"]),Ke=Ye({},[\"title\",\"style\",\"font\",\"a\",\"script\"]),je=Ye({},Pt);Ye(je,Ot),Ye(je,si);const Je=Ye({},Ft);Ye(Je,oi);const rt=function(we){let Re=c(we);(!Re||!Re.tagName)&&(Re={namespaceURI:Ce,tagName:\"template\"});const Oe=kt(we.tagName),Ve=kt(Re.tagName);return _e[we.namespaceURI]?we.namespaceURI===pe?Re.namespaceURI===ve?Oe===\"svg\":Re.namespaceURI===ce?Oe===\"svg\"&&(Ve===\"annotation-xml\"||Pe[Ve]):!!je[Oe]:we.namespaceURI===ce?Re.namespaceURI===ve?Oe===\"math\":Re.namespaceURI===pe?Oe===\"math\"&&ze[Ve]:!!Je[Oe]:we.namespaceURI===ve?Re.namespaceURI===pe&&!ze[Ve]||Re.namespaceURI===ce&&!Pe[Ve]?!1:!Je[Oe]&&(Ke[Oe]||!je[Oe]):!!(Ae===\"application/xhtml+xml\"&&_e[we.namespaceURI]):!1},et=function(we){Et(e.removed,{element:we});try{we.parentNode.removeChild(we)}catch{we.remove()}},st=function(we,Re){try{Et(e.removed,{attribute:Re.getAttributeNode(we),from:Re})}catch{Et(e.removed,{attribute:null,from:Re})}if(Re.removeAttribute(we),we===\"is\"&&!O[we])if(re||de)try{et(Re)}catch{}else try{Re.setAttribute(we,\"\")}catch{}},Qe=function(we){let Re,Oe;if(Q)we=\"<remove></remove>\"+we;else{const Ze=ei(we,/^[\\r\\n\\t ]+/);Oe=Ze&&Ze[0]}Ae===\"application/xhtml+xml\"&&Ce===ve&&(we='<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>'+we+\"</body></html>\");const Ve=d?d.createHTML(we):we;if(Ce===ve)try{Re=new i().parseFromString(Ve,Ae)}catch{}if(!Re||!Re.documentElement){Re=l.createDocument(Ce,\"template\",null);try{Re.documentElement.innerHTML=Se?s:Ve}catch{}}const $e=Re.body||Re.documentElement;return we&&Oe&&$e.insertBefore(y.createTextNode(Oe),$e.childNodes[0]||null),Ce===ve?h.call(Re,$?\"html\":\"body\")[0]:$?Re.documentElement:$e},ft=function(we){return o.call(we.ownerDocument||we,we,v.SHOW_ELEMENT|v.SHOW_COMMENT|v.SHOW_TEXT,null,!1)},at=function(we){return we instanceof a&&(typeof we.nodeName!=\"string\"||typeof we.textContent!=\"string\"||typeof we.removeChild!=\"function\"||!(we.attributes instanceof b)||typeof we.removeAttribute!=\"function\"||typeof we.setAttribute!=\"function\"||typeof we.namespaceURI!=\"string\"||typeof we.insertBefore!=\"function\"||typeof we.hasChildNodes!=\"function\")},ct=function(we){return typeof p==\"object\"?we instanceof p:we&&typeof we==\"object\"&&typeof we.nodeType==\"number\"&&typeof we.nodeName==\"string\"},lt=function(we,Re,Oe){C[we]&&Jt(C[we],Ve=>{Ve.call(e,Re,Oe,Ie)})},mt=function(we){let Re;if(lt(\"beforeSanitizeElements\",we,null),at(we))return et(we),!0;const Oe=De(we.nodeName);if(lt(\"uponSanitizeElement\",we,{tagName:Oe,allowedTags:R}),we.hasChildNodes()&&!ct(we.firstElementChild)&&(!ct(we.content)||!ct(we.content.firstElementChild))&&vt(/<[/\\w]/g,we.innerHTML)&&vt(/<[/\\w]/g,we.textContent))return et(we),!0;if(!R[Oe]||V[Oe]){if(!V[Oe]&&Le(Oe)&&(W.tagNameCheck instanceof RegExp&&vt(W.tagNameCheck,Oe)||W.tagNameCheck instanceof Function&&W.tagNameCheck(Oe)))return!1;if(G&&!Y[Oe]){const Ve=c(we)||we.parentNode,$e=f(we)||we.childNodes;if($e&&Ve){const Ze=$e.length;for(let Ge=Ze-1;Ge>=0;--Ge)Ve.insertBefore(r($e[Ge],!0),u(we))}}return et(we),!0}return we instanceof _&&!rt(we)||(Oe===\"noscript\"||Oe===\"noembed\"||Oe===\"noframes\")&&vt(/<\\/no(script|embed|frames)/i,we.innerHTML)?(et(we),!0):(ne&&we.nodeType===3&&(Re=we.textContent,Re=_t(Re,w,\" \"),Re=_t(Re,D,\" \"),Re=_t(Re,I,\" \"),we.textContent!==Re&&(Et(e.removed,{element:we.cloneNode()}),we.textContent=Re)),lt(\"afterSanitizeElements\",we,null),!1)},pt=function(we,Re,Oe){if(me&&(Re===\"id\"||Re===\"name\")&&(Oe in y||Oe in fe))return!1;if(!(q&&!K[Re]&&vt(T,Re))){if(!(F&&vt(A,Re))){if(!O[Re]||K[Re]){if(!(Le(we)&&(W.tagNameCheck instanceof RegExp&&vt(W.tagNameCheck,we)||W.tagNameCheck instanceof Function&&W.tagNameCheck(we))&&(W.attributeNameCheck instanceof RegExp&&vt(W.attributeNameCheck,Re)||W.attributeNameCheck instanceof Function&&W.attributeNameCheck(Re))||Re===\"is\"&&W.allowCustomizedBuiltInElements&&(W.tagNameCheck instanceof RegExp&&vt(W.tagNameCheck,Oe)||W.tagNameCheck instanceof Function&&W.tagNameCheck(Oe))))return!1}else if(!le[Re]){if(!vt(M,_t(Oe,N,\"\"))){if(!((Re===\"src\"||Re===\"xlink:href\"||Re===\"href\")&&we!==\"script\"&&ti(Oe,\"data:\")===0&&Z[we])){if(!(ie&&!vt(P,_t(Oe,N,\"\")))){if(Oe)return!1}}}}}}return!0},Le=function(we){return we.indexOf(\"-\")>0},ye=function(we){let Re,Oe,Ve,$e;lt(\"beforeSanitizeAttributes\",we,null);const{attributes:Ze}=we;if(!Ze)return;const Ge={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:O};for($e=Ze.length;$e--;){Re=Ze[$e];const{name:qe,namespaceURI:Fe}=Re;if(Oe=qe===\"value\"?Re.value:ii(Re.value),Ve=De(qe),Ge.attrName=Ve,Ge.attrValue=Oe,Ge.keepAttr=!0,Ge.forceKeepAttr=void 0,lt(\"uponSanitizeAttribute\",we,Ge),Oe=Ge.attrValue,Ge.forceKeepAttr||(st(qe,we),!Ge.keepAttr))continue;if(!ae&&vt(/\\/>/i,Oe)){st(qe,we);continue}ne&&(Oe=_t(Oe,w,\" \"),Oe=_t(Oe,D,\" \"),Oe=_t(Oe,I,\" \"));const We=De(we.nodeName);if(pt(We,Ve,Oe)){if(X&&(Ve===\"id\"||Ve===\"name\")&&(st(qe,we),Oe=U+Oe),d&&typeof n==\"object\"&&typeof n.getAttributeType==\"function\"&&!Fe)switch(n.getAttributeType(We,Ve)){case\"TrustedHTML\":{Oe=d.createHTML(Oe);break}case\"TrustedScriptURL\":{Oe=d.createScriptURL(Oe);break}}try{Fe?we.setAttributeNS(Fe,qe,Oe):we.setAttribute(qe,Oe),Vt(e.removed)}catch{}}}lt(\"afterSanitizeAttributes\",we,null)},Me=function Te(we){let Re;const Oe=ft(we);for(lt(\"beforeSanitizeShadowDOM\",we,null);Re=Oe.nextNode();)lt(\"uponSanitizeShadowNode\",Re,null),!mt(Re)&&(Re.content instanceof E&&Te(Re.content),ye(Re));lt(\"afterSanitizeShadowDOM\",we,null)};return e.sanitize=function(Te){let we=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Re,Oe,Ve,$e;if(Se=!Te,Se&&(Te=\"<!-->\"),typeof Te!=\"string\"&&!ct(Te))if(typeof Te.toString==\"function\"){if(Te=Te.toString(),typeof Te!=\"string\")throw It(\"dirty is not a string, aborting\")}else throw It(\"toString is not a function\");if(!e.isSupported)return Te;if(J||Ne(we),e.removed=[],typeof Te==\"string\"&&(z=!1),z){if(Te.nodeName){const qe=De(Te.nodeName);if(!R[qe]||V[qe])throw It(\"root node is forbidden and cannot be sanitized in-place\")}}else if(Te instanceof p)Re=Qe(\"<!---->\"),Oe=Re.ownerDocument.importNode(Te,!0),Oe.nodeType===1&&Oe.nodeName===\"BODY\"||Oe.nodeName===\"HTML\"?Re=Oe:Re.appendChild(Oe);else{if(!re&&!ne&&!$&&Te.indexOf(\"<\")===-1)return d&&he?d.createHTML(Te):Te;if(Re=Qe(Te),!Re)return re?null:he?s:\"\"}Re&&Q&&et(Re.firstChild);const Ze=ft(z?Te:Re);for(;Ve=Ze.nextNode();)mt(Ve)||(Ve.content instanceof E&&Me(Ve.content),ye(Ve));if(z)return Te;if(re){if(de)for($e=g.call(Re.ownerDocument);Re.firstChild;)$e.appendChild(Re.firstChild);else $e=Re;return(O.shadowroot||O.shadowrootmode)&&($e=m.call(L,$e,!0)),$e}let Ge=$?Re.outerHTML:Re.innerHTML;return $&&R[\"!doctype\"]&&Re.ownerDocument&&Re.ownerDocument.doctype&&Re.ownerDocument.doctype.name&&vt(jt,Re.ownerDocument.doctype.name)&&(Ge=\"<!DOCTYPE \"+Re.ownerDocument.doctype.name+`>\n`+Ge),ne&&(Ge=_t(Ge,w,\" \"),Ge=_t(Ge,D,\" \"),Ge=_t(Ge,I,\" \")),d&&he?d.createHTML(Ge):Ge},e.setConfig=function(Te){Ne(Te),J=!0},e.clearConfig=function(){Ie=null,J=!1},e.isValidAttribute=function(Te,we,Re){Ie||Ne({});const Oe=De(Te),Ve=De(we);return pt(Oe,Ve,Re)},e.addHook=function(Te,we){typeof we==\"function\"&&(C[Te]=C[Te]||[],Et(C[Te],we))},e.removeHook=function(Te){if(C[Te])return Vt(C[Te])},e.removeHooks=function(Te){C[Te]&&(C[Te]=[])},e.removeAllHooks=function(){C={}},e}var mi=Gt();define(\"vs/base/browser/dompurify/dompurify\",function(){return mi}),define(se[40],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createFastDomNode=e.FastDomNode=void 0;class L{constructor(S){this.domNode=S,this._maxWidth=\"\",this._width=\"\",this._height=\"\",this._top=\"\",this._left=\"\",this._bottom=\"\",this._right=\"\",this._paddingLeft=\"\",this._fontFamily=\"\",this._fontWeight=\"\",this._fontSize=\"\",this._fontStyle=\"\",this._fontFeatureSettings=\"\",this._fontVariationSettings=\"\",this._textDecoration=\"\",this._lineHeight=\"\",this._letterSpacing=\"\",this._className=\"\",this._display=\"\",this._position=\"\",this._visibility=\"\",this._color=\"\",this._backgroundColor=\"\",this._layerHint=!1,this._contain=\"none\",this._boxShadow=\"\"}setMaxWidth(S){const p=k(S);this._maxWidth!==p&&(this._maxWidth=p,this.domNode.style.maxWidth=this._maxWidth)}setWidth(S){const p=k(S);this._width!==p&&(this._width=p,this.domNode.style.width=this._width)}setHeight(S){const p=k(S);this._height!==p&&(this._height=p,this.domNode.style.height=this._height)}setTop(S){const p=k(S);this._top!==p&&(this._top=p,this.domNode.style.top=this._top)}setLeft(S){const p=k(S);this._left!==p&&(this._left=p,this.domNode.style.left=this._left)}setBottom(S){const p=k(S);this._bottom!==p&&(this._bottom=p,this.domNode.style.bottom=this._bottom)}setRight(S){const p=k(S);this._right!==p&&(this._right=p,this.domNode.style.right=this._right)}setPaddingLeft(S){const p=k(S);this._paddingLeft!==p&&(this._paddingLeft=p,this.domNode.style.paddingLeft=this._paddingLeft)}setFontFamily(S){this._fontFamily!==S&&(this._fontFamily=S,this.domNode.style.fontFamily=this._fontFamily)}setFontWeight(S){this._fontWeight!==S&&(this._fontWeight=S,this.domNode.style.fontWeight=this._fontWeight)}setFontSize(S){const p=k(S);this._fontSize!==p&&(this._fontSize=p,this.domNode.style.fontSize=this._fontSize)}setFontStyle(S){this._fontStyle!==S&&(this._fontStyle=S,this.domNode.style.fontStyle=this._fontStyle)}setFontFeatureSettings(S){this._fontFeatureSettings!==S&&(this._fontFeatureSettings=S,this.domNode.style.fontFeatureSettings=this._fontFeatureSettings)}setFontVariationSettings(S){this._fontVariationSettings!==S&&(this._fontVariationSettings=S,this.domNode.style.fontVariationSettings=this._fontVariationSettings)}setTextDecoration(S){this._textDecoration!==S&&(this._textDecoration=S,this.domNode.style.textDecoration=this._textDecoration)}setLineHeight(S){const p=k(S);this._lineHeight!==p&&(this._lineHeight=p,this.domNode.style.lineHeight=this._lineHeight)}setLetterSpacing(S){const p=k(S);this._letterSpacing!==p&&(this._letterSpacing=p,this.domNode.style.letterSpacing=this._letterSpacing)}setClassName(S){this._className!==S&&(this._className=S,this.domNode.className=this._className)}toggleClassName(S,p){this.domNode.classList.toggle(S,p),this._className=this.domNode.className}setDisplay(S){this._display!==S&&(this._display=S,this.domNode.style.display=this._display)}setPosition(S){this._position!==S&&(this._position=S,this.domNode.style.position=this._position)}setVisibility(S){this._visibility!==S&&(this._visibility=S,this.domNode.style.visibility=this._visibility)}setColor(S){this._color!==S&&(this._color=S,this.domNode.style.color=this._color)}setBackgroundColor(S){this._backgroundColor!==S&&(this._backgroundColor=S,this.domNode.style.backgroundColor=this._backgroundColor)}setLayerHinting(S){this._layerHint!==S&&(this._layerHint=S,this.domNode.style.transform=this._layerHint?\"translate3d(0px, 0px, 0px)\":\"\")}setBoxShadow(S){this._boxShadow!==S&&(this._boxShadow=S,this.domNode.style.boxShadow=S)}setContain(S){this._contain!==S&&(this._contain=S,this.domNode.style.contain=this._contain)}setAttribute(S,p){this.domNode.setAttribute(S,p)}removeAttribute(S){this.domNode.removeAttribute(S)}appendChild(S){this.domNode.appendChild(S.domNode)}removeChild(S){this.domNode.removeChild(S.domNode)}}e.FastDomNode=L;function k(E){return typeof E==\"number\"?`${E}px`:E}function y(E){return new L(E)}e.createFastDomNode=y}),define(se[394],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IframeUtils=void 0;const L=new WeakMap;function k(E){if(!E.parent||E.parent===E)return null;try{const S=E.location,p=E.parent.location;if(S.origin!==\"null\"&&p.origin!==\"null\"&&S.origin!==p.origin)return null}catch{return null}return E.parent}class y{static getSameOriginWindowChain(S){let p=L.get(S);if(!p){p=[],L.set(S,p);let _=S,v;do v=k(_),v?p.push({window:new WeakRef(_),iframeElement:_.frameElement||null}):p.push({window:new WeakRef(_),iframeElement:null}),_=v;while(_)}return p.slice(0)}static getPositionOfChildWindowRelativeToAncestorWindow(S,p){var _,v;if(!p||S===p)return{top:0,left:0};let b=0,a=0;const i=this.getSameOriginWindowChain(S);for(const n of i){const t=n.window.deref();if(b+=(_=t?.scrollY)!==null&&_!==void 0?_:0,a+=(v=t?.scrollX)!==null&&v!==void 0?v:0,t===p||!n.iframeElement)break;const r=n.iframeElement.getBoundingClientRect();b+=r.top,a+=r.left}return{top:b,left:a}}}e.IframeUtils=y}),define(se[266],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.inputLatency=void 0;var L;(function(k){const y={total:0,min:Number.MAX_VALUE,max:0},E={...y},S={...y},p={...y};let _=0;const v={keydown:0,input:0,render:0};function b(){s(),performance.mark(\"inputlatency/start\"),performance.mark(\"keydown/start\"),v.keydown=1,queueMicrotask(a)}k.onKeyDown=b;function a(){v.keydown===1&&(performance.mark(\"keydown/end\"),v.keydown=2)}function i(){performance.mark(\"input/start\"),v.input=1,d()}k.onBeforeInput=i;function n(){v.input===0&&i(),queueMicrotask(t)}k.onInput=n;function t(){v.input===1&&(performance.mark(\"input/end\"),v.input=2)}function r(){s()}k.onKeyUp=r;function u(){s()}k.onSelectionChange=u;function f(){v.keydown===2&&v.input===2&&v.render===0&&(performance.mark(\"render/start\"),v.render=1,queueMicrotask(c),d())}k.onRenderStart=f;function c(){v.render===1&&(performance.mark(\"render/end\"),v.render=2)}function d(){setTimeout(s)}function s(){v.keydown===2&&v.input===2&&v.render===2&&(performance.mark(\"inputlatency/end\"),performance.measure(\"keydown\",\"keydown/start\",\"keydown/end\"),performance.measure(\"input\",\"input/start\",\"input/end\"),performance.measure(\"render\",\"render/start\",\"render/end\"),performance.measure(\"inputlatency\",\"inputlatency/start\",\"inputlatency/end\"),l(\"keydown\",y),l(\"input\",E),l(\"render\",S),l(\"inputlatency\",p),_++,o())}function l(C,w){const D=performance.getEntriesByName(C)[0].duration;w.total+=D,w.min=Math.min(w.min,D),w.max=Math.max(w.max,D)}function o(){performance.clearMarks(\"keydown/start\"),performance.clearMarks(\"keydown/end\"),performance.clearMarks(\"input/start\"),performance.clearMarks(\"input/end\"),performance.clearMarks(\"render/start\"),performance.clearMarks(\"render/end\"),performance.clearMarks(\"inputlatency/start\"),performance.clearMarks(\"inputlatency/end\"),performance.clearMeasures(\"keydown\"),performance.clearMeasures(\"input\"),performance.clearMeasures(\"render\"),performance.clearMeasures(\"inputlatency\"),v.keydown=0,v.input=0,v.render=0}function g(){if(_===0)return;const C={keydown:h(y),input:h(E),render:h(S),total:h(p),sampleCount:_};return m(y),m(E),m(S),m(p),_=0,C}k.getAndClearMeasurements=g;function h(C){return{average:C.total/_,max:C.max,min:C.min}}function m(C){C.total=0,C.min=Number.MAX_VALUE,C.max=0}})(L||(e.inputLatency=L={}))}),define(se[395],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ListError=void 0;class L extends Error{constructor(y,E){super(`ListError [${y}] ${E}`)}}e.ListError=L}),define(se[396],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CombinedSpliceable=void 0;class L{constructor(y){this.spliceables=y}splice(y,E,S){this.spliceables.forEach(p=>p.splice(y,E,S))}}e.CombinedSpliceable=L}),define(se[197],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ScrollbarState=void 0;const L=20;class k{constructor(E,S,p,_,v,b){this._scrollbarSize=Math.round(S),this._oppositeScrollbarSize=Math.round(p),this._arrowSize=Math.round(E),this._visibleSize=_,this._scrollSize=v,this._scrollPosition=b,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new k(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(E){const S=Math.round(E);return this._visibleSize!==S?(this._visibleSize=S,this._refreshComputedValues(),!0):!1}setScrollSize(E){const S=Math.round(E);return this._scrollSize!==S?(this._scrollSize=S,this._refreshComputedValues(),!0):!1}setScrollPosition(E){const S=Math.round(E);return this._scrollPosition!==S?(this._scrollPosition=S,this._refreshComputedValues(),!0):!1}setScrollbarSize(E){this._scrollbarSize=Math.round(E)}setOppositeScrollbarSize(E){this._oppositeScrollbarSize=Math.round(E)}static _computeValues(E,S,p,_,v){const b=Math.max(0,p-E),a=Math.max(0,b-2*S),i=_>0&&_>p;if(!i)return{computedAvailableSize:Math.round(b),computedIsNeeded:i,computedSliderSize:Math.round(a),computedSliderRatio:0,computedSliderPosition:0};const n=Math.round(Math.max(L,Math.floor(p*a/_))),t=(a-n)/(_-p),r=v*t;return{computedAvailableSize:Math.round(b),computedIsNeeded:i,computedSliderSize:Math.round(n),computedSliderRatio:t,computedSliderPosition:Math.round(r)}}_refreshComputedValues(){const E=k._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=E.computedAvailableSize,this._computedIsNeeded=E.computedIsNeeded,this._computedSliderSize=E.computedSliderSize,this._computedSliderRatio=E.computedSliderRatio,this._computedSliderPosition=E.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(E){if(!this._computedIsNeeded)return 0;const S=E-this._arrowSize-this._computedSliderSize/2;return Math.round(S/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(E){if(!this._computedIsNeeded)return 0;const S=E-this._arrowSize;let p=this._scrollPosition;return S<this._computedSliderPosition?p-=this._visibleSize:p+=this._visibleSize,p}getDesiredScrollPositionFromDelta(E){if(!this._computedIsNeeded)return 0;const S=this._computedSliderPosition+E;return Math.round(S/this._computedSliderRatio)}}e.ScrollbarState=k}),define(se[143],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.WeakMapper=e.TreeError=e.TreeMouseEventTarget=e.ObjectTreeElementCollapseState=void 0;var L;(function(S){S[S.Expanded=0]=\"Expanded\",S[S.Collapsed=1]=\"Collapsed\",S[S.PreserveOrExpanded=2]=\"PreserveOrExpanded\",S[S.PreserveOrCollapsed=3]=\"PreserveOrCollapsed\"})(L||(e.ObjectTreeElementCollapseState=L={}));var k;(function(S){S[S.Unknown=0]=\"Unknown\",S[S.Twistie=1]=\"Twistie\",S[S.Element=2]=\"Element\",S[S.Filter=3]=\"Filter\"})(k||(e.TreeMouseEventTarget=k={}));class y extends Error{constructor(p,_){super(`TreeError [${p}] ${_}`)}}e.TreeError=y;class E{constructor(p){this.fn=p,this._map=new WeakMap}map(p){let _=this._map.get(p);return _||(_=this.fn(p),this._map.set(p,_)),_}}e.WeakMapper=E}),define(se[44],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.$window=e.mainWindow=e.ensureCodeWindow=void 0;function L(k,y){const E=k;typeof E.vscodeWindowId!=\"number\"&&Object.defineProperty(E,\"vscodeWindowId\",{get:()=>y})}e.ensureCodeWindow=L,e.mainWindow=window,e.$window=e.mainWindow}),define(se[13],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CallbackIterable=e.ArrayQueue=e.reverseOrder=e.booleanComparator=e.numberComparator=e.tieBreakComparators=e.compareBy=e.CompareResult=e.splice=e.insertInto=e.asArray=e.pushMany=e.pushToEnd=e.pushToStart=e.arrayInsert=e.range=e.firstOrDefault=e.distinct=e.isNonEmptyArray=e.isFalsyOrEmpty=e.coalesceInPlace=e.coalesce=e.forEachWithNeighbors=e.forEachAdjacent=e.groupAdjacentBy=e.groupBy=e.quickSelect=e.binarySearch2=e.binarySearch=e.removeFastWithoutKeepingOrder=e.equals=e.tail2=e.tail=void 0;function L(x,O=0){return x[x.length-(1+O)]}e.tail=L;function k(x){if(x.length===0)throw new Error(\"Invalid tail call\");return[x.slice(0,x.length-1),x[x.length-1]]}e.tail2=k;function y(x,O,B=(W,V)=>W===V){if(x===O)return!0;if(!x||!O||x.length!==O.length)return!1;for(let W=0,V=x.length;W<V;W++)if(!B(x[W],O[W]))return!1;return!0}e.equals=y;function E(x,O){const B=x.length-1;O<B&&(x[O]=x[B]),x.pop()}e.removeFastWithoutKeepingOrder=E;function S(x,O,B){return p(x.length,W=>B(x[W],O))}e.binarySearch=S;function p(x,O){let B=0,W=x-1;for(;B<=W;){const V=(B+W)/2|0,K=O(V);if(K<0)B=V+1;else if(K>0)W=V-1;else return V}return-(B+1)}e.binarySearch2=p;function _(x,O,B){if(x=x|0,x>=O.length)throw new TypeError(\"invalid index\");const W=O[Math.floor(O.length*Math.random())],V=[],K=[],F=[];for(const q of O){const ie=B(q,W);ie<0?V.push(q):ie>0?K.push(q):F.push(q)}return x<V.length?_(x,V,B):x<V.length+F.length?F[0]:_(x-(V.length+F.length),K,B)}e.quickSelect=_;function v(x,O){const B=[];let W;for(const V of x.slice(0).sort(O))!W||O(W[0],V)!==0?(W=[V],B.push(W)):W.push(V);return B}e.groupBy=v;function*b(x,O){let B,W;for(const V of x)W!==void 0&&O(W,V)?B.push(V):(B&&(yield B),B=[V]),W=V;B&&(yield B)}e.groupAdjacentBy=b;function a(x,O){for(let B=0;B<=x.length;B++)O(B===0?void 0:x[B-1],B===x.length?void 0:x[B])}e.forEachAdjacent=a;function i(x,O){for(let B=0;B<x.length;B++)O(B===0?void 0:x[B-1],x[B],B+1===x.length?void 0:x[B+1])}e.forEachWithNeighbors=i;function n(x){return x.filter(O=>!!O)}e.coalesce=n;function t(x){let O=0;for(let B=0;B<x.length;B++)x[B]&&(x[O]=x[B],O+=1);x.length=O}e.coalesceInPlace=t;function r(x){return!Array.isArray(x)||x.length===0}e.isFalsyOrEmpty=r;function u(x){return Array.isArray(x)&&x.length>0}e.isNonEmptyArray=u;function f(x,O=B=>B){const B=new Set;return x.filter(W=>{const V=O(W);return B.has(V)?!1:(B.add(V),!0)})}e.distinct=f;function c(x,O){return x.length>0?x[0]:O}e.firstOrDefault=c;function d(x,O){let B=typeof O==\"number\"?x:0;typeof O==\"number\"?B=x:(B=0,O=x);const W=[];if(B<=O)for(let V=B;V<O;V++)W.push(V);else for(let V=B;V>O;V--)W.push(V);return W}e.range=d;function s(x,O,B){const W=x.slice(0,O),V=x.slice(O);return W.concat(B,V)}e.arrayInsert=s;function l(x,O){const B=x.indexOf(O);B>-1&&(x.splice(B,1),x.unshift(O))}e.pushToStart=l;function o(x,O){const B=x.indexOf(O);B>-1&&(x.splice(B,1),x.push(O))}e.pushToEnd=o;function g(x,O){for(const B of O)x.push(B)}e.pushMany=g;function h(x){return Array.isArray(x)?x:[x]}e.asArray=h;function m(x,O,B){const W=w(x,O),V=x.length,K=B.length;x.length=V+K;for(let F=V-1;F>=W;F--)x[F+K]=x[F];for(let F=0;F<K;F++)x[F+W]=B[F]}e.insertInto=m;function C(x,O,B,W){const V=w(x,O);let K=x.splice(V,B);return K===void 0&&(K=[]),m(x,V,W),K}e.splice=C;function w(x,O){return O<0?Math.max(O+x.length,0):Math.min(O,x.length)}var D;(function(x){function O(K){return K<0}x.isLessThan=O;function B(K){return K<=0}x.isLessThanOrEqual=B;function W(K){return K>0}x.isGreaterThan=W;function V(K){return K===0}x.isNeitherLessOrGreaterThan=V,x.greaterThan=1,x.lessThan=-1,x.neitherLessOrGreaterThan=0})(D||(e.CompareResult=D={}));function I(x,O){return(B,W)=>O(x(B),x(W))}e.compareBy=I;function T(...x){return(O,B)=>{for(const W of x){const V=W(O,B);if(!D.isNeitherLessOrGreaterThan(V))return V}return D.neitherLessOrGreaterThan}}e.tieBreakComparators=T;const A=(x,O)=>x-O;e.numberComparator=A;const P=(x,O)=>(0,e.numberComparator)(x?1:0,O?1:0);e.booleanComparator=P;function N(x){return(O,B)=>-x(O,B)}e.reverseOrder=N;class M{constructor(O){this.items=O,this.firstIdx=0,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(O){let B=this.firstIdx;for(;B<this.items.length&&O(this.items[B]);)B++;const W=B===this.firstIdx?null:this.items.slice(this.firstIdx,B);return this.firstIdx=B,W}takeFromEndWhile(O){let B=this.lastIdx;for(;B>=0&&O(this.items[B]);)B--;const W=B===this.lastIdx?null:this.items.slice(B+1,this.lastIdx+1);return this.lastIdx=B,W}peek(){if(this.length!==0)return this.items[this.firstIdx]}dequeue(){const O=this.items[this.firstIdx];return this.firstIdx++,O}takeCount(O){const B=this.items.slice(this.firstIdx,this.firstIdx+O);return this.firstIdx+=O,B}}e.ArrayQueue=M;class R{constructor(O){this.iterate=O}toArray(){const O=[];return this.iterate(B=>(O.push(B),!0)),O}filter(O){return new R(B=>this.iterate(W=>O(W)?B(W):!0))}map(O){return new R(B=>this.iterate(W=>B(O(W))))}findLast(O){let B;return this.iterate(W=>(O(W)&&(B=W),!0)),B}findLastMaxBy(O){let B,W=!0;return this.iterate(V=>((W||D.isGreaterThan(O(V,B)))&&(W=!1,B=V),!0)),B}}e.CallbackIterable=R,R.empty=new R(x=>{})}),define(se[60],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.mapFindFirst=e.findMaxIdxBy=e.findFirstMinBy=e.findLastMaxBy=e.findFirstMaxBy=e.MonotonousArray=e.findFirstIdxMonotonousOrArrLen=e.findFirstMonotonous=e.findLastIdxMonotonous=e.findLastMonotonous=e.findLastIdx=e.findLast=void 0;function L(t,r,u){const f=k(t,r);if(f!==-1)return t[f]}e.findLast=L;function k(t,r,u=t.length-1){for(let f=u;f>=0;f--){const c=t[f];if(r(c))return f}return-1}e.findLastIdx=k;function y(t,r){const u=E(t,r);return u===-1?void 0:t[u]}e.findLastMonotonous=y;function E(t,r,u=0,f=t.length){let c=u,d=f;for(;c<d;){const s=Math.floor((c+d)/2);r(t[s])?c=s+1:d=s}return c-1}e.findLastIdxMonotonous=E;function S(t,r){const u=p(t,r);return u===t.length?void 0:t[u]}e.findFirstMonotonous=S;function p(t,r,u=0,f=t.length){let c=u,d=f;for(;c<d;){const s=Math.floor((c+d)/2);r(t[s])?d=s:c=s+1}return c}e.findFirstIdxMonotonousOrArrLen=p;class _{constructor(r){this._array=r,this._findLastMonotonousLastIdx=0}findLastMonotonous(r){if(_.assertInvariants){if(this._prevFindLastPredicate){for(const f of this._array)if(this._prevFindLastPredicate(f)&&!r(f))throw new Error(\"MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.\")}this._prevFindLastPredicate=r}const u=E(this._array,r,this._findLastMonotonousLastIdx);return this._findLastMonotonousLastIdx=u+1,u===-1?void 0:this._array[u]}}e.MonotonousArray=_,_.assertInvariants=!1;function v(t,r){if(t.length===0)return;let u=t[0];for(let f=1;f<t.length;f++){const c=t[f];r(c,u)>0&&(u=c)}return u}e.findFirstMaxBy=v;function b(t,r){if(t.length===0)return;let u=t[0];for(let f=1;f<t.length;f++){const c=t[f];r(c,u)>=0&&(u=c)}return u}e.findLastMaxBy=b;function a(t,r){return v(t,(u,f)=>-r(u,f))}e.findFirstMinBy=a;function i(t,r){if(t.length===0)return-1;let u=0;for(let f=1;f<t.length;f++){const c=t[f];r(c,t[u])>0&&(u=f)}return u}e.findMaxIdxBy=i;function n(t,r){for(const u of t){const f=r(u);if(f!==void 0)return f}}e.mapFindFirst=n}),define(se[267],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CachedFunction=e.LRUCachedFunction=void 0;class L{constructor(E){this.fn=E,this.lastCache=void 0,this.lastArgKey=void 0}get(E){const S=JSON.stringify(E);return this.lastArgKey!==S&&(this.lastArgKey=S,this.lastCache=this.fn(E)),this.lastCache}}e.LRUCachedFunction=L;class k{get cachedValues(){return this._map}constructor(E){this.fn=E,this._map=new Map}get(E){if(this._map.has(E))return this._map.get(E);const S=this.fn(E);return this._map.set(E,S),S}}e.CachedFunction=k}),define(se[268],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.intersection=e.diffSets=void 0;function L(y,E){const S=[],p=[];for(const _ of y)E.has(_)||S.push(_);for(const _ of E)y.has(_)||p.push(_);return{removed:S,added:p}}e.diffSets=L;function k(y,E){const S=new Set;for(const p of E)y.has(p)&&S.add(p);return S}e.intersection=k}),define(se[39],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Color=e.HSVA=e.HSLA=e.RGBA=void 0;function L(p,_){const v=Math.pow(10,_);return Math.round(p*v)/v}class k{constructor(_,v,b,a=1){this._rgbaBrand=void 0,this.r=Math.min(255,Math.max(0,_))|0,this.g=Math.min(255,Math.max(0,v))|0,this.b=Math.min(255,Math.max(0,b))|0,this.a=L(Math.max(Math.min(1,a),0),3)}static equals(_,v){return _.r===v.r&&_.g===v.g&&_.b===v.b&&_.a===v.a}}e.RGBA=k;class y{constructor(_,v,b,a){this._hslaBrand=void 0,this.h=Math.max(Math.min(360,_),0)|0,this.s=L(Math.max(Math.min(1,v),0),3),this.l=L(Math.max(Math.min(1,b),0),3),this.a=L(Math.max(Math.min(1,a),0),3)}static equals(_,v){return _.h===v.h&&_.s===v.s&&_.l===v.l&&_.a===v.a}static fromRGBA(_){const v=_.r/255,b=_.g/255,a=_.b/255,i=_.a,n=Math.max(v,b,a),t=Math.min(v,b,a);let r=0,u=0;const f=(t+n)/2,c=n-t;if(c>0){switch(u=Math.min(f<=.5?c/(2*f):c/(2-2*f),1),n){case v:r=(b-a)/c+(b<a?6:0);break;case b:r=(a-v)/c+2;break;case a:r=(v-b)/c+4;break}r*=60,r=Math.round(r)}return new y(r,u,f,i)}static _hue2rgb(_,v,b){return b<0&&(b+=1),b>1&&(b-=1),b<1/6?_+(v-_)*6*b:b<1/2?v:b<2/3?_+(v-_)*(2/3-b)*6:_}static toRGBA(_){const v=_.h/360,{s:b,l:a,a:i}=_;let n,t,r;if(b===0)n=t=r=a;else{const u=a<.5?a*(1+b):a+b-a*b,f=2*a-u;n=y._hue2rgb(f,u,v+1/3),t=y._hue2rgb(f,u,v),r=y._hue2rgb(f,u,v-1/3)}return new k(Math.round(n*255),Math.round(t*255),Math.round(r*255),i)}}e.HSLA=y;class E{constructor(_,v,b,a){this._hsvaBrand=void 0,this.h=Math.max(Math.min(360,_),0)|0,this.s=L(Math.max(Math.min(1,v),0),3),this.v=L(Math.max(Math.min(1,b),0),3),this.a=L(Math.max(Math.min(1,a),0),3)}static equals(_,v){return _.h===v.h&&_.s===v.s&&_.v===v.v&&_.a===v.a}static fromRGBA(_){const v=_.r/255,b=_.g/255,a=_.b/255,i=Math.max(v,b,a),n=Math.min(v,b,a),t=i-n,r=i===0?0:t/i;let u;return t===0?u=0:i===v?u=((b-a)/t%6+6)%6:i===b?u=(a-v)/t+2:u=(v-b)/t+4,new E(Math.round(u*60),r,i,_.a)}static toRGBA(_){const{h:v,s:b,v:a,a:i}=_,n=a*b,t=n*(1-Math.abs(v/60%2-1)),r=a-n;let[u,f,c]=[0,0,0];return v<60?(u=n,f=t):v<120?(u=t,f=n):v<180?(f=n,c=t):v<240?(f=t,c=n):v<300?(u=t,c=n):v<=360&&(u=n,c=t),u=Math.round((u+r)*255),f=Math.round((f+r)*255),c=Math.round((c+r)*255),new k(u,f,c,i)}}e.HSVA=E;class S{static fromHex(_){return S.Format.CSS.parseHex(_)||S.red}static equals(_,v){return!_&&!v?!0:!_||!v?!1:_.equals(v)}get hsla(){return this._hsla?this._hsla:y.fromRGBA(this.rgba)}get hsva(){return this._hsva?this._hsva:E.fromRGBA(this.rgba)}constructor(_){if(_)if(_ instanceof k)this.rgba=_;else if(_ instanceof y)this._hsla=_,this.rgba=y.toRGBA(_);else if(_ instanceof E)this._hsva=_,this.rgba=E.toRGBA(_);else throw new Error(\"Invalid color ctor argument\");else throw new Error(\"Color needs a value\")}equals(_){return!!_&&k.equals(this.rgba,_.rgba)&&y.equals(this.hsla,_.hsla)&&E.equals(this.hsva,_.hsva)}getRelativeLuminance(){const _=S._relativeLuminanceForComponent(this.rgba.r),v=S._relativeLuminanceForComponent(this.rgba.g),b=S._relativeLuminanceForComponent(this.rgba.b),a=.2126*_+.7152*v+.0722*b;return L(a,4)}static _relativeLuminanceForComponent(_){const v=_/255;return v<=.03928?v/12.92:Math.pow((v+.055)/1.055,2.4)}isLighter(){return(this.rgba.r*299+this.rgba.g*587+this.rgba.b*114)/1e3>=128}isLighterThan(_){const v=this.getRelativeLuminance(),b=_.getRelativeLuminance();return v>b}isDarkerThan(_){const v=this.getRelativeLuminance(),b=_.getRelativeLuminance();return v<b}lighten(_){return new S(new y(this.hsla.h,this.hsla.s,this.hsla.l+this.hsla.l*_,this.hsla.a))}darken(_){return new S(new y(this.hsla.h,this.hsla.s,this.hsla.l-this.hsla.l*_,this.hsla.a))}transparent(_){const{r:v,g:b,b:a,a:i}=this.rgba;return new S(new k(v,b,a,i*_))}isTransparent(){return this.rgba.a===0}isOpaque(){return this.rgba.a===1}opposite(){return new S(new k(255-this.rgba.r,255-this.rgba.g,255-this.rgba.b,this.rgba.a))}makeOpaque(_){if(this.isOpaque()||_.rgba.a!==1)return this;const{r:v,g:b,b:a,a:i}=this.rgba;return new S(new k(_.rgba.r-i*(_.rgba.r-v),_.rgba.g-i*(_.rgba.g-b),_.rgba.b-i*(_.rgba.b-a),1))}toString(){return this._toString||(this._toString=S.Format.CSS.format(this)),this._toString}static getLighterColor(_,v,b){if(_.isLighterThan(v))return _;b=b||.5;const a=_.getRelativeLuminance(),i=v.getRelativeLuminance();return b=b*(i-a)/i,_.lighten(b)}static getDarkerColor(_,v,b){if(_.isDarkerThan(v))return _;b=b||.5;const a=_.getRelativeLuminance(),i=v.getRelativeLuminance();return b=b*(a-i)/a,_.darken(b)}}e.Color=S,S.white=new S(new k(255,255,255,1)),S.black=new S(new k(0,0,0,1)),S.red=new S(new k(255,0,0,1)),S.blue=new S(new k(0,0,255,1)),S.green=new S(new k(0,255,0,1)),S.cyan=new S(new k(0,255,255,1)),S.lightgrey=new S(new k(211,211,211,1)),S.transparent=new S(new k(0,0,0,0)),function(p){let _;(function(v){let b;(function(a){function i(o){return o.rgba.a===1?`rgb(${o.rgba.r}, ${o.rgba.g}, ${o.rgba.b})`:p.Format.CSS.formatRGBA(o)}a.formatRGB=i;function n(o){return`rgba(${o.rgba.r}, ${o.rgba.g}, ${o.rgba.b}, ${+o.rgba.a.toFixed(2)})`}a.formatRGBA=n;function t(o){return o.hsla.a===1?`hsl(${o.hsla.h}, ${(o.hsla.s*100).toFixed(2)}%, ${(o.hsla.l*100).toFixed(2)}%)`:p.Format.CSS.formatHSLA(o)}a.formatHSL=t;function r(o){return`hsla(${o.hsla.h}, ${(o.hsla.s*100).toFixed(2)}%, ${(o.hsla.l*100).toFixed(2)}%, ${o.hsla.a.toFixed(2)})`}a.formatHSLA=r;function u(o){const g=o.toString(16);return g.length!==2?\"0\"+g:g}function f(o){return`#${u(o.rgba.r)}${u(o.rgba.g)}${u(o.rgba.b)}`}a.formatHex=f;function c(o,g=!1){return g&&o.rgba.a===1?p.Format.CSS.formatHex(o):`#${u(o.rgba.r)}${u(o.rgba.g)}${u(o.rgba.b)}${u(Math.round(o.rgba.a*255))}`}a.formatHexA=c;function d(o){return o.isOpaque()?p.Format.CSS.formatHex(o):p.Format.CSS.formatRGBA(o)}a.format=d;function s(o){const g=o.length;if(g===0||o.charCodeAt(0)!==35)return null;if(g===7){const h=16*l(o.charCodeAt(1))+l(o.charCodeAt(2)),m=16*l(o.charCodeAt(3))+l(o.charCodeAt(4)),C=16*l(o.charCodeAt(5))+l(o.charCodeAt(6));return new p(new k(h,m,C,1))}if(g===9){const h=16*l(o.charCodeAt(1))+l(o.charCodeAt(2)),m=16*l(o.charCodeAt(3))+l(o.charCodeAt(4)),C=16*l(o.charCodeAt(5))+l(o.charCodeAt(6)),w=16*l(o.charCodeAt(7))+l(o.charCodeAt(8));return new p(new k(h,m,C,w/255))}if(g===4){const h=l(o.charCodeAt(1)),m=l(o.charCodeAt(2)),C=l(o.charCodeAt(3));return new p(new k(16*h+h,16*m+m,16*C+C))}if(g===5){const h=l(o.charCodeAt(1)),m=l(o.charCodeAt(2)),C=l(o.charCodeAt(3)),w=l(o.charCodeAt(4));return new p(new k(16*h+h,16*m+m,16*C+C,(16*w+w)/255))}return null}a.parseHex=s;function l(o){switch(o){case 48:return 0;case 49:return 1;case 50:return 2;case 51:return 3;case 52:return 4;case 53:return 5;case 54:return 6;case 55:return 7;case 56:return 8;case 57:return 9;case 97:return 10;case 65:return 10;case 98:return 11;case 66:return 11;case 99:return 12;case 67:return 12;case 100:return 13;case 68:return 13;case 101:return 14;case 69:return 14;case 102:return 15;case 70:return 15}return 0}})(b=v.CSS||(v.CSS={}))})(_=p.Format||(p.Format={}))}(S||(e.Color=S={}))}),define(se[107],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.memoize=void 0;function L(k,y,E){let S=null,p=null;if(typeof E.value==\"function\"?(S=\"value\",p=E.value,p.length!==0&&console.warn(\"Memoize should only be used in functions with zero parameters\")):typeof E.get==\"function\"&&(S=\"get\",p=E.get),!p)throw new Error(\"not supported\");const _=`$memoize$${y}`;E[S]=function(...v){return this.hasOwnProperty(_)||Object.defineProperty(this,_,{configurable:!1,enumerable:!1,writable:!1,value:p.apply(this,v)}),this[_]}}e.memoize=L}),define(se[397],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DiffChange=void 0;class L{constructor(y,E,S,p){this.originalStart=y,this.originalLength=E,this.modifiedStart=S,this.modifiedLength=p}getOriginalEnd(){return this.originalStart+this.originalLength}getModifiedEnd(){return this.modifiedStart+this.modifiedLength}}e.DiffChange=L}),define(se[12],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BugIndicatingError=e.ErrorNoTelemetry=e.NotSupportedError=e.illegalState=e.illegalArgument=e.canceled=e.CancellationError=e.isCancellationError=e.transformErrorForSerialization=e.onUnexpectedExternalError=e.onUnexpectedError=e.errorHandler=e.ErrorHandler=void 0;class L{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(u){setTimeout(()=>{throw u.stack?n.isErrorNoTelemetry(u)?new n(u.message+`\n\n`+u.stack):new Error(u.message+`\n\n`+u.stack):u},0)}}emit(u){this.listeners.forEach(f=>{f(u)})}onUnexpectedError(u){this.unexpectedErrorHandler(u),this.emit(u)}onUnexpectedExternalError(u){this.unexpectedErrorHandler(u)}}e.ErrorHandler=L,e.errorHandler=new L;function k(r){p(r)||e.errorHandler.onUnexpectedError(r)}e.onUnexpectedError=k;function y(r){p(r)||e.errorHandler.onUnexpectedExternalError(r)}e.onUnexpectedExternalError=y;function E(r){if(r instanceof Error){const{name:u,message:f}=r,c=r.stacktrace||r.stack;return{$isError:!0,name:u,message:f,stack:c,noTelemetry:n.isErrorNoTelemetry(r)}}return r}e.transformErrorForSerialization=E;const S=\"Canceled\";function p(r){return r instanceof _?!0:r instanceof Error&&r.name===S&&r.message===S}e.isCancellationError=p;class _ extends Error{constructor(){super(S),this.name=this.message}}e.CancellationError=_;function v(){const r=new Error(S);return r.name=r.message,r}e.canceled=v;function b(r){return r?new Error(`Illegal argument: ${r}`):new Error(\"Illegal argument\")}e.illegalArgument=b;function a(r){return r?new Error(`Illegal state: ${r}`):new Error(\"Illegal state\")}e.illegalState=a;class i extends Error{constructor(u){super(\"NotSupported\"),u&&(this.message=u)}}e.NotSupportedError=i;class n extends Error{constructor(u){super(u),this.name=\"CodeExpectedError\"}static fromError(u){if(u instanceof n)return u;const f=new n;return f.message=u.message,f.stack=u.stack,f}static isErrorNoTelemetry(u){return u.name===\"CodeExpectedError\"}}e.ErrorNoTelemetry=n;class t extends Error{constructor(u){super(u||\"An unexpected bug occurred.\"),Object.setPrototypeOf(this,t.prototype)}}e.BugIndicatingError=t}),define(se[93],oe([1,0,44,12]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createTrustedTypesPolicy=void 0;function y(E,S){var p;const _=globalThis.MonacoEnvironment;if(_?.createTrustedTypesPolicy)try{return _.createTrustedTypesPolicy(E,S)}catch(v){(0,k.onUnexpectedError)(v);return}try{return(p=L.mainWindow.trustedTypes)===null||p===void 0?void 0:p.createPolicy(E,S)}catch(v){(0,k.onUnexpectedError)(v);return}}e.createTrustedTypesPolicy=y}),define(se[90],oe([1,0,12]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.checkAdjacentItems=e.assertFn=e.softAssert=e.assertNever=e.ok=void 0;function k(_,v){if(!_)throw new Error(v?`Assertion failed (${v})`:\"Assertion Failed\")}e.ok=k;function y(_,v=\"Unreachable\"){throw new Error(v)}e.assertNever=y;function E(_){_||(0,L.onUnexpectedError)(new L.BugIndicatingError(\"Assertion Failed\"))}e.softAssert=E;function S(_){if(!_()){debugger;_(),(0,L.onUnexpectedError)(new L.BugIndicatingError(\"Assertion Failed\"))}}e.assertFn=S;function p(_,v){let b=0;for(;b<_.length-1;){const a=_[b],i=_[b+1];if(!v(a,i))return!1;b++}return!0}e.checkAdjacentItems=p}),define(se[108],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createSingleCallFunction=void 0;function L(k,y){const E=this;let S=!1,p;return function(){if(S)return p;if(S=!0,y)try{p=k.apply(E,arguments)}finally{y()}else p=k.apply(E,arguments);return p}}e.createSingleCallFunction=L}),define(se[170],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.defaultGenerator=e.IdGenerator=void 0;class L{constructor(y){this._prefix=y,this._lastId=0}nextId(){return this._prefix+ ++this._lastId}}e.IdGenerator=L,e.defaultGenerator=new L(\"id#\")}),define(se[52],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Iterable=void 0;var L;(function(k){function y(o){return o&&typeof o==\"object\"&&typeof o[Symbol.iterator]==\"function\"}k.is=y;const E=Object.freeze([]);function S(){return E}k.empty=S;function*p(o){yield o}k.single=p;function _(o){return y(o)?o:p(o)}k.wrap=_;function v(o){return o||E}k.from=v;function*b(o){for(let g=o.length-1;g>=0;g--)yield o[g]}k.reverse=b;function a(o){return!o||o[Symbol.iterator]().next().done===!0}k.isEmpty=a;function i(o){return o[Symbol.iterator]().next().value}k.first=i;function n(o,g){for(const h of o)if(g(h))return!0;return!1}k.some=n;function t(o,g){for(const h of o)if(g(h))return h}k.find=t;function*r(o,g){for(const h of o)g(h)&&(yield h)}k.filter=r;function*u(o,g){let h=0;for(const m of o)yield g(m,h++)}k.map=u;function*f(...o){for(const g of o)yield*g}k.concat=f;function c(o,g,h){let m=h;for(const C of o)m=g(m,C);return m}k.reduce=c;function*d(o,g,h=o.length){for(g<0&&(g+=o.length),h<0?h+=o.length:h>o.length&&(h=o.length);g<h;g++)yield o[g]}k.slice=d;function s(o,g=Number.POSITIVE_INFINITY){const h=[];if(g===0)return[h,o];const m=o[Symbol.iterator]();for(let C=0;C<g;C++){const w=m.next();if(w.done)return[h,k.empty()];h.push(w.value)}return[h,{[Symbol.iterator](){return m}}]}k.consume=s;async function l(o){const g=[];for await(const h of o)g.push(h);return Promise.resolve(g)}k.asyncToArray=l})(L||(e.Iterable=L={}))}),define(se[65],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.KeyChord=e.KeyCodeUtils=e.IMMUTABLE_KEY_CODE_TO_CODE=e.IMMUTABLE_CODE_TO_KEY_CODE=e.NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE=e.EVENT_KEY_CODE_MAP=void 0;class L{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(i,n){this._keyCodeToStr[i]=n,this._strToKeyCode[n.toLowerCase()]=i}keyCodeToStr(i){return this._keyCodeToStr[i]}strToKeyCode(i){return this._strToKeyCode[i.toLowerCase()]||0}}const k=new L,y=new L,E=new L;e.EVENT_KEY_CODE_MAP=new Array(230),e.NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE={};const S=[],p=Object.create(null),_=Object.create(null);e.IMMUTABLE_CODE_TO_KEY_CODE=[],e.IMMUTABLE_KEY_CODE_TO_CODE=[];for(let a=0;a<=193;a++)e.IMMUTABLE_CODE_TO_KEY_CODE[a]=-1;for(let a=0;a<=132;a++)e.IMMUTABLE_KEY_CODE_TO_CODE[a]=-1;(function(){const a=\"\",i=[[1,0,\"None\",0,\"unknown\",0,\"VK_UNKNOWN\",a,a],[1,1,\"Hyper\",0,a,0,a,a,a],[1,2,\"Super\",0,a,0,a,a,a],[1,3,\"Fn\",0,a,0,a,a,a],[1,4,\"FnLock\",0,a,0,a,a,a],[1,5,\"Suspend\",0,a,0,a,a,a],[1,6,\"Resume\",0,a,0,a,a,a],[1,7,\"Turbo\",0,a,0,a,a,a],[1,8,\"Sleep\",0,a,0,\"VK_SLEEP\",a,a],[1,9,\"WakeUp\",0,a,0,a,a,a],[0,10,\"KeyA\",31,\"A\",65,\"VK_A\",a,a],[0,11,\"KeyB\",32,\"B\",66,\"VK_B\",a,a],[0,12,\"KeyC\",33,\"C\",67,\"VK_C\",a,a],[0,13,\"KeyD\",34,\"D\",68,\"VK_D\",a,a],[0,14,\"KeyE\",35,\"E\",69,\"VK_E\",a,a],[0,15,\"KeyF\",36,\"F\",70,\"VK_F\",a,a],[0,16,\"KeyG\",37,\"G\",71,\"VK_G\",a,a],[0,17,\"KeyH\",38,\"H\",72,\"VK_H\",a,a],[0,18,\"KeyI\",39,\"I\",73,\"VK_I\",a,a],[0,19,\"KeyJ\",40,\"J\",74,\"VK_J\",a,a],[0,20,\"KeyK\",41,\"K\",75,\"VK_K\",a,a],[0,21,\"KeyL\",42,\"L\",76,\"VK_L\",a,a],[0,22,\"KeyM\",43,\"M\",77,\"VK_M\",a,a],[0,23,\"KeyN\",44,\"N\",78,\"VK_N\",a,a],[0,24,\"KeyO\",45,\"O\",79,\"VK_O\",a,a],[0,25,\"KeyP\",46,\"P\",80,\"VK_P\",a,a],[0,26,\"KeyQ\",47,\"Q\",81,\"VK_Q\",a,a],[0,27,\"KeyR\",48,\"R\",82,\"VK_R\",a,a],[0,28,\"KeyS\",49,\"S\",83,\"VK_S\",a,a],[0,29,\"KeyT\",50,\"T\",84,\"VK_T\",a,a],[0,30,\"KeyU\",51,\"U\",85,\"VK_U\",a,a],[0,31,\"KeyV\",52,\"V\",86,\"VK_V\",a,a],[0,32,\"KeyW\",53,\"W\",87,\"VK_W\",a,a],[0,33,\"KeyX\",54,\"X\",88,\"VK_X\",a,a],[0,34,\"KeyY\",55,\"Y\",89,\"VK_Y\",a,a],[0,35,\"KeyZ\",56,\"Z\",90,\"VK_Z\",a,a],[0,36,\"Digit1\",22,\"1\",49,\"VK_1\",a,a],[0,37,\"Digit2\",23,\"2\",50,\"VK_2\",a,a],[0,38,\"Digit3\",24,\"3\",51,\"VK_3\",a,a],[0,39,\"Digit4\",25,\"4\",52,\"VK_4\",a,a],[0,40,\"Digit5\",26,\"5\",53,\"VK_5\",a,a],[0,41,\"Digit6\",27,\"6\",54,\"VK_6\",a,a],[0,42,\"Digit7\",28,\"7\",55,\"VK_7\",a,a],[0,43,\"Digit8\",29,\"8\",56,\"VK_8\",a,a],[0,44,\"Digit9\",30,\"9\",57,\"VK_9\",a,a],[0,45,\"Digit0\",21,\"0\",48,\"VK_0\",a,a],[1,46,\"Enter\",3,\"Enter\",13,\"VK_RETURN\",a,a],[1,47,\"Escape\",9,\"Escape\",27,\"VK_ESCAPE\",a,a],[1,48,\"Backspace\",1,\"Backspace\",8,\"VK_BACK\",a,a],[1,49,\"Tab\",2,\"Tab\",9,\"VK_TAB\",a,a],[1,50,\"Space\",10,\"Space\",32,\"VK_SPACE\",a,a],[0,51,\"Minus\",88,\"-\",189,\"VK_OEM_MINUS\",\"-\",\"OEM_MINUS\"],[0,52,\"Equal\",86,\"=\",187,\"VK_OEM_PLUS\",\"=\",\"OEM_PLUS\"],[0,53,\"BracketLeft\",92,\"[\",219,\"VK_OEM_4\",\"[\",\"OEM_4\"],[0,54,\"BracketRight\",94,\"]\",221,\"VK_OEM_6\",\"]\",\"OEM_6\"],[0,55,\"Backslash\",93,\"\\\\\",220,\"VK_OEM_5\",\"\\\\\",\"OEM_5\"],[0,56,\"IntlHash\",0,a,0,a,a,a],[0,57,\"Semicolon\",85,\";\",186,\"VK_OEM_1\",\";\",\"OEM_1\"],[0,58,\"Quote\",95,\"'\",222,\"VK_OEM_7\",\"'\",\"OEM_7\"],[0,59,\"Backquote\",91,\"`\",192,\"VK_OEM_3\",\"`\",\"OEM_3\"],[0,60,\"Comma\",87,\",\",188,\"VK_OEM_COMMA\",\",\",\"OEM_COMMA\"],[0,61,\"Period\",89,\".\",190,\"VK_OEM_PERIOD\",\".\",\"OEM_PERIOD\"],[0,62,\"Slash\",90,\"/\",191,\"VK_OEM_2\",\"/\",\"OEM_2\"],[1,63,\"CapsLock\",8,\"CapsLock\",20,\"VK_CAPITAL\",a,a],[1,64,\"F1\",59,\"F1\",112,\"VK_F1\",a,a],[1,65,\"F2\",60,\"F2\",113,\"VK_F2\",a,a],[1,66,\"F3\",61,\"F3\",114,\"VK_F3\",a,a],[1,67,\"F4\",62,\"F4\",115,\"VK_F4\",a,a],[1,68,\"F5\",63,\"F5\",116,\"VK_F5\",a,a],[1,69,\"F6\",64,\"F6\",117,\"VK_F6\",a,a],[1,70,\"F7\",65,\"F7\",118,\"VK_F7\",a,a],[1,71,\"F8\",66,\"F8\",119,\"VK_F8\",a,a],[1,72,\"F9\",67,\"F9\",120,\"VK_F9\",a,a],[1,73,\"F10\",68,\"F10\",121,\"VK_F10\",a,a],[1,74,\"F11\",69,\"F11\",122,\"VK_F11\",a,a],[1,75,\"F12\",70,\"F12\",123,\"VK_F12\",a,a],[1,76,\"PrintScreen\",0,a,0,a,a,a],[1,77,\"ScrollLock\",84,\"ScrollLock\",145,\"VK_SCROLL\",a,a],[1,78,\"Pause\",7,\"PauseBreak\",19,\"VK_PAUSE\",a,a],[1,79,\"Insert\",19,\"Insert\",45,\"VK_INSERT\",a,a],[1,80,\"Home\",14,\"Home\",36,\"VK_HOME\",a,a],[1,81,\"PageUp\",11,\"PageUp\",33,\"VK_PRIOR\",a,a],[1,82,\"Delete\",20,\"Delete\",46,\"VK_DELETE\",a,a],[1,83,\"End\",13,\"End\",35,\"VK_END\",a,a],[1,84,\"PageDown\",12,\"PageDown\",34,\"VK_NEXT\",a,a],[1,85,\"ArrowRight\",17,\"RightArrow\",39,\"VK_RIGHT\",\"Right\",a],[1,86,\"ArrowLeft\",15,\"LeftArrow\",37,\"VK_LEFT\",\"Left\",a],[1,87,\"ArrowDown\",18,\"DownArrow\",40,\"VK_DOWN\",\"Down\",a],[1,88,\"ArrowUp\",16,\"UpArrow\",38,\"VK_UP\",\"Up\",a],[1,89,\"NumLock\",83,\"NumLock\",144,\"VK_NUMLOCK\",a,a],[1,90,\"NumpadDivide\",113,\"NumPad_Divide\",111,\"VK_DIVIDE\",a,a],[1,91,\"NumpadMultiply\",108,\"NumPad_Multiply\",106,\"VK_MULTIPLY\",a,a],[1,92,\"NumpadSubtract\",111,\"NumPad_Subtract\",109,\"VK_SUBTRACT\",a,a],[1,93,\"NumpadAdd\",109,\"NumPad_Add\",107,\"VK_ADD\",a,a],[1,94,\"NumpadEnter\",3,a,0,a,a,a],[1,95,\"Numpad1\",99,\"NumPad1\",97,\"VK_NUMPAD1\",a,a],[1,96,\"Numpad2\",100,\"NumPad2\",98,\"VK_NUMPAD2\",a,a],[1,97,\"Numpad3\",101,\"NumPad3\",99,\"VK_NUMPAD3\",a,a],[1,98,\"Numpad4\",102,\"NumPad4\",100,\"VK_NUMPAD4\",a,a],[1,99,\"Numpad5\",103,\"NumPad5\",101,\"VK_NUMPAD5\",a,a],[1,100,\"Numpad6\",104,\"NumPad6\",102,\"VK_NUMPAD6\",a,a],[1,101,\"Numpad7\",105,\"NumPad7\",103,\"VK_NUMPAD7\",a,a],[1,102,\"Numpad8\",106,\"NumPad8\",104,\"VK_NUMPAD8\",a,a],[1,103,\"Numpad9\",107,\"NumPad9\",105,\"VK_NUMPAD9\",a,a],[1,104,\"Numpad0\",98,\"NumPad0\",96,\"VK_NUMPAD0\",a,a],[1,105,\"NumpadDecimal\",112,\"NumPad_Decimal\",110,\"VK_DECIMAL\",a,a],[0,106,\"IntlBackslash\",97,\"OEM_102\",226,\"VK_OEM_102\",a,a],[1,107,\"ContextMenu\",58,\"ContextMenu\",93,a,a,a],[1,108,\"Power\",0,a,0,a,a,a],[1,109,\"NumpadEqual\",0,a,0,a,a,a],[1,110,\"F13\",71,\"F13\",124,\"VK_F13\",a,a],[1,111,\"F14\",72,\"F14\",125,\"VK_F14\",a,a],[1,112,\"F15\",73,\"F15\",126,\"VK_F15\",a,a],[1,113,\"F16\",74,\"F16\",127,\"VK_F16\",a,a],[1,114,\"F17\",75,\"F17\",128,\"VK_F17\",a,a],[1,115,\"F18\",76,\"F18\",129,\"VK_F18\",a,a],[1,116,\"F19\",77,\"F19\",130,\"VK_F19\",a,a],[1,117,\"F20\",78,\"F20\",131,\"VK_F20\",a,a],[1,118,\"F21\",79,\"F21\",132,\"VK_F21\",a,a],[1,119,\"F22\",80,\"F22\",133,\"VK_F22\",a,a],[1,120,\"F23\",81,\"F23\",134,\"VK_F23\",a,a],[1,121,\"F24\",82,\"F24\",135,\"VK_F24\",a,a],[1,122,\"Open\",0,a,0,a,a,a],[1,123,\"Help\",0,a,0,a,a,a],[1,124,\"Select\",0,a,0,a,a,a],[1,125,\"Again\",0,a,0,a,a,a],[1,126,\"Undo\",0,a,0,a,a,a],[1,127,\"Cut\",0,a,0,a,a,a],[1,128,\"Copy\",0,a,0,a,a,a],[1,129,\"Paste\",0,a,0,a,a,a],[1,130,\"Find\",0,a,0,a,a,a],[1,131,\"AudioVolumeMute\",117,\"AudioVolumeMute\",173,\"VK_VOLUME_MUTE\",a,a],[1,132,\"AudioVolumeUp\",118,\"AudioVolumeUp\",175,\"VK_VOLUME_UP\",a,a],[1,133,\"AudioVolumeDown\",119,\"AudioVolumeDown\",174,\"VK_VOLUME_DOWN\",a,a],[1,134,\"NumpadComma\",110,\"NumPad_Separator\",108,\"VK_SEPARATOR\",a,a],[0,135,\"IntlRo\",115,\"ABNT_C1\",193,\"VK_ABNT_C1\",a,a],[1,136,\"KanaMode\",0,a,0,a,a,a],[0,137,\"IntlYen\",0,a,0,a,a,a],[1,138,\"Convert\",0,a,0,a,a,a],[1,139,\"NonConvert\",0,a,0,a,a,a],[1,140,\"Lang1\",0,a,0,a,a,a],[1,141,\"Lang2\",0,a,0,a,a,a],[1,142,\"Lang3\",0,a,0,a,a,a],[1,143,\"Lang4\",0,a,0,a,a,a],[1,144,\"Lang5\",0,a,0,a,a,a],[1,145,\"Abort\",0,a,0,a,a,a],[1,146,\"Props\",0,a,0,a,a,a],[1,147,\"NumpadParenLeft\",0,a,0,a,a,a],[1,148,\"NumpadParenRight\",0,a,0,a,a,a],[1,149,\"NumpadBackspace\",0,a,0,a,a,a],[1,150,\"NumpadMemoryStore\",0,a,0,a,a,a],[1,151,\"NumpadMemoryRecall\",0,a,0,a,a,a],[1,152,\"NumpadMemoryClear\",0,a,0,a,a,a],[1,153,\"NumpadMemoryAdd\",0,a,0,a,a,a],[1,154,\"NumpadMemorySubtract\",0,a,0,a,a,a],[1,155,\"NumpadClear\",131,\"Clear\",12,\"VK_CLEAR\",a,a],[1,156,\"NumpadClearEntry\",0,a,0,a,a,a],[1,0,a,5,\"Ctrl\",17,\"VK_CONTROL\",a,a],[1,0,a,4,\"Shift\",16,\"VK_SHIFT\",a,a],[1,0,a,6,\"Alt\",18,\"VK_MENU\",a,a],[1,0,a,57,\"Meta\",91,\"VK_COMMAND\",a,a],[1,157,\"ControlLeft\",5,a,0,\"VK_LCONTROL\",a,a],[1,158,\"ShiftLeft\",4,a,0,\"VK_LSHIFT\",a,a],[1,159,\"AltLeft\",6,a,0,\"VK_LMENU\",a,a],[1,160,\"MetaLeft\",57,a,0,\"VK_LWIN\",a,a],[1,161,\"ControlRight\",5,a,0,\"VK_RCONTROL\",a,a],[1,162,\"ShiftRight\",4,a,0,\"VK_RSHIFT\",a,a],[1,163,\"AltRight\",6,a,0,\"VK_RMENU\",a,a],[1,164,\"MetaRight\",57,a,0,\"VK_RWIN\",a,a],[1,165,\"BrightnessUp\",0,a,0,a,a,a],[1,166,\"BrightnessDown\",0,a,0,a,a,a],[1,167,\"MediaPlay\",0,a,0,a,a,a],[1,168,\"MediaRecord\",0,a,0,a,a,a],[1,169,\"MediaFastForward\",0,a,0,a,a,a],[1,170,\"MediaRewind\",0,a,0,a,a,a],[1,171,\"MediaTrackNext\",124,\"MediaTrackNext\",176,\"VK_MEDIA_NEXT_TRACK\",a,a],[1,172,\"MediaTrackPrevious\",125,\"MediaTrackPrevious\",177,\"VK_MEDIA_PREV_TRACK\",a,a],[1,173,\"MediaStop\",126,\"MediaStop\",178,\"VK_MEDIA_STOP\",a,a],[1,174,\"Eject\",0,a,0,a,a,a],[1,175,\"MediaPlayPause\",127,\"MediaPlayPause\",179,\"VK_MEDIA_PLAY_PAUSE\",a,a],[1,176,\"MediaSelect\",128,\"LaunchMediaPlayer\",181,\"VK_MEDIA_LAUNCH_MEDIA_SELECT\",a,a],[1,177,\"LaunchMail\",129,\"LaunchMail\",180,\"VK_MEDIA_LAUNCH_MAIL\",a,a],[1,178,\"LaunchApp2\",130,\"LaunchApp2\",183,\"VK_MEDIA_LAUNCH_APP2\",a,a],[1,179,\"LaunchApp1\",0,a,0,\"VK_MEDIA_LAUNCH_APP1\",a,a],[1,180,\"SelectTask\",0,a,0,a,a,a],[1,181,\"LaunchScreenSaver\",0,a,0,a,a,a],[1,182,\"BrowserSearch\",120,\"BrowserSearch\",170,\"VK_BROWSER_SEARCH\",a,a],[1,183,\"BrowserHome\",121,\"BrowserHome\",172,\"VK_BROWSER_HOME\",a,a],[1,184,\"BrowserBack\",122,\"BrowserBack\",166,\"VK_BROWSER_BACK\",a,a],[1,185,\"BrowserForward\",123,\"BrowserForward\",167,\"VK_BROWSER_FORWARD\",a,a],[1,186,\"BrowserStop\",0,a,0,\"VK_BROWSER_STOP\",a,a],[1,187,\"BrowserRefresh\",0,a,0,\"VK_BROWSER_REFRESH\",a,a],[1,188,\"BrowserFavorites\",0,a,0,\"VK_BROWSER_FAVORITES\",a,a],[1,189,\"ZoomToggle\",0,a,0,a,a,a],[1,190,\"MailReply\",0,a,0,a,a,a],[1,191,\"MailForward\",0,a,0,a,a,a],[1,192,\"MailSend\",0,a,0,a,a,a],[1,0,a,114,\"KeyInComposition\",229,a,a,a],[1,0,a,116,\"ABNT_C2\",194,\"VK_ABNT_C2\",a,a],[1,0,a,96,\"OEM_8\",223,\"VK_OEM_8\",a,a],[1,0,a,0,a,0,\"VK_KANA\",a,a],[1,0,a,0,a,0,\"VK_HANGUL\",a,a],[1,0,a,0,a,0,\"VK_JUNJA\",a,a],[1,0,a,0,a,0,\"VK_FINAL\",a,a],[1,0,a,0,a,0,\"VK_HANJA\",a,a],[1,0,a,0,a,0,\"VK_KANJI\",a,a],[1,0,a,0,a,0,\"VK_CONVERT\",a,a],[1,0,a,0,a,0,\"VK_NONCONVERT\",a,a],[1,0,a,0,a,0,\"VK_ACCEPT\",a,a],[1,0,a,0,a,0,\"VK_MODECHANGE\",a,a],[1,0,a,0,a,0,\"VK_SELECT\",a,a],[1,0,a,0,a,0,\"VK_PRINT\",a,a],[1,0,a,0,a,0,\"VK_EXECUTE\",a,a],[1,0,a,0,a,0,\"VK_SNAPSHOT\",a,a],[1,0,a,0,a,0,\"VK_HELP\",a,a],[1,0,a,0,a,0,\"VK_APPS\",a,a],[1,0,a,0,a,0,\"VK_PROCESSKEY\",a,a],[1,0,a,0,a,0,\"VK_PACKET\",a,a],[1,0,a,0,a,0,\"VK_DBE_SBCSCHAR\",a,a],[1,0,a,0,a,0,\"VK_DBE_DBCSCHAR\",a,a],[1,0,a,0,a,0,\"VK_ATTN\",a,a],[1,0,a,0,a,0,\"VK_CRSEL\",a,a],[1,0,a,0,a,0,\"VK_EXSEL\",a,a],[1,0,a,0,a,0,\"VK_EREOF\",a,a],[1,0,a,0,a,0,\"VK_PLAY\",a,a],[1,0,a,0,a,0,\"VK_ZOOM\",a,a],[1,0,a,0,a,0,\"VK_NONAME\",a,a],[1,0,a,0,a,0,\"VK_PA1\",a,a],[1,0,a,0,a,0,\"VK_OEM_CLEAR\",a,a]],n=[],t=[];for(const r of i){const[u,f,c,d,s,l,o,g,h]=r;if(t[f]||(t[f]=!0,S[f]=c,p[c]=f,_[c.toLowerCase()]=f,u&&(e.IMMUTABLE_CODE_TO_KEY_CODE[f]=d,d!==0&&d!==3&&d!==5&&d!==4&&d!==6&&d!==57&&(e.IMMUTABLE_KEY_CODE_TO_CODE[d]=f))),!n[d]){if(n[d]=!0,!s)throw new Error(`String representation missing for key code ${d} around scan code ${c}`);k.define(d,s),y.define(d,g||s),E.define(d,h||g||s)}l&&(e.EVENT_KEY_CODE_MAP[l]=d),o&&(e.NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE[o]=d)}e.IMMUTABLE_KEY_CODE_TO_CODE[3]=46})();var v;(function(a){function i(c){return k.keyCodeToStr(c)}a.toString=i;function n(c){return k.strToKeyCode(c)}a.fromString=n;function t(c){return y.keyCodeToStr(c)}a.toUserSettingsUS=t;function r(c){return E.keyCodeToStr(c)}a.toUserSettingsGeneral=r;function u(c){return y.strToKeyCode(c)||E.strToKeyCode(c)}a.fromUserSettings=u;function f(c){if(c>=98&&c<=113)return null;switch(c){case 16:return\"Up\";case 18:return\"Down\";case 15:return\"Left\";case 17:return\"Right\"}return k.keyCodeToStr(c)}a.toElectronAccelerator=f})(v||(e.KeyCodeUtils=v={}));function b(a,i){const n=(i&65535)<<16>>>0;return(a|n)>>>0}e.KeyChord=b}),define(se[125],oe([1,0,12]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ResolvedKeybinding=e.ResolvedChord=e.Keybinding=e.ScanCodeChord=e.KeyCodeChord=e.createSimpleKeybinding=e.decodeKeybinding=void 0;function k(b,a){if(typeof b==\"number\"){if(b===0)return null;const i=(b&65535)>>>0,n=(b&4294901760)>>>16;return n!==0?new p([y(i,a),y(n,a)]):new p([y(i,a)])}else{const i=[];for(let n=0;n<b.length;n++)i.push(y(b[n],a));return new p(i)}}e.decodeKeybinding=k;function y(b,a){const i=!!(b&2048),n=!!(b&256),t=a===2?n:i,r=!!(b&1024),u=!!(b&512),f=a===2?i:n,c=b&255;return new E(t,r,u,f,c)}e.createSimpleKeybinding=y;class E{constructor(a,i,n,t,r){this.ctrlKey=a,this.shiftKey=i,this.altKey=n,this.metaKey=t,this.keyCode=r}equals(a){return a instanceof E&&this.ctrlKey===a.ctrlKey&&this.shiftKey===a.shiftKey&&this.altKey===a.altKey&&this.metaKey===a.metaKey&&this.keyCode===a.keyCode}isModifierKey(){return this.keyCode===0||this.keyCode===5||this.keyCode===57||this.keyCode===6||this.keyCode===4}isDuplicateModifierCase(){return this.ctrlKey&&this.keyCode===5||this.shiftKey&&this.keyCode===4||this.altKey&&this.keyCode===6||this.metaKey&&this.keyCode===57}}e.KeyCodeChord=E;class S{constructor(a,i,n,t,r){this.ctrlKey=a,this.shiftKey=i,this.altKey=n,this.metaKey=t,this.scanCode=r}isDuplicateModifierCase(){return this.ctrlKey&&(this.scanCode===157||this.scanCode===161)||this.shiftKey&&(this.scanCode===158||this.scanCode===162)||this.altKey&&(this.scanCode===159||this.scanCode===163)||this.metaKey&&(this.scanCode===160||this.scanCode===164)}}e.ScanCodeChord=S;class p{constructor(a){if(a.length===0)throw(0,L.illegalArgument)(\"chords\");this.chords=a}}e.Keybinding=p;class _{constructor(a,i,n,t,r,u){this.ctrlKey=a,this.shiftKey=i,this.altKey=n,this.metaKey=t,this.keyLabel=r,this.keyAriaLabel=u}}e.ResolvedChord=_;class v{}e.ResolvedKeybinding=v}),define(se[99],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Lazy=void 0;class L{constructor(y){this.executor=y,this._didRun=!1}get value(){if(!this._didRun)try{this._value=this.executor()}catch(y){this._error=y}finally{this._didRun=!0}if(this._error)throw this._error;return this._value}get rawValue(){return this._value}}e.Lazy=L}),define(se[144],oe([1,0,99]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.writeUInt8=e.readUInt8=e.writeUInt32BE=e.readUInt32BE=e.writeUInt16LE=e.readUInt16LE=e.VSBuffer=void 0;const k=typeof Buffer<\"u\",y=new L.Lazy(()=>new Uint8Array(256));let E;class S{static wrap(t){return k&&!Buffer.isBuffer(t)&&(t=Buffer.from(t.buffer,t.byteOffset,t.byteLength)),new S(t)}constructor(t){this.buffer=t,this.byteLength=this.buffer.byteLength}toString(){return k?this.buffer.toString():(E||(E=new TextDecoder),E.decode(this.buffer))}}e.VSBuffer=S;function p(n,t){return n[t+0]<<0>>>0|n[t+1]<<8>>>0}e.readUInt16LE=p;function _(n,t,r){n[r+0]=t&255,t=t>>>8,n[r+1]=t&255}e.writeUInt16LE=_;function v(n,t){return n[t]*2**24+n[t+1]*2**16+n[t+2]*2**8+n[t+3]}e.readUInt32BE=v;function b(n,t,r){n[r+3]=t,t=t>>>8,n[r+2]=t,t=t>>>8,n[r+1]=t,t=t>>>8,n[r]=t}e.writeUInt32BE=b;function a(n,t){return n[t]}e.readUInt8=a;function i(n,t,r){n[r]=t}e.writeUInt8=i}),define(se[398],oe([1,0,99]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.compareByPrefix=e.compareAnything=e.compareFileNames=void 0;const k=new L.Lazy(()=>{const v=new Intl.Collator(void 0,{numeric:!0,sensitivity:\"base\"});return{collator:v,collatorIsNumeric:v.resolvedOptions().numeric}}),y=new L.Lazy(()=>({collator:new Intl.Collator(void 0,{numeric:!0})})),E=new L.Lazy(()=>({collator:new Intl.Collator(void 0,{numeric:!0,sensitivity:\"accent\"})}));function S(v,b,a=!1){const i=v||\"\",n=b||\"\",t=k.value.collator.compare(i,n);return k.value.collatorIsNumeric&&t===0&&i!==n?i<n?-1:1:t}e.compareFileNames=S;function p(v,b,a){const i=v.toLowerCase(),n=b.toLowerCase(),t=_(v,b,a);if(t)return t;const r=i.endsWith(a),u=n.endsWith(a);if(r!==u)return r?-1:1;const f=S(i,n);return f!==0?f:i.localeCompare(n)}e.compareAnything=p;function _(v,b,a){const i=v.toLowerCase(),n=b.toLowerCase(),t=i.startsWith(a),r=n.startsWith(a);if(t!==r)return t?-1:1;if(t&&r){if(i.length<n.length)return-1;if(i.length>n.length)return 1}return 0}e.compareByPrefix=_}),define(se[2],oe([1,0,108,52]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DisposableMap=e.ImmortalReference=e.RefCountedDisposable=e.MutableDisposable=e.Disposable=e.DisposableStore=e.toDisposable=e.combinedDisposable=e.dispose=e.isDisposable=e.markAsSingleton=e.markAsDisposed=e.trackDisposable=e.setDisposableTracker=void 0;const y=!1;let E=null;function S(o){E=o}if(e.setDisposableTracker=S,y){const o=\"__is_disposable_tracked__\";S(new class{trackDisposable(g){const h=new Error(\"Potentially leaked disposable\").stack;setTimeout(()=>{g[o]||console.log(h)},3e3)}setParent(g,h){if(g&&g!==f.None)try{g[o]=!0}catch{}}markAsDisposed(g){if(g&&g!==f.None)try{g[o]=!0}catch{}}markAsSingleton(g){}})}function p(o){return E?.trackDisposable(o),o}e.trackDisposable=p;function _(o){E?.markAsDisposed(o)}e.markAsDisposed=_;function v(o,g){E?.setParent(o,g)}function b(o,g){if(E)for(const h of o)E.setParent(h,g)}function a(o){return E?.markAsSingleton(o),o}e.markAsSingleton=a;function i(o){return typeof o.dispose==\"function\"&&o.dispose.length===0}e.isDisposable=i;function n(o){if(k.Iterable.is(o)){const g=[];for(const h of o)if(h)try{h.dispose()}catch(m){g.push(m)}if(g.length===1)throw g[0];if(g.length>1)throw new AggregateError(g,\"Encountered errors while disposing of store\");return Array.isArray(o)?[]:o}else if(o)return o.dispose(),o}e.dispose=n;function t(...o){const g=r(()=>n(o));return b(o,g),g}e.combinedDisposable=t;function r(o){const g=p({dispose:(0,L.createSingleCallFunction)(()=>{_(g),o()})});return g}e.toDisposable=r;class u{constructor(){this._toDispose=new Set,this._isDisposed=!1,p(this)}dispose(){this._isDisposed||(_(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{n(this._toDispose)}finally{this._toDispose.clear()}}add(g){if(!g)return g;if(g===this)throw new Error(\"Cannot register a disposable on itself!\");return v(g,this),this._isDisposed?u.DISABLE_DISPOSED_WARNING||console.warn(new Error(\"Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!\").stack):this._toDispose.add(g),g}deleteAndLeak(g){g&&this._toDispose.has(g)&&(this._toDispose.delete(g),v(g,null))}}e.DisposableStore=u,u.DISABLE_DISPOSED_WARNING=!1;class f{constructor(){this._store=new u,p(this),v(this._store,this)}dispose(){_(this),this._store.dispose()}_register(g){if(g===this)throw new Error(\"Cannot register a disposable on itself!\");return this._store.add(g)}}e.Disposable=f,f.None=Object.freeze({dispose(){}});class c{constructor(){this._isDisposed=!1,p(this)}get value(){return this._isDisposed?void 0:this._value}set value(g){var h;this._isDisposed||g===this._value||((h=this._value)===null||h===void 0||h.dispose(),g&&v(g,this),this._value=g)}clear(){this.value=void 0}dispose(){var g;this._isDisposed=!0,_(this),(g=this._value)===null||g===void 0||g.dispose(),this._value=void 0}}e.MutableDisposable=c;class d{constructor(g){this._disposable=g,this._counter=1}acquire(){return this._counter++,this}release(){return--this._counter===0&&this._disposable.dispose(),this}}e.RefCountedDisposable=d;class s{constructor(g){this.object=g}dispose(){}}e.ImmortalReference=s;class l{constructor(){this._store=new Map,this._isDisposed=!1,p(this)}dispose(){_(this),this._isDisposed=!0,this.clearAndDisposeAll()}clearAndDisposeAll(){if(this._store.size)try{n(this._store.values())}finally{this._store.clear()}}get(g){return this._store.get(g)}set(g,h,m=!1){var C;this._isDisposed&&console.warn(new Error(\"Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!\").stack),m||(C=this._store.get(g))===null||C===void 0||C.dispose(),this._store.set(g,h)}deleteAndDispose(g){var h;(h=this._store.get(g))===null||h===void 0||h.dispose(),this._store.delete(g)}[Symbol.iterator](){return this._store[Symbol.iterator]()}}e.DisposableMap=l}),define(se[66],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LinkedList=void 0;class L{constructor(E){this.element=E,this.next=L.Undefined,this.prev=L.Undefined}}L.Undefined=new L(void 0);class k{constructor(){this._first=L.Undefined,this._last=L.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===L.Undefined}clear(){let E=this._first;for(;E!==L.Undefined;){const S=E.next;E.prev=L.Undefined,E.next=L.Undefined,E=S}this._first=L.Undefined,this._last=L.Undefined,this._size=0}unshift(E){return this._insert(E,!1)}push(E){return this._insert(E,!0)}_insert(E,S){const p=new L(E);if(this._first===L.Undefined)this._first=p,this._last=p;else if(S){const v=this._last;this._last=p,p.prev=v,v.next=p}else{const v=this._first;this._first=p,p.next=v,v.prev=p}this._size+=1;let _=!1;return()=>{_||(_=!0,this._remove(p))}}shift(){if(this._first!==L.Undefined){const E=this._first.element;return this._remove(this._first),E}}pop(){if(this._last!==L.Undefined){const E=this._last.element;return this._remove(this._last),E}}_remove(E){if(E.prev!==L.Undefined&&E.next!==L.Undefined){const S=E.prev;S.next=E.next,E.next.prev=S}else E.prev===L.Undefined&&E.next===L.Undefined?(this._first=L.Undefined,this._last=L.Undefined):E.next===L.Undefined?(this._last=this._last.prev,this._last.next=L.Undefined):E.prev===L.Undefined&&(this._first=this._first.next,this._first.prev=L.Undefined);this._size-=1}*[Symbol.iterator](){let E=this._first;for(;E!==L.Undefined;)yield E.element,E=E.next}}e.LinkedList=k});var ke=this&&this.__decorate||function(te,e,L,k){var y=arguments.length,E=y<3?e:k===null?k=Object.getOwnPropertyDescriptor(e,L):k,S;if(typeof Reflect==\"object\"&&typeof Reflect.decorate==\"function\")E=Reflect.decorate(te,e,L,k);else for(var p=te.length-1;p>=0;p--)(S=te[p])&&(E=(y<3?S(E):y>3?S(e,L,E):S(e,L))||E);return y>3&&E&&Object.defineProperty(e,L,E),E};define(se[399],oe([1,0,107]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseLinkedText=e.LinkedText=void 0;class k{constructor(p){this.nodes=p}toString(){return this.nodes.map(p=>typeof p==\"string\"?p:p.label).join(\"\")}}e.LinkedText=k,ke([L.memoize],k.prototype,\"toString\",null);const y=/\\[([^\\]]+)\\]\\(((?:https?:\\/\\/|command:|file:)[^\\)\\s]+)(?: ([\"'])(.+?)(\\3))?\\)/gi;function E(S){const p=[];let _=0,v;for(;v=y.exec(S);){v.index-_>0&&p.push(S.substring(_,v.index));const[,b,a,,i]=v;i?p.push({label:b,href:a,title:i}):p.push({label:b,href:a}),_=v.index+v[0].length}return _<S.length&&p.push(S.substring(_)),new k(p)}e.parseLinkedText=E}),define(se[53],oe([1,0]),function(te,e){\"use strict\";var L,k;Object.defineProperty(e,\"__esModule\",{value:!0}),e.SetMap=e.BidirectionalMap=e.LRUCache=e.LinkedMap=e.ResourceMap=void 0;class y{constructor(i,n){this.uri=i,this.value=n}}function E(a){return Array.isArray(a)}class S{constructor(i,n){if(this[L]=\"ResourceMap\",i instanceof S)this.map=new Map(i.map),this.toKey=n??S.defaultToKey;else if(E(i)){this.map=new Map,this.toKey=n??S.defaultToKey;for(const[t,r]of i)this.set(t,r)}else this.map=new Map,this.toKey=i??S.defaultToKey}set(i,n){return this.map.set(this.toKey(i),new y(i,n)),this}get(i){var n;return(n=this.map.get(this.toKey(i)))===null||n===void 0?void 0:n.value}has(i){return this.map.has(this.toKey(i))}get size(){return this.map.size}clear(){this.map.clear()}delete(i){return this.map.delete(this.toKey(i))}forEach(i,n){typeof n<\"u\"&&(i=i.bind(n));for(const[t,r]of this.map)i(r.value,r.uri,this)}*values(){for(const i of this.map.values())yield i.value}*keys(){for(const i of this.map.values())yield i.uri}*entries(){for(const i of this.map.values())yield[i.uri,i.value]}*[(L=Symbol.toStringTag,Symbol.iterator)](){for(const[,i]of this.map)yield[i.uri,i.value]}}e.ResourceMap=S,S.defaultToKey=a=>a.toString();class p{constructor(){this[k]=\"LinkedMap\",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){var i;return(i=this._head)===null||i===void 0?void 0:i.value}get last(){var i;return(i=this._tail)===null||i===void 0?void 0:i.value}has(i){return this._map.has(i)}get(i,n=0){const t=this._map.get(i);if(t)return n!==0&&this.touch(t,n),t.value}set(i,n,t=0){let r=this._map.get(i);if(r)r.value=n,t!==0&&this.touch(r,t);else{switch(r={key:i,value:n,next:void 0,previous:void 0},t){case 0:this.addItemLast(r);break;case 1:this.addItemFirst(r);break;case 2:this.addItemLast(r);break;default:this.addItemLast(r);break}this._map.set(i,r),this._size++}return this}delete(i){return!!this.remove(i)}remove(i){const n=this._map.get(i);if(n)return this._map.delete(i),this.removeItem(n),this._size--,n.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error(\"Invalid list\");const i=this._head;return this._map.delete(i.key),this.removeItem(i),this._size--,i.value}forEach(i,n){const t=this._state;let r=this._head;for(;r;){if(n?i.bind(n)(r.value,r.key,this):i(r.value,r.key,this),this._state!==t)throw new Error(\"LinkedMap got modified during iteration.\");r=r.next}}keys(){const i=this,n=this._state;let t=this._head;const r={[Symbol.iterator](){return r},next(){if(i._state!==n)throw new Error(\"LinkedMap got modified during iteration.\");if(t){const u={value:t.key,done:!1};return t=t.next,u}else return{value:void 0,done:!0}}};return r}values(){const i=this,n=this._state;let t=this._head;const r={[Symbol.iterator](){return r},next(){if(i._state!==n)throw new Error(\"LinkedMap got modified during iteration.\");if(t){const u={value:t.value,done:!1};return t=t.next,u}else return{value:void 0,done:!0}}};return r}entries(){const i=this,n=this._state;let t=this._head;const r={[Symbol.iterator](){return r},next(){if(i._state!==n)throw new Error(\"LinkedMap got modified during iteration.\");if(t){const u={value:[t.key,t.value],done:!1};return t=t.next,u}else return{value:void 0,done:!0}}};return r}[(k=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(i){if(i>=this.size)return;if(i===0){this.clear();return}let n=this._head,t=this.size;for(;n&&t>i;)this._map.delete(n.key),n=n.next,t--;this._head=n,this._size=t,n&&(n.previous=void 0),this._state++}addItemFirst(i){if(!this._head&&!this._tail)this._tail=i;else if(this._head)i.next=this._head,this._head.previous=i;else throw new Error(\"Invalid list\");this._head=i,this._state++}addItemLast(i){if(!this._head&&!this._tail)this._head=i;else if(this._tail)i.previous=this._tail,this._tail.next=i;else throw new Error(\"Invalid list\");this._tail=i,this._state++}removeItem(i){if(i===this._head&&i===this._tail)this._head=void 0,this._tail=void 0;else if(i===this._head){if(!i.next)throw new Error(\"Invalid list\");i.next.previous=void 0,this._head=i.next}else if(i===this._tail){if(!i.previous)throw new Error(\"Invalid list\");i.previous.next=void 0,this._tail=i.previous}else{const n=i.next,t=i.previous;if(!n||!t)throw new Error(\"Invalid list\");n.previous=t,t.next=n}i.next=void 0,i.previous=void 0,this._state++}touch(i,n){if(!this._head||!this._tail)throw new Error(\"Invalid list\");if(!(n!==1&&n!==2)){if(n===1){if(i===this._head)return;const t=i.next,r=i.previous;i===this._tail?(r.next=void 0,this._tail=r):(t.previous=r,r.next=t),i.previous=void 0,i.next=this._head,this._head.previous=i,this._head=i,this._state++}else if(n===2){if(i===this._tail)return;const t=i.next,r=i.previous;i===this._head?(t.previous=void 0,this._head=t):(t.previous=r,r.next=t),i.next=void 0,i.previous=this._tail,this._tail.next=i,this._tail=i,this._state++}}}toJSON(){const i=[];return this.forEach((n,t)=>{i.push([t,n])}),i}fromJSON(i){this.clear();for(const[n,t]of i)this.set(n,t)}}e.LinkedMap=p;class _ extends p{constructor(i,n=1){super(),this._limit=i,this._ratio=Math.min(Math.max(0,n),1)}get limit(){return this._limit}set limit(i){this._limit=i,this.checkTrim()}get(i,n=2){return super.get(i,n)}peek(i){return super.get(i,0)}set(i,n){return super.set(i,n,2),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}}e.LRUCache=_;class v{constructor(i){if(this._m1=new Map,this._m2=new Map,i)for(const[n,t]of i)this.set(n,t)}clear(){this._m1.clear(),this._m2.clear()}set(i,n){this._m1.set(i,n),this._m2.set(n,i)}get(i){return this._m1.get(i)}getKey(i){return this._m2.get(i)}delete(i){const n=this._m1.get(i);return n===void 0?!1:(this._m1.delete(i),this._m2.delete(n),!0)}keys(){return this._m1.keys()}values(){return this._m1.values()}}e.BidirectionalMap=v;class b{constructor(){this.map=new Map}add(i,n){let t=this.map.get(i);t||(t=new Set,this.map.set(i,t)),t.add(n)}delete(i,n){const t=this.map.get(i);t&&(t.delete(n),t.size===0&&this.map.delete(i))}forEach(i,n){const t=this.map.get(i);t&&t.forEach(n)}get(i){const n=this.map.get(i);return n||new Set}}e.SetMap=b}),function(te,e){typeof define==\"function\"&&define.amd?define(se[400],oe([0]),e):typeof exports==\"object\"&&typeof module<\"u\"?e(exports):(te=typeof globalThis<\"u\"?globalThis:te||self,e(te.marked={}))}(this,function(te){\"use strict\";function e(U,G){for(var z=0;z<G.length;z++){var H=G[z];H.enumerable=H.enumerable||!1,H.configurable=!0,\"value\"in H&&(H.writable=!0),Object.defineProperty(U,H.key,H)}}function L(U,G,z){return G&&e(U.prototype,G),z&&e(U,z),Object.defineProperty(U,\"prototype\",{writable:!1}),U}function k(U,G){if(U){if(typeof U==\"string\")return y(U,G);var z=Object.prototype.toString.call(U).slice(8,-1);if(z===\"Object\"&&U.constructor&&(z=U.constructor.name),z===\"Map\"||z===\"Set\")return Array.from(U);if(z===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(z))return y(U,G)}}function y(U,G){(G==null||G>U.length)&&(G=U.length);for(var z=0,H=new Array(G);z<G;z++)H[z]=U[z];return H}function E(U,G){var z=typeof Symbol<\"u\"&&U[Symbol.iterator]||U[\"@@iterator\"];if(z)return(z=z.call(U)).next.bind(z);if(Array.isArray(U)||(z=k(U))||G&&U&&typeof U.length==\"number\"){z&&(U=z);var H=0;return function(){return H>=U.length?{done:!0}:{done:!1,value:U[H++]}}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function S(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:\"\",highlight:null,langPrefix:\"language-\",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}te.defaults=S();function p(U){te.defaults=U}var _=/[&<>\"']/,v=/[&<>\"']/g,b=/[<>\"']|&(?!#?\\w+;)/,a=/[<>\"']|&(?!#?\\w+;)/g,i={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},n=function(G){return i[G]};function t(U,G){if(G){if(_.test(U))return U.replace(v,n)}else if(b.test(U))return U.replace(a,n);return U}var r=/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;function u(U){return U.replace(r,function(G,z){return z=z.toLowerCase(),z===\"colon\"?\":\":z.charAt(0)===\"#\"?z.charAt(1)===\"x\"?String.fromCharCode(parseInt(z.substring(2),16)):String.fromCharCode(+z.substring(1)):\"\"})}var f=/(^|[^\\[])\\^/g;function c(U,G){U=typeof U==\"string\"?U:U.source,G=G||\"\";var z={replace:function(Y,j){return j=j.source||j,j=j.replace(f,\"$1\"),U=U.replace(Y,j),z},getRegex:function(){return new RegExp(U,G)}};return z}var d=/[^\\w:]/g,s=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function l(U,G,z){if(U){var H;try{H=decodeURIComponent(u(z)).replace(d,\"\").toLowerCase()}catch{return null}if(H.indexOf(\"javascript:\")===0||H.indexOf(\"vbscript:\")===0||H.indexOf(\"data:\")===0)return null}G&&!s.test(z)&&(z=C(G,z));try{z=encodeURI(z).replace(/%25/g,\"%\")}catch{return null}return z}var o={},g=/^[^:]+:\\/*[^/]*$/,h=/^([^:]+:)[\\s\\S]*$/,m=/^([^:]+:\\/*[^/]*)[\\s\\S]*$/;function C(U,G){o[\" \"+U]||(g.test(U)?o[\" \"+U]=U+\"/\":o[\" \"+U]=T(U,\"/\",!0)),U=o[\" \"+U];var z=U.indexOf(\":\")===-1;return G.substring(0,2)===\"//\"?z?G:U.replace(h,\"$1\")+G:G.charAt(0)===\"/\"?z?G:U.replace(m,\"$1\")+G:U+G}var w={exec:function(){}};function D(U){for(var G=1,z,H;G<arguments.length;G++){z=arguments[G];for(H in z)Object.prototype.hasOwnProperty.call(z,H)&&(U[H]=z[H])}return U}function I(U,G){var z=U.replace(/\\|/g,function(j,Z,ee){for(var le=!1,ue=Z;--ue>=0&&ee[ue]===\"\\\\\";)le=!le;return le?\"|\":\" |\"}),H=z.split(/ \\|/),Y=0;if(H[0].trim()||H.shift(),H.length>0&&!H[H.length-1].trim()&&H.pop(),H.length>G)H.splice(G);else for(;H.length<G;)H.push(\"\");for(;Y<H.length;Y++)H[Y]=H[Y].trim().replace(/\\\\\\|/g,\"|\");return H}function T(U,G,z){var H=U.length;if(H===0)return\"\";for(var Y=0;Y<H;){var j=U.charAt(H-Y-1);if(j===G&&!z)Y++;else if(j!==G&&z)Y++;else break}return U.slice(0,H-Y)}function A(U,G){if(U.indexOf(G[1])===-1)return-1;for(var z=U.length,H=0,Y=0;Y<z;Y++)if(U[Y]===\"\\\\\")Y++;else if(U[Y]===G[0])H++;else if(U[Y]===G[1]&&(H--,H<0))return Y;return-1}function P(U){U&&U.sanitize&&!U.silent&&console.warn(\"marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options\")}function N(U,G){if(G<1)return\"\";for(var z=\"\";G>1;)G&1&&(z+=U),G>>=1,U+=U;return z+U}function M(U,G,z,H){var Y=G.href,j=G.title?t(G.title):null,Z=U[1].replace(/\\\\([\\[\\]])/g,\"$1\");if(U[0].charAt(0)!==\"!\"){H.state.inLink=!0;var ee={type:\"link\",raw:z,href:Y,title:j,text:Z,tokens:H.inlineTokens(Z)};return H.state.inLink=!1,ee}return{type:\"image\",raw:z,href:Y,title:j,text:t(Z)}}function R(U,G){var z=U.match(/^(\\s+)(?:```)/);if(z===null)return G;var H=z[1];return G.split(`\n`).map(function(Y){var j=Y.match(/^\\s+/);if(j===null)return Y;var Z=j[0];return Z.length>=H.length?Y.slice(H.length):Y}).join(`\n`)}var x=function(){function U(z){this.options=z||te.defaults}var G=U.prototype;return G.space=function(H){var Y=this.rules.block.newline.exec(H);if(Y&&Y[0].length>0)return{type:\"space\",raw:Y[0]}},G.code=function(H){var Y=this.rules.block.code.exec(H);if(Y){var j=Y[0].replace(/^ {1,4}/gm,\"\");return{type:\"code\",raw:Y[0],codeBlockStyle:\"indented\",text:this.options.pedantic?j:T(j,`\n`)}}},G.fences=function(H){var Y=this.rules.block.fences.exec(H);if(Y){var j=Y[0],Z=R(j,Y[3]||\"\");return{type:\"code\",raw:j,lang:Y[2]?Y[2].trim():Y[2],text:Z}}},G.heading=function(H){var Y=this.rules.block.heading.exec(H);if(Y){var j=Y[2].trim();if(/#$/.test(j)){var Z=T(j,\"#\");(this.options.pedantic||!Z||/ $/.test(Z))&&(j=Z.trim())}return{type:\"heading\",raw:Y[0],depth:Y[1].length,text:j,tokens:this.lexer.inline(j)}}},G.hr=function(H){var Y=this.rules.block.hr.exec(H);if(Y)return{type:\"hr\",raw:Y[0]}},G.blockquote=function(H){var Y=this.rules.block.blockquote.exec(H);if(Y){var j=Y[0].replace(/^ *>[ \\t]?/gm,\"\");return{type:\"blockquote\",raw:Y[0],tokens:this.lexer.blockTokens(j,[]),text:j}}},G.list=function(H){var Y=this.rules.block.list.exec(H);if(Y){var j,Z,ee,le,ue,ce,pe,ve,Ce,Se,_e,Ee,Ae=Y[1].trim(),xe=Ae.length>1,Be={type:\"list\",raw:\"\",ordered:xe,start:xe?+Ae.slice(0,-1):\"\",loose:!1,items:[]};Ae=xe?\"\\\\d{1,9}\\\\\"+Ae.slice(-1):\"\\\\\"+Ae,this.options.pedantic&&(Ae=xe?Ae:\"[*+-]\");for(var De=new RegExp(\"^( {0,3}\"+Ae+\")((?:[\t ][^\\\\n]*)?(?:\\\\n|$))\");H&&(Ee=!1,!(!(Y=De.exec(H))||this.rules.block.hr.test(H)));){if(j=Y[0],H=H.substring(j.length),ve=Y[2].split(`\n`,1)[0],Ce=H.split(`\n`,1)[0],this.options.pedantic?(le=2,_e=ve.trimLeft()):(le=Y[2].search(/[^ ]/),le=le>4?1:le,_e=ve.slice(le),le+=Y[1].length),ce=!1,!ve&&/^ *$/.test(Ce)&&(j+=Ce+`\n`,H=H.substring(Ce.length+1),Ee=!0),!Ee)for(var Ie=new RegExp(\"^ {0,\"+Math.min(3,le-1)+\"}(?:[*+-]|\\\\d{1,9}[.)])((?: [^\\\\n]*)?(?:\\\\n|$))\"),fe=new RegExp(\"^ {0,\"+Math.min(3,le-1)+\"}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)\"),be=new RegExp(\"^ {0,\"+Math.min(3,le-1)+\"}(?:```|~~~)\"),Ne=new RegExp(\"^ {0,\"+Math.min(3,le-1)+\"}#\");H&&(Se=H.split(`\n`,1)[0],ve=Se,this.options.pedantic&&(ve=ve.replace(/^ {1,4}(?=( {4})*[^ ])/g,\"  \")),!(be.test(ve)||Ne.test(ve)||Ie.test(ve)||fe.test(H)));){if(ve.search(/[^ ]/)>=le||!ve.trim())_e+=`\n`+ve.slice(le);else if(!ce)_e+=`\n`+ve;else break;!ce&&!ve.trim()&&(ce=!0),j+=Se+`\n`,H=H.substring(Se.length+1)}Be.loose||(pe?Be.loose=!0:/\\n *\\n *$/.test(j)&&(pe=!0)),this.options.gfm&&(Z=/^\\[[ xX]\\] /.exec(_e),Z&&(ee=Z[0]!==\"[ ] \",_e=_e.replace(/^\\[[ xX]\\] +/,\"\"))),Be.items.push({type:\"list_item\",raw:j,task:!!Z,checked:ee,loose:!1,text:_e}),Be.raw+=j}Be.items[Be.items.length-1].raw=j.trimRight(),Be.items[Be.items.length-1].text=_e.trimRight(),Be.raw=Be.raw.trimRight();var Pe=Be.items.length;for(ue=0;ue<Pe;ue++){this.lexer.state.top=!1,Be.items[ue].tokens=this.lexer.blockTokens(Be.items[ue].text,[]);var ze=Be.items[ue].tokens.filter(function(je){return je.type===\"space\"}),Ke=ze.every(function(je){for(var Je=je.raw.split(\"\"),rt=0,et=E(Je),st;!(st=et()).done;){var Qe=st.value;if(Qe===`\n`&&(rt+=1),rt>1)return!0}return!1});!Be.loose&&ze.length&&Ke&&(Be.loose=!0,Be.items[ue].loose=!0)}return Be}},G.html=function(H){var Y=this.rules.block.html.exec(H);if(Y){var j={type:\"html\",raw:Y[0],pre:!this.options.sanitizer&&(Y[1]===\"pre\"||Y[1]===\"script\"||Y[1]===\"style\"),text:Y[0]};if(this.options.sanitize){var Z=this.options.sanitizer?this.options.sanitizer(Y[0]):t(Y[0]);j.type=\"paragraph\",j.text=Z,j.tokens=this.lexer.inline(Z)}return j}},G.def=function(H){var Y=this.rules.block.def.exec(H);if(Y){Y[3]&&(Y[3]=Y[3].substring(1,Y[3].length-1));var j=Y[1].toLowerCase().replace(/\\s+/g,\" \");return{type:\"def\",tag:j,raw:Y[0],href:Y[2],title:Y[3]}}},G.table=function(H){var Y=this.rules.block.table.exec(H);if(Y){var j={type:\"table\",header:I(Y[1]).map(function(pe){return{text:pe}}),align:Y[2].replace(/^ *|\\| *$/g,\"\").split(/ *\\| */),rows:Y[3]&&Y[3].trim()?Y[3].replace(/\\n[ \\t]*$/,\"\").split(`\n`):[]};if(j.header.length===j.align.length){j.raw=Y[0];var Z=j.align.length,ee,le,ue,ce;for(ee=0;ee<Z;ee++)/^ *-+: *$/.test(j.align[ee])?j.align[ee]=\"right\":/^ *:-+: *$/.test(j.align[ee])?j.align[ee]=\"center\":/^ *:-+ *$/.test(j.align[ee])?j.align[ee]=\"left\":j.align[ee]=null;for(Z=j.rows.length,ee=0;ee<Z;ee++)j.rows[ee]=I(j.rows[ee],j.header.length).map(function(pe){return{text:pe}});for(Z=j.header.length,le=0;le<Z;le++)j.header[le].tokens=this.lexer.inline(j.header[le].text);for(Z=j.rows.length,le=0;le<Z;le++)for(ce=j.rows[le],ue=0;ue<ce.length;ue++)ce[ue].tokens=this.lexer.inline(ce[ue].text);return j}}},G.lheading=function(H){var Y=this.rules.block.lheading.exec(H);if(Y)return{type:\"heading\",raw:Y[0],depth:Y[2].charAt(0)===\"=\"?1:2,text:Y[1],tokens:this.lexer.inline(Y[1])}},G.paragraph=function(H){var Y=this.rules.block.paragraph.exec(H);if(Y){var j=Y[1].charAt(Y[1].length-1)===`\n`?Y[1].slice(0,-1):Y[1];return{type:\"paragraph\",raw:Y[0],text:j,tokens:this.lexer.inline(j)}}},G.text=function(H){var Y=this.rules.block.text.exec(H);if(Y)return{type:\"text\",raw:Y[0],text:Y[0],tokens:this.lexer.inline(Y[0])}},G.escape=function(H){var Y=this.rules.inline.escape.exec(H);if(Y)return{type:\"escape\",raw:Y[0],text:t(Y[1])}},G.tag=function(H){var Y=this.rules.inline.tag.exec(H);if(Y)return!this.lexer.state.inLink&&/^<a /i.test(Y[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\\/a>/i.test(Y[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\\s|>)/i.test(Y[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\\/(pre|code|kbd|script)(\\s|>)/i.test(Y[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?\"text\":\"html\",raw:Y[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(Y[0]):t(Y[0]):Y[0]}},G.link=function(H){var Y=this.rules.inline.link.exec(H);if(Y){var j=Y[2].trim();if(!this.options.pedantic&&/^</.test(j)){if(!/>$/.test(j))return;var Z=T(j.slice(0,-1),\"\\\\\");if((j.length-Z.length)%2===0)return}else{var ee=A(Y[2],\"()\");if(ee>-1){var le=Y[0].indexOf(\"!\")===0?5:4,ue=le+Y[1].length+ee;Y[2]=Y[2].substring(0,ee),Y[0]=Y[0].substring(0,ue).trim(),Y[3]=\"\"}}var ce=Y[2],pe=\"\";if(this.options.pedantic){var ve=/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(ce);ve&&(ce=ve[1],pe=ve[3])}else pe=Y[3]?Y[3].slice(1,-1):\"\";return ce=ce.trim(),/^</.test(ce)&&(this.options.pedantic&&!/>$/.test(j)?ce=ce.slice(1):ce=ce.slice(1,-1)),M(Y,{href:ce&&ce.replace(this.rules.inline._escapes,\"$1\"),title:pe&&pe.replace(this.rules.inline._escapes,\"$1\")},Y[0],this.lexer)}},G.reflink=function(H,Y){var j;if((j=this.rules.inline.reflink.exec(H))||(j=this.rules.inline.nolink.exec(H))){var Z=(j[2]||j[1]).replace(/\\s+/g,\" \");if(Z=Y[Z.toLowerCase()],!Z||!Z.href){var ee=j[0].charAt(0);return{type:\"text\",raw:ee,text:ee}}return M(j,Z,j[0],this.lexer)}},G.emStrong=function(H,Y,j){j===void 0&&(j=\"\");var Z=this.rules.inline.emStrong.lDelim.exec(H);if(Z&&!(Z[3]&&j.match(/(?:[0-9A-Za-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDF70-\\uDF81\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE70-\\uDEBE\\uDEC0-\\uDEC9\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/))){var ee=Z[1]||Z[2]||\"\";if(!ee||ee&&(j===\"\"||this.rules.inline.punctuation.exec(j))){var le=Z[0].length-1,ue,ce,pe=le,ve=0,Ce=Z[0][0]===\"*\"?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(Ce.lastIndex=0,Y=Y.slice(-1*H.length+le);(Z=Ce.exec(Y))!=null;)if(ue=Z[1]||Z[2]||Z[3]||Z[4]||Z[5]||Z[6],!!ue){if(ce=ue.length,Z[3]||Z[4]){pe+=ce;continue}else if((Z[5]||Z[6])&&le%3&&!((le+ce)%3)){ve+=ce;continue}if(pe-=ce,!(pe>0)){if(ce=Math.min(ce,ce+pe+ve),Math.min(le,ce)%2){var Se=H.slice(1,le+Z.index+ce);return{type:\"em\",raw:H.slice(0,le+Z.index+ce+1),text:Se,tokens:this.lexer.inlineTokens(Se)}}var _e=H.slice(2,le+Z.index+ce-1);return{type:\"strong\",raw:H.slice(0,le+Z.index+ce+1),text:_e,tokens:this.lexer.inlineTokens(_e)}}}}}},G.codespan=function(H){var Y=this.rules.inline.code.exec(H);if(Y){var j=Y[2].replace(/\\n/g,\" \"),Z=/[^ ]/.test(j),ee=/^ /.test(j)&&/ $/.test(j);return Z&&ee&&(j=j.substring(1,j.length-1)),j=t(j,!0),{type:\"codespan\",raw:Y[0],text:j}}},G.br=function(H){var Y=this.rules.inline.br.exec(H);if(Y)return{type:\"br\",raw:Y[0]}},G.del=function(H){var Y=this.rules.inline.del.exec(H);if(Y)return{type:\"del\",raw:Y[0],text:Y[2],tokens:this.lexer.inlineTokens(Y[2])}},G.autolink=function(H,Y){var j=this.rules.inline.autolink.exec(H);if(j){var Z,ee;return j[2]===\"@\"?(Z=t(this.options.mangle?Y(j[1]):j[1]),ee=\"mailto:\"+Z):(Z=t(j[1]),ee=Z),{type:\"link\",raw:j[0],text:Z,href:ee,tokens:[{type:\"text\",raw:Z,text:Z}]}}},G.url=function(H,Y){var j;if(j=this.rules.inline.url.exec(H)){var Z,ee;if(j[2]===\"@\")Z=t(this.options.mangle?Y(j[0]):j[0]),ee=\"mailto:\"+Z;else{var le;do le=j[0],j[0]=this.rules.inline._backpedal.exec(j[0])[0];while(le!==j[0]);Z=t(j[0]),j[1]===\"www.\"?ee=\"http://\"+Z:ee=Z}return{type:\"link\",raw:j[0],text:Z,href:ee,tokens:[{type:\"text\",raw:Z,text:Z}]}}},G.inlineText=function(H,Y){var j=this.rules.inline.text.exec(H);if(j){var Z;return this.lexer.state.inRawBlock?Z=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(j[0]):t(j[0]):j[0]:Z=t(this.options.smartypants?Y(j[0]):j[0]),{type:\"text\",raw:j[0],text:Z}}},U}(),O={newline:/^(?: *(?:\\n|$))+/,code:/^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,hr:/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,list:/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,html:\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$))\",def:/^ {0,3}\\[(label)\\]: *(?:\\n *)?<?([^\\s>]+)>?(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,table:w,lheading:/^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,_paragraph:/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,text:/^[^\\n]+/};O._label=/(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/,O._title=/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/,O.def=c(O.def).replace(\"label\",O._label).replace(\"title\",O._title).getRegex(),O.bullet=/(?:[*+-]|\\d{1,9}[.)])/,O.listItemStart=c(/^( *)(bull) */).replace(\"bull\",O.bullet).getRegex(),O.list=c(O.list).replace(/bull/g,O.bullet).replace(\"hr\",\"\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))\").replace(\"def\",\"\\\\n+(?=\"+O.def.source+\")\").getRegex(),O._tag=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",O._comment=/<!--(?!-?>)[\\s\\S]*?(?:-->|$)/,O.html=c(O.html,\"i\").replace(\"comment\",O._comment).replace(\"tag\",O._tag).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),O.paragraph=c(O._paragraph).replace(\"hr\",O.hr).replace(\"heading\",\" {0,3}#{1,6} \").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",O._tag).getRegex(),O.blockquote=c(O.blockquote).replace(\"paragraph\",O.paragraph).getRegex(),O.normal=D({},O),O.gfm=D({},O.normal,{table:\"^ *([^\\\\n ].*\\\\|.*)\\\\n {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\"}),O.gfm.table=c(O.gfm.table).replace(\"hr\",O.hr).replace(\"heading\",\" {0,3}#{1,6} \").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\" {4}[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",O._tag).getRegex(),O.gfm.paragraph=c(O._paragraph).replace(\"hr\",O.hr).replace(\"heading\",\" {0,3}#{1,6} \").replace(\"|lheading\",\"\").replace(\"table\",O.gfm.table).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",O._tag).getRegex(),O.pedantic=D({},O.normal,{html:c(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",O._comment).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:w,paragraph:c(O.normal._paragraph).replace(\"hr\",O.hr).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",O.lheading).replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").getRegex()});var B={escape:/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,autolink:/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,url:w,tag:\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\",link:/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,reflink:/^!?\\[(label)\\]\\[(ref)\\]/,nolink:/^!?\\[(ref)\\](?:\\[\\])?/,reflinkSearch:\"reflink|nolink(?!\\\\()\",emStrong:{lDelim:/^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,rDelimAst:/^[^_*]*?\\_\\_[^_*]*?\\*[^_*]*?(?=\\_\\_)|[^*]+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,rDelimUnd:/^[^_*]*?\\*\\*[^_*]*?\\_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,br:/^( {2,}|\\\\)\\n(?!\\s*$)/,del:w,text:/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,punctuation:/^([\\spunctuation])/};B._punctuation=\"!\\\"#$%&'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~\",B.punctuation=c(B.punctuation).replace(/punctuation/g,B._punctuation).getRegex(),B.blockSkip=/\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g,B.escapedEmSt=/\\\\\\*|\\\\_/g,B._comment=c(O._comment).replace(\"(?:-->|$)\",\"-->\").getRegex(),B.emStrong.lDelim=c(B.emStrong.lDelim).replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimAst=c(B.emStrong.rDelimAst,\"g\").replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimUnd=c(B.emStrong.rDelimUnd,\"g\").replace(/punct/g,B._punctuation).getRegex(),B._escapes=/\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g,B._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,B._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,B.autolink=c(B.autolink).replace(\"scheme\",B._scheme).replace(\"email\",B._email).getRegex(),B._attribute=/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/,B.tag=c(B.tag).replace(\"comment\",B._comment).replace(\"attribute\",B._attribute).getRegex(),B._label=/(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/,B._href=/<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/,B._title=/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/,B.link=c(B.link).replace(\"label\",B._label).replace(\"href\",B._href).replace(\"title\",B._title).getRegex(),B.reflink=c(B.reflink).replace(\"label\",B._label).replace(\"ref\",O._label).getRegex(),B.nolink=c(B.nolink).replace(\"ref\",O._label).getRegex(),B.reflinkSearch=c(B.reflinkSearch,\"g\").replace(\"reflink\",B.reflink).replace(\"nolink\",B.nolink).getRegex(),B.normal=D({},B),B.pedantic=D({},B.normal,{strong:{start:/^__|\\*\\*/,middle:/^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,endAst:/\\*\\*(?!\\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\\*/,middle:/^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,endAst:/\\*(?!\\*)/g,endUnd:/_(?!_)/g},link:c(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",B._label).getRegex(),reflink:c(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",B._label).getRegex()}),B.gfm=D({},B.normal,{escape:c(B.escape).replace(\"])\",\"~|])\").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/}),B.gfm.url=c(B.gfm.url,\"i\").replace(\"email\",B.gfm._extended_email).getRegex(),B.breaks=D({},B.gfm,{br:c(B.br).replace(\"{2,}\",\"*\").getRegex(),text:c(B.gfm.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()});function W(U){return U.replace(/---/g,\"\\u2014\").replace(/--/g,\"\\u2013\").replace(/(^|[-\\u2014/(\\[{\"\\s])'/g,\"$1\\u2018\").replace(/'/g,\"\\u2019\").replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g,\"$1\\u201C\").replace(/\"/g,\"\\u201D\").replace(/\\.{3}/g,\"\\u2026\")}function V(U){var G=\"\",z,H,Y=U.length;for(z=0;z<Y;z++)H=U.charCodeAt(z),Math.random()>.5&&(H=\"x\"+H.toString(16)),G+=\"&#\"+H+\";\";return G}var K=function(){function U(z){this.tokens=[],this.tokens.links=Object.create(null),this.options=z||te.defaults,this.options.tokenizer=this.options.tokenizer||new x,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};var H={block:O.normal,inline:B.normal};this.options.pedantic?(H.block=O.pedantic,H.inline=B.pedantic):this.options.gfm&&(H.block=O.gfm,this.options.breaks?H.inline=B.breaks:H.inline=B.gfm),this.tokenizer.rules=H}U.lex=function(H,Y){var j=new U(Y);return j.lex(H)},U.lexInline=function(H,Y){var j=new U(Y);return j.inlineTokens(H)};var G=U.prototype;return G.lex=function(H){H=H.replace(/\\r\\n|\\r/g,`\n`),this.blockTokens(H,this.tokens);for(var Y;Y=this.inlineQueue.shift();)this.inlineTokens(Y.src,Y.tokens);return this.tokens},G.blockTokens=function(H,Y){var j=this;Y===void 0&&(Y=[]),this.options.pedantic?H=H.replace(/\\t/g,\"    \").replace(/^ +$/gm,\"\"):H=H.replace(/^( *)(\\t+)/gm,function(pe,ve,Ce){return ve+\"    \".repeat(Ce.length)});for(var Z,ee,le,ue;H;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(function(pe){return(Z=pe.call({lexer:j},H,Y))?(H=H.substring(Z.raw.length),Y.push(Z),!0):!1}))){if(Z=this.tokenizer.space(H)){H=H.substring(Z.raw.length),Z.raw.length===1&&Y.length>0?Y[Y.length-1].raw+=`\n`:Y.push(Z);continue}if(Z=this.tokenizer.code(H)){H=H.substring(Z.raw.length),ee=Y[Y.length-1],ee&&(ee.type===\"paragraph\"||ee.type===\"text\")?(ee.raw+=`\n`+Z.raw,ee.text+=`\n`+Z.text,this.inlineQueue[this.inlineQueue.length-1].src=ee.text):Y.push(Z);continue}if(Z=this.tokenizer.fences(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.heading(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.hr(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.blockquote(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.list(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.html(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.def(H)){H=H.substring(Z.raw.length),ee=Y[Y.length-1],ee&&(ee.type===\"paragraph\"||ee.type===\"text\")?(ee.raw+=`\n`+Z.raw,ee.text+=`\n`+Z.raw,this.inlineQueue[this.inlineQueue.length-1].src=ee.text):this.tokens.links[Z.tag]||(this.tokens.links[Z.tag]={href:Z.href,title:Z.title});continue}if(Z=this.tokenizer.table(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.lheading(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(le=H,this.options.extensions&&this.options.extensions.startBlock&&function(){var pe=1/0,ve=H.slice(1),Ce=void 0;j.options.extensions.startBlock.forEach(function(Se){Ce=Se.call({lexer:this},ve),typeof Ce==\"number\"&&Ce>=0&&(pe=Math.min(pe,Ce))}),pe<1/0&&pe>=0&&(le=H.substring(0,pe+1))}(),this.state.top&&(Z=this.tokenizer.paragraph(le))){ee=Y[Y.length-1],ue&&ee.type===\"paragraph\"?(ee.raw+=`\n`+Z.raw,ee.text+=`\n`+Z.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=ee.text):Y.push(Z),ue=le.length!==H.length,H=H.substring(Z.raw.length);continue}if(Z=this.tokenizer.text(H)){H=H.substring(Z.raw.length),ee=Y[Y.length-1],ee&&ee.type===\"text\"?(ee.raw+=`\n`+Z.raw,ee.text+=`\n`+Z.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=ee.text):Y.push(Z);continue}if(H){var ce=\"Infinite loop on byte: \"+H.charCodeAt(0);if(this.options.silent){console.error(ce);break}else throw new Error(ce)}}return this.state.top=!0,Y},G.inline=function(H,Y){return Y===void 0&&(Y=[]),this.inlineQueue.push({src:H,tokens:Y}),Y},G.inlineTokens=function(H,Y){var j=this;Y===void 0&&(Y=[]);var Z,ee,le,ue=H,ce,pe,ve;if(this.tokens.links){var Ce=Object.keys(this.tokens.links);if(Ce.length>0)for(;(ce=this.tokenizer.rules.inline.reflinkSearch.exec(ue))!=null;)Ce.includes(ce[0].slice(ce[0].lastIndexOf(\"[\")+1,-1))&&(ue=ue.slice(0,ce.index)+\"[\"+N(\"a\",ce[0].length-2)+\"]\"+ue.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(ce=this.tokenizer.rules.inline.blockSkip.exec(ue))!=null;)ue=ue.slice(0,ce.index)+\"[\"+N(\"a\",ce[0].length-2)+\"]\"+ue.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(ce=this.tokenizer.rules.inline.escapedEmSt.exec(ue))!=null;)ue=ue.slice(0,ce.index)+\"++\"+ue.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;H;)if(pe||(ve=\"\"),pe=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(function(_e){return(Z=_e.call({lexer:j},H,Y))?(H=H.substring(Z.raw.length),Y.push(Z),!0):!1}))){if(Z=this.tokenizer.escape(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.tag(H)){H=H.substring(Z.raw.length),ee=Y[Y.length-1],ee&&Z.type===\"text\"&&ee.type===\"text\"?(ee.raw+=Z.raw,ee.text+=Z.text):Y.push(Z);continue}if(Z=this.tokenizer.link(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.reflink(H,this.tokens.links)){H=H.substring(Z.raw.length),ee=Y[Y.length-1],ee&&Z.type===\"text\"&&ee.type===\"text\"?(ee.raw+=Z.raw,ee.text+=Z.text):Y.push(Z);continue}if(Z=this.tokenizer.emStrong(H,ue,ve)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.codespan(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.br(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.del(H)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(Z=this.tokenizer.autolink(H,V)){H=H.substring(Z.raw.length),Y.push(Z);continue}if(!this.state.inLink&&(Z=this.tokenizer.url(H,V))){H=H.substring(Z.raw.length),Y.push(Z);continue}if(le=H,this.options.extensions&&this.options.extensions.startInline&&function(){var _e=1/0,Ee=H.slice(1),Ae=void 0;j.options.extensions.startInline.forEach(function(xe){Ae=xe.call({lexer:this},Ee),typeof Ae==\"number\"&&Ae>=0&&(_e=Math.min(_e,Ae))}),_e<1/0&&_e>=0&&(le=H.substring(0,_e+1))}(),Z=this.tokenizer.inlineText(le,W)){H=H.substring(Z.raw.length),Z.raw.slice(-1)!==\"_\"&&(ve=Z.raw.slice(-1)),pe=!0,ee=Y[Y.length-1],ee&&ee.type===\"text\"?(ee.raw+=Z.raw,ee.text+=Z.text):Y.push(Z);continue}if(H){var Se=\"Infinite loop on byte: \"+H.charCodeAt(0);if(this.options.silent){console.error(Se);break}else throw new Error(Se)}}return Y},L(U,null,[{key:\"rules\",get:function(){return{block:O,inline:B}}}]),U}(),F=function(){function U(z){this.options=z||te.defaults}var G=U.prototype;return G.code=function(H,Y,j){var Z=(Y||\"\").match(/\\S*/)[0];if(this.options.highlight){var ee=this.options.highlight(H,Z);ee!=null&&ee!==H&&(j=!0,H=ee)}return H=H.replace(/\\n$/,\"\")+`\n`,Z?'<pre><code class=\"'+this.options.langPrefix+t(Z,!0)+'\">'+(j?H:t(H,!0))+`</code></pre>\n`:\"<pre><code>\"+(j?H:t(H,!0))+`</code></pre>\n`},G.blockquote=function(H){return`<blockquote>\n`+H+`</blockquote>\n`},G.html=function(H){return H},G.heading=function(H,Y,j,Z){if(this.options.headerIds){var ee=this.options.headerPrefix+Z.slug(j);return\"<h\"+Y+' id=\"'+ee+'\">'+H+\"</h\"+Y+`>\n`}return\"<h\"+Y+\">\"+H+\"</h\"+Y+`>\n`},G.hr=function(){return this.options.xhtml?`<hr/>\n`:`<hr>\n`},G.list=function(H,Y,j){var Z=Y?\"ol\":\"ul\",ee=Y&&j!==1?' start=\"'+j+'\"':\"\";return\"<\"+Z+ee+`>\n`+H+\"</\"+Z+`>\n`},G.listitem=function(H){return\"<li>\"+H+`</li>\n`},G.checkbox=function(H){return\"<input \"+(H?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\"'+(this.options.xhtml?\" /\":\"\")+\"> \"},G.paragraph=function(H){return\"<p>\"+H+`</p>\n`},G.table=function(H,Y){return Y&&(Y=\"<tbody>\"+Y+\"</tbody>\"),`<table>\n<thead>\n`+H+`</thead>\n`+Y+`</table>\n`},G.tablerow=function(H){return`<tr>\n`+H+`</tr>\n`},G.tablecell=function(H,Y){var j=Y.header?\"th\":\"td\",Z=Y.align?\"<\"+j+' align=\"'+Y.align+'\">':\"<\"+j+\">\";return Z+H+(\"</\"+j+`>\n`)},G.strong=function(H){return\"<strong>\"+H+\"</strong>\"},G.em=function(H){return\"<em>\"+H+\"</em>\"},G.codespan=function(H){return\"<code>\"+H+\"</code>\"},G.br=function(){return this.options.xhtml?\"<br/>\":\"<br>\"},G.del=function(H){return\"<del>\"+H+\"</del>\"},G.link=function(H,Y,j){if(H=l(this.options.sanitize,this.options.baseUrl,H),H===null)return j;var Z='<a href=\"'+t(H)+'\"';return Y&&(Z+=' title=\"'+Y+'\"'),Z+=\">\"+j+\"</a>\",Z},G.image=function(H,Y,j){if(H=l(this.options.sanitize,this.options.baseUrl,H),H===null)return j;var Z='<img src=\"'+H+'\" alt=\"'+j+'\"';return Y&&(Z+=' title=\"'+Y+'\"'),Z+=this.options.xhtml?\"/>\":\">\",Z},G.text=function(H){return H},U}(),q=function(){function U(){}var G=U.prototype;return G.strong=function(H){return H},G.em=function(H){return H},G.codespan=function(H){return H},G.del=function(H){return H},G.html=function(H){return H},G.text=function(H){return H},G.link=function(H,Y,j){return\"\"+j},G.image=function(H,Y,j){return\"\"+j},G.br=function(){return\"\"},U}(),ie=function(){function U(){this.seen={}}var G=U.prototype;return G.serialize=function(H){return H.toLowerCase().trim().replace(/<[!\\/a-z].*?>/ig,\"\").replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g,\"\").replace(/\\s/g,\"-\")},G.getNextSafeSlug=function(H,Y){var j=H,Z=0;if(this.seen.hasOwnProperty(j)){Z=this.seen[H];do Z++,j=H+\"-\"+Z;while(this.seen.hasOwnProperty(j))}return Y||(this.seen[H]=Z,this.seen[j]=0),j},G.slug=function(H,Y){Y===void 0&&(Y={});var j=this.serialize(H);return this.getNextSafeSlug(j,Y.dryrun)},U}(),ae=function(){function U(z){this.options=z||te.defaults,this.options.renderer=this.options.renderer||new F,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new q,this.slugger=new ie}U.parse=function(H,Y){var j=new U(Y);return j.parse(H)},U.parseInline=function(H,Y){var j=new U(Y);return j.parseInline(H)};var G=U.prototype;return G.parse=function(H,Y){Y===void 0&&(Y=!0);var j=\"\",Z,ee,le,ue,ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be,De,Ie,fe,be,Ne,Pe=H.length;for(Z=0;Z<Pe;Z++){if(_e=H[Z],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[_e.type]&&(Ne=this.options.extensions.renderers[_e.type].call({parser:this},_e),Ne!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"paragraph\",\"text\"].includes(_e.type))){j+=Ne||\"\";continue}switch(_e.type){case\"space\":continue;case\"hr\":{j+=this.renderer.hr();continue}case\"heading\":{j+=this.renderer.heading(this.parseInline(_e.tokens),_e.depth,u(this.parseInline(_e.tokens,this.textRenderer)),this.slugger);continue}case\"code\":{j+=this.renderer.code(_e.text,_e.lang,_e.escaped);continue}case\"table\":{for(Ce=\"\",ve=\"\",ue=_e.header.length,ee=0;ee<ue;ee++)ve+=this.renderer.tablecell(this.parseInline(_e.header[ee].tokens),{header:!0,align:_e.align[ee]});for(Ce+=this.renderer.tablerow(ve),Se=\"\",ue=_e.rows.length,ee=0;ee<ue;ee++){for(pe=_e.rows[ee],ve=\"\",ce=pe.length,le=0;le<ce;le++)ve+=this.renderer.tablecell(this.parseInline(pe[le].tokens),{header:!1,align:_e.align[le]});Se+=this.renderer.tablerow(ve)}j+=this.renderer.table(Ce,Se);continue}case\"blockquote\":{Se=this.parse(_e.tokens),j+=this.renderer.blockquote(Se);continue}case\"list\":{for(Ee=_e.ordered,Ae=_e.start,xe=_e.loose,ue=_e.items.length,Se=\"\",ee=0;ee<ue;ee++)De=_e.items[ee],Ie=De.checked,fe=De.task,Be=\"\",De.task&&(be=this.renderer.checkbox(Ie),xe?De.tokens.length>0&&De.tokens[0].type===\"paragraph\"?(De.tokens[0].text=be+\" \"+De.tokens[0].text,De.tokens[0].tokens&&De.tokens[0].tokens.length>0&&De.tokens[0].tokens[0].type===\"text\"&&(De.tokens[0].tokens[0].text=be+\" \"+De.tokens[0].tokens[0].text)):De.tokens.unshift({type:\"text\",text:be}):Be+=be),Be+=this.parse(De.tokens,xe),Se+=this.renderer.listitem(Be,fe,Ie);j+=this.renderer.list(Se,Ee,Ae);continue}case\"html\":{j+=this.renderer.html(_e.text);continue}case\"paragraph\":{j+=this.renderer.paragraph(this.parseInline(_e.tokens));continue}case\"text\":{for(Se=_e.tokens?this.parseInline(_e.tokens):_e.text;Z+1<Pe&&H[Z+1].type===\"text\";)_e=H[++Z],Se+=`\n`+(_e.tokens?this.parseInline(_e.tokens):_e.text);j+=Y?this.renderer.paragraph(Se):Se;continue}default:{var ze='Token with \"'+_e.type+'\" type was not found.';if(this.options.silent){console.error(ze);return}else throw new Error(ze)}}}return j},G.parseInline=function(H,Y){Y=Y||this.renderer;var j=\"\",Z,ee,le,ue=H.length;for(Z=0;Z<ue;Z++){if(ee=H[Z],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[ee.type]&&(le=this.options.extensions.renderers[ee.type].call({parser:this},ee),le!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(ee.type))){j+=le||\"\";continue}switch(ee.type){case\"escape\":{j+=Y.text(ee.text);break}case\"html\":{j+=Y.html(ee.text);break}case\"link\":{j+=Y.link(ee.href,ee.title,this.parseInline(ee.tokens,Y));break}case\"image\":{j+=Y.image(ee.href,ee.title,ee.text);break}case\"strong\":{j+=Y.strong(this.parseInline(ee.tokens,Y));break}case\"em\":{j+=Y.em(this.parseInline(ee.tokens,Y));break}case\"codespan\":{j+=Y.codespan(ee.text);break}case\"br\":{j+=Y.br();break}case\"del\":{j+=Y.del(this.parseInline(ee.tokens,Y));break}case\"text\":{j+=Y.text(ee.text);break}default:{var ce='Token with \"'+ee.type+'\" type was not found.';if(this.options.silent){console.error(ce);return}else throw new Error(ce)}}}return j},U}();function ne(U,G,z){if(typeof U>\"u\"||U===null)throw new Error(\"marked(): input parameter is undefined or null\");if(typeof U!=\"string\")throw new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(U)+\", string expected\");if(typeof G==\"function\"&&(z=G,G=null),G=D({},ne.defaults,G||{}),P(G),z){var H=G.highlight,Y;try{Y=K.lex(U,G)}catch(ue){return z(ue)}var j=function(ce){var pe;if(!ce)try{G.walkTokens&&ne.walkTokens(Y,G.walkTokens),pe=ae.parse(Y,G)}catch(ve){ce=ve}return G.highlight=H,ce?z(ce):z(null,pe)};if(!H||H.length<3||(delete G.highlight,!Y.length))return j();var Z=0;ne.walkTokens(Y,function(ue){ue.type===\"code\"&&(Z++,setTimeout(function(){H(ue.text,ue.lang,function(ce,pe){if(ce)return j(ce);pe!=null&&pe!==ue.text&&(ue.text=pe,ue.escaped=!0),Z--,Z===0&&j()})},0))}),Z===0&&j();return}function ee(ue){if(ue.message+=`\nPlease report this to https://github.com/markedjs/marked.`,G.silent)return\"<p>An error occurred:</p><pre>\"+t(ue.message+\"\",!0)+\"</pre>\";throw ue}try{var le=K.lex(U,G);if(G.walkTokens){if(G.async)return Promise.all(ne.walkTokens(le,G.walkTokens)).then(function(){return ae.parse(le,G)}).catch(ee);ne.walkTokens(le,G.walkTokens)}return ae.parse(le,G)}catch(ue){ee(ue)}}ne.options=ne.setOptions=function(U){return D(ne.defaults,U),p(ne.defaults),ne},ne.getDefaults=S,ne.defaults=te.defaults,ne.use=function(){for(var U=arguments.length,G=new Array(U),z=0;z<U;z++)G[z]=arguments[z];var H=D.apply(void 0,[{}].concat(G)),Y=ne.defaults.extensions||{renderers:{},childTokens:{}},j;G.forEach(function(Z){if(Z.extensions&&(j=!0,Z.extensions.forEach(function(le){if(!le.name)throw new Error(\"extension name required\");if(le.renderer){var ue=Y.renderers?Y.renderers[le.name]:null;ue?Y.renderers[le.name]=function(){for(var ce=arguments.length,pe=new Array(ce),ve=0;ve<ce;ve++)pe[ve]=arguments[ve];var Ce=le.renderer.apply(this,pe);return Ce===!1&&(Ce=ue.apply(this,pe)),Ce}:Y.renderers[le.name]=le.renderer}if(le.tokenizer){if(!le.level||le.level!==\"block\"&&le.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");Y[le.level]?Y[le.level].unshift(le.tokenizer):Y[le.level]=[le.tokenizer],le.start&&(le.level===\"block\"?Y.startBlock?Y.startBlock.push(le.start):Y.startBlock=[le.start]:le.level===\"inline\"&&(Y.startInline?Y.startInline.push(le.start):Y.startInline=[le.start]))}le.childTokens&&(Y.childTokens[le.name]=le.childTokens)})),Z.renderer&&function(){var le=ne.defaults.renderer||new F,ue=function(ve){var Ce=le[ve];le[ve]=function(){for(var Se=arguments.length,_e=new Array(Se),Ee=0;Ee<Se;Ee++)_e[Ee]=arguments[Ee];var Ae=Z.renderer[ve].apply(le,_e);return Ae===!1&&(Ae=Ce.apply(le,_e)),Ae}};for(var ce in Z.renderer)ue(ce);H.renderer=le}(),Z.tokenizer&&function(){var le=ne.defaults.tokenizer||new x,ue=function(ve){var Ce=le[ve];le[ve]=function(){for(var Se=arguments.length,_e=new Array(Se),Ee=0;Ee<Se;Ee++)_e[Ee]=arguments[Ee];var Ae=Z.tokenizer[ve].apply(le,_e);return Ae===!1&&(Ae=Ce.apply(le,_e)),Ae}};for(var ce in Z.tokenizer)ue(ce);H.tokenizer=le}(),Z.walkTokens){var ee=ne.defaults.walkTokens;H.walkTokens=function(le){var ue=[];return ue.push(Z.walkTokens.call(this,le)),ee&&(ue=ue.concat(ee.call(this,le))),ue}}j&&(H.extensions=Y),ne.setOptions(H)})},ne.walkTokens=function(U,G){for(var z=[],H=function(){var ee=j.value;switch(z=z.concat(G.call(ne,ee)),ee.type){case\"table\":{for(var le=E(ee.header),ue;!(ue=le()).done;){var ce=ue.value;z=z.concat(ne.walkTokens(ce.tokens,G))}for(var pe=E(ee.rows),ve;!(ve=pe()).done;)for(var Ce=ve.value,Se=E(Ce),_e;!(_e=Se()).done;){var Ee=_e.value;z=z.concat(ne.walkTokens(Ee.tokens,G))}break}case\"list\":{z=z.concat(ne.walkTokens(ee.items,G));break}default:ne.defaults.extensions&&ne.defaults.extensions.childTokens&&ne.defaults.extensions.childTokens[ee.type]?ne.defaults.extensions.childTokens[ee.type].forEach(function(Ae){z=z.concat(ne.walkTokens(ee[Ae],G))}):ee.tokens&&(z=z.concat(ne.walkTokens(ee.tokens,G)))}},Y=E(U),j;!(j=Y()).done;)H();return z},ne.parseInline=function(U,G){if(typeof U>\"u\"||U===null)throw new Error(\"marked.parseInline(): input parameter is undefined or null\");if(typeof U!=\"string\")throw new Error(\"marked.parseInline(): input parameter is of type \"+Object.prototype.toString.call(U)+\", string expected\");G=D({},ne.defaults,G||{}),P(G);try{var z=K.lexInline(U,G);return G.walkTokens&&ne.walkTokens(z,G.walkTokens),ae.parseInline(z,G)}catch(H){if(H.message+=`\nPlease report this to https://github.com/markedjs/marked.`,G.silent)return\"<p>An error occurred:</p><pre>\"+t(H.message+\"\",!0)+\"</pre>\";throw H}},ne.Parser=ae,ne.parser=ae.parse,ne.Renderer=F,ne.TextRenderer=q,ne.Lexer=K,ne.lexer=K.lex,ne.Tokenizer=x,ne.Slugger=ie,ne.parse=ne;var $=ne.options,J=ne.setOptions,Q=ne.use,re=ne.walkTokens,de=ne.parseInline,he=ne,me=ae.parse,X=K.lex;te.Lexer=K,te.Parser=ae,te.Renderer=F,te.Slugger=ie,te.TextRenderer=q,te.Tokenizer=x,te.getDefaults=S,te.lexer=X,te.marked=ne,te.options=$,te.parse=he,te.parseInline=de,te.parser=me,te.setOptions=J,te.use=Q,te.walkTokens=re,Object.defineProperty(te,\"__esModule\",{value:!0})}),define(se[109],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Mimes=void 0,e.Mimes=Object.freeze({text:\"text/plain\",binary:\"application/octet-stream\",unknown:\"application/unknown\",markdown:\"text/markdown\",latex:\"text/latex\",uriList:\"text/uri-list\"})}),define(se[198],oe([1,0,109]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DataTransfers=void 0,e.DataTransfers={RESOURCES:\"ResourceURLs\",DOWNLOAD_URL:\"DownloadURL\",FILES:\"Files\",TEXT:L.Mimes.text,INTERNAL_URI_LIST:\"application/vnd.code.uri-list\"}}),define(se[401],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getKoreanAltChars=void 0;function L(i){const n=E(i);if(n&&n.length>0)return new Uint32Array(n)}e.getKoreanAltChars=L;let k=0;const y=new Uint32Array(10);function E(i){if(k=0,S(i,_,4352),k>0||(S(i,v,4449),k>0)||(S(i,b,4520),k>0)||(S(i,a,12593),k))return y.subarray(0,k);if(i>=44032&&i<=55203){const n=i-44032,t=n%588,r=Math.floor(n/588),u=Math.floor(t/28),f=t%28-1;if(r<_.length?S(r,_,0):4352+r-12593<a.length&&S(4352+r,a,12593),u<v.length?S(u,v,0):4449+u-12593<a.length&&S(4449+u-12593,a,12593),f>=0&&(f<b.length?S(f,b,0):4520+f-12593<a.length&&S(4520+f-12593,a,12593)),k>0)return y.subarray(0,k)}}function S(i,n,t){i>=t&&i<t+n.length&&p(n[i-t])}function p(i){i!==0&&(y[k++]=i&255,i>>8&&(y[k++]=i>>8&255),i>>16&&(y[k++]=i>>16&255))}const _=new Uint8Array([114,82,115,101,69,102,97,113,81,116,84,100,119,87,99,122,120,118,103]),v=new Uint16Array([107,111,105,79,106,112,117,80,104,27496,28520,27752,121,110,27246,28782,27758,98,109,27757,108]),b=new Uint16Array([114,82,29810,115,30579,26483,101,102,29286,24934,29030,29798,30822,30310,26470,97,113,29809,116,84,100,119,99,122,120,118,103]),a=new Uint16Array([114,82,29810,115,30579,26483,101,69,102,29286,24934,29030,29798,30822,30310,26470,97,113,81,29809,116,84,100,119,87,99,122,120,118,103,107,111,105,79,106,112,117,80,104,27496,28520,27752,121,110,27246,28782,27758,98,109,27757,108])}),define(se[402],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ArrayNavigator=void 0;class L{constructor(y,E=0,S=y.length,p=E-1){this.items=y,this.start=E,this.end=S,this.index=p}current(){return this.index===this.start-1||this.index===this.end?null:this.items[this.index]}next(){return this.index=Math.min(this.index+1,this.end),this.current()}previous(){return this.index=Math.max(this.index-1,this.start-1),this.current()}first(){return this.index=this.start,this.current()}last(){return this.index=this.end-1,this.current()}}e.ArrayNavigator=L}),define(se[403],oe([1,0,402]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HistoryNavigator=void 0;class k{constructor(E=[],S=10){this._initialize(E),this._limit=S,this._onChange()}getHistory(){return this._elements}add(E){this._history.delete(E),this._history.add(E),this._onChange()}next(){return this._navigator.next()}previous(){return this._currentPosition()!==0?this._navigator.previous():null}current(){return this._navigator.current()}first(){return this._navigator.first()}last(){return this._navigator.last()}isLast(){return this._currentPosition()>=this._elements.length-1}isNowhere(){return this._navigator.current()===null}has(E){return this._history.has(E)}_onChange(){this._reduceToLimit();const E=this._elements;this._navigator=new L.ArrayNavigator(E,0,E.length,E.length)}_reduceToLimit(){const E=this._elements;E.length>this._limit&&this._initialize(E.slice(E.length-this._limit))}_currentPosition(){const E=this._navigator.current();return E?this._elements.indexOf(E):-1}_initialize(E){this._history=new Set;for(const S of E)this._history.add(S)}get _elements(){const E=[];return this._history.forEach(S=>E.push(S)),E}}e.HistoryNavigator=k}),define(se[145],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SlidingWindowAverage=e.MovingAverage=e.clamp=void 0;function L(E,S,p){return Math.min(Math.max(E,S),p)}e.clamp=L;class k{constructor(){this._n=1,this._val=0}update(S){return this._val=this._val+(S-this._val)/this._n,this._n+=1,this._val}get value(){return this._val}}e.MovingAverage=k;class y{constructor(S){this._n=0,this._val=0,this._values=[],this._index=0,this._sum=0,this._values=new Array(S),this._values.fill(0,0,S)}update(S){const p=this._values[this._index];return this._values[this._index]=S,this._index=(this._index+1)%this._values.length,this._sum-=p,this._sum+=S,this._n<this._values.length&&(this._n+=1),this._val=this._sum/this._n,this._val}get value(){return this._val}}e.SlidingWindowAverage=y}),define(se[146],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ConsoleObservableLogger=e.getLogger=e.setLogger=void 0;let L;function k(r){L=r}e.setLogger=k;function y(){return L}e.getLogger=y;class E{constructor(){this.indentation=0,this.changedObservablesSets=new WeakMap}textToConsoleArgs(u){return S([p(n(\"|  \",this.indentation)),u])}formatInfo(u){return u.hadValue?u.didChange?[p(\" \"),v(b(u.oldValue,70),{color:\"red\",strikeThrough:!0}),p(\" \"),v(b(u.newValue,60),{color:\"green\"})]:[p(\" (unchanged)\")]:[p(\" \"),v(b(u.newValue,60),{color:\"green\"}),p(\" (initial)\")]}handleObservableChanged(u,f){console.log(...this.textToConsoleArgs([_(\"observable value changed\"),v(u.debugName,{color:\"BlueViolet\"}),...this.formatInfo(f)]))}formatChanges(u){if(u.size!==0)return v(\" (changed deps: \"+[...u].map(f=>f.debugName).join(\", \")+\")\",{color:\"gray\"})}handleDerivedCreated(u){const f=u.handleChange;this.changedObservablesSets.set(u,new Set),u.handleChange=(c,d)=>(this.changedObservablesSets.get(u).add(c),f.apply(u,[c,d]))}handleDerivedRecomputed(u,f){const c=this.changedObservablesSets.get(u);console.log(...this.textToConsoleArgs([_(\"derived recomputed\"),v(u.debugName,{color:\"BlueViolet\"}),...this.formatInfo(f),this.formatChanges(c),{data:[{fn:u._computeFn}]}])),c.clear()}handleFromEventObservableTriggered(u,f){console.log(...this.textToConsoleArgs([_(\"observable from event triggered\"),v(u.debugName,{color:\"BlueViolet\"}),...this.formatInfo(f),{data:[{fn:u._getValue}]}]))}handleAutorunCreated(u){const f=u.handleChange;this.changedObservablesSets.set(u,new Set),u.handleChange=(c,d)=>(this.changedObservablesSets.get(u).add(c),f.apply(u,[c,d]))}handleAutorunTriggered(u){const f=this.changedObservablesSets.get(u);console.log(...this.textToConsoleArgs([_(\"autorun\"),v(u.debugName,{color:\"BlueViolet\"}),this.formatChanges(f),{data:[{fn:u._runFn}]}])),f.clear(),this.indentation++}handleAutorunFinished(u){this.indentation--}handleBeginTransaction(u){let f=u.getDebugName();f===void 0&&(f=\"\"),console.log(...this.textToConsoleArgs([_(\"transaction\"),v(f,{color:\"BlueViolet\"}),{data:[{fn:u._fn}]}])),this.indentation++}handleEndTransaction(){this.indentation--}}e.ConsoleObservableLogger=E;function S(r){const u=new Array,f=[];let c=\"\";function d(l){if(\"length\"in l)for(const o of l)o&&d(o);else\"text\"in l?(c+=`%c${l.text}`,u.push(l.style),l.data&&f.push(...l.data)):\"data\"in l&&f.push(...l.data)}d(r);const s=[c,...u];return s.push(...f),s}function p(r){return v(r,{color:\"black\"})}function _(r){return v(t(`${r}: `,10),{color:\"black\",bold:!0})}function v(r,u={color:\"black\"}){function f(d){return Object.entries(d).reduce((s,[l,o])=>`${s}${l}:${o};`,\"\")}const c={color:u.color};return u.strikeThrough&&(c[\"text-decoration\"]=\"line-through\"),u.bold&&(c[\"font-weight\"]=\"bold\"),{text:r,style:f(c)}}function b(r,u){switch(typeof r){case\"number\":return\"\"+r;case\"string\":return r.length+2<=u?`\"${r}\"`:`\"${r.substr(0,u-7)}\"+...`;case\"boolean\":return r?\"true\":\"false\";case\"undefined\":return\"undefined\";case\"object\":return r===null?\"null\":Array.isArray(r)?a(r,u):i(r,u);case\"symbol\":return r.toString();case\"function\":return`[[Function${r.name?\" \"+r.name:\"\"}]]`;default:return\"\"+r}}function a(r,u){let f=\"[ \",c=!0;for(const d of r){if(c||(f+=\", \"),f.length-5>u){f+=\"...\";break}c=!1,f+=`${b(d,u-f.length)}`}return f+=\" ]\",f}function i(r,u){let f=\"{ \",c=!0;for(const[d,s]of Object.entries(r)){if(c||(f+=\", \"),f.length-5>u){f+=\"...\";break}c=!1,f+=`${d}: ${b(s,u-f.length)}`}return f+=\" }\",f}function n(r,u){let f=\"\";for(let c=1;c<=u;c++)f+=r;return f}function t(r,u){for(;r.length<u;)r+=\" \";return r}}),define(se[110],oe([1,0,146]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DisposableObservableValue=e.disposableObservableValue=e.ObservableValue=e.observableValue=e.getFunctionName=e.getDebugName=e.TransactionImpl=e.subtransaction=e.asyncTransaction=e.globalTransaction=e.transaction=e.BaseObservable=e.ConvenientObservable=e._setDerivedOpts=e._setKeepObserved=e._setRecomputeInitiallyAndOnChange=void 0;let k;function y(T){k=T}e._setRecomputeInitiallyAndOnChange=y;let E;function S(T){E=T}e._setKeepObserved=S;let p;function _(T){p=T}e._setDerivedOpts=_;class v{get TChange(){return null}reportChanges(){this.get()}read(A){return A?A.readObservable(this):this.get()}map(A,P){const N=P===void 0?void 0:A,M=P===void 0?A:P;return p({owner:N,debugName:()=>{const R=m(M);if(R!==void 0)return R;const O=/^\\s*\\(?\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*\\)?\\s*=>\\s*\\1(?:\\??)\\.([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*$/.exec(M.toString());if(O)return`${this.debugName}.${O[2]}`;if(!N)return`${this.debugName} (mapped)`}},R=>M(this.read(R),R))}recomputeInitiallyAndOnChange(A,P){return A.add(k(this,P)),this}}e.ConvenientObservable=v;class b extends v{constructor(){super(...arguments),this.observers=new Set}addObserver(A){const P=this.observers.size;this.observers.add(A),P===0&&this.onFirstObserverAdded()}removeObserver(A){this.observers.delete(A)&&this.observers.size===0&&this.onLastObserverRemoved()}onFirstObserverAdded(){}onLastObserverRemoved(){}}e.BaseObservable=b;function a(T,A){const P=new u(T,A);try{T(P)}finally{P.finish()}}e.transaction=a;let i;function n(T){if(i)T(i);else{const A=new u(T,void 0);i=A;try{T(A)}finally{A.finish(),i=void 0}}}e.globalTransaction=n;async function t(T,A){const P=new u(T,A);try{await T(P)}finally{P.finish()}}e.asyncTransaction=t;function r(T,A,P){T?A(T):a(A,P)}e.subtransaction=r;class u{constructor(A,P){var N;this._fn=A,this._getDebugName=P,this.updatingObservers=[],(N=(0,L.getLogger)())===null||N===void 0||N.handleBeginTransaction(this)}getDebugName(){return this._getDebugName?this._getDebugName():m(this._fn)}updateObserver(A,P){this.updatingObservers.push({observer:A,observable:P}),A.beginUpdate(P)}finish(){var A;const P=this.updatingObservers;for(let N=0;N<P.length;N++){const{observer:M,observable:R}=P[N];M.endUpdate(R)}this.updatingObservers=null,(A=(0,L.getLogger)())===null||A===void 0||A.handleEndTransaction()}}e.TransactionImpl=u;const f=new Map,c=new WeakMap;function d(T,A,P,N){var M;const R=c.get(T);if(R)return R;const x=s(T,A,P,N);if(x){let O=(M=f.get(x))!==null&&M!==void 0?M:0;O++,f.set(x,O);const B=O===1?x:`${x}#${O}`;return c.set(T,B),B}}e.getDebugName=d;function s(T,A,P,N){const M=c.get(T);if(M)return M;const R=N?g(N)+\".\":\"\";let x;if(A!==void 0)if(typeof A==\"function\"){if(x=A(),x!==void 0)return R+x}else return R+A;if(P!==void 0&&(x=m(P),x!==void 0))return R+x;if(N!==void 0){for(const O in N)if(N[O]===T)return R+O}}const l=new Map,o=new WeakMap;function g(T){var A;const P=o.get(T);if(P)return P;const N=h(T);let M=(A=l.get(N))!==null&&A!==void 0?A:0;M++,l.set(N,M);const R=M===1?N:`${N}#${M}`;return o.set(T,R),R}function h(T){const A=T.constructor;return A?A.name:\"Object\"}function m(T){const A=T.toString(),N=/\\/\\*\\*\\s*@description\\s*([^*]*)\\*\\//.exec(A),M=N?N[1]:void 0;return M?.trim()}e.getFunctionName=m;function C(T,A){return typeof T==\"string\"?new w(void 0,T,A):new w(T,void 0,A)}e.observableValue=C;class w extends b{get debugName(){var A;return(A=d(this,this._debugName,void 0,this._owner))!==null&&A!==void 0?A:\"ObservableValue\"}constructor(A,P,N){super(),this._owner=A,this._debugName=P,this._value=N}get(){return this._value}set(A,P,N){var M;if(this._value===A)return;let R;P||(P=R=new u(()=>{},()=>`Setting ${this.debugName}`));try{const x=this._value;this._setValue(A),(M=(0,L.getLogger)())===null||M===void 0||M.handleObservableChanged(this,{oldValue:x,newValue:A,change:N,didChange:!0,hadValue:!0});for(const O of this.observers)P.updateObserver(O,this),O.handleChange(this,N)}finally{R&&R.finish()}}toString(){return`${this.debugName}: ${this._value}`}_setValue(A){this._value=A}}e.ObservableValue=w;function D(T,A){return typeof T==\"string\"?new I(void 0,T,A):new I(T,void 0,A)}e.disposableObservableValue=D;class I extends w{_setValue(A){this._value!==A&&(this._value&&this._value.dispose(),this._value=A)}dispose(){var A;(A=this._value)===null||A===void 0||A.dispose()}}e.DisposableObservableValue=I}),define(se[269],oe([1,0,90,2,110,146]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutorunObserver=e.autorunWithStore=e.autorunHandleChanges=e.autorunOpts=e.autorun=void 0;function S(a){return new b(void 0,a,void 0,void 0)}e.autorun=S;function p(a,i){return new b(a.debugName,i,void 0,void 0)}e.autorunOpts=p;function _(a,i){return new b(a.debugName,i,a.createEmptyChangeSummary,a.handleChange)}e.autorunHandleChanges=_;function v(a){const i=new k.DisposableStore,n=p({debugName:()=>(0,y.getFunctionName)(a)||\"(anonymous)\"},t=>{i.clear(),a(t,i)});return(0,k.toDisposable)(()=>{n.dispose(),i.dispose()})}e.autorunWithStore=v;class b{get debugName(){if(typeof this._debugName==\"string\")return this._debugName;if(typeof this._debugName==\"function\"){const n=this._debugName();if(n!==void 0)return n}const i=(0,y.getFunctionName)(this._runFn);return i!==void 0?i:\"(anonymous)\"}constructor(i,n,t,r){var u,f;this._debugName=i,this._runFn=n,this.createChangeSummary=t,this._handleChange=r,this.state=2,this.updateCount=0,this.disposed=!1,this.dependencies=new Set,this.dependenciesToBeRemoved=new Set,this.changeSummary=(u=this.createChangeSummary)===null||u===void 0?void 0:u.call(this),(f=(0,E.getLogger)())===null||f===void 0||f.handleAutorunCreated(this),this._runIfNeeded(),(0,k.trackDisposable)(this)}dispose(){this.disposed=!0;for(const i of this.dependencies)i.removeObserver(this);this.dependencies.clear(),(0,k.markAsDisposed)(this)}_runIfNeeded(){var i,n,t;if(this.state===3)return;const r=this.dependenciesToBeRemoved;this.dependenciesToBeRemoved=this.dependencies,this.dependencies=r,this.state=3;const u=this.disposed;try{if(!u){(i=(0,E.getLogger)())===null||i===void 0||i.handleAutorunTriggered(this);const f=this.changeSummary;this.changeSummary=(n=this.createChangeSummary)===null||n===void 0?void 0:n.call(this),this._runFn(this,f)}}finally{u||(t=(0,E.getLogger)())===null||t===void 0||t.handleAutorunFinished(this);for(const f of this.dependenciesToBeRemoved)f.removeObserver(this);this.dependenciesToBeRemoved.clear()}}toString(){return`Autorun<${this.debugName}>`}beginUpdate(){this.state===3&&(this.state=1),this.updateCount++}endUpdate(){if(this.updateCount===1)do{if(this.state===1){this.state=3;for(const i of this.dependencies)if(i.reportChanges(),this.state===2)break}this._runIfNeeded()}while(this.state!==3);this.updateCount--,(0,L.assertFn)(()=>this.updateCount>=0)}handlePossibleChange(i){this.state===3&&this.dependencies.has(i)&&!this.dependenciesToBeRemoved.has(i)&&(this.state=1)}handleChange(i,n){this.dependencies.has(i)&&!this.dependenciesToBeRemoved.has(i)&&(!this._handleChange||this._handleChange({changedObservable:i,change:n,didChange:r=>r===i},this.changeSummary))&&(this.state=2)}readObservable(i){if(this.disposed)return i.get();i.addObserver(this);const n=i.get();return this.dependencies.add(i),this.dependenciesToBeRemoved.delete(i),n}}e.AutorunObserver=b,function(a){a.Observer=b}(S||(e.autorun=S={}))}),define(se[171],oe([1,0,90,2,110,146]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Derived=e.derivedDisposable=e.derivedWithStore=e.derivedHandleChanges=e.derivedOpts=e.derived=void 0;const S=(n,t)=>n===t;function p(n,t){return t!==void 0?new i(n,void 0,t,void 0,void 0,void 0,S):new i(void 0,void 0,n,void 0,void 0,void 0,S)}e.derived=p;function _(n,t){var r;return new i(n.owner,n.debugName,t,void 0,void 0,n.onLastObserverRemoved,(r=n.equalityComparer)!==null&&r!==void 0?r:S)}e.derivedOpts=_;function v(n,t){var r;return new i(n.owner,n.debugName,t,n.createEmptyChangeSummary,n.handleChange,void 0,(r=n.equalityComparer)!==null&&r!==void 0?r:S)}e.derivedHandleChanges=v;function b(n,t){let r,u;t===void 0?(r=n,u=void 0):(u=n,r=t);const f=new k.DisposableStore;return new i(u,()=>{var c;return(c=(0,y.getFunctionName)(r))!==null&&c!==void 0?c:\"(anonymous)\"},c=>(f.clear(),r(c,f)),void 0,void 0,()=>f.dispose(),S)}e.derivedWithStore=b;function a(n,t){let r,u;t===void 0?(r=n,u=void 0):(u=n,r=t);const f=new k.DisposableStore;return new i(u,()=>{var c;return(c=(0,y.getFunctionName)(r))!==null&&c!==void 0?c:\"(anonymous)\"},c=>{f.clear();const d=r(c);return d&&f.add(d),d},void 0,void 0,()=>f.dispose(),S)}e.derivedDisposable=a,(0,y._setDerivedOpts)(_);class i extends y.BaseObservable{get debugName(){var t;return(t=(0,y.getDebugName)(this,this._debugName,this._computeFn,this._owner))!==null&&t!==void 0?t:\"(anonymous)\"}constructor(t,r,u,f,c,d=void 0,s){var l,o;super(),this._owner=t,this._debugName=r,this._computeFn=u,this.createChangeSummary=f,this._handleChange=c,this._handleLastObserverRemoved=d,this._equalityComparator=s,this.state=0,this.value=void 0,this.updateCount=0,this.dependencies=new Set,this.dependenciesToBeRemoved=new Set,this.changeSummary=void 0,this.changeSummary=(l=this.createChangeSummary)===null||l===void 0?void 0:l.call(this),(o=(0,E.getLogger)())===null||o===void 0||o.handleDerivedCreated(this)}onLastObserverRemoved(){var t;this.state=0,this.value=void 0;for(const r of this.dependencies)r.removeObserver(this);this.dependencies.clear(),(t=this._handleLastObserverRemoved)===null||t===void 0||t.call(this)}get(){var t;if(this.observers.size===0){const r=this._computeFn(this,(t=this.createChangeSummary)===null||t===void 0?void 0:t.call(this));return this.onLastObserverRemoved(),r}else{do{if(this.state===1){for(const r of this.dependencies)if(r.reportChanges(),this.state===2)break}this.state===1&&(this.state=3),this._recomputeIfNeeded()}while(this.state!==3);return this.value}}_recomputeIfNeeded(){var t,r;if(this.state===3)return;const u=this.dependenciesToBeRemoved;this.dependenciesToBeRemoved=this.dependencies,this.dependencies=u;const f=this.state!==0,c=this.value;this.state=3;const d=this.changeSummary;this.changeSummary=(t=this.createChangeSummary)===null||t===void 0?void 0:t.call(this);try{this.value=this._computeFn(this,d)}finally{for(const l of this.dependenciesToBeRemoved)l.removeObserver(this);this.dependenciesToBeRemoved.clear()}const s=f&&!this._equalityComparator(c,this.value);if((r=(0,E.getLogger)())===null||r===void 0||r.handleDerivedRecomputed(this,{oldValue:c,newValue:this.value,change:void 0,didChange:s,hadValue:f}),s)for(const l of this.observers)l.handleChange(this,void 0)}toString(){return`LazyDerived<${this.debugName}>`}beginUpdate(t){this.updateCount++;const r=this.updateCount===1;if(this.state===3&&(this.state=1,!r))for(const u of this.observers)u.handlePossibleChange(this);if(r)for(const u of this.observers)u.beginUpdate(this)}endUpdate(t){if(this.updateCount--,this.updateCount===0){const r=[...this.observers];for(const u of r)u.endUpdate(this)}(0,L.assertFn)(()=>this.updateCount>=0)}handlePossibleChange(t){if(this.state===3&&this.dependencies.has(t)&&!this.dependenciesToBeRemoved.has(t)){this.state=1;for(const r of this.observers)r.handlePossibleChange(this)}}handleChange(t,r){if(this.dependencies.has(t)&&!this.dependenciesToBeRemoved.has(t)){const u=this._handleChange?this._handleChange({changedObservable:t,change:r,didChange:c=>c===t},this.changeSummary):!0,f=this.state===3;if(u&&(this.state===1||f)&&(this.state=2,f))for(const c of this.observers)c.handlePossibleChange(this)}}readObservable(t){t.addObserver(this);const r=t.get();return this.dependencies.add(t),this.dependenciesToBeRemoved.delete(t),r}addObserver(t){const r=!this.observers.has(t)&&this.updateCount>0;super.addObserver(t),r&&t.beginUpdate(this)}removeObserver(t){const r=this.observers.has(t)&&this.updateCount>0;super.removeObserver(t),r&&t.endUpdate(this)}}e.Derived=i}),define(se[404],oe([1,0,2,269,110,171,146]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.mapObservableArrayCached=e.derivedObservableWithCache=e.recomputeInitiallyAndOnChange=e.keepObserved=e.observableSignal=e.observableSignalFromEvent=e.FromEventObservable=e.observableFromEvent=e.waitForState=e.constObservable=void 0;function p(o){return new _(o)}e.constObservable=p;class _ extends y.ConvenientObservable{constructor(g){super(),this.value=g}get debugName(){return this.toString()}get(){return this.value}addObserver(g){}removeObserver(g){}toString(){return`Const: ${this.value}`}}function v(o,g){return new Promise(h=>{let m=!1,C=!1;const w=o.map(I=>({isFinished:g(I),state:I})),D=(0,k.autorun)(I=>{const{isFinished:T,state:A}=w.read(I);T&&(m?D.dispose():C=!0,h(A))});m=!0,C&&D.dispose()})}e.waitForState=v;function b(o,g){return new a(o,g)}e.observableFromEvent=b;class a extends y.BaseObservable{constructor(g,h){super(),this.event=g,this._getValue=h,this.hasValue=!1,this.handleEvent=m=>{var C;const w=this._getValue(m),D=this.value,I=!this.hasValue||D!==w;let T=!1;I&&(this.value=w,this.hasValue&&(T=!0,(0,y.subtransaction)(a.globalTransaction,A=>{var P;(P=(0,S.getLogger)())===null||P===void 0||P.handleFromEventObservableTriggered(this,{oldValue:D,newValue:w,change:void 0,didChange:I,hadValue:this.hasValue});for(const N of this.observers)A.updateObserver(N,this),N.handleChange(this,void 0)},()=>{const A=this.getDebugName();return\"Event fired\"+(A?`: ${A}`:\"\")})),this.hasValue=!0),T||(C=(0,S.getLogger)())===null||C===void 0||C.handleFromEventObservableTriggered(this,{oldValue:D,newValue:w,change:void 0,didChange:I,hadValue:this.hasValue})}}getDebugName(){return(0,y.getFunctionName)(this._getValue)}get debugName(){const g=this.getDebugName();return\"From Event\"+(g?`: ${g}`:\"\")}onFirstObserverAdded(){this.subscription=this.event(this.handleEvent)}onLastObserverRemoved(){this.subscription.dispose(),this.subscription=void 0,this.hasValue=!1,this.value=void 0}get(){return this.subscription?(this.hasValue||this.handleEvent(void 0),this.value):this._getValue(void 0)}}e.FromEventObservable=a,function(o){o.Observer=a;function g(h,m){let C=!1;a.globalTransaction===void 0&&(a.globalTransaction=h,C=!0);try{m()}finally{C&&(a.globalTransaction=void 0)}}o.batchEventsGlobally=g}(b||(e.observableFromEvent=b={}));function i(o,g){return new n(o,g)}e.observableSignalFromEvent=i;class n extends y.BaseObservable{constructor(g,h){super(),this.debugName=g,this.event=h,this.handleEvent=()=>{(0,y.transaction)(m=>{for(const C of this.observers)m.updateObserver(C,this),C.handleChange(this,void 0)},()=>this.debugName)}}onFirstObserverAdded(){this.subscription=this.event(this.handleEvent)}onLastObserverRemoved(){this.subscription.dispose(),this.subscription=void 0}get(){}}function t(o){return typeof o==\"string\"?new r(o):new r(void 0,o)}e.observableSignal=t;class r extends y.BaseObservable{get debugName(){var g;return(g=(0,y.getDebugName)(this,this._debugName,void 0,this._owner))!==null&&g!==void 0?g:\"Observable Signal\"}constructor(g,h){super(),this._debugName=g,this._owner=h}trigger(g,h){if(!g){(0,y.transaction)(m=>{this.trigger(m,h)},()=>`Trigger signal ${this.debugName}`);return}for(const m of this.observers)g.updateObserver(m,this),m.handleChange(this,h)}get(){}}function u(o){const g=new c(!1,void 0);return o.addObserver(g),(0,L.toDisposable)(()=>{o.removeObserver(g)})}e.keepObserved=u,(0,y._setKeepObserved)(u);function f(o,g){const h=new c(!0,g);return o.addObserver(h),g?g(o.get()):o.reportChanges(),(0,L.toDisposable)(()=>{o.removeObserver(h)})}e.recomputeInitiallyAndOnChange=f,(0,y._setRecomputeInitiallyAndOnChange)(f);class c{constructor(g,h){this._forceRecompute=g,this._handleValue=h,this._counter=0}beginUpdate(g){this._counter++}endUpdate(g){this._counter--,this._counter===0&&this._forceRecompute&&(this._handleValue?this._handleValue(g.get()):g.reportChanges())}handlePossibleChange(g){}handleChange(g,h){}}function d(o){let g;return(0,E.derived)(m=>(g=o(m,g),g))}e.derivedObservableWithCache=d;function s(o,g,h,m){let C=new l(h,m);return(0,E.derivedOpts)({debugName:()=>(0,y.getDebugName)(C,void 0,h,o),owner:o,onLastObserverRemoved:()=>{C.dispose(),C=new l(h)}},D=>(C.setItems(g.read(D)),C.getItems()))}e.mapObservableArrayCached=s;class l{constructor(g,h){this._map=g,this._keySelector=h,this._cache=new Map,this._items=[]}dispose(){this._cache.forEach(g=>g.store.dispose()),this._cache.clear()}setItems(g){const h=[],m=new Set(this._cache.keys());for(const C of g){const w=this._keySelector?this._keySelector(C):C;let D=this._cache.get(w);if(D)m.delete(w);else{const I=new L.DisposableStore;D={out:this._map(C,I),store:I},this._cache.set(w,D)}h.push(D.out)}for(const C of m)this._cache.get(C).store.dispose(),this._cache.delete(C);this._items=h}getItems(){return this._items}}}),define(se[35],oe([1,0,110,171,269,404,146]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.waitForState=e.observableSignalFromEvent=e.observableSignal=e.observableFromEvent=e.recomputeInitiallyAndOnChange=e.keepObserved=e.derivedObservableWithCache=e.constObservable=e.autorunOpts=e.autorunWithStore=e.autorunHandleChanges=e.autorun=e.derivedWithStore=e.derivedHandleChanges=e.derivedOpts=e.derived=e.subtransaction=e.transaction=e.disposableObservableValue=e.observableValue=void 0,Object.defineProperty(e,\"observableValue\",{enumerable:!0,get:function(){return L.observableValue}}),Object.defineProperty(e,\"disposableObservableValue\",{enumerable:!0,get:function(){return L.disposableObservableValue}}),Object.defineProperty(e,\"transaction\",{enumerable:!0,get:function(){return L.transaction}}),Object.defineProperty(e,\"subtransaction\",{enumerable:!0,get:function(){return L.subtransaction}}),Object.defineProperty(e,\"derived\",{enumerable:!0,get:function(){return k.derived}}),Object.defineProperty(e,\"derivedOpts\",{enumerable:!0,get:function(){return k.derivedOpts}}),Object.defineProperty(e,\"derivedHandleChanges\",{enumerable:!0,get:function(){return k.derivedHandleChanges}}),Object.defineProperty(e,\"derivedWithStore\",{enumerable:!0,get:function(){return k.derivedWithStore}}),Object.defineProperty(e,\"autorun\",{enumerable:!0,get:function(){return y.autorun}}),Object.defineProperty(e,\"autorunHandleChanges\",{enumerable:!0,get:function(){return y.autorunHandleChanges}}),Object.defineProperty(e,\"autorunWithStore\",{enumerable:!0,get:function(){return y.autorunWithStore}}),Object.defineProperty(e,\"autorunOpts\",{enumerable:!0,get:function(){return y.autorunOpts}}),Object.defineProperty(e,\"constObservable\",{enumerable:!0,get:function(){return E.constObservable}}),Object.defineProperty(e,\"derivedObservableWithCache\",{enumerable:!0,get:function(){return E.derivedObservableWithCache}}),Object.defineProperty(e,\"keepObserved\",{enumerable:!0,get:function(){return E.keepObserved}}),Object.defineProperty(e,\"recomputeInitiallyAndOnChange\",{enumerable:!0,get:function(){return E.recomputeInitiallyAndOnChange}}),Object.defineProperty(e,\"observableFromEvent\",{enumerable:!0,get:function(){return E.observableFromEvent}}),Object.defineProperty(e,\"observableSignal\",{enumerable:!0,get:function(){return E.observableSignal}}),Object.defineProperty(e,\"observableSignalFromEvent\",{enumerable:!0,get:function(){return E.observableSignalFromEvent}}),Object.defineProperty(e,\"waitForState\",{enumerable:!0,get:function(){return E.waitForState}}),!1&&(0,S.setLogger)(new S.ConsoleObservableLogger)}),define(se[172],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Range=void 0;var L;(function(k){function y(_,v){if(_.start>=v.end||v.start>=_.end)return{start:0,end:0};const b=Math.max(_.start,v.start),a=Math.min(_.end,v.end);return a-b<=0?{start:0,end:0}:{start:b,end:a}}k.intersect=y;function E(_){return _.end-_.start<=0}k.isEmpty=E;function S(_,v){return!E(y(_,v))}k.intersects=S;function p(_,v){const b=[],a={start:_.start,end:Math.min(v.start,_.end)},i={start:Math.max(v.end,_.start),end:_.end};return E(a)||b.push(a),E(i)||b.push(i),b}k.relativeComplement=p})(L||(e.Range=L={}))}),define(se[405],oe([1,0,172]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RangeMap=e.consolidate=e.shift=e.groupIntersect=void 0;function k(_,v){const b=[];for(const a of v){if(_.start>=a.range.end)continue;if(_.end<a.range.start)break;const i=L.Range.intersect(_,a.range);L.Range.isEmpty(i)||b.push({range:i,size:a.size})}return b}e.groupIntersect=k;function y({start:_,end:v},b){return{start:_+b,end:v+b}}e.shift=y;function E(_){const v=[];let b=null;for(const a of _){const i=a.range.start,n=a.range.end,t=a.size;if(b&&t===b.size){b.range.end=n;continue}b={range:{start:i,end:n},size:t},v.push(b)}return v}e.consolidate=E;function S(..._){return E(_.reduce((v,b)=>v.concat(b),[]))}class p{get paddingTop(){return this._paddingTop}set paddingTop(v){this._size=this._size+v-this._paddingTop,this._paddingTop=v}constructor(v){this.groups=[],this._size=0,this._paddingTop=0,this._paddingTop=v??0,this._size=this._paddingTop}splice(v,b,a=[]){const i=a.length-b,n=k({start:0,end:v},this.groups),t=k({start:v+b,end:Number.POSITIVE_INFINITY},this.groups).map(u=>({range:y(u.range,i),size:u.size})),r=a.map((u,f)=>({range:{start:v+f,end:v+f+1},size:u.size}));this.groups=S(n,r,t),this._size=this._paddingTop+this.groups.reduce((u,f)=>u+f.size*(f.range.end-f.range.start),0)}get count(){const v=this.groups.length;return v?this.groups[v-1].range.end:0}get size(){return this._size}indexAt(v){if(v<0)return-1;if(v<this._paddingTop)return 0;let b=0,a=this._paddingTop;for(const i of this.groups){const n=i.range.end-i.range.start,t=a+n*i.size;if(v<t)return b+Math.floor((v-a)/i.size);b+=n,a=t}return b}indexAfter(v){return Math.min(this.indexAt(v)+1,this.count)}positionAt(v){if(v<0)return-1;let b=0,a=0;for(const i of this.groups){const n=i.range.end-i.range.start,t=a+n;if(v<t)return this._paddingTop+b+(v-a)*i.size;b+=n*i.size,a=t}return-1}}e.RangeMap=p}),define(se[61],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StopWatch=void 0;const L=globalThis.performance&&typeof globalThis.performance.now==\"function\";class k{static create(E){return new k(E)}constructor(E){this._now=L&&E===!1?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}elapsed(){return this._stopTime!==-1?this._stopTime-this._startTime:this._now()-this._startTime}}e.StopWatch=k}),define(se[6],oe([1,0,12,108,2,66,61]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Relay=e.EventBufferer=e.EventMultiplexer=e.MicrotaskEmitter=e.DebounceEmitter=e.PauseableEmitter=e.createEventDeliveryQueue=e.Emitter=e.EventProfiling=e.Event=void 0;const p=!1,_=!1;var v;(function(C){C.None=()=>y.Disposable.None;function w(X){if(_){const{onDidAddListener:U}=X,G=n.create();let z=0;X.onDidAddListener=()=>{++z===2&&(console.warn(\"snapshotted emitter LIKELY used public and SHOULD HAVE BEEN created with DisposableStore. snapshotted here\"),G.print()),U?.()}}}function D(X,U){return B(X,()=>{},0,void 0,!0,void 0,U)}C.defer=D;function I(X){return(U,G=null,z)=>{let H=!1,Y;return Y=X(j=>{if(!H)return Y?Y.dispose():H=!0,U.call(G,j)},null,z),H&&Y.dispose(),Y}}C.once=I;function T(X,U,G){return x((z,H=null,Y)=>X(j=>z.call(H,U(j)),null,Y),G)}C.map=T;function A(X,U,G){return x((z,H=null,Y)=>X(j=>{U(j),z.call(H,j)},null,Y),G)}C.forEach=A;function P(X,U,G){return x((z,H=null,Y)=>X(j=>U(j)&&z.call(H,j),null,Y),G)}C.filter=P;function N(X){return X}C.signal=N;function M(...X){return(U,G=null,z)=>{const H=(0,y.combinedDisposable)(...X.map(Y=>Y(j=>U.call(G,j))));return O(H,z)}}C.any=M;function R(X,U,G,z){let H=G;return T(X,Y=>(H=U(H,Y),H),z)}C.reduce=R;function x(X,U){let G;const z={onWillAddFirstListener(){G=X(H.fire,H)},onDidRemoveLastListener(){G?.dispose()}};U||w(z);const H=new f(z);return U?.add(H),H.event}function O(X,U){return U instanceof Array?U.push(X):U&&U.add(X),X}function B(X,U,G=100,z=!1,H=!1,Y,j){let Z,ee,le,ue=0,ce;const pe={leakWarningThreshold:Y,onWillAddFirstListener(){Z=X(Ce=>{ue++,ee=U(ee,Ce),z&&!le&&(ve.fire(ee),ee=void 0),ce=()=>{const Se=ee;ee=void 0,le=void 0,(!z||ue>1)&&ve.fire(Se),ue=0},typeof G==\"number\"?(clearTimeout(le),le=setTimeout(ce,G)):le===void 0&&(le=0,queueMicrotask(ce))})},onWillRemoveListener(){H&&ue>0&&ce?.()},onDidRemoveLastListener(){ce=void 0,Z.dispose()}};j||w(pe);const ve=new f(pe);return j?.add(ve),ve.event}C.debounce=B;function W(X,U=0,G){return C.debounce(X,(z,H)=>z?(z.push(H),z):[H],U,void 0,!0,void 0,G)}C.accumulate=W;function V(X,U=(z,H)=>z===H,G){let z=!0,H;return P(X,Y=>{const j=z||!U(Y,H);return z=!1,H=Y,j},G)}C.latch=V;function K(X,U,G){return[C.filter(X,U,G),C.filter(X,z=>!U(z),G)]}C.split=K;function F(X,U=!1,G=[],z){let H=G.slice(),Y=X(ee=>{H?H.push(ee):Z.fire(ee)});z&&z.add(Y);const j=()=>{H?.forEach(ee=>Z.fire(ee)),H=null},Z=new f({onWillAddFirstListener(){Y||(Y=X(ee=>Z.fire(ee)),z&&z.add(Y))},onDidAddFirstListener(){H&&(U?setTimeout(j):j())},onDidRemoveLastListener(){Y&&Y.dispose(),Y=null}});return z&&z.add(Z),Z.event}C.buffer=F;function q(X,U){return(z,H,Y)=>{const j=U(new ae);return X(function(Z){const ee=j.evaluate(Z);ee!==ie&&z.call(H,ee)},void 0,Y)}}C.chain=q;const ie=Symbol(\"HaltChainable\");class ae{constructor(){this.steps=[]}map(U){return this.steps.push(U),this}forEach(U){return this.steps.push(G=>(U(G),G)),this}filter(U){return this.steps.push(G=>U(G)?G:ie),this}reduce(U,G){let z=G;return this.steps.push(H=>(z=U(z,H),z)),this}latch(U=(G,z)=>G===z){let G=!0,z;return this.steps.push(H=>{const Y=G||!U(H,z);return G=!1,z=H,Y?H:ie}),this}evaluate(U){for(const G of this.steps)if(U=G(U),U===ie)break;return U}}function ne(X,U,G=z=>z){const z=(...Z)=>j.fire(G(...Z)),H=()=>X.on(U,z),Y=()=>X.removeListener(U,z),j=new f({onWillAddFirstListener:H,onDidRemoveLastListener:Y});return j.event}C.fromNodeEventEmitter=ne;function $(X,U,G=z=>z){const z=(...Z)=>j.fire(G(...Z)),H=()=>X.addEventListener(U,z),Y=()=>X.removeEventListener(U,z),j=new f({onWillAddFirstListener:H,onDidRemoveLastListener:Y});return j.event}C.fromDOMEventEmitter=$;function J(X){return new Promise(U=>I(X)(U))}C.toPromise=J;function Q(X){const U=new f;return X.then(G=>{U.fire(G)},()=>{U.fire(void 0)}).finally(()=>{U.dispose()}),U.event}C.fromPromise=Q;function re(X,U,G){return U(G),X(z=>U(z))}C.runAndSubscribe=re;class de{constructor(U,G){this._observable=U,this._counter=0,this._hasChanged=!1;const z={onWillAddFirstListener:()=>{U.addObserver(this)},onDidRemoveLastListener:()=>{U.removeObserver(this)}};G||w(z),this.emitter=new f(z),G&&G.add(this.emitter)}beginUpdate(U){this._counter++}handlePossibleChange(U){}handleChange(U,G){this._hasChanged=!0}endUpdate(U){this._counter--,this._counter===0&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}function he(X,U){return new de(X,U).emitter.event}C.fromObservable=he;function me(X){return(U,G,z)=>{let H=0,Y=!1;const j={beginUpdate(){H++},endUpdate(){H--,H===0&&(X.reportChanges(),Y&&(Y=!1,U.call(G)))},handlePossibleChange(){},handleChange(){Y=!0}};X.addObserver(j),X.reportChanges();const Z={dispose(){X.removeObserver(j)}};return z instanceof y.DisposableStore?z.add(Z):Array.isArray(z)&&z.push(Z),Z}}C.fromObservableLight=me})(v||(e.Event=v={}));class b{constructor(w){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${w}_${b._idPool++}`,b.all.add(this)}start(w){this._stopWatch=new S.StopWatch,this.listenerCount=w}stop(){if(this._stopWatch){const w=this._stopWatch.elapsed();this.durations.push(w),this.elapsedOverall+=w,this.invocationCount+=1,this._stopWatch=void 0}}}e.EventProfiling=b,b.all=new Set,b._idPool=0;let a=-1;class i{constructor(w,D=Math.random().toString(18).slice(2,5)){this.threshold=w,this.name=D,this._warnCountdown=0}dispose(){var w;(w=this._stacks)===null||w===void 0||w.clear()}check(w,D){const I=this.threshold;if(I<=0||D<I)return;this._stacks||(this._stacks=new Map);const T=this._stacks.get(w.value)||0;if(this._stacks.set(w.value,T+1),this._warnCountdown-=1,this._warnCountdown<=0){this._warnCountdown=I*.5;let A,P=0;for(const[N,M]of this._stacks)(!A||P<M)&&(A=N,P=M);console.warn(`[${this.name}] potential listener LEAK detected, having ${D} listeners already. MOST frequent listener (${P}):`),console.warn(A)}return()=>{const A=this._stacks.get(w.value)||0;this._stacks.set(w.value,A-1)}}}class n{static create(){var w;return new n((w=new Error().stack)!==null&&w!==void 0?w:\"\")}constructor(w){this.value=w}print(){console.warn(this.value.split(`\n`).slice(2).join(`\n`))}}class t{constructor(w){this.value=w}}const r=2,u=(C,w)=>{if(C instanceof t)w(C);else for(let D=0;D<C.length;D++){const I=C[D];I&&w(I)}};class f{constructor(w){var D,I,T,A,P;this._size=0,this._options=w,this._leakageMon=a>0||!((D=this._options)===null||D===void 0)&&D.leakWarningThreshold?new i((T=(I=this._options)===null||I===void 0?void 0:I.leakWarningThreshold)!==null&&T!==void 0?T:a):void 0,this._perfMon=!((A=this._options)===null||A===void 0)&&A._profName?new b(this._options._profName):void 0,this._deliveryQueue=(P=this._options)===null||P===void 0?void 0:P.deliveryQueue}dispose(){var w,D,I,T;if(!this._disposed){if(this._disposed=!0,((w=this._deliveryQueue)===null||w===void 0?void 0:w.current)===this&&this._deliveryQueue.reset(),this._listeners){if(p){const A=this._listeners;queueMicrotask(()=>{u(A,P=>{var N;return(N=P.stack)===null||N===void 0?void 0:N.print()})})}this._listeners=void 0,this._size=0}(I=(D=this._options)===null||D===void 0?void 0:D.onDidRemoveLastListener)===null||I===void 0||I.call(D),(T=this._leakageMon)===null||T===void 0||T.dispose()}}get event(){var w;return(w=this._event)!==null&&w!==void 0||(this._event=(D,I,T)=>{var A,P,N,M,R;if(this._leakageMon&&this._size>this._leakageMon.threshold*3)return console.warn(`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far`),y.Disposable.None;if(this._disposed)return y.Disposable.None;I&&(D=D.bind(I));const x=new t(D);let O,B;this._leakageMon&&this._size>=Math.ceil(this._leakageMon.threshold*.2)&&(x.stack=n.create(),O=this._leakageMon.check(x.stack,this._size+1)),p&&(x.stack=B??n.create()),this._listeners?this._listeners instanceof t?((R=this._deliveryQueue)!==null&&R!==void 0||(this._deliveryQueue=new d),this._listeners=[this._listeners,x]):this._listeners.push(x):((P=(A=this._options)===null||A===void 0?void 0:A.onWillAddFirstListener)===null||P===void 0||P.call(A,this),this._listeners=x,(M=(N=this._options)===null||N===void 0?void 0:N.onDidAddFirstListener)===null||M===void 0||M.call(N,this)),this._size++;const W=(0,y.toDisposable)(()=>{O?.(),this._removeListener(x)});return T instanceof y.DisposableStore?T.add(W):Array.isArray(T)&&T.push(W),W}),this._event}_removeListener(w){var D,I,T,A;if((I=(D=this._options)===null||D===void 0?void 0:D.onWillRemoveListener)===null||I===void 0||I.call(D,this),!this._listeners)return;if(this._size===1){this._listeners=void 0,(A=(T=this._options)===null||T===void 0?void 0:T.onDidRemoveLastListener)===null||A===void 0||A.call(T,this),this._size=0;return}const P=this._listeners,N=P.indexOf(w);if(N===-1)throw console.log(\"disposed?\",this._disposed),console.log(\"size?\",this._size),console.log(\"arr?\",JSON.stringify(this._listeners)),new Error(\"Attempted to dispose unknown listener\");this._size--,P[N]=void 0;const M=this._deliveryQueue.current===this;if(this._size*r<=P.length){let R=0;for(let x=0;x<P.length;x++)P[x]?P[R++]=P[x]:M&&(this._deliveryQueue.end--,R<this._deliveryQueue.i&&this._deliveryQueue.i--);P.length=R}}_deliver(w,D){var I;if(!w)return;const T=((I=this._options)===null||I===void 0?void 0:I.onListenerError)||L.onUnexpectedError;if(!T){w.value(D);return}try{w.value(D)}catch(A){T(A)}}_deliverQueue(w){const D=w.current._listeners;for(;w.i<w.end;)this._deliver(D[w.i++],w.value);w.reset()}fire(w){var D,I,T,A;if(!((D=this._deliveryQueue)===null||D===void 0)&&D.current&&(this._deliverQueue(this._deliveryQueue),(I=this._perfMon)===null||I===void 0||I.stop()),(T=this._perfMon)===null||T===void 0||T.start(this._size),this._listeners)if(this._listeners instanceof t)this._deliver(this._listeners,w);else{const P=this._deliveryQueue;P.enqueue(this,w,this._listeners.length),this._deliverQueue(P)}(A=this._perfMon)===null||A===void 0||A.stop()}hasListeners(){return this._size>0}}e.Emitter=f;const c=()=>new d;e.createEventDeliveryQueue=c;class d{constructor(){this.i=-1,this.end=0}enqueue(w,D,I){this.i=0,this.end=I,this.current=w,this.value=D}reset(){this.i=this.end,this.current=void 0,this.value=void 0}}class s extends f{constructor(w){super(w),this._isPaused=0,this._eventQueue=new E.LinkedList,this._mergeFn=w?.merge}pause(){this._isPaused++}resume(){if(this._isPaused!==0&&--this._isPaused===0)if(this._mergeFn){if(this._eventQueue.size>0){const w=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(w))}}else for(;!this._isPaused&&this._eventQueue.size!==0;)super.fire(this._eventQueue.shift())}fire(w){this._size&&(this._isPaused!==0?this._eventQueue.push(w):super.fire(w))}}e.PauseableEmitter=s;class l extends s{constructor(w){var D;super(w),this._delay=(D=w.delay)!==null&&D!==void 0?D:100}fire(w){this._handle||(this.pause(),this._handle=setTimeout(()=>{this._handle=void 0,this.resume()},this._delay)),super.fire(w)}}e.DebounceEmitter=l;class o extends f{constructor(w){super(w),this._queuedEvents=[],this._mergeFn=w?.merge}fire(w){this.hasListeners()&&(this._queuedEvents.push(w),this._queuedEvents.length===1&&queueMicrotask(()=>{this._mergeFn?super.fire(this._mergeFn(this._queuedEvents)):this._queuedEvents.forEach(D=>super.fire(D)),this._queuedEvents=[]}))}}e.MicrotaskEmitter=o;class g{constructor(){this.hasListeners=!1,this.events=[],this.emitter=new f({onWillAddFirstListener:()=>this.onFirstListenerAdd(),onDidRemoveLastListener:()=>this.onLastListenerRemove()})}get event(){return this.emitter.event}add(w){const D={event:w,listener:null};this.events.push(D),this.hasListeners&&this.hook(D);const I=()=>{this.hasListeners&&this.unhook(D);const T=this.events.indexOf(D);this.events.splice(T,1)};return(0,y.toDisposable)((0,k.createSingleCallFunction)(I))}onFirstListenerAdd(){this.hasListeners=!0,this.events.forEach(w=>this.hook(w))}onLastListenerRemove(){this.hasListeners=!1,this.events.forEach(w=>this.unhook(w))}hook(w){w.listener=w.event(D=>this.emitter.fire(D))}unhook(w){w.listener&&w.listener.dispose(),w.listener=null}dispose(){this.emitter.dispose()}}e.EventMultiplexer=g;class h{constructor(){this.buffers=[]}wrapEvent(w){return(D,I,T)=>w(A=>{const P=this.buffers[this.buffers.length-1];P?P.push(()=>D.call(I,A)):D.call(I,A)},void 0,T)}bufferEvents(w){const D=[];this.buffers.push(D);const I=w();return this.buffers.pop(),D.forEach(T=>T()),I}}e.EventBufferer=h;class m{constructor(){this.listening=!1,this.inputEvent=v.None,this.inputEventListener=y.Disposable.None,this.emitter=new f({onDidAddFirstListener:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onDidRemoveLastListener:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(w){this.inputEvent=w,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=w(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}}e.Relay=m}),define(se[54],oe([1,0,44,6,2]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isStandalone=e.isAndroid=e.isElectron=e.isWebkitWebView=e.isSafari=e.isChrome=e.isWebKit=e.isFirefox=e.getZoomFactor=e.PixelRatio=e.addMatchMediaChangeListener=void 0;class E{constructor(){this.mapWindowIdToZoomFactor=new Map}getZoomFactor(r){var u;return(u=this.mapWindowIdToZoomFactor.get(this.getWindowId(r)))!==null&&u!==void 0?u:1}getWindowId(r){return r.vscodeWindowId}}E.INSTANCE=new E;class S extends y.Disposable{constructor(){super(),this._onDidChange=this._register(new k.Emitter),this.onDidChange=this._onDidChange.event,this._listener=()=>this._handleChange(!0),this._mediaQueryList=null,this._handleChange(!1)}_handleChange(r){var u;(u=this._mediaQueryList)===null||u===void 0||u.removeEventListener(\"change\",this._listener),this._mediaQueryList=L.$window.matchMedia(`(resolution: ${L.$window.devicePixelRatio}dppx)`),this._mediaQueryList.addEventListener(\"change\",this._listener),r&&this._onDidChange.fire()}}class p extends y.Disposable{get value(){return this._value}constructor(){super(),this._onDidChange=this._register(new k.Emitter),this.onDidChange=this._onDidChange.event,this._value=this._getPixelRatio();const r=this._register(new S);this._register(r.onDidChange(()=>{this._value=this._getPixelRatio(),this._onDidChange.fire(this._value)}))}_getPixelRatio(){const r=document.createElement(\"canvas\").getContext(\"2d\"),u=L.$window.devicePixelRatio||1,f=r.webkitBackingStorePixelRatio||r.mozBackingStorePixelRatio||r.msBackingStorePixelRatio||r.oBackingStorePixelRatio||r.backingStorePixelRatio||1;return u/f}}class _{constructor(){this._pixelRatioMonitor=null}_getOrCreatePixelRatioMonitor(){return this._pixelRatioMonitor||(this._pixelRatioMonitor=(0,y.markAsSingleton)(new p)),this._pixelRatioMonitor}get value(){return this._getOrCreatePixelRatioMonitor().value}get onDidChange(){return this._getOrCreatePixelRatioMonitor().onDidChange}}function v(t,r,u){typeof r==\"string\"&&(r=t.matchMedia(r)),r.addEventListener(\"change\",u)}e.addMatchMediaChangeListener=v,e.PixelRatio=new _;function b(t){return E.INSTANCE.getZoomFactor(t)}e.getZoomFactor=b;const a=navigator.userAgent;e.isFirefox=a.indexOf(\"Firefox\")>=0,e.isWebKit=a.indexOf(\"AppleWebKit\")>=0,e.isChrome=a.indexOf(\"Chrome\")>=0,e.isSafari=!e.isChrome&&a.indexOf(\"Safari\")>=0,e.isWebkitWebView=!e.isChrome&&!e.isSafari&&e.isWebKit,e.isElectron=a.indexOf(\"Electron/\")>=0,e.isAndroid=a.indexOf(\"Android\")>=0;let i=!1;if(typeof L.mainWindow.matchMedia==\"function\"){const t=L.mainWindow.matchMedia(\"(display-mode: standalone) or (display-mode: window-controls-overlay)\"),r=L.mainWindow.matchMedia(\"(display-mode: fullscreen)\");i=t.matches,v(L.mainWindow,t,({matches:u})=>{i&&r.matches||(i=u)})}function n(){return i}e.isStandalone=n}),define(se[84],oe([1,0,6]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DomEmitter=void 0;class k{get event(){return this.emitter.event}constructor(E,S,p){const _=v=>this.emitter.fire(v);this.emitter=new L.Emitter({onWillAddFirstListener:()=>E.addEventListener(S,_,p),onDidRemoveLastListener:()=>E.removeEventListener(S,_,p)})}dispose(){this.emitter.dispose()}}e.DomEmitter=k}),define(se[19],oe([1,0,6]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CancellationTokenSource=e.CancellationToken=void 0;const k=Object.freeze(function(p,_){const v=setTimeout(p.bind(_),0);return{dispose(){clearTimeout(v)}}});var y;(function(p){function _(v){return v===p.None||v===p.Cancelled||v instanceof E?!0:!v||typeof v!=\"object\"?!1:typeof v.isCancellationRequested==\"boolean\"&&typeof v.onCancellationRequested==\"function\"}p.isCancellationToken=_,p.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:L.Event.None}),p.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:k})})(y||(e.CancellationToken=y={}));class E{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?k:(this._emitter||(this._emitter=new L.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}}class S{constructor(_){this._token=void 0,this._parentListener=void 0,this._parentListener=_&&_.onCancellationRequested(this.cancel,this)}get token(){return this._token||(this._token=new E),this._token}cancel(){this._token?this._token instanceof E&&this._token.cancel():this._token=y.Cancelled}dispose(_=!1){var v;_&&this.cancel(),(v=this._parentListener)===null||v===void 0||v.dispose(),this._token?this._token instanceof E&&this._token.dispose():this._token=y.None}}e.CancellationTokenSource=S}),define(se[270],oe([1,0,6]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IME=e.IMEImpl=void 0;class k{constructor(){this._onDidChange=new L.Emitter,this.onDidChange=this._onDidChange.event,this._enabled=!0}get enabled(){return this._enabled}enable(){this._enabled=!0,this._onDidChange.fire()}disable(){this._enabled=!1,this._onDidChange.fire()}}e.IMEImpl=k,e.IME=new k}),define(se[147],oe([1,0,6,2]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SmoothScrollingOperation=e.SmoothScrollingUpdate=e.Scrollable=e.ScrollState=void 0;class y{constructor(n,t,r,u,f,c,d){this._forceIntegerValues=n,this._scrollStateBrand=void 0,this._forceIntegerValues&&(t=t|0,r=r|0,u=u|0,f=f|0,c=c|0,d=d|0),this.rawScrollLeft=u,this.rawScrollTop=d,t<0&&(t=0),u+t>r&&(u=r-t),u<0&&(u=0),f<0&&(f=0),d+f>c&&(d=c-f),d<0&&(d=0),this.width=t,this.scrollWidth=r,this.scrollLeft=u,this.height=f,this.scrollHeight=c,this.scrollTop=d}equals(n){return this.rawScrollLeft===n.rawScrollLeft&&this.rawScrollTop===n.rawScrollTop&&this.width===n.width&&this.scrollWidth===n.scrollWidth&&this.scrollLeft===n.scrollLeft&&this.height===n.height&&this.scrollHeight===n.scrollHeight&&this.scrollTop===n.scrollTop}withScrollDimensions(n,t){return new y(this._forceIntegerValues,typeof n.width<\"u\"?n.width:this.width,typeof n.scrollWidth<\"u\"?n.scrollWidth:this.scrollWidth,t?this.rawScrollLeft:this.scrollLeft,typeof n.height<\"u\"?n.height:this.height,typeof n.scrollHeight<\"u\"?n.scrollHeight:this.scrollHeight,t?this.rawScrollTop:this.scrollTop)}withScrollPosition(n){return new y(this._forceIntegerValues,this.width,this.scrollWidth,typeof n.scrollLeft<\"u\"?n.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,typeof n.scrollTop<\"u\"?n.scrollTop:this.rawScrollTop)}createScrollEvent(n,t){const r=this.width!==n.width,u=this.scrollWidth!==n.scrollWidth,f=this.scrollLeft!==n.scrollLeft,c=this.height!==n.height,d=this.scrollHeight!==n.scrollHeight,s=this.scrollTop!==n.scrollTop;return{inSmoothScrolling:t,oldWidth:n.width,oldScrollWidth:n.scrollWidth,oldScrollLeft:n.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:n.height,oldScrollHeight:n.scrollHeight,oldScrollTop:n.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:r,scrollWidthChanged:u,scrollLeftChanged:f,heightChanged:c,scrollHeightChanged:d,scrollTopChanged:s}}}e.ScrollState=y;class E extends k.Disposable{constructor(n){super(),this._scrollableBrand=void 0,this._onScroll=this._register(new L.Emitter),this.onScroll=this._onScroll.event,this._smoothScrollDuration=n.smoothScrollDuration,this._scheduleAtNextAnimationFrame=n.scheduleAtNextAnimationFrame,this._state=new y(n.forceIntegerValues,0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(n){this._smoothScrollDuration=n}validateScrollPosition(n){return this._state.withScrollPosition(n)}getScrollDimensions(){return this._state}setScrollDimensions(n,t){var r;const u=this._state.withScrollDimensions(n,t);this._setState(u,!!this._smoothScrolling),(r=this._smoothScrolling)===null||r===void 0||r.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(n){const t=this._state.withScrollPosition(n);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(n,t){if(this._smoothScrollDuration===0)return this.setScrollPositionNow(n);if(this._smoothScrolling){n={scrollLeft:typeof n.scrollLeft>\"u\"?this._smoothScrolling.to.scrollLeft:n.scrollLeft,scrollTop:typeof n.scrollTop>\"u\"?this._smoothScrolling.to.scrollTop:n.scrollTop};const r=this._state.withScrollPosition(n);if(this._smoothScrolling.to.scrollLeft===r.scrollLeft&&this._smoothScrolling.to.scrollTop===r.scrollTop)return;let u;t?u=new v(this._smoothScrolling.from,r,this._smoothScrolling.startTime,this._smoothScrolling.duration):u=this._smoothScrolling.combine(this._state,r,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=u}else{const r=this._state.withScrollPosition(n);this._smoothScrolling=v.start(this._state,r,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}hasPendingScrollAnimation(){return!!this._smoothScrolling}_performSmoothScrolling(){if(!this._smoothScrolling)return;const n=this._smoothScrolling.tick(),t=this._state.withScrollPosition(n);if(this._setState(t,!0),!!this._smoothScrolling){if(n.isDone){this._smoothScrolling.dispose(),this._smoothScrolling=null;return}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame(()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())})}}_setState(n,t){const r=this._state;r.equals(n)||(this._state=n,this._onScroll.fire(this._state.createScrollEvent(r,t)))}}e.Scrollable=E;class S{constructor(n,t,r){this.scrollLeft=n,this.scrollTop=t,this.isDone=r}}e.SmoothScrollingUpdate=S;function p(i,n){const t=n-i;return function(r){return i+t*a(r)}}function _(i,n,t){return function(r){return r<t?i(r/t):n((r-t)/(1-t))}}class v{constructor(n,t,r,u){this.from=n,this.to=t,this.duration=u,this.startTime=r,this.animationFrameDisposable=null,this._initAnimations()}_initAnimations(){this.scrollLeft=this._initAnimation(this.from.scrollLeft,this.to.scrollLeft,this.to.width),this.scrollTop=this._initAnimation(this.from.scrollTop,this.to.scrollTop,this.to.height)}_initAnimation(n,t,r){if(Math.abs(n-t)>2.5*r){let f,c;return n<t?(f=n+.75*r,c=t-.75*r):(f=n-.75*r,c=t+.75*r),_(p(n,f),p(c,t),.33)}return p(n,t)}dispose(){this.animationFrameDisposable!==null&&(this.animationFrameDisposable.dispose(),this.animationFrameDisposable=null)}acceptScrollDimensions(n){this.to=n.withScrollPosition(this.to),this._initAnimations()}tick(){return this._tick(Date.now())}_tick(n){const t=(n-this.startTime)/this.duration;if(t<1){const r=this.scrollLeft(t),u=this.scrollTop(t);return new S(r,u,!1)}return new S(this.to.scrollLeft,this.to.scrollTop,!0)}combine(n,t,r){return v.start(n,t,r)}static start(n,t,r){r=r+10;const u=Date.now()-10;return new v(n,t,u,r)}}e.SmoothScrollingOperation=v;function b(i){return Math.pow(i,3)}function a(i){return 1-b(1-i)}}),define(se[11],oe([1,0,267,99]),function(te,e,L,k){\"use strict\";var y;Object.defineProperty(e,\"__esModule\",{value:!0}),e.InvisibleCharacters=e.AmbiguousCharacters=e.noBreakWhitespace=e.getLeftDeleteOffset=e.singleLetterHash=e.containsUppercaseCharacter=e.startsWithUTF8BOM=e.UTF8_BOM_CHARACTER=e.isEmojiImprecise=e.isFullWidthCharacter=e.containsUnusualLineTerminators=e.UNUSUAL_LINE_TERMINATORS=e.isBasicASCII=e.containsRTL=e.getCharContainingOffset=e.prevCharLength=e.nextCharLength=e.GraphemeIterator=e.CodePointIterator=e.getNextCodePoint=e.computeCodePoint=e.isLowSurrogate=e.isHighSurrogate=e.commonSuffixLength=e.commonPrefixLength=e.startsWithIgnoreCase=e.equalsIgnoreCase=e.isUpperAsciiLetter=e.isLowerAsciiLetter=e.isAsciiDigit=e.compareSubstringIgnoreCase=e.compareIgnoreCase=e.compareSubstring=e.compare=e.lastNonWhitespaceIndex=e.getLeadingWhitespace=e.firstNonWhitespaceIndex=e.splitLines=e.regExpLeadsToEndlessLoop=e.createRegExp=e.stripWildcards=e.convertSimple2RegExpPattern=e.rtrim=e.ltrim=e.trim=e.escapeRegExpCharacters=e.escape=e.htmlAttributeEncodeValue=e.format=e.isFalsyOrWhitespace=void 0;function E(ee){return!ee||typeof ee!=\"string\"?!0:ee.trim().length===0}e.isFalsyOrWhitespace=E;const S=/{(\\d+)}/g;function p(ee,...le){return le.length===0?ee:ee.replace(S,function(ue,ce){const pe=parseInt(ce,10);return isNaN(pe)||pe<0||pe>=le.length?ue:le[pe]})}e.format=p;function _(ee){return ee.replace(/[<>\"'&]/g,le=>{switch(le){case\"<\":return\"&lt;\";case\">\":return\"&gt;\";case'\"':return\"&quot;\";case\"'\":return\"&apos;\";case\"&\":return\"&amp;\"}return le})}e.htmlAttributeEncodeValue=_;function v(ee){return ee.replace(/[<>&]/g,function(le){switch(le){case\"<\":return\"&lt;\";case\">\":return\"&gt;\";case\"&\":return\"&amp;\";default:return le}})}e.escape=v;function b(ee){return ee.replace(/[\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\[\\]\\(\\)]/g,\"\\\\$&\")}e.escapeRegExpCharacters=b;function a(ee,le=\" \"){const ue=i(ee,le);return n(ue,le)}e.trim=a;function i(ee,le){if(!ee||!le)return ee;const ue=le.length;if(ue===0||ee.length===0)return ee;let ce=0;for(;ee.indexOf(le,ce)===ce;)ce=ce+ue;return ee.substring(ce)}e.ltrim=i;function n(ee,le){if(!ee||!le)return ee;const ue=le.length,ce=ee.length;if(ue===0||ce===0)return ee;let pe=ce,ve=-1;for(;ve=ee.lastIndexOf(le,pe-1),!(ve===-1||ve+ue!==pe);){if(ve===0)return\"\";pe=ve}return ee.substring(0,pe)}e.rtrim=n;function t(ee){return ee.replace(/[\\-\\\\\\{\\}\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g,\"\\\\$&\").replace(/[\\*]/g,\".*\")}e.convertSimple2RegExpPattern=t;function r(ee){return ee.replace(/\\*/g,\"\")}e.stripWildcards=r;function u(ee,le,ue={}){if(!ee)throw new Error(\"Cannot create regex from empty string\");le||(ee=b(ee)),ue.wholeWord&&(/\\B/.test(ee.charAt(0))||(ee=\"\\\\b\"+ee),/\\B/.test(ee.charAt(ee.length-1))||(ee=ee+\"\\\\b\"));let ce=\"\";return ue.global&&(ce+=\"g\"),ue.matchCase||(ce+=\"i\"),ue.multiline&&(ce+=\"m\"),ue.unicode&&(ce+=\"u\"),new RegExp(ee,ce)}e.createRegExp=u;function f(ee){return ee.source===\"^\"||ee.source===\"^$\"||ee.source===\"$\"||ee.source===\"^\\\\s*$\"?!1:!!(ee.exec(\"\")&&ee.lastIndex===0)}e.regExpLeadsToEndlessLoop=f;function c(ee){return ee.split(/\\r\\n|\\r|\\n/)}e.splitLines=c;function d(ee){for(let le=0,ue=ee.length;le<ue;le++){const ce=ee.charCodeAt(le);if(ce!==32&&ce!==9)return le}return-1}e.firstNonWhitespaceIndex=d;function s(ee,le=0,ue=ee.length){for(let ce=le;ce<ue;ce++){const pe=ee.charCodeAt(ce);if(pe!==32&&pe!==9)return ee.substring(le,ce)}return ee.substring(le,ue)}e.getLeadingWhitespace=s;function l(ee,le=ee.length-1){for(let ue=le;ue>=0;ue--){const ce=ee.charCodeAt(ue);if(ce!==32&&ce!==9)return ue}return-1}e.lastNonWhitespaceIndex=l;function o(ee,le){return ee<le?-1:ee>le?1:0}e.compare=o;function g(ee,le,ue=0,ce=ee.length,pe=0,ve=le.length){for(;ue<ce&&pe<ve;ue++,pe++){const _e=ee.charCodeAt(ue),Ee=le.charCodeAt(pe);if(_e<Ee)return-1;if(_e>Ee)return 1}const Ce=ce-ue,Se=ve-pe;return Ce<Se?-1:Ce>Se?1:0}e.compareSubstring=g;function h(ee,le){return m(ee,le,0,ee.length,0,le.length)}e.compareIgnoreCase=h;function m(ee,le,ue=0,ce=ee.length,pe=0,ve=le.length){for(;ue<ce&&pe<ve;ue++,pe++){let _e=ee.charCodeAt(ue),Ee=le.charCodeAt(pe);if(_e===Ee)continue;if(_e>=128||Ee>=128)return g(ee.toLowerCase(),le.toLowerCase(),ue,ce,pe,ve);w(_e)&&(_e-=32),w(Ee)&&(Ee-=32);const Ae=_e-Ee;if(Ae!==0)return Ae}const Ce=ce-ue,Se=ve-pe;return Ce<Se?-1:Ce>Se?1:0}e.compareSubstringIgnoreCase=m;function C(ee){return ee>=48&&ee<=57}e.isAsciiDigit=C;function w(ee){return ee>=97&&ee<=122}e.isLowerAsciiLetter=w;function D(ee){return ee>=65&&ee<=90}e.isUpperAsciiLetter=D;function I(ee,le){return ee.length===le.length&&m(ee,le)===0}e.equalsIgnoreCase=I;function T(ee,le){const ue=le.length;return le.length>ee.length?!1:m(ee,le,0,ue)===0}e.startsWithIgnoreCase=T;function A(ee,le){const ue=Math.min(ee.length,le.length);let ce;for(ce=0;ce<ue;ce++)if(ee.charCodeAt(ce)!==le.charCodeAt(ce))return ce;return ue}e.commonPrefixLength=A;function P(ee,le){const ue=Math.min(ee.length,le.length);let ce;const pe=ee.length-1,ve=le.length-1;for(ce=0;ce<ue;ce++)if(ee.charCodeAt(pe-ce)!==le.charCodeAt(ve-ce))return ce;return ue}e.commonSuffixLength=P;function N(ee){return 55296<=ee&&ee<=56319}e.isHighSurrogate=N;function M(ee){return 56320<=ee&&ee<=57343}e.isLowSurrogate=M;function R(ee,le){return(ee-55296<<10)+(le-56320)+65536}e.computeCodePoint=R;function x(ee,le,ue){const ce=ee.charCodeAt(ue);if(N(ce)&&ue+1<le){const pe=ee.charCodeAt(ue+1);if(M(pe))return R(ce,pe)}return ce}e.getNextCodePoint=x;function O(ee,le){const ue=ee.charCodeAt(le-1);if(M(ue)&&le>1){const ce=ee.charCodeAt(le-2);if(N(ce))return R(ce,ue)}return ue}class B{get offset(){return this._offset}constructor(le,ue=0){this._str=le,this._len=le.length,this._offset=ue}setOffset(le){this._offset=le}prevCodePoint(){const le=O(this._str,this._offset);return this._offset-=le>=65536?2:1,le}nextCodePoint(){const le=x(this._str,this._len,this._offset);return this._offset+=le>=65536?2:1,le}eol(){return this._offset>=this._len}}e.CodePointIterator=B;class W{get offset(){return this._iterator.offset}constructor(le,ue=0){this._iterator=new B(le,ue)}nextGraphemeLength(){const le=U.getInstance(),ue=this._iterator,ce=ue.offset;let pe=le.getGraphemeBreakType(ue.nextCodePoint());for(;!ue.eol();){const ve=ue.offset,Ce=le.getGraphemeBreakType(ue.nextCodePoint());if(X(pe,Ce)){ue.setOffset(ve);break}pe=Ce}return ue.offset-ce}prevGraphemeLength(){const le=U.getInstance(),ue=this._iterator,ce=ue.offset;let pe=le.getGraphemeBreakType(ue.prevCodePoint());for(;ue.offset>0;){const ve=ue.offset,Ce=le.getGraphemeBreakType(ue.prevCodePoint());if(X(Ce,pe)){ue.setOffset(ve);break}pe=Ce}return ce-ue.offset}eol(){return this._iterator.eol()}}e.GraphemeIterator=W;function V(ee,le){return new W(ee,le).nextGraphemeLength()}e.nextCharLength=V;function K(ee,le){return new W(ee,le).prevGraphemeLength()}e.prevCharLength=K;function F(ee,le){le>0&&M(ee.charCodeAt(le))&&le--;const ue=le+V(ee,le);return[ue-K(ee,ue),ue]}e.getCharContainingOffset=F;let q;function ie(){return/(?:[\\u05BE\\u05C0\\u05C3\\u05C6\\u05D0-\\u05F4\\u0608\\u060B\\u060D\\u061B-\\u064A\\u066D-\\u066F\\u0671-\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1-\\u07EA\\u07F4\\u07F5\\u07FA\\u07FE-\\u0815\\u081A\\u0824\\u0828\\u0830-\\u0858\\u085E-\\u088E\\u08A0-\\u08C9\\u200F\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFD3D\\uFD50-\\uFDC7\\uFDF0-\\uFDFC\\uFE70-\\uFEFC]|\\uD802[\\uDC00-\\uDD1B\\uDD20-\\uDE00\\uDE10-\\uDE35\\uDE40-\\uDEE4\\uDEEB-\\uDF35\\uDF40-\\uDFFF]|\\uD803[\\uDC00-\\uDD23\\uDE80-\\uDEA9\\uDEAD-\\uDF45\\uDF51-\\uDF81\\uDF86-\\uDFF6]|\\uD83A[\\uDC00-\\uDCCF\\uDD00-\\uDD43\\uDD4B-\\uDFFF]|\\uD83B[\\uDC00-\\uDEBB])/}function ae(ee){return q||(q=ie()),q.test(ee)}e.containsRTL=ae;const ne=/^[\\t\\n\\r\\x20-\\x7E]*$/;function $(ee){return ne.test(ee)}e.isBasicASCII=$,e.UNUSUAL_LINE_TERMINATORS=/[\\u2028\\u2029]/;function J(ee){return e.UNUSUAL_LINE_TERMINATORS.test(ee)}e.containsUnusualLineTerminators=J;function Q(ee){return ee>=11904&&ee<=55215||ee>=63744&&ee<=64255||ee>=65281&&ee<=65374}e.isFullWidthCharacter=Q;function re(ee){return ee>=127462&&ee<=127487||ee===8986||ee===8987||ee===9200||ee===9203||ee>=9728&&ee<=10175||ee===11088||ee===11093||ee>=127744&&ee<=128591||ee>=128640&&ee<=128764||ee>=128992&&ee<=129008||ee>=129280&&ee<=129535||ee>=129648&&ee<=129782}e.isEmojiImprecise=re,e.UTF8_BOM_CHARACTER=String.fromCharCode(65279);function de(ee){return!!(ee&&ee.length>0&&ee.charCodeAt(0)===65279)}e.startsWithUTF8BOM=de;function he(ee,le=!1){return ee?(le&&(ee=ee.replace(/\\\\./g,\"\")),ee.toLowerCase()!==ee):!1}e.containsUppercaseCharacter=he;function me(ee){return ee=ee%(2*26),ee<26?String.fromCharCode(97+ee):String.fromCharCode(65+ee-26)}e.singleLetterHash=me;function X(ee,le){return ee===0?le!==5&&le!==7:ee===2&&le===3?!1:ee===4||ee===2||ee===3||le===4||le===2||le===3?!0:!(ee===8&&(le===8||le===9||le===11||le===12)||(ee===11||ee===9)&&(le===9||le===10)||(ee===12||ee===10)&&le===10||le===5||le===13||le===7||ee===1||ee===13&&le===14||ee===6&&le===6)}class U{static getInstance(){return U._INSTANCE||(U._INSTANCE=new U),U._INSTANCE}constructor(){this._data=G()}getGraphemeBreakType(le){if(le<32)return le===10?3:le===13?2:4;if(le<127)return 0;const ue=this._data,ce=ue.length/3;let pe=1;for(;pe<=ce;)if(le<ue[3*pe])pe=2*pe;else if(le>ue[3*pe+1])pe=2*pe+1;else return ue[3*pe+2];return 0}}U._INSTANCE=null;function G(){return JSON.parse(\"[0,0,0,51229,51255,12,44061,44087,12,127462,127487,6,7083,7085,5,47645,47671,12,54813,54839,12,128678,128678,14,3270,3270,5,9919,9923,14,45853,45879,12,49437,49463,12,53021,53047,12,71216,71218,7,128398,128399,14,129360,129374,14,2519,2519,5,4448,4519,9,9742,9742,14,12336,12336,14,44957,44983,12,46749,46775,12,48541,48567,12,50333,50359,12,52125,52151,12,53917,53943,12,69888,69890,5,73018,73018,5,127990,127990,14,128558,128559,14,128759,128760,14,129653,129655,14,2027,2035,5,2891,2892,7,3761,3761,5,6683,6683,5,8293,8293,4,9825,9826,14,9999,9999,14,43452,43453,5,44509,44535,12,45405,45431,12,46301,46327,12,47197,47223,12,48093,48119,12,48989,49015,12,49885,49911,12,50781,50807,12,51677,51703,12,52573,52599,12,53469,53495,12,54365,54391,12,65279,65279,4,70471,70472,7,72145,72147,7,119173,119179,5,127799,127818,14,128240,128244,14,128512,128512,14,128652,128652,14,128721,128722,14,129292,129292,14,129445,129450,14,129734,129743,14,1476,1477,5,2366,2368,7,2750,2752,7,3076,3076,5,3415,3415,5,4141,4144,5,6109,6109,5,6964,6964,5,7394,7400,5,9197,9198,14,9770,9770,14,9877,9877,14,9968,9969,14,10084,10084,14,43052,43052,5,43713,43713,5,44285,44311,12,44733,44759,12,45181,45207,12,45629,45655,12,46077,46103,12,46525,46551,12,46973,46999,12,47421,47447,12,47869,47895,12,48317,48343,12,48765,48791,12,49213,49239,12,49661,49687,12,50109,50135,12,50557,50583,12,51005,51031,12,51453,51479,12,51901,51927,12,52349,52375,12,52797,52823,12,53245,53271,12,53693,53719,12,54141,54167,12,54589,54615,12,55037,55063,12,69506,69509,5,70191,70193,5,70841,70841,7,71463,71467,5,72330,72342,5,94031,94031,5,123628,123631,5,127763,127765,14,127941,127941,14,128043,128062,14,128302,128317,14,128465,128467,14,128539,128539,14,128640,128640,14,128662,128662,14,128703,128703,14,128745,128745,14,129004,129007,14,129329,129330,14,129402,129402,14,129483,129483,14,129686,129704,14,130048,131069,14,173,173,4,1757,1757,1,2200,2207,5,2434,2435,7,2631,2632,5,2817,2817,5,3008,3008,5,3201,3201,5,3387,3388,5,3542,3542,5,3902,3903,7,4190,4192,5,6002,6003,5,6439,6440,5,6765,6770,7,7019,7027,5,7154,7155,7,8205,8205,13,8505,8505,14,9654,9654,14,9757,9757,14,9792,9792,14,9852,9853,14,9890,9894,14,9937,9937,14,9981,9981,14,10035,10036,14,11035,11036,14,42654,42655,5,43346,43347,7,43587,43587,5,44006,44007,7,44173,44199,12,44397,44423,12,44621,44647,12,44845,44871,12,45069,45095,12,45293,45319,12,45517,45543,12,45741,45767,12,45965,45991,12,46189,46215,12,46413,46439,12,46637,46663,12,46861,46887,12,47085,47111,12,47309,47335,12,47533,47559,12,47757,47783,12,47981,48007,12,48205,48231,12,48429,48455,12,48653,48679,12,48877,48903,12,49101,49127,12,49325,49351,12,49549,49575,12,49773,49799,12,49997,50023,12,50221,50247,12,50445,50471,12,50669,50695,12,50893,50919,12,51117,51143,12,51341,51367,12,51565,51591,12,51789,51815,12,52013,52039,12,52237,52263,12,52461,52487,12,52685,52711,12,52909,52935,12,53133,53159,12,53357,53383,12,53581,53607,12,53805,53831,12,54029,54055,12,54253,54279,12,54477,54503,12,54701,54727,12,54925,54951,12,55149,55175,12,68101,68102,5,69762,69762,7,70067,70069,7,70371,70378,5,70720,70721,7,71087,71087,5,71341,71341,5,71995,71996,5,72249,72249,7,72850,72871,5,73109,73109,5,118576,118598,5,121505,121519,5,127245,127247,14,127568,127569,14,127777,127777,14,127872,127891,14,127956,127967,14,128015,128016,14,128110,128172,14,128259,128259,14,128367,128368,14,128424,128424,14,128488,128488,14,128530,128532,14,128550,128551,14,128566,128566,14,128647,128647,14,128656,128656,14,128667,128673,14,128691,128693,14,128715,128715,14,128728,128732,14,128752,128752,14,128765,128767,14,129096,129103,14,129311,129311,14,129344,129349,14,129394,129394,14,129413,129425,14,129466,129471,14,129511,129535,14,129664,129666,14,129719,129722,14,129760,129767,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2307,2307,7,2382,2383,7,2497,2500,5,2563,2563,7,2677,2677,5,2763,2764,7,2879,2879,5,2914,2915,5,3021,3021,5,3142,3144,5,3263,3263,5,3285,3286,5,3398,3400,7,3530,3530,5,3633,3633,5,3864,3865,5,3974,3975,5,4155,4156,7,4229,4230,5,5909,5909,7,6078,6085,7,6277,6278,5,6451,6456,7,6744,6750,5,6846,6846,5,6972,6972,5,7074,7077,5,7146,7148,7,7222,7223,5,7416,7417,5,8234,8238,4,8417,8417,5,9000,9000,14,9203,9203,14,9730,9731,14,9748,9749,14,9762,9763,14,9776,9783,14,9800,9811,14,9831,9831,14,9872,9873,14,9882,9882,14,9900,9903,14,9929,9933,14,9941,9960,14,9974,9974,14,9989,9989,14,10006,10006,14,10062,10062,14,10160,10160,14,11647,11647,5,12953,12953,14,43019,43019,5,43232,43249,5,43443,43443,5,43567,43568,7,43696,43696,5,43765,43765,7,44013,44013,5,44117,44143,12,44229,44255,12,44341,44367,12,44453,44479,12,44565,44591,12,44677,44703,12,44789,44815,12,44901,44927,12,45013,45039,12,45125,45151,12,45237,45263,12,45349,45375,12,45461,45487,12,45573,45599,12,45685,45711,12,45797,45823,12,45909,45935,12,46021,46047,12,46133,46159,12,46245,46271,12,46357,46383,12,46469,46495,12,46581,46607,12,46693,46719,12,46805,46831,12,46917,46943,12,47029,47055,12,47141,47167,12,47253,47279,12,47365,47391,12,47477,47503,12,47589,47615,12,47701,47727,12,47813,47839,12,47925,47951,12,48037,48063,12,48149,48175,12,48261,48287,12,48373,48399,12,48485,48511,12,48597,48623,12,48709,48735,12,48821,48847,12,48933,48959,12,49045,49071,12,49157,49183,12,49269,49295,12,49381,49407,12,49493,49519,12,49605,49631,12,49717,49743,12,49829,49855,12,49941,49967,12,50053,50079,12,50165,50191,12,50277,50303,12,50389,50415,12,50501,50527,12,50613,50639,12,50725,50751,12,50837,50863,12,50949,50975,12,51061,51087,12,51173,51199,12,51285,51311,12,51397,51423,12,51509,51535,12,51621,51647,12,51733,51759,12,51845,51871,12,51957,51983,12,52069,52095,12,52181,52207,12,52293,52319,12,52405,52431,12,52517,52543,12,52629,52655,12,52741,52767,12,52853,52879,12,52965,52991,12,53077,53103,12,53189,53215,12,53301,53327,12,53413,53439,12,53525,53551,12,53637,53663,12,53749,53775,12,53861,53887,12,53973,53999,12,54085,54111,12,54197,54223,12,54309,54335,12,54421,54447,12,54533,54559,12,54645,54671,12,54757,54783,12,54869,54895,12,54981,55007,12,55093,55119,12,55243,55291,10,66045,66045,5,68325,68326,5,69688,69702,5,69817,69818,5,69957,69958,7,70089,70092,5,70198,70199,5,70462,70462,5,70502,70508,5,70750,70750,5,70846,70846,7,71100,71101,5,71230,71230,7,71351,71351,5,71737,71738,5,72000,72000,7,72160,72160,5,72273,72278,5,72752,72758,5,72882,72883,5,73031,73031,5,73461,73462,7,94192,94193,7,119149,119149,7,121403,121452,5,122915,122916,5,126980,126980,14,127358,127359,14,127535,127535,14,127759,127759,14,127771,127771,14,127792,127793,14,127825,127867,14,127897,127899,14,127945,127945,14,127985,127986,14,128000,128007,14,128021,128021,14,128066,128100,14,128184,128235,14,128249,128252,14,128266,128276,14,128335,128335,14,128379,128390,14,128407,128419,14,128444,128444,14,128481,128481,14,128499,128499,14,128526,128526,14,128536,128536,14,128543,128543,14,128556,128556,14,128564,128564,14,128577,128580,14,128643,128645,14,128649,128649,14,128654,128654,14,128660,128660,14,128664,128664,14,128675,128675,14,128686,128689,14,128695,128696,14,128705,128709,14,128717,128719,14,128725,128725,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129009,129023,14,129160,129167,14,129296,129304,14,129320,129327,14,129340,129342,14,129356,129356,14,129388,129392,14,129399,129400,14,129404,129407,14,129432,129442,14,129454,129455,14,129473,129474,14,129485,129487,14,129648,129651,14,129659,129660,14,129671,129679,14,129709,129711,14,129728,129730,14,129751,129753,14,129776,129782,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2274,2274,1,2363,2363,7,2377,2380,7,2402,2403,5,2494,2494,5,2507,2508,7,2558,2558,5,2622,2624,7,2641,2641,5,2691,2691,7,2759,2760,5,2786,2787,5,2876,2876,5,2881,2884,5,2901,2902,5,3006,3006,5,3014,3016,7,3072,3072,5,3134,3136,5,3157,3158,5,3260,3260,5,3266,3266,5,3274,3275,7,3328,3329,5,3391,3392,7,3405,3405,5,3457,3457,5,3536,3537,7,3551,3551,5,3636,3642,5,3764,3772,5,3895,3895,5,3967,3967,7,3993,4028,5,4146,4151,5,4182,4183,7,4226,4226,5,4253,4253,5,4957,4959,5,5940,5940,7,6070,6070,7,6087,6088,7,6158,6158,4,6432,6434,5,6448,6449,7,6679,6680,5,6742,6742,5,6754,6754,5,6783,6783,5,6912,6915,5,6966,6970,5,6978,6978,5,7042,7042,7,7080,7081,5,7143,7143,7,7150,7150,7,7212,7219,5,7380,7392,5,7412,7412,5,8203,8203,4,8232,8232,4,8265,8265,14,8400,8412,5,8421,8432,5,8617,8618,14,9167,9167,14,9200,9200,14,9410,9410,14,9723,9726,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9774,14,9786,9786,14,9794,9794,14,9823,9823,14,9828,9828,14,9833,9850,14,9855,9855,14,9875,9875,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9935,9935,14,9939,9939,14,9962,9962,14,9972,9972,14,9978,9978,14,9986,9986,14,9997,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10133,10135,14,10548,10549,14,11093,11093,14,12330,12333,5,12441,12442,5,42608,42610,5,43010,43010,5,43045,43046,5,43188,43203,7,43302,43309,5,43392,43394,5,43446,43449,5,43493,43493,5,43571,43572,7,43597,43597,7,43703,43704,5,43756,43757,5,44003,44004,7,44009,44010,7,44033,44059,12,44089,44115,12,44145,44171,12,44201,44227,12,44257,44283,12,44313,44339,12,44369,44395,12,44425,44451,12,44481,44507,12,44537,44563,12,44593,44619,12,44649,44675,12,44705,44731,12,44761,44787,12,44817,44843,12,44873,44899,12,44929,44955,12,44985,45011,12,45041,45067,12,45097,45123,12,45153,45179,12,45209,45235,12,45265,45291,12,45321,45347,12,45377,45403,12,45433,45459,12,45489,45515,12,45545,45571,12,45601,45627,12,45657,45683,12,45713,45739,12,45769,45795,12,45825,45851,12,45881,45907,12,45937,45963,12,45993,46019,12,46049,46075,12,46105,46131,12,46161,46187,12,46217,46243,12,46273,46299,12,46329,46355,12,46385,46411,12,46441,46467,12,46497,46523,12,46553,46579,12,46609,46635,12,46665,46691,12,46721,46747,12,46777,46803,12,46833,46859,12,46889,46915,12,46945,46971,12,47001,47027,12,47057,47083,12,47113,47139,12,47169,47195,12,47225,47251,12,47281,47307,12,47337,47363,12,47393,47419,12,47449,47475,12,47505,47531,12,47561,47587,12,47617,47643,12,47673,47699,12,47729,47755,12,47785,47811,12,47841,47867,12,47897,47923,12,47953,47979,12,48009,48035,12,48065,48091,12,48121,48147,12,48177,48203,12,48233,48259,12,48289,48315,12,48345,48371,12,48401,48427,12,48457,48483,12,48513,48539,12,48569,48595,12,48625,48651,12,48681,48707,12,48737,48763,12,48793,48819,12,48849,48875,12,48905,48931,12,48961,48987,12,49017,49043,12,49073,49099,12,49129,49155,12,49185,49211,12,49241,49267,12,49297,49323,12,49353,49379,12,49409,49435,12,49465,49491,12,49521,49547,12,49577,49603,12,49633,49659,12,49689,49715,12,49745,49771,12,49801,49827,12,49857,49883,12,49913,49939,12,49969,49995,12,50025,50051,12,50081,50107,12,50137,50163,12,50193,50219,12,50249,50275,12,50305,50331,12,50361,50387,12,50417,50443,12,50473,50499,12,50529,50555,12,50585,50611,12,50641,50667,12,50697,50723,12,50753,50779,12,50809,50835,12,50865,50891,12,50921,50947,12,50977,51003,12,51033,51059,12,51089,51115,12,51145,51171,12,51201,51227,12,51257,51283,12,51313,51339,12,51369,51395,12,51425,51451,12,51481,51507,12,51537,51563,12,51593,51619,12,51649,51675,12,51705,51731,12,51761,51787,12,51817,51843,12,51873,51899,12,51929,51955,12,51985,52011,12,52041,52067,12,52097,52123,12,52153,52179,12,52209,52235,12,52265,52291,12,52321,52347,12,52377,52403,12,52433,52459,12,52489,52515,12,52545,52571,12,52601,52627,12,52657,52683,12,52713,52739,12,52769,52795,12,52825,52851,12,52881,52907,12,52937,52963,12,52993,53019,12,53049,53075,12,53105,53131,12,53161,53187,12,53217,53243,12,53273,53299,12,53329,53355,12,53385,53411,12,53441,53467,12,53497,53523,12,53553,53579,12,53609,53635,12,53665,53691,12,53721,53747,12,53777,53803,12,53833,53859,12,53889,53915,12,53945,53971,12,54001,54027,12,54057,54083,12,54113,54139,12,54169,54195,12,54225,54251,12,54281,54307,12,54337,54363,12,54393,54419,12,54449,54475,12,54505,54531,12,54561,54587,12,54617,54643,12,54673,54699,12,54729,54755,12,54785,54811,12,54841,54867,12,54897,54923,12,54953,54979,12,55009,55035,12,55065,55091,12,55121,55147,12,55177,55203,12,65024,65039,5,65520,65528,4,66422,66426,5,68152,68154,5,69291,69292,5,69633,69633,5,69747,69748,5,69811,69814,5,69826,69826,5,69932,69932,7,70016,70017,5,70079,70080,7,70095,70095,5,70196,70196,5,70367,70367,5,70402,70403,7,70464,70464,5,70487,70487,5,70709,70711,7,70725,70725,7,70833,70834,7,70843,70844,7,70849,70849,7,71090,71093,5,71103,71104,5,71227,71228,7,71339,71339,5,71344,71349,5,71458,71461,5,71727,71735,5,71985,71989,7,71998,71998,5,72002,72002,7,72154,72155,5,72193,72202,5,72251,72254,5,72281,72283,5,72344,72345,5,72766,72766,7,72874,72880,5,72885,72886,5,73023,73029,5,73104,73105,5,73111,73111,5,92912,92916,5,94095,94098,5,113824,113827,4,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,125252,125258,5,127183,127183,14,127340,127343,14,127377,127386,14,127491,127503,14,127548,127551,14,127744,127756,14,127761,127761,14,127769,127769,14,127773,127774,14,127780,127788,14,127796,127797,14,127820,127823,14,127869,127869,14,127894,127895,14,127902,127903,14,127943,127943,14,127947,127950,14,127972,127972,14,127988,127988,14,127992,127994,14,128009,128011,14,128019,128019,14,128023,128041,14,128064,128064,14,128102,128107,14,128174,128181,14,128238,128238,14,128246,128247,14,128254,128254,14,128264,128264,14,128278,128299,14,128329,128330,14,128348,128359,14,128371,128377,14,128392,128393,14,128401,128404,14,128421,128421,14,128433,128434,14,128450,128452,14,128476,128478,14,128483,128483,14,128495,128495,14,128506,128506,14,128519,128520,14,128528,128528,14,128534,128534,14,128538,128538,14,128540,128542,14,128544,128549,14,128552,128555,14,128557,128557,14,128560,128563,14,128565,128565,14,128567,128576,14,128581,128591,14,128641,128642,14,128646,128646,14,128648,128648,14,128650,128651,14,128653,128653,14,128655,128655,14,128657,128659,14,128661,128661,14,128663,128663,14,128665,128666,14,128674,128674,14,128676,128677,14,128679,128685,14,128690,128690,14,128694,128694,14,128697,128702,14,128704,128704,14,128710,128714,14,128716,128716,14,128720,128720,14,128723,128724,14,128726,128727,14,128733,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129008,129008,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129661,129663,14,129667,129670,14,129680,129685,14,129705,129708,14,129712,129718,14,129723,129727,14,129731,129733,14,129744,129750,14,129754,129759,14,129768,129775,14,129783,129791,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2192,2193,1,2250,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3132,3132,5,3137,3140,7,3146,3149,5,3170,3171,5,3202,3203,7,3262,3262,7,3264,3265,7,3267,3268,7,3271,3272,7,3276,3277,5,3298,3299,5,3330,3331,7,3390,3390,5,3393,3396,5,3402,3404,7,3406,3406,1,3426,3427,5,3458,3459,7,3535,3535,5,3538,3540,5,3544,3550,7,3570,3571,7,3635,3635,7,3655,3662,5,3763,3763,7,3784,3789,5,3893,3893,5,3897,3897,5,3953,3966,5,3968,3972,5,3981,3991,5,4038,4038,5,4145,4145,7,4153,4154,5,4157,4158,5,4184,4185,5,4209,4212,5,4228,4228,7,4237,4237,5,4352,4447,8,4520,4607,10,5906,5908,5,5938,5939,5,5970,5971,5,6068,6069,5,6071,6077,5,6086,6086,5,6089,6099,5,6155,6157,5,6159,6159,5,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6862,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7679,5,8204,8204,5,8206,8207,4,8233,8233,4,8252,8252,14,8288,8292,4,8294,8303,4,8413,8416,5,8418,8420,5,8482,8482,14,8596,8601,14,8986,8987,14,9096,9096,14,9193,9196,14,9199,9199,14,9201,9202,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9729,14,9732,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9775,9775,14,9784,9785,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9874,14,9876,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9934,14,9936,9936,14,9938,9938,14,9940,9940,14,9961,9961,14,9963,9967,14,9970,9971,14,9973,9973,14,9975,9977,14,9979,9980,14,9982,9985,14,9987,9988,14,9992,9996,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10083,14,10085,10087,14,10145,10145,14,10175,10175,14,11013,11015,14,11088,11088,14,11503,11505,5,11744,11775,5,12334,12335,5,12349,12349,14,12951,12951,14,42607,42607,5,42612,42621,5,42736,42737,5,43014,43014,5,43043,43044,7,43047,43047,7,43136,43137,7,43204,43205,5,43263,43263,5,43335,43345,5,43360,43388,8,43395,43395,7,43444,43445,7,43450,43451,7,43454,43456,7,43561,43566,5,43569,43570,5,43573,43574,5,43596,43596,5,43644,43644,5,43698,43700,5,43710,43711,5,43755,43755,7,43758,43759,7,43766,43766,5,44005,44005,5,44008,44008,5,44012,44012,7,44032,44032,11,44060,44060,11,44088,44088,11,44116,44116,11,44144,44144,11,44172,44172,11,44200,44200,11,44228,44228,11,44256,44256,11,44284,44284,11,44312,44312,11,44340,44340,11,44368,44368,11,44396,44396,11,44424,44424,11,44452,44452,11,44480,44480,11,44508,44508,11,44536,44536,11,44564,44564,11,44592,44592,11,44620,44620,11,44648,44648,11,44676,44676,11,44704,44704,11,44732,44732,11,44760,44760,11,44788,44788,11,44816,44816,11,44844,44844,11,44872,44872,11,44900,44900,11,44928,44928,11,44956,44956,11,44984,44984,11,45012,45012,11,45040,45040,11,45068,45068,11,45096,45096,11,45124,45124,11,45152,45152,11,45180,45180,11,45208,45208,11,45236,45236,11,45264,45264,11,45292,45292,11,45320,45320,11,45348,45348,11,45376,45376,11,45404,45404,11,45432,45432,11,45460,45460,11,45488,45488,11,45516,45516,11,45544,45544,11,45572,45572,11,45600,45600,11,45628,45628,11,45656,45656,11,45684,45684,11,45712,45712,11,45740,45740,11,45768,45768,11,45796,45796,11,45824,45824,11,45852,45852,11,45880,45880,11,45908,45908,11,45936,45936,11,45964,45964,11,45992,45992,11,46020,46020,11,46048,46048,11,46076,46076,11,46104,46104,11,46132,46132,11,46160,46160,11,46188,46188,11,46216,46216,11,46244,46244,11,46272,46272,11,46300,46300,11,46328,46328,11,46356,46356,11,46384,46384,11,46412,46412,11,46440,46440,11,46468,46468,11,46496,46496,11,46524,46524,11,46552,46552,11,46580,46580,11,46608,46608,11,46636,46636,11,46664,46664,11,46692,46692,11,46720,46720,11,46748,46748,11,46776,46776,11,46804,46804,11,46832,46832,11,46860,46860,11,46888,46888,11,46916,46916,11,46944,46944,11,46972,46972,11,47000,47000,11,47028,47028,11,47056,47056,11,47084,47084,11,47112,47112,11,47140,47140,11,47168,47168,11,47196,47196,11,47224,47224,11,47252,47252,11,47280,47280,11,47308,47308,11,47336,47336,11,47364,47364,11,47392,47392,11,47420,47420,11,47448,47448,11,47476,47476,11,47504,47504,11,47532,47532,11,47560,47560,11,47588,47588,11,47616,47616,11,47644,47644,11,47672,47672,11,47700,47700,11,47728,47728,11,47756,47756,11,47784,47784,11,47812,47812,11,47840,47840,11,47868,47868,11,47896,47896,11,47924,47924,11,47952,47952,11,47980,47980,11,48008,48008,11,48036,48036,11,48064,48064,11,48092,48092,11,48120,48120,11,48148,48148,11,48176,48176,11,48204,48204,11,48232,48232,11,48260,48260,11,48288,48288,11,48316,48316,11,48344,48344,11,48372,48372,11,48400,48400,11,48428,48428,11,48456,48456,11,48484,48484,11,48512,48512,11,48540,48540,11,48568,48568,11,48596,48596,11,48624,48624,11,48652,48652,11,48680,48680,11,48708,48708,11,48736,48736,11,48764,48764,11,48792,48792,11,48820,48820,11,48848,48848,11,48876,48876,11,48904,48904,11,48932,48932,11,48960,48960,11,48988,48988,11,49016,49016,11,49044,49044,11,49072,49072,11,49100,49100,11,49128,49128,11,49156,49156,11,49184,49184,11,49212,49212,11,49240,49240,11,49268,49268,11,49296,49296,11,49324,49324,11,49352,49352,11,49380,49380,11,49408,49408,11,49436,49436,11,49464,49464,11,49492,49492,11,49520,49520,11,49548,49548,11,49576,49576,11,49604,49604,11,49632,49632,11,49660,49660,11,49688,49688,11,49716,49716,11,49744,49744,11,49772,49772,11,49800,49800,11,49828,49828,11,49856,49856,11,49884,49884,11,49912,49912,11,49940,49940,11,49968,49968,11,49996,49996,11,50024,50024,11,50052,50052,11,50080,50080,11,50108,50108,11,50136,50136,11,50164,50164,11,50192,50192,11,50220,50220,11,50248,50248,11,50276,50276,11,50304,50304,11,50332,50332,11,50360,50360,11,50388,50388,11,50416,50416,11,50444,50444,11,50472,50472,11,50500,50500,11,50528,50528,11,50556,50556,11,50584,50584,11,50612,50612,11,50640,50640,11,50668,50668,11,50696,50696,11,50724,50724,11,50752,50752,11,50780,50780,11,50808,50808,11,50836,50836,11,50864,50864,11,50892,50892,11,50920,50920,11,50948,50948,11,50976,50976,11,51004,51004,11,51032,51032,11,51060,51060,11,51088,51088,11,51116,51116,11,51144,51144,11,51172,51172,11,51200,51200,11,51228,51228,11,51256,51256,11,51284,51284,11,51312,51312,11,51340,51340,11,51368,51368,11,51396,51396,11,51424,51424,11,51452,51452,11,51480,51480,11,51508,51508,11,51536,51536,11,51564,51564,11,51592,51592,11,51620,51620,11,51648,51648,11,51676,51676,11,51704,51704,11,51732,51732,11,51760,51760,11,51788,51788,11,51816,51816,11,51844,51844,11,51872,51872,11,51900,51900,11,51928,51928,11,51956,51956,11,51984,51984,11,52012,52012,11,52040,52040,11,52068,52068,11,52096,52096,11,52124,52124,11,52152,52152,11,52180,52180,11,52208,52208,11,52236,52236,11,52264,52264,11,52292,52292,11,52320,52320,11,52348,52348,11,52376,52376,11,52404,52404,11,52432,52432,11,52460,52460,11,52488,52488,11,52516,52516,11,52544,52544,11,52572,52572,11,52600,52600,11,52628,52628,11,52656,52656,11,52684,52684,11,52712,52712,11,52740,52740,11,52768,52768,11,52796,52796,11,52824,52824,11,52852,52852,11,52880,52880,11,52908,52908,11,52936,52936,11,52964,52964,11,52992,52992,11,53020,53020,11,53048,53048,11,53076,53076,11,53104,53104,11,53132,53132,11,53160,53160,11,53188,53188,11,53216,53216,11,53244,53244,11,53272,53272,11,53300,53300,11,53328,53328,11,53356,53356,11,53384,53384,11,53412,53412,11,53440,53440,11,53468,53468,11,53496,53496,11,53524,53524,11,53552,53552,11,53580,53580,11,53608,53608,11,53636,53636,11,53664,53664,11,53692,53692,11,53720,53720,11,53748,53748,11,53776,53776,11,53804,53804,11,53832,53832,11,53860,53860,11,53888,53888,11,53916,53916,11,53944,53944,11,53972,53972,11,54000,54000,11,54028,54028,11,54056,54056,11,54084,54084,11,54112,54112,11,54140,54140,11,54168,54168,11,54196,54196,11,54224,54224,11,54252,54252,11,54280,54280,11,54308,54308,11,54336,54336,11,54364,54364,11,54392,54392,11,54420,54420,11,54448,54448,11,54476,54476,11,54504,54504,11,54532,54532,11,54560,54560,11,54588,54588,11,54616,54616,11,54644,54644,11,54672,54672,11,54700,54700,11,54728,54728,11,54756,54756,11,54784,54784,11,54812,54812,11,54840,54840,11,54868,54868,11,54896,54896,11,54924,54924,11,54952,54952,11,54980,54980,11,55008,55008,11,55036,55036,11,55064,55064,11,55092,55092,11,55120,55120,11,55148,55148,11,55176,55176,11,55216,55238,9,64286,64286,5,65056,65071,5,65438,65439,5,65529,65531,4,66272,66272,5,68097,68099,5,68108,68111,5,68159,68159,5,68900,68903,5,69446,69456,5,69632,69632,7,69634,69634,7,69744,69744,5,69759,69761,5,69808,69810,7,69815,69816,7,69821,69821,1,69837,69837,1,69927,69931,5,69933,69940,5,70003,70003,5,70018,70018,7,70070,70078,5,70082,70083,1,70094,70094,7,70188,70190,7,70194,70195,7,70197,70197,7,70206,70206,5,70368,70370,7,70400,70401,5,70459,70460,5,70463,70463,7,70465,70468,7,70475,70477,7,70498,70499,7,70512,70516,5,70712,70719,5,70722,70724,5,70726,70726,5,70832,70832,5,70835,70840,5,70842,70842,5,70845,70845,5,70847,70848,5,70850,70851,5,71088,71089,7,71096,71099,7,71102,71102,7,71132,71133,5,71219,71226,5,71229,71229,5,71231,71232,5,71340,71340,7,71342,71343,7,71350,71350,7,71453,71455,5,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,118528,118573,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123566,123566,5,125136,125142,5,126976,126979,14,126981,127182,14,127184,127231,14,127279,127279,14,127344,127345,14,127374,127374,14,127405,127461,14,127489,127490,14,127514,127514,14,127538,127546,14,127561,127567,14,127570,127743,14,127757,127758,14,127760,127760,14,127762,127762,14,127766,127768,14,127770,127770,14,127772,127772,14,127775,127776,14,127778,127779,14,127789,127791,14,127794,127795,14,127798,127798,14,127819,127819,14,127824,127824,14,127868,127868,14,127870,127871,14,127892,127893,14,127896,127896,14,127900,127901,14,127904,127940,14,127942,127942,14,127944,127944,14,127946,127946,14,127951,127955,14,127968,127971,14,127973,127984,14,127987,127987,14,127989,127989,14,127991,127991,14,127995,127999,5,128008,128008,14,128012,128014,14,128017,128018,14,128020,128020,14,128022,128022,14,128042,128042,14,128063,128063,14,128065,128065,14,128101,128101,14,128108,128109,14,128173,128173,14,128182,128183,14,128236,128237,14,128239,128239,14,128245,128245,14,128248,128248,14,128253,128253,14,128255,128258,14,128260,128263,14,128265,128265,14,128277,128277,14,128300,128301,14,128326,128328,14,128331,128334,14,128336,128347,14,128360,128366,14,128369,128370,14,128378,128378,14,128391,128391,14,128394,128397,14,128400,128400,14,128405,128406,14,128420,128420,14,128422,128423,14,128425,128432,14,128435,128443,14,128445,128449,14,128453,128464,14,128468,128475,14,128479,128480,14,128482,128482,14,128484,128487,14,128489,128494,14,128496,128498,14,128500,128505,14,128507,128511,14,128513,128518,14,128521,128525,14,128527,128527,14,128529,128529,14,128533,128533,14,128535,128535,14,128537,128537,14]\")}function z(ee,le){if(ee===0)return 0;const ue=H(ee,le);if(ue!==void 0)return ue;const ce=new B(le,ee);return ce.prevCodePoint(),ce.offset}e.getLeftDeleteOffset=z;function H(ee,le){const ue=new B(le,ee);let ce=ue.prevCodePoint();for(;Y(ce)||ce===65039||ce===8419;){if(ue.offset===0)return;ce=ue.prevCodePoint()}if(!re(ce))return;let pe=ue.offset;return pe>0&&ue.prevCodePoint()===8205&&(pe=ue.offset),pe}function Y(ee){return 127995<=ee&&ee<=127999}e.noBreakWhitespace=\"\\xA0\";class j{static getInstance(le){return y.cache.get(Array.from(le))}static getLocales(){return y._locales.value}constructor(le){this.confusableDictionary=le}isAmbiguous(le){return this.confusableDictionary.has(le)}getPrimaryConfusable(le){return this.confusableDictionary.get(le)}getConfusableCodePoints(){return new Set(this.confusableDictionary.keys())}}e.AmbiguousCharacters=j,y=j,j.ambiguousCharacterData=new k.Lazy(()=>JSON.parse('{\"_common\":[8232,32,8233,32,5760,32,8192,32,8193,32,8194,32,8195,32,8196,32,8197,32,8198,32,8200,32,8201,32,8202,32,8287,32,8199,32,8239,32,2042,95,65101,95,65102,95,65103,95,8208,45,8209,45,8210,45,65112,45,1748,45,8259,45,727,45,8722,45,10134,45,11450,45,1549,44,1643,44,8218,44,184,44,42233,44,894,59,2307,58,2691,58,1417,58,1795,58,1796,58,5868,58,65072,58,6147,58,6153,58,8282,58,1475,58,760,58,42889,58,8758,58,720,58,42237,58,451,33,11601,33,660,63,577,63,2429,63,5038,63,42731,63,119149,46,8228,46,1793,46,1794,46,42510,46,68176,46,1632,46,1776,46,42232,46,1373,96,65287,96,8219,96,8242,96,1370,96,1523,96,8175,96,65344,96,900,96,8189,96,8125,96,8127,96,8190,96,697,96,884,96,712,96,714,96,715,96,756,96,699,96,701,96,700,96,702,96,42892,96,1497,96,2036,96,2037,96,5194,96,5836,96,94033,96,94034,96,65339,91,10088,40,10098,40,12308,40,64830,40,65341,93,10089,41,10099,41,12309,41,64831,41,10100,123,119060,123,10101,125,65342,94,8270,42,1645,42,8727,42,66335,42,5941,47,8257,47,8725,47,8260,47,9585,47,10187,47,10744,47,119354,47,12755,47,12339,47,11462,47,20031,47,12035,47,65340,92,65128,92,8726,92,10189,92,10741,92,10745,92,119311,92,119355,92,12756,92,20022,92,12034,92,42872,38,708,94,710,94,5869,43,10133,43,66203,43,8249,60,10094,60,706,60,119350,60,5176,60,5810,60,5120,61,11840,61,12448,61,42239,61,8250,62,10095,62,707,62,119351,62,5171,62,94015,62,8275,126,732,126,8128,126,8764,126,65372,124,65293,45,120784,50,120794,50,120804,50,120814,50,120824,50,130034,50,42842,50,423,50,1000,50,42564,50,5311,50,42735,50,119302,51,120785,51,120795,51,120805,51,120815,51,120825,51,130035,51,42923,51,540,51,439,51,42858,51,11468,51,1248,51,94011,51,71882,51,120786,52,120796,52,120806,52,120816,52,120826,52,130036,52,5070,52,71855,52,120787,53,120797,53,120807,53,120817,53,120827,53,130037,53,444,53,71867,53,120788,54,120798,54,120808,54,120818,54,120828,54,130038,54,11474,54,5102,54,71893,54,119314,55,120789,55,120799,55,120809,55,120819,55,120829,55,130039,55,66770,55,71878,55,2819,56,2538,56,2666,56,125131,56,120790,56,120800,56,120810,56,120820,56,120830,56,130040,56,547,56,546,56,66330,56,2663,57,2920,57,2541,57,3437,57,120791,57,120801,57,120811,57,120821,57,120831,57,130041,57,42862,57,11466,57,71884,57,71852,57,71894,57,9082,97,65345,97,119834,97,119886,97,119938,97,119990,97,120042,97,120094,97,120146,97,120198,97,120250,97,120302,97,120354,97,120406,97,120458,97,593,97,945,97,120514,97,120572,97,120630,97,120688,97,120746,97,65313,65,119808,65,119860,65,119912,65,119964,65,120016,65,120068,65,120120,65,120172,65,120224,65,120276,65,120328,65,120380,65,120432,65,913,65,120488,65,120546,65,120604,65,120662,65,120720,65,5034,65,5573,65,42222,65,94016,65,66208,65,119835,98,119887,98,119939,98,119991,98,120043,98,120095,98,120147,98,120199,98,120251,98,120303,98,120355,98,120407,98,120459,98,388,98,5071,98,5234,98,5551,98,65314,66,8492,66,119809,66,119861,66,119913,66,120017,66,120069,66,120121,66,120173,66,120225,66,120277,66,120329,66,120381,66,120433,66,42932,66,914,66,120489,66,120547,66,120605,66,120663,66,120721,66,5108,66,5623,66,42192,66,66178,66,66209,66,66305,66,65347,99,8573,99,119836,99,119888,99,119940,99,119992,99,120044,99,120096,99,120148,99,120200,99,120252,99,120304,99,120356,99,120408,99,120460,99,7428,99,1010,99,11429,99,43951,99,66621,99,128844,67,71922,67,71913,67,65315,67,8557,67,8450,67,8493,67,119810,67,119862,67,119914,67,119966,67,120018,67,120174,67,120226,67,120278,67,120330,67,120382,67,120434,67,1017,67,11428,67,5087,67,42202,67,66210,67,66306,67,66581,67,66844,67,8574,100,8518,100,119837,100,119889,100,119941,100,119993,100,120045,100,120097,100,120149,100,120201,100,120253,100,120305,100,120357,100,120409,100,120461,100,1281,100,5095,100,5231,100,42194,100,8558,68,8517,68,119811,68,119863,68,119915,68,119967,68,120019,68,120071,68,120123,68,120175,68,120227,68,120279,68,120331,68,120383,68,120435,68,5024,68,5598,68,5610,68,42195,68,8494,101,65349,101,8495,101,8519,101,119838,101,119890,101,119942,101,120046,101,120098,101,120150,101,120202,101,120254,101,120306,101,120358,101,120410,101,120462,101,43826,101,1213,101,8959,69,65317,69,8496,69,119812,69,119864,69,119916,69,120020,69,120072,69,120124,69,120176,69,120228,69,120280,69,120332,69,120384,69,120436,69,917,69,120492,69,120550,69,120608,69,120666,69,120724,69,11577,69,5036,69,42224,69,71846,69,71854,69,66182,69,119839,102,119891,102,119943,102,119995,102,120047,102,120099,102,120151,102,120203,102,120255,102,120307,102,120359,102,120411,102,120463,102,43829,102,42905,102,383,102,7837,102,1412,102,119315,70,8497,70,119813,70,119865,70,119917,70,120021,70,120073,70,120125,70,120177,70,120229,70,120281,70,120333,70,120385,70,120437,70,42904,70,988,70,120778,70,5556,70,42205,70,71874,70,71842,70,66183,70,66213,70,66853,70,65351,103,8458,103,119840,103,119892,103,119944,103,120048,103,120100,103,120152,103,120204,103,120256,103,120308,103,120360,103,120412,103,120464,103,609,103,7555,103,397,103,1409,103,119814,71,119866,71,119918,71,119970,71,120022,71,120074,71,120126,71,120178,71,120230,71,120282,71,120334,71,120386,71,120438,71,1292,71,5056,71,5107,71,42198,71,65352,104,8462,104,119841,104,119945,104,119997,104,120049,104,120101,104,120153,104,120205,104,120257,104,120309,104,120361,104,120413,104,120465,104,1211,104,1392,104,5058,104,65320,72,8459,72,8460,72,8461,72,119815,72,119867,72,119919,72,120023,72,120179,72,120231,72,120283,72,120335,72,120387,72,120439,72,919,72,120494,72,120552,72,120610,72,120668,72,120726,72,11406,72,5051,72,5500,72,42215,72,66255,72,731,105,9075,105,65353,105,8560,105,8505,105,8520,105,119842,105,119894,105,119946,105,119998,105,120050,105,120102,105,120154,105,120206,105,120258,105,120310,105,120362,105,120414,105,120466,105,120484,105,618,105,617,105,953,105,8126,105,890,105,120522,105,120580,105,120638,105,120696,105,120754,105,1110,105,42567,105,1231,105,43893,105,5029,105,71875,105,65354,106,8521,106,119843,106,119895,106,119947,106,119999,106,120051,106,120103,106,120155,106,120207,106,120259,106,120311,106,120363,106,120415,106,120467,106,1011,106,1112,106,65322,74,119817,74,119869,74,119921,74,119973,74,120025,74,120077,74,120129,74,120181,74,120233,74,120285,74,120337,74,120389,74,120441,74,42930,74,895,74,1032,74,5035,74,5261,74,42201,74,119844,107,119896,107,119948,107,120000,107,120052,107,120104,107,120156,107,120208,107,120260,107,120312,107,120364,107,120416,107,120468,107,8490,75,65323,75,119818,75,119870,75,119922,75,119974,75,120026,75,120078,75,120130,75,120182,75,120234,75,120286,75,120338,75,120390,75,120442,75,922,75,120497,75,120555,75,120613,75,120671,75,120729,75,11412,75,5094,75,5845,75,42199,75,66840,75,1472,108,8739,73,9213,73,65512,73,1633,108,1777,73,66336,108,125127,108,120783,73,120793,73,120803,73,120813,73,120823,73,130033,73,65321,73,8544,73,8464,73,8465,73,119816,73,119868,73,119920,73,120024,73,120128,73,120180,73,120232,73,120284,73,120336,73,120388,73,120440,73,65356,108,8572,73,8467,108,119845,108,119897,108,119949,108,120001,108,120053,108,120105,73,120157,73,120209,73,120261,73,120313,73,120365,73,120417,73,120469,73,448,73,120496,73,120554,73,120612,73,120670,73,120728,73,11410,73,1030,73,1216,73,1493,108,1503,108,1575,108,126464,108,126592,108,65166,108,65165,108,1994,108,11599,73,5825,73,42226,73,93992,73,66186,124,66313,124,119338,76,8556,76,8466,76,119819,76,119871,76,119923,76,120027,76,120079,76,120131,76,120183,76,120235,76,120287,76,120339,76,120391,76,120443,76,11472,76,5086,76,5290,76,42209,76,93974,76,71843,76,71858,76,66587,76,66854,76,65325,77,8559,77,8499,77,119820,77,119872,77,119924,77,120028,77,120080,77,120132,77,120184,77,120236,77,120288,77,120340,77,120392,77,120444,77,924,77,120499,77,120557,77,120615,77,120673,77,120731,77,1018,77,11416,77,5047,77,5616,77,5846,77,42207,77,66224,77,66321,77,119847,110,119899,110,119951,110,120003,110,120055,110,120107,110,120159,110,120211,110,120263,110,120315,110,120367,110,120419,110,120471,110,1400,110,1404,110,65326,78,8469,78,119821,78,119873,78,119925,78,119977,78,120029,78,120081,78,120185,78,120237,78,120289,78,120341,78,120393,78,120445,78,925,78,120500,78,120558,78,120616,78,120674,78,120732,78,11418,78,42208,78,66835,78,3074,111,3202,111,3330,111,3458,111,2406,111,2662,111,2790,111,3046,111,3174,111,3302,111,3430,111,3664,111,3792,111,4160,111,1637,111,1781,111,65359,111,8500,111,119848,111,119900,111,119952,111,120056,111,120108,111,120160,111,120212,111,120264,111,120316,111,120368,111,120420,111,120472,111,7439,111,7441,111,43837,111,959,111,120528,111,120586,111,120644,111,120702,111,120760,111,963,111,120532,111,120590,111,120648,111,120706,111,120764,111,11423,111,4351,111,1413,111,1505,111,1607,111,126500,111,126564,111,126596,111,65259,111,65260,111,65258,111,65257,111,1726,111,64428,111,64429,111,64427,111,64426,111,1729,111,64424,111,64425,111,64423,111,64422,111,1749,111,3360,111,4125,111,66794,111,71880,111,71895,111,66604,111,1984,79,2534,79,2918,79,12295,79,70864,79,71904,79,120782,79,120792,79,120802,79,120812,79,120822,79,130032,79,65327,79,119822,79,119874,79,119926,79,119978,79,120030,79,120082,79,120134,79,120186,79,120238,79,120290,79,120342,79,120394,79,120446,79,927,79,120502,79,120560,79,120618,79,120676,79,120734,79,11422,79,1365,79,11604,79,4816,79,2848,79,66754,79,42227,79,71861,79,66194,79,66219,79,66564,79,66838,79,9076,112,65360,112,119849,112,119901,112,119953,112,120005,112,120057,112,120109,112,120161,112,120213,112,120265,112,120317,112,120369,112,120421,112,120473,112,961,112,120530,112,120544,112,120588,112,120602,112,120646,112,120660,112,120704,112,120718,112,120762,112,120776,112,11427,112,65328,80,8473,80,119823,80,119875,80,119927,80,119979,80,120031,80,120083,80,120187,80,120239,80,120291,80,120343,80,120395,80,120447,80,929,80,120504,80,120562,80,120620,80,120678,80,120736,80,11426,80,5090,80,5229,80,42193,80,66197,80,119850,113,119902,113,119954,113,120006,113,120058,113,120110,113,120162,113,120214,113,120266,113,120318,113,120370,113,120422,113,120474,113,1307,113,1379,113,1382,113,8474,81,119824,81,119876,81,119928,81,119980,81,120032,81,120084,81,120188,81,120240,81,120292,81,120344,81,120396,81,120448,81,11605,81,119851,114,119903,114,119955,114,120007,114,120059,114,120111,114,120163,114,120215,114,120267,114,120319,114,120371,114,120423,114,120475,114,43847,114,43848,114,7462,114,11397,114,43905,114,119318,82,8475,82,8476,82,8477,82,119825,82,119877,82,119929,82,120033,82,120189,82,120241,82,120293,82,120345,82,120397,82,120449,82,422,82,5025,82,5074,82,66740,82,5511,82,42211,82,94005,82,65363,115,119852,115,119904,115,119956,115,120008,115,120060,115,120112,115,120164,115,120216,115,120268,115,120320,115,120372,115,120424,115,120476,115,42801,115,445,115,1109,115,43946,115,71873,115,66632,115,65331,83,119826,83,119878,83,119930,83,119982,83,120034,83,120086,83,120138,83,120190,83,120242,83,120294,83,120346,83,120398,83,120450,83,1029,83,1359,83,5077,83,5082,83,42210,83,94010,83,66198,83,66592,83,119853,116,119905,116,119957,116,120009,116,120061,116,120113,116,120165,116,120217,116,120269,116,120321,116,120373,116,120425,116,120477,116,8868,84,10201,84,128872,84,65332,84,119827,84,119879,84,119931,84,119983,84,120035,84,120087,84,120139,84,120191,84,120243,84,120295,84,120347,84,120399,84,120451,84,932,84,120507,84,120565,84,120623,84,120681,84,120739,84,11430,84,5026,84,42196,84,93962,84,71868,84,66199,84,66225,84,66325,84,119854,117,119906,117,119958,117,120010,117,120062,117,120114,117,120166,117,120218,117,120270,117,120322,117,120374,117,120426,117,120478,117,42911,117,7452,117,43854,117,43858,117,651,117,965,117,120534,117,120592,117,120650,117,120708,117,120766,117,1405,117,66806,117,71896,117,8746,85,8899,85,119828,85,119880,85,119932,85,119984,85,120036,85,120088,85,120140,85,120192,85,120244,85,120296,85,120348,85,120400,85,120452,85,1357,85,4608,85,66766,85,5196,85,42228,85,94018,85,71864,85,8744,118,8897,118,65366,118,8564,118,119855,118,119907,118,119959,118,120011,118,120063,118,120115,118,120167,118,120219,118,120271,118,120323,118,120375,118,120427,118,120479,118,7456,118,957,118,120526,118,120584,118,120642,118,120700,118,120758,118,1141,118,1496,118,71430,118,43945,118,71872,118,119309,86,1639,86,1783,86,8548,86,119829,86,119881,86,119933,86,119985,86,120037,86,120089,86,120141,86,120193,86,120245,86,120297,86,120349,86,120401,86,120453,86,1140,86,11576,86,5081,86,5167,86,42719,86,42214,86,93960,86,71840,86,66845,86,623,119,119856,119,119908,119,119960,119,120012,119,120064,119,120116,119,120168,119,120220,119,120272,119,120324,119,120376,119,120428,119,120480,119,7457,119,1121,119,1309,119,1377,119,71434,119,71438,119,71439,119,43907,119,71919,87,71910,87,119830,87,119882,87,119934,87,119986,87,120038,87,120090,87,120142,87,120194,87,120246,87,120298,87,120350,87,120402,87,120454,87,1308,87,5043,87,5076,87,42218,87,5742,120,10539,120,10540,120,10799,120,65368,120,8569,120,119857,120,119909,120,119961,120,120013,120,120065,120,120117,120,120169,120,120221,120,120273,120,120325,120,120377,120,120429,120,120481,120,5441,120,5501,120,5741,88,9587,88,66338,88,71916,88,65336,88,8553,88,119831,88,119883,88,119935,88,119987,88,120039,88,120091,88,120143,88,120195,88,120247,88,120299,88,120351,88,120403,88,120455,88,42931,88,935,88,120510,88,120568,88,120626,88,120684,88,120742,88,11436,88,11613,88,5815,88,42219,88,66192,88,66228,88,66327,88,66855,88,611,121,7564,121,65369,121,119858,121,119910,121,119962,121,120014,121,120066,121,120118,121,120170,121,120222,121,120274,121,120326,121,120378,121,120430,121,120482,121,655,121,7935,121,43866,121,947,121,8509,121,120516,121,120574,121,120632,121,120690,121,120748,121,1199,121,4327,121,71900,121,65337,89,119832,89,119884,89,119936,89,119988,89,120040,89,120092,89,120144,89,120196,89,120248,89,120300,89,120352,89,120404,89,120456,89,933,89,978,89,120508,89,120566,89,120624,89,120682,89,120740,89,11432,89,1198,89,5033,89,5053,89,42220,89,94019,89,71844,89,66226,89,119859,122,119911,122,119963,122,120015,122,120067,122,120119,122,120171,122,120223,122,120275,122,120327,122,120379,122,120431,122,120483,122,7458,122,43923,122,71876,122,66293,90,71909,90,65338,90,8484,90,8488,90,119833,90,119885,90,119937,90,119989,90,120041,90,120197,90,120249,90,120301,90,120353,90,120405,90,120457,90,918,90,120493,90,120551,90,120609,90,120667,90,120725,90,5059,90,42204,90,71849,90,65282,34,65284,36,65285,37,65286,38,65290,42,65291,43,65294,46,65295,47,65296,48,65297,49,65298,50,65299,51,65300,52,65301,53,65302,54,65303,55,65304,56,65305,57,65308,60,65309,61,65310,62,65312,64,65316,68,65318,70,65319,71,65324,76,65329,81,65330,82,65333,85,65334,86,65335,87,65343,95,65346,98,65348,100,65350,102,65355,107,65357,109,65358,110,65361,113,65362,114,65364,116,65365,117,65367,119,65370,122,65371,123,65373,125,119846,109],\"_default\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"cs\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"de\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"es\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"fr\":[65374,126,65306,58,65281,33,8216,96,8245,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"it\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"ja\":[8211,45,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65292,44,65307,59],\"ko\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"pl\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"pt-BR\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"qps-ploc\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"ru\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,305,105,921,73,1009,112,215,120,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"tr\":[160,32,8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\"zh-hans\":[65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41],\"zh-hant\":[8211,45,65374,126,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65307,59]}')),j.cache=new L.LRUCachedFunction(ee=>{function le(Ee){const Ae=new Map;for(let xe=0;xe<Ee.length;xe+=2)Ae.set(Ee[xe],Ee[xe+1]);return Ae}function ue(Ee,Ae){const xe=new Map(Ee);for(const[Be,De]of Ae)xe.set(Be,De);return xe}function ce(Ee,Ae){if(!Ee)return Ae;const xe=new Map;for(const[Be,De]of Ee)Ae.has(Be)&&xe.set(Be,De);return xe}const pe=y.ambiguousCharacterData.value;let ve=ee.filter(Ee=>!Ee.startsWith(\"_\")&&Ee in pe);ve.length===0&&(ve=[\"_default\"]);let Ce;for(const Ee of ve){const Ae=le(pe[Ee]);Ce=ce(Ce,Ae)}const Se=le(pe._common),_e=ue(Se,Ce);return new y(_e)}),j._locales=new k.Lazy(()=>Object.keys(y.ambiguousCharacterData.value).filter(ee=>!ee.startsWith(\"_\")));class Z{static getRawData(){return JSON.parse(\"[9,10,11,12,13,32,127,160,173,847,1564,4447,4448,6068,6069,6155,6156,6157,6158,7355,7356,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8234,8235,8236,8237,8238,8239,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,10240,12288,12644,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65279,65440,65520,65521,65522,65523,65524,65525,65526,65527,65528,65532,78844,119155,119156,119157,119158,119159,119160,119161,119162,917504,917505,917506,917507,917508,917509,917510,917511,917512,917513,917514,917515,917516,917517,917518,917519,917520,917521,917522,917523,917524,917525,917526,917527,917528,917529,917530,917531,917532,917533,917534,917535,917536,917537,917538,917539,917540,917541,917542,917543,917544,917545,917546,917547,917548,917549,917550,917551,917552,917553,917554,917555,917556,917557,917558,917559,917560,917561,917562,917563,917564,917565,917566,917567,917568,917569,917570,917571,917572,917573,917574,917575,917576,917577,917578,917579,917580,917581,917582,917583,917584,917585,917586,917587,917588,917589,917590,917591,917592,917593,917594,917595,917596,917597,917598,917599,917600,917601,917602,917603,917604,917605,917606,917607,917608,917609,917610,917611,917612,917613,917614,917615,917616,917617,917618,917619,917620,917621,917622,917623,917624,917625,917626,917627,917628,917629,917630,917631,917760,917761,917762,917763,917764,917765,917766,917767,917768,917769,917770,917771,917772,917773,917774,917775,917776,917777,917778,917779,917780,917781,917782,917783,917784,917785,917786,917787,917788,917789,917790,917791,917792,917793,917794,917795,917796,917797,917798,917799,917800,917801,917802,917803,917804,917805,917806,917807,917808,917809,917810,917811,917812,917813,917814,917815,917816,917817,917818,917819,917820,917821,917822,917823,917824,917825,917826,917827,917828,917829,917830,917831,917832,917833,917834,917835,917836,917837,917838,917839,917840,917841,917842,917843,917844,917845,917846,917847,917848,917849,917850,917851,917852,917853,917854,917855,917856,917857,917858,917859,917860,917861,917862,917863,917864,917865,917866,917867,917868,917869,917870,917871,917872,917873,917874,917875,917876,917877,917878,917879,917880,917881,917882,917883,917884,917885,917886,917887,917888,917889,917890,917891,917892,917893,917894,917895,917896,917897,917898,917899,917900,917901,917902,917903,917904,917905,917906,917907,917908,917909,917910,917911,917912,917913,917914,917915,917916,917917,917918,917919,917920,917921,917922,917923,917924,917925,917926,917927,917928,917929,917930,917931,917932,917933,917934,917935,917936,917937,917938,917939,917940,917941,917942,917943,917944,917945,917946,917947,917948,917949,917950,917951,917952,917953,917954,917955,917956,917957,917958,917959,917960,917961,917962,917963,917964,917965,917966,917967,917968,917969,917970,917971,917972,917973,917974,917975,917976,917977,917978,917979,917980,917981,917982,917983,917984,917985,917986,917987,917988,917989,917990,917991,917992,917993,917994,917995,917996,917997,917998,917999]\")}static getData(){return this._data||(this._data=new Set(Z.getRawData())),this._data}static isInvisibleCharacter(le){return Z.getData().has(le)}static get codePoints(){return Z.getData()}}e.InvisibleCharacters=Z,Z._data=void 0}),define(se[71],oe([1,0,53,401,11]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.fuzzyScoreGracefulAggressive=e.fuzzyScore=e.FuzzyScoreOptions=e.FuzzyScore=e.isPatternInWord=e.createMatches=e.anyScore=e.matchesFuzzy2=e.matchesFuzzy=e.matchesWords=e.matchesCamelCase=e.isUpper=e.matchesSubString=e.matchesContiguousSubString=e.matchesPrefix=e.matchesStrictPrefix=e.or=void 0;function E(...Z){return function(ee,le){for(let ue=0,ce=Z.length;ue<ce;ue++){const pe=Z[ue](ee,le);if(pe)return pe}return null}}e.or=E,e.matchesStrictPrefix=S.bind(void 0,!1),e.matchesPrefix=S.bind(void 0,!0);function S(Z,ee,le){if(!le||le.length<ee.length)return null;let ue;return Z?ue=y.startsWithIgnoreCase(le,ee):ue=le.indexOf(ee)===0,ue?ee.length>0?[{start:0,end:ee.length}]:[]:null}function p(Z,ee){const le=ee.toLowerCase().indexOf(Z.toLowerCase());return le===-1?null:[{start:le,end:le+Z.length}]}e.matchesContiguousSubString=p;function _(Z,ee){return v(Z.toLowerCase(),ee.toLowerCase(),0,0)}e.matchesSubString=_;function v(Z,ee,le,ue){if(le===Z.length)return[];if(ue===ee.length)return null;if(Z[le]===ee[ue]){let ce=null;return(ce=v(Z,ee,le+1,ue+1))?s({start:ue,end:ue+1},ce):null}return v(Z,ee,le,ue+1)}function b(Z){return 97<=Z&&Z<=122}function a(Z){return 65<=Z&&Z<=90}e.isUpper=a;function i(Z){return 48<=Z&&Z<=57}function n(Z){return Z===32||Z===9||Z===10||Z===13}const t=new Set;\"()[]{}<>`'\\\"-/;:,.?!\".split(\"\").forEach(Z=>t.add(Z.charCodeAt(0)));function r(Z){return n(Z)||t.has(Z)}function u(Z,ee){return Z===ee||r(Z)&&r(ee)}const f=new Map;function c(Z){if(f.has(Z))return f.get(Z);let ee;const le=(0,k.getKoreanAltChars)(Z);return le&&(ee=le),f.set(Z,ee),ee}function d(Z){return b(Z)||a(Z)||i(Z)}function s(Z,ee){return ee.length===0?ee=[Z]:Z.end===ee[0].start?ee[0].start=Z.start:ee.unshift(Z),ee}function l(Z,ee){for(let le=ee;le<Z.length;le++){const ue=Z.charCodeAt(le);if(a(ue)||i(ue)||le>0&&!d(Z.charCodeAt(le-1)))return le}return Z.length}function o(Z,ee,le,ue){if(le===Z.length)return[];if(ue===ee.length)return null;if(Z[le]!==ee[ue].toLowerCase())return null;{let ce=null,pe=ue+1;for(ce=o(Z,ee,le+1,ue+1);!ce&&(pe=l(ee,pe))<ee.length;)ce=o(Z,ee,le+1,pe),pe++;return ce===null?null:s({start:ue,end:ue+1},ce)}}function g(Z){let ee=0,le=0,ue=0,ce=0,pe=0;for(let Ee=0;Ee<Z.length;Ee++)pe=Z.charCodeAt(Ee),a(pe)&&ee++,b(pe)&&le++,d(pe)&&ue++,i(pe)&&ce++;const ve=ee/Z.length,Ce=le/Z.length,Se=ue/Z.length,_e=ce/Z.length;return{upperPercent:ve,lowerPercent:Ce,alphaPercent:Se,numericPercent:_e}}function h(Z){const{upperPercent:ee,lowerPercent:le}=Z;return le===0&&ee>.6}function m(Z){const{upperPercent:ee,lowerPercent:le,alphaPercent:ue,numericPercent:ce}=Z;return le>.2&&ee<.8&&ue>.6&&ce<.2}function C(Z){let ee=0,le=0,ue=0,ce=0;for(let pe=0;pe<Z.length;pe++)ue=Z.charCodeAt(pe),a(ue)&&ee++,b(ue)&&le++,n(ue)&&ce++;return(ee===0||le===0)&&ce===0?Z.length<=30:ee<=5}function w(Z,ee){if(!ee||(ee=ee.trim(),ee.length===0)||!C(Z)||ee.length>60)return null;const le=g(ee);if(!m(le)){if(!h(le))return null;ee=ee.toLowerCase()}let ue=null,ce=0;for(Z=Z.toLowerCase();ce<ee.length&&(ue=o(Z,ee,0,ce))===null;)ce=l(ee,ce+1);return ue}e.matchesCamelCase=w;function D(Z,ee,le=!1){if(!ee||ee.length===0)return null;let ue=null,ce=0;for(Z=Z.toLowerCase(),ee=ee.toLowerCase();ce<ee.length&&(ue=I(Z,ee,0,ce,le),ue===null);)ce=T(ee,ce+1);return ue}e.matchesWords=D;function I(Z,ee,le,ue,ce){let pe=0;if(le===Z.length)return[];if(ue===ee.length)return null;if(!u(Z.charCodeAt(le),ee.charCodeAt(ue))){const Se=c(Z.charCodeAt(le));if(!Se)return null;for(let _e=0;_e<Se.length;_e++)if(!u(Se[_e],ee.charCodeAt(ue+_e)))return null;pe+=Se.length-1}let ve=null,Ce=ue+pe+1;if(ve=I(Z,ee,le+1,Ce,ce),!ce)for(;!ve&&(Ce=T(ee,Ce))<ee.length;)ve=I(Z,ee,le+1,Ce,ce),Ce++;if(!ve)return null;if(Z.charCodeAt(le)!==ee.charCodeAt(ue)){const Se=c(Z.charCodeAt(le));if(!Se)return ve;for(let _e=0;_e<Se.length;_e++)if(Se[_e]!==ee.charCodeAt(ue+_e))return ve}return s({start:ue,end:ue+pe+1},ve)}function T(Z,ee){for(let le=ee;le<Z.length;le++)if(r(Z.charCodeAt(le))||le>0&&r(Z.charCodeAt(le-1)))return le;return Z.length}const A=E(e.matchesPrefix,w,p),P=E(e.matchesPrefix,w,_),N=new L.LRUCache(1e4);function M(Z,ee,le=!1){if(typeof Z!=\"string\"||typeof ee!=\"string\")return null;let ue=N.get(Z);ue||(ue=new RegExp(y.convertSimple2RegExpPattern(Z),\"i\"),N.set(Z,ue));const ce=ue.exec(ee);return ce?[{start:ce.index,end:ce.index+ce[0].length}]:le?P(Z,ee):A(Z,ee)}e.matchesFuzzy=M;function R(Z,ee){const le=U(Z,Z.toLowerCase(),0,ee,ee.toLowerCase(),0,{firstMatchCanBeWeak:!0,boostFullMatch:!0});return le?O(le):null}e.matchesFuzzy2=R;function x(Z,ee,le,ue,ce,pe){const ve=Math.min(13,Z.length);for(;le<ve;le++){const Ce=U(Z,ee,le,ue,ce,pe,{firstMatchCanBeWeak:!0,boostFullMatch:!0});if(Ce)return Ce}return[0,pe]}e.anyScore=x;function O(Z){if(typeof Z>\"u\")return[];const ee=[],le=Z[1];for(let ue=Z.length-1;ue>1;ue--){const ce=Z[ue]+le,pe=ee[ee.length-1];pe&&pe.end===ce?pe.end=ce+1:ee.push({start:ce,end:ce+1})}return ee}e.createMatches=O;const B=128;function W(){const Z=[],ee=[];for(let le=0;le<=B;le++)ee[le]=0;for(let le=0;le<=B;le++)Z.push(ee.slice(0));return Z}function V(Z){const ee=[];for(let le=0;le<=Z;le++)ee[le]=0;return ee}const K=V(2*B),F=V(2*B),q=W(),ie=W(),ae=W(),ne=!1;function $(Z,ee,le,ue,ce){function pe(Ce,Se,_e=\" \"){for(;Ce.length<Se;)Ce=_e+Ce;return Ce}let ve=` |   |${ue.split(\"\").map(Ce=>pe(Ce,3)).join(\"|\")}\n`;for(let Ce=0;Ce<=le;Ce++)Ce===0?ve+=\" |\":ve+=`${ee[Ce-1]}|`,ve+=Z[Ce].slice(0,ce+1).map(Se=>pe(Se.toString(),3)).join(\"|\")+`\n`;return ve}function J(Z,ee,le,ue){Z=Z.substr(ee),le=le.substr(ue),console.log($(ie,Z,Z.length,le,le.length)),console.log($(ae,Z,Z.length,le,le.length)),console.log($(q,Z,Z.length,le,le.length))}function Q(Z,ee){if(ee<0||ee>=Z.length)return!1;const le=Z.codePointAt(ee);switch(le){case 95:case 45:case 46:case 32:case 47:case 92:case 39:case 34:case 58:case 36:case 60:case 62:case 40:case 41:case 91:case 93:case 123:case 125:return!0;case void 0:return!1;default:return!!y.isEmojiImprecise(le)}}function re(Z,ee){if(ee<0||ee>=Z.length)return!1;switch(Z.charCodeAt(ee)){case 32:case 9:return!0;default:return!1}}function de(Z,ee,le){return ee[Z]!==le[Z]}function he(Z,ee,le,ue,ce,pe,ve=!1){for(;ee<le&&ce<pe;)Z[ee]===ue[ce]&&(ve&&(K[ee]=ce),ee+=1),ce+=1;return ee===le}e.isPatternInWord=he;var me;(function(Z){Z.Default=[-100,0];function ee(le){return!le||le.length===2&&le[0]===-100&&le[1]===0}Z.isDefault=ee})(me||(e.FuzzyScore=me={}));class X{constructor(ee,le){this.firstMatchCanBeWeak=ee,this.boostFullMatch=le}}e.FuzzyScoreOptions=X,X.default={boostFullMatch:!0,firstMatchCanBeWeak:!1};function U(Z,ee,le,ue,ce,pe,ve=X.default){const Ce=Z.length>B?B:Z.length,Se=ue.length>B?B:ue.length;if(le>=Ce||pe>=Se||Ce-le>Se-pe||!he(ee,le,Ce,ce,pe,Se,!0))return;G(Ce,Se,le,pe,ee,ce);let _e=1,Ee=1,Ae=le,xe=pe;const Be=[!1];for(_e=1,Ae=le;Ae<Ce;_e++,Ae++){const Ne=K[Ae],Pe=F[Ae],ze=Ae+1<Ce?F[Ae+1]:Se;for(Ee=Ne-pe+1,xe=Ne;xe<ze;Ee++,xe++){let Ke=Number.MIN_SAFE_INTEGER,je=!1;xe<=Pe&&(Ke=z(Z,ee,Ae,le,ue,ce,xe,Se,pe,q[_e-1][Ee-1]===0,Be));let Je=0;Ke!==Number.MAX_SAFE_INTEGER&&(je=!0,Je=Ke+ie[_e-1][Ee-1]);const rt=xe>Ne,et=rt?ie[_e][Ee-1]+(q[_e][Ee-1]>0?-5:0):0,st=xe>Ne+1&&q[_e][Ee-1]>0,Qe=st?ie[_e][Ee-2]+(q[_e][Ee-2]>0?-5:0):0;if(st&&(!rt||Qe>=et)&&(!je||Qe>=Je))ie[_e][Ee]=Qe,ae[_e][Ee]=3,q[_e][Ee]=0;else if(rt&&(!je||et>=Je))ie[_e][Ee]=et,ae[_e][Ee]=2,q[_e][Ee]=0;else if(je)ie[_e][Ee]=Je,ae[_e][Ee]=1,q[_e][Ee]=q[_e-1][Ee-1]+1;else throw new Error(\"not possible\")}}if(ne&&J(Z,le,ue,pe),!Be[0]&&!ve.firstMatchCanBeWeak)return;_e--,Ee--;const De=[ie[_e][Ee],pe];let Ie=0,fe=0;for(;_e>=1;){let Ne=Ee;do{const Pe=ae[_e][Ne];if(Pe===3)Ne=Ne-2;else if(Pe===2)Ne=Ne-1;else break}while(Ne>=1);Ie>1&&ee[le+_e-1]===ce[pe+Ee-1]&&!de(Ne+pe-1,ue,ce)&&Ie+1>q[_e][Ne]&&(Ne=Ee),Ne===Ee?Ie++:Ie=1,fe||(fe=Ne),_e--,Ee=Ne-1,De.push(Ee)}Se===Ce&&ve.boostFullMatch&&(De[0]+=2);const be=fe-Ce;return De[0]-=be,De}e.fuzzyScore=U;function G(Z,ee,le,ue,ce,pe){let ve=Z-1,Ce=ee-1;for(;ve>=le&&Ce>=ue;)ce[ve]===pe[Ce]&&(F[ve]=Ce,ve--),Ce--}function z(Z,ee,le,ue,ce,pe,ve,Ce,Se,_e,Ee){if(ee[le]!==pe[ve])return Number.MIN_SAFE_INTEGER;let Ae=1,xe=!1;return ve===le-ue?Ae=Z[le]===ce[ve]?7:5:de(ve,ce,pe)&&(ve===0||!de(ve-1,ce,pe))?(Ae=Z[le]===ce[ve]?7:5,xe=!0):Q(pe,ve)&&(ve===0||!Q(pe,ve-1))?Ae=5:(Q(pe,ve-1)||re(pe,ve-1))&&(Ae=5,xe=!0),Ae>1&&le===ue&&(Ee[0]=!0),xe||(xe=de(ve,ce,pe)||Q(pe,ve-1)||re(pe,ve-1)),le===ue?ve>Se&&(Ae-=xe?3:5):_e?Ae+=xe?2:0:Ae+=xe?0:1,ve+1===Ce&&(Ae-=xe?3:5),Ae}function H(Z,ee,le,ue,ce,pe,ve){return Y(Z,ee,le,ue,ce,pe,!0,ve)}e.fuzzyScoreGracefulAggressive=H;function Y(Z,ee,le,ue,ce,pe,ve,Ce){let Se=U(Z,ee,le,ue,ce,pe,Ce);if(Se&&!ve)return Se;if(Z.length>=3){const _e=Math.min(7,Z.length-1);for(let Ee=le+1;Ee<_e;Ee++){const Ae=j(Z,Ee);if(Ae){const xe=U(Ae,Ae.toLowerCase(),le,ue,ce,pe,Ce);xe&&(xe[0]-=3,(!Se||xe[0]>Se[0])&&(Se=xe))}}}return Se}function j(Z,ee){if(ee+1>=Z.length)return;const le=Z[ee],ue=Z[ee+1];if(le!==ue)return Z.slice(0,ee)+ue+le+Z.slice(ee+2)}}),define(se[111],oe([1,0,11]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StringSHA1=e.toHexString=e.stringHash=e.numberHash=e.doHash=e.hash=void 0;function k(r){return y(r,0)}e.hash=k;function y(r,u){switch(typeof r){case\"object\":return r===null?E(349,u):Array.isArray(r)?_(r,u):v(r,u);case\"string\":return p(r,u);case\"boolean\":return S(r,u);case\"number\":return E(r,u);case\"undefined\":return E(937,u);default:return E(617,u)}}e.doHash=y;function E(r,u){return(u<<5)-u+r|0}e.numberHash=E;function S(r,u){return E(r?433:863,u)}function p(r,u){u=E(149417,u);for(let f=0,c=r.length;f<c;f++)u=E(r.charCodeAt(f),u);return u}e.stringHash=p;function _(r,u){return u=E(104579,u),r.reduce((f,c)=>y(c,f),u)}function v(r,u){return u=E(181387,u),Object.keys(r).sort().reduce((f,c)=>(f=p(c,f),y(r[c],f)),u)}function b(r,u,f=32){const c=f-u,d=~((1<<c)-1);return(r<<u|(d&r)>>>c)>>>0}function a(r,u=0,f=r.byteLength,c=0){for(let d=0;d<f;d++)r[u+d]=c}function i(r,u,f=\"0\"){for(;r.length<u;)r=f+r;return r}function n(r,u=32){return r instanceof ArrayBuffer?Array.from(new Uint8Array(r)).map(f=>f.toString(16).padStart(2,\"0\")).join(\"\"):i((r>>>0).toString(16),u/4)}e.toHexString=n;class t{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(64+3),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(u){const f=u.length;if(f===0)return;const c=this._buff;let d=this._buffLen,s=this._leftoverHighSurrogate,l,o;for(s!==0?(l=s,o=-1,s=0):(l=u.charCodeAt(0),o=0);;){let g=l;if(L.isHighSurrogate(l))if(o+1<f){const h=u.charCodeAt(o+1);L.isLowSurrogate(h)?(o++,g=L.computeCodePoint(l,h)):g=65533}else{s=l;break}else L.isLowSurrogate(l)&&(g=65533);if(d=this._push(c,d,g),o++,o<f)l=u.charCodeAt(o);else break}this._buffLen=d,this._leftoverHighSurrogate=s}_push(u,f,c){return c<128?u[f++]=c:c<2048?(u[f++]=192|(c&1984)>>>6,u[f++]=128|(c&63)>>>0):c<65536?(u[f++]=224|(c&61440)>>>12,u[f++]=128|(c&4032)>>>6,u[f++]=128|(c&63)>>>0):(u[f++]=240|(c&1835008)>>>18,u[f++]=128|(c&258048)>>>12,u[f++]=128|(c&4032)>>>6,u[f++]=128|(c&63)>>>0),f>=64&&(this._step(),f-=64,this._totalLen+=64,u[0]=u[64+0],u[1]=u[64+1],u[2]=u[64+2]),f}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),n(this._h0)+n(this._h1)+n(this._h2)+n(this._h3)+n(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,a(this._buff,this._buffLen),this._buffLen>56&&(this._step(),a(this._buff));const u=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(u/4294967296),!1),this._buffDV.setUint32(60,u%4294967296,!1),this._step()}_step(){const u=t._bigBlock32,f=this._buffDV;for(let C=0;C<64;C+=4)u.setUint32(C,f.getUint32(C,!1),!1);for(let C=64;C<320;C+=4)u.setUint32(C,b(u.getUint32(C-12,!1)^u.getUint32(C-32,!1)^u.getUint32(C-56,!1)^u.getUint32(C-64,!1),1),!1);let c=this._h0,d=this._h1,s=this._h2,l=this._h3,o=this._h4,g,h,m;for(let C=0;C<80;C++)C<20?(g=d&s|~d&l,h=1518500249):C<40?(g=d^s^l,h=1859775393):C<60?(g=d&s|d&l|s&l,h=2400959708):(g=d^s^l,h=3395469782),m=b(c,5)+g+o+h+u.getUint32(C*4,!1)&4294967295,o=l,l=s,s=b(d,30),d=c,c=m;this._h0=this._h0+c&4294967295,this._h1=this._h1+d&4294967295,this._h2=this._h2+s&4294967295,this._h3=this._h3+l&4294967295,this._h4=this._h4+o&4294967295}}e.StringSHA1=t,t._bigBlock32=new DataView(new ArrayBuffer(320))}),define(se[173],oe([1,0,397,111]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LcsDiff=e.stringDiff=e.StringDiffSequence=void 0;class y{constructor(a){this.source=a}getElements(){const a=this.source,i=new Int32Array(a.length);for(let n=0,t=a.length;n<t;n++)i[n]=a.charCodeAt(n);return i}}e.StringDiffSequence=y;function E(b,a,i){return new v(new y(b),new y(a)).ComputeDiff(i).changes}e.stringDiff=E;class S{static Assert(a,i){if(!a)throw new Error(i)}}class p{static Copy(a,i,n,t,r){for(let u=0;u<r;u++)n[t+u]=a[i+u]}static Copy2(a,i,n,t,r){for(let u=0;u<r;u++)n[t+u]=a[i+u]}}class _{constructor(){this.m_changes=[],this.m_originalStart=1073741824,this.m_modifiedStart=1073741824,this.m_originalCount=0,this.m_modifiedCount=0}MarkNextChange(){(this.m_originalCount>0||this.m_modifiedCount>0)&&this.m_changes.push(new L.DiffChange(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(a,i){this.m_originalStart=Math.min(this.m_originalStart,a),this.m_modifiedStart=Math.min(this.m_modifiedStart,i),this.m_originalCount++}AddModifiedElement(a,i){this.m_originalStart=Math.min(this.m_originalStart,a),this.m_modifiedStart=Math.min(this.m_modifiedStart,i),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class v{constructor(a,i,n=null){this.ContinueProcessingPredicate=n,this._originalSequence=a,this._modifiedSequence=i;const[t,r,u]=v._getElements(a),[f,c,d]=v._getElements(i);this._hasStrings=u&&d,this._originalStringElements=t,this._originalElementsOrHash=r,this._modifiedStringElements=f,this._modifiedElementsOrHash=c,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(a){return a.length>0&&typeof a[0]==\"string\"}static _getElements(a){const i=a.getElements();if(v._isStringArray(i)){const n=new Int32Array(i.length);for(let t=0,r=i.length;t<r;t++)n[t]=(0,k.stringHash)(i[t],0);return[i,n,!0]}return i instanceof Int32Array?[[],i,!1]:[[],new Int32Array(i),!1]}ElementsAreEqual(a,i){return this._originalElementsOrHash[a]!==this._modifiedElementsOrHash[i]?!1:this._hasStrings?this._originalStringElements[a]===this._modifiedStringElements[i]:!0}ElementsAreStrictEqual(a,i){if(!this.ElementsAreEqual(a,i))return!1;const n=v._getStrictElement(this._originalSequence,a),t=v._getStrictElement(this._modifiedSequence,i);return n===t}static _getStrictElement(a,i){return typeof a.getStrictElement==\"function\"?a.getStrictElement(i):null}OriginalElementsAreEqual(a,i){return this._originalElementsOrHash[a]!==this._originalElementsOrHash[i]?!1:this._hasStrings?this._originalStringElements[a]===this._originalStringElements[i]:!0}ModifiedElementsAreEqual(a,i){return this._modifiedElementsOrHash[a]!==this._modifiedElementsOrHash[i]?!1:this._hasStrings?this._modifiedStringElements[a]===this._modifiedStringElements[i]:!0}ComputeDiff(a){return this._ComputeDiff(0,this._originalElementsOrHash.length-1,0,this._modifiedElementsOrHash.length-1,a)}_ComputeDiff(a,i,n,t,r){const u=[!1];let f=this.ComputeDiffRecursive(a,i,n,t,u);return r&&(f=this.PrettifyChanges(f)),{quitEarly:u[0],changes:f}}ComputeDiffRecursive(a,i,n,t,r){for(r[0]=!1;a<=i&&n<=t&&this.ElementsAreEqual(a,n);)a++,n++;for(;i>=a&&t>=n&&this.ElementsAreEqual(i,t);)i--,t--;if(a>i||n>t){let l;return n<=t?(S.Assert(a===i+1,\"originalStart should only be one more than originalEnd\"),l=[new L.DiffChange(a,0,n,t-n+1)]):a<=i?(S.Assert(n===t+1,\"modifiedStart should only be one more than modifiedEnd\"),l=[new L.DiffChange(a,i-a+1,n,0)]):(S.Assert(a===i+1,\"originalStart should only be one more than originalEnd\"),S.Assert(n===t+1,\"modifiedStart should only be one more than modifiedEnd\"),l=[]),l}const u=[0],f=[0],c=this.ComputeRecursionPoint(a,i,n,t,u,f,r),d=u[0],s=f[0];if(c!==null)return c;if(!r[0]){const l=this.ComputeDiffRecursive(a,d,n,s,r);let o=[];return r[0]?o=[new L.DiffChange(d+1,i-(d+1)+1,s+1,t-(s+1)+1)]:o=this.ComputeDiffRecursive(d+1,i,s+1,t,r),this.ConcatenateChanges(l,o)}return[new L.DiffChange(a,i-a+1,n,t-n+1)]}WALKTRACE(a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D){let I=null,T=null,A=new _,P=i,N=n,M=g[0]-C[0]-t,R=-1073741824,x=this.m_forwardHistory.length-1;do{const O=M+a;O===P||O<N&&d[O-1]<d[O+1]?(l=d[O+1],h=l-M-t,l<R&&A.MarkNextChange(),R=l,A.AddModifiedElement(l+1,h),M=O+1-a):(l=d[O-1]+1,h=l-M-t,l<R&&A.MarkNextChange(),R=l-1,A.AddOriginalElement(l,h+1),M=O-1-a),x>=0&&(d=this.m_forwardHistory[x],a=d[0],P=1,N=d.length-1)}while(--x>=-1);if(I=A.getReverseChanges(),D[0]){let O=g[0]+1,B=C[0]+1;if(I!==null&&I.length>0){const W=I[I.length-1];O=Math.max(O,W.getOriginalEnd()),B=Math.max(B,W.getModifiedEnd())}T=[new L.DiffChange(O,o-O+1,B,m-B+1)]}else{A=new _,P=u,N=f,M=g[0]-C[0]-c,R=1073741824,x=w?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const O=M+r;O===P||O<N&&s[O-1]>=s[O+1]?(l=s[O+1]-1,h=l-M-c,l>R&&A.MarkNextChange(),R=l+1,A.AddOriginalElement(l+1,h+1),M=O+1-r):(l=s[O-1],h=l-M-c,l>R&&A.MarkNextChange(),R=l,A.AddModifiedElement(l+1,h+1),M=O-1-r),x>=0&&(s=this.m_reverseHistory[x],r=s[0],P=1,N=s.length-1)}while(--x>=-1);T=A.getChanges()}return this.ConcatenateChanges(I,T)}ComputeRecursionPoint(a,i,n,t,r,u,f){let c=0,d=0,s=0,l=0,o=0,g=0;a--,n--,r[0]=0,u[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const h=i-a+(t-n),m=h+1,C=new Int32Array(m),w=new Int32Array(m),D=t-n,I=i-a,T=a-n,A=i-t,N=(I-D)%2===0;C[D]=a,w[I]=i,f[0]=!1;for(let M=1;M<=h/2+1;M++){let R=0,x=0;s=this.ClipDiagonalBound(D-M,M,D,m),l=this.ClipDiagonalBound(D+M,M,D,m);for(let B=s;B<=l;B+=2){B===s||B<l&&C[B-1]<C[B+1]?c=C[B+1]:c=C[B-1]+1,d=c-(B-D)-T;const W=c;for(;c<i&&d<t&&this.ElementsAreEqual(c+1,d+1);)c++,d++;if(C[B]=c,c+d>R+x&&(R=c,x=d),!N&&Math.abs(B-I)<=M-1&&c>=w[B])return r[0]=c,u[0]=d,W<=w[B]&&1447>0&&M<=1447+1?this.WALKTRACE(D,s,l,T,I,o,g,A,C,w,c,i,r,d,t,u,N,f):null}const O=(R-a+(x-n)-M)/2;if(this.ContinueProcessingPredicate!==null&&!this.ContinueProcessingPredicate(R,O))return f[0]=!0,r[0]=R,u[0]=x,O>0&&1447>0&&M<=1447+1?this.WALKTRACE(D,s,l,T,I,o,g,A,C,w,c,i,r,d,t,u,N,f):(a++,n++,[new L.DiffChange(a,i-a+1,n,t-n+1)]);o=this.ClipDiagonalBound(I-M,M,I,m),g=this.ClipDiagonalBound(I+M,M,I,m);for(let B=o;B<=g;B+=2){B===o||B<g&&w[B-1]>=w[B+1]?c=w[B+1]-1:c=w[B-1],d=c-(B-I)-A;const W=c;for(;c>a&&d>n&&this.ElementsAreEqual(c,d);)c--,d--;if(w[B]=c,N&&Math.abs(B-D)<=M&&c<=C[B])return r[0]=c,u[0]=d,W>=C[B]&&1447>0&&M<=1447+1?this.WALKTRACE(D,s,l,T,I,o,g,A,C,w,c,i,r,d,t,u,N,f):null}if(M<=1447){let B=new Int32Array(l-s+2);B[0]=D-s+1,p.Copy2(C,s,B,1,l-s+1),this.m_forwardHistory.push(B),B=new Int32Array(g-o+2),B[0]=I-o+1,p.Copy2(w,o,B,1,g-o+1),this.m_reverseHistory.push(B)}}return this.WALKTRACE(D,s,l,T,I,o,g,A,C,w,c,i,r,d,t,u,N,f)}PrettifyChanges(a){for(let i=0;i<a.length;i++){const n=a[i],t=i<a.length-1?a[i+1].originalStart:this._originalElementsOrHash.length,r=i<a.length-1?a[i+1].modifiedStart:this._modifiedElementsOrHash.length,u=n.originalLength>0,f=n.modifiedLength>0;for(;n.originalStart+n.originalLength<t&&n.modifiedStart+n.modifiedLength<r&&(!u||this.OriginalElementsAreEqual(n.originalStart,n.originalStart+n.originalLength))&&(!f||this.ModifiedElementsAreEqual(n.modifiedStart,n.modifiedStart+n.modifiedLength));){const d=this.ElementsAreStrictEqual(n.originalStart,n.modifiedStart);if(this.ElementsAreStrictEqual(n.originalStart+n.originalLength,n.modifiedStart+n.modifiedLength)&&!d)break;n.originalStart++,n.modifiedStart++}const c=[null];if(i<a.length-1&&this.ChangesOverlap(a[i],a[i+1],c)){a[i]=c[0],a.splice(i+1,1),i--;continue}}for(let i=a.length-1;i>=0;i--){const n=a[i];let t=0,r=0;if(i>0){const l=a[i-1];t=l.originalStart+l.originalLength,r=l.modifiedStart+l.modifiedLength}const u=n.originalLength>0,f=n.modifiedLength>0;let c=0,d=this._boundaryScore(n.originalStart,n.originalLength,n.modifiedStart,n.modifiedLength);for(let l=1;;l++){const o=n.originalStart-l,g=n.modifiedStart-l;if(o<t||g<r||u&&!this.OriginalElementsAreEqual(o,o+n.originalLength)||f&&!this.ModifiedElementsAreEqual(g,g+n.modifiedLength))break;const m=(o===t&&g===r?5:0)+this._boundaryScore(o,n.originalLength,g,n.modifiedLength);m>d&&(d=m,c=l)}n.originalStart-=c,n.modifiedStart-=c;const s=[null];if(i>0&&this.ChangesOverlap(a[i-1],a[i],s)){a[i-1]=s[0],a.splice(i,1),i++;continue}}if(this._hasStrings)for(let i=1,n=a.length;i<n;i++){const t=a[i-1],r=a[i],u=r.originalStart-t.originalStart-t.originalLength,f=t.originalStart,c=r.originalStart+r.originalLength,d=c-f,s=t.modifiedStart,l=r.modifiedStart+r.modifiedLength,o=l-s;if(u<5&&d<20&&o<20){const g=this._findBetterContiguousSequence(f,d,s,o,u);if(g){const[h,m]=g;(h!==t.originalStart+t.originalLength||m!==t.modifiedStart+t.modifiedLength)&&(t.originalLength=h-t.originalStart,t.modifiedLength=m-t.modifiedStart,r.originalStart=h+u,r.modifiedStart=m+u,r.originalLength=c-r.originalStart,r.modifiedLength=l-r.modifiedStart)}}}return a}_findBetterContiguousSequence(a,i,n,t,r){if(i<r||t<r)return null;const u=a+i-r+1,f=n+t-r+1;let c=0,d=0,s=0;for(let l=a;l<u;l++)for(let o=n;o<f;o++){const g=this._contiguousSequenceScore(l,o,r);g>0&&g>c&&(c=g,d=l,s=o)}return c>0?[d,s]:null}_contiguousSequenceScore(a,i,n){let t=0;for(let r=0;r<n;r++){if(!this.ElementsAreEqual(a+r,i+r))return 0;t+=this._originalStringElements[a+r].length}return t}_OriginalIsBoundary(a){return a<=0||a>=this._originalElementsOrHash.length-1?!0:this._hasStrings&&/^\\s*$/.test(this._originalStringElements[a])}_OriginalRegionIsBoundary(a,i){if(this._OriginalIsBoundary(a)||this._OriginalIsBoundary(a-1))return!0;if(i>0){const n=a+i;if(this._OriginalIsBoundary(n-1)||this._OriginalIsBoundary(n))return!0}return!1}_ModifiedIsBoundary(a){return a<=0||a>=this._modifiedElementsOrHash.length-1?!0:this._hasStrings&&/^\\s*$/.test(this._modifiedStringElements[a])}_ModifiedRegionIsBoundary(a,i){if(this._ModifiedIsBoundary(a)||this._ModifiedIsBoundary(a-1))return!0;if(i>0){const n=a+i;if(this._ModifiedIsBoundary(n-1)||this._ModifiedIsBoundary(n))return!0}return!1}_boundaryScore(a,i,n,t){const r=this._OriginalRegionIsBoundary(a,i)?1:0,u=this._ModifiedRegionIsBoundary(n,t)?1:0;return r+u}ConcatenateChanges(a,i){const n=[];if(a.length===0||i.length===0)return i.length>0?i:a;if(this.ChangesOverlap(a[a.length-1],i[0],n)){const t=new Array(a.length+i.length-1);return p.Copy(a,0,t,0,a.length-1),t[a.length-1]=n[0],p.Copy(i,1,t,a.length,i.length-1),t}else{const t=new Array(a.length+i.length);return p.Copy(a,0,t,0,a.length),p.Copy(i,0,t,a.length,i.length),t}}ChangesOverlap(a,i,n){if(S.Assert(a.originalStart<=i.originalStart,\"Left change is not less than or equal to right change\"),S.Assert(a.modifiedStart<=i.modifiedStart,\"Left change is not less than or equal to right change\"),a.originalStart+a.originalLength>=i.originalStart||a.modifiedStart+a.modifiedLength>=i.modifiedStart){const t=a.originalStart;let r=a.originalLength;const u=a.modifiedStart;let f=a.modifiedLength;return a.originalStart+a.originalLength>=i.originalStart&&(r=i.originalStart+i.originalLength-a.originalStart),a.modifiedStart+a.modifiedLength>=i.modifiedStart&&(f=i.modifiedStart+i.modifiedLength-a.modifiedStart),n[0]=new L.DiffChange(t,r,u,f),!0}else return n[0]=null,!1}ClipDiagonalBound(a,i,n,t){if(a>=0&&a<t)return a;const r=n,u=t-n-1,f=i%2===0;if(a<0){const c=r%2===0;return f===c?0:1}else{const c=u%2===0;return f===c?t-1:t-2}}}e.LcsDiff=v}),define(se[406],oe([1,0,11]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.buildReplaceStringWithCasePreserved=void 0;function k(S,p){if(S&&S[0]!==\"\"){const _=y(S,p,\"-\"),v=y(S,p,\"_\");return _&&!v?E(S,p,\"-\"):!_&&v?E(S,p,\"_\"):S[0].toUpperCase()===S[0]?p.toUpperCase():S[0].toLowerCase()===S[0]?p.toLowerCase():L.containsUppercaseCharacter(S[0][0])&&p.length>0?p[0].toUpperCase()+p.substr(1):S[0][0].toUpperCase()!==S[0][0]&&p.length>0?p[0].toLowerCase()+p.substr(1):p}else return p}e.buildReplaceStringWithCasePreserved=k;function y(S,p,_){return S[0].indexOf(_)!==-1&&p.indexOf(_)!==-1&&S[0].split(_).length===p.split(_).length}function E(S,p,_){const v=p.split(_),b=S[0].split(_);let a=\"\";return v.forEach((i,n)=>{a+=k([b[n]],i)+_}),a.slice(0,-1)}}),define(se[100],oe([1,0,11]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var k;(function(y){y[y.Ignore=0]=\"Ignore\",y[y.Info=1]=\"Info\",y[y.Warning=2]=\"Warning\",y[y.Error=3]=\"Error\"})(k||(k={})),function(y){const E=\"error\",S=\"warning\",p=\"warn\",_=\"info\",v=\"ignore\";function b(i){return i?L.equalsIgnoreCase(E,i)?y.Error:L.equalsIgnoreCase(S,i)||L.equalsIgnoreCase(p,i)?y.Warning:L.equalsIgnoreCase(_,i)?y.Info:y.Ignore:y.Ignore}y.fromValue=b;function a(i){switch(i){case y.Error:return E;case y.Warning:return S;case y.Info:return _;default:return v}}y.toString=a}(k||(k={})),e.default=k}),define(se[271],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MicrotaskDelay=void 0,e.MicrotaskDelay=Symbol(\"MicrotaskDelay\")}),define(se[199],oe([1,0,11]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TernarySearchTree=e.UriIterator=e.PathIterator=e.ConfigKeysIterator=e.StringIterator=void 0;class k{constructor(){this._value=\"\",this._pos=0}reset(b){return this._value=b,this._pos=0,this}next(){return this._pos+=1,this}hasNext(){return this._pos<this._value.length-1}cmp(b){const a=b.charCodeAt(0),i=this._value.charCodeAt(this._pos);return a-i}value(){return this._value[this._pos]}}e.StringIterator=k;class y{constructor(b=!0){this._caseSensitive=b}reset(b){return this._value=b,this._from=0,this._to=0,this.next()}hasNext(){return this._to<this._value.length}next(){this._from=this._to;let b=!0;for(;this._to<this._value.length;this._to++)if(this._value.charCodeAt(this._to)===46)if(b)this._from++;else break;else b=!1;return this}cmp(b){return this._caseSensitive?(0,L.compareSubstring)(b,this._value,0,b.length,this._from,this._to):(0,L.compareSubstringIgnoreCase)(b,this._value,0,b.length,this._from,this._to)}value(){return this._value.substring(this._from,this._to)}}e.ConfigKeysIterator=y;class E{constructor(b=!0,a=!0){this._splitOnBackslash=b,this._caseSensitive=a}reset(b){this._from=0,this._to=0,this._value=b,this._valueLen=b.length;for(let a=b.length-1;a>=0;a--,this._valueLen--){const i=this._value.charCodeAt(a);if(!(i===47||this._splitOnBackslash&&i===92))break}return this.next()}hasNext(){return this._to<this._valueLen}next(){this._from=this._to;let b=!0;for(;this._to<this._valueLen;this._to++){const a=this._value.charCodeAt(this._to);if(a===47||this._splitOnBackslash&&a===92)if(b)this._from++;else break;else b=!1}return this}cmp(b){return this._caseSensitive?(0,L.compareSubstring)(b,this._value,0,b.length,this._from,this._to):(0,L.compareSubstringIgnoreCase)(b,this._value,0,b.length,this._from,this._to)}value(){return this._value.substring(this._from,this._to)}}e.PathIterator=E;class S{constructor(b,a){this._ignorePathCasing=b,this._ignoreQueryAndFragment=a,this._states=[],this._stateIdx=0}reset(b){return this._value=b,this._states=[],this._value.scheme&&this._states.push(1),this._value.authority&&this._states.push(2),this._value.path&&(this._pathIterator=new E(!1,!this._ignorePathCasing(b)),this._pathIterator.reset(b.path),this._pathIterator.value()&&this._states.push(3)),this._ignoreQueryAndFragment(b)||(this._value.query&&this._states.push(4),this._value.fragment&&this._states.push(5)),this._stateIdx=0,this}next(){return this._states[this._stateIdx]===3&&this._pathIterator.hasNext()?this._pathIterator.next():this._stateIdx+=1,this}hasNext(){return this._states[this._stateIdx]===3&&this._pathIterator.hasNext()||this._stateIdx<this._states.length-1}cmp(b){if(this._states[this._stateIdx]===1)return(0,L.compareIgnoreCase)(b,this._value.scheme);if(this._states[this._stateIdx]===2)return(0,L.compareIgnoreCase)(b,this._value.authority);if(this._states[this._stateIdx]===3)return this._pathIterator.cmp(b);if(this._states[this._stateIdx]===4)return(0,L.compare)(b,this._value.query);if(this._states[this._stateIdx]===5)return(0,L.compare)(b,this._value.fragment);throw new Error}value(){if(this._states[this._stateIdx]===1)return this._value.scheme;if(this._states[this._stateIdx]===2)return this._value.authority;if(this._states[this._stateIdx]===3)return this._pathIterator.value();if(this._states[this._stateIdx]===4)return this._value.query;if(this._states[this._stateIdx]===5)return this._value.fragment;throw new Error}}e.UriIterator=S;class p{constructor(){this.height=1}rotateLeft(){const b=this.right;return this.right=b.left,b.left=this,this.updateHeight(),b.updateHeight(),b}rotateRight(){const b=this.left;return this.left=b.right,b.right=this,this.updateHeight(),b.updateHeight(),b}updateHeight(){this.height=1+Math.max(this.heightLeft,this.heightRight)}balanceFactor(){return this.heightRight-this.heightLeft}get heightLeft(){var b,a;return(a=(b=this.left)===null||b===void 0?void 0:b.height)!==null&&a!==void 0?a:0}get heightRight(){var b,a;return(a=(b=this.right)===null||b===void 0?void 0:b.height)!==null&&a!==void 0?a:0}}class _{static forUris(b=()=>!1,a=()=>!1){return new _(new S(b,a))}static forStrings(){return new _(new k)}static forConfigKeys(){return new _(new y)}constructor(b){this._iter=b}clear(){this._root=void 0}set(b,a){const i=this._iter.reset(b);let n;this._root||(this._root=new p,this._root.segment=i.value());const t=[];for(n=this._root;;){const u=i.cmp(n.segment);if(u>0)n.left||(n.left=new p,n.left.segment=i.value()),t.push([-1,n]),n=n.left;else if(u<0)n.right||(n.right=new p,n.right.segment=i.value()),t.push([1,n]),n=n.right;else if(i.hasNext())i.next(),n.mid||(n.mid=new p,n.mid.segment=i.value()),t.push([0,n]),n=n.mid;else break}const r=n.value;n.value=a,n.key=b;for(let u=t.length-1;u>=0;u--){const f=t[u][1];f.updateHeight();const c=f.balanceFactor();if(c<-1||c>1){const d=t[u][0],s=t[u+1][0];if(d===1&&s===1)t[u][1]=f.rotateLeft();else if(d===-1&&s===-1)t[u][1]=f.rotateRight();else if(d===1&&s===-1)f.right=t[u+1][1]=t[u+1][1].rotateRight(),t[u][1]=f.rotateLeft();else if(d===-1&&s===1)f.left=t[u+1][1]=t[u+1][1].rotateLeft(),t[u][1]=f.rotateRight();else throw new Error;if(u>0)switch(t[u-1][0]){case-1:t[u-1][1].left=t[u][1];break;case 1:t[u-1][1].right=t[u][1];break;case 0:t[u-1][1].mid=t[u][1];break}else this._root=t[0][1]}}return r}get(b){var a;return(a=this._getNode(b))===null||a===void 0?void 0:a.value}_getNode(b){const a=this._iter.reset(b);let i=this._root;for(;i;){const n=a.cmp(i.segment);if(n>0)i=i.left;else if(n<0)i=i.right;else if(a.hasNext())a.next(),i=i.mid;else break}return i}has(b){const a=this._getNode(b);return!(a?.value===void 0&&a?.mid===void 0)}delete(b){return this._delete(b,!1)}deleteSuperstr(b){return this._delete(b,!0)}_delete(b,a){var i;const n=this._iter.reset(b),t=[];let r=this._root;for(;r;){const u=n.cmp(r.segment);if(u>0)t.push([-1,r]),r=r.left;else if(u<0)t.push([1,r]),r=r.right;else if(n.hasNext())n.next(),t.push([0,r]),r=r.mid;else break}if(r){if(a?(r.left=void 0,r.mid=void 0,r.right=void 0,r.height=1):(r.key=void 0,r.value=void 0),!r.mid&&!r.value)if(r.left&&r.right){const u=this._min(r.right);if(u.key){const{key:f,value:c,segment:d}=u;this._delete(u.key,!1),r.key=f,r.value=c,r.segment=d}}else{const u=(i=r.left)!==null&&i!==void 0?i:r.right;if(t.length>0){const[f,c]=t[t.length-1];switch(f){case-1:c.left=u;break;case 0:c.mid=u;break;case 1:c.right=u;break}}else this._root=u}for(let u=t.length-1;u>=0;u--){const f=t[u][1];f.updateHeight();const c=f.balanceFactor();if(c>1?(f.right.balanceFactor()>=0||(f.right=f.right.rotateRight()),t[u][1]=f.rotateLeft()):c<-1&&(f.left.balanceFactor()<=0||(f.left=f.left.rotateLeft()),t[u][1]=f.rotateRight()),u>0)switch(t[u-1][0]){case-1:t[u-1][1].left=t[u][1];break;case 1:t[u-1][1].right=t[u][1];break;case 0:t[u-1][1].mid=t[u][1];break}else this._root=t[0][1]}}}_min(b){for(;b.left;)b=b.left;return b}findSubstr(b){const a=this._iter.reset(b);let i=this._root,n;for(;i;){const t=a.cmp(i.segment);if(t>0)i=i.left;else if(t<0)i=i.right;else if(a.hasNext())a.next(),n=i.value||n,i=i.mid;else break}return i&&i.value||n}findSuperstr(b){return this._findSuperstrOrElement(b,!1)}_findSuperstrOrElement(b,a){const i=this._iter.reset(b);let n=this._root;for(;n;){const t=i.cmp(n.segment);if(t>0)n=n.left;else if(t<0)n=n.right;else if(i.hasNext())i.next(),n=n.mid;else return n.mid?this._entries(n.mid):a?n.value:void 0}}forEach(b){for(const[a,i]of this)b(i,a)}*[Symbol.iterator](){yield*this._entries(this._root)}_entries(b){const a=[];return this._dfsEntries(b,a),a[Symbol.iterator]()}_dfsEntries(b,a){b&&(b.left&&this._dfsEntries(b.left,a),b.value&&a.push([b.key,b.value]),b.mid&&this._dfsEntries(b.mid,a),b.right&&this._dfsEntries(b.right,a))}}e.TernarySearchTree=_}),define(se[407],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.normalizeTfIdfScores=e.TfIdfCalculator=void 0;function L(E){var S;const p=new Map;for(const _ of E)p.set(_,((S=p.get(_))!==null&&S!==void 0?S:0)+1);return p}class k{constructor(){this.chunkCount=0,this.chunkOccurrences=new Map,this.documents=new Map}calculateScores(S,p){const _=this.computeEmbedding(S),v=new Map,b=[];for(const[a,i]of this.documents){if(p.isCancellationRequested)return[];for(const n of i.chunks){const t=this.computeSimilarityScore(n,_,v);t>0&&b.push({key:a,score:t})}}return b}static termFrequencies(S){return L(k.splitTerms(S))}static*splitTerms(S){const p=_=>_.toLowerCase();for(const[_]of S.matchAll(/\\b\\p{Letter}[\\p{Letter}\\d]{2,}\\b/gu)){yield p(_);const v=_.replace(/([a-z])([A-Z])/g,\"$1 $2\").split(/\\s+/g);if(v.length>1)for(const b of v)b.length>2&&/\\p{Letter}{3,}/gu.test(b)&&(yield p(b))}}updateDocuments(S){var p;for(const{key:_}of S)this.deleteDocument(_);for(const _ of S){const v=[];for(const b of _.textChunks){const a=k.termFrequencies(b);for(const i of a.keys())this.chunkOccurrences.set(i,((p=this.chunkOccurrences.get(i))!==null&&p!==void 0?p:0)+1);v.push({text:b,tf:a})}this.chunkCount+=v.length,this.documents.set(_.key,{chunks:v})}return this}deleteDocument(S){const p=this.documents.get(S);if(p){this.documents.delete(S),this.chunkCount-=p.chunks.length;for(const _ of p.chunks)for(const v of _.tf.keys()){const b=this.chunkOccurrences.get(v);if(typeof b==\"number\"){const a=b-1;a<=0?this.chunkOccurrences.delete(v):this.chunkOccurrences.set(v,a)}}}}computeSimilarityScore(S,p,_){let v=0;for(const[b,a]of Object.entries(p)){const i=S.tf.get(b);if(!i)continue;let n=_.get(b);typeof n!=\"number\"&&(n=this.computeIdf(b),_.set(b,n));const t=i*n;v+=t*a}return v}computeEmbedding(S){const p=k.termFrequencies(S);return this.computeTfidf(p)}computeIdf(S){var p;const _=(p=this.chunkOccurrences.get(S))!==null&&p!==void 0?p:0;return _>0?Math.log((this.chunkCount+1)/_):0}computeTfidf(S){const p=Object.create(null);for(const[_,v]of S){const b=this.computeIdf(_);b>0&&(p[_]=v*b)}return p}}e.TfIdfCalculator=k;function y(E){var S,p;const _=E.slice(0);_.sort((b,a)=>a.score-b.score);const v=(p=(S=_[0])===null||S===void 0?void 0:S.score)!==null&&p!==void 0?p:0;if(v>0)for(const b of _)b.score/=v;return _}e.normalizeTfIdfScores=y}),define(se[20],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.validateConstraint=e.validateConstraints=e.isFunction=e.assertIsDefined=e.assertType=e.isUndefinedOrNull=e.isDefined=e.isUndefined=e.isBoolean=e.isIterable=e.isNumber=e.isTypedArray=e.isObject=e.isString=void 0;function L(u){return typeof u==\"string\"}e.isString=L;function k(u){return typeof u==\"object\"&&u!==null&&!Array.isArray(u)&&!(u instanceof RegExp)&&!(u instanceof Date)}e.isObject=k;function y(u){const f=Object.getPrototypeOf(Uint8Array);return typeof u==\"object\"&&u instanceof f}e.isTypedArray=y;function E(u){return typeof u==\"number\"&&!isNaN(u)}e.isNumber=E;function S(u){return!!u&&typeof u[Symbol.iterator]==\"function\"}e.isIterable=S;function p(u){return u===!0||u===!1}e.isBoolean=p;function _(u){return typeof u>\"u\"}e.isUndefined=_;function v(u){return!b(u)}e.isDefined=v;function b(u){return _(u)||u===null}e.isUndefinedOrNull=b;function a(u,f){if(!u)throw new Error(f?`Unexpected type, expected '${f}'`:\"Unexpected type\")}e.assertType=a;function i(u){if(b(u))throw new Error(\"Assertion Failed: argument is undefined or null\");return u}e.assertIsDefined=i;function n(u){return typeof u==\"function\"}e.isFunction=n;function t(u,f){const c=Math.min(u.length,f.length);for(let d=0;d<c;d++)r(u[d],f[d])}e.validateConstraints=t;function r(u,f){if(L(f)){if(typeof u!==f)throw new Error(`argument does not match constraint: typeof ${f}`)}else if(n(f)){try{if(u instanceof f)return}catch{}if(!b(u)&&u.constructor===f||f.length===1&&f.call(void 0,u)===!0)return;throw new Error(\"argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true\")}}e.validateConstraint=r}),define(se[26],oe([1,0,20]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Codicon=e.getCodiconFontCharacters=void 0;const k=Object.create(null);function y(S,p){if((0,L.isString)(p)){const _=k[p];if(_===void 0)throw new Error(`${S} references an unknown codicon: ${p}`);p=_}return k[S]=p,{id:S}}function E(){return k}e.getCodiconFontCharacters=E,e.Codicon={add:y(\"add\",6e4),plus:y(\"plus\",6e4),gistNew:y(\"gist-new\",6e4),repoCreate:y(\"repo-create\",6e4),lightbulb:y(\"lightbulb\",60001),lightBulb:y(\"light-bulb\",60001),repo:y(\"repo\",60002),repoDelete:y(\"repo-delete\",60002),gistFork:y(\"gist-fork\",60003),repoForked:y(\"repo-forked\",60003),gitPullRequest:y(\"git-pull-request\",60004),gitPullRequestAbandoned:y(\"git-pull-request-abandoned\",60004),recordKeys:y(\"record-keys\",60005),keyboard:y(\"keyboard\",60005),tag:y(\"tag\",60006),tagAdd:y(\"tag-add\",60006),tagRemove:y(\"tag-remove\",60006),gitPullRequestLabel:y(\"git-pull-request-label\",60006),person:y(\"person\",60007),personFollow:y(\"person-follow\",60007),personOutline:y(\"person-outline\",60007),personFilled:y(\"person-filled\",60007),gitBranch:y(\"git-branch\",60008),gitBranchCreate:y(\"git-branch-create\",60008),gitBranchDelete:y(\"git-branch-delete\",60008),sourceControl:y(\"source-control\",60008),mirror:y(\"mirror\",60009),mirrorPublic:y(\"mirror-public\",60009),star:y(\"star\",60010),starAdd:y(\"star-add\",60010),starDelete:y(\"star-delete\",60010),starEmpty:y(\"star-empty\",60010),comment:y(\"comment\",60011),commentAdd:y(\"comment-add\",60011),alert:y(\"alert\",60012),warning:y(\"warning\",60012),search:y(\"search\",60013),searchSave:y(\"search-save\",60013),logOut:y(\"log-out\",60014),signOut:y(\"sign-out\",60014),logIn:y(\"log-in\",60015),signIn:y(\"sign-in\",60015),eye:y(\"eye\",60016),eyeUnwatch:y(\"eye-unwatch\",60016),eyeWatch:y(\"eye-watch\",60016),circleFilled:y(\"circle-filled\",60017),primitiveDot:y(\"primitive-dot\",60017),closeDirty:y(\"close-dirty\",60017),debugBreakpoint:y(\"debug-breakpoint\",60017),debugBreakpointDisabled:y(\"debug-breakpoint-disabled\",60017),debugBreakpointPending:y(\"debug-breakpoint-pending\",60377),debugHint:y(\"debug-hint\",60017),primitiveSquare:y(\"primitive-square\",60018),edit:y(\"edit\",60019),pencil:y(\"pencil\",60019),info:y(\"info\",60020),issueOpened:y(\"issue-opened\",60020),gistPrivate:y(\"gist-private\",60021),gitForkPrivate:y(\"git-fork-private\",60021),lock:y(\"lock\",60021),mirrorPrivate:y(\"mirror-private\",60021),close:y(\"close\",60022),removeClose:y(\"remove-close\",60022),x:y(\"x\",60022),repoSync:y(\"repo-sync\",60023),sync:y(\"sync\",60023),clone:y(\"clone\",60024),desktopDownload:y(\"desktop-download\",60024),beaker:y(\"beaker\",60025),microscope:y(\"microscope\",60025),vm:y(\"vm\",60026),deviceDesktop:y(\"device-desktop\",60026),file:y(\"file\",60027),fileText:y(\"file-text\",60027),more:y(\"more\",60028),ellipsis:y(\"ellipsis\",60028),kebabHorizontal:y(\"kebab-horizontal\",60028),mailReply:y(\"mail-reply\",60029),reply:y(\"reply\",60029),organization:y(\"organization\",60030),organizationFilled:y(\"organization-filled\",60030),organizationOutline:y(\"organization-outline\",60030),newFile:y(\"new-file\",60031),fileAdd:y(\"file-add\",60031),newFolder:y(\"new-folder\",60032),fileDirectoryCreate:y(\"file-directory-create\",60032),trash:y(\"trash\",60033),trashcan:y(\"trashcan\",60033),history:y(\"history\",60034),clock:y(\"clock\",60034),folder:y(\"folder\",60035),fileDirectory:y(\"file-directory\",60035),symbolFolder:y(\"symbol-folder\",60035),logoGithub:y(\"logo-github\",60036),markGithub:y(\"mark-github\",60036),github:y(\"github\",60036),terminal:y(\"terminal\",60037),console:y(\"console\",60037),repl:y(\"repl\",60037),zap:y(\"zap\",60038),symbolEvent:y(\"symbol-event\",60038),error:y(\"error\",60039),stop:y(\"stop\",60039),variable:y(\"variable\",60040),symbolVariable:y(\"symbol-variable\",60040),array:y(\"array\",60042),symbolArray:y(\"symbol-array\",60042),symbolModule:y(\"symbol-module\",60043),symbolPackage:y(\"symbol-package\",60043),symbolNamespace:y(\"symbol-namespace\",60043),symbolObject:y(\"symbol-object\",60043),symbolMethod:y(\"symbol-method\",60044),symbolFunction:y(\"symbol-function\",60044),symbolConstructor:y(\"symbol-constructor\",60044),symbolBoolean:y(\"symbol-boolean\",60047),symbolNull:y(\"symbol-null\",60047),symbolNumeric:y(\"symbol-numeric\",60048),symbolNumber:y(\"symbol-number\",60048),symbolStructure:y(\"symbol-structure\",60049),symbolStruct:y(\"symbol-struct\",60049),symbolParameter:y(\"symbol-parameter\",60050),symbolTypeParameter:y(\"symbol-type-parameter\",60050),symbolKey:y(\"symbol-key\",60051),symbolText:y(\"symbol-text\",60051),symbolReference:y(\"symbol-reference\",60052),goToFile:y(\"go-to-file\",60052),symbolEnum:y(\"symbol-enum\",60053),symbolValue:y(\"symbol-value\",60053),symbolRuler:y(\"symbol-ruler\",60054),symbolUnit:y(\"symbol-unit\",60054),activateBreakpoints:y(\"activate-breakpoints\",60055),archive:y(\"archive\",60056),arrowBoth:y(\"arrow-both\",60057),arrowDown:y(\"arrow-down\",60058),arrowLeft:y(\"arrow-left\",60059),arrowRight:y(\"arrow-right\",60060),arrowSmallDown:y(\"arrow-small-down\",60061),arrowSmallLeft:y(\"arrow-small-left\",60062),arrowSmallRight:y(\"arrow-small-right\",60063),arrowSmallUp:y(\"arrow-small-up\",60064),arrowUp:y(\"arrow-up\",60065),bell:y(\"bell\",60066),bold:y(\"bold\",60067),book:y(\"book\",60068),bookmark:y(\"bookmark\",60069),debugBreakpointConditionalUnverified:y(\"debug-breakpoint-conditional-unverified\",60070),debugBreakpointConditional:y(\"debug-breakpoint-conditional\",60071),debugBreakpointConditionalDisabled:y(\"debug-breakpoint-conditional-disabled\",60071),debugBreakpointDataUnverified:y(\"debug-breakpoint-data-unverified\",60072),debugBreakpointData:y(\"debug-breakpoint-data\",60073),debugBreakpointDataDisabled:y(\"debug-breakpoint-data-disabled\",60073),debugBreakpointLogUnverified:y(\"debug-breakpoint-log-unverified\",60074),debugBreakpointLog:y(\"debug-breakpoint-log\",60075),debugBreakpointLogDisabled:y(\"debug-breakpoint-log-disabled\",60075),briefcase:y(\"briefcase\",60076),broadcast:y(\"broadcast\",60077),browser:y(\"browser\",60078),bug:y(\"bug\",60079),calendar:y(\"calendar\",60080),caseSensitive:y(\"case-sensitive\",60081),check:y(\"check\",60082),checklist:y(\"checklist\",60083),chevronDown:y(\"chevron-down\",60084),dropDownButton:y(\"drop-down-button\",60084),chevronLeft:y(\"chevron-left\",60085),chevronRight:y(\"chevron-right\",60086),chevronUp:y(\"chevron-up\",60087),chromeClose:y(\"chrome-close\",60088),chromeMaximize:y(\"chrome-maximize\",60089),chromeMinimize:y(\"chrome-minimize\",60090),chromeRestore:y(\"chrome-restore\",60091),circle:y(\"circle\",60092),circleOutline:y(\"circle-outline\",60092),debugBreakpointUnverified:y(\"debug-breakpoint-unverified\",60092),circleSlash:y(\"circle-slash\",60093),circuitBoard:y(\"circuit-board\",60094),clearAll:y(\"clear-all\",60095),clippy:y(\"clippy\",60096),closeAll:y(\"close-all\",60097),cloudDownload:y(\"cloud-download\",60098),cloudUpload:y(\"cloud-upload\",60099),code:y(\"code\",60100),collapseAll:y(\"collapse-all\",60101),colorMode:y(\"color-mode\",60102),commentDiscussion:y(\"comment-discussion\",60103),compareChanges:y(\"compare-changes\",60157),creditCard:y(\"credit-card\",60105),dash:y(\"dash\",60108),dashboard:y(\"dashboard\",60109),database:y(\"database\",60110),debugContinue:y(\"debug-continue\",60111),debugDisconnect:y(\"debug-disconnect\",60112),debugPause:y(\"debug-pause\",60113),debugRestart:y(\"debug-restart\",60114),debugStart:y(\"debug-start\",60115),debugStepInto:y(\"debug-step-into\",60116),debugStepOut:y(\"debug-step-out\",60117),debugStepOver:y(\"debug-step-over\",60118),debugStop:y(\"debug-stop\",60119),debug:y(\"debug\",60120),deviceCameraVideo:y(\"device-camera-video\",60121),deviceCamera:y(\"device-camera\",60122),deviceMobile:y(\"device-mobile\",60123),diffAdded:y(\"diff-added\",60124),diffIgnored:y(\"diff-ignored\",60125),diffModified:y(\"diff-modified\",60126),diffRemoved:y(\"diff-removed\",60127),diffRenamed:y(\"diff-renamed\",60128),diff:y(\"diff\",60129),discard:y(\"discard\",60130),editorLayout:y(\"editor-layout\",60131),emptyWindow:y(\"empty-window\",60132),exclude:y(\"exclude\",60133),extensions:y(\"extensions\",60134),eyeClosed:y(\"eye-closed\",60135),fileBinary:y(\"file-binary\",60136),fileCode:y(\"file-code\",60137),fileMedia:y(\"file-media\",60138),filePdf:y(\"file-pdf\",60139),fileSubmodule:y(\"file-submodule\",60140),fileSymlinkDirectory:y(\"file-symlink-directory\",60141),fileSymlinkFile:y(\"file-symlink-file\",60142),fileZip:y(\"file-zip\",60143),files:y(\"files\",60144),filter:y(\"filter\",60145),flame:y(\"flame\",60146),foldDown:y(\"fold-down\",60147),foldUp:y(\"fold-up\",60148),fold:y(\"fold\",60149),folderActive:y(\"folder-active\",60150),folderOpened:y(\"folder-opened\",60151),gear:y(\"gear\",60152),gift:y(\"gift\",60153),gistSecret:y(\"gist-secret\",60154),gist:y(\"gist\",60155),gitCommit:y(\"git-commit\",60156),gitCompare:y(\"git-compare\",60157),gitMerge:y(\"git-merge\",60158),githubAction:y(\"github-action\",60159),githubAlt:y(\"github-alt\",60160),globe:y(\"globe\",60161),grabber:y(\"grabber\",60162),graph:y(\"graph\",60163),gripper:y(\"gripper\",60164),heart:y(\"heart\",60165),home:y(\"home\",60166),horizontalRule:y(\"horizontal-rule\",60167),hubot:y(\"hubot\",60168),inbox:y(\"inbox\",60169),issueClosed:y(\"issue-closed\",60324),issueReopened:y(\"issue-reopened\",60171),issues:y(\"issues\",60172),italic:y(\"italic\",60173),jersey:y(\"jersey\",60174),json:y(\"json\",60175),bracket:y(\"bracket\",60175),kebabVertical:y(\"kebab-vertical\",60176),key:y(\"key\",60177),law:y(\"law\",60178),lightbulbAutofix:y(\"lightbulb-autofix\",60179),linkExternal:y(\"link-external\",60180),link:y(\"link\",60181),listOrdered:y(\"list-ordered\",60182),listUnordered:y(\"list-unordered\",60183),liveShare:y(\"live-share\",60184),loading:y(\"loading\",60185),location:y(\"location\",60186),mailRead:y(\"mail-read\",60187),mail:y(\"mail\",60188),markdown:y(\"markdown\",60189),megaphone:y(\"megaphone\",60190),mention:y(\"mention\",60191),milestone:y(\"milestone\",60192),gitPullRequestMilestone:y(\"git-pull-request-milestone\",60192),mortarBoard:y(\"mortar-board\",60193),move:y(\"move\",60194),multipleWindows:y(\"multiple-windows\",60195),mute:y(\"mute\",60196),noNewline:y(\"no-newline\",60197),note:y(\"note\",60198),octoface:y(\"octoface\",60199),openPreview:y(\"open-preview\",60200),package:y(\"package\",60201),paintcan:y(\"paintcan\",60202),pin:y(\"pin\",60203),play:y(\"play\",60204),run:y(\"run\",60204),plug:y(\"plug\",60205),preserveCase:y(\"preserve-case\",60206),preview:y(\"preview\",60207),project:y(\"project\",60208),pulse:y(\"pulse\",60209),question:y(\"question\",60210),quote:y(\"quote\",60211),radioTower:y(\"radio-tower\",60212),reactions:y(\"reactions\",60213),references:y(\"references\",60214),refresh:y(\"refresh\",60215),regex:y(\"regex\",60216),remoteExplorer:y(\"remote-explorer\",60217),remote:y(\"remote\",60218),remove:y(\"remove\",60219),replaceAll:y(\"replace-all\",60220),replace:y(\"replace\",60221),repoClone:y(\"repo-clone\",60222),repoForcePush:y(\"repo-force-push\",60223),repoPull:y(\"repo-pull\",60224),repoPush:y(\"repo-push\",60225),report:y(\"report\",60226),requestChanges:y(\"request-changes\",60227),rocket:y(\"rocket\",60228),rootFolderOpened:y(\"root-folder-opened\",60229),rootFolder:y(\"root-folder\",60230),rss:y(\"rss\",60231),ruby:y(\"ruby\",60232),saveAll:y(\"save-all\",60233),saveAs:y(\"save-as\",60234),save:y(\"save\",60235),screenFull:y(\"screen-full\",60236),screenNormal:y(\"screen-normal\",60237),searchStop:y(\"search-stop\",60238),server:y(\"server\",60240),settingsGear:y(\"settings-gear\",60241),settings:y(\"settings\",60242),shield:y(\"shield\",60243),smiley:y(\"smiley\",60244),sortPrecedence:y(\"sort-precedence\",60245),splitHorizontal:y(\"split-horizontal\",60246),splitVertical:y(\"split-vertical\",60247),squirrel:y(\"squirrel\",60248),starFull:y(\"star-full\",60249),starHalf:y(\"star-half\",60250),symbolClass:y(\"symbol-class\",60251),symbolColor:y(\"symbol-color\",60252),symbolCustomColor:y(\"symbol-customcolor\",60252),symbolConstant:y(\"symbol-constant\",60253),symbolEnumMember:y(\"symbol-enum-member\",60254),symbolField:y(\"symbol-field\",60255),symbolFile:y(\"symbol-file\",60256),symbolInterface:y(\"symbol-interface\",60257),symbolKeyword:y(\"symbol-keyword\",60258),symbolMisc:y(\"symbol-misc\",60259),symbolOperator:y(\"symbol-operator\",60260),symbolProperty:y(\"symbol-property\",60261),wrench:y(\"wrench\",60261),wrenchSubaction:y(\"wrench-subaction\",60261),symbolSnippet:y(\"symbol-snippet\",60262),tasklist:y(\"tasklist\",60263),telescope:y(\"telescope\",60264),textSize:y(\"text-size\",60265),threeBars:y(\"three-bars\",60266),thumbsdown:y(\"thumbsdown\",60267),thumbsup:y(\"thumbsup\",60268),tools:y(\"tools\",60269),triangleDown:y(\"triangle-down\",60270),triangleLeft:y(\"triangle-left\",60271),triangleRight:y(\"triangle-right\",60272),triangleUp:y(\"triangle-up\",60273),twitter:y(\"twitter\",60274),unfold:y(\"unfold\",60275),unlock:y(\"unlock\",60276),unmute:y(\"unmute\",60277),unverified:y(\"unverified\",60278),verified:y(\"verified\",60279),versions:y(\"versions\",60280),vmActive:y(\"vm-active\",60281),vmOutline:y(\"vm-outline\",60282),vmRunning:y(\"vm-running\",60283),watch:y(\"watch\",60284),whitespace:y(\"whitespace\",60285),wholeWord:y(\"whole-word\",60286),window:y(\"window\",60287),wordWrap:y(\"word-wrap\",60288),zoomIn:y(\"zoom-in\",60289),zoomOut:y(\"zoom-out\",60290),listFilter:y(\"list-filter\",60291),listFlat:y(\"list-flat\",60292),listSelection:y(\"list-selection\",60293),selection:y(\"selection\",60293),listTree:y(\"list-tree\",60294),debugBreakpointFunctionUnverified:y(\"debug-breakpoint-function-unverified\",60295),debugBreakpointFunction:y(\"debug-breakpoint-function\",60296),debugBreakpointFunctionDisabled:y(\"debug-breakpoint-function-disabled\",60296),debugStackframeActive:y(\"debug-stackframe-active\",60297),circleSmallFilled:y(\"circle-small-filled\",60298),debugStackframeDot:y(\"debug-stackframe-dot\",60298),debugStackframe:y(\"debug-stackframe\",60299),debugStackframeFocused:y(\"debug-stackframe-focused\",60299),debugBreakpointUnsupported:y(\"debug-breakpoint-unsupported\",60300),symbolString:y(\"symbol-string\",60301),debugReverseContinue:y(\"debug-reverse-continue\",60302),debugStepBack:y(\"debug-step-back\",60303),debugRestartFrame:y(\"debug-restart-frame\",60304),callIncoming:y(\"call-incoming\",60306),callOutgoing:y(\"call-outgoing\",60307),menu:y(\"menu\",60308),expandAll:y(\"expand-all\",60309),feedback:y(\"feedback\",60310),gitPullRequestReviewer:y(\"git-pull-request-reviewer\",60310),groupByRefType:y(\"group-by-ref-type\",60311),ungroupByRefType:y(\"ungroup-by-ref-type\",60312),account:y(\"account\",60313),gitPullRequestAssignee:y(\"git-pull-request-assignee\",60313),bellDot:y(\"bell-dot\",60314),debugConsole:y(\"debug-console\",60315),library:y(\"library\",60316),output:y(\"output\",60317),runAll:y(\"run-all\",60318),syncIgnored:y(\"sync-ignored\",60319),pinned:y(\"pinned\",60320),githubInverted:y(\"github-inverted\",60321),debugAlt:y(\"debug-alt\",60305),serverProcess:y(\"server-process\",60322),serverEnvironment:y(\"server-environment\",60323),pass:y(\"pass\",60324),stopCircle:y(\"stop-circle\",60325),playCircle:y(\"play-circle\",60326),record:y(\"record\",60327),debugAltSmall:y(\"debug-alt-small\",60328),vmConnect:y(\"vm-connect\",60329),cloud:y(\"cloud\",60330),merge:y(\"merge\",60331),exportIcon:y(\"export\",60332),graphLeft:y(\"graph-left\",60333),magnet:y(\"magnet\",60334),notebook:y(\"notebook\",60335),redo:y(\"redo\",60336),checkAll:y(\"check-all\",60337),pinnedDirty:y(\"pinned-dirty\",60338),passFilled:y(\"pass-filled\",60339),circleLargeFilled:y(\"circle-large-filled\",60340),circleLarge:y(\"circle-large\",60341),circleLargeOutline:y(\"circle-large-outline\",60341),combine:y(\"combine\",60342),gather:y(\"gather\",60342),table:y(\"table\",60343),variableGroup:y(\"variable-group\",60344),typeHierarchy:y(\"type-hierarchy\",60345),typeHierarchySub:y(\"type-hierarchy-sub\",60346),typeHierarchySuper:y(\"type-hierarchy-super\",60347),gitPullRequestCreate:y(\"git-pull-request-create\",60348),runAbove:y(\"run-above\",60349),runBelow:y(\"run-below\",60350),notebookTemplate:y(\"notebook-template\",60351),debugRerun:y(\"debug-rerun\",60352),workspaceTrusted:y(\"workspace-trusted\",60353),workspaceUntrusted:y(\"workspace-untrusted\",60354),workspaceUnspecified:y(\"workspace-unspecified\",60355),terminalCmd:y(\"terminal-cmd\",60356),terminalDebian:y(\"terminal-debian\",60357),terminalLinux:y(\"terminal-linux\",60358),terminalPowershell:y(\"terminal-powershell\",60359),terminalTmux:y(\"terminal-tmux\",60360),terminalUbuntu:y(\"terminal-ubuntu\",60361),terminalBash:y(\"terminal-bash\",60362),arrowSwap:y(\"arrow-swap\",60363),copy:y(\"copy\",60364),personAdd:y(\"person-add\",60365),filterFilled:y(\"filter-filled\",60366),wand:y(\"wand\",60367),debugLineByLine:y(\"debug-line-by-line\",60368),inspect:y(\"inspect\",60369),layers:y(\"layers\",60370),layersDot:y(\"layers-dot\",60371),layersActive:y(\"layers-active\",60372),compass:y(\"compass\",60373),compassDot:y(\"compass-dot\",60374),compassActive:y(\"compass-active\",60375),azure:y(\"azure\",60376),issueDraft:y(\"issue-draft\",60377),gitPullRequestClosed:y(\"git-pull-request-closed\",60378),gitPullRequestDraft:y(\"git-pull-request-draft\",60379),debugAll:y(\"debug-all\",60380),debugCoverage:y(\"debug-coverage\",60381),runErrors:y(\"run-errors\",60382),folderLibrary:y(\"folder-library\",60383),debugContinueSmall:y(\"debug-continue-small\",60384),beakerStop:y(\"beaker-stop\",60385),graphLine:y(\"graph-line\",60386),graphScatter:y(\"graph-scatter\",60387),pieChart:y(\"pie-chart\",60388),bracketDot:y(\"bracket-dot\",60389),bracketError:y(\"bracket-error\",60390),lockSmall:y(\"lock-small\",60391),azureDevops:y(\"azure-devops\",60392),verifiedFilled:y(\"verified-filled\",60393),newLine:y(\"newline\",60394),layout:y(\"layout\",60395),layoutActivitybarLeft:y(\"layout-activitybar-left\",60396),layoutActivitybarRight:y(\"layout-activitybar-right\",60397),layoutPanelLeft:y(\"layout-panel-left\",60398),layoutPanelCenter:y(\"layout-panel-center\",60399),layoutPanelJustify:y(\"layout-panel-justify\",60400),layoutPanelRight:y(\"layout-panel-right\",60401),layoutPanel:y(\"layout-panel\",60402),layoutSidebarLeft:y(\"layout-sidebar-left\",60403),layoutSidebarRight:y(\"layout-sidebar-right\",60404),layoutStatusbar:y(\"layout-statusbar\",60405),layoutMenubar:y(\"layout-menubar\",60406),layoutCentered:y(\"layout-centered\",60407),layoutSidebarRightOff:y(\"layout-sidebar-right-off\",60416),layoutPanelOff:y(\"layout-panel-off\",60417),layoutSidebarLeftOff:y(\"layout-sidebar-left-off\",60418),target:y(\"target\",60408),indent:y(\"indent\",60409),recordSmall:y(\"record-small\",60410),errorSmall:y(\"error-small\",60411),arrowCircleDown:y(\"arrow-circle-down\",60412),arrowCircleLeft:y(\"arrow-circle-left\",60413),arrowCircleRight:y(\"arrow-circle-right\",60414),arrowCircleUp:y(\"arrow-circle-up\",60415),heartFilled:y(\"heart-filled\",60420),map:y(\"map\",60421),mapFilled:y(\"map-filled\",60422),circleSmall:y(\"circle-small\",60423),bellSlash:y(\"bell-slash\",60424),bellSlashDot:y(\"bell-slash-dot\",60425),commentUnresolved:y(\"comment-unresolved\",60426),gitPullRequestGoToChanges:y(\"git-pull-request-go-to-changes\",60427),gitPullRequestNewChanges:y(\"git-pull-request-new-changes\",60428),searchFuzzy:y(\"search-fuzzy\",60429),commentDraft:y(\"comment-draft\",60430),send:y(\"send\",60431),sparkle:y(\"sparkle\",60432),insert:y(\"insert\",60433),mic:y(\"mic\",60434),thumbsDownFilled:y(\"thumbsdown-filled\",60435),thumbsUpFilled:y(\"thumbsup-filled\",60436),coffee:y(\"coffee\",60437),snake:y(\"snake\",60438),game:y(\"game\",60439),vr:y(\"vr\",60440),chip:y(\"chip\",60441),piano:y(\"piano\",60442),music:y(\"music\",60443),micFilled:y(\"mic-filled\",60444),gitFetch:y(\"git-fetch\",60445),copilot:y(\"copilot\",60446),lightbulbSparkle:y(\"lightbulb-sparkle\",60447),lightbulbSparkleAutofix:y(\"lightbulb-sparkle-autofix\",60447),robot:y(\"robot\",60448),sparkleFilled:y(\"sparkle-filled\",60449),diffSingle:y(\"diff-single\",60450),diffMultiple:y(\"diff-multiple\",60451),surroundWith:y(\"surround-with\",60452),gitStash:y(\"git-stash\",60454),gitStashApply:y(\"git-stash-apply\",60455),gitStashPop:y(\"git-stash-pop\",60456),dialogError:y(\"dialog-error\",\"error\"),dialogWarning:y(\"dialog-warning\",\"warning\"),dialogInfo:y(\"dialog-info\",\"info\"),dialogClose:y(\"dialog-close\",\"close\"),treeItemExpanded:y(\"tree-item-expanded\",\"chevron-down\"),treeFilterOnTypeOn:y(\"tree-filter-on-type-on\",\"list-filter\"),treeFilterOnTypeOff:y(\"tree-filter-on-type-off\",\"list-selection\"),treeFilterClear:y(\"tree-filter-clear\",\"close\"),treeItemLoading:y(\"tree-item-loading\",\"loading\"),menuSelection:y(\"menu-selection\",\"check\"),menuSubmenu:y(\"menu-submenu\",\"chevron-right\"),menuBarMore:y(\"menubar-more\",\"more\"),scrollbarButtonLeft:y(\"scrollbar-button-left\",\"triangle-left\"),scrollbarButtonRight:y(\"scrollbar-button-right\",\"triangle-right\"),scrollbarButtonUp:y(\"scrollbar-button-up\",\"triangle-up\"),scrollbarButtonDown:y(\"scrollbar-button-down\",\"triangle-down\"),toolBarMore:y(\"toolbar-more\",\"more\"),quickInputBack:y(\"quick-input-back\",\"arrow-left\")}}),define(se[55],oe([1,0,20]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createProxyObject=e.getAllMethodNames=e.getAllPropertyNames=e.equals=e.mixin=e.cloneAndChange=e.deepFreeze=e.deepClone=void 0;function k(n){if(!n||typeof n!=\"object\"||n instanceof RegExp)return n;const t=Array.isArray(n)?[]:{};return Object.entries(n).forEach(([r,u])=>{t[r]=u&&typeof u==\"object\"?k(u):u}),t}e.deepClone=k;function y(n){if(!n||typeof n!=\"object\")return n;const t=[n];for(;t.length>0;){const r=t.shift();Object.freeze(r);for(const u in r)if(E.call(r,u)){const f=r[u];typeof f==\"object\"&&!Object.isFrozen(f)&&!(0,L.isTypedArray)(f)&&t.push(f)}}return n}e.deepFreeze=y;const E=Object.prototype.hasOwnProperty;function S(n,t){return p(n,t,new Set)}e.cloneAndChange=S;function p(n,t,r){if((0,L.isUndefinedOrNull)(n))return n;const u=t(n);if(typeof u<\"u\")return u;if(Array.isArray(n)){const f=[];for(const c of n)f.push(p(c,t,r));return f}if((0,L.isObject)(n)){if(r.has(n))throw new Error(\"Cannot clone recursive data-structure\");r.add(n);const f={};for(const c in n)E.call(n,c)&&(f[c]=p(n[c],t,r));return r.delete(n),f}return n}function _(n,t,r=!0){return(0,L.isObject)(n)?((0,L.isObject)(t)&&Object.keys(t).forEach(u=>{u in n?r&&((0,L.isObject)(n[u])&&(0,L.isObject)(t[u])?_(n[u],t[u],r):n[u]=t[u]):n[u]=t[u]}),n):t}e.mixin=_;function v(n,t){if(n===t)return!0;if(n==null||t===null||t===void 0||typeof n!=typeof t||typeof n!=\"object\"||Array.isArray(n)!==Array.isArray(t))return!1;let r,u;if(Array.isArray(n)){if(n.length!==t.length)return!1;for(r=0;r<n.length;r++)if(!v(n[r],t[r]))return!1}else{const f=[];for(u in n)f.push(u);f.sort();const c=[];for(u in t)c.push(u);if(c.sort(),!v(f,c))return!1;for(r=0;r<f.length;r++)if(!v(n[f[r]],t[f[r]]))return!1}return!0}e.equals=v;function b(n){let t=[];for(;Object.prototype!==n;)t=t.concat(Object.getOwnPropertyNames(n)),n=Object.getPrototypeOf(n);return t}e.getAllPropertyNames=b;function a(n){const t=[];for(const r of b(n))typeof n[r]==\"function\"&&t.push(r);return t}e.getAllMethodNames=a;function i(n,t){const r=f=>function(){const c=Array.prototype.slice.call(arguments,0);return t(f,c)},u={};for(const f of n)u[f]=r(f);return u}e.createProxyObject=i}),define(se[28],oe([1,0,26]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ThemeIcon=e.ThemeColor=void 0;var k;(function(E){function S(p){return p&&typeof p==\"object\"&&typeof p.id==\"string\"}E.isThemeColor=S})(k||(e.ThemeColor=k={}));var y;(function(E){E.iconNameSegment=\"[A-Za-z0-9]+\",E.iconNameExpression=\"[A-Za-z0-9-]+\",E.iconModifierExpression=\"~[A-Za-z]+\",E.iconNameCharacter=\"[A-Za-z0-9~-]\";const S=new RegExp(`^(${E.iconNameExpression})(${E.iconModifierExpression})?$`);function p(f){const c=S.exec(f.id);if(!c)return p(L.Codicon.error);const[,d,s]=c,l=[\"codicon\",\"codicon-\"+d];return s&&l.push(\"codicon-modifier-\"+s.substring(1)),l}E.asClassNameArray=p;function _(f){return p(f).join(\" \")}E.asClassName=_;function v(f){return\".\"+p(f).join(\".\")}E.asCSSSelector=v;function b(f){return f&&typeof f==\"object\"&&typeof f.id==\"string\"&&(typeof f.color>\"u\"||k.isThemeColor(f.color))}E.isThemeIcon=b;const a=new RegExp(`^\\\\$\\\\((${E.iconNameExpression}(?:${E.iconModifierExpression})?)\\\\)$`);function i(f){const c=a.exec(f);if(!c)return;const[,d]=c;return{id:d}}E.fromString=i;function n(f){return{id:f}}E.fromId=n;function t(f,c){let d=f.id;const s=d.lastIndexOf(\"~\");return s!==-1&&(d=d.substring(0,s)),c&&(d=`${d}~${c}`),{id:d}}E.modify=t;function r(f){const c=f.id.lastIndexOf(\"~\");if(c!==-1)return f.id.substring(c+1)}E.getModifier=r;function u(f,c){var d,s;return f.id===c.id&&((d=f.color)===null||d===void 0?void 0:d.id)===((s=c.color)===null||s===void 0?void 0:s.id)}E.isEqual=u})(y||(e.ThemeIcon=y={}))}),define(se[126],oe([1,0,71,11,28]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.matchesFuzzyIconAware=e.parseLabelWithIcons=e.getCodiconAriaLabel=e.stripIcons=e.markdownEscapeEscapedIcons=e.escapeIcons=void 0;const E=\"$(\",S=new RegExp(`\\\\$\\\\(${y.ThemeIcon.iconNameExpression}(?:${y.ThemeIcon.iconModifierExpression})?\\\\)`,\"g\"),p=new RegExp(`(\\\\\\\\)?${S.source}`,\"g\");function _(f){return f.replace(p,(c,d)=>d?c:`\\\\${c}`)}e.escapeIcons=_;const v=new RegExp(`\\\\\\\\${S.source}`,\"g\");function b(f){return f.replace(v,c=>`\\\\${c}`)}e.markdownEscapeEscapedIcons=b;const a=new RegExp(`(\\\\s)?(\\\\\\\\)?${S.source}(\\\\s)?`,\"g\");function i(f){return f.indexOf(E)===-1?f:f.replace(a,(c,d,s,l)=>s?c:d||l||\"\")}e.stripIcons=i;function n(f){return f?f.replace(/\\$\\((.*?)\\)/g,(c,d)=>` ${d} `).trim():\"\"}e.getCodiconAriaLabel=n;const t=new RegExp(`\\\\$\\\\(${y.ThemeIcon.iconNameCharacter}+\\\\)`,\"g\");function r(f){t.lastIndex=0;let c=\"\";const d=[];let s=0;for(;;){const l=t.lastIndex,o=t.exec(f),g=f.substring(l,o?.index);if(g.length>0){c+=g;for(let h=0;h<g.length;h++)d.push(s)}if(!o)break;s+=o[0].length}return{text:c,iconOffsets:d}}e.parseLabelWithIcons=r;function u(f,c,d=!1){const{text:s,iconOffsets:l}=c;if(!l||l.length===0)return(0,L.matchesFuzzy)(f,s,d);const o=(0,k.ltrim)(s,\" \"),g=s.length-o.length,h=(0,L.matchesFuzzy)(f,o,d);if(h)for(const m of h){const C=l[m.start+g]+g;m.start+=C,m.end+=C}return h}e.matchesFuzzyIconAware=u}),define(se[174],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.toUint32=e.toUint8=void 0;function L(y){return y<0?0:y>255?255:y|0}e.toUint8=L;function k(y){return y<0?0:y>4294967295?4294967295:y|0}e.toUint32=k}),define(se[175],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.generateUuid=void 0,e.generateUuid=function(){if(typeof crypto==\"object\"&&typeof crypto.randomUUID==\"function\")return crypto.randomUUID.bind(crypto);let L;typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\"?L=crypto.getRandomValues.bind(crypto):L=function(E){for(let S=0;S<E.length;S++)E[S]=Math.floor(Math.random()*256);return E};const k=new Uint8Array(16),y=[];for(let E=0;E<256;E++)y.push(E.toString(16).padStart(2,\"0\"));return function(){L(k),k[6]=k[6]&15|64,k[8]=k[8]&63|128;let S=0,p=\"\";return p+=y[k[S++]],p+=y[k[S++]],p+=y[k[S++]],p+=y[k[S++]],p+=\"-\",p+=y[k[S++]],p+=y[k[S++]],p+=\"-\",p+=y[k[S++]],p+=y[k[S++]],p+=\"-\",p+=y[k[S++]],p+=y[k[S++]],p+=\"-\",p+=y[k[S++]],p+=y[k[S++]],p+=y[k[S++]],p+=y[k[S++]],p+=y[k[S++]],p+=y[k[S++]],p}}()}),define(se[176],oe([1,0,13,52,175]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UriList=e.matchesMimeType=e.VSDataTransfer=e.createFileDataTransferItem=e.createStringDataTransferItem=void 0;function E(a){return{asString:async()=>a,asFile:()=>{},value:typeof a==\"string\"?a:void 0}}e.createStringDataTransferItem=E;function S(a,i,n){const t={id:(0,y.generateUuid)(),name:a,uri:i,data:n};return{asString:async()=>\"\",asFile:()=>t,value:void 0}}e.createFileDataTransferItem=S;class p{constructor(){this._entries=new Map}get size(){let i=0;for(const n of this._entries)i++;return i}has(i){return this._entries.has(this.toKey(i))}matches(i){const n=[...this._entries.keys()];return k.Iterable.some(this,([t,r])=>r.asFile())&&n.push(\"files\"),b(_(i),n)}get(i){var n;return(n=this._entries.get(this.toKey(i)))===null||n===void 0?void 0:n[0]}append(i,n){const t=this._entries.get(i);t?t.push(n):this._entries.set(this.toKey(i),[n])}replace(i,n){this._entries.set(this.toKey(i),[n])}delete(i){this._entries.delete(this.toKey(i))}*[Symbol.iterator](){for(const[i,n]of this._entries)for(const t of n)yield[i,t]}toKey(i){return _(i)}}e.VSDataTransfer=p;function _(a){return a.toLowerCase()}function v(a,i){return b(_(a),i.map(_))}e.matchesMimeType=v;function b(a,i){if(a===\"*/*\")return i.length>0;if(i.includes(a))return!0;const n=a.match(/^([a-z]+)\\/([a-z]+|\\*)$/i);if(!n)return!1;const[t,r,u]=n;return u===\"*\"?i.some(f=>f.startsWith(r+\"/\")):!1}e.UriList=Object.freeze({create:a=>(0,L.distinct)(a.map(i=>i.toString())).join(`\\r\n`),split:a=>a.split(`\\r\n`),parse:a=>e.UriList.split(a).filter(i=>!i.startsWith(\"#\"))})}),define(se[272],oe([9]),{}),define(se[408],oe([9]),{}),define(se[409],oe([9]),{}),define(se[410],oe([9]),{}),define(se[411],oe([9]),{}),define(se[177],oe([1,0,410,411]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0})}),define(se[412],oe([9]),{}),define(se[413],oe([9]),{}),define(se[273],oe([9]),{}),define(se[274],oe([9]),{}),define(se[414],oe([9]),{}),define(se[415],oe([9]),{}),define(se[416],oe([9]),{}),define(se[417],oe([9]),{}),define(se[275],oe([9]),{}),define(se[418],oe([9]),{}),define(se[200],oe([1,0,418]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME=void 0,e.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME=\"monaco-mouse-cursor-text\"}),define(se[419],oe([9]),{}),define(se[420],oe([9]),{}),define(se[421],oe([9]),{}),define(se[422],oe([9]),{}),define(se[423],oe([9]),{}),define(se[424],oe([9]),{}),define(se[425],oe([9]),{}),define(se[426],oe([9]),{}),define(se[427],oe([9]),{}),define(se[428],oe([9]),{}),define(se[429],oe([9]),{}),define(se[430],oe([9]),{}),define(se[431],oe([9]),{}),define(se[432],oe([9]),{}),define(se[433],oe([9]),{}),define(se[434],oe([9]),{}),define(se[435],oe([9]),{}),define(se[436],oe([9]),{}),define(se[437],oe([9]),{}),define(se[438],oe([9]),{}),define(se[439],oe([9]),{}),define(se[440],oe([9]),{}),define(se[441],oe([9]),{}),define(se[442],oe([9]),{}),define(se[443],oe([9]),{}),define(se[444],oe([9]),{}),define(se[445],oe([9]),{}),define(se[446],oe([9]),{}),define(se[447],oe([9]),{}),define(se[448],oe([9]),{}),define(se[449],oe([9]),{}),define(se[450],oe([9]),{}),define(se[451],oe([9]),{}),define(se[452],oe([9]),{}),define(se[453],oe([9]),{}),define(se[454],oe([9]),{}),define(se[455],oe([9]),{}),define(se[456],oe([9]),{}),define(se[201],oe([9]),{}),define(se[457],oe([9]),{}),define(se[458],oe([9]),{}),define(se[459],oe([9]),{}),define(se[460],oe([9]),{}),define(se[461],oe([9]),{}),define(se[462],oe([9]),{}),define(se[463],oe([9]),{}),define(se[464],oe([9]),{}),define(se[465],oe([9]),{}),define(se[466],oe([9]),{}),define(se[467],oe([9]),{}),define(se[468],oe([9]),{}),define(se[469],oe([9]),{}),define(se[470],oe([9]),{}),define(se[471],oe([9]),{}),define(se[472],oe([9]),{}),define(se[473],oe([9]),{}),define(se[474],oe([9]),{}),define(se[475],oe([9]),{}),define(se[476],oe([9]),{}),define(se[477],oe([9]),{}),define(se[478],oe([9]),{}),define(se[479],oe([9]),{}),define(se[480],oe([9]),{}),define(se[481],oe([9]),{}),define(se[482],oe([9]),{}),define(se[483],oe([9]),{}),define(se[484],oe([9]),{}),define(se[485],oe([9]),{}),define(se[486],oe([9]),{}),define(se[487],oe([9]),{}),define(se[276],oe([9]),{}),define(se[488],oe([9]),{}),define(se[489],oe([9]),{}),define(se[178],oe([9]),{}),define(se[490],oe([9]),{}),define(se[72],oe([1,0,40]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.applyFontInfo=void 0;function k(y,E){y instanceof L.FastDomNode?(y.setFontFamily(E.getMassagedFontFamily()),y.setFontWeight(E.fontWeight),y.setFontSize(E.fontSize),y.setFontFeatureSettings(E.fontFeatureSettings),y.setFontVariationSettings(E.fontVariationSettings),y.setLineHeight(E.lineHeight),y.setLetterSpacing(E.letterSpacing)):(y.style.fontFamily=E.getMassagedFontFamily(),y.style.fontWeight=E.fontWeight,y.style.fontSize=E.fontSize+\"px\",y.style.fontFeatureSettings=E.fontFeatureSettings,y.style.fontVariationSettings=E.fontVariationSettings,y.style.lineHeight=E.lineHeight+\"px\",y.style.letterSpacing=E.letterSpacing+\"px\")}e.applyFontInfo=k}),define(se[491],oe([1,0,44,72]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.readCharWidths=e.CharWidthRequest=void 0;class y{constructor(_,v){this.chr=_,this.type=v,this.width=0}fulfill(_){this.width=_}}e.CharWidthRequest=y;class E{constructor(_,v){this._bareFontInfo=_,this._requests=v,this._container=null,this._testElements=null}read(){this._createDomElements(),L.$window.document.body.appendChild(this._container),this._readFromDomElements(),L.$window.document.body.removeChild(this._container),this._container=null,this._testElements=null}_createDomElements(){const _=document.createElement(\"div\");_.style.position=\"absolute\",_.style.top=\"-50000px\",_.style.width=\"50000px\";const v=document.createElement(\"div\");(0,k.applyFontInfo)(v,this._bareFontInfo),_.appendChild(v);const b=document.createElement(\"div\");(0,k.applyFontInfo)(b,this._bareFontInfo),b.style.fontWeight=\"bold\",_.appendChild(b);const a=document.createElement(\"div\");(0,k.applyFontInfo)(a,this._bareFontInfo),a.style.fontStyle=\"italic\",_.appendChild(a);const i=[];for(const n of this._requests){let t;n.type===0&&(t=v),n.type===2&&(t=b),n.type===1&&(t=a),t.appendChild(document.createElement(\"br\"));const r=document.createElement(\"span\");E._render(r,n),t.appendChild(r),i.push(r)}this._container=_,this._testElements=i}static _render(_,v){if(v.chr===\" \"){let b=\"\\xA0\";for(let a=0;a<8;a++)b+=b;_.innerText=b}else{let b=v.chr;for(let a=0;a<8;a++)b+=b;_.textContent=b}}_readFromDomElements(){for(let _=0,v=this._requests.length;_<v;_++){const b=this._requests[_],a=this._testElements[_];b.fulfill(a.offsetWidth/256)}}}function S(p,_){new E(p,_).read()}e.readCharWidths=S}),define(se[492],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.migrateOptions=e.EditorSettingMigration=void 0;class L{constructor(_,v){this.key=_,this.migrate=v}apply(_){const v=L._read(_,this.key),b=i=>L._read(_,i),a=(i,n)=>L._write(_,i,n);this.migrate(v,b,a)}static _read(_,v){if(typeof _>\"u\")return;const b=v.indexOf(\".\");if(b>=0){const a=v.substring(0,b);return this._read(_[a],v.substring(b+1))}return _[v]}static _write(_,v,b){const a=v.indexOf(\".\");if(a>=0){const i=v.substring(0,a);_[i]=_[i]||{},this._write(_[i],v.substring(a+1),b);return}_[v]=b}}e.EditorSettingMigration=L,L.items=[];function k(p,_){L.items.push(new L(p,_))}function y(p,_){k(p,(v,b,a)=>{if(typeof v<\"u\"){for(const[i,n]of _)if(v===i){a(p,n);return}}})}function E(p){L.items.forEach(_=>_.apply(p))}e.migrateOptions=E,y(\"wordWrap\",[[!0,\"on\"],[!1,\"off\"]]),y(\"lineNumbers\",[[!0,\"on\"],[!1,\"off\"]]),y(\"cursorBlinking\",[[\"visible\",\"solid\"]]),y(\"renderWhitespace\",[[!0,\"boundary\"],[!1,\"none\"]]),y(\"renderLineHighlight\",[[!0,\"line\"],[!1,\"none\"]]),y(\"acceptSuggestionOnEnter\",[[!0,\"on\"],[!1,\"off\"]]),y(\"tabCompletion\",[[!1,\"off\"],[!0,\"onlySnippets\"]]),y(\"hover\",[[!0,{enabled:!0}],[!1,{enabled:!1}]]),y(\"parameterHints\",[[!0,{enabled:!0}],[!1,{enabled:!1}]]),y(\"autoIndent\",[[!1,\"advanced\"],[!0,\"full\"]]),y(\"matchBrackets\",[[!0,\"always\"],[!1,\"never\"]]),y(\"renderFinalNewline\",[[!0,\"on\"],[!1,\"off\"]]),y(\"cursorSmoothCaretAnimation\",[[!0,\"on\"],[!1,\"off\"]]),y(\"occurrencesHighlight\",[[!0,\"singleFile\"],[!1,\"off\"]]),y(\"wordBasedSuggestions\",[[!0,\"matchingDocuments\"],[!1,\"off\"]]),k(\"autoClosingBrackets\",(p,_,v)=>{p===!1&&(v(\"autoClosingBrackets\",\"never\"),typeof _(\"autoClosingQuotes\")>\"u\"&&v(\"autoClosingQuotes\",\"never\"),typeof _(\"autoSurround\")>\"u\"&&v(\"autoSurround\",\"never\"))}),k(\"renderIndentGuides\",(p,_,v)=>{typeof p<\"u\"&&(v(\"renderIndentGuides\",void 0),typeof _(\"guides.indentation\")>\"u\"&&v(\"guides.indentation\",!!p))}),k(\"highlightActiveIndentGuide\",(p,_,v)=>{typeof p<\"u\"&&(v(\"highlightActiveIndentGuide\",void 0),typeof _(\"guides.highlightActiveIndentation\")>\"u\"&&v(\"guides.highlightActiveIndentation\",!!p))});const S={method:\"showMethods\",function:\"showFunctions\",constructor:\"showConstructors\",deprecated:\"showDeprecated\",field:\"showFields\",variable:\"showVariables\",class:\"showClasses\",struct:\"showStructs\",interface:\"showInterfaces\",module:\"showModules\",property:\"showProperties\",event:\"showEvents\",operator:\"showOperators\",unit:\"showUnits\",value:\"showValues\",constant:\"showConstants\",enum:\"showEnums\",enumMember:\"showEnumMembers\",keyword:\"showKeywords\",text:\"showWords\",color:\"showColors\",file:\"showFiles\",reference:\"showReferences\",folder:\"showFolders\",typeParameter:\"showTypeParameters\",snippet:\"showSnippets\"};k(\"suggest.filteredTypes\",(p,_,v)=>{if(p&&typeof p==\"object\"){for(const b of Object.entries(S))p[b[0]]===!1&&typeof _(`suggest.${b[1]}`)>\"u\"&&v(`suggest.${b[1]}`,!1);v(\"suggest.filteredTypes\",void 0)}}),k(\"quickSuggestions\",(p,_,v)=>{if(typeof p==\"boolean\"){const b=p?\"on\":\"off\";v(\"quickSuggestions\",{comments:b,strings:b,other:b})}}),k(\"experimental.stickyScroll.enabled\",(p,_,v)=>{typeof p==\"boolean\"&&(v(\"experimental.stickyScroll.enabled\",void 0),typeof _(\"stickyScroll.enabled\")>\"u\"&&v(\"stickyScroll.enabled\",p))}),k(\"experimental.stickyScroll.maxLineCount\",(p,_,v)=>{typeof p==\"number\"&&(v(\"experimental.stickyScroll.maxLineCount\",void 0),typeof _(\"stickyScroll.maxLineCount\")>\"u\"&&v(\"stickyScroll.maxLineCount\",p))}),k(\"codeActionsOnSave\",(p,_,v)=>{if(p&&typeof p==\"object\"){let b=!1;const a={};for(const i of Object.entries(p))typeof i[1]==\"boolean\"?(b=!0,a[i[0]]=i[1]?\"explicit\":\"never\"):a[i[0]]=i[1];b&&v(\"codeActionsOnSave\",a)}}),k(\"codeActionWidget.includeNearbyQuickfixes\",(p,_,v)=>{typeof p==\"boolean\"&&(v(\"codeActionWidget.includeNearbyQuickfixes\",void 0),typeof _(\"codeActionWidget.includeNearbyQuickFixes\")>\"u\"&&v(\"codeActionWidget.includeNearbyQuickFixes\",p))}),k(\"lightbulb.enabled\",(p,_,v)=>{typeof p==\"boolean\"&&v(\"lightbulb.enabled\",p?void 0:\"off\")})}),define(se[202],oe([1,0,6]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TabFocus=void 0;class k{constructor(){this._tabFocus=!1,this._onDidChangeTabFocus=new L.Emitter,this.onDidChangeTabFocus=this._onDidChangeTabFocus.event}getTabFocusMode(){return this._tabFocus}setTabFocusMode(E){this._tabFocus=E,this._onDidChangeTabFocus.fire(this._tabFocus)}}e.TabFocus=new k}),define(se[127],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StableEditorScrollState=void 0;class L{static capture(y){if(y.getScrollTop()===0||y.hasPendingScrollAnimation())return new L(y.getScrollTop(),y.getContentHeight(),null,0,null);let E=null,S=0;const p=y.getVisibleRanges();if(p.length>0){E=p[0].getStartPosition();const _=y.getTopForPosition(E.lineNumber,E.column);S=y.getScrollTop()-_}return new L(y.getScrollTop(),y.getContentHeight(),E,S,y.getPosition())}constructor(y,E,S,p,_){this._initialScrollTop=y,this._initialContentHeight=E,this._visiblePosition=S,this._visiblePositionScrollDelta=p,this._cursorPosition=_}restore(y){if(!(this._initialContentHeight===y.getContentHeight()&&this._initialScrollTop===y.getScrollTop())&&this._visiblePosition){const E=y.getTopForPosition(this._visiblePosition.lineNumber,this._visiblePosition.column);y.setScrollTop(E+this._visiblePositionScrollDelta)}}restoreRelativeVerticalPositionOfCursor(y){if(this._initialContentHeight===y.getContentHeight()&&this._initialScrollTop===y.getScrollTop())return;const E=y.getPosition();if(!this._cursorPosition||!E)return;const S=y.getTopForLineNumber(E.lineNumber)-y.getTopForLineNumber(this._cursorPosition.lineNumber);y.setScrollTop(y.getScrollTop()+S)}}e.StableEditorScrollState=L}),define(se[148],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.VisibleRanges=e.HorizontalPosition=e.FloatHorizontalRange=e.HorizontalRange=e.LineVisibleRanges=e.RenderingContext=e.RestrictedRenderingContext=void 0;class L{constructor(b,a){this._restrictedRenderingContextBrand=void 0,this._viewLayout=b,this.viewportData=a,this.scrollWidth=this._viewLayout.getScrollWidth(),this.scrollHeight=this._viewLayout.getScrollHeight(),this.visibleRange=this.viewportData.visibleRange,this.bigNumbersDelta=this.viewportData.bigNumbersDelta;const i=this._viewLayout.getCurrentViewport();this.scrollTop=i.top,this.scrollLeft=i.left,this.viewportWidth=i.width,this.viewportHeight=i.height}getScrolledTopFromAbsoluteTop(b){return b-this.scrollTop}getVerticalOffsetForLineNumber(b,a){return this._viewLayout.getVerticalOffsetForLineNumber(b,a)}getVerticalOffsetAfterLineNumber(b,a){return this._viewLayout.getVerticalOffsetAfterLineNumber(b,a)}getDecorationsInViewport(){return this.viewportData.getDecorationsInViewport()}}e.RestrictedRenderingContext=L;class k extends L{constructor(b,a,i){super(b,a),this._renderingContextBrand=void 0,this._viewLines=i}linesVisibleRangesForRange(b,a){return this._viewLines.linesVisibleRangesForRange(b,a)}visibleRangeForPosition(b){return this._viewLines.visibleRangeForPosition(b)}}e.RenderingContext=k;class y{constructor(b,a,i,n){this.outsideRenderedLine=b,this.lineNumber=a,this.ranges=i,this.continuesOnNextLine=n}}e.LineVisibleRanges=y;class E{static from(b){const a=new Array(b.length);for(let i=0,n=b.length;i<n;i++){const t=b[i];a[i]=new E(t.left,t.width)}return a}constructor(b,a){this._horizontalRangeBrand=void 0,this.left=Math.round(b),this.width=Math.round(a)}toString(){return`[${this.left},${this.width}]`}}e.HorizontalRange=E;class S{constructor(b,a){this._floatHorizontalRangeBrand=void 0,this.left=b,this.width=a}toString(){return`[${this.left},${this.width}]`}static compare(b,a){return b.left-a.left}}e.FloatHorizontalRange=S;class p{constructor(b,a){this.outsideRenderedLine=b,this.originalLeft=a,this.left=Math.round(this.originalLeft)}}e.HorizontalPosition=p;class _{constructor(b,a){this.outsideRenderedLine=b,this.ranges=a}}e.VisibleRanges=_}),define(se[493],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DomReadingContext=void 0;class L{get didDomLayout(){return this._didDomLayout}readClientRect(){if(!this._clientRectRead){this._clientRectRead=!0;const y=this._domNode.getBoundingClientRect();this.markDidDomLayout(),this._clientRectDeltaLeft=y.left,this._clientRectScale=y.width/this._domNode.offsetWidth}}get clientRectDeltaLeft(){return this._clientRectRead||this.readClientRect(),this._clientRectDeltaLeft}get clientRectScale(){return this._clientRectRead||this.readClientRect(),this._clientRectScale}constructor(y,E){this._domNode=y,this.endNode=E,this._didDomLayout=!1,this._clientRectDeltaLeft=0,this._clientRectScale=1,this._clientRectRead=!1}markDidDomLayout(){this._didDomLayout=!0}}e.DomReadingContext=L}),define(se[494],oe([1,0,148]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RangeUtil=void 0;class k{static _createRange(){return this._handyReadyRange||(this._handyReadyRange=document.createRange()),this._handyReadyRange}static _detachRange(E,S){E.selectNodeContents(S)}static _readClientRects(E,S,p,_,v){const b=this._createRange();try{return b.setStart(E,S),b.setEnd(p,_),b.getClientRects()}catch{return null}finally{this._detachRange(b,v)}}static _mergeAdjacentRanges(E){if(E.length===1)return E;E.sort(L.FloatHorizontalRange.compare);const S=[];let p=0,_=E[0];for(let v=1,b=E.length;v<b;v++){const a=E[v];_.left+_.width+.9>=a.left?_.width=Math.max(_.width,a.left+a.width-_.left):(S[p++]=_,_=a)}return S[p++]=_,S}static _createHorizontalRangesFromClientRects(E,S,p){if(!E||E.length===0)return null;const _=[];for(let v=0,b=E.length;v<b;v++){const a=E[v];_[v]=new L.FloatHorizontalRange(Math.max(0,(a.left-S)/p),a.width/p)}return this._mergeAdjacentRanges(_)}static readHorizontalRanges(E,S,p,_,v,b){const i=E.children.length-1;if(0>i)return null;if(S=Math.min(i,Math.max(0,S)),_=Math.min(i,Math.max(0,_)),S===_&&p===v&&p===0&&!E.children[S].firstChild){const u=E.children[S].getClientRects();return b.markDidDomLayout(),this._createHorizontalRangesFromClientRects(u,b.clientRectDeltaLeft,b.clientRectScale)}S!==_&&_>0&&v===0&&(_--,v=1073741824);let n=E.children[S].firstChild,t=E.children[_].firstChild;if((!n||!t)&&(!n&&p===0&&S>0&&(n=E.children[S-1].firstChild,p=1073741824),!t&&v===0&&_>0&&(t=E.children[_-1].firstChild,v=1073741824)),!n||!t)return null;p=Math.min(n.textContent.length,Math.max(0,p)),v=Math.min(t.textContent.length,Math.max(0,v));const r=this._readClientRects(n,p,t,v,b.endNode);return b.markDidDomLayout(),this._createHorizontalRangesFromClientRects(r,b.clientRectDeltaLeft,b.clientRectScale)}}e.RangeUtil=k}),define(se[277],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getCharIndex=e.allCharCodes=void 0,e.allCharCodes=(()=>{const k=[];for(let y=32;y<=126;y++)k.push(y);return k.push(65533),k})();const L=(k,y)=>(k-=32,k<0||k>96?y<=2?(k+96)%96:96-1:k);e.getCharIndex=L}),define(se[495],oe([1,0,277,174]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MinimapCharRenderer=void 0;class y{constructor(S,p){this.scale=p,this._minimapCharRendererBrand=void 0,this.charDataNormal=y.soften(S,12/15),this.charDataLight=y.soften(S,50/60)}static soften(S,p){const _=new Uint8ClampedArray(S.length);for(let v=0,b=S.length;v<b;v++)_[v]=(0,k.toUint8)(S[v]*p);return _}renderChar(S,p,_,v,b,a,i,n,t,r,u){const f=1*this.scale,c=2*this.scale,d=u?1:c;if(p+f>S.width||_+d>S.height){console.warn(\"bad render request outside image data\");return}const s=r?this.charDataLight:this.charDataNormal,l=(0,L.getCharIndex)(v,t),o=S.width*4,g=i.r,h=i.g,m=i.b,C=b.r-g,w=b.g-h,D=b.b-m,I=Math.max(a,n),T=S.data;let A=l*f*c,P=_*o+p*4;for(let N=0;N<d;N++){let M=P;for(let R=0;R<f;R++){const x=s[A++]/255*(a/255);T[M++]=g+C*x,T[M++]=h+w*x,T[M++]=m+D*x,T[M++]=I}P+=o}}blockRenderChar(S,p,_,v,b,a,i,n){const t=1*this.scale,r=2*this.scale,u=n?1:r;if(p+t>S.width||_+u>S.height){console.warn(\"bad render request outside image data\");return}const f=S.width*4,c=.5*(b/255),d=a.r,s=a.g,l=a.b,o=v.r-d,g=v.g-s,h=v.b-l,m=d+o*c,C=s+g*c,w=l+h*c,D=Math.max(b,i),I=S.data;let T=_*f+p*4;for(let A=0;A<u;A++){let P=T;for(let N=0;N<t;N++)I[P++]=m,I[P++]=C,I[P++]=w,I[P++]=D;T+=f}}}e.MinimapCharRenderer=y}),define(se[496],oe([1,0,108]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.prebakedMiniMaps=void 0;const k={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15},y=E=>{const S=new Uint8ClampedArray(E.length/2);for(let p=0;p<E.length;p+=2)S[p>>1]=k[E[p]]<<4|k[E[p+1]]&15;return S};e.prebakedMiniMaps={1:(0,L.createSingleCallFunction)(()=>y(\"0000511D6300CF609C709645A78432005642574171487021003C451900274D35D762755E8B629C5BA856AF57BA649530C167D1512A272A3F6038604460398526BCA2A968DB6F8957C768BE5FBE2FB467CF5D8D5B795DC7625B5DFF50DE64C466DB2FC47CD860A65E9A2EB96CB54CE06DA763AB2EA26860524D3763536601005116008177A8705E53AB738E6A982F88BAA35B5F5B626D9C636B449B737E5B7B678598869A662F6B5B8542706C704C80736A607578685B70594A49715A4522E792\")),2:(0,L.createSingleCallFunction)(()=>y(\"000000000000000055394F383D2800008B8B1F210002000081B1CBCBCC820000847AAF6B9AAF2119BE08B8881AD60000A44FD07DCCF107015338130C00000000385972265F390B406E2437634B4B48031B12B8A0847000001E15B29A402F0000000000004B33460B00007A752C2A0000000000004D3900000084394B82013400ABA5CFC7AD9C0302A45A3E5A98AB000089A43382D97900008BA54AA087A70A0248A6A7AE6DBE0000BF6F94987EA40A01A06DCFA7A7A9030496C32F77891D0000A99FB1A0AFA80603B29AB9CA75930D010C0948354D3900000C0948354F37460D0028BE673D8400000000AF9D7B6E00002B007AA8933400007AA642675C2700007984CFB9C3985B768772A8A6B7B20000CAAECAAFC4B700009F94A6009F840009D09F9BA4CA9C0000CC8FC76DC87F0000C991C472A2000000A894A48CA7B501079BA2C9C69BA20000B19A5D3FA89000005CA6009DA2960901B0A7F0669FB200009D009E00B7890000DAD0F5D092820000D294D4C48BD10000B5A7A4A3B1A50402CAB6CBA6A2000000B5A7A4A3B1A8044FCDADD19D9CB00000B7778F7B8AAE0803C9AB5D3F5D3F00009EA09EA0BAB006039EA0989A8C7900009B9EF4D6B7C00000A9A7816CACA80000ABAC84705D3F000096DA635CDC8C00006F486F266F263D4784006124097B00374F6D2D6D2D6D4A3A95872322000000030000000000008D8939130000000000002E22A5C9CBC70600AB25C0B5C9B400061A2DB04CA67001082AA6BEBEBFC606002321DACBC19E03087AA08B6768380000282FBAC0B8CA7A88AD25BBA5A29900004C396C5894A6000040485A6E356E9442A32CD17EADA70000B4237923628600003E2DE9C1D7B500002F25BBA5A2990000231DB6AFB4A804023025C0B5CAB588062B2CBDBEC0C706882435A75CA20000002326BD6A82A908048B4B9A5A668000002423A09CB4BB060025259C9D8A7900001C1FCAB2C7C700002A2A9387ABA200002626A4A47D6E9D14333163A0C87500004B6F9C2D643A257049364936493647358A34438355497F1A0000A24C1D590000D38DFFBDD4CD3126\"))}}),define(se[497],oe([1,0,495,277,496,174]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MinimapCharRendererFactory=void 0;class S{static create(_,v){if(this.lastCreated&&_===this.lastCreated.scale&&v===this.lastFontFamily)return this.lastCreated;let b;return y.prebakedMiniMaps[_]?b=new L.MinimapCharRenderer(y.prebakedMiniMaps[_](),_):b=S.createFromSampleData(S.createSampleData(v).data,_),this.lastFontFamily=v,this.lastCreated=b,b}static createSampleData(_){const v=document.createElement(\"canvas\"),b=v.getContext(\"2d\");v.style.height=\"16px\",v.height=16,v.width=96*10,v.style.width=96*10+\"px\",b.fillStyle=\"#ffffff\",b.font=`bold 16px ${_}`,b.textBaseline=\"middle\";let a=0;for(const i of k.allCharCodes)b.fillText(String.fromCharCode(i),a,16/2),a+=10;return b.getImageData(0,0,96*10,16)}static createFromSampleData(_,v){if(_.length!==61440)throw new Error(\"Unexpected source in MinimapCharRenderer\");const a=S._downsample(_,v);return new L.MinimapCharRenderer(a,v)}static _downsampleChar(_,v,b,a,i){const n=1*i,t=2*i;let r=a,u=0;for(let f=0;f<t;f++){const c=f/t*16,d=(f+1)/t*16;for(let s=0;s<n;s++){const l=s/n*10,o=(s+1)/n*10;let g=0,h=0;for(let C=c;C<d;C++){const w=v+Math.floor(C)*3840,D=1-(C-Math.floor(C));for(let I=l;I<o;I++){const T=1-(I-Math.floor(I)),A=w+Math.floor(I)*4,P=T*D;h+=P,g+=_[A]*_[A+3]/255*P}}const m=g/h;u=Math.max(u,m),b[r++]=(0,E.toUint8)(m)}}return u}static _downsample(_,v){const b=2*v*1*v,a=b*96,i=new Uint8ClampedArray(a);let n=0,t=0,r=0;for(let u=0;u<96;u++)r=Math.max(r,this._downsampleChar(_,t,i,n,v)),n+=b,t+=10*4;if(r>0){const u=255/r;for(let f=0;f<a;f++)i[f]*=u}return i}}e.MinimapCharRendererFactory=S}),define(se[498],oe([1,0,6,2]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DelegatingEditor=void 0;class y extends k.Disposable{constructor(){super(...arguments),this._id=++y.idCounter,this._onDidDispose=this._register(new L.Emitter),this.onDidDispose=this._onDidDispose.event}getId(){return this.getEditorType()+\":v2:\"+this._id}getVisibleColumnFromPosition(S){return this._targetEditor.getVisibleColumnFromPosition(S)}getPosition(){return this._targetEditor.getPosition()}setPosition(S,p=\"api\"){this._targetEditor.setPosition(S,p)}revealLine(S,p=0){this._targetEditor.revealLine(S,p)}revealLineInCenter(S,p=0){this._targetEditor.revealLineInCenter(S,p)}revealLineInCenterIfOutsideViewport(S,p=0){this._targetEditor.revealLineInCenterIfOutsideViewport(S,p)}revealLineNearTop(S,p=0){this._targetEditor.revealLineNearTop(S,p)}revealPosition(S,p=0){this._targetEditor.revealPosition(S,p)}revealPositionInCenter(S,p=0){this._targetEditor.revealPositionInCenter(S,p)}revealPositionInCenterIfOutsideViewport(S,p=0){this._targetEditor.revealPositionInCenterIfOutsideViewport(S,p)}revealPositionNearTop(S,p=0){this._targetEditor.revealPositionNearTop(S,p)}getSelection(){return this._targetEditor.getSelection()}getSelections(){return this._targetEditor.getSelections()}setSelection(S,p=\"api\"){this._targetEditor.setSelection(S,p)}setSelections(S,p=\"api\"){this._targetEditor.setSelections(S,p)}revealLines(S,p,_=0){this._targetEditor.revealLines(S,p,_)}revealLinesInCenter(S,p,_=0){this._targetEditor.revealLinesInCenter(S,p,_)}revealLinesInCenterIfOutsideViewport(S,p,_=0){this._targetEditor.revealLinesInCenterIfOutsideViewport(S,p,_)}revealLinesNearTop(S,p,_=0){this._targetEditor.revealLinesNearTop(S,p,_)}revealRange(S,p=0,_=!1,v=!0){this._targetEditor.revealRange(S,p,_,v)}revealRangeInCenter(S,p=0){this._targetEditor.revealRangeInCenter(S,p)}revealRangeInCenterIfOutsideViewport(S,p=0){this._targetEditor.revealRangeInCenterIfOutsideViewport(S,p)}revealRangeNearTop(S,p=0){this._targetEditor.revealRangeNearTop(S,p)}revealRangeNearTopIfOutsideViewport(S,p=0){this._targetEditor.revealRangeNearTopIfOutsideViewport(S,p)}revealRangeAtTop(S,p=0){this._targetEditor.revealRangeAtTop(S,p)}getSupportedActions(){return this._targetEditor.getSupportedActions()}focus(){this._targetEditor.focus()}trigger(S,p,_){this._targetEditor.trigger(S,p,_)}createDecorationsCollection(S){return this._targetEditor.createDecorationsCollection(S)}changeDecorations(S){return this._targetEditor.changeDecorations(S)}}e.DelegatingEditor=y,y.idCounter=0}),define(se[499],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ObjectPool=void 0;class L{constructor(y){this._create=y,this._unused=new Set,this._used=new Set,this._itemData=new Map}getUnusedObj(y){var E;let S;if(this._unused.size===0)S=this._create(y),this._itemData.set(S,y);else{const p=[...this._unused.values()];S=(E=p.find(_=>this._itemData.get(_).getId()===y.getId()))!==null&&E!==void 0?E:p[0],this._unused.delete(S),this._itemData.set(S,y),S.setData(y)}return this._used.add(S),{object:S,dispose:()=>{this._used.delete(S),this._unused.size>5?S.dispose():this._unused.add(S)}}}dispose(){for(const y of this._used)y.dispose();for(const y of this._unused)y.dispose();this._used.clear(),this._unused.clear()}}e.ObjectPool=L}),define(se[278],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.diffEditorDefaultOptions=void 0,e.diffEditorDefaultOptions={enableSplitViewResizing:!0,splitViewDefaultRatio:.5,renderSideBySide:!0,renderMarginRevertIcon:!0,maxComputationTime:5e3,maxFileSize:50,ignoreTrimWhitespace:!0,renderIndicators:!0,originalEditable:!1,diffCodeLens:!1,renderOverviewRuler:!0,diffWordWrap:\"inherit\",diffAlgorithm:\"advanced\",accessibilityVerbose:!1,experimental:{showMoves:!1,showEmptyDecorations:!0},hideUnchangedRegions:{enabled:!1,contextLineCount:3,minimumLineCount:3,revealLineCount:20},isInEmbeddedEditor:!1,onlyShowAccessibleDiffViewer:!1,renderSideBySideInlineBreakpoint:900,useInlineViewWhenSpaceIsLimited:!0}}),define(se[149],oe([1,0,6]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorZoom=void 0,e.EditorZoom=new class{constructor(){this._zoomLevel=0,this._onDidChangeZoomLevel=new L.Emitter,this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event}getZoomLevel(){return this._zoomLevel}setZoomLevel(k){k=Math.min(Math.max(-5,k),20),this._zoomLevel!==k&&(this._zoomLevel=k,this._onDidChangeZoomLevel.fire(this._zoomLevel))}}}),define(se[128],oe([1,0,174]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CharacterSet=e.CharacterClassifier=void 0;class k{constructor(S){const p=(0,L.toUint8)(S);this._defaultValue=p,this._asciiMap=k._createAsciiMap(p),this._map=new Map}static _createAsciiMap(S){const p=new Uint8Array(256);return p.fill(S),p}set(S,p){const _=(0,L.toUint8)(p);S>=0&&S<256?this._asciiMap[S]=_:this._map.set(S,_)}get(S){return S>=0&&S<256?this._asciiMap[S]:this._map.get(S)||this._defaultValue}clear(){this._asciiMap.fill(this._defaultValue),this._map.clear()}}e.CharacterClassifier=k;class y{constructor(){this._actual=new k(0)}add(S){this._actual.set(S,1)}has(S){return this._actual.get(S)===1}clear(){return this._actual.clear()}}e.CharacterSet=y}),define(se[85],oe([1,0,11]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CursorColumns=void 0;class k{static _nextVisibleColumn(E,S,p){return E===9?k.nextRenderTabStop(S,p):L.isFullWidthCharacter(E)||L.isEmojiImprecise(E)?S+2:S+1}static visibleColumnFromColumn(E,S,p){const _=Math.min(S-1,E.length),v=E.substring(0,_),b=new L.GraphemeIterator(v);let a=0;for(;!b.eol();){const i=L.getNextCodePoint(v,_,b.offset);b.nextGraphemeLength(),a=this._nextVisibleColumn(i,a,p)}return a}static columnFromVisibleColumn(E,S,p){if(S<=0)return 1;const _=E.length,v=new L.GraphemeIterator(E);let b=0,a=1;for(;!v.eol();){const i=L.getNextCodePoint(E,_,v.offset);v.nextGraphemeLength();const n=this._nextVisibleColumn(i,b,p),t=v.offset+1;if(n>=S){const r=S-b;return n-S<r?t:a}b=n,a=t}return _+1}static nextRenderTabStop(E,S){return E+S-E%S}static nextIndentTabStop(E,S){return E+S-E%S}static prevRenderTabStop(E,S){return Math.max(0,E-1-(E-1)%S)}static prevIndentTabStop(E,S){return Math.max(0,E-1-(E-1)%S)}}e.CursorColumns=k}),define(se[129],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.countEOL=void 0;function L(k){let y=0,E=0,S=0,p=0;for(let _=0,v=k.length;_<v;_++){const b=k.charCodeAt(_);b===13?(y===0&&(E=_),y++,_+1<v&&k.charCodeAt(_+1)===10?(p|=2,_++):p|=3,S=_+1):b===10&&(p|=1,y===0&&(E=_),y++,S=_+1)}return y===0&&(E=k.length),[y,E,k.length-S,p]}e.countEOL=L}),define(se[203],oe([1,0,11,85]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.normalizeIndentation=void 0;function y(S,p,_){let v=0;for(let a=0;a<S.length;a++)S.charAt(a)===\"\t\"?v=k.CursorColumns.nextIndentTabStop(v,p):v++;let b=\"\";if(!_){const a=Math.floor(v/p);v=v%p;for(let i=0;i<a;i++)b+=\"\t\"}for(let a=0;a<v;a++)b+=\" \";return b}function E(S,p,_){let v=L.firstNonWhitespaceIndex(S);return v===-1&&(v=S.length),y(S.substring(0,v),p,_)+S.substring(v)}e.normalizeIndentation=E}),define(se[73],oe([1,0,12]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OffsetRangeSet=e.OffsetRange=void 0;class k{static addRange(S,p){let _=0;for(;_<p.length&&p[_].endExclusive<S.start;)_++;let v=_;for(;v<p.length&&p[v].start<=S.endExclusive;)v++;if(_===v)p.splice(_,0,S);else{const b=Math.min(S.start,p[_].start),a=Math.max(S.endExclusive,p[v-1].endExclusive);p.splice(_,v-_,new k(b,a))}}static ofLength(S){return new k(0,S)}static ofStartAndLength(S,p){return new k(S,S+p)}constructor(S,p){if(this.start=S,this.endExclusive=p,S>p)throw new L.BugIndicatingError(`Invalid range: ${this.toString()}`)}get isEmpty(){return this.start===this.endExclusive}delta(S){return new k(this.start+S,this.endExclusive+S)}deltaStart(S){return new k(this.start+S,this.endExclusive)}deltaEnd(S){return new k(this.start,this.endExclusive+S)}get length(){return this.endExclusive-this.start}toString(){return`[${this.start}, ${this.endExclusive})`}contains(S){return this.start<=S&&S<this.endExclusive}join(S){return new k(Math.min(this.start,S.start),Math.max(this.endExclusive,S.endExclusive))}intersect(S){const p=Math.max(this.start,S.start),_=Math.min(this.endExclusive,S.endExclusive);if(p<=_)return new k(p,_)}intersects(S){const p=Math.max(this.start,S.start),_=Math.min(this.endExclusive,S.endExclusive);return p<_}isBefore(S){return this.endExclusive<=S.start}isAfter(S){return this.start>=S.endExclusive}slice(S){return S.slice(this.start,this.endExclusive)}clip(S){if(this.isEmpty)throw new L.BugIndicatingError(`Invalid clipping range: ${this.toString()}`);return Math.max(this.start,Math.min(this.endExclusive-1,S))}clipCyclic(S){if(this.isEmpty)throw new L.BugIndicatingError(`Invalid clipping range: ${this.toString()}`);return S<this.start?this.endExclusive-(this.start-S)%this.length:S>=this.endExclusive?this.start+(S-this.start)%this.length:S}forEach(S){for(let p=this.start;p<this.endExclusive;p++)S(p)}}e.OffsetRange=k;class y{constructor(){this._sortedRanges=[]}addRange(S){let p=0;for(;p<this._sortedRanges.length&&this._sortedRanges[p].endExclusive<S.start;)p++;let _=p;for(;_<this._sortedRanges.length&&this._sortedRanges[_].start<=S.endExclusive;)_++;if(p===_)this._sortedRanges.splice(p,0,S);else{const v=Math.min(S.start,this._sortedRanges[p].start),b=Math.max(S.endExclusive,this._sortedRanges[_-1].endExclusive);this._sortedRanges.splice(p,_-p,new k(v,b))}}toString(){return this._sortedRanges.map(S=>S.toString()).join(\", \")}intersectsStrict(S){let p=0;for(;p<this._sortedRanges.length&&this._sortedRanges[p].endExclusive<=S.start;)p++;return p<this._sortedRanges.length&&this._sortedRanges[p].start<S.endExclusive}intersectWithRange(S){const p=new y;for(const _ of this._sortedRanges){const v=_.intersect(S);v&&p.addRange(v)}return p}intersectWithRangeLength(S){return this.intersectWithRange(S).length}get length(){return this._sortedRanges.reduce((S,p)=>S+p.length,0)}}e.OffsetRangeSet=y}),define(se[10],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Position=void 0;class L{constructor(y,E){this.lineNumber=y,this.column=E}with(y=this.lineNumber,E=this.column){return y===this.lineNumber&&E===this.column?this:new L(y,E)}delta(y=0,E=0){return this.with(this.lineNumber+y,this.column+E)}equals(y){return L.equals(this,y)}static equals(y,E){return!y&&!E?!0:!!y&&!!E&&y.lineNumber===E.lineNumber&&y.column===E.column}isBefore(y){return L.isBefore(this,y)}static isBefore(y,E){return y.lineNumber<E.lineNumber?!0:E.lineNumber<y.lineNumber?!1:y.column<E.column}isBeforeOrEqual(y){return L.isBeforeOrEqual(this,y)}static isBeforeOrEqual(y,E){return y.lineNumber<E.lineNumber?!0:E.lineNumber<y.lineNumber?!1:y.column<=E.column}static compare(y,E){const S=y.lineNumber|0,p=E.lineNumber|0;if(S===p){const _=y.column|0,v=E.column|0;return _-v}return S-p}clone(){return new L(this.lineNumber,this.column)}toString(){return\"(\"+this.lineNumber+\",\"+this.column+\")\"}static lift(y){return new L(y.lineNumber,y.column)}static isIPosition(y){return y&&typeof y.lineNumber==\"number\"&&typeof y.column==\"number\"}toJSON(){return{lineNumber:this.lineNumber,column:this.column}}}e.Position=L}),define(se[279],oe([1,0,10]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewUserInputEvents=void 0;class k{constructor(E){this.onKeyDown=null,this.onKeyUp=null,this.onContextMenu=null,this.onMouseMove=null,this.onMouseLeave=null,this.onMouseDown=null,this.onMouseUp=null,this.onMouseDrag=null,this.onMouseDrop=null,this.onMouseDropCanceled=null,this.onMouseWheel=null,this._coordinatesConverter=E}emitKeyDown(E){var S;(S=this.onKeyDown)===null||S===void 0||S.call(this,E)}emitKeyUp(E){var S;(S=this.onKeyUp)===null||S===void 0||S.call(this,E)}emitContextMenu(E){var S;(S=this.onContextMenu)===null||S===void 0||S.call(this,this._convertViewToModelMouseEvent(E))}emitMouseMove(E){var S;(S=this.onMouseMove)===null||S===void 0||S.call(this,this._convertViewToModelMouseEvent(E))}emitMouseLeave(E){var S;(S=this.onMouseLeave)===null||S===void 0||S.call(this,this._convertViewToModelMouseEvent(E))}emitMouseDown(E){var S;(S=this.onMouseDown)===null||S===void 0||S.call(this,this._convertViewToModelMouseEvent(E))}emitMouseUp(E){var S;(S=this.onMouseUp)===null||S===void 0||S.call(this,this._convertViewToModelMouseEvent(E))}emitMouseDrag(E){var S;(S=this.onMouseDrag)===null||S===void 0||S.call(this,this._convertViewToModelMouseEvent(E))}emitMouseDrop(E){var S;(S=this.onMouseDrop)===null||S===void 0||S.call(this,this._convertViewToModelMouseEvent(E))}emitMouseDropCanceled(){var E;(E=this.onMouseDropCanceled)===null||E===void 0||E.call(this)}emitMouseWheel(E){var S;(S=this.onMouseWheel)===null||S===void 0||S.call(this,E)}_convertViewToModelMouseEvent(E){return E.target?{event:E.event,target:this._convertViewToModelMouseTarget(E.target)}:E}_convertViewToModelMouseTarget(E){return k.convertViewToModelMouseTarget(E,this._coordinatesConverter)}static convertViewToModelMouseTarget(E,S){const p={...E};return p.position&&(p.position=S.convertViewPositionToModelPosition(p.position)),p.range&&(p.range=S.convertViewRangeToModelRange(p.range)),(p.type===5||p.type===8)&&(p.detail=this.convertViewToModelViewZoneData(p.detail,S)),p}static convertViewToModelViewZoneData(E,S){return{viewZoneId:E.viewZoneId,positionBefore:E.positionBefore?S.convertViewPositionToModelPosition(E.positionBefore):E.positionBefore,positionAfter:E.positionAfter?S.convertViewPositionToModelPosition(E.positionAfter):E.positionAfter,position:S.convertViewPositionToModelPosition(E.position),afterLineNumber:S.convertViewPositionToModelPosition(new L.Position(E.afterLineNumber,1)).lineNumber}}}e.ViewUserInputEvents=k}),define(se[5],oe([1,0,10]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Range=void 0;class k{constructor(E,S,p,_){E>p||E===p&&S>_?(this.startLineNumber=p,this.startColumn=_,this.endLineNumber=E,this.endColumn=S):(this.startLineNumber=E,this.startColumn=S,this.endLineNumber=p,this.endColumn=_)}isEmpty(){return k.isEmpty(this)}static isEmpty(E){return E.startLineNumber===E.endLineNumber&&E.startColumn===E.endColumn}containsPosition(E){return k.containsPosition(this,E)}static containsPosition(E,S){return!(S.lineNumber<E.startLineNumber||S.lineNumber>E.endLineNumber||S.lineNumber===E.startLineNumber&&S.column<E.startColumn||S.lineNumber===E.endLineNumber&&S.column>E.endColumn)}static strictContainsPosition(E,S){return!(S.lineNumber<E.startLineNumber||S.lineNumber>E.endLineNumber||S.lineNumber===E.startLineNumber&&S.column<=E.startColumn||S.lineNumber===E.endLineNumber&&S.column>=E.endColumn)}containsRange(E){return k.containsRange(this,E)}static containsRange(E,S){return!(S.startLineNumber<E.startLineNumber||S.endLineNumber<E.startLineNumber||S.startLineNumber>E.endLineNumber||S.endLineNumber>E.endLineNumber||S.startLineNumber===E.startLineNumber&&S.startColumn<E.startColumn||S.endLineNumber===E.endLineNumber&&S.endColumn>E.endColumn)}strictContainsRange(E){return k.strictContainsRange(this,E)}static strictContainsRange(E,S){return!(S.startLineNumber<E.startLineNumber||S.endLineNumber<E.startLineNumber||S.startLineNumber>E.endLineNumber||S.endLineNumber>E.endLineNumber||S.startLineNumber===E.startLineNumber&&S.startColumn<=E.startColumn||S.endLineNumber===E.endLineNumber&&S.endColumn>=E.endColumn)}plusRange(E){return k.plusRange(this,E)}static plusRange(E,S){let p,_,v,b;return S.startLineNumber<E.startLineNumber?(p=S.startLineNumber,_=S.startColumn):S.startLineNumber===E.startLineNumber?(p=S.startLineNumber,_=Math.min(S.startColumn,E.startColumn)):(p=E.startLineNumber,_=E.startColumn),S.endLineNumber>E.endLineNumber?(v=S.endLineNumber,b=S.endColumn):S.endLineNumber===E.endLineNumber?(v=S.endLineNumber,b=Math.max(S.endColumn,E.endColumn)):(v=E.endLineNumber,b=E.endColumn),new k(p,_,v,b)}intersectRanges(E){return k.intersectRanges(this,E)}static intersectRanges(E,S){let p=E.startLineNumber,_=E.startColumn,v=E.endLineNumber,b=E.endColumn;const a=S.startLineNumber,i=S.startColumn,n=S.endLineNumber,t=S.endColumn;return p<a?(p=a,_=i):p===a&&(_=Math.max(_,i)),v>n?(v=n,b=t):v===n&&(b=Math.min(b,t)),p>v||p===v&&_>b?null:new k(p,_,v,b)}equalsRange(E){return k.equalsRange(this,E)}static equalsRange(E,S){return!E&&!S?!0:!!E&&!!S&&E.startLineNumber===S.startLineNumber&&E.startColumn===S.startColumn&&E.endLineNumber===S.endLineNumber&&E.endColumn===S.endColumn}getEndPosition(){return k.getEndPosition(this)}static getEndPosition(E){return new L.Position(E.endLineNumber,E.endColumn)}getStartPosition(){return k.getStartPosition(this)}static getStartPosition(E){return new L.Position(E.startLineNumber,E.startColumn)}toString(){return\"[\"+this.startLineNumber+\",\"+this.startColumn+\" -> \"+this.endLineNumber+\",\"+this.endColumn+\"]\"}setEndPosition(E,S){return new k(this.startLineNumber,this.startColumn,E,S)}setStartPosition(E,S){return new k(E,S,this.endLineNumber,this.endColumn)}collapseToStart(){return k.collapseToStart(this)}static collapseToStart(E){return new k(E.startLineNumber,E.startColumn,E.startLineNumber,E.startColumn)}collapseToEnd(){return k.collapseToEnd(this)}static collapseToEnd(E){return new k(E.endLineNumber,E.endColumn,E.endLineNumber,E.endColumn)}delta(E){return new k(this.startLineNumber+E,this.startColumn,this.endLineNumber+E,this.endColumn)}static fromPositions(E,S=E){return new k(E.lineNumber,E.column,S.lineNumber,S.column)}static lift(E){return E?new k(E.startLineNumber,E.startColumn,E.endLineNumber,E.endColumn):null}static isIRange(E){return E&&typeof E.startLineNumber==\"number\"&&typeof E.startColumn==\"number\"&&typeof E.endLineNumber==\"number\"&&typeof E.endColumn==\"number\"}static areIntersectingOrTouching(E,S){return!(E.endLineNumber<S.startLineNumber||E.endLineNumber===S.startLineNumber&&E.endColumn<S.startColumn||S.endLineNumber<E.startLineNumber||S.endLineNumber===E.startLineNumber&&S.endColumn<E.startColumn)}static areIntersecting(E,S){return!(E.endLineNumber<S.startLineNumber||E.endLineNumber===S.startLineNumber&&E.endColumn<=S.startColumn||S.endLineNumber<E.startLineNumber||S.endLineNumber===E.startLineNumber&&S.endColumn<=E.startColumn)}static compareRangesUsingStarts(E,S){if(E&&S){const v=E.startLineNumber|0,b=S.startLineNumber|0;if(v===b){const a=E.startColumn|0,i=S.startColumn|0;if(a===i){const n=E.endLineNumber|0,t=S.endLineNumber|0;if(n===t){const r=E.endColumn|0,u=S.endColumn|0;return r-u}return n-t}return a-i}return v-b}return(E?1:0)-(S?1:0)}static compareRangesUsingEnds(E,S){return E.endLineNumber===S.endLineNumber?E.endColumn===S.endColumn?E.startLineNumber===S.startLineNumber?E.startColumn-S.startColumn:E.startLineNumber-S.startLineNumber:E.endColumn-S.endColumn:E.endLineNumber-S.endLineNumber}static spansMultipleLines(E){return E.endLineNumber>E.startLineNumber}toJSON(){return this}}e.Range=k}),define(se[280],oe([1,0,11,5]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PagedScreenReaderStrategy=e.TextAreaState=e._debugComposition=void 0,e._debugComposition=!1;class y{constructor(p,_,v,b,a){this.value=p,this.selectionStart=_,this.selectionEnd=v,this.selection=b,this.newlineCountBeforeSelection=a}toString(){return`[ <${this.value}>, selectionStart: ${this.selectionStart}, selectionEnd: ${this.selectionEnd}]`}static readFromTextArea(p,_){const v=p.getValue(),b=p.getSelectionStart(),a=p.getSelectionEnd();let i;if(_){const n=v.substring(0,b),t=_.value.substring(0,_.selectionStart);n===t&&(i=_.newlineCountBeforeSelection)}return new y(v,b,a,null,i)}collapseSelection(){return this.selectionStart===this.value.length?this:new y(this.value,this.value.length,this.value.length,null,void 0)}writeToTextArea(p,_,v){e._debugComposition&&console.log(`writeToTextArea ${p}: ${this.toString()}`),_.setValue(p,this.value),v&&_.setSelectionRange(p,this.selectionStart,this.selectionEnd)}deduceEditorPosition(p){var _,v,b,a,i,n,t,r;if(p<=this.selectionStart){const c=this.value.substring(p,this.selectionStart);return this._finishDeduceEditorPosition((v=(_=this.selection)===null||_===void 0?void 0:_.getStartPosition())!==null&&v!==void 0?v:null,c,-1)}if(p>=this.selectionEnd){const c=this.value.substring(this.selectionEnd,p);return this._finishDeduceEditorPosition((a=(b=this.selection)===null||b===void 0?void 0:b.getEndPosition())!==null&&a!==void 0?a:null,c,1)}const u=this.value.substring(this.selectionStart,p);if(u.indexOf(String.fromCharCode(8230))===-1)return this._finishDeduceEditorPosition((n=(i=this.selection)===null||i===void 0?void 0:i.getStartPosition())!==null&&n!==void 0?n:null,u,1);const f=this.value.substring(p,this.selectionEnd);return this._finishDeduceEditorPosition((r=(t=this.selection)===null||t===void 0?void 0:t.getEndPosition())!==null&&r!==void 0?r:null,f,-1)}_finishDeduceEditorPosition(p,_,v){let b=0,a=-1;for(;(a=_.indexOf(`\n`,a+1))!==-1;)b++;return[p,v*_.length,b]}static deduceInput(p,_,v){if(!p)return{text:\"\",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0};e._debugComposition&&(console.log(\"------------------------deduceInput\"),console.log(`PREVIOUS STATE: ${p.toString()}`),console.log(`CURRENT STATE: ${_.toString()}`));const b=Math.min(L.commonPrefixLength(p.value,_.value),p.selectionStart,_.selectionStart),a=Math.min(L.commonSuffixLength(p.value,_.value),p.value.length-p.selectionEnd,_.value.length-_.selectionEnd),i=p.value.substring(b,p.value.length-a),n=_.value.substring(b,_.value.length-a),t=p.selectionStart-b,r=p.selectionEnd-b,u=_.selectionStart-b,f=_.selectionEnd-b;if(e._debugComposition&&(console.log(`AFTER DIFFING PREVIOUS STATE: <${i}>, selectionStart: ${t}, selectionEnd: ${r}`),console.log(`AFTER DIFFING CURRENT STATE: <${n}>, selectionStart: ${u}, selectionEnd: ${f}`)),u===f){const d=p.selectionStart-b;return e._debugComposition&&console.log(`REMOVE PREVIOUS: ${d} chars`),{text:n,replacePrevCharCnt:d,replaceNextCharCnt:0,positionDelta:0}}const c=r-t;return{text:n,replacePrevCharCnt:c,replaceNextCharCnt:0,positionDelta:0}}static deduceAndroidCompositionInput(p,_){if(!p)return{text:\"\",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0};if(e._debugComposition&&(console.log(\"------------------------deduceAndroidCompositionInput\"),console.log(`PREVIOUS STATE: ${p.toString()}`),console.log(`CURRENT STATE: ${_.toString()}`)),p.value===_.value)return{text:\"\",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:_.selectionEnd-p.selectionEnd};const v=Math.min(L.commonPrefixLength(p.value,_.value),p.selectionEnd),b=Math.min(L.commonSuffixLength(p.value,_.value),p.value.length-p.selectionEnd),a=p.value.substring(v,p.value.length-b),i=_.value.substring(v,_.value.length-b),n=p.selectionStart-v,t=p.selectionEnd-v,r=_.selectionStart-v,u=_.selectionEnd-v;return e._debugComposition&&(console.log(`AFTER DIFFING PREVIOUS STATE: <${a}>, selectionStart: ${n}, selectionEnd: ${t}`),console.log(`AFTER DIFFING CURRENT STATE: <${i}>, selectionStart: ${r}, selectionEnd: ${u}`)),{text:i,replacePrevCharCnt:t,replaceNextCharCnt:a.length-t,positionDelta:u-i.length}}}e.TextAreaState=y,y.EMPTY=new y(\"\",0,0,null,void 0);class E{static _getPageOfLine(p,_){return Math.floor((p-1)/_)}static _getRangeForPage(p,_){const v=p*_,b=v+1,a=v+_;return new k.Range(b,1,a+1,1)}static fromEditorSelection(p,_,v,b){const i=E._getPageOfLine(_.startLineNumber,v),n=E._getRangeForPage(i,v),t=E._getPageOfLine(_.endLineNumber,v),r=E._getRangeForPage(t,v);let u=n.intersectRanges(new k.Range(1,1,_.startLineNumber,_.startColumn));if(b&&p.getValueLengthInRange(u,1)>500){const g=p.modifyPosition(u.getEndPosition(),-500);u=k.Range.fromPositions(g,u.getEndPosition())}const f=p.getValueInRange(u,1),c=p.getLineCount(),d=p.getLineMaxColumn(c);let s=r.intersectRanges(new k.Range(_.endLineNumber,_.endColumn,c,d));if(b&&p.getValueLengthInRange(s,1)>500){const g=p.modifyPosition(s.getStartPosition(),500);s=k.Range.fromPositions(s.getStartPosition(),g)}const l=p.getValueInRange(s,1);let o;if(i===t||i+1===t)o=p.getValueInRange(_,1);else{const g=n.intersectRanges(_),h=r.intersectRanges(_);o=p.getValueInRange(g,1)+String.fromCharCode(8230)+p.getValueInRange(h,1)}return b&&o.length>2*500&&(o=o.substring(0,500)+String.fromCharCode(8230)+o.substring(o.length-500,o.length)),new y(f+o+l,f.length,f.length+o.length,_,u.endLineNumber-u.startLineNumber)}}e.PagedScreenReaderStrategy=E}),define(se[74],oe([1,0,5]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditOperation=void 0;class k{static insert(E,S){return{range:new L.Range(E.lineNumber,E.column,E.lineNumber,E.column),text:S,forceMoveMarkers:!0}}static delete(E){return{range:E,text:null}}static replace(E,S){return{range:E,text:S}}static replaceMove(E,S){return{range:E,text:S,forceMoveMarkers:!0}}}e.EditOperation=k}),define(se[500],oe([1,0,11,74,5]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.trimTrailingWhitespace=e.TrimTrailingWhitespaceCommand=void 0;class E{constructor(_,v){this._selection=_,this._cursors=v,this._selectionId=null}getEditOperations(_,v){const b=S(_,this._cursors);for(let a=0,i=b.length;a<i;a++){const n=b[a];v.addEditOperation(n.range,n.text)}this._selectionId=v.trackSelection(this._selection)}computeCursorState(_,v){return v.getTrackedSelection(this._selectionId)}}e.TrimTrailingWhitespaceCommand=E;function S(p,_){_.sort((n,t)=>n.lineNumber===t.lineNumber?n.column-t.column:n.lineNumber-t.lineNumber);for(let n=_.length-2;n>=0;n--)_[n].lineNumber===_[n+1].lineNumber&&_.splice(n,1);const v=[];let b=0,a=0;const i=_.length;for(let n=1,t=p.getLineCount();n<=t;n++){const r=p.getLineContent(n),u=r.length+1;let f=0;if(a<i&&_[a].lineNumber===n&&(f=_[a].column,a++,f===u)||r.length===0)continue;const c=L.lastNonWhitespaceIndex(r);let d=0;if(c===-1)d=1;else if(c!==r.length-1)d=c+2;else continue;d=Math.max(f,d),v[b++]=k.EditOperation.delete(new y.Range(n,d,n,u))}return v}e.trimTrailingWhitespace=S}),define(se[62],oe([1,0,12,73,5,60]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LineRangeSet=e.LineRange=void 0;class S{static fromRangeInclusive(v){return new S(v.startLineNumber,v.endLineNumber+1)}static joinMany(v){if(v.length===0)return[];let b=new p(v[0].slice());for(let a=1;a<v.length;a++)b=b.getUnion(new p(v[a].slice()));return b.ranges}static ofLength(v,b){return new S(v,v+b)}static deserialize(v){return new S(v[0],v[1])}constructor(v,b){if(v>b)throw new L.BugIndicatingError(`startLineNumber ${v} cannot be after endLineNumberExclusive ${b}`);this.startLineNumber=v,this.endLineNumberExclusive=b}contains(v){return this.startLineNumber<=v&&v<this.endLineNumberExclusive}get isEmpty(){return this.startLineNumber===this.endLineNumberExclusive}delta(v){return new S(this.startLineNumber+v,this.endLineNumberExclusive+v)}deltaLength(v){return new S(this.startLineNumber,this.endLineNumberExclusive+v)}get length(){return this.endLineNumberExclusive-this.startLineNumber}join(v){return new S(Math.min(this.startLineNumber,v.startLineNumber),Math.max(this.endLineNumberExclusive,v.endLineNumberExclusive))}toString(){return`[${this.startLineNumber},${this.endLineNumberExclusive})`}intersect(v){const b=Math.max(this.startLineNumber,v.startLineNumber),a=Math.min(this.endLineNumberExclusive,v.endLineNumberExclusive);if(b<=a)return new S(b,a)}intersectsStrict(v){return this.startLineNumber<v.endLineNumberExclusive&&v.startLineNumber<this.endLineNumberExclusive}overlapOrTouch(v){return this.startLineNumber<=v.endLineNumberExclusive&&v.startLineNumber<=this.endLineNumberExclusive}equals(v){return this.startLineNumber===v.startLineNumber&&this.endLineNumberExclusive===v.endLineNumberExclusive}toInclusiveRange(){return this.isEmpty?null:new y.Range(this.startLineNumber,1,this.endLineNumberExclusive-1,Number.MAX_SAFE_INTEGER)}toExclusiveRange(){return new y.Range(this.startLineNumber,1,this.endLineNumberExclusive,1)}mapToLineArray(v){const b=[];for(let a=this.startLineNumber;a<this.endLineNumberExclusive;a++)b.push(v(a));return b}forEach(v){for(let b=this.startLineNumber;b<this.endLineNumberExclusive;b++)v(b)}serialize(){return[this.startLineNumber,this.endLineNumberExclusive]}includes(v){return this.startLineNumber<=v&&v<this.endLineNumberExclusive}toOffsetRange(){return new k.OffsetRange(this.startLineNumber-1,this.endLineNumberExclusive-1)}}e.LineRange=S;class p{constructor(v=[]){this._normalizedRanges=v}get ranges(){return this._normalizedRanges}addRange(v){if(v.length===0)return;const b=(0,E.findFirstIdxMonotonousOrArrLen)(this._normalizedRanges,i=>i.endLineNumberExclusive>=v.startLineNumber),a=(0,E.findLastIdxMonotonous)(this._normalizedRanges,i=>i.startLineNumber<=v.endLineNumberExclusive)+1;if(b===a)this._normalizedRanges.splice(b,0,v);else if(b===a-1){const i=this._normalizedRanges[b];this._normalizedRanges[b]=i.join(v)}else{const i=this._normalizedRanges[b].join(this._normalizedRanges[a-1]).join(v);this._normalizedRanges.splice(b,a-b,i)}}contains(v){const b=(0,E.findLastMonotonous)(this._normalizedRanges,a=>a.startLineNumber<=v);return!!b&&b.endLineNumberExclusive>v}intersects(v){const b=(0,E.findLastMonotonous)(this._normalizedRanges,a=>a.startLineNumber<v.endLineNumberExclusive);return!!b&&b.endLineNumberExclusive>v.startLineNumber}getUnion(v){if(this._normalizedRanges.length===0)return v;if(v._normalizedRanges.length===0)return this;const b=[];let a=0,i=0,n=null;for(;a<this._normalizedRanges.length||i<v._normalizedRanges.length;){let t=null;if(a<this._normalizedRanges.length&&i<v._normalizedRanges.length){const r=this._normalizedRanges[a],u=v._normalizedRanges[i];r.startLineNumber<u.startLineNumber?(t=r,a++):(t=u,i++)}else a<this._normalizedRanges.length?(t=this._normalizedRanges[a],a++):(t=v._normalizedRanges[i],i++);n===null?n=t:n.endLineNumberExclusive>=t.startLineNumber?n=new S(n.startLineNumber,Math.max(n.endLineNumberExclusive,t.endLineNumberExclusive)):(b.push(n),n=t)}return n!==null&&b.push(n),new p(b)}subtractFrom(v){const b=(0,E.findFirstIdxMonotonousOrArrLen)(this._normalizedRanges,t=>t.endLineNumberExclusive>=v.startLineNumber),a=(0,E.findLastIdxMonotonous)(this._normalizedRanges,t=>t.startLineNumber<=v.endLineNumberExclusive)+1;if(b===a)return new p([v]);const i=[];let n=v.startLineNumber;for(let t=b;t<a;t++){const r=this._normalizedRanges[t];r.startLineNumber>n&&i.push(new S(n,r.startLineNumber)),n=r.endLineNumberExclusive}return n<v.endLineNumberExclusive&&i.push(new S(n,v.endLineNumberExclusive)),new p(i)}toString(){return this._normalizedRanges.map(v=>v.toString()).join(\", \")}getIntersection(v){const b=[];let a=0,i=0;for(;a<this._normalizedRanges.length&&i<v._normalizedRanges.length;){const n=this._normalizedRanges[a],t=v._normalizedRanges[i],r=n.intersect(t);r&&!r.isEmpty&&b.push(r),n.endLineNumberExclusive<t.endLineNumberExclusive?a++:i++}return new p(b)}getWithDelta(v){return new p(this._normalizedRanges.map(b=>b.delta(v)))}}e.LineRangeSet=p}),define(se[281],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RGBA8=void 0;class L{constructor(y,E,S,p){this._rgba8Brand=void 0,this.r=L._clamp(y),this.g=L._clamp(E),this.b=L._clamp(S),this.a=L._clamp(p)}equals(y){return this.r===y.r&&this.g===y.g&&this.b===y.b&&this.a===y.a}static _clamp(y){return y<0?0:y>255?255:y|0}}e.RGBA8=L,L.Empty=new L(0,0,0,0)}),define(se[24],oe([1,0,10,5]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Selection=void 0;class y extends k.Range{constructor(S,p,_,v){super(S,p,_,v),this.selectionStartLineNumber=S,this.selectionStartColumn=p,this.positionLineNumber=_,this.positionColumn=v}toString(){return\"[\"+this.selectionStartLineNumber+\",\"+this.selectionStartColumn+\" -> \"+this.positionLineNumber+\",\"+this.positionColumn+\"]\"}equalsSelection(S){return y.selectionsEqual(this,S)}static selectionsEqual(S,p){return S.selectionStartLineNumber===p.selectionStartLineNumber&&S.selectionStartColumn===p.selectionStartColumn&&S.positionLineNumber===p.positionLineNumber&&S.positionColumn===p.positionColumn}getDirection(){return this.selectionStartLineNumber===this.startLineNumber&&this.selectionStartColumn===this.startColumn?0:1}setEndPosition(S,p){return this.getDirection()===0?new y(this.startLineNumber,this.startColumn,S,p):new y(S,p,this.startLineNumber,this.startColumn)}getPosition(){return new L.Position(this.positionLineNumber,this.positionColumn)}getSelectionStart(){return new L.Position(this.selectionStartLineNumber,this.selectionStartColumn)}setStartPosition(S,p){return this.getDirection()===0?new y(S,p,this.endLineNumber,this.endColumn):new y(this.endLineNumber,this.endColumn,S,p)}static fromPositions(S,p=S){return new y(S.lineNumber,S.column,p.lineNumber,p.column)}static fromRange(S,p){return p===0?new y(S.startLineNumber,S.startColumn,S.endLineNumber,S.endColumn):new y(S.endLineNumber,S.endColumn,S.startLineNumber,S.startColumn)}static liftSelection(S){return new y(S.selectionStartLineNumber,S.selectionStartColumn,S.positionLineNumber,S.positionColumn)}static selectionsArrEqual(S,p){if(S&&!p||!S&&p)return!1;if(!S&&!p)return!0;if(S.length!==p.length)return!1;for(let _=0,v=S.length;_<v;_++)if(!this.selectionsEqual(S[_],p[_]))return!1;return!0}static isISelection(S){return S&&typeof S.selectionStartLineNumber==\"number\"&&typeof S.selectionStartColumn==\"number\"&&typeof S.positionLineNumber==\"number\"&&typeof S.positionColumn==\"number\"}static createWithDirection(S,p,_,v,b){return b===0?new y(S,p,_,v):new y(_,v,S,p)}}e.Selection=y}),define(se[130],oe([1,0,24]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ReplaceCommandThatPreservesSelection=e.ReplaceCommandWithOffsetCursorState=e.ReplaceCommandWithoutChangingPosition=e.ReplaceCommandThatSelectsText=e.ReplaceCommand=void 0;class k{constructor(v,b,a=!1){this._range=v,this._text=b,this.insertsAutoWhitespace=a}getEditOperations(v,b){b.addTrackedEditOperation(this._range,this._text)}computeCursorState(v,b){const i=b.getInverseEditOperations()[0].range;return L.Selection.fromPositions(i.getEndPosition())}}e.ReplaceCommand=k;class y{constructor(v,b){this._range=v,this._text=b}getEditOperations(v,b){b.addTrackedEditOperation(this._range,this._text)}computeCursorState(v,b){const i=b.getInverseEditOperations()[0].range;return L.Selection.fromRange(i,0)}}e.ReplaceCommandThatSelectsText=y;class E{constructor(v,b,a=!1){this._range=v,this._text=b,this.insertsAutoWhitespace=a}getEditOperations(v,b){b.addTrackedEditOperation(this._range,this._text)}computeCursorState(v,b){const i=b.getInverseEditOperations()[0].range;return L.Selection.fromPositions(i.getStartPosition())}}e.ReplaceCommandWithoutChangingPosition=E;class S{constructor(v,b,a,i,n=!1){this._range=v,this._text=b,this._columnDeltaOffset=i,this._lineNumberDeltaOffset=a,this.insertsAutoWhitespace=n}getEditOperations(v,b){b.addTrackedEditOperation(this._range,this._text)}computeCursorState(v,b){const i=b.getInverseEditOperations()[0].range;return L.Selection.fromPositions(i.getEndPosition().delta(this._lineNumberDeltaOffset,this._columnDeltaOffset))}}e.ReplaceCommandWithOffsetCursorState=S;class p{constructor(v,b,a,i=!1){this._range=v,this._text=b,this._initialSelection=a,this._forceMoveMarkers=i,this._selectionId=null}getEditOperations(v,b){b.addTrackedEditOperation(this._range,this._text,this._forceMoveMarkers),this._selectionId=b.trackSelection(this._initialSelection)}computeCursorState(v,b){return b.getTrackedSelection(this._selectionId)}}e.ReplaceCommandThatPreservesSelection=p}),define(se[501],oe([1,0,5,24]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CompositionSurroundSelectionCommand=e.SurroundSelectionCommand=void 0;class y{constructor(p,_,v){this._range=p,this._charBeforeSelection=_,this._charAfterSelection=v}getEditOperations(p,_){_.addTrackedEditOperation(new L.Range(this._range.startLineNumber,this._range.startColumn,this._range.startLineNumber,this._range.startColumn),this._charBeforeSelection),_.addTrackedEditOperation(new L.Range(this._range.endLineNumber,this._range.endColumn,this._range.endLineNumber,this._range.endColumn),this._charAfterSelection)}computeCursorState(p,_){const v=_.getInverseEditOperations(),b=v[0].range,a=v[1].range;return new k.Selection(b.endLineNumber,b.endColumn,a.endLineNumber,a.endColumn-this._charAfterSelection.length)}}e.SurroundSelectionCommand=y;class E{constructor(p,_,v){this._position=p,this._text=_,this._charAfter=v}getEditOperations(p,_){_.addTrackedEditOperation(new L.Range(this._position.lineNumber,this._position.column,this._position.lineNumber,this._position.column),this._text+this._charAfter)}computeCursorState(p,_){const b=_.getInverseEditOperations()[0].range;return new k.Selection(b.endLineNumber,b.startColumn,b.endLineNumber,b.endColumn-this._charAfter.length)}}e.CompositionSurroundSelectionCommand=E}),define(se[179],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EDITOR_MODEL_DEFAULTS=void 0,e.EDITOR_MODEL_DEFAULTS={tabSize:4,indentSize:4,insertSpaces:!0,detectIndentation:!0,trimAutoWhitespace:!0,largeFileOptimizations:!0,bracketPairColorizationOptions:{enabled:!0,independentColorPoolPerBracketType:!1}}}),define(se[150],oe([1,0,128]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getMapForWordSeparators=e.WordCharacterClassifier=void 0;class k extends L.CharacterClassifier{constructor(S){super(0);for(let p=0,_=S.length;p<_;p++)this.set(S.charCodeAt(p),2);this.set(32,1),this.set(9,1)}}e.WordCharacterClassifier=k;function y(E){const S={};return p=>(S.hasOwnProperty(p)||(S[p]=E(p)),S[p])}e.getMapForWordSeparators=y(E=>new k(E))}),define(se[151],oe([1,0,52,66]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getWordAtText=e.ensureValidWordDefinition=e.DEFAULT_WORD_REGEXP=e.USUAL_WORD_SEPARATORS=void 0,e.USUAL_WORD_SEPARATORS=\"`~!@#$%^&*()-=+[{]}\\\\|;:'\\\",.<>/?\";function y(v=\"\"){let b=\"(-?\\\\d*\\\\.\\\\d\\\\w*)|([^\";for(const a of e.USUAL_WORD_SEPARATORS)v.indexOf(a)>=0||(b+=\"\\\\\"+a);return b+=\"\\\\s]+)\",new RegExp(b,\"g\")}e.DEFAULT_WORD_REGEXP=y();function E(v){let b=e.DEFAULT_WORD_REGEXP;if(v&&v instanceof RegExp)if(v.global)b=v;else{let a=\"g\";v.ignoreCase&&(a+=\"i\"),v.multiline&&(a+=\"m\"),v.unicode&&(a+=\"u\"),b=new RegExp(v.source,a)}return b.lastIndex=0,b}e.ensureValidWordDefinition=E;const S=new k.LinkedList;S.unshift({maxLen:1e3,windowSize:15,timeBudget:150});function p(v,b,a,i,n){if(b=E(b),n||(n=L.Iterable.first(S)),a.length>n.maxLen){let c=v-n.maxLen/2;return c<0?c=0:i+=c,a=a.substring(c,v+n.maxLen/2),p(v,b,a,i,n)}const t=Date.now(),r=v-1-i;let u=-1,f=null;for(let c=1;!(Date.now()-t>=n.timeBudget);c++){const d=r-n.windowSize*c;b.lastIndex=Math.max(0,d);const s=_(b,a,r,u);if(!s&&f||(f=s,d<=0))break;u=d}if(f){const c={word:f[0],startColumn:i+1+f.index,endColumn:i+1+f.index+f[0].length};return b.lastIndex=0,c}return null}e.getWordAtText=p;function _(v,b,a,i){let n;for(;n=v.exec(b);){const t=n.index||0;if(t<=a&&v.lastIndex>=a)return n;if(i>0&&t>i)return null}return null}}),define(se[282],oe([1,0,85]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AtomicTabMoveOperations=void 0;class k{static whitespaceVisibleColumn(E,S,p){const _=E.length;let v=0,b=-1,a=-1;for(let i=0;i<_;i++){if(i===S)return[b,a,v];switch(v%p===0&&(b=i,a=v),E.charCodeAt(i)){case 32:v+=1;break;case 9:v=L.CursorColumns.nextRenderTabStop(v,p);break;default:return[-1,-1,-1]}}return S===_?[b,a,v]:[-1,-1,-1]}static atomicPosition(E,S,p,_){const v=E.length,[b,a,i]=k.whitespaceVisibleColumn(E,S,p);if(i===-1)return-1;let n;switch(_){case 0:n=!0;break;case 1:n=!1;break;case 2:if(i%p===0)return S;n=i%p<=p/2;break}if(n){if(b===-1)return-1;let u=a;for(let f=b;f<v;++f){if(u===a+p)return b;switch(E.charCodeAt(f)){case 32:u+=1;break;case 9:u=L.CursorColumns.nextRenderTabStop(u,p);break;default:return-1}}return u===a+p?b:-1}const t=L.CursorColumns.nextRenderTabStop(i,p);let r=i;for(let u=S;u<v;u++){if(r===t)return u;switch(E.charCodeAt(u)){case 32:r+=1;break;case 9:r=L.CursorColumns.nextRenderTabStop(r,p);break;default:return-1}}return r===t?v:-1}}e.AtomicTabMoveOperations=k}),define(se[502],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CursorContext=void 0;class L{constructor(y,E,S,p){this._cursorContextBrand=void 0,this.model=y,this.viewModel=E,this.coordinatesConverter=S,this.cursorConfig=p}}e.CursorContext=L}),define(se[152],oe([1,0,13,12,73]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DateTimeout=e.InfiniteTimeout=e.OffsetPair=e.SequenceDiff=e.DiffAlgorithmResult=void 0;class E{static trivial(a,i){return new E([new S(y.OffsetRange.ofLength(a.length),y.OffsetRange.ofLength(i.length))],!1)}static trivialTimedOut(a,i){return new E([new S(y.OffsetRange.ofLength(a.length),y.OffsetRange.ofLength(i.length))],!0)}constructor(a,i){this.diffs=a,this.hitTimeout=i}}e.DiffAlgorithmResult=E;class S{static invert(a,i){const n=[];return(0,L.forEachAdjacent)(a,(t,r)=>{n.push(S.fromOffsetPairs(t?t.getEndExclusives():p.zero,r?r.getStarts():new p(i,(t?t.seq2Range.endExclusive-t.seq1Range.endExclusive:0)+i)))}),n}static fromOffsetPairs(a,i){return new S(new y.OffsetRange(a.offset1,i.offset1),new y.OffsetRange(a.offset2,i.offset2))}constructor(a,i){this.seq1Range=a,this.seq2Range=i}swap(){return new S(this.seq2Range,this.seq1Range)}toString(){return`${this.seq1Range} <-> ${this.seq2Range}`}join(a){return new S(this.seq1Range.join(a.seq1Range),this.seq2Range.join(a.seq2Range))}delta(a){return a===0?this:new S(this.seq1Range.delta(a),this.seq2Range.delta(a))}deltaStart(a){return a===0?this:new S(this.seq1Range.deltaStart(a),this.seq2Range.deltaStart(a))}deltaEnd(a){return a===0?this:new S(this.seq1Range.deltaEnd(a),this.seq2Range.deltaEnd(a))}intersect(a){const i=this.seq1Range.intersect(a.seq1Range),n=this.seq2Range.intersect(a.seq2Range);if(!(!i||!n))return new S(i,n)}getStarts(){return new p(this.seq1Range.start,this.seq2Range.start)}getEndExclusives(){return new p(this.seq1Range.endExclusive,this.seq2Range.endExclusive)}}e.SequenceDiff=S;class p{constructor(a,i){this.offset1=a,this.offset2=i}toString(){return`${this.offset1} <-> ${this.offset2}`}delta(a){return a===0?this:new p(this.offset1+a,this.offset2+a)}equals(a){return this.offset1===a.offset1&&this.offset2===a.offset2}}e.OffsetPair=p,p.zero=new p(0,0),p.max=new p(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER);class _{isValid(){return!0}}e.InfiniteTimeout=_,_.instance=new _;class v{constructor(a){if(this.timeout=a,this.startTime=Date.now(),this.valid=!0,a<=0)throw new k.BugIndicatingError(\"timeout must be positive\")}isValid(){if(!(Date.now()-this.startTime<this.timeout)&&this.valid){this.valid=!1;debugger}return this.valid}}e.DateTimeout=v}),define(se[283],oe([1,0,73,152]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MyersDiffAlgorithm=void 0;class y{compute(v,b,a=k.InfiniteTimeout.instance){if(v.length===0||b.length===0)return k.DiffAlgorithmResult.trivial(v,b);const i=v,n=b;function t(g,h){for(;g<i.length&&h<n.length&&i.getElement(g)===n.getElement(h);)g++,h++;return g}let r=0;const u=new S;u.set(0,t(0,0));const f=new p;f.set(0,u.get(0)===0?null:new E(null,0,0,u.get(0)));let c=0;e:for(;;){if(r++,!a.isValid())return k.DiffAlgorithmResult.trivialTimedOut(i,n);const g=-Math.min(r,n.length+r%2),h=Math.min(r,i.length+r%2);for(c=g;c<=h;c+=2){let m=0;const C=c===h?-1:u.get(c+1),w=c===g?-1:u.get(c-1)+1;m++;const D=Math.min(Math.max(C,w),i.length),I=D-c;if(m++,D>i.length||I>n.length)continue;const T=t(D,I);u.set(c,T);const A=D===C?f.get(c+1):f.get(c-1);if(f.set(c,T!==D?new E(A,D,I,T-D):A),u.get(c)===i.length&&u.get(c)-c===n.length)break e}}let d=f.get(c);const s=[];let l=i.length,o=n.length;for(;;){const g=d?d.x+d.length:0,h=d?d.y+d.length:0;if((g!==l||h!==o)&&s.push(new k.SequenceDiff(new L.OffsetRange(g,l),new L.OffsetRange(h,o))),!d)break;l=d.x,o=d.y,d=d.prev}return s.reverse(),new k.DiffAlgorithmResult(s,!1)}}e.MyersDiffAlgorithm=y;class E{constructor(v,b,a,i){this.prev=v,this.x=b,this.y=a,this.length=i}}class S{constructor(){this.positiveArr=new Int32Array(10),this.negativeArr=new Int32Array(10)}get(v){return v<0?(v=-v-1,this.negativeArr[v]):this.positiveArr[v]}set(v,b){if(v<0){if(v=-v-1,v>=this.negativeArr.length){const a=this.negativeArr;this.negativeArr=new Int32Array(a.length*2),this.negativeArr.set(a)}this.negativeArr[v]=b}else{if(v>=this.positiveArr.length){const a=this.positiveArr;this.positiveArr=new Int32Array(a.length*2),this.positiveArr.set(a)}this.positiveArr[v]=b}}}class p{constructor(){this.positiveArr=[],this.negativeArr=[]}get(v){return v<0?(v=-v-1,this.negativeArr[v]):this.positiveArr[v]}set(v,b){v<0?(v=-v-1,this.negativeArr[v]=b):this.positiveArr[v]=b}}}),define(se[284],oe([1,0,13,73,152]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.removeVeryShortMatchingTextBetweenLongDiffs=e.removeVeryShortMatchingLinesBetweenDiffs=e.extendDiffsToEntireWordIfAppropriate=e.removeShortMatches=e.optimizeSequenceDiffs=void 0;function E(t,r,u){let f=u;return f=S(t,r,f),f=S(t,r,f),f=p(t,r,f),f}e.optimizeSequenceDiffs=E;function S(t,r,u){if(u.length===0)return u;const f=[];f.push(u[0]);for(let d=1;d<u.length;d++){const s=f[f.length-1];let l=u[d];if(l.seq1Range.isEmpty||l.seq2Range.isEmpty){const o=l.seq1Range.start-s.seq1Range.endExclusive;let g;for(g=1;g<=o&&!(t.getElement(l.seq1Range.start-g)!==t.getElement(l.seq1Range.endExclusive-g)||r.getElement(l.seq2Range.start-g)!==r.getElement(l.seq2Range.endExclusive-g));g++);if(g--,g===o){f[f.length-1]=new y.SequenceDiff(new k.OffsetRange(s.seq1Range.start,l.seq1Range.endExclusive-o),new k.OffsetRange(s.seq2Range.start,l.seq2Range.endExclusive-o));continue}l=l.delta(-g)}f.push(l)}const c=[];for(let d=0;d<f.length-1;d++){const s=f[d+1];let l=f[d];if(l.seq1Range.isEmpty||l.seq2Range.isEmpty){const o=s.seq1Range.start-l.seq1Range.endExclusive;let g;for(g=0;g<o&&!(!t.isStronglyEqual(l.seq1Range.start+g,l.seq1Range.endExclusive+g)||!r.isStronglyEqual(l.seq2Range.start+g,l.seq2Range.endExclusive+g));g++);if(g===o){f[d+1]=new y.SequenceDiff(new k.OffsetRange(l.seq1Range.start+o,s.seq1Range.endExclusive),new k.OffsetRange(l.seq2Range.start+o,s.seq2Range.endExclusive));continue}g>0&&(l=l.delta(g))}c.push(l)}return f.length>0&&c.push(f[f.length-1]),c}function p(t,r,u){if(!t.getBoundaryScore||!r.getBoundaryScore)return u;for(let f=0;f<u.length;f++){const c=f>0?u[f-1]:void 0,d=u[f],s=f+1<u.length?u[f+1]:void 0,l=new k.OffsetRange(c?c.seq1Range.endExclusive+1:0,s?s.seq1Range.start-1:t.length),o=new k.OffsetRange(c?c.seq2Range.endExclusive+1:0,s?s.seq2Range.start-1:r.length);d.seq1Range.isEmpty?u[f]=_(d,t,r,l,o):d.seq2Range.isEmpty&&(u[f]=_(d.swap(),r,t,o,l).swap())}return u}function _(t,r,u,f,c){let s=1;for(;t.seq1Range.start-s>=f.start&&t.seq2Range.start-s>=c.start&&u.isStronglyEqual(t.seq2Range.start-s,t.seq2Range.endExclusive-s)&&s<100;)s++;s--;let l=0;for(;t.seq1Range.start+l<f.endExclusive&&t.seq2Range.endExclusive+l<c.endExclusive&&u.isStronglyEqual(t.seq2Range.start+l,t.seq2Range.endExclusive+l)&&l<100;)l++;if(s===0&&l===0)return t;let o=0,g=-1;for(let h=-s;h<=l;h++){const m=t.seq2Range.start+h,C=t.seq2Range.endExclusive+h,w=t.seq1Range.start+h,D=r.getBoundaryScore(w)+u.getBoundaryScore(m)+u.getBoundaryScore(C);D>g&&(g=D,o=h)}return t.delta(o)}function v(t,r,u){const f=[];for(const c of u){const d=f[f.length-1];if(!d){f.push(c);continue}c.seq1Range.start-d.seq1Range.endExclusive<=2||c.seq2Range.start-d.seq2Range.endExclusive<=2?f[f.length-1]=new y.SequenceDiff(d.seq1Range.join(c.seq1Range),d.seq2Range.join(c.seq2Range)):f.push(c)}return f}e.removeShortMatches=v;function b(t,r,u){const f=y.SequenceDiff.invert(u,t.length),c=[];let d=new y.OffsetPair(0,0);function s(o,g){if(o.offset1<d.offset1||o.offset2<d.offset2)return;const h=t.findWordContaining(o.offset1),m=r.findWordContaining(o.offset2);if(!h||!m)return;let C=new y.SequenceDiff(h,m);const w=C.intersect(g);let D=w.seq1Range.length,I=w.seq2Range.length;for(;f.length>0;){const T=f[0];if(!(T.seq1Range.intersects(h)||T.seq2Range.intersects(m)))break;const P=t.findWordContaining(T.seq1Range.start),N=r.findWordContaining(T.seq2Range.start),M=new y.SequenceDiff(P,N),R=M.intersect(T);if(D+=R.seq1Range.length,I+=R.seq2Range.length,C=C.join(M),C.seq1Range.endExclusive>=T.seq1Range.endExclusive)f.shift();else break}D+I<(C.seq1Range.length+C.seq2Range.length)*2/3&&c.push(C),d=C.getEndExclusives()}for(;f.length>0;){const o=f.shift();o.seq1Range.isEmpty||(s(o.getStarts(),o),s(o.getEndExclusives().delta(-1),o))}return a(u,c)}e.extendDiffsToEntireWordIfAppropriate=b;function a(t,r){const u=[];for(;t.length>0||r.length>0;){const f=t[0],c=r[0];let d;f&&(!c||f.seq1Range.start<c.seq1Range.start)?d=t.shift():d=r.shift(),u.length>0&&u[u.length-1].seq1Range.endExclusive>=d.seq1Range.start?u[u.length-1]=u[u.length-1].join(d):u.push(d)}return u}function i(t,r,u){let f=u;if(f.length===0)return f;let c=0,d;do{d=!1;const s=[f[0]];for(let l=1;l<f.length;l++){let h=function(C,w){const D=new k.OffsetRange(g.seq1Range.endExclusive,o.seq1Range.start);return t.getText(D).replace(/\\s/g,\"\").length<=4&&(C.seq1Range.length+C.seq2Range.length>5||w.seq1Range.length+w.seq2Range.length>5)};const o=f[l],g=s[s.length-1];h(g,o)?(d=!0,s[s.length-1]=s[s.length-1].join(o)):s.push(o)}f=s}while(c++<10&&d);return f}e.removeVeryShortMatchingLinesBetweenDiffs=i;function n(t,r,u){let f=u;if(f.length===0)return f;let c=0,d;do{d=!1;const l=[f[0]];for(let o=1;o<f.length;o++){let m=function(w,D){const I=new k.OffsetRange(h.seq1Range.endExclusive,g.seq1Range.start);if(t.countLinesIn(I)>5||I.length>500)return!1;const A=t.getText(I).trim();if(A.length>20||A.split(/\\r\\n|\\r|\\n/).length>1)return!1;const P=t.countLinesIn(w.seq1Range),N=w.seq1Range.length,M=r.countLinesIn(w.seq2Range),R=w.seq2Range.length,x=t.countLinesIn(D.seq1Range),O=D.seq1Range.length,B=r.countLinesIn(D.seq2Range),W=D.seq2Range.length,V=2*40+50;function K(F){return Math.min(F,V)}return Math.pow(Math.pow(K(P*40+N),1.5)+Math.pow(K(M*40+R),1.5),1.5)+Math.pow(Math.pow(K(x*40+O),1.5)+Math.pow(K(B*40+W),1.5),1.5)>(V**1.5)**1.5*1.3};const g=f[o],h=l[l.length-1];m(h,g)?(d=!0,l[l.length-1]=l[l.length-1].join(g)):l.push(g)}f=l}while(c++<10&&d);const s=[];return(0,L.forEachWithNeighbors)(f,(l,o,g)=>{let h=o;function m(A){return A.length>0&&A.trim().length<=3&&o.seq1Range.length+o.seq2Range.length>100}const C=t.extendToFullLines(o.seq1Range),w=t.getText(new k.OffsetRange(C.start,o.seq1Range.start));m(w)&&(h=h.deltaStart(-w.length));const D=t.getText(new k.OffsetRange(o.seq1Range.endExclusive,C.endExclusive));m(D)&&(h=h.deltaEnd(D.length));const I=y.SequenceDiff.fromOffsetPairs(l?l.getEndExclusives():y.OffsetPair.zero,g?g.getStarts():y.OffsetPair.max),T=h.intersect(I);s.length>0&&T.getStarts().equals(s[s.length-1].getEndExclusives())?s[s.length-1]=s[s.length-1].join(T):s.push(T)}),s}e.removeVeryShortMatchingTextBetweenLongDiffs=n}),define(se[503],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LineSequence=void 0;class L{constructor(E,S){this.trimmedHash=E,this.lines=S}getElement(E){return this.trimmedHash[E]}get length(){return this.trimmedHash.length}getBoundaryScore(E){const S=E===0?0:k(this.lines[E-1]),p=E===this.lines.length?0:k(this.lines[E]);return 1e3-(S+p)}getText(E){return this.lines.slice(E.start,E.endExclusive).join(`\n`)}isStronglyEqual(E,S){return this.lines[E]===this.lines[S]}}e.LineSequence=L;function k(y){let E=0;for(;E<y.length&&(y.charCodeAt(E)===32||y.charCodeAt(E)===9);)E++;return E}}),define(se[204],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LineRangeFragment=e.isSpace=e.Array2D=void 0;class L{constructor(S,p){this.width=S,this.height=p,this.array=[],this.array=new Array(S*p)}get(S,p){return this.array[S+p*this.width]}set(S,p,_){this.array[S+p*this.width]=_}}e.Array2D=L;function k(E){return E===32||E===9}e.isSpace=k;class y{static getKey(S){let p=this.chrKeys.get(S);return p===void 0&&(p=this.chrKeys.size,this.chrKeys.set(S,p)),p}constructor(S,p,_){this.range=S,this.lines=p,this.source=_,this.histogram=[];let v=0;for(let b=S.startLineNumber-1;b<S.endLineNumberExclusive-1;b++){const a=p[b];for(let n=0;n<a.length;n++){v++;const t=a[n],r=y.getKey(t);this.histogram[r]=(this.histogram[r]||0)+1}v++;const i=y.getKey(`\n`);this.histogram[i]=(this.histogram[i]||0)+1}this.totalCount=v}computeSimilarity(S){var p,_;let v=0;const b=Math.max(this.histogram.length,S.histogram.length);for(let a=0;a<b;a++)v+=Math.abs(((p=this.histogram[a])!==null&&p!==void 0?p:0)-((_=S.histogram[a])!==null&&_!==void 0?_:0));return 1-v/(this.totalCount+S.totalCount)}}e.LineRangeFragment=y,y.chrKeys=new Map}),define(se[504],oe([1,0,73,152,204]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DynamicProgrammingDiffing=void 0;class E{compute(p,_,v=k.InfiniteTimeout.instance,b){if(p.length===0||_.length===0)return k.DiffAlgorithmResult.trivial(p,_);const a=new y.Array2D(p.length,_.length),i=new y.Array2D(p.length,_.length),n=new y.Array2D(p.length,_.length);for(let s=0;s<p.length;s++)for(let l=0;l<_.length;l++){if(!v.isValid())return k.DiffAlgorithmResult.trivialTimedOut(p,_);const o=s===0?0:a.get(s-1,l),g=l===0?0:a.get(s,l-1);let h;p.getElement(s)===_.getElement(l)?(s===0||l===0?h=0:h=a.get(s-1,l-1),s>0&&l>0&&i.get(s-1,l-1)===3&&(h+=n.get(s-1,l-1)),h+=b?b(s,l):1):h=-1;const m=Math.max(o,g,h);if(m===h){const C=s>0&&l>0?n.get(s-1,l-1):0;n.set(s,l,C+1),i.set(s,l,3)}else m===o?(n.set(s,l,0),i.set(s,l,1)):m===g&&(n.set(s,l,0),i.set(s,l,2));a.set(s,l,m)}const t=[];let r=p.length,u=_.length;function f(s,l){(s+1!==r||l+1!==u)&&t.push(new k.SequenceDiff(new L.OffsetRange(s+1,r),new L.OffsetRange(l+1,u))),r=s,u=l}let c=p.length-1,d=_.length-1;for(;c>=0&&d>=0;)i.get(c,d)===3?(f(c,d),c--,d--):i.get(c,d)===1?c--:d--;return f(-1,-1),t.reverse(),new k.DiffAlgorithmResult(t,!1)}}e.DynamicProgrammingDiffing=E}),define(se[285],oe([1,0,60,73,10,5,204]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LinesSliceCharSequence=void 0;class p{constructor(n,t,r){this.lines=n,this.considerWhitespaceChanges=r,this.elements=[],this.firstCharOffsetByLine=[],this.additionalOffsetByLine=[];let u=!1;t.start>0&&t.endExclusive>=n.length&&(t=new k.OffsetRange(t.start-1,t.endExclusive),u=!0),this.lineRange=t,this.firstCharOffsetByLine[0]=0;for(let f=this.lineRange.start;f<this.lineRange.endExclusive;f++){let c=n[f],d=0;if(u)d=c.length,c=\"\",u=!1;else if(!r){const s=c.trimStart();d=c.length-s.length,c=s.trimEnd()}this.additionalOffsetByLine.push(d);for(let s=0;s<c.length;s++)this.elements.push(c.charCodeAt(s));f<n.length-1&&(this.elements.push(`\n`.charCodeAt(0)),this.firstCharOffsetByLine[f-this.lineRange.start+1]=this.elements.length)}this.additionalOffsetByLine.push(0)}toString(){return`Slice: \"${this.text}\"`}get text(){return this.getText(new k.OffsetRange(0,this.length))}getText(n){return this.elements.slice(n.start,n.endExclusive).map(t=>String.fromCharCode(t)).join(\"\")}getElement(n){return this.elements[n]}get length(){return this.elements.length}getBoundaryScore(n){const t=a(n>0?this.elements[n-1]:-1),r=a(n<this.elements.length?this.elements[n]:-1);if(t===7&&r===8)return 0;if(t===8)return 150;let u=0;return t!==r&&(u+=10,t===0&&r===1&&(u+=1)),u+=b(t),u+=b(r),u}translateOffset(n){if(this.lineRange.isEmpty)return new y.Position(this.lineRange.start+1,1);const t=(0,L.findLastIdxMonotonous)(this.firstCharOffsetByLine,r=>r<=n);return new y.Position(this.lineRange.start+t+1,n-this.firstCharOffsetByLine[t]+this.additionalOffsetByLine[t]+1)}translateRange(n){return E.Range.fromPositions(this.translateOffset(n.start),this.translateOffset(n.endExclusive))}findWordContaining(n){if(n<0||n>=this.elements.length||!_(this.elements[n]))return;let t=n;for(;t>0&&_(this.elements[t-1]);)t--;let r=n;for(;r<this.elements.length&&_(this.elements[r]);)r++;return new k.OffsetRange(t,r)}countLinesIn(n){return this.translateOffset(n.endExclusive).lineNumber-this.translateOffset(n.start).lineNumber}isStronglyEqual(n,t){return this.elements[n]===this.elements[t]}extendToFullLines(n){var t,r;const u=(t=(0,L.findLastMonotonous)(this.firstCharOffsetByLine,c=>c<=n.start))!==null&&t!==void 0?t:0,f=(r=(0,L.findFirstMonotonous)(this.firstCharOffsetByLine,c=>n.endExclusive<=c))!==null&&r!==void 0?r:this.elements.length;return new k.OffsetRange(u,f)}}e.LinesSliceCharSequence=p;function _(i){return i>=97&&i<=122||i>=65&&i<=90||i>=48&&i<=57}const v={[0]:0,[1]:0,[2]:0,[3]:10,[4]:2,[5]:30,[6]:3,[7]:10,[8]:10};function b(i){return v[i]}function a(i){return i===10?8:i===13?7:(0,S.isSpace)(i)?6:i>=97&&i<=122?0:i>=65&&i<=90?1:i>=48&&i<=57?2:i===-1?3:i===44||i===59?5:4}}),define(se[205],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MovedText=e.LinesDiff=void 0;class L{constructor(E,S,p){this.changes=E,this.moves=S,this.hitTimeout=p}}e.LinesDiff=L;class k{constructor(E,S){this.lineRangeMapping=E,this.changes=S}}e.MovedText=k}),define(se[112],oe([1,0,62]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RangeMapping=e.DetailedLineRangeMapping=e.LineRangeMapping=void 0;class k{static inverse(p,_,v){const b=[];let a=1,i=1;for(const t of p){const r=new k(new L.LineRange(a,t.original.startLineNumber),new L.LineRange(i,t.modified.startLineNumber));r.modified.isEmpty||b.push(r),a=t.original.endLineNumberExclusive,i=t.modified.endLineNumberExclusive}const n=new k(new L.LineRange(a,_+1),new L.LineRange(i,v+1));return n.modified.isEmpty||b.push(n),b}static clip(p,_,v){const b=[];for(const a of p){const i=a.original.intersect(_),n=a.modified.intersect(v);i&&!i.isEmpty&&n&&!n.isEmpty&&b.push(new k(i,n))}return b}constructor(p,_){this.original=p,this.modified=_}toString(){return`{${this.original.toString()}->${this.modified.toString()}}`}flip(){return new k(this.modified,this.original)}join(p){return new k(this.original.join(p.original),this.modified.join(p.modified))}}e.LineRangeMapping=k;class y extends k{constructor(p,_,v){super(p,_),this.innerChanges=v}flip(){var p;return new y(this.modified,this.original,(p=this.innerChanges)===null||p===void 0?void 0:p.map(_=>_.flip()))}}e.DetailedLineRangeMapping=y;class E{constructor(p,_){this.originalRange=p,this.modifiedRange=_}toString(){return`{${this.originalRange.toString()}->${this.modifiedRange.toString()}}`}flip(){return new E(this.modifiedRange,this.originalRange)}}e.RangeMapping=E}),define(se[505],oe([1,0,152,112,13,60,53,62,73,285,204,283]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.computeMovedLines=void 0;function i(d,s,l,o,g,h){let{moves:m,excludedChanges:C}=t(d,s,l,h);if(!h.isValid())return[];const w=d.filter(I=>!C.has(I)),D=r(w,o,g,s,l,h);return(0,y.pushMany)(m,D),m=f(m),m=m.filter(I=>{const T=I.original.toOffsetRange().slice(s).map(P=>P.trim());return T.join(`\n`).length>=15&&n(T,P=>P.length>=2)>=2}),m=c(d,m),m}e.computeMovedLines=i;function n(d,s){let l=0;for(const o of d)s(o)&&l++;return l}function t(d,s,l,o){const g=[],h=d.filter(w=>w.modified.isEmpty&&w.original.length>=3).map(w=>new b.LineRangeFragment(w.original,s,w)),m=new Set(d.filter(w=>w.original.isEmpty&&w.modified.length>=3).map(w=>new b.LineRangeFragment(w.modified,l,w))),C=new Set;for(const w of h){let D=-1,I;for(const T of m){const A=w.computeSimilarity(T);A>D&&(D=A,I=T)}if(D>.9&&I&&(m.delete(I),g.push(new k.LineRangeMapping(w.range,I.range)),C.add(w.source),C.add(I.source)),!o.isValid())return{moves:g,excludedChanges:C}}return{moves:g,excludedChanges:C}}function r(d,s,l,o,g,h){const m=[],C=new S.SetMap;for(const A of d)for(let P=A.original.startLineNumber;P<A.original.endLineNumberExclusive-2;P++){const N=`${s[P-1]}:${s[P+1-1]}:${s[P+2-1]}`;C.add(N,{range:new p.LineRange(P,P+3)})}const w=[];d.sort((0,y.compareBy)(A=>A.modified.startLineNumber,y.numberComparator));for(const A of d){let P=[];for(let N=A.modified.startLineNumber;N<A.modified.endLineNumberExclusive-2;N++){const M=`${l[N-1]}:${l[N+1-1]}:${l[N+2-1]}`,R=new p.LineRange(N,N+3),x=[];C.forEach(M,({range:O})=>{for(const W of P)if(W.originalLineRange.endLineNumberExclusive+1===O.endLineNumberExclusive&&W.modifiedLineRange.endLineNumberExclusive+1===R.endLineNumberExclusive){W.originalLineRange=new p.LineRange(W.originalLineRange.startLineNumber,O.endLineNumberExclusive),W.modifiedLineRange=new p.LineRange(W.modifiedLineRange.startLineNumber,R.endLineNumberExclusive),x.push(W);return}const B={modifiedLineRange:R,originalLineRange:O};w.push(B),x.push(B)}),P=x}if(!h.isValid())return[]}w.sort((0,y.reverseOrder)((0,y.compareBy)(A=>A.modifiedLineRange.length,y.numberComparator)));const D=new p.LineRangeSet,I=new p.LineRangeSet;for(const A of w){const P=A.modifiedLineRange.startLineNumber-A.originalLineRange.startLineNumber,N=D.subtractFrom(A.modifiedLineRange),M=I.subtractFrom(A.originalLineRange).getWithDelta(P),R=N.getIntersection(M);for(const x of R.ranges){if(x.length<3)continue;const O=x,B=x.delta(-P);m.push(new k.LineRangeMapping(B,O)),D.addRange(O),I.addRange(B)}}m.sort((0,y.compareBy)(A=>A.original.startLineNumber,y.numberComparator));const T=new E.MonotonousArray(d);for(let A=0;A<m.length;A++){const P=m[A],N=T.findLastMonotonous(K=>K.original.startLineNumber<=P.original.startLineNumber),M=(0,E.findLastMonotonous)(d,K=>K.modified.startLineNumber<=P.modified.startLineNumber),R=Math.max(P.original.startLineNumber-N.original.startLineNumber,P.modified.startLineNumber-M.modified.startLineNumber),x=T.findLastMonotonous(K=>K.original.startLineNumber<P.original.endLineNumberExclusive),O=(0,E.findLastMonotonous)(d,K=>K.modified.startLineNumber<P.modified.endLineNumberExclusive),B=Math.max(x.original.endLineNumberExclusive-P.original.endLineNumberExclusive,O.modified.endLineNumberExclusive-P.modified.endLineNumberExclusive);let W;for(W=0;W<R;W++){const K=P.original.startLineNumber-W-1,F=P.modified.startLineNumber-W-1;if(K>o.length||F>g.length||D.contains(F)||I.contains(K)||!u(o[K-1],g[F-1],h))break}W>0&&(I.addRange(new p.LineRange(P.original.startLineNumber-W,P.original.startLineNumber)),D.addRange(new p.LineRange(P.modified.startLineNumber-W,P.modified.startLineNumber)));let V;for(V=0;V<B;V++){const K=P.original.endLineNumberExclusive+V,F=P.modified.endLineNumberExclusive+V;if(K>o.length||F>g.length||D.contains(F)||I.contains(K)||!u(o[K-1],g[F-1],h))break}V>0&&(I.addRange(new p.LineRange(P.original.endLineNumberExclusive,P.original.endLineNumberExclusive+V)),D.addRange(new p.LineRange(P.modified.endLineNumberExclusive,P.modified.endLineNumberExclusive+V))),(W>0||V>0)&&(m[A]=new k.LineRangeMapping(new p.LineRange(P.original.startLineNumber-W,P.original.endLineNumberExclusive+V),new p.LineRange(P.modified.startLineNumber-W,P.modified.endLineNumberExclusive+V)))}return m}function u(d,s,l){if(d.trim()===s.trim())return!0;if(d.length>300&&s.length>300)return!1;const g=new a.MyersDiffAlgorithm().compute(new v.LinesSliceCharSequence([d],new _.OffsetRange(0,1),!1),new v.LinesSliceCharSequence([s],new _.OffsetRange(0,1),!1),l);let h=0;const m=L.SequenceDiff.invert(g.diffs,d.length);for(const I of m)I.seq1Range.forEach(T=>{(0,b.isSpace)(d.charCodeAt(T))||h++});function C(I){let T=0;for(let A=0;A<d.length;A++)(0,b.isSpace)(I.charCodeAt(A))||T++;return T}const w=C(d.length>s.length?d:s);return h/w>.6&&w>10}function f(d){if(d.length===0)return d;d.sort((0,y.compareBy)(l=>l.original.startLineNumber,y.numberComparator));const s=[d[0]];for(let l=1;l<d.length;l++){const o=s[s.length-1],g=d[l],h=g.original.startLineNumber-o.original.endLineNumberExclusive,m=g.modified.startLineNumber-o.modified.endLineNumberExclusive;if(h>=0&&m>=0&&h+m<=2){s[s.length-1]=o.join(g);continue}s.push(g)}return s}function c(d,s){const l=new E.MonotonousArray(d);return s=s.filter(o=>{const g=l.findLastMonotonous(C=>C.original.startLineNumber<o.original.endLineNumberExclusive)||new k.LineRangeMapping(new p.LineRange(1,1),new p.LineRange(1,1)),h=(0,E.findLastMonotonous)(d,C=>C.modified.startLineNumber<o.modified.endLineNumberExclusive);return g!==h}),s}}),define(se[286],oe([1,0,13,90,62,73,5,152,504,283,505,284,205,112,285,503]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getLineRangeMapping=e.lineRangeMappingFromRangeMappings=e.DefaultLinesDiffComputer=void 0;class u{constructor(){this.dynamicProgrammingDiffing=new _.DynamicProgrammingDiffing,this.myersDiffingAlgorithm=new v.MyersDiffAlgorithm}computeDiff(s,l,o){if(s.length<=1&&(0,L.equals)(s,l,(V,K)=>V===K))return new i.LinesDiff([],[],!1);if(s.length===1&&s[0].length===0||l.length===1&&l[0].length===0)return new i.LinesDiff([new n.DetailedLineRangeMapping(new y.LineRange(1,s.length+1),new y.LineRange(1,l.length+1),[new n.RangeMapping(new S.Range(1,1,s.length,s[0].length+1),new S.Range(1,1,l.length,l[0].length+1))])],[],!1);const g=o.maxComputationTimeMs===0?p.InfiniteTimeout.instance:new p.DateTimeout(o.maxComputationTimeMs),h=!o.ignoreTrimWhitespace,m=new Map;function C(V){let K=m.get(V);return K===void 0&&(K=m.size,m.set(V,K)),K}const w=s.map(V=>C(V.trim())),D=l.map(V=>C(V.trim())),I=new r.LineSequence(w,s),T=new r.LineSequence(D,l),A=(()=>I.length+T.length<1700?this.dynamicProgrammingDiffing.compute(I,T,g,(V,K)=>s[V]===l[K]?l[K].length===0?.1:1+Math.log(1+l[K].length):.99):this.myersDiffingAlgorithm.compute(I,T))();let P=A.diffs,N=A.hitTimeout;P=(0,a.optimizeSequenceDiffs)(I,T,P),P=(0,a.removeVeryShortMatchingLinesBetweenDiffs)(I,T,P);const M=[],R=V=>{if(h)for(let K=0;K<V;K++){const F=x+K,q=O+K;if(s[F]!==l[q]){const ie=this.refineDiff(s,l,new p.SequenceDiff(new E.OffsetRange(F,F+1),new E.OffsetRange(q,q+1)),g,h);for(const ae of ie.mappings)M.push(ae);ie.hitTimeout&&(N=!0)}}};let x=0,O=0;for(const V of P){(0,k.assertFn)(()=>V.seq1Range.start-x===V.seq2Range.start-O);const K=V.seq1Range.start-x;R(K),x=V.seq1Range.endExclusive,O=V.seq2Range.endExclusive;const F=this.refineDiff(s,l,V,g,h);F.hitTimeout&&(N=!0);for(const q of F.mappings)M.push(q)}R(s.length-x);const B=f(M,s,l);let W=[];return o.computeMoves&&(W=this.computeMoves(B,s,l,w,D,g,h)),(0,k.assertFn)(()=>{function V(F,q){if(F.lineNumber<1||F.lineNumber>q.length)return!1;const ie=q[F.lineNumber-1];return!(F.column<1||F.column>ie.length+1)}function K(F,q){return!(F.startLineNumber<1||F.startLineNumber>q.length+1||F.endLineNumberExclusive<1||F.endLineNumberExclusive>q.length+1)}for(const F of B){if(!F.innerChanges)return!1;for(const q of F.innerChanges)if(!(V(q.modifiedRange.getStartPosition(),l)&&V(q.modifiedRange.getEndPosition(),l)&&V(q.originalRange.getStartPosition(),s)&&V(q.originalRange.getEndPosition(),s)))return!1;if(!K(F.modified,l)||!K(F.original,s))return!1}return!0}),new i.LinesDiff(B,W,N)}computeMoves(s,l,o,g,h,m,C){return(0,b.computeMovedLines)(s,l,o,g,h,m).map(I=>{const T=this.refineDiff(l,o,new p.SequenceDiff(I.original.toOffsetRange(),I.modified.toOffsetRange()),m,C),A=f(T.mappings,l,o,!0);return new i.MovedText(I,A)})}refineDiff(s,l,o,g,h){const m=new t.LinesSliceCharSequence(s,o.seq1Range,h),C=new t.LinesSliceCharSequence(l,o.seq2Range,h),w=m.length+C.length<500?this.dynamicProgrammingDiffing.compute(m,C,g):this.myersDiffingAlgorithm.compute(m,C,g);let D=w.diffs;return D=(0,a.optimizeSequenceDiffs)(m,C,D),D=(0,a.extendDiffsToEntireWordIfAppropriate)(m,C,D),D=(0,a.removeShortMatches)(m,C,D),D=(0,a.removeVeryShortMatchingTextBetweenLongDiffs)(m,C,D),{mappings:D.map(T=>new n.RangeMapping(m.translateRange(T.seq1Range),C.translateRange(T.seq2Range))),hitTimeout:w.hitTimeout}}}e.DefaultLinesDiffComputer=u;function f(d,s,l,o=!1){const g=[];for(const h of(0,L.groupAdjacentBy)(d.map(m=>c(m,s,l)),(m,C)=>m.original.overlapOrTouch(C.original)||m.modified.overlapOrTouch(C.modified))){const m=h[0],C=h[h.length-1];g.push(new n.DetailedLineRangeMapping(m.original.join(C.original),m.modified.join(C.modified),h.map(w=>w.innerChanges[0])))}return(0,k.assertFn)(()=>!o&&g.length>0&&g[0].original.startLineNumber!==g[0].modified.startLineNumber?!1:(0,k.checkAdjacentItems)(g,(h,m)=>m.original.startLineNumber-h.original.endLineNumberExclusive===m.modified.startLineNumber-h.modified.endLineNumberExclusive&&h.original.endLineNumberExclusive<m.original.startLineNumber&&h.modified.endLineNumberExclusive<m.modified.startLineNumber)),g}e.lineRangeMappingFromRangeMappings=f;function c(d,s,l){let o=0,g=0;d.modifiedRange.endColumn===1&&d.originalRange.endColumn===1&&d.originalRange.startLineNumber+o<=d.originalRange.endLineNumber&&d.modifiedRange.startLineNumber+o<=d.modifiedRange.endLineNumber&&(g=-1),d.modifiedRange.startColumn-1>=l[d.modifiedRange.startLineNumber-1].length&&d.originalRange.startColumn-1>=s[d.originalRange.startLineNumber-1].length&&d.originalRange.startLineNumber<=d.originalRange.endLineNumber+g&&d.modifiedRange.startLineNumber<=d.modifiedRange.endLineNumber+g&&(o=1);const h=new y.LineRange(d.originalRange.startLineNumber+o,d.originalRange.endLineNumber+1+g),m=new y.LineRange(d.modifiedRange.startLineNumber+o,d.modifiedRange.endLineNumber+1+g);return new n.DetailedLineRangeMapping(h,m,[d])}e.getLineRangeMapping=c}),define(se[506],oe([1,0,173,205,112,11,5,90,62]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DiffComputer=e.LegacyLinesDiffComputer=void 0;const v=3;class b{computeDiff(o,g,h){var m;const w=new f(o,g,{maxComputationTime:h.maxComputationTimeMs,shouldIgnoreTrimWhitespace:h.ignoreTrimWhitespace,shouldComputeCharChanges:!0,shouldMakePrettyDiff:!0,shouldPostProcessCharChanges:!0}).computeDiff(),D=[];let I=null;for(const T of w.changes){let A;T.originalEndLineNumber===0?A=new _.LineRange(T.originalStartLineNumber+1,T.originalStartLineNumber+1):A=new _.LineRange(T.originalStartLineNumber,T.originalEndLineNumber+1);let P;T.modifiedEndLineNumber===0?P=new _.LineRange(T.modifiedStartLineNumber+1,T.modifiedStartLineNumber+1):P=new _.LineRange(T.modifiedStartLineNumber,T.modifiedEndLineNumber+1);let N=new y.DetailedLineRangeMapping(A,P,(m=T.charChanges)===null||m===void 0?void 0:m.map(M=>new y.RangeMapping(new S.Range(M.originalStartLineNumber,M.originalStartColumn,M.originalEndLineNumber,M.originalEndColumn),new S.Range(M.modifiedStartLineNumber,M.modifiedStartColumn,M.modifiedEndLineNumber,M.modifiedEndColumn))));I&&(I.modified.endLineNumberExclusive===N.modified.startLineNumber||I.original.endLineNumberExclusive===N.original.startLineNumber)&&(N=new y.DetailedLineRangeMapping(I.original.join(N.original),I.modified.join(N.modified),I.innerChanges&&N.innerChanges?I.innerChanges.concat(N.innerChanges):void 0),D.pop()),D.push(N),I=N}return(0,p.assertFn)(()=>(0,p.checkAdjacentItems)(D,(T,A)=>A.original.startLineNumber-T.original.endLineNumberExclusive===A.modified.startLineNumber-T.modified.endLineNumberExclusive&&T.original.endLineNumberExclusive<A.original.startLineNumber&&T.modified.endLineNumberExclusive<A.modified.startLineNumber)),new k.LinesDiff(D,[],w.quitEarly)}}e.LegacyLinesDiffComputer=b;function a(l,o,g,h){return new L.LcsDiff(l,o,g).ComputeDiff(h)}class i{constructor(o){const g=[],h=[];for(let m=0,C=o.length;m<C;m++)g[m]=c(o[m],1),h[m]=d(o[m],1);this.lines=o,this._startColumns=g,this._endColumns=h}getElements(){const o=[];for(let g=0,h=this.lines.length;g<h;g++)o[g]=this.lines[g].substring(this._startColumns[g]-1,this._endColumns[g]-1);return o}getStrictElement(o){return this.lines[o]}getStartLineNumber(o){return o+1}getEndLineNumber(o){return o+1}createCharSequence(o,g,h){const m=[],C=[],w=[];let D=0;for(let I=g;I<=h;I++){const T=this.lines[I],A=o?this._startColumns[I]:1,P=o?this._endColumns[I]:T.length+1;for(let N=A;N<P;N++)m[D]=T.charCodeAt(N-1),C[D]=I+1,w[D]=N,D++;!o&&I<h&&(m[D]=10,C[D]=I+1,w[D]=T.length+1,D++)}return new n(m,C,w)}}class n{constructor(o,g,h){this._charCodes=o,this._lineNumbers=g,this._columns=h}toString(){return\"[\"+this._charCodes.map((o,g)=>(o===10?\"\\\\n\":String.fromCharCode(o))+`-(${this._lineNumbers[g]},${this._columns[g]})`).join(\", \")+\"]\"}_assertIndex(o,g){if(o<0||o>=g.length)throw new Error(\"Illegal index\")}getElements(){return this._charCodes}getStartLineNumber(o){return o>0&&o===this._lineNumbers.length?this.getEndLineNumber(o-1):(this._assertIndex(o,this._lineNumbers),this._lineNumbers[o])}getEndLineNumber(o){return o===-1?this.getStartLineNumber(o+1):(this._assertIndex(o,this._lineNumbers),this._charCodes[o]===10?this._lineNumbers[o]+1:this._lineNumbers[o])}getStartColumn(o){return o>0&&o===this._columns.length?this.getEndColumn(o-1):(this._assertIndex(o,this._columns),this._columns[o])}getEndColumn(o){return o===-1?this.getStartColumn(o+1):(this._assertIndex(o,this._columns),this._charCodes[o]===10?1:this._columns[o]+1)}}class t{constructor(o,g,h,m,C,w,D,I){this.originalStartLineNumber=o,this.originalStartColumn=g,this.originalEndLineNumber=h,this.originalEndColumn=m,this.modifiedStartLineNumber=C,this.modifiedStartColumn=w,this.modifiedEndLineNumber=D,this.modifiedEndColumn=I}static createFromDiffChange(o,g,h){const m=g.getStartLineNumber(o.originalStart),C=g.getStartColumn(o.originalStart),w=g.getEndLineNumber(o.originalStart+o.originalLength-1),D=g.getEndColumn(o.originalStart+o.originalLength-1),I=h.getStartLineNumber(o.modifiedStart),T=h.getStartColumn(o.modifiedStart),A=h.getEndLineNumber(o.modifiedStart+o.modifiedLength-1),P=h.getEndColumn(o.modifiedStart+o.modifiedLength-1);return new t(m,C,w,D,I,T,A,P)}}function r(l){if(l.length<=1)return l;const o=[l[0]];let g=o[0];for(let h=1,m=l.length;h<m;h++){const C=l[h],w=C.originalStart-(g.originalStart+g.originalLength),D=C.modifiedStart-(g.modifiedStart+g.modifiedLength);Math.min(w,D)<v?(g.originalLength=C.originalStart+C.originalLength-g.originalStart,g.modifiedLength=C.modifiedStart+C.modifiedLength-g.modifiedStart):(o.push(C),g=C)}return o}class u{constructor(o,g,h,m,C){this.originalStartLineNumber=o,this.originalEndLineNumber=g,this.modifiedStartLineNumber=h,this.modifiedEndLineNumber=m,this.charChanges=C}static createFromDiffResult(o,g,h,m,C,w,D){let I,T,A,P,N;if(g.originalLength===0?(I=h.getStartLineNumber(g.originalStart)-1,T=0):(I=h.getStartLineNumber(g.originalStart),T=h.getEndLineNumber(g.originalStart+g.originalLength-1)),g.modifiedLength===0?(A=m.getStartLineNumber(g.modifiedStart)-1,P=0):(A=m.getStartLineNumber(g.modifiedStart),P=m.getEndLineNumber(g.modifiedStart+g.modifiedLength-1)),w&&g.originalLength>0&&g.originalLength<20&&g.modifiedLength>0&&g.modifiedLength<20&&C()){const M=h.createCharSequence(o,g.originalStart,g.originalStart+g.originalLength-1),R=m.createCharSequence(o,g.modifiedStart,g.modifiedStart+g.modifiedLength-1);if(M.getElements().length>0&&R.getElements().length>0){let x=a(M,R,C,!0).changes;D&&(x=r(x)),N=[];for(let O=0,B=x.length;O<B;O++)N.push(t.createFromDiffChange(x[O],M,R))}}return new u(I,T,A,P,N)}}class f{constructor(o,g,h){this.shouldComputeCharChanges=h.shouldComputeCharChanges,this.shouldPostProcessCharChanges=h.shouldPostProcessCharChanges,this.shouldIgnoreTrimWhitespace=h.shouldIgnoreTrimWhitespace,this.shouldMakePrettyDiff=h.shouldMakePrettyDiff,this.originalLines=o,this.modifiedLines=g,this.original=new i(o),this.modified=new i(g),this.continueLineDiff=s(h.maxComputationTime),this.continueCharDiff=s(h.maxComputationTime===0?0:Math.min(h.maxComputationTime,5e3))}computeDiff(){if(this.original.lines.length===1&&this.original.lines[0].length===0)return this.modified.lines.length===1&&this.modified.lines[0].length===0?{quitEarly:!1,changes:[]}:{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:1,modifiedStartLineNumber:1,modifiedEndLineNumber:this.modified.lines.length,charChanges:void 0}]};if(this.modified.lines.length===1&&this.modified.lines[0].length===0)return{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:this.original.lines.length,modifiedStartLineNumber:1,modifiedEndLineNumber:1,charChanges:void 0}]};const o=a(this.original,this.modified,this.continueLineDiff,this.shouldMakePrettyDiff),g=o.changes,h=o.quitEarly;if(this.shouldIgnoreTrimWhitespace){const D=[];for(let I=0,T=g.length;I<T;I++)D.push(u.createFromDiffResult(this.shouldIgnoreTrimWhitespace,g[I],this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges));return{quitEarly:h,changes:D}}const m=[];let C=0,w=0;for(let D=-1,I=g.length;D<I;D++){const T=D+1<I?g[D+1]:null,A=T?T.originalStart:this.originalLines.length,P=T?T.modifiedStart:this.modifiedLines.length;for(;C<A&&w<P;){const N=this.originalLines[C],M=this.modifiedLines[w];if(N!==M){{let R=c(N,1),x=c(M,1);for(;R>1&&x>1;){const O=N.charCodeAt(R-2),B=M.charCodeAt(x-2);if(O!==B)break;R--,x--}(R>1||x>1)&&this._pushTrimWhitespaceCharChange(m,C+1,1,R,w+1,1,x)}{let R=d(N,1),x=d(M,1);const O=N.length+1,B=M.length+1;for(;R<O&&x<B;){const W=N.charCodeAt(R-1),V=N.charCodeAt(x-1);if(W!==V)break;R++,x++}(R<O||x<B)&&this._pushTrimWhitespaceCharChange(m,C+1,R,O,w+1,x,B)}}C++,w++}T&&(m.push(u.createFromDiffResult(this.shouldIgnoreTrimWhitespace,T,this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges)),C+=T.originalLength,w+=T.modifiedLength)}return{quitEarly:h,changes:m}}_pushTrimWhitespaceCharChange(o,g,h,m,C,w,D){if(this._mergeTrimWhitespaceCharChange(o,g,h,m,C,w,D))return;let I;this.shouldComputeCharChanges&&(I=[new t(g,h,g,m,C,w,C,D)]),o.push(new u(g,g,C,C,I))}_mergeTrimWhitespaceCharChange(o,g,h,m,C,w,D){const I=o.length;if(I===0)return!1;const T=o[I-1];return T.originalEndLineNumber===0||T.modifiedEndLineNumber===0?!1:T.originalEndLineNumber===g&&T.modifiedEndLineNumber===C?(this.shouldComputeCharChanges&&T.charChanges&&T.charChanges.push(new t(g,h,g,m,C,w,C,D)),!0):T.originalEndLineNumber+1===g&&T.modifiedEndLineNumber+1===C?(T.originalEndLineNumber=g,T.modifiedEndLineNumber=C,this.shouldComputeCharChanges&&T.charChanges&&T.charChanges.push(new t(g,h,g,m,C,w,C,D)),!0):!1}}e.DiffComputer=f;function c(l,o){const g=E.firstNonWhitespaceIndex(l);return g===-1?o:g+1}function d(l,o){const g=E.lastNonWhitespaceIndex(l);return g===-1?o:g+2}function s(l){if(l===0)return()=>!0;const o=Date.now();return()=>Date.now()-o<l}}),define(se[507],oe([1,0,506,286]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.linesDiffComputers=void 0,e.linesDiffComputers={getLegacy:()=>new L.LegacyLinesDiffComputer,getDefault:()=>new k.DefaultLinesDiffComputer}}),define(se[287],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InternalEditorAction=void 0;class L{constructor(y,E,S,p,_,v,b){this.id=y,this.label=E,this.alias=S,this.metadata=p,this._precondition=_,this._run=v,this._contextKeyService=b}isSupported(){return this._contextKeyService.contextMatchesRules(this._precondition)}run(y){return this.isSupported()?this._run(y):Promise.resolve(void 0)}}e.InternalEditorAction=L}),define(se[180],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorType=void 0,e.EditorType={ICodeEditor:\"vs.editor.ICodeEditor\",IDiffEditor:\"vs.editor.IDiffEditor\"}}),define(se[153],oe([1,0,180]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getCodeEditor=e.isCompositeEditor=e.isDiffEditor=e.isCodeEditor=void 0;function k(p){return p&&typeof p.getEditorType==\"function\"?p.getEditorType()===L.EditorType.ICodeEditor:!1}e.isCodeEditor=k;function y(p){return p&&typeof p.getEditorType==\"function\"?p.getEditorType()===L.EditorType.IDiffEditor:!1}e.isDiffEditor=y;function E(p){return!!p&&typeof p==\"object\"&&typeof p.onDidChangeActiveEditor==\"function\"}e.isCompositeEditor=E;function S(p){return k(p)?p:y(p)?p.getModifiedEditor():E(p)&&k(p.activeCodeEditor)?p.activeCodeEditor:null}e.getCodeEditor=S}),define(se[131],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getEditorFeatures=e.registerEditorFeature=void 0;const L=[];function k(E){L.push(E)}e.registerEditorFeature=k;function y(){return L.slice(0)}e.getEditorFeatures=y}),define(se[508],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorTheme=void 0;class L{get type(){return this._theme.type}get value(){return this._theme}constructor(y){this._theme=y}update(y){this._theme=y}getColor(y){return this._theme.getColor(y)}}e.EditorTheme=L}),define(se[132],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TokenMetadata=void 0;class L{static getLanguageId(y){return(y&255)>>>0}static getTokenType(y){return(y&768)>>>8}static containsBalancedBrackets(y){return(y&1024)!==0}static getFontStyle(y){return(y&30720)>>>11}static getForeground(y){return(y&16744448)>>>15}static getBackground(y){return(y&4278190080)>>>24}static getClassNameFromMetadata(y){let S=\"mtk\"+this.getForeground(y);const p=this.getFontStyle(y);return p&1&&(S+=\" mtki\"),p&2&&(S+=\" mtkb\"),p&4&&(S+=\" mtku\"),p&8&&(S+=\" mtks\"),S}static getInlineStyleFromMetadata(y,E){const S=this.getForeground(y),p=this.getFontStyle(y);let _=`color: ${E[S]};`;p&1&&(_+=\"font-style: italic;\"),p&2&&(_+=\"font-weight: bold;\");let v=\"\";return p&4&&(v+=\" underline\"),p&8&&(v+=\" line-through\"),v&&(_+=`text-decoration:${v};`),_}static getPresentationFromMetadata(y){const E=this.getForeground(y),S=this.getFontStyle(y);return{foreground:E,italic:!!(S&1),bold:!!(S&2),underline:!!(S&4),strikethrough:!!(S&8)}}}e.TokenMetadata=L}),define(se[509],oe([1,0,39]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.computeDefaultDocumentColors=void 0;function k(i){const n=[];for(const t of i){const r=Number(t);(r||r===0&&t.replace(/\\s/g,\"\")!==\"\")&&n.push(r)}return n}function y(i,n,t,r){return{red:i/255,blue:t/255,green:n/255,alpha:r}}function E(i,n){const t=n.index,r=n[0].length;if(!t)return;const u=i.positionAt(t);return{startLineNumber:u.lineNumber,startColumn:u.column,endLineNumber:u.lineNumber,endColumn:u.column+r}}function S(i,n){if(!i)return;const t=L.Color.Format.CSS.parseHex(n);if(t)return{range:i,color:y(t.rgba.r,t.rgba.g,t.rgba.b,t.rgba.a)}}function p(i,n,t){if(!i||n.length!==1)return;const u=n[0].values(),f=k(u);return{range:i,color:y(f[0],f[1],f[2],t?f[3]:1)}}function _(i,n,t){if(!i||n.length!==1)return;const u=n[0].values(),f=k(u),c=new L.Color(new L.HSLA(f[0],f[1]/100,f[2]/100,t?f[3]:1));return{range:i,color:y(c.rgba.r,c.rgba.g,c.rgba.b,c.rgba.a)}}function v(i,n){return typeof i==\"string\"?[...i.matchAll(n)]:i.findMatches(n)}function b(i){const n=[],r=v(i,/\\b(rgb|rgba|hsl|hsla)(\\([0-9\\s,.\\%]*\\))|(#)([A-Fa-f0-9]{3})\\b|(#)([A-Fa-f0-9]{4})\\b|(#)([A-Fa-f0-9]{6})\\b|(#)([A-Fa-f0-9]{8})\\b/gm);if(r.length>0)for(const u of r){const f=u.filter(l=>l!==void 0),c=f[1],d=f[2];if(!d)continue;let s;if(c===\"rgb\"){const l=/^\\(\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*\\)$/gm;s=p(E(i,u),v(d,l),!1)}else if(c===\"rgba\"){const l=/^\\(\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(0[.][0-9]+|[.][0-9]+|[01][.]|[01])\\s*\\)$/gm;s=p(E(i,u),v(d,l),!0)}else if(c===\"hsl\"){const l=/^\\(\\s*(36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*\\)$/gm;s=_(E(i,u),v(d,l),!1)}else if(c===\"hsla\"){const l=/^\\(\\s*(36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*,\\s*(0[.][0-9]+|[.][0-9]+|[01][.]|[01])\\s*\\)$/gm;s=_(E(i,u),v(d,l),!0)}else c===\"#\"&&(s=S(E(i,u),c+d));s&&n.push(s)}return n}function a(i){return!i||typeof i.getValue!=\"function\"||typeof i.positionAt!=\"function\"?[]:b(i)}e.computeDefaultDocumentColors=a}),define(se[113],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoClosingPairs=e.StandardAutoClosingPairConditional=e.IndentAction=void 0;var L;(function(S){S[S.None=0]=\"None\",S[S.Indent=1]=\"Indent\",S[S.IndentOutdent=2]=\"IndentOutdent\",S[S.Outdent=3]=\"Outdent\"})(L||(e.IndentAction=L={}));class k{constructor(p){if(this._neutralCharacter=null,this._neutralCharacterSearched=!1,this.open=p.open,this.close=p.close,this._inString=!0,this._inComment=!0,this._inRegEx=!0,Array.isArray(p.notIn))for(let _=0,v=p.notIn.length;_<v;_++)switch(p.notIn[_]){case\"string\":this._inString=!1;break;case\"comment\":this._inComment=!1;break;case\"regex\":this._inRegEx=!1;break}}isOK(p){switch(p){case 0:return!0;case 1:return this._inComment;case 2:return this._inString;case 3:return this._inRegEx}}shouldAutoClose(p,_){if(p.getTokenCount()===0)return!0;const v=p.findTokenIndexAtOffset(_-2),b=p.getStandardTokenType(v);return this.isOK(b)}_findNeutralCharacterInRange(p,_){for(let v=p;v<=_;v++){const b=String.fromCharCode(v);if(!this.open.includes(b)&&!this.close.includes(b))return b}return null}findNeutralCharacter(){return this._neutralCharacterSearched||(this._neutralCharacterSearched=!0,this._neutralCharacter||(this._neutralCharacter=this._findNeutralCharacterInRange(48,57)),this._neutralCharacter||(this._neutralCharacter=this._findNeutralCharacterInRange(97,122)),this._neutralCharacter||(this._neutralCharacter=this._findNeutralCharacterInRange(65,90))),this._neutralCharacter}}e.StandardAutoClosingPairConditional=k;class y{constructor(p){this.autoClosingPairsOpenByStart=new Map,this.autoClosingPairsOpenByEnd=new Map,this.autoClosingPairsCloseByStart=new Map,this.autoClosingPairsCloseByEnd=new Map,this.autoClosingPairsCloseSingleChar=new Map;for(const _ of p)E(this.autoClosingPairsOpenByStart,_.open.charAt(0),_),E(this.autoClosingPairsOpenByEnd,_.open.charAt(_.open.length-1),_),E(this.autoClosingPairsCloseByStart,_.close.charAt(0),_),E(this.autoClosingPairsCloseByEnd,_.close.charAt(_.close.length-1),_),_.close.length===1&&_.open.length===1&&E(this.autoClosingPairsCloseSingleChar,_.close,_)}}e.AutoClosingPairs=y;function E(S,p,_){S.has(p)?S.get(p).push(_):S.set(p,[_])}}),define(se[510],oe([1,0,128]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.computeLinks=e.LinkComputer=e.StateMachine=void 0;class k{constructor(i,n,t){const r=new Uint8Array(i*n);for(let u=0,f=i*n;u<f;u++)r[u]=t;this._data=r,this.rows=i,this.cols=n}get(i,n){return this._data[i*this.cols+n]}set(i,n,t){this._data[i*this.cols+n]=t}}class y{constructor(i){let n=0,t=0;for(let u=0,f=i.length;u<f;u++){const[c,d,s]=i[u];d>n&&(n=d),c>t&&(t=c),s>t&&(t=s)}n++,t++;const r=new k(t,n,0);for(let u=0,f=i.length;u<f;u++){const[c,d,s]=i[u];r.set(c,d,s)}this._states=r,this._maxCharCode=n}nextState(i,n){return n<0||n>=this._maxCharCode?0:this._states.get(i,n)}}e.StateMachine=y;let E=null;function S(){return E===null&&(E=new y([[1,104,2],[1,72,2],[1,102,6],[1,70,6],[2,116,3],[2,84,3],[3,116,4],[3,84,4],[4,112,5],[4,80,5],[5,115,9],[5,83,9],[5,58,10],[6,105,7],[6,73,7],[7,108,8],[7,76,8],[8,101,9],[8,69,9],[9,58,10],[10,47,11],[11,47,12]])),E}let p=null;function _(){if(p===null){p=new L.CharacterClassifier(0);const a=` \t<>'\"\\u3001\\u3002\\uFF61\\uFF64\\uFF0C\\uFF0E\\uFF1A\\uFF1B\\u2018\\u3008\\u300C\\u300E\\u3014\\uFF08\\uFF3B\\uFF5B\\uFF62\\uFF63\\uFF5D\\uFF3D\\uFF09\\u3015\\u300F\\u300D\\u3009\\u2019\\uFF40\\uFF5E\\u2026`;for(let n=0;n<a.length;n++)p.set(a.charCodeAt(n),1);const i=\".,;:\";for(let n=0;n<i.length;n++)p.set(i.charCodeAt(n),2)}return p}class v{static _createLink(i,n,t,r,u){let f=u-1;do{const c=n.charCodeAt(f);if(i.get(c)!==2)break;f--}while(f>r);if(r>0){const c=n.charCodeAt(r-1),d=n.charCodeAt(f);(c===40&&d===41||c===91&&d===93||c===123&&d===125)&&f--}return{range:{startLineNumber:t,startColumn:r+1,endLineNumber:t,endColumn:f+2},url:n.substring(r,f+1)}}static computeLinks(i,n=S()){const t=_(),r=[];for(let u=1,f=i.getLineCount();u<=f;u++){const c=i.getLineContent(u),d=c.length;let s=0,l=0,o=0,g=1,h=!1,m=!1,C=!1,w=!1;for(;s<d;){let D=!1;const I=c.charCodeAt(s);if(g===13){let T;switch(I){case 40:h=!0,T=0;break;case 41:T=h?0:1;break;case 91:C=!0,m=!0,T=0;break;case 93:C=!1,T=m?0:1;break;case 123:w=!0,T=0;break;case 125:T=w?0:1;break;case 39:case 34:case 96:o===I?T=1:o===39||o===34||o===96?T=0:T=1;break;case 42:T=o===42?1:0;break;case 124:T=o===124?1:0;break;case 32:T=C?0:1;break;default:T=t.get(I)}T===1&&(r.push(v._createLink(t,c,u,l,s)),D=!0)}else if(g===12){let T;I===91?(m=!0,T=0):T=t.get(I),T===1?D=!0:g=13}else g=n.nextState(g,I),g===0&&(D=!0);D&&(g=1,h=!1,m=!1,w=!1,l=s+1,o=I),s++}g===13&&r.push(v._createLink(t,c,u,l,d))}return r}}e.LinkComputer=v;function b(a){return!a||typeof a.getLineCount!=\"function\"||typeof a.getLineContent!=\"function\"?[]:v.computeLinks(a)}e.computeLinks=b}),define(se[133],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ignoreBracketsInToken=e.ScopedLineTokens=e.createScopedLineTokens=void 0;function L(E,S){const p=E.getCount(),_=E.findTokenIndexAtOffset(S),v=E.getLanguageId(_);let b=_;for(;b+1<p&&E.getLanguageId(b+1)===v;)b++;let a=_;for(;a>0&&E.getLanguageId(a-1)===v;)a--;return new k(E,v,a,b+1,E.getStartOffset(a),E.getEndOffset(b))}e.createScopedLineTokens=L;class k{constructor(S,p,_,v,b,a){this._scopedLineTokensBrand=void 0,this._actual=S,this.languageId=p,this._firstTokenIndex=_,this._lastTokenIndex=v,this.firstCharOffset=b,this._lastCharOffset=a}getLineContent(){return this._actual.getLineContent().substring(this.firstCharOffset,this._lastCharOffset)}getActualLineContentBefore(S){return this._actual.getLineContent().substring(0,this.firstCharOffset+S)}getTokenCount(){return this._lastTokenIndex-this._firstTokenIndex}findTokenIndexAtOffset(S){return this._actual.findTokenIndexAtOffset(S+this.firstCharOffset)-this._firstTokenIndex}getStandardTokenType(S){return this._actual.getStandardTokenType(S+this._firstTokenIndex)}}e.ScopedLineTokens=k;function y(E){return(E&3)!==0}e.ignoreBracketsInToken=y}),define(se[75],oe([1,0,10,5,24,133,85,203]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isQuote=e.EditOperationResult=e.SingleCursorState=e.PartialViewCursorState=e.PartialModelCursorState=e.CursorState=e.CursorConfiguration=void 0;const _=()=>!0,v=()=>!1,b=c=>c===\" \"||c===\"\t\";class a{static shouldRecreate(d){return d.hasChanged(143)||d.hasChanged(129)||d.hasChanged(37)||d.hasChanged(76)||d.hasChanged(78)||d.hasChanged(79)||d.hasChanged(6)||d.hasChanged(7)||d.hasChanged(11)||d.hasChanged(9)||d.hasChanged(10)||d.hasChanged(14)||d.hasChanged(127)||d.hasChanged(50)||d.hasChanged(90)}constructor(d,s,l,o){var g;this.languageConfigurationService=o,this._cursorMoveConfigurationBrand=void 0,this._languageId=d;const h=l.options,m=h.get(143),C=h.get(50);this.readOnly=h.get(90),this.tabSize=s.tabSize,this.indentSize=s.indentSize,this.insertSpaces=s.insertSpaces,this.stickyTabStops=h.get(115),this.lineHeight=C.lineHeight,this.typicalHalfwidthCharacterWidth=C.typicalHalfwidthCharacterWidth,this.pageSize=Math.max(1,Math.floor(m.height/this.lineHeight)-2),this.useTabStops=h.get(127),this.wordSeparators=h.get(129),this.emptySelectionClipboard=h.get(37),this.copyWithSyntaxHighlighting=h.get(25),this.multiCursorMergeOverlapping=h.get(76),this.multiCursorPaste=h.get(78),this.multiCursorLimit=h.get(79),this.autoClosingBrackets=h.get(6),this.autoClosingComments=h.get(7),this.autoClosingQuotes=h.get(11),this.autoClosingDelete=h.get(9),this.autoClosingOvertype=h.get(10),this.autoSurround=h.get(14),this.autoIndent=h.get(12),this.surroundingPairs={},this._electricChars=null,this.shouldAutoCloseBefore={quote:this._getShouldAutoClose(d,this.autoClosingQuotes,!0),comment:this._getShouldAutoClose(d,this.autoClosingComments,!1),bracket:this._getShouldAutoClose(d,this.autoClosingBrackets,!1)},this.autoClosingPairs=this.languageConfigurationService.getLanguageConfiguration(d).getAutoClosingPairs();const w=this.languageConfigurationService.getLanguageConfiguration(d).getSurroundingPairs();if(w)for(const I of w)this.surroundingPairs[I.open]=I.close;const D=this.languageConfigurationService.getLanguageConfiguration(d).comments;this.blockCommentStartToken=(g=D?.blockCommentStartToken)!==null&&g!==void 0?g:null}get electricChars(){var d;if(!this._electricChars){this._electricChars={};const s=(d=this.languageConfigurationService.getLanguageConfiguration(this._languageId).electricCharacter)===null||d===void 0?void 0:d.getElectricCharacters();if(s)for(const l of s)this._electricChars[l]=!0}return this._electricChars}onElectricCharacter(d,s,l){const o=(0,E.createScopedLineTokens)(s,l-1),g=this.languageConfigurationService.getLanguageConfiguration(o.languageId).electricCharacter;return g?g.onElectricCharacter(d,o,l-o.firstCharOffset):null}normalizeIndentation(d){return(0,p.normalizeIndentation)(d,this.indentSize,this.insertSpaces)}_getShouldAutoClose(d,s,l){switch(s){case\"beforeWhitespace\":return b;case\"languageDefined\":return this._getLanguageDefinedShouldAutoClose(d,l);case\"always\":return _;case\"never\":return v}}_getLanguageDefinedShouldAutoClose(d,s){const l=this.languageConfigurationService.getLanguageConfiguration(d).getAutoCloseBeforeSet(s);return o=>l.indexOf(o)!==-1}visibleColumnFromColumn(d,s){return S.CursorColumns.visibleColumnFromColumn(d.getLineContent(s.lineNumber),s.column,this.tabSize)}columnFromVisibleColumn(d,s,l){const o=S.CursorColumns.columnFromVisibleColumn(d.getLineContent(s),l,this.tabSize),g=d.getLineMinColumn(s);if(o<g)return g;const h=d.getLineMaxColumn(s);return o>h?h:o}}e.CursorConfiguration=a;class i{static fromModelState(d){return new n(d)}static fromViewState(d){return new t(d)}static fromModelSelection(d){const s=y.Selection.liftSelection(d),l=new r(k.Range.fromPositions(s.getSelectionStart()),0,0,s.getPosition(),0);return i.fromModelState(l)}static fromModelSelections(d){const s=[];for(let l=0,o=d.length;l<o;l++)s[l]=this.fromModelSelection(d[l]);return s}constructor(d,s){this._cursorStateBrand=void 0,this.modelState=d,this.viewState=s}equals(d){return this.viewState.equals(d.viewState)&&this.modelState.equals(d.modelState)}}e.CursorState=i;class n{constructor(d){this.modelState=d,this.viewState=null}}e.PartialModelCursorState=n;class t{constructor(d){this.modelState=null,this.viewState=d}}e.PartialViewCursorState=t;class r{constructor(d,s,l,o,g){this.selectionStart=d,this.selectionStartKind=s,this.selectionStartLeftoverVisibleColumns=l,this.position=o,this.leftoverVisibleColumns=g,this._singleCursorStateBrand=void 0,this.selection=r._computeSelection(this.selectionStart,this.position)}equals(d){return this.selectionStartLeftoverVisibleColumns===d.selectionStartLeftoverVisibleColumns&&this.leftoverVisibleColumns===d.leftoverVisibleColumns&&this.selectionStartKind===d.selectionStartKind&&this.position.equals(d.position)&&this.selectionStart.equalsRange(d.selectionStart)}hasSelection(){return!this.selection.isEmpty()||!this.selectionStart.isEmpty()}move(d,s,l,o){return d?new r(this.selectionStart,this.selectionStartKind,this.selectionStartLeftoverVisibleColumns,new L.Position(s,l),o):new r(new k.Range(s,l,s,l),0,o,new L.Position(s,l),o)}static _computeSelection(d,s){return d.isEmpty()||!s.isBeforeOrEqual(d.getStartPosition())?y.Selection.fromPositions(d.getStartPosition(),s):y.Selection.fromPositions(d.getEndPosition(),s)}}e.SingleCursorState=r;class u{constructor(d,s,l){this._editOperationResultBrand=void 0,this.type=d,this.commands=s,this.shouldPushStackElementBefore=l.shouldPushStackElementBefore,this.shouldPushStackElementAfter=l.shouldPushStackElementAfter}}e.EditOperationResult=u;function f(c){return c===\"'\"||c==='\"'||c===\"`\"}e.isQuote=f}),define(se[511],oe([1,0,75,10,5]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColumnSelection=void 0;class E{static columnSelect(p,_,v,b,a,i){const n=Math.abs(a-v)+1,t=v>a,r=b>i,u=b<i,f=[];for(let c=0;c<n;c++){const d=v+(t?-c:c),s=p.columnFromVisibleColumn(_,d,b),l=p.columnFromVisibleColumn(_,d,i),o=p.visibleColumnFromColumn(_,new k.Position(d,s)),g=p.visibleColumnFromColumn(_,new k.Position(d,l));u&&(o>i||g<b)||r&&(g>b||o<i)||f.push(new L.SingleCursorState(new y.Range(d,s,d,s),0,0,new k.Position(d,l),0))}if(f.length===0)for(let c=0;c<n;c++){const d=v+(t?-c:c),s=_.getLineMaxColumn(d);f.push(new L.SingleCursorState(new y.Range(d,s,d,s),0,0,new k.Position(d,s),0))}return{viewStates:f,reversed:t,fromLineNumber:v,fromVisualColumn:b,toLineNumber:a,toVisualColumn:i}}static columnSelectLeft(p,_,v){let b=v.toViewVisualColumn;return b>0&&b--,E.columnSelect(p,_,v.fromViewLineNumber,v.fromViewVisualColumn,v.toViewLineNumber,b)}static columnSelectRight(p,_,v){let b=0;const a=Math.min(v.fromViewLineNumber,v.toViewLineNumber),i=Math.max(v.fromViewLineNumber,v.toViewLineNumber);for(let t=a;t<=i;t++){const r=_.getLineMaxColumn(t),u=p.visibleColumnFromColumn(_,new k.Position(t,r));b=Math.max(b,u)}let n=v.toViewVisualColumn;return n<b&&n++,this.columnSelect(p,_,v.fromViewLineNumber,v.fromViewVisualColumn,v.toViewLineNumber,n)}static columnSelectUp(p,_,v,b){const a=b?p.pageSize:1,i=Math.max(1,v.toViewLineNumber-a);return this.columnSelect(p,_,v.fromViewLineNumber,v.fromViewVisualColumn,i,v.toViewVisualColumn)}static columnSelectDown(p,_,v,b){const a=b?p.pageSize:1,i=Math.min(_.getLineCount(),v.toViewLineNumber+a);return this.columnSelect(p,_,v.fromViewLineNumber,v.fromViewVisualColumn,i,v.toViewVisualColumn)}}e.ColumnSelection=E}),define(se[206],oe([1,0,11,85,10,5,282,75]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MoveOperations=e.CursorPosition=void 0;class _{constructor(a,i,n){this._cursorPositionBrand=void 0,this.lineNumber=a,this.column=i,this.leftoverVisibleColumns=n}}e.CursorPosition=_;class v{static leftPosition(a,i){if(i.column>a.getLineMinColumn(i.lineNumber))return i.delta(void 0,-L.prevCharLength(a.getLineContent(i.lineNumber),i.column-1));if(i.lineNumber>1){const n=i.lineNumber-1;return new y.Position(n,a.getLineMaxColumn(n))}else return i}static leftPositionAtomicSoftTabs(a,i,n){if(i.column<=a.getLineIndentColumn(i.lineNumber)){const t=a.getLineMinColumn(i.lineNumber),r=a.getLineContent(i.lineNumber),u=S.AtomicTabMoveOperations.atomicPosition(r,i.column-1,n,0);if(u!==-1&&u+1>=t)return new y.Position(i.lineNumber,u+1)}return this.leftPosition(a,i)}static left(a,i,n){const t=a.stickyTabStops?v.leftPositionAtomicSoftTabs(i,n,a.tabSize):v.leftPosition(i,n);return new _(t.lineNumber,t.column,0)}static moveLeft(a,i,n,t,r){let u,f;if(n.hasSelection()&&!t)u=n.selection.startLineNumber,f=n.selection.startColumn;else{const c=n.position.delta(void 0,-(r-1)),d=i.normalizePosition(v.clipPositionColumn(c,i),0),s=v.left(a,i,d);u=s.lineNumber,f=s.column}return n.move(t,u,f,0)}static clipPositionColumn(a,i){return new y.Position(a.lineNumber,v.clipRange(a.column,i.getLineMinColumn(a.lineNumber),i.getLineMaxColumn(a.lineNumber)))}static clipRange(a,i,n){return a<i?i:a>n?n:a}static rightPosition(a,i,n){return n<a.getLineMaxColumn(i)?n=n+L.nextCharLength(a.getLineContent(i),n-1):i<a.getLineCount()&&(i=i+1,n=a.getLineMinColumn(i)),new y.Position(i,n)}static rightPositionAtomicSoftTabs(a,i,n,t,r){if(n<a.getLineIndentColumn(i)){const u=a.getLineContent(i),f=S.AtomicTabMoveOperations.atomicPosition(u,n-1,t,1);if(f!==-1)return new y.Position(i,f+1)}return this.rightPosition(a,i,n)}static right(a,i,n){const t=a.stickyTabStops?v.rightPositionAtomicSoftTabs(i,n.lineNumber,n.column,a.tabSize,a.indentSize):v.rightPosition(i,n.lineNumber,n.column);return new _(t.lineNumber,t.column,0)}static moveRight(a,i,n,t,r){let u,f;if(n.hasSelection()&&!t)u=n.selection.endLineNumber,f=n.selection.endColumn;else{const c=n.position.delta(void 0,r-1),d=i.normalizePosition(v.clipPositionColumn(c,i),1),s=v.right(a,i,d);u=s.lineNumber,f=s.column}return n.move(t,u,f,0)}static vertical(a,i,n,t,r,u,f,c){const d=k.CursorColumns.visibleColumnFromColumn(i.getLineContent(n),t,a.tabSize)+r,s=i.getLineCount(),l=n===1&&t===1,o=n===s&&t===i.getLineMaxColumn(n),g=u<n?l:o;if(n=u,n<1?(n=1,f?t=i.getLineMinColumn(n):t=Math.min(i.getLineMaxColumn(n),t)):n>s?(n=s,f?t=i.getLineMaxColumn(n):t=Math.min(i.getLineMaxColumn(n),t)):t=a.columnFromVisibleColumn(i,n,d),g?r=0:r=d-k.CursorColumns.visibleColumnFromColumn(i.getLineContent(n),t,a.tabSize),c!==void 0){const h=new y.Position(n,t),m=i.normalizePosition(h,c);r=r+(t-m.column),n=m.lineNumber,t=m.column}return new _(n,t,r)}static down(a,i,n,t,r,u,f){return this.vertical(a,i,n,t,r,n+u,f,4)}static moveDown(a,i,n,t,r){let u,f;n.hasSelection()&&!t?(u=n.selection.endLineNumber,f=n.selection.endColumn):(u=n.position.lineNumber,f=n.position.column);let c=0,d;do if(d=v.down(a,i,u+c,f,n.leftoverVisibleColumns,r,!0),i.normalizePosition(new y.Position(d.lineNumber,d.column),2).lineNumber>u)break;while(c++<10&&u+c<i.getLineCount());return n.move(t,d.lineNumber,d.column,d.leftoverVisibleColumns)}static translateDown(a,i,n){const t=n.selection,r=v.down(a,i,t.selectionStartLineNumber,t.selectionStartColumn,n.selectionStartLeftoverVisibleColumns,1,!1),u=v.down(a,i,t.positionLineNumber,t.positionColumn,n.leftoverVisibleColumns,1,!1);return new p.SingleCursorState(new E.Range(r.lineNumber,r.column,r.lineNumber,r.column),0,r.leftoverVisibleColumns,new y.Position(u.lineNumber,u.column),u.leftoverVisibleColumns)}static up(a,i,n,t,r,u,f){return this.vertical(a,i,n,t,r,n-u,f,3)}static moveUp(a,i,n,t,r){let u,f;n.hasSelection()&&!t?(u=n.selection.startLineNumber,f=n.selection.startColumn):(u=n.position.lineNumber,f=n.position.column);const c=v.up(a,i,u,f,n.leftoverVisibleColumns,r,!0);return n.move(t,c.lineNumber,c.column,c.leftoverVisibleColumns)}static translateUp(a,i,n){const t=n.selection,r=v.up(a,i,t.selectionStartLineNumber,t.selectionStartColumn,n.selectionStartLeftoverVisibleColumns,1,!1),u=v.up(a,i,t.positionLineNumber,t.positionColumn,n.leftoverVisibleColumns,1,!1);return new p.SingleCursorState(new E.Range(r.lineNumber,r.column,r.lineNumber,r.column),0,r.leftoverVisibleColumns,new y.Position(u.lineNumber,u.column),u.leftoverVisibleColumns)}static _isBlankLine(a,i){return a.getLineFirstNonWhitespaceColumn(i)===0}static moveToPrevBlankLine(a,i,n,t){let r=n.position.lineNumber;for(;r>1&&this._isBlankLine(i,r);)r--;for(;r>1&&!this._isBlankLine(i,r);)r--;return n.move(t,r,i.getLineMinColumn(r),0)}static moveToNextBlankLine(a,i,n,t){const r=i.getLineCount();let u=n.position.lineNumber;for(;u<r&&this._isBlankLine(i,u);)u++;for(;u<r&&!this._isBlankLine(i,u);)u++;return n.move(t,u,i.getLineMinColumn(u),0)}static moveToBeginningOfLine(a,i,n,t){const r=n.position.lineNumber,u=i.getLineMinColumn(r),f=i.getLineFirstNonWhitespaceColumn(r)||u;let c;return n.position.column===f?c=u:c=f,n.move(t,r,c,0)}static moveToEndOfLine(a,i,n,t,r){const u=n.position.lineNumber,f=i.getLineMaxColumn(u);return n.move(t,u,f,r?1073741824-f:0)}static moveToBeginningOfBuffer(a,i,n,t){return n.move(t,1,1,0)}static moveToEndOfBuffer(a,i,n,t){const r=i.getLineCount(),u=i.getLineMaxColumn(r);return n.move(t,r,u,0)}}e.MoveOperations=v}),define(se[207],oe([1,0,11,130,75,85,206,5,10]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DeleteOperations=void 0;class v{static deleteRight(a,i,n,t){const r=[];let u=a!==3;for(let f=0,c=t.length;f<c;f++){const d=t[f];let s=d;if(s.isEmpty()){const l=d.getPosition(),o=S.MoveOperations.right(i,n,l);s=new p.Range(o.lineNumber,o.column,l.lineNumber,l.column)}if(s.isEmpty()){r[f]=null;continue}s.startLineNumber!==s.endLineNumber&&(u=!0),r[f]=new k.ReplaceCommand(s,\"\")}return[u,r]}static isAutoClosingPairDelete(a,i,n,t,r,u,f){if(i===\"never\"&&n===\"never\"||a===\"never\")return!1;for(let c=0,d=u.length;c<d;c++){const s=u[c],l=s.getPosition();if(!s.isEmpty())return!1;const o=r.getLineContent(l.lineNumber);if(l.column<2||l.column>=o.length+1)return!1;const g=o.charAt(l.column-2),h=t.get(g);if(!h)return!1;if((0,y.isQuote)(g)){if(n===\"never\")return!1}else if(i===\"never\")return!1;const m=o.charAt(l.column-1);let C=!1;for(const w of h)w.open===g&&w.close===m&&(C=!0);if(!C)return!1;if(a===\"auto\"){let w=!1;for(let D=0,I=f.length;D<I;D++){const T=f[D];if(l.lineNumber===T.startLineNumber&&l.column===T.startColumn){w=!0;break}}if(!w)return!1}}return!0}static _runAutoClosingPairDelete(a,i,n){const t=[];for(let r=0,u=n.length;r<u;r++){const f=n[r].getPosition(),c=new p.Range(f.lineNumber,f.column-1,f.lineNumber,f.column+1);t[r]=new k.ReplaceCommand(c,\"\")}return[!0,t]}static deleteLeft(a,i,n,t,r){if(this.isAutoClosingPairDelete(i.autoClosingDelete,i.autoClosingBrackets,i.autoClosingQuotes,i.autoClosingPairs.autoClosingPairsOpenByEnd,n,t,r))return this._runAutoClosingPairDelete(i,n,t);const u=[];let f=a!==2;for(let c=0,d=t.length;c<d;c++){const s=v.getDeleteRange(t[c],n,i);if(s.isEmpty()){u[c]=null;continue}s.startLineNumber!==s.endLineNumber&&(f=!0),u[c]=new k.ReplaceCommand(s,\"\")}return[f,u]}static getDeleteRange(a,i,n){if(!a.isEmpty())return a;const t=a.getPosition();if(n.useTabStops&&t.column>1){const r=i.getLineContent(t.lineNumber),u=L.firstNonWhitespaceIndex(r),f=u===-1?r.length+1:u+1;if(t.column<=f){const c=n.visibleColumnFromColumn(i,t),d=E.CursorColumns.prevIndentTabStop(c,n.indentSize),s=n.columnFromVisibleColumn(i,t.lineNumber,d);return new p.Range(t.lineNumber,s,t.lineNumber,t.column)}}return p.Range.fromPositions(v.getPositionAfterDeleteLeft(t,i),t)}static getPositionAfterDeleteLeft(a,i){if(a.column>1){const n=L.getLeftDeleteOffset(a.column-1,i.getLineContent(a.lineNumber));return a.with(void 0,n+1)}else if(a.lineNumber>1){const n=a.lineNumber-1;return new _.Position(n,i.getLineMaxColumn(n))}else return a}static cut(a,i,n){const t=[];let r=null;n.sort((u,f)=>_.Position.compare(u.getStartPosition(),f.getEndPosition()));for(let u=0,f=n.length;u<f;u++){const c=n[u];if(c.isEmpty())if(a.emptySelectionClipboard){const d=c.getPosition();let s,l,o,g;d.lineNumber<i.getLineCount()?(s=d.lineNumber,l=1,o=d.lineNumber+1,g=1):d.lineNumber>1&&r?.endLineNumber!==d.lineNumber?(s=d.lineNumber-1,l=i.getLineMaxColumn(d.lineNumber-1),o=d.lineNumber,g=i.getLineMaxColumn(d.lineNumber)):(s=d.lineNumber,l=1,o=d.lineNumber,g=i.getLineMaxColumn(d.lineNumber));const h=new p.Range(s,l,o,g);r=h,h.isEmpty()?t[u]=null:t[u]=new k.ReplaceCommand(h,\"\")}else t[u]=null;else t[u]=new k.ReplaceCommand(c,\"\")}return new y.EditOperationResult(0,t,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}}e.DeleteOperations=v}),define(se[181],oe([1,0,11,75,207,150,10,5]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.WordPartOperations=e.WordOperations=void 0;class _{static _createWord(i,n,t,r,u){return{start:r,end:u,wordType:n,nextCharClass:t}}static _findPreviousWordOnLine(i,n,t){const r=n.getLineContent(t.lineNumber);return this._doFindPreviousWordOnLine(r,i,t)}static _doFindPreviousWordOnLine(i,n,t){let r=0;for(let u=t.column-2;u>=0;u--){const f=i.charCodeAt(u),c=n.get(f);if(c===0){if(r===2)return this._createWord(i,r,c,u+1,this._findEndOfWord(i,n,r,u+1));r=1}else if(c===2){if(r===1)return this._createWord(i,r,c,u+1,this._findEndOfWord(i,n,r,u+1));r=2}else if(c===1&&r!==0)return this._createWord(i,r,c,u+1,this._findEndOfWord(i,n,r,u+1))}return r!==0?this._createWord(i,r,1,0,this._findEndOfWord(i,n,r,0)):null}static _findEndOfWord(i,n,t,r){const u=i.length;for(let f=r;f<u;f++){const c=i.charCodeAt(f),d=n.get(c);if(d===1||t===1&&d===2||t===2&&d===0)return f}return u}static _findNextWordOnLine(i,n,t){const r=n.getLineContent(t.lineNumber);return this._doFindNextWordOnLine(r,i,t)}static _doFindNextWordOnLine(i,n,t){let r=0;const u=i.length;for(let f=t.column-1;f<u;f++){const c=i.charCodeAt(f),d=n.get(c);if(d===0){if(r===2)return this._createWord(i,r,d,this._findStartOfWord(i,n,r,f-1),f);r=1}else if(d===2){if(r===1)return this._createWord(i,r,d,this._findStartOfWord(i,n,r,f-1),f);r=2}else if(d===1&&r!==0)return this._createWord(i,r,d,this._findStartOfWord(i,n,r,f-1),f)}return r!==0?this._createWord(i,r,1,this._findStartOfWord(i,n,r,u-1),u):null}static _findStartOfWord(i,n,t,r){for(let u=r;u>=0;u--){const f=i.charCodeAt(u),c=n.get(f);if(c===1||t===1&&c===2||t===2&&c===0)return u+1}return 0}static moveWordLeft(i,n,t,r){let u=t.lineNumber,f=t.column;f===1&&u>1&&(u=u-1,f=n.getLineMaxColumn(u));let c=_._findPreviousWordOnLine(i,n,new S.Position(u,f));if(r===0)return new S.Position(u,c?c.start+1:1);if(r===1)return c&&c.wordType===2&&c.end-c.start===1&&c.nextCharClass===0&&(c=_._findPreviousWordOnLine(i,n,new S.Position(u,c.start+1))),new S.Position(u,c?c.start+1:1);if(r===3){for(;c&&c.wordType===2;)c=_._findPreviousWordOnLine(i,n,new S.Position(u,c.start+1));return new S.Position(u,c?c.start+1:1)}return c&&f<=c.end+1&&(c=_._findPreviousWordOnLine(i,n,new S.Position(u,c.start+1))),new S.Position(u,c?c.end+1:1)}static _moveWordPartLeft(i,n){const t=n.lineNumber,r=i.getLineMaxColumn(t);if(n.column===1)return t>1?new S.Position(t-1,i.getLineMaxColumn(t-1)):n;const u=i.getLineContent(t);for(let f=n.column-1;f>1;f--){const c=u.charCodeAt(f-2),d=u.charCodeAt(f-1);if(c===95&&d!==95)return new S.Position(t,f);if(c===45&&d!==45)return new S.Position(t,f);if((L.isLowerAsciiLetter(c)||L.isAsciiDigit(c))&&L.isUpperAsciiLetter(d))return new S.Position(t,f);if(L.isUpperAsciiLetter(c)&&L.isUpperAsciiLetter(d)&&f+1<r){const s=u.charCodeAt(f);if(L.isLowerAsciiLetter(s)||L.isAsciiDigit(s))return new S.Position(t,f)}}return new S.Position(t,1)}static moveWordRight(i,n,t,r){let u=t.lineNumber,f=t.column,c=!1;f===n.getLineMaxColumn(u)&&u<n.getLineCount()&&(c=!0,u=u+1,f=1);let d=_._findNextWordOnLine(i,n,new S.Position(u,f));if(r===2)d&&d.wordType===2&&d.end-d.start===1&&d.nextCharClass===0&&(d=_._findNextWordOnLine(i,n,new S.Position(u,d.end+1))),d?f=d.end+1:f=n.getLineMaxColumn(u);else if(r===3){for(c&&(f=0);d&&(d.wordType===2||d.start+1<=f);)d=_._findNextWordOnLine(i,n,new S.Position(u,d.end+1));d?f=d.start+1:f=n.getLineMaxColumn(u)}else d&&!c&&f>=d.start+1&&(d=_._findNextWordOnLine(i,n,new S.Position(u,d.end+1))),d?f=d.start+1:f=n.getLineMaxColumn(u);return new S.Position(u,f)}static _moveWordPartRight(i,n){const t=n.lineNumber,r=i.getLineMaxColumn(t);if(n.column===r)return t<i.getLineCount()?new S.Position(t+1,1):n;const u=i.getLineContent(t);for(let f=n.column+1;f<r;f++){const c=u.charCodeAt(f-2),d=u.charCodeAt(f-1);if(c!==95&&d===95)return new S.Position(t,f);if(c!==45&&d===45)return new S.Position(t,f);if((L.isLowerAsciiLetter(c)||L.isAsciiDigit(c))&&L.isUpperAsciiLetter(d))return new S.Position(t,f);if(L.isUpperAsciiLetter(c)&&L.isUpperAsciiLetter(d)&&f+1<r){const s=u.charCodeAt(f);if(L.isLowerAsciiLetter(s)||L.isAsciiDigit(s))return new S.Position(t,f)}}return new S.Position(t,r)}static _deleteWordLeftWhitespace(i,n){const t=i.getLineContent(n.lineNumber),r=n.column-2,u=L.lastNonWhitespaceIndex(t,r);return u+1<r?new p.Range(n.lineNumber,u+2,n.lineNumber,n.column):null}static deleteWordLeft(i,n){const t=i.wordSeparators,r=i.model,u=i.selection,f=i.whitespaceHeuristics;if(!u.isEmpty())return u;if(y.DeleteOperations.isAutoClosingPairDelete(i.autoClosingDelete,i.autoClosingBrackets,i.autoClosingQuotes,i.autoClosingPairs.autoClosingPairsOpenByEnd,i.model,[i.selection],i.autoClosedCharacters)){const o=i.selection.getPosition();return new p.Range(o.lineNumber,o.column-1,o.lineNumber,o.column+1)}const c=new S.Position(u.positionLineNumber,u.positionColumn);let d=c.lineNumber,s=c.column;if(d===1&&s===1)return null;if(f){const o=this._deleteWordLeftWhitespace(r,c);if(o)return o}let l=_._findPreviousWordOnLine(t,r,c);return n===0?l?s=l.start+1:s>1?s=1:(d--,s=r.getLineMaxColumn(d)):(l&&s<=l.end+1&&(l=_._findPreviousWordOnLine(t,r,new S.Position(d,l.start+1))),l?s=l.end+1:s>1?s=1:(d--,s=r.getLineMaxColumn(d))),new p.Range(d,s,c.lineNumber,c.column)}static deleteInsideWord(i,n,t){if(!t.isEmpty())return t;const r=new S.Position(t.positionLineNumber,t.positionColumn),u=this._deleteInsideWordWhitespace(n,r);return u||this._deleteInsideWordDetermineDeleteRange(i,n,r)}static _charAtIsWhitespace(i,n){const t=i.charCodeAt(n);return t===32||t===9}static _deleteInsideWordWhitespace(i,n){const t=i.getLineContent(n.lineNumber),r=t.length;if(r===0)return null;let u=Math.max(n.column-2,0);if(!this._charAtIsWhitespace(t,u))return null;let f=Math.min(n.column-1,r-1);if(!this._charAtIsWhitespace(t,f))return null;for(;u>0&&this._charAtIsWhitespace(t,u-1);)u--;for(;f+1<r&&this._charAtIsWhitespace(t,f+1);)f++;return new p.Range(n.lineNumber,u+1,n.lineNumber,f+2)}static _deleteInsideWordDetermineDeleteRange(i,n,t){const r=n.getLineContent(t.lineNumber),u=r.length;if(u===0)return t.lineNumber>1?new p.Range(t.lineNumber-1,n.getLineMaxColumn(t.lineNumber-1),t.lineNumber,1):t.lineNumber<n.getLineCount()?new p.Range(t.lineNumber,1,t.lineNumber+1,1):new p.Range(t.lineNumber,1,t.lineNumber,1);const f=o=>o.start+1<=t.column&&t.column<=o.end+1,c=(o,g)=>(o=Math.min(o,t.column),g=Math.max(g,t.column),new p.Range(t.lineNumber,o,t.lineNumber,g)),d=o=>{let g=o.start+1,h=o.end+1,m=!1;for(;h-1<u&&this._charAtIsWhitespace(r,h-1);)m=!0,h++;if(!m)for(;g>1&&this._charAtIsWhitespace(r,g-2);)g--;return c(g,h)},s=_._findPreviousWordOnLine(i,n,t);if(s&&f(s))return d(s);const l=_._findNextWordOnLine(i,n,t);return l&&f(l)?d(l):s&&l?c(s.end+1,l.start+1):s?c(s.start+1,s.end+1):l?c(l.start+1,l.end+1):c(1,u+1)}static _deleteWordPartLeft(i,n){if(!n.isEmpty())return n;const t=n.getPosition(),r=_._moveWordPartLeft(i,t);return new p.Range(t.lineNumber,t.column,r.lineNumber,r.column)}static _findFirstNonWhitespaceChar(i,n){const t=i.length;for(let r=n;r<t;r++){const u=i.charAt(r);if(u!==\" \"&&u!==\"\t\")return r}return t}static _deleteWordRightWhitespace(i,n){const t=i.getLineContent(n.lineNumber),r=n.column-1,u=this._findFirstNonWhitespaceChar(t,r);return r+1<u?new p.Range(n.lineNumber,n.column,n.lineNumber,u+1):null}static deleteWordRight(i,n){const t=i.wordSeparators,r=i.model,u=i.selection,f=i.whitespaceHeuristics;if(!u.isEmpty())return u;const c=new S.Position(u.positionLineNumber,u.positionColumn);let d=c.lineNumber,s=c.column;const l=r.getLineCount(),o=r.getLineMaxColumn(d);if(d===l&&s===o)return null;if(f){const h=this._deleteWordRightWhitespace(r,c);if(h)return h}let g=_._findNextWordOnLine(t,r,c);return n===2?g?s=g.end+1:s<o||d===l?s=o:(d++,g=_._findNextWordOnLine(t,r,new S.Position(d,1)),g?s=g.start+1:s=r.getLineMaxColumn(d)):(g&&s>=g.start+1&&(g=_._findNextWordOnLine(t,r,new S.Position(d,g.end+1))),g?s=g.start+1:s<o||d===l?s=o:(d++,g=_._findNextWordOnLine(t,r,new S.Position(d,1)),g?s=g.start+1:s=r.getLineMaxColumn(d))),new p.Range(d,s,c.lineNumber,c.column)}static _deleteWordPartRight(i,n){if(!n.isEmpty())return n;const t=n.getPosition(),r=_._moveWordPartRight(i,t);return new p.Range(t.lineNumber,t.column,r.lineNumber,r.column)}static _createWordAtPosition(i,n,t){const r=new p.Range(n,t.start+1,n,t.end+1);return{word:i.getValueInRange(r),startColumn:r.startColumn,endColumn:r.endColumn}}static getWordAtPosition(i,n,t){const r=(0,E.getMapForWordSeparators)(n),u=_._findPreviousWordOnLine(r,i,t);if(u&&u.wordType===1&&u.start<=t.column-1&&t.column-1<=u.end)return _._createWordAtPosition(i,t.lineNumber,u);const f=_._findNextWordOnLine(r,i,t);return f&&f.wordType===1&&f.start<=t.column-1&&t.column-1<=f.end?_._createWordAtPosition(i,t.lineNumber,f):null}static word(i,n,t,r,u){const f=(0,E.getMapForWordSeparators)(i.wordSeparators),c=_._findPreviousWordOnLine(f,n,u),d=_._findNextWordOnLine(f,n,u);if(!r){let h,m;return c&&c.wordType===1&&c.start<=u.column-1&&u.column-1<=c.end?(h=c.start+1,m=c.end+1):d&&d.wordType===1&&d.start<=u.column-1&&u.column-1<=d.end?(h=d.start+1,m=d.end+1):(c?h=c.end+1:h=1,d?m=d.start+1:m=n.getLineMaxColumn(u.lineNumber)),new k.SingleCursorState(new p.Range(u.lineNumber,h,u.lineNumber,m),1,0,new S.Position(u.lineNumber,m),0)}let s,l;c&&c.wordType===1&&c.start<u.column-1&&u.column-1<c.end?(s=c.start+1,l=c.end+1):d&&d.wordType===1&&d.start<u.column-1&&u.column-1<d.end?(s=d.start+1,l=d.end+1):(s=u.column,l=u.column);const o=u.lineNumber;let g;if(t.selectionStart.containsPosition(u))g=t.selectionStart.endColumn;else if(u.isBeforeOrEqual(t.selectionStart.getStartPosition())){g=s;const h=new S.Position(o,g);t.selectionStart.containsPosition(h)&&(g=t.selectionStart.endColumn)}else{g=l;const h=new S.Position(o,g);t.selectionStart.containsPosition(h)&&(g=t.selectionStart.startColumn)}return t.move(!0,o,g,0)}}e.WordOperations=_;class v extends _{static deleteWordPartLeft(i){const n=b([_.deleteWordLeft(i,0),_.deleteWordLeft(i,2),_._deleteWordPartLeft(i.model,i.selection)]);return n.sort(p.Range.compareRangesUsingEnds),n[2]}static deleteWordPartRight(i){const n=b([_.deleteWordRight(i,0),_.deleteWordRight(i,2),_._deleteWordPartRight(i.model,i.selection)]);return n.sort(p.Range.compareRangesUsingStarts),n[0]}static moveWordPartLeft(i,n,t){const r=b([_.moveWordLeft(i,n,t,0),_.moveWordLeft(i,n,t,2),_._moveWordPartLeft(n,t)]);return r.sort(S.Position.compare),r[2]}static moveWordPartRight(i,n,t){const r=b([_.moveWordRight(i,n,t,0),_.moveWordRight(i,n,t,2),_._moveWordPartRight(n,t)]);return r.sort(S.Position.compare),r[0]}}e.WordPartOperations=v;function b(a){return a.filter(i=>!!i)}}),define(se[208],oe([1,0,20,75,206,181,10,5]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CursorMove=e.CursorMoveCommands=void 0;class _{static addCursorDown(a,i,n){const t=[];let r=0;for(let u=0,f=i.length;u<f;u++){const c=i[u];t[r++]=new k.CursorState(c.modelState,c.viewState),n?t[r++]=k.CursorState.fromModelState(y.MoveOperations.translateDown(a.cursorConfig,a.model,c.modelState)):t[r++]=k.CursorState.fromViewState(y.MoveOperations.translateDown(a.cursorConfig,a,c.viewState))}return t}static addCursorUp(a,i,n){const t=[];let r=0;for(let u=0,f=i.length;u<f;u++){const c=i[u];t[r++]=new k.CursorState(c.modelState,c.viewState),n?t[r++]=k.CursorState.fromModelState(y.MoveOperations.translateUp(a.cursorConfig,a.model,c.modelState)):t[r++]=k.CursorState.fromViewState(y.MoveOperations.translateUp(a.cursorConfig,a,c.viewState))}return t}static moveToBeginningOfLine(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r];t[r]=this._moveToLineStart(a,f,n)}return t}static _moveToLineStart(a,i,n){const t=i.viewState.position.column,r=i.modelState.position.column,u=t===r,f=i.viewState.position.lineNumber,c=a.getLineFirstNonWhitespaceColumn(f);return!u&&!(t===c)?this._moveToLineStartByView(a,i,n):this._moveToLineStartByModel(a,i,n)}static _moveToLineStartByView(a,i,n){return k.CursorState.fromViewState(y.MoveOperations.moveToBeginningOfLine(a.cursorConfig,a,i.viewState,n))}static _moveToLineStartByModel(a,i,n){return k.CursorState.fromModelState(y.MoveOperations.moveToBeginningOfLine(a.cursorConfig,a.model,i.modelState,n))}static moveToEndOfLine(a,i,n,t){const r=[];for(let u=0,f=i.length;u<f;u++){const c=i[u];r[u]=this._moveToLineEnd(a,c,n,t)}return r}static _moveToLineEnd(a,i,n,t){const r=i.viewState.position,u=a.getLineMaxColumn(r.lineNumber),f=r.column===u,c=i.modelState.position,d=a.model.getLineMaxColumn(c.lineNumber),s=u-r.column===d-c.column;return f||s?this._moveToLineEndByModel(a,i,n,t):this._moveToLineEndByView(a,i,n,t)}static _moveToLineEndByView(a,i,n,t){return k.CursorState.fromViewState(y.MoveOperations.moveToEndOfLine(a.cursorConfig,a,i.viewState,n,t))}static _moveToLineEndByModel(a,i,n,t){return k.CursorState.fromModelState(y.MoveOperations.moveToEndOfLine(a.cursorConfig,a.model,i.modelState,n,t))}static expandLineSelection(a,i){const n=[];for(let t=0,r=i.length;t<r;t++){const u=i[t],f=u.modelState.selection.startLineNumber,c=a.model.getLineCount();let d=u.modelState.selection.endLineNumber,s;d===c?s=a.model.getLineMaxColumn(c):(d++,s=1),n[t]=k.CursorState.fromModelState(new k.SingleCursorState(new p.Range(f,1,f,1),0,0,new S.Position(d,s),0))}return n}static moveToBeginningOfBuffer(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r];t[r]=k.CursorState.fromModelState(y.MoveOperations.moveToBeginningOfBuffer(a.cursorConfig,a.model,f.modelState,n))}return t}static moveToEndOfBuffer(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r];t[r]=k.CursorState.fromModelState(y.MoveOperations.moveToEndOfBuffer(a.cursorConfig,a.model,f.modelState,n))}return t}static selectAll(a,i){const n=a.model.getLineCount(),t=a.model.getLineMaxColumn(n);return k.CursorState.fromModelState(new k.SingleCursorState(new p.Range(1,1,1,1),0,0,new S.Position(n,t),0))}static line(a,i,n,t,r){const u=a.model.validatePosition(t),f=r?a.coordinatesConverter.validateViewPosition(new S.Position(r.lineNumber,r.column),u):a.coordinatesConverter.convertModelPositionToViewPosition(u);if(!n){const d=a.model.getLineCount();let s=u.lineNumber+1,l=1;return s>d&&(s=d,l=a.model.getLineMaxColumn(s)),k.CursorState.fromModelState(new k.SingleCursorState(new p.Range(u.lineNumber,1,s,l),2,0,new S.Position(s,l),0))}const c=i.modelState.selectionStart.getStartPosition().lineNumber;if(u.lineNumber<c)return k.CursorState.fromViewState(i.viewState.move(!0,f.lineNumber,1,0));if(u.lineNumber>c){const d=a.getLineCount();let s=f.lineNumber+1,l=1;return s>d&&(s=d,l=a.getLineMaxColumn(s)),k.CursorState.fromViewState(i.viewState.move(!0,s,l,0))}else{const d=i.modelState.selectionStart.getEndPosition();return k.CursorState.fromModelState(i.modelState.move(!0,d.lineNumber,d.column,0))}}static word(a,i,n,t){const r=a.model.validatePosition(t);return k.CursorState.fromModelState(E.WordOperations.word(a.cursorConfig,a.model,i.modelState,n,r))}static cancelSelection(a,i){if(!i.modelState.hasSelection())return new k.CursorState(i.modelState,i.viewState);const n=i.viewState.position.lineNumber,t=i.viewState.position.column;return k.CursorState.fromViewState(new k.SingleCursorState(new p.Range(n,t,n,t),0,0,new S.Position(n,t),0))}static moveTo(a,i,n,t,r){if(n){if(i.modelState.selectionStartKind===1)return this.word(a,i,n,t);if(i.modelState.selectionStartKind===2)return this.line(a,i,n,t,r)}const u=a.model.validatePosition(t),f=r?a.coordinatesConverter.validateViewPosition(new S.Position(r.lineNumber,r.column),u):a.coordinatesConverter.convertModelPositionToViewPosition(u);return k.CursorState.fromViewState(i.viewState.move(n,f.lineNumber,f.column,0))}static simpleMove(a,i,n,t,r,u){switch(n){case 0:return u===4?this._moveHalfLineLeft(a,i,t):this._moveLeft(a,i,t,r);case 1:return u===4?this._moveHalfLineRight(a,i,t):this._moveRight(a,i,t,r);case 2:return u===2?this._moveUpByViewLines(a,i,t,r):this._moveUpByModelLines(a,i,t,r);case 3:return u===2?this._moveDownByViewLines(a,i,t,r):this._moveDownByModelLines(a,i,t,r);case 4:return u===2?i.map(f=>k.CursorState.fromViewState(y.MoveOperations.moveToPrevBlankLine(a.cursorConfig,a,f.viewState,t))):i.map(f=>k.CursorState.fromModelState(y.MoveOperations.moveToPrevBlankLine(a.cursorConfig,a.model,f.modelState,t)));case 5:return u===2?i.map(f=>k.CursorState.fromViewState(y.MoveOperations.moveToNextBlankLine(a.cursorConfig,a,f.viewState,t))):i.map(f=>k.CursorState.fromModelState(y.MoveOperations.moveToNextBlankLine(a.cursorConfig,a.model,f.modelState,t)));case 6:return this._moveToViewMinColumn(a,i,t);case 7:return this._moveToViewFirstNonWhitespaceColumn(a,i,t);case 8:return this._moveToViewCenterColumn(a,i,t);case 9:return this._moveToViewMaxColumn(a,i,t);case 10:return this._moveToViewLastNonWhitespaceColumn(a,i,t);default:return null}}static viewportMove(a,i,n,t,r){const u=a.getCompletelyVisibleViewRange(),f=a.coordinatesConverter.convertViewRangeToModelRange(u);switch(n){case 11:{const c=this._firstLineNumberInRange(a.model,f,r),d=a.model.getLineFirstNonWhitespaceColumn(c);return[this._moveToModelPosition(a,i[0],t,c,d)]}case 13:{const c=this._lastLineNumberInRange(a.model,f,r),d=a.model.getLineFirstNonWhitespaceColumn(c);return[this._moveToModelPosition(a,i[0],t,c,d)]}case 12:{const c=Math.round((f.startLineNumber+f.endLineNumber)/2),d=a.model.getLineFirstNonWhitespaceColumn(c);return[this._moveToModelPosition(a,i[0],t,c,d)]}case 14:{const c=[];for(let d=0,s=i.length;d<s;d++){const l=i[d];c[d]=this.findPositionInViewportIfOutside(a,l,u,t)}return c}default:return null}}static findPositionInViewportIfOutside(a,i,n,t){const r=i.viewState.position.lineNumber;if(n.startLineNumber<=r&&r<=n.endLineNumber-1)return new k.CursorState(i.modelState,i.viewState);{let u;r>n.endLineNumber-1?u=n.endLineNumber-1:r<n.startLineNumber?u=n.startLineNumber:u=r;const f=y.MoveOperations.vertical(a.cursorConfig,a,r,i.viewState.position.column,i.viewState.leftoverVisibleColumns,u,!1);return k.CursorState.fromViewState(i.viewState.move(t,f.lineNumber,f.column,f.leftoverVisibleColumns))}}static _firstLineNumberInRange(a,i,n){let t=i.startLineNumber;return i.startColumn!==a.getLineMinColumn(t)&&t++,Math.min(i.endLineNumber,t+n-1)}static _lastLineNumberInRange(a,i,n){let t=i.startLineNumber;return i.startColumn!==a.getLineMinColumn(t)&&t++,Math.max(t,i.endLineNumber-n+1)}static _moveLeft(a,i,n,t){return i.map(r=>k.CursorState.fromViewState(y.MoveOperations.moveLeft(a.cursorConfig,a,r.viewState,n,t)))}static _moveHalfLineLeft(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r],c=f.viewState.position.lineNumber,d=Math.round(a.getLineLength(c)/2);t[r]=k.CursorState.fromViewState(y.MoveOperations.moveLeft(a.cursorConfig,a,f.viewState,n,d))}return t}static _moveRight(a,i,n,t){return i.map(r=>k.CursorState.fromViewState(y.MoveOperations.moveRight(a.cursorConfig,a,r.viewState,n,t)))}static _moveHalfLineRight(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r],c=f.viewState.position.lineNumber,d=Math.round(a.getLineLength(c)/2);t[r]=k.CursorState.fromViewState(y.MoveOperations.moveRight(a.cursorConfig,a,f.viewState,n,d))}return t}static _moveDownByViewLines(a,i,n,t){const r=[];for(let u=0,f=i.length;u<f;u++){const c=i[u];r[u]=k.CursorState.fromViewState(y.MoveOperations.moveDown(a.cursorConfig,a,c.viewState,n,t))}return r}static _moveDownByModelLines(a,i,n,t){const r=[];for(let u=0,f=i.length;u<f;u++){const c=i[u];r[u]=k.CursorState.fromModelState(y.MoveOperations.moveDown(a.cursorConfig,a.model,c.modelState,n,t))}return r}static _moveUpByViewLines(a,i,n,t){const r=[];for(let u=0,f=i.length;u<f;u++){const c=i[u];r[u]=k.CursorState.fromViewState(y.MoveOperations.moveUp(a.cursorConfig,a,c.viewState,n,t))}return r}static _moveUpByModelLines(a,i,n,t){const r=[];for(let u=0,f=i.length;u<f;u++){const c=i[u];r[u]=k.CursorState.fromModelState(y.MoveOperations.moveUp(a.cursorConfig,a.model,c.modelState,n,t))}return r}static _moveToViewPosition(a,i,n,t,r){return k.CursorState.fromViewState(i.viewState.move(n,t,r,0))}static _moveToModelPosition(a,i,n,t,r){return k.CursorState.fromModelState(i.modelState.move(n,t,r,0))}static _moveToViewMinColumn(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r],c=f.viewState.position.lineNumber,d=a.getLineMinColumn(c);t[r]=this._moveToViewPosition(a,f,n,c,d)}return t}static _moveToViewFirstNonWhitespaceColumn(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r],c=f.viewState.position.lineNumber,d=a.getLineFirstNonWhitespaceColumn(c);t[r]=this._moveToViewPosition(a,f,n,c,d)}return t}static _moveToViewCenterColumn(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r],c=f.viewState.position.lineNumber,d=Math.round((a.getLineMaxColumn(c)+a.getLineMinColumn(c))/2);t[r]=this._moveToViewPosition(a,f,n,c,d)}return t}static _moveToViewMaxColumn(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r],c=f.viewState.position.lineNumber,d=a.getLineMaxColumn(c);t[r]=this._moveToViewPosition(a,f,n,c,d)}return t}static _moveToViewLastNonWhitespaceColumn(a,i,n){const t=[];for(let r=0,u=i.length;r<u;r++){const f=i[r],c=f.viewState.position.lineNumber,d=a.getLineLastNonWhitespaceColumn(c);t[r]=this._moveToViewPosition(a,f,n,c,d)}return t}}e.CursorMoveCommands=_;var v;(function(b){const a=function(n){if(!L.isObject(n))return!1;const t=n;return!(!L.isString(t.to)||!L.isUndefined(t.select)&&!L.isBoolean(t.select)||!L.isUndefined(t.by)&&!L.isString(t.by)||!L.isUndefined(t.value)&&!L.isNumber(t.value))};b.metadata={description:\"Move cursor to a logical position in the view\",args:[{name:\"Cursor move argument object\",description:`Property-value pairs that can be passed through this argument:\n\t\t\t\t\t* 'to': A mandatory logical position value providing where to move the cursor.\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t\t'left', 'right', 'up', 'down', 'prevBlankLine', 'nextBlankLine',\n\t\t\t\t\t\t'wrappedLineStart', 'wrappedLineEnd', 'wrappedLineColumnCenter'\n\t\t\t\t\t\t'wrappedLineFirstNonWhitespaceCharacter', 'wrappedLineLastNonWhitespaceCharacter'\n\t\t\t\t\t\t'viewPortTop', 'viewPortCenter', 'viewPortBottom', 'viewPortIfOutside'\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t* 'by': Unit to move. Default is computed based on 'to' value.\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t\t'line', 'wrappedLine', 'character', 'halfLine'\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t* 'value': Number of units to move. Default is '1'.\n\t\t\t\t\t* 'select': If 'true' makes the selection. Default is 'false'.\n\t\t\t\t`,constraint:a,schema:{type:\"object\",required:[\"to\"],properties:{to:{type:\"string\",enum:[\"left\",\"right\",\"up\",\"down\",\"prevBlankLine\",\"nextBlankLine\",\"wrappedLineStart\",\"wrappedLineEnd\",\"wrappedLineColumnCenter\",\"wrappedLineFirstNonWhitespaceCharacter\",\"wrappedLineLastNonWhitespaceCharacter\",\"viewPortTop\",\"viewPortCenter\",\"viewPortBottom\",\"viewPortIfOutside\"]},by:{type:\"string\",enum:[\"line\",\"wrappedLine\",\"character\",\"halfLine\"]},value:{type:\"number\",default:1},select:{type:\"boolean\",default:!1}}}}]},b.RawDirection={Left:\"left\",Right:\"right\",Up:\"up\",Down:\"down\",PrevBlankLine:\"prevBlankLine\",NextBlankLine:\"nextBlankLine\",WrappedLineStart:\"wrappedLineStart\",WrappedLineFirstNonWhitespaceCharacter:\"wrappedLineFirstNonWhitespaceCharacter\",WrappedLineColumnCenter:\"wrappedLineColumnCenter\",WrappedLineEnd:\"wrappedLineEnd\",WrappedLineLastNonWhitespaceCharacter:\"wrappedLineLastNonWhitespaceCharacter\",ViewPortTop:\"viewPortTop\",ViewPortCenter:\"viewPortCenter\",ViewPortBottom:\"viewPortBottom\",ViewPortIfOutside:\"viewPortIfOutside\"},b.RawUnit={Line:\"line\",WrappedLine:\"wrappedLine\",Character:\"character\",HalfLine:\"halfLine\"};function i(n){if(!n.to)return null;let t;switch(n.to){case b.RawDirection.Left:t=0;break;case b.RawDirection.Right:t=1;break;case b.RawDirection.Up:t=2;break;case b.RawDirection.Down:t=3;break;case b.RawDirection.PrevBlankLine:t=4;break;case b.RawDirection.NextBlankLine:t=5;break;case b.RawDirection.WrappedLineStart:t=6;break;case b.RawDirection.WrappedLineFirstNonWhitespaceCharacter:t=7;break;case b.RawDirection.WrappedLineColumnCenter:t=8;break;case b.RawDirection.WrappedLineEnd:t=9;break;case b.RawDirection.WrappedLineLastNonWhitespaceCharacter:t=10;break;case b.RawDirection.ViewPortTop:t=11;break;case b.RawDirection.ViewPortBottom:t=13;break;case b.RawDirection.ViewPortCenter:t=12;break;case b.RawDirection.ViewPortIfOutside:t=14;break;default:return null}let r=0;switch(n.by){case b.RawUnit.Line:r=1;break;case b.RawUnit.WrappedLine:r=2;break;case b.RawUnit.Character:r=3;break;case b.RawUnit.HalfLine:r=4;break}return{direction:t,unit:r,select:!!n.select,value:n.value||1}}b.parse=i})(v||(e.CursorMove=v={}))}),define(se[512],oe([1,0,75,10,5,24]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Cursor=void 0;class S{constructor(_){this._selTrackedRange=null,this._trackSelection=!0,this._setState(_,new L.SingleCursorState(new y.Range(1,1,1,1),0,0,new k.Position(1,1),0),new L.SingleCursorState(new y.Range(1,1,1,1),0,0,new k.Position(1,1),0))}dispose(_){this._removeTrackedRange(_)}startTrackingSelection(_){this._trackSelection=!0,this._updateTrackedRange(_)}stopTrackingSelection(_){this._trackSelection=!1,this._removeTrackedRange(_)}_updateTrackedRange(_){this._trackSelection&&(this._selTrackedRange=_.model._setTrackedRange(this._selTrackedRange,this.modelState.selection,0))}_removeTrackedRange(_){this._selTrackedRange=_.model._setTrackedRange(this._selTrackedRange,null,0)}asCursorState(){return new L.CursorState(this.modelState,this.viewState)}readSelectionFromMarkers(_){const v=_.model._getTrackedRange(this._selTrackedRange);return this.modelState.selection.isEmpty()&&!v.isEmpty()?E.Selection.fromRange(v.collapseToEnd(),this.modelState.selection.getDirection()):E.Selection.fromRange(v,this.modelState.selection.getDirection())}ensureValidState(_){this._setState(_,this.modelState,this.viewState)}setState(_,v,b){this._setState(_,v,b)}static _validatePositionWithCache(_,v,b,a){return v.equals(b)?a:_.normalizePosition(v,2)}static _validateViewState(_,v){const b=v.position,a=v.selectionStart.getStartPosition(),i=v.selectionStart.getEndPosition(),n=_.normalizePosition(b,2),t=this._validatePositionWithCache(_,a,b,n),r=this._validatePositionWithCache(_,i,a,t);return b.equals(n)&&a.equals(t)&&i.equals(r)?v:new L.SingleCursorState(y.Range.fromPositions(t,r),v.selectionStartKind,v.selectionStartLeftoverVisibleColumns+a.column-t.column,n,v.leftoverVisibleColumns+b.column-n.column)}_setState(_,v,b){if(b&&(b=S._validateViewState(_.viewModel,b)),v){const a=_.model.validateRange(v.selectionStart),i=v.selectionStart.equalsRange(a)?v.selectionStartLeftoverVisibleColumns:0,n=_.model.validatePosition(v.position),t=v.position.equals(n)?v.leftoverVisibleColumns:0;v=new L.SingleCursorState(a,v.selectionStartKind,i,n,t)}else{if(!b)return;const a=_.model.validateRange(_.coordinatesConverter.convertViewRangeToModelRange(b.selectionStart)),i=_.model.validatePosition(_.coordinatesConverter.convertViewPositionToModelPosition(b.position));v=new L.SingleCursorState(a,b.selectionStartKind,b.selectionStartLeftoverVisibleColumns,i,b.leftoverVisibleColumns)}if(b){const a=_.coordinatesConverter.validateViewRange(b.selectionStart,v.selectionStart),i=_.coordinatesConverter.validateViewPosition(b.position,v.position);b=new L.SingleCursorState(a,v.selectionStartKind,v.selectionStartLeftoverVisibleColumns,i,v.leftoverVisibleColumns)}else{const a=_.coordinatesConverter.convertModelPositionToViewPosition(new k.Position(v.selectionStart.startLineNumber,v.selectionStart.startColumn)),i=_.coordinatesConverter.convertModelPositionToViewPosition(new k.Position(v.selectionStart.endLineNumber,v.selectionStart.endColumn)),n=new y.Range(a.lineNumber,a.column,i.lineNumber,i.column),t=_.coordinatesConverter.convertModelPositionToViewPosition(v.position);b=new L.SingleCursorState(n,v.selectionStartKind,v.selectionStartLeftoverVisibleColumns,t,v.leftoverVisibleColumns)}this.modelState=v,this.viewState=b,this._updateTrackedRange(_)}}e.Cursor=S}),define(se[513],oe([1,0,13,60,75,512,10,5,24]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CursorCollection=void 0;class v{constructor(a){this.context=a,this.cursors=[new E.Cursor(a)],this.lastAddedCursorIndex=0}dispose(){for(const a of this.cursors)a.dispose(this.context)}startTrackingSelections(){for(const a of this.cursors)a.startTrackingSelection(this.context)}stopTrackingSelections(){for(const a of this.cursors)a.stopTrackingSelection(this.context)}updateContext(a){this.context=a}ensureValidState(){for(const a of this.cursors)a.ensureValidState(this.context)}readSelectionFromMarkers(){return this.cursors.map(a=>a.readSelectionFromMarkers(this.context))}getAll(){return this.cursors.map(a=>a.asCursorState())}getViewPositions(){return this.cursors.map(a=>a.viewState.position)}getTopMostViewPosition(){return(0,k.findFirstMinBy)(this.cursors,(0,L.compareBy)(a=>a.viewState.position,S.Position.compare)).viewState.position}getBottomMostViewPosition(){return(0,k.findLastMaxBy)(this.cursors,(0,L.compareBy)(a=>a.viewState.position,S.Position.compare)).viewState.position}getSelections(){return this.cursors.map(a=>a.modelState.selection)}getViewSelections(){return this.cursors.map(a=>a.viewState.selection)}setSelections(a){this.setStates(y.CursorState.fromModelSelections(a))}getPrimaryCursor(){return this.cursors[0].asCursorState()}setStates(a){a!==null&&(this.cursors[0].setState(this.context,a[0].modelState,a[0].viewState),this._setSecondaryStates(a.slice(1)))}_setSecondaryStates(a){const i=this.cursors.length-1,n=a.length;if(i<n){const t=n-i;for(let r=0;r<t;r++)this._addSecondaryCursor()}else if(i>n){const t=i-n;for(let r=0;r<t;r++)this._removeSecondaryCursor(this.cursors.length-2)}for(let t=0;t<n;t++)this.cursors[t+1].setState(this.context,a[t].modelState,a[t].viewState)}killSecondaryCursors(){this._setSecondaryStates([])}_addSecondaryCursor(){this.cursors.push(new E.Cursor(this.context)),this.lastAddedCursorIndex=this.cursors.length-1}getLastAddedCursorIndex(){return this.cursors.length===1||this.lastAddedCursorIndex===0?0:this.lastAddedCursorIndex}_removeSecondaryCursor(a){this.lastAddedCursorIndex>=a+1&&this.lastAddedCursorIndex--,this.cursors[a+1].dispose(this.context),this.cursors.splice(a+1,1)}normalize(){if(this.cursors.length===1)return;const a=this.cursors.slice(0),i=[];for(let n=0,t=a.length;n<t;n++)i.push({index:n,selection:a[n].modelState.selection});i.sort((0,L.compareBy)(n=>n.selection,p.Range.compareRangesUsingStarts));for(let n=0;n<i.length-1;n++){const t=i[n],r=i[n+1],u=t.selection,f=r.selection;if(!this.context.cursorConfig.multiCursorMergeOverlapping)continue;let c;if(f.isEmpty()||u.isEmpty()?c=f.getStartPosition().isBeforeOrEqual(u.getEndPosition()):c=f.getStartPosition().isBefore(u.getEndPosition()),c){const d=t.index<r.index?n:n+1,s=t.index<r.index?n+1:n,l=i[s].index,o=i[d].index,g=i[s].selection,h=i[d].selection;if(!g.equalsSelection(h)){const m=g.plusRange(h),C=g.selectionStartLineNumber===g.startLineNumber&&g.selectionStartColumn===g.startColumn,w=h.selectionStartLineNumber===h.startLineNumber&&h.selectionStartColumn===h.startColumn;let D;l===this.lastAddedCursorIndex?(D=C,this.lastAddedCursorIndex=o):D=w;let I;D?I=new _.Selection(m.startLineNumber,m.startColumn,m.endLineNumber,m.endColumn):I=new _.Selection(m.endLineNumber,m.endColumn,m.startLineNumber,m.startColumn),i[d].selection=I;const T=y.CursorState.fromModelSelection(I);a[o].setState(this.context,T.modelState,T.viewState)}for(const m of i)m.index>l&&m.index--;a.splice(l,1),i.splice(s,1),this._removeSecondaryCursor(l-1),n--}}}}e.CursorCollection=v}),define(se[514],oe([1,0,113]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CharacterPairSupport=void 0;class k{constructor(E){if(E.autoClosingPairs?this._autoClosingPairs=E.autoClosingPairs.map(S=>new L.StandardAutoClosingPairConditional(S)):E.brackets?this._autoClosingPairs=E.brackets.map(S=>new L.StandardAutoClosingPairConditional({open:S[0],close:S[1]})):this._autoClosingPairs=[],E.__electricCharacterSupport&&E.__electricCharacterSupport.docComment){const S=E.__electricCharacterSupport.docComment;this._autoClosingPairs.push(new L.StandardAutoClosingPairConditional({open:S.open,close:S.close||\"\"}))}this._autoCloseBeforeForQuotes=typeof E.autoCloseBefore==\"string\"?E.autoCloseBefore:k.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED_QUOTES,this._autoCloseBeforeForBrackets=typeof E.autoCloseBefore==\"string\"?E.autoCloseBefore:k.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED_BRACKETS,this._surroundingPairs=E.surroundingPairs||this._autoClosingPairs}getAutoClosingPairs(){return this._autoClosingPairs}getAutoCloseBeforeSet(E){return E?this._autoCloseBeforeForQuotes:this._autoCloseBeforeForBrackets}getSurroundingPairs(){return this._surroundingPairs}}e.CharacterPairSupport=k,k.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED_QUOTES=`;:.,=}])> \n\t`,k.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED_BRACKETS=`'\"\\`;:.,=}])> \n\t`}),define(se[515],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IndentRulesSupport=void 0;function L(y){return y.global&&(y.lastIndex=0),!0}class k{constructor(E){this._indentationRules=E}shouldIncrease(E){return!!(this._indentationRules&&this._indentationRules.increaseIndentPattern&&L(this._indentationRules.increaseIndentPattern)&&this._indentationRules.increaseIndentPattern.test(E))}shouldDecrease(E){return!!(this._indentationRules&&this._indentationRules.decreaseIndentPattern&&L(this._indentationRules.decreaseIndentPattern)&&this._indentationRules.decreaseIndentPattern.test(E))}shouldIndentNextLine(E){return!!(this._indentationRules&&this._indentationRules.indentNextLinePattern&&L(this._indentationRules.indentNextLinePattern)&&this._indentationRules.indentNextLinePattern.test(E))}shouldIgnore(E){return!!(this._indentationRules&&this._indentationRules.unIndentedLinePattern&&L(this._indentationRules.unIndentedLinePattern)&&this._indentationRules.unIndentedLinePattern.test(E))}getIndentMetadata(E){let S=0;return this.shouldIncrease(E)&&(S+=1),this.shouldDecrease(E)&&(S+=2),this.shouldIndentNextLine(E)&&(S+=4),this.shouldIgnore(E)&&(S+=8),S}}e.IndentRulesSupport=k}),define(se[516],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BasicInplaceReplace=void 0;class L{constructor(){this._defaultValueSet=[[\"true\",\"false\"],[\"True\",\"False\"],[\"Private\",\"Public\",\"Friend\",\"ReadOnly\",\"Partial\",\"Protected\",\"WriteOnly\"],[\"public\",\"protected\",\"private\"]]}navigateValueSet(y,E,S,p,_){if(y&&E){const v=this.doNavigateValueSet(E,_);if(v)return{range:y,value:v}}if(S&&p){const v=this.doNavigateValueSet(p,_);if(v)return{range:S,value:v}}return null}doNavigateValueSet(y,E){const S=this.numberReplace(y,E);return S!==null?S:this.textReplace(y,E)}numberReplace(y,E){const S=Math.pow(10,y.length-(y.lastIndexOf(\".\")+1));let p=Number(y);const _=parseFloat(y);return!isNaN(p)&&!isNaN(_)&&p===_?p===0&&!E?null:(p=Math.floor(p*S),p+=E?S:-S,String(p/S)):null}textReplace(y,E){return this.valueSetsReplace(this._defaultValueSet,y,E)}valueSetsReplace(y,E,S){let p=null;for(let _=0,v=y.length;p===null&&_<v;_++)p=this.valueSetReplace(y[_],E,S);return p}valueSetReplace(y,E,S){let p=y.indexOf(E);return p>=0?(p+=S?1:-1,p<0?p=y.length-1:p%=y.length,y[p]):null}}e.BasicInplaceReplace=L,L.INSTANCE=new L}),define(se[517],oe([1,0,267]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ClosingBracketKind=e.OpeningBracketKind=e.BracketKindBase=e.LanguageBracketsConfiguration=void 0;class k{constructor(v,b){this.languageId=v;const a=b.brackets?y(b.brackets):[],i=new L.CachedFunction(r=>{const u=new Set;return{info:new S(this,r,u),closing:u}}),n=new L.CachedFunction(r=>{const u=new Set,f=new Set;return{info:new p(this,r,u,f),opening:u,openingColorized:f}});for(const[r,u]of a){const f=i.get(r),c=n.get(u);f.closing.add(c.info),c.opening.add(f.info)}const t=b.colorizedBracketPairs?y(b.colorizedBracketPairs):a.filter(r=>!(r[0]===\"<\"&&r[1]===\">\"));for(const[r,u]of t){const f=i.get(r),c=n.get(u);f.closing.add(c.info),c.openingColorized.add(f.info),c.opening.add(f.info)}this._openingBrackets=new Map([...i.cachedValues].map(([r,u])=>[r,u.info])),this._closingBrackets=new Map([...n.cachedValues].map(([r,u])=>[r,u.info]))}get openingBrackets(){return[...this._openingBrackets.values()]}get closingBrackets(){return[...this._closingBrackets.values()]}getOpeningBracketInfo(v){return this._openingBrackets.get(v)}getClosingBracketInfo(v){return this._closingBrackets.get(v)}getBracketInfo(v){return this.getOpeningBracketInfo(v)||this.getClosingBracketInfo(v)}}e.LanguageBracketsConfiguration=k;function y(_){return _.filter(([v,b])=>v!==\"\"&&b!==\"\")}class E{constructor(v,b){this.config=v,this.bracketText=b}get languageId(){return this.config.languageId}}e.BracketKindBase=E;class S extends E{constructor(v,b,a){super(v,b),this.openedBrackets=a,this.isOpeningBracket=!0}}e.OpeningBracketKind=S;class p extends E{constructor(v,b,a,i){super(v,b),this.openingBrackets=a,this.openingColorizedBrackets=i,this.isOpeningBracket=!1}closes(v){return v.config!==this.config?!1:this.openingBrackets.has(v)}closesColorized(v){return v.config!==this.config?!1:this.openingColorizedBrackets.has(v)}getOpeningBrackets(){return[...this.openingBrackets]}}e.ClosingBracketKind=p}),define(se[518],oe([1,0,12,11,113]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OnEnterSupport=void 0;class E{constructor(p){p=p||{},p.brackets=p.brackets||[[\"(\",\")\"],[\"{\",\"}\"],[\"[\",\"]\"]],this._brackets=[],p.brackets.forEach(_=>{const v=E._createOpenBracketRegExp(_[0]),b=E._createCloseBracketRegExp(_[1]);v&&b&&this._brackets.push({open:_[0],openRegExp:v,close:_[1],closeRegExp:b})}),this._regExpRules=p.onEnterRules||[]}onEnter(p,_,v,b){if(p>=3)for(let a=0,i=this._regExpRules.length;a<i;a++){const n=this._regExpRules[a];if([{reg:n.beforeText,text:v},{reg:n.afterText,text:b},{reg:n.previousLineText,text:_}].every(r=>r.reg?(r.reg.lastIndex=0,r.reg.test(r.text)):!0))return n.action}if(p>=2&&v.length>0&&b.length>0)for(let a=0,i=this._brackets.length;a<i;a++){const n=this._brackets[a];if(n.openRegExp.test(v)&&n.closeRegExp.test(b))return{indentAction:y.IndentAction.IndentOutdent}}if(p>=2&&v.length>0){for(let a=0,i=this._brackets.length;a<i;a++)if(this._brackets[a].openRegExp.test(v))return{indentAction:y.IndentAction.Indent}}return null}static _createOpenBracketRegExp(p){let _=k.escapeRegExpCharacters(p);return/\\B/.test(_.charAt(0))||(_=\"\\\\b\"+_),_+=\"\\\\s*$\",E._safeRegExp(_)}static _createCloseBracketRegExp(p){let _=k.escapeRegExpCharacters(p);return/\\B/.test(_.charAt(_.length-1))||(_=_+\"\\\\b\"),_=\"^\\\\s*\"+_,E._safeRegExp(_)}static _safeRegExp(p){try{return new RegExp(p)}catch(_){return(0,L.onUnexpectedError)(_),null}}}e.OnEnterSupport=E}),define(se[519],oe([1,0,39]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.generateTokensCSSForColorMap=e.ThemeTrieElement=e.ThemeTrieElementRule=e.strcmp=e.toStandardTokenType=e.TokenTheme=e.ColorMap=e.parseTokenTheme=e.ParsedTokenThemeRule=void 0;class k{constructor(u,f,c,d,s){this._parsedThemeRuleBrand=void 0,this.token=u,this.index=f,this.fontStyle=c,this.foreground=d,this.background=s}}e.ParsedTokenThemeRule=k;function y(r){if(!r||!Array.isArray(r))return[];const u=[];let f=0;for(let c=0,d=r.length;c<d;c++){const s=r[c];let l=-1;if(typeof s.fontStyle==\"string\"){l=0;const h=s.fontStyle.split(\" \");for(let m=0,C=h.length;m<C;m++)switch(h[m]){case\"italic\":l=l|1;break;case\"bold\":l=l|2;break;case\"underline\":l=l|4;break;case\"strikethrough\":l=l|8;break}}let o=null;typeof s.foreground==\"string\"&&(o=s.foreground);let g=null;typeof s.background==\"string\"&&(g=s.background),u[f++]=new k(s.token||\"\",c,l,o,g)}return u}e.parseTokenTheme=y;function E(r,u){r.sort((m,C)=>{const w=a(m.token,C.token);return w!==0?w:m.index-C.index});let f=0,c=\"000000\",d=\"ffffff\";for(;r.length>=1&&r[0].token===\"\";){const m=r.shift();m.fontStyle!==-1&&(f=m.fontStyle),m.foreground!==null&&(c=m.foreground),m.background!==null&&(d=m.background)}const s=new p;for(const m of u)s.getId(m);const l=s.getId(c),o=s.getId(d),g=new i(f,l,o),h=new n(g);for(let m=0,C=r.length;m<C;m++){const w=r[m];h.insert(w.token,w.fontStyle,s.getId(w.foreground),s.getId(w.background))}return new _(s,h)}const S=/^#?([0-9A-Fa-f]{6})([0-9A-Fa-f]{2})?$/;class p{constructor(){this._lastColorId=0,this._id2color=[],this._color2id=new Map}getId(u){if(u===null)return 0;const f=u.match(S);if(!f)throw new Error(\"Illegal value for token color: \"+u);u=f[1].toUpperCase();let c=this._color2id.get(u);return c||(c=++this._lastColorId,this._color2id.set(u,c),this._id2color[c]=L.Color.fromHex(\"#\"+u),c)}getColorMap(){return this._id2color.slice(0)}}e.ColorMap=p;class _{static createFromRawTokenTheme(u,f){return this.createFromParsedTokenTheme(y(u),f)}static createFromParsedTokenTheme(u,f){return E(u,f)}constructor(u,f){this._colorMap=u,this._root=f,this._cache=new Map}getColorMap(){return this._colorMap.getColorMap()}_match(u){return this._root.match(u)}match(u,f){let c=this._cache.get(f);if(typeof c>\"u\"){const d=this._match(f),s=b(f);c=(d.metadata|s<<8)>>>0,this._cache.set(f,c)}return(c|u<<0)>>>0}}e.TokenTheme=_;const v=/\\b(comment|string|regex|regexp)\\b/;function b(r){const u=r.match(v);if(!u)return 0;switch(u[1]){case\"comment\":return 1;case\"string\":return 2;case\"regex\":return 3;case\"regexp\":return 3}throw new Error(\"Unexpected match for standard token type!\")}e.toStandardTokenType=b;function a(r,u){return r<u?-1:r>u?1:0}e.strcmp=a;class i{constructor(u,f,c){this._themeTrieElementRuleBrand=void 0,this._fontStyle=u,this._foreground=f,this._background=c,this.metadata=(this._fontStyle<<11|this._foreground<<15|this._background<<24)>>>0}clone(){return new i(this._fontStyle,this._foreground,this._background)}acceptOverwrite(u,f,c){u!==-1&&(this._fontStyle=u),f!==0&&(this._foreground=f),c!==0&&(this._background=c),this.metadata=(this._fontStyle<<11|this._foreground<<15|this._background<<24)>>>0}}e.ThemeTrieElementRule=i;class n{constructor(u){this._themeTrieElementBrand=void 0,this._mainRule=u,this._children=new Map}match(u){if(u===\"\")return this._mainRule;const f=u.indexOf(\".\");let c,d;f===-1?(c=u,d=\"\"):(c=u.substring(0,f),d=u.substring(f+1));const s=this._children.get(c);return typeof s<\"u\"?s.match(d):this._mainRule}insert(u,f,c,d){if(u===\"\"){this._mainRule.acceptOverwrite(f,c,d);return}const s=u.indexOf(\".\");let l,o;s===-1?(l=u,o=\"\"):(l=u.substring(0,s),o=u.substring(s+1));let g=this._children.get(l);typeof g>\"u\"&&(g=new n(this._mainRule.clone()),this._children.set(l,g)),g.insert(o,f,c,d)}}e.ThemeTrieElement=n;function t(r){const u=[];for(let f=1,c=r.length;f<c;f++){const d=r[f];u[f]=`.mtk${f} { color: ${d}; }`}return u.push(\".mtki { font-style: italic; }\"),u.push(\".mtkb { font-weight: bold; }\"),u.push(\".mtku { text-decoration: underline; text-underline-position: under; }\"),u.push(\".mtks { text-decoration: line-through; }\"),u.push(\".mtks.mtku { text-decoration: underline line-through; text-underline-position: under; }\"),u.join(`\n`)}e.generateTokensCSSForColorMap=t}),define(se[41],oe([1,0,55]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.shouldSynchronizeModel=e.ApplyEditsResult=e.SearchData=e.ValidAnnotatedEditOperation=e.isITextSnapshot=e.FindMatch=e.TextModelResolvedOptions=e.InjectedTextCursorStops=e.MinimapPosition=e.GlyphMarginLane=e.OverviewRulerLane=void 0;var k;(function(t){t[t.Left=1]=\"Left\",t[t.Center=2]=\"Center\",t[t.Right=4]=\"Right\",t[t.Full=7]=\"Full\"})(k||(e.OverviewRulerLane=k={}));var y;(function(t){t[t.Left=1]=\"Left\",t[t.Center=2]=\"Center\",t[t.Right=3]=\"Right\"})(y||(e.GlyphMarginLane=y={}));var E;(function(t){t[t.Inline=1]=\"Inline\",t[t.Gutter=2]=\"Gutter\"})(E||(e.MinimapPosition=E={}));var S;(function(t){t[t.Both=0]=\"Both\",t[t.Right=1]=\"Right\",t[t.Left=2]=\"Left\",t[t.None=3]=\"None\"})(S||(e.InjectedTextCursorStops=S={}));class p{get originalIndentSize(){return this._indentSizeIsTabSize?\"tabSize\":this.indentSize}constructor(r){this._textModelResolvedOptionsBrand=void 0,this.tabSize=Math.max(1,r.tabSize|0),r.indentSize===\"tabSize\"?(this.indentSize=this.tabSize,this._indentSizeIsTabSize=!0):(this.indentSize=Math.max(1,r.indentSize|0),this._indentSizeIsTabSize=!1),this.insertSpaces=!!r.insertSpaces,this.defaultEOL=r.defaultEOL|0,this.trimAutoWhitespace=!!r.trimAutoWhitespace,this.bracketPairColorizationOptions=r.bracketPairColorizationOptions}equals(r){return this.tabSize===r.tabSize&&this._indentSizeIsTabSize===r._indentSizeIsTabSize&&this.indentSize===r.indentSize&&this.insertSpaces===r.insertSpaces&&this.defaultEOL===r.defaultEOL&&this.trimAutoWhitespace===r.trimAutoWhitespace&&(0,L.equals)(this.bracketPairColorizationOptions,r.bracketPairColorizationOptions)}createChangeEvent(r){return{tabSize:this.tabSize!==r.tabSize,indentSize:this.indentSize!==r.indentSize,insertSpaces:this.insertSpaces!==r.insertSpaces,trimAutoWhitespace:this.trimAutoWhitespace!==r.trimAutoWhitespace}}}e.TextModelResolvedOptions=p;class _{constructor(r,u){this._findMatchBrand=void 0,this.range=r,this.matches=u}}e.FindMatch=_;function v(t){return t&&typeof t.read==\"function\"}e.isITextSnapshot=v;class b{constructor(r,u,f,c,d,s){this.identifier=r,this.range=u,this.text=f,this.forceMoveMarkers=c,this.isAutoWhitespaceEdit=d,this._isTracked=s}}e.ValidAnnotatedEditOperation=b;class a{constructor(r,u,f){this.regex=r,this.wordSeparators=u,this.simpleSearch=f}}e.SearchData=a;class i{constructor(r,u,f){this.reverseEdits=r,this.changes=u,this.trimAutoWhitespaceLineNumbers=f}}e.ApplyEditsResult=i;function n(t){return!t.isTooLargeForSyncing()&&!t.isForSimpleWidget}e.shouldSynchronizeModel=n}),define(se[91],oe([1,0,11,5]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.lengthOfString=e.lengthsToRange=e.positionToLength=e.lengthGreaterThanEqual=e.lengthLessThanEqual=e.lengthLessThan=e.lengthDiffNonNegative=e.lengthEquals=e.sumLengths=e.lengthAdd=e.lengthGetColumnCountIfZeroLineCount=e.lengthGetLineCount=e.lengthToObj=e.toLength=e.lengthIsZero=e.lengthZero=e.lengthDiff=e.LengthObj=void 0;class y{constructor(g,h){this.lineCount=g,this.columnCount=h}toString(){return`${this.lineCount},${this.columnCount}`}}e.LengthObj=y,y.zero=new y(0,0);function E(o,g,h,m){return o!==h?_(h-o,m):_(0,m-g)}e.lengthDiff=E,e.lengthZero=0;function S(o){return o===0}e.lengthIsZero=S;const p=2**26;function _(o,g){return o*p+g}e.toLength=_;function v(o){const g=o,h=Math.floor(g/p),m=g-h*p;return new y(h,m)}e.lengthToObj=v;function b(o){return Math.floor(o/p)}e.lengthGetLineCount=b;function a(o){return o}e.lengthGetColumnCountIfZeroLineCount=a;function i(o,g){let h=o+g;return g>=p&&(h=h-o%p),h}e.lengthAdd=i;function n(o,g){return o.reduce((h,m)=>i(h,g(m)),e.lengthZero)}e.sumLengths=n;function t(o,g){return o===g}e.lengthEquals=t;function r(o,g){const h=o,m=g;if(m-h<=0)return e.lengthZero;const w=Math.floor(h/p),D=Math.floor(m/p),I=m-D*p;if(w===D){const T=h-w*p;return _(0,I-T)}else return _(D-w,I)}e.lengthDiffNonNegative=r;function u(o,g){return o<g}e.lengthLessThan=u;function f(o,g){return o<=g}e.lengthLessThanEqual=f;function c(o,g){return o>=g}e.lengthGreaterThanEqual=c;function d(o){return _(o.lineNumber-1,o.column-1)}e.positionToLength=d;function s(o,g){const h=o,m=Math.floor(h/p),C=h-m*p,w=g,D=Math.floor(w/p),I=w-D*p;return new k.Range(m+1,C+1,D+1,I+1)}e.lengthsToRange=s;function l(o){const g=(0,L.splitLines)(o);return _(g.length-1,g[g.length-1].length)}e.lengthOfString=l}),define(se[182],oe([1,0,5,91]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BeforeEditPositionMapper=e.TextEditInfo=void 0;class y{static fromModelContentChanges(_){return _.map(b=>{const a=L.Range.lift(b.range);return new y((0,k.positionToLength)(a.getStartPosition()),(0,k.positionToLength)(a.getEndPosition()),(0,k.lengthOfString)(b.text))}).reverse()}constructor(_,v,b){this.startOffset=_,this.endOffset=v,this.newLength=b}toString(){return`[${(0,k.lengthToObj)(this.startOffset)}...${(0,k.lengthToObj)(this.endOffset)}) -> ${(0,k.lengthToObj)(this.newLength)}`}}e.TextEditInfo=y;class E{constructor(_){this.nextEditIdx=0,this.deltaOldToNewLineCount=0,this.deltaOldToNewColumnCount=0,this.deltaLineIdxInOld=-1,this.edits=_.map(v=>S.from(v))}getOffsetBeforeChange(_){return this.adjustNextEdit(_),this.translateCurToOld(_)}getDistanceToNextChange(_){this.adjustNextEdit(_);const v=this.edits[this.nextEditIdx],b=v?this.translateOldToCur(v.offsetObj):null;return b===null?null:(0,k.lengthDiffNonNegative)(_,b)}translateOldToCur(_){return _.lineCount===this.deltaLineIdxInOld?(0,k.toLength)(_.lineCount+this.deltaOldToNewLineCount,_.columnCount+this.deltaOldToNewColumnCount):(0,k.toLength)(_.lineCount+this.deltaOldToNewLineCount,_.columnCount)}translateCurToOld(_){const v=(0,k.lengthToObj)(_);return v.lineCount-this.deltaOldToNewLineCount===this.deltaLineIdxInOld?(0,k.toLength)(v.lineCount-this.deltaOldToNewLineCount,v.columnCount-this.deltaOldToNewColumnCount):(0,k.toLength)(v.lineCount-this.deltaOldToNewLineCount,v.columnCount)}adjustNextEdit(_){for(;this.nextEditIdx<this.edits.length;){const v=this.edits[this.nextEditIdx],b=this.translateOldToCur(v.endOffsetAfterObj);if((0,k.lengthLessThanEqual)(b,_)){this.nextEditIdx++;const a=(0,k.lengthToObj)(b),i=(0,k.lengthToObj)(this.translateOldToCur(v.endOffsetBeforeObj)),n=a.lineCount-i.lineCount;this.deltaOldToNewLineCount+=n;const t=this.deltaLineIdxInOld===v.endOffsetBeforeObj.lineCount?this.deltaOldToNewColumnCount:0,r=a.columnCount-i.columnCount;this.deltaOldToNewColumnCount=t+r,this.deltaLineIdxInOld=v.endOffsetBeforeObj.lineCount}else break}}}e.BeforeEditPositionMapper=E;class S{static from(_){return new S(_.startOffset,_.endOffset,_.newLength)}constructor(_,v,b){this.endOffsetBeforeObj=(0,k.lengthToObj)(v),this.endOffsetAfterObj=(0,k.lengthToObj)((0,k.lengthAdd)(_,b)),this.offsetObj=(0,k.lengthToObj)(_)}}}),define(se[288],oe([1,0,13,182,91]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.combineTextEditInfos=void 0;function E(_,v){if(_.length===0)return v;if(v.length===0)return _;const b=new L.ArrayQueue(p(_)),a=p(v);a.push({modified:!1,lengthBefore:void 0,lengthAfter:void 0});let i=b.dequeue();function n(f){if(f===void 0){const d=b.takeWhile(s=>!0)||[];return i&&d.unshift(i),d}const c=[];for(;i&&!(0,y.lengthIsZero)(f);){const[d,s]=i.splitAt(f);c.push(d),f=(0,y.lengthDiffNonNegative)(d.lengthAfter,f),i=s??b.dequeue()}return(0,y.lengthIsZero)(f)||c.push(new S(!1,f,f)),c}const t=[];function r(f,c,d){if(t.length>0&&(0,y.lengthEquals)(t[t.length-1].endOffset,f)){const s=t[t.length-1];t[t.length-1]=new k.TextEditInfo(s.startOffset,c,(0,y.lengthAdd)(s.newLength,d))}else t.push({startOffset:f,endOffset:c,newLength:d})}let u=y.lengthZero;for(const f of a){const c=n(f.lengthBefore);if(f.modified){const d=(0,y.sumLengths)(c,l=>l.lengthBefore),s=(0,y.lengthAdd)(u,d);r(u,s,f.lengthAfter),u=s}else for(const d of c){const s=u;u=(0,y.lengthAdd)(u,d.lengthBefore),d.modified&&r(s,u,d.lengthAfter)}}return t}e.combineTextEditInfos=E;class S{constructor(v,b,a){this.modified=v,this.lengthBefore=b,this.lengthAfter=a}splitAt(v){const b=(0,y.lengthDiffNonNegative)(v,this.lengthAfter);return(0,y.lengthEquals)(b,y.lengthZero)?[this,void 0]:this.modified?[new S(this.modified,this.lengthBefore,v),new S(this.modified,y.lengthZero,b)]:[new S(this.modified,v,v),new S(this.modified,b,b)]}toString(){return`${this.modified?\"M\":\"U\"}:${(0,y.lengthToObj)(this.lengthBefore)} -> ${(0,y.lengthToObj)(this.lengthAfter)}`}}function p(_){const v=[];let b=y.lengthZero;for(const a of _){const i=(0,y.lengthDiffNonNegative)(b,a.startOffset);(0,y.lengthIsZero)(i)||v.push(new S(!1,i,i));const n=(0,y.lengthDiffNonNegative)(a.startOffset,a.endOffset);v.push(new S(!0,n,a.newLength)),b=a.endOffset}return v}}),define(se[520],oe([1,0,91]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NodeReader=void 0;class k{constructor(p){this.lastOffset=L.lengthZero,this.nextNodes=[p],this.offsets=[L.lengthZero],this.idxs=[]}readLongestNodeAt(p,_){if((0,L.lengthLessThan)(p,this.lastOffset))throw new Error(\"Invalid offset\");for(this.lastOffset=p;;){const v=E(this.nextNodes);if(!v)return;const b=E(this.offsets);if((0,L.lengthLessThan)(p,b))return;if((0,L.lengthLessThan)(b,p))if((0,L.lengthAdd)(b,v.length)<=p)this.nextNodeAfterCurrent();else{const a=y(v);a!==-1?(this.nextNodes.push(v.getChild(a)),this.offsets.push(b),this.idxs.push(a)):this.nextNodeAfterCurrent()}else{if(_(v))return this.nextNodeAfterCurrent(),v;{const a=y(v);if(a===-1){this.nextNodeAfterCurrent();return}else this.nextNodes.push(v.getChild(a)),this.offsets.push(b),this.idxs.push(a)}}}}nextNodeAfterCurrent(){for(;;){const p=E(this.offsets),_=E(this.nextNodes);if(this.nextNodes.pop(),this.offsets.pop(),this.idxs.length===0)break;const v=E(this.nextNodes),b=y(v,this.idxs[this.idxs.length-1]);if(b!==-1){this.nextNodes.push(v.getChild(b)),this.offsets.push((0,L.lengthAdd)(p,_.length)),this.idxs[this.idxs.length-1]=b;break}else this.idxs.pop()}}}e.NodeReader=k;function y(S,p=-1){for(;;){if(p++,p>=S.childrenLength)return-1;if(S.getChild(p))return p}}function E(S){return S.length>0?S[S.length-1]:void 0}}),define(se[134],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DenseKeyProvider=e.identityKeyProvider=e.SmallImmutableSet=void 0;const L=[];class k{static create(S,p){if(S<=128&&p.length===0){let _=k.cache[S];return _||(_=new k(S,p),k.cache[S]=_),_}return new k(S,p)}static getEmpty(){return this.empty}constructor(S,p){this.items=S,this.additionalItems=p}add(S,p){const _=p.getKey(S);let v=_>>5;if(v===0){const a=1<<_|this.items;return a===this.items?this:k.create(a,this.additionalItems)}v--;const b=this.additionalItems.slice(0);for(;b.length<v;)b.push(0);return b[v]|=1<<(_&31),k.create(this.items,b)}merge(S){const p=this.items|S.items;if(this.additionalItems===L&&S.additionalItems===L)return p===this.items?this:p===S.items?S:k.create(p,L);const _=[];for(let v=0;v<Math.max(this.additionalItems.length,S.additionalItems.length);v++){const b=this.additionalItems[v]||0,a=S.additionalItems[v]||0;_.push(b|a)}return k.create(p,_)}intersects(S){if(this.items&S.items)return!0;for(let p=0;p<Math.min(this.additionalItems.length,S.additionalItems.length);p++)if(this.additionalItems[p]&S.additionalItems[p])return!0;return!1}}e.SmallImmutableSet=k,k.cache=new Array(129),k.empty=k.create(0,L),e.identityKeyProvider={getKey(E){return E}};class y{constructor(){this.items=new Map}getKey(S){let p=this.items.get(S);return p===void 0&&(p=this.items.size,this.items.set(S,p)),p}}e.DenseKeyProvider=y}),define(se[183],oe([1,0,12,85,91,134]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InvalidBracketAstNode=e.BracketAstNode=e.TextAstNode=e.ListAstNode=e.PairAstNode=void 0;class S{get length(){return this._length}constructor(d){this._length=d}}class p extends S{static create(d,s,l){let o=d.length;return s&&(o=(0,y.lengthAdd)(o,s.length)),l&&(o=(0,y.lengthAdd)(o,l.length)),new p(o,d,s,l,s?s.missingOpeningBracketIds:E.SmallImmutableSet.getEmpty())}get kind(){return 2}get listHeight(){return 0}get childrenLength(){return 3}getChild(d){switch(d){case 0:return this.openingBracket;case 1:return this.child;case 2:return this.closingBracket}throw new Error(\"Invalid child index\")}get children(){const d=[];return d.push(this.openingBracket),this.child&&d.push(this.child),this.closingBracket&&d.push(this.closingBracket),d}constructor(d,s,l,o,g){super(d),this.openingBracket=s,this.child=l,this.closingBracket=o,this.missingOpeningBracketIds=g}canBeReused(d){return!(this.closingBracket===null||d.intersects(this.missingOpeningBracketIds))}deepClone(){return new p(this.length,this.openingBracket.deepClone(),this.child&&this.child.deepClone(),this.closingBracket&&this.closingBracket.deepClone(),this.missingOpeningBracketIds)}computeMinIndentation(d,s){return this.child?this.child.computeMinIndentation((0,y.lengthAdd)(d,this.openingBracket.length),s):Number.MAX_SAFE_INTEGER}}e.PairAstNode=p;class _ extends S{static create23(d,s,l,o=!1){let g=d.length,h=d.missingOpeningBracketIds;if(d.listHeight!==s.listHeight)throw new Error(\"Invalid list heights\");if(g=(0,y.lengthAdd)(g,s.length),h=h.merge(s.missingOpeningBracketIds),l){if(d.listHeight!==l.listHeight)throw new Error(\"Invalid list heights\");g=(0,y.lengthAdd)(g,l.length),h=h.merge(l.missingOpeningBracketIds)}return o?new b(g,d.listHeight+1,d,s,l,h):new v(g,d.listHeight+1,d,s,l,h)}static getEmpty(){return new i(y.lengthZero,0,[],E.SmallImmutableSet.getEmpty())}get kind(){return 4}get missingOpeningBracketIds(){return this._missingOpeningBracketIds}constructor(d,s,l){super(d),this.listHeight=s,this._missingOpeningBracketIds=l,this.cachedMinIndentation=-1}throwIfImmutable(){}makeLastElementMutable(){this.throwIfImmutable();const d=this.childrenLength;if(d===0)return;const s=this.getChild(d-1),l=s.kind===4?s.toMutable():s;return s!==l&&this.setChild(d-1,l),l}makeFirstElementMutable(){if(this.throwIfImmutable(),this.childrenLength===0)return;const s=this.getChild(0),l=s.kind===4?s.toMutable():s;return s!==l&&this.setChild(0,l),l}canBeReused(d){if(d.intersects(this.missingOpeningBracketIds)||this.childrenLength===0)return!1;let s=this;for(;s.kind===4;){const l=s.childrenLength;if(l===0)throw new L.BugIndicatingError;s=s.getChild(l-1)}return s.canBeReused(d)}handleChildrenChanged(){this.throwIfImmutable();const d=this.childrenLength;let s=this.getChild(0).length,l=this.getChild(0).missingOpeningBracketIds;for(let o=1;o<d;o++){const g=this.getChild(o);s=(0,y.lengthAdd)(s,g.length),l=l.merge(g.missingOpeningBracketIds)}this._length=s,this._missingOpeningBracketIds=l,this.cachedMinIndentation=-1}computeMinIndentation(d,s){if(this.cachedMinIndentation!==-1)return this.cachedMinIndentation;let l=Number.MAX_SAFE_INTEGER,o=d;for(let g=0;g<this.childrenLength;g++){const h=this.getChild(g);h&&(l=Math.min(l,h.computeMinIndentation(o,s)),o=(0,y.lengthAdd)(o,h.length))}return this.cachedMinIndentation=l,l}}e.ListAstNode=_;class v extends _{get childrenLength(){return this._item3!==null?3:2}getChild(d){switch(d){case 0:return this._item1;case 1:return this._item2;case 2:return this._item3}throw new Error(\"Invalid child index\")}setChild(d,s){switch(d){case 0:this._item1=s;return;case 1:this._item2=s;return;case 2:this._item3=s;return}throw new Error(\"Invalid child index\")}get children(){return this._item3?[this._item1,this._item2,this._item3]:[this._item1,this._item2]}get item1(){return this._item1}get item2(){return this._item2}get item3(){return this._item3}constructor(d,s,l,o,g,h){super(d,s,h),this._item1=l,this._item2=o,this._item3=g}deepClone(){return new v(this.length,this.listHeight,this._item1.deepClone(),this._item2.deepClone(),this._item3?this._item3.deepClone():null,this.missingOpeningBracketIds)}appendChildOfSameHeight(d){if(this._item3)throw new Error(\"Cannot append to a full (2,3) tree node\");this.throwIfImmutable(),this._item3=d,this.handleChildrenChanged()}unappendChild(){if(!this._item3)throw new Error(\"Cannot remove from a non-full (2,3) tree node\");this.throwIfImmutable();const d=this._item3;return this._item3=null,this.handleChildrenChanged(),d}prependChildOfSameHeight(d){if(this._item3)throw new Error(\"Cannot prepend to a full (2,3) tree node\");this.throwIfImmutable(),this._item3=this._item2,this._item2=this._item1,this._item1=d,this.handleChildrenChanged()}unprependChild(){if(!this._item3)throw new Error(\"Cannot remove from a non-full (2,3) tree node\");this.throwIfImmutable();const d=this._item1;return this._item1=this._item2,this._item2=this._item3,this._item3=null,this.handleChildrenChanged(),d}toMutable(){return this}}class b extends v{toMutable(){return new v(this.length,this.listHeight,this.item1,this.item2,this.item3,this.missingOpeningBracketIds)}throwIfImmutable(){throw new Error(\"this instance is immutable\")}}class a extends _{get childrenLength(){return this._children.length}getChild(d){return this._children[d]}setChild(d,s){this._children[d]=s}get children(){return this._children}constructor(d,s,l,o){super(d,s,o),this._children=l}deepClone(){const d=new Array(this._children.length);for(let s=0;s<this._children.length;s++)d[s]=this._children[s].deepClone();return new a(this.length,this.listHeight,d,this.missingOpeningBracketIds)}appendChildOfSameHeight(d){this.throwIfImmutable(),this._children.push(d),this.handleChildrenChanged()}unappendChild(){this.throwIfImmutable();const d=this._children.pop();return this.handleChildrenChanged(),d}prependChildOfSameHeight(d){this.throwIfImmutable(),this._children.unshift(d),this.handleChildrenChanged()}unprependChild(){this.throwIfImmutable();const d=this._children.shift();return this.handleChildrenChanged(),d}toMutable(){return this}}class i extends a{toMutable(){return new a(this.length,this.listHeight,[...this.children],this.missingOpeningBracketIds)}throwIfImmutable(){throw new Error(\"this instance is immutable\")}}const n=[];class t extends S{get listHeight(){return 0}get childrenLength(){return 0}getChild(d){return null}get children(){return n}deepClone(){return this}}class r extends t{get kind(){return 0}get missingOpeningBracketIds(){return E.SmallImmutableSet.getEmpty()}canBeReused(d){return!0}computeMinIndentation(d,s){const l=(0,y.lengthToObj)(d),o=(l.columnCount===0?l.lineCount:l.lineCount+1)+1,g=(0,y.lengthGetLineCount)((0,y.lengthAdd)(d,this.length))+1;let h=Number.MAX_SAFE_INTEGER;for(let m=o;m<=g;m++){const C=s.getLineFirstNonWhitespaceColumn(m),w=s.getLineContent(m);if(C===0)continue;const D=k.CursorColumns.visibleColumnFromColumn(w,C,s.getOptions().tabSize);h=Math.min(h,D)}return h}}e.TextAstNode=r;class u extends t{static create(d,s,l){return new u(d,s,l)}get kind(){return 1}get missingOpeningBracketIds(){return E.SmallImmutableSet.getEmpty()}constructor(d,s,l){super(d),this.bracketInfo=s,this.bracketIds=l}get text(){return this.bracketInfo.bracketText}get languageId(){return this.bracketInfo.languageId}canBeReused(d){return!1}computeMinIndentation(d,s){return Number.MAX_SAFE_INTEGER}}e.BracketAstNode=u;class f extends t{get kind(){return 3}constructor(d,s){super(s),this.missingOpeningBracketIds=d}canBeReused(d){return!d.intersects(this.missingOpeningBracketIds)}computeMinIndentation(d,s){return Number.MAX_SAFE_INTEGER}}e.InvalidBracketAstNode=f}),define(se[521],oe([1,0,183]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.concat23TreesOfSameHeight=e.concat23Trees=void 0;function k(v){if(v.length===0)return null;if(v.length===1)return v[0];let b=0;function a(){if(b>=v.length)return null;const r=b,u=v[r].listHeight;for(b++;b<v.length&&v[b].listHeight===u;)b++;return b-r>=2?y(r===0&&b===v.length?v:v.slice(r,b),!1):v[r]}let i=a(),n=a();if(!n)return i;for(let r=a();r;r=a())E(i,n)<=E(n,r)?(i=S(i,n),n=r):n=S(n,r);return S(i,n)}e.concat23Trees=k;function y(v,b=!1){if(v.length===0)return null;if(v.length===1)return v[0];let a=v.length;for(;a>3;){const i=a>>1;for(let n=0;n<i;n++){const t=n<<1;v[n]=L.ListAstNode.create23(v[t],v[t+1],t+3===a?v[t+2]:null,b)}a=i}return L.ListAstNode.create23(v[0],v[1],a>=3?v[2]:null,b)}e.concat23TreesOfSameHeight=y;function E(v,b){return Math.abs(v.listHeight-b.listHeight)}function S(v,b){return v.listHeight===b.listHeight?L.ListAstNode.create23(v,b,null,!1):v.listHeight>b.listHeight?p(v,b):_(b,v)}function p(v,b){v=v.toMutable();let a=v;const i=[];let n;for(;;){if(b.listHeight===a.listHeight){n=b;break}if(a.kind!==4)throw new Error(\"unexpected\");i.push(a),a=a.makeLastElementMutable()}for(let t=i.length-1;t>=0;t--){const r=i[t];n?r.childrenLength>=3?n=L.ListAstNode.create23(r.unappendChild(),n,null,!1):(r.appendChildOfSameHeight(n),n=void 0):r.handleChildrenChanged()}return n?L.ListAstNode.create23(v,n,null,!1):v}function _(v,b){v=v.toMutable();let a=v;const i=[];for(;b.listHeight!==a.listHeight;){if(a.kind!==4)throw new Error(\"unexpected\");i.push(a),a=a.makeFirstElementMutable()}let n=b;for(let t=i.length-1;t>=0;t--){const r=i[t];n?r.childrenLength>=3?n=L.ListAstNode.create23(n,r.unprependChild(),null,!1):(r.prependChildOfSameHeight(n),n=void 0):r.handleChildrenChanged()}return n?L.ListAstNode.create23(n,v,null,!1):v}}),define(se[289],oe([1,0,183,182,134,91,521,520]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseDocument=void 0;function _(b,a,i,n){return new v(b,a,i,n).parseDocument()}e.parseDocument=_;class v{constructor(a,i,n,t){if(this.tokenizer=a,this.createImmutableLists=t,this._itemsConstructed=0,this._itemsFromCache=0,n&&t)throw new Error(\"Not supported\");this.oldNodeReader=n?new p.NodeReader(n):void 0,this.positionMapper=new k.BeforeEditPositionMapper(i)}parseDocument(){this._itemsConstructed=0,this._itemsFromCache=0;let a=this.parseList(y.SmallImmutableSet.getEmpty(),0);return a||(a=L.ListAstNode.getEmpty()),a}parseList(a,i){const n=[];for(;;){let r=this.tryReadChildFromCache(a);if(!r){const u=this.tokenizer.peek();if(!u||u.kind===2&&u.bracketIds.intersects(a))break;r=this.parseChild(a,i+1)}r.kind===4&&r.childrenLength===0||n.push(r)}return this.oldNodeReader?(0,S.concat23Trees)(n):(0,S.concat23TreesOfSameHeight)(n,this.createImmutableLists)}tryReadChildFromCache(a){if(this.oldNodeReader){const i=this.positionMapper.getDistanceToNextChange(this.tokenizer.offset);if(i===null||!(0,E.lengthIsZero)(i)){const n=this.oldNodeReader.readLongestNodeAt(this.positionMapper.getOffsetBeforeChange(this.tokenizer.offset),t=>i!==null&&!(0,E.lengthLessThan)(t.length,i)?!1:t.canBeReused(a));if(n)return this._itemsFromCache++,this.tokenizer.skip(n.length),n}}}parseChild(a,i){this._itemsConstructed++;const n=this.tokenizer.read();switch(n.kind){case 2:return new L.InvalidBracketAstNode(n.bracketIds,n.length);case 0:return n.astNode;case 1:{if(i>300)return new L.TextAstNode(n.length);const t=a.merge(n.bracketIds),r=this.parseList(t,i+1),u=this.tokenizer.peek();return u&&u.kind===2&&(u.bracketId===n.bracketId||u.bracketIds.intersects(n.bracketIds))?(this.tokenizer.read(),L.PairAstNode.create(n.astNode,r,u.astNode)):L.PairAstNode.create(n.astNode,r,null)}default:throw new Error(\"unexpected\")}}}}),define(se[209],oe([1,0,12,132,183,91,134]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FastTokenizer=e.TextBufferTokenizer=e.Token=void 0;class p{constructor(i,n,t,r,u){this.length=i,this.kind=n,this.bracketId=t,this.bracketIds=r,this.astNode=u}}e.Token=p;class _{constructor(i,n){this.textModel=i,this.bracketTokens=n,this.reader=new v(this.textModel,this.bracketTokens),this._offset=E.lengthZero,this.didPeek=!1,this.peeked=null,this.textBufferLineCount=i.getLineCount(),this.textBufferLastLineLength=i.getLineLength(this.textBufferLineCount)}get offset(){return this._offset}get length(){return(0,E.toLength)(this.textBufferLineCount-1,this.textBufferLastLineLength)}skip(i){this.didPeek=!1,this._offset=(0,E.lengthAdd)(this._offset,i);const n=(0,E.lengthToObj)(this._offset);this.reader.setPosition(n.lineCount,n.columnCount)}read(){let i;return this.peeked?(this.didPeek=!1,i=this.peeked):i=this.reader.read(),i&&(this._offset=(0,E.lengthAdd)(this._offset,i.length)),i}peek(){return this.didPeek||(this.peeked=this.reader.read(),this.didPeek=!0),this.peeked}}e.TextBufferTokenizer=_;class v{constructor(i,n){this.textModel=i,this.bracketTokens=n,this.lineIdx=0,this.line=null,this.lineCharOffset=0,this.lineTokens=null,this.lineTokenOffset=0,this.peekedToken=null,this.textBufferLineCount=i.getLineCount(),this.textBufferLastLineLength=i.getLineLength(this.textBufferLineCount)}setPosition(i,n){i===this.lineIdx?(this.lineCharOffset=n,this.line!==null&&(this.lineTokenOffset=this.lineCharOffset===0?0:this.lineTokens.findTokenIndexAtOffset(this.lineCharOffset))):(this.lineIdx=i,this.lineCharOffset=n,this.line=null),this.peekedToken=null}read(){if(this.peekedToken){const u=this.peekedToken;return this.peekedToken=null,this.lineCharOffset+=(0,E.lengthGetColumnCountIfZeroLineCount)(u.length),u}if(this.lineIdx>this.textBufferLineCount-1||this.lineIdx===this.textBufferLineCount-1&&this.lineCharOffset>=this.textBufferLastLineLength)return null;this.line===null&&(this.lineTokens=this.textModel.tokenization.getLineTokens(this.lineIdx+1),this.line=this.lineTokens.getLineContent(),this.lineTokenOffset=this.lineCharOffset===0?0:this.lineTokens.findTokenIndexAtOffset(this.lineCharOffset));const i=this.lineIdx,n=this.lineCharOffset;let t=0;for(;;){const u=this.lineTokens,f=u.getCount();let c=null;if(this.lineTokenOffset<f){const d=u.getMetadata(this.lineTokenOffset);for(;this.lineTokenOffset+1<f&&d===u.getMetadata(this.lineTokenOffset+1);)this.lineTokenOffset++;const s=k.TokenMetadata.getTokenType(d)===0,l=k.TokenMetadata.containsBalancedBrackets(d),o=u.getEndOffset(this.lineTokenOffset);if(l&&s&&this.lineCharOffset<o){const g=u.getLanguageId(this.lineTokenOffset),h=this.line.substring(this.lineCharOffset,o),m=this.bracketTokens.getSingleLanguageBracketTokens(g),C=m.regExpGlobal;if(C){C.lastIndex=0;const w=C.exec(h);w&&(c=m.getToken(w[0]),c&&(this.lineCharOffset+=w.index))}}if(t+=o-this.lineCharOffset,c)if(i!==this.lineIdx||n!==this.lineCharOffset){this.peekedToken=c;break}else return this.lineCharOffset+=(0,E.lengthGetColumnCountIfZeroLineCount)(c.length),c;else this.lineTokenOffset++,this.lineCharOffset=o}else if(this.lineIdx===this.textBufferLineCount-1||(this.lineIdx++,this.lineTokens=this.textModel.tokenization.getLineTokens(this.lineIdx+1),this.lineTokenOffset=0,this.line=this.lineTokens.getLineContent(),this.lineCharOffset=0,t+=33,t>1e3))break;if(t>1500)break}const r=(0,E.lengthDiff)(i,n,this.lineIdx,this.lineCharOffset);return new p(r,0,-1,S.SmallImmutableSet.getEmpty(),new y.TextAstNode(r))}}class b{constructor(i,n){this.text=i,this._offset=E.lengthZero,this.idx=0;const t=n.getRegExpStr(),r=t?new RegExp(t+`|\n`,\"gi\"):null,u=[];let f,c=0,d=0,s=0,l=0;const o=[];for(let m=0;m<60;m++)o.push(new p((0,E.toLength)(0,m),0,-1,S.SmallImmutableSet.getEmpty(),new y.TextAstNode((0,E.toLength)(0,m))));const g=[];for(let m=0;m<60;m++)g.push(new p((0,E.toLength)(1,m),0,-1,S.SmallImmutableSet.getEmpty(),new y.TextAstNode((0,E.toLength)(1,m))));if(r)for(r.lastIndex=0;(f=r.exec(i))!==null;){const m=f.index,C=f[0];if(C===`\n`)c++,d=m+1;else{if(s!==m){let w;if(l===c){const D=m-s;if(D<o.length)w=o[D];else{const I=(0,E.toLength)(0,D);w=new p(I,0,-1,S.SmallImmutableSet.getEmpty(),new y.TextAstNode(I))}}else{const D=c-l,I=m-d;if(D===1&&I<g.length)w=g[I];else{const T=(0,E.toLength)(D,I);w=new p(T,0,-1,S.SmallImmutableSet.getEmpty(),new y.TextAstNode(T))}}u.push(w)}u.push(n.getToken(C)),s=m+C.length,l=c}}const h=i.length;if(s!==h){const m=l===c?(0,E.toLength)(0,h-s):(0,E.toLength)(c-l,h-d);u.push(new p(m,0,-1,S.SmallImmutableSet.getEmpty(),new y.TextAstNode(m)))}this.length=(0,E.toLength)(c,h-d),this.tokens=u}get offset(){return this._offset}read(){return this.tokens[this.idx++]||null}peek(){return this.tokens[this.idx]||null}skip(i){throw new L.NotSupportedError}}e.FastTokenizer=b}),define(se[290],oe([1,0,11,183,91,134,209]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LanguageAgnosticBracketTokens=e.BracketTokens=void 0;class p{static createFromLanguage(a,i){function n(r){return i.getKey(`${r.languageId}:::${r.bracketText}`)}const t=new Map;for(const r of a.bracketsNew.openingBrackets){const u=(0,y.toLength)(0,r.bracketText.length),f=n(r),c=E.SmallImmutableSet.getEmpty().add(f,E.identityKeyProvider);t.set(r.bracketText,new S.Token(u,1,f,c,k.BracketAstNode.create(u,r,c)))}for(const r of a.bracketsNew.closingBrackets){const u=(0,y.toLength)(0,r.bracketText.length);let f=E.SmallImmutableSet.getEmpty();const c=r.getOpeningBrackets();for(const d of c)f=f.add(n(d),E.identityKeyProvider);t.set(r.bracketText,new S.Token(u,2,n(c[0]),f,k.BracketAstNode.create(u,r,f)))}return new p(t)}constructor(a){this.map=a,this.hasRegExp=!1,this._regExpGlobal=null}getRegExpStr(){if(this.isEmpty)return null;{const a=[...this.map.keys()];return a.sort(),a.reverse(),a.map(i=>_(i)).join(\"|\")}}get regExpGlobal(){if(!this.hasRegExp){const a=this.getRegExpStr();this._regExpGlobal=a?new RegExp(a,\"gi\"):null,this.hasRegExp=!0}return this._regExpGlobal}getToken(a){return this.map.get(a.toLowerCase())}findClosingTokenText(a){for(const[i,n]of this.map)if(n.kind===2&&n.bracketIds.intersects(a))return i}get isEmpty(){return this.map.size===0}}e.BracketTokens=p;function _(b){let a=(0,L.escapeRegExpCharacters)(b);return/^[\\w ]+/.test(b)&&(a=`\\\\b${a}`),/[\\w ]+$/.test(b)&&(a=`${a}\\\\b`),a}class v{constructor(a,i){this.denseKeyProvider=a,this.getLanguageConfiguration=i,this.languageIdToBracketTokens=new Map}didLanguageChange(a){return this.languageIdToBracketTokens.has(a)}getSingleLanguageBracketTokens(a){let i=this.languageIdToBracketTokens.get(a);return i||(i=p.createFromLanguage(this.getLanguageConfiguration(a),this.denseKeyProvider),this.languageIdToBracketTokens.set(a,i)),i}}e.LanguageAgnosticBracketTokens=v}),define(se[522],oe([1,0,290,91,289,134,209]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.fixBracketsInLine=void 0;function p(v,b){const a=new E.DenseKeyProvider,i=new L.LanguageAgnosticBracketTokens(a,c=>b.getLanguageConfiguration(c)),n=new S.TextBufferTokenizer(new _([v]),i),t=(0,y.parseDocument)(n,[],void 0,!0);let r=\"\";const u=v.getLineContent();function f(c,d){if(c.kind===2)if(f(c.openingBracket,d),d=(0,k.lengthAdd)(d,c.openingBracket.length),c.child&&(f(c.child,d),d=(0,k.lengthAdd)(d,c.child.length)),c.closingBracket)f(c.closingBracket,d),d=(0,k.lengthAdd)(d,c.closingBracket.length);else{const l=i.getSingleLanguageBracketTokens(c.openingBracket.languageId).findClosingTokenText(c.openingBracket.bracketIds);r+=l}else if(c.kind!==3){if(c.kind===0||c.kind===1)r+=u.substring((0,k.lengthGetColumnCountIfZeroLineCount)(d),(0,k.lengthGetColumnCountIfZeroLineCount)((0,k.lengthAdd)(d,c.length)));else if(c.kind===4)for(const s of c.children)f(s,d),d=(0,k.lengthAdd)(d,s.length)}}return f(t,k.lengthZero),r}e.fixBracketsInLine=p;class _{constructor(b){this.lines=b,this.tokenization={getLineTokens:a=>this.lines[a-1]}}getLineCount(){return this.lines.length}getLineLength(b){return this.lines[b-1].getLineContent().length}}}),define(se[523],oe([1,0,13]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FixedArray=void 0;class k{constructor(S){this._default=S,this._store=[]}get(S){return S<this._store.length?this._store[S]:this._default}set(S,p){for(;S>=this._store.length;)this._store[this._store.length]=this._default;this._store[S]=p}replace(S,p,_){if(S>=this._store.length)return;if(p===0){this.insert(S,_);return}else if(_===0){this.delete(S,p);return}const v=this._store.slice(0,S),b=this._store.slice(S+p),a=y(_,this._default);this._store=v.concat(a,b)}delete(S,p){p===0||S>=this._store.length||this._store.splice(S,p)}insert(S,p){if(p===0||S>=this._store.length)return;const _=[];for(let v=0;v<p;v++)_[v]=this._default;this._store=(0,L.arrayInsert)(this._store,S,_)}}e.FixedArray=k;function y(E,S){const p=[];for(let _=0;_<E;_++)p[_]=S;return p}}),define(se[524],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.guessIndentation=void 0;class L{constructor(){this.spacesDiff=0,this.looksLikeAlignment=!1}}function k(E,S,p,_,v){v.spacesDiff=0,v.looksLikeAlignment=!1;let b;for(b=0;b<S&&b<_;b++){const f=E.charCodeAt(b),c=p.charCodeAt(b);if(f!==c)break}let a=0,i=0;for(let f=b;f<S;f++)E.charCodeAt(f)===32?a++:i++;let n=0,t=0;for(let f=b;f<_;f++)p.charCodeAt(f)===32?n++:t++;if(a>0&&i>0||n>0&&t>0)return;const r=Math.abs(i-t),u=Math.abs(a-n);if(r===0){v.spacesDiff=u,u>0&&0<=n-1&&n-1<E.length&&n<p.length&&p.charCodeAt(n)!==32&&E.charCodeAt(n-1)===32&&E.charCodeAt(E.length-1)===44&&(v.looksLikeAlignment=!0);return}if(u%r===0){v.spacesDiff=u/r;return}}function y(E,S,p){const _=Math.min(E.getLineCount(),1e4);let v=0,b=0,a=\"\",i=0;const n=[2,4,6,8,3,5,7],t=8,r=[0,0,0,0,0,0,0,0,0],u=new L;for(let d=1;d<=_;d++){const s=E.getLineLength(d),l=E.getLineContent(d),o=s<=65536;let g=!1,h=0,m=0,C=0;for(let D=0,I=s;D<I;D++){const T=o?l.charCodeAt(D):E.getLineCharCode(d,D);if(T===9)C++;else if(T===32)m++;else{g=!0,h=D;break}}if(!g||(C>0?v++:m>1&&b++,k(a,i,l,h,u),u.looksLikeAlignment&&!(p&&S===u.spacesDiff)))continue;const w=u.spacesDiff;w<=t&&r[w]++,a=l,i=h}let f=p;v!==b&&(f=v<b);let c=S;if(f){let d=f?0:.1*_;n.forEach(s=>{const l=r[s];l>d&&(d=l,c=s)}),c===4&&r[4]>0&&r[2]>0&&r[2]>=r[4]/2&&(c=2)}return{insertSpaces:f,tabSize:c}}e.guessIndentation=y}),define(se[525],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.intervalCompare=e.recomputeMaxEnd=e.nodeAcceptEdit=e.IntervalTree=e.SENTINEL=e.IntervalNode=e.getNodeColor=void 0;function L(x){return(x.metadata&1)>>>0}e.getNodeColor=L;function k(x,O){x.metadata=x.metadata&254|O<<0}function y(x){return(x.metadata&2)>>>1===1}function E(x,O){x.metadata=x.metadata&253|(O?1:0)<<1}function S(x){return(x.metadata&4)>>>2===1}function p(x,O){x.metadata=x.metadata&251|(O?1:0)<<2}function _(x){return(x.metadata&64)>>>6===1}function v(x,O){x.metadata=x.metadata&191|(O?1:0)<<6}function b(x){return(x.metadata&24)>>>3}function a(x,O){x.metadata=x.metadata&231|O<<3}function i(x){return(x.metadata&32)>>>5===1}function n(x,O){x.metadata=x.metadata&223|(O?1:0)<<5}class t{constructor(O,B,W){this.metadata=0,this.parent=this,this.left=this,this.right=this,k(this,1),this.start=B,this.end=W,this.delta=0,this.maxEnd=W,this.id=O,this.ownerId=0,this.options=null,p(this,!1),v(this,!1),a(this,1),n(this,!1),this.cachedVersionId=0,this.cachedAbsoluteStart=B,this.cachedAbsoluteEnd=W,this.range=null,E(this,!1)}reset(O,B,W,V){this.start=B,this.end=W,this.maxEnd=W,this.cachedVersionId=O,this.cachedAbsoluteStart=B,this.cachedAbsoluteEnd=W,this.range=V}setOptions(O){this.options=O;const B=this.options.className;p(this,B===\"squiggly-error\"||B===\"squiggly-warning\"||B===\"squiggly-info\"),v(this,this.options.glyphMarginClassName!==null),a(this,this.options.stickiness),n(this,this.options.collapseOnReplaceEdit)}setCachedOffsets(O,B,W){this.cachedVersionId!==W&&(this.range=null),this.cachedVersionId=W,this.cachedAbsoluteStart=O,this.cachedAbsoluteEnd=B}detach(){this.parent=null,this.left=null,this.right=null}}e.IntervalNode=t,e.SENTINEL=new t(null,0,0),e.SENTINEL.parent=e.SENTINEL,e.SENTINEL.left=e.SENTINEL,e.SENTINEL.right=e.SENTINEL,k(e.SENTINEL,0);class r{constructor(){this.root=e.SENTINEL,this.requestNormalizeDelta=!1}intervalSearch(O,B,W,V,K,F){return this.root===e.SENTINEL?[]:h(this,O,B,W,V,K,F)}search(O,B,W,V){return this.root===e.SENTINEL?[]:g(this,O,B,W,V)}collectNodesFromOwner(O){return l(this,O)}collectNodesPostOrder(){return o(this)}insert(O){m(this,O),this._normalizeDeltaIfNecessary()}delete(O){w(this,O),this._normalizeDeltaIfNecessary()}resolveNode(O,B){const W=O;let V=0;for(;O!==this.root;)O===O.parent.right&&(V+=O.parent.delta),O=O.parent;const K=W.start+V,F=W.end+V;W.setCachedOffsets(K,F,B)}acceptReplace(O,B,W,V){const K=d(this,O,O+B);for(let F=0,q=K.length;F<q;F++){const ie=K[F];w(this,ie)}this._normalizeDeltaIfNecessary(),s(this,O,O+B,W),this._normalizeDeltaIfNecessary();for(let F=0,q=K.length;F<q;F++){const ie=K[F];ie.start=ie.cachedAbsoluteStart,ie.end=ie.cachedAbsoluteEnd,c(ie,O,O+B,W,V),ie.maxEnd=ie.end,m(this,ie)}this._normalizeDeltaIfNecessary()}_normalizeDeltaIfNecessary(){this.requestNormalizeDelta&&(this.requestNormalizeDelta=!1,u(this))}}e.IntervalTree=r;function u(x){let O=x.root,B=0;for(;O!==e.SENTINEL;){if(O.left!==e.SENTINEL&&!y(O.left)){O=O.left;continue}if(O.right!==e.SENTINEL&&!y(O.right)){B+=O.delta,O=O.right;continue}O.start=B+O.start,O.end=B+O.end,O.delta=0,N(O),E(O,!0),E(O.left,!1),E(O.right,!1),O===O.parent.right&&(B-=O.parent.delta),O=O.parent}E(x.root,!1)}function f(x,O,B,W){return x<B?!0:x>B||W===1?!1:W===2?!0:O}function c(x,O,B,W,V){const K=b(x),F=K===0||K===2,q=K===1||K===2,ie=B-O,ae=W,ne=Math.min(ie,ae),$=x.start;let J=!1;const Q=x.end;let re=!1;O<=$&&Q<=B&&i(x)&&(x.start=O,J=!0,x.end=O,re=!0);{const he=V?1:ie>0?2:0;!J&&f($,F,O,he)&&(J=!0),!re&&f(Q,q,O,he)&&(re=!0)}if(ne>0&&!V){const he=ie>ae?2:0;!J&&f($,F,O+ne,he)&&(J=!0),!re&&f(Q,q,O+ne,he)&&(re=!0)}{const he=V?1:0;!J&&f($,F,B,he)&&(x.start=O+ae,J=!0),!re&&f(Q,q,B,he)&&(x.end=O+ae,re=!0)}const de=ae-ie;J||(x.start=Math.max(0,$+de)),re||(x.end=Math.max(0,Q+de)),x.start>x.end&&(x.end=x.start)}e.nodeAcceptEdit=c;function d(x,O,B){let W=x.root,V=0,K=0,F=0,q=0;const ie=[];let ae=0;for(;W!==e.SENTINEL;){if(y(W)){E(W.left,!1),E(W.right,!1),W===W.parent.right&&(V-=W.parent.delta),W=W.parent;continue}if(!y(W.left)){if(K=V+W.maxEnd,K<O){E(W,!0);continue}if(W.left!==e.SENTINEL){W=W.left;continue}}if(F=V+W.start,F>B){E(W,!0);continue}if(q=V+W.end,q>=O&&(W.setCachedOffsets(F,q,0),ie[ae++]=W),E(W,!0),W.right!==e.SENTINEL&&!y(W.right)){V+=W.delta,W=W.right;continue}}return E(x.root,!1),ie}function s(x,O,B,W){let V=x.root,K=0,F=0,q=0;const ie=W-(B-O);for(;V!==e.SENTINEL;){if(y(V)){E(V.left,!1),E(V.right,!1),V===V.parent.right&&(K-=V.parent.delta),N(V),V=V.parent;continue}if(!y(V.left)){if(F=K+V.maxEnd,F<O){E(V,!0);continue}if(V.left!==e.SENTINEL){V=V.left;continue}}if(q=K+V.start,q>B){V.start+=ie,V.end+=ie,V.delta+=ie,(V.delta<-1073741824||V.delta>1073741824)&&(x.requestNormalizeDelta=!0),E(V,!0);continue}if(E(V,!0),V.right!==e.SENTINEL&&!y(V.right)){K+=V.delta,V=V.right;continue}}E(x.root,!1)}function l(x,O){let B=x.root;const W=[];let V=0;for(;B!==e.SENTINEL;){if(y(B)){E(B.left,!1),E(B.right,!1),B=B.parent;continue}if(B.left!==e.SENTINEL&&!y(B.left)){B=B.left;continue}if(B.ownerId===O&&(W[V++]=B),E(B,!0),B.right!==e.SENTINEL&&!y(B.right)){B=B.right;continue}}return E(x.root,!1),W}function o(x){let O=x.root;const B=[];let W=0;for(;O!==e.SENTINEL;){if(y(O)){E(O.left,!1),E(O.right,!1),O=O.parent;continue}if(O.left!==e.SENTINEL&&!y(O.left)){O=O.left;continue}if(O.right!==e.SENTINEL&&!y(O.right)){O=O.right;continue}B[W++]=O,E(O,!0)}return E(x.root,!1),B}function g(x,O,B,W,V){let K=x.root,F=0,q=0,ie=0;const ae=[];let ne=0;for(;K!==e.SENTINEL;){if(y(K)){E(K.left,!1),E(K.right,!1),K===K.parent.right&&(F-=K.parent.delta),K=K.parent;continue}if(K.left!==e.SENTINEL&&!y(K.left)){K=K.left;continue}q=F+K.start,ie=F+K.end,K.setCachedOffsets(q,ie,W);let $=!0;if(O&&K.ownerId&&K.ownerId!==O&&($=!1),B&&S(K)&&($=!1),V&&!_(K)&&($=!1),$&&(ae[ne++]=K),E(K,!0),K.right!==e.SENTINEL&&!y(K.right)){F+=K.delta,K=K.right;continue}}return E(x.root,!1),ae}function h(x,O,B,W,V,K,F){let q=x.root,ie=0,ae=0,ne=0,$=0;const J=[];let Q=0;for(;q!==e.SENTINEL;){if(y(q)){E(q.left,!1),E(q.right,!1),q===q.parent.right&&(ie-=q.parent.delta),q=q.parent;continue}if(!y(q.left)){if(ae=ie+q.maxEnd,ae<O){E(q,!0);continue}if(q.left!==e.SENTINEL){q=q.left;continue}}if(ne=ie+q.start,ne>B){E(q,!0);continue}if($=ie+q.end,$>=O){q.setCachedOffsets(ne,$,K);let re=!0;W&&q.ownerId&&q.ownerId!==W&&(re=!1),V&&S(q)&&(re=!1),F&&!_(q)&&(re=!1),re&&(J[Q++]=q)}if(E(q,!0),q.right!==e.SENTINEL&&!y(q.right)){ie+=q.delta,q=q.right;continue}}return E(x.root,!1),J}function m(x,O){if(x.root===e.SENTINEL)return O.parent=e.SENTINEL,O.left=e.SENTINEL,O.right=e.SENTINEL,k(O,0),x.root=O,x.root;C(x,O),M(O.parent);let B=O;for(;B!==x.root&&L(B.parent)===1;)if(B.parent===B.parent.parent.left){const W=B.parent.parent.right;L(W)===1?(k(B.parent,0),k(W,0),k(B.parent.parent,1),B=B.parent.parent):(B===B.parent.right&&(B=B.parent,T(x,B)),k(B.parent,0),k(B.parent.parent,1),A(x,B.parent.parent))}else{const W=B.parent.parent.left;L(W)===1?(k(B.parent,0),k(W,0),k(B.parent.parent,1),B=B.parent.parent):(B===B.parent.left&&(B=B.parent,A(x,B)),k(B.parent,0),k(B.parent.parent,1),T(x,B.parent.parent))}return k(x.root,0),O}function C(x,O){let B=0,W=x.root;const V=O.start,K=O.end;for(;;)if(R(V,K,W.start+B,W.end+B)<0)if(W.left===e.SENTINEL){O.start-=B,O.end-=B,O.maxEnd-=B,W.left=O;break}else W=W.left;else if(W.right===e.SENTINEL){O.start-=B+W.delta,O.end-=B+W.delta,O.maxEnd-=B+W.delta,W.right=O;break}else B+=W.delta,W=W.right;O.parent=W,O.left=e.SENTINEL,O.right=e.SENTINEL,k(O,1)}function w(x,O){let B,W;if(O.left===e.SENTINEL?(B=O.right,W=O,B.delta+=O.delta,(B.delta<-1073741824||B.delta>1073741824)&&(x.requestNormalizeDelta=!0),B.start+=O.delta,B.end+=O.delta):O.right===e.SENTINEL?(B=O.left,W=O):(W=D(O.right),B=W.right,B.start+=W.delta,B.end+=W.delta,B.delta+=W.delta,(B.delta<-1073741824||B.delta>1073741824)&&(x.requestNormalizeDelta=!0),W.start+=O.delta,W.end+=O.delta,W.delta=O.delta,(W.delta<-1073741824||W.delta>1073741824)&&(x.requestNormalizeDelta=!0)),W===x.root){x.root=B,k(B,0),O.detach(),I(),N(B),x.root.parent=e.SENTINEL;return}const V=L(W)===1;if(W===W.parent.left?W.parent.left=B:W.parent.right=B,W===O?B.parent=W.parent:(W.parent===O?B.parent=W:B.parent=W.parent,W.left=O.left,W.right=O.right,W.parent=O.parent,k(W,L(O)),O===x.root?x.root=W:O===O.parent.left?O.parent.left=W:O.parent.right=W,W.left!==e.SENTINEL&&(W.left.parent=W),W.right!==e.SENTINEL&&(W.right.parent=W)),O.detach(),V){M(B.parent),W!==O&&(M(W),M(W.parent)),I();return}M(B),M(B.parent),W!==O&&(M(W),M(W.parent));let K;for(;B!==x.root&&L(B)===0;)B===B.parent.left?(K=B.parent.right,L(K)===1&&(k(K,0),k(B.parent,1),T(x,B.parent),K=B.parent.right),L(K.left)===0&&L(K.right)===0?(k(K,1),B=B.parent):(L(K.right)===0&&(k(K.left,0),k(K,1),A(x,K),K=B.parent.right),k(K,L(B.parent)),k(B.parent,0),k(K.right,0),T(x,B.parent),B=x.root)):(K=B.parent.left,L(K)===1&&(k(K,0),k(B.parent,1),A(x,B.parent),K=B.parent.left),L(K.left)===0&&L(K.right)===0?(k(K,1),B=B.parent):(L(K.left)===0&&(k(K.right,0),k(K,1),T(x,K),K=B.parent.left),k(K,L(B.parent)),k(B.parent,0),k(K.left,0),A(x,B.parent),B=x.root));k(B,0),I()}function D(x){for(;x.left!==e.SENTINEL;)x=x.left;return x}function I(){e.SENTINEL.parent=e.SENTINEL,e.SENTINEL.delta=0,e.SENTINEL.start=0,e.SENTINEL.end=0}function T(x,O){const B=O.right;B.delta+=O.delta,(B.delta<-1073741824||B.delta>1073741824)&&(x.requestNormalizeDelta=!0),B.start+=O.delta,B.end+=O.delta,O.right=B.left,B.left!==e.SENTINEL&&(B.left.parent=O),B.parent=O.parent,O.parent===e.SENTINEL?x.root=B:O===O.parent.left?O.parent.left=B:O.parent.right=B,B.left=O,O.parent=B,N(O),N(B)}function A(x,O){const B=O.left;O.delta-=B.delta,(O.delta<-1073741824||O.delta>1073741824)&&(x.requestNormalizeDelta=!0),O.start-=B.delta,O.end-=B.delta,O.left=B.right,B.right!==e.SENTINEL&&(B.right.parent=O),B.parent=O.parent,O.parent===e.SENTINEL?x.root=B:O===O.parent.right?O.parent.right=B:O.parent.left=B,B.right=O,O.parent=B,N(O),N(B)}function P(x){let O=x.end;if(x.left!==e.SENTINEL){const B=x.left.maxEnd;B>O&&(O=B)}if(x.right!==e.SENTINEL){const B=x.right.maxEnd+x.delta;B>O&&(O=B)}return O}function N(x){x.maxEnd=P(x)}e.recomputeMaxEnd=N;function M(x){for(;x!==e.SENTINEL;){const O=P(x);if(x.maxEnd===O)return;x.maxEnd=O,x=x.parent}}function R(x,O,B,W){return x===B?O-W:x-B}e.intervalCompare=R}),define(se[526],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.recomputeTreeMetadata=e.updateTreeMetadata=e.fixInsert=e.rbDelete=e.rightRotate=e.leftRotate=e.righttest=e.leftest=e.SENTINEL=e.TreeNode=void 0;class L{constructor(r,u){this.piece=r,this.color=u,this.size_left=0,this.lf_left=0,this.parent=this,this.left=this,this.right=this}next(){if(this.right!==e.SENTINEL)return k(this.right);let r=this;for(;r.parent!==e.SENTINEL&&r.parent.left!==r;)r=r.parent;return r.parent===e.SENTINEL?e.SENTINEL:r.parent}prev(){if(this.left!==e.SENTINEL)return y(this.left);let r=this;for(;r.parent!==e.SENTINEL&&r.parent.right!==r;)r=r.parent;return r.parent===e.SENTINEL?e.SENTINEL:r.parent}detach(){this.parent=null,this.left=null,this.right=null}}e.TreeNode=L,e.SENTINEL=new L(null,0),e.SENTINEL.parent=e.SENTINEL,e.SENTINEL.left=e.SENTINEL,e.SENTINEL.right=e.SENTINEL,e.SENTINEL.color=0;function k(t){for(;t.left!==e.SENTINEL;)t=t.left;return t}e.leftest=k;function y(t){for(;t.right!==e.SENTINEL;)t=t.right;return t}e.righttest=y;function E(t){return t===e.SENTINEL?0:t.size_left+t.piece.length+E(t.right)}function S(t){return t===e.SENTINEL?0:t.lf_left+t.piece.lineFeedCnt+S(t.right)}function p(){e.SENTINEL.parent=e.SENTINEL}function _(t,r){const u=r.right;u.size_left+=r.size_left+(r.piece?r.piece.length:0),u.lf_left+=r.lf_left+(r.piece?r.piece.lineFeedCnt:0),r.right=u.left,u.left!==e.SENTINEL&&(u.left.parent=r),u.parent=r.parent,r.parent===e.SENTINEL?t.root=u:r.parent.left===r?r.parent.left=u:r.parent.right=u,u.left=r,r.parent=u}e.leftRotate=_;function v(t,r){const u=r.left;r.left=u.right,u.right!==e.SENTINEL&&(u.right.parent=r),u.parent=r.parent,r.size_left-=u.size_left+(u.piece?u.piece.length:0),r.lf_left-=u.lf_left+(u.piece?u.piece.lineFeedCnt:0),r.parent===e.SENTINEL?t.root=u:r===r.parent.right?r.parent.right=u:r.parent.left=u,u.right=r,r.parent=u}e.rightRotate=v;function b(t,r){let u,f;if(r.left===e.SENTINEL?(f=r,u=f.right):r.right===e.SENTINEL?(f=r,u=f.left):(f=k(r.right),u=f.right),f===t.root){t.root=u,u.color=0,r.detach(),p(),t.root.parent=e.SENTINEL;return}const c=f.color===1;if(f===f.parent.left?f.parent.left=u:f.parent.right=u,f===r?(u.parent=f.parent,n(t,u)):(f.parent===r?u.parent=f:u.parent=f.parent,n(t,u),f.left=r.left,f.right=r.right,f.parent=r.parent,f.color=r.color,r===t.root?t.root=f:r===r.parent.left?r.parent.left=f:r.parent.right=f,f.left!==e.SENTINEL&&(f.left.parent=f),f.right!==e.SENTINEL&&(f.right.parent=f),f.size_left=r.size_left,f.lf_left=r.lf_left,n(t,f)),r.detach(),u.parent.left===u){const s=E(u),l=S(u);if(s!==u.parent.size_left||l!==u.parent.lf_left){const o=s-u.parent.size_left,g=l-u.parent.lf_left;u.parent.size_left=s,u.parent.lf_left=l,i(t,u.parent,o,g)}}if(n(t,u.parent),c){p();return}let d;for(;u!==t.root&&u.color===0;)u===u.parent.left?(d=u.parent.right,d.color===1&&(d.color=0,u.parent.color=1,_(t,u.parent),d=u.parent.right),d.left.color===0&&d.right.color===0?(d.color=1,u=u.parent):(d.right.color===0&&(d.left.color=0,d.color=1,v(t,d),d=u.parent.right),d.color=u.parent.color,u.parent.color=0,d.right.color=0,_(t,u.parent),u=t.root)):(d=u.parent.left,d.color===1&&(d.color=0,u.parent.color=1,v(t,u.parent),d=u.parent.left),d.left.color===0&&d.right.color===0?(d.color=1,u=u.parent):(d.left.color===0&&(d.right.color=0,d.color=1,_(t,d),d=u.parent.left),d.color=u.parent.color,u.parent.color=0,d.left.color=0,v(t,u.parent),u=t.root));u.color=0,p()}e.rbDelete=b;function a(t,r){for(n(t,r);r!==t.root&&r.parent.color===1;)if(r.parent===r.parent.parent.left){const u=r.parent.parent.right;u.color===1?(r.parent.color=0,u.color=0,r.parent.parent.color=1,r=r.parent.parent):(r===r.parent.right&&(r=r.parent,_(t,r)),r.parent.color=0,r.parent.parent.color=1,v(t,r.parent.parent))}else{const u=r.parent.parent.left;u.color===1?(r.parent.color=0,u.color=0,r.parent.parent.color=1,r=r.parent.parent):(r===r.parent.left&&(r=r.parent,v(t,r)),r.parent.color=0,r.parent.parent.color=1,_(t,r.parent.parent))}t.root.color=0}e.fixInsert=a;function i(t,r,u,f){for(;r!==t.root&&r!==e.SENTINEL;)r.parent.left===r&&(r.parent.size_left+=u,r.parent.lf_left+=f),r=r.parent}e.updateTreeMetadata=i;function n(t,r){let u=0,f=0;if(r!==t.root){for(;r!==t.root&&r===r.parent.right;)r=r.parent;if(r!==t.root)for(r=r.parent,u=E(r.left)-r.size_left,f=S(r.left)-r.lf_left,r.size_left+=u,r.lf_left+=f;r!==t.root&&(u!==0||f!==0);)r.parent.left===r&&(r.parent.size_left+=u,r.parent.lf_left+=f),r=r.parent}}e.recomputeTreeMetadata=n}),define(se[291],oe([1,0,13,174]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PrefixSumIndexOfResult=e.ConstantTimePrefixSumComputer=e.PrefixSumComputer=void 0;class y{constructor(_){this.values=_,this.prefixSum=new Uint32Array(_.length),this.prefixSumValidIndex=new Int32Array(1),this.prefixSumValidIndex[0]=-1}insertValues(_,v){_=(0,k.toUint32)(_);const b=this.values,a=this.prefixSum,i=v.length;return i===0?!1:(this.values=new Uint32Array(b.length+i),this.values.set(b.subarray(0,_),0),this.values.set(b.subarray(_),_+i),this.values.set(v,_),_-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=_-1),this.prefixSum=new Uint32Array(this.values.length),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(a.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}setValue(_,v){return _=(0,k.toUint32)(_),v=(0,k.toUint32)(v),this.values[_]===v?!1:(this.values[_]=v,_-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=_-1),!0)}removeValues(_,v){_=(0,k.toUint32)(_),v=(0,k.toUint32)(v);const b=this.values,a=this.prefixSum;if(_>=b.length)return!1;const i=b.length-_;return v>=i&&(v=i),v===0?!1:(this.values=new Uint32Array(b.length-v),this.values.set(b.subarray(0,_),0),this.values.set(b.subarray(_+v),_),this.prefixSum=new Uint32Array(this.values.length),_-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=_-1),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(a.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}getTotalSum(){return this.values.length===0?0:this._getPrefixSum(this.values.length-1)}getPrefixSum(_){return _<0?0:(_=(0,k.toUint32)(_),this._getPrefixSum(_))}_getPrefixSum(_){if(_<=this.prefixSumValidIndex[0])return this.prefixSum[_];let v=this.prefixSumValidIndex[0]+1;v===0&&(this.prefixSum[0]=this.values[0],v++),_>=this.values.length&&(_=this.values.length-1);for(let b=v;b<=_;b++)this.prefixSum[b]=this.prefixSum[b-1]+this.values[b];return this.prefixSumValidIndex[0]=Math.max(this.prefixSumValidIndex[0],_),this.prefixSum[_]}getIndexOf(_){_=Math.floor(_),this.getTotalSum();let v=0,b=this.values.length-1,a=0,i=0,n=0;for(;v<=b;)if(a=v+(b-v)/2|0,i=this.prefixSum[a],n=i-this.values[a],_<n)b=a-1;else if(_>=i)v=a+1;else break;return new S(a,_-n)}}e.PrefixSumComputer=y;class E{constructor(_){this._values=_,this._isValid=!1,this._validEndIndex=-1,this._prefixSum=[],this._indexBySum=[]}getTotalSum(){return this._ensureValid(),this._indexBySum.length}getPrefixSum(_){return this._ensureValid(),_===0?0:this._prefixSum[_-1]}getIndexOf(_){this._ensureValid();const v=this._indexBySum[_],b=v>0?this._prefixSum[v-1]:0;return new S(v,_-b)}removeValues(_,v){this._values.splice(_,v),this._invalidate(_)}insertValues(_,v){this._values=(0,L.arrayInsert)(this._values,_,v),this._invalidate(_)}_invalidate(_){this._isValid=!1,this._validEndIndex=Math.min(this._validEndIndex,_-1)}_ensureValid(){if(!this._isValid){for(let _=this._validEndIndex+1,v=this._values.length;_<v;_++){const b=this._values[_],a=_>0?this._prefixSum[_-1]:0;this._prefixSum[_]=a+b;for(let i=0;i<b;i++)this._indexBySum[a+i]=_}this._prefixSum.length=this._values.length,this._indexBySum.length=this._prefixSum[this._prefixSum.length-1],this._isValid=!0,this._validEndIndex=this._values.length-1}}setValue(_,v){this._values[_]!==v&&(this._values[_]=v,this._invalidate(_))}}e.ConstantTimePrefixSumComputer=E;class S{constructor(_,v){this.index=_,this.remainder=v,this._prefixSumIndexOfResultBrand=void 0,this.index=_,this.remainder=v}}e.PrefixSumIndexOfResult=S}),define(se[527],oe([1,0,11,10,291]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MirrorTextModel=void 0;class E{constructor(p,_,v,b){this._uri=p,this._lines=_,this._eol=v,this._versionId=b,this._lineStarts=null,this._cachedTextValue=null}dispose(){this._lines.length=0}get version(){return this._versionId}getText(){return this._cachedTextValue===null&&(this._cachedTextValue=this._lines.join(this._eol)),this._cachedTextValue}onEvents(p){p.eol&&p.eol!==this._eol&&(this._eol=p.eol,this._lineStarts=null);const _=p.changes;for(const v of _)this._acceptDeleteRange(v.range),this._acceptInsertText(new k.Position(v.range.startLineNumber,v.range.startColumn),v.text);this._versionId=p.versionId,this._cachedTextValue=null}_ensureLineStarts(){if(!this._lineStarts){const p=this._eol.length,_=this._lines.length,v=new Uint32Array(_);for(let b=0;b<_;b++)v[b]=this._lines[b].length+p;this._lineStarts=new y.PrefixSumComputer(v)}}_setLineText(p,_){this._lines[p]=_,this._lineStarts&&this._lineStarts.setValue(p,this._lines[p].length+this._eol.length)}_acceptDeleteRange(p){if(p.startLineNumber===p.endLineNumber){if(p.startColumn===p.endColumn)return;this._setLineText(p.startLineNumber-1,this._lines[p.startLineNumber-1].substring(0,p.startColumn-1)+this._lines[p.startLineNumber-1].substring(p.endColumn-1));return}this._setLineText(p.startLineNumber-1,this._lines[p.startLineNumber-1].substring(0,p.startColumn-1)+this._lines[p.endLineNumber-1].substring(p.endColumn-1)),this._lines.splice(p.startLineNumber,p.endLineNumber-p.startLineNumber),this._lineStarts&&this._lineStarts.removeValues(p.startLineNumber,p.endLineNumber-p.startLineNumber)}_acceptInsertText(p,_){if(_.length===0)return;const v=(0,L.splitLines)(_);if(v.length===1){this._setLineText(p.lineNumber-1,this._lines[p.lineNumber-1].substring(0,p.column-1)+v[0]+this._lines[p.lineNumber-1].substring(p.column-1));return}v[v.length-1]+=this._lines[p.lineNumber-1].substring(p.column-1),this._setLineText(p.lineNumber-1,this._lines[p.lineNumber-1].substring(0,p.column-1)+v[0]);const b=new Uint32Array(v.length-1);for(let a=1;a<v.length;a++)this._lines.splice(p.lineNumber+a-1,0,v[a]),b[a-1]=v[a].length+this._eol.length;this._lineStarts&&this._lineStarts.insertValues(p.lineNumber,b)}}e.MirrorTextModel=E}),define(se[292],oe([1,0,2]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextModelPart=void 0;class k extends L.Disposable{constructor(){super(...arguments),this._isDisposed=!1}dispose(){super.dispose(),this._isDisposed=!0}assertNotDisposed(){if(this._isDisposed)throw new Error(\"TextModelPart is disposed!\")}}e.TextModelPart=k}),define(se[184],oe([1,0,11,150,10,5,41]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Searcher=e.isValidMatch=e.TextModelSearch=e.createFindMatch=e.isMultilineRegexSource=e.SearchParams=void 0;const p=999;class _{constructor(c,d,s,l){this.searchString=c,this.isRegex=d,this.matchCase=s,this.wordSeparators=l}parseSearchRequest(){if(this.searchString===\"\")return null;let c;this.isRegex?c=v(this.searchString):c=this.searchString.indexOf(`\n`)>=0;let d=null;try{d=L.createRegExp(this.searchString,this.isRegex,{matchCase:this.matchCase,wholeWord:!1,multiline:c,global:!0,unicode:!0})}catch{return null}if(!d)return null;let s=!this.isRegex&&!c;return s&&this.searchString.toLowerCase()!==this.searchString.toUpperCase()&&(s=this.matchCase),new S.SearchData(d,this.wordSeparators?(0,k.getMapForWordSeparators)(this.wordSeparators):null,s?this.searchString:null)}}e.SearchParams=_;function v(f){if(!f||f.length===0)return!1;for(let c=0,d=f.length;c<d;c++){const s=f.charCodeAt(c);if(s===10)return!0;if(s===92){if(c++,c>=d)break;const l=f.charCodeAt(c);if(l===110||l===114||l===87)return!0}}return!1}e.isMultilineRegexSource=v;function b(f,c,d){if(!d)return new S.FindMatch(f,null);const s=[];for(let l=0,o=c.length;l<o;l++)s[l]=c[l];return new S.FindMatch(f,s)}e.createFindMatch=b;class a{constructor(c){const d=[];let s=0;for(let l=0,o=c.length;l<o;l++)c.charCodeAt(l)===10&&(d[s++]=l);this._lineFeedsOffsets=d}findLineFeedCountBeforeOffset(c){const d=this._lineFeedsOffsets;let s=0,l=d.length-1;if(l===-1||c<=d[0])return 0;for(;s<l;){const o=s+((l-s)/2>>0);d[o]>=c?l=o-1:d[o+1]>=c?(s=o,l=o):s=o+1}return s+1}}class i{static findMatches(c,d,s,l,o){const g=d.parseSearchRequest();return g?g.regex.multiline?this._doFindMatchesMultiline(c,s,new u(g.wordSeparators,g.regex),l,o):this._doFindMatchesLineByLine(c,s,g,l,o):[]}static _getMultilineMatchRange(c,d,s,l,o,g){let h,m=0;l?(m=l.findLineFeedCountBeforeOffset(o),h=d+o+m):h=d+o;let C;if(l){const T=l.findLineFeedCountBeforeOffset(o+g.length)-m;C=h+g.length+T}else C=h+g.length;const w=c.getPositionAt(h),D=c.getPositionAt(C);return new E.Range(w.lineNumber,w.column,D.lineNumber,D.column)}static _doFindMatchesMultiline(c,d,s,l,o){const g=c.getOffsetAt(d.getStartPosition()),h=c.getValueInRange(d,1),m=c.getEOL()===`\\r\n`?new a(h):null,C=[];let w=0,D;for(s.reset(0);D=s.next(h);)if(C[w++]=b(this._getMultilineMatchRange(c,g,h,m,D.index,D[0]),D,l),w>=o)return C;return C}static _doFindMatchesLineByLine(c,d,s,l,o){const g=[];let h=0;if(d.startLineNumber===d.endLineNumber){const C=c.getLineContent(d.startLineNumber).substring(d.startColumn-1,d.endColumn-1);return h=this._findMatchesInLine(s,C,d.startLineNumber,d.startColumn-1,h,g,l,o),g}const m=c.getLineContent(d.startLineNumber).substring(d.startColumn-1);h=this._findMatchesInLine(s,m,d.startLineNumber,d.startColumn-1,h,g,l,o);for(let C=d.startLineNumber+1;C<d.endLineNumber&&h<o;C++)h=this._findMatchesInLine(s,c.getLineContent(C),C,0,h,g,l,o);if(h<o){const C=c.getLineContent(d.endLineNumber).substring(0,d.endColumn-1);h=this._findMatchesInLine(s,C,d.endLineNumber,0,h,g,l,o)}return g}static _findMatchesInLine(c,d,s,l,o,g,h,m){const C=c.wordSeparators;if(!h&&c.simpleSearch){const I=c.simpleSearch,T=I.length,A=d.length;let P=-T;for(;(P=d.indexOf(I,P+T))!==-1;)if((!C||r(C,d,A,P,T))&&(g[o++]=new S.FindMatch(new E.Range(s,P+1+l,s,P+1+T+l),null),o>=m))return o;return o}const w=new u(c.wordSeparators,c.regex);let D;w.reset(0);do if(D=w.next(d),D&&(g[o++]=b(new E.Range(s,D.index+1+l,s,D.index+1+D[0].length+l),D,h),o>=m))return o;while(D);return o}static findNextMatch(c,d,s,l){const o=d.parseSearchRequest();if(!o)return null;const g=new u(o.wordSeparators,o.regex);return o.regex.multiline?this._doFindNextMatchMultiline(c,s,g,l):this._doFindNextMatchLineByLine(c,s,g,l)}static _doFindNextMatchMultiline(c,d,s,l){const o=new y.Position(d.lineNumber,1),g=c.getOffsetAt(o),h=c.getLineCount(),m=c.getValueInRange(new E.Range(o.lineNumber,o.column,h,c.getLineMaxColumn(h)),1),C=c.getEOL()===`\\r\n`?new a(m):null;s.reset(d.column-1);const w=s.next(m);return w?b(this._getMultilineMatchRange(c,g,m,C,w.index,w[0]),w,l):d.lineNumber!==1||d.column!==1?this._doFindNextMatchMultiline(c,new y.Position(1,1),s,l):null}static _doFindNextMatchLineByLine(c,d,s,l){const o=c.getLineCount(),g=d.lineNumber,h=c.getLineContent(g),m=this._findFirstMatchInLine(s,h,g,d.column,l);if(m)return m;for(let C=1;C<=o;C++){const w=(g+C-1)%o,D=c.getLineContent(w+1),I=this._findFirstMatchInLine(s,D,w+1,1,l);if(I)return I}return null}static _findFirstMatchInLine(c,d,s,l,o){c.reset(l-1);const g=c.next(d);return g?b(new E.Range(s,g.index+1,s,g.index+1+g[0].length),g,o):null}static findPreviousMatch(c,d,s,l){const o=d.parseSearchRequest();if(!o)return null;const g=new u(o.wordSeparators,o.regex);return o.regex.multiline?this._doFindPreviousMatchMultiline(c,s,g,l):this._doFindPreviousMatchLineByLine(c,s,g,l)}static _doFindPreviousMatchMultiline(c,d,s,l){const o=this._doFindMatchesMultiline(c,new E.Range(1,1,d.lineNumber,d.column),s,l,10*p);if(o.length>0)return o[o.length-1];const g=c.getLineCount();return d.lineNumber!==g||d.column!==c.getLineMaxColumn(g)?this._doFindPreviousMatchMultiline(c,new y.Position(g,c.getLineMaxColumn(g)),s,l):null}static _doFindPreviousMatchLineByLine(c,d,s,l){const o=c.getLineCount(),g=d.lineNumber,h=c.getLineContent(g).substring(0,d.column-1),m=this._findLastMatchInLine(s,h,g,l);if(m)return m;for(let C=1;C<=o;C++){const w=(o+g-C-1)%o,D=c.getLineContent(w+1),I=this._findLastMatchInLine(s,D,w+1,l);if(I)return I}return null}static _findLastMatchInLine(c,d,s,l){let o=null,g;for(c.reset(0);g=c.next(d);)o=b(new E.Range(s,g.index+1,s,g.index+1+g[0].length),g,l);return o}}e.TextModelSearch=i;function n(f,c,d,s,l){if(s===0)return!0;const o=c.charCodeAt(s-1);if(f.get(o)!==0||o===13||o===10)return!0;if(l>0){const g=c.charCodeAt(s);if(f.get(g)!==0)return!0}return!1}function t(f,c,d,s,l){if(s+l===d)return!0;const o=c.charCodeAt(s+l);if(f.get(o)!==0||o===13||o===10)return!0;if(l>0){const g=c.charCodeAt(s+l-1);if(f.get(g)!==0)return!0}return!1}function r(f,c,d,s,l){return n(f,c,d,s,l)&&t(f,c,d,s,l)}e.isValidMatch=r;class u{constructor(c,d){this._wordSeparators=c,this._searchRegex=d,this._prevMatchStartIndex=-1,this._prevMatchLength=0}reset(c){this._searchRegex.lastIndex=c,this._prevMatchStartIndex=-1,this._prevMatchLength=0}next(c){const d=c.length;let s;do{if(this._prevMatchStartIndex+this._prevMatchLength===d||(s=this._searchRegex.exec(c),!s))return null;const l=s.index,o=s[0].length;if(l===this._prevMatchStartIndex&&o===this._prevMatchLength){if(o===0){L.getNextCodePoint(c,d,this._searchRegex.lastIndex)>65535?this._searchRegex.lastIndex+=2:this._searchRegex.lastIndex+=1;continue}return null}if(this._prevMatchStartIndex=l,this._prevMatchLength=o,!this._wordSeparators||r(this._wordSeparators,c,d,l,o))return s}while(s);return null}}e.Searcher=u}),define(se[293],oe([1,0,10,5,41,526,184]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PieceTreeBase=e.StringBuffer=e.Piece=e.createLineStarts=e.createLineStartsFast=void 0;const p=65535;function _(f){let c;return f[f.length-1]<65536?c=new Uint16Array(f.length):c=new Uint32Array(f.length),c.set(f,0),c}class v{constructor(c,d,s,l,o){this.lineStarts=c,this.cr=d,this.lf=s,this.crlf=l,this.isBasicASCII=o}}function b(f,c=!0){const d=[0];let s=1;for(let l=0,o=f.length;l<o;l++){const g=f.charCodeAt(l);g===13?l+1<o&&f.charCodeAt(l+1)===10?(d[s++]=l+2,l++):d[s++]=l+1:g===10&&(d[s++]=l+1)}return c?_(d):d}e.createLineStartsFast=b;function a(f,c){f.length=0,f[0]=0;let d=1,s=0,l=0,o=0,g=!0;for(let m=0,C=c.length;m<C;m++){const w=c.charCodeAt(m);w===13?m+1<C&&c.charCodeAt(m+1)===10?(o++,f[d++]=m+2,m++):(s++,f[d++]=m+1):w===10?(l++,f[d++]=m+1):g&&w!==9&&(w<32||w>126)&&(g=!1)}const h=new v(_(f),s,l,o,g);return f.length=0,h}e.createLineStarts=a;class i{constructor(c,d,s,l,o){this.bufferIndex=c,this.start=d,this.end=s,this.lineFeedCnt=l,this.length=o}}e.Piece=i;class n{constructor(c,d){this.buffer=c,this.lineStarts=d}}e.StringBuffer=n;class t{constructor(c,d){this._pieces=[],this._tree=c,this._BOM=d,this._index=0,c.root!==E.SENTINEL&&c.iterate(c.root,s=>(s!==E.SENTINEL&&this._pieces.push(s.piece),!0))}read(){return this._pieces.length===0?this._index===0?(this._index++,this._BOM):null:this._index>this._pieces.length-1?null:this._index===0?this._BOM+this._tree.getPieceContent(this._pieces[this._index++]):this._tree.getPieceContent(this._pieces[this._index++])}}class r{constructor(c){this._limit=c,this._cache=[]}get(c){for(let d=this._cache.length-1;d>=0;d--){const s=this._cache[d];if(s.nodeStartOffset<=c&&s.nodeStartOffset+s.node.piece.length>=c)return s}return null}get2(c){for(let d=this._cache.length-1;d>=0;d--){const s=this._cache[d];if(s.nodeStartLineNumber&&s.nodeStartLineNumber<c&&s.nodeStartLineNumber+s.node.piece.lineFeedCnt>=c)return s}return null}set(c){this._cache.length>=this._limit&&this._cache.shift(),this._cache.push(c)}validate(c){let d=!1;const s=this._cache;for(let l=0;l<s.length;l++){const o=s[l];if(o.node.parent===null||o.nodeStartOffset>=c){s[l]=null,d=!0;continue}}if(d){const l=[];for(const o of s)o!==null&&l.push(o);this._cache=l}}}class u{constructor(c,d,s){this.create(c,d,s)}create(c,d,s){this._buffers=[new n(\"\",[0])],this._lastChangeBufferPos={line:0,column:0},this.root=E.SENTINEL,this._lineCnt=1,this._length=0,this._EOL=d,this._EOLLength=d.length,this._EOLNormalized=s;let l=null;for(let o=0,g=c.length;o<g;o++)if(c[o].buffer.length>0){c[o].lineStarts||(c[o].lineStarts=b(c[o].buffer));const h=new i(o+1,{line:0,column:0},{line:c[o].lineStarts.length-1,column:c[o].buffer.length-c[o].lineStarts[c[o].lineStarts.length-1]},c[o].lineStarts.length-1,c[o].buffer.length);this._buffers.push(c[o]),l=this.rbInsertRight(l,h)}this._searchCache=new r(1),this._lastVisitedLine={lineNumber:0,value:\"\"},this.computeBufferMetadata()}normalizeEOL(c){const d=p,s=d-Math.floor(d/3),l=s*2;let o=\"\",g=0;const h=[];if(this.iterate(this.root,m=>{const C=this.getNodeContent(m),w=C.length;if(g<=s||g+w<l)return o+=C,g+=w,!0;const D=o.replace(/\\r\\n|\\r|\\n/g,c);return h.push(new n(D,b(D))),o=C,g=w,!0}),g>0){const m=o.replace(/\\r\\n|\\r|\\n/g,c);h.push(new n(m,b(m)))}this.create(h,c,!0)}getEOL(){return this._EOL}setEOL(c){this._EOL=c,this._EOLLength=this._EOL.length,this.normalizeEOL(c)}createSnapshot(c){return new t(this,c)}getOffsetAt(c,d){let s=0,l=this.root;for(;l!==E.SENTINEL;)if(l.left!==E.SENTINEL&&l.lf_left+1>=c)l=l.left;else if(l.lf_left+l.piece.lineFeedCnt+1>=c){s+=l.size_left;const o=this.getAccumulatedValue(l,c-l.lf_left-2);return s+=o+d-1}else c-=l.lf_left+l.piece.lineFeedCnt,s+=l.size_left+l.piece.length,l=l.right;return s}getPositionAt(c){c=Math.floor(c),c=Math.max(0,c);let d=this.root,s=0;const l=c;for(;d!==E.SENTINEL;)if(d.size_left!==0&&d.size_left>=c)d=d.left;else if(d.size_left+d.piece.length>=c){const o=this.getIndexOf(d,c-d.size_left);if(s+=d.lf_left+o.index,o.index===0){const g=this.getOffsetAt(s+1,1),h=l-g;return new L.Position(s+1,h+1)}return new L.Position(s+1,o.remainder+1)}else if(c-=d.size_left+d.piece.length,s+=d.lf_left+d.piece.lineFeedCnt,d.right===E.SENTINEL){const o=this.getOffsetAt(s+1,1),g=l-c-o;return new L.Position(s+1,g+1)}else d=d.right;return new L.Position(1,1)}getValueInRange(c,d){if(c.startLineNumber===c.endLineNumber&&c.startColumn===c.endColumn)return\"\";const s=this.nodeAt2(c.startLineNumber,c.startColumn),l=this.nodeAt2(c.endLineNumber,c.endColumn),o=this.getValueInRange2(s,l);return d?d!==this._EOL||!this._EOLNormalized?o.replace(/\\r\\n|\\r|\\n/g,d):d===this.getEOL()&&this._EOLNormalized?o:o.replace(/\\r\\n|\\r|\\n/g,d):o}getValueInRange2(c,d){if(c.node===d.node){const h=c.node,m=this._buffers[h.piece.bufferIndex].buffer,C=this.offsetInBuffer(h.piece.bufferIndex,h.piece.start);return m.substring(C+c.remainder,C+d.remainder)}let s=c.node;const l=this._buffers[s.piece.bufferIndex].buffer,o=this.offsetInBuffer(s.piece.bufferIndex,s.piece.start);let g=l.substring(o+c.remainder,o+s.piece.length);for(s=s.next();s!==E.SENTINEL;){const h=this._buffers[s.piece.bufferIndex].buffer,m=this.offsetInBuffer(s.piece.bufferIndex,s.piece.start);if(s===d.node){g+=h.substring(m,m+d.remainder);break}else g+=h.substr(m,s.piece.length);s=s.next()}return g}getLinesContent(){const c=[];let d=0,s=\"\",l=!1;return this.iterate(this.root,o=>{if(o===E.SENTINEL)return!0;const g=o.piece;let h=g.length;if(h===0)return!0;const m=this._buffers[g.bufferIndex].buffer,C=this._buffers[g.bufferIndex].lineStarts,w=g.start.line,D=g.end.line;let I=C[w]+g.start.column;if(l&&(m.charCodeAt(I)===10&&(I++,h--),c[d++]=s,s=\"\",l=!1,h===0))return!0;if(w===D)return!this._EOLNormalized&&m.charCodeAt(I+h-1)===13?(l=!0,s+=m.substr(I,h-1)):s+=m.substr(I,h),!0;s+=this._EOLNormalized?m.substring(I,Math.max(I,C[w+1]-this._EOLLength)):m.substring(I,C[w+1]).replace(/(\\r\\n|\\r|\\n)$/,\"\"),c[d++]=s;for(let T=w+1;T<D;T++)s=this._EOLNormalized?m.substring(C[T],C[T+1]-this._EOLLength):m.substring(C[T],C[T+1]).replace(/(\\r\\n|\\r|\\n)$/,\"\"),c[d++]=s;return!this._EOLNormalized&&m.charCodeAt(C[D]+g.end.column-1)===13?(l=!0,g.end.column===0?d--:s=m.substr(C[D],g.end.column-1)):s=m.substr(C[D],g.end.column),!0}),l&&(c[d++]=s,s=\"\"),c[d++]=s,c}getLength(){return this._length}getLineCount(){return this._lineCnt}getLineContent(c){return this._lastVisitedLine.lineNumber===c?this._lastVisitedLine.value:(this._lastVisitedLine.lineNumber=c,c===this._lineCnt?this._lastVisitedLine.value=this.getLineRawContent(c):this._EOLNormalized?this._lastVisitedLine.value=this.getLineRawContent(c,this._EOLLength):this._lastVisitedLine.value=this.getLineRawContent(c).replace(/(\\r\\n|\\r|\\n)$/,\"\"),this._lastVisitedLine.value)}_getCharCode(c){if(c.remainder===c.node.piece.length){const d=c.node.next();if(!d)return 0;const s=this._buffers[d.piece.bufferIndex],l=this.offsetInBuffer(d.piece.bufferIndex,d.piece.start);return s.buffer.charCodeAt(l)}else{const d=this._buffers[c.node.piece.bufferIndex],l=this.offsetInBuffer(c.node.piece.bufferIndex,c.node.piece.start)+c.remainder;return d.buffer.charCodeAt(l)}}getLineCharCode(c,d){const s=this.nodeAt2(c,d+1);return this._getCharCode(s)}getLineLength(c){if(c===this.getLineCount()){const d=this.getOffsetAt(c,1);return this.getLength()-d}return this.getOffsetAt(c+1,1)-this.getOffsetAt(c,1)-this._EOLLength}findMatchesInNode(c,d,s,l,o,g,h,m,C,w,D){const I=this._buffers[c.piece.bufferIndex],T=this.offsetInBuffer(c.piece.bufferIndex,c.piece.start),A=this.offsetInBuffer(c.piece.bufferIndex,o),P=this.offsetInBuffer(c.piece.bufferIndex,g);let N;const M={line:0,column:0};let R,x;d._wordSeparators?(R=I.buffer.substring(A,P),x=O=>O+A,d.reset(0)):(R=I.buffer,x=O=>O,d.reset(A));do if(N=d.next(R),N){if(x(N.index)>=P)return w;this.positionInBuffer(c,x(N.index)-T,M);const O=this.getLineFeedCnt(c.piece.bufferIndex,o,M),B=M.line===o.line?M.column-o.column+l:M.column+1,W=B+N[0].length;if(D[w++]=(0,S.createFindMatch)(new k.Range(s+O,B,s+O,W),N,m),x(N.index)+N[0].length>=P||w>=C)return w}while(N);return w}findMatchesLineByLine(c,d,s,l){const o=[];let g=0;const h=new S.Searcher(d.wordSeparators,d.regex);let m=this.nodeAt2(c.startLineNumber,c.startColumn);if(m===null)return[];const C=this.nodeAt2(c.endLineNumber,c.endColumn);if(C===null)return[];let w=this.positionInBuffer(m.node,m.remainder);const D=this.positionInBuffer(C.node,C.remainder);if(m.node===C.node)return this.findMatchesInNode(m.node,h,c.startLineNumber,c.startColumn,w,D,d,s,l,g,o),o;let I=c.startLineNumber,T=m.node;for(;T!==C.node;){const P=this.getLineFeedCnt(T.piece.bufferIndex,w,T.piece.end);if(P>=1){const M=this._buffers[T.piece.bufferIndex].lineStarts,R=this.offsetInBuffer(T.piece.bufferIndex,T.piece.start),x=M[w.line+P],O=I===c.startLineNumber?c.startColumn:1;if(g=this.findMatchesInNode(T,h,I,O,w,this.positionInBuffer(T,x-R),d,s,l,g,o),g>=l)return o;I+=P}const N=I===c.startLineNumber?c.startColumn-1:0;if(I===c.endLineNumber){const M=this.getLineContent(I).substring(N,c.endColumn-1);return g=this._findMatchesInLine(d,h,M,c.endLineNumber,N,g,o,s,l),o}if(g=this._findMatchesInLine(d,h,this.getLineContent(I).substr(N),I,N,g,o,s,l),g>=l)return o;I++,m=this.nodeAt2(I,1),T=m.node,w=this.positionInBuffer(m.node,m.remainder)}if(I===c.endLineNumber){const P=I===c.startLineNumber?c.startColumn-1:0,N=this.getLineContent(I).substring(P,c.endColumn-1);return g=this._findMatchesInLine(d,h,N,c.endLineNumber,P,g,o,s,l),o}const A=I===c.startLineNumber?c.startColumn:1;return g=this.findMatchesInNode(C.node,h,I,A,w,D,d,s,l,g,o),o}_findMatchesInLine(c,d,s,l,o,g,h,m,C){const w=c.wordSeparators;if(!m&&c.simpleSearch){const I=c.simpleSearch,T=I.length,A=s.length;let P=-T;for(;(P=s.indexOf(I,P+T))!==-1;)if((!w||(0,S.isValidMatch)(w,s,A,P,T))&&(h[g++]=new y.FindMatch(new k.Range(l,P+1+o,l,P+1+T+o),null),g>=C))return g;return g}let D;d.reset(0);do if(D=d.next(s),D&&(h[g++]=(0,S.createFindMatch)(new k.Range(l,D.index+1+o,l,D.index+1+D[0].length+o),D,m),g>=C))return g;while(D);return g}insert(c,d,s=!1){if(this._EOLNormalized=this._EOLNormalized&&s,this._lastVisitedLine.lineNumber=0,this._lastVisitedLine.value=\"\",this.root!==E.SENTINEL){const{node:l,remainder:o,nodeStartOffset:g}=this.nodeAt(c),h=l.piece,m=h.bufferIndex,C=this.positionInBuffer(l,o);if(l.piece.bufferIndex===0&&h.end.line===this._lastChangeBufferPos.line&&h.end.column===this._lastChangeBufferPos.column&&g+h.length===c&&d.length<p){this.appendToNode(l,d),this.computeBufferMetadata();return}if(g===c)this.insertContentToNodeLeft(d,l),this._searchCache.validate(c);else if(g+l.piece.length>c){const w=[];let D=new i(h.bufferIndex,C,h.end,this.getLineFeedCnt(h.bufferIndex,C,h.end),this.offsetInBuffer(m,h.end)-this.offsetInBuffer(m,C));if(this.shouldCheckCRLF()&&this.endWithCR(d)&&this.nodeCharCodeAt(l,o)===10){const P={line:D.start.line+1,column:0};D=new i(D.bufferIndex,P,D.end,this.getLineFeedCnt(D.bufferIndex,P,D.end),D.length-1),d+=`\n`}if(this.shouldCheckCRLF()&&this.startWithLF(d))if(this.nodeCharCodeAt(l,o-1)===13){const P=this.positionInBuffer(l,o-1);this.deleteNodeTail(l,P),d=\"\\r\"+d,l.piece.length===0&&w.push(l)}else this.deleteNodeTail(l,C);else this.deleteNodeTail(l,C);const I=this.createNewPieces(d);D.length>0&&this.rbInsertRight(l,D);let T=l;for(let A=0;A<I.length;A++)T=this.rbInsertRight(T,I[A]);this.deleteNodes(w)}else this.insertContentToNodeRight(d,l)}else{const l=this.createNewPieces(d);let o=this.rbInsertLeft(null,l[0]);for(let g=1;g<l.length;g++)o=this.rbInsertRight(o,l[g])}this.computeBufferMetadata()}delete(c,d){if(this._lastVisitedLine.lineNumber=0,this._lastVisitedLine.value=\"\",d<=0||this.root===E.SENTINEL)return;const s=this.nodeAt(c),l=this.nodeAt(c+d),o=s.node,g=l.node;if(o===g){const I=this.positionInBuffer(o,s.remainder),T=this.positionInBuffer(o,l.remainder);if(s.nodeStartOffset===c){if(d===o.piece.length){const A=o.next();(0,E.rbDelete)(this,o),this.validateCRLFWithPrevNode(A),this.computeBufferMetadata();return}this.deleteNodeHead(o,T),this._searchCache.validate(c),this.validateCRLFWithPrevNode(o),this.computeBufferMetadata();return}if(s.nodeStartOffset+o.piece.length===c+d){this.deleteNodeTail(o,I),this.validateCRLFWithNextNode(o),this.computeBufferMetadata();return}this.shrinkNode(o,I,T),this.computeBufferMetadata();return}const h=[],m=this.positionInBuffer(o,s.remainder);this.deleteNodeTail(o,m),this._searchCache.validate(c),o.piece.length===0&&h.push(o);const C=this.positionInBuffer(g,l.remainder);this.deleteNodeHead(g,C),g.piece.length===0&&h.push(g);const w=o.next();for(let I=w;I!==E.SENTINEL&&I!==g;I=I.next())h.push(I);const D=o.piece.length===0?o.prev():o;this.deleteNodes(h),this.validateCRLFWithNextNode(D),this.computeBufferMetadata()}insertContentToNodeLeft(c,d){const s=[];if(this.shouldCheckCRLF()&&this.endWithCR(c)&&this.startWithLF(d)){const g=d.piece,h={line:g.start.line+1,column:0},m=new i(g.bufferIndex,h,g.end,this.getLineFeedCnt(g.bufferIndex,h,g.end),g.length-1);d.piece=m,c+=`\n`,(0,E.updateTreeMetadata)(this,d,-1,-1),d.piece.length===0&&s.push(d)}const l=this.createNewPieces(c);let o=this.rbInsertLeft(d,l[l.length-1]);for(let g=l.length-2;g>=0;g--)o=this.rbInsertLeft(o,l[g]);this.validateCRLFWithPrevNode(o),this.deleteNodes(s)}insertContentToNodeRight(c,d){this.adjustCarriageReturnFromNext(c,d)&&(c+=`\n`);const s=this.createNewPieces(c),l=this.rbInsertRight(d,s[0]);let o=l;for(let g=1;g<s.length;g++)o=this.rbInsertRight(o,s[g]);this.validateCRLFWithPrevNode(l)}positionInBuffer(c,d,s){const l=c.piece,o=c.piece.bufferIndex,g=this._buffers[o].lineStarts,m=g[l.start.line]+l.start.column+d;let C=l.start.line,w=l.end.line,D=0,I=0,T=0;for(;C<=w&&(D=C+(w-C)/2|0,T=g[D],D!==w);)if(I=g[D+1],m<T)w=D-1;else if(m>=I)C=D+1;else break;return s?(s.line=D,s.column=m-T,null):{line:D,column:m-T}}getLineFeedCnt(c,d,s){if(s.column===0)return s.line-d.line;const l=this._buffers[c].lineStarts;if(s.line===l.length-1)return s.line-d.line;const o=l[s.line+1],g=l[s.line]+s.column;if(o>g+1)return s.line-d.line;const h=g-1;return this._buffers[c].buffer.charCodeAt(h)===13?s.line-d.line+1:s.line-d.line}offsetInBuffer(c,d){return this._buffers[c].lineStarts[d.line]+d.column}deleteNodes(c){for(let d=0;d<c.length;d++)(0,E.rbDelete)(this,c[d])}createNewPieces(c){if(c.length>p){const w=[];for(;c.length>p;){const I=c.charCodeAt(p-1);let T;I===13||I>=55296&&I<=56319?(T=c.substring(0,p-1),c=c.substring(p-1)):(T=c.substring(0,p),c=c.substring(p));const A=b(T);w.push(new i(this._buffers.length,{line:0,column:0},{line:A.length-1,column:T.length-A[A.length-1]},A.length-1,T.length)),this._buffers.push(new n(T,A))}const D=b(c);return w.push(new i(this._buffers.length,{line:0,column:0},{line:D.length-1,column:c.length-D[D.length-1]},D.length-1,c.length)),this._buffers.push(new n(c,D)),w}let d=this._buffers[0].buffer.length;const s=b(c,!1);let l=this._lastChangeBufferPos;if(this._buffers[0].lineStarts[this._buffers[0].lineStarts.length-1]===d&&d!==0&&this.startWithLF(c)&&this.endWithCR(this._buffers[0].buffer)){this._lastChangeBufferPos={line:this._lastChangeBufferPos.line,column:this._lastChangeBufferPos.column+1},l=this._lastChangeBufferPos;for(let w=0;w<s.length;w++)s[w]+=d+1;this._buffers[0].lineStarts=this._buffers[0].lineStarts.concat(s.slice(1)),this._buffers[0].buffer+=\"_\"+c,d+=1}else{if(d!==0)for(let w=0;w<s.length;w++)s[w]+=d;this._buffers[0].lineStarts=this._buffers[0].lineStarts.concat(s.slice(1)),this._buffers[0].buffer+=c}const o=this._buffers[0].buffer.length,g=this._buffers[0].lineStarts.length-1,h=o-this._buffers[0].lineStarts[g],m={line:g,column:h},C=new i(0,l,m,this.getLineFeedCnt(0,l,m),o-d);return this._lastChangeBufferPos=m,[C]}getLineRawContent(c,d=0){let s=this.root,l=\"\";const o=this._searchCache.get2(c);if(o){s=o.node;const g=this.getAccumulatedValue(s,c-o.nodeStartLineNumber-1),h=this._buffers[s.piece.bufferIndex].buffer,m=this.offsetInBuffer(s.piece.bufferIndex,s.piece.start);if(o.nodeStartLineNumber+s.piece.lineFeedCnt===c)l=h.substring(m+g,m+s.piece.length);else{const C=this.getAccumulatedValue(s,c-o.nodeStartLineNumber);return h.substring(m+g,m+C-d)}}else{let g=0;const h=c;for(;s!==E.SENTINEL;)if(s.left!==E.SENTINEL&&s.lf_left>=c-1)s=s.left;else if(s.lf_left+s.piece.lineFeedCnt>c-1){const m=this.getAccumulatedValue(s,c-s.lf_left-2),C=this.getAccumulatedValue(s,c-s.lf_left-1),w=this._buffers[s.piece.bufferIndex].buffer,D=this.offsetInBuffer(s.piece.bufferIndex,s.piece.start);return g+=s.size_left,this._searchCache.set({node:s,nodeStartOffset:g,nodeStartLineNumber:h-(c-1-s.lf_left)}),w.substring(D+m,D+C-d)}else if(s.lf_left+s.piece.lineFeedCnt===c-1){const m=this.getAccumulatedValue(s,c-s.lf_left-2),C=this._buffers[s.piece.bufferIndex].buffer,w=this.offsetInBuffer(s.piece.bufferIndex,s.piece.start);l=C.substring(w+m,w+s.piece.length);break}else c-=s.lf_left+s.piece.lineFeedCnt,g+=s.size_left+s.piece.length,s=s.right}for(s=s.next();s!==E.SENTINEL;){const g=this._buffers[s.piece.bufferIndex].buffer;if(s.piece.lineFeedCnt>0){const h=this.getAccumulatedValue(s,0),m=this.offsetInBuffer(s.piece.bufferIndex,s.piece.start);return l+=g.substring(m,m+h-d),l}else{const h=this.offsetInBuffer(s.piece.bufferIndex,s.piece.start);l+=g.substr(h,s.piece.length)}s=s.next()}return l}computeBufferMetadata(){let c=this.root,d=1,s=0;for(;c!==E.SENTINEL;)d+=c.lf_left+c.piece.lineFeedCnt,s+=c.size_left+c.piece.length,c=c.right;this._lineCnt=d,this._length=s,this._searchCache.validate(this._length)}getIndexOf(c,d){const s=c.piece,l=this.positionInBuffer(c,d),o=l.line-s.start.line;if(this.offsetInBuffer(s.bufferIndex,s.end)-this.offsetInBuffer(s.bufferIndex,s.start)===d){const g=this.getLineFeedCnt(c.piece.bufferIndex,s.start,l);if(g!==o)return{index:g,remainder:0}}return{index:o,remainder:l.column}}getAccumulatedValue(c,d){if(d<0)return 0;const s=c.piece,l=this._buffers[s.bufferIndex].lineStarts,o=s.start.line+d+1;return o>s.end.line?l[s.end.line]+s.end.column-l[s.start.line]-s.start.column:l[o]-l[s.start.line]-s.start.column}deleteNodeTail(c,d){const s=c.piece,l=s.lineFeedCnt,o=this.offsetInBuffer(s.bufferIndex,s.end),g=d,h=this.offsetInBuffer(s.bufferIndex,g),m=this.getLineFeedCnt(s.bufferIndex,s.start,g),C=m-l,w=h-o,D=s.length+w;c.piece=new i(s.bufferIndex,s.start,g,m,D),(0,E.updateTreeMetadata)(this,c,w,C)}deleteNodeHead(c,d){const s=c.piece,l=s.lineFeedCnt,o=this.offsetInBuffer(s.bufferIndex,s.start),g=d,h=this.getLineFeedCnt(s.bufferIndex,g,s.end),m=this.offsetInBuffer(s.bufferIndex,g),C=h-l,w=o-m,D=s.length+w;c.piece=new i(s.bufferIndex,g,s.end,h,D),(0,E.updateTreeMetadata)(this,c,w,C)}shrinkNode(c,d,s){const l=c.piece,o=l.start,g=l.end,h=l.length,m=l.lineFeedCnt,C=d,w=this.getLineFeedCnt(l.bufferIndex,l.start,C),D=this.offsetInBuffer(l.bufferIndex,d)-this.offsetInBuffer(l.bufferIndex,o);c.piece=new i(l.bufferIndex,l.start,C,w,D),(0,E.updateTreeMetadata)(this,c,D-h,w-m);const I=new i(l.bufferIndex,s,g,this.getLineFeedCnt(l.bufferIndex,s,g),this.offsetInBuffer(l.bufferIndex,g)-this.offsetInBuffer(l.bufferIndex,s)),T=this.rbInsertRight(c,I);this.validateCRLFWithPrevNode(T)}appendToNode(c,d){this.adjustCarriageReturnFromNext(d,c)&&(d+=`\n`);const s=this.shouldCheckCRLF()&&this.startWithLF(d)&&this.endWithCR(c),l=this._buffers[0].buffer.length;this._buffers[0].buffer+=d;const o=b(d,!1);for(let T=0;T<o.length;T++)o[T]+=l;if(s){const T=this._buffers[0].lineStarts[this._buffers[0].lineStarts.length-2];this._buffers[0].lineStarts.pop(),this._lastChangeBufferPos={line:this._lastChangeBufferPos.line-1,column:l-T}}this._buffers[0].lineStarts=this._buffers[0].lineStarts.concat(o.slice(1));const g=this._buffers[0].lineStarts.length-1,h=this._buffers[0].buffer.length-this._buffers[0].lineStarts[g],m={line:g,column:h},C=c.piece.length+d.length,w=c.piece.lineFeedCnt,D=this.getLineFeedCnt(0,c.piece.start,m),I=D-w;c.piece=new i(c.piece.bufferIndex,c.piece.start,m,D,C),this._lastChangeBufferPos=m,(0,E.updateTreeMetadata)(this,c,d.length,I)}nodeAt(c){let d=this.root;const s=this._searchCache.get(c);if(s)return{node:s.node,nodeStartOffset:s.nodeStartOffset,remainder:c-s.nodeStartOffset};let l=0;for(;d!==E.SENTINEL;)if(d.size_left>c)d=d.left;else if(d.size_left+d.piece.length>=c){l+=d.size_left;const o={node:d,remainder:c-d.size_left,nodeStartOffset:l};return this._searchCache.set(o),o}else c-=d.size_left+d.piece.length,l+=d.size_left+d.piece.length,d=d.right;return null}nodeAt2(c,d){let s=this.root,l=0;for(;s!==E.SENTINEL;)if(s.left!==E.SENTINEL&&s.lf_left>=c-1)s=s.left;else if(s.lf_left+s.piece.lineFeedCnt>c-1){const o=this.getAccumulatedValue(s,c-s.lf_left-2),g=this.getAccumulatedValue(s,c-s.lf_left-1);return l+=s.size_left,{node:s,remainder:Math.min(o+d-1,g),nodeStartOffset:l}}else if(s.lf_left+s.piece.lineFeedCnt===c-1){const o=this.getAccumulatedValue(s,c-s.lf_left-2);if(o+d-1<=s.piece.length)return{node:s,remainder:o+d-1,nodeStartOffset:l};d-=s.piece.length-o;break}else c-=s.lf_left+s.piece.lineFeedCnt,l+=s.size_left+s.piece.length,s=s.right;for(s=s.next();s!==E.SENTINEL;){if(s.piece.lineFeedCnt>0){const o=this.getAccumulatedValue(s,0),g=this.offsetOfNode(s);return{node:s,remainder:Math.min(d-1,o),nodeStartOffset:g}}else if(s.piece.length>=d-1){const o=this.offsetOfNode(s);return{node:s,remainder:d-1,nodeStartOffset:o}}else d-=s.piece.length;s=s.next()}return null}nodeCharCodeAt(c,d){if(c.piece.lineFeedCnt<1)return-1;const s=this._buffers[c.piece.bufferIndex],l=this.offsetInBuffer(c.piece.bufferIndex,c.piece.start)+d;return s.buffer.charCodeAt(l)}offsetOfNode(c){if(!c)return 0;let d=c.size_left;for(;c!==this.root;)c.parent.right===c&&(d+=c.parent.size_left+c.parent.piece.length),c=c.parent;return d}shouldCheckCRLF(){return!(this._EOLNormalized&&this._EOL===`\n`)}startWithLF(c){if(typeof c==\"string\")return c.charCodeAt(0)===10;if(c===E.SENTINEL||c.piece.lineFeedCnt===0)return!1;const d=c.piece,s=this._buffers[d.bufferIndex].lineStarts,l=d.start.line,o=s[l]+d.start.column;return l===s.length-1||s[l+1]>o+1?!1:this._buffers[d.bufferIndex].buffer.charCodeAt(o)===10}endWithCR(c){return typeof c==\"string\"?c.charCodeAt(c.length-1)===13:c===E.SENTINEL||c.piece.lineFeedCnt===0?!1:this.nodeCharCodeAt(c,c.piece.length-1)===13}validateCRLFWithPrevNode(c){if(this.shouldCheckCRLF()&&this.startWithLF(c)){const d=c.prev();this.endWithCR(d)&&this.fixCRLF(d,c)}}validateCRLFWithNextNode(c){if(this.shouldCheckCRLF()&&this.endWithCR(c)){const d=c.next();this.startWithLF(d)&&this.fixCRLF(c,d)}}fixCRLF(c,d){const s=[],l=this._buffers[c.piece.bufferIndex].lineStarts;let o;c.piece.end.column===0?o={line:c.piece.end.line-1,column:l[c.piece.end.line]-l[c.piece.end.line-1]-1}:o={line:c.piece.end.line,column:c.piece.end.column-1};const g=c.piece.length-1,h=c.piece.lineFeedCnt-1;c.piece=new i(c.piece.bufferIndex,c.piece.start,o,h,g),(0,E.updateTreeMetadata)(this,c,-1,-1),c.piece.length===0&&s.push(c);const m={line:d.piece.start.line+1,column:0},C=d.piece.length-1,w=this.getLineFeedCnt(d.piece.bufferIndex,m,d.piece.end);d.piece=new i(d.piece.bufferIndex,m,d.piece.end,w,C),(0,E.updateTreeMetadata)(this,d,-1,-1),d.piece.length===0&&s.push(d);const D=this.createNewPieces(`\\r\n`);this.rbInsertRight(c,D[0]);for(let I=0;I<s.length;I++)(0,E.rbDelete)(this,s[I])}adjustCarriageReturnFromNext(c,d){if(this.shouldCheckCRLF()&&this.endWithCR(c)){const s=d.next();if(this.startWithLF(s)){if(c+=`\n`,s.piece.length===1)(0,E.rbDelete)(this,s);else{const l=s.piece,o={line:l.start.line+1,column:0},g=l.length-1,h=this.getLineFeedCnt(l.bufferIndex,o,l.end);s.piece=new i(l.bufferIndex,o,l.end,h,g),(0,E.updateTreeMetadata)(this,s,-1,-1)}return!0}}return!1}iterate(c,d){if(c===E.SENTINEL)return d(E.SENTINEL);const s=this.iterate(c.left,d);return s&&d(c)&&this.iterate(c.right,d)}getNodeContent(c){if(c===E.SENTINEL)return\"\";const d=this._buffers[c.piece.bufferIndex],s=c.piece,l=this.offsetInBuffer(s.bufferIndex,s.start),o=this.offsetInBuffer(s.bufferIndex,s.end);return d.buffer.substring(l,o)}getPieceContent(c){const d=this._buffers[c.bufferIndex],s=this.offsetInBuffer(c.bufferIndex,c.start),l=this.offsetInBuffer(c.bufferIndex,c.end);return d.buffer.substring(s,l)}rbInsertRight(c,d){const s=new E.TreeNode(d,1);if(s.left=E.SENTINEL,s.right=E.SENTINEL,s.parent=E.SENTINEL,s.size_left=0,s.lf_left=0,this.root===E.SENTINEL)this.root=s,s.color=0;else if(c.right===E.SENTINEL)c.right=s,s.parent=c;else{const o=(0,E.leftest)(c.right);o.left=s,s.parent=o}return(0,E.fixInsert)(this,s),s}rbInsertLeft(c,d){const s=new E.TreeNode(d,1);if(s.left=E.SENTINEL,s.right=E.SENTINEL,s.parent=E.SENTINEL,s.size_left=0,s.lf_left=0,this.root===E.SENTINEL)this.root=s,s.color=0;else if(c.left===E.SENTINEL)c.left=s,s.parent=c;else{const l=(0,E.righttest)(c.left);l.right=s,s.parent=l}return(0,E.fixInsert)(this,s),s}}e.PieceTreeBase=u}),define(se[210],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.computeIndentLevel=void 0;function L(k,y){let E=0,S=0;const p=k.length;for(;S<p;){const _=k.charCodeAt(S);if(_===32)E++;else if(_===9)E=E-E%y+y;else break;S++}return S===p?-1:E}e.computeIndentLevel=L}),define(se[294],oe([1,0,90,10,41]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OutputPosition=e.InjectedText=e.ModelLineProjectionData=void 0;class E{constructor(a,i,n,t,r){this.injectionOffsets=a,this.injectionOptions=i,this.breakOffsets=n,this.breakOffsetsVisibleColumn=t,this.wrappedTextIndentLength=r}getOutputLineCount(){return this.breakOffsets.length}getMinOutputOffset(a){return a>0?this.wrappedTextIndentLength:0}getLineLength(a){const i=a>0?this.breakOffsets[a-1]:0;let t=this.breakOffsets[a]-i;return a>0&&(t+=this.wrappedTextIndentLength),t}getMaxOutputOffset(a){return this.getLineLength(a)}translateToInputOffset(a,i){a>0&&(i=Math.max(0,i-this.wrappedTextIndentLength));let t=a===0?i:this.breakOffsets[a-1]+i;if(this.injectionOffsets!==null)for(let r=0;r<this.injectionOffsets.length&&t>this.injectionOffsets[r];r++)t<this.injectionOffsets[r]+this.injectionOptions[r].content.length?t=this.injectionOffsets[r]:t-=this.injectionOptions[r].content.length;return t}translateToOutputPosition(a,i=2){let n=a;if(this.injectionOffsets!==null)for(let t=0;t<this.injectionOffsets.length&&!(a<this.injectionOffsets[t]||i!==1&&a===this.injectionOffsets[t]);t++)n+=this.injectionOptions[t].content.length;return this.offsetInInputWithInjectionsToOutputPosition(n,i)}offsetInInputWithInjectionsToOutputPosition(a,i=2){let n=0,t=this.breakOffsets.length-1,r=0,u=0;for(;n<=t;){r=n+(t-n)/2|0;const c=this.breakOffsets[r];if(u=r>0?this.breakOffsets[r-1]:0,i===0)if(a<=u)t=r-1;else if(a>c)n=r+1;else break;else if(a<u)t=r-1;else if(a>=c)n=r+1;else break}let f=a-u;return r>0&&(f+=this.wrappedTextIndentLength),new v(r,f)}normalizeOutputPosition(a,i,n){if(this.injectionOffsets!==null){const t=this.outputPositionToOffsetInInputWithInjections(a,i),r=this.normalizeOffsetInInputWithInjectionsAroundInjections(t,n);if(r!==t)return this.offsetInInputWithInjectionsToOutputPosition(r,n)}if(n===0){if(a>0&&i===this.getMinOutputOffset(a))return new v(a-1,this.getMaxOutputOffset(a-1))}else if(n===1){const t=this.getOutputLineCount()-1;if(a<t&&i===this.getMaxOutputOffset(a))return new v(a+1,this.getMinOutputOffset(a+1))}return new v(a,i)}outputPositionToOffsetInInputWithInjections(a,i){return a>0&&(i=Math.max(0,i-this.wrappedTextIndentLength)),(a>0?this.breakOffsets[a-1]:0)+i}normalizeOffsetInInputWithInjectionsAroundInjections(a,i){const n=this.getInjectedTextAtOffset(a);if(!n)return a;if(i===2){if(a===n.offsetInInputWithInjections+n.length&&S(this.injectionOptions[n.injectedTextIndex].cursorStops))return n.offsetInInputWithInjections+n.length;{let t=n.offsetInInputWithInjections;if(p(this.injectionOptions[n.injectedTextIndex].cursorStops))return t;let r=n.injectedTextIndex-1;for(;r>=0&&this.injectionOffsets[r]===this.injectionOffsets[n.injectedTextIndex]&&!(S(this.injectionOptions[r].cursorStops)||(t-=this.injectionOptions[r].content.length,p(this.injectionOptions[r].cursorStops)));)r--;return t}}else if(i===1||i===4){let t=n.offsetInInputWithInjections+n.length,r=n.injectedTextIndex;for(;r+1<this.injectionOffsets.length&&this.injectionOffsets[r+1]===this.injectionOffsets[r];)t+=this.injectionOptions[r+1].content.length,r++;return t}else if(i===0||i===3){let t=n.offsetInInputWithInjections,r=n.injectedTextIndex;for(;r-1>=0&&this.injectionOffsets[r-1]===this.injectionOffsets[r];)t-=this.injectionOptions[r-1].content.length,r--;return t}(0,L.assertNever)(i)}getInjectedText(a,i){const n=this.outputPositionToOffsetInInputWithInjections(a,i),t=this.getInjectedTextAtOffset(n);return t?{options:this.injectionOptions[t.injectedTextIndex]}:null}getInjectedTextAtOffset(a){const i=this.injectionOffsets,n=this.injectionOptions;if(i!==null){let t=0;for(let r=0;r<i.length;r++){const u=n[r].content.length,f=i[r]+t,c=i[r]+t+u;if(f>a)break;if(a<=c)return{injectedTextIndex:r,offsetInInputWithInjections:f,length:u};t+=u}}}}e.ModelLineProjectionData=E;function S(b){return b==null?!0:b===y.InjectedTextCursorStops.Right||b===y.InjectedTextCursorStops.Both}function p(b){return b==null?!0:b===y.InjectedTextCursorStops.Left||b===y.InjectedTextCursorStops.Both}class _{constructor(a){this.options=a}}e.InjectedText=_;class v{constructor(a,i){this.outputLineIndex=a,this.outputOffset=i}toString(){return`${this.outputLineIndex}:${this.outputOffset}`}toPosition(a){return new k.Position(a+this.outputLineIndex,this.outputOffset+1)}}e.OutputPosition=v}),define(se[295],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DraggedTreeItemsIdentifier=e.TreeViewsDnDService=void 0;class L{constructor(){this._dragOperations=new Map}removeDragOperationTransfer(E){if(E&&this._dragOperations.has(E)){const S=this._dragOperations.get(E);return this._dragOperations.delete(E),S}}}e.TreeViewsDnDService=L;class k{constructor(E){this.identifier=E}}e.DraggedTreeItemsIdentifier=k}),define(se[296],oe([1,0,5,184,11,90,151]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UnicodeTextModelHighlighter=void 0;class p{static computeUnicodeHighlights(i,n,t){const r=t?t.startLineNumber:1,u=t?t.endLineNumber:i.getLineCount(),f=new v(n),c=f.getCandidateCodePoints();let d;c===\"allNonBasicAscii\"?d=new RegExp(\"[^\\\\t\\\\n\\\\r\\\\x20-\\\\x7E]\",\"g\"):d=new RegExp(`${_(Array.from(c))}`,\"g\");const s=new k.Searcher(null,d),l=[];let o=!1,g,h=0,m=0,C=0;e:for(let w=r,D=u;w<=D;w++){const I=i.getLineContent(w),T=I.length;s.reset(0);do if(g=s.next(I),g){let A=g.index,P=g.index+g[0].length;if(A>0){const x=I.charCodeAt(A-1);y.isHighSurrogate(x)&&A--}if(P+1<T){const x=I.charCodeAt(P-1);y.isHighSurrogate(x)&&P++}const N=I.substring(A,P);let M=(0,S.getWordAtText)(A+1,S.DEFAULT_WORD_REGEXP,I,0);M&&M.endColumn<=A+1&&(M=null);const R=f.shouldHighlightNonBasicASCII(N,M?M.word:null);if(R!==0){R===3?h++:R===2?m++:R===1?C++:(0,E.assertNever)(R);const x=1e3;if(l.length>=x){o=!0;break e}l.push(new L.Range(w,A+1,w,P+1))}}while(g)}return{ranges:l,hasMore:o,ambiguousCharacterCount:h,invisibleCharacterCount:m,nonBasicAsciiCharacterCount:C}}static computeUnicodeHighlightReason(i,n){const t=new v(n);switch(t.shouldHighlightNonBasicASCII(i,null)){case 0:return null;case 2:return{kind:1};case 3:{const u=i.codePointAt(0),f=t.ambiguousCharacters.getPrimaryConfusable(u),c=y.AmbiguousCharacters.getLocales().filter(d=>!y.AmbiguousCharacters.getInstance(new Set([...n.allowedLocales,d])).isAmbiguous(u));return{kind:0,confusableWith:String.fromCodePoint(f),notAmbiguousInLocales:c}}case 1:return{kind:2}}}}e.UnicodeTextModelHighlighter=p;function _(a,i){return`[${y.escapeRegExpCharacters(a.map(t=>String.fromCodePoint(t)).join(\"\"))}]`}class v{constructor(i){this.options=i,this.allowedCodePoints=new Set(i.allowedCodePoints),this.ambiguousCharacters=y.AmbiguousCharacters.getInstance(new Set(i.allowedLocales))}getCandidateCodePoints(){if(this.options.nonBasicASCII)return\"allNonBasicAscii\";const i=new Set;if(this.options.invisibleCharacters)for(const n of y.InvisibleCharacters.codePoints)b(String.fromCodePoint(n))||i.add(n);if(this.options.ambiguousCharacters)for(const n of this.ambiguousCharacters.getConfusableCodePoints())i.add(n);for(const n of this.allowedCodePoints)i.delete(n);return i}shouldHighlightNonBasicASCII(i,n){const t=i.codePointAt(0);if(this.allowedCodePoints.has(t))return 0;if(this.options.nonBasicASCII)return 1;let r=!1,u=!1;if(n)for(const f of n){const c=f.codePointAt(0),d=y.isBasicASCII(f);r=r||d,!d&&!this.ambiguousCharacters.isAmbiguous(c)&&!y.InvisibleCharacters.isInvisibleCharacter(c)&&(u=!0)}return!r&&u?0:this.options.invisibleCharacters&&!b(i)&&y.InvisibleCharacters.isInvisibleCharacter(t)?2:this.options.ambiguousCharacters&&this.ambiguousCharacters.isAmbiguous(t)?3:0}}function b(a){return a===\" \"||a===`\n`||a===\"\t\"}}),define(se[211],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.WrappingIndent=e.TrackedRangeStickiness=e.TextEditorCursorStyle=e.TextEditorCursorBlinkingStyle=e.SymbolTag=e.SymbolKind=e.SignatureHelpTriggerKind=e.ShowLightbulbIconMode=e.SelectionDirection=e.ScrollbarVisibility=e.ScrollType=e.RenderMinimap=e.RenderLineNumbersType=e.PositionAffinity=e.OverviewRulerLane=e.OverlayWidgetPositionPreference=e.MouseTargetType=e.MinimapPosition=e.MarkerTag=e.MarkerSeverity=e.KeyCode=e.InlineCompletionTriggerKind=e.InlayHintKind=e.InjectedTextCursorStops=e.IndentAction=e.GlyphMarginLane=e.EndOfLineSequence=e.EndOfLinePreference=e.EditorOption=e.EditorAutoIndentStrategy=e.DocumentHighlightKind=e.DefaultEndOfLine=e.CursorChangeReason=e.ContentWidgetPositionPreference=e.CompletionTriggerKind=e.CompletionItemTag=e.CompletionItemKind=e.CompletionItemInsertTextRule=e.CodeActionTriggerType=e.AccessibilitySupport=void 0;var L;(function(F){F[F.Unknown=0]=\"Unknown\",F[F.Disabled=1]=\"Disabled\",F[F.Enabled=2]=\"Enabled\"})(L||(e.AccessibilitySupport=L={}));var k;(function(F){F[F.Invoke=1]=\"Invoke\",F[F.Auto=2]=\"Auto\"})(k||(e.CodeActionTriggerType=k={}));var y;(function(F){F[F.None=0]=\"None\",F[F.KeepWhitespace=1]=\"KeepWhitespace\",F[F.InsertAsSnippet=4]=\"InsertAsSnippet\"})(y||(e.CompletionItemInsertTextRule=y={}));var E;(function(F){F[F.Method=0]=\"Method\",F[F.Function=1]=\"Function\",F[F.Constructor=2]=\"Constructor\",F[F.Field=3]=\"Field\",F[F.Variable=4]=\"Variable\",F[F.Class=5]=\"Class\",F[F.Struct=6]=\"Struct\",F[F.Interface=7]=\"Interface\",F[F.Module=8]=\"Module\",F[F.Property=9]=\"Property\",F[F.Event=10]=\"Event\",F[F.Operator=11]=\"Operator\",F[F.Unit=12]=\"Unit\",F[F.Value=13]=\"Value\",F[F.Constant=14]=\"Constant\",F[F.Enum=15]=\"Enum\",F[F.EnumMember=16]=\"EnumMember\",F[F.Keyword=17]=\"Keyword\",F[F.Text=18]=\"Text\",F[F.Color=19]=\"Color\",F[F.File=20]=\"File\",F[F.Reference=21]=\"Reference\",F[F.Customcolor=22]=\"Customcolor\",F[F.Folder=23]=\"Folder\",F[F.TypeParameter=24]=\"TypeParameter\",F[F.User=25]=\"User\",F[F.Issue=26]=\"Issue\",F[F.Snippet=27]=\"Snippet\"})(E||(e.CompletionItemKind=E={}));var S;(function(F){F[F.Deprecated=1]=\"Deprecated\"})(S||(e.CompletionItemTag=S={}));var p;(function(F){F[F.Invoke=0]=\"Invoke\",F[F.TriggerCharacter=1]=\"TriggerCharacter\",F[F.TriggerForIncompleteCompletions=2]=\"TriggerForIncompleteCompletions\"})(p||(e.CompletionTriggerKind=p={}));var _;(function(F){F[F.EXACT=0]=\"EXACT\",F[F.ABOVE=1]=\"ABOVE\",F[F.BELOW=2]=\"BELOW\"})(_||(e.ContentWidgetPositionPreference=_={}));var v;(function(F){F[F.NotSet=0]=\"NotSet\",F[F.ContentFlush=1]=\"ContentFlush\",F[F.RecoverFromMarkers=2]=\"RecoverFromMarkers\",F[F.Explicit=3]=\"Explicit\",F[F.Paste=4]=\"Paste\",F[F.Undo=5]=\"Undo\",F[F.Redo=6]=\"Redo\"})(v||(e.CursorChangeReason=v={}));var b;(function(F){F[F.LF=1]=\"LF\",F[F.CRLF=2]=\"CRLF\"})(b||(e.DefaultEndOfLine=b={}));var a;(function(F){F[F.Text=0]=\"Text\",F[F.Read=1]=\"Read\",F[F.Write=2]=\"Write\"})(a||(e.DocumentHighlightKind=a={}));var i;(function(F){F[F.None=0]=\"None\",F[F.Keep=1]=\"Keep\",F[F.Brackets=2]=\"Brackets\",F[F.Advanced=3]=\"Advanced\",F[F.Full=4]=\"Full\"})(i||(e.EditorAutoIndentStrategy=i={}));var n;(function(F){F[F.acceptSuggestionOnCommitCharacter=0]=\"acceptSuggestionOnCommitCharacter\",F[F.acceptSuggestionOnEnter=1]=\"acceptSuggestionOnEnter\",F[F.accessibilitySupport=2]=\"accessibilitySupport\",F[F.accessibilityPageSize=3]=\"accessibilityPageSize\",F[F.ariaLabel=4]=\"ariaLabel\",F[F.ariaRequired=5]=\"ariaRequired\",F[F.autoClosingBrackets=6]=\"autoClosingBrackets\",F[F.autoClosingComments=7]=\"autoClosingComments\",F[F.screenReaderAnnounceInlineSuggestion=8]=\"screenReaderAnnounceInlineSuggestion\",F[F.autoClosingDelete=9]=\"autoClosingDelete\",F[F.autoClosingOvertype=10]=\"autoClosingOvertype\",F[F.autoClosingQuotes=11]=\"autoClosingQuotes\",F[F.autoIndent=12]=\"autoIndent\",F[F.automaticLayout=13]=\"automaticLayout\",F[F.autoSurround=14]=\"autoSurround\",F[F.bracketPairColorization=15]=\"bracketPairColorization\",F[F.guides=16]=\"guides\",F[F.codeLens=17]=\"codeLens\",F[F.codeLensFontFamily=18]=\"codeLensFontFamily\",F[F.codeLensFontSize=19]=\"codeLensFontSize\",F[F.colorDecorators=20]=\"colorDecorators\",F[F.colorDecoratorsLimit=21]=\"colorDecoratorsLimit\",F[F.columnSelection=22]=\"columnSelection\",F[F.comments=23]=\"comments\",F[F.contextmenu=24]=\"contextmenu\",F[F.copyWithSyntaxHighlighting=25]=\"copyWithSyntaxHighlighting\",F[F.cursorBlinking=26]=\"cursorBlinking\",F[F.cursorSmoothCaretAnimation=27]=\"cursorSmoothCaretAnimation\",F[F.cursorStyle=28]=\"cursorStyle\",F[F.cursorSurroundingLines=29]=\"cursorSurroundingLines\",F[F.cursorSurroundingLinesStyle=30]=\"cursorSurroundingLinesStyle\",F[F.cursorWidth=31]=\"cursorWidth\",F[F.disableLayerHinting=32]=\"disableLayerHinting\",F[F.disableMonospaceOptimizations=33]=\"disableMonospaceOptimizations\",F[F.domReadOnly=34]=\"domReadOnly\",F[F.dragAndDrop=35]=\"dragAndDrop\",F[F.dropIntoEditor=36]=\"dropIntoEditor\",F[F.emptySelectionClipboard=37]=\"emptySelectionClipboard\",F[F.experimentalWhitespaceRendering=38]=\"experimentalWhitespaceRendering\",F[F.extraEditorClassName=39]=\"extraEditorClassName\",F[F.fastScrollSensitivity=40]=\"fastScrollSensitivity\",F[F.find=41]=\"find\",F[F.fixedOverflowWidgets=42]=\"fixedOverflowWidgets\",F[F.folding=43]=\"folding\",F[F.foldingStrategy=44]=\"foldingStrategy\",F[F.foldingHighlight=45]=\"foldingHighlight\",F[F.foldingImportsByDefault=46]=\"foldingImportsByDefault\",F[F.foldingMaximumRegions=47]=\"foldingMaximumRegions\",F[F.unfoldOnClickAfterEndOfLine=48]=\"unfoldOnClickAfterEndOfLine\",F[F.fontFamily=49]=\"fontFamily\",F[F.fontInfo=50]=\"fontInfo\",F[F.fontLigatures=51]=\"fontLigatures\",F[F.fontSize=52]=\"fontSize\",F[F.fontWeight=53]=\"fontWeight\",F[F.fontVariations=54]=\"fontVariations\",F[F.formatOnPaste=55]=\"formatOnPaste\",F[F.formatOnType=56]=\"formatOnType\",F[F.glyphMargin=57]=\"glyphMargin\",F[F.gotoLocation=58]=\"gotoLocation\",F[F.hideCursorInOverviewRuler=59]=\"hideCursorInOverviewRuler\",F[F.hover=60]=\"hover\",F[F.inDiffEditor=61]=\"inDiffEditor\",F[F.inlineSuggest=62]=\"inlineSuggest\",F[F.letterSpacing=63]=\"letterSpacing\",F[F.lightbulb=64]=\"lightbulb\",F[F.lineDecorationsWidth=65]=\"lineDecorationsWidth\",F[F.lineHeight=66]=\"lineHeight\",F[F.lineNumbers=67]=\"lineNumbers\",F[F.lineNumbersMinChars=68]=\"lineNumbersMinChars\",F[F.linkedEditing=69]=\"linkedEditing\",F[F.links=70]=\"links\",F[F.matchBrackets=71]=\"matchBrackets\",F[F.minimap=72]=\"minimap\",F[F.mouseStyle=73]=\"mouseStyle\",F[F.mouseWheelScrollSensitivity=74]=\"mouseWheelScrollSensitivity\",F[F.mouseWheelZoom=75]=\"mouseWheelZoom\",F[F.multiCursorMergeOverlapping=76]=\"multiCursorMergeOverlapping\",F[F.multiCursorModifier=77]=\"multiCursorModifier\",F[F.multiCursorPaste=78]=\"multiCursorPaste\",F[F.multiCursorLimit=79]=\"multiCursorLimit\",F[F.occurrencesHighlight=80]=\"occurrencesHighlight\",F[F.overviewRulerBorder=81]=\"overviewRulerBorder\",F[F.overviewRulerLanes=82]=\"overviewRulerLanes\",F[F.padding=83]=\"padding\",F[F.pasteAs=84]=\"pasteAs\",F[F.parameterHints=85]=\"parameterHints\",F[F.peekWidgetDefaultFocus=86]=\"peekWidgetDefaultFocus\",F[F.definitionLinkOpensInPeek=87]=\"definitionLinkOpensInPeek\",F[F.quickSuggestions=88]=\"quickSuggestions\",F[F.quickSuggestionsDelay=89]=\"quickSuggestionsDelay\",F[F.readOnly=90]=\"readOnly\",F[F.readOnlyMessage=91]=\"readOnlyMessage\",F[F.renameOnType=92]=\"renameOnType\",F[F.renderControlCharacters=93]=\"renderControlCharacters\",F[F.renderFinalNewline=94]=\"renderFinalNewline\",F[F.renderLineHighlight=95]=\"renderLineHighlight\",F[F.renderLineHighlightOnlyWhenFocus=96]=\"renderLineHighlightOnlyWhenFocus\",F[F.renderValidationDecorations=97]=\"renderValidationDecorations\",F[F.renderWhitespace=98]=\"renderWhitespace\",F[F.revealHorizontalRightPadding=99]=\"revealHorizontalRightPadding\",F[F.roundedSelection=100]=\"roundedSelection\",F[F.rulers=101]=\"rulers\",F[F.scrollbar=102]=\"scrollbar\",F[F.scrollBeyondLastColumn=103]=\"scrollBeyondLastColumn\",F[F.scrollBeyondLastLine=104]=\"scrollBeyondLastLine\",F[F.scrollPredominantAxis=105]=\"scrollPredominantAxis\",F[F.selectionClipboard=106]=\"selectionClipboard\",F[F.selectionHighlight=107]=\"selectionHighlight\",F[F.selectOnLineNumbers=108]=\"selectOnLineNumbers\",F[F.showFoldingControls=109]=\"showFoldingControls\",F[F.showUnused=110]=\"showUnused\",F[F.snippetSuggestions=111]=\"snippetSuggestions\",F[F.smartSelect=112]=\"smartSelect\",F[F.smoothScrolling=113]=\"smoothScrolling\",F[F.stickyScroll=114]=\"stickyScroll\",F[F.stickyTabStops=115]=\"stickyTabStops\",F[F.stopRenderingLineAfter=116]=\"stopRenderingLineAfter\",F[F.suggest=117]=\"suggest\",F[F.suggestFontSize=118]=\"suggestFontSize\",F[F.suggestLineHeight=119]=\"suggestLineHeight\",F[F.suggestOnTriggerCharacters=120]=\"suggestOnTriggerCharacters\",F[F.suggestSelection=121]=\"suggestSelection\",F[F.tabCompletion=122]=\"tabCompletion\",F[F.tabIndex=123]=\"tabIndex\",F[F.unicodeHighlighting=124]=\"unicodeHighlighting\",F[F.unusualLineTerminators=125]=\"unusualLineTerminators\",F[F.useShadowDOM=126]=\"useShadowDOM\",F[F.useTabStops=127]=\"useTabStops\",F[F.wordBreak=128]=\"wordBreak\",F[F.wordSeparators=129]=\"wordSeparators\",F[F.wordWrap=130]=\"wordWrap\",F[F.wordWrapBreakAfterCharacters=131]=\"wordWrapBreakAfterCharacters\",F[F.wordWrapBreakBeforeCharacters=132]=\"wordWrapBreakBeforeCharacters\",F[F.wordWrapColumn=133]=\"wordWrapColumn\",F[F.wordWrapOverride1=134]=\"wordWrapOverride1\",F[F.wordWrapOverride2=135]=\"wordWrapOverride2\",F[F.wrappingIndent=136]=\"wrappingIndent\",F[F.wrappingStrategy=137]=\"wrappingStrategy\",F[F.showDeprecated=138]=\"showDeprecated\",F[F.inlayHints=139]=\"inlayHints\",F[F.editorClassName=140]=\"editorClassName\",F[F.pixelRatio=141]=\"pixelRatio\",F[F.tabFocusMode=142]=\"tabFocusMode\",F[F.layoutInfo=143]=\"layoutInfo\",F[F.wrappingInfo=144]=\"wrappingInfo\",F[F.defaultColorDecorators=145]=\"defaultColorDecorators\",F[F.colorDecoratorsActivatedOn=146]=\"colorDecoratorsActivatedOn\",F[F.inlineCompletionsAccessibilityVerbose=147]=\"inlineCompletionsAccessibilityVerbose\"})(n||(e.EditorOption=n={}));var t;(function(F){F[F.TextDefined=0]=\"TextDefined\",F[F.LF=1]=\"LF\",F[F.CRLF=2]=\"CRLF\"})(t||(e.EndOfLinePreference=t={}));var r;(function(F){F[F.LF=0]=\"LF\",F[F.CRLF=1]=\"CRLF\"})(r||(e.EndOfLineSequence=r={}));var u;(function(F){F[F.Left=1]=\"Left\",F[F.Center=2]=\"Center\",F[F.Right=3]=\"Right\"})(u||(e.GlyphMarginLane=u={}));var f;(function(F){F[F.None=0]=\"None\",F[F.Indent=1]=\"Indent\",F[F.IndentOutdent=2]=\"IndentOutdent\",F[F.Outdent=3]=\"Outdent\"})(f||(e.IndentAction=f={}));var c;(function(F){F[F.Both=0]=\"Both\",F[F.Right=1]=\"Right\",F[F.Left=2]=\"Left\",F[F.None=3]=\"None\"})(c||(e.InjectedTextCursorStops=c={}));var d;(function(F){F[F.Type=1]=\"Type\",F[F.Parameter=2]=\"Parameter\"})(d||(e.InlayHintKind=d={}));var s;(function(F){F[F.Automatic=0]=\"Automatic\",F[F.Explicit=1]=\"Explicit\"})(s||(e.InlineCompletionTriggerKind=s={}));var l;(function(F){F[F.DependsOnKbLayout=-1]=\"DependsOnKbLayout\",F[F.Unknown=0]=\"Unknown\",F[F.Backspace=1]=\"Backspace\",F[F.Tab=2]=\"Tab\",F[F.Enter=3]=\"Enter\",F[F.Shift=4]=\"Shift\",F[F.Ctrl=5]=\"Ctrl\",F[F.Alt=6]=\"Alt\",F[F.PauseBreak=7]=\"PauseBreak\",F[F.CapsLock=8]=\"CapsLock\",F[F.Escape=9]=\"Escape\",F[F.Space=10]=\"Space\",F[F.PageUp=11]=\"PageUp\",F[F.PageDown=12]=\"PageDown\",F[F.End=13]=\"End\",F[F.Home=14]=\"Home\",F[F.LeftArrow=15]=\"LeftArrow\",F[F.UpArrow=16]=\"UpArrow\",F[F.RightArrow=17]=\"RightArrow\",F[F.DownArrow=18]=\"DownArrow\",F[F.Insert=19]=\"Insert\",F[F.Delete=20]=\"Delete\",F[F.Digit0=21]=\"Digit0\",F[F.Digit1=22]=\"Digit1\",F[F.Digit2=23]=\"Digit2\",F[F.Digit3=24]=\"Digit3\",F[F.Digit4=25]=\"Digit4\",F[F.Digit5=26]=\"Digit5\",F[F.Digit6=27]=\"Digit6\",F[F.Digit7=28]=\"Digit7\",F[F.Digit8=29]=\"Digit8\",F[F.Digit9=30]=\"Digit9\",F[F.KeyA=31]=\"KeyA\",F[F.KeyB=32]=\"KeyB\",F[F.KeyC=33]=\"KeyC\",F[F.KeyD=34]=\"KeyD\",F[F.KeyE=35]=\"KeyE\",F[F.KeyF=36]=\"KeyF\",F[F.KeyG=37]=\"KeyG\",F[F.KeyH=38]=\"KeyH\",F[F.KeyI=39]=\"KeyI\",F[F.KeyJ=40]=\"KeyJ\",F[F.KeyK=41]=\"KeyK\",F[F.KeyL=42]=\"KeyL\",F[F.KeyM=43]=\"KeyM\",F[F.KeyN=44]=\"KeyN\",F[F.KeyO=45]=\"KeyO\",F[F.KeyP=46]=\"KeyP\",F[F.KeyQ=47]=\"KeyQ\",F[F.KeyR=48]=\"KeyR\",F[F.KeyS=49]=\"KeyS\",F[F.KeyT=50]=\"KeyT\",F[F.KeyU=51]=\"KeyU\",F[F.KeyV=52]=\"KeyV\",F[F.KeyW=53]=\"KeyW\",F[F.KeyX=54]=\"KeyX\",F[F.KeyY=55]=\"KeyY\",F[F.KeyZ=56]=\"KeyZ\",F[F.Meta=57]=\"Meta\",F[F.ContextMenu=58]=\"ContextMenu\",F[F.F1=59]=\"F1\",F[F.F2=60]=\"F2\",F[F.F3=61]=\"F3\",F[F.F4=62]=\"F4\",F[F.F5=63]=\"F5\",F[F.F6=64]=\"F6\",F[F.F7=65]=\"F7\",F[F.F8=66]=\"F8\",F[F.F9=67]=\"F9\",F[F.F10=68]=\"F10\",F[F.F11=69]=\"F11\",F[F.F12=70]=\"F12\",F[F.F13=71]=\"F13\",F[F.F14=72]=\"F14\",F[F.F15=73]=\"F15\",F[F.F16=74]=\"F16\",F[F.F17=75]=\"F17\",F[F.F18=76]=\"F18\",F[F.F19=77]=\"F19\",F[F.F20=78]=\"F20\",F[F.F21=79]=\"F21\",F[F.F22=80]=\"F22\",F[F.F23=81]=\"F23\",F[F.F24=82]=\"F24\",F[F.NumLock=83]=\"NumLock\",F[F.ScrollLock=84]=\"ScrollLock\",F[F.Semicolon=85]=\"Semicolon\",F[F.Equal=86]=\"Equal\",F[F.Comma=87]=\"Comma\",F[F.Minus=88]=\"Minus\",F[F.Period=89]=\"Period\",F[F.Slash=90]=\"Slash\",F[F.Backquote=91]=\"Backquote\",F[F.BracketLeft=92]=\"BracketLeft\",F[F.Backslash=93]=\"Backslash\",F[F.BracketRight=94]=\"BracketRight\",F[F.Quote=95]=\"Quote\",F[F.OEM_8=96]=\"OEM_8\",F[F.IntlBackslash=97]=\"IntlBackslash\",F[F.Numpad0=98]=\"Numpad0\",F[F.Numpad1=99]=\"Numpad1\",F[F.Numpad2=100]=\"Numpad2\",F[F.Numpad3=101]=\"Numpad3\",F[F.Numpad4=102]=\"Numpad4\",F[F.Numpad5=103]=\"Numpad5\",F[F.Numpad6=104]=\"Numpad6\",F[F.Numpad7=105]=\"Numpad7\",F[F.Numpad8=106]=\"Numpad8\",F[F.Numpad9=107]=\"Numpad9\",F[F.NumpadMultiply=108]=\"NumpadMultiply\",F[F.NumpadAdd=109]=\"NumpadAdd\",F[F.NUMPAD_SEPARATOR=110]=\"NUMPAD_SEPARATOR\",F[F.NumpadSubtract=111]=\"NumpadSubtract\",F[F.NumpadDecimal=112]=\"NumpadDecimal\",F[F.NumpadDivide=113]=\"NumpadDivide\",F[F.KEY_IN_COMPOSITION=114]=\"KEY_IN_COMPOSITION\",F[F.ABNT_C1=115]=\"ABNT_C1\",F[F.ABNT_C2=116]=\"ABNT_C2\",F[F.AudioVolumeMute=117]=\"AudioVolumeMute\",F[F.AudioVolumeUp=118]=\"AudioVolumeUp\",F[F.AudioVolumeDown=119]=\"AudioVolumeDown\",F[F.BrowserSearch=120]=\"BrowserSearch\",F[F.BrowserHome=121]=\"BrowserHome\",F[F.BrowserBack=122]=\"BrowserBack\",F[F.BrowserForward=123]=\"BrowserForward\",F[F.MediaTrackNext=124]=\"MediaTrackNext\",F[F.MediaTrackPrevious=125]=\"MediaTrackPrevious\",F[F.MediaStop=126]=\"MediaStop\",F[F.MediaPlayPause=127]=\"MediaPlayPause\",F[F.LaunchMediaPlayer=128]=\"LaunchMediaPlayer\",F[F.LaunchMail=129]=\"LaunchMail\",F[F.LaunchApp2=130]=\"LaunchApp2\",F[F.Clear=131]=\"Clear\",F[F.MAX_VALUE=132]=\"MAX_VALUE\"})(l||(e.KeyCode=l={}));var o;(function(F){F[F.Hint=1]=\"Hint\",F[F.Info=2]=\"Info\",F[F.Warning=4]=\"Warning\",F[F.Error=8]=\"Error\"})(o||(e.MarkerSeverity=o={}));var g;(function(F){F[F.Unnecessary=1]=\"Unnecessary\",F[F.Deprecated=2]=\"Deprecated\"})(g||(e.MarkerTag=g={}));var h;(function(F){F[F.Inline=1]=\"Inline\",F[F.Gutter=2]=\"Gutter\"})(h||(e.MinimapPosition=h={}));var m;(function(F){F[F.UNKNOWN=0]=\"UNKNOWN\",F[F.TEXTAREA=1]=\"TEXTAREA\",F[F.GUTTER_GLYPH_MARGIN=2]=\"GUTTER_GLYPH_MARGIN\",F[F.GUTTER_LINE_NUMBERS=3]=\"GUTTER_LINE_NUMBERS\",F[F.GUTTER_LINE_DECORATIONS=4]=\"GUTTER_LINE_DECORATIONS\",F[F.GUTTER_VIEW_ZONE=5]=\"GUTTER_VIEW_ZONE\",F[F.CONTENT_TEXT=6]=\"CONTENT_TEXT\",F[F.CONTENT_EMPTY=7]=\"CONTENT_EMPTY\",F[F.CONTENT_VIEW_ZONE=8]=\"CONTENT_VIEW_ZONE\",F[F.CONTENT_WIDGET=9]=\"CONTENT_WIDGET\",F[F.OVERVIEW_RULER=10]=\"OVERVIEW_RULER\",F[F.SCROLLBAR=11]=\"SCROLLBAR\",F[F.OVERLAY_WIDGET=12]=\"OVERLAY_WIDGET\",F[F.OUTSIDE_EDITOR=13]=\"OUTSIDE_EDITOR\"})(m||(e.MouseTargetType=m={}));var C;(function(F){F[F.TOP_RIGHT_CORNER=0]=\"TOP_RIGHT_CORNER\",F[F.BOTTOM_RIGHT_CORNER=1]=\"BOTTOM_RIGHT_CORNER\",F[F.TOP_CENTER=2]=\"TOP_CENTER\"})(C||(e.OverlayWidgetPositionPreference=C={}));var w;(function(F){F[F.Left=1]=\"Left\",F[F.Center=2]=\"Center\",F[F.Right=4]=\"Right\",F[F.Full=7]=\"Full\"})(w||(e.OverviewRulerLane=w={}));var D;(function(F){F[F.Left=0]=\"Left\",F[F.Right=1]=\"Right\",F[F.None=2]=\"None\",F[F.LeftOfInjectedText=3]=\"LeftOfInjectedText\",F[F.RightOfInjectedText=4]=\"RightOfInjectedText\"})(D||(e.PositionAffinity=D={}));var I;(function(F){F[F.Off=0]=\"Off\",F[F.On=1]=\"On\",F[F.Relative=2]=\"Relative\",F[F.Interval=3]=\"Interval\",F[F.Custom=4]=\"Custom\"})(I||(e.RenderLineNumbersType=I={}));var T;(function(F){F[F.None=0]=\"None\",F[F.Text=1]=\"Text\",F[F.Blocks=2]=\"Blocks\"})(T||(e.RenderMinimap=T={}));var A;(function(F){F[F.Smooth=0]=\"Smooth\",F[F.Immediate=1]=\"Immediate\"})(A||(e.ScrollType=A={}));var P;(function(F){F[F.Auto=1]=\"Auto\",F[F.Hidden=2]=\"Hidden\",F[F.Visible=3]=\"Visible\"})(P||(e.ScrollbarVisibility=P={}));var N;(function(F){F[F.LTR=0]=\"LTR\",F[F.RTL=1]=\"RTL\"})(N||(e.SelectionDirection=N={}));var M;(function(F){F.Off=\"off\",F.OnCode=\"onCode\",F.On=\"on\"})(M||(e.ShowLightbulbIconMode=M={}));var R;(function(F){F[F.Invoke=1]=\"Invoke\",F[F.TriggerCharacter=2]=\"TriggerCharacter\",F[F.ContentChange=3]=\"ContentChange\"})(R||(e.SignatureHelpTriggerKind=R={}));var x;(function(F){F[F.File=0]=\"File\",F[F.Module=1]=\"Module\",F[F.Namespace=2]=\"Namespace\",F[F.Package=3]=\"Package\",F[F.Class=4]=\"Class\",F[F.Method=5]=\"Method\",F[F.Property=6]=\"Property\",F[F.Field=7]=\"Field\",F[F.Constructor=8]=\"Constructor\",F[F.Enum=9]=\"Enum\",F[F.Interface=10]=\"Interface\",F[F.Function=11]=\"Function\",F[F.Variable=12]=\"Variable\",F[F.Constant=13]=\"Constant\",F[F.String=14]=\"String\",F[F.Number=15]=\"Number\",F[F.Boolean=16]=\"Boolean\",F[F.Array=17]=\"Array\",F[F.Object=18]=\"Object\",F[F.Key=19]=\"Key\",F[F.Null=20]=\"Null\",F[F.EnumMember=21]=\"EnumMember\",F[F.Struct=22]=\"Struct\",F[F.Event=23]=\"Event\",F[F.Operator=24]=\"Operator\",F[F.TypeParameter=25]=\"TypeParameter\"})(x||(e.SymbolKind=x={}));var O;(function(F){F[F.Deprecated=1]=\"Deprecated\"})(O||(e.SymbolTag=O={}));var B;(function(F){F[F.Hidden=0]=\"Hidden\",F[F.Blink=1]=\"Blink\",F[F.Smooth=2]=\"Smooth\",F[F.Phase=3]=\"Phase\",F[F.Expand=4]=\"Expand\",F[F.Solid=5]=\"Solid\"})(B||(e.TextEditorCursorBlinkingStyle=B={}));var W;(function(F){F[F.Line=1]=\"Line\",F[F.Block=2]=\"Block\",F[F.Underline=3]=\"Underline\",F[F.LineThin=4]=\"LineThin\",F[F.BlockOutline=5]=\"BlockOutline\",F[F.UnderlineThin=6]=\"UnderlineThin\"})(W||(e.TextEditorCursorStyle=W={}));var V;(function(F){F[F.AlwaysGrowsWhenTypingAtEdges=0]=\"AlwaysGrowsWhenTypingAtEdges\",F[F.NeverGrowsWhenTypingAtEdges=1]=\"NeverGrowsWhenTypingAtEdges\",F[F.GrowsOnlyWhenTypingBefore=2]=\"GrowsOnlyWhenTypingBefore\",F[F.GrowsOnlyWhenTypingAfter=3]=\"GrowsOnlyWhenTypingAfter\"})(V||(e.TrackedRangeStickiness=V={}));var K;(function(F){F[F.None=0]=\"None\",F[F.Same=1]=\"Same\",F[F.Indent=2]=\"Indent\",F[F.DeepIndent=3]=\"DeepIndent\"})(K||(e.WrappingIndent=K={}))}),define(se[528],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BracketPairWithMinIndentationInfo=e.BracketPairInfo=e.BracketInfo=void 0;class L{constructor(S,p,_,v){this.range=S,this.nestingLevel=p,this.nestingLevelOfEqualBracketType=_,this.isInvalid=v}}e.BracketInfo=L;class k{constructor(S,p,_,v,b,a){this.range=S,this.openingBracketRange=p,this.closingBracketRange=_,this.nestingLevel=v,this.nestingLevelOfEqualBracketType=b,this.bracketPairNode=a}get openingBracketInfo(){return this.bracketPairNode.openingBracket.bracketInfo}}e.BracketPairInfo=k;class y extends k{constructor(S,p,_,v,b,a,i){super(S,p,_,v,b,a),this.minVisibleColumnIndentation=i}}e.BracketPairWithMinIndentationInfo=y}),define(se[529],oe([1,0,6,2,528,182,290,91,289,134,209,13,288]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BracketPairsTree=void 0;class n extends k.Disposable{didLanguageChange(s){return this.brackets.didLanguageChange(s)}constructor(s,l){if(super(),this.textModel=s,this.getLanguageConfiguration=l,this.didChangeEmitter=new L.Emitter,this.denseKeyProvider=new v.DenseKeyProvider,this.brackets=new S.LanguageAgnosticBracketTokens(this.denseKeyProvider,this.getLanguageConfiguration),this.onDidChange=this.didChangeEmitter.event,this.queuedTextEditsForInitialAstWithoutTokens=[],this.queuedTextEdits=[],s.tokenization.hasTokens)s.tokenization.backgroundTokenizationState===2?(this.initialAstWithoutTokens=void 0,this.astWithTokens=this.parseDocumentFromTextBuffer([],void 0,!1)):(this.initialAstWithoutTokens=this.parseDocumentFromTextBuffer([],void 0,!0),this.astWithTokens=this.initialAstWithoutTokens);else{const o=this.brackets.getSingleLanguageBracketTokens(this.textModel.getLanguageId()),g=new b.FastTokenizer(this.textModel.getValue(),o);this.initialAstWithoutTokens=(0,_.parseDocument)(g,[],void 0,!0),this.astWithTokens=this.initialAstWithoutTokens}}handleDidChangeBackgroundTokenizationState(){if(this.textModel.tokenization.backgroundTokenizationState===2){const s=this.initialAstWithoutTokens===void 0;this.initialAstWithoutTokens=void 0,s||this.didChangeEmitter.fire()}}handleDidChangeTokens({ranges:s}){const l=s.map(o=>new E.TextEditInfo((0,p.toLength)(o.fromLineNumber-1,0),(0,p.toLength)(o.toLineNumber,0),(0,p.toLength)(o.toLineNumber-o.fromLineNumber+1,0)));this.handleEdits(l,!0),this.initialAstWithoutTokens||this.didChangeEmitter.fire()}handleContentChanged(s){const l=E.TextEditInfo.fromModelContentChanges(s.changes);this.handleEdits(l,!1)}handleEdits(s,l){const o=(0,i.combineTextEditInfos)(this.queuedTextEdits,s);this.queuedTextEdits=o,this.initialAstWithoutTokens&&!l&&(this.queuedTextEditsForInitialAstWithoutTokens=(0,i.combineTextEditInfos)(this.queuedTextEditsForInitialAstWithoutTokens,s))}flushQueue(){this.queuedTextEdits.length>0&&(this.astWithTokens=this.parseDocumentFromTextBuffer(this.queuedTextEdits,this.astWithTokens,!1),this.queuedTextEdits=[]),this.queuedTextEditsForInitialAstWithoutTokens.length>0&&(this.initialAstWithoutTokens&&(this.initialAstWithoutTokens=this.parseDocumentFromTextBuffer(this.queuedTextEditsForInitialAstWithoutTokens,this.initialAstWithoutTokens,!1)),this.queuedTextEditsForInitialAstWithoutTokens=[])}parseDocumentFromTextBuffer(s,l,o){const h=l,m=new b.TextBufferTokenizer(this.textModel,this.brackets);return(0,_.parseDocument)(m,s,h,o)}getBracketsInRange(s,l){this.flushQueue();const o=(0,p.toLength)(s.startLineNumber-1,s.startColumn-1),g=(0,p.toLength)(s.endLineNumber-1,s.endColumn-1);return new a.CallbackIterable(h=>{const m=this.initialAstWithoutTokens||this.astWithTokens;u(m,p.lengthZero,m.length,o,g,h,0,0,new Map,l)})}getBracketPairsInRange(s,l){this.flushQueue();const o=(0,p.positionToLength)(s.getStartPosition()),g=(0,p.positionToLength)(s.getEndPosition());return new a.CallbackIterable(h=>{const m=this.initialAstWithoutTokens||this.astWithTokens,C=new f(h,l,this.textModel);c(m,p.lengthZero,m.length,o,g,C,0,new Map)})}getFirstBracketAfter(s){this.flushQueue();const l=this.initialAstWithoutTokens||this.astWithTokens;return r(l,p.lengthZero,l.length,(0,p.positionToLength)(s))}getFirstBracketBefore(s){this.flushQueue();const l=this.initialAstWithoutTokens||this.astWithTokens;return t(l,p.lengthZero,l.length,(0,p.positionToLength)(s))}}e.BracketPairsTree=n;function t(d,s,l,o){if(d.kind===4||d.kind===2){const g=[];for(const h of d.children)l=(0,p.lengthAdd)(s,h.length),g.push({nodeOffsetStart:s,nodeOffsetEnd:l}),s=l;for(let h=g.length-1;h>=0;h--){const{nodeOffsetStart:m,nodeOffsetEnd:C}=g[h];if((0,p.lengthLessThan)(m,o)){const w=t(d.children[h],m,C,o);if(w)return w}}return null}else{if(d.kind===3)return null;if(d.kind===1){const g=(0,p.lengthsToRange)(s,l);return{bracketInfo:d.bracketInfo,range:g}}}return null}function r(d,s,l,o){if(d.kind===4||d.kind===2){for(const g of d.children){if(l=(0,p.lengthAdd)(s,g.length),(0,p.lengthLessThan)(o,l)){const h=r(g,s,l,o);if(h)return h}s=l}return null}else{if(d.kind===3)return null;if(d.kind===1){const g=(0,p.lengthsToRange)(s,l);return{bracketInfo:d.bracketInfo,range:g}}}return null}function u(d,s,l,o,g,h,m,C,w,D,I=!1){if(m>200)return!0;e:for(;;)switch(d.kind){case 4:{const T=d.childrenLength;for(let A=0;A<T;A++){const P=d.getChild(A);if(P){if(l=(0,p.lengthAdd)(s,P.length),(0,p.lengthLessThanEqual)(s,g)&&(0,p.lengthGreaterThanEqual)(l,o)){if((0,p.lengthGreaterThanEqual)(l,g)){d=P;continue e}if(!u(P,s,l,o,g,h,m,0,w,D))return!1}s=l}}return!0}case 2:{const T=!D||!d.closingBracket||d.closingBracket.bracketInfo.closesColorized(d.openingBracket.bracketInfo);let A=0;if(w){let N=w.get(d.openingBracket.text);N===void 0&&(N=0),A=N,T&&(N++,w.set(d.openingBracket.text,N))}const P=d.childrenLength;for(let N=0;N<P;N++){const M=d.getChild(N);if(M){if(l=(0,p.lengthAdd)(s,M.length),(0,p.lengthLessThanEqual)(s,g)&&(0,p.lengthGreaterThanEqual)(l,o)){if((0,p.lengthGreaterThanEqual)(l,g)&&M.kind!==1){d=M,T?(m++,C=A+1):C=A;continue e}if((T||M.kind!==1||!d.closingBracket)&&!u(M,s,l,o,g,h,T?m+1:m,T?A+1:A,w,D,!d.closingBracket))return!1}s=l}}return w?.set(d.openingBracket.text,A),!0}case 3:{const T=(0,p.lengthsToRange)(s,l);return h(new y.BracketInfo(T,m-1,0,!0))}case 1:{const T=(0,p.lengthsToRange)(s,l);return h(new y.BracketInfo(T,m-1,C-1,I))}case 0:return!0}}class f{constructor(s,l,o){this.push=s,this.includeMinIndentation=l,this.textModel=o}}function c(d,s,l,o,g,h,m,C){var w;if(m>200)return!0;let D=!0;if(d.kind===2){let I=0;if(C){let P=C.get(d.openingBracket.text);P===void 0&&(P=0),I=P,P++,C.set(d.openingBracket.text,P)}const T=(0,p.lengthAdd)(s,d.openingBracket.length);let A=-1;if(h.includeMinIndentation&&(A=d.computeMinIndentation(s,h.textModel)),D=h.push(new y.BracketPairWithMinIndentationInfo((0,p.lengthsToRange)(s,l),(0,p.lengthsToRange)(s,T),d.closingBracket?(0,p.lengthsToRange)((0,p.lengthAdd)(T,((w=d.child)===null||w===void 0?void 0:w.length)||p.lengthZero),l):void 0,m,I,d,A)),s=T,D&&d.child){const P=d.child;if(l=(0,p.lengthAdd)(s,P.length),(0,p.lengthLessThanEqual)(s,g)&&(0,p.lengthGreaterThanEqual)(l,o)&&(D=c(P,s,l,o,g,h,m+1,C),!D))return!1}C?.set(d.openingBracket.text,I)}else{let I=s;for(const T of d.children){const A=I;if(I=(0,p.lengthAdd)(I,T.length),(0,p.lengthLessThanEqual)(A,g)&&(0,p.lengthLessThanEqual)(o,I)&&(D=c(T,A,I,o,g,h,m,C),!D))return!1}}return D}}),define(se[114],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InternalModelContentChangeEvent=e.ModelInjectedTextChangedEvent=e.ModelRawContentChangedEvent=e.ModelRawEOLChanged=e.ModelRawLinesInserted=e.ModelRawLinesDeleted=e.ModelRawLineChanged=e.LineInjectedText=e.ModelRawFlush=void 0;class L{constructor(){this.changeType=1}}e.ModelRawFlush=L;class k{static applyInjectedText(i,n){if(!n||n.length===0)return i;let t=\"\",r=0;for(const u of n)t+=i.substring(r,u.column-1),r=u.column-1,t+=u.options.content;return t+=i.substring(r),t}static fromDecorations(i){const n=[];for(const t of i)t.options.before&&t.options.before.content.length>0&&n.push(new k(t.ownerId,t.range.startLineNumber,t.range.startColumn,t.options.before,0)),t.options.after&&t.options.after.content.length>0&&n.push(new k(t.ownerId,t.range.endLineNumber,t.range.endColumn,t.options.after,1));return n.sort((t,r)=>t.lineNumber===r.lineNumber?t.column===r.column?t.order-r.order:t.column-r.column:t.lineNumber-r.lineNumber),n}constructor(i,n,t,r,u){this.ownerId=i,this.lineNumber=n,this.column=t,this.options=r,this.order=u}}e.LineInjectedText=k;class y{constructor(i,n,t){this.changeType=2,this.lineNumber=i,this.detail=n,this.injectedText=t}}e.ModelRawLineChanged=y;class E{constructor(i,n){this.changeType=3,this.fromLineNumber=i,this.toLineNumber=n}}e.ModelRawLinesDeleted=E;class S{constructor(i,n,t,r){this.changeType=4,this.injectedTexts=r,this.fromLineNumber=i,this.toLineNumber=n,this.detail=t}}e.ModelRawLinesInserted=S;class p{constructor(){this.changeType=5}}e.ModelRawEOLChanged=p;class _{constructor(i,n,t,r){this.changes=i,this.versionId=n,this.isUndoing=t,this.isRedoing=r,this.resultingSelection=null}containsEvent(i){for(let n=0,t=this.changes.length;n<t;n++)if(this.changes[n].changeType===i)return!0;return!1}static merge(i,n){const t=[].concat(i.changes).concat(n.changes),r=n.versionId,u=i.isUndoing||n.isUndoing,f=i.isRedoing||n.isRedoing;return new _(t,r,u,f)}}e.ModelRawContentChangedEvent=_;class v{constructor(i){this.changes=i}}e.ModelInjectedTextChangedEvent=v;class b{constructor(i,n){this.rawContentChangedEvent=i,this.contentChangedEvent=n}merge(i){const n=_.merge(this.rawContentChangedEvent,i.rawContentChangedEvent),t=b._mergeChangeEvents(this.contentChangedEvent,i.contentChangedEvent);return new b(n,t)}static _mergeChangeEvents(i,n){const t=[].concat(i.changes).concat(n.changes),r=n.eol,u=n.versionId,f=i.isUndoing||n.isUndoing,c=i.isRedoing||n.isRedoing,d=i.isFlush||n.isFlush,s=i.isEolChange&&n.isEolChange;return{changes:t,eol:r,isEolChange:s,versionId:u,isUndoing:f,isRedoing:c,isFlush:d}}}e.InternalModelContentChangeEvent=b}),define(se[212],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IndentGuideHorizontalLine=e.IndentGuide=e.HorizontalGuidesState=void 0;var L;(function(E){E[E.Disabled=0]=\"Disabled\",E[E.EnabledForActive=1]=\"EnabledForActive\",E[E.Enabled=2]=\"Enabled\"})(L||(e.HorizontalGuidesState=L={}));class k{constructor(S,p,_,v,b,a){if(this.visibleColumn=S,this.column=p,this.className=_,this.horizontalLine=v,this.forWrappedLinesAfterColumn=b,this.forWrappedLinesBeforeOrAtColumn=a,S!==-1==(p!==-1))throw new Error}}e.IndentGuide=k;class y{constructor(S,p){this.top=S,this.endColumn=p}}e.IndentGuideHorizontalLine=y}),define(se[297],oe([1,0,60,11,85,5,292,210,212,12]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BracketPairGuidesClassNames=e.GuidesTextModelPart=void 0;class b extends S.TextModelPart{constructor(n,t){super(),this.textModel=n,this.languageConfigurationService=t}getLanguageConfiguration(n){return this.languageConfigurationService.getLanguageConfiguration(n)}_computeIndentLevel(n){return(0,p.computeIndentLevel)(this.textModel.getLineContent(n+1),this.textModel.getOptions().tabSize)}getActiveIndentGuide(n,t,r){this.assertNotDisposed();const u=this.textModel.getLineCount();if(n<1||n>u)throw new v.BugIndicatingError(\"Illegal value for lineNumber\");const f=this.getLanguageConfiguration(this.textModel.getLanguageId()).foldingRules,c=!!(f&&f.offSide);let d=-2,s=-1,l=-2,o=-1;const g=R=>{if(d!==-1&&(d===-2||d>R-1)){d=-1,s=-1;for(let x=R-2;x>=0;x--){const O=this._computeIndentLevel(x);if(O>=0){d=x,s=O;break}}}if(l===-2){l=-1,o=-1;for(let x=R;x<u;x++){const O=this._computeIndentLevel(x);if(O>=0){l=x,o=O;break}}}};let h=-2,m=-1,C=-2,w=-1;const D=R=>{if(h===-2){h=-1,m=-1;for(let x=R-2;x>=0;x--){const O=this._computeIndentLevel(x);if(O>=0){h=x,m=O;break}}}if(C!==-1&&(C===-2||C<R-1)){C=-1,w=-1;for(let x=R;x<u;x++){const O=this._computeIndentLevel(x);if(O>=0){C=x,w=O;break}}}};let I=0,T=!0,A=0,P=!0,N=0,M=0;for(let R=0;T||P;R++){const x=n-R,O=n+R;R>1&&(x<1||x<t)&&(T=!1),R>1&&(O>u||O>r)&&(P=!1),R>5e4&&(T=!1,P=!1);let B=-1;if(T&&x>=1){const V=this._computeIndentLevel(x-1);V>=0?(l=x-1,o=V,B=Math.ceil(V/this.textModel.getOptions().indentSize)):(g(x),B=this._getIndentLevelForWhitespaceLine(c,s,o))}let W=-1;if(P&&O<=u){const V=this._computeIndentLevel(O-1);V>=0?(h=O-1,m=V,W=Math.ceil(V/this.textModel.getOptions().indentSize)):(D(O),W=this._getIndentLevelForWhitespaceLine(c,m,w))}if(R===0){M=B;continue}if(R===1){if(O<=u&&W>=0&&M+1===W){T=!1,I=O,A=O,N=W;continue}if(x>=1&&B>=0&&B-1===M){P=!1,I=x,A=x,N=B;continue}if(I=n,A=n,N=M,N===0)return{startLineNumber:I,endLineNumber:A,indent:N}}T&&(B>=N?I=x:T=!1),P&&(W>=N?A=O:P=!1)}return{startLineNumber:I,endLineNumber:A,indent:N}}getLinesBracketGuides(n,t,r,u){var f;const c=[];for(let h=n;h<=t;h++)c.push([]);const d=!0,s=this.textModel.bracketPairs.getBracketPairsInRangeWithMinIndentation(new E.Range(n,1,t,this.textModel.getLineMaxColumn(t))).toArray();let l;if(r&&s.length>0){const h=(n<=r.lineNumber&&r.lineNumber<=t?s:this.textModel.bracketPairs.getBracketPairsInRange(E.Range.fromPositions(r)).toArray()).filter(m=>E.Range.strictContainsPosition(m.range,r));l=(f=(0,L.findLast)(h,m=>d||m.range.startLineNumber!==m.range.endLineNumber))===null||f===void 0?void 0:f.range}const o=this.textModel.getOptions().bracketPairColorizationOptions.independentColorPoolPerBracketType,g=new a;for(const h of s){if(!h.closingBracketRange)continue;const m=l&&h.range.equalsRange(l);if(!m&&!u.includeInactive)continue;const C=g.getInlineClassName(h.nestingLevel,h.nestingLevelOfEqualBracketType,o)+(u.highlightActive&&m?\" \"+g.activeClassName:\"\"),w=h.openingBracketRange.getStartPosition(),D=h.closingBracketRange.getStartPosition(),I=u.horizontalGuides===_.HorizontalGuidesState.Enabled||u.horizontalGuides===_.HorizontalGuidesState.EnabledForActive&&m;if(h.range.startLineNumber===h.range.endLineNumber){d&&I&&c[h.range.startLineNumber-n].push(new _.IndentGuide(-1,h.openingBracketRange.getEndPosition().column,C,new _.IndentGuideHorizontalLine(!1,D.column),-1,-1));continue}const T=this.getVisibleColumnFromPosition(D),A=this.getVisibleColumnFromPosition(h.openingBracketRange.getStartPosition()),P=Math.min(A,T,h.minVisibleColumnIndentation+1);let N=!1;k.firstNonWhitespaceIndex(this.textModel.getLineContent(h.closingBracketRange.startLineNumber))<h.closingBracketRange.startColumn-1&&(N=!0);const x=Math.max(w.lineNumber,n),O=Math.min(D.lineNumber,t),B=N?1:0;for(let W=x;W<O+B;W++)c[W-n].push(new _.IndentGuide(P,-1,C,null,W===w.lineNumber?w.column:-1,W===D.lineNumber?D.column:-1));I&&(w.lineNumber>=n&&A>P&&c[w.lineNumber-n].push(new _.IndentGuide(P,-1,C,new _.IndentGuideHorizontalLine(!1,w.column),-1,-1)),D.lineNumber<=t&&T>P&&c[D.lineNumber-n].push(new _.IndentGuide(P,-1,C,new _.IndentGuideHorizontalLine(!N,D.column),-1,-1)))}for(const h of c)h.sort((m,C)=>m.visibleColumn-C.visibleColumn);return c}getVisibleColumnFromPosition(n){return y.CursorColumns.visibleColumnFromColumn(this.textModel.getLineContent(n.lineNumber),n.column,this.textModel.getOptions().tabSize)+1}getLinesIndentGuides(n,t){this.assertNotDisposed();const r=this.textModel.getLineCount();if(n<1||n>r)throw new Error(\"Illegal value for startLineNumber\");if(t<1||t>r)throw new Error(\"Illegal value for endLineNumber\");const u=this.textModel.getOptions(),f=this.getLanguageConfiguration(this.textModel.getLanguageId()).foldingRules,c=!!(f&&f.offSide),d=new Array(t-n+1);let s=-2,l=-1,o=-2,g=-1;for(let h=n;h<=t;h++){const m=h-n,C=this._computeIndentLevel(h-1);if(C>=0){s=h-1,l=C,d[m]=Math.ceil(C/u.indentSize);continue}if(s===-2){s=-1,l=-1;for(let w=h-2;w>=0;w--){const D=this._computeIndentLevel(w);if(D>=0){s=w,l=D;break}}}if(o!==-1&&(o===-2||o<h-1)){o=-1,g=-1;for(let w=h;w<r;w++){const D=this._computeIndentLevel(w);if(D>=0){o=w,g=D;break}}}d[m]=this._getIndentLevelForWhitespaceLine(c,l,g)}return d}_getIndentLevelForWhitespaceLine(n,t,r){const u=this.textModel.getOptions();return t===-1||r===-1?0:t<r?1+Math.floor(t/u.indentSize):t===r||n?Math.ceil(r/u.indentSize):1+Math.floor(r/u.indentSize)}}e.GuidesTextModelPart=b;class a{constructor(){this.activeClassName=\"indent-active\"}getInlineClassName(n,t,r){return this.getInlineClassNameOfLevel(r?t:n)}getInlineClassNameOfLevel(n){return`bracket-indent-guide lvl-${n%30}`}}e.BracketPairGuidesClassNames=a}),define(se[530],oe([1,0,6,2]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TokenizationRegistry=void 0;class y{constructor(){this._tokenizationSupports=new Map,this._factories=new Map,this._onDidChange=new L.Emitter,this.onDidChange=this._onDidChange.event,this._colorMap=null}handleChange(p){this._onDidChange.fire({changedLanguages:p,changedColorMap:!1})}register(p,_){return this._tokenizationSupports.set(p,_),this.handleChange([p]),(0,k.toDisposable)(()=>{this._tokenizationSupports.get(p)===_&&(this._tokenizationSupports.delete(p),this.handleChange([p]))})}get(p){return this._tokenizationSupports.get(p)||null}registerFactory(p,_){var v;(v=this._factories.get(p))===null||v===void 0||v.dispose();const b=new E(this,p,_);return this._factories.set(p,b),(0,k.toDisposable)(()=>{const a=this._factories.get(p);!a||a!==b||(this._factories.delete(p),a.dispose())})}async getOrCreate(p){const _=this.get(p);if(_)return _;const v=this._factories.get(p);return!v||v.isResolved?null:(await v.resolve(),this.get(p))}isResolved(p){if(this.get(p))return!0;const v=this._factories.get(p);return!!(!v||v.isResolved)}setColorMap(p){this._colorMap=p,this._onDidChange.fire({changedLanguages:Array.from(this._tokenizationSupports.keys()),changedColorMap:!0})}getColorMap(){return this._colorMap}getDefaultBackground(){return this._colorMap&&this._colorMap.length>2?this._colorMap[2]:null}}e.TokenizationRegistry=y;class E extends k.Disposable{get isResolved(){return this._isResolved}constructor(p,_,v){super(),this._registry=p,this._languageId=_,this._factory=v,this._isDisposed=!1,this._resolvePromise=null,this._isResolved=!1}dispose(){this._isDisposed=!0,super.dispose()}async resolve(){return this._resolvePromise||(this._resolvePromise=this._create()),this._resolvePromise}async _create(){const p=await this._factory.tokenizationSupport;this._isResolved=!0,p&&!this._isDisposed&&this._register(this._registry.register(this._languageId,p))}}}),define(se[531],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContiguousMultilineTokens=void 0;class L{get startLineNumber(){return this._startLineNumber}get endLineNumber(){return this._startLineNumber+this._tokens.length-1}constructor(y,E){this._startLineNumber=y,this._tokens=E}getLineTokens(y){return this._tokens[y-this._startLineNumber]}appendLineTokens(y){this._tokens.push(y)}}e.ContiguousMultilineTokens=L}),define(se[298],oe([1,0,531]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContiguousMultilineTokensBuilder=void 0;class k{constructor(){this._tokens=[]}add(E,S){if(this._tokens.length>0){const p=this._tokens[this._tokens.length-1];if(p.endLineNumber+1===E){p.appendLineTokens(S);return}}this._tokens.push(new L.ContiguousMultilineTokens(E,[S]))}finalize(){return this._tokens}}e.ContiguousMultilineTokensBuilder=k}),define(se[94],oe([1,0,132]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LineTokens=void 0;class k{static createEmpty(S,p){const _=k.defaultTokenMetadata,v=new Uint32Array(2);return v[0]=S.length,v[1]=_,new k(v,S,p)}constructor(S,p,_){this._lineTokensBrand=void 0,this._tokens=S,this._tokensCount=this._tokens.length>>>1,this._text=p,this._languageIdCodec=_}equals(S){return S instanceof k?this.slicedEquals(S,0,this._tokensCount):!1}slicedEquals(S,p,_){if(this._text!==S._text||this._tokensCount!==S._tokensCount)return!1;const v=p<<1,b=v+(_<<1);for(let a=v;a<b;a++)if(this._tokens[a]!==S._tokens[a])return!1;return!0}getLineContent(){return this._text}getCount(){return this._tokensCount}getStartOffset(S){return S>0?this._tokens[S-1<<1]:0}getMetadata(S){return this._tokens[(S<<1)+1]}getLanguageId(S){const p=this._tokens[(S<<1)+1],_=L.TokenMetadata.getLanguageId(p);return this._languageIdCodec.decodeLanguageId(_)}getStandardTokenType(S){const p=this._tokens[(S<<1)+1];return L.TokenMetadata.getTokenType(p)}getForeground(S){const p=this._tokens[(S<<1)+1];return L.TokenMetadata.getForeground(p)}getClassName(S){const p=this._tokens[(S<<1)+1];return L.TokenMetadata.getClassNameFromMetadata(p)}getInlineStyle(S,p){const _=this._tokens[(S<<1)+1];return L.TokenMetadata.getInlineStyleFromMetadata(_,p)}getPresentation(S){const p=this._tokens[(S<<1)+1];return L.TokenMetadata.getPresentationFromMetadata(p)}getEndOffset(S){return this._tokens[S<<1]}findTokenIndexAtOffset(S){return k.findIndexInTokensArray(this._tokens,S)}inflate(){return this}sliceAndInflate(S,p,_){return new y(this,S,p,_)}static convertToEndOffset(S,p){const v=(S.length>>>1)-1;for(let b=0;b<v;b++)S[b<<1]=S[b+1<<1];S[v<<1]=p}static findIndexInTokensArray(S,p){if(S.length<=2)return 0;let _=0,v=(S.length>>>1)-1;for(;_<v;){const b=_+Math.floor((v-_)/2),a=S[b<<1];if(a===p)return b+1;a<p?_=b+1:a>p&&(v=b)}return _}withInserted(S){if(S.length===0)return this;let p=0,_=0,v=\"\";const b=new Array;let a=0;for(;;){const i=p<this._tokensCount?this._tokens[p<<1]:-1,n=_<S.length?S[_]:null;if(i!==-1&&(n===null||i<=n.offset)){v+=this._text.substring(a,i);const t=this._tokens[(p<<1)+1];b.push(v.length,t),p++,a=i}else if(n){if(n.offset>a){v+=this._text.substring(a,n.offset);const t=this._tokens[(p<<1)+1];b.push(v.length,t),a=n.offset}v+=n.text,b.push(v.length,n.tokenMetadata),_++}else break}return new k(new Uint32Array(b),v,this._languageIdCodec)}}e.LineTokens=k,k.defaultTokenMetadata=(0<<11|1<<15|2<<24)>>>0;class y{constructor(S,p,_,v){this._source=S,this._startOffset=p,this._endOffset=_,this._deltaOffset=v,this._firstTokenIndex=S.findTokenIndexAtOffset(p),this._tokensCount=0;for(let b=this._firstTokenIndex,a=S.getCount();b<a&&!(S.getStartOffset(b)>=_);b++)this._tokensCount++}getMetadata(S){return this._source.getMetadata(this._firstTokenIndex+S)}getLanguageId(S){return this._source.getLanguageId(this._firstTokenIndex+S)}getLineContent(){return this._source.getLineContent().substring(this._startOffset,this._endOffset)}equals(S){return S instanceof y?this._startOffset===S._startOffset&&this._endOffset===S._endOffset&&this._deltaOffset===S._deltaOffset&&this._source.slicedEquals(S._source,this._firstTokenIndex,this._tokensCount):!1}getCount(){return this._tokensCount}getForeground(S){return this._source.getForeground(this._firstTokenIndex+S)}getEndOffset(S){const p=this._source.getEndOffset(this._firstTokenIndex+S);return Math.min(this._endOffset,p)-this._startOffset+this._deltaOffset}getClassName(S){return this._source.getClassName(this._firstTokenIndex+S)}getInlineStyle(S,p){return this._source.getInlineStyle(this._firstTokenIndex+S,p)}getPresentation(S){return this._source.getPresentation(this._firstTokenIndex+S)}findTokenIndexAtOffset(S){return this._source.findTokenIndexAtOffset(S+this._startOffset-this._deltaOffset)-this._firstTokenIndex}}}),define(se[532],oe([1,0,94]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.toUint32Array=e.ContiguousTokensEditing=e.EMPTY_LINE_TOKENS=void 0,e.EMPTY_LINE_TOKENS=new Uint32Array(0).buffer;class k{static deleteBeginning(S,p){return S===null||S===e.EMPTY_LINE_TOKENS?S:k.delete(S,0,p)}static deleteEnding(S,p){if(S===null||S===e.EMPTY_LINE_TOKENS)return S;const _=y(S),v=_[_.length-2];return k.delete(S,p,v)}static delete(S,p,_){if(S===null||S===e.EMPTY_LINE_TOKENS||p===_)return S;const v=y(S),b=v.length>>>1;if(p===0&&v[v.length-2]===_)return e.EMPTY_LINE_TOKENS;const a=L.LineTokens.findIndexInTokensArray(v,p),i=a>0?v[a-1<<1]:0,n=v[a<<1];if(_<n){const c=_-p;for(let d=a;d<b;d++)v[d<<1]-=c;return S}let t,r;i!==p?(v[a<<1]=p,t=a+1<<1,r=p):(t=a<<1,r=i);const u=_-p;for(let c=a+1;c<b;c++){const d=v[c<<1]-u;d>r&&(v[t++]=d,v[t++]=v[(c<<1)+1],r=d)}if(t===v.length)return S;const f=new Uint32Array(t);return f.set(v.subarray(0,t),0),f.buffer}static append(S,p){if(p===e.EMPTY_LINE_TOKENS)return S;if(S===e.EMPTY_LINE_TOKENS)return p;if(S===null)return S;if(p===null)return null;const _=y(S),v=y(p),b=v.length>>>1,a=new Uint32Array(_.length+v.length);a.set(_,0);let i=_.length;const n=_[_.length-2];for(let t=0;t<b;t++)a[i++]=v[t<<1]+n,a[i++]=v[(t<<1)+1];return a.buffer}static insert(S,p,_){if(S===null||S===e.EMPTY_LINE_TOKENS)return S;const v=y(S),b=v.length>>>1;let a=L.LineTokens.findIndexInTokensArray(v,p);a>0&&v[a-1<<1]===p&&a--;for(let i=a;i<b;i++)v[i<<1]+=_;return S}}e.ContiguousTokensEditing=k;function y(E){return E instanceof Uint32Array?E:new Uint32Array(E)}e.toUint32Array=y}),define(se[533],oe([1,0,13,10,532,94,132]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContiguousTokensStore=void 0;class p{constructor(b){this._lineTokens=[],this._len=0,this._languageIdCodec=b}flush(){this._lineTokens=[],this._len=0}get hasTokens(){return this._lineTokens.length>0}getTokens(b,a,i){let n=null;if(a<this._len&&(n=this._lineTokens[a]),n!==null&&n!==y.EMPTY_LINE_TOKENS)return new E.LineTokens((0,y.toUint32Array)(n),i,this._languageIdCodec);const t=new Uint32Array(2);return t[0]=i.length,t[1]=_(this._languageIdCodec.encodeLanguageId(b)),new E.LineTokens(t,i,this._languageIdCodec)}static _massageTokens(b,a,i){const n=i?(0,y.toUint32Array)(i):null;if(a===0){let t=!1;if(n&&n.length>1&&(t=S.TokenMetadata.getLanguageId(n[1])!==b),!t)return y.EMPTY_LINE_TOKENS}if(!n||n.length===0){const t=new Uint32Array(2);return t[0]=a,t[1]=_(b),t.buffer}return n[n.length-2]=a,n.byteOffset===0&&n.byteLength===n.buffer.byteLength?n.buffer:n}_ensureLine(b){for(;b>=this._len;)this._lineTokens[this._len]=null,this._len++}_deleteLines(b,a){a!==0&&(b+a>this._len&&(a=this._len-b),this._lineTokens.splice(b,a),this._len-=a)}_insertLines(b,a){if(a===0)return;const i=[];for(let n=0;n<a;n++)i[n]=null;this._lineTokens=L.arrayInsert(this._lineTokens,b,i),this._len+=a}setTokens(b,a,i,n,t){const r=p._massageTokens(this._languageIdCodec.encodeLanguageId(b),i,n);this._ensureLine(a);const u=this._lineTokens[a];return this._lineTokens[a]=r,t?!p._equals(u,r):!1}static _equals(b,a){if(!b||!a)return!b&&!a;const i=(0,y.toUint32Array)(b),n=(0,y.toUint32Array)(a);if(i.length!==n.length)return!1;for(let t=0,r=i.length;t<r;t++)if(i[t]!==n[t])return!1;return!0}acceptEdit(b,a,i){this._acceptDeleteRange(b),this._acceptInsertText(new k.Position(b.startLineNumber,b.startColumn),a,i)}_acceptDeleteRange(b){const a=b.startLineNumber-1;if(a>=this._len)return;if(b.startLineNumber===b.endLineNumber){if(b.startColumn===b.endColumn)return;this._lineTokens[a]=y.ContiguousTokensEditing.delete(this._lineTokens[a],b.startColumn-1,b.endColumn-1);return}this._lineTokens[a]=y.ContiguousTokensEditing.deleteEnding(this._lineTokens[a],b.startColumn-1);const i=b.endLineNumber-1;let n=null;i<this._len&&(n=y.ContiguousTokensEditing.deleteBeginning(this._lineTokens[i],b.endColumn-1)),this._lineTokens[a]=y.ContiguousTokensEditing.append(this._lineTokens[a],n),this._deleteLines(b.startLineNumber,b.endLineNumber-b.startLineNumber)}_acceptInsertText(b,a,i){if(a===0&&i===0)return;const n=b.lineNumber-1;if(!(n>=this._len)){if(a===0){this._lineTokens[n]=y.ContiguousTokensEditing.insert(this._lineTokens[n],b.column-1,i);return}this._lineTokens[n]=y.ContiguousTokensEditing.deleteEnding(this._lineTokens[n],b.column-1),this._lineTokens[n]=y.ContiguousTokensEditing.insert(this._lineTokens[n],b.column-1,i),this._insertLines(b.lineNumber,a)}}setMultilineTokens(b,a){if(b.length===0)return{changes:[]};const i=[];for(let n=0,t=b.length;n<t;n++){const r=b[n];let u=0,f=0,c=!1;for(let d=r.startLineNumber;d<=r.endLineNumber;d++)c?(this.setTokens(a.getLanguageId(),d-1,a.getLineLength(d),r.getLineTokens(d),!1),f=d):this.setTokens(a.getLanguageId(),d-1,a.getLineLength(d),r.getLineTokens(d),!0)&&(c=!0,u=d,f=d);c&&i.push({fromLineNumber:u,toLineNumber:f})}return{changes:i}}}e.ContiguousTokensStore=p;function _(v){return(v<<0|0<<8|0<<11|1<<15|2<<24|1024)>>>0}}),define(se[534],oe([1,0,10,5,129]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SparseLineTokens=e.SparseMultilineTokens=void 0;class E{static create(v,b){return new E(v,new S(b))}get startLineNumber(){return this._startLineNumber}get endLineNumber(){return this._endLineNumber}constructor(v,b){this._startLineNumber=v,this._tokens=b,this._endLineNumber=this._startLineNumber+this._tokens.getMaxDeltaLine()}toString(){return this._tokens.toString(this._startLineNumber)}_updateEndLineNumber(){this._endLineNumber=this._startLineNumber+this._tokens.getMaxDeltaLine()}isEmpty(){return this._tokens.isEmpty()}getLineTokens(v){return this._startLineNumber<=v&&v<=this._endLineNumber?this._tokens.getLineTokens(v-this._startLineNumber):null}getRange(){const v=this._tokens.getRange();return v&&new k.Range(this._startLineNumber+v.startLineNumber,v.startColumn,this._startLineNumber+v.endLineNumber,v.endColumn)}removeTokens(v){const b=v.startLineNumber-this._startLineNumber,a=v.endLineNumber-this._startLineNumber;this._startLineNumber+=this._tokens.removeTokens(b,v.startColumn-1,a,v.endColumn-1),this._updateEndLineNumber()}split(v){const b=v.startLineNumber-this._startLineNumber,a=v.endLineNumber-this._startLineNumber,[i,n,t]=this._tokens.split(b,v.startColumn-1,a,v.endColumn-1);return[new E(this._startLineNumber,i),new E(this._startLineNumber+t,n)]}applyEdit(v,b){const[a,i,n]=(0,y.countEOL)(b);this.acceptEdit(v,a,i,n,b.length>0?b.charCodeAt(0):0)}acceptEdit(v,b,a,i,n){this._acceptDeleteRange(v),this._acceptInsertText(new L.Position(v.startLineNumber,v.startColumn),b,a,i,n),this._updateEndLineNumber()}_acceptDeleteRange(v){if(v.startLineNumber===v.endLineNumber&&v.startColumn===v.endColumn)return;const b=v.startLineNumber-this._startLineNumber,a=v.endLineNumber-this._startLineNumber;if(a<0){const n=a-b;this._startLineNumber-=n;return}const i=this._tokens.getMaxDeltaLine();if(!(b>=i+1)){if(b<0&&a>=i+1){this._startLineNumber=0,this._tokens.clear();return}if(b<0){const n=-b;this._startLineNumber-=n,this._tokens.acceptDeleteRange(v.startColumn-1,0,0,a,v.endColumn-1)}else this._tokens.acceptDeleteRange(0,b,v.startColumn-1,a,v.endColumn-1)}}_acceptInsertText(v,b,a,i,n){if(b===0&&a===0)return;const t=v.lineNumber-this._startLineNumber;if(t<0){this._startLineNumber+=b;return}const r=this._tokens.getMaxDeltaLine();t>=r+1||this._tokens.acceptInsertText(t,v.column-1,b,a,i,n)}}e.SparseMultilineTokens=E;class S{constructor(v){this._tokens=v,this._tokenCount=v.length/4}toString(v){const b=[];for(let a=0;a<this._tokenCount;a++)b.push(`(${this._getDeltaLine(a)+v},${this._getStartCharacter(a)}-${this._getEndCharacter(a)})`);return`[${b.join(\",\")}]`}getMaxDeltaLine(){const v=this._getTokenCount();return v===0?-1:this._getDeltaLine(v-1)}getRange(){const v=this._getTokenCount();if(v===0)return null;const b=this._getStartCharacter(0),a=this._getDeltaLine(v-1),i=this._getEndCharacter(v-1);return new k.Range(0,b+1,a,i+1)}_getTokenCount(){return this._tokenCount}_getDeltaLine(v){return this._tokens[4*v]}_getStartCharacter(v){return this._tokens[4*v+1]}_getEndCharacter(v){return this._tokens[4*v+2]}isEmpty(){return this._getTokenCount()===0}getLineTokens(v){let b=0,a=this._getTokenCount()-1;for(;b<a;){const i=b+Math.floor((a-b)/2),n=this._getDeltaLine(i);if(n<v)b=i+1;else if(n>v)a=i-1;else{let t=i;for(;t>b&&this._getDeltaLine(t-1)===v;)t--;let r=i;for(;r<a&&this._getDeltaLine(r+1)===v;)r++;return new p(this._tokens.subarray(4*t,4*r+4))}}return this._getDeltaLine(b)===v?new p(this._tokens.subarray(4*b,4*b+4)):null}clear(){this._tokenCount=0}removeTokens(v,b,a,i){const n=this._tokens,t=this._tokenCount;let r=0,u=!1,f=0;for(let c=0;c<t;c++){const d=4*c,s=n[d],l=n[d+1],o=n[d+2],g=n[d+3];if((s>v||s===v&&o>=b)&&(s<a||s===a&&l<=i))u=!0;else{if(r===0&&(f=s),u){const h=4*r;n[h]=s-f,n[h+1]=l,n[h+2]=o,n[h+3]=g}r++}}return this._tokenCount=r,f}split(v,b,a,i){const n=this._tokens,t=this._tokenCount,r=[],u=[];let f=r,c=0,d=0;for(let s=0;s<t;s++){const l=4*s,o=n[l],g=n[l+1],h=n[l+2],m=n[l+3];if(o>v||o===v&&h>=b){if(o<a||o===a&&g<=i)continue;f!==u&&(f=u,c=0,d=o)}f[c++]=o-d,f[c++]=g,f[c++]=h,f[c++]=m}return[new S(new Uint32Array(r)),new S(new Uint32Array(u)),d]}acceptDeleteRange(v,b,a,i,n){const t=this._tokens,r=this._tokenCount,u=i-b;let f=0,c=!1;for(let d=0;d<r;d++){const s=4*d;let l=t[s],o=t[s+1],g=t[s+2];const h=t[s+3];if(l<b||l===b&&g<=a){f++;continue}else if(l===b&&o<a)l===i&&g>n?g-=n-a:g=a;else if(l===b&&o===a)if(l===i&&g>n)g-=n-a;else{c=!0;continue}else if(l<i||l===i&&o<n)if(l===i&&g>n)l=b,o=a,g=o+(g-n);else{c=!0;continue}else if(l>i){if(u===0&&!c){f=r;break}l-=u}else if(l===i&&o>=n)v&&l===0&&(o+=v,g+=v),l-=u,o-=n-a,g-=n-a;else throw new Error(\"Not possible!\");const m=4*f;t[m]=l,t[m+1]=o,t[m+2]=g,t[m+3]=h,f++}this._tokenCount=f}acceptInsertText(v,b,a,i,n,t){const r=a===0&&i===1&&(t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122),u=this._tokens,f=this._tokenCount;for(let c=0;c<f;c++){const d=4*c;let s=u[d],l=u[d+1],o=u[d+2];if(!(s<v||s===v&&o<b)){if(s===v&&o===b)if(r)o+=1;else continue;else if(s===v&&l<b&&b<o)a===0?o+=i:o=b;else{if(s===v&&l===b&&r)continue;if(s===v)if(s+=a,a===0)l+=i,o+=i;else{const g=o-l;l=n+(l-b),o=l+g}else s+=a}u[d]=s,u[d+1]=l,u[d+2]=o}}}}class p{constructor(v){this._tokens=v}getCount(){return this._tokens.length/4}getStartCharacter(v){return this._tokens[4*v+1]}getEndCharacter(v){return this._tokens[4*v+2]}getMetadata(v){return this._tokens[4*v+3]}}e.SparseLineTokens=p}),define(se[535],oe([1,0,13,94]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SparseTokensStore=void 0;class y{constructor(S){this._pieces=[],this._isComplete=!1,this._languageIdCodec=S}flush(){this._pieces=[],this._isComplete=!1}isEmpty(){return this._pieces.length===0}set(S,p){this._pieces=S||[],this._isComplete=p}setPartial(S,p){let _=S;if(p.length>0){const b=p[0].getRange(),a=p[p.length-1].getRange();if(!b||!a)return S;_=S.plusRange(b).plusRange(a)}let v=null;for(let b=0,a=this._pieces.length;b<a;b++){const i=this._pieces[b];if(i.endLineNumber<_.startLineNumber)continue;if(i.startLineNumber>_.endLineNumber){v=v||{index:b};break}if(i.removeTokens(_),i.isEmpty()){this._pieces.splice(b,1),b--,a--;continue}if(i.endLineNumber<_.startLineNumber)continue;if(i.startLineNumber>_.endLineNumber){v=v||{index:b};continue}const[n,t]=i.split(_);if(n.isEmpty()){v=v||{index:b};continue}t.isEmpty()||(this._pieces.splice(b,1,n,t),b++,a++,v=v||{index:b})}return v=v||{index:this._pieces.length},p.length>0&&(this._pieces=L.arrayInsert(this._pieces,v.index,p)),_}isComplete(){return this._isComplete}addSparseTokens(S,p){if(p.getLineContent().length===0)return p;const _=this._pieces;if(_.length===0)return p;const v=y._findFirstPieceWithLine(_,S),b=_[v].getLineTokens(S);if(!b)return p;const a=p.getCount(),i=b.getCount();let n=0;const t=[];let r=0,u=0;const f=(c,d)=>{c!==u&&(u=c,t[r++]=c,t[r++]=d)};for(let c=0;c<i;c++){const d=b.getStartCharacter(c),s=b.getEndCharacter(c),l=b.getMetadata(c),o=((l&1?2048:0)|(l&2?4096:0)|(l&4?8192:0)|(l&8?16384:0)|(l&16?16744448:0)|(l&32?4278190080:0))>>>0,g=~o>>>0;for(;n<a&&p.getEndOffset(n)<=d;)f(p.getEndOffset(n),p.getMetadata(n)),n++;for(n<a&&p.getStartOffset(n)<d&&f(d,p.getMetadata(n));n<a&&p.getEndOffset(n)<s;)f(p.getEndOffset(n),p.getMetadata(n)&g|l&o),n++;if(n<a)f(s,p.getMetadata(n)&g|l&o),p.getEndOffset(n)===s&&n++;else{const h=Math.min(Math.max(0,n-1),a-1);f(s,p.getMetadata(h)&g|l&o)}}for(;n<a;)f(p.getEndOffset(n),p.getMetadata(n)),n++;return new k.LineTokens(new Uint32Array(t),p.getLineContent(),this._languageIdCodec)}static _findFirstPieceWithLine(S,p){let _=0,v=S.length-1;for(;_<v;){let b=_+Math.floor((v-_)/2);if(S[b].endLineNumber<p)_=b+1;else if(S[b].startLineNumber>p)v=b-1;else{for(;b>_&&S[b-1].startLineNumber<=p&&p<=S[b-1].endLineNumber;)b--;return b}}return _}acceptEdit(S,p,_,v,b){for(const a of this._pieces)a.acceptEdit(S,p,_,v,b)}}e.SparseTokensStore=y}),define(se[154],oe([1,0,2]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewEventHandler=void 0;class k extends L.Disposable{constructor(){super(),this._shouldRender=!0}shouldRender(){return this._shouldRender}forceShouldRender(){this._shouldRender=!0}setShouldRender(){this._shouldRender=!0}onDidRender(){this._shouldRender=!1}onCompositionStart(E){return!1}onCompositionEnd(E){return!1}onConfigurationChanged(E){return!1}onCursorStateChanged(E){return!1}onDecorationsChanged(E){return!1}onFlushed(E){return!1}onFocusChanged(E){return!1}onLanguageConfigurationChanged(E){return!1}onLineMappingChanged(E){return!1}onLinesChanged(E){return!1}onLinesDeleted(E){return!1}onLinesInserted(E){return!1}onRevealRangeRequest(E){return!1}onScrollChanged(E){return!1}onThemeChanged(E){return!1}onTokensChanged(E){return!1}onTokensColorsChanged(E){return!1}onZonesChanged(E){return!1}handleEvents(E){let S=!1;for(let p=0,_=E.length;p<_;p++){const v=E[p];switch(v.type){case 0:this.onCompositionStart(v)&&(S=!0);break;case 1:this.onCompositionEnd(v)&&(S=!0);break;case 2:this.onConfigurationChanged(v)&&(S=!0);break;case 3:this.onCursorStateChanged(v)&&(S=!0);break;case 4:this.onDecorationsChanged(v)&&(S=!0);break;case 5:this.onFlushed(v)&&(S=!0);break;case 6:this.onFocusChanged(v)&&(S=!0);break;case 7:this.onLanguageConfigurationChanged(v)&&(S=!0);break;case 8:this.onLineMappingChanged(v)&&(S=!0);break;case 9:this.onLinesChanged(v)&&(S=!0);break;case 10:this.onLinesDeleted(v)&&(S=!0);break;case 11:this.onLinesInserted(v)&&(S=!0);break;case 12:this.onRevealRangeRequest(v)&&(S=!0);break;case 13:this.onScrollChanged(v)&&(S=!0);break;case 15:this.onTokensChanged(v)&&(S=!0);break;case 14:this.onThemeChanged(v)&&(S=!0);break;case 16:this.onTokensColorsChanged(v)&&(S=!0);break;case 17:this.onZonesChanged(v)&&(S=!0);break;default:console.info(\"View received unknown event: \"),console.info(v)}}S&&(this._shouldRender=!0)}}e.ViewEventHandler=k}),define(se[115],oe([1,0,154]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DynamicViewOverlay=void 0;class k extends L.ViewEventHandler{}e.DynamicViewOverlay=k}),define(se[56],oe([1,0,154]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PartFingerprints=e.ViewPart=void 0;class k extends L.ViewEventHandler{constructor(S){super(),this._context=S,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}}e.ViewPart=k;class y{static write(S,p){S.setAttribute(\"data-mprt\",String(p))}static read(S){const p=S.getAttribute(\"data-mprt\");return p===null?0:parseInt(p,10)}static collect(S,p){const _=[];let v=0;for(;S&&S!==S.ownerDocument.body&&S!==p;)S.nodeType===S.ELEMENT_NODE&&(_[v++]=this.read(S)),S=S.parentElement;const b=new Uint8Array(v);for(let a=0;a<v;a++)b[a]=_[v-a-1];return b}}e.PartFingerprints=y}),define(se[536],oe([1,0,40,56,430]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BlockDecorations=void 0;class y extends k.ViewPart{constructor(S){super(S),this.blocks=[],this.contentWidth=-1,this.contentLeft=0,this.domNode=(0,L.createFastDomNode)(document.createElement(\"div\")),this.domNode.setAttribute(\"role\",\"presentation\"),this.domNode.setAttribute(\"aria-hidden\",\"true\"),this.domNode.setClassName(\"blockDecorations-container\"),this.update()}update(){let S=!1;const _=this._context.configuration.options.get(143),v=_.contentWidth-_.verticalScrollbarWidth;this.contentWidth!==v&&(this.contentWidth=v,S=!0);const b=_.contentLeft;return this.contentLeft!==b&&(this.contentLeft=b,S=!0),S}dispose(){super.dispose()}onConfigurationChanged(S){return this.update()}onScrollChanged(S){return S.scrollTopChanged||S.scrollLeftChanged}onDecorationsChanged(S){return!0}onZonesChanged(S){return!0}prepareRender(S){}render(S){var p;let _=0;const v=S.getDecorationsInViewport();for(const b of v){if(!b.options.blockClassName)continue;let a=this.blocks[_];a||(a=this.blocks[_]=(0,L.createFastDomNode)(document.createElement(\"div\")),this.domNode.appendChild(a));let i,n;b.options.blockIsAfterEnd?(i=S.getVerticalOffsetAfterLineNumber(b.range.endLineNumber,!1),n=S.getVerticalOffsetAfterLineNumber(b.range.endLineNumber,!0)):(i=S.getVerticalOffsetForLineNumber(b.range.startLineNumber,!0),n=b.range.isEmpty()&&!b.options.blockDoesNotCollapse?S.getVerticalOffsetForLineNumber(b.range.startLineNumber,!1):S.getVerticalOffsetAfterLineNumber(b.range.endLineNumber,!0));const[t,r,u,f]=(p=b.options.blockPadding)!==null&&p!==void 0?p:[0,0,0,0];a.setClassName(\"blockDecorations-block \"+b.options.blockClassName),a.setLeft(this.contentLeft-f),a.setWidth(this.contentWidth+f+r),a.setTop(i-S.scrollTop-t),a.setHeight(n-i+t+u),_++}for(let b=_;b<this.blocks.length;b++)this.blocks[b].domNode.remove();this.blocks.length=_}}e.BlockDecorations=y}),define(se[537],oe([1,0,115,148,5,432]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DecorationsOverlay=void 0;class E extends L.DynamicViewOverlay{constructor(p){super(),this._context=p;const _=this._context.configuration.options;this._lineHeight=_.get(66),this._typicalHalfwidthCharacterWidth=_.get(50).typicalHalfwidthCharacterWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(p){const _=this._context.configuration.options;return this._lineHeight=_.get(66),this._typicalHalfwidthCharacterWidth=_.get(50).typicalHalfwidthCharacterWidth,!0}onDecorationsChanged(p){return!0}onFlushed(p){return!0}onLinesChanged(p){return!0}onLinesDeleted(p){return!0}onLinesInserted(p){return!0}onScrollChanged(p){return p.scrollTopChanged||p.scrollWidthChanged}onZonesChanged(p){return!0}prepareRender(p){const _=p.getDecorationsInViewport();let v=[],b=0;for(let t=0,r=_.length;t<r;t++){const u=_[t];u.options.className&&(v[b++]=u)}v=v.sort((t,r)=>{if(t.options.zIndex<r.options.zIndex)return-1;if(t.options.zIndex>r.options.zIndex)return 1;const u=t.options.className,f=r.options.className;return u<f?-1:u>f?1:y.Range.compareRangesUsingStarts(t.range,r.range)});const a=p.visibleRange.startLineNumber,i=p.visibleRange.endLineNumber,n=[];for(let t=a;t<=i;t++){const r=t-a;n[r]=\"\"}this._renderWholeLineDecorations(p,v,n),this._renderNormalDecorations(p,v,n),this._renderResult=n}_renderWholeLineDecorations(p,_,v){const b=String(this._lineHeight),a=p.visibleRange.startLineNumber,i=p.visibleRange.endLineNumber;for(let n=0,t=_.length;n<t;n++){const r=_[n];if(!r.options.isWholeLine)continue;const u='<div class=\"cdr '+r.options.className+'\" style=\"left:0;width:100%;height:'+b+'px;\"></div>',f=Math.max(r.range.startLineNumber,a),c=Math.min(r.range.endLineNumber,i);for(let d=f;d<=c;d++){const s=d-a;v[s]+=u}}}_renderNormalDecorations(p,_,v){var b;const a=String(this._lineHeight),i=p.visibleRange.startLineNumber;let n=null,t=!1,r=null,u=!1;for(let f=0,c=_.length;f<c;f++){const d=_[f];if(d.options.isWholeLine)continue;const s=d.options.className,l=!!d.options.showIfCollapsed;let o=d.range;if(l&&o.endColumn===1&&o.endLineNumber!==o.startLineNumber&&(o=new y.Range(o.startLineNumber,o.startColumn,o.endLineNumber-1,this._context.viewModel.getLineMaxColumn(o.endLineNumber-1))),n===s&&t===l&&y.Range.areIntersectingOrTouching(r,o)){r=y.Range.plusRange(r,o);continue}n!==null&&this._renderNormalDecoration(p,r,n,u,t,a,i,v),n=s,t=l,r=o,u=(b=d.options.shouldFillLineOnLineBreak)!==null&&b!==void 0?b:!1}n!==null&&this._renderNormalDecoration(p,r,n,u,t,a,i,v)}_renderNormalDecoration(p,_,v,b,a,i,n,t){const r=p.linesVisibleRangesForRange(_,v===\"findMatch\");if(r)for(let u=0,f=r.length;u<f;u++){const c=r[u];if(c.outsideRenderedLine)continue;const d=c.lineNumber-n;if(a&&c.ranges.length===1){const s=c.ranges[0];if(s.width<this._typicalHalfwidthCharacterWidth){const l=Math.round(s.left+s.width/2),o=Math.max(0,Math.round(l-this._typicalHalfwidthCharacterWidth/2));c.ranges[0]=new k.HorizontalRange(o,this._typicalHalfwidthCharacterWidth)}}for(let s=0,l=c.ranges.length;s<l;s++){const o=b&&c.continuesOnNextLine&&l===1,g=c.ranges[s],h='<div class=\"cdr '+v+'\" style=\"left:'+String(g.left)+(o?\"px;width:100%;height:\":\"px;width:\"+String(g.width)+\"px;height:\")+i+'px;\"></div>';t[d]+=h}}}render(p,_){if(!this._renderResult)return\"\";const v=_-p;return v<0||v>=this._renderResult.length?\"\":this._renderResult[v]}}e.DecorationsOverlay=E}),define(se[213],oe([1,0,40,13,115,56,10,5,41,433]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.GlyphMarginWidgets=e.DedupOverlay=e.VisibleLineDecorationsToRender=e.LineDecorationToRender=e.DecorationToRender=void 0;class v{constructor(c,d,s,l,o){this.startLineNumber=c,this.endLineNumber=d,this.className=s,this.tooltip=l,this._decorationToRenderBrand=void 0,this.zIndex=o??0}}e.DecorationToRender=v;class b{constructor(c,d,s){this.className=c,this.zIndex=d,this.tooltip=s}}e.LineDecorationToRender=b;class a{constructor(){this.decorations=[]}add(c){this.decorations.push(c)}getDecorations(){return this.decorations}}e.VisibleLineDecorationsToRender=a;class i extends y.DynamicViewOverlay{_render(c,d,s){const l=[];for(let h=c;h<=d;h++){const m=h-c;l[m]=new a}if(s.length===0)return l;s.sort((h,m)=>h.className===m.className?h.startLineNumber===m.startLineNumber?h.endLineNumber-m.endLineNumber:h.startLineNumber-m.startLineNumber:h.className<m.className?-1:1);let o=null,g=0;for(let h=0,m=s.length;h<m;h++){const C=s[h],w=C.className,D=C.zIndex;let I=Math.max(C.startLineNumber,c)-c;const T=Math.min(C.endLineNumber,d)-c;o===w?(I=Math.max(g+1,I),g=Math.max(g,T)):(o=w,g=T);for(let A=I;A<=g;A++)l[A].add(new b(w,D,C.tooltip))}return l}}e.DedupOverlay=i;class n extends E.ViewPart{constructor(c){super(c),this._widgets={},this._context=c;const d=this._context.configuration.options,s=d.get(143);this.domNode=(0,L.createFastDomNode)(document.createElement(\"div\")),this.domNode.setClassName(\"glyph-margin-widgets\"),this.domNode.setPosition(\"absolute\"),this.domNode.setTop(0),this._lineHeight=d.get(66),this._glyphMargin=d.get(57),this._glyphMarginLeft=s.glyphMarginLeft,this._glyphMarginWidth=s.glyphMarginWidth,this._glyphMarginDecorationLaneCount=s.glyphMarginDecorationLaneCount,this._managedDomNodes=[],this._decorationGlyphsToRender=[]}dispose(){this._managedDomNodes=[],this._decorationGlyphsToRender=[],this._widgets={},super.dispose()}getWidgets(){return Object.values(this._widgets)}onConfigurationChanged(c){const d=this._context.configuration.options,s=d.get(143);return this._lineHeight=d.get(66),this._glyphMargin=d.get(57),this._glyphMarginLeft=s.glyphMarginLeft,this._glyphMarginWidth=s.glyphMarginWidth,this._glyphMarginDecorationLaneCount=s.glyphMarginDecorationLaneCount,!0}onDecorationsChanged(c){return!0}onFlushed(c){return!0}onLinesChanged(c){return!0}onLinesDeleted(c){return!0}onLinesInserted(c){return!0}onScrollChanged(c){return c.scrollTopChanged}onZonesChanged(c){return!0}addWidget(c){const d=(0,L.createFastDomNode)(c.getDomNode());this._widgets[c.getId()]={widget:c,preference:c.getPosition(),domNode:d,renderInfo:null},d.setPosition(\"absolute\"),d.setDisplay(\"none\"),d.setAttribute(\"widgetId\",c.getId()),this.domNode.appendChild(d),this.setShouldRender()}setWidgetPosition(c,d){const s=this._widgets[c.getId()];return s.preference.lane===d.lane&&s.preference.zIndex===d.zIndex&&p.Range.equalsRange(s.preference.range,d.range)?!1:(s.preference=d,this.setShouldRender(),!0)}removeWidget(c){var d;const s=c.getId();if(this._widgets[s]){const o=this._widgets[s].domNode.domNode;delete this._widgets[s],(d=o.parentNode)===null||d===void 0||d.removeChild(o),this.setShouldRender()}}_collectDecorationBasedGlyphRenderRequest(c,d){var s,l,o;const g=c.visibleRange.startLineNumber,h=c.visibleRange.endLineNumber,m=c.getDecorationsInViewport();for(const C of m){const w=C.options.glyphMarginClassName;if(!w)continue;const D=Math.max(C.range.startLineNumber,g),I=Math.min(C.range.endLineNumber,h),T=(l=(s=C.options.glyphMargin)===null||s===void 0?void 0:s.position)!==null&&l!==void 0?l:_.GlyphMarginLane.Center,A=(o=C.options.zIndex)!==null&&o!==void 0?o:0;for(let P=D;P<=I;P++){const N=this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new S.Position(P,0)),M=this._context.viewModel.glyphLanes.getLanesAtLine(N.lineNumber).indexOf(T);d.push(new t(P,M,A,w))}}}_collectWidgetBasedGlyphRenderRequest(c,d){const s=c.visibleRange.startLineNumber,l=c.visibleRange.endLineNumber;for(const o of Object.values(this._widgets)){const g=o.preference.range,{startLineNumber:h,endLineNumber:m}=this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(p.Range.lift(g));if(!h||!m||m<s||h>l)continue;const C=Math.max(h,s),w=this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new S.Position(C,0)),D=this._context.viewModel.glyphLanes.getLanesAtLine(w.lineNumber).indexOf(o.preference.lane);d.push(new r(C,D,o.preference.zIndex,o))}}_collectSortedGlyphRenderRequests(c){const d=[];return this._collectDecorationBasedGlyphRenderRequest(c,d),this._collectWidgetBasedGlyphRenderRequest(c,d),d.sort((s,l)=>s.lineNumber===l.lineNumber?s.laneIndex===l.laneIndex?s.zIndex===l.zIndex?l.type===s.type?s.type===0&&l.type===0?s.className<l.className?-1:1:0:l.type-s.type:l.zIndex-s.zIndex:s.laneIndex-l.laneIndex:s.lineNumber-l.lineNumber),d}prepareRender(c){if(!this._glyphMargin){this._decorationGlyphsToRender=[];return}for(const l of Object.values(this._widgets))l.renderInfo=null;const d=new k.ArrayQueue(this._collectSortedGlyphRenderRequests(c)),s=[];for(;d.length>0;){const l=d.peek();if(!l)break;const o=d.takeWhile(h=>h.lineNumber===l.lineNumber&&h.laneIndex===l.laneIndex);if(!o||o.length===0)break;const g=o[0];if(g.type===0){const h=[];for(const m of o){if(m.zIndex!==g.zIndex||m.type!==g.type)break;(h.length===0||h[h.length-1]!==m.className)&&h.push(m.className)}s.push(g.accept(h.join(\" \")))}else g.widget.renderInfo={lineNumber:g.lineNumber,laneIndex:g.laneIndex}}this._decorationGlyphsToRender=s}render(c){if(!this._glyphMargin){for(const s of Object.values(this._widgets))s.domNode.setDisplay(\"none\");for(;this._managedDomNodes.length>0;){const s=this._managedDomNodes.pop();s?.domNode.remove()}return}const d=Math.round(this._glyphMarginWidth/this._glyphMarginDecorationLaneCount);for(const s of Object.values(this._widgets))if(!s.renderInfo)s.domNode.setDisplay(\"none\");else{const l=c.viewportData.relativeVerticalOffset[s.renderInfo.lineNumber-c.viewportData.startLineNumber],o=this._glyphMarginLeft+s.renderInfo.laneIndex*this._lineHeight;s.domNode.setDisplay(\"block\"),s.domNode.setTop(l),s.domNode.setLeft(o),s.domNode.setWidth(d),s.domNode.setHeight(this._lineHeight)}for(let s=0;s<this._decorationGlyphsToRender.length;s++){const l=this._decorationGlyphsToRender[s],o=c.viewportData.relativeVerticalOffset[l.lineNumber-c.viewportData.startLineNumber],g=this._glyphMarginLeft+l.laneIndex*this._lineHeight;let h;s<this._managedDomNodes.length?h=this._managedDomNodes[s]:(h=(0,L.createFastDomNode)(document.createElement(\"div\")),this._managedDomNodes.push(h),this.domNode.appendChild(h)),h.setClassName(\"cgmr codicon \"+l.combinedClassName),h.setPosition(\"absolute\"),h.setTop(o),h.setLeft(g),h.setWidth(d),h.setHeight(this._lineHeight)}for(;this._managedDomNodes.length>this._decorationGlyphsToRender.length;){const s=this._managedDomNodes.pop();s?.domNode.remove()}}}e.GlyphMarginWidgets=n;class t{constructor(c,d,s,l){this.lineNumber=c,this.laneIndex=d,this.zIndex=s,this.className=l,this.type=0}accept(c){return new u(this.lineNumber,this.laneIndex,c)}}class r{constructor(c,d,s,l){this.lineNumber=c,this.laneIndex=d,this.zIndex=s,this.widget=l,this.type=1}}class u{constructor(c,d,s){this.lineNumber=c,this.laneIndex=d,this.combinedClassName=s}}}),define(se[538],oe([1,0,213,437]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LinesDecorationsOverlay=void 0;class k extends L.DedupOverlay{constructor(E){super(),this._context=E;const p=this._context.configuration.options.get(143);this._decorationsLeft=p.decorationsLeft,this._decorationsWidth=p.decorationsWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(E){const p=this._context.configuration.options.get(143);return this._decorationsLeft=p.decorationsLeft,this._decorationsWidth=p.decorationsWidth,!0}onDecorationsChanged(E){return!0}onFlushed(E){return!0}onLinesChanged(E){return!0}onLinesDeleted(E){return!0}onLinesInserted(E){return!0}onScrollChanged(E){return E.scrollTopChanged}onZonesChanged(E){return!0}_getDecorations(E){var S,p;const _=E.getDecorationsInViewport(),v=[];let b=0;for(let a=0,i=_.length;a<i;a++){const n=_[a],t=n.options.linesDecorationsClassName,r=n.options.zIndex;t&&(v[b++]=new L.DecorationToRender(n.range.startLineNumber,n.range.endLineNumber,t,(S=n.options.linesDecorationsTooltip)!==null&&S!==void 0?S:null,r));const u=n.options.firstLineDecorationClassName;u&&(v[b++]=new L.DecorationToRender(n.range.startLineNumber,n.range.startLineNumber,u,(p=n.options.linesDecorationsTooltip)!==null&&p!==void 0?p:null,r))}return v}prepareRender(E){const S=E.visibleRange.startLineNumber,p=E.visibleRange.endLineNumber,_=this._render(S,p,this._getDecorations(E)),v=this._decorationsLeft.toString(),b=this._decorationsWidth.toString(),a='\" style=\"left:'+v+\"px;width:\"+b+'px;\"></div>',i=[];for(let n=S;n<=p;n++){const t=n-S,r=_[t].getDecorations();let u=\"\";for(const f of r){let c='<div class=\"cldr '+f.className;f.tooltip!==null&&(c+='\" title=\"'+f.tooltip),c+=a,u+=c}i[t]=u}this._renderResult=i}render(E,S){return this._renderResult?this._renderResult[S-E]:\"\"}}e.LinesDecorationsOverlay=k}),define(se[299],oe([1,0,40,56,438]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Margin=void 0;class y extends k.ViewPart{constructor(S){super(S);const p=this._context.configuration.options,_=p.get(143);this._canUseLayerHinting=!p.get(32),this._contentLeft=_.contentLeft,this._glyphMarginLeft=_.glyphMarginLeft,this._glyphMarginWidth=_.glyphMarginWidth,this._domNode=(0,L.createFastDomNode)(document.createElement(\"div\")),this._domNode.setClassName(y.OUTER_CLASS_NAME),this._domNode.setPosition(\"absolute\"),this._domNode.setAttribute(\"role\",\"presentation\"),this._domNode.setAttribute(\"aria-hidden\",\"true\"),this._glyphMarginBackgroundDomNode=(0,L.createFastDomNode)(document.createElement(\"div\")),this._glyphMarginBackgroundDomNode.setClassName(y.CLASS_NAME),this._domNode.appendChild(this._glyphMarginBackgroundDomNode)}dispose(){super.dispose()}getDomNode(){return this._domNode}onConfigurationChanged(S){const p=this._context.configuration.options,_=p.get(143);return this._canUseLayerHinting=!p.get(32),this._contentLeft=_.contentLeft,this._glyphMarginLeft=_.glyphMarginLeft,this._glyphMarginWidth=_.glyphMarginWidth,!0}onScrollChanged(S){return super.onScrollChanged(S)||S.scrollTopChanged}prepareRender(S){}render(S){this._domNode.setLayerHinting(this._canUseLayerHinting),this._domNode.setContain(\"strict\");const p=S.scrollTop-S.bigNumbersDelta;this._domNode.setTop(-p);const _=Math.min(S.scrollHeight,1e6);this._domNode.setHeight(_),this._domNode.setWidth(this._contentLeft),this._glyphMarginBackgroundDomNode.setLeft(this._glyphMarginLeft),this._glyphMarginBackgroundDomNode.setWidth(this._glyphMarginWidth),this._glyphMarginBackgroundDomNode.setHeight(_)}}e.Margin=y,y.CLASS_NAME=\"glyph-margin\",y.OUTER_CLASS_NAME=\"margin\"}),define(se[539],oe([1,0,213,439]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MarginViewLineDecorationsOverlay=void 0;class k extends L.DedupOverlay{constructor(E){super(),this._context=E,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(E){return!0}onDecorationsChanged(E){return!0}onFlushed(E){return!0}onLinesChanged(E){return!0}onLinesDeleted(E){return!0}onLinesInserted(E){return!0}onScrollChanged(E){return E.scrollTopChanged}onZonesChanged(E){return!0}_getDecorations(E){const S=E.getDecorationsInViewport(),p=[];let _=0;for(let v=0,b=S.length;v<b;v++){const a=S[v],i=a.options.marginClassName,n=a.options.zIndex;i&&(p[_++]=new L.DecorationToRender(a.range.startLineNumber,a.range.endLineNumber,i,null,n))}return p}prepareRender(E){const S=E.visibleRange.startLineNumber,p=E.visibleRange.endLineNumber,_=this._render(S,p,this._getDecorations(E)),v=[];for(let b=S;b<=p;b++){const a=b-S,i=_[a].getDecorations();let n=\"\";for(const t of i)n+='<div class=\"cmdr '+t.className+'\" style=\"\"></div>';v[a]=n}this._renderResult=v}render(E,S){return this._renderResult?this._renderResult[S-E]:\"\"}}e.MarginViewLineDecorationsOverlay=k}),define(se[540],oe([1,0,40,56,442]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Rulers=void 0;class y extends k.ViewPart{constructor(S){super(S),this.domNode=(0,L.createFastDomNode)(document.createElement(\"div\")),this.domNode.setAttribute(\"role\",\"presentation\"),this.domNode.setAttribute(\"aria-hidden\",\"true\"),this.domNode.setClassName(\"view-rulers\"),this._renderedRulers=[];const p=this._context.configuration.options;this._rulers=p.get(101),this._typicalHalfwidthCharacterWidth=p.get(50).typicalHalfwidthCharacterWidth}dispose(){super.dispose()}onConfigurationChanged(S){const p=this._context.configuration.options;return this._rulers=p.get(101),this._typicalHalfwidthCharacterWidth=p.get(50).typicalHalfwidthCharacterWidth,!0}onScrollChanged(S){return S.scrollHeightChanged}prepareRender(S){}_ensureRulersCount(){const S=this._renderedRulers.length,p=this._rulers.length;if(S===p)return;if(S<p){const{tabSize:v}=this._context.viewModel.model.getOptions(),b=v;let a=p-S;for(;a>0;){const i=(0,L.createFastDomNode)(document.createElement(\"div\"));i.setClassName(\"view-ruler\"),i.setWidth(b),this.domNode.appendChild(i),this._renderedRulers.push(i),a--}return}let _=S-p;for(;_>0;){const v=this._renderedRulers.pop();this.domNode.removeChild(v),_--}}render(S){this._ensureRulersCount();for(let p=0,_=this._rulers.length;p<_;p++){const v=this._renderedRulers[p],b=this._rulers[p];v.setBoxShadow(b.color?`1px 0 0 0 ${b.color} inset`:\"\"),v.setHeight(Math.min(S.scrollHeight,1e6)),v.setLeft(b.column*this._typicalHalfwidthCharacterWidth)}}}e.Rulers=y}),define(se[541],oe([1,0,40,56,443]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ScrollDecorationViewPart=void 0;class y extends k.ViewPart{constructor(S){super(S),this._scrollTop=0,this._width=0,this._updateWidth(),this._shouldShow=!1;const _=this._context.configuration.options.get(102);this._useShadows=_.useShadows,this._domNode=(0,L.createFastDomNode)(document.createElement(\"div\")),this._domNode.setAttribute(\"role\",\"presentation\"),this._domNode.setAttribute(\"aria-hidden\",\"true\")}dispose(){super.dispose()}_updateShouldShow(){const S=this._useShadows&&this._scrollTop>0;return this._shouldShow!==S?(this._shouldShow=S,!0):!1}getDomNode(){return this._domNode}_updateWidth(){const p=this._context.configuration.options.get(143);p.minimap.renderMinimap===0||p.minimap.minimapWidth>0&&p.minimap.minimapLeft===0?this._width=p.width:this._width=p.width-p.verticalScrollbarWidth}onConfigurationChanged(S){const _=this._context.configuration.options.get(102);return this._useShadows=_.useShadows,this._updateWidth(),this._updateShouldShow(),!0}onScrollChanged(S){return this._scrollTop=S.scrollTop,this._updateShouldShow()}prepareRender(S){}render(S){this._domNode.setWidth(this._width),this._domNode.setClassName(this._shouldShow?\"scroll-decoration\":\"\")}}e.ScrollDecorationViewPart=y}),define(se[542],oe([1,0,40,12,56,10]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewZones=void 0;const S=()=>{throw new Error(\"Invalid change accessor\")};class p extends y.ViewPart{constructor(b){super(b);const a=this._context.configuration.options,i=a.get(143);this._lineHeight=a.get(66),this._contentWidth=i.contentWidth,this._contentLeft=i.contentLeft,this.domNode=(0,L.createFastDomNode)(document.createElement(\"div\")),this.domNode.setClassName(\"view-zones\"),this.domNode.setPosition(\"absolute\"),this.domNode.setAttribute(\"role\",\"presentation\"),this.domNode.setAttribute(\"aria-hidden\",\"true\"),this.marginDomNode=(0,L.createFastDomNode)(document.createElement(\"div\")),this.marginDomNode.setClassName(\"margin-view-zones\"),this.marginDomNode.setPosition(\"absolute\"),this.marginDomNode.setAttribute(\"role\",\"presentation\"),this.marginDomNode.setAttribute(\"aria-hidden\",\"true\"),this._zones={}}dispose(){super.dispose(),this._zones={}}_recomputeWhitespacesProps(){const b=this._context.viewLayout.getWhitespaces(),a=new Map;for(const n of b)a.set(n.id,n);let i=!1;return this._context.viewModel.changeWhitespace(n=>{const t=Object.keys(this._zones);for(let r=0,u=t.length;r<u;r++){const f=t[r],c=this._zones[f],d=this._computeWhitespaceProps(c.delegate);c.isInHiddenArea=d.isInHiddenArea;const s=a.get(f);s&&(s.afterLineNumber!==d.afterViewLineNumber||s.height!==d.heightInPx)&&(n.changeOneWhitespace(f,d.afterViewLineNumber,d.heightInPx),this._safeCallOnComputedHeight(c.delegate,d.heightInPx),i=!0)}}),i}onConfigurationChanged(b){const a=this._context.configuration.options,i=a.get(143);return this._lineHeight=a.get(66),this._contentWidth=i.contentWidth,this._contentLeft=i.contentLeft,b.hasChanged(66)&&this._recomputeWhitespacesProps(),!0}onLineMappingChanged(b){return this._recomputeWhitespacesProps()}onLinesDeleted(b){return!0}onScrollChanged(b){return b.scrollTopChanged||b.scrollWidthChanged}onZonesChanged(b){return!0}onLinesInserted(b){return!0}_getZoneOrdinal(b){var a,i;return(i=(a=b.ordinal)!==null&&a!==void 0?a:b.afterColumn)!==null&&i!==void 0?i:1e4}_computeWhitespaceProps(b){if(b.afterLineNumber===0)return{isInHiddenArea:!1,afterViewLineNumber:0,heightInPx:this._heightInPixels(b),minWidthInPx:this._minWidthInPixels(b)};let a;if(typeof b.afterColumn<\"u\")a=this._context.viewModel.model.validatePosition({lineNumber:b.afterLineNumber,column:b.afterColumn});else{const r=this._context.viewModel.model.validatePosition({lineNumber:b.afterLineNumber,column:1}).lineNumber;a=new E.Position(r,this._context.viewModel.model.getLineMaxColumn(r))}let i;a.column===this._context.viewModel.model.getLineMaxColumn(a.lineNumber)?i=this._context.viewModel.model.validatePosition({lineNumber:a.lineNumber+1,column:1}):i=this._context.viewModel.model.validatePosition({lineNumber:a.lineNumber,column:a.column+1});const n=this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(a,b.afterColumnAffinity,!0),t=b.showInHiddenAreas||this._context.viewModel.coordinatesConverter.modelPositionIsVisible(i);return{isInHiddenArea:!t,afterViewLineNumber:n.lineNumber,heightInPx:t?this._heightInPixels(b):0,minWidthInPx:this._minWidthInPixels(b)}}changeViewZones(b){let a=!1;return this._context.viewModel.changeWhitespace(i=>{const n={addZone:t=>(a=!0,this._addZone(i,t)),removeZone:t=>{t&&(a=this._removeZone(i,t)||a)},layoutZone:t=>{t&&(a=this._layoutZone(i,t)||a)}};_(b,n),n.addZone=S,n.removeZone=S,n.layoutZone=S}),a}_addZone(b,a){const i=this._computeWhitespaceProps(a),t={whitespaceId:b.insertWhitespace(i.afterViewLineNumber,this._getZoneOrdinal(a),i.heightInPx,i.minWidthInPx),delegate:a,isInHiddenArea:i.isInHiddenArea,isVisible:!1,domNode:(0,L.createFastDomNode)(a.domNode),marginDomNode:a.marginDomNode?(0,L.createFastDomNode)(a.marginDomNode):null};return this._safeCallOnComputedHeight(t.delegate,i.heightInPx),t.domNode.setPosition(\"absolute\"),t.domNode.domNode.style.width=\"100%\",t.domNode.setDisplay(\"none\"),t.domNode.setAttribute(\"monaco-view-zone\",t.whitespaceId),this.domNode.appendChild(t.domNode),t.marginDomNode&&(t.marginDomNode.setPosition(\"absolute\"),t.marginDomNode.domNode.style.width=\"100%\",t.marginDomNode.setDisplay(\"none\"),t.marginDomNode.setAttribute(\"monaco-view-zone\",t.whitespaceId),this.marginDomNode.appendChild(t.marginDomNode)),this._zones[t.whitespaceId]=t,this.setShouldRender(),t.whitespaceId}_removeZone(b,a){if(this._zones.hasOwnProperty(a)){const i=this._zones[a];return delete this._zones[a],b.removeWhitespace(i.whitespaceId),i.domNode.removeAttribute(\"monaco-visible-view-zone\"),i.domNode.removeAttribute(\"monaco-view-zone\"),i.domNode.domNode.parentNode.removeChild(i.domNode.domNode),i.marginDomNode&&(i.marginDomNode.removeAttribute(\"monaco-visible-view-zone\"),i.marginDomNode.removeAttribute(\"monaco-view-zone\"),i.marginDomNode.domNode.parentNode.removeChild(i.marginDomNode.domNode)),this.setShouldRender(),!0}return!1}_layoutZone(b,a){if(this._zones.hasOwnProperty(a)){const i=this._zones[a],n=this._computeWhitespaceProps(i.delegate);return i.isInHiddenArea=n.isInHiddenArea,b.changeOneWhitespace(i.whitespaceId,n.afterViewLineNumber,n.heightInPx),this._safeCallOnComputedHeight(i.delegate,n.heightInPx),this.setShouldRender(),!0}return!1}shouldSuppressMouseDownOnViewZone(b){return this._zones.hasOwnProperty(b)?!!this._zones[b].delegate.suppressMouseDown:!1}_heightInPixels(b){return typeof b.heightInPx==\"number\"?b.heightInPx:typeof b.heightInLines==\"number\"?this._lineHeight*b.heightInLines:this._lineHeight}_minWidthInPixels(b){return typeof b.minWidthInPx==\"number\"?b.minWidthInPx:0}_safeCallOnComputedHeight(b,a){if(typeof b.onComputedHeight==\"function\")try{b.onComputedHeight(a)}catch(i){(0,k.onUnexpectedError)(i)}}_safeCallOnDomNodeTop(b,a){if(typeof b.onDomNodeTop==\"function\")try{b.onDomNodeTop(a)}catch(i){(0,k.onUnexpectedError)(i)}}prepareRender(b){}render(b){const a=b.viewportData.whitespaceViewportData,i={};let n=!1;for(const r of a)this._zones[r.id].isInHiddenArea||(i[r.id]=r,n=!0);const t=Object.keys(this._zones);for(let r=0,u=t.length;r<u;r++){const f=t[r],c=this._zones[f];let d=0,s=0,l=\"none\";i.hasOwnProperty(f)?(d=i[f].verticalOffset-b.bigNumbersDelta,s=i[f].height,l=\"block\",c.isVisible||(c.domNode.setAttribute(\"monaco-visible-view-zone\",\"true\"),c.isVisible=!0),this._safeCallOnDomNodeTop(c.delegate,b.getScrolledTopFromAbsoluteTop(i[f].verticalOffset))):(c.isVisible&&(c.domNode.removeAttribute(\"monaco-visible-view-zone\"),c.isVisible=!1),this._safeCallOnDomNodeTop(c.delegate,b.getScrolledTopFromAbsoluteTop(-1e6))),c.domNode.setTop(d),c.domNode.setHeight(s),c.domNode.setDisplay(l),c.marginDomNode&&(c.marginDomNode.setTop(d),c.marginDomNode.setHeight(s),c.marginDomNode.setDisplay(l))}n&&(this.domNode.setWidth(Math.max(b.scrollWidth,this._contentWidth)),this.marginDomNode.setWidth(this._contentLeft))}}e.ViewZones=p;function _(v,b){try{return v(b)}catch(a){(0,k.onUnexpectedError)(a)}}}),define(se[214],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewZonesChangedEvent=e.ViewTokensColorsChangedEvent=e.ViewTokensChangedEvent=e.ViewThemeChangedEvent=e.ViewScrollChangedEvent=e.ViewRevealRangeRequestEvent=e.ViewLinesInsertedEvent=e.ViewLinesDeletedEvent=e.ViewLinesChangedEvent=e.ViewLineMappingChangedEvent=e.ViewLanguageConfigurationEvent=e.ViewFocusChangedEvent=e.ViewFlushedEvent=e.ViewDecorationsChangedEvent=e.ViewCursorStateChangedEvent=e.ViewConfigurationChangedEvent=e.ViewCompositionEndEvent=e.ViewCompositionStartEvent=void 0;class L{constructor(){this.type=0}}e.ViewCompositionStartEvent=L;class k{constructor(){this.type=1}}e.ViewCompositionEndEvent=k;class y{constructor(l){this.type=2,this._source=l}hasChanged(l){return this._source.hasChanged(l)}}e.ViewConfigurationChangedEvent=y;class E{constructor(l,o,g){this.selections=l,this.modelSelections=o,this.reason=g,this.type=3}}e.ViewCursorStateChangedEvent=E;class S{constructor(l){this.type=4,l?(this.affectsMinimap=l.affectsMinimap,this.affectsOverviewRuler=l.affectsOverviewRuler,this.affectsGlyphMargin=l.affectsGlyphMargin,this.affectsLineNumber=l.affectsLineNumber):(this.affectsMinimap=!0,this.affectsOverviewRuler=!0,this.affectsGlyphMargin=!0,this.affectsLineNumber=!0)}}e.ViewDecorationsChangedEvent=S;class p{constructor(){this.type=5}}e.ViewFlushedEvent=p;class _{constructor(l){this.type=6,this.isFocused=l}}e.ViewFocusChangedEvent=_;class v{constructor(){this.type=7}}e.ViewLanguageConfigurationEvent=v;class b{constructor(){this.type=8}}e.ViewLineMappingChangedEvent=b;class a{constructor(l,o){this.fromLineNumber=l,this.count=o,this.type=9}}e.ViewLinesChangedEvent=a;class i{constructor(l,o){this.type=10,this.fromLineNumber=l,this.toLineNumber=o}}e.ViewLinesDeletedEvent=i;class n{constructor(l,o){this.type=11,this.fromLineNumber=l,this.toLineNumber=o}}e.ViewLinesInsertedEvent=n;class t{constructor(l,o,g,h,m,C,w){this.source=l,this.minimalReveal=o,this.range=g,this.selections=h,this.verticalType=m,this.revealHorizontal=C,this.scrollType=w,this.type=12}}e.ViewRevealRangeRequestEvent=t;class r{constructor(l){this.type=13,this.scrollWidth=l.scrollWidth,this.scrollLeft=l.scrollLeft,this.scrollHeight=l.scrollHeight,this.scrollTop=l.scrollTop,this.scrollWidthChanged=l.scrollWidthChanged,this.scrollLeftChanged=l.scrollLeftChanged,this.scrollHeightChanged=l.scrollHeightChanged,this.scrollTopChanged=l.scrollTopChanged}}e.ViewScrollChangedEvent=r;class u{constructor(l){this.theme=l,this.type=14}}e.ViewThemeChangedEvent=u;class f{constructor(l){this.type=15,this.ranges=l}}e.ViewTokensChangedEvent=f;class c{constructor(){this.type=16}}e.ViewTokensColorsChangedEvent=c;class d{constructor(){this.type=17}}e.ViewZonesChangedEvent=d}),define(se[155],oe([1,0,11]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LineDecorationsNormalizer=e.DecorationSegment=e.LineDecoration=void 0;class k{constructor(_,v,b,a){this.startColumn=_,this.endColumn=v,this.className=b,this.type=a,this._lineDecorationBrand=void 0}static _equals(_,v){return _.startColumn===v.startColumn&&_.endColumn===v.endColumn&&_.className===v.className&&_.type===v.type}static equalsArr(_,v){const b=_.length,a=v.length;if(b!==a)return!1;for(let i=0;i<b;i++)if(!k._equals(_[i],v[i]))return!1;return!0}static extractWrapped(_,v,b){if(_.length===0)return _;const a=v+1,i=b+1,n=b-v,t=[];let r=0;for(const u of _)u.endColumn<=a||u.startColumn>=i||(t[r++]=new k(Math.max(1,u.startColumn-a+1),Math.min(n+1,u.endColumn-a+1),u.className,u.type));return t}static filter(_,v,b,a){if(_.length===0)return[];const i=[];let n=0;for(let t=0,r=_.length;t<r;t++){const u=_[t],f=u.range;if(f.endLineNumber<v||f.startLineNumber>v||f.isEmpty()&&(u.type===0||u.type===3))continue;const c=f.startLineNumber===v?f.startColumn:b,d=f.endLineNumber===v?f.endColumn:a;i[n++]=new k(c,d,u.inlineClassName,u.type)}return i}static _typeCompare(_,v){const b=[2,0,1,3];return b[_]-b[v]}static compare(_,v){if(_.startColumn!==v.startColumn)return _.startColumn-v.startColumn;if(_.endColumn!==v.endColumn)return _.endColumn-v.endColumn;const b=k._typeCompare(_.type,v.type);return b!==0?b:_.className!==v.className?_.className<v.className?-1:1:0}}e.LineDecoration=k;class y{constructor(_,v,b,a){this.startOffset=_,this.endOffset=v,this.className=b,this.metadata=a}}e.DecorationSegment=y;class E{constructor(){this.stopOffsets=[],this.classNames=[],this.metadata=[],this.count=0}static _metadata(_){let v=0;for(let b=0,a=_.length;b<a;b++)v|=_[b];return v}consumeLowerThan(_,v,b){for(;this.count>0&&this.stopOffsets[0]<_;){let a=0;for(;a+1<this.count&&this.stopOffsets[a]===this.stopOffsets[a+1];)a++;b.push(new y(v,this.stopOffsets[a],this.classNames.join(\" \"),E._metadata(this.metadata))),v=this.stopOffsets[a]+1,this.stopOffsets.splice(0,a+1),this.classNames.splice(0,a+1),this.metadata.splice(0,a+1),this.count-=a+1}return this.count>0&&v<_&&(b.push(new y(v,_-1,this.classNames.join(\" \"),E._metadata(this.metadata))),v=_),v}insert(_,v,b){if(this.count===0||this.stopOffsets[this.count-1]<=_)this.stopOffsets.push(_),this.classNames.push(v),this.metadata.push(b);else for(let a=0;a<this.count;a++)if(this.stopOffsets[a]>=_){this.stopOffsets.splice(a,0,_),this.classNames.splice(a,0,v),this.metadata.splice(a,0,b);break}this.count++}}class S{static normalize(_,v){if(v.length===0)return[];const b=[],a=new E;let i=0;for(let n=0,t=v.length;n<t;n++){const r=v[n];let u=r.startColumn,f=r.endColumn;const c=r.className,d=r.type===1?2:r.type===2?4:0;if(u>1){const o=_.charCodeAt(u-2);L.isHighSurrogate(o)&&u--}if(f>1){const o=_.charCodeAt(f-2);L.isHighSurrogate(o)&&f--}const s=u-1,l=f-2;i=a.consumeLowerThan(s,i,b),a.count===0&&(i=s),a.insert(l,c,d)}return a.consumeLowerThan(1073741824,i,b),b}}e.LineDecorationsNormalizer=S}),define(se[543],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LinePart=void 0;class L{constructor(y,E,S,p){this.endIndex=y,this.type=E,this.metadata=S,this.containsRTL=p,this._linePartBrand=void 0}isWhitespace(){return!!(this.metadata&1)}isPseudoAfter(){return!!(this.metadata&4)}}e.LinePart=L}),define(se[544],oe([1,0,11]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LinesLayout=e.EditorWhitespace=void 0;class k{constructor(){this._hasPending=!1,this._inserts=[],this._changes=[],this._removes=[]}insert(p){this._hasPending=!0,this._inserts.push(p)}change(p){this._hasPending=!0,this._changes.push(p)}remove(p){this._hasPending=!0,this._removes.push(p)}mustCommit(){return this._hasPending}commit(p){if(!this._hasPending)return;const _=this._inserts,v=this._changes,b=this._removes;this._hasPending=!1,this._inserts=[],this._changes=[],this._removes=[],p._commitPendingChanges(_,v,b)}}class y{constructor(p,_,v,b,a){this.id=p,this.afterLineNumber=_,this.ordinal=v,this.height=b,this.minWidth=a,this.prefixSum=0}}e.EditorWhitespace=y;class E{constructor(p,_,v,b){this._instanceId=L.singleLetterHash(++E.INSTANCE_COUNT),this._pendingChanges=new k,this._lastWhitespaceId=0,this._arr=[],this._prefixSumValidIndex=-1,this._minWidth=-1,this._lineCount=p,this._lineHeight=_,this._paddingTop=v,this._paddingBottom=b}static findInsertionIndex(p,_,v){let b=0,a=p.length;for(;b<a;){const i=b+a>>>1;_===p[i].afterLineNumber?v<p[i].ordinal?a=i:b=i+1:_<p[i].afterLineNumber?a=i:b=i+1}return b}setLineHeight(p){this._checkPendingChanges(),this._lineHeight=p}setPadding(p,_){this._paddingTop=p,this._paddingBottom=_}onFlushed(p){this._checkPendingChanges(),this._lineCount=p}changeWhitespace(p){let _=!1;try{p({insertWhitespace:(b,a,i,n)=>{_=!0,b=b|0,a=a|0,i=i|0,n=n|0;const t=this._instanceId+ ++this._lastWhitespaceId;return this._pendingChanges.insert(new y(t,b,a,i,n)),t},changeOneWhitespace:(b,a,i)=>{_=!0,a=a|0,i=i|0,this._pendingChanges.change({id:b,newAfterLineNumber:a,newHeight:i})},removeWhitespace:b=>{_=!0,this._pendingChanges.remove({id:b})}})}finally{this._pendingChanges.commit(this)}return _}_commitPendingChanges(p,_,v){if((p.length>0||v.length>0)&&(this._minWidth=-1),p.length+_.length+v.length<=1){for(const t of p)this._insertWhitespace(t);for(const t of _)this._changeOneWhitespace(t.id,t.newAfterLineNumber,t.newHeight);for(const t of v){const r=this._findWhitespaceIndex(t.id);r!==-1&&this._removeWhitespace(r)}return}const b=new Set;for(const t of v)b.add(t.id);const a=new Map;for(const t of _)a.set(t.id,t);const i=t=>{const r=[];for(const u of t)if(!b.has(u.id)){if(a.has(u.id)){const f=a.get(u.id);u.afterLineNumber=f.newAfterLineNumber,u.height=f.newHeight}r.push(u)}return r},n=i(this._arr).concat(i(p));n.sort((t,r)=>t.afterLineNumber===r.afterLineNumber?t.ordinal-r.ordinal:t.afterLineNumber-r.afterLineNumber),this._arr=n,this._prefixSumValidIndex=-1}_checkPendingChanges(){this._pendingChanges.mustCommit()&&this._pendingChanges.commit(this)}_insertWhitespace(p){const _=E.findInsertionIndex(this._arr,p.afterLineNumber,p.ordinal);this._arr.splice(_,0,p),this._prefixSumValidIndex=Math.min(this._prefixSumValidIndex,_-1)}_findWhitespaceIndex(p){const _=this._arr;for(let v=0,b=_.length;v<b;v++)if(_[v].id===p)return v;return-1}_changeOneWhitespace(p,_,v){const b=this._findWhitespaceIndex(p);if(b!==-1&&(this._arr[b].height!==v&&(this._arr[b].height=v,this._prefixSumValidIndex=Math.min(this._prefixSumValidIndex,b-1)),this._arr[b].afterLineNumber!==_)){const a=this._arr[b];this._removeWhitespace(b),a.afterLineNumber=_,this._insertWhitespace(a)}}_removeWhitespace(p){this._arr.splice(p,1),this._prefixSumValidIndex=Math.min(this._prefixSumValidIndex,p-1)}onLinesDeleted(p,_){this._checkPendingChanges(),p=p|0,_=_|0,this._lineCount-=_-p+1;for(let v=0,b=this._arr.length;v<b;v++){const a=this._arr[v].afterLineNumber;p<=a&&a<=_?this._arr[v].afterLineNumber=p-1:a>_&&(this._arr[v].afterLineNumber-=_-p+1)}}onLinesInserted(p,_){this._checkPendingChanges(),p=p|0,_=_|0,this._lineCount+=_-p+1;for(let v=0,b=this._arr.length;v<b;v++){const a=this._arr[v].afterLineNumber;p<=a&&(this._arr[v].afterLineNumber+=_-p+1)}}getWhitespacesTotalHeight(){return this._checkPendingChanges(),this._arr.length===0?0:this.getWhitespacesAccumulatedHeight(this._arr.length-1)}getWhitespacesAccumulatedHeight(p){this._checkPendingChanges(),p=p|0;let _=Math.max(0,this._prefixSumValidIndex+1);_===0&&(this._arr[0].prefixSum=this._arr[0].height,_++);for(let v=_;v<=p;v++)this._arr[v].prefixSum=this._arr[v-1].prefixSum+this._arr[v].height;return this._prefixSumValidIndex=Math.max(this._prefixSumValidIndex,p),this._arr[p].prefixSum}getLinesTotalHeight(){this._checkPendingChanges();const p=this._lineHeight*this._lineCount,_=this.getWhitespacesTotalHeight();return p+_+this._paddingTop+this._paddingBottom}getWhitespaceAccumulatedHeightBeforeLineNumber(p){this._checkPendingChanges(),p=p|0;const _=this._findLastWhitespaceBeforeLineNumber(p);return _===-1?0:this.getWhitespacesAccumulatedHeight(_)}_findLastWhitespaceBeforeLineNumber(p){p=p|0;const _=this._arr;let v=0,b=_.length-1;for(;v<=b;){const i=(b-v|0)/2|0,n=v+i|0;if(_[n].afterLineNumber<p){if(n+1>=_.length||_[n+1].afterLineNumber>=p)return n;v=n+1|0}else b=n-1|0}return-1}_findFirstWhitespaceAfterLineNumber(p){p=p|0;const v=this._findLastWhitespaceBeforeLineNumber(p)+1;return v<this._arr.length?v:-1}getFirstWhitespaceIndexAfterLineNumber(p){return this._checkPendingChanges(),p=p|0,this._findFirstWhitespaceAfterLineNumber(p)}getVerticalOffsetForLineNumber(p,_=!1){this._checkPendingChanges(),p=p|0;let v;p>1?v=this._lineHeight*(p-1):v=0;const b=this.getWhitespaceAccumulatedHeightBeforeLineNumber(p-(_?1:0));return v+b+this._paddingTop}getVerticalOffsetAfterLineNumber(p,_=!1){this._checkPendingChanges(),p=p|0;const v=this._lineHeight*p,b=this.getWhitespaceAccumulatedHeightBeforeLineNumber(p+(_?1:0));return v+b+this._paddingTop}getWhitespaceMinWidth(){if(this._checkPendingChanges(),this._minWidth===-1){let p=0;for(let _=0,v=this._arr.length;_<v;_++)p=Math.max(p,this._arr[_].minWidth);this._minWidth=p}return this._minWidth}isAfterLines(p){this._checkPendingChanges();const _=this.getLinesTotalHeight();return p>_}isInTopPadding(p){return this._paddingTop===0?!1:(this._checkPendingChanges(),p<this._paddingTop)}isInBottomPadding(p){if(this._paddingBottom===0)return!1;this._checkPendingChanges();const _=this.getLinesTotalHeight();return p>=_-this._paddingBottom}getLineNumberAtOrAfterVerticalOffset(p){if(this._checkPendingChanges(),p=p|0,p<0)return 1;const _=this._lineCount|0,v=this._lineHeight;let b=1,a=_;for(;b<a;){const i=(b+a)/2|0,n=this.getVerticalOffsetForLineNumber(i)|0;if(p>=n+v)b=i+1;else{if(p>=n)return i;a=i}}return b>_?_:b}getLinesViewportData(p,_){this._checkPendingChanges(),p=p|0,_=_|0;const v=this._lineHeight,b=this.getLineNumberAtOrAfterVerticalOffset(p)|0,a=this.getVerticalOffsetForLineNumber(b)|0;let i=this._lineCount|0,n=this.getFirstWhitespaceIndexAfterLineNumber(b)|0;const t=this.getWhitespacesCount()|0;let r,u;n===-1?(n=t,u=i+1,r=0):(u=this.getAfterLineNumberForWhitespaceIndex(n)|0,r=this.getHeightForWhitespaceIndex(n)|0);let f=a,c=f;const d=5e5;let s=0;a>=d&&(s=Math.floor(a/d)*d,s=Math.floor(s/v)*v,c-=s);const l=[],o=p+(_-p)/2;let g=-1;for(let w=b;w<=i;w++){if(g===-1){const D=f,I=f+v;(D<=o&&o<I||D>o)&&(g=w)}for(f+=v,l[w-b]=c,c+=v;u===w;)c+=r,f+=r,n++,n>=t?u=i+1:(u=this.getAfterLineNumberForWhitespaceIndex(n)|0,r=this.getHeightForWhitespaceIndex(n)|0);if(f>=_){i=w;break}}g===-1&&(g=i);const h=this.getVerticalOffsetForLineNumber(i)|0;let m=b,C=i;return m<C&&a<p&&m++,m<C&&h+v>_&&C--,{bigNumbersDelta:s,startLineNumber:b,endLineNumber:i,relativeVerticalOffset:l,centeredLineNumber:g,completelyVisibleStartLineNumber:m,completelyVisibleEndLineNumber:C}}getVerticalOffsetForWhitespaceIndex(p){this._checkPendingChanges(),p=p|0;const _=this.getAfterLineNumberForWhitespaceIndex(p);let v;_>=1?v=this._lineHeight*_:v=0;let b;return p>0?b=this.getWhitespacesAccumulatedHeight(p-1):b=0,v+b+this._paddingTop}getWhitespaceIndexAtOrAfterVerticallOffset(p){this._checkPendingChanges(),p=p|0;let _=0,v=this.getWhitespacesCount()-1;if(v<0)return-1;const b=this.getVerticalOffsetForWhitespaceIndex(v),a=this.getHeightForWhitespaceIndex(v);if(p>=b+a)return-1;for(;_<v;){const i=Math.floor((_+v)/2),n=this.getVerticalOffsetForWhitespaceIndex(i),t=this.getHeightForWhitespaceIndex(i);if(p>=n+t)_=i+1;else{if(p>=n)return i;v=i}}return _}getWhitespaceAtVerticalOffset(p){this._checkPendingChanges(),p=p|0;const _=this.getWhitespaceIndexAtOrAfterVerticallOffset(p);if(_<0||_>=this.getWhitespacesCount())return null;const v=this.getVerticalOffsetForWhitespaceIndex(_);if(v>p)return null;const b=this.getHeightForWhitespaceIndex(_),a=this.getIdForWhitespaceIndex(_),i=this.getAfterLineNumberForWhitespaceIndex(_);return{id:a,afterLineNumber:i,verticalOffset:v,height:b}}getWhitespaceViewportData(p,_){this._checkPendingChanges(),p=p|0,_=_|0;const v=this.getWhitespaceIndexAtOrAfterVerticallOffset(p),b=this.getWhitespacesCount()-1;if(v<0)return[];const a=[];for(let i=v;i<=b;i++){const n=this.getVerticalOffsetForWhitespaceIndex(i),t=this.getHeightForWhitespaceIndex(i);if(n>=_)break;a.push({id:this.getIdForWhitespaceIndex(i),afterLineNumber:this.getAfterLineNumberForWhitespaceIndex(i),verticalOffset:n,height:t})}return a}getWhitespaces(){return this._checkPendingChanges(),this._arr.slice(0)}getWhitespacesCount(){return this._checkPendingChanges(),this._arr.length}getIdForWhitespaceIndex(p){return this._checkPendingChanges(),p=p|0,this._arr[p].id}getAfterLineNumberForWhitespaceIndex(p){return this._checkPendingChanges(),p=p|0,this._arr[p].afterLineNumber}getHeightForWhitespaceIndex(p){return this._checkPendingChanges(),p=p|0,this._arr[p].height}}e.LinesLayout=E,E.INSTANCE_COUNT=0}),define(se[545],oe([1,0,5]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewportData=void 0;class k{constructor(E,S,p,_){this.selections=E,this.startLineNumber=S.startLineNumber|0,this.endLineNumber=S.endLineNumber|0,this.relativeVerticalOffset=S.relativeVerticalOffset,this.bigNumbersDelta=S.bigNumbersDelta|0,this.whitespaceViewportData=p,this._model=_,this.visibleRange=new L.Range(S.startLineNumber,this._model.getLineMinColumn(S.startLineNumber),S.endLineNumber,this._model.getLineMaxColumn(S.endLineNumber))}getViewLineRenderingData(E){return this._model.getViewportViewLineRenderingData(this.visibleRange,E)}getDecorationsInViewport(){return this._model.getDecorationsInViewport(this.visibleRange)}}e.ViewportData=k}),define(se[86],oe([1,0,13,11,5]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OverviewRulerDecorationsGroup=e.ViewModelDecoration=e.SingleLineInlineDecoration=e.InlineDecoration=e.ViewLineRenderingData=e.ViewLineData=e.MinimapLinesRenderingData=e.Viewport=void 0;class E{constructor(t,r,u,f){this._viewportBrand=void 0,this.top=t|0,this.left=r|0,this.width=u|0,this.height=f|0}}e.Viewport=E;class S{constructor(t,r){this.tabSize=t,this.data=r}}e.MinimapLinesRenderingData=S;class p{constructor(t,r,u,f,c,d,s){this._viewLineDataBrand=void 0,this.content=t,this.continuesWithWrappedLine=r,this.minColumn=u,this.maxColumn=f,this.startVisibleColumn=c,this.tokens=d,this.inlineDecorations=s}}e.ViewLineData=p;class _{constructor(t,r,u,f,c,d,s,l,o,g){this.minColumn=t,this.maxColumn=r,this.content=u,this.continuesWithWrappedLine=f,this.isBasicASCII=_.isBasicASCII(u,d),this.containsRTL=_.containsRTL(u,this.isBasicASCII,c),this.tokens=s,this.inlineDecorations=l,this.tabSize=o,this.startVisibleColumn=g}static isBasicASCII(t,r){return r?k.isBasicASCII(t):!0}static containsRTL(t,r,u){return!r&&u?k.containsRTL(t):!1}}e.ViewLineRenderingData=_;class v{constructor(t,r,u){this.range=t,this.inlineClassName=r,this.type=u}}e.InlineDecoration=v;class b{constructor(t,r,u,f){this.startOffset=t,this.endOffset=r,this.inlineClassName=u,this.inlineClassNameAffectsLetterSpacing=f}toInlineDecoration(t){return new v(new y.Range(t,this.startOffset+1,t,this.endOffset+1),this.inlineClassName,this.inlineClassNameAffectsLetterSpacing?3:0)}}e.SingleLineInlineDecoration=b;class a{constructor(t,r){this._viewModelDecorationBrand=void 0,this.range=t,this.options=r}}e.ViewModelDecoration=a;class i{constructor(t,r,u){this.color=t,this.zIndex=r,this.data=u}static compareByRenderingProps(t,r){return t.zIndex===r.zIndex?t.color<r.color?-1:t.color>r.color?1:0:t.zIndex-r.zIndex}static equals(t,r){return t.color===r.color&&t.zIndex===r.zIndex&&L.equals(t.data,r.data)}static equalsArr(t,r){return L.equals(t,r,i.equals)}}e.OverviewRulerDecorationsGroup=i}),define(se[546],oe([1,0,41]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.GlyphMarginLanesModel=void 0;const k=L.GlyphMarginLane.Right;class y{constructor(S){this.persist=0,this._requiredLanes=1,this.lanes=new Uint8Array(Math.ceil((S+1)*k/8))}reset(S){const p=Math.ceil((S+1)*k/8);this.lanes.length<p?this.lanes=new Uint8Array(p):this.lanes.fill(0),this._requiredLanes=1}get requiredLanes(){return this._requiredLanes}push(S,p,_){_&&(this.persist|=1<<S-1);for(let v=p.startLineNumber;v<=p.endLineNumber;v++){const b=k*v+(S-1);this.lanes[b>>>3]|=1<<b%8,this._requiredLanes=Math.max(this._requiredLanes,this.countAtLine(v))}}getLanesAtLine(S){const p=[];let _=k*S;for(let v=0;v<k;v++)(this.persist&1<<v||this.lanes[_>>>3]&1<<_%8)&&p.push(v+1),_++;return p.length?p:[L.GlyphMarginLane.Center]}countAtLine(S){let p=k*S,_=0;for(let v=0;v<k;v++)(this.persist&1<<v||this.lanes[p>>>3]&1<<p%8)&&_++,p++;return _}}e.GlyphMarginLanesModel=y}),define(se[547],oe([1,0,94,10,114,86]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createModelLineProjection=void 0;function S(n,t){return n===null?t?_.INSTANCE:v.INSTANCE:new p(n,t)}e.createModelLineProjection=S;class p{constructor(t,r){this._projectionData=t,this._isVisible=r}isVisible(){return this._isVisible}setVisible(t){return this._isVisible=t,this}getProjectionData(){return this._projectionData}getViewLineCount(){return this._isVisible?this._projectionData.getOutputLineCount():0}getViewLineContent(t,r,u){this._assertVisible();const f=u>0?this._projectionData.breakOffsets[u-1]:0,c=this._projectionData.breakOffsets[u];let d;if(this._projectionData.injectionOffsets!==null){const s=this._projectionData.injectionOffsets.map((o,g)=>new y.LineInjectedText(0,0,o+1,this._projectionData.injectionOptions[g],0));d=y.LineInjectedText.applyInjectedText(t.getLineContent(r),s).substring(f,c)}else d=t.getValueInRange({startLineNumber:r,startColumn:f+1,endLineNumber:r,endColumn:c+1});return u>0&&(d=a(this._projectionData.wrappedTextIndentLength)+d),d}getViewLineLength(t,r,u){return this._assertVisible(),this._projectionData.getLineLength(u)}getViewLineMinColumn(t,r,u){return this._assertVisible(),this._projectionData.getMinOutputOffset(u)+1}getViewLineMaxColumn(t,r,u){return this._assertVisible(),this._projectionData.getMaxOutputOffset(u)+1}getViewLineData(t,r,u){const f=new Array;return this.getViewLinesData(t,r,u,1,0,[!0],f),f[0]}getViewLinesData(t,r,u,f,c,d,s){this._assertVisible();const l=this._projectionData,o=l.injectionOffsets,g=l.injectionOptions;let h=null;if(o){h=[];let C=0,w=0;for(let D=0;D<l.getOutputLineCount();D++){const I=new Array;h[D]=I;const T=D>0?l.breakOffsets[D-1]:0,A=l.breakOffsets[D];for(;w<o.length;){const P=g[w].content.length,N=o[w]+C,M=N+P;if(N>A)break;if(T<M){const R=g[w];if(R.inlineClassName){const x=D>0?l.wrappedTextIndentLength:0,O=x+Math.max(N-T,0),B=x+Math.min(M-T,A-T);O!==B&&I.push(new E.SingleLineInlineDecoration(O,B,R.inlineClassName,R.inlineClassNameAffectsLetterSpacing))}}if(M<=A)C+=P,w++;else break}}}let m;o?m=t.tokenization.getLineTokens(r).withInserted(o.map((C,w)=>({offset:C,text:g[w].content,tokenMetadata:L.LineTokens.defaultTokenMetadata}))):m=t.tokenization.getLineTokens(r);for(let C=u;C<u+f;C++){const w=c+C-u;if(!d[w]){s[w]=null;continue}s[w]=this._getViewLineData(m,h?h[C]:null,C)}}_getViewLineData(t,r,u){this._assertVisible();const f=this._projectionData,c=u>0?f.wrappedTextIndentLength:0,d=u>0?f.breakOffsets[u-1]:0,s=f.breakOffsets[u],l=t.sliceAndInflate(d,s,c);let o=l.getLineContent();u>0&&(o=a(f.wrappedTextIndentLength)+o);const g=this._projectionData.getMinOutputOffset(u)+1,h=o.length+1,m=u+1<this.getViewLineCount(),C=u===0?0:f.breakOffsetsVisibleColumn[u-1];return new E.ViewLineData(o,m,g,h,C,l,r)}getModelColumnOfViewPosition(t,r){return this._assertVisible(),this._projectionData.translateToInputOffset(t,r-1)+1}getViewPositionOfModelPosition(t,r,u=2){return this._assertVisible(),this._projectionData.translateToOutputPosition(r-1,u).toPosition(t)}getViewLineNumberOfModelPosition(t,r){this._assertVisible();const u=this._projectionData.translateToOutputPosition(r-1);return t+u.outputLineIndex}normalizePosition(t,r,u){const f=r.lineNumber-t;return this._projectionData.normalizeOutputPosition(t,r.column-1,u).toPosition(f)}getInjectedTextAt(t,r){return this._projectionData.getInjectedText(t,r-1)}_assertVisible(){if(!this._isVisible)throw new Error(\"Not supported\")}}class _{constructor(){}isVisible(){return!0}setVisible(t){return t?this:v.INSTANCE}getProjectionData(){return null}getViewLineCount(){return 1}getViewLineContent(t,r,u){return t.getLineContent(r)}getViewLineLength(t,r,u){return t.getLineLength(r)}getViewLineMinColumn(t,r,u){return t.getLineMinColumn(r)}getViewLineMaxColumn(t,r,u){return t.getLineMaxColumn(r)}getViewLineData(t,r,u){const f=t.tokenization.getLineTokens(r),c=f.getLineContent();return new E.ViewLineData(c,!1,1,c.length+1,0,f.inflate(),null)}getViewLinesData(t,r,u,f,c,d,s){if(!d[c]){s[c]=null;return}s[c]=this.getViewLineData(t,r,0)}getModelColumnOfViewPosition(t,r){return r}getViewPositionOfModelPosition(t,r){return new k.Position(t,r)}getViewLineNumberOfModelPosition(t,r){return t}normalizePosition(t,r,u){return r}getInjectedTextAt(t,r){return null}}_.INSTANCE=new _;class v{constructor(){}isVisible(){return!1}setVisible(t){return t?_.INSTANCE:this}getProjectionData(){return null}getViewLineCount(){return 0}getViewLineContent(t,r,u){throw new Error(\"Not supported\")}getViewLineLength(t,r,u){throw new Error(\"Not supported\")}getViewLineMinColumn(t,r,u){throw new Error(\"Not supported\")}getViewLineMaxColumn(t,r,u){throw new Error(\"Not supported\")}getViewLineData(t,r,u){throw new Error(\"Not supported\")}getViewLinesData(t,r,u,f,c,d,s){throw new Error(\"Not supported\")}getModelColumnOfViewPosition(t,r){throw new Error(\"Not supported\")}getViewPositionOfModelPosition(t,r){throw new Error(\"Not supported\")}getViewLineNumberOfModelPosition(t,r){throw new Error(\"Not supported\")}normalizePosition(t,r,u){throw new Error(\"Not supported\")}getInjectedTextAt(t,r){throw new Error(\"Not supported\")}}v.INSTANCE=new v;const b=[\"\"];function a(n){if(n>=b.length)for(let t=1;t<=n;t++)b[t]=i(t);return b[n]}function i(n){return new Array(n+1).join(\" \")}}),define(se[548],oe([1,0,11,128,114,294]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MonospaceLineBreaksComputerFactory=void 0;class S{static create(f){return new S(f.get(132),f.get(131))}constructor(f,c){this.classifier=new p(f,c)}createLineBreaksComputer(f,c,d,s,l){const o=[],g=[],h=[];return{addRequest:(m,C,w)=>{o.push(m),g.push(C),h.push(w)},finalize:()=>{const m=f.typicalFullwidthCharacterWidth/f.typicalHalfwidthCharacterWidth,C=[];for(let w=0,D=o.length;w<D;w++){const I=g[w],T=h[w];T&&!T.injectionOptions&&!I?C[w]=b(this.classifier,T,o[w],c,d,m,s,l):C[w]=a(this.classifier,o[w],I,c,d,m,s,l)}return _.length=0,v.length=0,C}}}}e.MonospaceLineBreaksComputerFactory=S;class p extends k.CharacterClassifier{constructor(f,c){super(0);for(let d=0;d<f.length;d++)this.set(f.charCodeAt(d),1);for(let d=0;d<c.length;d++)this.set(c.charCodeAt(d),2)}get(f){return f>=0&&f<256?this._asciiMap[f]:f>=12352&&f<=12543||f>=13312&&f<=19903||f>=19968&&f<=40959?3:this._map.get(f)||this._defaultValue}}let _=[],v=[];function b(u,f,c,d,s,l,o,g){if(s===-1)return null;const h=c.length;if(h<=1)return null;const m=g===\"keepAll\",C=f.breakOffsets,w=f.breakOffsetsVisibleColumn,D=r(c,d,s,l,o),I=s-D,T=_,A=v;let P=0,N=0,M=0,R=s;const x=C.length;let O=0;if(O>=0){let B=Math.abs(w[O]-R);for(;O+1<x;){const W=Math.abs(w[O+1]-R);if(W>=B)break;B=W,O++}}for(;O<x;){let B=O<0?0:C[O],W=O<0?0:w[O];N>B&&(B=N,W=M);let V=0,K=0,F=0,q=0;if(W<=R){let ae=W,ne=B===0?0:c.charCodeAt(B-1),$=B===0?0:u.get(ne),J=!0;for(let Q=B;Q<h;Q++){const re=Q,de=c.charCodeAt(Q);let he,me;if(L.isHighSurrogate(de)?(Q++,he=0,me=2):(he=u.get(de),me=i(de,ae,d,l)),re>N&&t(ne,$,de,he,m)&&(V=re,K=ae),ae+=me,ae>R){re>N?(F=re,q=ae-me):(F=Q+1,q=ae),ae-K>I&&(V=0),J=!1;break}ne=de,$=he}if(J){P>0&&(T[P]=C[C.length-1],A[P]=w[C.length-1],P++);break}}if(V===0){let ae=W,ne=c.charCodeAt(B),$=u.get(ne),J=!1;for(let Q=B-1;Q>=N;Q--){const re=Q+1,de=c.charCodeAt(Q);if(de===9){J=!0;break}let he,me;if(L.isLowSurrogate(de)?(Q--,he=0,me=2):(he=u.get(de),me=L.isFullWidthCharacter(de)?l:1),ae<=R){if(F===0&&(F=re,q=ae),ae<=R-I)break;if(t(de,he,ne,$,m)){V=re,K=ae;break}}ae-=me,ne=de,$=he}if(V!==0){const Q=I-(q-K);if(Q<=d){const re=c.charCodeAt(F);let de;L.isHighSurrogate(re)?de=2:de=i(re,q,d,l),Q-de<0&&(V=0)}}if(J){O--;continue}}if(V===0&&(V=F,K=q),V<=N){const ae=c.charCodeAt(N);L.isHighSurrogate(ae)?(V=N+2,K=M+2):(V=N+1,K=M+i(ae,M,d,l))}for(N=V,T[P]=V,M=K,A[P]=K,P++,R=K+I;O<0||O<x&&w[O]<K;)O++;let ie=Math.abs(w[O]-R);for(;O+1<x;){const ae=Math.abs(w[O+1]-R);if(ae>=ie)break;ie=ae,O++}}return P===0?null:(T.length=P,A.length=P,_=f.breakOffsets,v=f.breakOffsetsVisibleColumn,f.breakOffsets=T,f.breakOffsetsVisibleColumn=A,f.wrappedTextIndentLength=D,f)}function a(u,f,c,d,s,l,o,g){const h=y.LineInjectedText.applyInjectedText(f,c);let m,C;if(c&&c.length>0?(m=c.map(K=>K.options),C=c.map(K=>K.column-1)):(m=null,C=null),s===-1)return m?new E.ModelLineProjectionData(C,m,[h.length],[],0):null;const w=h.length;if(w<=1)return m?new E.ModelLineProjectionData(C,m,[h.length],[],0):null;const D=g===\"keepAll\",I=r(h,d,s,l,o),T=s-I,A=[],P=[];let N=0,M=0,R=0,x=s,O=h.charCodeAt(0),B=u.get(O),W=i(O,0,d,l),V=1;L.isHighSurrogate(O)&&(W+=1,O=h.charCodeAt(1),B=u.get(O),V++);for(let K=V;K<w;K++){const F=K,q=h.charCodeAt(K);let ie,ae;L.isHighSurrogate(q)?(K++,ie=0,ae=2):(ie=u.get(q),ae=i(q,W,d,l)),t(O,B,q,ie,D)&&(M=F,R=W),W+=ae,W>x&&((M===0||W-R>T)&&(M=F,R=W-ae),A[N]=M,P[N]=R,N++,x=R+T,M=0),O=q,B=ie}return N===0&&(!c||c.length===0)?null:(A[N]=w,P[N]=W,new E.ModelLineProjectionData(C,m,A,P,I))}function i(u,f,c,d){return u===9?c-f%c:L.isFullWidthCharacter(u)||u<32?d:1}function n(u,f){return f-u%f}function t(u,f,c,d,s){return c!==32&&(f===2&&d!==2||f!==1&&d===1||!s&&f===3&&d!==2||!s&&d===3&&f!==1)}function r(u,f,c,d,s){let l=0;if(s!==0){const o=L.firstNonWhitespaceIndex(u);if(o!==-1){for(let h=0;h<o;h++){const m=u.charCodeAt(h)===9?n(l,f):1;l+=m}const g=s===3?2:s===2?1:0;for(let h=0;h<g;h++){const m=n(l,f);l+=m}l+d>c&&(l=0)}}return l}}),define(se[300],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OverviewZoneManager=e.OverviewRulerZone=e.ColorZone=void 0;class L{constructor(S,p,_){this._colorZoneBrand=void 0,this.from=S|0,this.to=p|0,this.colorId=_|0}static compare(S,p){return S.colorId===p.colorId?S.from===p.from?S.to-p.to:S.from-p.from:S.colorId-p.colorId}}e.ColorZone=L;class k{constructor(S,p,_,v){this._overviewRulerZoneBrand=void 0,this.startLineNumber=S,this.endLineNumber=p,this.heightInLines=_,this.color=v,this._colorZone=null}static compare(S,p){return S.color===p.color?S.startLineNumber===p.startLineNumber?S.heightInLines===p.heightInLines?S.endLineNumber-p.endLineNumber:S.heightInLines-p.heightInLines:S.startLineNumber-p.startLineNumber:S.color<p.color?-1:1}setColorZone(S){this._colorZone=S}getColorZones(){return this._colorZone}}e.OverviewRulerZone=k;class y{constructor(S){this._getVerticalOffsetForLine=S,this._zones=[],this._colorZonesInvalid=!1,this._lineHeight=0,this._domWidth=0,this._domHeight=0,this._outerHeight=0,this._pixelRatio=1,this._lastAssignedId=0,this._color2Id=Object.create(null),this._id2Color=[]}getId2Color(){return this._id2Color}setZones(S){this._zones=S,this._zones.sort(k.compare)}setLineHeight(S){return this._lineHeight===S?!1:(this._lineHeight=S,this._colorZonesInvalid=!0,!0)}setPixelRatio(S){this._pixelRatio=S,this._colorZonesInvalid=!0}getDOMWidth(){return this._domWidth}getCanvasWidth(){return this._domWidth*this._pixelRatio}setDOMWidth(S){return this._domWidth===S?!1:(this._domWidth=S,this._colorZonesInvalid=!0,!0)}getDOMHeight(){return this._domHeight}getCanvasHeight(){return this._domHeight*this._pixelRatio}setDOMHeight(S){return this._domHeight===S?!1:(this._domHeight=S,this._colorZonesInvalid=!0,!0)}getOuterHeight(){return this._outerHeight}setOuterHeight(S){return this._outerHeight===S?!1:(this._outerHeight=S,this._colorZonesInvalid=!0,!0)}resolveColorZones(){const S=this._colorZonesInvalid,p=Math.floor(this._lineHeight),_=Math.floor(this.getCanvasHeight()),v=Math.floor(this._outerHeight),b=_/v,a=Math.floor(4*this._pixelRatio/2),i=[];for(let n=0,t=this._zones.length;n<t;n++){const r=this._zones[n];if(!S){const m=r.getColorZones();if(m){i.push(m);continue}}const u=this._getVerticalOffsetForLine(r.startLineNumber),f=r.heightInLines===0?this._getVerticalOffsetForLine(r.endLineNumber)+p:u+r.heightInLines*p,c=Math.floor(b*u),d=Math.floor(b*f);let s=Math.floor((c+d)/2),l=d-s;l<a&&(l=a),s-l<0&&(s=l),s+l>_&&(s=_-l);const o=r.color;let g=this._color2Id[o];g||(g=++this._lastAssignedId,this._color2Id[o]=g,this._id2Color[g]=o);const h=new L(s-l,s+l,g);r.setColorZone(h),i.push(h)}return this._colorZonesInvalid=!1,i.sort(L.compare),i}}e.OverviewZoneManager=y}),define(se[549],oe([1,0,40,300,154]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OverviewRuler=void 0;class E extends y.ViewEventHandler{constructor(p,_){super(),this._context=p;const v=this._context.configuration.options;this._domNode=(0,L.createFastDomNode)(document.createElement(\"canvas\")),this._domNode.setClassName(_),this._domNode.setPosition(\"absolute\"),this._domNode.setLayerHinting(!0),this._domNode.setContain(\"strict\"),this._zoneManager=new k.OverviewZoneManager(b=>this._context.viewLayout.getVerticalOffsetForLineNumber(b)),this._zoneManager.setDOMWidth(0),this._zoneManager.setDOMHeight(0),this._zoneManager.setOuterHeight(this._context.viewLayout.getScrollHeight()),this._zoneManager.setLineHeight(v.get(66)),this._zoneManager.setPixelRatio(v.get(141)),this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}onConfigurationChanged(p){const _=this._context.configuration.options;return p.hasChanged(66)&&(this._zoneManager.setLineHeight(_.get(66)),this._render()),p.hasChanged(141)&&(this._zoneManager.setPixelRatio(_.get(141)),this._domNode.setWidth(this._zoneManager.getDOMWidth()),this._domNode.setHeight(this._zoneManager.getDOMHeight()),this._domNode.domNode.width=this._zoneManager.getCanvasWidth(),this._domNode.domNode.height=this._zoneManager.getCanvasHeight(),this._render()),!0}onFlushed(p){return this._render(),!0}onScrollChanged(p){return p.scrollHeightChanged&&(this._zoneManager.setOuterHeight(p.scrollHeight),this._render()),!0}onZonesChanged(p){return this._render(),!0}getDomNode(){return this._domNode.domNode}setLayout(p){this._domNode.setTop(p.top),this._domNode.setRight(p.right);let _=!1;_=this._zoneManager.setDOMWidth(p.width)||_,_=this._zoneManager.setDOMHeight(p.height)||_,_&&(this._domNode.setWidth(this._zoneManager.getDOMWidth()),this._domNode.setHeight(this._zoneManager.getDOMHeight()),this._domNode.domNode.width=this._zoneManager.getCanvasWidth(),this._domNode.domNode.height=this._zoneManager.getCanvasHeight(),this._render())}setZones(p){this._zoneManager.setZones(p),this._render()}_render(){if(this._zoneManager.getOuterHeight()===0)return!1;const p=this._zoneManager.getCanvasWidth(),_=this._zoneManager.getCanvasHeight(),v=this._zoneManager.resolveColorZones(),b=this._zoneManager.getId2Color(),a=this._domNode.domNode.getContext(\"2d\");return a.clearRect(0,0,p,_),v.length>0&&this._renderOneLane(a,v,b,p),!0}_renderOneLane(p,_,v,b){let a=0,i=0,n=0;for(const t of _){const r=t.colorId,u=t.from,f=t.to;r!==a?(p.fillRect(0,i,b,n-i),a=r,p.fillStyle=v[a],i=u,n=f):n>=u?n=Math.max(n,f):(p.fillRect(0,i,b,n-i),i=u,n=f)}p.fillRect(0,i,b,n-i)}}e.OverviewRuler=E}),define(se[550],oe([1,0,508]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewContext=void 0;class k{constructor(E,S,p){this.configuration=E,this.theme=new L.EditorTheme(S),this.viewModel=p,this.viewLayout=p.viewLayout}addEventHandler(E){this.viewModel.addViewEventHandler(E)}removeEventHandler(E){this.viewModel.removeViewEventHandler(E)}}e.ViewContext=k}),define(se[215],oe([1,0,6,2]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ModelTokensChangedEvent=e.ModelOptionsChangedEvent=e.ModelContentChangedEvent=e.ModelLanguageConfigurationChangedEvent=e.ModelLanguageChangedEvent=e.ModelDecorationsChangedEvent=e.ReadOnlyEditAttemptEvent=e.CursorStateChangedEvent=e.HiddenAreasChangedEvent=e.ViewZonesChangedEvent=e.ScrollChangedEvent=e.FocusChangedEvent=e.ContentSizeChangedEvent=e.ViewModelEventsCollector=e.ViewModelEventDispatcher=void 0;class y extends k.Disposable{constructor(){super(),this._onEvent=this._register(new L.Emitter),this.onEvent=this._onEvent.event,this._eventHandlers=[],this._viewEventQueue=null,this._isConsumingViewEventQueue=!1,this._collector=null,this._collectorCnt=0,this._outgoingEvents=[]}emitOutgoingEvent(s){this._addOutgoingEvent(s),this._emitOutgoingEvents()}_addOutgoingEvent(s){for(let l=0,o=this._outgoingEvents.length;l<o;l++){const g=this._outgoingEvents[l].kind===s.kind?this._outgoingEvents[l].attemptToMerge(s):null;if(g){this._outgoingEvents[l]=g;return}}this._outgoingEvents.push(s)}_emitOutgoingEvents(){for(;this._outgoingEvents.length>0;){if(this._collector||this._isConsumingViewEventQueue)return;const s=this._outgoingEvents.shift();s.isNoOp()||this._onEvent.fire(s)}}addViewEventHandler(s){for(let l=0,o=this._eventHandlers.length;l<o;l++)this._eventHandlers[l]===s&&console.warn(\"Detected duplicate listener in ViewEventDispatcher\",s);this._eventHandlers.push(s)}removeViewEventHandler(s){for(let l=0;l<this._eventHandlers.length;l++)if(this._eventHandlers[l]===s){this._eventHandlers.splice(l,1);break}}beginEmitViewEvents(){return this._collectorCnt++,this._collectorCnt===1&&(this._collector=new E),this._collector}endEmitViewEvents(){if(this._collectorCnt--,this._collectorCnt===0){const s=this._collector.outgoingEvents,l=this._collector.viewEvents;this._collector=null;for(const o of s)this._addOutgoingEvent(o);l.length>0&&this._emitMany(l)}this._emitOutgoingEvents()}emitSingleViewEvent(s){try{this.beginEmitViewEvents().emitViewEvent(s)}finally{this.endEmitViewEvents()}}_emitMany(s){this._viewEventQueue?this._viewEventQueue=this._viewEventQueue.concat(s):this._viewEventQueue=s,this._isConsumingViewEventQueue||this._consumeViewEventQueue()}_consumeViewEventQueue(){try{this._isConsumingViewEventQueue=!0,this._doConsumeQueue()}finally{this._isConsumingViewEventQueue=!1}}_doConsumeQueue(){for(;this._viewEventQueue;){const s=this._viewEventQueue;this._viewEventQueue=null;const l=this._eventHandlers.slice(0);for(const o of l)o.handleEvents(s)}}}e.ViewModelEventDispatcher=y;class E{constructor(){this.viewEvents=[],this.outgoingEvents=[]}emitViewEvent(s){this.viewEvents.push(s)}emitOutgoingEvent(s){this.outgoingEvents.push(s)}}e.ViewModelEventsCollector=E;class S{constructor(s,l,o,g){this.kind=0,this._oldContentWidth=s,this._oldContentHeight=l,this.contentWidth=o,this.contentHeight=g,this.contentWidthChanged=this._oldContentWidth!==this.contentWidth,this.contentHeightChanged=this._oldContentHeight!==this.contentHeight}isNoOp(){return!this.contentWidthChanged&&!this.contentHeightChanged}attemptToMerge(s){return s.kind!==this.kind?null:new S(this._oldContentWidth,this._oldContentHeight,s.contentWidth,s.contentHeight)}}e.ContentSizeChangedEvent=S;class p{constructor(s,l){this.kind=1,this.oldHasFocus=s,this.hasFocus=l}isNoOp(){return this.oldHasFocus===this.hasFocus}attemptToMerge(s){return s.kind!==this.kind?null:new p(this.oldHasFocus,s.hasFocus)}}e.FocusChangedEvent=p;class _{constructor(s,l,o,g,h,m,C,w){this.kind=2,this._oldScrollWidth=s,this._oldScrollLeft=l,this._oldScrollHeight=o,this._oldScrollTop=g,this.scrollWidth=h,this.scrollLeft=m,this.scrollHeight=C,this.scrollTop=w,this.scrollWidthChanged=this._oldScrollWidth!==this.scrollWidth,this.scrollLeftChanged=this._oldScrollLeft!==this.scrollLeft,this.scrollHeightChanged=this._oldScrollHeight!==this.scrollHeight,this.scrollTopChanged=this._oldScrollTop!==this.scrollTop}isNoOp(){return!this.scrollWidthChanged&&!this.scrollLeftChanged&&!this.scrollHeightChanged&&!this.scrollTopChanged}attemptToMerge(s){return s.kind!==this.kind?null:new _(this._oldScrollWidth,this._oldScrollLeft,this._oldScrollHeight,this._oldScrollTop,s.scrollWidth,s.scrollLeft,s.scrollHeight,s.scrollTop)}}e.ScrollChangedEvent=_;class v{constructor(){this.kind=3}isNoOp(){return!1}attemptToMerge(s){return s.kind!==this.kind?null:this}}e.ViewZonesChangedEvent=v;class b{constructor(){this.kind=4}isNoOp(){return!1}attemptToMerge(s){return s.kind!==this.kind?null:this}}e.HiddenAreasChangedEvent=b;class a{constructor(s,l,o,g,h,m,C){this.kind=6,this.oldSelections=s,this.selections=l,this.oldModelVersionId=o,this.modelVersionId=g,this.source=h,this.reason=m,this.reachedMaxCursorCount=C}static _selectionsAreEqual(s,l){if(!s&&!l)return!0;if(!s||!l)return!1;const o=s.length,g=l.length;if(o!==g)return!1;for(let h=0;h<o;h++)if(!s[h].equalsSelection(l[h]))return!1;return!0}isNoOp(){return a._selectionsAreEqual(this.oldSelections,this.selections)&&this.oldModelVersionId===this.modelVersionId}attemptToMerge(s){return s.kind!==this.kind?null:new a(this.oldSelections,s.selections,this.oldModelVersionId,s.modelVersionId,s.source,s.reason,this.reachedMaxCursorCount||s.reachedMaxCursorCount)}}e.CursorStateChangedEvent=a;class i{constructor(){this.kind=5}isNoOp(){return!1}attemptToMerge(s){return s.kind!==this.kind?null:this}}e.ReadOnlyEditAttemptEvent=i;class n{constructor(s){this.event=s,this.kind=7}isNoOp(){return!1}attemptToMerge(s){return null}}e.ModelDecorationsChangedEvent=n;class t{constructor(s){this.event=s,this.kind=8}isNoOp(){return!1}attemptToMerge(s){return null}}e.ModelLanguageChangedEvent=t;class r{constructor(s){this.event=s,this.kind=9}isNoOp(){return!1}attemptToMerge(s){return null}}e.ModelLanguageConfigurationChangedEvent=r;class u{constructor(s){this.event=s,this.kind=10}isNoOp(){return!1}attemptToMerge(s){return null}}e.ModelContentChangedEvent=u;class f{constructor(s){this.event=s,this.kind=11}isNoOp(){return!1}attemptToMerge(s){return null}}e.ModelOptionsChangedEvent=f;class c{constructor(s){this.event=s,this.kind=12}isNoOp(){return!1}attemptToMerge(s){return null}}e.ModelTokensChangedEvent=c}),define(se[551],oe([1,0,6,2,147,544,86,215]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewLayout=void 0;const _=125;class v{constructor(n,t,r,u){n=n|0,t=t|0,r=r|0,u=u|0,n<0&&(n=0),t<0&&(t=0),r<0&&(r=0),u<0&&(u=0),this.width=n,this.contentWidth=t,this.scrollWidth=Math.max(n,t),this.height=r,this.contentHeight=u,this.scrollHeight=Math.max(r,u)}equals(n){return this.width===n.width&&this.contentWidth===n.contentWidth&&this.height===n.height&&this.contentHeight===n.contentHeight}}class b extends k.Disposable{constructor(n,t){super(),this._onDidContentSizeChange=this._register(new L.Emitter),this.onDidContentSizeChange=this._onDidContentSizeChange.event,this._dimensions=new v(0,0,0,0),this._scrollable=this._register(new y.Scrollable({forceIntegerValues:!0,smoothScrollDuration:n,scheduleAtNextAnimationFrame:t})),this.onDidScroll=this._scrollable.onScroll}getScrollable(){return this._scrollable}setSmoothScrollDuration(n){this._scrollable.setSmoothScrollDuration(n)}validateScrollPosition(n){return this._scrollable.validateScrollPosition(n)}getScrollDimensions(){return this._dimensions}setScrollDimensions(n){if(this._dimensions.equals(n))return;const t=this._dimensions;this._dimensions=n,this._scrollable.setScrollDimensions({width:n.width,scrollWidth:n.scrollWidth,height:n.height,scrollHeight:n.scrollHeight},!0);const r=t.contentWidth!==n.contentWidth,u=t.contentHeight!==n.contentHeight;(r||u)&&this._onDidContentSizeChange.fire(new p.ContentSizeChangedEvent(t.contentWidth,t.contentHeight,n.contentWidth,n.contentHeight))}getFutureScrollPosition(){return this._scrollable.getFutureScrollPosition()}getCurrentScrollPosition(){return this._scrollable.getCurrentScrollPosition()}setScrollPositionNow(n){this._scrollable.setScrollPositionNow(n)}setScrollPositionSmooth(n){this._scrollable.setScrollPositionSmooth(n)}hasPendingScrollAnimation(){return this._scrollable.hasPendingScrollAnimation()}}class a extends k.Disposable{constructor(n,t,r){super(),this._configuration=n;const u=this._configuration.options,f=u.get(143),c=u.get(83);this._linesLayout=new E.LinesLayout(t,u.get(66),c.top,c.bottom),this._maxLineWidth=0,this._overlayWidgetsMinWidth=0,this._scrollable=this._register(new b(0,r)),this._configureSmoothScrollDuration(),this._scrollable.setScrollDimensions(new v(f.contentWidth,0,f.height,0)),this.onDidScroll=this._scrollable.onDidScroll,this.onDidContentSizeChange=this._scrollable.onDidContentSizeChange,this._updateHeight()}dispose(){super.dispose()}getScrollable(){return this._scrollable.getScrollable()}onHeightMaybeChanged(){this._updateHeight()}_configureSmoothScrollDuration(){this._scrollable.setSmoothScrollDuration(this._configuration.options.get(113)?_:0)}onConfigurationChanged(n){const t=this._configuration.options;if(n.hasChanged(66)&&this._linesLayout.setLineHeight(t.get(66)),n.hasChanged(83)){const r=t.get(83);this._linesLayout.setPadding(r.top,r.bottom)}if(n.hasChanged(143)){const r=t.get(143),u=r.contentWidth,f=r.height,c=this._scrollable.getScrollDimensions(),d=c.contentWidth;this._scrollable.setScrollDimensions(new v(u,c.contentWidth,f,this._getContentHeight(u,f,d)))}else this._updateHeight();n.hasChanged(113)&&this._configureSmoothScrollDuration()}onFlushed(n){this._linesLayout.onFlushed(n)}onLinesDeleted(n,t){this._linesLayout.onLinesDeleted(n,t)}onLinesInserted(n,t){this._linesLayout.onLinesInserted(n,t)}_getHorizontalScrollbarHeight(n,t){const u=this._configuration.options.get(102);return u.horizontal===2||n>=t?0:u.horizontalScrollbarSize}_getContentHeight(n,t,r){const u=this._configuration.options;let f=this._linesLayout.getLinesTotalHeight();return u.get(104)?f+=Math.max(0,t-u.get(66)-u.get(83).bottom):u.get(102).ignoreHorizontalScrollbarInContentHeight||(f+=this._getHorizontalScrollbarHeight(n,r)),f}_updateHeight(){const n=this._scrollable.getScrollDimensions(),t=n.width,r=n.height,u=n.contentWidth;this._scrollable.setScrollDimensions(new v(t,n.contentWidth,r,this._getContentHeight(t,r,u)))}getCurrentViewport(){const n=this._scrollable.getScrollDimensions(),t=this._scrollable.getCurrentScrollPosition();return new S.Viewport(t.scrollTop,t.scrollLeft,n.width,n.height)}getFutureViewport(){const n=this._scrollable.getScrollDimensions(),t=this._scrollable.getFutureScrollPosition();return new S.Viewport(t.scrollTop,t.scrollLeft,n.width,n.height)}_computeContentWidth(){const n=this._configuration.options,t=this._maxLineWidth,r=n.get(144),u=n.get(50),f=n.get(143);if(r.isViewportWrapping){const c=n.get(72);return t>f.contentWidth+u.typicalHalfwidthCharacterWidth&&c.enabled&&c.side===\"right\"?t+f.verticalScrollbarWidth:t}else{const c=n.get(103)*u.typicalHalfwidthCharacterWidth,d=this._linesLayout.getWhitespaceMinWidth();return Math.max(t+c+f.verticalScrollbarWidth,d,this._overlayWidgetsMinWidth)}}setMaxLineWidth(n){this._maxLineWidth=n,this._updateContentWidth()}setOverlayWidgetsMinWidth(n){this._overlayWidgetsMinWidth=n,this._updateContentWidth()}_updateContentWidth(){const n=this._scrollable.getScrollDimensions();this._scrollable.setScrollDimensions(new v(n.width,this._computeContentWidth(),n.height,n.contentHeight)),this._updateHeight()}saveState(){const n=this._scrollable.getFutureScrollPosition(),t=n.scrollTop,r=this._linesLayout.getLineNumberAtOrAfterVerticalOffset(t),u=this._linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(r);return{scrollTop:t,scrollTopWithoutViewZones:t-u,scrollLeft:n.scrollLeft}}changeWhitespace(n){const t=this._linesLayout.changeWhitespace(n);return t&&this.onHeightMaybeChanged(),t}getVerticalOffsetForLineNumber(n,t=!1){return this._linesLayout.getVerticalOffsetForLineNumber(n,t)}getVerticalOffsetAfterLineNumber(n,t=!1){return this._linesLayout.getVerticalOffsetAfterLineNumber(n,t)}isAfterLines(n){return this._linesLayout.isAfterLines(n)}isInTopPadding(n){return this._linesLayout.isInTopPadding(n)}isInBottomPadding(n){return this._linesLayout.isInBottomPadding(n)}getLineNumberAtVerticalOffset(n){return this._linesLayout.getLineNumberAtOrAfterVerticalOffset(n)}getWhitespaceAtVerticalOffset(n){return this._linesLayout.getWhitespaceAtVerticalOffset(n)}getLinesViewportData(){const n=this.getCurrentViewport();return this._linesLayout.getLinesViewportData(n.top,n.top+n.height)}getLinesViewportDataAtScrollTop(n){const t=this._scrollable.getScrollDimensions();return n+t.height>t.scrollHeight&&(n=t.scrollHeight-t.height),n<0&&(n=0),this._linesLayout.getLinesViewportData(n,n+t.height)}getWhitespaceViewportData(){const n=this.getCurrentViewport();return this._linesLayout.getWhitespaceViewportData(n.top,n.top+n.height)}getWhitespaces(){return this._linesLayout.getWhitespaces()}getContentWidth(){return this._scrollable.getScrollDimensions().contentWidth}getScrollWidth(){return this._scrollable.getScrollDimensions().scrollWidth}getContentHeight(){return this._scrollable.getScrollDimensions().contentHeight}getScrollHeight(){return this._scrollable.getScrollDimensions().scrollHeight}getCurrentScrollLeft(){return this._scrollable.getCurrentScrollPosition().scrollLeft}getCurrentScrollTop(){return this._scrollable.getCurrentScrollPosition().scrollTop}validateScrollPosition(n){return this._scrollable.validateScrollPosition(n)}setScrollPosition(n,t){t===1?this._scrollable.setScrollPositionNow(n):this._scrollable.setScrollPositionSmooth(n)}hasPendingScrollAnimation(){return this._scrollable.hasPendingScrollAnimation()}deltaScrollNow(n,t){const r=this._scrollable.getCurrentScrollPosition();this._scrollable.setScrollPositionNow({scrollLeft:r.scrollLeft+n,scrollTop:r.scrollTop+t})}}e.ViewLayout=a}),define(se[552],oe([1,0,5,24]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MoveCaretCommand=void 0;class y{constructor(S,p){this._selection=S,this._isMovingLeft=p}getEditOperations(S,p){if(this._selection.startLineNumber!==this._selection.endLineNumber||this._selection.isEmpty())return;const _=this._selection.startLineNumber,v=this._selection.startColumn,b=this._selection.endColumn;if(!(this._isMovingLeft&&v===1)&&!(!this._isMovingLeft&&b===S.getLineMaxColumn(_)))if(this._isMovingLeft){const a=new L.Range(_,v-1,_,v),i=S.getValueInRange(a);p.addEditOperation(a,null),p.addEditOperation(new L.Range(_,b,_,b),i)}else{const a=new L.Range(_,b,_,b+1),i=S.getValueInRange(a);p.addEditOperation(a,null),p.addEditOperation(new L.Range(_,v,_,v),i)}}computeCursorState(S,p){return this._isMovingLeft?new k.Selection(this._selection.startLineNumber,this._selection.startColumn-1,this._selection.endLineNumber,this._selection.endColumn-1):new k.Selection(this._selection.startLineNumber,this._selection.startColumn+1,this._selection.endLineNumber,this._selection.endColumn+1)}}e.MoveCaretCommand=y}),define(se[116],oe([1,0,12]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CodeActionItem=e.CodeActionCommandArgs=e.filtersAction=e.mayIncludeActionsOfKind=e.CodeActionTriggerSource=e.CodeActionKind=void 0;class k{constructor(a){this.value=a}equals(a){return this.value===a.value}contains(a){return this.equals(a)||this.value===\"\"||a.value.startsWith(this.value+k.sep)}intersects(a){return this.contains(a)||a.contains(this)}append(a){return new k(this.value+k.sep+a)}}e.CodeActionKind=k,k.sep=\".\",k.None=new k(\"@@none@@\"),k.Empty=new k(\"\"),k.QuickFix=new k(\"quickfix\"),k.Refactor=new k(\"refactor\"),k.RefactorExtract=k.Refactor.append(\"extract\"),k.RefactorInline=k.Refactor.append(\"inline\"),k.RefactorMove=k.Refactor.append(\"move\"),k.RefactorRewrite=k.Refactor.append(\"rewrite\"),k.Notebook=new k(\"notebook\"),k.Source=new k(\"source\"),k.SourceOrganizeImports=k.Source.append(\"organizeImports\"),k.SourceFixAll=k.Source.append(\"fixAll\"),k.SurroundWith=k.Refactor.append(\"surround\");var y;(function(b){b.Refactor=\"refactor\",b.RefactorPreview=\"refactor preview\",b.Lightbulb=\"lightbulb\",b.Default=\"other (default)\",b.SourceAction=\"source action\",b.QuickFix=\"quick fix action\",b.FixAll=\"fix all\",b.OrganizeImports=\"organize imports\",b.AutoFix=\"auto fix\",b.QuickFixHover=\"quick fix hover window\",b.OnSave=\"save participants\",b.ProblemsView=\"problems view\"})(y||(e.CodeActionTriggerSource=y={}));function E(b,a){return!(b.include&&!b.include.intersects(a)||b.excludes&&b.excludes.some(i=>p(a,i,b.include))||!b.includeSourceActions&&k.Source.contains(a))}e.mayIncludeActionsOfKind=E;function S(b,a){const i=a.kind?new k(a.kind):void 0;return!(b.include&&(!i||!b.include.contains(i))||b.excludes&&i&&b.excludes.some(n=>p(i,n,b.include))||!b.includeSourceActions&&i&&k.Source.contains(i)||b.onlyIncludePreferredActions&&!a.isPreferred)}e.filtersAction=S;function p(b,a,i){return!(!a.contains(b)||i&&a.contains(i))}class _{static fromUser(a,i){return!a||typeof a!=\"object\"?new _(i.kind,i.apply,!1):new _(_.getKindFromUser(a,i.kind),_.getApplyFromUser(a,i.apply),_.getPreferredUser(a))}static getApplyFromUser(a,i){switch(typeof a.apply==\"string\"?a.apply.toLowerCase():\"\"){case\"first\":return\"first\";case\"never\":return\"never\";case\"ifsingle\":return\"ifSingle\";default:return i}}static getKindFromUser(a,i){return typeof a.kind==\"string\"?new k(a.kind):i}static getPreferredUser(a){return typeof a.preferred==\"boolean\"?a.preferred:!1}constructor(a,i,n){this.kind=a,this.apply=i,this.preferred=n}}e.CodeActionCommandArgs=_;class v{constructor(a,i,n){this.action=a,this.provider=i,this.highlightRange=n}async resolve(a){var i;if(!((i=this.provider)===null||i===void 0)&&i.resolveCodeAction&&!this.action.edit){let n;try{n=await this.provider.resolveCodeAction(this.action,a)}catch(t){(0,L.onUnexpectedExternalError)(t)}n&&(this.action.edit=n.edit)}return this}}e.CodeActionItem=v}),define(se[553],oe([1,0,6]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorPickerModel=void 0;class k{get color(){return this._color}set color(E){this._color.equals(E)||(this._color=E,this._onDidChangeColor.fire(E))}get presentation(){return this.colorPresentations[this.presentationIndex]}get colorPresentations(){return this._colorPresentations}set colorPresentations(E){this._colorPresentations=E,this.presentationIndex>E.length-1&&(this.presentationIndex=0),this._onDidChangePresentation.fire(this.presentation)}constructor(E,S,p){this.presentationIndex=p,this._onColorFlushed=new L.Emitter,this.onColorFlushed=this._onColorFlushed.event,this._onDidChangeColor=new L.Emitter,this.onDidChangeColor=this._onDidChangeColor.event,this._onDidChangePresentation=new L.Emitter,this.onDidChangePresentation=this._onDidChangePresentation.event,this.originalColor=E,this._color=E,this._colorPresentations=S}selectNextColorPresentation(){this.presentationIndex=(this.presentationIndex+1)%this.colorPresentations.length,this.flushColor(),this._onDidChangePresentation.fire(this.presentation)}guessColorPresentation(E,S){let p=-1;for(let _=0;_<this.colorPresentations.length;_++)if(S.toLowerCase()===this.colorPresentations[_].label){p=_;break}if(p===-1){const _=S.split(\"(\")[0].toLowerCase();for(let v=0;v<this.colorPresentations.length;v++)if(this.colorPresentations[v].label.toLowerCase().startsWith(_)){p=v;break}}p!==-1&&p!==this.presentationIndex&&(this.presentationIndex=p,this._onDidChangePresentation.fire(this.presentation))}flushColor(){this._onColorFlushed.fire(this._color)}}e.ColorPickerModel=k}),define(se[301],oe([1,0,74,10,5,24]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BlockCommentCommand=void 0;class S{constructor(_,v,b){this.languageConfigurationService=b,this._selection=_,this._insertSpace=v,this._usedEndToken=null}static _haystackHasNeedleAtOffset(_,v,b){if(b<0)return!1;const a=v.length,i=_.length;if(b+a>i)return!1;for(let n=0;n<a;n++){const t=_.charCodeAt(b+n),r=v.charCodeAt(n);if(t!==r&&!(t>=65&&t<=90&&t+32===r)&&!(r>=65&&r<=90&&r+32===t))return!1}return!0}_createOperationsForBlockComment(_,v,b,a,i,n){const t=_.startLineNumber,r=_.startColumn,u=_.endLineNumber,f=_.endColumn,c=i.getLineContent(t),d=i.getLineContent(u);let s=c.lastIndexOf(v,r-1+v.length),l=d.indexOf(b,f-1-b.length);if(s!==-1&&l!==-1)if(t===u)c.substring(s+v.length,l).indexOf(b)>=0&&(s=-1,l=-1);else{const g=c.substring(s+v.length),h=d.substring(0,l);(g.indexOf(b)>=0||h.indexOf(b)>=0)&&(s=-1,l=-1)}let o;s!==-1&&l!==-1?(a&&s+v.length<c.length&&c.charCodeAt(s+v.length)===32&&(v=v+\" \"),a&&l>0&&d.charCodeAt(l-1)===32&&(b=\" \"+b,l-=1),o=S._createRemoveBlockCommentOperations(new y.Range(t,s+v.length+1,u,l+1),v,b)):(o=S._createAddBlockCommentOperations(_,v,b,this._insertSpace),this._usedEndToken=o.length===1?b:null);for(const g of o)n.addTrackedEditOperation(g.range,g.text)}static _createRemoveBlockCommentOperations(_,v,b){const a=[];return y.Range.isEmpty(_)?a.push(L.EditOperation.delete(new y.Range(_.startLineNumber,_.startColumn-v.length,_.endLineNumber,_.endColumn+b.length))):(a.push(L.EditOperation.delete(new y.Range(_.startLineNumber,_.startColumn-v.length,_.startLineNumber,_.startColumn))),a.push(L.EditOperation.delete(new y.Range(_.endLineNumber,_.endColumn,_.endLineNumber,_.endColumn+b.length)))),a}static _createAddBlockCommentOperations(_,v,b,a){const i=[];return y.Range.isEmpty(_)?i.push(L.EditOperation.replace(new y.Range(_.startLineNumber,_.startColumn,_.endLineNumber,_.endColumn),v+\"  \"+b)):(i.push(L.EditOperation.insert(new k.Position(_.startLineNumber,_.startColumn),v+(a?\" \":\"\"))),i.push(L.EditOperation.insert(new k.Position(_.endLineNumber,_.endColumn),(a?\" \":\"\")+b))),i}getEditOperations(_,v){const b=this._selection.startLineNumber,a=this._selection.startColumn;_.tokenization.tokenizeIfCheap(b);const i=_.getLanguageIdAtPosition(b,a),n=this.languageConfigurationService.getLanguageConfiguration(i).comments;!n||!n.blockCommentStartToken||!n.blockCommentEndToken||this._createOperationsForBlockComment(this._selection,n.blockCommentStartToken,n.blockCommentEndToken,this._insertSpace,_,v)}computeCursorState(_,v){const b=v.getInverseEditOperations();if(b.length===2){const a=b[0],i=b[1];return new E.Selection(a.range.endLineNumber,a.range.endColumn,i.range.startLineNumber,i.range.startColumn)}else{const a=b[0].range,i=this._usedEndToken?-this._usedEndToken.length-1:0;return new E.Selection(a.endLineNumber,a.endColumn+i,a.endLineNumber,a.endColumn+i)}}}e.BlockCommentCommand=S}),define(se[554],oe([1,0,11,74,10,5,24,301]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LineCommentCommand=void 0;class _{constructor(b,a,i,n,t,r,u){this.languageConfigurationService=b,this._selection=a,this._tabSize=i,this._type=n,this._insertSpace=t,this._selectionId=null,this._deltaColumn=0,this._moveEndPositionDown=!1,this._ignoreEmptyLines=r,this._ignoreFirstLine=u||!1}static _gatherPreflightCommentStrings(b,a,i,n){b.tokenization.tokenizeIfCheap(a);const t=b.getLanguageIdAtPosition(a,1),r=n.getLanguageConfiguration(t).comments,u=r?r.lineCommentToken:null;if(!u)return null;const f=[];for(let c=0,d=i-a+1;c<d;c++)f[c]={ignore:!1,commentStr:u,commentStrOffset:0,commentStrLength:u.length};return f}static _analyzeLines(b,a,i,n,t,r,u,f){let c=!0,d;b===0?d=!0:b===1?d=!1:d=!0;for(let s=0,l=n.length;s<l;s++){const o=n[s],g=t+s;if(g===t&&u){o.ignore=!0;continue}const h=i.getLineContent(g),m=L.firstNonWhitespaceIndex(h);if(m===-1){o.ignore=r,o.commentStrOffset=h.length;continue}if(c=!1,o.ignore=!1,o.commentStrOffset=m,d&&!p.BlockCommentCommand._haystackHasNeedleAtOffset(h,o.commentStr,m)&&(b===0?d=!1:b===1||(o.ignore=!0)),d&&a){const C=m+o.commentStrLength;C<h.length&&h.charCodeAt(C)===32&&(o.commentStrLength+=1)}}if(b===0&&c){d=!1;for(let s=0,l=n.length;s<l;s++)n[s].ignore=!1}return{supported:!0,shouldRemoveComments:d,lines:n}}static _gatherPreflightData(b,a,i,n,t,r,u,f){const c=_._gatherPreflightCommentStrings(i,n,t,f);return c===null?{supported:!1}:_._analyzeLines(b,a,i,c,n,r,u,f)}_executeLineComments(b,a,i,n){let t;i.shouldRemoveComments?t=_._createRemoveLineCommentsOperations(i.lines,n.startLineNumber):(_._normalizeInsertionPoint(b,i.lines,n.startLineNumber,this._tabSize),t=this._createAddLineCommentsOperations(i.lines,n.startLineNumber));const r=new y.Position(n.positionLineNumber,n.positionColumn);for(let u=0,f=t.length;u<f;u++)a.addEditOperation(t[u].range,t[u].text),E.Range.isEmpty(t[u].range)&&E.Range.getStartPosition(t[u].range).equals(r)&&b.getLineContent(r.lineNumber).length+1===r.column&&(this._deltaColumn=(t[u].text||\"\").length);this._selectionId=a.trackSelection(n)}_attemptRemoveBlockComment(b,a,i,n){let t=a.startLineNumber,r=a.endLineNumber;const u=n.length+Math.max(b.getLineFirstNonWhitespaceColumn(a.startLineNumber),a.startColumn);let f=b.getLineContent(t).lastIndexOf(i,u-1),c=b.getLineContent(r).indexOf(n,a.endColumn-1-i.length);return f!==-1&&c===-1&&(c=b.getLineContent(t).indexOf(n,f+i.length),r=t),f===-1&&c!==-1&&(f=b.getLineContent(r).lastIndexOf(i,c),t=r),a.isEmpty()&&(f===-1||c===-1)&&(f=b.getLineContent(t).indexOf(i),f!==-1&&(c=b.getLineContent(t).indexOf(n,f+i.length))),f!==-1&&b.getLineContent(t).charCodeAt(f+i.length)===32&&(i+=\" \"),c!==-1&&b.getLineContent(r).charCodeAt(c-1)===32&&(n=\" \"+n,c-=1),f!==-1&&c!==-1?p.BlockCommentCommand._createRemoveBlockCommentOperations(new E.Range(t,f+i.length+1,r,c+1),i,n):null}_executeBlockComment(b,a,i){b.tokenization.tokenizeIfCheap(i.startLineNumber);const n=b.getLanguageIdAtPosition(i.startLineNumber,1),t=this.languageConfigurationService.getLanguageConfiguration(n).comments;if(!t||!t.blockCommentStartToken||!t.blockCommentEndToken)return;const r=t.blockCommentStartToken,u=t.blockCommentEndToken;let f=this._attemptRemoveBlockComment(b,i,r,u);if(!f){if(i.isEmpty()){const c=b.getLineContent(i.startLineNumber);let d=L.firstNonWhitespaceIndex(c);d===-1&&(d=c.length),f=p.BlockCommentCommand._createAddBlockCommentOperations(new E.Range(i.startLineNumber,d+1,i.startLineNumber,c.length+1),r,u,this._insertSpace)}else f=p.BlockCommentCommand._createAddBlockCommentOperations(new E.Range(i.startLineNumber,b.getLineFirstNonWhitespaceColumn(i.startLineNumber),i.endLineNumber,b.getLineMaxColumn(i.endLineNumber)),r,u,this._insertSpace);f.length===1&&(this._deltaColumn=r.length+1)}this._selectionId=a.trackSelection(i);for(const c of f)a.addEditOperation(c.range,c.text)}getEditOperations(b,a){let i=this._selection;if(this._moveEndPositionDown=!1,i.startLineNumber===i.endLineNumber&&this._ignoreFirstLine){a.addEditOperation(new E.Range(i.startLineNumber,b.getLineMaxColumn(i.startLineNumber),i.startLineNumber+1,1),i.startLineNumber===b.getLineCount()?\"\":`\n`),this._selectionId=a.trackSelection(i);return}i.startLineNumber<i.endLineNumber&&i.endColumn===1&&(this._moveEndPositionDown=!0,i=i.setEndPosition(i.endLineNumber-1,b.getLineMaxColumn(i.endLineNumber-1)));const n=_._gatherPreflightData(this._type,this._insertSpace,b,i.startLineNumber,i.endLineNumber,this._ignoreEmptyLines,this._ignoreFirstLine,this.languageConfigurationService);return n.supported?this._executeLineComments(b,a,n,i):this._executeBlockComment(b,a,i)}computeCursorState(b,a){let i=a.getTrackedSelection(this._selectionId);return this._moveEndPositionDown&&(i=i.setEndPosition(i.endLineNumber+1,1)),new S.Selection(i.selectionStartLineNumber,i.selectionStartColumn+this._deltaColumn,i.positionLineNumber,i.positionColumn+this._deltaColumn)}static _createRemoveLineCommentsOperations(b,a){const i=[];for(let n=0,t=b.length;n<t;n++){const r=b[n];r.ignore||i.push(k.EditOperation.delete(new E.Range(a+n,r.commentStrOffset+1,a+n,r.commentStrOffset+r.commentStrLength+1)))}return i}_createAddLineCommentsOperations(b,a){const i=[],n=this._insertSpace?\" \":\"\";for(let t=0,r=b.length;t<r;t++){const u=b[t];u.ignore||i.push(k.EditOperation.insert(new y.Position(a+t,u.commentStrOffset+1),u.commentStr+n))}return i}static nextVisibleColumn(b,a,i,n){return i?b+(a-b%a):b+n}static _normalizeInsertionPoint(b,a,i,n){let t=1073741824,r,u;for(let f=0,c=a.length;f<c;f++){if(a[f].ignore)continue;const d=b.getLineContent(i+f);let s=0;for(let l=0,o=a[f].commentStrOffset;s<t&&l<o;l++)s=_.nextVisibleColumn(s,n,d.charCodeAt(l)===9,1);s<t&&(t=s)}t=Math.floor(t/n)*n;for(let f=0,c=a.length;f<c;f++){if(a[f].ignore)continue;const d=b.getLineContent(i+f);let s=0;for(r=0,u=a[f].commentStrOffset;s<t&&r<u;r++)s=_.nextVisibleColumn(s,n,d.charCodeAt(r)===9,1);s>t?a[f].commentStrOffset=r-1:a[f].commentStrOffset=r}}}e.LineCommentCommand=_}),define(se[555],oe([1,0,5,24]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DragAndDropCommand=void 0;class y{constructor(S,p,_){this.selection=S,this.targetPosition=p,this.copy=_,this.targetSelection=null}getEditOperations(S,p){const _=S.getValueInRange(this.selection);if(this.copy||p.addEditOperation(this.selection,null),p.addEditOperation(new L.Range(this.targetPosition.lineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.targetPosition.column),_),this.selection.containsPosition(this.targetPosition)&&!(this.copy&&(this.selection.getEndPosition().equals(this.targetPosition)||this.selection.getStartPosition().equals(this.targetPosition)))){this.targetSelection=this.selection;return}if(this.copy){this.targetSelection=new k.Selection(this.targetPosition.lineNumber,this.targetPosition.column,this.selection.endLineNumber-this.selection.startLineNumber+this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn);return}if(this.targetPosition.lineNumber>this.selection.endLineNumber){this.targetSelection=new k.Selection(this.targetPosition.lineNumber-this.selection.endLineNumber+this.selection.startLineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn);return}if(this.targetPosition.lineNumber<this.selection.endLineNumber){this.targetSelection=new k.Selection(this.targetPosition.lineNumber,this.targetPosition.column,this.targetPosition.lineNumber+this.selection.endLineNumber-this.selection.startLineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn);return}this.selection.endColumn<=this.targetPosition.column?this.targetSelection=new k.Selection(this.targetPosition.lineNumber-this.selection.endLineNumber+this.selection.startLineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column-this.selection.endColumn+this.selection.startColumn:this.targetPosition.column-this.selection.endColumn+this.selection.startColumn,this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column:this.selection.endColumn):this.targetSelection=new k.Selection(this.targetPosition.lineNumber-this.selection.endLineNumber+this.selection.startLineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.targetPosition.column+this.selection.endColumn-this.selection.startColumn)}computeCursorState(S,p){return this.targetSelection}}e.DragAndDropCommand=y}),define(se[556],oe([1,0,5]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ReplaceAllCommand=void 0;class k{constructor(E,S,p){this._editorSelection=E,this._ranges=S,this._replaceStrings=p,this._trackedEditorSelectionId=null}getEditOperations(E,S){if(this._ranges.length>0){const p=[];for(let b=0;b<this._ranges.length;b++)p.push({range:this._ranges[b],text:this._replaceStrings[b]});p.sort((b,a)=>L.Range.compareRangesUsingStarts(b.range,a.range));const _=[];let v=p[0];for(let b=1;b<p.length;b++)v.range.endLineNumber===p[b].range.startLineNumber&&v.range.endColumn===p[b].range.startColumn?(v.range=v.range.plusRange(p[b].range),v.text=v.text+p[b].text):(_.push(v),v=p[b]);_.push(v);for(const b of _)S.addEditOperation(b.range,b.text)}this._trackedEditorSelectionId=S.trackSelection(this._editorSelection)}computeCursorState(E,S){return S.getTrackedSelection(this._trackedEditorSelectionId)}}e.ReplaceAllCommand=k}),define(se[557],oe([1,0,406]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseReplaceString=e.ReplacePiece=e.ReplacePattern=void 0;class k{constructor(b){this.staticValue=b,this.kind=0}}class y{constructor(b){this.pieces=b,this.kind=1}}class E{static fromStaticValue(b){return new E([S.staticValue(b)])}get hasReplacementPatterns(){return this._state.kind===1}constructor(b){!b||b.length===0?this._state=new k(\"\"):b.length===1&&b[0].staticValue!==null?this._state=new k(b[0].staticValue):this._state=new y(b)}buildReplaceString(b,a){if(this._state.kind===0)return a?(0,L.buildReplaceStringWithCasePreserved)(b,this._state.staticValue):this._state.staticValue;let i=\"\";for(let n=0,t=this._state.pieces.length;n<t;n++){const r=this._state.pieces[n];if(r.staticValue!==null){i+=r.staticValue;continue}let u=E._substitute(r.matchIndex,b);if(r.caseOps!==null&&r.caseOps.length>0){const f=[],c=r.caseOps.length;let d=0;for(let s=0,l=u.length;s<l;s++){if(d>=c){f.push(u.slice(s));break}switch(r.caseOps[d]){case\"U\":f.push(u[s].toUpperCase());break;case\"u\":f.push(u[s].toUpperCase()),d++;break;case\"L\":f.push(u[s].toLowerCase());break;case\"l\":f.push(u[s].toLowerCase()),d++;break;default:f.push(u[s])}}u=f.join(\"\")}i+=u}return i}static _substitute(b,a){if(a===null)return\"\";if(b===0)return a[0];let i=\"\";for(;b>0;){if(b<a.length)return(a[b]||\"\")+i;i=String(b%10)+i,b=Math.floor(b/10)}return\"$\"+i}}e.ReplacePattern=E;class S{static staticValue(b){return new S(b,-1,null)}static caseOps(b,a){return new S(null,b,a)}constructor(b,a,i){this.staticValue=b,this.matchIndex=a,!i||i.length===0?this.caseOps=null:this.caseOps=i.slice(0)}}e.ReplacePiece=S;class p{constructor(b){this._source=b,this._lastCharIndex=0,this._result=[],this._resultLen=0,this._currentStaticPiece=\"\"}emitUnchanged(b){this._emitStatic(this._source.substring(this._lastCharIndex,b)),this._lastCharIndex=b}emitStatic(b,a){this._emitStatic(b),this._lastCharIndex=a}_emitStatic(b){b.length!==0&&(this._currentStaticPiece+=b)}emitMatchIndex(b,a,i){this._currentStaticPiece.length!==0&&(this._result[this._resultLen++]=S.staticValue(this._currentStaticPiece),this._currentStaticPiece=\"\"),this._result[this._resultLen++]=S.caseOps(b,i),this._lastCharIndex=a}finalize(){return this.emitUnchanged(this._source.length),this._currentStaticPiece.length!==0&&(this._result[this._resultLen++]=S.staticValue(this._currentStaticPiece),this._currentStaticPiece=\"\"),new E(this._result)}}function _(v){if(!v||v.length===0)return new E(null);const b=[],a=new p(v);for(let i=0,n=v.length;i<n;i++){const t=v.charCodeAt(i);if(t===92){if(i++,i>=n)break;const r=v.charCodeAt(i);switch(r){case 92:a.emitUnchanged(i-1),a.emitStatic(\"\\\\\",i+1);break;case 110:a.emitUnchanged(i-1),a.emitStatic(`\n`,i+1);break;case 116:a.emitUnchanged(i-1),a.emitStatic(\"\t\",i+1);break;case 117:case 85:case 108:case 76:a.emitUnchanged(i-1),a.emitStatic(\"\",i+1),b.push(String.fromCharCode(r));break}continue}if(t===36){if(i++,i>=n)break;const r=v.charCodeAt(i);if(r===36){a.emitUnchanged(i-1),a.emitStatic(\"$\",i+1);continue}if(r===48||r===38){a.emitUnchanged(i-1),a.emitMatchIndex(0,i+1,b),b.length=0;continue}if(49<=r&&r<=57){let u=r-48;if(i+1<n){const f=v.charCodeAt(i+1);if(48<=f&&f<=57){i++,u=u*10+(f-48),a.emitUnchanged(i-2),a.emitMatchIndex(u,i+1,b),b.length=0;continue}}a.emitUnchanged(i-1),a.emitMatchIndex(u,i+1,b),b.length=0;continue}}}return a.finalize()}e.parseReplaceString=_}),define(se[185],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FoldingRegion=e.FoldingRegions=e.MAX_LINE_NUMBER=e.MAX_FOLDING_REGIONS=e.foldSourceAbbr=void 0,e.foldSourceAbbr={[0]:\" \",[1]:\"u\",[2]:\"r\"},e.MAX_FOLDING_REGIONS=65535,e.MAX_LINE_NUMBER=16777215;const L=4278190080;class k{constructor(p){const _=Math.ceil(p/32);this._states=new Uint32Array(_)}get(p){const _=p/32|0,v=p%32;return(this._states[_]&1<<v)!==0}set(p,_){const v=p/32|0,b=p%32,a=this._states[v];_?this._states[v]=a|1<<b:this._states[v]=a&~(1<<b)}}class y{constructor(p,_,v){if(p.length!==_.length||p.length>e.MAX_FOLDING_REGIONS)throw new Error(\"invalid startIndexes or endIndexes size\");this._startIndexes=p,this._endIndexes=_,this._collapseStates=new k(p.length),this._userDefinedStates=new k(p.length),this._recoveredStates=new k(p.length),this._types=v,this._parentsComputed=!1}ensureParentIndices(){if(!this._parentsComputed){this._parentsComputed=!0;const p=[],_=(v,b)=>{const a=p[p.length-1];return this.getStartLineNumber(a)<=v&&this.getEndLineNumber(a)>=b};for(let v=0,b=this._startIndexes.length;v<b;v++){const a=this._startIndexes[v],i=this._endIndexes[v];if(a>e.MAX_LINE_NUMBER||i>e.MAX_LINE_NUMBER)throw new Error(\"startLineNumber or endLineNumber must not exceed \"+e.MAX_LINE_NUMBER);for(;p.length>0&&!_(a,i);)p.pop();const n=p.length>0?p[p.length-1]:-1;p.push(v),this._startIndexes[v]=a+((n&255)<<24),this._endIndexes[v]=i+((n&65280)<<16)}}}get length(){return this._startIndexes.length}getStartLineNumber(p){return this._startIndexes[p]&e.MAX_LINE_NUMBER}getEndLineNumber(p){return this._endIndexes[p]&e.MAX_LINE_NUMBER}getType(p){return this._types?this._types[p]:void 0}hasTypes(){return!!this._types}isCollapsed(p){return this._collapseStates.get(p)}setCollapsed(p,_){this._collapseStates.set(p,_)}isUserDefined(p){return this._userDefinedStates.get(p)}setUserDefined(p,_){return this._userDefinedStates.set(p,_)}isRecovered(p){return this._recoveredStates.get(p)}setRecovered(p,_){return this._recoveredStates.set(p,_)}getSource(p){return this.isUserDefined(p)?1:this.isRecovered(p)?2:0}setSource(p,_){_===1?(this.setUserDefined(p,!0),this.setRecovered(p,!1)):_===2?(this.setUserDefined(p,!1),this.setRecovered(p,!0)):(this.setUserDefined(p,!1),this.setRecovered(p,!1))}setCollapsedAllOfType(p,_){let v=!1;if(this._types)for(let b=0;b<this._types.length;b++)this._types[b]===p&&(this.setCollapsed(b,_),v=!0);return v}toRegion(p){return new E(this,p)}getParentIndex(p){this.ensureParentIndices();const _=((this._startIndexes[p]&L)>>>24)+((this._endIndexes[p]&L)>>>16);return _===e.MAX_FOLDING_REGIONS?-1:_}contains(p,_){return this.getStartLineNumber(p)<=_&&this.getEndLineNumber(p)>=_}findIndex(p){let _=0,v=this._startIndexes.length;if(v===0)return-1;for(;_<v;){const b=Math.floor((_+v)/2);p<this.getStartLineNumber(b)?v=b:_=b+1}return _-1}findRange(p){let _=this.findIndex(p);if(_>=0){if(this.getEndLineNumber(_)>=p)return _;for(_=this.getParentIndex(_);_!==-1;){if(this.contains(_,p))return _;_=this.getParentIndex(_)}}return-1}toString(){const p=[];for(let _=0;_<this.length;_++)p[_]=`[${e.foldSourceAbbr[this.getSource(_)]}${this.isCollapsed(_)?\"+\":\"-\"}] ${this.getStartLineNumber(_)}/${this.getEndLineNumber(_)}`;return p.join(\", \")}toFoldRange(p){return{startLineNumber:this._startIndexes[p]&e.MAX_LINE_NUMBER,endLineNumber:this._endIndexes[p]&e.MAX_LINE_NUMBER,type:this._types?this._types[p]:void 0,isCollapsed:this.isCollapsed(p),source:this.getSource(p)}}static fromFoldRanges(p){const _=p.length,v=new Uint32Array(_),b=new Uint32Array(_);let a=[],i=!1;for(let t=0;t<_;t++){const r=p[t];v[t]=r.startLineNumber,b[t]=r.endLineNumber,a.push(r.type),r.type&&(i=!0)}i||(a=void 0);const n=new y(v,b,a);for(let t=0;t<_;t++)p[t].isCollapsed&&n.setCollapsed(t,!0),n.setSource(t,p[t].source);return n}static sanitizeAndMerge(p,_,v){v=v??Number.MAX_VALUE;const b=(l,o)=>Array.isArray(l)?g=>g<o?l[g]:void 0:g=>g<o?l.toFoldRange(g):void 0,a=b(p,p.length),i=b(_,_.length);let n=0,t=0,r=a(0),u=i(0);const f=[];let c,d=0;const s=[];for(;r||u;){let l;if(u&&(!r||r.startLineNumber>=u.startLineNumber))r&&r.startLineNumber===u.startLineNumber?(u.source===1?l=u:(l=r,l.isCollapsed=u.isCollapsed&&r.endLineNumber===u.endLineNumber,l.source=0),r=a(++n)):(l=u,u.isCollapsed&&u.source===0&&(l.source=2)),u=i(++t);else{let o=t,g=u;for(;;){if(!g||g.startLineNumber>r.endLineNumber){l=r;break}if(g.source===1&&g.endLineNumber>r.endLineNumber)break;g=i(++o)}r=a(++n)}if(l){for(;c&&c.endLineNumber<l.startLineNumber;)c=f.pop();l.endLineNumber>l.startLineNumber&&l.startLineNumber>d&&l.endLineNumber<=v&&(!c||c.endLineNumber>=l.endLineNumber)&&(s.push(l),d=l.startLineNumber,c&&f.push(c),c=l)}}return s}}e.FoldingRegions=y;class E{constructor(p,_){this.ranges=p,this.index=_}get startLineNumber(){return this.ranges.getStartLineNumber(this.index)}get endLineNumber(){return this.ranges.getEndLineNumber(this.index)}get regionIndex(){return this.index}get parentIndex(){return this.ranges.getParentIndex(this.index)}get isCollapsed(){return this.ranges.isCollapsed(this.index)}containedBy(p){return p.startLineNumber<=this.startLineNumber&&p.endLineNumber>=this.endLineNumber}containsLine(p){return this.startLineNumber<=p&&p<=this.endLineNumber}}e.FoldingRegion=E}),define(se[302],oe([1,0,6,185,111]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getNextFoldLine=e.getPreviousFoldLine=e.getParentFoldLine=e.setCollapseStateForType=e.setCollapseStateForMatchingLines=e.setCollapseStateForRest=e.setCollapseStateAtLevel=e.setCollapseStateUp=e.setCollapseStateLevelsUp=e.setCollapseStateLevelsDown=e.toggleCollapseState=e.FoldingModel=void 0;class E{get regions(){return this._regions}get textModel(){return this._textModel}constructor(c,d){this._updateEventEmitter=new L.Emitter,this.onDidChange=this._updateEventEmitter.event,this._textModel=c,this._decorationProvider=d,this._regions=new k.FoldingRegions(new Uint32Array(0),new Uint32Array(0)),this._editorDecorationIds=[]}toggleCollapseState(c){if(!c.length)return;c=c.sort((s,l)=>s.regionIndex-l.regionIndex);const d={};this._decorationProvider.changeDecorations(s=>{let l=0,o=-1,g=-1;const h=m=>{for(;l<m;){const C=this._regions.getEndLineNumber(l),w=this._regions.isCollapsed(l);if(C<=o){const D=this.regions.getSource(l)!==0;s.changeDecorationOptions(this._editorDecorationIds[l],this._decorationProvider.getDecorationOption(w,C<=g,D))}w&&C>g&&(g=C),l++}};for(const m of c){const C=m.regionIndex,w=this._editorDecorationIds[C];if(w&&!d[w]){d[w]=!0,h(C);const D=!this._regions.isCollapsed(C);this._regions.setCollapsed(C,D),o=Math.max(o,this._regions.getEndLineNumber(C))}}h(this._regions.length)}),this._updateEventEmitter.fire({model:this,collapseStateChanged:c})}removeManualRanges(c){const d=new Array,s=l=>{for(const o of c)if(!(o.startLineNumber>l.endLineNumber||l.startLineNumber>o.endLineNumber))return!0;return!1};for(let l=0;l<this._regions.length;l++){const o=this._regions.toFoldRange(l);(o.source===0||!s(o))&&d.push(o)}this.updatePost(k.FoldingRegions.fromFoldRanges(d))}update(c,d=[]){const s=this._currentFoldedOrManualRanges(d),l=k.FoldingRegions.sanitizeAndMerge(c,s,this._textModel.getLineCount());this.updatePost(k.FoldingRegions.fromFoldRanges(l))}updatePost(c){const d=[];let s=-1;for(let l=0,o=c.length;l<o;l++){const g=c.getStartLineNumber(l),h=c.getEndLineNumber(l),m=c.isCollapsed(l),C=c.getSource(l)!==0,w={startLineNumber:g,startColumn:this._textModel.getLineMaxColumn(g),endLineNumber:h,endColumn:this._textModel.getLineMaxColumn(h)+1};d.push({range:w,options:this._decorationProvider.getDecorationOption(m,h<=s,C)}),m&&h>s&&(s=h)}this._decorationProvider.changeDecorations(l=>this._editorDecorationIds=l.deltaDecorations(this._editorDecorationIds,d)),this._regions=c,this._updateEventEmitter.fire({model:this})}_currentFoldedOrManualRanges(c=[]){const d=(l,o)=>{for(const g of c)if(l<g&&g<=o)return!0;return!1},s=[];for(let l=0,o=this._regions.length;l<o;l++){let g=this.regions.isCollapsed(l);const h=this.regions.getSource(l);if(g||h!==0){const m=this._regions.toFoldRange(l),C=this._textModel.getDecorationRange(this._editorDecorationIds[l]);C&&(g&&d(C.startLineNumber,C.endLineNumber)&&(g=!1),s.push({startLineNumber:C.startLineNumber,endLineNumber:C.endLineNumber,type:m.type,isCollapsed:g,source:h}))}}return s}getMemento(){const c=this._currentFoldedOrManualRanges(),d=[],s=this._textModel.getLineCount();for(let l=0,o=c.length;l<o;l++){const g=c[l];if(g.startLineNumber>=g.endLineNumber||g.startLineNumber<1||g.endLineNumber>s)continue;const h=this._getLinesChecksum(g.startLineNumber+1,g.endLineNumber);d.push({startLineNumber:g.startLineNumber,endLineNumber:g.endLineNumber,isCollapsed:g.isCollapsed,source:g.source,checksum:h})}return d.length>0?d:void 0}applyMemento(c){var d,s;if(!Array.isArray(c))return;const l=[],o=this._textModel.getLineCount();for(const h of c){if(h.startLineNumber>=h.endLineNumber||h.startLineNumber<1||h.endLineNumber>o)continue;const m=this._getLinesChecksum(h.startLineNumber+1,h.endLineNumber);(!h.checksum||m===h.checksum)&&l.push({startLineNumber:h.startLineNumber,endLineNumber:h.endLineNumber,type:void 0,isCollapsed:(d=h.isCollapsed)!==null&&d!==void 0?d:!0,source:(s=h.source)!==null&&s!==void 0?s:0})}const g=k.FoldingRegions.sanitizeAndMerge(this._regions,l,o);this.updatePost(k.FoldingRegions.fromFoldRanges(g))}_getLinesChecksum(c,d){return(0,y.hash)(this._textModel.getLineContent(c)+this._textModel.getLineContent(d))%1e6}dispose(){this._decorationProvider.removeDecorations(this._editorDecorationIds)}getAllRegionsAtLine(c,d){const s=[];if(this._regions){let l=this._regions.findRange(c),o=1;for(;l>=0;){const g=this._regions.toRegion(l);(!d||d(g,o))&&s.push(g),o++,l=g.parentIndex}}return s}getRegionAtLine(c){if(this._regions){const d=this._regions.findRange(c);if(d>=0)return this._regions.toRegion(d)}return null}getRegionsInside(c,d){const s=[],l=c?c.regionIndex+1:0,o=c?c.endLineNumber:Number.MAX_VALUE;if(d&&d.length===2){const g=[];for(let h=l,m=this._regions.length;h<m;h++){const C=this._regions.toRegion(h);if(this._regions.getStartLineNumber(h)<o){for(;g.length>0&&!C.containedBy(g[g.length-1]);)g.pop();g.push(C),d(C,g.length)&&s.push(C)}else break}}else for(let g=l,h=this._regions.length;g<h;g++){const m=this._regions.toRegion(g);if(this._regions.getStartLineNumber(g)<o)(!d||d(m))&&s.push(m);else break}return s}}e.FoldingModel=E;function S(f,c,d){const s=[];for(const l of d){const o=f.getRegionAtLine(l);if(o){const g=!o.isCollapsed;if(s.push(o),c>1){const h=f.getRegionsInside(o,(m,C)=>m.isCollapsed!==g&&C<c);s.push(...h)}}}f.toggleCollapseState(s)}e.toggleCollapseState=S;function p(f,c,d=Number.MAX_VALUE,s){const l=[];if(s&&s.length>0)for(const o of s){const g=f.getRegionAtLine(o);if(g&&(g.isCollapsed!==c&&l.push(g),d>1)){const h=f.getRegionsInside(g,(m,C)=>m.isCollapsed!==c&&C<d);l.push(...h)}}else{const o=f.getRegionsInside(null,(g,h)=>g.isCollapsed!==c&&h<d);l.push(...o)}f.toggleCollapseState(l)}e.setCollapseStateLevelsDown=p;function _(f,c,d,s){const l=[];for(const o of s){const g=f.getAllRegionsAtLine(o,(h,m)=>h.isCollapsed!==c&&m<=d);l.push(...g)}f.toggleCollapseState(l)}e.setCollapseStateLevelsUp=_;function v(f,c,d){const s=[];for(const l of d){const o=f.getAllRegionsAtLine(l,g=>g.isCollapsed!==c);o.length>0&&s.push(o[0])}f.toggleCollapseState(s)}e.setCollapseStateUp=v;function b(f,c,d,s){const l=(g,h)=>h===c&&g.isCollapsed!==d&&!s.some(m=>g.containsLine(m)),o=f.getRegionsInside(null,l);f.toggleCollapseState(o)}e.setCollapseStateAtLevel=b;function a(f,c,d){const s=[];for(const g of d){const h=f.getAllRegionsAtLine(g,void 0);h.length>0&&s.push(h[0])}const l=g=>s.every(h=>!h.containedBy(g)&&!g.containedBy(h))&&g.isCollapsed!==c,o=f.getRegionsInside(null,l);f.toggleCollapseState(o)}e.setCollapseStateForRest=a;function i(f,c,d){const s=f.textModel,l=f.regions,o=[];for(let g=l.length-1;g>=0;g--)if(d!==l.isCollapsed(g)){const h=l.getStartLineNumber(g);c.test(s.getLineContent(h))&&o.push(l.toRegion(g))}f.toggleCollapseState(o)}e.setCollapseStateForMatchingLines=i;function n(f,c,d){const s=f.regions,l=[];for(let o=s.length-1;o>=0;o--)d!==s.isCollapsed(o)&&c===s.getType(o)&&l.push(s.toRegion(o));f.toggleCollapseState(l)}e.setCollapseStateForType=n;function t(f,c){let d=null;const s=c.getRegionAtLine(f);if(s!==null&&(d=s.startLineNumber,f===d)){const l=s.parentIndex;l!==-1?d=c.regions.getStartLineNumber(l):d=null}return d}e.getParentFoldLine=t;function r(f,c){let d=c.getRegionAtLine(f);if(d!==null&&d.startLineNumber===f){if(f!==d.startLineNumber)return d.startLineNumber;{const s=d.parentIndex;let l=0;for(s!==-1&&(l=c.regions.getStartLineNumber(d.parentIndex));d!==null;)if(d.regionIndex>0){if(d=c.regions.toRegion(d.regionIndex-1),d.startLineNumber<=l)return null;if(d.parentIndex===s)return d.startLineNumber}else return null}}else if(c.regions.length>0)for(d=c.regions.toRegion(c.regions.length-1);d!==null;){if(d.startLineNumber<f)return d.startLineNumber;d.regionIndex>0?d=c.regions.toRegion(d.regionIndex-1):d=null}return null}e.getPreviousFoldLine=r;function u(f,c){let d=c.getRegionAtLine(f);if(d!==null&&d.startLineNumber===f){const s=d.parentIndex;let l=0;if(s!==-1)l=c.regions.getEndLineNumber(d.parentIndex);else{if(c.regions.length===0)return null;l=c.regions.getEndLineNumber(c.regions.length-1)}for(;d!==null;)if(d.regionIndex<c.regions.length){if(d=c.regions.toRegion(d.regionIndex+1),d.startLineNumber>=l)return null;if(d.parentIndex===s)return d.startLineNumber}else return null}else if(c.regions.length>0)for(d=c.regions.toRegion(0);d!==null;){if(d.startLineNumber>f)return d.startLineNumber;d.regionIndex<c.regions.length?d=c.regions.toRegion(d.regionIndex+1):d=null}return null}e.getNextFoldLine=u}),define(se[558],oe([1,0,60,6,5,129]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HiddenRangeModel=void 0;class S{get onDidChange(){return this._updateEventEmitter.event}get hiddenRanges(){return this._hiddenRanges}constructor(b){this._updateEventEmitter=new k.Emitter,this._hasLineChanges=!1,this._foldingModel=b,this._foldingModelListener=b.onDidChange(a=>this.updateHiddenRanges()),this._hiddenRanges=[],b.regions.length&&this.updateHiddenRanges()}notifyChangeModelContent(b){this._hiddenRanges.length&&!this._hasLineChanges&&(this._hasLineChanges=b.changes.some(a=>a.range.endLineNumber!==a.range.startLineNumber||(0,E.countEOL)(a.text)[0]!==0))}updateHiddenRanges(){let b=!1;const a=[];let i=0,n=0,t=Number.MAX_VALUE,r=-1;const u=this._foldingModel.regions;for(;i<u.length;i++){if(!u.isCollapsed(i))continue;const f=u.getStartLineNumber(i)+1,c=u.getEndLineNumber(i);t<=f&&c<=r||(!b&&n<this._hiddenRanges.length&&this._hiddenRanges[n].startLineNumber===f&&this._hiddenRanges[n].endLineNumber===c?(a.push(this._hiddenRanges[n]),n++):(b=!0,a.push(new y.Range(f,1,c,1))),t=f,r=c)}(this._hasLineChanges||b||n<this._hiddenRanges.length)&&this.applyHiddenRanges(a)}applyHiddenRanges(b){this._hiddenRanges=b,this._hasLineChanges=!1,this._updateEventEmitter.fire(b)}hasRanges(){return this._hiddenRanges.length>0}isHidden(b){return _(this._hiddenRanges,b)!==null}adjustSelections(b){let a=!1;const i=this._foldingModel.textModel;let n=null;const t=r=>((!n||!p(r,n))&&(n=_(this._hiddenRanges,r)),n?n.startLineNumber-1:null);for(let r=0,u=b.length;r<u;r++){let f=b[r];const c=t(f.startLineNumber);c&&(f=f.setStartPosition(c,i.getLineMaxColumn(c)),a=!0);const d=t(f.endLineNumber);d&&(f=f.setEndPosition(d,i.getLineMaxColumn(d)),a=!0),b[r]=f}return a}dispose(){this.hiddenRanges.length>0&&(this._hiddenRanges=[],this._updateEventEmitter.fire(this._hiddenRanges)),this._foldingModelListener&&(this._foldingModelListener.dispose(),this._foldingModelListener=null)}}e.HiddenRangeModel=S;function p(v,b){return v>=b.startLineNumber&&v<=b.endLineNumber}function _(v,b){const a=(0,L.findFirstIdxMonotonousOrArrLen)(v,i=>b<i.startLineNumber)-1;return a>=0&&v[a].endLineNumber>=b?v[a]:null}}),define(se[303],oe([1,0,210,185]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.computeRanges=e.RangesCollector=e.IndentRangeProvider=void 0;const y=5e3,E=\"indent\";class S{constructor(a,i,n){this.editorModel=a,this.languageConfigurationService=i,this.foldingRangesLimit=n,this.id=E}dispose(){}compute(a){const i=this.languageConfigurationService.getLanguageConfiguration(this.editorModel.getLanguageId()).foldingRules,n=i&&!!i.offSide,t=i&&i.markers;return Promise.resolve(v(this.editorModel,n,t,this.foldingRangesLimit))}}e.IndentRangeProvider=S;class p{constructor(a){this._startIndexes=[],this._endIndexes=[],this._indentOccurrences=[],this._length=0,this._foldingRangesLimit=a}insertFirst(a,i,n){if(a>k.MAX_LINE_NUMBER||i>k.MAX_LINE_NUMBER)return;const t=this._length;this._startIndexes[t]=a,this._endIndexes[t]=i,this._length++,n<1e3&&(this._indentOccurrences[n]=(this._indentOccurrences[n]||0)+1)}toIndentRanges(a){const i=this._foldingRangesLimit.limit;if(this._length<=i){this._foldingRangesLimit.update(this._length,!1);const n=new Uint32Array(this._length),t=new Uint32Array(this._length);for(let r=this._length-1,u=0;r>=0;r--,u++)n[u]=this._startIndexes[r],t[u]=this._endIndexes[r];return new k.FoldingRegions(n,t)}else{this._foldingRangesLimit.update(this._length,i);let n=0,t=this._indentOccurrences.length;for(let c=0;c<this._indentOccurrences.length;c++){const d=this._indentOccurrences[c];if(d){if(d+n>i){t=c;break}n+=d}}const r=a.getOptions().tabSize,u=new Uint32Array(i),f=new Uint32Array(i);for(let c=this._length-1,d=0;c>=0;c--){const s=this._startIndexes[c],l=a.getLineContent(s),o=(0,L.computeIndentLevel)(l,r);(o<t||o===t&&n++<i)&&(u[d]=s,f[d]=this._endIndexes[c],d++)}return new k.FoldingRegions(u,f)}}}e.RangesCollector=p;const _={limit:y,update:()=>{}};function v(b,a,i,n=_){const t=b.getOptions().tabSize,r=new p(n);let u;i&&(u=new RegExp(`(${i.start.source})|(?:${i.end.source})`));const f=[],c=b.getLineCount()+1;f.push({indent:-1,endAbove:c,line:c});for(let d=b.getLineCount();d>0;d--){const s=b.getLineContent(d),l=(0,L.computeIndentLevel)(s,t);let o=f[f.length-1];if(l===-1){a&&(o.endAbove=d);continue}let g;if(u&&(g=s.match(u)))if(g[1]){let h=f.length-1;for(;h>0&&f[h].indent!==-2;)h--;if(h>0){f.length=h+1,o=f[h],r.insertFirst(d,o.line,l),o.line=d,o.indent=l,o.endAbove=d;continue}}else{f.push({indent:-2,endAbove:d,line:d});continue}if(o.indent>l){do f.pop(),o=f[f.length-1];while(o.indent>l);const h=o.endAbove-1;h-d>=1&&r.insertFirst(d,h,l)}o.indent===l?o.endAbove=d:f.push({indent:l,endAbove:d,line:d})}return r.toIndentRanges(b)}e.computeRanges=v}),define(se[304],oe([1,0,12,2,185]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sanitizeRanges=e.SyntaxRangeProvider=void 0;const E={},S=\"syntax\";class p{constructor(i,n,t,r,u){this.editorModel=i,this.providers=n,this.handleFoldingRangesChange=t,this.foldingRangesLimit=r,this.fallbackRangeProvider=u,this.id=S,this.disposables=new k.DisposableStore,u&&this.disposables.add(u);for(const f of n)typeof f.onDidChange==\"function\"&&this.disposables.add(f.onDidChange(t))}compute(i){return _(this.providers,this.editorModel,i).then(n=>{var t,r;return n?b(n,this.foldingRangesLimit):(r=(t=this.fallbackRangeProvider)===null||t===void 0?void 0:t.compute(i))!==null&&r!==void 0?r:null})}dispose(){this.disposables.dispose()}}e.SyntaxRangeProvider=p;function _(a,i,n){let t=null;const r=a.map((u,f)=>Promise.resolve(u.provideFoldingRanges(i,E,n)).then(c=>{if(!n.isCancellationRequested&&Array.isArray(c)){Array.isArray(t)||(t=[]);const d=i.getLineCount();for(const s of c)s.start>0&&s.end>s.start&&s.end<=d&&t.push({start:s.start,end:s.end,rank:f,kind:s.kind})}},L.onUnexpectedExternalError));return Promise.all(r).then(u=>t)}class v{constructor(i){this._startIndexes=[],this._endIndexes=[],this._nestingLevels=[],this._nestingLevelCounts=[],this._types=[],this._length=0,this._foldingRangesLimit=i}add(i,n,t,r){if(i>y.MAX_LINE_NUMBER||n>y.MAX_LINE_NUMBER)return;const u=this._length;this._startIndexes[u]=i,this._endIndexes[u]=n,this._nestingLevels[u]=r,this._types[u]=t,this._length++,r<30&&(this._nestingLevelCounts[r]=(this._nestingLevelCounts[r]||0)+1)}toIndentRanges(){const i=this._foldingRangesLimit.limit;if(this._length<=i){this._foldingRangesLimit.update(this._length,!1);const n=new Uint32Array(this._length),t=new Uint32Array(this._length);for(let r=0;r<this._length;r++)n[r]=this._startIndexes[r],t[r]=this._endIndexes[r];return new y.FoldingRegions(n,t,this._types)}else{this._foldingRangesLimit.update(this._length,i);let n=0,t=this._nestingLevelCounts.length;for(let c=0;c<this._nestingLevelCounts.length;c++){const d=this._nestingLevelCounts[c];if(d){if(d+n>i){t=c;break}n+=d}}const r=new Uint32Array(i),u=new Uint32Array(i),f=[];for(let c=0,d=0;c<this._length;c++){const s=this._nestingLevels[c];(s<t||s===t&&n++<i)&&(r[d]=this._startIndexes[c],u[d]=this._endIndexes[c],f[d]=this._types[c],d++)}return new y.FoldingRegions(r,u,f)}}}function b(a,i){const n=a.sort((f,c)=>{let d=f.start-c.start;return d===0&&(d=f.rank-c.rank),d}),t=new v(i);let r;const u=[];for(const f of n)if(!r)r=f,t.add(f.start,f.end,f.kind&&f.kind.value,u.length);else if(f.start>r.start)if(f.end<=r.end)u.push(r),r=f,t.add(f.start,f.end,f.kind&&f.kind.value,u.length);else{if(f.start>r.end){do r=u.pop();while(r&&f.start>r.end);r&&u.push(r),r=f}t.add(f.start,f.end,f.kind&&f.kind.value,u.length)}return t.toIndentRanges()}e.sanitizeRanges=b}),define(se[305],oe([1,0,74,5,127]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FormattingEdit=void 0;class E{static _handleEolEdits(p,_){let v;const b=[];for(const a of _)typeof a.eol==\"number\"&&(v=a.eol),a.range&&typeof a.text==\"string\"&&b.push(a);return typeof v==\"number\"&&p.hasModel()&&p.getModel().pushEOL(v),b}static _isFullModelReplaceEdit(p,_){if(!p.hasModel())return!1;const v=p.getModel(),b=v.validateRange(_.range);return v.getFullModelRange().equalsRange(b)}static execute(p,_,v){v&&p.pushUndoStop();const b=y.StableEditorScrollState.capture(p),a=E._handleEolEdits(p,_);a.length===1&&E._isFullModelReplaceEdit(p,a[0])?p.executeEdits(\"formatEditsCommand\",a.map(i=>L.EditOperation.replace(k.Range.lift(i.range),i.text))):p.executeEdits(\"formatEditsCommand\",a.map(i=>L.EditOperation.replaceMove(k.Range.lift(i.range),i.text))),v&&p.pushUndoStop(),b.restoreRelativeVerticalPositionOfCursor(p)}}e.FormattingEdit=E}),define(se[101],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HoverParticipantRegistry=e.HoverForeignElementAnchor=e.HoverRangeAnchor=void 0;class L{constructor(E,S,p,_){this.priority=E,this.range=S,this.initialMousePosX=p,this.initialMousePosY=_,this.type=1}equals(E){return E.type===1&&this.range.equalsRange(E.range)}canAdoptVisibleHover(E,S){return E.type===1&&S.lineNumber===this.range.startLineNumber}}e.HoverRangeAnchor=L;class k{constructor(E,S,p,_,v,b){this.priority=E,this.owner=S,this.range=p,this.initialMousePosX=_,this.initialMousePosY=v,this.supportsMarkerHover=b,this.type=2}equals(E){return E.type===2&&this.owner===E.owner}canAdoptVisibleHover(E,S){return E.type===2&&this.owner===E.owner}}e.HoverForeignElementAnchor=k,e.HoverParticipantRegistry=new class{constructor(){this._participants=[]}register(E){this._participants.push(E)}getAll(){return this._participants}}}),define(se[559],oe([1,0,24]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InPlaceReplaceCommand=void 0;class k{constructor(E,S,p){this._editRange=E,this._originalSelection=S,this._text=p}getEditOperations(E,S){S.addTrackedEditOperation(this._editRange,this._text)}computeCursorState(E,S){const _=S.getInverseEditOperations()[0].range;return this._originalSelection.isEmpty()?new L.Selection(_.endLineNumber,Math.min(this._originalSelection.positionColumn,_.endColumn),_.endLineNumber,Math.min(this._originalSelection.positionColumn,_.endColumn)):new L.Selection(_.endLineNumber,_.endColumn-this._text.length,_.endLineNumber,_.endColumn)}}e.InPlaceReplaceCommand=k}),define(se[306],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.generateIndent=e.getSpaceCnt=void 0;function L(y,E){let S=0;for(let p=0;p<y.length;p++)y.charAt(p)===\"\t\"?S+=E:S++;return S}e.getSpaceCnt=L;function k(y,E,S){y=y<0?0:y;let p=\"\";if(!S){const _=Math.floor(y/E);y=y%E;for(let v=0;v<_;v++)p+=\"\t\"}for(let _=0;_<y;_++)p+=\" \";return p}e.generateIndent=k}),define(se[216],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.showNextInlineSuggestionActionId=e.showPreviousInlineSuggestionActionId=e.inlineSuggestCommitId=void 0,e.inlineSuggestCommitId=\"editor.action.inlineSuggest.commit\",e.showPreviousInlineSuggestionActionId=\"editor.action.inlineSuggest.showPrevious\",e.showNextInlineSuggestionActionId=\"editor.action.inlineSuggest.showNext\"}),define(se[156],oe([1,0,12,2,35,10,5]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.lengthOfText=e.addPositions=e.applyObservableDecorations=e.ColumnRange=e.getReadonlyEmptyArray=e.applyEdits=void 0;function p(r,u){const f=new _(r),c=u.map(d=>{const s=S.Range.lift(d.range);return{startOffset:f.getOffset(s.getStartPosition()),endOffset:f.getOffset(s.getEndPosition()),text:d.text}});c.sort((d,s)=>s.startOffset-d.startOffset);for(const d of c)r=r.substring(0,d.startOffset)+d.text+r.substring(d.endOffset);return r}e.applyEdits=p;class _{constructor(u){this.lineStartOffsetByLineIdx=[],this.lineStartOffsetByLineIdx.push(0);for(let f=0;f<u.length;f++)u.charAt(f)===`\n`&&this.lineStartOffsetByLineIdx.push(f+1)}getOffset(u){return this.lineStartOffsetByLineIdx[u.lineNumber-1]+u.column-1}}const v=[];function b(){return v}e.getReadonlyEmptyArray=b;class a{constructor(u,f){if(this.startColumn=u,this.endColumnExclusive=f,u>f)throw new L.BugIndicatingError(`startColumn ${u} cannot be after endColumnExclusive ${f}`)}toRange(u){return new S.Range(u,this.startColumn,u,this.endColumnExclusive)}equals(u){return this.startColumn===u.startColumn&&this.endColumnExclusive===u.endColumnExclusive}}e.ColumnRange=a;function i(r,u){const f=new k.DisposableStore,c=r.createDecorationsCollection();return f.add((0,y.autorunOpts)({debugName:()=>`Apply decorations from ${u.debugName}`},d=>{const s=u.read(d);c.set(s)})),f.add({dispose:()=>{c.clear()}}),f}e.applyObservableDecorations=i;function n(r,u){return new E.Position(r.lineNumber+u.lineNumber-1,u.lineNumber===1?r.column+u.column-1:u.column)}e.addPositions=n;function t(r){let u=1,f=1;for(const c of r)c===`\n`?(u++,f=1):f++;return new E.Position(u,f)}e.lengthOfText=t}),define(se[217],oe([1,0,156]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ghostTextOrReplacementEquals=e.GhostTextReplacement=e.GhostTextPart=e.GhostText=void 0;class k{constructor(_,v){this.lineNumber=_,this.parts=v}equals(_){return this.lineNumber===_.lineNumber&&this.parts.length===_.parts.length&&this.parts.every((v,b)=>v.equals(_.parts[b]))}renderForScreenReader(_){if(this.parts.length===0)return\"\";const v=this.parts[this.parts.length-1],b=_.substr(0,v.column-1);return(0,L.applyEdits)(b,this.parts.map(i=>({range:{startLineNumber:1,endLineNumber:1,startColumn:i.column,endColumn:i.column},text:i.lines.join(`\n`)}))).substring(this.parts[0].column-1)}isEmpty(){return this.parts.every(_=>_.lines.length===0)}get lineCount(){return 1+this.parts.reduce((_,v)=>_+v.lines.length-1,0)}}e.GhostText=k;class y{constructor(_,v,b){this.column=_,this.lines=v,this.preview=b}equals(_){return this.column===_.column&&this.lines.length===_.lines.length&&this.lines.every((v,b)=>v===_.lines[b])}}e.GhostTextPart=y;class E{constructor(_,v,b,a=0){this.lineNumber=_,this.columnRange=v,this.newLines=b,this.additionalReservedLineCount=a,this.parts=[new y(this.columnRange.endColumnExclusive,this.newLines,!1)]}renderForScreenReader(_){return this.newLines.join(`\n`)}get lineCount(){return this.newLines.length}isEmpty(){return this.parts.every(_=>_.lines.length===0)}equals(_){return this.lineNumber===_.lineNumber&&this.columnRange.equals(_.columnRange)&&this.newLines.length===_.newLines.length&&this.newLines.every((v,b)=>v===_.newLines[b])&&this.additionalReservedLineCount===_.additionalReservedLineCount}}e.GhostTextReplacement=E;function S(p,_){return p===_?!0:!p||!_?!1:p instanceof k&&_ instanceof k||p instanceof E&&_ instanceof E?p.equals(_):!1}e.ghostTextOrReplacementEquals=S}),define(se[307],oe([1,0,173,11,5,217,156]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SingleTextEdit=void 0;class p{constructor(t,r){this.range=t,this.text=r}removeCommonPrefix(t,r){const u=r?this.range.intersectRanges(r):this.range;if(!u)return this;const f=t.getValueInRange(u,1),c=(0,k.commonPrefixLength)(f,this.text),d=(0,S.addPositions)(this.range.getStartPosition(),(0,S.lengthOfText)(f.substring(0,c))),s=this.text.substring(c),l=y.Range.fromPositions(d,this.range.getEndPosition());return new p(l,s)}augments(t){return this.text.startsWith(t.text)&&_(this.range,t.range)}computeGhostText(t,r,u,f=0){let c=this.removeCommonPrefix(t);if(c.range.endLineNumber!==c.range.startLineNumber)return;const d=t.getLineContent(c.range.startLineNumber),s=(0,k.getLeadingWhitespace)(d).length;if(c.range.startColumn-1<=s){const w=(0,k.getLeadingWhitespace)(c.text).length,D=d.substring(c.range.startColumn-1,s),[I,T]=[c.range.getStartPosition(),c.range.getEndPosition()],A=I.column+D.length<=T.column?I.delta(0,D.length):T,P=y.Range.fromPositions(A,T),N=c.text.startsWith(D)?c.text.substring(D.length):c.text.substring(w);c=new p(P,N)}const o=t.getValueInRange(c.range),g=b(o,c.text);if(!g)return;const h=c.range.startLineNumber,m=new Array;if(r===\"prefix\"){const w=g.filter(D=>D.originalLength===0);if(w.length>1||w.length===1&&w[0].originalStart!==o.length)return}const C=c.text.length-f;for(const w of g){const D=c.range.startColumn+w.originalStart+w.originalLength;if(r===\"subwordSmart\"&&u&&u.lineNumber===c.range.startLineNumber&&D<u.column||w.originalLength>0)return;if(w.modifiedLength===0)continue;const I=w.modifiedStart+w.modifiedLength,T=Math.max(w.modifiedStart,Math.min(I,C)),A=c.text.substring(w.modifiedStart,T),P=c.text.substring(T,Math.max(w.modifiedStart,I));if(A.length>0){const N=(0,k.splitLines)(A);m.push(new E.GhostTextPart(D,N,!1))}if(P.length>0){const N=(0,k.splitLines)(P);m.push(new E.GhostTextPart(D,N,!0))}}return new E.GhostText(h,m)}}e.SingleTextEdit=p;function _(n,t){return t.getStartPosition().equals(n.getStartPosition())&&t.getEndPosition().isBeforeOrEqual(n.getEndPosition())}let v;function b(n,t){if(v?.originalValue===n&&v?.newValue===t)return v?.changes;{let r=i(n,t,!0);if(r){const u=a(r);if(u>0){const f=i(n,t,!1);f&&a(f)<u&&(r=f)}}return v={originalValue:n,newValue:t,changes:r},r}}function a(n){let t=0;for(const r of n)t+=r.originalLength;return t}function i(n,t,r){if(n.length>5e3||t.length>5e3)return;function u(o){let g=0;for(let h=0,m=o.length;h<m;h++){const C=o.charCodeAt(h);C>g&&(g=C)}return g}const f=Math.max(u(n),u(t));function c(o){if(o<0)throw new Error(\"unexpected\");return f+o+1}function d(o){let g=0,h=0;const m=new Int32Array(o.length);for(let C=0,w=o.length;C<w;C++)if(r&&o[C]===\"(\"){const D=h*100+g;m[C]=c(2*D),g++}else if(r&&o[C]===\")\"){g=Math.max(g-1,0);const D=h*100+g;m[C]=c(2*D+1),g===0&&h++}else m[C]=o.charCodeAt(C);return m}const s=d(n),l=d(t);return new L.LcsDiff({getElements:()=>s},{getElements:()=>l}).ComputeDiff(!1).changes}}),define(se[560],oe([1,0,5,24]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CopyLinesCommand=void 0;class y{constructor(S,p,_){this._selection=S,this._isCopyingDown=p,this._noop=_||!1,this._selectionDirection=0,this._selectionId=null,this._startLineNumberDelta=0,this._endLineNumberDelta=0}getEditOperations(S,p){let _=this._selection;this._startLineNumberDelta=0,this._endLineNumberDelta=0,_.startLineNumber<_.endLineNumber&&_.endColumn===1&&(this._endLineNumberDelta=1,_=_.setEndPosition(_.endLineNumber-1,S.getLineMaxColumn(_.endLineNumber-1)));const v=[];for(let a=_.startLineNumber;a<=_.endLineNumber;a++)v.push(S.getLineContent(a));const b=v.join(`\n`);b===\"\"&&this._isCopyingDown&&(this._startLineNumberDelta++,this._endLineNumberDelta++),this._noop?p.addEditOperation(new L.Range(_.endLineNumber,S.getLineMaxColumn(_.endLineNumber),_.endLineNumber+1,1),_.endLineNumber===S.getLineCount()?\"\":`\n`):this._isCopyingDown?p.addEditOperation(new L.Range(_.startLineNumber,1,_.startLineNumber,1),b+`\n`):p.addEditOperation(new L.Range(_.endLineNumber,S.getLineMaxColumn(_.endLineNumber),_.endLineNumber,S.getLineMaxColumn(_.endLineNumber)),`\n`+b),this._selectionId=p.trackSelection(_),this._selectionDirection=this._selection.getDirection()}computeCursorState(S,p){let _=p.getTrackedSelection(this._selectionId);if(this._startLineNumberDelta!==0||this._endLineNumberDelta!==0){let v=_.startLineNumber,b=_.startColumn,a=_.endLineNumber,i=_.endColumn;this._startLineNumberDelta!==0&&(v=v+this._startLineNumberDelta,b=1),this._endLineNumberDelta!==0&&(a=a+this._endLineNumberDelta,i=1),_=k.Selection.createWithDirection(v,b,a,i,this._selectionDirection)}return _}}e.CopyLinesCommand=y}),define(se[561],oe([1,0,74,5]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SortLinesCommand=void 0;class y{static getCollator(){return y._COLLATOR||(y._COLLATOR=new Intl.Collator),y._COLLATOR}constructor(_,v){this.selection=_,this.descending=v,this.selectionId=null}getEditOperations(_,v){const b=S(_,this.selection,this.descending);b&&v.addEditOperation(b.range,b.text),this.selectionId=v.trackSelection(this.selection)}computeCursorState(_,v){return v.getTrackedSelection(this.selectionId)}static canRun(_,v,b){if(_===null)return!1;const a=E(_,v,b);if(!a)return!1;for(let i=0,n=a.before.length;i<n;i++)if(a.before[i]!==a.after[i])return!0;return!1}}e.SortLinesCommand=y,y._COLLATOR=null;function E(p,_,v){const b=_.startLineNumber;let a=_.endLineNumber;if(_.endColumn===1&&a--,b>=a)return null;const i=[];for(let t=b;t<=a;t++)i.push(p.getLineContent(t));let n=i.slice(0);return n.sort(y.getCollator().compare),v===!0&&(n=n.reverse()),{startLineNumber:b,endLineNumber:a,before:i,after:n}}function S(p,_,v){const b=E(p,_,v);return b?L.EditOperation.replace(new k.Range(b.startLineNumber,1,b.endLineNumber,p.getLineMaxColumn(b.endLineNumber)),b.after.join(`\n`)):null}}),define(se[308],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isSemanticColoringEnabled=e.SEMANTIC_HIGHLIGHTING_SETTING_ID=void 0,e.SEMANTIC_HIGHLIGHTING_SETTING_ID=\"editor.semanticHighlighting\";function L(k,y,E){var S;const p=(S=E.getValue(e.SEMANTIC_HIGHLIGHTING_SETTING_ID,{overrideIdentifier:k.getLanguageId(),resource:k.uri}))===null||S===void 0?void 0:S.enabled;return typeof p==\"boolean\"?p:y.getColorTheme().semanticHighlighting}e.isSemanticColoringEnabled=L}),define(se[309],oe([1,0,66,10,5]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BracketSelectionRangeProvider=void 0;class E{async provideSelectionRanges(p,_){const v=[];for(const b of _){const a=[];v.push(a);const i=new Map;await new Promise(n=>E._bracketsRightYield(n,0,p,b,i)),await new Promise(n=>E._bracketsLeftYield(n,0,p,b,i,a))}return v}static _bracketsRightYield(p,_,v,b,a){const i=new Map,n=Date.now();for(;;){if(_>=E._maxRounds){p();break}if(!b){p();break}const t=v.bracketPairs.findNextBracket(b);if(!t){p();break}if(Date.now()-n>E._maxDuration){setTimeout(()=>E._bracketsRightYield(p,_+1,v,b,a));break}if(t.bracketInfo.isOpeningBracket){const u=t.bracketInfo.bracketText,f=i.has(u)?i.get(u):0;i.set(u,f+1)}else{const u=t.bracketInfo.getOpeningBrackets()[0].bracketText;let f=i.has(u)?i.get(u):0;if(f-=1,i.set(u,Math.max(0,f)),f<0){let c=a.get(u);c||(c=new L.LinkedList,a.set(u,c)),c.push(t.range)}}b=t.range.getEndPosition()}}static _bracketsLeftYield(p,_,v,b,a,i){const n=new Map,t=Date.now();for(;;){if(_>=E._maxRounds&&a.size===0){p();break}if(!b){p();break}const r=v.bracketPairs.findPrevBracket(b);if(!r){p();break}if(Date.now()-t>E._maxDuration){setTimeout(()=>E._bracketsLeftYield(p,_+1,v,b,a,i));break}if(r.bracketInfo.isOpeningBracket){const f=r.bracketInfo.bracketText;let c=n.has(f)?n.get(f):0;if(c-=1,n.set(f,Math.max(0,c)),c<0){const d=a.get(f);if(d){const s=d.shift();d.size===0&&a.delete(f);const l=y.Range.fromPositions(r.range.getEndPosition(),s.getStartPosition()),o=y.Range.fromPositions(r.range.getStartPosition(),s.getEndPosition());i.push({range:l}),i.push({range:o}),E._addBracketLeading(v,o,i)}}}else{const f=r.bracketInfo.getOpeningBrackets()[0].bracketText,c=n.has(f)?n.get(f):0;n.set(f,c+1)}b=r.range.getStartPosition()}}static _addBracketLeading(p,_,v){if(_.startLineNumber===_.endLineNumber)return;const b=_.startLineNumber,a=p.getLineFirstNonWhitespaceColumn(b);a!==0&&a!==_.startColumn&&(v.push({range:y.Range.fromPositions(new k.Position(b,a),_.getEndPosition())}),v.push({range:y.Range.fromPositions(new k.Position(b,1),_.getEndPosition())}));const i=b-1;if(i>0){const n=p.getLineFirstNonWhitespaceColumn(i);n===_.startColumn&&n!==p.getLineLastNonWhitespaceColumn(i)&&(v.push({range:y.Range.fromPositions(new k.Position(i,n),_.getEndPosition())}),v.push({range:y.Range.fromPositions(new k.Position(i,1),_.getEndPosition())}))}}}e.BracketSelectionRangeProvider=E,E._maxDuration=30,E._maxRounds=2}),define(se[562],oe([1,0,11,5]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.WordSelectionRangeProvider=void 0;class y{constructor(S=!0){this.selectSubwords=S}provideSelectionRanges(S,p){const _=[];for(const v of p){const b=[];_.push(b),this.selectSubwords&&this._addInWordRanges(b,S,v),this._addWordRanges(b,S,v),this._addWhitespaceLine(b,S,v),b.push({range:S.getFullModelRange()})}return _}_addInWordRanges(S,p,_){const v=p.getWordAtPosition(_);if(!v)return;const{word:b,startColumn:a}=v,i=_.column-a;let n=i,t=i,r=0;for(;n>=0;n--){const u=b.charCodeAt(n);if(n!==i&&(u===95||u===45))break;if((0,L.isLowerAsciiLetter)(u)&&(0,L.isUpperAsciiLetter)(r))break;r=u}for(n+=1;t<b.length;t++){const u=b.charCodeAt(t);if((0,L.isUpperAsciiLetter)(u)&&(0,L.isLowerAsciiLetter)(r))break;if(u===95||u===45)break;r=u}n<t&&S.push({range:new k.Range(_.lineNumber,a+n,_.lineNumber,a+t)})}_addWordRanges(S,p,_){const v=p.getWordAtPosition(_);v&&S.push({range:new k.Range(_.lineNumber,v.startColumn,_.lineNumber,v.endColumn)})}_addWhitespaceLine(S,p,_){p.getLineLength(_.lineNumber)>0&&p.getLineFirstNonWhitespaceColumn(_.lineNumber)===0&&p.getLineLastNonWhitespaceColumn(_.lineNumber)===0&&S.push({range:new k.Range(_.lineNumber,1,_.lineNumber,p.getLineMaxColumn(_.lineNumber))})}}e.WordSelectionRangeProvider=y}),define(se[117],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SnippetParser=e.TextmateSnippet=e.Variable=e.FormatString=e.Transform=e.Choice=e.Placeholder=e.TransformableMarker=e.Text=e.Marker=e.Scanner=void 0;class L{constructor(){this.value=\"\",this.pos=0}static isDigitCharacter(r){return r>=48&&r<=57}static isVariableCharacter(r){return r===95||r>=97&&r<=122||r>=65&&r<=90}text(r){this.value=r,this.pos=0}tokenText(r){return this.value.substr(r.pos,r.len)}next(){if(this.pos>=this.value.length)return{type:14,pos:this.pos,len:0};const r=this.pos;let u=0,f=this.value.charCodeAt(r),c;if(c=L._table[f],typeof c==\"number\")return this.pos+=1,{type:c,pos:r,len:1};if(L.isDigitCharacter(f)){c=8;do u+=1,f=this.value.charCodeAt(r+u);while(L.isDigitCharacter(f));return this.pos+=u,{type:c,pos:r,len:u}}if(L.isVariableCharacter(f)){c=9;do f=this.value.charCodeAt(r+ ++u);while(L.isVariableCharacter(f)||L.isDigitCharacter(f));return this.pos+=u,{type:c,pos:r,len:u}}c=10;do u+=1,f=this.value.charCodeAt(r+u);while(!isNaN(f)&&typeof L._table[f]>\"u\"&&!L.isDigitCharacter(f)&&!L.isVariableCharacter(f));return this.pos+=u,{type:c,pos:r,len:u}}}e.Scanner=L,L._table={[36]:0,[58]:1,[44]:2,[123]:3,[125]:4,[92]:5,[47]:6,[124]:7,[43]:11,[45]:12,[63]:13};class k{constructor(){this._children=[]}appendChild(r){return r instanceof y&&this._children[this._children.length-1]instanceof y?this._children[this._children.length-1].value+=r.value:(r.parent=this,this._children.push(r)),this}replace(r,u){const{parent:f}=r,c=f.children.indexOf(r),d=f.children.slice(0);d.splice(c,1,...u),f._children=d,function s(l,o){for(const g of l)g.parent=o,s(g.children,g)}(u,f)}get children(){return this._children}get rightMostDescendant(){return this._children.length>0?this._children[this._children.length-1].rightMostDescendant:this}get snippet(){let r=this;for(;;){if(!r)return;if(r instanceof i)return r;r=r.parent}}toString(){return this.children.reduce((r,u)=>r+u.toString(),\"\")}len(){return 0}}e.Marker=k;class y extends k{constructor(r){super(),this.value=r}toString(){return this.value}len(){return this.value.length}clone(){return new y(this.value)}}e.Text=y;class E extends k{}e.TransformableMarker=E;class S extends E{static compareByIndex(r,u){return r.index===u.index?0:r.isFinalTabstop?1:u.isFinalTabstop||r.index<u.index?-1:r.index>u.index?1:0}constructor(r){super(),this.index=r}get isFinalTabstop(){return this.index===0}get choice(){return this._children.length===1&&this._children[0]instanceof p?this._children[0]:void 0}clone(){const r=new S(this.index);return this.transform&&(r.transform=this.transform.clone()),r._children=this.children.map(u=>u.clone()),r}}e.Placeholder=S;class p extends k{constructor(){super(...arguments),this.options=[]}appendChild(r){return r instanceof y&&(r.parent=this,this.options.push(r)),this}toString(){return this.options[0].value}len(){return this.options[0].len()}clone(){const r=new p;return this.options.forEach(r.appendChild,r),r}}e.Choice=p;class _ extends k{constructor(){super(...arguments),this.regexp=new RegExp(\"\")}resolve(r){const u=this;let f=!1,c=r.replace(this.regexp,function(){return f=!0,u._replace(Array.prototype.slice.call(arguments,0,-2))});return!f&&this._children.some(d=>d instanceof v&&!!d.elseValue)&&(c=this._replace([])),c}_replace(r){let u=\"\";for(const f of this._children)if(f instanceof v){let c=r[f.index]||\"\";c=f.resolve(c),u+=c}else u+=f.toString();return u}toString(){return\"\"}clone(){const r=new _;return r.regexp=new RegExp(this.regexp.source,(this.regexp.ignoreCase?\"i\":\"\")+(this.regexp.global?\"g\":\"\")),r._children=this.children.map(u=>u.clone()),r}}e.Transform=_;class v extends k{constructor(r,u,f,c){super(),this.index=r,this.shorthandName=u,this.ifValue=f,this.elseValue=c}resolve(r){return this.shorthandName===\"upcase\"?r?r.toLocaleUpperCase():\"\":this.shorthandName===\"downcase\"?r?r.toLocaleLowerCase():\"\":this.shorthandName===\"capitalize\"?r?r[0].toLocaleUpperCase()+r.substr(1):\"\":this.shorthandName===\"pascalcase\"?r?this._toPascalCase(r):\"\":this.shorthandName===\"camelcase\"?r?this._toCamelCase(r):\"\":r&&typeof this.ifValue==\"string\"?this.ifValue:!r&&typeof this.elseValue==\"string\"?this.elseValue:r||\"\"}_toPascalCase(r){const u=r.match(/[a-z0-9]+/gi);return u?u.map(f=>f.charAt(0).toUpperCase()+f.substr(1)).join(\"\"):r}_toCamelCase(r){const u=r.match(/[a-z0-9]+/gi);return u?u.map((f,c)=>c===0?f.charAt(0).toLowerCase()+f.substr(1):f.charAt(0).toUpperCase()+f.substr(1)).join(\"\"):r}clone(){return new v(this.index,this.shorthandName,this.ifValue,this.elseValue)}}e.FormatString=v;class b extends E{constructor(r){super(),this.name=r}resolve(r){let u=r.resolve(this);return this.transform&&(u=this.transform.resolve(u||\"\")),u!==void 0?(this._children=[new y(u)],!0):!1}clone(){const r=new b(this.name);return this.transform&&(r.transform=this.transform.clone()),r._children=this.children.map(u=>u.clone()),r}}e.Variable=b;function a(t,r){const u=[...t];for(;u.length>0;){const f=u.shift();if(!r(f))break;u.unshift(...f.children)}}class i extends k{get placeholderInfo(){if(!this._placeholders){const r=[];let u;this.walk(function(f){return f instanceof S&&(r.push(f),u=!u||u.index<f.index?f:u),!0}),this._placeholders={all:r,last:u}}return this._placeholders}get placeholders(){const{all:r}=this.placeholderInfo;return r}offset(r){let u=0,f=!1;return this.walk(c=>c===r?(f=!0,!1):(u+=c.len(),!0)),f?u:-1}fullLen(r){let u=0;return a([r],f=>(u+=f.len(),!0)),u}enclosingPlaceholders(r){const u=[];let{parent:f}=r;for(;f;)f instanceof S&&u.push(f),f=f.parent;return u}resolveVariables(r){return this.walk(u=>(u instanceof b&&u.resolve(r)&&(this._placeholders=void 0),!0)),this}appendChild(r){return this._placeholders=void 0,super.appendChild(r)}replace(r,u){return this._placeholders=void 0,super.replace(r,u)}clone(){const r=new i;return this._children=this.children.map(u=>u.clone()),r}walk(r){a(this.children,r)}}e.TextmateSnippet=i;class n{constructor(){this._scanner=new L,this._token={type:14,pos:0,len:0}}static escape(r){return r.replace(/\\$|}|\\\\/g,\"\\\\$&\")}static guessNeedsClipboard(r){return/\\${?CLIPBOARD/.test(r)}parse(r,u,f){const c=new i;return this.parseFragment(r,c),this.ensureFinalTabstop(c,f??!1,u??!1),c}parseFragment(r,u){const f=u.children.length;for(this._scanner.text(r),this._token=this._scanner.next();this._parse(u););const c=new Map,d=[];u.walk(o=>(o instanceof S&&(o.isFinalTabstop?c.set(0,void 0):!c.has(o.index)&&o.children.length>0?c.set(o.index,o.children):d.push(o)),!0));const s=(o,g)=>{const h=c.get(o.index);if(!h)return;const m=new S(o.index);m.transform=o.transform;for(const C of h){const w=C.clone();m.appendChild(w),w instanceof S&&c.has(w.index)&&!g.has(w.index)&&(g.add(w.index),s(w,g),g.delete(w.index))}u.replace(o,[m])},l=new Set;for(const o of d)s(o,l);return u.children.slice(f)}ensureFinalTabstop(r,u,f){(u||f&&r.placeholders.length>0)&&(r.placeholders.find(d=>d.index===0)||r.appendChild(new S(0)))}_accept(r,u){if(r===void 0||this._token.type===r){const f=u?this._scanner.tokenText(this._token):!0;return this._token=this._scanner.next(),f}return!1}_backTo(r){return this._scanner.pos=r.pos+r.len,this._token=r,!1}_until(r){const u=this._token;for(;this._token.type!==r;){if(this._token.type===14)return!1;if(this._token.type===5){const c=this._scanner.next();if(c.type!==0&&c.type!==4&&c.type!==5)return!1}this._token=this._scanner.next()}const f=this._scanner.value.substring(u.pos,this._token.pos).replace(/\\\\(\\$|}|\\\\)/g,\"$1\");return this._token=this._scanner.next(),f}_parse(r){return this._parseEscaped(r)||this._parseTabstopOrVariableName(r)||this._parseComplexPlaceholder(r)||this._parseComplexVariable(r)||this._parseAnything(r)}_parseEscaped(r){let u;return(u=this._accept(5,!0))?(u=this._accept(0,!0)||this._accept(4,!0)||this._accept(5,!0)||u,r.appendChild(new y(u)),!0):!1}_parseTabstopOrVariableName(r){let u;const f=this._token;return this._accept(0)&&(u=this._accept(9,!0)||this._accept(8,!0))?(r.appendChild(/^\\d+$/.test(u)?new S(Number(u)):new b(u)),!0):this._backTo(f)}_parseComplexPlaceholder(r){let u;const f=this._token;if(!(this._accept(0)&&this._accept(3)&&(u=this._accept(8,!0))))return this._backTo(f);const d=new S(Number(u));if(this._accept(1))for(;;){if(this._accept(4))return r.appendChild(d),!0;if(!this._parse(d))return r.appendChild(new y(\"${\"+u+\":\")),d.children.forEach(r.appendChild,r),!0}else if(d.index>0&&this._accept(7)){const s=new p;for(;;){if(this._parseChoiceElement(s)){if(this._accept(2))continue;if(this._accept(7)&&(d.appendChild(s),this._accept(4)))return r.appendChild(d),!0}return this._backTo(f),!1}}else return this._accept(6)?this._parseTransform(d)?(r.appendChild(d),!0):(this._backTo(f),!1):this._accept(4)?(r.appendChild(d),!0):this._backTo(f)}_parseChoiceElement(r){const u=this._token,f=[];for(;!(this._token.type===2||this._token.type===7);){let c;if((c=this._accept(5,!0))?c=this._accept(2,!0)||this._accept(7,!0)||this._accept(5,!0)||c:c=this._accept(void 0,!0),!c)return this._backTo(u),!1;f.push(c)}return f.length===0?(this._backTo(u),!1):(r.appendChild(new y(f.join(\"\"))),!0)}_parseComplexVariable(r){let u;const f=this._token;if(!(this._accept(0)&&this._accept(3)&&(u=this._accept(9,!0))))return this._backTo(f);const d=new b(u);if(this._accept(1))for(;;){if(this._accept(4))return r.appendChild(d),!0;if(!this._parse(d))return r.appendChild(new y(\"${\"+u+\":\")),d.children.forEach(r.appendChild,r),!0}else return this._accept(6)?this._parseTransform(d)?(r.appendChild(d),!0):(this._backTo(f),!1):this._accept(4)?(r.appendChild(d),!0):this._backTo(f)}_parseTransform(r){const u=new _;let f=\"\",c=\"\";for(;!this._accept(6);){let d;if(d=this._accept(5,!0)){d=this._accept(6,!0)||d,f+=d;continue}if(this._token.type!==14){f+=this._accept(void 0,!0);continue}return!1}for(;!this._accept(6);){let d;if(d=this._accept(5,!0)){d=this._accept(5,!0)||this._accept(6,!0)||d,u.appendChild(new y(d));continue}if(!(this._parseFormatString(u)||this._parseAnything(u)))return!1}for(;!this._accept(4);){if(this._token.type!==14){c+=this._accept(void 0,!0);continue}return!1}try{u.regexp=new RegExp(f,c)}catch{return!1}return r.transform=u,!0}_parseFormatString(r){const u=this._token;if(!this._accept(0))return!1;let f=!1;this._accept(3)&&(f=!0);const c=this._accept(8,!0);if(c)if(f){if(this._accept(4))return r.appendChild(new v(Number(c))),!0;if(!this._accept(1))return this._backTo(u),!1}else return r.appendChild(new v(Number(c))),!0;else return this._backTo(u),!1;if(this._accept(6)){const d=this._accept(9,!0);return!d||!this._accept(4)?(this._backTo(u),!1):(r.appendChild(new v(Number(c),d)),!0)}else if(this._accept(11)){const d=this._until(4);if(d)return r.appendChild(new v(Number(c),void 0,d,void 0)),!0}else if(this._accept(12)){const d=this._until(4);if(d)return r.appendChild(new v(Number(c),void 0,void 0,d)),!0}else if(this._accept(13)){const d=this._until(1);if(d){const s=this._until(4);if(s)return r.appendChild(new v(Number(c),void 0,d,s)),!0}}else{const d=this._until(4);if(d)return r.appendChild(new v(Number(c),void 0,void 0,d)),!0}return this._backTo(u),!1}_parseAnything(r){return this._token.type!==14?(r.appendChild(new y(this._scanner.tokenText(this._token))),this._accept(void 0),!0):!1}}e.SnippetParser=n}),define(se[310],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StickyModel=e.StickyElement=e.StickyRange=void 0;class L{constructor(S,p){this.startLineNumber=S,this.endLineNumber=p}}e.StickyRange=L;class k{constructor(S,p,_){this.range=S,this.children=p,this.parent=_}}e.StickyElement=k;class y{constructor(S,p,_,v){this.uri=S,this.version=p,this.element=_,this.outlineProviderId=v}}e.StickyModel=y}),define(se[311],oe([1,0,13,71,11]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CompletionModel=e.LineContext=void 0;class E{constructor(_,v){this.leadingLineContent=_,this.characterCountDelta=v}}e.LineContext=E;class S{constructor(_,v,b,a,i,n,t=k.FuzzyScoreOptions.default,r=void 0){this.clipboardText=r,this._snippetCompareFn=S._compareCompletionItems,this._items=_,this._column=v,this._wordDistance=a,this._options=i,this._refilterKind=1,this._lineContext=b,this._fuzzyScoreOptions=t,n===\"top\"?this._snippetCompareFn=S._compareCompletionItemsSnippetsUp:n===\"bottom\"&&(this._snippetCompareFn=S._compareCompletionItemsSnippetsDown)}get lineContext(){return this._lineContext}set lineContext(_){(this._lineContext.leadingLineContent!==_.leadingLineContent||this._lineContext.characterCountDelta!==_.characterCountDelta)&&(this._refilterKind=this._lineContext.characterCountDelta<_.characterCountDelta&&this._filteredItems?2:1,this._lineContext=_)}get items(){return this._ensureCachedState(),this._filteredItems}getItemsByProvider(){return this._ensureCachedState(),this._itemsByProvider}getIncompleteProvider(){this._ensureCachedState();const _=new Set;for(const[v,b]of this.getItemsByProvider())b.length>0&&b[0].container.incomplete&&_.add(v);return _}get stats(){return this._ensureCachedState(),this._stats}_ensureCachedState(){this._refilterKind!==0&&this._createCachedState()}_createCachedState(){this._itemsByProvider=new Map;const _=[],{leadingLineContent:v,characterCountDelta:b}=this._lineContext;let a=\"\",i=\"\";const n=this._refilterKind===1?this._items:this._filteredItems,t=[],r=!this._options.filterGraceful||n.length>2e3?k.fuzzyScore:k.fuzzyScoreGracefulAggressive;for(let u=0;u<n.length;u++){const f=n[u];if(f.isInvalid)continue;const c=this._itemsByProvider.get(f.provider);c?c.push(f):this._itemsByProvider.set(f.provider,[f]);const d=f.position.column-f.editStart.column,s=d+b-(f.position.column-this._column);if(a.length!==s&&(a=s===0?\"\":v.slice(-s),i=a.toLowerCase()),f.word=a,s===0)f.score=k.FuzzyScore.Default;else{let l=0;for(;l<d;){const o=a.charCodeAt(l);if(o===32||o===9)l+=1;else break}if(l>=s)f.score=k.FuzzyScore.Default;else if(typeof f.completion.filterText==\"string\"){const o=r(a,i,l,f.completion.filterText,f.filterTextLow,0,this._fuzzyScoreOptions);if(!o)continue;(0,y.compareIgnoreCase)(f.completion.filterText,f.textLabel)===0?f.score=o:(f.score=(0,k.anyScore)(a,i,l,f.textLabel,f.labelLow,0),f.score[0]=o[0])}else{const o=r(a,i,l,f.textLabel,f.labelLow,0,this._fuzzyScoreOptions);if(!o)continue;f.score=o}}f.idx=u,f.distance=this._wordDistance.distance(f.position,f.completion),t.push(f),_.push(f.textLabel.length)}this._filteredItems=t.sort(this._snippetCompareFn),this._refilterKind=0,this._stats={pLabelLen:_.length?(0,L.quickSelect)(_.length-.85,_,(u,f)=>u-f):0}}static _compareCompletionItems(_,v){return _.score[0]>v.score[0]?-1:_.score[0]<v.score[0]?1:_.distance<v.distance?-1:_.distance>v.distance?1:_.idx<v.idx?-1:_.idx>v.idx?1:0}static _compareCompletionItemsSnippetsDown(_,v){if(_.completion.kind!==v.completion.kind){if(_.completion.kind===27)return 1;if(v.completion.kind===27)return-1}return S._compareCompletionItems(_,v)}static _compareCompletionItemsSnippetsUp(_,v){if(_.completion.kind!==v.completion.kind){if(_.completion.kind===27)return-1;if(v.completion.kind===27)return 1}return S._compareCompletionItems(_,v)}}e.CompletionModel=S}),define(se[563],oe([1,0,13,2,128]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommitCharacterController=void 0;class E{constructor(p,_,v,b){this._disposables=new k.DisposableStore,this._disposables.add(v.onDidSuggest(a=>{a.completionModel.items.length===0&&this.reset()})),this._disposables.add(v.onDidCancel(a=>{this.reset()})),this._disposables.add(_.onDidShow(()=>this._onItem(_.getFocusedItem()))),this._disposables.add(_.onDidFocus(this._onItem,this)),this._disposables.add(_.onDidHide(this.reset,this)),this._disposables.add(p.onWillType(a=>{if(this._active&&!_.isFrozen()&&v.state!==0){const i=a.charCodeAt(a.length-1);this._active.acceptCharacters.has(i)&&p.getOption(0)&&b(this._active.item)}}))}_onItem(p){if(!p||!(0,L.isNonEmptyArray)(p.item.completion.commitCharacters)){this.reset();return}if(this._active&&this._active.item.item===p.item)return;const _=new y.CharacterSet;for(const v of p.item.completion.commitCharacters)v.length>0&&_.add(v.charCodeAt(0));this._active={acceptCharacters:_,item:p}}reset(){this._active=void 0}dispose(){this._disposables.dispose()}}e.CommitCharacterController=E}),define(se[564],oe([1,0,2]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OvertypingCapturer=void 0;class k{constructor(E,S){this._disposables=new L.DisposableStore,this._lastOvertyped=[],this._locked=!1,this._disposables.add(E.onWillType(()=>{if(this._locked||!E.hasModel())return;const p=E.getSelections(),_=p.length;let v=!1;for(let a=0;a<_;a++)if(!p[a].isEmpty()){v=!0;break}if(!v){this._lastOvertyped.length!==0&&(this._lastOvertyped.length=0);return}this._lastOvertyped=[];const b=E.getModel();for(let a=0;a<_;a++){const i=p[a];if(b.getValueLengthInRange(i)>k._maxSelectionLength)return;this._lastOvertyped[a]={value:b.getValueInRange(i),multiline:i.startLineNumber!==i.endLineNumber}}})),this._disposables.add(S.onDidTrigger(p=>{this._locked=!0})),this._disposables.add(S.onDidCancel(p=>{this._locked=!1}))}getLastOvertypedInfo(E){if(E>=0&&E<this._lastOvertyped.length)return this._lastOvertyped[E]}dispose(){this._disposables.dispose()}}e.OvertypingCapturer=k,k._maxSelectionLength=51200}),define(se[312],oe([1,0,13,5,309]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.WordDistance=void 0;class E{static async create(p,_){if(!_.getOption(117).localityBonus||!_.hasModel())return E.None;const v=_.getModel(),b=_.getPosition();if(!p.canComputeWordRanges(v.uri))return E.None;const[a]=await new y.BracketSelectionRangeProvider().provideSelectionRanges(v,[b]);if(a.length===0)return E.None;const i=await p.computeWordRanges(v.uri,a[0].range);if(!i)return E.None;const n=v.getWordUntilPosition(b);return delete i[n.word],new class extends E{distance(t,r){if(!b.equals(_.getPosition()))return 0;if(r.kind===17)return 2<<20;const u=typeof r.label==\"string\"?r.label:r.label.label,f=i[u];if((0,L.isFalsyOrEmpty)(f))return 2<<20;const c=(0,L.binarySearch)(f,k.Range.fromPositions(t),k.Range.compareRangesUsingStarts),d=c>=0?f[c]:f[Math.max(0,~c-1)];let s=a.length;for(const l of a){if(!k.Range.containsRange(l.range,d))break;s-=1}return s}}}}e.WordDistance=E,E.None=new class extends E{distance(){return 0}}}),define(se[313],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.stateExists=e.findRules=e.substituteMatches=e.createError=e.log=e.sanitize=e.fixCase=e.empty=e.isIAction=e.isString=e.isFuzzyAction=e.isFuzzyActionArr=void 0;function L(t){return Array.isArray(t)}e.isFuzzyActionArr=L;function k(t){return!L(t)}e.isFuzzyAction=k;function y(t){return typeof t==\"string\"}e.isString=y;function E(t){return!y(t)}e.isIAction=E;function S(t){return!t}e.empty=S;function p(t,r){return t.ignoreCase&&r?r.toLowerCase():r}e.fixCase=p;function _(t){return t.replace(/[&<>'\"_]/g,\"-\")}e.sanitize=_;function v(t,r){console.log(`${t.languageId}: ${r}`)}e.log=v;function b(t,r){return new Error(`${t.languageId}: ${r}`)}e.createError=b;function a(t,r,u,f,c){const d=/\\$((\\$)|(#)|(\\d\\d?)|[sS](\\d\\d?)|@(\\w+))/g;let s=null;return r.replace(d,function(l,o,g,h,m,C,w,D,I){return S(g)?S(h)?!S(m)&&m<f.length?p(t,f[m]):!S(w)&&t&&typeof t[w]==\"string\"?t[w]:(s===null&&(s=c.split(\".\"),s.unshift(c)),!S(C)&&C<s.length?p(t,s[C]):\"\"):p(t,u):\"$\"})}e.substituteMatches=a;function i(t,r){let u=r;for(;u&&u.length>0;){const f=t.tokenizer[u];if(f)return f;const c=u.lastIndexOf(\".\");c<0?u=null:u=u.substr(0,c)}return null}e.findRules=i;function n(t,r){let u=r;for(;u&&u.length>0;){if(t.stateNames[u])return!0;const c=u.lastIndexOf(\".\");c<0?u=null:u=u.substr(0,c)}return!1}e.stateExists=n}),define(se[565],oe([1,0,313]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.compile=void 0;function k(t,r){if(!r||!Array.isArray(r))return!1;for(const u of r)if(!t(u))return!1;return!0}function y(t,r){return typeof t==\"boolean\"?t:r}function E(t,r){return typeof t==\"string\"?t:r}function S(t){const r={};for(const u of t)r[u]=!0;return r}function p(t,r=!1){r&&(t=t.map(function(f){return f.toLowerCase()}));const u=S(t);return r?function(f){return u[f.toLowerCase()]!==void 0&&u.hasOwnProperty(f.toLowerCase())}:function(f){return u[f]!==void 0&&u.hasOwnProperty(f)}}function _(t,r){r=r.replace(/@@/g,\"\u0001\");let u=0,f;do f=!1,r=r.replace(/@(\\w+)/g,function(d,s){f=!0;let l=\"\";if(typeof t[s]==\"string\")l=t[s];else if(t[s]&&t[s]instanceof RegExp)l=t[s].source;else throw t[s]===void 0?L.createError(t,\"language definition does not contain attribute '\"+s+\"', used at: \"+r):L.createError(t,\"attribute reference '\"+s+\"' must be a string, used at: \"+r);return L.empty(l)?\"\":\"(?:\"+l+\")\"}),u++;while(f&&u<5);r=r.replace(/\\x01/g,\"@\");const c=(t.ignoreCase?\"i\":\"\")+(t.unicode?\"u\":\"\");return new RegExp(r,c)}function v(t,r,u,f){if(f<0)return t;if(f<r.length)return r[f];if(f>=100){f=f-100;const c=u.split(\".\");if(c.unshift(u),f<c.length)return c[f]}return null}function b(t,r,u,f){let c=-1,d=u,s=u.match(/^\\$(([sS]?)(\\d\\d?)|#)(.*)$/);s&&(s[3]&&(c=parseInt(s[3]),s[2]&&(c=c+100)),d=s[4]);let l=\"~\",o=d;!d||d.length===0?(l=\"!=\",o=\"\"):/^\\w*$/.test(o)?l=\"==\":(s=d.match(/^(@|!@|~|!~|==|!=)(.*)$/),s&&(l=s[1],o=s[2]));let g;if((l===\"~\"||l===\"!~\")&&/^(\\w|\\|)*$/.test(o)){const h=p(o.split(\"|\"),t.ignoreCase);g=function(m){return l===\"~\"?h(m):!h(m)}}else if(l===\"@\"||l===\"!@\"){const h=t[o];if(!h)throw L.createError(t,\"the @ match target '\"+o+\"' is not defined, in rule: \"+r);if(!k(function(C){return typeof C==\"string\"},h))throw L.createError(t,\"the @ match target '\"+o+\"' must be an array of strings, in rule: \"+r);const m=p(h,t.ignoreCase);g=function(C){return l===\"@\"?m(C):!m(C)}}else if(l===\"~\"||l===\"!~\")if(o.indexOf(\"$\")<0){const h=_(t,\"^\"+o+\"$\");g=function(m){return l===\"~\"?h.test(m):!h.test(m)}}else g=function(h,m,C,w){return _(t,\"^\"+L.substituteMatches(t,o,m,C,w)+\"$\").test(h)};else if(o.indexOf(\"$\")<0){const h=L.fixCase(t,o);g=function(m){return l===\"==\"?m===h:m!==h}}else{const h=L.fixCase(t,o);g=function(m,C,w,D,I){const T=L.substituteMatches(t,h,C,w,D);return l===\"==\"?m===T:m!==T}}return c===-1?{name:u,value:f,test:function(h,m,C,w){return g(h,h,m,C,w)}}:{name:u,value:f,test:function(h,m,C,w){const D=v(h,m,C,c);return g(D||\"\",h,m,C,w)}}}function a(t,r,u){if(u){if(typeof u==\"string\")return u;if(u.token||u.token===\"\"){if(typeof u.token!=\"string\")throw L.createError(t,\"a 'token' attribute must be of type string, in rule: \"+r);{const f={token:u.token};if(u.token.indexOf(\"$\")>=0&&(f.tokenSubst=!0),typeof u.bracket==\"string\")if(u.bracket===\"@open\")f.bracket=1;else if(u.bracket===\"@close\")f.bracket=-1;else throw L.createError(t,\"a 'bracket' attribute must be either '@open' or '@close', in rule: \"+r);if(u.next){if(typeof u.next!=\"string\")throw L.createError(t,\"the next state must be a string value in rule: \"+r);{let c=u.next;if(!/^(@pop|@push|@popall)$/.test(c)&&(c[0]===\"@\"&&(c=c.substr(1)),c.indexOf(\"$\")<0&&!L.stateExists(t,L.substituteMatches(t,c,\"\",[],\"\"))))throw L.createError(t,\"the next state '\"+u.next+\"' is not defined in rule: \"+r);f.next=c}}return typeof u.goBack==\"number\"&&(f.goBack=u.goBack),typeof u.switchTo==\"string\"&&(f.switchTo=u.switchTo),typeof u.log==\"string\"&&(f.log=u.log),typeof u.nextEmbedded==\"string\"&&(f.nextEmbedded=u.nextEmbedded,t.usesEmbedded=!0),f}}else if(Array.isArray(u)){const f=[];for(let c=0,d=u.length;c<d;c++)f[c]=a(t,r,u[c]);return{group:f}}else if(u.cases){const f=[];for(const d in u.cases)if(u.cases.hasOwnProperty(d)){const s=a(t,r,u.cases[d]);d===\"@default\"||d===\"@\"||d===\"\"?f.push({test:void 0,value:s,name:d}):d===\"@eos\"?f.push({test:function(l,o,g,h){return h},value:s,name:d}):f.push(b(t,r,d,s))}const c=t.defaultToken;return{test:function(d,s,l,o){for(const g of f)if(!g.test||g.test(d,s,l,o))return g.value;return c}}}else throw L.createError(t,\"an action must be a string, an object with a 'token' or 'cases' attribute, or an array of actions; in rule: \"+r)}else return{token:\"\"}}class i{constructor(r){this.regex=new RegExp(\"\"),this.action={token:\"\"},this.matchOnlyAtLineStart=!1,this.name=\"\",this.name=r}setRegex(r,u){let f;if(typeof u==\"string\")f=u;else if(u instanceof RegExp)f=u.source;else throw L.createError(r,\"rules must start with a match string or regular expression: \"+this.name);this.matchOnlyAtLineStart=f.length>0&&f[0]===\"^\",this.name=this.name+\": \"+f,this.regex=_(r,\"^(?:\"+(this.matchOnlyAtLineStart?f.substr(1):f)+\")\")}setAction(r,u){this.action=a(r,this.name,u)}}function n(t,r){if(!r||typeof r!=\"object\")throw new Error(\"Monarch: expecting a language definition object\");const u={};u.languageId=t,u.includeLF=y(r.includeLF,!1),u.noThrow=!1,u.maxStack=100,u.start=typeof r.start==\"string\"?r.start:null,u.ignoreCase=y(r.ignoreCase,!1),u.unicode=y(r.unicode,!1),u.tokenPostfix=E(r.tokenPostfix,\".\"+u.languageId),u.defaultToken=E(r.defaultToken,\"source\"),u.usesEmbedded=!1;const f=r;f.languageId=t,f.includeLF=u.includeLF,f.ignoreCase=u.ignoreCase,f.unicode=u.unicode,f.noThrow=u.noThrow,f.usesEmbedded=u.usesEmbedded,f.stateNames=r.tokenizer,f.defaultToken=u.defaultToken;function c(s,l,o){for(const g of o){let h=g.include;if(h){if(typeof h!=\"string\")throw L.createError(u,\"an 'include' attribute must be a string at: \"+s);if(h[0]===\"@\"&&(h=h.substr(1)),!r.tokenizer[h])throw L.createError(u,\"include target '\"+h+\"' is not defined at: \"+s);c(s+\".\"+h,l,r.tokenizer[h])}else{const m=new i(s);if(Array.isArray(g)&&g.length>=1&&g.length<=3)if(m.setRegex(f,g[0]),g.length>=3)if(typeof g[1]==\"string\")m.setAction(f,{token:g[1],next:g[2]});else if(typeof g[1]==\"object\"){const C=g[1];C.next=g[2],m.setAction(f,C)}else throw L.createError(u,\"a next state as the last element of a rule can only be given if the action is either an object or a string, at: \"+s);else m.setAction(f,g[1]);else{if(!g.regex)throw L.createError(u,\"a rule must either be an array, or an object with a 'regex' or 'include' field at: \"+s);g.name&&typeof g.name==\"string\"&&(m.name=g.name),g.matchOnlyAtStart&&(m.matchOnlyAtLineStart=y(g.matchOnlyAtLineStart,!1)),m.setRegex(f,g.regex),m.setAction(f,g.action)}l.push(m)}}}if(!r.tokenizer||typeof r.tokenizer!=\"object\")throw L.createError(u,\"a language definition must define the 'tokenizer' attribute as an object\");u.tokenizer=[];for(const s in r.tokenizer)if(r.tokenizer.hasOwnProperty(s)){u.start||(u.start=s);const l=r.tokenizer[s];u.tokenizer[s]=new Array,c(\"tokenizer.\"+s,u.tokenizer[s],l)}if(u.usesEmbedded=f.usesEmbedded,r.brackets){if(!Array.isArray(r.brackets))throw L.createError(u,\"the 'brackets' attribute must be defined as an array\")}else r.brackets=[{open:\"{\",close:\"}\",token:\"delimiter.curly\"},{open:\"[\",close:\"]\",token:\"delimiter.square\"},{open:\"(\",close:\")\",token:\"delimiter.parenthesis\"},{open:\"<\",close:\">\",token:\"delimiter.angle\"}];const d=[];for(const s of r.brackets){let l=s;if(l&&Array.isArray(l)&&l.length===3&&(l={token:l[2],open:l[0],close:l[1]}),l.open===l.close)throw L.createError(u,\"open and close brackets in a 'brackets' attribute must be different: \"+l.open+`\n hint: use the 'bracket' attribute if matching on equal brackets is required.`);if(typeof l.open==\"string\"&&typeof l.token==\"string\"&&typeof l.close==\"string\")d.push({token:l.token+u.tokenPostfix,open:L.fixCase(u,l.open),close:L.fixCase(u,l.close)});else throw L.createError(u,\"every element in the 'brackets' array must be a '{open,close,token}' object or array\")}return u.brackets=d,u.noThrow=!0,u}e.compile=n}),define(se[566],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/actionbar/actionViewItems\",e)}),define(se[567],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/findinput/findInput\",e)}),define(se[568],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/findinput/findInputToggles\",e)}),define(se[569],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/findinput/replaceInput\",e)}),define(se[570],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/hover/hoverWidget\",e)}),define(se[571],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/iconLabel/iconLabelHover\",e)}),define(se[572],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/inputbox/inputBox\",e)}),define(se[573],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/keybindingLabel/keybindingLabel\",e)}),define(se[574],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/selectBox/selectBoxCustom\",e)}),define(se[575],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/toolbar/toolbar\",e)}),define(se[576],oe([3,4]),function(te,e){return te.create(\"vs/base/browser/ui/tree/abstractTree\",e)}),define(se[577],oe([3,4]),function(te,e){return te.create(\"vs/base/common/actions\",e)}),define(se[42],oe([1,0,6,2,577]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.toAction=e.EmptySubmenuAction=e.SubmenuAction=e.Separator=e.ActionRunner=e.Action=void 0;class E extends k.Disposable{constructor(i,n=\"\",t=\"\",r=!0,u){super(),this._onDidChange=this._register(new L.Emitter),this.onDidChange=this._onDidChange.event,this._enabled=!0,this._id=i,this._label=n,this._cssClass=t,this._enabled=r,this._actionCallback=u}get id(){return this._id}get label(){return this._label}set label(i){this._setLabel(i)}_setLabel(i){this._label!==i&&(this._label=i,this._onDidChange.fire({label:i}))}get tooltip(){return this._tooltip||\"\"}set tooltip(i){this._setTooltip(i)}_setTooltip(i){this._tooltip!==i&&(this._tooltip=i,this._onDidChange.fire({tooltip:i}))}get class(){return this._cssClass}set class(i){this._setClass(i)}_setClass(i){this._cssClass!==i&&(this._cssClass=i,this._onDidChange.fire({class:i}))}get enabled(){return this._enabled}set enabled(i){this._setEnabled(i)}_setEnabled(i){this._enabled!==i&&(this._enabled=i,this._onDidChange.fire({enabled:i}))}get checked(){return this._checked}set checked(i){this._setChecked(i)}_setChecked(i){this._checked!==i&&(this._checked=i,this._onDidChange.fire({checked:i}))}async run(i,n){this._actionCallback&&await this._actionCallback(i)}}e.Action=E;class S extends k.Disposable{constructor(){super(...arguments),this._onWillRun=this._register(new L.Emitter),this.onWillRun=this._onWillRun.event,this._onDidRun=this._register(new L.Emitter),this.onDidRun=this._onDidRun.event}async run(i,n){if(!i.enabled)return;this._onWillRun.fire({action:i});let t;try{await this.runAction(i,n)}catch(r){t=r}this._onDidRun.fire({action:i,error:t})}async runAction(i,n){await i.run(n)}}e.ActionRunner=S;class p{constructor(){this.id=p.ID,this.label=\"\",this.tooltip=\"\",this.class=\"separator\",this.enabled=!1,this.checked=!1}static join(...i){let n=[];for(const t of i)t.length&&(n.length?n=[...n,new p,...t]:n=t);return n}async run(){}}e.Separator=p,p.ID=\"vs.actions.separator\";class _{get actions(){return this._actions}constructor(i,n,t,r){this.tooltip=\"\",this.enabled=!0,this.checked=void 0,this.id=i,this.label=n,this.class=r,this._actions=t}async run(){}}e.SubmenuAction=_;class v extends E{constructor(){super(v.ID,y.localize(0,null),void 0,!1)}}e.EmptySubmenuAction=v,v.ID=\"vs.actions.empty\";function b(a){var i,n;return{id:a.id,label:a.label,class:a.class,enabled:(i=a.enabled)!==null&&i!==void 0?i:!0,checked:(n=a.checked)!==null&&n!==void 0?n:!1,run:async(...t)=>a.run(...t),tooltip:a.label}}e.toAction=b}),define(se[578],oe([1,0,42]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ActionRunnerWithContext=void 0;class k extends L.ActionRunner{constructor(E){super(),this._getContext=E}runAction(E,S){return super.runAction(E,this._getContext())}}e.ActionRunnerWithContext=k}),define(se[579],oe([3,4]),function(te,e){return te.create(\"vs/base/common/errorMessage\",e)}),define(se[580],oe([1,0,13,20,579]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.toErrorMessage=void 0;function E(v,b){return b&&(v.stack||v.stacktrace)?y.localize(0,null,p(v),S(v.stack)||S(v.stacktrace)):p(v)}function S(v){return Array.isArray(v)?v.join(`\n`):v}function p(v){return v.code===\"ERR_UNC_HOST_NOT_ALLOWED\"?`${v.message}. Please update the 'security.allowedUNCHosts' setting if you want to allow this host.`:typeof v.code==\"string\"&&typeof v.errno==\"number\"&&typeof v.syscall==\"string\"?y.localize(1,null,v.message):v.message||y.localize(2,null)}function _(v=null,b=!1){if(!v)return y.localize(3,null);if(Array.isArray(v)){const a=L.coalesce(v),i=_(a[0],b);return a.length>1?y.localize(4,null,i,a.length):i}if(k.isString(v))return v;if(v.detail){const a=v.detail;if(a.error)return E(a.error,b);if(a.exception)return E(a.exception,b)}return v.stack?E(v,b):v.message?v.message:y.localize(5,null)}e.toErrorMessage=_}),define(se[581],oe([3,4]),function(te,e){return te.create(\"vs/base/common/keybindingLabels\",e)}),define(se[218],oe([1,0,581]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UserSettingsLabelProvider=e.ElectronAcceleratorLabelProvider=e.AriaLabelProvider=e.UILabelProvider=e.ModifierLabelProvider=void 0;class k{constructor(S,p,_=p){this.modifierLabels=[null],this.modifierLabels[2]=S,this.modifierLabels[1]=p,this.modifierLabels[3]=_}toLabel(S,p,_){if(p.length===0)return null;const v=[];for(let b=0,a=p.length;b<a;b++){const i=p[b],n=_(i);if(n===null)return null;v[b]=y(i,n,this.modifierLabels[S])}return v.join(\" \")}}e.ModifierLabelProvider=k,e.UILabelProvider=new k({ctrlKey:\"\\u2303\",shiftKey:\"\\u21E7\",altKey:\"\\u2325\",metaKey:\"\\u2318\",separator:\"\"},{ctrlKey:L.localize(0,null),shiftKey:L.localize(1,null),altKey:L.localize(2,null),metaKey:L.localize(3,null),separator:\"+\"},{ctrlKey:L.localize(4,null),shiftKey:L.localize(5,null),altKey:L.localize(6,null),metaKey:L.localize(7,null),separator:\"+\"}),e.AriaLabelProvider=new k({ctrlKey:L.localize(8,null),shiftKey:L.localize(9,null),altKey:L.localize(10,null),metaKey:L.localize(11,null),separator:\"+\"},{ctrlKey:L.localize(12,null),shiftKey:L.localize(13,null),altKey:L.localize(14,null),metaKey:L.localize(15,null),separator:\"+\"},{ctrlKey:L.localize(16,null),shiftKey:L.localize(17,null),altKey:L.localize(18,null),metaKey:L.localize(19,null),separator:\"+\"}),e.ElectronAcceleratorLabelProvider=new k({ctrlKey:\"Ctrl\",shiftKey:\"Shift\",altKey:\"Alt\",metaKey:\"Cmd\",separator:\"+\"},{ctrlKey:\"Ctrl\",shiftKey:\"Shift\",altKey:\"Alt\",metaKey:\"Super\",separator:\"+\"}),e.UserSettingsLabelProvider=new k({ctrlKey:\"ctrl\",shiftKey:\"shift\",altKey:\"alt\",metaKey:\"cmd\",separator:\"+\"},{ctrlKey:\"ctrl\",shiftKey:\"shift\",altKey:\"alt\",metaKey:\"win\",separator:\"+\"},{ctrlKey:\"ctrl\",shiftKey:\"shift\",altKey:\"alt\",metaKey:\"meta\",separator:\"+\"});function y(E,S,p){if(S===null)return\"\";const _=[];return E.ctrlKey&&_.push(p.ctrlKey),E.shiftKey&&_.push(p.shiftKey),E.altKey&&_.push(p.altKey),E.metaKey&&_.push(p.metaKey),S!==\"\"&&_.push(S),_.join(p.separator)}}),define(se[582],oe([3,4]),function(te,e){return te.create(\"vs/base/common/platform\",e)}),define(se[17],oe([1,0,582]),function(te,e,L){\"use strict\";var k;Object.defineProperty(e,\"__esModule\",{value:!0}),e.isAndroid=e.isEdge=e.isSafari=e.isFirefox=e.isChrome=e.isLittleEndian=e.OS=e.setTimeout0=e.setTimeout0IsFaster=e.language=e.userAgent=e.isMobile=e.isIOS=e.webWorkerOrigin=e.isWebWorker=e.isWeb=e.isNative=e.isLinux=e.isMacintosh=e.isWindows=e.LANGUAGE_DEFAULT=void 0,e.LANGUAGE_DEFAULT=\"en\";let y=!1,E=!1,S=!1,p=!1,_=!1,v=!1,b=!1,a=!1,i=!1,n=!1,t,r=e.LANGUAGE_DEFAULT,u=e.LANGUAGE_DEFAULT,f,c;const d=globalThis;let s;typeof d.vscode<\"u\"&&typeof d.vscode.process<\"u\"?s=d.vscode.process:typeof process<\"u\"&&(s=process);const l=typeof((k=s?.versions)===null||k===void 0?void 0:k.electron)==\"string\",o=l&&s?.type===\"renderer\";if(typeof s==\"object\"){y=s.platform===\"win32\",E=s.platform===\"darwin\",S=s.platform===\"linux\",p=S&&!!s.env.SNAP&&!!s.env.SNAP_REVISION,b=l,i=!!s.env.CI||!!s.env.BUILD_ARTIFACTSTAGINGDIRECTORY,t=e.LANGUAGE_DEFAULT,r=e.LANGUAGE_DEFAULT;const w=s.env.VSCODE_NLS_CONFIG;if(w)try{const D=JSON.parse(w),I=D.availableLanguages[\"*\"];t=D.locale,u=D.osLocale,r=I||e.LANGUAGE_DEFAULT,f=D._translationsConfigFile}catch{}_=!0}else typeof navigator==\"object\"&&!o?(c=navigator.userAgent,y=c.indexOf(\"Windows\")>=0,E=c.indexOf(\"Macintosh\")>=0,a=(c.indexOf(\"Macintosh\")>=0||c.indexOf(\"iPad\")>=0||c.indexOf(\"iPhone\")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,S=c.indexOf(\"Linux\")>=0,n=c?.indexOf(\"Mobi\")>=0,v=!0,t=L.getConfiguredDefaultLocale(L.localize(0,null))||e.LANGUAGE_DEFAULT,r=t,u=navigator.language):console.error(\"Unable to resolve platform.\");let g=0;E?g=1:y?g=3:S&&(g=2),e.isWindows=y,e.isMacintosh=E,e.isLinux=S,e.isNative=_,e.isWeb=v,e.isWebWorker=v&&typeof d.importScripts==\"function\",e.webWorkerOrigin=e.isWebWorker?d.origin:void 0,e.isIOS=a,e.isMobile=n,e.userAgent=c,e.language=r,e.setTimeout0IsFaster=typeof d.postMessage==\"function\"&&!d.importScripts,e.setTimeout0=(()=>{if(e.setTimeout0IsFaster){const w=[];d.addEventListener(\"message\",I=>{if(I.data&&I.data.vscodeScheduleAsyncWork)for(let T=0,A=w.length;T<A;T++){const P=w[T];if(P.id===I.data.vscodeScheduleAsyncWork){w.splice(T,1),P.callback();return}}});let D=0;return I=>{const T=++D;w.push({id:T,callback:I}),d.postMessage({vscodeScheduleAsyncWork:T},\"*\")}}return w=>setTimeout(w)})(),e.OS=E||a?2:y?1:3;let h=!0,m=!1;function C(){if(!m){m=!0;const w=new Uint8Array(2);w[0]=1,w[1]=2,h=new Uint16Array(w.buffer)[0]===(2<<8)+1}return h}e.isLittleEndian=C,e.isChrome=!!(e.userAgent&&e.userAgent.indexOf(\"Chrome\")>=0),e.isFirefox=!!(e.userAgent&&e.userAgent.indexOf(\"Firefox\")>=0),e.isSafari=!!(!e.isChrome&&e.userAgent&&e.userAgent.indexOf(\"Safari\")>=0),e.isEdge=!!(e.userAgent&&e.userAgent.indexOf(\"Edg/\")>=0),e.isAndroid=!!(e.userAgent&&e.userAgent.indexOf(\"Android\")>=0)}),define(se[219],oe([1,0,54,44,17]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BrowserFeatures=void 0,e.BrowserFeatures={clipboard:{writeText:y.isNative||document.queryCommandSupported&&document.queryCommandSupported(\"copy\")||!!(navigator&&navigator.clipboard&&navigator.clipboard.writeText),readText:y.isNative||!!(navigator&&navigator.clipboard&&navigator.clipboard.readText)},keyboard:(()=>y.isNative||L.isStandalone()?0:navigator.keyboard||L.isSafari?1:2)(),touch:\"ontouchstart\"in k.mainWindow||navigator.maxTouchPoints>0,pointerEvents:k.mainWindow.PointerEvent&&(\"ontouchstart\"in k.mainWindow||navigator.maxTouchPoints>0)}}),define(se[46],oe([1,0,54,65,125,17]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StandardKeyboardEvent=void 0;function S(i){if(i.charCode){const t=String.fromCharCode(i.charCode).toUpperCase();return k.KeyCodeUtils.fromString(t)}const n=i.keyCode;if(n===3)return 7;if(L.isFirefox)switch(n){case 59:return 85;case 60:if(E.isLinux)return 97;break;case 61:return 86;case 107:return 109;case 109:return 111;case 173:return 88;case 224:if(E.isMacintosh)return 57;break}else if(L.isWebKit){if(E.isMacintosh&&n===93)return 57;if(!E.isMacintosh&&n===92)return 57}return k.EVENT_KEY_CODE_MAP[n]||0}const p=E.isMacintosh?256:2048,_=512,v=1024,b=E.isMacintosh?2048:256;class a{constructor(n){this._standardKeyboardEventBrand=!0;const t=n;this.browserEvent=t,this.target=t.target,this.ctrlKey=t.ctrlKey,this.shiftKey=t.shiftKey,this.altKey=t.altKey,this.metaKey=t.metaKey,this.altGraphKey=t.getModifierState(\"AltGraph\"),this.keyCode=S(t),this.code=t.code,this.ctrlKey=this.ctrlKey||this.keyCode===5,this.altKey=this.altKey||this.keyCode===6,this.shiftKey=this.shiftKey||this.keyCode===4,this.metaKey=this.metaKey||this.keyCode===57,this._asKeybinding=this._computeKeybinding(),this._asKeyCodeChord=this._computeKeyCodeChord()}preventDefault(){this.browserEvent&&this.browserEvent.preventDefault&&this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent&&this.browserEvent.stopPropagation&&this.browserEvent.stopPropagation()}toKeyCodeChord(){return this._asKeyCodeChord}equals(n){return this._asKeybinding===n}_computeKeybinding(){let n=0;this.keyCode!==5&&this.keyCode!==4&&this.keyCode!==6&&this.keyCode!==57&&(n=this.keyCode);let t=0;return this.ctrlKey&&(t|=p),this.altKey&&(t|=_),this.shiftKey&&(t|=v),this.metaKey&&(t|=b),t|=n,t}_computeKeyCodeChord(){let n=0;return this.keyCode!==5&&this.keyCode!==4&&this.keyCode!==6&&this.keyCode!==57&&(n=this.keyCode),new y.KeyCodeChord(this.ctrlKey,this.shiftKey,this.altKey,this.metaKey,n)}}e.StandardKeyboardEvent=a}),define(se[67],oe([1,0,54,394,17]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StandardWheelEvent=e.StandardMouseEvent=void 0;class E{constructor(_,v){this.timestamp=Date.now(),this.browserEvent=v,this.leftButton=v.button===0,this.middleButton=v.button===1,this.rightButton=v.button===2,this.buttons=v.buttons,this.target=v.target,this.detail=v.detail||1,v.type===\"dblclick\"&&(this.detail=2),this.ctrlKey=v.ctrlKey,this.shiftKey=v.shiftKey,this.altKey=v.altKey,this.metaKey=v.metaKey,typeof v.pageX==\"number\"?(this.posx=v.pageX,this.posy=v.pageY):(this.posx=v.clientX+this.target.ownerDocument.body.scrollLeft+this.target.ownerDocument.documentElement.scrollLeft,this.posy=v.clientY+this.target.ownerDocument.body.scrollTop+this.target.ownerDocument.documentElement.scrollTop);const b=k.IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(_,v.view);this.posx-=b.left,this.posy-=b.top}preventDefault(){this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent.stopPropagation()}}e.StandardMouseEvent=E;class S{constructor(_,v=0,b=0){var a;if(this.browserEvent=_||null,this.target=_?_.target||_.targetNode||_.srcElement:null,this.deltaY=b,this.deltaX=v,_){const i=_,n=_,t=((a=_.view)===null||a===void 0?void 0:a.devicePixelRatio)||1;if(typeof i.wheelDeltaY<\"u\")L.isChrome?this.deltaY=i.wheelDeltaY/(120*t):this.deltaY=i.wheelDeltaY/120;else if(typeof n.VERTICAL_AXIS<\"u\"&&n.axis===n.VERTICAL_AXIS)this.deltaY=-n.detail/3;else if(_.type===\"wheel\"){const r=_;r.deltaMode===r.DOM_DELTA_LINE?L.isFirefox&&!y.isMacintosh?this.deltaY=-_.deltaY/3:this.deltaY=-_.deltaY:this.deltaY=-_.deltaY/40}if(typeof i.wheelDeltaX<\"u\")L.isSafari&&y.isWindows?this.deltaX=-(i.wheelDeltaX/120):L.isChrome?this.deltaX=i.wheelDeltaX/(120*t):this.deltaX=i.wheelDeltaX/120;else if(typeof n.HORIZONTAL_AXIS<\"u\"&&n.axis===n.HORIZONTAL_AXIS)this.deltaX=-_.detail/3;else if(_.type===\"wheel\"){const r=_;r.deltaMode===r.DOM_DELTA_LINE?L.isFirefox&&!y.isMacintosh?this.deltaX=-_.deltaX/3:this.deltaX=-_.deltaX:this.deltaX=-_.deltaX/40}this.deltaY===0&&this.deltaX===0&&_.wheelDelta&&(L.isChrome?this.deltaY=_.wheelDelta/(120*t):this.deltaY=_.wheelDelta/120)}}preventDefault(){var _;(_=this.browserEvent)===null||_===void 0||_.preventDefault()}stopPropagation(){var _;(_=this.browserEvent)===null||_===void 0||_.stopPropagation()}}e.StandardWheelEvent=S}),define(se[14],oe([1,0,19,12,6,2,17,271]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createCancelableAsyncIterable=e.CancelableAsyncIterableObject=e.AsyncIterableObject=e.Promises=e.DeferredPromise=e.GlobalIdleValue=e.AbstractIdleValue=e._runWhenIdle=e.runWhenGlobalIdle=e.RunOnceScheduler=e.IntervalTimer=e.TimeoutTimer=e.first=e.disposableTimeout=e.timeout=e.ThrottledDelayer=e.Delayer=e.Throttler=e.raceCancellation=e.createCancelablePromise=e.isThenable=void 0;function _(I){return!!I&&typeof I.then==\"function\"}e.isThenable=_;function v(I){const T=new L.CancellationTokenSource,A=I(T.token),P=new Promise((N,M)=>{const R=T.token.onCancellationRequested(()=>{R.dispose(),M(new k.CancellationError)});Promise.resolve(A).then(x=>{R.dispose(),T.dispose(),N(x)},x=>{R.dispose(),T.dispose(),M(x)})});return new class{cancel(){T.cancel(),T.dispose()}then(N,M){return P.then(N,M)}catch(N){return this.then(void 0,N)}finally(N){return P.finally(N)}}}e.createCancelablePromise=v;function b(I,T,A){return new Promise((P,N)=>{const M=T.onCancellationRequested(()=>{M.dispose(),P(A)});I.then(P,N).finally(()=>M.dispose())})}e.raceCancellation=b;class a{constructor(){this.isDisposed=!1,this.activePromise=null,this.queuedPromise=null,this.queuedPromiseFactory=null}queue(T){if(this.isDisposed)return Promise.reject(new Error(\"Throttler is disposed\"));if(this.activePromise){if(this.queuedPromiseFactory=T,!this.queuedPromise){const A=()=>{if(this.queuedPromise=null,this.isDisposed)return;const P=this.queue(this.queuedPromiseFactory);return this.queuedPromiseFactory=null,P};this.queuedPromise=new Promise(P=>{this.activePromise.then(A,A).then(P)})}return new Promise((A,P)=>{this.queuedPromise.then(A,P)})}return this.activePromise=T(),new Promise((A,P)=>{this.activePromise.then(N=>{this.activePromise=null,A(N)},N=>{this.activePromise=null,P(N)})})}dispose(){this.isDisposed=!0}}e.Throttler=a;const i=(I,T)=>{let A=!0;const P=setTimeout(()=>{A=!1,T()},I);return{isTriggered:()=>A,dispose:()=>{clearTimeout(P),A=!1}}},n=I=>{let T=!0;return queueMicrotask(()=>{T&&(T=!1,I())}),{isTriggered:()=>T,dispose:()=>{T=!1}}};class t{constructor(T){this.defaultDelay=T,this.deferred=null,this.completionPromise=null,this.doResolve=null,this.doReject=null,this.task=null}trigger(T,A=this.defaultDelay){this.task=T,this.cancelTimeout(),this.completionPromise||(this.completionPromise=new Promise((N,M)=>{this.doResolve=N,this.doReject=M}).then(()=>{if(this.completionPromise=null,this.doResolve=null,this.task){const N=this.task;return this.task=null,N()}}));const P=()=>{var N;this.deferred=null,(N=this.doResolve)===null||N===void 0||N.call(this,null)};return this.deferred=A===p.MicrotaskDelay?n(P):i(A,P),this.completionPromise}isTriggered(){var T;return!!(!((T=this.deferred)===null||T===void 0)&&T.isTriggered())}cancel(){var T;this.cancelTimeout(),this.completionPromise&&((T=this.doReject)===null||T===void 0||T.call(this,new k.CancellationError),this.completionPromise=null)}cancelTimeout(){var T;(T=this.deferred)===null||T===void 0||T.dispose(),this.deferred=null}dispose(){this.cancel()}}e.Delayer=t;class r{constructor(T){this.delayer=new t(T),this.throttler=new a}trigger(T,A){return this.delayer.trigger(()=>this.throttler.queue(T),A)}cancel(){this.delayer.cancel()}dispose(){this.delayer.dispose(),this.throttler.dispose()}}e.ThrottledDelayer=r;function u(I,T){return T?new Promise((A,P)=>{const N=setTimeout(()=>{M.dispose(),A()},I),M=T.onCancellationRequested(()=>{clearTimeout(N),M.dispose(),P(new k.CancellationError)})}):v(A=>u(I,A))}e.timeout=u;function f(I,T=0,A){const P=setTimeout(()=>{I(),A&&N.dispose()},T),N=(0,E.toDisposable)(()=>{clearTimeout(P),A?.deleteAndLeak(N)});return A?.add(N),N}e.disposableTimeout=f;function c(I,T=P=>!!P,A=null){let P=0;const N=I.length,M=()=>{if(P>=N)return Promise.resolve(A);const R=I[P++];return Promise.resolve(R()).then(O=>T(O)?Promise.resolve(O):M())};return M()}e.first=c;class d{constructor(T,A){this._token=-1,typeof T==\"function\"&&typeof A==\"number\"&&this.setIfNotSet(T,A)}dispose(){this.cancel()}cancel(){this._token!==-1&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(T,A){this.cancel(),this._token=setTimeout(()=>{this._token=-1,T()},A)}setIfNotSet(T,A){this._token===-1&&(this._token=setTimeout(()=>{this._token=-1,T()},A))}}e.TimeoutTimer=d;class s{constructor(){this.disposable=void 0}cancel(){var T;(T=this.disposable)===null||T===void 0||T.dispose(),this.disposable=void 0}cancelAndSet(T,A,P=globalThis){this.cancel();const N=P.setInterval(()=>{T()},A);this.disposable=(0,E.toDisposable)(()=>{P.clearInterval(N),this.disposable=void 0})}dispose(){this.cancel()}}e.IntervalTimer=s;class l{constructor(T,A){this.timeoutToken=-1,this.runner=T,this.timeout=A,this.timeoutHandler=this.onTimeout.bind(this)}dispose(){this.cancel(),this.runner=null}cancel(){this.isScheduled()&&(clearTimeout(this.timeoutToken),this.timeoutToken=-1)}schedule(T=this.timeout){this.cancel(),this.timeoutToken=setTimeout(this.timeoutHandler,T)}get delay(){return this.timeout}set delay(T){this.timeout=T}isScheduled(){return this.timeoutToken!==-1}onTimeout(){this.timeoutToken=-1,this.runner&&this.doRun()}doRun(){var T;(T=this.runner)===null||T===void 0||T.call(this)}}e.RunOnceScheduler=l,function(){typeof globalThis.requestIdleCallback!=\"function\"||typeof globalThis.cancelIdleCallback!=\"function\"?e._runWhenIdle=(I,T)=>{(0,S.setTimeout0)(()=>{if(A)return;const P=Date.now()+15;T(Object.freeze({didTimeout:!0,timeRemaining(){return Math.max(0,P-Date.now())}}))});let A=!1;return{dispose(){A||(A=!0)}}}:e._runWhenIdle=(I,T,A)=>{const P=I.requestIdleCallback(T,typeof A==\"number\"?{timeout:A}:void 0);let N=!1;return{dispose(){N||(N=!0,I.cancelIdleCallback(P))}}},e.runWhenGlobalIdle=I=>(0,e._runWhenIdle)(globalThis,I)}();class o{constructor(T,A){this._didRun=!1,this._executor=()=>{try{this._value=A()}catch(P){this._error=P}finally{this._didRun=!0}},this._handle=(0,e._runWhenIdle)(T,()=>this._executor())}dispose(){this._handle.dispose()}get value(){if(this._didRun||(this._handle.dispose(),this._executor()),this._error)throw this._error;return this._value}get isInitialized(){return this._didRun}}e.AbstractIdleValue=o;class g extends o{constructor(T){super(globalThis,T)}}e.GlobalIdleValue=g;class h{get isRejected(){var T;return((T=this.outcome)===null||T===void 0?void 0:T.outcome)===1}get isSettled(){return!!this.outcome}constructor(){this.p=new Promise((T,A)=>{this.completeCallback=T,this.errorCallback=A})}complete(T){return new Promise(A=>{this.completeCallback(T),this.outcome={outcome:0,value:T},A()})}error(T){return new Promise(A=>{this.errorCallback(T),this.outcome={outcome:1,value:T},A()})}cancel(){return this.error(new k.CancellationError)}}e.DeferredPromise=h;var m;(function(I){async function T(P){let N;const M=await Promise.all(P.map(R=>R.then(x=>x,x=>{N||(N=x)})));if(typeof N<\"u\")throw N;return M}I.settled=T;function A(P){return new Promise(async(N,M)=>{try{await P(N,M)}catch(R){M(R)}})}I.withAsyncBody=A})(m||(e.Promises=m={}));class C{static fromArray(T){return new C(A=>{A.emitMany(T)})}static fromPromise(T){return new C(async A=>{A.emitMany(await T)})}static fromPromises(T){return new C(async A=>{await Promise.all(T.map(async P=>A.emitOne(await P)))})}static merge(T){return new C(async A=>{await Promise.all(T.map(async P=>{for await(const N of P)A.emitOne(N)}))})}constructor(T){this._state=0,this._results=[],this._error=null,this._onStateChanged=new y.Emitter,queueMicrotask(async()=>{const A={emitOne:P=>this.emitOne(P),emitMany:P=>this.emitMany(P),reject:P=>this.reject(P)};try{await Promise.resolve(T(A)),this.resolve()}catch(P){this.reject(P)}finally{A.emitOne=void 0,A.emitMany=void 0,A.reject=void 0}})}[Symbol.asyncIterator](){let T=0;return{next:async()=>{do{if(this._state===2)throw this._error;if(T<this._results.length)return{done:!1,value:this._results[T++]};if(this._state===1)return{done:!0,value:void 0};await y.Event.toPromise(this._onStateChanged.event)}while(!0)}}}static map(T,A){return new C(async P=>{for await(const N of T)P.emitOne(A(N))})}map(T){return C.map(this,T)}static filter(T,A){return new C(async P=>{for await(const N of T)A(N)&&P.emitOne(N)})}filter(T){return C.filter(this,T)}static coalesce(T){return C.filter(T,A=>!!A)}coalesce(){return C.coalesce(this)}static async toPromise(T){const A=[];for await(const P of T)A.push(P);return A}toPromise(){return C.toPromise(this)}emitOne(T){this._state===0&&(this._results.push(T),this._onStateChanged.fire())}emitMany(T){this._state===0&&(this._results=this._results.concat(T),this._onStateChanged.fire())}resolve(){this._state===0&&(this._state=1,this._onStateChanged.fire())}reject(T){this._state===0&&(this._state=2,this._error=T,this._onStateChanged.fire())}}e.AsyncIterableObject=C,C.EMPTY=C.fromArray([]);class w extends C{constructor(T,A){super(A),this._source=T}cancel(){this._source.cancel()}}e.CancelableAsyncIterableObject=w;function D(I){const T=new L.CancellationTokenSource,A=I(T.token);return new w(T,async P=>{const N=T.token.onCancellationRequested(()=>{N.dispose(),T.dispose(),P.reject(new k.CancellationError)});try{for await(const M of A){if(T.token.isCancellationRequested)return;P.emitOne(M)}N.dispose(),T.dispose()}catch(M){N.dispose(),T.dispose(),P.reject(M)}})}e.createCancelableAsyncIterable=D}),define(se[583],oe([1,0,14,2]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ScrollbarVisibilityController=void 0;class y extends k.Disposable{constructor(S,p,_){super(),this._visibility=S,this._visibleClassName=p,this._invisibleClassName=_,this._domNode=null,this._isVisible=!1,this._isNeeded=!1,this._rawShouldBeVisible=!1,this._shouldBeVisible=!1,this._revealTimer=this._register(new L.TimeoutTimer)}setVisibility(S){this._visibility!==S&&(this._visibility=S,this._updateShouldBeVisible())}setShouldBeVisible(S){this._rawShouldBeVisible=S,this._updateShouldBeVisible()}_applyVisibilitySetting(){return this._visibility===2?!1:this._visibility===3?!0:this._rawShouldBeVisible}_updateShouldBeVisible(){const S=this._applyVisibilitySetting();this._shouldBeVisible!==S&&(this._shouldBeVisible=S,this.ensureVisibility())}setIsNeeded(S){this._isNeeded!==S&&(this._isNeeded=S,this.ensureVisibility())}setDomNode(S){this._domNode=S,this._domNode.setClassName(this._invisibleClassName),this.setShouldBeVisible(!1)}ensureVisibility(){if(!this._isNeeded){this._hide(!1);return}this._shouldBeVisible?this._reveal():this._hide(!0)}_reveal(){this._isVisible||(this._isVisible=!0,this._revealTimer.setIfNotSet(()=>{var S;(S=this._domNode)===null||S===void 0||S.setClassName(this._visibleClassName)},0))}_hide(S){var p;this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,(p=this._domNode)===null||p===void 0||p.setClassName(this._invisibleClassName+(S?\" fade\":\"\")))}}e.ScrollbarVisibilityController=y}),define(se[220],oe([1,0,143,13,14,271,173,6,52]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IndexTreeModel=e.getVisibleState=e.isFilterResult=void 0;function v(n){return typeof n==\"object\"&&\"visibility\"in n&&\"data\"in n}e.isFilterResult=v;function b(n){switch(n){case!0:return 1;case!1:return 0;default:return n}}e.getVisibleState=b;function a(n){return typeof n.collapsible==\"boolean\"}class i{constructor(t,r,u,f={}){this.user=t,this.list=r,this.rootRef=[],this.eventBufferer=new p.EventBufferer,this._onDidChangeCollapseState=new p.Emitter,this.onDidChangeCollapseState=this.eventBufferer.wrapEvent(this._onDidChangeCollapseState.event),this._onDidChangeRenderNodeCount=new p.Emitter,this.onDidChangeRenderNodeCount=this.eventBufferer.wrapEvent(this._onDidChangeRenderNodeCount.event),this._onDidSplice=new p.Emitter,this.onDidSplice=this._onDidSplice.event,this.refilterDelayer=new y.Delayer(E.MicrotaskDelay),this.collapseByDefault=typeof f.collapseByDefault>\"u\"?!1:f.collapseByDefault,this.filter=f.filter,this.autoExpandSingleChildren=typeof f.autoExpandSingleChildren>\"u\"?!1:f.autoExpandSingleChildren,this.root={parent:void 0,element:u,children:[],depth:0,visibleChildrenCount:0,visibleChildIndex:-1,collapsible:!1,collapsed:!1,renderNodeCount:0,visibility:1,visible:!0,filterData:void 0}}splice(t,r,u=_.Iterable.empty(),f={}){if(t.length===0)throw new L.TreeError(this.user,\"Invalid tree location\");f.diffIdentityProvider?this.spliceSmart(f.diffIdentityProvider,t,r,u,f):this.spliceSimple(t,r,u,f)}spliceSmart(t,r,u,f,c,d){var s;f===void 0&&(f=_.Iterable.empty()),d===void 0&&(d=(s=c.diffDepth)!==null&&s!==void 0?s:0);const{parentNode:l}=this.getParentNodeWithListIndex(r);if(!l.lastDiffIds)return this.spliceSimple(r,u,f,c);const o=[...f],g=r[r.length-1],h=new S.LcsDiff({getElements:()=>l.lastDiffIds},{getElements:()=>[...l.children.slice(0,g),...o,...l.children.slice(g+u)].map(I=>t.getId(I.element).toString())}).ComputeDiff(!1);if(h.quitEarly)return l.lastDiffIds=void 0,this.spliceSimple(r,u,o,c);const m=r.slice(0,-1),C=(I,T,A)=>{if(d>0)for(let P=0;P<A;P++)I--,T--,this.spliceSmart(t,[...m,I,0],Number.MAX_SAFE_INTEGER,o[T].children,c,d-1)};let w=Math.min(l.children.length,g+u),D=o.length;for(const I of h.changes.sort((T,A)=>A.originalStart-T.originalStart))C(w,D,w-(I.originalStart+I.originalLength)),w=I.originalStart,D=I.modifiedStart-g,this.spliceSimple([...m,w],I.originalLength,_.Iterable.slice(o,D,D+I.modifiedLength),c);C(w,D,w)}spliceSimple(t,r,u=_.Iterable.empty(),{onDidCreateNode:f,onDidDeleteNode:c,diffIdentityProvider:d}){const{parentNode:s,listIndex:l,revealed:o,visible:g}=this.getParentNodeWithListIndex(t),h=[],m=_.Iterable.map(u,M=>this.createTreeNode(M,s,s.visible?1:0,o,h,f)),C=t[t.length-1];let w=0;for(let M=C;M>=0&&M<s.children.length;M--){const R=s.children[M];if(R.visible){w=R.visibleChildIndex;break}}const D=[];let I=0,T=0;for(const M of m)D.push(M),T+=M.renderNodeCount,M.visible&&(M.visibleChildIndex=w+I++);const A=(0,k.splice)(s.children,C,r,D);d?s.lastDiffIds?(0,k.splice)(s.lastDiffIds,C,r,D.map(M=>d.getId(M.element).toString())):s.lastDiffIds=s.children.map(M=>d.getId(M.element).toString()):s.lastDiffIds=void 0;let P=0;for(const M of A)M.visible&&P++;if(P!==0)for(let M=C+D.length;M<s.children.length;M++){const R=s.children[M];R.visible&&(R.visibleChildIndex-=P)}if(s.visibleChildrenCount+=I-P,o&&g){const M=A.reduce((R,x)=>R+(x.visible?x.renderNodeCount:0),0);this._updateAncestorsRenderNodeCount(s,T-M),this.list.splice(l,M,h)}if(A.length>0&&c){const M=R=>{c(R),R.children.forEach(M)};A.forEach(M)}this._onDidSplice.fire({insertedNodes:D,deletedNodes:A});let N=s;for(;N;){if(N.visibility===2){this.refilterDelayer.trigger(()=>this.refilter());break}N=N.parent}}rerender(t){if(t.length===0)throw new L.TreeError(this.user,\"Invalid tree location\");const{node:r,listIndex:u,revealed:f}=this.getTreeNodeWithListIndex(t);r.visible&&f&&this.list.splice(u,1,[r])}has(t){return this.hasTreeNode(t)}getListIndex(t){const{listIndex:r,visible:u,revealed:f}=this.getTreeNodeWithListIndex(t);return u&&f?r:-1}getListRenderCount(t){return this.getTreeNode(t).renderNodeCount}isCollapsible(t){return this.getTreeNode(t).collapsible}setCollapsible(t,r){const u=this.getTreeNode(t);typeof r>\"u\"&&(r=!u.collapsible);const f={collapsible:r};return this.eventBufferer.bufferEvents(()=>this._setCollapseState(t,f))}isCollapsed(t){return this.getTreeNode(t).collapsed}setCollapsed(t,r,u){const f=this.getTreeNode(t);typeof r>\"u\"&&(r=!f.collapsed);const c={collapsed:r,recursive:u||!1};return this.eventBufferer.bufferEvents(()=>this._setCollapseState(t,c))}_setCollapseState(t,r){const{node:u,listIndex:f,revealed:c}=this.getTreeNodeWithListIndex(t),d=this._setListNodeCollapseState(u,f,c,r);if(u!==this.root&&this.autoExpandSingleChildren&&d&&!a(r)&&u.collapsible&&!u.collapsed&&!r.recursive){let s=-1;for(let l=0;l<u.children.length;l++)if(u.children[l].visible)if(s>-1){s=-1;break}else s=l;s>-1&&this._setCollapseState([...t,s],r)}return d}_setListNodeCollapseState(t,r,u,f){const c=this._setNodeCollapseState(t,f,!1);if(!u||!t.visible||!c)return c;const d=t.renderNodeCount,s=this.updateNodeAfterCollapseChange(t),l=d-(r===-1?0:1);return this.list.splice(r+1,l,s.slice(1)),c}_setNodeCollapseState(t,r,u){let f;if(t===this.root?f=!1:(a(r)?(f=t.collapsible!==r.collapsible,t.collapsible=r.collapsible):t.collapsible?(f=t.collapsed!==r.collapsed,t.collapsed=r.collapsed):f=!1,f&&this._onDidChangeCollapseState.fire({node:t,deep:u})),!a(r)&&r.recursive)for(const c of t.children)f=this._setNodeCollapseState(c,r,!0)||f;return f}expandTo(t){this.eventBufferer.bufferEvents(()=>{let r=this.getTreeNode(t);for(;r.parent;)r=r.parent,t=t.slice(0,t.length-1),r.collapsed&&this._setCollapseState(t,{collapsed:!1,recursive:!1})})}refilter(){const t=this.root.renderNodeCount,r=this.updateNodeAfterFilterChange(this.root);this.list.splice(0,t,r),this.refilterDelayer.cancel()}createTreeNode(t,r,u,f,c,d){const s={parent:r,element:t.element,children:[],depth:r.depth+1,visibleChildrenCount:0,visibleChildIndex:-1,collapsible:typeof t.collapsible==\"boolean\"?t.collapsible:typeof t.collapsed<\"u\",collapsed:typeof t.collapsed>\"u\"?this.collapseByDefault:t.collapsed,renderNodeCount:1,visibility:1,visible:!0,filterData:void 0},l=this._filterNode(s,u);s.visibility=l,f&&c.push(s);const o=t.children||_.Iterable.empty(),g=f&&l!==0&&!s.collapsed;let h=0,m=1;for(const C of o){const w=this.createTreeNode(C,s,l,g,c,d);s.children.push(w),m+=w.renderNodeCount,w.visible&&(w.visibleChildIndex=h++)}return s.collapsible=s.collapsible||s.children.length>0,s.visibleChildrenCount=h,s.visible=l===2?h>0:l===1,s.visible?s.collapsed||(s.renderNodeCount=m):(s.renderNodeCount=0,f&&c.pop()),d?.(s),s}updateNodeAfterCollapseChange(t){const r=t.renderNodeCount,u=[];return this._updateNodeAfterCollapseChange(t,u),this._updateAncestorsRenderNodeCount(t.parent,u.length-r),u}_updateNodeAfterCollapseChange(t,r){if(t.visible===!1)return 0;if(r.push(t),t.renderNodeCount=1,!t.collapsed)for(const u of t.children)t.renderNodeCount+=this._updateNodeAfterCollapseChange(u,r);return this._onDidChangeRenderNodeCount.fire(t),t.renderNodeCount}updateNodeAfterFilterChange(t){const r=t.renderNodeCount,u=[];return this._updateNodeAfterFilterChange(t,t.visible?1:0,u),this._updateAncestorsRenderNodeCount(t.parent,u.length-r),u}_updateNodeAfterFilterChange(t,r,u,f=!0){let c;if(t!==this.root){if(c=this._filterNode(t,r),c===0)return t.visible=!1,t.renderNodeCount=0,!1;f&&u.push(t)}const d=u.length;t.renderNodeCount=t===this.root?0:1;let s=!1;if(!t.collapsed||c!==0){let l=0;for(const o of t.children)s=this._updateNodeAfterFilterChange(o,c,u,f&&!t.collapsed)||s,o.visible&&(o.visibleChildIndex=l++);t.visibleChildrenCount=l}else t.visibleChildrenCount=0;return t!==this.root&&(t.visible=c===2?s:c===1,t.visibility=c),t.visible?t.collapsed||(t.renderNodeCount+=u.length-d):(t.renderNodeCount=0,f&&u.pop()),this._onDidChangeRenderNodeCount.fire(t),t.visible}_updateAncestorsRenderNodeCount(t,r){if(r!==0)for(;t;)t.renderNodeCount+=r,this._onDidChangeRenderNodeCount.fire(t),t=t.parent}_filterNode(t,r){const u=this.filter?this.filter.filter(t.element,r):1;return typeof u==\"boolean\"?(t.filterData=void 0,u?1:0):v(u)?(t.filterData=u.data,b(u.visibility)):(t.filterData=void 0,b(u))}hasTreeNode(t,r=this.root){if(!t||t.length===0)return!0;const[u,...f]=t;return u<0||u>r.children.length?!1:this.hasTreeNode(f,r.children[u])}getTreeNode(t,r=this.root){if(!t||t.length===0)return r;const[u,...f]=t;if(u<0||u>r.children.length)throw new L.TreeError(this.user,\"Invalid tree location\");return this.getTreeNode(f,r.children[u])}getTreeNodeWithListIndex(t){if(t.length===0)return{node:this.root,listIndex:-1,revealed:!0,visible:!1};const{parentNode:r,listIndex:u,revealed:f,visible:c}=this.getParentNodeWithListIndex(t),d=t[t.length-1];if(d<0||d>r.children.length)throw new L.TreeError(this.user,\"Invalid tree location\");const s=r.children[d];return{node:s,listIndex:u,revealed:f,visible:c&&s.visible}}getParentNodeWithListIndex(t,r=this.root,u=0,f=!0,c=!0){const[d,...s]=t;if(d<0||d>r.children.length)throw new L.TreeError(this.user,\"Invalid tree location\");for(let l=0;l<d;l++)u+=r.children[l].renderNodeCount;return f=f&&!r.collapsed,c=c&&r.visible,s.length===0?{parentNode:r,listIndex:u,revealed:f,visible:c}:this.getParentNodeWithListIndex(s,r.children[d],u+1,f,c)}getNode(t=[]){return this.getTreeNode(t)}getNodeLocation(t){const r=[];let u=t;for(;u.parent;)r.push(u.parent.children.indexOf(u)),u=u.parent;return r.reverse()}getParentNodeLocation(t){if(t.length!==0)return t.length===1?[]:(0,k.tail2)(t)[0]}getFirstElementChild(t){const r=this.getTreeNode(t);if(r.children.length!==0)return r.children[0].element}}e.IndexTreeModel=i}),define(se[221],oe([1,0,220,143,52]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ObjectTreeModel=void 0;class E{constructor(p,_,v={}){this.user=p,this.rootRef=null,this.nodes=new Map,this.nodesByIdentity=new Map,this.model=new L.IndexTreeModel(p,_,null,v),this.onDidSplice=this.model.onDidSplice,this.onDidChangeCollapseState=this.model.onDidChangeCollapseState,this.onDidChangeRenderNodeCount=this.model.onDidChangeRenderNodeCount,v.sorter&&(this.sorter={compare(b,a){return v.sorter.compare(b.element,a.element)}}),this.identityProvider=v.identityProvider}setChildren(p,_=y.Iterable.empty(),v={}){const b=this.getElementLocation(p);this._setChildren(b,this.preserveCollapseState(_),v)}_setChildren(p,_=y.Iterable.empty(),v){const b=new Set,a=new Set,i=t=>{var r;if(t.element===null)return;const u=t;if(b.add(u.element),this.nodes.set(u.element,u),this.identityProvider){const f=this.identityProvider.getId(u.element).toString();a.add(f),this.nodesByIdentity.set(f,u)}(r=v.onDidCreateNode)===null||r===void 0||r.call(v,u)},n=t=>{var r;if(t.element===null)return;const u=t;if(b.has(u.element)||this.nodes.delete(u.element),this.identityProvider){const f=this.identityProvider.getId(u.element).toString();a.has(f)||this.nodesByIdentity.delete(f)}(r=v.onDidDeleteNode)===null||r===void 0||r.call(v,u)};this.model.splice([...p,0],Number.MAX_VALUE,_,{...v,onDidCreateNode:i,onDidDeleteNode:n})}preserveCollapseState(p=y.Iterable.empty()){return this.sorter&&(p=[...p].sort(this.sorter.compare.bind(this.sorter))),y.Iterable.map(p,_=>{let v=this.nodes.get(_.element);if(!v&&this.identityProvider){const i=this.identityProvider.getId(_.element).toString();v=this.nodesByIdentity.get(i)}if(!v){let i;return typeof _.collapsed>\"u\"?i=void 0:_.collapsed===k.ObjectTreeElementCollapseState.Collapsed||_.collapsed===k.ObjectTreeElementCollapseState.PreserveOrCollapsed?i=!0:_.collapsed===k.ObjectTreeElementCollapseState.Expanded||_.collapsed===k.ObjectTreeElementCollapseState.PreserveOrExpanded?i=!1:i=!!_.collapsed,{..._,children:this.preserveCollapseState(_.children),collapsed:i}}const b=typeof _.collapsible==\"boolean\"?_.collapsible:v.collapsible;let a;return typeof _.collapsed>\"u\"||_.collapsed===k.ObjectTreeElementCollapseState.PreserveOrCollapsed||_.collapsed===k.ObjectTreeElementCollapseState.PreserveOrExpanded?a=v.collapsed:_.collapsed===k.ObjectTreeElementCollapseState.Collapsed?a=!0:_.collapsed===k.ObjectTreeElementCollapseState.Expanded?a=!1:a=!!_.collapsed,{..._,collapsible:b,collapsed:a,children:this.preserveCollapseState(_.children)}})}rerender(p){const _=this.getElementLocation(p);this.model.rerender(_)}getFirstElementChild(p=null){const _=this.getElementLocation(p);return this.model.getFirstElementChild(_)}has(p){return this.nodes.has(p)}getListIndex(p){const _=this.getElementLocation(p);return this.model.getListIndex(_)}getListRenderCount(p){const _=this.getElementLocation(p);return this.model.getListRenderCount(_)}isCollapsible(p){const _=this.getElementLocation(p);return this.model.isCollapsible(_)}setCollapsible(p,_){const v=this.getElementLocation(p);return this.model.setCollapsible(v,_)}isCollapsed(p){const _=this.getElementLocation(p);return this.model.isCollapsed(_)}setCollapsed(p,_,v){const b=this.getElementLocation(p);return this.model.setCollapsed(b,_,v)}expandTo(p){const _=this.getElementLocation(p);this.model.expandTo(_)}refilter(){this.model.refilter()}getNode(p=null){if(p===null)return this.model.getNode(this.model.rootRef);const _=this.nodes.get(p);if(!_)throw new k.TreeError(this.user,`Tree element not found: ${p}`);return _}getNodeLocation(p){return p.element}getParentNodeLocation(p){if(p===null)throw new k.TreeError(this.user,\"Invalid getParentNodeLocation call\");const _=this.nodes.get(p);if(!_)throw new k.TreeError(this.user,`Tree element not found: ${p}`);const v=this.model.getNodeLocation(_),b=this.model.getParentNodeLocation(v);return this.model.getNode(b).element}getElementLocation(p){if(p===null)return[];const _=this.nodes.get(p);if(!_)throw new k.TreeError(this.user,`Tree element not found: ${p}`);return this.model.getNodeLocation(_)}}e.ObjectTreeModel=E}),define(se[584],oe([1,0,221,143,13,6,52]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CompressibleObjectTreeModel=e.DefaultElementMapper=e.CompressedObjectTreeModel=e.decompress=e.compress=void 0;function p(d){const s=[d.element],l=d.incompressible||!1;return{element:{elements:s,incompressible:l},children:S.Iterable.map(S.Iterable.from(d.children),p),collapsible:d.collapsible,collapsed:d.collapsed}}function _(d){const s=[d.element],l=d.incompressible||!1;let o,g;for(;[g,o]=S.Iterable.consume(S.Iterable.from(d.children),2),!(g.length!==1||g[0].incompressible);)d=g[0],s.push(d.element);return{element:{elements:s,incompressible:l},children:S.Iterable.map(S.Iterable.concat(g,o),_),collapsible:d.collapsible,collapsed:d.collapsed}}e.compress=_;function v(d,s=0){let l;return s<d.element.elements.length-1?l=[v(d,s+1)]:l=S.Iterable.map(S.Iterable.from(d.children),o=>v(o,0)),s===0&&d.element.incompressible?{element:d.element.elements[s],children:l,incompressible:!0,collapsible:d.collapsible,collapsed:d.collapsed}:{element:d.element.elements[s],children:l,collapsible:d.collapsible,collapsed:d.collapsed}}function b(d){return v(d,0)}e.decompress=b;function a(d,s,l){return d.element===s?{...d,children:l}:{...d,children:S.Iterable.map(S.Iterable.from(d.children),o=>a(o,s,l))}}const i=d=>({getId(s){return s.elements.map(l=>d.getId(l).toString()).join(\"\\0\")}});class n{get onDidSplice(){return this.model.onDidSplice}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}get onDidChangeRenderNodeCount(){return this.model.onDidChangeRenderNodeCount}constructor(s,l,o={}){this.user=s,this.rootRef=null,this.nodes=new Map,this.model=new L.ObjectTreeModel(s,l,o),this.enabled=typeof o.compressionEnabled>\"u\"?!0:o.compressionEnabled,this.identityProvider=o.identityProvider}setChildren(s,l=S.Iterable.empty(),o){const g=o.diffIdentityProvider&&i(o.diffIdentityProvider);if(s===null){const N=S.Iterable.map(l,this.enabled?_:p);this._setChildren(null,N,{diffIdentityProvider:g,diffDepth:1/0});return}const h=this.nodes.get(s);if(!h)throw new k.TreeError(this.user,\"Unknown compressed tree node\");const m=this.model.getNode(h),C=this.model.getParentNodeLocation(h),w=this.model.getNode(C),D=b(m),I=a(D,s,l),T=(this.enabled?_:p)(I),A=o.diffIdentityProvider?(N,M)=>o.diffIdentityProvider.getId(N)===o.diffIdentityProvider.getId(M):void 0;if((0,y.equals)(T.element.elements,m.element.elements,A)){this._setChildren(h,T.children||S.Iterable.empty(),{diffIdentityProvider:g,diffDepth:1});return}const P=w.children.map(N=>N===m?T:N);this._setChildren(w.element,P,{diffIdentityProvider:g,diffDepth:m.depth-w.depth})}isCompressionEnabled(){return this.enabled}setCompressionEnabled(s){if(s===this.enabled)return;this.enabled=s;const o=this.model.getNode().children,g=S.Iterable.map(o,b),h=S.Iterable.map(g,s?_:p);this._setChildren(null,h,{diffIdentityProvider:this.identityProvider,diffDepth:1/0})}_setChildren(s,l,o){const g=new Set,h=C=>{for(const w of C.element.elements)g.add(w),this.nodes.set(w,C.element)},m=C=>{for(const w of C.element.elements)g.has(w)||this.nodes.delete(w)};this.model.setChildren(s,l,{...o,onDidCreateNode:h,onDidDeleteNode:m})}has(s){return this.nodes.has(s)}getListIndex(s){const l=this.getCompressedNode(s);return this.model.getListIndex(l)}getListRenderCount(s){const l=this.getCompressedNode(s);return this.model.getListRenderCount(l)}getNode(s){if(typeof s>\"u\")return this.model.getNode();const l=this.getCompressedNode(s);return this.model.getNode(l)}getNodeLocation(s){const l=this.model.getNodeLocation(s);return l===null?null:l.elements[l.elements.length-1]}getParentNodeLocation(s){const l=this.getCompressedNode(s),o=this.model.getParentNodeLocation(l);return o===null?null:o.elements[o.elements.length-1]}getFirstElementChild(s){const l=this.getCompressedNode(s);return this.model.getFirstElementChild(l)}isCollapsible(s){const l=this.getCompressedNode(s);return this.model.isCollapsible(l)}setCollapsible(s,l){const o=this.getCompressedNode(s);return this.model.setCollapsible(o,l)}isCollapsed(s){const l=this.getCompressedNode(s);return this.model.isCollapsed(l)}setCollapsed(s,l,o){const g=this.getCompressedNode(s);return this.model.setCollapsed(g,l,o)}expandTo(s){const l=this.getCompressedNode(s);this.model.expandTo(l)}rerender(s){const l=this.getCompressedNode(s);this.model.rerender(l)}refilter(){this.model.refilter()}getCompressedNode(s){if(s===null)return null;const l=this.nodes.get(s);if(!l)throw new k.TreeError(this.user,`Tree element not found: ${s}`);return l}}e.CompressedObjectTreeModel=n;const t=d=>d[d.length-1];e.DefaultElementMapper=t;class r{get element(){return this.node.element===null?null:this.unwrapper(this.node.element)}get children(){return this.node.children.map(s=>new r(this.unwrapper,s))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}constructor(s,l){this.unwrapper=s,this.node=l}}function u(d,s){return{splice(l,o,g){s.splice(l,o,g.map(h=>d.map(h)))},updateElementHeight(l,o){s.updateElementHeight(l,o)}}}function f(d,s){return{...s,identityProvider:s.identityProvider&&{getId(l){return s.identityProvider.getId(d(l))}},sorter:s.sorter&&{compare(l,o){return s.sorter.compare(l.elements[0],o.elements[0])}},filter:s.filter&&{filter(l,o){return s.filter.filter(d(l),o)}}}}class c{get onDidSplice(){return E.Event.map(this.model.onDidSplice,({insertedNodes:s,deletedNodes:l})=>({insertedNodes:s.map(o=>this.nodeMapper.map(o)),deletedNodes:l.map(o=>this.nodeMapper.map(o))}))}get onDidChangeCollapseState(){return E.Event.map(this.model.onDidChangeCollapseState,({node:s,deep:l})=>({node:this.nodeMapper.map(s),deep:l}))}get onDidChangeRenderNodeCount(){return E.Event.map(this.model.onDidChangeRenderNodeCount,s=>this.nodeMapper.map(s))}constructor(s,l,o={}){this.rootRef=null,this.elementMapper=o.elementMapper||e.DefaultElementMapper;const g=h=>this.elementMapper(h.elements);this.nodeMapper=new k.WeakMapper(h=>new r(g,h)),this.model=new n(s,u(this.nodeMapper,l),f(g,o))}setChildren(s,l=S.Iterable.empty(),o={}){this.model.setChildren(s,l,o)}isCompressionEnabled(){return this.model.isCompressionEnabled()}setCompressionEnabled(s){this.model.setCompressionEnabled(s)}has(s){return this.model.has(s)}getListIndex(s){return this.model.getListIndex(s)}getListRenderCount(s){return this.model.getListRenderCount(s)}getNode(s){return this.nodeMapper.map(this.model.getNode(s))}getNodeLocation(s){return s.element}getParentNodeLocation(s){return this.model.getParentNodeLocation(s)}getFirstElementChild(s){const l=this.model.getFirstElementChild(s);return l===null||typeof l>\"u\"?l:this.elementMapper(l.elements)}isCollapsible(s){return this.model.isCollapsible(s)}setCollapsible(s,l){return this.model.setCollapsible(s,l)}isCollapsed(s){return this.model.isCollapsed(s)}setCollapsed(s,l,o){return this.model.setCollapsed(s,l,o)}expandTo(s){return this.model.expandTo(s)}rerender(s){return this.model.rerender(s)}refilter(){return this.model.refilter()}getCompressedTreeNode(s=null){return this.model.getNode(s)}}e.CompressibleObjectTreeModel=c}),define(se[314],oe([1,0,17]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.platform=e.env=e.cwd=void 0;let k;const y=globalThis.vscode;if(typeof y<\"u\"&&typeof y.process<\"u\"){const E=y.process;k={get platform(){return E.platform},get arch(){return E.arch},get env(){return E.env},cwd(){return E.cwd()}}}else typeof process<\"u\"?k={get platform(){return process.platform},get arch(){return process.arch},get env(){return process.env},cwd(){return process.env.VSCODE_CWD||process.cwd()}}:k={get platform(){return L.isWindows?\"win32\":L.isMacintosh?\"darwin\":\"linux\"},get arch(){},get env(){return{}},cwd(){return\"/\"}};e.cwd=k.cwd,e.env=k.env,e.platform=k.platform}),define(se[585],oe([1,0,314]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.registerHotReloadHandler=e.isHotReloadEnabled=void 0;function k(){return L.env&&!!L.env.VSCODE_DEV}e.isHotReloadEnabled=k;function y(p){if(k()){const _=E();return _.add(p),{dispose(){_.delete(p)}}}else return{dispose(){}}}e.registerHotReloadHandler=y;function E(){S||(S=new Set);const p=globalThis;return p.$hotReload_applyNewExports||(p.$hotReload_applyNewExports=_=>{for(const v of S){const b=v(_);if(b)return b}}),S}let S;k()&&y(({oldExports:p,newSrc:_})=>{if(_.indexOf(\"/* hot-reload:patch-prototype-methods */\")!==-1)return v=>{var b,a;for(const i in v){const n=v[i];if(console.log(`[hot-reload] Patching prototype methods of '${i}'`,{exportedItem:n}),typeof n==\"function\"&&n.prototype){const t=p[i];if(t){for(const r of Object.getOwnPropertyNames(n.prototype)){const u=Object.getOwnPropertyDescriptor(n.prototype,r),f=Object.getOwnPropertyDescriptor(t.prototype,r);((b=u?.value)===null||b===void 0?void 0:b.toString())!==((a=f?.value)===null||a===void 0?void 0:a.toString())&&console.log(`[hot-reload] Patching prototype method '${i}.${r}'`),Object.defineProperty(t.prototype,r,u)}v[i]=t}}}return!0}})}),define(se[95],oe([1,0,314]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sep=e.extname=e.basename=e.dirname=e.relative=e.resolve=e.normalize=e.posix=e.win32=void 0;const k=65,y=97,E=90,S=122,p=46,_=47,v=92,b=58,a=63;class i extends Error{constructor(g,h,m){let C;typeof h==\"string\"&&h.indexOf(\"not \")===0?(C=\"must not be\",h=h.replace(/^not /,\"\")):C=\"must be\";const w=g.indexOf(\".\")!==-1?\"property\":\"argument\";let D=`The \"${g}\" ${w} ${C} of type ${h}`;D+=`. Received type ${typeof m}`,super(D),this.code=\"ERR_INVALID_ARG_TYPE\"}}function n(o,g){if(o===null||typeof o!=\"object\")throw new i(g,\"Object\",o)}function t(o,g){if(typeof o!=\"string\")throw new i(g,\"string\",o)}const r=L.platform===\"win32\";function u(o){return o===_||o===v}function f(o){return o===_}function c(o){return o>=k&&o<=E||o>=y&&o<=S}function d(o,g,h,m){let C=\"\",w=0,D=-1,I=0,T=0;for(let A=0;A<=o.length;++A){if(A<o.length)T=o.charCodeAt(A);else{if(m(T))break;T=_}if(m(T)){if(!(D===A-1||I===1))if(I===2){if(C.length<2||w!==2||C.charCodeAt(C.length-1)!==p||C.charCodeAt(C.length-2)!==p){if(C.length>2){const P=C.lastIndexOf(h);P===-1?(C=\"\",w=0):(C=C.slice(0,P),w=C.length-1-C.lastIndexOf(h)),D=A,I=0;continue}else if(C.length!==0){C=\"\",w=0,D=A,I=0;continue}}g&&(C+=C.length>0?`${h}..`:\"..\",w=2)}else C.length>0?C+=`${h}${o.slice(D+1,A)}`:C=o.slice(D+1,A),w=A-D-1;D=A,I=0}else T===p&&I!==-1?++I:I=-1}return C}function s(o,g){n(g,\"pathObject\");const h=g.dir||g.root,m=g.base||`${g.name||\"\"}${g.ext||\"\"}`;return h?h===g.root?`${h}${m}`:`${h}${o}${m}`:m}e.win32={resolve(...o){let g=\"\",h=\"\",m=!1;for(let C=o.length-1;C>=-1;C--){let w;if(C>=0){if(w=o[C],t(w,\"path\"),w.length===0)continue}else g.length===0?w=L.cwd():(w=L.env[`=${g}`]||L.cwd(),(w===void 0||w.slice(0,2).toLowerCase()!==g.toLowerCase()&&w.charCodeAt(2)===v)&&(w=`${g}\\\\`));const D=w.length;let I=0,T=\"\",A=!1;const P=w.charCodeAt(0);if(D===1)u(P)&&(I=1,A=!0);else if(u(P))if(A=!0,u(w.charCodeAt(1))){let N=2,M=N;for(;N<D&&!u(w.charCodeAt(N));)N++;if(N<D&&N!==M){const R=w.slice(M,N);for(M=N;N<D&&u(w.charCodeAt(N));)N++;if(N<D&&N!==M){for(M=N;N<D&&!u(w.charCodeAt(N));)N++;(N===D||N!==M)&&(T=`\\\\\\\\${R}\\\\${w.slice(M,N)}`,I=N)}}}else I=1;else c(P)&&w.charCodeAt(1)===b&&(T=w.slice(0,2),I=2,D>2&&u(w.charCodeAt(2))&&(A=!0,I=3));if(T.length>0)if(g.length>0){if(T.toLowerCase()!==g.toLowerCase())continue}else g=T;if(m){if(g.length>0)break}else if(h=`${w.slice(I)}\\\\${h}`,m=A,A&&g.length>0)break}return h=d(h,!m,\"\\\\\",u),m?`${g}\\\\${h}`:`${g}${h}`||\".\"},normalize(o){t(o,\"path\");const g=o.length;if(g===0)return\".\";let h=0,m,C=!1;const w=o.charCodeAt(0);if(g===1)return f(w)?\"\\\\\":o;if(u(w))if(C=!0,u(o.charCodeAt(1))){let I=2,T=I;for(;I<g&&!u(o.charCodeAt(I));)I++;if(I<g&&I!==T){const A=o.slice(T,I);for(T=I;I<g&&u(o.charCodeAt(I));)I++;if(I<g&&I!==T){for(T=I;I<g&&!u(o.charCodeAt(I));)I++;if(I===g)return`\\\\\\\\${A}\\\\${o.slice(T)}\\\\`;I!==T&&(m=`\\\\\\\\${A}\\\\${o.slice(T,I)}`,h=I)}}}else h=1;else c(w)&&o.charCodeAt(1)===b&&(m=o.slice(0,2),h=2,g>2&&u(o.charCodeAt(2))&&(C=!0,h=3));let D=h<g?d(o.slice(h),!C,\"\\\\\",u):\"\";return D.length===0&&!C&&(D=\".\"),D.length>0&&u(o.charCodeAt(g-1))&&(D+=\"\\\\\"),m===void 0?C?`\\\\${D}`:D:C?`${m}\\\\${D}`:`${m}${D}`},isAbsolute(o){t(o,\"path\");const g=o.length;if(g===0)return!1;const h=o.charCodeAt(0);return u(h)||g>2&&c(h)&&o.charCodeAt(1)===b&&u(o.charCodeAt(2))},join(...o){if(o.length===0)return\".\";let g,h;for(let w=0;w<o.length;++w){const D=o[w];t(D,\"path\"),D.length>0&&(g===void 0?g=h=D:g+=`\\\\${D}`)}if(g===void 0)return\".\";let m=!0,C=0;if(typeof h==\"string\"&&u(h.charCodeAt(0))){++C;const w=h.length;w>1&&u(h.charCodeAt(1))&&(++C,w>2&&(u(h.charCodeAt(2))?++C:m=!1))}if(m){for(;C<g.length&&u(g.charCodeAt(C));)C++;C>=2&&(g=`\\\\${g.slice(C)}`)}return e.win32.normalize(g)},relative(o,g){if(t(o,\"from\"),t(g,\"to\"),o===g)return\"\";const h=e.win32.resolve(o),m=e.win32.resolve(g);if(h===m||(o=h.toLowerCase(),g=m.toLowerCase(),o===g))return\"\";let C=0;for(;C<o.length&&o.charCodeAt(C)===v;)C++;let w=o.length;for(;w-1>C&&o.charCodeAt(w-1)===v;)w--;const D=w-C;let I=0;for(;I<g.length&&g.charCodeAt(I)===v;)I++;let T=g.length;for(;T-1>I&&g.charCodeAt(T-1)===v;)T--;const A=T-I,P=D<A?D:A;let N=-1,M=0;for(;M<P;M++){const x=o.charCodeAt(C+M);if(x!==g.charCodeAt(I+M))break;x===v&&(N=M)}if(M!==P){if(N===-1)return m}else{if(A>P){if(g.charCodeAt(I+M)===v)return m.slice(I+M+1);if(M===2)return m.slice(I+M)}D>P&&(o.charCodeAt(C+M)===v?N=M:M===2&&(N=3)),N===-1&&(N=0)}let R=\"\";for(M=C+N+1;M<=w;++M)(M===w||o.charCodeAt(M)===v)&&(R+=R.length===0?\"..\":\"\\\\..\");return I+=N,R.length>0?`${R}${m.slice(I,T)}`:(m.charCodeAt(I)===v&&++I,m.slice(I,T))},toNamespacedPath(o){if(typeof o!=\"string\"||o.length===0)return o;const g=e.win32.resolve(o);if(g.length<=2)return o;if(g.charCodeAt(0)===v){if(g.charCodeAt(1)===v){const h=g.charCodeAt(2);if(h!==a&&h!==p)return`\\\\\\\\?\\\\UNC\\\\${g.slice(2)}`}}else if(c(g.charCodeAt(0))&&g.charCodeAt(1)===b&&g.charCodeAt(2)===v)return`\\\\\\\\?\\\\${g}`;return o},dirname(o){t(o,\"path\");const g=o.length;if(g===0)return\".\";let h=-1,m=0;const C=o.charCodeAt(0);if(g===1)return u(C)?o:\".\";if(u(C)){if(h=m=1,u(o.charCodeAt(1))){let I=2,T=I;for(;I<g&&!u(o.charCodeAt(I));)I++;if(I<g&&I!==T){for(T=I;I<g&&u(o.charCodeAt(I));)I++;if(I<g&&I!==T){for(T=I;I<g&&!u(o.charCodeAt(I));)I++;if(I===g)return o;I!==T&&(h=m=I+1)}}}}else c(C)&&o.charCodeAt(1)===b&&(h=g>2&&u(o.charCodeAt(2))?3:2,m=h);let w=-1,D=!0;for(let I=g-1;I>=m;--I)if(u(o.charCodeAt(I))){if(!D){w=I;break}}else D=!1;if(w===-1){if(h===-1)return\".\";w=h}return o.slice(0,w)},basename(o,g){g!==void 0&&t(g,\"ext\"),t(o,\"path\");let h=0,m=-1,C=!0,w;if(o.length>=2&&c(o.charCodeAt(0))&&o.charCodeAt(1)===b&&(h=2),g!==void 0&&g.length>0&&g.length<=o.length){if(g===o)return\"\";let D=g.length-1,I=-1;for(w=o.length-1;w>=h;--w){const T=o.charCodeAt(w);if(u(T)){if(!C){h=w+1;break}}else I===-1&&(C=!1,I=w+1),D>=0&&(T===g.charCodeAt(D)?--D===-1&&(m=w):(D=-1,m=I))}return h===m?m=I:m===-1&&(m=o.length),o.slice(h,m)}for(w=o.length-1;w>=h;--w)if(u(o.charCodeAt(w))){if(!C){h=w+1;break}}else m===-1&&(C=!1,m=w+1);return m===-1?\"\":o.slice(h,m)},extname(o){t(o,\"path\");let g=0,h=-1,m=0,C=-1,w=!0,D=0;o.length>=2&&o.charCodeAt(1)===b&&c(o.charCodeAt(0))&&(g=m=2);for(let I=o.length-1;I>=g;--I){const T=o.charCodeAt(I);if(u(T)){if(!w){m=I+1;break}continue}C===-1&&(w=!1,C=I+1),T===p?h===-1?h=I:D!==1&&(D=1):h!==-1&&(D=-1)}return h===-1||C===-1||D===0||D===1&&h===C-1&&h===m+1?\"\":o.slice(h,C)},format:s.bind(null,\"\\\\\"),parse(o){t(o,\"path\");const g={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(o.length===0)return g;const h=o.length;let m=0,C=o.charCodeAt(0);if(h===1)return u(C)?(g.root=g.dir=o,g):(g.base=g.name=o,g);if(u(C)){if(m=1,u(o.charCodeAt(1))){let N=2,M=N;for(;N<h&&!u(o.charCodeAt(N));)N++;if(N<h&&N!==M){for(M=N;N<h&&u(o.charCodeAt(N));)N++;if(N<h&&N!==M){for(M=N;N<h&&!u(o.charCodeAt(N));)N++;N===h?m=N:N!==M&&(m=N+1)}}}}else if(c(C)&&o.charCodeAt(1)===b){if(h<=2)return g.root=g.dir=o,g;if(m=2,u(o.charCodeAt(2))){if(h===3)return g.root=g.dir=o,g;m=3}}m>0&&(g.root=o.slice(0,m));let w=-1,D=m,I=-1,T=!0,A=o.length-1,P=0;for(;A>=m;--A){if(C=o.charCodeAt(A),u(C)){if(!T){D=A+1;break}continue}I===-1&&(T=!1,I=A+1),C===p?w===-1?w=A:P!==1&&(P=1):w!==-1&&(P=-1)}return I!==-1&&(w===-1||P===0||P===1&&w===I-1&&w===D+1?g.base=g.name=o.slice(D,I):(g.name=o.slice(D,w),g.base=o.slice(D,I),g.ext=o.slice(w,I))),D>0&&D!==m?g.dir=o.slice(0,D-1):g.dir=g.root,g},sep:\"\\\\\",delimiter:\";\",win32:null,posix:null};const l=(()=>{if(r){const o=/\\\\/g;return()=>{const g=L.cwd().replace(o,\"/\");return g.slice(g.indexOf(\"/\"))}}return()=>L.cwd()})();e.posix={resolve(...o){let g=\"\",h=!1;for(let m=o.length-1;m>=-1&&!h;m--){const C=m>=0?o[m]:l();t(C,\"path\"),C.length!==0&&(g=`${C}/${g}`,h=C.charCodeAt(0)===_)}return g=d(g,!h,\"/\",f),h?`/${g}`:g.length>0?g:\".\"},normalize(o){if(t(o,\"path\"),o.length===0)return\".\";const g=o.charCodeAt(0)===_,h=o.charCodeAt(o.length-1)===_;return o=d(o,!g,\"/\",f),o.length===0?g?\"/\":h?\"./\":\".\":(h&&(o+=\"/\"),g?`/${o}`:o)},isAbsolute(o){return t(o,\"path\"),o.length>0&&o.charCodeAt(0)===_},join(...o){if(o.length===0)return\".\";let g;for(let h=0;h<o.length;++h){const m=o[h];t(m,\"path\"),m.length>0&&(g===void 0?g=m:g+=`/${m}`)}return g===void 0?\".\":e.posix.normalize(g)},relative(o,g){if(t(o,\"from\"),t(g,\"to\"),o===g||(o=e.posix.resolve(o),g=e.posix.resolve(g),o===g))return\"\";const h=1,m=o.length,C=m-h,w=1,D=g.length-w,I=C<D?C:D;let T=-1,A=0;for(;A<I;A++){const N=o.charCodeAt(h+A);if(N!==g.charCodeAt(w+A))break;N===_&&(T=A)}if(A===I)if(D>I){if(g.charCodeAt(w+A)===_)return g.slice(w+A+1);if(A===0)return g.slice(w+A)}else C>I&&(o.charCodeAt(h+A)===_?T=A:A===0&&(T=0));let P=\"\";for(A=h+T+1;A<=m;++A)(A===m||o.charCodeAt(A)===_)&&(P+=P.length===0?\"..\":\"/..\");return`${P}${g.slice(w+T)}`},toNamespacedPath(o){return o},dirname(o){if(t(o,\"path\"),o.length===0)return\".\";const g=o.charCodeAt(0)===_;let h=-1,m=!0;for(let C=o.length-1;C>=1;--C)if(o.charCodeAt(C)===_){if(!m){h=C;break}}else m=!1;return h===-1?g?\"/\":\".\":g&&h===1?\"//\":o.slice(0,h)},basename(o,g){g!==void 0&&t(g,\"ext\"),t(o,\"path\");let h=0,m=-1,C=!0,w;if(g!==void 0&&g.length>0&&g.length<=o.length){if(g===o)return\"\";let D=g.length-1,I=-1;for(w=o.length-1;w>=0;--w){const T=o.charCodeAt(w);if(T===_){if(!C){h=w+1;break}}else I===-1&&(C=!1,I=w+1),D>=0&&(T===g.charCodeAt(D)?--D===-1&&(m=w):(D=-1,m=I))}return h===m?m=I:m===-1&&(m=o.length),o.slice(h,m)}for(w=o.length-1;w>=0;--w)if(o.charCodeAt(w)===_){if(!C){h=w+1;break}}else m===-1&&(C=!1,m=w+1);return m===-1?\"\":o.slice(h,m)},extname(o){t(o,\"path\");let g=-1,h=0,m=-1,C=!0,w=0;for(let D=o.length-1;D>=0;--D){const I=o.charCodeAt(D);if(I===_){if(!C){h=D+1;break}continue}m===-1&&(C=!1,m=D+1),I===p?g===-1?g=D:w!==1&&(w=1):g!==-1&&(w=-1)}return g===-1||m===-1||w===0||w===1&&g===m-1&&g===h+1?\"\":o.slice(g,m)},format:s.bind(null,\"/\"),parse(o){t(o,\"path\");const g={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(o.length===0)return g;const h=o.charCodeAt(0)===_;let m;h?(g.root=\"/\",m=1):m=0;let C=-1,w=0,D=-1,I=!0,T=o.length-1,A=0;for(;T>=m;--T){const P=o.charCodeAt(T);if(P===_){if(!I){w=T+1;break}continue}D===-1&&(I=!1,D=T+1),P===p?C===-1?C=T:A!==1&&(A=1):C!==-1&&(A=-1)}if(D!==-1){const P=w===0&&h?1:w;C===-1||A===0||A===1&&C===D-1&&C===w+1?g.base=g.name=o.slice(P,D):(g.name=o.slice(P,C),g.base=o.slice(P,D),g.ext=o.slice(C,D))}return w>0?g.dir=o.slice(0,w-1):h&&(g.dir=\"/\"),g},sep:\"/\",delimiter:\":\",win32:null,posix:null},e.posix.win32=e.win32.win32=e.win32,e.posix.posix=e.win32.posix=e.posix,e.normalize=r?e.win32.normalize:e.posix.normalize,e.resolve=r?e.win32.resolve:e.posix.resolve,e.relative=r?e.win32.relative:e.posix.relative,e.dirname=r?e.win32.dirname:e.posix.dirname,e.basename=r?e.win32.basename:e.posix.basename,e.extname=r?e.win32.extname:e.posix.extname,e.sep=r?e.win32.sep:e.posix.sep}),define(se[222],oe([1,0,95,17,11]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.hasDriveLetter=e.isWindowsDriveLetter=e.isEqualOrParent=e.getRoot=e.toPosixPath=e.toSlashes=e.isPathSeparator=void 0;function E(i){return i===47||i===92}e.isPathSeparator=E;function S(i){return i.replace(/[\\\\/]/g,L.posix.sep)}e.toSlashes=S;function p(i){return i.indexOf(\"/\")===-1&&(i=S(i)),/^[a-zA-Z]:(\\/|$)/.test(i)&&(i=\"/\"+i),i}e.toPosixPath=p;function _(i,n=L.posix.sep){if(!i)return\"\";const t=i.length,r=i.charCodeAt(0);if(E(r)){if(E(i.charCodeAt(1))&&!E(i.charCodeAt(2))){let f=3;const c=f;for(;f<t&&!E(i.charCodeAt(f));f++);if(c!==f&&!E(i.charCodeAt(f+1))){for(f+=1;f<t;f++)if(E(i.charCodeAt(f)))return i.slice(0,f+1).replace(/[\\\\/]/g,n)}}return n}else if(b(r)&&i.charCodeAt(1)===58)return E(i.charCodeAt(2))?i.slice(0,2)+n:i.slice(0,2);let u=i.indexOf(\"://\");if(u!==-1){for(u+=3;u<t;u++)if(E(i.charCodeAt(u)))return i.slice(0,u+1)}return\"\"}e.getRoot=_;function v(i,n,t,r=L.sep){if(i===n)return!0;if(!i||!n||n.length>i.length)return!1;if(t){if(!(0,y.startsWithIgnoreCase)(i,n))return!1;if(n.length===i.length)return!0;let f=n.length;return n.charAt(n.length-1)===r&&f--,i.charAt(f)===r}return n.charAt(n.length-1)!==r&&(n+=r),i.indexOf(n)===0}e.isEqualOrParent=v;function b(i){return i>=65&&i<=90||i>=97&&i<=122}e.isWindowsDriveLetter=b;function a(i,n=k.isWindows){return n?b(i.charCodeAt(0))&&i.charCodeAt(1)===58:!1}e.hasDriveLetter=a}),define(se[586],oe([1,0,71,95,17,11]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.pieceToQuery=e.prepareQuery=e.scoreFuzzy2=void 0;const S=[void 0,[]];function p(c,d,s=0,l=0){const o=d;return o.values&&o.values.length>1?_(c,o.values,s,l):v(c,d,s,l)}e.scoreFuzzy2=p;function _(c,d,s,l){let o=0;const g=[];for(const h of d){const[m,C]=v(c,h,s,l);if(typeof m!=\"number\")return S;o+=m,g.push(...C)}return[o,a(g)]}function v(c,d,s,l){const o=(0,L.fuzzyScore)(d.original,d.originalLowercase,s,c,c.toLowerCase(),l,{firstMatchCanBeWeak:!0,boostFullMatch:!0});return o?[o[0],(0,L.createMatches)(o)]:S}const b=Object.freeze({score:0});function a(c){const d=c.sort((o,g)=>o.start-g.start),s=[];let l;for(const o of d)!l||!i(l,o)?(l=o,s.push(o)):(l.start=Math.min(l.start,o.start),l.end=Math.max(l.end,o.end));return s}function i(c,d){return!(c.end<d.start||d.end<c.start)}function n(c){return c.startsWith('\"')&&c.endsWith('\"')}const t=\" \";function r(c){typeof c!=\"string\"&&(c=\"\");const d=c.toLowerCase(),{pathNormalized:s,normalized:l,normalizedLowercase:o}=u(c),g=s.indexOf(k.sep)>=0,h=n(c);let m;const C=c.split(t);if(C.length>1)for(const w of C){const D=n(w),{pathNormalized:I,normalized:T,normalizedLowercase:A}=u(w);T&&(m||(m=[]),m.push({original:w,originalLowercase:w.toLowerCase(),pathNormalized:I,normalized:T,normalizedLowercase:A,expectContiguousMatch:D}))}return{original:c,originalLowercase:d,pathNormalized:s,normalized:l,normalizedLowercase:o,values:m,containsPathSeparator:g,expectContiguousMatch:h}}e.prepareQuery=r;function u(c){let d;y.isWindows?d=c.replace(/\\//g,k.sep):d=c.replace(/\\\\/g,k.sep);const s=(0,E.stripWildcards)(d).replace(/\\s|\"/g,\"\");return{pathNormalized:d,normalized:s,normalizedLowercase:s.toLowerCase()}}function f(c){return Array.isArray(c)?r(c.map(d=>d.original).join(t)):r(c.original)}e.pieceToQuery=f}),define(se[315],oe([1,0,14,222,53,95,17,11]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isRelativePattern=e.parse=e.match=e.splitGlobAware=e.GLOB_SPLIT=e.GLOBSTAR=void 0,e.GLOBSTAR=\"**\",e.GLOB_SPLIT=\"/\";const _=\"[/\\\\\\\\]\",v=\"[^/\\\\\\\\]\",b=/\\//g;function a(O,B){switch(O){case 0:return\"\";case 1:return`${v}*?`;default:return`(?:${_}|${v}+${_}${B?`|${_}${v}+`:\"\"})*?`}}function i(O,B){if(!O)return[];const W=[];let V=!1,K=!1,F=\"\";for(const q of O){switch(q){case B:if(!V&&!K){W.push(F),F=\"\";continue}break;case\"{\":V=!0;break;case\"}\":V=!1;break;case\"[\":K=!0;break;case\"]\":K=!1;break}F+=q}return F&&W.push(F),W}e.splitGlobAware=i;function n(O){if(!O)return\"\";let B=\"\";const W=i(O,e.GLOB_SPLIT);if(W.every(V=>V===e.GLOBSTAR))B=\".*\";else{let V=!1;W.forEach((K,F)=>{if(K===e.GLOBSTAR){if(V)return;B+=a(2,F===W.length-1)}else{let q=!1,ie=\"\",ae=!1,ne=\"\";for(const $ of K){if($!==\"}\"&&q){ie+=$;continue}if(ae&&($!==\"]\"||!ne)){let J;$===\"-\"?J=$:($===\"^\"||$===\"!\")&&!ne?J=\"^\":$===e.GLOB_SPLIT?J=\"\":J=(0,p.escapeRegExpCharacters)($),ne+=J;continue}switch($){case\"{\":q=!0;continue;case\"[\":ae=!0;continue;case\"}\":{const Q=`(?:${i(ie,\",\").map(re=>n(re)).join(\"|\")})`;B+=Q,q=!1,ie=\"\";break}case\"]\":{B+=\"[\"+ne+\"]\",ae=!1,ne=\"\";break}case\"?\":B+=v;continue;case\"*\":B+=a(1);continue;default:B+=(0,p.escapeRegExpCharacters)($)}}F<W.length-1&&(W[F+1]!==e.GLOBSTAR||F+2<W.length)&&(B+=_)}V=K===e.GLOBSTAR})}return B}const t=/^\\*\\*\\/\\*\\.[\\w\\.-]+$/,r=/^\\*\\*\\/([\\w\\.-]+)\\/?$/,u=/^{\\*\\*\\/\\*?[\\w\\.-]+\\/?(,\\*\\*\\/\\*?[\\w\\.-]+\\/?)*}$/,f=/^{\\*\\*\\/\\*?[\\w\\.-]+(\\/(\\*\\*)?)?(,\\*\\*\\/\\*?[\\w\\.-]+(\\/(\\*\\*)?)?)*}$/,c=/^\\*\\*((\\/[\\w\\.-]+)+)\\/?$/,d=/^([\\w\\.-]+(\\/[\\w\\.-]+)*)\\/?$/,s=new y.LRUCache(1e4),l=function(){return!1},o=function(){return null};function g(O,B){if(!O)return o;let W;typeof O!=\"string\"?W=O.pattern:W=O,W=W.trim();const V=`${W}_${!!B.trimForExclusions}`;let K=s.get(V);if(K)return h(K,O);let F;return t.test(W)?K=C(W.substr(4),W):(F=r.exec(m(W,B)))?K=w(F[1],W):(B.trimForExclusions?f:u).test(W)?K=D(W,B):(F=c.exec(m(W,B)))?K=I(F[1].substr(1),W,!0):(F=d.exec(m(W,B)))?K=I(F[1],W,!1):K=T(W),s.set(V,K),h(K,O)}function h(O,B){if(typeof B==\"string\")return O;const W=function(V,K){return(0,k.isEqualOrParent)(V,B.base,!S.isLinux)?O((0,p.ltrim)(V.substr(B.base.length),E.sep),K):null};return W.allBasenames=O.allBasenames,W.allPaths=O.allPaths,W.basenames=O.basenames,W.patterns=O.patterns,W}function m(O,B){return B.trimForExclusions&&O.endsWith(\"/**\")?O.substr(0,O.length-2):O}function C(O,B){return function(W,V){return typeof W==\"string\"&&W.endsWith(O)?B:null}}function w(O,B){const W=`/${O}`,V=`\\\\${O}`,K=function(q,ie){return typeof q!=\"string\"?null:ie?ie===O?B:null:q===O||q.endsWith(W)||q.endsWith(V)?B:null},F=[O];return K.basenames=F,K.patterns=[B],K.allBasenames=F,K}function D(O,B){const W=x(O.slice(1,-1).split(\",\").map(ie=>g(ie,B)).filter(ie=>ie!==o),O),V=W.length;if(!V)return o;if(V===1)return W[0];const K=function(ie,ae){for(let ne=0,$=W.length;ne<$;ne++)if(W[ne](ie,ae))return O;return null},F=W.find(ie=>!!ie.allBasenames);F&&(K.allBasenames=F.allBasenames);const q=W.reduce((ie,ae)=>ae.allPaths?ie.concat(ae.allPaths):ie,[]);return q.length&&(K.allPaths=q),K}function I(O,B,W){const V=E.sep===E.posix.sep,K=V?O:O.replace(b,E.sep),F=E.sep+K,q=E.posix.sep+O;let ie;return W?ie=function(ae,ne){return typeof ae==\"string\"&&(ae===K||ae.endsWith(F)||!V&&(ae===O||ae.endsWith(q)))?B:null}:ie=function(ae,ne){return typeof ae==\"string\"&&(ae===K||!V&&ae===O)?B:null},ie.allPaths=[(W?\"*/\":\"./\")+O],ie}function T(O){try{const B=new RegExp(`^${n(O)}$`);return function(W){return B.lastIndex=0,typeof W==\"string\"&&B.test(W)?O:null}}catch{return o}}function A(O,B,W){return!O||typeof B!=\"string\"?!1:P(O)(B,void 0,W)}e.match=A;function P(O,B={}){if(!O)return l;if(typeof O==\"string\"||N(O)){const W=g(O,B);if(W===o)return l;const V=function(K,F){return!!W(K,F)};return W.allBasenames&&(V.allBasenames=W.allBasenames),W.allPaths&&(V.allPaths=W.allPaths),V}return M(O,B)}e.parse=P;function N(O){const B=O;return B?typeof B.base==\"string\"&&typeof B.pattern==\"string\":!1}e.isRelativePattern=N;function M(O,B){const W=x(Object.getOwnPropertyNames(O).map(ie=>R(ie,O[ie],B)).filter(ie=>ie!==o)),V=W.length;if(!V)return o;if(!W.some(ie=>!!ie.requiresSiblings)){if(V===1)return W[0];const ie=function($,J){let Q;for(let re=0,de=W.length;re<de;re++){const he=W[re]($,J);if(typeof he==\"string\")return he;(0,L.isThenable)(he)&&(Q||(Q=[]),Q.push(he))}return Q?(async()=>{for(const re of Q){const de=await re;if(typeof de==\"string\")return de}return null})():null},ae=W.find($=>!!$.allBasenames);ae&&(ie.allBasenames=ae.allBasenames);const ne=W.reduce(($,J)=>J.allPaths?$.concat(J.allPaths):$,[]);return ne.length&&(ie.allPaths=ne),ie}const K=function(ie,ae,ne){let $,J;for(let Q=0,re=W.length;Q<re;Q++){const de=W[Q];de.requiresSiblings&&ne&&(ae||(ae=(0,E.basename)(ie)),$||($=ae.substr(0,ae.length-(0,E.extname)(ie).length)));const he=de(ie,ae,$,ne);if(typeof he==\"string\")return he;(0,L.isThenable)(he)&&(J||(J=[]),J.push(he))}return J?(async()=>{for(const Q of J){const re=await Q;if(typeof re==\"string\")return re}return null})():null},F=W.find(ie=>!!ie.allBasenames);F&&(K.allBasenames=F.allBasenames);const q=W.reduce((ie,ae)=>ae.allPaths?ie.concat(ae.allPaths):ie,[]);return q.length&&(K.allPaths=q),K}function R(O,B,W){if(B===!1)return o;const V=g(O,W);if(V===o)return o;if(typeof B==\"boolean\")return V;if(B){const K=B.when;if(typeof K==\"string\"){const F=(q,ie,ae,ne)=>{if(!ne||!V(q,ie))return null;const $=K.replace(\"$(basename)\",()=>ae),J=ne($);return(0,L.isThenable)(J)?J.then(Q=>Q?O:null):J?O:null};return F.requiresSiblings=!0,F}}return V}function x(O,B){const W=O.filter(ie=>!!ie.basenames);if(W.length<2)return O;const V=W.reduce((ie,ae)=>{const ne=ae.basenames;return ne?ie.concat(ne):ie},[]);let K;if(B){K=[];for(let ie=0,ae=V.length;ie<ae;ie++)K.push(B)}else K=W.reduce((ie,ae)=>{const ne=ae.patterns;return ne?ie.concat(ne):ie},[]);const F=function(ie,ae){if(typeof ie!=\"string\")return null;if(!ae){let $;for($=ie.length;$>0;$--){const J=ie.charCodeAt($-1);if(J===47||J===92)break}ae=ie.substr($)}const ne=V.indexOf(ae);return ne!==-1?K[ne]:null};F.basenames=V,F.patterns=K,F.allBasenames=V;const q=O.filter(ie=>!ie.basenames);return q.push(F),q}}),define(se[587],oe([1,0,222,17]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.normalizeDriveLetter=void 0;function y(S,p=k.isWindows){return(0,L.hasDriveLetter)(S,p)?S.charAt(0).toUpperCase()+S.slice(1):S}e.normalizeDriveLetter=y;let E=Object.create(null)}),define(se[22],oe([1,0,95,17]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.uriToFsPath=e.URI=void 0;const y=/^\\w[\\w\\d+.-]*$/,E=/^\\//,S=/^\\/\\//;function p(h,m){if(!h.scheme&&m)throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${h.authority}\", path: \"${h.path}\", query: \"${h.query}\", fragment: \"${h.fragment}\"}`);if(h.scheme&&!y.test(h.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(h.path){if(h.authority){if(!E.test(h.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(S.test(h.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}}function _(h,m){return!h&&!m?\"file\":h}function v(h,m){switch(h){case\"https\":case\"http\":case\"file\":m?m[0]!==a&&(m=a+m):m=a;break}return m}const b=\"\",a=\"/\",i=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;class n{static isUri(m){return m instanceof n?!0:m?typeof m.authority==\"string\"&&typeof m.fragment==\"string\"&&typeof m.path==\"string\"&&typeof m.query==\"string\"&&typeof m.scheme==\"string\"&&typeof m.fsPath==\"string\"&&typeof m.with==\"function\"&&typeof m.toString==\"function\":!1}constructor(m,C,w,D,I,T=!1){typeof m==\"object\"?(this.scheme=m.scheme||b,this.authority=m.authority||b,this.path=m.path||b,this.query=m.query||b,this.fragment=m.fragment||b):(this.scheme=_(m,T),this.authority=C||b,this.path=v(this.scheme,w||b),this.query=D||b,this.fragment=I||b,p(this,T))}get fsPath(){return d(this,!1)}with(m){if(!m)return this;let{scheme:C,authority:w,path:D,query:I,fragment:T}=m;return C===void 0?C=this.scheme:C===null&&(C=b),w===void 0?w=this.authority:w===null&&(w=b),D===void 0?D=this.path:D===null&&(D=b),I===void 0?I=this.query:I===null&&(I=b),T===void 0?T=this.fragment:T===null&&(T=b),C===this.scheme&&w===this.authority&&D===this.path&&I===this.query&&T===this.fragment?this:new r(C,w,D,I,T)}static parse(m,C=!1){const w=i.exec(m);return w?new r(w[2]||b,g(w[4]||b),g(w[5]||b),g(w[7]||b),g(w[9]||b),C):new r(b,b,b,b,b)}static file(m){let C=b;if(k.isWindows&&(m=m.replace(/\\\\/g,a)),m[0]===a&&m[1]===a){const w=m.indexOf(a,2);w===-1?(C=m.substring(2),m=a):(C=m.substring(2,w),m=m.substring(w)||a)}return new r(\"file\",C,m,b,b)}static from(m,C){return new r(m.scheme,m.authority,m.path,m.query,m.fragment,C)}static joinPath(m,...C){if(!m.path)throw new Error(\"[UriError]: cannot call joinPath on URI without path\");let w;return k.isWindows&&m.scheme===\"file\"?w=n.file(L.win32.join(d(m,!0),...C)).path:w=L.posix.join(m.path,...C),m.with({path:w})}toString(m=!1){return s(this,m)}toJSON(){return this}static revive(m){var C,w;if(m){if(m instanceof n)return m;{const D=new r(m);return D._formatted=(C=m.external)!==null&&C!==void 0?C:null,D._fsPath=m._sep===t&&(w=m.fsPath)!==null&&w!==void 0?w:null,D}}else return m}}e.URI=n;const t=k.isWindows?1:void 0;class r extends n{constructor(){super(...arguments),this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=d(this,!1)),this._fsPath}toString(m=!1){return m?s(this,!0):(this._formatted||(this._formatted=s(this,!1)),this._formatted)}toJSON(){const m={$mid:1};return this._fsPath&&(m.fsPath=this._fsPath,m._sep=t),this._formatted&&(m.external=this._formatted),this.path&&(m.path=this.path),this.scheme&&(m.scheme=this.scheme),this.authority&&(m.authority=this.authority),this.query&&(m.query=this.query),this.fragment&&(m.fragment=this.fragment),m}}const u={[58]:\"%3A\",[47]:\"%2F\",[63]:\"%3F\",[35]:\"%23\",[91]:\"%5B\",[93]:\"%5D\",[64]:\"%40\",[33]:\"%21\",[36]:\"%24\",[38]:\"%26\",[39]:\"%27\",[40]:\"%28\",[41]:\"%29\",[42]:\"%2A\",[43]:\"%2B\",[44]:\"%2C\",[59]:\"%3B\",[61]:\"%3D\",[32]:\"%20\"};function f(h,m,C){let w,D=-1;for(let I=0;I<h.length;I++){const T=h.charCodeAt(I);if(T>=97&&T<=122||T>=65&&T<=90||T>=48&&T<=57||T===45||T===46||T===95||T===126||m&&T===47||C&&T===91||C&&T===93||C&&T===58)D!==-1&&(w+=encodeURIComponent(h.substring(D,I)),D=-1),w!==void 0&&(w+=h.charAt(I));else{w===void 0&&(w=h.substr(0,I));const A=u[T];A!==void 0?(D!==-1&&(w+=encodeURIComponent(h.substring(D,I)),D=-1),w+=A):D===-1&&(D=I)}}return D!==-1&&(w+=encodeURIComponent(h.substring(D))),w!==void 0?w:h}function c(h){let m;for(let C=0;C<h.length;C++){const w=h.charCodeAt(C);w===35||w===63?(m===void 0&&(m=h.substr(0,C)),m+=u[w]):m!==void 0&&(m+=h[C])}return m!==void 0?m:h}function d(h,m){let C;return h.authority&&h.path.length>1&&h.scheme===\"file\"?C=`//${h.authority}${h.path}`:h.path.charCodeAt(0)===47&&(h.path.charCodeAt(1)>=65&&h.path.charCodeAt(1)<=90||h.path.charCodeAt(1)>=97&&h.path.charCodeAt(1)<=122)&&h.path.charCodeAt(2)===58?m?C=h.path.substr(1):C=h.path[1].toLowerCase()+h.path.substr(2):C=h.path,k.isWindows&&(C=C.replace(/\\//g,\"\\\\\")),C}e.uriToFsPath=d;function s(h,m){const C=m?c:f;let w=\"\",{scheme:D,authority:I,path:T,query:A,fragment:P}=h;if(D&&(w+=D,w+=\":\"),(I||D===\"file\")&&(w+=a,w+=a),I){let N=I.indexOf(\"@\");if(N!==-1){const M=I.substr(0,N);I=I.substr(N+1),N=M.lastIndexOf(\":\"),N===-1?w+=C(M,!1,!1):(w+=C(M.substr(0,N),!1,!1),w+=\":\",w+=C(M.substr(N+1),!1,!0)),w+=\"@\"}I=I.toLowerCase(),N=I.lastIndexOf(\":\"),N===-1?w+=C(I,!1,!0):(w+=C(I.substr(0,N),!1,!0),w+=I.substr(N))}if(T){if(T.length>=3&&T.charCodeAt(0)===47&&T.charCodeAt(2)===58){const N=T.charCodeAt(1);N>=65&&N<=90&&(T=`/${String.fromCharCode(N+32)}:${T.substr(3)}`)}else if(T.length>=2&&T.charCodeAt(1)===58){const N=T.charCodeAt(0);N>=65&&N<=90&&(T=`${String.fromCharCode(N+32)}:${T.substr(2)}`)}w+=C(T,!0,!1)}return A&&(w+=\"?\",w+=C(A,!1,!1)),P&&(w+=\"#\",w+=m?P:f(P,!1,!1)),w}function l(h){try{return decodeURIComponent(h)}catch{return h.length>3?h.substr(0,3)+l(h.substr(3)):h}}const o=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function g(h){return h.match(o)?h.replace(o,m=>l(m)):h}}),define(se[223],oe([1,0,144,22]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.revive=e.parse=e.stringify=void 0;function y(_){return JSON.stringify(_,S)}e.stringify=y;function E(_){let v=JSON.parse(_);return v=p(v),v}e.parse=E;function S(_,v){return v instanceof RegExp?{$mid:2,source:v.source,flags:v.flags}:v}function p(_,v=0){if(!_||v>200)return _;if(typeof _==\"object\"){switch(_.$mid){case 1:return k.URI.revive(_);case 2:return new RegExp(_.source,_.flags);case 17:return new Date(_.source)}if(_ instanceof L.VSBuffer||_ instanceof Uint8Array)return _;if(Array.isArray(_))for(let b=0;b<_.length;++b)_[b]=p(_[b],v+1);else for(const b in _)Object.hasOwnProperty.call(_,b)&&(_[b]=p(_[b],v+1))}return _}e.revive=p}),define(se[47],oe([1,0,12,17,11,22]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.COI=e.FileAccess=e.VSCODE_AUTHORITY=e.RemoteAuthorities=e.connectionTokenQueryName=e.matchesSomeScheme=e.matchesScheme=e.Schemas=void 0;var S;(function(i){i.inMemory=\"inmemory\",i.vscode=\"vscode\",i.internal=\"private\",i.walkThrough=\"walkThrough\",i.walkThroughSnippet=\"walkThroughSnippet\",i.http=\"http\",i.https=\"https\",i.file=\"file\",i.mailto=\"mailto\",i.untitled=\"untitled\",i.data=\"data\",i.command=\"command\",i.vscodeRemote=\"vscode-remote\",i.vscodeRemoteResource=\"vscode-remote-resource\",i.vscodeManagedRemoteResource=\"vscode-managed-remote-resource\",i.vscodeUserData=\"vscode-userdata\",i.vscodeCustomEditor=\"vscode-custom-editor\",i.vscodeNotebookCell=\"vscode-notebook-cell\",i.vscodeNotebookCellMetadata=\"vscode-notebook-cell-metadata\",i.vscodeNotebookCellOutput=\"vscode-notebook-cell-output\",i.vscodeInteractiveInput=\"vscode-interactive-input\",i.vscodeSettings=\"vscode-settings\",i.vscodeWorkspaceTrust=\"vscode-workspace-trust\",i.vscodeTerminal=\"vscode-terminal\",i.vscodeChatSesssion=\"vscode-chat-editor\",i.webviewPanel=\"webview-panel\",i.vscodeWebview=\"vscode-webview\",i.extension=\"extension\",i.vscodeFileResource=\"vscode-file\",i.tmp=\"tmp\",i.vsls=\"vsls\",i.vscodeSourceControl=\"vscode-scm\"})(S||(e.Schemas=S={}));function p(i,n){return E.URI.isUri(i)?(0,y.equalsIgnoreCase)(i.scheme,n):(0,y.startsWithIgnoreCase)(i,n+\":\")}e.matchesScheme=p;function _(i,...n){return n.some(t=>p(i,t))}e.matchesSomeScheme=_,e.connectionTokenQueryName=\"tkn\";class v{constructor(){this._hosts=Object.create(null),this._ports=Object.create(null),this._connectionTokens=Object.create(null),this._preferredWebSchema=\"http\",this._delegate=null,this._remoteResourcesPath=`/${S.vscodeRemoteResource}`}setPreferredWebSchema(n){this._preferredWebSchema=n}rewrite(n){if(this._delegate)try{return this._delegate(n)}catch(d){return L.onUnexpectedError(d),n}const t=n.authority;let r=this._hosts[t];r&&r.indexOf(\":\")!==-1&&r.indexOf(\"[\")===-1&&(r=`[${r}]`);const u=this._ports[t],f=this._connectionTokens[t];let c=`path=${encodeURIComponent(n.path)}`;return typeof f==\"string\"&&(c+=`&${e.connectionTokenQueryName}=${encodeURIComponent(f)}`),E.URI.from({scheme:k.isWeb?this._preferredWebSchema:S.vscodeRemoteResource,authority:`${r}:${u}`,path:this._remoteResourcesPath,query:c})}}e.RemoteAuthorities=new v,e.VSCODE_AUTHORITY=\"vscode-app\";class b{uriToBrowserUri(n){return n.scheme===S.vscodeRemote?e.RemoteAuthorities.rewrite(n):n.scheme===S.file&&(k.isNative||k.webWorkerOrigin===`${S.vscodeFileResource}://${b.FALLBACK_AUTHORITY}`)?n.with({scheme:S.vscodeFileResource,authority:n.authority||b.FALLBACK_AUTHORITY,query:null,fragment:null}):n}}b.FALLBACK_AUTHORITY=e.VSCODE_AUTHORITY,e.FileAccess=new b;var a;(function(i){const n=new Map([[\"1\",{\"Cross-Origin-Opener-Policy\":\"same-origin\"}],[\"2\",{\"Cross-Origin-Embedder-Policy\":\"require-corp\"}],[\"3\",{\"Cross-Origin-Opener-Policy\":\"same-origin\",\"Cross-Origin-Embedder-Policy\":\"require-corp\"}]]);i.CoopAndCoep=Object.freeze(n.get(\"3\"));const t=\"vscode-coi\";function r(f){let c;typeof f==\"string\"?c=new URL(f).searchParams:f instanceof URL?c=f.searchParams:E.URI.isUri(f)&&(c=new URL(f.toString(!0)).searchParams);const d=c?.get(t);if(d)return n.get(d)}i.getHeadersFromQuery=r;function u(f,c,d){if(!globalThis.crossOriginIsolated)return;const s=c&&d?\"3\":d?\"2\":\"1\";f instanceof URLSearchParams?f.set(t,s):f[t]=s}i.addSearchParam=u})(a||(e.COI=a={}))}),define(se[7],oe([1,0,54,219,46,67,14,12,6,316,2,47,17,111,44]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){\"use strict\";var r;Object.defineProperty(e,\"__esModule\",{value:!0}),e.h=e.DragAndDropObserver=e.ModifierKeyEmitter=e.basicMarkupHtmlTags=e.hookDomPurifyHrefAndSrcSanitizer=e.asCssValueWithDefault=e.asCSSPropertyValue=e.asCSSUrl=e.animate=e.windowOpenNoOpener=e.computeScreenAwareSize=e.hide=e.show=e.setVisibility=e.$=e.Namespace=e.reset=e.prepend=e.append=e.after=e.trackFocus=e.restoreParentsScrollTop=e.saveParentsScrollTop=e.EventHelper=e.isEventLike=e.EventType=e.isKeyboardEvent=e.isMouseEvent=e.removeCSSRulesContainingSelector=e.createCSSRule=e.sharedMutationObserver=e.createStyleSheet=e.createStyleSheet2=e.getActiveWindow=e.getActiveDocument=e.isAncestorOfActiveElement=e.isActiveElement=e.getActiveElement=e.getShadowRoot=e.isInShadowDOM=e.isShadowRoot=e.hasParentWithClass=e.findParentWithClass=e.isAncestor=e.getTotalHeight=e.getContentHeight=e.getContentWidth=e.getTotalWidth=e.getDomNodeZoomLevel=e.getDomNodePagePosition=e.size=e.getTopLeftOffset=e.Dimension=e.getClientArea=e.getComputedStyle=e.WindowIntervalTimer=e.scheduleAtNextAnimationFrame=e.runAtThisOrScheduleAtNextAnimationFrame=e.WindowIdleValue=e.runWhenWindowIdle=e.addDisposableGenericMouseUpListener=e.addDisposableGenericMouseDownListener=e.addStandardDisposableGenericMouseUpListener=e.addStandardDisposableGenericMouseDownListener=e.addStandardDisposableListener=e.addDisposableListener=e.clearNode=e.onDidUnregisterWindow=e.onWillUnregisterWindow=e.onDidRegisterWindow=e.hasWindow=e.getWindowById=e.getWindowId=e.getWindowsCount=e.getWindows=e.getDocument=e.getWindow=e.registerWindow=void 0,r=function(){const Le=new Map;(0,t.ensureCodeWindow)(t.mainWindow,1),Le.set(t.mainWindow.vscodeWindowId,{window:t.mainWindow,disposables:new b.DisposableStore});const ye=new _.Emitter,Me=new _.Emitter,Te=new _.Emitter;return{onDidRegisterWindow:ye.event,onWillUnregisterWindow:Te.event,onDidUnregisterWindow:Me.event,registerWindow(we){if(Le.has(we.vscodeWindowId))return b.Disposable.None;const Re=new b.DisposableStore,Oe={window:we,disposables:Re.add(new b.DisposableStore)};return Le.set(we.vscodeWindowId,Oe),Re.add((0,b.toDisposable)(()=>{Le.delete(we.vscodeWindowId),Me.fire(we)})),Re.add(c(we,e.EventType.BEFORE_UNLOAD,()=>{Te.fire(we)})),ye.fire(Oe),Re},getWindows(){return Le.values()},getWindowsCount(){return Le.size},getWindowId(we){return we.vscodeWindowId},hasWindow(we){return Le.has(we)},getWindowById(we){return Le.get(we)},getWindow(we){var Re;const Oe=we;if(!((Re=Oe?.ownerDocument)===null||Re===void 0)&&Re.defaultView)return Oe.ownerDocument.defaultView.window;const Ve=we;return Ve?.view?Ve.view.window:t.mainWindow},getDocument(we){const Re=we;return(0,e.getWindow)(Re).document}}}(),e.registerWindow=r.registerWindow,e.getWindow=r.getWindow,e.getDocument=r.getDocument,e.getWindows=r.getWindows,e.getWindowsCount=r.getWindowsCount,e.getWindowId=r.getWindowId,e.getWindowById=r.getWindowById,e.hasWindow=r.hasWindow,e.onDidRegisterWindow=r.onDidRegisterWindow,e.onWillUnregisterWindow=r.onWillUnregisterWindow,e.onDidUnregisterWindow=r.onDidUnregisterWindow;function u(Le){for(;Le.firstChild;)Le.firstChild.remove()}e.clearNode=u;class f{constructor(ye,Me,Te,we){this._node=ye,this._type=Me,this._handler=Te,this._options=we||!1,this._node.addEventListener(this._type,this._handler,this._options)}dispose(){this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function c(Le,ye,Me,Te){return new f(Le,ye,Me,Te)}e.addDisposableListener=c;function d(Le,ye){return function(Me){return ye(new E.StandardMouseEvent(Le,Me))}}function s(Le){return function(ye){return Le(new y.StandardKeyboardEvent(ye))}}const l=function(ye,Me,Te,we){let Re=Te;return Me===\"click\"||Me===\"mousedown\"?Re=d((0,e.getWindow)(ye),Te):(Me===\"keydown\"||Me===\"keypress\"||Me===\"keyup\")&&(Re=s(Te)),c(ye,Me,Re,we)};e.addStandardDisposableListener=l;const o=function(ye,Me,Te){const we=d((0,e.getWindow)(ye),Me);return h(ye,we,Te)};e.addStandardDisposableGenericMouseDownListener=o;const g=function(ye,Me,Te){const we=d((0,e.getWindow)(ye),Me);return m(ye,we,Te)};e.addStandardDisposableGenericMouseUpListener=g;function h(Le,ye,Me){return c(Le,i.isIOS&&k.BrowserFeatures.pointerEvents?e.EventType.POINTER_DOWN:e.EventType.MOUSE_DOWN,ye,Me)}e.addDisposableGenericMouseDownListener=h;function m(Le,ye,Me){return c(Le,i.isIOS&&k.BrowserFeatures.pointerEvents?e.EventType.POINTER_UP:e.EventType.MOUSE_UP,ye,Me)}e.addDisposableGenericMouseUpListener=m;function C(Le,ye,Me){return(0,S._runWhenIdle)(Le,ye,Me)}e.runWhenWindowIdle=C;class w extends S.AbstractIdleValue{constructor(ye,Me){super(ye,Me)}}e.WindowIdleValue=w;class D extends S.IntervalTimer{constructor(ye){super(),this.defaultTarget=ye&&(0,e.getWindow)(ye)}cancelAndSet(ye,Me,Te){return super.cancelAndSet(ye,Me,Te??this.defaultTarget)}}e.WindowIntervalTimer=D;class I{constructor(ye,Me=0){this._runner=ye,this.priority=Me,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(ye){(0,p.onUnexpectedError)(ye)}}static sort(ye,Me){return Me.priority-ye.priority}}(function(){const Le=new Map,ye=new Map,Me=new Map,Te=new Map,we=Re=>{var Oe;Me.set(Re,!1);const Ve=(Oe=Le.get(Re))!==null&&Oe!==void 0?Oe:[];for(ye.set(Re,Ve),Le.set(Re,[]),Te.set(Re,!0);Ve.length>0;)Ve.sort(I.sort),Ve.shift().execute();Te.set(Re,!1)};e.scheduleAtNextAnimationFrame=(Re,Oe,Ve=0)=>{const $e=(0,e.getWindowId)(Re),Ze=new I(Oe,Ve);let Ge=Le.get($e);return Ge||(Ge=[],Le.set($e,Ge)),Ge.push(Ze),Me.get($e)||(Me.set($e,!0),Re.requestAnimationFrame(()=>we($e))),Ze},e.runAtThisOrScheduleAtNextAnimationFrame=(Re,Oe,Ve)=>{const $e=(0,e.getWindowId)(Re);if(Te.get($e)){const Ze=new I(Oe,Ve);let Ge=ye.get($e);return Ge||(Ge=[],ye.set($e,Ge)),Ge.push(Ze),Ze}else return(0,e.scheduleAtNextAnimationFrame)(Re,Oe,Ve)}})();function T(Le){return(0,e.getWindow)(Le).getComputedStyle(Le,null)}e.getComputedStyle=T;function A(Le,ye){const Me=(0,e.getWindow)(Le),Te=Me.document;if(Le!==Te.body)return new N(Le.clientWidth,Le.clientHeight);if(i.isIOS&&Me?.visualViewport)return new N(Me.visualViewport.width,Me.visualViewport.height);if(Me?.innerWidth&&Me.innerHeight)return new N(Me.innerWidth,Me.innerHeight);if(Te.body&&Te.body.clientWidth&&Te.body.clientHeight)return new N(Te.body.clientWidth,Te.body.clientHeight);if(Te.documentElement&&Te.documentElement.clientWidth&&Te.documentElement.clientHeight)return new N(Te.documentElement.clientWidth,Te.documentElement.clientHeight);if(ye)return A(ye);throw new Error(\"Unable to figure out browser width and height\")}e.getClientArea=A;class P{static convertToPixels(ye,Me){return parseFloat(Me)||0}static getDimension(ye,Me,Te){const we=T(ye),Re=we?we.getPropertyValue(Me):\"0\";return P.convertToPixels(ye,Re)}static getBorderLeftWidth(ye){return P.getDimension(ye,\"border-left-width\",\"borderLeftWidth\")}static getBorderRightWidth(ye){return P.getDimension(ye,\"border-right-width\",\"borderRightWidth\")}static getBorderTopWidth(ye){return P.getDimension(ye,\"border-top-width\",\"borderTopWidth\")}static getBorderBottomWidth(ye){return P.getDimension(ye,\"border-bottom-width\",\"borderBottomWidth\")}static getPaddingLeft(ye){return P.getDimension(ye,\"padding-left\",\"paddingLeft\")}static getPaddingRight(ye){return P.getDimension(ye,\"padding-right\",\"paddingRight\")}static getPaddingTop(ye){return P.getDimension(ye,\"padding-top\",\"paddingTop\")}static getPaddingBottom(ye){return P.getDimension(ye,\"padding-bottom\",\"paddingBottom\")}static getMarginLeft(ye){return P.getDimension(ye,\"margin-left\",\"marginLeft\")}static getMarginTop(ye){return P.getDimension(ye,\"margin-top\",\"marginTop\")}static getMarginRight(ye){return P.getDimension(ye,\"margin-right\",\"marginRight\")}static getMarginBottom(ye){return P.getDimension(ye,\"margin-bottom\",\"marginBottom\")}}class N{constructor(ye,Me){this.width=ye,this.height=Me}with(ye=this.width,Me=this.height){return ye!==this.width||Me!==this.height?new N(ye,Me):this}static is(ye){return typeof ye==\"object\"&&typeof ye.height==\"number\"&&typeof ye.width==\"number\"}static lift(ye){return ye instanceof N?ye:new N(ye.width,ye.height)}static equals(ye,Me){return ye===Me?!0:!ye||!Me?!1:ye.width===Me.width&&ye.height===Me.height}}e.Dimension=N,N.None=new N(0,0);function M(Le){let ye=Le.offsetParent,Me=Le.offsetTop,Te=Le.offsetLeft;for(;(Le=Le.parentNode)!==null&&Le!==Le.ownerDocument.body&&Le!==Le.ownerDocument.documentElement;){Me-=Le.scrollTop;const we=ae(Le)?null:T(Le);we&&(Te-=we.direction!==\"rtl\"?Le.scrollLeft:-Le.scrollLeft),Le===ye&&(Te+=P.getBorderLeftWidth(Le),Me+=P.getBorderTopWidth(Le),Me+=Le.offsetTop,Te+=Le.offsetLeft,ye=Le.offsetParent)}return{left:Te,top:Me}}e.getTopLeftOffset=M;function R(Le,ye,Me){typeof ye==\"number\"&&(Le.style.width=`${ye}px`),typeof Me==\"number\"&&(Le.style.height=`${Me}px`)}e.size=R;function x(Le){const ye=Le.getBoundingClientRect(),Me=(0,e.getWindow)(Le);return{left:ye.left+Me.scrollX,top:ye.top+Me.scrollY,width:ye.width,height:ye.height}}e.getDomNodePagePosition=x;function O(Le){let ye=Le,Me=1;do{const Te=T(ye).zoom;Te!=null&&Te!==\"1\"&&(Me*=Te),ye=ye.parentElement}while(ye!==null&&ye!==ye.ownerDocument.documentElement);return Me}e.getDomNodeZoomLevel=O;function B(Le){const ye=P.getMarginLeft(Le)+P.getMarginRight(Le);return Le.offsetWidth+ye}e.getTotalWidth=B;function W(Le){const ye=P.getBorderLeftWidth(Le)+P.getBorderRightWidth(Le),Me=P.getPaddingLeft(Le)+P.getPaddingRight(Le);return Le.offsetWidth-ye-Me}e.getContentWidth=W;function V(Le){const ye=P.getBorderTopWidth(Le)+P.getBorderBottomWidth(Le),Me=P.getPaddingTop(Le)+P.getPaddingBottom(Le);return Le.offsetHeight-ye-Me}e.getContentHeight=V;function K(Le){const ye=P.getMarginTop(Le)+P.getMarginBottom(Le);return Le.offsetHeight+ye}e.getTotalHeight=K;function F(Le,ye){return!!ye?.contains(Le)}e.isAncestor=F;function q(Le,ye,Me){for(;Le&&Le.nodeType===Le.ELEMENT_NODE;){if(Le.classList.contains(ye))return Le;if(Me){if(typeof Me==\"string\"){if(Le.classList.contains(Me))return null}else if(Le===Me)return null}Le=Le.parentNode}return null}e.findParentWithClass=q;function ie(Le,ye,Me){return!!q(Le,ye,Me)}e.hasParentWithClass=ie;function ae(Le){return Le&&!!Le.host&&!!Le.mode}e.isShadowRoot=ae;function ne(Le){return!!$(Le)}e.isInShadowDOM=ne;function $(Le){for(var ye;Le.parentNode;){if(Le===((ye=Le.ownerDocument)===null||ye===void 0?void 0:ye.body))return null;Le=Le.parentNode}return ae(Le)?Le:null}e.getShadowRoot=$;function J(){let Le=de().activeElement;for(;Le?.shadowRoot;)Le=Le.shadowRoot.activeElement;return Le}e.getActiveElement=J;function Q(Le){return J()===Le}e.isActiveElement=Q;function re(Le){return F(J(),Le)}e.isAncestorOfActiveElement=re;function de(){var Le;return(0,e.getWindowsCount)()<=1?t.mainWindow.document:(Le=Array.from((0,e.getWindows)()).map(({window:Me})=>Me.document).find(Me=>Me.hasFocus()))!==null&&Le!==void 0?Le:t.mainWindow.document}e.getActiveDocument=de;function he(){var Le,ye;return(ye=(Le=de().defaultView)===null||Le===void 0?void 0:Le.window)!==null&&ye!==void 0?ye:t.mainWindow}e.getActiveWindow=he;const me=new Map;function X(){return new U}e.createStyleSheet2=X;class U{constructor(){this._currentCssStyle=\"\",this._styleSheet=void 0}setStyle(ye){ye!==this._currentCssStyle&&(this._currentCssStyle=ye,this._styleSheet?this._styleSheet.innerText=ye:this._styleSheet=G(t.mainWindow.document.head,Me=>Me.innerText=ye))}dispose(){this._styleSheet&&(u(this._styleSheet),this._styleSheet=void 0)}}function G(Le=t.mainWindow.document.head,ye,Me){const Te=document.createElement(\"style\");if(Te.type=\"text/css\",Te.media=\"screen\",ye?.(Te),Le.appendChild(Te),Me&&Me.add((0,b.toDisposable)(()=>Le.removeChild(Te))),Le===t.mainWindow.document.head){const we=new Set;me.set(Te,we);for(const{window:Re,disposables:Oe}of(0,e.getWindows)()){if(Re===t.mainWindow)continue;const Ve=Oe.add(z(Te,we,Re));Me?.add(Ve)}}return Te}e.createStyleSheet=G;function z(Le,ye,Me){var Te,we;const Re=new b.DisposableStore,Oe=Le.cloneNode(!0);Me.document.head.appendChild(Oe),Re.add((0,b.toDisposable)(()=>Me.document.head.removeChild(Oe)));for(const Ve of j(Le))(Te=Oe.sheet)===null||Te===void 0||Te.insertRule(Ve.cssText,(we=Oe.sheet)===null||we===void 0?void 0:we.cssRules.length);return Re.add(e.sharedMutationObserver.observe(Le,Re,{childList:!0})(()=>{Oe.textContent=Le.textContent})),ye.add(Oe),Re.add((0,b.toDisposable)(()=>ye.delete(Oe))),Re}e.sharedMutationObserver=new class{constructor(){this.mutationObservers=new Map}observe(Le,ye,Me){let Te=this.mutationObservers.get(Le);Te||(Te=new Map,this.mutationObservers.set(Le,Te));const we=(0,n.hash)(Me);let Re=Te.get(we);if(Re)Re.users+=1;else{const Oe=new _.Emitter,Ve=new MutationObserver(Ze=>Oe.fire(Ze));Ve.observe(Le,Me);const $e=Re={users:1,observer:Ve,onDidMutate:Oe.event};ye.add((0,b.toDisposable)(()=>{$e.users-=1,$e.users===0&&(Oe.dispose(),Ve.disconnect(),Te?.delete(we),Te?.size===0&&this.mutationObservers.delete(Le))})),Te.set(we,Re)}return Re.onDidMutate}};let H=null;function Y(){return H||(H=G()),H}function j(Le){var ye,Me;return!((ye=Le?.sheet)===null||ye===void 0)&&ye.rules?Le.sheet.rules:!((Me=Le?.sheet)===null||Me===void 0)&&Me.cssRules?Le.sheet.cssRules:[]}function Z(Le,ye,Me=Y()){var Te,we;if(!(!Me||!ye)){(Te=Me.sheet)===null||Te===void 0||Te.insertRule(`${Le} {${ye}}`,0);for(const Re of(we=me.get(Me))!==null&&we!==void 0?we:[])Z(Le,ye,Re)}}e.createCSSRule=Z;function ee(Le,ye=Y()){var Me,Te;if(!ye)return;const we=j(ye),Re=[];for(let Oe=0;Oe<we.length;Oe++){const Ve=we[Oe];le(Ve)&&Ve.selectorText.indexOf(Le)!==-1&&Re.push(Oe)}for(let Oe=Re.length-1;Oe>=0;Oe--)(Me=ye.sheet)===null||Me===void 0||Me.deleteRule(Re[Oe]);for(const Oe of(Te=me.get(ye))!==null&&Te!==void 0?Te:[])ee(Le,Oe)}e.removeCSSRulesContainingSelector=ee;function le(Le){return typeof Le.selectorText==\"string\"}function ue(Le){return Le instanceof MouseEvent||Le instanceof(0,e.getWindow)(Le).MouseEvent}e.isMouseEvent=ue;function ce(Le){return Le instanceof KeyboardEvent||Le instanceof(0,e.getWindow)(Le).KeyboardEvent}e.isKeyboardEvent=ce,e.EventType={CLICK:\"click\",AUXCLICK:\"auxclick\",DBLCLICK:\"dblclick\",MOUSE_UP:\"mouseup\",MOUSE_DOWN:\"mousedown\",MOUSE_OVER:\"mouseover\",MOUSE_MOVE:\"mousemove\",MOUSE_OUT:\"mouseout\",MOUSE_ENTER:\"mouseenter\",MOUSE_LEAVE:\"mouseleave\",MOUSE_WHEEL:\"wheel\",POINTER_UP:\"pointerup\",POINTER_DOWN:\"pointerdown\",POINTER_MOVE:\"pointermove\",POINTER_LEAVE:\"pointerleave\",CONTEXT_MENU:\"contextmenu\",WHEEL:\"wheel\",KEY_DOWN:\"keydown\",KEY_PRESS:\"keypress\",KEY_UP:\"keyup\",LOAD:\"load\",BEFORE_UNLOAD:\"beforeunload\",UNLOAD:\"unload\",PAGE_SHOW:\"pageshow\",PAGE_HIDE:\"pagehide\",PASTE:\"paste\",ABORT:\"abort\",ERROR:\"error\",RESIZE:\"resize\",SCROLL:\"scroll\",FULLSCREEN_CHANGE:\"fullscreenchange\",WK_FULLSCREEN_CHANGE:\"webkitfullscreenchange\",SELECT:\"select\",CHANGE:\"change\",SUBMIT:\"submit\",RESET:\"reset\",FOCUS:\"focus\",FOCUS_IN:\"focusin\",FOCUS_OUT:\"focusout\",BLUR:\"blur\",INPUT:\"input\",STORAGE:\"storage\",DRAG_START:\"dragstart\",DRAG:\"drag\",DRAG_ENTER:\"dragenter\",DRAG_LEAVE:\"dragleave\",DRAG_OVER:\"dragover\",DROP:\"drop\",DRAG_END:\"dragend\",ANIMATION_START:L.isWebKit?\"webkitAnimationStart\":\"animationstart\",ANIMATION_END:L.isWebKit?\"webkitAnimationEnd\":\"animationend\",ANIMATION_ITERATION:L.isWebKit?\"webkitAnimationIteration\":\"animationiteration\"};function pe(Le){const ye=Le;return!!(ye&&typeof ye.preventDefault==\"function\"&&typeof ye.stopPropagation==\"function\")}e.isEventLike=pe,e.EventHelper={stop:(Le,ye)=>(Le.preventDefault(),ye&&Le.stopPropagation(),Le)};function ve(Le){const ye=[];for(let Me=0;Le&&Le.nodeType===Le.ELEMENT_NODE;Me++)ye[Me]=Le.scrollTop,Le=Le.parentNode;return ye}e.saveParentsScrollTop=ve;function Ce(Le,ye){for(let Me=0;Le&&Le.nodeType===Le.ELEMENT_NODE;Me++)Le.scrollTop!==ye[Me]&&(Le.scrollTop=ye[Me]),Le=Le.parentNode}e.restoreParentsScrollTop=Ce;class Se extends b.Disposable{static hasFocusWithin(ye){if(ye instanceof HTMLElement){const Me=$(ye),Te=Me?Me.activeElement:ye.ownerDocument.activeElement;return F(Te,ye)}else{const Me=ye;return F(Me.document.activeElement,Me.document)}}constructor(ye){super(),this._onDidFocus=this._register(new _.Emitter),this.onDidFocus=this._onDidFocus.event,this._onDidBlur=this._register(new _.Emitter),this.onDidBlur=this._onDidBlur.event;let Me=Se.hasFocusWithin(ye),Te=!1;const we=()=>{Te=!1,Me||(Me=!0,this._onDidFocus.fire())},Re=()=>{Me&&(Te=!0,(ye instanceof HTMLElement?(0,e.getWindow)(ye):ye).setTimeout(()=>{Te&&(Te=!1,Me=!1,this._onDidBlur.fire())},0))};this._refreshStateHandler=()=>{Se.hasFocusWithin(ye)!==Me&&(Me?Re():we())},this._register(c(ye,e.EventType.FOCUS,we,!0)),this._register(c(ye,e.EventType.BLUR,Re,!0)),ye instanceof HTMLElement&&(this._register(c(ye,e.EventType.FOCUS_IN,()=>this._refreshStateHandler())),this._register(c(ye,e.EventType.FOCUS_OUT,()=>this._refreshStateHandler())))}}function _e(Le){return new Se(Le)}e.trackFocus=_e;function Ee(Le,ye){return Le.after(ye),ye}e.after=Ee;function Ae(Le,...ye){if(Le.append(...ye),ye.length===1&&typeof ye[0]!=\"string\")return ye[0]}e.append=Ae;function xe(Le,ye){return Le.insertBefore(ye,Le.firstChild),ye}e.prepend=xe;function Be(Le,...ye){Le.innerText=\"\",Ae(Le,...ye)}e.reset=Be;const De=/([\\w\\-]+)?(#([\\w\\-]+))?((\\.([\\w\\-]+))*)/;var Ie;(function(Le){Le.HTML=\"http://www.w3.org/1999/xhtml\",Le.SVG=\"http://www.w3.org/2000/svg\"})(Ie||(e.Namespace=Ie={}));function fe(Le,ye,Me,...Te){const we=De.exec(ye);if(!we)throw new Error(\"Bad use of emmet\");const Re=we[1]||\"div\";let Oe;return Le!==Ie.HTML?Oe=document.createElementNS(Le,Re):Oe=document.createElement(Re),we[3]&&(Oe.id=we[3]),we[4]&&(Oe.className=we[4].replace(/\\./g,\" \").trim()),Me&&Object.entries(Me).forEach(([Ve,$e])=>{typeof $e>\"u\"||(/^on\\w+$/.test(Ve)?Oe[Ve]=$e:Ve===\"selected\"?$e&&Oe.setAttribute(Ve,\"true\"):Oe.setAttribute(Ve,$e))}),Oe.append(...Te),Oe}function be(Le,ye,...Me){return fe(Ie.HTML,Le,ye,...Me)}e.$=be,be.SVG=function(Le,ye,...Me){return fe(Ie.SVG,Le,ye,...Me)};function Ne(Le,...ye){Le?Pe(...ye):ze(...ye)}e.setVisibility=Ne;function Pe(...Le){for(const ye of Le)ye.style.display=\"\",ye.removeAttribute(\"aria-hidden\")}e.show=Pe;function ze(...Le){for(const ye of Le)ye.style.display=\"none\",ye.setAttribute(\"aria-hidden\",\"true\")}e.hide=ze;function Ke(Le,ye){const Me=Le.devicePixelRatio*ye;return Math.max(1,Math.floor(Me))/Le.devicePixelRatio}e.computeScreenAwareSize=Ke;function je(Le){t.mainWindow.open(Le,\"_blank\",\"noopener\")}e.windowOpenNoOpener=je;function Je(Le,ye){const Me=()=>{ye(),Te=(0,e.scheduleAtNextAnimationFrame)(Le,Me)};let Te=(0,e.scheduleAtNextAnimationFrame)(Le,Me);return(0,b.toDisposable)(()=>Te.dispose())}e.animate=Je,a.RemoteAuthorities.setPreferredWebSchema(/^https:/.test(t.mainWindow.location.href)?\"https\":\"http\");function rt(Le){return Le?`url('${a.FileAccess.uriToBrowserUri(Le).toString(!0).replace(/'/g,\"%27\")}')`:\"url('')\"}e.asCSSUrl=rt;function et(Le){return`'${Le.replace(/'/g,\"%27\")}'`}e.asCSSPropertyValue=et;function st(Le,ye){if(Le!==void 0){const Me=Le.match(/^\\s*var\\((.+)\\)$/);if(Me){const Te=Me[1].split(\",\",2);return Te.length===2&&(ye=st(Te[1].trim(),ye)),`var(${Te[0]}, ${ye})`}return Le}return ye}e.asCssValueWithDefault=st;function Qe(Le,ye=!1){const Me=document.createElement(\"a\");return v.addHook(\"afterSanitizeAttributes\",Te=>{for(const we of[\"href\",\"src\"])if(Te.hasAttribute(we)){const Re=Te.getAttribute(we);if(we===\"href\"&&Re.startsWith(\"#\"))continue;if(Me.href=Re,!Le.includes(Me.protocol.replace(/:$/,\"\"))){if(ye&&we===\"src\"&&Me.href.startsWith(\"data:\"))continue;Te.removeAttribute(we)}}}),(0,b.toDisposable)(()=>{v.removeHook(\"afterSanitizeAttributes\")})}e.hookDomPurifyHrefAndSrcSanitizer=Qe,e.basicMarkupHtmlTags=Object.freeze([\"a\",\"abbr\",\"b\",\"bdo\",\"blockquote\",\"br\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"dd\",\"del\",\"details\",\"dfn\",\"div\",\"dl\",\"dt\",\"em\",\"figcaption\",\"figure\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"hr\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"li\",\"mark\",\"ol\",\"p\",\"pre\",\"q\",\"rp\",\"rt\",\"ruby\",\"samp\",\"small\",\"small\",\"source\",\"span\",\"strike\",\"strong\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]);const ft=Object.freeze({ALLOWED_TAGS:[\"a\",\"button\",\"blockquote\",\"code\",\"div\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"hr\",\"input\",\"label\",\"li\",\"p\",\"pre\",\"select\",\"small\",\"span\",\"strong\",\"textarea\",\"ul\",\"ol\"],ALLOWED_ATTR:[\"href\",\"data-href\",\"data-command\",\"target\",\"title\",\"name\",\"src\",\"alt\",\"class\",\"id\",\"role\",\"tabindex\",\"style\",\"data-code\",\"width\",\"height\",\"align\",\"x-dispatch\",\"required\",\"checked\",\"placeholder\",\"type\",\"start\"],RETURN_DOM:!1,RETURN_DOM_FRAGMENT:!1,RETURN_TRUSTED_TYPE:!0});class at extends _.Emitter{constructor(){super(),this._subscriptions=new b.DisposableStore,this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1},this._subscriptions.add(_.Event.runAndSubscribe(e.onDidRegisterWindow,({window:ye,disposables:Me})=>this.registerListeners(ye,Me),{window:t.mainWindow,disposables:this._subscriptions}))}registerListeners(ye,Me){Me.add(c(ye,\"keydown\",Te=>{if(Te.defaultPrevented)return;const we=new y.StandardKeyboardEvent(Te);if(!(we.keyCode===6&&Te.repeat)){if(Te.altKey&&!this._keyStatus.altKey)this._keyStatus.lastKeyPressed=\"alt\";else if(Te.ctrlKey&&!this._keyStatus.ctrlKey)this._keyStatus.lastKeyPressed=\"ctrl\";else if(Te.metaKey&&!this._keyStatus.metaKey)this._keyStatus.lastKeyPressed=\"meta\";else if(Te.shiftKey&&!this._keyStatus.shiftKey)this._keyStatus.lastKeyPressed=\"shift\";else if(we.keyCode!==6)this._keyStatus.lastKeyPressed=void 0;else return;this._keyStatus.altKey=Te.altKey,this._keyStatus.ctrlKey=Te.ctrlKey,this._keyStatus.metaKey=Te.metaKey,this._keyStatus.shiftKey=Te.shiftKey,this._keyStatus.lastKeyPressed&&(this._keyStatus.event=Te,this.fire(this._keyStatus))}},!0)),Me.add(c(ye,\"keyup\",Te=>{Te.defaultPrevented||(!Te.altKey&&this._keyStatus.altKey?this._keyStatus.lastKeyReleased=\"alt\":!Te.ctrlKey&&this._keyStatus.ctrlKey?this._keyStatus.lastKeyReleased=\"ctrl\":!Te.metaKey&&this._keyStatus.metaKey?this._keyStatus.lastKeyReleased=\"meta\":!Te.shiftKey&&this._keyStatus.shiftKey?this._keyStatus.lastKeyReleased=\"shift\":this._keyStatus.lastKeyReleased=void 0,this._keyStatus.lastKeyPressed!==this._keyStatus.lastKeyReleased&&(this._keyStatus.lastKeyPressed=void 0),this._keyStatus.altKey=Te.altKey,this._keyStatus.ctrlKey=Te.ctrlKey,this._keyStatus.metaKey=Te.metaKey,this._keyStatus.shiftKey=Te.shiftKey,this._keyStatus.lastKeyReleased&&(this._keyStatus.event=Te,this.fire(this._keyStatus)))},!0)),Me.add(c(ye.document.body,\"mousedown\",()=>{this._keyStatus.lastKeyPressed=void 0},!0)),Me.add(c(ye.document.body,\"mouseup\",()=>{this._keyStatus.lastKeyPressed=void 0},!0)),Me.add(c(ye.document.body,\"mousemove\",Te=>{Te.buttons&&(this._keyStatus.lastKeyPressed=void 0)},!0)),Me.add(c(ye,\"blur\",()=>{this.resetKeyStatus()}))}get keyStatus(){return this._keyStatus}resetKeyStatus(){this.doResetKeyStatus(),this.fire(this._keyStatus)}doResetKeyStatus(){this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1}}static getInstance(){return at.instance||(at.instance=new at),at.instance}dispose(){super.dispose(),this._subscriptions.dispose()}}e.ModifierKeyEmitter=at;class ct extends b.Disposable{constructor(ye,Me){super(),this.element=ye,this.callbacks=Me,this.counter=0,this.dragStartTime=0,this.registerListeners()}registerListeners(){this.callbacks.onDragStart&&this._register(c(this.element,e.EventType.DRAG_START,ye=>{var Me,Te;(Te=(Me=this.callbacks).onDragStart)===null||Te===void 0||Te.call(Me,ye)})),this.callbacks.onDrag&&this._register(c(this.element,e.EventType.DRAG,ye=>{var Me,Te;(Te=(Me=this.callbacks).onDrag)===null||Te===void 0||Te.call(Me,ye)})),this._register(c(this.element,e.EventType.DRAG_ENTER,ye=>{var Me,Te;this.counter++,this.dragStartTime=ye.timeStamp,(Te=(Me=this.callbacks).onDragEnter)===null||Te===void 0||Te.call(Me,ye)})),this._register(c(this.element,e.EventType.DRAG_OVER,ye=>{var Me,Te;ye.preventDefault(),(Te=(Me=this.callbacks).onDragOver)===null||Te===void 0||Te.call(Me,ye,ye.timeStamp-this.dragStartTime)})),this._register(c(this.element,e.EventType.DRAG_LEAVE,ye=>{var Me,Te;this.counter--,this.counter===0&&(this.dragStartTime=0,(Te=(Me=this.callbacks).onDragLeave)===null||Te===void 0||Te.call(Me,ye))})),this._register(c(this.element,e.EventType.DRAG_END,ye=>{var Me,Te;this.counter=0,this.dragStartTime=0,(Te=(Me=this.callbacks).onDragEnd)===null||Te===void 0||Te.call(Me,ye)})),this._register(c(this.element,e.EventType.DROP,ye=>{var Me,Te;this.counter=0,this.dragStartTime=0,(Te=(Me=this.callbacks).onDrop)===null||Te===void 0||Te.call(Me,ye)}))}}e.DragAndDropObserver=ct;const lt=/(?<tag>[\\w\\-]+)?(?:#(?<id>[\\w\\-]+))?(?<class>(?:\\.(?:[\\w\\-]+))*)(?:@(?<name>(?:[\\w\\_])+))?/;function mt(Le,...ye){let Me,Te;Array.isArray(ye[0])?(Me={},Te=ye[0]):(Me=ye[0]||{},Te=ye[1]);const we=lt.exec(Le);if(!we||!we.groups)throw new Error(\"Bad use of h\");const Re=we.groups.tag||\"div\",Oe=document.createElement(Re);we.groups.id&&(Oe.id=we.groups.id);const Ve=[];if(we.groups.class)for(const Ze of we.groups.class.split(\".\"))Ze!==\"\"&&Ve.push(Ze);if(Me.className!==void 0)for(const Ze of Me.className.split(\".\"))Ze!==\"\"&&Ve.push(Ze);Ve.length>0&&(Oe.className=Ve.join(\" \"));const $e={};if(we.groups.name&&($e[we.groups.name]=Oe),Te)for(const Ze of Te)Ze instanceof HTMLElement?Oe.appendChild(Ze):typeof Ze==\"string\"?Oe.append(Ze):\"root\"in Ze&&(Object.assign($e,Ze),Oe.appendChild(Ze.root));for(const[Ze,Ge]of Object.entries(Me))if(Ze!==\"className\")if(Ze===\"style\")for(const[qe,Fe]of Object.entries(Ge))Oe.style.setProperty(pt(qe),typeof Fe==\"number\"?Fe+\"px\":\"\"+Fe);else Ze===\"tabIndex\"?Oe.tabIndex=Ge:Oe.setAttribute(pt(Ze),Ge.toString());return $e.root=Oe,$e}e.h=mt;function pt(Le){return Le.replace(/([a-z])([A-Z])/g,\"$1-$2\").toLowerCase()}}),define(se[317],oe([1,0,7]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createElement=e.renderFormattedText=e.renderText=void 0;function k(a,i={}){const n=E(i);return n.textContent=a,n}e.renderText=k;function y(a,i={}){const n=E(i);return p(n,_(a,!!i.renderCodeSegments),i.actionHandler,i.renderCodeSegments),n}e.renderFormattedText=y;function E(a){const i=a.inline?\"span\":\"div\",n=document.createElement(i);return a.className&&(n.className=a.className),n}e.createElement=E;class S{constructor(i){this.source=i,this.index=0}eos(){return this.index>=this.source.length}next(){const i=this.peek();return this.advance(),i}peek(){return this.source[this.index]}advance(){this.index++}}function p(a,i,n,t){let r;if(i.type===2)r=document.createTextNode(i.content||\"\");else if(i.type===3)r=document.createElement(\"b\");else if(i.type===4)r=document.createElement(\"i\");else if(i.type===7&&t)r=document.createElement(\"code\");else if(i.type===5&&n){const u=document.createElement(\"a\");n.disposables.add(L.addStandardDisposableListener(u,\"click\",f=>{n.callback(String(i.index),f)})),r=u}else i.type===8?r=document.createElement(\"br\"):i.type===1&&(r=a);r&&a!==r&&a.appendChild(r),r&&Array.isArray(i.children)&&i.children.forEach(u=>{p(r,u,n,t)})}function _(a,i){const n={type:1,children:[]};let t=0,r=n;const u=[],f=new S(a);for(;!f.eos();){let c=f.next();const d=c===\"\\\\\"&&b(f.peek(),i)!==0;if(d&&(c=f.next()),!d&&v(c,i)&&c===f.peek()){f.advance(),r.type===2&&(r=u.pop());const s=b(c,i);if(r.type===s||r.type===5&&s===6)r=u.pop();else{const l={type:s,children:[]};s===5&&(l.index=t,t++),r.children.push(l),u.push(r),r=l}}else if(c===`\n`)r.type===2&&(r=u.pop()),r.children.push({type:8});else if(r.type!==2){const s={type:2,content:c};r.children.push(s),u.push(r),r=s}else r.content+=c}return r.type===2&&(r=u.pop()),u.length,n}function v(a,i){return b(a,i)!==0}function b(a,i){switch(a){case\"*\":return 3;case\"_\":return 4;case\"[\":return 5;case\"]\":return 6;case\"`\":return i?7:0;default:return 0}}}),define(se[157],oe([1,0,7,2]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.GlobalPointerMoveMonitor=void 0;class y{constructor(){this._hooks=new k.DisposableStore,this._pointerMoveCallback=null,this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(S,p){if(!this.isMonitoring())return;this._hooks.clear(),this._pointerMoveCallback=null;const _=this._onStopCallback;this._onStopCallback=null,S&&_&&_(p)}isMonitoring(){return!!this._pointerMoveCallback}startMonitoring(S,p,_,v,b){this.isMonitoring()&&this.stopMonitoring(!1),this._pointerMoveCallback=v,this._onStopCallback=b;let a=S;try{S.setPointerCapture(p),this._hooks.add((0,k.toDisposable)(()=>{try{S.releasePointerCapture(p)}catch{}}))}catch{a=L.getWindow(S)}this._hooks.add(L.addDisposableListener(a,L.EventType.POINTER_MOVE,i=>{if(i.buttons!==_){this.stopMonitoring(!0);return}i.preventDefault(),this._pointerMoveCallback(i)})),this._hooks.add(L.addDisposableListener(a,L.EventType.POINTER_UP,i=>this.stopMonitoring(!0)))}}e.GlobalPointerMoveMonitor=y}),define(se[63],oe([1,0,7,44,13,107,6,2,66]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Gesture=e.EventType=void 0;var v;(function(a){a.Tap=\"-monaco-gesturetap\",a.Change=\"-monaco-gesturechange\",a.Start=\"-monaco-gesturestart\",a.End=\"-monaco-gesturesend\",a.Contextmenu=\"-monaco-gesturecontextmenu\"})(v||(e.EventType=v={}));class b extends p.Disposable{constructor(){super(),this.dispatched=!1,this.targets=new _.LinkedList,this.ignoreTargets=new _.LinkedList,this.activeTouches={},this.handle=null,this._lastSetTapCountTime=0,this._register(S.Event.runAndSubscribe(L.onDidRegisterWindow,({window:i,disposables:n})=>{n.add(L.addDisposableListener(i.document,\"touchstart\",t=>this.onTouchStart(t),{passive:!1})),n.add(L.addDisposableListener(i.document,\"touchend\",t=>this.onTouchEnd(i,t))),n.add(L.addDisposableListener(i.document,\"touchmove\",t=>this.onTouchMove(t),{passive:!1}))},{window:k.mainWindow,disposables:this._store}))}static addTarget(i){if(!b.isTouchDevice())return p.Disposable.None;b.INSTANCE||(b.INSTANCE=(0,p.markAsSingleton)(new b));const n=b.INSTANCE.targets.push(i);return(0,p.toDisposable)(n)}static ignoreTarget(i){if(!b.isTouchDevice())return p.Disposable.None;b.INSTANCE||(b.INSTANCE=(0,p.markAsSingleton)(new b));const n=b.INSTANCE.ignoreTargets.push(i);return(0,p.toDisposable)(n)}static isTouchDevice(){return\"ontouchstart\"in k.mainWindow||navigator.maxTouchPoints>0}dispose(){this.handle&&(this.handle.dispose(),this.handle=null),super.dispose()}onTouchStart(i){const n=Date.now();this.handle&&(this.handle.dispose(),this.handle=null);for(let t=0,r=i.targetTouches.length;t<r;t++){const u=i.targetTouches.item(t);this.activeTouches[u.identifier]={id:u.identifier,initialTarget:u.target,initialTimeStamp:n,initialPageX:u.pageX,initialPageY:u.pageY,rollingTimestamps:[n],rollingPageX:[u.pageX],rollingPageY:[u.pageY]};const f=this.newGestureEvent(v.Start,u.target);f.pageX=u.pageX,f.pageY=u.pageY,this.dispatchEvent(f)}this.dispatched&&(i.preventDefault(),i.stopPropagation(),this.dispatched=!1)}onTouchEnd(i,n){const t=Date.now(),r=Object.keys(this.activeTouches).length;for(let u=0,f=n.changedTouches.length;u<f;u++){const c=n.changedTouches.item(u);if(!this.activeTouches.hasOwnProperty(String(c.identifier))){console.warn(\"move of an UNKNOWN touch\",c);continue}const d=this.activeTouches[c.identifier],s=Date.now()-d.initialTimeStamp;if(s<b.HOLD_DELAY&&Math.abs(d.initialPageX-y.tail(d.rollingPageX))<30&&Math.abs(d.initialPageY-y.tail(d.rollingPageY))<30){const l=this.newGestureEvent(v.Tap,d.initialTarget);l.pageX=y.tail(d.rollingPageX),l.pageY=y.tail(d.rollingPageY),this.dispatchEvent(l)}else if(s>=b.HOLD_DELAY&&Math.abs(d.initialPageX-y.tail(d.rollingPageX))<30&&Math.abs(d.initialPageY-y.tail(d.rollingPageY))<30){const l=this.newGestureEvent(v.Contextmenu,d.initialTarget);l.pageX=y.tail(d.rollingPageX),l.pageY=y.tail(d.rollingPageY),this.dispatchEvent(l)}else if(r===1){const l=y.tail(d.rollingPageX),o=y.tail(d.rollingPageY),g=y.tail(d.rollingTimestamps)-d.rollingTimestamps[0],h=l-d.rollingPageX[0],m=o-d.rollingPageY[0],C=[...this.targets].filter(w=>d.initialTarget instanceof Node&&w.contains(d.initialTarget));this.inertia(i,C,t,Math.abs(h)/g,h>0?1:-1,l,Math.abs(m)/g,m>0?1:-1,o)}this.dispatchEvent(this.newGestureEvent(v.End,d.initialTarget)),delete this.activeTouches[c.identifier]}this.dispatched&&(n.preventDefault(),n.stopPropagation(),this.dispatched=!1)}newGestureEvent(i,n){const t=document.createEvent(\"CustomEvent\");return t.initEvent(i,!1,!0),t.initialTarget=n,t.tapCount=0,t}dispatchEvent(i){if(i.type===v.Tap){const n=new Date().getTime();let t=0;n-this._lastSetTapCountTime>b.CLEAR_TAP_COUNT_TIME?t=1:t=2,this._lastSetTapCountTime=n,i.tapCount=t}else(i.type===v.Change||i.type===v.Contextmenu)&&(this._lastSetTapCountTime=0);if(i.initialTarget instanceof Node){for(const n of this.ignoreTargets)if(n.contains(i.initialTarget))return;for(const n of this.targets)n.contains(i.initialTarget)&&(n.dispatchEvent(i),this.dispatched=!0)}}inertia(i,n,t,r,u,f,c,d,s){this.handle=L.scheduleAtNextAnimationFrame(i,()=>{const l=Date.now(),o=l-t;let g=0,h=0,m=!0;r+=b.SCROLL_FRICTION*o,c+=b.SCROLL_FRICTION*o,r>0&&(m=!1,g=u*r*o),c>0&&(m=!1,h=d*c*o);const C=this.newGestureEvent(v.Change);C.translationX=g,C.translationY=h,n.forEach(w=>w.dispatchEvent(C)),m||this.inertia(i,n,l,r,u,f+g,c,d,s+h)})}onTouchMove(i){const n=Date.now();for(let t=0,r=i.changedTouches.length;t<r;t++){const u=i.changedTouches.item(t);if(!this.activeTouches.hasOwnProperty(String(u.identifier))){console.warn(\"end of an UNKNOWN touch\",u);continue}const f=this.activeTouches[u.identifier],c=this.newGestureEvent(v.Change,f.initialTarget);c.translationX=u.pageX-y.tail(f.rollingPageX),c.translationY=u.pageY-y.tail(f.rollingPageY),c.pageX=u.pageX,c.pageY=u.pageY,this.dispatchEvent(c),f.rollingPageX.length>3&&(f.rollingPageX.shift(),f.rollingPageY.shift(),f.rollingTimestamps.shift()),f.rollingPageX.push(u.pageX),f.rollingPageY.push(u.pageY),f.rollingTimestamps.push(n)}this.dispatched&&(i.preventDefault(),i.stopPropagation(),this.dispatched=!1)}}e.Gesture=b,b.SCROLL_FRICTION=-.005,b.HOLD_DELAY=700,b.CLEAR_TAP_COUNT_TIME=400,ke([E.memoize],b,\"isTouchDevice\",null)}),define(se[48],oe([1,0,7,408]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.status=e.alert=e.setARIAContainer=void 0;const k=2e4;let y,E,S,p,_;function v(n){y=document.createElement(\"div\"),y.className=\"monaco-aria-container\";const t=()=>{const u=document.createElement(\"div\");return u.className=\"monaco-alert\",u.setAttribute(\"role\",\"alert\"),u.setAttribute(\"aria-atomic\",\"true\"),y.appendChild(u),u};E=t(),S=t();const r=()=>{const u=document.createElement(\"div\");return u.className=\"monaco-status\",u.setAttribute(\"aria-live\",\"polite\"),u.setAttribute(\"aria-atomic\",\"true\"),y.appendChild(u),u};p=r(),_=r(),n.appendChild(y)}e.setARIAContainer=v;function b(n){y&&(E.textContent!==n?(L.clearNode(S),i(E,n)):(L.clearNode(E),i(S,n)))}e.alert=b;function a(n){y&&(p.textContent!==n?(L.clearNode(_),i(p,n)):(L.clearNode(p),i(_,n)))}e.status=a;function i(n,t){L.clearNode(n),t.length>k&&(t=t.substr(0,k)),n.textContent=t,n.style.visibility=\"hidden\",n.style.visibility=\"visible\"}}),define(se[318],oe([1,0,219,7,2,17,172,412]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContextView=e.layout=e.LayoutAnchorMode=e.isAnchor=void 0;function p(i){const n=i;return!!n&&typeof n.x==\"number\"&&typeof n.y==\"number\"}e.isAnchor=p;var _;(function(i){i[i.AVOID=0]=\"AVOID\",i[i.ALIGN=1]=\"ALIGN\"})(_||(e.LayoutAnchorMode=_={}));function v(i,n,t){const r=t.mode===_.ALIGN?t.offset:t.offset+t.size,u=t.mode===_.ALIGN?t.offset+t.size:t.offset;return t.position===0?n<=i-r?r:n<=u?u-n:Math.max(i-n,0):n<=u?u-n:n<=i-r?r:0}e.layout=v;class b extends y.Disposable{constructor(n,t){super(),this.container=null,this.useFixedPosition=!1,this.useShadowDOM=!1,this.delegate=null,this.toDisposeOnClean=y.Disposable.None,this.toDisposeOnSetContainer=y.Disposable.None,this.shadowRoot=null,this.shadowRootHostElement=null,this.view=k.$(\".context-view\"),k.hide(this.view),this.setContainer(n,t),this._register((0,y.toDisposable)(()=>this.setContainer(null,1)))}setContainer(n,t){var r;this.useFixedPosition=t!==1;const u=this.useShadowDOM;if(this.useShadowDOM=t===3,!(n===this.container&&u===this.useShadowDOM)&&(this.container&&(this.toDisposeOnSetContainer.dispose(),this.shadowRoot?(this.shadowRoot.removeChild(this.view),this.shadowRoot=null,(r=this.shadowRootHostElement)===null||r===void 0||r.remove(),this.shadowRootHostElement=null):this.container.removeChild(this.view),this.container=null),n)){if(this.container=n,this.useShadowDOM){this.shadowRootHostElement=k.$(\".shadow-root-host\"),this.container.appendChild(this.shadowRootHostElement),this.shadowRoot=this.shadowRootHostElement.attachShadow({mode:\"open\"});const c=document.createElement(\"style\");c.textContent=a,this.shadowRoot.appendChild(c),this.shadowRoot.appendChild(this.view),this.shadowRoot.appendChild(k.$(\"slot\"))}else this.container.appendChild(this.view);const f=new y.DisposableStore;b.BUBBLE_UP_EVENTS.forEach(c=>{f.add(k.addStandardDisposableListener(this.container,c,d=>{this.onDOMEvent(d,!1)}))}),b.BUBBLE_DOWN_EVENTS.forEach(c=>{f.add(k.addStandardDisposableListener(this.container,c,d=>{this.onDOMEvent(d,!0)},!0))}),this.toDisposeOnSetContainer=f}}show(n){var t,r;this.isVisible()&&this.hide(),k.clearNode(this.view),this.view.className=\"context-view\",this.view.style.top=\"0px\",this.view.style.left=\"0px\",this.view.style.zIndex=\"2575\",this.view.style.position=this.useFixedPosition?\"fixed\":\"absolute\",k.show(this.view),this.toDisposeOnClean=n.render(this.view)||y.Disposable.None,this.delegate=n,this.doLayout(),(r=(t=this.delegate).focus)===null||r===void 0||r.call(t)}getViewElement(){return this.view}layout(){if(this.isVisible()){if(this.delegate.canRelayout===!1&&!(E.isIOS&&L.BrowserFeatures.pointerEvents)){this.hide();return}this.delegate.layout&&this.delegate.layout(),this.doLayout()}}doLayout(){if(!this.isVisible())return;const n=this.delegate.getAnchor();let t;if(n instanceof HTMLElement){const h=k.getDomNodePagePosition(n),m=k.getDomNodeZoomLevel(n);t={top:h.top*m,left:h.left*m,width:h.width*m,height:h.height*m}}else p(n)?t={top:n.y,left:n.x,width:n.width||1,height:n.height||2}:t={top:n.posy,left:n.posx,width:2,height:2};const r=k.getTotalWidth(this.view),u=k.getTotalHeight(this.view),f=this.delegate.anchorPosition||0,c=this.delegate.anchorAlignment||0,d=this.delegate.anchorAxisAlignment||0;let s,l;const o=k.getActiveWindow();if(d===0){const h={offset:t.top-o.pageYOffset,size:t.height,position:f===0?0:1},m={offset:t.left,size:t.width,position:c===0?0:1,mode:_.ALIGN};s=v(o.innerHeight,u,h)+o.pageYOffset,S.Range.intersects({start:s,end:s+u},{start:h.offset,end:h.offset+h.size})&&(m.mode=_.AVOID),l=v(o.innerWidth,r,m)}else{const h={offset:t.left,size:t.width,position:c===0?0:1},m={offset:t.top,size:t.height,position:f===0?0:1,mode:_.ALIGN};l=v(o.innerWidth,r,h),S.Range.intersects({start:l,end:l+r},{start:h.offset,end:h.offset+h.size})&&(m.mode=_.AVOID),s=v(o.innerHeight,u,m)+o.pageYOffset}this.view.classList.remove(\"top\",\"bottom\",\"left\",\"right\"),this.view.classList.add(f===0?\"bottom\":\"top\"),this.view.classList.add(c===0?\"left\":\"right\"),this.view.classList.toggle(\"fixed\",this.useFixedPosition);const g=k.getDomNodePagePosition(this.container);this.view.style.top=`${s-(this.useFixedPosition?k.getDomNodePagePosition(this.view).top:g.top)}px`,this.view.style.left=`${l-(this.useFixedPosition?k.getDomNodePagePosition(this.view).left:g.left)}px`,this.view.style.width=\"initial\"}hide(n){const t=this.delegate;this.delegate=null,t?.onHide&&t.onHide(n),this.toDisposeOnClean.dispose(),k.hide(this.view)}isVisible(){return!!this.delegate}onDOMEvent(n,t){this.delegate&&(this.delegate.onDOMEvent?this.delegate.onDOMEvent(n,k.getWindow(n).document.activeElement):t&&!k.isAncestor(n.target,this.container)&&this.hide())}dispose(){this.hide(),super.dispose()}}e.ContextView=b,b.BUBBLE_UP_EVENTS=[\"click\",\"keydown\",\"focus\",\"blur\"],b.BUBBLE_DOWN_EVENTS=[\"click\"];const a=`\n\t:host {\n\t\tall: initial; /* 1st rule so subsequent properties are reset. */\n\t}\n\n\t.codicon[class*='codicon-'] {\n\t\tfont: normal normal normal 16px/1 codicon;\n\t\tdisplay: inline-block;\n\t\ttext-decoration: none;\n\t\ttext-rendering: auto;\n\t\ttext-align: center;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t}\n\n\t:host {\n\t\tfont-family: -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", \"HelveticaNeue-Light\", system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif;\n\t}\n\n\t:host-context(.mac) { font-family: -apple-system, BlinkMacSystemFont, sans-serif; }\n\t:host-context(.mac:lang(zh-Hans)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang SC\", \"Hiragino Sans GB\", sans-serif; }\n\t:host-context(.mac:lang(zh-Hant)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang TC\", sans-serif; }\n\t:host-context(.mac:lang(ja)) { font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic Pro\", sans-serif; }\n\t:host-context(.mac:lang(ko)) { font-family: -apple-system, BlinkMacSystemFont, \"Nanum Gothic\", \"Apple SD Gothic Neo\", \"AppleGothic\", sans-serif; }\n\n\t:host-context(.windows) { font-family: \"Segoe WPC\", \"Segoe UI\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hans)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft YaHei\", sans-serif; }\n\t:host-context(.windows:lang(zh-Hant)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Microsoft Jhenghei\", sans-serif; }\n\t:host-context(.windows:lang(ja)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Yu Gothic UI\", \"Meiryo UI\", sans-serif; }\n\t:host-context(.windows:lang(ko)) { font-family: \"Segoe WPC\", \"Segoe UI\", \"Malgun Gothic\", \"Dotom\", sans-serif; }\n\n\t:host-context(.linux) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hans)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans SC\", \"Source Han Sans CN\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(zh-Hant)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans TC\", \"Source Han Sans TW\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ja)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans J\", \"Source Han Sans JP\", \"Source Han Sans\", sans-serif; }\n\t:host-context(.linux:lang(ko)) { font-family: system-ui, \"Ubuntu\", \"Droid Sans\", \"Source Han Sans K\", \"Source Han Sans JR\", \"Source Han Sans\", \"UnDotum\", \"FBaekmuk Gulim\", sans-serif; }\n`}),define(se[319],oe([1,0,7,11,413]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CountBadge=void 0;class y{constructor(S,p,_){this.options=p,this.styles=_,this.count=0,this.element=(0,L.append)(S,(0,L.$)(\".monaco-count-badge\")),this.countFormat=this.options.countFormat||\"{0}\",this.titleFormat=this.options.titleFormat||\"\",this.setCount(this.options.count||0)}setCount(S){this.count=S,this.render()}setTitleFormat(S){this.titleFormat=S,this.render()}render(){var S,p;this.element.textContent=(0,k.format)(this.countFormat,this.count),this.element.title=(0,k.format)(this.titleFormat,this.count),this.element.style.backgroundColor=(S=this.styles.badgeBackground)!==null&&S!==void 0?S:\"\",this.element.style.color=(p=this.styles.badgeForeground)!==null&&p!==void 0?p:\"\",this.styles.badgeBorder&&(this.element.style.border=`1px solid ${this.styles.badgeBorder}`)}}e.CountBadge=y}),define(se[588],oe([1,0,7,46,63,42,6,273]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DropdownMenu=void 0;class p extends E.ActionRunner{constructor(b,a){super(),this._onDidChangeVisibility=this._register(new S.Emitter),this.onDidChangeVisibility=this._onDidChangeVisibility.event,this._element=(0,L.append)(b,(0,L.$)(\".monaco-dropdown\")),this._label=(0,L.append)(this._element,(0,L.$)(\".dropdown-label\"));let i=a.labelRenderer;i||(i=t=>(t.textContent=a.label||\"\",null));for(const t of[L.EventType.CLICK,L.EventType.MOUSE_DOWN,y.EventType.Tap])this._register((0,L.addDisposableListener)(this.element,t,r=>L.EventHelper.stop(r,!0)));for(const t of[L.EventType.MOUSE_DOWN,y.EventType.Tap])this._register((0,L.addDisposableListener)(this._label,t,r=>{(0,L.isMouseEvent)(r)&&(r.detail>1||r.button!==0)||(this.visible?this.hide():this.show())}));this._register((0,L.addDisposableListener)(this._label,L.EventType.KEY_UP,t=>{const r=new k.StandardKeyboardEvent(t);(r.equals(3)||r.equals(10))&&(L.EventHelper.stop(t,!0),this.visible?this.hide():this.show())}));const n=i(this._label);n&&this._register(n),this._register(y.Gesture.addTarget(this._label))}get element(){return this._element}show(){this.visible||(this.visible=!0,this._onDidChangeVisibility.fire(!0))}hide(){this.visible&&(this.visible=!1,this._onDidChangeVisibility.fire(!1))}dispose(){super.dispose(),this.hide(),this.boxContainer&&(this.boxContainer.remove(),this.boxContainer=void 0),this.contents&&(this.contents.remove(),this.contents=void 0),this._label&&(this._label.remove(),this._label=void 0)}}class _ extends p{constructor(b,a){super(b,a),this._options=a,this._actions=[],this.actions=a.actions||[]}set menuOptions(b){this._menuOptions=b}get menuOptions(){return this._menuOptions}get actions(){return this._options.actionProvider?this._options.actionProvider.getActions():this._actions}set actions(b){this._actions=b}show(){super.show(),this.element.classList.add(\"active\"),this._options.contextMenuProvider.showContextMenu({getAnchor:()=>this.element,getActions:()=>this.actions,getActionsContext:()=>this.menuOptions?this.menuOptions.context:null,getActionViewItem:(b,a)=>this.menuOptions&&this.menuOptions.actionViewItemProvider?this.menuOptions.actionViewItemProvider(b,a):void 0,getKeyBinding:b=>this.menuOptions&&this.menuOptions.getKeyBinding?this.menuOptions.getKeyBinding(b):void 0,getMenuClassName:()=>this._options.menuClassName||\"\",onHide:()=>this.onHide(),actionRunner:this.menuOptions?this.menuOptions.actionRunner:void 0,anchorAlignment:this.menuOptions?this.menuOptions.anchorAlignment:0,domForShadowRoot:this._options.menuAsChild?this.element:void 0,skipTelemetry:this._options.skipTelemetry})}hide(){super.hide()}onHide(){this.hide(),this.element.classList.remove(\"active\")}}e.DropdownMenu=_}),define(se[118],oe([1,0,7,28]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.renderIcon=e.renderLabelWithIcons=void 0;const y=new RegExp(`(\\\\\\\\)?\\\\$\\\\((${k.ThemeIcon.iconNameExpression}(?:${k.ThemeIcon.iconModifierExpression})?)\\\\)`,\"g\");function E(p){const _=new Array;let v,b=0,a=0;for(;(v=y.exec(p))!==null;){a=v.index||0,b<a&&_.push(p.substring(b,a)),b=(v.index||0)+v[0].length;const[,i,n]=v;_.push(i?`$(${n})`:S({id:n}))}return b<p.length&&_.push(p.substring(b)),_}e.renderLabelWithIcons=E;function S(p){const _=L.$(\"span\");return _.classList.add(...k.ThemeIcon.asClassNameArray(p)),_}e.renderIcon=S}),define(se[320],oe([1,0,7,118,55]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HighlightedLabel=void 0;class E{constructor(p,_){var v;this.text=\"\",this.title=\"\",this.highlights=[],this.didEverRender=!1,this.supportIcons=(v=_?.supportIcons)!==null&&v!==void 0?v:!1,this.domNode=L.append(p,L.$(\"span.monaco-highlighted-label\"))}get element(){return this.domNode}set(p,_=[],v=\"\",b){p||(p=\"\"),b&&(p=E.escapeNewLines(p,_)),!(this.didEverRender&&this.text===p&&this.title===v&&y.equals(this.highlights,_))&&(this.text=p,this.title=v,this.highlights=_,this.render())}render(){const p=[];let _=0;for(const v of this.highlights){if(v.end===v.start)continue;if(_<v.start){const i=this.text.substring(_,v.start);this.supportIcons?p.push(...(0,k.renderLabelWithIcons)(i)):p.push(i),_=v.start}const b=this.text.substring(_,v.end),a=L.$(\"span.highlight\",void 0,...this.supportIcons?(0,k.renderLabelWithIcons)(b):[b]);v.extraClasses&&a.classList.add(...v.extraClasses),p.push(a),_=v.end}if(_<this.text.length){const v=this.text.substring(_);this.supportIcons?p.push(...(0,k.renderLabelWithIcons)(v)):p.push(v)}L.reset(this.domNode,...p),this.title?this.domNode.title=this.title:this.domNode.removeAttribute(\"title\"),this.didEverRender=!0}static escapeNewLines(p,_){let v=0,b=0;return p.replace(/\\r\\n|\\r|\\n/g,(a,i)=>{b=a===`\\r\n`?-1:0,i+=v;for(const n of _)n.end<=i||(n.start>=i&&(n.start+=b),n.end>=i&&(n.end+=b));return v+=b,\"\\u23CE\"})}}e.HighlightedLabel=E}),define(se[224],oe([1,0,7,218,55,573,417]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.KeybindingLabel=e.unthemedKeybindingLabelOptions=void 0;const S=L.$;e.unthemedKeybindingLabelOptions={keybindingLabelBackground:void 0,keybindingLabelForeground:void 0,keybindingLabelBorder:void 0,keybindingLabelBottomBorder:void 0,keybindingLabelShadow:void 0};class p{constructor(v,b,a){this.os=b,this.keyElements=new Set,this.options=a||Object.create(null);const i=this.options.keybindingLabelForeground;this.domNode=L.append(v,S(\".monaco-keybinding\")),i&&(this.domNode.style.color=i),this.didEverRender=!1,v.appendChild(this.domNode)}get element(){return this.domNode}set(v,b){this.didEverRender&&this.keybinding===v&&p.areSame(this.matches,b)||(this.keybinding=v,this.matches=b,this.render())}render(){var v;if(this.clear(),this.keybinding){const b=this.keybinding.getChords();b[0]&&this.renderChord(this.domNode,b[0],this.matches?this.matches.firstPart:null);for(let i=1;i<b.length;i++)L.append(this.domNode,S(\"span.monaco-keybinding-key-chord-separator\",void 0,\" \")),this.renderChord(this.domNode,b[i],this.matches?this.matches.chordPart:null);const a=(v=this.options.disableTitle)!==null&&v!==void 0&&v?void 0:this.keybinding.getAriaLabel()||void 0;a!==void 0?this.domNode.title=a:this.domNode.removeAttribute(\"title\")}else this.options&&this.options.renderUnboundKeybindings&&this.renderUnbound(this.domNode);this.didEverRender=!0}clear(){L.clearNode(this.domNode),this.keyElements.clear()}renderChord(v,b,a){const i=k.UILabelProvider.modifierLabels[this.os];b.ctrlKey&&this.renderKey(v,i.ctrlKey,!!a?.ctrlKey,i.separator),b.shiftKey&&this.renderKey(v,i.shiftKey,!!a?.shiftKey,i.separator),b.altKey&&this.renderKey(v,i.altKey,!!a?.altKey,i.separator),b.metaKey&&this.renderKey(v,i.metaKey,!!a?.metaKey,i.separator);const n=b.keyLabel;n&&this.renderKey(v,n,!!a?.keyCode,\"\")}renderKey(v,b,a,i){L.append(v,this.createKeyElement(b,a?\".highlight\":\"\")),i&&L.append(v,S(\"span.monaco-keybinding-key-separator\",void 0,i))}renderUnbound(v){L.append(v,this.createKeyElement((0,E.localize)(0,null)))}createKeyElement(v,b=\"\"){const a=S(\"span.monaco-keybinding-key\"+b,void 0,v);return this.keyElements.add(a),this.options.keybindingLabelBackground&&(a.style.backgroundColor=this.options.keybindingLabelBackground),this.options.keybindingLabelBorder&&(a.style.borderColor=this.options.keybindingLabelBorder),this.options.keybindingLabelBottomBorder&&(a.style.borderBottomColor=this.options.keybindingLabelBottomBorder),this.options.keybindingLabelShadow&&(a.style.boxShadow=`inset 0 -1px 0 ${this.options.keybindingLabelShadow}`),a}static areSame(v,b){return v===b||!v&&!b?!0:!!v&&!!b&&(0,y.equals)(v.firstPart,b.firstPart)&&(0,y.equals)(v.chordPart,b.chordPart)}}e.KeybindingLabel=p}),define(se[589],oe([1,0,7]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RowCache=void 0;function k(E){var S;try{(S=E.parentElement)===null||S===void 0||S.removeChild(E)}catch{}}class y{constructor(S){this.renderers=S,this.cache=new Map,this.transactionNodesPendingRemoval=new Set,this.inTransaction=!1}alloc(S){let p=this.getTemplateCache(S).pop(),_=!1;if(p)_=this.transactionNodesPendingRemoval.has(p.domNode),_&&this.transactionNodesPendingRemoval.delete(p.domNode);else{const v=(0,L.$)(\".monaco-list-row\"),a=this.getRenderer(S).renderTemplate(v);p={domNode:v,templateId:S,templateData:a}}return{row:p,isReusingConnectedDomNode:_}}release(S){S&&this.releaseRow(S)}transact(S){if(this.inTransaction)throw new Error(\"Already in transaction\");this.inTransaction=!0;try{S()}finally{for(const p of this.transactionNodesPendingRemoval)this.doRemoveNode(p);this.transactionNodesPendingRemoval.clear(),this.inTransaction=!1}}releaseRow(S){const{domNode:p,templateId:_}=S;p&&(this.inTransaction?this.transactionNodesPendingRemoval.add(p):this.doRemoveNode(p)),this.getTemplateCache(_).push(S)}doRemoveNode(S){S.classList.remove(\"scrolling\"),k(S)}getTemplateCache(S){let p=this.cache.get(S);return p||(p=[],this.cache.set(S,p)),p}dispose(){this.cache.forEach((S,p)=>{for(const _ of S)this.getRenderer(p).disposeTemplate(_.templateData),_.templateData=null}),this.cache.clear(),this.transactionNodesPendingRemoval.clear()}getRenderer(S){const p=this.renderers.get(S);if(!p)throw new Error(`No renderer found for ${S}`);return p}}e.RowCache=y}),define(se[590],oe([1,0,7,14,2,419]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ProgressBar=void 0;const E=\"done\",S=\"active\",p=\"infinite\",_=\"infinite-long-running\",v=\"discrete\";class b extends y.Disposable{constructor(i,n){super(),this.workedVal=0,this.showDelayedScheduler=this._register(new k.RunOnceScheduler(()=>(0,L.show)(this.element),0)),this.longRunningScheduler=this._register(new k.RunOnceScheduler(()=>this.infiniteLongRunning(),b.LONG_RUNNING_INFINITE_THRESHOLD)),this.create(i,n)}create(i,n){this.element=document.createElement(\"div\"),this.element.classList.add(\"monaco-progress-container\"),this.element.setAttribute(\"role\",\"progressbar\"),this.element.setAttribute(\"aria-valuemin\",\"0\"),i.appendChild(this.element),this.bit=document.createElement(\"div\"),this.bit.classList.add(\"progress-bit\"),this.bit.style.backgroundColor=n?.progressBarBackground||\"#0E70C0\",this.element.appendChild(this.bit)}off(){this.bit.style.width=\"inherit\",this.bit.style.opacity=\"1\",this.element.classList.remove(S,p,_,v),this.workedVal=0,this.totalWork=void 0,this.longRunningScheduler.cancel()}stop(){return this.doDone(!1)}doDone(i){return this.element.classList.add(E),this.element.classList.contains(p)?(this.bit.style.opacity=\"0\",i?setTimeout(()=>this.off(),200):this.off()):(this.bit.style.width=\"inherit\",i?setTimeout(()=>this.off(),200):this.off()),this}infinite(){return this.bit.style.width=\"2%\",this.bit.style.opacity=\"1\",this.element.classList.remove(v,E,_),this.element.classList.add(S,p),this.longRunningScheduler.schedule(),this}infiniteLongRunning(){this.element.classList.add(_)}getContainer(){return this.element}}e.ProgressBar=b,b.LONG_RUNNING_INFINITE_THRESHOLD=1e4}),define(se[158],oe([1,0,7,84,63,14,107,6,2,17,420]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Sash=e.OrthogonalEdge=void 0;const b=!1;var a;(function(l){l.North=\"north\",l.South=\"south\",l.East=\"east\",l.West=\"west\"})(a||(e.OrthogonalEdge=a={}));let i=4;const n=new p.Emitter;let t=300;const r=new p.Emitter;class u{constructor(o){this.el=o,this.disposables=new _.DisposableStore}get onPointerMove(){return this.disposables.add(new k.DomEmitter((0,L.getWindow)(this.el),\"mousemove\")).event}get onPointerUp(){return this.disposables.add(new k.DomEmitter((0,L.getWindow)(this.el),\"mouseup\")).event}dispose(){this.disposables.dispose()}}ke([S.memoize],u.prototype,\"onPointerMove\",null),ke([S.memoize],u.prototype,\"onPointerUp\",null);class f{get onPointerMove(){return this.disposables.add(new k.DomEmitter(this.el,y.EventType.Change)).event}get onPointerUp(){return this.disposables.add(new k.DomEmitter(this.el,y.EventType.End)).event}constructor(o){this.el=o,this.disposables=new _.DisposableStore}dispose(){this.disposables.dispose()}}ke([S.memoize],f.prototype,\"onPointerMove\",null),ke([S.memoize],f.prototype,\"onPointerUp\",null);class c{get onPointerMove(){return this.factory.onPointerMove}get onPointerUp(){return this.factory.onPointerUp}constructor(o){this.factory=o}dispose(){}}ke([S.memoize],c.prototype,\"onPointerMove\",null),ke([S.memoize],c.prototype,\"onPointerUp\",null);const d=\"pointer-events-disabled\";class s extends _.Disposable{get state(){return this._state}get orthogonalStartSash(){return this._orthogonalStartSash}get orthogonalEndSash(){return this._orthogonalEndSash}set state(o){this._state!==o&&(this.el.classList.toggle(\"disabled\",o===0),this.el.classList.toggle(\"minimum\",o===1),this.el.classList.toggle(\"maximum\",o===2),this._state=o,this.onDidEnablementChange.fire(o))}set orthogonalStartSash(o){if(this._orthogonalStartSash!==o){if(this.orthogonalStartDragHandleDisposables.clear(),this.orthogonalStartSashDisposables.clear(),o){const g=h=>{this.orthogonalStartDragHandleDisposables.clear(),h!==0&&(this._orthogonalStartDragHandle=(0,L.append)(this.el,(0,L.$)(\".orthogonal-drag-handle.start\")),this.orthogonalStartDragHandleDisposables.add((0,_.toDisposable)(()=>this._orthogonalStartDragHandle.remove())),this.orthogonalStartDragHandleDisposables.add(new k.DomEmitter(this._orthogonalStartDragHandle,\"mouseenter\")).event(()=>s.onMouseEnter(o),void 0,this.orthogonalStartDragHandleDisposables),this.orthogonalStartDragHandleDisposables.add(new k.DomEmitter(this._orthogonalStartDragHandle,\"mouseleave\")).event(()=>s.onMouseLeave(o),void 0,this.orthogonalStartDragHandleDisposables))};this.orthogonalStartSashDisposables.add(o.onDidEnablementChange.event(g,this)),g(o.state)}this._orthogonalStartSash=o}}set orthogonalEndSash(o){if(this._orthogonalEndSash!==o){if(this.orthogonalEndDragHandleDisposables.clear(),this.orthogonalEndSashDisposables.clear(),o){const g=h=>{this.orthogonalEndDragHandleDisposables.clear(),h!==0&&(this._orthogonalEndDragHandle=(0,L.append)(this.el,(0,L.$)(\".orthogonal-drag-handle.end\")),this.orthogonalEndDragHandleDisposables.add((0,_.toDisposable)(()=>this._orthogonalEndDragHandle.remove())),this.orthogonalEndDragHandleDisposables.add(new k.DomEmitter(this._orthogonalEndDragHandle,\"mouseenter\")).event(()=>s.onMouseEnter(o),void 0,this.orthogonalEndDragHandleDisposables),this.orthogonalEndDragHandleDisposables.add(new k.DomEmitter(this._orthogonalEndDragHandle,\"mouseleave\")).event(()=>s.onMouseLeave(o),void 0,this.orthogonalEndDragHandleDisposables))};this.orthogonalEndSashDisposables.add(o.onDidEnablementChange.event(g,this)),g(o.state)}this._orthogonalEndSash=o}}constructor(o,g,h){super(),this.hoverDelay=t,this.hoverDelayer=this._register(new E.Delayer(this.hoverDelay)),this._state=3,this.onDidEnablementChange=this._register(new p.Emitter),this._onDidStart=this._register(new p.Emitter),this._onDidChange=this._register(new p.Emitter),this._onDidReset=this._register(new p.Emitter),this._onDidEnd=this._register(new p.Emitter),this.orthogonalStartSashDisposables=this._register(new _.DisposableStore),this.orthogonalStartDragHandleDisposables=this._register(new _.DisposableStore),this.orthogonalEndSashDisposables=this._register(new _.DisposableStore),this.orthogonalEndDragHandleDisposables=this._register(new _.DisposableStore),this.onDidStart=this._onDidStart.event,this.onDidChange=this._onDidChange.event,this.onDidReset=this._onDidReset.event,this.onDidEnd=this._onDidEnd.event,this.linkedSash=void 0,this.el=(0,L.append)(o,(0,L.$)(\".monaco-sash\")),h.orthogonalEdge&&this.el.classList.add(`orthogonal-edge-${h.orthogonalEdge}`),v.isMacintosh&&this.el.classList.add(\"mac\");const m=this._register(new k.DomEmitter(this.el,\"mousedown\")).event;this._register(m(P=>this.onPointerStart(P,new u(o)),this));const C=this._register(new k.DomEmitter(this.el,\"dblclick\")).event;this._register(C(this.onPointerDoublePress,this));const w=this._register(new k.DomEmitter(this.el,\"mouseenter\")).event;this._register(w(()=>s.onMouseEnter(this)));const D=this._register(new k.DomEmitter(this.el,\"mouseleave\")).event;this._register(D(()=>s.onMouseLeave(this))),this._register(y.Gesture.addTarget(this.el));const I=this._register(new k.DomEmitter(this.el,y.EventType.Start)).event;this._register(I(P=>this.onPointerStart(P,new f(this.el)),this));const T=this._register(new k.DomEmitter(this.el,y.EventType.Tap)).event;let A;this._register(T(P=>{if(A){clearTimeout(A),A=void 0,this.onPointerDoublePress(P);return}clearTimeout(A),A=setTimeout(()=>A=void 0,250)},this)),typeof h.size==\"number\"?(this.size=h.size,h.orientation===0?this.el.style.width=`${this.size}px`:this.el.style.height=`${this.size}px`):(this.size=i,this._register(n.event(P=>{this.size=P,this.layout()}))),this._register(r.event(P=>this.hoverDelay=P)),this.layoutProvider=g,this.orthogonalStartSash=h.orthogonalStartSash,this.orthogonalEndSash=h.orthogonalEndSash,this.orientation=h.orientation||0,this.orientation===1?(this.el.classList.add(\"horizontal\"),this.el.classList.remove(\"vertical\")):(this.el.classList.remove(\"horizontal\"),this.el.classList.add(\"vertical\")),this.el.classList.toggle(\"debug\",b),this.layout()}onPointerStart(o,g){L.EventHelper.stop(o);let h=!1;if(!o.__orthogonalSashEvent){const R=this.getOrthogonalSash(o);R&&(h=!0,o.__orthogonalSashEvent=!0,R.onPointerStart(o,new c(g)))}if(this.linkedSash&&!o.__linkedSashEvent&&(o.__linkedSashEvent=!0,this.linkedSash.onPointerStart(o,new c(g))),!this.state)return;const m=this.el.ownerDocument.getElementsByTagName(\"iframe\");for(const R of m)R.classList.add(d);const C=o.pageX,w=o.pageY,D=o.altKey,I={startX:C,currentX:C,startY:w,currentY:w,altKey:D};this.el.classList.add(\"active\"),this._onDidStart.fire(I);const T=(0,L.createStyleSheet)(this.el),A=()=>{let R=\"\";h?R=\"all-scroll\":this.orientation===1?this.state===1?R=\"s-resize\":this.state===2?R=\"n-resize\":R=v.isMacintosh?\"row-resize\":\"ns-resize\":this.state===1?R=\"e-resize\":this.state===2?R=\"w-resize\":R=v.isMacintosh?\"col-resize\":\"ew-resize\",T.textContent=`* { cursor: ${R} !important; }`},P=new _.DisposableStore;A(),h||this.onDidEnablementChange.event(A,null,P);const N=R=>{L.EventHelper.stop(R,!1);const x={startX:C,currentX:R.pageX,startY:w,currentY:R.pageY,altKey:D};this._onDidChange.fire(x)},M=R=>{L.EventHelper.stop(R,!1),this.el.removeChild(T),this.el.classList.remove(\"active\"),this._onDidEnd.fire(),P.dispose();for(const x of m)x.classList.remove(d)};g.onPointerMove(N,null,P),g.onPointerUp(M,null,P),P.add(g)}onPointerDoublePress(o){const g=this.getOrthogonalSash(o);g&&g._onDidReset.fire(),this.linkedSash&&this.linkedSash._onDidReset.fire(),this._onDidReset.fire()}static onMouseEnter(o,g=!1){o.el.classList.contains(\"active\")?(o.hoverDelayer.cancel(),o.el.classList.add(\"hover\")):o.hoverDelayer.trigger(()=>o.el.classList.add(\"hover\"),o.hoverDelay).then(void 0,()=>{}),!g&&o.linkedSash&&s.onMouseEnter(o.linkedSash,!0)}static onMouseLeave(o,g=!1){o.hoverDelayer.cancel(),o.el.classList.remove(\"hover\"),!g&&o.linkedSash&&s.onMouseLeave(o.linkedSash,!0)}clearSashHoverState(){s.onMouseLeave(this)}layout(){if(this.orientation===0){const o=this.layoutProvider;this.el.style.left=o.getVerticalSashLeft(this)-this.size/2+\"px\",o.getVerticalSashTop&&(this.el.style.top=o.getVerticalSashTop(this)+\"px\"),o.getVerticalSashHeight&&(this.el.style.height=o.getVerticalSashHeight(this)+\"px\")}else{const o=this.layoutProvider;this.el.style.top=o.getHorizontalSashTop(this)-this.size/2+\"px\",o.getHorizontalSashLeft&&(this.el.style.left=o.getHorizontalSashLeft(this)+\"px\"),o.getHorizontalSashWidth&&(this.el.style.width=o.getHorizontalSashWidth(this)+\"px\")}}getOrthogonalSash(o){var g;const h=(g=o.initialTarget)!==null&&g!==void 0?g:o.target;if(!(!h||!(h instanceof HTMLElement))&&h.classList.contains(\"orthogonal-drag-handle\"))return h.classList.contains(\"start\")?this.orthogonalStartSash:this.orthogonalEndSash}dispose(){super.dispose(),this.el.remove()}}e.Sash=s}),define(se[225],oe([1,0,7,158,6,2]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ResizableHTMLElement=void 0;class S{constructor(){this._onDidWillResize=new y.Emitter,this.onDidWillResize=this._onDidWillResize.event,this._onDidResize=new y.Emitter,this.onDidResize=this._onDidResize.event,this._sashListener=new E.DisposableStore,this._size=new L.Dimension(0,0),this._minSize=new L.Dimension(0,0),this._maxSize=new L.Dimension(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),this.domNode=document.createElement(\"div\"),this._eastSash=new k.Sash(this.domNode,{getVerticalSashLeft:()=>this._size.width},{orientation:0}),this._westSash=new k.Sash(this.domNode,{getVerticalSashLeft:()=>0},{orientation:0}),this._northSash=new k.Sash(this.domNode,{getHorizontalSashTop:()=>0},{orientation:1,orthogonalEdge:k.OrthogonalEdge.North}),this._southSash=new k.Sash(this.domNode,{getHorizontalSashTop:()=>this._size.height},{orientation:1,orthogonalEdge:k.OrthogonalEdge.South}),this._northSash.orthogonalStartSash=this._westSash,this._northSash.orthogonalEndSash=this._eastSash,this._southSash.orthogonalStartSash=this._westSash,this._southSash.orthogonalEndSash=this._eastSash;let _,v=0,b=0;this._sashListener.add(y.Event.any(this._northSash.onDidStart,this._eastSash.onDidStart,this._southSash.onDidStart,this._westSash.onDidStart)(()=>{_===void 0&&(this._onDidWillResize.fire(),_=this._size,v=0,b=0)})),this._sashListener.add(y.Event.any(this._northSash.onDidEnd,this._eastSash.onDidEnd,this._southSash.onDidEnd,this._westSash.onDidEnd)(()=>{_!==void 0&&(_=void 0,v=0,b=0,this._onDidResize.fire({dimension:this._size,done:!0}))})),this._sashListener.add(this._eastSash.onDidChange(a=>{_&&(b=a.currentX-a.startX,this.layout(_.height+v,_.width+b),this._onDidResize.fire({dimension:this._size,done:!1,east:!0}))})),this._sashListener.add(this._westSash.onDidChange(a=>{_&&(b=-(a.currentX-a.startX),this.layout(_.height+v,_.width+b),this._onDidResize.fire({dimension:this._size,done:!1,west:!0}))})),this._sashListener.add(this._northSash.onDidChange(a=>{_&&(v=-(a.currentY-a.startY),this.layout(_.height+v,_.width+b),this._onDidResize.fire({dimension:this._size,done:!1,north:!0}))})),this._sashListener.add(this._southSash.onDidChange(a=>{_&&(v=a.currentY-a.startY,this.layout(_.height+v,_.width+b),this._onDidResize.fire({dimension:this._size,done:!1,south:!0}))})),this._sashListener.add(y.Event.any(this._eastSash.onDidReset,this._westSash.onDidReset)(a=>{this._preferredSize&&(this.layout(this._size.height,this._preferredSize.width),this._onDidResize.fire({dimension:this._size,done:!0}))})),this._sashListener.add(y.Event.any(this._northSash.onDidReset,this._southSash.onDidReset)(a=>{this._preferredSize&&(this.layout(this._preferredSize.height,this._size.width),this._onDidResize.fire({dimension:this._size,done:!0}))}))}dispose(){this._northSash.dispose(),this._southSash.dispose(),this._eastSash.dispose(),this._westSash.dispose(),this._sashListener.dispose(),this._onDidResize.dispose(),this._onDidWillResize.dispose(),this.domNode.remove()}enableSashes(_,v,b,a){this._northSash.state=_?3:0,this._eastSash.state=v?3:0,this._southSash.state=b?3:0,this._westSash.state=a?3:0}layout(_=this.size.height,v=this.size.width){const{height:b,width:a}=this._minSize,{height:i,width:n}=this._maxSize;_=Math.max(b,Math.min(i,_)),v=Math.max(a,Math.min(n,v));const t=new L.Dimension(v,_);L.Dimension.equals(t,this._size)||(this.domNode.style.height=_+\"px\",this.domNode.style.width=v+\"px\",this._size=t,this._northSash.layout(),this._eastSash.layout(),this._southSash.layout(),this._westSash.layout())}clearSashHoverState(){this._eastSash.clearSashHoverState(),this._westSash.clearSashHoverState(),this._northSash.clearSashHoverState(),this._southSash.clearSashHoverState()}get size(){return this._size}set maxSize(_){this._maxSize=_}get maxSize(){return this._maxSize}set minSize(_){this._minSize=_}get minSize(){return this._minSize}set preferredSize(_){this._preferredSize=_}get preferredSize(){return this._preferredSize}}e.ResizableHTMLElement=S}),define(se[591],oe([1,0,7,63,13,6,2,17]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectBoxNative=void 0;class _ extends S.Disposable{constructor(b,a,i,n){super(),this.selected=0,this.selectBoxOptions=n||Object.create(null),this.options=[],this.selectElement=document.createElement(\"select\"),this.selectElement.className=\"monaco-select-box\",typeof this.selectBoxOptions.ariaLabel==\"string\"&&this.selectElement.setAttribute(\"aria-label\",this.selectBoxOptions.ariaLabel),typeof this.selectBoxOptions.ariaDescription==\"string\"&&this.selectElement.setAttribute(\"aria-description\",this.selectBoxOptions.ariaDescription),this._onDidSelect=this._register(new E.Emitter),this.styles=i,this.registerListeners(),this.setOptions(b,a)}registerListeners(){this._register(k.Gesture.addTarget(this.selectElement)),[k.EventType.Tap].forEach(b=>{this._register(L.addDisposableListener(this.selectElement,b,a=>{this.selectElement.focus()}))}),this._register(L.addStandardDisposableListener(this.selectElement,\"click\",b=>{L.EventHelper.stop(b,!0)})),this._register(L.addStandardDisposableListener(this.selectElement,\"change\",b=>{this.selectElement.title=b.target.value,this._onDidSelect.fire({index:b.target.selectedIndex,selected:b.target.value})})),this._register(L.addStandardDisposableListener(this.selectElement,\"keydown\",b=>{let a=!1;p.isMacintosh?(b.keyCode===18||b.keyCode===16||b.keyCode===10)&&(a=!0):(b.keyCode===18&&b.altKey||b.keyCode===10||b.keyCode===3)&&(a=!0),a&&b.stopPropagation()}))}get onDidSelect(){return this._onDidSelect.event}setOptions(b,a){(!this.options||!y.equals(this.options,b))&&(this.options=b,this.selectElement.options.length=0,this.options.forEach((i,n)=>{this.selectElement.add(this.createOption(i.text,n,i.isDisabled))})),a!==void 0&&this.select(a)}select(b){this.options.length===0?this.selected=0:b>=0&&b<this.options.length?this.selected=b:b>this.options.length-1?this.select(this.options.length-1):this.selected<0&&(this.selected=0),this.selectElement.selectedIndex=this.selected,this.selected<this.options.length&&typeof this.options[this.selected].text==\"string\"?this.selectElement.title=this.options[this.selected].text:this.selectElement.title=\"\"}focus(){this.selectElement&&(this.selectElement.tabIndex=0,this.selectElement.focus())}blur(){this.selectElement&&(this.selectElement.tabIndex=-1,this.selectElement.blur())}setFocusable(b){this.selectElement.tabIndex=b?0:-1}render(b){b.classList.add(\"select-container\"),b.appendChild(this.selectElement),this.setOptions(this.options,this.selected),this.applyStyles()}applyStyles(){var b,a,i;this.selectElement&&(this.selectElement.style.backgroundColor=(b=this.styles.selectBackground)!==null&&b!==void 0?b:\"\",this.selectElement.style.color=(a=this.styles.selectForeground)!==null&&a!==void 0?a:\"\",this.selectElement.style.borderColor=(i=this.styles.selectBorder)!==null&&i!==void 0?i:\"\")}createOption(b,a,i){const n=document.createElement(\"option\");return n.value=b,n.text=b,n.disabled=!!i,n}}e.SelectBoxNative=_}),define(se[76],oe([1,0,7,46,67,63,2]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Widget=void 0;class p extends S.Disposable{onclick(v,b){this._register(L.addDisposableListener(v,L.EventType.CLICK,a=>b(new y.StandardMouseEvent(L.getWindow(v),a))))}onmousedown(v,b){this._register(L.addDisposableListener(v,L.EventType.MOUSE_DOWN,a=>b(new y.StandardMouseEvent(L.getWindow(v),a))))}onmouseover(v,b){this._register(L.addDisposableListener(v,L.EventType.MOUSE_OVER,a=>b(new y.StandardMouseEvent(L.getWindow(v),a))))}onmouseleave(v,b){this._register(L.addDisposableListener(v,L.EventType.MOUSE_LEAVE,a=>b(new y.StandardMouseEvent(L.getWindow(v),a))))}onkeydown(v,b){this._register(L.addDisposableListener(v,L.EventType.KEY_DOWN,a=>b(new k.StandardKeyboardEvent(a))))}onkeyup(v,b){this._register(L.addDisposableListener(v,L.EventType.KEY_UP,a=>b(new k.StandardKeyboardEvent(a))))}oninput(v,b){this._register(L.addDisposableListener(v,L.EventType.INPUT,b))}onblur(v,b){this._register(L.addDisposableListener(v,L.EventType.BLUR,b))}onfocus(v,b){this._register(L.addDisposableListener(v,L.EventType.FOCUS,b))}ignoreGesture(v){return E.Gesture.ignoreTarget(v)}}e.Widget=p}),define(se[226],oe([1,0,157,76,14,28,7]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ScrollbarArrow=e.ARROW_IMG_SIZE=void 0,e.ARROW_IMG_SIZE=11;class p extends k.Widget{constructor(v){super(),this._onActivate=v.onActivate,this.bgDomNode=document.createElement(\"div\"),this.bgDomNode.className=\"arrow-background\",this.bgDomNode.style.position=\"absolute\",this.bgDomNode.style.width=v.bgWidth+\"px\",this.bgDomNode.style.height=v.bgHeight+\"px\",typeof v.top<\"u\"&&(this.bgDomNode.style.top=\"0px\"),typeof v.left<\"u\"&&(this.bgDomNode.style.left=\"0px\"),typeof v.bottom<\"u\"&&(this.bgDomNode.style.bottom=\"0px\"),typeof v.right<\"u\"&&(this.bgDomNode.style.right=\"0px\"),this.domNode=document.createElement(\"div\"),this.domNode.className=v.className,this.domNode.classList.add(...E.ThemeIcon.asClassNameArray(v.icon)),this.domNode.style.position=\"absolute\",this.domNode.style.width=e.ARROW_IMG_SIZE+\"px\",this.domNode.style.height=e.ARROW_IMG_SIZE+\"px\",typeof v.top<\"u\"&&(this.domNode.style.top=v.top+\"px\"),typeof v.left<\"u\"&&(this.domNode.style.left=v.left+\"px\"),typeof v.bottom<\"u\"&&(this.domNode.style.bottom=v.bottom+\"px\"),typeof v.right<\"u\"&&(this.domNode.style.right=v.right+\"px\"),this._pointerMoveMonitor=this._register(new L.GlobalPointerMoveMonitor),this._register(S.addStandardDisposableListener(this.bgDomNode,S.EventType.POINTER_DOWN,b=>this._arrowPointerDown(b))),this._register(S.addStandardDisposableListener(this.domNode,S.EventType.POINTER_DOWN,b=>this._arrowPointerDown(b))),this._pointerdownRepeatTimer=this._register(new S.WindowIntervalTimer),this._pointerdownScheduleRepeatTimer=this._register(new y.TimeoutTimer)}_arrowPointerDown(v){if(!v.target||!(v.target instanceof Element))return;const b=()=>{this._pointerdownRepeatTimer.cancelAndSet(()=>this._onActivate(),1e3/24,S.getWindow(v))};this._onActivate(),this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancelAndSet(b,200),this._pointerMoveMonitor.startMonitoring(v.target,v.pointerId,v.buttons,a=>{},()=>{this._pointerdownRepeatTimer.cancel(),this._pointerdownScheduleRepeatTimer.cancel()}),v.preventDefault()}}e.ScrollbarArrow=p}),define(se[321],oe([1,0,7,40,157,226,583,76,17]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractScrollbar=void 0;const v=140;class b extends p.Widget{constructor(i){super(),this._lazyRender=i.lazyRender,this._host=i.host,this._scrollable=i.scrollable,this._scrollByPage=i.scrollByPage,this._scrollbarState=i.scrollbarState,this._visibilityController=this._register(new S.ScrollbarVisibilityController(i.visibility,\"visible scrollbar \"+i.extraScrollbarClassName,\"invisible scrollbar \"+i.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._pointerMoveMonitor=this._register(new y.GlobalPointerMoveMonitor),this._shouldRender=!0,this.domNode=(0,k.createFastDomNode)(document.createElement(\"div\")),this.domNode.setAttribute(\"role\",\"presentation\"),this.domNode.setAttribute(\"aria-hidden\",\"true\"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition(\"absolute\"),this._register(L.addDisposableListener(this.domNode.domNode,L.EventType.POINTER_DOWN,n=>this._domNodePointerDown(n)))}_createArrow(i){const n=this._register(new E.ScrollbarArrow(i));this.domNode.domNode.appendChild(n.bgDomNode),this.domNode.domNode.appendChild(n.domNode)}_createSlider(i,n,t,r){this.slider=(0,k.createFastDomNode)(document.createElement(\"div\")),this.slider.setClassName(\"slider\"),this.slider.setPosition(\"absolute\"),this.slider.setTop(i),this.slider.setLeft(n),typeof t==\"number\"&&this.slider.setWidth(t),typeof r==\"number\"&&this.slider.setHeight(r),this.slider.setLayerHinting(!0),this.slider.setContain(\"strict\"),this.domNode.domNode.appendChild(this.slider.domNode),this._register(L.addDisposableListener(this.slider.domNode,L.EventType.POINTER_DOWN,u=>{u.button===0&&(u.preventDefault(),this._sliderPointerDown(u))})),this.onclick(this.slider.domNode,u=>{u.leftButton&&u.stopPropagation()})}_onElementSize(i){return this._scrollbarState.setVisibleSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollSize(i){return this._scrollbarState.setScrollSize(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollPosition(i){return this._scrollbarState.setScrollPosition(i)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodePointerDown(i){i.target===this.domNode.domNode&&this._onPointerDown(i)}delegatePointerDown(i){const n=this.domNode.domNode.getClientRects()[0].top,t=n+this._scrollbarState.getSliderPosition(),r=n+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),u=this._sliderPointerPosition(i);t<=u&&u<=r?i.button===0&&(i.preventDefault(),this._sliderPointerDown(i)):this._onPointerDown(i)}_onPointerDown(i){let n,t;if(i.target===this.domNode.domNode&&typeof i.offsetX==\"number\"&&typeof i.offsetY==\"number\")n=i.offsetX,t=i.offsetY;else{const u=L.getDomNodePagePosition(this.domNode.domNode);n=i.pageX-u.left,t=i.pageY-u.top}const r=this._pointerDownRelativePosition(n,t);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(r):this._scrollbarState.getDesiredScrollPositionFromOffset(r)),i.button===0&&(i.preventDefault(),this._sliderPointerDown(i))}_sliderPointerDown(i){if(!i.target||!(i.target instanceof Element))return;const n=this._sliderPointerPosition(i),t=this._sliderOrthogonalPointerPosition(i),r=this._scrollbarState.clone();this.slider.toggleClassName(\"active\",!0),this._pointerMoveMonitor.startMonitoring(i.target,i.pointerId,i.buttons,u=>{const f=this._sliderOrthogonalPointerPosition(u),c=Math.abs(f-t);if(_.isWindows&&c>v){this._setDesiredScrollPositionNow(r.getScrollPosition());return}const s=this._sliderPointerPosition(u)-n;this._setDesiredScrollPositionNow(r.getDesiredScrollPositionFromDelta(s))},()=>{this.slider.toggleClassName(\"active\",!1),this._host.onDragEnd()}),this._host.onDragStart()}_setDesiredScrollPositionNow(i){const n={};this.writeScrollPosition(n,i),this._scrollable.setScrollPositionNow(n)}updateScrollbarSize(i){this._updateScrollbarSize(i),this._scrollbarState.setScrollbarSize(i),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}}e.AbstractScrollbar=b}),define(se[592],oe([1,0,67,321,226,197,26]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HorizontalScrollbar=void 0;class p extends k.AbstractScrollbar{constructor(v,b,a){const i=v.getScrollDimensions(),n=v.getCurrentScrollPosition();if(super({lazyRender:b.lazyRender,host:a,scrollbarState:new E.ScrollbarState(b.horizontalHasArrows?b.arrowSize:0,b.horizontal===2?0:b.horizontalScrollbarSize,b.vertical===2?0:b.verticalScrollbarSize,i.width,i.scrollWidth,n.scrollLeft),visibility:b.horizontal,extraScrollbarClassName:\"horizontal\",scrollable:v,scrollByPage:b.scrollByPage}),b.horizontalHasArrows){const t=(b.arrowSize-y.ARROW_IMG_SIZE)/2,r=(b.horizontalScrollbarSize-y.ARROW_IMG_SIZE)/2;this._createArrow({className:\"scra\",icon:S.Codicon.scrollbarButtonLeft,top:r,left:t,bottom:void 0,right:void 0,bgWidth:b.arrowSize,bgHeight:b.horizontalScrollbarSize,onActivate:()=>this._host.onMouseWheel(new L.StandardWheelEvent(null,1,0))}),this._createArrow({className:\"scra\",icon:S.Codicon.scrollbarButtonRight,top:r,left:void 0,bottom:void 0,right:t,bgWidth:b.arrowSize,bgHeight:b.horizontalScrollbarSize,onActivate:()=>this._host.onMouseWheel(new L.StandardWheelEvent(null,-1,0))})}this._createSlider(Math.floor((b.horizontalScrollbarSize-b.horizontalSliderSize)/2),0,void 0,b.horizontalSliderSize)}_updateSlider(v,b){this.slider.setWidth(v),this.slider.setLeft(b)}_renderDomNode(v,b){this.domNode.setWidth(v),this.domNode.setHeight(b),this.domNode.setLeft(0),this.domNode.setBottom(0)}onDidScroll(v){return this._shouldRender=this._onElementScrollSize(v.scrollWidth)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(v.scrollLeft)||this._shouldRender,this._shouldRender=this._onElementSize(v.width)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(v,b){return v}_sliderPointerPosition(v){return v.pageX}_sliderOrthogonalPointerPosition(v){return v.pageY}_updateScrollbarSize(v){this.slider.setHeight(v)}writeScrollPosition(v,b){v.scrollLeft=b}updateOptions(v){this.updateScrollbarSize(v.horizontal===2?0:v.horizontalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(v.vertical===2?0:v.verticalScrollbarSize),this._visibilityController.setVisibility(v.horizontal),this._scrollByPage=v.scrollByPage}}e.HorizontalScrollbar=p}),define(se[593],oe([1,0,67,321,226,197,26]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.VerticalScrollbar=void 0;class p extends k.AbstractScrollbar{constructor(v,b,a){const i=v.getScrollDimensions(),n=v.getCurrentScrollPosition();if(super({lazyRender:b.lazyRender,host:a,scrollbarState:new E.ScrollbarState(b.verticalHasArrows?b.arrowSize:0,b.vertical===2?0:b.verticalScrollbarSize,0,i.height,i.scrollHeight,n.scrollTop),visibility:b.vertical,extraScrollbarClassName:\"vertical\",scrollable:v,scrollByPage:b.scrollByPage}),b.verticalHasArrows){const t=(b.arrowSize-y.ARROW_IMG_SIZE)/2,r=(b.verticalScrollbarSize-y.ARROW_IMG_SIZE)/2;this._createArrow({className:\"scra\",icon:S.Codicon.scrollbarButtonUp,top:t,left:r,bottom:void 0,right:void 0,bgWidth:b.verticalScrollbarSize,bgHeight:b.arrowSize,onActivate:()=>this._host.onMouseWheel(new L.StandardWheelEvent(null,0,1))}),this._createArrow({className:\"scra\",icon:S.Codicon.scrollbarButtonDown,top:void 0,left:r,bottom:t,right:void 0,bgWidth:b.verticalScrollbarSize,bgHeight:b.arrowSize,onActivate:()=>this._host.onMouseWheel(new L.StandardWheelEvent(null,0,-1))})}this._createSlider(0,Math.floor((b.verticalScrollbarSize-b.verticalSliderSize)/2),b.verticalSliderSize,void 0)}_updateSlider(v,b){this.slider.setHeight(v),this.slider.setTop(b)}_renderDomNode(v,b){this.domNode.setWidth(b),this.domNode.setHeight(v),this.domNode.setRight(0),this.domNode.setTop(0)}onDidScroll(v){return this._shouldRender=this._onElementScrollSize(v.scrollHeight)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(v.scrollTop)||this._shouldRender,this._shouldRender=this._onElementSize(v.height)||this._shouldRender,this._shouldRender}_pointerDownRelativePosition(v,b){return b}_sliderPointerPosition(v){return v.pageY}_sliderOrthogonalPointerPosition(v){return v.pageX}_updateScrollbarSize(v){this.slider.setWidth(v)}writeScrollPosition(v,b){v.scrollTop=b}updateOptions(v){this.updateScrollbarSize(v.vertical===2?0:v.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(v.vertical),this._scrollByPage=v.scrollByPage}}e.VerticalScrollbar=p}),define(se[77],oe([1,0,54,7,40,67,592,593,76,14,6,2,17,147,421]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DomScrollableElement=e.SmoothScrollableElement=e.ScrollableElement=e.AbstractScrollableElement=e.MouseWheelClassifier=void 0;const t=500,r=50,u=!0;class f{constructor(m,C,w){this.timestamp=m,this.deltaX=C,this.deltaY=w,this.score=0}}class c{constructor(){this._capacity=5,this._memory=[],this._front=-1,this._rear=-1}isPhysicalMouseWheel(){if(this._front===-1&&this._rear===-1)return!1;let m=1,C=0,w=1,D=this._rear;do{const I=D===this._front?m:Math.pow(2,-w);if(m-=I,C+=this._memory[D].score*I,D===this._front)break;D=(this._capacity+D-1)%this._capacity,w++}while(!0);return C<=.5}acceptStandardWheelEvent(m){if(L.isChrome){const C=k.getWindow(m.browserEvent),w=(0,L.getZoomFactor)(C);this.accept(Date.now(),m.deltaX*w,m.deltaY*w)}else this.accept(Date.now(),m.deltaX,m.deltaY)}accept(m,C,w){const D=new f(m,C,w);D.score=this._computeScore(D),this._front===-1&&this._rear===-1?(this._memory[0]=D,this._front=0,this._rear=0):(this._rear=(this._rear+1)%this._capacity,this._rear===this._front&&(this._front=(this._front+1)%this._capacity),this._memory[this._rear]=D)}_computeScore(m){if(Math.abs(m.deltaX)>0&&Math.abs(m.deltaY)>0)return 1;let C=.5;const w=this._front===-1&&this._rear===-1?null:this._memory[this._rear];return(!this._isAlmostInt(m.deltaX)||!this._isAlmostInt(m.deltaY))&&(C+=.25),Math.min(Math.max(C,0),1)}_isAlmostInt(m){return Math.abs(Math.round(m)-m)<.01}}e.MouseWheelClassifier=c,c.INSTANCE=new c;class d extends _.Widget{get options(){return this._options}constructor(m,C,w){super(),this._onScroll=this._register(new b.Emitter),this.onScroll=this._onScroll.event,this._onWillScroll=this._register(new b.Emitter),m.style.overflow=\"hidden\",this._options=g(C),this._scrollable=w,this._register(this._scrollable.onScroll(I=>{this._onWillScroll.fire(I),this._onDidScroll(I),this._onScroll.fire(I)}));const D={onMouseWheel:I=>this._onMouseWheel(I),onDragStart:()=>this._onDragStart(),onDragEnd:()=>this._onDragEnd()};this._verticalScrollbar=this._register(new p.VerticalScrollbar(this._scrollable,this._options,D)),this._horizontalScrollbar=this._register(new S.HorizontalScrollbar(this._scrollable,this._options,D)),this._domNode=document.createElement(\"div\"),this._domNode.className=\"monaco-scrollable-element \"+this._options.className,this._domNode.setAttribute(\"role\",\"presentation\"),this._domNode.style.position=\"relative\",this._domNode.style.overflow=\"hidden\",this._domNode.appendChild(m),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=(0,y.createFastDomNode)(document.createElement(\"div\")),this._leftShadowDomNode.setClassName(\"shadow\"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=(0,y.createFastDomNode)(document.createElement(\"div\")),this._topShadowDomNode.setClassName(\"shadow\"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=(0,y.createFastDomNode)(document.createElement(\"div\")),this._topLeftShadowDomNode.setClassName(\"shadow\"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode||this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this.onmouseover(this._listenOnDomNode,I=>this._onMouseOver(I)),this.onmouseleave(this._listenOnDomNode,I=>this._onMouseLeave(I)),this._hideTimeout=this._register(new v.TimeoutTimer),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}dispose(){this._mouseWheelToDispose=(0,a.dispose)(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getOverviewRulerLayoutInfo(){return{parent:this._domNode,insertBefore:this._verticalScrollbar.domNode.domNode}}delegateVerticalScrollbarPointerDown(m){this._verticalScrollbar.delegatePointerDown(m)}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(m){this._scrollable.setScrollDimensions(m,!1)}updateClassName(m){this._options.className=m,i.isMacintosh&&(this._options.className+=\" mac\"),this._domNode.className=\"monaco-scrollable-element \"+this._options.className}updateOptions(m){typeof m.handleMouseWheel<\"u\"&&(this._options.handleMouseWheel=m.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),typeof m.mouseWheelScrollSensitivity<\"u\"&&(this._options.mouseWheelScrollSensitivity=m.mouseWheelScrollSensitivity),typeof m.fastScrollSensitivity<\"u\"&&(this._options.fastScrollSensitivity=m.fastScrollSensitivity),typeof m.scrollPredominantAxis<\"u\"&&(this._options.scrollPredominantAxis=m.scrollPredominantAxis),typeof m.horizontal<\"u\"&&(this._options.horizontal=m.horizontal),typeof m.vertical<\"u\"&&(this._options.vertical=m.vertical),typeof m.horizontalScrollbarSize<\"u\"&&(this._options.horizontalScrollbarSize=m.horizontalScrollbarSize),typeof m.verticalScrollbarSize<\"u\"&&(this._options.verticalScrollbarSize=m.verticalScrollbarSize),typeof m.scrollByPage<\"u\"&&(this._options.scrollByPage=m.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}delegateScrollFromMouseWheelEvent(m){this._onMouseWheel(new E.StandardWheelEvent(m))}_setListeningToMouseWheel(m){if(this._mouseWheelToDispose.length>0!==m&&(this._mouseWheelToDispose=(0,a.dispose)(this._mouseWheelToDispose),m)){const w=D=>{this._onMouseWheel(new E.StandardWheelEvent(D))};this._mouseWheelToDispose.push(k.addDisposableListener(this._listenOnDomNode,k.EventType.MOUSE_WHEEL,w,{passive:!1}))}}_onMouseWheel(m){var C;if(!((C=m.browserEvent)===null||C===void 0)&&C.defaultPrevented)return;const w=c.INSTANCE;u&&w.acceptStandardWheelEvent(m);let D=!1;if(m.deltaY||m.deltaX){let T=m.deltaY*this._options.mouseWheelScrollSensitivity,A=m.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(this._options.scrollYToX&&A+T===0?A=T=0:Math.abs(T)>=Math.abs(A)?A=0:T=0),this._options.flipAxes&&([T,A]=[A,T]);const P=!i.isMacintosh&&m.browserEvent&&m.browserEvent.shiftKey;(this._options.scrollYToX||P)&&!A&&(A=T,T=0),m.browserEvent&&m.browserEvent.altKey&&(A=A*this._options.fastScrollSensitivity,T=T*this._options.fastScrollSensitivity);const N=this._scrollable.getFutureScrollPosition();let M={};if(T){const R=r*T,x=N.scrollTop-(R<0?Math.floor(R):Math.ceil(R));this._verticalScrollbar.writeScrollPosition(M,x)}if(A){const R=r*A,x=N.scrollLeft-(R<0?Math.floor(R):Math.ceil(R));this._horizontalScrollbar.writeScrollPosition(M,x)}M=this._scrollable.validateScrollPosition(M),(N.scrollLeft!==M.scrollLeft||N.scrollTop!==M.scrollTop)&&(u&&this._options.mouseWheelSmoothScroll&&w.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(M):this._scrollable.setScrollPositionNow(M),D=!0)}let I=D;!I&&this._options.alwaysConsumeMouseWheel&&(I=!0),!I&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(I=!0),I&&(m.preventDefault(),m.stopPropagation())}_onDidScroll(m){this._shouldRender=this._horizontalScrollbar.onDidScroll(m)||this._shouldRender,this._shouldRender=this._verticalScrollbar.onDidScroll(m)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error(\"Please use `lazyRender` together with `renderNow`!\");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){const m=this._scrollable.getCurrentScrollPosition(),C=m.scrollTop>0,w=m.scrollLeft>0,D=w?\" left\":\"\",I=C?\" top\":\"\",T=w||C?\" top-left-corner\":\"\";this._leftShadowDomNode.setClassName(`shadow${D}`),this._topShadowDomNode.setClassName(`shadow${I}`),this._topLeftShadowDomNode.setClassName(`shadow${T}${I}${D}`)}}_onDragStart(){this._isDragging=!0,this._reveal()}_onDragEnd(){this._isDragging=!1,this._hide()}_onMouseLeave(m){this._mouseIsOver=!1,this._hide()}_onMouseOver(m){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){!this._mouseIsOver&&!this._isDragging&&(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){!this._mouseIsOver&&!this._isDragging&&this._hideTimeout.cancelAndSet(()=>this._hide(),t)}}e.AbstractScrollableElement=d;class s extends d{constructor(m,C){C=C||{},C.mouseWheelSmoothScroll=!1;const w=new n.Scrollable({forceIntegerValues:!0,smoothScrollDuration:0,scheduleAtNextAnimationFrame:D=>k.scheduleAtNextAnimationFrame(k.getWindow(m),D)});super(m,C,w),this._register(w)}setScrollPosition(m){this._scrollable.setScrollPositionNow(m)}}e.ScrollableElement=s;class l extends d{constructor(m,C,w){super(m,C,w)}setScrollPosition(m){m.reuseAnimation?this._scrollable.setScrollPositionSmooth(m,m.reuseAnimation):this._scrollable.setScrollPositionNow(m)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}}e.SmoothScrollableElement=l;class o extends d{constructor(m,C){C=C||{},C.mouseWheelSmoothScroll=!1;const w=new n.Scrollable({forceIntegerValues:!1,smoothScrollDuration:0,scheduleAtNextAnimationFrame:D=>k.scheduleAtNextAnimationFrame(k.getWindow(m),D)});super(m,C,w),this._register(w),this._element=m,this._register(this.onScroll(D=>{D.scrollTopChanged&&(this._element.scrollTop=D.scrollTop),D.scrollLeftChanged&&(this._element.scrollLeft=D.scrollLeft)})),this.scanDomNode()}setScrollPosition(m){this._scrollable.setScrollPositionNow(m)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}scanDomNode(){this.setScrollDimensions({width:this._element.clientWidth,scrollWidth:this._element.scrollWidth,height:this._element.clientHeight,scrollHeight:this._element.scrollHeight}),this.setScrollPosition({scrollLeft:this._element.scrollLeft,scrollTop:this._element.scrollTop})}}e.DomScrollableElement=o;function g(h){const m={lazyRender:typeof h.lazyRender<\"u\"?h.lazyRender:!1,className:typeof h.className<\"u\"?h.className:\"\",useShadows:typeof h.useShadows<\"u\"?h.useShadows:!0,handleMouseWheel:typeof h.handleMouseWheel<\"u\"?h.handleMouseWheel:!0,flipAxes:typeof h.flipAxes<\"u\"?h.flipAxes:!1,consumeMouseWheelIfScrollbarIsNeeded:typeof h.consumeMouseWheelIfScrollbarIsNeeded<\"u\"?h.consumeMouseWheelIfScrollbarIsNeeded:!1,alwaysConsumeMouseWheel:typeof h.alwaysConsumeMouseWheel<\"u\"?h.alwaysConsumeMouseWheel:!1,scrollYToX:typeof h.scrollYToX<\"u\"?h.scrollYToX:!1,mouseWheelScrollSensitivity:typeof h.mouseWheelScrollSensitivity<\"u\"?h.mouseWheelScrollSensitivity:1,fastScrollSensitivity:typeof h.fastScrollSensitivity<\"u\"?h.fastScrollSensitivity:5,scrollPredominantAxis:typeof h.scrollPredominantAxis<\"u\"?h.scrollPredominantAxis:!0,mouseWheelSmoothScroll:typeof h.mouseWheelSmoothScroll<\"u\"?h.mouseWheelSmoothScroll:!0,arrowSize:typeof h.arrowSize<\"u\"?h.arrowSize:11,listenOnDomNode:typeof h.listenOnDomNode<\"u\"?h.listenOnDomNode:null,horizontal:typeof h.horizontal<\"u\"?h.horizontal:1,horizontalScrollbarSize:typeof h.horizontalScrollbarSize<\"u\"?h.horizontalScrollbarSize:10,horizontalSliderSize:typeof h.horizontalSliderSize<\"u\"?h.horizontalSliderSize:0,horizontalHasArrows:typeof h.horizontalHasArrows<\"u\"?h.horizontalHasArrows:!1,vertical:typeof h.vertical<\"u\"?h.vertical:1,verticalScrollbarSize:typeof h.verticalScrollbarSize<\"u\"?h.verticalScrollbarSize:10,verticalHasArrows:typeof h.verticalHasArrows<\"u\"?h.verticalHasArrows:!1,verticalSliderSize:typeof h.verticalSliderSize<\"u\"?h.verticalSliderSize:0,scrollByPage:typeof h.scrollByPage<\"u\"?h.scrollByPage:!1};return m.horizontalSliderSize=typeof h.horizontalSliderSize<\"u\"?h.horizontalSliderSize:m.horizontalScrollbarSize,m.verticalSliderSize=typeof h.verticalSliderSize<\"u\"?h.verticalSliderSize:m.verticalScrollbarSize,i.isMacintosh&&(m.className+=\" mac\"),m}}),define(se[227],oe([1,0,7,46,77,2,570,414]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getHoverAccessibleViewHint=e.HoverAction=e.HoverWidget=void 0;const p=L.$;class _ extends E.Disposable{constructor(){super(),this.containerDomNode=document.createElement(\"div\"),this.containerDomNode.className=\"monaco-hover\",this.containerDomNode.tabIndex=0,this.containerDomNode.setAttribute(\"role\",\"tooltip\"),this.contentsDomNode=document.createElement(\"div\"),this.contentsDomNode.className=\"monaco-hover-content\",this.scrollbar=this._register(new y.DomScrollableElement(this.contentsDomNode,{consumeMouseWheelIfScrollbarIsNeeded:!0})),this.containerDomNode.appendChild(this.scrollbar.getDomNode())}onContentsChanged(){this.scrollbar.scanDomNode()}}e.HoverWidget=_;class v extends E.Disposable{static render(i,n,t){return new v(i,n,t)}constructor(i,n,t){super(),this.actionContainer=L.append(i,p(\"div.action-container\")),this.actionContainer.setAttribute(\"tabindex\",\"0\"),this.action=L.append(this.actionContainer,p(\"a.action\")),this.action.setAttribute(\"role\",\"button\"),n.iconClass&&L.append(this.action,p(`span.icon.${n.iconClass}`));const r=L.append(this.action,p(\"span\"));r.textContent=t?`${n.label} (${t})`:n.label,this._register(L.addDisposableListener(this.actionContainer,L.EventType.CLICK,u=>{u.stopPropagation(),u.preventDefault(),n.run(this.actionContainer)})),this._register(L.addDisposableListener(this.actionContainer,L.EventType.KEY_DOWN,u=>{const f=new k.StandardKeyboardEvent(u);(f.equals(3)||f.equals(10))&&(u.stopPropagation(),u.preventDefault(),n.run(this.actionContainer))})),this.setEnabled(!0)}setEnabled(i){i?(this.actionContainer.classList.remove(\"disabled\"),this.actionContainer.removeAttribute(\"aria-disabled\")):(this.actionContainer.classList.add(\"disabled\"),this.actionContainer.setAttribute(\"aria-disabled\",\"true\"))}}e.HoverAction=v;function b(a,i){return a&&i?(0,S.localize)(0,null,i):a?(0,S.localize)(1,null):\"\"}e.getHoverAccessibleViewHint=b}),define(se[228],oe([1,0,198,7,84,63,77,13,14,107,6,2,172,147,405,589,12]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ListView=e.NativeDragAndDropData=e.ExternalElementsDragAndDropData=e.ElementsDragAndDropData=void 0;const f={CurrentDragAndDropData:void 0},c={useShadows:!0,verticalScrollMode:1,setRowLineHeight:!0,setRowHeight:!0,supportDynamicHeights:!1,dnd:{getDragElements(m){return[m]},getDragURI(){return null},onDragStart(){},onDragOver(){return!1},drop(){},dispose(){}},horizontalScrolling:!1,transformOptimization:!0,alwaysConsumeMouseWheel:!0};class d{constructor(C){this.elements=C}update(){}getData(){return this.elements}}e.ElementsDragAndDropData=d;class s{constructor(C){this.elements=C}update(){}getData(){return this.elements}}e.ExternalElementsDragAndDropData=s;class l{constructor(){this.types=[],this.files=[]}update(C){if(C.types&&this.types.splice(0,this.types.length,...C.types),C.files){this.files.splice(0,this.files.length);for(let w=0;w<C.files.length;w++){const D=C.files.item(w);D&&(D.size||D.type)&&this.files.push(D)}}}getData(){return{types:this.types,files:this.files}}}e.NativeDragAndDropData=l;function o(m,C){return Array.isArray(m)&&Array.isArray(C)?(0,p.equals)(m,C):m===C}class g{constructor(C){C?.getSetSize?this.getSetSize=C.getSetSize.bind(C):this.getSetSize=(w,D,I)=>I,C?.getPosInSet?this.getPosInSet=C.getPosInSet.bind(C):this.getPosInSet=(w,D)=>D+1,C?.getRole?this.getRole=C.getRole.bind(C):this.getRole=w=>\"listitem\",C?.isChecked?this.isChecked=C.isChecked.bind(C):this.isChecked=w=>{}}}class h{get contentHeight(){return this.rangeMap.size}get onDidScroll(){return this.scrollableElement.onScroll}get scrollableElementDomNode(){return this.scrollableElement.getDomNode()}get horizontalScrolling(){return this._horizontalScrolling}set horizontalScrolling(C){if(C!==this._horizontalScrolling){if(C&&this.supportDynamicHeights)throw new Error(\"Horizontal scrolling and dynamic heights not supported simultaneously\");if(this._horizontalScrolling=C,this.domNode.classList.toggle(\"horizontal-scrolling\",this._horizontalScrolling),this._horizontalScrolling){for(const w of this.items)this.measureItemWidth(w);this.updateScrollWidth(),this.scrollableElement.setScrollDimensions({width:(0,k.getContentWidth)(this.domNode)}),this.rowsContainer.style.width=`${Math.max(this.scrollWidth||0,this.renderWidth)}px`}else this.scrollableElementWidthDelayer.cancel(),this.scrollableElement.setScrollDimensions({width:this.renderWidth,scrollWidth:this.renderWidth}),this.rowsContainer.style.width=\"\"}}constructor(C,w,D,I=c){var T,A,P,N,M,R,x,O,B,W,V,K,F;if(this.virtualDelegate=w,this.domId=`list_id_${++h.InstanceCount}`,this.renderers=new Map,this.renderWidth=0,this._scrollHeight=0,this.scrollableElementUpdateDisposable=null,this.scrollableElementWidthDelayer=new _.Delayer(50),this.splicing=!1,this.dragOverAnimationStopDisposable=a.Disposable.None,this.dragOverMouseY=0,this.canDrop=!1,this.currentDragFeedbackDisposable=a.Disposable.None,this.onDragLeaveTimeout=a.Disposable.None,this.disposables=new a.DisposableStore,this._onDidChangeContentHeight=new b.Emitter,this._onDidChangeContentWidth=new b.Emitter,this.onDidChangeContentHeight=b.Event.latch(this._onDidChangeContentHeight.event,void 0,this.disposables),this._horizontalScrolling=!1,I.horizontalScrolling&&I.supportDynamicHeights)throw new Error(\"Horizontal scrolling and dynamic heights not supported simultaneously\");this.items=[],this.itemId=0,this.rangeMap=new t.RangeMap((T=I.paddingTop)!==null&&T!==void 0?T:0);for(const ie of D)this.renderers.set(ie.templateId,ie);this.cache=this.disposables.add(new r.RowCache(this.renderers)),this.lastRenderTop=0,this.lastRenderHeight=0,this.domNode=document.createElement(\"div\"),this.domNode.className=\"monaco-list\",this.domNode.classList.add(this.domId),this.domNode.tabIndex=0,this.domNode.classList.toggle(\"mouse-support\",typeof I.mouseSupport==\"boolean\"?I.mouseSupport:!0),this._horizontalScrolling=(A=I.horizontalScrolling)!==null&&A!==void 0?A:c.horizontalScrolling,this.domNode.classList.toggle(\"horizontal-scrolling\",this._horizontalScrolling),this.paddingBottom=typeof I.paddingBottom>\"u\"?0:I.paddingBottom,this.accessibilityProvider=new g(I.accessibilityProvider),this.rowsContainer=document.createElement(\"div\"),this.rowsContainer.className=\"monaco-list-rows\",((P=I.transformOptimization)!==null&&P!==void 0?P:c.transformOptimization)&&(this.rowsContainer.style.transform=\"translate3d(0px, 0px, 0px)\",this.rowsContainer.style.overflow=\"hidden\",this.rowsContainer.style.contain=\"strict\"),this.disposables.add(E.Gesture.addTarget(this.rowsContainer)),this.scrollable=this.disposables.add(new n.Scrollable({forceIntegerValues:!0,smoothScrollDuration:(N=I.smoothScrolling)!==null&&N!==void 0&&N?125:0,scheduleAtNextAnimationFrame:ie=>(0,k.scheduleAtNextAnimationFrame)((0,k.getWindow)(this.domNode),ie)})),this.scrollableElement=this.disposables.add(new S.SmoothScrollableElement(this.rowsContainer,{alwaysConsumeMouseWheel:(M=I.alwaysConsumeMouseWheel)!==null&&M!==void 0?M:c.alwaysConsumeMouseWheel,horizontal:1,vertical:(R=I.verticalScrollMode)!==null&&R!==void 0?R:c.verticalScrollMode,useShadows:(x=I.useShadows)!==null&&x!==void 0?x:c.useShadows,mouseWheelScrollSensitivity:I.mouseWheelScrollSensitivity,fastScrollSensitivity:I.fastScrollSensitivity,scrollByPage:I.scrollByPage},this.scrollable)),this.domNode.appendChild(this.scrollableElement.getDomNode()),C.appendChild(this.domNode),this.scrollableElement.onScroll(this.onScroll,this,this.disposables),this.disposables.add((0,k.addDisposableListener)(this.rowsContainer,E.EventType.Change,ie=>this.onTouchChange(ie))),this.disposables.add((0,k.addDisposableListener)(this.scrollableElement.getDomNode(),\"scroll\",ie=>ie.target.scrollTop=0)),this.disposables.add((0,k.addDisposableListener)(this.domNode,\"dragover\",ie=>this.onDragOver(this.toDragEvent(ie)))),this.disposables.add((0,k.addDisposableListener)(this.domNode,\"drop\",ie=>this.onDrop(this.toDragEvent(ie)))),this.disposables.add((0,k.addDisposableListener)(this.domNode,\"dragleave\",ie=>this.onDragLeave(this.toDragEvent(ie)))),this.disposables.add((0,k.addDisposableListener)(this.domNode,\"dragend\",ie=>this.onDragEnd(ie))),this.setRowLineHeight=(O=I.setRowLineHeight)!==null&&O!==void 0?O:c.setRowLineHeight,this.setRowHeight=(B=I.setRowHeight)!==null&&B!==void 0?B:c.setRowHeight,this.supportDynamicHeights=(W=I.supportDynamicHeights)!==null&&W!==void 0?W:c.supportDynamicHeights,this.dnd=(V=I.dnd)!==null&&V!==void 0?V:this.disposables.add(c.dnd),this.layout((K=I.initialSize)===null||K===void 0?void 0:K.height,(F=I.initialSize)===null||F===void 0?void 0:F.width)}updateOptions(C){C.paddingBottom!==void 0&&(this.paddingBottom=C.paddingBottom,this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight})),C.smoothScrolling!==void 0&&this.scrollable.setSmoothScrollDuration(C.smoothScrolling?125:0),C.horizontalScrolling!==void 0&&(this.horizontalScrolling=C.horizontalScrolling);let w;if(C.scrollByPage!==void 0&&(w={...w??{},scrollByPage:C.scrollByPage}),C.mouseWheelScrollSensitivity!==void 0&&(w={...w??{},mouseWheelScrollSensitivity:C.mouseWheelScrollSensitivity}),C.fastScrollSensitivity!==void 0&&(w={...w??{},fastScrollSensitivity:C.fastScrollSensitivity}),w&&this.scrollableElement.updateOptions(w),C.paddingTop!==void 0&&C.paddingTop!==this.rangeMap.paddingTop){const D=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),I=C.paddingTop-this.rangeMap.paddingTop;this.rangeMap.paddingTop=C.paddingTop,this.render(D,Math.max(0,this.lastRenderTop+I),this.lastRenderHeight,void 0,void 0,!0),this.setScrollTop(this.lastRenderTop),this.eventuallyUpdateScrollDimensions(),this.supportDynamicHeights&&this._rerender(this.lastRenderTop,this.lastRenderHeight)}}splice(C,w,D=[]){if(this.splicing)throw new Error(\"Can't run recursive splices.\");this.splicing=!0;try{return this._splice(C,w,D)}finally{this.splicing=!1,this._onDidChangeContentHeight.fire(this.contentHeight)}}_splice(C,w,D=[]){const I=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),T={start:C,end:C+w},A=i.Range.intersect(I,T),P=new Map;for(let $=A.end-1;$>=A.start;$--){const J=this.items[$];if(J.dragStartDisposable.dispose(),J.checkedDisposable.dispose(),J.row){let Q=P.get(J.templateId);Q||(Q=[],P.set(J.templateId,Q));const re=this.renderers.get(J.templateId);re&&re.disposeElement&&re.disposeElement(J.element,$,J.row.templateData,J.size),Q.push(J.row)}J.row=null}const N={start:C+w,end:this.items.length},M=i.Range.intersect(N,I),R=i.Range.relativeComplement(N,I),x=D.map($=>({id:String(this.itemId++),element:$,templateId:this.virtualDelegate.getTemplateId($),size:this.virtualDelegate.getHeight($),width:void 0,hasDynamicHeight:!!this.virtualDelegate.hasDynamicHeight&&this.virtualDelegate.hasDynamicHeight($),lastDynamicHeightWidth:void 0,row:null,uri:void 0,dropTarget:!1,dragStartDisposable:a.Disposable.None,checkedDisposable:a.Disposable.None}));let O;C===0&&w>=this.items.length?(this.rangeMap=new t.RangeMap(this.rangeMap.paddingTop),this.rangeMap.splice(0,0,x),O=this.items,this.items=x):(this.rangeMap.splice(C,w,x),O=this.items.splice(C,w,...x));const B=D.length-w,W=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),V=(0,t.shift)(M,B),K=i.Range.intersect(W,V);for(let $=K.start;$<K.end;$++)this.updateItemInDOM(this.items[$],$);const F=i.Range.relativeComplement(V,W);for(const $ of F)for(let J=$.start;J<$.end;J++)this.removeItemFromDOM(J);const q=R.map($=>(0,t.shift)($,B)),ae=[{start:C,end:C+D.length},...q].map($=>i.Range.intersect(W,$)),ne=this.getNextToLastElement(ae);for(const $ of ae)for(let J=$.start;J<$.end;J++){const Q=this.items[J],re=P.get(Q.templateId),de=re?.pop();this.insertItemInDOM(J,ne,de)}for(const $ of P.values())for(const J of $)this.cache.release(J);return this.eventuallyUpdateScrollDimensions(),this.supportDynamicHeights&&this._rerender(this.scrollTop,this.renderHeight),O.map($=>$.element)}eventuallyUpdateScrollDimensions(){this._scrollHeight=this.contentHeight,this.rowsContainer.style.height=`${this._scrollHeight}px`,this.scrollableElementUpdateDisposable||(this.scrollableElementUpdateDisposable=(0,k.scheduleAtNextAnimationFrame)((0,k.getWindow)(this.domNode),()=>{this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight}),this.updateScrollWidth(),this.scrollableElementUpdateDisposable=null}))}eventuallyUpdateScrollWidth(){if(!this.horizontalScrolling){this.scrollableElementWidthDelayer.cancel();return}this.scrollableElementWidthDelayer.trigger(()=>this.updateScrollWidth())}updateScrollWidth(){if(!this.horizontalScrolling)return;let C=0;for(const w of this.items)typeof w.width<\"u\"&&(C=Math.max(C,w.width));this.scrollWidth=C,this.scrollableElement.setScrollDimensions({scrollWidth:C===0?0:C+10}),this._onDidChangeContentWidth.fire(this.scrollWidth)}rerender(){if(this.supportDynamicHeights){for(const C of this.items)C.lastDynamicHeightWidth=void 0;this._rerender(this.lastRenderTop,this.lastRenderHeight)}}get length(){return this.items.length}get renderHeight(){return this.scrollableElement.getScrollDimensions().height}get firstVisibleIndex(){return this.getRenderRange(this.lastRenderTop,this.lastRenderHeight).start}element(C){return this.items[C].element}indexOf(C){return this.items.findIndex(w=>w.element===C)}domElement(C){const w=this.items[C].row;return w&&w.domNode}elementHeight(C){return this.items[C].size}elementTop(C){return this.rangeMap.positionAt(C)}indexAt(C){return this.rangeMap.indexAt(C)}indexAfter(C){return this.rangeMap.indexAfter(C)}layout(C,w){const D={height:typeof C==\"number\"?C:(0,k.getContentHeight)(this.domNode)};this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,D.scrollHeight=this.scrollHeight),this.scrollableElement.setScrollDimensions(D),typeof w<\"u\"&&(this.renderWidth=w,this.supportDynamicHeights&&this._rerender(this.scrollTop,this.renderHeight)),this.horizontalScrolling&&this.scrollableElement.setScrollDimensions({width:typeof w==\"number\"?w:(0,k.getContentWidth)(this.domNode)})}render(C,w,D,I,T,A=!1){const P=this.getRenderRange(w,D),N=i.Range.relativeComplement(P,C),M=i.Range.relativeComplement(C,P),R=this.getNextToLastElement(N);if(A){const x=i.Range.intersect(C,P);for(let O=x.start;O<x.end;O++)this.updateItemInDOM(this.items[O],O)}this.cache.transact(()=>{for(const x of M)for(let O=x.start;O<x.end;O++)this.removeItemFromDOM(O);for(const x of N)for(let O=x.start;O<x.end;O++)this.insertItemInDOM(O,R)}),I!==void 0&&(this.rowsContainer.style.left=`-${I}px`),this.rowsContainer.style.top=`-${w}px`,this.horizontalScrolling&&T!==void 0&&(this.rowsContainer.style.width=`${Math.max(T,this.renderWidth)}px`),this.lastRenderTop=w,this.lastRenderHeight=D}insertItemInDOM(C,w,D){const I=this.items[C];let T=!1;if(!I.row)if(D)I.row=D;else{const R=this.cache.alloc(I.templateId);I.row=R.row,T=R.isReusingConnectedDomNode}const A=this.accessibilityProvider.getRole(I.element)||\"listitem\";I.row.domNode.setAttribute(\"role\",A);const P=this.accessibilityProvider.isChecked(I.element);if(typeof P==\"boolean\")I.row.domNode.setAttribute(\"aria-checked\",String(!!P));else if(P){const R=x=>I.row.domNode.setAttribute(\"aria-checked\",String(!!x));R(P.value),I.checkedDisposable=P.onDidChange(R)}(T||!I.row.domNode.parentElement)&&(w?this.rowsContainer.insertBefore(I.row.domNode,w):this.rowsContainer.appendChild(I.row.domNode)),this.updateItemInDOM(I,C);const N=this.renderers.get(I.templateId);if(!N)throw new Error(`No renderer found for template id ${I.templateId}`);N?.renderElement(I.element,C,I.row.templateData,I.size);const M=this.dnd.getDragURI(I.element);I.dragStartDisposable.dispose(),I.row.domNode.draggable=!!M,M&&(I.dragStartDisposable=(0,k.addDisposableListener)(I.row.domNode,\"dragstart\",R=>this.onDragStart(I.element,M,R))),this.horizontalScrolling&&(this.measureItemWidth(I),this.eventuallyUpdateScrollWidth())}measureItemWidth(C){if(!C.row||!C.row.domNode)return;C.row.domNode.style.width=\"fit-content\",C.width=(0,k.getContentWidth)(C.row.domNode);const w=(0,k.getWindow)(C.row.domNode).getComputedStyle(C.row.domNode);w.paddingLeft&&(C.width+=parseFloat(w.paddingLeft)),w.paddingRight&&(C.width+=parseFloat(w.paddingRight)),C.row.domNode.style.width=\"\"}updateItemInDOM(C,w){C.row.domNode.style.top=`${this.elementTop(w)}px`,this.setRowHeight&&(C.row.domNode.style.height=`${C.size}px`),this.setRowLineHeight&&(C.row.domNode.style.lineHeight=`${C.size}px`),C.row.domNode.setAttribute(\"data-index\",`${w}`),C.row.domNode.setAttribute(\"data-last-element\",w===this.length-1?\"true\":\"false\"),C.row.domNode.setAttribute(\"data-parity\",w%2===0?\"even\":\"odd\"),C.row.domNode.setAttribute(\"aria-setsize\",String(this.accessibilityProvider.getSetSize(C.element,w,this.length))),C.row.domNode.setAttribute(\"aria-posinset\",String(this.accessibilityProvider.getPosInSet(C.element,w))),C.row.domNode.setAttribute(\"id\",this.getElementDomId(w)),C.row.domNode.classList.toggle(\"drop-target\",C.dropTarget)}removeItemFromDOM(C){const w=this.items[C];if(w.dragStartDisposable.dispose(),w.checkedDisposable.dispose(),w.row){const D=this.renderers.get(w.templateId);D&&D.disposeElement&&D.disposeElement(w.element,C,w.row.templateData,w.size),this.cache.release(w.row),w.row=null}this.horizontalScrolling&&this.eventuallyUpdateScrollWidth()}getScrollTop(){return this.scrollableElement.getScrollPosition().scrollTop}setScrollTop(C,w){this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight})),this.scrollableElement.setScrollPosition({scrollTop:C,reuseAnimation:w})}get scrollTop(){return this.getScrollTop()}set scrollTop(C){this.setScrollTop(C)}get scrollHeight(){return this._scrollHeight+(this.horizontalScrolling?10:0)+this.paddingBottom}get onMouseClick(){return b.Event.map(this.disposables.add(new y.DomEmitter(this.domNode,\"click\")).event,C=>this.toMouseEvent(C),this.disposables)}get onMouseDblClick(){return b.Event.map(this.disposables.add(new y.DomEmitter(this.domNode,\"dblclick\")).event,C=>this.toMouseEvent(C),this.disposables)}get onMouseMiddleClick(){return b.Event.filter(b.Event.map(this.disposables.add(new y.DomEmitter(this.domNode,\"auxclick\")).event,C=>this.toMouseEvent(C),this.disposables),C=>C.browserEvent.button===1,this.disposables)}get onMouseDown(){return b.Event.map(this.disposables.add(new y.DomEmitter(this.domNode,\"mousedown\")).event,C=>this.toMouseEvent(C),this.disposables)}get onMouseOver(){return b.Event.map(this.disposables.add(new y.DomEmitter(this.domNode,\"mouseover\")).event,C=>this.toMouseEvent(C),this.disposables)}get onMouseOut(){return b.Event.map(this.disposables.add(new y.DomEmitter(this.domNode,\"mouseout\")).event,C=>this.toMouseEvent(C),this.disposables)}get onContextMenu(){return b.Event.any(b.Event.map(this.disposables.add(new y.DomEmitter(this.domNode,\"contextmenu\")).event,C=>this.toMouseEvent(C),this.disposables),b.Event.map(this.disposables.add(new y.DomEmitter(this.domNode,E.EventType.Contextmenu)).event,C=>this.toGestureEvent(C),this.disposables))}get onTouchStart(){return b.Event.map(this.disposables.add(new y.DomEmitter(this.domNode,\"touchstart\")).event,C=>this.toTouchEvent(C),this.disposables)}get onTap(){return b.Event.map(this.disposables.add(new y.DomEmitter(this.rowsContainer,E.EventType.Tap)).event,C=>this.toGestureEvent(C),this.disposables)}toMouseEvent(C){const w=this.getItemIndexFromEventTarget(C.target||null),D=typeof w>\"u\"?void 0:this.items[w],I=D&&D.element;return{browserEvent:C,index:w,element:I}}toTouchEvent(C){const w=this.getItemIndexFromEventTarget(C.target||null),D=typeof w>\"u\"?void 0:this.items[w],I=D&&D.element;return{browserEvent:C,index:w,element:I}}toGestureEvent(C){const w=this.getItemIndexFromEventTarget(C.initialTarget||null),D=typeof w>\"u\"?void 0:this.items[w],I=D&&D.element;return{browserEvent:C,index:w,element:I}}toDragEvent(C){const w=this.getItemIndexFromEventTarget(C.target||null),D=typeof w>\"u\"?void 0:this.items[w],I=D&&D.element,T=this.getTargetSector(C,w);return{browserEvent:C,index:w,element:I,sector:T}}onScroll(C){try{const w=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight);this.render(w,C.scrollTop,C.height,C.scrollLeft,C.scrollWidth),this.supportDynamicHeights&&this._rerender(C.scrollTop,C.height,C.inSmoothScrolling)}catch(w){throw console.error(\"Got bad scroll event:\",C),w}}onTouchChange(C){C.preventDefault(),C.stopPropagation(),this.scrollTop-=C.translationY}onDragStart(C,w,D){var I,T;if(!D.dataTransfer)return;const A=this.dnd.getDragElements(C);if(D.dataTransfer.effectAllowed=\"copyMove\",D.dataTransfer.setData(L.DataTransfers.TEXT,w),D.dataTransfer.setDragImage){let P;this.dnd.getDragLabel&&(P=this.dnd.getDragLabel(A,D)),typeof P>\"u\"&&(P=String(A.length));const N=(0,k.$)(\".monaco-drag-image\");N.textContent=P;const R=(x=>{for(;x&&!x.classList.contains(\"monaco-workbench\");)x=x.parentElement;return x||this.domNode.ownerDocument})(this.domNode);R.appendChild(N),D.dataTransfer.setDragImage(N,-10,-10),setTimeout(()=>R.removeChild(N),0)}this.domNode.classList.add(\"dragging\"),this.currentDragData=new d(A),f.CurrentDragAndDropData=new s(A),(T=(I=this.dnd).onDragStart)===null||T===void 0||T.call(I,this.currentDragData,D)}onDragOver(C){var w,D;if(C.browserEvent.preventDefault(),this.onDragLeaveTimeout.dispose(),f.CurrentDragAndDropData&&f.CurrentDragAndDropData.getData()===\"vscode-ui\"||(this.setupDragAndDropScrollTopAnimation(C.browserEvent),!C.browserEvent.dataTransfer))return!1;if(!this.currentDragData)if(f.CurrentDragAndDropData)this.currentDragData=f.CurrentDragAndDropData;else{if(!C.browserEvent.dataTransfer.types)return!1;this.currentDragData=new l}const I=this.dnd.onDragOver(this.currentDragData,C.element,C.index,C.sector,C.browserEvent);if(this.canDrop=typeof I==\"boolean\"?I:I.accept,!this.canDrop)return this.currentDragFeedback=void 0,this.currentDragFeedbackDisposable.dispose(),!1;C.browserEvent.dataTransfer.dropEffect=typeof I!=\"boolean\"&&((w=I.effect)===null||w===void 0?void 0:w.type)===0?\"copy\":\"move\";let T;typeof I!=\"boolean\"&&I.feedback?T=I.feedback:typeof C.index>\"u\"?T=[-1]:T=[C.index],T=(0,p.distinct)(T).filter(P=>P>=-1&&P<this.length).sort((P,N)=>P-N),T=T[0]===-1?[-1]:T;let A=typeof I!=\"boolean\"&&I.effect&&I.effect.position?I.effect.position:\"drop-target\";if(o(this.currentDragFeedback,T)&&this.currentDragFeedbackPosition===A)return!0;if(this.currentDragFeedback=T,this.currentDragFeedbackPosition=A,this.currentDragFeedbackDisposable.dispose(),T[0]===-1)this.domNode.classList.add(A),this.rowsContainer.classList.add(A),this.currentDragFeedbackDisposable=(0,a.toDisposable)(()=>{this.domNode.classList.remove(A),this.rowsContainer.classList.remove(A)});else{if(T.length>1&&A!==\"drop-target\")throw new Error(\"Can't use multiple feedbacks with position different than 'over'\");A===\"drop-target-after\"&&T[0]<this.length-1&&(T[0]+=1,A=\"drop-target-before\");for(const P of T){const N=this.items[P];N.dropTarget=!0,(D=N.row)===null||D===void 0||D.domNode.classList.add(A)}this.currentDragFeedbackDisposable=(0,a.toDisposable)(()=>{var P;for(const N of T){const M=this.items[N];M.dropTarget=!1,(P=M.row)===null||P===void 0||P.domNode.classList.remove(A)}})}return!0}onDragLeave(C){var w,D;this.onDragLeaveTimeout.dispose(),this.onDragLeaveTimeout=(0,_.disposableTimeout)(()=>this.clearDragOverFeedback(),100,this.disposables),this.currentDragData&&((D=(w=this.dnd).onDragLeave)===null||D===void 0||D.call(w,this.currentDragData,C.element,C.index,C.browserEvent))}onDrop(C){if(!this.canDrop)return;const w=this.currentDragData;this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.domNode.classList.remove(\"dragging\"),this.currentDragData=void 0,f.CurrentDragAndDropData=void 0,!(!w||!C.browserEvent.dataTransfer)&&(C.browserEvent.preventDefault(),w.update(C.browserEvent.dataTransfer),this.dnd.drop(w,C.element,C.index,C.sector,C.browserEvent))}onDragEnd(C){var w,D;this.canDrop=!1,this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.domNode.classList.remove(\"dragging\"),this.currentDragData=void 0,f.CurrentDragAndDropData=void 0,(D=(w=this.dnd).onDragEnd)===null||D===void 0||D.call(w,C)}clearDragOverFeedback(){this.currentDragFeedback=void 0,this.currentDragFeedbackPosition=void 0,this.currentDragFeedbackDisposable.dispose(),this.currentDragFeedbackDisposable=a.Disposable.None}setupDragAndDropScrollTopAnimation(C){if(!this.dragOverAnimationDisposable){const w=(0,k.getTopLeftOffset)(this.domNode).top;this.dragOverAnimationDisposable=(0,k.animate)((0,k.getWindow)(this.domNode),this.animateDragAndDropScrollTop.bind(this,w))}this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationStopDisposable=(0,_.disposableTimeout)(()=>{this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)},1e3,this.disposables),this.dragOverMouseY=C.pageY}animateDragAndDropScrollTop(C){if(this.dragOverMouseY===void 0)return;const w=this.dragOverMouseY-C,D=this.renderHeight-35;w<35?this.scrollTop+=Math.max(-14,Math.floor(.3*(w-35))):w>D&&(this.scrollTop+=Math.min(14,Math.floor(.3*(w-D))))}teardownDragAndDropScrollTopAnimation(){this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)}getTargetSector(C,w){if(w===void 0)return;const D=C.offsetY/this.items[w].size;return Math.floor(D/.25)}getItemIndexFromEventTarget(C){const w=this.scrollableElement.getDomNode();let D=C;for(;D instanceof HTMLElement&&D!==this.rowsContainer&&w.contains(D);){const I=D.getAttribute(\"data-index\");if(I){const T=Number(I);if(!isNaN(T))return T}D=D.parentElement}}getRenderRange(C,w){return{start:this.rangeMap.indexAt(C),end:this.rangeMap.indexAfter(C+w-1)}}_rerender(C,w,D){const I=this.getRenderRange(C,w);let T,A;C===this.elementTop(I.start)?(T=I.start,A=0):I.end-I.start>1&&(T=I.start+1,A=this.elementTop(T)-C);let P=0;for(;;){const N=this.getRenderRange(C,w);let M=!1;for(let R=N.start;R<N.end;R++){const x=this.probeDynamicHeight(R);x!==0&&this.rangeMap.splice(R,1,[this.items[R]]),P+=x,M=M||x!==0}if(!M){P!==0&&this.eventuallyUpdateScrollDimensions();const R=i.Range.relativeComplement(I,N);for(const O of R)for(let B=O.start;B<O.end;B++)this.items[B].row&&this.removeItemFromDOM(B);const x=i.Range.relativeComplement(N,I);for(const O of x)for(let B=O.start;B<O.end;B++){const W=B+1,V=W<this.items.length?this.items[W].row:null,K=V?V.domNode:null;this.insertItemInDOM(B,K)}for(let O=N.start;O<N.end;O++)this.items[O].row&&this.updateItemInDOM(this.items[O],O);if(typeof T==\"number\"){const O=this.scrollable.getFutureScrollPosition().scrollTop-C,B=this.elementTop(T)-A+O;this.setScrollTop(B,D)}this._onDidChangeContentHeight.fire(this.contentHeight);return}}}probeDynamicHeight(C){var w,D,I;const T=this.items[C];if(this.virtualDelegate.getDynamicHeight){const M=this.virtualDelegate.getDynamicHeight(T.element);if(M!==null){const R=T.size;return T.size=M,T.lastDynamicHeightWidth=this.renderWidth,M-R}}if(!T.hasDynamicHeight||T.lastDynamicHeightWidth===this.renderWidth||this.virtualDelegate.hasDynamicHeight&&!this.virtualDelegate.hasDynamicHeight(T.element))return 0;const A=T.size;if(T.row)return T.row.domNode.style.height=\"\",T.size=T.row.domNode.offsetHeight,T.lastDynamicHeightWidth=this.renderWidth,T.size-A;const{row:P}=this.cache.alloc(T.templateId);P.domNode.style.height=\"\",this.rowsContainer.appendChild(P.domNode);const N=this.renderers.get(T.templateId);if(!N)throw new u.BugIndicatingError(\"Missing renderer for templateId: \"+T.templateId);return N.renderElement(T.element,C,P.templateData,void 0),T.size=P.domNode.offsetHeight,(w=N.disposeElement)===null||w===void 0||w.call(N,T.element,C,P.templateData,void 0),(I=(D=this.virtualDelegate).setDynamicHeight)===null||I===void 0||I.call(D,T.element,T.size),T.lastDynamicHeightWidth=this.renderWidth,this.rowsContainer.removeChild(P.domNode),this.cache.release(P),T.size-A}getNextToLastElement(C){const w=C[C.length-1];if(!w)return null;const D=this.items[w.end];return!D||!D.row?null:D.row.domNode}getElementDomId(C){return`${this.domId}_${C}`}dispose(){var C,w;for(const D of this.items)if(D.dragStartDisposable.dispose(),D.checkedDisposable.dispose(),D.row){const I=this.renderers.get(D.row.templateId);I&&((C=I.disposeElement)===null||C===void 0||C.call(I,D.element,-1,D.row.templateData,void 0),I.disposeTemplate(D.row.templateData))}this.items=[],this.domNode&&this.domNode.parentNode&&this.domNode.parentNode.removeChild(this.domNode),(w=this.dragOverAnimationDisposable)===null||w===void 0||w.dispose(),this.disposables.dispose()}}e.ListView=h,h.InstanceCount=0,ke([v.memoize],h.prototype,\"onMouseClick\",null),ke([v.memoize],h.prototype,\"onMouseDblClick\",null),ke([v.memoize],h.prototype,\"onMouseMiddleClick\",null),ke([v.memoize],h.prototype,\"onMouseDown\",null),ke([v.memoize],h.prototype,\"onMouseOver\",null),ke([v.memoize],h.prototype,\"onMouseOut\",null),ke([v.memoize],h.prototype,\"onContextMenu\",null),ke([v.memoize],h.prototype,\"onTouchStart\",null),ke([v.memoize],h.prototype,\"onTap\",null)}),define(se[119],oe([1,0,7,84,46,63,48,396,13,14,39,107,6,71,2,145,17,20,395,228,67,275]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.List=e.unthemedListStyles=e.DefaultStyleController=e.MouseController=e.isSelectionRangeChangeEvent=e.isSelectionSingleChangeEvent=e.DefaultKeyboardNavigationDelegate=e.TypeNavigationMode=e.isButton=e.isStickyScrollContainer=e.isStickyScrollElement=e.isActionItem=e.isMonacoCustomToggle=e.isMonacoEditor=e.isInputElement=void 0;class l{constructor(X){this.trait=X,this.renderedElements=[]}get templateId(){return`template:${this.trait.name}`}renderTemplate(X){return X}renderElement(X,U,G){const z=this.renderedElements.findIndex(H=>H.templateData===G);if(z>=0){const H=this.renderedElements[z];this.trait.unrender(G),H.index=U}else{const H={index:U,templateData:G};this.renderedElements.push(H)}this.trait.renderIndex(U,G)}splice(X,U,G){const z=[];for(const H of this.renderedElements)H.index<X?z.push(H):H.index>=X+U&&z.push({index:H.index+G-U,templateData:H.templateData});this.renderedElements=z}renderIndexes(X){for(const{index:U,templateData:G}of this.renderedElements)X.indexOf(U)>-1&&this.trait.renderIndex(U,G)}disposeTemplate(X){const U=this.renderedElements.findIndex(G=>G.templateData===X);U<0||this.renderedElements.splice(U,1)}}class o{get name(){return this._trait}get renderer(){return new l(this)}constructor(X){this._trait=X,this.indexes=[],this.sortedIndexes=[],this._onChange=new i.Emitter,this.onChange=this._onChange.event}splice(X,U,G){const z=G.length-U,H=X+U,Y=[];let j=0;for(;j<this.sortedIndexes.length&&this.sortedIndexes[j]<X;)Y.push(this.sortedIndexes[j++]);for(let Z=0;Z<G.length;Z++)G[Z]&&Y.push(Z+X);for(;j<this.sortedIndexes.length&&this.sortedIndexes[j]>=H;)Y.push(this.sortedIndexes[j++]+z);this.renderer.splice(X,U,G.length),this._set(Y,Y)}renderIndex(X,U){U.classList.toggle(this._trait,this.contains(X))}unrender(X){X.classList.remove(this._trait)}set(X,U){return this._set(X,[...X].sort(J),U)}_set(X,U,G){const z=this.indexes,H=this.sortedIndexes;this.indexes=X,this.sortedIndexes=U;const Y=ne(H,X);return this.renderer.renderIndexes(Y),this._onChange.fire({indexes:X,browserEvent:G}),z}get(){return this.indexes}contains(X){return(0,_.binarySearch)(this.sortedIndexes,X,J)>=0}dispose(){(0,t.dispose)(this._onChange)}}ke([a.memoize],o.prototype,\"renderer\",null);class g extends o{constructor(X){super(\"selected\"),this.setAriaSelected=X}renderIndex(X,U){super.renderIndex(X,U),this.setAriaSelected&&(this.contains(X)?U.setAttribute(\"aria-selected\",\"true\"):U.setAttribute(\"aria-selected\",\"false\"))}}class h{constructor(X,U,G){this.trait=X,this.view=U,this.identityProvider=G}splice(X,U,G){if(!this.identityProvider)return this.trait.splice(X,U,new Array(G.length).fill(!1));const z=this.trait.get().map(j=>this.identityProvider.getId(this.view.element(j)).toString());if(z.length===0)return this.trait.splice(X,U,new Array(G.length).fill(!1));const H=new Set(z),Y=G.map(j=>H.has(this.identityProvider.getId(j).toString()));this.trait.splice(X,U,Y)}}function m(me){return me.tagName===\"INPUT\"||me.tagName===\"TEXTAREA\"}e.isInputElement=m;function C(me,X){return me.classList.contains(X)?!0:me.classList.contains(\"monaco-list\")||!me.parentElement?!1:C(me.parentElement,X)}function w(me){return C(me,\"monaco-editor\")}e.isMonacoEditor=w;function D(me){return C(me,\"monaco-custom-toggle\")}e.isMonacoCustomToggle=D;function I(me){return C(me,\"action-item\")}e.isActionItem=I;function T(me){return C(me,\"monaco-tree-sticky-row\")}e.isStickyScrollElement=T;function A(me){return me.classList.contains(\"monaco-tree-sticky-container\")}e.isStickyScrollContainer=A;function P(me){return me.tagName===\"A\"&&me.classList.contains(\"monaco-button\")||me.tagName===\"DIV\"&&me.classList.contains(\"monaco-button-dropdown\")?!0:me.classList.contains(\"monaco-list\")||!me.parentElement?!1:P(me.parentElement)}e.isButton=P;class N{get onKeyDown(){return i.Event.chain(this.disposables.add(new k.DomEmitter(this.view.domNode,\"keydown\")).event,X=>X.filter(U=>!m(U.target)).map(U=>new y.StandardKeyboardEvent(U)))}constructor(X,U,G){this.list=X,this.view=U,this.disposables=new t.DisposableStore,this.multipleSelectionDisposables=new t.DisposableStore,this.multipleSelectionSupport=G.multipleSelectionSupport,this.disposables.add(this.onKeyDown(z=>{switch(z.keyCode){case 3:return this.onEnter(z);case 16:return this.onUpArrow(z);case 18:return this.onDownArrow(z);case 11:return this.onPageUpArrow(z);case 12:return this.onPageDownArrow(z);case 9:return this.onEscape(z);case 31:this.multipleSelectionSupport&&(u.isMacintosh?z.metaKey:z.ctrlKey)&&this.onCtrlA(z)}}))}updateOptions(X){X.multipleSelectionSupport!==void 0&&(this.multipleSelectionSupport=X.multipleSelectionSupport)}onEnter(X){X.preventDefault(),X.stopPropagation(),this.list.setSelection(this.list.getFocus(),X.browserEvent)}onUpArrow(X){X.preventDefault(),X.stopPropagation(),this.list.focusPrevious(1,!1,X.browserEvent);const U=this.list.getFocus()[0];this.list.setAnchor(U),this.list.reveal(U),this.view.domNode.focus()}onDownArrow(X){X.preventDefault(),X.stopPropagation(),this.list.focusNext(1,!1,X.browserEvent);const U=this.list.getFocus()[0];this.list.setAnchor(U),this.list.reveal(U),this.view.domNode.focus()}onPageUpArrow(X){X.preventDefault(),X.stopPropagation(),this.list.focusPreviousPage(X.browserEvent);const U=this.list.getFocus()[0];this.list.setAnchor(U),this.list.reveal(U),this.view.domNode.focus()}onPageDownArrow(X){X.preventDefault(),X.stopPropagation(),this.list.focusNextPage(X.browserEvent);const U=this.list.getFocus()[0];this.list.setAnchor(U),this.list.reveal(U),this.view.domNode.focus()}onCtrlA(X){X.preventDefault(),X.stopPropagation(),this.list.setSelection((0,_.range)(this.list.length),X.browserEvent),this.list.setAnchor(void 0),this.view.domNode.focus()}onEscape(X){this.list.getSelection().length&&(X.preventDefault(),X.stopPropagation(),this.list.setSelection([],X.browserEvent),this.list.setAnchor(void 0),this.view.domNode.focus())}dispose(){this.disposables.dispose(),this.multipleSelectionDisposables.dispose()}}ke([a.memoize],N.prototype,\"onKeyDown\",null);var M;(function(me){me[me.Automatic=0]=\"Automatic\",me[me.Trigger=1]=\"Trigger\"})(M||(e.TypeNavigationMode=M={}));var R;(function(me){me[me.Idle=0]=\"Idle\",me[me.Typing=1]=\"Typing\"})(R||(R={})),e.DefaultKeyboardNavigationDelegate=new class{mightProducePrintableCharacter(me){return me.ctrlKey||me.metaKey||me.altKey?!1:me.keyCode>=31&&me.keyCode<=56||me.keyCode>=21&&me.keyCode<=30||me.keyCode>=98&&me.keyCode<=107||me.keyCode>=85&&me.keyCode<=95}};class x{constructor(X,U,G,z,H){this.list=X,this.view=U,this.keyboardNavigationLabelProvider=G,this.keyboardNavigationEventFilter=z,this.delegate=H,this.enabled=!1,this.state=R.Idle,this.mode=M.Automatic,this.triggered=!1,this.previouslyFocused=-1,this.enabledDisposables=new t.DisposableStore,this.disposables=new t.DisposableStore,this.updateOptions(X.options)}updateOptions(X){var U,G;!((U=X.typeNavigationEnabled)!==null&&U!==void 0)||U?this.enable():this.disable(),this.mode=(G=X.typeNavigationMode)!==null&&G!==void 0?G:M.Automatic}enable(){if(this.enabled)return;let X=!1;const U=i.Event.chain(this.enabledDisposables.add(new k.DomEmitter(this.view.domNode,\"keydown\")).event,H=>H.filter(Y=>!m(Y.target)).filter(()=>this.mode===M.Automatic||this.triggered).map(Y=>new y.StandardKeyboardEvent(Y)).filter(Y=>X||this.keyboardNavigationEventFilter(Y)).filter(Y=>this.delegate.mightProducePrintableCharacter(Y)).forEach(Y=>L.EventHelper.stop(Y,!0)).map(Y=>Y.browserEvent.key)),G=i.Event.debounce(U,()=>null,800,void 0,void 0,void 0,this.enabledDisposables);i.Event.reduce(i.Event.any(U,G),(H,Y)=>Y===null?null:(H||\"\")+Y,void 0,this.enabledDisposables)(this.onInput,this,this.enabledDisposables),G(this.onClear,this,this.enabledDisposables),U(()=>X=!0,void 0,this.enabledDisposables),G(()=>X=!1,void 0,this.enabledDisposables),this.enabled=!0,this.triggered=!1}disable(){this.enabled&&(this.enabledDisposables.clear(),this.enabled=!1,this.triggered=!1)}onClear(){var X;const U=this.list.getFocus();if(U.length>0&&U[0]===this.previouslyFocused){const G=(X=this.list.options.accessibilityProvider)===null||X===void 0?void 0:X.getAriaLabel(this.list.element(U[0]));G&&(0,S.alert)(G)}this.previouslyFocused=-1}onInput(X){if(!X){this.state=R.Idle,this.triggered=!1;return}const U=this.list.getFocus(),G=U.length>0?U[0]:0,z=this.state===R.Idle?1:0;this.state=R.Typing;for(let H=0;H<this.list.length;H++){const Y=(G+H+z)%this.list.length,j=this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(this.view.element(Y)),Z=j&&j.toString();if(this.list.options.typeNavigationEnabled){if(typeof Z<\"u\"){if((0,n.matchesPrefix)(X,Z)){this.previouslyFocused=G,this.list.setFocus([Y]),this.list.reveal(Y);return}const ee=(0,n.matchesFuzzy2)(X,Z);if(ee&&ee[0].end-ee[0].start>1&&ee.length===1){this.previouslyFocused=G,this.list.setFocus([Y]),this.list.reveal(Y);return}}}else if(typeof Z>\"u\"||(0,n.matchesPrefix)(X,Z)){this.previouslyFocused=G,this.list.setFocus([Y]),this.list.reveal(Y);return}}}dispose(){this.disable(),this.enabledDisposables.dispose(),this.disposables.dispose()}}class O{constructor(X,U){this.list=X,this.view=U,this.disposables=new t.DisposableStore;const G=i.Event.chain(this.disposables.add(new k.DomEmitter(U.domNode,\"keydown\")).event,H=>H.filter(Y=>!m(Y.target)).map(Y=>new y.StandardKeyboardEvent(Y)));i.Event.chain(G,H=>H.filter(Y=>Y.keyCode===2&&!Y.ctrlKey&&!Y.metaKey&&!Y.shiftKey&&!Y.altKey))(this.onTab,this,this.disposables)}onTab(X){if(X.target!==this.view.domNode)return;const U=this.list.getFocus();if(U.length===0)return;const G=this.view.domElement(U[0]);if(!G)return;const z=G.querySelector(\"[tabIndex]\");if(!z||!(z instanceof HTMLElement)||z.tabIndex===-1)return;const H=(0,L.getWindow)(z).getComputedStyle(z);H.visibility===\"hidden\"||H.display===\"none\"||(X.preventDefault(),X.stopPropagation(),z.focus())}dispose(){this.disposables.dispose()}}function B(me){return u.isMacintosh?me.browserEvent.metaKey:me.browserEvent.ctrlKey}e.isSelectionSingleChangeEvent=B;function W(me){return me.browserEvent.shiftKey}e.isSelectionRangeChangeEvent=W;function V(me){return(0,L.isMouseEvent)(me)&&me.button===2}const K={isSelectionSingleChangeEvent:B,isSelectionRangeChangeEvent:W};class F{constructor(X){this.list=X,this.disposables=new t.DisposableStore,this._onPointer=new i.Emitter,this.onPointer=this._onPointer.event,X.options.multipleSelectionSupport!==!1&&(this.multipleSelectionController=this.list.options.multipleSelectionController||K),this.mouseSupport=typeof X.options.mouseSupport>\"u\"||!!X.options.mouseSupport,this.mouseSupport&&(X.onMouseDown(this.onMouseDown,this,this.disposables),X.onContextMenu(this.onContextMenu,this,this.disposables),X.onMouseDblClick(this.onDoubleClick,this,this.disposables),X.onTouchStart(this.onMouseDown,this,this.disposables),this.disposables.add(E.Gesture.addTarget(X.getHTMLElement()))),i.Event.any(X.onMouseClick,X.onMouseMiddleClick,X.onTap)(this.onViewPointer,this,this.disposables)}updateOptions(X){X.multipleSelectionSupport!==void 0&&(this.multipleSelectionController=void 0,X.multipleSelectionSupport&&(this.multipleSelectionController=this.list.options.multipleSelectionController||K))}isSelectionSingleChangeEvent(X){return this.multipleSelectionController?this.multipleSelectionController.isSelectionSingleChangeEvent(X):!1}isSelectionRangeChangeEvent(X){return this.multipleSelectionController?this.multipleSelectionController.isSelectionRangeChangeEvent(X):!1}isSelectionChangeEvent(X){return this.isSelectionSingleChangeEvent(X)||this.isSelectionRangeChangeEvent(X)}onMouseDown(X){w(X.browserEvent.target)||(0,L.getActiveElement)()!==X.browserEvent.target&&this.list.domFocus()}onContextMenu(X){if(m(X.browserEvent.target)||w(X.browserEvent.target))return;const U=typeof X.index>\"u\"?[]:[X.index];this.list.setFocus(U,X.browserEvent)}onViewPointer(X){if(!this.mouseSupport||m(X.browserEvent.target)||w(X.browserEvent.target)||X.browserEvent.isHandledByList)return;X.browserEvent.isHandledByList=!0;const U=X.index;if(typeof U>\"u\"){this.list.setFocus([],X.browserEvent),this.list.setSelection([],X.browserEvent),this.list.setAnchor(void 0);return}if(this.isSelectionChangeEvent(X))return this.changeSelection(X);this.list.setFocus([U],X.browserEvent),this.list.setAnchor(U),V(X.browserEvent)||this.list.setSelection([U],X.browserEvent),this._onPointer.fire(X)}onDoubleClick(X){if(m(X.browserEvent.target)||w(X.browserEvent.target)||this.isSelectionChangeEvent(X)||X.browserEvent.isHandledByList)return;X.browserEvent.isHandledByList=!0;const U=this.list.getFocus();this.list.setSelection(U,X.browserEvent)}changeSelection(X){const U=X.index;let G=this.list.getAnchor();if(this.isSelectionRangeChangeEvent(X)){if(typeof G>\"u\"){const le=this.list.getFocus()[0];G=le??U,this.list.setAnchor(G)}const z=Math.min(G,U),H=Math.max(G,U),Y=(0,_.range)(z,H+1),j=this.list.getSelection(),Z=ae(ne(j,[G]),G);if(Z.length===0)return;const ee=ne(Y,$(j,Z));this.list.setSelection(ee,X.browserEvent),this.list.setFocus([U],X.browserEvent)}else if(this.isSelectionSingleChangeEvent(X)){const z=this.list.getSelection(),H=z.filter(Y=>Y!==U);this.list.setFocus([U]),this.list.setAnchor(U),z.length===H.length?this.list.setSelection([...H,U],X.browserEvent):this.list.setSelection(H,X.browserEvent)}}dispose(){this.disposables.dispose()}}e.MouseController=F;class q{constructor(X,U){this.styleElement=X,this.selectorSuffix=U}style(X){var U,G;const z=this.selectorSuffix&&`.${this.selectorSuffix}`,H=[];X.listBackground&&H.push(`.monaco-list${z} .monaco-list-rows { background: ${X.listBackground}; }`),X.listFocusBackground&&(H.push(`.monaco-list${z}:focus .monaco-list-row.focused { background-color: ${X.listFocusBackground}; }`),H.push(`.monaco-list${z}:focus .monaco-list-row.focused:hover { background-color: ${X.listFocusBackground}; }`)),X.listFocusForeground&&H.push(`.monaco-list${z}:focus .monaco-list-row.focused { color: ${X.listFocusForeground}; }`),X.listActiveSelectionBackground&&(H.push(`.monaco-list${z}:focus .monaco-list-row.selected { background-color: ${X.listActiveSelectionBackground}; }`),H.push(`.monaco-list${z}:focus .monaco-list-row.selected:hover { background-color: ${X.listActiveSelectionBackground}; }`)),X.listActiveSelectionForeground&&H.push(`.monaco-list${z}:focus .monaco-list-row.selected { color: ${X.listActiveSelectionForeground}; }`),X.listActiveSelectionIconForeground&&H.push(`.monaco-list${z}:focus .monaco-list-row.selected .codicon { color: ${X.listActiveSelectionIconForeground}; }`),X.listFocusAndSelectionBackground&&H.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${z}:focus .monaco-list-row.selected.focused { background-color: ${X.listFocusAndSelectionBackground}; }\n\t\t\t`),X.listFocusAndSelectionForeground&&H.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${z}:focus .monaco-list-row.selected.focused { color: ${X.listFocusAndSelectionForeground}; }\n\t\t\t`),X.listInactiveFocusForeground&&(H.push(`.monaco-list${z} .monaco-list-row.focused { color:  ${X.listInactiveFocusForeground}; }`),H.push(`.monaco-list${z} .monaco-list-row.focused:hover { color:  ${X.listInactiveFocusForeground}; }`)),X.listInactiveSelectionIconForeground&&H.push(`.monaco-list${z} .monaco-list-row.focused .codicon { color:  ${X.listInactiveSelectionIconForeground}; }`),X.listInactiveFocusBackground&&(H.push(`.monaco-list${z} .monaco-list-row.focused { background-color:  ${X.listInactiveFocusBackground}; }`),H.push(`.monaco-list${z} .monaco-list-row.focused:hover { background-color:  ${X.listInactiveFocusBackground}; }`)),X.listInactiveSelectionBackground&&(H.push(`.monaco-list${z} .monaco-list-row.selected { background-color:  ${X.listInactiveSelectionBackground}; }`),H.push(`.monaco-list${z} .monaco-list-row.selected:hover { background-color:  ${X.listInactiveSelectionBackground}; }`)),X.listInactiveSelectionForeground&&H.push(`.monaco-list${z} .monaco-list-row.selected { color: ${X.listInactiveSelectionForeground}; }`),X.listHoverBackground&&H.push(`.monaco-list${z}:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused) { background-color: ${X.listHoverBackground}; }`),X.listHoverForeground&&H.push(`.monaco-list${z}:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused) { color:  ${X.listHoverForeground}; }`);const Y=(0,L.asCssValueWithDefault)(X.listFocusAndSelectionOutline,(0,L.asCssValueWithDefault)(X.listSelectionOutline,(U=X.listFocusOutline)!==null&&U!==void 0?U:\"\"));Y&&H.push(`.monaco-list${z}:focus .monaco-list-row.focused.selected { outline: 1px solid ${Y}; outline-offset: -1px;}`),X.listFocusOutline&&H.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${z}:focus .monaco-list-row.focused { outline: 1px solid ${X.listFocusOutline}; outline-offset: -1px; }\n\t\t\t\t.monaco-workbench.context-menu-visible .monaco-list${z}.last-focused .monaco-list-row.focused { outline: 1px solid ${X.listFocusOutline}; outline-offset: -1px; }\n\t\t\t`);const j=(0,L.asCssValueWithDefault)(X.listSelectionOutline,(G=X.listInactiveFocusOutline)!==null&&G!==void 0?G:\"\");j&&H.push(`.monaco-list${z} .monaco-list-row.focused.selected { outline: 1px dotted ${j}; outline-offset: -1px; }`),X.listSelectionOutline&&H.push(`.monaco-list${z} .monaco-list-row.selected { outline: 1px dotted ${X.listSelectionOutline}; outline-offset: -1px; }`),X.listInactiveFocusOutline&&H.push(`.monaco-list${z} .monaco-list-row.focused { outline: 1px dotted ${X.listInactiveFocusOutline}; outline-offset: -1px; }`),X.listHoverOutline&&H.push(`.monaco-list${z} .monaco-list-row:hover { outline: 1px dashed ${X.listHoverOutline}; outline-offset: -1px; }`),X.listDropOverBackground&&H.push(`\n\t\t\t\t.monaco-list${z}.drop-target,\n\t\t\t\t.monaco-list${z} .monaco-list-rows.drop-target,\n\t\t\t\t.monaco-list${z} .monaco-list-row.drop-target { background-color: ${X.listDropOverBackground} !important; color: inherit !important; }\n\t\t\t`),X.listDropBetweenBackground&&(H.push(`\n\t\t\t.monaco-list${z} .monaco-list-rows.drop-target-before .monaco-list-row:first-child::before,\n\t\t\t.monaco-list${z} .monaco-list-row.drop-target-before::before {\n\t\t\t\tcontent: \"\"; position: absolute; top: 0px; left: 0px; width: 100%; height: 1px;\n\t\t\t\tbackground-color: ${X.listDropBetweenBackground};\n\t\t\t}`),H.push(`\n\t\t\t.monaco-list${z} .monaco-list-rows.drop-target-after .monaco-list-row:last-child::after,\n\t\t\t.monaco-list${z} .monaco-list-row.drop-target-after::after {\n\t\t\t\tcontent: \"\"; position: absolute; bottom: 0px; left: 0px; width: 100%; height: 1px;\n\t\t\t\tbackground-color: ${X.listDropBetweenBackground};\n\t\t\t}`)),X.tableColumnsBorder&&H.push(`\n\t\t\t\t.monaco-table > .monaco-split-view2,\n\t\t\t\t.monaco-table > .monaco-split-view2 .monaco-sash.vertical::before,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table:hover > .monaco-split-view2,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table:hover > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: ${X.tableColumnsBorder};\n\t\t\t\t}\n\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t}\n\t\t\t`),X.tableOddRowsBackgroundColor&&H.push(`\n\t\t\t\t.monaco-table .monaco-list-row[data-parity=odd]:not(.focused):not(.selected):not(:hover) .monaco-table-tr,\n\t\t\t\t.monaco-table .monaco-list:not(:focus) .monaco-list-row[data-parity=odd].focused:not(.selected):not(:hover) .monaco-table-tr,\n\t\t\t\t.monaco-table .monaco-list:not(.focused) .monaco-list-row[data-parity=odd].focused:not(.selected):not(:hover) .monaco-table-tr {\n\t\t\t\t\tbackground-color: ${X.tableOddRowsBackgroundColor};\n\t\t\t\t}\n\t\t\t`),this.styleElement.textContent=H.join(`\n`)}}e.DefaultStyleController=q,e.unthemedListStyles={listFocusBackground:\"#7FB0D0\",listActiveSelectionBackground:\"#0E639C\",listActiveSelectionForeground:\"#FFFFFF\",listActiveSelectionIconForeground:\"#FFFFFF\",listFocusAndSelectionOutline:\"#90C2F9\",listFocusAndSelectionBackground:\"#094771\",listFocusAndSelectionForeground:\"#FFFFFF\",listInactiveSelectionBackground:\"#3F3F46\",listInactiveSelectionIconForeground:\"#FFFFFF\",listHoverBackground:\"#2A2D2E\",listDropOverBackground:\"#383B3D\",listDropBetweenBackground:\"#EEEEEE\",treeIndentGuidesStroke:\"#a9a9a9\",treeInactiveIndentGuidesStroke:b.Color.fromHex(\"#a9a9a9\").transparent(.4).toString(),tableColumnsBorder:b.Color.fromHex(\"#cccccc\").transparent(.2).toString(),tableOddRowsBackgroundColor:b.Color.fromHex(\"#cccccc\").transparent(.04).toString(),listBackground:void 0,listFocusForeground:void 0,listInactiveSelectionForeground:void 0,listInactiveFocusForeground:void 0,listInactiveFocusBackground:void 0,listHoverForeground:void 0,listFocusOutline:void 0,listInactiveFocusOutline:void 0,listSelectionOutline:void 0,listHoverOutline:void 0};const ie={keyboardSupport:!0,mouseSupport:!0,multipleSelectionSupport:!0,dnd:{getDragURI(){return null},onDragStart(){},onDragOver(){return!1},drop(){},dispose(){}}};function ae(me,X){const U=me.indexOf(X);if(U===-1)return[];const G=[];let z=U-1;for(;z>=0&&me[z]===X-(U-z);)G.push(me[z--]);for(G.reverse(),z=U;z<me.length&&me[z]===X+(z-U);)G.push(me[z++]);return G}function ne(me,X){const U=[];let G=0,z=0;for(;G<me.length||z<X.length;)if(G>=me.length)U.push(X[z++]);else if(z>=X.length)U.push(me[G++]);else if(me[G]===X[z]){U.push(me[G]),G++,z++;continue}else me[G]<X[z]?U.push(me[G++]):U.push(X[z++]);return U}function $(me,X){const U=[];let G=0,z=0;for(;G<me.length||z<X.length;)if(G>=me.length)U.push(X[z++]);else if(z>=X.length)U.push(me[G++]);else if(me[G]===X[z]){G++,z++;continue}else me[G]<X[z]?U.push(me[G++]):z++;return U}const J=(me,X)=>me-X;class Q{constructor(X,U){this._templateId=X,this.renderers=U}get templateId(){return this._templateId}renderTemplate(X){return this.renderers.map(U=>U.renderTemplate(X))}renderElement(X,U,G,z){let H=0;for(const Y of this.renderers)Y.renderElement(X,U,G[H++],z)}disposeElement(X,U,G,z){var H;let Y=0;for(const j of this.renderers)(H=j.disposeElement)===null||H===void 0||H.call(j,X,U,G[Y],z),Y+=1}disposeTemplate(X){let U=0;for(const G of this.renderers)G.disposeTemplate(X[U++])}}class re{constructor(X){this.accessibilityProvider=X,this.templateId=\"a18n\"}renderTemplate(X){return X}renderElement(X,U,G){const z=this.accessibilityProvider.getAriaLabel(X);z?G.setAttribute(\"aria-label\",z):G.removeAttribute(\"aria-label\");const H=this.accessibilityProvider.getAriaLevel&&this.accessibilityProvider.getAriaLevel(X);typeof H==\"number\"?G.setAttribute(\"aria-level\",`${H}`):G.removeAttribute(\"aria-level\")}disposeTemplate(X){}}class de{constructor(X,U){this.list=X,this.dnd=U}getDragElements(X){const U=this.list.getSelectedElements();return U.indexOf(X)>-1?U:[X]}getDragURI(X){return this.dnd.getDragURI(X)}getDragLabel(X,U){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(X,U)}onDragStart(X,U){var G,z;(z=(G=this.dnd).onDragStart)===null||z===void 0||z.call(G,X,U)}onDragOver(X,U,G,z,H){return this.dnd.onDragOver(X,U,G,z,H)}onDragLeave(X,U,G,z){var H,Y;(Y=(H=this.dnd).onDragLeave)===null||Y===void 0||Y.call(H,X,U,G,z)}onDragEnd(X){var U,G;(G=(U=this.dnd).onDragEnd)===null||G===void 0||G.call(U,X)}drop(X,U,G,z,H){this.dnd.drop(X,U,G,z,H)}dispose(){this.dnd.dispose()}}class he{get onDidChangeFocus(){return i.Event.map(this.eventBufferer.wrapEvent(this.focus.onChange),X=>this.toListEvent(X),this.disposables)}get onDidChangeSelection(){return i.Event.map(this.eventBufferer.wrapEvent(this.selection.onChange),X=>this.toListEvent(X),this.disposables)}get domId(){return this.view.domId}get onDidScroll(){return this.view.onDidScroll}get onMouseClick(){return this.view.onMouseClick}get onMouseDblClick(){return this.view.onMouseDblClick}get onMouseMiddleClick(){return this.view.onMouseMiddleClick}get onPointer(){return this.mouseController.onPointer}get onMouseDown(){return this.view.onMouseDown}get onMouseOver(){return this.view.onMouseOver}get onMouseOut(){return this.view.onMouseOut}get onTouchStart(){return this.view.onTouchStart}get onTap(){return this.view.onTap}get onContextMenu(){let X=!1;const U=i.Event.chain(this.disposables.add(new k.DomEmitter(this.view.domNode,\"keydown\")).event,H=>H.map(Y=>new y.StandardKeyboardEvent(Y)).filter(Y=>X=Y.keyCode===58||Y.shiftKey&&Y.keyCode===68).map(Y=>L.EventHelper.stop(Y,!0)).filter(()=>!1)),G=i.Event.chain(this.disposables.add(new k.DomEmitter(this.view.domNode,\"keyup\")).event,H=>H.forEach(()=>X=!1).map(Y=>new y.StandardKeyboardEvent(Y)).filter(Y=>Y.keyCode===58||Y.shiftKey&&Y.keyCode===68).map(Y=>L.EventHelper.stop(Y,!0)).map(({browserEvent:Y})=>{const j=this.getFocus(),Z=j.length?j[0]:void 0,ee=typeof Z<\"u\"?this.view.element(Z):void 0,le=typeof Z<\"u\"?this.view.domElement(Z):this.view.domNode;return{index:Z,element:ee,anchor:le,browserEvent:Y}})),z=i.Event.chain(this.view.onContextMenu,H=>H.filter(Y=>!X).map(({element:Y,index:j,browserEvent:Z})=>({element:Y,index:j,anchor:new s.StandardMouseEvent((0,L.getWindow)(this.view.domNode),Z),browserEvent:Z})));return i.Event.any(U,G,z)}get onKeyDown(){return this.disposables.add(new k.DomEmitter(this.view.domNode,\"keydown\")).event}get onDidFocus(){return i.Event.signal(this.disposables.add(new k.DomEmitter(this.view.domNode,\"focus\",!0)).event)}constructor(X,U,G,z,H=ie){var Y,j,Z,ee;this.user=X,this._options=H,this.focus=new o(\"focused\"),this.anchor=new o(\"anchor\"),this.eventBufferer=new i.EventBufferer,this._ariaLabel=\"\",this.disposables=new t.DisposableStore,this._onDidDispose=new i.Emitter,this.onDidDispose=this._onDidDispose.event;const le=this._options.accessibilityProvider&&this._options.accessibilityProvider.getWidgetRole?(Y=this._options.accessibilityProvider)===null||Y===void 0?void 0:Y.getWidgetRole():\"list\";this.selection=new g(le!==\"listbox\");const ue=[this.focus.renderer,this.selection.renderer];this.accessibilityProvider=H.accessibilityProvider,this.accessibilityProvider&&(ue.push(new re(this.accessibilityProvider)),(Z=(j=this.accessibilityProvider).onDidChangeActiveDescendant)===null||Z===void 0||Z.call(j,this.onDidChangeActiveDescendant,this,this.disposables)),z=z.map(pe=>new Q(pe.templateId,[...ue,pe]));const ce={...H,dnd:H.dnd&&new de(this,H.dnd)};if(this.view=this.createListView(U,G,z,ce),this.view.domNode.setAttribute(\"role\",le),H.styleController)this.styleController=H.styleController(this.view.domId);else{const pe=(0,L.createStyleSheet)(this.view.domNode);this.styleController=new q(pe,this.view.domId)}if(this.spliceable=new p.CombinedSpliceable([new h(this.focus,this.view,H.identityProvider),new h(this.selection,this.view,H.identityProvider),new h(this.anchor,this.view,H.identityProvider),this.view]),this.disposables.add(this.focus),this.disposables.add(this.selection),this.disposables.add(this.anchor),this.disposables.add(this.view),this.disposables.add(this._onDidDispose),this.disposables.add(new O(this,this.view)),(typeof H.keyboardSupport!=\"boolean\"||H.keyboardSupport)&&(this.keyboardController=new N(this,this.view,H),this.disposables.add(this.keyboardController)),H.keyboardNavigationLabelProvider){const pe=H.keyboardNavigationDelegate||e.DefaultKeyboardNavigationDelegate;this.typeNavigationController=new x(this,this.view,H.keyboardNavigationLabelProvider,(ee=H.keyboardNavigationEventFilter)!==null&&ee!==void 0?ee:()=>!0,pe),this.disposables.add(this.typeNavigationController)}this.mouseController=this.createMouseController(H),this.disposables.add(this.mouseController),this.onDidChangeFocus(this._onFocusChange,this,this.disposables),this.onDidChangeSelection(this._onSelectionChange,this,this.disposables),this.accessibilityProvider&&(this.ariaLabel=this.accessibilityProvider.getWidgetAriaLabel()),this._options.multipleSelectionSupport!==!1&&this.view.domNode.setAttribute(\"aria-multiselectable\",\"true\")}createListView(X,U,G,z){return new d.ListView(X,U,G,z)}createMouseController(X){return new F(this)}updateOptions(X={}){var U,G;this._options={...this._options,...X},(U=this.typeNavigationController)===null||U===void 0||U.updateOptions(this._options),this._options.multipleSelectionController!==void 0&&(this._options.multipleSelectionSupport?this.view.domNode.setAttribute(\"aria-multiselectable\",\"true\"):this.view.domNode.removeAttribute(\"aria-multiselectable\")),this.mouseController.updateOptions(X),(G=this.keyboardController)===null||G===void 0||G.updateOptions(X),this.view.updateOptions(X)}get options(){return this._options}splice(X,U,G=[]){if(X<0||X>this.view.length)throw new c.ListError(this.user,`Invalid start index: ${X}`);if(U<0)throw new c.ListError(this.user,`Invalid delete count: ${U}`);U===0&&G.length===0||this.eventBufferer.bufferEvents(()=>this.spliceable.splice(X,U,G))}rerender(){this.view.rerender()}element(X){return this.view.element(X)}indexOf(X){return this.view.indexOf(X)}indexAt(X){return this.view.indexAt(X)}get length(){return this.view.length}get contentHeight(){return this.view.contentHeight}get onDidChangeContentHeight(){return this.view.onDidChangeContentHeight}get scrollTop(){return this.view.getScrollTop()}set scrollTop(X){this.view.setScrollTop(X)}get scrollHeight(){return this.view.scrollHeight}get renderHeight(){return this.view.renderHeight}get firstVisibleIndex(){return this.view.firstVisibleIndex}get ariaLabel(){return this._ariaLabel}set ariaLabel(X){this._ariaLabel=X,this.view.domNode.setAttribute(\"aria-label\",X)}domFocus(){this.view.domNode.focus({preventScroll:!0})}layout(X,U){this.view.layout(X,U)}setSelection(X,U){for(const G of X)if(G<0||G>=this.length)throw new c.ListError(this.user,`Invalid index ${G}`);this.selection.set(X,U)}getSelection(){return this.selection.get()}getSelectedElements(){return this.getSelection().map(X=>this.view.element(X))}setAnchor(X){if(typeof X>\"u\"){this.anchor.set([]);return}if(X<0||X>=this.length)throw new c.ListError(this.user,`Invalid index ${X}`);this.anchor.set([X])}getAnchor(){return(0,_.firstOrDefault)(this.anchor.get(),void 0)}getAnchorElement(){const X=this.getAnchor();return typeof X>\"u\"?void 0:this.element(X)}setFocus(X,U){for(const G of X)if(G<0||G>=this.length)throw new c.ListError(this.user,`Invalid index ${G}`);this.focus.set(X,U)}focusNext(X=1,U=!1,G,z){if(this.length===0)return;const H=this.focus.get(),Y=this.findNextIndex(H.length>0?H[0]+X:0,U,z);Y>-1&&this.setFocus([Y],G)}focusPrevious(X=1,U=!1,G,z){if(this.length===0)return;const H=this.focus.get(),Y=this.findPreviousIndex(H.length>0?H[0]-X:0,U,z);Y>-1&&this.setFocus([Y],G)}async focusNextPage(X,U){let G=this.view.indexAt(this.view.getScrollTop()+this.view.renderHeight);G=G===0?0:G-1;const z=this.getFocus()[0];if(z!==G&&(z===void 0||G>z)){const H=this.findPreviousIndex(G,!1,U);H>-1&&z!==H?this.setFocus([H],X):this.setFocus([G],X)}else{const H=this.view.getScrollTop();let Y=H+this.view.renderHeight;G>z&&(Y-=this.view.elementHeight(G)),this.view.setScrollTop(Y),this.view.getScrollTop()!==H&&(this.setFocus([]),await(0,v.timeout)(0),await this.focusNextPage(X,U))}}async focusPreviousPage(X,U,G=()=>0){let z;const H=G(),Y=this.view.getScrollTop()+H;Y===0?z=this.view.indexAt(Y):z=this.view.indexAfter(Y-1);const j=this.getFocus()[0];if(j!==z&&(j===void 0||j>=z)){const Z=this.findNextIndex(z,!1,U);Z>-1&&j!==Z?this.setFocus([Z],X):this.setFocus([z],X)}else{const Z=Y;this.view.setScrollTop(Y-this.view.renderHeight-H),this.view.getScrollTop()+G()!==Z&&(this.setFocus([]),await(0,v.timeout)(0),await this.focusPreviousPage(X,U,G))}}focusLast(X,U){if(this.length===0)return;const G=this.findPreviousIndex(this.length-1,!1,U);G>-1&&this.setFocus([G],X)}focusFirst(X,U){this.focusNth(0,X,U)}focusNth(X,U,G){if(this.length===0)return;const z=this.findNextIndex(X,!1,G);z>-1&&this.setFocus([z],U)}findNextIndex(X,U=!1,G){for(let z=0;z<this.length;z++){if(X>=this.length&&!U)return-1;if(X=X%this.length,!G||G(this.element(X)))return X;X++}return-1}findPreviousIndex(X,U=!1,G){for(let z=0;z<this.length;z++){if(X<0&&!U)return-1;if(X=(this.length+X%this.length)%this.length,!G||G(this.element(X)))return X;X--}return-1}getFocus(){return this.focus.get()}getFocusedElements(){return this.getFocus().map(X=>this.view.element(X))}reveal(X,U,G=0){if(X<0||X>=this.length)throw new c.ListError(this.user,`Invalid index ${X}`);const z=this.view.getScrollTop(),H=this.view.elementTop(X),Y=this.view.elementHeight(X);if((0,f.isNumber)(U)){const j=Y-this.view.renderHeight+G;this.view.setScrollTop(j*(0,r.clamp)(U,0,1)+H-G)}else{const j=H+Y,Z=z+this.view.renderHeight;H<z+G&&j>=Z||(H<z+G||j>=Z&&Y>=this.view.renderHeight?this.view.setScrollTop(H-G):j>=Z&&this.view.setScrollTop(j-this.view.renderHeight))}}getRelativeTop(X,U=0){if(X<0||X>=this.length)throw new c.ListError(this.user,`Invalid index ${X}`);const G=this.view.getScrollTop(),z=this.view.elementTop(X),H=this.view.elementHeight(X);if(z<G+U||z+H>G+this.view.renderHeight)return null;const Y=H-this.view.renderHeight+U;return Math.abs((G+U-z)/Y)}getHTMLElement(){return this.view.domNode}getScrollableElement(){return this.view.scrollableElementDomNode}getElementID(X){return this.view.getElementDomId(X)}getElementTop(X){return this.view.elementTop(X)}style(X){this.styleController.style(X)}toListEvent({indexes:X,browserEvent:U}){return{indexes:X,elements:X.map(G=>this.view.element(G)),browserEvent:U}}_onFocusChange(){const X=this.focus.get();this.view.domNode.classList.toggle(\"element-focused\",X.length>0),this.onDidChangeActiveDescendant()}onDidChangeActiveDescendant(){var X;const U=this.focus.get();if(U.length>0){let G;!((X=this.accessibilityProvider)===null||X===void 0)&&X.getActiveDescendantId&&(G=this.accessibilityProvider.getActiveDescendantId(this.view.element(U[0]))),this.view.domNode.setAttribute(\"aria-activedescendant\",G||this.view.getElementDomId(U[0]))}else this.view.domNode.removeAttribute(\"aria-activedescendant\")}_onSelectionChange(){const X=this.selection.get();this.view.domNode.classList.toggle(\"selection-none\",X.length===0),this.view.domNode.classList.toggle(\"selection-single\",X.length===1),this.view.domNode.classList.toggle(\"selection-multiple\",X.length>1)}dispose(){this._onDidDispose.fire(),this.disposables.dispose(),this._onDidDispose.dispose()}}e.List=he,ke([a.memoize],he.prototype,\"onDidChangeFocus\",null),ke([a.memoize],he.prototype,\"onDidChangeSelection\",null),ke([a.memoize],he.prototype,\"onContextMenu\",null),ke([a.memoize],he.prototype,\"onKeyDown\",null),ke([a.memoize],he.prototype,\"onDidFocus\",null)}),define(se[594],oe([1,0,13,19,6,2,119,275]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PagedList=void 0;class p{get templateId(){return this.renderer.templateId}constructor(i,n){this.renderer=i,this.modelProvider=n}renderTemplate(i){return{data:this.renderer.renderTemplate(i),disposable:E.Disposable.None}}renderElement(i,n,t,r){var u;if((u=t.disposable)===null||u===void 0||u.dispose(),!t.data)return;const f=this.modelProvider();if(f.isResolved(i))return this.renderer.renderElement(f.get(i),i,t.data,r);const c=new k.CancellationTokenSource,d=f.resolve(i,c.token);t.disposable={dispose:()=>c.cancel()},this.renderer.renderPlaceholder(i,t.data),d.then(s=>this.renderer.renderElement(s,i,t.data,r))}disposeTemplate(i){i.disposable&&(i.disposable.dispose(),i.disposable=void 0),i.data&&(this.renderer.disposeTemplate(i.data),i.data=void 0)}}class _{constructor(i,n){this.modelProvider=i,this.accessibilityProvider=n}getWidgetAriaLabel(){return this.accessibilityProvider.getWidgetAriaLabel()}getAriaLabel(i){const n=this.modelProvider();return n.isResolved(i)?this.accessibilityProvider.getAriaLabel(n.get(i)):null}}function v(a,i){return{...i,accessibilityProvider:i.accessibilityProvider&&new _(a,i.accessibilityProvider)}}class b{constructor(i,n,t,r,u={}){const f=()=>this.model,c=r.map(d=>new p(d,f));this.list=new S.List(i,n,t,c,v(f,u))}updateOptions(i){this.list.updateOptions(i)}getHTMLElement(){return this.list.getHTMLElement()}get onDidFocus(){return this.list.onDidFocus}get widget(){return this.list}get onDidDispose(){return this.list.onDidDispose}get onMouseDblClick(){return y.Event.map(this.list.onMouseDblClick,({element:i,index:n,browserEvent:t})=>({element:i===void 0?void 0:this._model.get(i),index:n,browserEvent:t}))}get onPointer(){return y.Event.map(this.list.onPointer,({element:i,index:n,browserEvent:t})=>({element:i===void 0?void 0:this._model.get(i),index:n,browserEvent:t}))}get onDidChangeSelection(){return y.Event.map(this.list.onDidChangeSelection,({elements:i,indexes:n,browserEvent:t})=>({elements:i.map(r=>this._model.get(r)),indexes:n,browserEvent:t}))}get model(){return this._model}set model(i){this._model=i,this.list.splice(0,this.list.length,(0,L.range)(i.length))}getFocus(){return this.list.getFocus()}getSelection(){return this.list.getSelection()}getSelectedElements(){return this.getSelection().map(i=>this.model.get(i))}style(i){this.list.style(i)}dispose(){this.list.dispose()}}e.PagedList=b}),define(se[322],oe([1,0,7,84,158,77,13,39,6,2,145,147,20,424]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SplitView=e.Sizing=void 0;const n={separatorBorder:p.Color.transparent};class t{set size(l){this._size=l}get size(){return this._size}get visible(){return typeof this._cachedVisibleSize>\"u\"}setVisible(l,o){var g,h;if(l!==this.visible){l?(this.size=(0,b.clamp)(this._cachedVisibleSize,this.viewMinimumSize,this.viewMaximumSize),this._cachedVisibleSize=void 0):(this._cachedVisibleSize=typeof o==\"number\"?o:this.size,this.size=0),this.container.classList.toggle(\"visible\",l);try{(h=(g=this.view).setVisible)===null||h===void 0||h.call(g,l)}catch(m){console.error(\"Splitview: Failed to set visible view\"),console.error(m)}}}get minimumSize(){return this.visible?this.view.minimumSize:0}get viewMinimumSize(){return this.view.minimumSize}get maximumSize(){return this.visible?this.view.maximumSize:0}get viewMaximumSize(){return this.view.maximumSize}get priority(){return this.view.priority}get proportionalLayout(){var l;return(l=this.view.proportionalLayout)!==null&&l!==void 0?l:!0}get snap(){return!!this.view.snap}set enabled(l){this.container.style.pointerEvents=l?\"\":\"none\"}constructor(l,o,g,h){this.container=l,this.view=o,this.disposable=h,this._cachedVisibleSize=void 0,typeof g==\"number\"?(this._size=g,this._cachedVisibleSize=void 0,l.classList.add(\"visible\")):(this._size=0,this._cachedVisibleSize=g.cachedVisibleSize)}layout(l,o){this.layoutContainer(l);try{this.view.layout(this.size,l,o)}catch(g){console.error(\"Splitview: Failed to layout view\"),console.error(g)}}dispose(){this.disposable.dispose()}}class r extends t{layoutContainer(l){this.container.style.top=`${l}px`,this.container.style.height=`${this.size}px`}}class u extends t{layoutContainer(l){this.container.style.left=`${l}px`,this.container.style.width=`${this.size}px`}}var f;(function(s){s[s.Idle=0]=\"Idle\",s[s.Busy=1]=\"Busy\"})(f||(f={}));var c;(function(s){s.Distribute={type:\"distribute\"};function l(h){return{type:\"split\",index:h}}s.Split=l;function o(h){return{type:\"auto\",index:h}}s.Auto=o;function g(h){return{type:\"invisible\",cachedVisibleSize:h}}s.Invisible=g})(c||(e.Sizing=c={}));class d extends v.Disposable{get orthogonalStartSash(){return this._orthogonalStartSash}get orthogonalEndSash(){return this._orthogonalEndSash}get startSnappingEnabled(){return this._startSnappingEnabled}get endSnappingEnabled(){return this._endSnappingEnabled}set orthogonalStartSash(l){for(const o of this.sashItems)o.sash.orthogonalStartSash=l;this._orthogonalStartSash=l}set orthogonalEndSash(l){for(const o of this.sashItems)o.sash.orthogonalEndSash=l;this._orthogonalEndSash=l}set startSnappingEnabled(l){this._startSnappingEnabled!==l&&(this._startSnappingEnabled=l,this.updateSashEnablement())}set endSnappingEnabled(l){this._endSnappingEnabled!==l&&(this._endSnappingEnabled=l,this.updateSashEnablement())}constructor(l,o={}){var g,h,m,C,w;super(),this.size=0,this._contentSize=0,this.proportions=void 0,this.viewItems=[],this.sashItems=[],this.state=f.Idle,this._onDidSashChange=this._register(new _.Emitter),this._onDidSashReset=this._register(new _.Emitter),this._startSnappingEnabled=!0,this._endSnappingEnabled=!0,this.onDidSashChange=this._onDidSashChange.event,this.onDidSashReset=this._onDidSashReset.event,this.orientation=(g=o.orientation)!==null&&g!==void 0?g:0,this.inverseAltBehavior=(h=o.inverseAltBehavior)!==null&&h!==void 0?h:!1,this.proportionalLayout=(m=o.proportionalLayout)!==null&&m!==void 0?m:!0,this.getSashOrthogonalSize=o.getSashOrthogonalSize,this.el=document.createElement(\"div\"),this.el.classList.add(\"monaco-split-view2\"),this.el.classList.add(this.orientation===0?\"vertical\":\"horizontal\"),l.appendChild(this.el),this.sashContainer=(0,L.append)(this.el,(0,L.$)(\".sash-container\")),this.viewContainer=(0,L.$)(\".split-view-container\"),this.scrollable=this._register(new a.Scrollable({forceIntegerValues:!0,smoothScrollDuration:125,scheduleAtNextAnimationFrame:I=>(0,L.scheduleAtNextAnimationFrame)((0,L.getWindow)(this.el),I)})),this.scrollableElement=this._register(new E.SmoothScrollableElement(this.viewContainer,{vertical:this.orientation===0?(C=o.scrollbarVisibility)!==null&&C!==void 0?C:1:2,horizontal:this.orientation===1?(w=o.scrollbarVisibility)!==null&&w!==void 0?w:1:2},this.scrollable));const D=this._register(new k.DomEmitter(this.viewContainer,\"scroll\")).event;this._register(D(I=>{const T=this.scrollableElement.getScrollPosition(),A=Math.abs(this.viewContainer.scrollLeft-T.scrollLeft)<=1?void 0:this.viewContainer.scrollLeft,P=Math.abs(this.viewContainer.scrollTop-T.scrollTop)<=1?void 0:this.viewContainer.scrollTop;(A!==void 0||P!==void 0)&&this.scrollableElement.setScrollPosition({scrollLeft:A,scrollTop:P})})),this.onDidScroll=this.scrollableElement.onScroll,this._register(this.onDidScroll(I=>{I.scrollTopChanged&&(this.viewContainer.scrollTop=I.scrollTop),I.scrollLeftChanged&&(this.viewContainer.scrollLeft=I.scrollLeft)})),(0,L.append)(this.el,this.scrollableElement.getDomNode()),this.style(o.styles||n),o.descriptor&&(this.size=o.descriptor.size,o.descriptor.views.forEach((I,T)=>{const A=i.isUndefined(I.visible)||I.visible?I.size:{type:\"invisible\",cachedVisibleSize:I.size},P=I.view;this.doAddView(P,A,T,!0)}),this._contentSize=this.viewItems.reduce((I,T)=>I+T.size,0),this.saveProportions())}style(l){l.separatorBorder.isTransparent()?(this.el.classList.remove(\"separator-border\"),this.el.style.removeProperty(\"--separator-border\")):(this.el.classList.add(\"separator-border\"),this.el.style.setProperty(\"--separator-border\",l.separatorBorder.toString()))}addView(l,o,g=this.viewItems.length,h){this.doAddView(l,o,g,h)}layout(l,o){const g=Math.max(this.size,this._contentSize);if(this.size=l,this.layoutContext=o,this.proportions){let h=0;for(let m=0;m<this.viewItems.length;m++){const C=this.viewItems[m],w=this.proportions[m];typeof w==\"number\"?h+=w:l-=C.size}for(let m=0;m<this.viewItems.length;m++){const C=this.viewItems[m],w=this.proportions[m];typeof w==\"number\"&&h>0&&(C.size=(0,b.clamp)(Math.round(w*l/h),C.minimumSize,C.maximumSize))}}else{const h=(0,S.range)(this.viewItems.length),m=h.filter(w=>this.viewItems[w].priority===1),C=h.filter(w=>this.viewItems[w].priority===2);this.resize(this.viewItems.length-1,l-g,void 0,m,C)}this.distributeEmptySpace(),this.layoutViews()}saveProportions(){this.proportionalLayout&&this._contentSize>0&&(this.proportions=this.viewItems.map(l=>l.proportionalLayout&&l.visible?l.size/this._contentSize:void 0))}onSashStart({sash:l,start:o,alt:g}){for(const w of this.viewItems)w.enabled=!1;const h=this.sashItems.findIndex(w=>w.sash===l),m=(0,v.combinedDisposable)((0,L.addDisposableListener)(this.el.ownerDocument.body,\"keydown\",w=>C(this.sashDragState.current,w.altKey)),(0,L.addDisposableListener)(this.el.ownerDocument.body,\"keyup\",()=>C(this.sashDragState.current,!1))),C=(w,D)=>{const I=this.viewItems.map(M=>M.size);let T=Number.NEGATIVE_INFINITY,A=Number.POSITIVE_INFINITY;if(this.inverseAltBehavior&&(D=!D),D)if(h===this.sashItems.length-1){const R=this.viewItems[h];T=(R.minimumSize-R.size)/2,A=(R.maximumSize-R.size)/2}else{const R=this.viewItems[h+1];T=(R.size-R.maximumSize)/2,A=(R.size-R.minimumSize)/2}let P,N;if(!D){const M=(0,S.range)(h,-1),R=(0,S.range)(h+1,this.viewItems.length),x=M.reduce((ie,ae)=>ie+(this.viewItems[ae].minimumSize-I[ae]),0),O=M.reduce((ie,ae)=>ie+(this.viewItems[ae].viewMaximumSize-I[ae]),0),B=R.length===0?Number.POSITIVE_INFINITY:R.reduce((ie,ae)=>ie+(I[ae]-this.viewItems[ae].minimumSize),0),W=R.length===0?Number.NEGATIVE_INFINITY:R.reduce((ie,ae)=>ie+(I[ae]-this.viewItems[ae].viewMaximumSize),0),V=Math.max(x,W),K=Math.min(B,O),F=this.findFirstSnapIndex(M),q=this.findFirstSnapIndex(R);if(typeof F==\"number\"){const ie=this.viewItems[F],ae=Math.floor(ie.viewMinimumSize/2);P={index:F,limitDelta:ie.visible?V-ae:V+ae,size:ie.size}}if(typeof q==\"number\"){const ie=this.viewItems[q],ae=Math.floor(ie.viewMinimumSize/2);N={index:q,limitDelta:ie.visible?K+ae:K-ae,size:ie.size}}}this.sashDragState={start:w,current:w,index:h,sizes:I,minDelta:T,maxDelta:A,alt:D,snapBefore:P,snapAfter:N,disposable:m}};C(o,g)}onSashChange({current:l}){const{index:o,start:g,sizes:h,alt:m,minDelta:C,maxDelta:w,snapBefore:D,snapAfter:I}=this.sashDragState;this.sashDragState.current=l;const T=l-g,A=this.resize(o,T,h,void 0,void 0,C,w,D,I);if(m){const P=o===this.sashItems.length-1,N=this.viewItems.map(W=>W.size),M=P?o:o+1,R=this.viewItems[M],x=R.size-R.maximumSize,O=R.size-R.minimumSize,B=P?o-1:o+1;this.resize(B,-A,N,void 0,void 0,x,O)}this.distributeEmptySpace(),this.layoutViews()}onSashEnd(l){this._onDidSashChange.fire(l),this.sashDragState.disposable.dispose(),this.saveProportions();for(const o of this.viewItems)o.enabled=!0}onViewChange(l,o){const g=this.viewItems.indexOf(l);g<0||g>=this.viewItems.length||(o=typeof o==\"number\"?o:l.size,o=(0,b.clamp)(o,l.minimumSize,l.maximumSize),this.inverseAltBehavior&&g>0?(this.resize(g-1,Math.floor((l.size-o)/2)),this.distributeEmptySpace(),this.layoutViews()):(l.size=o,this.relayout([g],void 0)))}resizeView(l,o){if(!(l<0||l>=this.viewItems.length)){if(this.state!==f.Idle)throw new Error(\"Cant modify splitview\");this.state=f.Busy;try{const g=(0,S.range)(this.viewItems.length).filter(w=>w!==l),h=[...g.filter(w=>this.viewItems[w].priority===1),l],m=g.filter(w=>this.viewItems[w].priority===2),C=this.viewItems[l];o=Math.round(o),o=(0,b.clamp)(o,C.minimumSize,Math.min(C.maximumSize,this.size)),C.size=o,this.relayout(h,m)}finally{this.state=f.Idle}}}distributeViewSizes(){const l=[];let o=0;for(const w of this.viewItems)w.maximumSize-w.minimumSize>0&&(l.push(w),o+=w.size);const g=Math.floor(o/l.length);for(const w of l)w.size=(0,b.clamp)(g,w.minimumSize,w.maximumSize);const h=(0,S.range)(this.viewItems.length),m=h.filter(w=>this.viewItems[w].priority===1),C=h.filter(w=>this.viewItems[w].priority===2);this.relayout(m,C)}getViewSize(l){return l<0||l>=this.viewItems.length?-1:this.viewItems[l].size}doAddView(l,o,g=this.viewItems.length,h){if(this.state!==f.Idle)throw new Error(\"Cant modify splitview\");this.state=f.Busy;try{const m=(0,L.$)(\".split-view-view\");g===this.viewItems.length?this.viewContainer.appendChild(m):this.viewContainer.insertBefore(m,this.viewContainer.children.item(g));const C=l.onDidChange(P=>this.onViewChange(T,P)),w=(0,v.toDisposable)(()=>this.viewContainer.removeChild(m)),D=(0,v.combinedDisposable)(C,w);let I;typeof o==\"number\"?I=o:(o.type===\"auto\"&&(this.areViewsDistributed()?o={type:\"distribute\"}:o={type:\"split\",index:o.index}),o.type===\"split\"?I=this.getViewSize(o.index)/2:o.type===\"invisible\"?I={cachedVisibleSize:o.cachedVisibleSize}:I=l.minimumSize);const T=this.orientation===0?new r(m,l,I,D):new u(m,l,I,D);if(this.viewItems.splice(g,0,T),this.viewItems.length>1){const P={orthogonalStartSash:this.orthogonalStartSash,orthogonalEndSash:this.orthogonalEndSash},N=this.orientation===0?new y.Sash(this.sashContainer,{getHorizontalSashTop:ie=>this.getSashPosition(ie),getHorizontalSashWidth:this.getSashOrthogonalSize},{...P,orientation:1}):new y.Sash(this.sashContainer,{getVerticalSashLeft:ie=>this.getSashPosition(ie),getVerticalSashHeight:this.getSashOrthogonalSize},{...P,orientation:0}),M=this.orientation===0?ie=>({sash:N,start:ie.startY,current:ie.currentY,alt:ie.altKey}):ie=>({sash:N,start:ie.startX,current:ie.currentX,alt:ie.altKey}),x=_.Event.map(N.onDidStart,M)(this.onSashStart,this),B=_.Event.map(N.onDidChange,M)(this.onSashChange,this),V=_.Event.map(N.onDidEnd,()=>this.sashItems.findIndex(ie=>ie.sash===N))(this.onSashEnd,this),K=N.onDidReset(()=>{const ie=this.sashItems.findIndex(Q=>Q.sash===N),ae=(0,S.range)(ie,-1),ne=(0,S.range)(ie+1,this.viewItems.length),$=this.findFirstSnapIndex(ae),J=this.findFirstSnapIndex(ne);typeof $==\"number\"&&!this.viewItems[$].visible||typeof J==\"number\"&&!this.viewItems[J].visible||this._onDidSashReset.fire(ie)}),F=(0,v.combinedDisposable)(x,B,V,K,N),q={sash:N,disposable:F};this.sashItems.splice(g-1,0,q)}m.appendChild(l.element);let A;typeof o!=\"number\"&&o.type===\"split\"&&(A=[o.index]),h||this.relayout([g],A),!h&&typeof o!=\"number\"&&o.type===\"distribute\"&&this.distributeViewSizes()}finally{this.state=f.Idle}}relayout(l,o){const g=this.viewItems.reduce((h,m)=>h+m.size,0);this.resize(this.viewItems.length-1,this.size-g,void 0,l,o),this.distributeEmptySpace(),this.layoutViews(),this.saveProportions()}resize(l,o,g=this.viewItems.map(T=>T.size),h,m,C=Number.NEGATIVE_INFINITY,w=Number.POSITIVE_INFINITY,D,I){if(l<0||l>=this.viewItems.length)return 0;const T=(0,S.range)(l,-1),A=(0,S.range)(l+1,this.viewItems.length);if(m)for(const q of m)(0,S.pushToStart)(T,q),(0,S.pushToStart)(A,q);if(h)for(const q of h)(0,S.pushToEnd)(T,q),(0,S.pushToEnd)(A,q);const P=T.map(q=>this.viewItems[q]),N=T.map(q=>g[q]),M=A.map(q=>this.viewItems[q]),R=A.map(q=>g[q]),x=T.reduce((q,ie)=>q+(this.viewItems[ie].minimumSize-g[ie]),0),O=T.reduce((q,ie)=>q+(this.viewItems[ie].maximumSize-g[ie]),0),B=A.length===0?Number.POSITIVE_INFINITY:A.reduce((q,ie)=>q+(g[ie]-this.viewItems[ie].minimumSize),0),W=A.length===0?Number.NEGATIVE_INFINITY:A.reduce((q,ie)=>q+(g[ie]-this.viewItems[ie].maximumSize),0),V=Math.max(x,W,C),K=Math.min(B,O,w);let F=!1;if(D){const q=this.viewItems[D.index],ie=o>=D.limitDelta;F=ie!==q.visible,q.setVisible(ie,D.size)}if(!F&&I){const q=this.viewItems[I.index],ie=o<I.limitDelta;F=ie!==q.visible,q.setVisible(ie,I.size)}if(F)return this.resize(l,o,g,h,m,C,w);o=(0,b.clamp)(o,V,K);for(let q=0,ie=o;q<P.length;q++){const ae=P[q],ne=(0,b.clamp)(N[q]+ie,ae.minimumSize,ae.maximumSize),$=ne-N[q];ie-=$,ae.size=ne}for(let q=0,ie=o;q<M.length;q++){const ae=M[q],ne=(0,b.clamp)(R[q]-ie,ae.minimumSize,ae.maximumSize),$=ne-R[q];ie+=$,ae.size=ne}return o}distributeEmptySpace(l){const o=this.viewItems.reduce((w,D)=>w+D.size,0);let g=this.size-o;const h=(0,S.range)(this.viewItems.length-1,-1),m=h.filter(w=>this.viewItems[w].priority===1),C=h.filter(w=>this.viewItems[w].priority===2);for(const w of C)(0,S.pushToStart)(h,w);for(const w of m)(0,S.pushToEnd)(h,w);typeof l==\"number\"&&(0,S.pushToEnd)(h,l);for(let w=0;g!==0&&w<h.length;w++){const D=this.viewItems[h[w]],I=(0,b.clamp)(D.size+g,D.minimumSize,D.maximumSize),T=I-D.size;g-=T,D.size=I}}layoutViews(){this._contentSize=this.viewItems.reduce((o,g)=>o+g.size,0);let l=0;for(const o of this.viewItems)o.layout(l,this.layoutContext),l+=o.size;this.sashItems.forEach(o=>o.sash.layout()),this.updateSashEnablement(),this.updateScrollableElement()}updateScrollableElement(){this.orientation===0?this.scrollableElement.setScrollDimensions({height:this.size,scrollHeight:this._contentSize}):this.scrollableElement.setScrollDimensions({width:this.size,scrollWidth:this._contentSize})}updateSashEnablement(){let l=!1;const o=this.viewItems.map(D=>l=D.size-D.minimumSize>0||l);l=!1;const g=this.viewItems.map(D=>l=D.maximumSize-D.size>0||l),h=[...this.viewItems].reverse();l=!1;const m=h.map(D=>l=D.size-D.minimumSize>0||l).reverse();l=!1;const C=h.map(D=>l=D.maximumSize-D.size>0||l).reverse();let w=0;for(let D=0;D<this.sashItems.length;D++){const{sash:I}=this.sashItems[D],T=this.viewItems[D];w+=T.size;const A=!(o[D]&&C[D+1]),P=!(g[D]&&m[D+1]);if(A&&P){const N=(0,S.range)(D,-1),M=(0,S.range)(D+1,this.viewItems.length),R=this.findFirstSnapIndex(N),x=this.findFirstSnapIndex(M),O=typeof R==\"number\"&&!this.viewItems[R].visible,B=typeof x==\"number\"&&!this.viewItems[x].visible;O&&m[D]&&(w>0||this.startSnappingEnabled)?I.state=1:B&&o[D]&&(w<this._contentSize||this.endSnappingEnabled)?I.state=2:I.state=0}else A&&!P?I.state=1:!A&&P?I.state=2:I.state=3}}getSashPosition(l){let o=0;for(let g=0;g<this.sashItems.length;g++)if(o+=this.viewItems[g].size,this.sashItems[g].sash===l)return o;return 0}findFirstSnapIndex(l){for(const o of l){const g=this.viewItems[o];if(g.visible&&g.snap)return o}for(const o of l){const g=this.viewItems[o];if(g.visible&&g.maximumSize-g.minimumSize>0)return;if(!g.visible&&g.snap)return o}}areViewsDistributed(){let l,o;for(const g of this.viewItems)if(l=l===void 0?g.size:Math.min(l,g.size),o=o===void 0?g.size:Math.max(o,g.size),o-l>2)return!1;return!0}dispose(){var l;(l=this.sashDragState)===null||l===void 0||l.disposable.dispose(),(0,v.dispose)(this.viewItems),this.viewItems=[],this.sashItems.forEach(o=>o.disposable.dispose()),this.sashItems=[],super.dispose()}}e.SplitView=d}),define(se[595],oe([1,0,7,119,322,6,2,425]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Table=void 0;class p{constructor(i,n,t){this.columns=i,this.getColumnSize=t,this.templateId=p.TemplateId,this.renderedTemplates=new Set;const r=new Map(n.map(u=>[u.templateId,u]));this.renderers=[];for(const u of i){const f=r.get(u.templateId);if(!f)throw new Error(`Table cell renderer for template id ${u.templateId} not found.`);this.renderers.push(f)}}renderTemplate(i){const n=(0,L.append)(i,(0,L.$)(\".monaco-table-tr\")),t=[],r=[];for(let f=0;f<this.columns.length;f++){const c=this.renderers[f],d=(0,L.append)(n,(0,L.$)(\".monaco-table-td\",{\"data-col-index\":f}));d.style.width=`${this.getColumnSize(f)}px`,t.push(d),r.push(c.renderTemplate(d))}const u={container:i,cellContainers:t,cellTemplateData:r};return this.renderedTemplates.add(u),u}renderElement(i,n,t,r){for(let u=0;u<this.columns.length;u++){const c=this.columns[u].project(i);this.renderers[u].renderElement(c,n,t.cellTemplateData[u],r)}}disposeElement(i,n,t,r){for(let u=0;u<this.columns.length;u++){const f=this.renderers[u];if(f.disposeElement){const d=this.columns[u].project(i);f.disposeElement(d,n,t.cellTemplateData[u],r)}}}disposeTemplate(i){for(let n=0;n<this.columns.length;n++)this.renderers[n].disposeTemplate(i.cellTemplateData[n]);(0,L.clearNode)(i.container),this.renderedTemplates.delete(i)}layoutColumn(i,n){for(const{cellContainers:t}of this.renderedTemplates)t[i].style.width=`${n}px`}}p.TemplateId=\"row\";function _(a){return{getHeight(i){return a.getHeight(i)},getTemplateId(){return p.TemplateId}}}class v{get minimumSize(){var i;return(i=this.column.minimumWidth)!==null&&i!==void 0?i:120}get maximumSize(){var i;return(i=this.column.maximumWidth)!==null&&i!==void 0?i:Number.POSITIVE_INFINITY}get onDidChange(){var i;return(i=this.column.onDidChangeWidthConstraints)!==null&&i!==void 0?i:E.Event.None}constructor(i,n){this.column=i,this.index=n,this._onDidLayout=new E.Emitter,this.onDidLayout=this._onDidLayout.event,this.element=(0,L.$)(\".monaco-table-th\",{\"data-col-index\":n,title:i.tooltip},i.label)}layout(i){this._onDidLayout.fire([this.index,i])}}class b{get onDidChangeFocus(){return this.list.onDidChangeFocus}get onDidChangeSelection(){return this.list.onDidChangeSelection}get onDidScroll(){return this.list.onDidScroll}get onMouseDblClick(){return this.list.onMouseDblClick}get onPointer(){return this.list.onPointer}get onDidFocus(){return this.list.onDidFocus}get scrollTop(){return this.list.scrollTop}set scrollTop(i){this.list.scrollTop=i}get scrollHeight(){return this.list.scrollHeight}get renderHeight(){return this.list.renderHeight}get onDidDispose(){return this.list.onDidDispose}constructor(i,n,t,r,u,f){this.virtualDelegate=t,this.domId=`table_id_${++b.InstanceCount}`,this.disposables=new S.DisposableStore,this.cachedWidth=0,this.cachedHeight=0,this.domNode=(0,L.append)(n,(0,L.$)(`.monaco-table.${this.domId}`));const c=r.map((l,o)=>new v(l,o)),d={size:c.reduce((l,o)=>l+o.column.weight,0),views:c.map(l=>({size:l.column.weight,view:l}))};this.splitview=this.disposables.add(new y.SplitView(this.domNode,{orientation:1,scrollbarVisibility:2,getSashOrthogonalSize:()=>this.cachedHeight,descriptor:d})),this.splitview.el.style.height=`${t.headerRowHeight}px`,this.splitview.el.style.lineHeight=`${t.headerRowHeight}px`;const s=new p(r,u,l=>this.splitview.getViewSize(l));this.list=this.disposables.add(new k.List(i,this.domNode,_(t),[s],f)),E.Event.any(...c.map(l=>l.onDidLayout))(([l,o])=>s.layoutColumn(l,o),null,this.disposables),this.splitview.onDidSashReset(l=>{const o=r.reduce((h,m)=>h+m.weight,0),g=r[l].weight/o*this.cachedWidth;this.splitview.resizeView(l,g)},null,this.disposables),this.styleElement=(0,L.createStyleSheet)(this.domNode),this.style(k.unthemedListStyles)}updateOptions(i){this.list.updateOptions(i)}splice(i,n,t=[]){this.list.splice(i,n,t)}getHTMLElement(){return this.domNode}style(i){const n=[];n.push(`.monaco-table.${this.domId} > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\ttop: ${this.virtualDelegate.headerRowHeight+1}px;\n\t\t\theight: calc(100% - ${this.virtualDelegate.headerRowHeight}px);\n\t\t}`),this.styleElement.textContent=n.join(`\n`),this.list.style(i)}getSelectedElements(){return this.list.getSelectedElements()}getSelection(){return this.list.getSelection()}getFocus(){return this.list.getFocus()}dispose(){this.disposables.dispose()}}e.Table=b,b.InstanceCount=0}),define(se[159],oe([1,0,76,28,6,426]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Toggle=e.unthemedToggleStyles=void 0,e.unthemedToggleStyles={inputActiveOptionBorder:\"#007ACC00\",inputActiveOptionForeground:\"#FFFFFF\",inputActiveOptionBackground:\"#0E639C50\"};class E extends L.Widget{constructor(p){super(),this._onChange=this._register(new y.Emitter),this.onChange=this._onChange.event,this._onKeyDown=this._register(new y.Emitter),this.onKeyDown=this._onKeyDown.event,this._opts=p,this._checked=this._opts.isChecked;const _=[\"monaco-custom-toggle\"];this._opts.icon&&(this._icon=this._opts.icon,_.push(...k.ThemeIcon.asClassNameArray(this._icon))),this._opts.actionClassName&&_.push(...this._opts.actionClassName.split(\" \")),this._checked&&_.push(\"checked\"),this.domNode=document.createElement(\"div\"),this.domNode.title=this._opts.title,this.domNode.classList.add(..._),this._opts.notFocusable||(this.domNode.tabIndex=0),this.domNode.setAttribute(\"role\",\"checkbox\"),this.domNode.setAttribute(\"aria-checked\",String(this._checked)),this.domNode.setAttribute(\"aria-label\",this._opts.title),this.applyStyles(),this.onclick(this.domNode,v=>{this.enabled&&(this.checked=!this._checked,this._onChange.fire(!1),v.preventDefault())}),this._register(this.ignoreGesture(this.domNode)),this.onkeydown(this.domNode,v=>{if(v.keyCode===10||v.keyCode===3){this.checked=!this._checked,this._onChange.fire(!0),v.preventDefault(),v.stopPropagation();return}this._onKeyDown.fire(v)})}get enabled(){return this.domNode.getAttribute(\"aria-disabled\")!==\"true\"}focus(){this.domNode.focus()}get checked(){return this._checked}set checked(p){this._checked=p,this.domNode.setAttribute(\"aria-checked\",String(this._checked)),this.domNode.classList.toggle(\"checked\",this._checked),this.applyStyles()}width(){return 2+2+2+16}applyStyles(){this.domNode&&(this.domNode.style.borderColor=this._checked&&this._opts.inputActiveOptionBorder||\"\",this.domNode.style.color=this._checked&&this._opts.inputActiveOptionForeground||\"inherit\",this.domNode.style.backgroundColor=this._checked&&this._opts.inputActiveOptionBackground||\"\")}enable(){this.domNode.setAttribute(\"aria-disabled\",String(!1))}disable(){this.domNode.setAttribute(\"aria-disabled\",String(!0))}}e.Toggle=E}),define(se[323],oe([1,0,159,26,568]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RegexToggle=e.WholeWordsToggle=e.CaseSensitiveToggle=void 0;const E=y.localize(0,null),S=y.localize(1,null),p=y.localize(2,null);class _ extends L.Toggle{constructor(i){super({icon:k.Codicon.caseSensitive,title:E+i.appendTitle,isChecked:i.isChecked,inputActiveOptionBorder:i.inputActiveOptionBorder,inputActiveOptionForeground:i.inputActiveOptionForeground,inputActiveOptionBackground:i.inputActiveOptionBackground})}}e.CaseSensitiveToggle=_;class v extends L.Toggle{constructor(i){super({icon:k.Codicon.wholeWord,title:S+i.appendTitle,isChecked:i.isChecked,inputActiveOptionBorder:i.inputActiveOptionBorder,inputActiveOptionForeground:i.inputActiveOptionForeground,inputActiveOptionBackground:i.inputActiveOptionBackground})}}e.WholeWordsToggle=v;class b extends L.Toggle{constructor(i){super({icon:k.Codicon.regex,title:p+i.appendTitle,isChecked:i.isChecked,inputActiveOptionBorder:i.inputActiveOptionBorder,inputActiveOptionForeground:i.inputActiveOptionForeground,inputActiveOptionBackground:i.inputActiveOptionBackground})}}e.RegexToggle=b}),define(se[49],oe([1,0,222,47,95,17,11,22]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DataUri=e.addTrailingPathSeparator=e.removeTrailingPathSeparator=e.hasTrailingPathSeparator=e.isEqualAuthority=e.isAbsolutePath=e.resolvePath=e.relativePath=e.normalizePath=e.joinPath=e.dirname=e.extname=e.basename=e.basenameOrAuthority=e.getComparisonKey=e.isEqualOrParent=e.isEqual=e.extUriIgnorePathCase=e.extUriBiasedIgnorePathCase=e.extUri=e.ExtUri=e.originalFSPath=void 0;function _(a){return(0,p.uriToFsPath)(a,!0)}e.originalFSPath=_;class v{constructor(i){this._ignorePathCasing=i}compare(i,n,t=!1){return i===n?0:(0,S.compare)(this.getComparisonKey(i,t),this.getComparisonKey(n,t))}isEqual(i,n,t=!1){return i===n?!0:!i||!n?!1:this.getComparisonKey(i,t)===this.getComparisonKey(n,t)}getComparisonKey(i,n=!1){return i.with({path:this._ignorePathCasing(i)?i.path.toLowerCase():void 0,fragment:n?null:void 0}).toString()}isEqualOrParent(i,n,t=!1){if(i.scheme===n.scheme){if(i.scheme===k.Schemas.file)return L.isEqualOrParent(_(i),_(n),this._ignorePathCasing(i))&&i.query===n.query&&(t||i.fragment===n.fragment);if((0,e.isEqualAuthority)(i.authority,n.authority))return L.isEqualOrParent(i.path,n.path,this._ignorePathCasing(i),\"/\")&&i.query===n.query&&(t||i.fragment===n.fragment)}return!1}joinPath(i,...n){return p.URI.joinPath(i,...n)}basenameOrAuthority(i){return(0,e.basename)(i)||i.authority}basename(i){return y.posix.basename(i.path)}extname(i){return y.posix.extname(i.path)}dirname(i){if(i.path.length===0)return i;let n;return i.scheme===k.Schemas.file?n=p.URI.file(y.dirname(_(i))).path:(n=y.posix.dirname(i.path),i.authority&&n.length&&n.charCodeAt(0)!==47&&(console.error(`dirname(\"${i.toString})) resulted in a relative path`),n=\"/\")),i.with({path:n})}normalizePath(i){if(!i.path.length)return i;let n;return i.scheme===k.Schemas.file?n=p.URI.file(y.normalize(_(i))).path:n=y.posix.normalize(i.path),i.with({path:n})}relativePath(i,n){if(i.scheme!==n.scheme||!(0,e.isEqualAuthority)(i.authority,n.authority))return;if(i.scheme===k.Schemas.file){const u=y.relative(_(i),_(n));return E.isWindows?L.toSlashes(u):u}let t=i.path||\"/\";const r=n.path||\"/\";if(this._ignorePathCasing(i)){let u=0;for(const f=Math.min(t.length,r.length);u<f&&!(t.charCodeAt(u)!==r.charCodeAt(u)&&t.charAt(u).toLowerCase()!==r.charAt(u).toLowerCase());u++);t=r.substr(0,u)+t.substr(u)}return y.posix.relative(t,r)}resolvePath(i,n){if(i.scheme===k.Schemas.file){const t=p.URI.file(y.resolve(_(i),n));return i.with({authority:t.authority,path:t.path})}return n=L.toPosixPath(n),i.with({path:y.posix.resolve(i.path,n)})}isAbsolutePath(i){return!!i.path&&i.path[0]===\"/\"}isEqualAuthority(i,n){return i===n||i!==void 0&&n!==void 0&&(0,S.equalsIgnoreCase)(i,n)}hasTrailingPathSeparator(i,n=y.sep){if(i.scheme===k.Schemas.file){const t=_(i);return t.length>L.getRoot(t).length&&t[t.length-1]===n}else{const t=i.path;return t.length>1&&t.charCodeAt(t.length-1)===47&&!/^[a-zA-Z]:(\\/$|\\\\$)/.test(i.fsPath)}}removeTrailingPathSeparator(i,n=y.sep){return(0,e.hasTrailingPathSeparator)(i,n)?i.with({path:i.path.substr(0,i.path.length-1)}):i}addTrailingPathSeparator(i,n=y.sep){let t=!1;if(i.scheme===k.Schemas.file){const r=_(i);t=r!==void 0&&r.length===L.getRoot(r).length&&r[r.length-1]===n}else{n=\"/\";const r=i.path;t=r.length===1&&r.charCodeAt(r.length-1)===47}return!t&&!(0,e.hasTrailingPathSeparator)(i,n)?i.with({path:i.path+\"/\"}):i}}e.ExtUri=v,e.extUri=new v(()=>!1),e.extUriBiasedIgnorePathCase=new v(a=>a.scheme===k.Schemas.file?!E.isLinux:!0),e.extUriIgnorePathCase=new v(a=>!0),e.isEqual=e.extUri.isEqual.bind(e.extUri),e.isEqualOrParent=e.extUri.isEqualOrParent.bind(e.extUri),e.getComparisonKey=e.extUri.getComparisonKey.bind(e.extUri),e.basenameOrAuthority=e.extUri.basenameOrAuthority.bind(e.extUri),e.basename=e.extUri.basename.bind(e.extUri),e.extname=e.extUri.extname.bind(e.extUri),e.dirname=e.extUri.dirname.bind(e.extUri),e.joinPath=e.extUri.joinPath.bind(e.extUri),e.normalizePath=e.extUri.normalizePath.bind(e.extUri),e.relativePath=e.extUri.relativePath.bind(e.extUri),e.resolvePath=e.extUri.resolvePath.bind(e.extUri),e.isAbsolutePath=e.extUri.isAbsolutePath.bind(e.extUri),e.isEqualAuthority=e.extUri.isEqualAuthority.bind(e.extUri),e.hasTrailingPathSeparator=e.extUri.hasTrailingPathSeparator.bind(e.extUri),e.removeTrailingPathSeparator=e.extUri.removeTrailingPathSeparator.bind(e.extUri),e.addTrailingPathSeparator=e.extUri.addTrailingPathSeparator.bind(e.extUri);var b;(function(a){a.META_DATA_LABEL=\"label\",a.META_DATA_DESCRIPTION=\"description\",a.META_DATA_SIZE=\"size\",a.META_DATA_MIME=\"mime\";function i(n){const t=new Map;n.path.substring(n.path.indexOf(\";\")+1,n.path.lastIndexOf(\";\")).split(\";\").forEach(f=>{const[c,d]=f.split(\":\");c&&d&&t.set(c,d)});const u=n.path.substring(0,n.path.indexOf(\";\"));return u&&t.set(a.META_DATA_MIME,u),t}a.parseMetaData=i})(b||(e.DataUri=b={}))}),define(se[58],oe([1,0,12,126,49,11,22]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.parseHrefAndDimensions=e.removeMarkdownEscapes=e.escapeDoubleQuotes=e.appendEscapedMarkdownCodeBlockFence=e.escapeMarkdownSyntaxTokens=e.markdownStringEqual=e.isMarkdownString=e.isEmptyMarkdownString=e.MarkdownString=void 0;class p{constructor(f=\"\",c=!1){var d,s,l;if(this.value=f,typeof this.value!=\"string\")throw(0,L.illegalArgument)(\"value\");typeof c==\"boolean\"?(this.isTrusted=c,this.supportThemeIcons=!1,this.supportHtml=!1):(this.isTrusted=(d=c.isTrusted)!==null&&d!==void 0?d:void 0,this.supportThemeIcons=(s=c.supportThemeIcons)!==null&&s!==void 0?s:!1,this.supportHtml=(l=c.supportHtml)!==null&&l!==void 0?l:!1)}appendText(f,c=0){return this.value+=a(this.supportThemeIcons?(0,k.escapeIcons)(f):f).replace(/([ \\t]+)/g,(d,s)=>\"&nbsp;\".repeat(s.length)).replace(/\\>/gm,\"\\\\>\").replace(/\\n/g,c===1?`\\\\\n`:`\n\n`),this}appendMarkdown(f){return this.value+=f,this}appendCodeblock(f,c){return this.value+=`\n${i(c,f)}\n`,this}appendLink(f,c,d){return this.value+=\"[\",this.value+=this._escape(c,\"]\"),this.value+=\"](\",this.value+=this._escape(String(f),\")\"),d&&(this.value+=` \"${this._escape(this._escape(d,'\"'),\")\")}\"`),this.value+=\")\",this}_escape(f,c){const d=new RegExp((0,E.escapeRegExpCharacters)(c),\"g\");return f.replace(d,(s,l)=>f.charAt(l-1)!==\"\\\\\"?`\\\\${s}`:s)}}e.MarkdownString=p;function _(u){return v(u)?!u.value:Array.isArray(u)?u.every(_):!0}e.isEmptyMarkdownString=_;function v(u){return u instanceof p?!0:u&&typeof u==\"object\"?typeof u.value==\"string\"&&(typeof u.isTrusted==\"boolean\"||typeof u.isTrusted==\"object\"||u.isTrusted===void 0)&&(typeof u.supportThemeIcons==\"boolean\"||u.supportThemeIcons===void 0):!1}e.isMarkdownString=v;function b(u,f){return u===f?!0:!u||!f?!1:u.value===f.value&&u.isTrusted===f.isTrusted&&u.supportThemeIcons===f.supportThemeIcons&&u.supportHtml===f.supportHtml&&(u.baseUri===f.baseUri||!!u.baseUri&&!!f.baseUri&&(0,y.isEqual)(S.URI.from(u.baseUri),S.URI.from(f.baseUri)))}e.markdownStringEqual=b;function a(u){return u.replace(/[\\\\`*_{}[\\]()#+\\-!~]/g,\"\\\\$&\")}e.escapeMarkdownSyntaxTokens=a;function i(u,f){var c,d;const s=(d=(c=u.match(/^`+/gm))===null||c===void 0?void 0:c.reduce((o,g)=>o.length>g.length?o:g).length)!==null&&d!==void 0?d:0,l=s>=3?s+1:3;return[`${\"`\".repeat(l)}${f}`,u,`${\"`\".repeat(l)}`].join(`\n`)}e.appendEscapedMarkdownCodeBlockFence=i;function n(u){return u.replace(/\"/g,\"&quot;\")}e.escapeDoubleQuotes=n;function t(u){return u&&u.replace(/\\\\([\\\\`*_{}[\\]()#+\\-.!~])/g,\"$1\")}e.removeMarkdownEscapes=t;function r(u){const f=[],c=u.split(\"|\").map(s=>s.trim());u=c[0];const d=c[1];if(d){const s=/height=(\\d+)/.exec(d),l=/width=(\\d+)/.exec(d),o=s?s[1]:\"\",g=l?l[1]:\"\",h=isFinite(parseInt(g)),m=isFinite(parseInt(o));h&&f.push(`width=\"${g}\"`),m&&f.push(`height=\"${o}\"`)}return{href:u,dimensions:f}}e.parseHrefAndDimensions=r}),define(se[186],oe([1,0,7,316,84,317,46,67,118,12,6,58,126,170,99,2,400,223,47,55,49,11,22]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.fillInIncompleteTokens=e.renderMarkdownAsPlaintext=e.renderStringAsPlaintext=e.allowedMarkdownAttr=e.renderMarkdown=void 0;const g=Object.freeze({image:($,J,Q)=>{let re=[],de=[];return $&&({href:$,dimensions:re}=(0,a.parseHrefAndDimensions)($),de.push(`src=\"${(0,a.escapeDoubleQuotes)($)}\"`)),Q&&de.push(`alt=\"${(0,a.escapeDoubleQuotes)(Q)}\"`),J&&de.push(`title=\"${(0,a.escapeDoubleQuotes)(J)}\"`),re.length&&(de=de.concat(re)),\"<img \"+de.join(\" \")+\">\"},paragraph:$=>`<p>${$}</p>`,link:($,J,Q)=>typeof $!=\"string\"?\"\":($===Q&&(Q=(0,a.removeMarkdownEscapes)(Q)),J=typeof J==\"string\"?(0,a.escapeDoubleQuotes)((0,a.removeMarkdownEscapes)(J)):\"\",$=(0,a.removeMarkdownEscapes)($),$=$.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\"),`<a href=\"${$}\" title=\"${J||$}\" draggable=\"false\">${Q}</a>`)});function h($,J={},Q={}){var re,de;const he=new r.DisposableStore;let me=!1;const X=(0,E.createElement)(J),U=function(ue){let ce;try{ce=(0,f.parse)(decodeURIComponent(ue))}catch{}return ce?(ce=(0,d.cloneAndChange)(ce,pe=>{if($.uris&&$.uris[pe])return o.URI.revive($.uris[pe])}),encodeURIComponent(JSON.stringify(ce))):ue},G=function(ue,ce){const pe=$.uris&&$.uris[ue];let ve=o.URI.revive(pe);return ce?ue.startsWith(c.Schemas.data+\":\")?ue:(ve||(ve=o.URI.parse(ue)),c.FileAccess.uriToBrowserUri(ve).toString(!0)):!ve||o.URI.parse(ue).toString()===ve.toString()?ue:(ve.query&&(ve=ve.with({query:U(ve.query)})),ve.toString())},z=new u.marked.Renderer;z.image=g.image,z.link=g.link,z.paragraph=g.paragraph;const H=[],Y=[];if(J.codeBlockRendererSync?z.code=(ue,ce)=>{const pe=n.defaultGenerator.nextId(),ve=J.codeBlockRendererSync(m(ce),ue);return Y.push([pe,ve]),`<div class=\"code\" data-code=\"${pe}\">${(0,l.escape)(ue)}</div>`}:J.codeBlockRenderer&&(z.code=(ue,ce)=>{const pe=n.defaultGenerator.nextId(),ve=J.codeBlockRenderer(m(ce),ue);return H.push(ve.then(Ce=>[pe,Ce])),`<div class=\"code\" data-code=\"${pe}\">${(0,l.escape)(ue)}</div>`}),J.actionHandler){const ue=function(ve){let Ce=ve.target;if(!(Ce.tagName!==\"A\"&&(Ce=Ce.parentElement,!Ce||Ce.tagName!==\"A\")))try{let Se=Ce.dataset.href;Se&&($.baseUri&&(Se=C(o.URI.from($.baseUri),Se)),J.actionHandler.callback(Se,ve))}catch(Se){(0,v.onUnexpectedError)(Se)}finally{ve.preventDefault()}},ce=J.actionHandler.disposables.add(new y.DomEmitter(X,\"click\")),pe=J.actionHandler.disposables.add(new y.DomEmitter(X,\"auxclick\"));J.actionHandler.disposables.add(b.Event.any(ce.event,pe.event)(ve=>{const Ce=new p.StandardMouseEvent(L.getWindow(X),ve);!Ce.leftButton&&!Ce.middleButton||ue(Ce)})),J.actionHandler.disposables.add(L.addDisposableListener(X,\"keydown\",ve=>{const Ce=new S.StandardKeyboardEvent(ve);!Ce.equals(10)&&!Ce.equals(3)||ue(Ce)}))}$.supportHtml||(Q.sanitizer=ue=>($.isTrusted?ue.match(/^(<span[^>]+>)|(<\\/\\s*span>)$/):void 0)?ue:\"\",Q.sanitize=!0,Q.silent=!0),Q.renderer=z;let j=(re=$.value)!==null&&re!==void 0?re:\"\";j.length>1e5&&(j=`${j.substr(0,1e5)}\\u2026`),$.supportThemeIcons&&(j=(0,i.markdownEscapeEscapedIcons)(j));let Z;if(J.fillInIncompleteTokens){const ue={...u.marked.defaults,...Q},ce=u.marked.lexer(j,ue),pe=R(ce);Z=u.marked.parser(pe,ue)}else Z=u.marked.parse(j,Q);$.supportThemeIcons&&(Z=(0,_.renderLabelWithIcons)(Z).map(ce=>typeof ce==\"string\"?ce:ce.outerHTML).join(\"\"));const le=new DOMParser().parseFromString(w($,Z),\"text/html\");if(le.body.querySelectorAll(\"img\").forEach(ue=>{const ce=ue.getAttribute(\"src\");if(ce){let pe=ce;try{$.baseUri&&(pe=C(o.URI.from($.baseUri),pe))}catch{}ue.src=G(pe,!0)}}),le.body.querySelectorAll(\"a\").forEach(ue=>{const ce=ue.getAttribute(\"href\");if(ue.setAttribute(\"href\",\"\"),!ce||/^data:|javascript:/i.test(ce)||/^command:/i.test(ce)&&!$.isTrusted||/^command:(\\/\\/\\/)?_workbench\\.downloadResource/i.test(ce))ue.replaceWith(...ue.childNodes);else{let pe=G(ce,!1);$.baseUri&&(pe=C(o.URI.from($.baseUri),ce)),ue.dataset.href=pe}}),X.innerHTML=w($,le.body.innerHTML),H.length>0)Promise.all(H).then(ue=>{var ce,pe;if(me)return;const ve=new Map(ue),Ce=X.querySelectorAll(\"div[data-code]\");for(const Se of Ce){const _e=ve.get((ce=Se.dataset.code)!==null&&ce!==void 0?ce:\"\");_e&&L.reset(Se,_e)}(pe=J.asyncRenderCallback)===null||pe===void 0||pe.call(J)});else if(Y.length>0){const ue=new Map(Y),ce=X.querySelectorAll(\"div[data-code]\");for(const pe of ce){const ve=ue.get((de=pe.dataset.code)!==null&&de!==void 0?de:\"\");ve&&L.reset(pe,ve)}}if(J.asyncRenderCallback)for(const ue of X.getElementsByTagName(\"img\")){const ce=he.add(L.addDisposableListener(ue,\"load\",()=>{ce.dispose(),J.asyncRenderCallback()}))}return{element:X,dispose:()=>{me=!0,he.dispose()}}}e.renderMarkdown=h;function m($){if(!$)return\"\";const J=$.split(/[\\s+|:|,|\\{|\\?]/,1);return J.length?J[0]:$}function C($,J){return/^\\w[\\w\\d+.-]*:/.test(J)?J:$.path.endsWith(\"/\")?(0,s.resolvePath)($,J).toString():(0,s.resolvePath)((0,s.dirname)($),J).toString()}function w($,J){const{config:Q,allowedSchemes:re}=D($);k.addHook(\"uponSanitizeAttribute\",(he,me)=>{var X;if(me.attrName===\"style\"||me.attrName===\"class\"){if(he.tagName===\"SPAN\"){if(me.attrName===\"style\"){me.keepAttr=/^(color\\:(#[0-9a-fA-F]+|var\\(--vscode(-[a-zA-Z]+)+\\));)?(background-color\\:(#[0-9a-fA-F]+|var\\(--vscode(-[a-zA-Z]+)+\\));)?$/.test(me.attrValue);return}else if(me.attrName===\"class\"){me.keepAttr=/^codicon codicon-[a-z\\-]+( codicon-modifier-[a-z\\-]+)?$/.test(me.attrValue);return}}me.keepAttr=!1;return}else if(he.tagName===\"INPUT\"&&((X=he.attributes.getNamedItem(\"type\"))===null||X===void 0?void 0:X.value)===\"checkbox\"){if(me.attrName===\"type\"&&me.attrValue===\"checkbox\"||me.attrName===\"disabled\"||me.attrName===\"checked\"){me.keepAttr=!0;return}me.keepAttr=!1}}),k.addHook(\"uponSanitizeElement\",(he,me)=>{var X,U;me.tagName===\"input\"&&(((X=he.attributes.getNamedItem(\"type\"))===null||X===void 0?void 0:X.value)===\"checkbox\"?he.setAttribute(\"disabled\",\"\"):(U=he.parentElement)===null||U===void 0||U.removeChild(he))});const de=L.hookDomPurifyHrefAndSrcSanitizer(re);try{return k.sanitize(J,{...Q,RETURN_TRUSTED_TYPE:!0})}finally{k.removeHook(\"uponSanitizeAttribute\"),de.dispose()}}e.allowedMarkdownAttr=[\"align\",\"autoplay\",\"alt\",\"checked\",\"class\",\"controls\",\"data-code\",\"data-href\",\"disabled\",\"draggable\",\"height\",\"href\",\"loop\",\"muted\",\"playsinline\",\"poster\",\"src\",\"style\",\"target\",\"title\",\"type\",\"width\",\"start\"];function D($){const J=[c.Schemas.http,c.Schemas.https,c.Schemas.mailto,c.Schemas.data,c.Schemas.file,c.Schemas.vscodeFileResource,c.Schemas.vscodeRemote,c.Schemas.vscodeRemoteResource];return $.isTrusted&&J.push(c.Schemas.command),{config:{ALLOWED_TAGS:[...L.basicMarkupHtmlTags],ALLOWED_ATTR:e.allowedMarkdownAttr,ALLOW_UNKNOWN_PROTOCOLS:!0},allowedSchemes:J}}function I($){return typeof $==\"string\"?$:T($)}e.renderStringAsPlaintext=I;function T($){var J;let Q=(J=$.value)!==null&&J!==void 0?J:\"\";Q.length>1e5&&(Q=`${Q.substr(0,1e5)}\\u2026`);const re=u.marked.parse(Q,{renderer:P.value}).replace(/&(#\\d+|[a-zA-Z]+);/g,de=>{var he;return(he=A.get(de))!==null&&he!==void 0?he:de});return w({isTrusted:!1},re).toString()}e.renderMarkdownAsPlaintext=T;const A=new Map([[\"&quot;\",'\"'],[\"&nbsp;\",\" \"],[\"&amp;\",\"&\"],[\"&#39;\",\"'\"],[\"&lt;\",\"<\"],[\"&gt;\",\">\"]]),P=new t.Lazy(()=>{const $=new u.marked.Renderer;return $.code=J=>J,$.blockquote=J=>J,$.html=J=>\"\",$.heading=(J,Q,re)=>J+`\n`,$.hr=()=>\"\",$.list=(J,Q)=>J,$.listitem=J=>J+`\n`,$.paragraph=J=>J+`\n`,$.table=(J,Q)=>J+Q+`\n`,$.tablerow=J=>J,$.tablecell=(J,Q)=>J+\" \",$.strong=J=>J,$.em=J=>J,$.codespan=J=>J,$.br=()=>`\n`,$.del=J=>J,$.image=(J,Q,re)=>\"\",$.text=J=>J,$.link=(J,Q,re)=>re,$});function N($){let J=\"\";return $.forEach(Q=>{J+=Q.raw}),J}function M($){var J,Q;for(let re=0;re<$.tokens.length;re++){const de=$.tokens[re];if(de.type===\"text\"){const he=de.raw.split(`\n`),me=he[he.length-1];if(me.includes(\"`\"))return O($);if(me.includes(\"**\"))return q($);if(me.match(/\\*\\w/))return B($);if(me.match(/(^|\\s)__\\w/))return ie($);if(me.match(/(^|\\s)_\\w/))return W($);if(me.match(/(^|\\s)\\[.*\\]\\(\\w*/)){const X=$.tokens.slice(re+1);return((J=X[0])===null||J===void 0?void 0:J.type)===\"link\"&&((Q=X[1])===null||Q===void 0?void 0:Q.type)===\"text\"&&X[1].raw.match(/^ *\"[^\"]*$/)?K($):V($)}else if(me.match(/(^|\\s)\\[\\w/))return F($)}}}function R($){let J,Q;for(J=0;J<$.length;J++){const re=$[J];if(re.type===\"paragraph\"&&re.raw.match(/(\\n|^)```/)){Q=x($.slice(J));break}if(re.type===\"paragraph\"&&re.raw.match(/(\\n|^)\\|/)){Q=ne($.slice(J));break}if(J===$.length-1&&re.type===\"paragraph\"){const de=M(re);if(de){Q=[de];break}}}if(Q){const re=[...$.slice(0,J),...Q];return re.links=$.links,re}return $}e.fillInIncompleteTokens=R;function x($){const J=N($);return u.marked.lexer(J+\"\\n```\")}function O($){return ae($,\"`\")}function B($){return ae($,\"*\")}function W($){return ae($,\"_\")}function V($){return ae($,\")\")}function K($){return ae($,'\")')}function F($){return ae($,\"](about:blank)\")}function q($){return ae($,\"**\")}function ie($){return ae($,\"__\")}function ae($,J){const Q=N(Array.isArray($)?$:[$]);return u.marked.lexer(Q+J)[0]}function ne($){const J=N($),Q=J.split(`\n`);let re,de=!1;for(let he=0;he<Q.length;he++){const me=Q[he].trim();if(typeof re>\"u\"&&me.match(/^\\s*\\|/)){const X=me.match(/(\\|[^\\|]+)(?=\\||$)/g);X&&(re=X.length)}else if(typeof re==\"number\")if(me.match(/^\\s*\\|/)){if(he!==Q.length-1)return;de=!0}else return}if(typeof re==\"number\"&&re>0){const he=de?Q.slice(0,-1).join(`\n`):J,me=!!he.match(/\\|\\s*$/),X=he+(me?\"\":\"|\")+`\n|${\" --- |\".repeat(re)}`;return u.marked.lexer(X)}}}),define(se[229],oe([1,0,7,316,46,186,63,118,39,6,58,2,28,409]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Button=e.unthemedButtonStyles=void 0,e.unthemedButtonStyles={buttonBackground:\"#0E639C\",buttonHoverBackground:\"#006BB3\",buttonSeparator:_.Color.white.toString(),buttonForeground:_.Color.white.toString(),buttonBorder:void 0,buttonSecondaryBackground:void 0,buttonSecondaryForeground:void 0,buttonSecondaryHoverBackground:void 0};class n extends a.Disposable{get onDidClick(){return this._onDidClick.event}constructor(r,u){super(),this._label=\"\",this._onDidClick=this._register(new v.Emitter),this.options=u,this._element=document.createElement(\"a\"),this._element.classList.add(\"monaco-button\"),this._element.tabIndex=0,this._element.setAttribute(\"role\",\"button\"),this._element.classList.toggle(\"secondary\",!!u.secondary);const f=u.secondary?u.buttonSecondaryBackground:u.buttonBackground,c=u.secondary?u.buttonSecondaryForeground:u.buttonForeground;this._element.style.color=c||\"\",this._element.style.backgroundColor=f||\"\",u.supportShortLabel&&(this._labelShortElement=document.createElement(\"div\"),this._labelShortElement.classList.add(\"monaco-button-label-short\"),this._element.appendChild(this._labelShortElement),this._labelElement=document.createElement(\"div\"),this._labelElement.classList.add(\"monaco-button-label\"),this._element.appendChild(this._labelElement),this._element.classList.add(\"monaco-text-button-with-short-label\")),typeof u.ariaLabel==\"string\"&&this._element.setAttribute(\"aria-label\",u.ariaLabel),r.appendChild(this._element),this._register(S.Gesture.addTarget(this._element)),[L.EventType.CLICK,S.EventType.Tap].forEach(d=>{this._register((0,L.addDisposableListener)(this._element,d,s=>{if(!this.enabled){L.EventHelper.stop(s);return}this._onDidClick.fire(s)}))}),this._register((0,L.addDisposableListener)(this._element,L.EventType.KEY_DOWN,d=>{const s=new y.StandardKeyboardEvent(d);let l=!1;this.enabled&&(s.equals(3)||s.equals(10))?(this._onDidClick.fire(d),l=!0):s.equals(9)&&(this._element.blur(),l=!0),l&&L.EventHelper.stop(s,!0)})),this._register((0,L.addDisposableListener)(this._element,L.EventType.MOUSE_OVER,d=>{this._element.classList.contains(\"disabled\")||this.updateBackground(!0)})),this._register((0,L.addDisposableListener)(this._element,L.EventType.MOUSE_OUT,d=>{this.updateBackground(!1)})),this.focusTracker=this._register((0,L.trackFocus)(this._element)),this._register(this.focusTracker.onDidFocus(()=>{this.enabled&&this.updateBackground(!0)})),this._register(this.focusTracker.onDidBlur(()=>{this.enabled&&this.updateBackground(!1)}))}dispose(){super.dispose(),this._element.remove()}getContentElements(r){const u=[];for(let f of(0,p.renderLabelWithIcons)(r))if(typeof f==\"string\"){if(f=f.trim(),f===\"\")continue;const c=document.createElement(\"span\");c.textContent=f,u.push(c)}else u.push(f);return u}updateBackground(r){let u;this.options.secondary?u=r?this.options.buttonSecondaryHoverBackground:this.options.buttonSecondaryBackground:u=r?this.options.buttonHoverBackground:this.options.buttonBackground,u&&(this._element.style.backgroundColor=u)}get element(){return this._element}set label(r){var u;if(this._label===r||(0,b.isMarkdownString)(this._label)&&(0,b.isMarkdownString)(r)&&(0,b.markdownStringEqual)(this._label,r))return;this._element.classList.add(\"monaco-text-button\");const f=this.options.supportShortLabel?this._labelElement:this._element;if((0,b.isMarkdownString)(r)){const c=(0,E.renderMarkdown)(r,{inline:!0});c.dispose();const d=(u=c.element.querySelector(\"p\"))===null||u===void 0?void 0:u.innerHTML;if(d){const s=(0,k.sanitize)(d,{ADD_TAGS:[\"b\",\"i\",\"u\",\"code\",\"span\"],ALLOWED_ATTR:[\"class\"],RETURN_TRUSTED_TYPE:!0});f.innerHTML=s}else(0,L.reset)(f)}else this.options.supportIcons?(0,L.reset)(f,...this.getContentElements(r)):f.textContent=r;typeof this.options.title==\"string\"?this._element.title=this.options.title:this.options.title&&(this._element.title=(0,E.renderStringAsPlaintext)(r)),typeof this.options.ariaLabel==\"string\"?this._element.setAttribute(\"aria-label\",this.options.ariaLabel):this.options.ariaLabel&&this._element.setAttribute(\"aria-label\",this._element.title),this._label=r}get label(){return this._label}set icon(r){this._element.classList.add(...i.ThemeIcon.asClassNameArray(r))}set enabled(r){r?(this._element.classList.remove(\"disabled\"),this._element.setAttribute(\"aria-disabled\",String(!1)),this._element.tabIndex=0):(this._element.classList.add(\"disabled\"),this._element.setAttribute(\"aria-disabled\",String(!0)))}get enabled(){return!this._element.classList.contains(\"disabled\")}}e.Button=n}),define(se[324],oe([1,0,7,14,19,58,126,2,20,571]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.setupCustomHover=e.setupNativeHover=void 0;function b(n,t){(0,_.isString)(t)?n.title=(0,S.stripIcons)(t):t?.markdownNotSupportedFallback?n.title=t.markdownNotSupportedFallback:n.removeAttribute(\"title\")}e.setupNativeHover=b;class a{constructor(t,r,u){this.hoverDelegate=t,this.target=r,this.fadeInAnimation=u}async update(t,r,u){var f;if(this._cancellationTokenSource&&(this._cancellationTokenSource.dispose(!0),this._cancellationTokenSource=void 0),this.isDisposed)return;let c;if(t===void 0||(0,_.isString)(t)||t instanceof HTMLElement)c=t;else if(!(0,_.isFunction)(t.markdown))c=(f=t.markdown)!==null&&f!==void 0?f:t.markdownNotSupportedFallback;else{this._hoverWidget||this.show((0,v.localize)(0,null),r),this._cancellationTokenSource=new y.CancellationTokenSource;const d=this._cancellationTokenSource.token;if(c=await t.markdown(d),c===void 0&&(c=t.markdownNotSupportedFallback),this.isDisposed||d.isCancellationRequested)return}this.show(c,r,u)}show(t,r,u){const f=this._hoverWidget;if(this.hasContent(t)){const c={content:t,target:this.target,appearance:{showPointer:this.hoverDelegate.placement===\"element\",skipFadeInAnimation:!this.fadeInAnimation||!!f},position:{hoverPosition:2},...u};this._hoverWidget=this.hoverDelegate.showHover(c,r)}f?.dispose()}hasContent(t){return t?(0,E.isMarkdownString)(t)?!!t.value:!0:!1}get isDisposed(){var t;return(t=this._hoverWidget)===null||t===void 0?void 0:t.isDisposed}dispose(){var t,r;(t=this._hoverWidget)===null||t===void 0||t.dispose(),(r=this._cancellationTokenSource)===null||r===void 0||r.dispose(!0),this._cancellationTokenSource=void 0}}function i(n,t,r,u){let f,c;const d=(T,A)=>{var P;const N=c!==void 0;T&&(c?.dispose(),c=void 0),A&&(f?.dispose(),f=void 0),N&&((P=n.onDidHideHover)===null||P===void 0||P.call(n))},s=(T,A,P)=>new k.TimeoutTimer(async()=>{(!c||c.isDisposed)&&(c=new a(n,P||t,T>0),await c.update(r,A,u))},T);let l=!1;const o=L.addDisposableListener(t,L.EventType.MOUSE_DOWN,()=>{l=!0,d(!0,!0)},!0),g=L.addDisposableListener(t,L.EventType.MOUSE_UP,()=>{l=!1},!0),h=L.addDisposableListener(t,L.EventType.MOUSE_LEAVE,T=>{l=!1,d(!1,T.fromElement===t)},!0),m=()=>{if(f)return;const T=new p.DisposableStore,A={targetElements:[t],dispose:()=>{}};if(n.placement===void 0||n.placement===\"mouse\"){const P=N=>{A.x=N.x+10,N.target instanceof HTMLElement&&N.target.classList.contains(\"action-label\")&&d(!0,!0)};T.add(L.addDisposableListener(t,L.EventType.MOUSE_MOVE,P,!0))}T.add(s(n.delay,!1,A)),f=T},C=L.addDisposableListener(t,L.EventType.MOUSE_OVER,m,!0),w=()=>{if(l||f)return;const T={targetElements:[t],dispose:()=>{}},A=new p.DisposableStore,P=()=>d(!0,!0);A.add(L.addDisposableListener(t,L.EventType.BLUR,P,!0)),A.add(s(n.delay,!1,T)),f=A},D=L.addDisposableListener(t,L.EventType.FOCUS,w,!0);return{show:T=>{d(!1,!0),s(0,T)},hide:()=>{d(!0,!0)},update:async(T,A)=>{r=T,await c?.update(r,void 0,A)},dispose:()=>{C.dispose(),h.dispose(),o.dispose(),g.dispose(),D.dispose(),d(!0,!0)}}}e.setupCustomHover=i}),define(se[230],oe([1,0,7,320,324,2,55,172,415]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IconLabel=void 0;class _{constructor(t){this._element=t}get element(){return this._element}set textContent(t){this.disposed||t===this._textContent||(this._textContent=t,this._element.textContent=t)}set className(t){this.disposed||t===this._className||(this._className=t,this._element.className=t)}set empty(t){this.disposed||t===this._empty||(this._empty=t,this._element.style.marginLeft=t?\"0\":\"\")}dispose(){this.disposed=!0}}class v extends E.Disposable{constructor(t,r){super(),this.customHovers=new Map,this.creationOptions=r,this.domNode=this._register(new _(L.append(t,L.$(\".monaco-icon-label\")))),this.labelContainer=L.append(this.domNode.element,L.$(\".monaco-icon-label-container\")),this.nameContainer=L.append(this.labelContainer,L.$(\"span.monaco-icon-name-container\")),r?.supportHighlights||r?.supportIcons?this.nameNode=new i(this.nameContainer,!!r.supportIcons):this.nameNode=new b(this.nameContainer),this.hoverDelegate=r?.hoverDelegate}get element(){return this.domNode.element}setLabel(t,r,u){var f;const c=[\"monaco-icon-label\"],d=[\"monaco-icon-label-container\"];let s=\"\";if(u&&(u.extraClasses&&c.push(...u.extraClasses),u.italic&&c.push(\"italic\"),u.strikethrough&&c.push(\"strikethrough\"),u.disabledCommand&&d.push(\"disabled\"),u.title&&(typeof u.title==\"string\"?s+=u.title:s+=t)),this.domNode.className=c.join(\" \"),this.domNode.element.setAttribute(\"aria-label\",s),this.labelContainer.className=d.join(\" \"),this.setupHover(u?.descriptionTitle?this.labelContainer:this.element,u?.title),this.nameNode.setLabel(t,u),r||this.descriptionNode){const l=this.getOrCreateDescriptionNode();l instanceof k.HighlightedLabel?(l.set(r||\"\",u?u.descriptionMatches:void 0,void 0,u?.labelEscapeNewLines),this.setupHover(l.element,u?.descriptionTitle)):(l.textContent=r&&u?.labelEscapeNewLines?k.HighlightedLabel.escapeNewLines(r,[]):r||\"\",this.setupHover(l.element,u?.descriptionTitle||\"\"),l.empty=!r)}if(u?.suffix||this.suffixNode){const l=this.getOrCreateSuffixNode();l.textContent=(f=u?.suffix)!==null&&f!==void 0?f:\"\"}}setupHover(t,r){const u=this.customHovers.get(t);if(u&&(u.dispose(),this.customHovers.delete(t)),!r){t.removeAttribute(\"title\");return}if(!this.hoverDelegate)(0,y.setupNativeHover)(t,r);else{const f=(0,y.setupCustomHover)(this.hoverDelegate,t,r);f&&this.customHovers.set(t,f)}}dispose(){super.dispose();for(const t of this.customHovers.values())t.dispose();this.customHovers.clear()}getOrCreateSuffixNode(){if(!this.suffixNode){const t=this._register(new _(L.after(this.nameContainer,L.$(\"span.monaco-icon-suffix-container\"))));this.suffixNode=this._register(new _(L.append(t.element,L.$(\"span.label-suffix\"))))}return this.suffixNode}getOrCreateDescriptionNode(){var t;if(!this.descriptionNode){const r=this._register(new _(L.append(this.labelContainer,L.$(\"span.monaco-icon-description-container\"))));!((t=this.creationOptions)===null||t===void 0)&&t.supportDescriptionHighlights?this.descriptionNode=new k.HighlightedLabel(L.append(r.element,L.$(\"span.label-description\")),{supportIcons:!!this.creationOptions.supportIcons}):this.descriptionNode=this._register(new _(L.append(r.element,L.$(\"span.label-description\"))))}return this.descriptionNode}}e.IconLabel=v;class b{constructor(t){this.container=t,this.label=void 0,this.singleLabel=void 0}setLabel(t,r){if(!(this.label===t&&(0,S.equals)(this.options,r)))if(this.label=t,this.options=r,typeof t==\"string\")this.singleLabel||(this.container.innerText=\"\",this.container.classList.remove(\"multiple\"),this.singleLabel=L.append(this.container,L.$(\"a.label-name\",{id:r?.domId}))),this.singleLabel.textContent=t;else{this.container.innerText=\"\",this.container.classList.add(\"multiple\"),this.singleLabel=void 0;for(let u=0;u<t.length;u++){const f=t[u],c=r?.domId&&`${r?.domId}_${u}`;L.append(this.container,L.$(\"a.label-name\",{id:c,\"data-icon-label-count\":t.length,\"data-icon-label-index\":u,role:\"treeitem\"},f)),u<t.length-1&&L.append(this.container,L.$(\"span.label-separator\",void 0,r?.separator||\"/\"))}}}}function a(n,t,r){if(!r)return;let u=0;return n.map(f=>{const c={start:u,end:u+f.length},d=r.map(s=>p.Range.intersect(c,s)).filter(s=>!p.Range.isEmpty(s)).map(({start:s,end:l})=>({start:s-u,end:l-u}));return u=c.end+t.length,d})}class i{constructor(t,r){this.container=t,this.supportIcons=r,this.label=void 0,this.singleLabel=void 0}setLabel(t,r){if(!(this.label===t&&(0,S.equals)(this.options,r)))if(this.label=t,this.options=r,typeof t==\"string\")this.singleLabel||(this.container.innerText=\"\",this.container.classList.remove(\"multiple\"),this.singleLabel=new k.HighlightedLabel(L.append(this.container,L.$(\"a.label-name\",{id:r?.domId})),{supportIcons:this.supportIcons})),this.singleLabel.set(t,r?.matches,void 0,r?.labelEscapeNewLines);else{this.container.innerText=\"\",this.container.classList.add(\"multiple\"),this.singleLabel=void 0;const u=r?.separator||\"/\",f=a(t,u,r?.matches);for(let c=0;c<t.length;c++){const d=t[c],s=f?f[c]:void 0,l=r?.domId&&`${r?.domId}_${c}`,o=L.$(\"a.label-name\",{id:l,\"data-icon-label-count\":t.length,\"data-icon-label-index\":c,role:\"treeitem\"});new k.HighlightedLabel(L.append(this.container,o),{supportIcons:this.supportIcons}).set(d,s,void 0,r?.labelEscapeNewLines),c<t.length-1&&L.append(o,L.$(\"span.label-separator\",void 0,u))}}}}}),define(se[596],oe([1,0,7,84,46,186,119,13,6,65,2,17,574,423]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectBoxList=void 0;const n=L.$,t=\"selectOption.entry.template\";class r{get templateId(){return t}renderTemplate(c){const d=Object.create(null);return d.root=c,d.text=L.append(c,n(\".option-text\")),d.detail=L.append(c,n(\".option-detail\")),d.decoratorRight=L.append(c,n(\".option-decorator-right\")),d}renderElement(c,d,s){const l=s,o=c.text,g=c.detail,h=c.decoratorRight,m=c.isDisabled;l.text.textContent=o,l.detail.textContent=g||\"\",l.decoratorRight.innerText=h||\"\",m?l.root.classList.add(\"option-disabled\"):l.root.classList.remove(\"option-disabled\")}disposeTemplate(c){}}class u extends b.Disposable{constructor(c,d,s,l,o){super(),this.options=[],this._currentSelection=0,this._hasDetails=!1,this._skipLayout=!1,this._sticky=!1,this._isVisible=!1,this.styles=l,this.selectBoxOptions=o||Object.create(null),typeof this.selectBoxOptions.minBottomMargin!=\"number\"?this.selectBoxOptions.minBottomMargin=u.DEFAULT_DROPDOWN_MINIMUM_BOTTOM_MARGIN:this.selectBoxOptions.minBottomMargin<0&&(this.selectBoxOptions.minBottomMargin=0),this.selectElement=document.createElement(\"select\"),this.selectElement.className=\"monaco-select-box monaco-select-box-dropdown-padding\",typeof this.selectBoxOptions.ariaLabel==\"string\"&&this.selectElement.setAttribute(\"aria-label\",this.selectBoxOptions.ariaLabel),typeof this.selectBoxOptions.ariaDescription==\"string\"&&this.selectElement.setAttribute(\"aria-description\",this.selectBoxOptions.ariaDescription),this._onDidSelect=new _.Emitter,this._register(this._onDidSelect),this.registerListeners(),this.constructSelectDropDown(s),this.selected=d||0,c&&this.setOptions(c,d),this.initStyleSheet()}getHeight(){return 22}getTemplateId(){return t}constructSelectDropDown(c){this.contextViewProvider=c,this.selectDropDownContainer=L.$(\".monaco-select-box-dropdown-container\"),this.selectDropDownContainer.classList.add(\"monaco-select-box-dropdown-padding\"),this.selectionDetailsPane=L.append(this.selectDropDownContainer,n(\".select-box-details-pane\"));const d=L.append(this.selectDropDownContainer,n(\".select-box-dropdown-container-width-control\")),s=L.append(d,n(\".width-control-div\"));this.widthControlElement=document.createElement(\"span\"),this.widthControlElement.className=\"option-text-width-control\",L.append(s,this.widthControlElement),this._dropDownPosition=0,this.styleElement=L.createStyleSheet(this.selectDropDownContainer),this.selectDropDownContainer.setAttribute(\"draggable\",\"true\"),this._register(L.addDisposableListener(this.selectDropDownContainer,L.EventType.DRAG_START,l=>{L.EventHelper.stop(l,!0)}))}registerListeners(){this._register(L.addStandardDisposableListener(this.selectElement,\"change\",d=>{this.selected=d.target.selectedIndex,this._onDidSelect.fire({index:d.target.selectedIndex,selected:d.target.value}),this.options[this.selected]&&this.options[this.selected].text&&(this.selectElement.title=this.options[this.selected].text)})),this._register(L.addDisposableListener(this.selectElement,L.EventType.CLICK,d=>{L.EventHelper.stop(d),this._isVisible?this.hideSelectDropDown(!0):this.showSelectDropDown()})),this._register(L.addDisposableListener(this.selectElement,L.EventType.MOUSE_DOWN,d=>{L.EventHelper.stop(d)}));let c;this._register(L.addDisposableListener(this.selectElement,\"touchstart\",d=>{c=this._isVisible})),this._register(L.addDisposableListener(this.selectElement,\"touchend\",d=>{L.EventHelper.stop(d),c?this.hideSelectDropDown(!0):this.showSelectDropDown()})),this._register(L.addDisposableListener(this.selectElement,L.EventType.KEY_DOWN,d=>{const s=new y.StandardKeyboardEvent(d);let l=!1;a.isMacintosh?(s.keyCode===18||s.keyCode===16||s.keyCode===10||s.keyCode===3)&&(l=!0):(s.keyCode===18&&s.altKey||s.keyCode===16&&s.altKey||s.keyCode===10||s.keyCode===3)&&(l=!0),l&&(this.showSelectDropDown(),L.EventHelper.stop(d,!0))}))}get onDidSelect(){return this._onDidSelect.event}setOptions(c,d){p.equals(this.options,c)||(this.options=c,this.selectElement.options.length=0,this._hasDetails=!1,this._cachedMaxDetailsHeight=void 0,this.options.forEach((s,l)=>{this.selectElement.add(this.createOption(s.text,l,s.isDisabled)),typeof s.description==\"string\"&&(this._hasDetails=!0)})),d!==void 0&&(this.select(d),this._currentSelection=this.selected)}setOptionsList(){var c;(c=this.selectList)===null||c===void 0||c.splice(0,this.selectList.length,this.options)}select(c){c>=0&&c<this.options.length?this.selected=c:c>this.options.length-1?this.select(this.options.length-1):this.selected<0&&(this.selected=0),this.selectElement.selectedIndex=this.selected,this.options[this.selected]&&this.options[this.selected].text&&(this.selectElement.title=this.options[this.selected].text)}focus(){this.selectElement&&(this.selectElement.tabIndex=0,this.selectElement.focus())}blur(){this.selectElement&&(this.selectElement.tabIndex=-1,this.selectElement.blur())}setFocusable(c){this.selectElement.tabIndex=c?0:-1}render(c){this.container=c,c.classList.add(\"select-container\"),c.appendChild(this.selectElement),this.styleSelectElement()}initStyleSheet(){const c=[];this.styles.listFocusBackground&&c.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { background-color: ${this.styles.listFocusBackground} !important; }`),this.styles.listFocusForeground&&c.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { color: ${this.styles.listFocusForeground} !important; }`),this.styles.decoratorRightForeground&&c.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.focused) .option-decorator-right { color: ${this.styles.decoratorRightForeground}; }`),this.styles.selectBackground&&this.styles.selectBorder&&this.styles.selectBorder!==this.styles.selectBackground?(c.push(`.monaco-select-box-dropdown-container { border: 1px solid ${this.styles.selectBorder} } `),c.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-top { border-top: 1px solid ${this.styles.selectBorder} } `),c.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-bottom { border-bottom: 1px solid ${this.styles.selectBorder} } `)):this.styles.selectListBorder&&(c.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-top { border-top: 1px solid ${this.styles.selectListBorder} } `),c.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-bottom { border-bottom: 1px solid ${this.styles.selectListBorder} } `)),this.styles.listHoverForeground&&c.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { color: ${this.styles.listHoverForeground} !important; }`),this.styles.listHoverBackground&&c.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { background-color: ${this.styles.listHoverBackground} !important; }`),this.styles.listFocusOutline&&c.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { outline: 1.6px dotted ${this.styles.listFocusOutline} !important; outline-offset: -1.6px !important; }`),this.styles.listHoverOutline&&c.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { outline: 1.6px dashed ${this.styles.listHoverOutline} !important; outline-offset: -1.6px !important; }`),c.push(\".monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.option-disabled.focused { background-color: transparent !important; color: inherit !important; outline: none !important; }\"),c.push(\".monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.option-disabled:hover { background-color: transparent !important; color: inherit !important; outline: none !important; }\"),this.styleElement.textContent=c.join(`\n`)}styleSelectElement(){var c,d,s;const l=(c=this.styles.selectBackground)!==null&&c!==void 0?c:\"\",o=(d=this.styles.selectForeground)!==null&&d!==void 0?d:\"\",g=(s=this.styles.selectBorder)!==null&&s!==void 0?s:\"\";this.selectElement.style.backgroundColor=l,this.selectElement.style.color=o,this.selectElement.style.borderColor=g}styleList(){var c,d;const s=(c=this.styles.selectBackground)!==null&&c!==void 0?c:\"\",l=L.asCssValueWithDefault(this.styles.selectListBackground,s);this.selectDropDownListContainer.style.backgroundColor=l,this.selectionDetailsPane.style.backgroundColor=l;const o=(d=this.styles.focusBorder)!==null&&d!==void 0?d:\"\";this.selectDropDownContainer.style.outlineColor=o,this.selectDropDownContainer.style.outlineOffset=\"-1px\",this.selectList.style(this.styles)}createOption(c,d,s){const l=document.createElement(\"option\");return l.value=c,l.text=c,l.disabled=!!s,l}showSelectDropDown(){this.selectionDetailsPane.innerText=\"\",!(!this.contextViewProvider||this._isVisible)&&(this.createSelectList(this.selectDropDownContainer),this.setOptionsList(),this.contextViewProvider.showContextView({getAnchor:()=>this.selectElement,render:c=>this.renderSelectDropDown(c,!0),layout:()=>{this.layoutSelectDropDown()},onHide:()=>{this.selectDropDownContainer.classList.remove(\"visible\"),this.selectElement.classList.remove(\"synthetic-focus\")},anchorPosition:this._dropDownPosition},this.selectBoxOptions.optionsAsChildren?this.container:void 0),this._isVisible=!0,this.hideSelectDropDown(!1),this.contextViewProvider.showContextView({getAnchor:()=>this.selectElement,render:c=>this.renderSelectDropDown(c),layout:()=>this.layoutSelectDropDown(),onHide:()=>{this.selectDropDownContainer.classList.remove(\"visible\"),this.selectElement.classList.remove(\"synthetic-focus\")},anchorPosition:this._dropDownPosition},this.selectBoxOptions.optionsAsChildren?this.container:void 0),this._currentSelection=this.selected,this._isVisible=!0,this.selectElement.setAttribute(\"aria-expanded\",\"true\"))}hideSelectDropDown(c){!this.contextViewProvider||!this._isVisible||(this._isVisible=!1,this.selectElement.setAttribute(\"aria-expanded\",\"false\"),c&&this.selectElement.focus(),this.contextViewProvider.hideContextView())}renderSelectDropDown(c,d){return c.appendChild(this.selectDropDownContainer),this.layoutSelectDropDown(d),{dispose:()=>{try{c.removeChild(this.selectDropDownContainer)}catch{}}}}measureMaxDetailsHeight(){let c=0;return this.options.forEach((d,s)=>{this.updateDetail(s),this.selectionDetailsPane.offsetHeight>c&&(c=this.selectionDetailsPane.offsetHeight)}),c}layoutSelectDropDown(c){if(this._skipLayout)return!1;if(this.selectList){this.selectDropDownContainer.classList.add(\"visible\");const d=L.getWindow(this.selectElement),s=L.getDomNodePagePosition(this.selectElement),l=L.getWindow(this.selectElement).getComputedStyle(this.selectElement),o=parseFloat(l.getPropertyValue(\"--dropdown-padding-top\"))+parseFloat(l.getPropertyValue(\"--dropdown-padding-bottom\")),g=d.innerHeight-s.top-s.height-(this.selectBoxOptions.minBottomMargin||0),h=s.top-u.DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN,m=this.selectElement.offsetWidth,C=this.setWidthControlElement(this.widthControlElement),w=Math.max(C,Math.round(m)).toString()+\"px\";this.selectDropDownContainer.style.width=w,this.selectList.getHTMLElement().style.height=\"\",this.selectList.layout();let D=this.selectList.contentHeight;this._hasDetails&&this._cachedMaxDetailsHeight===void 0&&(this._cachedMaxDetailsHeight=this.measureMaxDetailsHeight());const I=this._hasDetails?this._cachedMaxDetailsHeight:0,T=D+o+I,A=Math.floor((g-o-I)/this.getHeight()),P=Math.floor((h-o-I)/this.getHeight());if(c)return s.top+s.height>d.innerHeight-22||s.top<u.DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN||A<1&&P<1?!1:(A<u.DEFAULT_MINIMUM_VISIBLE_OPTIONS&&P>A&&this.options.length>A?(this._dropDownPosition=1,this.selectDropDownContainer.removeChild(this.selectDropDownListContainer),this.selectDropDownContainer.removeChild(this.selectionDetailsPane),this.selectDropDownContainer.appendChild(this.selectionDetailsPane),this.selectDropDownContainer.appendChild(this.selectDropDownListContainer),this.selectionDetailsPane.classList.remove(\"border-top\"),this.selectionDetailsPane.classList.add(\"border-bottom\")):(this._dropDownPosition=0,this.selectDropDownContainer.removeChild(this.selectDropDownListContainer),this.selectDropDownContainer.removeChild(this.selectionDetailsPane),this.selectDropDownContainer.appendChild(this.selectDropDownListContainer),this.selectDropDownContainer.appendChild(this.selectionDetailsPane),this.selectionDetailsPane.classList.remove(\"border-bottom\"),this.selectionDetailsPane.classList.add(\"border-top\")),!0);if(s.top+s.height>d.innerHeight-22||s.top<u.DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN||this._dropDownPosition===0&&A<1||this._dropDownPosition===1&&P<1)return this.hideSelectDropDown(!0),!1;if(this._dropDownPosition===0){if(this._isVisible&&A+P<1)return this.hideSelectDropDown(!0),!1;T>g&&(D=A*this.getHeight())}else T>h&&(D=P*this.getHeight());return this.selectList.layout(D),this.selectList.domFocus(),this.selectList.length>0&&(this.selectList.setFocus([this.selected||0]),this.selectList.reveal(this.selectList.getFocus()[0]||0)),this._hasDetails?(this.selectList.getHTMLElement().style.height=D+o+\"px\",this.selectDropDownContainer.style.height=\"\"):this.selectDropDownContainer.style.height=D+o+\"px\",this.updateDetail(this.selected),this.selectDropDownContainer.style.width=w,this.selectDropDownListContainer.setAttribute(\"tabindex\",\"0\"),this.selectElement.classList.add(\"synthetic-focus\"),this.selectDropDownContainer.classList.add(\"synthetic-focus\"),!0}else return!1}setWidthControlElement(c){let d=0;if(c){let s=0,l=0;this.options.forEach((o,g)=>{const h=o.detail?o.detail.length:0,m=o.decoratorRight?o.decoratorRight.length:0,C=o.text.length+h+m;C>l&&(s=g,l=C)}),c.textContent=this.options[s].text+(this.options[s].decoratorRight?this.options[s].decoratorRight+\" \":\"\"),d=L.getTotalWidth(c)}return d}createSelectList(c){if(this.selectList)return;this.selectDropDownListContainer=L.append(c,n(\".select-box-dropdown-list-container\")),this.listRenderer=new r,this.selectList=new S.List(\"SelectBoxCustom\",this.selectDropDownListContainer,this,[this.listRenderer],{useShadows:!1,verticalScrollMode:3,keyboardSupport:!1,mouseSupport:!1,accessibilityProvider:{getAriaLabel:l=>{let o=l.text;return l.detail&&(o+=`. ${l.detail}`),l.decoratorRight&&(o+=`. ${l.decoratorRight}`),l.description&&(o+=`. ${l.description}`),o},getWidgetAriaLabel:()=>(0,i.localize)(0,null),getRole:()=>a.isMacintosh?\"\":\"option\",getWidgetRole:()=>\"listbox\"}}),this.selectBoxOptions.ariaLabel&&(this.selectList.ariaLabel=this.selectBoxOptions.ariaLabel);const d=this._register(new k.DomEmitter(this.selectDropDownListContainer,\"keydown\")),s=_.Event.chain(d.event,l=>l.filter(()=>this.selectList.length>0).map(o=>new y.StandardKeyboardEvent(o)));this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode===3))(this.onEnter,this)),this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode===2))(this.onEnter,this)),this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode===9))(this.onEscape,this)),this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode===16))(this.onUpArrow,this)),this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode===18))(this.onDownArrow,this)),this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode===12))(this.onPageDown,this)),this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode===11))(this.onPageUp,this)),this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode===14))(this.onHome,this)),this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode===13))(this.onEnd,this)),this._register(_.Event.chain(s,l=>l.filter(o=>o.keyCode>=21&&o.keyCode<=56||o.keyCode>=85&&o.keyCode<=113))(this.onCharacter,this)),this._register(L.addDisposableListener(this.selectList.getHTMLElement(),L.EventType.POINTER_UP,l=>this.onPointerUp(l))),this._register(this.selectList.onMouseOver(l=>typeof l.index<\"u\"&&this.selectList.setFocus([l.index]))),this._register(this.selectList.onDidChangeFocus(l=>this.onListFocus(l))),this._register(L.addDisposableListener(this.selectDropDownContainer,L.EventType.FOCUS_OUT,l=>{!this._isVisible||L.isAncestor(l.relatedTarget,this.selectDropDownContainer)||this.onListBlur()})),this.selectList.getHTMLElement().setAttribute(\"aria-label\",this.selectBoxOptions.ariaLabel||\"\"),this.selectList.getHTMLElement().setAttribute(\"aria-expanded\",\"true\"),this.styleList()}onPointerUp(c){if(!this.selectList.length)return;L.EventHelper.stop(c);const d=c.target;if(!d||d.classList.contains(\"slider\"))return;const s=d.closest(\".monaco-list-row\");if(!s)return;const l=Number(s.getAttribute(\"data-index\")),o=s.classList.contains(\"option-disabled\");l>=0&&l<this.options.length&&!o&&(this.selected=l,this.select(this.selected),this.selectList.setFocus([this.selected]),this.selectList.reveal(this.selectList.getFocus()[0]),this.selected!==this._currentSelection&&(this._currentSelection=this.selected,this._onDidSelect.fire({index:this.selectElement.selectedIndex,selected:this.options[this.selected].text}),this.options[this.selected]&&this.options[this.selected].text&&(this.selectElement.title=this.options[this.selected].text)),this.hideSelectDropDown(!0))}onListBlur(){this._sticky||(this.selected!==this._currentSelection&&this.select(this._currentSelection),this.hideSelectDropDown(!1))}renderDescriptionMarkdown(c,d){const s=o=>{for(let g=0;g<o.childNodes.length;g++){const h=o.childNodes.item(g);(h.tagName&&h.tagName.toLowerCase())===\"img\"?o.removeChild(h):s(h)}},l=(0,E.renderMarkdown)({value:c,supportThemeIcons:!0},{actionHandler:d});return l.element.classList.add(\"select-box-description-markdown\"),s(l.element),l.element}onListFocus(c){!this._isVisible||!this._hasDetails||this.updateDetail(c.indexes[0])}updateDetail(c){var d,s;this.selectionDetailsPane.innerText=\"\";const l=this.options[c],o=(d=l?.description)!==null&&d!==void 0?d:\"\",g=(s=l?.descriptionIsMarkdown)!==null&&s!==void 0?s:!1;if(o){if(g){const h=l.descriptionMarkdownActionHandler;this.selectionDetailsPane.appendChild(this.renderDescriptionMarkdown(o,h))}else this.selectionDetailsPane.innerText=o;this.selectionDetailsPane.style.display=\"block\"}else this.selectionDetailsPane.style.display=\"none\";this._skipLayout=!0,this.contextViewProvider.layout(),this._skipLayout=!1}onEscape(c){L.EventHelper.stop(c),this.select(this._currentSelection),this.hideSelectDropDown(!0)}onEnter(c){L.EventHelper.stop(c),this.selected!==this._currentSelection&&(this._currentSelection=this.selected,this._onDidSelect.fire({index:this.selectElement.selectedIndex,selected:this.options[this.selected].text}),this.options[this.selected]&&this.options[this.selected].text&&(this.selectElement.title=this.options[this.selected].text)),this.hideSelectDropDown(!0)}onDownArrow(c){if(this.selected<this.options.length-1){L.EventHelper.stop(c,!0);const d=this.options[this.selected+1].isDisabled;if(d&&this.options.length>this.selected+2)this.selected+=2;else{if(d)return;this.selected++}this.select(this.selected),this.selectList.setFocus([this.selected]),this.selectList.reveal(this.selectList.getFocus()[0])}}onUpArrow(c){this.selected>0&&(L.EventHelper.stop(c,!0),this.options[this.selected-1].isDisabled&&this.selected>1?this.selected-=2:this.selected--,this.select(this.selected),this.selectList.setFocus([this.selected]),this.selectList.reveal(this.selectList.getFocus()[0]))}onPageUp(c){L.EventHelper.stop(c),this.selectList.focusPreviousPage(),setTimeout(()=>{this.selected=this.selectList.getFocus()[0],this.options[this.selected].isDisabled&&this.selected<this.options.length-1&&(this.selected++,this.selectList.setFocus([this.selected])),this.selectList.reveal(this.selected),this.select(this.selected)},1)}onPageDown(c){L.EventHelper.stop(c),this.selectList.focusNextPage(),setTimeout(()=>{this.selected=this.selectList.getFocus()[0],this.options[this.selected].isDisabled&&this.selected>0&&(this.selected--,this.selectList.setFocus([this.selected])),this.selectList.reveal(this.selected),this.select(this.selected)},1)}onHome(c){L.EventHelper.stop(c),!(this.options.length<2)&&(this.selected=0,this.options[this.selected].isDisabled&&this.selected>1&&this.selected++,this.selectList.setFocus([this.selected]),this.selectList.reveal(this.selected),this.select(this.selected))}onEnd(c){L.EventHelper.stop(c),!(this.options.length<2)&&(this.selected=this.options.length-1,this.options[this.selected].isDisabled&&this.selected>1&&this.selected--,this.selectList.setFocus([this.selected]),this.selectList.reveal(this.selected),this.select(this.selected))}onCharacter(c){const d=v.KeyCodeUtils.toString(c.keyCode);let s=-1;for(let l=0;l<this.options.length-1;l++)if(s=(l+this.selected+1)%this.options.length,this.options[s].text.charAt(0).toUpperCase()===d&&!this.options[s].isDisabled){this.select(s),this.selectList.setFocus([s]),this.selectList.reveal(this.selectList.getFocus()[0]),L.EventHelper.stop(c);break}}dispose(){this.hideSelectDropDown(!1),super.dispose()}}e.SelectBoxList=u,u.DEFAULT_DROPDOWN_MINIMUM_BOTTOM_MARGIN=32,u.DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN=2,u.DEFAULT_MINIMUM_VISIBLE_OPTIONS=3}),define(se[597],oe([1,0,596,591,76,17,422]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectBox=void 0;class S extends y.Widget{constructor(_,v,b,a,i){super(),E.isMacintosh&&!i?.useCustomDrawn?this.selectBoxDelegate=new k.SelectBoxNative(_,v,a,i):this.selectBoxDelegate=new L.SelectBoxList(_,v,b,a,i),this._register(this.selectBoxDelegate)}get onDidSelect(){return this.selectBoxDelegate.onDidSelect}setOptions(_,v){this.selectBoxDelegate.setOptions(_,v)}select(_){this.selectBoxDelegate.select(_)}focus(){this.selectBoxDelegate.focus()}blur(){this.selectBoxDelegate.blur()}setFocusable(_){this.selectBoxDelegate.setFocusable(_)}render(_){this.selectBoxDelegate.render(_)}}e.SelectBox=S}),define(se[135],oe([1,0,54,198,7,63,324,597,42,2,17,20,566,272]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectActionViewItem=e.ActionViewItem=e.BaseActionViewItem=void 0;class n extends v.Disposable{get action(){return this._action}constructor(f,c,d={}){super(),this.options=d,this._context=f||this,this._action=c,c instanceof _.Action&&this._register(c.onDidChange(s=>{this.element&&this.handleActionChangeEvent(s)}))}handleActionChangeEvent(f){f.enabled!==void 0&&this.updateEnabled(),f.checked!==void 0&&this.updateChecked(),f.class!==void 0&&this.updateClass(),f.label!==void 0&&(this.updateLabel(),this.updateTooltip()),f.tooltip!==void 0&&this.updateTooltip()}get actionRunner(){return this._actionRunner||(this._actionRunner=this._register(new _.ActionRunner)),this._actionRunner}set actionRunner(f){this._actionRunner=f}isEnabled(){return this._action.enabled}setActionContext(f){this._context=f}render(f){const c=this.element=f;this._register(E.Gesture.addTarget(f));const d=this.options&&this.options.draggable;d&&(f.draggable=!0,L.isFirefox&&this._register((0,y.addDisposableListener)(f,y.EventType.DRAG_START,s=>{var l;return(l=s.dataTransfer)===null||l===void 0?void 0:l.setData(k.DataTransfers.TEXT,this._action.label)}))),this._register((0,y.addDisposableListener)(c,E.EventType.Tap,s=>this.onClick(s,!0))),this._register((0,y.addDisposableListener)(c,y.EventType.MOUSE_DOWN,s=>{d||y.EventHelper.stop(s,!0),this._action.enabled&&s.button===0&&c.classList.add(\"active\")})),b.isMacintosh&&this._register((0,y.addDisposableListener)(c,y.EventType.CONTEXT_MENU,s=>{s.button===0&&s.ctrlKey===!0&&this.onClick(s)})),this._register((0,y.addDisposableListener)(c,y.EventType.CLICK,s=>{y.EventHelper.stop(s,!0),this.options&&this.options.isMenu||this.onClick(s)})),this._register((0,y.addDisposableListener)(c,y.EventType.DBLCLICK,s=>{y.EventHelper.stop(s,!0)})),[y.EventType.MOUSE_UP,y.EventType.MOUSE_OUT].forEach(s=>{this._register((0,y.addDisposableListener)(c,s,l=>{y.EventHelper.stop(l),c.classList.remove(\"active\")}))})}onClick(f,c=!1){var d;y.EventHelper.stop(f,!0);const s=a.isUndefinedOrNull(this._context)?!((d=this.options)===null||d===void 0)&&d.useEventAsContext?f:{preserveFocus:c}:this._context;this.actionRunner.run(this._action,s)}focus(){this.element&&(this.element.tabIndex=0,this.element.focus(),this.element.classList.add(\"focused\"))}blur(){this.element&&(this.element.blur(),this.element.tabIndex=-1,this.element.classList.remove(\"focused\"))}setFocusable(f){this.element&&(this.element.tabIndex=f?0:-1)}get trapsArrowNavigation(){return!1}updateEnabled(){}updateLabel(){}getClass(){return this.action.class}getTooltip(){return this.action.tooltip}updateTooltip(){var f;if(!this.element)return;const c=(f=this.getTooltip())!==null&&f!==void 0?f:\"\";this.updateAriaLabel(),this.options.hoverDelegate?(this.element.title=\"\",this.customHover?this.customHover.update(c):(this.customHover=(0,S.setupCustomHover)(this.options.hoverDelegate,this.element,c),this._store.add(this.customHover))):this.element.title=c}updateAriaLabel(){var f;if(this.element){const c=(f=this.getTooltip())!==null&&f!==void 0?f:\"\";this.element.setAttribute(\"aria-label\",c)}}updateClass(){}updateChecked(){}dispose(){this.element&&(this.element.remove(),this.element=void 0),this._context=void 0,super.dispose()}}e.BaseActionViewItem=n;class t extends n{constructor(f,c,d){super(f,c,d),this.options=d,this.options.icon=d.icon!==void 0?d.icon:!1,this.options.label=d.label!==void 0?d.label:!0,this.cssClass=\"\"}render(f){super.render(f),a.assertType(this.element);const c=document.createElement(\"a\");if(c.classList.add(\"action-label\"),c.setAttribute(\"role\",this.getDefaultAriaRole()),this.label=c,this.element.appendChild(c),this.options.label&&this.options.keybinding){const d=document.createElement(\"span\");d.classList.add(\"keybinding\"),d.textContent=this.options.keybinding,this.element.appendChild(d)}this.updateClass(),this.updateLabel(),this.updateTooltip(),this.updateEnabled(),this.updateChecked()}getDefaultAriaRole(){return this._action.id===_.Separator.ID?\"presentation\":this.options.isMenu?\"menuitem\":\"button\"}focus(){this.label&&(this.label.tabIndex=0,this.label.focus())}blur(){this.label&&(this.label.tabIndex=-1)}setFocusable(f){this.label&&(this.label.tabIndex=f?0:-1)}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this.action.label)}getTooltip(){let f=null;return this.action.tooltip?f=this.action.tooltip:!this.options.label&&this.action.label&&this.options.icon&&(f=this.action.label,this.options.keybinding&&(f=i.localize(0,null,f,this.options.keybinding))),f??void 0}updateClass(){var f;this.cssClass&&this.label&&this.label.classList.remove(...this.cssClass.split(\" \")),this.options.icon?(this.cssClass=this.getClass(),this.label&&(this.label.classList.add(\"codicon\"),this.cssClass&&this.label.classList.add(...this.cssClass.split(\" \"))),this.updateEnabled()):(f=this.label)===null||f===void 0||f.classList.remove(\"codicon\")}updateEnabled(){var f,c;this.action.enabled?(this.label&&(this.label.removeAttribute(\"aria-disabled\"),this.label.classList.remove(\"disabled\")),(f=this.element)===null||f===void 0||f.classList.remove(\"disabled\")):(this.label&&(this.label.setAttribute(\"aria-disabled\",\"true\"),this.label.classList.add(\"disabled\")),(c=this.element)===null||c===void 0||c.classList.add(\"disabled\"))}updateAriaLabel(){var f;if(this.label){const c=(f=this.getTooltip())!==null&&f!==void 0?f:\"\";this.label.setAttribute(\"aria-label\",c)}}updateChecked(){this.label&&(this.action.checked!==void 0?(this.label.classList.toggle(\"checked\",this.action.checked),this.label.setAttribute(\"aria-checked\",this.action.checked?\"true\":\"false\"),this.label.setAttribute(\"role\",\"checkbox\")):(this.label.classList.remove(\"checked\"),this.label.removeAttribute(\"aria-checked\"),this.label.setAttribute(\"role\",this.getDefaultAriaRole())))}}e.ActionViewItem=t;class r extends n{constructor(f,c,d,s,l,o,g){super(f,c),this.selectBox=new p.SelectBox(d,s,l,o,g),this.selectBox.setFocusable(!1),this._register(this.selectBox),this.registerListeners()}select(f){this.selectBox.select(f)}registerListeners(){this._register(this.selectBox.onDidSelect(f=>this.runAction(f.selected,f.index)))}runAction(f,c){this.actionRunner.run(this._action,this.getActionContext(f,c))}getActionContext(f,c){return f}setFocusable(f){this.selectBox.setFocusable(f)}focus(){var f;(f=this.selectBox)===null||f===void 0||f.focus()}blur(){var f;(f=this.selectBox)===null||f===void 0||f.blur()}render(f){this.selectBox.render(f)}}e.SelectActionViewItem=r}),define(se[78],oe([1,0,7,46,135,42,6,2,20,272]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ActionBar=void 0;class v extends p.Disposable{constructor(a,i={}){var n,t,r,u,f,c;super(),this._actionRunnerDisposables=this._register(new p.DisposableStore),this.viewItemDisposables=this._register(new p.DisposableMap),this.triggerKeyDown=!1,this.focusable=!0,this._onDidBlur=this._register(new S.Emitter),this.onDidBlur=this._onDidBlur.event,this._onDidCancel=this._register(new S.Emitter({onWillAddFirstListener:()=>this.cancelHasListener=!0})),this.onDidCancel=this._onDidCancel.event,this.cancelHasListener=!1,this._onDidRun=this._register(new S.Emitter),this.onDidRun=this._onDidRun.event,this._onWillRun=this._register(new S.Emitter),this.onWillRun=this._onWillRun.event,this.options=i,this._context=(n=i.context)!==null&&n!==void 0?n:null,this._orientation=(t=this.options.orientation)!==null&&t!==void 0?t:0,this._triggerKeys={keyDown:(u=(r=this.options.triggerKeys)===null||r===void 0?void 0:r.keyDown)!==null&&u!==void 0?u:!1,keys:(c=(f=this.options.triggerKeys)===null||f===void 0?void 0:f.keys)!==null&&c!==void 0?c:[3,10]},this.options.actionRunner?this._actionRunner=this.options.actionRunner:(this._actionRunner=new E.ActionRunner,this._actionRunnerDisposables.add(this._actionRunner)),this._actionRunnerDisposables.add(this._actionRunner.onDidRun(l=>this._onDidRun.fire(l))),this._actionRunnerDisposables.add(this._actionRunner.onWillRun(l=>this._onWillRun.fire(l))),this.viewItems=[],this.focusedItem=void 0,this.domNode=document.createElement(\"div\"),this.domNode.className=\"monaco-action-bar\",i.animated!==!1&&this.domNode.classList.add(\"animated\");let d,s;switch(this._orientation){case 0:d=[15],s=[17];break;case 1:d=[16],s=[18],this.domNode.className+=\" vertical\";break}this._register(L.addDisposableListener(this.domNode,L.EventType.KEY_DOWN,l=>{const o=new k.StandardKeyboardEvent(l);let g=!0;const h=typeof this.focusedItem==\"number\"?this.viewItems[this.focusedItem]:void 0;d&&(o.equals(d[0])||o.equals(d[1]))?g=this.focusPrevious():s&&(o.equals(s[0])||o.equals(s[1]))?g=this.focusNext():o.equals(9)&&this.cancelHasListener?this._onDidCancel.fire():o.equals(14)?g=this.focusFirst():o.equals(13)?g=this.focusLast():o.equals(2)&&h instanceof y.BaseActionViewItem&&h.trapsArrowNavigation?g=this.focusNext():this.isTriggerKeyEvent(o)?this._triggerKeys.keyDown?this.doTrigger(o):this.triggerKeyDown=!0:g=!1,g&&(o.preventDefault(),o.stopPropagation())})),this._register(L.addDisposableListener(this.domNode,L.EventType.KEY_UP,l=>{const o=new k.StandardKeyboardEvent(l);this.isTriggerKeyEvent(o)?(!this._triggerKeys.keyDown&&this.triggerKeyDown&&(this.triggerKeyDown=!1,this.doTrigger(o)),o.preventDefault(),o.stopPropagation()):(o.equals(2)||o.equals(1026)||o.equals(16)||o.equals(18)||o.equals(15)||o.equals(17))&&this.updateFocusedItem()})),this.focusTracker=this._register(L.trackFocus(this.domNode)),this._register(this.focusTracker.onDidBlur(()=>{(L.getActiveElement()===this.domNode||!L.isAncestor(L.getActiveElement(),this.domNode))&&(this._onDidBlur.fire(),this.previouslyFocusedItem=this.focusedItem,this.focusedItem=void 0,this.triggerKeyDown=!1)})),this._register(this.focusTracker.onDidFocus(()=>this.updateFocusedItem())),this.actionsList=document.createElement(\"ul\"),this.actionsList.className=\"actions-container\",this.options.highlightToggledItems&&this.actionsList.classList.add(\"highlight-toggled\"),this.actionsList.setAttribute(\"role\",this.options.ariaRole||\"toolbar\"),this.options.ariaLabel&&this.actionsList.setAttribute(\"aria-label\",this.options.ariaLabel),this.domNode.appendChild(this.actionsList),a.appendChild(this.domNode)}refreshRole(){this.length()>=1?this.actionsList.setAttribute(\"role\",this.options.ariaRole||\"toolbar\"):this.actionsList.setAttribute(\"role\",\"presentation\")}setFocusable(a){if(this.focusable=a,this.focusable){const i=this.viewItems.find(n=>n instanceof y.BaseActionViewItem&&n.isEnabled());i instanceof y.BaseActionViewItem&&i.setFocusable(!0)}else this.viewItems.forEach(i=>{i instanceof y.BaseActionViewItem&&i.setFocusable(!1)})}isTriggerKeyEvent(a){let i=!1;return this._triggerKeys.keys.forEach(n=>{i=i||a.equals(n)}),i}updateFocusedItem(){var a,i;for(let n=0;n<this.actionsList.children.length;n++){const t=this.actionsList.children[n];if(L.isAncestor(L.getActiveElement(),t)){this.focusedItem=n,(i=(a=this.viewItems[this.focusedItem])===null||a===void 0?void 0:a.showHover)===null||i===void 0||i.call(a);break}}}get context(){return this._context}set context(a){this._context=a,this.viewItems.forEach(i=>i.setActionContext(a))}get actionRunner(){return this._actionRunner}set actionRunner(a){this._actionRunner=a,this._actionRunnerDisposables.clear(),this._actionRunnerDisposables.add(this._actionRunner.onDidRun(i=>this._onDidRun.fire(i))),this._actionRunnerDisposables.add(this._actionRunner.onWillRun(i=>this._onWillRun.fire(i))),this.viewItems.forEach(i=>i.actionRunner=a)}getContainer(){return this.domNode}getAction(a){var i;if(typeof a==\"number\")return(i=this.viewItems[a])===null||i===void 0?void 0:i.action;if(a instanceof HTMLElement){for(;a.parentElement!==this.actionsList;){if(!a.parentElement)return;a=a.parentElement}for(let n=0;n<this.actionsList.childNodes.length;n++)if(this.actionsList.childNodes[n]===a)return this.viewItems[n].action}}push(a,i={}){const n=Array.isArray(a)?a:[a];let t=_.isNumber(i.index)?i.index:null;n.forEach(r=>{const u=document.createElement(\"li\");u.className=\"action-item\",u.setAttribute(\"role\",\"presentation\");let f;const c={hoverDelegate:this.options.hoverDelegate,...i};this.options.actionViewItemProvider&&(f=this.options.actionViewItemProvider(r,c)),f||(f=new y.ActionViewItem(this.context,r,c)),this.options.allowContextMenu||this.viewItemDisposables.set(f,L.addDisposableListener(u,L.EventType.CONTEXT_MENU,d=>{L.EventHelper.stop(d,!0)})),f.actionRunner=this._actionRunner,f.setActionContext(this.context),f.render(u),this.focusable&&f instanceof y.BaseActionViewItem&&this.viewItems.length===0&&f.setFocusable(!0),t===null||t<0||t>=this.actionsList.children.length?(this.actionsList.appendChild(u),this.viewItems.push(f)):(this.actionsList.insertBefore(u,this.actionsList.children[t]),this.viewItems.splice(t,0,f),t++)}),typeof this.focusedItem==\"number\"&&this.focus(this.focusedItem),this.refreshRole()}clear(){this.isEmpty()||(this.viewItems=(0,p.dispose)(this.viewItems),this.viewItemDisposables.clearAndDisposeAll(),L.clearNode(this.actionsList),this.refreshRole())}length(){return this.viewItems.length}isEmpty(){return this.viewItems.length===0}focus(a){let i=!1,n;if(a===void 0?i=!0:typeof a==\"number\"?n=a:typeof a==\"boolean\"&&(i=a),i&&typeof this.focusedItem>\"u\"){const t=this.viewItems.findIndex(r=>r.isEnabled());this.focusedItem=t===-1?void 0:t,this.updateFocus(void 0,void 0,!0)}else n!==void 0&&(this.focusedItem=n),this.updateFocus(void 0,void 0,!0)}focusFirst(){return this.focusedItem=this.length()-1,this.focusNext(!0)}focusLast(){return this.focusedItem=0,this.focusPrevious(!0)}focusNext(a){if(typeof this.focusedItem>\"u\")this.focusedItem=this.viewItems.length-1;else if(this.viewItems.length<=1)return!1;const i=this.focusedItem;let n;do{if(!a&&this.options.preventLoopNavigation&&this.focusedItem+1>=this.viewItems.length)return this.focusedItem=i,!1;this.focusedItem=(this.focusedItem+1)%this.viewItems.length,n=this.viewItems[this.focusedItem]}while(this.focusedItem!==i&&(this.options.focusOnlyEnabledItems&&!n.isEnabled()||n.action.id===E.Separator.ID));return this.updateFocus(),!0}focusPrevious(a){if(typeof this.focusedItem>\"u\")this.focusedItem=0;else if(this.viewItems.length<=1)return!1;const i=this.focusedItem;let n;do{if(this.focusedItem=this.focusedItem-1,this.focusedItem<0){if(!a&&this.options.preventLoopNavigation)return this.focusedItem=i,!1;this.focusedItem=this.viewItems.length-1}n=this.viewItems[this.focusedItem]}while(this.focusedItem!==i&&(this.options.focusOnlyEnabledItems&&!n.isEnabled()||n.action.id===E.Separator.ID));return this.updateFocus(!0),!0}updateFocus(a,i,n=!1){var t,r;typeof this.focusedItem>\"u\"&&this.actionsList.focus({preventScroll:i}),this.previouslyFocusedItem!==void 0&&this.previouslyFocusedItem!==this.focusedItem&&((t=this.viewItems[this.previouslyFocusedItem])===null||t===void 0||t.blur());const u=this.focusedItem!==void 0?this.viewItems[this.focusedItem]:void 0;if(u){let f=!0;_.isFunction(u.focus)||(f=!1),this.options.focusOnlyEnabledItems&&_.isFunction(u.isEnabled)&&!u.isEnabled()&&(f=!1),u.action.id===E.Separator.ID&&(f=!1),f?(n||this.previouslyFocusedItem!==this.focusedItem)&&(u.focus(a),this.previouslyFocusedItem=this.focusedItem):(this.actionsList.focus({preventScroll:i}),this.previouslyFocusedItem=void 0),f&&((r=u.showHover)===null||r===void 0||r.call(u))}}doTrigger(a){if(typeof this.focusedItem>\"u\")return;const i=this.viewItems[this.focusedItem];if(i instanceof y.BaseActionViewItem){const n=i._context===null||i._context===void 0?a:i._context;this.run(i._action,n)}}async run(a,i){await this._actionRunner.run(a,i)}dispose(){this._context=void 0,this.viewItems=(0,p.dispose)(this.viewItems),this.getContainer().remove(),super.dispose()}}e.ActionBar=v}),define(se[325],oe([1,0,7,135,588,6,273]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DropdownMenuActionViewItem=void 0;class S extends k.BaseActionViewItem{constructor(_,v,b,a=Object.create(null)){super(null,_,a),this.actionItem=null,this._onDidChangeVisibility=this._register(new E.Emitter),this.onDidChangeVisibility=this._onDidChangeVisibility.event,this.menuActionsOrProvider=v,this.contextMenuProvider=b,this.options=a,this.options.actionRunner&&(this.actionRunner=this.options.actionRunner)}render(_){this.actionItem=_;const v=i=>{this.element=(0,L.append)(i,(0,L.$)(\"a.action-label\"));let n=[];return typeof this.options.classNames==\"string\"?n=this.options.classNames.split(/\\s+/g).filter(t=>!!t):this.options.classNames&&(n=this.options.classNames),n.find(t=>t===\"icon\")||n.push(\"codicon\"),this.element.classList.add(...n),this.element.setAttribute(\"role\",\"button\"),this.element.setAttribute(\"aria-haspopup\",\"true\"),this.element.setAttribute(\"aria-expanded\",\"false\"),this.element.title=this._action.label||\"\",this.element.ariaLabel=this._action.label||\"\",null},b=Array.isArray(this.menuActionsOrProvider),a={contextMenuProvider:this.contextMenuProvider,labelRenderer:v,menuAsChild:this.options.menuAsChild,actions:b?this.menuActionsOrProvider:void 0,actionProvider:b?void 0:this.menuActionsOrProvider,skipTelemetry:this.options.skipTelemetry};if(this.dropdownMenu=this._register(new y.DropdownMenu(_,a)),this._register(this.dropdownMenu.onDidChangeVisibility(i=>{var n;(n=this.element)===null||n===void 0||n.setAttribute(\"aria-expanded\",`${i}`),this._onDidChangeVisibility.fire(i)})),this.dropdownMenu.menuOptions={actionViewItemProvider:this.options.actionViewItemProvider,actionRunner:this.actionRunner,getKeyBinding:this.options.keybindingProvider,context:this._context},this.options.anchorAlignmentProvider){const i=this;this.dropdownMenu.menuOptions={...this.dropdownMenu.menuOptions,get anchorAlignment(){return i.options.anchorAlignmentProvider()}}}this.updateTooltip(),this.updateEnabled()}getTooltip(){let _=null;return this.action.tooltip?_=this.action.tooltip:this.action.label&&(_=this.action.label),_??void 0}setActionContext(_){super.setActionContext(_),this.dropdownMenu&&(this.dropdownMenu.menuOptions?this.dropdownMenu.menuOptions.context=_:this.dropdownMenu.menuOptions={context:_})}show(){var _;(_=this.dropdownMenu)===null||_===void 0||_.show()}updateEnabled(){var _,v;const b=!this.action.enabled;(_=this.actionItem)===null||_===void 0||_.classList.toggle(\"disabled\",b),(v=this.element)===null||v===void 0||v.classList.toggle(\"disabled\",b)}}e.DropdownMenuActionViewItem=S}),define(se[231],oe([1,0,7,84,317,78,48,77,76,6,403,55,572,416]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HistoryInputBox=e.InputBox=e.unthemedInboxStyles=void 0;const n=L.$;e.unthemedInboxStyles={inputBackground:\"#3C3C3C\",inputForeground:\"#CCCCCC\",inputValidationInfoBorder:\"#55AAFF\",inputValidationInfoBackground:\"#063B49\",inputValidationWarningBorder:\"#B89500\",inputValidationWarningBackground:\"#352A05\",inputValidationErrorBorder:\"#BE1100\",inputValidationErrorBackground:\"#5A1D1D\",inputBorder:void 0,inputValidationErrorForeground:void 0,inputValidationInfoForeground:void 0,inputValidationWarningForeground:void 0};class t extends _.Widget{constructor(f,c,d){var s;super(),this.state=\"idle\",this.maxHeight=Number.POSITIVE_INFINITY,this._onDidChange=this._register(new v.Emitter),this.onDidChange=this._onDidChange.event,this._onDidHeightChange=this._register(new v.Emitter),this.onDidHeightChange=this._onDidHeightChange.event,this.contextViewProvider=c,this.options=d,this.message=null,this.placeholder=this.options.placeholder||\"\",this.tooltip=(s=this.options.tooltip)!==null&&s!==void 0?s:this.placeholder||\"\",this.ariaLabel=this.options.ariaLabel||\"\",this.options.validationOptions&&(this.validation=this.options.validationOptions.validation),this.element=L.append(f,n(\".monaco-inputbox.idle\"));const l=this.options.flexibleHeight?\"textarea\":\"input\",o=L.append(this.element,n(\".ibwrapper\"));if(this.input=L.append(o,n(l+\".input.empty\")),this.input.setAttribute(\"autocorrect\",\"off\"),this.input.setAttribute(\"autocapitalize\",\"off\"),this.input.setAttribute(\"spellcheck\",\"false\"),this.onfocus(this.input,()=>this.element.classList.add(\"synthetic-focus\")),this.onblur(this.input,()=>this.element.classList.remove(\"synthetic-focus\")),this.options.flexibleHeight){this.maxHeight=typeof this.options.flexibleMaxHeight==\"number\"?this.options.flexibleMaxHeight:Number.POSITIVE_INFINITY,this.mirror=L.append(o,n(\"div.mirror\")),this.mirror.innerText=\"\\xA0\",this.scrollableElement=new p.ScrollableElement(this.element,{vertical:1}),this.options.flexibleWidth&&(this.input.setAttribute(\"wrap\",\"off\"),this.mirror.style.whiteSpace=\"pre\",this.mirror.style.wordWrap=\"initial\"),L.append(f,this.scrollableElement.getDomNode()),this._register(this.scrollableElement),this._register(this.scrollableElement.onScroll(m=>this.input.scrollTop=m.scrollTop));const g=this._register(new k.DomEmitter(f.ownerDocument,\"selectionchange\")),h=v.Event.filter(g.event,()=>{const m=f.ownerDocument.getSelection();return m?.anchorNode===o});this._register(h(this.updateScrollDimensions,this)),this._register(this.onDidHeightChange(this.updateScrollDimensions,this))}else this.input.type=this.options.type||\"text\",this.input.setAttribute(\"wrap\",\"off\");this.ariaLabel&&this.input.setAttribute(\"aria-label\",this.ariaLabel),this.placeholder&&!this.options.showPlaceholderOnFocus&&this.setPlaceHolder(this.placeholder),this.tooltip&&this.setTooltip(this.tooltip),this.oninput(this.input,()=>this.onValueChange()),this.onblur(this.input,()=>this.onBlur()),this.onfocus(this.input,()=>this.onFocus()),this._register(this.ignoreGesture(this.input)),setTimeout(()=>this.updateMirror(),0),this.options.actions&&(this.actionbar=this._register(new E.ActionBar(this.element)),this.actionbar.push(this.options.actions,{icon:!0,label:!1})),this.applyStyles()}onBlur(){this._hideMessage(),this.options.showPlaceholderOnFocus&&this.input.setAttribute(\"placeholder\",\"\")}onFocus(){this._showMessage(),this.options.showPlaceholderOnFocus&&this.input.setAttribute(\"placeholder\",this.placeholder||\"\")}setPlaceHolder(f){this.placeholder=f,this.input.setAttribute(\"placeholder\",f)}setTooltip(f){this.tooltip=f,this.input.title=f}get inputElement(){return this.input}get value(){return this.input.value}set value(f){this.input.value!==f&&(this.input.value=f,this.onValueChange())}get height(){return typeof this.cachedHeight==\"number\"?this.cachedHeight:L.getTotalHeight(this.element)}focus(){this.input.focus()}blur(){this.input.blur()}hasFocus(){return L.isActiveElement(this.input)}select(f=null){this.input.select(),f&&(this.input.setSelectionRange(f.start,f.end),f.end===this.input.value.length&&(this.input.scrollLeft=this.input.scrollWidth))}isSelectionAtEnd(){return this.input.selectionEnd===this.input.value.length&&this.input.selectionStart===this.input.selectionEnd}enable(){this.input.removeAttribute(\"disabled\")}disable(){this.blur(),this.input.disabled=!0,this._hideMessage()}set paddingRight(f){this.input.style.width=`calc(100% - ${f}px)`,this.mirror&&(this.mirror.style.paddingRight=f+\"px\")}updateScrollDimensions(){if(typeof this.cachedContentHeight!=\"number\"||typeof this.cachedHeight!=\"number\"||!this.scrollableElement)return;const f=this.cachedContentHeight,c=this.cachedHeight,d=this.input.scrollTop;this.scrollableElement.setScrollDimensions({scrollHeight:f,height:c}),this.scrollableElement.setScrollPosition({scrollTop:d})}showMessage(f,c){if(this.state===\"open\"&&(0,a.equals)(this.message,f))return;this.message=f,this.element.classList.remove(\"idle\"),this.element.classList.remove(\"info\"),this.element.classList.remove(\"warning\"),this.element.classList.remove(\"error\"),this.element.classList.add(this.classForType(f.type));const d=this.stylesForType(this.message.type);this.element.style.border=`1px solid ${L.asCssValueWithDefault(d.border,\"transparent\")}`,this.message.content&&(this.hasFocus()||c)&&this._showMessage()}hideMessage(){this.message=null,this.element.classList.remove(\"info\"),this.element.classList.remove(\"warning\"),this.element.classList.remove(\"error\"),this.element.classList.add(\"idle\"),this._hideMessage(),this.applyStyles()}validate(){let f=null;return this.validation&&(f=this.validation(this.value),f?(this.inputElement.setAttribute(\"aria-invalid\",\"true\"),this.showMessage(f)):this.inputElement.hasAttribute(\"aria-invalid\")&&(this.inputElement.removeAttribute(\"aria-invalid\"),this.hideMessage())),f?.type}stylesForType(f){const c=this.options.inputBoxStyles;switch(f){case 1:return{border:c.inputValidationInfoBorder,background:c.inputValidationInfoBackground,foreground:c.inputValidationInfoForeground};case 2:return{border:c.inputValidationWarningBorder,background:c.inputValidationWarningBackground,foreground:c.inputValidationWarningForeground};default:return{border:c.inputValidationErrorBorder,background:c.inputValidationErrorBackground,foreground:c.inputValidationErrorForeground}}}classForType(f){switch(f){case 1:return\"info\";case 2:return\"warning\";default:return\"error\"}}_showMessage(){if(!this.contextViewProvider||!this.message)return;let f;const c=()=>f.style.width=L.getTotalWidth(this.element)+\"px\";this.contextViewProvider.showContextView({getAnchor:()=>this.element,anchorAlignment:1,render:s=>{var l,o;if(!this.message)return null;f=L.append(s,n(\".monaco-inputbox-container\")),c();const g={inline:!0,className:\"monaco-inputbox-message\"},h=this.message.formatContent?(0,y.renderFormattedText)(this.message.content,g):(0,y.renderText)(this.message.content,g);h.classList.add(this.classForType(this.message.type));const m=this.stylesForType(this.message.type);return h.style.backgroundColor=(l=m.background)!==null&&l!==void 0?l:\"\",h.style.color=(o=m.foreground)!==null&&o!==void 0?o:\"\",h.style.border=m.border?`1px solid ${m.border}`:\"\",L.append(f,h),null},onHide:()=>{this.state=\"closed\"},layout:c});let d;this.message.type===3?d=i.localize(0,null,this.message.content):this.message.type===2?d=i.localize(1,null,this.message.content):d=i.localize(2,null,this.message.content),S.alert(d),this.state=\"open\"}_hideMessage(){this.contextViewProvider&&(this.state===\"open\"&&this.contextViewProvider.hideContextView(),this.state=\"idle\")}onValueChange(){this._onDidChange.fire(this.value),this.validate(),this.updateMirror(),this.input.classList.toggle(\"empty\",!this.value),this.state===\"open\"&&this.contextViewProvider&&this.contextViewProvider.layout()}updateMirror(){if(!this.mirror)return;const f=this.value,d=f.charCodeAt(f.length-1)===10?\" \":\"\";(f+d).replace(/\\u000c/g,\"\")?this.mirror.textContent=f+d:this.mirror.innerText=\"\\xA0\",this.layout()}applyStyles(){var f,c,d;const s=this.options.inputBoxStyles,l=(f=s.inputBackground)!==null&&f!==void 0?f:\"\",o=(c=s.inputForeground)!==null&&c!==void 0?c:\"\",g=(d=s.inputBorder)!==null&&d!==void 0?d:\"\";this.element.style.backgroundColor=l,this.element.style.color=o,this.input.style.backgroundColor=\"inherit\",this.input.style.color=o,this.element.style.border=`1px solid ${L.asCssValueWithDefault(g,\"transparent\")}`}layout(){if(!this.mirror)return;const f=this.cachedContentHeight;this.cachedContentHeight=L.getTotalHeight(this.mirror),f!==this.cachedContentHeight&&(this.cachedHeight=Math.min(this.cachedContentHeight,this.maxHeight),this.input.style.height=this.cachedHeight+\"px\",this._onDidHeightChange.fire(this.cachedContentHeight))}insertAtCursor(f){const c=this.inputElement,d=c.selectionStart,s=c.selectionEnd,l=c.value;d!==null&&s!==null&&(this.value=l.substr(0,d)+f+l.substr(s),c.setSelectionRange(d+1,d+1),this.layout())}dispose(){var f;this._hideMessage(),this.message=null,(f=this.actionbar)===null||f===void 0||f.dispose(),super.dispose()}}e.InputBox=t;class r extends t{constructor(f,c,d){const s=i.localize(3,null,\"\\u21C5\"),l=i.localize(4,null,\"\\u21C5\");super(f,c,d),this._onDidFocus=this._register(new v.Emitter),this.onDidFocus=this._onDidFocus.event,this._onDidBlur=this._register(new v.Emitter),this.onDidBlur=this._onDidBlur.event,this.history=new b.HistoryNavigator(d.history,100);const o=()=>{if(d.showHistoryHint&&d.showHistoryHint()&&!this.placeholder.endsWith(s)&&!this.placeholder.endsWith(l)&&this.history.getHistory().length){const g=this.placeholder.endsWith(\")\")?s:l,h=this.placeholder+g;d.showPlaceholderOnFocus&&!L.isActiveElement(this.input)?this.placeholder=h:this.setPlaceHolder(h)}};this.observer=new MutationObserver((g,h)=>{g.forEach(m=>{m.target.textContent||o()})}),this.observer.observe(this.input,{attributeFilter:[\"class\"]}),this.onfocus(this.input,()=>o()),this.onblur(this.input,()=>{const g=h=>{if(this.placeholder.endsWith(h)){const m=this.placeholder.slice(0,this.placeholder.length-h.length);return d.showPlaceholderOnFocus?this.placeholder=m:this.setPlaceHolder(m),!0}else return!1};g(l)||g(s)})}dispose(){super.dispose(),this.observer&&(this.observer.disconnect(),this.observer=void 0)}addToHistory(f){this.value&&(f||this.value!==this.getCurrentValue())&&this.history.add(this.value)}isAtLastInHistory(){return this.history.isLast()}isNowhereInHistory(){return this.history.isNowhere()}showNextValue(){this.history.has(this.value)||this.addToHistory();let f=this.getNextValue();f&&(f=f===this.value?this.getNextValue():f),this.value=f??\"\",S.status(this.value?this.value:i.localize(5,null))}showPreviousValue(){this.history.has(this.value)||this.addToHistory();let f=this.getPreviousValue();f&&(f=f===this.value?this.getPreviousValue():f),f&&(this.value=f,S.status(this.value))}setPlaceHolder(f){super.setPlaceHolder(f),this.setTooltip(f)}onBlur(){super.onBlur(),this._onDidBlur.fire()}onFocus(){super.onFocus(),this._onDidFocus.fire()}getCurrentValue(){let f=this.history.current();return f||(f=this.history.last(),this.history.next()),f}getPreviousValue(){return this.history.previous()||this.history.first()}getNextValue(){return this.history.next()}}e.HistoryInputBox=r}),define(se[232],oe([1,0,7,323,231,76,6,567,2,274]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindInput=void 0;const v=p.localize(0,null);class b extends E.Widget{constructor(i,n,t){super(),this.fixFocusOnOptionClickEnabled=!0,this.imeSessionInProgress=!1,this.additionalTogglesDisposables=this._register(new _.MutableDisposable),this.additionalToggles=[],this._onDidOptionChange=this._register(new S.Emitter),this.onDidOptionChange=this._onDidOptionChange.event,this._onKeyDown=this._register(new S.Emitter),this.onKeyDown=this._onKeyDown.event,this._onMouseDown=this._register(new S.Emitter),this.onMouseDown=this._onMouseDown.event,this._onInput=this._register(new S.Emitter),this._onKeyUp=this._register(new S.Emitter),this._onCaseSensitiveKeyDown=this._register(new S.Emitter),this.onCaseSensitiveKeyDown=this._onCaseSensitiveKeyDown.event,this._onRegexKeyDown=this._register(new S.Emitter),this.onRegexKeyDown=this._onRegexKeyDown.event,this._lastHighlightFindOptions=0,this.placeholder=t.placeholder||\"\",this.validation=t.validation,this.label=t.label||v,this.showCommonFindToggles=!!t.showCommonFindToggles;const r=t.appendCaseSensitiveLabel||\"\",u=t.appendWholeWordsLabel||\"\",f=t.appendRegexLabel||\"\",c=t.history||[],d=!!t.flexibleHeight,s=!!t.flexibleWidth,l=t.flexibleMaxHeight;if(this.domNode=document.createElement(\"div\"),this.domNode.classList.add(\"monaco-findInput\"),this.inputBox=this._register(new y.HistoryInputBox(this.domNode,n,{placeholder:this.placeholder||\"\",ariaLabel:this.label||\"\",validationOptions:{validation:this.validation},history:c,showHistoryHint:t.showHistoryHint,flexibleHeight:d,flexibleWidth:s,flexibleMaxHeight:l,inputBoxStyles:t.inputBoxStyles})),this.showCommonFindToggles){this.regex=this._register(new k.RegexToggle({appendTitle:f,isChecked:!1,...t.toggleStyles})),this._register(this.regex.onChange(g=>{this._onDidOptionChange.fire(g),!g&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()})),this._register(this.regex.onKeyDown(g=>{this._onRegexKeyDown.fire(g)})),this.wholeWords=this._register(new k.WholeWordsToggle({appendTitle:u,isChecked:!1,...t.toggleStyles})),this._register(this.wholeWords.onChange(g=>{this._onDidOptionChange.fire(g),!g&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()})),this.caseSensitive=this._register(new k.CaseSensitiveToggle({appendTitle:r,isChecked:!1,...t.toggleStyles})),this._register(this.caseSensitive.onChange(g=>{this._onDidOptionChange.fire(g),!g&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()})),this._register(this.caseSensitive.onKeyDown(g=>{this._onCaseSensitiveKeyDown.fire(g)}));const o=[this.caseSensitive.domNode,this.wholeWords.domNode,this.regex.domNode];this.onkeydown(this.domNode,g=>{if(g.equals(15)||g.equals(17)||g.equals(9)){const h=o.indexOf(this.domNode.ownerDocument.activeElement);if(h>=0){let m=-1;g.equals(17)?m=(h+1)%o.length:g.equals(15)&&(h===0?m=o.length-1:m=h-1),g.equals(9)?(o[h].blur(),this.inputBox.focus()):m>=0&&o[m].focus(),L.EventHelper.stop(g,!0)}}})}this.controls=document.createElement(\"div\"),this.controls.className=\"controls\",this.controls.style.display=this.showCommonFindToggles?\"\":\"none\",this.caseSensitive&&this.controls.append(this.caseSensitive.domNode),this.wholeWords&&this.controls.appendChild(this.wholeWords.domNode),this.regex&&this.controls.appendChild(this.regex.domNode),this.setAdditionalToggles(t?.additionalToggles),this.controls&&this.domNode.appendChild(this.controls),i?.appendChild(this.domNode),this._register(L.addDisposableListener(this.inputBox.inputElement,\"compositionstart\",o=>{this.imeSessionInProgress=!0})),this._register(L.addDisposableListener(this.inputBox.inputElement,\"compositionend\",o=>{this.imeSessionInProgress=!1,this._onInput.fire()})),this.onkeydown(this.inputBox.inputElement,o=>this._onKeyDown.fire(o)),this.onkeyup(this.inputBox.inputElement,o=>this._onKeyUp.fire(o)),this.oninput(this.inputBox.inputElement,o=>this._onInput.fire()),this.onmousedown(this.inputBox.inputElement,o=>this._onMouseDown.fire(o))}get onDidChange(){return this.inputBox.onDidChange}layout(i){this.inputBox.layout(),this.updateInputBoxPadding(i.collapsedFindWidget)}enable(){var i,n,t;this.domNode.classList.remove(\"disabled\"),this.inputBox.enable(),(i=this.regex)===null||i===void 0||i.enable(),(n=this.wholeWords)===null||n===void 0||n.enable(),(t=this.caseSensitive)===null||t===void 0||t.enable();for(const r of this.additionalToggles)r.enable()}disable(){var i,n,t;this.domNode.classList.add(\"disabled\"),this.inputBox.disable(),(i=this.regex)===null||i===void 0||i.disable(),(n=this.wholeWords)===null||n===void 0||n.disable(),(t=this.caseSensitive)===null||t===void 0||t.disable();for(const r of this.additionalToggles)r.disable()}setFocusInputOnOptionClick(i){this.fixFocusOnOptionClickEnabled=i}setEnabled(i){i?this.enable():this.disable()}setAdditionalToggles(i){for(const n of this.additionalToggles)n.domNode.remove();this.additionalToggles=[],this.additionalTogglesDisposables.value=new _.DisposableStore;for(const n of i??[])this.additionalTogglesDisposables.value.add(n),this.controls.appendChild(n.domNode),this.additionalTogglesDisposables.value.add(n.onChange(t=>{this._onDidOptionChange.fire(t),!t&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus()})),this.additionalToggles.push(n);this.additionalToggles.length>0&&(this.controls.style.display=\"\"),this.updateInputBoxPadding()}updateInputBoxPadding(i=!1){var n,t,r,u,f,c;i?this.inputBox.paddingRight=0:this.inputBox.paddingRight=((t=(n=this.caseSensitive)===null||n===void 0?void 0:n.width())!==null&&t!==void 0?t:0)+((u=(r=this.wholeWords)===null||r===void 0?void 0:r.width())!==null&&u!==void 0?u:0)+((c=(f=this.regex)===null||f===void 0?void 0:f.width())!==null&&c!==void 0?c:0)+this.additionalToggles.reduce((d,s)=>d+s.width(),0)}getValue(){return this.inputBox.value}setValue(i){this.inputBox.value!==i&&(this.inputBox.value=i)}select(){this.inputBox.select()}focus(){this.inputBox.focus()}getCaseSensitive(){var i,n;return(n=(i=this.caseSensitive)===null||i===void 0?void 0:i.checked)!==null&&n!==void 0?n:!1}setCaseSensitive(i){this.caseSensitive&&(this.caseSensitive.checked=i)}getWholeWords(){var i,n;return(n=(i=this.wholeWords)===null||i===void 0?void 0:i.checked)!==null&&n!==void 0?n:!1}setWholeWords(i){this.wholeWords&&(this.wholeWords.checked=i)}getRegex(){var i,n;return(n=(i=this.regex)===null||i===void 0?void 0:i.checked)!==null&&n!==void 0?n:!1}setRegex(i){this.regex&&(this.regex.checked=i,this.validate())}focusOnCaseSensitive(){var i;(i=this.caseSensitive)===null||i===void 0||i.focus()}highlightFindOptions(){this.domNode.classList.remove(\"highlight-\"+this._lastHighlightFindOptions),this._lastHighlightFindOptions=1-this._lastHighlightFindOptions,this.domNode.classList.add(\"highlight-\"+this._lastHighlightFindOptions)}validate(){this.inputBox.validate()}showMessage(i){this.inputBox.showMessage(i)}clearMessage(){this.inputBox.hideMessage()}}e.FindInput=b}),define(se[598],oe([1,0,7,159,231,76,26,6,569,274]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ReplaceInput=void 0;const v=_.localize(0,null),b=_.localize(1,null);class a extends k.Toggle{constructor(t){super({icon:S.Codicon.preserveCase,title:b+t.appendTitle,isChecked:t.isChecked,inputActiveOptionBorder:t.inputActiveOptionBorder,inputActiveOptionForeground:t.inputActiveOptionForeground,inputActiveOptionBackground:t.inputActiveOptionBackground})}}class i extends E.Widget{constructor(t,r,u,f){super(),this._showOptionButtons=u,this.fixFocusOnOptionClickEnabled=!0,this.cachedOptionsWidth=0,this._onDidOptionChange=this._register(new p.Emitter),this.onDidOptionChange=this._onDidOptionChange.event,this._onKeyDown=this._register(new p.Emitter),this.onKeyDown=this._onKeyDown.event,this._onMouseDown=this._register(new p.Emitter),this._onInput=this._register(new p.Emitter),this._onKeyUp=this._register(new p.Emitter),this._onPreserveCaseKeyDown=this._register(new p.Emitter),this.onPreserveCaseKeyDown=this._onPreserveCaseKeyDown.event,this.contextViewProvider=r,this.placeholder=f.placeholder||\"\",this.validation=f.validation,this.label=f.label||v;const c=f.appendPreserveCaseLabel||\"\",d=f.history||[],s=!!f.flexibleHeight,l=!!f.flexibleWidth,o=f.flexibleMaxHeight;this.domNode=document.createElement(\"div\"),this.domNode.classList.add(\"monaco-findInput\"),this.inputBox=this._register(new y.HistoryInputBox(this.domNode,this.contextViewProvider,{ariaLabel:this.label||\"\",placeholder:this.placeholder||\"\",validationOptions:{validation:this.validation},history:d,showHistoryHint:f.showHistoryHint,flexibleHeight:s,flexibleWidth:l,flexibleMaxHeight:o,inputBoxStyles:f.inputBoxStyles})),this.preserveCase=this._register(new a({appendTitle:c,isChecked:!1,...f.toggleStyles})),this._register(this.preserveCase.onChange(m=>{this._onDidOptionChange.fire(m),!m&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()})),this._register(this.preserveCase.onKeyDown(m=>{this._onPreserveCaseKeyDown.fire(m)})),this._showOptionButtons?this.cachedOptionsWidth=this.preserveCase.width():this.cachedOptionsWidth=0;const g=[this.preserveCase.domNode];this.onkeydown(this.domNode,m=>{if(m.equals(15)||m.equals(17)||m.equals(9)){const C=g.indexOf(this.domNode.ownerDocument.activeElement);if(C>=0){let w=-1;m.equals(17)?w=(C+1)%g.length:m.equals(15)&&(C===0?w=g.length-1:w=C-1),m.equals(9)?(g[C].blur(),this.inputBox.focus()):w>=0&&g[w].focus(),L.EventHelper.stop(m,!0)}}});const h=document.createElement(\"div\");h.className=\"controls\",h.style.display=this._showOptionButtons?\"block\":\"none\",h.appendChild(this.preserveCase.domNode),this.domNode.appendChild(h),t?.appendChild(this.domNode),this.onkeydown(this.inputBox.inputElement,m=>this._onKeyDown.fire(m)),this.onkeyup(this.inputBox.inputElement,m=>this._onKeyUp.fire(m)),this.oninput(this.inputBox.inputElement,m=>this._onInput.fire()),this.onmousedown(this.inputBox.inputElement,m=>this._onMouseDown.fire(m))}enable(){this.domNode.classList.remove(\"disabled\"),this.inputBox.enable(),this.preserveCase.enable()}disable(){this.domNode.classList.add(\"disabled\"),this.inputBox.disable(),this.preserveCase.disable()}setEnabled(t){t?this.enable():this.disable()}select(){this.inputBox.select()}focus(){this.inputBox.focus()}getPreserveCase(){return this.preserveCase.checked}setPreserveCase(t){this.preserveCase.checked=t}focusOnPreserve(){this.preserveCase.focus()}validate(){var t;(t=this.inputBox)===null||t===void 0||t.validate()}set width(t){this.inputBox.paddingRight=this.cachedOptionsWidth,this.domNode.style.width=t+\"px\"}dispose(){super.dispose()}}e.ReplaceInput=i}),define(se[599],oe([1,0,54,63,7,46,67,78,135,318,77,42,14,26,28,126,2,17,11]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.formatRule=e.cleanMnemonic=e.Menu=e.Direction=e.MENU_ESCAPED_MNEMONIC_REGEX=e.MENU_MNEMONIC_REGEX=void 0,e.MENU_MNEMONIC_REGEX=/\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/,e.MENU_ESCAPED_MNEMONIC_REGEX=/(&amp;)?(&amp;)([^\\s&])/g;var d;(function(w){w[w.Right=0]=\"Right\",w[w.Left=1]=\"Left\"})(d||(e.Direction=d={}));class s extends p.ActionBar{constructor(D,I,T,A){D.classList.add(\"monaco-menu-container\"),D.setAttribute(\"role\",\"presentation\");const P=document.createElement(\"div\");P.classList.add(\"monaco-menu\"),P.setAttribute(\"role\",\"presentation\"),super(P,{orientation:1,actionViewItemProvider:x=>this.doGetActionViewItem(x,T,N),context:T.context,actionRunner:T.actionRunner,ariaLabel:T.ariaLabel,ariaRole:\"menu\",focusOnlyEnabledItems:!0,triggerKeys:{keys:[3,...f.isMacintosh||f.isLinux?[10]:[]],keyDown:!0}}),this.menuStyles=A,this.menuElement=P,this.actionsList.tabIndex=0,this.initializeOrUpdateStyleSheet(D,A),this._register(k.Gesture.addTarget(P)),this._register((0,y.addDisposableListener)(P,y.EventType.KEY_DOWN,x=>{new E.StandardKeyboardEvent(x).equals(2)&&x.preventDefault()})),T.enableMnemonics&&this._register((0,y.addDisposableListener)(P,y.EventType.KEY_DOWN,x=>{const O=x.key.toLocaleLowerCase();if(this.mnemonics.has(O)){y.EventHelper.stop(x,!0);const B=this.mnemonics.get(O);if(B.length===1&&(B[0]instanceof o&&B[0].container&&this.focusItemByElement(B[0].container),B[0].onClick(x)),B.length>1){const W=B.shift();W&&W.container&&(this.focusItemByElement(W.container),B.push(W)),this.mnemonics.set(O,B)}}})),f.isLinux&&this._register((0,y.addDisposableListener)(P,y.EventType.KEY_DOWN,x=>{const O=new E.StandardKeyboardEvent(x);O.equals(14)||O.equals(11)?(this.focusedItem=this.viewItems.length-1,this.focusNext(),y.EventHelper.stop(x,!0)):(O.equals(13)||O.equals(12))&&(this.focusedItem=0,this.focusPrevious(),y.EventHelper.stop(x,!0))})),this._register((0,y.addDisposableListener)(this.domNode,y.EventType.MOUSE_OUT,x=>{const O=x.relatedTarget;(0,y.isAncestor)(O,this.domNode)||(this.focusedItem=void 0,this.updateFocus(),x.stopPropagation())})),this._register((0,y.addDisposableListener)(this.actionsList,y.EventType.MOUSE_OVER,x=>{let O=x.target;if(!(!O||!(0,y.isAncestor)(O,this.actionsList)||O===this.actionsList)){for(;O.parentElement!==this.actionsList&&O.parentElement!==null;)O=O.parentElement;if(O.classList.contains(\"action-item\")){const B=this.focusedItem;this.setFocusedItem(O),B!==this.focusedItem&&this.updateFocus()}}})),this._register(k.Gesture.addTarget(this.actionsList)),this._register((0,y.addDisposableListener)(this.actionsList,k.EventType.Tap,x=>{let O=x.initialTarget;if(!(!O||!(0,y.isAncestor)(O,this.actionsList)||O===this.actionsList)){for(;O.parentElement!==this.actionsList&&O.parentElement!==null;)O=O.parentElement;if(O.classList.contains(\"action-item\")){const B=this.focusedItem;this.setFocusedItem(O),B!==this.focusedItem&&this.updateFocus()}}}));const N={parent:this};this.mnemonics=new Map,this.scrollableElement=this._register(new b.DomScrollableElement(P,{alwaysConsumeMouseWheel:!0,horizontal:2,vertical:3,verticalScrollbarSize:7,handleMouseWheel:!0,useShadows:!0}));const M=this.scrollableElement.getDomNode();M.style.position=\"\",this.styleScrollElement(M,A),this._register((0,y.addDisposableListener)(P,k.EventType.Change,x=>{y.EventHelper.stop(x,!0);const O=this.scrollableElement.getScrollPosition().scrollTop;this.scrollableElement.setScrollPosition({scrollTop:O-x.translationY})})),this._register((0,y.addDisposableListener)(M,y.EventType.MOUSE_UP,x=>{x.preventDefault()}));const R=(0,y.getWindow)(D);P.style.maxHeight=`${Math.max(10,R.innerHeight-D.getBoundingClientRect().top-35)}px`,I=I.filter((x,O)=>{var B;return!((B=T.submenuIds)===null||B===void 0)&&B.has(x.id)?(console.warn(`Found submenu cycle: ${x.id}`),!1):!(x instanceof a.Separator&&(O===I.length-1||O===0||I[O-1]instanceof a.Separator))}),this.push(I,{icon:!0,label:!0,isMenu:!0}),D.appendChild(this.scrollableElement.getDomNode()),this.scrollableElement.scanDomNode(),this.viewItems.filter(x=>!(x instanceof g)).forEach((x,O,B)=>{x.updatePositionInSet(O+1,B.length)})}initializeOrUpdateStyleSheet(D,I){this.styleSheet||((0,y.isInShadowDOM)(D)?this.styleSheet=(0,y.createStyleSheet)(D):(s.globalStyleSheet||(s.globalStyleSheet=(0,y.createStyleSheet)()),this.styleSheet=s.globalStyleSheet)),this.styleSheet.textContent=C(I,(0,y.isInShadowDOM)(D))}styleScrollElement(D,I){var T,A;const P=(T=I.foregroundColor)!==null&&T!==void 0?T:\"\",N=(A=I.backgroundColor)!==null&&A!==void 0?A:\"\",M=I.borderColor?`1px solid ${I.borderColor}`:\"\",R=\"5px\",x=I.shadowColor?`0 2px 8px ${I.shadowColor}`:\"\";D.style.outline=M,D.style.borderRadius=R,D.style.color=P,D.style.backgroundColor=N,D.style.boxShadow=x}getContainer(){return this.scrollableElement.getDomNode()}get onScroll(){return this.scrollableElement.onScroll}focusItemByElement(D){const I=this.focusedItem;this.setFocusedItem(D),I!==this.focusedItem&&this.updateFocus()}setFocusedItem(D){for(let I=0;I<this.actionsList.children.length;I++){const T=this.actionsList.children[I];if(D===T){this.focusedItem=I;break}}}updateFocus(D){super.updateFocus(D,!0,!0),typeof this.focusedItem<\"u\"&&this.scrollableElement.setScrollPosition({scrollTop:Math.round(this.menuElement.scrollTop)})}doGetActionViewItem(D,I,T){if(D instanceof a.Separator)return new g(I.context,D,{icon:!0},this.menuStyles);if(D instanceof a.SubmenuAction){const A=new o(D,D.actions,T,{...I,submenuIds:new Set([...I.submenuIds||[],D.id])},this.menuStyles);if(I.enableMnemonics){const P=A.getMnemonic();if(P&&A.isEnabled()){let N=[];this.mnemonics.has(P)&&(N=this.mnemonics.get(P)),N.push(A),this.mnemonics.set(P,N)}}return A}else{const A={enableMnemonics:I.enableMnemonics,useEventAsContext:I.useEventAsContext};if(I.getKeyBinding){const N=I.getKeyBinding(D);if(N){const M=N.getLabel();M&&(A.keybinding=M)}}const P=new l(I.context,D,A,this.menuStyles);if(I.enableMnemonics){const N=P.getMnemonic();if(N&&P.isEnabled()){let M=[];this.mnemonics.has(N)&&(M=this.mnemonics.get(N)),M.push(P),this.mnemonics.set(N,M)}}return P}}}e.Menu=s;class l extends _.BaseActionViewItem{constructor(D,I,T,A){if(T.isMenu=!0,super(I,I,T),this.menuStyle=A,this.options=T,this.options.icon=T.icon!==void 0?T.icon:!1,this.options.label=T.label!==void 0?T.label:!0,this.cssClass=\"\",this.options.label&&T.enableMnemonics){const P=this.action.label;if(P){const N=e.MENU_MNEMONIC_REGEX.exec(P);N&&(this.mnemonic=(N[1]?N[1]:N[3]).toLocaleLowerCase())}}this.runOnceToEnableMouseUp=new i.RunOnceScheduler(()=>{this.element&&(this._register((0,y.addDisposableListener)(this.element,y.EventType.MOUSE_UP,P=>{if(y.EventHelper.stop(P,!0),L.isFirefox){if(new S.StandardMouseEvent((0,y.getWindow)(this.element),P).rightButton)return;this.onClick(P)}else setTimeout(()=>{this.onClick(P)},0)})),this._register((0,y.addDisposableListener)(this.element,y.EventType.CONTEXT_MENU,P=>{y.EventHelper.stop(P,!0)})))},100),this._register(this.runOnceToEnableMouseUp)}render(D){super.render(D),this.element&&(this.container=D,this.item=(0,y.append)(this.element,(0,y.$)(\"a.action-menu-item\")),this._action.id===a.Separator.ID?this.item.setAttribute(\"role\",\"presentation\"):(this.item.setAttribute(\"role\",\"menuitem\"),this.mnemonic&&this.item.setAttribute(\"aria-keyshortcuts\",`${this.mnemonic}`)),this.check=(0,y.append)(this.item,(0,y.$)(\"span.menu-item-check\"+t.ThemeIcon.asCSSSelector(n.Codicon.menuSelection))),this.check.setAttribute(\"role\",\"none\"),this.label=(0,y.append)(this.item,(0,y.$)(\"span.action-label\")),this.options.label&&this.options.keybinding&&((0,y.append)(this.item,(0,y.$)(\"span.keybinding\")).textContent=this.options.keybinding),this.runOnceToEnableMouseUp.schedule(),this.updateClass(),this.updateLabel(),this.updateTooltip(),this.updateEnabled(),this.updateChecked(),this.applyStyle())}blur(){super.blur(),this.applyStyle()}focus(){var D;super.focus(),(D=this.item)===null||D===void 0||D.focus(),this.applyStyle()}updatePositionInSet(D,I){this.item&&(this.item.setAttribute(\"aria-posinset\",`${D}`),this.item.setAttribute(\"aria-setsize\",`${I}`))}updateLabel(){var D;if(this.label&&this.options.label){(0,y.clearNode)(this.label);let I=(0,r.stripIcons)(this.action.label);if(I){const T=h(I);this.options.enableMnemonics||(I=T),this.label.setAttribute(\"aria-label\",T.replace(/&&/g,\"&\"));const A=e.MENU_MNEMONIC_REGEX.exec(I);if(A){I=c.escape(I),e.MENU_ESCAPED_MNEMONIC_REGEX.lastIndex=0;let P=e.MENU_ESCAPED_MNEMONIC_REGEX.exec(I);for(;P&&P[1];)P=e.MENU_ESCAPED_MNEMONIC_REGEX.exec(I);const N=M=>M.replace(/&amp;&amp;/g,\"&amp;\");P?this.label.append(c.ltrim(N(I.substr(0,P.index)),\" \"),(0,y.$)(\"u\",{\"aria-hidden\":\"true\"},P[3]),c.rtrim(N(I.substr(P.index+P[0].length)),\" \")):this.label.innerText=N(I).trim(),(D=this.item)===null||D===void 0||D.setAttribute(\"aria-keyshortcuts\",(A[1]?A[1]:A[3]).toLocaleLowerCase())}else this.label.innerText=I.replace(/&&/g,\"&\").trim()}}}updateTooltip(){}updateClass(){this.cssClass&&this.item&&this.item.classList.remove(...this.cssClass.split(\" \")),this.options.icon&&this.label?(this.cssClass=this.action.class||\"\",this.label.classList.add(\"icon\"),this.cssClass&&this.label.classList.add(...this.cssClass.split(\" \")),this.updateEnabled()):this.label&&this.label.classList.remove(\"icon\")}updateEnabled(){this.action.enabled?(this.element&&(this.element.classList.remove(\"disabled\"),this.element.removeAttribute(\"aria-disabled\")),this.item&&(this.item.classList.remove(\"disabled\"),this.item.removeAttribute(\"aria-disabled\"),this.item.tabIndex=0)):(this.element&&(this.element.classList.add(\"disabled\"),this.element.setAttribute(\"aria-disabled\",\"true\")),this.item&&(this.item.classList.add(\"disabled\"),this.item.setAttribute(\"aria-disabled\",\"true\")))}updateChecked(){if(!this.item)return;const D=this.action.checked;this.item.classList.toggle(\"checked\",!!D),D!==void 0?(this.item.setAttribute(\"role\",\"menuitemcheckbox\"),this.item.setAttribute(\"aria-checked\",D?\"true\":\"false\")):(this.item.setAttribute(\"role\",\"menuitem\"),this.item.setAttribute(\"aria-checked\",\"\"))}getMnemonic(){return this.mnemonic}applyStyle(){const D=this.element&&this.element.classList.contains(\"focused\"),I=D&&this.menuStyle.selectionForegroundColor?this.menuStyle.selectionForegroundColor:this.menuStyle.foregroundColor,T=D&&this.menuStyle.selectionBackgroundColor?this.menuStyle.selectionBackgroundColor:void 0,A=D&&this.menuStyle.selectionBorderColor?`1px solid ${this.menuStyle.selectionBorderColor}`:\"\",P=D&&this.menuStyle.selectionBorderColor?\"-1px\":\"\";this.item&&(this.item.style.color=I??\"\",this.item.style.backgroundColor=T??\"\",this.item.style.outline=A,this.item.style.outlineOffset=P),this.check&&(this.check.style.color=I??\"\")}}class o extends l{constructor(D,I,T,A,P){super(D,D,A,P),this.submenuActions=I,this.parentData=T,this.submenuOptions=A,this.mysubmenu=null,this.submenuDisposables=this._register(new u.DisposableStore),this.mouseOver=!1,this.expandDirection=A&&A.expandDirection!==void 0?A.expandDirection:d.Right,this.showScheduler=new i.RunOnceScheduler(()=>{this.mouseOver&&(this.cleanupExistingSubmenu(!1),this.createSubmenu(!1))},250),this.hideScheduler=new i.RunOnceScheduler(()=>{this.element&&!(0,y.isAncestor)((0,y.getActiveElement)(),this.element)&&this.parentData.submenu===this.mysubmenu&&(this.parentData.parent.focus(!1),this.cleanupExistingSubmenu(!0))},750)}render(D){super.render(D),this.element&&(this.item&&(this.item.classList.add(\"monaco-submenu-item\"),this.item.tabIndex=0,this.item.setAttribute(\"aria-haspopup\",\"true\"),this.updateAriaExpanded(\"false\"),this.submenuIndicator=(0,y.append)(this.item,(0,y.$)(\"span.submenu-indicator\"+t.ThemeIcon.asCSSSelector(n.Codicon.menuSubmenu))),this.submenuIndicator.setAttribute(\"aria-hidden\",\"true\")),this._register((0,y.addDisposableListener)(this.element,y.EventType.KEY_UP,I=>{const T=new E.StandardKeyboardEvent(I);(T.equals(17)||T.equals(3))&&(y.EventHelper.stop(I,!0),this.createSubmenu(!0))})),this._register((0,y.addDisposableListener)(this.element,y.EventType.KEY_DOWN,I=>{const T=new E.StandardKeyboardEvent(I);(0,y.getActiveElement)()===this.item&&(T.equals(17)||T.equals(3))&&y.EventHelper.stop(I,!0)})),this._register((0,y.addDisposableListener)(this.element,y.EventType.MOUSE_OVER,I=>{this.mouseOver||(this.mouseOver=!0,this.showScheduler.schedule())})),this._register((0,y.addDisposableListener)(this.element,y.EventType.MOUSE_LEAVE,I=>{this.mouseOver=!1})),this._register((0,y.addDisposableListener)(this.element,y.EventType.FOCUS_OUT,I=>{this.element&&!(0,y.isAncestor)((0,y.getActiveElement)(),this.element)&&this.hideScheduler.schedule()})),this._register(this.parentData.parent.onScroll(()=>{this.parentData.submenu===this.mysubmenu&&(this.parentData.parent.focus(!1),this.cleanupExistingSubmenu(!0))})))}updateEnabled(){}onClick(D){y.EventHelper.stop(D,!0),this.cleanupExistingSubmenu(!1),this.createSubmenu(!0)}cleanupExistingSubmenu(D){if(this.parentData.submenu&&(D||this.parentData.submenu!==this.mysubmenu)){try{this.parentData.submenu.dispose()}catch{}this.parentData.submenu=void 0,this.updateAriaExpanded(\"false\"),this.submenuContainer&&(this.submenuDisposables.clear(),this.submenuContainer=void 0)}}calculateSubmenuMenuLayout(D,I,T,A){const P={top:0,left:0};return P.left=(0,v.layout)(D.width,I.width,{position:A===d.Right?0:1,offset:T.left,size:T.width}),P.left>=T.left&&P.left<T.left+T.width&&(T.left+10+I.width<=D.width&&(P.left=T.left+10),T.top+=10,T.height=0),P.top=(0,v.layout)(D.height,I.height,{position:0,offset:T.top,size:0}),P.top+I.height===T.top&&P.top+T.height+I.height<=D.height&&(P.top+=T.height),P}createSubmenu(D=!0){if(this.element)if(this.parentData.submenu)this.parentData.submenu.focus(!1);else{this.updateAriaExpanded(\"true\"),this.submenuContainer=(0,y.append)(this.element,(0,y.$)(\"div.monaco-submenu\")),this.submenuContainer.classList.add(\"menubar-menu-items-holder\",\"context-view\");const I=(0,y.getWindow)(this.parentData.parent.domNode).getComputedStyle(this.parentData.parent.domNode),T=parseFloat(I.paddingTop||\"0\")||0;this.submenuContainer.style.zIndex=\"1\",this.submenuContainer.style.position=\"fixed\",this.submenuContainer.style.top=\"0\",this.submenuContainer.style.left=\"0\",this.parentData.submenu=new s(this.submenuContainer,this.submenuActions.length?this.submenuActions:[new a.EmptySubmenuAction],this.submenuOptions,this.menuStyle);const A=this.element.getBoundingClientRect(),P={top:A.top-T,left:A.left,height:A.height+2*T,width:A.width},N=this.submenuContainer.getBoundingClientRect(),M=(0,y.getWindow)(this.element),{top:R,left:x}=this.calculateSubmenuMenuLayout(new y.Dimension(M.innerWidth,M.innerHeight),y.Dimension.lift(N),P,this.expandDirection);this.submenuContainer.style.left=`${x-N.left}px`,this.submenuContainer.style.top=`${R-N.top}px`,this.submenuDisposables.add((0,y.addDisposableListener)(this.submenuContainer,y.EventType.KEY_UP,O=>{new E.StandardKeyboardEvent(O).equals(15)&&(y.EventHelper.stop(O,!0),this.parentData.parent.focus(),this.cleanupExistingSubmenu(!0))})),this.submenuDisposables.add((0,y.addDisposableListener)(this.submenuContainer,y.EventType.KEY_DOWN,O=>{new E.StandardKeyboardEvent(O).equals(15)&&y.EventHelper.stop(O,!0)})),this.submenuDisposables.add(this.parentData.submenu.onDidCancel(()=>{this.parentData.parent.focus(),this.cleanupExistingSubmenu(!0)})),this.parentData.submenu.focus(D),this.mysubmenu=this.parentData.submenu}}updateAriaExpanded(D){var I;this.item&&((I=this.item)===null||I===void 0||I.setAttribute(\"aria-expanded\",D))}applyStyle(){super.applyStyle();const I=this.element&&this.element.classList.contains(\"focused\")&&this.menuStyle.selectionForegroundColor?this.menuStyle.selectionForegroundColor:this.menuStyle.foregroundColor;this.submenuIndicator&&(this.submenuIndicator.style.color=I??\"\")}dispose(){super.dispose(),this.hideScheduler.dispose(),this.mysubmenu&&(this.mysubmenu.dispose(),this.mysubmenu=null),this.submenuContainer&&(this.submenuContainer=void 0)}}class g extends _.ActionViewItem{constructor(D,I,T,A){super(D,I,T),this.menuStyles=A}render(D){super.render(D),this.label&&(this.label.style.borderBottomColor=this.menuStyles.separatorColor?`${this.menuStyles.separatorColor}`:\"\")}}function h(w){const D=e.MENU_MNEMONIC_REGEX,I=D.exec(w);if(!I)return w;const T=!I[1];return w.replace(D,T?\"$2$3\":\"\").trim()}e.cleanMnemonic=h;function m(w){const D=(0,n.getCodiconFontCharacters)()[w.id];return`.codicon-${w.id}:before { content: '\\\\${D.toString(16)}'; }`}e.formatRule=m;function C(w,D){let I=`\n.monaco-menu {\n\tfont-size: 13px;\n\tborder-radius: 5px;\n\tmin-width: 160px;\n}\n\n${m(n.Codicon.menuSelection)}\n${m(n.Codicon.menuSubmenu)}\n\n.monaco-menu .monaco-action-bar {\n\ttext-align: right;\n\toverflow: hidden;\n\twhite-space: nowrap;\n}\n\n.monaco-menu .monaco-action-bar .actions-container {\n\tdisplay: flex;\n\tmargin: 0 auto;\n\tpadding: 0;\n\twidth: 100%;\n\tjustify-content: flex-end;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar.reverse .actions-container {\n\tflex-direction: row-reverse;\n}\n\n.monaco-menu .monaco-action-bar .action-item {\n\tcursor: pointer;\n\tdisplay: inline-block;\n\ttransition: transform 50ms ease;\n\tposition: relative;  /* DO NOT REMOVE - this is the key to preventing the ghosting icon bug in Chrome 42 */\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled {\n\tcursor: default;\n}\n\n.monaco-menu .monaco-action-bar.animated .action-item.active {\n\ttransform: scale(1.272019649, 1.272019649); /* 1.272019649 = \\u221A\\u03C6 */\n}\n\n.monaco-menu .monaco-action-bar .action-item .icon,\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar .action-label {\n\tfont-size: 11px;\n\tmargin-right: 4px;\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label,\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label:hover {\n\tcolor: var(--vscode-disabledForeground);\n}\n\n/* Vertical actions */\n\n.monaco-menu .monaco-action-bar.vertical {\n\ttext-align: left;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tdisplay: block;\n\tborder-bottom: 1px solid var(--vscode-menu-separatorBackground);\n\tpadding-top: 1px;\n\tpadding: 30px;\n}\n\n.monaco-menu .secondary-actions .monaco-action-bar .action-label {\n\tmargin-left: 6px;\n}\n\n/* Action Items */\n.monaco-menu .monaco-action-bar .action-item.select-container {\n\toverflow: hidden; /* somehow the dropdown overflows its container, we prevent it here to not push */\n\tflex: 1;\n\tmax-width: 170px;\n\tmin-width: 60px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-right: 10px;\n}\n\n.monaco-menu .monaco-action-bar.vertical {\n\tmargin-left: 0;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tpadding: 0;\n\ttransform: none;\n\tdisplay: flex;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.active {\n\ttransform: none;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\tflex: 1 1 auto;\n\tdisplay: flex;\n\theight: 2em;\n\talign-items: center;\n\tposition: relative;\n\tmargin: 0 4px;\n\tborder-radius: 4px;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item:hover .keybinding,\n.monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .keybinding {\n\topacity: unset;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label {\n\tflex: 1 1 auto;\n\ttext-decoration: none;\n\tpadding: 0 1em;\n\tbackground: none;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .keybinding,\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tdisplay: inline-block;\n\tflex: 2 1 auto;\n\tpadding: 0 1em;\n\ttext-align: right;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon {\n\tfont-size: 16px !important;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon::before {\n\tmargin-left: auto;\n\tmargin-right: -20px;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .keybinding,\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .submenu-indicator {\n\topacity: 0.4;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator) {\n\tdisplay: inline-block;\n\tbox-sizing: border-box;\n\tmargin: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tposition: static;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item .monaco-submenu {\n\tposition: absolute;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\twidth: 100%;\n\theight: 0px !important;\n\topacity: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator.text {\n\tpadding: 0.7em 1em 0.1em 1em;\n\tfont-weight: bold;\n\topacity: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:hover {\n\tcolor: inherit;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tposition: absolute;\n\tvisibility: hidden;\n\twidth: 1em;\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item.checked .menu-item-check {\n\tvisibility: visible;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n/* Context Menu */\n\n.context-view.monaco-menu-container {\n\toutline: 0;\n\tborder: none;\n\tanimation: fadeIn 0.083s linear;\n\t-webkit-app-region: no-drag;\n}\n\n.context-view.monaco-menu-container :focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical:focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical :focus {\n\toutline: 0;\n}\n\n.hc-black .context-view.monaco-menu-container,\n.hc-light .context-view.monaco-menu-container,\n:host-context(.hc-black) .context-view.monaco-menu-container,\n:host-context(.hc-light) .context-view.monaco-menu-container {\n\tbox-shadow: none;\n}\n\n.hc-black .monaco-menu .monaco-action-bar.vertical .action-item.focused,\n.hc-light .monaco-menu .monaco-action-bar.vertical .action-item.focused,\n:host-context(.hc-black) .monaco-menu .monaco-action-bar.vertical .action-item.focused,\n:host-context(.hc-light) .monaco-menu .monaco-action-bar.vertical .action-item.focused {\n\tbackground: none;\n}\n\n/* Vertical Action Bar Styles */\n\n.monaco-menu .monaco-action-bar.vertical {\n\tpadding: 4px 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\theight: 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator),\n.monaco-menu .monaco-action-bar.vertical .keybinding {\n\tfont-size: inherit;\n\tpadding: 0 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tfont-size: inherit;\n\twidth: 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tfont-size: inherit;\n\tmargin: 5px 0 !important;\n\tpadding: 0;\n\tborder-radius: 0;\n}\n\n.linux .monaco-menu .monaco-action-bar.vertical .action-label.separator,\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tfont-size: 60%;\n\tpadding: 0 1.8em;\n}\n\n.linux .monaco-menu .monaco-action-bar.vertical .submenu-indicator,\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n\tmask-size: 10px 10px;\n\t-webkit-mask-size: 10px 10px;\n}\n\n.monaco-menu .action-item {\n\tcursor: default;\n}`;if(D){I+=`\n\t\t\t/* Arrows */\n\t\t\t.monaco-scrollable-element > .scrollbar > .scra {\n\t\t\t\tcursor: pointer;\n\t\t\t\tfont-size: 11px !important;\n\t\t\t}\n\n\t\t\t.monaco-scrollable-element > .visible {\n\t\t\t\topacity: 1;\n\n\t\t\t\t/* Background rule added for IE9 - to allow clicks on dom node */\n\t\t\t\tbackground:rgba(0,0,0,0);\n\n\t\t\t\ttransition: opacity 100ms linear;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .invisible {\n\t\t\t\topacity: 0;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .invisible.fade {\n\t\t\t\ttransition: opacity 800ms linear;\n\t\t\t}\n\n\t\t\t/* Scrollable Content Inset Shadow */\n\t\t\t.monaco-scrollable-element > .shadow {\n\t\t\t\tposition: absolute;\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .shadow.top {\n\t\t\t\tdisplay: block;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 3px;\n\t\t\t\theight: 3px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .shadow.left {\n\t\t\t\tdisplay: block;\n\t\t\t\ttop: 3px;\n\t\t\t\tleft: 0;\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 3px;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .shadow.top-left-corner {\n\t\t\t\tdisplay: block;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\theight: 3px;\n\t\t\t\twidth: 3px;\n\t\t\t}\n\t\t`;const T=w.scrollbarShadow;T&&(I+=`\n\t\t\t\t.monaco-scrollable-element > .shadow.top {\n\t\t\t\t\tbox-shadow: ${T} 0 6px 6px -6px inset;\n\t\t\t\t}\n\n\t\t\t\t.monaco-scrollable-element > .shadow.left {\n\t\t\t\t\tbox-shadow: ${T} 6px 0 6px -6px inset;\n\t\t\t\t}\n\n\t\t\t\t.monaco-scrollable-element > .shadow.top.left {\n\t\t\t\t\tbox-shadow: ${T} 6px 6px 6px -6px inset;\n\t\t\t\t}\n\t\t\t`);const A=w.scrollbarSliderBackground;A&&(I+=`\n\t\t\t\t.monaco-scrollable-element > .scrollbar > .slider {\n\t\t\t\t\tbackground: ${A};\n\t\t\t\t}\n\t\t\t`);const P=w.scrollbarSliderHoverBackground;P&&(I+=`\n\t\t\t\t.monaco-scrollable-element > .scrollbar > .slider:hover {\n\t\t\t\t\tbackground: ${P};\n\t\t\t\t}\n\t\t\t`);const N=w.scrollbarSliderActiveBackground;N&&(I+=`\n\t\t\t\t.monaco-scrollable-element > .scrollbar > .slider.active {\n\t\t\t\t\tbackground: ${N};\n\t\t\t\t}\n\t\t\t`)}return I}}),define(se[600],oe([1,0,78,325,42,26,28,6,2,575,427]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ToggleMenuAction=e.ToolBar=void 0;class b extends _.Disposable{constructor(n,t,r={orientation:0}){super(),this.submenuActionViewItems=[],this.hasSecondaryActions=!1,this._onDidChangeDropdownVisibility=this._register(new p.EventMultiplexer),this.onDidChangeDropdownVisibility=this._onDidChangeDropdownVisibility.event,this.disposables=this._register(new _.DisposableStore),this.options=r,this.lookupKeybindings=typeof this.options.getKeyBinding==\"function\",this.toggleMenuAction=this._register(new a(()=>{var u;return(u=this.toggleMenuActionViewItem)===null||u===void 0?void 0:u.show()},r.toggleMenuTitle)),this.element=document.createElement(\"div\"),this.element.className=\"monaco-toolbar\",n.appendChild(this.element),this.actionBar=this._register(new L.ActionBar(this.element,{orientation:r.orientation,ariaLabel:r.ariaLabel,actionRunner:r.actionRunner,allowContextMenu:r.allowContextMenu,highlightToggledItems:r.highlightToggledItems,actionViewItemProvider:(u,f)=>{var c;if(u.id===a.ID)return this.toggleMenuActionViewItem=new k.DropdownMenuActionViewItem(u,u.menuActions,t,{actionViewItemProvider:this.options.actionViewItemProvider,actionRunner:this.actionRunner,keybindingProvider:this.options.getKeyBinding,classNames:S.ThemeIcon.asClassNameArray((c=r.moreIcon)!==null&&c!==void 0?c:E.Codicon.toolBarMore),anchorAlignmentProvider:this.options.anchorAlignmentProvider,menuAsChild:!!this.options.renderDropdownAsChildElement,skipTelemetry:this.options.skipTelemetry,isMenu:!0}),this.toggleMenuActionViewItem.setActionContext(this.actionBar.context),this.disposables.add(this._onDidChangeDropdownVisibility.add(this.toggleMenuActionViewItem.onDidChangeVisibility)),this.toggleMenuActionViewItem;if(r.actionViewItemProvider){const d=r.actionViewItemProvider(u,f);if(d)return d}if(u instanceof y.SubmenuAction){const d=new k.DropdownMenuActionViewItem(u,u.actions,t,{actionViewItemProvider:this.options.actionViewItemProvider,actionRunner:this.actionRunner,keybindingProvider:this.options.getKeyBinding,classNames:u.class,anchorAlignmentProvider:this.options.anchorAlignmentProvider,menuAsChild:!!this.options.renderDropdownAsChildElement,skipTelemetry:this.options.skipTelemetry});return d.setActionContext(this.actionBar.context),this.submenuActionViewItems.push(d),this.disposables.add(this._onDidChangeDropdownVisibility.add(d.onDidChangeVisibility)),d}}}))}set actionRunner(n){this.actionBar.actionRunner=n}get actionRunner(){return this.actionBar.actionRunner}getElement(){return this.element}getItemAction(n){return this.actionBar.getAction(n)}setActions(n,t){this.clear();const r=n?n.slice(0):[];this.hasSecondaryActions=!!(t&&t.length>0),this.hasSecondaryActions&&t&&(this.toggleMenuAction.menuActions=t.slice(0),r.push(this.toggleMenuAction)),r.forEach(u=>{this.actionBar.push(u,{icon:!0,label:!1,keybinding:this.getKeybindingLabel(u)})})}getKeybindingLabel(n){var t,r,u;const f=this.lookupKeybindings?(r=(t=this.options).getKeyBinding)===null||r===void 0?void 0:r.call(t,n):void 0;return(u=f?.getLabel())!==null&&u!==void 0?u:void 0}clear(){this.submenuActionViewItems=[],this.disposables.clear(),this.actionBar.clear()}dispose(){this.clear(),this.disposables.dispose(),super.dispose()}}e.ToolBar=b;class a extends y.Action{constructor(n,t){t=t||v.localize(0,null),super(a.ID,t,void 0,!0),this._menuActions=[],this.toggleDropdownMenu=n}async run(){this.toggleDropdownMenu()}get menuActions(){return this._menuActions}set menuActions(n){this._menuActions=n}}e.ToggleMenuAction=a,a.ID=\"toolbar.toggle.more\"}),define(se[187],oe([1,0,7,84,46,78,232,231,228,119,159,220,143,42,13,14,26,28,53,6,71,2,145,20,576,428]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractTree=e.TreeFindMatchType=e.TreeFindMode=e.FuzzyToggle=e.ModeToggle=e.TreeRenderer=e.RenderIndentGuides=e.ComposedTreeDelegate=void 0;class m extends _.ElementsDragAndDropData{constructor(U){super(U.elements.map(G=>G.element)),this.data=U}}function C(X){return X instanceof _.ElementsDragAndDropData?new m(X):X}class w{constructor(U,G){this.modelProvider=U,this.dnd=G,this.autoExpandDisposable=l.Disposable.None,this.disposables=new l.DisposableStore}getDragURI(U){return this.dnd.getDragURI(U.element)}getDragLabel(U,G){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(U.map(z=>z.element),G)}onDragStart(U,G){var z,H;(H=(z=this.dnd).onDragStart)===null||H===void 0||H.call(z,C(U),G)}onDragOver(U,G,z,H,Y,j=!0){const Z=this.dnd.onDragOver(C(U),G&&G.element,z,H,Y),ee=this.autoExpandNode!==G;if(ee&&(this.autoExpandDisposable.dispose(),this.autoExpandNode=G),typeof G>\"u\")return Z;if(ee&&typeof Z!=\"boolean\"&&Z.autoExpand&&(this.autoExpandDisposable=(0,r.disposableTimeout)(()=>{const ve=this.modelProvider(),Ce=ve.getNodeLocation(G);ve.isCollapsed(Ce)&&ve.setCollapsed(Ce,!1),this.autoExpandNode=void 0},500,this.disposables)),typeof Z==\"boolean\"||!Z.accept||typeof Z.bubble>\"u\"||Z.feedback){if(!j){const ve=typeof Z==\"boolean\"?Z:Z.accept,Ce=typeof Z==\"boolean\"?void 0:Z.effect;return{accept:ve,effect:Ce,feedback:[z]}}return Z}if(Z.bubble===1){const ve=this.modelProvider(),Ce=ve.getNodeLocation(G),Se=ve.getParentNodeLocation(Ce),_e=ve.getNode(Se),Ee=Se&&ve.getListIndex(Se);return this.onDragOver(U,_e,Ee,H,Y,!1)}const le=this.modelProvider(),ue=le.getNodeLocation(G),ce=le.getListIndex(ue),pe=le.getListRenderCount(ue);return{...Z,feedback:(0,t.range)(ce,ce+pe)}}drop(U,G,z,H,Y){this.autoExpandDisposable.dispose(),this.autoExpandNode=void 0,this.dnd.drop(C(U),G&&G.element,z,H,Y)}onDragEnd(U){var G,z;(z=(G=this.dnd).onDragEnd)===null||z===void 0||z.call(G,U)}dispose(){this.disposables.dispose(),this.dnd.dispose()}}function D(X,U){return U&&{...U,identityProvider:U.identityProvider&&{getId(G){return U.identityProvider.getId(G.element)}},dnd:U.dnd&&new w(X,U.dnd),multipleSelectionController:U.multipleSelectionController&&{isSelectionSingleChangeEvent(G){return U.multipleSelectionController.isSelectionSingleChangeEvent({...G,element:G.element})},isSelectionRangeChangeEvent(G){return U.multipleSelectionController.isSelectionRangeChangeEvent({...G,element:G.element})}},accessibilityProvider:U.accessibilityProvider&&{...U.accessibilityProvider,getSetSize(G){const z=X(),H=z.getNodeLocation(G),Y=z.getParentNodeLocation(H);return z.getNode(Y).visibleChildrenCount},getPosInSet(G){return G.visibleChildIndex+1},isChecked:U.accessibilityProvider&&U.accessibilityProvider.isChecked?G=>U.accessibilityProvider.isChecked(G.element):void 0,getRole:U.accessibilityProvider&&U.accessibilityProvider.getRole?G=>U.accessibilityProvider.getRole(G.element):()=>\"treeitem\",getAriaLabel(G){return U.accessibilityProvider.getAriaLabel(G.element)},getWidgetAriaLabel(){return U.accessibilityProvider.getWidgetAriaLabel()},getWidgetRole:U.accessibilityProvider&&U.accessibilityProvider.getWidgetRole?()=>U.accessibilityProvider.getWidgetRole():()=>\"tree\",getAriaLevel:U.accessibilityProvider&&U.accessibilityProvider.getAriaLevel?G=>U.accessibilityProvider.getAriaLevel(G.element):G=>G.depth,getActiveDescendantId:U.accessibilityProvider.getActiveDescendantId&&(G=>U.accessibilityProvider.getActiveDescendantId(G.element))},keyboardNavigationLabelProvider:U.keyboardNavigationLabelProvider&&{...U.keyboardNavigationLabelProvider,getKeyboardNavigationLabel(G){return U.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(G.element)}}}}class I{constructor(U){this.delegate=U}getHeight(U){return this.delegate.getHeight(U.element)}getTemplateId(U){return this.delegate.getTemplateId(U.element)}hasDynamicHeight(U){return!!this.delegate.hasDynamicHeight&&this.delegate.hasDynamicHeight(U.element)}setDynamicHeight(U,G){var z,H;(H=(z=this.delegate).setDynamicHeight)===null||H===void 0||H.call(z,U.element,G)}}e.ComposedTreeDelegate=I;var T;(function(X){X.None=\"none\",X.OnHover=\"onHover\",X.Always=\"always\"})(T||(e.RenderIndentGuides=T={}));class A{get elements(){return this._elements}constructor(U,G=[]){this._elements=G,this.disposables=new l.DisposableStore,this.onDidChange=d.Event.forEach(U,z=>this._elements=z,this.disposables)}dispose(){this.disposables.dispose()}}class P{constructor(U,G,z,H,Y,j={}){var Z;this.renderer=U,this.modelProvider=G,this.activeNodes=H,this.renderedIndentGuides=Y,this.renderedElements=new Map,this.renderedNodes=new Map,this.indent=P.DefaultIndent,this.hideTwistiesOfChildlessElements=!1,this.shouldRenderIndentGuides=!1,this.activeIndentNodes=new Set,this.indentGuidesDisposable=l.Disposable.None,this.disposables=new l.DisposableStore,this.templateId=U.templateId,this.updateOptions(j),d.Event.map(z,ee=>ee.node)(this.onDidChangeNodeTwistieState,this,this.disposables),(Z=U.onDidChangeTwistieState)===null||Z===void 0||Z.call(U,this.onDidChangeTwistieState,this,this.disposables)}updateOptions(U={}){if(typeof U.indent<\"u\"){const G=(0,o.clamp)(U.indent,0,40);if(G!==this.indent){this.indent=G;for(const[z,H]of this.renderedNodes)this.renderTreeElement(z,H)}}if(typeof U.renderIndentGuides<\"u\"){const G=U.renderIndentGuides!==T.None;if(G!==this.shouldRenderIndentGuides){this.shouldRenderIndentGuides=G;for(const[z,H]of this.renderedNodes)this._renderIndentGuides(z,H);if(this.indentGuidesDisposable.dispose(),G){const z=new l.DisposableStore;this.activeNodes.onDidChange(this._onDidChangeActiveNodes,this,z),this.indentGuidesDisposable=z,this._onDidChangeActiveNodes(this.activeNodes.elements)}}}typeof U.hideTwistiesOfChildlessElements<\"u\"&&(this.hideTwistiesOfChildlessElements=U.hideTwistiesOfChildlessElements)}renderTemplate(U){const G=(0,L.append)(U,(0,L.$)(\".monaco-tl-row\")),z=(0,L.append)(G,(0,L.$)(\".monaco-tl-indent\")),H=(0,L.append)(G,(0,L.$)(\".monaco-tl-twistie\")),Y=(0,L.append)(G,(0,L.$)(\".monaco-tl-contents\")),j=this.renderer.renderTemplate(Y);return{container:U,indent:z,twistie:H,indentGuidesDisposable:l.Disposable.None,templateData:j}}renderElement(U,G,z,H){this.renderedNodes.set(U,z),this.renderedElements.set(U.element,U),this.renderTreeElement(U,z),this.renderer.renderElement(U,G,z.templateData,H)}disposeElement(U,G,z,H){var Y,j;z.indentGuidesDisposable.dispose(),(j=(Y=this.renderer).disposeElement)===null||j===void 0||j.call(Y,U,G,z.templateData,H),typeof H==\"number\"&&(this.renderedNodes.delete(U),this.renderedElements.delete(U.element))}disposeTemplate(U){this.renderer.disposeTemplate(U.templateData)}onDidChangeTwistieState(U){const G=this.renderedElements.get(U);G&&this.onDidChangeNodeTwistieState(G)}onDidChangeNodeTwistieState(U){const G=this.renderedNodes.get(U);G&&(this._onDidChangeActiveNodes(this.activeNodes.elements),this.renderTreeElement(U,G))}renderTreeElement(U,G){const z=P.DefaultIndent+(U.depth-1)*this.indent;G.twistie.style.paddingLeft=`${z}px`,G.indent.style.width=`${z+this.indent-16}px`,U.collapsible?G.container.setAttribute(\"aria-expanded\",String(!U.collapsed)):G.container.removeAttribute(\"aria-expanded\"),G.twistie.classList.remove(...f.ThemeIcon.asClassNameArray(u.Codicon.treeItemExpanded));let H=!1;this.renderer.renderTwistie&&(H=this.renderer.renderTwistie(U.element,G.twistie)),U.collapsible&&(!this.hideTwistiesOfChildlessElements||U.visibleChildrenCount>0)?(H||G.twistie.classList.add(...f.ThemeIcon.asClassNameArray(u.Codicon.treeItemExpanded)),G.twistie.classList.add(\"collapsible\"),G.twistie.classList.toggle(\"collapsed\",U.collapsed)):G.twistie.classList.remove(\"collapsible\",\"collapsed\"),this._renderIndentGuides(U,G)}_renderIndentGuides(U,G){if((0,L.clearNode)(G.indent),G.indentGuidesDisposable.dispose(),!this.shouldRenderIndentGuides)return;const z=new l.DisposableStore,H=this.modelProvider();for(;;){const Y=H.getNodeLocation(U),j=H.getParentNodeLocation(Y);if(!j)break;const Z=H.getNode(j),ee=(0,L.$)(\".indent-guide\",{style:`width: ${this.indent}px`});this.activeIndentNodes.has(Z)&&ee.classList.add(\"active\"),G.indent.childElementCount===0?G.indent.appendChild(ee):G.indent.insertBefore(ee,G.indent.firstElementChild),this.renderedIndentGuides.add(Z,ee),z.add((0,l.toDisposable)(()=>this.renderedIndentGuides.delete(Z,ee))),U=Z}G.indentGuidesDisposable=z}_onDidChangeActiveNodes(U){if(!this.shouldRenderIndentGuides)return;const G=new Set,z=this.modelProvider();U.forEach(H=>{const Y=z.getNodeLocation(H);try{const j=z.getParentNodeLocation(Y);H.collapsible&&H.children.length>0&&!H.collapsed?G.add(H):j&&G.add(z.getNode(j))}catch{}}),this.activeIndentNodes.forEach(H=>{G.has(H)||this.renderedIndentGuides.forEach(H,Y=>Y.classList.remove(\"active\"))}),G.forEach(H=>{this.activeIndentNodes.has(H)||this.renderedIndentGuides.forEach(H,Y=>Y.classList.add(\"active\"))}),this.activeIndentNodes=G}dispose(){this.renderedNodes.clear(),this.renderedElements.clear(),this.indentGuidesDisposable.dispose(),(0,l.dispose)(this.disposables)}}e.TreeRenderer=P,P.DefaultIndent=8;class N{get totalCount(){return this._totalCount}get matchCount(){return this._matchCount}constructor(U,G,z){this.tree=U,this.keyboardNavigationLabelProvider=G,this._filter=z,this._totalCount=0,this._matchCount=0,this._pattern=\"\",this._lowercasePattern=\"\",this.disposables=new l.DisposableStore,U.onWillRefilter(this.reset,this,this.disposables)}filter(U,G){let z=1;if(this._filter){const j=this._filter.filter(U,G);if(typeof j==\"boolean\"?z=j?1:0:(0,a.isFilterResult)(j)?z=(0,a.getVisibleState)(j.visibility):z=j,z===0)return!1}if(this._totalCount++,!this._pattern)return this._matchCount++,{data:s.FuzzyScore.Default,visibility:z};const H=this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(U),Y=Array.isArray(H)?H:[H];for(const j of Y){const Z=j&&j.toString();if(typeof Z>\"u\")return{data:s.FuzzyScore.Default,visibility:z};let ee;if(this.tree.findMatchType===B.Contiguous){const le=Z.toLowerCase().indexOf(this._lowercasePattern);if(le>-1){ee=[Number.MAX_SAFE_INTEGER,0];for(let ue=this._lowercasePattern.length;ue>0;ue--)ee.push(le+ue-1)}}else ee=(0,s.fuzzyScore)(this._pattern,this._lowercasePattern,0,Z,Z.toLowerCase(),0,{firstMatchCanBeWeak:!0,boostFullMatch:!0});if(ee)return this._matchCount++,Y.length===1?{data:ee,visibility:z}:{data:{label:Z,score:ee},visibility:z}}return this.tree.findMode===O.Filter?typeof this.tree.options.defaultFindVisibility==\"number\"?this.tree.options.defaultFindVisibility:this.tree.options.defaultFindVisibility?this.tree.options.defaultFindVisibility(U):2:{data:s.FuzzyScore.Default,visibility:z}}reset(){this._totalCount=0,this._matchCount=0}dispose(){(0,l.dispose)(this.disposables)}}class M extends b.Toggle{constructor(U){var G;super({icon:u.Codicon.listFilter,title:(0,h.localize)(0,null),isChecked:(G=U.isChecked)!==null&&G!==void 0?G:!1,inputActiveOptionBorder:U.inputActiveOptionBorder,inputActiveOptionForeground:U.inputActiveOptionForeground,inputActiveOptionBackground:U.inputActiveOptionBackground})}}e.ModeToggle=M;class R extends b.Toggle{constructor(U){var G;super({icon:u.Codicon.searchFuzzy,title:(0,h.localize)(1,null),isChecked:(G=U.isChecked)!==null&&G!==void 0?G:!1,inputActiveOptionBorder:U.inputActiveOptionBorder,inputActiveOptionForeground:U.inputActiveOptionForeground,inputActiveOptionBackground:U.inputActiveOptionBackground})}}e.FuzzyToggle=R;const x={inputBoxStyles:p.unthemedInboxStyles,toggleStyles:b.unthemedToggleStyles,listFilterWidgetBackground:void 0,listFilterWidgetNoMatchesOutline:void 0,listFilterWidgetOutline:void 0,listFilterWidgetShadow:void 0};var O;(function(X){X[X.Highlight=0]=\"Highlight\",X[X.Filter=1]=\"Filter\"})(O||(e.TreeFindMode=O={}));var B;(function(X){X[X.Fuzzy=0]=\"Fuzzy\",X[X.Contiguous=1]=\"Contiguous\"})(B||(e.TreeFindMatchType=B={}));class W extends l.Disposable{set mode(U){this.modeToggle.checked=U===O.Filter,this.findInput.inputBox.setPlaceHolder(U===O.Filter?(0,h.localize)(2,null):(0,h.localize)(3,null))}set matchType(U){this.matchTypeToggle.checked=U===B.Fuzzy}constructor(U,G,z,H,Y,j){var Z;super(),this.tree=G,this.elements=(0,L.h)(\".monaco-tree-type-filter\",[(0,L.h)(\".monaco-tree-type-filter-grab.codicon.codicon-debug-gripper@grab\",{tabIndex:0}),(0,L.h)(\".monaco-tree-type-filter-input@findInput\"),(0,L.h)(\".monaco-tree-type-filter-actionbar@actionbar\")]),this.width=0,this.right=0,this.top=0,this._onDidDisable=new d.Emitter,U.appendChild(this.elements.root),this._register((0,l.toDisposable)(()=>U.removeChild(this.elements.root)));const ee=(Z=j?.styles)!==null&&Z!==void 0?Z:x;ee.listFilterWidgetBackground&&(this.elements.root.style.backgroundColor=ee.listFilterWidgetBackground),ee.listFilterWidgetShadow&&(this.elements.root.style.boxShadow=`0 0 8px 2px ${ee.listFilterWidgetShadow}`),this.modeToggle=this._register(new M({...ee.toggleStyles,isChecked:H===O.Filter})),this.matchTypeToggle=this._register(new R({...ee.toggleStyles,isChecked:Y===B.Fuzzy})),this.onDidChangeMode=d.Event.map(this.modeToggle.onChange,()=>this.modeToggle.checked?O.Filter:O.Highlight,this._store),this.onDidChangeMatchType=d.Event.map(this.matchTypeToggle.onChange,()=>this.matchTypeToggle.checked?B.Fuzzy:B.Contiguous,this._store),this.findInput=this._register(new S.FindInput(this.elements.findInput,z,{label:(0,h.localize)(4,null),additionalToggles:[this.modeToggle,this.matchTypeToggle],showCommonFindToggles:!1,inputBoxStyles:ee.inputBoxStyles,toggleStyles:ee.toggleStyles,history:j?.history})),this.actionbar=this._register(new E.ActionBar(this.elements.actionbar)),this.mode=H;const le=this._register(new k.DomEmitter(this.findInput.inputBox.inputElement,\"keydown\")),ue=d.Event.chain(le.event,Ce=>Ce.map(Se=>new y.StandardKeyboardEvent(Se)));this._register(ue(Ce=>{if(Ce.equals(3)){Ce.preventDefault(),Ce.stopPropagation(),this.findInput.inputBox.addToHistory(),this.tree.domFocus();return}if(Ce.equals(18)){Ce.preventDefault(),Ce.stopPropagation(),this.findInput.inputBox.isAtLastInHistory()||this.findInput.inputBox.isNowhereInHistory()?(this.findInput.inputBox.addToHistory(),this.tree.domFocus()):this.findInput.inputBox.showNextValue();return}if(Ce.equals(16)){Ce.preventDefault(),Ce.stopPropagation(),this.findInput.inputBox.showPreviousValue();return}}));const ce=this._register(new n.Action(\"close\",(0,h.localize)(5,null),\"codicon codicon-close\",!0,()=>this.dispose()));this.actionbar.push(ce,{icon:!0,label:!1});const pe=this._register(new k.DomEmitter(this.elements.grab,\"mousedown\"));this._register(pe.event(Ce=>{const Se=new l.DisposableStore,_e=Se.add(new k.DomEmitter((0,L.getWindow)(Ce),\"mousemove\")),Ee=Se.add(new k.DomEmitter((0,L.getWindow)(Ce),\"mouseup\")),Ae=this.right,xe=Ce.pageX,Be=this.top,De=Ce.pageY;this.elements.grab.classList.add(\"grabbing\");const Ie=this.elements.root.style.transition;this.elements.root.style.transition=\"unset\";const fe=be=>{const Ne=be.pageX-xe;this.right=Ae-Ne;const Pe=be.pageY-De;this.top=Be+Pe,this.layout()};Se.add(_e.event(fe)),Se.add(Ee.event(be=>{fe(be),this.elements.grab.classList.remove(\"grabbing\"),this.elements.root.style.transition=Ie,Se.dispose()}))}));const ve=d.Event.chain(this._register(new k.DomEmitter(this.elements.grab,\"keydown\")).event,Ce=>Ce.map(Se=>new y.StandardKeyboardEvent(Se)));this._register(ve(Ce=>{let Se,_e;if(Ce.keyCode===15?Se=Number.POSITIVE_INFINITY:Ce.keyCode===17?Se=0:Ce.keyCode===10&&(Se=this.right===0?Number.POSITIVE_INFINITY:0),Ce.keyCode===16?_e=0:Ce.keyCode===18&&(_e=Number.POSITIVE_INFINITY),Se!==void 0&&(Ce.preventDefault(),Ce.stopPropagation(),this.right=Se,this.layout()),_e!==void 0){Ce.preventDefault(),Ce.stopPropagation(),this.top=_e;const Ee=this.elements.root.style.transition;this.elements.root.style.transition=\"unset\",this.layout(),setTimeout(()=>{this.elements.root.style.transition=Ee},0)}})),this.onDidChangeValue=this.findInput.onDidChange}layout(U=this.width){this.width=U,this.right=(0,o.clamp)(this.right,0,Math.max(0,U-212)),this.elements.root.style.right=`${this.right}px`,this.top=(0,o.clamp)(this.top,0,24),this.elements.root.style.top=`${this.top}px`}showMessage(U){this.findInput.showMessage(U)}clearMessage(){this.findInput.clearMessage()}async dispose(){this._onDidDisable.fire(),this.elements.root.classList.add(\"disabled\"),await(0,r.timeout)(300),super.dispose()}}class V{get pattern(){return this._pattern}get mode(){return this._mode}set mode(U){U!==this._mode&&(this._mode=U,this.widget&&(this.widget.mode=this._mode),this.tree.refilter(),this.render(),this._onDidChangeMode.fire(U))}get matchType(){return this._matchType}set matchType(U){U!==this._matchType&&(this._matchType=U,this.widget&&(this.widget.matchType=this._matchType),this.tree.refilter(),this.render(),this._onDidChangeMatchType.fire(U))}constructor(U,G,z,H,Y,j={}){var Z,ee;this.tree=U,this.view=z,this.filter=H,this.contextViewProvider=Y,this.options=j,this._pattern=\"\",this.width=0,this._onDidChangeMode=new d.Emitter,this.onDidChangeMode=this._onDidChangeMode.event,this._onDidChangeMatchType=new d.Emitter,this.onDidChangeMatchType=this._onDidChangeMatchType.event,this._onDidChangePattern=new d.Emitter,this._onDidChangeOpenState=new d.Emitter,this.onDidChangeOpenState=this._onDidChangeOpenState.event,this.enabledDisposables=new l.DisposableStore,this.disposables=new l.DisposableStore,this._mode=(Z=U.options.defaultFindMode)!==null&&Z!==void 0?Z:O.Highlight,this._matchType=(ee=U.options.defaultFindMatchType)!==null&&ee!==void 0?ee:B.Fuzzy,G.onDidSplice(this.onDidSpliceModel,this,this.disposables)}updateOptions(U={}){U.defaultFindMode!==void 0&&(this.mode=U.defaultFindMode),U.defaultFindMatchType!==void 0&&(this.matchType=U.defaultFindMatchType)}onDidSpliceModel(){!this.widget||this.pattern.length===0||(this.tree.refilter(),this.render())}render(){var U,G,z,H;const Y=this.filter.totalCount>0&&this.filter.matchCount===0;this.pattern&&Y?!((U=this.tree.options.showNotFoundMessage)!==null&&U!==void 0)||U?(G=this.widget)===null||G===void 0||G.showMessage({type:2,content:(0,h.localize)(6,null)}):(z=this.widget)===null||z===void 0||z.showMessage({type:2}):(H=this.widget)===null||H===void 0||H.clearMessage()}shouldAllowFocus(U){return!this.widget||!this.pattern||this.filter.totalCount>0&&this.filter.matchCount<=1?!0:!s.FuzzyScore.isDefault(U.filterData)}layout(U){var G;this.width=U,(G=this.widget)===null||G===void 0||G.layout(U)}dispose(){this._history=void 0,this._onDidChangePattern.dispose(),this.enabledDisposables.dispose(),this.disposables.dispose()}}function K(X,U){return X.position===U.position&&F(X,U)}function F(X,U){return X.node.element===U.node.element&&X.startIndex===U.startIndex&&X.height===U.height&&X.endIndex===U.endIndex}class q{constructor(U=[]){this.stickyNodes=U}get count(){return this.stickyNodes.length}equal(U){return(0,t.equals)(this.stickyNodes,U.stickyNodes,K)}lastNodePartiallyVisible(){if(this.count===0)return!1;const U=this.stickyNodes[this.count-1];if(this.count===1)return U.position!==0;const G=this.stickyNodes[this.count-2];return G.position+G.height!==U.position}animationStateChanged(U){if(!(0,t.equals)(this.stickyNodes,U.stickyNodes,F)||this.count===0)return!1;const G=this.stickyNodes[this.count-1],z=U.stickyNodes[U.count-1];return G.position!==z.position}}class ie{constrainStickyScrollNodes(U,G,z){for(let H=0;H<U.length;H++){const Y=U[H];if(Y.position+Y.height>z||H>=G)return U.slice(0,H)}return U}}class ae extends l.Disposable{constructor(U,G,z,H,Y,j={}){var Z;super(),this.tree=U,this.model=G,this.view=z,this.treeDelegate=Y,this.maxWidgetViewRatio=.4;const ee=this.validateStickySettings(j);this.stickyScrollMaxItemCount=ee.stickyScrollMaxItemCount,this.stickyScrollDelegate=(Z=j.stickyScrollDelegate)!==null&&Z!==void 0?Z:new ie,this._widget=this._register(new ne(z.getScrollableElement(),z,U,H,Y,j.accessibilityProvider)),this.onDidChangeHasFocus=this._widget.onDidChangeHasFocus,this.onContextMenu=this._widget.onContextMenu,this._register(z.onDidScroll(()=>this.update())),this._register(z.onDidChangeContentHeight(()=>this.update())),this._register(U.onDidChangeCollapseState(()=>this.update())),this.update()}getNodeAtHeight(U){let G;if(U===0?G=this.view.firstVisibleIndex:G=this.view.indexAt(U+this.view.scrollTop),!(G<0||G>=this.view.length))return this.view.element(G)}update(){const U=this.getNodeAtHeight(0);if(!U||this.tree.scrollTop===0){this._widget.setState(void 0);return}const G=this.findStickyState(U);this._widget.setState(G)}findStickyState(U){const G=[];let z=U,H=0,Y=this.getNextStickyNode(z,void 0,H);for(;Y&&(G.push(Y),H+=Y.height,!(G.length<=this.stickyScrollMaxItemCount&&(z=this.getNextVisibleNode(Y),!z)));)Y=this.getNextStickyNode(z,Y.node,H);const j=this.constrainStickyNodes(G);return j.length?new q(j):void 0}getNextVisibleNode(U){return this.getNodeAtHeight(U.position+U.height)}getNextStickyNode(U,G,z){const H=this.getAncestorUnderPrevious(U,G);if(H&&!(H===U&&(!this.nodeIsUncollapsedParent(U)||this.nodeTopAlignsWithStickyNodesBottom(U,z))))return this.createStickyScrollNode(H,z)}nodeTopAlignsWithStickyNodesBottom(U,G){const z=this.getNodeIndex(U),H=this.view.getElementTop(z),Y=G;return this.view.scrollTop===H-Y}createStickyScrollNode(U,G){const z=this.treeDelegate.getHeight(U),{startIndex:H,endIndex:Y}=this.getNodeRange(U),j=this.calculateStickyNodePosition(Y,G,z);return{node:U,position:j,height:z,startIndex:H,endIndex:Y}}getAncestorUnderPrevious(U,G=void 0){let z=U,H=this.getParentNode(z);for(;H;){if(H===G)return z;z=H,H=this.getParentNode(z)}if(G===void 0)return z}calculateStickyNodePosition(U,G,z){let H=this.view.getRelativeTop(U);if(H===null&&this.view.firstVisibleIndex===U&&U+1<this.view.length){const le=this.treeDelegate.getHeight(this.view.element(U)),ue=this.view.getRelativeTop(U+1);H=ue?ue-le/this.view.renderHeight:null}if(H===null)return G;const Y=this.view.element(U),j=this.treeDelegate.getHeight(Y),ee=H*this.view.renderHeight+j;return G+z>ee&&G<=ee?ee-z:G}constrainStickyNodes(U){if(U.length===0)return[];const G=this.view.renderHeight*this.maxWidgetViewRatio,z=U[U.length-1];if(U.length<=this.stickyScrollMaxItemCount&&z.position+z.height<=G)return U;const H=this.stickyScrollDelegate.constrainStickyScrollNodes(U,this.stickyScrollMaxItemCount,G);if(!H.length)return[];const Y=H[H.length-1];if(H.length>this.stickyScrollMaxItemCount||Y.position+Y.height>G)throw new Error(\"stickyScrollDelegate violates constraints\");return H}getParentNode(U){const G=this.model.getNodeLocation(U),z=this.model.getParentNodeLocation(G);return z?this.model.getNode(z):void 0}nodeIsUncollapsedParent(U){const G=this.model.getNodeLocation(U);return this.model.getListRenderCount(G)>1}getNodeIndex(U){const G=this.model.getNodeLocation(U);return this.model.getListIndex(G)}getNodeRange(U){const G=this.model.getNodeLocation(U),z=this.model.getListIndex(G);if(z<0)throw new Error(\"Node not found in tree\");const H=this.model.getListRenderCount(G),Y=z+H-1;return{startIndex:z,endIndex:Y}}nodePositionTopBelowWidget(U){const G=[];let z=this.getParentNode(U);for(;z;)G.push(z),z=this.getParentNode(z);let H=0;for(let Y=0;Y<G.length&&Y<this.stickyScrollMaxItemCount;Y++)H+=this.treeDelegate.getHeight(G[Y]);return H}domFocus(){this._widget.domFocus()}focusedLast(){return this._widget.focusedLast()}updateOptions(U={}){if(!U.stickyScrollMaxItemCount)return;const G=this.validateStickySettings(U);this.stickyScrollMaxItemCount!==G.stickyScrollMaxItemCount&&(this.stickyScrollMaxItemCount=G.stickyScrollMaxItemCount,this.update())}validateStickySettings(U){let G=7;return typeof U.stickyScrollMaxItemCount==\"number\"&&(G=Math.max(U.stickyScrollMaxItemCount,1)),{stickyScrollMaxItemCount:G}}}class ne{constructor(U,G,z,H,Y,j){this.view=G,this.tree=z,this.treeRenderers=H,this.treeDelegate=Y,this.accessibilityProvider=j,this._previousElements=[],this._previousStateDisposables=new l.DisposableStore,this._rootDomNode=(0,L.$)(\".monaco-tree-sticky-container.empty\"),U.appendChild(this._rootDomNode);const Z=(0,L.$)(\".monaco-tree-sticky-container-shadow\");this._rootDomNode.appendChild(Z),this.stickyScrollFocus=new $(this._rootDomNode,G),this.onDidChangeHasFocus=this.stickyScrollFocus.onDidChangeHasFocus,this.onContextMenu=this.stickyScrollFocus.onContextMenu}setState(U){const G=!!this._previousState&&this._previousState.count>0,z=!!U&&U.count>0;if(!G&&!z||G&&z&&this._previousState.equal(U))return;if(G!==z&&this.setVisible(z),!z){this._previousState=void 0,this._previousElements=[],this._previousStateDisposables.clear();return}const H=U.stickyNodes[U.count-1];if(this._previousState&&U.animationStateChanged(this._previousState))this._previousElements[this._previousState.count-1].style.top=`${H.position}px`;else{this._previousStateDisposables.clear();const Y=Array(U.count);for(let j=U.count-1;j>=0;j--){const Z=U.stickyNodes[j],{element:ee,disposable:le}=this.createElement(Z,j,U.count);Y[j]=ee,this._rootDomNode.appendChild(ee),this._previousStateDisposables.add(le)}this.stickyScrollFocus.updateElements(Y,U),this._previousElements=Y}this._previousState=U,this._rootDomNode.style.height=`${H.position+H.height}px`}createElement(U,G,z){const H=U.startIndex,Y=document.createElement(\"div\");Y.style.top=`${U.position}px`,Y.style.height=`${U.height}px`,Y.style.lineHeight=`${U.height}px`,Y.classList.add(\"monaco-tree-sticky-row\"),Y.classList.add(\"monaco-list-row\"),Y.setAttribute(\"data-index\",`${H}`),Y.setAttribute(\"data-parity\",H%2===0?\"even\":\"odd\"),Y.setAttribute(\"id\",this.view.getElementID(H)),this.setAccessibilityAttributes(Y,U.node.element,G,z);const j=this.treeDelegate.getTemplateId(U.node),Z=this.treeRenderers.find(ce=>ce.templateId===j);if(!Z)throw new Error(`No renderer found for template id ${j}`);let ee=U.node;ee===this.tree.getNode(this.tree.getNodeLocation(U.node))&&(ee=new Proxy(U.node,{}));const le=Z.renderTemplate(Y);Z.renderElement(ee,U.startIndex,le,U.height);const ue=(0,l.toDisposable)(()=>{Z.disposeElement(ee,U.startIndex,le,U.height),Z.disposeTemplate(le),Y.remove()});return{element:Y,disposable:ue}}setAccessibilityAttributes(U,G,z,H){var Y;if(!this.accessibilityProvider)return;this.accessibilityProvider.getSetSize&&U.setAttribute(\"aria-setsize\",String(this.accessibilityProvider.getSetSize(G,z,H))),this.accessibilityProvider.getPosInSet&&U.setAttribute(\"aria-posinset\",String(this.accessibilityProvider.getPosInSet(G,z))),this.accessibilityProvider.getRole&&U.setAttribute(\"role\",(Y=this.accessibilityProvider.getRole(G))!==null&&Y!==void 0?Y:\"treeitem\");const j=this.accessibilityProvider.getAriaLabel(G);j&&U.setAttribute(\"aria-label\",j);const Z=this.accessibilityProvider.getAriaLevel&&this.accessibilityProvider.getAriaLevel(G);typeof Z==\"number\"&&U.setAttribute(\"aria-level\",`${Z}`),U.setAttribute(\"aria-selected\",String(!1))}setVisible(U){this._rootDomNode.classList.toggle(\"empty\",!U),U||this.stickyScrollFocus.updateElements([],void 0)}domFocus(){this.stickyScrollFocus.domFocus()}focusedLast(){return this.stickyScrollFocus.focusedLast()}dispose(){this.stickyScrollFocus.dispose(),this._previousStateDisposables.dispose(),this._rootDomNode.remove()}}class $ extends l.Disposable{get domHasFocus(){return this._domHasFocus}set domHasFocus(U){U!==this._domHasFocus&&(this._onDidChangeHasFocus.fire(U),this._domHasFocus=U)}constructor(U,G){super(),this.container=U,this.view=G,this.focusedIndex=-1,this.elements=[],this._onDidChangeHasFocus=new d.Emitter,this.onDidChangeHasFocus=this._onDidChangeHasFocus.event,this._onContextMenu=new d.Emitter,this.onContextMenu=this._onContextMenu.event,this._domHasFocus=!1,this.container.addEventListener(\"focus\",()=>this.onFocus()),this.container.addEventListener(\"blur\",()=>this.onBlur()),this._register(this.view.onDidFocus(()=>this.toggleStickyScrollFocused(!1))),this._register(this.view.onKeyDown(z=>this.onKeyDown(z))),this._register(this.view.onMouseDown(z=>this.onMouseDown(z))),this._register(this.view.onContextMenu(z=>this.handleContextMenu(z)))}handleContextMenu(U){const G=U.browserEvent.target;if(!(0,v.isStickyScrollContainer)(G)&&!(0,v.isStickyScrollElement)(G)){this.focusedLast()&&this.view.domFocus();return}if(!(0,L.isKeyboardEvent)(U.browserEvent)){if(!this.state)throw new Error(\"Context menu should not be triggered when state is undefined\");const j=this.state.stickyNodes.findIndex(Z=>{var ee;return Z.node.element===((ee=U.element)===null||ee===void 0?void 0:ee.element)});if(j===-1)throw new Error(\"Context menu should not be triggered when element is not in sticky scroll widget\");this.container.focus(),this.setFocus(j);return}if(!this.state||this.focusedIndex<0)throw new Error(\"Context menu key should not be triggered when focus is not in sticky scroll widget\");const H=this.state.stickyNodes[this.focusedIndex].node.element,Y=this.elements[this.focusedIndex];this._onContextMenu.fire({element:H,anchor:Y,browserEvent:U.browserEvent,isStickyScroll:!0})}onKeyDown(U){if(this.domHasFocus&&this.state){if(U.key===\"ArrowUp\")this.setFocusedElement(Math.max(0,this.focusedIndex-1)),U.preventDefault(),U.stopPropagation();else if(U.key===\"ArrowDown\"||U.key===\"ArrowRight\"){if(this.focusedIndex>=this.state.count-1){const G=this.state.stickyNodes[this.state.count-1].startIndex+1;this.view.domFocus(),this.view.setFocus([G]),this.scrollNodeUnderWidget(G,this.state)}else this.setFocusedElement(this.focusedIndex+1);U.preventDefault(),U.stopPropagation()}}}onMouseDown(U){const G=U.browserEvent.target;!(0,v.isStickyScrollContainer)(G)&&!(0,v.isStickyScrollElement)(G)||(U.browserEvent.preventDefault(),U.browserEvent.stopPropagation())}updateElements(U,G){if(G&&G.count===0)throw new Error(\"Sticky scroll state must be undefined when there are no sticky nodes\");if(G&&G.count!==U.length)throw new Error(\"Sticky scroll focus received illigel state\");const z=this.focusedIndex;if(this.removeFocus(),this.elements=U,this.state=G,G){const H=(0,o.clamp)(z,0,G.count-1);this.setFocus(H)}else this.domHasFocus&&this.view.domFocus();this.container.tabIndex=G?0:-1}setFocusedElement(U){const G=this.state;if(!G)throw new Error(\"Cannot set focus when state is undefined\");if(this.setFocus(U),!(U<G.count-1)&&G.lastNodePartiallyVisible()){const z=G.stickyNodes[U];this.scrollNodeUnderWidget(z.endIndex+1,G)}}scrollNodeUnderWidget(U,G){const z=G.stickyNodes[G.count-1],H=G.count>1?G.stickyNodes[G.count-2]:void 0,Y=this.view.getElementTop(U),j=H?H.position+H.height+z.height:z.height;this.view.scrollTop=Y-j}domFocus(){if(!this.state)throw new Error(\"Cannot focus when state is undefined\");this.container.focus()}focusedLast(){return this.state?this.view.getHTMLElement().classList.contains(\"sticky-scroll-focused\"):!1}removeFocus(){this.focusedIndex!==-1&&(this.toggleElementFocus(this.elements[this.focusedIndex],!1),this.focusedIndex=-1)}setFocus(U){if(0>U)throw new Error(\"addFocus() can not remove focus\");if(!this.state&&U>=0)throw new Error(\"Cannot set focus index when state is undefined\");if(this.state&&U>=this.state.count)throw new Error(\"Cannot set focus index to an index that does not exist\");const G=this.focusedIndex;G>=0&&this.toggleElementFocus(this.elements[G],!1),U>=0&&this.toggleElementFocus(this.elements[U],!0),this.focusedIndex=U}toggleElementFocus(U,G){U.classList.toggle(\"focused\",G)}toggleStickyScrollFocused(U){this.view.getHTMLElement().classList.toggle(\"sticky-scroll-focused\",U)}onFocus(){if(!this.state||this.elements.length===0)throw new Error(\"Cannot focus when state is undefined or elements are empty\");this.domHasFocus=!0,this.toggleStickyScrollFocused(!0),this.focusedIndex===-1&&this.setFocus(0)}onBlur(){this.domHasFocus=!1}dispose(){this.toggleStickyScrollFocused(!1),this._onDidChangeHasFocus.fire(!1),super.dispose()}}function J(X){let U=i.TreeMouseEventTarget.Unknown;return(0,L.hasParentWithClass)(X.browserEvent.target,\"monaco-tl-twistie\",\"monaco-tl-row\")?U=i.TreeMouseEventTarget.Twistie:(0,L.hasParentWithClass)(X.browserEvent.target,\"monaco-tl-contents\",\"monaco-tl-row\")?U=i.TreeMouseEventTarget.Element:(0,L.hasParentWithClass)(X.browserEvent.target,\"monaco-tree-type-filter\",\"monaco-list\")&&(U=i.TreeMouseEventTarget.Filter),{browserEvent:X.browserEvent,element:X.element?X.element.element:null,target:U}}function Q(X,U){U(X),X.children.forEach(G=>Q(G,U))}class re{get nodeSet(){return this._nodeSet||(this._nodeSet=this.createNodeSet()),this._nodeSet}constructor(U,G){this.getFirstViewElementWithTrait=U,this.identityProvider=G,this.nodes=[],this._onDidChange=new d.Emitter,this.onDidChange=this._onDidChange.event}set(U,G){!G?.__forceEvent&&(0,t.equals)(this.nodes,U)||this._set(U,!1,G)}_set(U,G,z){if(this.nodes=[...U],this.elements=void 0,this._nodeSet=void 0,!G){const H=this;this._onDidChange.fire({get elements(){return H.get()},browserEvent:z})}}get(){return this.elements||(this.elements=this.nodes.map(U=>U.element)),[...this.elements]}getNodes(){return this.nodes}has(U){return this.nodeSet.has(U)}onDidModelSplice({insertedNodes:U,deletedNodes:G}){if(!this.identityProvider){const ee=this.createNodeSet(),le=ue=>ee.delete(ue);G.forEach(ue=>Q(ue,le)),this.set([...ee.values()]);return}const z=new Set,H=ee=>z.add(this.identityProvider.getId(ee.element).toString());G.forEach(ee=>Q(ee,H));const Y=new Map,j=ee=>Y.set(this.identityProvider.getId(ee.element).toString(),ee);U.forEach(ee=>Q(ee,j));const Z=[];for(const ee of this.nodes){const le=this.identityProvider.getId(ee.element).toString();if(!z.has(le))Z.push(ee);else{const ce=Y.get(le);ce&&ce.visible&&Z.push(ce)}}if(this.nodes.length>0&&Z.length===0){const ee=this.getFirstViewElementWithTrait();ee&&Z.push(ee)}this._set(Z,!0)}createNodeSet(){const U=new Set;for(const G of this.nodes)U.add(G);return U}}class de extends v.MouseController{constructor(U,G,z){super(U),this.tree=G,this.stickyScrollProvider=z}onViewPointer(U){if((0,v.isButton)(U.browserEvent.target)||(0,v.isInputElement)(U.browserEvent.target)||(0,v.isMonacoEditor)(U.browserEvent.target)||U.browserEvent.isHandledByList)return;const G=U.element;if(!G)return super.onViewPointer(U);if(this.isSelectionRangeChangeEvent(U)||this.isSelectionSingleChangeEvent(U))return super.onViewPointer(U);const z=U.browserEvent.target,H=z.classList.contains(\"monaco-tl-twistie\")||z.classList.contains(\"monaco-icon-label\")&&z.classList.contains(\"folder-icon\")&&U.browserEvent.offsetX<16,Y=(0,v.isStickyScrollElement)(U.browserEvent.target);let j=!1;if(Y?j=!0:typeof this.tree.expandOnlyOnTwistieClick==\"function\"?j=this.tree.expandOnlyOnTwistieClick(G.element):j=!!this.tree.expandOnlyOnTwistieClick,Y)this.handleStickyScrollMouseEvent(U,G);else{if(j&&!H&&U.browserEvent.detail!==2)return super.onViewPointer(U);if(!this.tree.expandOnDoubleClick&&U.browserEvent.detail===2)return super.onViewPointer(U)}if(G.collapsible&&(!Y||H)){const Z=this.tree.getNodeLocation(G),ee=U.browserEvent.altKey;if(this.tree.setFocus([Z]),this.tree.toggleCollapsed(Z,ee),j&&H){U.browserEvent.isHandledByList=!0;return}}Y||super.onViewPointer(U)}handleStickyScrollMouseEvent(U,G){if((0,v.isMonacoCustomToggle)(U.browserEvent.target)||(0,v.isActionItem)(U.browserEvent.target))return;const z=this.stickyScrollProvider();if(!z)throw new Error(\"Sticky scroll controller not found\");const H=this.list.indexOf(G),Y=this.list.getElementTop(H),j=z.nodePositionTopBelowWidget(G);this.tree.scrollTop=Y-j,this.list.domFocus(),this.list.setFocus([H]),this.list.setSelection([H])}onDoubleClick(U){U.browserEvent.target.classList.contains(\"monaco-tl-twistie\")||!this.tree.expandOnDoubleClick||U.browserEvent.isHandledByList||super.onDoubleClick(U)}onMouseDown(U){const G=U.browserEvent.target;if(!(0,v.isStickyScrollContainer)(G)&&!(0,v.isStickyScrollElement)(G)){super.onMouseDown(U);return}}onContextMenu(U){const G=U.browserEvent.target;if(!(0,v.isStickyScrollContainer)(G)&&!(0,v.isStickyScrollElement)(G)){super.onContextMenu(U);return}}}class he extends v.List{constructor(U,G,z,H,Y,j,Z,ee){super(U,G,z,H,ee),this.focusTrait=Y,this.selectionTrait=j,this.anchorTrait=Z}createMouseController(U){return new de(this,U.tree,U.stickyScrollProvider)}splice(U,G,z=[]){if(super.splice(U,G,z),z.length===0)return;const H=[],Y=[];let j;z.forEach((Z,ee)=>{this.focusTrait.has(Z)&&H.push(U+ee),this.selectionTrait.has(Z)&&Y.push(U+ee),this.anchorTrait.has(Z)&&(j=U+ee)}),H.length>0&&super.setFocus((0,t.distinct)([...super.getFocus(),...H])),Y.length>0&&super.setSelection((0,t.distinct)([...super.getSelection(),...Y])),typeof j==\"number\"&&super.setAnchor(j)}setFocus(U,G,z=!1){super.setFocus(U,G),z||this.focusTrait.set(U.map(H=>this.element(H)),G)}setSelection(U,G,z=!1){super.setSelection(U,G),z||this.selectionTrait.set(U.map(H=>this.element(H)),G)}setAnchor(U,G=!1){super.setAnchor(U),G||(typeof U>\"u\"?this.anchorTrait.set([]):this.anchorTrait.set([this.element(U)]))}}class me{get onDidScroll(){return this.view.onDidScroll}get onDidChangeFocus(){return this.eventBufferer.wrapEvent(this.focus.onDidChange)}get onDidChangeSelection(){return this.eventBufferer.wrapEvent(this.selection.onDidChange)}get onMouseDblClick(){return d.Event.filter(d.Event.map(this.view.onMouseDblClick,J),U=>U.target!==i.TreeMouseEventTarget.Filter)}get onPointer(){return d.Event.map(this.view.onPointer,J)}get onDidFocus(){return this.view.onDidFocus}get onDidChangeModel(){return d.Event.signal(this.model.onDidSplice)}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}get findMode(){var U,G;return(G=(U=this.findController)===null||U===void 0?void 0:U.mode)!==null&&G!==void 0?G:O.Highlight}set findMode(U){this.findController&&(this.findController.mode=U)}get findMatchType(){var U,G;return(G=(U=this.findController)===null||U===void 0?void 0:U.matchType)!==null&&G!==void 0?G:B.Fuzzy}set findMatchType(U){this.findController&&(this.findController.matchType=U)}get expandOnDoubleClick(){return typeof this._options.expandOnDoubleClick>\"u\"?!0:this._options.expandOnDoubleClick}get expandOnlyOnTwistieClick(){return typeof this._options.expandOnlyOnTwistieClick>\"u\"?!0:this._options.expandOnlyOnTwistieClick}get onDidDispose(){return this.view.onDidDispose}constructor(U,G,z,H,Y={}){var j;this._user=U,this._options=Y,this.eventBufferer=new d.EventBufferer,this.onDidChangeFindOpenState=d.Event.None,this.onDidChangeStickyScrollFocused=d.Event.None,this.disposables=new l.DisposableStore,this._onWillRefilter=new d.Emitter,this.onWillRefilter=this._onWillRefilter.event,this._onDidUpdateOptions=new d.Emitter,this.treeDelegate=new I(z);const Z=new d.Relay,ee=new d.Relay,le=this.disposables.add(new A(ee.event)),ue=new c.SetMap;this.renderers=H.map(Se=>new P(Se,()=>this.model,Z.event,le,ue,Y));for(const Se of this.renderers)this.disposables.add(Se);let ce;Y.keyboardNavigationLabelProvider&&(ce=new N(this,Y.keyboardNavigationLabelProvider,Y.filter),Y={...Y,filter:ce},this.disposables.add(ce)),this.focus=new re(()=>this.view.getFocusedElements()[0],Y.identityProvider),this.selection=new re(()=>this.view.getSelectedElements()[0],Y.identityProvider),this.anchor=new re(()=>this.view.getAnchorElement(),Y.identityProvider),this.view=new he(U,G,this.treeDelegate,this.renderers,this.focus,this.selection,this.anchor,{...D(()=>this.model,Y),tree:this,stickyScrollProvider:()=>this.stickyScrollController}),this.model=this.createModel(U,this.view,Y),Z.input=this.model.onDidChangeCollapseState;const pe=d.Event.forEach(this.model.onDidSplice,Se=>{this.eventBufferer.bufferEvents(()=>{this.focus.onDidModelSplice(Se),this.selection.onDidModelSplice(Se)})},this.disposables);pe(()=>null,null,this.disposables);const ve=this.disposables.add(new d.Emitter),Ce=this.disposables.add(new r.Delayer(0));if(this.disposables.add(d.Event.any(pe,this.focus.onDidChange,this.selection.onDidChange)(()=>{Ce.trigger(()=>{const Se=new Set;for(const _e of this.focus.getNodes())Se.add(_e);for(const _e of this.selection.getNodes())Se.add(_e);ve.fire([...Se.values()])})})),ee.input=ve.event,Y.keyboardSupport!==!1){const Se=d.Event.chain(this.view.onKeyDown,_e=>_e.filter(Ee=>!(0,v.isInputElement)(Ee.target)).map(Ee=>new y.StandardKeyboardEvent(Ee)));d.Event.chain(Se,_e=>_e.filter(Ee=>Ee.keyCode===15))(this.onLeftArrow,this,this.disposables),d.Event.chain(Se,_e=>_e.filter(Ee=>Ee.keyCode===17))(this.onRightArrow,this,this.disposables),d.Event.chain(Se,_e=>_e.filter(Ee=>Ee.keyCode===10))(this.onSpace,this,this.disposables)}if((!((j=Y.findWidgetEnabled)!==null&&j!==void 0)||j)&&Y.keyboardNavigationLabelProvider&&Y.contextViewProvider){const Se=this.options.findWidgetStyles?{styles:this.options.findWidgetStyles}:void 0;this.findController=new V(this,this.model,this.view,ce,Y.contextViewProvider,Se),this.focusNavigationFilter=_e=>this.findController.shouldAllowFocus(_e),this.onDidChangeFindOpenState=this.findController.onDidChangeOpenState,this.disposables.add(this.findController),this.onDidChangeFindMode=this.findController.onDidChangeMode,this.onDidChangeFindMatchType=this.findController.onDidChangeMatchType}else this.onDidChangeFindMode=d.Event.None,this.onDidChangeFindMatchType=d.Event.None;Y.enableStickyScroll&&(this.stickyScrollController=new ae(this,this.model,this.view,this.renderers,this.treeDelegate,Y),this.onDidChangeStickyScrollFocused=this.stickyScrollController.onDidChangeHasFocus),this.styleElement=(0,L.createStyleSheet)(this.view.getHTMLElement()),this.getHTMLElement().classList.toggle(\"always\",this._options.renderIndentGuides===T.Always)}updateOptions(U={}){var G;this._options={...this._options,...U};for(const z of this.renderers)z.updateOptions(U);this.view.updateOptions(this._options),(G=this.findController)===null||G===void 0||G.updateOptions(U),this.updateStickyScroll(U),this._onDidUpdateOptions.fire(this._options),this.getHTMLElement().classList.toggle(\"always\",this._options.renderIndentGuides===T.Always)}get options(){return this._options}updateStickyScroll(U){var G;!this.stickyScrollController&&this._options.enableStickyScroll?(this.stickyScrollController=new ae(this,this.model,this.view,this.renderers,this.treeDelegate,this._options),this.onDidChangeStickyScrollFocused=this.stickyScrollController.onDidChangeHasFocus):this.stickyScrollController&&!this._options.enableStickyScroll&&(this.onDidChangeStickyScrollFocused=d.Event.None,this.stickyScrollController.dispose(),this.stickyScrollController=void 0),(G=this.stickyScrollController)===null||G===void 0||G.updateOptions(U)}getHTMLElement(){return this.view.getHTMLElement()}get scrollTop(){return this.view.scrollTop}set scrollTop(U){this.view.scrollTop=U}get scrollHeight(){return this.view.scrollHeight}get renderHeight(){return this.view.renderHeight}domFocus(){var U;!((U=this.stickyScrollController)===null||U===void 0)&&U.focusedLast()?this.stickyScrollController.domFocus():this.view.domFocus()}layout(U,G){var z;this.view.layout(U,G),(0,g.isNumber)(G)&&((z=this.findController)===null||z===void 0||z.layout(G))}style(U){var G;const z=`.${this.view.domId}`,H=[];U.treeIndentGuidesStroke&&(H.push(`.monaco-list${z}:hover .monaco-tl-indent > .indent-guide, .monaco-list${z}.always .monaco-tl-indent > .indent-guide  { border-color: ${U.treeInactiveIndentGuidesStroke}; }`),H.push(`.monaco-list${z} .monaco-tl-indent > .indent-guide.active { border-color: ${U.treeIndentGuidesStroke}; }`)),U.listBackground&&(H.push(`.monaco-list${z} .monaco-scrollable-element .monaco-tree-sticky-container { background-color: ${U.listBackground}; }`),H.push(`.monaco-list${z} .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row { background-color: ${U.listBackground}; }`)),U.listFocusForeground&&(H.push(`.monaco-list${z}.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container:focus .monaco-list-row.focused { color: ${U.listFocusForeground}; }`),H.push(`.monaco-list${z}:not(.sticky-scroll-focused) .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.focused { color: inherit; }`));const Y=(0,L.asCssValueWithDefault)(U.listFocusAndSelectionOutline,(0,L.asCssValueWithDefault)(U.listSelectionOutline,(G=U.listFocusOutline)!==null&&G!==void 0?G:\"\"));Y&&(H.push(`.monaco-list${z}.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container:focus .monaco-list-row.focused.selected { outline: 1px solid ${Y}; outline-offset: -1px;}`),H.push(`.monaco-list${z}:not(.sticky-scroll-focused) .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.focused.selected { outline: inherit;}`)),U.listFocusOutline&&(H.push(`.monaco-list${z}.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container:focus .monaco-list-row.focused { outline: 1px solid ${U.listFocusOutline}; outline-offset: -1px; }`),H.push(`.monaco-list${z}:not(.sticky-scroll-focused) .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.focused { outline: inherit; }`),H.push(`.monaco-workbench.context-menu-visible .monaco-list${z}.last-focused.sticky-scroll-focused .monaco-list-rows .monaco-list-row.focused { outline: inherit; }`),H.push(`.monaco-workbench.context-menu-visible .monaco-list${z}.last-focused:not(.sticky-scroll-focused) .monaco-tree-sticky-container .monaco-list-rows .monaco-list-row.focused { outline: inherit; }`)),this.styleElement.textContent=H.join(`\n`),this.view.style(U)}getParentElement(U){const G=this.model.getParentNodeLocation(U);return this.model.getNode(G).element}getFirstElementChild(U){return this.model.getFirstElementChild(U)}getNode(U){return this.model.getNode(U)}getNodeLocation(U){return this.model.getNodeLocation(U)}collapse(U,G=!1){return this.model.setCollapsed(U,!0,G)}expand(U,G=!1){return this.model.setCollapsed(U,!1,G)}toggleCollapsed(U,G=!1){return this.model.setCollapsed(U,void 0,G)}isCollapsible(U){return this.model.isCollapsible(U)}setCollapsible(U,G){return this.model.setCollapsible(U,G)}isCollapsed(U){return this.model.isCollapsed(U)}refilter(){this._onWillRefilter.fire(void 0),this.model.refilter()}setSelection(U,G){this.eventBufferer.bufferEvents(()=>{const z=U.map(Y=>this.model.getNode(Y));this.selection.set(z,G);const H=U.map(Y=>this.model.getListIndex(Y)).filter(Y=>Y>-1);this.view.setSelection(H,G,!0)})}getSelection(){return this.selection.get()}setFocus(U,G){this.eventBufferer.bufferEvents(()=>{const z=U.map(Y=>this.model.getNode(Y));this.focus.set(z,G);const H=U.map(Y=>this.model.getListIndex(Y)).filter(Y=>Y>-1);this.view.setFocus(H,G,!0)})}getFocus(){return this.focus.get()}reveal(U,G){this.model.expandTo(U);const z=this.model.getListIndex(U);if(z!==-1)if(!this.stickyScrollController)this.view.reveal(z,G);else{const H=this.stickyScrollController.nodePositionTopBelowWidget(this.getNode(U));this.view.reveal(z,G,H)}}onLeftArrow(U){U.preventDefault(),U.stopPropagation();const G=this.view.getFocusedElements();if(G.length===0)return;const z=G[0],H=this.model.getNodeLocation(z);if(!this.model.setCollapsed(H,!0)){const j=this.model.getParentNodeLocation(H);if(!j)return;const Z=this.model.getListIndex(j);this.view.reveal(Z),this.view.setFocus([Z])}}onRightArrow(U){U.preventDefault(),U.stopPropagation();const G=this.view.getFocusedElements();if(G.length===0)return;const z=G[0],H=this.model.getNodeLocation(z);if(!this.model.setCollapsed(H,!1)){if(!z.children.some(ee=>ee.visible))return;const[j]=this.view.getFocus(),Z=j+1;this.view.reveal(Z),this.view.setFocus([Z])}}onSpace(U){U.preventDefault(),U.stopPropagation();const G=this.view.getFocusedElements();if(G.length===0)return;const z=G[0],H=this.model.getNodeLocation(z),Y=U.browserEvent.altKey;this.model.setCollapsed(H,void 0,Y)}dispose(){var U;(0,l.dispose)(this.disposables),(U=this.stickyScrollController)===null||U===void 0||U.dispose(),this.view.dispose()}}e.AbstractTree=me}),define(se[601],oe([1,0,187,221]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DataTree=void 0;class y extends L.AbstractTree{constructor(S,p,_,v,b,a={}){super(S,p,_,v,a),this.user=S,this.dataSource=b,this.identityProvider=a.identityProvider}createModel(S,p,_){return new k.ObjectTreeModel(S,p,_)}}e.DataTree=y}),define(se[326],oe([1,0,187,584,221,107,52]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CompressibleObjectTree=e.ObjectTree=void 0;class p extends L.AbstractTree{get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}constructor(n,t,r,u,f={}){super(n,t,r,u,f),this.user=n}setChildren(n,t=S.Iterable.empty(),r){this.model.setChildren(n,t,r)}rerender(n){if(n===void 0){this.view.rerender();return}this.model.rerender(n)}hasElement(n){return this.model.has(n)}createModel(n,t,r){return new y.ObjectTreeModel(n,t,r)}}e.ObjectTree=p;class _{get compressedTreeNodeProvider(){return this._compressedTreeNodeProvider()}constructor(n,t,r){this._compressedTreeNodeProvider=n,this.stickyScrollDelegate=t,this.renderer=r,this.templateId=r.templateId,r.onDidChangeTwistieState&&(this.onDidChangeTwistieState=r.onDidChangeTwistieState)}renderTemplate(n){return{compressedTreeNode:void 0,data:this.renderer.renderTemplate(n)}}renderElement(n,t,r,u){let f=this.stickyScrollDelegate.getCompressedNode(n);f||(f=this.compressedTreeNodeProvider.getCompressedTreeNode(n.element)),f.element.elements.length===1?(r.compressedTreeNode=void 0,this.renderer.renderElement(n,t,r.data,u)):(r.compressedTreeNode=f,this.renderer.renderCompressedElements(f,t,r.data,u))}disposeElement(n,t,r,u){var f,c,d,s;r.compressedTreeNode?(c=(f=this.renderer).disposeCompressedElements)===null||c===void 0||c.call(f,r.compressedTreeNode,t,r.data,u):(s=(d=this.renderer).disposeElement)===null||s===void 0||s.call(d,n,t,r.data,u)}disposeTemplate(n){this.renderer.disposeTemplate(n.data)}renderTwistie(n,t){return this.renderer.renderTwistie?this.renderer.renderTwistie(n,t):!1}}ke([E.memoize],_.prototype,\"compressedTreeNodeProvider\",null);class v{constructor(n){this.modelProvider=n,this.compressedStickyNodes=new Map}getCompressedNode(n){return this.compressedStickyNodes.get(n)}constrainStickyScrollNodes(n,t,r){if(this.compressedStickyNodes.clear(),n.length===0)return[];for(let u=0;u<n.length;u++){const f=n[u],c=f.position+f.height;if(u+1<n.length&&c+n[u+1].height>r||u>=t-1&&t<n.length){const s=n.slice(0,u),l=n.slice(u),o=this.compressStickyNodes(l);return[...s,o]}}return n}compressStickyNodes(n){if(n.length===0)throw new Error(\"Can't compress empty sticky nodes\");if(!this.modelProvider().isCompressionEnabled())return n[0];const t=[];for(const s of n){const l=this.modelProvider().getCompressedTreeNode(s.node.element);if(l.element){if(l.element.incompressible)break;t.push(...l.element.elements)}}if(t.length<2)return n[0];const r=n[n.length-1],u={elements:t,incompressible:!1},f={...r.node,children:[],element:u},c=new Proxy(n[0].node,{}),d={node:c,startIndex:n[0].startIndex,endIndex:r.endIndex,position:n[0].position,height:n[0].height};return this.compressedStickyNodes.set(c,f),d}}function b(i,n){return n&&{...n,keyboardNavigationLabelProvider:n.keyboardNavigationLabelProvider&&{getKeyboardNavigationLabel(t){let r;try{r=i().getCompressedTreeNode(t)}catch{return n.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(t)}return r.element.elements.length===1?n.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(t):n.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(r.element.elements)}}}}class a extends p{constructor(n,t,r,u,f={}){const c=()=>this,d=new v(()=>this.model),s=u.map(l=>new _(c,d,l));super(n,t,r,s,{...b(c,f),stickyScrollDelegate:d})}setChildren(n,t=S.Iterable.empty(),r){this.model.setChildren(n,t,r)}createModel(n,t,r){return new k.CompressibleObjectTreeModel(n,t,r)}updateOptions(n={}){super.updateOptions(n),typeof n.compressionEnabled<\"u\"&&this.model.setCompressionEnabled(n.compressionEnabled)}getCompressedTreeNode(n=null){return this.model.getCompressedTreeNode(n)}}e.CompressibleObjectTree=a}),define(se[602],oe([1,0,228,187,220,326,143,14,26,28,12,6,52,2,20]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CompressibleAsyncDataTree=e.AsyncDataTree=void 0;function r(N){return{...N,children:[],refreshPromise:void 0,stale:!0,slow:!1,forceExpanded:!1}}function u(N,M){return M.parent?M.parent===N?!0:u(N,M.parent):!1}function f(N,M){return N===M||u(N,M)||u(M,N)}class c{get element(){return this.node.element.element}get children(){return this.node.children.map(M=>new c(M))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}constructor(M){this.node=M}}class d{constructor(M,R,x){this.renderer=M,this.nodeMapper=R,this.onDidChangeTwistieState=x,this.renderedNodes=new Map,this.templateId=M.templateId}renderTemplate(M){return{templateData:this.renderer.renderTemplate(M)}}renderElement(M,R,x,O){this.renderer.renderElement(this.nodeMapper.map(M),R,x.templateData,O)}renderTwistie(M,R){return M.slow?(R.classList.add(...v.ThemeIcon.asClassNameArray(_.Codicon.treeItemLoading)),!0):(R.classList.remove(...v.ThemeIcon.asClassNameArray(_.Codicon.treeItemLoading)),!1)}disposeElement(M,R,x,O){var B,W;(W=(B=this.renderer).disposeElement)===null||W===void 0||W.call(B,this.nodeMapper.map(M),R,x.templateData,O)}disposeTemplate(M){this.renderer.disposeTemplate(M.templateData)}dispose(){this.renderedNodes.clear()}}function s(N){return{browserEvent:N.browserEvent,elements:N.elements.map(M=>M.element)}}function l(N){return{browserEvent:N.browserEvent,element:N.element&&N.element.element,target:N.target}}class o extends L.ElementsDragAndDropData{constructor(M){super(M.elements.map(R=>R.element)),this.data=M}}function g(N){return N instanceof L.ElementsDragAndDropData?new o(N):N}class h{constructor(M){this.dnd=M}getDragURI(M){return this.dnd.getDragURI(M.element)}getDragLabel(M,R){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(M.map(x=>x.element),R)}onDragStart(M,R){var x,O;(O=(x=this.dnd).onDragStart)===null||O===void 0||O.call(x,g(M),R)}onDragOver(M,R,x,O,B,W=!0){return this.dnd.onDragOver(g(M),R&&R.element,x,O,B)}drop(M,R,x,O,B){this.dnd.drop(g(M),R&&R.element,x,O,B)}onDragEnd(M){var R,x;(x=(R=this.dnd).onDragEnd)===null||x===void 0||x.call(R,M)}dispose(){this.dnd.dispose()}}function m(N){return N&&{...N,collapseByDefault:!0,identityProvider:N.identityProvider&&{getId(M){return N.identityProvider.getId(M.element)}},dnd:N.dnd&&new h(N.dnd),multipleSelectionController:N.multipleSelectionController&&{isSelectionSingleChangeEvent(M){return N.multipleSelectionController.isSelectionSingleChangeEvent({...M,element:M.element})},isSelectionRangeChangeEvent(M){return N.multipleSelectionController.isSelectionRangeChangeEvent({...M,element:M.element})}},accessibilityProvider:N.accessibilityProvider&&{...N.accessibilityProvider,getPosInSet:void 0,getSetSize:void 0,getRole:N.accessibilityProvider.getRole?M=>N.accessibilityProvider.getRole(M.element):()=>\"treeitem\",isChecked:N.accessibilityProvider.isChecked?M=>{var R;return!!(!((R=N.accessibilityProvider)===null||R===void 0)&&R.isChecked(M.element))}:void 0,getAriaLabel(M){return N.accessibilityProvider.getAriaLabel(M.element)},getWidgetAriaLabel(){return N.accessibilityProvider.getWidgetAriaLabel()},getWidgetRole:N.accessibilityProvider.getWidgetRole?()=>N.accessibilityProvider.getWidgetRole():()=>\"tree\",getAriaLevel:N.accessibilityProvider.getAriaLevel&&(M=>N.accessibilityProvider.getAriaLevel(M.element)),getActiveDescendantId:N.accessibilityProvider.getActiveDescendantId&&(M=>N.accessibilityProvider.getActiveDescendantId(M.element))},filter:N.filter&&{filter(M,R){return N.filter.filter(M.element,R)}},keyboardNavigationLabelProvider:N.keyboardNavigationLabelProvider&&{...N.keyboardNavigationLabelProvider,getKeyboardNavigationLabel(M){return N.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(M.element)}},sorter:void 0,expandOnlyOnTwistieClick:typeof N.expandOnlyOnTwistieClick>\"u\"?void 0:typeof N.expandOnlyOnTwistieClick!=\"function\"?N.expandOnlyOnTwistieClick:M=>N.expandOnlyOnTwistieClick(M.element),defaultFindVisibility:M=>M.hasChildren&&M.stale?1:typeof N.defaultFindVisibility==\"number\"?N.defaultFindVisibility:typeof N.defaultFindVisibility>\"u\"?2:N.defaultFindVisibility(M.element)}}function C(N,M){M(N),N.children.forEach(R=>C(R,M))}class w{get onDidScroll(){return this.tree.onDidScroll}get onDidChangeFocus(){return a.Event.map(this.tree.onDidChangeFocus,s)}get onDidChangeSelection(){return a.Event.map(this.tree.onDidChangeSelection,s)}get onMouseDblClick(){return a.Event.map(this.tree.onMouseDblClick,l)}get onPointer(){return a.Event.map(this.tree.onPointer,l)}get onDidFocus(){return this.tree.onDidFocus}get onDidChangeModel(){return this.tree.onDidChangeModel}get onDidChangeCollapseState(){return this.tree.onDidChangeCollapseState}get onDidChangeFindOpenState(){return this.tree.onDidChangeFindOpenState}get onDidChangeStickyScrollFocused(){return this.tree.onDidChangeStickyScrollFocused}get onDidDispose(){return this.tree.onDidDispose}constructor(M,R,x,O,B,W={}){this.user=M,this.dataSource=B,this.nodes=new Map,this.subTreeRefreshPromises=new Map,this.refreshPromises=new Map,this._onDidRender=new a.Emitter,this._onDidChangeNodeSlowState=new a.Emitter,this.nodeMapper=new S.WeakMapper(V=>new c(V)),this.disposables=new n.DisposableStore,this.identityProvider=W.identityProvider,this.autoExpandSingleChildren=typeof W.autoExpandSingleChildren>\"u\"?!1:W.autoExpandSingleChildren,this.sorter=W.sorter,this.getDefaultCollapseState=V=>W.collapseByDefault?W.collapseByDefault(V)?S.ObjectTreeElementCollapseState.PreserveOrCollapsed:S.ObjectTreeElementCollapseState.PreserveOrExpanded:void 0,this.tree=this.createTree(M,R,x,O,W),this.onDidChangeFindMode=this.tree.onDidChangeFindMode,this.onDidChangeFindMatchType=this.tree.onDidChangeFindMatchType,this.root=r({element:void 0,parent:null,hasChildren:!0,defaultCollapseState:void 0}),this.identityProvider&&(this.root={...this.root,id:null}),this.nodes.set(null,this.root),this.tree.onDidChangeCollapseState(this._onDidChangeCollapseState,this,this.disposables)}createTree(M,R,x,O,B){const W=new k.ComposedTreeDelegate(x),V=O.map(F=>new d(F,this.nodeMapper,this._onDidChangeNodeSlowState.event)),K=m(B)||{};return new E.ObjectTree(M,R,W,V,K)}updateOptions(M={}){this.tree.updateOptions(M)}getHTMLElement(){return this.tree.getHTMLElement()}get scrollTop(){return this.tree.scrollTop}set scrollTop(M){this.tree.scrollTop=M}get scrollHeight(){return this.tree.scrollHeight}get renderHeight(){return this.tree.renderHeight}domFocus(){this.tree.domFocus()}layout(M,R){this.tree.layout(M,R)}style(M){this.tree.style(M)}getInput(){return this.root.element}async setInput(M,R){this.refreshPromises.forEach(O=>O.cancel()),this.refreshPromises.clear(),this.root.element=M;const x=R&&{viewState:R,focus:[],selection:[]};await this._updateChildren(M,!0,!1,x),x&&(this.tree.setFocus(x.focus),this.tree.setSelection(x.selection)),R&&typeof R.scrollTop==\"number\"&&(this.scrollTop=R.scrollTop)}async _updateChildren(M=this.root.element,R=!0,x=!1,O,B){if(typeof this.root.element>\"u\")throw new S.TreeError(this.user,\"Tree input not set\");this.root.refreshPromise&&(await this.root.refreshPromise,await a.Event.toPromise(this._onDidRender.event));const W=this.getDataNode(M);if(await this.refreshAndRenderNode(W,R,O,B),x)try{this.tree.rerender(W)}catch{}}rerender(M){if(M===void 0||M===this.root.element){this.tree.rerender();return}const R=this.getDataNode(M);this.tree.rerender(R)}getNode(M=this.root.element){const R=this.getDataNode(M),x=this.tree.getNode(R===this.root?null:R);return this.nodeMapper.map(x)}collapse(M,R=!1){const x=this.getDataNode(M);return this.tree.collapse(x===this.root?null:x,R)}async expand(M,R=!1){if(typeof this.root.element>\"u\")throw new S.TreeError(this.user,\"Tree input not set\");this.root.refreshPromise&&(await this.root.refreshPromise,await a.Event.toPromise(this._onDidRender.event));const x=this.getDataNode(M);if(this.tree.hasElement(x)&&!this.tree.isCollapsible(x)||(x.refreshPromise&&(await this.root.refreshPromise,await a.Event.toPromise(this._onDidRender.event)),x!==this.root&&!x.refreshPromise&&!this.tree.isCollapsed(x)))return!1;const O=this.tree.expand(x===this.root?null:x,R);return x.refreshPromise&&(await this.root.refreshPromise,await a.Event.toPromise(this._onDidRender.event)),O}setSelection(M,R){const x=M.map(O=>this.getDataNode(O));this.tree.setSelection(x,R)}getSelection(){return this.tree.getSelection().map(R=>R.element)}setFocus(M,R){const x=M.map(O=>this.getDataNode(O));this.tree.setFocus(x,R)}getFocus(){return this.tree.getFocus().map(R=>R.element)}reveal(M,R){this.tree.reveal(this.getDataNode(M),R)}getParentElement(M){const R=this.tree.getParentElement(this.getDataNode(M));return R&&R.element}getFirstElementChild(M=this.root.element){const R=this.getDataNode(M),x=this.tree.getFirstElementChild(R===this.root?null:R);return x&&x.element}getDataNode(M){const R=this.nodes.get(M===this.root.element?null:M);if(!R)throw new S.TreeError(this.user,`Data tree node not found: ${M}`);return R}async refreshAndRenderNode(M,R,x,O){await this.refreshNode(M,R,x),!this.disposables.isDisposed&&this.render(M,x,O)}async refreshNode(M,R,x){let O;if(this.subTreeRefreshPromises.forEach((B,W)=>{!O&&f(W,M)&&(O=B.then(()=>this.refreshNode(M,R,x)))}),O)return O;if(M!==this.root&&this.tree.getNode(M).collapsed){M.hasChildren=!!this.dataSource.hasChildren(M.element),M.stale=!0;return}return this.doRefreshSubTree(M,R,x)}async doRefreshSubTree(M,R,x){let O;M.refreshPromise=new Promise(B=>O=B),this.subTreeRefreshPromises.set(M,M.refreshPromise),M.refreshPromise.finally(()=>{M.refreshPromise=void 0,this.subTreeRefreshPromises.delete(M)});try{const B=await this.doRefreshNode(M,R,x);M.stale=!1,await p.Promises.settled(B.map(W=>this.doRefreshSubTree(W,R,x)))}finally{O()}}async doRefreshNode(M,R,x){M.hasChildren=!!this.dataSource.hasChildren(M.element);let O;if(!M.hasChildren)O=Promise.resolve(i.Iterable.empty());else{const B=this.doGetChildren(M);if((0,t.isIterable)(B))O=Promise.resolve(B);else{const W=(0,p.timeout)(800);W.then(()=>{M.slow=!0,this._onDidChangeNodeSlowState.fire(M)},V=>null),O=B.finally(()=>W.cancel())}}try{const B=await O;return this.setChildren(M,B,R,x)}catch(B){if(M!==this.root&&this.tree.hasElement(M)&&this.tree.collapse(M),(0,b.isCancellationError)(B))return[];throw B}finally{M.slow&&(M.slow=!1,this._onDidChangeNodeSlowState.fire(M))}}doGetChildren(M){let R=this.refreshPromises.get(M);if(R)return R;const x=this.dataSource.getChildren(M.element);return(0,t.isIterable)(x)?this.processChildren(x):(R=(0,p.createCancelablePromise)(async()=>this.processChildren(await x)),this.refreshPromises.set(M,R),R.finally(()=>{this.refreshPromises.delete(M)}))}_onDidChangeCollapseState({node:M,deep:R}){M.element!==null&&!M.collapsed&&M.element.stale&&(R?this.collapse(M.element.element):this.refreshAndRenderNode(M.element,!1).catch(b.onUnexpectedError))}setChildren(M,R,x,O){const B=[...R];if(M.children.length===0&&B.length===0)return[];const W=new Map,V=new Map;for(const q of M.children)W.set(q.element,q),this.identityProvider&&V.set(q.id,{node:q,collapsed:this.tree.hasElement(q)&&this.tree.isCollapsed(q)});const K=[],F=B.map(q=>{const ie=!!this.dataSource.hasChildren(q);if(!this.identityProvider){const J=r({element:q,parent:M,hasChildren:ie,defaultCollapseState:this.getDefaultCollapseState(q)});return ie&&J.defaultCollapseState===S.ObjectTreeElementCollapseState.PreserveOrExpanded&&K.push(J),J}const ae=this.identityProvider.getId(q).toString(),ne=V.get(ae);if(ne){const J=ne.node;return W.delete(J.element),this.nodes.delete(J.element),this.nodes.set(q,J),J.element=q,J.hasChildren=ie,x?ne.collapsed?(J.children.forEach(Q=>C(Q,re=>this.nodes.delete(re.element))),J.children.splice(0,J.children.length),J.stale=!0):K.push(J):ie&&!ne.collapsed&&K.push(J),J}const $=r({element:q,parent:M,id:ae,hasChildren:ie,defaultCollapseState:this.getDefaultCollapseState(q)});return O&&O.viewState.focus&&O.viewState.focus.indexOf(ae)>-1&&O.focus.push($),O&&O.viewState.selection&&O.viewState.selection.indexOf(ae)>-1&&O.selection.push($),(O&&O.viewState.expanded&&O.viewState.expanded.indexOf(ae)>-1||ie&&$.defaultCollapseState===S.ObjectTreeElementCollapseState.PreserveOrExpanded)&&K.push($),$});for(const q of W.values())C(q,ie=>this.nodes.delete(ie.element));for(const q of F)this.nodes.set(q.element,q);return M.children.splice(0,M.children.length,...F),M!==this.root&&this.autoExpandSingleChildren&&F.length===1&&K.length===0&&(F[0].forceExpanded=!0,K.push(F[0])),K}render(M,R,x){const O=M.children.map(W=>this.asTreeElement(W,R)),B=x&&{...x,diffIdentityProvider:x.diffIdentityProvider&&{getId(W){return x.diffIdentityProvider.getId(W.element)}}};this.tree.setChildren(M===this.root?null:M,O,B),M!==this.root&&this.tree.setCollapsible(M,M.hasChildren),this._onDidRender.fire()}asTreeElement(M,R){if(M.stale)return{element:M,collapsible:M.hasChildren,collapsed:!0};let x;return R&&R.viewState.expanded&&M.id&&R.viewState.expanded.indexOf(M.id)>-1?x=!1:M.forceExpanded?(x=!1,M.forceExpanded=!1):x=M.defaultCollapseState,{element:M,children:M.hasChildren?i.Iterable.map(M.children,O=>this.asTreeElement(O,R)):[],collapsible:M.hasChildren,collapsed:x}}processChildren(M){return this.sorter&&(M=[...M].sort(this.sorter.compare.bind(this.sorter))),M}dispose(){this.disposables.dispose(),this.tree.dispose()}}e.AsyncDataTree=w;class D{get element(){return{elements:this.node.element.elements.map(M=>M.element),incompressible:this.node.element.incompressible}}get children(){return this.node.children.map(M=>new D(M))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}constructor(M){this.node=M}}class I{constructor(M,R,x,O){this.renderer=M,this.nodeMapper=R,this.compressibleNodeMapperProvider=x,this.onDidChangeTwistieState=O,this.renderedNodes=new Map,this.disposables=[],this.templateId=M.templateId}renderTemplate(M){return{templateData:this.renderer.renderTemplate(M)}}renderElement(M,R,x,O){this.renderer.renderElement(this.nodeMapper.map(M),R,x.templateData,O)}renderCompressedElements(M,R,x,O){this.renderer.renderCompressedElements(this.compressibleNodeMapperProvider().map(M),R,x.templateData,O)}renderTwistie(M,R){return M.slow?(R.classList.add(...v.ThemeIcon.asClassNameArray(_.Codicon.treeItemLoading)),!0):(R.classList.remove(...v.ThemeIcon.asClassNameArray(_.Codicon.treeItemLoading)),!1)}disposeElement(M,R,x,O){var B,W;(W=(B=this.renderer).disposeElement)===null||W===void 0||W.call(B,this.nodeMapper.map(M),R,x.templateData,O)}disposeCompressedElements(M,R,x,O){var B,W;(W=(B=this.renderer).disposeCompressedElements)===null||W===void 0||W.call(B,this.compressibleNodeMapperProvider().map(M),R,x.templateData,O)}disposeTemplate(M){this.renderer.disposeTemplate(M.templateData)}dispose(){this.renderedNodes.clear(),this.disposables=(0,n.dispose)(this.disposables)}}function T(N){const M=N&&m(N);return M&&{...M,keyboardNavigationLabelProvider:M.keyboardNavigationLabelProvider&&{...M.keyboardNavigationLabelProvider,getCompressedNodeKeyboardNavigationLabel(R){return N.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(R.map(x=>x.element))}}}}class A extends w{constructor(M,R,x,O,B,W,V={}){super(M,R,x,B,W,V),this.compressionDelegate=O,this.compressibleNodeMapper=new S.WeakMapper(K=>new D(K)),this.filter=V.filter}createTree(M,R,x,O,B){const W=new k.ComposedTreeDelegate(x),V=O.map(F=>new I(F,this.nodeMapper,()=>this.compressibleNodeMapper,this._onDidChangeNodeSlowState.event)),K=T(B)||{};return new E.CompressibleObjectTree(M,R,W,V,K)}asTreeElement(M,R){return{incompressible:this.compressionDelegate.isIncompressible(M.element),...super.asTreeElement(M,R)}}updateOptions(M={}){this.tree.updateOptions(M)}render(M,R,x){if(!this.identityProvider)return super.render(M,R);const O=ne=>this.identityProvider.getId(ne).toString(),B=ne=>{const $=new Set;for(const J of ne){const Q=this.tree.getCompressedTreeNode(J===this.root?null:J);if(Q.element)for(const re of Q.element.elements)$.add(O(re.element))}return $},W=B(this.tree.getSelection()),V=B(this.tree.getFocus());super.render(M,R,x);const K=this.getSelection();let F=!1;const q=this.getFocus();let ie=!1;const ae=ne=>{const $=ne.element;if($)for(let J=0;J<$.elements.length;J++){const Q=O($.elements[J].element),re=$.elements[$.elements.length-1].element;W.has(Q)&&K.indexOf(re)===-1&&(K.push(re),F=!0),V.has(Q)&&q.indexOf(re)===-1&&(q.push(re),ie=!0)}ne.children.forEach(ae)};ae(this.tree.getCompressedTreeNode(M===this.root?null:M)),F&&this.setSelection(K),ie&&this.setFocus(q)}processChildren(M){return this.filter&&(M=i.Iterable.filter(M,R=>{const x=this.filter.filter(R,1),O=P(x);if(O===2)throw new Error(\"Recursive tree visibility not supported in async data compressed trees\");return O===1})),super.processChildren(M)}}e.CompressibleAsyncDataTree=A;function P(N){return typeof N==\"boolean\"?N?1:0:(0,y.isFilterResult)(N)?(0,y.getVisibleState)(N.visibility):(0,y.getVisibleState)(N)}}),define(se[327],oe([1,0,12,6,2,55,17,11]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.create=e.SimpleWorkerServer=e.SimpleWorkerClient=e.logOnceWebWorkerWarning=void 0;const _=\"$initialize\";let v=!1;function b(g){S.isWeb&&(v||(v=!0,console.warn(\"Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq\")),console.warn(g.message))}e.logOnceWebWorkerWarning=b;class a{constructor(h,m,C,w){this.vsWorker=h,this.req=m,this.method=C,this.args=w,this.type=0}}class i{constructor(h,m,C,w){this.vsWorker=h,this.seq=m,this.res=C,this.err=w,this.type=1}}class n{constructor(h,m,C,w){this.vsWorker=h,this.req=m,this.eventName=C,this.arg=w,this.type=2}}class t{constructor(h,m,C){this.vsWorker=h,this.req=m,this.event=C,this.type=3}}class r{constructor(h,m){this.vsWorker=h,this.req=m,this.type=4}}class u{constructor(h){this._workerId=-1,this._handler=h,this._lastSentReq=0,this._pendingReplies=Object.create(null),this._pendingEmitters=new Map,this._pendingEvents=new Map}setWorkerId(h){this._workerId=h}sendMessage(h,m){const C=String(++this._lastSentReq);return new Promise((w,D)=>{this._pendingReplies[C]={resolve:w,reject:D},this._send(new a(this._workerId,C,h,m))})}listen(h,m){let C=null;const w=new k.Emitter({onWillAddFirstListener:()=>{C=String(++this._lastSentReq),this._pendingEmitters.set(C,w),this._send(new n(this._workerId,C,h,m))},onDidRemoveLastListener:()=>{this._pendingEmitters.delete(C),this._send(new r(this._workerId,C)),C=null}});return w.event}handleMessage(h){!h||!h.vsWorker||this._workerId!==-1&&h.vsWorker!==this._workerId||this._handleMessage(h)}_handleMessage(h){switch(h.type){case 1:return this._handleReplyMessage(h);case 0:return this._handleRequestMessage(h);case 2:return this._handleSubscribeEventMessage(h);case 3:return this._handleEventMessage(h);case 4:return this._handleUnsubscribeEventMessage(h)}}_handleReplyMessage(h){if(!this._pendingReplies[h.seq]){console.warn(\"Got reply to unknown seq\");return}const m=this._pendingReplies[h.seq];if(delete this._pendingReplies[h.seq],h.err){let C=h.err;h.err.$isError&&(C=new Error,C.name=h.err.name,C.message=h.err.message,C.stack=h.err.stack),m.reject(C);return}m.resolve(h.res)}_handleRequestMessage(h){const m=h.req;this._handler.handleMessage(h.method,h.args).then(w=>{this._send(new i(this._workerId,m,w,void 0))},w=>{w.detail instanceof Error&&(w.detail=(0,L.transformErrorForSerialization)(w.detail)),this._send(new i(this._workerId,m,void 0,(0,L.transformErrorForSerialization)(w)))})}_handleSubscribeEventMessage(h){const m=h.req,C=this._handler.handleEvent(h.eventName,h.arg)(w=>{this._send(new t(this._workerId,m,w))});this._pendingEvents.set(m,C)}_handleEventMessage(h){if(!this._pendingEmitters.has(h.req)){console.warn(\"Got event for unknown req\");return}this._pendingEmitters.get(h.req).fire(h.event)}_handleUnsubscribeEventMessage(h){if(!this._pendingEvents.has(h.req)){console.warn(\"Got unsubscribe for unknown req\");return}this._pendingEvents.get(h.req).dispose(),this._pendingEvents.delete(h.req)}_send(h){const m=[];if(h.type===0)for(let C=0;C<h.args.length;C++)h.args[C]instanceof ArrayBuffer&&m.push(h.args[C]);else h.type===1&&h.res instanceof ArrayBuffer&&m.push(h.res);this._handler.sendMessage(h,m)}}class f extends y.Disposable{constructor(h,m,C){super();let w=null;this._worker=this._register(h.create(\"vs/base/common/worker/simpleWorker\",N=>{this._protocol.handleMessage(N)},N=>{w?.(N)})),this._protocol=new u({sendMessage:(N,M)=>{this._worker.postMessage(N,M)},handleMessage:(N,M)=>{if(typeof C[N]!=\"function\")return Promise.reject(new Error(\"Missing method \"+N+\" on main thread host.\"));try{return Promise.resolve(C[N].apply(C,M))}catch(R){return Promise.reject(R)}},handleEvent:(N,M)=>{if(d(N)){const R=C[N].call(C,M);if(typeof R!=\"function\")throw new Error(`Missing dynamic event ${N} on main thread host.`);return R}if(c(N)){const R=C[N];if(typeof R!=\"function\")throw new Error(`Missing event ${N} on main thread host.`);return R}throw new Error(`Malformed event name ${N}`)}}),this._protocol.setWorkerId(this._worker.getId());let D=null;const I=globalThis.require;typeof I<\"u\"&&typeof I.getConfig==\"function\"?D=I.getConfig():typeof globalThis.requirejs<\"u\"&&(D=globalThis.requirejs.s.contexts._.config);const T=(0,E.getAllMethodNames)(C);this._onModuleLoaded=this._protocol.sendMessage(_,[this._worker.getId(),JSON.parse(JSON.stringify(D)),m,T]);const A=(N,M)=>this._request(N,M),P=(N,M)=>this._protocol.listen(N,M);this._lazyProxy=new Promise((N,M)=>{w=M,this._onModuleLoaded.then(R=>{N(s(R,A,P))},R=>{M(R),this._onError(\"Worker failed to load \"+m,R)})})}getProxyObject(){return this._lazyProxy}_request(h,m){return new Promise((C,w)=>{this._onModuleLoaded.then(()=>{this._protocol.sendMessage(h,m).then(C,w)},w)})}_onError(h,m){console.error(h),console.info(m)}}e.SimpleWorkerClient=f;function c(g){return g[0]===\"o\"&&g[1]===\"n\"&&p.isUpperAsciiLetter(g.charCodeAt(2))}function d(g){return/^onDynamic/.test(g)&&p.isUpperAsciiLetter(g.charCodeAt(9))}function s(g,h,m){const C=I=>function(){const T=Array.prototype.slice.call(arguments,0);return h(I,T)},w=I=>function(T){return m(I,T)},D={};for(const I of g){if(d(I)){D[I]=w(I);continue}if(c(I)){D[I]=m(I,void 0);continue}D[I]=C(I)}return D}class l{constructor(h,m){this._requestHandlerFactory=m,this._requestHandler=null,this._protocol=new u({sendMessage:(C,w)=>{h(C,w)},handleMessage:(C,w)=>this._handleMessage(C,w),handleEvent:(C,w)=>this._handleEvent(C,w)})}onmessage(h){this._protocol.handleMessage(h)}_handleMessage(h,m){if(h===_)return this.initialize(m[0],m[1],m[2],m[3]);if(!this._requestHandler||typeof this._requestHandler[h]!=\"function\")return Promise.reject(new Error(\"Missing requestHandler or method: \"+h));try{return Promise.resolve(this._requestHandler[h].apply(this._requestHandler,m))}catch(C){return Promise.reject(C)}}_handleEvent(h,m){if(!this._requestHandler)throw new Error(\"Missing requestHandler\");if(d(h)){const C=this._requestHandler[h].call(this._requestHandler,m);if(typeof C!=\"function\")throw new Error(`Missing dynamic event ${h} on request handler.`);return C}if(c(h)){const C=this._requestHandler[h];if(typeof C!=\"function\")throw new Error(`Missing event ${h} on request handler.`);return C}throw new Error(`Malformed event name ${h}`)}initialize(h,m,C,w){this._protocol.setWorkerId(h);const T=s(w,(A,P)=>this._protocol.sendMessage(A,P),(A,P)=>this._protocol.listen(A,P));return this._requestHandlerFactory?(this._requestHandler=this._requestHandlerFactory(T),Promise.resolve((0,E.getAllMethodNames)(this._requestHandler))):(m&&(typeof m.baseUrl<\"u\"&&delete m.baseUrl,typeof m.paths<\"u\"&&typeof m.paths.vs<\"u\"&&delete m.paths.vs,typeof m.trustedTypesPolicy<\"u\"&&delete m.trustedTypesPolicy,m.catchError=!0,globalThis.require.config(m)),new Promise((A,P)=>{(globalThis.require||te)([C],M=>{if(this._requestHandler=M.create(T),!this._requestHandler){P(new Error(\"No RequestHandler!\"));return}A((0,E.getAllMethodNames)(this._requestHandler))},P)}))}}e.SimpleWorkerServer=l;function o(g){return new l(g,null)}e.create=o}),define(se[603],oe([1,0,93,12,47,327,2]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DefaultWorkerFactory=e.getWorkerBootstrapUrl=void 0;const p=(0,L.createTrustedTypesPolicy)(\"defaultWorkerFactory\",{createScriptURL:n=>n});function _(n){const t=globalThis.MonacoEnvironment;if(t){if(typeof t.getWorker==\"function\")return t.getWorker(\"workerMain.js\",n);if(typeof t.getWorkerUrl==\"function\"){const r=t.getWorkerUrl(\"workerMain.js\",n);return new Worker(p?p.createScriptURL(r):r,{name:n})}}if(typeof te==\"function\"){const r=te.toUrl(\"vs/base/worker/workerMain.js\"),u=v(r,n);return new Worker(p?p.createScriptURL(u):u,{name:n})}throw new Error(\"You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker\")}function v(n,t){if(/^((http:)|(https:)|(file:))/.test(n)&&n.substring(0,globalThis.origin.length)!==globalThis.origin){const d=\"vs/base/worker/defaultWorkerFactory.js\",s=te.toUrl(d).slice(0,-d.length),l=`/*${t}*/globalThis.MonacoEnvironment={baseUrl: '${s}'};const ttPolicy = globalThis.trustedTypes?.createPolicy('defaultWorkerFactory', { createScriptURL: value => value });importScripts(ttPolicy?.createScriptURL('${n}') ?? '${n}');/*${t}*/`,o=new Blob([l],{type:\"application/javascript\"});return URL.createObjectURL(o)}const r=n.lastIndexOf(\"?\"),u=n.lastIndexOf(\"#\",r),f=r>0?new URLSearchParams(n.substring(r+1,~u?u:void 0)):new URLSearchParams;return y.COI.addSearchParam(f,!0,!0),f.toString()?`${n}?${f.toString()}#${t}`:`${n}#${t}`}e.getWorkerBootstrapUrl=v;function b(n){return typeof n.then==\"function\"}class a extends S.Disposable{constructor(t,r,u,f,c){super(),this.id=r,this.label=u;const d=_(u);b(d)?this.worker=d:this.worker=Promise.resolve(d),this.postMessage(t,[]),this.worker.then(s=>{s.onmessage=function(l){f(l.data)},s.onmessageerror=c,typeof s.addEventListener==\"function\"&&s.addEventListener(\"error\",c)}),this._register((0,S.toDisposable)(()=>{var s;(s=this.worker)===null||s===void 0||s.then(l=>{l.onmessage=null,l.onmessageerror=null,l.removeEventListener(\"error\",c),l.terminate()}),this.worker=null}))}getId(){return this.id}postMessage(t,r){var u;(u=this.worker)===null||u===void 0||u.then(f=>{try{f.postMessage(t,r)}catch(c){(0,k.onUnexpectedError)(c),(0,k.onUnexpectedError)(new Error(`FAILED to post message to '${this.label}'-worker`,{cause:c}))}})}}class i{constructor(t){this._label=t,this._webWorkerFailedBeforeError=!1}create(t,r,u){const f=++i.LAST_WORKER_ID;if(this._webWorkerFailedBeforeError)throw this._webWorkerFailedBeforeError;return new a(t,f,this._label||\"anonymous\"+f,r,c=>{(0,E.logOnceWebWorkerWarning)(c),this._webWorkerFailedBeforeError=c,u(c)})}}e.DefaultWorkerFactory=i,i.LAST_WORKER_ID=0}),define(se[604],oe([1,0,14,6,2,223,20]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InMemoryStorageDatabase=e.Storage=e.StorageState=e.StorageHint=void 0;var p;(function(a){a[a.STORAGE_DOES_NOT_EXIST=0]=\"STORAGE_DOES_NOT_EXIST\",a[a.STORAGE_IN_MEMORY=1]=\"STORAGE_IN_MEMORY\"})(p||(e.StorageHint=p={}));var _;(function(a){a[a.None=0]=\"None\",a[a.Initialized=1]=\"Initialized\",a[a.Closed=2]=\"Closed\"})(_||(e.StorageState=_={}));class v extends y.Disposable{constructor(i,n=Object.create(null)){super(),this.database=i,this.options=n,this._onDidChangeStorage=this._register(new k.PauseableEmitter),this.onDidChangeStorage=this._onDidChangeStorage.event,this.state=_.None,this.cache=new Map,this.flushDelayer=this._register(new L.ThrottledDelayer(v.DEFAULT_FLUSH_DELAY)),this.pendingDeletes=new Set,this.pendingInserts=new Map,this.whenFlushedCallbacks=[],this.registerListeners()}registerListeners(){this._register(this.database.onDidChangeItemsExternal(i=>this.onDidChangeItemsExternal(i)))}onDidChangeItemsExternal(i){var n,t;this._onDidChangeStorage.pause();try{(n=i.changed)===null||n===void 0||n.forEach((r,u)=>this.acceptExternal(u,r)),(t=i.deleted)===null||t===void 0||t.forEach(r=>this.acceptExternal(r,void 0))}finally{this._onDidChangeStorage.resume()}}acceptExternal(i,n){if(this.state===_.Closed)return;let t=!1;(0,S.isUndefinedOrNull)(n)?t=this.cache.delete(i):this.cache.get(i)!==n&&(this.cache.set(i,n),t=!0),t&&this._onDidChangeStorage.fire({key:i,external:!0})}get(i,n){const t=this.cache.get(i);return(0,S.isUndefinedOrNull)(t)?n:t}getBoolean(i,n){const t=this.get(i);return(0,S.isUndefinedOrNull)(t)?n:t===\"true\"}getNumber(i,n){const t=this.get(i);return(0,S.isUndefinedOrNull)(t)?n:parseInt(t,10)}async set(i,n,t=!1){if(this.state===_.Closed)return;if((0,S.isUndefinedOrNull)(n))return this.delete(i,t);const r=(0,S.isObject)(n)||Array.isArray(n)?(0,E.stringify)(n):String(n);if(this.cache.get(i)!==r)return this.cache.set(i,r),this.pendingInserts.set(i,r),this.pendingDeletes.delete(i),this._onDidChangeStorage.fire({key:i,external:t}),this.doFlush()}async delete(i,n=!1){if(!(this.state===_.Closed||!this.cache.delete(i)))return this.pendingDeletes.has(i)||this.pendingDeletes.add(i),this.pendingInserts.delete(i),this._onDidChangeStorage.fire({key:i,external:n}),this.doFlush()}get hasPending(){return this.pendingInserts.size>0||this.pendingDeletes.size>0}async flushPending(){if(!this.hasPending)return;const i={insert:this.pendingInserts,delete:this.pendingDeletes};return this.pendingDeletes=new Set,this.pendingInserts=new Map,this.database.updateItems(i).finally(()=>{var n;if(!this.hasPending)for(;this.whenFlushedCallbacks.length;)(n=this.whenFlushedCallbacks.pop())===null||n===void 0||n()})}async doFlush(i){return this.options.hint===p.STORAGE_IN_MEMORY?this.flushPending():this.flushDelayer.trigger(()=>this.flushPending(),i)}}e.Storage=v,v.DEFAULT_FLUSH_DELAY=100;class b{constructor(){this.onDidChangeItemsExternal=k.Event.None,this.items=new Map}async updateItems(i){var n,t;(n=i.insert)===null||n===void 0||n.forEach((r,u)=>this.items.set(u,r)),(t=i.delete)===null||t===void 0||t.forEach(r=>this.items.delete(r))}}e.InMemoryStorageDatabase=b}),define(se[328],oe([1,0,2,6,7]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ElementSizeObserver=void 0;class E extends L.Disposable{constructor(p,_){super(),this._onDidChange=this._register(new k.Emitter),this.onDidChange=this._onDidChange.event,this._referenceDomElement=p,this._width=-1,this._height=-1,this._resizeObserver=null,this.measureReferenceDomElement(!1,_)}dispose(){this.stopObserving(),super.dispose()}getWidth(){return this._width}getHeight(){return this._height}startObserving(){if(!this._resizeObserver&&this._referenceDomElement){let p=null;const _=()=>{p?this.observe({width:p.width,height:p.height}):this.observe()};let v=!1,b=!1;const a=()=>{if(v&&!b)try{v=!1,b=!0,_()}finally{(0,y.scheduleAtNextAnimationFrame)((0,y.getWindow)(this._referenceDomElement),()=>{b=!1,a()})}};this._resizeObserver=new ResizeObserver(i=>{i&&i[0]&&i[0].contentRect?p={width:i[0].contentRect.width,height:i[0].contentRect.height}:p=null,v=!0,a()}),this._resizeObserver.observe(this._referenceDomElement)}}stopObserving(){this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=null)}observe(p){this.measureReferenceDomElement(!0,p)}measureReferenceDomElement(p,_){let v=0,b=0;_?(v=_.width,b=_.height):this._referenceDomElement&&(v=this._referenceDomElement.clientWidth,b=this._referenceDomElement.clientHeight),v=Math.max(5,v),b=Math.max(5,b),(this._width!==v||this._height!==b)&&(this._width=v,this._height=b,p&&this._onDidChange.fire())}}e.ElementSizeObserver=E}),define(se[605],oe([1,0,7,40,56]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewContentWidgets=void 0;class E extends y.ViewPart{constructor(i,n){super(i),this._viewDomNode=n,this._widgets={},this.domNode=(0,k.createFastDomNode)(document.createElement(\"div\")),y.PartFingerprints.write(this.domNode,1),this.domNode.setClassName(\"contentWidgets\"),this.domNode.setPosition(\"absolute\"),this.domNode.setTop(0),this.overflowingContentWidgetsDomNode=(0,k.createFastDomNode)(document.createElement(\"div\")),y.PartFingerprints.write(this.overflowingContentWidgetsDomNode,2),this.overflowingContentWidgetsDomNode.setClassName(\"overflowingContentWidgets\")}dispose(){super.dispose(),this._widgets={}}onConfigurationChanged(i){const n=Object.keys(this._widgets);for(const t of n)this._widgets[t].onConfigurationChanged(i);return!0}onDecorationsChanged(i){return!0}onFlushed(i){return!0}onLineMappingChanged(i){return this._updateAnchorsViewPositions(),!0}onLinesChanged(i){return this._updateAnchorsViewPositions(),!0}onLinesDeleted(i){return this._updateAnchorsViewPositions(),!0}onLinesInserted(i){return this._updateAnchorsViewPositions(),!0}onScrollChanged(i){return!0}onZonesChanged(i){return!0}_updateAnchorsViewPositions(){const i=Object.keys(this._widgets);for(const n of i)this._widgets[n].updateAnchorViewPosition()}addWidget(i){const n=new S(this._context,this._viewDomNode,i);this._widgets[n.id]=n,n.allowEditorOverflow?this.overflowingContentWidgetsDomNode.appendChild(n.domNode):this.domNode.appendChild(n.domNode),this.setShouldRender()}setWidgetPosition(i,n,t,r,u){this._widgets[i.getId()].setPosition(n,t,r,u),this.setShouldRender()}removeWidget(i){const n=i.getId();if(this._widgets.hasOwnProperty(n)){const t=this._widgets[n];delete this._widgets[n];const r=t.domNode.domNode;r.parentNode.removeChild(r),r.removeAttribute(\"monaco-visible-content-widget\"),this.setShouldRender()}}shouldSuppressMouseDownOnWidget(i){return this._widgets.hasOwnProperty(i)?this._widgets[i].suppressMouseDown:!1}onBeforeRender(i){const n=Object.keys(this._widgets);for(const t of n)this._widgets[t].onBeforeRender(i)}prepareRender(i){const n=Object.keys(this._widgets);for(const t of n)this._widgets[t].prepareRender(i)}render(i){const n=Object.keys(this._widgets);for(const t of n)this._widgets[t].render(i)}}e.ViewContentWidgets=E;class S{constructor(i,n,t){this._primaryAnchor=new p(null,null),this._secondaryAnchor=new p(null,null),this._context=i,this._viewDomNode=n,this._actual=t,this.domNode=(0,k.createFastDomNode)(this._actual.getDomNode()),this.id=this._actual.getId(),this.allowEditorOverflow=this._actual.allowEditorOverflow||!1,this.suppressMouseDown=this._actual.suppressMouseDown||!1;const r=this._context.configuration.options,u=r.get(143);this._fixedOverflowWidgets=r.get(42),this._contentWidth=u.contentWidth,this._contentLeft=u.contentLeft,this._lineHeight=r.get(66),this._affinity=null,this._preference=[],this._cachedDomNodeOffsetWidth=-1,this._cachedDomNodeOffsetHeight=-1,this._maxWidth=this._getMaxWidth(),this._isVisible=!1,this._renderData=null,this.domNode.setPosition(this._fixedOverflowWidgets&&this.allowEditorOverflow?\"fixed\":\"absolute\"),this.domNode.setDisplay(\"none\"),this.domNode.setVisibility(\"hidden\"),this.domNode.setAttribute(\"widgetId\",this.id),this.domNode.setMaxWidth(this._maxWidth)}onConfigurationChanged(i){const n=this._context.configuration.options;if(this._lineHeight=n.get(66),i.hasChanged(143)){const t=n.get(143);this._contentLeft=t.contentLeft,this._contentWidth=t.contentWidth,this._maxWidth=this._getMaxWidth()}}updateAnchorViewPosition(){this._setPosition(this._affinity,this._primaryAnchor.modelPosition,this._secondaryAnchor.modelPosition)}_setPosition(i,n,t){this._affinity=i,this._primaryAnchor=r(n,this._context.viewModel,this._affinity),this._secondaryAnchor=r(t,this._context.viewModel,this._affinity);function r(u,f,c){if(!u)return new p(null,null);const d=f.model.validatePosition(u);if(f.coordinatesConverter.modelPositionIsVisible(d)){const s=f.coordinatesConverter.convertModelPositionToViewPosition(d,c??void 0);return new p(u,s)}return new p(u,null)}}_getMaxWidth(){const i=this.domNode.domNode.ownerDocument,n=i.defaultView;return this.allowEditorOverflow?n?.innerWidth||i.documentElement.offsetWidth||i.body.offsetWidth:this._contentWidth}setPosition(i,n,t,r){this._setPosition(r,i,n),this._preference=t,this._primaryAnchor.viewPosition&&this._preference&&this._preference.length>0?this.domNode.setDisplay(\"block\"):this.domNode.setDisplay(\"none\"),this._cachedDomNodeOffsetWidth=-1,this._cachedDomNodeOffsetHeight=-1}_layoutBoxInViewport(i,n,t,r){const u=i.top,f=u,c=i.top+i.height,d=r.viewportHeight-c,s=u-t,l=f>=t,o=c,g=d>=t;let h=i.left;return h+n>r.scrollLeft+r.viewportWidth&&(h=r.scrollLeft+r.viewportWidth-n),h<r.scrollLeft&&(h=r.scrollLeft),{fitsAbove:l,aboveTop:s,fitsBelow:g,belowTop:o,left:h}}_layoutHorizontalSegmentInPage(i,n,t,r){var u;const d=Math.max(15,n.left-r),s=Math.min(n.left+n.width+r,i.width-15),o=this._viewDomNode.domNode.ownerDocument.defaultView;let g=n.left+t-((u=o?.scrollX)!==null&&u!==void 0?u:0);if(g+r>s){const h=g-(s-r);g-=h,t-=h}if(g<d){const h=g-d;g-=h,t-=h}return[t,g]}_layoutBoxInPage(i,n,t,r){var u,f;const c=i.top-t,d=i.top+i.height,s=L.getDomNodePagePosition(this._viewDomNode.domNode),l=this._viewDomNode.domNode.ownerDocument,o=l.defaultView,g=s.top+c-((u=o?.scrollY)!==null&&u!==void 0?u:0),h=s.top+d-((f=o?.scrollY)!==null&&f!==void 0?f:0),m=L.getClientArea(l.body),[C,w]=this._layoutHorizontalSegmentInPage(m,s,i.left-r.scrollLeft+this._contentLeft,n),D=22,I=22,T=g>=D,A=h+t<=m.height-I;return this._fixedOverflowWidgets?{fitsAbove:T,aboveTop:Math.max(g,D),fitsBelow:A,belowTop:h,left:w}:{fitsAbove:T,aboveTop:c,fitsBelow:A,belowTop:d,left:C}}_prepareRenderWidgetAtExactPositionOverflowing(i){return new _(i.top,i.left+this._contentLeft)}_getAnchorsCoordinates(i){var n,t;const r=c(this._primaryAnchor.viewPosition,this._affinity,this._lineHeight),u=((n=this._secondaryAnchor.viewPosition)===null||n===void 0?void 0:n.lineNumber)===((t=this._primaryAnchor.viewPosition)===null||t===void 0?void 0:t.lineNumber)?this._secondaryAnchor.viewPosition:null,f=c(u,this._affinity,this._lineHeight);return{primary:r,secondary:f};function c(d,s,l){if(!d)return null;const o=i.visibleRangeForPosition(d);if(!o)return null;const g=d.column===1&&s===3?0:o.left,h=i.getVerticalOffsetForLineNumber(d.lineNumber)-i.scrollTop;return new v(h,g,l)}}_reduceAnchorCoordinates(i,n,t){if(!n)return i;const r=this._context.configuration.options.get(50);let u=n.left;return u<i.left?u=Math.max(u,i.left-t+r.typicalFullwidthCharacterWidth):u=Math.min(u,i.left+t-r.typicalFullwidthCharacterWidth),new v(i.top,u,i.height)}_prepareRenderWidget(i){if(!this._preference||this._preference.length===0)return null;const{primary:n,secondary:t}=this._getAnchorsCoordinates(i);if(!n)return null;if(this._cachedDomNodeOffsetWidth===-1||this._cachedDomNodeOffsetHeight===-1){let f=null;if(typeof this._actual.beforeRender==\"function\"&&(f=b(this._actual.beforeRender,this._actual)),f)this._cachedDomNodeOffsetWidth=f.width,this._cachedDomNodeOffsetHeight=f.height;else{const d=this.domNode.domNode.getBoundingClientRect();this._cachedDomNodeOffsetWidth=Math.round(d.width),this._cachedDomNodeOffsetHeight=Math.round(d.height)}}const r=this._reduceAnchorCoordinates(n,t,this._cachedDomNodeOffsetWidth);let u;this.allowEditorOverflow?u=this._layoutBoxInPage(r,this._cachedDomNodeOffsetWidth,this._cachedDomNodeOffsetHeight,i):u=this._layoutBoxInViewport(r,this._cachedDomNodeOffsetWidth,this._cachedDomNodeOffsetHeight,i);for(let f=1;f<=2;f++)for(const c of this._preference)if(c===1){if(!u)return null;if(f===2||u.fitsAbove)return{coordinate:new _(u.aboveTop,u.left),position:1}}else if(c===2){if(!u)return null;if(f===2||u.fitsBelow)return{coordinate:new _(u.belowTop,u.left),position:2}}else return this.allowEditorOverflow?{coordinate:this._prepareRenderWidgetAtExactPositionOverflowing(new _(r.top,r.left)),position:0}:{coordinate:new _(r.top,r.left),position:0};return null}onBeforeRender(i){!this._primaryAnchor.viewPosition||!this._preference||this._primaryAnchor.viewPosition.lineNumber<i.startLineNumber||this._primaryAnchor.viewPosition.lineNumber>i.endLineNumber||this.domNode.setMaxWidth(this._maxWidth)}prepareRender(i){this._renderData=this._prepareRenderWidget(i)}render(i){if(!this._renderData){this._isVisible&&(this.domNode.removeAttribute(\"monaco-visible-content-widget\"),this._isVisible=!1,this.domNode.setVisibility(\"hidden\")),typeof this._actual.afterRender==\"function\"&&b(this._actual.afterRender,this._actual,null);return}this.allowEditorOverflow?(this.domNode.setTop(this._renderData.coordinate.top),this.domNode.setLeft(this._renderData.coordinate.left)):(this.domNode.setTop(this._renderData.coordinate.top+i.scrollTop-i.bigNumbersDelta),this.domNode.setLeft(this._renderData.coordinate.left)),this._isVisible||(this.domNode.setVisibility(\"inherit\"),this.domNode.setAttribute(\"monaco-visible-content-widget\",\"true\"),this._isVisible=!0),typeof this._actual.afterRender==\"function\"&&b(this._actual.afterRender,this._actual,this._renderData.position)}}class p{constructor(i,n){this.modelPosition=i,this.viewPosition=n}}class _{constructor(i,n){this.top=i,this.left=n,this._coordinateBrand=void 0}}class v{constructor(i,n,t){this.top=i,this.left=n,this.height=t,this._anchorCoordinateBrand=void 0}}function b(a,i,...n){try{return a.call(i,...n)}catch{return null}}}),define(se[606],oe([1,0,40,56,7,441]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewOverlayWidgets=void 0;class E extends k.ViewPart{constructor(p,_){super(p),this._viewDomNode=_;const b=this._context.configuration.options.get(143);this._widgets={},this._verticalScrollbarWidth=b.verticalScrollbarWidth,this._minimapWidth=b.minimap.minimapWidth,this._horizontalScrollbarHeight=b.horizontalScrollbarHeight,this._editorHeight=b.height,this._editorWidth=b.width,this._viewDomNodeRect={top:0,left:0,width:0,height:0},this._domNode=(0,L.createFastDomNode)(document.createElement(\"div\")),k.PartFingerprints.write(this._domNode,4),this._domNode.setClassName(\"overlayWidgets\"),this.overflowingOverlayWidgetsDomNode=(0,L.createFastDomNode)(document.createElement(\"div\")),k.PartFingerprints.write(this.overflowingOverlayWidgetsDomNode,5),this.overflowingOverlayWidgetsDomNode.setClassName(\"overflowingOverlayWidgets\")}dispose(){super.dispose(),this._widgets={}}getDomNode(){return this._domNode}onConfigurationChanged(p){const v=this._context.configuration.options.get(143);return this._verticalScrollbarWidth=v.verticalScrollbarWidth,this._minimapWidth=v.minimap.minimapWidth,this._horizontalScrollbarHeight=v.horizontalScrollbarHeight,this._editorHeight=v.height,this._editorWidth=v.width,!0}addWidget(p){const _=(0,L.createFastDomNode)(p.getDomNode());this._widgets[p.getId()]={widget:p,preference:null,domNode:_},_.setPosition(\"absolute\"),_.setAttribute(\"widgetId\",p.getId()),p.allowEditorOverflow?this.overflowingOverlayWidgetsDomNode.appendChild(_):this._domNode.appendChild(_),this.setShouldRender(),this._updateMaxMinWidth()}setWidgetPosition(p,_){const v=this._widgets[p.getId()];return v.preference===_?(this._updateMaxMinWidth(),!1):(v.preference=_,this.setShouldRender(),this._updateMaxMinWidth(),!0)}removeWidget(p){const _=p.getId();if(this._widgets.hasOwnProperty(_)){const b=this._widgets[_].domNode.domNode;delete this._widgets[_],b.remove(),this.setShouldRender(),this._updateMaxMinWidth()}}_updateMaxMinWidth(){var p,_;let v=0;const b=Object.keys(this._widgets);for(let a=0,i=b.length;a<i;a++){const n=b[a],r=(_=(p=this._widgets[n].widget).getMinContentWidthInPx)===null||_===void 0?void 0:_.call(p);typeof r<\"u\"&&(v=Math.max(v,r))}this._context.viewLayout.setOverlayWidgetsMinWidth(v)}_renderWidget(p){const _=p.domNode;if(p.preference===null){_.setTop(\"\");return}if(p.preference===0)_.setTop(0),_.setRight(2*this._verticalScrollbarWidth+this._minimapWidth);else if(p.preference===1){const v=_.domNode.clientHeight;_.setTop(this._editorHeight-v-2*this._horizontalScrollbarHeight),_.setRight(2*this._verticalScrollbarWidth+this._minimapWidth)}else if(p.preference===2)_.setTop(0),_.domNode.style.right=\"50%\";else{const{top:v,left:b}=p.preference;if(this._context.configuration.options.get(42)&&p.widget.allowEditorOverflow){const i=this._viewDomNodeRect;_.setTop(v+i.top),_.setLeft(b+i.left),_.setPosition(\"fixed\")}else _.setTop(v),_.setLeft(b),_.setPosition(\"absolute\")}}prepareRender(p){this._viewDomNodeRect=y.getDomNodePagePosition(this._viewDomNode.domNode)}render(p){this._domNode.setWidth(this._editorWidth);const _=Object.keys(this._widgets);for(let v=0,b=_.length;v<b;v++){const a=_[v];this._renderWidget(this._widgets[a])}}}e.ViewOverlayWidgets=E}),define(se[607],oe([1,0,7,12,2]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CodeEditorContributions=void 0;class E extends y.Disposable{constructor(){super(),this._editor=null,this._instantiationService=null,this._instances=this._register(new y.DisposableMap),this._pending=new Map,this._finishedInstantiation=[],this._finishedInstantiation[0]=!1,this._finishedInstantiation[1]=!1,this._finishedInstantiation[2]=!1,this._finishedInstantiation[3]=!1}initialize(p,_,v){this._editor=p,this._instantiationService=v;for(const b of _){if(this._pending.has(b.id)){(0,k.onUnexpectedError)(new Error(`Cannot have two contributions with the same id ${b.id}`));continue}this._pending.set(b.id,b)}this._instantiateSome(0),this._register((0,L.runWhenWindowIdle)((0,L.getWindow)(this._editor.getDomNode()),()=>{this._instantiateSome(1)})),this._register((0,L.runWhenWindowIdle)((0,L.getWindow)(this._editor.getDomNode()),()=>{this._instantiateSome(2)})),this._register((0,L.runWhenWindowIdle)((0,L.getWindow)(this._editor.getDomNode()),()=>{this._instantiateSome(3)},5e3))}saveViewState(){const p={};for(const[_,v]of this._instances)typeof v.saveViewState==\"function\"&&(p[_]=v.saveViewState());return p}restoreViewState(p){for(const[_,v]of this._instances)typeof v.restoreViewState==\"function\"&&v.restoreViewState(p[_])}get(p){return this._instantiateById(p),this._instances.get(p)||null}onBeforeInteractionEvent(){this._instantiateSome(2)}onAfterModelAttached(){var p;this._register((0,L.runWhenWindowIdle)((0,L.getWindow)((p=this._editor)===null||p===void 0?void 0:p.getDomNode()),()=>{this._instantiateSome(1)},50))}_instantiateSome(p){if(this._finishedInstantiation[p])return;this._finishedInstantiation[p]=!0;const _=this._findPendingContributionsByInstantiation(p);for(const v of _)this._instantiateById(v.id)}_findPendingContributionsByInstantiation(p){const _=[];for(const[,v]of this._pending)v.instantiation===p&&_.push(v);return _}_instantiateById(p){const _=this._pending.get(p);if(_){if(this._pending.delete(p),!this._instantiationService||!this._editor)throw new Error(\"Cannot instantiate contributions before being initialized!\");try{const v=this._instantiationService.createInstance(_.ctor,this._editor);this._instances.set(_.id,v),typeof v.restoreViewState==\"function\"&&_.instantiation!==0&&console.warn(`Editor contribution '${_.id}' should be eager instantiated because it uses saveViewState / restoreViewState.`)}catch(v){(0,k.onUnexpectedError)(v)}}}}e.CodeEditorContributions=E}),define(se[608],oe([1,0,158,2,35]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DiffEditorSash=void 0;class E extends k.Disposable{constructor(p,_,v,b){super(),this._options=p,this._domNode=_,this._dimensions=v,this._sashes=b,this._sashRatio=(0,y.observableValue)(this,void 0),this.sashLeft=(0,y.derived)(this,a=>{var i;const n=(i=this._sashRatio.read(a))!==null&&i!==void 0?i:this._options.splitViewDefaultRatio.read(a);return this._computeSashLeft(n,a)}),this._sash=this._register(new L.Sash(this._domNode,{getVerticalSashTop:a=>0,getVerticalSashLeft:a=>this.sashLeft.get(),getVerticalSashHeight:a=>this._dimensions.height.get()},{orientation:0})),this._startSashPosition=void 0,this._register(this._sash.onDidStart(()=>{this._startSashPosition=this.sashLeft.get()})),this._register(this._sash.onDidChange(a=>{const i=this._dimensions.width.get(),n=this._computeSashLeft((this._startSashPosition+(a.currentX-a.startX))/i,void 0);this._sashRatio.set(n/i,void 0)})),this._register(this._sash.onDidEnd(()=>this._sash.layout())),this._register(this._sash.onDidReset(()=>this._sashRatio.set(void 0,void 0))),this._register((0,y.autorun)(a=>{const i=this._sashes.read(a);i&&(this._sash.orthogonalEndSash=i.bottom)})),this._register((0,y.autorun)(a=>{const i=this._options.enableSplitViewResizing.read(a);this._sash.state=i?3:0,this.sashLeft.read(a),this._dimensions.height.read(a),this._sash.layout()}))}_computeSashLeft(p,_){const v=this._dimensions.width.read(_),b=Math.floor(this._options.splitViewDefaultRatio.read(_)*v),a=this._options.enableSplitViewResizing.read(_)?Math.floor(p*v):b,i=100;return v<=i*2?b:a<i?i:a>v-i?v-i:a}}e.DiffEditorSash=E}),define(se[87],oe([1,0,60,19,585,2,35,328,10,5,91]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.filterWithPrevious=e.bindContextKey=e.translatePosition=e.DisposableCancellationTokenSource=e.applyViewZones=e.observeHotReloadableExports=e.readHotReloadableExport=e.applyStyle=e.ManagedOverlayWidget=e.PlaceholderViewZone=e.ViewZoneOverlayWidget=e.animatedObservable=e.ObservableElementSizeObserver=e.appendRemoveOnDispose=e.applyObservableDecorations=e.joinCombine=void 0;function a(T,A,P,N){if(T.length===0)return A;if(A.length===0)return T;const M=[];let R=0,x=0;for(;R<T.length&&x<A.length;){const O=T[R],B=A[x],W=P(O),V=P(B);W<V?(M.push(O),R++):W>V?(M.push(B),x++):(M.push(N(O,B)),R++,x++)}for(;R<T.length;)M.push(T[R]),R++;for(;x<A.length;)M.push(A[x]),x++;return M}e.joinCombine=a;function i(T,A){const P=new E.DisposableStore,N=T.createDecorationsCollection();return P.add((0,S.autorunOpts)({debugName:()=>`Apply decorations from ${A.debugName}`},M=>{const R=A.read(M);N.set(R)})),P.add({dispose:()=>{N.clear()}}),P}e.applyObservableDecorations=i;function n(T,A){return T.appendChild(A),(0,E.toDisposable)(()=>{T.removeChild(A)})}e.appendRemoveOnDispose=n;class t extends E.Disposable{get width(){return this._width}get height(){return this._height}constructor(A,P){super(),this.elementSizeObserver=this._register(new p.ElementSizeObserver(A,P)),this._width=(0,S.observableValue)(this,this.elementSizeObserver.getWidth()),this._height=(0,S.observableValue)(this,this.elementSizeObserver.getHeight()),this._register(this.elementSizeObserver.onDidChange(N=>(0,S.transaction)(M=>{this._width.set(this.elementSizeObserver.getWidth(),M),this._height.set(this.elementSizeObserver.getHeight(),M)})))}observe(A){this.elementSizeObserver.observe(A)}setAutomaticLayout(A){A?this.elementSizeObserver.startObserving():this.elementSizeObserver.stopObserving()}}e.ObservableElementSizeObserver=t;function r(T,A,P){let N=A.get(),M=N,R=N;const x=(0,S.observableValue)(\"animatedValue\",N);let O=-1;const B=300;let W;P.add((0,S.autorunHandleChanges)({createEmptyChangeSummary:()=>({animate:!1}),handleChange:(K,F)=>(K.didChange(A)&&(F.animate=F.animate||K.change),!0)},(K,F)=>{W!==void 0&&(T.cancelAnimationFrame(W),W=void 0),M=R,N=A.read(K),O=Date.now()-(F.animate?0:B),V()}));function V(){const K=Date.now()-O;R=Math.floor(u(K,M,N-M,B)),K<B?W=T.requestAnimationFrame(V):R=N,x.set(R,void 0)}return x}e.animatedObservable=r;function u(T,A,P,N){return T===N?A+P:P*(-Math.pow(2,-10*T/N)+1)+A}class f extends E.Disposable{constructor(A,P,N){super(),this._register(new d(A,N)),this._register(s(N,{height:P.actualHeight,top:P.actualTop}))}}e.ViewZoneOverlayWidget=f;class c{get afterLineNumber(){return this._afterLineNumber.get()}constructor(A,P){this._afterLineNumber=A,this.heightInPx=P,this.domNode=document.createElement(\"div\"),this._actualTop=(0,S.observableValue)(this,void 0),this._actualHeight=(0,S.observableValue)(this,void 0),this.actualTop=this._actualTop,this.actualHeight=this._actualHeight,this.showInHiddenAreas=!0,this.onChange=this._afterLineNumber,this.onDomNodeTop=N=>{this._actualTop.set(N,void 0)},this.onComputedHeight=N=>{this._actualHeight.set(N,void 0)}}}e.PlaceholderViewZone=c;class d{constructor(A,P){this._editor=A,this._domElement=P,this._overlayWidgetId=`managedOverlayWidget-${d._counter++}`,this._overlayWidget={getId:()=>this._overlayWidgetId,getDomNode:()=>this._domElement,getPosition:()=>null},this._editor.addOverlayWidget(this._overlayWidget)}dispose(){this._editor.removeOverlayWidget(this._overlayWidget)}}e.ManagedOverlayWidget=d,d._counter=0;function s(T,A){return(0,S.autorun)(P=>{for(let[N,M]of Object.entries(A))M&&typeof M==\"object\"&&\"read\"in M&&(M=M.read(P)),typeof M==\"number\"&&(M=`${M}px`),N=N.replace(/[A-Z]/g,R=>\"-\"+R.toLowerCase()),T.style[N]=M})}e.applyStyle=s;function l(T,A){return o([T],A),T}e.readHotReloadableExport=l;function o(T,A){(0,y.isHotReloadEnabled)()&&(0,S.observableSignalFromEvent)(\"reload\",N=>(0,y.registerHotReloadHandler)(({oldExports:M})=>{if([...Object.values(M)].some(R=>T.includes(R)))return R=>(N(void 0),!0)})).read(A)}e.observeHotReloadableExports=o;function g(T,A,P,N){const M=new E.DisposableStore,R=[];return M.add((0,S.autorunWithStore)((x,O)=>{const B=A.read(x),W=new Map,V=new Map;P&&P(!0),T.changeViewZones(K=>{for(const F of R)K.removeZone(F),N?.delete(F);R.length=0;for(const F of B){const q=K.addZone(F);F.setZoneId&&F.setZoneId(q),R.push(q),N?.add(q),W.set(F,q)}}),P&&P(!1),O.add((0,S.autorunHandleChanges)({createEmptyChangeSummary(){return{zoneIds:[]}},handleChange(K,F){const q=V.get(K.changedObservable);return q!==void 0&&F.zoneIds.push(q),!0}},(K,F)=>{for(const q of B)q.onChange&&(V.set(q.onChange,W.get(q)),q.onChange.read(K));P&&P(!0),T.changeViewZones(q=>{for(const ie of F.zoneIds)q.layoutZone(ie)}),P&&P(!1)}))})),M.add({dispose(){P&&P(!0),T.changeViewZones(x=>{for(const O of R)x.removeZone(O)}),N?.clear(),P&&P(!1)}}),M}e.applyViewZones=g;class h extends k.CancellationTokenSource{dispose(){super.dispose(!0)}}e.DisposableCancellationTokenSource=h;function m(T,A){const P=(0,L.findLast)(A,M=>M.original.startLineNumber<=T.lineNumber);if(!P)return v.Range.fromPositions(T);if(P.original.endLineNumberExclusive<=T.lineNumber){const M=T.lineNumber-P.original.endLineNumberExclusive+P.modified.endLineNumberExclusive;return v.Range.fromPositions(new _.Position(M,T.column))}if(!P.innerChanges)return v.Range.fromPositions(new _.Position(P.modified.startLineNumber,1));const N=(0,L.findLast)(P.innerChanges,M=>M.originalRange.getStartPosition().isBeforeOrEqual(T));if(!N){const M=T.lineNumber-P.original.startLineNumber+P.modified.startLineNumber;return v.Range.fromPositions(new _.Position(M,T.column))}if(N.originalRange.containsPosition(T))return N.modifiedRange;{const M=C(N.originalRange.getEndPosition(),T);return v.Range.fromPositions(w(N.modifiedRange.getEndPosition(),M))}}e.translatePosition=m;function C(T,A){return T.lineNumber===A.lineNumber?new b.LengthObj(0,A.column-T.column):new b.LengthObj(A.lineNumber-T.lineNumber,A.column-1)}function w(T,A){return A.lineCount===0?new _.Position(T.lineNumber,T.column+A.columnCount):new _.Position(T.lineNumber+A.lineCount,A.columnCount+1)}function D(T,A,P){const N=T.bindTo(A);return(0,S.autorunOpts)({debugName:()=>`Update ${T.key}`},M=>{N.set(P(M))})}e.bindContextKey=D;function I(T,A){let P;return T.filter(N=>{const M=A(N,P);return P=N,M})}e.filterWithPrevious=I}),define(se[102],oe([1,0,11,17,144]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StringBuilder=e.decodeUTF16LE=e.getPlatformTextDecoder=void 0;let E;function S(){return E||(E=new TextDecoder(\"UTF-16LE\")),E}let p;function _(){return p||(p=new TextDecoder(\"UTF-16BE\")),p}let v;function b(){return v||(v=k.isLittleEndian()?S():_()),v}e.getPlatformTextDecoder=b;function a(t,r,u){const f=new Uint16Array(t.buffer,r,u);return u>0&&(f[0]===65279||f[0]===65534)?i(t,r,u):S().decode(f)}e.decodeUTF16LE=a;function i(t,r,u){const f=[];let c=0;for(let d=0;d<u;d++){const s=y.readUInt16LE(t,r);r+=2,f[c++]=String.fromCharCode(s)}return f.join(\"\")}class n{constructor(r){this._capacity=r|0,this._buffer=new Uint16Array(this._capacity),this._completedStrings=null,this._bufferLength=0}reset(){this._completedStrings=null,this._bufferLength=0}build(){return this._completedStrings!==null?(this._flushBuffer(),this._completedStrings.join(\"\")):this._buildBuffer()}_buildBuffer(){if(this._bufferLength===0)return\"\";const r=new Uint16Array(this._buffer.buffer,0,this._bufferLength);return b().decode(r)}_flushBuffer(){const r=this._buildBuffer();this._bufferLength=0,this._completedStrings===null?this._completedStrings=[r]:this._completedStrings[this._completedStrings.length]=r}appendCharCode(r){const u=this._capacity-this._bufferLength;u<=1&&(u===0||L.isHighSurrogate(r))&&this._flushBuffer(),this._buffer[this._bufferLength++]=r}appendASCIICharCode(r){this._bufferLength===this._capacity&&this._flushBuffer(),this._buffer[this._bufferLength++]=r}appendString(r){const u=r.length;if(this._bufferLength+u>=this._capacity){this._flushBuffer(),this._completedStrings[this._completedStrings.length]=r;return}for(let f=0;f<u;f++)this._buffer[this._bufferLength++]=r.charCodeAt(f)}}e.StringBuilder=n}),define(se[609],oe([1,0,93,11,20,72,102,294,114]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DOMLineBreaksComputerFactory=void 0;const v=(0,L.createTrustedTypesPolicy)(\"domLineBreaksComputer\",{createHTML:u=>u});class b{static create(f){return new b(new WeakRef(f))}constructor(f){this.targetWindow=f}createLineBreaksComputer(f,c,d,s,l){const o=[],g=[];return{addRequest:(h,m,C)=>{o.push(h),g.push(m)},finalize:()=>a((0,y.assertIsDefined)(this.targetWindow.deref()),o,f,c,d,s,l,g)}}}e.DOMLineBreaksComputerFactory=b;function a(u,f,c,d,s,l,o,g){var h;function m(F){const q=g[F];if(q){const ie=_.LineInjectedText.applyInjectedText(f[F],q),ae=q.map($=>$.options),ne=q.map($=>$.column-1);return new p.ModelLineProjectionData(ne,ae,[ie.length],[],0)}else return null}if(s===-1){const F=[];for(let q=0,ie=f.length;q<ie;q++)F[q]=m(q);return F}const C=Math.round(s*c.typicalHalfwidthCharacterWidth),D=Math.round(d*(l===3?2:l===2?1:0)),I=Math.ceil(c.spaceWidth*D),T=document.createElement(\"div\");(0,E.applyFontInfo)(T,c);const A=new S.StringBuilder(1e4),P=[],N=[],M=[],R=[],x=[];for(let F=0;F<f.length;F++){const q=_.LineInjectedText.applyInjectedText(f[F],g[F]);let ie=0,ae=0,ne=C;if(l!==0)if(ie=k.firstNonWhitespaceIndex(q),ie===-1)ie=0;else{for(let re=0;re<ie;re++){const de=q.charCodeAt(re)===9?d-ae%d:1;ae+=de}const Q=Math.ceil(c.spaceWidth*ae);Q+c.typicalFullwidthCharacterWidth>C?(ie=0,ae=0):ne=C-Q}const $=q.substr(ie),J=i($,ae,d,ne,A,I);P[F]=ie,N[F]=ae,M[F]=$,R[F]=J[0],x[F]=J[1]}const O=A.build(),B=(h=v?.createHTML(O))!==null&&h!==void 0?h:O;T.innerHTML=B,T.style.position=\"absolute\",T.style.top=\"10000\",o===\"keepAll\"?(T.style.wordBreak=\"keep-all\",T.style.overflowWrap=\"anywhere\"):(T.style.wordBreak=\"inherit\",T.style.overflowWrap=\"break-word\"),u.document.body.appendChild(T);const W=document.createRange(),V=Array.prototype.slice.call(T.children,0),K=[];for(let F=0;F<f.length;F++){const q=V[F],ie=n(W,q,M[F],R[F]);if(ie===null){K[F]=m(F);continue}const ae=P[F],ne=N[F]+D,$=x[F],J=[];for(let he=0,me=ie.length;he<me;he++)J[he]=$[ie[he]];if(ae!==0)for(let he=0,me=ie.length;he<me;he++)ie[he]+=ae;let Q,re;const de=g[F];de?(Q=de.map(he=>he.options),re=de.map(he=>he.column-1)):(Q=null,re=null),K[F]=new p.ModelLineProjectionData(re,Q,ie,J,ne)}return u.document.body.removeChild(T),K}function i(u,f,c,d,s,l){if(l!==0){const D=String(l);s.appendString('<div style=\"text-indent: -'),s.appendString(D),s.appendString(\"px; padding-left: \"),s.appendString(D),s.appendString(\"px; box-sizing: border-box; width:\")}else s.appendString('<div style=\"width:');s.appendString(String(d)),s.appendString('px;\">');const o=u.length;let g=f,h=0;const m=[],C=[];let w=0<o?u.charCodeAt(0):0;s.appendString(\"<span>\");for(let D=0;D<o;D++){D!==0&&D%16384===0&&s.appendString(\"</span><span>\"),m[D]=h,C[D]=g;const I=w;w=D+1<o?u.charCodeAt(D+1):0;let T=1,A=1;switch(I){case 9:T=c-g%c,A=T;for(let P=1;P<=T;P++)P<T?s.appendCharCode(160):s.appendASCIICharCode(32);break;case 32:w===32?s.appendCharCode(160):s.appendASCIICharCode(32);break;case 60:s.appendString(\"&lt;\");break;case 62:s.appendString(\"&gt;\");break;case 38:s.appendString(\"&amp;\");break;case 0:s.appendString(\"&#00;\");break;case 65279:case 8232:case 8233:case 133:s.appendCharCode(65533);break;default:k.isFullWidthCharacter(I)&&A++,I<32?s.appendCharCode(9216+I):s.appendCharCode(I)}h+=T,g+=A}return s.appendString(\"</span>\"),m[u.length]=h,C[u.length]=g,s.appendString(\"</div>\"),[m,C]}function n(u,f,c,d){if(c.length<=1)return null;const s=Array.prototype.slice.call(f.children,0),l=[];try{t(u,s,d,0,null,c.length-1,null,l)}catch(o){return console.log(o),null}return l.length===0?null:(l.push(c.length),l)}function t(u,f,c,d,s,l,o,g){if(d===l||(s=s||r(u,f,c[d],c[d+1]),o=o||r(u,f,c[l],c[l+1]),Math.abs(s[0].top-o[0].top)<=.1))return;if(d+1===l){g.push(l);return}const h=d+(l-d)/2|0,m=r(u,f,c[h],c[h+1]);t(u,f,c,d,s,h,m,g),t(u,f,c,h,m,l,o,g)}function r(u,f,c,d){return u.setStart(f[c/16384|0].firstChild,c%16384),u.setEnd(f[d/16384|0].firstChild,d%16384),u.getClientRects()}}),define(se[233],oe([1,0,40,93,12,102]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.VisibleLinesCollection=e.RenderedLinesCollection=void 0;class S{constructor(b){this._createLine=b,this._set(1,[])}flush(){this._set(1,[])}_set(b,a){this._lines=a,this._rendLineNumberStart=b}_get(){return{rendLineNumberStart:this._rendLineNumberStart,lines:this._lines}}getStartLineNumber(){return this._rendLineNumberStart}getEndLineNumber(){return this._rendLineNumberStart+this._lines.length-1}getCount(){return this._lines.length}getLine(b){const a=b-this._rendLineNumberStart;if(a<0||a>=this._lines.length)throw new y.BugIndicatingError(\"Illegal value for lineNumber\");return this._lines[a]}onLinesDeleted(b,a){if(this.getCount()===0)return null;const i=this.getStartLineNumber(),n=this.getEndLineNumber();if(a<i){const f=a-b+1;return this._rendLineNumberStart-=f,null}if(b>n)return null;let t=0,r=0;for(let f=i;f<=n;f++){const c=f-this._rendLineNumberStart;b<=f&&f<=a&&(r===0?(t=c,r=1):r++)}if(b<i){let f=0;a<i?f=a-b+1:f=i-b,this._rendLineNumberStart-=f}return this._lines.splice(t,r)}onLinesChanged(b,a){const i=b+a-1;if(this.getCount()===0)return!1;const n=this.getStartLineNumber(),t=this.getEndLineNumber();let r=!1;for(let u=b;u<=i;u++)u>=n&&u<=t&&(this._lines[u-this._rendLineNumberStart].onContentChanged(),r=!0);return r}onLinesInserted(b,a){if(this.getCount()===0)return null;const i=a-b+1,n=this.getStartLineNumber(),t=this.getEndLineNumber();if(b<=n)return this._rendLineNumberStart+=i,null;if(b>t)return null;if(i+b>t)return this._lines.splice(b-this._rendLineNumberStart,t-b+1);const r=[];for(let s=0;s<i;s++)r[s]=this._createLine();const u=b-this._rendLineNumberStart,f=this._lines.slice(0,u),c=this._lines.slice(u,this._lines.length-i),d=this._lines.slice(this._lines.length-i,this._lines.length);return this._lines=f.concat(r).concat(c),d}onTokensChanged(b){if(this.getCount()===0)return!1;const a=this.getStartLineNumber(),i=this.getEndLineNumber();let n=!1;for(let t=0,r=b.length;t<r;t++){const u=b[t];if(u.toLineNumber<a||u.fromLineNumber>i)continue;const f=Math.max(a,u.fromLineNumber),c=Math.min(i,u.toLineNumber);for(let d=f;d<=c;d++){const s=d-this._rendLineNumberStart;this._lines[s].onTokensChanged(),n=!0}}return n}}e.RenderedLinesCollection=S;class p{constructor(b){this._host=b,this.domNode=this._createDomNode(),this._linesCollection=new S(()=>this._host.createVisibleLine())}_createDomNode(){const b=(0,L.createFastDomNode)(document.createElement(\"div\"));return b.setClassName(\"view-layer\"),b.setPosition(\"absolute\"),b.domNode.setAttribute(\"role\",\"presentation\"),b.domNode.setAttribute(\"aria-hidden\",\"true\"),b}onConfigurationChanged(b){return!!b.hasChanged(143)}onFlushed(b){return this._linesCollection.flush(),!0}onLinesChanged(b){return this._linesCollection.onLinesChanged(b.fromLineNumber,b.count)}onLinesDeleted(b){const a=this._linesCollection.onLinesDeleted(b.fromLineNumber,b.toLineNumber);if(a)for(let i=0,n=a.length;i<n;i++){const t=a[i].getDomNode();t&&this.domNode.domNode.removeChild(t)}return!0}onLinesInserted(b){const a=this._linesCollection.onLinesInserted(b.fromLineNumber,b.toLineNumber);if(a)for(let i=0,n=a.length;i<n;i++){const t=a[i].getDomNode();t&&this.domNode.domNode.removeChild(t)}return!0}onScrollChanged(b){return b.scrollTopChanged}onTokensChanged(b){return this._linesCollection.onTokensChanged(b.ranges)}onZonesChanged(b){return!0}getStartLineNumber(){return this._linesCollection.getStartLineNumber()}getEndLineNumber(){return this._linesCollection.getEndLineNumber()}getVisibleLine(b){return this._linesCollection.getLine(b)}renderLines(b){const a=this._linesCollection._get(),i=new _(this.domNode.domNode,this._host,b),n={rendLineNumberStart:a.rendLineNumberStart,lines:a.lines,linesLength:a.lines.length},t=i.render(n,b.startLineNumber,b.endLineNumber,b.relativeVerticalOffset);this._linesCollection._set(t.rendLineNumberStart,t.lines)}}e.VisibleLinesCollection=p;class _{constructor(b,a,i){this.domNode=b,this.host=a,this.viewportData=i}render(b,a,i,n){const t={rendLineNumberStart:b.rendLineNumberStart,lines:b.lines.slice(0),linesLength:b.linesLength};if(t.rendLineNumberStart+t.linesLength-1<a||i<t.rendLineNumberStart){t.rendLineNumberStart=a,t.linesLength=i-a+1,t.lines=[];for(let r=a;r<=i;r++)t.lines[r-a]=this.host.createVisibleLine();return this._finishRendering(t,!0,n),t}if(this._renderUntouchedLines(t,Math.max(a-t.rendLineNumberStart,0),Math.min(i-t.rendLineNumberStart,t.linesLength-1),n,a),t.rendLineNumberStart>a){const r=a,u=Math.min(i,t.rendLineNumberStart-1);r<=u&&(this._insertLinesBefore(t,r,u,n,a),t.linesLength+=u-r+1)}else if(t.rendLineNumberStart<a){const r=Math.min(t.linesLength,a-t.rendLineNumberStart);r>0&&(this._removeLinesBefore(t,r),t.linesLength-=r)}if(t.rendLineNumberStart=a,t.rendLineNumberStart+t.linesLength-1<i){const r=t.rendLineNumberStart+t.linesLength,u=i;r<=u&&(this._insertLinesAfter(t,r,u,n,a),t.linesLength+=u-r+1)}else if(t.rendLineNumberStart+t.linesLength-1>i){const r=Math.max(0,i-t.rendLineNumberStart+1),f=t.linesLength-1-r+1;f>0&&(this._removeLinesAfter(t,f),t.linesLength-=f)}return this._finishRendering(t,!1,n),t}_renderUntouchedLines(b,a,i,n,t){const r=b.rendLineNumberStart,u=b.lines;for(let f=a;f<=i;f++){const c=r+f;u[f].layoutLine(c,n[c-t])}}_insertLinesBefore(b,a,i,n,t){const r=[];let u=0;for(let f=a;f<=i;f++)r[u++]=this.host.createVisibleLine();b.lines=r.concat(b.lines)}_removeLinesBefore(b,a){for(let i=0;i<a;i++){const n=b.lines[i].getDomNode();n&&this.domNode.removeChild(n)}b.lines.splice(0,a)}_insertLinesAfter(b,a,i,n,t){const r=[];let u=0;for(let f=a;f<=i;f++)r[u++]=this.host.createVisibleLine();b.lines=b.lines.concat(r)}_removeLinesAfter(b,a){const i=b.linesLength-a;for(let n=0;n<a;n++){const t=b.lines[i+n].getDomNode();t&&this.domNode.removeChild(t)}b.lines.splice(i,a)}_finishRenderingNewLines(b,a,i,n){_._ttPolicy&&(i=_._ttPolicy.createHTML(i));const t=this.domNode.lastChild;a||!t?this.domNode.innerHTML=i:t.insertAdjacentHTML(\"afterend\",i);let r=this.domNode.lastChild;for(let u=b.linesLength-1;u>=0;u--){const f=b.lines[u];n[u]&&(f.setDomNode(r),r=r.previousSibling)}}_finishRenderingInvalidLines(b,a,i){const n=document.createElement(\"div\");_._ttPolicy&&(a=_._ttPolicy.createHTML(a)),n.innerHTML=a;for(let t=0;t<b.linesLength;t++){const r=b.lines[t];if(i[t]){const u=n.firstChild,f=r.getDomNode();f.parentNode.replaceChild(u,f),r.setDomNode(u)}}}_finishRendering(b,a,i){const n=_._sb,t=b.linesLength,r=b.lines,u=b.rendLineNumberStart,f=[];{n.reset();let c=!1;for(let d=0;d<t;d++){const s=r[d];f[d]=!1,!(s.getDomNode()||!s.renderLine(d+u,i[d],this.viewportData,n))&&(f[d]=!0,c=!0)}c&&this._finishRenderingNewLines(b,a,n.build(),f)}{n.reset();let c=!1;const d=[];for(let s=0;s<t;s++){const l=r[s];d[s]=!1,!(f[s]||!l.renderLine(s+u,i[s],this.viewportData,n))&&(d[s]=!0,c=!0)}c&&this._finishRenderingInvalidLines(b,n.build(),d)}}}_._ttPolicy=(0,k.createTrustedTypesPolicy)(\"editorViewLayer\",{createHTML:v=>v}),_._sb=new E.StringBuilder(1e5)}),define(se[610],oe([1,0,40,72,233,56]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MarginViewOverlays=e.ContentViewOverlays=e.ViewOverlayLine=e.ViewOverlays=void 0;class S extends E.ViewPart{constructor(a){super(a),this._visibleLines=new y.VisibleLinesCollection(this),this.domNode=this._visibleLines.domNode;const n=this._context.configuration.options.get(50);(0,k.applyFontInfo)(this.domNode,n),this._dynamicOverlays=[],this._isFocused=!1,this.domNode.setClassName(\"view-overlays\")}shouldRender(){if(super.shouldRender())return!0;for(let a=0,i=this._dynamicOverlays.length;a<i;a++)if(this._dynamicOverlays[a].shouldRender())return!0;return!1}dispose(){super.dispose();for(let a=0,i=this._dynamicOverlays.length;a<i;a++)this._dynamicOverlays[a].dispose();this._dynamicOverlays=[]}getDomNode(){return this.domNode}createVisibleLine(){return new p(this._context.configuration,this._dynamicOverlays)}addDynamicOverlay(a){this._dynamicOverlays.push(a)}onConfigurationChanged(a){this._visibleLines.onConfigurationChanged(a);const i=this._visibleLines.getStartLineNumber(),n=this._visibleLines.getEndLineNumber();for(let u=i;u<=n;u++)this._visibleLines.getVisibleLine(u).onConfigurationChanged(a);const r=this._context.configuration.options.get(50);return(0,k.applyFontInfo)(this.domNode,r),!0}onFlushed(a){return this._visibleLines.onFlushed(a)}onFocusChanged(a){return this._isFocused=a.isFocused,!0}onLinesChanged(a){return this._visibleLines.onLinesChanged(a)}onLinesDeleted(a){return this._visibleLines.onLinesDeleted(a)}onLinesInserted(a){return this._visibleLines.onLinesInserted(a)}onScrollChanged(a){return this._visibleLines.onScrollChanged(a)||!0}onTokensChanged(a){return this._visibleLines.onTokensChanged(a)}onZonesChanged(a){return this._visibleLines.onZonesChanged(a)}prepareRender(a){const i=this._dynamicOverlays.filter(n=>n.shouldRender());for(let n=0,t=i.length;n<t;n++){const r=i[n];r.prepareRender(a),r.onDidRender()}}render(a){this._viewOverlaysRender(a),this.domNode.toggleClassName(\"focused\",this._isFocused)}_viewOverlaysRender(a){this._visibleLines.renderLines(a.viewportData)}}e.ViewOverlays=S;class p{constructor(a,i){this._configuration=a,this._lineHeight=this._configuration.options.get(66),this._dynamicOverlays=i,this._domNode=null,this._renderedContent=null}getDomNode(){return this._domNode?this._domNode.domNode:null}setDomNode(a){this._domNode=(0,L.createFastDomNode)(a)}onContentChanged(){}onTokensChanged(){}onConfigurationChanged(a){this._lineHeight=this._configuration.options.get(66)}renderLine(a,i,n,t){let r=\"\";for(let u=0,f=this._dynamicOverlays.length;u<f;u++){const c=this._dynamicOverlays[u];r+=c.render(n.startLineNumber,a)}return this._renderedContent===r?!1:(this._renderedContent=r,t.appendString('<div style=\"position:absolute;top:'),t.appendString(String(i)),t.appendString(\"px;width:100%;height:\"),t.appendString(String(this._lineHeight)),t.appendString('px;\">'),t.appendString(r),t.appendString(\"</div>\"),!0)}layoutLine(a,i){this._domNode&&(this._domNode.setTop(i),this._domNode.setHeight(this._lineHeight))}}e.ViewOverlayLine=p;class _ extends S{constructor(a){super(a);const n=this._context.configuration.options.get(143);this._contentWidth=n.contentWidth,this.domNode.setHeight(0)}onConfigurationChanged(a){const n=this._context.configuration.options.get(143);return this._contentWidth=n.contentWidth,super.onConfigurationChanged(a)||!0}onScrollChanged(a){return super.onScrollChanged(a)||a.scrollWidthChanged}_viewOverlaysRender(a){super._viewOverlaysRender(a),this.domNode.setWidth(Math.max(a.scrollWidth,this._contentWidth))}}e.ContentViewOverlays=_;class v extends S{constructor(a){super(a);const i=this._context.configuration.options,n=i.get(143);this._contentLeft=n.contentLeft,this.domNode.setClassName(\"margin-view-overlays\"),this.domNode.setWidth(1),(0,k.applyFontInfo)(this.domNode,i.get(50))}onConfigurationChanged(a){const i=this._context.configuration.options;(0,k.applyFontInfo)(this.domNode,i.get(50));const n=i.get(143);return this._contentLeft=n.contentLeft,super.onConfigurationChanged(a)||!0}onScrollChanged(a){return super.onScrollChanged(a)||a.scrollHeightChanged}_viewOverlaysRender(a){super._viewOverlaysRender(a);const i=Math.min(a.scrollHeight,1e6);this.domNode.setHeight(i),this.domNode.setWidth(this._contentLeft)}}e.MarginViewOverlays=v}),define(se[329],oe([1,0,144,102]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.compressConsecutiveTextChanges=e.TextChange=void 0;function y(_){return _.replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\")}class E{get oldLength(){return this.oldText.length}get oldEnd(){return this.oldPosition+this.oldText.length}get newLength(){return this.newText.length}get newEnd(){return this.newPosition+this.newText.length}constructor(v,b,a,i){this.oldPosition=v,this.oldText=b,this.newPosition=a,this.newText=i}toString(){return this.oldText.length===0?`(insert@${this.oldPosition} \"${y(this.newText)}\")`:this.newText.length===0?`(delete@${this.oldPosition} \"${y(this.oldText)}\")`:`(replace@${this.oldPosition} \"${y(this.oldText)}\" with \"${y(this.newText)}\")`}static _writeStringSize(v){return 4+2*v.length}static _writeString(v,b,a){const i=b.length;L.writeUInt32BE(v,i,a),a+=4;for(let n=0;n<i;n++)L.writeUInt16LE(v,b.charCodeAt(n),a),a+=2;return a}static _readString(v,b){const a=L.readUInt32BE(v,b);return b+=4,(0,k.decodeUTF16LE)(v,b,a)}writeSize(){return 4+4+E._writeStringSize(this.oldText)+E._writeStringSize(this.newText)}write(v,b){return L.writeUInt32BE(v,this.oldPosition,b),b+=4,L.writeUInt32BE(v,this.newPosition,b),b+=4,b=E._writeString(v,this.oldText,b),b=E._writeString(v,this.newText,b),b}static read(v,b,a){const i=L.readUInt32BE(v,b);b+=4;const n=L.readUInt32BE(v,b);b+=4;const t=E._readString(v,b);b+=E._writeStringSize(t);const r=E._readString(v,b);return b+=E._writeStringSize(r),a.push(new E(i,t,n,r)),b}}e.TextChange=E;function S(_,v){return _===null||_.length===0?v:new p(_,v).compress()}e.compressConsecutiveTextChanges=S;class p{constructor(v,b){this._prevEdits=v,this._currEdits=b,this._result=[],this._resultLen=0,this._prevLen=this._prevEdits.length,this._prevDeltaOffset=0,this._currLen=this._currEdits.length,this._currDeltaOffset=0}compress(){let v=0,b=0,a=this._getPrev(v),i=this._getCurr(b);for(;v<this._prevLen||b<this._currLen;){if(a===null){this._acceptCurr(i),i=this._getCurr(++b);continue}if(i===null){this._acceptPrev(a),a=this._getPrev(++v);continue}if(i.oldEnd<=a.newPosition){this._acceptCurr(i),i=this._getCurr(++b);continue}if(a.newEnd<=i.oldPosition){this._acceptPrev(a),a=this._getPrev(++v);continue}if(i.oldPosition<a.newPosition){const[f,c]=p._splitCurr(i,a.newPosition-i.oldPosition);this._acceptCurr(f),i=c;continue}if(a.newPosition<i.oldPosition){const[f,c]=p._splitPrev(a,i.oldPosition-a.newPosition);this._acceptPrev(f),a=c;continue}let r,u;if(i.oldEnd===a.newEnd)r=a,u=i,a=this._getPrev(++v),i=this._getCurr(++b);else if(i.oldEnd<a.newEnd){const[f,c]=p._splitPrev(a,i.oldLength);r=f,u=i,a=c,i=this._getCurr(++b)}else{const[f,c]=p._splitCurr(i,a.newLength);r=a,u=f,a=this._getPrev(++v),i=c}this._result[this._resultLen++]=new E(r.oldPosition,r.oldText,u.newPosition,u.newText),this._prevDeltaOffset+=r.newLength-r.oldLength,this._currDeltaOffset+=u.newLength-u.oldLength}const n=p._merge(this._result);return p._removeNoOps(n)}_acceptCurr(v){this._result[this._resultLen++]=p._rebaseCurr(this._prevDeltaOffset,v),this._currDeltaOffset+=v.newLength-v.oldLength}_getCurr(v){return v<this._currLen?this._currEdits[v]:null}_acceptPrev(v){this._result[this._resultLen++]=p._rebasePrev(this._currDeltaOffset,v),this._prevDeltaOffset+=v.newLength-v.oldLength}_getPrev(v){return v<this._prevLen?this._prevEdits[v]:null}static _rebaseCurr(v,b){return new E(b.oldPosition-v,b.oldText,b.newPosition,b.newText)}static _rebasePrev(v,b){return new E(b.oldPosition,b.oldText,b.newPosition+v,b.newText)}static _splitPrev(v,b){const a=v.newText.substr(0,b),i=v.newText.substr(b);return[new E(v.oldPosition,v.oldText,v.newPosition,a),new E(v.oldEnd,\"\",v.newPosition+b,i)]}static _splitCurr(v,b){const a=v.oldText.substr(0,b),i=v.oldText.substr(b);return[new E(v.oldPosition,a,v.newPosition,v.newText),new E(v.oldPosition+b,i,v.newEnd,\"\")]}static _merge(v){if(v.length===0)return v;const b=[];let a=0,i=v[0];for(let n=1;n<v.length;n++){const t=v[n];i.oldEnd===t.oldPosition?i=new E(i.oldPosition,i.oldText+t.oldText,i.newPosition,i.newText+t.newText):(b[a++]=i,i=t)}return b[a++]=i,b}static _removeNoOps(v){if(v.length===0)return v;const b=[];let a=0;for(let i=0;i<v.length;i++){const n=v[i];n.oldText!==n.newText&&(b[a++]=n)}return b}}}),define(se[330],oe([1,0,315,95]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.score=void 0;function y(E,S,p,_,v,b){if(Array.isArray(E)){let a=0;for(const i of E){const n=y(i,S,p,_,v,b);if(n===10)return n;n>a&&(a=n)}return a}else{if(typeof E==\"string\")return _?E===\"*\"?5:E===p?10:0:0;if(E){const{language:a,pattern:i,scheme:n,hasAccessToAllModels:t,notebookType:r}=E;if(!_&&!t)return 0;r&&v&&(S=v);let u=0;if(n)if(n===S.scheme)u=10;else if(n===\"*\")u=5;else return 0;if(a)if(a===p)u=10;else if(a===\"*\")u=Math.max(u,5);else return 0;if(r)if(r===b)u=10;else if(r===\"*\"&&b!==void 0)u=Math.max(u,5);else return 0;if(i){let f;if(typeof i==\"string\"?f=i:f={...i,base:(0,k.normalize)(i.base)},f===S.fsPath||(0,L.match)(f,S.fsPath))u=10;else return 0}return u}else return 0}}e.score=y}),define(se[611],oe([1,0,6,2,41,330]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LanguageFeatureRegistry=void 0;function S(b){return typeof b==\"string\"?!1:Array.isArray(b)?b.every(S):!!b.exclusive}class p{constructor(a,i,n,t){this.uri=a,this.languageId=i,this.notebookUri=n,this.notebookType=t}equals(a){var i,n;return this.notebookType===a.notebookType&&this.languageId===a.languageId&&this.uri.toString()===a.uri.toString()&&((i=this.notebookUri)===null||i===void 0?void 0:i.toString())===((n=a.notebookUri)===null||n===void 0?void 0:n.toString())}}class _{constructor(a){this._notebookInfoResolver=a,this._clock=0,this._entries=[],this._onDidChange=new L.Emitter,this.onDidChange=this._onDidChange.event}register(a,i){let n={selector:a,provider:i,_score:-1,_time:this._clock++};return this._entries.push(n),this._lastCandidate=void 0,this._onDidChange.fire(this._entries.length),(0,k.toDisposable)(()=>{if(n){const t=this._entries.indexOf(n);t>=0&&(this._entries.splice(t,1),this._lastCandidate=void 0,this._onDidChange.fire(this._entries.length),n=void 0)}})}has(a){return this.all(a).length>0}all(a){if(!a)return[];this._updateScores(a);const i=[];for(const n of this._entries)n._score>0&&i.push(n.provider);return i}ordered(a){const i=[];return this._orderedForEach(a,n=>i.push(n.provider)),i}orderedGroups(a){const i=[];let n,t;return this._orderedForEach(a,r=>{n&&t===r._score?n.push(r.provider):(t=r._score,n=[r.provider],i.push(n))}),i}_orderedForEach(a,i){this._updateScores(a);for(const n of this._entries)n._score>0&&i(n)}_updateScores(a){var i,n;const t=(i=this._notebookInfoResolver)===null||i===void 0?void 0:i.call(this,a.uri),r=t?new p(a.uri,a.getLanguageId(),t.uri,t.type):new p(a.uri,a.getLanguageId(),void 0,void 0);if(!(!((n=this._lastCandidate)===null||n===void 0)&&n.equals(r))){this._lastCandidate=r;for(const u of this._entries)if(u._score=(0,E.score)(u.selector,r.uri,r.languageId,(0,y.shouldSynchronizeModel)(a),r.notebookUri,r.notebookType),S(u.selector)&&u._score>0){for(const f of this._entries)f._score=0;u._score=1e3;break}this._entries.sort(_._compareByScoreAndTime)}}static _compareByScoreAndTime(a,i){return a._score<i._score?1:a._score>i._score?-1:v(a.selector)&&!v(i.selector)?1:!v(a.selector)&&v(i.selector)?-1:a._time<i._time?1:a._time>i._time?-1:0}}e.LanguageFeatureRegistry=_;function v(b){return typeof b==\"string\"?!1:Array.isArray(b)?b.some(v):!!b.isBuiltin}}),define(se[234],oe([1,0,11,102,5]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BracketsUtils=e.RichEditBrackets=e.RichEditBracket=void 0;class E{constructor(s,l,o,g,h,m){this._richEditBracketBrand=void 0,this.languageId=s,this.index=l,this.open=o,this.close=g,this.forwardRegex=h,this.reversedRegex=m,this._openSet=E._toSet(this.open),this._closeSet=E._toSet(this.close)}isOpen(s){return this._openSet.has(s)}isClose(s){return this._closeSet.has(s)}static _toSet(s){const l=new Set;for(const o of s)l.add(o);return l}}e.RichEditBracket=E;function S(d){const s=d.length;d=d.map(m=>[m[0].toLowerCase(),m[1].toLowerCase()]);const l=[];for(let m=0;m<s;m++)l[m]=m;const o=(m,C)=>{const[w,D]=m,[I,T]=C;return w===I||w===T||D===I||D===T},g=(m,C)=>{const w=Math.min(m,C),D=Math.max(m,C);for(let I=0;I<s;I++)l[I]===D&&(l[I]=w)};for(let m=0;m<s;m++){const C=d[m];for(let w=m+1;w<s;w++){const D=d[w];o(C,D)&&g(l[m],l[w])}}const h=[];for(let m=0;m<s;m++){const C=[],w=[];for(let D=0;D<s;D++)if(l[D]===m){const[I,T]=d[D];C.push(I),w.push(T)}C.length>0&&h.push({open:C,close:w})}return h}class p{constructor(s,l){this._richEditBracketsBrand=void 0;const o=S(l);this.brackets=o.map((g,h)=>new E(s,h,g.open,g.close,a(g.open,g.close,o,h),i(g.open,g.close,o,h))),this.forwardRegex=n(this.brackets),this.reversedRegex=t(this.brackets),this.textIsBracket={},this.textIsOpenBracket={},this.maxBracketLength=0;for(const g of this.brackets){for(const h of g.open)this.textIsBracket[h]=g,this.textIsOpenBracket[h]=!0,this.maxBracketLength=Math.max(this.maxBracketLength,h.length);for(const h of g.close)this.textIsBracket[h]=g,this.textIsOpenBracket[h]=!1,this.maxBracketLength=Math.max(this.maxBracketLength,h.length)}}}e.RichEditBrackets=p;function _(d,s,l,o){for(let g=0,h=s.length;g<h;g++){if(g===l)continue;const m=s[g];for(const C of m.open)C.indexOf(d)>=0&&o.push(C);for(const C of m.close)C.indexOf(d)>=0&&o.push(C)}}function v(d,s){return d.length-s.length}function b(d){if(d.length<=1)return d;const s=[],l=new Set;for(const o of d)l.has(o)||(s.push(o),l.add(o));return s}function a(d,s,l,o){let g=[];g=g.concat(d),g=g.concat(s);for(let h=0,m=g.length;h<m;h++)_(g[h],l,o,g);return g=b(g),g.sort(v),g.reverse(),u(g)}function i(d,s,l,o){let g=[];g=g.concat(d),g=g.concat(s);for(let h=0,m=g.length;h<m;h++)_(g[h],l,o,g);return g=b(g),g.sort(v),g.reverse(),u(g.map(f))}function n(d){let s=[];for(const l of d){for(const o of l.open)s.push(o);for(const o of l.close)s.push(o)}return s=b(s),u(s)}function t(d){let s=[];for(const l of d){for(const o of l.open)s.push(o);for(const o of l.close)s.push(o)}return s=b(s),u(s.map(f))}function r(d){const s=/^[\\w ]+$/.test(d);return d=L.escapeRegExpCharacters(d),s?`\\\\b${d}\\\\b`:d}function u(d){const s=`(${d.map(r).join(\")|(\")})`;return L.createRegExp(s,!0)}const f=function(){function d(o){const g=new Uint16Array(o.length);let h=0;for(let m=o.length-1;m>=0;m--)g[h++]=o.charCodeAt(m);return k.getPlatformTextDecoder().decode(g)}let s=null,l=null;return function(g){return s!==g&&(s=g,l=d(s)),l}}();class c{static _findPrevBracketInText(s,l,o,g){const h=o.match(s);if(!h)return null;const m=o.length-(h.index||0),C=h[0].length,w=g+m;return new y.Range(l,w-C+1,l,w+1)}static findPrevBracketInRange(s,l,o,g,h){const C=f(o).substring(o.length-h,o.length-g);return this._findPrevBracketInText(s,l,C,g)}static findNextBracketInText(s,l,o,g){const h=o.match(s);if(!h)return null;const m=h.index||0,C=h[0].length;if(C===0)return null;const w=g+m;return new y.Range(l,w+1,l,w+1+C)}static findNextBracketInRange(s,l,o,g,h){const m=o.substring(g,h);return this.findNextBracketInText(s,l,m,g)}}e.BracketsUtils=c}),define(se[612],oe([1,0,13,133,234]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BracketElectricCharacterSupport=void 0;class E{constructor(p){this._richEditBrackets=p}getElectricCharacters(){const p=[];if(this._richEditBrackets)for(const _ of this._richEditBrackets.brackets)for(const v of _.close){const b=v.charAt(v.length-1);p.push(b)}return(0,L.distinct)(p)}onElectricCharacter(p,_,v){if(!this._richEditBrackets||this._richEditBrackets.brackets.length===0)return null;const b=_.findTokenIndexAtOffset(v-1);if((0,k.ignoreBracketsInToken)(_.getStandardTokenType(b)))return null;const a=this._richEditBrackets.reversedRegex,i=_.getLineContent().substring(0,v-1)+p,n=y.BracketsUtils.findPrevBracketInRange(a,1,i,0,i.length);if(!n)return null;const t=i.substring(n.startColumn-1,n.endColumn-1).toLowerCase();if(this._richEditBrackets.textIsOpenBracket[t])return null;const u=_.getActualLineContentBefore(n.startColumn-1);return/^\\s*$/.test(u)?{matchOpenBracket:t}:null}}e.BracketElectricCharacterSupport=E}),define(se[613],oe([1,0,13,6,2,5,133,234,529]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BracketPairsTextModelPart=void 0;class v extends y.Disposable{get canBuildAST(){return this.textModel.getValueLength()<=5e6}constructor(r,u){super(),this.textModel=r,this.languageConfigurationService=u,this.bracketPairsTree=this._register(new y.MutableDisposable),this.onDidChangeEmitter=new k.Emitter,this.onDidChange=this.onDidChangeEmitter.event,this.bracketsRequested=!1,this._register(this.languageConfigurationService.onDidChange(f=>{var c;(!f.languageId||!((c=this.bracketPairsTree.value)===null||c===void 0)&&c.object.didLanguageChange(f.languageId))&&(this.bracketPairsTree.clear(),this.updateBracketPairsTree())}))}handleDidChangeOptions(r){this.bracketPairsTree.clear(),this.updateBracketPairsTree()}handleDidChangeLanguage(r){this.bracketPairsTree.clear(),this.updateBracketPairsTree()}handleDidChangeContent(r){var u;(u=this.bracketPairsTree.value)===null||u===void 0||u.object.handleContentChanged(r)}handleDidChangeBackgroundTokenizationState(){var r;(r=this.bracketPairsTree.value)===null||r===void 0||r.object.handleDidChangeBackgroundTokenizationState()}handleDidChangeTokens(r){var u;(u=this.bracketPairsTree.value)===null||u===void 0||u.object.handleDidChangeTokens(r)}updateBracketPairsTree(){if(this.bracketsRequested&&this.canBuildAST){if(!this.bracketPairsTree.value){const r=new y.DisposableStore;this.bracketPairsTree.value=b(r.add(new _.BracketPairsTree(this.textModel,u=>this.languageConfigurationService.getLanguageConfiguration(u))),r),r.add(this.bracketPairsTree.value.object.onDidChange(u=>this.onDidChangeEmitter.fire(u))),this.onDidChangeEmitter.fire()}}else this.bracketPairsTree.value&&(this.bracketPairsTree.clear(),this.onDidChangeEmitter.fire())}getBracketPairsInRange(r){var u;return this.bracketsRequested=!0,this.updateBracketPairsTree(),((u=this.bracketPairsTree.value)===null||u===void 0?void 0:u.object.getBracketPairsInRange(r,!1))||L.CallbackIterable.empty}getBracketPairsInRangeWithMinIndentation(r){var u;return this.bracketsRequested=!0,this.updateBracketPairsTree(),((u=this.bracketPairsTree.value)===null||u===void 0?void 0:u.object.getBracketPairsInRange(r,!0))||L.CallbackIterable.empty}getBracketsInRange(r,u=!1){var f;return this.bracketsRequested=!0,this.updateBracketPairsTree(),((f=this.bracketPairsTree.value)===null||f===void 0?void 0:f.object.getBracketsInRange(r,u))||L.CallbackIterable.empty}findMatchingBracketUp(r,u,f){const c=this.textModel.validatePosition(u),d=this.textModel.getLanguageIdAtPosition(c.lineNumber,c.column);if(this.canBuildAST){const s=this.languageConfigurationService.getLanguageConfiguration(d).bracketsNew.getClosingBracketInfo(r);if(!s)return null;const l=this.getBracketPairsInRange(E.Range.fromPositions(u,u)).findLast(o=>s.closes(o.openingBracketInfo));return l?l.openingBracketRange:null}else{const s=r.toLowerCase(),l=this.languageConfigurationService.getLanguageConfiguration(d).brackets;if(!l)return null;const o=l.textIsBracket[s];return o?n(this._findMatchingBracketUp(o,c,a(f))):null}}matchBracket(r,u){if(this.canBuildAST){const f=this.getBracketPairsInRange(E.Range.fromPositions(r,r)).filter(c=>c.closingBracketRange!==void 0&&(c.openingBracketRange.containsPosition(r)||c.closingBracketRange.containsPosition(r))).findLastMaxBy((0,L.compareBy)(c=>c.openingBracketRange.containsPosition(r)?c.openingBracketRange:c.closingBracketRange,E.Range.compareRangesUsingStarts));return f?[f.openingBracketRange,f.closingBracketRange]:null}else{const f=a(u);return this._matchBracket(this.textModel.validatePosition(r),f)}}_establishBracketSearchOffsets(r,u,f,c){const d=u.getCount(),s=u.getLanguageId(c);let l=Math.max(0,r.column-1-f.maxBracketLength);for(let g=c-1;g>=0;g--){const h=u.getEndOffset(g);if(h<=l)break;if((0,S.ignoreBracketsInToken)(u.getStandardTokenType(g))||u.getLanguageId(g)!==s){l=h;break}}let o=Math.min(u.getLineContent().length,r.column-1+f.maxBracketLength);for(let g=c+1;g<d;g++){const h=u.getStartOffset(g);if(h>=o)break;if((0,S.ignoreBracketsInToken)(u.getStandardTokenType(g))||u.getLanguageId(g)!==s){o=h;break}}return{searchStartOffset:l,searchEndOffset:o}}_matchBracket(r,u){const f=r.lineNumber,c=this.textModel.tokenization.getLineTokens(f),d=this.textModel.getLineContent(f),s=c.findTokenIndexAtOffset(r.column-1);if(s<0)return null;const l=this.languageConfigurationService.getLanguageConfiguration(c.getLanguageId(s)).brackets;if(l&&!(0,S.ignoreBracketsInToken)(c.getStandardTokenType(s))){let{searchStartOffset:o,searchEndOffset:g}=this._establishBracketSearchOffsets(r,c,l,s),h=null;for(;;){const m=p.BracketsUtils.findNextBracketInRange(l.forwardRegex,f,d,o,g);if(!m)break;if(m.startColumn<=r.column&&r.column<=m.endColumn){const C=d.substring(m.startColumn-1,m.endColumn-1).toLowerCase(),w=this._matchFoundBracket(m,l.textIsBracket[C],l.textIsOpenBracket[C],u);if(w){if(w instanceof i)return null;h=w}}o=m.endColumn-1}if(h)return h}if(s>0&&c.getStartOffset(s)===r.column-1){const o=s-1,g=this.languageConfigurationService.getLanguageConfiguration(c.getLanguageId(o)).brackets;if(g&&!(0,S.ignoreBracketsInToken)(c.getStandardTokenType(o))){const{searchStartOffset:h,searchEndOffset:m}=this._establishBracketSearchOffsets(r,c,g,o),C=p.BracketsUtils.findPrevBracketInRange(g.reversedRegex,f,d,h,m);if(C&&C.startColumn<=r.column&&r.column<=C.endColumn){const w=d.substring(C.startColumn-1,C.endColumn-1).toLowerCase(),D=this._matchFoundBracket(C,g.textIsBracket[w],g.textIsOpenBracket[w],u);if(D)return D instanceof i?null:D}}}return null}_matchFoundBracket(r,u,f,c){if(!u)return null;const d=f?this._findMatchingBracketDown(u,r.getEndPosition(),c):this._findMatchingBracketUp(u,r.getStartPosition(),c);return d?d instanceof i?d:[r,d]:null}_findMatchingBracketUp(r,u,f){const c=r.languageId,d=r.reversedRegex;let s=-1,l=0;const o=(g,h,m,C)=>{for(;;){if(f&&++l%100===0&&!f())return i.INSTANCE;const w=p.BracketsUtils.findPrevBracketInRange(d,g,h,m,C);if(!w)break;const D=h.substring(w.startColumn-1,w.endColumn-1).toLowerCase();if(r.isOpen(D)?s++:r.isClose(D)&&s--,s===0)return w;C=w.startColumn-1}return null};for(let g=u.lineNumber;g>=1;g--){const h=this.textModel.tokenization.getLineTokens(g),m=h.getCount(),C=this.textModel.getLineContent(g);let w=m-1,D=C.length,I=C.length;g===u.lineNumber&&(w=h.findTokenIndexAtOffset(u.column-1),D=u.column-1,I=u.column-1);let T=!0;for(;w>=0;w--){const A=h.getLanguageId(w)===c&&!(0,S.ignoreBracketsInToken)(h.getStandardTokenType(w));if(A)T?D=h.getStartOffset(w):(D=h.getStartOffset(w),I=h.getEndOffset(w));else if(T&&D!==I){const P=o(g,C,D,I);if(P)return P}T=A}if(T&&D!==I){const A=o(g,C,D,I);if(A)return A}}return null}_findMatchingBracketDown(r,u,f){const c=r.languageId,d=r.forwardRegex;let s=1,l=0;const o=(h,m,C,w)=>{for(;;){if(f&&++l%100===0&&!f())return i.INSTANCE;const D=p.BracketsUtils.findNextBracketInRange(d,h,m,C,w);if(!D)break;const I=m.substring(D.startColumn-1,D.endColumn-1).toLowerCase();if(r.isOpen(I)?s++:r.isClose(I)&&s--,s===0)return D;C=D.endColumn-1}return null},g=this.textModel.getLineCount();for(let h=u.lineNumber;h<=g;h++){const m=this.textModel.tokenization.getLineTokens(h),C=m.getCount(),w=this.textModel.getLineContent(h);let D=0,I=0,T=0;h===u.lineNumber&&(D=m.findTokenIndexAtOffset(u.column-1),I=u.column-1,T=u.column-1);let A=!0;for(;D<C;D++){const P=m.getLanguageId(D)===c&&!(0,S.ignoreBracketsInToken)(m.getStandardTokenType(D));if(P)A||(I=m.getStartOffset(D)),T=m.getEndOffset(D);else if(A&&I!==T){const N=o(h,w,I,T);if(N)return N}A=P}if(A&&I!==T){const P=o(h,w,I,T);if(P)return P}}return null}findPrevBracket(r){var u;const f=this.textModel.validatePosition(r);if(this.canBuildAST)return this.bracketsRequested=!0,this.updateBracketPairsTree(),((u=this.bracketPairsTree.value)===null||u===void 0?void 0:u.object.getFirstBracketBefore(f))||null;let c=null,d=null,s=null;for(let l=f.lineNumber;l>=1;l--){const o=this.textModel.tokenization.getLineTokens(l),g=o.getCount(),h=this.textModel.getLineContent(l);let m=g-1,C=h.length,w=h.length;if(l===f.lineNumber){m=o.findTokenIndexAtOffset(f.column-1),C=f.column-1,w=f.column-1;const I=o.getLanguageId(m);c!==I&&(c=I,d=this.languageConfigurationService.getLanguageConfiguration(c).brackets,s=this.languageConfigurationService.getLanguageConfiguration(c).bracketsNew)}let D=!0;for(;m>=0;m--){const I=o.getLanguageId(m);if(c!==I){if(d&&s&&D&&C!==w){const A=p.BracketsUtils.findPrevBracketInRange(d.reversedRegex,l,h,C,w);if(A)return this._toFoundBracket(s,A);D=!1}c=I,d=this.languageConfigurationService.getLanguageConfiguration(c).brackets,s=this.languageConfigurationService.getLanguageConfiguration(c).bracketsNew}const T=!!d&&!(0,S.ignoreBracketsInToken)(o.getStandardTokenType(m));if(T)D?C=o.getStartOffset(m):(C=o.getStartOffset(m),w=o.getEndOffset(m));else if(s&&d&&D&&C!==w){const A=p.BracketsUtils.findPrevBracketInRange(d.reversedRegex,l,h,C,w);if(A)return this._toFoundBracket(s,A)}D=T}if(s&&d&&D&&C!==w){const I=p.BracketsUtils.findPrevBracketInRange(d.reversedRegex,l,h,C,w);if(I)return this._toFoundBracket(s,I)}}return null}findNextBracket(r){var u;const f=this.textModel.validatePosition(r);if(this.canBuildAST)return this.bracketsRequested=!0,this.updateBracketPairsTree(),((u=this.bracketPairsTree.value)===null||u===void 0?void 0:u.object.getFirstBracketAfter(f))||null;const c=this.textModel.getLineCount();let d=null,s=null,l=null;for(let o=f.lineNumber;o<=c;o++){const g=this.textModel.tokenization.getLineTokens(o),h=g.getCount(),m=this.textModel.getLineContent(o);let C=0,w=0,D=0;if(o===f.lineNumber){C=g.findTokenIndexAtOffset(f.column-1),w=f.column-1,D=f.column-1;const T=g.getLanguageId(C);d!==T&&(d=T,s=this.languageConfigurationService.getLanguageConfiguration(d).brackets,l=this.languageConfigurationService.getLanguageConfiguration(d).bracketsNew)}let I=!0;for(;C<h;C++){const T=g.getLanguageId(C);if(d!==T){if(l&&s&&I&&w!==D){const P=p.BracketsUtils.findNextBracketInRange(s.forwardRegex,o,m,w,D);if(P)return this._toFoundBracket(l,P);I=!1}d=T,s=this.languageConfigurationService.getLanguageConfiguration(d).brackets,l=this.languageConfigurationService.getLanguageConfiguration(d).bracketsNew}const A=!!s&&!(0,S.ignoreBracketsInToken)(g.getStandardTokenType(C));if(A)I||(w=g.getStartOffset(C)),D=g.getEndOffset(C);else if(l&&s&&I&&w!==D){const P=p.BracketsUtils.findNextBracketInRange(s.forwardRegex,o,m,w,D);if(P)return this._toFoundBracket(l,P)}I=A}if(l&&s&&I&&w!==D){const T=p.BracketsUtils.findNextBracketInRange(s.forwardRegex,o,m,w,D);if(T)return this._toFoundBracket(l,T)}}return null}findEnclosingBrackets(r,u){const f=this.textModel.validatePosition(r);if(this.canBuildAST){const w=E.Range.fromPositions(f),D=this.getBracketPairsInRange(E.Range.fromPositions(f,f)).findLast(I=>I.closingBracketRange!==void 0&&I.range.strictContainsRange(w));return D?[D.openingBracketRange,D.closingBracketRange]:null}const c=a(u),d=this.textModel.getLineCount(),s=new Map;let l=[];const o=(w,D)=>{if(!s.has(w)){const I=[];for(let T=0,A=D?D.brackets.length:0;T<A;T++)I[T]=0;s.set(w,I)}l=s.get(w)};let g=0;const h=(w,D,I,T,A)=>{for(;;){if(c&&++g%100===0&&!c())return i.INSTANCE;const P=p.BracketsUtils.findNextBracketInRange(w.forwardRegex,D,I,T,A);if(!P)break;const N=I.substring(P.startColumn-1,P.endColumn-1).toLowerCase(),M=w.textIsBracket[N];if(M&&(M.isOpen(N)?l[M.index]++:M.isClose(N)&&l[M.index]--,l[M.index]===-1))return this._matchFoundBracket(P,M,!1,c);T=P.endColumn-1}return null};let m=null,C=null;for(let w=f.lineNumber;w<=d;w++){const D=this.textModel.tokenization.getLineTokens(w),I=D.getCount(),T=this.textModel.getLineContent(w);let A=0,P=0,N=0;if(w===f.lineNumber){A=D.findTokenIndexAtOffset(f.column-1),P=f.column-1,N=f.column-1;const R=D.getLanguageId(A);m!==R&&(m=R,C=this.languageConfigurationService.getLanguageConfiguration(m).brackets,o(m,C))}let M=!0;for(;A<I;A++){const R=D.getLanguageId(A);if(m!==R){if(C&&M&&P!==N){const O=h(C,w,T,P,N);if(O)return n(O);M=!1}m=R,C=this.languageConfigurationService.getLanguageConfiguration(m).brackets,o(m,C)}const x=!!C&&!(0,S.ignoreBracketsInToken)(D.getStandardTokenType(A));if(x)M||(P=D.getStartOffset(A)),N=D.getEndOffset(A);else if(C&&M&&P!==N){const O=h(C,w,T,P,N);if(O)return n(O)}M=x}if(C&&M&&P!==N){const R=h(C,w,T,P,N);if(R)return n(R)}}return null}_toFoundBracket(r,u){if(!u)return null;let f=this.textModel.getValueInRange(u);f=f.toLowerCase();const c=r.getBracketInfo(f);return c?{range:u,bracketInfo:c}:null}}e.BracketPairsTextModelPart=v;function b(t,r){return{object:t,dispose:()=>r?.dispose()}}function a(t){if(typeof t>\"u\")return()=>!0;{const r=Date.now();return()=>Date.now()-r<=t}}class i{constructor(){this._searchCanceledBrand=void 0}}i.INSTANCE=new i;function n(t){return t instanceof i?null:t}}),define(se[331],oe([1,0,6,11,5,41,293,129,329,2]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PieceTreeTextBuffer=void 0;class b extends v.Disposable{constructor(i,n,t,r,u,f,c){super(),this._onDidChangeContent=this._register(new L.Emitter),this._BOM=n,this._mightContainNonBasicASCII=!f,this._mightContainRTL=r,this._mightContainUnusualLineTerminators=u,this._pieceTree=new S.PieceTreeBase(i,t,c)}mightContainRTL(){return this._mightContainRTL}mightContainUnusualLineTerminators(){return this._mightContainUnusualLineTerminators}resetMightContainUnusualLineTerminators(){this._mightContainUnusualLineTerminators=!1}mightContainNonBasicASCII(){return this._mightContainNonBasicASCII}getBOM(){return this._BOM}getEOL(){return this._pieceTree.getEOL()}createSnapshot(i){return this._pieceTree.createSnapshot(i?this._BOM:\"\")}getOffsetAt(i,n){return this._pieceTree.getOffsetAt(i,n)}getPositionAt(i){return this._pieceTree.getPositionAt(i)}getRangeAt(i,n){const t=i+n,r=this.getPositionAt(i),u=this.getPositionAt(t);return new y.Range(r.lineNumber,r.column,u.lineNumber,u.column)}getValueInRange(i,n=0){if(i.isEmpty())return\"\";const t=this._getEndOfLine(n);return this._pieceTree.getValueInRange(i,t)}getValueLengthInRange(i,n=0){if(i.isEmpty())return 0;if(i.startLineNumber===i.endLineNumber)return i.endColumn-i.startColumn;const t=this.getOffsetAt(i.startLineNumber,i.startColumn),r=this.getOffsetAt(i.endLineNumber,i.endColumn);let u=0;const f=this._getEndOfLine(n),c=this.getEOL();if(f.length!==c.length){const d=f.length-c.length,s=i.endLineNumber-i.startLineNumber;u=d*s}return r-t+u}getCharacterCountInRange(i,n=0){if(this._mightContainNonBasicASCII){let t=0;const r=i.startLineNumber,u=i.endLineNumber;for(let f=r;f<=u;f++){const c=this.getLineContent(f),d=f===r?i.startColumn-1:0,s=f===u?i.endColumn-1:c.length;for(let l=d;l<s;l++)k.isHighSurrogate(c.charCodeAt(l))?(t=t+1,l=l+1):t=t+1}return t+=this._getEndOfLine(n).length*(u-r),t}return this.getValueLengthInRange(i,n)}getLength(){return this._pieceTree.getLength()}getLineCount(){return this._pieceTree.getLineCount()}getLinesContent(){return this._pieceTree.getLinesContent()}getLineContent(i){return this._pieceTree.getLineContent(i)}getLineCharCode(i,n){return this._pieceTree.getLineCharCode(i,n)}getLineLength(i){return this._pieceTree.getLineLength(i)}getLineFirstNonWhitespaceColumn(i){const n=k.firstNonWhitespaceIndex(this.getLineContent(i));return n===-1?0:n+1}getLineLastNonWhitespaceColumn(i){const n=k.lastNonWhitespaceIndex(this.getLineContent(i));return n===-1?0:n+2}_getEndOfLine(i){switch(i){case 1:return`\n`;case 2:return`\\r\n`;case 0:return this.getEOL();default:throw new Error(\"Unknown EOL preference\")}}setEOL(i){this._pieceTree.setEOL(i)}applyEdits(i,n,t){let r=this._mightContainRTL,u=this._mightContainUnusualLineTerminators,f=this._mightContainNonBasicASCII,c=!0,d=[];for(let C=0;C<i.length;C++){const w=i[C];c&&w._isTracked&&(c=!1);const D=w.range;if(w.text){let N=!0;f||(N=!k.isBasicASCII(w.text),f=N),!r&&N&&(r=k.containsRTL(w.text)),!u&&N&&(u=k.containsUnusualLineTerminators(w.text))}let I=\"\",T=0,A=0,P=0;if(w.text){let N;[T,A,P,N]=(0,p.countEOL)(w.text);const M=this.getEOL();N===0||N===(M===`\\r\n`?2:1)?I=w.text:I=w.text.replace(/\\r\\n|\\r|\\n/g,M)}d[C]={sortIndex:C,identifier:w.identifier||null,range:D,rangeOffset:this.getOffsetAt(D.startLineNumber,D.startColumn),rangeLength:this.getValueLengthInRange(D),text:I,eolCount:T,firstLineLength:A,lastLineLength:P,forceMoveMarkers:!!w.forceMoveMarkers,isAutoWhitespaceEdit:w.isAutoWhitespaceEdit||!1}}d.sort(b._sortOpsAscending);let s=!1;for(let C=0,w=d.length-1;C<w;C++){const D=d[C].range.getEndPosition(),I=d[C+1].range.getStartPosition();if(I.isBeforeOrEqual(D)){if(I.isBefore(D))throw new Error(\"Overlapping ranges are not allowed!\");s=!0}}c&&(d=this._reduceOperations(d));const l=t||n?b._getInverseEditRanges(d):[],o=[];if(n)for(let C=0;C<d.length;C++){const w=d[C],D=l[C];if(w.isAutoWhitespaceEdit&&w.range.isEmpty())for(let I=D.startLineNumber;I<=D.endLineNumber;I++){let T=\"\";I===D.startLineNumber&&(T=this.getLineContent(w.range.startLineNumber),k.firstNonWhitespaceIndex(T)!==-1)||o.push({lineNumber:I,oldContent:T})}}let g=null;if(t){let C=0;g=[];for(let w=0;w<d.length;w++){const D=d[w],I=l[w],T=this.getValueInRange(D.range),A=D.rangeOffset+C;C+=D.text.length-T.length,g[w]={sortIndex:D.sortIndex,identifier:D.identifier,range:I,text:T,textChange:new _.TextChange(D.rangeOffset,T,A,D.text)}}s||g.sort((w,D)=>w.sortIndex-D.sortIndex)}this._mightContainRTL=r,this._mightContainUnusualLineTerminators=u,this._mightContainNonBasicASCII=f;const h=this._doApplyEdits(d);let m=null;if(n&&o.length>0){o.sort((C,w)=>w.lineNumber-C.lineNumber),m=[];for(let C=0,w=o.length;C<w;C++){const D=o[C].lineNumber;if(C>0&&o[C-1].lineNumber===D)continue;const I=o[C].oldContent,T=this.getLineContent(D);T.length===0||T===I||k.firstNonWhitespaceIndex(T)!==-1||m.push(D)}}return this._onDidChangeContent.fire(),new E.ApplyEditsResult(g,h,m)}_reduceOperations(i){return i.length<1e3?i:[this._toSingleEditOperation(i)]}_toSingleEditOperation(i){let n=!1;const t=i[0].range,r=i[i.length-1].range,u=new y.Range(t.startLineNumber,t.startColumn,r.endLineNumber,r.endColumn);let f=t.startLineNumber,c=t.startColumn;const d=[];for(let h=0,m=i.length;h<m;h++){const C=i[h],w=C.range;n=n||C.forceMoveMarkers,d.push(this.getValueInRange(new y.Range(f,c,w.startLineNumber,w.startColumn))),C.text.length>0&&d.push(C.text),f=w.endLineNumber,c=w.endColumn}const s=d.join(\"\"),[l,o,g]=(0,p.countEOL)(s);return{sortIndex:0,identifier:i[0].identifier,range:u,rangeOffset:this.getOffsetAt(u.startLineNumber,u.startColumn),rangeLength:this.getValueLengthInRange(u,0),text:s,eolCount:l,firstLineLength:o,lastLineLength:g,forceMoveMarkers:n,isAutoWhitespaceEdit:!1}}_doApplyEdits(i){i.sort(b._sortOpsDescending);const n=[];for(let t=0;t<i.length;t++){const r=i[t],u=r.range.startLineNumber,f=r.range.startColumn,c=r.range.endLineNumber,d=r.range.endColumn;if(u===c&&f===d&&r.text.length===0)continue;r.text?(this._pieceTree.delete(r.rangeOffset,r.rangeLength),this._pieceTree.insert(r.rangeOffset,r.text,!0)):this._pieceTree.delete(r.rangeOffset,r.rangeLength);const s=new y.Range(u,f,c,d);n.push({range:s,rangeLength:r.rangeLength,text:r.text,rangeOffset:r.rangeOffset,forceMoveMarkers:r.forceMoveMarkers})}return n}findMatchesLineByLine(i,n,t,r){return this._pieceTree.findMatchesLineByLine(i,n,t,r)}static _getInverseEditRanges(i){const n=[];let t=0,r=0,u=null;for(let f=0,c=i.length;f<c;f++){const d=i[f];let s,l;u?u.range.endLineNumber===d.range.startLineNumber?(s=t,l=r+(d.range.startColumn-u.range.endColumn)):(s=t+(d.range.startLineNumber-u.range.endLineNumber),l=d.range.startColumn):(s=d.range.startLineNumber,l=d.range.startColumn);let o;if(d.text.length>0){const g=d.eolCount+1;g===1?o=new y.Range(s,l,s,l+d.firstLineLength):o=new y.Range(s,l,s+g-1,d.lastLineLength+1)}else o=new y.Range(s,l,s,l);t=o.endLineNumber,r=o.endColumn,n.push(o),u=d}return n}static _sortOpsAscending(i,n){const t=y.Range.compareRangesUsingEnds(i.range,n.range);return t===0?i.sortIndex-n.sortIndex:t}static _sortOpsDescending(i,n){const t=y.Range.compareRangesUsingEnds(i.range,n.range);return t===0?n.sortIndex-i.sortIndex:-t}}e.PieceTreeTextBuffer=b}),define(se[614],oe([1,0,11,293,331]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PieceTreeTextBufferBuilder=void 0;class E{constructor(_,v,b,a,i,n,t,r,u){this._chunks=_,this._bom=v,this._cr=b,this._lf=a,this._crlf=i,this._containsRTL=n,this._containsUnusualLineTerminators=t,this._isBasicASCII=r,this._normalizeEOL=u}_getEOL(_){const v=this._cr+this._lf+this._crlf,b=this._cr+this._crlf;return v===0?_===1?`\n`:`\\r\n`:b>v/2?`\\r\n`:`\n`}create(_){const v=this._getEOL(_),b=this._chunks;if(this._normalizeEOL&&(v===`\\r\n`&&(this._cr>0||this._lf>0)||v===`\n`&&(this._cr>0||this._crlf>0)))for(let i=0,n=b.length;i<n;i++){const t=b[i].buffer.replace(/\\r\\n|\\r|\\n/g,v),r=(0,k.createLineStartsFast)(t);b[i]=new k.StringBuffer(t,r)}const a=new y.PieceTreeTextBuffer(b,this._bom,v,this._containsRTL,this._containsUnusualLineTerminators,this._isBasicASCII,this._normalizeEOL);return{textBuffer:a,disposable:a}}}class S{constructor(){this.chunks=[],this.BOM=\"\",this._hasPreviousChar=!1,this._previousChar=0,this._tmpLineStarts=[],this.cr=0,this.lf=0,this.crlf=0,this.containsRTL=!1,this.containsUnusualLineTerminators=!1,this.isBasicASCII=!0}acceptChunk(_){if(_.length===0)return;this.chunks.length===0&&L.startsWithUTF8BOM(_)&&(this.BOM=L.UTF8_BOM_CHARACTER,_=_.substr(1));const v=_.charCodeAt(_.length-1);v===13||v>=55296&&v<=56319?(this._acceptChunk1(_.substr(0,_.length-1),!1),this._hasPreviousChar=!0,this._previousChar=v):(this._acceptChunk1(_,!1),this._hasPreviousChar=!1,this._previousChar=v)}_acceptChunk1(_,v){!v&&_.length===0||(this._hasPreviousChar?this._acceptChunk2(String.fromCharCode(this._previousChar)+_):this._acceptChunk2(_))}_acceptChunk2(_){const v=(0,k.createLineStarts)(this._tmpLineStarts,_);this.chunks.push(new k.StringBuffer(_,v.lineStarts)),this.cr+=v.cr,this.lf+=v.lf,this.crlf+=v.crlf,v.isBasicASCII||(this.isBasicASCII=!1,this.containsRTL||(this.containsRTL=L.containsRTL(_)),this.containsUnusualLineTerminators||(this.containsUnusualLineTerminators=L.containsUnusualLineTerminators(_)))}finish(_=!0){return this._finish(),new E(this.chunks,this.BOM,this.cr,this.lf,this.crlf,this.containsRTL,this.containsUnusualLineTerminators,this.isBasicASCII,_)}_finish(){if(this.chunks.length===0&&this._acceptChunk1(\"\",!0),this._hasPreviousChar){this._hasPreviousChar=!1;const _=this.chunks[this.chunks.length-1];_.buffer+=String.fromCharCode(this._previousChar);const v=(0,k.createLineStartsFast)(_.buffer);_.lineStarts=v,this._previousChar===13&&this.cr++}}}e.PieceTreeTextBufferBuilder=S}),define(se[615],oe([1,0,144,17]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.encodeSemanticTokensDto=void 0;function y(_){for(let v=0,b=_.length;v<b;v+=4){const a=_[v+0],i=_[v+1],n=_[v+2],t=_[v+3];_[v+0]=t,_[v+1]=n,_[v+2]=i,_[v+3]=a}}function E(_){const v=new Uint8Array(_.buffer,_.byteOffset,_.length*4);return k.isLittleEndian()||y(v),L.VSBuffer.wrap(v)}function S(_){const v=new Uint32Array(p(_));let b=0;if(v[b++]=_.id,_.type===\"full\")v[b++]=1,v[b++]=_.data.length,v.set(_.data,b),b+=_.data.length;else{v[b++]=2,v[b++]=_.deltas.length;for(const a of _.deltas)v[b++]=a.start,v[b++]=a.deleteCount,a.data?(v[b++]=a.data.length,v.set(a.data,b),b+=a.data.length):v[b++]=0}return E(v)}e.encodeSemanticTokensDto=S;function p(_){let v=0;if(v+=1+1,_.type===\"full\")v+=1+_.data.length;else{v+=1,v+=(1+1+1)*_.deltas.length;for(const b of _.deltas)b.data&&(v+=b.data.length)}return v}}),define(se[188],oe([1,0,6,2,17]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ClickLinkGesture=e.ClickLinkOptions=e.ClickLinkKeyboardEvent=e.ClickLinkMouseEvent=void 0;function E(a,i){return!!a[i]}class S{constructor(i,n){this.target=i.target,this.isLeftClick=i.event.leftButton,this.isMiddleClick=i.event.middleButton,this.isRightClick=i.event.rightButton,this.hasTriggerModifier=E(i.event,n.triggerModifier),this.hasSideBySideModifier=E(i.event,n.triggerSideBySideModifier),this.isNoneOrSingleMouseDown=i.event.detail<=1}}e.ClickLinkMouseEvent=S;class p{constructor(i,n){this.keyCodeIsTriggerKey=i.keyCode===n.triggerKey,this.keyCodeIsSideBySideKey=i.keyCode===n.triggerSideBySideKey,this.hasTriggerModifier=E(i,n.triggerModifier)}}e.ClickLinkKeyboardEvent=p;class _{constructor(i,n,t,r){this.triggerKey=i,this.triggerModifier=n,this.triggerSideBySideKey=t,this.triggerSideBySideModifier=r}equals(i){return this.triggerKey===i.triggerKey&&this.triggerModifier===i.triggerModifier&&this.triggerSideBySideKey===i.triggerSideBySideKey&&this.triggerSideBySideModifier===i.triggerSideBySideModifier}}e.ClickLinkOptions=_;function v(a){return a===\"altKey\"?y.isMacintosh?new _(57,\"metaKey\",6,\"altKey\"):new _(5,\"ctrlKey\",6,\"altKey\"):y.isMacintosh?new _(6,\"altKey\",57,\"metaKey\"):new _(6,\"altKey\",5,\"ctrlKey\")}class b extends k.Disposable{constructor(i,n){var t;super(),this._onMouseMoveOrRelevantKeyDown=this._register(new L.Emitter),this.onMouseMoveOrRelevantKeyDown=this._onMouseMoveOrRelevantKeyDown.event,this._onExecute=this._register(new L.Emitter),this.onExecute=this._onExecute.event,this._onCancel=this._register(new L.Emitter),this.onCancel=this._onCancel.event,this._editor=i,this._extractLineNumberFromMouseEvent=(t=n?.extractLineNumberFromMouseEvent)!==null&&t!==void 0?t:r=>r.target.position?r.target.position.lineNumber:0,this._opts=v(this._editor.getOption(77)),this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._lineNumberOnMouseDown=0,this._register(this._editor.onDidChangeConfiguration(r=>{if(r.hasChanged(77)){const u=v(this._editor.getOption(77));if(this._opts.equals(u))return;this._opts=u,this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._lineNumberOnMouseDown=0,this._onCancel.fire()}})),this._register(this._editor.onMouseMove(r=>this._onEditorMouseMove(new S(r,this._opts)))),this._register(this._editor.onMouseDown(r=>this._onEditorMouseDown(new S(r,this._opts)))),this._register(this._editor.onMouseUp(r=>this._onEditorMouseUp(new S(r,this._opts)))),this._register(this._editor.onKeyDown(r=>this._onEditorKeyDown(new p(r,this._opts)))),this._register(this._editor.onKeyUp(r=>this._onEditorKeyUp(new p(r,this._opts)))),this._register(this._editor.onMouseDrag(()=>this._resetHandler())),this._register(this._editor.onDidChangeCursorSelection(r=>this._onDidChangeCursorSelection(r))),this._register(this._editor.onDidChangeModel(r=>this._resetHandler())),this._register(this._editor.onDidChangeModelContent(()=>this._resetHandler())),this._register(this._editor.onDidScrollChange(r=>{(r.scrollTopChanged||r.scrollLeftChanged)&&this._resetHandler()}))}_onDidChangeCursorSelection(i){i.selection&&i.selection.startColumn!==i.selection.endColumn&&this._resetHandler()}_onEditorMouseMove(i){this._lastMouseMoveEvent=i,this._onMouseMoveOrRelevantKeyDown.fire([i,null])}_onEditorMouseDown(i){this._hasTriggerKeyOnMouseDown=i.hasTriggerModifier,this._lineNumberOnMouseDown=this._extractLineNumberFromMouseEvent(i)}_onEditorMouseUp(i){const n=this._extractLineNumberFromMouseEvent(i);this._hasTriggerKeyOnMouseDown&&this._lineNumberOnMouseDown&&this._lineNumberOnMouseDown===n&&this._onExecute.fire(i)}_onEditorKeyDown(i){this._lastMouseMoveEvent&&(i.keyCodeIsTriggerKey||i.keyCodeIsSideBySideKey&&i.hasTriggerModifier)?this._onMouseMoveOrRelevantKeyDown.fire([this._lastMouseMoveEvent,i]):i.hasTriggerModifier&&this._onCancel.fire()}_onEditorKeyUp(i){i.keyCodeIsTriggerKey&&this._onCancel.fire()}_resetHandler(){this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._onCancel.fire()}}e.ClickLinkGesture=b}),define(se[332],oe([1,0,14,12,6,2]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HoverOperation=e.HoverResult=void 0;class S{constructor(v,b,a){this.value=v,this.isComplete=b,this.hasLoadingMessage=a}}e.HoverResult=S;class p extends E.Disposable{constructor(v,b){super(),this._editor=v,this._computer=b,this._onResult=this._register(new y.Emitter),this.onResult=this._onResult.event,this._firstWaitScheduler=this._register(new L.RunOnceScheduler(()=>this._triggerAsyncComputation(),0)),this._secondWaitScheduler=this._register(new L.RunOnceScheduler(()=>this._triggerSyncComputation(),0)),this._loadingMessageScheduler=this._register(new L.RunOnceScheduler(()=>this._triggerLoadingMessage(),0)),this._state=0,this._asyncIterable=null,this._asyncIterableDone=!1,this._result=[]}dispose(){this._asyncIterable&&(this._asyncIterable.cancel(),this._asyncIterable=null),super.dispose()}get _hoverTime(){return this._editor.getOption(60).delay}get _firstWaitTime(){return this._hoverTime/2}get _secondWaitTime(){return this._hoverTime-this._firstWaitTime}get _loadingMessageTime(){return 3*this._hoverTime}_setState(v,b=!0){this._state=v,b&&this._fireResult()}_triggerAsyncComputation(){this._setState(2),this._secondWaitScheduler.schedule(this._secondWaitTime),this._computer.computeAsync?(this._asyncIterableDone=!1,this._asyncIterable=(0,L.createCancelableAsyncIterable)(v=>this._computer.computeAsync(v)),(async()=>{try{for await(const v of this._asyncIterable)v&&(this._result.push(v),this._fireResult());this._asyncIterableDone=!0,(this._state===3||this._state===4)&&this._setState(0)}catch(v){(0,k.onUnexpectedError)(v)}})()):this._asyncIterableDone=!0}_triggerSyncComputation(){this._computer.computeSync&&(this._result=this._result.concat(this._computer.computeSync())),this._setState(this._asyncIterableDone?0:3)}_triggerLoadingMessage(){this._state===3&&this._setState(4)}_fireResult(){if(this._state===1||this._state===2)return;const v=this._state===0,b=this._state===4;this._onResult.fire(new S(this._result.slice(0),v,b))}start(v){if(v===0)this._state===0&&(this._setState(1),this._firstWaitScheduler.schedule(this._firstWaitTime),this._loadingMessageScheduler.schedule(this._loadingMessageTime));else switch(this._state){case 0:this._triggerAsyncComputation(),this._secondWaitScheduler.cancel(),this._triggerSyncComputation();break;case 2:this._secondWaitScheduler.cancel(),this._triggerSyncComputation();break}}cancel(){this._firstWaitScheduler.cancel(),this._secondWaitScheduler.cancel(),this._loadingMessageScheduler.cancel(),this._asyncIterable&&(this._asyncIterable.cancel(),this._asyncIterable=null),this._result=[],this._setState(0,!1)}}e.HoverOperation=p}),define(se[616],oe([1,0,225,2,10,7]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ResizableContentWidget=void 0;const S=30,p=24;class _ extends k.Disposable{constructor(b,a=new E.Dimension(10,10)){super(),this._editor=b,this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._resizableNode=this._register(new L.ResizableHTMLElement),this._contentPosition=null,this._isResizing=!1,this._resizableNode.domNode.style.position=\"absolute\",this._resizableNode.minSize=E.Dimension.lift(a),this._resizableNode.layout(a.height,a.width),this._resizableNode.enableSashes(!0,!0,!0,!0),this._register(this._resizableNode.onDidResize(i=>{this._resize(new E.Dimension(i.dimension.width,i.dimension.height)),i.done&&(this._isResizing=!1)})),this._register(this._resizableNode.onDidWillResize(()=>{this._isResizing=!0}))}get isResizing(){return this._isResizing}getDomNode(){return this._resizableNode.domNode}getPosition(){return this._contentPosition}get position(){var b;return!((b=this._contentPosition)===null||b===void 0)&&b.position?y.Position.lift(this._contentPosition.position):void 0}_availableVerticalSpaceAbove(b){const a=this._editor.getDomNode(),i=this._editor.getScrolledVisiblePosition(b);return!a||!i?void 0:E.getDomNodePagePosition(a).top+i.top-S}_availableVerticalSpaceBelow(b){const a=this._editor.getDomNode(),i=this._editor.getScrolledVisiblePosition(b);if(!a||!i)return;const n=E.getDomNodePagePosition(a),t=E.getClientArea(a.ownerDocument.body),r=n.top+i.top+i.height;return t.height-r-p}_findPositionPreference(b,a){var i,n;const t=Math.min((i=this._availableVerticalSpaceBelow(a))!==null&&i!==void 0?i:1/0,b),r=Math.min((n=this._availableVerticalSpaceAbove(a))!==null&&n!==void 0?n:1/0,b),u=Math.min(Math.max(r,t),b),f=Math.min(b,u);let c;return this._editor.getOption(60).above?c=f<=r?1:2:c=f<=t?2:1,c===1?this._resizableNode.enableSashes(!0,!0,!1,!1):this._resizableNode.enableSashes(!1,!0,!0,!1),c}_resize(b){this._resizableNode.layout(b.height,b.width)}}e.ResizableContentWidget=_}),define(se[333],oe([1,0,12,2,10,5,47,22]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.asCommandLink=e.InlayHintsFragments=e.InlayHintItem=e.InlayHintAnchor=void 0;class _{constructor(n,t){this.range=n,this.direction=t}}e.InlayHintAnchor=_;class v{constructor(n,t,r){this.hint=n,this.anchor=t,this.provider=r,this._isResolved=!1}with(n){const t=new v(this.hint,n.anchor,this.provider);return t._isResolved=this._isResolved,t._currentResolve=this._currentResolve,t}async resolve(n){if(typeof this.provider.resolveInlayHint==\"function\"){if(this._currentResolve)return await this._currentResolve,n.isCancellationRequested?void 0:this.resolve(n);this._isResolved||(this._currentResolve=this._doResolve(n).finally(()=>this._currentResolve=void 0)),await this._currentResolve}}async _doResolve(n){var t,r,u;try{const f=await Promise.resolve(this.provider.resolveInlayHint(this.hint,n));this.hint.tooltip=(t=f?.tooltip)!==null&&t!==void 0?t:this.hint.tooltip,this.hint.label=(r=f?.label)!==null&&r!==void 0?r:this.hint.label,this.hint.textEdits=(u=f?.textEdits)!==null&&u!==void 0?u:this.hint.textEdits,this._isResolved=!0}catch(f){(0,L.onUnexpectedExternalError)(f),this._isResolved=!1}}}e.InlayHintItem=v;class b{static async create(n,t,r,u){const f=[],c=n.ordered(t).reverse().map(d=>r.map(async s=>{try{const l=await d.provideInlayHints(t,s,u);(l?.hints.length||d.onDidChangeInlayHints)&&f.push([l??b._emptyInlayHintList,d])}catch(l){(0,L.onUnexpectedExternalError)(l)}}));if(await Promise.all(c.flat()),u.isCancellationRequested||t.isDisposed())throw new L.CancellationError;return new b(r,f,t)}constructor(n,t,r){this._disposables=new k.DisposableStore,this.ranges=n,this.provider=new Set;const u=[];for(const[f,c]of t){this._disposables.add(f),this.provider.add(c);for(const d of f.hints){const s=r.validatePosition(d.position);let l=\"before\";const o=b._getRangeAtPosition(r,s);let g;o.getStartPosition().isBefore(s)?(g=E.Range.fromPositions(o.getStartPosition(),s),l=\"after\"):(g=E.Range.fromPositions(s,o.getEndPosition()),l=\"before\"),u.push(new v(d,new _(g,l),c))}}this.items=u.sort((f,c)=>y.Position.compare(f.hint.position,c.hint.position))}dispose(){this._disposables.dispose()}static _getRangeAtPosition(n,t){const r=t.lineNumber,u=n.getWordAtPosition(t);if(u)return new E.Range(r,u.startColumn,r,u.endColumn);n.tokenization.tokenizeIfCheap(r);const f=n.tokenization.getLineTokens(r),c=t.column-1,d=f.findTokenIndexAtOffset(c);let s=f.getStartOffset(d),l=f.getEndOffset(d);return l-s===1&&(s===c&&d>1?(s=f.getStartOffset(d-1),l=f.getEndOffset(d-1)):l===c&&d<f.getCount()-1&&(s=f.getStartOffset(d+1),l=f.getEndOffset(d+1))),new E.Range(r,s+1,r,l+1)}}e.InlayHintsFragments=b,b._emptyInlayHintList=Object.freeze({dispose(){},hints:[]});function a(i){return p.URI.from({scheme:S.Schemas.command,path:i.id,query:i.arguments&&encodeURIComponent(JSON.stringify(i.arguments))}).toString()}e.asCommandLink=a}),define(se[617],oe([1,0,90,14,19,53,12,5,522,156,117]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlineCompletionItem=e.InlineCompletionList=e.InlineCompletionProviderResult=e.provideInlineCompletions=void 0;async function a(f,c,d,s,l=y.CancellationToken.None,o){const g=r(c,d),h=f.all(d),m=new E.SetMap;for(const M of h)M.groupId&&m.add(M.groupId,M);function C(M){if(!M.yieldsToGroupIds)return[];const R=[];for(const x of M.yieldsToGroupIds||[]){const O=m.get(x);for(const B of O)R.push(B)}return R}const w=new Map,D=new Set;function I(M,R){if(R=[...R,M],D.has(M))return R;D.add(M);try{const x=C(M);for(const O of x){const B=I(O,R);if(B)return B}}finally{D.delete(M)}}function T(M){const R=w.get(M);if(R)return R;const x=I(M,[]);x&&(0,S.onUnexpectedExternalError)(new Error(`Inline completions: cyclic yield-to dependency detected. Path: ${x.map(B=>B.toString?B.toString():\"\"+B).join(\" -> \")}`));const O=new k.DeferredPromise;return w.set(M,O.p),(async()=>{if(!x){const B=C(M);for(const W of B){const V=await T(W);if(V&&V.items.length>0)return}}try{return await M.provideInlineCompletions(d,c,s,l)}catch(B){(0,S.onUnexpectedExternalError)(B);return}})().then(B=>O.complete(B),B=>O.error(B)),O.p}const A=await Promise.all(h.map(async M=>({provider:M,completions:await T(M)}))),P=new Map,N=[];for(const M of A){const R=M.completions;if(!R)continue;const x=new n(R,M.provider);N.push(x);for(const O of R.items){const B=t.from(O,x,g,d,o);P.set(B.hash(),B)}}return new i(Array.from(P.values()),new Set(P.keys()),N)}e.provideInlineCompletions=a;class i{constructor(c,d,s){this.completions=c,this.hashs=d,this.providerResults=s}has(c){return this.hashs.has(c.hash())}dispose(){for(const c of this.providerResults)c.removeRef()}}e.InlineCompletionProviderResult=i;class n{constructor(c,d){this.inlineCompletions=c,this.provider=d,this.refCount=1}addRef(){this.refCount++}removeRef(){this.refCount--,this.refCount===0&&this.provider.freeInlineCompletions(this.inlineCompletions)}}e.InlineCompletionList=n;class t{static from(c,d,s,l,o){let g,h,m=c.range?p.Range.lift(c.range):s;if(typeof c.insertText==\"string\"){if(g=c.insertText,o&&c.completeBracketPairs){g=u(g,m.getStartPosition(),l,o);const C=g.length-c.insertText.length;C!==0&&(m=new p.Range(m.startLineNumber,m.startColumn,m.endLineNumber,m.endColumn+C))}h=void 0}else if(\"snippet\"in c.insertText){const C=c.insertText.snippet.length;if(o&&c.completeBracketPairs){c.insertText.snippet=u(c.insertText.snippet,m.getStartPosition(),l,o);const D=c.insertText.snippet.length-C;D!==0&&(m=new p.Range(m.startLineNumber,m.startColumn,m.endLineNumber,m.endColumn+D))}const w=new b.SnippetParser().parse(c.insertText.snippet);w.children.length===1&&w.children[0]instanceof b.Text?(g=w.children[0].value,h=void 0):(g=w.toString(),h={snippet:c.insertText.snippet,range:m})}else(0,L.assertNever)(c.insertText);return new t(g,c.command,m,g,h,c.additionalTextEdits||(0,v.getReadonlyEmptyArray)(),c,d)}constructor(c,d,s,l,o,g,h,m){this.filterText=c,this.command=d,this.range=s,this.insertText=l,this.snippetInfo=o,this.additionalTextEdits=g,this.sourceInlineCompletion=h,this.source=m,c=c.replace(/\\r\\n|\\r/g,`\n`),l=c.replace(/\\r\\n|\\r/g,`\n`)}withRange(c){return new t(this.filterText,this.command,c,this.insertText,this.snippetInfo,this.additionalTextEdits,this.sourceInlineCompletion,this.source)}hash(){return JSON.stringify({insertText:this.insertText,range:this.range.toString()})}}e.InlineCompletionItem=t;function r(f,c){const d=c.getWordAtPosition(f),s=c.getLineMaxColumn(f.lineNumber);return d?new p.Range(f.lineNumber,d.startColumn,f.lineNumber,s):p.Range.fromPositions(f,f.with(void 0,s))}function u(f,c,d,s){const o=d.getLineContent(c.lineNumber).substring(0,c.column-1)+f,g=d.tokenization.tokenizeLineWithEdit(c,o.length-(c.column-1),f),h=g?.sliceAndInflate(c.column-1,o.length,0);return h?(0,_.fixBracketsInLine)(h,s):f}}),define(se[618],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/controller/textAreaHandler\",e)}),define(se[619],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/coreCommands\",e)}),define(se[620],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/editorExtensions\",e)}),define(se[621],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/codeEditorWidget\",e)}),define(se[622],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer\",e)}),define(se[623],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/diffEditor/components/diffEditorEditors\",e)}),define(se[624],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin\",e)}),define(se[625],oe([1,0,7,42,26,2,17,28,624]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlineDiffDeletedCodeMargin=void 0;class v extends E.Disposable{get visibility(){return this._visibility}set visibility(a){this._visibility!==a&&(this._visibility=a,this._diffActions.style.visibility=a?\"visible\":\"hidden\")}constructor(a,i,n,t,r,u,f,c,d){super(),this._getViewZoneId=a,this._marginDomNode=i,this._modifiedEditor=n,this._diff=t,this._editor=r,this._viewLineCounts=u,this._originalTextModel=f,this._contextMenuService=c,this._clipboardService=d,this._visibility=!1,this._marginDomNode.style.zIndex=\"10\",this._diffActions=document.createElement(\"div\"),this._diffActions.className=p.ThemeIcon.asClassName(y.Codicon.lightBulb)+\" lightbulb-glyph\",this._diffActions.style.position=\"absolute\";const s=this._modifiedEditor.getOption(66);this._diffActions.style.right=\"0px\",this._diffActions.style.visibility=\"hidden\",this._diffActions.style.height=`${s}px`,this._diffActions.style.lineHeight=`${s}px`,this._marginDomNode.appendChild(this._diffActions);let l=0;const o=n.getOption(126)&&!S.isIOS,g=(h,m)=>{var C;this._contextMenuService.showContextMenu({domForShadowRoot:o&&(C=n.getDomNode())!==null&&C!==void 0?C:void 0,getAnchor:()=>({x:h,y:m}),getActions:()=>{const w=[],D=t.modified.isEmpty;return w.push(new k.Action(\"diff.clipboard.copyDeletedContent\",D?t.original.length>1?(0,_.localize)(0,null):(0,_.localize)(1,null):t.original.length>1?(0,_.localize)(2,null):(0,_.localize)(3,null),void 0,!0,async()=>{const T=this._originalTextModel.getValueInRange(t.original.toExclusiveRange());await this._clipboardService.writeText(T)})),t.original.length>1&&w.push(new k.Action(\"diff.clipboard.copyDeletedLineContent\",D?(0,_.localize)(4,null,t.original.startLineNumber+l):(0,_.localize)(5,null,t.original.startLineNumber+l),void 0,!0,async()=>{let T=this._originalTextModel.getLineContent(t.original.startLineNumber+l);T===\"\"&&(T=this._originalTextModel.getEndOfLineSequence()===0?`\n`:`\\r\n`),await this._clipboardService.writeText(T)})),n.getOption(90)||w.push(new k.Action(\"diff.inline.revertChange\",(0,_.localize)(6,null),void 0,!0,async()=>{this._editor.revert(this._diff)})),w},autoSelectFirstItem:!0})};this._register((0,L.addStandardDisposableListener)(this._diffActions,\"mousedown\",h=>{if(!h.leftButton)return;const{top:m,height:C}=(0,L.getDomNodePagePosition)(this._diffActions),w=Math.floor(s/3);h.preventDefault(),g(h.posx,m+C+w)})),this._register(n.onMouseMove(h=>{(h.target.type===8||h.target.type===5)&&h.target.detail.viewZoneId===this._getViewZoneId()?(l=this._updateLightBulbPosition(this._marginDomNode,h.event.browserEvent.y,s),this.visibility=!0):this.visibility=!1})),this._register(n.onMouseDown(h=>{h.event.leftButton&&(h.target.type===8||h.target.type===5)&&h.target.detail.viewZoneId===this._getViewZoneId()&&(h.event.preventDefault(),l=this._updateLightBulbPosition(this._marginDomNode,h.event.browserEvent.y,s),g(h.event.posx,h.event.posy+s))}))}_updateLightBulbPosition(a,i,n){const{top:t}=(0,L.getDomNodePagePosition)(a),r=i-t,u=Math.floor(r/n),f=u*n;if(this._diffActions.style.top=`${f}px`,this._viewLineCounts){let c=0;for(let d=0;d<this._viewLineCounts.length;d++)if(c+=this._viewLineCounts[d],u<c)return d}return u}}e.InlineDiffDeletedCodeMargin=v}),define(se[626],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/diffEditor/diffEditor.contribution\",e)}),define(se[627],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature\",e)}),define(se[628],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature\",e)}),define(se[334],oe([1,0,7,78,42,13,60,26,2,35,28,87,73,628]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MovedBlocksLinesFeature=void 0;class t extends _.Disposable{constructor(c,d,s,l,o){super(),this._rootElement=c,this._diffModel=d,this._originalEditorLayoutInfo=s,this._modifiedEditorLayoutInfo=l,this._editors=o,this._originalScrollTop=(0,v.observableFromEvent)(this._editors.original.onDidScrollChange,()=>this._editors.original.getScrollTop()),this._modifiedScrollTop=(0,v.observableFromEvent)(this._editors.modified.onDidScrollChange,()=>this._editors.modified.getScrollTop()),this._viewZonesChanged=(0,v.observableSignalFromEvent)(\"onDidChangeViewZones\",this._editors.modified.onDidChangeViewZones),this.width=(0,v.observableValue)(this,0),this._modifiedViewZonesChangedSignal=(0,v.observableSignalFromEvent)(\"modified.onDidChangeViewZones\",this._editors.modified.onDidChangeViewZones),this._originalViewZonesChangedSignal=(0,v.observableSignalFromEvent)(\"original.onDidChangeViewZones\",this._editors.original.onDidChangeViewZones),this._state=(0,v.derivedWithStore)(this,(I,T)=>{var A;this._element.replaceChildren();const P=this._diffModel.read(I),N=(A=P?.diff.read(I))===null||A===void 0?void 0:A.movedTexts;if(!N||N.length===0){this.width.set(0,void 0);return}this._viewZonesChanged.read(I);const M=this._originalEditorLayoutInfo.read(I),R=this._modifiedEditorLayoutInfo.read(I);if(!M||!R){this.width.set(0,void 0);return}this._modifiedViewZonesChangedSignal.read(I),this._originalViewZonesChangedSignal.read(I);const x=N.map(q=>{function ie(me,X){const U=X.getTopForLineNumber(me.startLineNumber,!0),G=X.getTopForLineNumber(me.endLineNumberExclusive,!0);return(U+G)/2}const ae=ie(q.lineRangeMapping.original,this._editors.original),ne=this._originalScrollTop.read(I),$=ie(q.lineRangeMapping.modified,this._editors.modified),J=this._modifiedScrollTop.read(I),Q=ae-ne,re=$-J,de=Math.min(ae,$),he=Math.max(ae,$);return{range:new i.OffsetRange(de,he),from:Q,to:re,fromWithoutScroll:ae,toWithoutScroll:$,move:q}});x.sort((0,E.tieBreakComparators)((0,E.compareBy)(q=>q.fromWithoutScroll>q.toWithoutScroll,E.booleanComparator),(0,E.compareBy)(q=>q.fromWithoutScroll>q.toWithoutScroll?q.fromWithoutScroll:-q.toWithoutScroll,E.numberComparator)));const O=r.compute(x.map(q=>q.range)),B=10,W=M.verticalScrollbarWidth,V=(O.getTrackCount()-1)*10+B*2,K=W+V+(R.contentLeft-t.movedCodeBlockPadding);let F=0;for(const q of x){const ie=O.getTrack(F),ae=W+B+ie*10,ne=15,$=15,J=K,Q=R.glyphMarginWidth+R.lineNumbersWidth,re=18,de=document.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\");de.classList.add(\"arrow-rectangle\"),de.setAttribute(\"x\",`${J-Q}`),de.setAttribute(\"y\",`${q.to-re/2}`),de.setAttribute(\"width\",`${Q}`),de.setAttribute(\"height\",`${re}`),this._element.appendChild(de);const he=document.createElementNS(\"http://www.w3.org/2000/svg\",\"g\"),me=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");me.setAttribute(\"d\",`M 0 ${q.from} L ${ae} ${q.from} L ${ae} ${q.to} L ${J-$} ${q.to}`),me.setAttribute(\"fill\",\"none\"),he.appendChild(me);const X=document.createElementNS(\"http://www.w3.org/2000/svg\",\"polygon\");X.classList.add(\"arrow\"),T.add((0,v.autorun)(U=>{me.classList.toggle(\"currentMove\",q.move===P.activeMovedText.read(U)),X.classList.toggle(\"currentMove\",q.move===P.activeMovedText.read(U))})),X.setAttribute(\"points\",`${J-$},${q.to-ne/2} ${J},${q.to} ${J-$},${q.to+ne/2}`),he.appendChild(X),this._element.appendChild(he),F++}this.width.set(V,void 0)}),this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\"),this._element.setAttribute(\"class\",\"moved-blocks-lines\"),this._rootElement.appendChild(this._element),this._register((0,_.toDisposable)(()=>this._element.remove())),this._register((0,v.autorun)(I=>{const T=this._originalEditorLayoutInfo.read(I),A=this._modifiedEditorLayoutInfo.read(I);!T||!A||(this._element.style.left=`${T.width-T.verticalScrollbarWidth}px`,this._element.style.height=`${T.height}px`,this._element.style.width=`${T.verticalScrollbarWidth+T.contentLeft-t.movedCodeBlockPadding+this.width.read(I)}px`)})),this._register((0,v.recomputeInitiallyAndOnChange)(this._state));const g=(0,v.derived)(I=>{const T=this._diffModel.read(I),A=T?.diff.read(I);return A?A.movedTexts.map(P=>({move:P,original:new a.PlaceholderViewZone((0,v.constObservable)(P.lineRangeMapping.original.startLineNumber-1),18),modified:new a.PlaceholderViewZone((0,v.constObservable)(P.lineRangeMapping.modified.startLineNumber-1),18)})):[]});this._register((0,a.applyViewZones)(this._editors.original,g.map(I=>I.map(T=>T.original)))),this._register((0,a.applyViewZones)(this._editors.modified,g.map(I=>I.map(T=>T.modified)))),this._register((0,v.autorunWithStore)((I,T)=>{const A=g.read(I);for(const P of A)T.add(new u(this._editors.original,P.original,P.move,\"original\",this._diffModel.get())),T.add(new u(this._editors.modified,P.modified,P.move,\"modified\",this._diffModel.get()))}));const h=(0,v.observableFromEvent)(this._editors.original.onDidChangeCursorPosition,()=>this._editors.original.getPosition()),m=(0,v.observableFromEvent)(this._editors.modified.onDidChangeCursorPosition,()=>this._editors.modified.getPosition()),C=(0,v.observableSignalFromEvent)(\"original.onDidFocusEditorWidget\",I=>this._editors.original.onDidFocusEditorWidget(()=>setTimeout(()=>I(void 0),0))),w=(0,v.observableSignalFromEvent)(\"modified.onDidFocusEditorWidget\",I=>this._editors.modified.onDidFocusEditorWidget(()=>setTimeout(()=>I(void 0),0)));let D=\"modified\";this._register((0,v.autorunHandleChanges)({createEmptyChangeSummary:()=>{},handleChange:(I,T)=>(I.didChange(C)&&(D=\"original\"),I.didChange(w)&&(D=\"modified\"),!0)},I=>{C.read(I),w.read(I);const T=this._diffModel.read(I);if(!T)return;const A=T.diff.read(I);let P;if(A&&D===\"original\"){const N=h.read(I);N&&(P=A.movedTexts.find(M=>M.lineRangeMapping.original.contains(N.lineNumber)))}if(A&&D===\"modified\"){const N=m.read(I);N&&(P=A.movedTexts.find(M=>M.lineRangeMapping.modified.contains(N.lineNumber)))}P!==T.movedTextToCompare.get()&&T.movedTextToCompare.set(void 0,void 0),T.setActiveMovedText(P)}))}}e.MovedBlocksLinesFeature=t,t.movedCodeBlockPadding=4;class r{static compute(c){const d=[],s=[];for(const l of c){let o=d.findIndex(g=>!g.intersectsStrict(l));o===-1&&(d.length>=6?o=(0,S.findMaxIdxBy)(d,(0,E.compareBy)(h=>h.intersectWithRangeLength(l),E.numberComparator)):(o=d.length,d.push(new i.OffsetRangeSet))),d[o].addRange(l),s.push(o)}return new r(d.length,s)}constructor(c,d){this._trackCount=c,this.trackPerLineIdx=d}getTrack(c){return this.trackPerLineIdx[c]}getTrackCount(){return this._trackCount}}class u extends a.ViewZoneOverlayWidget{constructor(c,d,s,l,o){const g=(0,L.h)(\"div.diff-hidden-lines-widget\");super(c,d,g.root),this._editor=c,this._move=s,this._kind=l,this._diffModel=o,this._nodes=(0,L.h)(\"div.diff-moved-code-block\",{style:{marginRight:\"4px\"}},[(0,L.h)(\"div.text-content@textContent\"),(0,L.h)(\"div.action-bar@actionBar\")]),g.root.appendChild(this._nodes.root);const h=(0,v.observableFromEvent)(this._editor.onDidLayoutChange,()=>this._editor.getLayoutInfo());this._register((0,a.applyStyle)(this._nodes.root,{paddingRight:h.map(I=>I.verticalScrollbarWidth)}));let m;s.changes.length>0?m=this._kind===\"original\"?(0,n.localize)(0,null,this._move.lineRangeMapping.modified.startLineNumber,this._move.lineRangeMapping.modified.endLineNumberExclusive-1):(0,n.localize)(1,null,this._move.lineRangeMapping.original.startLineNumber,this._move.lineRangeMapping.original.endLineNumberExclusive-1):m=this._kind===\"original\"?(0,n.localize)(2,null,this._move.lineRangeMapping.modified.startLineNumber,this._move.lineRangeMapping.modified.endLineNumberExclusive-1):(0,n.localize)(3,null,this._move.lineRangeMapping.original.startLineNumber,this._move.lineRangeMapping.original.endLineNumberExclusive-1);const C=this._register(new k.ActionBar(this._nodes.actionBar,{highlightToggledItems:!0})),w=new y.Action(\"\",m,\"\",!1);C.push(w,{icon:!1,label:!0});const D=new y.Action(\"\",\"Compare\",b.ThemeIcon.asClassName(p.Codicon.compareChanges),!0,()=>{this._editor.focus(),this._diffModel.movedTextToCompare.set(this._diffModel.movedTextToCompare.get()===s?void 0:this._move,void 0)});this._register((0,v.autorun)(I=>{const T=this._diffModel.movedTextToCompare.read(I)===s;D.checked=T})),C.push(D,{icon:!1,label:!0})}}}),define(se[629],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/diffEditor/features/revertButtonsFeature\",e)}),define(se[630],oe([1,0,7,118,26,2,35,62,5,41,629]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RevertButton=e.RevertButtonsFeature=void 0;class a extends E.Disposable{constructor(t,r,u,f){super(),this._editors=t,this._diffModel=r,this._options=u,this._widget=f;const c=[],d=(0,S.derived)(this,s=>{const l=this._diffModel.read(s),o=l?.diff.read(s);if(!o)return c;const g=this._editors.modifiedSelections.read(s);if(g.every(w=>w.isEmpty()))return c;const h=new p.LineRangeSet(g.map(w=>p.LineRange.fromRangeInclusive(w))),C=o.mappings.filter(w=>w.lineRangeMapping.innerChanges&&h.intersects(w.lineRangeMapping.modified)).map(w=>({mapping:w,rangeMappings:w.lineRangeMapping.innerChanges.filter(D=>g.some(I=>_.Range.areIntersecting(D.modifiedRange,I)))}));return C.length===0||C.every(w=>w.rangeMappings.length===0)?c:C});this._register((0,S.autorunWithStore)((s,l)=>{const o=this._diffModel.read(s),g=o?.diff.read(s);if(!o||!g||this._diffModel.read(s).movedTextToCompare.read(s)||!this._options.shouldRenderRevertArrows.read(s))return;const m=[],C=d.read(s),w=new Set(C.map(D=>D.mapping));if(C.length>0){const D=this._editors.modifiedSelections.read(s),I=l.add(new i(D[D.length-1].positionLineNumber,this._widget,C.flatMap(T=>T.rangeMappings),!0));this._editors.modified.addGlyphMarginWidget(I),m.push(I)}for(const D of g.mappings)if(!w.has(D)&&!D.lineRangeMapping.modified.isEmpty&&D.lineRangeMapping.innerChanges){const I=l.add(new i(D.lineRangeMapping.modified.startLineNumber,this._widget,D.lineRangeMapping.innerChanges,!1));this._editors.modified.addGlyphMarginWidget(I),m.push(I)}l.add((0,E.toDisposable)(()=>{for(const D of m)this._editors.modified.removeGlyphMarginWidget(D)}))}))}}e.RevertButtonsFeature=a;class i extends E.Disposable{getId(){return this._id}constructor(t,r,u,f){super(),this._lineNumber=t,this._widget=r,this._diffs=u,this._selection=f,this._id=`revertButton${i.counter++}`,this._domNode=(0,L.h)(\"div.revertButton\",{title:this._selection?(0,b.localize)(0,null):(0,b.localize)(1,null)},[(0,k.renderIcon)(y.Codicon.arrowRight)]).root,this._register((0,L.addDisposableListener)(this._domNode,L.EventType.MOUSE_DOWN,c=>{c.button!==2&&(c.stopPropagation(),c.preventDefault())})),this._register((0,L.addDisposableListener)(this._domNode,L.EventType.MOUSE_UP,c=>{c.stopPropagation(),c.preventDefault()})),this._register((0,L.addDisposableListener)(this._domNode,L.EventType.CLICK,c=>{this._widget.revertRangeMappings(this._diffs),c.stopPropagation(),c.preventDefault()}))}getDomNode(){return this._domNode}getPosition(){return{lane:v.GlyphMarginLane.Right,range:{startColumn:1,startLineNumber:this._lineNumber,endColumn:1,endLineNumber:this._lineNumber},zIndex:10001}}}e.RevertButton=i,i.counter=0}),define(se[631],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/diffEditor/registrations.contribution\",e)}),define(se[632],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/hoverWidget/hoverWidget\",e)}),define(se[633],oe([3,4]),function(te,e){return te.create(\"vs/editor/browser/widget/multiDiffEditorWidget/colors\",e)}),define(se[634],oe([3,4]),function(te,e){return te.create(\"vs/editor/common/config/editorConfigurationSchema\",e)}),define(se[635],oe([3,4]),function(te,e){return te.create(\"vs/editor/common/config/editorOptions\",e)}),define(se[36],oe([1,0,13,55,17,179,151,635]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorOptions=e.editorOptionsRegistry=e.EDITOR_FONT_DEFAULTS=e.unicodeHighlightConfigKeys=e.inUntrustedWorkspace=e.filterValidationDecorations=e.ShowLightbulbIconMode=e.EditorLayoutInfoComputer=e.EditorFontVariations=e.EditorFontLigatures=e.TextEditorCursorStyle=e.stringSet=e.clampedFloat=e.clampedInt=e.boolean=e.ApplyUpdateResult=e.ComputeOptionsMemory=e.ConfigurationChangedEvent=e.MINIMAP_GUTTER_WIDTH=void 0,e.MINIMAP_GUTTER_WIDTH=8;class _{constructor(fe){this._values=fe}hasChanged(fe){return this._values[fe]}}e.ConfigurationChangedEvent=_;class v{constructor(){this.stableMinimapLayoutInput=null,this.stableFitMaxMinimapScale=0,this.stableFitRemainingWidth=0}}e.ComputeOptionsMemory=v;class b{constructor(fe,be,Ne,Pe){this.id=fe,this.name=be,this.defaultValue=Ne,this.schema=Pe}applyUpdate(fe,be){return i(fe,be)}compute(fe,be,Ne){return Ne}}class a{constructor(fe,be){this.newValue=fe,this.didChange=be}}e.ApplyUpdateResult=a;function i(Ie,fe){if(typeof Ie!=\"object\"||typeof fe!=\"object\"||!Ie||!fe)return new a(fe,Ie!==fe);if(Array.isArray(Ie)||Array.isArray(fe)){const Ne=Array.isArray(Ie)&&Array.isArray(fe)&&L.equals(Ie,fe);return new a(fe,!Ne)}let be=!1;for(const Ne in fe)if(fe.hasOwnProperty(Ne)){const Pe=i(Ie[Ne],fe[Ne]);Pe.didChange&&(Ie[Ne]=Pe.newValue,be=!0)}return new a(Ie,be)}class n{constructor(fe){this.schema=void 0,this.id=fe,this.name=\"_never_\",this.defaultValue=void 0}applyUpdate(fe,be){return i(fe,be)}validate(fe){return this.defaultValue}}class t{constructor(fe,be,Ne,Pe){this.id=fe,this.name=be,this.defaultValue=Ne,this.schema=Pe}applyUpdate(fe,be){return i(fe,be)}validate(fe){return typeof fe>\"u\"?this.defaultValue:fe}compute(fe,be,Ne){return Ne}}function r(Ie,fe){return typeof Ie>\"u\"?fe:Ie===\"false\"?!1:!!Ie}e.boolean=r;class u extends t{constructor(fe,be,Ne,Pe=void 0){typeof Pe<\"u\"&&(Pe.type=\"boolean\",Pe.default=Ne),super(fe,be,Ne,Pe)}validate(fe){return r(fe,this.defaultValue)}}function f(Ie,fe,be,Ne){if(typeof Ie>\"u\")return fe;let Pe=parseInt(Ie,10);return isNaN(Pe)?fe:(Pe=Math.max(be,Pe),Pe=Math.min(Ne,Pe),Pe|0)}e.clampedInt=f;class c extends t{static clampedInt(fe,be,Ne,Pe){return f(fe,be,Ne,Pe)}constructor(fe,be,Ne,Pe,ze,Ke=void 0){typeof Ke<\"u\"&&(Ke.type=\"integer\",Ke.default=Ne,Ke.minimum=Pe,Ke.maximum=ze),super(fe,be,Ne,Ke),this.minimum=Pe,this.maximum=ze}validate(fe){return c.clampedInt(fe,this.defaultValue,this.minimum,this.maximum)}}function d(Ie,fe,be,Ne){if(typeof Ie>\"u\")return fe;const Pe=s.float(Ie,fe);return s.clamp(Pe,be,Ne)}e.clampedFloat=d;class s extends t{static clamp(fe,be,Ne){return fe<be?be:fe>Ne?Ne:fe}static float(fe,be){if(typeof fe==\"number\")return fe;if(typeof fe>\"u\")return be;const Ne=parseFloat(fe);return isNaN(Ne)?be:Ne}constructor(fe,be,Ne,Pe,ze){typeof ze<\"u\"&&(ze.type=\"number\",ze.default=Ne),super(fe,be,Ne,ze),this.validationFn=Pe}validate(fe){return this.validationFn(s.float(fe,this.defaultValue))}}class l extends t{static string(fe,be){return typeof fe!=\"string\"?be:fe}constructor(fe,be,Ne,Pe=void 0){typeof Pe<\"u\"&&(Pe.type=\"string\",Pe.default=Ne),super(fe,be,Ne,Pe)}validate(fe){return l.string(fe,this.defaultValue)}}function o(Ie,fe,be,Ne){return typeof Ie!=\"string\"?fe:Ne&&Ie in Ne?Ne[Ie]:be.indexOf(Ie)===-1?fe:Ie}e.stringSet=o;class g extends t{constructor(fe,be,Ne,Pe,ze=void 0){typeof ze<\"u\"&&(ze.type=\"string\",ze.enum=Pe,ze.default=Ne),super(fe,be,Ne,ze),this._allowedValues=Pe}validate(fe){return o(fe,this.defaultValue,this._allowedValues)}}class h extends b{constructor(fe,be,Ne,Pe,ze,Ke,je=void 0){typeof je<\"u\"&&(je.type=\"string\",je.enum=ze,je.default=Pe),super(fe,be,Ne,je),this._allowedValues=ze,this._convert=Ke}validate(fe){return typeof fe!=\"string\"?this.defaultValue:this._allowedValues.indexOf(fe)===-1?this.defaultValue:this._convert(fe)}}function m(Ie){switch(Ie){case\"none\":return 0;case\"keep\":return 1;case\"brackets\":return 2;case\"advanced\":return 3;case\"full\":return 4}}class C extends b{constructor(){super(2,\"accessibilitySupport\",0,{type:\"string\",enum:[\"auto\",\"on\",\"off\"],enumDescriptions:[p.localize(0,null),p.localize(1,null),p.localize(2,null)],default:\"auto\",tags:[\"accessibility\"],description:p.localize(3,null)})}validate(fe){switch(fe){case\"auto\":return 0;case\"off\":return 1;case\"on\":return 2}return this.defaultValue}compute(fe,be,Ne){return Ne===0?fe.accessibilitySupport:Ne}}class w extends b{constructor(){const fe={insertSpace:!0,ignoreEmptyLines:!0};super(23,\"comments\",fe,{\"editor.comments.insertSpace\":{type:\"boolean\",default:fe.insertSpace,description:p.localize(4,null)},\"editor.comments.ignoreEmptyLines\":{type:\"boolean\",default:fe.ignoreEmptyLines,description:p.localize(5,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{insertSpace:r(be.insertSpace,this.defaultValue.insertSpace),ignoreEmptyLines:r(be.ignoreEmptyLines,this.defaultValue.ignoreEmptyLines)}}}function D(Ie){switch(Ie){case\"blink\":return 1;case\"smooth\":return 2;case\"phase\":return 3;case\"expand\":return 4;case\"solid\":return 5}}var I;(function(Ie){Ie[Ie.Line=1]=\"Line\",Ie[Ie.Block=2]=\"Block\",Ie[Ie.Underline=3]=\"Underline\",Ie[Ie.LineThin=4]=\"LineThin\",Ie[Ie.BlockOutline=5]=\"BlockOutline\",Ie[Ie.UnderlineThin=6]=\"UnderlineThin\"})(I||(e.TextEditorCursorStyle=I={}));function T(Ie){switch(Ie){case\"line\":return I.Line;case\"block\":return I.Block;case\"underline\":return I.Underline;case\"line-thin\":return I.LineThin;case\"block-outline\":return I.BlockOutline;case\"underline-thin\":return I.UnderlineThin}}class A extends n{constructor(){super(140)}compute(fe,be,Ne){const Pe=[\"monaco-editor\"];return be.get(39)&&Pe.push(be.get(39)),fe.extraEditorClassName&&Pe.push(fe.extraEditorClassName),be.get(73)===\"default\"?Pe.push(\"mouse-default\"):be.get(73)===\"copy\"&&Pe.push(\"mouse-copy\"),be.get(110)&&Pe.push(\"showUnused\"),be.get(138)&&Pe.push(\"showDeprecated\"),Pe.join(\" \")}}class P extends u{constructor(){super(37,\"emptySelectionClipboard\",!0,{description:p.localize(6,null)})}compute(fe,be,Ne){return Ne&&fe.emptySelectionClipboard}}class N extends b{constructor(){const fe={cursorMoveOnType:!0,seedSearchStringFromSelection:\"always\",autoFindInSelection:\"never\",globalFindClipboard:!1,addExtraSpaceOnTop:!0,loop:!0};super(41,\"find\",fe,{\"editor.find.cursorMoveOnType\":{type:\"boolean\",default:fe.cursorMoveOnType,description:p.localize(7,null)},\"editor.find.seedSearchStringFromSelection\":{type:\"string\",enum:[\"never\",\"always\",\"selection\"],default:fe.seedSearchStringFromSelection,enumDescriptions:[p.localize(8,null),p.localize(9,null),p.localize(10,null)],description:p.localize(11,null)},\"editor.find.autoFindInSelection\":{type:\"string\",enum:[\"never\",\"always\",\"multiline\"],default:fe.autoFindInSelection,enumDescriptions:[p.localize(12,null),p.localize(13,null),p.localize(14,null)],description:p.localize(15,null)},\"editor.find.globalFindClipboard\":{type:\"boolean\",default:fe.globalFindClipboard,description:p.localize(16,null),included:y.isMacintosh},\"editor.find.addExtraSpaceOnTop\":{type:\"boolean\",default:fe.addExtraSpaceOnTop,description:p.localize(17,null)},\"editor.find.loop\":{type:\"boolean\",default:fe.loop,description:p.localize(18,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{cursorMoveOnType:r(be.cursorMoveOnType,this.defaultValue.cursorMoveOnType),seedSearchStringFromSelection:typeof fe.seedSearchStringFromSelection==\"boolean\"?fe.seedSearchStringFromSelection?\"always\":\"never\":o(be.seedSearchStringFromSelection,this.defaultValue.seedSearchStringFromSelection,[\"never\",\"always\",\"selection\"]),autoFindInSelection:typeof fe.autoFindInSelection==\"boolean\"?fe.autoFindInSelection?\"always\":\"never\":o(be.autoFindInSelection,this.defaultValue.autoFindInSelection,[\"never\",\"always\",\"multiline\"]),globalFindClipboard:r(be.globalFindClipboard,this.defaultValue.globalFindClipboard),addExtraSpaceOnTop:r(be.addExtraSpaceOnTop,this.defaultValue.addExtraSpaceOnTop),loop:r(be.loop,this.defaultValue.loop)}}}class M extends b{constructor(){super(51,\"fontLigatures\",M.OFF,{anyOf:[{type:\"boolean\",description:p.localize(19,null)},{type:\"string\",description:p.localize(20,null)}],description:p.localize(21,null),default:!1})}validate(fe){return typeof fe>\"u\"?this.defaultValue:typeof fe==\"string\"?fe===\"false\"||fe.length===0?M.OFF:fe===\"true\"?M.ON:fe:fe?M.ON:M.OFF}}e.EditorFontLigatures=M,M.OFF='\"liga\" off, \"calt\" off',M.ON='\"liga\" on, \"calt\" on';class R extends b{constructor(){super(54,\"fontVariations\",R.OFF,{anyOf:[{type:\"boolean\",description:p.localize(22,null)},{type:\"string\",description:p.localize(23,null)}],description:p.localize(24,null),default:!1})}validate(fe){return typeof fe>\"u\"?this.defaultValue:typeof fe==\"string\"?fe===\"false\"?R.OFF:fe===\"true\"?R.TRANSLATE:fe:fe?R.TRANSLATE:R.OFF}compute(fe,be,Ne){return fe.fontInfo.fontVariationSettings}}e.EditorFontVariations=R,R.OFF=\"normal\",R.TRANSLATE=\"translate\";class x extends n{constructor(){super(50)}compute(fe,be,Ne){return fe.fontInfo}}class O extends t{constructor(){super(52,\"fontSize\",e.EDITOR_FONT_DEFAULTS.fontSize,{type:\"number\",minimum:6,maximum:100,default:e.EDITOR_FONT_DEFAULTS.fontSize,description:p.localize(25,null)})}validate(fe){const be=s.float(fe,this.defaultValue);return be===0?e.EDITOR_FONT_DEFAULTS.fontSize:s.clamp(be,6,100)}compute(fe,be,Ne){return fe.fontInfo.fontSize}}class B extends b{constructor(){super(53,\"fontWeight\",e.EDITOR_FONT_DEFAULTS.fontWeight,{anyOf:[{type:\"number\",minimum:B.MINIMUM_VALUE,maximum:B.MAXIMUM_VALUE,errorMessage:p.localize(26,null)},{type:\"string\",pattern:\"^(normal|bold|1000|[1-9][0-9]{0,2})$\"},{enum:B.SUGGESTION_VALUES}],default:e.EDITOR_FONT_DEFAULTS.fontWeight,description:p.localize(27,null)})}validate(fe){return fe===\"normal\"||fe===\"bold\"?fe:String(c.clampedInt(fe,e.EDITOR_FONT_DEFAULTS.fontWeight,B.MINIMUM_VALUE,B.MAXIMUM_VALUE))}}B.SUGGESTION_VALUES=[\"normal\",\"bold\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"],B.MINIMUM_VALUE=1,B.MAXIMUM_VALUE=1e3;class W extends b{constructor(){const fe={multiple:\"peek\",multipleDefinitions:\"peek\",multipleTypeDefinitions:\"peek\",multipleDeclarations:\"peek\",multipleImplementations:\"peek\",multipleReferences:\"peek\",alternativeDefinitionCommand:\"editor.action.goToReferences\",alternativeTypeDefinitionCommand:\"editor.action.goToReferences\",alternativeDeclarationCommand:\"editor.action.goToReferences\",alternativeImplementationCommand:\"\",alternativeReferenceCommand:\"\"},be={type:\"string\",enum:[\"peek\",\"gotoAndPeek\",\"goto\"],default:fe.multiple,enumDescriptions:[p.localize(28,null),p.localize(29,null),p.localize(30,null)]},Ne=[\"\",\"editor.action.referenceSearch.trigger\",\"editor.action.goToReferences\",\"editor.action.peekImplementation\",\"editor.action.goToImplementation\",\"editor.action.peekTypeDefinition\",\"editor.action.goToTypeDefinition\",\"editor.action.peekDeclaration\",\"editor.action.revealDeclaration\",\"editor.action.peekDefinition\",\"editor.action.revealDefinitionAside\",\"editor.action.revealDefinition\"];super(58,\"gotoLocation\",fe,{\"editor.gotoLocation.multiple\":{deprecationMessage:p.localize(31,null)},\"editor.gotoLocation.multipleDefinitions\":{description:p.localize(32,null),...be},\"editor.gotoLocation.multipleTypeDefinitions\":{description:p.localize(33,null),...be},\"editor.gotoLocation.multipleDeclarations\":{description:p.localize(34,null),...be},\"editor.gotoLocation.multipleImplementations\":{description:p.localize(35,null),...be},\"editor.gotoLocation.multipleReferences\":{description:p.localize(36,null),...be},\"editor.gotoLocation.alternativeDefinitionCommand\":{type:\"string\",default:fe.alternativeDefinitionCommand,enum:Ne,description:p.localize(37,null)},\"editor.gotoLocation.alternativeTypeDefinitionCommand\":{type:\"string\",default:fe.alternativeTypeDefinitionCommand,enum:Ne,description:p.localize(38,null)},\"editor.gotoLocation.alternativeDeclarationCommand\":{type:\"string\",default:fe.alternativeDeclarationCommand,enum:Ne,description:p.localize(39,null)},\"editor.gotoLocation.alternativeImplementationCommand\":{type:\"string\",default:fe.alternativeImplementationCommand,enum:Ne,description:p.localize(40,null)},\"editor.gotoLocation.alternativeReferenceCommand\":{type:\"string\",default:fe.alternativeReferenceCommand,enum:Ne,description:p.localize(41,null)}})}validate(fe){var be,Ne,Pe,ze,Ke;if(!fe||typeof fe!=\"object\")return this.defaultValue;const je=fe;return{multiple:o(je.multiple,this.defaultValue.multiple,[\"peek\",\"gotoAndPeek\",\"goto\"]),multipleDefinitions:(be=je.multipleDefinitions)!==null&&be!==void 0?be:o(je.multipleDefinitions,\"peek\",[\"peek\",\"gotoAndPeek\",\"goto\"]),multipleTypeDefinitions:(Ne=je.multipleTypeDefinitions)!==null&&Ne!==void 0?Ne:o(je.multipleTypeDefinitions,\"peek\",[\"peek\",\"gotoAndPeek\",\"goto\"]),multipleDeclarations:(Pe=je.multipleDeclarations)!==null&&Pe!==void 0?Pe:o(je.multipleDeclarations,\"peek\",[\"peek\",\"gotoAndPeek\",\"goto\"]),multipleImplementations:(ze=je.multipleImplementations)!==null&&ze!==void 0?ze:o(je.multipleImplementations,\"peek\",[\"peek\",\"gotoAndPeek\",\"goto\"]),multipleReferences:(Ke=je.multipleReferences)!==null&&Ke!==void 0?Ke:o(je.multipleReferences,\"peek\",[\"peek\",\"gotoAndPeek\",\"goto\"]),alternativeDefinitionCommand:l.string(je.alternativeDefinitionCommand,this.defaultValue.alternativeDefinitionCommand),alternativeTypeDefinitionCommand:l.string(je.alternativeTypeDefinitionCommand,this.defaultValue.alternativeTypeDefinitionCommand),alternativeDeclarationCommand:l.string(je.alternativeDeclarationCommand,this.defaultValue.alternativeDeclarationCommand),alternativeImplementationCommand:l.string(je.alternativeImplementationCommand,this.defaultValue.alternativeImplementationCommand),alternativeReferenceCommand:l.string(je.alternativeReferenceCommand,this.defaultValue.alternativeReferenceCommand)}}}class V extends b{constructor(){const fe={enabled:!0,delay:300,hidingDelay:300,sticky:!0,above:!0};super(60,\"hover\",fe,{\"editor.hover.enabled\":{type:\"boolean\",default:fe.enabled,description:p.localize(42,null)},\"editor.hover.delay\":{type:\"number\",default:fe.delay,minimum:0,maximum:1e4,description:p.localize(43,null)},\"editor.hover.sticky\":{type:\"boolean\",default:fe.sticky,description:p.localize(44,null)},\"editor.hover.hidingDelay\":{type:\"integer\",minimum:0,default:fe.hidingDelay,description:p.localize(45,null)},\"editor.hover.above\":{type:\"boolean\",default:fe.above,description:p.localize(46,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{enabled:r(be.enabled,this.defaultValue.enabled),delay:c.clampedInt(be.delay,this.defaultValue.delay,0,1e4),sticky:r(be.sticky,this.defaultValue.sticky),hidingDelay:c.clampedInt(be.hidingDelay,this.defaultValue.hidingDelay,0,6e5),above:r(be.above,this.defaultValue.above)}}}class K extends n{constructor(){super(143)}compute(fe,be,Ne){return K.computeLayout(be,{memory:fe.memory,outerWidth:fe.outerWidth,outerHeight:fe.outerHeight,isDominatedByLongLines:fe.isDominatedByLongLines,lineHeight:fe.fontInfo.lineHeight,viewLineCount:fe.viewLineCount,lineNumbersDigitCount:fe.lineNumbersDigitCount,typicalHalfwidthCharacterWidth:fe.fontInfo.typicalHalfwidthCharacterWidth,maxDigitWidth:fe.fontInfo.maxDigitWidth,pixelRatio:fe.pixelRatio,glyphMarginDecorationLaneCount:fe.glyphMarginDecorationLaneCount})}static computeContainedMinimapLineCount(fe){const be=fe.height/fe.lineHeight,Ne=Math.floor(fe.paddingTop/fe.lineHeight);let Pe=Math.floor(fe.paddingBottom/fe.lineHeight);fe.scrollBeyondLastLine&&(Pe=Math.max(Pe,be-1));const ze=(Ne+fe.viewLineCount+Pe)/(fe.pixelRatio*fe.height),Ke=Math.floor(fe.viewLineCount/ze);return{typicalViewportLineCount:be,extraLinesBeforeFirstLine:Ne,extraLinesBeyondLastLine:Pe,desiredRatio:ze,minimapLineCount:Ke}}static _computeMinimapLayout(fe,be){const Ne=fe.outerWidth,Pe=fe.outerHeight,ze=fe.pixelRatio;if(!fe.minimap.enabled)return{renderMinimap:0,minimapLeft:0,minimapWidth:0,minimapHeightIsEditorHeight:!1,minimapIsSampling:!1,minimapScale:1,minimapLineHeight:1,minimapCanvasInnerWidth:0,minimapCanvasInnerHeight:Math.floor(ze*Pe),minimapCanvasOuterWidth:0,minimapCanvasOuterHeight:Pe};const Ke=be.stableMinimapLayoutInput,je=Ke&&fe.outerHeight===Ke.outerHeight&&fe.lineHeight===Ke.lineHeight&&fe.typicalHalfwidthCharacterWidth===Ke.typicalHalfwidthCharacterWidth&&fe.pixelRatio===Ke.pixelRatio&&fe.scrollBeyondLastLine===Ke.scrollBeyondLastLine&&fe.paddingTop===Ke.paddingTop&&fe.paddingBottom===Ke.paddingBottom&&fe.minimap.enabled===Ke.minimap.enabled&&fe.minimap.side===Ke.minimap.side&&fe.minimap.size===Ke.minimap.size&&fe.minimap.showSlider===Ke.minimap.showSlider&&fe.minimap.renderCharacters===Ke.minimap.renderCharacters&&fe.minimap.maxColumn===Ke.minimap.maxColumn&&fe.minimap.scale===Ke.minimap.scale&&fe.verticalScrollbarWidth===Ke.verticalScrollbarWidth&&fe.isViewportWrapping===Ke.isViewportWrapping,Je=fe.lineHeight,rt=fe.typicalHalfwidthCharacterWidth,et=fe.scrollBeyondLastLine,st=fe.minimap.renderCharacters;let Qe=ze>=2?Math.round(fe.minimap.scale*2):fe.minimap.scale;const ft=fe.minimap.maxColumn,at=fe.minimap.size,ct=fe.minimap.side,lt=fe.verticalScrollbarWidth,mt=fe.viewLineCount,pt=fe.remainingWidth,Le=fe.isViewportWrapping,ye=st?2:3;let Me=Math.floor(ze*Pe);const Te=Me/ze;let we=!1,Re=!1,Oe=ye*Qe,Ve=Qe/ze,$e=1;if(at===\"fill\"||at===\"fit\"){const{typicalViewportLineCount:Ue,extraLinesBeforeFirstLine:tt,extraLinesBeyondLastLine:Xe,desiredRatio:dt,minimapLineCount:it}=K.computeContainedMinimapLineCount({viewLineCount:mt,scrollBeyondLastLine:et,paddingTop:fe.paddingTop,paddingBottom:fe.paddingBottom,height:Pe,lineHeight:Je,pixelRatio:ze});if(mt/it>1)we=!0,Re=!0,Qe=1,Oe=1,Ve=Qe/ze;else{let ot=!1,ht=Qe+1;if(at===\"fit\"){const St=Math.ceil((tt+mt+Xe)*Oe);Le&&je&&pt<=be.stableFitRemainingWidth?(ot=!0,ht=be.stableFitMaxMinimapScale):ot=St>Me}if(at===\"fill\"||ot){we=!0;const St=Qe;Oe=Math.min(Je*ze,Math.max(1,Math.floor(1/dt))),Le&&je&&pt<=be.stableFitRemainingWidth&&(ht=be.stableFitMaxMinimapScale),Qe=Math.min(ht,Math.max(1,Math.floor(Oe/ye))),Qe>St&&($e=Math.min(2,Qe/St)),Ve=Qe/ze/$e,Me=Math.ceil(Math.max(Ue,tt+mt+Xe)*Oe),Le?(be.stableMinimapLayoutInput=fe,be.stableFitRemainingWidth=pt,be.stableFitMaxMinimapScale=Qe):(be.stableMinimapLayoutInput=null,be.stableFitRemainingWidth=0)}}}const Ze=Math.floor(ft*Ve),Ge=Math.min(Ze,Math.max(0,Math.floor((pt-lt-2)*Ve/(rt+Ve)))+e.MINIMAP_GUTTER_WIDTH);let qe=Math.floor(ze*Ge);const Fe=qe/ze;qe=Math.floor(qe*$e);const We=st?1:2,He=ct===\"left\"?0:Ne-Ge-lt;return{renderMinimap:We,minimapLeft:He,minimapWidth:Ge,minimapHeightIsEditorHeight:we,minimapIsSampling:Re,minimapScale:Qe,minimapLineHeight:Oe,minimapCanvasInnerWidth:qe,minimapCanvasInnerHeight:Me,minimapCanvasOuterWidth:Fe,minimapCanvasOuterHeight:Te}}static computeLayout(fe,be){const Ne=be.outerWidth|0,Pe=be.outerHeight|0,ze=be.lineHeight|0,Ke=be.lineNumbersDigitCount|0,je=be.typicalHalfwidthCharacterWidth,Je=be.maxDigitWidth,rt=be.pixelRatio,et=be.viewLineCount,st=fe.get(135),Qe=st===\"inherit\"?fe.get(134):st,ft=Qe===\"inherit\"?fe.get(130):Qe,at=fe.get(133),ct=be.isDominatedByLongLines,lt=fe.get(57),mt=fe.get(67).renderType!==0,pt=fe.get(68),Le=fe.get(104),ye=fe.get(83),Me=fe.get(72),Te=fe.get(102),we=Te.verticalScrollbarSize,Re=Te.verticalHasArrows,Oe=Te.arrowSize,Ve=Te.horizontalScrollbarSize,$e=fe.get(43),Ze=fe.get(109)!==\"never\";let Ge=fe.get(65);$e&&Ze&&(Ge+=16);let qe=0;if(mt){const wt=Math.max(Ke,pt);qe=Math.round(wt*Je)}let Fe=0;lt&&(Fe=ze*be.glyphMarginDecorationLaneCount);let We=0,He=We+Fe,Ue=He+qe,tt=Ue+Ge;const Xe=Ne-Fe-qe-Ge;let dt=!1,it=!1,nt=-1;Qe===\"inherit\"&&ct?(dt=!0,it=!0):ft===\"on\"||ft===\"bounded\"?it=!0:ft===\"wordWrapColumn\"&&(nt=at);const ot=K._computeMinimapLayout({outerWidth:Ne,outerHeight:Pe,lineHeight:ze,typicalHalfwidthCharacterWidth:je,pixelRatio:rt,scrollBeyondLastLine:Le,paddingTop:ye.top,paddingBottom:ye.bottom,minimap:Me,verticalScrollbarWidth:we,viewLineCount:et,remainingWidth:Xe,isViewportWrapping:it},be.memory||new v);ot.renderMinimap!==0&&ot.minimapLeft===0&&(We+=ot.minimapWidth,He+=ot.minimapWidth,Ue+=ot.minimapWidth,tt+=ot.minimapWidth);const ht=Xe-ot.minimapWidth,St=Math.max(1,Math.floor((ht-we-2)/je)),ut=Re?Oe:0;return it&&(nt=Math.max(1,St),ft===\"bounded\"&&(nt=Math.min(nt,at))),{width:Ne,height:Pe,glyphMarginLeft:We,glyphMarginWidth:Fe,glyphMarginDecorationLaneCount:be.glyphMarginDecorationLaneCount,lineNumbersLeft:He,lineNumbersWidth:qe,decorationsLeft:Ue,decorationsWidth:Ge,contentLeft:tt,contentWidth:ht,minimap:ot,viewportColumn:St,isWordWrapMinified:dt,isViewportWrapping:it,wrappingColumn:nt,verticalScrollbarWidth:we,horizontalScrollbarHeight:Ve,overviewRuler:{top:ut,width:we,height:Pe-2*ut,right:0}}}}e.EditorLayoutInfoComputer=K;class F extends b{constructor(){super(137,\"wrappingStrategy\",\"simple\",{\"editor.wrappingStrategy\":{enumDescriptions:[p.localize(47,null),p.localize(48,null)],type:\"string\",enum:[\"simple\",\"advanced\"],default:\"simple\",description:p.localize(49,null)}})}validate(fe){return o(fe,\"simple\",[\"simple\",\"advanced\"])}compute(fe,be,Ne){return be.get(2)===2?\"advanced\":Ne}}var q;(function(Ie){Ie.Off=\"off\",Ie.OnCode=\"onCode\",Ie.On=\"on\"})(q||(e.ShowLightbulbIconMode=q={}));class ie extends b{constructor(){const fe={enabled:q.OnCode};super(64,\"lightbulb\",fe,{\"editor.lightbulb.enabled\":{type:\"string\",tags:[\"experimental\"],enum:[q.Off,q.OnCode,q.On],default:fe.enabled,enumDescriptions:[p.localize(50,null),p.localize(51,null),p.localize(52,null)],description:p.localize(53,null)}})}validate(fe){return!fe||typeof fe!=\"object\"?this.defaultValue:{enabled:o(fe.enabled,this.defaultValue.enabled,[q.Off,q.OnCode,q.On])}}}class ae extends b{constructor(){const fe={enabled:!1,maxLineCount:5,defaultModel:\"outlineModel\",scrollWithEditor:!0};super(114,\"stickyScroll\",fe,{\"editor.stickyScroll.enabled\":{type:\"boolean\",default:fe.enabled,description:p.localize(54,null),tags:[\"experimental\"]},\"editor.stickyScroll.maxLineCount\":{type:\"number\",default:fe.maxLineCount,minimum:1,maximum:10,description:p.localize(55,null)},\"editor.stickyScroll.defaultModel\":{type:\"string\",enum:[\"outlineModel\",\"foldingProviderModel\",\"indentationModel\"],default:fe.defaultModel,description:p.localize(56,null)},\"editor.stickyScroll.scrollWithEditor\":{type:\"boolean\",default:fe.scrollWithEditor,description:p.localize(57,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{enabled:r(be.enabled,this.defaultValue.enabled),maxLineCount:c.clampedInt(be.maxLineCount,this.defaultValue.maxLineCount,1,10),defaultModel:o(be.defaultModel,this.defaultValue.defaultModel,[\"outlineModel\",\"foldingProviderModel\",\"indentationModel\"]),scrollWithEditor:r(be.scrollWithEditor,this.defaultValue.scrollWithEditor)}}}class ne extends b{constructor(){const fe={enabled:\"on\",fontSize:0,fontFamily:\"\",padding:!1};super(139,\"inlayHints\",fe,{\"editor.inlayHints.enabled\":{type:\"string\",default:fe.enabled,description:p.localize(58,null),enum:[\"on\",\"onUnlessPressed\",\"offUnlessPressed\",\"off\"],markdownEnumDescriptions:[p.localize(59,null),p.localize(60,null,y.isMacintosh?\"Ctrl+Option\":\"Ctrl+Alt\"),p.localize(61,null,y.isMacintosh?\"Ctrl+Option\":\"Ctrl+Alt\"),p.localize(62,null)]},\"editor.inlayHints.fontSize\":{type:\"number\",default:fe.fontSize,markdownDescription:p.localize(63,null,\"`#editor.fontSize#`\",\"`5`\")},\"editor.inlayHints.fontFamily\":{type:\"string\",default:fe.fontFamily,markdownDescription:p.localize(64,null,\"`#editor.fontFamily#`\")},\"editor.inlayHints.padding\":{type:\"boolean\",default:fe.padding,description:p.localize(65,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return typeof be.enabled==\"boolean\"&&(be.enabled=be.enabled?\"on\":\"off\"),{enabled:o(be.enabled,this.defaultValue.enabled,[\"on\",\"off\",\"offUnlessPressed\",\"onUnlessPressed\"]),fontSize:c.clampedInt(be.fontSize,this.defaultValue.fontSize,0,100),fontFamily:l.string(be.fontFamily,this.defaultValue.fontFamily),padding:r(be.padding,this.defaultValue.padding)}}}class $ extends b{constructor(){super(65,\"lineDecorationsWidth\",10)}validate(fe){return typeof fe==\"string\"&&/^\\d+(\\.\\d+)?ch$/.test(fe)?-parseFloat(fe.substring(0,fe.length-2)):c.clampedInt(fe,this.defaultValue,0,1e3)}compute(fe,be,Ne){return Ne<0?c.clampedInt(-Ne*fe.fontInfo.typicalHalfwidthCharacterWidth,this.defaultValue,0,1e3):Ne}}class J extends s{constructor(){super(66,\"lineHeight\",e.EDITOR_FONT_DEFAULTS.lineHeight,fe=>s.clamp(fe,0,150),{markdownDescription:p.localize(66,null)})}compute(fe,be,Ne){return fe.fontInfo.lineHeight}}class Q extends b{constructor(){const fe={enabled:!0,size:\"proportional\",side:\"right\",showSlider:\"mouseover\",autohide:!1,renderCharacters:!0,maxColumn:120,scale:1};super(72,\"minimap\",fe,{\"editor.minimap.enabled\":{type:\"boolean\",default:fe.enabled,description:p.localize(67,null)},\"editor.minimap.autohide\":{type:\"boolean\",default:fe.autohide,description:p.localize(68,null)},\"editor.minimap.size\":{type:\"string\",enum:[\"proportional\",\"fill\",\"fit\"],enumDescriptions:[p.localize(69,null),p.localize(70,null),p.localize(71,null)],default:fe.size,description:p.localize(72,null)},\"editor.minimap.side\":{type:\"string\",enum:[\"left\",\"right\"],default:fe.side,description:p.localize(73,null)},\"editor.minimap.showSlider\":{type:\"string\",enum:[\"always\",\"mouseover\"],default:fe.showSlider,description:p.localize(74,null)},\"editor.minimap.scale\":{type:\"number\",default:fe.scale,minimum:1,maximum:3,enum:[1,2,3],description:p.localize(75,null)},\"editor.minimap.renderCharacters\":{type:\"boolean\",default:fe.renderCharacters,description:p.localize(76,null)},\"editor.minimap.maxColumn\":{type:\"number\",default:fe.maxColumn,description:p.localize(77,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{enabled:r(be.enabled,this.defaultValue.enabled),autohide:r(be.autohide,this.defaultValue.autohide),size:o(be.size,this.defaultValue.size,[\"proportional\",\"fill\",\"fit\"]),side:o(be.side,this.defaultValue.side,[\"right\",\"left\"]),showSlider:o(be.showSlider,this.defaultValue.showSlider,[\"always\",\"mouseover\"]),renderCharacters:r(be.renderCharacters,this.defaultValue.renderCharacters),scale:c.clampedInt(be.scale,1,1,3),maxColumn:c.clampedInt(be.maxColumn,this.defaultValue.maxColumn,1,1e4)}}}function re(Ie){return Ie===\"ctrlCmd\"?y.isMacintosh?\"metaKey\":\"ctrlKey\":\"altKey\"}class de extends b{constructor(){super(83,\"padding\",{top:0,bottom:0},{\"editor.padding.top\":{type:\"number\",default:0,minimum:0,maximum:1e3,description:p.localize(78,null)},\"editor.padding.bottom\":{type:\"number\",default:0,minimum:0,maximum:1e3,description:p.localize(79,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{top:c.clampedInt(be.top,0,0,1e3),bottom:c.clampedInt(be.bottom,0,0,1e3)}}}class he extends b{constructor(){const fe={enabled:!0,cycle:!0};super(85,\"parameterHints\",fe,{\"editor.parameterHints.enabled\":{type:\"boolean\",default:fe.enabled,description:p.localize(80,null)},\"editor.parameterHints.cycle\":{type:\"boolean\",default:fe.cycle,description:p.localize(81,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{enabled:r(be.enabled,this.defaultValue.enabled),cycle:r(be.cycle,this.defaultValue.cycle)}}}class me extends n{constructor(){super(141)}compute(fe,be,Ne){return fe.pixelRatio}}class X extends b{constructor(){const fe={other:\"on\",comments:\"off\",strings:\"off\"},be=[{type:\"boolean\"},{type:\"string\",enum:[\"on\",\"inline\",\"off\"],enumDescriptions:[p.localize(82,null),p.localize(83,null),p.localize(84,null)]}];super(88,\"quickSuggestions\",fe,{type:\"object\",additionalProperties:!1,properties:{strings:{anyOf:be,default:fe.strings,description:p.localize(85,null)},comments:{anyOf:be,default:fe.comments,description:p.localize(86,null)},other:{anyOf:be,default:fe.other,description:p.localize(87,null)}},default:fe,markdownDescription:p.localize(88,null,\"#editor.suggestOnTriggerCharacters#\")}),this.defaultValue=fe}validate(fe){if(typeof fe==\"boolean\"){const rt=fe?\"on\":\"off\";return{comments:rt,strings:rt,other:rt}}if(!fe||typeof fe!=\"object\")return this.defaultValue;const{other:be,comments:Ne,strings:Pe}=fe,ze=[\"on\",\"inline\",\"off\"];let Ke,je,Je;return typeof be==\"boolean\"?Ke=be?\"on\":\"off\":Ke=o(be,this.defaultValue.other,ze),typeof Ne==\"boolean\"?je=Ne?\"on\":\"off\":je=o(Ne,this.defaultValue.comments,ze),typeof Pe==\"boolean\"?Je=Pe?\"on\":\"off\":Je=o(Pe,this.defaultValue.strings,ze),{other:Ke,comments:je,strings:Je}}}class U extends b{constructor(){super(67,\"lineNumbers\",{renderType:1,renderFn:null},{type:\"string\",enum:[\"off\",\"on\",\"relative\",\"interval\"],enumDescriptions:[p.localize(89,null),p.localize(90,null),p.localize(91,null),p.localize(92,null)],default:\"on\",description:p.localize(93,null)})}validate(fe){let be=this.defaultValue.renderType,Ne=this.defaultValue.renderFn;return typeof fe<\"u\"&&(typeof fe==\"function\"?(be=4,Ne=fe):fe===\"interval\"?be=3:fe===\"relative\"?be=2:fe===\"on\"?be=1:be=0),{renderType:be,renderFn:Ne}}}function G(Ie){const fe=Ie.get(97);return fe===\"editable\"?Ie.get(90):fe!==\"on\"}e.filterValidationDecorations=G;class z extends b{constructor(){const fe=[],be={type:\"number\",description:p.localize(94,null)};super(101,\"rulers\",fe,{type:\"array\",items:{anyOf:[be,{type:[\"object\"],properties:{column:be,color:{type:\"string\",description:p.localize(95,null),format:\"color-hex\"}}}]},default:fe,description:p.localize(96,null)})}validate(fe){if(Array.isArray(fe)){const be=[];for(const Ne of fe)if(typeof Ne==\"number\")be.push({column:c.clampedInt(Ne,0,0,1e4),color:null});else if(Ne&&typeof Ne==\"object\"){const Pe=Ne;be.push({column:c.clampedInt(Pe.column,0,0,1e4),color:Pe.color})}return be.sort((Ne,Pe)=>Ne.column-Pe.column),be}return this.defaultValue}}class H extends b{constructor(){super(91,\"readOnlyMessage\",void 0)}validate(fe){return!fe||typeof fe!=\"object\"?this.defaultValue:fe}}function Y(Ie,fe){if(typeof Ie!=\"string\")return fe;switch(Ie){case\"hidden\":return 2;case\"visible\":return 3;default:return 1}}class j extends b{constructor(){const fe={vertical:1,horizontal:1,arrowSize:11,useShadows:!0,verticalHasArrows:!1,horizontalHasArrows:!1,horizontalScrollbarSize:12,horizontalSliderSize:12,verticalScrollbarSize:14,verticalSliderSize:14,handleMouseWheel:!0,alwaysConsumeMouseWheel:!0,scrollByPage:!1,ignoreHorizontalScrollbarInContentHeight:!1};super(102,\"scrollbar\",fe,{\"editor.scrollbar.vertical\":{type:\"string\",enum:[\"auto\",\"visible\",\"hidden\"],enumDescriptions:[p.localize(97,null),p.localize(98,null),p.localize(99,null)],default:\"auto\",description:p.localize(100,null)},\"editor.scrollbar.horizontal\":{type:\"string\",enum:[\"auto\",\"visible\",\"hidden\"],enumDescriptions:[p.localize(101,null),p.localize(102,null),p.localize(103,null)],default:\"auto\",description:p.localize(104,null)},\"editor.scrollbar.verticalScrollbarSize\":{type:\"number\",default:fe.verticalScrollbarSize,description:p.localize(105,null)},\"editor.scrollbar.horizontalScrollbarSize\":{type:\"number\",default:fe.horizontalScrollbarSize,description:p.localize(106,null)},\"editor.scrollbar.scrollByPage\":{type:\"boolean\",default:fe.scrollByPage,description:p.localize(107,null)},\"editor.scrollbar.ignoreHorizontalScrollbarInContentHeight\":{type:\"boolean\",default:fe.ignoreHorizontalScrollbarInContentHeight,description:p.localize(108,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe,Ne=c.clampedInt(be.horizontalScrollbarSize,this.defaultValue.horizontalScrollbarSize,0,1e3),Pe=c.clampedInt(be.verticalScrollbarSize,this.defaultValue.verticalScrollbarSize,0,1e3);return{arrowSize:c.clampedInt(be.arrowSize,this.defaultValue.arrowSize,0,1e3),vertical:Y(be.vertical,this.defaultValue.vertical),horizontal:Y(be.horizontal,this.defaultValue.horizontal),useShadows:r(be.useShadows,this.defaultValue.useShadows),verticalHasArrows:r(be.verticalHasArrows,this.defaultValue.verticalHasArrows),horizontalHasArrows:r(be.horizontalHasArrows,this.defaultValue.horizontalHasArrows),handleMouseWheel:r(be.handleMouseWheel,this.defaultValue.handleMouseWheel),alwaysConsumeMouseWheel:r(be.alwaysConsumeMouseWheel,this.defaultValue.alwaysConsumeMouseWheel),horizontalScrollbarSize:Ne,horizontalSliderSize:c.clampedInt(be.horizontalSliderSize,Ne,0,1e3),verticalScrollbarSize:Pe,verticalSliderSize:c.clampedInt(be.verticalSliderSize,Pe,0,1e3),scrollByPage:r(be.scrollByPage,this.defaultValue.scrollByPage),ignoreHorizontalScrollbarInContentHeight:r(be.ignoreHorizontalScrollbarInContentHeight,this.defaultValue.ignoreHorizontalScrollbarInContentHeight)}}}e.inUntrustedWorkspace=\"inUntrustedWorkspace\",e.unicodeHighlightConfigKeys={allowedCharacters:\"editor.unicodeHighlight.allowedCharacters\",invisibleCharacters:\"editor.unicodeHighlight.invisibleCharacters\",nonBasicASCII:\"editor.unicodeHighlight.nonBasicASCII\",ambiguousCharacters:\"editor.unicodeHighlight.ambiguousCharacters\",includeComments:\"editor.unicodeHighlight.includeComments\",includeStrings:\"editor.unicodeHighlight.includeStrings\",allowedLocales:\"editor.unicodeHighlight.allowedLocales\"};class Z extends b{constructor(){const fe={nonBasicASCII:e.inUntrustedWorkspace,invisibleCharacters:!0,ambiguousCharacters:!0,includeComments:e.inUntrustedWorkspace,includeStrings:!0,allowedCharacters:{},allowedLocales:{_os:!0,_vscode:!0}};super(124,\"unicodeHighlight\",fe,{[e.unicodeHighlightConfigKeys.nonBasicASCII]:{restricted:!0,type:[\"boolean\",\"string\"],enum:[!0,!1,e.inUntrustedWorkspace],default:fe.nonBasicASCII,description:p.localize(109,null)},[e.unicodeHighlightConfigKeys.invisibleCharacters]:{restricted:!0,type:\"boolean\",default:fe.invisibleCharacters,description:p.localize(110,null)},[e.unicodeHighlightConfigKeys.ambiguousCharacters]:{restricted:!0,type:\"boolean\",default:fe.ambiguousCharacters,description:p.localize(111,null)},[e.unicodeHighlightConfigKeys.includeComments]:{restricted:!0,type:[\"boolean\",\"string\"],enum:[!0,!1,e.inUntrustedWorkspace],default:fe.includeComments,description:p.localize(112,null)},[e.unicodeHighlightConfigKeys.includeStrings]:{restricted:!0,type:[\"boolean\",\"string\"],enum:[!0,!1,e.inUntrustedWorkspace],default:fe.includeStrings,description:p.localize(113,null)},[e.unicodeHighlightConfigKeys.allowedCharacters]:{restricted:!0,type:\"object\",default:fe.allowedCharacters,description:p.localize(114,null),additionalProperties:{type:\"boolean\"}},[e.unicodeHighlightConfigKeys.allowedLocales]:{restricted:!0,type:\"object\",additionalProperties:{type:\"boolean\"},default:fe.allowedLocales,description:p.localize(115,null)}})}applyUpdate(fe,be){let Ne=!1;be.allowedCharacters&&fe&&(k.equals(fe.allowedCharacters,be.allowedCharacters)||(fe={...fe,allowedCharacters:be.allowedCharacters},Ne=!0)),be.allowedLocales&&fe&&(k.equals(fe.allowedLocales,be.allowedLocales)||(fe={...fe,allowedLocales:be.allowedLocales},Ne=!0));const Pe=super.applyUpdate(fe,be);return Ne?new a(Pe.newValue,!0):Pe}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{nonBasicASCII:ce(be.nonBasicASCII,e.inUntrustedWorkspace,[!0,!1,e.inUntrustedWorkspace]),invisibleCharacters:r(be.invisibleCharacters,this.defaultValue.invisibleCharacters),ambiguousCharacters:r(be.ambiguousCharacters,this.defaultValue.ambiguousCharacters),includeComments:ce(be.includeComments,e.inUntrustedWorkspace,[!0,!1,e.inUntrustedWorkspace]),includeStrings:ce(be.includeStrings,e.inUntrustedWorkspace,[!0,!1,e.inUntrustedWorkspace]),allowedCharacters:this.validateBooleanMap(fe.allowedCharacters,this.defaultValue.allowedCharacters),allowedLocales:this.validateBooleanMap(fe.allowedLocales,this.defaultValue.allowedLocales)}}validateBooleanMap(fe,be){if(typeof fe!=\"object\"||!fe)return be;const Ne={};for(const[Pe,ze]of Object.entries(fe))ze===!0&&(Ne[Pe]=!0);return Ne}}class ee extends b{constructor(){const fe={enabled:!0,mode:\"subwordSmart\",showToolbar:\"onHover\",suppressSuggestions:!1,keepOnBlur:!1,fontFamily:\"default\"};super(62,\"inlineSuggest\",fe,{\"editor.inlineSuggest.enabled\":{type:\"boolean\",default:fe.enabled,description:p.localize(116,null)},\"editor.inlineSuggest.showToolbar\":{type:\"string\",default:fe.showToolbar,enum:[\"always\",\"onHover\",\"never\"],enumDescriptions:[p.localize(117,null),p.localize(118,null),p.localize(119,null)],description:p.localize(120,null)},\"editor.inlineSuggest.suppressSuggestions\":{type:\"boolean\",default:fe.suppressSuggestions,description:p.localize(121,null)},\"editor.inlineSuggest.fontFamily\":{type:\"string\",default:fe.fontFamily,description:p.localize(122,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{enabled:r(be.enabled,this.defaultValue.enabled),mode:o(be.mode,this.defaultValue.mode,[\"prefix\",\"subword\",\"subwordSmart\"]),showToolbar:o(be.showToolbar,this.defaultValue.showToolbar,[\"always\",\"onHover\",\"never\"]),suppressSuggestions:r(be.suppressSuggestions,this.defaultValue.suppressSuggestions),keepOnBlur:r(be.keepOnBlur,this.defaultValue.keepOnBlur),fontFamily:l.string(be.fontFamily,this.defaultValue.fontFamily)}}}class le extends b{constructor(){const fe={enabled:E.EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions.enabled,independentColorPoolPerBracketType:E.EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions.independentColorPoolPerBracketType};super(15,\"bracketPairColorization\",fe,{\"editor.bracketPairColorization.enabled\":{type:\"boolean\",default:fe.enabled,markdownDescription:p.localize(123,null,\"`#workbench.colorCustomizations#`\")},\"editor.bracketPairColorization.independentColorPoolPerBracketType\":{type:\"boolean\",default:fe.independentColorPoolPerBracketType,description:p.localize(124,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{enabled:r(be.enabled,this.defaultValue.enabled),independentColorPoolPerBracketType:r(be.independentColorPoolPerBracketType,this.defaultValue.independentColorPoolPerBracketType)}}}class ue extends b{constructor(){const fe={bracketPairs:!1,bracketPairsHorizontal:\"active\",highlightActiveBracketPair:!0,indentation:!0,highlightActiveIndentation:!0};super(16,\"guides\",fe,{\"editor.guides.bracketPairs\":{type:[\"boolean\",\"string\"],enum:[!0,\"active\",!1],enumDescriptions:[p.localize(125,null),p.localize(126,null),p.localize(127,null)],default:fe.bracketPairs,description:p.localize(128,null)},\"editor.guides.bracketPairsHorizontal\":{type:[\"boolean\",\"string\"],enum:[!0,\"active\",!1],enumDescriptions:[p.localize(129,null),p.localize(130,null),p.localize(131,null)],default:fe.bracketPairsHorizontal,description:p.localize(132,null)},\"editor.guides.highlightActiveBracketPair\":{type:\"boolean\",default:fe.highlightActiveBracketPair,description:p.localize(133,null)},\"editor.guides.indentation\":{type:\"boolean\",default:fe.indentation,description:p.localize(134,null)},\"editor.guides.highlightActiveIndentation\":{type:[\"boolean\",\"string\"],enum:[!0,\"always\",!1],enumDescriptions:[p.localize(135,null),p.localize(136,null),p.localize(137,null)],default:fe.highlightActiveIndentation,description:p.localize(138,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{bracketPairs:ce(be.bracketPairs,this.defaultValue.bracketPairs,[!0,!1,\"active\"]),bracketPairsHorizontal:ce(be.bracketPairsHorizontal,this.defaultValue.bracketPairsHorizontal,[!0,!1,\"active\"]),highlightActiveBracketPair:r(be.highlightActiveBracketPair,this.defaultValue.highlightActiveBracketPair),indentation:r(be.indentation,this.defaultValue.indentation),highlightActiveIndentation:ce(be.highlightActiveIndentation,this.defaultValue.highlightActiveIndentation,[!0,!1,\"always\"])}}}function ce(Ie,fe,be){const Ne=be.indexOf(Ie);return Ne===-1?fe:be[Ne]}class pe extends b{constructor(){const fe={insertMode:\"insert\",filterGraceful:!0,snippetsPreventQuickSuggestions:!1,localityBonus:!1,shareSuggestSelections:!1,selectionMode:\"always\",showIcons:!0,showStatusBar:!1,preview:!1,previewMode:\"subwordSmart\",showInlineDetails:!0,showMethods:!0,showFunctions:!0,showConstructors:!0,showDeprecated:!0,matchOnWordStartOnly:!0,showFields:!0,showVariables:!0,showClasses:!0,showStructs:!0,showInterfaces:!0,showModules:!0,showProperties:!0,showEvents:!0,showOperators:!0,showUnits:!0,showValues:!0,showConstants:!0,showEnums:!0,showEnumMembers:!0,showKeywords:!0,showWords:!0,showColors:!0,showFiles:!0,showReferences:!0,showFolders:!0,showTypeParameters:!0,showSnippets:!0,showUsers:!0,showIssues:!0};super(117,\"suggest\",fe,{\"editor.suggest.insertMode\":{type:\"string\",enum:[\"insert\",\"replace\"],enumDescriptions:[p.localize(139,null),p.localize(140,null)],default:fe.insertMode,description:p.localize(141,null)},\"editor.suggest.filterGraceful\":{type:\"boolean\",default:fe.filterGraceful,description:p.localize(142,null)},\"editor.suggest.localityBonus\":{type:\"boolean\",default:fe.localityBonus,description:p.localize(143,null)},\"editor.suggest.shareSuggestSelections\":{type:\"boolean\",default:fe.shareSuggestSelections,markdownDescription:p.localize(144,null)},\"editor.suggest.selectionMode\":{type:\"string\",enum:[\"always\",\"never\",\"whenTriggerCharacter\",\"whenQuickSuggestion\"],enumDescriptions:[p.localize(145,null),p.localize(146,null),p.localize(147,null),p.localize(148,null)],default:fe.selectionMode,markdownDescription:p.localize(149,null)},\"editor.suggest.snippetsPreventQuickSuggestions\":{type:\"boolean\",default:fe.snippetsPreventQuickSuggestions,description:p.localize(150,null)},\"editor.suggest.showIcons\":{type:\"boolean\",default:fe.showIcons,description:p.localize(151,null)},\"editor.suggest.showStatusBar\":{type:\"boolean\",default:fe.showStatusBar,description:p.localize(152,null)},\"editor.suggest.preview\":{type:\"boolean\",default:fe.preview,description:p.localize(153,null)},\"editor.suggest.showInlineDetails\":{type:\"boolean\",default:fe.showInlineDetails,description:p.localize(154,null)},\"editor.suggest.maxVisibleSuggestions\":{type:\"number\",deprecationMessage:p.localize(155,null)},\"editor.suggest.filteredTypes\":{type:\"object\",deprecationMessage:p.localize(156,null)},\"editor.suggest.showMethods\":{type:\"boolean\",default:!0,markdownDescription:p.localize(157,null)},\"editor.suggest.showFunctions\":{type:\"boolean\",default:!0,markdownDescription:p.localize(158,null)},\"editor.suggest.showConstructors\":{type:\"boolean\",default:!0,markdownDescription:p.localize(159,null)},\"editor.suggest.showDeprecated\":{type:\"boolean\",default:!0,markdownDescription:p.localize(160,null)},\"editor.suggest.matchOnWordStartOnly\":{type:\"boolean\",default:!0,markdownDescription:p.localize(161,null)},\"editor.suggest.showFields\":{type:\"boolean\",default:!0,markdownDescription:p.localize(162,null)},\"editor.suggest.showVariables\":{type:\"boolean\",default:!0,markdownDescription:p.localize(163,null)},\"editor.suggest.showClasses\":{type:\"boolean\",default:!0,markdownDescription:p.localize(164,null)},\"editor.suggest.showStructs\":{type:\"boolean\",default:!0,markdownDescription:p.localize(165,null)},\"editor.suggest.showInterfaces\":{type:\"boolean\",default:!0,markdownDescription:p.localize(166,null)},\"editor.suggest.showModules\":{type:\"boolean\",default:!0,markdownDescription:p.localize(167,null)},\"editor.suggest.showProperties\":{type:\"boolean\",default:!0,markdownDescription:p.localize(168,null)},\"editor.suggest.showEvents\":{type:\"boolean\",default:!0,markdownDescription:p.localize(169,null)},\"editor.suggest.showOperators\":{type:\"boolean\",default:!0,markdownDescription:p.localize(170,null)},\"editor.suggest.showUnits\":{type:\"boolean\",default:!0,markdownDescription:p.localize(171,null)},\"editor.suggest.showValues\":{type:\"boolean\",default:!0,markdownDescription:p.localize(172,null)},\"editor.suggest.showConstants\":{type:\"boolean\",default:!0,markdownDescription:p.localize(173,null)},\"editor.suggest.showEnums\":{type:\"boolean\",default:!0,markdownDescription:p.localize(174,null)},\"editor.suggest.showEnumMembers\":{type:\"boolean\",default:!0,markdownDescription:p.localize(175,null)},\"editor.suggest.showKeywords\":{type:\"boolean\",default:!0,markdownDescription:p.localize(176,null)},\"editor.suggest.showWords\":{type:\"boolean\",default:!0,markdownDescription:p.localize(177,null)},\"editor.suggest.showColors\":{type:\"boolean\",default:!0,markdownDescription:p.localize(178,null)},\"editor.suggest.showFiles\":{type:\"boolean\",default:!0,markdownDescription:p.localize(179,null)},\"editor.suggest.showReferences\":{type:\"boolean\",default:!0,markdownDescription:p.localize(180,null)},\"editor.suggest.showCustomcolors\":{type:\"boolean\",default:!0,markdownDescription:p.localize(181,null)},\"editor.suggest.showFolders\":{type:\"boolean\",default:!0,markdownDescription:p.localize(182,null)},\"editor.suggest.showTypeParameters\":{type:\"boolean\",default:!0,markdownDescription:p.localize(183,null)},\"editor.suggest.showSnippets\":{type:\"boolean\",default:!0,markdownDescription:p.localize(184,null)},\"editor.suggest.showUsers\":{type:\"boolean\",default:!0,markdownDescription:p.localize(185,null)},\"editor.suggest.showIssues\":{type:\"boolean\",default:!0,markdownDescription:p.localize(186,null)}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{insertMode:o(be.insertMode,this.defaultValue.insertMode,[\"insert\",\"replace\"]),filterGraceful:r(be.filterGraceful,this.defaultValue.filterGraceful),snippetsPreventQuickSuggestions:r(be.snippetsPreventQuickSuggestions,this.defaultValue.filterGraceful),localityBonus:r(be.localityBonus,this.defaultValue.localityBonus),shareSuggestSelections:r(be.shareSuggestSelections,this.defaultValue.shareSuggestSelections),selectionMode:o(be.selectionMode,this.defaultValue.selectionMode,[\"always\",\"never\",\"whenQuickSuggestion\",\"whenTriggerCharacter\"]),showIcons:r(be.showIcons,this.defaultValue.showIcons),showStatusBar:r(be.showStatusBar,this.defaultValue.showStatusBar),preview:r(be.preview,this.defaultValue.preview),previewMode:o(be.previewMode,this.defaultValue.previewMode,[\"prefix\",\"subword\",\"subwordSmart\"]),showInlineDetails:r(be.showInlineDetails,this.defaultValue.showInlineDetails),showMethods:r(be.showMethods,this.defaultValue.showMethods),showFunctions:r(be.showFunctions,this.defaultValue.showFunctions),showConstructors:r(be.showConstructors,this.defaultValue.showConstructors),showDeprecated:r(be.showDeprecated,this.defaultValue.showDeprecated),matchOnWordStartOnly:r(be.matchOnWordStartOnly,this.defaultValue.matchOnWordStartOnly),showFields:r(be.showFields,this.defaultValue.showFields),showVariables:r(be.showVariables,this.defaultValue.showVariables),showClasses:r(be.showClasses,this.defaultValue.showClasses),showStructs:r(be.showStructs,this.defaultValue.showStructs),showInterfaces:r(be.showInterfaces,this.defaultValue.showInterfaces),showModules:r(be.showModules,this.defaultValue.showModules),showProperties:r(be.showProperties,this.defaultValue.showProperties),showEvents:r(be.showEvents,this.defaultValue.showEvents),showOperators:r(be.showOperators,this.defaultValue.showOperators),showUnits:r(be.showUnits,this.defaultValue.showUnits),showValues:r(be.showValues,this.defaultValue.showValues),showConstants:r(be.showConstants,this.defaultValue.showConstants),showEnums:r(be.showEnums,this.defaultValue.showEnums),showEnumMembers:r(be.showEnumMembers,this.defaultValue.showEnumMembers),showKeywords:r(be.showKeywords,this.defaultValue.showKeywords),showWords:r(be.showWords,this.defaultValue.showWords),showColors:r(be.showColors,this.defaultValue.showColors),showFiles:r(be.showFiles,this.defaultValue.showFiles),showReferences:r(be.showReferences,this.defaultValue.showReferences),showFolders:r(be.showFolders,this.defaultValue.showFolders),showTypeParameters:r(be.showTypeParameters,this.defaultValue.showTypeParameters),showSnippets:r(be.showSnippets,this.defaultValue.showSnippets),showUsers:r(be.showUsers,this.defaultValue.showUsers),showIssues:r(be.showIssues,this.defaultValue.showIssues)}}}class ve extends b{constructor(){super(112,\"smartSelect\",{selectLeadingAndTrailingWhitespace:!0,selectSubwords:!0},{\"editor.smartSelect.selectLeadingAndTrailingWhitespace\":{description:p.localize(187,null),default:!0,type:\"boolean\"},\"editor.smartSelect.selectSubwords\":{description:p.localize(188,null),default:!0,type:\"boolean\"}})}validate(fe){return!fe||typeof fe!=\"object\"?this.defaultValue:{selectLeadingAndTrailingWhitespace:r(fe.selectLeadingAndTrailingWhitespace,this.defaultValue.selectLeadingAndTrailingWhitespace),selectSubwords:r(fe.selectSubwords,this.defaultValue.selectSubwords)}}}class Ce extends b{constructor(){super(136,\"wrappingIndent\",1,{\"editor.wrappingIndent\":{type:\"string\",enum:[\"none\",\"same\",\"indent\",\"deepIndent\"],enumDescriptions:[p.localize(189,null),p.localize(190,null),p.localize(191,null),p.localize(192,null)],description:p.localize(193,null),default:\"same\"}})}validate(fe){switch(fe){case\"none\":return 0;case\"same\":return 1;case\"indent\":return 2;case\"deepIndent\":return 3}return 1}compute(fe,be,Ne){return be.get(2)===2?0:Ne}}class Se extends n{constructor(){super(144)}compute(fe,be,Ne){const Pe=be.get(143);return{isDominatedByLongLines:fe.isDominatedByLongLines,isWordWrapMinified:Pe.isWordWrapMinified,isViewportWrapping:Pe.isViewportWrapping,wrappingColumn:Pe.wrappingColumn}}}class _e extends b{constructor(){const fe={enabled:!0,showDropSelector:\"afterDrop\"};super(36,\"dropIntoEditor\",fe,{\"editor.dropIntoEditor.enabled\":{type:\"boolean\",default:fe.enabled,markdownDescription:p.localize(194,null)},\"editor.dropIntoEditor.showDropSelector\":{type:\"string\",markdownDescription:p.localize(195,null),enum:[\"afterDrop\",\"never\"],enumDescriptions:[p.localize(196,null),p.localize(197,null)],default:\"afterDrop\"}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{enabled:r(be.enabled,this.defaultValue.enabled),showDropSelector:o(be.showDropSelector,this.defaultValue.showDropSelector,[\"afterDrop\",\"never\"])}}}class Ee extends b{constructor(){const fe={enabled:!0,showPasteSelector:\"afterPaste\"};super(84,\"pasteAs\",fe,{\"editor.pasteAs.enabled\":{type:\"boolean\",default:fe.enabled,markdownDescription:p.localize(198,null)},\"editor.pasteAs.showPasteSelector\":{type:\"string\",markdownDescription:p.localize(199,null),enum:[\"afterPaste\",\"never\"],enumDescriptions:[p.localize(200,null),p.localize(201,null)],default:\"afterPaste\"}})}validate(fe){if(!fe||typeof fe!=\"object\")return this.defaultValue;const be=fe;return{enabled:r(be.enabled,this.defaultValue.enabled),showPasteSelector:o(be.showPasteSelector,this.defaultValue.showPasteSelector,[\"afterPaste\",\"never\"])}}}const Ae=\"Consolas, 'Courier New', monospace\",xe=\"Menlo, Monaco, 'Courier New', monospace\",Be=\"'Droid Sans Mono', 'monospace', monospace\";e.EDITOR_FONT_DEFAULTS={fontFamily:y.isMacintosh?xe:y.isLinux?Be:Ae,fontWeight:\"normal\",fontSize:y.isMacintosh?12:14,lineHeight:0,letterSpacing:0},e.editorOptionsRegistry=[];function De(Ie){return e.editorOptionsRegistry[Ie.id]=Ie,Ie}e.EditorOptions={acceptSuggestionOnCommitCharacter:De(new u(0,\"acceptSuggestionOnCommitCharacter\",!0,{markdownDescription:p.localize(202,null)})),acceptSuggestionOnEnter:De(new g(1,\"acceptSuggestionOnEnter\",\"on\",[\"on\",\"smart\",\"off\"],{markdownEnumDescriptions:[\"\",p.localize(203,null),\"\"],markdownDescription:p.localize(204,null)})),accessibilitySupport:De(new C),accessibilityPageSize:De(new c(3,\"accessibilityPageSize\",10,1,1073741824,{description:p.localize(205,null),tags:[\"accessibility\"]})),ariaLabel:De(new l(4,\"ariaLabel\",p.localize(206,null))),ariaRequired:De(new u(5,\"ariaRequired\",!1,void 0)),screenReaderAnnounceInlineSuggestion:De(new u(8,\"screenReaderAnnounceInlineSuggestion\",!0,{description:p.localize(207,null),tags:[\"accessibility\"]})),autoClosingBrackets:De(new g(6,\"autoClosingBrackets\",\"languageDefined\",[\"always\",\"languageDefined\",\"beforeWhitespace\",\"never\"],{enumDescriptions:[\"\",p.localize(208,null),p.localize(209,null),\"\"],description:p.localize(210,null)})),autoClosingComments:De(new g(7,\"autoClosingComments\",\"languageDefined\",[\"always\",\"languageDefined\",\"beforeWhitespace\",\"never\"],{enumDescriptions:[\"\",p.localize(211,null),p.localize(212,null),\"\"],description:p.localize(213,null)})),autoClosingDelete:De(new g(9,\"autoClosingDelete\",\"auto\",[\"always\",\"auto\",\"never\"],{enumDescriptions:[\"\",p.localize(214,null),\"\"],description:p.localize(215,null)})),autoClosingOvertype:De(new g(10,\"autoClosingOvertype\",\"auto\",[\"always\",\"auto\",\"never\"],{enumDescriptions:[\"\",p.localize(216,null),\"\"],description:p.localize(217,null)})),autoClosingQuotes:De(new g(11,\"autoClosingQuotes\",\"languageDefined\",[\"always\",\"languageDefined\",\"beforeWhitespace\",\"never\"],{enumDescriptions:[\"\",p.localize(218,null),p.localize(219,null),\"\"],description:p.localize(220,null)})),autoIndent:De(new h(12,\"autoIndent\",4,\"full\",[\"none\",\"keep\",\"brackets\",\"advanced\",\"full\"],m,{enumDescriptions:[p.localize(221,null),p.localize(222,null),p.localize(223,null),p.localize(224,null),p.localize(225,null)],description:p.localize(226,null)})),automaticLayout:De(new u(13,\"automaticLayout\",!1)),autoSurround:De(new g(14,\"autoSurround\",\"languageDefined\",[\"languageDefined\",\"quotes\",\"brackets\",\"never\"],{enumDescriptions:[p.localize(227,null),p.localize(228,null),p.localize(229,null),\"\"],description:p.localize(230,null)})),bracketPairColorization:De(new le),bracketPairGuides:De(new ue),stickyTabStops:De(new u(115,\"stickyTabStops\",!1,{description:p.localize(231,null)})),codeLens:De(new u(17,\"codeLens\",!0,{description:p.localize(232,null)})),codeLensFontFamily:De(new l(18,\"codeLensFontFamily\",\"\",{description:p.localize(233,null)})),codeLensFontSize:De(new c(19,\"codeLensFontSize\",0,0,100,{type:\"number\",default:0,minimum:0,maximum:100,markdownDescription:p.localize(234,null)})),colorDecorators:De(new u(20,\"colorDecorators\",!0,{description:p.localize(235,null)})),colorDecoratorActivatedOn:De(new g(146,\"colorDecoratorsActivatedOn\",\"clickAndHover\",[\"clickAndHover\",\"hover\",\"click\"],{enumDescriptions:[p.localize(236,null),p.localize(237,null),p.localize(238,null)],description:p.localize(239,null)})),colorDecoratorsLimit:De(new c(21,\"colorDecoratorsLimit\",500,1,1e6,{markdownDescription:p.localize(240,null)})),columnSelection:De(new u(22,\"columnSelection\",!1,{description:p.localize(241,null)})),comments:De(new w),contextmenu:De(new u(24,\"contextmenu\",!0)),copyWithSyntaxHighlighting:De(new u(25,\"copyWithSyntaxHighlighting\",!0,{description:p.localize(242,null)})),cursorBlinking:De(new h(26,\"cursorBlinking\",1,\"blink\",[\"blink\",\"smooth\",\"phase\",\"expand\",\"solid\"],D,{description:p.localize(243,null)})),cursorSmoothCaretAnimation:De(new g(27,\"cursorSmoothCaretAnimation\",\"off\",[\"off\",\"explicit\",\"on\"],{enumDescriptions:[p.localize(244,null),p.localize(245,null),p.localize(246,null)],description:p.localize(247,null)})),cursorStyle:De(new h(28,\"cursorStyle\",I.Line,\"line\",[\"line\",\"block\",\"underline\",\"line-thin\",\"block-outline\",\"underline-thin\"],T,{description:p.localize(248,null)})),cursorSurroundingLines:De(new c(29,\"cursorSurroundingLines\",0,0,1073741824,{description:p.localize(249,null)})),cursorSurroundingLinesStyle:De(new g(30,\"cursorSurroundingLinesStyle\",\"default\",[\"default\",\"all\"],{enumDescriptions:[p.localize(250,null),p.localize(251,null)],markdownDescription:p.localize(252,null)})),cursorWidth:De(new c(31,\"cursorWidth\",0,0,1073741824,{markdownDescription:p.localize(253,null)})),disableLayerHinting:De(new u(32,\"disableLayerHinting\",!1)),disableMonospaceOptimizations:De(new u(33,\"disableMonospaceOptimizations\",!1)),domReadOnly:De(new u(34,\"domReadOnly\",!1)),dragAndDrop:De(new u(35,\"dragAndDrop\",!0,{description:p.localize(254,null)})),emptySelectionClipboard:De(new P),dropIntoEditor:De(new _e),stickyScroll:De(new ae),experimentalWhitespaceRendering:De(new g(38,\"experimentalWhitespaceRendering\",\"svg\",[\"svg\",\"font\",\"off\"],{enumDescriptions:[p.localize(255,null),p.localize(256,null),p.localize(257,null)],description:p.localize(258,null)})),extraEditorClassName:De(new l(39,\"extraEditorClassName\",\"\")),fastScrollSensitivity:De(new s(40,\"fastScrollSensitivity\",5,Ie=>Ie<=0?5:Ie,{markdownDescription:p.localize(259,null)})),find:De(new N),fixedOverflowWidgets:De(new u(42,\"fixedOverflowWidgets\",!1)),folding:De(new u(43,\"folding\",!0,{description:p.localize(260,null)})),foldingStrategy:De(new g(44,\"foldingStrategy\",\"auto\",[\"auto\",\"indentation\"],{enumDescriptions:[p.localize(261,null),p.localize(262,null)],description:p.localize(263,null)})),foldingHighlight:De(new u(45,\"foldingHighlight\",!0,{description:p.localize(264,null)})),foldingImportsByDefault:De(new u(46,\"foldingImportsByDefault\",!1,{description:p.localize(265,null)})),foldingMaximumRegions:De(new c(47,\"foldingMaximumRegions\",5e3,10,65e3,{description:p.localize(266,null)})),unfoldOnClickAfterEndOfLine:De(new u(48,\"unfoldOnClickAfterEndOfLine\",!1,{description:p.localize(267,null)})),fontFamily:De(new l(49,\"fontFamily\",e.EDITOR_FONT_DEFAULTS.fontFamily,{description:p.localize(268,null)})),fontInfo:De(new x),fontLigatures2:De(new M),fontSize:De(new O),fontWeight:De(new B),fontVariations:De(new R),formatOnPaste:De(new u(55,\"formatOnPaste\",!1,{description:p.localize(269,null)})),formatOnType:De(new u(56,\"formatOnType\",!1,{description:p.localize(270,null)})),glyphMargin:De(new u(57,\"glyphMargin\",!0,{description:p.localize(271,null)})),gotoLocation:De(new W),hideCursorInOverviewRuler:De(new u(59,\"hideCursorInOverviewRuler\",!1,{description:p.localize(272,null)})),hover:De(new V),inDiffEditor:De(new u(61,\"inDiffEditor\",!1)),letterSpacing:De(new s(63,\"letterSpacing\",e.EDITOR_FONT_DEFAULTS.letterSpacing,Ie=>s.clamp(Ie,-5,20),{description:p.localize(273,null)})),lightbulb:De(new ie),lineDecorationsWidth:De(new $),lineHeight:De(new J),lineNumbers:De(new U),lineNumbersMinChars:De(new c(68,\"lineNumbersMinChars\",5,1,300)),linkedEditing:De(new u(69,\"linkedEditing\",!1,{description:p.localize(274,null)})),links:De(new u(70,\"links\",!0,{description:p.localize(275,null)})),matchBrackets:De(new g(71,\"matchBrackets\",\"always\",[\"always\",\"near\",\"never\"],{description:p.localize(276,null)})),minimap:De(new Q),mouseStyle:De(new g(73,\"mouseStyle\",\"text\",[\"text\",\"default\",\"copy\"])),mouseWheelScrollSensitivity:De(new s(74,\"mouseWheelScrollSensitivity\",1,Ie=>Ie===0?1:Ie,{markdownDescription:p.localize(277,null)})),mouseWheelZoom:De(new u(75,\"mouseWheelZoom\",!1,{markdownDescription:y.isMacintosh?p.localize(278,null):p.localize(279,null)})),multiCursorMergeOverlapping:De(new u(76,\"multiCursorMergeOverlapping\",!0,{description:p.localize(280,null)})),multiCursorModifier:De(new h(77,\"multiCursorModifier\",\"altKey\",\"alt\",[\"ctrlCmd\",\"alt\"],re,{markdownEnumDescriptions:[p.localize(281,null),p.localize(282,null)],markdownDescription:p.localize(283,null)})),multiCursorPaste:De(new g(78,\"multiCursorPaste\",\"spread\",[\"spread\",\"full\"],{markdownEnumDescriptions:[p.localize(284,null),p.localize(285,null)],markdownDescription:p.localize(286,null)})),multiCursorLimit:De(new c(79,\"multiCursorLimit\",1e4,1,1e5,{markdownDescription:p.localize(287,null)})),occurrencesHighlight:De(new g(80,\"occurrencesHighlight\",\"singleFile\",[\"off\",\"singleFile\",\"multiFile\"],{markdownEnumDescriptions:[p.localize(288,null),p.localize(289,null),p.localize(290,null)],markdownDescription:p.localize(291,null)})),overviewRulerBorder:De(new u(81,\"overviewRulerBorder\",!0,{description:p.localize(292,null)})),overviewRulerLanes:De(new c(82,\"overviewRulerLanes\",3,0,3)),padding:De(new de),pasteAs:De(new Ee),parameterHints:De(new he),peekWidgetDefaultFocus:De(new g(86,\"peekWidgetDefaultFocus\",\"tree\",[\"tree\",\"editor\"],{enumDescriptions:[p.localize(293,null),p.localize(294,null)],description:p.localize(295,null)})),definitionLinkOpensInPeek:De(new u(87,\"definitionLinkOpensInPeek\",!1,{description:p.localize(296,null)})),quickSuggestions:De(new X),quickSuggestionsDelay:De(new c(89,\"quickSuggestionsDelay\",10,0,1073741824,{description:p.localize(297,null)})),readOnly:De(new u(90,\"readOnly\",!1)),readOnlyMessage:De(new H),renameOnType:De(new u(92,\"renameOnType\",!1,{description:p.localize(298,null),markdownDeprecationMessage:p.localize(299,null)})),renderControlCharacters:De(new u(93,\"renderControlCharacters\",!0,{description:p.localize(300,null),restricted:!0})),renderFinalNewline:De(new g(94,\"renderFinalNewline\",y.isLinux?\"dimmed\":\"on\",[\"off\",\"on\",\"dimmed\"],{description:p.localize(301,null)})),renderLineHighlight:De(new g(95,\"renderLineHighlight\",\"line\",[\"none\",\"gutter\",\"line\",\"all\"],{enumDescriptions:[\"\",\"\",\"\",p.localize(302,null)],description:p.localize(303,null)})),renderLineHighlightOnlyWhenFocus:De(new u(96,\"renderLineHighlightOnlyWhenFocus\",!1,{description:p.localize(304,null)})),renderValidationDecorations:De(new g(97,\"renderValidationDecorations\",\"editable\",[\"editable\",\"on\",\"off\"])),renderWhitespace:De(new g(98,\"renderWhitespace\",\"selection\",[\"none\",\"boundary\",\"selection\",\"trailing\",\"all\"],{enumDescriptions:[\"\",p.localize(305,null),p.localize(306,null),p.localize(307,null),\"\"],description:p.localize(308,null)})),revealHorizontalRightPadding:De(new c(99,\"revealHorizontalRightPadding\",15,0,1e3)),roundedSelection:De(new u(100,\"roundedSelection\",!0,{description:p.localize(309,null)})),rulers:De(new z),scrollbar:De(new j),scrollBeyondLastColumn:De(new c(103,\"scrollBeyondLastColumn\",4,0,1073741824,{description:p.localize(310,null)})),scrollBeyondLastLine:De(new u(104,\"scrollBeyondLastLine\",!0,{description:p.localize(311,null)})),scrollPredominantAxis:De(new u(105,\"scrollPredominantAxis\",!0,{description:p.localize(312,null)})),selectionClipboard:De(new u(106,\"selectionClipboard\",!0,{description:p.localize(313,null),included:y.isLinux})),selectionHighlight:De(new u(107,\"selectionHighlight\",!0,{description:p.localize(314,null)})),selectOnLineNumbers:De(new u(108,\"selectOnLineNumbers\",!0)),showFoldingControls:De(new g(109,\"showFoldingControls\",\"mouseover\",[\"always\",\"never\",\"mouseover\"],{enumDescriptions:[p.localize(315,null),p.localize(316,null),p.localize(317,null)],description:p.localize(318,null)})),showUnused:De(new u(110,\"showUnused\",!0,{description:p.localize(319,null)})),showDeprecated:De(new u(138,\"showDeprecated\",!0,{description:p.localize(320,null)})),inlayHints:De(new ne),snippetSuggestions:De(new g(111,\"snippetSuggestions\",\"inline\",[\"top\",\"bottom\",\"inline\",\"none\"],{enumDescriptions:[p.localize(321,null),p.localize(322,null),p.localize(323,null),p.localize(324,null)],description:p.localize(325,null)})),smartSelect:De(new ve),smoothScrolling:De(new u(113,\"smoothScrolling\",!1,{description:p.localize(326,null)})),stopRenderingLineAfter:De(new c(116,\"stopRenderingLineAfter\",1e4,-1,1073741824)),suggest:De(new pe),inlineSuggest:De(new ee),inlineCompletionsAccessibilityVerbose:De(new u(147,\"inlineCompletionsAccessibilityVerbose\",!1,{description:p.localize(327,null)})),suggestFontSize:De(new c(118,\"suggestFontSize\",0,0,1e3,{markdownDescription:p.localize(328,null,\"`0`\",\"`#editor.fontSize#`\")})),suggestLineHeight:De(new c(119,\"suggestLineHeight\",0,0,1e3,{markdownDescription:p.localize(329,null,\"`0`\",\"`#editor.lineHeight#`\")})),suggestOnTriggerCharacters:De(new u(120,\"suggestOnTriggerCharacters\",!0,{description:p.localize(330,null)})),suggestSelection:De(new g(121,\"suggestSelection\",\"first\",[\"first\",\"recentlyUsed\",\"recentlyUsedByPrefix\"],{markdownEnumDescriptions:[p.localize(331,null),p.localize(332,null),p.localize(333,null)],description:p.localize(334,null)})),tabCompletion:De(new g(122,\"tabCompletion\",\"off\",[\"on\",\"off\",\"onlySnippets\"],{enumDescriptions:[p.localize(335,null),p.localize(336,null),p.localize(337,null)],description:p.localize(338,null)})),tabIndex:De(new c(123,\"tabIndex\",0,-1,1073741824)),unicodeHighlight:De(new Z),unusualLineTerminators:De(new g(125,\"unusualLineTerminators\",\"prompt\",[\"auto\",\"off\",\"prompt\"],{enumDescriptions:[p.localize(339,null),p.localize(340,null),p.localize(341,null)],description:p.localize(342,null)})),useShadowDOM:De(new u(126,\"useShadowDOM\",!0)),useTabStops:De(new u(127,\"useTabStops\",!0,{description:p.localize(343,null)})),wordBreak:De(new g(128,\"wordBreak\",\"normal\",[\"normal\",\"keepAll\"],{markdownEnumDescriptions:[p.localize(344,null),p.localize(345,null)],description:p.localize(346,null)})),wordSeparators:De(new l(129,\"wordSeparators\",S.USUAL_WORD_SEPARATORS,{description:p.localize(347,null)})),wordWrap:De(new g(130,\"wordWrap\",\"off\",[\"off\",\"on\",\"wordWrapColumn\",\"bounded\"],{markdownEnumDescriptions:[p.localize(348,null),p.localize(349,null),p.localize(350,null),p.localize(351,null)],description:p.localize(352,null)})),wordWrapBreakAfterCharacters:De(new l(131,\"wordWrapBreakAfterCharacters\",\" \t})]?|/&.,;\\xA2\\xB0\\u2032\\u2033\\u2030\\u2103\\u3001\\u3002\\uFF61\\uFF64\\uFFE0\\uFF0C\\uFF0E\\uFF1A\\uFF1B\\uFF1F\\uFF01\\uFF05\\u30FB\\uFF65\\u309D\\u309E\\u30FD\\u30FE\\u30FC\\u30A1\\u30A3\\u30A5\\u30A7\\u30A9\\u30C3\\u30E3\\u30E5\\u30E7\\u30EE\\u30F5\\u30F6\\u3041\\u3043\\u3045\\u3047\\u3049\\u3063\\u3083\\u3085\\u3087\\u308E\\u3095\\u3096\\u31F0\\u31F1\\u31F2\\u31F3\\u31F4\\u31F5\\u31F6\\u31F7\\u31F8\\u31F9\\u31FA\\u31FB\\u31FC\\u31FD\\u31FE\\u31FF\\u3005\\u303B\\uFF67\\uFF68\\uFF69\\uFF6A\\uFF6B\\uFF6C\\uFF6D\\uFF6E\\uFF6F\\uFF70\\u201D\\u3009\\u300B\\u300D\\u300F\\u3011\\u3015\\uFF09\\uFF3D\\uFF5D\\uFF63\")),wordWrapBreakBeforeCharacters:De(new l(132,\"wordWrapBreakBeforeCharacters\",\"([{\\u2018\\u201C\\u3008\\u300A\\u300C\\u300E\\u3010\\u3014\\uFF08\\uFF3B\\uFF5B\\uFF62\\xA3\\xA5\\uFF04\\uFFE1\\uFFE5+\\uFF0B\")),wordWrapColumn:De(new c(133,\"wordWrapColumn\",80,1,1073741824,{markdownDescription:p.localize(353,null)})),wordWrapOverride1:De(new g(134,\"wordWrapOverride1\",\"inherit\",[\"off\",\"on\",\"inherit\"])),wordWrapOverride2:De(new g(135,\"wordWrapOverride2\",\"inherit\",[\"off\",\"on\",\"inherit\"])),editorClassName:De(new A),defaultColorDecorators:De(new u(145,\"defaultColorDecorators\",!1,{markdownDescription:p.localize(354,null)})),pixelRatio:De(new me),tabFocusMode:De(new u(142,\"tabFocusMode\",!1,{markdownDescription:p.localize(355,null)})),layoutInfo:De(new K),wrappingInfo:De(new Se),wrappingIndent:De(new Ce),wrappingStrategy:De(new F)}}),define(se[636],oe([1,0,7,40,11,72,36,10,5,200]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewCursor=void 0;class b{constructor(n,t,r,u,f,c,d){this.top=n,this.left=t,this.paddingLeft=r,this.width=u,this.height=f,this.textContent=c,this.textContentClassName=d}}class a{constructor(n){this._context=n;const t=this._context.configuration.options,r=t.get(50);this._cursorStyle=t.get(28),this._lineHeight=t.get(66),this._typicalHalfwidthCharacterWidth=r.typicalHalfwidthCharacterWidth,this._lineCursorWidth=Math.min(t.get(31),this._typicalHalfwidthCharacterWidth),this._isVisible=!0,this._domNode=(0,k.createFastDomNode)(document.createElement(\"div\")),this._domNode.setClassName(`cursor ${v.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`),this._domNode.setHeight(this._lineHeight),this._domNode.setTop(0),this._domNode.setLeft(0),(0,E.applyFontInfo)(this._domNode,r),this._domNode.setDisplay(\"none\"),this._position=new p.Position(1,1),this._lastRenderedContent=\"\",this._renderData=null}getDomNode(){return this._domNode}getPosition(){return this._position}show(){this._isVisible||(this._domNode.setVisibility(\"inherit\"),this._isVisible=!0)}hide(){this._isVisible&&(this._domNode.setVisibility(\"hidden\"),this._isVisible=!1)}onConfigurationChanged(n){const t=this._context.configuration.options,r=t.get(50);return this._cursorStyle=t.get(28),this._lineHeight=t.get(66),this._typicalHalfwidthCharacterWidth=r.typicalHalfwidthCharacterWidth,this._lineCursorWidth=Math.min(t.get(31),this._typicalHalfwidthCharacterWidth),(0,E.applyFontInfo)(this._domNode,r),!0}onCursorPositionChanged(n,t){return t?this._domNode.domNode.style.transitionProperty=\"none\":this._domNode.domNode.style.transitionProperty=\"\",this._position=n,!0}_getGraphemeAwarePosition(){const{lineNumber:n,column:t}=this._position,r=this._context.viewModel.getLineContent(n),[u,f]=y.getCharContainingOffset(r,t-1);return[new p.Position(n,u+1),r.substring(u,f)]}_prepareRender(n){let t=\"\",r=\"\";const[u,f]=this._getGraphemeAwarePosition();if(this._cursorStyle===S.TextEditorCursorStyle.Line||this._cursorStyle===S.TextEditorCursorStyle.LineThin){const h=n.visibleRangeForPosition(u);if(!h||h.outsideRenderedLine)return null;const m=L.getWindow(this._domNode.domNode);let C;this._cursorStyle===S.TextEditorCursorStyle.Line?(C=L.computeScreenAwareSize(m,this._lineCursorWidth>0?this._lineCursorWidth:2),C>2&&(t=f,r=this._getTokenClassName(u))):C=L.computeScreenAwareSize(m,1);let w=h.left,D=0;C>=2&&w>=1&&(D=1,w-=D);const I=n.getVerticalOffsetForLineNumber(u.lineNumber)-n.bigNumbersDelta;return new b(I,w,D,C,this._lineHeight,t,r)}const c=n.linesVisibleRangesForRange(new _.Range(u.lineNumber,u.column,u.lineNumber,u.column+f.length),!1);if(!c||c.length===0)return null;const d=c[0];if(d.outsideRenderedLine||d.ranges.length===0)return null;const s=d.ranges[0],l=f===\"\t\"?this._typicalHalfwidthCharacterWidth:s.width<1?this._typicalHalfwidthCharacterWidth:s.width;this._cursorStyle===S.TextEditorCursorStyle.Block&&(t=f,r=this._getTokenClassName(u));let o=n.getVerticalOffsetForLineNumber(u.lineNumber)-n.bigNumbersDelta,g=this._lineHeight;return(this._cursorStyle===S.TextEditorCursorStyle.Underline||this._cursorStyle===S.TextEditorCursorStyle.UnderlineThin)&&(o+=this._lineHeight-2,g=2),new b(o,s.left,0,l,g,t,r)}_getTokenClassName(n){const t=this._context.viewModel.getViewLineData(n.lineNumber),r=t.tokens.findTokenIndexAtOffset(n.column-1);return t.tokens.getClassName(r)}prepareRender(n){this._renderData=this._prepareRender(n)}render(n){return this._renderData?(this._lastRenderedContent!==this._renderData.textContent&&(this._lastRenderedContent=this._renderData.textContent,this._domNode.domNode.textContent=this._lastRenderedContent),this._domNode.setClassName(`cursor ${v.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ${this._renderData.textContentClassName}`),this._domNode.setDisplay(\"block\"),this._domNode.setTop(this._renderData.top),this._domNode.setLeft(this._renderData.left),this._domNode.setPaddingLeft(this._renderData.paddingLeft),this._domNode.setWidth(this._renderData.width),this._domNode.setLineHeight(this._renderData.height),this._domNode.setHeight(this._renderData.height),{domNode:this._domNode.domNode,position:this._position,contentLeft:this._renderData.left,height:this._renderData.height,width:2}):(this._domNode.setDisplay(\"none\"),null)}}e.ViewCursor=a}),define(se[637],oe([1,0,35,278,36]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DiffEditorOptions=void 0;class E{get editorOptions(){return this._options}constructor(_){this._diffEditorWidth=(0,L.observableValue)(this,0),this.couldShowInlineViewBecauseOfSize=(0,L.derived)(this,b=>this._options.read(b).renderSideBySide&&this._diffEditorWidth.read(b)<=this._options.read(b).renderSideBySideInlineBreakpoint),this.renderOverviewRuler=(0,L.derived)(this,b=>this._options.read(b).renderOverviewRuler),this.renderSideBySide=(0,L.derived)(this,b=>this._options.read(b).renderSideBySide&&!(this._options.read(b).useInlineViewWhenSpaceIsLimited&&this.couldShowInlineViewBecauseOfSize.read(b))),this.readOnly=(0,L.derived)(this,b=>this._options.read(b).readOnly),this.shouldRenderRevertArrows=(0,L.derived)(this,b=>!(!this._options.read(b).renderMarginRevertIcon||!this.renderSideBySide.read(b)||this.readOnly.read(b))),this.renderIndicators=(0,L.derived)(this,b=>this._options.read(b).renderIndicators),this.enableSplitViewResizing=(0,L.derived)(this,b=>this._options.read(b).enableSplitViewResizing),this.splitViewDefaultRatio=(0,L.derived)(this,b=>this._options.read(b).splitViewDefaultRatio),this.ignoreTrimWhitespace=(0,L.derived)(this,b=>this._options.read(b).ignoreTrimWhitespace),this.maxComputationTimeMs=(0,L.derived)(this,b=>this._options.read(b).maxComputationTime),this.showMoves=(0,L.derived)(this,b=>this._options.read(b).experimental.showMoves&&this.renderSideBySide.read(b)),this.isInEmbeddedEditor=(0,L.derived)(this,b=>this._options.read(b).isInEmbeddedEditor),this.diffWordWrap=(0,L.derived)(this,b=>this._options.read(b).diffWordWrap),this.originalEditable=(0,L.derived)(this,b=>this._options.read(b).originalEditable),this.diffCodeLens=(0,L.derived)(this,b=>this._options.read(b).diffCodeLens),this.accessibilityVerbose=(0,L.derived)(this,b=>this._options.read(b).accessibilityVerbose),this.diffAlgorithm=(0,L.derived)(this,b=>this._options.read(b).diffAlgorithm),this.showEmptyDecorations=(0,L.derived)(this,b=>this._options.read(b).experimental.showEmptyDecorations),this.onlyShowAccessibleDiffViewer=(0,L.derived)(this,b=>this._options.read(b).onlyShowAccessibleDiffViewer),this.hideUnchangedRegions=(0,L.derived)(this,b=>this._options.read(b).hideUnchangedRegions.enabled),this.hideUnchangedRegionsRevealLineCount=(0,L.derived)(this,b=>this._options.read(b).hideUnchangedRegions.revealLineCount),this.hideUnchangedRegionsContextLineCount=(0,L.derived)(this,b=>this._options.read(b).hideUnchangedRegions.contextLineCount),this.hideUnchangedRegionsMinimumLineCount=(0,L.derived)(this,b=>this._options.read(b).hideUnchangedRegions.minimumLineCount);const v={..._,...S(_,k.diffEditorDefaultOptions)};this._options=(0,L.observableValue)(this,v)}updateOptions(_){const v=S(_,this._options.get()),b={...this._options.get(),..._,...v};this._options.set(b,void 0,{changedOptions:_})}setWidth(_){this._diffEditorWidth.set(_,void 0)}}e.DiffEditorOptions=E;function S(p,_){var v,b,a,i,n,t,r,u;return{enableSplitViewResizing:(0,y.boolean)(p.enableSplitViewResizing,_.enableSplitViewResizing),splitViewDefaultRatio:(0,y.clampedFloat)(p.splitViewDefaultRatio,.5,.1,.9),renderSideBySide:(0,y.boolean)(p.renderSideBySide,_.renderSideBySide),renderMarginRevertIcon:(0,y.boolean)(p.renderMarginRevertIcon,_.renderMarginRevertIcon),maxComputationTime:(0,y.clampedInt)(p.maxComputationTime,_.maxComputationTime,0,1073741824),maxFileSize:(0,y.clampedInt)(p.maxFileSize,_.maxFileSize,0,1073741824),ignoreTrimWhitespace:(0,y.boolean)(p.ignoreTrimWhitespace,_.ignoreTrimWhitespace),renderIndicators:(0,y.boolean)(p.renderIndicators,_.renderIndicators),originalEditable:(0,y.boolean)(p.originalEditable,_.originalEditable),diffCodeLens:(0,y.boolean)(p.diffCodeLens,_.diffCodeLens),renderOverviewRuler:(0,y.boolean)(p.renderOverviewRuler,_.renderOverviewRuler),diffWordWrap:(0,y.stringSet)(p.diffWordWrap,_.diffWordWrap,[\"off\",\"on\",\"inherit\"]),diffAlgorithm:(0,y.stringSet)(p.diffAlgorithm,_.diffAlgorithm,[\"legacy\",\"advanced\"],{smart:\"legacy\",experimental:\"advanced\"}),accessibilityVerbose:(0,y.boolean)(p.accessibilityVerbose,_.accessibilityVerbose),experimental:{showMoves:(0,y.boolean)((v=p.experimental)===null||v===void 0?void 0:v.showMoves,_.experimental.showMoves),showEmptyDecorations:(0,y.boolean)((b=p.experimental)===null||b===void 0?void 0:b.showEmptyDecorations,_.experimental.showEmptyDecorations)},hideUnchangedRegions:{enabled:(0,y.boolean)((i=(a=p.hideUnchangedRegions)===null||a===void 0?void 0:a.enabled)!==null&&i!==void 0?i:(n=p.experimental)===null||n===void 0?void 0:n.collapseUnchangedRegions,_.hideUnchangedRegions.enabled),contextLineCount:(0,y.clampedInt)((t=p.hideUnchangedRegions)===null||t===void 0?void 0:t.contextLineCount,_.hideUnchangedRegions.contextLineCount,0,1073741824),minimumLineCount:(0,y.clampedInt)((r=p.hideUnchangedRegions)===null||r===void 0?void 0:r.minimumLineCount,_.hideUnchangedRegions.minimumLineCount,0,1073741824),revealLineCount:(0,y.clampedInt)((u=p.hideUnchangedRegions)===null||u===void 0?void 0:u.revealLineCount,_.hideUnchangedRegions.revealLineCount,0,1073741824)},isInEmbeddedEditor:(0,y.boolean)(p.isInEmbeddedEditor,_.isInEmbeddedEditor),onlyShowAccessibleDiffViewer:(0,y.boolean)(p.onlyShowAccessibleDiffViewer,_.onlyShowAccessibleDiffViewer),renderSideBySideInlineBreakpoint:(0,y.clampedInt)(p.renderSideBySideInlineBreakpoint,_.renderSideBySideInlineBreakpoint,0,1073741824),useInlineViewWhenSpaceIsLimited:(0,y.boolean)(p.useInlineViewWhenSpaceIsLimited,_.useInlineViewWhenSpaceIsLimited)}}}),define(se[235],oe([1,0,17,36,149]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FontInfo=e.SERIALIZED_FONT_INFO_VERSION=e.BareFontInfo=void 0;const E=L.isMacintosh?1.5:1.35,S=8;class p{static createFromValidatedSettings(b,a,i){const n=b.get(49),t=b.get(53),r=b.get(52),u=b.get(51),f=b.get(54),c=b.get(66),d=b.get(63);return p._create(n,t,r,u,f,c,d,a,i)}static _create(b,a,i,n,t,r,u,f,c){r===0?r=E*i:r<S&&(r=r*i),r=Math.round(r),r<S&&(r=S);const d=1+(c?0:y.EditorZoom.getZoomLevel()*.1);return i*=d,r*=d,t===k.EditorFontVariations.TRANSLATE&&(a===\"normal\"||a===\"bold\"?t=k.EditorFontVariations.OFF:(t=`'wght' ${parseInt(a,10)}`,a=\"normal\")),new p({pixelRatio:f,fontFamily:b,fontWeight:a,fontSize:i,fontFeatureSettings:n,fontVariationSettings:t,lineHeight:r,letterSpacing:u})}constructor(b){this._bareFontInfoBrand=void 0,this.pixelRatio=b.pixelRatio,this.fontFamily=String(b.fontFamily),this.fontWeight=String(b.fontWeight),this.fontSize=b.fontSize,this.fontFeatureSettings=b.fontFeatureSettings,this.fontVariationSettings=b.fontVariationSettings,this.lineHeight=b.lineHeight|0,this.letterSpacing=b.letterSpacing}getId(){return`${this.pixelRatio}-${this.fontFamily}-${this.fontWeight}-${this.fontSize}-${this.fontFeatureSettings}-${this.fontVariationSettings}-${this.lineHeight}-${this.letterSpacing}`}getMassagedFontFamily(){const b=k.EDITOR_FONT_DEFAULTS.fontFamily,a=p._wrapInQuotes(this.fontFamily);return b&&this.fontFamily!==b?`${a}, ${b}`:a}static _wrapInQuotes(b){return/[,\"']/.test(b)?b:/[+ ]/.test(b)?`\"${b}\"`:b}}e.BareFontInfo=p,e.SERIALIZED_FONT_INFO_VERSION=2;class _ extends p{constructor(b,a){super(b),this._editorStylingBrand=void 0,this.version=e.SERIALIZED_FONT_INFO_VERSION,this.isTrusted=a,this.isMonospace=b.isMonospace,this.typicalHalfwidthCharacterWidth=b.typicalHalfwidthCharacterWidth,this.typicalFullwidthCharacterWidth=b.typicalFullwidthCharacterWidth,this.canUseHalfwidthRightwardsArrow=b.canUseHalfwidthRightwardsArrow,this.spaceWidth=b.spaceWidth,this.middotWidth=b.middotWidth,this.wsmiddotWidth=b.wsmiddotWidth,this.maxDigitWidth=b.maxDigitWidth}equals(b){return this.fontFamily===b.fontFamily&&this.fontWeight===b.fontWeight&&this.fontSize===b.fontSize&&this.fontFeatureSettings===b.fontFeatureSettings&&this.fontVariationSettings===b.fontVariationSettings&&this.lineHeight===b.lineHeight&&this.letterSpacing===b.letterSpacing&&this.typicalHalfwidthCharacterWidth===b.typicalHalfwidthCharacterWidth&&this.typicalFullwidthCharacterWidth===b.typicalFullwidthCharacterWidth&&this.canUseHalfwidthRightwardsArrow===b.canUseHalfwidthRightwardsArrow&&this.spaceWidth===b.spaceWidth&&this.middotWidth===b.middotWidth&&this.wsmiddotWidth===b.wsmiddotWidth&&this.maxDigitWidth===b.maxDigitWidth}}e.FontInfo=_}),define(se[335],oe([1,0,54,44,6,2,491,36,235]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FontMeasurements=e.FontMeasurementsImpl=void 0;class v extends E.Disposable{constructor(){super(),this._onDidChange=this._register(new y.Emitter),this.onDidChange=this._onDidChange.event,this._cache=new b,this._evictUntrustedReadingsTimeout=-1}dispose(){this._evictUntrustedReadingsTimeout!==-1&&(clearTimeout(this._evictUntrustedReadingsTimeout),this._evictUntrustedReadingsTimeout=-1),super.dispose()}clearAllFontInfos(){this._cache=new b,this._onDidChange.fire()}_writeToCache(i,n){this._cache.put(i,n),!n.isTrusted&&this._evictUntrustedReadingsTimeout===-1&&(this._evictUntrustedReadingsTimeout=k.mainWindow.setTimeout(()=>{this._evictUntrustedReadingsTimeout=-1,this._evictUntrustedReadings()},5e3))}_evictUntrustedReadings(){const i=this._cache.getValues();let n=!1;for(const t of i)t.isTrusted||(n=!0,this._cache.remove(t));n&&this._onDidChange.fire()}readFontInfo(i){if(!this._cache.has(i)){let n=this._actualReadFontInfo(i);(n.typicalHalfwidthCharacterWidth<=2||n.typicalFullwidthCharacterWidth<=2||n.spaceWidth<=2||n.maxDigitWidth<=2)&&(n=new _.FontInfo({pixelRatio:L.PixelRatio.value,fontFamily:n.fontFamily,fontWeight:n.fontWeight,fontSize:n.fontSize,fontFeatureSettings:n.fontFeatureSettings,fontVariationSettings:n.fontVariationSettings,lineHeight:n.lineHeight,letterSpacing:n.letterSpacing,isMonospace:n.isMonospace,typicalHalfwidthCharacterWidth:Math.max(n.typicalHalfwidthCharacterWidth,5),typicalFullwidthCharacterWidth:Math.max(n.typicalFullwidthCharacterWidth,5),canUseHalfwidthRightwardsArrow:n.canUseHalfwidthRightwardsArrow,spaceWidth:Math.max(n.spaceWidth,5),middotWidth:Math.max(n.middotWidth,5),wsmiddotWidth:Math.max(n.wsmiddotWidth,5),maxDigitWidth:Math.max(n.maxDigitWidth,5)},!1)),this._writeToCache(i,n)}return this._cache.get(i)}_createRequest(i,n,t,r){const u=new S.CharWidthRequest(i,n);return t.push(u),r?.push(u),u}_actualReadFontInfo(i){const n=[],t=[],r=this._createRequest(\"n\",0,n,t),u=this._createRequest(\"\\uFF4D\",0,n,null),f=this._createRequest(\" \",0,n,t),c=this._createRequest(\"0\",0,n,t),d=this._createRequest(\"1\",0,n,t),s=this._createRequest(\"2\",0,n,t),l=this._createRequest(\"3\",0,n,t),o=this._createRequest(\"4\",0,n,t),g=this._createRequest(\"5\",0,n,t),h=this._createRequest(\"6\",0,n,t),m=this._createRequest(\"7\",0,n,t),C=this._createRequest(\"8\",0,n,t),w=this._createRequest(\"9\",0,n,t),D=this._createRequest(\"\\u2192\",0,n,t),I=this._createRequest(\"\\uFFEB\",0,n,null),T=this._createRequest(\"\\xB7\",0,n,t),A=this._createRequest(String.fromCharCode(11825),0,n,null),P=\"|/-_ilm%\";for(let O=0,B=P.length;O<B;O++)this._createRequest(P.charAt(O),0,n,t),this._createRequest(P.charAt(O),1,n,t),this._createRequest(P.charAt(O),2,n,t);(0,S.readCharWidths)(i,n);const N=Math.max(c.width,d.width,s.width,l.width,o.width,g.width,h.width,m.width,C.width,w.width);let M=i.fontFeatureSettings===p.EditorFontLigatures.OFF;const R=t[0].width;for(let O=1,B=t.length;M&&O<B;O++){const W=R-t[O].width;if(W<-.001||W>.001){M=!1;break}}let x=!0;return M&&I.width!==R&&(x=!1),I.width>D.width&&(x=!1),new _.FontInfo({pixelRatio:L.PixelRatio.value,fontFamily:i.fontFamily,fontWeight:i.fontWeight,fontSize:i.fontSize,fontFeatureSettings:i.fontFeatureSettings,fontVariationSettings:i.fontVariationSettings,lineHeight:i.lineHeight,letterSpacing:i.letterSpacing,isMonospace:M,typicalHalfwidthCharacterWidth:r.width,typicalFullwidthCharacterWidth:u.width,canUseHalfwidthRightwardsArrow:x,spaceWidth:f.width,middotWidth:T.width,wsmiddotWidth:A.width,maxDigitWidth:N},!0)}}e.FontMeasurementsImpl=v;class b{constructor(){this._keys=Object.create(null),this._values=Object.create(null)}has(i){const n=i.getId();return!!this._values[n]}get(i){const n=i.getId();return this._values[n]}put(i,n){const t=i.getId();this._keys[t]=i,this._values[t]=n}remove(i){const n=i.getId();delete this._keys[n],delete this._values[n]}getValues(){return Object.keys(this._keys).map(i=>this._values[i])}}e.FontMeasurements=new v}),define(se[336],oe([1,0,10,5,86,36]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isModelDecorationInString=e.isModelDecorationInComment=e.isModelDecorationVisible=e.ViewModelDecorations=void 0;class S{constructor(i,n,t,r,u){this.editorId=i,this.model=n,this.configuration=t,this._linesCollection=r,this._coordinatesConverter=u,this._decorationsCache=Object.create(null),this._cachedModelDecorationsResolver=null,this._cachedModelDecorationsResolverViewRange=null}_clearCachedModelDecorationsResolver(){this._cachedModelDecorationsResolver=null,this._cachedModelDecorationsResolverViewRange=null}dispose(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}reset(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}onModelDecorationsChanged(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}onLineMappingChanged(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}_getOrCreateViewModelDecoration(i){const n=i.id;let t=this._decorationsCache[n];if(!t){const r=i.range,u=i.options;let f;if(u.isWholeLine){const c=this._coordinatesConverter.convertModelPositionToViewPosition(new L.Position(r.startLineNumber,1),0,!1,!0),d=this._coordinatesConverter.convertModelPositionToViewPosition(new L.Position(r.endLineNumber,this.model.getLineMaxColumn(r.endLineNumber)),1);f=new k.Range(c.lineNumber,c.column,d.lineNumber,d.column)}else f=this._coordinatesConverter.convertModelRangeToViewRange(r,1);t=new y.ViewModelDecoration(f,u),this._decorationsCache[n]=t}return t}getMinimapDecorationsInRange(i){return this._getDecorationsInRange(i,!0,!1).decorations}getDecorationsViewportData(i){let n=this._cachedModelDecorationsResolver!==null;return n=n&&i.equalsRange(this._cachedModelDecorationsResolverViewRange),n||(this._cachedModelDecorationsResolver=this._getDecorationsInRange(i,!1,!1),this._cachedModelDecorationsResolverViewRange=i),this._cachedModelDecorationsResolver}getInlineDecorationsOnLine(i,n=!1,t=!1){const r=new k.Range(i,this._linesCollection.getViewLineMinColumn(i),i,this._linesCollection.getViewLineMaxColumn(i));return this._getDecorationsInRange(r,n,t).inlineDecorations[0]}_getDecorationsInRange(i,n,t){const r=this._linesCollection.getDecorationsInRange(i,this.editorId,(0,E.filterValidationDecorations)(this.configuration.options),n,t),u=i.startLineNumber,f=i.endLineNumber,c=[];let d=0;const s=[];for(let l=u;l<=f;l++)s[l-u]=[];for(let l=0,o=r.length;l<o;l++){const g=r[l],h=g.options;if(!p(this.model,g))continue;const m=this._getOrCreateViewModelDecoration(g),C=m.range;if(c[d++]=m,h.inlineClassName){const w=new y.InlineDecoration(C,h.inlineClassName,h.inlineClassNameAffectsLetterSpacing?3:0),D=Math.max(u,C.startLineNumber),I=Math.min(f,C.endLineNumber);for(let T=D;T<=I;T++)s[T-u].push(w)}if(h.beforeContentClassName&&u<=C.startLineNumber&&C.startLineNumber<=f){const w=new y.InlineDecoration(new k.Range(C.startLineNumber,C.startColumn,C.startLineNumber,C.startColumn),h.beforeContentClassName,1);s[C.startLineNumber-u].push(w)}if(h.afterContentClassName&&u<=C.endLineNumber&&C.endLineNumber<=f){const w=new y.InlineDecoration(new k.Range(C.endLineNumber,C.endColumn,C.endLineNumber,C.endColumn),h.afterContentClassName,2);s[C.endLineNumber-u].push(w)}}return{decorations:c,inlineDecorations:s}}}e.ViewModelDecorations=S;function p(a,i){return!(i.options.hideInCommentTokens&&_(a,i)||i.options.hideInStringTokens&&v(a,i))}e.isModelDecorationVisible=p;function _(a,i){return b(a,i.range,n=>n===1)}e.isModelDecorationInComment=_;function v(a,i){return b(a,i.range,n=>n===2)}e.isModelDecorationInString=v;function b(a,i,n){for(let t=i.startLineNumber;t<=i.endLineNumber;t++){const r=a.tokenization.getLineTokens(t),u=t===i.startLineNumber,f=t===i.endLineNumber;let c=u?r.findTokenIndexAtOffset(i.startColumn-1):0;for(;c<r.getCount()&&!(f&&r.getStartOffset(c)>i.endColumn-1);){if(!n(r.getStandardTokenType(c)))return!1;c++}}return!0}}),define(se[638],oe([3,4]),function(te,e){return te.create(\"vs/editor/common/core/editorColorRegistry\",e)}),define(se[639],oe([3,4]),function(te,e){return te.create(\"vs/editor/common/editorContextKeys\",e)}),define(se[640],oe([3,4]),function(te,e){return te.create(\"vs/editor/common/languages\",e)}),define(se[31],oe([1,0,26,22,5,530,640]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TokenizationRegistry=e.LazyTokenizationSupport=e.InlayHintKind=e.Command=e.FoldingRangeKind=e.TextEdit=e.SymbolKinds=e.getAriaLabelForSymbol=e.symbolKindNames=e.isLocationLink=e.DocumentHighlightKind=e.SignatureHelpTriggerKind=e.SelectedSuggestionInfo=e.InlineCompletionTriggerKind=e.CompletionItemKinds=e.EncodedTokenizationResult=e.TokenizationResult=e.Token=void 0;class p{constructor(h,m,C){this.offset=h,this.type=m,this.language=C,this._tokenBrand=void 0}toString(){return\"(\"+this.offset+\", \"+this.type+\")\"}}e.Token=p;class _{constructor(h,m){this.tokens=h,this.endState=m,this._tokenizationResultBrand=void 0}}e.TokenizationResult=_;class v{constructor(h,m){this.tokens=h,this.endState=m,this._encodedTokenizationResultBrand=void 0}}e.EncodedTokenizationResult=v;var b;(function(g){const h=new Map;h.set(0,L.Codicon.symbolMethod),h.set(1,L.Codicon.symbolFunction),h.set(2,L.Codicon.symbolConstructor),h.set(3,L.Codicon.symbolField),h.set(4,L.Codicon.symbolVariable),h.set(5,L.Codicon.symbolClass),h.set(6,L.Codicon.symbolStruct),h.set(7,L.Codicon.symbolInterface),h.set(8,L.Codicon.symbolModule),h.set(9,L.Codicon.symbolProperty),h.set(10,L.Codicon.symbolEvent),h.set(11,L.Codicon.symbolOperator),h.set(12,L.Codicon.symbolUnit),h.set(13,L.Codicon.symbolValue),h.set(15,L.Codicon.symbolEnum),h.set(14,L.Codicon.symbolConstant),h.set(15,L.Codicon.symbolEnum),h.set(16,L.Codicon.symbolEnumMember),h.set(17,L.Codicon.symbolKeyword),h.set(27,L.Codicon.symbolSnippet),h.set(18,L.Codicon.symbolText),h.set(19,L.Codicon.symbolColor),h.set(20,L.Codicon.symbolFile),h.set(21,L.Codicon.symbolReference),h.set(22,L.Codicon.symbolCustomColor),h.set(23,L.Codicon.symbolFolder),h.set(24,L.Codicon.symbolTypeParameter),h.set(25,L.Codicon.account),h.set(26,L.Codicon.issues);function m(D){let I=h.get(D);return I||(console.info(\"No codicon found for CompletionItemKind \"+D),I=L.Codicon.symbolProperty),I}g.toIcon=m;const C=new Map;C.set(\"method\",0),C.set(\"function\",1),C.set(\"constructor\",2),C.set(\"field\",3),C.set(\"variable\",4),C.set(\"class\",5),C.set(\"struct\",6),C.set(\"interface\",7),C.set(\"module\",8),C.set(\"property\",9),C.set(\"event\",10),C.set(\"operator\",11),C.set(\"unit\",12),C.set(\"value\",13),C.set(\"constant\",14),C.set(\"enum\",15),C.set(\"enum-member\",16),C.set(\"enumMember\",16),C.set(\"keyword\",17),C.set(\"snippet\",27),C.set(\"text\",18),C.set(\"color\",19),C.set(\"file\",20),C.set(\"reference\",21),C.set(\"customcolor\",22),C.set(\"folder\",23),C.set(\"type-parameter\",24),C.set(\"typeParameter\",24),C.set(\"account\",25),C.set(\"issue\",26);function w(D,I){let T=C.get(D);return typeof T>\"u\"&&!I&&(T=9),T}g.fromString=w})(b||(e.CompletionItemKinds=b={}));var a;(function(g){g[g.Automatic=0]=\"Automatic\",g[g.Explicit=1]=\"Explicit\"})(a||(e.InlineCompletionTriggerKind=a={}));class i{constructor(h,m,C,w){this.range=h,this.text=m,this.completionKind=C,this.isSnippetText=w}equals(h){return y.Range.lift(this.range).equalsRange(h.range)&&this.text===h.text&&this.completionKind===h.completionKind&&this.isSnippetText===h.isSnippetText}}e.SelectedSuggestionInfo=i;var n;(function(g){g[g.Invoke=1]=\"Invoke\",g[g.TriggerCharacter=2]=\"TriggerCharacter\",g[g.ContentChange=3]=\"ContentChange\"})(n||(e.SignatureHelpTriggerKind=n={}));var t;(function(g){g[g.Text=0]=\"Text\",g[g.Read=1]=\"Read\",g[g.Write=2]=\"Write\"})(t||(e.DocumentHighlightKind=t={}));function r(g){return g&&k.URI.isUri(g.uri)&&y.Range.isIRange(g.range)&&(y.Range.isIRange(g.originSelectionRange)||y.Range.isIRange(g.targetSelectionRange))}e.isLocationLink=r,e.symbolKindNames={[17]:(0,S.localize)(0,null),[16]:(0,S.localize)(1,null),[4]:(0,S.localize)(2,null),[13]:(0,S.localize)(3,null),[8]:(0,S.localize)(4,null),[9]:(0,S.localize)(5,null),[21]:(0,S.localize)(6,null),[23]:(0,S.localize)(7,null),[7]:(0,S.localize)(8,null),[0]:(0,S.localize)(9,null),[11]:(0,S.localize)(10,null),[10]:(0,S.localize)(11,null),[19]:(0,S.localize)(12,null),[5]:(0,S.localize)(13,null),[1]:(0,S.localize)(14,null),[2]:(0,S.localize)(15,null),[20]:(0,S.localize)(16,null),[15]:(0,S.localize)(17,null),[18]:(0,S.localize)(18,null),[24]:(0,S.localize)(19,null),[3]:(0,S.localize)(20,null),[6]:(0,S.localize)(21,null),[14]:(0,S.localize)(22,null),[22]:(0,S.localize)(23,null),[25]:(0,S.localize)(24,null),[12]:(0,S.localize)(25,null)};function u(g,h){return(0,S.localize)(26,null,g,e.symbolKindNames[h])}e.getAriaLabelForSymbol=u;var f;(function(g){const h=new Map;h.set(0,L.Codicon.symbolFile),h.set(1,L.Codicon.symbolModule),h.set(2,L.Codicon.symbolNamespace),h.set(3,L.Codicon.symbolPackage),h.set(4,L.Codicon.symbolClass),h.set(5,L.Codicon.symbolMethod),h.set(6,L.Codicon.symbolProperty),h.set(7,L.Codicon.symbolField),h.set(8,L.Codicon.symbolConstructor),h.set(9,L.Codicon.symbolEnum),h.set(10,L.Codicon.symbolInterface),h.set(11,L.Codicon.symbolFunction),h.set(12,L.Codicon.symbolVariable),h.set(13,L.Codicon.symbolConstant),h.set(14,L.Codicon.symbolString),h.set(15,L.Codicon.symbolNumber),h.set(16,L.Codicon.symbolBoolean),h.set(17,L.Codicon.symbolArray),h.set(18,L.Codicon.symbolObject),h.set(19,L.Codicon.symbolKey),h.set(20,L.Codicon.symbolNull),h.set(21,L.Codicon.symbolEnumMember),h.set(22,L.Codicon.symbolStruct),h.set(23,L.Codicon.symbolEvent),h.set(24,L.Codicon.symbolOperator),h.set(25,L.Codicon.symbolTypeParameter);function m(C){let w=h.get(C);return w||(console.info(\"No codicon found for SymbolKind \"+C),w=L.Codicon.symbolProperty),w}g.toIcon=m})(f||(e.SymbolKinds=f={}));class c{}e.TextEdit=c;class d{static fromValue(h){switch(h){case\"comment\":return d.Comment;case\"imports\":return d.Imports;case\"region\":return d.Region}return new d(h)}constructor(h){this.value=h}}e.FoldingRangeKind=d,d.Comment=new d(\"comment\"),d.Imports=new d(\"imports\"),d.Region=new d(\"region\");var s;(function(g){function h(m){return!m||typeof m!=\"object\"?!1:typeof m.id==\"string\"&&typeof m.title==\"string\"}g.is=h})(s||(e.Command=s={}));var l;(function(g){g[g.Type=1]=\"Type\",g[g.Parameter=2]=\"Parameter\"})(l||(e.InlayHintKind=l={}));class o{constructor(h){this.createSupport=h,this._tokenizationSupport=null}dispose(){this._tokenizationSupport&&this._tokenizationSupport.then(h=>{h&&h.dispose()})}get tokenizationSupport(){return this._tokenizationSupport||(this._tokenizationSupport=this.createSupport()),this._tokenizationSupport}}e.LazyTokenizationSupport=o,e.TokenizationRegistry=new E.TokenizationRegistry}),define(se[160],oe([1,0,31]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.nullTokenizeEncoded=e.nullTokenize=e.NullState=void 0,e.NullState=new class{clone(){return this}equals(E){return this===E}};function k(E,S){return new L.TokenizationResult([new L.Token(0,\"\",E)],S)}e.nullTokenize=k;function y(E,S){const p=new Uint32Array(2);return p[0]=0,p[1]=(E<<0|0<<8|0<<11|1<<15|2<<24)>>>0,new L.EncodedTokenizationResult(p,S===null?e.NullState:S)}e.nullTokenizeEncoded=y}),define(se[337],oe([1,0,11,94,31,160]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e._tokenizeToString=e.tokenizeLineToHTML=e.tokenizeToString=void 0;const S={getInitialState:()=>E.NullState,tokenizeEncoded:(b,a,i)=>(0,E.nullTokenizeEncoded)(0,i)};async function p(b,a,i){if(!i)return v(a,b.languageIdCodec,S);const n=await y.TokenizationRegistry.getOrCreate(i);return v(a,b.languageIdCodec,n||S)}e.tokenizeToString=p;function _(b,a,i,n,t,r,u){let f=\"<div>\",c=n,d=0,s=!0;for(let l=0,o=a.getCount();l<o;l++){const g=a.getEndOffset(l);if(g<=n)continue;let h=\"\";for(;c<g&&c<t;c++){const m=b.charCodeAt(c);switch(m){case 9:{let C=r-(c+d)%r;for(d+=C-1;C>0;)u&&s?(h+=\"&#160;\",s=!1):(h+=\" \",s=!0),C--;break}case 60:h+=\"&lt;\",s=!1;break;case 62:h+=\"&gt;\",s=!1;break;case 38:h+=\"&amp;\",s=!1;break;case 0:h+=\"&#00;\",s=!1;break;case 65279:case 8232:case 8233:case 133:h+=\"\\uFFFD\",s=!1;break;case 13:h+=\"&#8203\",s=!1;break;case 32:u&&s?(h+=\"&#160;\",s=!1):(h+=\" \",s=!0);break;default:h+=String.fromCharCode(m),s=!1}}if(f+=`<span style=\"${a.getInlineStyle(l,i)}\">${h}</span>`,g>t||c>=t)break}return f+=\"</div>\",f}e.tokenizeLineToHTML=_;function v(b,a,i){let n='<div class=\"monaco-tokenized-source\">';const t=L.splitLines(b);let r=i.getInitialState();for(let u=0,f=t.length;u<f;u++){const c=t[u];u>0&&(n+=\"<br/>\");const d=i.tokenizeEncoded(c,!0,r);k.LineTokens.convertToEndOffset(d.tokens,c.length);const l=new k.LineTokens(d.tokens,c,a).inflate();let o=0;for(let g=0,h=l.getCount();g<h;g++){const m=l.getClassName(g),C=l.getEndOffset(g);n+=`<span class=\"${m}\">${L.escape(c.substring(o,C))}</span>`,o=C}r=d.endState}return n+=\"</div>\",n}e._tokenizeToString=v}),define(se[641],oe([1,0,14,12,17,61,129,62,73,160,523,298,94]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DefaultBackgroundTokenizer=e.RangePriorityQueueImpl=e.TokenizationStateStore=e.TrackingTokenizationStateStore=e.TokenizerWithStateStoreAndTextModel=e.TokenizerWithStateStore=void 0;class n{constructor(l,o){this.tokenizationSupport=o,this.initialState=this.tokenizationSupport.getInitialState(),this.store=new r(l)}getStartState(l){return this.store.getStartState(l,this.initialState)}getFirstInvalidLine(){return this.store.getFirstInvalidLine(this.initialState)}}e.TokenizerWithStateStore=n;class t extends n{constructor(l,o,g,h){super(l,o),this._textModel=g,this._languageIdCodec=h}updateTokensUntilLine(l,o){const g=this._textModel.getLanguageId();for(;;){const h=this.getFirstInvalidLine();if(!h||h.lineNumber>o)break;const m=this._textModel.getLineContent(h.lineNumber),C=c(this._languageIdCodec,g,this.tokenizationSupport,m,!0,h.startState);l.add(h.lineNumber,C.tokens),this.store.setEndState(h.lineNumber,C.endState)}}getTokenTypeIfInsertingCharacter(l,o){const g=this.getStartState(l.lineNumber);if(!g)return 0;const h=this._textModel.getLanguageId(),m=this._textModel.getLineContent(l.lineNumber),C=m.substring(0,l.column-1)+o+m.substring(l.column-1),w=c(this._languageIdCodec,h,this.tokenizationSupport,C,!0,g),D=new i.LineTokens(w.tokens,C,this._languageIdCodec);if(D.getCount()===0)return 0;const I=D.findTokenIndexAtOffset(l.column-1);return D.getStandardTokenType(I)}tokenizeLineWithEdit(l,o,g){const h=l.lineNumber,m=l.column,C=this.getStartState(h);if(!C)return null;const w=this._textModel.getLineContent(h),D=w.substring(0,m-1)+g+w.substring(m-1+o),I=this._textModel.getLanguageIdAtPosition(h,0),T=c(this._languageIdCodec,I,this.tokenizationSupport,D,!0,C);return new i.LineTokens(T.tokens,D,this._languageIdCodec)}isCheapToTokenize(l){const o=this.store.getFirstInvalidEndStateLineNumberOrMax();return l<o||l===o&&this._textModel.getLineLength(l)<2048}tokenizeHeuristically(l,o,g){if(g<=this.store.getFirstInvalidEndStateLineNumberOrMax())return{heuristicTokens:!1};if(o<=this.store.getFirstInvalidEndStateLineNumberOrMax())return this.updateTokensUntilLine(l,g),{heuristicTokens:!1};let h=this.guessStartState(o);const m=this._textModel.getLanguageId();for(let C=o;C<=g;C++){const w=this._textModel.getLineContent(C),D=c(this._languageIdCodec,m,this.tokenizationSupport,w,!0,h);l.add(C,D.tokens),h=D.endState}return{heuristicTokens:!0}}guessStartState(l){let o=this._textModel.getLineFirstNonWhitespaceColumn(l);const g=[];let h=null;for(let w=l-1;o>1&&w>=1;w--){const D=this._textModel.getLineFirstNonWhitespaceColumn(w);if(D!==0&&D<o&&(g.push(this._textModel.getLineContent(w)),o=D,h=this.getStartState(w),h))break}h||(h=this.tokenizationSupport.getInitialState()),g.reverse();const m=this._textModel.getLanguageId();let C=h;for(const w of g)C=c(this._languageIdCodec,m,this.tokenizationSupport,w,!1,C).endState;return C}}e.TokenizerWithStateStoreAndTextModel=t;class r{constructor(l){this.lineCount=l,this._tokenizationStateStore=new u,this._invalidEndStatesLineNumbers=new f,this._invalidEndStatesLineNumbers.addRange(new _.OffsetRange(1,l+1))}getEndState(l){return this._tokenizationStateStore.getEndState(l)}setEndState(l,o){if(!o)throw new k.BugIndicatingError(\"Cannot set null/undefined state\");this._invalidEndStatesLineNumbers.delete(l);const g=this._tokenizationStateStore.setEndState(l,o);return g&&l<this.lineCount&&this._invalidEndStatesLineNumbers.addRange(new _.OffsetRange(l+1,l+2)),g}acceptChange(l,o){this.lineCount+=o-l.length,this._tokenizationStateStore.acceptChange(l,o),this._invalidEndStatesLineNumbers.addRangeAndResize(new _.OffsetRange(l.startLineNumber,l.endLineNumberExclusive),o)}acceptChanges(l){for(const o of l){const[g]=(0,S.countEOL)(o.text);this.acceptChange(new p.LineRange(o.range.startLineNumber,o.range.endLineNumber+1),g+1)}}invalidateEndStateRange(l){this._invalidEndStatesLineNumbers.addRange(new _.OffsetRange(l.startLineNumber,l.endLineNumberExclusive))}getFirstInvalidEndStateLineNumber(){return this._invalidEndStatesLineNumbers.min}getFirstInvalidEndStateLineNumberOrMax(){return this.getFirstInvalidEndStateLineNumber()||Number.MAX_SAFE_INTEGER}allStatesValid(){return this._invalidEndStatesLineNumbers.min===null}getStartState(l,o){return l===1?o:this.getEndState(l-1)}getFirstInvalidLine(l){const o=this.getFirstInvalidEndStateLineNumber();if(o===null)return null;const g=this.getStartState(o,l);if(!g)throw new k.BugIndicatingError(\"Start state must be defined\");return{lineNumber:o,startState:g}}}e.TrackingTokenizationStateStore=r;class u{constructor(){this._lineEndStates=new b.FixedArray(null)}getEndState(l){return this._lineEndStates.get(l)}setEndState(l,o){const g=this._lineEndStates.get(l);return g&&g.equals(o)?!1:(this._lineEndStates.set(l,o),!0)}acceptChange(l,o){let g=l.length;o>0&&g>0&&(g--,o--),this._lineEndStates.replace(l.startLineNumber,g,o)}}e.TokenizationStateStore=u;class f{constructor(){this._ranges=[]}get min(){return this._ranges.length===0?null:this._ranges[0].start}delete(l){const o=this._ranges.findIndex(g=>g.contains(l));if(o!==-1){const g=this._ranges[o];g.start===l?g.endExclusive===l+1?this._ranges.splice(o,1):this._ranges[o]=new _.OffsetRange(l+1,g.endExclusive):g.endExclusive===l+1?this._ranges[o]=new _.OffsetRange(g.start,l):this._ranges.splice(o,1,new _.OffsetRange(g.start,l),new _.OffsetRange(l+1,g.endExclusive))}}addRange(l){_.OffsetRange.addRange(l,this._ranges)}addRangeAndResize(l,o){let g=0;for(;!(g>=this._ranges.length||l.start<=this._ranges[g].endExclusive);)g++;let h=g;for(;!(h>=this._ranges.length||l.endExclusive<this._ranges[h].start);)h++;const m=o-l.length;for(let C=h;C<this._ranges.length;C++)this._ranges[C]=this._ranges[C].delta(m);if(g===h){const C=new _.OffsetRange(l.start,l.start+o);C.isEmpty||this._ranges.splice(g,0,C)}else{const C=Math.min(l.start,this._ranges[g].start),w=Math.max(l.endExclusive,this._ranges[h-1].endExclusive),D=new _.OffsetRange(C,w+m);D.isEmpty?this._ranges.splice(g,h-g):this._ranges.splice(g,h-g,D)}}toString(){return this._ranges.map(l=>l.toString()).join(\" + \")}}e.RangePriorityQueueImpl=f;function c(s,l,o,g,h,m){let C=null;if(o)try{C=o.tokenizeEncoded(g,h,m.clone())}catch(w){(0,k.onUnexpectedError)(w)}return C||(C=(0,v.nullTokenizeEncoded)(s.encodeLanguageId(l),m)),i.LineTokens.convertToEndOffset(C.tokens,g.length),C}class d{constructor(l,o){this._tokenizerWithStateStore=l,this._backgroundTokenStore=o,this._isDisposed=!1,this._isScheduled=!1}dispose(){this._isDisposed=!0}handleChanges(){this._beginBackgroundTokenization()}_beginBackgroundTokenization(){this._isScheduled||!this._tokenizerWithStateStore._textModel.isAttachedToEditor()||!this._hasLinesToTokenize()||(this._isScheduled=!0,(0,L.runWhenGlobalIdle)(l=>{this._isScheduled=!1,this._backgroundTokenizeWithDeadline(l)}))}_backgroundTokenizeWithDeadline(l){const o=Date.now()+l.timeRemaining(),g=()=>{this._isDisposed||!this._tokenizerWithStateStore._textModel.isAttachedToEditor()||!this._hasLinesToTokenize()||(this._backgroundTokenizeForAtLeast1ms(),Date.now()<o?(0,y.setTimeout0)(g):this._beginBackgroundTokenization())};g()}_backgroundTokenizeForAtLeast1ms(){const l=this._tokenizerWithStateStore._textModel.getLineCount(),o=new a.ContiguousMultilineTokensBuilder,g=E.StopWatch.create(!1);do if(g.elapsed()>1||this._tokenizeOneInvalidLine(o)>=l)break;while(this._hasLinesToTokenize());this._backgroundTokenStore.setTokens(o.finalize()),this.checkFinished()}_hasLinesToTokenize(){return this._tokenizerWithStateStore?!this._tokenizerWithStateStore.store.allStatesValid():!1}_tokenizeOneInvalidLine(l){var o;const g=(o=this._tokenizerWithStateStore)===null||o===void 0?void 0:o.getFirstInvalidLine();return g?(this._tokenizerWithStateStore.updateTokensUntilLine(l,g.lineNumber),g.lineNumber):this._tokenizerWithStateStore._textModel.getLineCount()+1}checkFinished(){this._isDisposed||this._tokenizerWithStateStore.store.allStatesValid()&&this._backgroundTokenStore.backgroundTokenizationFinished()}requestTokens(l,o){this._tokenizerWithStateStore.store.invalidateEndStateRange(new p.LineRange(l,o))}}e.DefaultBackgroundTokenizer=d}),define(se[642],oe([1,0,13,14,12,6,2,129,62,10,151,31,292,641,298,533,535]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TokenizationTextModelPart=void 0;class f extends i.TextModelPart{constructor(l,o,g,h,m,C){super(),this._languageService=l,this._languageConfigurationService=o,this._textModel=g,this._bracketPairsTextModelPart=h,this._languageId=m,this._attachedViews=C,this._semanticTokens=new u.SparseTokensStore(this._languageService.languageIdCodec),this._onDidChangeLanguage=this._register(new E.Emitter),this.onDidChangeLanguage=this._onDidChangeLanguage.event,this._onDidChangeLanguageConfiguration=this._register(new E.Emitter),this.onDidChangeLanguageConfiguration=this._onDidChangeLanguageConfiguration.event,this._onDidChangeTokens=this._register(new E.Emitter),this.onDidChangeTokens=this._onDidChangeTokens.event,this.grammarTokens=this._register(new c(this._languageService.languageIdCodec,this._textModel,()=>this._languageId,this._attachedViews)),this._register(this._languageConfigurationService.onDidChange(w=>{w.affects(this._languageId)&&this._onDidChangeLanguageConfiguration.fire({})})),this._register(this.grammarTokens.onDidChangeTokens(w=>{this._emitModelTokensChangedEvent(w)})),this._register(this.grammarTokens.onDidChangeBackgroundTokenizationState(w=>{this._bracketPairsTextModelPart.handleDidChangeBackgroundTokenizationState()}))}handleDidChangeContent(l){if(l.isFlush)this._semanticTokens.flush();else if(!l.isEolChange)for(const o of l.changes){const[g,h,m]=(0,p.countEOL)(o.text);this._semanticTokens.acceptEdit(o.range,g,h,m,o.text.length>0?o.text.charCodeAt(0):0)}this.grammarTokens.handleDidChangeContent(l)}handleDidChangeAttached(){this.grammarTokens.handleDidChangeAttached()}getLineTokens(l){this.validateLineNumber(l);const o=this.grammarTokens.getLineTokens(l);return this._semanticTokens.addSparseTokens(l,o)}_emitModelTokensChangedEvent(l){this._textModel._isDisposing()||(this._bracketPairsTextModelPart.handleDidChangeTokens(l),this._onDidChangeTokens.fire(l))}validateLineNumber(l){if(l<1||l>this._textModel.getLineCount())throw new y.BugIndicatingError(\"Illegal value for lineNumber\")}get hasTokens(){return this.grammarTokens.hasTokens}resetTokenization(){this.grammarTokens.resetTokenization()}get backgroundTokenizationState(){return this.grammarTokens.backgroundTokenizationState}forceTokenization(l){this.validateLineNumber(l),this.grammarTokens.forceTokenization(l)}isCheapToTokenize(l){return this.validateLineNumber(l),this.grammarTokens.isCheapToTokenize(l)}tokenizeIfCheap(l){this.validateLineNumber(l),this.grammarTokens.tokenizeIfCheap(l)}getTokenTypeIfInsertingCharacter(l,o,g){return this.grammarTokens.getTokenTypeIfInsertingCharacter(l,o,g)}tokenizeLineWithEdit(l,o,g){return this.grammarTokens.tokenizeLineWithEdit(l,o,g)}setSemanticTokens(l,o){this._semanticTokens.set(l,o),this._emitModelTokensChangedEvent({semanticTokensApplied:l!==null,ranges:[{fromLineNumber:1,toLineNumber:this._textModel.getLineCount()}]})}hasCompleteSemanticTokens(){return this._semanticTokens.isComplete()}hasSomeSemanticTokens(){return!this._semanticTokens.isEmpty()}setPartialSemanticTokens(l,o){if(this.hasCompleteSemanticTokens())return;const g=this._textModel.validateRange(this._semanticTokens.setPartial(l,o));this._emitModelTokensChangedEvent({semanticTokensApplied:!0,ranges:[{fromLineNumber:g.startLineNumber,toLineNumber:g.endLineNumber}]})}getWordAtPosition(l){this.assertNotDisposed();const o=this._textModel.validatePosition(l),g=this._textModel.getLineContent(o.lineNumber),h=this.getLineTokens(o.lineNumber),m=h.findTokenIndexAtOffset(o.column-1),[C,w]=f._findLanguageBoundaries(h,m),D=(0,b.getWordAtText)(o.column,this.getLanguageConfiguration(h.getLanguageId(m)).getWordDefinition(),g.substring(C,w),C);if(D&&D.startColumn<=l.column&&l.column<=D.endColumn)return D;if(m>0&&C===o.column-1){const[I,T]=f._findLanguageBoundaries(h,m-1),A=(0,b.getWordAtText)(o.column,this.getLanguageConfiguration(h.getLanguageId(m-1)).getWordDefinition(),g.substring(I,T),I);if(A&&A.startColumn<=l.column&&l.column<=A.endColumn)return A}return null}getLanguageConfiguration(l){return this._languageConfigurationService.getLanguageConfiguration(l)}static _findLanguageBoundaries(l,o){const g=l.getLanguageId(o);let h=0;for(let C=o;C>=0&&l.getLanguageId(C)===g;C--)h=l.getStartOffset(C);let m=l.getLineContent().length;for(let C=o,w=l.getCount();C<w&&l.getLanguageId(C)===g;C++)m=l.getEndOffset(C);return[h,m]}getWordUntilPosition(l){const o=this.getWordAtPosition(l);return o?{word:o.word.substr(0,l.column-o.startColumn),startColumn:o.startColumn,endColumn:l.column}:{word:\"\",startColumn:l.column,endColumn:l.column}}getLanguageId(){return this._languageId}getLanguageIdAtPosition(l,o){const g=this._textModel.validatePosition(new v.Position(l,o)),h=this.getLineTokens(g.lineNumber);return h.getLanguageId(h.findTokenIndexAtOffset(g.column-1))}setLanguageId(l,o=\"api\"){if(this._languageId===l)return;const g={oldLanguage:this._languageId,newLanguage:l,source:o};this._languageId=l,this._bracketPairsTextModelPart.handleDidChangeLanguage(g),this.grammarTokens.resetTokenization(),this._onDidChangeLanguage.fire(g),this._onDidChangeLanguageConfiguration.fire({})}}e.TokenizationTextModelPart=f;class c extends S.Disposable{get backgroundTokenizationState(){return this._backgroundTokenizationState}constructor(l,o,g,h){super(),this._languageIdCodec=l,this._textModel=o,this.getLanguageId=g,this._tokenizer=null,this._defaultBackgroundTokenizer=null,this._backgroundTokenizer=this._register(new S.MutableDisposable),this._tokens=new r.ContiguousTokensStore(this._languageIdCodec),this._debugBackgroundTokenizer=this._register(new S.MutableDisposable),this._backgroundTokenizationState=1,this._onDidChangeBackgroundTokenizationState=this._register(new E.Emitter),this.onDidChangeBackgroundTokenizationState=this._onDidChangeBackgroundTokenizationState.event,this._onDidChangeTokens=this._register(new E.Emitter),this.onDidChangeTokens=this._onDidChangeTokens.event,this._attachedViewStates=this._register(new S.DisposableMap),this._register(a.TokenizationRegistry.onDidChange(m=>{const C=this.getLanguageId();m.changedLanguages.indexOf(C)!==-1&&this.resetTokenization()})),this.resetTokenization(),this._register(h.onDidChangeVisibleRanges(({view:m,state:C})=>{if(C){let w=this._attachedViewStates.get(m);w||(w=new d(()=>this.refreshRanges(w.lineRanges)),this._attachedViewStates.set(m,w)),w.handleStateChange(C)}else this._attachedViewStates.deleteAndDispose(m)}))}resetTokenization(l=!0){var o;this._tokens.flush(),(o=this._debugBackgroundTokens)===null||o===void 0||o.flush(),this._debugBackgroundStates&&(this._debugBackgroundStates=new n.TrackingTokenizationStateStore(this._textModel.getLineCount())),l&&this._onDidChangeTokens.fire({semanticTokensApplied:!1,ranges:[{fromLineNumber:1,toLineNumber:this._textModel.getLineCount()}]});const g=()=>{if(this._textModel.isTooLargeForTokenization())return[null,null];const C=a.TokenizationRegistry.get(this.getLanguageId());if(!C)return[null,null];let w;try{w=C.getInitialState()}catch(D){return(0,y.onUnexpectedError)(D),[null,null]}return[C,w]},[h,m]=g();if(h&&m?this._tokenizer=new n.TokenizerWithStateStoreAndTextModel(this._textModel.getLineCount(),h,this._textModel,this._languageIdCodec):this._tokenizer=null,this._backgroundTokenizer.clear(),this._defaultBackgroundTokenizer=null,this._tokenizer){const C={setTokens:w=>{this.setTokens(w)},backgroundTokenizationFinished:()=>{if(this._backgroundTokenizationState===2)return;const w=2;this._backgroundTokenizationState=w,this._onDidChangeBackgroundTokenizationState.fire()},setEndState:(w,D)=>{var I;if(!this._tokenizer)return;const T=this._tokenizer.store.getFirstInvalidEndStateLineNumber();T!==null&&w>=T&&((I=this._tokenizer)===null||I===void 0||I.store.setEndState(w,D))}};h&&h.createBackgroundTokenizer&&!h.backgroundTokenizerShouldOnlyVerifyTokens&&(this._backgroundTokenizer.value=h.createBackgroundTokenizer(this._textModel,C)),!this._backgroundTokenizer.value&&!this._textModel.isTooLargeForTokenization()&&(this._backgroundTokenizer.value=this._defaultBackgroundTokenizer=new n.DefaultBackgroundTokenizer(this._tokenizer,C),this._defaultBackgroundTokenizer.handleChanges()),h?.backgroundTokenizerShouldOnlyVerifyTokens&&h.createBackgroundTokenizer?(this._debugBackgroundTokens=new r.ContiguousTokensStore(this._languageIdCodec),this._debugBackgroundStates=new n.TrackingTokenizationStateStore(this._textModel.getLineCount()),this._debugBackgroundTokenizer.clear(),this._debugBackgroundTokenizer.value=h.createBackgroundTokenizer(this._textModel,{setTokens:w=>{var D;(D=this._debugBackgroundTokens)===null||D===void 0||D.setMultilineTokens(w,this._textModel)},backgroundTokenizationFinished(){},setEndState:(w,D)=>{var I;(I=this._debugBackgroundStates)===null||I===void 0||I.setEndState(w,D)}})):(this._debugBackgroundTokens=void 0,this._debugBackgroundStates=void 0,this._debugBackgroundTokenizer.value=void 0)}this.refreshAllVisibleLineTokens()}handleDidChangeAttached(){var l;(l=this._defaultBackgroundTokenizer)===null||l===void 0||l.handleChanges()}handleDidChangeContent(l){var o,g,h;if(l.isFlush)this.resetTokenization(!1);else if(!l.isEolChange){for(const m of l.changes){const[C,w]=(0,p.countEOL)(m.text);this._tokens.acceptEdit(m.range,C,w),(o=this._debugBackgroundTokens)===null||o===void 0||o.acceptEdit(m.range,C,w)}(g=this._debugBackgroundStates)===null||g===void 0||g.acceptChanges(l.changes),this._tokenizer&&this._tokenizer.store.acceptChanges(l.changes),(h=this._defaultBackgroundTokenizer)===null||h===void 0||h.handleChanges()}}setTokens(l){const{changes:o}=this._tokens.setMultilineTokens(l,this._textModel);return o.length>0&&this._onDidChangeTokens.fire({semanticTokensApplied:!1,ranges:o}),{changes:o}}refreshAllVisibleLineTokens(){const l=_.LineRange.joinMany([...this._attachedViewStates].map(([o,g])=>g.lineRanges));this.refreshRanges(l)}refreshRanges(l){for(const o of l)this.refreshRange(o.startLineNumber,o.endLineNumberExclusive-1)}refreshRange(l,o){var g,h;if(!this._tokenizer)return;l=Math.max(1,Math.min(this._textModel.getLineCount(),l)),o=Math.min(this._textModel.getLineCount(),o);const m=new t.ContiguousMultilineTokensBuilder,{heuristicTokens:C}=this._tokenizer.tokenizeHeuristically(m,l,o),w=this.setTokens(m.finalize());if(C)for(const D of w.changes)(g=this._backgroundTokenizer.value)===null||g===void 0||g.requestTokens(D.fromLineNumber,D.toLineNumber+1);(h=this._defaultBackgroundTokenizer)===null||h===void 0||h.checkFinished()}forceTokenization(l){var o,g;const h=new t.ContiguousMultilineTokensBuilder;(o=this._tokenizer)===null||o===void 0||o.updateTokensUntilLine(h,l),this.setTokens(h.finalize()),(g=this._defaultBackgroundTokenizer)===null||g===void 0||g.checkFinished()}isCheapToTokenize(l){return this._tokenizer?this._tokenizer.isCheapToTokenize(l):!0}tokenizeIfCheap(l){this.isCheapToTokenize(l)&&this.forceTokenization(l)}getLineTokens(l){var o;const g=this._textModel.getLineContent(l),h=this._tokens.getTokens(this._textModel.getLanguageId(),l-1,g);if(this._debugBackgroundTokens&&this._debugBackgroundStates&&this._tokenizer&&this._debugBackgroundStates.getFirstInvalidEndStateLineNumberOrMax()>l&&this._tokenizer.store.getFirstInvalidEndStateLineNumberOrMax()>l){const m=this._debugBackgroundTokens.getTokens(this._textModel.getLanguageId(),l-1,g);!h.equals(m)&&(!((o=this._debugBackgroundTokenizer.value)===null||o===void 0)&&o.reportMismatchingTokens)&&this._debugBackgroundTokenizer.value.reportMismatchingTokens(l)}return h}getTokenTypeIfInsertingCharacter(l,o,g){if(!this._tokenizer)return 0;const h=this._textModel.validatePosition(new v.Position(l,o));return this.forceTokenization(h.lineNumber),this._tokenizer.getTokenTypeIfInsertingCharacter(h,g)}tokenizeLineWithEdit(l,o,g){if(!this._tokenizer)return null;const h=this._textModel.validatePosition(l);return this.forceTokenization(h.lineNumber),this._tokenizer.tokenizeLineWithEdit(h,o,g)}get hasTokens(){return this._tokens.hasTokens}}class d extends S.Disposable{get lineRanges(){return this._lineRanges}constructor(l){super(),this._refreshTokens=l,this.runner=this._register(new k.RunOnceScheduler(()=>this.update(),50)),this._computedLineRanges=[],this._lineRanges=[]}update(){(0,L.equals)(this._computedLineRanges,this._lineRanges,(l,o)=>l.equals(o))||(this._computedLineRanges=this._lineRanges,this._refreshTokens())}handleStateChange(l){this._lineRanges=l.visibleLineRanges,l.stabilized?(this.runner.cancel(),this.update()):this.runner.schedule()}}}),define(se[338],oe([1,0,19,6,65,22,10,5,24,31,211]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createMonacoBaseAPI=e.KeyMod=void 0;class a{static chord(t,r){return(0,y.KeyChord)(t,r)}}e.KeyMod=a,a.CtrlCmd=2048,a.Shift=1024,a.Alt=512,a.WinCtrl=256;function i(){return{editor:void 0,languages:void 0,CancellationTokenSource:L.CancellationTokenSource,Emitter:k.Emitter,KeyCode:b.KeyCode,KeyMod:a,Position:S.Position,Range:p.Range,Selection:_.Selection,SelectionDirection:b.SelectionDirection,MarkerSeverity:b.MarkerSeverity,MarkerTag:b.MarkerTag,Uri:E.URI,Token:v.Token}}e.createMonacoBaseAPI=i}),define(se[643],oe([1,0,173,22,10,5,527,151,510,516,338,61,296,507,55,509]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.create=e.EditorSimpleWorker=void 0;class u extends S.MirrorTextModel{get uri(){return this._uri}get eol(){return this._eol}getValue(){return this.getText()}findMatches(s){const l=[];for(let o=0;o<this._lines.length;o++){const g=this._lines[o],h=this.offsetAt(new y.Position(o+1,1)),m=g.matchAll(s);for(const C of m)(C.index||C.index===0)&&(C.index=C.index+h),l.push(C)}return l}getLinesContent(){return this._lines.slice(0)}getLineCount(){return this._lines.length}getLineContent(s){return this._lines[s-1]}getWordAtPosition(s,l){const o=(0,p.getWordAtText)(s.column,(0,p.ensureValidWordDefinition)(l),this._lines[s.lineNumber-1],0);return o?new E.Range(s.lineNumber,o.startColumn,s.lineNumber,o.endColumn):null}words(s){const l=this._lines,o=this._wordenize.bind(this);let g=0,h=\"\",m=0,C=[];return{*[Symbol.iterator](){for(;;)if(m<C.length){const w=h.substring(C[m].start,C[m].end);m+=1,yield w}else if(g<l.length)h=l[g],C=o(h,s),m=0,g+=1;else break}}}getLineWords(s,l){const o=this._lines[s-1],g=this._wordenize(o,l),h=[];for(const m of g)h.push({word:o.substring(m.start,m.end),startColumn:m.start+1,endColumn:m.end+1});return h}_wordenize(s,l){const o=[];let g;for(l.lastIndex=0;(g=l.exec(s))&&g[0].length!==0;)o.push({start:g.index,end:g.index+g[0].length});return o}getValueInRange(s){if(s=this._validateRange(s),s.startLineNumber===s.endLineNumber)return this._lines[s.startLineNumber-1].substring(s.startColumn-1,s.endColumn-1);const l=this._eol,o=s.startLineNumber-1,g=s.endLineNumber-1,h=[];h.push(this._lines[o].substring(s.startColumn-1));for(let m=o+1;m<g;m++)h.push(this._lines[m]);return h.push(this._lines[g].substring(0,s.endColumn-1)),h.join(l)}offsetAt(s){return s=this._validatePosition(s),this._ensureLineStarts(),this._lineStarts.getPrefixSum(s.lineNumber-2)+(s.column-1)}positionAt(s){s=Math.floor(s),s=Math.max(0,s),this._ensureLineStarts();const l=this._lineStarts.getIndexOf(s),o=this._lines[l.index].length;return{lineNumber:1+l.index,column:1+Math.min(l.remainder,o)}}_validateRange(s){const l=this._validatePosition({lineNumber:s.startLineNumber,column:s.startColumn}),o=this._validatePosition({lineNumber:s.endLineNumber,column:s.endColumn});return l.lineNumber!==s.startLineNumber||l.column!==s.startColumn||o.lineNumber!==s.endLineNumber||o.column!==s.endColumn?{startLineNumber:l.lineNumber,startColumn:l.column,endLineNumber:o.lineNumber,endColumn:o.column}:s}_validatePosition(s){if(!y.Position.isIPosition(s))throw new Error(\"bad position\");let{lineNumber:l,column:o}=s,g=!1;if(l<1)l=1,o=1,g=!0;else if(l>this._lines.length)l=this._lines.length,o=this._lines[l-1].length+1,g=!0;else{const h=this._lines[l-1].length+1;o<1?(o=1,g=!0):o>h&&(o=h,g=!0)}return g?{lineNumber:l,column:o}:s}}class f{constructor(s,l){this._host=s,this._models=Object.create(null),this._foreignModuleFactory=l,this._foreignModule=null}dispose(){this._models=Object.create(null)}_getModel(s){return this._models[s]}_getModels(){const s=[];return Object.keys(this._models).forEach(l=>s.push(this._models[l])),s}acceptNewModel(s){this._models[s.url]=new u(k.URI.parse(s.url),s.lines,s.EOL,s.versionId)}acceptModelChanged(s,l){if(!this._models[s])return;this._models[s].onEvents(l)}acceptRemovedModel(s){this._models[s]&&delete this._models[s]}async computeUnicodeHighlights(s,l,o){const g=this._getModel(s);return g?i.UnicodeTextModelHighlighter.computeUnicodeHighlights(g,l,o):{ranges:[],hasMore:!1,ambiguousCharacterCount:0,invisibleCharacterCount:0,nonBasicAsciiCharacterCount:0}}async computeDiff(s,l,o,g){const h=this._getModel(s),m=this._getModel(l);return!h||!m?null:f.computeDiff(h,m,o,g)}static computeDiff(s,l,o,g){const h=g===\"advanced\"?n.linesDiffComputers.getDefault():n.linesDiffComputers.getLegacy(),m=s.getLinesContent(),C=l.getLinesContent(),w=h.computeDiff(m,C,o),D=w.changes.length>0?!1:this._modelsAreIdentical(s,l);function I(T){return T.map(A=>{var P;return[A.original.startLineNumber,A.original.endLineNumberExclusive,A.modified.startLineNumber,A.modified.endLineNumberExclusive,(P=A.innerChanges)===null||P===void 0?void 0:P.map(N=>[N.originalRange.startLineNumber,N.originalRange.startColumn,N.originalRange.endLineNumber,N.originalRange.endColumn,N.modifiedRange.startLineNumber,N.modifiedRange.startColumn,N.modifiedRange.endLineNumber,N.modifiedRange.endColumn])]})}return{identical:D,quitEarly:w.hitTimeout,changes:I(w.changes),moves:w.moves.map(T=>[T.lineRangeMapping.original.startLineNumber,T.lineRangeMapping.original.endLineNumberExclusive,T.lineRangeMapping.modified.startLineNumber,T.lineRangeMapping.modified.endLineNumberExclusive,I(T.changes)])}}static _modelsAreIdentical(s,l){const o=s.getLineCount(),g=l.getLineCount();if(o!==g)return!1;for(let h=1;h<=o;h++){const m=s.getLineContent(h),C=l.getLineContent(h);if(m!==C)return!1}return!0}async computeMoreMinimalEdits(s,l,o){const g=this._getModel(s);if(!g)return l;const h=[];let m;l=l.slice(0).sort((w,D)=>{if(w.range&&D.range)return E.Range.compareRangesUsingStarts(w.range,D.range);const I=w.range?0:1,T=D.range?0:1;return I-T});let C=0;for(let w=1;w<l.length;w++)E.Range.getEndPosition(l[C].range).equals(E.Range.getStartPosition(l[w].range))?(l[C].range=E.Range.fromPositions(E.Range.getStartPosition(l[C].range),E.Range.getEndPosition(l[w].range)),l[C].text+=l[w].text):(C++,l[C]=l[w]);l.length=C+1;for(let{range:w,text:D,eol:I}of l){if(typeof I==\"number\"&&(m=I),E.Range.isEmpty(w)&&!D)continue;const T=g.getValueInRange(w);if(D=D.replace(/\\r\\n|\\n|\\r/g,g.eol),T===D)continue;if(Math.max(D.length,T.length)>f._diffLimit){h.push({range:w,text:D});continue}const A=(0,L.stringDiff)(T,D,o),P=g.offsetAt(E.Range.lift(w).getStartPosition());for(const N of A){const M=g.positionAt(P+N.originalStart),R=g.positionAt(P+N.originalStart+N.originalLength),x={text:D.substr(N.modifiedStart,N.modifiedLength),range:{startLineNumber:M.lineNumber,startColumn:M.column,endLineNumber:R.lineNumber,endColumn:R.column}};g.getValueInRange(x.range)!==x.text&&h.push(x)}}return typeof m==\"number\"&&h.push({eol:m,text:\"\",range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0}}),h}async computeLinks(s){const l=this._getModel(s);return l?(0,_.computeLinks)(l):null}async computeDefaultDocumentColors(s){const l=this._getModel(s);return l?(0,r.computeDefaultDocumentColors)(l):null}async textualSuggest(s,l,o,g){const h=new a.StopWatch,m=new RegExp(o,g),C=new Set;e:for(const w of s){const D=this._getModel(w);if(D){for(const I of D.words(m))if(!(I===l||!isNaN(Number(I)))&&(C.add(I),C.size>f._suggestionsLimit))break e}}return{words:Array.from(C),duration:h.elapsed()}}async computeWordRanges(s,l,o,g){const h=this._getModel(s);if(!h)return Object.create(null);const m=new RegExp(o,g),C=Object.create(null);for(let w=l.startLineNumber;w<l.endLineNumber;w++){const D=h.getLineWords(w,m);for(const I of D){if(!isNaN(Number(I.word)))continue;let T=C[I.word];T||(T=[],C[I.word]=T),T.push({startLineNumber:w,startColumn:I.startColumn,endLineNumber:w,endColumn:I.endColumn})}}return C}async navigateValueSet(s,l,o,g,h){const m=this._getModel(s);if(!m)return null;const C=new RegExp(g,h);l.startColumn===l.endColumn&&(l={startLineNumber:l.startLineNumber,startColumn:l.startColumn,endLineNumber:l.endLineNumber,endColumn:l.endColumn+1});const w=m.getValueInRange(l),D=m.getWordAtPosition({lineNumber:l.startLineNumber,column:l.startColumn},C);if(!D)return null;const I=m.getValueInRange(D);return v.BasicInplaceReplace.INSTANCE.navigateValueSet(l,w,D,I,o)}loadForeignModule(s,l,o){const g=(C,w)=>this._host.fhr(C,w),m={host:(0,t.createProxyObject)(o,g),getMirrorModels:()=>this._getModels()};return this._foreignModuleFactory?(this._foreignModule=this._foreignModuleFactory(m,l),Promise.resolve((0,t.getAllMethodNames)(this._foreignModule))):new Promise((C,w)=>{te([s],D=>{this._foreignModule=D.create(m,l),C((0,t.getAllMethodNames)(this._foreignModule))},w)})}fmr(s,l){if(!this._foreignModule||typeof this._foreignModule[s]!=\"function\")return Promise.reject(new Error(\"Missing requestHandler or method: \"+s));try{return Promise.resolve(this._foreignModule[s].apply(this._foreignModule,l))}catch(o){return Promise.reject(o)}}}e.EditorSimpleWorker=f,f._diffLimit=1e5,f._suggestionsLimit=1e4;function c(d){return new f(d,null)}e.create=c,typeof importScripts==\"function\"&&(globalThis.monaco=(0,b.createMonacoBaseAPI)())}),define(se[339],oe([1,0,6,2,281,31]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MinimapTokensColorTracker=void 0;class S extends k.Disposable{static getInstance(){return this._INSTANCE||(this._INSTANCE=(0,k.markAsSingleton)(new S)),this._INSTANCE}constructor(){super(),this._onDidChange=new L.Emitter,this.onDidChange=this._onDidChange.event,this._updateColorMap(),this._register(E.TokenizationRegistry.onDidChange(_=>{_.changedColorMap&&this._updateColorMap()}))}_updateColorMap(){const _=E.TokenizationRegistry.getColorMap();if(!_){this._colors=[y.RGBA8.Empty],this._backgroundIsLight=!0;return}this._colors=[y.RGBA8.Empty];for(let b=1;b<_.length;b++){const a=_[b].rgba;this._colors[b]=new y.RGBA8(a.r,a.g,a.b,Math.round(a.a*255))}const v=_[2].getRelativeLuminance();this._backgroundIsLight=v>=.5,this._onDidChange.fire(void 0)}getColor(_){return(_<1||_>=this._colors.length)&&(_=2),this._colors[_]}backgroundIsLight(){return this._backgroundIsLight}}e.MinimapTokensColorTracker=S,S._INSTANCE=null}),define(se[644],oe([3,4]),function(te,e){return te.create(\"vs/editor/common/languages/modesRegistry\",e)}),define(se[645],oe([3,4]),function(te,e){return te.create(\"vs/editor/common/model/editStack\",e)}),define(se[340],oe([1,0,645,12,24,22,329,144,49]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditStack=e.isEditStackElement=e.MultiModelEditStackElement=e.SingleModelEditStackElement=e.SingleModelEditStackData=void 0;function v(u){return u.toString()}class b{static create(f,c){const d=f.getAlternativeVersionId(),s=n(f);return new b(d,d,s,s,c,c,[])}constructor(f,c,d,s,l,o,g){this.beforeVersionId=f,this.afterVersionId=c,this.beforeEOL=d,this.afterEOL=s,this.beforeCursorState=l,this.afterCursorState=o,this.changes=g}append(f,c,d,s,l){c.length>0&&(this.changes=(0,S.compressConsecutiveTextChanges)(this.changes,c)),this.afterEOL=d,this.afterVersionId=s,this.afterCursorState=l}static _writeSelectionsSize(f){return 4+4*4*(f?f.length:0)}static _writeSelections(f,c,d){if(p.writeUInt32BE(f,c?c.length:0,d),d+=4,c)for(const s of c)p.writeUInt32BE(f,s.selectionStartLineNumber,d),d+=4,p.writeUInt32BE(f,s.selectionStartColumn,d),d+=4,p.writeUInt32BE(f,s.positionLineNumber,d),d+=4,p.writeUInt32BE(f,s.positionColumn,d),d+=4;return d}static _readSelections(f,c,d){const s=p.readUInt32BE(f,c);c+=4;for(let l=0;l<s;l++){const o=p.readUInt32BE(f,c);c+=4;const g=p.readUInt32BE(f,c);c+=4;const h=p.readUInt32BE(f,c);c+=4;const m=p.readUInt32BE(f,c);c+=4,d.push(new y.Selection(o,g,h,m))}return c}serialize(){let f=10+b._writeSelectionsSize(this.beforeCursorState)+b._writeSelectionsSize(this.afterCursorState)+4;for(const s of this.changes)f+=s.writeSize();const c=new Uint8Array(f);let d=0;p.writeUInt32BE(c,this.beforeVersionId,d),d+=4,p.writeUInt32BE(c,this.afterVersionId,d),d+=4,p.writeUInt8(c,this.beforeEOL,d),d+=1,p.writeUInt8(c,this.afterEOL,d),d+=1,d=b._writeSelections(c,this.beforeCursorState,d),d=b._writeSelections(c,this.afterCursorState,d),p.writeUInt32BE(c,this.changes.length,d),d+=4;for(const s of this.changes)d=s.write(c,d);return c.buffer}static deserialize(f){const c=new Uint8Array(f);let d=0;const s=p.readUInt32BE(c,d);d+=4;const l=p.readUInt32BE(c,d);d+=4;const o=p.readUInt8(c,d);d+=1;const g=p.readUInt8(c,d);d+=1;const h=[];d=b._readSelections(c,d,h);const m=[];d=b._readSelections(c,d,m);const C=p.readUInt32BE(c,d);d+=4;const w=[];for(let D=0;D<C;D++)d=S.TextChange.read(c,d,w);return new b(s,l,o,g,h,m,w)}}e.SingleModelEditStackData=b;class a{get type(){return 0}get resource(){return E.URI.isUri(this.model)?this.model:this.model.uri}constructor(f,c,d,s){this.label=f,this.code=c,this.model=d,this._data=b.create(d,s)}toString(){return(this._data instanceof b?this._data:b.deserialize(this._data)).changes.map(c=>c.toString()).join(\", \")}matchesResource(f){return(E.URI.isUri(this.model)?this.model:this.model.uri).toString()===f.toString()}setModel(f){this.model=f}canAppend(f){return this.model===f&&this._data instanceof b}append(f,c,d,s,l){this._data instanceof b&&this._data.append(f,c,d,s,l)}close(){this._data instanceof b&&(this._data=this._data.serialize())}open(){this._data instanceof b||(this._data=b.deserialize(this._data))}undo(){if(E.URI.isUri(this.model))throw new Error(\"Invalid SingleModelEditStackElement\");this._data instanceof b&&(this._data=this._data.serialize());const f=b.deserialize(this._data);this.model._applyUndo(f.changes,f.beforeEOL,f.beforeVersionId,f.beforeCursorState)}redo(){if(E.URI.isUri(this.model))throw new Error(\"Invalid SingleModelEditStackElement\");this._data instanceof b&&(this._data=this._data.serialize());const f=b.deserialize(this._data);this.model._applyRedo(f.changes,f.afterEOL,f.afterVersionId,f.afterCursorState)}heapSize(){return this._data instanceof b&&(this._data=this._data.serialize()),this._data.byteLength+168}}e.SingleModelEditStackElement=a;class i{get resources(){return this._editStackElementsArr.map(f=>f.resource)}constructor(f,c,d){this.label=f,this.code=c,this.type=1,this._isOpen=!0,this._editStackElementsArr=d.slice(0),this._editStackElementsMap=new Map;for(const s of this._editStackElementsArr){const l=v(s.resource);this._editStackElementsMap.set(l,s)}this._delegate=null}prepareUndoRedo(){if(this._delegate)return this._delegate.prepareUndoRedo(this)}matchesResource(f){const c=v(f);return this._editStackElementsMap.has(c)}setModel(f){const c=v(E.URI.isUri(f)?f:f.uri);this._editStackElementsMap.has(c)&&this._editStackElementsMap.get(c).setModel(f)}canAppend(f){if(!this._isOpen)return!1;const c=v(f.uri);return this._editStackElementsMap.has(c)?this._editStackElementsMap.get(c).canAppend(f):!1}append(f,c,d,s,l){const o=v(f.uri);this._editStackElementsMap.get(o).append(f,c,d,s,l)}close(){this._isOpen=!1}open(){}undo(){this._isOpen=!1;for(const f of this._editStackElementsArr)f.undo()}redo(){for(const f of this._editStackElementsArr)f.redo()}heapSize(f){const c=v(f);return this._editStackElementsMap.has(c)?this._editStackElementsMap.get(c).heapSize():0}split(){return this._editStackElementsArr}toString(){const f=[];for(const c of this._editStackElementsArr)f.push(`${(0,_.basename)(c.resource)}: ${c}`);return`{${f.join(\", \")}}`}}e.MultiModelEditStackElement=i;function n(u){return u.getEOL()===`\n`?0:1}function t(u){return u?u instanceof a||u instanceof i:!1}e.isEditStackElement=t;class r{constructor(f,c){this._model=f,this._undoRedoService=c}pushStackElement(){const f=this._undoRedoService.getLastElement(this._model.uri);t(f)&&f.close()}popStackElement(){const f=this._undoRedoService.getLastElement(this._model.uri);t(f)&&f.open()}clear(){this._undoRedoService.removeElements(this._model.uri)}_getOrCreateEditStackElement(f,c){const d=this._undoRedoService.getLastElement(this._model.uri);if(t(d)&&d.canAppend(this._model))return d;const s=new a(L.localize(0,null),\"undoredo.textBufferEdit\",this._model,f);return this._undoRedoService.pushElement(s,c),s}pushEOL(f){const c=this._getOrCreateEditStackElement(null,void 0);this._model.setEOL(f),c.append(this._model,[],n(this._model),this._model.getAlternativeVersionId(),null)}pushEditOperation(f,c,d,s){const l=this._getOrCreateEditStackElement(f,s),o=this._model.applyEdits(c,!0),g=r._computeCursorState(d,o),h=o.map((m,C)=>({index:C,textChange:m.textChange}));return h.sort((m,C)=>m.textChange.oldPosition===C.textChange.oldPosition?m.index-C.index:m.textChange.oldPosition-C.textChange.oldPosition),l.append(this._model,h.map(m=>m.textChange),n(this._model),this._model.getAlternativeVersionId(),g),g}static _computeCursorState(f,c){try{return f?f(c):null}catch(d){return(0,k.onUnexpectedError)(d),null}}}e.EditStack=r}),define(se[646],oe([3,4]),function(te,e){return te.create(\"vs/editor/common/standaloneStrings\",e)}),define(se[96],oe([1,0,646]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StandaloneServicesNLS=e.ToggleHighContrastNLS=e.StandaloneCodeEditorNLS=e.QuickOutlineNLS=e.QuickCommandNLS=e.QuickHelpNLS=e.GoToLineNLS=e.InspectTokensNLS=void 0;var k;(function(a){a.inspectTokensAction=L.localize(0,null)})(k||(e.InspectTokensNLS=k={}));var y;(function(a){a.gotoLineActionLabel=L.localize(1,null)})(y||(e.GoToLineNLS=y={}));var E;(function(a){a.helpQuickAccessActionLabel=L.localize(2,null)})(E||(e.QuickHelpNLS=E={}));var S;(function(a){a.quickCommandActionLabel=L.localize(3,null),a.quickCommandHelp=L.localize(4,null)})(S||(e.QuickCommandNLS=S={}));var p;(function(a){a.quickOutlineActionLabel=L.localize(5,null),a.quickOutlineByCategoryActionLabel=L.localize(6,null)})(p||(e.QuickOutlineNLS=p={}));var _;(function(a){a.editorViewAccessibleLabel=L.localize(7,null),a.accessibilityHelpMessage=L.localize(8,null)})(_||(e.StandaloneCodeEditorNLS=_={}));var v;(function(a){a.toggleHighContrast=L.localize(9,null)})(v||(e.ToggleHighContrastNLS=v={}));var b;(function(a){a.bulkEditServiceSummary=L.localize(10,null)})(b||(e.StandaloneServicesNLS=b={}))}),define(se[647],oe([3,4]),function(te,e){return te.create(\"vs/editor/common/viewLayout/viewLineRenderer\",e)}),define(se[120],oe([1,0,647,11,102,155,543]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.renderViewLine2=e.RenderLineOutput2=e.renderViewLine=e.RenderLineOutput=e.CharacterMapping=e.DomPosition=e.RenderLineInput=e.LineRange=void 0;class p{constructor(w,D){this.startOffset=w,this.endOffset=D}equals(w){return this.startOffset===w.startOffset&&this.endOffset===w.endOffset}}e.LineRange=p;class _{constructor(w,D,I,T,A,P,N,M,R,x,O,B,W,V,K,F,q,ie,ae){this.useMonospaceOptimizations=w,this.canUseHalfwidthRightwardsArrow=D,this.lineContent=I,this.continuesWithWrappedLine=T,this.isBasicASCII=A,this.containsRTL=P,this.fauxIndentLength=N,this.lineTokens=M,this.lineDecorations=R.sort(E.LineDecoration.compare),this.tabSize=x,this.startVisibleColumn=O,this.spaceWidth=B,this.stopRenderingLineAfter=K,this.renderWhitespace=F===\"all\"?4:F===\"boundary\"?1:F===\"selection\"?2:F===\"trailing\"?3:0,this.renderControlCharacters=q,this.fontLigatures=ie,this.selectionsOnLine=ae&&ae.sort((J,Q)=>J.startOffset<Q.startOffset?-1:1);const ne=Math.abs(V-B),$=Math.abs(W-B);ne<$?(this.renderSpaceWidth=V,this.renderSpaceCharCode=11825):(this.renderSpaceWidth=W,this.renderSpaceCharCode=183)}sameSelection(w){if(this.selectionsOnLine===null)return w===null;if(w===null||w.length!==this.selectionsOnLine.length)return!1;for(let D=0;D<this.selectionsOnLine.length;D++)if(!this.selectionsOnLine[D].equals(w[D]))return!1;return!0}equals(w){return this.useMonospaceOptimizations===w.useMonospaceOptimizations&&this.canUseHalfwidthRightwardsArrow===w.canUseHalfwidthRightwardsArrow&&this.lineContent===w.lineContent&&this.continuesWithWrappedLine===w.continuesWithWrappedLine&&this.isBasicASCII===w.isBasicASCII&&this.containsRTL===w.containsRTL&&this.fauxIndentLength===w.fauxIndentLength&&this.tabSize===w.tabSize&&this.startVisibleColumn===w.startVisibleColumn&&this.spaceWidth===w.spaceWidth&&this.renderSpaceWidth===w.renderSpaceWidth&&this.renderSpaceCharCode===w.renderSpaceCharCode&&this.stopRenderingLineAfter===w.stopRenderingLineAfter&&this.renderWhitespace===w.renderWhitespace&&this.renderControlCharacters===w.renderControlCharacters&&this.fontLigatures===w.fontLigatures&&E.LineDecoration.equalsArr(this.lineDecorations,w.lineDecorations)&&this.lineTokens.equals(w.lineTokens)&&this.sameSelection(w.selectionsOnLine)}}e.RenderLineInput=_;class v{constructor(w,D){this.partIndex=w,this.charIndex=D}}e.DomPosition=v;class b{static getPartIndex(w){return(w&4294901760)>>>16}static getCharIndex(w){return(w&65535)>>>0}constructor(w,D){this.length=w,this._data=new Uint32Array(this.length),this._horizontalOffset=new Uint32Array(this.length)}setColumnInfo(w,D,I,T){const A=(D<<16|I<<0)>>>0;this._data[w-1]=A,this._horizontalOffset[w-1]=T}getHorizontalOffset(w){return this._horizontalOffset.length===0?0:this._horizontalOffset[w-1]}charOffsetToPartData(w){return this.length===0?0:w<0?this._data[0]:w>=this.length?this._data[this.length-1]:this._data[w]}getDomPosition(w){const D=this.charOffsetToPartData(w-1),I=b.getPartIndex(D),T=b.getCharIndex(D);return new v(I,T)}getColumn(w,D){return this.partDataToCharOffset(w.partIndex,D,w.charIndex)+1}partDataToCharOffset(w,D,I){if(this.length===0)return 0;const T=(w<<16|I<<0)>>>0;let A=0,P=this.length-1;for(;A+1<P;){const K=A+P>>>1,F=this._data[K];if(F===T)return K;F>T?P=K:A=K}if(A===P)return A;const N=this._data[A],M=this._data[P];if(N===T)return A;if(M===T)return P;const R=b.getPartIndex(N),x=b.getCharIndex(N),O=b.getPartIndex(M);let B;R!==O?B=D:B=b.getCharIndex(M);const W=I-x,V=B-I;return W<=V?A:P}}e.CharacterMapping=b;class a{constructor(w,D,I){this._renderLineOutputBrand=void 0,this.characterMapping=w,this.containsRTL=D,this.containsForeignElements=I}}e.RenderLineOutput=a;function i(C,w){if(C.lineContent.length===0){if(C.lineDecorations.length>0){w.appendString(\"<span>\");let D=0,I=0,T=0;for(const P of C.lineDecorations)(P.type===1||P.type===2)&&(w.appendString('<span class=\"'),w.appendString(P.className),w.appendString('\"></span>'),P.type===1&&(T|=1,D++),P.type===2&&(T|=2,I++));w.appendString(\"</span>\");const A=new b(1,D+I);return A.setColumnInfo(1,D,0,0),new a(A,!1,T)}return w.appendString(\"<span><span></span></span>\"),new a(new b(0,0),!1,0)}return g(u(C),w)}e.renderViewLine=i;class n{constructor(w,D,I,T){this.characterMapping=w,this.html=D,this.containsRTL=I,this.containsForeignElements=T}}e.RenderLineOutput2=n;function t(C){const w=new y.StringBuilder(1e4),D=i(C,w);return new n(D.characterMapping,w.build(),D.containsRTL,D.containsForeignElements)}e.renderViewLine2=t;class r{constructor(w,D,I,T,A,P,N,M,R,x,O,B,W,V,K,F){this.fontIsMonospace=w,this.canUseHalfwidthRightwardsArrow=D,this.lineContent=I,this.len=T,this.isOverflowing=A,this.overflowingCharCount=P,this.parts=N,this.containsForeignElements=M,this.fauxIndentLength=R,this.tabSize=x,this.startVisibleColumn=O,this.containsRTL=B,this.spaceWidth=W,this.renderSpaceCharCode=V,this.renderWhitespace=K,this.renderControlCharacters=F}}function u(C){const w=C.lineContent;let D,I,T;C.stopRenderingLineAfter!==-1&&C.stopRenderingLineAfter<w.length?(D=!0,I=w.length-C.stopRenderingLineAfter,T=C.stopRenderingLineAfter):(D=!1,I=0,T=w.length);let A=f(w,C.containsRTL,C.lineTokens,C.fauxIndentLength,T);C.renderControlCharacters&&!C.isBasicASCII&&(A=s(w,A)),(C.renderWhitespace===4||C.renderWhitespace===1||C.renderWhitespace===2&&C.selectionsOnLine||C.renderWhitespace===3&&!C.continuesWithWrappedLine)&&(A=l(C,w,T,A));let P=0;if(C.lineDecorations.length>0){for(let N=0,M=C.lineDecorations.length;N<M;N++){const R=C.lineDecorations[N];R.type===3||R.type===1?P|=1:R.type===2&&(P|=2)}A=o(w,T,A,C.lineDecorations)}return C.containsRTL||(A=c(w,A,!C.isBasicASCII||C.fontLigatures)),new r(C.useMonospaceOptimizations,C.canUseHalfwidthRightwardsArrow,w,T,D,I,A,P,C.fauxIndentLength,C.tabSize,C.startVisibleColumn,C.containsRTL,C.spaceWidth,C.renderSpaceCharCode,C.renderWhitespace,C.renderControlCharacters)}function f(C,w,D,I,T){const A=[];let P=0;I>0&&(A[P++]=new S.LinePart(I,\"\",0,!1));let N=I;for(let M=0,R=D.getCount();M<R;M++){const x=D.getEndOffset(M);if(x<=I)continue;const O=D.getClassName(M);if(x>=T){const W=w?k.containsRTL(C.substring(N,T)):!1;A[P++]=new S.LinePart(T,O,0,W);break}const B=w?k.containsRTL(C.substring(N,x)):!1;A[P++]=new S.LinePart(x,O,0,B),N=x}return A}function c(C,w,D){let I=0;const T=[];let A=0;if(D)for(let P=0,N=w.length;P<N;P++){const M=w[P],R=M.endIndex;if(I+50<R){const x=M.type,O=M.metadata,B=M.containsRTL;let W=-1,V=I;for(let K=I;K<R;K++)C.charCodeAt(K)===32&&(W=K),W!==-1&&K-V>=50&&(T[A++]=new S.LinePart(W+1,x,O,B),V=W+1,W=-1);V!==R&&(T[A++]=new S.LinePart(R,x,O,B))}else T[A++]=M;I=R}else for(let P=0,N=w.length;P<N;P++){const M=w[P],R=M.endIndex,x=R-I;if(x>50){const O=M.type,B=M.metadata,W=M.containsRTL,V=Math.ceil(x/50);for(let K=1;K<V;K++){const F=I+K*50;T[A++]=new S.LinePart(F,O,B,W)}T[A++]=new S.LinePart(R,O,B,W)}else T[A++]=M;I=R}return T}function d(C){return C<32?C!==9:C===127||C>=8234&&C<=8238||C>=8294&&C<=8297||C>=8206&&C<=8207||C===1564}function s(C,w){const D=[];let I=new S.LinePart(0,\"\",0,!1),T=0;for(const A of w){const P=A.endIndex;for(;T<P;T++){const N=C.charCodeAt(T);d(N)&&(T>I.endIndex&&(I=new S.LinePart(T,A.type,A.metadata,A.containsRTL),D.push(I)),I=new S.LinePart(T+1,\"mtkcontrol\",A.metadata,!1),D.push(I))}T>I.endIndex&&(I=new S.LinePart(P,A.type,A.metadata,A.containsRTL),D.push(I))}return D}function l(C,w,D,I){const T=C.continuesWithWrappedLine,A=C.fauxIndentLength,P=C.tabSize,N=C.startVisibleColumn,M=C.useMonospaceOptimizations,R=C.selectionsOnLine,x=C.renderWhitespace===1,O=C.renderWhitespace===3,B=C.renderSpaceWidth!==C.spaceWidth,W=[];let V=0,K=0,F=I[K].type,q=I[K].containsRTL,ie=I[K].endIndex;const ae=I.length;let ne=!1,$=k.firstNonWhitespaceIndex(w),J;$===-1?(ne=!0,$=D,J=D):J=k.lastNonWhitespaceIndex(w);let Q=!1,re=0,de=R&&R[re],he=N%P;for(let X=A;X<D;X++){const U=w.charCodeAt(X);de&&X>=de.endOffset&&(re++,de=R&&R[re]);let G;if(X<$||X>J)G=!0;else if(U===9)G=!0;else if(U===32)if(x)if(Q)G=!0;else{const z=X+1<D?w.charCodeAt(X+1):0;G=z===32||z===9}else G=!0;else G=!1;if(G&&R&&(G=!!de&&de.startOffset<=X&&de.endOffset>X),G&&O&&(G=ne||X>J),G&&q&&X>=$&&X<=J&&(G=!1),Q){if(!G||!M&&he>=P){if(B){const z=V>0?W[V-1].endIndex:A;for(let H=z+1;H<=X;H++)W[V++]=new S.LinePart(H,\"mtkw\",1,!1)}else W[V++]=new S.LinePart(X,\"mtkw\",1,!1);he=he%P}}else(X===ie||G&&X>A)&&(W[V++]=new S.LinePart(X,F,0,q),he=he%P);for(U===9?he=P:k.isFullWidthCharacter(U)?he+=2:he++,Q=G;X===ie&&(K++,K<ae);)F=I[K].type,q=I[K].containsRTL,ie=I[K].endIndex}let me=!1;if(Q)if(T&&x){const X=D>0?w.charCodeAt(D-1):0,U=D>1?w.charCodeAt(D-2):0;X===32&&U!==32&&U!==9||(me=!0)}else me=!0;if(me)if(B){const X=V>0?W[V-1].endIndex:A;for(let U=X+1;U<=D;U++)W[V++]=new S.LinePart(U,\"mtkw\",1,!1)}else W[V++]=new S.LinePart(D,\"mtkw\",1,!1);else W[V++]=new S.LinePart(D,F,0,q);return W}function o(C,w,D,I){I.sort(E.LineDecoration.compare);const T=E.LineDecorationsNormalizer.normalize(C,I),A=T.length;let P=0;const N=[];let M=0,R=0;for(let O=0,B=D.length;O<B;O++){const W=D[O],V=W.endIndex,K=W.type,F=W.metadata,q=W.containsRTL;for(;P<A&&T[P].startOffset<V;){const ie=T[P];if(ie.startOffset>R&&(R=ie.startOffset,N[M++]=new S.LinePart(R,K,F,q)),ie.endOffset+1<=V)R=ie.endOffset+1,N[M++]=new S.LinePart(R,K+\" \"+ie.className,F|ie.metadata,q),P++;else{R=V,N[M++]=new S.LinePart(R,K+\" \"+ie.className,F|ie.metadata,q);break}}V>R&&(R=V,N[M++]=new S.LinePart(R,K,F,q))}const x=D[D.length-1].endIndex;if(P<A&&T[P].startOffset===x)for(;P<A&&T[P].startOffset===x;){const O=T[P];N[M++]=new S.LinePart(R,O.className,O.metadata,!1),P++}return N}function g(C,w){const D=C.fontIsMonospace,I=C.canUseHalfwidthRightwardsArrow,T=C.containsForeignElements,A=C.lineContent,P=C.len,N=C.isOverflowing,M=C.overflowingCharCount,R=C.parts,x=C.fauxIndentLength,O=C.tabSize,B=C.startVisibleColumn,W=C.containsRTL,V=C.spaceWidth,K=C.renderSpaceCharCode,F=C.renderWhitespace,q=C.renderControlCharacters,ie=new b(P+1,R.length);let ae=!1,ne=0,$=B,J=0,Q=0,re=0;W?w.appendString('<span dir=\"ltr\">'):w.appendString(\"<span>\");for(let de=0,he=R.length;de<he;de++){const me=R[de],X=me.endIndex,U=me.type,G=me.containsRTL,z=F!==0&&me.isWhitespace(),H=z&&!D&&(U===\"mtkw\"||!T),Y=ne===X&&me.isPseudoAfter();if(J=0,w.appendString(\"<span \"),G&&w.appendString('style=\"unicode-bidi:isolate\" '),w.appendString('class=\"'),w.appendString(H?\"mtkz\":U),w.appendASCIICharCode(34),z){let j=0;{let Z=ne,ee=$;for(;Z<X;Z++){const ue=(A.charCodeAt(Z)===9?O-ee%O:1)|0;j+=ue,Z>=x&&(ee+=ue)}}for(H&&(w.appendString(' style=\"width:'),w.appendString(String(V*j)),w.appendString('px\"')),w.appendASCIICharCode(62);ne<X;ne++){ie.setColumnInfo(ne+1,de-re,J,Q),re=0;const Z=A.charCodeAt(ne);let ee,le;if(Z===9){ee=O-$%O|0,le=ee,!I||le>1?w.appendCharCode(8594):w.appendCharCode(65515);for(let ue=2;ue<=le;ue++)w.appendCharCode(160)}else ee=2,le=1,w.appendCharCode(K),w.appendCharCode(8204);J+=ee,Q+=le,ne>=x&&($+=le)}}else for(w.appendASCIICharCode(62);ne<X;ne++){ie.setColumnInfo(ne+1,de-re,J,Q),re=0;const j=A.charCodeAt(ne);let Z=1,ee=1;switch(j){case 9:Z=O-$%O,ee=Z;for(let le=1;le<=Z;le++)w.appendCharCode(160);break;case 32:w.appendCharCode(160);break;case 60:w.appendString(\"&lt;\");break;case 62:w.appendString(\"&gt;\");break;case 38:w.appendString(\"&amp;\");break;case 0:q?w.appendCharCode(9216):w.appendString(\"&#00;\");break;case 65279:case 8232:case 8233:case 133:w.appendCharCode(65533);break;default:k.isFullWidthCharacter(j)&&ee++,q&&j<32?w.appendCharCode(9216+j):q&&j===127?w.appendCharCode(9249):q&&d(j)?(w.appendString(\"[U+\"),w.appendString(h(j)),w.appendString(\"]\"),Z=8,ee=Z):w.appendCharCode(j)}J+=Z,Q+=ee,ne>=x&&($+=ee)}Y?re++:re=0,ne>=P&&!ae&&me.isPseudoAfter()&&(ae=!0,ie.setColumnInfo(ne+1,de,J,Q)),w.appendString(\"</span>\")}return ae||ie.setColumnInfo(P+1,R.length-1,J,Q),N&&(w.appendString('<span class=\"mtkoverflow\">'),w.appendString(L.localize(0,null,m(M))),w.appendString(\"</span>\")),w.appendString(\"</span>\"),new a(ie,W,T)}function h(C){return C.toString(16).toUpperCase().padStart(4,\"0\")}function m(C){return C<1024?L.localize(1,null,C):C<1024*1024?`${(C/1024).toFixed(1)} KB`:`${(C/1024/1024).toFixed(1)} MB`}}),define(se[648],oe([1,0,93,72,36,102,155,120,86]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RenderOptions=e.LineSource=e.renderLines=void 0;const v=(0,L.createTrustedTypesPolicy)(\"diffEditorWidget\",{createHTML:t=>t});function b(t,r,u,f){(0,k.applyFontInfo)(f,r.fontInfo);const c=u.length>0,d=new E.StringBuilder(1e4);let s=0,l=0;const o=[];for(let C=0;C<t.lineTokens.length;C++){const w=C+1,D=t.lineTokens[C],I=t.lineBreakData[C],T=S.LineDecoration.filter(u,w,1,Number.MAX_SAFE_INTEGER);if(I){let A=0;for(const P of I.breakOffsets){const N=D.sliceAndInflate(A,P,0);s=Math.max(s,n(l,N,S.LineDecoration.extractWrapped(T,A,P),c,t.mightContainNonBasicASCII,t.mightContainRTL,r,d)),l++,A=P}o.push(I.breakOffsets.length)}else o.push(1),s=Math.max(s,n(l,D,T,c,t.mightContainNonBasicASCII,t.mightContainRTL,r,d)),l++}s+=r.scrollBeyondLastColumn;const g=d.build(),h=v?v.createHTML(g):g;f.innerHTML=h;const m=s*r.typicalHalfwidthCharacterWidth;return{heightInLines:l,minWidthInPx:m,viewLineCounts:o}}e.renderLines=b;class a{constructor(r,u,f,c){this.lineTokens=r,this.lineBreakData=u,this.mightContainNonBasicASCII=f,this.mightContainRTL=c}}e.LineSource=a;class i{static fromEditor(r){var u;const f=r.getOptions(),c=f.get(50),d=f.get(143);return new i(((u=r.getModel())===null||u===void 0?void 0:u.getOptions().tabSize)||0,c,f.get(33),c.typicalHalfwidthCharacterWidth,f.get(103),f.get(66),d.decorationsWidth,f.get(116),f.get(98),f.get(93),f.get(51))}constructor(r,u,f,c,d,s,l,o,g,h,m){this.tabSize=r,this.fontInfo=u,this.disableMonospaceOptimizations=f,this.typicalHalfwidthCharacterWidth=c,this.scrollBeyondLastColumn=d,this.lineHeight=s,this.lineDecorationsWidth=l,this.stopRenderingLineAfter=o,this.renderWhitespace=g,this.renderControlCharacters=h,this.fontLigatures=m}}e.RenderOptions=i;function n(t,r,u,f,c,d,s,l){l.appendString('<div class=\"view-line'),f||l.appendString(\" char-delete\"),l.appendString('\" style=\"top:'),l.appendString(String(t*s.lineHeight)),l.appendString('px;width:1000000px;\">');const o=r.getLineContent(),g=_.ViewLineRenderingData.isBasicASCII(o,c),h=_.ViewLineRenderingData.containsRTL(o,g,d),m=(0,p.renderViewLine)(new p.RenderLineInput(s.fontInfo.isMonospace&&!s.disableMonospaceOptimizations,s.fontInfo.canUseHalfwidthRightwardsArrow,o,!1,g,h,0,r,u,s.tabSize,0,s.fontInfo.spaceWidth,s.fontInfo.middotWidth,s.fontInfo.wsmiddotWidth,s.stopRenderingLineAfter,s.renderWhitespace,s.renderControlCharacters,s.fontLigatures!==y.EditorFontLigatures.OFF,null),l);return l.appendString(\"</div>\"),m.characterMapping.getHorizontalOffset(m.characterMapping.length)}}),define(se[649],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/anchorSelect/browser/anchorSelect\",e)}),define(se[650],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/bracketMatching/browser/bracketMatching\",e)}),define(se[651],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/caretOperations/browser/caretOperations\",e)}),define(se[652],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/caretOperations/browser/transpose\",e)}),define(se[653],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/clipboard/browser/clipboard\",e)}),define(se[654],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/codeAction/browser/codeAction\",e)}),define(se[655],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/codeAction/browser/codeActionCommands\",e)}),define(se[656],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/codeAction/browser/codeActionContributions\",e)}),define(se[657],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/codeAction/browser/codeActionController\",e)}),define(se[658],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/codeAction/browser/codeActionMenu\",e)}),define(se[659],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/codeAction/browser/lightBulbWidget\",e)}),define(se[660],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/codelens/browser/codelensController\",e)}),define(se[661],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/colorPicker/browser/colorPickerWidget\",e)}),define(se[662],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions\",e)}),define(se[663],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/comment/browser/comment\",e)}),define(se[664],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/contextmenu/browser/contextmenu\",e)}),define(se[665],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/cursorUndo/browser/cursorUndo\",e)}),define(se[666],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution\",e)}),define(se[667],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/dropOrPasteInto/browser/copyPasteController\",e)}),define(se[668],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/dropOrPasteInto/browser/defaultProviders\",e)}),define(se[669],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution\",e)}),define(se[670],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController\",e)}),define(se[671],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/editorState/browser/keybindingCancellation\",e)}),define(se[672],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/find/browser/findController\",e)}),define(se[673],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/find/browser/findWidget\",e)}),define(se[674],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/folding/browser/folding\",e)}),define(se[675],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/folding/browser/foldingDecorations\",e)}),define(se[676],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/fontZoom/browser/fontZoom\",e)}),define(se[677],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/format/browser/formatActions\",e)}),define(se[678],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/gotoError/browser/gotoError\",e)}),define(se[679],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/gotoError/browser/gotoErrorWidget\",e)}),define(se[680],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/gotoSymbol/browser/goToCommands\",e)}),define(se[681],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition\",e)}),define(se[682],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/gotoSymbol/browser/peek/referencesController\",e)}),define(se[683],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/gotoSymbol/browser/peek/referencesTree\",e)}),define(se[684],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget\",e)}),define(se[685],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/gotoSymbol/browser/referencesModel\",e)}),define(se[161],oe([1,0,12,6,170,2,53,49,11,5,685]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ReferencesModel=e.FileReferences=e.FilePreview=e.OneReference=void 0;class a{constructor(u,f,c,d){this.isProviderFirst=u,this.parent=f,this.link=c,this._rangeCallback=d,this.id=y.defaultGenerator.nextId()}get uri(){return this.link.uri}get range(){var u,f;return(f=(u=this._range)!==null&&u!==void 0?u:this.link.targetSelectionRange)!==null&&f!==void 0?f:this.link.range}set range(u){this._range=u,this._rangeCallback(this)}get ariaMessage(){var u;const f=(u=this.parent.getPreview(this))===null||u===void 0?void 0:u.preview(this.range);return f?(0,b.localize)(1,null,f.value,(0,p.basename)(this.uri),this.range.startLineNumber,this.range.startColumn):(0,b.localize)(0,null,(0,p.basename)(this.uri),this.range.startLineNumber,this.range.startColumn)}}e.OneReference=a;class i{constructor(u){this._modelReference=u}dispose(){this._modelReference.dispose()}preview(u,f=8){const c=this._modelReference.object.textEditorModel;if(!c)return;const{startLineNumber:d,startColumn:s,endLineNumber:l,endColumn:o}=u,g=c.getWordUntilPosition({lineNumber:d,column:s-f}),h=new v.Range(d,g.startColumn,d,s),m=new v.Range(l,o,l,1073741824),C=c.getValueInRange(h).replace(/^\\s+/,\"\"),w=c.getValueInRange(u),D=c.getValueInRange(m).replace(/\\s+$/,\"\");return{value:C+w+D,highlight:{start:C.length,end:C.length+w.length}}}}e.FilePreview=i;class n{constructor(u,f){this.parent=u,this.uri=f,this.children=[],this._previews=new S.ResourceMap}dispose(){(0,E.dispose)(this._previews.values()),this._previews.clear()}getPreview(u){return this._previews.get(u.uri)}get ariaMessage(){const u=this.children.length;return u===1?(0,b.localize)(2,null,(0,p.basename)(this.uri),this.uri.fsPath):(0,b.localize)(3,null,u,(0,p.basename)(this.uri),this.uri.fsPath)}async resolve(u){if(this._previews.size!==0)return this;for(const f of this.children)if(!this._previews.has(f.uri))try{const c=await u.createModelReference(f.uri);this._previews.set(f.uri,new i(c))}catch(c){(0,L.onUnexpectedError)(c)}return this}}e.FileReferences=n;class t{constructor(u,f){this.groups=[],this.references=[],this._onDidChangeReferenceRange=new k.Emitter,this.onDidChangeReferenceRange=this._onDidChangeReferenceRange.event,this._links=u,this._title=f;const[c]=u;u.sort(t._compareReferences);let d;for(const s of u)if((!d||!p.extUri.isEqual(d.uri,s.uri,!0))&&(d=new n(this,s.uri),this.groups.push(d)),d.children.length===0||t._compareReferences(s,d.children[d.children.length-1])!==0){const l=new a(c===s,d,s,o=>this._onDidChangeReferenceRange.fire(o));this.references.push(l),d.children.push(l)}}dispose(){(0,E.dispose)(this.groups),this._onDidChangeReferenceRange.dispose(),this.groups.length=0}clone(){return new t(this._links,this._title)}get title(){return this._title}get isEmpty(){return this.groups.length===0}get ariaMessage(){return this.isEmpty?(0,b.localize)(4,null):this.references.length===1?(0,b.localize)(5,null,this.references[0].uri.fsPath):this.groups.length===1?(0,b.localize)(6,null,this.references.length,this.groups[0].uri.fsPath):(0,b.localize)(7,null,this.references.length,this.groups.length)}nextOrPreviousReference(u,f){const{parent:c}=u;let d=c.children.indexOf(u);const s=c.children.length,l=c.parent.groups.length;return l===1||f&&d+1<s||!f&&d>0?(f?d=(d+1)%s:d=(d+s-1)%s,c.children[d]):(d=c.parent.groups.indexOf(c),f?(d=(d+1)%l,c.parent.groups[d].children[0]):(d=(d+l-1)%l,c.parent.groups[d].children[c.parent.groups[d].children.length-1]))}nearestReference(u,f){const c=this.references.map((d,s)=>({idx:s,prefixLen:_.commonPrefixLength(d.uri.toString(),u.toString()),offsetDist:Math.abs(d.range.startLineNumber-f.lineNumber)*100+Math.abs(d.range.startColumn-f.column)})).sort((d,s)=>d.prefixLen>s.prefixLen?-1:d.prefixLen<s.prefixLen?1:d.offsetDist<s.offsetDist?-1:d.offsetDist>s.offsetDist?1:0)[0];if(c)return this.references[c.idx]}referenceAt(u,f){for(const c of this.references)if(c.uri.toString()===u.toString()&&v.Range.containsPosition(c.range,f))return c}firstReference(){for(const u of this.references)if(u.isProviderFirst)return u;return this.references[0]}static _compareReferences(u,f){return p.extUri.compare(u.uri,f.uri)||v.Range.compareRangesUsingStarts(u.range,f.range)}}e.ReferencesModel=t}),define(se[686],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/gotoSymbol/browser/symbolNavigation\",e)}),define(se[687],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/hover/browser/hover\",e)}),define(se[688],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/hover/browser/markdownHoverParticipant\",e)}),define(se[689],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/hover/browser/markerHoverParticipant\",e)}),define(se[690],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace\",e)}),define(se[691],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/indentation/browser/indentation\",e)}),define(se[692],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/inlayHints/browser/inlayHintsHover\",e)}),define(se[693],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/inlineCompletions/browser/commands\",e)}),define(se[694],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/inlineCompletions/browser/hoverParticipant\",e)}),define(se[695],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys\",e)}),define(se[696],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController\",e)}),define(se[697],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget\",e)}),define(se[698],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/lineSelection/browser/lineSelection\",e)}),define(se[699],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/linesOperations/browser/linesOperations\",e)}),define(se[700],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/linkedEditing/browser/linkedEditing\",e)}),define(se[701],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/links/browser/links\",e)}),define(se[702],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/message/browser/messageController\",e)}),define(se[703],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/multicursor/browser/multicursor\",e)}),define(se[704],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/parameterHints/browser/parameterHints\",e)}),define(se[705],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/parameterHints/browser/parameterHintsWidget\",e)}),define(se[706],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/peekView/browser/peekView\",e)}),define(se[707],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess\",e)}),define(se[708],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess\",e)}),define(se[709],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/readOnlyMessage/browser/contribution\",e)}),define(se[710],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/rename/browser/rename\",e)}),define(se[711],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/rename/browser/renameInputField\",e)}),define(se[712],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/smartSelect/browser/smartSelect\",e)}),define(se[713],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/snippet/browser/snippetController2\",e)}),define(se[714],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/snippet/browser/snippetVariables\",e)}),define(se[715],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/stickyScroll/browser/stickyScrollActions\",e)}),define(se[716],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/suggest/browser/suggest\",e)}),define(se[717],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/suggest/browser/suggestController\",e)}),define(se[718],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/suggest/browser/suggestWidget\",e)}),define(se[719],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/suggest/browser/suggestWidgetDetails\",e)}),define(se[720],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/suggest/browser/suggestWidgetRenderer\",e)}),define(se[721],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/suggest/browser/suggestWidgetStatus\",e)}),define(se[722],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/symbolIcons/browser/symbolIcons\",e)}),define(se[723],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode\",e)}),define(se[724],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/tokenization/browser/tokenization\",e)}),define(se[725],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter\",e)}),define(se[726],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators\",e)}),define(se[727],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/wordHighlighter/browser/highlightDecorations\",e)}),define(se[728],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/wordHighlighter/browser/wordHighlighter\",e)}),define(se[729],oe([3,4]),function(te,e){return te.create(\"vs/editor/contrib/wordOperations/browser/wordOperations\",e)}),define(se[730],oe([3,4]),function(te,e){return te.create(\"vs/platform/action/common/actionCommonCategories\",e)}),define(se[731],oe([3,4]),function(te,e){return te.create(\"vs/platform/actionWidget/browser/actionList\",e)}),define(se[732],oe([3,4]),function(te,e){return te.create(\"vs/platform/actionWidget/browser/actionWidget\",e)}),define(se[733],oe([3,4]),function(te,e){return te.create(\"vs/platform/actions/browser/menuEntryActionViewItem\",e)}),define(se[734],oe([3,4]),function(te,e){return te.create(\"vs/platform/actions/browser/toolbar\",e)}),define(se[735],oe([3,4]),function(te,e){return te.create(\"vs/platform/actions/common/menuService\",e)}),define(se[736],oe([3,4]),function(te,e){return te.create(\"vs/platform/audioCues/browser/audioCueService\",e)}),define(se[737],oe([3,4]),function(te,e){return te.create(\"vs/platform/configuration/common/configurationRegistry\",e)}),define(se[738],oe([3,4]),function(te,e){return te.create(\"vs/platform/contextkey/browser/contextKeyService\",e)}),define(se[739],oe([3,4]),function(te,e){return te.create(\"vs/platform/contextkey/common/contextkey\",e)}),define(se[740],oe([3,4]),function(te,e){return te.create(\"vs/platform/contextkey/common/contextkeys\",e)}),define(se[741],oe([3,4]),function(te,e){return te.create(\"vs/platform/contextkey/common/scanner\",e)}),define(se[742],oe([3,4]),function(te,e){return te.create(\"vs/platform/history/browser/contextScopedHistoryWidget\",e)}),define(se[743],oe([3,4]),function(te,e){return te.create(\"vs/platform/keybinding/common/abstractKeybindingService\",e)}),define(se[744],oe([3,4]),function(te,e){return te.create(\"vs/platform/list/browser/listService\",e)}),define(se[745],oe([3,4]),function(te,e){return te.create(\"vs/platform/markers/common/markers\",e)}),define(se[746],oe([3,4]),function(te,e){return te.create(\"vs/platform/quickinput/browser/commandsQuickAccess\",e)}),define(se[747],oe([3,4]),function(te,e){return te.create(\"vs/platform/quickinput/browser/helpQuickAccess\",e)}),define(se[748],oe([3,4]),function(te,e){return te.create(\"vs/platform/quickinput/browser/quickInput\",e)}),define(se[749],oe([3,4]),function(te,e){return te.create(\"vs/platform/quickinput/browser/quickInputController\",e)}),define(se[750],oe([3,4]),function(te,e){return te.create(\"vs/platform/quickinput/browser/quickInputList\",e)}),define(se[751],oe([3,4]),function(te,e){return te.create(\"vs/platform/quickinput/browser/quickInputUtils\",e)}),define(se[752],oe([3,4]),function(te,e){return te.create(\"vs/platform/theme/common/colorRegistry\",e)}),define(se[753],oe([3,4]),function(te,e){return te.create(\"vs/platform/theme/common/iconRegistry\",e)}),define(se[754],oe([3,4]),function(te,e){return te.create(\"vs/platform/undoRedo/common/undoRedoService\",e)}),define(se[755],oe([3,4]),function(te,e){return te.create(\"vs/platform/workspace/common/workspace\",e)}),define(se[756],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isICommandActionToggleInfo=void 0;function L(k){return k?k.condition!==void 0:!1}e.isICommandActionToggleInfo=L}),define(se[757],oe([1,0,730]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Categories=void 0,e.Categories=Object.freeze({View:(0,L.localize2)(1,\"View\"),Help:(0,L.localize2)(2,\"Help\"),Test:(0,L.localize2)(3,\"Test\"),File:(0,L.localize2)(4,\"File\"),Preferences:(0,L.localize2)(5,\"Preferences\"),Developer:{value:(0,L.localize)(0,null),original:\"Developer\"}})}),define(se[758],oe([1,0,12,741]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Scanner=void 0;function y(..._){switch(_.length){case 1:return(0,k.localize)(0,null,_[0]);case 2:return(0,k.localize)(1,null,_[0],_[1]);case 3:return(0,k.localize)(2,null,_[0],_[1],_[2]);default:return}}const E=(0,k.localize)(3,null),S=(0,k.localize)(4,null);class p{constructor(){this._input=\"\",this._start=0,this._current=0,this._tokens=[],this._errors=[],this.stringRe=/[a-zA-Z0-9_<>\\-\\./\\\\:\\*\\?\\+\\[\\]\\^,#@;\"%\\$\\p{L}-]+/uy}static getLexeme(v){switch(v.type){case 0:return\"(\";case 1:return\")\";case 2:return\"!\";case 3:return v.isTripleEq?\"===\":\"==\";case 4:return v.isTripleEq?\"!==\":\"!=\";case 5:return\"<\";case 6:return\"<=\";case 7:return\">=\";case 8:return\">=\";case 9:return\"=~\";case 10:return v.lexeme;case 11:return\"true\";case 12:return\"false\";case 13:return\"in\";case 14:return\"not\";case 15:return\"&&\";case 16:return\"||\";case 17:return v.lexeme;case 18:return v.lexeme;case 19:return v.lexeme;case 20:return\"EOF\";default:throw(0,L.illegalState)(`unhandled token type: ${JSON.stringify(v)}; have you forgotten to add a case?`)}}reset(v){return this._input=v,this._start=0,this._current=0,this._tokens=[],this._errors=[],this}scan(){for(;!this._isAtEnd();)switch(this._start=this._current,this._advance()){case 40:this._addToken(0);break;case 41:this._addToken(1);break;case 33:if(this._match(61)){const b=this._match(61);this._tokens.push({type:4,offset:this._start,isTripleEq:b})}else this._addToken(2);break;case 39:this._quotedString();break;case 47:this._regex();break;case 61:if(this._match(61)){const b=this._match(61);this._tokens.push({type:3,offset:this._start,isTripleEq:b})}else this._match(126)?this._addToken(9):this._error(y(\"==\",\"=~\"));break;case 60:this._addToken(this._match(61)?6:5);break;case 62:this._addToken(this._match(61)?8:7);break;case 38:this._match(38)?this._addToken(15):this._error(y(\"&&\"));break;case 124:this._match(124)?this._addToken(16):this._error(y(\"||\"));break;case 32:case 13:case 9:case 10:case 160:break;default:this._string()}return this._start=this._current,this._addToken(20),Array.from(this._tokens)}_match(v){return this._isAtEnd()||this._input.charCodeAt(this._current)!==v?!1:(this._current++,!0)}_advance(){return this._input.charCodeAt(this._current++)}_peek(){return this._isAtEnd()?0:this._input.charCodeAt(this._current)}_addToken(v){this._tokens.push({type:v,offset:this._start})}_error(v){const b=this._start,a=this._input.substring(this._start,this._current),i={type:19,offset:this._start,lexeme:a};this._errors.push({offset:b,lexeme:a,additionalInfo:v}),this._tokens.push(i)}_string(){this.stringRe.lastIndex=this._start;const v=this.stringRe.exec(this._input);if(v){this._current=this._start+v[0].length;const b=this._input.substring(this._start,this._current),a=p._keywords.get(b);a?this._addToken(a):this._tokens.push({type:17,lexeme:b,offset:this._start})}}_quotedString(){for(;this._peek()!==39&&!this._isAtEnd();)this._advance();if(this._isAtEnd()){this._error(E);return}this._advance(),this._tokens.push({type:18,lexeme:this._input.substring(this._start+1,this._current-1),offset:this._start+1})}_regex(){let v=this._current,b=!1,a=!1;for(;;){if(v>=this._input.length){this._current=v,this._error(S);return}const n=this._input.charCodeAt(v);if(b)b=!1;else if(n===47&&!a){v++;break}else n===91?a=!0:n===92?b=!0:n===93&&(a=!1);v++}for(;v<this._input.length&&p._regexFlags.has(this._input.charCodeAt(v));)v++;this._current=v;const i=this._input.substring(this._start,this._current);this._tokens.push({type:10,lexeme:i,offset:this._start})}_isAtEnd(){return this._current>=this._input.length}}e.Scanner=p,p._regexFlags=new Set([\"i\",\"g\",\"s\",\"m\",\"y\",\"u\"].map(_=>_.charCodeAt(0))),p._keywords=new Map([[\"not\",14],[\"in\",13],[\"false\",12],[\"true\",11]])}),define(se[759],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorOpenSource=void 0;var L;(function(k){k[k.API=0]=\"API\",k[k.USER=1]=\"USER\"})(L||(e.EditorOpenSource=L={}))}),define(se[760],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ExtensionIdentifierSet=e.ExtensionIdentifier=void 0;class L{constructor(E){this.value=E,this._lower=E.toLowerCase()}static toKey(E){return typeof E==\"string\"?E.toLowerCase():E._lower}}e.ExtensionIdentifier=L;class k{constructor(E){if(this._set=new Set,E)for(const S of E)this.add(S)}add(E){this._set.add(L.toKey(E))}has(E){return this._set.has(L.toKey(E))}}e.ExtensionIdentifierSet=k}),define(se[341],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FileKind=void 0;var L;(function(k){k[k.FILE=0]=\"FILE\",k[k.FOLDER=1]=\"FOLDER\",k[k.ROOT_FOLDER=2]=\"ROOT_FOLDER\"})(L||(e.FileKind=L={}))}),define(se[761],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.showHistoryKeybindingHint=void 0;function L(k){var y,E;return((y=k.lookupKeybinding(\"history.showPrevious\"))===null||y===void 0?void 0:y.getElectronAccelerator())===\"Up\"&&((E=k.lookupKeybinding(\"history.showNext\"))===null||E===void 0?void 0:E.getElectronAccelerator())===\"Down\"}e.showHistoryKeybindingHint=L}),define(se[236],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SyncDescriptor=void 0;class L{constructor(y,E=[],S=!1){this.ctor=y,this.staticArguments=E,this.supportsDelayedInstantiation=S}}e.SyncDescriptor=L}),define(se[45],oe([1,0,236]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getSingletonServiceDescriptors=e.registerSingleton=void 0;const k=[];function y(S,p,_){p instanceof L.SyncDescriptor||(p=new L.SyncDescriptor(p,[],!!_)),k.push([S,p])}e.registerSingleton=y;function E(){return k}e.getSingletonServiceDescriptors=E}),define(se[762],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Graph=e.Node=void 0;class L{constructor(E,S){this.key=E,this.data=S,this.incoming=new Map,this.outgoing=new Map}}e.Node=L;class k{constructor(E){this._hashFn=E,this._nodes=new Map}roots(){const E=[];for(const S of this._nodes.values())S.outgoing.size===0&&E.push(S);return E}insertEdge(E,S){const p=this.lookupOrInsertNode(E),_=this.lookupOrInsertNode(S);p.outgoing.set(_.key,_),_.incoming.set(p.key,p)}removeNode(E){const S=this._hashFn(E);this._nodes.delete(S);for(const p of this._nodes.values())p.outgoing.delete(S),p.incoming.delete(S)}lookupOrInsertNode(E){const S=this._hashFn(E);let p=this._nodes.get(S);return p||(p=new L(S,E),this._nodes.set(S,p)),p}isEmpty(){return this._nodes.size===0}toString(){const E=[];for(const[S,p]of this._nodes)E.push(`${S}\n\t(-> incoming)[${[...p.incoming.keys()].join(\", \")}]\n\t(outgoing ->)[${[...p.outgoing.keys()].join(\",\")}]\n`);return E.join(`\n`)}findCycleSlow(){for(const[E,S]of this._nodes){const p=new Set([E]),_=this._findCycle(S,p);if(_)return _}}_findCycle(E,S){for(const[p,_]of E.outgoing){if(S.has(p))return[...S,p].join(\" -> \");S.add(p);const v=this._findCycle(_,S);if(v)return v;S.delete(p)}}}e.Graph=k}),define(se[8],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createDecorator=e.IInstantiationService=e._util=void 0;var L;(function(E){E.serviceIds=new Map,E.DI_TARGET=\"$di$target\",E.DI_DEPENDENCIES=\"$di$dependencies\";function S(p){return p[E.DI_DEPENDENCIES]||[]}E.getServiceDependencies=S})(L||(e._util=L={})),e.IInstantiationService=y(\"instantiationService\");function k(E,S,p){S[L.DI_TARGET]===S?S[L.DI_DEPENDENCIES].push({id:E,index:p}):(S[L.DI_DEPENDENCIES]=[{id:E,index:p}],S[L.DI_TARGET]=S)}function y(E){if(L.serviceIds.has(E))return L.serviceIds.get(E);const S=function(p,_,v){if(arguments.length!==3)throw new Error(\"@IServiceName-decorator can only be used to decorate a parameter\");k(S,p,v)};return S.toString=()=>E,L.serviceIds.set(E,S),S}e.createDecorator=y}),define(se[136],oe([1,0,8,22,20]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ResourceFileEdit=e.ResourceTextEdit=e.ResourceEdit=e.IBulkEditService=void 0,e.IBulkEditService=(0,L.createDecorator)(\"IWorkspaceEditService\");class E{constructor(v){this.metadata=v}static convert(v){return v.edits.map(b=>{if(S.is(b))return S.lift(b);if(p.is(b))return p.lift(b);throw new Error(\"Unsupported edit\")})}}e.ResourceEdit=E;class S extends E{static is(v){return v instanceof S?!0:(0,y.isObject)(v)&&k.URI.isUri(v.resource)&&(0,y.isObject)(v.textEdit)}static lift(v){return v instanceof S?v:new S(v.resource,v.textEdit,v.versionId,v.metadata)}constructor(v,b,a=void 0,i){super(i),this.resource=v,this.textEdit=b,this.versionId=a}}e.ResourceTextEdit=S;class p extends E{static is(v){return v instanceof p?!0:(0,y.isObject)(v)&&(!!v.newResource||!!v.oldResource)}static lift(v){return v instanceof p?v:new p(v.oldResource,v.newResource,v.options,v.metadata)}constructor(v,b,a={},i){super(i),this.oldResource=v,this.newResource=b,this.options=a}}e.ResourceFileEdit=p}),define(se[33],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ICodeEditorService=void 0,e.ICodeEditorService=(0,L.createDecorator)(\"codeEditorService\")});var ge=this&&this.__param||function(te,e){return function(L,k){e(L,k,te)}};define(se[342],oe([1,0,7,118,26,58,2,35,171,28,20,87,62,10,5,31,627,8]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){\"use strict\";var c;Object.defineProperty(e,\"__esModule\",{value:!0}),e.HideUnchangedRegionsFeature=void 0;let d=c=class extends S.Disposable{static setBreadcrumbsSourceFactory(o){this._breadcrumbsSourceFactory.set(o,void 0)}get isUpdatingHiddenAreas(){return this._isUpdatingHiddenAreas}constructor(o,g,h,m){super(),this._editors=o,this._diffModel=g,this._options=h,this._instantiationService=m,this._modifiedOutlineSource=(0,_.derivedDisposable)(this,I=>{const T=this._editors.modifiedModel.read(I),A=c._breadcrumbsSourceFactory.read(I);return!T||!A?void 0:A(T,this._instantiationService)}),this._isUpdatingHiddenAreas=!1,this._register(this._editors.original.onDidChangeCursorPosition(I=>{if(I.reason===3){const T=this._diffModel.get();(0,p.transaction)(A=>{for(const P of this._editors.original.getSelections()||[])T?.ensureOriginalLineIsVisible(P.getStartPosition().lineNumber,0,A),T?.ensureOriginalLineIsVisible(P.getEndPosition().lineNumber,0,A)})}})),this._register(this._editors.modified.onDidChangeCursorPosition(I=>{if(I.reason===3){const T=this._diffModel.get();(0,p.transaction)(A=>{for(const P of this._editors.modified.getSelections()||[])T?.ensureModifiedLineIsVisible(P.getStartPosition().lineNumber,0,A),T?.ensureModifiedLineIsVisible(P.getEndPosition().lineNumber,0,A)})}}));const C=this._diffModel.map((I,T)=>{var A,P;const N=(A=I?.unchangedRegions.read(T))!==null&&A!==void 0?A:[];return N.length===1&&N[0].modifiedLineNumber===1&&N[0].lineCount===((P=this._editors.modifiedModel.read(T))===null||P===void 0?void 0:P.getLineCount())?[]:N});this.viewZones=(0,p.derivedWithStore)(this,(I,T)=>{const A=this._modifiedOutlineSource.read(I);if(!A)return{origViewZones:[],modViewZones:[]};const P=[],N=[],M=this._options.renderSideBySide.read(I),R=C.read(I);for(const x of R)if(!x.shouldHideControls(I)){{const O=(0,p.derived)(this,W=>x.getHiddenOriginalRange(W).startLineNumber-1),B=new a.PlaceholderViewZone(O,24);P.push(B),T.add(new s(this._editors.original,B,x,x.originalUnchangedRange,!M,A,W=>this._diffModel.get().ensureModifiedLineIsVisible(W,2,void 0),this._options))}{const O=(0,p.derived)(this,W=>x.getHiddenModifiedRange(W).startLineNumber-1),B=new a.PlaceholderViewZone(O,24);N.push(B),T.add(new s(this._editors.modified,B,x,x.modifiedUnchangedRange,!1,A,W=>this._diffModel.get().ensureModifiedLineIsVisible(W,2,void 0),this._options))}}return{origViewZones:P,modViewZones:N}});const w={description:\"unchanged lines\",className:\"diff-unchanged-lines\",isWholeLine:!0},D={description:\"Fold Unchanged\",glyphMarginHoverMessage:new E.MarkdownString(void 0,{isTrusted:!0,supportThemeIcons:!0}).appendMarkdown((0,u.localize)(0,null)),glyphMarginClassName:\"fold-unchanged \"+v.ThemeIcon.asClassName(y.Codicon.fold),zIndex:10001};this._register((0,a.applyObservableDecorations)(this._editors.original,(0,p.derived)(this,I=>{const T=C.read(I),A=T.map(P=>({range:P.originalUnchangedRange.toInclusiveRange(),options:w}));for(const P of T)P.shouldHideControls(I)&&A.push({range:t.Range.fromPositions(new n.Position(P.originalLineNumber,1)),options:D});return A}))),this._register((0,a.applyObservableDecorations)(this._editors.modified,(0,p.derived)(this,I=>{const T=C.read(I),A=T.map(P=>({range:P.modifiedUnchangedRange.toInclusiveRange(),options:w}));for(const P of T)P.shouldHideControls(I)&&A.push({range:i.LineRange.ofLength(P.modifiedLineNumber,1).toInclusiveRange(),options:D});return A}))),this._register((0,p.autorun)(I=>{const T=C.read(I);this._isUpdatingHiddenAreas=!0;try{this._editors.original.setHiddenAreas(T.map(A=>A.getHiddenOriginalRange(I).toInclusiveRange()).filter(b.isDefined)),this._editors.modified.setHiddenAreas(T.map(A=>A.getHiddenModifiedRange(I).toInclusiveRange()).filter(b.isDefined))}finally{this._isUpdatingHiddenAreas=!1}})),this._register(this._editors.modified.onMouseUp(I=>{var T;if(!I.event.rightButton&&I.target.position&&(!((T=I.target.element)===null||T===void 0)&&T.className.includes(\"fold-unchanged\"))){const A=I.target.position.lineNumber,P=this._diffModel.get();if(!P)return;const N=P.unchangedRegions.get().find(M=>M.modifiedUnchangedRange.includes(A));if(!N)return;N.collapseAll(void 0),I.event.stopPropagation(),I.event.preventDefault()}})),this._register(this._editors.original.onMouseUp(I=>{var T;if(!I.event.rightButton&&I.target.position&&(!((T=I.target.element)===null||T===void 0)&&T.className.includes(\"fold-unchanged\"))){const A=I.target.position.lineNumber,P=this._diffModel.get();if(!P)return;const N=P.unchangedRegions.get().find(M=>M.originalUnchangedRange.includes(A));if(!N)return;N.collapseAll(void 0),I.event.stopPropagation(),I.event.preventDefault()}}))}};e.HideUnchangedRegionsFeature=d,d._breadcrumbsSourceFactory=(0,p.observableValue)(\"breadcrumbsSourceFactory\",void 0),e.HideUnchangedRegionsFeature=d=c=ke([ge(3,f.IInstantiationService)],d);class s extends a.ViewZoneOverlayWidget{constructor(o,g,h,m,C,w,D,I){const T=(0,L.h)(\"div.diff-hidden-lines-widget\");super(o,g,T.root),this._editor=o,this._unchangedRegion=h,this._unchangedRegionRange=m,this._hide=C,this._modifiedOutlineSource=w,this._revealModifiedHiddenLine=D,this._options=I,this._nodes=(0,L.h)(\"div.diff-hidden-lines\",[(0,L.h)(\"div.top@top\",{title:(0,u.localize)(1,null)}),(0,L.h)(\"div.center@content\",{style:{display:\"flex\"}},[(0,L.h)(\"div@first\",{style:{display:\"flex\",justifyContent:\"center\",alignItems:\"center\",flexShrink:\"0\"}},[(0,L.$)(\"a\",{title:(0,u.localize)(2,null),role:\"button\",onclick:()=>{this._unchangedRegion.showAll(void 0)}},...(0,k.renderLabelWithIcons)(\"$(unfold)\"))]),(0,L.h)(\"div@others\",{style:{display:\"flex\",justifyContent:\"center\",alignItems:\"center\"}})]),(0,L.h)(\"div.bottom@bottom\",{title:(0,u.localize)(3,null),role:\"button\"})]),T.root.appendChild(this._nodes.root);const A=(0,p.observableFromEvent)(this._editor.onDidLayoutChange,()=>this._editor.getLayoutInfo());this._hide?(0,L.reset)(this._nodes.first):this._register((0,a.applyStyle)(this._nodes.first,{width:A.map(N=>N.contentLeft)})),this._register((0,p.autorun)(N=>{const M=this._unchangedRegion.visibleLineCountTop.read(N)+this._unchangedRegion.visibleLineCountBottom.read(N)===this._unchangedRegion.lineCount;this._nodes.bottom.classList.toggle(\"canMoveTop\",!M),this._nodes.bottom.classList.toggle(\"canMoveBottom\",this._unchangedRegion.visibleLineCountBottom.read(N)>0),this._nodes.top.classList.toggle(\"canMoveTop\",this._unchangedRegion.visibleLineCountTop.read(N)>0),this._nodes.top.classList.toggle(\"canMoveBottom\",!M);const R=this._unchangedRegion.isDragged.read(N),x=this._editor.getDomNode();x&&(x.classList.toggle(\"draggingUnchangedRegion\",!!R),R===\"top\"?(x.classList.toggle(\"canMoveTop\",this._unchangedRegion.visibleLineCountTop.read(N)>0),x.classList.toggle(\"canMoveBottom\",!M)):R===\"bottom\"?(x.classList.toggle(\"canMoveTop\",!M),x.classList.toggle(\"canMoveBottom\",this._unchangedRegion.visibleLineCountBottom.read(N)>0)):(x.classList.toggle(\"canMoveTop\",!1),x.classList.toggle(\"canMoveBottom\",!1)))}));const P=this._editor;this._register((0,L.addDisposableListener)(this._nodes.top,\"mousedown\",N=>{if(N.button!==0)return;this._nodes.top.classList.toggle(\"dragging\",!0),this._nodes.root.classList.toggle(\"dragging\",!0),N.preventDefault();const M=N.clientY;let R=!1;const x=this._unchangedRegion.visibleLineCountTop.get();this._unchangedRegion.isDragged.set(\"top\",void 0);const O=(0,L.getWindow)(this._nodes.top),B=(0,L.addDisposableListener)(O,\"mousemove\",V=>{const F=V.clientY-M;R=R||Math.abs(F)>2;const q=Math.round(F/P.getOption(66)),ie=Math.max(0,Math.min(x+q,this._unchangedRegion.getMaxVisibleLineCountTop()));this._unchangedRegion.visibleLineCountTop.set(ie,void 0)}),W=(0,L.addDisposableListener)(O,\"mouseup\",V=>{R||this._unchangedRegion.showMoreAbove(this._options.hideUnchangedRegionsRevealLineCount.get(),void 0),this._nodes.top.classList.toggle(\"dragging\",!1),this._nodes.root.classList.toggle(\"dragging\",!1),this._unchangedRegion.isDragged.set(void 0,void 0),B.dispose(),W.dispose()})})),this._register((0,L.addDisposableListener)(this._nodes.bottom,\"mousedown\",N=>{if(N.button!==0)return;this._nodes.bottom.classList.toggle(\"dragging\",!0),this._nodes.root.classList.toggle(\"dragging\",!0),N.preventDefault();const M=N.clientY;let R=!1;const x=this._unchangedRegion.visibleLineCountBottom.get();this._unchangedRegion.isDragged.set(\"bottom\",void 0);const O=(0,L.getWindow)(this._nodes.bottom),B=(0,L.addDisposableListener)(O,\"mousemove\",V=>{const F=V.clientY-M;R=R||Math.abs(F)>2;const q=Math.round(F/P.getOption(66)),ie=Math.max(0,Math.min(x-q,this._unchangedRegion.getMaxVisibleLineCountBottom())),ae=P.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);this._unchangedRegion.visibleLineCountBottom.set(ie,void 0);const ne=P.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);P.setScrollTop(P.getScrollTop()+(ne-ae))}),W=(0,L.addDisposableListener)(O,\"mouseup\",V=>{if(this._unchangedRegion.isDragged.set(void 0,void 0),!R){const K=P.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);this._unchangedRegion.showMoreBelow(this._options.hideUnchangedRegionsRevealLineCount.get(),void 0);const F=P.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);P.setScrollTop(P.getScrollTop()+(F-K))}this._nodes.bottom.classList.toggle(\"dragging\",!1),this._nodes.root.classList.toggle(\"dragging\",!1),B.dispose(),W.dispose()})})),this._register((0,p.autorun)(N=>{const M=[];if(!this._hide){const R=h.getHiddenModifiedRange(N).length,x=(0,u.localize)(4,null,R),O=(0,L.$)(\"span\",{title:(0,u.localize)(5,null)},x);O.addEventListener(\"dblclick\",V=>{V.button===0&&(V.preventDefault(),this._unchangedRegion.showAll(void 0))}),M.push(O);const B=this._unchangedRegion.getHiddenModifiedRange(N),W=this._modifiedOutlineSource.getBreadcrumbItems(B,N);if(W.length>0){M.push((0,L.$)(\"span\",void 0,\"\\xA0\\xA0|\\xA0\\xA0\"));for(let V=0;V<W.length;V++){const K=W[V],F=r.SymbolKinds.toIcon(K.kind),q=(0,L.h)(\"div.breadcrumb-item\",{style:{display:\"flex\",alignItems:\"center\"}},[(0,k.renderIcon)(F),\"\\xA0\",K.name,...V===W.length-1?[]:[(0,k.renderIcon)(y.Codicon.chevronRight)]]).root;M.push(q),q.onclick=()=>{this._revealModifiedHiddenLine(K.startLineNumber)}}}}(0,L.reset)(this._nodes.others,...M)}))}}}),define(se[43],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ILanguageService=void 0,e.ILanguageService=(0,L.createDecorator)(\"languageService\")}),define(se[121],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IEditorWorkerService=void 0,e.IEditorWorkerService=(0,L.createDecorator)(\"editorWorkerService\")}),define(se[18],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ILanguageFeaturesService=void 0,e.ILanguageFeaturesService=(0,L.createDecorator)(\"ILanguageFeaturesService\")}),define(se[763],oe([1,0,611,18,45]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LanguageFeaturesService=void 0;class E{constructor(){this.referenceProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.renameProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.codeActionProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.definitionProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.typeDefinitionProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.declarationProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.implementationProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentSymbolProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.inlayHintsProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.colorProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.codeLensProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentFormattingEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentRangeFormattingEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.onTypeFormattingEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.signatureHelpProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.hoverProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentHighlightProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.multiDocumentHighlightProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.selectionRangeProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.foldingRangeProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.linkProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.inlineCompletionsProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.completionProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.linkedEditingRangeProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentRangeSemanticTokensProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentSemanticTokensProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentOnDropEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentPasteEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this))}_score(p){var _;return(_=this._notebookTypeResolver)===null||_===void 0?void 0:_.call(this,p)}}e.LanguageFeaturesService=E,(0,y.registerSingleton)(k.ILanguageFeaturesService,E,1)}),define(se[237],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IMarkerDecorationsService=void 0,e.IMarkerDecorationsService=(0,L.createDecorator)(\"markerDecorationsService\")}),define(se[51],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IModelService=void 0,e.IModelService=(0,L.createDecorator)(\"modelService\")}),define(se[68],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ITextModelService=void 0,e.ITextModelService=(0,L.createDecorator)(\"textModelService\")}),define(se[238],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ISemanticTokensStylingService=void 0,e.ISemanticTokensStylingService=(0,L.createDecorator)(\"semanticTokensStylingService\")}),define(se[189],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ITextResourcePropertiesService=e.ITextResourceConfigurationService=void 0,e.ITextResourceConfigurationService=(0,L.createDecorator)(\"textResourceConfigurationService\"),e.ITextResourcePropertiesService=(0,L.createDecorator)(\"textResourcePropertiesService\")}),define(se[764],oe([1,0,45,8,295]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ITreeViewsDnDService=void 0,e.ITreeViewsDnDService=(0,k.createDecorator)(\"treeViewsDndService\"),(0,L.registerSingleton)(e.ITreeViewsDnDService,y.TreeViewsDnDService,1)}),define(se[239],oe([1,0,136,117]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.sortEditsByYieldTo=e.createCombinedWorkspaceEdit=void 0;function y(S,p,_){var v,b,a,i;return(typeof _.insertText==\"string\"?_.insertText===\"\":_.insertText.snippet===\"\")?{edits:(b=(v=_.additionalEdit)===null||v===void 0?void 0:v.edits)!==null&&b!==void 0?b:[]}:{edits:[...p.map(n=>new L.ResourceTextEdit(S,{range:n,text:typeof _.insertText==\"string\"?k.SnippetParser.escape(_.insertText)+\"$0\":_.insertText.snippet,insertAsSnippet:!0})),...(i=(a=_.additionalEdit)===null||a===void 0?void 0:a.edits)!==null&&i!==void 0?i:[]]}}e.createCombinedWorkspaceEdit=y;function E(S){var p;function _(n,t){return\"providerId\"in n&&n.providerId===t.providerId||\"mimeType\"in n&&n.mimeType===t.handledMimeType}const v=new Map;for(const n of S)for(const t of(p=n.yieldTo)!==null&&p!==void 0?p:[])for(const r of S)if(r!==n&&_(t,r)){let u=v.get(n);u||(u=[],v.set(n,u)),u.push(r)}if(!v.size)return Array.from(S);const b=new Set,a=[];function i(n){if(!n.length)return[];const t=n[0];if(a.includes(t))return console.warn(`Yield to cycle detected for ${t.providerId}`),n;if(b.has(t))return i(n.slice(1));let r=[];const u=v.get(t);return u&&(a.push(t),r=i(u),a.pop()),b.add(t),[...r,t,...i(n.slice(1))]}return i(Array.from(S))}e.sortEditsByYieldTo=E}),define(se[765],oe([1,0,93,6,2,35,11,72,36,10,5,102,43,41,94,155,120,217,156,467]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.GhostTextWidget=e.GHOST_TEXT_DESCRIPTION=void 0,e.GHOST_TEXT_DESCRIPTION=\"ghost-text\";let d=class extends y.Disposable{constructor(h,m,C){super(),this.editor=h,this.model=m,this.languageService=C,this.isDisposed=(0,E.observableValue)(this,!1),this.currentTextModel=(0,E.observableFromEvent)(this.editor.onDidChangeModel,()=>this.editor.getModel()),this.uiState=(0,E.derived)(this,w=>{if(this.isDisposed.read(w))return;const D=this.currentTextModel.read(w);if(D!==this.model.targetTextModel.read(w))return;const I=this.model.ghostText.read(w);if(!I)return;const T=I instanceof f.GhostTextReplacement?I.columnRange:void 0,A=[],P=[];function N(B,W){if(P.length>0){const V=P[P.length-1];W&&V.decorations.push(new r.LineDecoration(V.content.length+1,V.content.length+1+B[0].length,W,0)),V.content+=B[0],B=B.slice(1)}for(const V of B)P.push({content:V,decorations:W?[new r.LineDecoration(1,V.length+1,W,0)]:[]})}const M=D.getLineContent(I.lineNumber);let R,x=0;for(const B of I.parts){let W=B.lines;R===void 0?(A.push({column:B.column,text:W[0],preview:B.preview}),W=W.slice(1)):N([M.substring(x,B.column-1)],void 0),W.length>0&&(N(W,e.GHOST_TEXT_DESCRIPTION),R===void 0&&B.column<=M.length&&(R=B.column)),x=B.column-1}R!==void 0&&N([M.substring(x)],void 0);const O=R!==void 0?new c.ColumnRange(R,M.length+1):void 0;return{replacedRange:T,inlineTexts:A,additionalLines:P,hiddenRange:O,lineNumber:I.lineNumber,additionalReservedLineCount:this.model.minReservedLineCount.read(w),targetTextModel:D}}),this.decorations=(0,E.derived)(this,w=>{const D=this.uiState.read(w);if(!D)return[];const I=[];D.replacedRange&&I.push({range:D.replacedRange.toRange(D.lineNumber),options:{inlineClassName:\"inline-completion-text-to-replace\",description:\"GhostTextReplacement\"}}),D.hiddenRange&&I.push({range:D.hiddenRange.toRange(D.lineNumber),options:{inlineClassName:\"ghost-text-hidden\",description:\"ghost-text-hidden\"}});for(const T of D.inlineTexts)I.push({range:b.Range.fromPositions(new v.Position(D.lineNumber,T.column)),options:{description:e.GHOST_TEXT_DESCRIPTION,after:{content:T.text,inlineClassName:T.preview?\"ghost-text-decoration-preview\":\"ghost-text-decoration\",cursorStops:n.InjectedTextCursorStops.Left},showIfCollapsed:!0}});return I}),this.additionalLinesWidget=this._register(new s(this.editor,this.languageService.languageIdCodec,(0,E.derived)(w=>{const D=this.uiState.read(w);return D?{lineNumber:D.lineNumber,additionalLines:D.additionalLines,minReservedLineCount:D.additionalReservedLineCount,targetTextModel:D.targetTextModel}:void 0}))),this._register((0,y.toDisposable)(()=>{this.isDisposed.set(!0,void 0)})),this._register((0,c.applyObservableDecorations)(this.editor,this.decorations))}ownsViewZone(h){return this.additionalLinesWidget.viewZoneId===h}};e.GhostTextWidget=d,e.GhostTextWidget=d=ke([ge(2,i.ILanguageService)],d);class s extends y.Disposable{get viewZoneId(){return this._viewZoneId}constructor(h,m,C){super(),this.editor=h,this.languageIdCodec=m,this.lines=C,this._viewZoneId=void 0,this.editorOptionsChanged=(0,E.observableSignalFromEvent)(\"editorOptionChanged\",k.Event.filter(this.editor.onDidChangeConfiguration,w=>w.hasChanged(33)||w.hasChanged(116)||w.hasChanged(98)||w.hasChanged(93)||w.hasChanged(51)||w.hasChanged(50)||w.hasChanged(66))),this._register((0,E.autorun)(w=>{const D=this.lines.read(w);this.editorOptionsChanged.read(w),D?this.updateLines(D.lineNumber,D.additionalLines,D.minReservedLineCount):this.clear()}))}dispose(){super.dispose(),this.clear()}clear(){this.editor.changeViewZones(h=>{this._viewZoneId&&(h.removeZone(this._viewZoneId),this._viewZoneId=void 0)})}updateLines(h,m,C){const w=this.editor.getModel();if(!w)return;const{tabSize:D}=w.getOptions();this.editor.changeViewZones(I=>{this._viewZoneId&&(I.removeZone(this._viewZoneId),this._viewZoneId=void 0);const T=Math.max(m.length,C);if(T>0){const A=document.createElement(\"div\");l(A,D,m,this.editor.getOptions(),this.languageIdCodec),this._viewZoneId=I.addZone({afterLineNumber:h,heightInLines:T,domNode:A,afterColumnAffinity:1})}})}}function l(g,h,m,C,w){const D=C.get(33),I=C.get(116),T=\"none\",A=C.get(93),P=C.get(51),N=C.get(50),M=C.get(66),R=new a.StringBuilder(1e4);R.appendString('<div class=\"suggest-preview-text\">');for(let B=0,W=m.length;B<W;B++){const V=m[B],K=V.content;R.appendString('<div class=\"view-line'),R.appendString('\" style=\"top:'),R.appendString(String(B*M)),R.appendString('px;width:1000000px;\">');const F=S.isBasicASCII(K),q=S.containsRTL(K),ie=t.LineTokens.createEmpty(K,w);(0,u.renderViewLine)(new u.RenderLineInput(N.isMonospace&&!D,N.canUseHalfwidthRightwardsArrow,K,!1,F,q,0,ie,V.decorations,h,0,N.spaceWidth,N.middotWidth,N.wsmiddotWidth,I,T,A,P!==_.EditorFontLigatures.OFF,null),R),R.appendString(\"</div>\")}R.appendString(\"</div>\"),(0,p.applyFontInfo)(g,N);const x=R.build(),O=o?o.createHTML(x):x;g.innerHTML=O}const o=(0,L.createTrustedTypesPolicy)(\"editorGhostText\",{createHTML:g=>g})}),define(se[137],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IStandaloneThemeService=void 0,e.IStandaloneThemeService=(0,L.createDecorator)(\"themeService\")}),define(se[122],oe([1,0,8,736]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AudioCue=e.SoundSource=e.Sound=e.IAudioCueService=void 0,e.IAudioCueService=(0,L.createDecorator)(\"audioCue\");class y{static register(_){return new y(_.fileName)}constructor(_){this.fileName=_}}e.Sound=y,y.error=y.register({fileName:\"error.mp3\"}),y.warning=y.register({fileName:\"warning.mp3\"}),y.foldedArea=y.register({fileName:\"foldedAreas.mp3\"}),y.break=y.register({fileName:\"break.mp3\"}),y.quickFixes=y.register({fileName:\"quickFixes.mp3\"}),y.taskCompleted=y.register({fileName:\"taskCompleted.mp3\"}),y.taskFailed=y.register({fileName:\"taskFailed.mp3\"}),y.terminalBell=y.register({fileName:\"terminalBell.mp3\"}),y.diffLineInserted=y.register({fileName:\"diffLineInserted.mp3\"}),y.diffLineDeleted=y.register({fileName:\"diffLineDeleted.mp3\"}),y.diffLineModified=y.register({fileName:\"diffLineModified.mp3\"}),y.chatRequestSent=y.register({fileName:\"chatRequestSent.mp3\"}),y.chatResponsePending=y.register({fileName:\"chatResponsePending.mp3\"}),y.chatResponseReceived1=y.register({fileName:\"chatResponseReceived1.mp3\"}),y.chatResponseReceived2=y.register({fileName:\"chatResponseReceived2.mp3\"}),y.chatResponseReceived3=y.register({fileName:\"chatResponseReceived3.mp3\"}),y.chatResponseReceived4=y.register({fileName:\"chatResponseReceived4.mp3\"}),y.clear=y.register({fileName:\"clear.mp3\"}),y.save=y.register({fileName:\"save.mp3\"}),y.format=y.register({fileName:\"format.mp3\"});class E{constructor(_){this.randomOneOf=_}}e.SoundSource=E;class S{static register(_){const v=new E(\"randomOneOf\"in _.sound?_.sound.randomOneOf:[_.sound]),b=new S(v,_.name,_.settingsKey,_.alertSettingsKey,_.alertMessage);return S._audioCues.add(b),b}constructor(_,v,b,a,i){this.sound=_,this.name=v,this.settingsKey=b,this.alertSettingsKey=a,this.alertMessage=i}}e.AudioCue=S,S._audioCues=new Set,S.error=S.register({name:(0,k.localize)(0,null),sound:y.error,settingsKey:\"audioCues.lineHasError\",alertSettingsKey:\"accessibility.alert.error\",alertMessage:(0,k.localize)(1,null)}),S.warning=S.register({name:(0,k.localize)(2,null),sound:y.warning,settingsKey:\"audioCues.lineHasWarning\",alertSettingsKey:\"accessibility.alert.warning\",alertMessage:(0,k.localize)(3,null)}),S.foldedArea=S.register({name:(0,k.localize)(4,null),sound:y.foldedArea,settingsKey:\"audioCues.lineHasFoldedArea\",alertSettingsKey:\"accessibility.alert.foldedArea\",alertMessage:(0,k.localize)(5,null)}),S.break=S.register({name:(0,k.localize)(6,null),sound:y.break,settingsKey:\"audioCues.lineHasBreakpoint\",alertSettingsKey:\"accessibility.alert.breakpoint\",alertMessage:(0,k.localize)(7,null)}),S.inlineSuggestion=S.register({name:(0,k.localize)(8,null),sound:y.quickFixes,settingsKey:\"audioCues.lineHasInlineSuggestion\"}),S.terminalQuickFix=S.register({name:(0,k.localize)(9,null),sound:y.quickFixes,settingsKey:\"audioCues.terminalQuickFix\",alertSettingsKey:\"accessibility.alert.terminalQuickFix\",alertMessage:(0,k.localize)(10,null)}),S.onDebugBreak=S.register({name:(0,k.localize)(11,null),sound:y.break,settingsKey:\"audioCues.onDebugBreak\",alertSettingsKey:\"accessibility.alert.onDebugBreak\",alertMessage:(0,k.localize)(12,null)}),S.noInlayHints=S.register({name:(0,k.localize)(13,null),sound:y.error,settingsKey:\"audioCues.noInlayHints\",alertSettingsKey:\"accessibility.alert.noInlayHints\",alertMessage:(0,k.localize)(14,null)}),S.taskCompleted=S.register({name:(0,k.localize)(15,null),sound:y.taskCompleted,settingsKey:\"audioCues.taskCompleted\",alertSettingsKey:\"accessibility.alert.taskCompleted\",alertMessage:(0,k.localize)(16,null)}),S.taskFailed=S.register({name:(0,k.localize)(17,null),sound:y.taskFailed,settingsKey:\"audioCues.taskFailed\",alertSettingsKey:\"accessibility.alert.taskFailed\",alertMessage:(0,k.localize)(18,null)}),S.terminalCommandFailed=S.register({name:(0,k.localize)(19,null),sound:y.error,settingsKey:\"audioCues.terminalCommandFailed\",alertSettingsKey:\"accessibility.alert.terminalCommandFailed\",alertMessage:(0,k.localize)(20,null)}),S.terminalBell=S.register({name:(0,k.localize)(21,null),sound:y.terminalBell,settingsKey:\"audioCues.terminalBell\",alertSettingsKey:\"accessibility.alert.terminalBell\",alertMessage:(0,k.localize)(22,null)}),S.notebookCellCompleted=S.register({name:(0,k.localize)(23,null),sound:y.taskCompleted,settingsKey:\"audioCues.notebookCellCompleted\",alertSettingsKey:\"accessibility.alert.notebookCellCompleted\",alertMessage:(0,k.localize)(24,null)}),S.notebookCellFailed=S.register({name:(0,k.localize)(25,null),sound:y.taskFailed,settingsKey:\"audioCues.notebookCellFailed\",alertSettingsKey:\"accessibility.alert.notebookCellFailed\",alertMessage:(0,k.localize)(26,null)}),S.diffLineInserted=S.register({name:(0,k.localize)(27,null),sound:y.diffLineInserted,settingsKey:\"audioCues.diffLineInserted\"}),S.diffLineDeleted=S.register({name:(0,k.localize)(28,null),sound:y.diffLineDeleted,settingsKey:\"audioCues.diffLineDeleted\"}),S.diffLineModified=S.register({name:(0,k.localize)(29,null),sound:y.diffLineModified,settingsKey:\"audioCues.diffLineModified\"}),S.chatRequestSent=S.register({name:(0,k.localize)(30,null),sound:y.chatRequestSent,settingsKey:\"audioCues.chatRequestSent\",alertSettingsKey:\"accessibility.alert.chatRequestSent\",alertMessage:(0,k.localize)(31,null)}),S.chatResponseReceived=S.register({name:(0,k.localize)(32,null),settingsKey:\"audioCues.chatResponseReceived\",sound:{randomOneOf:[y.chatResponseReceived1,y.chatResponseReceived2,y.chatResponseReceived3,y.chatResponseReceived4]}}),S.chatResponsePending=S.register({name:(0,k.localize)(33,null),sound:y.chatResponsePending,settingsKey:\"audioCues.chatResponsePending\",alertSettingsKey:\"accessibility.alert.chatResponsePending\",alertMessage:(0,k.localize)(34,null)}),S.clear=S.register({name:(0,k.localize)(35,null),sound:y.clear,settingsKey:\"audioCues.clear\",alertSettingsKey:\"accessibility.alert.clear\",alertMessage:(0,k.localize)(36,null)}),S.save=S.register({name:(0,k.localize)(37,null),sound:y.save,settingsKey:\"audioCues.save\",alertSettingsKey:\"accessibility.alert.save\",alertMessage:(0,k.localize)(38,null)}),S.format=S.register({name:(0,k.localize)(39,null),sound:y.format,settingsKey:\"audioCues.format\",alertSettingsKey:\"accessibility.alert.format\",alertMessage:(0,k.localize)(40,null)})}),define(se[103],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IClipboardService=void 0,e.IClipboardService=(0,L.createDecorator)(\"clipboardService\")}),define(se[25],oe([1,0,6,52,2,66,20,8]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommandsRegistry=e.ICommandService=void 0,e.ICommandService=(0,p.createDecorator)(\"commandService\"),e.CommandsRegistry=new class{constructor(){this._commands=new Map,this._onDidRegisterCommand=new L.Emitter,this.onDidRegisterCommand=this._onDidRegisterCommand.event}registerCommand(_,v){if(!_)throw new Error(\"invalid command\");if(typeof _==\"string\"){if(!v)throw new Error(\"invalid command\");return this.registerCommand({id:_,handler:v})}if(_.metadata&&Array.isArray(_.metadata.args)){const t=[];for(const u of _.metadata.args)t.push(u.constraint);const r=_.handler;_.handler=function(u,...f){return(0,S.validateConstraints)(f,t),r(u,...f)}}const{id:b}=_;let a=this._commands.get(b);a||(a=new E.LinkedList,this._commands.set(b,a));const i=a.unshift(_),n=(0,y.toDisposable)(()=>{i();const t=this._commands.get(b);t?.isEmpty()&&this._commands.delete(b)});return this._onDidRegisterCommand.fire(b),n}registerCommandAlias(_,v){return e.CommandsRegistry.registerCommand(_,(b,...a)=>b.get(e.ICommandService).executeCommand(v,...a))}getCommand(_){const v=this._commands.get(_);if(!(!v||v.isEmpty()))return k.Iterable.first(v)}getCommands(){const _=new Map;for(const v of this._commands.keys()){const b=this.getCommand(v);b&&_.set(v,b)}return _}},e.CommandsRegistry.registerCommand(\"noop\",()=>{})}),define(se[343],oe([1,0,19,12,2,20,22,51,25,18]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getCodeLensModel=e.CodeLensModel=void 0;class b{constructor(){this.lenses=[],this._disposables=new y.DisposableStore}dispose(){this._disposables.dispose()}get isDisposed(){return this._disposables.isDisposed}add(n,t){this._disposables.add(n);for(const r of n.lenses)this.lenses.push({symbol:r,provider:t})}}e.CodeLensModel=b;async function a(i,n,t){const r=i.ordered(n),u=new Map,f=new b,c=r.map(async(d,s)=>{u.set(d,s);try{const l=await Promise.resolve(d.provideCodeLenses(n,t));l&&f.add(l,d)}catch(l){(0,k.onUnexpectedExternalError)(l)}});return await Promise.all(c),f.lenses=f.lenses.sort((d,s)=>d.symbol.range.startLineNumber<s.symbol.range.startLineNumber?-1:d.symbol.range.startLineNumber>s.symbol.range.startLineNumber?1:u.get(d.provider)<u.get(s.provider)?-1:u.get(d.provider)>u.get(s.provider)?1:d.symbol.range.startColumn<s.symbol.range.startColumn?-1:d.symbol.range.startColumn>s.symbol.range.startColumn?1:0),f}e.getCodeLensModel=a,_.CommandsRegistry.registerCommand(\"_executeCodeLensProvider\",function(i,...n){let[t,r]=n;(0,E.assertType)(S.URI.isUri(t)),(0,E.assertType)(typeof r==\"number\"||!r);const{codeLensProvider:u}=i.get(v.ILanguageFeaturesService),f=i.get(p.IModelService).getModel(t);if(!f)throw(0,k.illegalArgument)();const c=[],d=new y.DisposableStore;return a(u,f,L.CancellationToken.None).then(s=>{d.add(s);const l=[];for(const o of s.lenses)r==null||o.symbol.command?c.push(o.symbol):r-- >0&&o.provider.resolveCodeLens&&l.push(Promise.resolve(o.provider.resolveCodeLens(f,o.symbol,L.CancellationToken.None)).then(g=>c.push(g||o.symbol)));return Promise.all(l)}).then(()=>c).finally(()=>{setTimeout(()=>d.dispose(),100)})})}),define(se[766],oe([1,0,13,19,12,2,20,22,5,51,25,18]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getLinks=e.LinksList=e.Link=void 0;class i{constructor(u,f){this._link=u,this._provider=f}toJSON(){return{range:this.range,url:this.url,tooltip:this.tooltip}}get range(){return this._link.range}get url(){return this._link.url}get tooltip(){return this._link.tooltip}async resolve(u){return this._link.url?this._link.url:typeof this._provider.resolveLink==\"function\"?Promise.resolve(this._provider.resolveLink(this._link,u)).then(f=>(this._link=f||this._link,this._link.url?this.resolve(u):Promise.reject(new Error(\"missing\")))):Promise.reject(new Error(\"missing\"))}}e.Link=i;class n{constructor(u){this._disposables=new E.DisposableStore;let f=[];for(const[c,d]of u){const s=c.links.map(l=>new i(l,d));f=n._union(f,s),(0,E.isDisposable)(c)&&this._disposables.add(c)}this.links=f}dispose(){this._disposables.dispose(),this.links.length=0}static _union(u,f){const c=[];let d,s,l,o;for(d=0,l=0,s=u.length,o=f.length;d<s&&l<o;){const g=u[d],h=f[l];if(_.Range.areIntersectingOrTouching(g.range,h.range)){d++;continue}_.Range.compareRangesUsingStarts(g.range,h.range)<0?(c.push(g),d++):(c.push(h),l++)}for(;d<s;d++)c.push(u[d]);for(;l<o;l++)c.push(f[l]);return c}}e.LinksList=n;function t(r,u,f){const c=[],d=r.ordered(u).reverse().map((s,l)=>Promise.resolve(s.provideLinks(u,f)).then(o=>{o&&(c[l]=[o,s])},y.onUnexpectedExternalError));return Promise.all(d).then(()=>{const s=new n((0,L.coalesce)(c));return f.isCancellationRequested?(s.dispose(),new n([])):s})}e.getLinks=t,b.CommandsRegistry.registerCommand(\"_executeLinkProvider\",async(r,...u)=>{let[f,c]=u;(0,S.assertType)(f instanceof p.URI),typeof c!=\"number\"&&(c=0);const{linkProvider:d}=r.get(a.ILanguageFeaturesService),s=r.get(v.IModelService).getModel(f);if(!s)return[];const l=await t(d,s,k.CancellationToken.None);if(!l)return[];for(let g=0;g<Math.min(c,l.links.length);g++)await l.links[g].resolve(k.CancellationToken.None);const o=l.links.slice(0);return l.dispose(),o})}),define(se[344],oe([1,0,19,12,22,51,25,20,615,5,18]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getDocumentRangeSemanticTokens=e.hasDocumentRangeSemanticTokensProvider=e.getDocumentSemanticTokens=e.hasDocumentSemanticTokensProvider=e.DocumentSemanticTokensResult=e.isSemanticTokensEdits=e.isSemanticTokens=void 0;function a(o){return o&&!!o.data}e.isSemanticTokens=a;function i(o){return o&&Array.isArray(o.edits)}e.isSemanticTokensEdits=i;class n{constructor(g,h,m){this.provider=g,this.tokens=h,this.error=m}}e.DocumentSemanticTokensResult=n;function t(o,g){return o.has(g)}e.hasDocumentSemanticTokensProvider=t;function r(o,g){const h=o.orderedGroups(g);return h.length>0?h[0]:[]}async function u(o,g,h,m,C){const w=r(o,g),D=await Promise.all(w.map(async I=>{let T,A=null;try{T=await I.provideDocumentSemanticTokens(g,I===h?m:null,C)}catch(P){A=P,T=null}return(!T||!a(T)&&!i(T))&&(T=null),new n(I,T,A)}));for(const I of D){if(I.error)throw I.error;if(I.tokens)return I}return D.length>0?D[0]:null}e.getDocumentSemanticTokens=u;function f(o,g){const h=o.orderedGroups(g);return h.length>0?h[0]:null}class c{constructor(g,h){this.provider=g,this.tokens=h}}function d(o,g){return o.has(g)}e.hasDocumentRangeSemanticTokensProvider=d;function s(o,g){const h=o.orderedGroups(g);return h.length>0?h[0]:[]}async function l(o,g,h,m){const C=s(o,g),w=await Promise.all(C.map(async D=>{let I;try{I=await D.provideDocumentRangeSemanticTokens(g,h,m)}catch(T){(0,k.onUnexpectedExternalError)(T),I=null}return(!I||!a(I))&&(I=null),new c(D,I)}));for(const D of w)if(D.tokens)return D;return w.length>0?w[0]:null}e.getDocumentRangeSemanticTokens=l,S.CommandsRegistry.registerCommand(\"_provideDocumentSemanticTokensLegend\",async(o,...g)=>{const[h]=g;(0,p.assertType)(h instanceof y.URI);const m=o.get(E.IModelService).getModel(h);if(!m)return;const{documentSemanticTokensProvider:C}=o.get(b.ILanguageFeaturesService),w=f(C,m);return w?w[0].getLegend():o.get(S.ICommandService).executeCommand(\"_provideDocumentRangeSemanticTokensLegend\",h)}),S.CommandsRegistry.registerCommand(\"_provideDocumentSemanticTokens\",async(o,...g)=>{const[h]=g;(0,p.assertType)(h instanceof y.URI);const m=o.get(E.IModelService).getModel(h);if(!m)return;const{documentSemanticTokensProvider:C}=o.get(b.ILanguageFeaturesService);if(!t(C,m))return o.get(S.ICommandService).executeCommand(\"_provideDocumentRangeSemanticTokens\",h,m.getFullModelRange());const w=await u(C,m,null,null,L.CancellationToken.None);if(!w)return;const{provider:D,tokens:I}=w;if(!I||!a(I))return;const T=(0,_.encodeSemanticTokensDto)({id:0,type:\"full\",data:I.data});return I.resultId&&D.releaseDocumentSemanticTokens(I.resultId),T}),S.CommandsRegistry.registerCommand(\"_provideDocumentRangeSemanticTokensLegend\",async(o,...g)=>{const[h,m]=g;(0,p.assertType)(h instanceof y.URI);const C=o.get(E.IModelService).getModel(h);if(!C)return;const{documentRangeSemanticTokensProvider:w}=o.get(b.ILanguageFeaturesService),D=s(w,C);if(D.length===0)return;if(D.length===1)return D[0].getLegend();if(!m||!v.Range.isIRange(m))return console.warn(\"provideDocumentRangeSemanticTokensLegend might be out-of-sync with provideDocumentRangeSemanticTokens unless a range argument is passed in\"),D[0].getLegend();const I=await l(w,C,v.Range.lift(m),L.CancellationToken.None);if(I)return I.provider.getLegend()}),S.CommandsRegistry.registerCommand(\"_provideDocumentRangeSemanticTokens\",async(o,...g)=>{const[h,m]=g;(0,p.assertType)(h instanceof y.URI),(0,p.assertType)(v.Range.isIRange(m));const C=o.get(E.IModelService).getModel(h);if(!C)return;const{documentRangeSemanticTokensProvider:w}=o.get(b.ILanguageFeaturesService),D=await l(w,C,v.Range.lift(m),L.CancellationToken.None);if(!(!D||!D.tokens))return(0,_.encodeSemanticTokensDto)({id:0,type:\"full\",data:D.tokens.data})})}),define(se[27],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getLanguageTagSettingPlainKey=e.getConfigurationValue=e.removeFromValueTree=e.addToValueTree=e.toValuesTree=e.IConfigurationService=void 0,e.IConfigurationService=(0,L.createDecorator)(\"configurationService\");function k(v,b){const a=Object.create(null);for(const i in v)y(a,i,v[i],b);return a}e.toValuesTree=k;function y(v,b,a,i){const n=b.split(\".\"),t=n.pop();let r=v;for(let u=0;u<n.length;u++){const f=n[u];let c=r[f];switch(typeof c){case\"undefined\":c=r[f]=Object.create(null);break;case\"object\":break;default:i(`Ignoring ${b} as ${n.slice(0,u+1).join(\".\")} is ${JSON.stringify(c)}`);return}r=c}if(typeof r==\"object\"&&r!==null)try{r[t]=a}catch{i(`Ignoring ${b} as ${n.join(\".\")} is ${JSON.stringify(r)}`)}else i(`Ignoring ${b} as ${n.join(\".\")} is ${JSON.stringify(r)}`)}e.addToValueTree=y;function E(v,b){const a=b.split(\".\");S(v,a)}e.removeFromValueTree=E;function S(v,b){const a=b.shift();if(b.length===0){delete v[a];return}if(Object.keys(v).indexOf(a)!==-1){const i=v[a];typeof i==\"object\"&&!Array.isArray(i)&&(S(i,b),Object.keys(i).length===0&&delete v[a])}}function p(v,b,a){function i(r,u){let f=r;for(const c of u){if(typeof f!=\"object\"||f===null)return;f=f[c]}return f}const n=b.split(\".\"),t=i(v,n);return typeof t>\"u\"?a:t}e.getConfigurationValue=p;function _(v){return v.replace(/[\\[\\]]/g,\"\")}e.getLanguageTagSettingPlainKey=_}),define(se[345],oe([1,0,2,31,160,313,27]),function(te,e,L,k,y,E,S){\"use strict\";var p;Object.defineProperty(e,\"__esModule\",{value:!0}),e.MonarchTokenizer=void 0;const _=5;class v{static create(d,s){return this._INSTANCE.create(d,s)}constructor(d){this._maxCacheDepth=d,this._entries=Object.create(null)}create(d,s){if(d!==null&&d.depth>=this._maxCacheDepth)return new b(d,s);let l=b.getStackElementId(d);l.length>0&&(l+=\"|\"),l+=s;let o=this._entries[l];return o||(o=new b(d,s),this._entries[l]=o,o)}}v._INSTANCE=new v(_);class b{constructor(d,s){this.parent=d,this.state=s,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(d){let s=\"\";for(;d!==null;)s.length>0&&(s+=\"|\"),s+=d.state,d=d.parent;return s}static _equals(d,s){for(;d!==null&&s!==null;){if(d===s)return!0;if(d.state!==s.state)return!1;d=d.parent,s=s.parent}return d===null&&s===null}equals(d){return b._equals(this,d)}push(d){return v.create(this,d)}pop(){return this.parent}popall(){let d=this;for(;d.parent;)d=d.parent;return d}switchTo(d){return v.create(this.parent,d)}}class a{constructor(d,s){this.languageId=d,this.state=s}equals(d){return this.languageId===d.languageId&&this.state.equals(d.state)}clone(){return this.state.clone()===this.state?this:new a(this.languageId,this.state)}}class i{static create(d,s){return this._INSTANCE.create(d,s)}constructor(d){this._maxCacheDepth=d,this._entries=Object.create(null)}create(d,s){if(s!==null)return new n(d,s);if(d!==null&&d.depth>=this._maxCacheDepth)return new n(d,s);const l=b.getStackElementId(d);let o=this._entries[l];return o||(o=new n(d,null),this._entries[l]=o,o)}}i._INSTANCE=new i(_);class n{constructor(d,s){this.stack=d,this.embeddedLanguageData=s}clone(){return(this.embeddedLanguageData?this.embeddedLanguageData.clone():null)===this.embeddedLanguageData?this:i.create(this.stack,this.embeddedLanguageData)}equals(d){return!(d instanceof n)||!this.stack.equals(d.stack)?!1:this.embeddedLanguageData===null&&d.embeddedLanguageData===null?!0:this.embeddedLanguageData===null||d.embeddedLanguageData===null?!1:this.embeddedLanguageData.equals(d.embeddedLanguageData)}}class t{constructor(){this._tokens=[],this._languageId=null,this._lastTokenType=null,this._lastTokenLanguage=null}enterLanguage(d){this._languageId=d}emit(d,s){this._lastTokenType===s&&this._lastTokenLanguage===this._languageId||(this._lastTokenType=s,this._lastTokenLanguage=this._languageId,this._tokens.push(new k.Token(d,s,this._languageId)))}nestedLanguageTokenize(d,s,l,o){const g=l.languageId,h=l.state,m=k.TokenizationRegistry.get(g);if(!m)return this.enterLanguage(g),this.emit(o,\"\"),h;const C=m.tokenize(d,s,h);if(o!==0)for(const w of C.tokens)this._tokens.push(new k.Token(w.offset+o,w.type,w.language));else this._tokens=this._tokens.concat(C.tokens);return this._lastTokenType=null,this._lastTokenLanguage=null,this._languageId=null,C.endState}finalize(d){return new k.TokenizationResult(this._tokens,d)}}class r{constructor(d,s){this._languageService=d,this._theme=s,this._prependTokens=null,this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0}enterLanguage(d){this._currentLanguageId=this._languageService.languageIdCodec.encodeLanguageId(d)}emit(d,s){const l=this._theme.match(this._currentLanguageId,s)|1024;this._lastTokenMetadata!==l&&(this._lastTokenMetadata=l,this._tokens.push(d),this._tokens.push(l))}static _merge(d,s,l){const o=d!==null?d.length:0,g=s.length,h=l!==null?l.length:0;if(o===0&&g===0&&h===0)return new Uint32Array(0);if(o===0&&g===0)return l;if(g===0&&h===0)return d;const m=new Uint32Array(o+g+h);d!==null&&m.set(d);for(let C=0;C<g;C++)m[o+C]=s[C];return l!==null&&m.set(l,o+g),m}nestedLanguageTokenize(d,s,l,o){const g=l.languageId,h=l.state,m=k.TokenizationRegistry.get(g);if(!m)return this.enterLanguage(g),this.emit(o,\"\"),h;const C=m.tokenizeEncoded(d,s,h);if(o!==0)for(let w=0,D=C.tokens.length;w<D;w+=2)C.tokens[w]+=o;return this._prependTokens=r._merge(this._prependTokens,this._tokens,C.tokens),this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0,C.endState}finalize(d){return new k.EncodedTokenizationResult(r._merge(this._prependTokens,this._tokens,null),d)}}let u=p=class extends L.Disposable{constructor(d,s,l,o,g){super(),this._configurationService=g,this._languageService=d,this._standaloneThemeService=s,this._languageId=l,this._lexer=o,this._embeddedLanguages=Object.create(null),this.embeddedLoaded=Promise.resolve(void 0);let h=!1;this._register(k.TokenizationRegistry.onDidChange(m=>{if(h)return;let C=!1;for(let w=0,D=m.changedLanguages.length;w<D;w++){const I=m.changedLanguages[w];if(this._embeddedLanguages[I]){C=!0;break}}C&&(h=!0,k.TokenizationRegistry.handleChange([this._languageId]),h=!1)})),this._maxTokenizationLineLength=this._configurationService.getValue(\"editor.maxTokenizationLineLength\",{overrideIdentifier:this._languageId}),this._register(this._configurationService.onDidChangeConfiguration(m=>{m.affectsConfiguration(\"editor.maxTokenizationLineLength\")&&(this._maxTokenizationLineLength=this._configurationService.getValue(\"editor.maxTokenizationLineLength\",{overrideIdentifier:this._languageId}))}))}getLoadStatus(){const d=[];for(const s in this._embeddedLanguages){const l=k.TokenizationRegistry.get(s);if(l){if(l instanceof p){const o=l.getLoadStatus();o.loaded===!1&&d.push(o.promise)}continue}k.TokenizationRegistry.isResolved(s)||d.push(k.TokenizationRegistry.getOrCreate(s))}return d.length===0?{loaded:!0}:{loaded:!1,promise:Promise.all(d).then(s=>{})}}getInitialState(){const d=v.create(null,this._lexer.start);return i.create(d,null)}tokenize(d,s,l){if(d.length>=this._maxTokenizationLineLength)return(0,y.nullTokenize)(this._languageId,l);const o=new t,g=this._tokenize(d,s,l,o);return o.finalize(g)}tokenizeEncoded(d,s,l){if(d.length>=this._maxTokenizationLineLength)return(0,y.nullTokenizeEncoded)(this._languageService.languageIdCodec.encodeLanguageId(this._languageId),l);const o=new r(this._languageService,this._standaloneThemeService.getColorTheme().tokenTheme),g=this._tokenize(d,s,l,o);return o.finalize(g)}_tokenize(d,s,l,o){return l.embeddedLanguageData?this._nestedTokenize(d,s,l,0,o):this._myTokenize(d,s,l,0,o)}_findLeavingNestedLanguageOffset(d,s){let l=this._lexer.tokenizer[s.stack.state];if(!l&&(l=E.findRules(this._lexer,s.stack.state),!l))throw E.createError(this._lexer,\"tokenizer state is not defined: \"+s.stack.state);let o=-1,g=!1;for(const h of l){if(!E.isIAction(h.action)||h.action.nextEmbedded!==\"@pop\")continue;g=!0;let m=h.regex;const C=h.regex.source;if(C.substr(0,4)===\"^(?:\"&&C.substr(C.length-1,1)===\")\"){const D=(m.ignoreCase?\"i\":\"\")+(m.unicode?\"u\":\"\");m=new RegExp(C.substr(4,C.length-5),D)}const w=d.search(m);w===-1||w!==0&&h.matchOnlyAtLineStart||(o===-1||w<o)&&(o=w)}if(!g)throw E.createError(this._lexer,'no rule containing nextEmbedded: \"@pop\" in tokenizer embedded state: '+s.stack.state);return o}_nestedTokenize(d,s,l,o,g){const h=this._findLeavingNestedLanguageOffset(d,l);if(h===-1){const w=g.nestedLanguageTokenize(d,s,l.embeddedLanguageData,o);return i.create(l.stack,new a(l.embeddedLanguageData.languageId,w))}const m=d.substring(0,h);m.length>0&&g.nestedLanguageTokenize(m,!1,l.embeddedLanguageData,o);const C=d.substring(h);return this._myTokenize(C,s,l,o+h,g)}_safeRuleName(d){return d?d.name:\"(unknown)\"}_myTokenize(d,s,l,o,g){g.enterLanguage(this._languageId);const h=d.length,m=s&&this._lexer.includeLF?d+`\n`:d,C=m.length;let w=l.embeddedLanguageData,D=l.stack,I=0,T=null,A=!0;for(;A||I<C;){const P=I,N=D.depth,M=T?T.groups.length:0,R=D.state;let x=null,O=null,B=null,W=null,V=null;if(T){x=T.matches;const q=T.groups.shift();O=q.matched,B=q.action,W=T.rule,T.groups.length===0&&(T=null)}else{if(!A&&I>=C)break;A=!1;let q=this._lexer.tokenizer[R];if(!q&&(q=E.findRules(this._lexer,R),!q))throw E.createError(this._lexer,\"tokenizer state is not defined: \"+R);const ie=m.substr(I);for(const ae of q)if((I===0||!ae.matchOnlyAtLineStart)&&(x=ie.match(ae.regex),x)){O=x[0],B=ae.action;break}}if(x||(x=[\"\"],O=\"\"),B||(I<C&&(x=[m.charAt(I)],O=x[0]),B=this._lexer.defaultToken),O===null)break;for(I+=O.length;E.isFuzzyAction(B)&&E.isIAction(B)&&B.test;)B=B.test(O,x,R,I===C);let K=null;if(typeof B==\"string\"||Array.isArray(B))K=B;else if(B.group)K=B.group;else if(B.token!==null&&B.token!==void 0){if(B.tokenSubst?K=E.substituteMatches(this._lexer,B.token,O,x,R):K=B.token,B.nextEmbedded)if(B.nextEmbedded===\"@pop\"){if(!w)throw E.createError(this._lexer,\"cannot pop embedded language if not inside one\");w=null}else{if(w)throw E.createError(this._lexer,\"cannot enter embedded language from within an embedded language\");V=E.substituteMatches(this._lexer,B.nextEmbedded,O,x,R)}if(B.goBack&&(I=Math.max(0,I-B.goBack)),B.switchTo&&typeof B.switchTo==\"string\"){let q=E.substituteMatches(this._lexer,B.switchTo,O,x,R);if(q[0]===\"@\"&&(q=q.substr(1)),E.findRules(this._lexer,q))D=D.switchTo(q);else throw E.createError(this._lexer,\"trying to switch to a state '\"+q+\"' that is undefined in rule: \"+this._safeRuleName(W))}else{if(B.transform&&typeof B.transform==\"function\")throw E.createError(this._lexer,\"action.transform not supported\");if(B.next)if(B.next===\"@push\"){if(D.depth>=this._lexer.maxStack)throw E.createError(this._lexer,\"maximum tokenizer stack size reached: [\"+D.state+\",\"+D.parent.state+\",...]\");D=D.push(R)}else if(B.next===\"@pop\"){if(D.depth<=1)throw E.createError(this._lexer,\"trying to pop an empty stack in rule: \"+this._safeRuleName(W));D=D.pop()}else if(B.next===\"@popall\")D=D.popall();else{let q=E.substituteMatches(this._lexer,B.next,O,x,R);if(q[0]===\"@\"&&(q=q.substr(1)),E.findRules(this._lexer,q))D=D.push(q);else throw E.createError(this._lexer,\"trying to set a next state '\"+q+\"' that is undefined in rule: \"+this._safeRuleName(W))}}B.log&&typeof B.log==\"string\"&&E.log(this._lexer,this._lexer.languageId+\": \"+E.substituteMatches(this._lexer,B.log,O,x,R))}if(K===null)throw E.createError(this._lexer,\"lexer rule has no well-defined action in rule: \"+this._safeRuleName(W));const F=q=>{const ie=this._languageService.getLanguageIdByLanguageName(q)||this._languageService.getLanguageIdByMimeType(q)||q,ae=this._getNestedEmbeddedLanguageData(ie);if(I<C){const ne=d.substr(I);return this._nestedTokenize(ne,s,i.create(D,ae),o+I,g)}else return i.create(D,ae)};if(Array.isArray(K)){if(T&&T.groups.length>0)throw E.createError(this._lexer,\"groups cannot be nested: \"+this._safeRuleName(W));if(x.length!==K.length+1)throw E.createError(this._lexer,\"matched number of groups does not match the number of actions in rule: \"+this._safeRuleName(W));let q=0;for(let ie=1;ie<x.length;ie++)q+=x[ie].length;if(q!==O.length)throw E.createError(this._lexer,\"with groups, all characters should be matched in consecutive groups in rule: \"+this._safeRuleName(W));T={rule:W,matches:x,groups:[]};for(let ie=0;ie<K.length;ie++)T.groups[ie]={action:K[ie],matched:x[ie+1]};I-=O.length;continue}else{if(K===\"@rematch\"&&(I-=O.length,O=\"\",x=null,K=\"\",V!==null))return F(V);if(O.length===0){if(C===0||N!==D.depth||R!==D.state||(T?T.groups.length:0)!==M)continue;throw E.createError(this._lexer,\"no progress in tokenizer in rule: \"+this._safeRuleName(W))}let q=null;if(E.isString(K)&&K.indexOf(\"@brackets\")===0){const ie=K.substr(9),ae=f(this._lexer,O);if(!ae)throw E.createError(this._lexer,\"@brackets token returned but no bracket defined as: \"+O);q=E.sanitize(ae.token+ie)}else{const ie=K===\"\"?\"\":K+this._lexer.tokenPostfix;q=E.sanitize(ie)}P<h&&g.emit(P+o,q)}if(V!==null)return F(V)}return i.create(D,w)}_getNestedEmbeddedLanguageData(d){if(!this._languageService.isRegisteredLanguageId(d))return new a(d,y.NullState);d!==this._languageId&&(this._languageService.requestBasicLanguageFeatures(d),k.TokenizationRegistry.getOrCreate(d),this._embeddedLanguages[d]=!0);const s=k.TokenizationRegistry.get(d);return s?new a(d,s.getInitialState()):new a(d,y.NullState)}};e.MonarchTokenizer=u,e.MonarchTokenizer=u=p=ke([ge(4,S.IConfigurationService)],u);function f(c,d){if(!d)return null;d=E.fixCase(c,d);const s=c.brackets;for(const l of s){if(l.open===d)return{token:l.token,bracketType:1};if(l.close===d)return{token:l.token,bracketType:-1}}return null}}),define(se[767],oe([1,0,93,11,31,94,120,86,345]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Colorizer=void 0;const v=(0,L.createTrustedTypesPolicy)(\"standaloneColorizer\",{createHTML:t=>t});class b{static colorizeElement(r,u,f,c){c=c||{};const d=c.theme||\"vs\",s=c.mimeType||f.getAttribute(\"lang\")||f.getAttribute(\"data-lang\");if(!s)return console.error(\"Mode not detected\"),Promise.resolve();const l=u.getLanguageIdByMimeType(s)||s;r.setTheme(d);const o=f.firstChild?f.firstChild.nodeValue:\"\";f.className+=\" \"+d;const g=h=>{var m;const C=(m=v?.createHTML(h))!==null&&m!==void 0?m:h;f.innerHTML=C};return this.colorize(u,o||\"\",l,c).then(g,h=>console.error(h))}static async colorize(r,u,f,c){const d=r.languageIdCodec;let s=4;c&&typeof c.tabSize==\"number\"&&(s=c.tabSize),k.startsWithUTF8BOM(u)&&(u=u.substr(1));const l=k.splitLines(u);if(!r.isRegisteredLanguageId(f))return i(l,s,d);const o=await y.TokenizationRegistry.getOrCreate(f);return o?a(l,s,o,d):i(l,s,d)}static colorizeLine(r,u,f,c,d=4){const s=p.ViewLineRenderingData.isBasicASCII(r,u),l=p.ViewLineRenderingData.containsRTL(r,s,f);return(0,S.renderViewLine2)(new S.RenderLineInput(!1,!0,r,!1,s,l,0,c,[],d,0,0,0,0,-1,\"none\",!1,!1,null)).html}static colorizeModelLine(r,u,f=4){const c=r.getLineContent(u);r.tokenization.forceTokenization(u);const s=r.tokenization.getLineTokens(u).inflate();return this.colorizeLine(c,r.mightContainNonBasicASCII(),r.mightContainRTL(),s,f)}}e.Colorizer=b;function a(t,r,u,f){return new Promise((c,d)=>{const s=()=>{const l=n(t,r,u,f);if(u instanceof _.MonarchTokenizer){const o=u.getLoadStatus();if(o.loaded===!1){o.promise.then(s,d);return}}c(l)};s()})}function i(t,r,u){let f=[];const d=new Uint32Array(2);d[0]=0,d[1]=33587200;for(let s=0,l=t.length;s<l;s++){const o=t[s];d[0]=o.length;const g=new E.LineTokens(d,o,u),h=p.ViewLineRenderingData.isBasicASCII(o,!0),m=p.ViewLineRenderingData.containsRTL(o,h,!0),C=(0,S.renderViewLine2)(new S.RenderLineInput(!1,!0,o,!1,h,m,0,g,[],r,0,0,0,0,-1,\"none\",!1,!1,null));f=f.concat(C.html),f.push(\"<br/>\")}return f.join(\"\")}function n(t,r,u,f){let c=[],d=u.getInitialState();for(let s=0,l=t.length;s<l;s++){const o=t[s],g=u.tokenizeEncoded(o,!0,d);E.LineTokens.convertToEndOffset(g.tokens,o.length);const h=new E.LineTokens(g.tokens,o,f),m=p.ViewLineRenderingData.isBasicASCII(o,!0),C=p.ViewLineRenderingData.containsRTL(o,m,!0),w=(0,S.renderViewLine2)(new S.RenderLineInput(!1,!0,o,!1,m,C,0,h.inflate(),[],r,0,0,0,0,-1,\"none\",!1,!1,null));c=c.concat(w.html),c.push(\"<br/>\"),d=g.endState}return c.join(\"\")}}),define(se[15],oe([1,0,17,11,758,8,739]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.implies=e.IContextKeyService=e.RawContextKey=e.ContextKeyOrExpr=e.ContextKeyAndExpr=e.ContextKeyNotRegexExpr=e.ContextKeyRegexExpr=e.ContextKeySmallerEqualsExpr=e.ContextKeySmallerExpr=e.ContextKeyGreaterEqualsExpr=e.ContextKeyGreaterExpr=e.ContextKeyNotExpr=e.ContextKeyNotEqualsExpr=e.ContextKeyNotInExpr=e.ContextKeyInExpr=e.ContextKeyEqualsExpr=e.ContextKeyDefinedExpr=e.ContextKeyTrueExpr=e.ContextKeyFalseExpr=e.expressionsAreEqualWithConstantSubstitution=e.ContextKeyExpr=e.Parser=void 0;const p=new Map;p.set(\"false\",!1),p.set(\"true\",!0),p.set(\"isMac\",L.isMacintosh),p.set(\"isLinux\",L.isLinux),p.set(\"isWindows\",L.isWindows),p.set(\"isWeb\",L.isWeb),p.set(\"isMacNative\",L.isMacintosh&&!L.isWeb),p.set(\"isEdge\",L.isEdge),p.set(\"isFirefox\",L.isFirefox),p.set(\"isChrome\",L.isChrome),p.set(\"isSafari\",L.isSafari);const _=Object.prototype.hasOwnProperty,v={regexParsingWithErrorRecovery:!0},b=(0,S.localize)(0,null),a=(0,S.localize)(1,null),i=(0,S.localize)(2,null),n=(0,S.localize)(3,null),t=(0,S.localize)(4,null),r=(0,S.localize)(5,null),u=(0,S.localize)(6,null),f=(0,S.localize)(7,null);class c{constructor($=v){this._config=$,this._scanner=new y.Scanner,this._tokens=[],this._current=0,this._parsingErrors=[],this._flagsGYRe=/g|y/g}parse($){if($===\"\"){this._parsingErrors.push({message:b,offset:0,lexeme:\"\",additionalInfo:a});return}this._tokens=this._scanner.reset($).scan(),this._current=0,this._parsingErrors=[];try{const J=this._expr();if(!this._isAtEnd()){const Q=this._peek(),re=Q.type===17?r:void 0;throw this._parsingErrors.push({message:t,offset:Q.offset,lexeme:y.Scanner.getLexeme(Q),additionalInfo:re}),c._parseError}return J}catch(J){if(J!==c._parseError)throw J;return}}_expr(){return this._or()}_or(){const $=[this._and()];for(;this._matchOne(16);){const J=this._and();$.push(J)}return $.length===1?$[0]:d.or(...$)}_and(){const $=[this._term()];for(;this._matchOne(15);){const J=this._term();$.push(J)}return $.length===1?$[0]:d.and(...$)}_term(){if(this._matchOne(2)){const $=this._peek();switch($.type){case 11:return this._advance(),o.INSTANCE;case 12:return this._advance(),g.INSTANCE;case 0:{this._advance();const J=this._expr();return this._consume(1,n),J?.negate()}case 17:return this._advance(),I.create($.lexeme);default:throw this._errExpectedButGot(\"KEY | true | false | '(' expression ')'\",$)}}return this._primary()}_primary(){const $=this._peek();switch($.type){case 11:return this._advance(),d.true();case 12:return this._advance(),d.false();case 0:{this._advance();const J=this._expr();return this._consume(1,n),J}case 17:{const J=$.lexeme;if(this._advance(),this._matchOne(9)){const re=this._peek();if(!this._config.regexParsingWithErrorRecovery){if(this._advance(),re.type!==10)throw this._errExpectedButGot(\"REGEX\",re);const de=re.lexeme,he=de.lastIndexOf(\"/\"),me=he===de.length-1?void 0:this._removeFlagsGY(de.substring(he+1));let X;try{X=new RegExp(de.substring(1,he),me)}catch{throw this._errExpectedButGot(\"REGEX\",re)}return R.create(J,X)}switch(re.type){case 10:case 19:{const de=[re.lexeme];this._advance();let he=this._peek(),me=0;for(let H=0;H<re.lexeme.length;H++)re.lexeme.charCodeAt(H)===40?me++:re.lexeme.charCodeAt(H)===41&&me--;for(;!this._isAtEnd()&&he.type!==15&&he.type!==16;){switch(he.type){case 0:me++;break;case 1:me--;break;case 10:case 18:for(let H=0;H<he.lexeme.length;H++)he.lexeme.charCodeAt(H)===40?me++:re.lexeme.charCodeAt(H)===41&&me--}if(me<0)break;de.push(y.Scanner.getLexeme(he)),this._advance(),he=this._peek()}const X=de.join(\"\"),U=X.lastIndexOf(\"/\"),G=U===X.length-1?void 0:this._removeFlagsGY(X.substring(U+1));let z;try{z=new RegExp(X.substring(1,U),G)}catch{throw this._errExpectedButGot(\"REGEX\",re)}return d.regex(J,z)}case 18:{const de=re.lexeme;this._advance();let he=null;if(!(0,k.isFalsyOrWhitespace)(de)){const me=de.indexOf(\"/\"),X=de.lastIndexOf(\"/\");if(me!==X&&me>=0){const U=de.slice(me+1,X),G=de[X+1]===\"i\"?\"i\":\"\";try{he=new RegExp(U,G)}catch{throw this._errExpectedButGot(\"REGEX\",re)}}}if(he===null)throw this._errExpectedButGot(\"REGEX\",re);return R.create(J,he)}default:throw this._errExpectedButGot(\"REGEX\",this._peek())}}if(this._matchOne(14)){this._consume(13,i);const re=this._value();return d.notIn(J,re)}switch(this._peek().type){case 3:{this._advance();const re=this._value();if(this._previous().type===18)return d.equals(J,re);switch(re){case\"true\":return d.has(J);case\"false\":return d.not(J);default:return d.equals(J,re)}}case 4:{this._advance();const re=this._value();if(this._previous().type===18)return d.notEquals(J,re);switch(re){case\"true\":return d.not(J);case\"false\":return d.has(J);default:return d.notEquals(J,re)}}case 5:return this._advance(),N.create(J,this._value());case 6:return this._advance(),M.create(J,this._value());case 7:return this._advance(),A.create(J,this._value());case 8:return this._advance(),P.create(J,this._value());case 13:return this._advance(),d.in(J,this._value());default:return d.has(J)}}case 20:throw this._parsingErrors.push({message:u,offset:$.offset,lexeme:\"\",additionalInfo:f}),c._parseError;default:throw this._errExpectedButGot(`true | false | KEY \n\t| KEY '=~' REGEX \n\t| KEY ('==' | '!=' | '<' | '<=' | '>' | '>=' | 'in' | 'not' 'in') value`,this._peek())}}_value(){const $=this._peek();switch($.type){case 17:case 18:return this._advance(),$.lexeme;case 11:return this._advance(),\"true\";case 12:return this._advance(),\"false\";case 13:return this._advance(),\"in\";default:return\"\"}}_removeFlagsGY($){return $.replaceAll(this._flagsGYRe,\"\")}_previous(){return this._tokens[this._current-1]}_matchOne($){return this._check($)?(this._advance(),!0):!1}_advance(){return this._isAtEnd()||this._current++,this._previous()}_consume($,J){if(this._check($))return this._advance();throw this._errExpectedButGot(J,this._peek())}_errExpectedButGot($,J,Q){const re=(0,S.localize)(8,null,$,y.Scanner.getLexeme(J)),de=J.offset,he=y.Scanner.getLexeme(J);return this._parsingErrors.push({message:re,offset:de,lexeme:he,additionalInfo:Q}),c._parseError}_check($){return this._peek().type===$}_peek(){return this._tokens[this._current]}_isAtEnd(){return this._peek().type===20}}e.Parser=c,c._parseError=new Error;class d{static false(){return o.INSTANCE}static true(){return g.INSTANCE}static has($){return h.create($)}static equals($,J){return m.create($,J)}static notEquals($,J){return D.create($,J)}static regex($,J){return R.create($,J)}static in($,J){return C.create($,J)}static notIn($,J){return w.create($,J)}static not($){return I.create($)}static and(...$){return B.create($,null,!0)}static or(...$){return W.create($,null,!0)}static deserialize($){return $==null?void 0:this._parser.parse($)}}e.ContextKeyExpr=d,d._parser=new c({regexParsingWithErrorRecovery:!1});function s(ne,$){const J=ne?ne.substituteConstants():void 0,Q=$?$.substituteConstants():void 0;return!J&&!Q?!0:!J||!Q?!1:J.equals(Q)}e.expressionsAreEqualWithConstantSubstitution=s;function l(ne,$){return ne.cmp($)}class o{constructor(){this.type=0}cmp($){return this.type-$.type}equals($){return $.type===this.type}substituteConstants(){return this}evaluate($){return!1}serialize(){return\"false\"}keys(){return[]}negate(){return g.INSTANCE}}e.ContextKeyFalseExpr=o,o.INSTANCE=new o;class g{constructor(){this.type=1}cmp($){return this.type-$.type}equals($){return $.type===this.type}substituteConstants(){return this}evaluate($){return!0}serialize(){return\"true\"}keys(){return[]}negate(){return o.INSTANCE}}e.ContextKeyTrueExpr=g,g.INSTANCE=new g;class h{static create($,J=null){const Q=p.get($);return typeof Q==\"boolean\"?Q?g.INSTANCE:o.INSTANCE:new h($,J)}constructor($,J){this.key=$,this.negated=J,this.type=2}cmp($){return $.type!==this.type?this.type-$.type:K(this.key,$.key)}equals($){return $.type===this.type?this.key===$.key:!1}substituteConstants(){const $=p.get(this.key);return typeof $==\"boolean\"?$?g.INSTANCE:o.INSTANCE:this}evaluate($){return!!$.getValue(this.key)}serialize(){return this.key}keys(){return[this.key]}negate(){return this.negated||(this.negated=I.create(this.key,this)),this.negated}}e.ContextKeyDefinedExpr=h;class m{static create($,J,Q=null){if(typeof J==\"boolean\")return J?h.create($,Q):I.create($,Q);const re=p.get($);return typeof re==\"boolean\"?J===(re?\"true\":\"false\")?g.INSTANCE:o.INSTANCE:new m($,J,Q)}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=4}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){const $=p.get(this.key);if(typeof $==\"boolean\"){const J=$?\"true\":\"false\";return this.value===J?g.INSTANCE:o.INSTANCE}return this}evaluate($){return $.getValue(this.key)==this.value}serialize(){return`${this.key} == '${this.value}'`}keys(){return[this.key]}negate(){return this.negated||(this.negated=D.create(this.key,this.value,this)),this.negated}}e.ContextKeyEqualsExpr=m;class C{static create($,J){return new C($,J)}constructor($,J){this.key=$,this.valueKey=J,this.type=10,this.negated=null}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.valueKey,$.key,$.valueKey)}equals($){return $.type===this.type?this.key===$.key&&this.valueKey===$.valueKey:!1}substituteConstants(){return this}evaluate($){const J=$.getValue(this.valueKey),Q=$.getValue(this.key);return Array.isArray(J)?J.includes(Q):typeof Q==\"string\"&&typeof J==\"object\"&&J!==null?_.call(J,Q):!1}serialize(){return`${this.key} in '${this.valueKey}'`}keys(){return[this.key,this.valueKey]}negate(){return this.negated||(this.negated=w.create(this.key,this.valueKey)),this.negated}}e.ContextKeyInExpr=C;class w{static create($,J){return new w($,J)}constructor($,J){this.key=$,this.valueKey=J,this.type=11,this._negated=C.create($,J)}cmp($){return $.type!==this.type?this.type-$.type:this._negated.cmp($._negated)}equals($){return $.type===this.type?this._negated.equals($._negated):!1}substituteConstants(){return this}evaluate($){return!this._negated.evaluate($)}serialize(){return`${this.key} not in '${this.valueKey}'`}keys(){return this._negated.keys()}negate(){return this._negated}}e.ContextKeyNotInExpr=w;class D{static create($,J,Q=null){if(typeof J==\"boolean\")return J?I.create($,Q):h.create($,Q);const re=p.get($);return typeof re==\"boolean\"?J===(re?\"true\":\"false\")?o.INSTANCE:g.INSTANCE:new D($,J,Q)}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=5}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){const $=p.get(this.key);if(typeof $==\"boolean\"){const J=$?\"true\":\"false\";return this.value===J?o.INSTANCE:g.INSTANCE}return this}evaluate($){return $.getValue(this.key)!=this.value}serialize(){return`${this.key} != '${this.value}'`}keys(){return[this.key]}negate(){return this.negated||(this.negated=m.create(this.key,this.value,this)),this.negated}}e.ContextKeyNotEqualsExpr=D;class I{static create($,J=null){const Q=p.get($);return typeof Q==\"boolean\"?Q?o.INSTANCE:g.INSTANCE:new I($,J)}constructor($,J){this.key=$,this.negated=J,this.type=3}cmp($){return $.type!==this.type?this.type-$.type:K(this.key,$.key)}equals($){return $.type===this.type?this.key===$.key:!1}substituteConstants(){const $=p.get(this.key);return typeof $==\"boolean\"?$?o.INSTANCE:g.INSTANCE:this}evaluate($){return!$.getValue(this.key)}serialize(){return`!${this.key}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=h.create(this.key,this)),this.negated}}e.ContextKeyNotExpr=I;function T(ne,$){if(typeof ne==\"string\"){const J=parseFloat(ne);isNaN(J)||(ne=J)}return typeof ne==\"string\"||typeof ne==\"number\"?$(ne):o.INSTANCE}class A{static create($,J,Q=null){return T(J,re=>new A($,re,Q))}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=12}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){return this}evaluate($){return typeof this.value==\"string\"?!1:parseFloat($.getValue(this.key))>this.value}serialize(){return`${this.key} > ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=M.create(this.key,this.value,this)),this.negated}}e.ContextKeyGreaterExpr=A;class P{static create($,J,Q=null){return T(J,re=>new P($,re,Q))}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=13}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){return this}evaluate($){return typeof this.value==\"string\"?!1:parseFloat($.getValue(this.key))>=this.value}serialize(){return`${this.key} >= ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=N.create(this.key,this.value,this)),this.negated}}e.ContextKeyGreaterEqualsExpr=P;class N{static create($,J,Q=null){return T(J,re=>new N($,re,Q))}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=14}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){return this}evaluate($){return typeof this.value==\"string\"?!1:parseFloat($.getValue(this.key))<this.value}serialize(){return`${this.key} < ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=P.create(this.key,this.value,this)),this.negated}}e.ContextKeySmallerExpr=N;class M{static create($,J,Q=null){return T(J,re=>new M($,re,Q))}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=15}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){return this}evaluate($){return typeof this.value==\"string\"?!1:parseFloat($.getValue(this.key))<=this.value}serialize(){return`${this.key} <= ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=A.create(this.key,this.value,this)),this.negated}}e.ContextKeySmallerEqualsExpr=M;class R{static create($,J){return new R($,J)}constructor($,J){this.key=$,this.regexp=J,this.type=7,this.negated=null}cmp($){if($.type!==this.type)return this.type-$.type;if(this.key<$.key)return-1;if(this.key>$.key)return 1;const J=this.regexp?this.regexp.source:\"\",Q=$.regexp?$.regexp.source:\"\";return J<Q?-1:J>Q?1:0}equals($){if($.type===this.type){const J=this.regexp?this.regexp.source:\"\",Q=$.regexp?$.regexp.source:\"\";return this.key===$.key&&J===Q}return!1}substituteConstants(){return this}evaluate($){const J=$.getValue(this.key);return this.regexp?this.regexp.test(J):!1}serialize(){const $=this.regexp?`/${this.regexp.source}/${this.regexp.flags}`:\"/invalid/\";return`${this.key} =~ ${$}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=x.create(this)),this.negated}}e.ContextKeyRegexExpr=R;class x{static create($){return new x($)}constructor($){this._actual=$,this.type=8}cmp($){return $.type!==this.type?this.type-$.type:this._actual.cmp($._actual)}equals($){return $.type===this.type?this._actual.equals($._actual):!1}substituteConstants(){return this}evaluate($){return!this._actual.evaluate($)}serialize(){return`!(${this._actual.serialize()})`}keys(){return this._actual.keys()}negate(){return this._actual}}e.ContextKeyNotRegexExpr=x;function O(ne){let $=null;for(let J=0,Q=ne.length;J<Q;J++){const re=ne[J].substituteConstants();if(ne[J]!==re&&$===null){$=[];for(let de=0;de<J;de++)$[de]=ne[de]}$!==null&&($[J]=re)}return $===null?ne:$}class B{static create($,J,Q){return B._normalizeArr($,J,Q)}constructor($,J){this.expr=$,this.negated=J,this.type=6}cmp($){if($.type!==this.type)return this.type-$.type;if(this.expr.length<$.expr.length)return-1;if(this.expr.length>$.expr.length)return 1;for(let J=0,Q=this.expr.length;J<Q;J++){const re=l(this.expr[J],$.expr[J]);if(re!==0)return re}return 0}equals($){if($.type===this.type){if(this.expr.length!==$.expr.length)return!1;for(let J=0,Q=this.expr.length;J<Q;J++)if(!this.expr[J].equals($.expr[J]))return!1;return!0}return!1}substituteConstants(){const $=O(this.expr);return $===this.expr?this:B.create($,this.negated,!1)}evaluate($){for(let J=0,Q=this.expr.length;J<Q;J++)if(!this.expr[J].evaluate($))return!1;return!0}static _normalizeArr($,J,Q){const re=[];let de=!1;for(const he of $)if(he){if(he.type===1){de=!0;continue}if(he.type===0)return o.INSTANCE;if(he.type===6){re.push(...he.expr);continue}re.push(he)}if(re.length===0&&de)return g.INSTANCE;if(re.length!==0){if(re.length===1)return re[0];re.sort(l);for(let he=1;he<re.length;he++)re[he-1].equals(re[he])&&(re.splice(he,1),he--);if(re.length===1)return re[0];for(;re.length>1;){const he=re[re.length-1];if(he.type!==9)break;re.pop();const me=re.pop(),X=re.length===0,U=W.create(he.expr.map(G=>B.create([G,me],null,Q)),null,X);U&&(re.push(U),re.sort(l))}if(re.length===1)return re[0];if(Q){for(let he=0;he<re.length;he++)for(let me=he+1;me<re.length;me++)if(re[he].negate().equals(re[me]))return o.INSTANCE;if(re.length===1)return re[0]}return new B(re,J)}}serialize(){return this.expr.map($=>$.serialize()).join(\" && \")}keys(){const $=[];for(const J of this.expr)$.push(...J.keys());return $}negate(){if(!this.negated){const $=[];for(const J of this.expr)$.push(J.negate());this.negated=W.create($,this,!0)}return this.negated}}e.ContextKeyAndExpr=B;class W{static create($,J,Q){return W._normalizeArr($,J,Q)}constructor($,J){this.expr=$,this.negated=J,this.type=9}cmp($){if($.type!==this.type)return this.type-$.type;if(this.expr.length<$.expr.length)return-1;if(this.expr.length>$.expr.length)return 1;for(let J=0,Q=this.expr.length;J<Q;J++){const re=l(this.expr[J],$.expr[J]);if(re!==0)return re}return 0}equals($){if($.type===this.type){if(this.expr.length!==$.expr.length)return!1;for(let J=0,Q=this.expr.length;J<Q;J++)if(!this.expr[J].equals($.expr[J]))return!1;return!0}return!1}substituteConstants(){const $=O(this.expr);return $===this.expr?this:W.create($,this.negated,!1)}evaluate($){for(let J=0,Q=this.expr.length;J<Q;J++)if(this.expr[J].evaluate($))return!0;return!1}static _normalizeArr($,J,Q){let re=[],de=!1;if($){for(let he=0,me=$.length;he<me;he++){const X=$[he];if(X){if(X.type===0){de=!0;continue}if(X.type===1)return g.INSTANCE;if(X.type===9){re=re.concat(X.expr);continue}re.push(X)}}if(re.length===0&&de)return o.INSTANCE;re.sort(l)}if(re.length!==0){if(re.length===1)return re[0];for(let he=1;he<re.length;he++)re[he-1].equals(re[he])&&(re.splice(he,1),he--);if(re.length===1)return re[0];if(Q){for(let he=0;he<re.length;he++)for(let me=he+1;me<re.length;me++)if(re[he].negate().equals(re[me]))return g.INSTANCE;if(re.length===1)return re[0]}return new W(re,J)}}serialize(){return this.expr.map($=>$.serialize()).join(\" || \")}keys(){const $=[];for(const J of this.expr)$.push(...J.keys());return $}negate(){if(!this.negated){const $=[];for(const J of this.expr)$.push(J.negate());for(;$.length>1;){const J=$.shift(),Q=$.shift(),re=[];for(const de of ae(J))for(const he of ae(Q))re.push(B.create([de,he],null,!1));$.unshift(W.create(re,null,!1))}this.negated=W.create($,this,!0)}return this.negated}}e.ContextKeyOrExpr=W;class V extends h{static all(){return V._info.values()}constructor($,J,Q){super($,null),this._defaultValue=J,typeof Q==\"object\"?V._info.push({...Q,key:$}):Q!==!0&&V._info.push({key:$,description:Q,type:J!=null?typeof J:void 0})}bindTo($){return $.createKey(this.key,this._defaultValue)}getValue($){return $.getContextKeyValue(this.key)}toNegated(){return this.negate()}isEqualTo($){return m.create(this.key,$)}}e.RawContextKey=V,V._info=[],e.IContextKeyService=(0,E.createDecorator)(\"contextKeyService\");function K(ne,$){return ne<$?-1:ne>$?1:0}function F(ne,$,J,Q){return ne<J?-1:ne>J?1:$<Q?-1:$>Q?1:0}function q(ne,$){if(ne.type===0||$.type===1)return!0;if(ne.type===9)return $.type===9?ie(ne.expr,$.expr):!1;if($.type===9){for(const J of $.expr)if(q(ne,J))return!0;return!1}if(ne.type===6){if($.type===6)return ie($.expr,ne.expr);for(const J of ne.expr)if(q(J,$))return!0;return!1}return ne.equals($)}e.implies=q;function ie(ne,$){let J=0,Q=0;for(;J<ne.length&&Q<$.length;){const re=ne[J].cmp($[Q]);if(re<0)return!1;re===0&&J++,Q++}return J===ne.length}function ae(ne){return ne.type===9?ne.expr:[ne]}}),define(se[21],oe([1,0,639,15]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorContextKeys=void 0;var y;(function(E){E.editorSimpleInput=new k.RawContextKey(\"editorSimpleInput\",!1,!0),E.editorTextFocus=new k.RawContextKey(\"editorTextFocus\",!1,L.localize(0,null)),E.focus=new k.RawContextKey(\"editorFocus\",!1,L.localize(1,null)),E.textInputFocus=new k.RawContextKey(\"textInputFocus\",!1,L.localize(2,null)),E.readOnly=new k.RawContextKey(\"editorReadonly\",!1,L.localize(3,null)),E.inDiffEditor=new k.RawContextKey(\"inDiffEditor\",!1,L.localize(4,null)),E.isEmbeddedDiffEditor=new k.RawContextKey(\"isEmbeddedDiffEditor\",!1,L.localize(5,null)),E.inMultiDiffEditor=new k.RawContextKey(\"inMultiDiffEditor\",!1,L.localize(6,null)),E.multiDiffEditorAllCollapsed=new k.RawContextKey(\"multiDiffEditorAllCollapsed\",void 0,L.localize(7,null)),E.hasChanges=new k.RawContextKey(\"diffEditorHasChanges\",!1,L.localize(8,null)),E.comparingMovedCode=new k.RawContextKey(\"comparingMovedCode\",!1,L.localize(9,null)),E.accessibleDiffViewerVisible=new k.RawContextKey(\"accessibleDiffViewerVisible\",!1,L.localize(10,null)),E.diffEditorRenderSideBySideInlineBreakpointReached=new k.RawContextKey(\"diffEditorRenderSideBySideInlineBreakpointReached\",!1,L.localize(11,null)),E.columnSelection=new k.RawContextKey(\"editorColumnSelection\",!1,L.localize(12,null)),E.writable=E.readOnly.toNegated(),E.hasNonEmptySelection=new k.RawContextKey(\"editorHasSelection\",!1,L.localize(13,null)),E.hasOnlyEmptySelection=E.hasNonEmptySelection.toNegated(),E.hasMultipleSelections=new k.RawContextKey(\"editorHasMultipleSelections\",!1,L.localize(14,null)),E.hasSingleSelection=E.hasMultipleSelections.toNegated(),E.tabMovesFocus=new k.RawContextKey(\"editorTabMovesFocus\",!1,L.localize(15,null)),E.tabDoesNotMoveFocus=E.tabMovesFocus.toNegated(),E.isInWalkThroughSnippet=new k.RawContextKey(\"isInEmbeddedEditor\",!1,!0),E.canUndo=new k.RawContextKey(\"canUndo\",!1,!0),E.canRedo=new k.RawContextKey(\"canRedo\",!1,!0),E.hoverVisible=new k.RawContextKey(\"editorHoverVisible\",!1,L.localize(16,null)),E.hoverFocused=new k.RawContextKey(\"editorHoverFocused\",!1,L.localize(17,null)),E.stickyScrollFocused=new k.RawContextKey(\"stickyScrollFocused\",!1,L.localize(18,null)),E.stickyScrollVisible=new k.RawContextKey(\"stickyScrollVisible\",!1,L.localize(19,null)),E.standaloneColorPickerVisible=new k.RawContextKey(\"standaloneColorPickerVisible\",!1,L.localize(20,null)),E.standaloneColorPickerFocused=new k.RawContextKey(\"standaloneColorPickerFocused\",!1,L.localize(21,null)),E.inCompositeEditor=new k.RawContextKey(\"inCompositeEditor\",void 0,L.localize(22,null)),E.notInCompositeEditor=E.inCompositeEditor.toNegated(),E.languageId=new k.RawContextKey(\"editorLangId\",\"\",L.localize(23,null)),E.hasCompletionItemProvider=new k.RawContextKey(\"editorHasCompletionItemProvider\",!1,L.localize(24,null)),E.hasCodeActionsProvider=new k.RawContextKey(\"editorHasCodeActionsProvider\",!1,L.localize(25,null)),E.hasCodeLensProvider=new k.RawContextKey(\"editorHasCodeLensProvider\",!1,L.localize(26,null)),E.hasDefinitionProvider=new k.RawContextKey(\"editorHasDefinitionProvider\",!1,L.localize(27,null)),E.hasDeclarationProvider=new k.RawContextKey(\"editorHasDeclarationProvider\",!1,L.localize(28,null)),E.hasImplementationProvider=new k.RawContextKey(\"editorHasImplementationProvider\",!1,L.localize(29,null)),E.hasTypeDefinitionProvider=new k.RawContextKey(\"editorHasTypeDefinitionProvider\",!1,L.localize(30,null)),E.hasHoverProvider=new k.RawContextKey(\"editorHasHoverProvider\",!1,L.localize(31,null)),E.hasDocumentHighlightProvider=new k.RawContextKey(\"editorHasDocumentHighlightProvider\",!1,L.localize(32,null)),E.hasDocumentSymbolProvider=new k.RawContextKey(\"editorHasDocumentSymbolProvider\",!1,L.localize(33,null)),E.hasReferenceProvider=new k.RawContextKey(\"editorHasReferenceProvider\",!1,L.localize(34,null)),E.hasRenameProvider=new k.RawContextKey(\"editorHasRenameProvider\",!1,L.localize(35,null)),E.hasSignatureHelpProvider=new k.RawContextKey(\"editorHasSignatureHelpProvider\",!1,L.localize(36,null)),E.hasInlayHintsProvider=new k.RawContextKey(\"editorHasInlayHintsProvider\",!1,L.localize(37,null)),E.hasDocumentFormattingProvider=new k.RawContextKey(\"editorHasDocumentFormattingProvider\",!1,L.localize(38,null)),E.hasDocumentSelectionFormattingProvider=new k.RawContextKey(\"editorHasDocumentSelectionFormattingProvider\",!1,L.localize(39,null)),E.hasMultipleDocumentFormattingProvider=new k.RawContextKey(\"editorHasMultipleDocumentFormattingProvider\",!1,L.localize(40,null)),E.hasMultipleDocumentSelectionFormattingProvider=new k.RawContextKey(\"editorHasMultipleDocumentSelectionFormattingProvider\",!1,L.localize(41,null))})(y||(e.EditorContextKeys=y={}))}),define(se[240],oe([1,0,35,11,85,15,2,695]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlineCompletionContextKeys=void 0;class _ extends S.Disposable{constructor(b,a){super(),this.contextKeyService=b,this.model=a,this.inlineCompletionVisible=_.inlineSuggestionVisible.bindTo(this.contextKeyService),this.inlineCompletionSuggestsIndentation=_.inlineSuggestionHasIndentation.bindTo(this.contextKeyService),this.inlineCompletionSuggestsIndentationLessThanTabSize=_.inlineSuggestionHasIndentationLessThanTabSize.bindTo(this.contextKeyService),this.suppressSuggestions=_.suppressSuggestions.bindTo(this.contextKeyService),this._register((0,L.autorun)(i=>{const n=this.model.read(i),t=n?.state.read(i),r=!!t?.inlineCompletion&&t?.ghostText!==void 0&&!t?.ghostText.isEmpty();this.inlineCompletionVisible.set(r),t?.ghostText&&t?.inlineCompletion&&this.suppressSuggestions.set(t.inlineCompletion.inlineCompletion.source.inlineCompletions.suppressSuggestions)})),this._register((0,L.autorun)(i=>{const n=this.model.read(i);let t=!1,r=!0;const u=n?.ghostText.read(i);if(n?.selectedSuggestItem&&u&&u.parts.length>0){const{column:f,lines:c}=u.parts[0],d=c[0],s=n.textModel.getLineIndentColumn(u.lineNumber);if(f<=s){let o=(0,k.firstNonWhitespaceIndex)(d);o===-1&&(o=d.length-1),t=o>0;const g=n.textModel.getOptions().tabSize;r=y.CursorColumns.visibleColumnFromColumn(d,o+1,g)<g}}this.inlineCompletionSuggestsIndentation.set(t),this.inlineCompletionSuggestsIndentationLessThanTabSize.set(r)}))}}e.InlineCompletionContextKeys=_,_.inlineSuggestionVisible=new E.RawContextKey(\"inlineSuggestionVisible\",!1,(0,p.localize)(0,null)),_.inlineSuggestionHasIndentation=new E.RawContextKey(\"inlineSuggestionHasIndentation\",!1,(0,p.localize)(1,null)),_.inlineSuggestionHasIndentationLessThanTabSize=new E.RawContextKey(\"inlineSuggestionHasIndentationLessThanTabSize\",!0,(0,p.localize)(2,null)),_.suppressSuggestions=new E.RawContextKey(\"inlineSuggestionSuppressSuggestions\",void 0,(0,p.localize)(3,null))}),define(se[241],oe([1,0,19,12,20,22,10,31,18,68,25,15]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.provideSignatureHelp=e.Context=void 0,e.Context={Visible:new a.RawContextKey(\"parameterHintsVisible\",!1),MultipleSignatures:new a.RawContextKey(\"parameterHintsMultipleSignatures\",!1)};async function i(n,t,r,u,f){const c=n.ordered(t);for(const d of c)try{const s=await d.provideSignatureHelp(t,r,f,u);if(s)return s}catch(s){(0,k.onUnexpectedExternalError)(s)}}e.provideSignatureHelp=i,b.CommandsRegistry.registerCommand(\"_executeSignatureHelpProvider\",async(n,...t)=>{const[r,u,f]=t;(0,y.assertType)(E.URI.isUri(r)),(0,y.assertType)(S.Position.isIPosition(u)),(0,y.assertType)(typeof f==\"string\"||!f);const c=n.get(_.ILanguageFeaturesService),d=await n.get(v.ITextModelService).createModelReference(r);try{const s=await i(c.signatureHelpProvider,d.object.textEditorModel,S.Position.lift(u),{triggerKind:p.SignatureHelpTriggerKind.Invoke,isRetrigger:!1,triggerCharacter:f},L.CancellationToken.None);return s?(setTimeout(()=>s.dispose(),0),s.value):void 0}finally{d.dispose()}})}),define(se[768],oe([1,0,14,12,6,2,128,31,241]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ParameterHintsModel=void 0;var v;(function(i){i.Default={type:0};class n{constructor(u,f){this.request=u,this.previouslyActiveHints=f,this.type=2}}i.Pending=n;class t{constructor(u){this.hints=u,this.type=1}}i.Active=t})(v||(v={}));class b extends E.Disposable{constructor(n,t,r=b.DEFAULT_DELAY){super(),this._onChangedHints=this._register(new y.Emitter),this.onChangedHints=this._onChangedHints.event,this.triggerOnType=!1,this._state=v.Default,this._pendingTriggers=[],this._lastSignatureHelpResult=this._register(new E.MutableDisposable),this.triggerChars=new S.CharacterSet,this.retriggerChars=new S.CharacterSet,this.triggerId=0,this.editor=n,this.providers=t,this.throttledDelayer=new L.Delayer(r),this._register(this.editor.onDidBlurEditorWidget(()=>this.cancel())),this._register(this.editor.onDidChangeConfiguration(()=>this.onEditorConfigurationChange())),this._register(this.editor.onDidChangeModel(u=>this.onModelChanged())),this._register(this.editor.onDidChangeModelLanguage(u=>this.onModelChanged())),this._register(this.editor.onDidChangeCursorSelection(u=>this.onCursorChange(u))),this._register(this.editor.onDidChangeModelContent(u=>this.onModelContentChange())),this._register(this.providers.onDidChange(this.onModelChanged,this)),this._register(this.editor.onDidType(u=>this.onDidType(u))),this.onEditorConfigurationChange(),this.onModelChanged()}get state(){return this._state}set state(n){this._state.type===2&&this._state.request.cancel(),this._state=n}cancel(n=!1){this.state=v.Default,this.throttledDelayer.cancel(),n||this._onChangedHints.fire(void 0)}trigger(n,t){const r=this.editor.getModel();if(!r||!this.providers.has(r))return;const u=++this.triggerId;this._pendingTriggers.push(n),this.throttledDelayer.trigger(()=>this.doTrigger(u),t).catch(k.onUnexpectedError)}next(){if(this.state.type!==1)return;const n=this.state.hints.signatures.length,t=this.state.hints.activeSignature,r=t%n===n-1,u=this.editor.getOption(85).cycle;if((n<2||r)&&!u){this.cancel();return}this.updateActiveSignature(r&&u?0:t+1)}previous(){if(this.state.type!==1)return;const n=this.state.hints.signatures.length,t=this.state.hints.activeSignature,r=t===0,u=this.editor.getOption(85).cycle;if((n<2||r)&&!u){this.cancel();return}this.updateActiveSignature(r&&u?n-1:t-1)}updateActiveSignature(n){this.state.type===1&&(this.state=new v.Active({...this.state.hints,activeSignature:n}),this._onChangedHints.fire(this.state.hints))}async doTrigger(n){const t=this.state.type===1||this.state.type===2,r=this.getLastActiveHints();if(this.cancel(!0),this._pendingTriggers.length===0)return!1;const u=this._pendingTriggers.reduce(a);this._pendingTriggers=[];const f={triggerKind:u.triggerKind,triggerCharacter:u.triggerCharacter,isRetrigger:t,activeSignatureHelp:r};if(!this.editor.hasModel())return!1;const c=this.editor.getModel(),d=this.editor.getPosition();this.state=new v.Pending((0,L.createCancelablePromise)(s=>(0,_.provideSignatureHelp)(this.providers,c,d,f,s)),r);try{const s=await this.state.request;return n!==this.triggerId?(s?.dispose(),!1):!s||!s.value.signatures||s.value.signatures.length===0?(s?.dispose(),this._lastSignatureHelpResult.clear(),this.cancel(),!1):(this.state=new v.Active(s.value),this._lastSignatureHelpResult.value=s,this._onChangedHints.fire(this.state.hints),!0)}catch(s){return n===this.triggerId&&(this.state=v.Default),(0,k.onUnexpectedError)(s),!1}}getLastActiveHints(){switch(this.state.type){case 1:return this.state.hints;case 2:return this.state.previouslyActiveHints;default:return}}get isTriggered(){return this.state.type===1||this.state.type===2||this.throttledDelayer.isTriggered()}onModelChanged(){this.cancel(),this.triggerChars.clear(),this.retriggerChars.clear();const n=this.editor.getModel();if(n)for(const t of this.providers.ordered(n)){for(const r of t.signatureHelpTriggerCharacters||[])if(r.length){const u=r.charCodeAt(0);this.triggerChars.add(u),this.retriggerChars.add(u)}for(const r of t.signatureHelpRetriggerCharacters||[])r.length&&this.retriggerChars.add(r.charCodeAt(0))}}onDidType(n){if(!this.triggerOnType)return;const t=n.length-1,r=n.charCodeAt(t);(this.triggerChars.has(r)||this.isTriggered&&this.retriggerChars.has(r))&&this.trigger({triggerKind:p.SignatureHelpTriggerKind.TriggerCharacter,triggerCharacter:n.charAt(t)})}onCursorChange(n){n.source===\"mouse\"?this.cancel():this.isTriggered&&this.trigger({triggerKind:p.SignatureHelpTriggerKind.ContentChange})}onModelContentChange(){this.isTriggered&&this.trigger({triggerKind:p.SignatureHelpTriggerKind.ContentChange})}onEditorConfigurationChange(){this.triggerOnType=this.editor.getOption(85).enabled,this.triggerOnType||this.cancel()}dispose(){this.cancel(!0),super.dispose()}}e.ParameterHintsModel=b,b.DEFAULT_DELAY=120;function a(i,n){switch(n.triggerKind){case p.SignatureHelpTriggerKind.Invoke:return n;case p.SignatureHelpTriggerKind.ContentChange:return i;case p.SignatureHelpTriggerKind.TriggerCharacter:default:return n}}}),define(se[769],oe([1,0,15]),function(te,e,L){\"use strict\";var k;Object.defineProperty(e,\"__esModule\",{value:!0}),e.SuggestAlternatives=void 0;let y=k=class{constructor(S,p){this._editor=S,this._index=0,this._ckOtherSuggestions=k.OtherSuggestions.bindTo(p)}dispose(){this.reset()}reset(){var S;this._ckOtherSuggestions.reset(),(S=this._listener)===null||S===void 0||S.dispose(),this._model=void 0,this._acceptNext=void 0,this._ignore=!1}set({model:S,index:p},_){if(S.items.length===0){this.reset();return}if(k._moveIndex(!0,S,p)===p){this.reset();return}this._acceptNext=_,this._model=S,this._index=p,this._listener=this._editor.onDidChangeCursorPosition(()=>{this._ignore||this.reset()}),this._ckOtherSuggestions.set(!0)}static _moveIndex(S,p,_){let v=_;for(let b=p.items.length;b>0&&(v=(v+p.items.length+(S?1:-1))%p.items.length,!(v===_||!p.items[v].completion.additionalTextEdits));b--);return v}next(){this._move(!0)}prev(){this._move(!1)}_move(S){if(this._model)try{this._ignore=!0,this._index=k._moveIndex(S,this._model,this._index),this._acceptNext({index:this._index,item:this._model.items[this._index],model:this._model})}finally{this._ignore=!1}}};e.SuggestAlternatives=y,y.OtherSuggestions=new L.RawContextKey(\"hasOtherSuggestions\",!1),e.SuggestAlternatives=y=k=ke([ge(1,L.IContextKeyService)],y)}),define(se[770],oe([1,0,15]),function(te,e,L){\"use strict\";var k;Object.defineProperty(e,\"__esModule\",{value:!0}),e.WordContextKey=void 0;let y=k=class{constructor(S,p){this._editor=S,this._enabled=!1,this._ckAtEnd=k.AtEnd.bindTo(p),this._configListener=this._editor.onDidChangeConfiguration(_=>_.hasChanged(122)&&this._update()),this._update()}dispose(){var S;this._configListener.dispose(),(S=this._selectionListener)===null||S===void 0||S.dispose(),this._ckAtEnd.reset()}_update(){const S=this._editor.getOption(122)===\"on\";if(this._enabled!==S)if(this._enabled=S,this._enabled){const p=()=>{if(!this._editor.hasModel()){this._ckAtEnd.set(!1);return}const _=this._editor.getModel(),v=this._editor.getSelection(),b=_.getWordAtPosition(v.getStartPosition());if(!b){this._ckAtEnd.set(!1);return}this._ckAtEnd.set(b.endColumn===v.getStartPosition().column)};this._selectionListener=this._editor.onDidChangeCursorSelection(p),p()}else this._selectionListener&&(this._ckAtEnd.reset(),this._selectionListener.dispose(),this._selectionListener=void 0)}};e.WordContextKey=y,y.AtEnd=new L.RawContextKey(\"atEndOfWord\",!1),e.WordContextKey=y=k=ke([ge(1,L.IContextKeyService)],y)}),define(se[69],oe([1,0,15,8]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CONTEXT_ACCESSIBILITY_MODE_ENABLED=e.IAccessibilityService=void 0,e.IAccessibilityService=(0,k.createDecorator)(\"accessibilityService\"),e.CONTEXT_ACCESSIBILITY_MODE_ENABLED=new L.RawContextKey(\"accessibilityModeEnabled\",!1)}),define(se[771],oe([1,0,54,13,6,2,55,17,328,335,492,202,36,149,235,69]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ComputedEditorOptions=e.EditorConfiguration=void 0;let u=class extends E.Disposable{constructor(h,m,C,w){super(),this._accessibilityService=w,this._onDidChange=this._register(new y.Emitter),this.onDidChange=this._onDidChange.event,this._onDidChangeFast=this._register(new y.Emitter),this.onDidChangeFast=this._onDidChangeFast.event,this._isDominatedByLongLines=!1,this._viewLineCount=1,this._lineNumbersDigitCount=1,this._reservedHeight=0,this._glyphMarginDecorationLaneCount=1,this._computeOptionsMemory=new i.ComputeOptionsMemory,this.isSimpleWidget=h,this._containerObserver=this._register(new _.ElementSizeObserver(C,m.dimension)),this._rawOptions=o(m),this._validatedOptions=l.validateOptions(this._rawOptions),this.options=this._computeOptions(),this.options.get(13)&&this._containerObserver.startObserving(),this._register(n.EditorZoom.onDidChangeZoomLevel(()=>this._recomputeOptions())),this._register(a.TabFocus.onDidChangeTabFocus(()=>this._recomputeOptions())),this._register(this._containerObserver.onDidChange(()=>this._recomputeOptions())),this._register(v.FontMeasurements.onDidChange(()=>this._recomputeOptions())),this._register(L.PixelRatio.onDidChange(()=>this._recomputeOptions())),this._register(this._accessibilityService.onDidChangeScreenReaderOptimized(()=>this._recomputeOptions()))}_recomputeOptions(){const h=this._computeOptions(),m=l.checkEquals(this.options,h);m!==null&&(this.options=h,this._onDidChangeFast.fire(m),this._onDidChange.fire(m))}_computeOptions(){const h=this._readEnvConfiguration(),m=t.BareFontInfo.createFromValidatedSettings(this._validatedOptions,h.pixelRatio,this.isSimpleWidget),C=this._readFontInfo(m),w={memory:this._computeOptionsMemory,outerWidth:h.outerWidth,outerHeight:h.outerHeight-this._reservedHeight,fontInfo:C,extraEditorClassName:h.extraEditorClassName,isDominatedByLongLines:this._isDominatedByLongLines,viewLineCount:this._viewLineCount,lineNumbersDigitCount:this._lineNumbersDigitCount,emptySelectionClipboard:h.emptySelectionClipboard,pixelRatio:h.pixelRatio,tabFocusMode:a.TabFocus.getTabFocusMode(),accessibilitySupport:h.accessibilitySupport,glyphMarginDecorationLaneCount:this._glyphMarginDecorationLaneCount};return l.computeOptions(this._validatedOptions,w)}_readEnvConfiguration(){return{extraEditorClassName:c(),outerWidth:this._containerObserver.getWidth(),outerHeight:this._containerObserver.getHeight(),emptySelectionClipboard:L.isWebKit||L.isFirefox,pixelRatio:L.PixelRatio.value,accessibilitySupport:this._accessibilityService.isScreenReaderOptimized()?2:this._accessibilityService.getAccessibilitySupport()}}_readFontInfo(h){return v.FontMeasurements.readFontInfo(h)}getRawOptions(){return this._rawOptions}updateOptions(h){const m=o(h);l.applyUpdate(this._rawOptions,m)&&(this._validatedOptions=l.validateOptions(this._rawOptions),this._recomputeOptions())}observeContainer(h){this._containerObserver.observe(h)}setIsDominatedByLongLines(h){this._isDominatedByLongLines!==h&&(this._isDominatedByLongLines=h,this._recomputeOptions())}setModelLineCount(h){const m=f(h);this._lineNumbersDigitCount!==m&&(this._lineNumbersDigitCount=m,this._recomputeOptions())}setViewLineCount(h){this._viewLineCount!==h&&(this._viewLineCount=h,this._recomputeOptions())}setReservedHeight(h){this._reservedHeight!==h&&(this._reservedHeight=h,this._recomputeOptions())}setGlyphMarginDecorationLaneCount(h){this._glyphMarginDecorationLaneCount!==h&&(this._glyphMarginDecorationLaneCount=h,this._recomputeOptions())}};e.EditorConfiguration=u,e.EditorConfiguration=u=ke([ge(3,r.IAccessibilityService)],u);function f(g){let h=0;for(;g;)g=Math.floor(g/10),h++;return h||1}function c(){let g=\"\";return!L.isSafari&&!L.isWebkitWebView&&(g+=\"no-user-select \"),L.isSafari&&(g+=\"no-minimap-shadow \",g+=\"enable-user-select \"),p.isMacintosh&&(g+=\"mac \"),g}class d{constructor(){this._values=[]}_read(h){return this._values[h]}get(h){return this._values[h]}_write(h,m){this._values[h]=m}}class s{constructor(){this._values=[]}_read(h){if(h>=this._values.length)throw new Error(\"Cannot read uninitialized value\");return this._values[h]}get(h){return this._read(h)}_write(h,m){this._values[h]=m}}e.ComputedEditorOptions=s;class l{static validateOptions(h){const m=new d;for(const C of i.editorOptionsRegistry){const w=C.name===\"_never_\"?void 0:h[C.name];m._write(C.id,C.validate(w))}return m}static computeOptions(h,m){const C=new s;for(const w of i.editorOptionsRegistry)C._write(w.id,w.compute(m,C,h._read(w.id)));return C}static _deepEquals(h,m){if(typeof h!=\"object\"||typeof m!=\"object\"||!h||!m)return h===m;if(Array.isArray(h)||Array.isArray(m))return Array.isArray(h)&&Array.isArray(m)?k.equals(h,m):!1;if(Object.keys(h).length!==Object.keys(m).length)return!1;for(const C in h)if(!l._deepEquals(h[C],m[C]))return!1;return!0}static checkEquals(h,m){const C=[];let w=!1;for(const D of i.editorOptionsRegistry){const I=!l._deepEquals(h._read(D.id),m._read(D.id));C[D.id]=I,I&&(w=!0)}return w?new i.ConfigurationChangedEvent(C):null}static applyUpdate(h,m){let C=!1;for(const w of i.editorOptionsRegistry)if(m.hasOwnProperty(w.name)){const D=w.applyUpdate(h[w.name],m[w.name]);h[w.name]=D.newValue,C=C||D.didChange}return C}}function o(g){const h=S.deepClone(g);return(0,b.migrateOptions)(h),h}}),define(se[772],oe([1,0,6,52,2,55,199,22,738,25,27,15]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.setContext=e.ContextKeyService=e.AbstractContextKeyService=e.Context=void 0;const i=\"data-keybinding-context\";class n{constructor(D,I){this._id=D,this._parent=I,this._value=Object.create(null),this._value._contextId=D}get value(){return{...this._value}}setValue(D,I){return this._value[D]!==I?(this._value[D]=I,!0):!1}removeValue(D){return D in this._value?(delete this._value[D],!0):!1}getValue(D){const I=this._value[D];return typeof I>\"u\"&&this._parent?this._parent.getValue(D):I}}e.Context=n;class t extends n{constructor(){super(-1,null)}setValue(D,I){return!1}removeValue(D){return!1}getValue(D){}}t.INSTANCE=new t;class r extends n{constructor(D,I,T){super(D,null),this._configurationService=I,this._values=S.TernarySearchTree.forConfigKeys(),this._listener=this._configurationService.onDidChangeConfiguration(A=>{if(A.source===7){const P=Array.from(this._values,([N])=>N);this._values.clear(),T.fire(new c(P))}else{const P=[];for(const N of A.affectedKeys){const M=`config.${N}`,R=this._values.findSuperstr(M);R!==void 0&&(P.push(...k.Iterable.map(R,([x])=>x)),this._values.deleteSuperstr(M)),this._values.has(M)&&(P.push(M),this._values.delete(M))}T.fire(new c(P))}})}dispose(){this._listener.dispose()}getValue(D){if(D.indexOf(r._keyPrefix)!==0)return super.getValue(D);if(this._values.has(D))return this._values.get(D);const I=D.substr(r._keyPrefix.length),T=this._configurationService.getValue(I);let A;switch(typeof T){case\"number\":case\"boolean\":case\"string\":A=T;break;default:Array.isArray(T)?A=JSON.stringify(T):A=T}return this._values.set(D,A),A}setValue(D,I){return super.setValue(D,I)}removeValue(D){return super.removeValue(D)}}r._keyPrefix=\"config.\";class u{constructor(D,I,T){this._service=D,this._key=I,this._defaultValue=T,this.reset()}set(D){this._service.setContext(this._key,D)}reset(){typeof this._defaultValue>\"u\"?this._service.removeContext(this._key):this._service.setContext(this._key,this._defaultValue)}get(){return this._service.getContextKeyValue(this._key)}}class f{constructor(D){this.key=D}affectsSome(D){return D.has(this.key)}allKeysContainedIn(D){return this.affectsSome(D)}}class c{constructor(D){this.keys=D}affectsSome(D){for(const I of this.keys)if(D.has(I))return!0;return!1}allKeysContainedIn(D){return this.keys.every(I=>D.has(I))}}class d{constructor(D){this.events=D}affectsSome(D){for(const I of this.events)if(I.affectsSome(D))return!0;return!1}allKeysContainedIn(D){return this.events.every(I=>I.allKeysContainedIn(D))}}function s(w,D){return w.allKeysContainedIn(new Set(Object.keys(D)))}class l extends y.Disposable{constructor(D){super(),this._onDidChangeContext=this._register(new L.PauseableEmitter({merge:I=>new d(I)})),this.onDidChangeContext=this._onDidChangeContext.event,this._isDisposed=!1,this._myContextId=D}createKey(D,I){if(this._isDisposed)throw new Error(\"AbstractContextKeyService has been disposed\");return new u(this,D,I)}bufferChangeEvents(D){this._onDidChangeContext.pause();try{D()}finally{this._onDidChangeContext.resume()}}createScoped(D){if(this._isDisposed)throw new Error(\"AbstractContextKeyService has been disposed\");return new g(this,D)}contextMatchesRules(D){if(this._isDisposed)throw new Error(\"AbstractContextKeyService has been disposed\");const I=this.getContextValuesContainer(this._myContextId);return D?D.evaluate(I):!0}getContextKeyValue(D){if(!this._isDisposed)return this.getContextValuesContainer(this._myContextId).getValue(D)}setContext(D,I){if(this._isDisposed)return;const T=this.getContextValuesContainer(this._myContextId);T&&T.setValue(D,I)&&this._onDidChangeContext.fire(new f(D))}removeContext(D){this._isDisposed||this.getContextValuesContainer(this._myContextId).removeValue(D)&&this._onDidChangeContext.fire(new f(D))}getContext(D){return this._isDisposed?t.INSTANCE:this.getContextValuesContainer(h(D))}dispose(){super.dispose(),this._isDisposed=!0}}e.AbstractContextKeyService=l;let o=class extends l{constructor(D){super(0),this._contexts=new Map,this._lastContextId=0;const I=this._register(new r(this._myContextId,D,this._onDidChangeContext));this._contexts.set(this._myContextId,I)}getContextValuesContainer(D){return this._isDisposed?t.INSTANCE:this._contexts.get(D)||t.INSTANCE}createChildContext(D=this._myContextId){if(this._isDisposed)throw new Error(\"ContextKeyService has been disposed\");const I=++this._lastContextId;return this._contexts.set(I,new n(I,this.getContextValuesContainer(D))),I}disposeContext(D){this._isDisposed||this._contexts.delete(D)}};e.ContextKeyService=o,e.ContextKeyService=o=ke([ge(0,b.IConfigurationService)],o);class g extends l{constructor(D,I){if(super(D.createChildContext()),this._parentChangeListener=this._register(new y.MutableDisposable),this._parent=D,this._updateParentChangeListener(),this._domNode=I,this._domNode.hasAttribute(i)){let T=\"\";this._domNode.classList&&(T=Array.from(this._domNode.classList.values()).join(\", \")),console.error(`Element already has context attribute${T?\": \"+T:\"\"}`)}this._domNode.setAttribute(i,String(this._myContextId))}_updateParentChangeListener(){this._parentChangeListener.value=this._parent.onDidChangeContext(D=>{const T=this._parent.getContextValuesContainer(this._myContextId).value;s(D,T)||this._onDidChangeContext.fire(D)})}dispose(){this._isDisposed||(this._parent.disposeContext(this._myContextId),this._domNode.removeAttribute(i),super.dispose())}getContextValuesContainer(D){return this._isDisposed?t.INSTANCE:this._parent.getContextValuesContainer(D)}createChildContext(D=this._myContextId){if(this._isDisposed)throw new Error(\"ScopedContextKeyService has been disposed\");return this._parent.createChildContext(D)}disposeContext(D){this._isDisposed||this._parent.disposeContext(D)}}function h(w){for(;w;){if(w.hasAttribute(i)){const D=w.getAttribute(i);return D?parseInt(D,10):NaN}w=w.parentElement}return 0}function m(w,D,I){w.get(a.IContextKeyService).createKey(String(D),C(I))}e.setContext=m;function C(w){return(0,E.cloneAndChange)(w,D=>{if(typeof D==\"object\"&&D.$mid===1)return p.URI.revive(D).toString();if(D instanceof p.URI)return D.toString()})}v.CommandsRegistry.registerCommand(\"_setContext\",m),v.CommandsRegistry.registerCommand({id:\"getContextKeyInfo\",handler(){return[...a.RawContextKey.all()].sort((w,D)=>w.key.localeCompare(D.key))},metadata:{description:(0,_.localize)(0,null),args:[]}}),v.CommandsRegistry.registerCommand(\"_generateContextKeyInfo\",function(){const w=[],D=new Set;for(const I of a.RawContextKey.all())D.has(I.key)||(D.add(I.key),w.push(I));w.sort((I,T)=>I.key.localeCompare(T.key)),console.log(JSON.stringify(w,void 0,2))})}),define(se[242],oe([1,0,17,740,15]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InputFocusedContext=e.InputFocusedContextKey=e.ProductQualityContext=e.IsDevelopmentContext=e.IsMobileContext=e.IsIOSContext=e.IsMacNativeContext=e.IsWebContext=e.IsWindowsContext=e.IsLinuxContext=e.IsMacContext=void 0,e.IsMacContext=new y.RawContextKey(\"isMac\",L.isMacintosh,(0,k.localize)(0,null)),e.IsLinuxContext=new y.RawContextKey(\"isLinux\",L.isLinux,(0,k.localize)(1,null)),e.IsWindowsContext=new y.RawContextKey(\"isWindows\",L.isWindows,(0,k.localize)(2,null)),e.IsWebContext=new y.RawContextKey(\"isWeb\",L.isWeb,(0,k.localize)(3,null)),e.IsMacNativeContext=new y.RawContextKey(\"isMacNative\",L.isMacintosh&&!L.isWeb,(0,k.localize)(4,null)),e.IsIOSContext=new y.RawContextKey(\"isIOS\",L.isIOS,(0,k.localize)(5,null)),e.IsMobileContext=new y.RawContextKey(\"isMobile\",L.isMobile,(0,k.localize)(6,null)),e.IsDevelopmentContext=new y.RawContextKey(\"isDevelopment\",!1,!0),e.ProductQualityContext=new y.RawContextKey(\"productQualityType\",\"\",(0,k.localize)(7,null)),e.InputFocusedContextKey=\"inputFocus\",e.InputFocusedContext=new y.RawContextKey(e.InputFocusedContextKey,!1,(0,k.localize)(8,null))}),define(se[59],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IContextMenuService=e.IContextViewService=void 0,e.IContextViewService=(0,L.createDecorator)(\"contextViewService\"),e.IContextMenuService=(0,L.createDecorator)(\"contextMenuService\")}),define(se[162],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IDialogService=void 0,e.IDialogService=(0,L.createDecorator)(\"dialogService\")}),define(se[243],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IEnvironmentService=void 0,e.IEnvironmentService=(0,L.createDecorator)(\"environmentService\")}),define(se[244],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IHoverService=void 0,e.IHoverService=(0,L.createDecorator)(\"hoverService\")}),define(se[163],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ServiceCollection=void 0;class L{constructor(...y){this._entries=new Map;for(const[E,S]of y)this.set(E,S)}set(y,E){const S=this._entries.get(y);return this._entries.set(y,E),S}get(y){return this._entries.get(y)}}e.ServiceCollection=L}),define(se[773],oe([1,0,14,12,2,236,762,8,163,66]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Trace=e.InstantiationService=void 0;const b=!1;class a extends Error{constructor(r){var u;super(\"cyclic dependency between services\"),this.message=(u=r.findCycleSlow())!==null&&u!==void 0?u:`UNABLE to detect cycle, dumping graph: \n${r.toString()}`}}class i{constructor(r=new _.ServiceCollection,u=!1,f,c=b){var d;this._services=r,this._strict=u,this._parent=f,this._enableTracing=c,this._activeInstantiations=new Set,this._services.set(p.IInstantiationService,this),this._globalGraph=c?(d=f?._globalGraph)!==null&&d!==void 0?d:new S.Graph(s=>s):void 0}createChild(r){return new i(r,this._strict,this,this._enableTracing)}invokeFunction(r,...u){const f=n.traceInvocation(this._enableTracing,r);let c=!1;try{return r({get:s=>{if(c)throw(0,k.illegalState)(\"service accessor is only valid during the invocation of its target method\");const l=this._getOrCreateServiceInstance(s,f);if(!l)throw new Error(`[invokeFunction] unknown service '${s}'`);return l}},...u)}finally{c=!0,f.stop()}}createInstance(r,...u){let f,c;return r instanceof E.SyncDescriptor?(f=n.traceCreation(this._enableTracing,r.ctor),c=this._createInstance(r.ctor,r.staticArguments.concat(u),f)):(f=n.traceCreation(this._enableTracing,r),c=this._createInstance(r,u,f)),f.stop(),c}_createInstance(r,u=[],f){const c=p._util.getServiceDependencies(r).sort((l,o)=>l.index-o.index),d=[];for(const l of c){const o=this._getOrCreateServiceInstance(l.id,f);o||this._throwIfStrict(`[createInstance] ${r.name} depends on UNKNOWN service ${l.id}.`,!1),d.push(o)}const s=c.length>0?c[0].index:u.length;if(u.length!==s){console.trace(`[createInstance] First service dependency of ${r.name} at position ${s+1} conflicts with ${u.length} static arguments`);const l=s-u.length;l>0?u=u.concat(new Array(l)):u=u.slice(0,s)}return Reflect.construct(r,u.concat(d))}_setServiceInstance(r,u){if(this._services.get(r)instanceof E.SyncDescriptor)this._services.set(r,u);else if(this._parent)this._parent._setServiceInstance(r,u);else throw new Error(\"illegalState - setting UNKNOWN service instance\")}_getServiceInstanceOrDescriptor(r){const u=this._services.get(r);return!u&&this._parent?this._parent._getServiceInstanceOrDescriptor(r):u}_getOrCreateServiceInstance(r,u){this._globalGraph&&this._globalGraphImplicitDependency&&this._globalGraph.insertEdge(this._globalGraphImplicitDependency,String(r));const f=this._getServiceInstanceOrDescriptor(r);return f instanceof E.SyncDescriptor?this._safeCreateAndCacheServiceInstance(r,f,u.branch(r,!0)):(u.branch(r,!1),f)}_safeCreateAndCacheServiceInstance(r,u,f){if(this._activeInstantiations.has(r))throw new Error(`illegal state - RECURSIVELY instantiating service '${r}'`);this._activeInstantiations.add(r);try{return this._createAndCacheServiceInstance(r,u,f)}finally{this._activeInstantiations.delete(r)}}_createAndCacheServiceInstance(r,u,f){var c;const d=new S.Graph(o=>o.id.toString());let s=0;const l=[{id:r,desc:u,_trace:f}];for(;l.length;){const o=l.pop();if(d.lookupOrInsertNode(o),s++>1e3)throw new a(d);for(const g of p._util.getServiceDependencies(o.desc.ctor)){const h=this._getServiceInstanceOrDescriptor(g.id);if(h||this._throwIfStrict(`[createInstance] ${r} depends on ${g.id} which is NOT registered.`,!0),(c=this._globalGraph)===null||c===void 0||c.insertEdge(String(o.id),String(g.id)),h instanceof E.SyncDescriptor){const m={id:g.id,desc:h,_trace:o._trace.branch(g.id,!0)};d.insertEdge(o,m),l.push(m)}}}for(;;){const o=d.roots();if(o.length===0){if(!d.isEmpty())throw new a(d);break}for(const{data:g}of o){if(this._getServiceInstanceOrDescriptor(g.id)instanceof E.SyncDescriptor){const m=this._createServiceInstanceWithOwner(g.id,g.desc.ctor,g.desc.staticArguments,g.desc.supportsDelayedInstantiation,g._trace);this._setServiceInstance(g.id,m)}d.removeNode(g)}}return this._getServiceInstanceOrDescriptor(r)}_createServiceInstanceWithOwner(r,u,f=[],c,d){if(this._services.get(r)instanceof E.SyncDescriptor)return this._createServiceInstance(r,u,f,c,d);if(this._parent)return this._parent._createServiceInstanceWithOwner(r,u,f,c,d);throw new Error(`illegalState - creating UNKNOWN service instance ${u.name}`)}_createServiceInstance(r,u,f=[],c,d){if(c){const s=new i(void 0,this._strict,this,this._enableTracing);s._globalGraphImplicitDependency=String(r);const l=new Map,o=new L.GlobalIdleValue(()=>{const g=s._createInstance(u,f,d);for(const[h,m]of l){const C=g[h];if(typeof C==\"function\")for(const w of m)w.disposable=C.apply(g,w.listener)}return l.clear(),g});return new Proxy(Object.create(null),{get(g,h){if(!o.isInitialized&&typeof h==\"string\"&&(h.startsWith(\"onDid\")||h.startsWith(\"onWill\"))){let w=l.get(h);return w||(w=new v.LinkedList,l.set(h,w)),(I,T,A)=>{if(o.isInitialized)return o.value[h](I,T,A);{const P={listener:[I,T,A],disposable:void 0},N=w.push(P);return(0,y.toDisposable)(()=>{var R;N(),(R=P.disposable)===null||R===void 0||R.dispose()})}}}if(h in g)return g[h];const m=o.value;let C=m[h];return typeof C!=\"function\"||(C=C.bind(m),g[h]=C),C},set(g,h,m){return o.value[h]=m,!0},getPrototypeOf(g){return u.prototype}})}else return this._createInstance(u,f,d)}_throwIfStrict(r,u){if(u&&console.warn(r),this._strict)throw new Error(r)}}e.InstantiationService=i;class n{static traceInvocation(r,u){return r?new n(2,u.name||new Error().stack.split(`\n`).slice(3,4).join(`\n`)):n._None}static traceCreation(r,u){return r?new n(1,u.name):n._None}constructor(r,u){this.type=r,this.name=u,this._start=Date.now(),this._dep=[]}branch(r,u){const f=new n(3,r.toString());return this._dep.push([r,u,f]),f}stop(){const r=Date.now()-this._start;n._totals+=r;let u=!1;function f(d,s){const l=[],o=new Array(d+1).join(\"\t\");for(const[g,h,m]of s._dep)if(h&&m){u=!0,l.push(`${o}CREATES -> ${g}`);const C=f(d+1,m);C&&l.push(C)}else l.push(`${o}uses -> ${g}`);return l.join(`\n`)}const c=[`${this.type===1?\"CREATE\":\"CALL\"} ${this.name}`,`${f(1,this)}`,`DONE, took ${r.toFixed(2)}ms (grand total ${n._totals.toFixed(2)}ms)`];(r>2||u)&&n.all.add(c.join(`\n`))}}e.Trace=n,n.all=new Set,n._None=new class extends n{constructor(){super(0,null)}stop(){}branch(){return this}},n._totals=0}),define(se[774],oe([1,0,12,218,125]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BaseResolvedKeybinding=void 0;class E extends y.ResolvedKeybinding{constructor(p,_){if(super(),_.length===0)throw(0,L.illegalArgument)(\"chords\");this._os=p,this._chords=_}getLabel(){return k.UILabelProvider.toLabel(this._os,this._chords,p=>this._getLabel(p))}getAriaLabel(){return k.AriaLabelProvider.toLabel(this._os,this._chords,p=>this._getAriaLabel(p))}getElectronAccelerator(){return this._chords.length>1||this._chords[0].isDuplicateModifierCase()?null:k.ElectronAcceleratorLabelProvider.toLabel(this._os,this._chords,p=>this._getElectronAccelerator(p))}getUserSettingsLabel(){return k.UserSettingsLabelProvider.toLabel(this._os,this._chords,p=>this._getUserSettingsLabel(p))}hasMultipleChords(){return this._chords.length>1}getChords(){return this._chords.map(p=>this._getChord(p))}_getChord(p){return new y.ResolvedChord(p.ctrlKey,p.shiftKey,p.altKey,p.metaKey,this._getLabel(p),this._getAriaLabel(p))}getDispatchChords(){return this._chords.map(p=>this._getChordDispatch(p))}getSingleModifierDispatchChords(){return this._chords.map(p=>this._getSingleModifierChordDispatch(p))}}e.BaseResolvedKeybinding=E}),define(se[34],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IKeybindingService=void 0,e.IKeybindingService=(0,L.createDecorator)(\"keybindingService\")}),define(se[346],oe([1,0,7,229,42,6,2,136,239,15,59,8,34,458]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.PostEditWidgetManager=void 0;let t=n=class extends S.Disposable{constructor(f,c,d,s,l,o,g,h,m,C){super(),this.typeId=f,this.editor=c,this.showCommand=s,this.range=l,this.edits=o,this.onSelectNewEdit=g,this._contextMenuService=h,this._keybindingService=C,this.allowEditorOverflow=!0,this.suppressMouseDown=!0,this.create(),this.visibleContext=d.bindTo(m),this.visibleContext.set(!0),this._register((0,S.toDisposable)(()=>this.visibleContext.reset())),this.editor.addContentWidget(this),this.editor.layoutContentWidget(this),this._register((0,S.toDisposable)(()=>this.editor.removeContentWidget(this))),this._register(this.editor.onDidChangeCursorPosition(w=>{l.containsPosition(w.position)||this.dispose()})),this._register(E.Event.runAndSubscribe(C.onDidUpdateKeybindings,()=>{this._updateButtonTitle()}))}_updateButtonTitle(){var f;const c=(f=this._keybindingService.lookupKeybinding(this.showCommand.id))===null||f===void 0?void 0:f.getLabel();this.button.element.title=this.showCommand.label+(c?` (${c})`:\"\")}create(){this.domNode=L.$(\".post-edit-widget\"),this.button=this._register(new k.Button(this.domNode,{supportIcons:!0})),this.button.label=\"$(insert)\",this._register(L.addDisposableListener(this.domNode,L.EventType.CLICK,()=>this.showSelector()))}getId(){return n.baseId+\".\"+this.typeId}getDomNode(){return this.domNode}getPosition(){return{position:this.range.getEndPosition(),preference:[2]}}showSelector(){this._contextMenuService.showContextMenu({getAnchor:()=>{const f=L.getDomNodePagePosition(this.button.element);return{x:f.left+f.width,y:f.top+f.height}},getActions:()=>this.edits.allEdits.map((f,c)=>(0,y.toAction)({id:\"\",label:f.label,checked:c===this.edits.activeEditIndex,run:()=>{if(c!==this.edits.activeEditIndex)return this.onSelectNewEdit(c)}}))})}};t.baseId=\"editor.widget.postEditWidget\",t=n=ke([ge(7,b.IContextMenuService),ge(8,v.IContextKeyService),ge(9,i.IKeybindingService)],t);let r=class extends S.Disposable{constructor(f,c,d,s,l,o){super(),this._id=f,this._editor=c,this._visibleContext=d,this._showCommand=s,this._instantiationService=l,this._bulkEditService=o,this._currentWidget=this._register(new S.MutableDisposable),this._register(E.Event.any(c.onDidChangeModel,c.onDidChangeModelContent)(()=>this.clear()))}async applyEditAndShowIfNeeded(f,c,d,s){const l=this._editor.getModel();if(!l||!f.length)return;const o=c.allEdits[c.activeEditIndex];if(!o)return;const g=(0,_.createCombinedWorkspaceEdit)(l.uri,f,o),h=f[0],m=l.deltaDecorations([],[{range:h,options:{description:\"paste-line-suffix\",stickiness:0}}]);let C,w;try{C=await this._bulkEditService.apply(g,{editor:this._editor,token:s}),w=l.getDecorationRange(m[0])}finally{l.deltaDecorations(m,[])}d&&C.isApplied&&c.allEdits.length>1&&this.show(w??h,c,async D=>{const I=this._editor.getModel();I&&(await I.undo(),this.applyEditAndShowIfNeeded(f,{activeEditIndex:D,allEdits:c.allEdits},d,s))})}show(f,c,d){this.clear(),this._editor.hasModel()&&(this._currentWidget.value=this._instantiationService.createInstance(t,this._id,this._editor,this._visibleContext,this._showCommand,f,c,d))}clear(){this._currentWidget.clear()}tryShowSelector(){var f;(f=this._currentWidget.value)===null||f===void 0||f.showSelector()}};e.PostEditWidgetManager=r,e.PostEditWidgetManager=r=ke([ge(4,a.IInstantiationService),ge(5,p.IBulkEditService)],r)}),define(se[347],oe([1,0,15]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.KeybindingResolver=e.NoMatchingKb=void 0,e.NoMatchingKb={kind:0};const k={kind:1};function y(_,v,b){return{kind:2,commandId:_,commandArgs:v,isBubble:b}}class E{constructor(v,b,a){var i;this._log=a,this._defaultKeybindings=v,this._defaultBoundCommands=new Map;for(const n of v){const t=n.command;t&&t.charAt(0)!==\"-\"&&this._defaultBoundCommands.set(t,!0)}this._map=new Map,this._lookupMap=new Map,this._keybindings=E.handleRemovals([].concat(v).concat(b));for(let n=0,t=this._keybindings.length;n<t;n++){const r=this._keybindings[n];if(r.chords.length===0)continue;const u=(i=r.when)===null||i===void 0?void 0:i.substituteConstants();u&&u.type===0||this._addKeyPress(r.chords[0],r)}}static _isTargetedForRemoval(v,b,a){if(b){for(let i=0;i<b.length;i++)if(b[i]!==v.chords[i])return!1}return!(a&&a.type!==1&&(!v.when||!(0,L.expressionsAreEqualWithConstantSubstitution)(a,v.when)))}static handleRemovals(v){const b=new Map;for(let i=0,n=v.length;i<n;i++){const t=v[i];if(t.command&&t.command.charAt(0)===\"-\"){const r=t.command.substring(1);b.has(r)?b.get(r).push(t):b.set(r,[t])}}if(b.size===0)return v;const a=[];for(let i=0,n=v.length;i<n;i++){const t=v[i];if(!t.command||t.command.length===0){a.push(t);continue}if(t.command.charAt(0)===\"-\")continue;const r=b.get(t.command);if(!r||!t.isDefault){a.push(t);continue}let u=!1;for(const f of r){const c=f.when;if(this._isTargetedForRemoval(t,f.chords,c)){u=!0;break}}if(!u){a.push(t);continue}}return a}_addKeyPress(v,b){const a=this._map.get(v);if(typeof a>\"u\"){this._map.set(v,[b]),this._addToLookupMap(b);return}for(let i=a.length-1;i>=0;i--){const n=a[i];if(n.command===b.command)continue;let t=!0;for(let r=1;r<n.chords.length&&r<b.chords.length;r++)if(n.chords[r]!==b.chords[r]){t=!1;break}t&&E.whenIsEntirelyIncluded(n.when,b.when)&&this._removeFromLookupMap(n)}a.push(b),this._addToLookupMap(b)}_addToLookupMap(v){if(!v.command)return;let b=this._lookupMap.get(v.command);typeof b>\"u\"?(b=[v],this._lookupMap.set(v.command,b)):b.push(v)}_removeFromLookupMap(v){if(!v.command)return;const b=this._lookupMap.get(v.command);if(!(typeof b>\"u\")){for(let a=0,i=b.length;a<i;a++)if(b[a]===v){b.splice(a,1);return}}}static whenIsEntirelyIncluded(v,b){return!b||b.type===1?!0:!v||v.type===1?!1:(0,L.implies)(v,b)}getKeybindings(){return this._keybindings}lookupPrimaryKeybinding(v,b){const a=this._lookupMap.get(v);if(typeof a>\"u\"||a.length===0)return null;if(a.length===1)return a[0];for(let i=a.length-1;i>=0;i--){const n=a[i];if(b.contextMatchesRules(n.when))return n}return a[a.length-1]}resolve(v,b,a){const i=[...b,a];this._log(`| Resolving ${i}`);const n=this._map.get(i[0]);if(n===void 0)return this._log(\"\\\\ No keybinding entries.\"),e.NoMatchingKb;let t=null;if(i.length<2)t=n;else{t=[];for(let u=0,f=n.length;u<f;u++){const c=n[u];if(i.length>c.chords.length)continue;let d=!0;for(let s=1;s<i.length;s++)if(c.chords[s]!==i[s]){d=!1;break}d&&t.push(c)}}const r=this._findCommand(v,t);return r?i.length<r.chords.length?(this._log(`\\\\ From ${t.length} keybinding entries, awaiting ${r.chords.length-i.length} more chord(s), when: ${S(r.when)}, source: ${p(r)}.`),k):(this._log(`\\\\ From ${t.length} keybinding entries, matched ${r.command}, when: ${S(r.when)}, source: ${p(r)}.`),y(r.command,r.commandArgs,r.bubble)):(this._log(`\\\\ From ${t.length} keybinding entries, no when clauses matched the context.`),e.NoMatchingKb)}_findCommand(v,b){for(let a=b.length-1;a>=0;a--){const i=b[a];if(E._contextMatchesRules(v,i.when))return i}return null}static _contextMatchesRules(v,b){return b?b.evaluate(v):!0}}e.KeybindingResolver=E;function S(_){return _?`${_.serialize()}`:\"no when condition\"}function p(_){return _.extensionId?_.isBuiltinExtension?`built-in extension ${_.extensionId}`:`user extension ${_.extensionId}`:_.isDefault?\"built-in\":\"user\"}}),define(se[775],oe([1,0,14,12,6,270,2,743,347]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractKeybindingService=void 0;const v=/^(cursor|delete|undo|redo|tab|editor\\.action\\.clipboard)/;class b extends S.Disposable{get onDidUpdateKeybindings(){return this._onDidUpdateKeybindings?this._onDidUpdateKeybindings.event:y.Event.None}get inChordMode(){return this._currentChords.length>0}constructor(n,t,r,u,f){super(),this._contextKeyService=n,this._commandService=t,this._telemetryService=r,this._notificationService=u,this._logService=f,this._onDidUpdateKeybindings=this._register(new y.Emitter),this._currentChords=[],this._currentChordChecker=new L.IntervalTimer,this._currentChordStatusMessage=null,this._ignoreSingleModifiers=a.EMPTY,this._currentSingleModifier=null,this._currentSingleModifierClearTimeout=new L.TimeoutTimer,this._currentlyDispatchingCommandId=null,this._logging=!1}dispose(){super.dispose()}_log(n){this._logging&&this._logService.info(`[KeybindingService]: ${n}`)}getKeybindings(){return this._getResolver().getKeybindings()}lookupKeybinding(n,t){const r=this._getResolver().lookupPrimaryKeybinding(n,t||this._contextKeyService);if(r)return r.resolvedKeybinding}dispatchEvent(n,t){return this._dispatch(n,t)}softDispatch(n,t){this._log(\"/ Soft dispatching keyboard event\");const r=this.resolveKeyboardEvent(n);if(r.hasMultipleChords())return console.warn(\"keyboard event should not be mapped to multiple chords\"),_.NoMatchingKb;const[u]=r.getDispatchChords();if(u===null)return this._log(\"\\\\ Keyboard event cannot be dispatched\"),_.NoMatchingKb;const f=this._contextKeyService.getContext(t),c=this._currentChords.map(({keypress:d})=>d);return this._getResolver().resolve(f,c,u)}_scheduleLeaveChordMode(){const n=Date.now();this._currentChordChecker.cancelAndSet(()=>{if(!this._documentHasFocus()){this._leaveChordMode();return}Date.now()-n>5e3&&this._leaveChordMode()},500)}_expectAnotherChord(n,t){switch(this._currentChords.push({keypress:n,label:t}),this._currentChords.length){case 0:throw(0,k.illegalState)(\"impossible\");case 1:this._currentChordStatusMessage=this._notificationService.status(p.localize(0,null,t));break;default:{const r=this._currentChords.map(({label:u})=>u).join(\", \");this._currentChordStatusMessage=this._notificationService.status(p.localize(1,null,r))}}this._scheduleLeaveChordMode(),E.IME.enabled&&E.IME.disable()}_leaveChordMode(){this._currentChordStatusMessage&&(this._currentChordStatusMessage.dispose(),this._currentChordStatusMessage=null),this._currentChordChecker.cancel(),this._currentChords=[],E.IME.enable()}_dispatch(n,t){return this._doDispatch(this.resolveKeyboardEvent(n),t,!1)}_singleModifierDispatch(n,t){const r=this.resolveKeyboardEvent(n),[u]=r.getSingleModifierDispatchChords();if(u)return this._ignoreSingleModifiers.has(u)?(this._log(`+ Ignoring single modifier ${u} due to it being pressed together with other keys.`),this._ignoreSingleModifiers=a.EMPTY,this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1):(this._ignoreSingleModifiers=a.EMPTY,this._currentSingleModifier===null?(this._log(`+ Storing single modifier for possible chord ${u}.`),this._currentSingleModifier=u,this._currentSingleModifierClearTimeout.cancelAndSet(()=>{this._log(\"+ Clearing single modifier due to 300ms elapsed.\"),this._currentSingleModifier=null},300),!1):u===this._currentSingleModifier?(this._log(`/ Dispatching single modifier chord ${u} ${u}`),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,this._doDispatch(r,t,!0)):(this._log(`+ Clearing single modifier due to modifier mismatch: ${this._currentSingleModifier} ${u}`),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1));const[f]=r.getChords();return this._ignoreSingleModifiers=new a(f),this._currentSingleModifier!==null&&this._log(\"+ Clearing single modifier due to other key up.\"),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1}_doDispatch(n,t,r=!1){var u;let f=!1;if(n.hasMultipleChords())return console.warn(\"Unexpected keyboard event mapped to multiple chords\"),!1;let c=null,d=null;if(r){const[g]=n.getSingleModifierDispatchChords();c=g,d=g?[g]:[]}else[c]=n.getDispatchChords(),d=this._currentChords.map(({keypress:g})=>g);if(c===null)return this._log(\"\\\\ Keyboard event cannot be dispatched in keydown phase.\"),f;const s=this._contextKeyService.getContext(t),l=n.getLabel(),o=this._getResolver().resolve(s,d,c);switch(o.kind){case 0:{if(this._logService.trace(\"KeybindingService#dispatch\",l,\"[ No matching keybinding ]\"),this.inChordMode){const g=this._currentChords.map(({label:h})=>h).join(\", \");this._log(`+ Leaving multi-chord mode: Nothing bound to \"${g}, ${l}\".`),this._notificationService.status(p.localize(2,null,g,l),{hideAfter:10*1e3}),this._leaveChordMode(),f=!0}return f}case 1:return this._logService.trace(\"KeybindingService#dispatch\",l,\"[ Several keybindings match - more chords needed ]\"),f=!0,this._expectAnotherChord(c,l),this._log(this._currentChords.length===1?\"+ Entering multi-chord mode...\":\"+ Continuing multi-chord mode...\"),f;case 2:{if(this._logService.trace(\"KeybindingService#dispatch\",l,`[ Will dispatch command ${o.commandId} ]`),o.commandId===null||o.commandId===\"\"){if(this.inChordMode){const g=this._currentChords.map(({label:h})=>h).join(\", \");this._log(`+ Leaving chord mode: Nothing bound to \"${g}, ${l}\".`),this._notificationService.status(p.localize(3,null,g,l),{hideAfter:10*1e3}),this._leaveChordMode(),f=!0}}else{this.inChordMode&&this._leaveChordMode(),o.isBubble||(f=!0),this._log(`+ Invoking command ${o.commandId}.`),this._currentlyDispatchingCommandId=o.commandId;try{typeof o.commandArgs>\"u\"?this._commandService.executeCommand(o.commandId).then(void 0,g=>this._notificationService.warn(g)):this._commandService.executeCommand(o.commandId,o.commandArgs).then(void 0,g=>this._notificationService.warn(g))}finally{this._currentlyDispatchingCommandId=null}v.test(o.commandId)||this._telemetryService.publicLog2(\"workbenchActionExecuted\",{id:o.commandId,from:\"keybinding\",detail:(u=n.getUserSettingsLabel())!==null&&u!==void 0?u:void 0})}return f}}}mightProducePrintableCharacter(n){return n.ctrlKey||n.metaKey?!1:n.keyCode>=31&&n.keyCode<=56||n.keyCode>=21&&n.keyCode<=30}}e.AbstractKeybindingService=b;class a{constructor(n){this._ctrlKey=n?n.ctrlKey:!1,this._shiftKey=n?n.shiftKey:!1,this._altKey=n?n.altKey:!1,this._metaKey=n?n.metaKey:!1}has(n){switch(n){case\"ctrl\":return this._ctrlKey;case\"shift\":return this._shiftKey;case\"alt\":return this._altKey;case\"meta\":return this._metaKey}}}a.EMPTY=new a(null)}),define(se[348],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.toEmptyArrayIfContainsNull=e.ResolvedKeybindingItem=void 0;class L{constructor(E,S,p,_,v,b,a){this._resolvedKeybindingItemBrand=void 0,this.resolvedKeybinding=E,this.chords=E?k(E.getDispatchChords()):[],E&&this.chords.length===0&&(this.chords=k(E.getSingleModifierDispatchChords())),this.bubble=S?S.charCodeAt(0)===94:!1,this.command=this.bubble?S.substr(1):S,this.commandArgs=p,this.when=_,this.isDefault=v,this.extensionId=b,this.isBuiltinExtension=a}}e.ResolvedKeybindingItem=L;function k(y){const E=[];for(let S=0,p=y.length;S<p;S++){const _=y[S];if(!_)return[];E.push(_)}return E}e.toEmptyArrayIfContainsNull=k}),define(se[776],oe([1,0,65,125,774,348]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.USLayoutResolvedKeybinding=void 0;class S extends y.BaseResolvedKeybinding{constructor(_,v){super(v,_)}_keyCodeToUILabel(_){if(this._os===2)switch(_){case 15:return\"\\u2190\";case 16:return\"\\u2191\";case 17:return\"\\u2192\";case 18:return\"\\u2193\"}return L.KeyCodeUtils.toString(_)}_getLabel(_){return _.isDuplicateModifierCase()?\"\":this._keyCodeToUILabel(_.keyCode)}_getAriaLabel(_){return _.isDuplicateModifierCase()?\"\":L.KeyCodeUtils.toString(_.keyCode)}_getElectronAccelerator(_){return L.KeyCodeUtils.toElectronAccelerator(_.keyCode)}_getUserSettingsLabel(_){if(_.isDuplicateModifierCase())return\"\";const v=L.KeyCodeUtils.toUserSettingsUS(_.keyCode);return v&&v.toLowerCase()}_getChordDispatch(_){return S.getDispatchStr(_)}static getDispatchStr(_){if(_.isModifierKey())return null;let v=\"\";return _.ctrlKey&&(v+=\"ctrl+\"),_.shiftKey&&(v+=\"shift+\"),_.altKey&&(v+=\"alt+\"),_.metaKey&&(v+=\"meta+\"),v+=L.KeyCodeUtils.toString(_.keyCode),v}_getSingleModifierChordDispatch(_){return _.keyCode===5&&!_.shiftKey&&!_.altKey&&!_.metaKey?\"ctrl\":_.keyCode===4&&!_.ctrlKey&&!_.altKey&&!_.metaKey?\"shift\":_.keyCode===6&&!_.ctrlKey&&!_.shiftKey&&!_.metaKey?\"alt\":_.keyCode===57&&!_.ctrlKey&&!_.shiftKey&&!_.altKey?\"meta\":null}static _scanCodeToKeyCode(_){const v=L.IMMUTABLE_CODE_TO_KEY_CODE[_];if(v!==-1)return v;switch(_){case 10:return 31;case 11:return 32;case 12:return 33;case 13:return 34;case 14:return 35;case 15:return 36;case 16:return 37;case 17:return 38;case 18:return 39;case 19:return 40;case 20:return 41;case 21:return 42;case 22:return 43;case 23:return 44;case 24:return 45;case 25:return 46;case 26:return 47;case 27:return 48;case 28:return 49;case 29:return 50;case 30:return 51;case 31:return 52;case 32:return 53;case 33:return 54;case 34:return 55;case 35:return 56;case 36:return 22;case 37:return 23;case 38:return 24;case 39:return 25;case 40:return 26;case 41:return 27;case 42:return 28;case 43:return 29;case 44:return 30;case 45:return 21;case 51:return 88;case 52:return 86;case 53:return 92;case 54:return 94;case 55:return 93;case 56:return 0;case 57:return 85;case 58:return 95;case 59:return 91;case 60:return 87;case 61:return 89;case 62:return 90;case 106:return 97}return 0}static _toKeyCodeChord(_){if(!_)return null;if(_ instanceof k.KeyCodeChord)return _;const v=this._scanCodeToKeyCode(_.scanCode);return v===0?null:new k.KeyCodeChord(_.ctrlKey,_.shiftKey,_.altKey,_.metaKey,v)}static resolveKeybinding(_,v){const b=(0,E.toEmptyArrayIfContainsNull)(_.chords.map(a=>this._toKeyCodeChord(a)));return b.length>0?[new S(b,v)]:[]}}e.USLayoutResolvedKeybinding=S}),define(se[164],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ILabelService=void 0,e.ILabelService=(0,L.createDecorator)(\"labelService\")}),define(se[123],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ILayoutService=void 0,e.ILayoutService=(0,L.createDecorator)(\"layoutService\")}),define(se[349],oe([1,0,7,44,13,6,33,45,123]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorScopedLayoutService=void 0;let v=class{get mainContainer(){var i,n;return(n=(i=(0,y.firstOrDefault)(this._codeEditorService.listCodeEditors()))===null||i===void 0?void 0:i.getContainerDomNode())!==null&&n!==void 0?n:k.mainWindow.document.body}get activeContainer(){var i,n;const t=(i=this._codeEditorService.getFocusedCodeEditor())!==null&&i!==void 0?i:this._codeEditorService.getActiveCodeEditor();return(n=t?.getContainerDomNode())!==null&&n!==void 0?n:this.mainContainer}get mainContainerDimension(){return L.getClientArea(this.mainContainer)}get activeContainerDimension(){return L.getClientArea(this.activeContainer)}get containers(){return(0,y.coalesce)(this._codeEditorService.listCodeEditors().map(i=>i.getContainerDomNode()))}getContainer(){return this.activeContainer}focus(){var i;(i=this._codeEditorService.getFocusedCodeEditor())===null||i===void 0||i.focus()}constructor(i){this._codeEditorService=i,this.onDidLayoutMainContainer=E.Event.None,this.onDidLayoutActiveContainer=E.Event.None,this.onDidLayoutContainer=E.Event.None,this.onDidChangeActiveContainer=E.Event.None,this.onDidAddContainer=E.Event.None,this.whenActiveContainerStylesLoaded=Promise.resolve(),this.mainContainerOffset={top:0,quickPickTop:0},this.activeContainerOffset={top:0,quickPickTop:0}}};v=ke([ge(0,S.ICodeEditorService)],v);let b=class extends v{get mainContainer(){return this._container}constructor(i,n){super(n),this._container=i}};e.EditorScopedLayoutService=b,e.EditorScopedLayoutService=b=ke([ge(1,S.ICodeEditorService)],b),(0,p.registerSingleton)(_.ILayoutService,v,1)}),define(se[777],oe([1,0,7,44,6,2,69,27,15,123]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AccessibilityService=void 0;let b=class extends E.Disposable{constructor(i,n,t){super(),this._contextKeyService=i,this._layoutService=n,this._configurationService=t,this._accessibilitySupport=0,this._onDidChangeScreenReaderOptimized=new y.Emitter,this._onDidChangeReducedMotion=new y.Emitter,this._accessibilityModeEnabledContext=S.CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService);const r=()=>this._accessibilityModeEnabledContext.set(this.isScreenReaderOptimized());this._register(this._configurationService.onDidChangeConfiguration(f=>{f.affectsConfiguration(\"editor.accessibilitySupport\")&&(r(),this._onDidChangeScreenReaderOptimized.fire()),f.affectsConfiguration(\"workbench.reduceMotion\")&&(this._configMotionReduced=this._configurationService.getValue(\"workbench.reduceMotion\"),this._onDidChangeReducedMotion.fire())})),r(),this._register(this.onDidChangeScreenReaderOptimized(()=>r()));const u=k.mainWindow.matchMedia(\"(prefers-reduced-motion: reduce)\");this._systemMotionReduced=u.matches,this._configMotionReduced=this._configurationService.getValue(\"workbench.reduceMotion\"),this.initReducedMotionListeners(u)}initReducedMotionListeners(i){this._register((0,L.addDisposableListener)(i,\"change\",()=>{this._systemMotionReduced=i.matches,this._configMotionReduced===\"auto\"&&this._onDidChangeReducedMotion.fire()}));const n=()=>{const t=this.isMotionReduced();this._layoutService.mainContainer.classList.toggle(\"reduce-motion\",t),this._layoutService.mainContainer.classList.toggle(\"enable-motion\",!t)};n(),this._register(this.onDidChangeReducedMotion(()=>n()))}get onDidChangeScreenReaderOptimized(){return this._onDidChangeScreenReaderOptimized.event}isScreenReaderOptimized(){const i=this._configurationService.getValue(\"editor.accessibilitySupport\");return i===\"on\"||i===\"auto\"&&this._accessibilitySupport===2}get onDidChangeReducedMotion(){return this._onDidChangeReducedMotion.event}isMotionReduced(){const i=this._configMotionReduced;return i===\"on\"||i===\"auto\"&&this._systemMotionReduced}getAccessibilitySupport(){return this._accessibilitySupport}};e.AccessibilityService=b,e.AccessibilityService=b=ke([ge(0,_.IContextKeyService),ge(1,v.ILayoutService),ge(2,p.IConfigurationService)],b)}),define(se[778],oe([1,0,318,2,123,7]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContextViewService=void 0;let S=class extends k.Disposable{constructor(_){super(),this.layoutService=_,this.currentViewDisposable=k.Disposable.None,this.contextView=this._register(new L.ContextView(this.layoutService.mainContainer,1)),this.layout(),this._register(_.onDidLayoutContainer(()=>this.layout()))}showContextView(_,v,b){let a;v?v===this.layoutService.getContainer((0,E.getWindow)(v))?a=1:b?a=3:a=2:a=1,this.contextView.setContainer(v??this.layoutService.activeContainer,a),this.contextView.show(_);const i=(0,k.toDisposable)(()=>{this.currentViewDisposable===i&&this.hideContextView()});return this.currentViewDisposable=i,i}getContextViewElement(){return this.contextView.getViewElement()}layout(){this.contextView.layout()}hideContextView(_){this.contextView.hide(_)}dispose(){super.dispose(),this.currentViewDisposable.dispose(),this.currentViewDisposable=k.Disposable.None}};e.ContextViewService=S,e.ContextViewService=S=ke([ge(0,y.ILayoutService)],S)}),define(se[64],oe([1,0,6,2,15,8]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CONTEXT_LOG_LEVEL=e.LogLevelToString=e.MultiplexLogger=e.ConsoleLogger=e.AbstractLogger=e.DEFAULT_LOG_LEVEL=e.LogLevel=e.ILogService=void 0,e.ILogService=(0,E.createDecorator)(\"logService\");var S;(function(a){a[a.Off=0]=\"Off\",a[a.Trace=1]=\"Trace\",a[a.Debug=2]=\"Debug\",a[a.Info=3]=\"Info\",a[a.Warning=4]=\"Warning\",a[a.Error=5]=\"Error\"})(S||(e.LogLevel=S={})),e.DEFAULT_LOG_LEVEL=S.Info;class p extends k.Disposable{constructor(){super(...arguments),this.level=e.DEFAULT_LOG_LEVEL,this._onDidChangeLogLevel=this._register(new L.Emitter),this.onDidChangeLogLevel=this._onDidChangeLogLevel.event}setLevel(i){this.level!==i&&(this.level=i,this._onDidChangeLogLevel.fire(this.level))}getLevel(){return this.level}checkLogLevel(i){return this.level!==S.Off&&this.level<=i}}e.AbstractLogger=p;class _ extends p{constructor(i=e.DEFAULT_LOG_LEVEL,n=!0){super(),this.useColors=n,this.setLevel(i)}trace(i,...n){this.checkLogLevel(S.Trace)&&(this.useColors?console.log(\"%cTRACE\",\"color: #888\",i,...n):console.log(i,...n))}debug(i,...n){this.checkLogLevel(S.Debug)&&(this.useColors?console.log(\"%cDEBUG\",\"background: #eee; color: #888\",i,...n):console.log(i,...n))}info(i,...n){this.checkLogLevel(S.Info)&&(this.useColors?console.log(\"%c INFO\",\"color: #33f\",i,...n):console.log(i,...n))}warn(i,...n){this.checkLogLevel(S.Warning)&&(this.useColors?console.log(\"%c WARN\",\"color: #993\",i,...n):console.log(i,...n))}error(i,...n){this.checkLogLevel(S.Error)&&(this.useColors?console.log(\"%c  ERR\",\"color: #f33\",i,...n):console.error(i,...n))}}e.ConsoleLogger=_;class v extends p{constructor(i){super(),this.loggers=i,i.length&&this.setLevel(i[0].getLevel())}setLevel(i){for(const n of this.loggers)n.setLevel(i);super.setLevel(i)}trace(i,...n){for(const t of this.loggers)t.trace(i,...n)}debug(i,...n){for(const t of this.loggers)t.debug(i,...n)}info(i,...n){for(const t of this.loggers)t.info(i,...n)}warn(i,...n){for(const t of this.loggers)t.warn(i,...n)}error(i,...n){for(const t of this.loggers)t.error(i,...n)}dispose(){for(const i of this.loggers)i.dispose();super.dispose()}}e.MultiplexLogger=v;function b(a){switch(a){case S.Trace:return\"trace\";case S.Debug:return\"debug\";case S.Info:return\"info\";case S.Warning:return\"warn\";case S.Error:return\"error\";case S.Off:return\"off\"}}e.LogLevelToString=b,e.CONTEXT_LOG_LEVEL=new y.RawContextKey(\"logLevel\",b(S.Info))}),define(se[190],oe([1,0,54,7,84,46,266,14,6,2,109,11,280,24,69,64]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextAreaWrapper=e.ClipboardEventUtils=e.TextAreaInput=e.InMemoryClipboardMetadataManager=e.CopyOptions=e.TextAreaSyntethicEvents=void 0;var u;(function(l){l.Tap=\"-monaco-textarea-synthetic-tap\"})(u||(e.TextAreaSyntethicEvents=u={})),e.CopyOptions={forceCopyWithSyntaxHighlighting:!1};class f{constructor(){this._lastState=null}set(o,g){this._lastState={lastCopiedValue:o,data:g}}get(o){return this._lastState&&this._lastState.lastCopiedValue===o?this._lastState.data:(this._lastState=null,null)}}e.InMemoryClipboardMetadataManager=f,f.INSTANCE=new f;class c{constructor(){this._lastTypeTextLength=0}handleCompositionUpdate(o){o=o||\"\";const g={text:o,replacePrevCharCnt:this._lastTypeTextLength,replaceNextCharCnt:0,positionDelta:0};return this._lastTypeTextLength=o.length,g}}let d=class extends v.Disposable{get textAreaState(){return this._textAreaState}constructor(o,g,h,m,C,w){super(),this._host=o,this._textArea=g,this._OS=h,this._browser=m,this._accessibilityService=C,this._logService=w,this._onFocus=this._register(new _.Emitter),this.onFocus=this._onFocus.event,this._onBlur=this._register(new _.Emitter),this.onBlur=this._onBlur.event,this._onKeyDown=this._register(new _.Emitter),this.onKeyDown=this._onKeyDown.event,this._onKeyUp=this._register(new _.Emitter),this.onKeyUp=this._onKeyUp.event,this._onCut=this._register(new _.Emitter),this.onCut=this._onCut.event,this._onPaste=this._register(new _.Emitter),this.onPaste=this._onPaste.event,this._onType=this._register(new _.Emitter),this.onType=this._onType.event,this._onCompositionStart=this._register(new _.Emitter),this.onCompositionStart=this._onCompositionStart.event,this._onCompositionUpdate=this._register(new _.Emitter),this.onCompositionUpdate=this._onCompositionUpdate.event,this._onCompositionEnd=this._register(new _.Emitter),this.onCompositionEnd=this._onCompositionEnd.event,this._onSelectionChangeRequest=this._register(new _.Emitter),this.onSelectionChangeRequest=this._onSelectionChangeRequest.event,this._asyncFocusGainWriteScreenReaderContent=this._register(new v.MutableDisposable),this._asyncTriggerCut=this._register(new p.RunOnceScheduler(()=>this._onCut.fire(),0)),this._textAreaState=i.TextAreaState.EMPTY,this._selectionChangeListener=null,this._accessibilityService.isScreenReaderOptimized()&&this.writeNativeTextAreaContent(\"ctor\"),this._register(_.Event.runAndSubscribe(this._accessibilityService.onDidChangeScreenReaderOptimized,()=>{this._accessibilityService.isScreenReaderOptimized()&&!this._asyncFocusGainWriteScreenReaderContent.value?this._asyncFocusGainWriteScreenReaderContent.value=this._register(new p.RunOnceScheduler(()=>this.writeNativeTextAreaContent(\"asyncFocusGain\"),0)):this._asyncFocusGainWriteScreenReaderContent.clear()})),this._hasFocus=!1,this._currentComposition=null;let D=null;this._register(this._textArea.onKeyDown(I=>{const T=new E.StandardKeyboardEvent(I);(T.keyCode===114||this._currentComposition&&T.keyCode===1)&&T.stopPropagation(),T.equals(9)&&T.preventDefault(),D=T,this._onKeyDown.fire(T)})),this._register(this._textArea.onKeyUp(I=>{const T=new E.StandardKeyboardEvent(I);this._onKeyUp.fire(T)})),this._register(this._textArea.onCompositionStart(I=>{i._debugComposition&&console.log(\"[compositionstart]\",I);const T=new c;if(this._currentComposition){this._currentComposition=T;return}if(this._currentComposition=T,this._OS===2&&D&&D.equals(114)&&this._textAreaState.selectionStart===this._textAreaState.selectionEnd&&this._textAreaState.selectionStart>0&&this._textAreaState.value.substr(this._textAreaState.selectionStart-1,1)===I.data&&(D.code===\"ArrowRight\"||D.code===\"ArrowLeft\")){i._debugComposition&&console.log(\"[compositionstart] Handling long press case on macOS + arrow key\",I),T.handleCompositionUpdate(\"x\"),this._onCompositionStart.fire({data:I.data});return}if(this._browser.isAndroid){this._onCompositionStart.fire({data:I.data});return}this._onCompositionStart.fire({data:I.data})})),this._register(this._textArea.onCompositionUpdate(I=>{i._debugComposition&&console.log(\"[compositionupdate]\",I);const T=this._currentComposition;if(!T)return;if(this._browser.isAndroid){const P=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),N=i.TextAreaState.deduceAndroidCompositionInput(this._textAreaState,P);this._textAreaState=P,this._onType.fire(N),this._onCompositionUpdate.fire(I);return}const A=T.handleCompositionUpdate(I.data);this._textAreaState=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),this._onType.fire(A),this._onCompositionUpdate.fire(I)})),this._register(this._textArea.onCompositionEnd(I=>{i._debugComposition&&console.log(\"[compositionend]\",I);const T=this._currentComposition;if(!T)return;if(this._currentComposition=null,this._browser.isAndroid){const P=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),N=i.TextAreaState.deduceAndroidCompositionInput(this._textAreaState,P);this._textAreaState=P,this._onType.fire(N),this._onCompositionEnd.fire();return}const A=T.handleCompositionUpdate(I.data);this._textAreaState=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),this._onType.fire(A),this._onCompositionEnd.fire()})),this._register(this._textArea.onInput(I=>{if(i._debugComposition&&console.log(\"[input]\",I),this._textArea.setIgnoreSelectionChangeTime(\"received input event\"),this._currentComposition)return;const T=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),A=i.TextAreaState.deduceInput(this._textAreaState,T,this._OS===2);A.replacePrevCharCnt===0&&A.text.length===1&&(a.isHighSurrogate(A.text.charCodeAt(0))||A.text.charCodeAt(0)===127)||(this._textAreaState=T,(A.text!==\"\"||A.replacePrevCharCnt!==0||A.replaceNextCharCnt!==0||A.positionDelta!==0)&&this._onType.fire(A))})),this._register(this._textArea.onCut(I=>{this._textArea.setIgnoreSelectionChangeTime(\"received cut event\"),this._ensureClipboardGetsEditorSelection(I),this._asyncTriggerCut.schedule()})),this._register(this._textArea.onCopy(I=>{this._ensureClipboardGetsEditorSelection(I)})),this._register(this._textArea.onPaste(I=>{if(this._textArea.setIgnoreSelectionChangeTime(\"received paste event\"),I.preventDefault(),!I.clipboardData)return;let[T,A]=e.ClipboardEventUtils.getTextData(I.clipboardData);T&&(A=A||f.INSTANCE.get(T),this._onPaste.fire({text:T,metadata:A}))})),this._register(this._textArea.onFocus(()=>{const I=this._hasFocus;this._setHasFocus(!0),this._accessibilityService.isScreenReaderOptimized()&&this._browser.isSafari&&!I&&this._hasFocus&&(this._asyncFocusGainWriteScreenReaderContent.value||(this._asyncFocusGainWriteScreenReaderContent.value=new p.RunOnceScheduler(()=>this.writeNativeTextAreaContent(\"asyncFocusGain\"),0)),this._asyncFocusGainWriteScreenReaderContent.value.schedule())})),this._register(this._textArea.onBlur(()=>{this._currentComposition&&(this._currentComposition=null,this.writeNativeTextAreaContent(\"blurWithoutCompositionEnd\"),this._onCompositionEnd.fire()),this._setHasFocus(!1)})),this._register(this._textArea.onSyntheticTap(()=>{this._browser.isAndroid&&this._currentComposition&&(this._currentComposition=null,this.writeNativeTextAreaContent(\"tapWithoutCompositionEnd\"),this._onCompositionEnd.fire())}))}_installSelectionChangeListener(){let o=0;return k.addDisposableListener(this._textArea.ownerDocument,\"selectionchange\",g=>{if(S.inputLatency.onSelectionChange(),!this._hasFocus||this._currentComposition||!this._browser.isChrome)return;const h=Date.now(),m=h-o;if(o=h,m<5)return;const C=h-this._textArea.getIgnoreSelectionChangeTime();if(this._textArea.resetSelectionChangeTime(),C<100||!this._textAreaState.selection)return;const w=this._textArea.getValue();if(this._textAreaState.value!==w)return;const D=this._textArea.getSelectionStart(),I=this._textArea.getSelectionEnd();if(this._textAreaState.selectionStart===D&&this._textAreaState.selectionEnd===I)return;const T=this._textAreaState.deduceEditorPosition(D),A=this._host.deduceModelPosition(T[0],T[1],T[2]),P=this._textAreaState.deduceEditorPosition(I),N=this._host.deduceModelPosition(P[0],P[1],P[2]),M=new n.Selection(A.lineNumber,A.column,N.lineNumber,N.column);this._onSelectionChangeRequest.fire(M)})}dispose(){super.dispose(),this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null)}focusTextArea(){this._setHasFocus(!0),this.refreshFocusState()}isFocused(){return this._hasFocus}refreshFocusState(){this._setHasFocus(this._textArea.hasFocus())}_setHasFocus(o){this._hasFocus!==o&&(this._hasFocus=o,this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null),this._hasFocus&&(this._selectionChangeListener=this._installSelectionChangeListener()),this._hasFocus&&this.writeNativeTextAreaContent(\"focusgain\"),this._hasFocus?this._onFocus.fire():this._onBlur.fire())}_setAndWriteTextAreaState(o,g){this._hasFocus||(g=g.collapseSelection()),g.writeToTextArea(o,this._textArea,this._hasFocus),this._textAreaState=g}writeNativeTextAreaContent(o){!this._accessibilityService.isScreenReaderOptimized()&&o===\"render\"||this._currentComposition||(this._logService.trace(`writeTextAreaState(reason: ${o})`),this._setAndWriteTextAreaState(o,this._host.getScreenReaderContent()))}_ensureClipboardGetsEditorSelection(o){const g=this._host.getDataToCopy(),h={version:1,isFromEmptySelection:g.isFromEmptySelection,multicursorText:g.multicursorText,mode:g.mode};f.INSTANCE.set(this._browser.isFirefox?g.text.replace(/\\r\\n/g,`\n`):g.text,h),o.preventDefault(),o.clipboardData&&e.ClipboardEventUtils.setTextData(o.clipboardData,g.text,g.html,h)}};e.TextAreaInput=d,e.TextAreaInput=d=ke([ge(4,t.IAccessibilityService),ge(5,r.ILogService)],d),e.ClipboardEventUtils={getTextData(l){const o=l.getData(b.Mimes.text);let g=null;const h=l.getData(\"vscode-editor-data\");if(typeof h==\"string\")try{g=JSON.parse(h),g.version!==1&&(g=null)}catch{}return o.length===0&&g===null&&l.files.length>0?[Array.prototype.slice.call(l.files,0).map(C=>C.name).join(`\n`),null]:[o,g]},setTextData(l,o,g,h){l.setData(b.Mimes.text,o),typeof g==\"string\"&&l.setData(\"text/html\",g),l.setData(\"vscode-editor-data\",JSON.stringify(h))}};class s extends v.Disposable{get ownerDocument(){return this._actual.ownerDocument}constructor(o){super(),this._actual=o,this.onKeyDown=this._register(new y.DomEmitter(this._actual,\"keydown\")).event,this.onKeyUp=this._register(new y.DomEmitter(this._actual,\"keyup\")).event,this.onCompositionStart=this._register(new y.DomEmitter(this._actual,\"compositionstart\")).event,this.onCompositionUpdate=this._register(new y.DomEmitter(this._actual,\"compositionupdate\")).event,this.onCompositionEnd=this._register(new y.DomEmitter(this._actual,\"compositionend\")).event,this.onBeforeInput=this._register(new y.DomEmitter(this._actual,\"beforeinput\")).event,this.onInput=this._register(new y.DomEmitter(this._actual,\"input\")).event,this.onCut=this._register(new y.DomEmitter(this._actual,\"cut\")).event,this.onCopy=this._register(new y.DomEmitter(this._actual,\"copy\")).event,this.onPaste=this._register(new y.DomEmitter(this._actual,\"paste\")).event,this.onFocus=this._register(new y.DomEmitter(this._actual,\"focus\")).event,this.onBlur=this._register(new y.DomEmitter(this._actual,\"blur\")).event,this._onSyntheticTap=this._register(new _.Emitter),this.onSyntheticTap=this._onSyntheticTap.event,this._ignoreSelectionChangeTime=0,this._register(this.onKeyDown(()=>S.inputLatency.onKeyDown())),this._register(this.onBeforeInput(()=>S.inputLatency.onBeforeInput())),this._register(this.onInput(()=>S.inputLatency.onInput())),this._register(this.onKeyUp(()=>S.inputLatency.onKeyUp())),this._register(k.addDisposableListener(this._actual,u.Tap,()=>this._onSyntheticTap.fire()))}hasFocus(){const o=k.getShadowRoot(this._actual);return o?o.activeElement===this._actual:this._actual.isConnected?k.getActiveElement()===this._actual:!1}setIgnoreSelectionChangeTime(o){this._ignoreSelectionChangeTime=Date.now()}getIgnoreSelectionChangeTime(){return this._ignoreSelectionChangeTime}resetSelectionChangeTime(){this._ignoreSelectionChangeTime=0}getValue(){return this._actual.value}setValue(o,g){const h=this._actual;h.value!==g&&(this.setIgnoreSelectionChangeTime(\"setValue\"),h.value=g)}getSelectionStart(){return this._actual.selectionDirection===\"backward\"?this._actual.selectionEnd:this._actual.selectionStart}getSelectionEnd(){return this._actual.selectionDirection===\"backward\"?this._actual.selectionStart:this._actual.selectionEnd}setSelectionRange(o,g,h){const m=this._actual;let C=null;const w=k.getShadowRoot(m);w?C=w.activeElement:C=k.getActiveElement();const D=k.getWindow(C),I=C===m,T=m.selectionStart,A=m.selectionEnd;if(I&&T===g&&A===h){L.isFirefox&&D.parent!==D&&m.focus();return}if(I){this.setIgnoreSelectionChangeTime(\"setSelectionRange\"),m.setSelectionRange(g,h),L.isFirefox&&D.parent!==D&&m.focus();return}try{const P=k.saveParentsScrollTop(m);this.setIgnoreSelectionChangeTime(\"setSelectionRange\"),m.focus(),m.setSelectionRange(g,h),k.restoreParentsScrollTop(m,P)}catch{}}}e.TextAreaWrapper=s}),define(se[79],oe([1,0,111,53,145,243,45,8,64,47]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LanguageFeatureDebounceService=e.ILanguageFeatureDebounceService=void 0,e.ILanguageFeatureDebounceService=(0,p.createDecorator)(\"ILanguageFeatureDebounceService\");var b;(function(t){const r=new WeakMap;let u=0;function f(c){let d=r.get(c);return d===void 0&&(d=++u,r.set(c,d)),d}t.of=f})(b||(b={}));class a{constructor(r){this._default=r}get(r){return this._default}update(r,u){return this._default}default(){return this._default}}class i{constructor(r,u,f,c,d,s){this._logService=r,this._name=u,this._registry=f,this._default=c,this._min=d,this._max=s,this._cache=new k.LRUCache(50,.7)}_key(r){return r.id+this._registry.all(r).reduce((u,f)=>(0,L.doHash)(b.of(f),u),0)}get(r){const u=this._key(r),f=this._cache.get(u);return f?(0,y.clamp)(f.value,this._min,this._max):this.default()}update(r,u){const f=this._key(r);let c=this._cache.get(f);c||(c=new y.SlidingWindowAverage(6),this._cache.set(f,c));const d=(0,y.clamp)(c.update(u),this._min,this._max);return(0,v.matchesScheme)(r.uri,\"output\")||this._logService.trace(`[DEBOUNCE: ${this._name}] for ${r.uri.toString()} is ${d}ms`),d}_overall(){const r=new y.MovingAverage;for(const[,u]of this._cache)r.update(u.value);return r.value}default(){const r=this._overall()|0||this._default;return(0,y.clamp)(r,this._min,this._max)}}let n=class{constructor(r,u){this._logService=r,this._data=new Map,this._isDev=u.isExtensionDevelopment||!u.isBuilt}for(r,u,f){var c,d,s;const l=(c=f?.min)!==null&&c!==void 0?c:50,o=(d=f?.max)!==null&&d!==void 0?d:l**2,g=(s=f?.key)!==null&&s!==void 0?s:void 0,h=`${b.of(r)},${l}${g?\",\"+g:\"\"}`;let m=this._data.get(h);return m||(this._isDev?m=new i(this._logService,u,r,this._overallAverage()|0||l*1.5,l,o):(this._logService.debug(`[DEBOUNCE: ${u}] is disabled in developed mode`),m=new a(l*1.5)),this._data.set(h,m)),m}_overallAverage(){const r=new y.MovingAverage;for(const u of this._data.values())r.update(u.default());return r.value}};e.LanguageFeatureDebounceService=n,e.LanguageFeatureDebounceService=n=ke([ge(0,_.ILogService),ge(1,E.IEnvironmentService)],n),(0,S.registerSingleton)(e.ILanguageFeatureDebounceService,n,1)}),define(se[165],oe([1,0,13,19,12,52,53,10,5,79,8,45,51,2,18]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OutlineModelService=e.IOutlineModelService=e.OutlineModel=e.OutlineGroup=e.OutlineElement=e.TreeElement=void 0;class r{remove(){var l;(l=this.parent)===null||l===void 0||l.children.delete(this.id)}static findId(l,o){let g;typeof l==\"string\"?g=`${o.id}/${l}`:(g=`${o.id}/${l.name}`,o.children.get(g)!==void 0&&(g=`${o.id}/${l.name}_${l.range.startLineNumber}_${l.range.startColumn}`));let h=g;for(let m=0;o.children.get(h)!==void 0;m++)h=`${g}_${m}`;return h}static empty(l){return l.children.size===0}}e.TreeElement=r;class u extends r{constructor(l,o,g){super(),this.id=l,this.parent=o,this.symbol=g,this.children=new Map}}e.OutlineElement=u;class f extends r{constructor(l,o,g,h){super(),this.id=l,this.parent=o,this.label=g,this.order=h,this.children=new Map}}e.OutlineGroup=f;class c extends r{static create(l,o,g){const h=new k.CancellationTokenSource(g),m=new c(o.uri),C=l.ordered(o),w=C.map((I,T)=>{var A;const P=r.findId(`provider_${T}`,m),N=new f(P,m,(A=I.displayName)!==null&&A!==void 0?A:\"Unknown Outline Provider\",T);return Promise.resolve(I.provideDocumentSymbols(o,h.token)).then(M=>{for(const R of M||[])c._makeOutlineElement(R,N);return N},M=>((0,y.onUnexpectedExternalError)(M),N)).then(M=>{r.empty(M)?M.remove():m._groups.set(P,M)})}),D=l.onDidChange(()=>{const I=l.ordered(o);(0,L.equals)(I,C)||h.cancel()});return Promise.all(w).then(()=>h.token.isCancellationRequested&&!g.isCancellationRequested?c.create(l,o,g):m._compact()).finally(()=>{h.dispose(),D.dispose(),h.dispose()})}static _makeOutlineElement(l,o){const g=r.findId(l,o),h=new u(g,o,l);if(l.children)for(const m of l.children)c._makeOutlineElement(m,h);o.children.set(h.id,h)}constructor(l){super(),this.uri=l,this.id=\"root\",this.parent=void 0,this._groups=new Map,this.children=new Map,this.id=\"root\",this.parent=void 0}_compact(){let l=0;for(const[o,g]of this._groups)g.children.size===0?this._groups.delete(o):l+=1;if(l!==1)this.children=this._groups;else{const o=E.Iterable.first(this._groups.values());for(const[,g]of o.children)g.parent=this,this.children.set(g.id,g)}return this}getTopLevelSymbols(){const l=[];for(const o of this.children.values())o instanceof u?l.push(o.symbol):l.push(...E.Iterable.map(o.children.values(),g=>g.symbol));return l.sort((o,g)=>_.Range.compareRangesUsingStarts(o.range,g.range))}asListOfDocumentSymbols(){const l=this.getTopLevelSymbols(),o=[];return c._flattenDocumentSymbols(o,l,\"\"),o.sort((g,h)=>p.Position.compare(_.Range.getStartPosition(g.range),_.Range.getStartPosition(h.range))||p.Position.compare(_.Range.getEndPosition(h.range),_.Range.getEndPosition(g.range)))}static _flattenDocumentSymbols(l,o,g){for(const h of o)l.push({kind:h.kind,tags:h.tags,name:h.name,detail:h.detail,containerName:h.containerName||g,range:h.range,selectionRange:h.selectionRange,children:void 0}),h.children&&c._flattenDocumentSymbols(l,h.children,h.name)}}e.OutlineModel=c,e.IOutlineModelService=(0,b.createDecorator)(\"IOutlineModelService\");let d=class{constructor(l,o,g){this._languageFeaturesService=l,this._disposables=new n.DisposableStore,this._cache=new S.LRUCache(10,.7),this._debounceInformation=o.for(l.documentSymbolProvider,\"DocumentSymbols\",{min:350}),this._disposables.add(g.onModelRemoved(h=>{this._cache.delete(h.id)}))}dispose(){this._disposables.dispose()}async getOrCreate(l,o){const g=this._languageFeaturesService.documentSymbolProvider,h=g.ordered(l);let m=this._cache.get(l.id);if(!m||m.versionId!==l.getVersionId()||!(0,L.equals)(m.provider,h)){const w=new k.CancellationTokenSource;m={versionId:l.getVersionId(),provider:h,promiseCnt:0,source:w,promise:c.create(g,l,w.token),model:void 0},this._cache.set(l.id,m);const D=Date.now();m.promise.then(I=>{m.model=I,this._debounceInformation.update(l,Date.now()-D)}).catch(I=>{this._cache.delete(l.id)})}if(m.model)return m.model;m.promiseCnt+=1;const C=o.onCancellationRequested(()=>{--m.promiseCnt===0&&(m.source.cancel(),this._cache.delete(l.id))});try{return await m.promise}finally{C.dispose()}}};e.OutlineModelService=d,e.OutlineModelService=d=ke([ge(0,t.ILanguageFeaturesService),ge(1,v.ILanguageFeatureDebounceService),ge(2,i.IModelService)],d),(0,a.registerSingleton)(e.IOutlineModelService,d,1)}),define(se[779],oe([1,0,13,35,342,87,18,165,2,6]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});let b=class extends _.Disposable{constructor(i,n,t){super(),this._textModel=i,this._languageFeaturesService=n,this._outlineModelService=t,this._currentModel=(0,k.observableValue)(this,void 0);const r=(0,k.observableSignalFromEvent)(\"documentSymbolProvider.onDidChange\",this._languageFeaturesService.documentSymbolProvider.onDidChange),u=(0,k.observableSignalFromEvent)(\"_textModel.onDidChangeContent\",v.Event.debounce(f=>this._textModel.onDidChangeContent(f),()=>{},100));this._register((0,k.autorunWithStore)(async(f,c)=>{r.read(f),u.read(f);const d=c.add(new E.DisposableCancellationTokenSource),s=await this._outlineModelService.getOrCreate(this._textModel,d.token);c.isDisposed||this._currentModel.set(s,void 0)}))}getBreadcrumbItems(i,n){const t=this._currentModel.read(n);if(!t)return[];const r=t.asListOfDocumentSymbols().filter(u=>i.contains(u.range.startLineNumber)&&!i.contains(u.range.endLineNumber));return r.sort((0,L.reverseOrder)((0,L.compareBy)(u=>u.range.endLineNumber-u.range.startLineNumber,L.numberComparator))),r.map(u=>({name:u.name,kind:u.kind,startLineNumber:u.range.startLineNumber}))}};b=ke([ge(1,S.ILanguageFeaturesService),ge(2,p.IOutlineModelService)],b),y.HideUnchangedRegionsFeature.setBreadcrumbsSourceFactory((a,i)=>i.createInstance(b,a))}),define(se[780],oe([1,0,19,20,22,68,165,25]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),p.CommandsRegistry.registerCommand(\"_executeDocumentSymbolProvider\",async function(_,...v){const[b]=v;(0,k.assertType)(y.URI.isUri(b));const a=_.get(S.IOutlineModelService),n=await _.get(E.ITextModelService).createModelReference(b);try{return(await a.getOrCreate(n.object.textEditorModel,L.CancellationToken.None)).getTopLevelSymbols()}finally{n.dispose()}})}),define(se[781],oe([1,0,54,7,44,14,6,111,2,123,64]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";var a;Object.defineProperty(e,\"__esModule\",{value:!0}),e.BrowserClipboardService=void 0;let i=a=class extends _.Disposable{constructor(t,r){super(),this.layoutService=t,this.logService=r,this.mapTextToType=new Map,this.findText=\"\",this.resources=[],this.resourcesStateHash=void 0,(L.isSafari||L.isWebkitWebView)&&this.installWebKitWriteTextWorkaround(),this._register(S.Event.runAndSubscribe(k.onDidRegisterWindow,({window:u,disposables:f})=>{f.add((0,k.addDisposableListener)(u.document,\"copy\",()=>this.clearResources()))},{window:y.mainWindow,disposables:this._store}))}installWebKitWriteTextWorkaround(){const t=()=>{const r=new E.DeferredPromise;this.webKitPendingClipboardWritePromise&&!this.webKitPendingClipboardWritePromise.isSettled&&this.webKitPendingClipboardWritePromise.cancel(),this.webKitPendingClipboardWritePromise=r,navigator.clipboard.write([new ClipboardItem({\"text/plain\":r.p})]).catch(async u=>{(!(u instanceof Error)||u.name!==\"NotAllowedError\"||!r.isRejected)&&this.logService.error(u)})};this._register(S.Event.runAndSubscribe(this.layoutService.onDidAddContainer,({container:r,disposables:u})=>{u.add((0,k.addDisposableListener)(r,\"click\",t)),u.add((0,k.addDisposableListener)(r,\"keydown\",t))},{container:this.layoutService.mainContainer,disposables:this._store}))}async writeText(t,r){if(this.writeResources([]),r){this.mapTextToType.set(r,t);return}if(this.webKitPendingClipboardWritePromise)return this.webKitPendingClipboardWritePromise.complete(t);try{return await navigator.clipboard.writeText(t)}catch(u){console.error(u)}this.fallbackWriteText(t)}fallbackWriteText(t){const r=(0,k.getActiveDocument)(),u=r.activeElement,f=r.body.appendChild((0,k.$)(\"textarea\",{\"aria-hidden\":!0}));f.style.height=\"1px\",f.style.width=\"1px\",f.style.position=\"absolute\",f.value=t,f.focus(),f.select(),r.execCommand(\"copy\"),u instanceof HTMLElement&&u.focus(),r.body.removeChild(f)}async readText(t){if(t)return this.mapTextToType.get(t)||\"\";try{return await navigator.clipboard.readText()}catch(r){console.error(r)}return\"\"}async readFindText(){return this.findText}async writeFindText(t){this.findText=t}async writeResources(t){t.length===0?this.clearResources():(this.resources=t,this.resourcesStateHash=await this.computeResourcesStateHash())}async readResources(){const t=await this.computeResourcesStateHash();return this.resourcesStateHash!==t&&this.clearResources(),this.resources}async computeResourcesStateHash(){if(this.resources.length===0)return;const t=await this.readText();return(0,p.hash)(t.substring(0,a.MAX_RESOURCE_STATE_SOURCE_LENGTH))}clearResources(){this.resources=[],this.resourcesStateHash=void 0}};e.BrowserClipboardService=i,i.MAX_RESOURCE_STATE_SOURCE_LENGTH=1e3,e.BrowserClipboardService=i=a=ke([ge(0,v.ILayoutService),ge(1,b.ILogService)],i)}),define(se[782],oe([1,0,2,64]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LogService=void 0;class y extends L.Disposable{constructor(S,p=[]){super(),this.logger=new k.MultiplexLogger([S,...p]),this._register(S.onDidChangeLogLevel(_=>this.setLevel(_)))}get onDidChangeLogLevel(){return this.logger.onDidChangeLogLevel}setLevel(S){this.logger.setLevel(S)}getLevel(){return this.logger.getLevel()}trace(S,...p){this.logger.trace(S,...p)}debug(S,...p){this.logger.debug(S,...p)}info(S,...p){this.logger.info(S,...p)}warn(S,...p){this.logger.warn(S,...p)}error(S,...p){this.logger.error(S,...p)}}e.LogService=y}),define(se[97],oe([1,0,100,745,8]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IMarkerService=e.IMarkerData=e.MarkerSeverity=void 0;var E;(function(p){p[p.Hint=1]=\"Hint\",p[p.Info=2]=\"Info\",p[p.Warning=4]=\"Warning\",p[p.Error=8]=\"Error\"})(E||(e.MarkerSeverity=E={})),function(p){function _(n,t){return t-n}p.compare=_;const v=Object.create(null);v[p.Error]=(0,k.localize)(0,null),v[p.Warning]=(0,k.localize)(1,null),v[p.Info]=(0,k.localize)(2,null);function b(n){return v[n]||\"\"}p.toString=b;function a(n){switch(n){case L.default.Error:return p.Error;case L.default.Warning:return p.Warning;case L.default.Info:return p.Info;case L.default.Ignore:return p.Hint}}p.fromSeverity=a;function i(n){switch(n){case p.Error:return L.default.Error;case p.Warning:return L.default.Warning;case p.Info:return L.default.Info;case p.Hint:return L.default.Ignore}}p.toSeverity=i}(E||(e.MarkerSeverity=E={}));var S;(function(p){const _=\"\";function v(a){return b(a,!0)}p.makeKey=v;function b(a,i){const n=[_];return a.source?n.push(a.source.replace(\"\\xA6\",\"\\\\\\xA6\")):n.push(_),a.code?typeof a.code==\"string\"?n.push(a.code.replace(\"\\xA6\",\"\\\\\\xA6\")):n.push(a.code.value.replace(\"\\xA6\",\"\\\\\\xA6\")):n.push(_),a.severity!==void 0&&a.severity!==null?n.push(E.toString(a.severity)):n.push(_),a.message&&i?n.push(a.message.replace(\"\\xA6\",\"\\\\\\xA6\")):n.push(_),a.startLineNumber!==void 0&&a.startLineNumber!==null?n.push(a.startLineNumber.toString()):n.push(_),a.startColumn!==void 0&&a.startColumn!==null?n.push(a.startColumn.toString()):n.push(_),a.endLineNumber!==void 0&&a.endLineNumber!==null?n.push(a.endLineNumber.toString()):n.push(_),a.endColumn!==void 0&&a.endColumn!==null?n.push(a.endColumn.toString()):n.push(_),n.push(_),n.join(\"\\xA6\")}p.makeKeyOptionalMessage=b})(S||(e.IMarkerData=S={})),e.IMarkerService=(0,y.createDecorator)(\"markerService\")}),define(se[783],oe([1,0,13,6,2,66,11,22,5,45,8,97,27]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IMarkerNavigationService=e.MarkerList=e.MarkerCoordinate=void 0;class n{constructor(f,c,d){this.marker=f,this.index=c,this.total=d}}e.MarkerCoordinate=n;let t=class{constructor(f,c,d){this._markerService=c,this._configService=d,this._onDidChange=new k.Emitter,this.onDidChange=this._onDidChange.event,this._dispoables=new y.DisposableStore,this._markers=[],this._nextIdx=-1,p.URI.isUri(f)?this._resourceFilter=g=>g.toString()===f.toString():f&&(this._resourceFilter=f);const s=this._configService.getValue(\"problems.sortOrder\"),l=(g,h)=>{let m=(0,S.compare)(g.resource.toString(),h.resource.toString());return m===0&&(s===\"position\"?m=_.Range.compareRangesUsingStarts(g,h)||a.MarkerSeverity.compare(g.severity,h.severity):m=a.MarkerSeverity.compare(g.severity,h.severity)||_.Range.compareRangesUsingStarts(g,h)),m},o=()=>{this._markers=this._markerService.read({resource:p.URI.isUri(f)?f:void 0,severities:a.MarkerSeverity.Error|a.MarkerSeverity.Warning|a.MarkerSeverity.Info}),typeof f==\"function\"&&(this._markers=this._markers.filter(g=>this._resourceFilter(g.resource))),this._markers.sort(l)};o(),this._dispoables.add(c.onMarkerChanged(g=>{(!this._resourceFilter||g.some(h=>this._resourceFilter(h)))&&(o(),this._nextIdx=-1,this._onDidChange.fire())}))}dispose(){this._dispoables.dispose(),this._onDidChange.dispose()}matches(f){return!this._resourceFilter&&!f?!0:!this._resourceFilter||!f?!1:this._resourceFilter(f)}get selected(){const f=this._markers[this._nextIdx];return f&&new n(f,this._nextIdx+1,this._markers.length)}_initIdx(f,c,d){let s=!1,l=this._markers.findIndex(o=>o.resource.toString()===f.uri.toString());l<0&&(l=(0,L.binarySearch)(this._markers,{resource:f.uri},(o,g)=>(0,S.compare)(o.resource.toString(),g.resource.toString())),l<0&&(l=~l));for(let o=l;o<this._markers.length;o++){let g=_.Range.lift(this._markers[o]);if(g.isEmpty()){const h=f.getWordAtPosition(g.getStartPosition());h&&(g=new _.Range(g.startLineNumber,h.startColumn,g.startLineNumber,h.endColumn))}if(c&&(g.containsPosition(c)||c.isBeforeOrEqual(g.getStartPosition()))){this._nextIdx=o,s=!0;break}if(this._markers[o].resource.toString()!==f.uri.toString())break}s||(this._nextIdx=d?0:this._markers.length-1),this._nextIdx<0&&(this._nextIdx=this._markers.length-1)}resetIndex(){this._nextIdx=-1}move(f,c,d){if(this._markers.length===0)return!1;const s=this._nextIdx;return this._nextIdx===-1?this._initIdx(c,d,f):f?this._nextIdx=(this._nextIdx+1)%this._markers.length:f||(this._nextIdx=(this._nextIdx-1+this._markers.length)%this._markers.length),s!==this._nextIdx}find(f,c){let d=this._markers.findIndex(s=>s.resource.toString()===f.toString());if(!(d<0)){for(;d<this._markers.length;d++)if(_.Range.containsPosition(this._markers[d],c))return new n(this._markers[d],d+1,this._markers.length)}}};e.MarkerList=t,e.MarkerList=t=ke([ge(1,a.IMarkerService),ge(2,i.IConfigurationService)],t),e.IMarkerNavigationService=(0,b.createDecorator)(\"IMarkerNavigationService\");let r=class{constructor(f,c){this._markerService=f,this._configService=c,this._provider=new E.LinkedList}getMarkerList(f){for(const c of this._provider){const d=c.getMarkerList(f);if(d)return d}return new t(f,this._markerService,this._configService)}};r=ke([ge(0,a.IMarkerService),ge(1,i.IConfigurationService)],r),(0,v.registerSingleton)(e.IMarkerNavigationService,r,1)}),define(se[784],oe([1,0,13,6,52,53,47,22,97]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MarkerService=e.unsupportedSchemas=void 0,e.unsupportedSchemas=new Set([S.Schemas.inMemory,S.Schemas.vscodeSourceControl,S.Schemas.walkThrough,S.Schemas.walkThroughSnippet]);class v{constructor(){this._byResource=new E.ResourceMap,this._byOwner=new Map}set(n,t,r){let u=this._byResource.get(n);u||(u=new Map,this._byResource.set(n,u)),u.set(t,r);let f=this._byOwner.get(t);f||(f=new E.ResourceMap,this._byOwner.set(t,f)),f.set(n,r)}get(n,t){const r=this._byResource.get(n);return r?.get(t)}delete(n,t){let r=!1,u=!1;const f=this._byResource.get(n);f&&(r=f.delete(t));const c=this._byOwner.get(t);if(c&&(u=c.delete(n)),r!==u)throw new Error(\"illegal state\");return r&&u}values(n){var t,r,u,f;return typeof n==\"string\"?(r=(t=this._byOwner.get(n))===null||t===void 0?void 0:t.values())!==null&&r!==void 0?r:y.Iterable.empty():p.URI.isUri(n)?(f=(u=this._byResource.get(n))===null||u===void 0?void 0:u.values())!==null&&f!==void 0?f:y.Iterable.empty():y.Iterable.map(y.Iterable.concat(...this._byOwner.values()),c=>c[1])}}class b{constructor(n){this.errors=0,this.infos=0,this.warnings=0,this.unknowns=0,this._data=new E.ResourceMap,this._service=n,this._subscription=n.onMarkerChanged(this._update,this)}dispose(){this._subscription.dispose()}_update(n){for(const t of n){const r=this._data.get(t);r&&this._substract(r);const u=this._resourceStats(t);this._add(u),this._data.set(t,u)}}_resourceStats(n){const t={errors:0,warnings:0,infos:0,unknowns:0};if(e.unsupportedSchemas.has(n.scheme))return t;for(const{severity:r}of this._service.read({resource:n}))r===_.MarkerSeverity.Error?t.errors+=1:r===_.MarkerSeverity.Warning?t.warnings+=1:r===_.MarkerSeverity.Info?t.infos+=1:t.unknowns+=1;return t}_substract(n){this.errors-=n.errors,this.warnings-=n.warnings,this.infos-=n.infos,this.unknowns-=n.unknowns}_add(n){this.errors+=n.errors,this.warnings+=n.warnings,this.infos+=n.infos,this.unknowns+=n.unknowns}}class a{constructor(){this._onMarkerChanged=new k.DebounceEmitter({delay:0,merge:a._merge}),this.onMarkerChanged=this._onMarkerChanged.event,this._data=new v,this._stats=new b(this)}dispose(){this._stats.dispose(),this._onMarkerChanged.dispose()}remove(n,t){for(const r of t||[])this.changeOne(n,r,[])}changeOne(n,t,r){if((0,L.isFalsyOrEmpty)(r))this._data.delete(t,n)&&this._onMarkerChanged.fire([t]);else{const u=[];for(const f of r){const c=a._toMarker(n,t,f);c&&u.push(c)}this._data.set(t,n,u),this._onMarkerChanged.fire([t])}}static _toMarker(n,t,r){let{code:u,severity:f,message:c,source:d,startLineNumber:s,startColumn:l,endLineNumber:o,endColumn:g,relatedInformation:h,tags:m}=r;if(c)return s=s>0?s:1,l=l>0?l:1,o=o>=s?o:s,g=g>0?g:l,{resource:t,owner:n,code:u,severity:f,message:c,source:d,startLineNumber:s,startColumn:l,endLineNumber:o,endColumn:g,relatedInformation:h,tags:m}}changeAll(n,t){const r=[],u=this._data.values(n);if(u)for(const f of u){const c=y.Iterable.first(f);c&&(r.push(c.resource),this._data.delete(c.resource,n))}if((0,L.isNonEmptyArray)(t)){const f=new E.ResourceMap;for(const{resource:c,marker:d}of t){const s=a._toMarker(n,c,d);if(!s)continue;const l=f.get(c);l?l.push(s):(f.set(c,[s]),r.push(c))}for(const[c,d]of f)this._data.set(c,n,d)}r.length>0&&this._onMarkerChanged.fire(r)}read(n=Object.create(null)){let{owner:t,resource:r,severities:u,take:f}=n;if((!f||f<0)&&(f=-1),t&&r){const c=this._data.get(r,t);if(c){const d=[];for(const s of c)if(a._accept(s,u)){const l=d.push(s);if(f>0&&l===f)break}return d}else return[]}else if(!t&&!r){const c=[];for(const d of this._data.values())for(const s of d)if(a._accept(s,u)){const l=c.push(s);if(f>0&&l===f)return c}return c}else{const c=this._data.values(r??t),d=[];for(const s of c)for(const l of s)if(a._accept(l,u)){const o=d.push(l);if(f>0&&o===f)return d}return d}}static _accept(n,t){return t===void 0||(t&n.severity)===n.severity}static _merge(n){const t=new E.ResourceMap;for(const r of n)for(const u of r)t.set(u,!0);return Array.from(t.keys())}}e.MarkerService=a}),define(se[50],oe([1,0,100,8]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.NoOpNotification=e.INotificationService=e.Severity=void 0,e.Severity=L.default,e.INotificationService=(0,k.createDecorator)(\"notificationService\");class y{}e.NoOpNotification=y}),define(se[57],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.extractSelection=e.IOpenerService=void 0,e.IOpenerService=(0,L.createDecorator)(\"openerService\");function k(y){let E;const S=/^L?(\\d+)(?:,(\\d+))?(-L?(\\d+)(?:,(\\d+))?)?/.exec(y.fragment);return S&&(E={startLineNumber:parseInt(S[1]),startColumn:S[2]?parseInt(S[2]):1,endLineNumber:S[4]?parseInt(S[4]):void 0,endColumn:S[4]?S[5]?parseInt(S[5]):1:void 0},y=y.with({fragment:\"\"})),{selection:E,uri:y}}e.extractSelection=k}),define(se[785],oe([1,0,7,44,19,66,53,223,47,49,22,33,25,759,57]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.OpenerService=void 0;let r=class{constructor(d){this._commandService=d}async open(d,s){if(!(0,_.matchesScheme)(d,_.Schemas.command))return!1;if(!s?.allowCommands||(typeof d==\"string\"&&(d=b.URI.parse(d)),Array.isArray(s.allowCommands)&&!s.allowCommands.includes(d.path)))return!0;let l=[];try{l=(0,p.parse)(decodeURIComponent(d.query))}catch{try{l=(0,p.parse)(d.query)}catch{}}return Array.isArray(l)||(l=[l]),await this._commandService.executeCommand(d.path,...l),!0}};r=ke([ge(0,i.ICommandService)],r);let u=class{constructor(d){this._editorService=d}async open(d,s){typeof d==\"string\"&&(d=b.URI.parse(d));const{selection:l,uri:o}=(0,t.extractSelection)(d);return d=o,d.scheme===_.Schemas.file&&(d=(0,v.normalizePath)(d)),await this._editorService.openCodeEditor({resource:d,options:{selection:l,source:s?.fromUserGesture?n.EditorOpenSource.USER:n.EditorOpenSource.API,...s?.editorOptions}},this._editorService.getFocusedCodeEditor(),s?.openToSide),!0}};u=ke([ge(0,a.ICodeEditorService)],u);let f=class{constructor(d,s){this._openers=new E.LinkedList,this._validators=new E.LinkedList,this._resolvers=new E.LinkedList,this._resolvedUriTargets=new S.ResourceMap(l=>l.with({path:null,fragment:null,query:null}).toString()),this._externalOpeners=new E.LinkedList,this._defaultExternalOpener={openExternal:async l=>((0,_.matchesSomeScheme)(l,_.Schemas.http,_.Schemas.https)?L.windowOpenNoOpener(l):k.mainWindow.location.href=l,!0)},this._openers.push({open:async(l,o)=>o?.openExternal||(0,_.matchesSomeScheme)(l,_.Schemas.mailto,_.Schemas.http,_.Schemas.https,_.Schemas.vsls)?(await this._doOpenExternal(l,o),!0):!1}),this._openers.push(new r(s)),this._openers.push(new u(d))}registerOpener(d){return{dispose:this._openers.unshift(d)}}async open(d,s){var l;const o=typeof d==\"string\"?b.URI.parse(d):d,g=(l=this._resolvedUriTargets.get(o))!==null&&l!==void 0?l:d;for(const h of this._validators)if(!await h.shouldOpen(g,s))return!1;for(const h of this._openers)if(await h.open(d,s))return!0;return!1}async resolveExternalUri(d,s){for(const l of this._resolvers)try{const o=await l.resolveExternalUri(d,s);if(o)return this._resolvedUriTargets.has(o.resolved)||this._resolvedUriTargets.set(o.resolved,d),o}catch{}throw new Error(\"Could not resolve external URI: \"+d.toString())}async _doOpenExternal(d,s){const l=typeof d==\"string\"?b.URI.parse(d):d;let o;try{o=(await this.resolveExternalUri(l,s)).resolved}catch{o=l}let g;if(typeof d==\"string\"&&l.toString()===o.toString()?g=d:g=encodeURI(o.toString(!0)),s?.allowContributedOpeners){const h=typeof s?.allowContributedOpeners==\"string\"?s?.allowContributedOpeners:void 0;for(const m of this._externalOpeners)if(await m.openExternal(g,{sourceUri:l,preferredOpenerId:h},y.CancellationToken.None))return!0}return this._defaultExternalOpener.openExternal(g,{sourceUri:l},y.CancellationToken.None)}dispose(){this._validators.clear()}};e.OpenerService=f,e.OpenerService=f=ke([ge(0,a.ICodeEditorService),ge(1,i.ICommandService)],f)}),define(se[786],oe([1,0,7,84,46,63,6,2,57,489]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Link=void 0;let v=class extends p.Disposable{get enabled(){return this._enabled}set enabled(a){a?(this.el.setAttribute(\"aria-disabled\",\"false\"),this.el.tabIndex=0,this.el.style.pointerEvents=\"auto\",this.el.style.opacity=\"1\",this.el.style.cursor=\"pointer\",this._enabled=!1):(this.el.setAttribute(\"aria-disabled\",\"true\"),this.el.tabIndex=-1,this.el.style.pointerEvents=\"none\",this.el.style.opacity=\"0.4\",this.el.style.cursor=\"default\",this._enabled=!0),this._enabled=a}constructor(a,i,n={},t){var r;super(),this._link=i,this._enabled=!0,this.el=(0,L.append)(a,(0,L.$)(\"a.monaco-link\",{tabIndex:(r=i.tabIndex)!==null&&r!==void 0?r:0,href:i.href,title:i.title},i.label)),this.el.setAttribute(\"role\",\"button\");const u=this._register(new k.DomEmitter(this.el,\"click\")),f=this._register(new k.DomEmitter(this.el,\"keypress\")),c=S.Event.chain(f.event,l=>l.map(o=>new y.StandardKeyboardEvent(o)).filter(o=>o.keyCode===3)),d=this._register(new k.DomEmitter(this.el,E.EventType.Tap)).event;this._register(E.Gesture.addTarget(this.el));const s=S.Event.any(u.event,c,d);this._register(s(l=>{this.enabled&&(L.EventHelper.stop(l,!0),n?.opener?n.opener(this._link.href):t.open(this._link.href,{allowCommands:!0}))})),this.enabled=!0}};e.Link=v,e.Link=v=ke([ge(3,_.IOpenerService)],v)}),define(se[88],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IEditorProgressService=e.Progress=e.emptyProgressRunner=e.IProgressService=void 0,e.IProgressService=(0,L.createDecorator)(\"progressService\"),e.emptyProgressRunner=Object.freeze({total(){},worked(){},done(){}});class k{constructor(E){this.callback=E}report(E){this._value=E,this.callback(this._value)}}e.Progress=k,k.None=Object.freeze({report(){}}),e.IEditorProgressService=(0,L.createDecorator)(\"editorProgressService\")}),define(se[787],oe([1,0,14,19,2,20]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PickerQuickAccessProvider=e.TriggerAction=void 0;var S;(function(b){b[b.NO_ACTION=0]=\"NO_ACTION\",b[b.CLOSE_PICKER=1]=\"CLOSE_PICKER\",b[b.REFRESH_PICKER=2]=\"REFRESH_PICKER\",b[b.REMOVE_ITEM=3]=\"REMOVE_ITEM\"})(S||(e.TriggerAction=S={}));function p(b){const a=b;return Array.isArray(a.items)}function _(b){const a=b;return!!a.picks&&a.additionalPicks instanceof Promise}class v extends y.Disposable{constructor(a,i){super(),this.prefix=a,this.options=i}provide(a,i,n){var t;const r=new y.DisposableStore;a.canAcceptInBackground=!!(!((t=this.options)===null||t===void 0)&&t.canAcceptInBackground),a.matchOnLabel=a.matchOnDescription=a.matchOnDetail=a.sortByLabel=!1;let u;const f=r.add(new y.MutableDisposable),c=async()=>{var d;const s=f.value=new y.DisposableStore;u?.dispose(!0),a.busy=!1,u=new k.CancellationTokenSource(i);const l=u.token;let o=a.value.substring(this.prefix.length);!((d=this.options)===null||d===void 0)&&d.shouldSkipTrimPickFilter||(o=o.trim());const g=this._getPicks(o,s,l,n),h=(C,w)=>{var D;let I,T;if(p(C)?(I=C.items,T=C.active):I=C,I.length===0){if(w)return!1;(o.length>0||a.hideInput)&&(!((D=this.options)===null||D===void 0)&&D.noResultsPick)&&((0,E.isFunction)(this.options.noResultsPick)?I=[this.options.noResultsPick(o)]:I=[this.options.noResultsPick])}return a.items=I,T&&(a.activeItems=[T]),!0},m=async C=>{let w=!1,D=!1;await Promise.all([(async()=>{typeof C.mergeDelay==\"number\"&&(await(0,L.timeout)(C.mergeDelay),l.isCancellationRequested)||D||(w=h(C.picks,!0))})(),(async()=>{a.busy=!0;try{const I=await C.additionalPicks;if(l.isCancellationRequested)return;let T,A;p(C.picks)?(T=C.picks.items,A=C.picks.active):T=C.picks;let P,N;if(p(I)?(P=I.items,N=I.active):P=I,P.length>0||!w){let M;if(!A&&!N){const R=a.activeItems[0];R&&T.indexOf(R)!==-1&&(M=R)}h({items:[...T,...P],active:A||N||M})}}finally{l.isCancellationRequested||(a.busy=!1),D=!0}})()])};if(g!==null)if(_(g))await m(g);else if(!(g instanceof Promise))h(g);else{a.busy=!0;try{const C=await g;if(l.isCancellationRequested)return;_(C)?await m(C):h(C)}finally{l.isCancellationRequested||(a.busy=!1)}}};return r.add(a.onDidChangeValue(()=>c())),c(),r.add(a.onDidAccept(d=>{const[s]=a.selectedItems;typeof s?.accept==\"function\"&&(d.inBackground||a.hide(),s.accept(a.keyMods,d))})),r.add(a.onDidTriggerItemButton(async({button:d,item:s})=>{var l,o;if(typeof s.trigger==\"function\"){const g=(o=(l=s.buttons)===null||l===void 0?void 0:l.indexOf(d))!==null&&o!==void 0?o:-1;if(g>=0){const h=s.trigger(g,a.keyMods),m=typeof h==\"number\"?h:await h;if(i.isCancellationRequested)return;switch(m){case S.NO_ACTION:break;case S.CLOSE_PICKER:a.hide();break;case S.REFRESH_PICKER:c();break;case S.REMOVE_ITEM:{const C=a.items.indexOf(s);if(C!==-1){const w=a.items.slice(),D=w.splice(C,1),I=a.activeItems.filter(A=>A!==D[0]),T=a.keepScrollPosition;a.keepScrollPosition=!0,a.items=w,I&&(a.activeItems=I),a.keepScrollPosition=T}break}}}}})),r}}e.PickerQuickAccessProvider=v}),define(se[788],oe([1,0,7,232,2,100,178]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuickInputBox=void 0;const S=L.$;class p extends y.Disposable{constructor(v,b,a){super(),this.parent=v,this.onKeyDown=n=>L.addStandardDisposableListener(this.findInput.inputBox.inputElement,L.EventType.KEY_DOWN,n),this.onDidChange=n=>this.findInput.onDidChange(n),this.container=L.append(this.parent,S(\".quick-input-box\")),this.findInput=this._register(new k.FindInput(this.container,void 0,{label:\"\",inputBoxStyles:b,toggleStyles:a}));const i=this.findInput.inputBox.inputElement;i.role=\"combobox\",i.ariaHasPopup=\"menu\",i.ariaAutoComplete=\"list\",i.ariaExpanded=\"true\"}get value(){return this.findInput.getValue()}set value(v){this.findInput.setValue(v)}select(v=null){this.findInput.inputBox.select(v)}isSelectionAtEnd(){return this.findInput.inputBox.isSelectionAtEnd()}get placeholder(){return this.findInput.inputBox.inputElement.getAttribute(\"placeholder\")||\"\"}set placeholder(v){this.findInput.inputBox.setPlaceHolder(v)}get password(){return this.findInput.inputBox.inputElement.type===\"password\"}set password(v){this.findInput.inputBox.inputElement.type=v?\"password\":\"text\"}set enabled(v){this.findInput.inputBox.inputElement.toggleAttribute(\"readonly\",!v)}set toggles(v){this.findInput.setAdditionalToggles(v)}setAttribute(v,b){this.findInput.inputBox.inputElement.setAttribute(v,b)}showDecoration(v){v===E.default.Ignore?this.findInput.clearMessage():this.findInput.showMessage({type:v===E.default.Info?1:v===E.default.Warning?2:3,content:\"\"})}stylesForType(v){return this.findInput.inputBox.stylesForType(v===E.default.Info?1:v===E.default.Warning?2:3)}setFocus(){this.findInput.focus()}layout(){this.findInput.inputBox.layout()}}e.QuickInputBox=p}),define(se[350],oe([1,0,7,84,6,46,63,118,170,399,751,178]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.renderQuickInputDescription=e.quickInputButtonToAction=void 0;const a={},i=new _.IdGenerator(\"quick-input-button-icon-\");function n(u){if(!u)return;let f;const c=u.dark.toString();return a[c]?f=a[c]:(f=i.nextId(),L.createCSSRule(`.${f}, .hc-light .${f}`,`background-image: ${L.asCSSUrl(u.light||u.dark)}`),L.createCSSRule(`.vs-dark .${f}, .hc-black .${f}`,`background-image: ${L.asCSSUrl(u.dark)}`),a[c]=f),f}function t(u,f,c){let d=u.iconClass||n(u.iconPath);return u.alwaysVisible&&(d=d?`${d} always-visible`:\"always-visible\"),{id:f,label:\"\",tooltip:u.tooltip||\"\",class:d,enabled:!0,run:c}}e.quickInputButtonToAction=t;function r(u,f,c){L.reset(f);const d=(0,v.parseLinkedText)(u);let s=0;for(const l of d.nodes)if(typeof l==\"string\")f.append(...(0,p.renderLabelWithIcons)(l));else{let o=l.title;!o&&l.href.startsWith(\"command:\")?o=(0,b.localize)(0,null,l.href.substring(8)):o||(o=l.href);const g=L.$(\"a\",{href:l.href,title:o,tabIndex:s++},l.label);g.style.textDecoration=\"underline\";const h=I=>{L.isEventLike(I)&&L.EventHelper.stop(I,!0),c.callback(l.href)},m=c.disposables.add(new k.DomEmitter(g,L.EventType.CLICK)).event,C=c.disposables.add(new k.DomEmitter(g,L.EventType.KEY_DOWN)).event,w=y.Event.chain(C,I=>I.filter(T=>{const A=new E.StandardKeyboardEvent(T);return A.equals(10)||A.equals(3)}));c.disposables.add(S.Gesture.addTarget(g));const D=c.disposables.add(new k.DomEmitter(g,S.EventType.Tap)).event;y.Event.any(m,D,w)(h,null,c.disposables),f.appendChild(g)}}e.renderQuickInputDescription=r}),define(se[70],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IQuickInputService=e.quickPickItemScorerAccessor=e.QuickPickItemScorerAccessor=e.ItemActivation=e.QuickInputHideReason=e.NO_KEY_MODS=void 0,e.NO_KEY_MODS={ctrlCmd:!1,alt:!1};var k;(function(S){S[S.Blur=1]=\"Blur\",S[S.Gesture=2]=\"Gesture\",S[S.Other=3]=\"Other\"})(k||(e.QuickInputHideReason=k={}));var y;(function(S){S[S.NONE=0]=\"NONE\",S[S.FIRST=1]=\"FIRST\",S[S.SECOND=2]=\"SECOND\",S[S.LAST=3]=\"LAST\"})(y||(e.ItemActivation=y={}));class E{constructor(p){this.options=p}}e.QuickPickItemScorerAccessor=E,e.quickPickItemScorerAccessor=new E,e.IQuickInputService=(0,L.createDecorator)(\"quickInputService\")}),define(se[37],oe([1,0,90,20]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Registry=void 0;class y{constructor(){this.data=new Map}add(S,p){L.ok(k.isString(S)),L.ok(k.isObject(p)),L.ok(!this.data.has(S),\"There is already an extension with this id\"),this.data.set(S,p)}as(S){return this.data.get(S)||null}}e.Registry=new y}),define(se[351],oe([1,0,37]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LocalSelectionTransfer=e.Extensions=e.CodeDataTransfers=void 0,e.CodeDataTransfers={EDITORS:\"CodeEditors\",FILES:\"CodeFiles\"};class k{}e.Extensions={DragAndDropContribution:\"workbench.contributions.dragAndDrop\"},L.Registry.add(e.Extensions.DragAndDropContribution,new k);class y{constructor(){}static getInstance(){return y.INSTANCE}hasData(S){return S&&S===this.proto}getData(S){if(this.hasData(S))return this.data}}e.LocalSelectionTransfer=y,y.INSTANCE=new y}),define(se[352],oe([1,0,198,176,109,22,351]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.toExternalVSDataTransfer=e.toVSDataTransfer=void 0;function p(a){const i=new k.VSDataTransfer;for(const n of a.items){const t=n.type;if(n.kind===\"string\"){const r=new Promise(u=>n.getAsString(u));i.append(t,(0,k.createStringDataTransferItem)(r))}else if(n.kind===\"file\"){const r=n.getAsFile();r&&i.append(t,_(r))}}return i}e.toVSDataTransfer=p;function _(a){const i=a.path?E.URI.parse(a.path):void 0;return(0,k.createFileDataTransferItem)(a.name,i,async()=>new Uint8Array(await a.arrayBuffer()))}const v=Object.freeze([S.CodeDataTransfers.EDITORS,S.CodeDataTransfers.FILES,L.DataTransfers.RESOURCES,L.DataTransfers.INTERNAL_URI_LIST]);function b(a,i=!1){const n=p(a),t=n.get(L.DataTransfers.INTERNAL_URI_LIST);if(t)n.replace(y.Mimes.uriList,t);else if(i||!n.has(y.Mimes.uriList)){const r=[];for(const u of a.items){const f=u.getAsFile();if(f){const c=f.path;try{c?r.push(E.URI.file(c).toString()):r.push(E.URI.parse(f.name,!0).toString())}catch{}}}r.length&&n.replace(y.Mimes.uriList,(0,k.createStringDataTransferItem)(k.UriList.create(r)))}for(const r of v)n.delete(r);return n}e.toExternalVSDataTransfer=b}),define(se[245],oe([1,0,6,37]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Extensions=void 0,e.Extensions={JSONContribution:\"base.contributions.json\"};function y(p){return p.length>0&&p.charAt(p.length-1)===\"#\"?p.substring(0,p.length-1):p}class E{constructor(){this._onDidChangeSchema=new L.Emitter,this.schemasById={}}registerSchema(_,v){this.schemasById[y(_)]=v,this._onDidChangeSchema.fire(_)}notifySchemaChanged(_){this._onDidChangeSchema.fire(_)}}const S=new E;k.Registry.add(e.Extensions.JSONContribution,S)}),define(se[98],oe([1,0,13,6,20,737,27,245,37]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.validateProperty=e.getDefaultValue=e.overrideIdentifiersFromKey=e.OVERRIDE_PROPERTY_REGEX=e.OVERRIDE_PROPERTY_PATTERN=e.resourceLanguageSettingsSchemaId=e.resourceSettings=e.windowSettings=e.machineOverridableSettings=e.machineSettings=e.applicationSettings=e.allSettings=e.Extensions=void 0,e.Extensions={Configuration:\"base.contributions.configuration\"},e.allSettings={properties:{},patternProperties:{}},e.applicationSettings={properties:{},patternProperties:{}},e.machineSettings={properties:{},patternProperties:{}},e.machineOverridableSettings={properties:{},patternProperties:{}},e.windowSettings={properties:{},patternProperties:{}},e.resourceSettings={properties:{},patternProperties:{}},e.resourceLanguageSettingsSchemaId=\"vscode://schemas/settings/resourceLanguage\";const v=_.Registry.as(p.Extensions.JSONContribution);class b{constructor(){this.overrideIdentifiers=new Set,this._onDidSchemaChange=new k.Emitter,this._onDidUpdateConfiguration=new k.Emitter,this.configurationDefaultsOverrides=new Map,this.defaultLanguageConfigurationOverridesNode={id:\"defaultOverrides\",title:E.localize(0,null),properties:{}},this.configurationContributors=[this.defaultLanguageConfigurationOverridesNode],this.resourceLanguageSettingsSchema={properties:{},patternProperties:{},additionalProperties:!0,allowTrailingCommas:!0,allowComments:!0},this.configurationProperties={},this.policyConfigurations=new Map,this.excludedConfigurationProperties={},v.registerSchema(e.resourceLanguageSettingsSchemaId,this.resourceLanguageSettingsSchema),this.registerOverridePropertyPatternKey()}registerConfiguration(c,d=!0){this.registerConfigurations([c],d)}registerConfigurations(c,d=!0){const s=new Set;this.doRegisterConfigurations(c,d,s),v.registerSchema(e.resourceLanguageSettingsSchemaId,this.resourceLanguageSettingsSchema),this._onDidSchemaChange.fire(),this._onDidUpdateConfiguration.fire({properties:s})}registerDefaultConfigurations(c){const d=new Set;this.doRegisterDefaultConfigurations(c,d),this._onDidSchemaChange.fire(),this._onDidUpdateConfiguration.fire({properties:d,defaultsOverrides:!0})}doRegisterDefaultConfigurations(c,d){var s;const l=[];for(const{overrides:o,source:g}of c)for(const h in o)if(d.add(h),e.OVERRIDE_PROPERTY_REGEX.test(h)){const m=this.configurationDefaultsOverrides.get(h),C=(s=m?.valuesSources)!==null&&s!==void 0?s:new Map;if(g)for(const T of Object.keys(o[h]))C.set(T,g);const w={...m?.value||{},...o[h]};this.configurationDefaultsOverrides.set(h,{source:g,value:w,valuesSources:C});const D=(0,S.getLanguageTagSettingPlainKey)(h),I={type:\"object\",default:w,description:E.localize(1,null,D),$ref:e.resourceLanguageSettingsSchemaId,defaultDefaultValue:w,source:y.isString(g)?void 0:g,defaultValueSource:g};l.push(...n(h)),this.configurationProperties[h]=I,this.defaultLanguageConfigurationOverridesNode.properties[h]=I}else{this.configurationDefaultsOverrides.set(h,{value:o[h],source:g});const m=this.configurationProperties[h];m&&(this.updatePropertyDefaultValue(h,m),this.updateSchema(h,m))}this.doRegisterOverrideIdentifiers(l)}registerOverrideIdentifiers(c){this.doRegisterOverrideIdentifiers(c),this._onDidSchemaChange.fire()}doRegisterOverrideIdentifiers(c){for(const d of c)this.overrideIdentifiers.add(d);this.updateOverridePropertyPatternKey()}doRegisterConfigurations(c,d,s){c.forEach(l=>{this.validateAndRegisterProperties(l,d,l.extensionInfo,l.restrictedProperties,void 0,s),this.configurationContributors.push(l),this.registerJSONConfiguration(l)})}validateAndRegisterProperties(c,d=!0,s,l,o=3,g){var h;o=y.isUndefinedOrNull(c.scope)?o:c.scope;const m=c.properties;if(m)for(const w in m){const D=m[w];if(d&&u(w,D)){delete m[w];continue}if(D.source=s,D.defaultDefaultValue=m[w].default,this.updatePropertyDefaultValue(w,D),e.OVERRIDE_PROPERTY_REGEX.test(w)?D.scope=void 0:(D.scope=y.isUndefinedOrNull(D.scope)?o:D.scope,D.restricted=y.isUndefinedOrNull(D.restricted)?!!l?.includes(w):D.restricted),m[w].hasOwnProperty(\"included\")&&!m[w].included){this.excludedConfigurationProperties[w]=m[w],delete m[w];continue}else this.configurationProperties[w]=m[w],!((h=m[w].policy)===null||h===void 0)&&h.name&&this.policyConfigurations.set(m[w].policy.name,w);!m[w].deprecationMessage&&m[w].markdownDeprecationMessage&&(m[w].deprecationMessage=m[w].markdownDeprecationMessage),g.add(w)}const C=c.allOf;if(C)for(const w of C)this.validateAndRegisterProperties(w,d,s,l,o,g)}getConfigurationProperties(){return this.configurationProperties}getPolicyConfigurations(){return this.policyConfigurations}registerJSONConfiguration(c){const d=s=>{const l=s.properties;if(l)for(const g in l)this.updateSchema(g,l[g]);const o=s.allOf;o?.forEach(d)};d(c)}updateSchema(c,d){switch(e.allSettings.properties[c]=d,d.scope){case 1:e.applicationSettings.properties[c]=d;break;case 2:e.machineSettings.properties[c]=d;break;case 6:e.machineOverridableSettings.properties[c]=d;break;case 3:e.windowSettings.properties[c]=d;break;case 4:e.resourceSettings.properties[c]=d;break;case 5:e.resourceSettings.properties[c]=d,this.resourceLanguageSettingsSchema.properties[c]=d;break}}updateOverridePropertyPatternKey(){for(const c of this.overrideIdentifiers.values()){const d=`[${c}]`,s={type:\"object\",description:E.localize(2,null),errorMessage:E.localize(3,null),$ref:e.resourceLanguageSettingsSchemaId};this.updatePropertyDefaultValue(d,s),e.allSettings.properties[d]=s,e.applicationSettings.properties[d]=s,e.machineSettings.properties[d]=s,e.machineOverridableSettings.properties[d]=s,e.windowSettings.properties[d]=s,e.resourceSettings.properties[d]=s}}registerOverridePropertyPatternKey(){const c={type:\"object\",description:E.localize(4,null),errorMessage:E.localize(5,null),$ref:e.resourceLanguageSettingsSchemaId};e.allSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.applicationSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.machineSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.machineOverridableSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.windowSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.resourceSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,this._onDidSchemaChange.fire()}updatePropertyDefaultValue(c,d){const s=this.configurationDefaultsOverrides.get(c);let l=s?.value,o=s?.source;y.isUndefined(l)&&(l=d.defaultDefaultValue,o=void 0),y.isUndefined(l)&&(l=t(d.type)),d.default=l,d.defaultValueSource=o}}const a=\"\\\\[([^\\\\]]+)\\\\]\",i=new RegExp(a,\"g\");e.OVERRIDE_PROPERTY_PATTERN=`^(${a})+$`,e.OVERRIDE_PROPERTY_REGEX=new RegExp(e.OVERRIDE_PROPERTY_PATTERN);function n(f){const c=[];if(e.OVERRIDE_PROPERTY_REGEX.test(f)){let d=i.exec(f);for(;d?.length;){const s=d[1].trim();s&&c.push(s),d=i.exec(f)}}return(0,L.distinct)(c)}e.overrideIdentifiersFromKey=n;function t(f){switch(Array.isArray(f)?f[0]:f){case\"boolean\":return!1;case\"integer\":case\"number\":return 0;case\"string\":return\"\";case\"array\":return[];case\"object\":return{};default:return null}}e.getDefaultValue=t;const r=new b;_.Registry.add(e.Extensions.Configuration,r);function u(f,c){var d,s,l,o;return f.trim()?e.OVERRIDE_PROPERTY_REGEX.test(f)?E.localize(7,null,f):r.getConfigurationProperties()[f]!==void 0?E.localize(8,null,f):!((d=c.policy)===null||d===void 0)&&d.name&&r.getPolicyConfigurations().get((s=c.policy)===null||s===void 0?void 0:s.name)!==void 0?E.localize(9,null,f,(l=c.policy)===null||l===void 0?void 0:l.name,r.getPolicyConfigurations().get((o=c.policy)===null||o===void 0?void 0:o.name)):null:E.localize(6,null)}e.validateProperty=u}),define(se[246],oe([1,0,278,36,179,634,98,37]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isDiffEditorConfigurationKey=e.isEditorConfigurationKey=e.editorConfigurationBaseNode=void 0,e.editorConfigurationBaseNode=Object.freeze({id:\"editor\",order:5,type:\"object\",title:E.localize(0,null),scope:5});const _={...e.editorConfigurationBaseNode,properties:{\"editor.tabSize\":{type:\"number\",default:y.EDITOR_MODEL_DEFAULTS.tabSize,minimum:1,markdownDescription:E.localize(1,null,\"`#editor.detectIndentation#`\")},\"editor.indentSize\":{anyOf:[{type:\"string\",enum:[\"tabSize\"]},{type:\"number\",minimum:1}],default:\"tabSize\",markdownDescription:E.localize(2,null)},\"editor.insertSpaces\":{type:\"boolean\",default:y.EDITOR_MODEL_DEFAULTS.insertSpaces,markdownDescription:E.localize(3,null,\"`#editor.detectIndentation#`\")},\"editor.detectIndentation\":{type:\"boolean\",default:y.EDITOR_MODEL_DEFAULTS.detectIndentation,markdownDescription:E.localize(4,null,\"`#editor.tabSize#`\",\"`#editor.insertSpaces#`\")},\"editor.trimAutoWhitespace\":{type:\"boolean\",default:y.EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,description:E.localize(5,null)},\"editor.largeFileOptimizations\":{type:\"boolean\",default:y.EDITOR_MODEL_DEFAULTS.largeFileOptimizations,description:E.localize(6,null)},\"editor.wordBasedSuggestions\":{enum:[\"off\",\"currentDocument\",\"matchingDocuments\",\"allDocuments\"],default:\"matchingDocuments\",enumDescriptions:[E.localize(7,null),E.localize(8,null),E.localize(9,null),E.localize(10,null)],description:E.localize(11,null)},\"editor.semanticHighlighting.enabled\":{enum:[!0,!1,\"configuredByTheme\"],enumDescriptions:[E.localize(12,null),E.localize(13,null),E.localize(14,null)],default:\"configuredByTheme\",description:E.localize(15,null)},\"editor.stablePeek\":{type:\"boolean\",default:!1,markdownDescription:E.localize(16,null)},\"editor.maxTokenizationLineLength\":{type:\"integer\",default:2e4,description:E.localize(17,null)},\"editor.experimental.asyncTokenization\":{type:\"boolean\",default:!1,description:E.localize(18,null),tags:[\"experimental\"]},\"editor.experimental.asyncTokenizationLogging\":{type:\"boolean\",default:!1,description:E.localize(19,null)},\"editor.experimental.asyncTokenizationVerification\":{type:\"boolean\",default:!1,description:E.localize(20,null),tags:[\"experimental\"]},\"editor.language.brackets\":{type:[\"array\",\"null\"],default:null,description:E.localize(21,null),items:{type:\"array\",items:[{type:\"string\",description:E.localize(22,null)},{type:\"string\",description:E.localize(23,null)}]}},\"editor.language.colorizedBracketPairs\":{type:[\"array\",\"null\"],default:null,description:E.localize(24,null),items:{type:\"array\",items:[{type:\"string\",description:E.localize(25,null)},{type:\"string\",description:E.localize(26,null)}]}},\"diffEditor.maxComputationTime\":{type:\"number\",default:L.diffEditorDefaultOptions.maxComputationTime,description:E.localize(27,null)},\"diffEditor.maxFileSize\":{type:\"number\",default:L.diffEditorDefaultOptions.maxFileSize,description:E.localize(28,null)},\"diffEditor.renderSideBySide\":{type:\"boolean\",default:L.diffEditorDefaultOptions.renderSideBySide,description:E.localize(29,null)},\"diffEditor.renderSideBySideInlineBreakpoint\":{type:\"number\",default:L.diffEditorDefaultOptions.renderSideBySideInlineBreakpoint,description:E.localize(30,null)},\"diffEditor.useInlineViewWhenSpaceIsLimited\":{type:\"boolean\",default:L.diffEditorDefaultOptions.useInlineViewWhenSpaceIsLimited,description:E.localize(31,null)},\"diffEditor.renderMarginRevertIcon\":{type:\"boolean\",default:L.diffEditorDefaultOptions.renderMarginRevertIcon,description:E.localize(32,null)},\"diffEditor.ignoreTrimWhitespace\":{type:\"boolean\",default:L.diffEditorDefaultOptions.ignoreTrimWhitespace,description:E.localize(33,null)},\"diffEditor.renderIndicators\":{type:\"boolean\",default:L.diffEditorDefaultOptions.renderIndicators,description:E.localize(34,null)},\"diffEditor.codeLens\":{type:\"boolean\",default:L.diffEditorDefaultOptions.diffCodeLens,description:E.localize(35,null)},\"diffEditor.wordWrap\":{type:\"string\",enum:[\"off\",\"on\",\"inherit\"],default:L.diffEditorDefaultOptions.diffWordWrap,markdownEnumDescriptions:[E.localize(36,null),E.localize(37,null),E.localize(38,null,\"`#editor.wordWrap#`\")]},\"diffEditor.diffAlgorithm\":{type:\"string\",enum:[\"legacy\",\"advanced\"],default:L.diffEditorDefaultOptions.diffAlgorithm,markdownEnumDescriptions:[E.localize(39,null),E.localize(40,null)],tags:[\"experimental\"]},\"diffEditor.hideUnchangedRegions.enabled\":{type:\"boolean\",default:L.diffEditorDefaultOptions.hideUnchangedRegions.enabled,markdownDescription:E.localize(41,null)},\"diffEditor.hideUnchangedRegions.revealLineCount\":{type:\"integer\",default:L.diffEditorDefaultOptions.hideUnchangedRegions.revealLineCount,markdownDescription:E.localize(42,null),minimum:1},\"diffEditor.hideUnchangedRegions.minimumLineCount\":{type:\"integer\",default:L.diffEditorDefaultOptions.hideUnchangedRegions.minimumLineCount,markdownDescription:E.localize(43,null),minimum:1},\"diffEditor.hideUnchangedRegions.contextLineCount\":{type:\"integer\",default:L.diffEditorDefaultOptions.hideUnchangedRegions.contextLineCount,markdownDescription:E.localize(44,null),minimum:1},\"diffEditor.experimental.showMoves\":{type:\"boolean\",default:L.diffEditorDefaultOptions.experimental.showMoves,markdownDescription:E.localize(45,null)},\"diffEditor.experimental.showEmptyDecorations\":{type:\"boolean\",default:L.diffEditorDefaultOptions.experimental.showEmptyDecorations,description:E.localize(46,null)}}};function v(r){return typeof r.type<\"u\"||typeof r.anyOf<\"u\"}for(const r of k.editorOptionsRegistry){const u=r.schema;if(typeof u<\"u\")if(v(u))_.properties[`editor.${r.name}`]=u;else for(const f in u)Object.hasOwnProperty.call(u,f)&&(_.properties[f]=u[f])}let b=null;function a(){return b===null&&(b=Object.create(null),Object.keys(_.properties).forEach(r=>{b[r]=!0})),b}function i(r){return a()[`editor.${r}`]||!1}e.isEditorConfigurationKey=i;function n(r){return a()[`diffEditor.${r}`]||!1}e.isDiffEditorConfigurationKey=n,p.Registry.as(S.Extensions.Configuration).registerConfiguration(_)}),define(se[80],oe([1,0,644,6,37,109,98]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PLAINTEXT_EXTENSION=e.PLAINTEXT_LANGUAGE_ID=e.ModesRegistry=e.EditorModesRegistry=e.Extensions=void 0,e.Extensions={ModesRegistry:\"editor.modesRegistry\"};class p{constructor(){this._onDidChangeLanguages=new k.Emitter,this.onDidChangeLanguages=this._onDidChangeLanguages.event,this._languages=[]}registerLanguage(v){return this._languages.push(v),this._onDidChangeLanguages.fire(void 0),{dispose:()=>{for(let b=0,a=this._languages.length;b<a;b++)if(this._languages[b]===v){this._languages.splice(b,1);return}}}}getLanguages(){return this._languages}}e.EditorModesRegistry=p,e.ModesRegistry=new p,y.Registry.add(e.Extensions.ModesRegistry,e.ModesRegistry),e.PLAINTEXT_LANGUAGE_ID=\"plaintext\",e.PLAINTEXT_EXTENSION=\".txt\",e.ModesRegistry.registerLanguage({id:e.PLAINTEXT_LANGUAGE_ID,extensions:[e.PLAINTEXT_EXTENSION],aliases:[L.localize(0,null),\"text\"],mimetypes:[E.Mimes.text]}),y.Registry.as(S.Extensions.Configuration).registerDefaultConfigurations([{overrides:{\"[plaintext]\":{\"editor.unicodeHighlight.ambiguousCharacters\":!1,\"editor.unicodeHighlight.invisibleCharacters\":!1}}}])}),define(se[104],oe([1,0,186,93,12,6,2,72,43,80,337,57,450]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";var i;Object.defineProperty(e,\"__esModule\",{value:!0}),e.openLinkFromMarkdown=e.MarkdownRenderer=void 0;let n=i=class{constructor(f,c,d){this._options=f,this._languageService=c,this._openerService=d,this._onDidRenderAsync=new E.Emitter,this.onDidRenderAsync=this._onDidRenderAsync.event}dispose(){this._onDidRenderAsync.dispose()}render(f,c,d){if(!f)return{element:document.createElement(\"span\"),dispose:()=>{}};const s=new S.DisposableStore,l=s.add((0,L.renderMarkdown)(f,{...this._getRenderOptions(f,s),...c},d));return l.element.classList.add(\"rendered-markdown\"),{element:l.element,dispose:()=>s.dispose()}}_getRenderOptions(f,c){return{codeBlockRenderer:async(d,s)=>{var l,o,g;let h;d?h=this._languageService.getLanguageIdByLanguageName(d):this._options.editor&&(h=(l=this._options.editor.getModel())===null||l===void 0?void 0:l.getLanguageId()),h||(h=v.PLAINTEXT_LANGUAGE_ID);const m=await(0,b.tokenizeToString)(this._languageService,s,h),C=document.createElement(\"span\");if(C.innerHTML=(g=(o=i._ttpTokenizer)===null||o===void 0?void 0:o.createHTML(m))!==null&&g!==void 0?g:m,this._options.editor){const w=this._options.editor.getOption(50);(0,p.applyFontInfo)(C,w)}else this._options.codeBlockFontFamily&&(C.style.fontFamily=this._options.codeBlockFontFamily);return this._options.codeBlockFontSize!==void 0&&(C.style.fontSize=this._options.codeBlockFontSize),C},asyncRenderCallback:()=>this._onDidRenderAsync.fire(),actionHandler:{callback:d=>t(this._openerService,d,f.isTrusted),disposables:c}}}};e.MarkdownRenderer=n,n._ttpTokenizer=(0,k.createTrustedTypesPolicy)(\"tokenizeToString\",{createHTML(u){return u}}),e.MarkdownRenderer=n=i=ke([ge(1,_.ILanguageService),ge(2,a.IOpenerService)],n);async function t(u,f,c){try{return await u.open(f,{fromUserGesture:!0,allowContributedOpeners:!0,allowCommands:r(c)})}catch(d){return(0,y.onUnexpectedError)(d),!1}}e.openLinkFromMarkdown=t;function r(u){return u===!0?!0:u&&Array.isArray(u.enabledCommands)?u.enabledCommands:!1}}),define(se[789],oe([1,0,2,6,7,34,27,36,227,76,57,8,104,58,632,17,69,48,449]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HoverWidget=void 0;const c=y.$;let d=class extends v.Widget{get _targetWindow(){return y.getWindow(this._target.targetElements[0])}get _targetDocumentElement(){return y.getWindow(this._target.targetElements[0]).document.documentElement}get isDisposed(){return this._isDisposed}get isMouseIn(){return this._lockMouseTracker.isMouseIn}get domNode(){return this._hover.containerDomNode}get onDispose(){return this._onDispose.event}get onRequestLayout(){return this._onRequestLayout.event}get anchor(){return this._hoverPosition===2?0:1}get x(){return this._x}get y(){return this._y}get isLocked(){return this._isLocked}set isLocked(g){this._isLocked!==g&&(this._isLocked=g,this._hoverContainer.classList.toggle(\"locked\",this._isLocked))}constructor(g,h,m,C,w,D){var I,T,A,P,N,M,R,x;super(),this._keybindingService=h,this._configurationService=m,this._openerService=C,this._instantiationService=w,this._accessibilityService=D,this._messageListeners=new L.DisposableStore,this._isDisposed=!1,this._forcePosition=!1,this._x=0,this._y=0,this._isLocked=!1,this._enableFocusTraps=!1,this._addedFocusTrap=!1,this._onDispose=this._register(new k.Emitter),this._onRequestLayout=this._register(new k.Emitter),this._linkHandler=g.linkHandler||(F=>(0,i.openLinkFromMarkdown)(this._openerService,F,(0,n.isMarkdownString)(g.content)?g.content.isTrusted:void 0)),this._target=\"targetElements\"in g.target?g.target:new l(g.target),this._hoverPointer=!((I=g.appearance)===null||I===void 0)&&I.showPointer?c(\"div.workbench-hover-pointer\"):void 0,this._hover=this._register(new _.HoverWidget),this._hover.containerDomNode.classList.add(\"workbench-hover\",\"fadeIn\"),!((T=g.appearance)===null||T===void 0)&&T.compact&&this._hover.containerDomNode.classList.add(\"workbench-hover\",\"compact\"),!((A=g.appearance)===null||A===void 0)&&A.skipFadeInAnimation&&this._hover.containerDomNode.classList.add(\"skip-fade-in\"),g.additionalClasses&&this._hover.containerDomNode.classList.add(...g.additionalClasses),!((P=g.position)===null||P===void 0)&&P.forcePosition&&(this._forcePosition=!0),g.trapFocus&&(this._enableFocusTraps=!0),this._hoverPosition=(M=(N=g.position)===null||N===void 0?void 0:N.hoverPosition)!==null&&M!==void 0?M:3,this.onmousedown(this._hover.containerDomNode,F=>F.stopPropagation()),this.onkeydown(this._hover.containerDomNode,F=>{F.equals(9)&&this.dispose()}),this._register(y.addDisposableListener(this._targetWindow,\"blur\",()=>this.dispose()));const O=c(\"div.hover-row.markdown-hover\"),B=c(\"div.hover-contents\");if(typeof g.content==\"string\")B.textContent=g.content,B.style.whiteSpace=\"pre-wrap\";else if(g.content instanceof HTMLElement)B.appendChild(g.content),B.classList.add(\"html-hover-contents\");else{const F=g.content,q=this._instantiationService.createInstance(i.MarkdownRenderer,{codeBlockFontFamily:this._configurationService.getValue(\"editor\").fontFamily||p.EDITOR_FONT_DEFAULTS.fontFamily}),{element:ie}=q.render(F,{actionHandler:{callback:ae=>this._linkHandler(ae),disposables:this._messageListeners},asyncRenderCallback:()=>{B.classList.add(\"code-hover-contents\"),this.layout(),this._onRequestLayout.fire()}});B.appendChild(ie)}if(O.appendChild(B),this._hover.contentsDomNode.appendChild(O),g.actions&&g.actions.length>0){const F=c(\"div.hover-row.status-bar\"),q=c(\"div.actions\");g.actions.forEach(ie=>{const ae=this._keybindingService.lookupKeybinding(ie.commandId),ne=ae?ae.getLabel():null;_.HoverAction.render(q,{label:ie.label,commandId:ie.commandId,run:$=>{ie.run($),this.dispose()},iconClass:ie.iconClass},ne)}),F.appendChild(q),this._hover.containerDomNode.appendChild(F)}this._hoverContainer=c(\"div.workbench-hover-container\"),this._hoverPointer&&this._hoverContainer.appendChild(this._hoverPointer),this._hoverContainer.appendChild(this._hover.containerDomNode);let W;if(g.actions&&g.actions.length>0?W=!1:((R=g.persistence)===null||R===void 0?void 0:R.hideOnHover)===void 0?W=typeof g.content==\"string\"||(0,n.isMarkdownString)(g.content)&&!g.content.value.includes(\"](\")&&!g.content.value.includes(\"</a>\"):W=g.persistence.hideOnHover,W&&(!((x=g.appearance)===null||x===void 0)&&x.showHoverHint)){const F=c(\"div.hover-row.status-bar\"),q=c(\"div.info\");q.textContent=(0,t.localize)(0,null,r.isMacintosh?\"Option\":\"Alt\"),F.appendChild(q),this._hover.containerDomNode.appendChild(F)}const V=[...this._target.targetElements];W||V.push(this._hoverContainer);const K=this._register(new s(V));if(this._register(K.onMouseOut(()=>{this._isLocked||this.dispose()})),W){const F=[...this._target.targetElements,this._hoverContainer];this._lockMouseTracker=this._register(new s(F)),this._register(this._lockMouseTracker.onMouseOut(()=>{this._isLocked||this.dispose()}))}else this._lockMouseTracker=K}addFocusTrap(){if(!this._enableFocusTraps||this._addedFocusTrap)return;this._addedFocusTrap=!0;const g=this._hover.containerDomNode,h=this.findLastFocusableChild(this._hover.containerDomNode);if(h){const m=y.prepend(this._hoverContainer,c(\"div\")),C=y.append(this._hoverContainer,c(\"div\"));m.tabIndex=0,C.tabIndex=0,this._register(y.addDisposableListener(C,\"focus\",w=>{g.focus(),w.preventDefault()})),this._register(y.addDisposableListener(m,\"focus\",w=>{h.focus(),w.preventDefault()}))}}findLastFocusableChild(g){if(g.hasChildNodes())for(let h=0;h<g.childNodes.length;h++){const m=g.childNodes.item(g.childNodes.length-h-1);if(m.nodeType===m.ELEMENT_NODE){const w=m;if(typeof w.tabIndex==\"number\"&&w.tabIndex>=0)return w}const C=this.findLastFocusableChild(m);if(C)return C}}render(g){var h;g.appendChild(this._hoverContainer);const C=this._hoverContainer.contains(this._hoverContainer.ownerDocument.activeElement)&&(0,_.getHoverAccessibleViewHint)(this._configurationService.getValue(\"accessibility.verbosity.hover\")===!0&&this._accessibilityService.isScreenReaderOptimized(),(h=this._keybindingService.lookupKeybinding(\"editor.action.accessibleView\"))===null||h===void 0?void 0:h.getAriaLabel());C&&(0,f.status)(C),this.layout(),this.addFocusTrap()}layout(){this._hover.containerDomNode.classList.remove(\"right-aligned\"),this._hover.contentsDomNode.style.maxHeight=\"\";const g=P=>{const N=y.getDomNodeZoomLevel(P),M=P.getBoundingClientRect();return{top:M.top*N,bottom:M.bottom*N,right:M.right*N,left:M.left*N}},h=this._target.targetElements.map(P=>g(P)),m=Math.min(...h.map(P=>P.top)),C=Math.max(...h.map(P=>P.right)),w=Math.max(...h.map(P=>P.bottom)),D=Math.min(...h.map(P=>P.left)),I=C-D,T=w-m,A={top:m,right:C,bottom:w,left:D,width:I,height:T,center:{x:D+I/2,y:m+T/2}};if(this.adjustHorizontalHoverPosition(A),this.adjustVerticalHoverPosition(A),this.adjustHoverMaxHeight(A),this._hoverContainer.style.padding=\"\",this._hoverContainer.style.margin=\"\",this._hoverPointer){switch(this._hoverPosition){case 1:A.left+=3,A.right+=3,this._hoverContainer.style.paddingLeft=\"3px\",this._hoverContainer.style.marginLeft=\"-3px\";break;case 0:A.left-=3,A.right-=3,this._hoverContainer.style.paddingRight=\"3px\",this._hoverContainer.style.marginRight=\"-3px\";break;case 2:A.top+=3,A.bottom+=3,this._hoverContainer.style.paddingTop=\"3px\",this._hoverContainer.style.marginTop=\"-3px\";break;case 3:A.top-=3,A.bottom-=3,this._hoverContainer.style.paddingBottom=\"3px\",this._hoverContainer.style.marginBottom=\"-3px\";break}A.center.x=A.left+I/2,A.center.y=A.top+T/2}this.computeXCordinate(A),this.computeYCordinate(A),this._hoverPointer&&(this._hoverPointer.classList.remove(\"top\"),this._hoverPointer.classList.remove(\"left\"),this._hoverPointer.classList.remove(\"right\"),this._hoverPointer.classList.remove(\"bottom\"),this.setHoverPointerPosition(A)),this._hover.onContentsChanged()}computeXCordinate(g){const h=this._hover.containerDomNode.clientWidth+2;this._target.x!==void 0?this._x=this._target.x:this._hoverPosition===1?this._x=g.right:this._hoverPosition===0?this._x=g.left-h:(this._hoverPointer?this._x=g.center.x-this._hover.containerDomNode.clientWidth/2:this._x=g.left,this._x+h>=this._targetDocumentElement.clientWidth&&(this._hover.containerDomNode.classList.add(\"right-aligned\"),this._x=Math.max(this._targetDocumentElement.clientWidth-h-2,this._targetDocumentElement.clientLeft))),this._x<this._targetDocumentElement.clientLeft&&(this._x=g.left+2)}computeYCordinate(g){this._target.y!==void 0?this._y=this._target.y:this._hoverPosition===3?this._y=g.top:this._hoverPosition===2?this._y=g.bottom-2:this._hoverPointer?this._y=g.center.y+this._hover.containerDomNode.clientHeight/2:this._y=g.bottom,this._y>this._targetWindow.innerHeight&&(this._y=g.bottom)}adjustHorizontalHoverPosition(g){if(this._target.x===void 0){if(this._forcePosition){const h=(this._hoverPointer?3:0)+2;this._hoverPosition===1?this._hover.containerDomNode.style.maxWidth=`${this._targetDocumentElement.clientWidth-g.right-h}px`:this._hoverPosition===0&&(this._hover.containerDomNode.style.maxWidth=`${g.left-h}px`);return}this._hoverPosition===1?this._targetDocumentElement.clientWidth-g.right<this._hover.containerDomNode.clientWidth&&(g.left>=this._hover.containerDomNode.clientWidth?this._hoverPosition=0:this._hoverPosition=2):this._hoverPosition===0&&(g.left<this._hover.containerDomNode.clientWidth&&(this._targetDocumentElement.clientWidth-g.right>=this._hover.containerDomNode.clientWidth?this._hoverPosition=1:this._hoverPosition=2),g.left-this._hover.containerDomNode.clientWidth<=this._targetDocumentElement.clientLeft&&(this._hoverPosition=1))}}adjustVerticalHoverPosition(g){this._target.y!==void 0||this._forcePosition||(this._hoverPosition===3?g.top-this._hover.containerDomNode.clientHeight<0&&(this._hoverPosition=2):this._hoverPosition===2&&g.bottom+this._hover.containerDomNode.clientHeight>this._targetWindow.innerHeight&&(this._hoverPosition=3))}adjustHoverMaxHeight(g){let h=this._targetWindow.innerHeight/2;if(this._forcePosition){const m=(this._hoverPointer?3:0)+2;this._hoverPosition===3?h=Math.min(h,g.top-m):this._hoverPosition===2&&(h=Math.min(h,this._targetWindow.innerHeight-g.bottom-m))}if(this._hover.containerDomNode.style.maxHeight=`${h}px`,this._hover.contentsDomNode.clientHeight<this._hover.contentsDomNode.scrollHeight){const m=`${this._hover.scrollbar.options.verticalScrollbarSize}px`;this._hover.contentsDomNode.style.paddingRight!==m&&(this._hover.contentsDomNode.style.paddingRight=m)}}setHoverPointerPosition(g){if(this._hoverPointer)switch(this._hoverPosition){case 0:case 1:{this._hoverPointer.classList.add(this._hoverPosition===0?\"right\":\"left\");const h=this._hover.containerDomNode.clientHeight;h>g.height?this._hoverPointer.style.top=`${g.center.y-(this._y-h)-3}px`:this._hoverPointer.style.top=`${Math.round(h/2)-3}px`;break}case 3:case 2:{this._hoverPointer.classList.add(this._hoverPosition===3?\"bottom\":\"top\");const h=this._hover.containerDomNode.clientWidth;let m=Math.round(h/2)-3;const C=this._x+m;(C<g.left||C>g.right)&&(m=g.center.x-this._x-3),this._hoverPointer.style.left=`${m}px`;break}}}focus(){this._hover.containerDomNode.focus()}dispose(){this._isDisposed||(this._onDispose.fire(),this._hoverContainer.remove(),this._messageListeners.dispose(),this._target.dispose(),super.dispose()),this._isDisposed=!0}};e.HoverWidget=d,e.HoverWidget=d=ke([ge(1,E.IKeybindingService),ge(2,S.IConfigurationService),ge(3,b.IOpenerService),ge(4,a.IInstantiationService),ge(5,u.IAccessibilityService)],d);class s extends v.Widget{get onMouseOut(){return this._onMouseOut.event}get isMouseIn(){return this._isMouseIn}constructor(g){super(),this._elements=g,this._isMouseIn=!0,this._onMouseOut=this._register(new k.Emitter),this._elements.forEach(h=>this.onmouseover(h,()=>this._onTargetMouseOver(h))),this._elements.forEach(h=>this.onmouseleave(h,()=>this._onTargetMouseLeave(h)))}_onTargetMouseOver(g){this._isMouseIn=!0,this._clearEvaluateMouseStateTimeout(g)}_onTargetMouseLeave(g){this._isMouseIn=!1,this._evaluateMouseState(g)}_evaluateMouseState(g){this._clearEvaluateMouseStateTimeout(g),this._mouseTimeout=y.getWindow(g).setTimeout(()=>this._fireIfMouseOutside(),0)}_clearEvaluateMouseStateTimeout(g){this._mouseTimeout&&(y.getWindow(g).clearTimeout(this._mouseTimeout),this._mouseTimeout=void 0)}_fireIfMouseOutside(){this._isMouseIn||this._onMouseOut.fire()}}class l{constructor(g){this._element=g,this.targetElements=[this._element]}dispose(){}}}),define(se[32],oe([1,0,6,2,11,151,113,133,514,612,515,518,234,8,27,43,45,80,517]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ResolvedLanguageConfiguration=e.LanguageConfigurationRegistry=e.LanguageConfigurationChangeEvent=e.getScopedLineTokens=e.getIndentationAtPosition=e.LanguageConfigurationService=e.ILanguageConfigurationService=e.LanguageConfigurationServiceChangeEvent=void 0;class d{constructor(M){this.languageId=M}affects(M){return this.languageId?this.languageId===M:!0}}e.LanguageConfigurationServiceChangeEvent=d,e.ILanguageConfigurationService=(0,n.createDecorator)(\"languageConfigurationService\");let s=class extends k.Disposable{constructor(M,R){super(),this.configurationService=M,this.languageService=R,this._registry=this._register(new A),this.onDidChangeEmitter=this._register(new L.Emitter),this.onDidChange=this.onDidChangeEmitter.event,this.configurations=new Map;const x=new Set(Object.values(o));this._register(this.configurationService.onDidChangeConfiguration(O=>{const B=O.change.keys.some(V=>x.has(V)),W=O.change.overrides.filter(([V,K])=>K.some(F=>x.has(F))).map(([V])=>V);if(B)this.configurations.clear(),this.onDidChangeEmitter.fire(new d(void 0));else for(const V of W)this.languageService.isRegisteredLanguageId(V)&&(this.configurations.delete(V),this.onDidChangeEmitter.fire(new d(V)))})),this._register(this._registry.onDidChange(O=>{this.configurations.delete(O.languageId),this.onDidChangeEmitter.fire(new d(O.languageId))}))}register(M,R,x){return this._registry.register(M,R,x)}getLanguageConfiguration(M){let R=this.configurations.get(M);return R||(R=l(M,this._registry,this.configurationService,this.languageService),this.configurations.set(M,R)),R}};e.LanguageConfigurationService=s,e.LanguageConfigurationService=s=ke([ge(0,t.IConfigurationService),ge(1,r.ILanguageService)],s);function l(N,M,R,x){let O=M.getLanguageConfiguration(N);if(!O){if(!x.isRegisteredLanguageId(N))return new P(N,{});O=new P(N,{})}const B=g(O.languageId,R),W=D([O.underlyingConfig,B]);return new P(O.languageId,W)}const o={brackets:\"editor.language.brackets\",colorizedBracketPairs:\"editor.language.colorizedBracketPairs\"};function g(N,M){const R=M.getValue(o.brackets,{overrideIdentifier:N}),x=M.getValue(o.colorizedBracketPairs,{overrideIdentifier:N});return{brackets:h(R),colorizedBracketPairs:h(x)}}function h(N){if(Array.isArray(N))return N.map(M=>{if(!(!Array.isArray(M)||M.length!==2))return[M[0],M[1]]}).filter(M=>!!M)}function m(N,M,R){const x=N.getLineContent(M);let O=y.getLeadingWhitespace(x);return O.length>R-1&&(O=O.substring(0,R-1)),O}e.getIndentationAtPosition=m;function C(N,M,R){N.tokenization.forceTokenization(M);const x=N.tokenization.getLineTokens(M),O=typeof R>\"u\"?N.getLineMaxColumn(M)-1:R-1;return(0,p.createScopedLineTokens)(x,O)}e.getScopedLineTokens=C;class w{constructor(M){this.languageId=M,this._resolved=null,this._entries=[],this._order=0,this._resolved=null}register(M,R){const x=new I(M,R,++this._order);return this._entries.push(x),this._resolved=null,(0,k.toDisposable)(()=>{for(let O=0;O<this._entries.length;O++)if(this._entries[O]===x){this._entries.splice(O,1),this._resolved=null;break}})}getResolvedConfiguration(){if(!this._resolved){const M=this._resolve();M&&(this._resolved=new P(this.languageId,M))}return this._resolved}_resolve(){return this._entries.length===0?null:(this._entries.sort(I.cmp),D(this._entries.map(M=>M.configuration)))}}function D(N){let M={comments:void 0,brackets:void 0,wordPattern:void 0,indentationRules:void 0,onEnterRules:void 0,autoClosingPairs:void 0,surroundingPairs:void 0,autoCloseBefore:void 0,folding:void 0,colorizedBracketPairs:void 0,__electricCharacterSupport:void 0};for(const R of N)M={comments:R.comments||M.comments,brackets:R.brackets||M.brackets,wordPattern:R.wordPattern||M.wordPattern,indentationRules:R.indentationRules||M.indentationRules,onEnterRules:R.onEnterRules||M.onEnterRules,autoClosingPairs:R.autoClosingPairs||M.autoClosingPairs,surroundingPairs:R.surroundingPairs||M.surroundingPairs,autoCloseBefore:R.autoCloseBefore||M.autoCloseBefore,folding:R.folding||M.folding,colorizedBracketPairs:R.colorizedBracketPairs||M.colorizedBracketPairs,__electricCharacterSupport:R.__electricCharacterSupport||M.__electricCharacterSupport};return M}class I{constructor(M,R,x){this.configuration=M,this.priority=R,this.order=x}static cmp(M,R){return M.priority===R.priority?M.order-R.order:M.priority-R.priority}}class T{constructor(M){this.languageId=M}}e.LanguageConfigurationChangeEvent=T;class A extends k.Disposable{constructor(){super(),this._entries=new Map,this._onDidChange=this._register(new L.Emitter),this.onDidChange=this._onDidChange.event,this._register(this.register(f.PLAINTEXT_LANGUAGE_ID,{brackets:[[\"(\",\")\"],[\"[\",\"]\"],[\"{\",\"}\"]],surroundingPairs:[{open:\"{\",close:\"}\"},{open:\"[\",close:\"]\"},{open:\"(\",close:\")\"},{open:\"<\",close:\">\"},{open:'\"',close:'\"'},{open:\"'\",close:\"'\"},{open:\"`\",close:\"`\"}],colorizedBracketPairs:[],folding:{offSide:!0}},0))}register(M,R,x=0){let O=this._entries.get(M);O||(O=new w(M),this._entries.set(M,O));const B=O.register(R,x);return this._onDidChange.fire(new T(M)),(0,k.toDisposable)(()=>{B.dispose(),this._onDidChange.fire(new T(M))})}getLanguageConfiguration(M){const R=this._entries.get(M);return R?.getResolvedConfiguration()||null}}e.LanguageConfigurationRegistry=A;class P{constructor(M,R){this.languageId=M,this.underlyingConfig=R,this._brackets=null,this._electricCharacter=null,this._onEnterSupport=this.underlyingConfig.brackets||this.underlyingConfig.indentationRules||this.underlyingConfig.onEnterRules?new a.OnEnterSupport(this.underlyingConfig):null,this.comments=P._handleComments(this.underlyingConfig),this.characterPair=new _.CharacterPairSupport(this.underlyingConfig),this.wordDefinition=this.underlyingConfig.wordPattern||E.DEFAULT_WORD_REGEXP,this.indentationRules=this.underlyingConfig.indentationRules,this.underlyingConfig.indentationRules?this.indentRulesSupport=new b.IndentRulesSupport(this.underlyingConfig.indentationRules):this.indentRulesSupport=null,this.foldingRules=this.underlyingConfig.folding||{},this.bracketsNew=new c.LanguageBracketsConfiguration(M,this.underlyingConfig)}getWordDefinition(){return(0,E.ensureValidWordDefinition)(this.wordDefinition)}get brackets(){return!this._brackets&&this.underlyingConfig.brackets&&(this._brackets=new i.RichEditBrackets(this.languageId,this.underlyingConfig.brackets)),this._brackets}get electricCharacter(){return this._electricCharacter||(this._electricCharacter=new v.BracketElectricCharacterSupport(this.brackets)),this._electricCharacter}onEnter(M,R,x,O){return this._onEnterSupport?this._onEnterSupport.onEnter(M,R,x,O):null}getAutoClosingPairs(){return new S.AutoClosingPairs(this.characterPair.getAutoClosingPairs())}getAutoCloseBeforeSet(M){return this.characterPair.getAutoCloseBeforeSet(M)}getSurroundingPairs(){return this.characterPair.getSurroundingPairs()}static _handleComments(M){const R=M.comments;if(!R)return null;const x={};if(R.lineComment&&(x.lineCommentToken=R.lineComment),R.blockComment){const[O,B]=R.blockComment;x.blockCommentStartToken=O,x.blockCommentEndToken=B}return x}}e.ResolvedLanguageConfiguration=P,(0,u.registerSingleton)(e.ILanguageConfigurationService,s,1)}),define(se[247],oe([1,0,14,2,327,603,5,32,643,51,189,13,64,61,12,18,205,112,62,44,7]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorWorkerClient=e.EditorWorkerHost=e.EditorWorkerService=void 0;const l=60*1e3,o=5*60*1e3;function g(A,P){const N=A.getModel(P);return!(!N||N.isTooLargeForSyncing())}let h=class extends k.Disposable{constructor(P,N,M,R,x){super(),this._modelService=P,this._workerManager=this._register(new C(this._modelService,R)),this._logService=M,this._register(x.linkProvider.register({language:\"*\",hasAccessToAllModels:!0},{provideLinks:(O,B)=>g(this._modelService,O.uri)?this._workerManager.withWorker().then(W=>W.computeLinks(O.uri)).then(W=>W&&{links:W}):Promise.resolve({links:[]})})),this._register(x.completionProvider.register(\"*\",new m(this._workerManager,N,this._modelService,R)))}dispose(){super.dispose()}canComputeUnicodeHighlights(P){return g(this._modelService,P)}computedUnicodeHighlights(P,N,M){return this._workerManager.withWorker().then(R=>R.computedUnicodeHighlights(P,N,M))}async computeDiff(P,N,M,R){const x=await this._workerManager.withWorker().then(W=>W.computeDiff(P,N,M,R));if(!x)return null;return{identical:x.identical,quitEarly:x.quitEarly,changes:B(x.changes),moves:x.moves.map(W=>new u.MovedText(new f.LineRangeMapping(new c.LineRange(W[0],W[1]),new c.LineRange(W[2],W[3])),B(W[4])))};function B(W){return W.map(V=>{var K;return new f.DetailedLineRangeMapping(new c.LineRange(V[0],V[1]),new c.LineRange(V[2],V[3]),(K=V[4])===null||K===void 0?void 0:K.map(F=>new f.RangeMapping(new S.Range(F[0],F[1],F[2],F[3]),new S.Range(F[4],F[5],F[6],F[7]))))})}}computeMoreMinimalEdits(P,N,M=!1){if((0,a.isNonEmptyArray)(N)){if(!g(this._modelService,P))return Promise.resolve(N);const R=n.StopWatch.create(),x=this._workerManager.withWorker().then(O=>O.computeMoreMinimalEdits(P,N,M));return x.finally(()=>this._logService.trace(\"FORMAT#computeMoreMinimalEdits\",P.toString(!0),R.elapsed())),Promise.race([x,(0,L.timeout)(1e3).then(()=>N)])}else return Promise.resolve(void 0)}canNavigateValueSet(P){return g(this._modelService,P)}navigateValueSet(P,N,M){return this._workerManager.withWorker().then(R=>R.navigateValueSet(P,N,M))}canComputeWordRanges(P){return g(this._modelService,P)}computeWordRanges(P,N){return this._workerManager.withWorker().then(M=>M.computeWordRanges(P,N))}};e.EditorWorkerService=h,e.EditorWorkerService=h=ke([ge(0,v.IModelService),ge(1,b.ITextResourceConfigurationService),ge(2,i.ILogService),ge(3,p.ILanguageConfigurationService),ge(4,r.ILanguageFeaturesService)],h);class m{constructor(P,N,M,R){this.languageConfigurationService=R,this._debugDisplayName=\"wordbasedCompletions\",this._workerManager=P,this._configurationService=N,this._modelService=M}async provideCompletionItems(P,N){const M=this._configurationService.getValue(P.uri,N,\"editor\");if(M.wordBasedSuggestions===\"off\")return;const R=[];if(M.wordBasedSuggestions===\"currentDocument\")g(this._modelService,P.uri)&&R.push(P.uri);else for(const F of this._modelService.getModels())g(this._modelService,F.uri)&&(F===P?R.unshift(F.uri):(M.wordBasedSuggestions===\"allDocuments\"||F.getLanguageId()===P.getLanguageId())&&R.push(F.uri));if(R.length===0)return;const x=this.languageConfigurationService.getLanguageConfiguration(P.getLanguageId()).getWordDefinition(),O=P.getWordAtPosition(N),B=O?new S.Range(N.lineNumber,O.startColumn,N.lineNumber,O.endColumn):S.Range.fromPositions(N),W=B.setEndPosition(N.lineNumber,N.column),K=await(await this._workerManager.withWorker()).textualSuggest(R,O?.word,x);if(K)return{duration:K.duration,suggestions:K.words.map(F=>({kind:18,label:F,insertText:F,range:{insert:W,replace:B}}))}}}class C extends k.Disposable{constructor(P,N){super(),this.languageConfigurationService=N,this._modelService=P,this._editorWorkerClient=null,this._lastWorkerUsedTime=new Date().getTime(),this._register(new s.WindowIntervalTimer).cancelAndSet(()=>this._checkStopIdleWorker(),Math.round(o/2),d.$window),this._register(this._modelService.onModelRemoved(R=>this._checkStopEmptyWorker()))}dispose(){this._editorWorkerClient&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null),super.dispose()}_checkStopEmptyWorker(){if(!this._editorWorkerClient)return;this._modelService.getModels().length===0&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}_checkStopIdleWorker(){if(!this._editorWorkerClient)return;new Date().getTime()-this._lastWorkerUsedTime>o&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}withWorker(){return this._lastWorkerUsedTime=new Date().getTime(),this._editorWorkerClient||(this._editorWorkerClient=new T(this._modelService,!1,\"editorWorkerService\",this.languageConfigurationService)),Promise.resolve(this._editorWorkerClient)}}class w extends k.Disposable{constructor(P,N,M){if(super(),this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),this._proxy=P,this._modelService=N,!M){const R=new L.IntervalTimer;R.cancelAndSet(()=>this._checkStopModelSync(),Math.round(l/2)),this._register(R)}}dispose(){for(const P in this._syncedModels)(0,k.dispose)(this._syncedModels[P]);this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),super.dispose()}ensureSyncedResources(P,N){for(const M of P){const R=M.toString();this._syncedModels[R]||this._beginModelSync(M,N),this._syncedModels[R]&&(this._syncedModelsLastUsedTime[R]=new Date().getTime())}}_checkStopModelSync(){const P=new Date().getTime(),N=[];for(const M in this._syncedModelsLastUsedTime)P-this._syncedModelsLastUsedTime[M]>l&&N.push(M);for(const M of N)this._stopModelSync(M)}_beginModelSync(P,N){const M=this._modelService.getModel(P);if(!M||!N&&M.isTooLargeForSyncing())return;const R=P.toString();this._proxy.acceptNewModel({url:M.uri.toString(),lines:M.getLinesContent(),EOL:M.getEOL(),versionId:M.getVersionId()});const x=new k.DisposableStore;x.add(M.onDidChangeContent(O=>{this._proxy.acceptModelChanged(R.toString(),O)})),x.add(M.onWillDispose(()=>{this._stopModelSync(R)})),x.add((0,k.toDisposable)(()=>{this._proxy.acceptRemovedModel(R)})),this._syncedModels[R]=x}_stopModelSync(P){const N=this._syncedModels[P];delete this._syncedModels[P],delete this._syncedModelsLastUsedTime[P],(0,k.dispose)(N)}}class D{constructor(P){this._instance=P,this._proxyObj=Promise.resolve(this._instance)}dispose(){this._instance.dispose()}getProxyObject(){return this._proxyObj}}class I{constructor(P){this._workerClient=P}fhr(P,N){return this._workerClient.fhr(P,N)}}e.EditorWorkerHost=I;class T extends k.Disposable{constructor(P,N,M,R){super(),this.languageConfigurationService=R,this._disposed=!1,this._modelService=P,this._keepIdleModels=N,this._workerFactory=new E.DefaultWorkerFactory(M),this._worker=null,this._modelManager=null}fhr(P,N){throw new Error(\"Not implemented!\")}_getOrCreateWorker(){if(!this._worker)try{this._worker=this._register(new y.SimpleWorkerClient(this._workerFactory,\"vs/editor/common/services/editorSimpleWorker\",new I(this)))}catch(P){(0,y.logOnceWebWorkerWarning)(P),this._worker=new D(new _.EditorSimpleWorker(new I(this),null))}return this._worker}_getProxy(){return this._getOrCreateWorker().getProxyObject().then(void 0,P=>((0,y.logOnceWebWorkerWarning)(P),this._worker=new D(new _.EditorSimpleWorker(new I(this),null)),this._getOrCreateWorker().getProxyObject()))}_getOrCreateModelManager(P){return this._modelManager||(this._modelManager=this._register(new w(P,this._modelService,this._keepIdleModels))),this._modelManager}async _withSyncedResources(P,N=!1){return this._disposed?Promise.reject((0,t.canceled)()):this._getProxy().then(M=>(this._getOrCreateModelManager(M).ensureSyncedResources(P,N),M))}computedUnicodeHighlights(P,N,M){return this._withSyncedResources([P]).then(R=>R.computeUnicodeHighlights(P.toString(),N,M))}computeDiff(P,N,M,R){return this._withSyncedResources([P,N],!0).then(x=>x.computeDiff(P.toString(),N.toString(),M,R))}computeMoreMinimalEdits(P,N,M){return this._withSyncedResources([P]).then(R=>R.computeMoreMinimalEdits(P.toString(),N,M))}computeLinks(P){return this._withSyncedResources([P]).then(N=>N.computeLinks(P.toString()))}computeDefaultDocumentColors(P){return this._withSyncedResources([P]).then(N=>N.computeDefaultDocumentColors(P.toString()))}async textualSuggest(P,N,M){const R=await this._withSyncedResources(P),x=M.source,O=M.flags;return R.textualSuggest(P.map(B=>B.toString()),N,x,O)}computeWordRanges(P,N){return this._withSyncedResources([P]).then(M=>{const R=this._modelService.getModel(P);if(!R)return Promise.resolve(null);const x=this.languageConfigurationService.getLanguageConfiguration(R.getLanguageId()).getWordDefinition(),O=x.source,B=x.flags;return M.computeWordRanges(P.toString(),N,O,B)})}navigateValueSet(P,N,M){return this._withSyncedResources([P]).then(R=>{const x=this._modelService.getModel(P);if(!x)return null;const O=this.languageConfigurationService.getLanguageConfiguration(x.getLanguageId()).getWordDefinition(),B=O.source,W=O.flags;return R.navigateValueSet(P.toString(),N,M,B,W)})}dispose(){super.dispose(),this._disposed=!0}}e.EditorWorkerClient=T}),define(se[790],oe([1,0,55,247]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createWebWorker=void 0;function y(S,p,_){return new E(S,p,_)}e.createWebWorker=y;class E extends k.EditorWorkerClient{constructor(p,_,v){super(p,v.keepIdleModels||!1,v.label,_),this._foreignModuleId=v.moduleId,this._foreignModuleCreateData=v.createData||null,this._foreignModuleHost=v.host||null,this._foreignProxy=null}fhr(p,_){if(!this._foreignModuleHost||typeof this._foreignModuleHost[p]!=\"function\")return Promise.reject(new Error(\"Missing method \"+p+\" or missing main thread foreign host.\"));try{return Promise.resolve(this._foreignModuleHost[p].apply(this._foreignModuleHost,_))}catch(v){return Promise.reject(v)}}_getForeignProxy(){return this._foreignProxy||(this._foreignProxy=this._getProxy().then(p=>{const _=this._foreignModuleHost?(0,L.getAllMethodNames)(this._foreignModuleHost):[];return p.loadForeignModule(this._foreignModuleId,this._foreignModuleCreateData,_).then(v=>{this._foreignModuleCreateData=null;const b=(n,t)=>p.fmr(n,t),a=(n,t)=>function(){const r=Array.prototype.slice.call(arguments,0);return t(n,r)},i={};for(const n of v)i[n]=a(n,b);return i})})),this._foreignProxy}getProxy(){return this._getForeignProxy()}withSyncedResources(p){return this._withSyncedResources(p).then(_=>this.getProxy())}}}),define(se[248],oe([1,0,11,113,133,32]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getIndentMetadata=e.getIndentActionForType=e.getIndentForEnter=e.getGoodIndentForLine=e.getInheritIndentForLine=void 0;function S(i,n,t){const r=i.tokenization.getLanguageIdAtPosition(n,0);if(n>1){let u,f=-1;for(u=n-1;u>=1;u--){if(i.tokenization.getLanguageIdAtPosition(u,0)!==r)return f;const c=i.getLineContent(u);if(t.shouldIgnore(c)||/^\\s+$/.test(c)||c===\"\"){f=u;continue}return u}}return-1}function p(i,n,t,r=!0,u){if(i<4)return null;const f=u.getLanguageConfiguration(n.tokenization.getLanguageId()).indentRulesSupport;if(!f)return null;if(t<=1)return{indentation:\"\",action:null};for(let s=t-1;s>0&&n.getLineContent(s)===\"\";s--)if(s===1)return{indentation:\"\",action:null};const c=S(n,t,f);if(c<0)return null;if(c<1)return{indentation:\"\",action:null};const d=n.getLineContent(c);if(f.shouldIncrease(d)||f.shouldIndentNextLine(d))return{indentation:L.getLeadingWhitespace(d),action:k.IndentAction.Indent,line:c};if(f.shouldDecrease(d))return{indentation:L.getLeadingWhitespace(d),action:null,line:c};{if(c===1)return{indentation:L.getLeadingWhitespace(n.getLineContent(c)),action:null,line:c};const s=c-1,l=f.getIndentMetadata(n.getLineContent(s));if(!(l&3)&&l&4){let o=0;for(let g=s-1;g>0;g--)if(!f.shouldIndentNextLine(n.getLineContent(g))){o=g;break}return{indentation:L.getLeadingWhitespace(n.getLineContent(o+1)),action:null,line:o+1}}if(r)return{indentation:L.getLeadingWhitespace(n.getLineContent(c)),action:null,line:c};for(let o=c;o>0;o--){const g=n.getLineContent(o);if(f.shouldIncrease(g))return{indentation:L.getLeadingWhitespace(g),action:k.IndentAction.Indent,line:o};if(f.shouldIndentNextLine(g)){let h=0;for(let m=o-1;m>0;m--)if(!f.shouldIndentNextLine(n.getLineContent(o))){h=m;break}return{indentation:L.getLeadingWhitespace(n.getLineContent(h+1)),action:null,line:h+1}}else if(f.shouldDecrease(g))return{indentation:L.getLeadingWhitespace(g),action:null,line:o}}return{indentation:L.getLeadingWhitespace(n.getLineContent(1)),action:null,line:1}}}e.getInheritIndentForLine=p;function _(i,n,t,r,u,f){if(i<4)return null;const c=f.getLanguageConfiguration(t);if(!c)return null;const d=f.getLanguageConfiguration(t).indentRulesSupport;if(!d)return null;const s=p(i,n,r,void 0,f),l=n.getLineContent(r);if(s){const o=s.line;if(o!==void 0){let g=!0;for(let h=o;h<r-1;h++)if(!/^\\s*$/.test(n.getLineContent(h))){g=!1;break}if(g){const h=c.onEnter(i,\"\",n.getLineContent(o),\"\");if(h){let m=L.getLeadingWhitespace(n.getLineContent(o));return h.removeText&&(m=m.substring(0,m.length-h.removeText)),h.indentAction===k.IndentAction.Indent||h.indentAction===k.IndentAction.IndentOutdent?m=u.shiftIndent(m):h.indentAction===k.IndentAction.Outdent&&(m=u.unshiftIndent(m)),d.shouldDecrease(l)&&(m=u.unshiftIndent(m)),h.appendText&&(m+=h.appendText),L.getLeadingWhitespace(m)}}}return d.shouldDecrease(l)?s.action===k.IndentAction.Indent?s.indentation:u.unshiftIndent(s.indentation):s.action===k.IndentAction.Indent?u.shiftIndent(s.indentation):s.indentation}return null}e.getGoodIndentForLine=_;function v(i,n,t,r,u){if(i<4)return null;n.tokenization.forceTokenization(t.startLineNumber);const f=n.tokenization.getLineTokens(t.startLineNumber),c=(0,y.createScopedLineTokens)(f,t.startColumn-1),d=c.getLineContent();let s=!1,l;c.firstCharOffset>0&&f.getLanguageId(0)!==c.languageId?(s=!0,l=d.substr(0,t.startColumn-1-c.firstCharOffset)):l=f.getLineContent().substring(0,t.startColumn-1);let o;t.isEmpty()?o=d.substr(t.startColumn-1-c.firstCharOffset):o=(0,E.getScopedLineTokens)(n,t.endLineNumber,t.endColumn).getLineContent().substr(t.endColumn-1-c.firstCharOffset);const g=u.getLanguageConfiguration(c.languageId).indentRulesSupport;if(!g)return null;const h=l,m=L.getLeadingWhitespace(l),C={tokenization:{getLineTokens:T=>n.tokenization.getLineTokens(T),getLanguageId:()=>n.getLanguageId(),getLanguageIdAtPosition:(T,A)=>n.getLanguageIdAtPosition(T,A)},getLineContent:T=>T===t.startLineNumber?h:n.getLineContent(T)},w=L.getLeadingWhitespace(f.getLineContent()),D=p(i,C,t.startLineNumber+1,void 0,u);if(!D){const T=s?w:m;return{beforeEnter:T,afterEnter:T}}let I=s?w:D.indentation;return D.action===k.IndentAction.Indent&&(I=r.shiftIndent(I)),g.shouldDecrease(o)&&(I=r.unshiftIndent(I)),{beforeEnter:s?w:m,afterEnter:I}}e.getIndentForEnter=v;function b(i,n,t,r,u,f){if(i<4)return null;const c=(0,E.getScopedLineTokens)(n,t.startLineNumber,t.startColumn);if(c.firstCharOffset)return null;const d=f.getLanguageConfiguration(c.languageId).indentRulesSupport;if(!d)return null;const s=c.getLineContent(),l=s.substr(0,t.startColumn-1-c.firstCharOffset);let o;if(t.isEmpty()?o=s.substr(t.startColumn-1-c.firstCharOffset):o=(0,E.getScopedLineTokens)(n,t.endLineNumber,t.endColumn).getLineContent().substr(t.endColumn-1-c.firstCharOffset),!d.shouldDecrease(l+o)&&d.shouldDecrease(l+r+o)){const g=p(i,n,t.startLineNumber,!1,f);if(!g)return null;let h=g.indentation;return g.action!==k.IndentAction.Indent&&(h=u.unshiftIndent(h)),h}return null}e.getIndentActionForType=b;function a(i,n,t){const r=t.getLanguageConfiguration(i.getLanguageId()).indentRulesSupport;return!r||n<1||n>i.getLineCount()?null:r.getIndentMetadata(i.getLineContent(n))}e.getIndentMetadata=a}),define(se[249],oe([1,0,113,32]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getEnterAction=void 0;function y(E,S,p,_){const v=(0,k.getScopedLineTokens)(S,p.startLineNumber,p.startColumn),b=_.getLanguageConfiguration(v.languageId);if(!b)return null;const a=v.getLineContent(),i=a.substr(0,p.startColumn-1-v.firstCharOffset);let n;p.isEmpty()?n=a.substr(p.startColumn-1-v.firstCharOffset):n=(0,k.getScopedLineTokens)(S,p.endLineNumber,p.endColumn).getLineContent().substr(p.endColumn-1-v.firstCharOffset);let t=\"\";if(p.startLineNumber>1&&v.firstCharOffset===0){const s=(0,k.getScopedLineTokens)(S,p.startLineNumber-1);s.languageId===v.languageId&&(t=s.getLineContent())}const r=b.onEnter(E,t,i,n);if(!r)return null;const u=r.indentAction;let f=r.appendText;const c=r.removeText||0;f?u===L.IndentAction.Indent&&(f=\"\t\"+f):u===L.IndentAction.Indent||u===L.IndentAction.IndentOutdent?f=\"\t\":f=\"\";let d=(0,k.getIndentationAtPosition)(S,p.startLineNumber,p.startColumn);return c&&(d=d.substring(0,d.length-c)),{indentAction:u,appendText:f,removeText:c,indentation:d}}e.getEnterAction=y}),define(se[250],oe([1,0,11,85,5,24,249,32]),function(te,e,L,k,y,E,S,p){\"use strict\";var _;Object.defineProperty(e,\"__esModule\",{value:!0}),e.ShiftCommand=void 0;const v=Object.create(null);function b(i,n){if(n<=0)return\"\";v[i]||(v[i]=[\"\",i]);const t=v[i];for(let r=t.length;r<=n;r++)t[r]=t[r-1]+i;return t[n]}let a=_=class{static unshiftIndent(n,t,r,u,f){const c=k.CursorColumns.visibleColumnFromColumn(n,t,r);if(f){const d=b(\" \",u),l=k.CursorColumns.prevIndentTabStop(c,u)/u;return b(d,l)}else{const d=\"\t\",l=k.CursorColumns.prevRenderTabStop(c,r)/r;return b(d,l)}}static shiftIndent(n,t,r,u,f){const c=k.CursorColumns.visibleColumnFromColumn(n,t,r);if(f){const d=b(\" \",u),l=k.CursorColumns.nextIndentTabStop(c,u)/u;return b(d,l)}else{const d=\"\t\",l=k.CursorColumns.nextRenderTabStop(c,r)/r;return b(d,l)}}constructor(n,t,r){this._languageConfigurationService=r,this._opts=t,this._selection=n,this._selectionId=null,this._useLastEditRangeForCursorEndPosition=!1,this._selectionStartColumnStaysPut=!1}_addEditOperation(n,t,r){this._useLastEditRangeForCursorEndPosition?n.addTrackedEditOperation(t,r):n.addEditOperation(t,r)}getEditOperations(n,t){const r=this._selection.startLineNumber;let u=this._selection.endLineNumber;this._selection.endColumn===1&&r!==u&&(u=u-1);const{tabSize:f,indentSize:c,insertSpaces:d}=this._opts,s=r===u;if(this._opts.useTabStops){this._selection.isEmpty()&&/^\\s*$/.test(n.getLineContent(r))&&(this._useLastEditRangeForCursorEndPosition=!0);let l=0,o=0;for(let g=r;g<=u;g++,l=o){o=0;const h=n.getLineContent(g);let m=L.firstNonWhitespaceIndex(h);if(this._opts.isUnshift&&(h.length===0||m===0)||!s&&!this._opts.isUnshift&&h.length===0)continue;if(m===-1&&(m=h.length),g>1&&k.CursorColumns.visibleColumnFromColumn(h,m+1,f)%c!==0&&n.tokenization.isCheapToTokenize(g-1)){const D=(0,S.getEnterAction)(this._opts.autoIndent,n,new y.Range(g-1,n.getLineMaxColumn(g-1),g-1,n.getLineMaxColumn(g-1)),this._languageConfigurationService);if(D){if(o=l,D.appendText)for(let I=0,T=D.appendText.length;I<T&&o<c&&D.appendText.charCodeAt(I)===32;I++)o++;D.removeText&&(o=Math.max(0,o-D.removeText));for(let I=0;I<o&&!(m===0||h.charCodeAt(m-1)!==32);I++)m--}}if(this._opts.isUnshift&&m===0)continue;let C;this._opts.isUnshift?C=_.unshiftIndent(h,m+1,f,c,d):C=_.shiftIndent(h,m+1,f,c,d),this._addEditOperation(t,new y.Range(g,1,g,m+1),C),g===r&&!this._selection.isEmpty()&&(this._selectionStartColumnStaysPut=this._selection.startColumn<=m+1)}}else{!this._opts.isUnshift&&this._selection.isEmpty()&&n.getLineLength(r)===0&&(this._useLastEditRangeForCursorEndPosition=!0);const l=d?b(\" \",c):\"\t\";for(let o=r;o<=u;o++){const g=n.getLineContent(o);let h=L.firstNonWhitespaceIndex(g);if(!(this._opts.isUnshift&&(g.length===0||h===0))&&!(!s&&!this._opts.isUnshift&&g.length===0)&&(h===-1&&(h=g.length),!(this._opts.isUnshift&&h===0)))if(this._opts.isUnshift){h=Math.min(h,c);for(let m=0;m<h;m++)if(g.charCodeAt(m)===9){h=m+1;break}this._addEditOperation(t,new y.Range(o,1,o,h+1),\"\")}else this._addEditOperation(t,new y.Range(o,1,o,1),l),o===r&&!this._selection.isEmpty()&&(this._selectionStartColumnStaysPut=this._selection.startColumn===1)}}this._selectionId=t.trackSelection(this._selection)}computeCursorState(n,t){if(this._useLastEditRangeForCursorEndPosition){const u=t.getInverseEditOperations()[0];return new E.Selection(u.range.endLineNumber,u.range.endColumn,u.range.endLineNumber,u.range.endColumn)}const r=t.getTrackedSelection(this._selectionId);if(this._selectionStartColumnStaysPut){const u=this._selection.startColumn;return r.startColumn<=u?r:r.getDirection()===0?new E.Selection(r.startLineNumber,u,r.endLineNumber,r.endColumn):new E.Selection(r.endLineNumber,r.endColumn,r.startLineNumber,u)}return r}};e.ShiftCommand=a,e.ShiftCommand=a=_=ke([ge(2,p.ILanguageConfigurationService)],a)}),define(se[251],oe([1,0,12,11,130,250,501,75,150,5,10,113,32,133,248,249]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CompositionOutcome=e.TypeWithAutoClosingCommand=e.TypeOperations=void 0;class u{static indent(h,m,C){if(m===null||C===null)return[];const w=[];for(let D=0,I=C.length;D<I;D++)w[D]=new E.ShiftCommand(C[D],{isUnshift:!1,tabSize:h.tabSize,indentSize:h.indentSize,insertSpaces:h.insertSpaces,useTabStops:h.useTabStops,autoIndent:h.autoIndent},h.languageConfigurationService);return w}static outdent(h,m,C){const w=[];for(let D=0,I=C.length;D<I;D++)w[D]=new E.ShiftCommand(C[D],{isUnshift:!0,tabSize:h.tabSize,indentSize:h.indentSize,insertSpaces:h.insertSpaces,useTabStops:h.useTabStops,autoIndent:h.autoIndent},h.languageConfigurationService);return w}static shiftIndent(h,m,C){return C=C||1,E.ShiftCommand.shiftIndent(m,m.length+C,h.tabSize,h.indentSize,h.insertSpaces)}static unshiftIndent(h,m,C){return C=C||1,E.ShiftCommand.unshiftIndent(m,m.length+C,h.tabSize,h.indentSize,h.insertSpaces)}static _distributedPaste(h,m,C,w){const D=[];for(let I=0,T=C.length;I<T;I++)D[I]=new y.ReplaceCommand(C[I],w[I]);return new p.EditOperationResult(0,D,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}static _simplePaste(h,m,C,w,D){const I=[];for(let T=0,A=C.length;T<A;T++){const P=C[T],N=P.getPosition();if(D&&!P.isEmpty()&&(D=!1),D&&w.indexOf(`\n`)!==w.length-1&&(D=!1),D){const M=new v.Range(N.lineNumber,1,N.lineNumber,1);I[T]=new y.ReplaceCommandThatPreservesSelection(M,w,P,!0)}else I[T]=new y.ReplaceCommand(P,w)}return new p.EditOperationResult(0,I,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}static _distributePasteToCursors(h,m,C,w,D){if(w||m.length===1)return null;if(D&&D.length===m.length)return D;if(h.multiCursorPaste===\"spread\"){C.charCodeAt(C.length-1)===10&&(C=C.substr(0,C.length-1)),C.charCodeAt(C.length-1)===13&&(C=C.substr(0,C.length-1));const I=k.splitLines(C);if(I.length===m.length)return I}return null}static paste(h,m,C,w,D,I){const T=this._distributePasteToCursors(h,C,w,D,I);return T?(C=C.sort(v.Range.compareRangesUsingStarts),this._distributedPaste(h,m,C,T)):this._simplePaste(h,m,C,w,D)}static _goodIndentForLine(h,m,C){let w=null,D=\"\";const I=(0,t.getInheritIndentForLine)(h.autoIndent,m,C,!1,h.languageConfigurationService);if(I)w=I.action,D=I.indentation;else if(C>1){let T;for(T=C-1;T>=1;T--){const N=m.getLineContent(T);if(k.lastNonWhitespaceIndex(N)>=0)break}if(T<1)return null;const A=m.getLineMaxColumn(T),P=(0,r.getEnterAction)(h.autoIndent,m,new v.Range(T,A,T,A),h.languageConfigurationService);P&&(D=P.indentation+P.appendText)}return w&&(w===a.IndentAction.Indent&&(D=u.shiftIndent(h,D)),w===a.IndentAction.Outdent&&(D=u.unshiftIndent(h,D)),D=h.normalizeIndentation(D)),D||null}static _replaceJumpToNextIndent(h,m,C,w){let D=\"\";const I=C.getStartPosition();if(h.insertSpaces){const T=h.visibleColumnFromColumn(m,I),A=h.indentSize,P=A-T%A;for(let N=0;N<P;N++)D+=\" \"}else D=\"\t\";return new y.ReplaceCommand(C,D,w)}static tab(h,m,C){const w=[];for(let D=0,I=C.length;D<I;D++){const T=C[D];if(T.isEmpty()){const A=m.getLineContent(T.startLineNumber);if(/^\\s*$/.test(A)&&m.tokenization.isCheapToTokenize(T.startLineNumber)){let P=this._goodIndentForLine(h,m,T.startLineNumber);P=P||\"\t\";const N=h.normalizeIndentation(P);if(!A.startsWith(N)){w[D]=new y.ReplaceCommand(new v.Range(T.startLineNumber,1,T.startLineNumber,A.length+1),N,!0);continue}}w[D]=this._replaceJumpToNextIndent(h,m,T,!0)}else{if(T.startLineNumber===T.endLineNumber){const A=m.getLineMaxColumn(T.startLineNumber);if(T.startColumn!==1||T.endColumn!==A){w[D]=this._replaceJumpToNextIndent(h,m,T,!1);continue}}w[D]=new E.ShiftCommand(T,{isUnshift:!1,tabSize:h.tabSize,indentSize:h.indentSize,insertSpaces:h.insertSpaces,useTabStops:h.useTabStops,autoIndent:h.autoIndent},h.languageConfigurationService)}}return w}static compositionType(h,m,C,w,D,I,T,A){const P=w.map(N=>this._compositionType(C,N,D,I,T,A));return new p.EditOperationResult(4,P,{shouldPushStackElementBefore:s(h,4),shouldPushStackElementAfter:!1})}static _compositionType(h,m,C,w,D,I){if(!m.isEmpty())return null;const T=m.getPosition(),A=Math.max(1,T.column-w),P=Math.min(h.getLineMaxColumn(T.lineNumber),T.column+D),N=new v.Range(T.lineNumber,A,T.lineNumber,P);return h.getValueInRange(N)===C&&I===0?null:new y.ReplaceCommandWithOffsetCursorState(N,C,0,I)}static _typeCommand(h,m,C){return C?new y.ReplaceCommandWithoutChangingPosition(h,m,!0):new y.ReplaceCommand(h,m,!0)}static _enter(h,m,C,w){if(h.autoIndent===0)return u._typeCommand(w,`\n`,C);if(!m.tokenization.isCheapToTokenize(w.getStartPosition().lineNumber)||h.autoIndent===1){const A=m.getLineContent(w.startLineNumber),P=k.getLeadingWhitespace(A).substring(0,w.startColumn-1);return u._typeCommand(w,`\n`+h.normalizeIndentation(P),C)}const D=(0,r.getEnterAction)(h.autoIndent,m,w,h.languageConfigurationService);if(D){if(D.indentAction===a.IndentAction.None)return u._typeCommand(w,`\n`+h.normalizeIndentation(D.indentation+D.appendText),C);if(D.indentAction===a.IndentAction.Indent)return u._typeCommand(w,`\n`+h.normalizeIndentation(D.indentation+D.appendText),C);if(D.indentAction===a.IndentAction.IndentOutdent){const A=h.normalizeIndentation(D.indentation),P=h.normalizeIndentation(D.indentation+D.appendText),N=`\n`+P+`\n`+A;return C?new y.ReplaceCommandWithoutChangingPosition(w,N,!0):new y.ReplaceCommandWithOffsetCursorState(w,N,-1,P.length-A.length,!0)}else if(D.indentAction===a.IndentAction.Outdent){const A=u.unshiftIndent(h,D.indentation);return u._typeCommand(w,`\n`+h.normalizeIndentation(A+D.appendText),C)}}const I=m.getLineContent(w.startLineNumber),T=k.getLeadingWhitespace(I).substring(0,w.startColumn-1);if(h.autoIndent>=4){const A=(0,t.getIndentForEnter)(h.autoIndent,m,w,{unshiftIndent:P=>u.unshiftIndent(h,P),shiftIndent:P=>u.shiftIndent(h,P),normalizeIndentation:P=>h.normalizeIndentation(P)},h.languageConfigurationService);if(A){let P=h.visibleColumnFromColumn(m,w.getEndPosition());const N=w.endColumn,M=m.getLineContent(w.endLineNumber),R=k.firstNonWhitespaceIndex(M);if(R>=0?w=w.setEndPosition(w.endLineNumber,Math.max(w.endColumn,R+1)):w=w.setEndPosition(w.endLineNumber,m.getLineMaxColumn(w.endLineNumber)),C)return new y.ReplaceCommandWithoutChangingPosition(w,`\n`+h.normalizeIndentation(A.afterEnter),!0);{let x=0;return N<=R+1&&(h.insertSpaces||(P=Math.ceil(P/h.indentSize)),x=Math.min(P+1-h.normalizeIndentation(A.afterEnter).length-1,0)),new y.ReplaceCommandWithOffsetCursorState(w,`\n`+h.normalizeIndentation(A.afterEnter),0,x,!0)}}}return u._typeCommand(w,`\n`+h.normalizeIndentation(T),C)}static _isAutoIndentType(h,m,C){if(h.autoIndent<4)return!1;for(let w=0,D=C.length;w<D;w++)if(!m.tokenization.isCheapToTokenize(C[w].getEndPosition().lineNumber))return!1;return!0}static _runAutoIndentType(h,m,C,w){const D=(0,i.getIndentationAtPosition)(m,C.startLineNumber,C.startColumn),I=(0,t.getIndentActionForType)(h.autoIndent,m,C,w,{shiftIndent:T=>u.shiftIndent(h,T),unshiftIndent:T=>u.unshiftIndent(h,T)},h.languageConfigurationService);if(I===null)return null;if(I!==h.normalizeIndentation(D)){const T=m.getLineFirstNonWhitespaceColumn(C.startLineNumber);return T===0?u._typeCommand(new v.Range(C.startLineNumber,1,C.endLineNumber,C.endColumn),h.normalizeIndentation(I)+w,!1):u._typeCommand(new v.Range(C.startLineNumber,1,C.endLineNumber,C.endColumn),h.normalizeIndentation(I)+m.getLineContent(C.startLineNumber).substring(T-1,C.startColumn-1)+w,!1)}return null}static _isAutoClosingOvertype(h,m,C,w,D){if(h.autoClosingOvertype===\"never\"||!h.autoClosingPairs.autoClosingPairsCloseSingleChar.has(D))return!1;for(let I=0,T=C.length;I<T;I++){const A=C[I];if(!A.isEmpty())return!1;const P=A.getPosition(),N=m.getLineContent(P.lineNumber);if(N.charAt(P.column-1)!==D)return!1;const R=(0,p.isQuote)(D);if((P.column>2?N.charCodeAt(P.column-2):0)===92&&R)return!1;if(h.autoClosingOvertype===\"auto\"){let O=!1;for(let B=0,W=w.length;B<W;B++){const V=w[B];if(P.lineNumber===V.startLineNumber&&P.column===V.startColumn){O=!0;break}}if(!O)return!1}}return!0}static _runAutoClosingOvertype(h,m,C,w,D){const I=[];for(let T=0,A=w.length;T<A;T++){const N=w[T].getPosition(),M=new v.Range(N.lineNumber,N.column,N.lineNumber,N.column+1);I[T]=new y.ReplaceCommand(M,D)}return new p.EditOperationResult(4,I,{shouldPushStackElementBefore:s(h,4),shouldPushStackElementAfter:!1})}static _isBeforeClosingBrace(h,m){const C=m.charAt(0),w=h.autoClosingPairs.autoClosingPairsOpenByStart.get(C)||[],D=h.autoClosingPairs.autoClosingPairsCloseByStart.get(C)||[],I=w.some(A=>m.startsWith(A.open)),T=D.some(A=>m.startsWith(A.close));return!I&&T}static _findAutoClosingPairOpen(h,m,C,w){const D=h.autoClosingPairs.autoClosingPairsOpenByEnd.get(w);if(!D)return null;let I=null;for(const T of D)if(I===null||T.open.length>I.open.length){let A=!0;for(const P of C)if(m.getValueInRange(new v.Range(P.lineNumber,P.column-T.open.length+1,P.lineNumber,P.column))+w!==T.open){A=!1;break}A&&(I=T)}return I}static _findContainedAutoClosingPair(h,m){if(m.open.length<=1)return null;const C=m.close.charAt(m.close.length-1),w=h.autoClosingPairs.autoClosingPairsCloseByEnd.get(C)||[];let D=null;for(const I of w)I.open!==m.open&&m.open.includes(I.open)&&m.close.endsWith(I.close)&&(!D||I.open.length>D.open.length)&&(D=I);return D}static _getAutoClosingPairClose(h,m,C,w,D){for(const O of C)if(!O.isEmpty())return null;const I=C.map(O=>{const B=O.getPosition();return D?{lineNumber:B.lineNumber,beforeColumn:B.column-w.length,afterColumn:B.column}:{lineNumber:B.lineNumber,beforeColumn:B.column,afterColumn:B.column}}),T=this._findAutoClosingPairOpen(h,m,I.map(O=>new b.Position(O.lineNumber,O.beforeColumn)),w);if(!T)return null;let A,P;if((0,p.isQuote)(w)?(A=h.autoClosingQuotes,P=h.shouldAutoCloseBefore.quote):(h.blockCommentStartToken?T.open.includes(h.blockCommentStartToken):!1)?(A=h.autoClosingComments,P=h.shouldAutoCloseBefore.comment):(A=h.autoClosingBrackets,P=h.shouldAutoCloseBefore.bracket),A===\"never\")return null;const M=this._findContainedAutoClosingPair(h,T),R=M?M.close:\"\";let x=!0;for(const O of I){const{lineNumber:B,beforeColumn:W,afterColumn:V}=O,K=m.getLineContent(B),F=K.substring(0,W-1),q=K.substring(V-1);if(q.startsWith(R)||(x=!1),q.length>0){const $=q.charAt(0);if(!u._isBeforeClosingBrace(h,q)&&!P($))return null}if(T.open.length===1&&(w===\"'\"||w==='\"')&&A!==\"always\"){const $=(0,_.getMapForWordSeparators)(h.wordSeparators);if(F.length>0){const J=F.charCodeAt(F.length-1);if($.get(J)===0)return null}}if(!m.tokenization.isCheapToTokenize(B))return null;m.tokenization.forceTokenization(B);const ie=m.tokenization.getLineTokens(B),ae=(0,n.createScopedLineTokens)(ie,W-1);if(!T.shouldAutoClose(ae,W-ae.firstCharOffset))return null;const ne=T.findNeutralCharacter();if(ne){const $=m.tokenization.getTokenTypeIfInsertingCharacter(B,W,ne);if(!T.isOK($))return null}}return x?T.close.substring(0,T.close.length-R.length):T.close}static _runAutoClosingOpenCharType(h,m,C,w,D,I,T){const A=[];for(let P=0,N=w.length;P<N;P++){const M=w[P];A[P]=new f(M,D,!I,T)}return new p.EditOperationResult(4,A,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}static _shouldSurroundChar(h,m){return(0,p.isQuote)(m)?h.autoSurround===\"quotes\"||h.autoSurround===\"languageDefined\":h.autoSurround===\"brackets\"||h.autoSurround===\"languageDefined\"}static _isSurroundSelectionType(h,m,C,w){if(!u._shouldSurroundChar(h,w)||!h.surroundingPairs.hasOwnProperty(w))return!1;const D=(0,p.isQuote)(w);for(const I of C){if(I.isEmpty())return!1;let T=!0;for(let A=I.startLineNumber;A<=I.endLineNumber;A++){const P=m.getLineContent(A),N=A===I.startLineNumber?I.startColumn-1:0,M=A===I.endLineNumber?I.endColumn-1:P.length,R=P.substring(N,M);if(/[^ \\t]/.test(R)){T=!1;break}}if(T)return!1;if(D&&I.startLineNumber===I.endLineNumber&&I.startColumn+1===I.endColumn){const A=m.getValueInRange(I);if((0,p.isQuote)(A))return!1}}return!0}static _runSurroundSelectionType(h,m,C,w,D){const I=[];for(let T=0,A=w.length;T<A;T++){const P=w[T],N=m.surroundingPairs[D];I[T]=new S.SurroundSelectionCommand(P,D,N)}return new p.EditOperationResult(0,I,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}static _isTypeInterceptorElectricChar(h,m,C){return!!(C.length===1&&m.tokenization.isCheapToTokenize(C[0].getEndPosition().lineNumber))}static _typeInterceptorElectricChar(h,m,C,w,D){if(!m.electricChars.hasOwnProperty(D)||!w.isEmpty())return null;const I=w.getPosition();C.tokenization.forceTokenization(I.lineNumber);const T=C.tokenization.getLineTokens(I.lineNumber);let A;try{A=m.onElectricCharacter(D,T,I.column)}catch(P){return(0,L.onUnexpectedError)(P),null}if(!A)return null;if(A.matchOpenBracket){const P=(T.getLineContent()+D).lastIndexOf(A.matchOpenBracket)+1,N=C.bracketPairs.findMatchingBracketUp(A.matchOpenBracket,{lineNumber:I.lineNumber,column:P},500);if(N){if(N.startLineNumber===I.lineNumber)return null;const M=C.getLineContent(N.startLineNumber),R=k.getLeadingWhitespace(M),x=m.normalizeIndentation(R),O=C.getLineContent(I.lineNumber),B=C.getLineFirstNonWhitespaceColumn(I.lineNumber)||I.column,W=O.substring(B-1,I.column-1),V=x+W+D,K=new v.Range(I.lineNumber,1,I.lineNumber,I.column),F=new y.ReplaceCommand(K,V);return new p.EditOperationResult(d(V,h),[F],{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!0})}}return null}static compositionEndWithInterceptors(h,m,C,w,D,I){if(!w)return null;let T=null;for(const M of w)if(T===null)T=M.insertedText;else if(T!==M.insertedText)return null;if(!T||T.length!==1)return null;const A=T;let P=!1;for(const M of w)if(M.deletedText.length!==0){P=!0;break}if(P){if(!u._shouldSurroundChar(m,A)||!m.surroundingPairs.hasOwnProperty(A))return null;const M=(0,p.isQuote)(A);for(const O of w)if(O.deletedSelectionStart!==0||O.deletedSelectionEnd!==O.deletedText.length||/^[ \\t]+$/.test(O.deletedText)||M&&(0,p.isQuote)(O.deletedText))return null;const R=[];for(const O of D){if(!O.isEmpty())return null;R.push(O.getPosition())}if(R.length!==w.length)return null;const x=[];for(let O=0,B=R.length;O<B;O++)x.push(new S.CompositionSurroundSelectionCommand(R[O],w[O].deletedText,m.surroundingPairs[A]));return new p.EditOperationResult(4,x,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}if(this._isAutoClosingOvertype(m,C,D,I,A)){const M=D.map(R=>new y.ReplaceCommand(new v.Range(R.positionLineNumber,R.positionColumn,R.positionLineNumber,R.positionColumn+1),\"\",!1));return new p.EditOperationResult(4,M,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}const N=this._getAutoClosingPairClose(m,C,D,A,!0);return N!==null?this._runAutoClosingOpenCharType(h,m,C,D,A,!0,N):null}static typeWithInterceptors(h,m,C,w,D,I,T){if(!h&&T===`\n`){const N=[];for(let M=0,R=D.length;M<R;M++)N[M]=u._enter(C,w,!1,D[M]);return new p.EditOperationResult(4,N,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}if(!h&&this._isAutoIndentType(C,w,D)){const N=[];let M=!1;for(let R=0,x=D.length;R<x;R++)if(N[R]=this._runAutoIndentType(C,w,D[R],T),!N[R]){M=!0;break}if(!M)return new p.EditOperationResult(4,N,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}if(this._isAutoClosingOvertype(C,w,D,I,T))return this._runAutoClosingOvertype(m,C,w,D,T);if(!h){const N=this._getAutoClosingPairClose(C,w,D,T,!1);if(N)return this._runAutoClosingOpenCharType(m,C,w,D,T,!1,N)}if(!h&&this._isSurroundSelectionType(C,w,D,T))return this._runSurroundSelectionType(m,C,w,D,T);if(!h&&this._isTypeInterceptorElectricChar(C,w,D)){const N=this._typeInterceptorElectricChar(m,C,w,D[0],T);if(N)return N}const A=[];for(let N=0,M=D.length;N<M;N++)A[N]=new y.ReplaceCommand(D[N],T);const P=d(T,m);return new p.EditOperationResult(P,A,{shouldPushStackElementBefore:s(m,P),shouldPushStackElementAfter:!1})}static typeWithoutInterceptors(h,m,C,w,D){const I=[];for(let A=0,P=w.length;A<P;A++)I[A]=new y.ReplaceCommand(w[A],D);const T=d(D,h);return new p.EditOperationResult(T,I,{shouldPushStackElementBefore:s(h,T),shouldPushStackElementAfter:!1})}static lineInsertBefore(h,m,C){if(m===null||C===null)return[];const w=[];for(let D=0,I=C.length;D<I;D++){let T=C[D].positionLineNumber;if(T===1)w[D]=new y.ReplaceCommandWithoutChangingPosition(new v.Range(1,1,1,1),`\n`);else{T--;const A=m.getLineMaxColumn(T);w[D]=this._enter(h,m,!1,new v.Range(T,A,T,A))}}return w}static lineInsertAfter(h,m,C){if(m===null||C===null)return[];const w=[];for(let D=0,I=C.length;D<I;D++){const T=C[D].positionLineNumber,A=m.getLineMaxColumn(T);w[D]=this._enter(h,m,!1,new v.Range(T,A,T,A))}return w}static lineBreakInsert(h,m,C){const w=[];for(let D=0,I=C.length;D<I;D++)w[D]=this._enter(h,m,!0,C[D]);return w}}e.TypeOperations=u;class f extends y.ReplaceCommandWithOffsetCursorState{constructor(h,m,C,w){super(h,(C?m:\"\")+w,0,-w.length),this._openCharacter=m,this._closeCharacter=w,this.closeCharacterRange=null,this.enclosingRange=null}computeCursorState(h,m){const w=m.getInverseEditOperations()[0].range;return this.closeCharacterRange=new v.Range(w.startLineNumber,w.endColumn-this._closeCharacter.length,w.endLineNumber,w.endColumn),this.enclosingRange=new v.Range(w.startLineNumber,w.endColumn-this._openCharacter.length-this._closeCharacter.length,w.endLineNumber,w.endColumn),super.computeCursorState(h,m)}}e.TypeWithAutoClosingCommand=f;class c{constructor(h,m,C,w,D,I){this.deletedText=h,this.deletedSelectionStart=m,this.deletedSelectionEnd=C,this.insertedText=w,this.insertedSelectionStart=D,this.insertedSelectionEnd=I}}e.CompositionOutcome=c;function d(g,h){return g===\" \"?h===5||h===6?6:5:4}function s(g,h){return o(g)&&!o(h)?!0:g===5?!1:l(g)!==l(h)}function l(g){return g===6||g===5?\"space\":g}function o(g){return g===4||g===5||g===6}}),define(se[791],oe([1,0,12,11,513,75,502,207,251,5,24,114,214,2,215]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CursorsController=void 0;class r extends n.Disposable{constructor(o,g,h,m){super(),this._model=o,this._knownModelVersionId=this._model.getVersionId(),this._viewModel=g,this._coordinatesConverter=h,this.context=new S.CursorContext(this._model,this._viewModel,this._coordinatesConverter,m),this._cursors=new y.CursorCollection(this.context),this._hasFocus=!1,this._isHandling=!1,this._compositionState=null,this._columnSelectData=null,this._autoClosedActions=[],this._prevEditOperationType=0}dispose(){this._cursors.dispose(),this._autoClosedActions=(0,n.dispose)(this._autoClosedActions),super.dispose()}updateConfiguration(o){this.context=new S.CursorContext(this._model,this._viewModel,this._coordinatesConverter,o),this._cursors.updateContext(this.context)}onLineMappingChanged(o){this._knownModelVersionId===this._model.getVersionId()&&this.setStates(o,\"viewModel\",0,this.getCursorStates())}setHasFocus(o){this._hasFocus=o}_validateAutoClosedActions(){if(this._autoClosedActions.length>0){const o=this._cursors.getSelections();for(let g=0;g<this._autoClosedActions.length;g++){const h=this._autoClosedActions[g];h.isValid(o)||(h.dispose(),this._autoClosedActions.splice(g,1),g--)}}}getPrimaryCursorState(){return this._cursors.getPrimaryCursor()}getLastAddedCursorIndex(){return this._cursors.getLastAddedCursorIndex()}getCursorStates(){return this._cursors.getAll()}setStates(o,g,h,m){let C=!1;const w=this.context.cursorConfig.multiCursorLimit;m!==null&&m.length>w&&(m=m.slice(0,w),C=!0);const D=u.from(this._model,this);return this._cursors.setStates(m),this._cursors.normalize(),this._columnSelectData=null,this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(o,g,h,D,C)}setCursorColumnSelectData(o){this._columnSelectData=o}revealPrimary(o,g,h,m,C,w){const D=this._cursors.getViewPositions();let I=null,T=null;D.length>1?T=this._cursors.getViewSelections():I=v.Range.fromPositions(D[0],D[0]),o.emitViewEvent(new i.ViewRevealRangeRequestEvent(g,h,I,T,m,C,w))}saveState(){const o=[],g=this._cursors.getSelections();for(let h=0,m=g.length;h<m;h++){const C=g[h];o.push({inSelectionMode:!C.isEmpty(),selectionStart:{lineNumber:C.selectionStartLineNumber,column:C.selectionStartColumn},position:{lineNumber:C.positionLineNumber,column:C.positionColumn}})}return o}restoreState(o,g){const h=[];for(let m=0,C=g.length;m<C;m++){const w=g[m];let D=1,I=1;w.position&&w.position.lineNumber&&(D=w.position.lineNumber),w.position&&w.position.column&&(I=w.position.column);let T=D,A=I;w.selectionStart&&w.selectionStart.lineNumber&&(T=w.selectionStart.lineNumber),w.selectionStart&&w.selectionStart.column&&(A=w.selectionStart.column),h.push({selectionStartLineNumber:T,selectionStartColumn:A,positionLineNumber:D,positionColumn:I})}this.setStates(o,\"restoreState\",0,E.CursorState.fromModelSelections(h)),this.revealPrimary(o,\"restoreState\",!1,0,!0,1)}onModelContentChanged(o,g){if(g instanceof a.ModelInjectedTextChangedEvent){if(this._isHandling)return;this._isHandling=!0;try{this.setStates(o,\"modelChange\",0,this.getCursorStates())}finally{this._isHandling=!1}}else{const h=g.rawContentChangedEvent;if(this._knownModelVersionId=h.versionId,this._isHandling)return;const m=h.containsEvent(1);if(this._prevEditOperationType=0,m)this._cursors.dispose(),this._cursors=new y.CursorCollection(this.context),this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(o,\"model\",1,null,!1);else if(this._hasFocus&&h.resultingSelection&&h.resultingSelection.length>0){const C=E.CursorState.fromModelSelections(h.resultingSelection);this.setStates(o,\"modelChange\",h.isUndoing?5:h.isRedoing?6:2,C)&&this.revealPrimary(o,\"modelChange\",!1,0,!0,0)}else{const C=this._cursors.readSelectionFromMarkers();this.setStates(o,\"modelChange\",2,E.CursorState.fromModelSelections(C))}}}getSelection(){return this._cursors.getPrimaryCursor().modelState.selection}getTopMostViewPosition(){return this._cursors.getTopMostViewPosition()}getBottomMostViewPosition(){return this._cursors.getBottomMostViewPosition()}getCursorColumnSelectData(){if(this._columnSelectData)return this._columnSelectData;const o=this._cursors.getPrimaryCursor(),g=o.viewState.selectionStart.getStartPosition(),h=o.viewState.position;return{isReal:!1,fromViewLineNumber:g.lineNumber,fromViewVisualColumn:this.context.cursorConfig.visibleColumnFromColumn(this._viewModel,g),toViewLineNumber:h.lineNumber,toViewVisualColumn:this.context.cursorConfig.visibleColumnFromColumn(this._viewModel,h)}}getSelections(){return this._cursors.getSelections()}setSelections(o,g,h,m){this.setStates(o,g,m,E.CursorState.fromModelSelections(h))}getPrevEditOperationType(){return this._prevEditOperationType}setPrevEditOperationType(o){this._prevEditOperationType=o}_pushAutoClosedAction(o,g){const h=[],m=[];for(let D=0,I=o.length;D<I;D++)h.push({range:o[D],options:{description:\"auto-closed-character\",inlineClassName:\"auto-closed-character\",stickiness:1}}),m.push({range:g[D],options:{description:\"auto-closed-enclosing\",stickiness:1}});const C=this._model.deltaDecorations([],h),w=this._model.deltaDecorations([],m);this._autoClosedActions.push(new f(this._model,C,w))}_executeEditOperation(o){if(!o)return;o.shouldPushStackElementBefore&&this._model.pushStackElement();const g=c.executeCommands(this._model,this._cursors.getSelections(),o.commands);if(g){this._interpretCommandResult(g);const h=[],m=[];for(let C=0;C<o.commands.length;C++){const w=o.commands[C];w instanceof _.TypeWithAutoClosingCommand&&w.enclosingRange&&w.closeCharacterRange&&(h.push(w.closeCharacterRange),m.push(w.enclosingRange))}h.length>0&&this._pushAutoClosedAction(h,m),this._prevEditOperationType=o.type}o.shouldPushStackElementAfter&&this._model.pushStackElement()}_interpretCommandResult(o){(!o||o.length===0)&&(o=this._cursors.readSelectionFromMarkers()),this._columnSelectData=null,this._cursors.setSelections(o),this._cursors.normalize()}_emitStateChangedIfNecessary(o,g,h,m,C){const w=u.from(this._model,this);if(w.equals(m))return!1;const D=this._cursors.getSelections(),I=this._cursors.getViewSelections();if(o.emitViewEvent(new i.ViewCursorStateChangedEvent(I,D,h)),!m||m.cursorState.length!==w.cursorState.length||w.cursorState.some((T,A)=>!T.modelState.equals(m.cursorState[A].modelState))){const T=m?m.cursorState.map(P=>P.modelState.selection):null,A=m?m.modelVersionId:0;o.emitOutgoingEvent(new t.CursorStateChangedEvent(T,D,A,w.modelVersionId,g||\"keyboard\",h,C))}return!0}_findAutoClosingPairs(o){if(!o.length)return null;const g=[];for(let h=0,m=o.length;h<m;h++){const C=o[h];if(!C.text||C.text.indexOf(`\n`)>=0)return null;const w=C.text.match(/([)\\]}>'\"`])([^)\\]}>'\"`]*)$/);if(!w)return null;const D=w[1],I=this.context.cursorConfig.autoClosingPairs.autoClosingPairsCloseSingleChar.get(D);if(!I||I.length!==1)return null;const T=I[0].open,A=C.text.length-w[2].length-1,P=C.text.lastIndexOf(T,A-1);if(P===-1)return null;g.push([P,A])}return g}executeEdits(o,g,h,m){let C=null;g===\"snippet\"&&(C=this._findAutoClosingPairs(h)),C&&(h[0]._isTracked=!0);const w=[],D=[],I=this._model.pushEditOperations(this.getSelections(),h,T=>{if(C)for(let P=0,N=C.length;P<N;P++){const[M,R]=C[P],x=T[P],O=x.range.startLineNumber,B=x.range.startColumn-1+M,W=x.range.startColumn-1+R;w.push(new v.Range(O,W+1,O,W+2)),D.push(new v.Range(O,B+1,O,W+2))}const A=m(T);return A&&(this._isHandling=!0),A});I&&(this._isHandling=!1,this.setSelections(o,g,I,0)),w.length>0&&this._pushAutoClosedAction(w,D)}_executeEdit(o,g,h,m=0){if(this.context.cursorConfig.readOnly)return;const C=u.from(this._model,this);this._cursors.stopTrackingSelections(),this._isHandling=!0;try{this._cursors.ensureValidState(),o()}catch(w){(0,L.onUnexpectedError)(w)}this._isHandling=!1,this._cursors.startTrackingSelections(),this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(g,h,m,C,!1)&&this.revealPrimary(g,h,!1,0,!0,0)}getAutoClosedCharacters(){return f.getAllAutoClosedCharacters(this._autoClosedActions)}startComposition(o){this._compositionState=new s(this._model,this.getSelections())}endComposition(o,g){const h=this._compositionState?this._compositionState.deduceOutcome(this._model,this.getSelections()):null;this._compositionState=null,this._executeEdit(()=>{g===\"keyboard\"&&this._executeEditOperation(_.TypeOperations.compositionEndWithInterceptors(this._prevEditOperationType,this.context.cursorConfig,this._model,h,this.getSelections(),this.getAutoClosedCharacters()))},o,g)}type(o,g,h){this._executeEdit(()=>{if(h===\"keyboard\"){const m=g.length;let C=0;for(;C<m;){const w=k.nextCharLength(g,C),D=g.substr(C,w);this._executeEditOperation(_.TypeOperations.typeWithInterceptors(!!this._compositionState,this._prevEditOperationType,this.context.cursorConfig,this._model,this.getSelections(),this.getAutoClosedCharacters(),D)),C+=w}}else this._executeEditOperation(_.TypeOperations.typeWithoutInterceptors(this._prevEditOperationType,this.context.cursorConfig,this._model,this.getSelections(),g))},o,h)}compositionType(o,g,h,m,C,w){if(g.length===0&&h===0&&m===0){if(C!==0){const D=this.getSelections().map(I=>{const T=I.getPosition();return new b.Selection(T.lineNumber,T.column+C,T.lineNumber,T.column+C)});this.setSelections(o,w,D,0)}return}this._executeEdit(()=>{this._executeEditOperation(_.TypeOperations.compositionType(this._prevEditOperationType,this.context.cursorConfig,this._model,this.getSelections(),g,h,m,C))},o,w)}paste(o,g,h,m,C){this._executeEdit(()=>{this._executeEditOperation(_.TypeOperations.paste(this.context.cursorConfig,this._model,this.getSelections(),g,h,m||[]))},o,C,4)}cut(o,g){this._executeEdit(()=>{this._executeEditOperation(p.DeleteOperations.cut(this.context.cursorConfig,this._model,this.getSelections()))},o,g)}executeCommand(o,g,h){this._executeEdit(()=>{this._cursors.killSecondaryCursors(),this._executeEditOperation(new E.EditOperationResult(0,[g],{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))},o,h)}executeCommands(o,g,h){this._executeEdit(()=>{this._executeEditOperation(new E.EditOperationResult(0,g,{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))},o,h)}}e.CursorsController=r;class u{static from(o,g){return new u(o.getVersionId(),g.getCursorStates())}constructor(o,g){this.modelVersionId=o,this.cursorState=g}equals(o){if(!o||this.modelVersionId!==o.modelVersionId||this.cursorState.length!==o.cursorState.length)return!1;for(let g=0,h=this.cursorState.length;g<h;g++)if(!this.cursorState[g].equals(o.cursorState[g]))return!1;return!0}}class f{static getAllAutoClosedCharacters(o){let g=[];for(const h of o)g=g.concat(h.getAutoClosedCharactersRanges());return g}constructor(o,g,h){this._model=o,this._autoClosedCharactersDecorations=g,this._autoClosedEnclosingDecorations=h}dispose(){this._autoClosedCharactersDecorations=this._model.deltaDecorations(this._autoClosedCharactersDecorations,[]),this._autoClosedEnclosingDecorations=this._model.deltaDecorations(this._autoClosedEnclosingDecorations,[])}getAutoClosedCharactersRanges(){const o=[];for(let g=0;g<this._autoClosedCharactersDecorations.length;g++){const h=this._model.getDecorationRange(this._autoClosedCharactersDecorations[g]);h&&o.push(h)}return o}isValid(o){const g=[];for(let h=0;h<this._autoClosedEnclosingDecorations.length;h++){const m=this._model.getDecorationRange(this._autoClosedEnclosingDecorations[h]);if(m&&(g.push(m),m.startLineNumber!==m.endLineNumber))return!1}g.sort(v.Range.compareRangesUsingStarts),o.sort(v.Range.compareRangesUsingStarts);for(let h=0;h<o.length;h++)if(h>=g.length||!g[h].strictContainsRange(o[h]))return!1;return!0}}class c{static executeCommands(o,g,h){const m={model:o,selectionsBefore:g,trackedRanges:[],trackedRangesDirection:[]},C=this._innerExecuteCommands(m,h);for(let w=0,D=m.trackedRanges.length;w<D;w++)m.model._setTrackedRange(m.trackedRanges[w],null,0);return C}static _innerExecuteCommands(o,g){if(this._arrayIsEmpty(g))return null;const h=this._getEditOperations(o,g);if(h.operations.length===0)return null;const m=h.operations,C=this._getLoserCursorMap(m);if(C.hasOwnProperty(\"0\"))return console.warn(\"Ignoring commands\"),null;const w=[];for(let T=0,A=m.length;T<A;T++)C.hasOwnProperty(m[T].identifier.major.toString())||w.push(m[T]);h.hadTrackedEditOperation&&w.length>0&&(w[0]._isTracked=!0);let D=o.model.pushEditOperations(o.selectionsBefore,w,T=>{const A=[];for(let M=0;M<o.selectionsBefore.length;M++)A[M]=[];for(const M of T)M.identifier&&A[M.identifier.major].push(M);const P=(M,R)=>M.identifier.minor-R.identifier.minor,N=[];for(let M=0;M<o.selectionsBefore.length;M++)A[M].length>0?(A[M].sort(P),N[M]=g[M].computeCursorState(o.model,{getInverseEditOperations:()=>A[M],getTrackedSelection:R=>{const x=parseInt(R,10),O=o.model._getTrackedRange(o.trackedRanges[x]);return o.trackedRangesDirection[x]===0?new b.Selection(O.startLineNumber,O.startColumn,O.endLineNumber,O.endColumn):new b.Selection(O.endLineNumber,O.endColumn,O.startLineNumber,O.startColumn)}})):N[M]=o.selectionsBefore[M];return N});D||(D=o.selectionsBefore);const I=[];for(const T in C)C.hasOwnProperty(T)&&I.push(parseInt(T,10));I.sort((T,A)=>A-T);for(const T of I)D.splice(T,1);return D}static _arrayIsEmpty(o){for(let g=0,h=o.length;g<h;g++)if(o[g])return!1;return!0}static _getEditOperations(o,g){let h=[],m=!1;for(let C=0,w=g.length;C<w;C++){const D=g[C];if(D){const I=this._getEditOperationsFromCommand(o,C,D);h=h.concat(I.operations),m=m||I.hadTrackedEditOperation}}return{operations:h,hadTrackedEditOperation:m}}static _getEditOperationsFromCommand(o,g,h){const m=[];let C=0;const w=(P,N,M=!1)=>{v.Range.isEmpty(P)&&N===\"\"||m.push({identifier:{major:g,minor:C++},range:P,text:N,forceMoveMarkers:M,isAutoWhitespaceEdit:h.insertsAutoWhitespace})};let D=!1;const A={addEditOperation:w,addTrackedEditOperation:(P,N,M)=>{D=!0,w(P,N,M)},trackSelection:(P,N)=>{const M=b.Selection.liftSelection(P);let R;if(M.isEmpty())if(typeof N==\"boolean\")N?R=2:R=3;else{const B=o.model.getLineMaxColumn(M.startLineNumber);M.startColumn===B?R=2:R=3}else R=1;const x=o.trackedRanges.length,O=o.model._setTrackedRange(null,M,R);return o.trackedRanges[x]=O,o.trackedRangesDirection[x]=M.getDirection(),x.toString()}};try{h.getEditOperations(o.model,A)}catch(P){return(0,L.onUnexpectedError)(P),{operations:[],hadTrackedEditOperation:!1}}return{operations:m,hadTrackedEditOperation:D}}static _getLoserCursorMap(o){o=o.slice(0),o.sort((h,m)=>-v.Range.compareRangesUsingEnds(h.range,m.range));const g={};for(let h=1;h<o.length;h++){const m=o[h-1],C=o[h];if(v.Range.getStartPosition(m.range).isBefore(v.Range.getEndPosition(C.range))){let w;m.identifier.major>C.identifier.major?w=m.identifier.major:w=C.identifier.major,g[w.toString()]=!0;for(let D=0;D<o.length;D++)o[D].identifier.major===w&&(o.splice(D,1),D<h&&h--,D--);h>0&&h--}}return g}}class d{constructor(o,g,h){this.text=o,this.startSelection=g,this.endSelection=h}}class s{static _capture(o,g){const h=[];for(const m of g){if(m.startLineNumber!==m.endLineNumber)return null;h.push(new d(o.getLineContent(m.startLineNumber),m.startColumn-1,m.endColumn-1))}return h}constructor(o,g){this._original=s._capture(o,g)}deduceOutcome(o,g){if(!this._original)return null;const h=s._capture(o,g);if(!h||this._original.length!==h.length)return null;const m=[];for(let C=0,w=this._original.length;C<w;C++)m.push(s._deduceOutcome(this._original[C],h[C]));return m}static _deduceOutcome(o,g){const h=Math.min(o.startSelection,g.startSelection,k.commonPrefixLength(o.text,g.text)),m=Math.min(o.text.length-o.endSelection,g.text.length-g.endSelection,k.commonSuffixLength(o.text,g.text)),C=o.text.substring(h,o.text.length-m),w=g.text.substring(h,g.text.length-m);return new _.CompositionOutcome(C,o.startSelection-h,o.endSelection-h,w,g.startSelection-h,g.endSelection-h)}}}),define(se[792],oe([1,0,47,49,80,341]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getIconClasses=void 0;const S=/(?:\\/|^)(?:([^\\/]+)\\/)?([^\\/]+)$/;function p(b,a,i,n,t){if(t)return[`codicon-${t.id}`,\"predefined-file-icon\"];const r=n===E.FileKind.ROOT_FOLDER?[\"rootfolder-icon\"]:n===E.FileKind.FOLDER?[\"folder-icon\"]:[\"file-icon\"];if(i){let u;if(i.scheme===L.Schemas.data)u=k.DataUri.parseMetaData(i).get(k.DataUri.META_DATA_LABEL);else{const f=i.path.match(S);f?(u=v(f[2].toLowerCase()),f[1]&&r.push(`${v(f[1].toLowerCase())}-name-dir-icon`)):u=v(i.authority.toLowerCase())}if(n===E.FileKind.ROOT_FOLDER)r.push(`${u}-root-name-folder-icon`);else if(n===E.FileKind.FOLDER)r.push(`${u}-name-folder-icon`);else{if(u){if(r.push(`${u}-name-file-icon`),r.push(\"name-file-icon\"),u.length<=255){const c=u.split(\".\");for(let d=1;d<c.length;d++)r.push(`${c.slice(d).join(\".\")}-ext-file-icon`)}r.push(\"ext-file-icon\")}const f=_(b,a,i);f&&r.push(`${v(f)}-lang-file-icon`)}}return r}e.getIconClasses=p;function _(b,a,i){if(!i)return null;let n=null;if(i.scheme===L.Schemas.data){const r=k.DataUri.parseMetaData(i).get(k.DataUri.META_DATA_MIME);r&&(n=a.getLanguageIdByMimeType(r))}else{const t=b.getModel(i);t&&(n=t.getLanguageId())}return n&&n!==y.PLAINTEXT_LANGUAGE_ID?n:a.guessLanguageIdByFilepathOrFirstLine(i)}function v(b){return b.replace(/[\\11\\12\\14\\15\\40]/g,\"/\")}}),define(se[793],oe([1,0,315,109,47,95,49,11,80]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getLanguageIds=e.clearPlatformLanguageAssociations=e.registerPlatformLanguageAssociation=void 0;let v=[],b=[],a=[];function i(s,l=!1){n(s,!1,l)}e.registerPlatformLanguageAssociation=i;function n(s,l,o){const g=t(s,l);v.push(g),g.userConfigured?a.push(g):b.push(g),o&&!g.userConfigured&&v.forEach(h=>{h.mime===g.mime||h.userConfigured||(g.extension&&h.extension===g.extension&&console.warn(`Overwriting extension <<${g.extension}>> to now point to mime <<${g.mime}>>`),g.filename&&h.filename===g.filename&&console.warn(`Overwriting filename <<${g.filename}>> to now point to mime <<${g.mime}>>`),g.filepattern&&h.filepattern===g.filepattern&&console.warn(`Overwriting filepattern <<${g.filepattern}>> to now point to mime <<${g.mime}>>`),g.firstline&&h.firstline===g.firstline&&console.warn(`Overwriting firstline <<${g.firstline}>> to now point to mime <<${g.mime}>>`))})}function t(s,l){return{id:s.id,mime:s.mime,filename:s.filename,extension:s.extension,filepattern:s.filepattern,firstline:s.firstline,userConfigured:l,filenameLowercase:s.filename?s.filename.toLowerCase():void 0,extensionLowercase:s.extension?s.extension.toLowerCase():void 0,filepatternLowercase:s.filepattern?(0,L.parse)(s.filepattern.toLowerCase()):void 0,filepatternOnPath:s.filepattern?s.filepattern.indexOf(E.posix.sep)>=0:!1}}function r(){v=v.filter(s=>s.userConfigured),b=[]}e.clearPlatformLanguageAssociations=r;function u(s,l){return f(s,l).map(o=>o.id)}e.getLanguageIds=u;function f(s,l){let o;if(s)switch(s.scheme){case y.Schemas.file:o=s.fsPath;break;case y.Schemas.data:{o=S.DataUri.parseMetaData(s).get(S.DataUri.META_DATA_LABEL);break}case y.Schemas.vscodeNotebookCell:o=void 0;break;default:o=s.path}if(!o)return[{id:\"unknown\",mime:k.Mimes.unknown}];o=o.toLowerCase();const g=(0,E.basename)(o),h=c(o,g,a);if(h)return[h,{id:_.PLAINTEXT_LANGUAGE_ID,mime:k.Mimes.text}];const m=c(o,g,b);if(m)return[m,{id:_.PLAINTEXT_LANGUAGE_ID,mime:k.Mimes.text}];if(l){const C=d(l);if(C)return[C,{id:_.PLAINTEXT_LANGUAGE_ID,mime:k.Mimes.text}]}return[{id:\"unknown\",mime:k.Mimes.unknown}]}function c(s,l,o){var g;let h,m,C;for(let w=o.length-1;w>=0;w--){const D=o[w];if(l===D.filenameLowercase){h=D;break}if(D.filepattern&&(!m||D.filepattern.length>m.filepattern.length)){const I=D.filepatternOnPath?s:l;!((g=D.filepatternLowercase)===null||g===void 0)&&g.call(D,I)&&(m=D)}D.extension&&(!C||D.extension.length>C.extension.length)&&l.endsWith(D.extensionLowercase)&&(C=D)}if(h)return h;if(m)return m;if(C)return C}function d(s){if((0,p.startsWithUTF8BOM)(s)&&(s=s.substr(1)),s.length>0)for(let l=v.length-1;l>=0;l--){const o=v[l];if(!o.firstline)continue;const g=s.match(o.firstline);if(g&&g.length>0)return o}}}),define(se[794],oe([1,0,6,2,11,793,80,98,37]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LanguagesRegistry=e.LanguageIdCodec=void 0;const v=Object.prototype.hasOwnProperty,b=\"vs.editor.nullLanguage\";class a{constructor(){this._languageIdToLanguage=[],this._languageToLanguageId=new Map,this._register(b,0),this._register(S.PLAINTEXT_LANGUAGE_ID,1),this._nextLanguageId=2}_register(t,r){this._languageIdToLanguage[r]=t,this._languageToLanguageId.set(t,r)}register(t){if(this._languageToLanguageId.has(t))return;const r=this._nextLanguageId++;this._register(t,r)}encodeLanguageId(t){return this._languageToLanguageId.get(t)||0}decodeLanguageId(t){return this._languageIdToLanguage[t]||b}}e.LanguageIdCodec=a;class i extends k.Disposable{constructor(t=!0,r=!1){super(),this._onDidChange=this._register(new L.Emitter),this.onDidChange=this._onDidChange.event,i.instanceCount++,this._warnOnOverwrite=r,this.languageIdCodec=new a,this._dynamicLanguages=[],this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},t&&(this._initializeFromRegistry(),this._register(S.ModesRegistry.onDidChangeLanguages(u=>{this._initializeFromRegistry()})))}dispose(){i.instanceCount--,super.dispose()}_initializeFromRegistry(){this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},(0,E.clearPlatformLanguageAssociations)();const t=[].concat(S.ModesRegistry.getLanguages()).concat(this._dynamicLanguages);this._registerLanguages(t)}_registerLanguages(t){for(const r of t)this._registerLanguage(r);this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},Object.keys(this._languages).forEach(r=>{const u=this._languages[r];u.name&&(this._nameMap[u.name]=u.identifier),u.aliases.forEach(f=>{this._lowercaseNameMap[f.toLowerCase()]=u.identifier}),u.mimetypes.forEach(f=>{this._mimeTypesMap[f]=u.identifier})}),_.Registry.as(p.Extensions.Configuration).registerOverrideIdentifiers(this.getRegisteredLanguageIds()),this._onDidChange.fire()}_registerLanguage(t){const r=t.id;let u;v.call(this._languages,r)?u=this._languages[r]:(this.languageIdCodec.register(r),u={identifier:r,name:null,mimetypes:[],aliases:[],extensions:[],filenames:[],configurationFiles:[],icons:[]},this._languages[r]=u),this._mergeLanguage(u,t)}_mergeLanguage(t,r){const u=r.id;let f=null;if(Array.isArray(r.mimetypes)&&r.mimetypes.length>0&&(t.mimetypes.push(...r.mimetypes),f=r.mimetypes[0]),f||(f=`text/x-${u}`,t.mimetypes.push(f)),Array.isArray(r.extensions)){r.configuration?t.extensions=r.extensions.concat(t.extensions):t.extensions=t.extensions.concat(r.extensions);for(const s of r.extensions)(0,E.registerPlatformLanguageAssociation)({id:u,mime:f,extension:s},this._warnOnOverwrite)}if(Array.isArray(r.filenames))for(const s of r.filenames)(0,E.registerPlatformLanguageAssociation)({id:u,mime:f,filename:s},this._warnOnOverwrite),t.filenames.push(s);if(Array.isArray(r.filenamePatterns))for(const s of r.filenamePatterns)(0,E.registerPlatformLanguageAssociation)({id:u,mime:f,filepattern:s},this._warnOnOverwrite);if(typeof r.firstLine==\"string\"&&r.firstLine.length>0){let s=r.firstLine;s.charAt(0)!==\"^\"&&(s=\"^\"+s);try{const l=new RegExp(s);(0,y.regExpLeadsToEndlessLoop)(l)||(0,E.registerPlatformLanguageAssociation)({id:u,mime:f,firstline:l},this._warnOnOverwrite)}catch(l){console.warn(`[${r.id}]: Invalid regular expression \\`${s}\\`: `,l)}}t.aliases.push(u);let c=null;if(typeof r.aliases<\"u\"&&Array.isArray(r.aliases)&&(r.aliases.length===0?c=[null]:c=r.aliases),c!==null)for(const s of c)!s||s.length===0||t.aliases.push(s);const d=c!==null&&c.length>0;if(!(d&&c[0]===null)){const s=(d?c[0]:null)||u;(d||!t.name)&&(t.name=s)}r.configuration&&t.configurationFiles.push(r.configuration),r.icon&&t.icons.push(r.icon)}isRegisteredLanguageId(t){return t?v.call(this._languages,t):!1}getRegisteredLanguageIds(){return Object.keys(this._languages)}getLanguageIdByLanguageName(t){const r=t.toLowerCase();return v.call(this._lowercaseNameMap,r)?this._lowercaseNameMap[r]:null}getLanguageIdByMimeType(t){return t&&v.call(this._mimeTypesMap,t)?this._mimeTypesMap[t]:null}guessLanguageIdByFilepathOrFirstLine(t,r){return!t&&!r?[]:(0,E.getLanguageIds)(t,r)}}e.LanguagesRegistry=i,i.instanceCount=0}),define(se[795],oe([1,0,6,2,794,13,31,80]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LanguageService=void 0;class _ extends k.Disposable{constructor(a=!1){super(),this._onDidRequestBasicLanguageFeatures=this._register(new L.Emitter),this.onDidRequestBasicLanguageFeatures=this._onDidRequestBasicLanguageFeatures.event,this._onDidRequestRichLanguageFeatures=this._register(new L.Emitter),this.onDidRequestRichLanguageFeatures=this._onDidRequestRichLanguageFeatures.event,this._onDidChange=this._register(new L.Emitter({leakWarningThreshold:200})),this.onDidChange=this._onDidChange.event,this._requestedBasicLanguages=new Set,this._requestedRichLanguages=new Set,_.instanceCount++,this._registry=this._register(new y.LanguagesRegistry(!0,a)),this.languageIdCodec=this._registry.languageIdCodec,this._register(this._registry.onDidChange(()=>this._onDidChange.fire()))}dispose(){_.instanceCount--,super.dispose()}isRegisteredLanguageId(a){return this._registry.isRegisteredLanguageId(a)}getLanguageIdByLanguageName(a){return this._registry.getLanguageIdByLanguageName(a)}getLanguageIdByMimeType(a){return this._registry.getLanguageIdByMimeType(a)}guessLanguageIdByFilepathOrFirstLine(a,i){const n=this._registry.guessLanguageIdByFilepathOrFirstLine(a,i);return(0,E.firstOrDefault)(n,null)}createById(a){return new v(this.onDidChange,()=>this._createAndGetLanguageIdentifier(a))}createByFilepathOrFirstLine(a,i){return new v(this.onDidChange,()=>{const n=this.guessLanguageIdByFilepathOrFirstLine(a,i);return this._createAndGetLanguageIdentifier(n)})}_createAndGetLanguageIdentifier(a){return(!a||!this.isRegisteredLanguageId(a))&&(a=p.PLAINTEXT_LANGUAGE_ID),a}requestBasicLanguageFeatures(a){this._requestedBasicLanguages.has(a)||(this._requestedBasicLanguages.add(a),this._onDidRequestBasicLanguageFeatures.fire(a))}requestRichLanguageFeatures(a){this._requestedRichLanguages.has(a)||(this._requestedRichLanguages.add(a),this.requestBasicLanguageFeatures(a),S.TokenizationRegistry.getOrCreate(a),this._onDidRequestRichLanguageFeatures.fire(a))}}e.LanguageService=_,_.instanceCount=0;class v{constructor(a,i){this._onDidChangeLanguages=a,this._selector=i,this._listener=null,this._emitter=null,this.languageId=this._selector()}_dispose(){this._listener&&(this._listener.dispose(),this._listener=null),this._emitter&&(this._emitter.dispose(),this._emitter=null)}get onDidChange(){return this._listener||(this._listener=this._onDidChangeLanguages(()=>this._evaluate())),this._emitter||(this._emitter=new L.Emitter({onDidRemoveLastListener:()=>{this._dispose()}})),this._emitter.event}_evaluate(){var a;const i=this._selector();i!==this.languageId&&(this.languageId=i,(a=this._emitter)===null||a===void 0||a.fire(this.languageId))}}}),define(se[353],oe([1,0,39,247,51,32,2,18,131]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DefaultDocumentColorProvider=void 0;class v{constructor(i,n){this._editorWorkerClient=new k.EditorWorkerClient(i,!1,\"editorWorkerService\",n)}async provideDocumentColors(i,n){return this._editorWorkerClient.computeDefaultDocumentColors(i.uri)}provideColorPresentations(i,n,t){const r=n.range,u=n.color,f=u.alpha,c=new L.Color(new L.RGBA(Math.round(255*u.red),Math.round(255*u.green),Math.round(255*u.blue),f)),d=f?L.Color.Format.CSS.formatRGB(c):L.Color.Format.CSS.formatRGBA(c),s=f?L.Color.Format.CSS.formatHSL(c):L.Color.Format.CSS.formatHSLA(c),l=f?L.Color.Format.CSS.formatHex(c):L.Color.Format.CSS.formatHexA(c),o=[];return o.push({label:d,textEdit:{range:r,text:d}}),o.push({label:s,textEdit:{range:r,text:s}}),o.push({label:l,textEdit:{range:r,text:l}}),o}}e.DefaultDocumentColorProvider=v;let b=class extends S.Disposable{constructor(i,n,t){super(),this._register(t.colorProvider.register(\"*\",new v(i,n)))}};b=ke([ge(0,y.IModelService),ge(1,E.ILanguageConfigurationService),ge(2,p.ILanguageFeaturesService)],b),(0,_.registerEditorFeature)(b)}),define(se[354],oe([1,0,19,12,22,5,51,25,18,353,27]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getColorPresentations=e.getColors=void 0;async function a(c,d,s,l=!0){return u(new n,c,d,s,l)}e.getColors=a;function i(c,d,s,l){return Promise.resolve(s.provideColorPresentations(c,d,l))}e.getColorPresentations=i;class n{constructor(){}async compute(d,s,l,o){const g=await d.provideDocumentColors(s,l);if(Array.isArray(g))for(const h of g)o.push({colorInfo:h,provider:d});return Array.isArray(g)}}class t{constructor(){}async compute(d,s,l,o){const g=await d.provideDocumentColors(s,l);if(Array.isArray(g))for(const h of g)o.push({range:h.range,color:[h.color.red,h.color.green,h.color.blue,h.color.alpha]});return Array.isArray(g)}}class r{constructor(d){this.colorInfo=d}async compute(d,s,l,o){const g=await d.provideColorPresentations(s,this.colorInfo,L.CancellationToken.None);return Array.isArray(g)&&o.push(...g),Array.isArray(g)}}async function u(c,d,s,l,o){let g=!1,h;const m=[],C=d.ordered(s);for(let w=C.length-1;w>=0;w--){const D=C[w];if(D instanceof v.DefaultDocumentColorProvider)h=D;else try{await c.compute(D,s,l,m)&&(g=!0)}catch(I){(0,k.onUnexpectedExternalError)(I)}}return g?m:h&&o?(await c.compute(h,s,l,m),m):[]}function f(c,d){const{colorProvider:s}=c.get(_.ILanguageFeaturesService),l=c.get(S.IModelService).getModel(d);if(!l)throw(0,k.illegalArgument)();const o=c.get(b.IConfigurationService).getValue(\"editor.defaultColorDecorators\",{resource:d});return{model:l,colorProviderRegistry:s,isDefaultColorDecoratorsEnabled:o}}p.CommandsRegistry.registerCommand(\"_executeDocumentColorProvider\",function(c,...d){const[s]=d;if(!(s instanceof y.URI))throw(0,k.illegalArgument)();const{model:l,colorProviderRegistry:o,isDefaultColorDecoratorsEnabled:g}=f(c,s);return u(new t,o,l,L.CancellationToken.None,g)}),p.CommandsRegistry.registerCommand(\"_executeColorPresentationProvider\",function(c,...d){const[s,l]=d,{uri:o,range:g}=l;if(!(o instanceof y.URI)||!Array.isArray(s)||s.length!==4||!E.Range.isIRange(g))throw(0,k.illegalArgument)();const{model:h,colorProviderRegistry:m,isDefaultColorDecoratorsEnabled:C}=f(c,o),[w,D,I,T]=s;return u(new r({range:g,color:{red:w,green:D,blue:I,alpha:T}}),m,h,L.CancellationToken.None,C)})}),define(se[796],oe([1,0,7,13,58,2,104,332,227,41]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MarginHoverWidget=void 0;const b=L.$;class a extends E.Disposable{constructor(t,r,u){super(),this._renderDisposeables=this._register(new E.DisposableStore),this._editor=t,this._isVisible=!1,this._messages=[],this._hover=this._register(new _.HoverWidget),this._hover.containerDomNode.classList.toggle(\"hidden\",!this._isVisible),this._markdownRenderer=this._register(new S.MarkdownRenderer({editor:this._editor},r,u)),this._computer=new i(this._editor),this._hoverOperation=this._register(new p.HoverOperation(this._editor,this._computer)),this._register(this._hoverOperation.onResult(f=>{this._withResult(f.value)})),this._register(this._editor.onDidChangeModelDecorations(()=>this._onModelDecorationsChanged())),this._register(this._editor.onDidChangeConfiguration(f=>{f.hasChanged(50)&&this._updateFont()})),this._editor.addOverlayWidget(this)}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}getId(){return a.ID}getDomNode(){return this._hover.containerDomNode}getPosition(){return null}_updateFont(){Array.prototype.slice.call(this._hover.contentsDomNode.getElementsByClassName(\"code\")).forEach(r=>this._editor.applyFontInfo(r))}_onModelDecorationsChanged(){this._isVisible&&(this._hoverOperation.cancel(),this._hoverOperation.start(0))}startShowingAt(t,r){this._computer.lineNumber===t&&this._computer.lane===r||(this._hoverOperation.cancel(),this.hide(),this._computer.lineNumber=t,this._computer.lane=r,this._hoverOperation.start(0))}hide(){this._computer.lineNumber=-1,this._hoverOperation.cancel(),this._isVisible&&(this._isVisible=!1,this._hover.containerDomNode.classList.toggle(\"hidden\",!this._isVisible))}_withResult(t){this._messages=t,this._messages.length>0?this._renderMessages(this._computer.lineNumber,this._messages):this.hide()}_renderMessages(t,r){this._renderDisposeables.clear();const u=document.createDocumentFragment();for(const f of r){const c=b(\"div.hover-row.markdown-hover\"),d=L.append(c,b(\"div.hover-contents\")),s=this._renderDisposeables.add(this._markdownRenderer.render(f.value));d.appendChild(s.element),u.appendChild(c)}this._updateContents(u),this._showAt(t)}_updateContents(t){this._hover.contentsDomNode.textContent=\"\",this._hover.contentsDomNode.appendChild(t),this._updateFont()}_showAt(t){this._isVisible||(this._isVisible=!0,this._hover.containerDomNode.classList.toggle(\"hidden\",!this._isVisible));const r=this._editor.getLayoutInfo(),u=this._editor.getTopForLineNumber(t),f=this._editor.getScrollTop(),c=this._editor.getOption(66),d=this._hover.containerDomNode.clientHeight,s=u-f-(d-c)/2,l=r.glyphMarginLeft+r.glyphMarginWidth+(this._computer.lane===\"lineNo\"?r.lineNumbersWidth:0);this._hover.containerDomNode.style.left=`${l}px`,this._hover.containerDomNode.style.top=`${Math.max(Math.round(s),0)}px`}}e.MarginHoverWidget=a,a.ID=\"editor.contrib.modesGlyphHoverWidget\";class i{get lineNumber(){return this._lineNumber}set lineNumber(t){this._lineNumber=t}get lane(){return this._laneOrLine}set lane(t){this._laneOrLine=t}constructor(t){this._editor=t,this._lineNumber=-1,this._laneOrLine=v.GlyphMarginLane.Center}computeSync(){var t,r;const u=s=>({value:s}),f=this._editor.getLineDecorations(this._lineNumber),c=[],d=this._laneOrLine===\"lineNo\";if(!f)return c;for(const s of f){const l=(r=(t=s.options.glyphMargin)===null||t===void 0?void 0:t.position)!==null&&r!==void 0?r:v.GlyphMarginLane.Center;if(!d&&l!==this._laneOrLine)continue;const o=d?s.options.lineNumberHoverMessage:s.options.glyphMarginHoverMessage;!o||(0,y.isEmptyMarkdownString)(o)||c.push(...(0,k.asArray)(o).map(u))}return c}}}),define(se[797],oe([1,0,19,71,2,35,10,31,32,18,617,307]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlineCompletionWithUpdatedRange=e.UpToDateInlineCompletions=e.InlineCompletionsSource=void 0;let i=class extends y.Disposable{constructor(l,o,g,h,m){super(),this.textModel=l,this.versionId=o,this._debounceValue=g,this.languageFeaturesService=h,this.languageConfigurationService=m,this._updateOperation=this._register(new y.MutableDisposable),this.inlineCompletions=(0,E.disposableObservableValue)(\"inlineCompletions\",void 0),this.suggestWidgetInlineCompletions=(0,E.disposableObservableValue)(\"suggestWidgetInlineCompletions\",void 0),this._register(this.textModel.onDidChangeContent(()=>{this._updateOperation.clear()}))}fetch(l,o,g){var h,m;const C=new t(l,o,this.textModel.getVersionId()),w=o.selectedSuggestionInfo?this.suggestWidgetInlineCompletions:this.inlineCompletions;if(!((h=this._updateOperation.value)===null||h===void 0)&&h.request.satisfies(C))return this._updateOperation.value.promise;if(!((m=w.get())===null||m===void 0)&&m.request.satisfies(C))return Promise.resolve(!0);const D=!!this._updateOperation.value;this._updateOperation.clear();const I=new L.CancellationTokenSource,T=(async()=>{if((D||o.triggerKind===p.InlineCompletionTriggerKind.Automatic)&&await n(this._debounceValue.get(this.textModel)),I.token.isCancellationRequested||this.textModel.getVersionId()!==C.versionId)return!1;const N=new Date,M=await(0,b.provideInlineCompletions)(this.languageFeaturesService.inlineCompletionsProvider,l,this.textModel,o,I.token,this.languageConfigurationService);if(I.token.isCancellationRequested||this.textModel.getVersionId()!==C.versionId)return!1;const R=new Date;this._debounceValue.update(this.textModel,R.getTime()-N.getTime());const x=new f(M,C,this.textModel,this.versionId);if(g){const O=g.toInlineCompletion(void 0);g.canBeReused(this.textModel,l)&&!M.has(O)&&x.prepend(g.inlineCompletion,O.range,!0)}return this._updateOperation.clear(),(0,E.transaction)(O=>{w.set(x,O)}),!0})(),A=new u(C,I,T);return this._updateOperation.value=A,T}clear(l){this._updateOperation.clear(),this.inlineCompletions.set(void 0,l),this.suggestWidgetInlineCompletions.set(void 0,l)}clearSuggestWidgetInlineCompletions(l){var o;!((o=this._updateOperation.value)===null||o===void 0)&&o.request.context.selectedSuggestionInfo&&this._updateOperation.clear(),this.suggestWidgetInlineCompletions.set(void 0,l)}cancelUpdate(){this._updateOperation.clear()}};e.InlineCompletionsSource=i,e.InlineCompletionsSource=i=ke([ge(3,v.ILanguageFeaturesService),ge(4,_.ILanguageConfigurationService)],i);function n(s,l){return new Promise(o=>{let g;const h=setTimeout(()=>{g&&g.dispose(),o()},s);l&&(g=l.onCancellationRequested(()=>{clearTimeout(h),g&&g.dispose(),o()}))})}class t{constructor(l,o,g){this.position=l,this.context=o,this.versionId=g}satisfies(l){return this.position.equals(l.position)&&r(this.context.selectedSuggestionInfo,l.context.selectedSuggestionInfo,(o,g)=>o.equals(g))&&(l.context.triggerKind===p.InlineCompletionTriggerKind.Automatic||this.context.triggerKind===p.InlineCompletionTriggerKind.Explicit)&&this.versionId===l.versionId}}function r(s,l,o){return!s||!l?s===l:o(s,l)}class u{constructor(l,o,g){this.request=l,this.cancellationTokenSource=o,this.promise=g}dispose(){this.cancellationTokenSource.cancel()}}class f{get inlineCompletions(){return this._inlineCompletions}constructor(l,o,g,h){this.inlineCompletionProviderResult=l,this.request=o,this.textModel=g,this.versionId=h,this._refCount=1,this._prependedInlineCompletionItems=[],this._rangeVersionIdValue=0,this._rangeVersionId=(0,E.derived)(this,C=>{this.versionId.read(C);let w=!1;for(const D of this._inlineCompletions)w=w||D._updateRange(this.textModel);return w&&this._rangeVersionIdValue++,this._rangeVersionIdValue});const m=g.deltaDecorations([],l.completions.map(C=>({range:C.range,options:{description:\"inline-completion-tracking-range\"}})));this._inlineCompletions=l.completions.map((C,w)=>new c(C,m[w],this._rangeVersionId))}clone(){return this._refCount++,this}dispose(){if(this._refCount--,this._refCount===0){setTimeout(()=>{this.textModel.isDisposed()||this.textModel.deltaDecorations(this._inlineCompletions.map(l=>l.decorationId),[])},0),this.inlineCompletionProviderResult.dispose();for(const l of this._prependedInlineCompletionItems)l.source.removeRef()}}prepend(l,o,g){g&&l.source.addRef();const h=this.textModel.deltaDecorations([],[{range:o,options:{description:\"inline-completion-tracking-range\"}}])[0];this._inlineCompletions.unshift(new c(l,h,this._rangeVersionId,o)),this._prependedInlineCompletionItems.push(l)}}e.UpToDateInlineCompletions=f;class c{get forwardStable(){var l;return(l=this.inlineCompletion.source.inlineCompletions.enableForwardStability)!==null&&l!==void 0?l:!1}constructor(l,o,g,h){this.inlineCompletion=l,this.decorationId=o,this.rangeVersion=g,this.semanticId=JSON.stringify([this.inlineCompletion.filterText,this.inlineCompletion.insertText,this.inlineCompletion.range.getStartPosition().toString()]),this._isValid=!0,this._updatedRange=h??l.range}toInlineCompletion(l){return this.inlineCompletion.withRange(this._getUpdatedRange(l))}toSingleTextEdit(l){return new a.SingleTextEdit(this._getUpdatedRange(l),this.inlineCompletion.insertText)}isVisible(l,o,g){const h=this._toFilterTextReplacement(g).removeCommonPrefix(l);if(!this._isValid||!this.inlineCompletion.range.getStartPosition().equals(this._getUpdatedRange(g).getStartPosition())||o.lineNumber!==h.range.startLineNumber)return!1;const m=l.getValueInRange(h.range,1),C=h.text,w=Math.max(0,o.column-h.range.startColumn);let D=C.substring(0,w),I=C.substring(w),T=m.substring(0,w),A=m.substring(w);const P=l.getLineIndentColumn(h.range.startLineNumber);return h.range.startColumn<=P&&(T=T.trimStart(),T.length===0&&(A=A.trimStart()),D=D.trimStart(),D.length===0&&(I=I.trimStart())),D.startsWith(T)&&!!(0,k.matchesSubString)(A,I)}canBeReused(l,o){return this._isValid&&this._getUpdatedRange(void 0).containsPosition(o)&&this.isVisible(l,o,void 0)&&!this._isSmallerThanOriginal(void 0)}_toFilterTextReplacement(l){return new a.SingleTextEdit(this._getUpdatedRange(l),this.inlineCompletion.filterText)}_isSmallerThanOriginal(l){return d(this._getUpdatedRange(l)).isBefore(d(this.inlineCompletion.range))}_getUpdatedRange(l){return this.rangeVersion.read(l),this._updatedRange}_updateRange(l){const o=l.getDecorationRange(this.decorationId);return o?this._updatedRange.equalsRange(o)?!1:(this._updatedRange=o,!0):(this._isValid=!1,!0)}}e.InlineCompletionWithUpdatedRange=c;function d(s){return s.startLineNumber===s.endLineNumber?new S.Position(1,1+s.endColumn-s.startColumn):new S.Position(1+s.endLineNumber-s.startLineNumber,s.endColumn)}}),define(se[798],oe([1,0,11,250,5,24,113,32,306,248,249]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MoveLinesCommand=void 0;let a=class{constructor(n,t,r,u){this._languageConfigurationService=u,this._selection=n,this._isMovingDown=t,this._autoIndent=r,this._selectionId=null,this._moveEndLineSelectionShrink=!1}getEditOperations(n,t){const r=n.getLineCount();if(this._isMovingDown&&this._selection.endLineNumber===r){this._selectionId=t.trackSelection(this._selection);return}if(!this._isMovingDown&&this._selection.startLineNumber===1){this._selectionId=t.trackSelection(this._selection);return}this._moveEndPositionDown=!1;let u=this._selection;u.startLineNumber<u.endLineNumber&&u.endColumn===1&&(this._moveEndPositionDown=!0,u=u.setEndPosition(u.endLineNumber-1,n.getLineMaxColumn(u.endLineNumber-1)));const{tabSize:f,indentSize:c,insertSpaces:d}=n.getOptions(),s=this.buildIndentConverter(f,c,d),l={tokenization:{getLineTokens:o=>n.tokenization.getLineTokens(o),getLanguageId:()=>n.getLanguageId(),getLanguageIdAtPosition:(o,g)=>n.getLanguageIdAtPosition(o,g)},getLineContent:null};if(u.startLineNumber===u.endLineNumber&&n.getLineMaxColumn(u.startLineNumber)===1){const o=u.startLineNumber,g=this._isMovingDown?o+1:o-1;n.getLineMaxColumn(g)===1?t.addEditOperation(new y.Range(1,1,1,1),null):(t.addEditOperation(new y.Range(o,1,o,1),n.getLineContent(g)),t.addEditOperation(new y.Range(g,1,g,n.getLineMaxColumn(g)),null)),u=new E.Selection(g,1,g,1)}else{let o,g;if(this._isMovingDown){o=u.endLineNumber+1,g=n.getLineContent(o),t.addEditOperation(new y.Range(o-1,n.getLineMaxColumn(o-1),o,n.getLineMaxColumn(o)),null);let h=g;if(this.shouldAutoIndent(n,u)){const m=this.matchEnterRule(n,s,f,o,u.startLineNumber-1);if(m!==null){const w=L.getLeadingWhitespace(n.getLineContent(o)),D=m+_.getSpaceCnt(w,f);h=_.generateIndent(D,f,d)+this.trimStart(g)}else{l.getLineContent=D=>D===u.startLineNumber?n.getLineContent(o):n.getLineContent(D);const w=(0,v.getGoodIndentForLine)(this._autoIndent,l,n.getLanguageIdAtPosition(o,1),u.startLineNumber,s,this._languageConfigurationService);if(w!==null){const D=L.getLeadingWhitespace(n.getLineContent(o)),I=_.getSpaceCnt(w,f),T=_.getSpaceCnt(D,f);I!==T&&(h=_.generateIndent(I,f,d)+this.trimStart(g))}}t.addEditOperation(new y.Range(u.startLineNumber,1,u.startLineNumber,1),h+`\n`);const C=this.matchEnterRuleMovingDown(n,s,f,u.startLineNumber,o,h);if(C!==null)C!==0&&this.getIndentEditsOfMovingBlock(n,t,u,f,d,C);else{l.getLineContent=D=>D===u.startLineNumber?h:D>=u.startLineNumber+1&&D<=u.endLineNumber+1?n.getLineContent(D-1):n.getLineContent(D);const w=(0,v.getGoodIndentForLine)(this._autoIndent,l,n.getLanguageIdAtPosition(o,1),u.startLineNumber+1,s,this._languageConfigurationService);if(w!==null){const D=L.getLeadingWhitespace(n.getLineContent(u.startLineNumber)),I=_.getSpaceCnt(w,f),T=_.getSpaceCnt(D,f);if(I!==T){const A=I-T;this.getIndentEditsOfMovingBlock(n,t,u,f,d,A)}}}}else t.addEditOperation(new y.Range(u.startLineNumber,1,u.startLineNumber,1),h+`\n`)}else if(o=u.startLineNumber-1,g=n.getLineContent(o),t.addEditOperation(new y.Range(o,1,o+1,1),null),t.addEditOperation(new y.Range(u.endLineNumber,n.getLineMaxColumn(u.endLineNumber),u.endLineNumber,n.getLineMaxColumn(u.endLineNumber)),`\n`+g),this.shouldAutoIndent(n,u)){l.getLineContent=m=>m===o?n.getLineContent(u.startLineNumber):n.getLineContent(m);const h=this.matchEnterRule(n,s,f,u.startLineNumber,u.startLineNumber-2);if(h!==null)h!==0&&this.getIndentEditsOfMovingBlock(n,t,u,f,d,h);else{const m=(0,v.getGoodIndentForLine)(this._autoIndent,l,n.getLanguageIdAtPosition(u.startLineNumber,1),o,s,this._languageConfigurationService);if(m!==null){const C=L.getLeadingWhitespace(n.getLineContent(u.startLineNumber)),w=_.getSpaceCnt(m,f),D=_.getSpaceCnt(C,f);if(w!==D){const I=w-D;this.getIndentEditsOfMovingBlock(n,t,u,f,d,I)}}}}}this._selectionId=t.trackSelection(u)}buildIndentConverter(n,t,r){return{shiftIndent:u=>k.ShiftCommand.shiftIndent(u,u.length+1,n,t,r),unshiftIndent:u=>k.ShiftCommand.unshiftIndent(u,u.length+1,n,t,r)}}parseEnterResult(n,t,r,u,f){if(f){let c=f.indentation;f.indentAction===S.IndentAction.None||f.indentAction===S.IndentAction.Indent?c=f.indentation+f.appendText:f.indentAction===S.IndentAction.IndentOutdent?c=f.indentation:f.indentAction===S.IndentAction.Outdent&&(c=t.unshiftIndent(f.indentation)+f.appendText);const d=n.getLineContent(u);if(this.trimStart(d).indexOf(this.trimStart(c))>=0){const s=L.getLeadingWhitespace(n.getLineContent(u));let l=L.getLeadingWhitespace(c);const o=(0,v.getIndentMetadata)(n,u,this._languageConfigurationService);o!==null&&o&2&&(l=t.unshiftIndent(l));const g=_.getSpaceCnt(l,r),h=_.getSpaceCnt(s,r);return g-h}}return null}matchEnterRuleMovingDown(n,t,r,u,f,c){if(L.lastNonWhitespaceIndex(c)>=0){const d=n.getLineMaxColumn(f),s=(0,b.getEnterAction)(this._autoIndent,n,new y.Range(f,d,f,d),this._languageConfigurationService);return this.parseEnterResult(n,t,r,u,s)}else{let d=u-1;for(;d>=1;){const o=n.getLineContent(d);if(L.lastNonWhitespaceIndex(o)>=0)break;d--}if(d<1||u>n.getLineCount())return null;const s=n.getLineMaxColumn(d),l=(0,b.getEnterAction)(this._autoIndent,n,new y.Range(d,s,d,s),this._languageConfigurationService);return this.parseEnterResult(n,t,r,u,l)}}matchEnterRule(n,t,r,u,f,c){let d=f;for(;d>=1;){let o;if(d===f&&c!==void 0?o=c:o=n.getLineContent(d),L.lastNonWhitespaceIndex(o)>=0)break;d--}if(d<1||u>n.getLineCount())return null;const s=n.getLineMaxColumn(d),l=(0,b.getEnterAction)(this._autoIndent,n,new y.Range(d,s,d,s),this._languageConfigurationService);return this.parseEnterResult(n,t,r,u,l)}trimStart(n){return n.replace(/^\\s+/,\"\")}shouldAutoIndent(n,t){if(this._autoIndent<4||!n.tokenization.isCheapToTokenize(t.startLineNumber))return!1;const r=n.getLanguageIdAtPosition(t.startLineNumber,1),u=n.getLanguageIdAtPosition(t.endLineNumber,1);return!(r!==u||this._languageConfigurationService.getLanguageConfiguration(r).indentRulesSupport===null)}getIndentEditsOfMovingBlock(n,t,r,u,f,c){for(let d=r.startLineNumber;d<=r.endLineNumber;d++){const s=n.getLineContent(d),l=L.getLeadingWhitespace(s),g=_.getSpaceCnt(l,u)+c,h=_.generateIndent(g,u,f);h!==l&&(t.addEditOperation(new y.Range(d,1,d,l.length+1),h),d===r.endLineNumber&&r.endColumn<=l.length+1&&h===\"\"&&(this._moveEndLineSelectionShrink=!0))}}computeCursorState(n,t){let r=t.getTrackedSelection(this._selectionId);return this._moveEndPositionDown&&(r=r.setEndPosition(r.endLineNumber+1,1)),this._moveEndLineSelectionShrink&&r.startLineNumber<r.endLineNumber&&(r=r.setEndPosition(r.endLineNumber,2)),r}};e.MoveLinesCommand=a,e.MoveLinesCommand=a=ke([ge(3,p.ILanguageConfigurationService)],a)}),define(se[355],oe([1,0,7,77,26,28,6,58,2,104,225,719,8]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SuggestDetailsOverlay=e.SuggestDetailsWidget=e.canExpandCompletionItem=void 0;function n(u){return!!u&&!!(u.completion.documentation||u.completion.detail&&u.completion.detail!==u.completion.label)}e.canExpandCompletionItem=n;let t=class{constructor(f,c){this._editor=f,this._onDidClose=new S.Emitter,this.onDidClose=this._onDidClose.event,this._onDidChangeContents=new S.Emitter,this.onDidChangeContents=this._onDidChangeContents.event,this._disposables=new _.DisposableStore,this._renderDisposeable=new _.DisposableStore,this._borderWidth=1,this._size=new L.Dimension(330,0),this.domNode=L.$(\".suggest-details\"),this.domNode.classList.add(\"no-docs\"),this._markdownRenderer=c.createInstance(v.MarkdownRenderer,{editor:f}),this._body=L.$(\".body\"),this._scrollbar=new k.DomScrollableElement(this._body,{alwaysConsumeMouseWheel:!0}),L.append(this.domNode,this._scrollbar.getDomNode()),this._disposables.add(this._scrollbar),this._header=L.append(this._body,L.$(\".header\")),this._close=L.append(this._header,L.$(\"span\"+E.ThemeIcon.asCSSSelector(y.Codicon.close))),this._close.title=a.localize(0,null),this._type=L.append(this._header,L.$(\"p.type\")),this._docs=L.append(this._body,L.$(\"p.docs\")),this._configureFont(),this._disposables.add(this._editor.onDidChangeConfiguration(d=>{d.hasChanged(50)&&this._configureFont()}))}dispose(){this._disposables.dispose(),this._renderDisposeable.dispose()}_configureFont(){const f=this._editor.getOptions(),c=f.get(50),d=c.getMassagedFontFamily(),s=f.get(118)||c.fontSize,l=f.get(119)||c.lineHeight,o=c.fontWeight,g=`${s}px`,h=`${l}px`;this.domNode.style.fontSize=g,this.domNode.style.lineHeight=`${l/s}`,this.domNode.style.fontWeight=o,this.domNode.style.fontFeatureSettings=c.fontFeatureSettings,this._type.style.fontFamily=d,this._close.style.height=h,this._close.style.width=h}getLayoutInfo(){const f=this._editor.getOption(119)||this._editor.getOption(50).lineHeight,c=this._borderWidth,d=c*2;return{lineHeight:f,borderWidth:c,borderHeight:d,verticalPadding:22,horizontalPadding:14}}renderLoading(){this._type.textContent=a.localize(1,null),this._docs.textContent=\"\",this.domNode.classList.remove(\"no-docs\",\"no-type\"),this.layout(this.size.width,this.getLayoutInfo().lineHeight*2),this._onDidChangeContents.fire(this)}renderItem(f,c){var d,s;this._renderDisposeable.clear();let{detail:l,documentation:o}=f.completion;if(c){let g=\"\";g+=`score: ${f.score[0]}\n`,g+=`prefix: ${(d=f.word)!==null&&d!==void 0?d:\"(no prefix)\"}\n`,g+=`word: ${f.completion.filterText?f.completion.filterText+\" (filterText)\":f.textLabel}\n`,g+=`distance: ${f.distance} (localityBonus-setting)\n`,g+=`index: ${f.idx}, based on ${f.completion.sortText&&`sortText: \"${f.completion.sortText}\"`||\"label\"}\n`,g+=`commit_chars: ${(s=f.completion.commitCharacters)===null||s===void 0?void 0:s.join(\"\")}\n`,o=new p.MarkdownString().appendCodeblock(\"empty\",g),l=`Provider: ${f.provider._debugDisplayName}`}if(!c&&!n(f)){this.clearContents();return}if(this.domNode.classList.remove(\"no-docs\",\"no-type\"),l){const g=l.length>1e5?`${l.substr(0,1e5)}\\u2026`:l;this._type.textContent=g,this._type.title=g,L.show(this._type),this._type.classList.toggle(\"auto-wrap\",!/\\r?\\n^\\s+/gmi.test(g))}else L.clearNode(this._type),this._type.title=\"\",L.hide(this._type),this.domNode.classList.add(\"no-type\");if(L.clearNode(this._docs),typeof o==\"string\")this._docs.classList.remove(\"markdown-docs\"),this._docs.textContent=o;else if(o){this._docs.classList.add(\"markdown-docs\"),L.clearNode(this._docs);const g=this._markdownRenderer.render(o);this._docs.appendChild(g.element),this._renderDisposeable.add(g),this._renderDisposeable.add(this._markdownRenderer.onDidRenderAsync(()=>{this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)}))}this.domNode.style.userSelect=\"text\",this.domNode.tabIndex=-1,this._close.onmousedown=g=>{g.preventDefault(),g.stopPropagation()},this._close.onclick=g=>{g.preventDefault(),g.stopPropagation(),this._onDidClose.fire()},this._body.scrollTop=0,this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)}clearContents(){this.domNode.classList.add(\"no-docs\"),this._type.textContent=\"\",this._docs.textContent=\"\"}get isEmpty(){return this.domNode.classList.contains(\"no-docs\")}get size(){return this._size}layout(f,c){const d=new L.Dimension(f,c);L.Dimension.equals(d,this._size)||(this._size=d,L.size(this.domNode,f,c)),this._scrollbar.scanDomNode()}scrollDown(f=8){this._body.scrollTop+=f}scrollUp(f=8){this._body.scrollTop-=f}scrollTop(){this._body.scrollTop=0}scrollBottom(){this._body.scrollTop=this._body.scrollHeight}pageDown(){this.scrollDown(80)}pageUp(){this.scrollUp(80)}set borderWidth(f){this._borderWidth=f}get borderWidth(){return this._borderWidth}};e.SuggestDetailsWidget=t,e.SuggestDetailsWidget=t=ke([ge(1,i.IInstantiationService)],t);class r{constructor(f,c){this.widget=f,this._editor=c,this.allowEditorOverflow=!0,this._disposables=new _.DisposableStore,this._added=!1,this._preferAlignAtTop=!0,this._resizable=new b.ResizableHTMLElement,this._resizable.domNode.classList.add(\"suggest-details-container\"),this._resizable.domNode.appendChild(f.domNode),this._resizable.enableSashes(!1,!0,!0,!1);let d,s,l=0,o=0;this._disposables.add(this._resizable.onDidWillResize(()=>{d=this._topLeft,s=this._resizable.size})),this._disposables.add(this._resizable.onDidResize(g=>{if(d&&s){this.widget.layout(g.dimension.width,g.dimension.height);let h=!1;g.west&&(o=s.width-g.dimension.width,h=!0),g.north&&(l=s.height-g.dimension.height,h=!0),h&&this._applyTopLeft({top:d.top+l,left:d.left+o})}g.done&&(d=void 0,s=void 0,l=0,o=0,this._userSize=g.dimension)})),this._disposables.add(this.widget.onDidChangeContents(()=>{var g;this._anchorBox&&this._placeAtAnchor(this._anchorBox,(g=this._userSize)!==null&&g!==void 0?g:this.widget.size,this._preferAlignAtTop)}))}dispose(){this._resizable.dispose(),this._disposables.dispose(),this.hide()}getId(){return\"suggest.details\"}getDomNode(){return this._resizable.domNode}getPosition(){return this._topLeft?{preference:this._topLeft}:null}show(){this._added||(this._editor.addOverlayWidget(this),this._added=!0)}hide(f=!1){this._resizable.clearSashHoverState(),this._added&&(this._editor.removeOverlayWidget(this),this._added=!1,this._anchorBox=void 0,this._topLeft=void 0),f&&(this._userSize=void 0,this.widget.clearContents())}placeAtAnchor(f,c){var d;const s=f.getBoundingClientRect();this._anchorBox=s,this._preferAlignAtTop=c,this._placeAtAnchor(this._anchorBox,(d=this._userSize)!==null&&d!==void 0?d:this.widget.size,c)}_placeAtAnchor(f,c,d){var s;const l=L.getClientArea(this.getDomNode().ownerDocument.body),o=this.widget.getLayoutInfo(),g=new L.Dimension(220,2*o.lineHeight),h=f.top,m=function(){const B=l.width-(f.left+f.width+o.borderWidth+o.horizontalPadding),W=-o.borderWidth+f.left+f.width,V=new L.Dimension(B,l.height-f.top-o.borderHeight-o.verticalPadding),K=V.with(void 0,f.top+f.height-o.borderHeight-o.verticalPadding);return{top:h,left:W,fit:B-c.width,maxSizeTop:V,maxSizeBottom:K,minSize:g.with(Math.min(B,g.width))}}(),C=function(){const B=f.left-o.borderWidth-o.horizontalPadding,W=Math.max(o.horizontalPadding,f.left-c.width-o.borderWidth),V=new L.Dimension(B,l.height-f.top-o.borderHeight-o.verticalPadding),K=V.with(void 0,f.top+f.height-o.borderHeight-o.verticalPadding);return{top:h,left:W,fit:B-c.width,maxSizeTop:V,maxSizeBottom:K,minSize:g.with(Math.min(B,g.width))}}(),w=function(){const B=f.left,W=-o.borderWidth+f.top+f.height,V=new L.Dimension(f.width-o.borderHeight,l.height-f.top-f.height-o.verticalPadding);return{top:W,left:B,fit:V.height-c.height,maxSizeBottom:V,maxSizeTop:V,minSize:g.with(V.width)}}(),D=[m,C,w],I=(s=D.find(B=>B.fit>=0))!==null&&s!==void 0?s:D.sort((B,W)=>W.fit-B.fit)[0],T=f.top+f.height-o.borderHeight;let A,P=c.height;const N=Math.max(I.maxSizeTop.height,I.maxSizeBottom.height);P>N&&(P=N);let M;d?P<=I.maxSizeTop.height?(A=!0,M=I.maxSizeTop):(A=!1,M=I.maxSizeBottom):P<=I.maxSizeBottom.height?(A=!1,M=I.maxSizeBottom):(A=!0,M=I.maxSizeTop);let{top:R,left:x}=I;!A&&P>f.height&&(R=T-P);const O=this._editor.getDomNode();if(O){const B=O.getBoundingClientRect();R-=B.top,x-=B.left}this._applyTopLeft({left:x,top:R}),this._resizable.enableSashes(!A,I===m,A,I!==m),this._resizable.minSize=I.minSize,this._resizable.maxSize=M,this._resizable.layout(P,Math.min(M.width,c.width)),this.widget.layout(this._resizable.size.width,this._resizable.size.height)}_applyTopLeft(f){this._topLeft=f,this._editor.layoutOverlayWidget(this)}}e.SuggestDetailsOverlay=r}),define(se[356],oe([1,0,13,53,55,20,22,27,98,37]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ConfigurationChangeEvent=e.Configuration=e.ConfigurationModelParser=e.ConfigurationModel=void 0;function b(u){return Object.isFrozen(u)?u:y.deepFreeze(u)}class a{constructor(f={},c=[],d=[],s){this._contents=f,this._keys=c,this._overrides=d,this.raw=s,this.overrideConfigurations=new Map}get rawConfiguration(){var f;if(!this._rawConfiguration)if(!((f=this.raw)===null||f===void 0)&&f.length){const c=this.raw.map(d=>{if(d instanceof a)return d;const s=new i(\"\");return s.parseRaw(d),s.configurationModel});this._rawConfiguration=c.reduce((d,s)=>s===d?s:d.merge(s),c[0])}else this._rawConfiguration=this;return this._rawConfiguration}get contents(){return this._contents}get overrides(){return this._overrides}get keys(){return this._keys}isEmpty(){return this._keys.length===0&&Object.keys(this._contents).length===0&&this._overrides.length===0}getValue(f){return f?(0,p.getConfigurationValue)(this.contents,f):this.contents}inspect(f,c){const d=this.rawConfiguration.getValue(f),s=c?this.rawConfiguration.getOverrideValue(f,c):void 0,l=c?this.rawConfiguration.override(c).getValue(f):d;return{value:d,override:s,merged:l}}getOverrideValue(f,c){const d=this.getContentsForOverrideIdentifer(c);return d?f?(0,p.getConfigurationValue)(d,f):d:void 0}override(f){let c=this.overrideConfigurations.get(f);return c||(c=this.createOverrideConfigurationModel(f),this.overrideConfigurations.set(f,c)),c}merge(...f){var c,d;const s=y.deepClone(this.contents),l=y.deepClone(this.overrides),o=[...this.keys],g=!((c=this.raw)===null||c===void 0)&&c.length?[...this.raw]:[this];for(const h of f)if(g.push(...!((d=h.raw)===null||d===void 0)&&d.length?h.raw:[h]),!h.isEmpty()){this.mergeContents(s,h.contents);for(const m of h.overrides){const[C]=l.filter(w=>L.equals(w.identifiers,m.identifiers));C?(this.mergeContents(C.contents,m.contents),C.keys.push(...m.keys),C.keys=L.distinct(C.keys)):l.push(y.deepClone(m))}for(const m of h.keys)o.indexOf(m)===-1&&o.push(m)}return new a(s,o,l,g.every(h=>h instanceof a)?void 0:g)}createOverrideConfigurationModel(f){const c=this.getContentsForOverrideIdentifer(f);if(!c||typeof c!=\"object\"||!Object.keys(c).length)return this;const d={};for(const s of L.distinct([...Object.keys(this.contents),...Object.keys(c)])){let l=this.contents[s];const o=c[s];o&&(typeof l==\"object\"&&typeof o==\"object\"?(l=y.deepClone(l),this.mergeContents(l,o)):l=o),d[s]=l}return new a(d,this.keys,this.overrides)}mergeContents(f,c){for(const d of Object.keys(c)){if(d in f&&E.isObject(f[d])&&E.isObject(c[d])){this.mergeContents(f[d],c[d]);continue}f[d]=y.deepClone(c[d])}}getContentsForOverrideIdentifer(f){let c=null,d=null;const s=l=>{l&&(d?this.mergeContents(d,l):d=y.deepClone(l))};for(const l of this.overrides)l.identifiers.length===1&&l.identifiers[0]===f?c=l.contents:l.identifiers.includes(f)&&s(l.contents);return s(c),d}toJSON(){return{contents:this.contents,overrides:this.overrides,keys:this.keys}}addValue(f,c){this.updateValue(f,c,!0)}setValue(f,c){this.updateValue(f,c,!1)}removeValue(f){const c=this.keys.indexOf(f);c!==-1&&(this.keys.splice(c,1),(0,p.removeFromValueTree)(this.contents,f),_.OVERRIDE_PROPERTY_REGEX.test(f)&&this.overrides.splice(this.overrides.findIndex(d=>L.equals(d.identifiers,(0,_.overrideIdentifiersFromKey)(f))),1))}updateValue(f,c,d){(0,p.addToValueTree)(this.contents,f,c,s=>console.error(s)),d=d||this.keys.indexOf(f)===-1,d&&this.keys.push(f),_.OVERRIDE_PROPERTY_REGEX.test(f)&&this.overrides.push({identifiers:(0,_.overrideIdentifiersFromKey)(f),keys:Object.keys(this.contents[f]),contents:(0,p.toValuesTree)(this.contents[f],s=>console.error(s))})}}e.ConfigurationModel=a;class i{constructor(f){this._name=f,this._raw=null,this._configurationModel=null,this._restrictedConfigurations=[]}get configurationModel(){return this._configurationModel||new a}parseRaw(f,c){this._raw=f;const{contents:d,keys:s,overrides:l,restricted:o,hasExcludedProperties:g}=this.doParseRaw(f,c);this._configurationModel=new a(d,s,l,g?[f]:void 0),this._restrictedConfigurations=o||[]}doParseRaw(f,c){const d=v.Registry.as(_.Extensions.Configuration).getConfigurationProperties(),s=this.filter(f,d,!0,c);f=s.raw;const l=(0,p.toValuesTree)(f,h=>console.error(`Conflict in settings file ${this._name}: ${h}`)),o=Object.keys(f),g=this.toOverrides(f,h=>console.error(`Conflict in settings file ${this._name}: ${h}`));return{contents:l,keys:o,overrides:g,restricted:s.restricted,hasExcludedProperties:s.hasExcludedProperties}}filter(f,c,d,s){var l,o,g;let h=!1;if(!s?.scopes&&!s?.skipRestricted&&!(!((l=s?.exclude)===null||l===void 0)&&l.length))return{raw:f,restricted:[],hasExcludedProperties:h};const m={},C=[];for(const w in f)if(_.OVERRIDE_PROPERTY_REGEX.test(w)&&d){const D=this.filter(f[w],c,!1,s);m[w]=D.raw,h=h||D.hasExcludedProperties,C.push(...D.restricted)}else{const D=c[w],I=D?typeof D.scope<\"u\"?D.scope:3:void 0;D?.restricted&&C.push(w),!(!((o=s.exclude)===null||o===void 0)&&o.includes(w))&&(!((g=s.include)===null||g===void 0)&&g.includes(w)||(I===void 0||s.scopes===void 0||s.scopes.includes(I))&&!(s.skipRestricted&&D?.restricted))?m[w]=f[w]:h=!0}return{raw:m,restricted:C,hasExcludedProperties:h}}toOverrides(f,c){const d=[];for(const s of Object.keys(f))if(_.OVERRIDE_PROPERTY_REGEX.test(s)){const l={};for(const o in f[s])l[o]=f[s][o];d.push({identifiers:(0,_.overrideIdentifiersFromKey)(s),keys:Object.keys(l),contents:(0,p.toValuesTree)(l,c)})}return d}}e.ConfigurationModelParser=i;class n{constructor(f,c,d,s,l,o,g,h,m,C,w,D,I){this.key=f,this.overrides=c,this._value=d,this.overrideIdentifiers=s,this.defaultConfiguration=l,this.policyConfiguration=o,this.applicationConfiguration=g,this.userConfiguration=h,this.localUserConfiguration=m,this.remoteUserConfiguration=C,this.workspaceConfiguration=w,this.folderConfigurationModel=D,this.memoryConfigurationModel=I}inspect(f,c,d){const s=f.inspect(c,d);return{get value(){return b(s.value)},get override(){return b(s.override)},get merged(){return b(s.merged)}}}get userInspectValue(){return this._userInspectValue||(this._userInspectValue=this.inspect(this.userConfiguration,this.key,this.overrides.overrideIdentifier)),this._userInspectValue}get user(){return this.userInspectValue.value!==void 0||this.userInspectValue.override!==void 0?{value:this.userInspectValue.value,override:this.userInspectValue.override}:void 0}}class t{constructor(f,c,d,s,l=new a,o=new a,g=new k.ResourceMap,h=new a,m=new k.ResourceMap){this._defaultConfiguration=f,this._policyConfiguration=c,this._applicationConfiguration=d,this._localUserConfiguration=s,this._remoteUserConfiguration=l,this._workspaceConfiguration=o,this._folderConfigurations=g,this._memoryConfiguration=h,this._memoryConfigurationByResource=m,this._workspaceConsolidatedConfiguration=null,this._foldersConsolidatedConfigurations=new k.ResourceMap,this._userConfiguration=null}getValue(f,c,d){return this.getConsolidatedConfigurationModel(f,c,d).getValue(f)}updateValue(f,c,d={}){let s;d.resource?(s=this._memoryConfigurationByResource.get(d.resource),s||(s=new a,this._memoryConfigurationByResource.set(d.resource,s))):s=this._memoryConfiguration,c===void 0?s.removeValue(f):s.setValue(f,c),d.resource||(this._workspaceConsolidatedConfiguration=null)}inspect(f,c,d){const s=this.getConsolidatedConfigurationModel(f,c,d),l=this.getFolderConfigurationModelForResource(c.resource,d),o=c.resource?this._memoryConfigurationByResource.get(c.resource)||this._memoryConfiguration:this._memoryConfiguration,g=new Set;for(const h of s.overrides)for(const m of h.identifiers)s.getOverrideValue(f,m)!==void 0&&g.add(m);return new n(f,c,s.getValue(f),g.size?[...g]:void 0,this._defaultConfiguration,this._policyConfiguration.isEmpty()?void 0:this._policyConfiguration,this.applicationConfiguration.isEmpty()?void 0:this.applicationConfiguration,this.userConfiguration,this.localUserConfiguration,this.remoteUserConfiguration,d?this._workspaceConfiguration:void 0,l||void 0,o)}get applicationConfiguration(){return this._applicationConfiguration}get userConfiguration(){return this._userConfiguration||(this._userConfiguration=this._remoteUserConfiguration.isEmpty()?this._localUserConfiguration:this._localUserConfiguration.merge(this._remoteUserConfiguration)),this._userConfiguration}get localUserConfiguration(){return this._localUserConfiguration}get remoteUserConfiguration(){return this._remoteUserConfiguration}getConsolidatedConfigurationModel(f,c,d){let s=this.getConsolidatedConfigurationModelForResource(c,d);return c.overrideIdentifier&&(s=s.override(c.overrideIdentifier)),!this._policyConfiguration.isEmpty()&&this._policyConfiguration.getValue(f)!==void 0&&(s=s.merge(this._policyConfiguration)),s}getConsolidatedConfigurationModelForResource({resource:f},c){let d=this.getWorkspaceConsolidatedConfiguration();if(c&&f){const s=c.getFolder(f);s&&(d=this.getFolderConsolidatedConfiguration(s.uri)||d);const l=this._memoryConfigurationByResource.get(f);l&&(d=d.merge(l))}return d}getWorkspaceConsolidatedConfiguration(){return this._workspaceConsolidatedConfiguration||(this._workspaceConsolidatedConfiguration=this._defaultConfiguration.merge(this.applicationConfiguration,this.userConfiguration,this._workspaceConfiguration,this._memoryConfiguration)),this._workspaceConsolidatedConfiguration}getFolderConsolidatedConfiguration(f){let c=this._foldersConsolidatedConfigurations.get(f);if(!c){const d=this.getWorkspaceConsolidatedConfiguration(),s=this._folderConfigurations.get(f);s?(c=d.merge(s),this._foldersConsolidatedConfigurations.set(f,c)):c=d}return c}getFolderConfigurationModelForResource(f,c){if(c&&f){const d=c.getFolder(f);if(d)return this._folderConfigurations.get(d.uri)}}toData(){return{defaults:{contents:this._defaultConfiguration.contents,overrides:this._defaultConfiguration.overrides,keys:this._defaultConfiguration.keys},policy:{contents:this._policyConfiguration.contents,overrides:this._policyConfiguration.overrides,keys:this._policyConfiguration.keys},application:{contents:this.applicationConfiguration.contents,overrides:this.applicationConfiguration.overrides,keys:this.applicationConfiguration.keys},user:{contents:this.userConfiguration.contents,overrides:this.userConfiguration.overrides,keys:this.userConfiguration.keys},workspace:{contents:this._workspaceConfiguration.contents,overrides:this._workspaceConfiguration.overrides,keys:this._workspaceConfiguration.keys},folders:[...this._folderConfigurations.keys()].reduce((f,c)=>{const{contents:d,overrides:s,keys:l}=this._folderConfigurations.get(c);return f.push([c,{contents:d,overrides:s,keys:l}]),f},[])}}static parse(f){const c=this.parseConfigurationModel(f.defaults),d=this.parseConfigurationModel(f.policy),s=this.parseConfigurationModel(f.application),l=this.parseConfigurationModel(f.user),o=this.parseConfigurationModel(f.workspace),g=f.folders.reduce((h,m)=>(h.set(S.URI.revive(m[0]),this.parseConfigurationModel(m[1])),h),new k.ResourceMap);return new t(c,d,s,l,new a,o,g,new a,new k.ResourceMap)}static parseConfigurationModel(f){return new a(f.contents,f.keys,f.overrides)}}e.Configuration=t;class r{constructor(f,c,d,s){this.change=f,this.previous=c,this.currentConfiguraiton=d,this.currentWorkspace=s,this._marker=`\n`,this._markerCode1=this._marker.charCodeAt(0),this._markerCode2=\".\".charCodeAt(0),this.affectedKeys=new Set,this._previousConfiguration=void 0;for(const l of f.keys)this.affectedKeys.add(l);for(const[,l]of f.overrides)for(const o of l)this.affectedKeys.add(o);this._affectsConfigStr=this._marker;for(const l of this.affectedKeys)this._affectsConfigStr+=l+this._marker}get previousConfiguration(){return!this._previousConfiguration&&this.previous&&(this._previousConfiguration=t.parse(this.previous.data)),this._previousConfiguration}affectsConfiguration(f,c){var d;const s=this._marker+f,l=this._affectsConfigStr.indexOf(s);if(l<0)return!1;const o=l+s.length;if(o>=this._affectsConfigStr.length)return!1;const g=this._affectsConfigStr.charCodeAt(o);if(g!==this._markerCode1&&g!==this._markerCode2)return!1;if(c){const h=this.previousConfiguration?this.previousConfiguration.getValue(f,c,(d=this.previous)===null||d===void 0?void 0:d.workspace):void 0,m=this.currentConfiguraiton.getValue(f,c,this.currentWorkspace);return!y.equals(h,m)}return!0}}e.ConfigurationChangeEvent=r}),define(se[799],oe([1,0,2,356,98,37]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DefaultConfiguration=void 0;class S extends L.Disposable{constructor(){super(...arguments),this._configurationModel=new k.ConfigurationModel}get configurationModel(){return this._configurationModel}reload(){return this.resetConfigurationModel(),this.configurationModel}getConfigurationDefaultOverrides(){return{}}resetConfigurationModel(){this._configurationModel=new k.ConfigurationModel;const _=E.Registry.as(y.Extensions.Configuration).getConfigurationProperties();this.updateConfigurationModel(Object.keys(_),_)}updateConfigurationModel(_,v){const b=this.getConfigurationDefaultOverrides();for(const a of _){const i=b[a],n=v[a];i!==void 0?this._configurationModel.addValue(a,i):n?this._configurationModel.addValue(a,n.default):this._configurationModel.removeValue(a)}}}e.DefaultConfiguration=S}),define(se[124],oe([1,0,125,17,25,37,2,66]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Extensions=e.KeybindingsRegistry=void 0;class _{constructor(){this._coreKeybindings=new p.LinkedList,this._extensionKeybindings=[],this._cachedMergedKeybindings=null}static bindToCurrentPlatform(a){if(k.OS===1){if(a&&a.win)return a.win}else if(k.OS===2){if(a&&a.mac)return a.mac}else if(a&&a.linux)return a.linux;return a}registerKeybindingRule(a){const i=_.bindToCurrentPlatform(a),n=new S.DisposableStore;if(i&&i.primary){const t=(0,L.decodeKeybinding)(i.primary,k.OS);t&&n.add(this._registerDefaultKeybinding(t,a.id,a.args,a.weight,0,a.when))}if(i&&Array.isArray(i.secondary))for(let t=0,r=i.secondary.length;t<r;t++){const u=i.secondary[t],f=(0,L.decodeKeybinding)(u,k.OS);f&&n.add(this._registerDefaultKeybinding(f,a.id,a.args,a.weight,-t-1,a.when))}return n}registerCommandAndKeybindingRule(a){return(0,S.combinedDisposable)(this.registerKeybindingRule(a),y.CommandsRegistry.registerCommand(a))}_registerDefaultKeybinding(a,i,n,t,r,u){const f=this._coreKeybindings.push({keybinding:a,command:i,commandArgs:n,when:u,weight1:t,weight2:r,extensionId:null,isBuiltinExtension:!1});return this._cachedMergedKeybindings=null,(0,S.toDisposable)(()=>{f(),this._cachedMergedKeybindings=null})}getDefaultKeybindings(){return this._cachedMergedKeybindings||(this._cachedMergedKeybindings=Array.from(this._coreKeybindings).concat(this._extensionKeybindings),this._cachedMergedKeybindings.sort(v)),this._cachedMergedKeybindings.slice(0)}}e.KeybindingsRegistry=new _,e.Extensions={EditorModes:\"platform.keybindingsRegistry\"},E.Registry.add(e.Extensions.EditorModes,e.KeybindingsRegistry);function v(b,a){if(b.weight1!==a.weight1)return b.weight1-a.weight1;if(b.command&&a.command){if(b.command<a.command)return-1;if(b.command>a.command)return 1}return b.weight2-a.weight2}}),define(se[30],oe([1,0,42,28,6,2,66,25,15,8,124]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";var a;Object.defineProperty(e,\"__esModule\",{value:!0}),e.registerAction2=e.Action2=e.MenuItemAction=e.SubmenuItemAction=e.MenuRegistry=e.IMenuService=e.MenuId=e.isISubmenuItem=e.isIMenuItem=void 0;function i(s){return s.command!==void 0}e.isIMenuItem=i;function n(s){return s.submenu!==void 0}e.isISubmenuItem=n;class t{constructor(l){if(t._instances.has(l))throw new TypeError(`MenuId with identifier '${l}' already exists. Use MenuId.for(ident) or a unique identifier`);t._instances.set(l,this),this.id=l}}e.MenuId=t,t._instances=new Map,t.CommandPalette=new t(\"CommandPalette\"),t.DebugBreakpointsContext=new t(\"DebugBreakpointsContext\"),t.DebugCallStackContext=new t(\"DebugCallStackContext\"),t.DebugConsoleContext=new t(\"DebugConsoleContext\"),t.DebugVariablesContext=new t(\"DebugVariablesContext\"),t.DebugHoverContext=new t(\"DebugHoverContext\"),t.DebugWatchContext=new t(\"DebugWatchContext\"),t.DebugToolBar=new t(\"DebugToolBar\"),t.DebugToolBarStop=new t(\"DebugToolBarStop\"),t.EditorContext=new t(\"EditorContext\"),t.SimpleEditorContext=new t(\"SimpleEditorContext\"),t.EditorContent=new t(\"EditorContent\"),t.EditorLineNumberContext=new t(\"EditorLineNumberContext\"),t.EditorContextCopy=new t(\"EditorContextCopy\"),t.EditorContextPeek=new t(\"EditorContextPeek\"),t.EditorContextShare=new t(\"EditorContextShare\"),t.EditorTitle=new t(\"EditorTitle\"),t.EditorTitleRun=new t(\"EditorTitleRun\"),t.EditorTitleContext=new t(\"EditorTitleContext\"),t.EditorTitleContextShare=new t(\"EditorTitleContextShare\"),t.EmptyEditorGroup=new t(\"EmptyEditorGroup\"),t.EmptyEditorGroupContext=new t(\"EmptyEditorGroupContext\"),t.EditorTabsBarContext=new t(\"EditorTabsBarContext\"),t.EditorTabsBarShowTabsSubmenu=new t(\"EditorTabsBarShowTabsSubmenu\"),t.EditorTabsBarShowTabsZenModeSubmenu=new t(\"EditorTabsBarShowTabsZenModeSubmenu\"),t.EditorActionsPositionSubmenu=new t(\"EditorActionsPositionSubmenu\"),t.ExplorerContext=new t(\"ExplorerContext\"),t.ExplorerContextShare=new t(\"ExplorerContextShare\"),t.ExtensionContext=new t(\"ExtensionContext\"),t.GlobalActivity=new t(\"GlobalActivity\"),t.CommandCenter=new t(\"CommandCenter\"),t.CommandCenterCenter=new t(\"CommandCenterCenter\"),t.LayoutControlMenuSubmenu=new t(\"LayoutControlMenuSubmenu\"),t.LayoutControlMenu=new t(\"LayoutControlMenu\"),t.MenubarMainMenu=new t(\"MenubarMainMenu\"),t.MenubarAppearanceMenu=new t(\"MenubarAppearanceMenu\"),t.MenubarDebugMenu=new t(\"MenubarDebugMenu\"),t.MenubarEditMenu=new t(\"MenubarEditMenu\"),t.MenubarCopy=new t(\"MenubarCopy\"),t.MenubarFileMenu=new t(\"MenubarFileMenu\"),t.MenubarGoMenu=new t(\"MenubarGoMenu\"),t.MenubarHelpMenu=new t(\"MenubarHelpMenu\"),t.MenubarLayoutMenu=new t(\"MenubarLayoutMenu\"),t.MenubarNewBreakpointMenu=new t(\"MenubarNewBreakpointMenu\"),t.PanelAlignmentMenu=new t(\"PanelAlignmentMenu\"),t.PanelPositionMenu=new t(\"PanelPositionMenu\"),t.ActivityBarPositionMenu=new t(\"ActivityBarPositionMenu\"),t.MenubarPreferencesMenu=new t(\"MenubarPreferencesMenu\"),t.MenubarRecentMenu=new t(\"MenubarRecentMenu\"),t.MenubarSelectionMenu=new t(\"MenubarSelectionMenu\"),t.MenubarShare=new t(\"MenubarShare\"),t.MenubarSwitchEditorMenu=new t(\"MenubarSwitchEditorMenu\"),t.MenubarSwitchGroupMenu=new t(\"MenubarSwitchGroupMenu\"),t.MenubarTerminalMenu=new t(\"MenubarTerminalMenu\"),t.MenubarViewMenu=new t(\"MenubarViewMenu\"),t.MenubarHomeMenu=new t(\"MenubarHomeMenu\"),t.OpenEditorsContext=new t(\"OpenEditorsContext\"),t.OpenEditorsContextShare=new t(\"OpenEditorsContextShare\"),t.ProblemsPanelContext=new t(\"ProblemsPanelContext\"),t.SCMInputBox=new t(\"SCMInputBox\"),t.SCMIncomingChanges=new t(\"SCMIncomingChanges\"),t.SCMOutgoingChanges=new t(\"SCMOutgoingChanges\"),t.SCMIncomingChangesAllChangesContext=new t(\"SCMIncomingChangesAllChangesContext\"),t.SCMIncomingChangesHistoryItemContext=new t(\"SCMIncomingChangesHistoryItemContext\"),t.SCMOutgoingChangesAllChangesContext=new t(\"SCMOutgoingChangesAllChangesContext\"),t.SCMOutgoingChangesHistoryItemContext=new t(\"SCMOutgoingChangesHistoryItemContext\"),t.SCMChangeContext=new t(\"SCMChangeContext\"),t.SCMResourceContext=new t(\"SCMResourceContext\"),t.SCMResourceContextShare=new t(\"SCMResourceContextShare\"),t.SCMResourceFolderContext=new t(\"SCMResourceFolderContext\"),t.SCMResourceGroupContext=new t(\"SCMResourceGroupContext\"),t.SCMSourceControl=new t(\"SCMSourceControl\"),t.SCMSourceControlInline=new t(\"SCMSourceControlInline\"),t.SCMTitle=new t(\"SCMTitle\"),t.SearchContext=new t(\"SearchContext\"),t.SearchActionMenu=new t(\"SearchActionContext\"),t.StatusBarWindowIndicatorMenu=new t(\"StatusBarWindowIndicatorMenu\"),t.StatusBarRemoteIndicatorMenu=new t(\"StatusBarRemoteIndicatorMenu\"),t.StickyScrollContext=new t(\"StickyScrollContext\"),t.TestItem=new t(\"TestItem\"),t.TestItemGutter=new t(\"TestItemGutter\"),t.TestMessageContext=new t(\"TestMessageContext\"),t.TestMessageContent=new t(\"TestMessageContent\"),t.TestPeekElement=new t(\"TestPeekElement\"),t.TestPeekTitle=new t(\"TestPeekTitle\"),t.TouchBarContext=new t(\"TouchBarContext\"),t.TitleBarContext=new t(\"TitleBarContext\"),t.TitleBarTitleContext=new t(\"TitleBarTitleContext\"),t.TunnelContext=new t(\"TunnelContext\"),t.TunnelPrivacy=new t(\"TunnelPrivacy\"),t.TunnelProtocol=new t(\"TunnelProtocol\"),t.TunnelPortInline=new t(\"TunnelInline\"),t.TunnelTitle=new t(\"TunnelTitle\"),t.TunnelLocalAddressInline=new t(\"TunnelLocalAddressInline\"),t.TunnelOriginInline=new t(\"TunnelOriginInline\"),t.ViewItemContext=new t(\"ViewItemContext\"),t.ViewContainerTitle=new t(\"ViewContainerTitle\"),t.ViewContainerTitleContext=new t(\"ViewContainerTitleContext\"),t.ViewTitle=new t(\"ViewTitle\"),t.ViewTitleContext=new t(\"ViewTitleContext\"),t.CommentEditorActions=new t(\"CommentEditorActions\"),t.CommentThreadTitle=new t(\"CommentThreadTitle\"),t.CommentThreadActions=new t(\"CommentThreadActions\"),t.CommentThreadAdditionalActions=new t(\"CommentThreadAdditionalActions\"),t.CommentThreadTitleContext=new t(\"CommentThreadTitleContext\"),t.CommentThreadCommentContext=new t(\"CommentThreadCommentContext\"),t.CommentTitle=new t(\"CommentTitle\"),t.CommentActions=new t(\"CommentActions\"),t.InteractiveToolbar=new t(\"InteractiveToolbar\"),t.InteractiveCellTitle=new t(\"InteractiveCellTitle\"),t.InteractiveCellDelete=new t(\"InteractiveCellDelete\"),t.InteractiveCellExecute=new t(\"InteractiveCellExecute\"),t.InteractiveInputExecute=new t(\"InteractiveInputExecute\"),t.NotebookToolbar=new t(\"NotebookToolbar\"),t.NotebookStickyScrollContext=new t(\"NotebookStickyScrollContext\"),t.NotebookCellTitle=new t(\"NotebookCellTitle\"),t.NotebookCellDelete=new t(\"NotebookCellDelete\"),t.NotebookCellInsert=new t(\"NotebookCellInsert\"),t.NotebookCellBetween=new t(\"NotebookCellBetween\"),t.NotebookCellListTop=new t(\"NotebookCellTop\"),t.NotebookCellExecute=new t(\"NotebookCellExecute\"),t.NotebookCellExecutePrimary=new t(\"NotebookCellExecutePrimary\"),t.NotebookDiffCellInputTitle=new t(\"NotebookDiffCellInputTitle\"),t.NotebookDiffCellMetadataTitle=new t(\"NotebookDiffCellMetadataTitle\"),t.NotebookDiffCellOutputsTitle=new t(\"NotebookDiffCellOutputsTitle\"),t.NotebookOutputToolbar=new t(\"NotebookOutputToolbar\"),t.NotebookEditorLayoutConfigure=new t(\"NotebookEditorLayoutConfigure\"),t.NotebookKernelSource=new t(\"NotebookKernelSource\"),t.BulkEditTitle=new t(\"BulkEditTitle\"),t.BulkEditContext=new t(\"BulkEditContext\"),t.TimelineItemContext=new t(\"TimelineItemContext\"),t.TimelineTitle=new t(\"TimelineTitle\"),t.TimelineTitleContext=new t(\"TimelineTitleContext\"),t.TimelineFilterSubMenu=new t(\"TimelineFilterSubMenu\"),t.AccountsContext=new t(\"AccountsContext\"),t.SidebarTitle=new t(\"SidebarTitle\"),t.PanelTitle=new t(\"PanelTitle\"),t.AuxiliaryBarTitle=new t(\"AuxiliaryBarTitle\"),t.TerminalInstanceContext=new t(\"TerminalInstanceContext\"),t.TerminalEditorInstanceContext=new t(\"TerminalEditorInstanceContext\"),t.TerminalNewDropdownContext=new t(\"TerminalNewDropdownContext\"),t.TerminalTabContext=new t(\"TerminalTabContext\"),t.TerminalTabEmptyAreaContext=new t(\"TerminalTabEmptyAreaContext\"),t.TerminalStickyScrollContext=new t(\"TerminalStickyScrollContext\"),t.WebviewContext=new t(\"WebviewContext\"),t.InlineCompletionsActions=new t(\"InlineCompletionsActions\"),t.NewFile=new t(\"NewFile\"),t.MergeInput1Toolbar=new t(\"MergeToolbar1Toolbar\"),t.MergeInput2Toolbar=new t(\"MergeToolbar2Toolbar\"),t.MergeBaseToolbar=new t(\"MergeBaseToolbar\"),t.MergeInputResultToolbar=new t(\"MergeToolbarResultToolbar\"),t.InlineSuggestionToolbar=new t(\"InlineSuggestionToolbar\"),t.ChatContext=new t(\"ChatContext\"),t.ChatCodeBlock=new t(\"ChatCodeblock\"),t.ChatMessageTitle=new t(\"ChatMessageTitle\"),t.ChatExecute=new t(\"ChatExecute\"),t.ChatInputSide=new t(\"ChatInputSide\"),t.AccessibleView=new t(\"AccessibleView\"),t.MultiDiffEditorFileToolbar=new t(\"MultiDiffEditorFileToolbar\"),e.IMenuService=(0,v.createDecorator)(\"menuService\");class r{static for(l){let o=this._all.get(l);return o||(o=new r(l),this._all.set(l,o)),o}static merge(l){const o=new Set;for(const g of l)g instanceof r&&o.add(g.id);return o}constructor(l){this.id=l,this.has=o=>o===l}}r._all=new Map,e.MenuRegistry=new class{constructor(){this._commands=new Map,this._menuItems=new Map,this._onDidChangeMenu=new y.MicrotaskEmitter({merge:r.merge}),this.onDidChangeMenu=this._onDidChangeMenu.event}addCommand(s){return this._commands.set(s.id,s),this._onDidChangeMenu.fire(r.for(t.CommandPalette)),(0,E.toDisposable)(()=>{this._commands.delete(s.id)&&this._onDidChangeMenu.fire(r.for(t.CommandPalette))})}getCommand(s){return this._commands.get(s)}getCommands(){const s=new Map;return this._commands.forEach((l,o)=>s.set(o,l)),s}appendMenuItem(s,l){let o=this._menuItems.get(s);o||(o=new S.LinkedList,this._menuItems.set(s,o));const g=o.push(l);return this._onDidChangeMenu.fire(r.for(s)),(0,E.toDisposable)(()=>{g(),this._onDidChangeMenu.fire(r.for(s))})}appendMenuItems(s){const l=new E.DisposableStore;for(const{id:o,item:g}of s)l.add(this.appendMenuItem(o,g));return l}getMenuItems(s){let l;return this._menuItems.has(s)?l=[...this._menuItems.get(s)]:l=[],s===t.CommandPalette&&this._appendImplicitItems(l),l}_appendImplicitItems(s){const l=new Set;for(const o of s)i(o)&&(l.add(o.command.id),o.alt&&l.add(o.alt.id));this._commands.forEach((o,g)=>{l.has(g)||s.push({command:o})})}};class u extends L.SubmenuAction{constructor(l,o,g){super(`submenuitem.${l.submenu.id}`,typeof l.title==\"string\"?l.title:l.title.value,g,\"submenu\"),this.item=l,this.hideActions=o}}e.SubmenuItemAction=u;let f=a=class{static label(l,o){return o?.renderShortTitle&&l.shortTitle?typeof l.shortTitle==\"string\"?l.shortTitle:l.shortTitle.value:typeof l.title==\"string\"?l.title:l.title.value}constructor(l,o,g,h,m,C){var w,D;this.hideActions=h,this._commandService=C,this.id=l.id,this.label=a.label(l,g),this.tooltip=(D=typeof l.tooltip==\"string\"?l.tooltip:(w=l.tooltip)===null||w===void 0?void 0:w.value)!==null&&D!==void 0?D:\"\",this.enabled=!l.precondition||m.contextMatchesRules(l.precondition),this.checked=void 0;let I;if(l.toggled){const T=l.toggled.condition?l.toggled:{condition:l.toggled};this.checked=m.contextMatchesRules(T.condition),this.checked&&T.tooltip&&(this.tooltip=typeof T.tooltip==\"string\"?T.tooltip:T.tooltip.value),this.checked&&k.ThemeIcon.isThemeIcon(T.icon)&&(I=T.icon),this.checked&&T.title&&(this.label=typeof T.title==\"string\"?T.title:T.title.value)}I||(I=k.ThemeIcon.isThemeIcon(l.icon)?l.icon:void 0),this.item=l,this.alt=o?new a(o,void 0,g,h,m,C):void 0,this._options=g,this.class=I&&k.ThemeIcon.asClassName(I)}run(...l){var o,g;let h=[];return!((o=this._options)===null||o===void 0)&&o.arg&&(h=[...h,this._options.arg]),!((g=this._options)===null||g===void 0)&&g.shouldForwardArgs&&(h=[...h,...l]),this._commandService.executeCommand(this.id,...h)}};e.MenuItemAction=f,e.MenuItemAction=f=a=ke([ge(4,_.IContextKeyService),ge(5,p.ICommandService)],f);class c{constructor(l){this.desc=l}}e.Action2=c;function d(s){const l=new E.DisposableStore,o=new s,{f1:g,menu:h,keybinding:m,...C}=o.desc;if(p.CommandsRegistry.getCommand(C.id))throw new Error(`Cannot register two commands with the same id: ${C.id}`);if(l.add(p.CommandsRegistry.registerCommand({id:C.id,handler:(w,...D)=>o.run(w,...D),metadata:C.metadata})),Array.isArray(h))for(const w of h)l.add(e.MenuRegistry.appendMenuItem(w.id,{command:{...C,precondition:w.precondition===null?void 0:C.precondition},...w}));else h&&l.add(e.MenuRegistry.appendMenuItem(h.id,{command:{...C,precondition:h.precondition===null?void 0:C.precondition},...h}));if(g&&(l.add(e.MenuRegistry.appendMenuItem(t.CommandPalette,{command:C,when:C.precondition})),l.add(e.MenuRegistry.addCommand(C))),Array.isArray(m))for(const w of m)l.add(b.KeybindingsRegistry.registerKeybindingRule({...w,id:C.id,when:C.precondition?_.ContextKeyExpr.and(C.precondition,w.when):w.when}));else m&&l.add(b.KeybindingsRegistry.registerKeybindingRule({...m,id:C.id,when:C.precondition?_.ContextKeyExpr.and(C.precondition,m.when):m.when}));return l}e.registerAction2=d}),define(se[800],oe([1,0,48,202,723,30]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ToggleTabFocusModeAction=void 0;class S extends E.Action2{constructor(){super({id:S.ID,title:{value:y.localize(0,null),original:\"Toggle Tab Key Moves Focus\"},precondition:void 0,keybinding:{primary:2091,mac:{primary:1323},weight:100},f1:!0})}run(){const v=!k.TabFocus.getTabFocusMode();k.TabFocus.setTabFocusMode(v),v?(0,L.alert)(y.localize(1,null)):(0,L.alert)(y.localize(2,null))}}e.ToggleTabFocusModeAction=S,S.ID=\"editor.action.toggleTabFocusMode\",(0,E.registerAction2)(S)}),define(se[357],oe([1,0,232,598,15,124,742,2,7]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContextScopedReplaceInput=e.ContextScopedFindInput=e.registerAndCreateHistoryNavigationContext=e.historyNavigationVisible=void 0,e.historyNavigationVisible=new y.RawContextKey(\"suggestWidgetVisible\",!1,(0,S.localize)(0,null));const v=\"historyNavigationWidgetFocus\",b=\"historyNavigationForwardsEnabled\",a=\"historyNavigationBackwardsEnabled\";let i;const n=[];function t(f,c){if(n.includes(c))throw new Error(\"Cannot register the same widget multiple times\");n.push(c);const d=new p.DisposableStore,s=new y.RawContextKey(v,!1).bindTo(f),l=new y.RawContextKey(b,!0).bindTo(f),o=new y.RawContextKey(a,!0).bindTo(f),g=()=>{s.set(!0),i=c},h=()=>{s.set(!1),i===c&&(i=void 0)};return(0,_.isActiveElement)(c.element)&&g(),d.add(c.onDidFocus(()=>g())),d.add(c.onDidBlur(()=>h())),d.add((0,p.toDisposable)(()=>{n.splice(n.indexOf(c),1),h()})),{historyNavigationForwardsEnablement:l,historyNavigationBackwardsEnablement:o,dispose(){d.dispose()}}}e.registerAndCreateHistoryNavigationContext=t;let r=class extends L.FindInput{constructor(c,d,s,l){super(c,d,s);const o=this._register(l.createScoped(this.inputBox.element));this._register(t(o,this.inputBox))}};e.ContextScopedFindInput=r,e.ContextScopedFindInput=r=ke([ge(3,y.IContextKeyService)],r);let u=class extends k.ReplaceInput{constructor(c,d,s,l,o=!1){super(c,d,o,s);const g=this._register(l.createScoped(this.inputBox.element));this._register(t(g,this.inputBox))}};e.ContextScopedReplaceInput=u,e.ContextScopedReplaceInput=u=ke([ge(3,y.IContextKeyService)],u),E.KeybindingsRegistry.registerCommandAndKeybindingRule({id:\"history.showPrevious\",weight:200,when:y.ContextKeyExpr.and(y.ContextKeyExpr.has(v),y.ContextKeyExpr.equals(a,!0),y.ContextKeyExpr.not(\"isComposing\"),e.historyNavigationVisible.isEqualTo(!1)),primary:16,secondary:[528],handler:f=>{i?.showPreviousValue()}}),E.KeybindingsRegistry.registerCommandAndKeybindingRule({id:\"history.showNext\",weight:200,when:y.ContextKeyExpr.and(y.ContextKeyExpr.has(v),y.ContextKeyExpr.equals(b,!0),y.ContextKeyExpr.not(\"isComposing\"),e.historyNavigationVisible.isEqualTo(!1)),primary:18,secondary:[530],handler:f=>{i?.showNextValue()}})}),define(se[138],oe([1,0,19,12,71,2,61,20,22,10,5,68,117,716,30,25,15,18,357]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuickSuggestionsOptions=e.showSimpleSuggestions=e.getSuggestionComparator=e.provideSuggestionItems=e.CompletionItemModel=e.getSnippetSuggestSupport=e.CompletionOptions=e.CompletionItem=e.suggestWidgetStatusbarMenu=e.Context=void 0,e.Context={Visible:c.historyNavigationVisible,HasFocusedSuggestion:new u.RawContextKey(\"suggestWidgetHasFocusedSuggestion\",!1,(0,n.localize)(0,null)),DetailsVisible:new u.RawContextKey(\"suggestWidgetDetailsVisible\",!1,(0,n.localize)(1,null)),MultipleSuggestions:new u.RawContextKey(\"suggestWidgetMultipleSuggestions\",!1,(0,n.localize)(2,null)),MakesTextEdit:new u.RawContextKey(\"suggestionMakesTextEdit\",!0,(0,n.localize)(3,null)),AcceptSuggestionsOnEnter:new u.RawContextKey(\"acceptSuggestionOnEnter\",!0,(0,n.localize)(4,null)),HasInsertAndReplaceRange:new u.RawContextKey(\"suggestionHasInsertAndReplaceRange\",!1,(0,n.localize)(5,null)),InsertMode:new u.RawContextKey(\"suggestionInsertMode\",void 0,{type:\"string\",description:(0,n.localize)(6,null)}),CanResolve:new u.RawContextKey(\"suggestionCanResolve\",!1,(0,n.localize)(7,null))},e.suggestWidgetStatusbarMenu=new t.MenuId(\"suggestWidgetStatusBar\");class d{constructor(N,M,R,x){var O;this.position=N,this.completion=M,this.container=R,this.provider=x,this.isInvalid=!1,this.score=y.FuzzyScore.Default,this.distance=0,this.textLabel=typeof M.label==\"string\"?M.label:(O=M.label)===null||O===void 0?void 0:O.label,this.labelLow=this.textLabel.toLowerCase(),this.isInvalid=!this.textLabel,this.sortTextLow=M.sortText&&M.sortText.toLowerCase(),this.filterTextLow=M.filterText&&M.filterText.toLowerCase(),this.extensionId=M.extensionId,b.Range.isIRange(M.range)?(this.editStart=new v.Position(M.range.startLineNumber,M.range.startColumn),this.editInsertEnd=new v.Position(M.range.endLineNumber,M.range.endColumn),this.editReplaceEnd=new v.Position(M.range.endLineNumber,M.range.endColumn),this.isInvalid=this.isInvalid||b.Range.spansMultipleLines(M.range)||M.range.startLineNumber!==N.lineNumber):(this.editStart=new v.Position(M.range.insert.startLineNumber,M.range.insert.startColumn),this.editInsertEnd=new v.Position(M.range.insert.endLineNumber,M.range.insert.endColumn),this.editReplaceEnd=new v.Position(M.range.replace.endLineNumber,M.range.replace.endColumn),this.isInvalid=this.isInvalid||b.Range.spansMultipleLines(M.range.insert)||b.Range.spansMultipleLines(M.range.replace)||M.range.insert.startLineNumber!==N.lineNumber||M.range.replace.startLineNumber!==N.lineNumber||M.range.insert.startColumn!==M.range.replace.startColumn),typeof x.resolveCompletionItem!=\"function\"&&(this._resolveCache=Promise.resolve(),this._resolveDuration=0)}get isResolved(){return this._resolveDuration!==void 0}get resolveDuration(){return this._resolveDuration!==void 0?this._resolveDuration:-1}async resolve(N){if(!this._resolveCache){const M=N.onCancellationRequested(()=>{this._resolveCache=void 0,this._resolveDuration=void 0}),R=new S.StopWatch(!0);this._resolveCache=Promise.resolve(this.provider.resolveCompletionItem(this.completion,N)).then(x=>{Object.assign(this.completion,x),this._resolveDuration=R.elapsed()},x=>{(0,k.isCancellationError)(x)&&(this._resolveCache=void 0,this._resolveDuration=void 0)}).finally(()=>{M.dispose()})}return this._resolveCache}}e.CompletionItem=d;class s{constructor(N=2,M=new Set,R=new Set,x=new Map,O=!0){this.snippetSortOrder=N,this.kindFilter=M,this.providerFilter=R,this.providerItemsToReuse=x,this.showDeprecated=O}}e.CompletionOptions=s,s.default=new s;let l;function o(){return l}e.getSnippetSuggestSupport=o;class g{constructor(N,M,R,x){this.items=N,this.needsClipboard=M,this.durations=R,this.disposable=x}}e.CompletionItemModel=g;async function h(P,N,M,R=s.default,x={triggerKind:0},O=L.CancellationToken.None){const B=new S.StopWatch;M=M.clone();const W=N.getWordAtPosition(M),V=W?new b.Range(M.lineNumber,W.startColumn,M.lineNumber,W.endColumn):b.Range.fromPositions(M),K={replace:V,insert:V.setEndPosition(M.lineNumber,M.column)},F=[],q=new E.DisposableStore,ie=[];let ae=!1;const ne=(J,Q,re)=>{var de,he,me;let X=!1;if(!Q)return X;for(const U of Q.suggestions)if(!R.kindFilter.has(U.kind)){if(!R.showDeprecated&&(!((de=U?.tags)===null||de===void 0)&&de.includes(1)))continue;U.range||(U.range=K),U.sortText||(U.sortText=typeof U.label==\"string\"?U.label:U.label.label),!ae&&U.insertTextRules&&U.insertTextRules&4&&(ae=i.SnippetParser.guessNeedsClipboard(U.insertText)),F.push(new d(M,U,Q,J)),X=!0}return(0,E.isDisposable)(Q)&&q.add(Q),ie.push({providerName:(he=J._debugDisplayName)!==null&&he!==void 0?he:\"unknown_provider\",elapsedProvider:(me=Q.duration)!==null&&me!==void 0?me:-1,elapsedOverall:re.elapsed()}),X},$=(async()=>{if(!l||R.kindFilter.has(27))return;const J=R.providerItemsToReuse.get(l);if(J){J.forEach(de=>F.push(de));return}if(R.providerFilter.size>0&&!R.providerFilter.has(l))return;const Q=new S.StopWatch,re=await l.provideCompletionItems(N,M,x,O);ne(l,re,Q)})();for(const J of P.orderedGroups(N)){let Q=!1;if(await Promise.all(J.map(async re=>{if(R.providerItemsToReuse.has(re)){const de=R.providerItemsToReuse.get(re);de.forEach(he=>F.push(he)),Q=Q||de.length>0;return}if(!(R.providerFilter.size>0&&!R.providerFilter.has(re)))try{const de=new S.StopWatch,he=await re.provideCompletionItems(N,M,x,O);Q=ne(re,he,de)||Q}catch(de){(0,k.onUnexpectedExternalError)(de)}})),Q||O.isCancellationRequested)break}return await $,O.isCancellationRequested?(q.dispose(),Promise.reject(new k.CancellationError)):new g(F.sort(I(R.snippetSortOrder)),ae,{entries:ie,elapsed:B.elapsed()},q)}e.provideSuggestionItems=h;function m(P,N){if(P.sortTextLow&&N.sortTextLow){if(P.sortTextLow<N.sortTextLow)return-1;if(P.sortTextLow>N.sortTextLow)return 1}return P.textLabel<N.textLabel?-1:P.textLabel>N.textLabel?1:P.completion.kind-N.completion.kind}function C(P,N){if(P.completion.kind!==N.completion.kind){if(P.completion.kind===27)return-1;if(N.completion.kind===27)return 1}return m(P,N)}function w(P,N){if(P.completion.kind!==N.completion.kind){if(P.completion.kind===27)return 1;if(N.completion.kind===27)return-1}return m(P,N)}const D=new Map;D.set(0,C),D.set(2,w),D.set(1,m);function I(P){return D.get(P)}e.getSuggestionComparator=I,r.CommandsRegistry.registerCommand(\"_executeCompletionItemProvider\",async(P,...N)=>{const[M,R,x,O]=N;(0,p.assertType)(_.URI.isUri(M)),(0,p.assertType)(v.Position.isIPosition(R)),(0,p.assertType)(typeof x==\"string\"||!x),(0,p.assertType)(typeof O==\"number\"||!O);const{completionProvider:B}=P.get(f.ILanguageFeaturesService),W=await P.get(a.ITextModelService).createModelReference(M);try{const V={incomplete:!1,suggestions:[]},K=[],F=W.object.textEditorModel.validatePosition(R),q=await h(B,W.object.textEditorModel,F,void 0,{triggerCharacter:x??void 0,triggerKind:x?1:0});for(const ie of q.items)K.length<(O??0)&&K.push(ie.resolve(L.CancellationToken.None)),V.incomplete=V.incomplete||ie.container.incomplete,V.suggestions.push(ie.completion);try{return await Promise.all(K),V}finally{setTimeout(()=>q.disposable.dispose(),100)}}finally{W.dispose()}});function T(P,N){var M;(M=P.getContribution(\"editor.contrib.suggestController\"))===null||M===void 0||M.triggerSuggest(new Set().add(N),void 0,!0)}e.showSimpleSuggestions=T;class A{static isAllOff(N){return N.other===\"off\"&&N.comments===\"off\"&&N.strings===\"off\"}static isAllOn(N){return N.other===\"on\"&&N.comments===\"on\"&&N.strings===\"on\"}static valueFor(N,M){switch(M){case 1:return N.comments;case 2:return N.strings;default:return N.other}}}e.QuickSuggestionsOptions=A}),define(se[139],oe([1,0,13,2,37]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuickAccessRegistry=e.Extensions=e.DefaultQuickAccessFilterValue=void 0;var E;(function(p){p[p.PRESERVE=0]=\"PRESERVE\",p[p.LAST=1]=\"LAST\"})(E||(e.DefaultQuickAccessFilterValue=E={})),e.Extensions={Quickaccess:\"workbench.contributions.quickaccess\"};class S{constructor(){this.providers=[],this.defaultProvider=void 0}registerQuickAccessProvider(_){return _.prefix.length===0?this.defaultProvider=_:this.providers.push(_),this.providers.sort((v,b)=>b.prefix.length-v.prefix.length),(0,k.toDisposable)(()=>{this.providers.splice(this.providers.indexOf(_),1),this.defaultProvider===_&&(this.defaultProvider=void 0)})}getQuickAccessProviders(){return(0,L.coalesce)([this.defaultProvider,...this.providers])}getQuickAccessProvider(_){return _&&this.providers.find(b=>_.startsWith(b.prefix))||void 0||this.defaultProvider}}e.QuickAccessRegistry=S,y.Registry.add(e.Extensions.Quickaccess,new S)}),define(se[801],oe([1,0,747,37,2,34,139,70]),function(te,e,L,k,y,E,S,p){\"use strict\";var _;Object.defineProperty(e,\"__esModule\",{value:!0}),e.HelpQuickAccessProvider=void 0;let v=_=class{constructor(a,i){this.quickInputService=a,this.keybindingService=i,this.registry=k.Registry.as(S.Extensions.Quickaccess)}provide(a){const i=new y.DisposableStore;return i.add(a.onDidAccept(()=>{const[n]=a.selectedItems;n&&this.quickInputService.quickAccess.show(n.prefix,{preserveValue:!0})})),i.add(a.onDidChangeValue(n=>{const t=this.registry.getQuickAccessProvider(n.substr(_.PREFIX.length));t&&t.prefix&&t.prefix!==_.PREFIX&&this.quickInputService.quickAccess.show(t.prefix,{preserveValue:!0})})),a.items=this.getQuickAccessProviders().filter(n=>n.prefix!==_.PREFIX),i}getQuickAccessProviders(){return this.registry.getQuickAccessProviders().sort((i,n)=>i.prefix.localeCompare(n.prefix)).flatMap(i=>this.createPicks(i))}createPicks(a){return a.helpEntries.map(i=>{const n=i.prefix||a.prefix,t=n||\"\\u2026\";return{prefix:n,label:t,keybinding:i.commandId?this.keybindingService.lookupKeybinding(i.commandId):void 0,ariaLabel:(0,L.localize)(0,null,t,i.description),description:i.description}})}};e.HelpQuickAccessProvider=v,v.PREFIX=\"?\",e.HelpQuickAccessProvider=v=_=ke([ge(0,p.IQuickInputService),ge(1,E.IKeybindingService)],v)}),define(se[802],oe([1,0,37,139,96,801]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),L.Registry.as(k.Extensions.Quickaccess).registerQuickAccessProvider({ctor:E.HelpQuickAccessProvider,prefix:\"\",helpEntries:[{description:y.QuickHelpNLS.helpQuickAccessActionLabel}]})}),define(se[803],oe([1,0,14,19,6,2,8,139,70,37]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuickAccessController=void 0;let b=class extends E.Disposable{constructor(i,n){super(),this.quickInputService=i,this.instantiationService=n,this.registry=v.Registry.as(p.Extensions.Quickaccess),this.mapProviderToDescriptor=new Map,this.lastAcceptedPickerValues=new Map,this.visibleQuickAccess=void 0}show(i=\"\",n){this.doShowOrPick(i,!1,n)}doShowOrPick(i,n,t){var r;const[u,f]=this.getOrInstantiateProvider(i),c=this.visibleQuickAccess,d=c?.descriptor;if(c&&f&&d===f){i!==f.prefix&&!t?.preserveValue&&(c.picker.value=i),this.adjustValueSelection(c.picker,f,t);return}if(f&&!t?.preserveValue){let h;if(c&&d&&d!==f){const m=c.value.substr(d.prefix.length);m&&(h=`${f.prefix}${m}`)}if(!h){const m=u?.defaultFilterValue;m===p.DefaultQuickAccessFilterValue.LAST?h=this.lastAcceptedPickerValues.get(f):typeof m==\"string\"&&(h=`${f.prefix}${m}`)}typeof h==\"string\"&&(i=h)}const s=new E.DisposableStore,l=s.add(this.quickInputService.createQuickPick());l.value=i,this.adjustValueSelection(l,f,t),l.placeholder=f?.placeholder,l.quickNavigate=t?.quickNavigateConfiguration,l.hideInput=!!l.quickNavigate&&!c,(typeof t?.itemActivation==\"number\"||t?.quickNavigateConfiguration)&&(l.itemActivation=(r=t?.itemActivation)!==null&&r!==void 0?r:_.ItemActivation.SECOND),l.contextKey=f?.contextKey,l.filterValue=h=>h.substring(f?f.prefix.length:0);let o;n&&(o=new L.DeferredPromise,s.add(y.Event.once(l.onWillAccept)(h=>{h.veto(),l.hide()}))),s.add(this.registerPickerListeners(l,u,f,i,t?.providerOptions));const g=s.add(new k.CancellationTokenSource);if(u&&s.add(u.provide(l,g.token,t?.providerOptions)),y.Event.once(l.onDidHide)(()=>{l.selectedItems.length===0&&g.cancel(),s.dispose(),o?.complete(l.selectedItems.slice(0))}),l.show(),n)return o?.p}adjustValueSelection(i,n,t){var r;let u;t?.preserveValue?u=[i.value.length,i.value.length]:u=[(r=n?.prefix.length)!==null&&r!==void 0?r:0,i.value.length],i.valueSelection=u}registerPickerListeners(i,n,t,r,u){const f=new E.DisposableStore,c=this.visibleQuickAccess={picker:i,descriptor:t,value:r};return f.add((0,E.toDisposable)(()=>{c===this.visibleQuickAccess&&(this.visibleQuickAccess=void 0)})),f.add(i.onDidChangeValue(d=>{const[s]=this.getOrInstantiateProvider(d);s!==n?this.show(d,{preserveValue:!0,providerOptions:u}):c.value=d})),t&&f.add(i.onDidAccept(()=>{this.lastAcceptedPickerValues.set(t,i.value)})),f}getOrInstantiateProvider(i){const n=this.registry.getQuickAccessProvider(i);if(!n)return[void 0,void 0];let t=this.mapProviderToDescriptor.get(n);return t||(t=this.instantiationService.createInstance(n.ctor),this.mapProviderToDescriptor.set(n,t)),[t,n]}};e.QuickAccessController=b,e.QuickAccessController=b=ke([ge(0,_.IQuickInputService),ge(1,S.IInstantiationService)],b)}),define(se[804],oe([1,0,26,28,100,490]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SeverityIcon=void 0;var E;(function(S){function p(_){switch(_){case y.default.Ignore:return\"severity-ignore \"+k.ThemeIcon.asClassName(L.Codicon.info);case y.default.Info:return k.ThemeIcon.asClassName(L.Codicon.info);case y.default.Warning:return k.ThemeIcon.asClassName(L.Codicon.warning);case y.default.Error:return k.ThemeIcon.asClassName(L.Codicon.error);default:return\"\"}}S.className=p})(E||(e.SeverityIcon=E={}))}),define(se[92],oe([1,0,6,2,20,604,8]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InMemoryStorageService=e.AbstractStorageService=e.loadKeyTargets=e.WillSaveStateReason=e.IStorageService=e.TARGET_KEY=void 0,e.TARGET_KEY=\"__$__targetStorageMarker\",e.IStorageService=(0,S.createDecorator)(\"storageService\");var p;(function(a){a[a.NONE=0]=\"NONE\",a[a.SHUTDOWN=1]=\"SHUTDOWN\"})(p||(e.WillSaveStateReason=p={}));function _(a){const i=a.get(e.TARGET_KEY);if(i)try{return JSON.parse(i)}catch{}return Object.create(null)}e.loadKeyTargets=_;class v extends k.Disposable{constructor(i={flushInterval:v.DEFAULT_FLUSH_INTERVAL}){super(),this.options=i,this._onDidChangeValue=this._register(new L.PauseableEmitter),this._onDidChangeTarget=this._register(new L.PauseableEmitter),this._onWillSaveState=this._register(new L.Emitter),this.onWillSaveState=this._onWillSaveState.event,this._workspaceKeyTargets=void 0,this._profileKeyTargets=void 0,this._applicationKeyTargets=void 0}onDidChangeValue(i,n,t){return L.Event.filter(this._onDidChangeValue.event,r=>r.scope===i&&(n===void 0||r.key===n),t)}emitDidChangeValue(i,n){const{key:t,external:r}=n;if(t===e.TARGET_KEY){switch(i){case-1:this._applicationKeyTargets=void 0;break;case 0:this._profileKeyTargets=void 0;break;case 1:this._workspaceKeyTargets=void 0;break}this._onDidChangeTarget.fire({scope:i})}else this._onDidChangeValue.fire({scope:i,key:t,target:this.getKeyTargets(i)[t],external:r})}get(i,n,t){var r;return(r=this.getStorage(n))===null||r===void 0?void 0:r.get(i,t)}getBoolean(i,n,t){var r;return(r=this.getStorage(n))===null||r===void 0?void 0:r.getBoolean(i,t)}getNumber(i,n,t){var r;return(r=this.getStorage(n))===null||r===void 0?void 0:r.getNumber(i,t)}store(i,n,t,r,u=!1){if((0,y.isUndefinedOrNull)(n)){this.remove(i,t,u);return}this.withPausedEmitters(()=>{var f;this.updateKeyTarget(i,t,r),(f=this.getStorage(t))===null||f===void 0||f.set(i,n,u)})}remove(i,n,t=!1){this.withPausedEmitters(()=>{var r;this.updateKeyTarget(i,n,void 0),(r=this.getStorage(n))===null||r===void 0||r.delete(i,t)})}withPausedEmitters(i){this._onDidChangeValue.pause(),this._onDidChangeTarget.pause();try{i()}finally{this._onDidChangeValue.resume(),this._onDidChangeTarget.resume()}}updateKeyTarget(i,n,t,r=!1){var u,f;const c=this.getKeyTargets(n);typeof t==\"number\"?c[i]!==t&&(c[i]=t,(u=this.getStorage(n))===null||u===void 0||u.set(e.TARGET_KEY,JSON.stringify(c),r)):typeof c[i]==\"number\"&&(delete c[i],(f=this.getStorage(n))===null||f===void 0||f.set(e.TARGET_KEY,JSON.stringify(c),r))}get workspaceKeyTargets(){return this._workspaceKeyTargets||(this._workspaceKeyTargets=this.loadKeyTargets(1)),this._workspaceKeyTargets}get profileKeyTargets(){return this._profileKeyTargets||(this._profileKeyTargets=this.loadKeyTargets(0)),this._profileKeyTargets}get applicationKeyTargets(){return this._applicationKeyTargets||(this._applicationKeyTargets=this.loadKeyTargets(-1)),this._applicationKeyTargets}getKeyTargets(i){switch(i){case-1:return this.applicationKeyTargets;case 0:return this.profileKeyTargets;default:return this.workspaceKeyTargets}}loadKeyTargets(i){const n=this.getStorage(i);return n?_(n):Object.create(null)}}e.AbstractStorageService=v,v.DEFAULT_FLUSH_INTERVAL=60*1e3;class b extends v{constructor(){super(),this.applicationStorage=this._register(new E.Storage(new E.InMemoryStorageDatabase,{hint:E.StorageHint.STORAGE_IN_MEMORY})),this.profileStorage=this._register(new E.Storage(new E.InMemoryStorageDatabase,{hint:E.StorageHint.STORAGE_IN_MEMORY})),this.workspaceStorage=this._register(new E.Storage(new E.InMemoryStorageDatabase,{hint:E.StorageHint.STORAGE_IN_MEMORY})),this._register(this.workspaceStorage.onDidChangeStorage(i=>this.emitDidChangeValue(1,i))),this._register(this.profileStorage.onDidChangeStorage(i=>this.emitDidChangeValue(0,i))),this._register(this.applicationStorage.onDidChangeStorage(i=>this.emitDidChangeValue(-1,i)))}getStorage(i){switch(i){case-1:return this.applicationStorage;case 0:return this.profileStorage;default:return this.workspaceStorage}}}e.InMemoryStorageService=b}),define(se[805],oe([1,0,6,53,5,343,45,8,92,44,7]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CodeLensCache=e.ICodeLensCache=void 0,e.ICodeLensCache=(0,p.createDecorator)(\"ICodeLensCache\");class a{constructor(t,r){this.lineCount=t,this.data=r}}let i=class{constructor(t){this._fakeProvider=new class{provideCodeLenses(){throw new Error(\"not supported\")}},this._cache=new k.LRUCache(20,.75);const r=\"codelens/cache\";(0,b.runWhenWindowIdle)(v.mainWindow,()=>t.remove(r,1));const u=\"codelens/cache2\",f=t.get(u,1,\"{}\");this._deserialize(f),L.Event.once(t.onWillSaveState)(c=>{c.reason===_.WillSaveStateReason.SHUTDOWN&&t.store(u,this._serialize(),1,1)})}put(t,r){const u=r.lenses.map(d=>{var s;return{range:d.symbol.range,command:d.symbol.command&&{id:\"\",title:(s=d.symbol.command)===null||s===void 0?void 0:s.title}}}),f=new E.CodeLensModel;f.add({lenses:u,dispose:()=>{}},this._fakeProvider);const c=new a(t.getLineCount(),f);this._cache.set(t.uri.toString(),c)}get(t){const r=this._cache.get(t.uri.toString());return r&&r.lineCount===t.getLineCount()?r.data:void 0}delete(t){this._cache.delete(t.uri.toString())}_serialize(){const t=Object.create(null);for(const[r,u]of this._cache){const f=new Set;for(const c of u.data.lenses)f.add(c.symbol.range.startLineNumber);t[r]={lineCount:u.lineCount,lines:[...f.values()]}}return JSON.stringify(t)}_deserialize(t){try{const r=JSON.parse(t);for(const u in r){const f=r[u],c=[];for(const s of f.lines)c.push({range:new y.Range(s,1,s,11)});const d=new E.CodeLensModel;d.add({lenses:c,dispose(){}},this._fakeProvider),this._cache.set(u,new a(f.lineCount,d))}}catch{}}};e.CodeLensCache=i,e.CodeLensCache=i=ke([ge(0,_.IStorageService)],i),(0,S.registerSingleton)(e.ICodeLensCache,i,1)}),define(se[358],oe([1,0,14,2,53,199,31,27,45,8,92]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";var a;Object.defineProperty(e,\"__esModule\",{value:!0}),e.ISuggestMemoryService=e.SuggestMemoryService=e.PrefixMemory=e.LRUMemory=e.NoMemory=e.Memory=void 0;class i{constructor(c){this.name=c}select(c,d,s){if(s.length===0)return 0;const l=s[0].score[0];for(let o=0;o<s.length;o++){const{score:g,completion:h}=s[o];if(g[0]!==l)break;if(h.preselect)return o}return 0}}e.Memory=i;class n extends i{constructor(){super(\"first\")}memorize(c,d,s){}toJSON(){}fromJSON(){}}e.NoMemory=n;class t extends i{constructor(){super(\"recentlyUsed\"),this._cache=new y.LRUCache(300,.66),this._seq=0}memorize(c,d,s){const l=`${c.getLanguageId()}/${s.textLabel}`;this._cache.set(l,{touch:this._seq++,type:s.completion.kind,insertText:s.completion.insertText})}select(c,d,s){if(s.length===0)return 0;const l=c.getLineContent(d.lineNumber).substr(d.column-10,d.column-1);if(/\\s$/.test(l))return super.select(c,d,s);const o=s[0].score[0];let g=-1,h=-1,m=-1;for(let C=0;C<s.length&&s[C].score[0]===o;C++){const w=`${c.getLanguageId()}/${s[C].textLabel}`,D=this._cache.peek(w);if(D&&D.touch>m&&D.type===s[C].completion.kind&&D.insertText===s[C].completion.insertText&&(m=D.touch,h=C),s[C].completion.preselect&&g===-1)return g=C}return h!==-1?h:g!==-1?g:0}toJSON(){return this._cache.toJSON()}fromJSON(c){this._cache.clear();const d=0;for(const[s,l]of c)l.touch=d,l.type=typeof l.type==\"number\"?l.type:S.CompletionItemKinds.fromString(l.type),this._cache.set(s,l);this._seq=this._cache.size}}e.LRUMemory=t;class r extends i{constructor(){super(\"recentlyUsedByPrefix\"),this._trie=E.TernarySearchTree.forStrings(),this._seq=0}memorize(c,d,s){const{word:l}=c.getWordUntilPosition(d),o=`${c.getLanguageId()}/${l}`;this._trie.set(o,{type:s.completion.kind,insertText:s.completion.insertText,touch:this._seq++})}select(c,d,s){const{word:l}=c.getWordUntilPosition(d);if(!l)return super.select(c,d,s);const o=`${c.getLanguageId()}/${l}`;let g=this._trie.get(o);if(g||(g=this._trie.findSubstr(o)),g)for(let h=0;h<s.length;h++){const{kind:m,insertText:C}=s[h].completion;if(m===g.type&&C===g.insertText)return h}return super.select(c,d,s)}toJSON(){const c=[];return this._trie.forEach((d,s)=>c.push([s,d])),c.sort((d,s)=>-(d[1].touch-s[1].touch)).forEach((d,s)=>d[1].touch=s),c.slice(0,200)}fromJSON(c){if(this._trie.clear(),c.length>0){this._seq=c[0][1].touch+1;for(const[d,s]of c)s.type=typeof s.type==\"number\"?s.type:S.CompletionItemKinds.fromString(s.type),this._trie.set(d,s)}}}e.PrefixMemory=r;let u=a=class{constructor(c,d){this._storageService=c,this._configService=d,this._disposables=new k.DisposableStore,this._persistSoon=new L.RunOnceScheduler(()=>this._saveState(),500),this._disposables.add(c.onWillSaveState(s=>{s.reason===b.WillSaveStateReason.SHUTDOWN&&this._saveState()}))}dispose(){this._disposables.dispose(),this._persistSoon.dispose()}memorize(c,d,s){this._withStrategy(c,d).memorize(c,d,s),this._persistSoon.schedule()}select(c,d,s){return this._withStrategy(c,d).select(c,d,s)}_withStrategy(c,d){var s;const l=this._configService.getValue(\"editor.suggestSelection\",{overrideIdentifier:c.getLanguageIdAtPosition(d.lineNumber,d.column),resource:c.uri});if(((s=this._strategy)===null||s===void 0?void 0:s.name)!==l){this._saveState();const o=a._strategyCtors.get(l)||n;this._strategy=new o;try{const h=this._configService.getValue(\"editor.suggest.shareSuggestSelections\")?0:1,m=this._storageService.get(`${a._storagePrefix}/${l}`,h);m&&this._strategy.fromJSON(JSON.parse(m))}catch{}}return this._strategy}_saveState(){if(this._strategy){const d=this._configService.getValue(\"editor.suggest.shareSuggestSelections\")?0:1,s=JSON.stringify(this._strategy);this._storageService.store(`${a._storagePrefix}/${this._strategy.name}`,s,d,1)}}};e.SuggestMemoryService=u,u._strategyCtors=new Map([[\"recentlyUsedByPrefix\",r],[\"recentlyUsed\",t],[\"first\",n]]),u._storagePrefix=\"suggest/memories\",e.SuggestMemoryService=u=a=ke([ge(0,b.IStorageService),ge(1,p.IConfigurationService)],u),e.ISuggestMemoryService=(0,v.createDecorator)(\"ISuggestMemories\"),(0,_.registerSingleton)(e.ISuggestMemoryService,u,1)}),define(se[806],oe([1,0,14,6,2,30,25,15,42,92,13,735]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";var i,n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.MenuService=void 0;let t=class{constructor(s,l){this._commandService=s,this._hiddenStates=new r(l)}createMenu(s,l,o){return new f(s,this._hiddenStates,{emitEventsForSubmenuChanges:!1,eventDebounceDelay:50,...o},this._commandService,l)}resetHiddenStates(s){this._hiddenStates.reset(s)}};e.MenuService=t,e.MenuService=t=ke([ge(0,S.ICommandService),ge(1,v.IStorageService)],t);let r=i=class{constructor(s){this._storageService=s,this._disposables=new y.DisposableStore,this._onDidChange=new k.Emitter,this.onDidChange=this._onDidChange.event,this._ignoreChangeEvent=!1,this._hiddenByDefaultCache=new Map;try{const l=s.get(i._key,0,\"{}\");this._data=JSON.parse(l)}catch{this._data=Object.create(null)}this._disposables.add(s.onDidChangeValue(0,i._key,this._disposables)(()=>{if(!this._ignoreChangeEvent)try{const l=s.get(i._key,0,\"{}\");this._data=JSON.parse(l)}catch(l){console.log(\"FAILED to read storage after UPDATE\",l)}this._onDidChange.fire()}))}dispose(){this._onDidChange.dispose(),this._disposables.dispose()}_isHiddenByDefault(s,l){var o;return(o=this._hiddenByDefaultCache.get(`${s.id}/${l}`))!==null&&o!==void 0?o:!1}setDefaultState(s,l,o){this._hiddenByDefaultCache.set(`${s.id}/${l}`,o)}isHidden(s,l){var o,g;const h=this._isHiddenByDefault(s,l),m=(g=(o=this._data[s.id])===null||o===void 0?void 0:o.includes(l))!==null&&g!==void 0?g:!1;return h?!m:m}updateHidden(s,l,o){this._isHiddenByDefault(s,l)&&(o=!o);const h=this._data[s.id];if(o)h?h.indexOf(l)<0&&h.push(l):this._data[s.id]=[l];else if(h){const m=h.indexOf(l);m>=0&&(0,b.removeFastWithoutKeepingOrder)(h,m),h.length===0&&delete this._data[s.id]}this._persist()}reset(s){if(s===void 0)this._data=Object.create(null),this._persist();else{for(const{id:l}of s)this._data[l]&&delete this._data[l];this._persist()}}_persist(){try{this._ignoreChangeEvent=!0;const s=JSON.stringify(this._data);this._storageService.store(i._key,s,0,0)}finally{this._ignoreChangeEvent=!1}}};r._key=\"menu.hiddenCommands\",r=i=ke([ge(0,v.IStorageService)],r);let u=n=class{constructor(s,l,o,g,h){this._id=s,this._hiddenStates=l,this._collectContextKeysForSubmenus=o,this._commandService=g,this._contextKeyService=h,this._menuGroups=[],this._structureContextKeys=new Set,this._preconditionContextKeys=new Set,this._toggledContextKeys=new Set,this.refresh()}get structureContextKeys(){return this._structureContextKeys}get preconditionContextKeys(){return this._preconditionContextKeys}get toggledContextKeys(){return this._toggledContextKeys}refresh(){this._menuGroups.length=0,this._structureContextKeys.clear(),this._preconditionContextKeys.clear(),this._toggledContextKeys.clear();const s=E.MenuRegistry.getMenuItems(this._id);let l;s.sort(n._compareMenuItems);for(const o of s){const g=o.group||\"\";(!l||l[0]!==g)&&(l=[g,[]],this._menuGroups.push(l)),l[1].push(o),this._collectContextKeys(o)}}_collectContextKeys(s){if(n._fillInKbExprKeys(s.when,this._structureContextKeys),(0,E.isIMenuItem)(s)){if(s.command.precondition&&n._fillInKbExprKeys(s.command.precondition,this._preconditionContextKeys),s.command.toggled){const l=s.command.toggled.condition||s.command.toggled;n._fillInKbExprKeys(l,this._toggledContextKeys)}}else this._collectContextKeysForSubmenus&&E.MenuRegistry.getMenuItems(s.submenu).forEach(this._collectContextKeys,this)}createActionGroups(s){const l=[];for(const o of this._menuGroups){const[g,h]=o,m=[];for(const C of h)if(this._contextKeyService.contextMatchesRules(C.when)){const w=(0,E.isIMenuItem)(C);w&&this._hiddenStates.setDefaultState(this._id,C.command.id,!!C.isHiddenByDefault);const D=c(this._id,w?C.command:C,this._hiddenStates);if(w)m.push(new E.MenuItemAction(C.command,C.alt,s,D,this._contextKeyService,this._commandService));else{const I=new n(C.submenu,this._hiddenStates,this._collectContextKeysForSubmenus,this._commandService,this._contextKeyService).createActionGroups(s),T=_.Separator.join(...I.map(A=>A[1]));T.length>0&&m.push(new E.SubmenuItemAction(C,D,T))}}m.length>0&&l.push([g,m])}return l}static _fillInKbExprKeys(s,l){if(s)for(const o of s.keys())l.add(o)}static _compareMenuItems(s,l){const o=s.group,g=l.group;if(o!==g){if(o){if(!g)return-1}else return 1;if(o===\"navigation\")return-1;if(g===\"navigation\")return 1;const C=o.localeCompare(g);if(C!==0)return C}const h=s.order||0,m=l.order||0;return h<m?-1:h>m?1:n._compareTitles((0,E.isIMenuItem)(s)?s.command.title:s.title,(0,E.isIMenuItem)(l)?l.command.title:l.title)}static _compareTitles(s,l){const o=typeof s==\"string\"?s:s.original,g=typeof l==\"string\"?l:l.original;return o.localeCompare(g)}};u=n=ke([ge(3,S.ICommandService),ge(4,p.IContextKeyService)],u);let f=class{constructor(s,l,o,g,h){this._disposables=new y.DisposableStore,this._menuInfo=new u(s,l,o.emitEventsForSubmenuChanges,g,h);const m=new L.RunOnceScheduler(()=>{this._menuInfo.refresh(),this._onDidChange.fire({menu:this,isStructuralChange:!0,isEnablementChange:!0,isToggleChange:!0})},o.eventDebounceDelay);this._disposables.add(m),this._disposables.add(E.MenuRegistry.onDidChangeMenu(I=>{I.has(s)&&m.schedule()}));const C=this._disposables.add(new y.DisposableStore),w=I=>{let T=!1,A=!1,P=!1;for(const N of I)if(T=T||N.isStructuralChange,A=A||N.isEnablementChange,P=P||N.isToggleChange,T&&A&&P)break;return{menu:this,isStructuralChange:T,isEnablementChange:A,isToggleChange:P}},D=()=>{C.add(h.onDidChangeContext(I=>{const T=I.affectsSome(this._menuInfo.structureContextKeys),A=I.affectsSome(this._menuInfo.preconditionContextKeys),P=I.affectsSome(this._menuInfo.toggledContextKeys);(T||A||P)&&this._onDidChange.fire({menu:this,isStructuralChange:T,isEnablementChange:A,isToggleChange:P})})),C.add(l.onDidChange(I=>{this._onDidChange.fire({menu:this,isStructuralChange:!0,isEnablementChange:!1,isToggleChange:!1})}))};this._onDidChange=new k.DebounceEmitter({onWillAddFirstListener:D,onDidRemoveLastListener:C.clear.bind(C),delay:o.eventDebounceDelay,merge:w}),this.onDidChange=this._onDidChange.event}getActions(s){return this._menuInfo.createActionGroups(s)}dispose(){this._disposables.dispose(),this._onDidChange.dispose()}};f=ke([ge(3,S.ICommandService),ge(4,p.IContextKeyService)],f);function c(d,s,l){const o=(0,E.isISubmenuItem)(s)?s.submenu.id:s.id,g=typeof s.title==\"string\"?s.title:s.title.value,h=(0,_.toAction)({id:`hide/${d.id}/${o}`,label:(0,a.localize)(0,null,g),run(){l.updateHidden(d,o,!0)}}),m=(0,_.toAction)({id:`toggle/${d.id}/${o}`,label:g,get checked(){return!l.isHidden(d,o)},run(){l.updateHidden(d,o,!!this.checked)}});return{hide:h,toggle:m,get isHidden(){return!m.checked}}}}),define(se[81],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ITelemetryService=void 0,e.ITelemetryService=(0,L.createDecorator)(\"telemetryService\")}),define(se[16],oe([1,0,620,22,33,10,51,68,30,25,15,8,124,37,81,20,64,7]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectAllCommand=e.RedoCommand=e.UndoCommand=e.EditorExtensionsRegistry=e.registerEditorContribution=e.registerInstantiatedEditorAction=e.registerMultiEditorAction=e.registerEditorAction=e.registerEditorCommand=e.registerModelAndPositionCommand=e.EditorAction2=e.MultiEditorAction=e.EditorAction=e.EditorCommand=e.ProxyCommand=e.MultiCommand=e.Command=void 0;class c{constructor(x){this.id=x.id,this.precondition=x.precondition,this._kbOpts=x.kbOpts,this._menuOpts=x.menuOpts,this.metadata=x.metadata}register(){if(Array.isArray(this._menuOpts)?this._menuOpts.forEach(this._registerMenuItem,this):this._menuOpts&&this._registerMenuItem(this._menuOpts),this._kbOpts){const x=Array.isArray(this._kbOpts)?this._kbOpts:[this._kbOpts];for(const O of x){let B=O.kbExpr;this.precondition&&(B?B=b.ContextKeyExpr.and(B,this.precondition):B=this.precondition);const W={id:this.id,weight:O.weight,args:O.args,when:B,primary:O.primary,secondary:O.secondary,win:O.win,linux:O.linux,mac:O.mac};i.KeybindingsRegistry.registerKeybindingRule(W)}}v.CommandsRegistry.registerCommand({id:this.id,handler:(x,O)=>this.runCommand(x,O),metadata:this.metadata})}_registerMenuItem(x){_.MenuRegistry.appendMenuItem(x.menuId,{group:x.group,command:{id:this.id,title:x.title,icon:x.icon,precondition:this.precondition},when:x.when,order:x.order})}}e.Command=c;class d extends c{constructor(){super(...arguments),this._implementations=[]}addImplementation(x,O,B,W){return this._implementations.push({priority:x,name:O,implementation:B,when:W}),this._implementations.sort((V,K)=>K.priority-V.priority),{dispose:()=>{for(let V=0;V<this._implementations.length;V++)if(this._implementations[V].implementation===B){this._implementations.splice(V,1);return}}}}runCommand(x,O){const B=x.get(u.ILogService),W=x.get(b.IContextKeyService);B.trace(`Executing Command '${this.id}' which has ${this._implementations.length} bound.`);for(const V of this._implementations){if(V.when){const F=W.getContext((0,f.getActiveElement)());if(!V.when.evaluate(F))continue}const K=V.implementation(x,O);if(K)return B.trace(`Command '${this.id}' was handled by '${V.name}'.`),typeof K==\"boolean\"?void 0:K}B.trace(`The Command '${this.id}' was not handled by any implementation.`)}}e.MultiCommand=d;class s extends c{constructor(x,O){super(O),this.command=x}runCommand(x,O){return this.command.runCommand(x,O)}}e.ProxyCommand=s;class l extends c{static bindToContribution(x){return class extends l{constructor(B){super(B),this._callback=B.handler}runEditorCommand(B,W,V){const K=x(W);K&&this._callback(K,V)}}}static runEditorCommand(x,O,B,W){const V=x.get(y.ICodeEditorService),K=V.getFocusedCodeEditor()||V.getActiveCodeEditor();if(K)return K.invokeWithinContext(F=>{if(F.get(b.IContextKeyService).contextMatchesRules(B??void 0))return W(F,K,O)})}runCommand(x,O){return l.runEditorCommand(x,O,this.precondition,(B,W,V)=>this.runEditorCommand(B,W,V))}}e.EditorCommand=l;class o extends l{static convertOptions(x){let O;Array.isArray(x.menuOpts)?O=x.menuOpts:x.menuOpts?O=[x.menuOpts]:O=[];function B(W){return W.menuId||(W.menuId=_.MenuId.EditorContext),W.title||(W.title=x.label),W.when=b.ContextKeyExpr.and(x.precondition,W.when),W}return Array.isArray(x.contextMenuOpts)?O.push(...x.contextMenuOpts.map(B)):x.contextMenuOpts&&O.push(B(x.contextMenuOpts)),x.menuOpts=O,x}constructor(x){super(o.convertOptions(x)),this.label=x.label,this.alias=x.alias}runEditorCommand(x,O,B){return this.reportTelemetry(x,O),this.run(x,O,B||{})}reportTelemetry(x,O){x.get(t.ITelemetryService).publicLog2(\"editorActionInvoked\",{name:this.label,id:this.id})}}e.EditorAction=o;class g extends o{constructor(){super(...arguments),this._implementations=[]}addImplementation(x,O){return this._implementations.push([x,O]),this._implementations.sort((B,W)=>W[0]-B[0]),{dispose:()=>{for(let B=0;B<this._implementations.length;B++)if(this._implementations[B][1]===O){this._implementations.splice(B,1);return}}}}run(x,O,B){for(const W of this._implementations){const V=W[1](x,O,B);if(V)return typeof V==\"boolean\"?void 0:V}}}e.MultiEditorAction=g;class h extends _.Action2{run(x,...O){const B=x.get(y.ICodeEditorService),W=B.getFocusedCodeEditor()||B.getActiveCodeEditor();if(W)return W.invokeWithinContext(V=>{var K,F;const q=V.get(b.IContextKeyService),ie=V.get(u.ILogService);if(!q.contextMatchesRules((K=this.desc.precondition)!==null&&K!==void 0?K:void 0)){ie.debug(\"[EditorAction2] NOT running command because its precondition is FALSE\",this.desc.id,(F=this.desc.precondition)===null||F===void 0?void 0:F.serialize());return}return this.runEditorCommand(V,W,...O)})}}e.EditorAction2=h;function m(R,x){v.CommandsRegistry.registerCommand(R,function(O,...B){const W=O.get(a.IInstantiationService),[V,K]=B;(0,r.assertType)(k.URI.isUri(V)),(0,r.assertType)(E.Position.isIPosition(K));const F=O.get(S.IModelService).getModel(V);if(F){const q=E.Position.lift(K);return W.invokeFunction(x,F,q,...B.slice(2))}return O.get(p.ITextModelService).createModelReference(V).then(q=>new Promise((ie,ae)=>{try{const ne=W.invokeFunction(x,q.object.textEditorModel,E.Position.lift(K),B.slice(2));ie(ne)}catch(ne){ae(ne)}}).finally(()=>{q.dispose()}))})}e.registerModelAndPositionCommand=m;function C(R){return N.INSTANCE.registerEditorCommand(R),R}e.registerEditorCommand=C;function w(R){const x=new R;return N.INSTANCE.registerEditorAction(x),x}e.registerEditorAction=w;function D(R){return N.INSTANCE.registerEditorAction(R),R}e.registerMultiEditorAction=D;function I(R){N.INSTANCE.registerEditorAction(R)}e.registerInstantiatedEditorAction=I;function T(R,x,O){N.INSTANCE.registerEditorContribution(R,x,O)}e.registerEditorContribution=T;var A;(function(R){function x(K){return N.INSTANCE.getEditorCommand(K)}R.getEditorCommand=x;function O(){return N.INSTANCE.getEditorActions()}R.getEditorActions=O;function B(){return N.INSTANCE.getEditorContributions()}R.getEditorContributions=B;function W(K){return N.INSTANCE.getEditorContributions().filter(F=>K.indexOf(F.id)>=0)}R.getSomeEditorContributions=W;function V(){return N.INSTANCE.getDiffEditorContributions()}R.getDiffEditorContributions=V})(A||(e.EditorExtensionsRegistry=A={}));const P={EditorCommonContributions:\"editor.contributions\"};class N{constructor(){this.editorContributions=[],this.diffEditorContributions=[],this.editorActions=[],this.editorCommands=Object.create(null)}registerEditorContribution(x,O,B){this.editorContributions.push({id:x,ctor:O,instantiation:B})}getEditorContributions(){return this.editorContributions.slice(0)}getDiffEditorContributions(){return this.diffEditorContributions.slice(0)}registerEditorAction(x){x.register(),this.editorActions.push(x)}getEditorActions(){return this.editorActions}registerEditorCommand(x){x.register(),this.editorCommands[x.id]=x}getEditorCommand(x){return this.editorCommands[x]||null}}N.INSTANCE=new N,n.Registry.add(P.EditorCommonContributions,N.INSTANCE);function M(R){return R.register(),R}e.UndoCommand=M(new d({id:\"undo\",precondition:void 0,kbOpts:{weight:0,primary:2104},menuOpts:[{menuId:_.MenuId.MenubarEditMenu,group:\"1_do\",title:L.localize(0,null),order:1},{menuId:_.MenuId.CommandPalette,group:\"\",title:L.localize(1,null),order:1}]})),M(new s(e.UndoCommand,{id:\"default:undo\",precondition:void 0})),e.RedoCommand=M(new d({id:\"redo\",precondition:void 0,kbOpts:{weight:0,primary:2103,secondary:[3128],mac:{primary:3128}},menuOpts:[{menuId:_.MenuId.MenubarEditMenu,group:\"1_do\",title:L.localize(2,null),order:2},{menuId:_.MenuId.CommandPalette,group:\"\",title:L.localize(3,null),order:1}]})),M(new s(e.RedoCommand,{id:\"default:redo\",precondition:void 0})),e.SelectAllCommand=M(new d({id:\"editor.action.selectAll\",precondition:void 0,kbOpts:{weight:0,kbExpr:null,primary:2079},menuOpts:[{menuId:_.MenuId.MenubarSelectionMenu,group:\"1_basic\",title:L.localize(4,null),order:1},{menuId:_.MenuId.CommandPalette,group:\"\",title:L.localize(5,null),order:1}]}))}),define(se[191],oe([1,0,619,54,20,48,16,33,511,75,207,208,251,10,5,21,15,124,7]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CoreEditingCommands=e.CoreNavigationCommands=e.RevealLine_=e.EditorScroll_=e.CoreEditorCommand=void 0;const d=0;class s extends S.EditorCommand{runEditorCommand(P,N,M){const R=N._getViewModel();R&&this.runCoreEditorCommand(R,M||{})}}e.CoreEditorCommand=s;var l;(function(A){const P=function(M){if(!y.isObject(M))return!1;const R=M;return!(!y.isString(R.to)||!y.isUndefined(R.by)&&!y.isString(R.by)||!y.isUndefined(R.value)&&!y.isNumber(R.value)||!y.isUndefined(R.revealCursor)&&!y.isBoolean(R.revealCursor))};A.metadata={description:\"Scroll editor in the given direction\",args:[{name:\"Editor scroll argument object\",description:\"Property-value pairs that can be passed through this argument:\\n\t\t\t\t\t* 'to': A mandatory direction value.\\n\t\t\t\t\t\t```\\n\t\t\t\t\t\t'up', 'down'\\n\t\t\t\t\t\t```\\n\t\t\t\t\t* 'by': Unit to move. Default is computed based on 'to' value.\\n\t\t\t\t\t\t```\\n\t\t\t\t\t\t'line', 'wrappedLine', 'page', 'halfPage', 'editor'\\n\t\t\t\t\t\t```\\n\t\t\t\t\t* 'value': Number of units to move. Default is '1'.\\n\t\t\t\t\t* 'revealCursor': If 'true' reveals the cursor if it is outside view port.\\n\t\t\t\t\",constraint:P,schema:{type:\"object\",required:[\"to\"],properties:{to:{type:\"string\",enum:[\"up\",\"down\"]},by:{type:\"string\",enum:[\"line\",\"wrappedLine\",\"page\",\"halfPage\",\"editor\"]},value:{type:\"number\",default:1},revealCursor:{type:\"boolean\"}}}}]},A.RawDirection={Up:\"up\",Right:\"right\",Down:\"down\",Left:\"left\"},A.RawUnit={Line:\"line\",WrappedLine:\"wrappedLine\",Page:\"page\",HalfPage:\"halfPage\",Editor:\"editor\",Column:\"column\"};function N(M){let R;switch(M.to){case A.RawDirection.Up:R=1;break;case A.RawDirection.Right:R=2;break;case A.RawDirection.Down:R=3;break;case A.RawDirection.Left:R=4;break;default:return null}let x;switch(M.by){case A.RawUnit.Line:x=1;break;case A.RawUnit.WrappedLine:x=2;break;case A.RawUnit.Page:x=3;break;case A.RawUnit.HalfPage:x=4;break;case A.RawUnit.Editor:x=5;break;case A.RawUnit.Column:x=6;break;default:x=2}const O=Math.floor(M.value||1),B=!!M.revealCursor;return{direction:R,unit:x,value:O,revealCursor:B,select:!!M.select}}A.parse=N})(l||(e.EditorScroll_=l={}));var o;(function(A){const P=function(N){if(!y.isObject(N))return!1;const M=N;return!(!y.isNumber(M.lineNumber)&&!y.isString(M.lineNumber)||!y.isUndefined(M.at)&&!y.isString(M.at))};A.metadata={description:\"Reveal the given line at the given logical position\",args:[{name:\"Reveal line argument object\",description:\"Property-value pairs that can be passed through this argument:\\n\t\t\t\t\t* 'lineNumber': A mandatory line number value.\\n\t\t\t\t\t* 'at': Logical position at which line has to be revealed.\\n\t\t\t\t\t\t```\\n\t\t\t\t\t\t'top', 'center', 'bottom'\\n\t\t\t\t\t\t```\\n\t\t\t\t\",constraint:P,schema:{type:\"object\",required:[\"lineNumber\"],properties:{lineNumber:{type:[\"number\",\"string\"]},at:{type:\"string\",enum:[\"top\",\"center\",\"bottom\"]}}}}]},A.RawAtArgument={Top:\"top\",Center:\"center\",Bottom:\"bottom\"}})(o||(e.RevealLine_=o={}));class g{constructor(P){P.addImplementation(1e4,\"code-editor\",(N,M)=>{const R=N.get(p.ICodeEditorService).getFocusedCodeEditor();return R&&R.hasTextFocus()?this._runEditorCommand(N,R,M):!1}),P.addImplementation(1e3,\"generic-dom-input-textarea\",(N,M)=>{const R=(0,c.getActiveElement)();return R&&[\"input\",\"textarea\"].indexOf(R.tagName.toLowerCase())>=0?(this.runDOMCommand(R),!0):!1}),P.addImplementation(0,\"generic-dom\",(N,M)=>{const R=N.get(p.ICodeEditorService).getActiveCodeEditor();return R?(R.focus(),this._runEditorCommand(N,R,M)):!1})}_runEditorCommand(P,N,M){const R=this.runEditorCommand(P,N,M);return R||!0}}var h;(function(A){class P extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){if(!re.position)return;Q.model.pushStackElement(),Q.setCursorStates(re.source,3,[a.CursorMoveCommands.moveTo(Q,Q.getPrimaryCursorState(),this._inSelectionMode,re.position,re.viewPosition)])&&re.revealType!==2&&Q.revealPrimaryCursor(re.source,!0,!0)}}A.MoveTo=(0,S.registerEditorCommand)(new P({id:\"_moveTo\",inSelectionMode:!1,precondition:void 0})),A.MoveToSelect=(0,S.registerEditorCommand)(new P({id:\"_moveToSelect\",inSelectionMode:!0,precondition:void 0}));class N extends s{runCoreEditorCommand(Q,re){Q.model.pushStackElement();const de=this._getColumnSelectResult(Q,Q.getPrimaryCursorState(),Q.getCursorColumnSelectData(),re);de!==null&&(Q.setCursorStates(re.source,3,de.viewStates.map(he=>v.CursorState.fromViewState(he))),Q.setCursorColumnSelectData({isReal:!0,fromViewLineNumber:de.fromLineNumber,fromViewVisualColumn:de.fromVisualColumn,toViewLineNumber:de.toLineNumber,toViewVisualColumn:de.toVisualColumn}),de.reversed?Q.revealTopMostCursor(re.source):Q.revealBottomMostCursor(re.source))}}A.ColumnSelect=(0,S.registerEditorCommand)(new class extends N{constructor(){super({id:\"columnSelect\",precondition:void 0})}_getColumnSelectResult(J,Q,re,de){if(typeof de.position>\"u\"||typeof de.viewPosition>\"u\"||typeof de.mouseColumn>\"u\")return null;const he=J.model.validatePosition(de.position),me=J.coordinatesConverter.validateViewPosition(new n.Position(de.viewPosition.lineNumber,de.viewPosition.column),he),X=de.doColumnSelect?re.fromViewLineNumber:me.lineNumber,U=de.doColumnSelect?re.fromViewVisualColumn:de.mouseColumn-1;return _.ColumnSelection.columnSelect(J.cursorConfig,J,X,U,me.lineNumber,de.mouseColumn-1)}}),A.CursorColumnSelectLeft=(0,S.registerEditorCommand)(new class extends N{constructor(){super({id:\"cursorColumnSelectLeft\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3599,linux:{primary:0}}})}_getColumnSelectResult(J,Q,re,de){return _.ColumnSelection.columnSelectLeft(J.cursorConfig,J,re)}}),A.CursorColumnSelectRight=(0,S.registerEditorCommand)(new class extends N{constructor(){super({id:\"cursorColumnSelectRight\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3601,linux:{primary:0}}})}_getColumnSelectResult(J,Q,re,de){return _.ColumnSelection.columnSelectRight(J.cursorConfig,J,re)}});class M extends N{constructor(Q){super(Q),this._isPaged=Q.isPaged}_getColumnSelectResult(Q,re,de,he){return _.ColumnSelection.columnSelectUp(Q.cursorConfig,Q,de,this._isPaged)}}A.CursorColumnSelectUp=(0,S.registerEditorCommand)(new M({isPaged:!1,id:\"cursorColumnSelectUp\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3600,linux:{primary:0}}})),A.CursorColumnSelectPageUp=(0,S.registerEditorCommand)(new M({isPaged:!0,id:\"cursorColumnSelectPageUp\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3595,linux:{primary:0}}}));class R extends N{constructor(Q){super(Q),this._isPaged=Q.isPaged}_getColumnSelectResult(Q,re,de,he){return _.ColumnSelection.columnSelectDown(Q.cursorConfig,Q,de,this._isPaged)}}A.CursorColumnSelectDown=(0,S.registerEditorCommand)(new R({isPaged:!1,id:\"cursorColumnSelectDown\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3602,linux:{primary:0}}})),A.CursorColumnSelectPageDown=(0,S.registerEditorCommand)(new R({isPaged:!0,id:\"cursorColumnSelectPageDown\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3596,linux:{primary:0}}}));class x extends s{constructor(){super({id:\"cursorMove\",precondition:void 0,metadata:a.CursorMove.metadata})}runCoreEditorCommand(Q,re){const de=a.CursorMove.parse(re);de&&this._runCursorMove(Q,re.source,de)}_runCursorMove(Q,re,de){Q.model.pushStackElement(),Q.setCursorStates(re,3,x._move(Q,Q.getCursorStates(),de)),Q.revealPrimaryCursor(re,!0)}static _move(Q,re,de){const he=de.select,me=de.value;switch(de.direction){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:return a.CursorMoveCommands.simpleMove(Q,re,de.direction,he,me,de.unit);case 11:case 13:case 12:case 14:return a.CursorMoveCommands.viewportMove(Q,re,de.direction,he,me);default:return null}}}A.CursorMoveImpl=x,A.CursorMove=(0,S.registerEditorCommand)(new x);class O extends s{constructor(Q){super(Q),this._staticArgs=Q.args}runCoreEditorCommand(Q,re){let de=this._staticArgs;this._staticArgs.value===-1&&(de={direction:this._staticArgs.direction,unit:this._staticArgs.unit,select:this._staticArgs.select,value:re.pageSize||Q.cursorConfig.pageSize}),Q.model.pushStackElement(),Q.setCursorStates(re.source,3,a.CursorMoveCommands.simpleMove(Q,Q.getCursorStates(),de.direction,de.select,de.value,de.unit)),Q.revealPrimaryCursor(re.source,!0)}}A.CursorLeft=(0,S.registerEditorCommand)(new O({args:{direction:0,unit:0,select:!1,value:1},id:\"cursorLeft\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:15,mac:{primary:15,secondary:[288]}}})),A.CursorLeftSelect=(0,S.registerEditorCommand)(new O({args:{direction:0,unit:0,select:!0,value:1},id:\"cursorLeftSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1039}})),A.CursorRight=(0,S.registerEditorCommand)(new O({args:{direction:1,unit:0,select:!1,value:1},id:\"cursorRight\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:17,mac:{primary:17,secondary:[292]}}})),A.CursorRightSelect=(0,S.registerEditorCommand)(new O({args:{direction:1,unit:0,select:!0,value:1},id:\"cursorRightSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1041}})),A.CursorUp=(0,S.registerEditorCommand)(new O({args:{direction:2,unit:2,select:!1,value:1},id:\"cursorUp\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:16,mac:{primary:16,secondary:[302]}}})),A.CursorUpSelect=(0,S.registerEditorCommand)(new O({args:{direction:2,unit:2,select:!0,value:1},id:\"cursorUpSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1040,secondary:[3088],mac:{primary:1040},linux:{primary:1040}}})),A.CursorPageUp=(0,S.registerEditorCommand)(new O({args:{direction:2,unit:2,select:!1,value:-1},id:\"cursorPageUp\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:11}})),A.CursorPageUpSelect=(0,S.registerEditorCommand)(new O({args:{direction:2,unit:2,select:!0,value:-1},id:\"cursorPageUpSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1035}})),A.CursorDown=(0,S.registerEditorCommand)(new O({args:{direction:3,unit:2,select:!1,value:1},id:\"cursorDown\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:18,mac:{primary:18,secondary:[300]}}})),A.CursorDownSelect=(0,S.registerEditorCommand)(new O({args:{direction:3,unit:2,select:!0,value:1},id:\"cursorDownSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1042,secondary:[3090],mac:{primary:1042},linux:{primary:1042}}})),A.CursorPageDown=(0,S.registerEditorCommand)(new O({args:{direction:3,unit:2,select:!1,value:-1},id:\"cursorPageDown\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:12}})),A.CursorPageDownSelect=(0,S.registerEditorCommand)(new O({args:{direction:3,unit:2,select:!0,value:-1},id:\"cursorPageDownSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1036}})),A.CreateCursor=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"createCursor\",precondition:void 0})}runCoreEditorCommand(J,Q){if(!Q.position)return;let re;Q.wholeLine?re=a.CursorMoveCommands.line(J,J.getPrimaryCursorState(),!1,Q.position,Q.viewPosition):re=a.CursorMoveCommands.moveTo(J,J.getPrimaryCursorState(),!1,Q.position,Q.viewPosition);const de=J.getCursorStates();if(de.length>1){const he=re.modelState?re.modelState.position:null,me=re.viewState?re.viewState.position:null;for(let X=0,U=de.length;X<U;X++){const G=de[X];if(!(he&&!G.modelState.selection.containsPosition(he))&&!(me&&!G.viewState.selection.containsPosition(me))){de.splice(X,1),J.model.pushStackElement(),J.setCursorStates(Q.source,3,de);return}}}de.push(re),J.model.pushStackElement(),J.setCursorStates(Q.source,3,de)}}),A.LastCursorMoveToSelect=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"_lastCursorMoveToSelect\",precondition:void 0})}runCoreEditorCommand(J,Q){if(!Q.position)return;const re=J.getLastAddedCursorIndex(),de=J.getCursorStates(),he=de.slice(0);he[re]=a.CursorMoveCommands.moveTo(J,de[re],!0,Q.position,Q.viewPosition),J.model.pushStackElement(),J.setCursorStates(Q.source,3,he)}});class B extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){Q.model.pushStackElement(),Q.setCursorStates(re.source,3,a.CursorMoveCommands.moveToBeginningOfLine(Q,Q.getCursorStates(),this._inSelectionMode)),Q.revealPrimaryCursor(re.source,!0)}}A.CursorHome=(0,S.registerEditorCommand)(new B({inSelectionMode:!1,id:\"cursorHome\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:14,mac:{primary:14,secondary:[2063]}}})),A.CursorHomeSelect=(0,S.registerEditorCommand)(new B({inSelectionMode:!0,id:\"cursorHomeSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1038,mac:{primary:1038,secondary:[3087]}}}));class W extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){Q.model.pushStackElement(),Q.setCursorStates(re.source,3,this._exec(Q.getCursorStates())),Q.revealPrimaryCursor(re.source,!0)}_exec(Q){const re=[];for(let de=0,he=Q.length;de<he;de++){const me=Q[de],X=me.modelState.position.lineNumber;re[de]=v.CursorState.fromModelState(me.modelState.move(this._inSelectionMode,X,1,0))}return re}}A.CursorLineStart=(0,S.registerEditorCommand)(new W({inSelectionMode:!1,id:\"cursorLineStart\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:0,mac:{primary:287}}})),A.CursorLineStartSelect=(0,S.registerEditorCommand)(new W({inSelectionMode:!0,id:\"cursorLineStartSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:0,mac:{primary:1311}}}));class V extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){Q.model.pushStackElement(),Q.setCursorStates(re.source,3,a.CursorMoveCommands.moveToEndOfLine(Q,Q.getCursorStates(),this._inSelectionMode,re.sticky||!1)),Q.revealPrimaryCursor(re.source,!0)}}A.CursorEnd=(0,S.registerEditorCommand)(new V({inSelectionMode:!1,id:\"cursorEnd\",precondition:void 0,kbOpts:{args:{sticky:!1},weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:13,mac:{primary:13,secondary:[2065]}},metadata:{description:\"Go to End\",args:[{name:\"args\",schema:{type:\"object\",properties:{sticky:{description:L.localize(0,null),type:\"boolean\",default:!1}}}}]}})),A.CursorEndSelect=(0,S.registerEditorCommand)(new V({inSelectionMode:!0,id:\"cursorEndSelect\",precondition:void 0,kbOpts:{args:{sticky:!1},weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1037,mac:{primary:1037,secondary:[3089]}},metadata:{description:\"Select to End\",args:[{name:\"args\",schema:{type:\"object\",properties:{sticky:{description:L.localize(1,null),type:\"boolean\",default:!1}}}}]}}));class K extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){Q.model.pushStackElement(),Q.setCursorStates(re.source,3,this._exec(Q,Q.getCursorStates())),Q.revealPrimaryCursor(re.source,!0)}_exec(Q,re){const de=[];for(let he=0,me=re.length;he<me;he++){const X=re[he],U=X.modelState.position.lineNumber,G=Q.model.getLineMaxColumn(U);de[he]=v.CursorState.fromModelState(X.modelState.move(this._inSelectionMode,U,G,0))}return de}}A.CursorLineEnd=(0,S.registerEditorCommand)(new K({inSelectionMode:!1,id:\"cursorLineEnd\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:0,mac:{primary:291}}})),A.CursorLineEndSelect=(0,S.registerEditorCommand)(new K({inSelectionMode:!0,id:\"cursorLineEndSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:0,mac:{primary:1315}}}));class F extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){Q.model.pushStackElement(),Q.setCursorStates(re.source,3,a.CursorMoveCommands.moveToBeginningOfBuffer(Q,Q.getCursorStates(),this._inSelectionMode)),Q.revealPrimaryCursor(re.source,!0)}}A.CursorTop=(0,S.registerEditorCommand)(new F({inSelectionMode:!1,id:\"cursorTop\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:2062,mac:{primary:2064}}})),A.CursorTopSelect=(0,S.registerEditorCommand)(new F({inSelectionMode:!0,id:\"cursorTopSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3086,mac:{primary:3088}}}));class q extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){Q.model.pushStackElement(),Q.setCursorStates(re.source,3,a.CursorMoveCommands.moveToEndOfBuffer(Q,Q.getCursorStates(),this._inSelectionMode)),Q.revealPrimaryCursor(re.source,!0)}}A.CursorBottom=(0,S.registerEditorCommand)(new q({inSelectionMode:!1,id:\"cursorBottom\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:2061,mac:{primary:2066}}})),A.CursorBottomSelect=(0,S.registerEditorCommand)(new q({inSelectionMode:!0,id:\"cursorBottomSelect\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3085,mac:{primary:3090}}}));class ie extends s{constructor(){super({id:\"editorScroll\",precondition:void 0,metadata:l.metadata})}determineScrollMethod(Q){const re=[6],de=[1,2,3,4,5,6],he=[4,2],me=[1,3];return re.includes(Q.unit)&&he.includes(Q.direction)?this._runHorizontalEditorScroll.bind(this):de.includes(Q.unit)&&me.includes(Q.direction)?this._runVerticalEditorScroll.bind(this):null}runCoreEditorCommand(Q,re){const de=l.parse(re);if(!de)return;const he=this.determineScrollMethod(de);he&&he(Q,re.source,de)}_runVerticalEditorScroll(Q,re,de){const he=this._computeDesiredScrollTop(Q,de);if(de.revealCursor){const me=Q.getCompletelyVisibleViewRangeAtScrollTop(he);Q.setCursorStates(re,3,[a.CursorMoveCommands.findPositionInViewportIfOutside(Q,Q.getPrimaryCursorState(),me,de.select)])}Q.viewLayout.setScrollPosition({scrollTop:he},0)}_computeDesiredScrollTop(Q,re){if(re.unit===1){const me=Q.viewLayout.getFutureViewport(),X=Q.getCompletelyVisibleViewRangeAtScrollTop(me.top),U=Q.coordinatesConverter.convertViewRangeToModelRange(X);let G;re.direction===1?G=Math.max(1,U.startLineNumber-re.value):G=Math.min(Q.model.getLineCount(),U.startLineNumber+re.value);const z=Q.coordinatesConverter.convertModelPositionToViewPosition(new n.Position(G,1));return Q.viewLayout.getVerticalOffsetForLineNumber(z.lineNumber)}if(re.unit===5){let me=0;return re.direction===3&&(me=Q.model.getLineCount()-Q.cursorConfig.pageSize),Q.viewLayout.getVerticalOffsetForLineNumber(me)}let de;re.unit===3?de=Q.cursorConfig.pageSize*re.value:re.unit===4?de=Math.round(Q.cursorConfig.pageSize/2)*re.value:de=re.value;const he=(re.direction===1?-1:1)*de;return Q.viewLayout.getCurrentScrollTop()+he*Q.cursorConfig.lineHeight}_runHorizontalEditorScroll(Q,re,de){const he=this._computeDesiredScrollLeft(Q,de);Q.viewLayout.setScrollPosition({scrollLeft:he},0)}_computeDesiredScrollLeft(Q,re){const de=(re.direction===4?-1:1)*re.value;return Q.viewLayout.getCurrentScrollLeft()+de*Q.cursorConfig.typicalHalfwidthCharacterWidth}}A.EditorScrollImpl=ie,A.EditorScroll=(0,S.registerEditorCommand)(new ie),A.ScrollLineUp=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"scrollLineUp\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:2064,mac:{primary:267}}})}runCoreEditorCommand(J,Q){A.EditorScroll.runCoreEditorCommand(J,{to:l.RawDirection.Up,by:l.RawUnit.WrappedLine,value:1,revealCursor:!1,select:!1,source:Q.source})}}),A.ScrollPageUp=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"scrollPageUp\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:2059,win:{primary:523},linux:{primary:523}}})}runCoreEditorCommand(J,Q){A.EditorScroll.runCoreEditorCommand(J,{to:l.RawDirection.Up,by:l.RawUnit.Page,value:1,revealCursor:!1,select:!1,source:Q.source})}}),A.ScrollEditorTop=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"scrollEditorTop\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus}})}runCoreEditorCommand(J,Q){A.EditorScroll.runCoreEditorCommand(J,{to:l.RawDirection.Up,by:l.RawUnit.Editor,value:1,revealCursor:!1,select:!1,source:Q.source})}}),A.ScrollLineDown=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"scrollLineDown\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:2066,mac:{primary:268}}})}runCoreEditorCommand(J,Q){A.EditorScroll.runCoreEditorCommand(J,{to:l.RawDirection.Down,by:l.RawUnit.WrappedLine,value:1,revealCursor:!1,select:!1,source:Q.source})}}),A.ScrollPageDown=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"scrollPageDown\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:2060,win:{primary:524},linux:{primary:524}}})}runCoreEditorCommand(J,Q){A.EditorScroll.runCoreEditorCommand(J,{to:l.RawDirection.Down,by:l.RawUnit.Page,value:1,revealCursor:!1,select:!1,source:Q.source})}}),A.ScrollEditorBottom=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"scrollEditorBottom\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus}})}runCoreEditorCommand(J,Q){A.EditorScroll.runCoreEditorCommand(J,{to:l.RawDirection.Down,by:l.RawUnit.Editor,value:1,revealCursor:!1,select:!1,source:Q.source})}}),A.ScrollLeft=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"scrollLeft\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus}})}runCoreEditorCommand(J,Q){A.EditorScroll.runCoreEditorCommand(J,{to:l.RawDirection.Left,by:l.RawUnit.Column,value:2,revealCursor:!1,select:!1,source:Q.source})}}),A.ScrollRight=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"scrollRight\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus}})}runCoreEditorCommand(J,Q){A.EditorScroll.runCoreEditorCommand(J,{to:l.RawDirection.Right,by:l.RawUnit.Column,value:2,revealCursor:!1,select:!1,source:Q.source})}});class ae extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){re.position&&(Q.model.pushStackElement(),Q.setCursorStates(re.source,3,[a.CursorMoveCommands.word(Q,Q.getPrimaryCursorState(),this._inSelectionMode,re.position)]),re.revealType!==2&&Q.revealPrimaryCursor(re.source,!0,!0))}}A.WordSelect=(0,S.registerEditorCommand)(new ae({inSelectionMode:!1,id:\"_wordSelect\",precondition:void 0})),A.WordSelectDrag=(0,S.registerEditorCommand)(new ae({inSelectionMode:!0,id:\"_wordSelectDrag\",precondition:void 0})),A.LastCursorWordSelect=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"lastCursorWordSelect\",precondition:void 0})}runCoreEditorCommand(J,Q){if(!Q.position)return;const re=J.getLastAddedCursorIndex(),de=J.getCursorStates(),he=de.slice(0),me=de[re];he[re]=a.CursorMoveCommands.word(J,me,me.modelState.hasSelection(),Q.position),J.model.pushStackElement(),J.setCursorStates(Q.source,3,he)}});class ne extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){re.position&&(Q.model.pushStackElement(),Q.setCursorStates(re.source,3,[a.CursorMoveCommands.line(Q,Q.getPrimaryCursorState(),this._inSelectionMode,re.position,re.viewPosition)]),re.revealType!==2&&Q.revealPrimaryCursor(re.source,!1,!0))}}A.LineSelect=(0,S.registerEditorCommand)(new ne({inSelectionMode:!1,id:\"_lineSelect\",precondition:void 0})),A.LineSelectDrag=(0,S.registerEditorCommand)(new ne({inSelectionMode:!0,id:\"_lineSelectDrag\",precondition:void 0}));class $ extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){if(!re.position)return;const de=Q.getLastAddedCursorIndex(),he=Q.getCursorStates(),me=he.slice(0);me[de]=a.CursorMoveCommands.line(Q,he[de],this._inSelectionMode,re.position,re.viewPosition),Q.model.pushStackElement(),Q.setCursorStates(re.source,3,me)}}A.LastCursorLineSelect=(0,S.registerEditorCommand)(new $({inSelectionMode:!1,id:\"lastCursorLineSelect\",precondition:void 0})),A.LastCursorLineSelectDrag=(0,S.registerEditorCommand)(new $({inSelectionMode:!0,id:\"lastCursorLineSelectDrag\",precondition:void 0})),A.CancelSelection=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"cancelSelection\",precondition:r.EditorContextKeys.hasNonEmptySelection,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:9,secondary:[1033]}})}runCoreEditorCommand(J,Q){J.model.pushStackElement(),J.setCursorStates(Q.source,3,[a.CursorMoveCommands.cancelSelection(J,J.getPrimaryCursorState())]),J.revealPrimaryCursor(Q.source,!0)}}),A.RemoveSecondaryCursors=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"removeSecondaryCursors\",precondition:r.EditorContextKeys.hasMultipleSelections,kbOpts:{weight:d+1,kbExpr:r.EditorContextKeys.textInputFocus,primary:9,secondary:[1033]}})}runCoreEditorCommand(J,Q){J.model.pushStackElement(),J.setCursorStates(Q.source,3,[J.getPrimaryCursorState()]),J.revealPrimaryCursor(Q.source,!0),(0,E.status)(L.localize(2,null))}}),A.RevealLine=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"revealLine\",precondition:void 0,metadata:o.metadata})}runCoreEditorCommand(J,Q){const re=Q,de=re.lineNumber||0;let he=typeof de==\"number\"?de+1:parseInt(de)+1;he<1&&(he=1);const me=J.model.getLineCount();he>me&&(he=me);const X=new t.Range(he,1,he,J.model.getLineMaxColumn(he));let U=0;if(re.at)switch(re.at){case o.RawAtArgument.Top:U=3;break;case o.RawAtArgument.Center:U=1;break;case o.RawAtArgument.Bottom:U=4;break;default:break}const G=J.coordinatesConverter.convertModelRangeToViewRange(X);J.revealRange(Q.source,!1,G,U,0)}}),A.SelectAll=new class extends g{constructor(){super(S.SelectAllCommand)}runDOMCommand(J){k.isFirefox&&(J.focus(),J.select()),J.ownerDocument.execCommand(\"selectAll\")}runEditorCommand(J,Q,re){const de=Q._getViewModel();de&&this.runCoreEditorCommand(de,re)}runCoreEditorCommand(J,Q){J.model.pushStackElement(),J.setCursorStates(\"keyboard\",3,[a.CursorMoveCommands.selectAll(J,J.getPrimaryCursorState())])}},A.SetSelection=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:\"setSelection\",precondition:void 0})}runCoreEditorCommand(J,Q){Q.selection&&(J.model.pushStackElement(),J.setCursorStates(Q.source,3,[v.CursorState.fromModelSelection(Q.selection)]))}})})(h||(e.CoreNavigationCommands=h={}));const m=u.ContextKeyExpr.and(r.EditorContextKeys.textInputFocus,r.EditorContextKeys.columnSelection);function C(A,P){f.KeybindingsRegistry.registerKeybindingRule({id:A,primary:P,when:m,weight:d+1})}C(h.CursorColumnSelectLeft.id,1039),C(h.CursorColumnSelectRight.id,1041),C(h.CursorColumnSelectUp.id,1040),C(h.CursorColumnSelectPageUp.id,1035),C(h.CursorColumnSelectDown.id,1042),C(h.CursorColumnSelectPageDown.id,1036);function w(A){return A.register(),A}var D;(function(A){class P extends S.EditorCommand{runEditorCommand(M,R,x){const O=R._getViewModel();O&&this.runCoreEditingCommand(R,O,x||{})}}A.CoreEditingCommand=P,A.LineBreakInsert=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:\"lineBreakInsert\",precondition:r.EditorContextKeys.writable,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:0,mac:{primary:301}}})}runCoreEditingCommand(N,M,R){N.pushUndoStop(),N.executeCommands(this.id,i.TypeOperations.lineBreakInsert(M.cursorConfig,M.model,M.getCursorStates().map(x=>x.modelState.selection)))}}),A.Outdent=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:\"outdent\",precondition:r.EditorContextKeys.writable,kbOpts:{weight:d,kbExpr:u.ContextKeyExpr.and(r.EditorContextKeys.editorTextFocus,r.EditorContextKeys.tabDoesNotMoveFocus),primary:1026}})}runCoreEditingCommand(N,M,R){N.pushUndoStop(),N.executeCommands(this.id,i.TypeOperations.outdent(M.cursorConfig,M.model,M.getCursorStates().map(x=>x.modelState.selection))),N.pushUndoStop()}}),A.Tab=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:\"tab\",precondition:r.EditorContextKeys.writable,kbOpts:{weight:d,kbExpr:u.ContextKeyExpr.and(r.EditorContextKeys.editorTextFocus,r.EditorContextKeys.tabDoesNotMoveFocus),primary:2}})}runCoreEditingCommand(N,M,R){N.pushUndoStop(),N.executeCommands(this.id,i.TypeOperations.tab(M.cursorConfig,M.model,M.getCursorStates().map(x=>x.modelState.selection))),N.pushUndoStop()}}),A.DeleteLeft=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:\"deleteLeft\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1,secondary:[1025],mac:{primary:1,secondary:[1025,294,257]}}})}runCoreEditingCommand(N,M,R){const[x,O]=b.DeleteOperations.deleteLeft(M.getPrevEditOperationType(),M.cursorConfig,M.model,M.getCursorStates().map(B=>B.modelState.selection),M.getCursorAutoClosedCharacters());x&&N.pushUndoStop(),N.executeCommands(this.id,O),M.setPrevEditOperationType(2)}}),A.DeleteRight=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:\"deleteRight\",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:20,mac:{primary:20,secondary:[290,276]}}})}runCoreEditingCommand(N,M,R){const[x,O]=b.DeleteOperations.deleteRight(M.getPrevEditOperationType(),M.cursorConfig,M.model,M.getCursorStates().map(B=>B.modelState.selection));x&&N.pushUndoStop(),N.executeCommands(this.id,O),M.setPrevEditOperationType(3)}}),A.Undo=new class extends g{constructor(){super(S.UndoCommand)}runDOMCommand(N){N.ownerDocument.execCommand(\"undo\")}runEditorCommand(N,M,R){if(!(!M.hasModel()||M.getOption(90)===!0))return M.getModel().undo()}},A.Redo=new class extends g{constructor(){super(S.RedoCommand)}runDOMCommand(N){N.ownerDocument.execCommand(\"redo\")}runEditorCommand(N,M,R){if(!(!M.hasModel()||M.getOption(90)===!0))return M.getModel().redo()}}})(D||(e.CoreEditingCommands=D={}));class I extends S.Command{constructor(P,N,M){super({id:P,precondition:void 0,metadata:M}),this._handlerId=N}runCommand(P,N){const M=P.get(p.ICodeEditorService).getFocusedCodeEditor();M&&M.trigger(\"keyboard\",this._handlerId,N)}}function T(A,P){w(new I(\"default:\"+A,A)),w(new I(A,A,P))}T(\"type\",{description:\"Type\",args:[{name:\"args\",schema:{type:\"object\",required:[\"text\"],properties:{text:{type:\"string\"}}}}]}),T(\"replacePreviousChar\"),T(\"compositionType\"),T(\"compositionStart\"),T(\"compositionEnd\"),T(\"paste\"),T(\"cut\")}),define(se[807],oe([1,0,237,16]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MarkerDecorationsContribution=void 0;let y=class{constructor(S,p){}dispose(){}};e.MarkerDecorationsContribution=y,y.ID=\"editor.contrib.markerDecorations\",e.MarkerDecorationsContribution=y=ke([ge(1,L.IMarkerDecorationsService)],y),(0,k.registerEditorContribution)(y.ID,y,0)}),define(se[808],oe([1,0,191,10,17]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewController=void 0;class E{constructor(p,_,v,b){this.configuration=p,this.viewModel=_,this.userInputEvents=v,this.commandDelegate=b}paste(p,_,v,b){this.commandDelegate.paste(p,_,v,b)}type(p){this.commandDelegate.type(p)}compositionType(p,_,v,b){this.commandDelegate.compositionType(p,_,v,b)}compositionStart(){this.commandDelegate.startComposition()}compositionEnd(){this.commandDelegate.endComposition()}cut(){this.commandDelegate.cut()}setSelection(p){L.CoreNavigationCommands.SetSelection.runCoreEditorCommand(this.viewModel,{source:\"keyboard\",selection:p})}_validateViewColumn(p){const _=this.viewModel.getLineMinColumn(p.lineNumber);return p.column<_?new k.Position(p.lineNumber,_):p}_hasMulticursorModifier(p){switch(this.configuration.options.get(77)){case\"altKey\":return p.altKey;case\"ctrlKey\":return p.ctrlKey;case\"metaKey\":return p.metaKey;default:return!1}}_hasNonMulticursorModifier(p){switch(this.configuration.options.get(77)){case\"altKey\":return p.ctrlKey||p.metaKey;case\"ctrlKey\":return p.altKey||p.metaKey;case\"metaKey\":return p.ctrlKey||p.altKey;default:return!1}}dispatchMouse(p){const _=this.configuration.options,v=y.isLinux&&_.get(106),b=_.get(22);p.middleButton&&!v?this._columnSelect(p.position,p.mouseColumn,p.inSelectionMode):p.startedOnLineNumbers?this._hasMulticursorModifier(p)?p.inSelectionMode?this._lastCursorLineSelect(p.position,p.revealType):this._createCursor(p.position,!0):p.inSelectionMode?this._lineSelectDrag(p.position,p.revealType):this._lineSelect(p.position,p.revealType):p.mouseDownCount>=4?this._selectAll():p.mouseDownCount===3?this._hasMulticursorModifier(p)?p.inSelectionMode?this._lastCursorLineSelectDrag(p.position,p.revealType):this._lastCursorLineSelect(p.position,p.revealType):p.inSelectionMode?this._lineSelectDrag(p.position,p.revealType):this._lineSelect(p.position,p.revealType):p.mouseDownCount===2?p.onInjectedText||(this._hasMulticursorModifier(p)?this._lastCursorWordSelect(p.position,p.revealType):p.inSelectionMode?this._wordSelectDrag(p.position,p.revealType):this._wordSelect(p.position,p.revealType)):this._hasMulticursorModifier(p)?this._hasNonMulticursorModifier(p)||(p.shiftKey?this._columnSelect(p.position,p.mouseColumn,!0):p.inSelectionMode?this._lastCursorMoveToSelect(p.position,p.revealType):this._createCursor(p.position,!1)):p.inSelectionMode?p.altKey?this._columnSelect(p.position,p.mouseColumn,!0):b?this._columnSelect(p.position,p.mouseColumn,!0):this._moveToSelect(p.position,p.revealType):this.moveTo(p.position,p.revealType)}_usualArgs(p,_){return p=this._validateViewColumn(p),{source:\"mouse\",position:this._convertViewToModelPosition(p),viewPosition:p,revealType:_}}moveTo(p,_){L.CoreNavigationCommands.MoveTo.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_moveToSelect(p,_){L.CoreNavigationCommands.MoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_columnSelect(p,_,v){p=this._validateViewColumn(p),L.CoreNavigationCommands.ColumnSelect.runCoreEditorCommand(this.viewModel,{source:\"mouse\",position:this._convertViewToModelPosition(p),viewPosition:p,mouseColumn:_,doColumnSelect:v})}_createCursor(p,_){p=this._validateViewColumn(p),L.CoreNavigationCommands.CreateCursor.runCoreEditorCommand(this.viewModel,{source:\"mouse\",position:this._convertViewToModelPosition(p),viewPosition:p,wholeLine:_})}_lastCursorMoveToSelect(p,_){L.CoreNavigationCommands.LastCursorMoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_wordSelect(p,_){L.CoreNavigationCommands.WordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_wordSelectDrag(p,_){L.CoreNavigationCommands.WordSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lastCursorWordSelect(p,_){L.CoreNavigationCommands.LastCursorWordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lineSelect(p,_){L.CoreNavigationCommands.LineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lineSelectDrag(p,_){L.CoreNavigationCommands.LineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lastCursorLineSelect(p,_){L.CoreNavigationCommands.LastCursorLineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lastCursorLineSelectDrag(p,_){L.CoreNavigationCommands.LastCursorLineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_selectAll(){L.CoreNavigationCommands.SelectAll.runCoreEditorCommand(this.viewModel,{source:\"mouse\"})}_convertViewToModelPosition(p){return this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(p)}emitKeyDown(p){this.userInputEvents.emitKeyDown(p)}emitKeyUp(p){this.userInputEvents.emitKeyUp(p)}emitContextMenu(p){this.userInputEvents.emitContextMenu(p)}emitMouseMove(p){this.userInputEvents.emitMouseMove(p)}emitMouseLeave(p){this.userInputEvents.emitMouseLeave(p)}emitMouseUp(p){this.userInputEvents.emitMouseUp(p)}emitMouseDown(p){this.userInputEvents.emitMouseDown(p)}emitMouseDrag(p){this.userInputEvents.emitMouseDrag(p)}emitMouseDrop(p){this.userInputEvents.emitMouseDrop(p)}emitMouseDropCanceled(){this.userInputEvents.emitMouseDropCanceled()}emitMouseWheel(p){this.userInputEvents.emitMouseWheel(p)}}e.ViewController=E}),define(se[809],oe([1,0,45,8,6,61,62,112,121,81]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";var b;Object.defineProperty(e,\"__esModule\",{value:!0}),e.WorkerBasedDocumentDiffProvider=e.WorkerBasedDiffProviderFactoryService=e.IDiffProviderFactoryService=void 0,e.IDiffProviderFactoryService=(0,k.createDecorator)(\"diffProviderFactoryService\");let a=class{constructor(t){this.instantiationService=t}createDiffProvider(t){return this.instantiationService.createInstance(i,t)}};e.WorkerBasedDiffProviderFactoryService=a,e.WorkerBasedDiffProviderFactoryService=a=ke([ge(0,k.IInstantiationService)],a),(0,L.registerSingleton)(e.IDiffProviderFactoryService,a,1);let i=b=class{constructor(t,r,u){this.editorWorkerService=r,this.telemetryService=u,this.onDidChangeEventEmitter=new y.Emitter,this.onDidChange=this.onDidChangeEventEmitter.event,this.diffAlgorithm=\"advanced\",this.diffAlgorithmOnDidChangeSubscription=void 0,this.setOptions(t)}dispose(){var t;(t=this.diffAlgorithmOnDidChangeSubscription)===null||t===void 0||t.dispose()}async computeDiff(t,r,u,f){var c,d;if(typeof this.diffAlgorithm!=\"string\")return this.diffAlgorithm.computeDiff(t,r,u,f);if(t.getLineCount()===1&&t.getLineMaxColumn(1)===1)return r.getLineCount()===1&&r.getLineMaxColumn(1)===1?{changes:[],identical:!0,quitEarly:!1,moves:[]}:{changes:[new p.DetailedLineRangeMapping(new S.LineRange(1,2),new S.LineRange(1,r.getLineCount()+1),[new p.RangeMapping(t.getFullModelRange(),r.getFullModelRange())])],identical:!1,quitEarly:!1,moves:[]};const s=JSON.stringify([t.uri.toString(),r.uri.toString()]),l=JSON.stringify([t.id,r.id,t.getAlternativeVersionId(),r.getAlternativeVersionId(),JSON.stringify(u)]),o=b.diffCache.get(s);if(o&&o.context===l)return o.result;const g=E.StopWatch.create(),h=await this.editorWorkerService.computeDiff(t.uri,r.uri,u,this.diffAlgorithm),m=g.elapsed();if(this.telemetryService.publicLog2(\"diffEditor.computeDiff\",{timeMs:m,timedOut:(c=h?.quitEarly)!==null&&c!==void 0?c:!0,detectedMoves:u.computeMoves?(d=h?.moves.length)!==null&&d!==void 0?d:0:-1}),f.isCancellationRequested)return{changes:[],identical:!1,quitEarly:!0,moves:[]};if(!h)throw new Error(\"no diff result available\");return b.diffCache.size>10&&b.diffCache.delete(b.diffCache.keys().next().value),b.diffCache.set(s,{result:h,context:l}),h}setOptions(t){var r;let u=!1;t.diffAlgorithm&&this.diffAlgorithm!==t.diffAlgorithm&&((r=this.diffAlgorithmOnDidChangeSubscription)===null||r===void 0||r.dispose(),this.diffAlgorithmOnDidChangeSubscription=void 0,this.diffAlgorithm=t.diffAlgorithm,typeof t.diffAlgorithm!=\"string\"&&(this.diffAlgorithmOnDidChangeSubscription=t.diffAlgorithm.onDidChange(()=>this.onDidChangeEventEmitter.fire())),u=!0),u&&this.onDidChangeEventEmitter.fire()}};e.WorkerBasedDocumentDiffProvider=i,i.diffCache=new Map,e.WorkerBasedDocumentDiffProvider=i=b=ke([ge(1,_.IEditorWorkerService),ge(2,v.ITelemetryService)],i)}),define(se[359],oe([1,0,14,19,2,35,809,87,62,286,112,182,288,284,20,13,90]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UnchangedRegion=e.DiffMapping=e.DiffState=e.DiffEditorViewModel=void 0;let f=class extends y.Disposable{setActiveMovedText(C){this._activeMovedText.set(C,void 0)}constructor(C,w,D){super(),this.model=C,this._options=w,this._diffProviderFactoryService=D,this._isDiffUpToDate=(0,E.observableValue)(this,!1),this.isDiffUpToDate=this._isDiffUpToDate,this._diff=(0,E.observableValue)(this,void 0),this.diff=this._diff,this._unchangedRegions=(0,E.observableValue)(this,void 0),this.unchangedRegions=(0,E.derived)(this,P=>{var N,M;return this._options.hideUnchangedRegions.read(P)?(M=(N=this._unchangedRegions.read(P))===null||N===void 0?void 0:N.regions)!==null&&M!==void 0?M:[]:((0,E.transaction)(R=>{var x;for(const O of((x=this._unchangedRegions.get())===null||x===void 0?void 0:x.regions)||[])O.collapseAll(R)}),[])}),this.movedTextToCompare=(0,E.observableValue)(this,void 0),this._activeMovedText=(0,E.observableValue)(this,void 0),this._hoveredMovedText=(0,E.observableValue)(this,void 0),this.activeMovedText=(0,E.derived)(this,P=>{var N,M;return(M=(N=this.movedTextToCompare.read(P))!==null&&N!==void 0?N:this._hoveredMovedText.read(P))!==null&&M!==void 0?M:this._activeMovedText.read(P)}),this._cancellationTokenSource=new k.CancellationTokenSource,this._diffProvider=(0,E.derived)(this,P=>{const N=this._diffProviderFactoryService.createDiffProvider({diffAlgorithm:this._options.diffAlgorithm.read(P)}),M=(0,E.observableSignalFromEvent)(\"onDidChange\",N.onDidChange);return{diffProvider:N,onChangeSignal:M}}),this._register((0,y.toDisposable)(()=>this._cancellationTokenSource.cancel()));const I=(0,E.observableSignal)(\"contentChangedSignal\"),T=this._register(new L.RunOnceScheduler(()=>I.trigger(void 0),200));this._register((0,E.autorun)(P=>{const N=this._unchangedRegions.read(P);if(!N||N.regions.some(W=>W.isDragged.read(P)))return;const M=N.originalDecorationIds.map(W=>C.original.getDecorationRange(W)).map(W=>W?_.LineRange.fromRangeInclusive(W):void 0),R=N.modifiedDecorationIds.map(W=>C.modified.getDecorationRange(W)).map(W=>W?_.LineRange.fromRangeInclusive(W):void 0),x=N.regions.map((W,V)=>!M[V]||!R[V]?void 0:new o(M[V].startLineNumber,R[V].startLineNumber,M[V].length,W.visibleLineCountTop.read(P),W.visibleLineCountBottom.read(P))).filter(t.isDefined),O=[];let B=!1;for(const W of(0,r.groupAdjacentBy)(x,(V,K)=>V.getHiddenModifiedRange(P).endLineNumberExclusive===K.getHiddenModifiedRange(P).startLineNumber))if(W.length>1){B=!0;const V=W.reduce((F,q)=>F+q.lineCount,0),K=new o(W[0].originalLineNumber,W[0].modifiedLineNumber,V,W[0].visibleLineCountTop.get(),W[W.length-1].visibleLineCountBottom.get());O.push(K)}else O.push(W[0]);if(B){const W=C.original.deltaDecorations(N.originalDecorationIds,O.map(K=>({range:K.originalUnchangedRange.toInclusiveRange(),options:{description:\"unchanged\"}}))),V=C.modified.deltaDecorations(N.modifiedDecorationIds,O.map(K=>({range:K.modifiedUnchangedRange.toInclusiveRange(),options:{description:\"unchanged\"}})));(0,E.transaction)(K=>{this._unchangedRegions.set({regions:O,originalDecorationIds:W,modifiedDecorationIds:V},K)})}}));const A=(P,N,M)=>{const R=o.fromDiffs(P.changes,C.original.getLineCount(),C.modified.getLineCount(),this._options.hideUnchangedRegionsMinimumLineCount.read(M),this._options.hideUnchangedRegionsContextLineCount.read(M));let x;const O=this._unchangedRegions.get();if(O){const K=O.originalDecorationIds.map(ae=>C.original.getDecorationRange(ae)).map(ae=>ae?_.LineRange.fromRangeInclusive(ae):void 0),F=O.modifiedDecorationIds.map(ae=>C.modified.getDecorationRange(ae)).map(ae=>ae?_.LineRange.fromRangeInclusive(ae):void 0);let ie=(0,p.filterWithPrevious)(O.regions.map((ae,ne)=>{if(!K[ne]||!F[ne])return;const $=K[ne].length;return new o(K[ne].startLineNumber,F[ne].startLineNumber,$,Math.min(ae.visibleLineCountTop.get(),$),Math.min(ae.visibleLineCountBottom.get(),$-ae.visibleLineCountTop.get()))}).filter(t.isDefined),(ae,ne)=>!ne||ae.modifiedLineNumber>=ne.modifiedLineNumber+ne.lineCount&&ae.originalLineNumber>=ne.originalLineNumber+ne.lineCount).map(ae=>new b.LineRangeMapping(ae.getHiddenOriginalRange(M),ae.getHiddenModifiedRange(M)));ie=b.LineRangeMapping.clip(ie,_.LineRange.ofLength(1,C.original.getLineCount()),_.LineRange.ofLength(1,C.modified.getLineCount())),x=b.LineRangeMapping.inverse(ie,C.original.getLineCount(),C.modified.getLineCount())}const B=[];if(x)for(const K of R){const F=x.filter(q=>q.original.intersectsStrict(K.originalUnchangedRange)&&q.modified.intersectsStrict(K.modifiedUnchangedRange));B.push(...K.setVisibleRanges(F,N))}else B.push(...R);const W=C.original.deltaDecorations(O?.originalDecorationIds||[],B.map(K=>({range:K.originalUnchangedRange.toInclusiveRange(),options:{description:\"unchanged\"}}))),V=C.modified.deltaDecorations(O?.modifiedDecorationIds||[],B.map(K=>({range:K.modifiedUnchangedRange.toInclusiveRange(),options:{description:\"unchanged\"}})));this._unchangedRegions.set({regions:B,originalDecorationIds:W,modifiedDecorationIds:V},N)};this._register(C.modified.onDidChangeContent(P=>{if(this._diff.get()){const M=a.TextEditInfo.fromModelContentChanges(P.changes),R=(this._lastDiff,C.original,C.modified,void 0);R&&(this._lastDiff=R,(0,E.transaction)(x=>{this._diff.set(s.fromDiffResult(this._lastDiff),x),A(R,x);const O=this.movedTextToCompare.get();this.movedTextToCompare.set(O?this._lastDiff.moves.find(B=>B.lineRangeMapping.modified.intersect(O.lineRangeMapping.modified)):void 0,x)}))}this._isDiffUpToDate.set(!1,void 0),T.schedule()})),this._register(C.original.onDidChangeContent(P=>{if(this._diff.get()){const M=a.TextEditInfo.fromModelContentChanges(P.changes),R=(this._lastDiff,C.original,C.modified,void 0);R&&(this._lastDiff=R,(0,E.transaction)(x=>{this._diff.set(s.fromDiffResult(this._lastDiff),x),A(R,x);const O=this.movedTextToCompare.get();this.movedTextToCompare.set(O?this._lastDiff.moves.find(B=>B.lineRangeMapping.modified.intersect(O.lineRangeMapping.modified)):void 0,x)}))}this._isDiffUpToDate.set(!1,void 0),T.schedule()})),this._register((0,E.autorunWithStore)(async(P,N)=>{var M,R;this._options.hideUnchangedRegionsMinimumLineCount.read(P),this._options.hideUnchangedRegionsContextLineCount.read(P),T.cancel(),I.read(P);const x=this._diffProvider.read(P);x.onChangeSignal.read(P),(0,p.readHotReloadableExport)(v.DefaultLinesDiffComputer,P),(0,p.readHotReloadableExport)(n.optimizeSequenceDiffs,P),this._isDiffUpToDate.set(!1,void 0);let O=[];N.add(C.original.onDidChangeContent(V=>{const K=a.TextEditInfo.fromModelContentChanges(V.changes);O=(0,i.combineTextEditInfos)(O,K)}));let B=[];N.add(C.modified.onDidChangeContent(V=>{const K=a.TextEditInfo.fromModelContentChanges(V.changes);B=(0,i.combineTextEditInfos)(B,K)}));let W=await x.diffProvider.computeDiff(C.original,C.modified,{ignoreTrimWhitespace:this._options.ignoreTrimWhitespace.read(P),maxComputationTimeMs:this._options.maxComputationTimeMs.read(P),computeMoves:this._options.showMoves.read(P)},this._cancellationTokenSource.token);this._cancellationTokenSource.token.isCancellationRequested||(W=c(W,C.original,C.modified),W=(M=(C.original,C.modified,void 0))!==null&&M!==void 0?M:W,W=(R=(C.original,C.modified,void 0))!==null&&R!==void 0?R:W,(0,E.transaction)(V=>{A(W,V),this._lastDiff=W;const K=s.fromDiffResult(W);this._diff.set(K,V),this._isDiffUpToDate.set(!0,V);const F=this.movedTextToCompare.get();this.movedTextToCompare.set(F?this._lastDiff.moves.find(q=>q.lineRangeMapping.modified.intersect(F.lineRangeMapping.modified)):void 0,V)}))}))}ensureModifiedLineIsVisible(C,w,D){var I,T;if(((I=this.diff.get())===null||I===void 0?void 0:I.mappings.length)===0)return;const A=((T=this._unchangedRegions.get())===null||T===void 0?void 0:T.regions)||[];for(const P of A)if(P.getHiddenModifiedRange(void 0).contains(C)){P.showModifiedLine(C,w,D);return}}ensureOriginalLineIsVisible(C,w,D){var I,T;if(((I=this.diff.get())===null||I===void 0?void 0:I.mappings.length)===0)return;const A=((T=this._unchangedRegions.get())===null||T===void 0?void 0:T.regions)||[];for(const P of A)if(P.getHiddenOriginalRange(void 0).contains(C)){P.showOriginalLine(C,w,D);return}}async waitForDiff(){await(0,E.waitForState)(this.isDiffUpToDate,C=>C)}serializeState(){const C=this._unchangedRegions.get();return{collapsedRegions:C?.regions.map(w=>({range:w.getHiddenModifiedRange(void 0).serialize()}))}}restoreSerializedState(C){var w;const D=(w=C.collapsedRegions)===null||w===void 0?void 0:w.map(T=>_.LineRange.deserialize(T.range)),I=this._unchangedRegions.get();!I||!D||(0,E.transaction)(T=>{for(const A of I.regions)for(const P of D)if(A.modifiedUnchangedRange.intersect(P)){A.setHiddenModifiedRange(P,T);break}})}};e.DiffEditorViewModel=f,e.DiffEditorViewModel=f=ke([ge(2,S.IDiffProviderFactoryService)],f);function c(m,C,w){return{changes:m.changes.map(D=>new b.DetailedLineRangeMapping(D.original,D.modified,D.innerChanges?D.innerChanges.map(I=>d(I,C,w)):void 0)),moves:m.moves,identical:m.identical,quitEarly:m.quitEarly}}function d(m,C,w){let D=m.originalRange,I=m.modifiedRange;return(D.endColumn!==1||I.endColumn!==1)&&D.endColumn===C.getLineMaxColumn(D.endLineNumber)&&I.endColumn===w.getLineMaxColumn(I.endLineNumber)&&D.endLineNumber<C.getLineCount()&&I.endLineNumber<w.getLineCount()&&(D=D.setEndPosition(D.endLineNumber+1,1),I=I.setEndPosition(I.endLineNumber+1,1)),new b.RangeMapping(D,I)}class s{static fromDiffResult(C){return new s(C.changes.map(w=>new l(w)),C.moves||[],C.identical,C.quitEarly)}constructor(C,w,D,I){this.mappings=C,this.movedTexts=w,this.identical=D,this.quitEarly=I}}e.DiffState=s;class l{constructor(C){this.lineRangeMapping=C}}e.DiffMapping=l;class o{static fromDiffs(C,w,D,I,T){const A=b.DetailedLineRangeMapping.inverse(C,w,D),P=[];for(const N of A){let M=N.original.startLineNumber,R=N.modified.startLineNumber,x=N.original.length;const O=M===1&&R===1,B=M+x===w+1&&R+x===D+1;(O||B)&&x>=T+I?(O&&!B&&(x-=T),B&&!O&&(M+=T,R+=T,x-=T),P.push(new o(M,R,x,0,0))):x>=T*2+I&&(M+=T,R+=T,x-=T*2,P.push(new o(M,R,x,0,0)))}return P}get originalUnchangedRange(){return _.LineRange.ofLength(this.originalLineNumber,this.lineCount)}get modifiedUnchangedRange(){return _.LineRange.ofLength(this.modifiedLineNumber,this.lineCount)}constructor(C,w,D,I,T){this.originalLineNumber=C,this.modifiedLineNumber=w,this.lineCount=D,this._visibleLineCountTop=(0,E.observableValue)(this,0),this.visibleLineCountTop=this._visibleLineCountTop,this._visibleLineCountBottom=(0,E.observableValue)(this,0),this.visibleLineCountBottom=this._visibleLineCountBottom,this._shouldHideControls=(0,E.derived)(this,N=>this.visibleLineCountTop.read(N)+this.visibleLineCountBottom.read(N)===this.lineCount&&!this.isDragged.read(N)),this.isDragged=(0,E.observableValue)(this,void 0);const A=Math.max(Math.min(I,this.lineCount),0),P=Math.max(Math.min(T,this.lineCount-I),0);(0,u.softAssert)(I===A),(0,u.softAssert)(T===P),this._visibleLineCountTop.set(A,void 0),this._visibleLineCountBottom.set(P,void 0)}setVisibleRanges(C,w){const D=[],I=new _.LineRangeSet(C.map(N=>N.modified)).subtractFrom(this.modifiedUnchangedRange);let T=this.originalLineNumber,A=this.modifiedLineNumber;const P=this.modifiedLineNumber+this.lineCount;if(I.ranges.length===0)this.showAll(w),D.push(this);else{let N=0;for(const M of I.ranges){const R=N===I.ranges.length-1;N++;const x=(R?P:M.endLineNumberExclusive)-A,O=new o(T,A,x,0,0);O.setHiddenModifiedRange(M,w),D.push(O),T=O.originalUnchangedRange.endLineNumberExclusive,A=O.modifiedUnchangedRange.endLineNumberExclusive}}return D}shouldHideControls(C){return this._shouldHideControls.read(C)}getHiddenOriginalRange(C){return _.LineRange.ofLength(this.originalLineNumber+this._visibleLineCountTop.read(C),this.lineCount-this._visibleLineCountTop.read(C)-this._visibleLineCountBottom.read(C))}getHiddenModifiedRange(C){return _.LineRange.ofLength(this.modifiedLineNumber+this._visibleLineCountTop.read(C),this.lineCount-this._visibleLineCountTop.read(C)-this._visibleLineCountBottom.read(C))}setHiddenModifiedRange(C,w){const D=C.startLineNumber-this.modifiedLineNumber,I=this.modifiedLineNumber+this.lineCount-C.endLineNumberExclusive;this.setState(D,I,w)}getMaxVisibleLineCountTop(){return this.lineCount-this._visibleLineCountBottom.get()}getMaxVisibleLineCountBottom(){return this.lineCount-this._visibleLineCountTop.get()}showMoreAbove(C=10,w){const D=this.getMaxVisibleLineCountTop();this._visibleLineCountTop.set(Math.min(this._visibleLineCountTop.get()+C,D),w)}showMoreBelow(C=10,w){const D=this.lineCount-this._visibleLineCountTop.get();this._visibleLineCountBottom.set(Math.min(this._visibleLineCountBottom.get()+C,D),w)}showAll(C){this._visibleLineCountBottom.set(this.lineCount-this._visibleLineCountTop.get(),C)}showModifiedLine(C,w,D){const I=C+1-(this.modifiedLineNumber+this._visibleLineCountTop.get()),T=this.modifiedLineNumber-this._visibleLineCountBottom.get()+this.lineCount-C;w===0&&I<T||w===1?this._visibleLineCountTop.set(this._visibleLineCountTop.get()+I,D):this._visibleLineCountBottom.set(this._visibleLineCountBottom.get()+T,D)}showOriginalLine(C,w,D){const I=C-this.originalLineNumber,T=this.originalLineNumber+this.lineCount-C;w===0&&I<T||w===1?this._visibleLineCountTop.set(Math.min(this._visibleLineCountTop.get()+T-I,this.getMaxVisibleLineCountTop()),D):this._visibleLineCountBottom.set(Math.min(this._visibleLineCountBottom.get()+I-T,this.getMaxVisibleLineCountBottom()),D)}collapseAll(C){this._visibleLineCountTop.set(0,C),this._visibleLineCountBottom.set(0,C)}setState(C,w,D){C=Math.max(Math.min(C,this.lineCount),0),w=Math.max(Math.min(w,this.lineCount-C),0),this._visibleLineCountTop.set(C,D),this._visibleLineCountBottom.set(w,D)}}e.UnchangedRegion=o;function g(m,C,w,D){}function h(m,C,w,D){}}),define(se[810],oe([1,0,48,58,65,16,24,21,649,15,453]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";var b;Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectionAnchorSet=void 0,e.SelectionAnchorSet=new v.RawContextKey(\"selectionAnchorSet\",!1);let a=b=class{static get(f){return f.getContribution(b.ID)}constructor(f,c){this.editor=f,this.selectionAnchorSetContextKey=e.SelectionAnchorSet.bindTo(c),this.modelChangeListener=f.onDidChangeModel(()=>this.selectionAnchorSetContextKey.reset())}setSelectionAnchor(){if(this.editor.hasModel()){const f=this.editor.getPosition();this.editor.changeDecorations(c=>{this.decorationId&&c.removeDecoration(this.decorationId),this.decorationId=c.addDecoration(S.Selection.fromPositions(f,f),{description:\"selection-anchor\",stickiness:1,hoverMessage:new k.MarkdownString().appendText((0,_.localize)(0,null)),className:\"selection-anchor\"})}),this.selectionAnchorSetContextKey.set(!!this.decorationId),(0,L.alert)((0,_.localize)(1,null,f.lineNumber,f.column))}}goToSelectionAnchor(){if(this.editor.hasModel()&&this.decorationId){const f=this.editor.getModel().getDecorationRange(this.decorationId);f&&this.editor.setPosition(f.getStartPosition())}}selectFromAnchorToCursor(){if(this.editor.hasModel()&&this.decorationId){const f=this.editor.getModel().getDecorationRange(this.decorationId);if(f){const c=this.editor.getPosition();this.editor.setSelection(S.Selection.fromPositions(f.getStartPosition(),c)),this.cancelSelectionAnchor()}}}cancelSelectionAnchor(){if(this.decorationId){const f=this.decorationId;this.editor.changeDecorations(c=>{c.removeDecoration(f),this.decorationId=void 0}),this.selectionAnchorSetContextKey.set(!1)}}dispose(){this.cancelSelectionAnchor(),this.modelChangeListener.dispose()}};a.ID=\"editor.contrib.selectionAnchorController\",a=b=ke([ge(1,v.IContextKeyService)],a);class i extends E.EditorAction{constructor(){super({id:\"editor.action.setSelectionAnchor\",label:(0,_.localize)(2,null),alias:\"Set Selection Anchor\",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:(0,y.KeyChord)(2089,2080),weight:100}})}async run(f,c){var d;(d=a.get(c))===null||d===void 0||d.setSelectionAnchor()}}class n extends E.EditorAction{constructor(){super({id:\"editor.action.goToSelectionAnchor\",label:(0,_.localize)(3,null),alias:\"Go to Selection Anchor\",precondition:e.SelectionAnchorSet})}async run(f,c){var d;(d=a.get(c))===null||d===void 0||d.goToSelectionAnchor()}}class t extends E.EditorAction{constructor(){super({id:\"editor.action.selectFromAnchorToCursor\",label:(0,_.localize)(4,null),alias:\"Select from Anchor to Cursor\",precondition:e.SelectionAnchorSet,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:(0,y.KeyChord)(2089,2089),weight:100}})}async run(f,c){var d;(d=a.get(c))===null||d===void 0||d.selectFromAnchorToCursor()}}class r extends E.EditorAction{constructor(){super({id:\"editor.action.cancelSelectionAnchor\",label:(0,_.localize)(5,null),alias:\"Cancel Selection Anchor\",precondition:e.SelectionAnchorSet,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:9,weight:100}})}async run(f,c){var d;(d=a.get(c))===null||d===void 0||d.cancelSelectionAnchor()}}(0,E.registerEditorContribution)(a.ID,a,4),(0,E.registerEditorAction)(i),(0,E.registerEditorAction)(n),(0,E.registerEditorAction)(t),(0,E.registerEditorAction)(r)}),define(se[811],oe([1,0,16,21,552,651]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});class S extends L.EditorAction{constructor(b,a){super(a),this.left=b}run(b,a){if(!a.hasModel())return;const i=[],n=a.getSelections();for(const t of n)i.push(new y.MoveCaretCommand(t,this.left));a.pushUndoStop(),a.executeCommands(this.id,i),a.pushUndoStop()}}class p extends S{constructor(){super(!0,{id:\"editor.action.moveCarretLeftAction\",label:E.localize(0,null),alias:\"Move Selected Text Left\",precondition:k.EditorContextKeys.writable})}}class _ extends S{constructor(){super(!1,{id:\"editor.action.moveCarretRightAction\",label:E.localize(1,null),alias:\"Move Selected Text Right\",precondition:k.EditorContextKeys.writable})}}(0,L.registerEditorAction)(p),(0,L.registerEditorAction)(_)}),define(se[812],oe([1,0,16,130,206,5,21,652]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});class _ extends L.EditorAction{constructor(){super({id:\"editor.action.transposeLetters\",label:p.localize(0,null),alias:\"Transpose Letters\",precondition:S.EditorContextKeys.writable,kbOpts:{kbExpr:S.EditorContextKeys.textInputFocus,primary:0,mac:{primary:306},weight:100}})}run(b,a){if(!a.hasModel())return;const i=a.getModel(),n=[],t=a.getSelections();for(const r of t){if(!r.isEmpty())continue;const u=r.startLineNumber,f=r.startColumn,c=i.getLineMaxColumn(u);if(u===1&&(f===1||f===2&&c===2))continue;const d=f===c?r.getPosition():y.MoveOperations.rightPosition(i,r.getPosition().lineNumber,r.getPosition().column),s=y.MoveOperations.leftPosition(i,d),l=y.MoveOperations.leftPosition(i,s),o=i.getValueInRange(E.Range.fromPositions(l,s)),g=i.getValueInRange(E.Range.fromPositions(s,d)),h=E.Range.fromPositions(l,d);n.push(new k.ReplaceCommand(h,g+o))}n.length>0&&(a.pushUndoStop(),a.executeCommands(this.id,n),a.pushUndoStop())}}(0,L.registerEditorAction)(_)}),define(se[813],oe([1,0,65,16,5,21,32,301,554,663,30]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});class a extends k.EditorAction{constructor(f,c){super(c),this._type=f}run(f,c){const d=f.get(S.ILanguageConfigurationService);if(!c.hasModel())return;const s=c.getModel(),l=[],o=s.getOptions(),g=c.getOption(23),h=c.getSelections().map((C,w)=>({selection:C,index:w,ignoreFirstLine:!1}));h.sort((C,w)=>y.Range.compareRangesUsingStarts(C.selection,w.selection));let m=h[0];for(let C=1;C<h.length;C++){const w=h[C];m.selection.endLineNumber===w.selection.startLineNumber&&(m.index<w.index?w.ignoreFirstLine=!0:(m.ignoreFirstLine=!0,m=w))}for(const C of h)l.push(new _.LineCommentCommand(d,C.selection,o.tabSize,this._type,g.insertSpace,g.ignoreEmptyLines,C.ignoreFirstLine));c.pushUndoStop(),c.executeCommands(this.id,l),c.pushUndoStop()}}class i extends a{constructor(){super(0,{id:\"editor.action.commentLine\",label:v.localize(0,null),alias:\"Toggle Line Comment\",precondition:E.EditorContextKeys.writable,kbOpts:{kbExpr:E.EditorContextKeys.editorTextFocus,primary:2138,weight:100},menuOpts:{menuId:b.MenuId.MenubarEditMenu,group:\"5_insert\",title:v.localize(1,null),order:1}})}}class n extends a{constructor(){super(1,{id:\"editor.action.addCommentLine\",label:v.localize(2,null),alias:\"Add Line Comment\",precondition:E.EditorContextKeys.writable,kbOpts:{kbExpr:E.EditorContextKeys.editorTextFocus,primary:(0,L.KeyChord)(2089,2081),weight:100}})}}class t extends a{constructor(){super(2,{id:\"editor.action.removeCommentLine\",label:v.localize(3,null),alias:\"Remove Line Comment\",precondition:E.EditorContextKeys.writable,kbOpts:{kbExpr:E.EditorContextKeys.editorTextFocus,primary:(0,L.KeyChord)(2089,2099),weight:100}})}}class r extends k.EditorAction{constructor(){super({id:\"editor.action.blockComment\",label:v.localize(4,null),alias:\"Toggle Block Comment\",precondition:E.EditorContextKeys.writable,kbOpts:{kbExpr:E.EditorContextKeys.editorTextFocus,primary:1567,linux:{primary:3103},weight:100},menuOpts:{menuId:b.MenuId.MenubarEditMenu,group:\"5_insert\",title:v.localize(5,null),order:2}})}run(f,c){const d=f.get(S.ILanguageConfigurationService);if(!c.hasModel())return;const s=c.getOption(23),l=[],o=c.getSelections();for(const g of o)l.push(new p.BlockCommentCommand(g,s.insertSpace,d));c.pushUndoStop(),c.executeCommands(this.id,l),c.pushUndoStop()}}(0,k.registerEditorAction)(i),(0,k.registerEditorAction)(n),(0,k.registerEditorAction)(t),(0,k.registerEditorAction)(r)}),define(se[814],oe([1,0,2,16,21,665]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CursorRedo=e.CursorUndo=e.CursorUndoRedoController=void 0;class S{constructor(i){this.selections=i}equals(i){const n=this.selections.length,t=i.selections.length;if(n!==t)return!1;for(let r=0;r<n;r++)if(!this.selections[r].equalsSelection(i.selections[r]))return!1;return!0}}class p{constructor(i,n,t){this.cursorState=i,this.scrollTop=n,this.scrollLeft=t}}class _ extends L.Disposable{static get(i){return i.getContribution(_.ID)}constructor(i){super(),this._editor=i,this._isCursorUndoRedo=!1,this._undoStack=[],this._redoStack=[],this._register(i.onDidChangeModel(n=>{this._undoStack=[],this._redoStack=[]})),this._register(i.onDidChangeModelContent(n=>{this._undoStack=[],this._redoStack=[]})),this._register(i.onDidChangeCursorSelection(n=>{if(this._isCursorUndoRedo||!n.oldSelections||n.oldModelVersionId!==n.modelVersionId)return;const t=new S(n.oldSelections);this._undoStack.length>0&&this._undoStack[this._undoStack.length-1].cursorState.equals(t)||(this._undoStack.push(new p(t,i.getScrollTop(),i.getScrollLeft())),this._redoStack=[],this._undoStack.length>50&&this._undoStack.shift())}))}cursorUndo(){!this._editor.hasModel()||this._undoStack.length===0||(this._redoStack.push(new p(new S(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._undoStack.pop()))}cursorRedo(){!this._editor.hasModel()||this._redoStack.length===0||(this._undoStack.push(new p(new S(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._redoStack.pop()))}_applyState(i){this._isCursorUndoRedo=!0,this._editor.setSelections(i.cursorState.selections),this._editor.setScrollPosition({scrollTop:i.scrollTop,scrollLeft:i.scrollLeft}),this._isCursorUndoRedo=!1}}e.CursorUndoRedoController=_,_.ID=\"editor.contrib.cursorUndoRedoController\";class v extends k.EditorAction{constructor(){super({id:\"cursorUndo\",label:E.localize(0,null),alias:\"Cursor Undo\",precondition:void 0,kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:2099,weight:100}})}run(i,n,t){var r;(r=_.get(n))===null||r===void 0||r.cursorUndo()}}e.CursorUndo=v;class b extends k.EditorAction{constructor(){super({id:\"cursorRedo\",label:E.localize(1,null),alias:\"Cursor Redo\",precondition:void 0})}run(i,n,t){var r;(r=_.get(n))===null||r===void 0||r.cursorRedo()}}e.CursorRedo=b,(0,k.registerEditorContribution)(_.ID,_,0),(0,k.registerEditorAction)(v),(0,k.registerEditorAction)(b)}),define(se[815],oe([1,0,16,15,19,66,8,45,671]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorKeybindingCancellationTokenSource=void 0;const v=(0,S.createDecorator)(\"IEditorCancelService\"),b=new k.RawContextKey(\"cancellableOperation\",!1,(0,_.localize)(0,null));(0,p.registerSingleton)(v,class{constructor(){this._tokens=new WeakMap}add(i,n){let t=this._tokens.get(i);t||(t=i.invokeWithinContext(u=>{const f=b.bindTo(u.get(k.IContextKeyService)),c=new E.LinkedList;return{key:f,tokens:c}}),this._tokens.set(i,t));let r;return t.key.set(!0),r=t.tokens.push(n),()=>{r&&(r(),t.key.set(!t.tokens.isEmpty()),r=void 0)}}cancel(i){const n=this._tokens.get(i);if(!n)return;const t=n.tokens.pop();t&&(t.cancel(),n.key.set(!n.tokens.isEmpty()))}},1);class a extends y.CancellationTokenSource{constructor(n,t){super(t),this.editor=n,this._unregister=n.invokeWithinContext(r=>r.get(v).add(n,this))}dispose(){this._unregister(),super.dispose()}}e.EditorKeybindingCancellationTokenSource=a,(0,L.registerEditorCommand)(new class extends L.EditorCommand{constructor(){super({id:\"editor.cancelOperation\",kbOpts:{weight:100,primary:9},precondition:b})}runEditorCommand(i,n){i.get(v).cancel(n)}})}),define(se[105],oe([1,0,11,5,19,2,815]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextModelCancellationTokenSource=e.EditorStateCancellationTokenSource=e.EditorState=void 0;class p{constructor(a,i){if(this.flags=i,this.flags&1){const n=a.getModel();this.modelVersionId=n?L.format(\"{0}#{1}\",n.uri.toString(),n.getVersionId()):null}else this.modelVersionId=null;this.flags&4?this.position=a.getPosition():this.position=null,this.flags&2?this.selection=a.getSelection():this.selection=null,this.flags&8?(this.scrollLeft=a.getScrollLeft(),this.scrollTop=a.getScrollTop()):(this.scrollLeft=-1,this.scrollTop=-1)}_equals(a){if(!(a instanceof p))return!1;const i=a;return!(this.modelVersionId!==i.modelVersionId||this.scrollLeft!==i.scrollLeft||this.scrollTop!==i.scrollTop||!this.position&&i.position||this.position&&!i.position||this.position&&i.position&&!this.position.equals(i.position)||!this.selection&&i.selection||this.selection&&!i.selection||this.selection&&i.selection&&!this.selection.equalsRange(i.selection))}validate(a){return this._equals(new p(a,this.flags))}}e.EditorState=p;class _ extends S.EditorKeybindingCancellationTokenSource{constructor(a,i,n,t){super(a,t),this._listener=new E.DisposableStore,i&4&&this._listener.add(a.onDidChangeCursorPosition(r=>{(!n||!k.Range.containsPosition(n,r.position))&&this.cancel()})),i&2&&this._listener.add(a.onDidChangeCursorSelection(r=>{(!n||!k.Range.containsRange(n,r.selection))&&this.cancel()})),i&8&&this._listener.add(a.onDidScrollChange(r=>this.cancel())),i&1&&(this._listener.add(a.onDidChangeModel(r=>this.cancel())),this._listener.add(a.onDidChangeModelContent(r=>this.cancel())))}dispose(){this._listener.dispose(),super.dispose()}}e.EditorStateCancellationTokenSource=_;class v extends y.CancellationTokenSource{constructor(a,i){super(i),this._listener=a.onDidChangeContent(()=>this.cancel())}dispose(){this._listener.dispose(),super.dispose()}}e.TextModelCancellationTokenSource=v}),define(se[140],oe([1,0,13,19,12,2,22,136,5,24,18,51,105,654,25,50,88,81,116]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.applyCodeAction=e.ApplyCodeActionReason=e.getCodeActions=e.fixAllCommandId=e.organizeImportsCommandId=e.sourceActionCommandId=e.refactorCommandId=e.autoFixCommandId=e.quickFixCommandId=e.codeActionCommandId=void 0,e.codeActionCommandId=\"editor.action.codeAction\",e.quickFixCommandId=\"editor.action.quickFix\",e.autoFixCommandId=\"editor.action.autoFix\",e.refactorCommandId=\"editor.action.refactor\",e.sourceActionCommandId=\"editor.action.sourceAction\",e.organizeImportsCommandId=\"editor.action.organizeImports\",e.fixAllCommandId=\"editor.action.fixAll\";class d extends E.Disposable{static codeActionsPreferredComparator(I,T){return I.isPreferred&&!T.isPreferred?-1:!I.isPreferred&&T.isPreferred?1:0}static codeActionsComparator({action:I},{action:T}){return I.isAI&&!T.isAI?1:!I.isAI&&T.isAI?-1:(0,L.isNonEmptyArray)(I.diagnostics)?(0,L.isNonEmptyArray)(T.diagnostics)?d.codeActionsPreferredComparator(I,T):-1:(0,L.isNonEmptyArray)(T.diagnostics)?1:d.codeActionsPreferredComparator(I,T)}constructor(I,T,A){super(),this.documentation=T,this._register(A),this.allActions=[...I].sort(d.codeActionsComparator),this.validActions=this.allActions.filter(({action:P})=>!P.disabled)}get hasAutoFix(){return this.validActions.some(({action:I})=>!!I.kind&&c.CodeActionKind.QuickFix.contains(new c.CodeActionKind(I.kind))&&!!I.isPreferred)}get hasAIFix(){return this.validActions.some(({action:I})=>!!I.isAI)}get allAIFixes(){return this.validActions.every(({action:I})=>!!I.isAI)}}const s={actions:[],documentation:void 0};async function l(D,I,T,A,P,N){var M;const R=A.filter||{},x={...R,excludes:[...R.excludes||[],c.CodeActionKind.Notebook]},O={only:(M=R.include)===null||M===void 0?void 0:M.value,trigger:A.type},B=new i.TextModelCancellationTokenSource(I,N),W=A.type===2,V=o(D,I,W?x:R),K=new E.DisposableStore,F=V.map(async ie=>{try{P.report(ie);const ae=await ie.provideCodeActions(I,T,O,B.token);if(ae&&K.add(ae),B.token.isCancellationRequested)return s;const ne=(ae?.actions||[]).filter(J=>J&&(0,c.filtersAction)(R,J)),$=h(ie,ne,R.include);return{actions:ne.map(J=>new c.CodeActionItem(J,ie)),documentation:$}}catch(ae){if((0,y.isCancellationError)(ae))throw ae;return(0,y.onUnexpectedExternalError)(ae),s}}),q=D.onDidChange(()=>{const ie=D.all(I);(0,L.equals)(ie,V)||B.cancel()});try{const ie=await Promise.all(F),ae=ie.map($=>$.actions).flat(),ne=[...(0,L.coalesce)(ie.map($=>$.documentation)),...g(D,I,A,ae)];return new d(ae,ne,K)}finally{q.dispose(),B.dispose()}}e.getCodeActions=l;function o(D,I,T){return D.all(I).filter(A=>A.providedCodeActionKinds?A.providedCodeActionKinds.some(P=>(0,c.mayIncludeActionsOfKind)(T,new c.CodeActionKind(P))):!0)}function*g(D,I,T,A){var P,N,M;if(I&&A.length)for(const R of D.all(I))R._getAdditionalMenuItems&&(yield*(P=R._getAdditionalMenuItems)===null||P===void 0?void 0:P.call(R,{trigger:T.type,only:(M=(N=T.filter)===null||N===void 0?void 0:N.include)===null||M===void 0?void 0:M.value},A.map(x=>x.action)))}function h(D,I,T){if(!D.documentation)return;const A=D.documentation.map(P=>({kind:new c.CodeActionKind(P.kind),command:P.command}));if(T){let P;for(const N of A)N.kind.contains(T)&&(P?P.kind.contains(N.kind)&&(P=N):P=N);if(P)return P?.command}for(const P of I)if(P.kind){for(const N of A)if(N.kind.contains(new c.CodeActionKind(P.kind)))return N.command}}var m;(function(D){D.OnSave=\"onSave\",D.FromProblemsView=\"fromProblemsView\",D.FromCodeActions=\"fromCodeActions\",D.FromAILightbulb=\"fromAILightbulb\"})(m||(e.ApplyCodeActionReason=m={}));async function C(D,I,T,A,P=k.CancellationToken.None){var N;const M=D.get(p.IBulkEditService),R=D.get(t.ICommandService),x=D.get(f.ITelemetryService),O=D.get(r.INotificationService);if(x.publicLog2(\"codeAction.applyCodeAction\",{codeActionTitle:I.action.title,codeActionKind:I.action.kind,codeActionIsPreferred:!!I.action.isPreferred,reason:T}),await I.resolve(P),!P.isCancellationRequested&&!(!((N=I.action.edit)===null||N===void 0)&&N.edits.length&&!(await M.apply(I.action.edit,{editor:A?.editor,label:I.action.title,quotableLabel:I.action.title,code:\"undoredo.codeAction\",respectAutoSaveConfig:T!==m.OnSave,showPreview:A?.preview})).isApplied)&&I.action.command)try{await R.executeCommand(I.action.command.id,...I.action.command.arguments||[])}catch(B){const W=w(B);O.error(typeof W==\"string\"?W:n.localize(0,null))}}e.applyCodeAction=C;function w(D){return typeof D==\"string\"?D:D instanceof Error&&typeof D.message==\"string\"?D.message:void 0}t.CommandsRegistry.registerCommand(\"_executeCodeActionProvider\",async function(D,I,T,A,P){if(!(I instanceof S.URI))throw(0,y.illegalArgument)();const{codeActionProvider:N}=D.get(b.ILanguageFeaturesService),M=D.get(a.IModelService).getModel(I);if(!M)throw(0,y.illegalArgument)();const R=v.Selection.isISelection(T)?v.Selection.liftSelection(T):_.Range.isIRange(T)?M.validateRange(T):void 0;if(!R)throw(0,y.illegalArgument)();const x=typeof A==\"string\"?new c.CodeActionKind(A):void 0,O=await l(N,M,R,{type:1,triggerAction:c.CodeActionTriggerSource.Default,filter:{includeSourceActions:!0,include:x}},u.Progress.None,k.CancellationToken.None),B=[],W=Math.min(O.validActions.length,typeof P==\"number\"?P:0);for(let V=0;V<W;V++)B.push(O.validActions[V].resolve(k.CancellationToken.None));try{return await Promise.all(B),O.validActions.map(V=>V.action)}finally{setTimeout(()=>O.dispose(),100)}})}),define(se[816],oe([1,0,99,140,116,34]),function(te,e,L,k,y,E){\"use strict\";var S;Object.defineProperty(e,\"__esModule\",{value:!0}),e.CodeActionKeybindingResolver=void 0;let p=S=class{constructor(v){this.keybindingService=v}getResolver(){const v=new L.Lazy(()=>this.keybindingService.getKeybindings().filter(b=>S.codeActionCommands.indexOf(b.command)>=0).filter(b=>b.resolvedKeybinding).map(b=>{let a=b.commandArgs;return b.command===k.organizeImportsCommandId?a={kind:y.CodeActionKind.SourceOrganizeImports.value}:b.command===k.fixAllCommandId&&(a={kind:y.CodeActionKind.SourceFixAll.value}),{resolvedKeybinding:b.resolvedKeybinding,...y.CodeActionCommandArgs.fromUser(a,{kind:y.CodeActionKind.None,apply:\"never\"})}}));return b=>{if(b.kind){const a=this.bestKeybindingForCodeAction(b,v.value);return a?.resolvedKeybinding}}}bestKeybindingForCodeAction(v,b){if(!v.kind)return;const a=new y.CodeActionKind(v.kind);return b.filter(i=>i.kind.contains(a)).filter(i=>i.preferred?v.isPreferred:!0).reduceRight((i,n)=>i?i.kind.contains(n.kind)?n:i:n,void 0)}};e.CodeActionKeybindingResolver=p,p.codeActionCommands=[k.refactorCommandId,k.codeActionCommandId,k.sourceActionCommandId,k.organizeImportsCommandId,k.fixAllCommandId],e.CodeActionKeybindingResolver=p=S=ke([ge(0,E.IKeybindingService)],p)}),define(se[360],oe([1,0,14,12,6,2,49,36,10,24,15,88,116,140]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CodeActionModel=e.CodeActionsState=e.APPLY_FIX_ALL_COMMAND_ID=e.SUPPORTED_CODE_ACTIONS=void 0,e.SUPPORTED_CODE_ACTIONS=new b.RawContextKey(\"supportedCodeAction\",\"\"),e.APPLY_FIX_ALL_COMMAND_ID=\"_typescript.applyFixAllCodeAction\";class t extends E.Disposable{constructor(d,s,l,o=250){super(),this._editor=d,this._markerService=s,this._signalChange=l,this._delay=o,this._autoTriggerTimer=this._register(new L.TimeoutTimer),this._register(this._markerService.onMarkerChanged(g=>this._onMarkerChanges(g))),this._register(this._editor.onDidChangeCursorPosition(()=>this._tryAutoTrigger()))}trigger(d){const s=this._getRangeOfSelectionUnlessWhitespaceEnclosed(d);this._signalChange(s?{trigger:d,selection:s}:void 0)}_onMarkerChanges(d){const s=this._editor.getModel();s&&d.some(l=>(0,S.isEqual)(l,s.uri))&&this._tryAutoTrigger()}_tryAutoTrigger(){this._autoTriggerTimer.cancelAndSet(()=>{this.trigger({type:2,triggerAction:i.CodeActionTriggerSource.Default})},this._delay)}_getRangeOfSelectionUnlessWhitespaceEnclosed(d){if(!this._editor.hasModel())return;const s=this._editor.getSelection();if(d.type===1)return s;const l=this._editor.getOption(64).enabled;if(l!==p.ShowLightbulbIconMode.Off){{if(l===p.ShowLightbulbIconMode.On)return s;if(l===p.ShowLightbulbIconMode.OnCode){if(!s.isEmpty())return s;const g=this._editor.getModel(),{lineNumber:h,column:m}=s.getPosition(),C=g.getLineContent(h);if(C.length===0)return;if(m===1){if(/\\s/.test(C[0]))return}else if(m===g.getLineMaxColumn(h)){if(/\\s/.test(C[C.length-1]))return}else if(/\\s/.test(C[m-2])&&/\\s/.test(C[m-1]))return}}return s}}}var r;(function(c){c.Empty={type:0};class d{constructor(l,o,g){this.trigger=l,this.position=o,this._cancellablePromise=g,this.type=1,this.actions=g.catch(h=>{if((0,k.isCancellationError)(h))return u;throw h})}cancel(){this._cancellablePromise.cancel()}}c.Triggered=d})(r||(e.CodeActionsState=r={}));const u=Object.freeze({allActions:[],validActions:[],dispose:()=>{},documentation:[],hasAutoFix:!1,hasAIFix:!1,allAIFixes:!1});class f extends E.Disposable{constructor(d,s,l,o,g,h){super(),this._editor=d,this._registry=s,this._markerService=l,this._progressService=g,this._configurationService=h,this._codeActionOracle=this._register(new E.MutableDisposable),this._state=r.Empty,this._onDidChangeState=this._register(new y.Emitter),this.onDidChangeState=this._onDidChangeState.event,this._disposed=!1,this._supportedCodeActions=e.SUPPORTED_CODE_ACTIONS.bindTo(o),this._register(this._editor.onDidChangeModel(()=>this._update())),this._register(this._editor.onDidChangeModelLanguage(()=>this._update())),this._register(this._registry.onDidChange(()=>this._update())),this._register(this._editor.onDidChangeConfiguration(m=>{m.hasChanged(64)&&this._update()})),this._update()}dispose(){this._disposed||(this._disposed=!0,super.dispose(),this.setState(r.Empty,!0))}_settingEnabledNearbyQuickfixes(){var d;const s=(d=this._editor)===null||d===void 0?void 0:d.getModel();return this._configurationService?this._configurationService.getValue(\"editor.codeActionWidget.includeNearbyQuickFixes\",{resource:s?.uri}):!1}_update(){if(this._disposed)return;this._codeActionOracle.value=void 0,this.setState(r.Empty);const d=this._editor.getModel();if(d&&this._registry.has(d)&&!this._editor.getOption(90)){const s=this._registry.all(d).flatMap(l=>{var o;return(o=l.providedCodeActionKinds)!==null&&o!==void 0?o:[]});this._supportedCodeActions.set(s.join(\" \")),this._codeActionOracle.value=new t(this._editor,this._markerService,l=>{var o;if(!l){this.setState(r.Empty);return}const g=l.selection.getStartPosition(),h=(0,L.createCancelablePromise)(async m=>{var C,w,D,I,T,A,P,N,M,R;if(this._settingEnabledNearbyQuickfixes()&&l.trigger.type===1&&(l.trigger.triggerAction===i.CodeActionTriggerSource.QuickFix||!((w=(C=l.trigger.filter)===null||C===void 0?void 0:C.include)===null||w===void 0)&&w.contains(i.CodeActionKind.QuickFix))){const x=await(0,n.getCodeActions)(this._registry,d,l.selection,l.trigger,a.Progress.None,m),O=[...x.allActions];if(m.isCancellationRequested)return u;const B=(D=x.validActions)===null||D===void 0?void 0:D.some(V=>V.action.kind?i.CodeActionKind.QuickFix.contains(new i.CodeActionKind(V.action.kind)):!1),W=this._markerService.read({resource:d.uri});if(B){for(const V of x.validActions)!((T=(I=V.action.command)===null||I===void 0?void 0:I.arguments)===null||T===void 0)&&T.some(K=>typeof K==\"string\"&&K.includes(e.APPLY_FIX_ALL_COMMAND_ID))&&(V.action.diagnostics=[...W.filter(K=>K.relatedInformation)]);return{validActions:x.validActions,allActions:O,documentation:x.documentation,hasAutoFix:x.hasAutoFix,hasAIFix:x.hasAIFix,allAIFixes:x.allAIFixes,dispose:()=>{x.dispose()}}}else if(!B&&W.length>0){const V=l.selection.getPosition();let K=V,F=Number.MAX_VALUE;const q=[...x.validActions];for(const ae of W){const ne=ae.endColumn,$=ae.endLineNumber,J=ae.startLineNumber;if($===V.lineNumber||J===V.lineNumber){K=new _.Position($,ne);const Q={type:l.trigger.type,triggerAction:l.trigger.triggerAction,filter:{include:!((A=l.trigger.filter)===null||A===void 0)&&A.include?(P=l.trigger.filter)===null||P===void 0?void 0:P.include:i.CodeActionKind.QuickFix},autoApply:l.trigger.autoApply,context:{notAvailableMessage:((N=l.trigger.context)===null||N===void 0?void 0:N.notAvailableMessage)||\"\",position:K}},re=new v.Selection(K.lineNumber,K.column,K.lineNumber,K.column),de=await(0,n.getCodeActions)(this._registry,d,re,Q,a.Progress.None,m);if(de.validActions.length!==0){for(const he of de.validActions)!((R=(M=he.action.command)===null||M===void 0?void 0:M.arguments)===null||R===void 0)&&R.some(me=>typeof me==\"string\"&&me.includes(e.APPLY_FIX_ALL_COMMAND_ID))&&(he.action.diagnostics=[...W.filter(me=>me.relatedInformation)]);x.allActions.length===0&&O.push(...de.allActions),Math.abs(V.column-ne)<F?q.unshift(...de.validActions):q.push(...de.validActions)}F=Math.abs(V.column-ne)}}const ie=q.filter((ae,ne,$)=>$.findIndex(J=>J.action.title===ae.action.title)===ne);return ie.sort((ae,ne)=>ae.action.isPreferred&&!ne.action.isPreferred?-1:!ae.action.isPreferred&&ne.action.isPreferred||ae.action.isAI&&!ne.action.isAI?1:!ae.action.isAI&&ne.action.isAI?-1:0),{validActions:ie,allActions:O,documentation:x.documentation,hasAutoFix:x.hasAutoFix,hasAIFix:x.hasAIFix,allAIFixes:x.allAIFixes,dispose:()=>{x.dispose()}}}}return(0,n.getCodeActions)(this._registry,d,l.selection,l.trigger,a.Progress.None,m)});l.trigger.type===1&&((o=this._progressService)===null||o===void 0||o.showWhile(h,250)),this.setState(new r.Triggered(l.trigger,g,h))},void 0),this._codeActionOracle.value.trigger({type:2,triggerAction:i.CodeActionTriggerSource.Default})}else this._supportedCodeActions.reset()}trigger(d){var s;(s=this._codeActionOracle.value)===null||s===void 0||s.trigger(d)}setState(d,s){d!==this._state&&(this._state.type===1&&this._state.cancel(),this._state=d,!s&&!this._disposed&&this._onDidChangeState.fire(d))}}e.CodeActionModel=f}),define(se[361],oe([1,0,7,63,26,6,2,28,210,140,659,25,34,455]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.LightBulbWidget=void 0;var t;(function(u){u.Hidden={type:0};class f{constructor(d,s,l,o){this.actions=d,this.trigger=s,this.editorPosition=l,this.widgetPosition=o,this.type=1}}u.Showing=f})(t||(t={}));let r=n=class extends S.Disposable{constructor(f,c,d){super(),this._editor=f,this._keybindingService=c,this._onClick=this._register(new E.Emitter),this.onClick=this._onClick.event,this._state=t.Hidden,this._iconClasses=[],this._domNode=L.$(\"div.lightBulbWidget\"),this._register(k.Gesture.ignoreTarget(this._domNode)),this._editor.addContentWidget(this),this._register(this._editor.onDidChangeModelContent(s=>{const l=this._editor.getModel();(this.state.type!==1||!l||this.state.editorPosition.lineNumber>=l.getLineCount())&&this.hide()})),this._register(L.addStandardDisposableGenericMouseDownListener(this._domNode,s=>{if(this.state.type!==1)return;this._editor.focus(),s.preventDefault();const{top:l,height:o}=L.getDomNodePagePosition(this._domNode),g=this._editor.getOption(66);let h=Math.floor(g/3);this.state.widgetPosition.position!==null&&this.state.widgetPosition.position.lineNumber<this.state.editorPosition.lineNumber&&(h+=g),this._onClick.fire({x:s.posx,y:l+o+h,actions:this.state.actions,trigger:this.state.trigger})})),this._register(L.addDisposableListener(this._domNode,\"mouseenter\",s=>{(s.buttons&1)===1&&this.hide()})),this._register(E.Event.runAndSubscribe(this._keybindingService.onDidUpdateKeybindings,()=>{var s,l,o,g;this._preferredKbLabel=(l=(s=this._keybindingService.lookupKeybinding(v.autoFixCommandId))===null||s===void 0?void 0:s.getLabel())!==null&&l!==void 0?l:void 0,this._quickFixKbLabel=(g=(o=this._keybindingService.lookupKeybinding(v.quickFixCommandId))===null||o===void 0?void 0:o.getLabel())!==null&&g!==void 0?g:void 0,this._updateLightBulbTitleAndIcon()}))}dispose(){super.dispose(),this._editor.removeContentWidget(this)}getId(){return\"LightBulbWidget\"}getDomNode(){return this._domNode}getPosition(){return this._state.type===1?this._state.widgetPosition:null}update(f,c,d){if(f.validActions.length<=0)return this.hide();if(!this._editor.getOptions().get(64).enabled)return this.hide();const l=this._editor.getModel();if(!l)return this.hide();const{lineNumber:o,column:g}=l.validatePosition(d),h=l.getOptions().tabSize,m=this._editor.getOptions().get(50),C=l.getLineContent(o),w=(0,_.computeIndentLevel)(C,h),D=m.spaceWidth*w>22,I=P=>P>2&&this._editor.getTopForLineNumber(P)===this._editor.getTopForLineNumber(P-1);let T=o,A=1;if(!D){if(o>1&&!I(o-1))T-=1;else if(o<l.getLineCount()&&!I(o+1))T+=1;else if(g*m.spaceWidth<22)return this.hide();A=/^\\S\\s*$/.test(l.getLineContent(T))?2:1}this.state=new t.Showing(f,c,d,{position:{lineNumber:T,column:A},preference:n._posPref}),this._editor.layoutContentWidget(this)}hide(){this.state!==t.Hidden&&(this.state=t.Hidden,this._editor.layoutContentWidget(this))}get state(){return this._state}set state(f){this._state=f,this._updateLightBulbTitleAndIcon()}_updateLightBulbTitleAndIcon(){if(this._domNode.classList.remove(...this._iconClasses),this._iconClasses=[],this.state.type!==1)return;let f,c=!1;this.state.actions.allAIFixes?(f=y.Codicon.sparkleFilled,this.state.actions.validActions.length===1&&(c=!0)):this.state.actions.hasAutoFix?this.state.actions.hasAIFix?f=y.Codicon.lightbulbSparkleAutofix:f=y.Codicon.lightbulbAutofix:this.state.actions.hasAIFix?f=y.Codicon.lightbulbSparkle:f=y.Codicon.lightBulb,this._updateLightbulbTitle(this.state.actions.hasAutoFix,c),this._iconClasses=p.ThemeIcon.asClassNameArray(f),this._domNode.classList.add(...this._iconClasses)}_updateLightbulbTitle(f,c){this.state.type===1&&(c?this.title=b.localize(0,null,this.state.actions.validActions[0].action.title):f&&this._preferredKbLabel?this.title=b.localize(1,null,this._preferredKbLabel):!f&&this._quickFixKbLabel?this.title=b.localize(2,null,this._quickFixKbLabel):f||(this.title=b.localize(3,null)))}set title(f){this._domNode.title=f}};e.LightBulbWidget=r,r.ID=\"editor.contrib.lightbulbWidget\",r._posPref=[0],e.LightBulbWidget=r=n=ke([ge(1,i.IKeybindingService),ge(2,a.ICommandService)],r)}),define(se[817],oe([1,0,16,149,676]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});class E extends L.EditorAction{constructor(){super({id:\"editor.action.fontZoomIn\",label:y.localize(0,null),alias:\"Increase Editor Font Size\",precondition:void 0})}run(v,b){k.EditorZoom.setZoomLevel(k.EditorZoom.getZoomLevel()+1)}}class S extends L.EditorAction{constructor(){super({id:\"editor.action.fontZoomOut\",label:y.localize(1,null),alias:\"Decrease Editor Font Size\",precondition:void 0})}run(v,b){k.EditorZoom.setZoomLevel(k.EditorZoom.getZoomLevel()-1)}}class p extends L.EditorAction{constructor(){super({id:\"editor.action.fontZoomReset\",label:y.localize(2,null),alias:\"Reset Editor Font Size\",precondition:void 0})}run(v,b){k.EditorZoom.setZoomLevel(0)}}(0,L.registerEditorAction)(E),(0,L.registerEditorAction)(S),(0,L.registerEditorAction)(p)}),define(se[362],oe([1,0,13,19,12,52,66,20,22,105,153,10,5,24,121,68,305,25,760,8,18,64,122]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getOnTypeFormattingEdits=e.getDocumentFormattingEditsUntilResult=e.getDocumentRangeFormattingEditsUntilResult=e.formatDocumentWithProvider=e.formatDocumentWithSelectedProvider=e.formatDocumentRangesWithProvider=e.formatDocumentRangesWithSelectedProvider=e.FormattingConflicts=e.getRealAndSyntheticDocumentFormattersOrdered=void 0;function g(P,N,M){const R=[],x=new c.ExtensionIdentifierSet,O=P.ordered(M);for(const W of O)R.push(W),W.extensionId&&x.add(W.extensionId);const B=N.ordered(M);for(const W of B){if(W.extensionId){if(x.has(W.extensionId))continue;x.add(W.extensionId)}R.push({displayName:W.displayName,extensionId:W.extensionId,provideDocumentFormattingEdits(V,K,F){return W.provideDocumentRangeFormattingEdits(V,V.getFullModelRange(),K,F)}})}return R}e.getRealAndSyntheticDocumentFormattersOrdered=g;class h{static setFormatterSelector(N){return{dispose:h._selectors.unshift(N)}}static async select(N,M,R,x){if(N.length===0)return;const O=E.Iterable.first(h._selectors);if(O)return await O(N,M,R,x)}}e.FormattingConflicts=h,h._selectors=new S.LinkedList;async function m(P,N,M,R,x,O,B){const W=P.get(d.IInstantiationService),{documentRangeFormattingEditProvider:V}=P.get(s.ILanguageFeaturesService),K=(0,b.isCodeEditor)(N)?N.getModel():N,F=V.ordered(K),q=await h.select(F,K,R,2);q&&(x.report(q),await W.invokeFunction(C,q,N,M,O,B))}e.formatDocumentRangesWithSelectedProvider=m;async function C(P,N,M,R,x,O){var B,W;const V=P.get(t.IEditorWorkerService),K=P.get(l.ILogService),F=P.get(o.IAudioCueService);let q,ie;(0,b.isCodeEditor)(M)?(q=M.getModel(),ie=new v.EditorStateCancellationTokenSource(M,5,void 0,x)):(q=M,ie=new v.TextModelCancellationTokenSource(M,x));const ae=[];let ne=0;for(const de of(0,L.asArray)(R).sort(i.Range.compareRangesUsingStarts))ne>0&&i.Range.areIntersectingOrTouching(ae[ne-1],de)?ae[ne-1]=i.Range.fromPositions(ae[ne-1].getStartPosition(),de.getEndPosition()):ne=ae.push(de);const $=async de=>{var he,me;K.trace(\"[format][provideDocumentRangeFormattingEdits] (request)\",(he=N.extensionId)===null||he===void 0?void 0:he.value,de);const X=await N.provideDocumentRangeFormattingEdits(q,de,q.getFormattingOptions(),ie.token)||[];return K.trace(\"[format][provideDocumentRangeFormattingEdits] (response)\",(me=N.extensionId)===null||me===void 0?void 0:me.value,X),X},J=(de,he)=>{if(!de.length||!he.length)return!1;const me=de.reduce((X,U)=>i.Range.plusRange(X,U.range),de[0].range);if(!he.some(X=>i.Range.intersectRanges(me,X.range)))return!1;for(const X of de)for(const U of he)if(i.Range.intersectRanges(X.range,U.range))return!0;return!1},Q=[],re=[];try{if(typeof N.provideDocumentRangesFormattingEdits==\"function\"){K.trace(\"[format][provideDocumentRangeFormattingEdits] (request)\",(B=N.extensionId)===null||B===void 0?void 0:B.value,ae);const de=await N.provideDocumentRangesFormattingEdits(q,ae,q.getFormattingOptions(),ie.token)||[];K.trace(\"[format][provideDocumentRangeFormattingEdits] (response)\",(W=N.extensionId)===null||W===void 0?void 0:W.value,de),re.push(de)}else{for(const de of ae){if(ie.token.isCancellationRequested)return!0;re.push(await $(de))}for(let de=0;de<ae.length;++de)for(let he=de+1;he<ae.length;++he){if(ie.token.isCancellationRequested)return!0;if(J(re[de],re[he])){const me=i.Range.plusRange(ae[de],ae[he]),X=await $(me);ae.splice(he,1),ae.splice(de,1),ae.push(me),re.splice(he,1),re.splice(de,1),re.push(X),de=0,he=0}}}for(const de of re){if(ie.token.isCancellationRequested)return!0;const he=await V.computeMoreMinimalEdits(q.uri,de);he&&Q.push(...he)}}finally{ie.dispose()}if(Q.length===0)return!1;if((0,b.isCodeEditor)(M))u.FormattingEdit.execute(M,Q,!0),M.revealPositionInCenterIfOutsideViewport(M.getPosition(),1);else{const[{range:de}]=Q,he=new n.Selection(de.startLineNumber,de.startColumn,de.endLineNumber,de.endColumn);q.pushEditOperations([he],Q.map(me=>({text:me.text,range:i.Range.lift(me.range),forceMoveMarkers:!0})),me=>{for(const{range:X}of me)if(i.Range.areIntersectingOrTouching(X,he))return[new n.Selection(X.startLineNumber,X.startColumn,X.endLineNumber,X.endColumn)];return null})}return F.playAudioCue(o.AudioCue.format,{userGesture:O}),!0}e.formatDocumentRangesWithProvider=C;async function w(P,N,M,R,x,O){const B=P.get(d.IInstantiationService),W=P.get(s.ILanguageFeaturesService),V=(0,b.isCodeEditor)(N)?N.getModel():N,K=g(W.documentFormattingEditProvider,W.documentRangeFormattingEditProvider,V),F=await h.select(K,V,M,1);F&&(R.report(F),await B.invokeFunction(D,F,N,M,x,O))}e.formatDocumentWithSelectedProvider=w;async function D(P,N,M,R,x,O){const B=P.get(t.IEditorWorkerService),W=P.get(o.IAudioCueService);let V,K;(0,b.isCodeEditor)(M)?(V=M.getModel(),K=new v.EditorStateCancellationTokenSource(M,5,void 0,x)):(V=M,K=new v.TextModelCancellationTokenSource(M,x));let F;try{const q=await N.provideDocumentFormattingEdits(V,V.getFormattingOptions(),K.token);if(F=await B.computeMoreMinimalEdits(V.uri,q),K.token.isCancellationRequested)return!0}finally{K.dispose()}if(!F||F.length===0)return!1;if((0,b.isCodeEditor)(M))u.FormattingEdit.execute(M,F,R!==2),R!==2&&M.revealPositionInCenterIfOutsideViewport(M.getPosition(),1);else{const[{range:q}]=F,ie=new n.Selection(q.startLineNumber,q.startColumn,q.endLineNumber,q.endColumn);V.pushEditOperations([ie],F.map(ae=>({text:ae.text,range:i.Range.lift(ae.range),forceMoveMarkers:!0})),ae=>{for(const{range:ne}of ae)if(i.Range.areIntersectingOrTouching(ne,ie))return[new n.Selection(ne.startLineNumber,ne.startColumn,ne.endLineNumber,ne.endColumn)];return null})}return W.playAudioCue(o.AudioCue.format,{userGesture:O}),!0}e.formatDocumentWithProvider=D;async function I(P,N,M,R,x,O){const B=N.documentRangeFormattingEditProvider.ordered(M);for(const W of B){const V=await Promise.resolve(W.provideDocumentRangeFormattingEdits(M,R,x,O)).catch(y.onUnexpectedExternalError);if((0,L.isNonEmptyArray)(V))return await P.computeMoreMinimalEdits(M.uri,V)}}e.getDocumentRangeFormattingEditsUntilResult=I;async function T(P,N,M,R,x){const O=g(N.documentFormattingEditProvider,N.documentRangeFormattingEditProvider,M);for(const B of O){const W=await Promise.resolve(B.provideDocumentFormattingEdits(M,R,x)).catch(y.onUnexpectedExternalError);if((0,L.isNonEmptyArray)(W))return await P.computeMoreMinimalEdits(M.uri,W)}}e.getDocumentFormattingEditsUntilResult=T;function A(P,N,M,R,x,O,B){const W=N.onTypeFormattingEditProvider.ordered(M);return W.length===0||W[0].autoFormatTriggerCharacters.indexOf(x)<0?Promise.resolve(void 0):Promise.resolve(W[0].provideOnTypeFormattingEdits(M,R,x,O,B)).catch(y.onUnexpectedExternalError).then(V=>P.computeMoreMinimalEdits(M.uri,V))}e.getOnTypeFormattingEdits=A,f.CommandsRegistry.registerCommand(\"_executeFormatRangeProvider\",async function(P,...N){const[M,R,x]=N;(0,p.assertType)(_.URI.isUri(M)),(0,p.assertType)(i.Range.isIRange(R));const O=P.get(r.ITextModelService),B=P.get(t.IEditorWorkerService),W=P.get(s.ILanguageFeaturesService),V=await O.createModelReference(M);try{return I(B,W,V.object.textEditorModel,i.Range.lift(R),x,k.CancellationToken.None)}finally{V.dispose()}}),f.CommandsRegistry.registerCommand(\"_executeFormatDocumentProvider\",async function(P,...N){const[M,R]=N;(0,p.assertType)(_.URI.isUri(M));const x=P.get(r.ITextModelService),O=P.get(t.IEditorWorkerService),B=P.get(s.ILanguageFeaturesService),W=await x.createModelReference(M);try{return T(O,B,W.object.textEditorModel,R,k.CancellationToken.None)}finally{W.dispose()}}),f.CommandsRegistry.registerCommand(\"_executeFormatOnTypeProvider\",async function(P,...N){const[M,R,x,O]=N;(0,p.assertType)(_.URI.isUri(M)),(0,p.assertType)(a.Position.isIPosition(R)),(0,p.assertType)(typeof x==\"string\");const B=P.get(r.ITextModelService),W=P.get(t.IEditorWorkerService),V=P.get(s.ILanguageFeaturesService),K=await B.createModelReference(M);try{return A(W,V,K.object.textEditorModel,a.Position.lift(R),x,O,k.CancellationToken.None)}finally{K.dispose()}})}),define(se[818],oe([1,0,13,19,12,65,2,16,33,128,5,21,121,18,362,305,677,122,25,15,8,88]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FormatOnType=void 0;let o=class{constructor(w,D,I,T){this._editor=w,this._languageFeaturesService=D,this._workerService=I,this._audioCueService=T,this._disposables=new S.DisposableStore,this._sessionDisposables=new S.DisposableStore,this._disposables.add(D.onTypeFormattingEditProvider.onDidChange(this._update,this)),this._disposables.add(w.onDidChangeModel(()=>this._update())),this._disposables.add(w.onDidChangeModelLanguage(()=>this._update())),this._disposables.add(w.onDidChangeConfiguration(A=>{A.hasChanged(56)&&this._update()})),this._update()}dispose(){this._disposables.dispose(),this._sessionDisposables.dispose()}_update(){if(this._sessionDisposables.clear(),!this._editor.getOption(56)||!this._editor.hasModel())return;const w=this._editor.getModel(),[D]=this._languageFeaturesService.onTypeFormattingEditProvider.ordered(w);if(!D||!D.autoFormatTriggerCharacters)return;const I=new v.CharacterSet;for(const T of D.autoFormatTriggerCharacters)I.add(T.charCodeAt(0));this._sessionDisposables.add(this._editor.onDidType(T=>{const A=T.charCodeAt(T.length-1);I.has(A)&&this._trigger(String.fromCharCode(A))}))}_trigger(w){if(!this._editor.hasModel()||this._editor.getSelections().length>1||!this._editor.getSelection().isEmpty())return;const D=this._editor.getModel(),I=this._editor.getPosition(),T=new k.CancellationTokenSource,A=this._editor.onDidChangeModelContent(P=>{if(P.isFlush){T.cancel(),A.dispose();return}for(let N=0,M=P.changes.length;N<M;N++)if(P.changes[N].range.endLineNumber<=I.lineNumber){T.cancel(),A.dispose();return}});(0,t.getOnTypeFormattingEdits)(this._workerService,this._languageFeaturesService,D,I,w,D.getFormattingOptions(),T.token).then(P=>{T.token.isCancellationRequested||(0,L.isNonEmptyArray)(P)&&(this._audioCueService.playAudioCue(f.AudioCue.format,{userGesture:!1}),r.FormattingEdit.execute(this._editor,P,!0))}).finally(()=>{A.dispose()})}};e.FormatOnType=o,o.ID=\"editor.contrib.autoFormat\",e.FormatOnType=o=ke([ge(1,n.ILanguageFeaturesService),ge(2,i.IEditorWorkerService),ge(3,f.IAudioCueService)],o);let g=class{constructor(w,D,I){this.editor=w,this._languageFeaturesService=D,this._instantiationService=I,this._callOnDispose=new S.DisposableStore,this._callOnModel=new S.DisposableStore,this._callOnDispose.add(w.onDidChangeConfiguration(()=>this._update())),this._callOnDispose.add(w.onDidChangeModel(()=>this._update())),this._callOnDispose.add(w.onDidChangeModelLanguage(()=>this._update())),this._callOnDispose.add(D.documentRangeFormattingEditProvider.onDidChange(this._update,this))}dispose(){this._callOnDispose.dispose(),this._callOnModel.dispose()}_update(){this._callOnModel.clear(),this.editor.getOption(55)&&this.editor.hasModel()&&this._languageFeaturesService.documentRangeFormattingEditProvider.has(this.editor.getModel())&&this._callOnModel.add(this.editor.onDidPaste(({range:w})=>this._trigger(w)))}_trigger(w){this.editor.hasModel()&&(this.editor.getSelections().length>1||this._instantiationService.invokeFunction(t.formatDocumentRangesWithSelectedProvider,this.editor,w,2,l.Progress.None,k.CancellationToken.None,!1).catch(y.onUnexpectedError))}};g.ID=\"editor.contrib.formatOnPaste\",g=ke([ge(1,n.ILanguageFeaturesService),ge(2,s.IInstantiationService)],g);class h extends p.EditorAction{constructor(){super({id:\"editor.action.formatDocument\",label:u.localize(0,null),alias:\"Format Document\",precondition:d.ContextKeyExpr.and(a.EditorContextKeys.notInCompositeEditor,a.EditorContextKeys.writable,a.EditorContextKeys.hasDocumentFormattingProvider),kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:1572,linux:{primary:3111},weight:100},contextMenuOpts:{group:\"1_modification\",order:1.3}})}async run(w,D){if(D.hasModel()){const I=w.get(s.IInstantiationService);await w.get(l.IEditorProgressService).showWhile(I.invokeFunction(t.formatDocumentWithSelectedProvider,D,1,l.Progress.None,k.CancellationToken.None,!0),250)}}}class m extends p.EditorAction{constructor(){super({id:\"editor.action.formatSelection\",label:u.localize(1,null),alias:\"Format Selection\",precondition:d.ContextKeyExpr.and(a.EditorContextKeys.writable,a.EditorContextKeys.hasDocumentSelectionFormattingProvider),kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2084),weight:100},contextMenuOpts:{when:a.EditorContextKeys.hasNonEmptySelection,group:\"1_modification\",order:1.31}})}async run(w,D){if(!D.hasModel())return;const I=w.get(s.IInstantiationService),T=D.getModel(),A=D.getSelections().map(N=>N.isEmpty()?new b.Range(N.startLineNumber,1,N.startLineNumber,T.getLineMaxColumn(N.startLineNumber)):N);await w.get(l.IEditorProgressService).showWhile(I.invokeFunction(t.formatDocumentRangesWithSelectedProvider,D,A,1,l.Progress.None,k.CancellationToken.None,!0),250)}}(0,p.registerEditorContribution)(o.ID,o,2),(0,p.registerEditorContribution)(g.ID,g,2),(0,p.registerEditorAction)(h),(0,p.registerEditorAction)(m),c.CommandsRegistry.registerCommand(\"editor.action.format\",async C=>{const w=C.get(_.ICodeEditorService).getFocusedCodeEditor();if(!w||!w.hasModel())return;const D=C.get(c.ICommandService);w.getSelection().isEmpty()?await D.executeCommand(\"editor.action.formatDocument\"):await D.executeCommand(\"editor.action.formatSelection\")})}),define(se[252],oe([1,0,13,19,12,16,18,161]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getReferencesAtPosition=e.getTypeDefinitionsAtPosition=e.getImplementationsAtPosition=e.getDeclarationsAtPosition=e.getDefinitionsAtPosition=void 0;async function _(r,u,f,c){const s=f.ordered(r).map(o=>Promise.resolve(c(o,r,u)).then(void 0,g=>{(0,y.onUnexpectedExternalError)(g)})),l=await Promise.all(s);return(0,L.coalesce)(l.flat())}function v(r,u,f,c){return _(u,f,r,(d,s,l)=>d.provideDefinition(s,l,c))}e.getDefinitionsAtPosition=v;function b(r,u,f,c){return _(u,f,r,(d,s,l)=>d.provideDeclaration(s,l,c))}e.getDeclarationsAtPosition=b;function a(r,u,f,c){return _(u,f,r,(d,s,l)=>d.provideImplementation(s,l,c))}e.getImplementationsAtPosition=a;function i(r,u,f,c){return _(u,f,r,(d,s,l)=>d.provideTypeDefinition(s,l,c))}e.getTypeDefinitionsAtPosition=i;function n(r,u,f,c,d){return _(u,f,r,async(s,l,o)=>{const g=await s.provideReferences(l,o,{includeDeclaration:!0},d);if(!c||!g||g.length!==2)return g;const h=await s.provideReferences(l,o,{includeDeclaration:!1},d);return h&&h.length===1?h:g})}e.getReferencesAtPosition=n;async function t(r){const u=await r(),f=new p.ReferencesModel(u,\"\"),c=f.references.map(d=>d.link);return f.dispose(),c}(0,E.registerModelAndPositionCommand)(\"_executeDefinitionProvider\",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=v(c.definitionProvider,u,f,k.CancellationToken.None);return t(()=>d)}),(0,E.registerModelAndPositionCommand)(\"_executeTypeDefinitionProvider\",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=i(c.typeDefinitionProvider,u,f,k.CancellationToken.None);return t(()=>d)}),(0,E.registerModelAndPositionCommand)(\"_executeDeclarationProvider\",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=b(c.declarationProvider,u,f,k.CancellationToken.None);return t(()=>d)}),(0,E.registerModelAndPositionCommand)(\"_executeReferenceProvider\",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=n(c.referenceProvider,u,f,!1,k.CancellationToken.None);return t(()=>d)}),(0,E.registerModelAndPositionCommand)(\"_executeImplementationProvider\",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=a(c.implementationProvider,u,f,k.CancellationToken.None);return t(()=>d)})}),define(se[819],oe([1,0,6,2,49,16,33,5,686,15,45,8,34,124,50]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ISymbolNavigationService=e.ctxHasSymbols=void 0,e.ctxHasSymbols=new v.RawContextKey(\"hasSymbols\",!1,(0,_.localize)(0,null)),e.ISymbolNavigationService=(0,a.createDecorator)(\"ISymbolNavigationService\");let r=class{constructor(c,d,s,l){this._editorService=d,this._notificationService=s,this._keybindingService=l,this._currentModel=void 0,this._currentIdx=-1,this._ignoreEditorChange=!1,this._ctxHasSymbols=e.ctxHasSymbols.bindTo(c)}reset(){var c,d;this._ctxHasSymbols.reset(),(c=this._currentState)===null||c===void 0||c.dispose(),(d=this._currentMessage)===null||d===void 0||d.dispose(),this._currentModel=void 0,this._currentIdx=-1}put(c){const d=c.parent.parent;if(d.references.length<=1){this.reset();return}this._currentModel=d,this._currentIdx=d.references.indexOf(c),this._ctxHasSymbols.set(!0),this._showMessage();const s=new u(this._editorService),l=s.onDidChange(o=>{if(this._ignoreEditorChange)return;const g=this._editorService.getActiveCodeEditor();if(!g)return;const h=g.getModel(),m=g.getPosition();if(!h||!m)return;let C=!1,w=!1;for(const D of d.references)if((0,y.isEqual)(D.uri,h.uri))C=!0,w=w||p.Range.containsPosition(D.range,m);else if(C)break;(!C||!w)&&this.reset()});this._currentState=(0,k.combinedDisposable)(s,l)}revealNext(c){if(!this._currentModel)return Promise.resolve();this._currentIdx+=1,this._currentIdx%=this._currentModel.references.length;const d=this._currentModel.references[this._currentIdx];return this._showMessage(),this._ignoreEditorChange=!0,this._editorService.openCodeEditor({resource:d.uri,options:{selection:p.Range.collapseToStart(d.range),selectionRevealType:3}},c).finally(()=>{this._ignoreEditorChange=!1})}_showMessage(){var c;(c=this._currentMessage)===null||c===void 0||c.dispose();const d=this._keybindingService.lookupKeybinding(\"editor.gotoNextSymbolFromResult\"),s=d?(0,_.localize)(1,null,this._currentIdx+1,this._currentModel.references.length,d.getLabel()):(0,_.localize)(2,null,this._currentIdx+1,this._currentModel.references.length);this._currentMessage=this._notificationService.status(s)}};r=ke([ge(0,v.IContextKeyService),ge(1,S.ICodeEditorService),ge(2,t.INotificationService),ge(3,i.IKeybindingService)],r),(0,b.registerSingleton)(e.ISymbolNavigationService,r,1),(0,E.registerEditorCommand)(new class extends E.EditorCommand{constructor(){super({id:\"editor.gotoNextSymbolFromResult\",precondition:e.ctxHasSymbols,kbOpts:{weight:100,primary:70}})}runEditorCommand(f,c){return f.get(e.ISymbolNavigationService).revealNext(c)}}),n.KeybindingsRegistry.registerCommandAndKeybindingRule({id:\"editor.gotoNextSymbolFromResult.cancel\",weight:100,when:e.ctxHasSymbols,primary:9,handler(f){f.get(e.ISymbolNavigationService).reset()}});let u=class{constructor(c){this._listener=new Map,this._disposables=new k.DisposableStore,this._onDidChange=new L.Emitter,this.onDidChange=this._onDidChange.event,this._disposables.add(c.onCodeEditorRemove(this._onDidRemoveEditor,this)),this._disposables.add(c.onCodeEditorAdd(this._onDidAddEditor,this)),c.listCodeEditors().forEach(this._onDidAddEditor,this)}dispose(){this._disposables.dispose(),this._onDidChange.dispose(),(0,k.dispose)(this._listener.values())}_onDidAddEditor(c){this._listener.set(c,(0,k.combinedDisposable)(c.onDidChangeCursorPosition(d=>this._onDidChange.fire({editor:c})),c.onDidChangeModelContent(d=>this._onDidChange.fire({editor:c}))))}_onDidRemoveEditor(c){var d;(d=this._listener.get(c))===null||d===void 0||d.dispose(),this._listener.delete(c)}};u=ke([ge(0,S.ICodeEditorService)],u)}),define(se[363],oe([1,0,14,19,12,16,18]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getHoverPromise=e.getHover=e.HoverProviderResult=void 0;class p{constructor(n,t,r){this.provider=n,this.hover=t,this.ordinal=r}}e.HoverProviderResult=p;async function _(i,n,t,r,u){try{const f=await Promise.resolve(i.provideHover(t,r,u));if(f&&a(f))return new p(i,f,n)}catch(f){(0,y.onUnexpectedExternalError)(f)}}function v(i,n,t,r){const f=i.ordered(n).map((c,d)=>_(c,d,n,t,r));return L.AsyncIterableObject.fromPromises(f).coalesce()}e.getHover=v;function b(i,n,t,r){return v(i,n,t,r).map(u=>u.hover).toPromise()}e.getHoverPromise=b,(0,E.registerModelAndPositionCommand)(\"_executeHoverProvider\",(i,n,t)=>{const r=i.get(S.ILanguageFeaturesService);return b(r.hoverProvider,n,t,k.CancellationToken.None)});function a(i){const n=typeof i.range<\"u\",t=typeof i.contents<\"u\"&&i.contents&&i.contents.length>0;return n&&t}}),define(se[253],oe([1,0,7,13,14,58,2,104,10,5,43,363,688,27,57,18]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.renderMarkdownHovers=e.MarkdownHoverParticipant=e.MarkdownHover=void 0;const u=L.$;class f{constructor(l,o,g,h,m){this.owner=l,this.range=o,this.contents=g,this.isBeforeContent=h,this.ordinal=m}isValidForHoverAnchor(l){return l.type===1&&this.range.startColumn<=l.range.startColumn&&this.range.endColumn>=l.range.endColumn}}e.MarkdownHover=f;let c=class{constructor(l,o,g,h,m){this._editor=l,this._languageService=o,this._openerService=g,this._configurationService=h,this._languageFeaturesService=m,this.hoverOrdinal=3}createLoadingMessage(l){return new f(this,l.range,[new E.MarkdownString().appendText(i.localize(0,null))],!1,2e3)}computeSync(l,o){if(!this._editor.hasModel()||l.type!==1)return[];const g=this._editor.getModel(),h=l.range.startLineNumber,m=g.getLineMaxColumn(h),C=[];let w=1e3;const D=g.getLineLength(h),I=g.getLanguageIdAtPosition(l.range.startLineNumber,l.range.startColumn),T=this._editor.getOption(116),A=this._configurationService.getValue(\"editor.maxTokenizationLineLength\",{overrideIdentifier:I});let P=!1;T>=0&&D>T&&l.range.startColumn>=T&&(P=!0,C.push(new f(this,l.range,[{value:i.localize(1,null)}],!1,w++))),!P&&typeof A==\"number\"&&D>=A&&C.push(new f(this,l.range,[{value:i.localize(2,null)}],!1,w++));let N=!1;for(const M of o){const R=M.range.startLineNumber===h?M.range.startColumn:1,x=M.range.endLineNumber===h?M.range.endColumn:m,O=M.options.hoverMessage;if(!O||(0,E.isEmptyMarkdownString)(O))continue;M.options.beforeContentClassName&&(N=!0);const B=new v.Range(l.range.startLineNumber,R,l.range.startLineNumber,x);C.push(new f(this,B,(0,k.asArray)(O),N,w++))}return C}computeAsync(l,o,g){if(!this._editor.hasModel()||l.type!==1)return y.AsyncIterableObject.EMPTY;const h=this._editor.getModel();if(!this._languageFeaturesService.hoverProvider.has(h))return y.AsyncIterableObject.EMPTY;const m=new _.Position(l.range.startLineNumber,l.range.startColumn);return(0,a.getHover)(this._languageFeaturesService.hoverProvider,h,m,g).filter(C=>!(0,E.isEmptyMarkdownString)(C.hover.contents)).map(C=>{const w=C.hover.range?v.Range.lift(C.hover.range):l.range;return new f(this,w,C.hover.contents,!1,C.ordinal)})}renderHoverParts(l,o){return d(l,o,this._editor,this._languageService,this._openerService)}};e.MarkdownHoverParticipant=c,e.MarkdownHoverParticipant=c=ke([ge(1,b.ILanguageService),ge(2,t.IOpenerService),ge(3,n.IConfigurationService),ge(4,r.ILanguageFeaturesService)],c);function d(s,l,o,g,h){l.sort((C,w)=>C.ordinal-w.ordinal);const m=new S.DisposableStore;for(const C of l)for(const w of C.contents){if((0,E.isEmptyMarkdownString)(w))continue;const D=u(\"div.hover-row.markdown-hover\"),I=L.append(D,u(\"div.hover-contents\")),T=m.add(new p.MarkdownRenderer({editor:o},g,h));m.add(T.onDidRenderAsync(()=>{I.className=\"hover-contents code-hover-contents\",s.onContentsChanged()}));const A=m.add(T.render(w));I.appendChild(A.element),s.fragment.appendChild(D)}return m}e.renderMarkdownHovers=d}),define(se[820],oe([1,0,2,11,16,250,74,5,24,21,32,51,306,691,70,203,248]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IndentationToTabsCommand=e.IndentationToSpacesCommand=e.AutoIndentOnPaste=e.AutoIndentOnPasteCommand=e.ReindentSelectedLinesAction=e.ReindentLinesAction=e.DetectIndentation=e.ChangeTabDisplaySize=e.IndentUsingSpaces=e.IndentUsingTabs=e.ChangeIndentationSizeAction=e.IndentationToTabsAction=e.IndentationToSpacesAction=e.getReindentEditOperations=void 0;function f(P,N,M,R,x){if(P.getLineCount()===1&&P.getLineMaxColumn(1)===1)return[];const O=N.getLanguageConfiguration(P.getLanguageId()).indentationRules;if(!O)return[];for(R=Math.min(R,P.getLineCount());M<=R&&O.unIndentedLinePattern;){const J=P.getLineContent(M);if(!O.unIndentedLinePattern.test(J))break;M++}if(M>R-1)return[];const{tabSize:B,indentSize:W,insertSpaces:V}=P.getOptions(),K=(J,Q)=>(Q=Q||1,E.ShiftCommand.shiftIndent(J,J.length+Q,B,W,V)),F=(J,Q)=>(Q=Q||1,E.ShiftCommand.unshiftIndent(J,J.length+Q,B,W,V)),q=[];let ie;const ae=P.getLineContent(M);let ne=ae;if(x!=null){ie=x;const J=k.getLeadingWhitespace(ae);ne=ie+ae.substring(J.length),O.decreaseIndentPattern&&O.decreaseIndentPattern.test(ne)&&(ie=F(ie),ne=ie+ae.substring(J.length)),ae!==ne&&q.push(S.EditOperation.replaceMove(new _.Selection(M,1,M,J.length+1),(0,r.normalizeIndentation)(ie,W,V)))}else ie=k.getLeadingWhitespace(ae);let $=ie;O.increaseIndentPattern&&O.increaseIndentPattern.test(ne)?($=K($),ie=K(ie)):O.indentNextLinePattern&&O.indentNextLinePattern.test(ne)&&($=K($)),M++;for(let J=M;J<=R;J++){const Q=P.getLineContent(J),re=k.getLeadingWhitespace(Q),de=$+Q.substring(re.length);O.decreaseIndentPattern&&O.decreaseIndentPattern.test(de)&&($=F($),ie=F(ie)),re!==$&&q.push(S.EditOperation.replaceMove(new _.Selection(J,1,J,re.length+1),(0,r.normalizeIndentation)($,W,V))),!(O.unIndentedLinePattern&&O.unIndentedLinePattern.test(Q))&&(O.increaseIndentPattern&&O.increaseIndentPattern.test(de)?(ie=K(ie),$=ie):O.indentNextLinePattern&&O.indentNextLinePattern.test(de)?$=K($):$=ie)}return q}e.getReindentEditOperations=f;class c extends y.EditorAction{constructor(){super({id:c.ID,label:n.localize(0,null),alias:\"Convert Indentation to Spaces\",precondition:v.EditorContextKeys.writable})}run(N,M){const R=M.getModel();if(!R)return;const x=R.getOptions(),O=M.getSelection();if(!O)return;const B=new T(O,x.tabSize);M.pushUndoStop(),M.executeCommands(this.id,[B]),M.pushUndoStop(),R.updateOptions({insertSpaces:!0})}}e.IndentationToSpacesAction=c,c.ID=\"editor.action.indentationToSpaces\";class d extends y.EditorAction{constructor(){super({id:d.ID,label:n.localize(1,null),alias:\"Convert Indentation to Tabs\",precondition:v.EditorContextKeys.writable})}run(N,M){const R=M.getModel();if(!R)return;const x=R.getOptions(),O=M.getSelection();if(!O)return;const B=new A(O,x.tabSize);M.pushUndoStop(),M.executeCommands(this.id,[B]),M.pushUndoStop(),R.updateOptions({insertSpaces:!1})}}e.IndentationToTabsAction=d,d.ID=\"editor.action.indentationToTabs\";class s extends y.EditorAction{constructor(N,M,R){super(R),this.insertSpaces=N,this.displaySizeOnly=M}run(N,M){const R=N.get(t.IQuickInputService),x=N.get(a.IModelService),O=M.getModel();if(!O)return;const B=x.getCreationOptions(O.getLanguageId(),O.uri,O.isForSimpleWidget),W=O.getOptions(),V=[1,2,3,4,5,6,7,8].map(F=>({id:F.toString(),label:F.toString(),description:F===B.tabSize&&F===W.tabSize?n.localize(2,null):F===B.tabSize?n.localize(3,null):F===W.tabSize?n.localize(4,null):void 0})),K=Math.min(O.getOptions().tabSize-1,7);setTimeout(()=>{R.pick(V,{placeHolder:n.localize(5,null),activeItem:V[K]}).then(F=>{if(F&&O&&!O.isDisposed()){const q=parseInt(F.label,10);this.displaySizeOnly?O.updateOptions({tabSize:q}):O.updateOptions({tabSize:q,indentSize:q,insertSpaces:this.insertSpaces})}})},50)}}e.ChangeIndentationSizeAction=s;class l extends s{constructor(){super(!1,!1,{id:l.ID,label:n.localize(6,null),alias:\"Indent Using Tabs\",precondition:void 0})}}e.IndentUsingTabs=l,l.ID=\"editor.action.indentUsingTabs\";class o extends s{constructor(){super(!0,!1,{id:o.ID,label:n.localize(7,null),alias:\"Indent Using Spaces\",precondition:void 0})}}e.IndentUsingSpaces=o,o.ID=\"editor.action.indentUsingSpaces\";class g extends s{constructor(){super(!0,!0,{id:g.ID,label:n.localize(8,null),alias:\"Change Tab Display Size\",precondition:void 0})}}e.ChangeTabDisplaySize=g,g.ID=\"editor.action.changeTabDisplaySize\";class h extends y.EditorAction{constructor(){super({id:h.ID,label:n.localize(9,null),alias:\"Detect Indentation from Content\",precondition:void 0})}run(N,M){const R=N.get(a.IModelService),x=M.getModel();if(!x)return;const O=R.getCreationOptions(x.getLanguageId(),x.uri,x.isForSimpleWidget);x.detectIndentation(O.insertSpaces,O.tabSize)}}e.DetectIndentation=h,h.ID=\"editor.action.detectIndentation\";class m extends y.EditorAction{constructor(){super({id:\"editor.action.reindentlines\",label:n.localize(10,null),alias:\"Reindent Lines\",precondition:v.EditorContextKeys.writable})}run(N,M){const R=N.get(b.ILanguageConfigurationService),x=M.getModel();if(!x)return;const O=f(x,R,1,x.getLineCount());O.length>0&&(M.pushUndoStop(),M.executeEdits(this.id,O),M.pushUndoStop())}}e.ReindentLinesAction=m;class C extends y.EditorAction{constructor(){super({id:\"editor.action.reindentselectedlines\",label:n.localize(11,null),alias:\"Reindent Selected Lines\",precondition:v.EditorContextKeys.writable})}run(N,M){const R=N.get(b.ILanguageConfigurationService),x=M.getModel();if(!x)return;const O=M.getSelections();if(O===null)return;const B=[];for(const W of O){let V=W.startLineNumber,K=W.endLineNumber;if(V!==K&&W.endColumn===1&&K--,V===1){if(V===K)continue}else V--;const F=f(x,R,V,K);B.push(...F)}B.length>0&&(M.pushUndoStop(),M.executeEdits(this.id,B),M.pushUndoStop())}}e.ReindentSelectedLinesAction=C;class w{constructor(N,M){this._initialSelection=M,this._edits=[],this._selectionId=null;for(const R of N)R.range&&typeof R.text==\"string\"&&this._edits.push(R)}getEditOperations(N,M){for(const x of this._edits)M.addEditOperation(p.Range.lift(x.range),x.text);let R=!1;Array.isArray(this._edits)&&this._edits.length===1&&this._initialSelection.isEmpty()&&(this._edits[0].range.startColumn===this._initialSelection.endColumn&&this._edits[0].range.startLineNumber===this._initialSelection.endLineNumber?(R=!0,this._selectionId=M.trackSelection(this._initialSelection,!0)):this._edits[0].range.endColumn===this._initialSelection.startColumn&&this._edits[0].range.endLineNumber===this._initialSelection.startLineNumber&&(R=!0,this._selectionId=M.trackSelection(this._initialSelection,!1))),R||(this._selectionId=M.trackSelection(this._initialSelection))}computeCursorState(N,M){return M.getTrackedSelection(this._selectionId)}}e.AutoIndentOnPasteCommand=w;let D=class{constructor(N,M){this.editor=N,this._languageConfigurationService=M,this.callOnDispose=new L.DisposableStore,this.callOnModel=new L.DisposableStore,this.callOnDispose.add(N.onDidChangeConfiguration(()=>this.update())),this.callOnDispose.add(N.onDidChangeModel(()=>this.update())),this.callOnDispose.add(N.onDidChangeModelLanguage(()=>this.update()))}update(){this.callOnModel.clear(),!(this.editor.getOption(12)<4||this.editor.getOption(55))&&this.editor.hasModel()&&this.callOnModel.add(this.editor.onDidPaste(({range:N})=>{this.trigger(N)}))}trigger(N){const M=this.editor.getSelections();if(M===null||M.length>1)return;const R=this.editor.getModel();if(!R||!R.tokenization.isCheapToTokenize(N.getStartPosition().lineNumber))return;const x=this.editor.getOption(12),{tabSize:O,indentSize:B,insertSpaces:W}=R.getOptions(),V=[],K={shiftIndent:ae=>E.ShiftCommand.shiftIndent(ae,ae.length+1,O,B,W),unshiftIndent:ae=>E.ShiftCommand.unshiftIndent(ae,ae.length+1,O,B,W)};let F=N.startLineNumber;for(;F<=N.endLineNumber;){if(this.shouldIgnoreLine(R,F)){F++;continue}break}if(F>N.endLineNumber)return;let q=R.getLineContent(F);if(!/\\S/.test(q.substring(0,N.startColumn-1))){const ae=(0,u.getGoodIndentForLine)(x,R,R.getLanguageId(),F,K,this._languageConfigurationService);if(ae!==null){const ne=k.getLeadingWhitespace(q),$=i.getSpaceCnt(ae,O),J=i.getSpaceCnt(ne,O);if($!==J){const Q=i.generateIndent($,O,W);V.push({range:new p.Range(F,1,F,ne.length+1),text:Q}),q=Q+q.substr(ne.length)}else{const Q=(0,u.getIndentMetadata)(R,F,this._languageConfigurationService);if(Q===0||Q===8)return}}}const ie=F;for(;F<N.endLineNumber;){if(!/\\S/.test(R.getLineContent(F+1))){F++;continue}break}if(F!==N.endLineNumber){const ae={tokenization:{getLineTokens:$=>R.tokenization.getLineTokens($),getLanguageId:()=>R.getLanguageId(),getLanguageIdAtPosition:($,J)=>R.getLanguageIdAtPosition($,J)},getLineContent:$=>$===ie?q:R.getLineContent($)},ne=(0,u.getGoodIndentForLine)(x,ae,R.getLanguageId(),F+1,K,this._languageConfigurationService);if(ne!==null){const $=i.getSpaceCnt(ne,O),J=i.getSpaceCnt(k.getLeadingWhitespace(R.getLineContent(F+1)),O);if($!==J){const Q=$-J;for(let re=F+1;re<=N.endLineNumber;re++){const de=R.getLineContent(re),he=k.getLeadingWhitespace(de),X=i.getSpaceCnt(he,O)+Q,U=i.generateIndent(X,O,W);U!==he&&V.push({range:new p.Range(re,1,re,he.length+1),text:U})}}}}if(V.length>0){this.editor.pushUndoStop();const ae=new w(V,this.editor.getSelection());this.editor.executeCommand(\"autoIndentOnPaste\",ae),this.editor.pushUndoStop()}}shouldIgnoreLine(N,M){N.tokenization.forceTokenization(M);const R=N.getLineFirstNonWhitespaceColumn(M);if(R===0)return!0;const x=N.tokenization.getLineTokens(M);if(x.getCount()>0){const O=x.findTokenIndexAtOffset(R);if(O>=0&&x.getStandardTokenType(O)===1)return!0}return!1}dispose(){this.callOnDispose.dispose(),this.callOnModel.dispose()}};e.AutoIndentOnPaste=D,D.ID=\"editor.contrib.autoIndentOnPaste\",e.AutoIndentOnPaste=D=ke([ge(1,b.ILanguageConfigurationService)],D);function I(P,N,M,R){if(P.getLineCount()===1&&P.getLineMaxColumn(1)===1)return;let x=\"\";for(let B=0;B<M;B++)x+=\" \";const O=new RegExp(x,\"gi\");for(let B=1,W=P.getLineCount();B<=W;B++){let V=P.getLineFirstNonWhitespaceColumn(B);if(V===0&&(V=P.getLineMaxColumn(B)),V===1)continue;const K=new p.Range(B,1,B,V),F=P.getValueInRange(K),q=R?F.replace(/\\t/ig,x):F.replace(O,\"\t\");N.addEditOperation(K,q)}}class T{constructor(N,M){this.selection=N,this.tabSize=M,this.selectionId=null}getEditOperations(N,M){this.selectionId=M.trackSelection(this.selection),I(N,M,this.tabSize,!0)}computeCursorState(N,M){return M.getTrackedSelection(this.selectionId)}}e.IndentationToSpacesCommand=T;class A{constructor(N,M){this.selection=N,this.tabSize=M,this.selectionId=null}getEditOperations(N,M){this.selectionId=M.trackSelection(this.selection),I(N,M,this.tabSize,!1)}computeCursorState(N,M){return M.getTrackedSelection(this.selectionId)}}e.IndentationToTabsCommand=A,(0,y.registerEditorContribution)(D.ID,D,2),(0,y.registerEditorAction)(c),(0,y.registerEditorAction)(d),(0,y.registerEditorAction)(l),(0,y.registerEditorAction)(o),(0,y.registerEditorAction)(g),(0,y.registerEditorAction)(h),(0,y.registerEditorAction)(m),(0,y.registerEditorAction)(C)}),define(se[821],oe([1,0,16,208,21,698]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ExpandLineSelectionAction=void 0;class S extends L.EditorAction{constructor(){super({id:\"expandLineSelection\",label:E.localize(0,null),alias:\"Expand Line Selection\",precondition:void 0,kbOpts:{weight:0,kbExpr:y.EditorContextKeys.textInputFocus,primary:2090}})}run(_,v,b){if(b=b||{},!v.hasModel())return;const a=v._getViewModel();a.model.pushStackElement(),a.setCursorStates(b.source,3,k.CursorMoveCommands.expandLineSelection(a,a.getCursorStates())),a.revealPrimaryCursor(b.source,!0)}}e.ExpandLineSelectionAction=S,(0,L.registerEditorAction)(S)}),define(se[822],oe([1,0,65,191,16,130,500,251,74,10,5,24,21,560,798,561,699,30,32]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.KebabCaseAction=e.CamelCaseAction=e.SnakeCaseAction=e.TitleCaseAction=e.LowerCaseAction=e.UpperCaseAction=e.AbstractCaseAction=e.TransposeAction=e.JoinLinesAction=e.DeleteAllRightAction=e.DeleteAllLeftAction=e.AbstractDeleteAllToBoundaryAction=e.InsertLineAfterAction=e.InsertLineBeforeAction=e.IndentLinesAction=e.DeleteLinesAction=e.TrimTrailingWhitespaceAction=e.DeleteDuplicateLinesAction=e.SortLinesDescendingAction=e.SortLinesAscendingAction=e.AbstractSortLinesAction=e.DuplicateSelectionAction=void 0;class d extends y.EditorAction{constructor(re,de){super(de),this.down=re}run(re,de){if(!de.hasModel())return;const he=de.getSelections().map((U,G)=>({selection:U,index:G,ignore:!1}));he.sort((U,G)=>b.Range.compareRangesUsingStarts(U.selection,G.selection));let me=he[0];for(let U=1;U<he.length;U++){const G=he[U];me.selection.endLineNumber===G.selection.startLineNumber&&(me.index<G.index?G.ignore=!0:(me.ignore=!0,me=G))}const X=[];for(const U of he)X.push(new n.CopyLinesCommand(U.selection,this.down,U.ignore));de.pushUndoStop(),de.executeCommands(this.id,X),de.pushUndoStop()}}class s extends d{constructor(){super(!1,{id:\"editor.action.copyLinesUpAction\",label:u.localize(0,null),alias:\"Copy Line Up\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:1552,linux:{primary:3600},weight:100},menuOpts:{menuId:f.MenuId.MenubarSelectionMenu,group:\"2_line\",title:u.localize(1,null),order:1}})}}class l extends d{constructor(){super(!0,{id:\"editor.action.copyLinesDownAction\",label:u.localize(2,null),alias:\"Copy Line Down\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:1554,linux:{primary:3602},weight:100},menuOpts:{menuId:f.MenuId.MenubarSelectionMenu,group:\"2_line\",title:u.localize(3,null),order:2}})}}class o extends y.EditorAction{constructor(){super({id:\"editor.action.duplicateSelection\",label:u.localize(4,null),alias:\"Duplicate Selection\",precondition:i.EditorContextKeys.writable,menuOpts:{menuId:f.MenuId.MenubarSelectionMenu,group:\"2_line\",title:u.localize(5,null),order:5}})}run(re,de,he){if(!de.hasModel())return;const me=[],X=de.getSelections(),U=de.getModel();for(const G of X)if(G.isEmpty())me.push(new n.CopyLinesCommand(G,!0));else{const z=new a.Selection(G.endLineNumber,G.endColumn,G.endLineNumber,G.endColumn);me.push(new E.ReplaceCommandThatSelectsText(z,U.getValueInRange(G)))}de.pushUndoStop(),de.executeCommands(this.id,me),de.pushUndoStop()}}e.DuplicateSelectionAction=o;class g extends y.EditorAction{constructor(re,de){super(de),this.down=re}run(re,de){const he=re.get(c.ILanguageConfigurationService),me=[],X=de.getSelections()||[],U=de.getOption(12);for(const G of X)me.push(new t.MoveLinesCommand(G,this.down,U,he));de.pushUndoStop(),de.executeCommands(this.id,me),de.pushUndoStop()}}class h extends g{constructor(){super(!1,{id:\"editor.action.moveLinesUpAction\",label:u.localize(6,null),alias:\"Move Line Up\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:528,linux:{primary:528},weight:100},menuOpts:{menuId:f.MenuId.MenubarSelectionMenu,group:\"2_line\",title:u.localize(7,null),order:3}})}}class m extends g{constructor(){super(!0,{id:\"editor.action.moveLinesDownAction\",label:u.localize(8,null),alias:\"Move Line Down\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:530,linux:{primary:530},weight:100},menuOpts:{menuId:f.MenuId.MenubarSelectionMenu,group:\"2_line\",title:u.localize(9,null),order:4}})}}class C extends y.EditorAction{constructor(re,de){super(de),this.descending=re}run(re,de){const he=de.getSelections()||[];for(const X of he)if(!r.SortLinesCommand.canRun(de.getModel(),X,this.descending))return;const me=[];for(let X=0,U=he.length;X<U;X++)me[X]=new r.SortLinesCommand(he[X],this.descending);de.pushUndoStop(),de.executeCommands(this.id,me),de.pushUndoStop()}}e.AbstractSortLinesAction=C;class w extends C{constructor(){super(!1,{id:\"editor.action.sortLinesAscending\",label:u.localize(10,null),alias:\"Sort Lines Ascending\",precondition:i.EditorContextKeys.writable})}}e.SortLinesAscendingAction=w;class D extends C{constructor(){super(!0,{id:\"editor.action.sortLinesDescending\",label:u.localize(11,null),alias:\"Sort Lines Descending\",precondition:i.EditorContextKeys.writable})}}e.SortLinesDescendingAction=D;class I extends y.EditorAction{constructor(){super({id:\"editor.action.removeDuplicateLines\",label:u.localize(12,null),alias:\"Delete Duplicate Lines\",precondition:i.EditorContextKeys.writable})}run(re,de){if(!de.hasModel())return;const he=de.getModel();if(he.getLineCount()===1&&he.getLineMaxColumn(1)===1)return;const me=[],X=[];let U=0;for(const G of de.getSelections()){const z=new Set,H=[];for(let ee=G.startLineNumber;ee<=G.endLineNumber;ee++){const le=he.getLineContent(ee);z.has(le)||(H.push(le),z.add(le))}const Y=new a.Selection(G.startLineNumber,1,G.endLineNumber,he.getLineMaxColumn(G.endLineNumber)),j=G.startLineNumber-U,Z=new a.Selection(j,1,j+H.length-1,H[H.length-1].length);me.push(_.EditOperation.replace(Y,H.join(`\n`))),X.push(Z),U+=G.endLineNumber-G.startLineNumber+1-H.length}de.pushUndoStop(),de.executeEdits(this.id,me,X),de.pushUndoStop()}}e.DeleteDuplicateLinesAction=I;class T extends y.EditorAction{constructor(){super({id:T.ID,label:u.localize(13,null),alias:\"Trim Trailing Whitespace\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:(0,L.KeyChord)(2089,2102),weight:100}})}run(re,de,he){let me=[];he.reason===\"auto-save\"&&(me=(de.getSelections()||[]).map(G=>new v.Position(G.positionLineNumber,G.positionColumn)));const X=de.getSelection();if(X===null)return;const U=new S.TrimTrailingWhitespaceCommand(X,me);de.pushUndoStop(),de.executeCommands(this.id,[U]),de.pushUndoStop()}}e.TrimTrailingWhitespaceAction=T,T.ID=\"editor.action.trimTrailingWhitespace\";class A extends y.EditorAction{constructor(){super({id:\"editor.action.deleteLines\",label:u.localize(14,null),alias:\"Delete Line\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.textInputFocus,primary:3113,weight:100}})}run(re,de){if(!de.hasModel())return;const he=this._getLinesToRemove(de),me=de.getModel();if(me.getLineCount()===1&&me.getLineMaxColumn(1)===1)return;let X=0;const U=[],G=[];for(let z=0,H=he.length;z<H;z++){const Y=he[z];let j=Y.startLineNumber,Z=Y.endLineNumber,ee=1,le=me.getLineMaxColumn(Z);Z<me.getLineCount()?(Z+=1,le=1):j>1&&(j-=1,ee=me.getLineMaxColumn(j)),U.push(_.EditOperation.replace(new a.Selection(j,ee,Z,le),\"\")),G.push(new a.Selection(j-X,Y.positionColumn,j-X,Y.positionColumn)),X+=Y.endLineNumber-Y.startLineNumber+1}de.pushUndoStop(),de.executeEdits(this.id,U,G),de.pushUndoStop()}_getLinesToRemove(re){const de=re.getSelections().map(X=>{let U=X.endLineNumber;return X.startLineNumber<X.endLineNumber&&X.endColumn===1&&(U-=1),{startLineNumber:X.startLineNumber,selectionStartColumn:X.selectionStartColumn,endLineNumber:U,positionColumn:X.positionColumn}});de.sort((X,U)=>X.startLineNumber===U.startLineNumber?X.endLineNumber-U.endLineNumber:X.startLineNumber-U.startLineNumber);const he=[];let me=de[0];for(let X=1;X<de.length;X++)me.endLineNumber+1>=de[X].startLineNumber?me.endLineNumber=de[X].endLineNumber:(he.push(me),me=de[X]);return he.push(me),he}}e.DeleteLinesAction=A;class P extends y.EditorAction{constructor(){super({id:\"editor.action.indentLines\",label:u.localize(15,null),alias:\"Indent Line\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:2142,weight:100}})}run(re,de){const he=de._getViewModel();he&&(de.pushUndoStop(),de.executeCommands(this.id,p.TypeOperations.indent(he.cursorConfig,de.getModel(),de.getSelections())),de.pushUndoStop())}}e.IndentLinesAction=P;class N extends y.EditorAction{constructor(){super({id:\"editor.action.outdentLines\",label:u.localize(16,null),alias:\"Outdent Line\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:2140,weight:100}})}run(re,de){k.CoreEditingCommands.Outdent.runEditorCommand(re,de,null)}}class M extends y.EditorAction{constructor(){super({id:\"editor.action.insertLineBefore\",label:u.localize(17,null),alias:\"Insert Line Above\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:3075,weight:100}})}run(re,de){const he=de._getViewModel();he&&(de.pushUndoStop(),de.executeCommands(this.id,p.TypeOperations.lineInsertBefore(he.cursorConfig,de.getModel(),de.getSelections())))}}e.InsertLineBeforeAction=M;class R extends y.EditorAction{constructor(){super({id:\"editor.action.insertLineAfter\",label:u.localize(18,null),alias:\"Insert Line Below\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:2051,weight:100}})}run(re,de){const he=de._getViewModel();he&&(de.pushUndoStop(),de.executeCommands(this.id,p.TypeOperations.lineInsertAfter(he.cursorConfig,de.getModel(),de.getSelections())))}}e.InsertLineAfterAction=R;class x extends y.EditorAction{run(re,de){if(!de.hasModel())return;const he=de.getSelection(),me=this._getRangesToDelete(de),X=[];for(let z=0,H=me.length-1;z<H;z++){const Y=me[z],j=me[z+1];b.Range.intersectRanges(Y,j)===null?X.push(Y):me[z+1]=b.Range.plusRange(Y,j)}X.push(me[me.length-1]);const U=this._getEndCursorState(he,X),G=X.map(z=>_.EditOperation.replace(z,\"\"));de.pushUndoStop(),de.executeEdits(this.id,G,U),de.pushUndoStop()}}e.AbstractDeleteAllToBoundaryAction=x;class O extends x{constructor(){super({id:\"deleteAllLeft\",label:u.localize(19,null),alias:\"Delete All Left\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.textInputFocus,primary:0,mac:{primary:2049},weight:100}})}_getEndCursorState(re,de){let he=null;const me=[];let X=0;return de.forEach(U=>{let G;if(U.endColumn===1&&X>0){const z=U.startLineNumber-X;G=new a.Selection(z,U.startColumn,z,U.startColumn)}else G=new a.Selection(U.startLineNumber,U.startColumn,U.startLineNumber,U.startColumn);X+=U.endLineNumber-U.startLineNumber,U.intersectRanges(re)?he=G:me.push(G)}),he&&me.unshift(he),me}_getRangesToDelete(re){const de=re.getSelections();if(de===null)return[];let he=de;const me=re.getModel();return me===null?[]:(he.sort(b.Range.compareRangesUsingStarts),he=he.map(X=>{if(X.isEmpty())if(X.startColumn===1){const U=Math.max(1,X.startLineNumber-1),G=X.startLineNumber===1?1:me.getLineLength(U)+1;return new b.Range(U,G,X.startLineNumber,1)}else return new b.Range(X.startLineNumber,1,X.startLineNumber,X.startColumn);else return new b.Range(X.startLineNumber,1,X.endLineNumber,X.endColumn)}),he)}}e.DeleteAllLeftAction=O;class B extends x{constructor(){super({id:\"deleteAllRight\",label:u.localize(20,null),alias:\"Delete All Right\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.textInputFocus,primary:0,mac:{primary:297,secondary:[2068]},weight:100}})}_getEndCursorState(re,de){let he=null;const me=[];for(let X=0,U=de.length,G=0;X<U;X++){const z=de[X],H=new a.Selection(z.startLineNumber-G,z.startColumn,z.startLineNumber-G,z.startColumn);z.intersectRanges(re)?he=H:me.push(H)}return he&&me.unshift(he),me}_getRangesToDelete(re){const de=re.getModel();if(de===null)return[];const he=re.getSelections();if(he===null)return[];const me=he.map(X=>{if(X.isEmpty()){const U=de.getLineMaxColumn(X.startLineNumber);return X.startColumn===U?new b.Range(X.startLineNumber,X.startColumn,X.startLineNumber+1,1):new b.Range(X.startLineNumber,X.startColumn,X.startLineNumber,U)}return X});return me.sort(b.Range.compareRangesUsingStarts),me}}e.DeleteAllRightAction=B;class W extends y.EditorAction{constructor(){super({id:\"editor.action.joinLines\",label:u.localize(21,null),alias:\"Join Lines\",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:0,mac:{primary:296},weight:100}})}run(re,de){const he=de.getSelections();if(he===null)return;let me=de.getSelection();if(me===null)return;he.sort(b.Range.compareRangesUsingStarts);const X=[],U=he.reduce((Z,ee)=>Z.isEmpty()?Z.endLineNumber===ee.startLineNumber?(me.equalsSelection(Z)&&(me=ee),ee):ee.startLineNumber>Z.endLineNumber+1?(X.push(Z),ee):new a.Selection(Z.startLineNumber,Z.startColumn,ee.endLineNumber,ee.endColumn):ee.startLineNumber>Z.endLineNumber?(X.push(Z),ee):new a.Selection(Z.startLineNumber,Z.startColumn,ee.endLineNumber,ee.endColumn));X.push(U);const G=de.getModel();if(G===null)return;const z=[],H=[];let Y=me,j=0;for(let Z=0,ee=X.length;Z<ee;Z++){const le=X[Z],ue=le.startLineNumber,ce=1;let pe=0,ve,Ce;const Se=G.getLineLength(le.endLineNumber)-le.endColumn;if(le.isEmpty()||le.startLineNumber===le.endLineNumber){const Ae=le.getStartPosition();Ae.lineNumber<G.getLineCount()?(ve=ue+1,Ce=G.getLineMaxColumn(ve)):(ve=Ae.lineNumber,Ce=G.getLineMaxColumn(Ae.lineNumber))}else ve=le.endLineNumber,Ce=G.getLineMaxColumn(ve);let _e=G.getLineContent(ue);for(let Ae=ue+1;Ae<=ve;Ae++){const xe=G.getLineContent(Ae),Be=G.getLineFirstNonWhitespaceColumn(Ae);if(Be>=1){let De=!0;_e===\"\"&&(De=!1),De&&(_e.charAt(_e.length-1)===\" \"||_e.charAt(_e.length-1)===\"\t\")&&(De=!1,_e=_e.replace(/[\\s\\uFEFF\\xA0]+$/g,\" \"));const Ie=xe.substr(Be-1);_e+=(De?\" \":\"\")+Ie,De?pe=Ie.length+1:pe=Ie.length}else pe=0}const Ee=new b.Range(ue,ce,ve,Ce);if(!Ee.isEmpty()){let Ae;le.isEmpty()?(z.push(_.EditOperation.replace(Ee,_e)),Ae=new a.Selection(Ee.startLineNumber-j,_e.length-pe+1,ue-j,_e.length-pe+1)):le.startLineNumber===le.endLineNumber?(z.push(_.EditOperation.replace(Ee,_e)),Ae=new a.Selection(le.startLineNumber-j,le.startColumn,le.endLineNumber-j,le.endColumn)):(z.push(_.EditOperation.replace(Ee,_e)),Ae=new a.Selection(le.startLineNumber-j,le.startColumn,le.startLineNumber-j,_e.length-Se)),b.Range.intersectRanges(Ee,me)!==null?Y=Ae:H.push(Ae)}j+=Ee.endLineNumber-Ee.startLineNumber}H.unshift(Y),de.pushUndoStop(),de.executeEdits(this.id,z,H),de.pushUndoStop()}}e.JoinLinesAction=W;class V extends y.EditorAction{constructor(){super({id:\"editor.action.transpose\",label:u.localize(22,null),alias:\"Transpose Characters around the Cursor\",precondition:i.EditorContextKeys.writable})}run(re,de){const he=de.getSelections();if(he===null)return;const me=de.getModel();if(me===null)return;const X=[];for(let U=0,G=he.length;U<G;U++){const z=he[U];if(!z.isEmpty())continue;const H=z.getStartPosition(),Y=me.getLineMaxColumn(H.lineNumber);if(H.column>=Y){if(H.lineNumber===me.getLineCount())continue;const j=new b.Range(H.lineNumber,Math.max(1,H.column-1),H.lineNumber+1,1),Z=me.getValueInRange(j).split(\"\").reverse().join(\"\");X.push(new E.ReplaceCommand(new a.Selection(H.lineNumber,Math.max(1,H.column-1),H.lineNumber+1,1),Z))}else{const j=new b.Range(H.lineNumber,Math.max(1,H.column-1),H.lineNumber,H.column+1),Z=me.getValueInRange(j).split(\"\").reverse().join(\"\");X.push(new E.ReplaceCommandThatPreservesSelection(j,Z,new a.Selection(H.lineNumber,H.column+1,H.lineNumber,H.column+1)))}}de.pushUndoStop(),de.executeCommands(this.id,X),de.pushUndoStop()}}e.TransposeAction=V;class K extends y.EditorAction{run(re,de){const he=de.getSelections();if(he===null)return;const me=de.getModel();if(me===null)return;const X=de.getOption(129),U=[];for(const G of he)if(G.isEmpty()){const z=G.getStartPosition(),H=de.getConfiguredWordAtPosition(z);if(!H)continue;const Y=new b.Range(z.lineNumber,H.startColumn,z.lineNumber,H.endColumn),j=me.getValueInRange(Y);U.push(_.EditOperation.replace(Y,this._modifyText(j,X)))}else{const z=me.getValueInRange(G);U.push(_.EditOperation.replace(G,this._modifyText(z,X)))}de.pushUndoStop(),de.executeEdits(this.id,U),de.pushUndoStop()}}e.AbstractCaseAction=K;class F extends K{constructor(){super({id:\"editor.action.transformToUppercase\",label:u.localize(23,null),alias:\"Transform to Uppercase\",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){return re.toLocaleUpperCase()}}e.UpperCaseAction=F;class q extends K{constructor(){super({id:\"editor.action.transformToLowercase\",label:u.localize(24,null),alias:\"Transform to Lowercase\",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){return re.toLocaleLowerCase()}}e.LowerCaseAction=q;class ie{constructor(re,de){this._pattern=re,this._flags=de,this._actual=null,this._evaluated=!1}get(){if(!this._evaluated){this._evaluated=!0;try{this._actual=new RegExp(this._pattern,this._flags)}catch{}}return this._actual}isSupported(){return this.get()!==null}}class ae extends K{constructor(){super({id:\"editor.action.transformToTitlecase\",label:u.localize(25,null),alias:\"Transform to Title Case\",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){const he=ae.titleBoundary.get();return he?re.toLocaleLowerCase().replace(he,me=>me.toLocaleUpperCase()):re}}e.TitleCaseAction=ae,ae.titleBoundary=new ie(\"(^|[^\\\\p{L}\\\\p{N}']|((^|\\\\P{L})'))\\\\p{L}\",\"gmu\");class ne extends K{constructor(){super({id:\"editor.action.transformToSnakecase\",label:u.localize(26,null),alias:\"Transform to Snake Case\",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){const he=ne.caseBoundary.get(),me=ne.singleLetters.get();return!he||!me?re:re.replace(he,\"$1_$2\").replace(me,\"$1_$2$3\").toLocaleLowerCase()}}e.SnakeCaseAction=ne,ne.caseBoundary=new ie(\"(\\\\p{Ll})(\\\\p{Lu})\",\"gmu\"),ne.singleLetters=new ie(\"(\\\\p{Lu}|\\\\p{N})(\\\\p{Lu})(\\\\p{Ll})\",\"gmu\");class $ extends K{constructor(){super({id:\"editor.action.transformToCamelcase\",label:u.localize(27,null),alias:\"Transform to Camel Case\",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){const he=$.wordBoundary.get();if(!he)return re;const me=re.split(he);return me.shift()+me.map(U=>U.substring(0,1).toLocaleUpperCase()+U.substring(1)).join(\"\")}}e.CamelCaseAction=$,$.wordBoundary=new ie(\"[_\\\\s-]\",\"gm\");class J extends K{static isSupported(){return[this.caseBoundary,this.singleLetters,this.underscoreBoundary].every(de=>de.isSupported())}constructor(){super({id:\"editor.action.transformToKebabcase\",label:u.localize(28,null),alias:\"Transform to Kebab Case\",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){const he=J.caseBoundary.get(),me=J.singleLetters.get(),X=J.underscoreBoundary.get();return!he||!me||!X?re:re.replace(X,\"$1-$3\").replace(he,\"$1-$2\").replace(me,\"$1-$2\").toLocaleLowerCase()}}e.KebabCaseAction=J,J.caseBoundary=new ie(\"(\\\\p{Ll})(\\\\p{Lu})\",\"gmu\"),J.singleLetters=new ie(\"(\\\\p{Lu}|\\\\p{N})(\\\\p{Lu}\\\\p{Ll})\",\"gmu\"),J.underscoreBoundary=new ie(\"(\\\\S)(_)(\\\\S)\",\"gm\"),(0,y.registerEditorAction)(s),(0,y.registerEditorAction)(l),(0,y.registerEditorAction)(o),(0,y.registerEditorAction)(h),(0,y.registerEditorAction)(m),(0,y.registerEditorAction)(w),(0,y.registerEditorAction)(D),(0,y.registerEditorAction)(I),(0,y.registerEditorAction)(T),(0,y.registerEditorAction)(A),(0,y.registerEditorAction)(P),(0,y.registerEditorAction)(N),(0,y.registerEditorAction)(M),(0,y.registerEditorAction)(R),(0,y.registerEditorAction)(O),(0,y.registerEditorAction)(B),(0,y.registerEditorAction)(W),(0,y.registerEditorAction)(V),(0,y.registerEditorAction)(F),(0,y.registerEditorAction)(q),ne.caseBoundary.isSupported()&&ne.singleLetters.isSupported()&&(0,y.registerEditorAction)(ne),$.wordBoundary.isSupported()&&(0,y.registerEditorAction)($),ae.titleBoundary.isSupported()&&(0,y.registerEditorAction)(ae),J.isSupported()&&(0,y.registerEditorAction)(J)}),define(se[823],oe([1,0,2,16]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});class y extends L.Disposable{constructor(S){super(),this._editor=S,this._register(this._editor.onMouseDown(p=>{const _=this._editor.getOption(116);_>=0&&p.target.type===6&&p.target.position.column>=_&&this._editor.updateOptions({stopRenderingLineAfter:-1})}))}}y.ID=\"editor.contrib.longLinesHelper\",(0,k.registerEditorContribution)(y.ID,y,2)}),define(se[166],oe([1,0,186,48,6,58,2,16,5,104,702,15,57,7,472]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";var t;Object.defineProperty(e,\"__esModule\",{value:!0}),e.MessageController=void 0;let r=t=class{static get(d){return d.getContribution(t.ID)}constructor(d,s,l){this._openerService=l,this._messageWidget=new S.MutableDisposable,this._messageListeners=new S.DisposableStore,this._mouseOverMessage=!1,this._editor=d,this._visible=t.MESSAGE_VISIBLE.bindTo(s)}dispose(){var d;(d=this._message)===null||d===void 0||d.dispose(),this._messageListeners.dispose(),this._messageWidget.dispose(),this._visible.reset()}showMessage(d,s){(0,k.alert)((0,E.isMarkdownString)(d)?d.value:d),this._visible.set(!0),this._messageWidget.clear(),this._messageListeners.clear(),this._message=(0,E.isMarkdownString)(d)?(0,L.renderMarkdown)(d,{actionHandler:{callback:o=>{this.closeMessage(),(0,v.openLinkFromMarkdown)(this._openerService,o,(0,E.isMarkdownString)(d)?d.isTrusted:void 0)},disposables:this._messageListeners}}):void 0,this._messageWidget.value=new f(this._editor,s,typeof d==\"string\"?d:this._message.element),this._messageListeners.add(y.Event.debounce(this._editor.onDidBlurEditorText,(o,g)=>g,0)(()=>{this._mouseOverMessage||this._messageWidget.value&&n.isAncestor(n.getActiveElement(),this._messageWidget.value.getDomNode())||this.closeMessage()})),this._messageListeners.add(this._editor.onDidChangeCursorPosition(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidDispose(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidChangeModel(()=>this.closeMessage())),this._messageListeners.add(n.addDisposableListener(this._messageWidget.value.getDomNode(),n.EventType.MOUSE_ENTER,()=>this._mouseOverMessage=!0,!0)),this._messageListeners.add(n.addDisposableListener(this._messageWidget.value.getDomNode(),n.EventType.MOUSE_LEAVE,()=>this._mouseOverMessage=!1,!0));let l;this._messageListeners.add(this._editor.onMouseMove(o=>{o.target.position&&(l?l.containsPosition(o.target.position)||this.closeMessage():l=new _.Range(s.lineNumber-3,1,o.target.position.lineNumber+3,1))}))}closeMessage(){this._visible.reset(),this._messageListeners.clear(),this._messageWidget.value&&this._messageListeners.add(f.fadeOut(this._messageWidget.value))}};e.MessageController=r,r.ID=\"editor.contrib.messageController\",r.MESSAGE_VISIBLE=new a.RawContextKey(\"messageVisible\",!1,b.localize(0,null)),e.MessageController=r=t=ke([ge(1,a.IContextKeyService),ge(2,i.IOpenerService)],r);const u=p.EditorCommand.bindToContribution(r.get);(0,p.registerEditorCommand)(new u({id:\"leaveEditorMessage\",precondition:r.MESSAGE_VISIBLE,handler:c=>c.closeMessage(),kbOpts:{weight:100+30,primary:9}}));class f{static fadeOut(d){const s=()=>{d.dispose(),clearTimeout(l),d.getDomNode().removeEventListener(\"animationend\",s)},l=setTimeout(s,110);return d.getDomNode().addEventListener(\"animationend\",s),d.getDomNode().classList.add(\"fadeOut\"),{dispose:s}}constructor(d,{lineNumber:s,column:l},o){this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._editor=d,this._editor.revealLinesInCenterIfOutsideViewport(s,s,0),this._position={lineNumber:s,column:l},this._domNode=document.createElement(\"div\"),this._domNode.classList.add(\"monaco-editor-overlaymessage\"),this._domNode.style.marginLeft=\"-6px\";const g=document.createElement(\"div\");g.classList.add(\"anchor\",\"top\"),this._domNode.appendChild(g);const h=document.createElement(\"div\");typeof o==\"string\"?(h.classList.add(\"message\"),h.textContent=o):(o.classList.add(\"message\"),h.appendChild(o)),this._domNode.appendChild(h);const m=document.createElement(\"div\");m.classList.add(\"anchor\",\"below\"),this._domNode.appendChild(m),this._editor.addContentWidget(this),this._domNode.classList.add(\"fadeIn\")}dispose(){this._editor.removeContentWidget(this)}getId(){return\"messageoverlay\"}getDomNode(){return this._domNode}getPosition(){return{position:this._position,preference:[1,2],positionAffinity:1}}afterRender(d){this._domNode.classList.toggle(\"below\",d===2)}}(0,p.registerEditorContribution)(r.ID,r,4)}),define(se[824],oe([1,0,58,2,16,166,709]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ReadOnlyMessageController=void 0;class p extends k.Disposable{constructor(v){super(),this.editor=v,this._register(this.editor.onDidAttemptReadOnlyEdit(()=>this._onDidAttemptReadOnlyEdit()))}_onDidAttemptReadOnlyEdit(){const v=E.MessageController.get(this.editor);if(v&&this.editor.hasModel()){let b=this.editor.getOptions().get(91);b||(this.editor.isSimpleWidget?b=new L.MarkdownString(S.localize(0,null)):b=new L.MarkdownString(S.localize(1,null))),v.showMessage(b,this.editor.getPosition())}}}e.ReadOnlyMessageController=p,p.ID=\"editor.contrib.readOnlyMessageController\",(0,y.registerEditorContribution)(p.ID,p,2)}),define(se[825],oe([1,0,13,19,12,16,10,5,24,21,309,562,712,30,25,18,68,20,22]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";var d;Object.defineProperty(e,\"__esModule\",{value:!0}),e.provideSelectionRanges=e.SmartSelectController=void 0;class s{constructor(w,D){this.index=w,this.ranges=D}mov(w){const D=this.index+(w?1:-1);if(D<0||D>=this.ranges.length)return this;const I=new s(D,this.ranges);return I.ranges[D].equalsRange(this.ranges[this.index])?I.mov(w):I}}let l=d=class{static get(w){return w.getContribution(d.ID)}constructor(w,D){this._editor=w,this._languageFeaturesService=D,this._ignoreSelection=!1}dispose(){var w;(w=this._selectionListener)===null||w===void 0||w.dispose()}async run(w){if(!this._editor.hasModel())return;const D=this._editor.getSelections(),I=this._editor.getModel();if(this._state||await m(this._languageFeaturesService.selectionRangeProvider,I,D.map(A=>A.getPosition()),this._editor.getOption(112),k.CancellationToken.None).then(A=>{var P;if(!(!L.isNonEmptyArray(A)||A.length!==D.length)&&!(!this._editor.hasModel()||!L.equals(this._editor.getSelections(),D,(N,M)=>N.equalsSelection(M)))){for(let N=0;N<A.length;N++)A[N]=A[N].filter(M=>M.containsPosition(D[N].getStartPosition())&&M.containsPosition(D[N].getEndPosition())),A[N].unshift(D[N]);this._state=A.map(N=>new s(0,N)),(P=this._selectionListener)===null||P===void 0||P.dispose(),this._selectionListener=this._editor.onDidChangeCursorPosition(()=>{var N;this._ignoreSelection||((N=this._selectionListener)===null||N===void 0||N.dispose(),this._state=void 0)})}}),!this._state)return;this._state=this._state.map(A=>A.mov(w));const T=this._state.map(A=>_.Selection.fromPositions(A.ranges[A.index].getStartPosition(),A.ranges[A.index].getEndPosition()));this._ignoreSelection=!0;try{this._editor.setSelections(T)}finally{this._ignoreSelection=!1}}};e.SmartSelectController=l,l.ID=\"editor.contrib.smartSelectController\",e.SmartSelectController=l=d=ke([ge(1,r.ILanguageFeaturesService)],l);class o extends E.EditorAction{constructor(w,D){super(D),this._forward=w}async run(w,D){const I=l.get(D);I&&await I.run(this._forward)}}class g extends o{constructor(){super(!0,{id:\"editor.action.smartSelect.expand\",label:i.localize(0,null),alias:\"Expand Selection\",precondition:void 0,kbOpts:{kbExpr:v.EditorContextKeys.editorTextFocus,primary:1553,mac:{primary:3345,secondary:[1297]},weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:\"1_basic\",title:i.localize(1,null),order:2}})}}t.CommandsRegistry.registerCommandAlias(\"editor.action.smartSelect.grow\",\"editor.action.smartSelect.expand\");class h extends o{constructor(){super(!1,{id:\"editor.action.smartSelect.shrink\",label:i.localize(2,null),alias:\"Shrink Selection\",precondition:void 0,kbOpts:{kbExpr:v.EditorContextKeys.editorTextFocus,primary:1551,mac:{primary:3343,secondary:[1295]},weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:\"1_basic\",title:i.localize(3,null),order:3}})}}(0,E.registerEditorContribution)(l.ID,l,4),(0,E.registerEditorAction)(g),(0,E.registerEditorAction)(h);async function m(C,w,D,I,T){const A=C.all(w).concat(new a.WordSelectionRangeProvider(I.selectSubwords));A.length===1&&A.unshift(new b.BracketSelectionRangeProvider);const P=[],N=[];for(const M of A)P.push(Promise.resolve(M.provideSelectionRanges(w,D,T)).then(R=>{if(L.isNonEmptyArray(R)&&R.length===D.length)for(let x=0;x<D.length;x++){N[x]||(N[x]=[]);for(const O of R[x])p.Range.isIRange(O.range)&&p.Range.containsPosition(O.range,D[x])&&N[x].push(p.Range.lift(O.range))}},y.onUnexpectedExternalError));return await Promise.all(P),N.map(M=>{if(M.length===0)return[];M.sort((B,W)=>S.Position.isBefore(B.getStartPosition(),W.getStartPosition())?1:S.Position.isBefore(W.getStartPosition(),B.getStartPosition())||S.Position.isBefore(B.getEndPosition(),W.getEndPosition())?-1:S.Position.isBefore(W.getEndPosition(),B.getEndPosition())?1:0);const R=[];let x;for(const B of M)(!x||p.Range.containsRange(B,x)&&!p.Range.equalsRange(B,x))&&(R.push(B),x=B);if(!I.selectLeadingAndTrailingWhitespace)return R;const O=[R[0]];for(let B=1;B<R.length;B++){const W=R[B-1],V=R[B];if(V.startLineNumber!==W.startLineNumber||V.endLineNumber!==W.endLineNumber){const K=new p.Range(W.startLineNumber,w.getLineFirstNonWhitespaceColumn(W.startLineNumber),W.endLineNumber,w.getLineLastNonWhitespaceColumn(W.endLineNumber));K.containsRange(W)&&!K.equalsRange(W)&&V.containsRange(K)&&!V.equalsRange(K)&&O.push(K);const F=new p.Range(W.startLineNumber,1,W.endLineNumber,w.getLineMaxColumn(W.endLineNumber));F.containsRange(W)&&!F.equalsRange(K)&&V.containsRange(F)&&!V.equalsRange(F)&&O.push(F)}O.push(V)}return O})}e.provideSelectionRanges=m,t.CommandsRegistry.registerCommand(\"_executeSelectionRangeProvider\",async function(C,...w){const[D,I]=w;(0,f.assertType)(c.URI.isUri(D));const T=C.get(r.ILanguageFeaturesService).selectionRangeProvider,A=await C.get(u.ITextModelService).createModelReference(D);try{return m(T,A.object.textEditorModel,I,{selectLeadingAndTrailingWhitespace:!0,selectSubwords:!0},k.CancellationToken.None)}finally{A.dispose()}})}),define(se[826],oe([1,0,61,16,724]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});class E extends k.EditorAction{constructor(){super({id:\"editor.action.forceRetokenize\",label:y.localize(0,null),alias:\"Developer: Force Retokenize\",precondition:void 0})}run(p,_){if(!_.hasModel())return;const v=_.getModel();v.tokenization.resetTokenization();const b=new L.StopWatch;v.tokenization.forceTokenization(v.getLineCount()),b.stop(),console.log(`tokenization took ${b.elapsed()}`)}}(0,k.registerEditorAction)(E)}),define(se[827],oe([1,0,2,49,16,33,726,162]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UnusualLineTerminatorsDetector=void 0;const _=\"ignoreUnusualLineTerminators\";function v(i,n,t){i.setModelProperty(n.uri,_,t)}function b(i,n){return i.getModelProperty(n.uri,_)}let a=class extends L.Disposable{constructor(n,t,r){super(),this._editor=n,this._dialogService=t,this._codeEditorService=r,this._isPresentingDialog=!1,this._config=this._editor.getOption(125),this._register(this._editor.onDidChangeConfiguration(u=>{u.hasChanged(125)&&(this._config=this._editor.getOption(125),this._checkForUnusualLineTerminators())})),this._register(this._editor.onDidChangeModel(()=>{this._checkForUnusualLineTerminators()})),this._register(this._editor.onDidChangeModelContent(u=>{u.isUndoing||this._checkForUnusualLineTerminators()})),this._checkForUnusualLineTerminators()}async _checkForUnusualLineTerminators(){if(this._config===\"off\"||!this._editor.hasModel())return;const n=this._editor.getModel();if(!n.mightContainUnusualLineTerminators()||b(this._codeEditorService,n)===!0||this._editor.getOption(90))return;if(this._config===\"auto\"){n.removeUnusualLineTerminators(this._editor.getSelections());return}if(this._isPresentingDialog)return;let r;try{this._isPresentingDialog=!0,r=await this._dialogService.confirm({title:S.localize(0,null),message:S.localize(1,null),detail:S.localize(2,null,(0,k.basename)(n.uri)),primaryButton:S.localize(3,null),cancelButton:S.localize(4,null)})}finally{this._isPresentingDialog=!1}if(!r.confirmed){v(this._codeEditorService,n,!0);return}n.removeUnusualLineTerminators(this._editor.getSelections())}};e.UnusualLineTerminatorsDetector=a,a.ID=\"editor.contrib.unusualLineTerminatorsDetector\",e.UnusualLineTerminatorsDetector=a=ke([ge(1,p.IDialogService),ge(2,E.ICodeEditorService)],a),(0,y.registerEditorContribution)(a.ID,a,1)}),define(se[364],oe([1,0,16,130,36,75,181,150,10,5,24,21,32,729,69,15,242]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DeleteInsideWord=e.DeleteWordRight=e.DeleteWordEndRight=e.DeleteWordStartRight=e.DeleteWordLeft=e.DeleteWordEndLeft=e.DeleteWordStartLeft=e.DeleteWordRightCommand=e.DeleteWordLeftCommand=e.DeleteWordCommand=e.CursorWordAccessibilityRightSelect=e.CursorWordAccessibilityRight=e.CursorWordRightSelect=e.CursorWordEndRightSelect=e.CursorWordStartRightSelect=e.CursorWordRight=e.CursorWordEndRight=e.CursorWordStartRight=e.CursorWordAccessibilityLeftSelect=e.CursorWordAccessibilityLeft=e.CursorWordLeftSelect=e.CursorWordEndLeftSelect=e.CursorWordStartLeftSelect=e.CursorWordLeft=e.CursorWordEndLeft=e.CursorWordStartLeft=e.WordRightCommand=e.WordLeftCommand=e.MoveWordCommand=void 0;class f extends L.EditorCommand{constructor($){super($),this._inSelectionMode=$.inSelectionMode,this._wordNavigationType=$.wordNavigationType}runEditorCommand($,J,Q){if(!J.hasModel())return;const re=(0,p.getMapForWordSeparators)(J.getOption(129)),de=J.getModel(),me=J.getSelections().map(X=>{const U=new _.Position(X.positionLineNumber,X.positionColumn),G=this._move(re,de,U,this._wordNavigationType);return this._moveTo(X,G,this._inSelectionMode)});if(de.pushStackElement(),J._getViewModel().setCursorStates(\"moveWordCommand\",3,me.map(X=>E.CursorState.fromModelSelection(X))),me.length===1){const X=new _.Position(me[0].positionLineNumber,me[0].positionColumn);J.revealPosition(X,0)}}_moveTo($,J,Q){return Q?new b.Selection($.selectionStartLineNumber,$.selectionStartColumn,J.lineNumber,J.column):new b.Selection(J.lineNumber,J.column,J.lineNumber,J.column)}}e.MoveWordCommand=f;class c extends f{_move($,J,Q,re){return S.WordOperations.moveWordLeft($,J,Q,re)}}e.WordLeftCommand=c;class d extends f{_move($,J,Q,re){return S.WordOperations.moveWordRight($,J,Q,re)}}e.WordRightCommand=d;class s extends c{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:\"cursorWordStartLeft\",precondition:void 0})}}e.CursorWordStartLeft=s;class l extends c{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:\"cursorWordEndLeft\",precondition:void 0})}}e.CursorWordEndLeft=l;class o extends c{constructor(){var $;super({inSelectionMode:!1,wordNavigationType:1,id:\"cursorWordLeft\",precondition:void 0,kbOpts:{kbExpr:r.ContextKeyExpr.and(a.EditorContextKeys.textInputFocus,($=r.ContextKeyExpr.and(t.CONTEXT_ACCESSIBILITY_MODE_ENABLED,u.IsWindowsContext))===null||$===void 0?void 0:$.negate()),primary:2063,mac:{primary:527},weight:100}})}}e.CursorWordLeft=o;class g extends c{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:\"cursorWordStartLeftSelect\",precondition:void 0})}}e.CursorWordStartLeftSelect=g;class h extends c{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:\"cursorWordEndLeftSelect\",precondition:void 0})}}e.CursorWordEndLeftSelect=h;class m extends c{constructor(){var $;super({inSelectionMode:!0,wordNavigationType:1,id:\"cursorWordLeftSelect\",precondition:void 0,kbOpts:{kbExpr:r.ContextKeyExpr.and(a.EditorContextKeys.textInputFocus,($=r.ContextKeyExpr.and(t.CONTEXT_ACCESSIBILITY_MODE_ENABLED,u.IsWindowsContext))===null||$===void 0?void 0:$.negate()),primary:3087,mac:{primary:1551},weight:100}})}}e.CursorWordLeftSelect=m;class C extends c{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:\"cursorWordAccessibilityLeft\",precondition:void 0})}_move($,J,Q,re){return super._move((0,p.getMapForWordSeparators)(y.EditorOptions.wordSeparators.defaultValue),J,Q,re)}}e.CursorWordAccessibilityLeft=C;class w extends c{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:\"cursorWordAccessibilityLeftSelect\",precondition:void 0})}_move($,J,Q,re){return super._move((0,p.getMapForWordSeparators)(y.EditorOptions.wordSeparators.defaultValue),J,Q,re)}}e.CursorWordAccessibilityLeftSelect=w;class D extends d{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:\"cursorWordStartRight\",precondition:void 0})}}e.CursorWordStartRight=D;class I extends d{constructor(){var $;super({inSelectionMode:!1,wordNavigationType:2,id:\"cursorWordEndRight\",precondition:void 0,kbOpts:{kbExpr:r.ContextKeyExpr.and(a.EditorContextKeys.textInputFocus,($=r.ContextKeyExpr.and(t.CONTEXT_ACCESSIBILITY_MODE_ENABLED,u.IsWindowsContext))===null||$===void 0?void 0:$.negate()),primary:2065,mac:{primary:529},weight:100}})}}e.CursorWordEndRight=I;class T extends d{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:\"cursorWordRight\",precondition:void 0})}}e.CursorWordRight=T;class A extends d{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:\"cursorWordStartRightSelect\",precondition:void 0})}}e.CursorWordStartRightSelect=A;class P extends d{constructor(){var $;super({inSelectionMode:!0,wordNavigationType:2,id:\"cursorWordEndRightSelect\",precondition:void 0,kbOpts:{kbExpr:r.ContextKeyExpr.and(a.EditorContextKeys.textInputFocus,($=r.ContextKeyExpr.and(t.CONTEXT_ACCESSIBILITY_MODE_ENABLED,u.IsWindowsContext))===null||$===void 0?void 0:$.negate()),primary:3089,mac:{primary:1553},weight:100}})}}e.CursorWordEndRightSelect=P;class N extends d{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:\"cursorWordRightSelect\",precondition:void 0})}}e.CursorWordRightSelect=N;class M extends d{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:\"cursorWordAccessibilityRight\",precondition:void 0})}_move($,J,Q,re){return super._move((0,p.getMapForWordSeparators)(y.EditorOptions.wordSeparators.defaultValue),J,Q,re)}}e.CursorWordAccessibilityRight=M;class R extends d{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:\"cursorWordAccessibilityRightSelect\",precondition:void 0})}_move($,J,Q,re){return super._move((0,p.getMapForWordSeparators)(y.EditorOptions.wordSeparators.defaultValue),J,Q,re)}}e.CursorWordAccessibilityRightSelect=R;class x extends L.EditorCommand{constructor($){super($),this._whitespaceHeuristics=$.whitespaceHeuristics,this._wordNavigationType=$.wordNavigationType}runEditorCommand($,J,Q){const re=$.get(i.ILanguageConfigurationService);if(!J.hasModel())return;const de=(0,p.getMapForWordSeparators)(J.getOption(129)),he=J.getModel(),me=J.getSelections(),X=J.getOption(6),U=J.getOption(11),G=re.getLanguageConfiguration(he.getLanguageId()).getAutoClosingPairs(),z=J._getViewModel(),H=me.map(Y=>{const j=this._delete({wordSeparators:de,model:he,selection:Y,whitespaceHeuristics:this._whitespaceHeuristics,autoClosingDelete:J.getOption(9),autoClosingBrackets:X,autoClosingQuotes:U,autoClosingPairs:G,autoClosedCharacters:z.getCursorAutoClosedCharacters()},this._wordNavigationType);return new k.ReplaceCommand(j,\"\")});J.pushUndoStop(),J.executeCommands(this.id,H),J.pushUndoStop()}}e.DeleteWordCommand=x;class O extends x{_delete($,J){const Q=S.WordOperations.deleteWordLeft($,J);return Q||new v.Range(1,1,1,1)}}e.DeleteWordLeftCommand=O;class B extends x{_delete($,J){const Q=S.WordOperations.deleteWordRight($,J);if(Q)return Q;const re=$.model.getLineCount(),de=$.model.getLineMaxColumn(re);return new v.Range(re,de,re,de)}}e.DeleteWordRightCommand=B;class W extends O{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:\"deleteWordStartLeft\",precondition:a.EditorContextKeys.writable})}}e.DeleteWordStartLeft=W;class V extends O{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:\"deleteWordEndLeft\",precondition:a.EditorContextKeys.writable})}}e.DeleteWordEndLeft=V;class K extends O{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:0,id:\"deleteWordLeft\",precondition:a.EditorContextKeys.writable,kbOpts:{kbExpr:a.EditorContextKeys.textInputFocus,primary:2049,mac:{primary:513},weight:100}})}}e.DeleteWordLeft=K;class F extends B{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:\"deleteWordStartRight\",precondition:a.EditorContextKeys.writable})}}e.DeleteWordStartRight=F;class q extends B{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:\"deleteWordEndRight\",precondition:a.EditorContextKeys.writable})}}e.DeleteWordEndRight=q;class ie extends B{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:2,id:\"deleteWordRight\",precondition:a.EditorContextKeys.writable,kbOpts:{kbExpr:a.EditorContextKeys.textInputFocus,primary:2068,mac:{primary:532},weight:100}})}}e.DeleteWordRight=ie;class ae extends L.EditorAction{constructor(){super({id:\"deleteInsideWord\",precondition:a.EditorContextKeys.writable,label:n.localize(0,null),alias:\"Delete Word\"})}run($,J,Q){if(!J.hasModel())return;const re=(0,p.getMapForWordSeparators)(J.getOption(129)),de=J.getModel(),me=J.getSelections().map(X=>{const U=S.WordOperations.deleteInsideWord(re,de,X);return new k.ReplaceCommand(U,\"\")});J.pushUndoStop(),J.executeCommands(this.id,me),J.pushUndoStop()}}e.DeleteInsideWord=ae,(0,L.registerEditorCommand)(new s),(0,L.registerEditorCommand)(new l),(0,L.registerEditorCommand)(new o),(0,L.registerEditorCommand)(new g),(0,L.registerEditorCommand)(new h),(0,L.registerEditorCommand)(new m),(0,L.registerEditorCommand)(new D),(0,L.registerEditorCommand)(new I),(0,L.registerEditorCommand)(new T),(0,L.registerEditorCommand)(new A),(0,L.registerEditorCommand)(new P),(0,L.registerEditorCommand)(new N),(0,L.registerEditorCommand)(new C),(0,L.registerEditorCommand)(new w),(0,L.registerEditorCommand)(new M),(0,L.registerEditorCommand)(new R),(0,L.registerEditorCommand)(new W),(0,L.registerEditorCommand)(new V),(0,L.registerEditorCommand)(new K),(0,L.registerEditorCommand)(new F),(0,L.registerEditorCommand)(new q),(0,L.registerEditorCommand)(new ie),(0,L.registerEditorAction)(ae)}),define(se[828],oe([1,0,16,181,5,21,364,25]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CursorWordPartRightSelect=e.CursorWordPartRight=e.WordPartRightCommand=e.CursorWordPartLeftSelect=e.CursorWordPartLeft=e.WordPartLeftCommand=e.DeleteWordPartRight=e.DeleteWordPartLeft=void 0;class _ extends S.DeleteWordCommand{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:0,id:\"deleteWordPartLeft\",precondition:E.EditorContextKeys.writable,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:769},weight:100}})}_delete(f,c){const d=k.WordPartOperations.deleteWordPartLeft(f);return d||new y.Range(1,1,1,1)}}e.DeleteWordPartLeft=_;class v extends S.DeleteWordCommand{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:2,id:\"deleteWordPartRight\",precondition:E.EditorContextKeys.writable,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:788},weight:100}})}_delete(f,c){const d=k.WordPartOperations.deleteWordPartRight(f);if(d)return d;const s=f.model.getLineCount(),l=f.model.getLineMaxColumn(s);return new y.Range(s,l,s,l)}}e.DeleteWordPartRight=v;class b extends S.MoveWordCommand{_move(f,c,d,s){return k.WordPartOperations.moveWordPartLeft(f,c,d)}}e.WordPartLeftCommand=b;class a extends b{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:\"cursorWordPartLeft\",precondition:void 0,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:783},weight:100}})}}e.CursorWordPartLeft=a,p.CommandsRegistry.registerCommandAlias(\"cursorWordPartStartLeft\",\"cursorWordPartLeft\");class i extends b{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:\"cursorWordPartLeftSelect\",precondition:void 0,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:1807},weight:100}})}}e.CursorWordPartLeftSelect=i,p.CommandsRegistry.registerCommandAlias(\"cursorWordPartStartLeftSelect\",\"cursorWordPartLeftSelect\");class n extends S.MoveWordCommand{_move(f,c,d,s){return k.WordPartOperations.moveWordPartRight(f,c,d)}}e.WordPartRightCommand=n;class t extends n{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:\"cursorWordPartRight\",precondition:void 0,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:785},weight:100}})}}e.CursorWordPartRight=t;class r extends n{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:\"cursorWordPartRightSelect\",precondition:void 0,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:1809},weight:100}})}}e.CursorWordPartRightSelect=r,(0,L.registerEditorCommand)(new _),(0,L.registerEditorCommand)(new v),(0,L.registerEditorCommand)(new a),(0,L.registerEditorCommand)(new i),(0,L.registerEditorCommand)(new t),(0,L.registerEditorCommand)(new r)}),define(se[829],oe([1,0,7,2,16,17,484]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IPadShowKeyboard=void 0;class S extends k.Disposable{constructor(v){super(),this.editor=v,this.widget=null,E.isIOS&&(this._register(v.onDidChangeConfiguration(()=>this.update())),this.update())}update(){const v=!this.editor.getOption(90);!this.widget&&v?this.widget=new p(this.editor):this.widget&&!v&&(this.widget.dispose(),this.widget=null)}dispose(){super.dispose(),this.widget&&(this.widget.dispose(),this.widget=null)}}e.IPadShowKeyboard=S,S.ID=\"editor.contrib.iPadShowKeyboard\";class p extends k.Disposable{constructor(v){super(),this.editor=v,this._domNode=document.createElement(\"textarea\"),this._domNode.className=\"iPadShowKeyboard\",this._register(L.addDisposableListener(this._domNode,\"touchstart\",b=>{this.editor.focus()})),this._register(L.addDisposableListener(this._domNode,\"focus\",b=>{this.editor.focus()})),this.editor.addOverlayWidget(this)}dispose(){this.editor.removeOverlayWidget(this),super.dispose()}getId(){return p.ID}getDomNode(){return this._domNode}getPosition(){return{preference:1}}}p.ID=\"editor.contrib.ShowKeyboardWidget\",(0,y.registerEditorContribution)(S.ID,S,3)}),define(se[830],oe([1,0,7,39,2,16,31,132,160,43,137,96,485]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";var i;Object.defineProperty(e,\"__esModule\",{value:!0});let n=i=class extends y.Disposable{static get(d){return d.getContribution(i.ID)}constructor(d,s,l){super(),this._editor=d,this._languageService=l,this._widget=null,this._register(this._editor.onDidChangeModel(o=>this.stop())),this._register(this._editor.onDidChangeModelLanguage(o=>this.stop())),this._register(S.TokenizationRegistry.onDidChange(o=>this.stop())),this._register(this._editor.onKeyUp(o=>o.keyCode===9&&this.stop()))}dispose(){this.stop(),super.dispose()}launch(){this._widget||this._editor.hasModel()&&(this._widget=new f(this._editor,this._languageService))}stop(){this._widget&&(this._widget.dispose(),this._widget=null)}};n.ID=\"editor.contrib.inspectTokens\",n=i=ke([ge(1,b.IStandaloneThemeService),ge(2,v.ILanguageService)],n);class t extends E.EditorAction{constructor(){super({id:\"editor.action.inspectTokens\",label:a.InspectTokensNLS.inspectTokensAction,alias:\"Developer: Inspect Tokens\",precondition:void 0})}run(d,s){const l=n.get(s);l?.launch()}}function r(c){let d=\"\";for(let s=0,l=c.length;s<l;s++){const o=c.charCodeAt(s);switch(o){case 9:d+=\"\\u2192\";break;case 32:d+=\"\\xB7\";break;default:d+=String.fromCharCode(o)}}return d}function u(c,d){const s=S.TokenizationRegistry.get(d);if(s)return s;const l=c.encodeLanguageId(d);return{getInitialState:()=>_.NullState,tokenize:(o,g,h)=>(0,_.nullTokenize)(d,h),tokenizeEncoded:(o,g,h)=>(0,_.nullTokenizeEncoded)(l,h)}}class f extends y.Disposable{constructor(d,s){super(),this.allowEditorOverflow=!0,this._editor=d,this._languageService=s,this._model=this._editor.getModel(),this._domNode=document.createElement(\"div\"),this._domNode.className=\"tokens-inspect-widget\",this._tokenizationSupport=u(this._languageService.languageIdCodec,this._model.getLanguageId()),this._compute(this._editor.getPosition()),this._register(this._editor.onDidChangeCursorPosition(l=>this._compute(this._editor.getPosition()))),this._editor.addContentWidget(this)}dispose(){this._editor.removeContentWidget(this),super.dispose()}getId(){return f._ID}_compute(d){const s=this._getTokensAtLine(d.lineNumber);let l=0;for(let C=s.tokens1.length-1;C>=0;C--){const w=s.tokens1[C];if(d.column-1>=w.offset){l=C;break}}let o=0;for(let C=s.tokens2.length>>>1;C>=0;C--)if(d.column-1>=s.tokens2[C<<1]){o=C;break}const g=this._model.getLineContent(d.lineNumber);let h=\"\";if(l<s.tokens1.length){const C=s.tokens1[l].offset,w=l+1<s.tokens1.length?s.tokens1[l+1].offset:g.length;h=g.substring(C,w)}(0,L.reset)(this._domNode,(0,L.$)(\"h2.tm-token\",void 0,r(h),(0,L.$)(\"span.tm-token-length\",void 0,`${h.length} ${h.length===1?\"char\":\"chars\"}`))),(0,L.append)(this._domNode,(0,L.$)(\"hr.tokens-inspect-separator\",{style:\"clear:both\"}));const m=(o<<1)+1<s.tokens2.length?this._decodeMetadata(s.tokens2[(o<<1)+1]):null;(0,L.append)(this._domNode,(0,L.$)(\"table.tm-metadata-table\",void 0,(0,L.$)(\"tbody\",void 0,(0,L.$)(\"tr\",void 0,(0,L.$)(\"td.tm-metadata-key\",void 0,\"language\"),(0,L.$)(\"td.tm-metadata-value\",void 0,`${m?m.languageId:\"-?-\"}`)),(0,L.$)(\"tr\",void 0,(0,L.$)(\"td.tm-metadata-key\",void 0,\"token type\"),(0,L.$)(\"td.tm-metadata-value\",void 0,`${m?this._tokenTypeToString(m.tokenType):\"-?-\"}`)),(0,L.$)(\"tr\",void 0,(0,L.$)(\"td.tm-metadata-key\",void 0,\"font style\"),(0,L.$)(\"td.tm-metadata-value\",void 0,`${m?this._fontStyleToString(m.fontStyle):\"-?-\"}`)),(0,L.$)(\"tr\",void 0,(0,L.$)(\"td.tm-metadata-key\",void 0,\"foreground\"),(0,L.$)(\"td.tm-metadata-value\",void 0,`${m?k.Color.Format.CSS.formatHex(m.foreground):\"-?-\"}`)),(0,L.$)(\"tr\",void 0,(0,L.$)(\"td.tm-metadata-key\",void 0,\"background\"),(0,L.$)(\"td.tm-metadata-value\",void 0,`${m?k.Color.Format.CSS.formatHex(m.background):\"-?-\"}`))))),(0,L.append)(this._domNode,(0,L.$)(\"hr.tokens-inspect-separator\")),l<s.tokens1.length&&(0,L.append)(this._domNode,(0,L.$)(\"span.tm-token-type\",void 0,s.tokens1[l].type)),this._editor.layoutContentWidget(this)}_decodeMetadata(d){const s=S.TokenizationRegistry.getColorMap(),l=p.TokenMetadata.getLanguageId(d),o=p.TokenMetadata.getTokenType(d),g=p.TokenMetadata.getFontStyle(d),h=p.TokenMetadata.getForeground(d),m=p.TokenMetadata.getBackground(d);return{languageId:this._languageService.languageIdCodec.decodeLanguageId(l),tokenType:o,fontStyle:g,foreground:s[h],background:s[m]}}_tokenTypeToString(d){switch(d){case 0:return\"Other\";case 1:return\"Comment\";case 2:return\"String\";case 3:return\"RegEx\";default:return\"??\"}}_fontStyleToString(d){let s=\"\";return d&1&&(s+=\"italic \"),d&2&&(s+=\"bold \"),d&4&&(s+=\"underline \"),d&8&&(s+=\"strikethrough \"),s.length===0&&(s=\"---\"),s}_getTokensAtLine(d){const s=this._getStateBeforeLine(d),l=this._tokenizationSupport.tokenize(this._model.getLineContent(d),!0,s),o=this._tokenizationSupport.tokenizeEncoded(this._model.getLineContent(d),!0,s);return{startState:s,tokens1:l.tokens,tokens2:o.tokens,endState:l.endState}}_getStateBeforeLine(d){let s=this._tokenizationSupport.getInitialState();for(let l=1;l<d;l++)s=this._tokenizationSupport.tokenize(this._model.getLineContent(l),!0,s).endState;return s}getDomNode(){return this._domNode}getPosition(){return{position:this._editor.getPosition(),preference:[2,1]}}}f._ID=\"editor.contrib.inspectTokensWidget\",(0,E.registerEditorContribution)(n.ID,n,4),(0,E.registerEditorAction)(t)}),define(se[831],oe([1,0,580,12,71,108,2,53,407,746,25,27,162,8,34,787,92,81]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){\"use strict\";var c,d;Object.defineProperty(e,\"__esModule\",{value:!0}),e.CommandsHistory=e.AbstractCommandsQuickAccessProvider=void 0;let s=c=class extends r.PickerQuickAccessProvider{constructor(g,h,m,C,w,D){super(c.PREFIX,g),this.instantiationService=h,this.keybindingService=m,this.commandService=C,this.telemetryService=w,this.dialogService=D,this.commandsHistory=this._register(this.instantiationService.createInstance(l)),this.options=g}async _getPicks(g,h,m,C){var w,D,I,T;const A=await this.getCommandPicks(m);if(m.isCancellationRequested)return[];const P=(0,E.createSingleCallFunction)(()=>{const W=new _.TfIdfCalculator;W.updateDocuments(A.map(K=>({key:K.commandId,textChunks:[this.getTfIdfChunk(K)]})));const V=W.calculateScores(g,m);return(0,_.normalizeTfIdfScores)(V).filter(K=>K.score>c.TFIDF_THRESHOLD).slice(0,c.TFIDF_MAX_RESULTS)}),N=[];for(const W of A){const V=(w=c.WORD_FILTER(g,W.label))!==null&&w!==void 0?w:void 0,K=W.commandAlias&&(D=c.WORD_FILTER(g,W.commandAlias))!==null&&D!==void 0?D:void 0;if(V||K)W.highlights={label:V,detail:this.options.showAlias?K:void 0},N.push(W);else if(g===W.commandId)N.push(W);else if(g.length>=3){const F=P();if(m.isCancellationRequested)return[];const q=F.find(ie=>ie.key===W.commandId);q&&(W.tfIdfScore=q.score,N.push(W))}}const M=new Map;for(const W of N){const V=M.get(W.label);V?(W.description=W.commandId,V.description=V.commandId):M.set(W.label,W)}N.sort((W,V)=>{if(W.tfIdfScore&&V.tfIdfScore)return W.tfIdfScore===V.tfIdfScore?W.label.localeCompare(V.label):V.tfIdfScore-W.tfIdfScore;if(W.tfIdfScore)return 1;if(V.tfIdfScore)return-1;const K=this.commandsHistory.peek(W.commandId),F=this.commandsHistory.peek(V.commandId);if(K&&F)return K>F?-1:1;if(K)return-1;if(F)return 1;if(this.options.suggestedCommandIds){const q=this.options.suggestedCommandIds.has(W.commandId),ie=this.options.suggestedCommandIds.has(V.commandId);if(q&&ie)return 0;if(q)return-1;if(ie)return 1}return W.label.localeCompare(V.label)});const R=[];let x=!1,O=!0,B=!!this.options.suggestedCommandIds;for(let W=0;W<N.length;W++){const V=N[W];W===0&&this.commandsHistory.peek(V.commandId)&&(R.push({type:\"separator\",label:(0,v.localize)(0,null)}),x=!0),O&&V.tfIdfScore!==void 0&&(R.push({type:\"separator\",label:(0,v.localize)(1,null)}),O=!1),B&&V.tfIdfScore===void 0&&!this.commandsHistory.peek(V.commandId)&&(!((I=this.options.suggestedCommandIds)===null||I===void 0)&&I.has(V.commandId))&&(R.push({type:\"separator\",label:(0,v.localize)(2,null)}),x=!0,B=!1),x&&V.tfIdfScore===void 0&&!this.commandsHistory.peek(V.commandId)&&!(!((T=this.options.suggestedCommandIds)===null||T===void 0)&&T.has(V.commandId))&&(R.push({type:\"separator\",label:(0,v.localize)(3,null)}),x=!1),R.push(this.toCommandPick(V,C))}return this.hasAdditionalCommandPicks(g,m)?{picks:R,additionalPicks:(async()=>{var W;const V=await this.getAdditionalCommandPicks(A,N,g,m);if(m.isCancellationRequested)return[];const K=V.map(F=>this.toCommandPick(F,C));return O&&((W=K[0])===null||W===void 0?void 0:W.type)!==\"separator\"&&K.unshift({type:\"separator\",label:(0,v.localize)(4,null)}),K})()}:R}toCommandPick(g,h){if(g.type===\"separator\")return g;const m=this.keybindingService.lookupKeybinding(g.commandId),C=m?(0,v.localize)(5,null,g.label,m.getAriaLabel()):g.label;return{...g,ariaLabel:C,detail:this.options.showAlias&&g.commandAlias!==g.label?g.commandAlias:void 0,keybinding:m,accept:async()=>{var w,D;this.commandsHistory.push(g.commandId),this.telemetryService.publicLog2(\"workbenchActionExecuted\",{id:g.commandId,from:(w=h?.from)!==null&&w!==void 0?w:\"quick open\"});try{!((D=g.args)===null||D===void 0)&&D.length?await this.commandService.executeCommand(g.commandId,...g.args):await this.commandService.executeCommand(g.commandId)}catch(I){(0,k.isCancellationError)(I)||this.dialogService.error((0,v.localize)(6,null,g.label),(0,L.toErrorMessage)(I))}}}}getTfIdfChunk({label:g,commandAlias:h,commandDescription:m}){let C=g;return h&&h!==g&&(C+=` - ${h}`),m&&m.value!==g&&(C+=` - ${m.value===m.original?m.value:`${m.value} (${m.original})`}`),C}};e.AbstractCommandsQuickAccessProvider=s,s.PREFIX=\">\",s.TFIDF_THRESHOLD=.5,s.TFIDF_MAX_RESULTS=5,s.WORD_FILTER=(0,y.or)(y.matchesPrefix,y.matchesWords,y.matchesContiguousSubString),e.AbstractCommandsQuickAccessProvider=s=c=ke([ge(1,n.IInstantiationService),ge(2,t.IKeybindingService),ge(3,b.ICommandService),ge(4,f.ITelemetryService),ge(5,i.IDialogService)],s);let l=d=class extends S.Disposable{constructor(g,h){super(),this.storageService=g,this.configurationService=h,this.configuredCommandsHistoryLength=0,this.updateConfiguration(),this.load(),this.registerListeners()}registerListeners(){this._register(this.configurationService.onDidChangeConfiguration(g=>this.updateConfiguration(g))),this._register(this.storageService.onWillSaveState(g=>{g.reason===u.WillSaveStateReason.SHUTDOWN&&this.saveState()}))}updateConfiguration(g){g&&!g.affectsConfiguration(\"workbench.commandPalette.history\")||(this.configuredCommandsHistoryLength=d.getConfiguredCommandHistoryLength(this.configurationService),d.cache&&d.cache.limit!==this.configuredCommandsHistoryLength&&(d.cache.limit=this.configuredCommandsHistoryLength,d.hasChanges=!0))}load(){const g=this.storageService.get(d.PREF_KEY_CACHE,0);let h;if(g)try{h=JSON.parse(g)}catch{}const m=d.cache=new p.LRUCache(this.configuredCommandsHistoryLength,1);if(h){let C;h.usesLRU?C=h.entries:C=h.entries.sort((w,D)=>w.value-D.value),C.forEach(w=>m.set(w.key,w.value))}d.counter=this.storageService.getNumber(d.PREF_KEY_COUNTER,0,d.counter)}push(g){d.cache&&(d.cache.set(g,d.counter++),d.hasChanges=!0)}peek(g){var h;return(h=d.cache)===null||h===void 0?void 0:h.peek(g)}saveState(){if(!d.cache||!d.hasChanges)return;const g={usesLRU:!0,entries:[]};d.cache.forEach((h,m)=>g.entries.push({key:m,value:h})),this.storageService.store(d.PREF_KEY_CACHE,JSON.stringify(g),0,0),this.storageService.store(d.PREF_KEY_COUNTER,d.counter,0,0),d.hasChanges=!1}static getConfiguredCommandHistoryLength(g){var h,m;const w=(m=(h=g.getValue().workbench)===null||h===void 0?void 0:h.commandPalette)===null||m===void 0?void 0:m.history;return typeof w==\"number\"?w:d.DEFAULT_COMMANDS_HISTORY_LENGTH}};e.CommandsHistory=l,l.DEFAULT_COMMANDS_HISTORY_LENGTH=50,l.PREF_KEY_CACHE=\"commandPalette.mru.cache\",l.PREF_KEY_COUNTER=\"commandPalette.mru.counter\",l.counter=1,l.hasChanges=!1,e.CommandsHistory=l=d=ke([ge(0,u.IStorageService),ge(1,a.IConfigurationService)],l)}),define(se[832],oe([1,0,126,831]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractEditorCommandsQuickAccessProvider=void 0;class y extends k.AbstractCommandsQuickAccessProvider{constructor(S,p,_,v,b,a){super(S,p,_,v,b,a)}getCodeEditorCommandPicks(){const S=this.activeTextEditorControl;if(!S)return[];const p=[];for(const _ of S.getSupportedActions())p.push({commandId:_.id,commandAlias:_.alias,label:(0,L.stripIcons)(_.label)||_.id});return p}}e.AbstractEditorCommandsQuickAccessProvider=y}),define(se[833],oe([1,0,37,139,96,33,832,8,34,25,81,162,16,21,70]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.GotoLineAction=e.StandaloneCommandsQuickAccessProvider=void 0;let r=class extends S.AbstractEditorCommandsQuickAccessProvider{get activeTextEditorControl(){var c;return(c=this.codeEditorService.getFocusedCodeEditor())!==null&&c!==void 0?c:void 0}constructor(c,d,s,l,o,g){super({showAlias:!1},c,s,l,o,g),this.codeEditorService=d}async getCommandPicks(){return this.getCodeEditorCommandPicks()}hasAdditionalCommandPicks(){return!1}async getAdditionalCommandPicks(){return[]}};e.StandaloneCommandsQuickAccessProvider=r,e.StandaloneCommandsQuickAccessProvider=r=ke([ge(0,p.IInstantiationService),ge(1,E.ICodeEditorService),ge(2,_.IKeybindingService),ge(3,v.ICommandService),ge(4,b.ITelemetryService),ge(5,a.IDialogService)],r);class u extends i.EditorAction{constructor(){super({id:u.ID,label:y.QuickCommandNLS.quickCommandActionLabel,alias:\"Command Palette\",precondition:void 0,kbOpts:{kbExpr:n.EditorContextKeys.focus,primary:59,weight:100},contextMenuOpts:{group:\"z_commands\",order:1}})}run(c){c.get(t.IQuickInputService).quickAccess.show(r.PREFIX)}}e.GotoLineAction=u,u.ID=\"editor.action.quickCommand\",(0,i.registerEditorAction)(u),L.Registry.as(k.Extensions.Quickaccess).registerQuickAccessProvider({ctor:r,prefix:r.PREFIX,helpEntries:[{description:y.QuickCommandNLS.quickCommandHelp,commandId:u.ID}]})}),define(se[29],oe([1,0,90,14,39,6,752,245,37]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.workbenchColorsSchemaId=e.resolveColorValue=e.ifDefinedThenElse=e.oneOf=e.transparent=e.lighten=e.darken=e.executeTransform=e.chartsPurple=e.chartsGreen=e.chartsOrange=e.chartsYellow=e.chartsBlue=e.chartsRed=e.chartsLines=e.chartsForeground=e.problemsInfoIconForeground=e.problemsWarningIconForeground=e.problemsErrorIconForeground=e.minimapSliderActiveBackground=e.minimapSliderHoverBackground=e.minimapSliderBackground=e.minimapForegroundOpacity=e.minimapBackground=e.minimapError=e.minimapWarning=e.minimapInfo=e.minimapSelection=e.minimapSelectionOccurrenceHighlight=e.minimapFindMatch=e.overviewRulerSelectionHighlightForeground=e.overviewRulerFindMatchForeground=e.overviewRulerCommonContentForeground=e.overviewRulerIncomingContentForeground=e.overviewRulerCurrentContentForeground=e.mergeBorder=e.mergeCommonContentBackground=e.mergeCommonHeaderBackground=e.mergeIncomingContentBackground=e.mergeIncomingHeaderBackground=e.mergeCurrentContentBackground=e.mergeCurrentHeaderBackground=e.breadcrumbsPickerBackground=e.breadcrumbsActiveSelectionForeground=e.breadcrumbsFocusForeground=e.breadcrumbsBackground=e.breadcrumbsForeground=e.snippetFinalTabstopHighlightBorder=e.snippetFinalTabstopHighlightBackground=e.snippetTabstopHighlightBorder=e.snippetTabstopHighlightBackground=e.toolbarActiveBackground=e.toolbarHoverOutline=e.toolbarHoverBackground=e.menuSeparatorBackground=e.menuSelectionBorder=e.menuSelectionBackground=e.menuSelectionForeground=e.menuBackground=e.menuForeground=e.menuBorder=e.quickInputListFocusBackground=e.quickInputListFocusIconForeground=e.quickInputListFocusForeground=e._deprecatedQuickInputListFocusBackground=e.checkboxSelectBorder=e.checkboxBorder=e.checkboxForeground=e.checkboxSelectBackground=e.checkboxBackground=e.listDeemphasizedForeground=e.tableOddRowsBackgroundColor=e.tableColumnsBorder=e.treeInactiveIndentGuidesStroke=e.treeIndentGuidesStroke=e.listFilterMatchHighlightBorder=e.listFilterMatchHighlight=e.listFilterWidgetShadow=e.listFilterWidgetNoMatchesOutline=e.listFilterWidgetOutline=e.listFilterWidgetBackground=e.listWarningForeground=e.listErrorForeground=e.listInvalidItemForeground=e.listFocusHighlightForeground=e.listHighlightForeground=e.listDropBetweenBackground=e.listDropOverBackground=e.listHoverForeground=e.listHoverBackground=e.listInactiveFocusOutline=e.listInactiveFocusBackground=e.listInactiveSelectionIconForeground=e.listInactiveSelectionForeground=e.listInactiveSelectionBackground=e.listActiveSelectionIconForeground=e.listActiveSelectionForeground=e.listActiveSelectionBackground=e.listFocusAndSelectionOutline=e.listFocusOutline=e.listFocusForeground=e.listFocusBackground=e.diffUnchangedTextBackground=e.diffUnchangedRegionForeground=e.diffUnchangedRegionBackground=e.diffDiagonalFill=e.diffBorder=e.diffRemovedOutline=e.diffInsertedOutline=e.diffOverviewRulerRemoved=e.diffOverviewRulerInserted=e.diffRemovedLineGutter=e.diffInsertedLineGutter=e.diffRemovedLine=e.diffInsertedLine=e.diffRemoved=e.diffInserted=e.defaultRemoveColor=e.defaultInsertColor=e.editorLightBulbAiForeground=e.editorLightBulbAutoFixForeground=e.editorLightBulbForeground=e.editorInlayHintParameterBackground=e.editorInlayHintParameterForeground=e.editorInlayHintTypeBackground=e.editorInlayHintTypeForeground=e.editorInlayHintBackground=e.editorInlayHintForeground=e.editorActiveLinkForeground=e.editorHoverStatusBarBackground=e.editorHoverBorder=e.editorHoverForeground=e.editorHoverBackground=e.editorHoverHighlight=e.searchResultsInfoForeground=e.searchEditorFindMatchBorder=e.searchEditorFindMatch=e.editorFindRangeHighlightBorder=e.editorFindMatchHighlightBorder=e.editorFindMatchBorder=e.editorFindRangeHighlight=e.editorFindMatchHighlight=e.editorFindMatch=e.editorSelectionHighlightBorder=e.editorSelectionHighlight=e.editorInactiveSelection=e.editorSelectionForeground=e.editorSelectionBackground=e.keybindingLabelBottomBorder=e.keybindingLabelBorder=e.keybindingLabelForeground=e.keybindingLabelBackground=e.pickerGroupBorder=e.pickerGroupForeground=e.quickInputTitleBackground=e.quickInputForeground=e.quickInputBackground=e.editorWidgetResizeBorder=e.editorWidgetBorder=e.editorWidgetForeground=e.editorWidgetBackground=e.editorStickyScrollShadow=e.editorStickyScrollBorder=e.editorStickyScrollHoverBackground=e.editorStickyScrollBackground=e.editorForeground=e.editorBackground=e.sashHoverBorder=e.editorHintBorder=e.editorHintForeground=e.editorInfoBorder=e.editorInfoForeground=e.editorInfoBackground=e.editorWarningBorder=e.editorWarningForeground=e.editorWarningBackground=e.editorErrorBorder=e.editorErrorForeground=e.editorErrorBackground=e.progressBarBackground=e.scrollbarSliderActiveBackground=e.scrollbarSliderHoverBackground=e.scrollbarSliderBackground=e.scrollbarShadow=e.badgeForeground=e.badgeBackground=e.buttonSecondaryHoverBackground=e.buttonSecondaryBackground=e.buttonSecondaryForeground=e.buttonBorder=e.buttonHoverBackground=e.buttonBackground=e.buttonSeparator=e.buttonForeground=e.selectBorder=e.selectForeground=e.selectListBackground=e.selectBackground=e.inputValidationErrorBorder=e.inputValidationErrorForeground=e.inputValidationErrorBackground=e.inputValidationWarningBorder=e.inputValidationWarningForeground=e.inputValidationWarningBackground=e.inputValidationInfoBorder=e.inputValidationInfoForeground=e.inputValidationInfoBackground=e.inputPlaceholderForeground=e.inputActiveOptionForeground=e.inputActiveOptionBackground=e.inputActiveOptionHoverBackground=e.inputActiveOptionBorder=e.inputBorder=e.inputForeground=e.inputBackground=e.widgetBorder=e.widgetShadow=e.textCodeBlockBackground=e.textBlockQuoteBorder=e.textBlockQuoteBackground=e.textPreformatBackground=e.textPreformatForeground=e.textLinkActiveForeground=e.textLinkForeground=e.textSeparatorForeground=e.selectionBackground=e.activeContrastBorder=e.contrastBorder=e.focusBorder=e.iconForeground=e.descriptionForeground=e.errorForeground=e.disabledForeground=e.foreground=e.registerColor=e.Extensions=e.asCssVariableWithDefault=e.asCssVariable=e.asCssVariableName=void 0;function v(A){return`--vscode-${A.replace(/\\./g,\"-\")}`}e.asCssVariableName=v;function b(A){return`var(${v(A)})`}e.asCssVariable=b;function a(A,P){return`var(${v(A)}, ${P})`}e.asCssVariableWithDefault=a,e.Extensions={ColorContribution:\"base.contributions.colors\"};class i{constructor(){this._onDidChangeSchema=new E.Emitter,this.onDidChangeSchema=this._onDidChangeSchema.event,this.colorSchema={type:\"object\",properties:{}},this.colorReferenceSchema={type:\"string\",enum:[],enumDescriptions:[]},this.colorsById={}}registerColor(P,N,M,R=!1,x){const O={id:P,description:M,defaults:N,needsTransparency:R,deprecationMessage:x};this.colorsById[P]=O;const B={type:\"string\",description:M,format:\"color-hex\",defaultSnippets:[{body:\"${1:#ff0000}\"}]};return x&&(B.deprecationMessage=x),R&&(B.pattern=\"^#(?:(?<rgba>[0-9a-fA-f]{3}[0-9a-eA-E])|(?:[0-9a-fA-F]{6}(?:(?![fF]{2})(?:[0-9a-fA-F]{2}))))?$\",B.patternErrorMessage=\"This color must be transparent or it will obscure content\"),this.colorSchema.properties[P]=B,this.colorReferenceSchema.enum.push(P),this.colorReferenceSchema.enumDescriptions.push(M),this._onDidChangeSchema.fire(),P}getColors(){return Object.keys(this.colorsById).map(P=>this.colorsById[P])}resolveDefaultColor(P,N){const M=this.colorsById[P];if(M&&M.defaults){const R=M.defaults[N.type];return D(R,N)}}getColorSchema(){return this.colorSchema}toString(){const P=(N,M)=>{const R=N.indexOf(\".\")===-1?0:1,x=M.indexOf(\".\")===-1?0:1;return R!==x?R-x:N.localeCompare(M)};return Object.keys(this.colorsById).sort(P).map(N=>`- \\`${N}\\`: ${this.colorsById[N].description}`).join(`\n`)}}const n=new i;_.Registry.add(e.Extensions.ColorContribution,n);function t(A,P,N,M,R){return n.registerColor(A,P,N,M,R)}e.registerColor=t,e.foreground=t(\"foreground\",{dark:\"#CCCCCC\",light:\"#616161\",hcDark:\"#FFFFFF\",hcLight:\"#292929\"},S.localize(0,null)),e.disabledForeground=t(\"disabledForeground\",{dark:\"#CCCCCC80\",light:\"#61616180\",hcDark:\"#A5A5A5\",hcLight:\"#7F7F7F\"},S.localize(1,null)),e.errorForeground=t(\"errorForeground\",{dark:\"#F48771\",light:\"#A1260D\",hcDark:\"#F48771\",hcLight:\"#B5200D\"},S.localize(2,null)),e.descriptionForeground=t(\"descriptionForeground\",{light:\"#717171\",dark:h(e.foreground,.7),hcDark:h(e.foreground,.7),hcLight:h(e.foreground,.7)},S.localize(3,null)),e.iconForeground=t(\"icon.foreground\",{dark:\"#C5C5C5\",light:\"#424242\",hcDark:\"#FFFFFF\",hcLight:\"#292929\"},S.localize(4,null)),e.focusBorder=t(\"focusBorder\",{dark:\"#007FD4\",light:\"#0090F1\",hcDark:\"#F38518\",hcLight:\"#006BBD\"},S.localize(5,null)),e.contrastBorder=t(\"contrastBorder\",{light:null,dark:null,hcDark:\"#6FC3DF\",hcLight:\"#0F4A85\"},S.localize(6,null)),e.activeContrastBorder=t(\"contrastActiveBorder\",{light:null,dark:null,hcDark:e.focusBorder,hcLight:e.focusBorder},S.localize(7,null)),e.selectionBackground=t(\"selection.background\",{light:null,dark:null,hcDark:null,hcLight:null},S.localize(8,null)),e.textSeparatorForeground=t(\"textSeparator.foreground\",{light:\"#0000002e\",dark:\"#ffffff2e\",hcDark:y.Color.black,hcLight:\"#292929\"},S.localize(9,null)),e.textLinkForeground=t(\"textLink.foreground\",{light:\"#006AB1\",dark:\"#3794FF\",hcDark:\"#3794FF\",hcLight:\"#0F4A85\"},S.localize(10,null)),e.textLinkActiveForeground=t(\"textLink.activeForeground\",{light:\"#006AB1\",dark:\"#3794FF\",hcDark:\"#3794FF\",hcLight:\"#0F4A85\"},S.localize(11,null)),e.textPreformatForeground=t(\"textPreformat.foreground\",{light:\"#A31515\",dark:\"#D7BA7D\",hcDark:\"#000000\",hcLight:\"#FFFFFF\"},S.localize(12,null)),e.textPreformatBackground=t(\"textPreformat.background\",{light:\"#0000001A\",dark:\"#FFFFFF1A\",hcDark:\"#FFFFFF\",hcLight:\"#09345f\"},S.localize(13,null)),e.textBlockQuoteBackground=t(\"textBlockQuote.background\",{light:\"#f2f2f2\",dark:\"#222222\",hcDark:null,hcLight:\"#F2F2F2\"},S.localize(14,null)),e.textBlockQuoteBorder=t(\"textBlockQuote.border\",{light:\"#007acc80\",dark:\"#007acc80\",hcDark:y.Color.white,hcLight:\"#292929\"},S.localize(15,null)),e.textCodeBlockBackground=t(\"textCodeBlock.background\",{light:\"#dcdcdc66\",dark:\"#0a0a0a66\",hcDark:y.Color.black,hcLight:\"#F2F2F2\"},S.localize(16,null)),e.widgetShadow=t(\"widget.shadow\",{dark:h(y.Color.black,.36),light:h(y.Color.black,.16),hcDark:null,hcLight:null},S.localize(17,null)),e.widgetBorder=t(\"widget.border\",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(18,null)),e.inputBackground=t(\"input.background\",{dark:\"#3C3C3C\",light:y.Color.white,hcDark:y.Color.black,hcLight:y.Color.white},S.localize(19,null)),e.inputForeground=t(\"input.foreground\",{dark:e.foreground,light:e.foreground,hcDark:e.foreground,hcLight:e.foreground},S.localize(20,null)),e.inputBorder=t(\"input.border\",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(21,null)),e.inputActiveOptionBorder=t(\"inputOption.activeBorder\",{dark:\"#007ACC\",light:\"#007ACC\",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(22,null)),e.inputActiveOptionHoverBackground=t(\"inputOption.hoverBackground\",{dark:\"#5a5d5e80\",light:\"#b8b8b850\",hcDark:null,hcLight:null},S.localize(23,null)),e.inputActiveOptionBackground=t(\"inputOption.activeBackground\",{dark:h(e.focusBorder,.4),light:h(e.focusBorder,.2),hcDark:y.Color.transparent,hcLight:y.Color.transparent},S.localize(24,null)),e.inputActiveOptionForeground=t(\"inputOption.activeForeground\",{dark:y.Color.white,light:y.Color.black,hcDark:e.foreground,hcLight:e.foreground},S.localize(25,null)),e.inputPlaceholderForeground=t(\"input.placeholderForeground\",{light:h(e.foreground,.5),dark:h(e.foreground,.5),hcDark:h(e.foreground,.7),hcLight:h(e.foreground,.7)},S.localize(26,null)),e.inputValidationInfoBackground=t(\"inputValidation.infoBackground\",{dark:\"#063B49\",light:\"#D6ECF2\",hcDark:y.Color.black,hcLight:y.Color.white},S.localize(27,null)),e.inputValidationInfoForeground=t(\"inputValidation.infoForeground\",{dark:null,light:null,hcDark:null,hcLight:e.foreground},S.localize(28,null)),e.inputValidationInfoBorder=t(\"inputValidation.infoBorder\",{dark:\"#007acc\",light:\"#007acc\",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(29,null)),e.inputValidationWarningBackground=t(\"inputValidation.warningBackground\",{dark:\"#352A05\",light:\"#F6F5D2\",hcDark:y.Color.black,hcLight:y.Color.white},S.localize(30,null)),e.inputValidationWarningForeground=t(\"inputValidation.warningForeground\",{dark:null,light:null,hcDark:null,hcLight:e.foreground},S.localize(31,null)),e.inputValidationWarningBorder=t(\"inputValidation.warningBorder\",{dark:\"#B89500\",light:\"#B89500\",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(32,null)),e.inputValidationErrorBackground=t(\"inputValidation.errorBackground\",{dark:\"#5A1D1D\",light:\"#F2DEDE\",hcDark:y.Color.black,hcLight:y.Color.white},S.localize(33,null)),e.inputValidationErrorForeground=t(\"inputValidation.errorForeground\",{dark:null,light:null,hcDark:null,hcLight:e.foreground},S.localize(34,null)),e.inputValidationErrorBorder=t(\"inputValidation.errorBorder\",{dark:\"#BE1100\",light:\"#BE1100\",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(35,null)),e.selectBackground=t(\"dropdown.background\",{dark:\"#3C3C3C\",light:y.Color.white,hcDark:y.Color.black,hcLight:y.Color.white},S.localize(36,null)),e.selectListBackground=t(\"dropdown.listBackground\",{dark:null,light:null,hcDark:y.Color.black,hcLight:y.Color.white},S.localize(37,null)),e.selectForeground=t(\"dropdown.foreground\",{dark:\"#F0F0F0\",light:e.foreground,hcDark:y.Color.white,hcLight:e.foreground},S.localize(38,null)),e.selectBorder=t(\"dropdown.border\",{dark:e.selectBackground,light:\"#CECECE\",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(39,null)),e.buttonForeground=t(\"button.foreground\",{dark:y.Color.white,light:y.Color.white,hcDark:y.Color.white,hcLight:y.Color.white},S.localize(40,null)),e.buttonSeparator=t(\"button.separator\",{dark:h(e.buttonForeground,.4),light:h(e.buttonForeground,.4),hcDark:h(e.buttonForeground,.4),hcLight:h(e.buttonForeground,.4)},S.localize(41,null)),e.buttonBackground=t(\"button.background\",{dark:\"#0E639C\",light:\"#007ACC\",hcDark:null,hcLight:\"#0F4A85\"},S.localize(42,null)),e.buttonHoverBackground=t(\"button.hoverBackground\",{dark:g(e.buttonBackground,.2),light:o(e.buttonBackground,.2),hcDark:e.buttonBackground,hcLight:e.buttonBackground},S.localize(43,null)),e.buttonBorder=t(\"button.border\",{dark:e.contrastBorder,light:e.contrastBorder,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(44,null)),e.buttonSecondaryForeground=t(\"button.secondaryForeground\",{dark:y.Color.white,light:y.Color.white,hcDark:y.Color.white,hcLight:e.foreground},S.localize(45,null)),e.buttonSecondaryBackground=t(\"button.secondaryBackground\",{dark:\"#3A3D41\",light:\"#5F6A79\",hcDark:null,hcLight:y.Color.white},S.localize(46,null)),e.buttonSecondaryHoverBackground=t(\"button.secondaryHoverBackground\",{dark:g(e.buttonSecondaryBackground,.2),light:o(e.buttonSecondaryBackground,.2),hcDark:null,hcLight:null},S.localize(47,null)),e.badgeBackground=t(\"badge.background\",{dark:\"#4D4D4D\",light:\"#C4C4C4\",hcDark:y.Color.black,hcLight:\"#0F4A85\"},S.localize(48,null)),e.badgeForeground=t(\"badge.foreground\",{dark:y.Color.white,light:\"#333\",hcDark:y.Color.white,hcLight:y.Color.white},S.localize(49,null)),e.scrollbarShadow=t(\"scrollbar.shadow\",{dark:\"#000000\",light:\"#DDDDDD\",hcDark:null,hcLight:null},S.localize(50,null)),e.scrollbarSliderBackground=t(\"scrollbarSlider.background\",{dark:y.Color.fromHex(\"#797979\").transparent(.4),light:y.Color.fromHex(\"#646464\").transparent(.4),hcDark:h(e.contrastBorder,.6),hcLight:h(e.contrastBorder,.4)},S.localize(51,null)),e.scrollbarSliderHoverBackground=t(\"scrollbarSlider.hoverBackground\",{dark:y.Color.fromHex(\"#646464\").transparent(.7),light:y.Color.fromHex(\"#646464\").transparent(.7),hcDark:h(e.contrastBorder,.8),hcLight:h(e.contrastBorder,.8)},S.localize(52,null)),e.scrollbarSliderActiveBackground=t(\"scrollbarSlider.activeBackground\",{dark:y.Color.fromHex(\"#BFBFBF\").transparent(.4),light:y.Color.fromHex(\"#000000\").transparent(.6),hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(53,null)),e.progressBarBackground=t(\"progressBar.background\",{dark:y.Color.fromHex(\"#0E70C0\"),light:y.Color.fromHex(\"#0E70C0\"),hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(54,null)),e.editorErrorBackground=t(\"editorError.background\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(55,null),!0),e.editorErrorForeground=t(\"editorError.foreground\",{dark:\"#F14C4C\",light:\"#E51400\",hcDark:\"#F48771\",hcLight:\"#B5200D\"},S.localize(56,null)),e.editorErrorBorder=t(\"editorError.border\",{dark:null,light:null,hcDark:y.Color.fromHex(\"#E47777\").transparent(.8),hcLight:\"#B5200D\"},S.localize(57,null)),e.editorWarningBackground=t(\"editorWarning.background\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(58,null),!0),e.editorWarningForeground=t(\"editorWarning.foreground\",{dark:\"#CCA700\",light:\"#BF8803\",hcDark:\"#FFD370\",hcLight:\"#895503\"},S.localize(59,null)),e.editorWarningBorder=t(\"editorWarning.border\",{dark:null,light:null,hcDark:y.Color.fromHex(\"#FFCC00\").transparent(.8),hcLight:y.Color.fromHex(\"#FFCC00\").transparent(.8)},S.localize(60,null)),e.editorInfoBackground=t(\"editorInfo.background\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(61,null),!0),e.editorInfoForeground=t(\"editorInfo.foreground\",{dark:\"#3794FF\",light:\"#1a85ff\",hcDark:\"#3794FF\",hcLight:\"#1a85ff\"},S.localize(62,null)),e.editorInfoBorder=t(\"editorInfo.border\",{dark:null,light:null,hcDark:y.Color.fromHex(\"#3794FF\").transparent(.8),hcLight:\"#292929\"},S.localize(63,null)),e.editorHintForeground=t(\"editorHint.foreground\",{dark:y.Color.fromHex(\"#eeeeee\").transparent(.7),light:\"#6c6c6c\",hcDark:null,hcLight:null},S.localize(64,null)),e.editorHintBorder=t(\"editorHint.border\",{dark:null,light:null,hcDark:y.Color.fromHex(\"#eeeeee\").transparent(.8),hcLight:\"#292929\"},S.localize(65,null)),e.sashHoverBorder=t(\"sash.hoverBorder\",{dark:e.focusBorder,light:e.focusBorder,hcDark:e.focusBorder,hcLight:e.focusBorder},S.localize(66,null)),e.editorBackground=t(\"editor.background\",{light:\"#ffffff\",dark:\"#1E1E1E\",hcDark:y.Color.black,hcLight:y.Color.white},S.localize(67,null)),e.editorForeground=t(\"editor.foreground\",{light:\"#333333\",dark:\"#BBBBBB\",hcDark:y.Color.white,hcLight:e.foreground},S.localize(68,null)),e.editorStickyScrollBackground=t(\"editorStickyScroll.background\",{light:e.editorBackground,dark:e.editorBackground,hcDark:e.editorBackground,hcLight:e.editorBackground},S.localize(69,null)),e.editorStickyScrollHoverBackground=t(\"editorStickyScrollHover.background\",{dark:\"#2A2D2E\",light:\"#F0F0F0\",hcDark:null,hcLight:y.Color.fromHex(\"#0F4A85\").transparent(.1)},S.localize(70,null)),e.editorStickyScrollBorder=t(\"editorStickyScroll.border\",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(71,null)),e.editorStickyScrollShadow=t(\"editorStickyScroll.shadow\",{dark:e.scrollbarShadow,light:e.scrollbarShadow,hcDark:e.scrollbarShadow,hcLight:e.scrollbarShadow},S.localize(72,null)),e.editorWidgetBackground=t(\"editorWidget.background\",{dark:\"#252526\",light:\"#F3F3F3\",hcDark:\"#0C141F\",hcLight:y.Color.white},S.localize(73,null)),e.editorWidgetForeground=t(\"editorWidget.foreground\",{dark:e.foreground,light:e.foreground,hcDark:e.foreground,hcLight:e.foreground},S.localize(74,null)),e.editorWidgetBorder=t(\"editorWidget.border\",{dark:\"#454545\",light:\"#C8C8C8\",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(75,null)),e.editorWidgetResizeBorder=t(\"editorWidget.resizeBorder\",{light:null,dark:null,hcDark:null,hcLight:null},S.localize(76,null)),e.quickInputBackground=t(\"quickInput.background\",{dark:e.editorWidgetBackground,light:e.editorWidgetBackground,hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(77,null)),e.quickInputForeground=t(\"quickInput.foreground\",{dark:e.editorWidgetForeground,light:e.editorWidgetForeground,hcDark:e.editorWidgetForeground,hcLight:e.editorWidgetForeground},S.localize(78,null)),e.quickInputTitleBackground=t(\"quickInputTitle.background\",{dark:new y.Color(new y.RGBA(255,255,255,.105)),light:new y.Color(new y.RGBA(0,0,0,.06)),hcDark:\"#000000\",hcLight:y.Color.white},S.localize(79,null)),e.pickerGroupForeground=t(\"pickerGroup.foreground\",{dark:\"#3794FF\",light:\"#0066BF\",hcDark:y.Color.white,hcLight:\"#0F4A85\"},S.localize(80,null)),e.pickerGroupBorder=t(\"pickerGroup.border\",{dark:\"#3F3F46\",light:\"#CCCEDB\",hcDark:y.Color.white,hcLight:\"#0F4A85\"},S.localize(81,null)),e.keybindingLabelBackground=t(\"keybindingLabel.background\",{dark:new y.Color(new y.RGBA(128,128,128,.17)),light:new y.Color(new y.RGBA(221,221,221,.4)),hcDark:y.Color.transparent,hcLight:y.Color.transparent},S.localize(82,null)),e.keybindingLabelForeground=t(\"keybindingLabel.foreground\",{dark:y.Color.fromHex(\"#CCCCCC\"),light:y.Color.fromHex(\"#555555\"),hcDark:y.Color.white,hcLight:e.foreground},S.localize(83,null)),e.keybindingLabelBorder=t(\"keybindingLabel.border\",{dark:new y.Color(new y.RGBA(51,51,51,.6)),light:new y.Color(new y.RGBA(204,204,204,.4)),hcDark:new y.Color(new y.RGBA(111,195,223)),hcLight:e.contrastBorder},S.localize(84,null)),e.keybindingLabelBottomBorder=t(\"keybindingLabel.bottomBorder\",{dark:new y.Color(new y.RGBA(68,68,68,.6)),light:new y.Color(new y.RGBA(187,187,187,.4)),hcDark:new y.Color(new y.RGBA(111,195,223)),hcLight:e.foreground},S.localize(85,null)),e.editorSelectionBackground=t(\"editor.selectionBackground\",{light:\"#ADD6FF\",dark:\"#264F78\",hcDark:\"#f3f518\",hcLight:\"#0F4A85\"},S.localize(86,null)),e.editorSelectionForeground=t(\"editor.selectionForeground\",{light:null,dark:null,hcDark:\"#000000\",hcLight:y.Color.white},S.localize(87,null)),e.editorInactiveSelection=t(\"editor.inactiveSelectionBackground\",{light:h(e.editorSelectionBackground,.5),dark:h(e.editorSelectionBackground,.5),hcDark:h(e.editorSelectionBackground,.7),hcLight:h(e.editorSelectionBackground,.5)},S.localize(88,null),!0),e.editorSelectionHighlight=t(\"editor.selectionHighlightBackground\",{light:w(e.editorSelectionBackground,e.editorBackground,.3,.6),dark:w(e.editorSelectionBackground,e.editorBackground,.3,.6),hcDark:null,hcLight:null},S.localize(89,null),!0),e.editorSelectionHighlightBorder=t(\"editor.selectionHighlightBorder\",{light:null,dark:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(90,null)),e.editorFindMatch=t(\"editor.findMatchBackground\",{light:\"#A8AC94\",dark:\"#515C6A\",hcDark:null,hcLight:null},S.localize(91,null)),e.editorFindMatchHighlight=t(\"editor.findMatchHighlightBackground\",{light:\"#EA5C0055\",dark:\"#EA5C0055\",hcDark:null,hcLight:null},S.localize(92,null),!0),e.editorFindRangeHighlight=t(\"editor.findRangeHighlightBackground\",{dark:\"#3a3d4166\",light:\"#b4b4b44d\",hcDark:null,hcLight:null},S.localize(93,null),!0),e.editorFindMatchBorder=t(\"editor.findMatchBorder\",{light:null,dark:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(94,null)),e.editorFindMatchHighlightBorder=t(\"editor.findMatchHighlightBorder\",{light:null,dark:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(95,null)),e.editorFindRangeHighlightBorder=t(\"editor.findRangeHighlightBorder\",{dark:null,light:null,hcDark:h(e.activeContrastBorder,.4),hcLight:h(e.activeContrastBorder,.4)},S.localize(96,null),!0),e.searchEditorFindMatch=t(\"searchEditor.findMatchBackground\",{light:h(e.editorFindMatchHighlight,.66),dark:h(e.editorFindMatchHighlight,.66),hcDark:e.editorFindMatchHighlight,hcLight:e.editorFindMatchHighlight},S.localize(97,null)),e.searchEditorFindMatchBorder=t(\"searchEditor.findMatchBorder\",{light:h(e.editorFindMatchHighlightBorder,.66),dark:h(e.editorFindMatchHighlightBorder,.66),hcDark:e.editorFindMatchHighlightBorder,hcLight:e.editorFindMatchHighlightBorder},S.localize(98,null)),e.searchResultsInfoForeground=t(\"search.resultsInfoForeground\",{light:e.foreground,dark:h(e.foreground,.65),hcDark:e.foreground,hcLight:e.foreground},S.localize(99,null)),e.editorHoverHighlight=t(\"editor.hoverHighlightBackground\",{light:\"#ADD6FF26\",dark:\"#264f7840\",hcDark:\"#ADD6FF26\",hcLight:null},S.localize(100,null),!0),e.editorHoverBackground=t(\"editorHoverWidget.background\",{light:e.editorWidgetBackground,dark:e.editorWidgetBackground,hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(101,null)),e.editorHoverForeground=t(\"editorHoverWidget.foreground\",{light:e.editorWidgetForeground,dark:e.editorWidgetForeground,hcDark:e.editorWidgetForeground,hcLight:e.editorWidgetForeground},S.localize(102,null)),e.editorHoverBorder=t(\"editorHoverWidget.border\",{light:e.editorWidgetBorder,dark:e.editorWidgetBorder,hcDark:e.editorWidgetBorder,hcLight:e.editorWidgetBorder},S.localize(103,null)),e.editorHoverStatusBarBackground=t(\"editorHoverWidget.statusBarBackground\",{dark:g(e.editorHoverBackground,.2),light:o(e.editorHoverBackground,.05),hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(104,null)),e.editorActiveLinkForeground=t(\"editorLink.activeForeground\",{dark:\"#4E94CE\",light:y.Color.blue,hcDark:y.Color.cyan,hcLight:\"#292929\"},S.localize(105,null)),e.editorInlayHintForeground=t(\"editorInlayHint.foreground\",{dark:\"#969696\",light:\"#969696\",hcDark:y.Color.white,hcLight:y.Color.black},S.localize(106,null)),e.editorInlayHintBackground=t(\"editorInlayHint.background\",{dark:h(e.badgeBackground,.1),light:h(e.badgeBackground,.1),hcDark:h(y.Color.white,.1),hcLight:h(e.badgeBackground,.1)},S.localize(107,null)),e.editorInlayHintTypeForeground=t(\"editorInlayHint.typeForeground\",{dark:e.editorInlayHintForeground,light:e.editorInlayHintForeground,hcDark:e.editorInlayHintForeground,hcLight:e.editorInlayHintForeground},S.localize(108,null)),e.editorInlayHintTypeBackground=t(\"editorInlayHint.typeBackground\",{dark:e.editorInlayHintBackground,light:e.editorInlayHintBackground,hcDark:e.editorInlayHintBackground,hcLight:e.editorInlayHintBackground},S.localize(109,null)),e.editorInlayHintParameterForeground=t(\"editorInlayHint.parameterForeground\",{dark:e.editorInlayHintForeground,light:e.editorInlayHintForeground,hcDark:e.editorInlayHintForeground,hcLight:e.editorInlayHintForeground},S.localize(110,null)),e.editorInlayHintParameterBackground=t(\"editorInlayHint.parameterBackground\",{dark:e.editorInlayHintBackground,light:e.editorInlayHintBackground,hcDark:e.editorInlayHintBackground,hcLight:e.editorInlayHintBackground},S.localize(111,null)),e.editorLightBulbForeground=t(\"editorLightBulb.foreground\",{dark:\"#FFCC00\",light:\"#DDB100\",hcDark:\"#FFCC00\",hcLight:\"#007ACC\"},S.localize(112,null)),e.editorLightBulbAutoFixForeground=t(\"editorLightBulbAutoFix.foreground\",{dark:\"#75BEFF\",light:\"#007ACC\",hcDark:\"#75BEFF\",hcLight:\"#007ACC\"},S.localize(113,null)),e.editorLightBulbAiForeground=t(\"editorLightBulbAi.foreground\",{dark:e.editorLightBulbForeground,light:e.editorLightBulbForeground,hcDark:e.editorLightBulbForeground,hcLight:e.editorLightBulbForeground},S.localize(114,null)),e.defaultInsertColor=new y.Color(new y.RGBA(155,185,85,.2)),e.defaultRemoveColor=new y.Color(new y.RGBA(255,0,0,.2)),e.diffInserted=t(\"diffEditor.insertedTextBackground\",{dark:\"#9ccc2c33\",light:\"#9ccc2c40\",hcDark:null,hcLight:null},S.localize(115,null),!0),e.diffRemoved=t(\"diffEditor.removedTextBackground\",{dark:\"#ff000033\",light:\"#ff000033\",hcDark:null,hcLight:null},S.localize(116,null),!0),e.diffInsertedLine=t(\"diffEditor.insertedLineBackground\",{dark:e.defaultInsertColor,light:e.defaultInsertColor,hcDark:null,hcLight:null},S.localize(117,null),!0),e.diffRemovedLine=t(\"diffEditor.removedLineBackground\",{dark:e.defaultRemoveColor,light:e.defaultRemoveColor,hcDark:null,hcLight:null},S.localize(118,null),!0),e.diffInsertedLineGutter=t(\"diffEditorGutter.insertedLineBackground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(119,null)),e.diffRemovedLineGutter=t(\"diffEditorGutter.removedLineBackground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(120,null)),e.diffOverviewRulerInserted=t(\"diffEditorOverview.insertedForeground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(121,null)),e.diffOverviewRulerRemoved=t(\"diffEditorOverview.removedForeground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(122,null)),e.diffInsertedOutline=t(\"diffEditor.insertedTextBorder\",{dark:null,light:null,hcDark:\"#33ff2eff\",hcLight:\"#374E06\"},S.localize(123,null)),e.diffRemovedOutline=t(\"diffEditor.removedTextBorder\",{dark:null,light:null,hcDark:\"#FF008F\",hcLight:\"#AD0707\"},S.localize(124,null)),e.diffBorder=t(\"diffEditor.border\",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(125,null)),e.diffDiagonalFill=t(\"diffEditor.diagonalFill\",{dark:\"#cccccc33\",light:\"#22222233\",hcDark:null,hcLight:null},S.localize(126,null)),e.diffUnchangedRegionBackground=t(\"diffEditor.unchangedRegionBackground\",{dark:\"sideBar.background\",light:\"sideBar.background\",hcDark:\"sideBar.background\",hcLight:\"sideBar.background\"},S.localize(127,null)),e.diffUnchangedRegionForeground=t(\"diffEditor.unchangedRegionForeground\",{dark:\"foreground\",light:\"foreground\",hcDark:\"foreground\",hcLight:\"foreground\"},S.localize(128,null)),e.diffUnchangedTextBackground=t(\"diffEditor.unchangedCodeBackground\",{dark:\"#74747429\",light:\"#b8b8b829\",hcDark:null,hcLight:null},S.localize(129,null)),e.listFocusBackground=t(\"list.focusBackground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(130,null)),e.listFocusForeground=t(\"list.focusForeground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(131,null)),e.listFocusOutline=t(\"list.focusOutline\",{dark:e.focusBorder,light:e.focusBorder,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(132,null)),e.listFocusAndSelectionOutline=t(\"list.focusAndSelectionOutline\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(133,null)),e.listActiveSelectionBackground=t(\"list.activeSelectionBackground\",{dark:\"#04395E\",light:\"#0060C0\",hcDark:null,hcLight:y.Color.fromHex(\"#0F4A85\").transparent(.1)},S.localize(134,null)),e.listActiveSelectionForeground=t(\"list.activeSelectionForeground\",{dark:y.Color.white,light:y.Color.white,hcDark:null,hcLight:null},S.localize(135,null)),e.listActiveSelectionIconForeground=t(\"list.activeSelectionIconForeground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(136,null)),e.listInactiveSelectionBackground=t(\"list.inactiveSelectionBackground\",{dark:\"#37373D\",light:\"#E4E6F1\",hcDark:null,hcLight:y.Color.fromHex(\"#0F4A85\").transparent(.1)},S.localize(137,null)),e.listInactiveSelectionForeground=t(\"list.inactiveSelectionForeground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(138,null)),e.listInactiveSelectionIconForeground=t(\"list.inactiveSelectionIconForeground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(139,null)),e.listInactiveFocusBackground=t(\"list.inactiveFocusBackground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(140,null)),e.listInactiveFocusOutline=t(\"list.inactiveFocusOutline\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(141,null)),e.listHoverBackground=t(\"list.hoverBackground\",{dark:\"#2A2D2E\",light:\"#F0F0F0\",hcDark:y.Color.white.transparent(.1),hcLight:y.Color.fromHex(\"#0F4A85\").transparent(.1)},S.localize(142,null)),e.listHoverForeground=t(\"list.hoverForeground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(143,null)),e.listDropOverBackground=t(\"list.dropBackground\",{dark:\"#062F4A\",light:\"#D6EBFF\",hcDark:null,hcLight:null},S.localize(144,null)),e.listDropBetweenBackground=t(\"list.dropBetweenBackground\",{dark:e.iconForeground,light:e.iconForeground,hcDark:null,hcLight:null},S.localize(145,null)),e.listHighlightForeground=t(\"list.highlightForeground\",{dark:\"#2AAAFF\",light:\"#0066BF\",hcDark:e.focusBorder,hcLight:e.focusBorder},S.localize(146,null)),e.listFocusHighlightForeground=t(\"list.focusHighlightForeground\",{dark:e.listHighlightForeground,light:C(e.listActiveSelectionBackground,e.listHighlightForeground,\"#BBE7FF\"),hcDark:e.listHighlightForeground,hcLight:e.listHighlightForeground},S.localize(147,null)),e.listInvalidItemForeground=t(\"list.invalidItemForeground\",{dark:\"#B89500\",light:\"#B89500\",hcDark:\"#B89500\",hcLight:\"#B5200D\"},S.localize(148,null)),e.listErrorForeground=t(\"list.errorForeground\",{dark:\"#F88070\",light:\"#B01011\",hcDark:null,hcLight:null},S.localize(149,null)),e.listWarningForeground=t(\"list.warningForeground\",{dark:\"#CCA700\",light:\"#855F00\",hcDark:null,hcLight:null},S.localize(150,null)),e.listFilterWidgetBackground=t(\"listFilterWidget.background\",{light:o(e.editorWidgetBackground,0),dark:g(e.editorWidgetBackground,0),hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(151,null)),e.listFilterWidgetOutline=t(\"listFilterWidget.outline\",{dark:y.Color.transparent,light:y.Color.transparent,hcDark:\"#f38518\",hcLight:\"#007ACC\"},S.localize(152,null)),e.listFilterWidgetNoMatchesOutline=t(\"listFilterWidget.noMatchesOutline\",{dark:\"#BE1100\",light:\"#BE1100\",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(153,null)),e.listFilterWidgetShadow=t(\"listFilterWidget.shadow\",{dark:e.widgetShadow,light:e.widgetShadow,hcDark:e.widgetShadow,hcLight:e.widgetShadow},S.localize(154,null)),e.listFilterMatchHighlight=t(\"list.filterMatchBackground\",{dark:e.editorFindMatchHighlight,light:e.editorFindMatchHighlight,hcDark:null,hcLight:null},S.localize(155,null)),e.listFilterMatchHighlightBorder=t(\"list.filterMatchBorder\",{dark:e.editorFindMatchHighlightBorder,light:e.editorFindMatchHighlightBorder,hcDark:e.contrastBorder,hcLight:e.activeContrastBorder},S.localize(156,null)),e.treeIndentGuidesStroke=t(\"tree.indentGuidesStroke\",{dark:\"#585858\",light:\"#a9a9a9\",hcDark:\"#a9a9a9\",hcLight:\"#a5a5a5\"},S.localize(157,null)),e.treeInactiveIndentGuidesStroke=t(\"tree.inactiveIndentGuidesStroke\",{dark:h(e.treeIndentGuidesStroke,.4),light:h(e.treeIndentGuidesStroke,.4),hcDark:h(e.treeIndentGuidesStroke,.4),hcLight:h(e.treeIndentGuidesStroke,.4)},S.localize(158,null)),e.tableColumnsBorder=t(\"tree.tableColumnsBorder\",{dark:\"#CCCCCC20\",light:\"#61616120\",hcDark:null,hcLight:null},S.localize(159,null)),e.tableOddRowsBackgroundColor=t(\"tree.tableOddRowsBackground\",{dark:h(e.foreground,.04),light:h(e.foreground,.04),hcDark:null,hcLight:null},S.localize(160,null)),e.listDeemphasizedForeground=t(\"list.deemphasizedForeground\",{dark:\"#8C8C8C\",light:\"#8E8E90\",hcDark:\"#A7A8A9\",hcLight:\"#666666\"},S.localize(161,null)),e.checkboxBackground=t(\"checkbox.background\",{dark:e.selectBackground,light:e.selectBackground,hcDark:e.selectBackground,hcLight:e.selectBackground},S.localize(162,null)),e.checkboxSelectBackground=t(\"checkbox.selectBackground\",{dark:e.editorWidgetBackground,light:e.editorWidgetBackground,hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(163,null)),e.checkboxForeground=t(\"checkbox.foreground\",{dark:e.selectForeground,light:e.selectForeground,hcDark:e.selectForeground,hcLight:e.selectForeground},S.localize(164,null)),e.checkboxBorder=t(\"checkbox.border\",{dark:e.selectBorder,light:e.selectBorder,hcDark:e.selectBorder,hcLight:e.selectBorder},S.localize(165,null)),e.checkboxSelectBorder=t(\"checkbox.selectBorder\",{dark:e.iconForeground,light:e.iconForeground,hcDark:e.iconForeground,hcLight:e.iconForeground},S.localize(166,null)),e._deprecatedQuickInputListFocusBackground=t(\"quickInput.list.focusBackground\",{dark:null,light:null,hcDark:null,hcLight:null},\"\",void 0,S.localize(167,null)),e.quickInputListFocusForeground=t(\"quickInputList.focusForeground\",{dark:e.listActiveSelectionForeground,light:e.listActiveSelectionForeground,hcDark:e.listActiveSelectionForeground,hcLight:e.listActiveSelectionForeground},S.localize(168,null)),e.quickInputListFocusIconForeground=t(\"quickInputList.focusIconForeground\",{dark:e.listActiveSelectionIconForeground,light:e.listActiveSelectionIconForeground,hcDark:e.listActiveSelectionIconForeground,hcLight:e.listActiveSelectionIconForeground},S.localize(169,null)),e.quickInputListFocusBackground=t(\"quickInputList.focusBackground\",{dark:m(e._deprecatedQuickInputListFocusBackground,e.listActiveSelectionBackground),light:m(e._deprecatedQuickInputListFocusBackground,e.listActiveSelectionBackground),hcDark:null,hcLight:null},S.localize(170,null)),e.menuBorder=t(\"menu.border\",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(171,null)),e.menuForeground=t(\"menu.foreground\",{dark:e.selectForeground,light:e.selectForeground,hcDark:e.selectForeground,hcLight:e.selectForeground},S.localize(172,null)),e.menuBackground=t(\"menu.background\",{dark:e.selectBackground,light:e.selectBackground,hcDark:e.selectBackground,hcLight:e.selectBackground},S.localize(173,null)),e.menuSelectionForeground=t(\"menu.selectionForeground\",{dark:e.listActiveSelectionForeground,light:e.listActiveSelectionForeground,hcDark:e.listActiveSelectionForeground,hcLight:e.listActiveSelectionForeground},S.localize(174,null)),e.menuSelectionBackground=t(\"menu.selectionBackground\",{dark:e.listActiveSelectionBackground,light:e.listActiveSelectionBackground,hcDark:e.listActiveSelectionBackground,hcLight:e.listActiveSelectionBackground},S.localize(175,null)),e.menuSelectionBorder=t(\"menu.selectionBorder\",{dark:null,light:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(176,null)),e.menuSeparatorBackground=t(\"menu.separatorBackground\",{dark:\"#606060\",light:\"#D4D4D4\",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(177,null)),e.toolbarHoverBackground=t(\"toolbar.hoverBackground\",{dark:\"#5a5d5e50\",light:\"#b8b8b850\",hcDark:null,hcLight:null},S.localize(178,null)),e.toolbarHoverOutline=t(\"toolbar.hoverOutline\",{dark:null,light:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(179,null)),e.toolbarActiveBackground=t(\"toolbar.activeBackground\",{dark:g(e.toolbarHoverBackground,.1),light:o(e.toolbarHoverBackground,.1),hcDark:null,hcLight:null},S.localize(180,null)),e.snippetTabstopHighlightBackground=t(\"editor.snippetTabstopHighlightBackground\",{dark:new y.Color(new y.RGBA(124,124,124,.3)),light:new y.Color(new y.RGBA(10,50,100,.2)),hcDark:new y.Color(new y.RGBA(124,124,124,.3)),hcLight:new y.Color(new y.RGBA(10,50,100,.2))},S.localize(181,null)),e.snippetTabstopHighlightBorder=t(\"editor.snippetTabstopHighlightBorder\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(182,null)),e.snippetFinalTabstopHighlightBackground=t(\"editor.snippetFinalTabstopHighlightBackground\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(183,null)),e.snippetFinalTabstopHighlightBorder=t(\"editor.snippetFinalTabstopHighlightBorder\",{dark:\"#525252\",light:new y.Color(new y.RGBA(10,50,100,.5)),hcDark:\"#525252\",hcLight:\"#292929\"},S.localize(184,null)),e.breadcrumbsForeground=t(\"breadcrumb.foreground\",{light:h(e.foreground,.8),dark:h(e.foreground,.8),hcDark:h(e.foreground,.8),hcLight:h(e.foreground,.8)},S.localize(185,null)),e.breadcrumbsBackground=t(\"breadcrumb.background\",{light:e.editorBackground,dark:e.editorBackground,hcDark:e.editorBackground,hcLight:e.editorBackground},S.localize(186,null)),e.breadcrumbsFocusForeground=t(\"breadcrumb.focusForeground\",{light:o(e.foreground,.2),dark:g(e.foreground,.1),hcDark:g(e.foreground,.1),hcLight:g(e.foreground,.1)},S.localize(187,null)),e.breadcrumbsActiveSelectionForeground=t(\"breadcrumb.activeSelectionForeground\",{light:o(e.foreground,.2),dark:g(e.foreground,.1),hcDark:g(e.foreground,.1),hcLight:g(e.foreground,.1)},S.localize(188,null)),e.breadcrumbsPickerBackground=t(\"breadcrumbPicker.background\",{light:e.editorWidgetBackground,dark:e.editorWidgetBackground,hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(189,null));const r=.5,u=y.Color.fromHex(\"#40C8AE\").transparent(r),f=y.Color.fromHex(\"#40A6FF\").transparent(r),c=y.Color.fromHex(\"#606060\").transparent(.4),d=.4,s=1;e.mergeCurrentHeaderBackground=t(\"merge.currentHeaderBackground\",{dark:u,light:u,hcDark:null,hcLight:null},S.localize(190,null),!0),e.mergeCurrentContentBackground=t(\"merge.currentContentBackground\",{dark:h(e.mergeCurrentHeaderBackground,d),light:h(e.mergeCurrentHeaderBackground,d),hcDark:h(e.mergeCurrentHeaderBackground,d),hcLight:h(e.mergeCurrentHeaderBackground,d)},S.localize(191,null),!0),e.mergeIncomingHeaderBackground=t(\"merge.incomingHeaderBackground\",{dark:f,light:f,hcDark:null,hcLight:null},S.localize(192,null),!0),e.mergeIncomingContentBackground=t(\"merge.incomingContentBackground\",{dark:h(e.mergeIncomingHeaderBackground,d),light:h(e.mergeIncomingHeaderBackground,d),hcDark:h(e.mergeIncomingHeaderBackground,d),hcLight:h(e.mergeIncomingHeaderBackground,d)},S.localize(193,null),!0),e.mergeCommonHeaderBackground=t(\"merge.commonHeaderBackground\",{dark:c,light:c,hcDark:null,hcLight:null},S.localize(194,null),!0),e.mergeCommonContentBackground=t(\"merge.commonContentBackground\",{dark:h(e.mergeCommonHeaderBackground,d),light:h(e.mergeCommonHeaderBackground,d),hcDark:h(e.mergeCommonHeaderBackground,d),hcLight:h(e.mergeCommonHeaderBackground,d)},S.localize(195,null),!0),e.mergeBorder=t(\"merge.border\",{dark:null,light:null,hcDark:\"#C3DF6F\",hcLight:\"#007ACC\"},S.localize(196,null)),e.overviewRulerCurrentContentForeground=t(\"editorOverviewRuler.currentContentForeground\",{dark:h(e.mergeCurrentHeaderBackground,s),light:h(e.mergeCurrentHeaderBackground,s),hcDark:e.mergeBorder,hcLight:e.mergeBorder},S.localize(197,null)),e.overviewRulerIncomingContentForeground=t(\"editorOverviewRuler.incomingContentForeground\",{dark:h(e.mergeIncomingHeaderBackground,s),light:h(e.mergeIncomingHeaderBackground,s),hcDark:e.mergeBorder,hcLight:e.mergeBorder},S.localize(198,null)),e.overviewRulerCommonContentForeground=t(\"editorOverviewRuler.commonContentForeground\",{dark:h(e.mergeCommonHeaderBackground,s),light:h(e.mergeCommonHeaderBackground,s),hcDark:e.mergeBorder,hcLight:e.mergeBorder},S.localize(199,null)),e.overviewRulerFindMatchForeground=t(\"editorOverviewRuler.findMatchForeground\",{dark:\"#d186167e\",light:\"#d186167e\",hcDark:\"#AB5A00\",hcLight:\"\"},S.localize(200,null),!0),e.overviewRulerSelectionHighlightForeground=t(\"editorOverviewRuler.selectionHighlightForeground\",{dark:\"#A0A0A0CC\",light:\"#A0A0A0CC\",hcDark:\"#A0A0A0CC\",hcLight:\"#A0A0A0CC\"},S.localize(201,null),!0),e.minimapFindMatch=t(\"minimap.findMatchHighlight\",{light:\"#d18616\",dark:\"#d18616\",hcDark:\"#AB5A00\",hcLight:\"#0F4A85\"},S.localize(202,null),!0),e.minimapSelectionOccurrenceHighlight=t(\"minimap.selectionOccurrenceHighlight\",{light:\"#c9c9c9\",dark:\"#676767\",hcDark:\"#ffffff\",hcLight:\"#0F4A85\"},S.localize(203,null),!0),e.minimapSelection=t(\"minimap.selectionHighlight\",{light:\"#ADD6FF\",dark:\"#264F78\",hcDark:\"#ffffff\",hcLight:\"#0F4A85\"},S.localize(204,null),!0),e.minimapInfo=t(\"minimap.infoHighlight\",{dark:e.editorInfoForeground,light:e.editorInfoForeground,hcDark:e.editorInfoBorder,hcLight:e.editorInfoBorder},S.localize(205,null)),e.minimapWarning=t(\"minimap.warningHighlight\",{dark:e.editorWarningForeground,light:e.editorWarningForeground,hcDark:e.editorWarningBorder,hcLight:e.editorWarningBorder},S.localize(206,null)),e.minimapError=t(\"minimap.errorHighlight\",{dark:new y.Color(new y.RGBA(255,18,18,.7)),light:new y.Color(new y.RGBA(255,18,18,.7)),hcDark:new y.Color(new y.RGBA(255,50,50,1)),hcLight:\"#B5200D\"},S.localize(207,null)),e.minimapBackground=t(\"minimap.background\",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(208,null)),e.minimapForegroundOpacity=t(\"minimap.foregroundOpacity\",{dark:y.Color.fromHex(\"#000f\"),light:y.Color.fromHex(\"#000f\"),hcDark:y.Color.fromHex(\"#000f\"),hcLight:y.Color.fromHex(\"#000f\")},S.localize(209,null)),e.minimapSliderBackground=t(\"minimapSlider.background\",{light:h(e.scrollbarSliderBackground,.5),dark:h(e.scrollbarSliderBackground,.5),hcDark:h(e.scrollbarSliderBackground,.5),hcLight:h(e.scrollbarSliderBackground,.5)},S.localize(210,null)),e.minimapSliderHoverBackground=t(\"minimapSlider.hoverBackground\",{light:h(e.scrollbarSliderHoverBackground,.5),dark:h(e.scrollbarSliderHoverBackground,.5),hcDark:h(e.scrollbarSliderHoverBackground,.5),hcLight:h(e.scrollbarSliderHoverBackground,.5)},S.localize(211,null)),e.minimapSliderActiveBackground=t(\"minimapSlider.activeBackground\",{light:h(e.scrollbarSliderActiveBackground,.5),dark:h(e.scrollbarSliderActiveBackground,.5),hcDark:h(e.scrollbarSliderActiveBackground,.5),hcLight:h(e.scrollbarSliderActiveBackground,.5)},S.localize(212,null)),e.problemsErrorIconForeground=t(\"problemsErrorIcon.foreground\",{dark:e.editorErrorForeground,light:e.editorErrorForeground,hcDark:e.editorErrorForeground,hcLight:e.editorErrorForeground},S.localize(213,null)),e.problemsWarningIconForeground=t(\"problemsWarningIcon.foreground\",{dark:e.editorWarningForeground,light:e.editorWarningForeground,hcDark:e.editorWarningForeground,hcLight:e.editorWarningForeground},S.localize(214,null)),e.problemsInfoIconForeground=t(\"problemsInfoIcon.foreground\",{dark:e.editorInfoForeground,light:e.editorInfoForeground,hcDark:e.editorInfoForeground,hcLight:e.editorInfoForeground},S.localize(215,null)),e.chartsForeground=t(\"charts.foreground\",{dark:e.foreground,light:e.foreground,hcDark:e.foreground,hcLight:e.foreground},S.localize(216,null)),e.chartsLines=t(\"charts.lines\",{dark:h(e.foreground,.5),light:h(e.foreground,.5),hcDark:h(e.foreground,.5),hcLight:h(e.foreground,.5)},S.localize(217,null)),e.chartsRed=t(\"charts.red\",{dark:e.editorErrorForeground,light:e.editorErrorForeground,hcDark:e.editorErrorForeground,hcLight:e.editorErrorForeground},S.localize(218,null)),e.chartsBlue=t(\"charts.blue\",{dark:e.editorInfoForeground,light:e.editorInfoForeground,hcDark:e.editorInfoForeground,hcLight:e.editorInfoForeground},S.localize(219,null)),e.chartsYellow=t(\"charts.yellow\",{dark:e.editorWarningForeground,light:e.editorWarningForeground,hcDark:e.editorWarningForeground,hcLight:e.editorWarningForeground},S.localize(220,null)),e.chartsOrange=t(\"charts.orange\",{dark:e.minimapFindMatch,light:e.minimapFindMatch,hcDark:e.minimapFindMatch,hcLight:e.minimapFindMatch},S.localize(221,null)),e.chartsGreen=t(\"charts.green\",{dark:\"#89D185\",light:\"#388A34\",hcDark:\"#89D185\",hcLight:\"#374e06\"},S.localize(222,null)),e.chartsPurple=t(\"charts.purple\",{dark:\"#B180D7\",light:\"#652D90\",hcDark:\"#B180D7\",hcLight:\"#652D90\"},S.localize(223,null));function l(A,P){var N,M,R,x;switch(A.op){case 0:return(N=D(A.value,P))===null||N===void 0?void 0:N.darken(A.factor);case 1:return(M=D(A.value,P))===null||M===void 0?void 0:M.lighten(A.factor);case 2:return(R=D(A.value,P))===null||R===void 0?void 0:R.transparent(A.factor);case 3:{const O=D(A.background,P);return O?(x=D(A.value,P))===null||x===void 0?void 0:x.makeOpaque(O):D(A.value,P)}case 4:for(const O of A.values){const B=D(O,P);if(B)return B}return;case 6:return D(P.defines(A.if)?A.then:A.else,P);case 5:{const O=D(A.value,P);if(!O)return;const B=D(A.background,P);return B?O.isDarkerThan(B)?y.Color.getLighterColor(O,B,A.factor).transparent(A.transparency):y.Color.getDarkerColor(O,B,A.factor).transparent(A.transparency):O.transparent(A.factor*A.transparency)}default:throw(0,L.assertNever)(A)}}e.executeTransform=l;function o(A,P){return{op:0,value:A,factor:P}}e.darken=o;function g(A,P){return{op:1,value:A,factor:P}}e.lighten=g;function h(A,P){return{op:2,value:A,factor:P}}e.transparent=h;function m(...A){return{op:4,values:A}}e.oneOf=m;function C(A,P,N){return{op:6,if:A,then:P,else:N}}e.ifDefinedThenElse=C;function w(A,P,N,M){return{op:5,value:A,background:P,factor:N,transparency:M}}function D(A,P){if(A!==null){if(typeof A==\"string\")return A[0]===\"#\"?y.Color.fromHex(A):P.getColor(A);if(A instanceof y.Color)return A;if(typeof A==\"object\")return l(A,P)}}e.resolveColorValue=D,e.workbenchColorsSchemaId=\"vscode://schemas/workbench-colors\";const I=_.Registry.as(p.Extensions.JSONContribution);I.registerSchema(e.workbenchColorsSchemaId,n.getColorSchema());const T=new k.RunOnceScheduler(()=>I.notifySchemaChanged(e.workbenchColorsSchemaId),200);n.onDidChangeSchema(()=>{T.isScheduled()||T.schedule()})}),define(se[167],oe([1,0,7,157,67,14,2,29]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DynamicCssRules=e.GlobalEditorPointerMoveMonitor=e.EditorPointerEventFactory=e.EditorMouseEventFactory=e.EditorMouseEvent=e.createCoordinatesRelativeToEditor=e.createEditorPagePosition=e.CoordinatesRelativeToEditor=e.EditorPagePosition=e.ClientCoordinates=e.PageCoordinates=void 0;class _{constructor(o,g){this.x=o,this.y=g,this._pageCoordinatesBrand=void 0}toClientCoordinates(o){return new v(this.x-o.scrollX,this.y-o.scrollY)}}e.PageCoordinates=_;class v{constructor(o,g){this.clientX=o,this.clientY=g,this._clientCoordinatesBrand=void 0}toPageCoordinates(o){return new _(this.clientX+o.scrollX,this.clientY+o.scrollY)}}e.ClientCoordinates=v;class b{constructor(o,g,h,m){this.x=o,this.y=g,this.width=h,this.height=m,this._editorPagePositionBrand=void 0}}e.EditorPagePosition=b;class a{constructor(o,g){this.x=o,this.y=g,this._positionRelativeToEditorBrand=void 0}}e.CoordinatesRelativeToEditor=a;function i(l){const o=L.getDomNodePagePosition(l);return new b(o.left,o.top,o.width,o.height)}e.createEditorPagePosition=i;function n(l,o,g){const h=o.width/l.offsetWidth,m=o.height/l.offsetHeight,C=(g.x-o.x)/h,w=(g.y-o.y)/m;return new a(C,w)}e.createCoordinatesRelativeToEditor=n;class t extends y.StandardMouseEvent{constructor(o,g,h){super(L.getWindow(h),o),this._editorMouseEventBrand=void 0,this.isFromPointerCapture=g,this.pos=new _(this.posx,this.posy),this.editorPos=i(h),this.relativePos=n(h,this.editorPos,this.pos)}}e.EditorMouseEvent=t;class r{constructor(o){this._editorViewDomNode=o}_create(o){return new t(o,!1,this._editorViewDomNode)}onContextMenu(o,g){return L.addDisposableListener(o,\"contextmenu\",h=>{g(this._create(h))})}onMouseUp(o,g){return L.addDisposableListener(o,\"mouseup\",h=>{g(this._create(h))})}onMouseDown(o,g){return L.addDisposableListener(o,L.EventType.MOUSE_DOWN,h=>{g(this._create(h))})}onPointerDown(o,g){return L.addDisposableListener(o,L.EventType.POINTER_DOWN,h=>{g(this._create(h),h.pointerId)})}onMouseLeave(o,g){return L.addDisposableListener(o,L.EventType.MOUSE_LEAVE,h=>{g(this._create(h))})}onMouseMove(o,g){return L.addDisposableListener(o,\"mousemove\",h=>g(this._create(h)))}}e.EditorMouseEventFactory=r;class u{constructor(o){this._editorViewDomNode=o}_create(o){return new t(o,!1,this._editorViewDomNode)}onPointerUp(o,g){return L.addDisposableListener(o,\"pointerup\",h=>{g(this._create(h))})}onPointerDown(o,g){return L.addDisposableListener(o,L.EventType.POINTER_DOWN,h=>{g(this._create(h),h.pointerId)})}onPointerLeave(o,g){return L.addDisposableListener(o,L.EventType.POINTER_LEAVE,h=>{g(this._create(h))})}onPointerMove(o,g){return L.addDisposableListener(o,\"pointermove\",h=>g(this._create(h)))}}e.EditorPointerEventFactory=u;class f extends S.Disposable{constructor(o){super(),this._editorViewDomNode=o,this._globalPointerMoveMonitor=this._register(new k.GlobalPointerMoveMonitor),this._keydownListener=null}startMonitoring(o,g,h,m,C){this._keydownListener=L.addStandardDisposableListener(o.ownerDocument,\"keydown\",w=>{w.toKeyCodeChord().isModifierKey()||this._globalPointerMoveMonitor.stopMonitoring(!0,w.browserEvent)},!0),this._globalPointerMoveMonitor.startMonitoring(o,g,h,w=>{m(new t(w,!0,this._editorViewDomNode))},w=>{this._keydownListener.dispose(),C(w)})}stopMonitoring(){this._globalPointerMoveMonitor.stopMonitoring(!0)}}e.GlobalEditorPointerMoveMonitor=f;class c{constructor(o){this._editor=o,this._instanceId=++c._idPool,this._counter=0,this._rules=new Map,this._garbageCollectionScheduler=new E.RunOnceScheduler(()=>this.garbageCollect(),1e3)}createClassNameRef(o){const g=this.getOrCreateRule(o);return g.increaseRefCount(),{className:g.className,dispose:()=>{g.decreaseRefCount(),this._garbageCollectionScheduler.schedule()}}}getOrCreateRule(o){const g=this.computeUniqueKey(o);let h=this._rules.get(g);if(!h){const m=this._counter++;h=new d(g,`dyn-rule-${this._instanceId}-${m}`,L.isInShadowDOM(this._editor.getContainerDomNode())?this._editor.getContainerDomNode():void 0,o),this._rules.set(g,h)}return h}computeUniqueKey(o){return JSON.stringify(o)}garbageCollect(){for(const o of this._rules.values())o.hasReferences()||(this._rules.delete(o.key),o.dispose())}}e.DynamicCssRules=c,c._idPool=0;class d{constructor(o,g,h,m){this.key=o,this.className=g,this.properties=m,this._referenceCount=0,this._styleElementDisposables=new S.DisposableStore,this._styleElement=L.createStyleSheet(h,void 0,this._styleElementDisposables),this._styleElement.textContent=this.getCssText(this.className,this.properties)}getCssText(o,g){let h=`.${o} {`;for(const m in g){const C=g[m];let w;typeof C==\"object\"?w=(0,p.asCssVariable)(C.id):w=C;const D=s(m);h+=`\n\t${D}: ${w};`}return h+=`\n}`,h}dispose(){this._styleElementDisposables.dispose(),this._styleElement=void 0}increaseRefCount(){this._referenceCount++}decreaseRefCount(){this._referenceCount--}hasReferences(){return this._referenceCount>0}}function s(l){return l.replace(/(^[A-Z])/,([o])=>o.toLowerCase()).replace(/([A-Z])/g,([o])=>`-${o.toLowerCase()}`)}}),define(se[834],oe([1,0,7,40,157,2,17,11,233,56,36,5,281,339,86,29,24,63,497,41,108,440]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Minimap=void 0;const l=140,o=2;class g{constructor(N,M,R){const x=N.options,O=x.get(141),B=x.get(143),W=B.minimap,V=x.get(50),K=x.get(72);this.renderMinimap=W.renderMinimap,this.size=K.size,this.minimapHeightIsEditorHeight=W.minimapHeightIsEditorHeight,this.scrollBeyondLastLine=x.get(104),this.paddingTop=x.get(83).top,this.paddingBottom=x.get(83).bottom,this.showSlider=K.showSlider,this.autohide=K.autohide,this.pixelRatio=O,this.typicalHalfwidthCharacterWidth=V.typicalHalfwidthCharacterWidth,this.lineHeight=x.get(66),this.minimapLeft=W.minimapLeft,this.minimapWidth=W.minimapWidth,this.minimapHeight=B.height,this.canvasInnerWidth=W.minimapCanvasInnerWidth,this.canvasInnerHeight=W.minimapCanvasInnerHeight,this.canvasOuterWidth=W.minimapCanvasOuterWidth,this.canvasOuterHeight=W.minimapCanvasOuterHeight,this.isSampling=W.minimapIsSampling,this.editorHeight=B.height,this.fontScale=W.minimapScale,this.minimapLineHeight=W.minimapLineHeight,this.minimapCharWidth=1*this.fontScale,this.charRenderer=(0,s.createSingleCallFunction)(()=>c.MinimapCharRendererFactory.create(this.fontScale,V.fontFamily)),this.defaultBackgroundColor=R.getColor(2),this.backgroundColor=g._getMinimapBackground(M,this.defaultBackgroundColor),this.foregroundAlpha=g._getMinimapForegroundOpacity(M)}static _getMinimapBackground(N,M){const R=N.getColor(r.minimapBackground);return R?new i.RGBA8(R.rgba.r,R.rgba.g,R.rgba.b,Math.round(255*R.rgba.a)):M}static _getMinimapForegroundOpacity(N){const M=N.getColor(r.minimapForegroundOpacity);return M?i.RGBA8._clamp(Math.round(255*M.rgba.a)):255}equals(N){return this.renderMinimap===N.renderMinimap&&this.size===N.size&&this.minimapHeightIsEditorHeight===N.minimapHeightIsEditorHeight&&this.scrollBeyondLastLine===N.scrollBeyondLastLine&&this.paddingTop===N.paddingTop&&this.paddingBottom===N.paddingBottom&&this.showSlider===N.showSlider&&this.autohide===N.autohide&&this.pixelRatio===N.pixelRatio&&this.typicalHalfwidthCharacterWidth===N.typicalHalfwidthCharacterWidth&&this.lineHeight===N.lineHeight&&this.minimapLeft===N.minimapLeft&&this.minimapWidth===N.minimapWidth&&this.minimapHeight===N.minimapHeight&&this.canvasInnerWidth===N.canvasInnerWidth&&this.canvasInnerHeight===N.canvasInnerHeight&&this.canvasOuterWidth===N.canvasOuterWidth&&this.canvasOuterHeight===N.canvasOuterHeight&&this.isSampling===N.isSampling&&this.editorHeight===N.editorHeight&&this.fontScale===N.fontScale&&this.minimapLineHeight===N.minimapLineHeight&&this.minimapCharWidth===N.minimapCharWidth&&this.defaultBackgroundColor&&this.defaultBackgroundColor.equals(N.defaultBackgroundColor)&&this.backgroundColor&&this.backgroundColor.equals(N.backgroundColor)&&this.foregroundAlpha===N.foregroundAlpha}}class h{constructor(N,M,R,x,O,B,W,V,K){this.scrollTop=N,this.scrollHeight=M,this.sliderNeeded=R,this._computedSliderRatio=x,this.sliderTop=O,this.sliderHeight=B,this.topPaddingLineCount=W,this.startLineNumber=V,this.endLineNumber=K}getDesiredScrollTopFromDelta(N){return Math.round(this.scrollTop+N/this._computedSliderRatio)}getDesiredScrollTopFromTouchLocation(N){return Math.round((N-this.sliderHeight/2)/this._computedSliderRatio)}intersectWithViewport(N){const M=Math.max(this.startLineNumber,N.startLineNumber),R=Math.min(this.endLineNumber,N.endLineNumber);return M>R?null:[M,R]}getYForLineNumber(N,M){return+(N-this.startLineNumber+this.topPaddingLineCount)*M}static create(N,M,R,x,O,B,W,V,K,F,q){const ie=N.pixelRatio,ae=N.minimapLineHeight,ne=Math.floor(N.canvasInnerHeight/ae),$=N.lineHeight;if(N.minimapHeightIsEditorHeight){let X=V*N.lineHeight+N.paddingTop+N.paddingBottom;N.scrollBeyondLastLine&&(X+=Math.max(0,O-N.lineHeight-N.paddingBottom));const U=Math.max(1,Math.floor(O*O/X)),G=Math.max(0,N.minimapHeight-U),z=G/(F-O),H=K*z,Y=G>0,j=Math.floor(N.canvasInnerHeight/N.minimapLineHeight),Z=Math.floor(N.paddingTop/N.lineHeight);return new h(K,F,Y,z,H,U,Z,1,Math.min(W,j))}let J;if(B&&R!==W){const X=R-M+1;J=Math.floor(X*ae/ie)}else{const X=O/$;J=Math.floor(X*ae/ie)}const Q=Math.floor(N.paddingTop/$);let re=Math.floor(N.paddingBottom/$);if(N.scrollBeyondLastLine){const X=O/$;re=Math.max(re,X-1)}let de;if(re>0){const X=O/$;de=(Q+W+re-X-1)*ae/ie}else de=Math.max(0,(Q+W)*ae/ie-J);de=Math.min(N.minimapHeight-J,de);const he=de/(F-O),me=K*he;if(ne>=Q+W+re){const X=de>0;return new h(K,F,X,he,me,J,Q,1,W)}else{let X;M>1?X=M+Q:X=Math.max(1,K/$);let U,G=Math.max(1,Math.floor(X-me*ie/ae));G<Q?(U=Q-G+1,G=1):(U=0,G=Math.max(1,G-Q)),q&&q.scrollHeight===F&&(q.scrollTop>K&&(G=Math.min(G,q.startLineNumber),U=Math.max(U,q.topPaddingLineCount)),q.scrollTop<K&&(G=Math.max(G,q.startLineNumber),U=Math.min(U,q.topPaddingLineCount)));const z=Math.min(W,G-U+ne-1),H=(K-x)/$;let Y;return K>=N.paddingTop?Y=(M-G+U+H)*ae/ie:Y=K/N.paddingTop*(U+H)*ae/ie,new h(K,F,!0,he,Y,J,U,G,z)}}}class m{constructor(N){this.dy=N}onContentChanged(){this.dy=-1}onTokensChanged(){this.dy=-1}}m.INVALID=new m(-1);class C{constructor(N,M,R){this.renderedLayout=N,this._imageData=M,this._renderedLines=new _.RenderedLinesCollection(()=>m.INVALID),this._renderedLines._set(N.startLineNumber,R)}linesEquals(N){if(!this.scrollEquals(N))return!1;const R=this._renderedLines._get().lines;for(let x=0,O=R.length;x<O;x++)if(R[x].dy===-1)return!1;return!0}scrollEquals(N){return this.renderedLayout.startLineNumber===N.startLineNumber&&this.renderedLayout.endLineNumber===N.endLineNumber}_get(){const N=this._renderedLines._get();return{imageData:this._imageData,rendLineNumberStart:N.rendLineNumberStart,lines:N.lines}}onLinesChanged(N,M){return this._renderedLines.onLinesChanged(N,M)}onLinesDeleted(N,M){this._renderedLines.onLinesDeleted(N,M)}onLinesInserted(N,M){this._renderedLines.onLinesInserted(N,M)}onTokensChanged(N){return this._renderedLines.onTokensChanged(N)}}class w{constructor(N,M,R,x){this._backgroundFillData=w._createBackgroundFillData(M,R,x),this._buffers=[N.createImageData(M,R),N.createImageData(M,R)],this._lastUsedBuffer=0}getBuffer(){this._lastUsedBuffer=1-this._lastUsedBuffer;const N=this._buffers[this._lastUsedBuffer];return N.data.set(this._backgroundFillData),N}static _createBackgroundFillData(N,M,R){const x=R.r,O=R.g,B=R.b,W=R.a,V=new Uint8ClampedArray(N*M*4);let K=0;for(let F=0;F<M;F++)for(let q=0;q<N;q++)V[K]=x,V[K+1]=O,V[K+2]=B,V[K+3]=W,K+=4;return V}}class D{static compute(N,M,R){if(N.renderMinimap===0||!N.isSampling)return[null,[]];const{minimapLineCount:x}=b.EditorLayoutInfoComputer.computeContainedMinimapLineCount({viewLineCount:M,scrollBeyondLastLine:N.scrollBeyondLastLine,paddingTop:N.paddingTop,paddingBottom:N.paddingBottom,height:N.editorHeight,lineHeight:N.lineHeight,pixelRatio:N.pixelRatio}),O=M/x,B=O/2;if(!R||R.minimapLines.length===0){const J=[];if(J[0]=1,x>1){for(let Q=0,re=x-1;Q<re;Q++)J[Q]=Math.round(Q*O+B);J[x-1]=M}return[new D(O,J),[]]}const W=R.minimapLines,V=W.length,K=[];let F=0,q=0,ie=1;const ae=10;let ne=[],$=null;for(let J=0;J<x;J++){const Q=Math.max(ie,Math.round(J*O)),re=Math.max(Q,Math.round((J+1)*O));for(;F<V&&W[F]<Q;){if(ne.length<ae){const he=F+1+q;$&&$.type===\"deleted\"&&$._oldIndex===F-1?$.deleteToLineNumber++:($={type:\"deleted\",_oldIndex:F,deleteFromLineNumber:he,deleteToLineNumber:he},ne.push($)),q--}F++}let de;if(F<V&&W[F]<=re)de=W[F],F++;else if(J===0?de=1:J+1===x?de=M:de=Math.round(J*O+B),ne.length<ae){const he=F+1+q;$&&$.type===\"inserted\"&&$._i===J-1?$.insertToLineNumber++:($={type:\"inserted\",_i:J,insertFromLineNumber:he,insertToLineNumber:he},ne.push($)),q++}K[J]=de,ie=de}if(ne.length<ae)for(;F<V;){const J=F+1+q;$&&$.type===\"deleted\"&&$._oldIndex===F-1?$.deleteToLineNumber++:($={type:\"deleted\",_oldIndex:F,deleteFromLineNumber:J,deleteToLineNumber:J},ne.push($)),q--,F++}else ne=[{type:\"flush\"}];return[new D(O,K),ne]}constructor(N,M){this.samplingRatio=N,this.minimapLines=M}modelLineToMinimapLine(N){return Math.min(this.minimapLines.length,Math.max(1,Math.round(N/this.samplingRatio)))}modelLineRangeToMinimapLineRange(N,M){let R=this.modelLineToMinimapLine(N)-1;for(;R>0&&this.minimapLines[R-1]>=N;)R--;let x=this.modelLineToMinimapLine(M)-1;for(;x+1<this.minimapLines.length&&this.minimapLines[x+1]<=M;)x++;if(R===x){const O=this.minimapLines[R];if(O<N||O>M)return null}return[R+1,x+1]}decorationLineRangeToMinimapLineRange(N,M){let R=this.modelLineToMinimapLine(N),x=this.modelLineToMinimapLine(M);return N!==M&&x===R&&(x===this.minimapLines.length?R>1&&R--:x++),[R,x]}onLinesDeleted(N){const M=N.toLineNumber-N.fromLineNumber+1;let R=this.minimapLines.length,x=0;for(let O=this.minimapLines.length-1;O>=0&&!(this.minimapLines[O]<N.fromLineNumber);O--)this.minimapLines[O]<=N.toLineNumber?(this.minimapLines[O]=Math.max(1,N.fromLineNumber-1),R=Math.min(R,O),x=Math.max(x,O)):this.minimapLines[O]-=M;return[R,x]}onLinesInserted(N){const M=N.toLineNumber-N.fromLineNumber+1;for(let R=this.minimapLines.length-1;R>=0&&!(this.minimapLines[R]<N.fromLineNumber);R--)this.minimapLines[R]+=M}}class I extends v.ViewPart{constructor(N){super(N),this.tokensColorTracker=n.MinimapTokensColorTracker.getInstance(),this._selections=[],this._minimapSelections=null,this.options=new g(this._context.configuration,this._context.theme,this.tokensColorTracker);const[M]=D.compute(this.options,this._context.viewModel.getLineCount(),null);this._samplingState=M,this._shouldCheckSampling=!1,this._actual=new T(N.theme,this)}dispose(){this._actual.dispose(),super.dispose()}getDomNode(){return this._actual.getDomNode()}_onOptionsMaybeChanged(){const N=new g(this._context.configuration,this._context.theme,this.tokensColorTracker);return this.options.equals(N)?!1:(this.options=N,this._recreateLineSampling(),this._actual.onDidChangeOptions(),!0)}onConfigurationChanged(N){return this._onOptionsMaybeChanged()}onCursorStateChanged(N){return this._selections=N.selections,this._minimapSelections=null,this._actual.onSelectionChanged()}onDecorationsChanged(N){return N.affectsMinimap?this._actual.onDecorationsChanged():!1}onFlushed(N){return this._samplingState&&(this._shouldCheckSampling=!0),this._actual.onFlushed()}onLinesChanged(N){if(this._samplingState){const M=this._samplingState.modelLineRangeToMinimapLineRange(N.fromLineNumber,N.fromLineNumber+N.count-1);return M?this._actual.onLinesChanged(M[0],M[1]-M[0]+1):!1}else return this._actual.onLinesChanged(N.fromLineNumber,N.count)}onLinesDeleted(N){if(this._samplingState){const[M,R]=this._samplingState.onLinesDeleted(N);return M<=R&&this._actual.onLinesChanged(M+1,R-M+1),this._shouldCheckSampling=!0,!0}else return this._actual.onLinesDeleted(N.fromLineNumber,N.toLineNumber)}onLinesInserted(N){return this._samplingState?(this._samplingState.onLinesInserted(N),this._shouldCheckSampling=!0,!0):this._actual.onLinesInserted(N.fromLineNumber,N.toLineNumber)}onScrollChanged(N){return this._actual.onScrollChanged()}onThemeChanged(N){return this._actual.onThemeChanged(),this._onOptionsMaybeChanged(),!0}onTokensChanged(N){if(this._samplingState){const M=[];for(const R of N.ranges){const x=this._samplingState.modelLineRangeToMinimapLineRange(R.fromLineNumber,R.toLineNumber);x&&M.push({fromLineNumber:x[0],toLineNumber:x[1]})}return M.length?this._actual.onTokensChanged(M):!1}else return this._actual.onTokensChanged(N.ranges)}onTokensColorsChanged(N){return this._onOptionsMaybeChanged(),this._actual.onTokensColorsChanged()}onZonesChanged(N){return this._actual.onZonesChanged()}prepareRender(N){this._shouldCheckSampling&&(this._shouldCheckSampling=!1,this._recreateLineSampling())}render(N){let M=N.visibleRange.startLineNumber,R=N.visibleRange.endLineNumber;this._samplingState&&(M=this._samplingState.modelLineToMinimapLine(M),R=this._samplingState.modelLineToMinimapLine(R));const x={viewportContainsWhitespaceGaps:N.viewportData.whitespaceViewportData.length>0,scrollWidth:N.scrollWidth,scrollHeight:N.scrollHeight,viewportStartLineNumber:M,viewportEndLineNumber:R,viewportStartLineNumberVerticalOffset:N.getVerticalOffsetForLineNumber(M),scrollTop:N.scrollTop,scrollLeft:N.scrollLeft,viewportWidth:N.viewportWidth,viewportHeight:N.viewportHeight};this._actual.render(x)}_recreateLineSampling(){this._minimapSelections=null;const N=!!this._samplingState,[M,R]=D.compute(this.options,this._context.viewModel.getLineCount(),this._samplingState);if(this._samplingState=M,N&&this._samplingState)for(const x of R)switch(x.type){case\"deleted\":this._actual.onLinesDeleted(x.deleteFromLineNumber,x.deleteToLineNumber);break;case\"inserted\":this._actual.onLinesInserted(x.insertFromLineNumber,x.insertToLineNumber);break;case\"flush\":this._actual.onFlushed();break}}getLineCount(){return this._samplingState?this._samplingState.minimapLines.length:this._context.viewModel.getLineCount()}getRealLineCount(){return this._context.viewModel.getLineCount()}getLineContent(N){return this._samplingState?this._context.viewModel.getLineContent(this._samplingState.minimapLines[N-1]):this._context.viewModel.getLineContent(N)}getLineMaxColumn(N){return this._samplingState?this._context.viewModel.getLineMaxColumn(this._samplingState.minimapLines[N-1]):this._context.viewModel.getLineMaxColumn(N)}getMinimapLinesRenderingData(N,M,R){if(this._samplingState){const x=[];for(let O=0,B=M-N+1;O<B;O++)R[O]?x[O]=this._context.viewModel.getViewLineData(this._samplingState.minimapLines[N+O-1]):x[O]=null;return x}return this._context.viewModel.getMinimapLinesRenderingData(N,M,R).data}getSelections(){if(this._minimapSelections===null)if(this._samplingState){this._minimapSelections=[];for(const N of this._selections){const[M,R]=this._samplingState.decorationLineRangeToMinimapLineRange(N.startLineNumber,N.endLineNumber);this._minimapSelections.push(new u.Selection(M,N.startColumn,R,N.endColumn))}}else this._minimapSelections=this._selections;return this._minimapSelections}getMinimapDecorationsInViewport(N,M){let R;if(this._samplingState){const O=this._samplingState.minimapLines[N-1],B=this._samplingState.minimapLines[M-1];R=new a.Range(O,1,B,this._context.viewModel.getLineMaxColumn(B))}else R=new a.Range(N,1,M,this._context.viewModel.getLineMaxColumn(M));const x=this._context.viewModel.getMinimapDecorationsInRange(R);if(this._samplingState){const O=[];for(const B of x){if(!B.options.minimap)continue;const W=B.range,V=this._samplingState.modelLineToMinimapLine(W.startLineNumber),K=this._samplingState.modelLineToMinimapLine(W.endLineNumber);O.push(new t.ViewModelDecoration(new a.Range(V,W.startColumn,K,W.endColumn),B.options))}return O}return x}getOptions(){return this._context.viewModel.model.getOptions()}revealLineNumber(N){this._samplingState&&(N=this._samplingState.minimapLines[N-1]),this._context.viewModel.revealRange(\"mouse\",!1,new a.Range(N,1,N,1),1,0)}setScrollTop(N){this._context.viewModel.viewLayout.setScrollPosition({scrollTop:N},1)}}e.Minimap=I;class T extends E.Disposable{constructor(N,M){super(),this._renderDecorations=!1,this._gestureInProgress=!1,this._theme=N,this._model=M,this._lastRenderData=null,this._buffers=null,this._selectionColor=this._theme.getColor(r.minimapSelection),this._domNode=(0,k.createFastDomNode)(document.createElement(\"div\")),v.PartFingerprints.write(this._domNode,9),this._domNode.setClassName(this._getMinimapDomNodeClassName()),this._domNode.setPosition(\"absolute\"),this._domNode.setAttribute(\"role\",\"presentation\"),this._domNode.setAttribute(\"aria-hidden\",\"true\"),this._shadow=(0,k.createFastDomNode)(document.createElement(\"div\")),this._shadow.setClassName(\"minimap-shadow-hidden\"),this._domNode.appendChild(this._shadow),this._canvas=(0,k.createFastDomNode)(document.createElement(\"canvas\")),this._canvas.setPosition(\"absolute\"),this._canvas.setLeft(0),this._domNode.appendChild(this._canvas),this._decorationsCanvas=(0,k.createFastDomNode)(document.createElement(\"canvas\")),this._decorationsCanvas.setPosition(\"absolute\"),this._decorationsCanvas.setClassName(\"minimap-decorations-layer\"),this._decorationsCanvas.setLeft(0),this._domNode.appendChild(this._decorationsCanvas),this._slider=(0,k.createFastDomNode)(document.createElement(\"div\")),this._slider.setPosition(\"absolute\"),this._slider.setClassName(\"minimap-slider\"),this._slider.setLayerHinting(!0),this._slider.setContain(\"strict\"),this._domNode.appendChild(this._slider),this._sliderHorizontal=(0,k.createFastDomNode)(document.createElement(\"div\")),this._sliderHorizontal.setPosition(\"absolute\"),this._sliderHorizontal.setClassName(\"minimap-slider-horizontal\"),this._slider.appendChild(this._sliderHorizontal),this._applyLayout(),this._pointerDownListener=L.addStandardDisposableListener(this._domNode.domNode,L.EventType.POINTER_DOWN,R=>{if(R.preventDefault(),this._model.options.renderMinimap===0||!this._lastRenderData)return;if(this._model.options.size!==\"proportional\"){if(R.button===0&&this._lastRenderData){const K=L.getDomNodePagePosition(this._slider.domNode),F=K.top+K.height/2;this._startSliderDragging(R,F,this._lastRenderData.renderedLayout)}return}const O=this._model.options.minimapLineHeight,B=this._model.options.canvasInnerHeight/this._model.options.canvasOuterHeight*R.offsetY;let V=Math.floor(B/O)+this._lastRenderData.renderedLayout.startLineNumber-this._lastRenderData.renderedLayout.topPaddingLineCount;V=Math.min(V,this._model.getLineCount()),this._model.revealLineNumber(V)}),this._sliderPointerMoveMonitor=new y.GlobalPointerMoveMonitor,this._sliderPointerDownListener=L.addStandardDisposableListener(this._slider.domNode,L.EventType.POINTER_DOWN,R=>{R.preventDefault(),R.stopPropagation(),R.button===0&&this._lastRenderData&&this._startSliderDragging(R,R.pageY,this._lastRenderData.renderedLayout)}),this._gestureDisposable=f.Gesture.addTarget(this._domNode.domNode),this._sliderTouchStartListener=L.addDisposableListener(this._domNode.domNode,f.EventType.Start,R=>{R.preventDefault(),R.stopPropagation(),this._lastRenderData&&(this._slider.toggleClassName(\"active\",!0),this._gestureInProgress=!0,this.scrollDueToTouchEvent(R))},{passive:!1}),this._sliderTouchMoveListener=L.addDisposableListener(this._domNode.domNode,f.EventType.Change,R=>{R.preventDefault(),R.stopPropagation(),this._lastRenderData&&this._gestureInProgress&&this.scrollDueToTouchEvent(R)},{passive:!1}),this._sliderTouchEndListener=L.addStandardDisposableListener(this._domNode.domNode,f.EventType.End,R=>{R.preventDefault(),R.stopPropagation(),this._gestureInProgress=!1,this._slider.toggleClassName(\"active\",!1)})}_startSliderDragging(N,M,R){if(!N.target||!(N.target instanceof Element))return;const x=N.pageX;this._slider.toggleClassName(\"active\",!0);const O=(B,W)=>{const V=L.getDomNodePagePosition(this._domNode.domNode),K=Math.min(Math.abs(W-x),Math.abs(W-V.left),Math.abs(W-V.left-V.width));if(S.isWindows&&K>l){this._model.setScrollTop(R.scrollTop);return}const F=B-M;this._model.setScrollTop(R.getDesiredScrollTopFromDelta(F))};N.pageY!==M&&O(N.pageY,x),this._sliderPointerMoveMonitor.startMonitoring(N.target,N.pointerId,N.buttons,B=>O(B.pageY,B.pageX),()=>{this._slider.toggleClassName(\"active\",!1)})}scrollDueToTouchEvent(N){const M=this._domNode.domNode.getBoundingClientRect().top,R=this._lastRenderData.renderedLayout.getDesiredScrollTopFromTouchLocation(N.pageY-M);this._model.setScrollTop(R)}dispose(){this._pointerDownListener.dispose(),this._sliderPointerMoveMonitor.dispose(),this._sliderPointerDownListener.dispose(),this._gestureDisposable.dispose(),this._sliderTouchStartListener.dispose(),this._sliderTouchMoveListener.dispose(),this._sliderTouchEndListener.dispose(),super.dispose()}_getMinimapDomNodeClassName(){const N=[\"minimap\"];return this._model.options.showSlider===\"always\"?N.push(\"slider-always\"):N.push(\"slider-mouseover\"),this._model.options.autohide&&N.push(\"autohide\"),N.join(\" \")}getDomNode(){return this._domNode}_applyLayout(){this._domNode.setLeft(this._model.options.minimapLeft),this._domNode.setWidth(this._model.options.minimapWidth),this._domNode.setHeight(this._model.options.minimapHeight),this._shadow.setHeight(this._model.options.minimapHeight),this._canvas.setWidth(this._model.options.canvasOuterWidth),this._canvas.setHeight(this._model.options.canvasOuterHeight),this._canvas.domNode.width=this._model.options.canvasInnerWidth,this._canvas.domNode.height=this._model.options.canvasInnerHeight,this._decorationsCanvas.setWidth(this._model.options.canvasOuterWidth),this._decorationsCanvas.setHeight(this._model.options.canvasOuterHeight),this._decorationsCanvas.domNode.width=this._model.options.canvasInnerWidth,this._decorationsCanvas.domNode.height=this._model.options.canvasInnerHeight,this._slider.setWidth(this._model.options.minimapWidth)}_getBuffer(){return this._buffers||this._model.options.canvasInnerWidth>0&&this._model.options.canvasInnerHeight>0&&(this._buffers=new w(this._canvas.domNode.getContext(\"2d\"),this._model.options.canvasInnerWidth,this._model.options.canvasInnerHeight,this._model.options.backgroundColor)),this._buffers?this._buffers.getBuffer():null}onDidChangeOptions(){this._lastRenderData=null,this._buffers=null,this._applyLayout(),this._domNode.setClassName(this._getMinimapDomNodeClassName())}onSelectionChanged(){return this._renderDecorations=!0,!0}onDecorationsChanged(){return this._renderDecorations=!0,!0}onFlushed(){return this._lastRenderData=null,!0}onLinesChanged(N,M){return this._lastRenderData?this._lastRenderData.onLinesChanged(N,M):!1}onLinesDeleted(N,M){var R;return(R=this._lastRenderData)===null||R===void 0||R.onLinesDeleted(N,M),!0}onLinesInserted(N,M){var R;return(R=this._lastRenderData)===null||R===void 0||R.onLinesInserted(N,M),!0}onScrollChanged(){return this._renderDecorations=!0,!0}onThemeChanged(){return this._selectionColor=this._theme.getColor(r.minimapSelection),this._renderDecorations=!0,!0}onTokensChanged(N){return this._lastRenderData?this._lastRenderData.onTokensChanged(N):!1}onTokensColorsChanged(){return this._lastRenderData=null,this._buffers=null,!0}onZonesChanged(){return this._lastRenderData=null,!0}render(N){if(this._model.options.renderMinimap===0){this._shadow.setClassName(\"minimap-shadow-hidden\"),this._sliderHorizontal.setWidth(0),this._sliderHorizontal.setHeight(0);return}N.scrollLeft+N.viewportWidth>=N.scrollWidth?this._shadow.setClassName(\"minimap-shadow-hidden\"):this._shadow.setClassName(\"minimap-shadow-visible\");const R=h.create(this._model.options,N.viewportStartLineNumber,N.viewportEndLineNumber,N.viewportStartLineNumberVerticalOffset,N.viewportHeight,N.viewportContainsWhitespaceGaps,this._model.getLineCount(),this._model.getRealLineCount(),N.scrollTop,N.scrollHeight,this._lastRenderData?this._lastRenderData.renderedLayout:null);this._slider.setDisplay(R.sliderNeeded?\"block\":\"none\"),this._slider.setTop(R.sliderTop),this._slider.setHeight(R.sliderHeight),this._sliderHorizontal.setLeft(0),this._sliderHorizontal.setWidth(this._model.options.minimapWidth),this._sliderHorizontal.setTop(0),this._sliderHorizontal.setHeight(R.sliderHeight),this.renderDecorations(R),this._lastRenderData=this.renderLines(R)}renderDecorations(N){if(this._renderDecorations){this._renderDecorations=!1;const M=this._model.getSelections();M.sort(a.Range.compareRangesUsingStarts);const R=this._model.getMinimapDecorationsInViewport(N.startLineNumber,N.endLineNumber);R.sort((ie,ae)=>(ie.options.zIndex||0)-(ae.options.zIndex||0));const{canvasInnerWidth:x,canvasInnerHeight:O}=this._model.options,B=this._model.options.minimapLineHeight,W=this._model.options.minimapCharWidth,V=this._model.getOptions().tabSize,K=this._decorationsCanvas.domNode.getContext(\"2d\");K.clearRect(0,0,x,O);const F=new A(N.startLineNumber,N.endLineNumber,!1);this._renderSelectionLineHighlights(K,M,F,N,B),this._renderDecorationsLineHighlights(K,R,F,N,B);const q=new A(N.startLineNumber,N.endLineNumber,null);this._renderSelectionsHighlights(K,M,q,N,B,V,W,x),this._renderDecorationsHighlights(K,R,q,N,B,V,W,x)}}_renderSelectionLineHighlights(N,M,R,x,O){if(!this._selectionColor||this._selectionColor.isTransparent())return;N.fillStyle=this._selectionColor.transparent(.5).toString();let B=0,W=0;for(const V of M){const K=x.intersectWithViewport(V);if(!K)continue;const[F,q]=K;for(let ne=F;ne<=q;ne++)R.set(ne,!0);const ie=x.getYForLineNumber(F,O),ae=x.getYForLineNumber(q,O);W>=ie||(W>B&&N.fillRect(b.MINIMAP_GUTTER_WIDTH,B,N.canvas.width,W-B),B=ie),W=ae}W>B&&N.fillRect(b.MINIMAP_GUTTER_WIDTH,B,N.canvas.width,W-B)}_renderDecorationsLineHighlights(N,M,R,x,O){const B=new Map;for(let W=M.length-1;W>=0;W--){const V=M[W],K=V.options.minimap;if(!K||K.position!==d.MinimapPosition.Inline)continue;const F=x.intersectWithViewport(V.range);if(!F)continue;const[q,ie]=F,ae=K.getColor(this._theme.value);if(!ae||ae.isTransparent())continue;let ne=B.get(ae.toString());ne||(ne=ae.transparent(.5).toString(),B.set(ae.toString(),ne)),N.fillStyle=ne;for(let $=q;$<=ie;$++){if(R.has($))continue;R.set($,!0);const J=x.getYForLineNumber(q,O);N.fillRect(b.MINIMAP_GUTTER_WIDTH,J,N.canvas.width,O)}}}_renderSelectionsHighlights(N,M,R,x,O,B,W,V){if(!(!this._selectionColor||this._selectionColor.isTransparent()))for(const K of M){const F=x.intersectWithViewport(K);if(!F)continue;const[q,ie]=F;for(let ae=q;ae<=ie;ae++)this.renderDecorationOnLine(N,R,K,this._selectionColor,x,ae,O,O,B,W,V)}}_renderDecorationsHighlights(N,M,R,x,O,B,W,V){for(const K of M){const F=K.options.minimap;if(!F)continue;const q=x.intersectWithViewport(K.range);if(!q)continue;const[ie,ae]=q,ne=F.getColor(this._theme.value);if(!(!ne||ne.isTransparent()))for(let $=ie;$<=ae;$++)switch(F.position){case d.MinimapPosition.Inline:this.renderDecorationOnLine(N,R,K.range,ne,x,$,O,O,B,W,V);continue;case d.MinimapPosition.Gutter:{const J=x.getYForLineNumber($,O),Q=2;this.renderDecoration(N,ne,Q,J,o,O);continue}}}}renderDecorationOnLine(N,M,R,x,O,B,W,V,K,F,q){const ie=O.getYForLineNumber(B,V);if(ie+W<0||ie>this._model.options.canvasInnerHeight)return;const{startLineNumber:ae,endLineNumber:ne}=R,$=ae===B?R.startColumn:1,J=ne===B?R.endColumn:this._model.getLineMaxColumn(B),Q=this.getXOffsetForPosition(M,B,$,K,F,q),re=this.getXOffsetForPosition(M,B,J,K,F,q);this.renderDecoration(N,x,Q,ie,re-Q,W)}getXOffsetForPosition(N,M,R,x,O,B){if(R===1)return b.MINIMAP_GUTTER_WIDTH;if((R-1)*O>=B)return B;let V=N.get(M);if(!V){const K=this._model.getLineContent(M);V=[b.MINIMAP_GUTTER_WIDTH];let F=b.MINIMAP_GUTTER_WIDTH;for(let q=1;q<K.length+1;q++){const ie=K.charCodeAt(q-1),ae=ie===9?x*O:p.isFullWidthCharacter(ie)?2*O:O,ne=F+ae;if(ne>=B){V[q]=B;break}V[q]=ne,F=ne}N.set(M,V)}return R-1<V.length?V[R-1]:B}renderDecoration(N,M,R,x,O,B){N.fillStyle=M&&M.toString()||\"\",N.fillRect(R,x,O,B)}renderLines(N){const M=N.startLineNumber,R=N.endLineNumber,x=this._model.options.minimapLineHeight;if(this._lastRenderData&&this._lastRenderData.linesEquals(N)){const le=this._lastRenderData._get();return new C(N,le.imageData,le.lines)}const O=this._getBuffer();if(!O)return null;const[B,W,V]=T._renderUntouchedLines(O,N.topPaddingLineCount,M,R,x,this._lastRenderData),K=this._model.getMinimapLinesRenderingData(M,R,V),F=this._model.getOptions().tabSize,q=this._model.options.defaultBackgroundColor,ie=this._model.options.backgroundColor,ae=this._model.options.foregroundAlpha,ne=this._model.tokensColorTracker,$=ne.backgroundIsLight(),J=this._model.options.renderMinimap,Q=this._model.options.charRenderer(),re=this._model.options.fontScale,de=this._model.options.minimapCharWidth,me=(J===1?2:2+1)*re,X=x>me?Math.floor((x-me)/2):0,U=ie.a/255,G=new i.RGBA8(Math.round((ie.r-q.r)*U+q.r),Math.round((ie.g-q.g)*U+q.g),Math.round((ie.b-q.b)*U+q.b),255);let z=N.topPaddingLineCount*x;const H=[];for(let le=0,ue=R-M+1;le<ue;le++)V[le]&&T._renderLine(O,G,ie.a,$,J,de,ne,ae,Q,z,X,F,K[le],re,x),H[le]=new m(z),z+=x;const Y=B===-1?0:B,Z=(W===-1?O.height:W)-Y;return this._canvas.domNode.getContext(\"2d\").putImageData(O,0,0,0,Y,O.width,Z),new C(N,O,H)}static _renderUntouchedLines(N,M,R,x,O,B){const W=[];if(!B){for(let z=0,H=x-R+1;z<H;z++)W[z]=!0;return[-1,-1,W]}const V=B._get(),K=V.imageData.data,F=V.rendLineNumberStart,q=V.lines,ie=q.length,ae=N.width,ne=N.data,$=(x-R+1)*O*ae*4;let J=-1,Q=-1,re=-1,de=-1,he=-1,me=-1,X=M*O;for(let z=R;z<=x;z++){const H=z-R,Y=z-F,j=Y>=0&&Y<ie?q[Y].dy:-1;if(j===-1){W[H]=!0,X+=O;continue}const Z=j*ae*4,ee=(j+O)*ae*4,le=X*ae*4,ue=(X+O)*ae*4;de===Z&&me===le?(de=ee,me=ue):(re!==-1&&(ne.set(K.subarray(re,de),he),J===-1&&re===0&&re===he&&(J=de),Q===-1&&de===$&&re===he&&(Q=re)),re=Z,de=ee,he=le,me=ue),W[H]=!1,X+=O}re!==-1&&(ne.set(K.subarray(re,de),he),J===-1&&re===0&&re===he&&(J=de),Q===-1&&de===$&&re===he&&(Q=re));const U=J===-1?-1:J/(ae*4),G=Q===-1?-1:Q/(ae*4);return[U,G,W]}static _renderLine(N,M,R,x,O,B,W,V,K,F,q,ie,ae,ne,$){const J=ae.content,Q=ae.tokens,re=N.width-B,de=$===1;let he=b.MINIMAP_GUTTER_WIDTH,me=0,X=0;for(let U=0,G=Q.getCount();U<G;U++){const z=Q.getEndOffset(U),H=Q.getForeground(U),Y=W.getColor(H);for(;me<z;me++){if(he>re)return;const j=J.charCodeAt(me);if(j===9){const Z=ie-(me+X)%ie;X+=Z-1,he+=Z*B}else if(j===32)he+=B;else{const Z=p.isFullWidthCharacter(j)?2:1;for(let ee=0;ee<Z;ee++)if(O===2?K.blockRenderChar(N,he,F+q,Y,V,M,R,de):K.renderChar(N,he,F+q,j,Y,V,M,R,ne,x,de),he+=B,he>re)return}}}}}class A{constructor(N,M,R){this._startLineNumber=N,this._endLineNumber=M,this._defaultValue=R,this._values=[];for(let x=0,O=this._endLineNumber-this._startLineNumber+1;x<O;x++)this._values[x]=R}has(N){return this.get(N)!==this._defaultValue}set(N,M){N<this._startLineNumber||N>this._endLineNumber||(this._values[N-this._startLineNumber]=M)}get(N){return N<this._startLineNumber||N>this._endLineNumber?this._defaultValue:this._values[N-this._startLineNumber]}}}),define(se[835],oe([1,0,633,29]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.multiDiffEditorBorder=e.multiDiffEditorBackground=e.multiDiffEditorHeaderBackground=void 0,e.multiDiffEditorHeaderBackground=(0,k.registerColor)(\"multiDiffEditor.headerBackground\",{dark:\"#808080\",light:\"#b4b4b4\",hcDark:\"#808080\",hcLight:\"#b4b4b4\"},(0,L.localize)(0,null)),e.multiDiffEditorBackground=(0,k.registerColor)(\"multiDiffEditor.background\",{dark:\"#000000\",light:\"#e5e5e5\",hcDark:\"#000000\",hcLight:\"#e5e5e5\"},(0,L.localize)(1,null)),e.multiDiffEditorBorder=(0,k.registerColor)(\"multiDiffEditor.border\",{dark:\"sideBarSectionHeader.border\",light:\"#cccccc\",hcDark:\"sideBarSectionHeader.border\",hcLight:\"#cccccc\"},(0,L.localize)(2,null))}),define(se[254],oe([1,0,722,29,479]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SYMBOL_ICON_VARIABLE_FOREGROUND=e.SYMBOL_ICON_UNIT_FOREGROUND=e.SYMBOL_ICON_TYPEPARAMETER_FOREGROUND=e.SYMBOL_ICON_TEXT_FOREGROUND=e.SYMBOL_ICON_STRUCT_FOREGROUND=e.SYMBOL_ICON_STRING_FOREGROUND=e.SYMBOL_ICON_SNIPPET_FOREGROUND=e.SYMBOL_ICON_REFERENCE_FOREGROUND=e.SYMBOL_ICON_PROPERTY_FOREGROUND=e.SYMBOL_ICON_PACKAGE_FOREGROUND=e.SYMBOL_ICON_OPERATOR_FOREGROUND=e.SYMBOL_ICON_OBJECT_FOREGROUND=e.SYMBOL_ICON_NUMBER_FOREGROUND=e.SYMBOL_ICON_NULL_FOREGROUND=e.SYMBOL_ICON_NAMESPACE_FOREGROUND=e.SYMBOL_ICON_MODULE_FOREGROUND=e.SYMBOL_ICON_METHOD_FOREGROUND=e.SYMBOL_ICON_KEYWORD_FOREGROUND=e.SYMBOL_ICON_KEY_FOREGROUND=e.SYMBOL_ICON_INTERFACE_FOREGROUND=e.SYMBOL_ICON_FUNCTION_FOREGROUND=e.SYMBOL_ICON_FOLDER_FOREGROUND=e.SYMBOL_ICON_FILE_FOREGROUND=e.SYMBOL_ICON_FIELD_FOREGROUND=e.SYMBOL_ICON_EVENT_FOREGROUND=e.SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND=e.SYMBOL_ICON_ENUMERATOR_FOREGROUND=e.SYMBOL_ICON_CONSTRUCTOR_FOREGROUND=e.SYMBOL_ICON_CONSTANT_FOREGROUND=e.SYMBOL_ICON_COLOR_FOREGROUND=e.SYMBOL_ICON_CLASS_FOREGROUND=e.SYMBOL_ICON_BOOLEAN_FOREGROUND=e.SYMBOL_ICON_ARRAY_FOREGROUND=void 0,e.SYMBOL_ICON_ARRAY_FOREGROUND=(0,k.registerColor)(\"symbolIcon.arrayForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(0,null)),e.SYMBOL_ICON_BOOLEAN_FOREGROUND=(0,k.registerColor)(\"symbolIcon.booleanForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(1,null)),e.SYMBOL_ICON_CLASS_FOREGROUND=(0,k.registerColor)(\"symbolIcon.classForeground\",{dark:\"#EE9D28\",light:\"#D67E00\",hcDark:\"#EE9D28\",hcLight:\"#D67E00\"},(0,L.localize)(2,null)),e.SYMBOL_ICON_COLOR_FOREGROUND=(0,k.registerColor)(\"symbolIcon.colorForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(3,null)),e.SYMBOL_ICON_CONSTANT_FOREGROUND=(0,k.registerColor)(\"symbolIcon.constantForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(4,null)),e.SYMBOL_ICON_CONSTRUCTOR_FOREGROUND=(0,k.registerColor)(\"symbolIcon.constructorForeground\",{dark:\"#B180D7\",light:\"#652D90\",hcDark:\"#B180D7\",hcLight:\"#652D90\"},(0,L.localize)(5,null)),e.SYMBOL_ICON_ENUMERATOR_FOREGROUND=(0,k.registerColor)(\"symbolIcon.enumeratorForeground\",{dark:\"#EE9D28\",light:\"#D67E00\",hcDark:\"#EE9D28\",hcLight:\"#D67E00\"},(0,L.localize)(6,null)),e.SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND=(0,k.registerColor)(\"symbolIcon.enumeratorMemberForeground\",{dark:\"#75BEFF\",light:\"#007ACC\",hcDark:\"#75BEFF\",hcLight:\"#007ACC\"},(0,L.localize)(7,null)),e.SYMBOL_ICON_EVENT_FOREGROUND=(0,k.registerColor)(\"symbolIcon.eventForeground\",{dark:\"#EE9D28\",light:\"#D67E00\",hcDark:\"#EE9D28\",hcLight:\"#D67E00\"},(0,L.localize)(8,null)),e.SYMBOL_ICON_FIELD_FOREGROUND=(0,k.registerColor)(\"symbolIcon.fieldForeground\",{dark:\"#75BEFF\",light:\"#007ACC\",hcDark:\"#75BEFF\",hcLight:\"#007ACC\"},(0,L.localize)(9,null)),e.SYMBOL_ICON_FILE_FOREGROUND=(0,k.registerColor)(\"symbolIcon.fileForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(10,null)),e.SYMBOL_ICON_FOLDER_FOREGROUND=(0,k.registerColor)(\"symbolIcon.folderForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(11,null)),e.SYMBOL_ICON_FUNCTION_FOREGROUND=(0,k.registerColor)(\"symbolIcon.functionForeground\",{dark:\"#B180D7\",light:\"#652D90\",hcDark:\"#B180D7\",hcLight:\"#652D90\"},(0,L.localize)(12,null)),e.SYMBOL_ICON_INTERFACE_FOREGROUND=(0,k.registerColor)(\"symbolIcon.interfaceForeground\",{dark:\"#75BEFF\",light:\"#007ACC\",hcDark:\"#75BEFF\",hcLight:\"#007ACC\"},(0,L.localize)(13,null)),e.SYMBOL_ICON_KEY_FOREGROUND=(0,k.registerColor)(\"symbolIcon.keyForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(14,null)),e.SYMBOL_ICON_KEYWORD_FOREGROUND=(0,k.registerColor)(\"symbolIcon.keywordForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(15,null)),e.SYMBOL_ICON_METHOD_FOREGROUND=(0,k.registerColor)(\"symbolIcon.methodForeground\",{dark:\"#B180D7\",light:\"#652D90\",hcDark:\"#B180D7\",hcLight:\"#652D90\"},(0,L.localize)(16,null)),e.SYMBOL_ICON_MODULE_FOREGROUND=(0,k.registerColor)(\"symbolIcon.moduleForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(17,null)),e.SYMBOL_ICON_NAMESPACE_FOREGROUND=(0,k.registerColor)(\"symbolIcon.namespaceForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(18,null)),e.SYMBOL_ICON_NULL_FOREGROUND=(0,k.registerColor)(\"symbolIcon.nullForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(19,null)),e.SYMBOL_ICON_NUMBER_FOREGROUND=(0,k.registerColor)(\"symbolIcon.numberForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(20,null)),e.SYMBOL_ICON_OBJECT_FOREGROUND=(0,k.registerColor)(\"symbolIcon.objectForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(21,null)),e.SYMBOL_ICON_OPERATOR_FOREGROUND=(0,k.registerColor)(\"symbolIcon.operatorForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(22,null)),e.SYMBOL_ICON_PACKAGE_FOREGROUND=(0,k.registerColor)(\"symbolIcon.packageForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(23,null)),e.SYMBOL_ICON_PROPERTY_FOREGROUND=(0,k.registerColor)(\"symbolIcon.propertyForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(24,null)),e.SYMBOL_ICON_REFERENCE_FOREGROUND=(0,k.registerColor)(\"symbolIcon.referenceForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(25,null)),e.SYMBOL_ICON_SNIPPET_FOREGROUND=(0,k.registerColor)(\"symbolIcon.snippetForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(26,null)),e.SYMBOL_ICON_STRING_FOREGROUND=(0,k.registerColor)(\"symbolIcon.stringForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(27,null)),e.SYMBOL_ICON_STRUCT_FOREGROUND=(0,k.registerColor)(\"symbolIcon.structForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(28,null)),e.SYMBOL_ICON_TEXT_FOREGROUND=(0,k.registerColor)(\"symbolIcon.textForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(29,null)),e.SYMBOL_ICON_TYPEPARAMETER_FOREGROUND=(0,k.registerColor)(\"symbolIcon.typeParameterForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(30,null)),e.SYMBOL_ICON_UNIT_FOREGROUND=(0,k.registerColor)(\"symbolIcon.unitForeground\",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(31,null)),e.SYMBOL_ICON_VARIABLE_FOREGROUND=(0,k.registerColor)(\"symbolIcon.variableForeground\",{dark:\"#75BEFF\",light:\"#007ACC\",hcDark:\"#75BEFF\",hcLight:\"#007ACC\"},(0,L.localize)(32,null))}),define(se[836],oe([1,0,26,116,658,177,254]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.toMenuItems=void 0;const E=Object.freeze({kind:k.CodeActionKind.Empty,title:(0,y.localize)(0,null)}),S=Object.freeze([{kind:k.CodeActionKind.QuickFix,title:(0,y.localize)(1,null)},{kind:k.CodeActionKind.RefactorExtract,title:(0,y.localize)(2,null),icon:L.Codicon.wrench},{kind:k.CodeActionKind.RefactorInline,title:(0,y.localize)(3,null),icon:L.Codicon.wrench},{kind:k.CodeActionKind.RefactorRewrite,title:(0,y.localize)(4,null),icon:L.Codicon.wrench},{kind:k.CodeActionKind.RefactorMove,title:(0,y.localize)(5,null),icon:L.Codicon.wrench},{kind:k.CodeActionKind.SurroundWith,title:(0,y.localize)(6,null),icon:L.Codicon.surroundWith},{kind:k.CodeActionKind.Source,title:(0,y.localize)(7,null),icon:L.Codicon.symbolFile},E]);function p(_,v,b){if(!v)return _.map(n=>{var t;return{kind:\"action\",item:n,group:E,disabled:!!n.action.disabled,label:n.action.disabled||n.action.title,canPreview:!!(!((t=n.action.edit)===null||t===void 0)&&t.edits.length)}});const a=S.map(n=>({group:n,actions:[]}));for(const n of _){const t=n.action.kind?new k.CodeActionKind(n.action.kind):k.CodeActionKind.None;for(const r of a)if(r.group.kind.contains(t)){r.actions.push(n);break}}const i=[];for(const n of a)if(n.actions.length){i.push({kind:\"header\",group:n.group});for(const t of n.actions){const r=n.group;i.push({kind:\"action\",item:t,group:t.action.isAI?{title:r.title,kind:r.kind,icon:L.Codicon.sparkle}:r,label:t.action.title,disabled:!!t.action.disabled,keybinding:b(t.action)})}}return i}e.toMenuItems=p}),define(se[106],oe([1,0,29,39]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.defaultMenuStyles=e.defaultSelectBoxStyles=e.getListStyles=e.defaultListStyles=e.defaultBreadcrumbsWidgetStyles=e.defaultCountBadgeStyles=e.defaultFindWidgetStyles=e.defaultInputBoxStyles=e.defaultDialogStyles=e.defaultCheckboxStyles=e.defaultToggleStyles=e.defaultProgressBarStyles=e.defaultButtonStyles=e.defaultKeybindingLabelStyles=void 0;function y(S,p){const _={...p};for(const v in S){const b=S[v];_[v]=b!==void 0?(0,L.asCssVariable)(b):void 0}return _}e.defaultKeybindingLabelStyles={keybindingLabelBackground:(0,L.asCssVariable)(L.keybindingLabelBackground),keybindingLabelForeground:(0,L.asCssVariable)(L.keybindingLabelForeground),keybindingLabelBorder:(0,L.asCssVariable)(L.keybindingLabelBorder),keybindingLabelBottomBorder:(0,L.asCssVariable)(L.keybindingLabelBottomBorder),keybindingLabelShadow:(0,L.asCssVariable)(L.widgetShadow)},e.defaultButtonStyles={buttonForeground:(0,L.asCssVariable)(L.buttonForeground),buttonSeparator:(0,L.asCssVariable)(L.buttonSeparator),buttonBackground:(0,L.asCssVariable)(L.buttonBackground),buttonHoverBackground:(0,L.asCssVariable)(L.buttonHoverBackground),buttonSecondaryForeground:(0,L.asCssVariable)(L.buttonSecondaryForeground),buttonSecondaryBackground:(0,L.asCssVariable)(L.buttonSecondaryBackground),buttonSecondaryHoverBackground:(0,L.asCssVariable)(L.buttonSecondaryHoverBackground),buttonBorder:(0,L.asCssVariable)(L.buttonBorder)},e.defaultProgressBarStyles={progressBarBackground:(0,L.asCssVariable)(L.progressBarBackground)},e.defaultToggleStyles={inputActiveOptionBorder:(0,L.asCssVariable)(L.inputActiveOptionBorder),inputActiveOptionForeground:(0,L.asCssVariable)(L.inputActiveOptionForeground),inputActiveOptionBackground:(0,L.asCssVariable)(L.inputActiveOptionBackground)},e.defaultCheckboxStyles={checkboxBackground:(0,L.asCssVariable)(L.checkboxBackground),checkboxBorder:(0,L.asCssVariable)(L.checkboxBorder),checkboxForeground:(0,L.asCssVariable)(L.checkboxForeground)},e.defaultDialogStyles={dialogBackground:(0,L.asCssVariable)(L.editorWidgetBackground),dialogForeground:(0,L.asCssVariable)(L.editorWidgetForeground),dialogShadow:(0,L.asCssVariable)(L.widgetShadow),dialogBorder:(0,L.asCssVariable)(L.contrastBorder),errorIconForeground:(0,L.asCssVariable)(L.problemsErrorIconForeground),warningIconForeground:(0,L.asCssVariable)(L.problemsWarningIconForeground),infoIconForeground:(0,L.asCssVariable)(L.problemsInfoIconForeground),textLinkForeground:(0,L.asCssVariable)(L.textLinkForeground)},e.defaultInputBoxStyles={inputBackground:(0,L.asCssVariable)(L.inputBackground),inputForeground:(0,L.asCssVariable)(L.inputForeground),inputBorder:(0,L.asCssVariable)(L.inputBorder),inputValidationInfoBorder:(0,L.asCssVariable)(L.inputValidationInfoBorder),inputValidationInfoBackground:(0,L.asCssVariable)(L.inputValidationInfoBackground),inputValidationInfoForeground:(0,L.asCssVariable)(L.inputValidationInfoForeground),inputValidationWarningBorder:(0,L.asCssVariable)(L.inputValidationWarningBorder),inputValidationWarningBackground:(0,L.asCssVariable)(L.inputValidationWarningBackground),inputValidationWarningForeground:(0,L.asCssVariable)(L.inputValidationWarningForeground),inputValidationErrorBorder:(0,L.asCssVariable)(L.inputValidationErrorBorder),inputValidationErrorBackground:(0,L.asCssVariable)(L.inputValidationErrorBackground),inputValidationErrorForeground:(0,L.asCssVariable)(L.inputValidationErrorForeground)},e.defaultFindWidgetStyles={listFilterWidgetBackground:(0,L.asCssVariable)(L.listFilterWidgetBackground),listFilterWidgetOutline:(0,L.asCssVariable)(L.listFilterWidgetOutline),listFilterWidgetNoMatchesOutline:(0,L.asCssVariable)(L.listFilterWidgetNoMatchesOutline),listFilterWidgetShadow:(0,L.asCssVariable)(L.listFilterWidgetShadow),inputBoxStyles:e.defaultInputBoxStyles,toggleStyles:e.defaultToggleStyles},e.defaultCountBadgeStyles={badgeBackground:(0,L.asCssVariable)(L.badgeBackground),badgeForeground:(0,L.asCssVariable)(L.badgeForeground),badgeBorder:(0,L.asCssVariable)(L.contrastBorder)},e.defaultBreadcrumbsWidgetStyles={breadcrumbsBackground:(0,L.asCssVariable)(L.breadcrumbsBackground),breadcrumbsForeground:(0,L.asCssVariable)(L.breadcrumbsForeground),breadcrumbsHoverForeground:(0,L.asCssVariable)(L.breadcrumbsFocusForeground),breadcrumbsFocusForeground:(0,L.asCssVariable)(L.breadcrumbsFocusForeground),breadcrumbsFocusAndSelectionForeground:(0,L.asCssVariable)(L.breadcrumbsActiveSelectionForeground)},e.defaultListStyles={listBackground:void 0,listInactiveFocusForeground:void 0,listFocusBackground:(0,L.asCssVariable)(L.listFocusBackground),listFocusForeground:(0,L.asCssVariable)(L.listFocusForeground),listFocusOutline:(0,L.asCssVariable)(L.listFocusOutline),listActiveSelectionBackground:(0,L.asCssVariable)(L.listActiveSelectionBackground),listActiveSelectionForeground:(0,L.asCssVariable)(L.listActiveSelectionForeground),listActiveSelectionIconForeground:(0,L.asCssVariable)(L.listActiveSelectionIconForeground),listFocusAndSelectionOutline:(0,L.asCssVariable)(L.listFocusAndSelectionOutline),listFocusAndSelectionBackground:(0,L.asCssVariable)(L.listActiveSelectionBackground),listFocusAndSelectionForeground:(0,L.asCssVariable)(L.listActiveSelectionForeground),listInactiveSelectionBackground:(0,L.asCssVariable)(L.listInactiveSelectionBackground),listInactiveSelectionIconForeground:(0,L.asCssVariable)(L.listInactiveSelectionIconForeground),listInactiveSelectionForeground:(0,L.asCssVariable)(L.listInactiveSelectionForeground),listInactiveFocusBackground:(0,L.asCssVariable)(L.listInactiveFocusBackground),listInactiveFocusOutline:(0,L.asCssVariable)(L.listInactiveFocusOutline),listHoverBackground:(0,L.asCssVariable)(L.listHoverBackground),listHoverForeground:(0,L.asCssVariable)(L.listHoverForeground),listDropOverBackground:(0,L.asCssVariable)(L.listDropOverBackground),listDropBetweenBackground:(0,L.asCssVariable)(L.listDropBetweenBackground),listSelectionOutline:(0,L.asCssVariable)(L.activeContrastBorder),listHoverOutline:(0,L.asCssVariable)(L.activeContrastBorder),treeIndentGuidesStroke:(0,L.asCssVariable)(L.treeIndentGuidesStroke),treeInactiveIndentGuidesStroke:(0,L.asCssVariable)(L.treeInactiveIndentGuidesStroke),tableColumnsBorder:(0,L.asCssVariable)(L.tableColumnsBorder),tableOddRowsBackgroundColor:(0,L.asCssVariable)(L.tableOddRowsBackgroundColor)};function E(S){return y(S,e.defaultListStyles)}e.getListStyles=E,e.defaultSelectBoxStyles={selectBackground:(0,L.asCssVariable)(L.selectBackground),selectListBackground:(0,L.asCssVariable)(L.selectListBackground),selectForeground:(0,L.asCssVariable)(L.selectForeground),decoratorRightForeground:(0,L.asCssVariable)(L.pickerGroupForeground),selectBorder:(0,L.asCssVariable)(L.selectBorder),focusBorder:(0,L.asCssVariable)(L.focusBorder),listFocusBackground:(0,L.asCssVariable)(L.quickInputListFocusBackground),listInactiveSelectionIconForeground:(0,L.asCssVariable)(L.quickInputListFocusIconForeground),listFocusForeground:(0,L.asCssVariable)(L.quickInputListFocusForeground),listFocusOutline:(0,L.asCssVariableWithDefault)(L.activeContrastBorder,k.Color.transparent.toString()),listHoverBackground:(0,L.asCssVariable)(L.listHoverBackground),listHoverForeground:(0,L.asCssVariable)(L.listHoverForeground),listHoverOutline:(0,L.asCssVariable)(L.activeContrastBorder),selectListBorder:(0,L.asCssVariable)(L.editorWidgetBorder),listBackground:void 0,listActiveSelectionBackground:void 0,listActiveSelectionForeground:void 0,listActiveSelectionIconForeground:void 0,listFocusAndSelectionBackground:void 0,listDropOverBackground:void 0,listDropBetweenBackground:void 0,listInactiveSelectionBackground:void 0,listInactiveSelectionForeground:void 0,listInactiveFocusBackground:void 0,listInactiveFocusOutline:void 0,listSelectionOutline:void 0,listFocusAndSelectionForeground:void 0,listFocusAndSelectionOutline:void 0,listInactiveFocusForeground:void 0,tableColumnsBorder:void 0,tableOddRowsBackgroundColor:void 0,treeIndentGuidesStroke:void 0,treeInactiveIndentGuidesStroke:void 0},e.defaultMenuStyles={shadowColor:(0,L.asCssVariable)(L.widgetShadow),borderColor:(0,L.asCssVariable)(L.menuBorder),foregroundColor:(0,L.asCssVariable)(L.menuForeground),backgroundColor:(0,L.asCssVariable)(L.menuBackground),selectionForegroundColor:(0,L.asCssVariable)(L.menuSelectionForeground),selectionBackgroundColor:(0,L.asCssVariable)(L.menuSelectionBackground),selectionBorderColor:(0,L.asCssVariable)(L.menuSelectionBorder),separatorColor:(0,L.asCssVariable)(L.menuSeparatorBackground),scrollbarShadow:(0,L.asCssVariable)(L.scrollbarShadow),scrollbarSliderBackground:(0,L.asCssVariable)(L.scrollbarSliderBackground),scrollbarSliderHoverBackground:(0,L.asCssVariable)(L.scrollbarSliderHoverBackground),scrollbarSliderActiveBackground:(0,L.asCssVariable)(L.scrollbarSliderActiveBackground)}}),define(se[837],oe([1,0,7,319,320,230,71,2,49,68,683,8,34,164,106,161]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";var u;Object.defineProperty(e,\"__esModule\",{value:!0}),e.AccessibilityProvider=e.OneReferenceRenderer=e.FileReferencesRenderer=e.IdentityProvider=e.StringRepresentationProvider=e.Delegate=e.DataSource=void 0;let f=class{constructor(w){this._resolverService=w}hasChildren(w){return w instanceof r.ReferencesModel||w instanceof r.FileReferences}getChildren(w){if(w instanceof r.ReferencesModel)return w.groups;if(w instanceof r.FileReferences)return w.resolve(this._resolverService).then(D=>D.children);throw new Error(\"bad tree\")}};e.DataSource=f,e.DataSource=f=ke([ge(0,v.ITextModelService)],f);class c{getHeight(){return 23}getTemplateId(w){return w instanceof r.FileReferences?o.id:h.id}}e.Delegate=c;let d=class{constructor(w){this._keybindingService=w}getKeyboardNavigationLabel(w){var D;if(w instanceof r.OneReference){const I=(D=w.parent.getPreview(w))===null||D===void 0?void 0:D.preview(w.range);if(I)return I.value}return(0,_.basename)(w.uri)}};e.StringRepresentationProvider=d,e.StringRepresentationProvider=d=ke([ge(0,i.IKeybindingService)],d);class s{getId(w){return w instanceof r.OneReference?w.id:w.uri}}e.IdentityProvider=s;let l=class extends p.Disposable{constructor(w,D){super(),this._labelService=D;const I=document.createElement(\"div\");I.classList.add(\"reference-file\"),this.file=this._register(new E.IconLabel(I,{supportHighlights:!0})),this.badge=new k.CountBadge(L.append(I,L.$(\".count\")),{},t.defaultCountBadgeStyles),w.appendChild(I)}set(w,D){const I=(0,_.dirname)(w.uri);this.file.setLabel(this._labelService.getUriBasenameLabel(w.uri),this._labelService.getUriLabel(I,{relative:!0}),{title:this._labelService.getUriLabel(w.uri),matches:D});const T=w.children.length;this.badge.setCount(T),T>1?this.badge.setTitleFormat((0,b.localize)(0,null,T)):this.badge.setTitleFormat((0,b.localize)(1,null,T))}};l=ke([ge(1,n.ILabelService)],l);let o=u=class{constructor(w){this._instantiationService=w,this.templateId=u.id}renderTemplate(w){return this._instantiationService.createInstance(l,w)}renderElement(w,D,I){I.set(w.element,(0,S.createMatches)(w.filterData))}disposeTemplate(w){w.dispose()}};e.FileReferencesRenderer=o,o.id=\"FileReferencesRenderer\",e.FileReferencesRenderer=o=u=ke([ge(0,a.IInstantiationService)],o);class g{constructor(w){this.label=new y.HighlightedLabel(w)}set(w,D){var I;const T=(I=w.parent.getPreview(w))===null||I===void 0?void 0:I.preview(w.range);if(!T||!T.value)this.label.set(`${(0,_.basename)(w.uri)}:${w.range.startLineNumber+1}:${w.range.startColumn+1}`);else{const{value:A,highlight:P}=T;D&&!S.FuzzyScore.isDefault(D)?(this.label.element.classList.toggle(\"referenceMatch\",!1),this.label.set(A,(0,S.createMatches)(D))):(this.label.element.classList.toggle(\"referenceMatch\",!0),this.label.set(A,[P]))}}}class h{constructor(){this.templateId=h.id}renderTemplate(w){return new g(w)}renderElement(w,D,I){I.set(w.element,w.filterData)}disposeTemplate(){}}e.OneReferenceRenderer=h,h.id=\"OneReferenceRenderer\";class m{getWidgetAriaLabel(){return(0,b.localize)(2,null)}getAriaLabel(w){return w.ariaMessage}}e.AccessibilityProvider=m}),define(se[838],oe([1,0,7,224,119,19,26,2,17,28,731,59,34,106,29,276]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ActionList=e.previewSelectedActionCommand=e.acceptSelectedActionCommand=void 0,e.acceptSelectedActionCommand=\"acceptSelectedCodeAction\",e.previewSelectedActionCommand=\"previewSelectedCodeAction\";class r{get templateId(){return\"header\"}renderTemplate(g){g.classList.add(\"group-header\");const h=document.createElement(\"span\");return g.append(h),{container:g,text:h}}renderElement(g,h,m){var C,w;m.text.textContent=(w=(C=g.group)===null||C===void 0?void 0:C.title)!==null&&w!==void 0?w:\"\"}disposeTemplate(g){}}let u=class{get templateId(){return\"action\"}constructor(g,h){this._supportsPreview=g,this._keybindingService=h}renderTemplate(g){g.classList.add(this.templateId);const h=document.createElement(\"div\");h.className=\"icon\",g.append(h);const m=document.createElement(\"span\");m.className=\"title\",g.append(m);const C=new k.KeybindingLabel(g,_.OS);return{container:g,icon:h,text:m,keybinding:C}}renderElement(g,h,m){var C,w,D;if(!((C=g.group)===null||C===void 0)&&C.icon?(m.icon.className=v.ThemeIcon.asClassName(g.group.icon),g.group.icon.color&&(m.icon.style.color=(0,t.asCssVariable)(g.group.icon.color.id))):(m.icon.className=v.ThemeIcon.asClassName(S.Codicon.lightBulb),m.icon.style.color=\"var(--vscode-editorLightBulb-foreground)\"),!g.item||!g.label)return;m.text.textContent=l(g.label),m.keybinding.set(g.keybinding),L.setVisibility(!!g.keybinding,m.keybinding.element);const I=(w=this._keybindingService.lookupKeybinding(e.acceptSelectedActionCommand))===null||w===void 0?void 0:w.getLabel(),T=(D=this._keybindingService.lookupKeybinding(e.previewSelectedActionCommand))===null||D===void 0?void 0:D.getLabel();m.container.classList.toggle(\"option-disabled\",g.disabled),g.disabled?m.container.title=g.label:I&&T?this._supportsPreview&&g.canPreview?m.container.title=(0,b.localize)(0,null,I,T):m.container.title=(0,b.localize)(1,null,I):m.container.title=\"\"}disposeTemplate(g){}};u=ke([ge(1,i.IKeybindingService)],u);class f extends UIEvent{constructor(){super(\"acceptSelectedAction\")}}class c extends UIEvent{constructor(){super(\"previewSelectedAction\")}}function d(o){if(o.kind===\"action\")return o.label}let s=class extends p.Disposable{constructor(g,h,m,C,w,D){super(),this._delegate=C,this._contextViewService=w,this._keybindingService=D,this._actionLineHeight=24,this._headerLineHeight=26,this.cts=this._register(new E.CancellationTokenSource),this.domNode=document.createElement(\"div\"),this.domNode.classList.add(\"actionList\");const I={getHeight:T=>T.kind===\"header\"?this._headerLineHeight:this._actionLineHeight,getTemplateId:T=>T.kind};this._list=this._register(new y.List(g,this.domNode,I,[new u(h,this._keybindingService),new r],{keyboardSupport:!1,typeNavigationEnabled:!0,keyboardNavigationLabelProvider:{getKeyboardNavigationLabel:d},accessibilityProvider:{getAriaLabel:T=>{if(T.kind===\"action\"){let A=T.label?l(T?.label):\"\";return T.disabled&&(A=(0,b.localize)(2,null,A,T.disabled)),A}return null},getWidgetAriaLabel:()=>(0,b.localize)(3,null),getRole:T=>T.kind===\"action\"?\"option\":\"separator\",getWidgetRole:()=>\"listbox\"}})),this._list.style(n.defaultListStyles),this._register(this._list.onMouseClick(T=>this.onListClick(T))),this._register(this._list.onMouseOver(T=>this.onListHover(T))),this._register(this._list.onDidChangeFocus(()=>this.onFocus())),this._register(this._list.onDidChangeSelection(T=>this.onListSelection(T))),this._allMenuItems=m,this._list.splice(0,this._list.length,this._allMenuItems),this._list.length&&this.focusNext()}focusCondition(g){return!g.disabled&&g.kind===\"action\"}hide(g){this._delegate.onHide(g),this.cts.cancel(),this._contextViewService.hideContextView()}layout(g){const h=this._allMenuItems.filter(T=>T.kind===\"header\").length,C=this._allMenuItems.length*this._actionLineHeight+h*this._headerLineHeight-h*this._actionLineHeight;this._list.layout(C);let w=g;if(this._allMenuItems.length>=50)w=380;else{const T=this._allMenuItems.map((A,P)=>{const N=this.domNode.ownerDocument.getElementById(this._list.getElementID(P));if(N){N.style.width=\"auto\";const M=N.getBoundingClientRect().width;return N.style.width=\"\",M}return 0});w=Math.max(...T,g)}const D=.7,I=Math.min(C,this.domNode.ownerDocument.body.clientHeight*D);return this._list.layout(I,w),this.domNode.style.height=`${I}px`,this._list.domFocus(),w}focusPrevious(){this._list.focusPrevious(1,!0,void 0,this.focusCondition)}focusNext(){this._list.focusNext(1,!0,void 0,this.focusCondition)}acceptSelected(g){const h=this._list.getFocus();if(h.length===0)return;const m=h[0],C=this._list.element(m);if(!this.focusCondition(C))return;const w=g?new c:new f;this._list.setSelection([m],w)}onListSelection(g){if(!g.elements.length)return;const h=g.elements[0];h.item&&this.focusCondition(h)?this._delegate.onSelect(h.item,g.browserEvent instanceof c):this._list.setSelection([])}onFocus(){var g,h;const m=this._list.getFocus();if(m.length===0)return;const C=m[0],w=this._list.element(C);(h=(g=this._delegate).onFocus)===null||h===void 0||h.call(g,w.item)}async onListHover(g){const h=g.element;if(h&&h.item&&this.focusCondition(h)){if(this._delegate.onHover&&!h.disabled&&h.kind===\"action\"){const m=await this._delegate.onHover(h.item,this.cts.token);h.canPreview=m?m.canPreview:void 0}g.index&&this._list.splice(g.index,1,[h])}this._list.setFocus(typeof g.index==\"number\"?[g.index]:[])}onListClick(g){g.element&&this.focusCondition(g.element)&&this._list.setFocus([])}};e.ActionList=s,e.ActionList=s=ke([ge(4,a.IContextViewService),ge(5,i.IKeybindingService)],s);function l(o){return o.replace(/\\r\\n|\\r|\\n/g,\" \")}}),define(se[839],oe([1,0,7,78,2,732,838,30,15,59,45,8,29,276]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IActionWidgetService=void 0,(0,i.registerColor)(\"actionBar.toggledBackground\",{dark:i.inputActiveOptionBackground,light:i.inputActiveOptionBackground,hcDark:i.inputActiveOptionBackground,hcLight:i.inputActiveOptionBackground},(0,E.localize)(0,null));const n={Visible:new _.RawContextKey(\"codeActionMenuVisible\",!1,(0,E.localize)(1,null))};e.IActionWidgetService=(0,a.createDecorator)(\"actionWidgetService\");let t=class extends y.Disposable{get isVisible(){return n.Visible.getValue(this._contextKeyService)||!1}constructor(f,c,d){super(),this._contextViewService=f,this._contextKeyService=c,this._instantiationService=d,this._list=this._register(new y.MutableDisposable)}show(f,c,d,s,l,o,g){const h=n.Visible.bindTo(this._contextKeyService),m=this._instantiationService.createInstance(S.ActionList,f,c,d,s);this._contextViewService.showContextView({getAnchor:()=>l,render:C=>(h.set(!0),this._renderWidget(C,m,g??[])),onHide:C=>{h.reset(),this._onWidgetClosed(C)}},o,!1)}acceptSelected(f){var c;(c=this._list.value)===null||c===void 0||c.acceptSelected(f)}focusPrevious(){var f,c;(c=(f=this._list)===null||f===void 0?void 0:f.value)===null||c===void 0||c.focusPrevious()}focusNext(){var f,c;(c=(f=this._list)===null||f===void 0?void 0:f.value)===null||c===void 0||c.focusNext()}hide(){var f;(f=this._list.value)===null||f===void 0||f.hide(),this._list.clear()}_renderWidget(f,c,d){var s;const l=document.createElement(\"div\");if(l.classList.add(\"action-widget\"),f.appendChild(l),this._list.value=c,this._list.value)l.appendChild(this._list.value.domNode);else throw new Error(\"List has no value\");const o=new y.DisposableStore,g=document.createElement(\"div\"),h=f.appendChild(g);h.classList.add(\"context-view-block\"),o.add(L.addDisposableListener(h,L.EventType.MOUSE_DOWN,T=>T.stopPropagation()));const m=document.createElement(\"div\"),C=f.appendChild(m);C.classList.add(\"context-view-pointerBlock\"),o.add(L.addDisposableListener(C,L.EventType.POINTER_MOVE,()=>C.remove())),o.add(L.addDisposableListener(C,L.EventType.MOUSE_DOWN,()=>C.remove()));let w=0;if(d.length){const T=this._createActionBar(\".action-widget-action-bar\",d);T&&(l.appendChild(T.getContainer().parentElement),o.add(T),w=T.getContainer().offsetWidth)}const D=(s=this._list.value)===null||s===void 0?void 0:s.layout(w);l.style.width=`${D}px`;const I=o.add(L.trackFocus(f));return o.add(I.onDidBlur(()=>this.hide())),o}_createActionBar(f,c){if(!c.length)return;const d=L.$(f),s=new k.ActionBar(d);return s.push(c,{icon:!1,label:!0}),s}_onWidgetClosed(f){var c;(c=this._list.value)===null||c===void 0||c.hide(f)}};t=ke([ge(0,v.IContextViewService),ge(1,_.IContextKeyService),ge(2,a.IInstantiationService)],t),(0,b.registerSingleton)(e.IActionWidgetService,t,1);const r=100+1e3;(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:\"hideCodeActionWidget\",title:{value:(0,E.localize)(2,null),original:\"Hide action widget\"},precondition:n.Visible,keybinding:{weight:r,primary:9,secondary:[1033]}})}run(u){u.get(e.IActionWidgetService).hide()}}),(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:\"selectPrevCodeAction\",title:{value:(0,E.localize)(3,null),original:\"Select previous action\"},precondition:n.Visible,keybinding:{weight:r,primary:16,secondary:[2064],mac:{primary:16,secondary:[2064,302]}}})}run(u){const f=u.get(e.IActionWidgetService);f instanceof t&&f.focusPrevious()}}),(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:\"selectNextCodeAction\",title:{value:(0,E.localize)(4,null),original:\"Select next action\"},precondition:n.Visible,keybinding:{weight:r,primary:18,secondary:[2066],mac:{primary:18,secondary:[2066,300]}}})}run(u){const f=u.get(e.IActionWidgetService);f instanceof t&&f.focusNext()}}),(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:S.acceptSelectedActionCommand,title:{value:(0,E.localize)(5,null),original:\"Accept selected action\"},precondition:n.Visible,keybinding:{weight:r,primary:3,secondary:[2137]}})}run(u){const f=u.get(e.IActionWidgetService);f instanceof t&&f.acceptSelected()}}),(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:S.previewSelectedActionCommand,title:{value:(0,E.localize)(6,null),original:\"Preview selected action\"},precondition:n.Visible,keybinding:{weight:r,primary:2051}})}run(u){const f=u.get(e.IActionWidgetService);f instanceof t&&f.acceptSelected(!0)}})}),define(se[840],oe([1,0,7,67,599,42,12,2,106]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContextMenuHandler=void 0;class v{constructor(a,i,n,t){this.contextViewService=a,this.telemetryService=i,this.notificationService=n,this.keybindingService=t,this.focusToReturn=null,this.lastContainer=null,this.block=null,this.blockDisposable=null,this.options={blockMouse:!0}}configure(a){this.options=a}showContextMenu(a){const i=a.getActions();if(!i.length)return;this.focusToReturn=(0,L.getActiveElement)();let n;const t=a.domForShadowRoot instanceof HTMLElement?a.domForShadowRoot:void 0;this.contextViewService.showContextView({getAnchor:()=>a.getAnchor(),canRelayout:!1,anchorAlignment:a.anchorAlignment,anchorAxisAlignment:a.anchorAxisAlignment,render:r=>{var u;this.lastContainer=r;const f=a.getMenuClassName?a.getMenuClassName():\"\";f&&(r.className+=\" \"+f),this.options.blockMouse&&(this.block=r.appendChild((0,L.$)(\".context-view-block\")),this.block.style.position=\"fixed\",this.block.style.cursor=\"initial\",this.block.style.left=\"0\",this.block.style.top=\"0\",this.block.style.width=\"100%\",this.block.style.height=\"100%\",this.block.style.zIndex=\"-1\",(u=this.blockDisposable)===null||u===void 0||u.dispose(),this.blockDisposable=(0,L.addDisposableListener)(this.block,L.EventType.MOUSE_DOWN,l=>l.stopPropagation()));const c=new p.DisposableStore,d=a.actionRunner||new E.ActionRunner;d.onWillRun(l=>this.onActionRun(l,!a.skipTelemetry),this,c),d.onDidRun(this.onDidActionRun,this,c),n=new y.Menu(r,i,{actionViewItemProvider:a.getActionViewItem,context:a.getActionsContext?a.getActionsContext():null,actionRunner:d,getKeyBinding:a.getKeyBinding?a.getKeyBinding:l=>this.keybindingService.lookupKeybinding(l.id)},_.defaultMenuStyles),n.onDidCancel(()=>this.contextViewService.hideContextView(!0),null,c),n.onDidBlur(()=>this.contextViewService.hideContextView(!0),null,c);const s=(0,L.getWindow)(r);return c.add((0,L.addDisposableListener)(s,L.EventType.BLUR,()=>this.contextViewService.hideContextView(!0))),c.add((0,L.addDisposableListener)(s,L.EventType.MOUSE_DOWN,l=>{if(l.defaultPrevented)return;const o=new k.StandardMouseEvent(s,l);let g=o.target;if(!o.rightButton){for(;g;){if(g===r)return;g=g.parentElement}this.contextViewService.hideContextView(!0)}})),(0,p.combinedDisposable)(c,n)},focus:()=>{n?.focus(!!a.autoSelectFirstItem)},onHide:r=>{var u,f,c;(u=a.onHide)===null||u===void 0||u.call(a,!!r),this.block&&(this.block.remove(),this.block=null),(f=this.blockDisposable)===null||f===void 0||f.dispose(),this.blockDisposable=null,this.lastContainer&&((0,L.getActiveElement)()===this.lastContainer||(0,L.isAncestor)((0,L.getActiveElement)(),this.lastContainer))&&((c=this.focusToReturn)===null||c===void 0||c.focus()),this.lastContainer=null}},t,!!t)}onActionRun(a,i){i&&this.telemetryService.publicLog2(\"workbenchActionExecuted\",{id:a.action.id,from:\"contextMenu\"}),this.contextViewService.hideContextView(!1)}onDidActionRun(a){a.error&&!(0,S.isCancellationError)(a.error)&&this.notificationService.error(a.error)}}e.ContextMenuHandler=v}),define(se[192],oe([1,0,7,594,119,595,187,602,601,326,6,2,744,27,98,15,242,59,8,34,37,106]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.WorkbenchCompressibleAsyncDataTree=e.WorkbenchAsyncDataTree=e.WorkbenchDataTree=e.WorkbenchCompressibleObjectTree=e.WorkbenchObjectTree=e.WorkbenchTable=e.WorkbenchPagedList=e.WorkbenchList=e.WorkbenchTreeFindOpen=e.WorkbenchTreeElementHasChild=e.WorkbenchTreeElementCanExpand=e.WorkbenchTreeElementHasParent=e.WorkbenchTreeElementCanCollapse=e.WorkbenchListSupportsFind=e.WorkbenchListSelectionNavigation=e.WorkbenchListMultiSelection=e.WorkbenchListDoubleSelection=e.WorkbenchListHasSelectionOrFocus=e.WorkbenchListFocusContextKey=e.WorkbenchListSupportsMultiSelectContextKey=e.WorkbenchTreeStickyScrollFocused=e.RawWorkbenchListFocusContextKey=e.WorkbenchListScrollAtBottomContextKey=e.WorkbenchListScrollAtTopContextKey=e.RawWorkbenchListScrollAtBoundaryContextKey=e.ListService=e.IListService=void 0,e.IListService=(0,c.createDecorator)(\"listService\");class o{get lastFocusedList(){return this._lastFocusedWidget}constructor(){this.disposables=new a.DisposableStore,this.lists=[],this._lastFocusedWidget=void 0,this._hasCreatedStyleController=!1}setLastFocusedList(ce){var pe,ve;ce!==this._lastFocusedWidget&&((pe=this._lastFocusedWidget)===null||pe===void 0||pe.getHTMLElement().classList.remove(\"last-focused\"),this._lastFocusedWidget=ce,(ve=this._lastFocusedWidget)===null||ve===void 0||ve.getHTMLElement().classList.add(\"last-focused\"))}register(ce,pe){if(this._hasCreatedStyleController||(this._hasCreatedStyleController=!0,new y.DefaultStyleController((0,L.createStyleSheet)(),\"\").style(l.defaultListStyles)),this.lists.some(Ce=>Ce.widget===ce))throw new Error(\"Cannot register the same widget multiple times\");const ve={widget:ce,extraContextKeys:pe};return this.lists.push(ve),(0,L.isActiveElement)(ce.getHTMLElement())&&this.setLastFocusedList(ce),(0,a.combinedDisposable)(ce.onDidFocus(()=>this.setLastFocusedList(ce)),(0,a.toDisposable)(()=>this.lists.splice(this.lists.indexOf(ve),1)),ce.onDidDispose(()=>{this.lists=this.lists.filter(Ce=>Ce!==ve),this._lastFocusedWidget===ce&&this.setLastFocusedList(void 0)}))}dispose(){this.disposables.dispose()}}e.ListService=o,e.RawWorkbenchListScrollAtBoundaryContextKey=new r.RawContextKey(\"listScrollAtBoundary\",\"none\"),e.WorkbenchListScrollAtTopContextKey=r.ContextKeyExpr.or(e.RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo(\"top\"),e.RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo(\"both\")),e.WorkbenchListScrollAtBottomContextKey=r.ContextKeyExpr.or(e.RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo(\"bottom\"),e.RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo(\"both\")),e.RawWorkbenchListFocusContextKey=new r.RawContextKey(\"listFocus\",!0),e.WorkbenchTreeStickyScrollFocused=new r.RawContextKey(\"treestickyScrollFocused\",!1),e.WorkbenchListSupportsMultiSelectContextKey=new r.RawContextKey(\"listSupportsMultiselect\",!0),e.WorkbenchListFocusContextKey=r.ContextKeyExpr.and(e.RawWorkbenchListFocusContextKey,r.ContextKeyExpr.not(u.InputFocusedContextKey),e.WorkbenchTreeStickyScrollFocused.negate()),e.WorkbenchListHasSelectionOrFocus=new r.RawContextKey(\"listHasSelectionOrFocus\",!1),e.WorkbenchListDoubleSelection=new r.RawContextKey(\"listDoubleSelection\",!1),e.WorkbenchListMultiSelection=new r.RawContextKey(\"listMultiSelection\",!1),e.WorkbenchListSelectionNavigation=new r.RawContextKey(\"listSelectionNavigation\",!1),e.WorkbenchListSupportsFind=new r.RawContextKey(\"listSupportsFind\",!0),e.WorkbenchTreeElementCanCollapse=new r.RawContextKey(\"treeElementCanCollapse\",!1),e.WorkbenchTreeElementHasParent=new r.RawContextKey(\"treeElementHasParent\",!1),e.WorkbenchTreeElementCanExpand=new r.RawContextKey(\"treeElementCanExpand\",!1),e.WorkbenchTreeElementHasChild=new r.RawContextKey(\"treeElementHasChild\",!1),e.WorkbenchTreeFindOpen=new r.RawContextKey(\"treeFindOpen\",!1);const g=\"listTypeNavigationMode\",h=\"listAutomaticKeyboardNavigation\";function m(ue,ce){const pe=ue.createScoped(ce.getHTMLElement());return e.RawWorkbenchListFocusContextKey.bindTo(pe),pe}function C(ue,ce){const pe=e.RawWorkbenchListScrollAtBoundaryContextKey.bindTo(ue),ve=()=>{const Ce=ce.scrollTop===0,Se=ce.scrollHeight-ce.renderHeight-ce.scrollTop<1;Ce&&Se?pe.set(\"both\"):Ce?pe.set(\"top\"):Se?pe.set(\"bottom\"):pe.set(\"none\")};return ve(),ce.onDidScroll(ve)}const w=\"workbench.list.multiSelectModifier\",D=\"workbench.list.openMode\",I=\"workbench.list.horizontalScrolling\",T=\"workbench.list.defaultFindMode\",A=\"workbench.list.typeNavigationMode\",P=\"workbench.list.keyboardNavigation\",N=\"workbench.list.scrollByPage\",M=\"workbench.list.defaultFindMatchType\",R=\"workbench.tree.indent\",x=\"workbench.tree.renderIndentGuides\",O=\"workbench.list.smoothScrolling\",B=\"workbench.list.mouseWheelScrollSensitivity\",W=\"workbench.list.fastScrollSensitivity\",V=\"workbench.tree.expandMode\",K=\"workbench.tree.enableStickyScroll\",F=\"workbench.tree.stickyScrollMaxItemCount\";function q(ue){return ue.getValue(w)===\"alt\"}class ie extends a.Disposable{constructor(ce){super(),this.configurationService=ce,this.useAltAsMultipleSelectionModifier=q(ce),this.registerListeners()}registerListeners(){this._register(this.configurationService.onDidChangeConfiguration(ce=>{ce.affectsConfiguration(w)&&(this.useAltAsMultipleSelectionModifier=q(this.configurationService))}))}isSelectionSingleChangeEvent(ce){return this.useAltAsMultipleSelectionModifier?ce.browserEvent.altKey:(0,y.isSelectionSingleChangeEvent)(ce)}isSelectionRangeChangeEvent(ce){return(0,y.isSelectionRangeChangeEvent)(ce)}}function ae(ue,ce){var pe;const ve=ue.get(n.IConfigurationService),Ce=ue.get(d.IKeybindingService),Se=new a.DisposableStore;return[{...ce,keyboardNavigationDelegate:{mightProducePrintableCharacter(Ee){return Ce.mightProducePrintableCharacter(Ee)}},smoothScrolling:!!ve.getValue(O),mouseWheelScrollSensitivity:ve.getValue(B),fastScrollSensitivity:ve.getValue(W),multipleSelectionController:(pe=ce.multipleSelectionController)!==null&&pe!==void 0?pe:Se.add(new ie(ve)),keyboardNavigationEventFilter:me(Ce),scrollByPage:!!ve.getValue(N)},Se]}let ne=class extends y.List{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe){const Be=typeof Se.horizontalScrolling<\"u\"?Se.horizontalScrolling:!!Ae.getValue(I),[De,Ie]=xe.invokeFunction(ae,Se);super(ce,pe,ve,Ce,{keyboardSupport:!1,...De,horizontalScrolling:Be}),this.disposables.add(Ie),this.contextKeyService=m(_e,this),this.disposables.add(C(this.contextKeyService,this)),this.listSupportsMultiSelect=e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(Se.multipleSelectionSupport!==!1),e.WorkbenchListSelectionNavigation.bindTo(this.contextKeyService).set(!!Se.selectionNavigation),this.listHasSelectionOrFocus=e.WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService),this.listDoubleSelection=e.WorkbenchListDoubleSelection.bindTo(this.contextKeyService),this.listMultiSelection=e.WorkbenchListMultiSelection.bindTo(this.contextKeyService),this.horizontalScrolling=Se.horizontalScrolling,this._useAltAsMultipleSelectionModifier=q(Ae),this.disposables.add(this.contextKeyService),this.disposables.add(Ee.register(this)),this.updateStyles(Se.overrideStyles),this.disposables.add(this.onDidChangeSelection(()=>{const be=this.getSelection(),Ne=this.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.listHasSelectionOrFocus.set(be.length>0||Ne.length>0),this.listMultiSelection.set(be.length>1),this.listDoubleSelection.set(be.length===2)})})),this.disposables.add(this.onDidChangeFocus(()=>{const be=this.getSelection(),Ne=this.getFocus();this.listHasSelectionOrFocus.set(be.length>0||Ne.length>0)})),this.disposables.add(Ae.onDidChangeConfiguration(be=>{be.affectsConfiguration(w)&&(this._useAltAsMultipleSelectionModifier=q(Ae));let Ne={};if(be.affectsConfiguration(I)&&this.horizontalScrolling===void 0){const Pe=!!Ae.getValue(I);Ne={...Ne,horizontalScrolling:Pe}}if(be.affectsConfiguration(N)){const Pe=!!Ae.getValue(N);Ne={...Ne,scrollByPage:Pe}}if(be.affectsConfiguration(O)){const Pe=!!Ae.getValue(O);Ne={...Ne,smoothScrolling:Pe}}if(be.affectsConfiguration(B)){const Pe=Ae.getValue(B);Ne={...Ne,mouseWheelScrollSensitivity:Pe}}if(be.affectsConfiguration(W)){const Pe=Ae.getValue(W);Ne={...Ne,fastScrollSensitivity:Pe}}Object.keys(Ne).length>0&&this.updateOptions(Ne)})),this.navigator=new re(this,{configurationService:Ae,...Se}),this.disposables.add(this.navigator)}updateOptions(ce){super.updateOptions(ce),ce.overrideStyles!==void 0&&this.updateStyles(ce.overrideStyles),ce.multipleSelectionSupport!==void 0&&this.listSupportsMultiSelect.set(!!ce.multipleSelectionSupport)}updateStyles(ce){this.style(ce?(0,l.getListStyles)(ce):l.defaultListStyles)}};e.WorkbenchList=ne,e.WorkbenchList=ne=ke([ge(5,r.IContextKeyService),ge(6,e.IListService),ge(7,n.IConfigurationService),ge(8,c.IInstantiationService)],ne);let $=class extends k.PagedList{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe){const Be=typeof Se.horizontalScrolling<\"u\"?Se.horizontalScrolling:!!Ae.getValue(I),[De,Ie]=xe.invokeFunction(ae,Se);super(ce,pe,ve,Ce,{keyboardSupport:!1,...De,horizontalScrolling:Be}),this.disposables=new a.DisposableStore,this.disposables.add(Ie),this.contextKeyService=m(_e,this),this.disposables.add(C(this.contextKeyService,this.widget)),this.horizontalScrolling=Se.horizontalScrolling,this.listSupportsMultiSelect=e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(Se.multipleSelectionSupport!==!1),e.WorkbenchListSelectionNavigation.bindTo(this.contextKeyService).set(!!Se.selectionNavigation),this._useAltAsMultipleSelectionModifier=q(Ae),this.disposables.add(this.contextKeyService),this.disposables.add(Ee.register(this)),this.updateStyles(Se.overrideStyles),this.disposables.add(Ae.onDidChangeConfiguration(be=>{be.affectsConfiguration(w)&&(this._useAltAsMultipleSelectionModifier=q(Ae));let Ne={};if(be.affectsConfiguration(I)&&this.horizontalScrolling===void 0){const Pe=!!Ae.getValue(I);Ne={...Ne,horizontalScrolling:Pe}}if(be.affectsConfiguration(N)){const Pe=!!Ae.getValue(N);Ne={...Ne,scrollByPage:Pe}}if(be.affectsConfiguration(O)){const Pe=!!Ae.getValue(O);Ne={...Ne,smoothScrolling:Pe}}if(be.affectsConfiguration(B)){const Pe=Ae.getValue(B);Ne={...Ne,mouseWheelScrollSensitivity:Pe}}if(be.affectsConfiguration(W)){const Pe=Ae.getValue(W);Ne={...Ne,fastScrollSensitivity:Pe}}Object.keys(Ne).length>0&&this.updateOptions(Ne)})),this.navigator=new re(this,{configurationService:Ae,...Se}),this.disposables.add(this.navigator)}updateOptions(ce){super.updateOptions(ce),ce.overrideStyles!==void 0&&this.updateStyles(ce.overrideStyles),ce.multipleSelectionSupport!==void 0&&this.listSupportsMultiSelect.set(!!ce.multipleSelectionSupport)}updateStyles(ce){this.style(ce?(0,l.getListStyles)(ce):l.defaultListStyles)}dispose(){this.disposables.dispose(),super.dispose()}};e.WorkbenchPagedList=$,e.WorkbenchPagedList=$=ke([ge(5,r.IContextKeyService),ge(6,e.IListService),ge(7,n.IConfigurationService),ge(8,c.IInstantiationService)],$);let J=class extends E.Table{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be){const De=typeof _e.horizontalScrolling<\"u\"?_e.horizontalScrolling:!!xe.getValue(I),[Ie,fe]=Be.invokeFunction(ae,_e);super(ce,pe,ve,Ce,Se,{keyboardSupport:!1,...Ie,horizontalScrolling:De}),this.disposables.add(fe),this.contextKeyService=m(Ee,this),this.disposables.add(C(this.contextKeyService,this)),this.listSupportsMultiSelect=e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(_e.multipleSelectionSupport!==!1),e.WorkbenchListSelectionNavigation.bindTo(this.contextKeyService).set(!!_e.selectionNavigation),this.listHasSelectionOrFocus=e.WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService),this.listDoubleSelection=e.WorkbenchListDoubleSelection.bindTo(this.contextKeyService),this.listMultiSelection=e.WorkbenchListMultiSelection.bindTo(this.contextKeyService),this.horizontalScrolling=_e.horizontalScrolling,this._useAltAsMultipleSelectionModifier=q(xe),this.disposables.add(this.contextKeyService),this.disposables.add(Ae.register(this)),this.updateStyles(_e.overrideStyles),this.disposables.add(this.onDidChangeSelection(()=>{const Ne=this.getSelection(),Pe=this.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.listHasSelectionOrFocus.set(Ne.length>0||Pe.length>0),this.listMultiSelection.set(Ne.length>1),this.listDoubleSelection.set(Ne.length===2)})})),this.disposables.add(this.onDidChangeFocus(()=>{const Ne=this.getSelection(),Pe=this.getFocus();this.listHasSelectionOrFocus.set(Ne.length>0||Pe.length>0)})),this.disposables.add(xe.onDidChangeConfiguration(Ne=>{Ne.affectsConfiguration(w)&&(this._useAltAsMultipleSelectionModifier=q(xe));let Pe={};if(Ne.affectsConfiguration(I)&&this.horizontalScrolling===void 0){const ze=!!xe.getValue(I);Pe={...Pe,horizontalScrolling:ze}}if(Ne.affectsConfiguration(N)){const ze=!!xe.getValue(N);Pe={...Pe,scrollByPage:ze}}if(Ne.affectsConfiguration(O)){const ze=!!xe.getValue(O);Pe={...Pe,smoothScrolling:ze}}if(Ne.affectsConfiguration(B)){const ze=xe.getValue(B);Pe={...Pe,mouseWheelScrollSensitivity:ze}}if(Ne.affectsConfiguration(W)){const ze=xe.getValue(W);Pe={...Pe,fastScrollSensitivity:ze}}Object.keys(Pe).length>0&&this.updateOptions(Pe)})),this.navigator=new de(this,{configurationService:xe,..._e}),this.disposables.add(this.navigator)}updateOptions(ce){super.updateOptions(ce),ce.overrideStyles!==void 0&&this.updateStyles(ce.overrideStyles),ce.multipleSelectionSupport!==void 0&&this.listSupportsMultiSelect.set(!!ce.multipleSelectionSupport)}updateStyles(ce){this.style(ce?(0,l.getListStyles)(ce):l.defaultListStyles)}dispose(){this.disposables.dispose(),super.dispose()}};e.WorkbenchTable=J,e.WorkbenchTable=J=ke([ge(6,r.IContextKeyService),ge(7,e.IListService),ge(8,n.IConfigurationService),ge(9,c.IInstantiationService)],J);class Q extends a.Disposable{constructor(ce,pe){var ve;super(),this.widget=ce,this._onDidOpen=this._register(new b.Emitter),this.onDidOpen=this._onDidOpen.event,this._register(b.Event.filter(this.widget.onDidChangeSelection,Ce=>(0,L.isKeyboardEvent)(Ce.browserEvent))(Ce=>this.onSelectionFromKeyboard(Ce))),this._register(this.widget.onPointer(Ce=>this.onPointer(Ce.element,Ce.browserEvent))),this._register(this.widget.onMouseDblClick(Ce=>this.onMouseDblClick(Ce.element,Ce.browserEvent))),typeof pe?.openOnSingleClick!=\"boolean\"&&pe?.configurationService?(this.openOnSingleClick=pe?.configurationService.getValue(D)!==\"doubleClick\",this._register(pe?.configurationService.onDidChangeConfiguration(Ce=>{Ce.affectsConfiguration(D)&&(this.openOnSingleClick=pe?.configurationService.getValue(D)!==\"doubleClick\")}))):this.openOnSingleClick=(ve=pe?.openOnSingleClick)!==null&&ve!==void 0?ve:!0}onSelectionFromKeyboard(ce){if(ce.elements.length!==1)return;const pe=ce.browserEvent,ve=typeof pe.preserveFocus==\"boolean\"?pe.preserveFocus:!0,Ce=typeof pe.pinned==\"boolean\"?pe.pinned:!ve,Se=!1;this._open(this.getSelectedElement(),ve,Ce,Se,ce.browserEvent)}onPointer(ce,pe){if(!this.openOnSingleClick||pe.detail===2)return;const Ce=pe.button===1,Se=!0,_e=Ce,Ee=pe.ctrlKey||pe.metaKey||pe.altKey;this._open(ce,Se,_e,Ee,pe)}onMouseDblClick(ce,pe){if(!pe)return;const ve=pe.target;if(ve.classList.contains(\"monaco-tl-twistie\")||ve.classList.contains(\"monaco-icon-label\")&&ve.classList.contains(\"folder-icon\")&&pe.offsetX<16)return;const Se=!1,_e=!0,Ee=pe.ctrlKey||pe.metaKey||pe.altKey;this._open(ce,Se,_e,Ee,pe)}_open(ce,pe,ve,Ce,Se){ce&&this._onDidOpen.fire({editorOptions:{preserveFocus:pe,pinned:ve,revealIfVisible:!0},sideBySide:Ce,element:ce,browserEvent:Se})}}class re extends Q{constructor(ce,pe){super(ce,pe),this.widget=ce}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class de extends Q{constructor(ce,pe){super(ce,pe)}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class he extends Q{constructor(ce,pe){super(ce,pe)}getSelectedElement(){var ce;return(ce=this.widget.getSelection()[0])!==null&&ce!==void 0?ce:void 0}}function me(ue){let ce=!1;return pe=>{if(pe.toKeyCodeChord().isModifierKey())return!1;if(ce)return ce=!1,!1;const ve=ue.softDispatch(pe,pe.target);return ve.kind===1?(ce=!0,!1):(ce=!1,ve.kind===0)}}let X=class extends v.ObjectTree{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe){const{options:Be,getTypeNavigationMode:De,disposable:Ie}=_e.invokeFunction(Z,Se);super(ce,pe,ve,Ce,Be),this.disposables.add(Ie),this.internals=new ee(this,Se,De,Se.overrideStyles,Ee,Ae,xe),this.disposables.add(this.internals)}updateOptions(ce){super.updateOptions(ce),this.internals.updateOptions(ce)}};e.WorkbenchObjectTree=X,e.WorkbenchObjectTree=X=ke([ge(5,c.IInstantiationService),ge(6,r.IContextKeyService),ge(7,e.IListService),ge(8,n.IConfigurationService)],X);let U=class extends v.CompressibleObjectTree{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe){const{options:Be,getTypeNavigationMode:De,disposable:Ie}=_e.invokeFunction(Z,Se);super(ce,pe,ve,Ce,Be),this.disposables.add(Ie),this.internals=new ee(this,Se,De,Se.overrideStyles,Ee,Ae,xe),this.disposables.add(this.internals)}updateOptions(ce={}){super.updateOptions(ce),ce.overrideStyles&&this.internals.updateStyleOverrides(ce.overrideStyles),this.internals.updateOptions(ce)}};e.WorkbenchCompressibleObjectTree=U,e.WorkbenchCompressibleObjectTree=U=ke([ge(5,c.IInstantiationService),ge(6,r.IContextKeyService),ge(7,e.IListService),ge(8,n.IConfigurationService)],U);let G=class extends _.DataTree{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be){const{options:De,getTypeNavigationMode:Ie,disposable:fe}=Ee.invokeFunction(Z,_e);super(ce,pe,ve,Ce,Se,De),this.disposables.add(fe),this.internals=new ee(this,_e,Ie,_e.overrideStyles,Ae,xe,Be),this.disposables.add(this.internals)}updateOptions(ce={}){super.updateOptions(ce),ce.overrideStyles!==void 0&&this.internals.updateStyleOverrides(ce.overrideStyles),this.internals.updateOptions(ce)}};e.WorkbenchDataTree=G,e.WorkbenchDataTree=G=ke([ge(6,c.IInstantiationService),ge(7,r.IContextKeyService),ge(8,e.IListService),ge(9,n.IConfigurationService)],G);let z=class extends p.AsyncDataTree{get onDidOpen(){return this.internals.onDidOpen}constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be){const{options:De,getTypeNavigationMode:Ie,disposable:fe}=Ee.invokeFunction(Z,_e);super(ce,pe,ve,Ce,Se,De),this.disposables.add(fe),this.internals=new ee(this,_e,Ie,_e.overrideStyles,Ae,xe,Be),this.disposables.add(this.internals)}updateOptions(ce={}){super.updateOptions(ce),ce.overrideStyles&&this.internals.updateStyleOverrides(ce.overrideStyles),this.internals.updateOptions(ce)}};e.WorkbenchAsyncDataTree=z,e.WorkbenchAsyncDataTree=z=ke([ge(6,c.IInstantiationService),ge(7,r.IContextKeyService),ge(8,e.IListService),ge(9,n.IConfigurationService)],z);let H=class extends p.CompressibleAsyncDataTree{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be,De){const{options:Ie,getTypeNavigationMode:fe,disposable:be}=Ae.invokeFunction(Z,Ee);super(ce,pe,ve,Ce,Se,_e,Ie),this.disposables.add(be),this.internals=new ee(this,Ee,fe,Ee.overrideStyles,xe,Be,De),this.disposables.add(this.internals)}updateOptions(ce){super.updateOptions(ce),this.internals.updateOptions(ce)}};e.WorkbenchCompressibleAsyncDataTree=H,e.WorkbenchCompressibleAsyncDataTree=H=ke([ge(7,c.IInstantiationService),ge(8,r.IContextKeyService),ge(9,e.IListService),ge(10,n.IConfigurationService)],H);function Y(ue){const ce=ue.getValue(T);if(ce===\"highlight\")return S.TreeFindMode.Highlight;if(ce===\"filter\")return S.TreeFindMode.Filter;const pe=ue.getValue(P);if(pe===\"simple\"||pe===\"highlight\")return S.TreeFindMode.Highlight;if(pe===\"filter\")return S.TreeFindMode.Filter}function j(ue){const ce=ue.getValue(M);if(ce===\"fuzzy\")return S.TreeFindMatchType.Fuzzy;if(ce===\"contiguous\")return S.TreeFindMatchType.Contiguous}function Z(ue,ce){var pe;const ve=ue.get(n.IConfigurationService),Ce=ue.get(f.IContextViewService),Se=ue.get(r.IContextKeyService),_e=ue.get(c.IInstantiationService),Ee=()=>{const fe=Se.getContextKeyValue(g);if(fe===\"automatic\")return y.TypeNavigationMode.Automatic;if(fe===\"trigger\"||Se.getContextKeyValue(h)===!1)return y.TypeNavigationMode.Trigger;const Ne=ve.getValue(A);if(Ne===\"automatic\")return y.TypeNavigationMode.Automatic;if(Ne===\"trigger\")return y.TypeNavigationMode.Trigger},Ae=ce.horizontalScrolling!==void 0?ce.horizontalScrolling:!!ve.getValue(I),[xe,Be]=_e.invokeFunction(ae,ce),De=ce.paddingBottom,Ie=ce.renderIndentGuides!==void 0?ce.renderIndentGuides:ve.getValue(x);return{getTypeNavigationMode:Ee,disposable:Be,options:{keyboardSupport:!1,...xe,indent:typeof ve.getValue(R)==\"number\"?ve.getValue(R):void 0,renderIndentGuides:Ie,smoothScrolling:!!ve.getValue(O),defaultFindMode:Y(ve),defaultFindMatchType:j(ve),horizontalScrolling:Ae,scrollByPage:!!ve.getValue(N),paddingBottom:De,hideTwistiesOfChildlessElements:ce.hideTwistiesOfChildlessElements,expandOnlyOnTwistieClick:(pe=ce.expandOnlyOnTwistieClick)!==null&&pe!==void 0?pe:ve.getValue(V)===\"doubleClick\",contextViewProvider:Ce,findWidgetStyles:l.defaultFindWidgetStyles,enableStickyScroll:!!ve.getValue(K),stickyScrollMaxItemCount:Number(ve.getValue(F))}}}let ee=class{get onDidOpen(){return this.navigator.onDidOpen}constructor(ce,pe,ve,Ce,Se,_e,Ee){var Ae;this.tree=ce,this.disposables=[],this.contextKeyService=m(Se,ce),this.disposables.push(C(this.contextKeyService,ce)),this.listSupportsMultiSelect=e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(pe.multipleSelectionSupport!==!1),e.WorkbenchListSelectionNavigation.bindTo(this.contextKeyService).set(!!pe.selectionNavigation),this.listSupportFindWidget=e.WorkbenchListSupportsFind.bindTo(this.contextKeyService),this.listSupportFindWidget.set((Ae=pe.findWidgetEnabled)!==null&&Ae!==void 0?Ae:!0),this.hasSelectionOrFocus=e.WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService),this.hasDoubleSelection=e.WorkbenchListDoubleSelection.bindTo(this.contextKeyService),this.hasMultiSelection=e.WorkbenchListMultiSelection.bindTo(this.contextKeyService),this.treeElementCanCollapse=e.WorkbenchTreeElementCanCollapse.bindTo(this.contextKeyService),this.treeElementHasParent=e.WorkbenchTreeElementHasParent.bindTo(this.contextKeyService),this.treeElementCanExpand=e.WorkbenchTreeElementCanExpand.bindTo(this.contextKeyService),this.treeElementHasChild=e.WorkbenchTreeElementHasChild.bindTo(this.contextKeyService),this.treeFindOpen=e.WorkbenchTreeFindOpen.bindTo(this.contextKeyService),this.treeStickyScrollFocused=e.WorkbenchTreeStickyScrollFocused.bindTo(this.contextKeyService),this._useAltAsMultipleSelectionModifier=q(Ee),this.updateStyleOverrides(Ce);const Be=()=>{const Ie=ce.getFocus()[0];if(!Ie)return;const fe=ce.getNode(Ie);this.treeElementCanCollapse.set(fe.collapsible&&!fe.collapsed),this.treeElementHasParent.set(!!ce.getParentElement(Ie)),this.treeElementCanExpand.set(fe.collapsible&&fe.collapsed),this.treeElementHasChild.set(!!ce.getFirstElementChild(Ie))},De=new Set;De.add(g),De.add(h),this.disposables.push(this.contextKeyService,_e.register(ce),ce.onDidChangeSelection(()=>{const Ie=ce.getSelection(),fe=ce.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.hasSelectionOrFocus.set(Ie.length>0||fe.length>0),this.hasMultiSelection.set(Ie.length>1),this.hasDoubleSelection.set(Ie.length===2)})}),ce.onDidChangeFocus(()=>{const Ie=ce.getSelection(),fe=ce.getFocus();this.hasSelectionOrFocus.set(Ie.length>0||fe.length>0),Be()}),ce.onDidChangeCollapseState(Be),ce.onDidChangeModel(Be),ce.onDidChangeFindOpenState(Ie=>this.treeFindOpen.set(Ie)),ce.onDidChangeStickyScrollFocused(Ie=>this.treeStickyScrollFocused.set(Ie)),Ee.onDidChangeConfiguration(Ie=>{let fe={};if(Ie.affectsConfiguration(w)&&(this._useAltAsMultipleSelectionModifier=q(Ee)),Ie.affectsConfiguration(R)){const be=Ee.getValue(R);fe={...fe,indent:be}}if(Ie.affectsConfiguration(x)&&pe.renderIndentGuides===void 0){const be=Ee.getValue(x);fe={...fe,renderIndentGuides:be}}if(Ie.affectsConfiguration(O)){const be=!!Ee.getValue(O);fe={...fe,smoothScrolling:be}}if(Ie.affectsConfiguration(T)||Ie.affectsConfiguration(P)){const be=Y(Ee);fe={...fe,defaultFindMode:be}}if(Ie.affectsConfiguration(A)||Ie.affectsConfiguration(P)){const be=ve();fe={...fe,typeNavigationMode:be}}if(Ie.affectsConfiguration(M)){const be=j(Ee);fe={...fe,defaultFindMatchType:be}}if(Ie.affectsConfiguration(I)&&pe.horizontalScrolling===void 0){const be=!!Ee.getValue(I);fe={...fe,horizontalScrolling:be}}if(Ie.affectsConfiguration(N)){const be=!!Ee.getValue(N);fe={...fe,scrollByPage:be}}if(Ie.affectsConfiguration(V)&&pe.expandOnlyOnTwistieClick===void 0&&(fe={...fe,expandOnlyOnTwistieClick:Ee.getValue(V)===\"doubleClick\"}),Ie.affectsConfiguration(K)){const be=Ee.getValue(K);fe={...fe,enableStickyScroll:be}}if(Ie.affectsConfiguration(F)){const be=Math.max(1,Ee.getValue(F));fe={...fe,stickyScrollMaxItemCount:be}}if(Ie.affectsConfiguration(B)){const be=Ee.getValue(B);fe={...fe,mouseWheelScrollSensitivity:be}}if(Ie.affectsConfiguration(W)){const be=Ee.getValue(W);fe={...fe,fastScrollSensitivity:be}}Object.keys(fe).length>0&&ce.updateOptions(fe)}),this.contextKeyService.onDidChangeContext(Ie=>{Ie.affectsSome(De)&&ce.updateOptions({typeNavigationMode:ve()})})),this.navigator=new he(ce,{configurationService:Ee,...pe}),this.disposables.push(this.navigator)}updateOptions(ce){ce.multipleSelectionSupport!==void 0&&this.listSupportsMultiSelect.set(!!ce.multipleSelectionSupport)}updateStyleOverrides(ce){this.tree.style(ce?(0,l.getListStyles)(ce):l.defaultListStyles)}dispose(){this.disposables=(0,a.dispose)(this.disposables)}};ee=ke([ge(4,r.IContextKeyService),ge(5,e.IListService),ge(6,n.IConfigurationService)],ee),s.Registry.as(t.Extensions.Configuration).registerConfiguration({id:\"workbench\",order:7,title:(0,i.localize)(0,null),type:\"object\",properties:{[w]:{type:\"string\",enum:[\"ctrlCmd\",\"alt\"],markdownEnumDescriptions:[(0,i.localize)(1,null),(0,i.localize)(2,null)],default:\"ctrlCmd\",description:(0,i.localize)(3,null)},[D]:{type:\"string\",enum:[\"singleClick\",\"doubleClick\"],default:\"singleClick\",description:(0,i.localize)(4,null)},[I]:{type:\"boolean\",default:!1,description:(0,i.localize)(5,null)},[N]:{type:\"boolean\",default:!1,description:(0,i.localize)(6,null)},[R]:{type:\"number\",default:8,minimum:4,maximum:40,description:(0,i.localize)(7,null)},[x]:{type:\"string\",enum:[\"none\",\"onHover\",\"always\"],default:\"onHover\",description:(0,i.localize)(8,null)},[O]:{type:\"boolean\",default:!1,description:(0,i.localize)(9,null)},[B]:{type:\"number\",default:1,markdownDescription:(0,i.localize)(10,null)},[W]:{type:\"number\",default:5,markdownDescription:(0,i.localize)(11,null)},[T]:{type:\"string\",enum:[\"highlight\",\"filter\"],enumDescriptions:[(0,i.localize)(12,null),(0,i.localize)(13,null)],default:\"highlight\",description:(0,i.localize)(14,null)},[P]:{type:\"string\",enum:[\"simple\",\"highlight\",\"filter\"],enumDescriptions:[(0,i.localize)(15,null),(0,i.localize)(16,null),(0,i.localize)(17,null)],default:\"highlight\",description:(0,i.localize)(18,null),deprecated:!0,deprecationMessage:(0,i.localize)(19,null)},[M]:{type:\"string\",enum:[\"fuzzy\",\"contiguous\"],enumDescriptions:[(0,i.localize)(20,null),(0,i.localize)(21,null)],default:\"fuzzy\",description:(0,i.localize)(22,null)},[V]:{type:\"string\",enum:[\"singleClick\",\"doubleClick\"],default:\"singleClick\",description:(0,i.localize)(23,null)},[K]:{type:\"boolean\",default:!0,description:(0,i.localize)(24,null)},[F]:{type:\"number\",minimum:1,default:7,markdownDescription:(0,i.localize)(25,null)},[A]:{type:\"string\",enum:[\"automatic\",\"trigger\"],default:\"automatic\",markdownDescription:(0,i.localize)(26,null)}}})}),define(se[82],oe([1,0,14,26,28,6,20,22,753,245,37]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.spinningLoading=e.syncing=e.gotoNextLocation=e.gotoPreviousLocation=e.widgetClose=e.iconsSchemaId=e.getIconRegistry=e.registerIcon=e.IconFontDefinition=e.IconContribution=e.Extensions=void 0,e.Extensions={IconContribution:\"base.contributions.icons\"};var a;(function(s){function l(o,g){let h=o.defaults;for(;y.ThemeIcon.isThemeIcon(h);){const m=t.getIcon(h.id);if(!m)return;h=m.defaults}return h}s.getDefinition=l})(a||(e.IconContribution=a={}));var i;(function(s){function l(g){return{weight:g.weight,style:g.style,src:g.src.map(h=>({format:h.format,location:h.location.toString()}))}}s.toJSONObject=l;function o(g){const h=m=>(0,S.isString)(m)?m:void 0;if(g&&Array.isArray(g.src)&&g.src.every(m=>(0,S.isString)(m.format)&&(0,S.isString)(m.location)))return{weight:h(g.weight),style:h(g.style),src:g.src.map(m=>({format:m.format,location:p.URI.parse(m.location)}))}}s.fromJSONObject=o})(i||(e.IconFontDefinition=i={}));class n{constructor(){this._onDidChange=new E.Emitter,this.onDidChange=this._onDidChange.event,this.iconSchema={definitions:{icons:{type:\"object\",properties:{fontId:{type:\"string\",description:(0,_.localize)(0,null)},fontCharacter:{type:\"string\",description:(0,_.localize)(1,null)}},additionalProperties:!1,defaultSnippets:[{body:{fontCharacter:\"\\\\\\\\e030\"}}]}},type:\"object\",properties:{}},this.iconReferenceSchema={type:\"string\",pattern:`^${y.ThemeIcon.iconNameExpression}$`,enum:[],enumDescriptions:[]},this.iconsById={},this.iconFontsById={}}registerIcon(l,o,g,h){const m=this.iconsById[l];if(m){if(g&&!m.description){m.description=g,this.iconSchema.properties[l].markdownDescription=`${g} $(${l})`;const D=this.iconReferenceSchema.enum.indexOf(l);D!==-1&&(this.iconReferenceSchema.enumDescriptions[D]=g),this._onDidChange.fire()}return m}const C={id:l,description:g,defaults:o,deprecationMessage:h};this.iconsById[l]=C;const w={$ref:\"#/definitions/icons\"};return h&&(w.deprecationMessage=h),g&&(w.markdownDescription=`${g}: $(${l})`),this.iconSchema.properties[l]=w,this.iconReferenceSchema.enum.push(l),this.iconReferenceSchema.enumDescriptions.push(g||\"\"),this._onDidChange.fire(),{id:l}}getIcons(){return Object.keys(this.iconsById).map(l=>this.iconsById[l])}getIcon(l){return this.iconsById[l]}getIconSchema(){return this.iconSchema}toString(){const l=(m,C)=>m.id.localeCompare(C.id),o=m=>{for(;y.ThemeIcon.isThemeIcon(m.defaults);)m=this.iconsById[m.defaults.id];return`codicon codicon-${m?m.id:\"\"}`},g=[];g.push(\"| preview     | identifier                        | default codicon ID                | description\"),g.push(\"| ----------- | --------------------------------- | --------------------------------- | --------------------------------- |\");const h=Object.keys(this.iconsById).map(m=>this.iconsById[m]);for(const m of h.filter(C=>!!C.description).sort(l))g.push(`|<i class=\"${o(m)}\"></i>|${m.id}|${y.ThemeIcon.isThemeIcon(m.defaults)?m.defaults.id:m.id}|${m.description||\"\"}|`);g.push(\"| preview     | identifier                        \"),g.push(\"| ----------- | --------------------------------- |\");for(const m of h.filter(C=>!y.ThemeIcon.isThemeIcon(C.defaults)).sort(l))g.push(`|<i class=\"${o(m)}\"></i>|${m.id}|`);return g.join(`\n`)}}const t=new n;b.Registry.add(e.Extensions.IconContribution,t);function r(s,l,o,g){return t.registerIcon(s,l,o,g)}e.registerIcon=r;function u(){return t}e.getIconRegistry=u;function f(){const s=(0,k.getCodiconFontCharacters)();for(const l in s){const o=\"\\\\\"+s[l].toString(16);t.registerIcon(l,{fontCharacter:o})}}f(),e.iconsSchemaId=\"vscode://schemas/icons\";const c=b.Registry.as(v.Extensions.JSONContribution);c.registerSchema(e.iconsSchemaId,t.getIconSchema());const d=new L.RunOnceScheduler(()=>c.notifySchemaChanged(e.iconsSchemaId),200);t.onDidChange(()=>{d.isScheduled()||d.schedule()}),e.widgetClose=r(\"widget-close\",k.Codicon.close,(0,_.localize)(2,null)),e.gotoPreviousLocation=r(\"goto-previous-location\",k.Codicon.arrowUp,(0,_.localize)(3,null)),e.gotoNextLocation=r(\"goto-next-location\",k.Codicon.arrowDown,(0,_.localize)(4,null)),e.syncing=y.ThemeIcon.modify(k.Codicon.sync,\"spin\"),e.spinningLoading=y.ThemeIcon.modify(k.Codicon.loading,\"spin\")}),define(se[841],oe([1,0,7,93,78,77,42,13,26,2,35,28,72,87,36,62,73,10,5,112,43,94,120,86,622,122,8,82,447]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AccessibleDiffViewer=void 0;const D=(0,w.registerIcon)(\"diff-review-insert\",_.Codicon.add,(0,h.localize)(0,null)),I=(0,w.registerIcon)(\"diff-review-remove\",_.Codicon.remove,(0,h.localize)(1,null)),T=(0,w.registerIcon)(\"diff-review-close\",_.Codicon.close,(0,h.localize)(2,null));let A=class extends v.Disposable{constructor(q,ie,ae,ne,$,J,Q,re,de){super(),this._parentNode=q,this._visible=ie,this._setVisible=ae,this._canClose=ne,this._width=$,this._height=J,this._diffs=Q,this._editors=re,this._instantiationService=de,this._state=(0,b.derivedWithStore)(this,(he,me)=>{const X=this._visible.read(he);if(this._parentNode.style.visibility=X?\"visible\":\"hidden\",!X)return null;const U=me.add(this._instantiationService.createInstance(P,this._diffs,this._editors,this._setVisible,this._canClose)),G=me.add(this._instantiationService.createInstance(K,this._parentNode,U,this._width,this._height,this._editors));return{model:U,view:G}}).recomputeInitiallyAndOnChange(this._store)}next(){(0,b.transaction)(q=>{const ie=this._visible.get();this._setVisible(!0,q),ie&&this._state.get().model.nextGroup(q)})}prev(){(0,b.transaction)(q=>{this._setVisible(!0,q),this._state.get().model.previousGroup(q)})}close(){(0,b.transaction)(q=>{this._setVisible(!1,q)})}};e.AccessibleDiffViewer=A,A._ttPolicy=(0,k.createTrustedTypesPolicy)(\"diffReview\",{createHTML:F=>F}),e.AccessibleDiffViewer=A=ke([ge(8,C.IInstantiationService)],A);let P=class extends v.Disposable{constructor(q,ie,ae,ne,$){super(),this._diffs=q,this._editors=ie,this._setVisible=ae,this.canClose=ne,this._audioCueService=$,this._groups=(0,b.observableValue)(this,[]),this._currentGroupIdx=(0,b.observableValue)(this,0),this._currentElementIdx=(0,b.observableValue)(this,0),this.groups=this._groups,this.currentGroup=this._currentGroupIdx.map((J,Q)=>this._groups.read(Q)[J]),this.currentGroupIndex=this._currentGroupIdx,this.currentElement=this._currentElementIdx.map((J,Q)=>{var re;return(re=this.currentGroup.read(Q))===null||re===void 0?void 0:re.lines[J]}),this._register((0,b.autorun)(J=>{const Q=this._diffs.read(J);if(!Q){this._groups.set([],void 0);return}const re=M(Q,this._editors.original.getModel().getLineCount(),this._editors.modified.getModel().getLineCount());(0,b.transaction)(de=>{const he=this._editors.modified.getPosition();if(he){const me=re.findIndex(X=>he?.lineNumber<X.range.modified.endLineNumberExclusive);me!==-1&&this._currentGroupIdx.set(me,de)}this._groups.set(re,de)})})),this._register((0,b.autorun)(J=>{const Q=this.currentElement.read(J);Q?.type===R.Deleted?this._audioCueService.playAudioCue(m.AudioCue.diffLineDeleted,{source:\"accessibleDiffViewer.currentElementChanged\"}):Q?.type===R.Added&&this._audioCueService.playAudioCue(m.AudioCue.diffLineInserted,{source:\"accessibleDiffViewer.currentElementChanged\"})})),this._register((0,b.autorun)(J=>{var Q;const re=this.currentElement.read(J);if(re&&re.type!==R.Header){const de=(Q=re.modifiedLineNumber)!==null&&Q!==void 0?Q:re.diff.modified.startLineNumber;this._editors.modified.setSelection(c.Range.fromPositions(new f.Position(de,1)))}}))}_goToGroupDelta(q,ie){const ae=this.groups.get();!ae||ae.length<=1||(0,b.subtransaction)(ie,ne=>{this._currentGroupIdx.set(u.OffsetRange.ofLength(ae.length).clipCyclic(this._currentGroupIdx.get()+q),ne),this._currentElementIdx.set(0,ne)})}nextGroup(q){this._goToGroupDelta(1,q)}previousGroup(q){this._goToGroupDelta(-1,q)}_goToLineDelta(q){const ie=this.currentGroup.get();!ie||ie.lines.length<=1||(0,b.transaction)(ae=>{this._currentElementIdx.set(u.OffsetRange.ofLength(ie.lines.length).clip(this._currentElementIdx.get()+q),ae)})}goToNextLine(){this._goToLineDelta(1)}goToPreviousLine(){this._goToLineDelta(-1)}goToLine(q){const ie=this.currentGroup.get();if(!ie)return;const ae=ie.lines.indexOf(q);ae!==-1&&(0,b.transaction)(ne=>{this._currentElementIdx.set(ae,ne)})}revealCurrentElementInEditor(){this._setVisible(!1,void 0);const q=this.currentElement.get();q&&(q.type===R.Deleted?(this._editors.original.setSelection(c.Range.fromPositions(new f.Position(q.originalLineNumber,1))),this._editors.original.revealLine(q.originalLineNumber),this._editors.original.focus()):(q.type!==R.Header&&(this._editors.modified.setSelection(c.Range.fromPositions(new f.Position(q.modifiedLineNumber,1))),this._editors.modified.revealLine(q.modifiedLineNumber)),this._editors.modified.focus()))}close(){this._setVisible(!1,void 0),this._editors.modified.focus()}};P=ke([ge(4,m.IAudioCueService)],P);const N=3;function M(F,q,ie){const ae=[];for(const ne of(0,p.groupAdjacentBy)(F,($,J)=>J.modified.startLineNumber-$.modified.endLineNumberExclusive<2*N)){const $=[];$.push(new O);const J=new r.LineRange(Math.max(1,ne[0].original.startLineNumber-N),Math.min(ne[ne.length-1].original.endLineNumberExclusive+N,q+1)),Q=new r.LineRange(Math.max(1,ne[0].modified.startLineNumber-N),Math.min(ne[ne.length-1].modified.endLineNumberExclusive+N,ie+1));(0,p.forEachAdjacent)(ne,(he,me)=>{const X=new r.LineRange(he?he.original.endLineNumberExclusive:J.startLineNumber,me?me.original.startLineNumber:J.endLineNumberExclusive),U=new r.LineRange(he?he.modified.endLineNumberExclusive:Q.startLineNumber,me?me.modified.startLineNumber:Q.endLineNumberExclusive);X.forEach(G=>{$.push(new V(G,U.startLineNumber+(G-X.startLineNumber)))}),me&&(me.original.forEach(G=>{$.push(new B(me,G))}),me.modified.forEach(G=>{$.push(new W(me,G))}))});const re=ne[0].modified.join(ne[ne.length-1].modified),de=ne[0].original.join(ne[ne.length-1].original);ae.push(new x(new d.LineRangeMapping(re,de),$))}return ae}var R;(function(F){F[F.Header=0]=\"Header\",F[F.Unchanged=1]=\"Unchanged\",F[F.Deleted=2]=\"Deleted\",F[F.Added=3]=\"Added\"})(R||(R={}));class x{constructor(q,ie){this.range=q,this.lines=ie}}class O{constructor(){this.type=R.Header}}class B{constructor(q,ie){this.diff=q,this.originalLineNumber=ie,this.type=R.Deleted,this.modifiedLineNumber=void 0}}class W{constructor(q,ie){this.diff=q,this.modifiedLineNumber=ie,this.type=R.Added,this.originalLineNumber=void 0}}class V{constructor(q,ie){this.originalLineNumber=q,this.modifiedLineNumber=ie,this.type=R.Unchanged}}let K=class extends v.Disposable{constructor(q,ie,ae,ne,$,J){super(),this._element=q,this._model=ie,this._width=ae,this._height=ne,this._editors=$,this._languageService=J,this.domNode=this._element,this.domNode.className=\"diff-review monaco-editor-background\";const Q=document.createElement(\"div\");Q.className=\"diff-review-actions\",this._actionBar=this._register(new y.ActionBar(Q)),this._register((0,b.autorun)(re=>{this._actionBar.clear(),this._model.canClose.read(re)&&this._actionBar.push(new S.Action(\"diffreview.close\",(0,h.localize)(3,null),\"close-diff-review \"+a.ThemeIcon.asClassName(T),!0,async()=>ie.close()),{label:!1,icon:!0})})),this._content=document.createElement(\"div\"),this._content.className=\"diff-review-content\",this._content.setAttribute(\"role\",\"code\"),this._scrollbar=this._register(new E.DomScrollableElement(this._content,{})),(0,L.reset)(this.domNode,this._scrollbar.getDomNode(),Q),this._register((0,v.toDisposable)(()=>{(0,L.reset)(this.domNode)})),this._register((0,n.applyStyle)(this.domNode,{width:this._width,height:this._height})),this._register((0,n.applyStyle)(this._content,{width:this._width,height:this._height})),this._register((0,b.autorunWithStore)((re,de)=>{this._model.currentGroup.read(re),this._render(de)})),this._register((0,L.addStandardDisposableListener)(this.domNode,\"keydown\",re=>{(re.equals(18)||re.equals(2066)||re.equals(530))&&(re.preventDefault(),this._model.goToNextLine()),(re.equals(16)||re.equals(2064)||re.equals(528))&&(re.preventDefault(),this._model.goToPreviousLine()),(re.equals(9)||re.equals(2057)||re.equals(521)||re.equals(1033))&&(re.preventDefault(),this._model.close()),(re.equals(10)||re.equals(3))&&(re.preventDefault(),this._model.revealCurrentElementInEditor())}))}_render(q){const ie=this._editors.original.getOptions(),ae=this._editors.modified.getOptions(),ne=document.createElement(\"div\");ne.className=\"diff-review-table\",ne.setAttribute(\"role\",\"list\"),ne.setAttribute(\"aria-label\",(0,h.localize)(4,null)),(0,i.applyFontInfo)(ne,ae.get(50)),(0,L.reset)(this._content,ne);const $=this._editors.original.getModel(),J=this._editors.modified.getModel();if(!$||!J)return;const Q=$.getOptions(),re=J.getOptions(),de=ae.get(66),he=this._model.currentGroup.get();for(const me of he?.lines||[]){if(!he)break;let X;if(me.type===R.Header){const G=document.createElement(\"div\");G.className=\"diff-review-row\",G.setAttribute(\"role\",\"listitem\");const z=he.range,H=this._model.currentGroupIndex.get(),Y=this._model.groups.get().length,j=ue=>ue===0?(0,h.localize)(5,null):ue===1?(0,h.localize)(6,null):(0,h.localize)(7,null,ue),Z=j(z.original.length),ee=j(z.modified.length);G.setAttribute(\"aria-label\",(0,h.localize)(8,null,H+1,Y,z.original.startLineNumber,Z,z.modified.startLineNumber,ee));const le=document.createElement(\"div\");le.className=\"diff-review-cell diff-review-summary\",le.appendChild(document.createTextNode(`${H+1}/${Y}: @@ -${z.original.startLineNumber},${z.original.length} +${z.modified.startLineNumber},${z.modified.length} @@`)),G.appendChild(le),X=G}else X=this._createRow(me,de,this._width.get(),ie,$,Q,ae,J,re);ne.appendChild(X);const U=(0,b.derived)(G=>this._model.currentElement.read(G)===me);q.add((0,b.autorun)(G=>{const z=U.read(G);X.tabIndex=z?0:-1,z&&X.focus()})),q.add((0,L.addDisposableListener)(X,\"focus\",()=>{this._model.goToLine(me)}))}this._scrollbar.scanDomNode()}_createRow(q,ie,ae,ne,$,J,Q,re,de){const he=ne.get(143),me=he.glyphMarginWidth+he.lineNumbersWidth,X=Q.get(143),U=10+X.glyphMarginWidth+X.lineNumbersWidth;let G=\"diff-review-row\",z=\"\";const H=\"diff-review-spacer\";let Y=null;switch(q.type){case R.Added:G=\"diff-review-row line-insert\",z=\" char-insert\",Y=D;break;case R.Deleted:G=\"diff-review-row line-delete\",z=\" char-delete\",Y=I;break}const j=document.createElement(\"div\");j.style.minWidth=ae+\"px\",j.className=G,j.setAttribute(\"role\",\"listitem\"),j.ariaLevel=\"\";const Z=document.createElement(\"div\");Z.className=\"diff-review-cell\",Z.style.height=`${ie}px`,j.appendChild(Z);const ee=document.createElement(\"span\");ee.style.width=me+\"px\",ee.style.minWidth=me+\"px\",ee.className=\"diff-review-line-number\"+z,q.originalLineNumber!==void 0?ee.appendChild(document.createTextNode(String(q.originalLineNumber))):ee.innerText=\"\\xA0\",Z.appendChild(ee);const le=document.createElement(\"span\");le.style.width=U+\"px\",le.style.minWidth=U+\"px\",le.style.paddingRight=\"10px\",le.className=\"diff-review-line-number\"+z,q.modifiedLineNumber!==void 0?le.appendChild(document.createTextNode(String(q.modifiedLineNumber))):le.innerText=\"\\xA0\",Z.appendChild(le);const ue=document.createElement(\"span\");if(ue.className=H,Y){const ve=document.createElement(\"span\");ve.className=a.ThemeIcon.asClassName(Y),ve.innerText=\"\\xA0\\xA0\",ue.appendChild(ve)}else ue.innerText=\"\\xA0\\xA0\";Z.appendChild(ue);let ce;if(q.modifiedLineNumber!==void 0){let ve=this._getLineHtml(re,Q,de.tabSize,q.modifiedLineNumber,this._languageService.languageIdCodec);A._ttPolicy&&(ve=A._ttPolicy.createHTML(ve)),Z.insertAdjacentHTML(\"beforeend\",ve),ce=re.getLineContent(q.modifiedLineNumber)}else{let ve=this._getLineHtml($,ne,J.tabSize,q.originalLineNumber,this._languageService.languageIdCodec);A._ttPolicy&&(ve=A._ttPolicy.createHTML(ve)),Z.insertAdjacentHTML(\"beforeend\",ve),ce=$.getLineContent(q.originalLineNumber)}ce.length===0&&(ce=(0,h.localize)(9,null));let pe=\"\";switch(q.type){case R.Unchanged:q.originalLineNumber===q.modifiedLineNumber?pe=(0,h.localize)(10,null,ce,q.originalLineNumber):pe=(0,h.localize)(11,null,ce,q.originalLineNumber,q.modifiedLineNumber);break;case R.Added:pe=(0,h.localize)(12,null,ce,q.modifiedLineNumber);break;case R.Deleted:pe=(0,h.localize)(13,null,ce,q.originalLineNumber);break}return j.setAttribute(\"aria-label\",pe),j}_getLineHtml(q,ie,ae,ne,$){const J=q.getLineContent(ne),Q=ie.get(50),re=l.LineTokens.createEmpty(J,$),de=g.ViewLineRenderingData.isBasicASCII(J,q.mightContainNonBasicASCII()),he=g.ViewLineRenderingData.containsRTL(J,de,q.mightContainRTL());return(0,o.renderViewLine2)(new o.RenderLineInput(Q.isMonospace&&!ie.get(33),Q.canUseHalfwidthRightwardsArrow,J,!1,de,he,0,re,[],ae,0,Q.spaceWidth,Q.middotWidth,Q.wsmiddotWidth,ie.get(116),ie.get(98),ie.get(93),ie.get(51)!==t.EditorFontLigatures.OFF,null)).html}};K=ke([ge(5,s.ILanguageService)],K)}),define(se[842],oe([1,0,54,7,157,76,26,39,6,2,28,661,29,82,201]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorPickerWidget=e.InsertButton=e.ColorPickerBody=e.ColorPickerHeader=void 0;const t=k.$;class r extends v.Disposable{constructor(m,C,w,D=!1){super(),this.model=C,this.showingStandaloneColorPicker=D,this._closeButton=null,this._domNode=t(\".colorpicker-header\"),k.append(m,this._domNode),this._pickedColorNode=k.append(this._domNode,t(\".picked-color\")),k.append(this._pickedColorNode,t(\"span.codicon.codicon-color-mode\")),this._pickedColorPresentation=k.append(this._pickedColorNode,document.createElement(\"span\")),this._pickedColorPresentation.classList.add(\"picked-color-presentation\");const I=(0,a.localize)(0,null);this._pickedColorNode.setAttribute(\"title\",I),this._originalColorNode=k.append(this._domNode,t(\".original-color\")),this._originalColorNode.style.backgroundColor=p.Color.Format.CSS.format(this.model.originalColor)||\"\",this.backgroundColor=w.getColorTheme().getColor(i.editorHoverBackground)||p.Color.white,this._register(w.onDidColorThemeChange(T=>{this.backgroundColor=T.getColor(i.editorHoverBackground)||p.Color.white})),this._register(k.addDisposableListener(this._pickedColorNode,k.EventType.CLICK,()=>this.model.selectNextColorPresentation())),this._register(k.addDisposableListener(this._originalColorNode,k.EventType.CLICK,()=>{this.model.color=this.model.originalColor,this.model.flushColor()})),this._register(C.onDidChangeColor(this.onDidChangeColor,this)),this._register(C.onDidChangePresentation(this.onDidChangePresentation,this)),this._pickedColorNode.style.backgroundColor=p.Color.Format.CSS.format(C.color)||\"\",this._pickedColorNode.classList.toggle(\"light\",C.color.rgba.a<.5?this.backgroundColor.isLighter():C.color.isLighter()),this.onDidChangeColor(this.model.color),this.showingStandaloneColorPicker&&(this._domNode.classList.add(\"standalone-colorpicker\"),this._closeButton=this._register(new u(this._domNode)))}get closeButton(){return this._closeButton}get pickedColorNode(){return this._pickedColorNode}get originalColorNode(){return this._originalColorNode}onDidChangeColor(m){this._pickedColorNode.style.backgroundColor=p.Color.Format.CSS.format(m)||\"\",this._pickedColorNode.classList.toggle(\"light\",m.rgba.a<.5?this.backgroundColor.isLighter():m.isLighter()),this.onDidChangePresentation()}onDidChangePresentation(){this._pickedColorPresentation.textContent=this.model.presentation?this.model.presentation.label:\"\"}}e.ColorPickerHeader=r;class u extends v.Disposable{constructor(m){super(),this._onClicked=this._register(new _.Emitter),this.onClicked=this._onClicked.event,this._button=document.createElement(\"div\"),this._button.classList.add(\"close-button\"),k.append(m,this._button);const C=document.createElement(\"div\");C.classList.add(\"close-button-inner-div\"),k.append(this._button,C),k.append(C,t(\".button\"+b.ThemeIcon.asCSSSelector((0,n.registerIcon)(\"color-picker-close\",S.Codicon.close,(0,a.localize)(1,null))))).classList.add(\"close-icon\"),this._register(k.addDisposableListener(this._button,k.EventType.CLICK,()=>{this._onClicked.fire()}))}}class f extends v.Disposable{constructor(m,C,w,D=!1){super(),this.model=C,this.pixelRatio=w,this._insertButton=null,this._domNode=t(\".colorpicker-body\"),k.append(m,this._domNode),this._saturationBox=new c(this._domNode,this.model,this.pixelRatio),this._register(this._saturationBox),this._register(this._saturationBox.onDidChange(this.onDidSaturationValueChange,this)),this._register(this._saturationBox.onColorFlushed(this.flushColor,this)),this._opacityStrip=new s(this._domNode,this.model,D),this._register(this._opacityStrip),this._register(this._opacityStrip.onDidChange(this.onDidOpacityChange,this)),this._register(this._opacityStrip.onColorFlushed(this.flushColor,this)),this._hueStrip=new l(this._domNode,this.model,D),this._register(this._hueStrip),this._register(this._hueStrip.onDidChange(this.onDidHueChange,this)),this._register(this._hueStrip.onColorFlushed(this.flushColor,this)),D&&(this._insertButton=this._register(new o(this._domNode)),this._domNode.classList.add(\"standalone-colorpicker\"))}flushColor(){this.model.flushColor()}onDidSaturationValueChange({s:m,v:C}){const w=this.model.color.hsva;this.model.color=new p.Color(new p.HSVA(w.h,m,C,w.a))}onDidOpacityChange(m){const C=this.model.color.hsva;this.model.color=new p.Color(new p.HSVA(C.h,C.s,C.v,m))}onDidHueChange(m){const C=this.model.color.hsva,w=(1-m)*360;this.model.color=new p.Color(new p.HSVA(w===360?0:w,C.s,C.v,C.a))}get domNode(){return this._domNode}get saturationBox(){return this._saturationBox}get enterButton(){return this._insertButton}layout(){this._saturationBox.layout(),this._opacityStrip.layout(),this._hueStrip.layout()}}e.ColorPickerBody=f;class c extends v.Disposable{constructor(m,C,w){super(),this.model=C,this.pixelRatio=w,this._onDidChange=new _.Emitter,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new _.Emitter,this.onColorFlushed=this._onColorFlushed.event,this._domNode=t(\".saturation-wrap\"),k.append(m,this._domNode),this._canvas=document.createElement(\"canvas\"),this._canvas.className=\"saturation-box\",k.append(this._domNode,this._canvas),this.selection=t(\".saturation-selection\"),k.append(this._domNode,this.selection),this.layout(),this._register(k.addDisposableListener(this._domNode,k.EventType.POINTER_DOWN,D=>this.onPointerDown(D))),this._register(this.model.onDidChangeColor(this.onDidChangeColor,this)),this.monitor=null}get domNode(){return this._domNode}onPointerDown(m){if(!m.target||!(m.target instanceof Element))return;this.monitor=this._register(new y.GlobalPointerMoveMonitor);const C=k.getDomNodePagePosition(this._domNode);m.target!==this.selection&&this.onDidChangePosition(m.offsetX,m.offsetY),this.monitor.startMonitoring(m.target,m.pointerId,m.buttons,D=>this.onDidChangePosition(D.pageX-C.left,D.pageY-C.top),()=>null);const w=k.addDisposableListener(m.target.ownerDocument,k.EventType.POINTER_UP,()=>{this._onColorFlushed.fire(),w.dispose(),this.monitor&&(this.monitor.stopMonitoring(!0),this.monitor=null)},!0)}onDidChangePosition(m,C){const w=Math.max(0,Math.min(1,m/this.width)),D=Math.max(0,Math.min(1,1-C/this.height));this.paintSelection(w,D),this._onDidChange.fire({s:w,v:D})}layout(){this.width=this._domNode.offsetWidth,this.height=this._domNode.offsetHeight,this._canvas.width=this.width*this.pixelRatio,this._canvas.height=this.height*this.pixelRatio,this.paint();const m=this.model.color.hsva;this.paintSelection(m.s,m.v)}paint(){const m=this.model.color.hsva,C=new p.Color(new p.HSVA(m.h,1,1,1)),w=this._canvas.getContext(\"2d\"),D=w.createLinearGradient(0,0,this._canvas.width,0);D.addColorStop(0,\"rgba(255, 255, 255, 1)\"),D.addColorStop(.5,\"rgba(255, 255, 255, 0.5)\"),D.addColorStop(1,\"rgba(255, 255, 255, 0)\");const I=w.createLinearGradient(0,0,0,this._canvas.height);I.addColorStop(0,\"rgba(0, 0, 0, 0)\"),I.addColorStop(1,\"rgba(0, 0, 0, 1)\"),w.rect(0,0,this._canvas.width,this._canvas.height),w.fillStyle=p.Color.Format.CSS.format(C),w.fill(),w.fillStyle=D,w.fill(),w.fillStyle=I,w.fill()}paintSelection(m,C){this.selection.style.left=`${m*this.width}px`,this.selection.style.top=`${this.height-C*this.height}px`}onDidChangeColor(m){if(this.monitor&&this.monitor.isMonitoring())return;this.paint();const C=m.hsva;this.paintSelection(C.s,C.v)}}class d extends v.Disposable{constructor(m,C,w=!1){super(),this.model=C,this._onDidChange=new _.Emitter,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new _.Emitter,this.onColorFlushed=this._onColorFlushed.event,w?(this.domNode=k.append(m,t(\".standalone-strip\")),this.overlay=k.append(this.domNode,t(\".standalone-overlay\"))):(this.domNode=k.append(m,t(\".strip\")),this.overlay=k.append(this.domNode,t(\".overlay\"))),this.slider=k.append(this.domNode,t(\".slider\")),this.slider.style.top=\"0px\",this._register(k.addDisposableListener(this.domNode,k.EventType.POINTER_DOWN,D=>this.onPointerDown(D))),this._register(C.onDidChangeColor(this.onDidChangeColor,this)),this.layout()}layout(){this.height=this.domNode.offsetHeight-this.slider.offsetHeight;const m=this.getValue(this.model.color);this.updateSliderPosition(m)}onDidChangeColor(m){const C=this.getValue(m);this.updateSliderPosition(C)}onPointerDown(m){if(!m.target||!(m.target instanceof Element))return;const C=this._register(new y.GlobalPointerMoveMonitor),w=k.getDomNodePagePosition(this.domNode);this.domNode.classList.add(\"grabbing\"),m.target!==this.slider&&this.onDidChangeTop(m.offsetY),C.startMonitoring(m.target,m.pointerId,m.buttons,I=>this.onDidChangeTop(I.pageY-w.top),()=>null);const D=k.addDisposableListener(m.target.ownerDocument,k.EventType.POINTER_UP,()=>{this._onColorFlushed.fire(),D.dispose(),C.stopMonitoring(!0),this.domNode.classList.remove(\"grabbing\")},!0)}onDidChangeTop(m){const C=Math.max(0,Math.min(1,1-m/this.height));this.updateSliderPosition(C),this._onDidChange.fire(C)}updateSliderPosition(m){this.slider.style.top=`${(1-m)*this.height}px`}}class s extends d{constructor(m,C,w=!1){super(m,C,w),this.domNode.classList.add(\"opacity-strip\"),this.onDidChangeColor(this.model.color)}onDidChangeColor(m){super.onDidChangeColor(m);const{r:C,g:w,b:D}=m.rgba,I=new p.Color(new p.RGBA(C,w,D,1)),T=new p.Color(new p.RGBA(C,w,D,0));this.overlay.style.background=`linear-gradient(to bottom, ${I} 0%, ${T} 100%)`}getValue(m){return m.hsva.a}}class l extends d{constructor(m,C,w=!1){super(m,C,w),this.domNode.classList.add(\"hue-strip\")}getValue(m){return 1-m.hsva.h/360}}class o extends v.Disposable{constructor(m){super(),this._onClicked=this._register(new _.Emitter),this.onClicked=this._onClicked.event,this._button=k.append(m,document.createElement(\"button\")),this._button.classList.add(\"insert-button\"),this._button.textContent=\"Insert\",this._register(k.addDisposableListener(this._button,k.EventType.CLICK,()=>{this._onClicked.fire()}))}get button(){return this._button}}e.InsertButton=o;class g extends E.Widget{constructor(m,C,w,D,I=!1){super(),this.model=C,this.pixelRatio=w,this._register(L.PixelRatio.onDidChange(()=>this.layout()));const T=t(\".colorpicker-widget\");m.appendChild(T),this.header=this._register(new r(T,this.model,D,I)),this.body=this._register(new f(T,this.model,this.pixelRatio,I))}layout(){this.body.layout()}}e.ColorPickerWidget=g}),define(se[843],oe([1,0,7,48,77,26,6,2,11,20,43,104,241,705,15,57,29,82,28,473]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";var d;Object.defineProperty(e,\"__esModule\",{value:!0}),e.ParameterHintsWidget=void 0;const s=L.$,l=(0,f.registerIcon)(\"parameter-hints-next\",E.Codicon.chevronDown,n.localize(0,null)),o=(0,f.registerIcon)(\"parameter-hints-previous\",E.Codicon.chevronUp,n.localize(1,null));let g=d=class extends p.Disposable{constructor(m,C,w,D,I){super(),this.editor=m,this.model=C,this.renderDisposeables=this._register(new p.DisposableStore),this.visible=!1,this.announcedLabel=null,this.allowEditorOverflow=!0,this.markdownRenderer=this._register(new a.MarkdownRenderer({editor:m},I,D)),this.keyVisible=i.Context.Visible.bindTo(w),this.keyMultipleSignatures=i.Context.MultipleSignatures.bindTo(w)}createParameterHintDOMNodes(){const m=s(\".editor-widget.parameter-hints-widget\"),C=L.append(m,s(\".phwrapper\"));C.tabIndex=-1;const w=L.append(C,s(\".controls\")),D=L.append(w,s(\".button\"+c.ThemeIcon.asCSSSelector(o))),I=L.append(w,s(\".overloads\")),T=L.append(w,s(\".button\"+c.ThemeIcon.asCSSSelector(l)));this._register(L.addDisposableListener(D,\"click\",x=>{L.EventHelper.stop(x),this.previous()})),this._register(L.addDisposableListener(T,\"click\",x=>{L.EventHelper.stop(x),this.next()}));const A=s(\".body\"),P=new y.DomScrollableElement(A,{alwaysConsumeMouseWheel:!0});this._register(P),C.appendChild(P.getDomNode());const N=L.append(A,s(\".signature\")),M=L.append(A,s(\".docs\"));m.style.userSelect=\"text\",this.domNodes={element:m,signature:N,overloads:I,docs:M,scrollbar:P},this.editor.addContentWidget(this),this.hide(),this._register(this.editor.onDidChangeCursorSelection(x=>{this.visible&&this.editor.layoutContentWidget(this)}));const R=()=>{if(!this.domNodes)return;const x=this.editor.getOption(50);this.domNodes.element.style.fontSize=`${x.fontSize}px`,this.domNodes.element.style.lineHeight=`${x.lineHeight/x.fontSize}`};R(),this._register(S.Event.chain(this.editor.onDidChangeConfiguration.bind(this.editor),x=>x.filter(O=>O.hasChanged(50)))(R)),this._register(this.editor.onDidLayoutChange(x=>this.updateMaxHeight())),this.updateMaxHeight()}show(){this.visible||(this.domNodes||this.createParameterHintDOMNodes(),this.keyVisible.set(!0),this.visible=!0,setTimeout(()=>{var m;(m=this.domNodes)===null||m===void 0||m.element.classList.add(\"visible\")},100),this.editor.layoutContentWidget(this))}hide(){var m;this.renderDisposeables.clear(),this.visible&&(this.keyVisible.reset(),this.visible=!1,this.announcedLabel=null,(m=this.domNodes)===null||m===void 0||m.element.classList.remove(\"visible\"),this.editor.layoutContentWidget(this))}getPosition(){return this.visible?{position:this.editor.getPosition(),preference:[1,2]}:null}render(m){var C;if(this.renderDisposeables.clear(),!this.domNodes)return;const w=m.signatures.length>1;this.domNodes.element.classList.toggle(\"multiple\",w),this.keyMultipleSignatures.set(w),this.domNodes.signature.innerText=\"\",this.domNodes.docs.innerText=\"\";const D=m.signatures[m.activeSignature];if(!D)return;const I=L.append(this.domNodes.signature,s(\".code\")),T=this.editor.getOption(50);I.style.fontSize=`${T.fontSize}px`,I.style.fontFamily=T.fontFamily;const A=D.parameters.length>0,P=(C=D.activeParameter)!==null&&C!==void 0?C:m.activeParameter;if(A)this.renderParameters(I,D,P);else{const R=L.append(I,s(\"span\"));R.textContent=D.label}const N=D.parameters[P];if(N?.documentation){const R=s(\"span.documentation\");if(typeof N.documentation==\"string\")R.textContent=N.documentation;else{const x=this.renderMarkdownDocs(N.documentation);R.appendChild(x.element)}L.append(this.domNodes.docs,s(\"p\",{},R))}if(D.documentation!==void 0)if(typeof D.documentation==\"string\")L.append(this.domNodes.docs,s(\"p\",{},D.documentation));else{const R=this.renderMarkdownDocs(D.documentation);L.append(this.domNodes.docs,R.element)}const M=this.hasDocs(D,N);if(this.domNodes.signature.classList.toggle(\"has-docs\",M),this.domNodes.docs.classList.toggle(\"empty\",!M),this.domNodes.overloads.textContent=String(m.activeSignature+1).padStart(m.signatures.length.toString().length,\"0\")+\"/\"+m.signatures.length,N){let R=\"\";const x=D.parameters[P];Array.isArray(x.label)?R=D.label.substring(x.label[0],x.label[1]):R=x.label,x.documentation&&(R+=typeof x.documentation==\"string\"?`, ${x.documentation}`:`, ${x.documentation.value}`),D.documentation&&(R+=typeof D.documentation==\"string\"?`, ${D.documentation}`:`, ${D.documentation.value}`),this.announcedLabel!==R&&(k.alert(n.localize(2,null,R)),this.announcedLabel=R)}this.editor.layoutContentWidget(this),this.domNodes.scrollbar.scanDomNode()}renderMarkdownDocs(m){const C=this.renderDisposeables.add(this.markdownRenderer.render(m,{asyncRenderCallback:()=>{var w;(w=this.domNodes)===null||w===void 0||w.scrollbar.scanDomNode()}}));return C.element.classList.add(\"markdown-docs\"),C}hasDocs(m,C){return!!(C&&typeof C.documentation==\"string\"&&(0,v.assertIsDefined)(C.documentation).length>0||C&&typeof C.documentation==\"object\"&&(0,v.assertIsDefined)(C.documentation).value.length>0||m.documentation&&typeof m.documentation==\"string\"&&(0,v.assertIsDefined)(m.documentation).length>0||m.documentation&&typeof m.documentation==\"object\"&&(0,v.assertIsDefined)(m.documentation.value).length>0)}renderParameters(m,C,w){const[D,I]=this.getParameterLabelOffsets(C,w),T=document.createElement(\"span\");T.textContent=C.label.substring(0,D);const A=document.createElement(\"span\");A.textContent=C.label.substring(D,I),A.className=\"parameter active\";const P=document.createElement(\"span\");P.textContent=C.label.substring(I),L.append(m,T,A,P)}getParameterLabelOffsets(m,C){const w=m.parameters[C];if(w){if(Array.isArray(w.label))return w.label;if(w.label.length){const D=new RegExp(`(\\\\W|^)${(0,_.escapeRegExpCharacters)(w.label)}(?=\\\\W|$)`,\"g\");D.test(m.label);const I=D.lastIndex-w.label.length;return I>=0?[I,D.lastIndex]:[0,0]}else return[0,0]}else return[0,0]}next(){this.editor.focus(),this.model.next()}previous(){this.editor.focus(),this.model.previous()}getDomNode(){return this.domNodes||this.createParameterHintDOMNodes(),this.domNodes.element}getId(){return d.ID}updateMaxHeight(){if(!this.domNodes)return;const C=`${Math.max(this.editor.getLayoutInfo().height/4,250)}px`;this.domNodes.element.style.maxHeight=C;const w=this.domNodes.element.getElementsByClassName(\"phwrapper\");w.length&&(w[0].style.maxHeight=C)}};e.ParameterHintsWidget=g,g.ID=\"editor.widget.parameterHintsWidget\",e.ParameterHintsWidget=g=d=ke([ge(2,t.IContextKeyService),ge(3,r.IOpenerService),ge(4,b.ILanguageService)],g),(0,u.registerColor)(\"editorHoverWidget.highlightForeground\",{dark:u.listHighlightForeground,light:u.listHighlightForeground,hcDark:u.listHighlightForeground,hcLight:u.listHighlightForeground},n.localize(3,null))}),define(se[844],oe([1,0,99,2,16,21,31,18,768,241,704,15,8,843]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";var t;Object.defineProperty(e,\"__esModule\",{value:!0}),e.TriggerParameterHintsAction=e.ParameterHintsController=void 0;let r=t=class extends k.Disposable{static get(s){return s.getContribution(t.ID)}constructor(s,l,o){super(),this.editor=s,this.model=this._register(new _.ParameterHintsModel(s,o.signatureHelpProvider)),this._register(this.model.onChangedHints(g=>{var h;g?(this.widget.value.show(),this.widget.value.render(g)):(h=this.widget.rawValue)===null||h===void 0||h.hide()})),this.widget=new L.Lazy(()=>this._register(l.createInstance(n.ParameterHintsWidget,this.editor,this.model)))}cancel(){this.model.cancel()}previous(){var s;(s=this.widget.rawValue)===null||s===void 0||s.previous()}next(){var s;(s=this.widget.rawValue)===null||s===void 0||s.next()}trigger(s){this.model.trigger(s,0)}};e.ParameterHintsController=r,r.ID=\"editor.controller.parameterHints\",e.ParameterHintsController=r=t=ke([ge(1,i.IInstantiationService),ge(2,p.ILanguageFeaturesService)],r);class u extends y.EditorAction{constructor(){super({id:\"editor.action.triggerParameterHints\",label:b.localize(0,null),alias:\"Trigger Parameter Hints\",precondition:E.EditorContextKeys.hasSignatureHelpProvider,kbOpts:{kbExpr:E.EditorContextKeys.editorTextFocus,primary:3082,weight:100}})}run(s,l){const o=r.get(l);o?.trigger({triggerKind:S.SignatureHelpTriggerKind.Invoke})}}e.TriggerParameterHintsAction=u,(0,y.registerEditorContribution)(r.ID,r,2),(0,y.registerEditorAction)(u);const f=100+75,c=y.EditorCommand.bindToContribution(r.get);(0,y.registerEditorCommand)(new c({id:\"closeParameterHints\",precondition:v.Context.Visible,handler:d=>d.cancel(),kbOpts:{weight:f,kbExpr:E.EditorContextKeys.focus,primary:9,secondary:[1033]}})),(0,y.registerEditorCommand)(new c({id:\"showPrevParameterHint\",precondition:a.ContextKeyExpr.and(v.Context.Visible,v.Context.MultipleSignatures),handler:d=>d.previous(),kbOpts:{weight:f,kbExpr:E.EditorContextKeys.focus,primary:16,secondary:[528],mac:{primary:16,secondary:[528,302]}}})),(0,y.registerEditorCommand)(new c({id:\"showNextParameterHint\",precondition:a.ContextKeyExpr.and(v.Context.Visible,v.Context.MultipleSignatures),handler:d=>d.next(),kbOpts:{weight:f,kbExpr:E.EditorContextKeys.focus,primary:18,secondary:[530],mac:{primary:18,secondary:[530,300]}}}))}),define(se[845],oe([1,0,7,78,42,2,104,8,786,82,28,480]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BannerController=void 0;const a=26;let i=class extends E.Disposable{constructor(r,u){super(),this._editor=r,this.instantiationService=u,this.banner=this._register(this.instantiationService.createInstance(n))}hide(){this._editor.setBanner(null,0),this.banner.clear()}show(r){this.banner.show({...r,onClose:()=>{var u;this.hide(),(u=r.onClose)===null||u===void 0||u.call(r)}}),this._editor.setBanner(this.banner.element,a)}};e.BannerController=i,e.BannerController=i=ke([ge(1,p.IInstantiationService)],i);let n=class extends E.Disposable{constructor(r){super(),this.instantiationService=r,this.markdownRenderer=this.instantiationService.createInstance(S.MarkdownRenderer,{}),this.element=(0,L.$)(\"div.editor-banner\"),this.element.tabIndex=0}getAriaLabel(r){if(r.ariaLabel)return r.ariaLabel;if(typeof r.message==\"string\")return r.message}getBannerMessage(r){if(typeof r==\"string\"){const u=(0,L.$)(\"span\");return u.innerText=r,u}return this.markdownRenderer.render(r).element}clear(){(0,L.clearNode)(this.element)}show(r){(0,L.clearNode)(this.element);const u=this.getAriaLabel(r);u&&this.element.setAttribute(\"aria-label\",u);const f=(0,L.append)(this.element,(0,L.$)(\"div.icon-container\"));f.setAttribute(\"aria-hidden\",\"true\"),r.icon&&f.appendChild((0,L.$)(`div${b.ThemeIcon.asCSSSelector(r.icon)}`));const c=(0,L.append)(this.element,(0,L.$)(\"div.message-container\"));if(c.setAttribute(\"aria-hidden\",\"true\"),c.appendChild(this.getBannerMessage(r.message)),this.messageActionsContainer=(0,L.append)(this.element,(0,L.$)(\"div.message-actions-container\")),r.actions)for(const s of r.actions)this._register(this.instantiationService.createInstance(_.Link,this.messageActionsContainer,{...s,tabIndex:-1},{}));const d=(0,L.append)(this.element,(0,L.$)(\"div.action-container\"));this.actionBar=this._register(new k.ActionBar(d)),this.actionBar.push(this._register(new y.Action(\"banner.close\",\"Close Banner\",b.ThemeIcon.asClassName(v.widgetClose),!0,()=>{typeof r.onClose==\"function\"&&r.onClose()})),{icon:!0,label:!1}),this.actionBar.setFocusable(!1)}};n=ke([ge(0,p.IInstantiationService)],n)}),define(se[846],oe([1,0,7,6,2,28,82]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UnthemedProductIconTheme=e.getIconsStyleSheet=void 0;function p(v){const b=new y.DisposableStore,a=b.add(new k.Emitter),i=(0,S.getIconRegistry)();return b.add(i.onDidChange(()=>a.fire())),v&&b.add(v.onDidProductIconThemeChange(()=>a.fire())),{dispose:()=>b.dispose(),onDidChange:a.event,getCSS(){const n=v?v.getProductIconTheme():new _,t={},r=f=>{const c=n.getIcon(f);if(!c)return;const d=c.font;return d?(t[d.id]=d.definition,`.codicon-${f.id}:before { content: '${c.fontCharacter}'; font-family: ${(0,L.asCSSPropertyValue)(d.id)}; }`):`.codicon-${f.id}:before { content: '${c.fontCharacter}'; }`},u=[];for(const f of i.getIcons()){const c=r(f);c&&u.push(c)}for(const f in t){const c=t[f],d=c.weight?`font-weight: ${c.weight};`:\"\",s=c.style?`font-style: ${c.style};`:\"\",l=c.src.map(o=>`${(0,L.asCSSUrl)(o.location)} format('${o.format}')`).join(\", \");u.push(`@font-face { src: ${l}; font-family: ${(0,L.asCSSPropertyValue)(f)};${d}${s} font-display: block; }`)}return u.join(`\n`)}}}e.getIconsStyleSheet=p;class _{getIcon(b){const a=(0,S.getIconRegistry)();let i=b.defaults;for(;E.ThemeIcon.isThemeIcon(i);){const n=a.getIcon(i.id);if(!n)return;i=n.defaults}return i}}e.UnthemedProductIconTheme=_}),define(se[89],oe([1,0]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isDark=e.isHighContrast=e.ColorScheme=void 0;var L;(function(E){E.DARK=\"dark\",E.LIGHT=\"light\",E.HIGH_CONTRAST_DARK=\"hcDark\",E.HIGH_CONTRAST_LIGHT=\"hcLight\"})(L||(e.ColorScheme=L={}));function k(E){return E===L.HIGH_CONTRAST_DARK||E===L.HIGH_CONTRAST_LIGHT}e.isHighContrast=k;function y(E){return E===L.DARK||E===L.HIGH_CONTRAST_DARK}e.isDark=y}),define(se[255],oe([1,0,54,40,17,494,148,155,120,89,36]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getColumnOfNodeOffset=e.ViewLine=e.ViewLineOptions=void 0;const a=function(){return y.isNative?!0:!(y.isLinux||L.isFirefox||L.isSafari)}();let i=!0;class n{constructor(g,h){this.themeType=h;const m=g.options,C=m.get(50);m.get(38)===\"off\"?this.renderWhitespace=m.get(98):this.renderWhitespace=\"none\",this.renderControlCharacters=m.get(93),this.spaceWidth=C.spaceWidth,this.middotWidth=C.middotWidth,this.wsmiddotWidth=C.wsmiddotWidth,this.useMonospaceOptimizations=C.isMonospace&&!m.get(33),this.canUseHalfwidthRightwardsArrow=C.canUseHalfwidthRightwardsArrow,this.lineHeight=m.get(66),this.stopRenderingLineAfter=m.get(116),this.fontLigatures=m.get(51)}equals(g){return this.themeType===g.themeType&&this.renderWhitespace===g.renderWhitespace&&this.renderControlCharacters===g.renderControlCharacters&&this.spaceWidth===g.spaceWidth&&this.middotWidth===g.middotWidth&&this.wsmiddotWidth===g.wsmiddotWidth&&this.useMonospaceOptimizations===g.useMonospaceOptimizations&&this.canUseHalfwidthRightwardsArrow===g.canUseHalfwidthRightwardsArrow&&this.lineHeight===g.lineHeight&&this.stopRenderingLineAfter===g.stopRenderingLineAfter&&this.fontLigatures===g.fontLigatures}}e.ViewLineOptions=n;class t{constructor(g){this._options=g,this._isMaybeInvalid=!0,this._renderedViewLine=null}getDomNode(){return this._renderedViewLine&&this._renderedViewLine.domNode?this._renderedViewLine.domNode.domNode:null}setDomNode(g){if(this._renderedViewLine)this._renderedViewLine.domNode=(0,k.createFastDomNode)(g);else throw new Error(\"I have no rendered view line to set the dom node to...\")}onContentChanged(){this._isMaybeInvalid=!0}onTokensChanged(){this._isMaybeInvalid=!0}onDecorationsChanged(){this._isMaybeInvalid=!0}onOptionsChanged(g){this._isMaybeInvalid=!0,this._options=g}onSelectionChanged(){return(0,v.isHighContrast)(this._options.themeType)||this._options.renderWhitespace===\"selection\"?(this._isMaybeInvalid=!0,!0):!1}renderLine(g,h,m,C){if(this._isMaybeInvalid===!1)return!1;this._isMaybeInvalid=!1;const w=m.getViewLineRenderingData(g),D=this._options,I=p.LineDecoration.filter(w.inlineDecorations,g,w.minColumn,w.maxColumn);let T=null;if((0,v.isHighContrast)(D.themeType)||this._options.renderWhitespace===\"selection\"){const M=m.selections;for(const R of M){if(R.endLineNumber<g||R.startLineNumber>g)continue;const x=R.startLineNumber===g?R.startColumn:w.minColumn,O=R.endLineNumber===g?R.endColumn:w.maxColumn;x<O&&((0,v.isHighContrast)(D.themeType)&&I.push(new p.LineDecoration(x,O,\"inline-selected-text\",0)),this._options.renderWhitespace===\"selection\"&&(T||(T=[]),T.push(new _.LineRange(x-1,O-1))))}}const A=new _.RenderLineInput(D.useMonospaceOptimizations,D.canUseHalfwidthRightwardsArrow,w.content,w.continuesWithWrappedLine,w.isBasicASCII,w.containsRTL,w.minColumn-1,w.tokens,I,w.tabSize,w.startVisibleColumn,D.spaceWidth,D.middotWidth,D.wsmiddotWidth,D.stopRenderingLineAfter,D.renderWhitespace,D.renderControlCharacters,D.fontLigatures!==b.EditorFontLigatures.OFF,T);if(this._renderedViewLine&&this._renderedViewLine.input.equals(A))return!1;C.appendString('<div style=\"top:'),C.appendString(String(h)),C.appendString(\"px;height:\"),C.appendString(String(this._options.lineHeight)),C.appendString('px;\" class=\"'),C.appendString(t.CLASS_NAME),C.appendString('\">');const P=(0,_.renderViewLine)(A,C);C.appendString(\"</div>\");let N=null;return i&&a&&w.isBasicASCII&&D.useMonospaceOptimizations&&P.containsForeignElements===0&&(N=new r(this._renderedViewLine?this._renderedViewLine.domNode:null,A,P.characterMapping)),N||(N=c(this._renderedViewLine?this._renderedViewLine.domNode:null,A,P.characterMapping,P.containsRTL,P.containsForeignElements)),this._renderedViewLine=N,!0}layoutLine(g,h){this._renderedViewLine&&this._renderedViewLine.domNode&&(this._renderedViewLine.domNode.setTop(h),this._renderedViewLine.domNode.setHeight(this._options.lineHeight))}getWidth(g){return this._renderedViewLine?this._renderedViewLine.getWidth(g):0}getWidthIsFast(){return this._renderedViewLine?this._renderedViewLine.getWidthIsFast():!0}needsMonospaceFontCheck(){return this._renderedViewLine?this._renderedViewLine instanceof r:!1}monospaceAssumptionsAreValid(){return this._renderedViewLine&&this._renderedViewLine instanceof r?this._renderedViewLine.monospaceAssumptionsAreValid():i}onMonospaceAssumptionsInvalidated(){this._renderedViewLine&&this._renderedViewLine instanceof r&&(this._renderedViewLine=this._renderedViewLine.toSlowRenderedLine())}getVisibleRangesForRange(g,h,m,C){if(!this._renderedViewLine)return null;h=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,h)),m=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,m));const w=this._renderedViewLine.input.stopRenderingLineAfter;if(w!==-1&&h>w+1&&m>w+1)return new S.VisibleRanges(!0,[new S.FloatHorizontalRange(this.getWidth(C),0)]);w!==-1&&h>w+1&&(h=w+1),w!==-1&&m>w+1&&(m=w+1);const D=this._renderedViewLine.getVisibleRangesForRange(g,h,m,C);return D&&D.length>0?new S.VisibleRanges(!1,D):null}getColumnOfNodeOffset(g,h){return this._renderedViewLine?this._renderedViewLine.getColumnOfNodeOffset(g,h):1}}e.ViewLine=t,t.CLASS_NAME=\"view-line\";class r{constructor(g,h,m){this._cachedWidth=-1,this.domNode=g,this.input=h;const C=Math.floor(h.lineContent.length/300);if(C>0){this._keyColumnPixelOffsetCache=new Float32Array(C);for(let w=0;w<C;w++)this._keyColumnPixelOffsetCache[w]=-1}else this._keyColumnPixelOffsetCache=null;this._characterMapping=m,this._charWidth=h.spaceWidth}getWidth(g){if(!this.domNode||this.input.lineContent.length<300){const h=this._characterMapping.getHorizontalOffset(this._characterMapping.length);return Math.round(this._charWidth*h)}return this._cachedWidth===-1&&(this._cachedWidth=this._getReadingTarget(this.domNode).offsetWidth,g?.markDidDomLayout()),this._cachedWidth}getWidthIsFast(){return this.input.lineContent.length<300||this._cachedWidth!==-1}monospaceAssumptionsAreValid(){if(!this.domNode)return i;if(this.input.lineContent.length<300){const g=this.getWidth(null),h=this.domNode.domNode.firstChild.offsetWidth;Math.abs(g-h)>=2&&(console.warn(\"monospace assumptions have been violated, therefore disabling monospace optimizations!\"),i=!1)}return i}toSlowRenderedLine(){return c(this.domNode,this.input,this._characterMapping,!1,0)}getVisibleRangesForRange(g,h,m,C){const w=this._getColumnPixelOffset(g,h,C),D=this._getColumnPixelOffset(g,m,C);return[new S.FloatHorizontalRange(w,D-w)]}_getColumnPixelOffset(g,h,m){if(h<=300){const A=this._characterMapping.getHorizontalOffset(h);return this._charWidth*A}const C=Math.floor((h-1)/300)-1,w=(C+1)*300+1;let D=-1;if(this._keyColumnPixelOffsetCache&&(D=this._keyColumnPixelOffsetCache[C],D===-1&&(D=this._actualReadPixelOffset(g,w,m),this._keyColumnPixelOffsetCache[C]=D)),D===-1){const A=this._characterMapping.getHorizontalOffset(h);return this._charWidth*A}const I=this._characterMapping.getHorizontalOffset(w),T=this._characterMapping.getHorizontalOffset(h);return D+this._charWidth*(T-I)}_getReadingTarget(g){return g.domNode.firstChild}_actualReadPixelOffset(g,h,m){if(!this.domNode)return-1;const C=this._characterMapping.getDomPosition(h),w=E.RangeUtil.readHorizontalRanges(this._getReadingTarget(this.domNode),C.partIndex,C.charIndex,C.partIndex,C.charIndex,m);return!w||w.length===0?-1:w[0].left}getColumnOfNodeOffset(g,h){return l(this._characterMapping,g,h)}}class u{constructor(g,h,m,C,w){if(this.domNode=g,this.input=h,this._characterMapping=m,this._isWhitespaceOnly=/^\\s*$/.test(h.lineContent),this._containsForeignElements=w,this._cachedWidth=-1,this._pixelOffsetCache=null,!C||this._characterMapping.length===0){this._pixelOffsetCache=new Float32Array(Math.max(2,this._characterMapping.length+1));for(let D=0,I=this._characterMapping.length;D<=I;D++)this._pixelOffsetCache[D]=-1}}_getReadingTarget(g){return g.domNode.firstChild}getWidth(g){return this.domNode?(this._cachedWidth===-1&&(this._cachedWidth=this._getReadingTarget(this.domNode).offsetWidth,g?.markDidDomLayout()),this._cachedWidth):0}getWidthIsFast(){return this._cachedWidth!==-1}getVisibleRangesForRange(g,h,m,C){if(!this.domNode)return null;if(this._pixelOffsetCache!==null){const w=this._readPixelOffset(this.domNode,g,h,C);if(w===-1)return null;const D=this._readPixelOffset(this.domNode,g,m,C);return D===-1?null:[new S.FloatHorizontalRange(w,D-w)]}return this._readVisibleRangesForRange(this.domNode,g,h,m,C)}_readVisibleRangesForRange(g,h,m,C,w){if(m===C){const D=this._readPixelOffset(g,h,m,w);return D===-1?null:[new S.FloatHorizontalRange(D,0)]}else return this._readRawVisibleRangesForRange(g,m,C,w)}_readPixelOffset(g,h,m,C){if(this._characterMapping.length===0){if(this._containsForeignElements===0||this._containsForeignElements===2)return 0;if(this._containsForeignElements===1)return this.getWidth(C);const w=this._getReadingTarget(g);return w.firstChild?(C.markDidDomLayout(),w.firstChild.offsetWidth):0}if(this._pixelOffsetCache!==null){const w=this._pixelOffsetCache[m];if(w!==-1)return w;const D=this._actualReadPixelOffset(g,h,m,C);return this._pixelOffsetCache[m]=D,D}return this._actualReadPixelOffset(g,h,m,C)}_actualReadPixelOffset(g,h,m,C){if(this._characterMapping.length===0){const T=E.RangeUtil.readHorizontalRanges(this._getReadingTarget(g),0,0,0,0,C);return!T||T.length===0?-1:T[0].left}if(m===this._characterMapping.length&&this._isWhitespaceOnly&&this._containsForeignElements===0)return this.getWidth(C);const w=this._characterMapping.getDomPosition(m),D=E.RangeUtil.readHorizontalRanges(this._getReadingTarget(g),w.partIndex,w.charIndex,w.partIndex,w.charIndex,C);if(!D||D.length===0)return-1;const I=D[0].left;if(this.input.isBasicASCII){const T=this._characterMapping.getHorizontalOffset(m),A=Math.round(this.input.spaceWidth*T);if(Math.abs(A-I)<=1)return A}return I}_readRawVisibleRangesForRange(g,h,m,C){if(h===1&&m===this._characterMapping.length)return[new S.FloatHorizontalRange(0,this.getWidth(C))];const w=this._characterMapping.getDomPosition(h),D=this._characterMapping.getDomPosition(m);return E.RangeUtil.readHorizontalRanges(this._getReadingTarget(g),w.partIndex,w.charIndex,D.partIndex,D.charIndex,C)}getColumnOfNodeOffset(g,h){return l(this._characterMapping,g,h)}}class f extends u{_readVisibleRangesForRange(g,h,m,C,w){const D=super._readVisibleRangesForRange(g,h,m,C,w);if(!D||D.length===0||m===C||m===1&&C===this._characterMapping.length)return D;if(!this.input.containsRTL){const I=this._readPixelOffset(g,h,C,w);if(I!==-1){const T=D[D.length-1];T.left<I&&(T.width=I-T.left)}}return D}}const c=function(){return L.isWebKit?d:s}();function d(o,g,h,m,C){return new f(o,g,h,m,C)}function s(o,g,h,m,C){return new u(o,g,h,m,C)}function l(o,g,h){const m=g.textContent.length;let C=-1;for(;g;)g=g.previousSibling,C++;return o.getColumn(new _.DomPosition(C,h),m)}e.getColumnOfNodeOffset=l}),define(se[365],oe([1,0,167,56,255,10,5,85,7,282]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MouseTargetFactory=e.HitTestContext=e.MouseTarget=e.PointerHandlerLastRenderData=void 0;class b{constructor(m=null){this.hitTarget=m,this.type=0}}class a{constructor(m,C,w){this.position=m,this.spanNode=C,this.injectedText=w,this.type=1}}var i;(function(h){function m(C,w,D){const I=C.getPositionFromDOMInfo(w,D);return I?new a(I,w,null):new b(w)}h.createFromDOMInfo=m})(i||(i={}));class n{constructor(m,C){this.lastViewCursorsRenderData=m,this.lastTextareaPosition=C}}e.PointerHandlerLastRenderData=n;class t{static _deduceRage(m,C=null){return!C&&m?new S.Range(m.lineNumber,m.column,m.lineNumber,m.column):C??null}static createUnknown(m,C,w){return{type:0,element:m,mouseColumn:C,position:w,range:this._deduceRage(w)}}static createTextarea(m,C){return{type:1,element:m,mouseColumn:C,position:null,range:null}}static createMargin(m,C,w,D,I,T){return{type:m,element:C,mouseColumn:w,position:D,range:I,detail:T}}static createViewZone(m,C,w,D,I){return{type:m,element:C,mouseColumn:w,position:D,range:this._deduceRage(D),detail:I}}static createContentText(m,C,w,D,I){return{type:6,element:m,mouseColumn:C,position:w,range:this._deduceRage(w,D),detail:I}}static createContentEmpty(m,C,w,D){return{type:7,element:m,mouseColumn:C,position:w,range:this._deduceRage(w),detail:D}}static createContentWidget(m,C,w){return{type:9,element:m,mouseColumn:C,position:null,range:null,detail:w}}static createScrollbar(m,C,w){return{type:11,element:m,mouseColumn:C,position:w,range:this._deduceRage(w)}}static createOverlayWidget(m,C,w){return{type:12,element:m,mouseColumn:C,position:null,range:null,detail:w}}static createOutsideEditor(m,C,w,D){return{type:13,element:null,mouseColumn:m,position:C,range:this._deduceRage(C),outsidePosition:w,outsideDistance:D}}static _typeToString(m){return m===1?\"TEXTAREA\":m===2?\"GUTTER_GLYPH_MARGIN\":m===3?\"GUTTER_LINE_NUMBERS\":m===4?\"GUTTER_LINE_DECORATIONS\":m===5?\"GUTTER_VIEW_ZONE\":m===6?\"CONTENT_TEXT\":m===7?\"CONTENT_EMPTY\":m===8?\"CONTENT_VIEW_ZONE\":m===9?\"CONTENT_WIDGET\":m===10?\"OVERVIEW_RULER\":m===11?\"SCROLLBAR\":m===12?\"OVERLAY_WIDGET\":\"UNKNOWN\"}static toString(m){return this._typeToString(m.type)+\": \"+m.position+\" - \"+m.range+\" - \"+JSON.stringify(m.detail)}}e.MouseTarget=t;class r{static isTextArea(m){return m.length===2&&m[0]===3&&m[1]===7}static isChildOfViewLines(m){return m.length>=4&&m[0]===3&&m[3]===8}static isStrictChildOfViewLines(m){return m.length>4&&m[0]===3&&m[3]===8}static isChildOfScrollableElement(m){return m.length>=2&&m[0]===3&&m[1]===6}static isChildOfMinimap(m){return m.length>=2&&m[0]===3&&m[1]===9}static isChildOfContentWidgets(m){return m.length>=4&&m[0]===3&&m[3]===1}static isChildOfOverflowGuard(m){return m.length>=1&&m[0]===3}static isChildOfOverflowingContentWidgets(m){return m.length>=1&&m[0]===2}static isChildOfOverlayWidgets(m){return m.length>=2&&m[0]===3&&m[1]===4}static isChildOfOverflowingOverlayWidgets(m){return m.length>=1&&m[0]===5}}class u{constructor(m,C,w){this.viewModel=m.viewModel;const D=m.configuration.options;this.layoutInfo=D.get(143),this.viewDomNode=C.viewDomNode,this.lineHeight=D.get(66),this.stickyTabStops=D.get(115),this.typicalHalfwidthCharacterWidth=D.get(50).typicalHalfwidthCharacterWidth,this.lastRenderData=w,this._context=m,this._viewHelper=C}getZoneAtCoord(m){return u.getZoneAtCoord(this._context,m)}static getZoneAtCoord(m,C){const w=m.viewLayout.getWhitespaceAtVerticalOffset(C);if(w){const D=w.verticalOffset+w.height/2,I=m.viewModel.getLineCount();let T=null,A,P=null;return w.afterLineNumber!==I&&(P=new E.Position(w.afterLineNumber+1,1)),w.afterLineNumber>0&&(T=new E.Position(w.afterLineNumber,m.viewModel.getLineMaxColumn(w.afterLineNumber))),P===null?A=T:T===null?A=P:C<D?A=T:A=P,{viewZoneId:w.id,afterLineNumber:w.afterLineNumber,positionBefore:T,positionAfter:P,position:A}}return null}getFullLineRangeAtCoord(m){if(this._context.viewLayout.isAfterLines(m)){const D=this._context.viewModel.getLineCount(),I=this._context.viewModel.getLineMaxColumn(D);return{range:new S.Range(D,I,D,I),isAfterLines:!0}}const C=this._context.viewLayout.getLineNumberAtVerticalOffset(m),w=this._context.viewModel.getLineMaxColumn(C);return{range:new S.Range(C,1,C,w),isAfterLines:!1}}getLineNumberAtVerticalOffset(m){return this._context.viewLayout.getLineNumberAtVerticalOffset(m)}isAfterLines(m){return this._context.viewLayout.isAfterLines(m)}isInTopPadding(m){return this._context.viewLayout.isInTopPadding(m)}isInBottomPadding(m){return this._context.viewLayout.isInBottomPadding(m)}getVerticalOffsetForLineNumber(m){return this._context.viewLayout.getVerticalOffsetForLineNumber(m)}findAttribute(m,C){return u._findAttribute(m,C,this._viewHelper.viewDomNode)}static _findAttribute(m,C,w){for(;m&&m!==m.ownerDocument.body;){if(m.hasAttribute&&m.hasAttribute(C))return m.getAttribute(C);if(m===w)return null;m=m.parentNode}return null}getLineWidth(m){return this._viewHelper.getLineWidth(m)}visibleRangeForPosition(m,C){return this._viewHelper.visibleRangeForPosition(m,C)}getPositionFromDOMInfo(m,C){return this._viewHelper.getPositionFromDOMInfo(m,C)}getCurrentScrollTop(){return this._context.viewLayout.getCurrentScrollTop()}getCurrentScrollLeft(){return this._context.viewLayout.getCurrentScrollLeft()}}e.HitTestContext=u;class f{constructor(m,C,w,D){this.editorPos=C,this.pos=w,this.relativePos=D,this.mouseVerticalOffset=Math.max(0,m.getCurrentScrollTop()+this.relativePos.y),this.mouseContentHorizontalOffset=m.getCurrentScrollLeft()+this.relativePos.x-m.layoutInfo.contentLeft,this.isInMarginArea=this.relativePos.x<m.layoutInfo.contentLeft&&this.relativePos.x>=m.layoutInfo.glyphMarginLeft,this.isInContentArea=!this.isInMarginArea,this.mouseColumn=Math.max(0,l._getMouseColumn(this.mouseContentHorizontalOffset,m.typicalHalfwidthCharacterWidth))}}class c extends f{constructor(m,C,w,D,I){super(m,C,w,D),this._ctx=m,I?(this.target=I,this.targetPath=k.PartFingerprints.collect(I,m.viewDomNode)):(this.target=null,this.targetPath=new Uint8Array(0))}toString(){return`pos(${this.pos.x},${this.pos.y}), editorPos(${this.editorPos.x},${this.editorPos.y}), relativePos(${this.relativePos.x},${this.relativePos.y}), mouseVerticalOffset: ${this.mouseVerticalOffset}, mouseContentHorizontalOffset: ${this.mouseContentHorizontalOffset}\n\ttarget: ${this.target?this.target.outerHTML:null}`}_getMouseColumn(m=null){return m&&m.column<this._ctx.viewModel.getLineMaxColumn(m.lineNumber)?p.CursorColumns.visibleColumnFromColumn(this._ctx.viewModel.getLineContent(m.lineNumber),m.column,this._ctx.viewModel.model.getOptions().tabSize)+1:this.mouseColumn}fulfillUnknown(m=null){return t.createUnknown(this.target,this._getMouseColumn(m),m)}fulfillTextarea(){return t.createTextarea(this.target,this._getMouseColumn())}fulfillMargin(m,C,w,D){return t.createMargin(m,this.target,this._getMouseColumn(C),C,w,D)}fulfillViewZone(m,C,w){return t.createViewZone(m,this.target,this._getMouseColumn(C),C,w)}fulfillContentText(m,C,w){return t.createContentText(this.target,this._getMouseColumn(m),m,C,w)}fulfillContentEmpty(m,C){return t.createContentEmpty(this.target,this._getMouseColumn(m),m,C)}fulfillContentWidget(m){return t.createContentWidget(this.target,this._getMouseColumn(),m)}fulfillScrollbar(m){return t.createScrollbar(this.target,this._getMouseColumn(m),m)}fulfillOverlayWidget(m){return t.createOverlayWidget(this.target,this._getMouseColumn(),m)}withTarget(m){return new c(this._ctx,this.editorPos,this.pos,this.relativePos,m)}}const d={isAfterLines:!0};function s(h){return{isAfterLines:!1,horizontalDistanceToText:h}}class l{constructor(m,C){this._context=m,this._viewHelper=C}mouseTargetIsWidget(m){const C=m.target,w=k.PartFingerprints.collect(C,this._viewHelper.viewDomNode);return!!(r.isChildOfContentWidgets(w)||r.isChildOfOverflowingContentWidgets(w)||r.isChildOfOverlayWidgets(w)||r.isChildOfOverflowingOverlayWidgets(w))}createMouseTarget(m,C,w,D,I){const T=new u(this._context,this._viewHelper,m),A=new c(T,C,w,D,I);try{const P=l._createMouseTarget(T,A,!1);if(P.type===6&&T.stickyTabStops&&P.position!==null){const N=l._snapToSoftTabBoundary(P.position,T.viewModel),M=S.Range.fromPositions(N,N).plusRange(P.range);return A.fulfillContentText(N,M,P.detail)}return P}catch{return A.fulfillUnknown()}}static _createMouseTarget(m,C,w){if(C.target===null){if(w)return C.fulfillUnknown();const T=l._doHitTest(m,C);return T.type===1?l.createMouseTargetFromHitTestPosition(m,C,T.spanNode,T.position,T.injectedText):this._createMouseTarget(m,C.withTarget(T.hitTarget),!0)}const D=C;let I=null;return!r.isChildOfOverflowGuard(C.targetPath)&&!r.isChildOfOverflowingContentWidgets(C.targetPath)&&!r.isChildOfOverflowingOverlayWidgets(C.targetPath)&&(I=I||C.fulfillUnknown()),I=I||l._hitTestContentWidget(m,D),I=I||l._hitTestOverlayWidget(m,D),I=I||l._hitTestMinimap(m,D),I=I||l._hitTestScrollbarSlider(m,D),I=I||l._hitTestViewZone(m,D),I=I||l._hitTestMargin(m,D),I=I||l._hitTestViewCursor(m,D),I=I||l._hitTestTextArea(m,D),I=I||l._hitTestViewLines(m,D,w),I=I||l._hitTestScrollbar(m,D),I||C.fulfillUnknown()}static _hitTestContentWidget(m,C){if(r.isChildOfContentWidgets(C.targetPath)||r.isChildOfOverflowingContentWidgets(C.targetPath)){const w=m.findAttribute(C.target,\"widgetId\");return w?C.fulfillContentWidget(w):C.fulfillUnknown()}return null}static _hitTestOverlayWidget(m,C){if(r.isChildOfOverlayWidgets(C.targetPath)||r.isChildOfOverflowingOverlayWidgets(C.targetPath)){const w=m.findAttribute(C.target,\"widgetId\");return w?C.fulfillOverlayWidget(w):C.fulfillUnknown()}return null}static _hitTestViewCursor(m,C){if(C.target){const w=m.lastRenderData.lastViewCursorsRenderData;for(const D of w)if(C.target===D.domNode)return C.fulfillContentText(D.position,null,{mightBeForeignElement:!1,injectedText:null})}if(C.isInContentArea){const w=m.lastRenderData.lastViewCursorsRenderData,D=C.mouseContentHorizontalOffset,I=C.mouseVerticalOffset;for(const T of w){if(D<T.contentLeft||D>T.contentLeft+T.width)continue;const A=m.getVerticalOffsetForLineNumber(T.position.lineNumber);if(A<=I&&I<=A+T.height)return C.fulfillContentText(T.position,null,{mightBeForeignElement:!1,injectedText:null})}}return null}static _hitTestViewZone(m,C){const w=m.getZoneAtCoord(C.mouseVerticalOffset);if(w){const D=C.isInContentArea?8:5;return C.fulfillViewZone(D,w.position,w)}return null}static _hitTestTextArea(m,C){return r.isTextArea(C.targetPath)?m.lastRenderData.lastTextareaPosition?C.fulfillContentText(m.lastRenderData.lastTextareaPosition,null,{mightBeForeignElement:!1,injectedText:null}):C.fulfillTextarea():null}static _hitTestMargin(m,C){if(C.isInMarginArea){const w=m.getFullLineRangeAtCoord(C.mouseVerticalOffset),D=w.range.getStartPosition();let I=Math.abs(C.relativePos.x);const T={isAfterLines:w.isAfterLines,glyphMarginLeft:m.layoutInfo.glyphMarginLeft,glyphMarginWidth:m.layoutInfo.glyphMarginWidth,lineNumbersWidth:m.layoutInfo.lineNumbersWidth,offsetX:I};if(I-=m.layoutInfo.glyphMarginLeft,I<=m.layoutInfo.glyphMarginWidth){const A=m.viewModel.coordinatesConverter.convertViewPositionToModelPosition(w.range.getStartPosition()),P=m.viewModel.glyphLanes.getLanesAtLine(A.lineNumber);return T.glyphMarginLane=P[Math.floor(I/m.lineHeight)],C.fulfillMargin(2,D,w.range,T)}return I-=m.layoutInfo.glyphMarginWidth,I<=m.layoutInfo.lineNumbersWidth?C.fulfillMargin(3,D,w.range,T):(I-=m.layoutInfo.lineNumbersWidth,C.fulfillMargin(4,D,w.range,T))}return null}static _hitTestViewLines(m,C,w){if(!r.isChildOfViewLines(C.targetPath))return null;if(m.isInTopPadding(C.mouseVerticalOffset))return C.fulfillContentEmpty(new E.Position(1,1),d);if(m.isAfterLines(C.mouseVerticalOffset)||m.isInBottomPadding(C.mouseVerticalOffset)){const I=m.viewModel.getLineCount(),T=m.viewModel.getLineMaxColumn(I);return C.fulfillContentEmpty(new E.Position(I,T),d)}if(w){if(r.isStrictChildOfViewLines(C.targetPath)){const I=m.getLineNumberAtVerticalOffset(C.mouseVerticalOffset);if(m.viewModel.getLineLength(I)===0){const A=m.getLineWidth(I),P=s(C.mouseContentHorizontalOffset-A);return C.fulfillContentEmpty(new E.Position(I,1),P)}const T=m.getLineWidth(I);if(C.mouseContentHorizontalOffset>=T){const A=s(C.mouseContentHorizontalOffset-T),P=new E.Position(I,m.viewModel.getLineMaxColumn(I));return C.fulfillContentEmpty(P,A)}}return C.fulfillUnknown()}const D=l._doHitTest(m,C);return D.type===1?l.createMouseTargetFromHitTestPosition(m,C,D.spanNode,D.position,D.injectedText):this._createMouseTarget(m,C.withTarget(D.hitTarget),!0)}static _hitTestMinimap(m,C){if(r.isChildOfMinimap(C.targetPath)){const w=m.getLineNumberAtVerticalOffset(C.mouseVerticalOffset),D=m.viewModel.getLineMaxColumn(w);return C.fulfillScrollbar(new E.Position(w,D))}return null}static _hitTestScrollbarSlider(m,C){if(r.isChildOfScrollableElement(C.targetPath)&&C.target&&C.target.nodeType===1){const w=C.target.className;if(w&&/\\b(slider|scrollbar)\\b/.test(w)){const D=m.getLineNumberAtVerticalOffset(C.mouseVerticalOffset),I=m.viewModel.getLineMaxColumn(D);return C.fulfillScrollbar(new E.Position(D,I))}}return null}static _hitTestScrollbar(m,C){if(r.isChildOfScrollableElement(C.targetPath)){const w=m.getLineNumberAtVerticalOffset(C.mouseVerticalOffset),D=m.viewModel.getLineMaxColumn(w);return C.fulfillScrollbar(new E.Position(w,D))}return null}getMouseColumn(m){const C=this._context.configuration.options,w=C.get(143),D=this._context.viewLayout.getCurrentScrollLeft()+m.x-w.contentLeft;return l._getMouseColumn(D,C.get(50).typicalHalfwidthCharacterWidth)}static _getMouseColumn(m,C){return m<0?1:Math.round(m/C)+1}static createMouseTargetFromHitTestPosition(m,C,w,D,I){const T=D.lineNumber,A=D.column,P=m.getLineWidth(T);if(C.mouseContentHorizontalOffset>P){const K=s(C.mouseContentHorizontalOffset-P);return C.fulfillContentEmpty(D,K)}const N=m.visibleRangeForPosition(T,A);if(!N)return C.fulfillUnknown(D);const M=N.left;if(Math.abs(C.mouseContentHorizontalOffset-M)<1)return C.fulfillContentText(D,null,{mightBeForeignElement:!!I,injectedText:I});const R=[];if(R.push({offset:N.left,column:A}),A>1){const K=m.visibleRangeForPosition(T,A-1);K&&R.push({offset:K.left,column:A-1})}const x=m.viewModel.getLineMaxColumn(T);if(A<x){const K=m.visibleRangeForPosition(T,A+1);K&&R.push({offset:K.left,column:A+1})}R.sort((K,F)=>K.offset-F.offset);const O=C.pos.toClientCoordinates(_.getWindow(m.viewDomNode)),B=w.getBoundingClientRect(),W=B.left<=O.clientX&&O.clientX<=B.right;let V=null;for(let K=1;K<R.length;K++){const F=R[K-1],q=R[K];if(F.offset<=C.mouseContentHorizontalOffset&&C.mouseContentHorizontalOffset<=q.offset){V=new S.Range(T,F.column,T,q.column);const ie=Math.abs(F.offset-C.mouseContentHorizontalOffset),ae=Math.abs(q.offset-C.mouseContentHorizontalOffset);D=ie<ae?new E.Position(T,F.column):new E.Position(T,q.column);break}}return C.fulfillContentText(D,V,{mightBeForeignElement:!W||!!I,injectedText:I})}static _doHitTestWithCaretRangeFromPoint(m,C){const w=m.getLineNumberAtVerticalOffset(C.mouseVerticalOffset),D=m.getVerticalOffsetForLineNumber(w),I=D+m.lineHeight;if(!(w===m.viewModel.getLineCount()&&C.mouseVerticalOffset>I)){const A=Math.floor((D+I)/2);let P=C.pos.y+(A-C.mouseVerticalOffset);P<=C.editorPos.y&&(P=C.editorPos.y+1),P>=C.editorPos.y+C.editorPos.height&&(P=C.editorPos.y+C.editorPos.height-1);const N=new L.PageCoordinates(C.pos.x,P),M=this._actualDoHitTestWithCaretRangeFromPoint(m,N.toClientCoordinates(_.getWindow(m.viewDomNode)));if(M.type===1)return M}return this._actualDoHitTestWithCaretRangeFromPoint(m,C.pos.toClientCoordinates(_.getWindow(m.viewDomNode)))}static _actualDoHitTestWithCaretRangeFromPoint(m,C){const w=_.getShadowRoot(m.viewDomNode);let D;if(w?typeof w.caretRangeFromPoint>\"u\"?D=o(w,C.clientX,C.clientY):D=w.caretRangeFromPoint(C.clientX,C.clientY):D=m.viewDomNode.ownerDocument.caretRangeFromPoint(C.clientX,C.clientY),!D||!D.startContainer)return new b;const I=D.startContainer;if(I.nodeType===I.TEXT_NODE){const T=I.parentNode,A=T?T.parentNode:null,P=A?A.parentNode:null;return(P&&P.nodeType===P.ELEMENT_NODE?P.className:null)===y.ViewLine.CLASS_NAME?i.createFromDOMInfo(m,T,D.startOffset):new b(I.parentNode)}else if(I.nodeType===I.ELEMENT_NODE){const T=I.parentNode,A=T?T.parentNode:null;return(A&&A.nodeType===A.ELEMENT_NODE?A.className:null)===y.ViewLine.CLASS_NAME?i.createFromDOMInfo(m,I,I.textContent.length):new b(I)}return new b}static _doHitTestWithCaretPositionFromPoint(m,C){const w=m.viewDomNode.ownerDocument.caretPositionFromPoint(C.clientX,C.clientY);if(w.offsetNode.nodeType===w.offsetNode.TEXT_NODE){const D=w.offsetNode.parentNode,I=D?D.parentNode:null,T=I?I.parentNode:null;return(T&&T.nodeType===T.ELEMENT_NODE?T.className:null)===y.ViewLine.CLASS_NAME?i.createFromDOMInfo(m,w.offsetNode.parentNode,w.offset):new b(w.offsetNode.parentNode)}if(w.offsetNode.nodeType===w.offsetNode.ELEMENT_NODE){const D=w.offsetNode.parentNode,I=D&&D.nodeType===D.ELEMENT_NODE?D.className:null,T=D?D.parentNode:null,A=T&&T.nodeType===T.ELEMENT_NODE?T.className:null;if(I===y.ViewLine.CLASS_NAME){const P=w.offsetNode.childNodes[Math.min(w.offset,w.offsetNode.childNodes.length-1)];if(P)return i.createFromDOMInfo(m,P,0)}else if(A===y.ViewLine.CLASS_NAME)return i.createFromDOMInfo(m,w.offsetNode,0)}return new b(w.offsetNode)}static _snapToSoftTabBoundary(m,C){const w=C.getLineContent(m.lineNumber),{tabSize:D}=C.model.getOptions(),I=v.AtomicTabMoveOperations.atomicPosition(w,m.column-1,D,2);return I!==-1?new E.Position(m.lineNumber,I+1):m}static _doHitTest(m,C){let w=new b;if(typeof m.viewDomNode.ownerDocument.caretRangeFromPoint==\"function\"?w=this._doHitTestWithCaretRangeFromPoint(m,C):m.viewDomNode.ownerDocument.caretPositionFromPoint&&(w=this._doHitTestWithCaretPositionFromPoint(m,C.pos.toClientCoordinates(_.getWindow(m.viewDomNode)))),w.type===1){const D=m.viewModel.getInjectedTextAt(w.position),I=m.viewModel.normalizePosition(w.position,2);(D||!I.equals(w.position))&&(w=new a(I,w.spanNode,D))}return w}}e.MouseTargetFactory=l;function o(h,m,C){const w=document.createRange();let D=h.elementFromPoint(m,C);if(D!==null){for(;D&&D.firstChild&&D.firstChild.nodeType!==D.firstChild.TEXT_NODE&&D.lastChild&&D.lastChild.firstChild;)D=D.lastChild;const I=D.getBoundingClientRect(),T=_.getWindow(D),A=T.getComputedStyle(D,null).getPropertyValue(\"font-style\"),P=T.getComputedStyle(D,null).getPropertyValue(\"font-variant\"),N=T.getComputedStyle(D,null).getPropertyValue(\"font-weight\"),M=T.getComputedStyle(D,null).getPropertyValue(\"font-size\"),R=T.getComputedStyle(D,null).getPropertyValue(\"line-height\"),x=T.getComputedStyle(D,null).getPropertyValue(\"font-family\"),O=`${A} ${P} ${N} ${M}/${R} ${x}`,B=D.innerText;let W=I.left,V=0,K;if(m>I.left+I.width)V=B.length;else{const F=g.getInstance();for(let q=0;q<B.length+1;q++){if(K=F.getCharWidth(B.charAt(q),O)/2,W+=K,m<W){V=q;break}W+=K}}w.setStart(D.firstChild,V),w.setEnd(D.firstChild,V)}return w}class g{static getInstance(){return g._INSTANCE||(g._INSTANCE=new g),g._INSTANCE}constructor(){this._cache={},this._canvas=document.createElement(\"canvas\")}getCharWidth(m,C){const w=m+C;if(this._cache[w])return this._cache[w];const D=this._canvas.getContext(\"2d\");D.font=C;const T=D.measureText(m).width;return this._cache[w]=T,T}}g._INSTANCE=null}),define(se[847],oe([1,0,7,67,2,17,365,167,149,10,24,154,77]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MouseHandler=void 0;class n extends a.ViewEventHandler{constructor(d,s,l){super(),this._mouseLeaveMonitor=null,this._context=d,this.viewController=s,this.viewHelper=l,this.mouseTargetFactory=new S.MouseTargetFactory(this._context,l),this._mouseDownOperation=this._register(new t(this._context,this.viewController,this.viewHelper,this.mouseTargetFactory,(h,m)=>this._createMouseTarget(h,m),h=>this._getMouseColumn(h))),this.lastMouseLeaveTime=-1,this._height=this._context.configuration.options.get(143).height;const o=new p.EditorMouseEventFactory(this.viewHelper.viewDomNode);this._register(o.onContextMenu(this.viewHelper.viewDomNode,h=>this._onContextMenu(h,!0))),this._register(o.onMouseMove(this.viewHelper.viewDomNode,h=>{this._onMouseMove(h),this._mouseLeaveMonitor||(this._mouseLeaveMonitor=L.addDisposableListener(this.viewHelper.viewDomNode.ownerDocument,\"mousemove\",m=>{this.viewHelper.viewDomNode.contains(m.target)||this._onMouseLeave(new p.EditorMouseEvent(m,!1,this.viewHelper.viewDomNode))}))})),this._register(o.onMouseUp(this.viewHelper.viewDomNode,h=>this._onMouseUp(h))),this._register(o.onMouseLeave(this.viewHelper.viewDomNode,h=>this._onMouseLeave(h)));let g=0;this._register(o.onPointerDown(this.viewHelper.viewDomNode,(h,m)=>{g=m})),this._register(L.addDisposableListener(this.viewHelper.viewDomNode,L.EventType.POINTER_UP,h=>{this._mouseDownOperation.onPointerUp()})),this._register(o.onMouseDown(this.viewHelper.viewDomNode,h=>this._onMouseDown(h,g))),this._setupMouseWheelZoomListener(),this._context.addEventHandler(this)}_setupMouseWheelZoomListener(){const d=i.MouseWheelClassifier.INSTANCE;let s=0,l=_.EditorZoom.getZoomLevel(),o=!1,g=0;const h=C=>{if(this.viewController.emitMouseWheel(C),!this._context.configuration.options.get(75))return;const w=new k.StandardWheelEvent(C);if(d.acceptStandardWheelEvent(w),d.isPhysicalMouseWheel()){if(m(C)){const D=_.EditorZoom.getZoomLevel(),I=w.deltaY>0?1:-1;_.EditorZoom.setZoomLevel(D+I),w.preventDefault(),w.stopPropagation()}}else Date.now()-s>50&&(l=_.EditorZoom.getZoomLevel(),o=m(C),g=0),s=Date.now(),g+=w.deltaY,o&&(_.EditorZoom.setZoomLevel(l+g/5),w.preventDefault(),w.stopPropagation())};this._register(L.addDisposableListener(this.viewHelper.viewDomNode,L.EventType.MOUSE_WHEEL,h,{capture:!0,passive:!1}));function m(C){return E.isMacintosh?(C.metaKey||C.ctrlKey)&&!C.shiftKey&&!C.altKey:C.ctrlKey&&!C.metaKey&&!C.shiftKey&&!C.altKey}}dispose(){this._context.removeEventHandler(this),this._mouseLeaveMonitor&&(this._mouseLeaveMonitor.dispose(),this._mouseLeaveMonitor=null),super.dispose()}onConfigurationChanged(d){if(d.hasChanged(143)){const s=this._context.configuration.options.get(143).height;this._height!==s&&(this._height=s,this._mouseDownOperation.onHeightChanged())}return!1}onCursorStateChanged(d){return this._mouseDownOperation.onCursorStateChanged(d),!1}onFocusChanged(d){return!1}getTargetAtClientPoint(d,s){const o=new p.ClientCoordinates(d,s).toPageCoordinates(L.getWindow(this.viewHelper.viewDomNode)),g=(0,p.createEditorPagePosition)(this.viewHelper.viewDomNode);if(o.y<g.y||o.y>g.y+g.height||o.x<g.x||o.x>g.x+g.width)return null;const h=(0,p.createCoordinatesRelativeToEditor)(this.viewHelper.viewDomNode,g,o);return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),g,o,h,null)}_createMouseTarget(d,s){let l=d.target;if(!this.viewHelper.viewDomNode.contains(l)){const o=L.getShadowRoot(this.viewHelper.viewDomNode);o&&(l=o.elementsFromPoint(d.posx,d.posy).find(g=>this.viewHelper.viewDomNode.contains(g)))}return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),d.editorPos,d.pos,d.relativePos,s?l:null)}_getMouseColumn(d){return this.mouseTargetFactory.getMouseColumn(d.relativePos)}_onContextMenu(d,s){this.viewController.emitContextMenu({event:d,target:this._createMouseTarget(d,s)})}_onMouseMove(d){this.mouseTargetFactory.mouseTargetIsWidget(d)||d.preventDefault(),!(this._mouseDownOperation.isActive()||d.timestamp<this.lastMouseLeaveTime)&&this.viewController.emitMouseMove({event:d,target:this._createMouseTarget(d,!0)})}_onMouseLeave(d){this._mouseLeaveMonitor&&(this._mouseLeaveMonitor.dispose(),this._mouseLeaveMonitor=null),this.lastMouseLeaveTime=new Date().getTime(),this.viewController.emitMouseLeave({event:d,target:null})}_onMouseUp(d){this.viewController.emitMouseUp({event:d,target:this._createMouseTarget(d,!0)})}_onMouseDown(d,s){const l=this._createMouseTarget(d,!0),o=l.type===6||l.type===7,g=l.type===2||l.type===3||l.type===4,h=l.type===3,m=this._context.configuration.options.get(108),C=l.type===8||l.type===5,w=l.type===9;let D=d.leftButton||d.middleButton;E.isMacintosh&&d.leftButton&&d.ctrlKey&&(D=!1);const I=()=>{d.preventDefault(),this.viewHelper.focusTextArea()};if(D&&(o||h&&m))I(),this._mouseDownOperation.start(l.type,d,s);else if(g)d.preventDefault();else if(C){const T=l.detail;D&&this.viewHelper.shouldSuppressMouseDownOnViewZone(T.viewZoneId)&&(I(),this._mouseDownOperation.start(l.type,d,s),d.preventDefault())}else w&&this.viewHelper.shouldSuppressMouseDownOnWidget(l.detail)&&(I(),d.preventDefault());this.viewController.emitMouseDown({event:d,target:l})}}e.MouseHandler=n;class t extends y.Disposable{constructor(d,s,l,o,g,h){super(),this._context=d,this._viewController=s,this._viewHelper=l,this._mouseTargetFactory=o,this._createMouseTarget=g,this._getMouseColumn=h,this._mouseMoveMonitor=this._register(new p.GlobalEditorPointerMoveMonitor(this._viewHelper.viewDomNode)),this._topBottomDragScrolling=this._register(new r(this._context,this._viewHelper,this._mouseTargetFactory,(m,C,w)=>this._dispatchMouse(m,C,w))),this._mouseState=new f,this._currentSelection=new b.Selection(1,1,1,1),this._isActive=!1,this._lastMouseEvent=null}dispose(){super.dispose()}isActive(){return this._isActive}_onMouseDownThenMove(d){this._lastMouseEvent=d,this._mouseState.setModifiers(d);const s=this._findMousePosition(d,!1);s&&(this._mouseState.isDragAndDrop?this._viewController.emitMouseDrag({event:d,target:s}):s.type===13&&(s.outsidePosition===\"above\"||s.outsidePosition===\"below\")?this._topBottomDragScrolling.start(s,d):(this._topBottomDragScrolling.stop(),this._dispatchMouse(s,!0,1)))}start(d,s,l){this._lastMouseEvent=s,this._mouseState.setStartedOnLineNumbers(d===3),this._mouseState.setStartButtons(s),this._mouseState.setModifiers(s);const o=this._findMousePosition(s,!0);if(!o||!o.position)return;this._mouseState.trySetCount(s.detail,o.position),s.detail=this._mouseState.count;const g=this._context.configuration.options;if(!g.get(90)&&g.get(35)&&!g.get(22)&&!this._mouseState.altKey&&s.detail<2&&!this._isActive&&!this._currentSelection.isEmpty()&&o.type===6&&o.position&&this._currentSelection.containsPosition(o.position)){this._mouseState.isDragAndDrop=!0,this._isActive=!0,this._mouseMoveMonitor.startMonitoring(this._viewHelper.viewLinesDomNode,l,s.buttons,h=>this._onMouseDownThenMove(h),h=>{const m=this._findMousePosition(this._lastMouseEvent,!1);L.isKeyboardEvent(h)?this._viewController.emitMouseDropCanceled():this._viewController.emitMouseDrop({event:this._lastMouseEvent,target:m?this._createMouseTarget(this._lastMouseEvent,!0):null}),this._stop()});return}this._mouseState.isDragAndDrop=!1,this._dispatchMouse(o,s.shiftKey,1),this._isActive||(this._isActive=!0,this._mouseMoveMonitor.startMonitoring(this._viewHelper.viewLinesDomNode,l,s.buttons,h=>this._onMouseDownThenMove(h),()=>this._stop()))}_stop(){this._isActive=!1,this._topBottomDragScrolling.stop()}onHeightChanged(){this._mouseMoveMonitor.stopMonitoring()}onPointerUp(){this._mouseMoveMonitor.stopMonitoring()}onCursorStateChanged(d){this._currentSelection=d.selections[0]}_getPositionOutsideEditor(d){const s=d.editorPos,l=this._context.viewModel,o=this._context.viewLayout,g=this._getMouseColumn(d);if(d.posy<s.y){const m=s.y-d.posy,C=Math.max(o.getCurrentScrollTop()-m,0),w=S.HitTestContext.getZoneAtCoord(this._context,C);if(w){const I=this._helpPositionJumpOverViewZone(w);if(I)return S.MouseTarget.createOutsideEditor(g,I,\"above\",m)}const D=o.getLineNumberAtVerticalOffset(C);return S.MouseTarget.createOutsideEditor(g,new v.Position(D,1),\"above\",m)}if(d.posy>s.y+s.height){const m=d.posy-s.y-s.height,C=o.getCurrentScrollTop()+d.relativePos.y,w=S.HitTestContext.getZoneAtCoord(this._context,C);if(w){const I=this._helpPositionJumpOverViewZone(w);if(I)return S.MouseTarget.createOutsideEditor(g,I,\"below\",m)}const D=o.getLineNumberAtVerticalOffset(C);return S.MouseTarget.createOutsideEditor(g,new v.Position(D,l.getLineMaxColumn(D)),\"below\",m)}const h=o.getLineNumberAtVerticalOffset(o.getCurrentScrollTop()+d.relativePos.y);if(d.posx<s.x){const m=s.x-d.posx;return S.MouseTarget.createOutsideEditor(g,new v.Position(h,1),\"left\",m)}if(d.posx>s.x+s.width){const m=d.posx-s.x-s.width;return S.MouseTarget.createOutsideEditor(g,new v.Position(h,l.getLineMaxColumn(h)),\"right\",m)}return null}_findMousePosition(d,s){const l=this._getPositionOutsideEditor(d);if(l)return l;const o=this._createMouseTarget(d,s);if(!o.position)return null;if(o.type===8||o.type===5){const h=this._helpPositionJumpOverViewZone(o.detail);if(h)return S.MouseTarget.createViewZone(o.type,o.element,o.mouseColumn,h,o.detail)}return o}_helpPositionJumpOverViewZone(d){const s=new v.Position(this._currentSelection.selectionStartLineNumber,this._currentSelection.selectionStartColumn),l=d.positionBefore,o=d.positionAfter;return l&&o?l.isBefore(s)?l:o:null}_dispatchMouse(d,s,l){d.position&&this._viewController.dispatchMouse({position:d.position,mouseColumn:d.mouseColumn,startedOnLineNumbers:this._mouseState.startedOnLineNumbers,revealType:l,inSelectionMode:s,mouseDownCount:this._mouseState.count,altKey:this._mouseState.altKey,ctrlKey:this._mouseState.ctrlKey,metaKey:this._mouseState.metaKey,shiftKey:this._mouseState.shiftKey,leftButton:this._mouseState.leftButton,middleButton:this._mouseState.middleButton,onInjectedText:d.type===6&&d.detail.injectedText!==null})}}class r extends y.Disposable{constructor(d,s,l,o){super(),this._context=d,this._viewHelper=s,this._mouseTargetFactory=l,this._dispatchMouse=o,this._operation=null}dispose(){super.dispose(),this.stop()}start(d,s){this._operation?this._operation.setPosition(d,s):this._operation=new u(this._context,this._viewHelper,this._mouseTargetFactory,this._dispatchMouse,d,s)}stop(){this._operation&&(this._operation.dispose(),this._operation=null)}}class u extends y.Disposable{constructor(d,s,l,o,g,h){super(),this._context=d,this._viewHelper=s,this._mouseTargetFactory=l,this._dispatchMouse=o,this._position=g,this._mouseEvent=h,this._lastTime=Date.now(),this._animationFrameDisposable=L.scheduleAtNextAnimationFrame(L.getWindow(h.browserEvent),()=>this._execute())}dispose(){this._animationFrameDisposable.dispose(),super.dispose()}setPosition(d,s){this._position=d,this._mouseEvent=s}_tick(){const d=Date.now(),s=d-this._lastTime;return this._lastTime=d,s}_getScrollSpeed(){const d=this._context.configuration.options.get(66),s=this._context.configuration.options.get(143).height/d,l=this._position.outsideDistance/d;return l<=1.5?Math.max(30,s*(1+l)):l<=3?Math.max(60,s*(2+l)):Math.max(200,s*(7+l))}_execute(){const d=this._context.configuration.options.get(66),s=this._getScrollSpeed(),l=this._tick(),o=s*(l/1e3)*d,g=this._position.outsidePosition===\"above\"?-o:o;this._context.viewModel.viewLayout.deltaScrollNow(0,g),this._viewHelper.renderNow();const h=this._context.viewLayout.getLinesViewportData(),m=this._position.outsidePosition===\"above\"?h.startLineNumber:h.endLineNumber;let C;{const w=(0,p.createEditorPagePosition)(this._viewHelper.viewDomNode),D=this._context.configuration.options.get(143).horizontalScrollbarHeight,I=new p.PageCoordinates(this._mouseEvent.pos.x,w.y+w.height-D-.1),T=(0,p.createCoordinatesRelativeToEditor)(this._viewHelper.viewDomNode,w,I);C=this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(),w,I,T,null)}(!C.position||C.position.lineNumber!==m)&&(this._position.outsidePosition===\"above\"?C=S.MouseTarget.createOutsideEditor(this._position.mouseColumn,new v.Position(m,1),\"above\",this._position.outsideDistance):C=S.MouseTarget.createOutsideEditor(this._position.mouseColumn,new v.Position(m,this._context.viewModel.getLineMaxColumn(m)),\"below\",this._position.outsideDistance)),this._dispatchMouse(C,!0,2),this._animationFrameDisposable=L.scheduleAtNextAnimationFrame(L.getWindow(C.element),()=>this._execute())}}class f{get altKey(){return this._altKey}get ctrlKey(){return this._ctrlKey}get metaKey(){return this._metaKey}get shiftKey(){return this._shiftKey}get leftButton(){return this._leftButton}get middleButton(){return this._middleButton}get startedOnLineNumbers(){return this._startedOnLineNumbers}constructor(){this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._leftButton=!1,this._middleButton=!1,this._startedOnLineNumbers=!1,this._lastMouseDownPosition=null,this._lastMouseDownPositionEqualCount=0,this._lastMouseDownCount=0,this._lastSetMouseDownCountTime=0,this.isDragAndDrop=!1}get count(){return this._lastMouseDownCount}setModifiers(d){this._altKey=d.altKey,this._ctrlKey=d.ctrlKey,this._metaKey=d.metaKey,this._shiftKey=d.shiftKey}setStartButtons(d){this._leftButton=d.leftButton,this._middleButton=d.middleButton}setStartedOnLineNumbers(d){this._startedOnLineNumbers=d}trySetCount(d,s){const l=new Date().getTime();l-this._lastSetMouseDownCountTime>f.CLEAR_MOUSE_DOWN_COUNT_TIME&&(d=1),this._lastSetMouseDownCountTime=l,d>this._lastMouseDownCount+1&&(d=this._lastMouseDownCount+1),this._lastMouseDownPosition&&this._lastMouseDownPosition.equals(s)?this._lastMouseDownPositionEqualCount++:this._lastMouseDownPositionEqualCount=1,this._lastMouseDownPosition=s,this._lastMouseDownCount=Math.min(d,this._lastMouseDownPositionEqualCount)}}f.CLEAR_MOUSE_DOWN_COUNT_TIME=400}),define(se[848],oe([1,0,219,7,63,44,2,17,847,190,167]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PointerHandler=e.PointerEventHandler=void 0;class a extends _.MouseHandler{constructor(r,u,f){super(r,u,f),this._register(y.Gesture.addTarget(this.viewHelper.linesContentDomNode)),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Tap,d=>this.onTap(d))),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Change,d=>this.onChange(d))),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Contextmenu,d=>this._onContextMenu(new b.EditorMouseEvent(d,!1,this.viewHelper.viewDomNode),!1))),this._lastPointerType=\"mouse\",this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,\"pointerdown\",d=>{const s=d.pointerType;if(s===\"mouse\"){this._lastPointerType=\"mouse\";return}else s===\"touch\"?this._lastPointerType=\"touch\":this._lastPointerType=\"pen\"}));const c=new b.EditorPointerEventFactory(this.viewHelper.viewDomNode);this._register(c.onPointerMove(this.viewHelper.viewDomNode,d=>this._onMouseMove(d))),this._register(c.onPointerUp(this.viewHelper.viewDomNode,d=>this._onMouseUp(d))),this._register(c.onPointerLeave(this.viewHelper.viewDomNode,d=>this._onMouseLeave(d))),this._register(c.onPointerDown(this.viewHelper.viewDomNode,(d,s)=>this._onMouseDown(d,s)))}onTap(r){!r.initialTarget||!this.viewHelper.linesContentDomNode.contains(r.initialTarget)||(r.preventDefault(),this.viewHelper.focusTextArea(),this._dispatchGesture(r,!1))}onChange(r){this._lastPointerType===\"touch\"&&this._context.viewModel.viewLayout.deltaScrollNow(-r.translationX,-r.translationY),this._lastPointerType===\"pen\"&&this._dispatchGesture(r,!0)}_dispatchGesture(r,u){const f=this._createMouseTarget(new b.EditorMouseEvent(r,!1,this.viewHelper.viewDomNode),!1);f.position&&this.viewController.dispatchMouse({position:f.position,mouseColumn:f.position.column,startedOnLineNumbers:!1,revealType:1,mouseDownCount:r.tapCount,inSelectionMode:u,altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1,leftButton:!1,middleButton:!1,onInjectedText:f.type===6&&f.detail.injectedText!==null})}_onMouseDown(r,u){r.browserEvent.pointerType!==\"touch\"&&super._onMouseDown(r,u)}}e.PointerEventHandler=a;class i extends _.MouseHandler{constructor(r,u,f){super(r,u,f),this._register(y.Gesture.addTarget(this.viewHelper.linesContentDomNode)),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Tap,c=>this.onTap(c))),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Change,c=>this.onChange(c))),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Contextmenu,c=>this._onContextMenu(new b.EditorMouseEvent(c,!1,this.viewHelper.viewDomNode),!1)))}onTap(r){r.preventDefault(),this.viewHelper.focusTextArea();const u=this._createMouseTarget(new b.EditorMouseEvent(r,!1,this.viewHelper.viewDomNode),!1);if(u.position){const f=document.createEvent(\"CustomEvent\");f.initEvent(v.TextAreaSyntethicEvents.Tap,!1,!0),this.viewHelper.dispatchTextAreaEvent(f),this.viewController.moveTo(u.position,1)}}onChange(r){this._context.viewModel.viewLayout.deltaScrollNow(-r.translationX,-r.translationY)}}class n extends S.Disposable{constructor(r,u,f){super(),(p.isIOS||p.isAndroid&&p.isMobile)&&L.BrowserFeatures.pointerEvents?this.handler=this._register(new a(r,u,f)):E.mainWindow.TouchEvent?this.handler=this._register(new i(r,u,f)):this.handler=this._register(new _.MouseHandler(r,u,f))}getTargetAtClientPoint(r,u){return this.handler.getTargetAtClientPoint(r,u)}}e.PointerHandler=n}),define(se[849],oe([1,0,200,14,17,72,148,233,56,493,255,10,5,436]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewLines=void 0;class n{constructor(){this._currentVisibleRange=new i.Range(1,1,1,1)}getCurrentVisibleRange(){return this._currentVisibleRange}setCurrentVisibleRange(c){this._currentVisibleRange=c}}class t{constructor(c,d,s,l,o,g,h){this.minimalReveal=c,this.lineNumber=d,this.startColumn=s,this.endColumn=l,this.startScrollTop=o,this.stopScrollTop=g,this.scrollType=h,this.type=\"range\",this.minLineNumber=d,this.maxLineNumber=d}}class r{constructor(c,d,s,l,o){this.minimalReveal=c,this.selections=d,this.startScrollTop=s,this.stopScrollTop=l,this.scrollType=o,this.type=\"selections\";let g=d[0].startLineNumber,h=d[0].endLineNumber;for(let m=1,C=d.length;m<C;m++){const w=d[m];g=Math.min(g,w.startLineNumber),h=Math.max(h,w.endLineNumber)}this.minLineNumber=g,this.maxLineNumber=h}}class u extends _.ViewPart{constructor(c,d){super(c),this._linesContent=d,this._textRangeRestingSpot=document.createElement(\"div\"),this._visibleLines=new p.VisibleLinesCollection(this),this.domNode=this._visibleLines.domNode;const s=this._context.configuration,l=this._context.configuration.options,o=l.get(50),g=l.get(144);this._lineHeight=l.get(66),this._typicalHalfwidthCharacterWidth=o.typicalHalfwidthCharacterWidth,this._isViewportWrapping=g.isViewportWrapping,this._revealHorizontalRightPadding=l.get(99),this._cursorSurroundingLines=l.get(29),this._cursorSurroundingLinesStyle=l.get(30),this._canUseLayerHinting=!l.get(32),this._viewLineOptions=new b.ViewLineOptions(s,this._context.theme.type),_.PartFingerprints.write(this.domNode,8),this.domNode.setClassName(`view-lines ${L.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`),(0,E.applyFontInfo)(this.domNode,o),this._maxLineWidth=0,this._asyncUpdateLineWidths=new k.RunOnceScheduler(()=>{this._updateLineWidthsSlow()},200),this._asyncCheckMonospaceFontAssumptions=new k.RunOnceScheduler(()=>{this._checkMonospaceFontAssumptions()},2e3),this._lastRenderedData=new n,this._horizontalRevealRequest=null,this._stickyScrollEnabled=l.get(114).enabled,this._maxNumberStickyLines=l.get(114).maxLineCount}dispose(){this._asyncUpdateLineWidths.dispose(),this._asyncCheckMonospaceFontAssumptions.dispose(),super.dispose()}getDomNode(){return this.domNode}createVisibleLine(){return new b.ViewLine(this._viewLineOptions)}onConfigurationChanged(c){this._visibleLines.onConfigurationChanged(c),c.hasChanged(144)&&(this._maxLineWidth=0);const d=this._context.configuration.options,s=d.get(50),l=d.get(144);return this._lineHeight=d.get(66),this._typicalHalfwidthCharacterWidth=s.typicalHalfwidthCharacterWidth,this._isViewportWrapping=l.isViewportWrapping,this._revealHorizontalRightPadding=d.get(99),this._cursorSurroundingLines=d.get(29),this._cursorSurroundingLinesStyle=d.get(30),this._canUseLayerHinting=!d.get(32),this._stickyScrollEnabled=d.get(114).enabled,this._maxNumberStickyLines=d.get(114).maxLineCount,(0,E.applyFontInfo)(this.domNode,s),this._onOptionsMaybeChanged(),c.hasChanged(143)&&(this._maxLineWidth=0),!0}_onOptionsMaybeChanged(){const c=this._context.configuration,d=new b.ViewLineOptions(c,this._context.theme.type);if(!this._viewLineOptions.equals(d)){this._viewLineOptions=d;const s=this._visibleLines.getStartLineNumber(),l=this._visibleLines.getEndLineNumber();for(let o=s;o<=l;o++)this._visibleLines.getVisibleLine(o).onOptionsChanged(this._viewLineOptions);return!0}return!1}onCursorStateChanged(c){const d=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();let l=!1;for(let o=d;o<=s;o++)l=this._visibleLines.getVisibleLine(o).onSelectionChanged()||l;return l}onDecorationsChanged(c){{const d=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();for(let l=d;l<=s;l++)this._visibleLines.getVisibleLine(l).onDecorationsChanged()}return!0}onFlushed(c){const d=this._visibleLines.onFlushed(c);return this._maxLineWidth=0,d}onLinesChanged(c){return this._visibleLines.onLinesChanged(c)}onLinesDeleted(c){return this._visibleLines.onLinesDeleted(c)}onLinesInserted(c){return this._visibleLines.onLinesInserted(c)}onRevealRangeRequest(c){const d=this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(),c.source,c.minimalReveal,c.range,c.selections,c.verticalType);if(d===-1)return!1;let s=this._context.viewLayout.validateScrollPosition({scrollTop:d});c.revealHorizontal?c.range&&c.range.startLineNumber!==c.range.endLineNumber?s={scrollTop:s.scrollTop,scrollLeft:0}:c.range?this._horizontalRevealRequest=new t(c.minimalReveal,c.range.startLineNumber,c.range.startColumn,c.range.endColumn,this._context.viewLayout.getCurrentScrollTop(),s.scrollTop,c.scrollType):c.selections&&c.selections.length>0&&(this._horizontalRevealRequest=new r(c.minimalReveal,c.selections,this._context.viewLayout.getCurrentScrollTop(),s.scrollTop,c.scrollType)):this._horizontalRevealRequest=null;const o=Math.abs(this._context.viewLayout.getCurrentScrollTop()-s.scrollTop)<=this._lineHeight?1:c.scrollType;return this._context.viewModel.viewLayout.setScrollPosition(s,o),!0}onScrollChanged(c){if(this._horizontalRevealRequest&&c.scrollLeftChanged&&(this._horizontalRevealRequest=null),this._horizontalRevealRequest&&c.scrollTopChanged){const d=Math.min(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop),s=Math.max(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop);(c.scrollTop<d||c.scrollTop>s)&&(this._horizontalRevealRequest=null)}return this.domNode.setWidth(c.scrollWidth),this._visibleLines.onScrollChanged(c)||!0}onTokensChanged(c){return this._visibleLines.onTokensChanged(c)}onZonesChanged(c){return this._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth),this._visibleLines.onZonesChanged(c)}onThemeChanged(c){return this._onOptionsMaybeChanged()}getPositionFromDOMInfo(c,d){const s=this._getViewLineDomNode(c);if(s===null)return null;const l=this._getLineNumberFor(s);if(l===-1||l<1||l>this._context.viewModel.getLineCount())return null;if(this._context.viewModel.getLineMaxColumn(l)===1)return new a.Position(l,1);const o=this._visibleLines.getStartLineNumber(),g=this._visibleLines.getEndLineNumber();if(l<o||l>g)return null;let h=this._visibleLines.getVisibleLine(l).getColumnOfNodeOffset(c,d);const m=this._context.viewModel.getLineMinColumn(l);return h<m&&(h=m),new a.Position(l,h)}_getViewLineDomNode(c){for(;c&&c.nodeType===1;){if(c.className===b.ViewLine.CLASS_NAME)return c;c=c.parentElement}return null}_getLineNumberFor(c){const d=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();for(let l=d;l<=s;l++){const o=this._visibleLines.getVisibleLine(l);if(c===o.getDomNode())return l}return-1}getLineWidth(c){const d=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();if(c<d||c>s)return-1;const l=new v.DomReadingContext(this.domNode.domNode,this._textRangeRestingSpot),o=this._visibleLines.getVisibleLine(c).getWidth(l);return this._updateLineWidthsSlowIfDomDidLayout(l),o}linesVisibleRangesForRange(c,d){if(this.shouldRender())return null;const s=c.endLineNumber,l=i.Range.intersectRanges(c,this._lastRenderedData.getCurrentVisibleRange());if(!l)return null;const o=[];let g=0;const h=new v.DomReadingContext(this.domNode.domNode,this._textRangeRestingSpot);let m=0;d&&(m=this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new a.Position(l.startLineNumber,1)).lineNumber);const C=this._visibleLines.getStartLineNumber(),w=this._visibleLines.getEndLineNumber();for(let D=l.startLineNumber;D<=l.endLineNumber;D++){if(D<C||D>w)continue;const I=D===l.startLineNumber?l.startColumn:1,T=D!==l.endLineNumber,A=T?this._context.viewModel.getLineMaxColumn(D):l.endColumn,P=this._visibleLines.getVisibleLine(D).getVisibleRangesForRange(D,I,A,h);if(P){if(d&&D<s){const N=m;m=this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new a.Position(D+1,1)).lineNumber,N!==m&&(P.ranges[P.ranges.length-1].width+=this._typicalHalfwidthCharacterWidth)}o[g++]=new S.LineVisibleRanges(P.outsideRenderedLine,D,S.HorizontalRange.from(P.ranges),T)}}return this._updateLineWidthsSlowIfDomDidLayout(h),g===0?null:o}_visibleRangesForLineRange(c,d,s){if(this.shouldRender()||c<this._visibleLines.getStartLineNumber()||c>this._visibleLines.getEndLineNumber())return null;const l=new v.DomReadingContext(this.domNode.domNode,this._textRangeRestingSpot),o=this._visibleLines.getVisibleLine(c).getVisibleRangesForRange(c,d,s,l);return this._updateLineWidthsSlowIfDomDidLayout(l),o}visibleRangeForPosition(c){const d=this._visibleRangesForLineRange(c.lineNumber,c.column,c.column);return d?new S.HorizontalPosition(d.outsideRenderedLine,d.ranges[0].left):null}_updateLineWidthsFast(){return this._updateLineWidths(!0)}_updateLineWidthsSlow(){this._updateLineWidths(!1)}_updateLineWidthsSlowIfDomDidLayout(c){c.didDomLayout&&(this._asyncUpdateLineWidths.isScheduled()||(this._asyncUpdateLineWidths.cancel(),this._updateLineWidthsSlow()))}_updateLineWidths(c){const d=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();let l=1,o=!0;for(let g=d;g<=s;g++){const h=this._visibleLines.getVisibleLine(g);if(c&&!h.getWidthIsFast()){o=!1;continue}l=Math.max(l,h.getWidth(null))}return o&&d===1&&s===this._context.viewModel.getLineCount()&&(this._maxLineWidth=0),this._ensureMaxLineWidth(l),o}_checkMonospaceFontAssumptions(){let c=-1,d=-1;const s=this._visibleLines.getStartLineNumber(),l=this._visibleLines.getEndLineNumber();for(let o=s;o<=l;o++){const g=this._visibleLines.getVisibleLine(o);if(g.needsMonospaceFontCheck()){const h=g.getWidth(null);h>d&&(d=h,c=o)}}if(c!==-1&&!this._visibleLines.getVisibleLine(c).monospaceAssumptionsAreValid())for(let o=s;o<=l;o++)this._visibleLines.getVisibleLine(o).onMonospaceAssumptionsInvalidated()}prepareRender(){throw new Error(\"Not supported\")}render(){throw new Error(\"Not supported\")}renderText(c){if(this._visibleLines.renderLines(c),this._lastRenderedData.setCurrentVisibleRange(c.visibleRange),this.domNode.setWidth(this._context.viewLayout.getScrollWidth()),this.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(),1e6)),this._horizontalRevealRequest){const s=this._horizontalRevealRequest;if(c.startLineNumber<=s.minLineNumber&&s.maxLineNumber<=c.endLineNumber){this._horizontalRevealRequest=null,this.onDidRender();const l=this._computeScrollLeftToReveal(s);l&&(this._isViewportWrapping||this._ensureMaxLineWidth(l.maxHorizontalOffset),this._context.viewModel.viewLayout.setScrollPosition({scrollLeft:l.scrollLeft},s.scrollType))}}if(this._updateLineWidthsFast()?this._asyncUpdateLineWidths.cancel():this._asyncUpdateLineWidths.schedule(),y.isLinux&&!this._asyncCheckMonospaceFontAssumptions.isScheduled()){const s=this._visibleLines.getStartLineNumber(),l=this._visibleLines.getEndLineNumber();for(let o=s;o<=l;o++)if(this._visibleLines.getVisibleLine(o).needsMonospaceFontCheck()){this._asyncCheckMonospaceFontAssumptions.schedule();break}}this._linesContent.setLayerHinting(this._canUseLayerHinting),this._linesContent.setContain(\"strict\");const d=this._context.viewLayout.getCurrentScrollTop()-c.bigNumbersDelta;this._linesContent.setTop(-d),this._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft())}_ensureMaxLineWidth(c){const d=Math.ceil(c);this._maxLineWidth<d&&(this._maxLineWidth=d,this._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth))}_computeScrollTopToRevealRange(c,d,s,l,o,g){const h=c.top,m=c.height,C=h+m;let w,D,I;if(o&&o.length>0){let M=o[0].startLineNumber,R=o[0].endLineNumber;for(let x=1,O=o.length;x<O;x++){const B=o[x];M=Math.min(M,B.startLineNumber),R=Math.max(R,B.endLineNumber)}w=!1,D=this._context.viewLayout.getVerticalOffsetForLineNumber(M),I=this._context.viewLayout.getVerticalOffsetForLineNumber(R)+this._lineHeight}else if(l)w=!0,D=this._context.viewLayout.getVerticalOffsetForLineNumber(l.startLineNumber),I=this._context.viewLayout.getVerticalOffsetForLineNumber(l.endLineNumber)+this._lineHeight;else return-1;const T=(d===\"mouse\"||s)&&this._cursorSurroundingLinesStyle===\"default\";let A=0,P=0;if(T)s||(A=this._lineHeight);else{const M=Math.min(m/this._lineHeight/2,this._cursorSurroundingLines);this._stickyScrollEnabled?A=Math.max(M,this._maxNumberStickyLines)*this._lineHeight:A=M*this._lineHeight,P=Math.max(0,M-1)*this._lineHeight}s||(g===0||g===4)&&(P+=this._lineHeight),D-=A,I+=P;let N;if(I-D>m){if(!w)return-1;N=D}else if(g===5||g===6)if(g===6&&h<=D&&I<=C)N=h;else{const M=Math.max(5*this._lineHeight,m*.2),R=D-M,x=I-m;N=Math.max(x,R)}else if(g===1||g===2)if(g===2&&h<=D&&I<=C)N=h;else{const M=(D+I)/2;N=Math.max(0,M-m/2)}else N=this._computeMinimumScrolling(h,C,D,I,g===3,g===4);return N}_computeScrollLeftToReveal(c){const d=this._context.viewLayout.getCurrentViewport(),s=this._context.configuration.options.get(143),l=d.left,o=l+d.width-s.verticalScrollbarWidth;let g=1073741824,h=0;if(c.type===\"range\"){const C=this._visibleRangesForLineRange(c.lineNumber,c.startColumn,c.endColumn);if(!C)return null;for(const w of C.ranges)g=Math.min(g,Math.round(w.left)),h=Math.max(h,Math.round(w.left+w.width))}else for(const C of c.selections){if(C.startLineNumber!==C.endLineNumber)return null;const w=this._visibleRangesForLineRange(C.startLineNumber,C.startColumn,C.endColumn);if(!w)return null;for(const D of w.ranges)g=Math.min(g,Math.round(D.left)),h=Math.max(h,Math.round(D.left+D.width))}return c.minimalReveal||(g=Math.max(0,g-u.HORIZONTAL_EXTRA_PX),h+=this._revealHorizontalRightPadding),c.type===\"selections\"&&h-g>d.width?null:{scrollLeft:this._computeMinimumScrolling(l,o,g,h),maxHorizontalOffset:h}}_computeMinimumScrolling(c,d,s,l,o,g){c=c|0,d=d|0,s=s|0,l=l|0,o=!!o,g=!!g;const h=d-c;if(l-s<h){if(o)return s;if(g)return Math.max(0,l-h);if(s<c)return s;if(l>d)return Math.max(0,l-h)}else return s;return c}}e.ViewLines=u,u.HORIZONTAL_EXTRA_PX=30}),define(se[366],oe([1,0,7,46,78,230,224,13,14,398,107,12,6,126,2,17,11,750,350,99,22,89,178]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuickInputList=e.QuickInputListFocus=void 0;const o=L.$;class g{constructor(N,M,R,x,O,B,W){var V,K,F;this._checked=!1,this._hidden=!1,this.hasCheckbox=x,this.index=R,this.fireButtonTriggered=O,this.fireSeparatorButtonTriggered=B,this._onChecked=W,this.onChecked=x?i.Event.map(i.Event.filter(this._onChecked.event,q=>q.listElement===this),q=>q.checked):i.Event.None,N.type===\"separator\"?this._separator=N:(this.item=N,M&&M.type===\"separator\"&&!M.buttons&&(this._separator=M),this.saneDescription=this.item.description,this.saneDetail=this.item.detail,this._labelHighlights=(V=this.item.highlights)===null||V===void 0?void 0:V.label,this._descriptionHighlights=(K=this.item.highlights)===null||K===void 0?void 0:K.description,this._detailHighlights=(F=this.item.highlights)===null||F===void 0?void 0:F.detail,this.saneTooltip=this.item.tooltip),this._init=new d.Lazy(()=>{var q;const ie=(q=N.label)!==null&&q!==void 0?q:\"\",ae=(0,n.parseLabelWithIcons)(ie).text.trim(),ne=N.ariaLabel||[ie,this.saneDescription,this.saneDetail].map($=>(0,n.getCodiconAriaLabel)($)).filter($=>!!$).join(\", \");return{saneLabel:ie,saneSortLabel:ae,saneAriaLabel:ne}})}get saneLabel(){return this._init.value.saneLabel}get saneSortLabel(){return this._init.value.saneSortLabel}get saneAriaLabel(){return this._init.value.saneAriaLabel}get element(){return this._element}set element(N){this._element=N}get hidden(){return this._hidden}set hidden(N){this._hidden=N}get checked(){return this._checked}set checked(N){N!==this._checked&&(this._checked=N,this._onChecked.fire({listElement:this,checked:N}))}get separator(){return this._separator}set separator(N){this._separator=N}get labelHighlights(){return this._labelHighlights}set labelHighlights(N){this._labelHighlights=N}get descriptionHighlights(){return this._descriptionHighlights}set descriptionHighlights(N){this._descriptionHighlights=N}get detailHighlights(){return this._detailHighlights}set detailHighlights(N){this._detailHighlights=N}}class h{constructor(N,M){this.themeService=N,this.hoverDelegate=M}get templateId(){return h.ID}renderTemplate(N){const M=Object.create(null);M.toDisposeElement=[],M.toDisposeTemplate=[],M.entry=L.append(N,o(\".quick-input-list-entry\"));const R=L.append(M.entry,o(\"label.quick-input-list-label\"));M.toDisposeTemplate.push(L.addStandardDisposableListener(R,L.EventType.CLICK,K=>{M.checkbox.offsetParent||K.preventDefault()})),M.checkbox=L.append(R,o(\"input.quick-input-list-checkbox\")),M.checkbox.type=\"checkbox\",M.toDisposeTemplate.push(L.addStandardDisposableListener(M.checkbox,L.EventType.CHANGE,K=>{M.element.checked=M.checkbox.checked}));const x=L.append(R,o(\".quick-input-list-rows\")),O=L.append(x,o(\".quick-input-list-row\")),B=L.append(x,o(\".quick-input-list-row\"));M.label=new E.IconLabel(O,{supportHighlights:!0,supportDescriptionHighlights:!0,supportIcons:!0,hoverDelegate:this.hoverDelegate}),M.toDisposeTemplate.push(M.label),M.icon=L.prepend(M.label.element,o(\".quick-input-list-icon\"));const W=L.append(O,o(\".quick-input-list-entry-keybinding\"));M.keybinding=new S.KeybindingLabel(W,r.OS);const V=L.append(B,o(\".quick-input-list-label-meta\"));return M.detail=new E.IconLabel(V,{supportHighlights:!0,supportIcons:!0,hoverDelegate:this.hoverDelegate}),M.toDisposeTemplate.push(M.detail),M.separator=L.append(M.entry,o(\".quick-input-list-separator\")),M.actionBar=new y.ActionBar(M.entry,this.hoverDelegate?{hoverDelegate:this.hoverDelegate}:void 0),M.actionBar.domNode.classList.add(\"quick-input-list-entry-action-bar\"),M.toDisposeTemplate.push(M.actionBar),M}renderElement(N,M,R){var x,O,B,W;R.element=N,N.element=(x=R.entry)!==null&&x!==void 0?x:void 0;const V=N.item?N.item:N.separator;R.checkbox.checked=N.checked,R.toDisposeElement.push(N.onChecked(ne=>R.checkbox.checked=ne));const{labelHighlights:K,descriptionHighlights:F,detailHighlights:q}=N;if(!((O=N.item)===null||O===void 0)&&O.iconPath){const ne=(0,l.isDark)(this.themeService.getColorTheme().type)?N.item.iconPath.dark:(B=N.item.iconPath.light)!==null&&B!==void 0?B:N.item.iconPath.dark,$=s.URI.revive(ne);R.icon.className=\"quick-input-list-icon\",R.icon.style.backgroundImage=L.asCSSUrl($)}else R.icon.style.backgroundImage=\"\",R.icon.className=!((W=N.item)===null||W===void 0)&&W.iconClass?`quick-input-list-icon ${N.item.iconClass}`:\"\";const ie={matches:K||[],descriptionTitle:N.saneTooltip?void 0:N.saneDescription,descriptionMatches:F||[],labelEscapeNewLines:!0};V.type!==\"separator\"?(ie.extraClasses=V.iconClasses,ie.italic=V.italic,ie.strikethrough=V.strikethrough,R.entry.classList.remove(\"quick-input-list-separator-as-item\")):R.entry.classList.add(\"quick-input-list-separator-as-item\"),R.label.setLabel(N.saneLabel,N.saneDescription,ie),R.keybinding.set(V.type===\"separator\"?void 0:V.keybinding),N.saneDetail?(R.detail.element.style.display=\"\",R.detail.setLabel(N.saneDetail,void 0,{matches:q,title:N.saneTooltip?void 0:N.saneDetail,labelEscapeNewLines:!0})):R.detail.element.style.display=\"none\",N.item&&N.separator&&N.separator.label?(R.separator.textContent=N.separator.label,R.separator.style.display=\"\"):R.separator.style.display=\"none\",R.entry.classList.toggle(\"quick-input-list-separator-border\",!!N.separator);const ae=V.buttons;ae&&ae.length?(R.actionBar.push(ae.map((ne,$)=>(0,c.quickInputButtonToAction)(ne,`id-${$}`,()=>V.type!==\"separator\"?N.fireButtonTriggered({button:ne,item:V}):N.fireSeparatorButtonTriggered({button:ne,separator:V}))),{icon:!0,label:!1}),R.entry.classList.add(\"has-actions\")):R.entry.classList.remove(\"has-actions\")}disposeElement(N,M,R){R.toDisposeElement=(0,t.dispose)(R.toDisposeElement),R.actionBar.clear()}disposeTemplate(N){N.toDisposeElement=(0,t.dispose)(N.toDisposeElement),N.toDisposeTemplate=(0,t.dispose)(N.toDisposeTemplate)}}h.ID=\"listelement\";class m{getHeight(N){return N.item?N.saneDetail?44:22:24}getTemplateId(N){return h.ID}}var C;(function(P){P[P.First=1]=\"First\",P[P.Second=2]=\"Second\",P[P.Last=3]=\"Last\",P[P.Next=4]=\"Next\",P[P.Previous=5]=\"Previous\",P[P.NextPage=6]=\"NextPage\",P[P.PreviousPage=7]=\"PreviousPage\"})(C||(e.QuickInputListFocus=C={}));class w{constructor(N,M,R,x){this.parent=N,this.options=R,this.inputElements=[],this.elements=[],this.elementsToIndexes=new Map,this.matchOnDescription=!1,this.matchOnDetail=!1,this.matchOnLabel=!0,this.matchOnLabelMode=\"fuzzy\",this.sortByLabel=!0,this._onChangedAllVisibleChecked=new i.Emitter,this.onChangedAllVisibleChecked=this._onChangedAllVisibleChecked.event,this._onChangedCheckedCount=new i.Emitter,this.onChangedCheckedCount=this._onChangedCheckedCount.event,this._onChangedVisibleCount=new i.Emitter,this.onChangedVisibleCount=this._onChangedVisibleCount.event,this._onChangedCheckedElements=new i.Emitter,this.onChangedCheckedElements=this._onChangedCheckedElements.event,this._onButtonTriggered=new i.Emitter,this.onButtonTriggered=this._onButtonTriggered.event,this._onSeparatorButtonTriggered=new i.Emitter,this.onSeparatorButtonTriggered=this._onSeparatorButtonTriggered.event,this._onKeyDown=new i.Emitter,this.onKeyDown=this._onKeyDown.event,this._onLeave=new i.Emitter,this.onLeave=this._onLeave.event,this._listElementChecked=new i.Emitter,this._fireCheckedEvents=!0,this.elementDisposables=[],this.disposables=[],this.id=M,this.container=L.append(this.parent,o(\".quick-input-list\"));const O=new m,B=new A;this.list=R.createList(\"QuickInput\",this.container,O,[new h(x,R.hoverDelegate)],{identityProvider:{getId:V=>{var K,F,q,ie,ae,ne,$,J;return(J=(ne=(ie=(F=(K=V.item)===null||K===void 0?void 0:K.id)!==null&&F!==void 0?F:(q=V.item)===null||q===void 0?void 0:q.label)!==null&&ie!==void 0?ie:(ae=V.separator)===null||ae===void 0?void 0:ae.id)!==null&&ne!==void 0?ne:($=V.separator)===null||$===void 0?void 0:$.label)!==null&&J!==void 0?J:\"\"}},setRowLineHeight:!1,multipleSelectionSupport:!1,horizontalScrolling:!1,accessibilityProvider:B}),this.list.getHTMLElement().id=M,this.disposables.push(this.list),this.disposables.push(this.list.onKeyDown(V=>{const K=new k.StandardKeyboardEvent(V);switch(K.keyCode){case 10:this.toggleCheckbox();break;case 31:(r.isMacintosh?V.metaKey:V.ctrlKey)&&this.list.setFocus((0,p.range)(this.list.length));break;case 16:{const F=this.list.getFocus();F.length===1&&F[0]===0&&this._onLeave.fire();break}case 18:{const F=this.list.getFocus();F.length===1&&F[0]===this.list.length-1&&this._onLeave.fire();break}}this._onKeyDown.fire(K)})),this.disposables.push(this.list.onMouseDown(V=>{V.browserEvent.button!==2&&V.browserEvent.preventDefault()})),this.disposables.push(L.addDisposableListener(this.container,L.EventType.CLICK,V=>{(V.x||V.y)&&this._onLeave.fire()})),this.disposables.push(this.list.onMouseMiddleClick(V=>{this._onLeave.fire()})),this.disposables.push(this.list.onContextMenu(V=>{typeof V.index==\"number\"&&(V.browserEvent.preventDefault(),this.list.setSelection([V.index]))}));const W=new _.ThrottledDelayer(R.hoverDelegate.delay);this.disposables.push(this.list.onMouseOver(async V=>{var K;if(V.browserEvent.target instanceof HTMLAnchorElement){W.cancel();return}if(!(!(V.browserEvent.relatedTarget instanceof HTMLAnchorElement)&&L.isAncestor(V.browserEvent.relatedTarget,(K=V.element)===null||K===void 0?void 0:K.element)))try{await W.trigger(async()=>{V.element&&this.showHover(V.element)})}catch(F){if(!(0,a.isCancellationError)(F))throw F}})),this.disposables.push(this.list.onMouseOut(V=>{var K;L.isAncestor(V.browserEvent.relatedTarget,(K=V.element)===null||K===void 0?void 0:K.element)||W.cancel()})),this.disposables.push(W),this.disposables.push(this._listElementChecked.event(V=>this.fireCheckedEvents())),this.disposables.push(this._onChangedAllVisibleChecked,this._onChangedCheckedCount,this._onChangedVisibleCount,this._onChangedCheckedElements,this._onButtonTriggered,this._onSeparatorButtonTriggered,this._onLeave,this._onKeyDown)}get onDidChangeFocus(){return i.Event.map(this.list.onDidChangeFocus,N=>N.elements.map(M=>M.item))}get onDidChangeSelection(){return i.Event.map(this.list.onDidChangeSelection,N=>({items:N.elements.map(M=>M.item),event:N.browserEvent}))}get scrollTop(){return this.list.scrollTop}set scrollTop(N){this.list.scrollTop=N}get ariaLabel(){return this.list.getHTMLElement().ariaLabel}set ariaLabel(N){this.list.getHTMLElement().ariaLabel=N}getAllVisibleChecked(){return this.allVisibleChecked(this.elements,!1)}allVisibleChecked(N,M=!0){for(let R=0,x=N.length;R<x;R++){const O=N[R];if(!O.hidden)if(O.checked)M=!0;else return!1}return M}getCheckedCount(){let N=0;const M=this.elements;for(let R=0,x=M.length;R<x;R++)M[R].checked&&N++;return N}getVisibleCount(){let N=0;const M=this.elements;for(let R=0,x=M.length;R<x;R++)M[R].hidden||N++;return N}setAllVisibleChecked(N){try{this._fireCheckedEvents=!1,this.elements.forEach(M=>{M.hidden||(M.checked=N)})}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}setElements(N){this.elementDisposables=(0,t.dispose)(this.elementDisposables);const M=B=>this.fireButtonTriggered(B),R=B=>this.fireSeparatorButtonTriggered(B);this.inputElements=N;const x=new Map,O=this.parent.classList.contains(\"show-checkboxes\");this.elements=N.reduce((B,W,V)=>{var K;const F=V>0?N[V-1]:void 0;if(W.type===\"separator\"&&!W.buttons)return B;const q=new g(W,F,V,O,M,R,this._listElementChecked),ie=B.length;return B.push(q),x.set((K=q.item)!==null&&K!==void 0?K:q.separator,ie),B},[]),this.elementsToIndexes=x,this.list.splice(0,this.list.length),this.list.splice(0,this.list.length,this.elements),this._onChangedVisibleCount.fire(this.elements.length)}getFocusedElements(){return this.list.getFocusedElements().map(N=>N.item)}setFocusedElements(N){if(this.list.setFocus(N.filter(M=>this.elementsToIndexes.has(M)).map(M=>this.elementsToIndexes.get(M))),N.length>0){const M=this.list.getFocus()[0];typeof M==\"number\"&&this.list.reveal(M)}}getActiveDescendant(){return this.list.getHTMLElement().getAttribute(\"aria-activedescendant\")}setSelectedElements(N){this.list.setSelection(N.filter(M=>this.elementsToIndexes.has(M)).map(M=>this.elementsToIndexes.get(M)))}getCheckedElements(){return this.elements.filter(N=>N.checked).map(N=>N.item).filter(N=>!!N)}setCheckedElements(N){try{this._fireCheckedEvents=!1;const M=new Set;for(const R of N)M.add(R);for(const R of this.elements)R.checked=M.has(R.item)}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}set enabled(N){this.list.getHTMLElement().style.pointerEvents=N?\"\":\"none\"}focus(N){if(!this.list.length)return;switch(N===C.Second&&this.list.length<2&&(N=C.First),N){case C.First:this.list.scrollTop=0,this.list.focusFirst(void 0,R=>!!R.item);break;case C.Second:this.list.scrollTop=0,this.list.focusNth(1,void 0,R=>!!R.item);break;case C.Last:this.list.scrollTop=this.list.scrollHeight,this.list.focusLast(void 0,R=>!!R.item);break;case C.Next:{this.list.focusNext(void 0,!0,void 0,x=>!!x.item);const R=this.list.getFocus()[0];R!==0&&!this.elements[R-1].item&&this.list.firstVisibleIndex>R-1&&this.list.reveal(R-1);break}case C.Previous:{this.list.focusPrevious(void 0,!0,void 0,x=>!!x.item);const R=this.list.getFocus()[0];R!==0&&!this.elements[R-1].item&&this.list.firstVisibleIndex>R-1&&this.list.reveal(R-1);break}case C.NextPage:this.list.focusNextPage(void 0,R=>!!R.item);break;case C.PreviousPage:this.list.focusPreviousPage(void 0,R=>!!R.item);break}const M=this.list.getFocus()[0];typeof M==\"number\"&&this.list.reveal(M)}clearFocus(){this.list.setFocus([])}domFocus(){this.list.domFocus()}showHover(N){var M,R,x;this._lastHover&&!this._lastHover.isDisposed&&((R=(M=this.options.hoverDelegate).onDidHideHover)===null||R===void 0||R.call(M),(x=this._lastHover)===null||x===void 0||x.dispose()),!(!N.element||!N.saneTooltip)&&(this._lastHover=this.options.hoverDelegate.showHover({content:N.saneTooltip,target:N.element,linkHandler:O=>{this.options.linkOpenerDelegate(O)},appearance:{showPointer:!0},container:this.container,position:{hoverPosition:1}},!1))}layout(N){this.list.getHTMLElement().style.maxHeight=N?`${Math.floor(N/44)*44+6}px`:\"\",this.list.layout()}filter(N){if(!(this.sortByLabel||this.matchOnLabel||this.matchOnDescription||this.matchOnDetail))return this.list.layout(),!1;const M=N;if(N=N.trim(),!N||!(this.matchOnLabel||this.matchOnDescription||this.matchOnDetail))this.elements.forEach(x=>{x.labelHighlights=void 0,x.descriptionHighlights=void 0,x.detailHighlights=void 0,x.hidden=!1;const O=x.index&&this.inputElements[x.index-1];x.item&&(x.separator=O&&O.type===\"separator\"&&!O.buttons?O:void 0)});else{let x;this.elements.forEach(O=>{var B,W,V,K;let F;this.matchOnLabelMode===\"fuzzy\"?F=this.matchOnLabel&&(B=(0,n.matchesFuzzyIconAware)(N,(0,n.parseLabelWithIcons)(O.saneLabel)))!==null&&B!==void 0?B:void 0:F=this.matchOnLabel&&(W=D(M,(0,n.parseLabelWithIcons)(O.saneLabel)))!==null&&W!==void 0?W:void 0;const q=this.matchOnDescription&&(V=(0,n.matchesFuzzyIconAware)(N,(0,n.parseLabelWithIcons)(O.saneDescription||\"\")))!==null&&V!==void 0?V:void 0,ie=this.matchOnDetail&&(K=(0,n.matchesFuzzyIconAware)(N,(0,n.parseLabelWithIcons)(O.saneDetail||\"\")))!==null&&K!==void 0?K:void 0;if(F||q||ie?(O.labelHighlights=F,O.descriptionHighlights=q,O.detailHighlights=ie,O.hidden=!1):(O.labelHighlights=void 0,O.descriptionHighlights=void 0,O.detailHighlights=void 0,O.hidden=O.item?!O.item.alwaysShow:!0),O.item?O.separator=void 0:O.separator&&(O.hidden=!0),!this.sortByLabel){const ae=O.index&&this.inputElements[O.index-1];x=ae&&ae.type===\"separator\"?ae:x,x&&!O.hidden&&(O.separator=x,x=void 0)}})}const R=this.elements.filter(x=>!x.hidden);if(this.sortByLabel&&N){const x=N.toLowerCase();R.sort((O,B)=>T(O,B,x))}return this.elementsToIndexes=R.reduce((x,O,B)=>{var W;return x.set((W=O.item)!==null&&W!==void 0?W:O.separator,B),x},new Map),this.list.splice(0,this.list.length,R),this.list.setFocus([]),this.list.layout(),this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedVisibleCount.fire(R.length),!0}toggleCheckbox(){try{this._fireCheckedEvents=!1;const N=this.list.getFocusedElements(),M=this.allVisibleChecked(N);for(const R of N)R.checked=!M}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}display(N){this.container.style.display=N?\"\":\"none\"}isDisplayed(){return this.container.style.display!==\"none\"}dispose(){this.elementDisposables=(0,t.dispose)(this.elementDisposables),this.disposables=(0,t.dispose)(this.disposables)}fireCheckedEvents(){this._fireCheckedEvents&&(this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedCheckedCount.fire(this.getCheckedCount()),this._onChangedCheckedElements.fire(this.getCheckedElements()))}fireButtonTriggered(N){this._onButtonTriggered.fire(N)}fireSeparatorButtonTriggered(N){this._onSeparatorButtonTriggered.fire(N)}style(N){this.list.style(N)}toggleHover(){const N=this.list.getFocusedElements()[0];if(!N?.saneTooltip)return;if(this._lastHover&&!this._lastHover.isDisposed){this._lastHover.dispose();return}const M=this.list.getFocusedElements()[0];if(!M)return;this.showHover(M);const R=new t.DisposableStore;R.add(this.list.onDidChangeFocus(x=>{x.indexes.length&&this.showHover(x.elements[0])})),this._lastHover&&R.add(this._lastHover),this._toggleHover=R,this.elementDisposables.push(this._toggleHover)}}e.QuickInputList=w,ke([b.memoize],w.prototype,\"onDidChangeFocus\",null),ke([b.memoize],w.prototype,\"onDidChangeSelection\",null);function D(P,N){const{text:M,iconOffsets:R}=N;if(!R||R.length===0)return I(P,M);const x=(0,u.ltrim)(M,\" \"),O=M.length-x.length,B=I(P,x);if(B)for(const W of B){const V=R[W.start+O]+O;W.start+=V,W.end+=V}return B}function I(P,N){const M=N.toLowerCase().indexOf(P.toLowerCase());return M!==-1?[{start:M,end:M+P.length}]:null}function T(P,N,M){const R=P.labelHighlights||[],x=N.labelHighlights||[];return R.length&&!x.length?-1:!R.length&&x.length?1:R.length===0&&x.length===0?0:(0,v.compareAnything)(P.saneSortLabel,N.saneSortLabel,M)}class A{getWidgetAriaLabel(){return(0,f.localize)(0,null)}getAriaLabel(N){var M;return!((M=N.separator)===null||M===void 0)&&M.label?`${N.saneAriaLabel}, ${N.separator.label}`:N.saneAriaLabel}getWidgetRole(){return\"listbox\"}getRole(N){return N.hasCheckbox?\"checkbox\":\"option\"}isChecked(N){if(N.hasCheckbox)return{value:N.checked,onDidChange:N.onChecked}}}}),define(se[367],oe([1,0,7,46,159,13,14,26,6,2,17,100,28,748,70,366,350,178]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuickInputHoverDelegate=e.InputBox=e.QuickPick=e.backButton=void 0,e.backButton={iconClass:i.ThemeIcon.asClassName(p.Codicon.quickInputBack),tooltip:(0,n.localize)(0,null),handle:-1};class f extends v.Disposable{constructor(o){super(),this.ui=o,this._widgetUpdated=!1,this.visible=!1,this._enabled=!0,this._busy=!1,this._ignoreFocusOut=!1,this._buttons=[],this.buttonsUpdated=!1,this._toggles=[],this.togglesUpdated=!1,this.noValidationMessage=f.noPromptMessage,this._severity=a.default.Ignore,this.onDidTriggerButtonEmitter=this._register(new _.Emitter),this.onDidHideEmitter=this._register(new _.Emitter),this.onDisposeEmitter=this._register(new _.Emitter),this.visibleDisposables=this._register(new v.DisposableStore),this.onDidHide=this.onDidHideEmitter.event}get title(){return this._title}set title(o){this._title=o,this.update()}get description(){return this._description}set description(o){this._description=o,this.update()}get step(){return this._steps}set step(o){this._steps=o,this.update()}get totalSteps(){return this._totalSteps}set totalSteps(o){this._totalSteps=o,this.update()}get enabled(){return this._enabled}set enabled(o){this._enabled=o,this.update()}get contextKey(){return this._contextKey}set contextKey(o){this._contextKey=o,this.update()}get busy(){return this._busy}set busy(o){this._busy=o,this.update()}get ignoreFocusOut(){return this._ignoreFocusOut}set ignoreFocusOut(o){const g=this._ignoreFocusOut!==o&&!b.isIOS;this._ignoreFocusOut=o&&!b.isIOS,g&&this.update()}get buttons(){return this._buttons}set buttons(o){this._buttons=o,this.buttonsUpdated=!0,this.update()}get toggles(){return this._toggles}set toggles(o){this._toggles=o??[],this.togglesUpdated=!0,this.update()}get validationMessage(){return this._validationMessage}set validationMessage(o){this._validationMessage=o,this.update()}get severity(){return this._severity}set severity(o){this._severity=o,this.update()}show(){this.visible||(this.visibleDisposables.add(this.ui.onDidTriggerButton(o=>{this.buttons.indexOf(o)!==-1&&this.onDidTriggerButtonEmitter.fire(o)})),this.ui.show(this),this.visible=!0,this._lastValidationMessage=void 0,this._lastSeverity=void 0,this.buttons.length&&(this.buttonsUpdated=!0),this.toggles.length&&(this.togglesUpdated=!0),this.update())}hide(){this.visible&&this.ui.hide()}didHide(o=t.QuickInputHideReason.Other){this.visible=!1,this.visibleDisposables.clear(),this.onDidHideEmitter.fire({reason:o})}update(){var o,g;if(!this.visible)return;const h=this.getTitle();h&&this.ui.title.textContent!==h?this.ui.title.textContent=h:!h&&this.ui.title.innerHTML!==\"&nbsp;\"&&(this.ui.title.innerText=\"\\xA0\");const m=this.getDescription();if(this.ui.description1.textContent!==m&&(this.ui.description1.textContent=m),this.ui.description2.textContent!==m&&(this.ui.description2.textContent=m),this._widgetUpdated&&(this._widgetUpdated=!1,this._widget?L.reset(this.ui.widget,this._widget):L.reset(this.ui.widget)),this.busy&&!this.busyDelay&&(this.busyDelay=new S.TimeoutTimer,this.busyDelay.setIfNotSet(()=>{this.visible&&this.ui.progressBar.infinite()},800)),!this.busy&&this.busyDelay&&(this.ui.progressBar.stop(),this.busyDelay.cancel(),this.busyDelay=void 0),this.buttonsUpdated){this.buttonsUpdated=!1,this.ui.leftActionBar.clear();const w=this.buttons.filter(I=>I===e.backButton).map((I,T)=>(0,u.quickInputButtonToAction)(I,`id-${T}`,async()=>this.onDidTriggerButtonEmitter.fire(I)));this.ui.leftActionBar.push(w,{icon:!0,label:!1}),this.ui.rightActionBar.clear();const D=this.buttons.filter(I=>I!==e.backButton).map((I,T)=>(0,u.quickInputButtonToAction)(I,`id-${T}`,async()=>this.onDidTriggerButtonEmitter.fire(I)));this.ui.rightActionBar.push(D,{icon:!0,label:!1})}if(this.togglesUpdated){this.togglesUpdated=!1;const w=(g=(o=this.toggles)===null||o===void 0?void 0:o.filter(D=>D instanceof y.Toggle))!==null&&g!==void 0?g:[];this.ui.inputBox.toggles=w}this.ui.ignoreFocusOut=this.ignoreFocusOut,this.ui.setEnabled(this.enabled),this.ui.setContextKey(this.contextKey);const C=this.validationMessage||this.noValidationMessage;this._lastValidationMessage!==C&&(this._lastValidationMessage=C,L.reset(this.ui.message),(0,u.renderQuickInputDescription)(C,this.ui.message,{callback:w=>{this.ui.linkOpenerDelegate(w)},disposables:this.visibleDisposables})),this._lastSeverity!==this.severity&&(this._lastSeverity=this.severity,this.showMessageDecoration(this.severity))}getTitle(){return this.title&&this.step?`${this.title} (${this.getSteps()})`:this.title?this.title:this.step?this.getSteps():\"\"}getDescription(){return this.description||\"\"}getSteps(){return this.step&&this.totalSteps?(0,n.localize)(2,null,this.step,this.totalSteps):this.step?String(this.step):\"\"}showMessageDecoration(o){if(this.ui.inputBox.showDecoration(o),o!==a.default.Ignore){const g=this.ui.inputBox.stylesForType(o);this.ui.message.style.color=g.foreground?`${g.foreground}`:\"\",this.ui.message.style.backgroundColor=g.background?`${g.background}`:\"\",this.ui.message.style.border=g.border?`1px solid ${g.border}`:\"\",this.ui.message.style.marginBottom=\"-2px\"}else this.ui.message.style.color=\"\",this.ui.message.style.backgroundColor=\"\",this.ui.message.style.border=\"\",this.ui.message.style.marginBottom=\"\"}dispose(){this.hide(),this.onDisposeEmitter.fire(),super.dispose()}}f.noPromptMessage=(0,n.localize)(1,null);class c extends f{constructor(){super(...arguments),this._value=\"\",this.onDidChangeValueEmitter=this._register(new _.Emitter),this.onWillAcceptEmitter=this._register(new _.Emitter),this.onDidAcceptEmitter=this._register(new _.Emitter),this.onDidCustomEmitter=this._register(new _.Emitter),this._items=[],this.itemsUpdated=!1,this._canSelectMany=!1,this._canAcceptInBackground=!1,this._matchOnDescription=!1,this._matchOnDetail=!1,this._matchOnLabel=!0,this._matchOnLabelMode=\"fuzzy\",this._sortByLabel=!0,this._keepScrollPosition=!1,this._itemActivation=t.ItemActivation.FIRST,this._activeItems=[],this.activeItemsUpdated=!1,this.activeItemsToConfirm=[],this.onDidChangeActiveEmitter=this._register(new _.Emitter),this._selectedItems=[],this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=[],this.onDidChangeSelectionEmitter=this._register(new _.Emitter),this.onDidTriggerItemButtonEmitter=this._register(new _.Emitter),this.onDidTriggerSeparatorButtonEmitter=this._register(new _.Emitter),this.valueSelectionUpdated=!0,this._ok=\"default\",this._customButton=!1,this.filterValue=o=>o,this.onDidChangeValue=this.onDidChangeValueEmitter.event,this.onWillAccept=this.onWillAcceptEmitter.event,this.onDidAccept=this.onDidAcceptEmitter.event,this.onDidChangeActive=this.onDidChangeActiveEmitter.event,this.onDidChangeSelection=this.onDidChangeSelectionEmitter.event,this.onDidTriggerItemButton=this.onDidTriggerItemButtonEmitter.event,this.onDidTriggerSeparatorButton=this.onDidTriggerSeparatorButtonEmitter.event}get quickNavigate(){return this._quickNavigate}set quickNavigate(o){this._quickNavigate=o,this.update()}get value(){return this._value}set value(o){this.doSetValue(o)}doSetValue(o,g){this._value!==o&&(this._value=o,g||this.update(),this.visible&&this.ui.list.filter(this.filterValue(this._value))&&this.trySelectFirst(),this.onDidChangeValueEmitter.fire(this._value))}set ariaLabel(o){this._ariaLabel=o,this.update()}get ariaLabel(){return this._ariaLabel}get placeholder(){return this._placeholder}set placeholder(o){this._placeholder=o,this.update()}get items(){return this._items}get scrollTop(){return this.ui.list.scrollTop}set scrollTop(o){this.ui.list.scrollTop=o}set items(o){this._items=o,this.itemsUpdated=!0,this.update()}get canSelectMany(){return this._canSelectMany}set canSelectMany(o){this._canSelectMany=o,this.update()}get canAcceptInBackground(){return this._canAcceptInBackground}set canAcceptInBackground(o){this._canAcceptInBackground=o}get matchOnDescription(){return this._matchOnDescription}set matchOnDescription(o){this._matchOnDescription=o,this.update()}get matchOnDetail(){return this._matchOnDetail}set matchOnDetail(o){this._matchOnDetail=o,this.update()}get matchOnLabel(){return this._matchOnLabel}set matchOnLabel(o){this._matchOnLabel=o,this.update()}get matchOnLabelMode(){return this._matchOnLabelMode}set matchOnLabelMode(o){this._matchOnLabelMode=o,this.update()}get sortByLabel(){return this._sortByLabel}set sortByLabel(o){this._sortByLabel=o,this.update()}get keepScrollPosition(){return this._keepScrollPosition}set keepScrollPosition(o){this._keepScrollPosition=o}get itemActivation(){return this._itemActivation}set itemActivation(o){this._itemActivation=o}get activeItems(){return this._activeItems}set activeItems(o){this._activeItems=o,this.activeItemsUpdated=!0,this.update()}get selectedItems(){return this._selectedItems}set selectedItems(o){this._selectedItems=o,this.selectedItemsUpdated=!0,this.update()}get keyMods(){return this._quickNavigate?t.NO_KEY_MODS:this.ui.keyMods}set valueSelection(o){this._valueSelection=o,this.valueSelectionUpdated=!0,this.update()}get customButton(){return this._customButton}set customButton(o){this._customButton=o,this.update()}get customLabel(){return this._customButtonLabel}set customLabel(o){this._customButtonLabel=o,this.update()}get customHover(){return this._customButtonHover}set customHover(o){this._customButtonHover=o,this.update()}get ok(){return this._ok}set ok(o){this._ok=o,this.update()}get hideInput(){return!!this._hideInput}set hideInput(o){this._hideInput=o,this.update()}trySelectFirst(){this.canSelectMany||this.ui.list.focus(r.QuickInputListFocus.First)}show(){this.visible||(this.visibleDisposables.add(this.ui.inputBox.onDidChange(o=>{this.doSetValue(o,!0)})),this.visibleDisposables.add((this._hideInput?this.ui.list:this.ui.inputBox).onKeyDown(o=>{switch(o.keyCode){case 18:this.ui.list.focus(r.QuickInputListFocus.Next),this.canSelectMany&&this.ui.list.domFocus(),L.EventHelper.stop(o,!0);break;case 16:this.ui.list.getFocusedElements().length?this.ui.list.focus(r.QuickInputListFocus.Previous):this.ui.list.focus(r.QuickInputListFocus.Last),this.canSelectMany&&this.ui.list.domFocus(),L.EventHelper.stop(o,!0);break;case 12:this.ui.list.focus(r.QuickInputListFocus.NextPage),this.canSelectMany&&this.ui.list.domFocus(),L.EventHelper.stop(o,!0);break;case 11:this.ui.list.focus(r.QuickInputListFocus.PreviousPage),this.canSelectMany&&this.ui.list.domFocus(),L.EventHelper.stop(o,!0);break;case 17:if(!this._canAcceptInBackground||!this.ui.inputBox.isSelectionAtEnd())return;this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.handleAccept(!0));break;case 14:(o.ctrlKey||o.metaKey)&&!o.shiftKey&&!o.altKey&&(this.ui.list.focus(r.QuickInputListFocus.First),L.EventHelper.stop(o,!0));break;case 13:(o.ctrlKey||o.metaKey)&&!o.shiftKey&&!o.altKey&&(this.ui.list.focus(r.QuickInputListFocus.Last),L.EventHelper.stop(o,!0));break}})),this.visibleDisposables.add(this.ui.onDidAccept(()=>{this.canSelectMany?this.ui.list.getCheckedElements().length||(this._selectedItems=[],this.onDidChangeSelectionEmitter.fire(this.selectedItems)):this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems)),this.handleAccept(!1)})),this.visibleDisposables.add(this.ui.onDidCustom(()=>{this.onDidCustomEmitter.fire()})),this.visibleDisposables.add(this.ui.list.onDidChangeFocus(o=>{this.activeItemsUpdated||this.activeItemsToConfirm!==this._activeItems&&(0,E.equals)(o,this._activeItems,(g,h)=>g===h)||(this._activeItems=o,this.onDidChangeActiveEmitter.fire(o))})),this.visibleDisposables.add(this.ui.list.onDidChangeSelection(({items:o,event:g})=>{if(this.canSelectMany){o.length&&this.ui.list.setSelectedElements([]);return}this.selectedItemsToConfirm!==this._selectedItems&&(0,E.equals)(o,this._selectedItems,(h,m)=>h===m)||(this._selectedItems=o,this.onDidChangeSelectionEmitter.fire(o),o.length&&this.handleAccept(L.isMouseEvent(g)&&g.button===1))})),this.visibleDisposables.add(this.ui.list.onChangedCheckedElements(o=>{this.canSelectMany&&(this.selectedItemsToConfirm!==this._selectedItems&&(0,E.equals)(o,this._selectedItems,(g,h)=>g===h)||(this._selectedItems=o,this.onDidChangeSelectionEmitter.fire(o)))})),this.visibleDisposables.add(this.ui.list.onButtonTriggered(o=>this.onDidTriggerItemButtonEmitter.fire(o))),this.visibleDisposables.add(this.ui.list.onSeparatorButtonTriggered(o=>this.onDidTriggerSeparatorButtonEmitter.fire(o))),this.visibleDisposables.add(this.registerQuickNavigation()),this.valueSelectionUpdated=!0),super.show()}handleAccept(o){let g=!1;this.onWillAcceptEmitter.fire({veto:()=>g=!0}),g||this.onDidAcceptEmitter.fire({inBackground:o})}registerQuickNavigation(){return L.addDisposableListener(this.ui.container,L.EventType.KEY_UP,o=>{if(this.canSelectMany||!this._quickNavigate)return;const g=new k.StandardKeyboardEvent(o),h=g.keyCode;this._quickNavigate.keybindings.some(w=>{const D=w.getChords();return D.length>1?!1:D[0].shiftKey&&h===4?!(g.ctrlKey||g.altKey||g.metaKey):!!(D[0].altKey&&h===6||D[0].ctrlKey&&h===5||D[0].metaKey&&h===57)})&&(this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.handleAccept(!1)),this._quickNavigate=void 0)})}update(){if(!this.visible)return;const o=this.keepScrollPosition?this.scrollTop:0,g=!!this.description,h={title:!!this.title||!!this.step||!!this.buttons.length,description:g,checkAll:this.canSelectMany&&!this._hideCheckAll,checkBox:this.canSelectMany,inputBox:!this._hideInput,progressBar:!this._hideInput||g,visibleCount:!0,count:this.canSelectMany&&!this._hideCountBadge,ok:this.ok===\"default\"?this.canSelectMany:this.ok,list:!0,message:!!this.validationMessage,customButton:this.customButton};this.ui.setVisibilities(h),super.update(),this.ui.inputBox.value!==this.value&&(this.ui.inputBox.value=this.value),this.valueSelectionUpdated&&(this.valueSelectionUpdated=!1,this.ui.inputBox.select(this._valueSelection&&{start:this._valueSelection[0],end:this._valueSelection[1]})),this.ui.inputBox.placeholder!==(this.placeholder||\"\")&&(this.ui.inputBox.placeholder=this.placeholder||\"\");let m=this.ariaLabel;if(!m&&h.inputBox&&(m=this.placeholder||c.DEFAULT_ARIA_LABEL,this.title&&(m+=` - ${this.title}`)),this.ui.list.ariaLabel!==m&&(this.ui.list.ariaLabel=m??null),this.ui.list.matchOnDescription=this.matchOnDescription,this.ui.list.matchOnDetail=this.matchOnDetail,this.ui.list.matchOnLabel=this.matchOnLabel,this.ui.list.matchOnLabelMode=this.matchOnLabelMode,this.ui.list.sortByLabel=this.sortByLabel,this.itemsUpdated)switch(this.itemsUpdated=!1,this.ui.list.setElements(this.items),this.ui.list.filter(this.filterValue(this.ui.inputBox.value)),this.ui.checkAll.checked=this.ui.list.getAllVisibleChecked(),this.ui.visibleCount.setCount(this.ui.list.getVisibleCount()),this.ui.count.setCount(this.ui.list.getCheckedCount()),this._itemActivation){case t.ItemActivation.NONE:this._itemActivation=t.ItemActivation.FIRST;break;case t.ItemActivation.SECOND:this.ui.list.focus(r.QuickInputListFocus.Second),this._itemActivation=t.ItemActivation.FIRST;break;case t.ItemActivation.LAST:this.ui.list.focus(r.QuickInputListFocus.Last),this._itemActivation=t.ItemActivation.FIRST;break;default:this.trySelectFirst();break}this.ui.container.classList.contains(\"show-checkboxes\")!==!!this.canSelectMany&&(this.canSelectMany?this.ui.list.clearFocus():this.trySelectFirst()),this.activeItemsUpdated&&(this.activeItemsUpdated=!1,this.activeItemsToConfirm=this._activeItems,this.ui.list.setFocusedElements(this.activeItems),this.activeItemsToConfirm===this._activeItems&&(this.activeItemsToConfirm=null)),this.selectedItemsUpdated&&(this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=this._selectedItems,this.canSelectMany?this.ui.list.setCheckedElements(this.selectedItems):this.ui.list.setSelectedElements(this.selectedItems),this.selectedItemsToConfirm===this._selectedItems&&(this.selectedItemsToConfirm=null)),this.ui.customButton.label=this.customLabel||\"\",this.ui.customButton.element.title=this.customHover||\"\",h.inputBox||(this.ui.list.domFocus(),this.canSelectMany&&this.ui.list.focus(r.QuickInputListFocus.First)),this.keepScrollPosition&&(this.scrollTop=o)}}e.QuickPick=c,c.DEFAULT_ARIA_LABEL=(0,n.localize)(3,null);class d extends f{constructor(){super(...arguments),this._value=\"\",this.valueSelectionUpdated=!0,this._password=!1,this.onDidValueChangeEmitter=this._register(new _.Emitter),this.onDidAcceptEmitter=this._register(new _.Emitter),this.onDidChangeValue=this.onDidValueChangeEmitter.event,this.onDidAccept=this.onDidAcceptEmitter.event}get value(){return this._value}set value(o){this._value=o||\"\",this.update()}get placeholder(){return this._placeholder}set placeholder(o){this._placeholder=o,this.update()}get password(){return this._password}set password(o){this._password=o,this.update()}show(){this.visible||(this.visibleDisposables.add(this.ui.inputBox.onDidChange(o=>{o!==this.value&&(this._value=o,this.onDidValueChangeEmitter.fire(o))})),this.visibleDisposables.add(this.ui.onDidAccept(()=>this.onDidAcceptEmitter.fire())),this.valueSelectionUpdated=!0),super.show()}update(){if(!this.visible)return;this.ui.container.classList.remove(\"hidden-input\");const o={title:!!this.title||!!this.step||!!this.buttons.length,description:!!this.description||!!this.step,inputBox:!0,message:!0,progressBar:!0};this.ui.setVisibilities(o),super.update(),this.ui.inputBox.value!==this.value&&(this.ui.inputBox.value=this.value),this.valueSelectionUpdated&&(this.valueSelectionUpdated=!1,this.ui.inputBox.select(this._valueSelection&&{start:this._valueSelection[0],end:this._valueSelection[1]})),this.ui.inputBox.placeholder!==(this.placeholder||\"\")&&(this.ui.inputBox.placeholder=this.placeholder||\"\"),this.ui.inputBox.password!==this.password&&(this.ui.inputBox.password=this.password)}}e.InputBox=d;class s{get delay(){return Date.now()-this.lastHoverHideTime<200?0:this.configurationService.getValue(\"workbench.hover.delay\")}constructor(o,g){this.configurationService=o,this.hoverService=g,this.lastHoverHideTime=0,this.placement=\"element\"}showHover(o,g){var h;const m=(o.content instanceof HTMLElement?(h=o.content.textContent)!==null&&h!==void 0?h:\"\":typeof o.content==\"string\"?o.content:o.content.value).length>20;return this.hoverService.showHover({...o,persistence:{hideOnKeyDown:!1},appearance:{showHoverHint:m,skipFadeInAnimation:!0}},g)}onDidHideHover(){this.lastHoverHideTime=Date.now()}}e.QuickInputHoverDelegate=s}),define(se[850],oe([1,0,7,78,229,319,590,19,6,2,100,749,70,788,366,367,44]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuickInputController=void 0;const f=L.$;class c extends v.Disposable{constructor(s,l,o){super(),this.options=s,this.themeService=l,this.layoutService=o,this.enabled=!0,this.onDidAcceptEmitter=this._register(new _.Emitter),this.onDidCustomEmitter=this._register(new _.Emitter),this.onDidTriggerButtonEmitter=this._register(new _.Emitter),this.keyMods={ctrlCmd:!1,alt:!1},this.controller=null,this.onShowEmitter=this._register(new _.Emitter),this.onShow=this.onShowEmitter.event,this.onHideEmitter=this._register(new _.Emitter),this.onHide=this.onHideEmitter.event,this.idPrefix=s.idPrefix,this.parentElement=s.container,this.styles=s.styles,this._register(_.Event.runAndSubscribe(L.onDidRegisterWindow,({window:g,disposables:h})=>this.registerKeyModsListeners(g,h),{window:u.mainWindow,disposables:this._store})),this._register(L.onWillUnregisterWindow(g=>{this.ui&&L.getWindow(this.ui.container)===g&&this.reparentUI(this.layoutService.mainContainer)}))}registerKeyModsListeners(s,l){const o=g=>{this.keyMods.ctrlCmd=g.ctrlKey||g.metaKey,this.keyMods.alt=g.altKey};for(const g of[L.EventType.KEY_DOWN,L.EventType.KEY_UP,L.EventType.MOUSE_DOWN])l.add(L.addDisposableListener(s,g,o,!0))}getUI(s){if(this.ui)return s&&this.parentElement.ownerDocument!==this.layoutService.activeContainer.ownerDocument&&this.reparentUI(this.layoutService.activeContainer),this.ui;const l=L.append(this.parentElement,f(\".quick-input-widget.show-file-icons\"));l.tabIndex=-1,l.style.display=\"none\";const o=L.createStyleSheet(l),g=L.append(l,f(\".quick-input-titlebar\")),h=this._register(new k.ActionBar(g,{hoverDelegate:this.options.hoverDelegate}));h.domNode.classList.add(\"quick-input-left-action-bar\");const m=L.append(g,f(\".quick-input-title\")),C=this._register(new k.ActionBar(g,{hoverDelegate:this.options.hoverDelegate}));C.domNode.classList.add(\"quick-input-right-action-bar\");const w=L.append(l,f(\".quick-input-header\")),D=L.append(w,f(\"input.quick-input-check-all\"));D.type=\"checkbox\",D.setAttribute(\"aria-label\",(0,a.localize)(0,null)),this._register(L.addStandardDisposableListener(D,L.EventType.CHANGE,J=>{const Q=D.checked;ne.setAllVisibleChecked(Q)})),this._register(L.addDisposableListener(D,L.EventType.CLICK,J=>{(J.x||J.y)&&P.setFocus()}));const I=L.append(w,f(\".quick-input-description\")),T=L.append(w,f(\".quick-input-and-message\")),A=L.append(T,f(\".quick-input-filter\")),P=this._register(new n.QuickInputBox(A,this.styles.inputBox,this.styles.toggle));P.setAttribute(\"aria-describedby\",`${this.idPrefix}message`);const N=L.append(A,f(\".quick-input-visible-count\"));N.setAttribute(\"aria-live\",\"polite\"),N.setAttribute(\"aria-atomic\",\"true\");const M=new E.CountBadge(N,{countFormat:(0,a.localize)(1,null)},this.styles.countBadge),R=L.append(A,f(\".quick-input-count\"));R.setAttribute(\"aria-live\",\"polite\");const x=new E.CountBadge(R,{countFormat:(0,a.localize)(2,null)},this.styles.countBadge),O=L.append(w,f(\".quick-input-action\")),B=this._register(new y.Button(O,this.styles.button));B.label=(0,a.localize)(3,null),this._register(B.onDidClick(J=>{this.onDidAcceptEmitter.fire()}));const W=L.append(w,f(\".quick-input-action\")),V=this._register(new y.Button(W,{...this.styles.button,supportIcons:!0}));V.label=(0,a.localize)(4,null),this._register(V.onDidClick(J=>{this.onDidCustomEmitter.fire()}));const K=L.append(T,f(`#${this.idPrefix}message.quick-input-message`)),F=this._register(new S.ProgressBar(l,this.styles.progressBar));F.getContainer().classList.add(\"quick-input-progress\");const q=L.append(l,f(\".quick-input-html-widget\"));q.tabIndex=-1;const ie=L.append(l,f(\".quick-input-description\")),ae=this.idPrefix+\"list\",ne=this._register(new t.QuickInputList(l,ae,this.options,this.themeService));P.setAttribute(\"aria-controls\",ae),this._register(ne.onDidChangeFocus(()=>{var J;P.setAttribute(\"aria-activedescendant\",(J=ne.getActiveDescendant())!==null&&J!==void 0?J:\"\")})),this._register(ne.onChangedAllVisibleChecked(J=>{D.checked=J})),this._register(ne.onChangedVisibleCount(J=>{M.setCount(J)})),this._register(ne.onChangedCheckedCount(J=>{x.setCount(J)})),this._register(ne.onLeave(()=>{setTimeout(()=>{P.setFocus(),this.controller instanceof r.QuickPick&&this.controller.canSelectMany&&ne.clearFocus()},0)}));const $=L.trackFocus(l);return this._register($),this._register(L.addDisposableListener(l,L.EventType.FOCUS,J=>{L.isAncestor(J.relatedTarget,l)||(this.previousFocusElement=J.relatedTarget instanceof HTMLElement?J.relatedTarget:void 0)},!0)),this._register($.onDidBlur(()=>{!this.getUI().ignoreFocusOut&&!this.options.ignoreFocusOut()&&this.hide(i.QuickInputHideReason.Blur),this.previousFocusElement=void 0})),this._register(L.addDisposableListener(l,L.EventType.FOCUS,J=>{P.setFocus()})),this._register(L.addStandardDisposableListener(l,L.EventType.KEY_DOWN,J=>{if(!L.isAncestor(J.target,q))switch(J.keyCode){case 3:L.EventHelper.stop(J,!0),this.enabled&&this.onDidAcceptEmitter.fire();break;case 9:L.EventHelper.stop(J,!0),this.hide(i.QuickInputHideReason.Gesture);break;case 2:if(!J.altKey&&!J.ctrlKey&&!J.metaKey){const Q=[\".quick-input-list .monaco-action-bar .always-visible\",\".quick-input-list-entry:hover .monaco-action-bar\",\".monaco-list-row.focused .monaco-action-bar\"];if(l.classList.contains(\"show-checkboxes\")?Q.push(\"input\"):Q.push(\"input[type=text]\"),this.getUI().list.isDisplayed()&&Q.push(\".monaco-list\"),this.getUI().message&&Q.push(\".quick-input-message a\"),this.getUI().widget){if(L.isAncestor(J.target,this.getUI().widget))break;Q.push(\".quick-input-html-widget\")}const re=l.querySelectorAll(Q.join(\", \"));J.shiftKey&&J.target===re[0]?(L.EventHelper.stop(J,!0),ne.clearFocus()):!J.shiftKey&&L.isAncestor(J.target,re[re.length-1])&&(L.EventHelper.stop(J,!0),re[0].focus())}break;case 10:J.ctrlKey&&(L.EventHelper.stop(J,!0),this.getUI().list.toggleHover());break}})),this.ui={container:l,styleSheet:o,leftActionBar:h,titleBar:g,title:m,description1:ie,description2:I,widget:q,rightActionBar:C,checkAll:D,inputContainer:T,filterContainer:A,inputBox:P,visibleCountContainer:N,visibleCount:M,countContainer:R,count:x,okContainer:O,ok:B,message:K,customButtonContainer:W,customButton:V,list:ne,progressBar:F,onDidAccept:this.onDidAcceptEmitter.event,onDidCustom:this.onDidCustomEmitter.event,onDidTriggerButton:this.onDidTriggerButtonEmitter.event,ignoreFocusOut:!1,keyMods:this.keyMods,show:J=>this.show(J),hide:()=>this.hide(),setVisibilities:J=>this.setVisibilities(J),setEnabled:J=>this.setEnabled(J),setContextKey:J=>this.options.setContextKey(J),linkOpenerDelegate:J=>this.options.linkOpenerDelegate(J)},this.updateStyles(),this.ui}reparentUI(s){this.ui&&(this.parentElement=s,L.append(this.parentElement,this.ui.container))}pick(s,l={},o=p.CancellationToken.None){return new Promise((g,h)=>{let m=I=>{var T;m=g,(T=l.onKeyMods)===null||T===void 0||T.call(l,C.keyMods),g(I)};if(o.isCancellationRequested){m(void 0);return}const C=this.createQuickPick();let w;const D=[C,C.onDidAccept(()=>{if(C.canSelectMany)m(C.selectedItems.slice()),C.hide();else{const I=C.activeItems[0];I&&(m(I),C.hide())}}),C.onDidChangeActive(I=>{const T=I[0];T&&l.onDidFocus&&l.onDidFocus(T)}),C.onDidChangeSelection(I=>{if(!C.canSelectMany){const T=I[0];T&&(m(T),C.hide())}}),C.onDidTriggerItemButton(I=>l.onDidTriggerItemButton&&l.onDidTriggerItemButton({...I,removeItem:()=>{const T=C.items.indexOf(I.item);if(T!==-1){const A=C.items.slice(),P=A.splice(T,1),N=C.activeItems.filter(R=>R!==P[0]),M=C.keepScrollPosition;C.keepScrollPosition=!0,C.items=A,N&&(C.activeItems=N),C.keepScrollPosition=M}}})),C.onDidTriggerSeparatorButton(I=>{var T;return(T=l.onDidTriggerSeparatorButton)===null||T===void 0?void 0:T.call(l,I)}),C.onDidChangeValue(I=>{w&&!I&&(C.activeItems.length!==1||C.activeItems[0]!==w)&&(C.activeItems=[w])}),o.onCancellationRequested(()=>{C.hide()}),C.onDidHide(()=>{(0,v.dispose)(D),m(void 0)})];C.title=l.title,C.canSelectMany=!!l.canPickMany,C.placeholder=l.placeHolder,C.ignoreFocusOut=!!l.ignoreFocusLost,C.matchOnDescription=!!l.matchOnDescription,C.matchOnDetail=!!l.matchOnDetail,C.matchOnLabel=l.matchOnLabel===void 0||l.matchOnLabel,C.quickNavigate=l.quickNavigate,C.hideInput=!!l.hideInput,C.contextKey=l.contextKey,C.busy=!0,Promise.all([s,l.activeItem]).then(([I,T])=>{w=T,C.busy=!1,C.items=I,C.canSelectMany&&(C.selectedItems=I.filter(A=>A.type!==\"separator\"&&A.picked)),w&&(C.activeItems=[w])}),C.show(),Promise.resolve(s).then(void 0,I=>{h(I),C.hide()})})}createQuickPick(){const s=this.getUI(!0);return new r.QuickPick(s)}createInputBox(){const s=this.getUI(!0);return new r.InputBox(s)}show(s){const l=this.getUI(!0);this.onShowEmitter.fire();const o=this.controller;this.controller=s,o?.didHide(),this.setEnabled(!0),l.leftActionBar.clear(),l.title.textContent=\"\",l.description1.textContent=\"\",l.description2.textContent=\"\",L.reset(l.widget),l.rightActionBar.clear(),l.checkAll.checked=!1,l.inputBox.placeholder=\"\",l.inputBox.password=!1,l.inputBox.showDecoration(b.default.Ignore),l.visibleCount.setCount(0),l.count.setCount(0),L.reset(l.message),l.progressBar.stop(),l.list.setElements([]),l.list.matchOnDescription=!1,l.list.matchOnDetail=!1,l.list.matchOnLabel=!0,l.list.sortByLabel=!0,l.ignoreFocusOut=!1,l.inputBox.toggles=void 0;const g=this.options.backKeybindingLabel();r.backButton.tooltip=g?(0,a.localize)(5,null,g):(0,a.localize)(6,null),l.container.style.display=\"\",this.updateLayout(),l.inputBox.setFocus()}isVisible(){return!!this.ui&&this.ui.container.style.display!==\"none\"}setVisibilities(s){const l=this.getUI();l.title.style.display=s.title?\"\":\"none\",l.description1.style.display=s.description&&(s.inputBox||s.checkAll)?\"\":\"none\",l.description2.style.display=s.description&&!(s.inputBox||s.checkAll)?\"\":\"none\",l.checkAll.style.display=s.checkAll?\"\":\"none\",l.inputContainer.style.display=s.inputBox?\"\":\"none\",l.filterContainer.style.display=s.inputBox?\"\":\"none\",l.visibleCountContainer.style.display=s.visibleCount?\"\":\"none\",l.countContainer.style.display=s.count?\"\":\"none\",l.okContainer.style.display=s.ok?\"\":\"none\",l.customButtonContainer.style.display=s.customButton?\"\":\"none\",l.message.style.display=s.message?\"\":\"none\",l.progressBar.getContainer().style.display=s.progressBar?\"\":\"none\",l.list.display(!!s.list),l.container.classList.toggle(\"show-checkboxes\",!!s.checkBox),l.container.classList.toggle(\"hidden-input\",!s.inputBox&&!s.description),this.updateLayout()}setEnabled(s){if(s!==this.enabled){this.enabled=s;for(const l of this.getUI().leftActionBar.viewItems)l.action.enabled=s;for(const l of this.getUI().rightActionBar.viewItems)l.action.enabled=s;this.getUI().checkAll.disabled=!s,this.getUI().inputBox.enabled=s,this.getUI().ok.enabled=s,this.getUI().list.enabled=s}}hide(s){var l,o;const g=this.controller;if(!g)return;const h=(l=this.ui)===null||l===void 0?void 0:l.container,m=h&&!L.isAncestorOfActiveElement(h);if(this.controller=null,this.onHideEmitter.fire(),h&&(h.style.display=\"none\"),!m){let C=this.previousFocusElement;for(;C&&!C.offsetParent;)C=(o=C.parentElement)!==null&&o!==void 0?o:void 0;C?.offsetParent?(C.focus(),this.previousFocusElement=void 0):this.options.returnFocus()}g.didHide(s)}layout(s,l){this.dimension=s,this.titleBarOffset=l,this.updateLayout()}updateLayout(){if(this.ui&&this.isVisible()){this.ui.container.style.top=`${this.titleBarOffset}px`;const s=this.ui.container.style,l=Math.min(this.dimension.width*.62,c.MAX_WIDTH);s.width=l+\"px\",s.marginLeft=\"-\"+l/2+\"px\",this.ui.inputBox.layout(),this.ui.list.layout(this.dimension&&this.dimension.height*.4)}}applyStyles(s){this.styles=s,this.updateStyles()}updateStyles(){if(this.ui){const{quickInputTitleBackground:s,quickInputBackground:l,quickInputForeground:o,widgetBorder:g,widgetShadow:h}=this.styles.widget;this.ui.titleBar.style.backgroundColor=s??\"\",this.ui.container.style.backgroundColor=l??\"\",this.ui.container.style.color=o??\"\",this.ui.container.style.border=g?`1px solid ${g}`:\"\",this.ui.container.style.boxShadow=h?`0 0 8px 2px ${h}`:\"\",this.ui.list.style(this.styles.list);const m=[];this.styles.pickerGroup.pickerGroupBorder&&m.push(`.quick-input-list .quick-input-list-entry { border-top-color:  ${this.styles.pickerGroup.pickerGroupBorder}; }`),this.styles.pickerGroup.pickerGroupForeground&&m.push(`.quick-input-list .quick-input-list-separator { color:  ${this.styles.pickerGroup.pickerGroupForeground}; }`),this.styles.pickerGroup.pickerGroupForeground&&m.push(\".quick-input-list .quick-input-list-separator-as-item { color: var(--vscode-descriptionForeground); }\"),(this.styles.keybindingLabel.keybindingLabelBackground||this.styles.keybindingLabel.keybindingLabelBorder||this.styles.keybindingLabel.keybindingLabelBottomBorder||this.styles.keybindingLabel.keybindingLabelShadow||this.styles.keybindingLabel.keybindingLabelForeground)&&(m.push(\".quick-input-list .monaco-keybinding > .monaco-keybinding-key {\"),this.styles.keybindingLabel.keybindingLabelBackground&&m.push(`background-color: ${this.styles.keybindingLabel.keybindingLabelBackground};`),this.styles.keybindingLabel.keybindingLabelBorder&&m.push(`border-color: ${this.styles.keybindingLabel.keybindingLabelBorder};`),this.styles.keybindingLabel.keybindingLabelBottomBorder&&m.push(`border-bottom-color: ${this.styles.keybindingLabel.keybindingLabelBottomBorder};`),this.styles.keybindingLabel.keybindingLabelShadow&&m.push(`box-shadow: inset 0 -1px 0 ${this.styles.keybindingLabel.keybindingLabelShadow};`),this.styles.keybindingLabel.keybindingLabelForeground&&m.push(`color: ${this.styles.keybindingLabel.keybindingLabelForeground};`),m.push(\"}\"));const C=m.join(`\n`);C!==this.ui.styleSheet.textContent&&(this.ui.styleSheet.textContent=C)}}}e.QuickInputController=c,c.MAX_WIDTH=600}),define(se[23],oe([1,0,6,2,8,37,89]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.Themable=e.registerThemingParticipant=e.Extensions=e.getThemeTypeSelector=e.themeColorFromId=e.IThemeService=void 0,e.IThemeService=(0,y.createDecorator)(\"themeService\");function p(n){return{id:n}}e.themeColorFromId=p;function _(n){switch(n){case S.ColorScheme.DARK:return\"vs-dark\";case S.ColorScheme.HIGH_CONTRAST_DARK:return\"hc-black\";case S.ColorScheme.HIGH_CONTRAST_LIGHT:return\"hc-light\";default:return\"vs\"}}e.getThemeTypeSelector=_,e.Extensions={ThemingContribution:\"base.contributions.theming\"};class v{constructor(){this.themingParticipants=[],this.themingParticipants=[],this.onThemingParticipantAddedEmitter=new L.Emitter}onColorThemeChange(t){return this.themingParticipants.push(t),this.onThemingParticipantAddedEmitter.fire(t),(0,k.toDisposable)(()=>{const r=this.themingParticipants.indexOf(t);this.themingParticipants.splice(r,1)})}getThemingParticipants(){return this.themingParticipants}}const b=new v;E.Registry.add(e.Extensions.ThemingContribution,b);function a(n){return b.onColorThemeChange(n)}e.registerThemingParticipant=a;class i extends k.Disposable{constructor(t){super(),this.themeService=t,this.theme=t.getColorTheme(),this._register(this.themeService.onDidColorThemeChange(r=>this.onThemeChange(r)))}onThemeChange(t){this.theme=t,this.updateStyles()}updateStyles(){}}e.Themable=i}),define(se[851],oe([1,0,6,2,66,23]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.GlobalStyleSheet=e.AbstractCodeEditorService=void 0;let S=class extends k.Disposable{constructor(v){super(),this._themeService=v,this._onWillCreateCodeEditor=this._register(new L.Emitter),this._onCodeEditorAdd=this._register(new L.Emitter),this.onCodeEditorAdd=this._onCodeEditorAdd.event,this._onCodeEditorRemove=this._register(new L.Emitter),this.onCodeEditorRemove=this._onCodeEditorRemove.event,this._onWillCreateDiffEditor=this._register(new L.Emitter),this._onDiffEditorAdd=this._register(new L.Emitter),this.onDiffEditorAdd=this._onDiffEditorAdd.event,this._onDiffEditorRemove=this._register(new L.Emitter),this.onDiffEditorRemove=this._onDiffEditorRemove.event,this._decorationOptionProviders=new Map,this._codeEditorOpenHandlers=new y.LinkedList,this._modelProperties=new Map,this._codeEditors=Object.create(null),this._diffEditors=Object.create(null),this._globalStyleSheet=null}willCreateCodeEditor(){this._onWillCreateCodeEditor.fire()}addCodeEditor(v){this._codeEditors[v.getId()]=v,this._onCodeEditorAdd.fire(v)}removeCodeEditor(v){delete this._codeEditors[v.getId()]&&this._onCodeEditorRemove.fire(v)}listCodeEditors(){return Object.keys(this._codeEditors).map(v=>this._codeEditors[v])}willCreateDiffEditor(){this._onWillCreateDiffEditor.fire()}addDiffEditor(v){this._diffEditors[v.getId()]=v,this._onDiffEditorAdd.fire(v)}listDiffEditors(){return Object.keys(this._diffEditors).map(v=>this._diffEditors[v])}getFocusedCodeEditor(){let v=null;const b=this.listCodeEditors();for(const a of b){if(a.hasTextFocus())return a;a.hasWidgetFocus()&&(v=a)}return v}removeDecorationType(v){const b=this._decorationOptionProviders.get(v);b&&(b.refCount--,b.refCount<=0&&(this._decorationOptionProviders.delete(v),b.dispose(),this.listCodeEditors().forEach(a=>a.removeDecorationsByType(v))))}setModelProperty(v,b,a){const i=v.toString();let n;this._modelProperties.has(i)?n=this._modelProperties.get(i):(n=new Map,this._modelProperties.set(i,n)),n.set(b,a)}getModelProperty(v,b){const a=v.toString();if(this._modelProperties.has(a))return this._modelProperties.get(a).get(b)}async openCodeEditor(v,b,a){for(const i of this._codeEditorOpenHandlers){const n=await i(v,b,a);if(n!==null)return n}return null}registerCodeEditorOpenHandler(v){const b=this._codeEditorOpenHandlers.unshift(v);return(0,k.toDisposable)(b)}};e.AbstractCodeEditorService=S,e.AbstractCodeEditorService=S=ke([ge(0,E.IThemeService)],S);class p{constructor(v){this._styleSheet=v}}e.GlobalStyleSheet=p}),define(se[852],oe([1,0,45,23,29,244,59,8,789,2,7,34,46,69,123,44]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.HoverService=void 0;let u=class{constructor(s,l,o,g,h,m){this._instantiationService=s,this._contextViewService=l,this._keybindingService=g,this._layoutService=h,this._accessibilityService=m,o.onDidShowContextMenu(()=>this.hideHover())}showHover(s,l,o){var g,h,m,C;if(f(this._currentHoverOptions)===f(s)||this._currentHover&&(!((h=(g=this._currentHoverOptions)===null||g===void 0?void 0:g.persistence)===null||h===void 0)&&h.sticky))return;this._currentHoverOptions=s,this._lastHoverOptions=s;const w=s.trapFocus||this._accessibilityService.isScreenReaderOptimized(),D=(0,b.getActiveElement)();o||(w&&D?this._lastFocusedElementBeforeOpen=D:this._lastFocusedElementBeforeOpen=void 0);const I=new v.DisposableStore,T=this._instantiationService.createInstance(_.HoverWidget,s);if(!((m=s.persistence)===null||m===void 0)&&m.sticky&&(T.isLocked=!0),T.onDispose(()=>{var P,N;((P=this._currentHover)===null||P===void 0?void 0:P.domNode)&&(0,b.isAncestorOfActiveElement)(this._currentHover.domNode)&&((N=this._lastFocusedElementBeforeOpen)===null||N===void 0||N.focus()),this._currentHoverOptions===s&&(this._currentHoverOptions=void 0),I.dispose()}),!s.container){const P=s.target instanceof HTMLElement?s.target:s.target.targetElements[0];s.container=this._layoutService.getContainer((0,b.getWindow)(P))}const A=this._contextViewService;if(A.showContextView(new c(T,l),s.container),T.onRequestLayout(()=>A.layout()),!((C=s.persistence)===null||C===void 0)&&C.sticky)I.add((0,b.addDisposableListener)((0,b.getWindow)(s.container).document,b.EventType.MOUSE_DOWN,P=>{(0,b.isAncestor)(P.target,T.domNode)||this.doHideHover()}));else{if(\"targetElements\"in s.target)for(const N of s.target.targetElements)I.add((0,b.addDisposableListener)(N,b.EventType.CLICK,()=>this.hideHover()));else I.add((0,b.addDisposableListener)(s.target,b.EventType.CLICK,()=>this.hideHover()));const P=(0,b.getActiveElement)();if(P){const N=(0,b.getWindow)(P).document;I.add((0,b.addDisposableListener)(P,b.EventType.KEY_DOWN,M=>{var R;return this._keyDown(M,T,!!(!((R=s.persistence)===null||R===void 0)&&R.hideOnKeyDown))})),I.add((0,b.addDisposableListener)(N,b.EventType.KEY_DOWN,M=>{var R;return this._keyDown(M,T,!!(!((R=s.persistence)===null||R===void 0)&&R.hideOnKeyDown))})),I.add((0,b.addDisposableListener)(P,b.EventType.KEY_UP,M=>this._keyUp(M,T))),I.add((0,b.addDisposableListener)(N,b.EventType.KEY_UP,M=>this._keyUp(M,T)))}}if(\"IntersectionObserver\"in r.mainWindow){const P=new IntersectionObserver(M=>this._intersectionChange(M,T),{threshold:0}),N=\"targetElements\"in s.target?s.target.targetElements[0]:s.target;P.observe(N),I.add((0,v.toDisposable)(()=>P.disconnect()))}return this._currentHover=T,T}hideHover(){var s;!((s=this._currentHover)===null||s===void 0)&&s.isLocked||!this._currentHoverOptions||this.doHideHover()}doHideHover(){this._currentHover=void 0,this._currentHoverOptions=void 0,this._contextViewService.hideContextView()}_intersectionChange(s,l){s[s.length-1].isIntersecting||l.dispose()}_keyDown(s,l,o){var g,h;if(s.key===\"Alt\"){l.isLocked=!0;return}const m=new i.StandardKeyboardEvent(s);this._keybindingService.resolveKeyboardEvent(m).getSingleModifierDispatchChords().some(w=>!!w)||this._keybindingService.softDispatch(m,m.target).kind!==0||o&&(!(!((g=this._currentHoverOptions)===null||g===void 0)&&g.trapFocus)||s.key!==\"Tab\")&&(this.hideHover(),(h=this._lastFocusedElementBeforeOpen)===null||h===void 0||h.focus())}_keyUp(s,l){var o;s.key===\"Alt\"&&(l.isLocked=!1,l.isMouseIn||(this.hideHover(),(o=this._lastFocusedElementBeforeOpen)===null||o===void 0||o.focus()))}};e.HoverService=u,e.HoverService=u=ke([ge(0,p.IInstantiationService),ge(1,S.IContextViewService),ge(2,S.IContextMenuService),ge(3,a.IKeybindingService),ge(4,t.ILayoutService),ge(5,n.IAccessibilityService)],u);function f(d){var s;if(d!==void 0)return(s=d?.id)!==null&&s!==void 0?s:d}class c{get anchorPosition(){return this._hover.anchor}constructor(s,l=!1){this._hover=s,this._focus=l}render(s){return this._hover.render(s),this._focus&&this._hover.focus(),this._hover}getAnchor(){return{x:this._hover.x,y:this._hover.y}}layout(){this._hover.layout()}}(0,L.registerSingleton)(E.IHoverService,u,1),(0,k.registerThemingParticipant)((d,s)=>{const l=d.getColor(y.editorHoverBorder);l&&(s.addRule(`.monaco-workbench .workbench-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${l.transparent(.5)}; }`),s.addRule(`.monaco-workbench .workbench-hover hr { border-top: 1px solid ${l.transparent(.5)}; }`))})}),define(se[853],oe([1,0,7,40,77,56,23]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorScrollbar=void 0;class p extends E.ViewPart{constructor(v,b,a,i){super(v);const n=this._context.configuration.options,t=n.get(102),r=n.get(74),u=n.get(40),f=n.get(105),c={listenOnDomNode:a.domNode,className:\"editor-scrollable \"+(0,S.getThemeTypeSelector)(v.theme.type),useShadows:!1,lazyRender:!0,vertical:t.vertical,horizontal:t.horizontal,verticalHasArrows:t.verticalHasArrows,horizontalHasArrows:t.horizontalHasArrows,verticalScrollbarSize:t.verticalScrollbarSize,verticalSliderSize:t.verticalSliderSize,horizontalScrollbarSize:t.horizontalScrollbarSize,horizontalSliderSize:t.horizontalSliderSize,handleMouseWheel:t.handleMouseWheel,alwaysConsumeMouseWheel:t.alwaysConsumeMouseWheel,arrowSize:t.arrowSize,mouseWheelScrollSensitivity:r,fastScrollSensitivity:u,scrollPredominantAxis:f,scrollByPage:t.scrollByPage};this.scrollbar=this._register(new y.SmoothScrollableElement(b.domNode,c,this._context.viewLayout.getScrollable())),E.PartFingerprints.write(this.scrollbar.getDomNode(),6),this.scrollbarDomNode=(0,k.createFastDomNode)(this.scrollbar.getDomNode()),this.scrollbarDomNode.setPosition(\"absolute\"),this._setLayout();const d=(s,l,o)=>{const g={};if(l){const h=s.scrollTop;h&&(g.scrollTop=this._context.viewLayout.getCurrentScrollTop()+h,s.scrollTop=0)}if(o){const h=s.scrollLeft;h&&(g.scrollLeft=this._context.viewLayout.getCurrentScrollLeft()+h,s.scrollLeft=0)}this._context.viewModel.viewLayout.setScrollPosition(g,1)};this._register(L.addDisposableListener(a.domNode,\"scroll\",s=>d(a.domNode,!0,!0))),this._register(L.addDisposableListener(b.domNode,\"scroll\",s=>d(b.domNode,!0,!1))),this._register(L.addDisposableListener(i.domNode,\"scroll\",s=>d(i.domNode,!0,!1))),this._register(L.addDisposableListener(this.scrollbarDomNode.domNode,\"scroll\",s=>d(this.scrollbarDomNode.domNode,!0,!1)))}dispose(){super.dispose()}_setLayout(){const v=this._context.configuration.options,b=v.get(143);this.scrollbarDomNode.setLeft(b.contentLeft),v.get(72).side===\"right\"?this.scrollbarDomNode.setWidth(b.contentWidth+b.minimap.minimapWidth):this.scrollbarDomNode.setWidth(b.contentWidth),this.scrollbarDomNode.setHeight(b.height)}getOverviewRulerLayoutInfo(){return this.scrollbar.getOverviewRulerLayoutInfo()}getDomNode(){return this.scrollbarDomNode}delegateVerticalScrollbarPointerDown(v){this.scrollbar.delegateVerticalScrollbarPointerDown(v)}delegateScrollFromMouseWheelEvent(v){this.scrollbar.delegateScrollFromMouseWheelEvent(v)}onConfigurationChanged(v){if(v.hasChanged(102)||v.hasChanged(74)||v.hasChanged(40)){const b=this._context.configuration.options,a=b.get(102),i=b.get(74),n=b.get(40),t=b.get(105),r={vertical:a.vertical,horizontal:a.horizontal,verticalScrollbarSize:a.verticalScrollbarSize,horizontalScrollbarSize:a.horizontalScrollbarSize,scrollByPage:a.scrollByPage,handleMouseWheel:a.handleMouseWheel,mouseWheelScrollSensitivity:i,fastScrollSensitivity:n,scrollPredominantAxis:t};this.scrollbar.updateOptions(r)}return v.hasChanged(143)&&this._setLayout(),!0}onScrollChanged(v){return!0}onThemeChanged(v){return this.scrollbar.updateClassName(\"editor-scrollable \"+(0,S.getThemeTypeSelector)(this._context.theme.type)),!0}prepareRender(v){}render(v){this.scrollbar.renderNow()}}e.EditorScrollbar=p}),define(se[854],oe([1,0,115,29,23,444]),function(te,e,L,k,y){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectionsOverlay=void 0;class E{constructor(i){this.left=i.left,this.width=i.width,this.startStyle=null,this.endStyle=null}}class S{constructor(i,n){this.lineNumber=i,this.ranges=n}}function p(a){return new E(a)}function _(a){return new S(a.lineNumber,a.ranges.map(p))}class v extends L.DynamicViewOverlay{constructor(i){super(),this._previousFrameVisibleRangesWithStyle=[],this._context=i;const n=this._context.configuration.options;this._lineHeight=n.get(66),this._roundedSelection=n.get(100),this._typicalHalfwidthCharacterWidth=n.get(50).typicalHalfwidthCharacterWidth,this._selections=[],this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(i){const n=this._context.configuration.options;return this._lineHeight=n.get(66),this._roundedSelection=n.get(100),this._typicalHalfwidthCharacterWidth=n.get(50).typicalHalfwidthCharacterWidth,!0}onCursorStateChanged(i){return this._selections=i.selections.slice(0),!0}onDecorationsChanged(i){return!0}onFlushed(i){return!0}onLinesChanged(i){return!0}onLinesDeleted(i){return!0}onLinesInserted(i){return!0}onScrollChanged(i){return i.scrollTopChanged}onZonesChanged(i){return!0}_visibleRangesHaveGaps(i){for(let n=0,t=i.length;n<t;n++)if(i[n].ranges.length>1)return!0;return!1}_enrichVisibleRangesWithStyle(i,n,t){const r=this._typicalHalfwidthCharacterWidth/4;let u=null,f=null;if(t&&t.length>0&&n.length>0){const c=n[0].lineNumber;if(c===i.startLineNumber)for(let s=0;!u&&s<t.length;s++)t[s].lineNumber===c&&(u=t[s].ranges[0]);const d=n[n.length-1].lineNumber;if(d===i.endLineNumber)for(let s=t.length-1;!f&&s>=0;s--)t[s].lineNumber===d&&(f=t[s].ranges[0]);u&&!u.startStyle&&(u=null),f&&!f.startStyle&&(f=null)}for(let c=0,d=n.length;c<d;c++){const s=n[c].ranges[0],l=s.left,o=s.left+s.width,g={top:0,bottom:0},h={top:0,bottom:0};if(c>0){const m=n[c-1].ranges[0].left,C=n[c-1].ranges[0].left+n[c-1].ranges[0].width;b(l-m)<r?g.top=2:l>m&&(g.top=1),b(o-C)<r?h.top=2:m<o&&o<C&&(h.top=1)}else u&&(g.top=u.startStyle.top,h.top=u.endStyle.top);if(c+1<d){const m=n[c+1].ranges[0].left,C=n[c+1].ranges[0].left+n[c+1].ranges[0].width;b(l-m)<r?g.bottom=2:m<l&&l<C&&(g.bottom=1),b(o-C)<r?h.bottom=2:o<C&&(h.bottom=1)}else f&&(g.bottom=f.startStyle.bottom,h.bottom=f.endStyle.bottom);s.startStyle=g,s.endStyle=h}}_getVisibleRangesWithStyle(i,n,t){const u=(n.linesVisibleRangesForRange(i,!0)||[]).map(_);return!this._visibleRangesHaveGaps(u)&&this._roundedSelection&&this._enrichVisibleRangesWithStyle(n.visibleRange,u,t),u}_createSelectionPiece(i,n,t,r,u){return'<div class=\"cslr '+t+'\" style=\"top:'+i.toString()+\"px;left:\"+r.toString()+\"px;width:\"+u.toString()+\"px;height:\"+n+'px;\"></div>'}_actualRenderOneSelection(i,n,t,r){if(r.length===0)return;const u=!!r[0].ranges[0].startStyle,f=this._lineHeight.toString(),c=(this._lineHeight-1).toString(),d=r[0].lineNumber,s=r[r.length-1].lineNumber;for(let l=0,o=r.length;l<o;l++){const g=r[l],h=g.lineNumber,m=h-n,C=t&&(h===s||h===d)?c:f,w=t&&h===d?1:0;let D=\"\",I=\"\";for(let T=0,A=g.ranges.length;T<A;T++){const P=g.ranges[T];if(u){const M=P.startStyle,R=P.endStyle;if(M.top===1||M.bottom===1){D+=this._createSelectionPiece(w,C,v.SELECTION_CLASS_NAME,P.left-v.ROUNDED_PIECE_WIDTH,v.ROUNDED_PIECE_WIDTH);let x=v.EDITOR_BACKGROUND_CLASS_NAME;M.top===1&&(x+=\" \"+v.SELECTION_TOP_RIGHT),M.bottom===1&&(x+=\" \"+v.SELECTION_BOTTOM_RIGHT),D+=this._createSelectionPiece(w,C,x,P.left-v.ROUNDED_PIECE_WIDTH,v.ROUNDED_PIECE_WIDTH)}if(R.top===1||R.bottom===1){D+=this._createSelectionPiece(w,C,v.SELECTION_CLASS_NAME,P.left+P.width,v.ROUNDED_PIECE_WIDTH);let x=v.EDITOR_BACKGROUND_CLASS_NAME;R.top===1&&(x+=\" \"+v.SELECTION_TOP_LEFT),R.bottom===1&&(x+=\" \"+v.SELECTION_BOTTOM_LEFT),D+=this._createSelectionPiece(w,C,x,P.left+P.width,v.ROUNDED_PIECE_WIDTH)}}let N=v.SELECTION_CLASS_NAME;if(u){const M=P.startStyle,R=P.endStyle;M.top===0&&(N+=\" \"+v.SELECTION_TOP_LEFT),M.bottom===0&&(N+=\" \"+v.SELECTION_BOTTOM_LEFT),R.top===0&&(N+=\" \"+v.SELECTION_TOP_RIGHT),R.bottom===0&&(N+=\" \"+v.SELECTION_BOTTOM_RIGHT)}I+=this._createSelectionPiece(w,C,N,P.left,P.width)}i[m][0]+=D,i[m][1]+=I}}prepareRender(i){const n=[],t=i.visibleRange.startLineNumber,r=i.visibleRange.endLineNumber;for(let f=t;f<=r;f++){const c=f-t;n[c]=[\"\",\"\"]}const u=[];for(let f=0,c=this._selections.length;f<c;f++){const d=this._selections[f];if(d.isEmpty()){u[f]=null;continue}const s=this._getVisibleRangesWithStyle(d,i,this._previousFrameVisibleRangesWithStyle[f]);u[f]=s,this._actualRenderOneSelection(n,t,this._selections.length>1,s)}this._previousFrameVisibleRangesWithStyle=u,this._renderResult=n.map(([f,c])=>f+c)}render(i,n){if(!this._renderResult)return\"\";const t=n-i;return t<0||t>=this._renderResult.length?\"\":this._renderResult[t]}}e.SelectionsOverlay=v,v.SELECTION_CLASS_NAME=\"selected-text\",v.SELECTION_TOP_LEFT=\"top-left-radius\",v.SELECTION_BOTTOM_LEFT=\"bottom-left-radius\",v.SELECTION_TOP_RIGHT=\"top-right-radius\",v.SELECTION_BOTTOM_RIGHT=\"bottom-right-radius\",v.EDITOR_BACKGROUND_CLASS_NAME=\"monaco-editor-background\",v.ROUNDED_PIECE_WIDTH=10,(0,y.registerThemingParticipant)((a,i)=>{const n=a.getColor(k.editorSelectionForeground);n&&!n.isTransparent()&&i.addRule(`.monaco-editor .view-line span.inline-selected-text { color: ${n}; }`)});function b(a){return a<0?-a:a}}),define(se[368],oe([1,0,7,40,197,2,35,87,10,300,29,23]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";var i;Object.defineProperty(e,\"__esModule\",{value:!0}),e.OverviewRulerFeature=void 0;let n=i=class extends E.Disposable{constructor(r,u,f,c,d,s,l){super(),this._editors=r,this._rootElement=u,this._diffModel=f,this._rootWidth=c,this._rootHeight=d,this._modifiedEditorLayoutInfo=s,this._themeService=l,this.width=i.ENTIRE_DIFF_OVERVIEW_WIDTH;const o=(0,S.observableFromEvent)(this._themeService.onDidColorThemeChange,()=>this._themeService.getColorTheme()),g=(0,S.derived)(C=>{const w=o.read(C),D=w.getColor(b.diffOverviewRulerInserted)||(w.getColor(b.diffInserted)||b.defaultInsertColor).transparent(2),I=w.getColor(b.diffOverviewRulerRemoved)||(w.getColor(b.diffRemoved)||b.defaultRemoveColor).transparent(2);return{insertColor:D,removeColor:I}}),h=(0,k.createFastDomNode)(document.createElement(\"div\"));h.setClassName(\"diffViewport\"),h.setPosition(\"absolute\");const m=(0,L.h)(\"div.diffOverview\",{style:{position:\"absolute\",top:\"0px\",width:i.ENTIRE_DIFF_OVERVIEW_WIDTH+\"px\"}}).root;this._register((0,p.appendRemoveOnDispose)(m,h.domNode)),this._register((0,L.addStandardDisposableListener)(m,L.EventType.POINTER_DOWN,C=>{this._editors.modified.delegateVerticalScrollbarPointerDown(C)})),this._register((0,L.addDisposableListener)(m,L.EventType.MOUSE_WHEEL,C=>{this._editors.modified.delegateScrollFromMouseWheelEvent(C)},{passive:!1})),this._register((0,p.appendRemoveOnDispose)(this._rootElement,m)),this._register((0,S.autorunWithStore)((C,w)=>{const D=this._diffModel.read(C),I=this._editors.original.createOverviewRuler(\"original diffOverviewRuler\");I&&(w.add(I),w.add((0,p.appendRemoveOnDispose)(m,I.getDomNode())));const T=this._editors.modified.createOverviewRuler(\"modified diffOverviewRuler\");if(T&&(w.add(T),w.add((0,p.appendRemoveOnDispose)(m,T.getDomNode()))),!I||!T)return;const A=(0,S.observableSignalFromEvent)(\"viewZoneChanged\",this._editors.original.onDidChangeViewZones),P=(0,S.observableSignalFromEvent)(\"viewZoneChanged\",this._editors.modified.onDidChangeViewZones),N=(0,S.observableSignalFromEvent)(\"hiddenRangesChanged\",this._editors.original.onDidChangeHiddenAreas),M=(0,S.observableSignalFromEvent)(\"hiddenRangesChanged\",this._editors.modified.onDidChangeHiddenAreas);w.add((0,S.autorun)(R=>{var x;A.read(R),P.read(R),N.read(R),M.read(R);const O=g.read(R),B=(x=D?.diff.read(R))===null||x===void 0?void 0:x.mappings;function W(F,q,ie){const ae=ie._getViewModel();return ae?F.filter(ne=>ne.length>0).map(ne=>{const $=ae.coordinatesConverter.convertModelPositionToViewPosition(new _.Position(ne.startLineNumber,1)),J=ae.coordinatesConverter.convertModelPositionToViewPosition(new _.Position(ne.endLineNumberExclusive,1)),Q=J.lineNumber-$.lineNumber;return new v.OverviewRulerZone($.lineNumber,J.lineNumber,Q,q.toString())}):[]}const V=W((B||[]).map(F=>F.lineRangeMapping.original),O.removeColor,this._editors.original),K=W((B||[]).map(F=>F.lineRangeMapping.modified),O.insertColor,this._editors.modified);I?.setZones(V),T?.setZones(K)})),w.add((0,S.autorun)(R=>{const x=this._rootHeight.read(R),O=this._rootWidth.read(R),B=this._modifiedEditorLayoutInfo.read(R);if(B){const W=i.ENTIRE_DIFF_OVERVIEW_WIDTH-2*i.ONE_OVERVIEW_WIDTH;I.setLayout({top:0,height:x,right:W+i.ONE_OVERVIEW_WIDTH,width:i.ONE_OVERVIEW_WIDTH}),T.setLayout({top:0,height:x,right:0,width:i.ONE_OVERVIEW_WIDTH});const V=this._editors.modifiedScrollTop.read(R),K=this._editors.modifiedScrollHeight.read(R),F=this._editors.modified.getOption(102),q=new y.ScrollbarState(F.verticalHasArrows?F.arrowSize:0,F.verticalScrollbarSize,0,B.height,K,V);h.setTop(q.getSliderPosition()),h.setHeight(q.getSliderSize())}else h.setTop(0),h.setHeight(0);m.style.height=x+\"px\",m.style.left=O-i.ENTIRE_DIFF_OVERVIEW_WIDTH+\"px\",h.setWidth(i.ENTIRE_DIFF_OVERVIEW_WIDTH)}))}))}};e.OverviewRulerFeature=n,n.ONE_OVERVIEW_WIDTH=15,n.ENTIRE_DIFF_OVERVIEW_WIDTH=i.ONE_OVERVIEW_WIDTH*2,e.OverviewRulerFeature=n=i=ke([ge(6,a.IThemeService)],n)}),define(se[855],oe([1,0,6,2,35,368,36,623,8,34,10]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DiffEditorEditors=void 0;let a=class extends k.Disposable{get onDidContentSizeChange(){return this._onDidContentSizeChange.event}constructor(n,t,r,u,f,c,d){super(),this.originalEditorElement=n,this.modifiedEditorElement=t,this._options=r,this._createInnerEditor=f,this._instantiationService=c,this._keybindingService=d,this._onDidContentSizeChange=this._register(new L.Emitter),this.original=this._register(this._createLeftHandSideEditor(r.editorOptions.get(),u.originalEditor||{})),this.modified=this._register(this._createRightHandSideEditor(r.editorOptions.get(),u.modifiedEditor||{})),this.modifiedModel=(0,y.observableFromEvent)(this.modified.onDidChangeModel,()=>this.modified.getModel()),this.modifiedScrollTop=(0,y.observableFromEvent)(this.modified.onDidScrollChange,()=>this.modified.getScrollTop()),this.modifiedScrollHeight=(0,y.observableFromEvent)(this.modified.onDidScrollChange,()=>this.modified.getScrollHeight()),this.modifiedSelections=(0,y.observableFromEvent)(this.modified.onDidChangeCursorSelection,()=>{var s;return(s=this.modified.getSelections())!==null&&s!==void 0?s:[]}),this.modifiedCursor=(0,y.observableFromEvent)(this.modified.onDidChangeCursorPosition,()=>{var s;return(s=this.modified.getPosition())!==null&&s!==void 0?s:new b.Position(1,1)}),this._register((0,y.autorunHandleChanges)({createEmptyChangeSummary:()=>({}),handleChange:(s,l)=>(s.didChange(r.editorOptions)&&Object.assign(l,s.change.changedOptions),!0)},(s,l)=>{r.editorOptions.read(s),this._options.renderSideBySide.read(s),this.modified.updateOptions(this._adjustOptionsForRightHandSide(s,l)),this.original.updateOptions(this._adjustOptionsForLeftHandSide(s,l))}))}_createLeftHandSideEditor(n,t){const r=this._adjustOptionsForLeftHandSide(void 0,n),u=this._constructInnerEditor(this._instantiationService,this.originalEditorElement,r,t);return u.setContextValue(\"isInDiffLeftEditor\",!0),u}_createRightHandSideEditor(n,t){const r=this._adjustOptionsForRightHandSide(void 0,n),u=this._constructInnerEditor(this._instantiationService,this.modifiedEditorElement,r,t);return u.setContextValue(\"isInDiffRightEditor\",!0),u}_constructInnerEditor(n,t,r,u){const f=this._createInnerEditor(n,t,r,u);return this._register(f.onDidContentSizeChange(c=>{const d=this.original.getContentWidth()+this.modified.getContentWidth()+E.OverviewRulerFeature.ENTIRE_DIFF_OVERVIEW_WIDTH,s=Math.max(this.modified.getContentHeight(),this.original.getContentHeight());this._onDidContentSizeChange.fire({contentHeight:s,contentWidth:d,contentHeightChanged:c.contentHeightChanged,contentWidthChanged:c.contentWidthChanged})})),f}_adjustOptionsForLeftHandSide(n,t){const r=this._adjustOptionsForSubEditor(t);return this._options.renderSideBySide.get()?(r.unicodeHighlight=this._options.editorOptions.get().unicodeHighlight||{},r.wordWrapOverride1=this._options.diffWordWrap.get()):(r.wordWrapOverride1=\"off\",r.wordWrapOverride2=\"off\",r.stickyScroll={enabled:!1},r.unicodeHighlight={nonBasicASCII:!1,ambiguousCharacters:!1,invisibleCharacters:!1}),r.glyphMargin=this._options.renderSideBySide.get(),t.originalAriaLabel&&(r.ariaLabel=t.originalAriaLabel),r.ariaLabel=this._updateAriaLabel(r.ariaLabel),r.readOnly=!this._options.originalEditable.get(),r.dropIntoEditor={enabled:!r.readOnly},r.extraEditorClassName=\"original-in-monaco-diff-editor\",r}_adjustOptionsForRightHandSide(n,t){const r=this._adjustOptionsForSubEditor(t);return t.modifiedAriaLabel&&(r.ariaLabel=t.modifiedAriaLabel),r.ariaLabel=this._updateAriaLabel(r.ariaLabel),r.wordWrapOverride1=this._options.diffWordWrap.get(),r.revealHorizontalRightPadding=S.EditorOptions.revealHorizontalRightPadding.defaultValue+E.OverviewRulerFeature.ENTIRE_DIFF_OVERVIEW_WIDTH,r.scrollbar.verticalHasArrows=!1,r.extraEditorClassName=\"modified-in-monaco-diff-editor\",r}_adjustOptionsForSubEditor(n){const t={...n,dimension:{height:0,width:0}};return t.inDiffEditor=!0,t.automaticLayout=!1,t.scrollbar={...t.scrollbar||{}},t.folding=!1,t.codeLens=this._options.diffCodeLens.get(),t.fixedOverflowWidgets=!0,t.minimap={...t.minimap||{}},t.minimap.enabled=!1,this._options.hideUnchangedRegions.get()?t.stickyScroll={enabled:!1}:t.stickyScroll=this._options.editorOptions.get().stickyScroll,t}_updateAriaLabel(n){var t;n||(n=\"\");const r=(0,p.localize)(0,null,(t=this._keybindingService.lookupKeybinding(\"editor.action.accessibilityHelp\"))===null||t===void 0?void 0:t.getAriaLabel());return this._options.accessibilityVerbose.get()?n+r:n?n.replaceAll(r,\"\"):\"\"}};e.DiffEditorEditors=a,e.DiffEditorEditors=a=ke([ge(5,_.IInstantiationService),ge(6,v.IKeybindingService)],a)}),define(se[83],oe([1,0,638,39,29,23]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.editorUnicodeHighlightBackground=e.editorUnicodeHighlightBorder=e.editorBracketPairGuideActiveBackground6=e.editorBracketPairGuideActiveBackground5=e.editorBracketPairGuideActiveBackground4=e.editorBracketPairGuideActiveBackground3=e.editorBracketPairGuideActiveBackground2=e.editorBracketPairGuideActiveBackground1=e.editorBracketPairGuideBackground6=e.editorBracketPairGuideBackground5=e.editorBracketPairGuideBackground4=e.editorBracketPairGuideBackground3=e.editorBracketPairGuideBackground2=e.editorBracketPairGuideBackground1=e.editorBracketHighlightingUnexpectedBracketForeground=e.editorBracketHighlightingForeground6=e.editorBracketHighlightingForeground5=e.editorBracketHighlightingForeground4=e.editorBracketHighlightingForeground3=e.editorBracketHighlightingForeground2=e.editorBracketHighlightingForeground1=e.overviewRulerInfo=e.overviewRulerWarning=e.overviewRulerError=e.overviewRulerRangeHighlight=e.ghostTextBackground=e.ghostTextForeground=e.ghostTextBorder=e.editorUnnecessaryCodeOpacity=e.editorUnnecessaryCodeBorder=e.editorGutter=e.editorOverviewRulerBackground=e.editorOverviewRulerBorder=e.editorBracketMatchBorder=e.editorBracketMatchBackground=e.editorCodeLensForeground=e.editorRuler=e.editorDimmedLineNumber=e.editorActiveLineNumber=e.editorActiveIndentGuide6=e.editorActiveIndentGuide5=e.editorActiveIndentGuide4=e.editorActiveIndentGuide3=e.editorActiveIndentGuide2=e.editorActiveIndentGuide1=e.editorIndentGuide6=e.editorIndentGuide5=e.editorIndentGuide4=e.editorIndentGuide3=e.editorIndentGuide2=e.editorIndentGuide1=e.deprecatedEditorActiveIndentGuides=e.deprecatedEditorIndentGuides=e.editorLineNumbers=e.editorWhitespaces=e.editorCursorBackground=e.editorCursorForeground=e.editorSymbolHighlightBorder=e.editorSymbolHighlight=e.editorRangeHighlightBorder=e.editorRangeHighlight=e.editorLineHighlightBorder=e.editorLineHighlight=void 0,e.editorLineHighlight=(0,y.registerColor)(\"editor.lineHighlightBackground\",{dark:null,light:null,hcDark:null,hcLight:null},L.localize(0,null)),e.editorLineHighlightBorder=(0,y.registerColor)(\"editor.lineHighlightBorder\",{dark:\"#282828\",light:\"#eeeeee\",hcDark:\"#f38518\",hcLight:y.contrastBorder},L.localize(1,null)),e.editorRangeHighlight=(0,y.registerColor)(\"editor.rangeHighlightBackground\",{dark:\"#ffffff0b\",light:\"#fdff0033\",hcDark:null,hcLight:null},L.localize(2,null),!0),e.editorRangeHighlightBorder=(0,y.registerColor)(\"editor.rangeHighlightBorder\",{dark:null,light:null,hcDark:y.activeContrastBorder,hcLight:y.activeContrastBorder},L.localize(3,null),!0),e.editorSymbolHighlight=(0,y.registerColor)(\"editor.symbolHighlightBackground\",{dark:y.editorFindMatchHighlight,light:y.editorFindMatchHighlight,hcDark:null,hcLight:null},L.localize(4,null),!0),e.editorSymbolHighlightBorder=(0,y.registerColor)(\"editor.symbolHighlightBorder\",{dark:null,light:null,hcDark:y.activeContrastBorder,hcLight:y.activeContrastBorder},L.localize(5,null),!0),e.editorCursorForeground=(0,y.registerColor)(\"editorCursor.foreground\",{dark:\"#AEAFAD\",light:k.Color.black,hcDark:k.Color.white,hcLight:\"#0F4A85\"},L.localize(6,null)),e.editorCursorBackground=(0,y.registerColor)(\"editorCursor.background\",null,L.localize(7,null)),e.editorWhitespaces=(0,y.registerColor)(\"editorWhitespace.foreground\",{dark:\"#e3e4e229\",light:\"#33333333\",hcDark:\"#e3e4e229\",hcLight:\"#CCCCCC\"},L.localize(8,null)),e.editorLineNumbers=(0,y.registerColor)(\"editorLineNumber.foreground\",{dark:\"#858585\",light:\"#237893\",hcDark:k.Color.white,hcLight:\"#292929\"},L.localize(9,null)),e.deprecatedEditorIndentGuides=(0,y.registerColor)(\"editorIndentGuide.background\",{dark:e.editorWhitespaces,light:e.editorWhitespaces,hcDark:e.editorWhitespaces,hcLight:e.editorWhitespaces},L.localize(10,null),!1,L.localize(11,null)),e.deprecatedEditorActiveIndentGuides=(0,y.registerColor)(\"editorIndentGuide.activeBackground\",{dark:e.editorWhitespaces,light:e.editorWhitespaces,hcDark:e.editorWhitespaces,hcLight:e.editorWhitespaces},L.localize(12,null),!1,L.localize(13,null)),e.editorIndentGuide1=(0,y.registerColor)(\"editorIndentGuide.background1\",{dark:e.deprecatedEditorIndentGuides,light:e.deprecatedEditorIndentGuides,hcDark:e.deprecatedEditorIndentGuides,hcLight:e.deprecatedEditorIndentGuides},L.localize(14,null)),e.editorIndentGuide2=(0,y.registerColor)(\"editorIndentGuide.background2\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(15,null)),e.editorIndentGuide3=(0,y.registerColor)(\"editorIndentGuide.background3\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(16,null)),e.editorIndentGuide4=(0,y.registerColor)(\"editorIndentGuide.background4\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(17,null)),e.editorIndentGuide5=(0,y.registerColor)(\"editorIndentGuide.background5\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(18,null)),e.editorIndentGuide6=(0,y.registerColor)(\"editorIndentGuide.background6\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(19,null)),e.editorActiveIndentGuide1=(0,y.registerColor)(\"editorIndentGuide.activeBackground1\",{dark:e.deprecatedEditorActiveIndentGuides,light:e.deprecatedEditorActiveIndentGuides,hcDark:e.deprecatedEditorActiveIndentGuides,hcLight:e.deprecatedEditorActiveIndentGuides},L.localize(20,null)),e.editorActiveIndentGuide2=(0,y.registerColor)(\"editorIndentGuide.activeBackground2\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(21,null)),e.editorActiveIndentGuide3=(0,y.registerColor)(\"editorIndentGuide.activeBackground3\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(22,null)),e.editorActiveIndentGuide4=(0,y.registerColor)(\"editorIndentGuide.activeBackground4\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(23,null)),e.editorActiveIndentGuide5=(0,y.registerColor)(\"editorIndentGuide.activeBackground5\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(24,null)),e.editorActiveIndentGuide6=(0,y.registerColor)(\"editorIndentGuide.activeBackground6\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(25,null));const S=(0,y.registerColor)(\"editorActiveLineNumber.foreground\",{dark:\"#c6c6c6\",light:\"#0B216F\",hcDark:y.activeContrastBorder,hcLight:y.activeContrastBorder},L.localize(26,null),!1,L.localize(27,null));e.editorActiveLineNumber=(0,y.registerColor)(\"editorLineNumber.activeForeground\",{dark:S,light:S,hcDark:S,hcLight:S},L.localize(28,null)),e.editorDimmedLineNumber=(0,y.registerColor)(\"editorLineNumber.dimmedForeground\",{dark:null,light:null,hcDark:null,hcLight:null},L.localize(29,null)),e.editorRuler=(0,y.registerColor)(\"editorRuler.foreground\",{dark:\"#5A5A5A\",light:k.Color.lightgrey,hcDark:k.Color.white,hcLight:\"#292929\"},L.localize(30,null)),e.editorCodeLensForeground=(0,y.registerColor)(\"editorCodeLens.foreground\",{dark:\"#999999\",light:\"#919191\",hcDark:\"#999999\",hcLight:\"#292929\"},L.localize(31,null)),e.editorBracketMatchBackground=(0,y.registerColor)(\"editorBracketMatch.background\",{dark:\"#0064001a\",light:\"#0064001a\",hcDark:\"#0064001a\",hcLight:\"#0000\"},L.localize(32,null)),e.editorBracketMatchBorder=(0,y.registerColor)(\"editorBracketMatch.border\",{dark:\"#888\",light:\"#B9B9B9\",hcDark:y.contrastBorder,hcLight:y.contrastBorder},L.localize(33,null)),e.editorOverviewRulerBorder=(0,y.registerColor)(\"editorOverviewRuler.border\",{dark:\"#7f7f7f4d\",light:\"#7f7f7f4d\",hcDark:\"#7f7f7f4d\",hcLight:\"#666666\"},L.localize(34,null)),e.editorOverviewRulerBackground=(0,y.registerColor)(\"editorOverviewRuler.background\",null,L.localize(35,null)),e.editorGutter=(0,y.registerColor)(\"editorGutter.background\",{dark:y.editorBackground,light:y.editorBackground,hcDark:y.editorBackground,hcLight:y.editorBackground},L.localize(36,null)),e.editorUnnecessaryCodeBorder=(0,y.registerColor)(\"editorUnnecessaryCode.border\",{dark:null,light:null,hcDark:k.Color.fromHex(\"#fff\").transparent(.8),hcLight:y.contrastBorder},L.localize(37,null)),e.editorUnnecessaryCodeOpacity=(0,y.registerColor)(\"editorUnnecessaryCode.opacity\",{dark:k.Color.fromHex(\"#000a\"),light:k.Color.fromHex(\"#0007\"),hcDark:null,hcLight:null},L.localize(38,null)),e.ghostTextBorder=(0,y.registerColor)(\"editorGhostText.border\",{dark:null,light:null,hcDark:k.Color.fromHex(\"#fff\").transparent(.8),hcLight:k.Color.fromHex(\"#292929\").transparent(.8)},L.localize(39,null)),e.ghostTextForeground=(0,y.registerColor)(\"editorGhostText.foreground\",{dark:k.Color.fromHex(\"#ffffff56\"),light:k.Color.fromHex(\"#0007\"),hcDark:null,hcLight:null},L.localize(40,null)),e.ghostTextBackground=(0,y.registerColor)(\"editorGhostText.background\",{dark:null,light:null,hcDark:null,hcLight:null},L.localize(41,null));const p=new k.Color(new k.RGBA(0,122,204,.6));e.overviewRulerRangeHighlight=(0,y.registerColor)(\"editorOverviewRuler.rangeHighlightForeground\",{dark:p,light:p,hcDark:p,hcLight:p},L.localize(42,null),!0),e.overviewRulerError=(0,y.registerColor)(\"editorOverviewRuler.errorForeground\",{dark:new k.Color(new k.RGBA(255,18,18,.7)),light:new k.Color(new k.RGBA(255,18,18,.7)),hcDark:new k.Color(new k.RGBA(255,50,50,1)),hcLight:\"#B5200D\"},L.localize(43,null)),e.overviewRulerWarning=(0,y.registerColor)(\"editorOverviewRuler.warningForeground\",{dark:y.editorWarningForeground,light:y.editorWarningForeground,hcDark:y.editorWarningBorder,hcLight:y.editorWarningBorder},L.localize(44,null)),e.overviewRulerInfo=(0,y.registerColor)(\"editorOverviewRuler.infoForeground\",{dark:y.editorInfoForeground,light:y.editorInfoForeground,hcDark:y.editorInfoBorder,hcLight:y.editorInfoBorder},L.localize(45,null)),e.editorBracketHighlightingForeground1=(0,y.registerColor)(\"editorBracketHighlight.foreground1\",{dark:\"#FFD700\",light:\"#0431FAFF\",hcDark:\"#FFD700\",hcLight:\"#0431FAFF\"},L.localize(46,null)),e.editorBracketHighlightingForeground2=(0,y.registerColor)(\"editorBracketHighlight.foreground2\",{dark:\"#DA70D6\",light:\"#319331FF\",hcDark:\"#DA70D6\",hcLight:\"#319331FF\"},L.localize(47,null)),e.editorBracketHighlightingForeground3=(0,y.registerColor)(\"editorBracketHighlight.foreground3\",{dark:\"#179FFF\",light:\"#7B3814FF\",hcDark:\"#87CEFA\",hcLight:\"#7B3814FF\"},L.localize(48,null)),e.editorBracketHighlightingForeground4=(0,y.registerColor)(\"editorBracketHighlight.foreground4\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(49,null)),e.editorBracketHighlightingForeground5=(0,y.registerColor)(\"editorBracketHighlight.foreground5\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(50,null)),e.editorBracketHighlightingForeground6=(0,y.registerColor)(\"editorBracketHighlight.foreground6\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(51,null)),e.editorBracketHighlightingUnexpectedBracketForeground=(0,y.registerColor)(\"editorBracketHighlight.unexpectedBracket.foreground\",{dark:new k.Color(new k.RGBA(255,18,18,.8)),light:new k.Color(new k.RGBA(255,18,18,.8)),hcDark:new k.Color(new k.RGBA(255,50,50,1)),hcLight:\"\"},L.localize(52,null)),e.editorBracketPairGuideBackground1=(0,y.registerColor)(\"editorBracketPairGuide.background1\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(53,null)),e.editorBracketPairGuideBackground2=(0,y.registerColor)(\"editorBracketPairGuide.background2\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(54,null)),e.editorBracketPairGuideBackground3=(0,y.registerColor)(\"editorBracketPairGuide.background3\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(55,null)),e.editorBracketPairGuideBackground4=(0,y.registerColor)(\"editorBracketPairGuide.background4\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(56,null)),e.editorBracketPairGuideBackground5=(0,y.registerColor)(\"editorBracketPairGuide.background5\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(57,null)),e.editorBracketPairGuideBackground6=(0,y.registerColor)(\"editorBracketPairGuide.background6\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(58,null)),e.editorBracketPairGuideActiveBackground1=(0,y.registerColor)(\"editorBracketPairGuide.activeBackground1\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(59,null)),e.editorBracketPairGuideActiveBackground2=(0,y.registerColor)(\"editorBracketPairGuide.activeBackground2\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(60,null)),e.editorBracketPairGuideActiveBackground3=(0,y.registerColor)(\"editorBracketPairGuide.activeBackground3\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(61,null)),e.editorBracketPairGuideActiveBackground4=(0,y.registerColor)(\"editorBracketPairGuide.activeBackground4\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(62,null)),e.editorBracketPairGuideActiveBackground5=(0,y.registerColor)(\"editorBracketPairGuide.activeBackground5\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(63,null)),e.editorBracketPairGuideActiveBackground6=(0,y.registerColor)(\"editorBracketPairGuide.activeBackground6\",{dark:\"#00000000\",light:\"#00000000\",hcDark:\"#00000000\",hcLight:\"#00000000\"},L.localize(64,null)),e.editorUnicodeHighlightBorder=(0,y.registerColor)(\"editorUnicodeHighlight.border\",{dark:y.editorWarningForeground,light:y.editorWarningForeground,hcDark:y.editorWarningForeground,hcLight:y.editorWarningForeground},L.localize(65,null)),e.editorUnicodeHighlightBackground=(0,y.registerColor)(\"editorUnicodeHighlight.background\",{dark:y.editorWarningBackground,light:y.editorWarningBackground,hcDark:y.editorWarningBackground,hcLight:y.editorWarningBackground},L.localize(66,null)),(0,E.registerThemingParticipant)((_,v)=>{const b=_.getColor(y.editorBackground),a=_.getColor(e.editorLineHighlight),i=a&&!a.isTransparent()?a:b;i&&v.addRule(`.monaco-editor .inputarea.ime-input { background-color: ${i}; }`)})}),define(se[856],oe([1,0,115,83,13,23,24,89,10,431]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CurrentLineMarginHighlightOverlay=e.CurrentLineHighlightOverlay=e.AbstractLineHighlightOverlay=void 0;class v extends L.DynamicViewOverlay{constructor(n){super(),this._context=n;const t=this._context.configuration.options,r=t.get(143);this._lineHeight=t.get(66),this._renderLineHighlight=t.get(95),this._renderLineHighlightOnlyWhenFocus=t.get(96),this._wordWrap=r.isViewportWrapping,this._contentLeft=r.contentLeft,this._contentWidth=r.contentWidth,this._selectionIsEmpty=!0,this._focused=!1,this._cursorLineNumbers=[1],this._selections=[new S.Selection(1,1,1,1)],this._renderData=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}_readFromSelections(){let n=!1;const t=new Set;for(const f of this._selections)t.add(f.positionLineNumber);const r=Array.from(t);r.sort((f,c)=>f-c),y.equals(this._cursorLineNumbers,r)||(this._cursorLineNumbers=r,n=!0);const u=this._selections.every(f=>f.isEmpty());return this._selectionIsEmpty!==u&&(this._selectionIsEmpty=u,n=!0),n}onThemeChanged(n){return this._readFromSelections()}onConfigurationChanged(n){const t=this._context.configuration.options,r=t.get(143);return this._lineHeight=t.get(66),this._renderLineHighlight=t.get(95),this._renderLineHighlightOnlyWhenFocus=t.get(96),this._wordWrap=r.isViewportWrapping,this._contentLeft=r.contentLeft,this._contentWidth=r.contentWidth,!0}onCursorStateChanged(n){return this._selections=n.selections,this._readFromSelections()}onFlushed(n){return!0}onLinesDeleted(n){return!0}onLinesInserted(n){return!0}onScrollChanged(n){return n.scrollWidthChanged||n.scrollTopChanged}onZonesChanged(n){return!0}onFocusChanged(n){return this._renderLineHighlightOnlyWhenFocus?(this._focused=n.isFocused,!0):!1}prepareRender(n){if(!this._shouldRenderThis()){this._renderData=null;return}const t=n.visibleRange.startLineNumber,r=n.visibleRange.endLineNumber,u=[];for(let c=t;c<=r;c++){const d=c-t;u[d]=\"\"}if(this._wordWrap){const c=this._renderOne(n,!1);for(const d of this._cursorLineNumbers){const s=this._context.viewModel.coordinatesConverter,l=s.convertViewPositionToModelPosition(new _.Position(d,1)).lineNumber,o=s.convertModelPositionToViewPosition(new _.Position(l,1)).lineNumber,g=s.convertModelPositionToViewPosition(new _.Position(l,this._context.viewModel.model.getLineMaxColumn(l))).lineNumber,h=Math.max(o,t),m=Math.min(g,r);for(let C=h;C<=m;C++){const w=C-t;u[w]=c}}}const f=this._renderOne(n,!0);for(const c of this._cursorLineNumbers){if(c<t||c>r)continue;const d=c-t;u[d]=f}this._renderData=u}render(n,t){if(!this._renderData)return\"\";const r=t-n;return r>=this._renderData.length?\"\":this._renderData[r]}_shouldRenderInMargin(){return(this._renderLineHighlight===\"gutter\"||this._renderLineHighlight===\"all\")&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}_shouldRenderInContent(){return(this._renderLineHighlight===\"line\"||this._renderLineHighlight===\"all\")&&this._selectionIsEmpty&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}}e.AbstractLineHighlightOverlay=v;class b extends v{_renderOne(n,t){return`<div class=\"${\"current-line\"+(this._shouldRenderInMargin()?\" current-line-both\":\"\")+(t?\" current-line-exact\":\"\")}\" style=\"width:${Math.max(n.scrollWidth,this._contentWidth)}px; height:${this._lineHeight}px;\"></div>`}_shouldRenderThis(){return this._shouldRenderInContent()}_shouldRenderOther(){return this._shouldRenderInMargin()}}e.CurrentLineHighlightOverlay=b;class a extends v{_renderOne(n,t){return`<div class=\"${\"current-line\"+(this._shouldRenderInMargin()?\" current-line-margin\":\"\")+(this._shouldRenderOther()?\" current-line-margin-both\":\"\")+(this._shouldRenderInMargin()&&t?\" current-line-exact-margin\":\"\")}\" style=\"width:${this._contentLeft}px; height:${this._lineHeight}px;\"></div>`}_shouldRenderThis(){return!0}_shouldRenderOther(){return this._shouldRenderInContent()}}e.CurrentLineMarginHighlightOverlay=a,(0,E.registerThemingParticipant)((i,n)=>{const t=i.getColor(k.editorLineHighlight);if(t&&(n.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${t}; }`),n.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${t}; border: none; }`)),!t||t.isTransparent()||i.defines(k.editorLineHighlightBorder)){const r=i.getColor(k.editorLineHighlightBorder);r&&(n.addRule(`.monaco-editor .view-overlays .current-line-exact { border: 2px solid ${r}; }`),n.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border: 2px solid ${r}; }`),(0,p.isHighContrast)(i.type)&&(n.addRule(\".monaco-editor .view-overlays .current-line-exact { border-width: 1px; }\"),n.addRule(\".monaco-editor .margin-view-overlays .current-line-exact-margin { border-width: 1px; }\")))}})}),define(se[857],oe([1,0,115,83,23,10,13,20,297,212,434]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IndentGuidesOverlay=void 0;class b extends L.DynamicViewOverlay{constructor(n){super(),this._context=n,this._primaryPosition=null;const t=this._context.configuration.options,r=t.get(144),u=t.get(50);this._lineHeight=t.get(66),this._spaceWidth=u.spaceWidth,this._maxIndentLeft=r.wrappingColumn===-1?-1:r.wrappingColumn*u.typicalHalfwidthCharacterWidth,this._bracketPairGuideOptions=t.get(16),this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(n){const t=this._context.configuration.options,r=t.get(144),u=t.get(50);return this._lineHeight=t.get(66),this._spaceWidth=u.spaceWidth,this._maxIndentLeft=r.wrappingColumn===-1?-1:r.wrappingColumn*u.typicalHalfwidthCharacterWidth,this._bracketPairGuideOptions=t.get(16),!0}onCursorStateChanged(n){var t;const u=n.selections[0].getPosition();return!((t=this._primaryPosition)===null||t===void 0)&&t.equals(u)?!1:(this._primaryPosition=u,!0)}onDecorationsChanged(n){return!0}onFlushed(n){return!0}onLinesChanged(n){return!0}onLinesDeleted(n){return!0}onLinesInserted(n){return!0}onScrollChanged(n){return n.scrollTopChanged}onZonesChanged(n){return!0}onLanguageConfigurationChanged(n){return!0}prepareRender(n){var t,r,u,f;if(!this._bracketPairGuideOptions.indentation&&this._bracketPairGuideOptions.bracketPairs===!1){this._renderResult=null;return}const c=n.visibleRange.startLineNumber,d=n.visibleRange.endLineNumber,s=n.scrollWidth,l=this._lineHeight,o=this._primaryPosition,g=this.getGuidesByLine(c,Math.min(d+1,this._context.viewModel.getLineCount()),o),h=[];for(let m=c;m<=d;m++){const C=m-c,w=g[C];let D=\"\";const I=(r=(t=n.visibleRangeForPosition(new E.Position(m,1)))===null||t===void 0?void 0:t.left)!==null&&r!==void 0?r:0;for(const T of w){const A=T.column===-1?I+(T.visibleColumn-1)*this._spaceWidth:n.visibleRangeForPosition(new E.Position(m,T.column)).left;if(A>s||this._maxIndentLeft>0&&A>this._maxIndentLeft)break;const P=T.horizontalLine?T.horizontalLine.top?\"horizontal-top\":\"horizontal-bottom\":\"vertical\",N=T.horizontalLine?((f=(u=n.visibleRangeForPosition(new E.Position(m,T.horizontalLine.endColumn)))===null||u===void 0?void 0:u.left)!==null&&f!==void 0?f:A+this._spaceWidth)-A:this._spaceWidth;D+=`<div class=\"core-guide ${T.className} ${P}\" style=\"left:${A}px;height:${l}px;width:${N}px\"></div>`}h[C]=D}this._renderResult=h}getGuidesByLine(n,t,r){const u=this._bracketPairGuideOptions.bracketPairs!==!1?this._context.viewModel.getBracketGuidesInRangeByLine(n,t,r,{highlightActive:this._bracketPairGuideOptions.highlightActiveBracketPair,horizontalGuides:this._bracketPairGuideOptions.bracketPairsHorizontal===!0?v.HorizontalGuidesState.Enabled:this._bracketPairGuideOptions.bracketPairsHorizontal===\"active\"?v.HorizontalGuidesState.EnabledForActive:v.HorizontalGuidesState.Disabled,includeInactive:this._bracketPairGuideOptions.bracketPairs===!0}):null,f=this._bracketPairGuideOptions.indentation?this._context.viewModel.getLinesIndentGuides(n,t):null;let c=0,d=0,s=0;if(this._bracketPairGuideOptions.highlightActiveIndentation!==!1&&r){const g=this._context.viewModel.getActiveIndentGuide(r.lineNumber,n,t);c=g.startLineNumber,d=g.endLineNumber,s=g.indent}const{indentSize:l}=this._context.viewModel.model.getOptions(),o=[];for(let g=n;g<=t;g++){const h=new Array;o.push(h);const m=u?u[g-n]:[],C=new S.ArrayQueue(m),w=f?f[g-n]:0;for(let D=1;D<=w;D++){const I=(D-1)*l+1,T=(this._bracketPairGuideOptions.highlightActiveIndentation===\"always\"||m.length===0)&&c<=g&&g<=d&&D===s;h.push(...C.takeWhile(P=>P.visibleColumn<I)||[]);const A=C.peek();(!A||A.visibleColumn!==I||A.horizontalLine)&&h.push(new v.IndentGuide(I,-1,`core-guide-indent lvl-${(D-1)%30}`+(T?\" indent-active\":\"\"),null,-1,-1))}h.push(...C.takeWhile(D=>!0)||[])}return o}render(n,t){if(!this._renderResult)return\"\";const r=t-n;return r<0||r>=this._renderResult.length?\"\":this._renderResult[r]}}e.IndentGuidesOverlay=b;function a(i){if(!(i&&i.isTransparent()))return i}(0,y.registerThemingParticipant)((i,n)=>{const t=[{bracketColor:k.editorBracketHighlightingForeground1,guideColor:k.editorBracketPairGuideBackground1,guideColorActive:k.editorBracketPairGuideActiveBackground1},{bracketColor:k.editorBracketHighlightingForeground2,guideColor:k.editorBracketPairGuideBackground2,guideColorActive:k.editorBracketPairGuideActiveBackground2},{bracketColor:k.editorBracketHighlightingForeground3,guideColor:k.editorBracketPairGuideBackground3,guideColorActive:k.editorBracketPairGuideActiveBackground3},{bracketColor:k.editorBracketHighlightingForeground4,guideColor:k.editorBracketPairGuideBackground4,guideColorActive:k.editorBracketPairGuideActiveBackground4},{bracketColor:k.editorBracketHighlightingForeground5,guideColor:k.editorBracketPairGuideBackground5,guideColorActive:k.editorBracketPairGuideActiveBackground5},{bracketColor:k.editorBracketHighlightingForeground6,guideColor:k.editorBracketPairGuideBackground6,guideColorActive:k.editorBracketPairGuideActiveBackground6}],r=new _.BracketPairGuidesClassNames,u=[{indentColor:k.editorIndentGuide1,indentColorActive:k.editorActiveIndentGuide1},{indentColor:k.editorIndentGuide2,indentColorActive:k.editorActiveIndentGuide2},{indentColor:k.editorIndentGuide3,indentColorActive:k.editorActiveIndentGuide3},{indentColor:k.editorIndentGuide4,indentColorActive:k.editorActiveIndentGuide4},{indentColor:k.editorIndentGuide5,indentColorActive:k.editorActiveIndentGuide5},{indentColor:k.editorIndentGuide6,indentColorActive:k.editorActiveIndentGuide6}],f=t.map(d=>{var s,l;const o=i.getColor(d.bracketColor),g=i.getColor(d.guideColor),h=i.getColor(d.guideColorActive),m=a((s=a(g))!==null&&s!==void 0?s:o?.transparent(.3)),C=a((l=a(h))!==null&&l!==void 0?l:o);if(!(!m||!C))return{guideColor:m,guideColorActive:C}}).filter(p.isDefined),c=u.map(d=>{const s=i.getColor(d.indentColor),l=i.getColor(d.indentColorActive),o=a(s),g=a(l);if(!(!o||!g))return{indentColor:o,indentColorActive:g}}).filter(p.isDefined);if(f.length>0){for(let d=0;d<30;d++){const s=f[d%f.length];n.addRule(`.monaco-editor .${r.getInlineClassNameOfLevel(d).replace(/ /g,\".\")} { --guide-color: ${s.guideColor}; --guide-color-active: ${s.guideColorActive}; }`)}n.addRule(\".monaco-editor .vertical { box-shadow: 1px 0 0 0 var(--guide-color) inset; }\"),n.addRule(\".monaco-editor .horizontal-top { border-top: 1px solid var(--guide-color); }\"),n.addRule(\".monaco-editor .horizontal-bottom { border-bottom: 1px solid var(--guide-color); }\"),n.addRule(`.monaco-editor .vertical.${r.activeClassName} { box-shadow: 1px 0 0 0 var(--guide-color-active) inset; }`),n.addRule(`.monaco-editor .horizontal-top.${r.activeClassName} { border-top: 1px solid var(--guide-color-active); }`),n.addRule(`.monaco-editor .horizontal-bottom.${r.activeClassName} { border-bottom: 1px solid var(--guide-color-active); }`)}if(c.length>0){for(let d=0;d<30;d++){const s=c[d%c.length];n.addRule(`.monaco-editor .lines-content .core-guide-indent.lvl-${d} { --indent-color: ${s.indentColor}; --indent-color-active: ${s.indentColorActive}; }`)}n.addRule(\".monaco-editor .lines-content .core-guide-indent { box-shadow: 1px 0 0 0 var(--indent-color) inset; }\"),n.addRule(\".monaco-editor .lines-content .core-guide-indent.indent-active { box-shadow: 1px 0 0 0 var(--indent-color-active) inset; }\")}})}),define(se[369],oe([1,0,17,115,10,5,23,83,435]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LineNumbersOverlay=void 0;class _ extends k.DynamicViewOverlay{constructor(b){super(),this._context=b,this._readConfig(),this._lastCursorModelPosition=new y.Position(1,1),this._renderResult=null,this._activeLineNumber=1,this._context.addEventHandler(this)}_readConfig(){const b=this._context.configuration.options;this._lineHeight=b.get(66);const a=b.get(67);this._renderLineNumbers=a.renderType,this._renderCustomLineNumbers=a.renderFn,this._renderFinalNewline=b.get(94);const i=b.get(143);this._lineNumbersLeft=i.lineNumbersLeft,this._lineNumbersWidth=i.lineNumbersWidth}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(b){return this._readConfig(),!0}onCursorStateChanged(b){const a=b.selections[0].getPosition();this._lastCursorModelPosition=this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(a);let i=!1;return this._activeLineNumber!==a.lineNumber&&(this._activeLineNumber=a.lineNumber,i=!0),(this._renderLineNumbers===2||this._renderLineNumbers===3)&&(i=!0),i}onFlushed(b){return!0}onLinesChanged(b){return!0}onLinesDeleted(b){return!0}onLinesInserted(b){return!0}onScrollChanged(b){return b.scrollTopChanged}onZonesChanged(b){return!0}onDecorationsChanged(b){return b.affectsLineNumber}_getLineRenderLineNumber(b){const a=this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new y.Position(b,1));if(a.column!==1)return\"\";const i=a.lineNumber;if(this._renderCustomLineNumbers)return this._renderCustomLineNumbers(i);if(this._renderLineNumbers===2){const n=Math.abs(this._lastCursorModelPosition.lineNumber-i);return n===0?'<span class=\"relative-current-line-number\">'+i+\"</span>\":String(n)}return this._renderLineNumbers===3?this._lastCursorModelPosition.lineNumber===i||i%10===0?String(i):\"\":String(i)}prepareRender(b){if(this._renderLineNumbers===0){this._renderResult=null;return}const a=L.isLinux?this._lineHeight%2===0?\" lh-even\":\" lh-odd\":\"\",i=b.visibleRange.startLineNumber,n=b.visibleRange.endLineNumber,t=this._context.viewModel.getDecorationsInViewport(b.visibleRange).filter(c=>!!c.options.lineNumberClassName);t.sort((c,d)=>E.Range.compareRangesUsingEnds(c.range,d.range));let r=0;const u=this._context.viewModel.getLineCount(),f=[];for(let c=i;c<=n;c++){const d=c-i;let s=this._getLineRenderLineNumber(c),l=\"\";for(;r<t.length&&t[r].range.endLineNumber<c;)r++;for(let o=r;o<t.length;o++){const{range:g,options:h}=t[o];g.startLineNumber<=c&&(l+=\" \"+h.lineNumberClassName)}if(!s&&!l){f[d]=\"\";continue}c===u&&this._context.viewModel.getLineLength(c)===0&&(this._renderFinalNewline===\"off\"&&(s=\"\"),this._renderFinalNewline===\"dimmed\"&&(l+=\" dimmed-line-number\")),c===this._activeLineNumber&&(l+=\" active-line-number\"),f[d]=`<div class=\"${_.CLASS_NAME}${a}${l}\" style=\"left:${this._lineNumbersLeft}px;width:${this._lineNumbersWidth}px;\">${s}</div>`}this._renderResult=f}render(b,a){if(!this._renderResult)return\"\";const i=a-b;return i<0||i>=this._renderResult.length?\"\":this._renderResult[i]}}e.LineNumbersOverlay=_,_.CLASS_NAME=\"line-numbers\",(0,S.registerThemingParticipant)((v,b)=>{const a=v.getColor(p.editorLineNumbers),i=v.getColor(p.editorDimmedLineNumber);i?b.addRule(`.monaco-editor .line-numbers.dimmed-line-number { color: ${i}; }`):a&&b.addRule(`.monaco-editor .line-numbers.dimmed-line-number { color: ${a.transparent(.4)}; }`)})}),define(se[858],oe([1,0,618,54,40,17,11,72,190,280,56,369,299,36,150,10,5,24,200,31,39,270,34,8,429]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.TextAreaHandler=void 0;class h{constructor(I,T,A,P,N){this._context=I,this.modelLineNumber=T,this.distanceToModelLineStart=A,this.widthOfHiddenLineTextBefore=P,this.distanceToModelLineEnd=N,this._visibleTextAreaBrand=void 0,this.startPosition=null,this.endPosition=null,this.visibleTextareaStart=null,this.visibleTextareaEnd=null,this._previousPresentation=null}prepareRender(I){const T=new r.Position(this.modelLineNumber,this.distanceToModelLineStart+1),A=new r.Position(this.modelLineNumber,this._context.viewModel.model.getLineMaxColumn(this.modelLineNumber)-this.distanceToModelLineEnd);this.startPosition=this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(T),this.endPosition=this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(A),this.startPosition.lineNumber===this.endPosition.lineNumber?(this.visibleTextareaStart=I.visibleRangeForPosition(this.startPosition),this.visibleTextareaEnd=I.visibleRangeForPosition(this.endPosition)):(this.visibleTextareaStart=null,this.visibleTextareaEnd=null)}definePresentation(I){return this._previousPresentation||(I?this._previousPresentation=I:this._previousPresentation={foreground:1,italic:!1,bold:!1,underline:!1,strikethrough:!1}),this._previousPresentation}}const m=k.isFirefox;let C=class extends b.ViewPart{constructor(I,T,A,P,N){super(I),this._keybindingService=P,this._instantiationService=N,this._primaryCursorPosition=new r.Position(1,1),this._primaryCursorVisibleRange=null,this._viewController=T,this._visibleRangeProvider=A,this._scrollLeft=0,this._scrollTop=0;const M=this._context.configuration.options,R=M.get(143);this._setAccessibilityOptions(M),this._contentLeft=R.contentLeft,this._contentWidth=R.contentWidth,this._contentHeight=R.height,this._fontInfo=M.get(50),this._lineHeight=M.get(66),this._emptySelectionClipboard=M.get(37),this._copyWithSyntaxHighlighting=M.get(25),this._visibleTextArea=null,this._selections=[new f.Selection(1,1,1,1)],this._modelSelections=[new f.Selection(1,1,1,1)],this._lastRenderPosition=null,this.textArea=(0,y.createFastDomNode)(document.createElement(\"textarea\")),b.PartFingerprints.write(this.textArea,7),this.textArea.setClassName(`inputarea ${c.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`),this.textArea.setAttribute(\"wrap\",this._textAreaWrapping&&!this._visibleTextArea?\"on\":\"off\");const{tabSize:x}=this._context.viewModel.model.getOptions();this.textArea.domNode.style.tabSize=`${x*this._fontInfo.spaceWidth}px`,this.textArea.setAttribute(\"autocorrect\",\"off\"),this.textArea.setAttribute(\"autocapitalize\",\"off\"),this.textArea.setAttribute(\"autocomplete\",\"off\"),this.textArea.setAttribute(\"spellcheck\",\"false\"),this.textArea.setAttribute(\"aria-label\",this._getAriaLabel(M)),this.textArea.setAttribute(\"aria-required\",M.get(5)?\"true\":\"false\"),this.textArea.setAttribute(\"tabindex\",String(M.get(123))),this.textArea.setAttribute(\"role\",\"textbox\"),this.textArea.setAttribute(\"aria-roledescription\",L.localize(0,null)),this.textArea.setAttribute(\"aria-multiline\",\"true\"),this.textArea.setAttribute(\"aria-autocomplete\",M.get(90)?\"none\":\"both\"),this._ensureReadOnlyAttribute(),this.textAreaCover=(0,y.createFastDomNode)(document.createElement(\"div\")),this.textAreaCover.setPosition(\"absolute\");const O={getLineCount:()=>this._context.viewModel.getLineCount(),getLineMaxColumn:V=>this._context.viewModel.getLineMaxColumn(V),getValueInRange:(V,K)=>this._context.viewModel.getValueInRange(V,K),getValueLengthInRange:(V,K)=>this._context.viewModel.getValueLengthInRange(V,K),modifyPosition:(V,K)=>this._context.viewModel.modifyPosition(V,K)},B={getDataToCopy:()=>{const V=this._context.viewModel.getPlainTextToCopy(this._modelSelections,this._emptySelectionClipboard,E.isWindows),K=this._context.viewModel.model.getEOL(),F=this._emptySelectionClipboard&&this._modelSelections.length===1&&this._modelSelections[0].isEmpty(),q=Array.isArray(V)?V:null,ie=Array.isArray(V)?V.join(K):V;let ae,ne=null;if(_.CopyOptions.forceCopyWithSyntaxHighlighting||this._copyWithSyntaxHighlighting&&ie.length<65536){const $=this._context.viewModel.getRichTextToCopy(this._modelSelections,this._emptySelectionClipboard);$&&(ae=$.html,ne=$.mode)}return{isFromEmptySelection:F,multicursorText:q,text:ie,html:ae,mode:ne}},getScreenReaderContent:()=>{if(this._accessibilitySupport===1){const V=this._selections[0];if(E.isMacintosh&&V.isEmpty()){const F=V.getStartPosition();let q=this._getWordBeforePosition(F);if(q.length===0&&(q=this._getCharacterBeforePosition(F)),q.length>0)return new v.TextAreaState(q,q.length,q.length,u.Range.fromPositions(F),0)}const K=500;if(E.isMacintosh&&!V.isEmpty()&&O.getValueLengthInRange(V,0)<K){const F=O.getValueInRange(V,0);return new v.TextAreaState(F,0,F.length,V,0)}if(k.isSafari&&!V.isEmpty()){const F=\"vscode-placeholder\";return new v.TextAreaState(F,0,F.length,null,void 0)}return v.TextAreaState.EMPTY}if(k.isAndroid){const V=this._selections[0];if(V.isEmpty()){const K=V.getStartPosition(),[F,q]=this._getAndroidWordAtPosition(K);if(F.length>0)return new v.TextAreaState(F,q,q,u.Range.fromPositions(K),0)}return v.TextAreaState.EMPTY}return v.PagedScreenReaderStrategy.fromEditorSelection(O,this._selections[0],this._accessibilityPageSize,this._accessibilitySupport===0)},deduceModelPosition:(V,K,F)=>this._context.viewModel.deduceModelPositionRelativeToViewPosition(V,K,F)},W=this._register(new _.TextAreaWrapper(this.textArea.domNode));this._textAreaInput=this._register(this._instantiationService.createInstance(_.TextAreaInput,B,W,E.OS,{isAndroid:k.isAndroid,isChrome:k.isChrome,isFirefox:k.isFirefox,isSafari:k.isSafari})),this._register(this._textAreaInput.onKeyDown(V=>{this._viewController.emitKeyDown(V)})),this._register(this._textAreaInput.onKeyUp(V=>{this._viewController.emitKeyUp(V)})),this._register(this._textAreaInput.onPaste(V=>{let K=!1,F=null,q=null;V.metadata&&(K=this._emptySelectionClipboard&&!!V.metadata.isFromEmptySelection,F=typeof V.metadata.multicursorText<\"u\"?V.metadata.multicursorText:null,q=V.metadata.mode),this._viewController.paste(V.text,K,F,q)})),this._register(this._textAreaInput.onCut(()=>{this._viewController.cut()})),this._register(this._textAreaInput.onType(V=>{V.replacePrevCharCnt||V.replaceNextCharCnt||V.positionDelta?(v._debugComposition&&console.log(` => compositionType: <<${V.text}>>, ${V.replacePrevCharCnt}, ${V.replaceNextCharCnt}, ${V.positionDelta}`),this._viewController.compositionType(V.text,V.replacePrevCharCnt,V.replaceNextCharCnt,V.positionDelta)):(v._debugComposition&&console.log(` => type: <<${V.text}>>`),this._viewController.type(V.text))})),this._register(this._textAreaInput.onSelectionChangeRequest(V=>{this._viewController.setSelection(V)})),this._register(this._textAreaInput.onCompositionStart(V=>{const K=this.textArea.domNode,F=this._modelSelections[0],{distanceToModelLineStart:q,widthOfHiddenTextBefore:ie}=(()=>{const ne=K.value.substring(0,Math.min(K.selectionStart,K.selectionEnd)),$=ne.lastIndexOf(`\n`),J=ne.substring($+1),Q=J.lastIndexOf(\"\t\"),re=J.length-Q-1,de=F.getStartPosition(),he=Math.min(de.column-1,re),me=de.column-1-he,X=J.substring(0,J.length-he),{tabSize:U}=this._context.viewModel.model.getOptions(),G=w(this.textArea.domNode.ownerDocument,X,this._fontInfo,U);return{distanceToModelLineStart:me,widthOfHiddenTextBefore:G}})(),{distanceToModelLineEnd:ae}=(()=>{const ne=K.value.substring(Math.max(K.selectionStart,K.selectionEnd)),$=ne.indexOf(`\n`),J=$===-1?ne:ne.substring(0,$),Q=J.indexOf(\"\t\"),re=Q===-1?J.length:J.length-Q-1,de=F.getEndPosition(),he=Math.min(this._context.viewModel.model.getLineMaxColumn(de.lineNumber)-de.column,re);return{distanceToModelLineEnd:this._context.viewModel.model.getLineMaxColumn(de.lineNumber)-de.column-he}})();this._context.viewModel.revealRange(\"keyboard\",!0,u.Range.fromPositions(this._selections[0].getStartPosition()),0,1),this._visibleTextArea=new h(this._context,F.startLineNumber,q,ie,ae),this.textArea.setAttribute(\"wrap\",this._textAreaWrapping&&!this._visibleTextArea?\"on\":\"off\"),this._visibleTextArea.prepareRender(this._visibleRangeProvider),this._render(),this.textArea.setClassName(`inputarea ${c.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ime-input`),this._viewController.compositionStart(),this._context.viewModel.onCompositionStart()})),this._register(this._textAreaInput.onCompositionUpdate(V=>{this._visibleTextArea&&(this._visibleTextArea.prepareRender(this._visibleRangeProvider),this._render())})),this._register(this._textAreaInput.onCompositionEnd(()=>{this._visibleTextArea=null,this.textArea.setAttribute(\"wrap\",this._textAreaWrapping&&!this._visibleTextArea?\"on\":\"off\"),this._render(),this.textArea.setClassName(`inputarea ${c.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`),this._viewController.compositionEnd(),this._context.viewModel.onCompositionEnd()})),this._register(this._textAreaInput.onFocus(()=>{this._context.viewModel.setHasFocus(!0)})),this._register(this._textAreaInput.onBlur(()=>{this._context.viewModel.setHasFocus(!1)})),this._register(l.IME.onDidChange(()=>{this._ensureReadOnlyAttribute()}))}writeScreenReaderContent(I){this._textAreaInput.writeNativeTextAreaContent(I)}dispose(){super.dispose()}_getAndroidWordAtPosition(I){const T='`~!@#$%^&*()-=+[{]}\\\\|;:\",.<>/?',A=this._context.viewModel.getLineContent(I.lineNumber),P=(0,t.getMapForWordSeparators)(T);let N=!0,M=I.column,R=!0,x=I.column,O=0;for(;O<50&&(N||R);){if(N&&M<=1&&(N=!1),N){const B=A.charCodeAt(M-2);P.get(B)!==0?N=!1:M--}if(R&&x>A.length&&(R=!1),R){const B=A.charCodeAt(x-1);P.get(B)!==0?R=!1:x++}O++}return[A.substring(M-1,x-1),I.column-M]}_getWordBeforePosition(I){const T=this._context.viewModel.getLineContent(I.lineNumber),A=(0,t.getMapForWordSeparators)(this._context.configuration.options.get(129));let P=I.column,N=0;for(;P>1;){const M=T.charCodeAt(P-2);if(A.get(M)!==0||N>50)return T.substring(P-1,I.column-1);N++,P--}return T.substring(0,I.column-1)}_getCharacterBeforePosition(I){if(I.column>1){const A=this._context.viewModel.getLineContent(I.lineNumber).charAt(I.column-2);if(!S.isHighSurrogate(A.charCodeAt(0)))return A}return\"\"}_getAriaLabel(I){var T,A,P;if(I.get(2)===1){const M=(T=this._keybindingService.lookupKeybinding(\"editor.action.toggleScreenReaderAccessibilityMode\"))===null||T===void 0?void 0:T.getAriaLabel(),R=(A=this._keybindingService.lookupKeybinding(\"workbench.action.showCommands\"))===null||A===void 0?void 0:A.getAriaLabel(),x=(P=this._keybindingService.lookupKeybinding(\"workbench.action.openGlobalKeybindings\"))===null||P===void 0?void 0:P.getAriaLabel(),O=L.localize(1,null);return M?L.localize(2,null,O,M):R?L.localize(3,null,O,R):x?L.localize(4,null,O,x):O}return I.get(4)}_setAccessibilityOptions(I){this._accessibilitySupport=I.get(2);const T=I.get(3);this._accessibilitySupport===2&&T===n.EditorOptions.accessibilityPageSize.defaultValue?this._accessibilityPageSize=500:this._accessibilityPageSize=T;const P=I.get(143).wrappingColumn;if(P!==-1&&this._accessibilitySupport!==1){const N=I.get(50);this._textAreaWrapping=!0,this._textAreaWidth=Math.round(P*N.typicalHalfwidthCharacterWidth)}else this._textAreaWrapping=!1,this._textAreaWidth=m?0:1}onConfigurationChanged(I){const T=this._context.configuration.options,A=T.get(143);this._setAccessibilityOptions(T),this._contentLeft=A.contentLeft,this._contentWidth=A.contentWidth,this._contentHeight=A.height,this._fontInfo=T.get(50),this._lineHeight=T.get(66),this._emptySelectionClipboard=T.get(37),this._copyWithSyntaxHighlighting=T.get(25),this.textArea.setAttribute(\"wrap\",this._textAreaWrapping&&!this._visibleTextArea?\"on\":\"off\");const{tabSize:P}=this._context.viewModel.model.getOptions();return this.textArea.domNode.style.tabSize=`${P*this._fontInfo.spaceWidth}px`,this.textArea.setAttribute(\"aria-label\",this._getAriaLabel(T)),this.textArea.setAttribute(\"aria-required\",T.get(5)?\"true\":\"false\"),this.textArea.setAttribute(\"tabindex\",String(T.get(123))),(I.hasChanged(34)||I.hasChanged(90))&&this._ensureReadOnlyAttribute(),I.hasChanged(2)&&this._textAreaInput.writeNativeTextAreaContent(\"strategy changed\"),!0}onCursorStateChanged(I){return this._selections=I.selections.slice(0),this._modelSelections=I.modelSelections.slice(0),this._textAreaInput.writeNativeTextAreaContent(\"selection changed\"),!0}onDecorationsChanged(I){return!0}onFlushed(I){return!0}onLinesChanged(I){return!0}onLinesDeleted(I){return!0}onLinesInserted(I){return!0}onScrollChanged(I){return this._scrollLeft=I.scrollLeft,this._scrollTop=I.scrollTop,!0}onZonesChanged(I){return!0}isFocused(){return this._textAreaInput.isFocused()}focusTextArea(){this._textAreaInput.focusTextArea()}getLastRenderData(){return this._lastRenderPosition}setAriaOptions(I){I.activeDescendant?(this.textArea.setAttribute(\"aria-haspopup\",\"true\"),this.textArea.setAttribute(\"aria-autocomplete\",\"list\"),this.textArea.setAttribute(\"aria-activedescendant\",I.activeDescendant)):(this.textArea.setAttribute(\"aria-haspopup\",\"false\"),this.textArea.setAttribute(\"aria-autocomplete\",\"both\"),this.textArea.removeAttribute(\"aria-activedescendant\")),I.role&&this.textArea.setAttribute(\"role\",I.role)}_ensureReadOnlyAttribute(){const I=this._context.configuration.options;!l.IME.enabled||I.get(34)&&I.get(90)?this.textArea.setAttribute(\"readonly\",\"true\"):this.textArea.removeAttribute(\"readonly\")}prepareRender(I){var T;this._primaryCursorPosition=new r.Position(this._selections[0].positionLineNumber,this._selections[0].positionColumn),this._primaryCursorVisibleRange=I.visibleRangeForPosition(this._primaryCursorPosition),(T=this._visibleTextArea)===null||T===void 0||T.prepareRender(I)}render(I){this._textAreaInput.writeNativeTextAreaContent(\"render\"),this._render()}_render(){var I;if(this._visibleTextArea){const P=this._visibleTextArea.visibleTextareaStart,N=this._visibleTextArea.visibleTextareaEnd,M=this._visibleTextArea.startPosition,R=this._visibleTextArea.endPosition;if(M&&R&&P&&N&&N.left>=this._scrollLeft&&P.left<=this._scrollLeft+this._contentWidth){const x=this._context.viewLayout.getVerticalOffsetForLineNumber(this._primaryCursorPosition.lineNumber)-this._scrollTop,O=this._newlinecount(this.textArea.domNode.value.substr(0,this.textArea.domNode.selectionStart));let B=this._visibleTextArea.widthOfHiddenLineTextBefore,W=this._contentLeft+P.left-this._scrollLeft,V=N.left-P.left+1;if(W<this._contentLeft){const ne=this._contentLeft-W;W+=ne,B+=ne,V-=ne}V>this._contentWidth&&(V=this._contentWidth);const K=this._context.viewModel.getViewLineData(M.lineNumber),F=K.tokens.findTokenIndexAtOffset(M.column-1),q=K.tokens.findTokenIndexAtOffset(R.column-1),ie=F===q,ae=this._visibleTextArea.definePresentation(ie?K.tokens.getPresentation(F):null);this.textArea.domNode.scrollTop=O*this._lineHeight,this.textArea.domNode.scrollLeft=B,this._doRender({lastRenderPosition:null,top:x,left:W,width:V,height:this._lineHeight,useCover:!1,color:(d.TokenizationRegistry.getColorMap()||[])[ae.foreground],italic:ae.italic,bold:ae.bold,underline:ae.underline,strikethrough:ae.strikethrough})}return}if(!this._primaryCursorVisibleRange){this._renderAtTopLeft();return}const T=this._contentLeft+this._primaryCursorVisibleRange.left-this._scrollLeft;if(T<this._contentLeft||T>this._contentLeft+this._contentWidth){this._renderAtTopLeft();return}const A=this._context.viewLayout.getVerticalOffsetForLineNumber(this._selections[0].positionLineNumber)-this._scrollTop;if(A<0||A>this._contentHeight){this._renderAtTopLeft();return}if(E.isMacintosh||this._accessibilitySupport===2){this._doRender({lastRenderPosition:this._primaryCursorPosition,top:A,left:this._textAreaWrapping?this._contentLeft:T,width:this._textAreaWidth,height:this._lineHeight,useCover:!1}),this.textArea.domNode.scrollLeft=this._primaryCursorVisibleRange.left;const P=(I=this._textAreaInput.textAreaState.newlineCountBeforeSelection)!==null&&I!==void 0?I:this._newlinecount(this.textArea.domNode.value.substr(0,this.textArea.domNode.selectionStart));this.textArea.domNode.scrollTop=P*this._lineHeight;return}this._doRender({lastRenderPosition:this._primaryCursorPosition,top:A,left:this._textAreaWrapping?this._contentLeft:T,width:this._textAreaWidth,height:m?0:1,useCover:!1})}_newlinecount(I){let T=0,A=-1;do{if(A=I.indexOf(`\n`,A+1),A===-1)break;T++}while(!0);return T}_renderAtTopLeft(){this._doRender({lastRenderPosition:null,top:0,left:0,width:this._textAreaWidth,height:m?0:1,useCover:!0})}_doRender(I){this._lastRenderPosition=I.lastRenderPosition;const T=this.textArea,A=this.textAreaCover;(0,p.applyFontInfo)(T,this._fontInfo),T.setTop(I.top),T.setLeft(I.left),T.setWidth(I.width),T.setHeight(I.height),T.setColor(I.color?s.Color.Format.CSS.formatHex(I.color):\"\"),T.setFontStyle(I.italic?\"italic\":\"\"),I.bold&&T.setFontWeight(\"bold\"),T.setTextDecoration(`${I.underline?\" underline\":\"\"}${I.strikethrough?\" line-through\":\"\"}`),A.setTop(I.useCover?I.top:0),A.setLeft(I.useCover?I.left:0),A.setWidth(I.useCover?I.width:0),A.setHeight(I.useCover?I.height:0);const P=this._context.configuration.options;P.get(57)?A.setClassName(\"monaco-editor-background textAreaCover \"+i.Margin.OUTER_CLASS_NAME):P.get(67).renderType!==0?A.setClassName(\"monaco-editor-background textAreaCover \"+a.LineNumbersOverlay.CLASS_NAME):A.setClassName(\"monaco-editor-background textAreaCover\")}};e.TextAreaHandler=C,e.TextAreaHandler=C=ke([ge(3,o.IKeybindingService),ge(4,g.IInstantiationService)],C);function w(D,I,T,A){if(I.length===0)return 0;const P=D.createElement(\"div\");P.style.position=\"absolute\",P.style.top=\"-50000px\",P.style.width=\"50000px\";const N=D.createElement(\"span\");(0,p.applyFontInfo)(N,T),N.style.whiteSpace=\"pre\",N.style.tabSize=`${A*T.spaceWidth}px`,N.append(I),P.appendChild(N),D.body.appendChild(P);const M=N.offsetWidth;return D.body.removeChild(P),M}}),define(se[859],oe([1,0,40,39,56,10,31,83,86,13]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DecorationsOverviewRuler=void 0;class b{constructor(n,t){const r=n.options;this.lineHeight=r.get(66),this.pixelRatio=r.get(141),this.overviewRulerLanes=r.get(82),this.renderBorder=r.get(81);const u=t.getColor(p.editorOverviewRulerBorder);this.borderColor=u?u.toString():null,this.hideCursor=r.get(59);const f=t.getColor(p.editorCursorForeground);this.cursorColor=f?f.transparent(.7).toString():null,this.themeType=t.type;const c=r.get(72),d=c.enabled,s=c.side,l=t.getColor(p.editorOverviewRulerBackground),o=S.TokenizationRegistry.getDefaultBackground();l?this.backgroundColor=l:d&&s===\"right\"?this.backgroundColor=o:this.backgroundColor=null;const h=r.get(143).overviewRuler;this.top=h.top,this.right=h.right,this.domWidth=h.width,this.domHeight=h.height,this.overviewRulerLanes===0?(this.canvasWidth=0,this.canvasHeight=0):(this.canvasWidth=this.domWidth*this.pixelRatio|0,this.canvasHeight=this.domHeight*this.pixelRatio|0);const[m,C]=this._initLanes(1,this.canvasWidth,this.overviewRulerLanes);this.x=m,this.w=C}_initLanes(n,t,r){const u=t-n;if(r>=3){const f=Math.floor(u/3),c=Math.floor(u/3),d=u-f-c,s=n,l=s+f,o=s+f+d;return[[0,s,l,s,o,s,l,s],[0,f,d,f+d,c,f+d+c,d+c,f+d+c]]}else if(r===2){const f=Math.floor(u/2),c=u-f,d=n,s=d+f;return[[0,d,d,d,s,d,d,d],[0,f,f,f,c,f+c,f+c,f+c]]}else{const f=n,c=u;return[[0,f,f,f,f,f,f,f],[0,c,c,c,c,c,c,c]]}}equals(n){return this.lineHeight===n.lineHeight&&this.pixelRatio===n.pixelRatio&&this.overviewRulerLanes===n.overviewRulerLanes&&this.renderBorder===n.renderBorder&&this.borderColor===n.borderColor&&this.hideCursor===n.hideCursor&&this.cursorColor===n.cursorColor&&this.themeType===n.themeType&&k.Color.equals(this.backgroundColor,n.backgroundColor)&&this.top===n.top&&this.right===n.right&&this.domWidth===n.domWidth&&this.domHeight===n.domHeight&&this.canvasWidth===n.canvasWidth&&this.canvasHeight===n.canvasHeight}}class a extends y.ViewPart{constructor(n){super(n),this._actualShouldRender=0,this._renderedDecorations=[],this._renderedCursorPositions=[],this._domNode=(0,L.createFastDomNode)(document.createElement(\"canvas\")),this._domNode.setClassName(\"decorationsOverviewRuler\"),this._domNode.setPosition(\"absolute\"),this._domNode.setLayerHinting(!0),this._domNode.setContain(\"strict\"),this._domNode.setAttribute(\"aria-hidden\",\"true\"),this._updateSettings(!1),this._tokensColorTrackerListener=S.TokenizationRegistry.onDidChange(t=>{t.changedColorMap&&this._updateSettings(!0)}),this._cursorPositions=[]}dispose(){super.dispose(),this._tokensColorTrackerListener.dispose()}_updateSettings(n){const t=new b(this._context.configuration,this._context.theme);return this._settings&&this._settings.equals(t)?!1:(this._settings=t,this._domNode.setTop(this._settings.top),this._domNode.setRight(this._settings.right),this._domNode.setWidth(this._settings.domWidth),this._domNode.setHeight(this._settings.domHeight),this._domNode.domNode.width=this._settings.canvasWidth,this._domNode.domNode.height=this._settings.canvasHeight,n&&this._render(),!0)}_markRenderingIsNeeded(){return this._actualShouldRender=2,!0}_markRenderingIsMaybeNeeded(){return this._actualShouldRender=1,!0}onConfigurationChanged(n){return this._updateSettings(!1)?this._markRenderingIsNeeded():!1}onCursorStateChanged(n){this._cursorPositions=[];for(let t=0,r=n.selections.length;t<r;t++)this._cursorPositions[t]=n.selections[t].getPosition();return this._cursorPositions.sort(E.Position.compare),this._markRenderingIsMaybeNeeded()}onDecorationsChanged(n){return n.affectsOverviewRuler?this._markRenderingIsMaybeNeeded():!1}onFlushed(n){return this._markRenderingIsNeeded()}onScrollChanged(n){return n.scrollHeightChanged?this._markRenderingIsNeeded():!1}onZonesChanged(n){return this._markRenderingIsNeeded()}onThemeChanged(n){return this._updateSettings(!1)?this._markRenderingIsNeeded():!1}getDomNode(){return this._domNode.domNode}prepareRender(n){}render(n){this._render(),this._actualShouldRender=0}_render(){const n=this._settings.backgroundColor;if(this._settings.overviewRulerLanes===0){this._domNode.setBackgroundColor(n?k.Color.Format.CSS.formatHexA(n):\"\"),this._domNode.setDisplay(\"none\");return}const t=this._context.viewModel.getAllOverviewRulerDecorations(this._context.theme);if(t.sort(_.OverviewRulerDecorationsGroup.compareByRenderingProps),this._actualShouldRender===1&&!_.OverviewRulerDecorationsGroup.equalsArr(this._renderedDecorations,t)&&(this._actualShouldRender=2),this._actualShouldRender===1&&!(0,v.equals)(this._renderedCursorPositions,this._cursorPositions,(C,w)=>C.lineNumber===w.lineNumber)&&(this._actualShouldRender=2),this._actualShouldRender===1)return;this._renderedDecorations=t,this._renderedCursorPositions=this._cursorPositions,this._domNode.setDisplay(\"block\");const r=this._settings.canvasWidth,u=this._settings.canvasHeight,f=this._settings.lineHeight,c=this._context.viewLayout,d=this._context.viewLayout.getScrollHeight(),s=u/d,l=6*this._settings.pixelRatio|0,o=l/2|0,g=this._domNode.domNode.getContext(\"2d\");n?n.isOpaque()?(g.fillStyle=k.Color.Format.CSS.formatHexA(n),g.fillRect(0,0,r,u)):(g.clearRect(0,0,r,u),g.fillStyle=k.Color.Format.CSS.formatHexA(n),g.fillRect(0,0,r,u)):g.clearRect(0,0,r,u);const h=this._settings.x,m=this._settings.w;for(const C of t){const w=C.color,D=C.data;g.fillStyle=w;let I=0,T=0,A=0;for(let P=0,N=D.length/3;P<N;P++){const M=D[3*P],R=D[3*P+1],x=D[3*P+2];let O=c.getVerticalOffsetForLineNumber(R)*s|0,B=(c.getVerticalOffsetForLineNumber(x)+f)*s|0;if(B-O<l){let V=(O+B)/2|0;V<o?V=o:V+o>u&&(V=u-o),O=V-o,B=V+o}O>A+1||M!==I?(P!==0&&g.fillRect(h[I],T,m[I],A-T),I=M,T=O,A=B):B>A&&(A=B)}g.fillRect(h[I],T,m[I],A-T)}if(!this._settings.hideCursor&&this._settings.cursorColor){const C=2*this._settings.pixelRatio|0,w=C/2|0,D=this._settings.x[7],I=this._settings.w[7];g.fillStyle=this._settings.cursorColor;let T=-100,A=-100;for(let P=0,N=this._cursorPositions.length;P<N;P++){const M=this._cursorPositions[P];let R=c.getVerticalOffsetForLineNumber(M.lineNumber)*s|0;R<w?R=w:R+w>u&&(R=u-w);const x=R-w,O=x+C;x>A+1?(P!==0&&g.fillRect(D,T,I,A-T),T=x,A=O):O>A&&(A=O)}g.fillRect(D,T,I,A-T)}this._settings.renderBorder&&this._settings.borderColor&&this._settings.overviewRulerLanes>0&&(g.beginPath(),g.lineWidth=1,g.strokeStyle=this._settings.borderColor,g.moveTo(0,0),g.lineTo(0,u),g.stroke(),g.moveTo(0,0),g.lineTo(r,0),g.stroke())}}e.DecorationsOverviewRuler=a}),define(se[860],oe([1,0,40,14,56,636,36,83,23,89,7,445]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewCursors=void 0;class a extends y.ViewPart{constructor(n){super(n);const t=this._context.configuration.options;this._readOnly=t.get(90),this._cursorBlinking=t.get(26),this._cursorStyle=t.get(28),this._cursorSmoothCaretAnimation=t.get(27),this._selectionIsEmpty=!0,this._isComposingInput=!1,this._isVisible=!1,this._primaryCursor=new E.ViewCursor(this._context),this._secondaryCursors=[],this._renderData=[],this._domNode=(0,L.createFastDomNode)(document.createElement(\"div\")),this._domNode.setAttribute(\"role\",\"presentation\"),this._domNode.setAttribute(\"aria-hidden\",\"true\"),this._updateDomClassName(),this._domNode.appendChild(this._primaryCursor.getDomNode()),this._startCursorBlinkAnimation=new k.TimeoutTimer,this._cursorFlatBlinkInterval=new b.WindowIntervalTimer,this._blinkingEnabled=!1,this._editorHasFocus=!1,this._updateBlinking()}dispose(){super.dispose(),this._startCursorBlinkAnimation.dispose(),this._cursorFlatBlinkInterval.dispose()}getDomNode(){return this._domNode}onCompositionStart(n){return this._isComposingInput=!0,this._updateBlinking(),!0}onCompositionEnd(n){return this._isComposingInput=!1,this._updateBlinking(),!0}onConfigurationChanged(n){const t=this._context.configuration.options;this._readOnly=t.get(90),this._cursorBlinking=t.get(26),this._cursorStyle=t.get(28),this._cursorSmoothCaretAnimation=t.get(27),this._updateBlinking(),this._updateDomClassName(),this._primaryCursor.onConfigurationChanged(n);for(let r=0,u=this._secondaryCursors.length;r<u;r++)this._secondaryCursors[r].onConfigurationChanged(n);return!0}_onCursorPositionChanged(n,t,r){const u=this._secondaryCursors.length!==t.length||this._cursorSmoothCaretAnimation===\"explicit\"&&r!==3;if(this._primaryCursor.onCursorPositionChanged(n,u),this._updateBlinking(),this._secondaryCursors.length<t.length){const f=t.length-this._secondaryCursors.length;for(let c=0;c<f;c++){const d=new E.ViewCursor(this._context);this._domNode.domNode.insertBefore(d.getDomNode().domNode,this._primaryCursor.getDomNode().domNode.nextSibling),this._secondaryCursors.push(d)}}else if(this._secondaryCursors.length>t.length){const f=this._secondaryCursors.length-t.length;for(let c=0;c<f;c++)this._domNode.removeChild(this._secondaryCursors[0].getDomNode()),this._secondaryCursors.splice(0,1)}for(let f=0;f<t.length;f++)this._secondaryCursors[f].onCursorPositionChanged(t[f],u)}onCursorStateChanged(n){const t=[];for(let u=0,f=n.selections.length;u<f;u++)t[u]=n.selections[u].getPosition();this._onCursorPositionChanged(t[0],t.slice(1),n.reason);const r=n.selections[0].isEmpty();return this._selectionIsEmpty!==r&&(this._selectionIsEmpty=r,this._updateDomClassName()),!0}onDecorationsChanged(n){return!0}onFlushed(n){return!0}onFocusChanged(n){return this._editorHasFocus=n.isFocused,this._updateBlinking(),!1}onLinesChanged(n){return!0}onLinesDeleted(n){return!0}onLinesInserted(n){return!0}onScrollChanged(n){return!0}onTokensChanged(n){const t=r=>{for(let u=0,f=n.ranges.length;u<f;u++)if(n.ranges[u].fromLineNumber<=r.lineNumber&&r.lineNumber<=n.ranges[u].toLineNumber)return!0;return!1};if(t(this._primaryCursor.getPosition()))return!0;for(const r of this._secondaryCursors)if(t(r.getPosition()))return!0;return!1}onZonesChanged(n){return!0}_getCursorBlinking(){return this._isComposingInput||!this._editorHasFocus?0:this._readOnly?5:this._cursorBlinking}_updateBlinking(){this._startCursorBlinkAnimation.cancel(),this._cursorFlatBlinkInterval.cancel();const n=this._getCursorBlinking(),t=n===0,r=n===5;t?this._hide():this._show(),this._blinkingEnabled=!1,this._updateDomClassName(),!t&&!r&&(n===1?this._cursorFlatBlinkInterval.cancelAndSet(()=>{this._isVisible?this._hide():this._show()},a.BLINK_INTERVAL,(0,b.getWindow)(this._domNode.domNode)):this._startCursorBlinkAnimation.setIfNotSet(()=>{this._blinkingEnabled=!0,this._updateDomClassName()},a.BLINK_INTERVAL))}_updateDomClassName(){this._domNode.setClassName(this._getClassName())}_getClassName(){let n=\"cursors-layer\";switch(this._selectionIsEmpty||(n+=\" has-selection\"),this._cursorStyle){case S.TextEditorCursorStyle.Line:n+=\" cursor-line-style\";break;case S.TextEditorCursorStyle.Block:n+=\" cursor-block-style\";break;case S.TextEditorCursorStyle.Underline:n+=\" cursor-underline-style\";break;case S.TextEditorCursorStyle.LineThin:n+=\" cursor-line-thin-style\";break;case S.TextEditorCursorStyle.BlockOutline:n+=\" cursor-block-outline-style\";break;case S.TextEditorCursorStyle.UnderlineThin:n+=\" cursor-underline-thin-style\";break;default:n+=\" cursor-line-style\"}if(this._blinkingEnabled)switch(this._getCursorBlinking()){case 1:n+=\" cursor-blink\";break;case 2:n+=\" cursor-smooth\";break;case 3:n+=\" cursor-phase\";break;case 4:n+=\" cursor-expand\";break;case 5:n+=\" cursor-solid\";break;default:n+=\" cursor-solid\"}else n+=\" cursor-solid\";return(this._cursorSmoothCaretAnimation===\"on\"||this._cursorSmoothCaretAnimation===\"explicit\")&&(n+=\" cursor-smooth-caret-animation\"),n}_show(){this._primaryCursor.show();for(let n=0,t=this._secondaryCursors.length;n<t;n++)this._secondaryCursors[n].show();this._isVisible=!0}_hide(){this._primaryCursor.hide();for(let n=0,t=this._secondaryCursors.length;n<t;n++)this._secondaryCursors[n].hide();this._isVisible=!1}prepareRender(n){this._primaryCursor.prepareRender(n);for(let t=0,r=this._secondaryCursors.length;t<r;t++)this._secondaryCursors[t].prepareRender(n)}render(n){const t=[];let r=0;const u=this._primaryCursor.render(n);u&&(t[r++]=u);for(let f=0,c=this._secondaryCursors.length;f<c;f++){const d=this._secondaryCursors[f].render(n);d&&(t[r++]=d)}this._renderData=t}getLastRenderData(){return this._renderData}}e.ViewCursors=a,a.BLINK_INTERVAL=500,(0,_.registerThemingParticipant)((i,n)=>{const t=i.getColor(p.editorCursorForeground);if(t){let r=i.getColor(p.editorCursorBackground);r||(r=t.opposite()),n.addRule(`.monaco-editor .cursors-layer .cursor { background-color: ${t}; border-color: ${t}; color: ${r}; }`),(0,v.isHighContrast)(i.type)&&n.addRule(`.monaco-editor .cursors-layer.has-selection .cursor { border-left: 1px solid ${r}; border-right: 1px solid ${r}; }`)}})}),define(se[861],oe([1,0,115,11,120,10,83,446]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.WhitespaceOverlay=void 0;class p extends L.DynamicViewOverlay{constructor(b){super(),this._context=b,this._options=new _(this._context.configuration),this._selection=[],this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(b){const a=new _(this._context.configuration);return this._options.equals(a)?b.hasChanged(143):(this._options=a,!0)}onCursorStateChanged(b){return this._selection=b.selections,this._options.renderWhitespace===\"selection\"}onDecorationsChanged(b){return!0}onFlushed(b){return!0}onLinesChanged(b){return!0}onLinesDeleted(b){return!0}onLinesInserted(b){return!0}onScrollChanged(b){return b.scrollTopChanged}onZonesChanged(b){return!0}prepareRender(b){if(this._options.renderWhitespace===\"none\"){this._renderResult=null;return}const a=b.visibleRange.startLineNumber,n=b.visibleRange.endLineNumber-a+1,t=new Array(n);for(let u=0;u<n;u++)t[u]=!0;const r=this._context.viewModel.getMinimapLinesRenderingData(b.viewportData.startLineNumber,b.viewportData.endLineNumber,t);this._renderResult=[];for(let u=b.viewportData.startLineNumber;u<=b.viewportData.endLineNumber;u++){const f=u-b.viewportData.startLineNumber,c=r.data[f];let d=null;if(this._options.renderWhitespace===\"selection\"){const s=this._selection;for(const l of s){if(l.endLineNumber<u||l.startLineNumber>u)continue;const o=l.startLineNumber===u?l.startColumn:c.minColumn,g=l.endLineNumber===u?l.endColumn:c.maxColumn;o<g&&(d||(d=[]),d.push(new y.LineRange(o-1,g-1)))}}this._renderResult[f]=this._applyRenderWhitespace(b,u,d,c)}}_applyRenderWhitespace(b,a,i,n){if(this._options.renderWhitespace===\"selection\"&&!i||this._options.renderWhitespace===\"trailing\"&&n.continuesWithWrappedLine)return\"\";const t=this._context.theme.getColor(S.editorWhitespaces),r=this._options.renderWithSVG,u=n.content,f=this._options.stopRenderingLineAfter===-1?u.length:Math.min(this._options.stopRenderingLineAfter,u.length),c=n.continuesWithWrappedLine,d=n.minColumn-1,s=this._options.renderWhitespace===\"boundary\",l=this._options.renderWhitespace===\"trailing\",o=this._options.lineHeight,g=this._options.middotWidth,h=this._options.wsmiddotWidth,m=this._options.spaceWidth,C=Math.abs(h-m),w=Math.abs(g-m),D=C<w?11825:183,I=this._options.canUseHalfwidthRightwardsArrow;let T=\"\",A=!1,P=k.firstNonWhitespaceIndex(u),N;P===-1?(A=!0,P=f,N=f):N=k.lastNonWhitespaceIndex(u);let M=0,R=i&&i[M],x=0;for(let O=d;O<f;O++){const B=u.charCodeAt(O);if(R&&O>=R.endOffset&&(M++,R=i&&i[M]),B!==9&&B!==32||l&&!A&&O<=N)continue;if(s&&O>=P&&O<=N&&B===32){const V=O-1>=0?u.charCodeAt(O-1):0,K=O+1<f?u.charCodeAt(O+1):0;if(V!==32&&K!==32)continue}if(s&&c&&O===f-1){const V=O-1>=0?u.charCodeAt(O-1):0;if(B===32&&V!==32&&V!==9)continue}if(i&&(!R||R.startOffset>O||R.endOffset<=O))continue;const W=b.visibleRangeForPosition(new E.Position(a,O+1));W&&(r?(x=Math.max(x,W.left),B===9?T+=this._renderArrow(o,m,W.left):T+=`<circle cx=\"${(W.left+m/2).toFixed(2)}\" cy=\"${(o/2).toFixed(2)}\" r=\"${(m/7).toFixed(2)}\" />`):B===9?T+=`<div class=\"mwh\" style=\"left:${W.left}px;height:${o}px;\">${I?String.fromCharCode(65515):String.fromCharCode(8594)}</div>`:T+=`<div class=\"mwh\" style=\"left:${W.left}px;height:${o}px;\">${String.fromCharCode(D)}</div>`)}return r?(x=Math.round(x+m),`<svg style=\"position:absolute;width:${x}px;height:${o}px\" viewBox=\"0 0 ${x} ${o}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"${t}\">`+T+\"</svg>\"):T}_renderArrow(b,a,i){const n=a/7,t=a,r=b/2,u=i,f={x:0,y:n/2},c={x:100/125*t,y:f.y},d={x:c.x-.2*c.x,y:c.y+.2*c.x},s={x:d.x+.1*c.x,y:d.y+.1*c.x},l={x:s.x+.35*c.x,y:s.y-.35*c.x},o={x:l.x,y:-l.y},g={x:s.x,y:-s.y},h={x:d.x,y:-d.y},m={x:c.x,y:-c.y},C={x:f.x,y:-f.y};return`<path d=\"M ${[f,c,d,s,l,o,g,h,m,C].map(I=>`${(u+I.x).toFixed(2)} ${(r+I.y).toFixed(2)}`).join(\" L \")}\" />`}render(b,a){if(!this._renderResult)return\"\";const i=a-b;return i<0||i>=this._renderResult.length?\"\":this._renderResult[i]}}e.WhitespaceOverlay=p;class _{constructor(b){const a=b.options,i=a.get(50),n=a.get(38);n===\"off\"?(this.renderWhitespace=\"none\",this.renderWithSVG=!1):n===\"svg\"?(this.renderWhitespace=a.get(98),this.renderWithSVG=!0):(this.renderWhitespace=a.get(98),this.renderWithSVG=!1),this.spaceWidth=i.spaceWidth,this.middotWidth=i.middotWidth,this.wsmiddotWidth=i.wsmiddotWidth,this.canUseHalfwidthRightwardsArrow=i.canUseHalfwidthRightwardsArrow,this.lineHeight=a.get(66),this.stopRenderingLineAfter=a.get(116)}equals(b){return this.renderWhitespace===b.renderWhitespace&&this.renderWithSVG===b.renderWithSVG&&this.spaceWidth===b.spaceWidth&&this.middotWidth===b.middotWidth&&this.wsmiddotWidth===b.wsmiddotWidth&&this.canUseHalfwidthRightwardsArrow===b.canUseHalfwidthRightwardsArrow&&this.lineHeight===b.lineHeight&&this.stopRenderingLineAfter===b.stopRenderingLineAfter}}}),define(se[862],oe([1,0,7,40,266,12,365,848,858,148,808,610,56,279,536,605,856,537,853,213,857,369,849,538,299,539,834,606,859,549,540,541,854,860,542,861,10,5,24,41,154,545,550,8,23]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P,N,M,R,x,O,B,W,V,K,F,q,ie){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.View=void 0;let ae=class extends V.ViewEventHandler{constructor(Q,re,de,he,me,X,U){super(),this._instantiationService=U,this._shouldRecomputeGlyphMarginLanes=!1,this._selections=[new B.Selection(1,1,1,1)],this._renderAnimationFrame=null;const G=new b.ViewController(re,he,me,Q);this._context=new F.ViewContext(re,de,he),this._context.addEventHandler(this),this._viewParts=[],this._textAreaHandler=this._instantiationService.createInstance(_.TextAreaHandler,this._context,G,this._createTextAreaHandlerHelper()),this._viewParts.push(this._textAreaHandler),this._linesContent=(0,k.createFastDomNode)(document.createElement(\"div\")),this._linesContent.setClassName(\"lines-content monaco-editor-background\"),this._linesContent.setPosition(\"absolute\"),this.domNode=(0,k.createFastDomNode)(document.createElement(\"div\")),this.domNode.setClassName(this._getEditorClassName()),this.domNode.setAttribute(\"role\",\"code\"),this._overflowGuardContainer=(0,k.createFastDomNode)(document.createElement(\"div\")),i.PartFingerprints.write(this._overflowGuardContainer,3),this._overflowGuardContainer.setClassName(\"overflow-guard\"),this._scrollbar=new c.EditorScrollbar(this._context,this._linesContent,this.domNode,this._overflowGuardContainer),this._viewParts.push(this._scrollbar),this._viewLines=new o.ViewLines(this._context,this._linesContent),this._viewZones=new M.ViewZones(this._context),this._viewParts.push(this._viewZones);const z=new D.DecorationsOverviewRuler(this._context);this._viewParts.push(z);const H=new A.ScrollDecorationViewPart(this._context);this._viewParts.push(H);const Y=new a.ContentViewOverlays(this._context);this._viewParts.push(Y),Y.addDynamicOverlay(new u.CurrentLineHighlightOverlay(this._context)),Y.addDynamicOverlay(new P.SelectionsOverlay(this._context)),Y.addDynamicOverlay(new s.IndentGuidesOverlay(this._context)),Y.addDynamicOverlay(new f.DecorationsOverlay(this._context)),Y.addDynamicOverlay(new R.WhitespaceOverlay(this._context));const j=new a.MarginViewOverlays(this._context);this._viewParts.push(j),j.addDynamicOverlay(new u.CurrentLineMarginHighlightOverlay(this._context)),j.addDynamicOverlay(new m.MarginViewLineDecorationsOverlay(this._context)),j.addDynamicOverlay(new g.LinesDecorationsOverlay(this._context)),j.addDynamicOverlay(new l.LineNumbersOverlay(this._context)),this._glyphMarginWidgets=new d.GlyphMarginWidgets(this._context),this._viewParts.push(this._glyphMarginWidgets);const Z=new h.Margin(this._context);Z.getDomNode().appendChild(this._viewZones.marginDomNode),Z.getDomNode().appendChild(j.getDomNode()),Z.getDomNode().appendChild(this._glyphMarginWidgets.domNode),this._viewParts.push(Z),this._contentWidgets=new r.ViewContentWidgets(this._context,this.domNode),this._viewParts.push(this._contentWidgets),this._viewCursors=new N.ViewCursors(this._context),this._viewParts.push(this._viewCursors),this._overlayWidgets=new w.ViewOverlayWidgets(this._context,this.domNode),this._viewParts.push(this._overlayWidgets);const ee=new T.Rulers(this._context);this._viewParts.push(ee);const le=new t.BlockDecorations(this._context);this._viewParts.push(le);const ue=new C.Minimap(this._context);if(this._viewParts.push(ue),z){const ce=this._scrollbar.getOverviewRulerLayoutInfo();ce.parent.insertBefore(z.getDomNode(),ce.insertBefore)}this._linesContent.appendChild(Y.getDomNode()),this._linesContent.appendChild(ee.domNode),this._linesContent.appendChild(this._viewZones.domNode),this._linesContent.appendChild(this._viewLines.getDomNode()),this._linesContent.appendChild(this._contentWidgets.domNode),this._linesContent.appendChild(this._viewCursors.getDomNode()),this._overflowGuardContainer.appendChild(Z.getDomNode()),this._overflowGuardContainer.appendChild(this._scrollbar.getDomNode()),this._overflowGuardContainer.appendChild(H.getDomNode()),this._overflowGuardContainer.appendChild(this._textAreaHandler.textArea),this._overflowGuardContainer.appendChild(this._textAreaHandler.textAreaCover),this._overflowGuardContainer.appendChild(this._overlayWidgets.getDomNode()),this._overflowGuardContainer.appendChild(ue.getDomNode()),this._overflowGuardContainer.appendChild(le.domNode),this.domNode.appendChild(this._overflowGuardContainer),X?(X.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode.domNode),X.appendChild(this._overlayWidgets.overflowingOverlayWidgetsDomNode.domNode)):(this.domNode.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode),this.domNode.appendChild(this._overlayWidgets.overflowingOverlayWidgetsDomNode)),this._applyLayout(),this._pointerHandler=this._register(new p.PointerHandler(this._context,G,this._createPointerHandlerHelper()))}_computeGlyphMarginLanes(){const Q=this._context.viewModel.model,re=this._context.viewModel.glyphLanes;let de=[],he=0;de=de.concat(Q.getAllMarginDecorations().map(me=>{var X,U,G;const z=(U=(X=me.options.glyphMargin)===null||X===void 0?void 0:X.position)!==null&&U!==void 0?U:W.GlyphMarginLane.Center;return he=Math.max(he,me.range.endLineNumber),{range:me.range,lane:z,persist:(G=me.options.glyphMargin)===null||G===void 0?void 0:G.persistLane}})),de=de.concat(this._glyphMarginWidgets.getWidgets().map(me=>{const X=Q.validateRange(me.preference.range);return he=Math.max(he,X.endLineNumber),{range:X,lane:me.preference.lane}})),de.sort((me,X)=>O.Range.compareRangesUsingStarts(me.range,X.range)),re.reset(he);for(const me of de)re.push(me.lane,me.range,me.persist);return re}_createPointerHandlerHelper(){return{viewDomNode:this.domNode.domNode,linesContentDomNode:this._linesContent.domNode,viewLinesDomNode:this._viewLines.getDomNode().domNode,focusTextArea:()=>{this.focus()},dispatchTextAreaEvent:Q=>{this._textAreaHandler.textArea.domNode.dispatchEvent(Q)},getLastRenderData:()=>{const Q=this._viewCursors.getLastRenderData()||[],re=this._textAreaHandler.getLastRenderData();return new S.PointerHandlerLastRenderData(Q,re)},renderNow:()=>{this.render(!0,!1)},shouldSuppressMouseDownOnViewZone:Q=>this._viewZones.shouldSuppressMouseDownOnViewZone(Q),shouldSuppressMouseDownOnWidget:Q=>this._contentWidgets.shouldSuppressMouseDownOnWidget(Q),getPositionFromDOMInfo:(Q,re)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getPositionFromDOMInfo(Q,re)),visibleRangeForPosition:(Q,re)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(new x.Position(Q,re))),getLineWidth:Q=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getLineWidth(Q))}}_createTextAreaHandlerHelper(){return{visibleRangeForPosition:Q=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(Q))}}_applyLayout(){const re=this._context.configuration.options.get(143);this.domNode.setWidth(re.width),this.domNode.setHeight(re.height),this._overflowGuardContainer.setWidth(re.width),this._overflowGuardContainer.setHeight(re.height),this._linesContent.setWidth(1e6),this._linesContent.setHeight(1e6)}_getEditorClassName(){const Q=this._textAreaHandler.isFocused()?\" focused\":\"\";return this._context.configuration.options.get(140)+\" \"+(0,ie.getThemeTypeSelector)(this._context.theme.type)+Q}handleEvents(Q){super.handleEvents(Q),this._scheduleRender()}onConfigurationChanged(Q){return this.domNode.setClassName(this._getEditorClassName()),this._applyLayout(),!1}onCursorStateChanged(Q){return this._selections=Q.selections,!1}onDecorationsChanged(Q){return Q.affectsGlyphMargin&&(this._shouldRecomputeGlyphMarginLanes=!0),!1}onFocusChanged(Q){return this.domNode.setClassName(this._getEditorClassName()),!1}onThemeChanged(Q){return this._context.theme.update(Q.theme),this.domNode.setClassName(this._getEditorClassName()),!1}dispose(){this._renderAnimationFrame!==null&&(this._renderAnimationFrame.dispose(),this._renderAnimationFrame=null),this._contentWidgets.overflowingContentWidgetsDomNode.domNode.remove(),this._context.removeEventHandler(this),this._viewLines.dispose();for(const Q of this._viewParts)Q.dispose();super.dispose()}_scheduleRender(){if(this._store.isDisposed)throw new E.BugIndicatingError;if(this._renderAnimationFrame===null){const Q=this._createCoordinatedRendering();this._renderAnimationFrame=$.INSTANCE.scheduleCoordinatedRendering({window:L.getWindow(this.domNode.domNode),prepareRenderText:()=>{if(this._store.isDisposed)throw new E.BugIndicatingError;try{return Q.prepareRenderText()}finally{this._renderAnimationFrame=null}},renderText:()=>{if(this._store.isDisposed)throw new E.BugIndicatingError;return Q.renderText()},prepareRender:(re,de)=>{if(this._store.isDisposed)throw new E.BugIndicatingError;return Q.prepareRender(re,de)},render:(re,de)=>{if(this._store.isDisposed)throw new E.BugIndicatingError;return Q.render(re,de)}})}}_flushAccumulatedAndRenderNow(){const Q=this._createCoordinatedRendering();ne(()=>Q.prepareRenderText());const re=ne(()=>Q.renderText());if(re){const[de,he]=re;ne(()=>Q.prepareRender(de,he)),ne(()=>Q.render(de,he))}}_getViewPartsToRender(){const Q=[];let re=0;for(const de of this._viewParts)de.shouldRender()&&(Q[re++]=de);return Q}_createCoordinatedRendering(){return{prepareRenderText:()=>{if(this._shouldRecomputeGlyphMarginLanes){this._shouldRecomputeGlyphMarginLanes=!1;const Q=this._computeGlyphMarginLanes();this._context.configuration.setGlyphMarginDecorationLaneCount(Q.requiredLanes)}y.inputLatency.onRenderStart()},renderText:()=>{if(!this.domNode.domNode.isConnected)return null;let Q=this._getViewPartsToRender();if(!this._viewLines.shouldRender()&&Q.length===0)return null;const re=this._context.viewLayout.getLinesViewportData();this._context.viewModel.setViewport(re.startLineNumber,re.endLineNumber,re.centeredLineNumber);const de=new K.ViewportData(this._selections,re,this._context.viewLayout.getWhitespaceViewportData(),this._context.viewModel);return this._contentWidgets.shouldRender()&&this._contentWidgets.onBeforeRender(de),this._viewLines.shouldRender()&&(this._viewLines.renderText(de),this._viewLines.onDidRender(),Q=this._getViewPartsToRender()),[Q,new v.RenderingContext(this._context.viewLayout,de,this._viewLines)]},prepareRender:(Q,re)=>{for(const de of Q)de.prepareRender(re)},render:(Q,re)=>{for(const de of Q)de.render(re),de.onDidRender()}}}delegateVerticalScrollbarPointerDown(Q){this._scrollbar.delegateVerticalScrollbarPointerDown(Q)}delegateScrollFromMouseWheelEvent(Q){this._scrollbar.delegateScrollFromMouseWheelEvent(Q)}restoreState(Q){this._context.viewModel.viewLayout.setScrollPosition({scrollTop:Q.scrollTop,scrollLeft:Q.scrollLeft},1),this._context.viewModel.visibleLinesStabilized()}getOffsetForColumn(Q,re){const de=this._context.viewModel.model.validatePosition({lineNumber:Q,column:re}),he=this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(de);this._flushAccumulatedAndRenderNow();const me=this._viewLines.visibleRangeForPosition(new x.Position(he.lineNumber,he.column));return me?me.left:-1}getTargetAtClientPoint(Q,re){const de=this._pointerHandler.getTargetAtClientPoint(Q,re);return de?n.ViewUserInputEvents.convertViewToModelMouseTarget(de,this._context.viewModel.coordinatesConverter):null}createOverviewRuler(Q){return new I.OverviewRuler(this._context,Q)}change(Q){this._viewZones.changeViewZones(Q),this._scheduleRender()}render(Q,re){if(re){this._viewLines.forceShouldRender();for(const de of this._viewParts)de.forceShouldRender()}Q?this._flushAccumulatedAndRenderNow():this._scheduleRender()}writeScreenReaderContent(Q){this._textAreaHandler.writeScreenReaderContent(Q)}focus(){this._textAreaHandler.focusTextArea()}isFocused(){return this._textAreaHandler.isFocused()}setAriaOptions(Q){this._textAreaHandler.setAriaOptions(Q)}addContentWidget(Q){this._contentWidgets.addWidget(Q.widget),this.layoutContentWidget(Q),this._scheduleRender()}layoutContentWidget(Q){var re,de,he,me,X,U,G,z;this._contentWidgets.setWidgetPosition(Q.widget,(de=(re=Q.position)===null||re===void 0?void 0:re.position)!==null&&de!==void 0?de:null,(me=(he=Q.position)===null||he===void 0?void 0:he.secondaryPosition)!==null&&me!==void 0?me:null,(U=(X=Q.position)===null||X===void 0?void 0:X.preference)!==null&&U!==void 0?U:null,(z=(G=Q.position)===null||G===void 0?void 0:G.positionAffinity)!==null&&z!==void 0?z:null),this._scheduleRender()}removeContentWidget(Q){this._contentWidgets.removeWidget(Q.widget),this._scheduleRender()}addOverlayWidget(Q){this._overlayWidgets.addWidget(Q.widget),this.layoutOverlayWidget(Q),this._scheduleRender()}layoutOverlayWidget(Q){const re=Q.position?Q.position.preference:null;this._overlayWidgets.setWidgetPosition(Q.widget,re)&&this._scheduleRender()}removeOverlayWidget(Q){this._overlayWidgets.removeWidget(Q.widget),this._scheduleRender()}addGlyphMarginWidget(Q){this._glyphMarginWidgets.addWidget(Q.widget),this._shouldRecomputeGlyphMarginLanes=!0,this._scheduleRender()}layoutGlyphMarginWidget(Q){const re=Q.position;this._glyphMarginWidgets.setWidgetPosition(Q.widget,re)&&(this._shouldRecomputeGlyphMarginLanes=!0,this._scheduleRender())}removeGlyphMarginWidget(Q){this._glyphMarginWidgets.removeWidget(Q.widget),this._shouldRecomputeGlyphMarginLanes=!0,this._scheduleRender()}};e.View=ae,e.View=ae=ke([ge(6,q.IInstantiationService)],ae);function ne(J){try{return J()}catch(Q){return(0,E.onUnexpectedError)(Q),null}}class ${constructor(){this._coordinatedRenderings=[],this._animationFrameRunners=new Map}scheduleCoordinatedRendering(Q){return this._coordinatedRenderings.push(Q),this._scheduleRender(Q.window),{dispose:()=>{const re=this._coordinatedRenderings.indexOf(Q);if(re!==-1&&(this._coordinatedRenderings.splice(re,1),this._coordinatedRenderings.length===0)){for(const[de,he]of this._animationFrameRunners)he.dispose();this._animationFrameRunners.clear()}}}}_scheduleRender(Q){if(!this._animationFrameRunners.has(Q)){const re=()=>{this._animationFrameRunners.delete(Q),this._onRenderScheduled()};this._animationFrameRunners.set(Q,L.runAtThisOrScheduleAtNextAnimationFrame(Q,re,100))}}_onRenderScheduled(){const Q=this._coordinatedRenderings.slice(0);this._coordinatedRenderings=[];for(const de of Q)ne(()=>de.prepareRenderText());const re=[];for(let de=0,he=Q.length;de<he;de++){const me=Q[de];re[de]=ne(()=>me.renderText())}for(let de=0,he=Q.length;de<he;de++){const me=Q[de],X=re[de];if(!X)continue;const[U,G]=X;ne(()=>me.prepareRender(U,G))}for(let de=0,he=Q.length;de<he;de++){const me=Q[de],X=re[de];if(!X)continue;const[U,G]=X;ne(()=>me.render(U,G))}}}$.INSTANCE=new $}),define(se[863],oe([1,0,6,2,5,83,23]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorizedBracketPairsDecorationProvider=void 0;class p extends k.Disposable{constructor(b){super(),this.textModel=b,this.colorProvider=new _,this.onDidChangeEmitter=new L.Emitter,this.onDidChange=this.onDidChangeEmitter.event,this.colorizationOptions=b.getOptions().bracketPairColorizationOptions,this._register(b.bracketPairs.onDidChange(a=>{this.onDidChangeEmitter.fire()}))}handleDidChangeOptions(b){this.colorizationOptions=this.textModel.getOptions().bracketPairColorizationOptions}getDecorationsInRange(b,a,i,n){return n?[]:a===void 0?[]:this.colorizationOptions.enabled?this.textModel.bracketPairs.getBracketsInRange(b,!0).map(r=>({id:`bracket${r.range.toString()}-${r.nestingLevel}`,options:{description:\"BracketPairColorization\",inlineClassName:this.colorProvider.getInlineClassName(r,this.colorizationOptions.independentColorPoolPerBracketType)},ownerId:0,range:r.range})).toArray():[]}getAllDecorations(b,a){return b===void 0?[]:this.colorizationOptions.enabled?this.getDecorationsInRange(new y.Range(1,1,this.textModel.getLineCount(),1),b,a):[]}}e.ColorizedBracketPairsDecorationProvider=p;class _{constructor(){this.unexpectedClosingBracketClassName=\"unexpected-closing-bracket\"}getInlineClassName(b,a){return b.isInvalid?this.unexpectedClosingBracketClassName:this.getInlineClassNameOfLevel(a?b.nestingLevelOfEqualBracketType:b.nestingLevel)}getInlineClassNameOfLevel(b){return`bracket-highlighting-${b%30}`}}(0,S.registerThemingParticipant)((v,b)=>{const a=[E.editorBracketHighlightingForeground1,E.editorBracketHighlightingForeground2,E.editorBracketHighlightingForeground3,E.editorBracketHighlightingForeground4,E.editorBracketHighlightingForeground5,E.editorBracketHighlightingForeground6],i=new _;b.addRule(`.monaco-editor .${i.unexpectedClosingBracketClassName} { color: ${v.getColor(E.editorBracketHighlightingUnexpectedBracketForeground)}; }`);const n=a.map(t=>v.getColor(t)).filter(t=>!!t).filter(t=>!t.isTransparent());for(let t=0;t<30;t++){const r=n[t%n.length];b.addRule(`.monaco-editor .${i.getInlineClassNameOfLevel(t)} { color: ${r}; }`)}})}),define(se[864],oe([1,0,97,2,41,23,83,51,5,47,6,29,53,268]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MarkerDecorationsService=void 0;let t=class extends k.Disposable{constructor(f,c){super(),this._markerService=c,this._onDidChangeMarker=this._register(new b.Emitter),this._markerDecorations=new i.ResourceMap,f.getModels().forEach(d=>this._onModelAdded(d)),this._register(f.onModelAdded(this._onModelAdded,this)),this._register(f.onModelRemoved(this._onModelRemoved,this)),this._register(this._markerService.onMarkerChanged(this._handleMarkerChange,this))}dispose(){super.dispose(),this._markerDecorations.forEach(f=>f.dispose()),this._markerDecorations.clear()}getMarker(f,c){const d=this._markerDecorations.get(f);return d&&d.getMarker(c)||null}_handleMarkerChange(f){f.forEach(c=>{const d=this._markerDecorations.get(c);d&&this._updateDecorations(d)})}_onModelAdded(f){const c=new r(f);this._markerDecorations.set(f.uri,c),this._updateDecorations(c)}_onModelRemoved(f){var c;const d=this._markerDecorations.get(f.uri);d&&(d.dispose(),this._markerDecorations.delete(f.uri)),(f.uri.scheme===v.Schemas.inMemory||f.uri.scheme===v.Schemas.internal||f.uri.scheme===v.Schemas.vscode)&&((c=this._markerService)===null||c===void 0||c.read({resource:f.uri}).map(s=>s.owner).forEach(s=>this._markerService.remove(s,[f.uri])))}_updateDecorations(f){const c=this._markerService.read({resource:f.model.uri,take:500});f.update(c)&&this._onDidChangeMarker.fire(f.model)}};e.MarkerDecorationsService=t,e.MarkerDecorationsService=t=ke([ge(0,p.IModelService),ge(1,L.IMarkerService)],t);class r extends k.Disposable{constructor(f){super(),this.model=f,this._map=new i.BidirectionalMap,this._register((0,k.toDisposable)(()=>{this.model.deltaDecorations([...this._map.values()],[]),this._map.clear()}))}update(f){const{added:c,removed:d}=(0,n.diffSets)(new Set(this._map.keys()),new Set(f));if(c.length===0&&d.length===0)return!1;const s=d.map(g=>this._map.get(g)),l=c.map(g=>({range:this._createDecorationRange(this.model,g),options:this._createDecorationOption(g)})),o=this.model.deltaDecorations(s,l);for(const g of d)this._map.delete(g);for(let g=0;g<o.length;g++)this._map.set(c[g],o[g]);return!0}getMarker(f){return this._map.getKey(f.id)}_createDecorationRange(f,c){let d=_.Range.lift(c);if(c.severity===L.MarkerSeverity.Hint&&!this._hasMarkerTag(c,1)&&!this._hasMarkerTag(c,2)&&(d=d.setEndPosition(d.startLineNumber,d.startColumn+2)),d=f.validateRange(d),d.isEmpty()){const s=f.getLineLastNonWhitespaceColumn(d.startLineNumber)||f.getLineMaxColumn(d.startLineNumber);if(s===1||d.endColumn>=s)return d;const l=f.getWordAtPosition(d.getStartPosition());l&&(d=new _.Range(d.startLineNumber,l.startColumn,d.endLineNumber,l.endColumn))}else if(c.endColumn===Number.MAX_VALUE&&c.startColumn===1&&d.startLineNumber===d.endLineNumber){const s=f.getLineFirstNonWhitespaceColumn(c.startLineNumber);s<d.endColumn&&(d=new _.Range(d.startLineNumber,s,d.endLineNumber,d.endColumn),c.startColumn=s)}return d}_createDecorationOption(f){let c,d,s,l,o;switch(f.severity){case L.MarkerSeverity.Hint:this._hasMarkerTag(f,2)?c=void 0:this._hasMarkerTag(f,1)?c=\"squiggly-unnecessary\":c=\"squiggly-hint\",s=0;break;case L.MarkerSeverity.Info:c=\"squiggly-info\",d=(0,E.themeColorFromId)(S.overviewRulerInfo),s=10,o={color:(0,E.themeColorFromId)(a.minimapInfo),position:y.MinimapPosition.Inline};break;case L.MarkerSeverity.Warning:c=\"squiggly-warning\",d=(0,E.themeColorFromId)(S.overviewRulerWarning),s=20,o={color:(0,E.themeColorFromId)(a.minimapWarning),position:y.MinimapPosition.Inline};break;case L.MarkerSeverity.Error:default:c=\"squiggly-error\",d=(0,E.themeColorFromId)(S.overviewRulerError),s=30,o={color:(0,E.themeColorFromId)(a.minimapError),position:y.MinimapPosition.Inline};break}return f.tags&&(f.tags.indexOf(1)!==-1&&(l=\"squiggly-inline-unnecessary\"),f.tags.indexOf(2)!==-1&&(l=\"squiggly-inline-deprecated\")),{description:\"marker-decoration\",stickiness:1,className:c,showIfCollapsed:!0,overviewRuler:{color:d,position:y.OverviewRulerLane.Right},minimap:o,zIndex:s,inlineClassName:l}}_hasMarkerTag(f,c){return f.tags?f.tags.indexOf(c)>=0:!1}}}),define(se[256],oe([1,0,132,23,64,534,43]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.toMultilineTokens2=e.SemanticTokensProviderStyling=void 0;let p=class{constructor(i,n,t,r){this._legend=i,this._themeService=n,this._languageService=t,this._logService=r,this._hasWarnedOverlappingTokens=!1,this._hasWarnedInvalidLengthTokens=!1,this._hasWarnedInvalidEditStart=!1,this._hashTable=new b}getMetadata(i,n,t){const r=this._languageService.languageIdCodec.encodeLanguageId(t),u=this._hashTable.get(i,n,r);let f;if(u)f=u.metadata,this._logService.getLevel()===y.LogLevel.Trace&&this._logService.trace(`SemanticTokensProviderStyling [CACHED] ${i} / ${n}: foreground ${L.TokenMetadata.getForeground(f)}, fontStyle ${L.TokenMetadata.getFontStyle(f).toString(2)}`);else{let c=this._legend.tokenTypes[i];const d=[];if(c){let s=n;for(let o=0;s>0&&o<this._legend.tokenModifiers.length;o++)s&1&&d.push(this._legend.tokenModifiers[o]),s=s>>1;s>0&&this._logService.getLevel()===y.LogLevel.Trace&&(this._logService.trace(`SemanticTokensProviderStyling: unknown token modifier index: ${n.toString(2)} for legend: ${JSON.stringify(this._legend.tokenModifiers)}`),d.push(\"not-in-legend\"));const l=this._themeService.getColorTheme().getTokenStyleMetadata(c,d,t);if(typeof l>\"u\")f=2147483647;else{if(f=0,typeof l.italic<\"u\"){const o=(l.italic?1:0)<<11;f|=o|1}if(typeof l.bold<\"u\"){const o=(l.bold?2:0)<<11;f|=o|2}if(typeof l.underline<\"u\"){const o=(l.underline?4:0)<<11;f|=o|4}if(typeof l.strikethrough<\"u\"){const o=(l.strikethrough?8:0)<<11;f|=o|8}if(l.foreground){const o=l.foreground<<15;f|=o|16}f===0&&(f=2147483647)}}else this._logService.getLevel()===y.LogLevel.Trace&&this._logService.trace(`SemanticTokensProviderStyling: unknown token type index: ${i} for legend: ${JSON.stringify(this._legend.tokenTypes)}`),f=2147483647,c=\"not-in-legend\";this._hashTable.add(i,n,r,f),this._logService.getLevel()===y.LogLevel.Trace&&this._logService.trace(`SemanticTokensProviderStyling ${i} (${c}) / ${n} (${d.join(\" \")}): foreground ${L.TokenMetadata.getForeground(f)}, fontStyle ${L.TokenMetadata.getFontStyle(f).toString(2)}`)}return f}warnOverlappingSemanticTokens(i,n){this._hasWarnedOverlappingTokens||(this._hasWarnedOverlappingTokens=!0,this._logService.warn(`Overlapping semantic tokens detected at lineNumber ${i}, column ${n}`))}warnInvalidLengthSemanticTokens(i,n){this._hasWarnedInvalidLengthTokens||(this._hasWarnedInvalidLengthTokens=!0,this._logService.warn(`Semantic token with invalid length detected at lineNumber ${i}, column ${n}`))}warnInvalidEditStart(i,n,t,r,u){this._hasWarnedInvalidEditStart||(this._hasWarnedInvalidEditStart=!0,this._logService.warn(`Invalid semantic tokens edit detected (previousResultId: ${i}, resultId: ${n}) at edit #${t}: The provided start offset ${r} is outside the previous data (length ${u}).`))}};e.SemanticTokensProviderStyling=p,e.SemanticTokensProviderStyling=p=ke([ge(1,k.IThemeService),ge(2,S.ILanguageService),ge(3,y.ILogService)],p);function _(a,i,n){const t=a.data,r=a.data.length/5|0,u=Math.max(Math.ceil(r/1024),400),f=[];let c=0,d=1,s=0;for(;c<r;){const l=c;let o=Math.min(l+u,r);if(o<r){let I=o;for(;I-1>l&&t[5*I]===0;)I--;if(I-1===l){let T=o;for(;T+1<r&&t[5*T]===0;)T++;o=T}else o=I}let g=new Uint32Array((o-l)*4),h=0,m=0,C=0,w=0;for(;c<o;){const I=5*c,T=t[I],A=t[I+1],P=d+T|0,N=T===0?s+A|0:A,M=t[I+2],R=N+M|0,x=t[I+3],O=t[I+4];if(R<=N)i.warnInvalidLengthSemanticTokens(P,N+1);else if(C===P&&w>N)i.warnOverlappingSemanticTokens(P,N+1);else{const B=i.getMetadata(x,O,n);B!==2147483647&&(m===0&&(m=P),g[h]=P-m,g[h+1]=N,g[h+2]=R,g[h+3]=B,h+=4,C=P,w=R)}d=P,s=N,c++}h!==g.length&&(g=g.subarray(0,h));const D=E.SparseMultilineTokens.create(m,g);f.push(D)}return f}e.toMultilineTokens2=_;class v{constructor(i,n,t,r){this.tokenTypeIndex=i,this.tokenModifierSet=n,this.languageId=t,this.metadata=r,this.next=null}}class b{constructor(){this._elementsCount=0,this._currentLengthIndex=0,this._currentLength=b._SIZES[this._currentLengthIndex],this._growCount=Math.round(this._currentLengthIndex+1<b._SIZES.length?2/3*this._currentLength:0),this._elements=[],b._nullOutEntries(this._elements,this._currentLength)}static _nullOutEntries(i,n){for(let t=0;t<n;t++)i[t]=null}_hash2(i,n){return(i<<5)-i+n|0}_hashFunc(i,n,t){return this._hash2(this._hash2(i,n),t)%this._currentLength}get(i,n,t){const r=this._hashFunc(i,n,t);let u=this._elements[r];for(;u;){if(u.tokenTypeIndex===i&&u.tokenModifierSet===n&&u.languageId===t)return u;u=u.next}return null}add(i,n,t,r){if(this._elementsCount++,this._growCount!==0&&this._elementsCount>=this._growCount){const u=this._elements;this._currentLengthIndex++,this._currentLength=b._SIZES[this._currentLengthIndex],this._growCount=Math.round(this._currentLengthIndex+1<b._SIZES.length?2/3*this._currentLength:0),this._elements=[],b._nullOutEntries(this._elements,this._currentLength);for(const f of u){let c=f;for(;c;){const d=c.next;c.next=null,this._add(c),c=d}}}this._add(new v(i,n,t,r))}_add(i){const n=this._hashFunc(i.tokenTypeIndex,i.tokenModifierSet,i.languageId);i.next=this._elements[n],this._elements[n]=i}}b._SIZES=[3,7,13,31,61,127,251,509,1021,2039,4093,8191,16381,32749,65521,131071,262139,524287,1048573,2097143]}),define(se[865],oe([1,0,2,43,23,64,256,238,45]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SemanticTokensStylingService=void 0;let v=class extends L.Disposable{constructor(a,i,n){super(),this._themeService=a,this._logService=i,this._languageService=n,this._caches=new WeakMap,this._register(this._themeService.onDidColorThemeChange(()=>{this._caches=new WeakMap}))}getStyling(a){return this._caches.has(a)||this._caches.set(a,new S.SemanticTokensProviderStyling(a.getLegend(),this._themeService,this._languageService,this._logService)),this._caches.get(a)}};e.SemanticTokensStylingService=v,e.SemanticTokensStylingService=v=ke([ge(0,y.IThemeService),ge(1,E.ILogService),ge(2,k.ILanguageService)],v),(0,_.registerSingleton)(p.ISemanticTokensStylingService,v,1)}),define(se[370],oe([1,0,108,2,153,41,83,23,48]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractEditorNavigationQuickAccessProvider=void 0;class v{constructor(a){this.options=a,this.rangeHighlightDecorationId=void 0}provide(a,i){var n;const t=new k.DisposableStore;a.canAcceptInBackground=!!(!((n=this.options)===null||n===void 0)&&n.canAcceptInBackground),a.matchOnLabel=a.matchOnDescription=a.matchOnDetail=a.sortByLabel=!1;const r=t.add(new k.MutableDisposable);return r.value=this.doProvide(a,i),t.add(this.onDidActiveTextEditorControlChange(()=>{r.value=void 0,r.value=this.doProvide(a,i)})),t}doProvide(a,i){var n;const t=new k.DisposableStore,r=this.activeTextEditorControl;if(r&&this.canProvideWithTextEditor(r)){const u={editor:r},f=(0,y.getCodeEditor)(r);if(f){let c=(n=r.saveViewState())!==null&&n!==void 0?n:void 0;t.add(f.onDidChangeCursorPosition(()=>{var d;c=(d=r.saveViewState())!==null&&d!==void 0?d:void 0})),u.restoreViewState=()=>{c&&r===this.activeTextEditorControl&&r.restoreViewState(c)},t.add((0,L.createSingleCallFunction)(i.onCancellationRequested)(()=>{var d;return(d=u.restoreViewState)===null||d===void 0?void 0:d.call(u)}))}t.add((0,k.toDisposable)(()=>this.clearDecorations(r))),t.add(this.provideWithTextEditor(u,a,i))}else t.add(this.provideWithoutTextEditor(a,i));return t}canProvideWithTextEditor(a){return!0}gotoLocation({editor:a},i){a.setSelection(i.range),a.revealRangeInCenter(i.range,0),i.preserveFocus||a.focus();const n=a.getModel();n&&\"getLineContent\"in n&&(0,_.status)(`${n.getLineContent(i.range.startLineNumber)}`)}getModel(a){var i;return(0,y.isDiffEditor)(a)?(i=a.getModel())===null||i===void 0?void 0:i.modified:a.getModel()}addDecorations(a,i){a.changeDecorations(n=>{const t=[];this.rangeHighlightDecorationId&&(t.push(this.rangeHighlightDecorationId.overviewRulerDecorationId),t.push(this.rangeHighlightDecorationId.rangeHighlightId),this.rangeHighlightDecorationId=void 0);const r=[{range:i,options:{description:\"quick-access-range-highlight\",className:\"rangeHighlight\",isWholeLine:!0}},{range:i,options:{description:\"quick-access-range-highlight-overview\",overviewRuler:{color:(0,p.themeColorFromId)(S.overviewRulerRangeHighlight),position:E.OverviewRulerLane.Full}}}],[u,f]=n.deltaDecorations(t,r);this.rangeHighlightDecorationId={rangeHighlightId:u,overviewRulerDecorationId:f}})}clearDecorations(a){const i=this.rangeHighlightDecorationId;i&&(a.changeDecorations(n=>{n.deltaDecorations([i.overviewRulerDecorationId,i.rangeHighlightId],[])}),this.rangeHighlightDecorationId=void 0)}}e.AbstractEditorNavigationQuickAccessProvider=v}),define(se[866],oe([1,0,2,153,370,707]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractGotoLineQuickAccessProvider=void 0;class S extends y.AbstractEditorNavigationQuickAccessProvider{constructor(){super({canAcceptInBackground:!0})}provideWithoutTextEditor(_){const v=(0,E.localize)(0,null);return _.items=[{label:v}],_.ariaLabel=v,L.Disposable.None}provideWithTextEditor(_,v,b){const a=_.editor,i=new L.DisposableStore;i.add(v.onDidAccept(r=>{const[u]=v.selectedItems;if(u){if(!this.isValidLineNumber(a,u.lineNumber))return;this.gotoLocation(_,{range:this.toRange(u.lineNumber,u.column),keyMods:v.keyMods,preserveFocus:r.inBackground}),r.inBackground||v.hide()}}));const n=()=>{const r=this.parsePosition(a,v.value.trim().substr(S.PREFIX.length)),u=this.getPickLabel(a,r.lineNumber,r.column);if(v.items=[{lineNumber:r.lineNumber,column:r.column,label:u}],v.ariaLabel=u,!this.isValidLineNumber(a,r.lineNumber)){this.clearDecorations(a);return}const f=this.toRange(r.lineNumber,r.column);a.revealRangeInCenter(f,0),this.addDecorations(a,f)};n(),i.add(v.onDidChangeValue(()=>n()));const t=(0,k.getCodeEditor)(a);return t&&t.getOptions().get(67).renderType===2&&(t.updateOptions({lineNumbers:\"on\"}),i.add((0,L.toDisposable)(()=>t.updateOptions({lineNumbers:\"relative\"})))),i}toRange(_=1,v=1){return{startLineNumber:_,startColumn:v,endLineNumber:_,endColumn:v}}parsePosition(_,v){const b=v.split(/,|:|#/).map(i=>parseInt(i,10)).filter(i=>!isNaN(i)),a=this.lineCount(_)+1;return{lineNumber:b[0]>0?b[0]:a+b[0],column:b[1]}}getPickLabel(_,v,b){if(this.isValidLineNumber(_,v))return this.isValidColumn(_,v,b)?(0,E.localize)(1,null,v,b):(0,E.localize)(2,null,v);const a=_.getPosition()||{lineNumber:1,column:1},i=this.lineCount(_);return i>1?(0,E.localize)(3,null,a.lineNumber,a.column,i):(0,E.localize)(4,null,a.lineNumber,a.column)}isValidLineNumber(_,v){return!v||typeof v!=\"number\"?!1:v>0&&v<=this.lineCount(_)}isValidColumn(_,v,b){if(!b||typeof b!=\"number\")return!1;const a=this.getModel(_);if(!a)return!1;const i={lineNumber:v,column:b};return a.validatePosition(i).equals(i)}lineCount(_){var v,b;return(b=(v=this.getModel(_))===null||v===void 0?void 0:v.getLineCount())!==null&&b!==void 0?b:0}}e.AbstractGotoLineQuickAccessProvider=S,S.PREFIX=\":\"}),define(se[867],oe([1,0,14,19,26,28,586,2,11,5,31,165,370,708,18,60]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";var u;Object.defineProperty(e,\"__esModule\",{value:!0}),e.AbstractGotoSymbolQuickAccessProvider=void 0;let f=u=class extends i.AbstractEditorNavigationQuickAccessProvider{constructor(l,o,g=Object.create(null)){super(g),this._languageFeaturesService=l,this._outlineModelService=o,this.options=g,this.options.canAcceptInBackground=!0}provideWithoutTextEditor(l){return this.provideLabelPick(l,(0,n.localize)(0,null)),p.Disposable.None}provideWithTextEditor(l,o,g){const h=l.editor,m=this.getModel(h);return m?this._languageFeaturesService.documentSymbolProvider.has(m)?this.doProvideWithEditorSymbols(l,m,o,g):this.doProvideWithoutEditorSymbols(l,m,o,g):p.Disposable.None}doProvideWithoutEditorSymbols(l,o,g,h){const m=new p.DisposableStore;return this.provideLabelPick(g,(0,n.localize)(1,null)),(async()=>!await this.waitForLanguageSymbolRegistry(o,m)||h.isCancellationRequested||m.add(this.doProvideWithEditorSymbols(l,o,g,h)))(),m}provideLabelPick(l,o){l.items=[{label:o,index:0,kind:14}],l.ariaLabel=o}async waitForLanguageSymbolRegistry(l,o){if(this._languageFeaturesService.documentSymbolProvider.has(l))return!0;const g=new L.DeferredPromise,h=o.add(this._languageFeaturesService.documentSymbolProvider.onDidChange(()=>{this._languageFeaturesService.documentSymbolProvider.has(l)&&(h.dispose(),g.complete(!0))}));return o.add((0,p.toDisposable)(()=>g.complete(!1))),g.p}doProvideWithEditorSymbols(l,o,g,h){var m;const C=l.editor,w=new p.DisposableStore;w.add(g.onDidAccept(A=>{const[P]=g.selectedItems;P&&P.range&&(this.gotoLocation(l,{range:P.range.selection,keyMods:g.keyMods,preserveFocus:A.inBackground}),A.inBackground||g.hide())})),w.add(g.onDidTriggerItemButton(({item:A})=>{A&&A.range&&(this.gotoLocation(l,{range:A.range.selection,keyMods:g.keyMods,forceSideBySide:!0}),g.hide())}));const D=this.getDocumentSymbols(o,h);let I;const T=async A=>{I?.dispose(!0),g.busy=!1,I=new k.CancellationTokenSource(h),g.busy=!0;try{const P=(0,S.prepareQuery)(g.value.substr(u.PREFIX.length).trim()),N=await this.doGetSymbolPicks(D,P,void 0,I.token);if(h.isCancellationRequested)return;if(N.length>0){if(g.items=N,A&&P.original.length===0){const M=(0,r.findLast)(N,R=>!!(R.type!==\"separator\"&&R.range&&v.Range.containsPosition(R.range.decoration,A)));M&&(g.activeItems=[M])}}else P.original.length>0?this.provideLabelPick(g,(0,n.localize)(2,null)):this.provideLabelPick(g,(0,n.localize)(3,null))}finally{h.isCancellationRequested||(g.busy=!1)}};return w.add(g.onDidChangeValue(()=>T(void 0))),T((m=C.getSelection())===null||m===void 0?void 0:m.getPosition()),w.add(g.onDidChangeActive(()=>{const[A]=g.activeItems;A&&A.range&&(C.revealRangeInCenter(A.range.selection,0),this.addDecorations(C,A.range.decoration))})),w}async doGetSymbolPicks(l,o,g,h){var m,C;const w=await l;if(h.isCancellationRequested)return[];const D=o.original.indexOf(u.SCOPE_PREFIX)===0,I=D?1:0;let T,A;o.values&&o.values.length>1?(T=(0,S.pieceToQuery)(o.values[0]),A=(0,S.pieceToQuery)(o.values.slice(1))):T=o;let P;const N=(C=(m=this.options)===null||m===void 0?void 0:m.openSideBySideDirection)===null||C===void 0?void 0:C.call(m);N&&(P=[{iconClass:N===\"right\"?E.ThemeIcon.asClassName(y.Codicon.splitHorizontal):E.ThemeIcon.asClassName(y.Codicon.splitVertical),tooltip:N===\"right\"?(0,n.localize)(4,null):(0,n.localize)(5,null)}]);const M=[];for(let O=0;O<w.length;O++){const B=w[O],W=(0,_.trim)(B.name),V=`$(${b.SymbolKinds.toIcon(B.kind).id}) ${W}`,K=V.length-W.length;let F=B.containerName;g?.extraContainerLabel&&(F?F=`${g.extraContainerLabel} \\u2022 ${F}`:F=g.extraContainerLabel);let q,ie,ae,ne;if(o.original.length>I){let J=!1;if(T!==o&&([q,ie]=(0,S.scoreFuzzy2)(V,{...o,values:void 0},I,K),typeof q==\"number\"&&(J=!0)),typeof q!=\"number\"&&([q,ie]=(0,S.scoreFuzzy2)(V,T,I,K),typeof q!=\"number\"))continue;if(!J&&A){if(F&&A.original.length>0&&([ae,ne]=(0,S.scoreFuzzy2)(F,A)),typeof ae!=\"number\")continue;typeof q==\"number\"&&(q+=ae)}}const $=B.tags&&B.tags.indexOf(1)>=0;M.push({index:O,kind:B.kind,score:q,label:V,ariaLabel:(0,b.getAriaLabelForSymbol)(B.name,B.kind),description:F,highlights:$?void 0:{label:ie,description:ne},range:{selection:v.Range.collapseToStart(B.selectionRange),decoration:B.range},strikethrough:$,buttons:P})}const R=M.sort((O,B)=>D?this.compareByKindAndScore(O,B):this.compareByScore(O,B));let x=[];if(D){let V=function(){B&&typeof O==\"number\"&&W>0&&(B.label=(0,_.format)(d[O]||c,W))},O,B,W=0;for(const K of R)O!==K.kind?(V(),O=K.kind,W=1,B={type:\"separator\"},x.push(B)):W++,x.push(K);V()}else R.length>0&&(x=[{label:(0,n.localize)(6,null,M.length),type:\"separator\"},...R]);return x}compareByScore(l,o){if(typeof l.score!=\"number\"&&typeof o.score==\"number\")return 1;if(typeof l.score==\"number\"&&typeof o.score!=\"number\")return-1;if(typeof l.score==\"number\"&&typeof o.score==\"number\"){if(l.score>o.score)return-1;if(l.score<o.score)return 1}return l.index<o.index?-1:l.index>o.index?1:0}compareByKindAndScore(l,o){const g=d[l.kind]||c,h=d[o.kind]||c,m=g.localeCompare(h);return m===0?this.compareByScore(l,o):m}async getDocumentSymbols(l,o){const g=await this._outlineModelService.getOrCreate(l,o);return o.isCancellationRequested?[]:g.asListOfDocumentSymbols()}};e.AbstractGotoSymbolQuickAccessProvider=f,f.PREFIX=\"@\",f.SCOPE_PREFIX=\":\",f.PREFIX_BY_CATEGORY=`${u.PREFIX}${u.SCOPE_PREFIX}`,e.AbstractGotoSymbolQuickAccessProvider=f=u=ke([ge(0,t.ILanguageFeaturesService),ge(1,a.IOutlineModelService)],f);const c=(0,n.localize)(7,null),d={[5]:(0,n.localize)(8,null),[11]:(0,n.localize)(9,null),[8]:(0,n.localize)(10,null),[12]:(0,n.localize)(11,null),[4]:(0,n.localize)(12,null),[22]:(0,n.localize)(13,null),[23]:(0,n.localize)(14,null),[24]:(0,n.localize)(15,null),[10]:(0,n.localize)(16,null),[2]:(0,n.localize)(17,null),[3]:(0,n.localize)(18,null),[25]:(0,n.localize)(19,null),[1]:(0,n.localize)(20,null),[6]:(0,n.localize)(21,null),[9]:(0,n.localize)(22,null),[21]:(0,n.localize)(23,null),[14]:(0,n.localize)(24,null),[0]:(0,n.localize)(25,null),[17]:(0,n.localize)(26,null),[15]:(0,n.localize)(27,null),[16]:(0,n.localize)(28,null),[18]:(0,n.localize)(29,null),[19]:(0,n.localize)(30,null),[7]:(0,n.localize)(31,null),[13]:(0,n.localize)(32,null)}}),define(se[868],oe([1,0,2,10,711,15,34,29,23,475]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RenameInputField=e.CONTEXT_RENAME_INPUT_VISIBLE=void 0,e.CONTEXT_RENAME_INPUT_VISIBLE=new E.RawContextKey(\"renameInputVisible\",!1,(0,y.localize)(0,null));let v=class{constructor(a,i,n,t,r){this._editor=a,this._acceptKeybindings=i,this._themeService=n,this._keybindingService=t,this._disposables=new L.DisposableStore,this.allowEditorOverflow=!0,this._visibleContextKey=e.CONTEXT_RENAME_INPUT_VISIBLE.bindTo(r),this._editor.addContentWidget(this),this._disposables.add(this._editor.onDidChangeConfiguration(u=>{u.hasChanged(50)&&this._updateFont()})),this._disposables.add(n.onDidColorThemeChange(this._updateStyles,this))}dispose(){this._disposables.dispose(),this._editor.removeContentWidget(this)}getId(){return\"__renameInputWidget\"}getDomNode(){return this._domNode||(this._domNode=document.createElement(\"div\"),this._domNode.className=\"monaco-editor rename-box\",this._input=document.createElement(\"input\"),this._input.className=\"rename-input\",this._input.type=\"text\",this._input.setAttribute(\"aria-label\",(0,y.localize)(1,null)),this._domNode.appendChild(this._input),this._label=document.createElement(\"div\"),this._label.className=\"rename-label\",this._domNode.appendChild(this._label),this._updateFont(),this._updateStyles(this._themeService.getColorTheme())),this._domNode}_updateStyles(a){var i,n,t,r;if(!this._input||!this._domNode)return;const u=a.getColor(p.widgetShadow),f=a.getColor(p.widgetBorder);this._domNode.style.backgroundColor=String((i=a.getColor(p.editorWidgetBackground))!==null&&i!==void 0?i:\"\"),this._domNode.style.boxShadow=u?` 0 0 8px 2px ${u}`:\"\",this._domNode.style.border=f?`1px solid ${f}`:\"\",this._domNode.style.color=String((n=a.getColor(p.inputForeground))!==null&&n!==void 0?n:\"\"),this._input.style.backgroundColor=String((t=a.getColor(p.inputBackground))!==null&&t!==void 0?t:\"\");const c=a.getColor(p.inputBorder);this._input.style.borderWidth=c?\"1px\":\"0px\",this._input.style.borderStyle=c?\"solid\":\"none\",this._input.style.borderColor=(r=c?.toString())!==null&&r!==void 0?r:\"none\"}_updateFont(){if(!this._input||!this._label)return;const a=this._editor.getOption(50);this._input.style.fontFamily=a.fontFamily,this._input.style.fontWeight=a.fontWeight,this._input.style.fontSize=`${a.fontSize}px`,this._label.style.fontSize=`${a.fontSize*.8}px`}getPosition(){return this._visible?{position:this._position,preference:[2,1]}:null}beforeRender(){var a,i;const[n,t]=this._acceptKeybindings;return this._label.innerText=(0,y.localize)(2,null,(a=this._keybindingService.lookupKeybinding(n))===null||a===void 0?void 0:a.getLabel(),(i=this._keybindingService.lookupKeybinding(t))===null||i===void 0?void 0:i.getLabel()),null}afterRender(a){a||this.cancelInput(!0)}acceptInput(a){var i;(i=this._currentAcceptInput)===null||i===void 0||i.call(this,a)}cancelInput(a){var i;(i=this._currentCancelInput)===null||i===void 0||i.call(this,a)}getInput(a,i,n,t,r,u){this._domNode.classList.toggle(\"preview\",r),this._position=new k.Position(a.startLineNumber,a.startColumn),this._input.value=i,this._input.setAttribute(\"selectionStart\",n.toString()),this._input.setAttribute(\"selectionEnd\",t.toString()),this._input.size=Math.max((a.endColumn-a.startColumn)*1.1,20);const f=new L.DisposableStore;return new Promise(c=>{this._currentCancelInput=d=>(this._currentAcceptInput=void 0,this._currentCancelInput=void 0,c(d),!0),this._currentAcceptInput=d=>{if(this._input.value.trim().length===0||this._input.value===i){this.cancelInput(!0);return}this._currentAcceptInput=void 0,this._currentCancelInput=void 0,c({newName:this._input.value,wantsPreview:r&&d})},f.add(u.onCancellationRequested(()=>this.cancelInput(!0))),f.add(this._editor.onDidBlurEditorWidget(()=>{var d;return this.cancelInput(!(!((d=this._domNode)===null||d===void 0)&&d.ownerDocument.hasFocus()))})),this._show()}).finally(()=>{f.dispose(),this._hide()})}_show(){this._editor.revealLineInCenterIfOutsideViewport(this._position.lineNumber,0),this._visible=!0,this._visibleContextKey.set(!0),this._editor.layoutContentWidget(this),setTimeout(()=>{this._input.focus(),this._input.setSelectionRange(parseInt(this._input.getAttribute(\"selectionStart\")),parseInt(this._input.getAttribute(\"selectionEnd\")))},100)}_hide(){this._visible=!1,this._visibleContextKey.reset(),this._editor.layoutContentWidget(this)}};e.RenameInputField=v,e.RenameInputField=v=ke([ge(2,_.IThemeService),ge(3,S.IKeybindingService),ge(4,E.IContextKeyService)],v)}),define(se[869],oe([1,0,48,14,19,12,2,20,22,105,16,136,33,10,5,21,189,166,710,98,15,8,64,50,88,37,868,18]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w){\"use strict\";var D;Object.defineProperty(e,\"__esModule\",{value:!0}),e.RenameAction=e.rename=void 0;class I{constructor(R,x,O){this.model=R,this.position=x,this._providerRenameIdx=0,this._providers=O.ordered(R)}hasProvider(){return this._providers.length>0}async resolveRenameLocation(R){const x=[];for(this._providerRenameIdx=0;this._providerRenameIdx<this._providers.length;this._providerRenameIdx++){const B=this._providers[this._providerRenameIdx];if(!B.resolveRenameLocation)break;const W=await B.resolveRenameLocation(this.model,this.position,R);if(W){if(W.rejectReason){x.push(W.rejectReason);continue}return W}}this._providerRenameIdx=0;const O=this.model.getWordAtPosition(this.position);return O?{range:new t.Range(this.position.lineNumber,O.startColumn,this.position.lineNumber,O.endColumn),text:O.word,rejectReason:x.length>0?x.join(`\n`):void 0}:{range:t.Range.fromPositions(this.position),text:\"\",rejectReason:x.length>0?x.join(`\n`):void 0}}async provideRenameEdits(R,x){return this._provideRenameEdits(R,this._providerRenameIdx,[],x)}async _provideRenameEdits(R,x,O,B){const W=this._providers[x];if(!W)return{edits:[],rejectReason:O.join(`\n`)};const V=await W.provideRenameEdits(this.model,this.position,R,B);if(V){if(V.rejectReason)return this._provideRenameEdits(R,x+1,O.concat(V.rejectReason),B)}else return this._provideRenameEdits(R,x+1,O.concat(c.localize(0,null)),B);return V}}async function T(M,R,x,O){const B=new I(R,x,M),W=await B.resolveRenameLocation(y.CancellationToken.None);return W?.rejectReason?{edits:[],rejectReason:W.rejectReason}:B.provideRenameEdits(O,y.CancellationToken.None)}e.rename=T;let A=D=class{static get(R){return R.getContribution(D.ID)}constructor(R,x,O,B,W,V,K,F){this.editor=R,this._instaService=x,this._notificationService=O,this._bulkEditService=B,this._progressService=W,this._logService=V,this._configService=K,this._languageFeaturesService=F,this._disposableStore=new S.DisposableStore,this._cts=new y.CancellationTokenSource,this._renameInputField=this._disposableStore.add(this._instaService.createInstance(C.RenameInputField,this.editor,[\"acceptRenameInput\",\"acceptRenameInputWithPreview\"]))}dispose(){this._disposableStore.dispose(),this._cts.dispose(!0)}async run(){var R,x;if(this._cts.dispose(!0),this._cts=new y.CancellationTokenSource,!this.editor.hasModel())return;const O=this.editor.getPosition(),B=new I(this.editor.getModel(),O,this._languageFeaturesService.renameProvider);if(!B.hasProvider())return;const W=new v.EditorStateCancellationTokenSource(this.editor,5,void 0,this._cts.token);let V;try{const J=B.resolveRenameLocation(W.token);this._progressService.showWhile(J,250),V=await J}catch(J){(R=f.MessageController.get(this.editor))===null||R===void 0||R.showMessage(J||c.localize(1,null),O);return}finally{W.dispose()}if(!V)return;if(V.rejectReason){(x=f.MessageController.get(this.editor))===null||x===void 0||x.showMessage(V.rejectReason,O);return}if(W.token.isCancellationRequested)return;const K=new v.EditorStateCancellationTokenSource(this.editor,5,V.range,this._cts.token),F=this.editor.getSelection();let q=0,ie=V.text.length;!t.Range.isEmpty(F)&&!t.Range.spansMultipleLines(F)&&t.Range.containsRange(V.range,F)&&(q=Math.max(0,F.startColumn-V.range.startColumn),ie=Math.min(V.range.endColumn,F.endColumn)-V.range.startColumn);const ae=this._bulkEditService.hasPreviewHandler()&&this._configService.getValue(this.editor.getModel().uri,\"editor.rename.enablePreview\"),ne=await this._renameInputField.getInput(V.range,V.text,q,ie,ae,K.token);if(typeof ne==\"boolean\"){ne&&this.editor.focus(),K.dispose();return}this.editor.focus();const $=(0,k.raceCancellation)(B.provideRenameEdits(ne.newName,K.token),K.token).then(async J=>{if(!(!J||!this.editor.hasModel())){if(J.rejectReason){this._notificationService.info(J.rejectReason);return}this.editor.setSelection(t.Range.fromPositions(this.editor.getSelection().getPosition())),this._bulkEditService.apply(J,{editor:this.editor,showPreview:ne.wantsPreview,label:c.localize(2,null,V?.text,ne.newName),code:\"undoredo.rename\",quotableLabel:c.localize(3,null,V?.text,ne.newName),respectAutoSaveConfig:!0}).then(Q=>{Q.ariaSummary&&(0,L.alert)(c.localize(4,null,V.text,ne.newName,Q.ariaSummary))}).catch(Q=>{this._notificationService.error(c.localize(5,null)),this._logService.error(Q)})}},J=>{this._notificationService.error(c.localize(6,null)),this._logService.error(J)}).finally(()=>{K.dispose()});return this._progressService.showWhile($,250),$}acceptRenameInput(R){this._renameInputField.acceptInput(R)}cancelRenameInput(){this._renameInputField.cancelInput(!0)}};A.ID=\"editor.contrib.renameController\",A=D=ke([ge(1,l.IInstantiationService),ge(2,g.INotificationService),ge(3,a.IBulkEditService),ge(4,h.IEditorProgressService),ge(5,o.ILogService),ge(6,u.ITextResourceConfigurationService),ge(7,w.ILanguageFeaturesService)],A);class P extends b.EditorAction{constructor(){super({id:\"editor.action.rename\",label:c.localize(7,null),alias:\"Rename Symbol\",precondition:s.ContextKeyExpr.and(r.EditorContextKeys.writable,r.EditorContextKeys.hasRenameProvider),kbOpts:{kbExpr:r.EditorContextKeys.editorTextFocus,primary:60,weight:100},contextMenuOpts:{group:\"1_modification\",order:1.1}})}runCommand(R,x){const O=R.get(i.ICodeEditorService),[B,W]=Array.isArray(x)&&x||[void 0,void 0];return _.URI.isUri(B)&&n.Position.isIPosition(W)?O.openCodeEditor({resource:B},O.getActiveCodeEditor()).then(V=>{V&&(V.setPosition(W),V.invokeWithinContext(K=>(this.reportTelemetry(K,V),this.run(K,V))))},E.onUnexpectedError):super.runCommand(R,x)}run(R,x){const O=A.get(x);return O?O.run():Promise.resolve()}}e.RenameAction=P,(0,b.registerEditorContribution)(A.ID,A,4),(0,b.registerEditorAction)(P);const N=b.EditorCommand.bindToContribution(A.get);(0,b.registerEditorCommand)(new N({id:\"acceptRenameInput\",precondition:C.CONTEXT_RENAME_INPUT_VISIBLE,handler:M=>M.acceptRenameInput(!1),kbOpts:{weight:100+99,kbExpr:s.ContextKeyExpr.and(r.EditorContextKeys.focus,s.ContextKeyExpr.not(\"isComposing\")),primary:3}})),(0,b.registerEditorCommand)(new N({id:\"acceptRenameInputWithPreview\",precondition:s.ContextKeyExpr.and(C.CONTEXT_RENAME_INPUT_VISIBLE,s.ContextKeyExpr.has(\"config.editor.rename.enablePreview\")),handler:M=>M.acceptRenameInput(!0),kbOpts:{weight:100+99,kbExpr:s.ContextKeyExpr.and(r.EditorContextKeys.focus,s.ContextKeyExpr.not(\"isComposing\")),primary:1024+3}})),(0,b.registerEditorCommand)(new N({id:\"cancelRenameInput\",precondition:C.CONTEXT_RENAME_INPUT_VISIBLE,handler:M=>M.cancelRenameInput(),kbOpts:{weight:100+99,kbExpr:r.EditorContextKeys.focus,primary:9,secondary:[1033]}})),(0,b.registerModelAndPositionCommand)(\"_executeDocumentRenameProvider\",function(M,R,x,...O){const[B]=O;(0,p.assertType)(typeof B==\"string\");const{renameProvider:W}=M.get(w.ILanguageFeaturesService);return T(W,R,x,B)}),(0,b.registerModelAndPositionCommand)(\"_executePrepareRename\",async function(M,R,x){const{renameProvider:O}=M.get(w.ILanguageFeaturesService),W=await new I(R,x,O).resolveRenameLocation(y.CancellationToken.None);if(W?.rejectReason)throw new Error(W.rejectReason);return W}),m.Registry.as(d.Extensions.Configuration).registerConfiguration({id:\"editor\",properties:{\"editor.rename.enablePreview\":{scope:5,description:c.localize(8,null),default:!0,type:\"boolean\"}}})}),define(se[870],oe([1,0,2,12,51,27,14,19,23,256,344,79,61,18,238,131,308]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";var f;Object.defineProperty(e,\"__esModule\",{value:!0}),e.DocumentSemanticTokensFeature=void 0;let c=class extends L.Disposable{constructor(o,g,h,m,C,w){super(),this._watchers=Object.create(null);const D=A=>{this._watchers[A.uri.toString()]=new d(A,o,h,C,w)},I=(A,P)=>{P.dispose(),delete this._watchers[A.uri.toString()]},T=()=>{for(const A of g.getModels()){const P=this._watchers[A.uri.toString()];(0,u.isSemanticColoringEnabled)(A,h,m)?P||D(A):P&&I(A,P)}};g.getModels().forEach(A=>{(0,u.isSemanticColoringEnabled)(A,h,m)&&D(A)}),this._register(g.onModelAdded(A=>{(0,u.isSemanticColoringEnabled)(A,h,m)&&D(A)})),this._register(g.onModelRemoved(A=>{const P=this._watchers[A.uri.toString()];P&&I(A,P)})),this._register(m.onDidChangeConfiguration(A=>{A.affectsConfiguration(u.SEMANTIC_HIGHLIGHTING_SETTING_ID)&&T()})),this._register(h.onDidColorThemeChange(T))}dispose(){for(const o of Object.values(this._watchers))o.dispose();super.dispose()}};e.DocumentSemanticTokensFeature=c,e.DocumentSemanticTokensFeature=c=ke([ge(0,t.ISemanticTokensStylingService),ge(1,y.IModelService),ge(2,_.IThemeService),ge(3,E.IConfigurationService),ge(4,a.ILanguageFeatureDebounceService),ge(5,n.ILanguageFeaturesService)],c);let d=f=class extends L.Disposable{constructor(o,g,h,m,C){super(),this._semanticTokensStylingService=g,this._isDisposed=!1,this._model=o,this._provider=C.documentSemanticTokensProvider,this._debounceInformation=m.for(this._provider,\"DocumentSemanticTokens\",{min:f.REQUEST_MIN_DELAY,max:f.REQUEST_MAX_DELAY}),this._fetchDocumentSemanticTokens=this._register(new S.RunOnceScheduler(()=>this._fetchDocumentSemanticTokensNow(),f.REQUEST_MIN_DELAY)),this._currentDocumentResponse=null,this._currentDocumentRequestCancellationTokenSource=null,this._documentProvidersChangeListeners=[],this._providersChangedDuringRequest=!1,this._register(this._model.onDidChangeContent(()=>{this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))})),this._register(this._model.onDidChangeAttached(()=>{this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))})),this._register(this._model.onDidChangeLanguage(()=>{this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._currentDocumentRequestCancellationTokenSource&&(this._currentDocumentRequestCancellationTokenSource.cancel(),this._currentDocumentRequestCancellationTokenSource=null),this._setDocumentSemanticTokens(null,null,null,[]),this._fetchDocumentSemanticTokens.schedule(0)}));const w=()=>{(0,L.dispose)(this._documentProvidersChangeListeners),this._documentProvidersChangeListeners=[];for(const D of this._provider.all(o))typeof D.onDidChange==\"function\"&&this._documentProvidersChangeListeners.push(D.onDidChange(()=>{if(this._currentDocumentRequestCancellationTokenSource){this._providersChangedDuringRequest=!0;return}this._fetchDocumentSemanticTokens.schedule(0)}))};w(),this._register(this._provider.onDidChange(()=>{w(),this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))})),this._register(h.onDidColorThemeChange(D=>{this._setDocumentSemanticTokens(null,null,null,[]),this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))})),this._fetchDocumentSemanticTokens.schedule(0)}dispose(){this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._currentDocumentRequestCancellationTokenSource&&(this._currentDocumentRequestCancellationTokenSource.cancel(),this._currentDocumentRequestCancellationTokenSource=null),(0,L.dispose)(this._documentProvidersChangeListeners),this._documentProvidersChangeListeners=[],this._setDocumentSemanticTokens(null,null,null,[]),this._isDisposed=!0,super.dispose()}_fetchDocumentSemanticTokensNow(){if(this._currentDocumentRequestCancellationTokenSource)return;if(!(0,b.hasDocumentSemanticTokensProvider)(this._provider,this._model)){this._currentDocumentResponse&&this._model.tokenization.setSemanticTokens(null,!1);return}if(!this._model.isAttachedToEditor())return;const o=new p.CancellationTokenSource,g=this._currentDocumentResponse?this._currentDocumentResponse.provider:null,h=this._currentDocumentResponse&&this._currentDocumentResponse.resultId||null,m=(0,b.getDocumentSemanticTokens)(this._provider,this._model,g,h,o.token);this._currentDocumentRequestCancellationTokenSource=o,this._providersChangedDuringRequest=!1;const C=[],w=this._model.onDidChangeContent(I=>{C.push(I)}),D=new i.StopWatch(!1);m.then(I=>{if(this._debounceInformation.update(this._model,D.elapsed()),this._currentDocumentRequestCancellationTokenSource=null,w.dispose(),!I)this._setDocumentSemanticTokens(null,null,null,C);else{const{provider:T,tokens:A}=I,P=this._semanticTokensStylingService.getStyling(T);this._setDocumentSemanticTokens(T,A||null,P,C)}},I=>{I&&(k.isCancellationError(I)||typeof I.message==\"string\"&&I.message.indexOf(\"busy\")!==-1)||k.onUnexpectedError(I),this._currentDocumentRequestCancellationTokenSource=null,w.dispose(),(C.length>0||this._providersChangedDuringRequest)&&(this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model)))})}static _copy(o,g,h,m,C){C=Math.min(C,h.length-m,o.length-g);for(let w=0;w<C;w++)h[m+w]=o[g+w]}_setDocumentSemanticTokens(o,g,h,m){const C=this._currentDocumentResponse,w=()=>{(m.length>0||this._providersChangedDuringRequest)&&!this._fetchDocumentSemanticTokens.isScheduled()&&this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))};if(this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._isDisposed){o&&g&&o.releaseDocumentSemanticTokens(g.resultId);return}if(!o||!h){this._model.tokenization.setSemanticTokens(null,!1);return}if(!g){this._model.tokenization.setSemanticTokens(null,!0),w();return}if((0,b.isSemanticTokensEdits)(g)){if(!C){this._model.tokenization.setSemanticTokens(null,!0);return}if(g.edits.length===0)g={resultId:g.resultId,data:C.data};else{let D=0;for(const N of g.edits)D+=(N.data?N.data.length:0)-N.deleteCount;const I=C.data,T=new Uint32Array(I.length+D);let A=I.length,P=T.length;for(let N=g.edits.length-1;N>=0;N--){const M=g.edits[N];if(M.start>I.length){h.warnInvalidEditStart(C.resultId,g.resultId,N,M.start,I.length),this._model.tokenization.setSemanticTokens(null,!0);return}const R=A-(M.start+M.deleteCount);R>0&&(f._copy(I,A-R,T,P-R,R),P-=R),M.data&&(f._copy(M.data,0,T,P-M.data.length,M.data.length),P-=M.data.length),A=M.start}A>0&&f._copy(I,0,T,0,A),g={resultId:g.resultId,data:T}}}if((0,b.isSemanticTokens)(g)){this._currentDocumentResponse=new s(o,g.resultId,g.data);const D=(0,v.toMultilineTokens2)(g,h,this._model.getLanguageId());if(m.length>0)for(const I of m)for(const T of D)for(const A of I.changes)T.applyEdit(A.range,A.text);this._model.tokenization.setSemanticTokens(D,!0)}else this._model.tokenization.setSemanticTokens(null,!0);w()}};d.REQUEST_MIN_DELAY=300,d.REQUEST_MAX_DELAY=2e3,d=f=ke([ge(1,t.ISemanticTokensStylingService),ge(2,_.IThemeService),ge(3,a.ILanguageFeatureDebounceService),ge(4,n.ILanguageFeaturesService)],d);class s{constructor(o,g,h){this.provider=o,this.resultId=g,this.data=h}dispose(){this.provider.releaseDocumentSemanticTokens(this.resultId)}}(0,r.registerEditorFeature)(c)}),define(se[871],oe([1,0,14,2,16,344,308,256,27,23,79,61,18,238]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewportSemanticTokensContribution=void 0;let t=class extends k.Disposable{constructor(u,f,c,d,s,l){super(),this._semanticTokensStylingService=f,this._themeService=c,this._configurationService=d,this._editor=u,this._provider=l.documentRangeSemanticTokensProvider,this._debounceInformation=s.for(this._provider,\"DocumentRangeSemanticTokens\",{min:100,max:500}),this._tokenizeViewport=this._register(new L.RunOnceScheduler(()=>this._tokenizeViewportNow(),100)),this._outstandingRequests=[];const o=()=>{this._editor.hasModel()&&this._tokenizeViewport.schedule(this._debounceInformation.get(this._editor.getModel()))};this._register(this._editor.onDidScrollChange(()=>{o()})),this._register(this._editor.onDidChangeModel(()=>{this._cancelAll(),o()})),this._register(this._editor.onDidChangeModelContent(g=>{this._cancelAll(),o()})),this._register(this._provider.onDidChange(()=>{this._cancelAll(),o()})),this._register(this._configurationService.onDidChangeConfiguration(g=>{g.affectsConfiguration(S.SEMANTIC_HIGHLIGHTING_SETTING_ID)&&(this._cancelAll(),o())})),this._register(this._themeService.onDidColorThemeChange(()=>{this._cancelAll(),o()})),o()}_cancelAll(){for(const u of this._outstandingRequests)u.cancel();this._outstandingRequests=[]}_removeOutstandingRequest(u){for(let f=0,c=this._outstandingRequests.length;f<c;f++)if(this._outstandingRequests[f]===u){this._outstandingRequests.splice(f,1);return}}_tokenizeViewportNow(){if(!this._editor.hasModel())return;const u=this._editor.getModel();if(u.tokenization.hasCompleteSemanticTokens())return;if(!(0,S.isSemanticColoringEnabled)(u,this._themeService,this._configurationService)){u.tokenization.hasSomeSemanticTokens()&&u.tokenization.setSemanticTokens(null,!1);return}if(!(0,E.hasDocumentRangeSemanticTokensProvider)(this._provider,u)){u.tokenization.hasSomeSemanticTokens()&&u.tokenization.setSemanticTokens(null,!1);return}const f=this._editor.getVisibleRangesPlusViewportAboveBelow();this._outstandingRequests=this._outstandingRequests.concat(f.map(c=>this._requestRange(u,c)))}_requestRange(u,f){const c=u.getVersionId(),d=(0,L.createCancelablePromise)(l=>Promise.resolve((0,E.getDocumentRangeSemanticTokens)(this._provider,u,f,l))),s=new a.StopWatch(!1);return d.then(l=>{if(this._debounceInformation.update(u,s.elapsed()),!l||!l.tokens||u.isDisposed()||u.getVersionId()!==c)return;const{provider:o,tokens:g}=l,h=this._semanticTokensStylingService.getStyling(o);u.tokenization.setPartialSemanticTokens(f,(0,p.toMultilineTokens2)(g,h,u.getLanguageId()))}).then(()=>this._removeOutstandingRequest(d),()=>this._removeOutstandingRequest(d)),d}};e.ViewportSemanticTokensContribution=t,t.ID=\"editor.contrib.viewportSemanticTokens\",e.ViewportSemanticTokensContribution=t=ke([ge(1,n.ISemanticTokensStylingService),ge(2,v.IThemeService),ge(3,_.IConfigurationService),ge(4,b.ILanguageFeatureDebounceService),ge(5,i.ILanguageFeaturesService)],t),(0,y.registerEditorContribution)(t.ID,t,1)}),define(se[872],oe([1,0,7,230,26,28,6,71,2,22,31,792,51,43,720,341,82,23,355]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";var d;Object.defineProperty(e,\"__esModule\",{value:!0}),e.ItemRenderer=e.getAriaId=void 0;function s(m){return`suggest-aria-id:${m}`}e.getAriaId=s;const l=(0,u.registerIcon)(\"suggest-more-info\",y.Codicon.chevronRight,t.localize(0,null)),o=new(d=class{extract(C,w){if(C.textLabel.match(d._regexStrict))return w[0]=C.textLabel,!0;if(C.completion.detail&&C.completion.detail.match(d._regexStrict))return w[0]=C.completion.detail,!0;if(C.completion.documentation){const D=typeof C.completion.documentation==\"string\"?C.completion.documentation:C.completion.documentation.value,I=d._regexRelaxed.exec(D);if(I&&(I.index===0||I.index+I[0].length===D.length))return w[0]=I[0],!0}return!1}},d._regexRelaxed=/(#([\\da-fA-F]{3}){1,2}|(rgb|hsl)a\\(\\s*(\\d{1,3}%?\\s*,\\s*){3}(1|0?\\.\\d+)\\)|(rgb|hsl)\\(\\s*\\d{1,3}%?(\\s*,\\s*\\d{1,3}%?){2}\\s*\\))/,d._regexStrict=new RegExp(`^${d._regexRelaxed.source}$`,\"i\"),d);let g=class{constructor(C,w,D,I){this._editor=C,this._modelService=w,this._languageService=D,this._themeService=I,this._onDidToggleDetails=new S.Emitter,this.onDidToggleDetails=this._onDidToggleDetails.event,this.templateId=\"suggestion\"}dispose(){this._onDidToggleDetails.dispose()}renderTemplate(C){const w=new _.DisposableStore,D=C;D.classList.add(\"show-file-icons\");const I=(0,L.append)(C,(0,L.$)(\".icon\")),T=(0,L.append)(I,(0,L.$)(\"span.colorspan\")),A=(0,L.append)(C,(0,L.$)(\".contents\")),P=(0,L.append)(A,(0,L.$)(\".main\")),N=(0,L.append)(P,(0,L.$)(\".icon-label.codicon\")),M=(0,L.append)(P,(0,L.$)(\"span.left\")),R=(0,L.append)(P,(0,L.$)(\"span.right\")),x=new k.IconLabel(M,{supportHighlights:!0,supportIcons:!0});w.add(x);const O=(0,L.append)(M,(0,L.$)(\"span.signature-label\")),B=(0,L.append)(M,(0,L.$)(\"span.qualifier-label\")),W=(0,L.append)(R,(0,L.$)(\"span.details-label\")),V=(0,L.append)(R,(0,L.$)(\"span.readMore\"+E.ThemeIcon.asCSSSelector(l)));return V.title=t.localize(1,null),{root:D,left:M,right:R,icon:I,colorspan:T,iconLabel:x,iconContainer:N,parametersLabel:O,qualifierLabel:B,detailsLabel:W,readMore:V,disposables:w,configureFont:()=>{const F=this._editor.getOptions(),q=F.get(50),ie=q.getMassagedFontFamily(),ae=q.fontFeatureSettings,ne=F.get(118)||q.fontSize,$=F.get(119)||q.lineHeight,J=q.fontWeight,Q=q.letterSpacing,re=`${ne}px`,de=`${$}px`,he=`${Q}px`;D.style.fontSize=re,D.style.fontWeight=J,D.style.letterSpacing=he,P.style.fontFamily=ie,P.style.fontFeatureSettings=ae,P.style.lineHeight=de,I.style.height=de,I.style.width=de,V.style.height=de,V.style.width=de}}}renderElement(C,w,D){D.configureFont();const{completion:I}=C;D.root.id=s(w),D.colorspan.style.backgroundColor=\"\";const T={labelEscapeNewLines:!0,matches:(0,p.createMatches)(C.score)},A=[];if(I.kind===19&&o.extract(C,A))D.icon.className=\"icon customcolor\",D.iconContainer.className=\"icon hide\",D.colorspan.style.backgroundColor=A[0];else if(I.kind===20&&this._themeService.getFileIconTheme().hasFileIcons){D.icon.className=\"icon hide\",D.iconContainer.className=\"icon hide\";const P=(0,a.getIconClasses)(this._modelService,this._languageService,v.URI.from({scheme:\"fake\",path:C.textLabel}),r.FileKind.FILE),N=(0,a.getIconClasses)(this._modelService,this._languageService,v.URI.from({scheme:\"fake\",path:I.detail}),r.FileKind.FILE);T.extraClasses=P.length>N.length?P:N}else I.kind===23&&this._themeService.getFileIconTheme().hasFolderIcons?(D.icon.className=\"icon hide\",D.iconContainer.className=\"icon hide\",T.extraClasses=[(0,a.getIconClasses)(this._modelService,this._languageService,v.URI.from({scheme:\"fake\",path:C.textLabel}),r.FileKind.FOLDER),(0,a.getIconClasses)(this._modelService,this._languageService,v.URI.from({scheme:\"fake\",path:I.detail}),r.FileKind.FOLDER)].flat()):(D.icon.className=\"icon hide\",D.iconContainer.className=\"\",D.iconContainer.classList.add(\"suggest-icon\",...E.ThemeIcon.asClassNameArray(b.CompletionItemKinds.toIcon(I.kind))));I.tags&&I.tags.indexOf(1)>=0&&(T.extraClasses=(T.extraClasses||[]).concat([\"deprecated\"]),T.matches=[]),D.iconLabel.setLabel(C.textLabel,void 0,T),typeof I.label==\"string\"?(D.parametersLabel.textContent=\"\",D.detailsLabel.textContent=h(I.detail||\"\"),D.root.classList.add(\"string-label\")):(D.parametersLabel.textContent=h(I.label.detail||\"\"),D.detailsLabel.textContent=h(I.label.description||\"\"),D.root.classList.remove(\"string-label\")),this._editor.getOption(117).showInlineDetails?(0,L.show)(D.detailsLabel):(0,L.hide)(D.detailsLabel),(0,c.canExpandCompletionItem)(C)?(D.right.classList.add(\"can-expand-details\"),(0,L.show)(D.readMore),D.readMore.onmousedown=P=>{P.stopPropagation(),P.preventDefault()},D.readMore.onclick=P=>{P.stopPropagation(),P.preventDefault(),this._onDidToggleDetails.fire()}):(D.right.classList.remove(\"can-expand-details\"),(0,L.hide)(D.readMore),D.readMore.onmousedown=null,D.readMore.onclick=null)}disposeTemplate(C){C.disposables.dispose()}};e.ItemRenderer=g,e.ItemRenderer=g=ke([ge(1,i.IModelService),ge(2,n.ILanguageService),ge(3,f.IThemeService)],g);function h(m){return m.replace(/\\r\\n|\\r|\\n/g,\"\")}}),define(se[873],oe([1,0,866,37,139,33,96,6,16,21,70]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.GotoLineAction=e.StandaloneGotoLineQuickAccessProvider=void 0;let a=class extends L.AbstractGotoLineQuickAccessProvider{constructor(t){super(),this.editorService=t,this.onDidActiveTextEditorControlChange=p.Event.None}get activeTextEditorControl(){var t;return(t=this.editorService.getFocusedCodeEditor())!==null&&t!==void 0?t:void 0}};e.StandaloneGotoLineQuickAccessProvider=a,e.StandaloneGotoLineQuickAccessProvider=a=ke([ge(0,E.ICodeEditorService)],a);class i extends _.EditorAction{constructor(){super({id:i.ID,label:S.GoToLineNLS.gotoLineActionLabel,alias:\"Go to Line/Column...\",precondition:void 0,kbOpts:{kbExpr:v.EditorContextKeys.focus,primary:2085,mac:{primary:293},weight:100}})}run(t){t.get(b.IQuickInputService).quickAccess.show(a.PREFIX)}}e.GotoLineAction=i,i.ID=\"editor.action.gotoLine\",(0,_.registerEditorAction)(i),k.Registry.as(y.Extensions.Quickaccess).registerQuickAccessProvider({ctor:a,prefix:a.PREFIX,helpEntries:[{description:S.GoToLineNLS.gotoLineActionLabel,commandId:i.ID}]})}),define(se[874],oe([1,0,867,37,139,33,96,6,16,21,70,165,18,177,254]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.GotoSymbolAction=e.StandaloneGotoSymbolQuickAccessProvider=void 0;let n=class extends L.AbstractGotoSymbolQuickAccessProvider{constructor(u,f,c){super(f,c),this.editorService=u,this.onDidActiveTextEditorControlChange=p.Event.None}get activeTextEditorControl(){var u;return(u=this.editorService.getFocusedCodeEditor())!==null&&u!==void 0?u:void 0}};e.StandaloneGotoSymbolQuickAccessProvider=n,e.StandaloneGotoSymbolQuickAccessProvider=n=ke([ge(0,E.ICodeEditorService),ge(1,i.ILanguageFeaturesService),ge(2,a.IOutlineModelService)],n);class t extends _.EditorAction{constructor(){super({id:t.ID,label:S.QuickOutlineNLS.quickOutlineActionLabel,alias:\"Go to Symbol...\",precondition:v.EditorContextKeys.hasDocumentSymbolProvider,kbOpts:{kbExpr:v.EditorContextKeys.focus,primary:3117,weight:100},contextMenuOpts:{group:\"navigation\",order:3}})}run(u){u.get(b.IQuickInputService).quickAccess.show(L.AbstractGotoSymbolQuickAccessProvider.PREFIX,{itemActivation:b.ItemActivation.NONE})}}e.GotoSymbolAction=t,t.ID=\"editor.action.quickOutline\",(0,_.registerEditorAction)(t),k.Registry.as(y.Extensions.Quickaccess).registerQuickAccessProvider({ctor:n,prefix:L.AbstractGotoSymbolQuickAccessProvider.PREFIX,helpEntries:[{description:S.QuickOutlineNLS.quickOutlineActionLabel,prefix:L.AbstractGotoSymbolQuickAccessProvider.PREFIX,commandId:t.ID},{description:S.QuickOutlineNLS.quickOutlineByCategoryActionLabel,prefix:L.AbstractGotoSymbolQuickAccessProvider.PREFIX_BY_CATEGORY}]})}),define(se[371],oe([1,0,7,47,851,33,15,45,23]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StandaloneCodeEditorService=void 0;let v=class extends y.AbstractCodeEditorService{constructor(a,i){super(i),this._register(this.onCodeEditorAdd(()=>this._checkContextKey())),this._register(this.onCodeEditorRemove(()=>this._checkContextKey())),this._editorIsOpen=a.createKey(\"editorIsOpen\",!1),this._activeCodeEditor=null,this._register(this.registerCodeEditorOpenHandler(async(n,t,r)=>t?this.doOpenEditor(t,n):null))}_checkContextKey(){let a=!1;for(const i of this.listCodeEditors())if(!i.isSimpleWidget){a=!0;break}this._editorIsOpen.set(a)}setActiveCodeEditor(a){this._activeCodeEditor=a}getActiveCodeEditor(){return this._activeCodeEditor}doOpenEditor(a,i){if(!this.findModel(a,i.resource)){if(i.resource){const r=i.resource.scheme;if(r===k.Schemas.http||r===k.Schemas.https)return(0,L.windowOpenNoOpener)(i.resource.toString()),a}return null}const t=i.options?i.options.selection:null;if(t)if(typeof t.endLineNumber==\"number\"&&typeof t.endColumn==\"number\")a.setSelection(t),a.revealRangeInCenter(t,1);else{const r={lineNumber:t.startLineNumber,column:t.startColumn};a.setPosition(r),a.revealPositionInCenter(r,1)}return a}findModel(a,i){const n=a.getModel();return n&&n.uri.toString()!==i.toString()?null:n}};e.StandaloneCodeEditorService=v,e.StandaloneCodeEditorService=v=ke([ge(0,S.IContextKeyService),ge(1,_.IThemeService)],v),(0,p.registerSingleton)(E.ICodeEditorService,v,0)}),define(se[875],oe([1,0,83,29]),function(te,e,L,k){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.hc_light=e.hc_black=e.vs_dark=e.vs=void 0,e.vs={base:\"vs\",inherit:!1,rules:[{token:\"\",foreground:\"000000\",background:\"fffffe\"},{token:\"invalid\",foreground:\"cd3131\"},{token:\"emphasis\",fontStyle:\"italic\"},{token:\"strong\",fontStyle:\"bold\"},{token:\"variable\",foreground:\"001188\"},{token:\"variable.predefined\",foreground:\"4864AA\"},{token:\"constant\",foreground:\"dd0000\"},{token:\"comment\",foreground:\"008000\"},{token:\"number\",foreground:\"098658\"},{token:\"number.hex\",foreground:\"3030c0\"},{token:\"regexp\",foreground:\"800000\"},{token:\"annotation\",foreground:\"808080\"},{token:\"type\",foreground:\"008080\"},{token:\"delimiter\",foreground:\"000000\"},{token:\"delimiter.html\",foreground:\"383838\"},{token:\"delimiter.xml\",foreground:\"0000FF\"},{token:\"tag\",foreground:\"800000\"},{token:\"tag.id.pug\",foreground:\"4F76AC\"},{token:\"tag.class.pug\",foreground:\"4F76AC\"},{token:\"meta.scss\",foreground:\"800000\"},{token:\"metatag\",foreground:\"e00000\"},{token:\"metatag.content.html\",foreground:\"FF0000\"},{token:\"metatag.html\",foreground:\"808080\"},{token:\"metatag.xml\",foreground:\"808080\"},{token:\"metatag.php\",fontStyle:\"bold\"},{token:\"key\",foreground:\"863B00\"},{token:\"string.key.json\",foreground:\"A31515\"},{token:\"string.value.json\",foreground:\"0451A5\"},{token:\"attribute.name\",foreground:\"FF0000\"},{token:\"attribute.value\",foreground:\"0451A5\"},{token:\"attribute.value.number\",foreground:\"098658\"},{token:\"attribute.value.unit\",foreground:\"098658\"},{token:\"attribute.value.html\",foreground:\"0000FF\"},{token:\"attribute.value.xml\",foreground:\"0000FF\"},{token:\"string\",foreground:\"A31515\"},{token:\"string.html\",foreground:\"0000FF\"},{token:\"string.sql\",foreground:\"FF0000\"},{token:\"string.yaml\",foreground:\"0451A5\"},{token:\"keyword\",foreground:\"0000FF\"},{token:\"keyword.json\",foreground:\"0451A5\"},{token:\"keyword.flow\",foreground:\"AF00DB\"},{token:\"keyword.flow.scss\",foreground:\"0000FF\"},{token:\"operator.scss\",foreground:\"666666\"},{token:\"operator.sql\",foreground:\"778899\"},{token:\"operator.swift\",foreground:\"666666\"},{token:\"predefined.sql\",foreground:\"C700C7\"}],colors:{[k.editorBackground]:\"#FFFFFE\",[k.editorForeground]:\"#000000\",[k.editorInactiveSelection]:\"#E5EBF1\",[L.editorIndentGuide1]:\"#D3D3D3\",[L.editorActiveIndentGuide1]:\"#939393\",[k.editorSelectionHighlight]:\"#ADD6FF4D\"}},e.vs_dark={base:\"vs-dark\",inherit:!1,rules:[{token:\"\",foreground:\"D4D4D4\",background:\"1E1E1E\"},{token:\"invalid\",foreground:\"f44747\"},{token:\"emphasis\",fontStyle:\"italic\"},{token:\"strong\",fontStyle:\"bold\"},{token:\"variable\",foreground:\"74B0DF\"},{token:\"variable.predefined\",foreground:\"4864AA\"},{token:\"variable.parameter\",foreground:\"9CDCFE\"},{token:\"constant\",foreground:\"569CD6\"},{token:\"comment\",foreground:\"608B4E\"},{token:\"number\",foreground:\"B5CEA8\"},{token:\"number.hex\",foreground:\"5BB498\"},{token:\"regexp\",foreground:\"B46695\"},{token:\"annotation\",foreground:\"cc6666\"},{token:\"type\",foreground:\"3DC9B0\"},{token:\"delimiter\",foreground:\"DCDCDC\"},{token:\"delimiter.html\",foreground:\"808080\"},{token:\"delimiter.xml\",foreground:\"808080\"},{token:\"tag\",foreground:\"569CD6\"},{token:\"tag.id.pug\",foreground:\"4F76AC\"},{token:\"tag.class.pug\",foreground:\"4F76AC\"},{token:\"meta.scss\",foreground:\"A79873\"},{token:\"meta.tag\",foreground:\"CE9178\"},{token:\"metatag\",foreground:\"DD6A6F\"},{token:\"metatag.content.html\",foreground:\"9CDCFE\"},{token:\"metatag.html\",foreground:\"569CD6\"},{token:\"metatag.xml\",foreground:\"569CD6\"},{token:\"metatag.php\",fontStyle:\"bold\"},{token:\"key\",foreground:\"9CDCFE\"},{token:\"string.key.json\",foreground:\"9CDCFE\"},{token:\"string.value.json\",foreground:\"CE9178\"},{token:\"attribute.name\",foreground:\"9CDCFE\"},{token:\"attribute.value\",foreground:\"CE9178\"},{token:\"attribute.value.number.css\",foreground:\"B5CEA8\"},{token:\"attribute.value.unit.css\",foreground:\"B5CEA8\"},{token:\"attribute.value.hex.css\",foreground:\"D4D4D4\"},{token:\"string\",foreground:\"CE9178\"},{token:\"string.sql\",foreground:\"FF0000\"},{token:\"keyword\",foreground:\"569CD6\"},{token:\"keyword.flow\",foreground:\"C586C0\"},{token:\"keyword.json\",foreground:\"CE9178\"},{token:\"keyword.flow.scss\",foreground:\"569CD6\"},{token:\"operator.scss\",foreground:\"909090\"},{token:\"operator.sql\",foreground:\"778899\"},{token:\"operator.swift\",foreground:\"909090\"},{token:\"predefined.sql\",foreground:\"FF00FF\"}],colors:{[k.editorBackground]:\"#1E1E1E\",[k.editorForeground]:\"#D4D4D4\",[k.editorInactiveSelection]:\"#3A3D41\",[L.editorIndentGuide1]:\"#404040\",[L.editorActiveIndentGuide1]:\"#707070\",[k.editorSelectionHighlight]:\"#ADD6FF26\"}},e.hc_black={base:\"hc-black\",inherit:!1,rules:[{token:\"\",foreground:\"FFFFFF\",background:\"000000\"},{token:\"invalid\",foreground:\"f44747\"},{token:\"emphasis\",fontStyle:\"italic\"},{token:\"strong\",fontStyle:\"bold\"},{token:\"variable\",foreground:\"1AEBFF\"},{token:\"variable.parameter\",foreground:\"9CDCFE\"},{token:\"constant\",foreground:\"569CD6\"},{token:\"comment\",foreground:\"608B4E\"},{token:\"number\",foreground:\"FFFFFF\"},{token:\"regexp\",foreground:\"C0C0C0\"},{token:\"annotation\",foreground:\"569CD6\"},{token:\"type\",foreground:\"3DC9B0\"},{token:\"delimiter\",foreground:\"FFFF00\"},{token:\"delimiter.html\",foreground:\"FFFF00\"},{token:\"tag\",foreground:\"569CD6\"},{token:\"tag.id.pug\",foreground:\"4F76AC\"},{token:\"tag.class.pug\",foreground:\"4F76AC\"},{token:\"meta\",foreground:\"D4D4D4\"},{token:\"meta.tag\",foreground:\"CE9178\"},{token:\"metatag\",foreground:\"569CD6\"},{token:\"metatag.content.html\",foreground:\"1AEBFF\"},{token:\"metatag.html\",foreground:\"569CD6\"},{token:\"metatag.xml\",foreground:\"569CD6\"},{token:\"metatag.php\",fontStyle:\"bold\"},{token:\"key\",foreground:\"9CDCFE\"},{token:\"string.key\",foreground:\"9CDCFE\"},{token:\"string.value\",foreground:\"CE9178\"},{token:\"attribute.name\",foreground:\"569CD6\"},{token:\"attribute.value\",foreground:\"3FF23F\"},{token:\"string\",foreground:\"CE9178\"},{token:\"string.sql\",foreground:\"FF0000\"},{token:\"keyword\",foreground:\"569CD6\"},{token:\"keyword.flow\",foreground:\"C586C0\"},{token:\"operator.sql\",foreground:\"778899\"},{token:\"operator.swift\",foreground:\"909090\"},{token:\"predefined.sql\",foreground:\"FF00FF\"}],colors:{[k.editorBackground]:\"#000000\",[k.editorForeground]:\"#FFFFFF\",[L.editorIndentGuide1]:\"#FFFFFF\",[L.editorActiveIndentGuide1]:\"#FFFFFF\"}},e.hc_light={base:\"hc-light\",inherit:!1,rules:[{token:\"\",foreground:\"292929\",background:\"FFFFFF\"},{token:\"invalid\",foreground:\"B5200D\"},{token:\"emphasis\",fontStyle:\"italic\"},{token:\"strong\",fontStyle:\"bold\"},{token:\"variable\",foreground:\"264F70\"},{token:\"variable.predefined\",foreground:\"4864AA\"},{token:\"constant\",foreground:\"dd0000\"},{token:\"comment\",foreground:\"008000\"},{token:\"number\",foreground:\"098658\"},{token:\"number.hex\",foreground:\"3030c0\"},{token:\"regexp\",foreground:\"800000\"},{token:\"annotation\",foreground:\"808080\"},{token:\"type\",foreground:\"008080\"},{token:\"delimiter\",foreground:\"000000\"},{token:\"delimiter.html\",foreground:\"383838\"},{token:\"tag\",foreground:\"800000\"},{token:\"tag.id.pug\",foreground:\"4F76AC\"},{token:\"tag.class.pug\",foreground:\"4F76AC\"},{token:\"meta.scss\",foreground:\"800000\"},{token:\"metatag\",foreground:\"e00000\"},{token:\"metatag.content.html\",foreground:\"B5200D\"},{token:\"metatag.html\",foreground:\"808080\"},{token:\"metatag.xml\",foreground:\"808080\"},{token:\"metatag.php\",fontStyle:\"bold\"},{token:\"key\",foreground:\"863B00\"},{token:\"string.key.json\",foreground:\"A31515\"},{token:\"string.value.json\",foreground:\"0451A5\"},{token:\"attribute.name\",foreground:\"264F78\"},{token:\"attribute.value\",foreground:\"0451A5\"},{token:\"string\",foreground:\"A31515\"},{token:\"string.sql\",foreground:\"B5200D\"},{token:\"keyword\",foreground:\"0000FF\"},{token:\"keyword.flow\",foreground:\"AF00DB\"},{token:\"operator.sql\",foreground:\"778899\"},{token:\"operator.swift\",foreground:\"666666\"},{token:\"predefined.sql\",foreground:\"C700C7\"}],colors:{[k.editorBackground]:\"#FFFFFF\",[k.editorForeground]:\"#292929\",[L.editorIndentGuide1]:\"#292929\",[L.editorActiveIndentGuide1]:\"#292929\"}}}),define(se[372],oe([1,0,7,54,39,6,31,132,519,875,37,29,23,2,89,846,44]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StandaloneThemeService=e.HC_LIGHT_THEME_NAME=e.HC_BLACK_THEME_NAME=e.VS_DARK_THEME_NAME=e.VS_LIGHT_THEME_NAME=void 0,e.VS_LIGHT_THEME_NAME=\"vs\",e.VS_DARK_THEME_NAME=\"vs-dark\",e.HC_BLACK_THEME_NAME=\"hc-black\",e.HC_LIGHT_THEME_NAME=\"hc-light\";const f=b.Registry.as(a.Extensions.ColorContribution),c=b.Registry.as(i.Extensions.ThemingContribution);class d{constructor(m,C){this.semanticHighlighting=!1,this.themeData=C;const w=C.base;m.length>0?(s(m)?this.id=m:this.id=w+\" \"+m,this.themeName=m):(this.id=w,this.themeName=w),this.colors=null,this.defaultColors=Object.create(null),this._tokenTheme=null}get base(){return this.themeData.base}notifyBaseUpdated(){this.themeData.inherit&&(this.colors=null,this._tokenTheme=null)}getColors(){if(!this.colors){const m=new Map;for(const C in this.themeData.colors)m.set(C,y.Color.fromHex(this.themeData.colors[C]));if(this.themeData.inherit){const C=l(this.themeData.base);for(const w in C.colors)m.has(w)||m.set(w,y.Color.fromHex(C.colors[w]))}this.colors=m}return this.colors}getColor(m,C){const w=this.getColors().get(m);if(w)return w;if(C!==!1)return this.getDefault(m)}getDefault(m){let C=this.defaultColors[m];return C||(C=f.resolveDefaultColor(m,this),this.defaultColors[m]=C,C)}defines(m){return this.getColors().has(m)}get type(){switch(this.base){case e.VS_LIGHT_THEME_NAME:return t.ColorScheme.LIGHT;case e.HC_BLACK_THEME_NAME:return t.ColorScheme.HIGH_CONTRAST_DARK;case e.HC_LIGHT_THEME_NAME:return t.ColorScheme.HIGH_CONTRAST_LIGHT;default:return t.ColorScheme.DARK}}get tokenTheme(){if(!this._tokenTheme){let m=[],C=[];if(this.themeData.inherit){const I=l(this.themeData.base);m=I.rules,I.encodedTokensColors&&(C=I.encodedTokensColors)}const w=this.themeData.colors[\"editor.foreground\"],D=this.themeData.colors[\"editor.background\"];if(w||D){const I={token:\"\"};w&&(I.foreground=w),D&&(I.background=D),m.push(I)}m=m.concat(this.themeData.rules),this.themeData.encodedTokensColors&&(C=this.themeData.encodedTokensColors),this._tokenTheme=_.TokenTheme.createFromRawTokenTheme(m,C)}return this._tokenTheme}getTokenStyleMetadata(m,C,w){const I=this.tokenTheme._match([m].concat(C).join(\".\")).metadata,T=p.TokenMetadata.getForeground(I),A=p.TokenMetadata.getFontStyle(I);return{foreground:T,italic:!!(A&1),bold:!!(A&2),underline:!!(A&4),strikethrough:!!(A&8)}}}function s(h){return h===e.VS_LIGHT_THEME_NAME||h===e.VS_DARK_THEME_NAME||h===e.HC_BLACK_THEME_NAME||h===e.HC_LIGHT_THEME_NAME}function l(h){switch(h){case e.VS_LIGHT_THEME_NAME:return v.vs;case e.VS_DARK_THEME_NAME:return v.vs_dark;case e.HC_BLACK_THEME_NAME:return v.hc_black;case e.HC_LIGHT_THEME_NAME:return v.hc_light}}function o(h){const m=l(h);return new d(h,m)}class g extends n.Disposable{constructor(){super(),this._onColorThemeChange=this._register(new E.Emitter),this.onDidColorThemeChange=this._onColorThemeChange.event,this._onProductIconThemeChange=this._register(new E.Emitter),this.onDidProductIconThemeChange=this._onProductIconThemeChange.event,this._environment=Object.create(null),this._builtInProductIconTheme=new r.UnthemedProductIconTheme,this._autoDetectHighContrast=!0,this._knownThemes=new Map,this._knownThemes.set(e.VS_LIGHT_THEME_NAME,o(e.VS_LIGHT_THEME_NAME)),this._knownThemes.set(e.VS_DARK_THEME_NAME,o(e.VS_DARK_THEME_NAME)),this._knownThemes.set(e.HC_BLACK_THEME_NAME,o(e.HC_BLACK_THEME_NAME)),this._knownThemes.set(e.HC_LIGHT_THEME_NAME,o(e.HC_LIGHT_THEME_NAME));const m=this._register((0,r.getIconsStyleSheet)(this));this._codiconCSS=m.getCSS(),this._themeCSS=\"\",this._allCSS=`${this._codiconCSS}\n${this._themeCSS}`,this._globalStyleElement=null,this._styleElements=[],this._colorMapOverride=null,this.setTheme(e.VS_LIGHT_THEME_NAME),this._onOSSchemeChanged(),this._register(m.onDidChange(()=>{this._codiconCSS=m.getCSS(),this._updateCSS()})),(0,k.addMatchMediaChangeListener)(u.mainWindow,\"(forced-colors: active)\",()=>{this._onOSSchemeChanged()})}registerEditorContainer(m){return L.isInShadowDOM(m)?this._registerShadowDomContainer(m):this._registerRegularEditorContainer()}_registerRegularEditorContainer(){return this._globalStyleElement||(this._globalStyleElement=L.createStyleSheet(void 0,m=>{m.className=\"monaco-colors\",m.textContent=this._allCSS}),this._styleElements.push(this._globalStyleElement)),n.Disposable.None}_registerShadowDomContainer(m){const C=L.createStyleSheet(m,w=>{w.className=\"monaco-colors\",w.textContent=this._allCSS});return this._styleElements.push(C),{dispose:()=>{for(let w=0;w<this._styleElements.length;w++)if(this._styleElements[w]===C){this._styleElements.splice(w,1);return}}}}defineTheme(m,C){if(!/^[a-z0-9\\-]+$/i.test(m))throw new Error(\"Illegal theme name!\");if(!s(C.base)&&!s(m))throw new Error(\"Illegal theme base!\");this._knownThemes.set(m,new d(m,C)),s(m)&&this._knownThemes.forEach(w=>{w.base===m&&w.notifyBaseUpdated()}),this._theme.themeName===m&&this.setTheme(m)}getColorTheme(){return this._theme}setColorMapOverride(m){this._colorMapOverride=m,this._updateThemeOrColorMap()}setTheme(m){let C;this._knownThemes.has(m)?C=this._knownThemes.get(m):C=this._knownThemes.get(e.VS_LIGHT_THEME_NAME),this._updateActualTheme(C)}_updateActualTheme(m){!m||this._theme===m||(this._theme=m,this._updateThemeOrColorMap())}_onOSSchemeChanged(){if(this._autoDetectHighContrast){const m=u.mainWindow.matchMedia(\"(forced-colors: active)\").matches;if(m!==(0,t.isHighContrast)(this._theme.type)){let C;(0,t.isDark)(this._theme.type)?C=m?e.HC_BLACK_THEME_NAME:e.VS_DARK_THEME_NAME:C=m?e.HC_LIGHT_THEME_NAME:e.VS_LIGHT_THEME_NAME,this._updateActualTheme(this._knownThemes.get(C))}}}setAutoDetectHighContrast(m){this._autoDetectHighContrast=m,this._onOSSchemeChanged()}_updateThemeOrColorMap(){const m=[],C={},w={addRule:T=>{C[T]||(m.push(T),C[T]=!0)}};c.getThemingParticipants().forEach(T=>T(this._theme,w,this._environment));const D=[];for(const T of f.getColors()){const A=this._theme.getColor(T.id,!0);A&&D.push(`${(0,a.asCssVariableName)(T.id)}: ${A.toString()};`)}w.addRule(`.monaco-editor, .monaco-diff-editor, .monaco-component { ${D.join(`\n`)} }`);const I=this._colorMapOverride||this._theme.tokenTheme.getColorMap();w.addRule((0,_.generateTokensCSSForColorMap)(I)),this._themeCSS=m.join(`\n`),this._updateCSS(),S.TokenizationRegistry.setColorMap(I),this._onColorThemeChange.fire(this._theme)}_updateCSS(){this._allCSS=`${this._codiconCSS}\n${this._themeCSS}`,this._styleElements.forEach(m=>m.textContent=this._allCSS)}getFileIconTheme(){return{hasFileIcons:!1,hasFolderIcons:!1,hidesExplorerArrows:!1}}getProductIconTheme(){return this._builtInProductIconTheme}}e.StandaloneThemeService=g}),define(se[876],oe([1,0,16,137,96,89,372]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});class p extends L.EditorAction{constructor(){super({id:\"editor.action.toggleHighContrast\",label:y.ToggleHighContrastNLS.toggleHighContrast,alias:\"Toggle High Contrast Theme\",precondition:void 0}),this._originalThemeName=null}run(v,b){const a=v.get(k.IStandaloneThemeService),i=a.getColorTheme();(0,E.isHighContrast)(i.type)?(a.setTheme(this._originalThemeName||((0,E.isDark)(i.type)?S.VS_DARK_THEME_NAME:S.VS_LIGHT_THEME_NAME)),this._originalThemeName=null):(a.setTheme((0,E.isDark)(i.type)?S.HC_BLACK_THEME_NAME:S.HC_LIGHT_THEME_NAME),this._originalThemeName=i.themeName)}}(0,L.registerEditorAction)(p)}),define(se[141],oe([1,0,7,46,135,325,42,218,2,17,733,30,756,15,59,8,34,50,92,23,28,89,20,29,106,69,488]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createActionViewItem=e.DropdownWithDefaultActionViewItem=e.SubmenuEntryActionViewItem=e.MenuEntryActionViewItem=e.createAndFillInActionBarActions=e.createAndFillInContextMenuActions=void 0;function C(M,R,x,O){const B=M.getActions(R),W=L.ModifierKeyEmitter.getInstance(),V=W.keyStatus.altKey||(v.isWindows||v.isLinux)&&W.keyStatus.shiftKey;D(B,x,V,O?K=>K===O:K=>K===\"navigation\")}e.createAndFillInContextMenuActions=C;function w(M,R,x,O,B,W){const V=M.getActions(R);D(V,x,!1,typeof O==\"string\"?F=>F===O:O,B,W)}e.createAndFillInActionBarActions=w;function D(M,R,x,O=V=>V===\"navigation\",B=()=>!1,W=!1){let V,K;Array.isArray(R)?(V=R,K=R):(V=R.primary,K=R.secondary);const F=new Set;for(const[q,ie]of M){let ae;O(q)?(ae=V,ae.length>0&&W&&ae.push(new S.Separator)):(ae=K,ae.length>0&&ae.push(new S.Separator));for(let ne of ie){x&&(ne=ne instanceof a.MenuItemAction&&ne.alt?ne.alt:ne);const $=ae.push(ne);ne instanceof S.SubmenuAction&&F.add({group:q,action:ne,index:$-1})}}for(const{group:q,action:ie,index:ae}of F){const ne=O(q)?V:K,$=ie.actions;B(ie,q,ne.length)&&ne.splice(ae,1,...$)}}let I=class extends y.ActionViewItem{constructor(R,x,O,B,W,V,K,F){super(void 0,R,{icon:!!(R.class||R.item.icon),label:!R.class&&!R.item.icon,draggable:x?.draggable,keybinding:x?.keybinding,hoverDelegate:x?.hoverDelegate}),this._keybindingService=O,this._notificationService=B,this._contextKeyService=W,this._themeService=V,this._contextMenuService=K,this._accessibilityService=F,this._wantsAltCommand=!1,this._itemClassDispose=this._register(new _.MutableDisposable),this._altKey=L.ModifierKeyEmitter.getInstance()}get _menuItemAction(){return this._action}get _commandAction(){return this._wantsAltCommand&&this._menuItemAction.alt||this._menuItemAction}async onClick(R){R.preventDefault(),R.stopPropagation();try{await this.actionRunner.run(this._commandAction,this._context)}catch(x){this._notificationService.error(x)}}render(R){if(super.render(R),R.classList.add(\"menu-entry\"),this.options.icon&&this._updateItemClass(this._menuItemAction.item),this._menuItemAction.alt){let x=!1;const O=()=>{var B;const W=!!(!((B=this._menuItemAction.alt)===null||B===void 0)&&B.enabled)&&(!this._accessibilityService.isMotionReduced()||x)&&(this._altKey.keyStatus.altKey||this._altKey.keyStatus.shiftKey&&x);W!==this._wantsAltCommand&&(this._wantsAltCommand=W,this.updateLabel(),this.updateTooltip(),this.updateClass())};this._register(this._altKey.event(O)),this._register((0,L.addDisposableListener)(R,\"mouseleave\",B=>{x=!1,O()})),this._register((0,L.addDisposableListener)(R,\"mouseenter\",B=>{x=!0,O()})),O()}}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this._commandAction.label)}getTooltip(){var R;const x=this._keybindingService.lookupKeybinding(this._commandAction.id,this._contextKeyService),O=x&&x.getLabel(),B=this._commandAction.tooltip||this._commandAction.label;let W=O?(0,b.localize)(0,null,B,O):B;if(!this._wantsAltCommand&&(!((R=this._menuItemAction.alt)===null||R===void 0)&&R.enabled)){const V=this._menuItemAction.alt.tooltip||this._menuItemAction.alt.label,K=this._keybindingService.lookupKeybinding(this._menuItemAction.alt.id,this._contextKeyService),F=K&&K.getLabel(),q=F?(0,b.localize)(1,null,V,F):V;W=(0,b.localize)(2,null,W,p.UILabelProvider.modifierLabels[v.OS].altKey,q)}return W}updateClass(){this.options.icon&&(this._commandAction!==this._menuItemAction?this._menuItemAction.alt&&this._updateItemClass(this._menuItemAction.alt.item):this._updateItemClass(this._menuItemAction.item))}_updateItemClass(R){this._itemClassDispose.value=void 0;const{element:x,label:O}=this;if(!x||!O)return;const B=this._commandAction.checked&&(0,i.isICommandActionToggleInfo)(R.toggled)&&R.toggled.icon?R.toggled.icon:R.icon;if(B)if(s.ThemeIcon.isThemeIcon(B)){const W=s.ThemeIcon.asClassNameArray(B);O.classList.add(...W),this._itemClassDispose.value=(0,_.toDisposable)(()=>{O.classList.remove(...W)})}else O.style.backgroundImage=(0,l.isDark)(this._themeService.getColorTheme().type)?(0,L.asCSSUrl)(B.dark):(0,L.asCSSUrl)(B.light),O.classList.add(\"icon\"),this._itemClassDispose.value=(0,_.combinedDisposable)((0,_.toDisposable)(()=>{O.style.backgroundImage=\"\",O.classList.remove(\"icon\")}),this._themeService.onDidColorThemeChange(()=>{this.updateClass()}))}};e.MenuEntryActionViewItem=I,e.MenuEntryActionViewItem=I=ke([ge(2,u.IKeybindingService),ge(3,f.INotificationService),ge(4,n.IContextKeyService),ge(5,d.IThemeService),ge(6,t.IContextMenuService),ge(7,m.IAccessibilityService)],I);let T=class extends E.DropdownMenuActionViewItem{constructor(R,x,O,B,W){var V,K,F;const q={...x,menuAsChild:(V=x?.menuAsChild)!==null&&V!==void 0?V:!1,classNames:(K=x?.classNames)!==null&&K!==void 0?K:s.ThemeIcon.isThemeIcon(R.item.icon)?s.ThemeIcon.asClassName(R.item.icon):void 0,keybindingProvider:(F=x?.keybindingProvider)!==null&&F!==void 0?F:ie=>O.lookupKeybinding(ie.id)};super(R,{getActions:()=>R.actions},B,q),this._keybindingService=O,this._contextMenuService=B,this._themeService=W}render(R){super.render(R),(0,o.assertType)(this.element),R.classList.add(\"menu-entry\");const x=this._action,{icon:O}=x.item;if(O&&!s.ThemeIcon.isThemeIcon(O)){this.element.classList.add(\"icon\");const B=()=>{this.element&&(this.element.style.backgroundImage=(0,l.isDark)(this._themeService.getColorTheme().type)?(0,L.asCSSUrl)(O.dark):(0,L.asCSSUrl)(O.light))};B(),this._register(this._themeService.onDidColorThemeChange(()=>{B()}))}}};e.SubmenuEntryActionViewItem=T,e.SubmenuEntryActionViewItem=T=ke([ge(2,u.IKeybindingService),ge(3,t.IContextMenuService),ge(4,d.IThemeService)],T);let A=class extends y.BaseActionViewItem{constructor(R,x,O,B,W,V,K,F){var q,ie,ae;super(null,R),this._keybindingService=O,this._notificationService=B,this._contextMenuService=W,this._menuService=V,this._instaService=K,this._storageService=F,this._container=null,this._options=x,this._storageKey=`${R.item.submenu.id}_lastActionId`;let ne;const $=x?.persistLastActionId?F.get(this._storageKey,1):void 0;$&&(ne=R.actions.find(Q=>$===Q.id)),ne||(ne=R.actions[0]),this._defaultAction=this._instaService.createInstance(I,ne,{keybinding:this._getDefaultActionKeybindingLabel(ne)});const J={keybindingProvider:Q=>this._keybindingService.lookupKeybinding(Q.id),...x,menuAsChild:(q=x?.menuAsChild)!==null&&q!==void 0?q:!0,classNames:(ie=x?.classNames)!==null&&ie!==void 0?ie:[\"codicon\",\"codicon-chevron-down\"],actionRunner:(ae=x?.actionRunner)!==null&&ae!==void 0?ae:new S.ActionRunner};this._dropdown=new E.DropdownMenuActionViewItem(R,R.actions,this._contextMenuService,J),this._register(this._dropdown.actionRunner.onDidRun(Q=>{Q.action instanceof a.MenuItemAction&&this.update(Q.action)}))}update(R){var x;!((x=this._options)===null||x===void 0)&&x.persistLastActionId&&this._storageService.store(this._storageKey,R.id,1,1),this._defaultAction.dispose(),this._defaultAction=this._instaService.createInstance(I,R,{keybinding:this._getDefaultActionKeybindingLabel(R)}),this._defaultAction.actionRunner=new class extends S.ActionRunner{async runAction(O,B){await O.run(void 0)}},this._container&&this._defaultAction.render((0,L.prepend)(this._container,(0,L.$)(\".action-container\")))}_getDefaultActionKeybindingLabel(R){var x;let O;if(!((x=this._options)===null||x===void 0)&&x.renderKeybindingWithDefaultActionLabel){const B=this._keybindingService.lookupKeybinding(R.id);B&&(O=`(${B.getLabel()})`)}return O}setActionContext(R){super.setActionContext(R),this._defaultAction.setActionContext(R),this._dropdown.setActionContext(R)}render(R){this._container=R,super.render(this._container),this._container.classList.add(\"monaco-dropdown-with-default\");const x=(0,L.$)(\".action-container\");this._defaultAction.render((0,L.append)(this._container,x)),this._register((0,L.addDisposableListener)(x,L.EventType.KEY_DOWN,B=>{const W=new k.StandardKeyboardEvent(B);W.equals(17)&&(this._defaultAction.element.tabIndex=-1,this._dropdown.focus(),W.stopPropagation())}));const O=(0,L.$)(\".dropdown-action-container\");this._dropdown.render((0,L.append)(this._container,O)),this._register((0,L.addDisposableListener)(O,L.EventType.KEY_DOWN,B=>{var W;const V=new k.StandardKeyboardEvent(B);V.equals(15)&&(this._defaultAction.element.tabIndex=0,this._dropdown.setFocusable(!1),(W=this._defaultAction.element)===null||W===void 0||W.focus(),V.stopPropagation())}))}focus(R){R?this._dropdown.focus():(this._defaultAction.element.tabIndex=0,this._defaultAction.element.focus())}blur(){this._defaultAction.element.tabIndex=-1,this._dropdown.blur(),this._container.blur()}setFocusable(R){R?this._defaultAction.element.tabIndex=0:(this._defaultAction.element.tabIndex=-1,this._dropdown.setFocusable(!1))}dispose(){this._defaultAction.dispose(),this._dropdown.dispose(),super.dispose()}};e.DropdownWithDefaultActionViewItem=A,e.DropdownWithDefaultActionViewItem=A=ke([ge(2,u.IKeybindingService),ge(3,f.INotificationService),ge(4,t.IContextMenuService),ge(5,a.IMenuService),ge(6,r.IInstantiationService),ge(7,c.IStorageService)],A);let P=class extends y.SelectActionViewItem{constructor(R,x){super(null,R,R.actions.map(O=>({text:O.id===S.Separator.ID?\"\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\":O.label,isDisabled:!O.enabled})),0,x,h.defaultSelectBoxStyles,{ariaLabel:R.tooltip,optionsAsChildren:!0}),this.select(Math.max(0,R.actions.findIndex(O=>O.checked)))}render(R){super.render(R),R.style.borderColor=(0,g.asCssVariable)(g.selectBorder)}runAction(R,x){const O=this.action.actions[x];O&&this.actionRunner.run(O)}};P=ke([ge(1,t.IContextViewService)],P);function N(M,R,x){return R instanceof a.MenuItemAction?M.createInstance(I,R,x):R instanceof a.SubmenuItemAction?R.item.isSelection?M.createInstance(P,R):R.item.rememberDefaultAction?M.createInstance(A,R,{...x,persistLastActionId:!0}):M.createInstance(T,R,x):void 0}e.createActionViewItem=N}),define(se[877],oe([1,0,7,78,2,721,141,30,15,8]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SuggestWidgetStatus=void 0;class b extends S.MenuEntryActionViewItem{updateLabel(){const n=this._keybindingService.lookupKeybinding(this._action.id,this._contextKeyService);if(!n)return super.updateLabel();this.label&&(this.label.textContent=(0,E.localize)(0,null,this._action.label,b.symbolPrintEnter(n)))}static symbolPrintEnter(n){var t;return(t=n.getLabel())===null||t===void 0?void 0:t.replace(/\\benter\\b/gi,\"\\u23CE\")}}let a=class{constructor(n,t,r,u,f){this._menuId=t,this._menuService=u,this._contextKeyService=f,this._menuDisposables=new y.DisposableStore,this.element=L.append(n,L.$(\".suggest-status-bar\"));const c=d=>d instanceof p.MenuItemAction?r.createInstance(b,d,void 0):void 0;this._leftActions=new k.ActionBar(this.element,{actionViewItemProvider:c}),this._rightActions=new k.ActionBar(this.element,{actionViewItemProvider:c}),this._leftActions.domNode.classList.add(\"left\"),this._rightActions.domNode.classList.add(\"right\")}dispose(){this._menuDisposables.dispose(),this._leftActions.dispose(),this._rightActions.dispose(),this.element.remove()}show(){const n=this._menuService.createMenu(this._menuId,this._contextKeyService),t=()=>{const r=[],u=[];for(const[f,c]of n.getActions())f===\"left\"?r.push(...c):u.push(...c);this._leftActions.clear(),this._leftActions.push(r),this._rightActions.clear(),this._rightActions.push(u)};this._menuDisposables.add(n.onDidChange(()=>t())),this._menuDisposables.add(n)}hide(){this._menuDisposables.clear()}};e.SuggestWidgetStatus=a,e.SuggestWidgetStatus=a=ke([ge(2,v.IInstantiationService),ge(3,p.IMenuService),ge(4,_.IContextKeyService)],a)}),define(se[373],oe([1,0,7,67,600,42,13,268,12,6,52,2,734,141,30,15,59,34,81]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MenuWorkbenchToolBar=e.WorkbenchToolBar=void 0;let d=class extends y.ToolBar{constructor(o,g,h,m,C,w,D){super(o,C,{getKeyBinding:T=>{var A;return(A=w.lookupKeybinding(T.id))!==null&&A!==void 0?A:void 0},...g,allowContextMenu:!0,skipTelemetry:typeof g?.telemetrySource==\"string\"}),this._options=g,this._menuService=h,this._contextKeyService=m,this._contextMenuService=C,this._sessionDisposables=this._store.add(new a.DisposableStore);const I=g?.telemetrySource;I&&this._store.add(this.actionBar.onDidRun(T=>D.publicLog2(\"workbenchActionExecuted\",{id:T.action.id,from:I})))}setActions(o,g=[],h){var m,C,w;this._sessionDisposables.clear();const D=o.slice(),I=g.slice(),T=[];let A=0;const P=[];let N=!1;if(((m=this._options)===null||m===void 0?void 0:m.hiddenItemStrategy)!==-1)for(let M=0;M<D.length;M++){const R=D[M];!(R instanceof t.MenuItemAction)&&!(R instanceof t.SubmenuItemAction)||R.hideActions&&(T.push(R.hideActions.toggle),R.hideActions.toggle.checked&&A++,R.hideActions.isHidden&&(N=!0,D[M]=void 0,((C=this._options)===null||C===void 0?void 0:C.hiddenItemStrategy)!==0&&(P[M]=R)))}if(((w=this._options)===null||w===void 0?void 0:w.overflowBehavior)!==void 0){const M=(0,p.intersection)(new Set(this._options.overflowBehavior.exempted),b.Iterable.map(D,O=>O?.id)),R=this._options.overflowBehavior.maxItems-M.size;let x=0;for(let O=0;O<D.length;O++){const B=D[O];B&&(x++,!M.has(B.id)&&x>=R&&(D[O]=void 0,P[O]=B))}}(0,S.coalesceInPlace)(D),(0,S.coalesceInPlace)(P),super.setActions(D,E.Separator.join(P,I)),T.length>0&&this._sessionDisposables.add((0,L.addDisposableListener)(this.getElement(),\"contextmenu\",M=>{var R,x,O,B,W;const V=new k.StandardMouseEvent((0,L.getWindow)(this.getElement()),M),K=this.getItemAction(V.target);if(!K)return;V.preventDefault(),V.stopPropagation();let F=!1;if(A===1&&((R=this._options)===null||R===void 0?void 0:R.hiddenItemStrategy)===0){F=!0;for(let ae=0;ae<T.length;ae++)if(T[ae].checked){T[ae]=(0,E.toAction)({id:K.id,label:K.label,checked:!0,enabled:!1,run(){}});break}}let q;if(!F&&(K instanceof t.MenuItemAction||K instanceof t.SubmenuItemAction)){if(!K.hideActions)return;q=K.hideActions.hide}else q=(0,E.toAction)({id:\"label\",label:(0,i.localize)(0,null),enabled:!1,run(){}});const ie=E.Separator.join([q],T);!((x=this._options)===null||x===void 0)&&x.resetMenu&&!h&&(h=[this._options.resetMenu]),N&&h&&(ie.push(new E.Separator),ie.push((0,E.toAction)({id:\"resetThisMenu\",label:(0,i.localize)(1,null),run:()=>this._menuService.resetHiddenStates(h)}))),this._contextMenuService.showContextMenu({getAnchor:()=>V,getActions:()=>ie,menuId:(O=this._options)===null||O===void 0?void 0:O.contextMenu,menuActionOptions:{renderShortTitle:!0,...(B=this._options)===null||B===void 0?void 0:B.menuOptions},skipTelemetry:typeof((W=this._options)===null||W===void 0?void 0:W.telemetrySource)==\"string\",contextKeyService:this._contextKeyService})}))}};e.WorkbenchToolBar=d,e.WorkbenchToolBar=d=ke([ge(2,t.IMenuService),ge(3,r.IContextKeyService),ge(4,u.IContextMenuService),ge(5,f.IKeybindingService),ge(6,c.ITelemetryService)],d);let s=class extends d{constructor(o,g,h,m,C,w,D,I){super(o,{resetMenu:g,...h},m,C,w,D,I),this._onDidChangeMenuItems=this._store.add(new v.Emitter);const T=this._store.add(m.createMenu(g,C,{emitEventsForSubmenuChanges:!0})),A=()=>{var P,N,M;const R=[],x=[];(0,n.createAndFillInActionBarActions)(T,h?.menuOptions,{primary:R,secondary:x},(P=h?.toolbarOptions)===null||P===void 0?void 0:P.primaryGroup,(N=h?.toolbarOptions)===null||N===void 0?void 0:N.shouldInlineSubmenu,(M=h?.toolbarOptions)===null||M===void 0?void 0:M.useSeparatorsInPrimaryActions),o.classList.toggle(\"has-no-actions\",R.length===0&&x.length===0),super.setActions(R,x)};this._store.add(T.onDidChange(()=>{A(),this._onDidChangeMenuItems.fire(this)})),A()}setActions(){throw new _.BugIndicatingError(\"This toolbar is populated from a menu.\")}};e.MenuWorkbenchToolBar=s,e.MenuWorkbenchToolBar=s=ke([ge(3,t.IMenuService),ge(4,r.IContextKeyService),ge(5,u.IContextMenuService),ge(6,f.IKeybindingService),ge(7,c.ITelemetryService)],s)}),define(se[257],oe([1,0,7,135,224,42,13,14,26,2,35,17,28,10,31,216,697,141,373,30,25,15,59,8,34,81,82,468]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C){\"use strict\";var w;Object.defineProperty(e,\"__esModule\",{value:!0}),e.CustomizedMenuWorkbenchToolBar=e.InlineSuggestionHintsContentWidget=e.InlineCompletionsHintsWidget=void 0;let D=class extends v.Disposable{constructor(x,O,B){super(),this.editor=x,this.model=O,this.instantiationService=B,this.alwaysShowToolbar=(0,b.observableFromEvent)(this.editor.onDidChangeConfiguration,()=>this.editor.getOption(62).showToolbar===\"always\"),this.sessionPosition=void 0,this.position=(0,b.derived)(this,W=>{var V,K,F;const q=(V=this.model.read(W))===null||V===void 0?void 0:V.ghostText.read(W);if(!this.alwaysShowToolbar.read(W)||!q||q.parts.length===0)return this.sessionPosition=void 0,null;const ie=q.parts[0].column;this.sessionPosition&&this.sessionPosition.lineNumber!==q.lineNumber&&(this.sessionPosition=void 0);const ae=new n.Position(q.lineNumber,Math.min(ie,(F=(K=this.sessionPosition)===null||K===void 0?void 0:K.column)!==null&&F!==void 0?F:Number.MAX_SAFE_INTEGER));return this.sessionPosition=ae,ae}),this._register((0,b.autorunWithStore)((W,V)=>{const K=this.model.read(W);if(!K||!this.alwaysShowToolbar.read(W))return;const F=V.add(this.instantiationService.createInstance(A,this.editor,!0,this.position,K.selectedInlineCompletionIndex,K.inlineCompletionsCount,K.selectedInlineCompletion.map(q=>{var ie;return(ie=q?.inlineCompletion.source.inlineCompletions.commands)!==null&&ie!==void 0?ie:[]})));x.addContentWidget(F),V.add((0,v.toDisposable)(()=>x.removeContentWidget(F))),V.add((0,b.autorun)(q=>{this.position.read(q)&&K.lastTriggerKind.read(q)!==t.InlineCompletionTriggerKind.Explicit&&K.triggerExplicitly()}))}))}};e.InlineCompletionsHintsWidget=D,e.InlineCompletionsHintsWidget=D=ke([ge(2,g.IInstantiationService)],D);const I=(0,C.registerIcon)(\"inline-suggestion-hints-next\",_.Codicon.chevronRight,(0,u.localize)(0,null)),T=(0,C.registerIcon)(\"inline-suggestion-hints-previous\",_.Codicon.chevronLeft,(0,u.localize)(1,null));let A=w=class extends v.Disposable{static get dropDownVisible(){return this._dropDownVisible}createCommandAction(x,O,B){const W=new E.Action(x,O,B,!0,()=>this._commandService.executeCommand(x)),V=this.keybindingService.lookupKeybinding(x,this._contextKeyService);let K=O;return V&&(K=(0,u.localize)(2,null,O,V.getLabel())),W.tooltip=K,W}constructor(x,O,B,W,V,K,F,q,ie,ae,ne){super(),this.editor=x,this.withBorder=O,this._position=B,this._currentSuggestionIdx=W,this._suggestionCount=V,this._extraCommands=K,this._commandService=F,this.keybindingService=ie,this._contextKeyService=ae,this._menuService=ne,this.id=`InlineSuggestionHintsContentWidget${w.id++}`,this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this.nodes=(0,L.h)(\"div.inlineSuggestionsHints\",{className:this.withBorder?\".withBorder\":\"\"},[(0,L.h)(\"div@toolBar\")]),this.previousAction=this.createCommandAction(r.showPreviousInlineSuggestionActionId,(0,u.localize)(3,null),i.ThemeIcon.asClassName(T)),this.availableSuggestionCountAction=new E.Action(\"inlineSuggestionHints.availableSuggestionCount\",\"\",void 0,!1),this.nextAction=this.createCommandAction(r.showNextInlineSuggestionActionId,(0,u.localize)(4,null),i.ThemeIcon.asClassName(I)),this.inlineCompletionsActionsMenus=this._register(this._menuService.createMenu(d.MenuId.InlineCompletionsActions,this._contextKeyService)),this.clearAvailableSuggestionCountLabelDebounced=this._register(new p.RunOnceScheduler(()=>{this.availableSuggestionCountAction.label=\"\"},100)),this.disableButtonsDebounced=this._register(new p.RunOnceScheduler(()=>{this.previousAction.enabled=this.nextAction.enabled=!1},100)),this.lastCommands=[],this.toolBar=this._register(q.createInstance(M,this.nodes.toolBar,d.MenuId.InlineSuggestionToolbar,{menuOptions:{renderShortTitle:!0},toolbarOptions:{primaryGroup:$=>$.startsWith(\"primary\")},actionViewItemProvider:($,J)=>{if($ instanceof d.MenuItemAction)return q.createInstance(N,$,void 0);if($===this.availableSuggestionCountAction){const Q=new P(void 0,$,{label:!0,icon:!1});return Q.setClass(\"availableSuggestionCount\"),Q}},telemetrySource:\"InlineSuggestionToolbar\"})),this.toolBar.setPrependedPrimaryActions([this.previousAction,this.availableSuggestionCountAction,this.nextAction]),this._register(this.toolBar.onDidChangeDropdownVisibility($=>{w._dropDownVisible=$})),this._register((0,b.autorun)($=>{this._position.read($),this.editor.layoutContentWidget(this)})),this._register((0,b.autorun)($=>{const J=this._suggestionCount.read($),Q=this._currentSuggestionIdx.read($);J!==void 0?(this.clearAvailableSuggestionCountLabelDebounced.cancel(),this.availableSuggestionCountAction.label=`${Q+1}/${J}`):this.clearAvailableSuggestionCountLabelDebounced.schedule(),J!==void 0&&J>1?(this.disableButtonsDebounced.cancel(),this.previousAction.enabled=this.nextAction.enabled=!0):this.disableButtonsDebounced.schedule()})),this._register((0,b.autorun)($=>{const J=this._extraCommands.read($);if((0,S.equals)(this.lastCommands,J))return;this.lastCommands=J;const Q=J.map(re=>({class:void 0,id:re.id,enabled:!0,tooltip:re.tooltip||\"\",label:re.title,run:de=>this._commandService.executeCommand(re.id)}));for(const[re,de]of this.inlineCompletionsActionsMenus.getActions())for(const he of de)he instanceof d.MenuItemAction&&Q.push(he);Q.length>0&&Q.unshift(new E.Separator),this.toolBar.setAdditionalSecondaryActions(Q)}))}getId(){return this.id}getDomNode(){return this.nodes.root}getPosition(){return{position:this._position.get(),preference:[1,2],positionAffinity:3}}};e.InlineSuggestionHintsContentWidget=A,A._dropDownVisible=!1,A.id=0,e.InlineSuggestionHintsContentWidget=A=w=ke([ge(6,s.ICommandService),ge(7,g.IInstantiationService),ge(8,h.IKeybindingService),ge(9,l.IContextKeyService),ge(10,d.IMenuService)],A);class P extends k.ActionViewItem{constructor(){super(...arguments),this._className=void 0}setClass(x){this._className=x}render(x){super.render(x),this._className&&x.classList.add(this._className)}updateTooltip(){}}class N extends f.MenuEntryActionViewItem{updateLabel(){const x=this._keybindingService.lookupKeybinding(this._action.id,this._contextKeyService);if(!x)return super.updateLabel();if(this.label){const O=(0,L.h)(\"div.keybinding\").root;new y.KeybindingLabel(O,a.OS,{disableTitle:!0,...y.unthemedKeybindingLabelOptions}).set(x),this.label.textContent=this._action.label,this.label.appendChild(O),this.label.classList.add(\"inlineSuggestionStatusBarItemLabel\")}}updateTooltip(){}}let M=class extends c.WorkbenchToolBar{constructor(x,O,B,W,V,K,F,q){super(x,{resetMenu:O,...B},W,V,K,F,q),this.menuId=O,this.options2=B,this.menuService=W,this.contextKeyService=V,this.menu=this._store.add(this.menuService.createMenu(this.menuId,this.contextKeyService,{emitEventsForSubmenuChanges:!0})),this.additionalActions=[],this.prependedPrimaryActions=[],this._store.add(this.menu.onDidChange(()=>this.updateToolbar())),this.updateToolbar()}updateToolbar(){var x,O,B,W,V,K,F;const q=[],ie=[];(0,f.createAndFillInActionBarActions)(this.menu,(x=this.options2)===null||x===void 0?void 0:x.menuOptions,{primary:q,secondary:ie},(B=(O=this.options2)===null||O===void 0?void 0:O.toolbarOptions)===null||B===void 0?void 0:B.primaryGroup,(V=(W=this.options2)===null||W===void 0?void 0:W.toolbarOptions)===null||V===void 0?void 0:V.shouldInlineSubmenu,(F=(K=this.options2)===null||K===void 0?void 0:K.toolbarOptions)===null||F===void 0?void 0:F.useSeparatorsInPrimaryActions),ie.push(...this.additionalActions),q.unshift(...this.prependedPrimaryActions),this.setActions(q,ie)}setPrependedPrimaryActions(x){(0,S.equals)(this.prependedPrimaryActions,x,(O,B)=>O===B)||(this.prependedPrimaryActions=x,this.updateToolbar())}setAdditionalSecondaryActions(x){(0,S.equals)(this.additionalActions,x,(O,B)=>O===B)||(this.additionalActions=x,this.updateToolbar())}};e.CustomizedMenuWorkbenchToolBar=M,e.CustomizedMenuWorkbenchToolBar=M=ke([ge(3,d.IMenuService),ge(4,l.IContextKeyService),ge(5,o.IContextMenuService),ge(6,h.IKeybindingService),ge(7,m.ITelemetryService)],M)}),define(se[878],oe([1,0,7,42,6,2,141,30,15,34,50,81,840,59]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContextMenuMenuDelegate=e.ContextMenuService=void 0;let t=class extends E.Disposable{get contextMenuHandler(){return this._contextMenuHandler||(this._contextMenuHandler=new i.ContextMenuHandler(this.contextViewService,this.telemetryService,this.notificationService,this.keybindingService)),this._contextMenuHandler}constructor(f,c,d,s,l,o){super(),this.telemetryService=f,this.notificationService=c,this.contextViewService=d,this.keybindingService=s,this.menuService=l,this.contextKeyService=o,this._contextMenuHandler=void 0,this._onDidShowContextMenu=this._store.add(new y.Emitter),this.onDidShowContextMenu=this._onDidShowContextMenu.event,this._onDidHideContextMenu=this._store.add(new y.Emitter)}configure(f){this.contextMenuHandler.configure(f)}showContextMenu(f){f=r.transform(f,this.menuService,this.contextKeyService),this.contextMenuHandler.showContextMenu({...f,onHide:c=>{var d;(d=f.onHide)===null||d===void 0||d.call(f,c),this._onDidHideContextMenu.fire()}}),L.ModifierKeyEmitter.getInstance().resetKeyStatus(),this._onDidShowContextMenu.fire()}};e.ContextMenuService=t,e.ContextMenuService=t=ke([ge(0,a.ITelemetryService),ge(1,b.INotificationService),ge(2,n.IContextViewService),ge(3,v.IKeybindingService),ge(4,p.IMenuService),ge(5,_.IContextKeyService)],t);var r;(function(u){function f(d){return d&&d.menuId instanceof p.MenuId}function c(d,s,l){if(!f(d))return d;const{menuId:o,menuActionOptions:g,contextKeyService:h}=d;return{...d,getActions:()=>{const m=[];if(o){const C=s.createMenu(o,h??l);(0,S.createAndFillInContextMenuActions)(C,g,m),C.dispose()}return d.getActions?k.Separator.join(d.getActions(),m):m}}}u.transform=c})(r||(e.ContextMenuMenuDelegate=r={}))}),define(se[879],oe([1,0,19,6,15,8,123,192,57,803,106,29,23,367,850,27,244]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuickInputService=void 0;let f=class extends i.Themable{get controller(){return this._controller||(this._controller=this._register(this.createController())),this._controller}get hasController(){return!!this._controller}get quickAccess(){return this._quickAccess||(this._quickAccess=this._register(this.instantiationService.createInstance(v.QuickAccessController))),this._quickAccess}constructor(d,s,l,o,g,h){super(l),this.instantiationService=d,this.contextKeyService=s,this.layoutService=o,this.configurationService=g,this.hoverService=h,this._onShow=this._register(new k.Emitter),this._onHide=this._register(new k.Emitter),this.contexts=new Map}createController(d=this.layoutService,s){const l={idPrefix:\"quickInput_\",container:d.activeContainer,ignoreFocusOut:()=>!1,backKeybindingLabel:()=>{},setContextKey:g=>this.setContextKey(g),linkOpenerDelegate:g=>{this.instantiationService.invokeFunction(h=>{h.get(_.IOpenerService).open(g,{allowCommands:!0,fromUserGesture:!0})})},returnFocus:()=>d.focus(),createList:(g,h,m,C,w)=>this.instantiationService.createInstance(p.WorkbenchList,g,h,m,C,w),styles:this.computeStyles(),hoverDelegate:new n.QuickInputHoverDelegate(this.configurationService,this.hoverService)},o=this._register(new t.QuickInputController({...l,...s},this.themeService,this.layoutService));return o.layout(d.activeContainerDimension,d.activeContainerOffset.quickPickTop),this._register(d.onDidLayoutActiveContainer(g=>o.layout(g,d.activeContainerOffset.quickPickTop))),this._register(d.onDidChangeActiveContainer(()=>{o.isVisible()||o.layout(d.activeContainerDimension,d.activeContainerOffset.quickPickTop)})),this._register(o.onShow(()=>{this.resetContextKeys(),this._onShow.fire()})),this._register(o.onHide(()=>{this.resetContextKeys(),this._onHide.fire()})),o}setContextKey(d){let s;d&&(s=this.contexts.get(d),s||(s=new y.RawContextKey(d,!1).bindTo(this.contextKeyService),this.contexts.set(d,s))),!(s&&s.get())&&(this.resetContextKeys(),s?.set(!0))}resetContextKeys(){this.contexts.forEach(d=>{d.get()&&d.reset()})}pick(d,s={},l=L.CancellationToken.None){return this.controller.pick(d,s,l)}createQuickPick(){return this.controller.createQuickPick()}createInputBox(){return this.controller.createInputBox()}updateStyles(){this.hasController&&this.controller.applyStyles(this.computeStyles())}computeStyles(){return{widget:{quickInputBackground:(0,a.asCssVariable)(a.quickInputBackground),quickInputForeground:(0,a.asCssVariable)(a.quickInputForeground),quickInputTitleBackground:(0,a.asCssVariable)(a.quickInputTitleBackground),widgetBorder:(0,a.asCssVariable)(a.widgetBorder),widgetShadow:(0,a.asCssVariable)(a.widgetShadow)},inputBox:b.defaultInputBoxStyles,toggle:b.defaultToggleStyles,countBadge:b.defaultCountBadgeStyles,button:b.defaultButtonStyles,progressBar:b.defaultProgressBarStyles,keybindingLabel:b.defaultKeybindingLabelStyles,list:(0,b.getListStyles)({listBackground:a.quickInputBackground,listFocusBackground:a.quickInputListFocusBackground,listFocusForeground:a.quickInputListFocusForeground,listInactiveFocusForeground:a.quickInputListFocusForeground,listInactiveSelectionIconForeground:a.quickInputListFocusIconForeground,listInactiveFocusBackground:a.quickInputListFocusBackground,listFocusOutline:a.activeContrastBorder,listInactiveFocusOutline:a.activeContrastBorder}),pickerGroup:{pickerGroupBorder:(0,a.asCssVariable)(a.pickerGroupBorder),pickerGroupForeground:(0,a.asCssVariable)(a.pickerGroupForeground)}}}};e.QuickInputService=f,e.QuickInputService=f=ke([ge(0,E.IInstantiationService),ge(1,y.IContextKeyService),ge(2,i.IThemeService),ge(3,S.ILayoutService),ge(4,r.IConfigurationService),ge(5,u.IHoverService)],f)}),define(se[880],oe([1,0,6,16,23,19,8,15,349,33,879,108,27,244,486]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.QuickInputEditorWidget=e.QuickInputEditorContribution=e.StandaloneQuickInputService=void 0;let t=class extends b.QuickInputService{constructor(d,s,l,o,g,h,m){super(s,l,o,new _.EditorScopedLayoutService(d.getContainerDomNode(),g),h,m),this.host=void 0;const C=u.get(d);if(C){const w=C.widget;this.host={_serviceBrand:void 0,get mainContainer(){return w.getDomNode()},getContainer(){return w.getDomNode()},get containers(){return[w.getDomNode()]},get activeContainer(){return w.getDomNode()},get mainContainerDimension(){return d.getLayoutInfo()},get activeContainerDimension(){return d.getLayoutInfo()},get onDidLayoutMainContainer(){return d.onDidLayoutChange},get onDidLayoutActiveContainer(){return d.onDidLayoutChange},get onDidLayoutContainer(){return L.Event.map(d.onDidLayoutChange,D=>({container:w.getDomNode(),dimension:D}))},get onDidChangeActiveContainer(){return L.Event.None},get onDidAddContainer(){return L.Event.None},get whenActiveContainerStylesLoaded(){return Promise.resolve()},get mainContainerOffset(){return{top:0,quickPickTop:0}},get activeContainerOffset(){return{top:0,quickPickTop:0}},focus:()=>d.focus()}}else this.host=void 0}createController(){return super.createController(this.host)}};t=ke([ge(1,S.IInstantiationService),ge(2,p.IContextKeyService),ge(3,y.IThemeService),ge(4,v.ICodeEditorService),ge(5,i.IConfigurationService),ge(6,n.IHoverService)],t);let r=class{get activeService(){const d=this.codeEditorService.getFocusedCodeEditor();if(!d)throw new Error(\"Quick input service needs a focused editor to work.\");let s=this.mapEditorToService.get(d);if(!s){const l=s=this.instantiationService.createInstance(t,d);this.mapEditorToService.set(d,s),(0,a.createSingleCallFunction)(d.onDidDispose)(()=>{l.dispose(),this.mapEditorToService.delete(d)})}return s}get quickAccess(){return this.activeService.quickAccess}constructor(d,s){this.instantiationService=d,this.codeEditorService=s,this.mapEditorToService=new Map}pick(d,s={},l=E.CancellationToken.None){return this.activeService.pick(d,s,l)}createQuickPick(){return this.activeService.createQuickPick()}createInputBox(){return this.activeService.createInputBox()}};e.StandaloneQuickInputService=r,e.StandaloneQuickInputService=r=ke([ge(0,S.IInstantiationService),ge(1,v.ICodeEditorService)],r);class u{static get(d){return d.getContribution(u.ID)}constructor(d){this.editor=d,this.widget=new f(this.editor)}dispose(){this.widget.dispose()}}e.QuickInputEditorContribution=u,u.ID=\"editor.controller.quickInput\";class f{constructor(d){this.codeEditor=d,this.domNode=document.createElement(\"div\"),this.codeEditor.addOverlayWidget(this)}getId(){return f.ID}getDomNode(){return this.domNode}getPosition(){return{preference:2}}dispose(){this.codeEditor.removeOverlayWidget(this)}}e.QuickInputEditorWidget=f,f.ID=\"editor.contrib.quickInputWidget\",(0,k.registerEditorContribution)(u.ID,u,4)}),define(se[193],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UndoRedoSource=e.UndoRedoGroup=e.ResourceEditStackSnapshot=e.IUndoRedoService=void 0,e.IUndoRedoService=(0,L.createDecorator)(\"undoRedoService\");class k{constructor(p,_){this.resource=p,this.elements=_}}e.ResourceEditStackSnapshot=k;class y{constructor(){this.id=y._ID++,this.order=1}nextOrder(){return this.id===0?0:this.order++}}e.UndoRedoGroup=y,y._ID=0,y.None=new y;class E{constructor(){this.id=E._ID++,this.order=1}nextOrder(){return this.id===0?0:this.order++}}e.UndoRedoSource=E,E._ID=0,E.None=new E}),define(se[38],oe([1,0,13,39,12,6,2,11,22,129,203,62,10,5,24,179,43,32,41,613,863,340,297,524,525,331,614,184,642,114,193]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T){\"use strict\";var A;Object.defineProperty(e,\"__esModule\",{value:!0}),e.AttachedViews=e.ModelDecorationOptions=e.ModelDecorationInjectedTextOptions=e.ModelDecorationMinimapOptions=e.ModelDecorationGlyphMarginOptions=e.ModelDecorationOverviewRulerOptions=e.TextModel=e.createTextBuffer=e.createTextBufferFactoryFromSnapshot=e.createTextBufferFactory=void 0;function P(Y){const j=new C.PieceTreeTextBufferBuilder;return j.acceptChunk(Y),j.finish()}e.createTextBufferFactory=P;function N(Y){const j=new C.PieceTreeTextBufferBuilder;let Z;for(;typeof(Z=Y.read())==\"string\";)j.acceptChunk(Z);return j.finish()}e.createTextBufferFactoryFromSnapshot=N;function M(Y,j){let Z;return typeof Y==\"string\"?Z=P(Y):c.isITextSnapshot(Y)?Z=N(Y):Z=Y,Z.create(j)}e.createTextBuffer=M;let R=0;const x=999,O=1e4;class B{constructor(j){this._source=j,this._eos=!1}read(){if(this._eos)return null;const j=[];let Z=0,ee=0;do{const le=this._source.read();if(le===null)return this._eos=!0,Z===0?null:j.join(\"\");if(le.length>0&&(j[Z++]=le,ee+=le.length),ee>=64*1024)return j.join(\"\")}while(!0)}}const W=()=>{throw new Error(\"Invalid change accessor\")};let V=A=class extends S.Disposable{static resolveOptions(j,Z){if(Z.detectIndentation){const ee=(0,g.guessIndentation)(j,Z.tabSize,Z.insertSpaces);return new c.TextModelResolvedOptions({tabSize:ee.tabSize,indentSize:\"tabSize\",insertSpaces:ee.insertSpaces,trimAutoWhitespace:Z.trimAutoWhitespace,defaultEOL:Z.defaultEOL,bracketPairColorizationOptions:Z.bracketPairColorizationOptions})}return new c.TextModelResolvedOptions(Z)}get onDidChangeLanguage(){return this._tokenizationTextModelPart.onDidChangeLanguage}get onDidChangeLanguageConfiguration(){return this._tokenizationTextModelPart.onDidChangeLanguageConfiguration}get onDidChangeTokens(){return this._tokenizationTextModelPart.onDidChangeTokens}onDidChangeContent(j){return this._eventEmitter.slowEvent(Z=>j(Z.contentChangedEvent))}onDidChangeContentOrInjectedText(j){return(0,S.combinedDisposable)(this._eventEmitter.fastEvent(Z=>j(Z)),this._onDidChangeInjectedText.event(Z=>j(Z)))}_isDisposing(){return this.__isDisposing}get tokenization(){return this._tokenizationTextModelPart}get bracketPairs(){return this._bracketPairs}get guides(){return this._guidesTextModelPart}constructor(j,Z,ee,le=null,ue,ce,pe){super(),this._undoRedoService=ue,this._languageService=ce,this._languageConfigurationService=pe,this._onWillDispose=this._register(new E.Emitter),this.onWillDispose=this._onWillDispose.event,this._onDidChangeDecorations=this._register(new U(Ae=>this.handleBeforeFireDecorationsChangedEvent(Ae))),this.onDidChangeDecorations=this._onDidChangeDecorations.event,this._onDidChangeOptions=this._register(new E.Emitter),this.onDidChangeOptions=this._onDidChangeOptions.event,this._onDidChangeAttached=this._register(new E.Emitter),this.onDidChangeAttached=this._onDidChangeAttached.event,this._onDidChangeInjectedText=this._register(new E.Emitter),this._eventEmitter=this._register(new G),this._languageSelectionListener=this._register(new S.MutableDisposable),this._deltaDecorationCallCnt=0,this._attachedViews=new z,R++,this.id=\"$model\"+R,this.isForSimpleWidget=ee.isForSimpleWidget,typeof le>\"u\"||le===null?this._associatedResource=_.URI.parse(\"inmemory://model/\"+R):this._associatedResource=le,this._attachedEditorCount=0;const{textBuffer:ve,disposable:Ce}=M(j,ee.defaultEOL);this._buffer=ve,this._bufferDisposable=Ce,this._options=A.resolveOptions(this._buffer,ee);const Se=typeof Z==\"string\"?Z:Z.languageId;typeof Z!=\"string\"&&(this._languageSelectionListener.value=Z.onDidChange(()=>this._setLanguage(Z.languageId))),this._bracketPairs=this._register(new d.BracketPairsTextModelPart(this,this._languageConfigurationService)),this._guidesTextModelPart=this._register(new o.GuidesTextModelPart(this,this._languageConfigurationService)),this._decorationProvider=this._register(new s.ColorizedBracketPairsDecorationProvider(this)),this._tokenizationTextModelPart=new D.TokenizationTextModelPart(this._languageService,this._languageConfigurationService,this,this._bracketPairs,Se,this._attachedViews);const _e=this._buffer.getLineCount(),Ee=this._buffer.getValueLengthInRange(new n.Range(1,1,_e,this._buffer.getLineLength(_e)+1),0);ee.largeFileOptimizations?(this._isTooLargeForTokenization=Ee>A.LARGE_FILE_SIZE_THRESHOLD||_e>A.LARGE_FILE_LINE_COUNT_THRESHOLD,this._isTooLargeForHeapOperation=Ee>A.LARGE_FILE_HEAP_OPERATION_THRESHOLD):(this._isTooLargeForTokenization=!1,this._isTooLargeForHeapOperation=!1),this._isTooLargeForSyncing=Ee>A._MODEL_SYNC_LIMIT,this._versionId=1,this._alternativeVersionId=1,this._initialUndoRedoSnapshot=null,this._isDisposed=!1,this.__isDisposing=!1,this._instanceId=p.singleLetterHash(R),this._lastDecorationId=0,this._decorations=Object.create(null),this._decorationsTree=new ae,this._commandManager=new l.EditStack(this,this._undoRedoService),this._isUndoing=!1,this._isRedoing=!1,this._trimAutoWhitespaceLines=null,this._register(this._decorationProvider.onDidChange(()=>{this._onDidChangeDecorations.beginDeferredEmit(),this._onDidChangeDecorations.fire(),this._onDidChangeDecorations.endDeferredEmit()})),this._languageService.requestRichLanguageFeatures(Se)}dispose(){this.__isDisposing=!0,this._onWillDispose.fire(),this._tokenizationTextModelPart.dispose(),this._isDisposed=!0,super.dispose(),this._bufferDisposable.dispose(),this.__isDisposing=!1;const j=new m.PieceTreeTextBuffer([],\"\",`\n`,!1,!1,!0,!0);j.dispose(),this._buffer=j,this._bufferDisposable=S.Disposable.None}_assertNotDisposed(){if(this._isDisposed)throw new Error(\"Model is disposed!\")}_emitContentChangedEvent(j,Z){this.__isDisposing||(this._tokenizationTextModelPart.handleDidChangeContent(Z),this._bracketPairs.handleDidChangeContent(Z),this._eventEmitter.fire(new I.InternalModelContentChangeEvent(j,Z)))}setValue(j){if(this._assertNotDisposed(),j==null)throw(0,y.illegalArgument)();const{textBuffer:Z,disposable:ee}=M(j,this._options.defaultEOL);this._setValueFromTextBuffer(Z,ee)}_createContentChanged2(j,Z,ee,le,ue,ce,pe,ve){return{changes:[{range:j,rangeOffset:Z,rangeLength:ee,text:le}],eol:this._buffer.getEOL(),isEolChange:ve,versionId:this.getVersionId(),isUndoing:ue,isRedoing:ce,isFlush:pe}}_setValueFromTextBuffer(j,Z){this._assertNotDisposed();const ee=this.getFullModelRange(),le=this.getValueLengthInRange(ee),ue=this.getLineCount(),ce=this.getLineMaxColumn(ue);this._buffer=j,this._bufferDisposable.dispose(),this._bufferDisposable=Z,this._increaseVersionId(),this._decorations=Object.create(null),this._decorationsTree=new ae,this._commandManager.clear(),this._trimAutoWhitespaceLines=null,this._emitContentChangedEvent(new I.ModelRawContentChangedEvent([new I.ModelRawFlush],this._versionId,!1,!1),this._createContentChanged2(new n.Range(1,1,ue,ce),0,le,this.getValue(),!1,!1,!0,!1))}setEOL(j){this._assertNotDisposed();const Z=j===1?`\\r\n`:`\n`;if(this._buffer.getEOL()===Z)return;const ee=this.getFullModelRange(),le=this.getValueLengthInRange(ee),ue=this.getLineCount(),ce=this.getLineMaxColumn(ue);this._onBeforeEOLChange(),this._buffer.setEOL(Z),this._increaseVersionId(),this._onAfterEOLChange(),this._emitContentChangedEvent(new I.ModelRawContentChangedEvent([new I.ModelRawEOLChanged],this._versionId,!1,!1),this._createContentChanged2(new n.Range(1,1,ue,ce),0,le,this.getValue(),!1,!1,!1,!0))}_onBeforeEOLChange(){this._decorationsTree.ensureAllNodesHaveRanges(this)}_onAfterEOLChange(){const j=this.getVersionId(),Z=this._decorationsTree.collectNodesPostOrder();for(let ee=0,le=Z.length;ee<le;ee++){const ue=Z[ee],ce=ue.range,pe=ue.cachedAbsoluteStart-ue.start,ve=this._buffer.getOffsetAt(ce.startLineNumber,ce.startColumn),Ce=this._buffer.getOffsetAt(ce.endLineNumber,ce.endColumn);ue.cachedAbsoluteStart=ve,ue.cachedAbsoluteEnd=Ce,ue.cachedVersionId=j,ue.start=ve-pe,ue.end=Ce-pe,(0,h.recomputeMaxEnd)(ue)}}onBeforeAttached(){return this._attachedEditorCount++,this._attachedEditorCount===1&&(this._tokenizationTextModelPart.handleDidChangeAttached(),this._onDidChangeAttached.fire(void 0)),this._attachedViews.attachView()}onBeforeDetached(j){this._attachedEditorCount--,this._attachedEditorCount===0&&(this._tokenizationTextModelPart.handleDidChangeAttached(),this._onDidChangeAttached.fire(void 0)),this._attachedViews.detachView(j)}isAttachedToEditor(){return this._attachedEditorCount>0}getAttachedEditorCount(){return this._attachedEditorCount}isTooLargeForSyncing(){return this._isTooLargeForSyncing}isTooLargeForTokenization(){return this._isTooLargeForTokenization}isTooLargeForHeapOperation(){return this._isTooLargeForHeapOperation}isDisposed(){return this._isDisposed}isDominatedByLongLines(){if(this._assertNotDisposed(),this.isTooLargeForTokenization())return!1;let j=0,Z=0;const ee=this._buffer.getLineCount();for(let le=1;le<=ee;le++){const ue=this._buffer.getLineLength(le);ue>=O?Z+=ue:j+=ue}return Z>j}get uri(){return this._associatedResource}getOptions(){return this._assertNotDisposed(),this._options}getFormattingOptions(){return{tabSize:this._options.indentSize,insertSpaces:this._options.insertSpaces}}updateOptions(j){this._assertNotDisposed();const Z=typeof j.tabSize<\"u\"?j.tabSize:this._options.tabSize,ee=typeof j.indentSize<\"u\"?j.indentSize:this._options.originalIndentSize,le=typeof j.insertSpaces<\"u\"?j.insertSpaces:this._options.insertSpaces,ue=typeof j.trimAutoWhitespace<\"u\"?j.trimAutoWhitespace:this._options.trimAutoWhitespace,ce=typeof j.bracketColorizationOptions<\"u\"?j.bracketColorizationOptions:this._options.bracketPairColorizationOptions,pe=new c.TextModelResolvedOptions({tabSize:Z,indentSize:ee,insertSpaces:le,defaultEOL:this._options.defaultEOL,trimAutoWhitespace:ue,bracketPairColorizationOptions:ce});if(this._options.equals(pe))return;const ve=this._options.createChangeEvent(pe);this._options=pe,this._bracketPairs.handleDidChangeOptions(ve),this._decorationProvider.handleDidChangeOptions(ve),this._onDidChangeOptions.fire(ve)}detectIndentation(j,Z){this._assertNotDisposed();const ee=(0,g.guessIndentation)(this._buffer,Z,j);this.updateOptions({insertSpaces:ee.insertSpaces,tabSize:ee.tabSize,indentSize:ee.tabSize})}normalizeIndentation(j){return this._assertNotDisposed(),(0,b.normalizeIndentation)(j,this._options.indentSize,this._options.insertSpaces)}getVersionId(){return this._assertNotDisposed(),this._versionId}mightContainRTL(){return this._buffer.mightContainRTL()}mightContainUnusualLineTerminators(){return this._buffer.mightContainUnusualLineTerminators()}removeUnusualLineTerminators(j=null){const Z=this.findMatches(p.UNUSUAL_LINE_TERMINATORS.source,!1,!0,!1,null,!1,1073741824);this._buffer.resetMightContainUnusualLineTerminators(),this.pushEditOperations(j,Z.map(ee=>({range:ee.range,text:null})),()=>null)}mightContainNonBasicASCII(){return this._buffer.mightContainNonBasicASCII()}getAlternativeVersionId(){return this._assertNotDisposed(),this._alternativeVersionId}getInitialUndoRedoSnapshot(){return this._assertNotDisposed(),this._initialUndoRedoSnapshot}getOffsetAt(j){this._assertNotDisposed();const Z=this._validatePosition(j.lineNumber,j.column,0);return this._buffer.getOffsetAt(Z.lineNumber,Z.column)}getPositionAt(j){this._assertNotDisposed();const Z=Math.min(this._buffer.getLength(),Math.max(0,j));return this._buffer.getPositionAt(Z)}_increaseVersionId(){this._versionId=this._versionId+1,this._alternativeVersionId=this._versionId}_overwriteVersionId(j){this._versionId=j}_overwriteAlternativeVersionId(j){this._alternativeVersionId=j}_overwriteInitialUndoRedoSnapshot(j){this._initialUndoRedoSnapshot=j}getValue(j,Z=!1){if(this._assertNotDisposed(),this.isTooLargeForHeapOperation())throw new y.BugIndicatingError(\"Operation would exceed heap memory limits\");const ee=this.getFullModelRange(),le=this.getValueInRange(ee,j);return Z?this._buffer.getBOM()+le:le}createSnapshot(j=!1){return new B(this._buffer.createSnapshot(j))}getValueLength(j,Z=!1){this._assertNotDisposed();const ee=this.getFullModelRange(),le=this.getValueLengthInRange(ee,j);return Z?this._buffer.getBOM().length+le:le}getValueInRange(j,Z=0){return this._assertNotDisposed(),this._buffer.getValueInRange(this.validateRange(j),Z)}getValueLengthInRange(j,Z=0){return this._assertNotDisposed(),this._buffer.getValueLengthInRange(this.validateRange(j),Z)}getCharacterCountInRange(j,Z=0){return this._assertNotDisposed(),this._buffer.getCharacterCountInRange(this.validateRange(j),Z)}getLineCount(){return this._assertNotDisposed(),this._buffer.getLineCount()}getLineContent(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError(\"Illegal value for lineNumber\");return this._buffer.getLineContent(j)}getLineLength(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError(\"Illegal value for lineNumber\");return this._buffer.getLineLength(j)}getLinesContent(){if(this._assertNotDisposed(),this.isTooLargeForHeapOperation())throw new y.BugIndicatingError(\"Operation would exceed heap memory limits\");return this._buffer.getLinesContent()}getEOL(){return this._assertNotDisposed(),this._buffer.getEOL()}getEndOfLineSequence(){return this._assertNotDisposed(),this._buffer.getEOL()===`\n`?0:1}getLineMinColumn(j){return this._assertNotDisposed(),1}getLineMaxColumn(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError(\"Illegal value for lineNumber\");return this._buffer.getLineLength(j)+1}getLineFirstNonWhitespaceColumn(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError(\"Illegal value for lineNumber\");return this._buffer.getLineFirstNonWhitespaceColumn(j)}getLineLastNonWhitespaceColumn(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError(\"Illegal value for lineNumber\");return this._buffer.getLineLastNonWhitespaceColumn(j)}_validateRangeRelaxedNoAllocations(j){const Z=this._buffer.getLineCount(),ee=j.startLineNumber,le=j.startColumn;let ue=Math.floor(typeof ee==\"number\"&&!isNaN(ee)?ee:1),ce=Math.floor(typeof le==\"number\"&&!isNaN(le)?le:1);if(ue<1)ue=1,ce=1;else if(ue>Z)ue=Z,ce=this.getLineMaxColumn(ue);else if(ce<=1)ce=1;else{const _e=this.getLineMaxColumn(ue);ce>=_e&&(ce=_e)}const pe=j.endLineNumber,ve=j.endColumn;let Ce=Math.floor(typeof pe==\"number\"&&!isNaN(pe)?pe:1),Se=Math.floor(typeof ve==\"number\"&&!isNaN(ve)?ve:1);if(Ce<1)Ce=1,Se=1;else if(Ce>Z)Ce=Z,Se=this.getLineMaxColumn(Ce);else if(Se<=1)Se=1;else{const _e=this.getLineMaxColumn(Ce);Se>=_e&&(Se=_e)}return ee===ue&&le===ce&&pe===Ce&&ve===Se&&j instanceof n.Range&&!(j instanceof t.Selection)?j:new n.Range(ue,ce,Ce,Se)}_isValidPosition(j,Z,ee){if(typeof j!=\"number\"||typeof Z!=\"number\"||isNaN(j)||isNaN(Z)||j<1||Z<1||(j|0)!==j||(Z|0)!==Z)return!1;const le=this._buffer.getLineCount();if(j>le)return!1;if(Z===1)return!0;const ue=this.getLineMaxColumn(j);if(Z>ue)return!1;if(ee===1){const ce=this._buffer.getLineCharCode(j,Z-2);if(p.isHighSurrogate(ce))return!1}return!0}_validatePosition(j,Z,ee){const le=Math.floor(typeof j==\"number\"&&!isNaN(j)?j:1),ue=Math.floor(typeof Z==\"number\"&&!isNaN(Z)?Z:1),ce=this._buffer.getLineCount();if(le<1)return new i.Position(1,1);if(le>ce)return new i.Position(ce,this.getLineMaxColumn(ce));if(ue<=1)return new i.Position(le,1);const pe=this.getLineMaxColumn(le);if(ue>=pe)return new i.Position(le,pe);if(ee===1){const ve=this._buffer.getLineCharCode(le,ue-2);if(p.isHighSurrogate(ve))return new i.Position(le,ue-1)}return new i.Position(le,ue)}validatePosition(j){return this._assertNotDisposed(),j instanceof i.Position&&this._isValidPosition(j.lineNumber,j.column,1)?j:this._validatePosition(j.lineNumber,j.column,1)}_isValidRange(j,Z){const ee=j.startLineNumber,le=j.startColumn,ue=j.endLineNumber,ce=j.endColumn;if(!this._isValidPosition(ee,le,0)||!this._isValidPosition(ue,ce,0))return!1;if(Z===1){const pe=le>1?this._buffer.getLineCharCode(ee,le-2):0,ve=ce>1&&ce<=this._buffer.getLineLength(ue)?this._buffer.getLineCharCode(ue,ce-2):0,Ce=p.isHighSurrogate(pe),Se=p.isHighSurrogate(ve);return!Ce&&!Se}return!0}validateRange(j){if(this._assertNotDisposed(),j instanceof n.Range&&!(j instanceof t.Selection)&&this._isValidRange(j,1))return j;const ee=this._validatePosition(j.startLineNumber,j.startColumn,0),le=this._validatePosition(j.endLineNumber,j.endColumn,0),ue=ee.lineNumber,ce=ee.column,pe=le.lineNumber,ve=le.column;{const Ce=ce>1?this._buffer.getLineCharCode(ue,ce-2):0,Se=ve>1&&ve<=this._buffer.getLineLength(pe)?this._buffer.getLineCharCode(pe,ve-2):0,_e=p.isHighSurrogate(Ce),Ee=p.isHighSurrogate(Se);return!_e&&!Ee?new n.Range(ue,ce,pe,ve):ue===pe&&ce===ve?new n.Range(ue,ce-1,pe,ve-1):_e&&Ee?new n.Range(ue,ce-1,pe,ve+1):_e?new n.Range(ue,ce-1,pe,ve):new n.Range(ue,ce,pe,ve+1)}return new n.Range(ue,ce,pe,ve)}modifyPosition(j,Z){this._assertNotDisposed();const ee=this.getOffsetAt(j)+Z;return this.getPositionAt(Math.min(this._buffer.getLength(),Math.max(0,ee)))}getFullModelRange(){this._assertNotDisposed();const j=this.getLineCount();return new n.Range(1,1,j,this.getLineMaxColumn(j))}findMatchesLineByLine(j,Z,ee,le){return this._buffer.findMatchesLineByLine(j,Z,ee,le)}findMatches(j,Z,ee,le,ue,ce,pe=x){this._assertNotDisposed();let ve=null;Z!==null&&(Array.isArray(Z)||(Z=[Z]),Z.every(_e=>n.Range.isIRange(_e))&&(ve=Z.map(_e=>this.validateRange(_e)))),ve===null&&(ve=[this.getFullModelRange()]),ve=ve.sort((_e,Ee)=>_e.startLineNumber-Ee.startLineNumber||_e.startColumn-Ee.startColumn);const Ce=[];Ce.push(ve.reduce((_e,Ee)=>n.Range.areIntersecting(_e,Ee)?_e.plusRange(Ee):(Ce.push(_e),Ee)));let Se;if(!ee&&j.indexOf(`\n`)<0){const Ee=new w.SearchParams(j,ee,le,ue).parseSearchRequest();if(!Ee)return[];Se=Ae=>this.findMatchesLineByLine(Ae,Ee,ce,pe)}else Se=_e=>w.TextModelSearch.findMatches(this,new w.SearchParams(j,ee,le,ue),_e,ce,pe);return Ce.map(Se).reduce((_e,Ee)=>_e.concat(Ee),[])}findNextMatch(j,Z,ee,le,ue,ce){this._assertNotDisposed();const pe=this.validatePosition(Z);if(!ee&&j.indexOf(`\n`)<0){const Ce=new w.SearchParams(j,ee,le,ue).parseSearchRequest();if(!Ce)return null;const Se=this.getLineCount();let _e=new n.Range(pe.lineNumber,pe.column,Se,this.getLineMaxColumn(Se)),Ee=this.findMatchesLineByLine(_e,Ce,ce,1);return w.TextModelSearch.findNextMatch(this,new w.SearchParams(j,ee,le,ue),pe,ce),Ee.length>0||(_e=new n.Range(1,1,pe.lineNumber,this.getLineMaxColumn(pe.lineNumber)),Ee=this.findMatchesLineByLine(_e,Ce,ce,1),Ee.length>0)?Ee[0]:null}return w.TextModelSearch.findNextMatch(this,new w.SearchParams(j,ee,le,ue),pe,ce)}findPreviousMatch(j,Z,ee,le,ue,ce){this._assertNotDisposed();const pe=this.validatePosition(Z);return w.TextModelSearch.findPreviousMatch(this,new w.SearchParams(j,ee,le,ue),pe,ce)}pushStackElement(){this._commandManager.pushStackElement()}popStackElement(){this._commandManager.popStackElement()}pushEOL(j){if((this.getEOL()===`\n`?0:1)!==j)try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._initialUndoRedoSnapshot===null&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEOL(j)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_validateEditOperation(j){return j instanceof c.ValidAnnotatedEditOperation?j:new c.ValidAnnotatedEditOperation(j.identifier||null,this.validateRange(j.range),j.text,j.forceMoveMarkers||!1,j.isAutoWhitespaceEdit||!1,j._isTracked||!1)}_validateEditOperations(j){const Z=[];for(let ee=0,le=j.length;ee<le;ee++)Z[ee]=this._validateEditOperation(j[ee]);return Z}pushEditOperations(j,Z,ee,le){try{return this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._pushEditOperations(j,this._validateEditOperations(Z),ee,le)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_pushEditOperations(j,Z,ee,le){if(this._options.trimAutoWhitespace&&this._trimAutoWhitespaceLines){const ue=Z.map(pe=>({range:this.validateRange(pe.range),text:pe.text}));let ce=!0;if(j)for(let pe=0,ve=j.length;pe<ve;pe++){const Ce=j[pe];let Se=!1;for(let _e=0,Ee=ue.length;_e<Ee;_e++){const Ae=ue[_e].range,xe=Ae.startLineNumber>Ce.endLineNumber,Be=Ce.startLineNumber>Ae.endLineNumber;if(!xe&&!Be){Se=!0;break}}if(!Se){ce=!1;break}}if(ce)for(let pe=0,ve=this._trimAutoWhitespaceLines.length;pe<ve;pe++){const Ce=this._trimAutoWhitespaceLines[pe],Se=this.getLineMaxColumn(Ce);let _e=!0;for(let Ee=0,Ae=ue.length;Ee<Ae;Ee++){const xe=ue[Ee].range,Be=ue[Ee].text;if(!(Ce<xe.startLineNumber||Ce>xe.endLineNumber)&&!(Ce===xe.startLineNumber&&xe.startColumn===Se&&xe.isEmpty()&&Be&&Be.length>0&&Be.charAt(0)===`\n`)&&!(Ce===xe.startLineNumber&&xe.startColumn===1&&xe.isEmpty()&&Be&&Be.length>0&&Be.charAt(Be.length-1)===`\n`)){_e=!1;break}}if(_e){const Ee=new n.Range(Ce,1,Ce,Se);Z.push(new c.ValidAnnotatedEditOperation(null,Ee,null,!1,!1,!1))}}this._trimAutoWhitespaceLines=null}return this._initialUndoRedoSnapshot===null&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEditOperation(j,Z,ee,le)}_applyUndo(j,Z,ee,le){const ue=j.map(ce=>{const pe=this.getPositionAt(ce.newPosition),ve=this.getPositionAt(ce.newEnd);return{range:new n.Range(pe.lineNumber,pe.column,ve.lineNumber,ve.column),text:ce.oldText}});this._applyUndoRedoEdits(ue,Z,!0,!1,ee,le)}_applyRedo(j,Z,ee,le){const ue=j.map(ce=>{const pe=this.getPositionAt(ce.oldPosition),ve=this.getPositionAt(ce.oldEnd);return{range:new n.Range(pe.lineNumber,pe.column,ve.lineNumber,ve.column),text:ce.newText}});this._applyUndoRedoEdits(ue,Z,!1,!0,ee,le)}_applyUndoRedoEdits(j,Z,ee,le,ue,ce){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._isUndoing=ee,this._isRedoing=le,this.applyEdits(j,!1),this.setEOL(Z),this._overwriteAlternativeVersionId(ue)}finally{this._isUndoing=!1,this._isRedoing=!1,this._eventEmitter.endDeferredEmit(ce),this._onDidChangeDecorations.endDeferredEmit()}}applyEdits(j,Z=!1){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit();const ee=this._validateEditOperations(j);return this._doApplyEdits(ee,Z)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_doApplyEdits(j,Z){const ee=this._buffer.getLineCount(),le=this._buffer.applyEdits(j,this._options.trimAutoWhitespace,Z),ue=this._buffer.getLineCount(),ce=le.changes;if(this._trimAutoWhitespaceLines=le.trimAutoWhitespaceLineNumbers,ce.length!==0){for(let Ce=0,Se=ce.length;Ce<Se;Ce++){const _e=ce[Ce];this._decorationsTree.acceptReplace(_e.rangeOffset,_e.rangeLength,_e.text.length,_e.forceMoveMarkers)}const pe=[];this._increaseVersionId();let ve=ee;for(let Ce=0,Se=ce.length;Ce<Se;Ce++){const _e=ce[Ce],[Ee]=(0,v.countEOL)(_e.text);this._onDidChangeDecorations.fire();const Ae=_e.range.startLineNumber,xe=_e.range.endLineNumber,Be=xe-Ae,De=Ee,Ie=Math.min(Be,De),fe=De-Be,be=ue-ve-fe+Ae,Ne=be,Pe=be+De,ze=this._decorationsTree.getInjectedTextInInterval(this,this.getOffsetAt(new i.Position(Ne,1)),this.getOffsetAt(new i.Position(Pe,this.getLineMaxColumn(Pe))),0),Ke=I.LineInjectedText.fromDecorations(ze),je=new L.ArrayQueue(Ke);for(let Je=Ie;Je>=0;Je--){const rt=Ae+Je,et=be+Je;je.takeFromEndWhile(Qe=>Qe.lineNumber>et);const st=je.takeFromEndWhile(Qe=>Qe.lineNumber===et);pe.push(new I.ModelRawLineChanged(rt,this.getLineContent(et),st))}if(Ie<Be){const Je=Ae+Ie;pe.push(new I.ModelRawLinesDeleted(Je+1,xe))}if(Ie<De){const Je=new L.ArrayQueue(Ke),rt=Ae+Ie,et=De-Ie,st=ue-ve-et+rt+1,Qe=[],ft=[];for(let at=0;at<et;at++){const ct=st+at;ft[at]=this.getLineContent(ct),Je.takeWhile(lt=>lt.lineNumber<ct),Qe[at]=Je.takeWhile(lt=>lt.lineNumber===ct)}pe.push(new I.ModelRawLinesInserted(rt+1,Ae+De,ft,Qe))}ve+=fe}this._emitContentChangedEvent(new I.ModelRawContentChangedEvent(pe,this.getVersionId(),this._isUndoing,this._isRedoing),{changes:ce,eol:this._buffer.getEOL(),isEolChange:!1,versionId:this.getVersionId(),isUndoing:this._isUndoing,isRedoing:this._isRedoing,isFlush:!1})}return le.reverseEdits===null?void 0:le.reverseEdits}undo(){return this._undoRedoService.undo(this.uri)}canUndo(){return this._undoRedoService.canUndo(this.uri)}redo(){return this._undoRedoService.redo(this.uri)}canRedo(){return this._undoRedoService.canRedo(this.uri)}handleBeforeFireDecorationsChangedEvent(j){if(j===null||j.size===0)return;const ee=Array.from(j).map(le=>new I.ModelRawLineChanged(le,this.getLineContent(le),this._getInjectedTextInLine(le)));this._onDidChangeInjectedText.fire(new I.ModelInjectedTextChangedEvent(ee))}changeDecorations(j,Z=0){this._assertNotDisposed();try{return this._onDidChangeDecorations.beginDeferredEmit(),this._changeDecorations(Z,j)}finally{this._onDidChangeDecorations.endDeferredEmit()}}_changeDecorations(j,Z){const ee={addDecoration:(ue,ce)=>this._deltaDecorationsImpl(j,[],[{range:ue,options:ce}])[0],changeDecoration:(ue,ce)=>{this._changeDecorationImpl(ue,ce)},changeDecorationOptions:(ue,ce)=>{this._changeDecorationOptionsImpl(ue,X(ce))},removeDecoration:ue=>{this._deltaDecorationsImpl(j,[ue],[])},deltaDecorations:(ue,ce)=>ue.length===0&&ce.length===0?[]:this._deltaDecorationsImpl(j,ue,ce)};let le=null;try{le=Z(ee)}catch(ue){(0,y.onUnexpectedError)(ue)}return ee.addDecoration=W,ee.changeDecoration=W,ee.changeDecorationOptions=W,ee.removeDecoration=W,ee.deltaDecorations=W,le}deltaDecorations(j,Z,ee=0){if(this._assertNotDisposed(),j||(j=[]),j.length===0&&Z.length===0)return[];try{return this._deltaDecorationCallCnt++,this._deltaDecorationCallCnt>1&&(console.warn(\"Invoking deltaDecorations recursively could lead to leaking decorations.\"),(0,y.onUnexpectedError)(new Error(\"Invoking deltaDecorations recursively could lead to leaking decorations.\"))),this._onDidChangeDecorations.beginDeferredEmit(),this._deltaDecorationsImpl(ee,j,Z)}finally{this._onDidChangeDecorations.endDeferredEmit(),this._deltaDecorationCallCnt--}}_getTrackedRange(j){return this.getDecorationRange(j)}_setTrackedRange(j,Z,ee){const le=j?this._decorations[j]:null;if(!le)return Z?this._deltaDecorationsImpl(0,[],[{range:Z,options:me[ee]}],!0)[0]:null;if(!Z)return this._decorationsTree.delete(le),delete this._decorations[le.id],null;const ue=this._validateRangeRelaxedNoAllocations(Z),ce=this._buffer.getOffsetAt(ue.startLineNumber,ue.startColumn),pe=this._buffer.getOffsetAt(ue.endLineNumber,ue.endColumn);return this._decorationsTree.delete(le),le.reset(this.getVersionId(),ce,pe,ue),le.setOptions(me[ee]),this._decorationsTree.insert(le),le.id}removeAllDecorationsWithOwnerId(j){if(this._isDisposed)return;const Z=this._decorationsTree.collectNodesFromOwner(j);for(let ee=0,le=Z.length;ee<le;ee++){const ue=Z[ee];this._decorationsTree.delete(ue),delete this._decorations[ue.id]}}getDecorationOptions(j){const Z=this._decorations[j];return Z?Z.options:null}getDecorationRange(j){const Z=this._decorations[j];return Z?this._decorationsTree.getNodeRange(this,Z):null}getLineDecorations(j,Z=0,ee=!1){return j<1||j>this.getLineCount()?[]:this.getLinesDecorations(j,j,Z,ee)}getLinesDecorations(j,Z,ee=0,le=!1,ue=!1){const ce=this.getLineCount(),pe=Math.min(ce,Math.max(1,j)),ve=Math.min(ce,Math.max(1,Z)),Ce=this.getLineMaxColumn(ve),Se=new n.Range(pe,1,ve,Ce),_e=this._getDecorationsInRange(Se,ee,le,ue);return(0,L.pushMany)(_e,this._decorationProvider.getDecorationsInRange(Se,ee,le)),_e}getDecorationsInRange(j,Z=0,ee=!1,le=!1,ue=!1){const ce=this.validateRange(j),pe=this._getDecorationsInRange(ce,Z,ee,ue);return(0,L.pushMany)(pe,this._decorationProvider.getDecorationsInRange(ce,Z,ee,le)),pe}getOverviewRulerDecorations(j=0,Z=!1){return this._decorationsTree.getAll(this,j,Z,!0,!1)}getInjectedTextDecorations(j=0){return this._decorationsTree.getAllInjectedText(this,j)}_getInjectedTextInLine(j){const Z=this._buffer.getOffsetAt(j,1),ee=Z+this._buffer.getLineLength(j),le=this._decorationsTree.getInjectedTextInInterval(this,Z,ee,0);return I.LineInjectedText.fromDecorations(le).filter(ue=>ue.lineNumber===j)}getAllDecorations(j=0,Z=!1){let ee=this._decorationsTree.getAll(this,j,Z,!1,!1);return ee=ee.concat(this._decorationProvider.getAllDecorations(j,Z)),ee}getAllMarginDecorations(j=0){return this._decorationsTree.getAll(this,j,!1,!1,!0)}_getDecorationsInRange(j,Z,ee,le){const ue=this._buffer.getOffsetAt(j.startLineNumber,j.startColumn),ce=this._buffer.getOffsetAt(j.endLineNumber,j.endColumn);return this._decorationsTree.getAllInInterval(this,ue,ce,Z,ee,le)}getRangeAt(j,Z){return this._buffer.getRangeAt(j,Z-j)}_changeDecorationImpl(j,Z){const ee=this._decorations[j];if(!ee)return;if(ee.options.after){const pe=this.getDecorationRange(j);this._onDidChangeDecorations.recordLineAffectedByInjectedText(pe.endLineNumber)}if(ee.options.before){const pe=this.getDecorationRange(j);this._onDidChangeDecorations.recordLineAffectedByInjectedText(pe.startLineNumber)}const le=this._validateRangeRelaxedNoAllocations(Z),ue=this._buffer.getOffsetAt(le.startLineNumber,le.startColumn),ce=this._buffer.getOffsetAt(le.endLineNumber,le.endColumn);this._decorationsTree.delete(ee),ee.reset(this.getVersionId(),ue,ce,le),this._decorationsTree.insert(ee),this._onDidChangeDecorations.checkAffectedAndFire(ee.options),ee.options.after&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(le.endLineNumber),ee.options.before&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(le.startLineNumber)}_changeDecorationOptionsImpl(j,Z){const ee=this._decorations[j];if(!ee)return;const le=!!(ee.options.overviewRuler&&ee.options.overviewRuler.color),ue=!!(Z.overviewRuler&&Z.overviewRuler.color);if(this._onDidChangeDecorations.checkAffectedAndFire(ee.options),this._onDidChangeDecorations.checkAffectedAndFire(Z),ee.options.after||Z.after){const ve=this._decorationsTree.getNodeRange(this,ee);this._onDidChangeDecorations.recordLineAffectedByInjectedText(ve.endLineNumber)}if(ee.options.before||Z.before){const ve=this._decorationsTree.getNodeRange(this,ee);this._onDidChangeDecorations.recordLineAffectedByInjectedText(ve.startLineNumber)}const ce=le!==ue,pe=q(Z)!==ie(ee);ce||pe?(this._decorationsTree.delete(ee),ee.setOptions(Z),this._decorationsTree.insert(ee)):ee.setOptions(Z)}_deltaDecorationsImpl(j,Z,ee,le=!1){const ue=this.getVersionId(),ce=Z.length;let pe=0;const ve=ee.length;let Ce=0;this._onDidChangeDecorations.beginDeferredEmit();try{const Se=new Array(ve);for(;pe<ce||Ce<ve;){let _e=null;if(pe<ce){do _e=this._decorations[Z[pe++]];while(!_e&&pe<ce);if(_e){if(_e.options.after){const Ee=this._decorationsTree.getNodeRange(this,_e);this._onDidChangeDecorations.recordLineAffectedByInjectedText(Ee.endLineNumber)}if(_e.options.before){const Ee=this._decorationsTree.getNodeRange(this,_e);this._onDidChangeDecorations.recordLineAffectedByInjectedText(Ee.startLineNumber)}this._decorationsTree.delete(_e),le||this._onDidChangeDecorations.checkAffectedAndFire(_e.options)}}if(Ce<ve){if(!_e){const Ie=++this._lastDecorationId,fe=`${this._instanceId};${Ie}`;_e=new h.IntervalNode(fe,0,0),this._decorations[fe]=_e}const Ee=ee[Ce],Ae=this._validateRangeRelaxedNoAllocations(Ee.range),xe=X(Ee.options),Be=this._buffer.getOffsetAt(Ae.startLineNumber,Ae.startColumn),De=this._buffer.getOffsetAt(Ae.endLineNumber,Ae.endColumn);_e.ownerId=j,_e.reset(ue,Be,De,Ae),_e.setOptions(xe),_e.options.after&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(Ae.endLineNumber),_e.options.before&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(Ae.startLineNumber),le||this._onDidChangeDecorations.checkAffectedAndFire(xe),this._decorationsTree.insert(_e),Se[Ce]=_e.id,Ce++}else _e&&delete this._decorations[_e.id]}return Se}finally{this._onDidChangeDecorations.endDeferredEmit()}}getLanguageId(){return this.tokenization.getLanguageId()}setLanguage(j,Z){typeof j==\"string\"?(this._languageSelectionListener.clear(),this._setLanguage(j,Z)):(this._languageSelectionListener.value=j.onDidChange(()=>this._setLanguage(j.languageId,Z)),this._setLanguage(j.languageId,Z))}_setLanguage(j,Z){this.tokenization.setLanguageId(j,Z),this._languageService.requestRichLanguageFeatures(j)}getLanguageIdAtPosition(j,Z){return this.tokenization.getLanguageIdAtPosition(j,Z)}getWordAtPosition(j){return this._tokenizationTextModelPart.getWordAtPosition(j)}getWordUntilPosition(j){return this._tokenizationTextModelPart.getWordUntilPosition(j)}normalizePosition(j,Z){return j}getLineIndentColumn(j){return K(this.getLineContent(j))+1}};e.TextModel=V,V._MODEL_SYNC_LIMIT=50*1024*1024,V.LARGE_FILE_SIZE_THRESHOLD=20*1024*1024,V.LARGE_FILE_LINE_COUNT_THRESHOLD=300*1e3,V.LARGE_FILE_HEAP_OPERATION_THRESHOLD=256*1024*1024,V.DEFAULT_CREATION_OPTIONS={isForSimpleWidget:!1,tabSize:r.EDITOR_MODEL_DEFAULTS.tabSize,indentSize:r.EDITOR_MODEL_DEFAULTS.indentSize,insertSpaces:r.EDITOR_MODEL_DEFAULTS.insertSpaces,detectIndentation:!1,defaultEOL:1,trimAutoWhitespace:r.EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,largeFileOptimizations:r.EDITOR_MODEL_DEFAULTS.largeFileOptimizations,bracketPairColorizationOptions:r.EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions},e.TextModel=V=A=ke([ge(4,T.IUndoRedoService),ge(5,u.ILanguageService),ge(6,f.ILanguageConfigurationService)],V);function K(Y){let j=0;for(const Z of Y)if(Z===\" \"||Z===\"\t\")j++;else break;return j}function F(Y){return!!(Y.options.overviewRuler&&Y.options.overviewRuler.color)}function q(Y){return!!Y.after||!!Y.before}function ie(Y){return!!Y.options.after||!!Y.options.before}class ae{constructor(){this._decorationsTree0=new h.IntervalTree,this._decorationsTree1=new h.IntervalTree,this._injectedTextDecorationsTree=new h.IntervalTree}ensureAllNodesHaveRanges(j){this.getAll(j,0,!1,!1,!1)}_ensureNodesHaveRanges(j,Z){for(const ee of Z)ee.range===null&&(ee.range=j.getRangeAt(ee.cachedAbsoluteStart,ee.cachedAbsoluteEnd));return Z}getAllInInterval(j,Z,ee,le,ue,ce){const pe=j.getVersionId(),ve=this._intervalSearch(Z,ee,le,ue,pe,ce);return this._ensureNodesHaveRanges(j,ve)}_intervalSearch(j,Z,ee,le,ue,ce){const pe=this._decorationsTree0.intervalSearch(j,Z,ee,le,ue,ce),ve=this._decorationsTree1.intervalSearch(j,Z,ee,le,ue,ce),Ce=this._injectedTextDecorationsTree.intervalSearch(j,Z,ee,le,ue,ce);return pe.concat(ve).concat(Ce)}getInjectedTextInInterval(j,Z,ee,le){const ue=j.getVersionId(),ce=this._injectedTextDecorationsTree.intervalSearch(Z,ee,le,!1,ue,!1);return this._ensureNodesHaveRanges(j,ce).filter(pe=>pe.options.showIfCollapsed||!pe.range.isEmpty())}getAllInjectedText(j,Z){const ee=j.getVersionId(),le=this._injectedTextDecorationsTree.search(Z,!1,ee,!1);return this._ensureNodesHaveRanges(j,le).filter(ue=>ue.options.showIfCollapsed||!ue.range.isEmpty())}getAll(j,Z,ee,le,ue){const ce=j.getVersionId(),pe=this._search(Z,ee,le,ce,ue);return this._ensureNodesHaveRanges(j,pe)}_search(j,Z,ee,le,ue){if(ee)return this._decorationsTree1.search(j,Z,le,ue);{const ce=this._decorationsTree0.search(j,Z,le,ue),pe=this._decorationsTree1.search(j,Z,le,ue),ve=this._injectedTextDecorationsTree.search(j,Z,le,ue);return ce.concat(pe).concat(ve)}}collectNodesFromOwner(j){const Z=this._decorationsTree0.collectNodesFromOwner(j),ee=this._decorationsTree1.collectNodesFromOwner(j),le=this._injectedTextDecorationsTree.collectNodesFromOwner(j);return Z.concat(ee).concat(le)}collectNodesPostOrder(){const j=this._decorationsTree0.collectNodesPostOrder(),Z=this._decorationsTree1.collectNodesPostOrder(),ee=this._injectedTextDecorationsTree.collectNodesPostOrder();return j.concat(Z).concat(ee)}insert(j){ie(j)?this._injectedTextDecorationsTree.insert(j):F(j)?this._decorationsTree1.insert(j):this._decorationsTree0.insert(j)}delete(j){ie(j)?this._injectedTextDecorationsTree.delete(j):F(j)?this._decorationsTree1.delete(j):this._decorationsTree0.delete(j)}getNodeRange(j,Z){const ee=j.getVersionId();return Z.cachedVersionId!==ee&&this._resolveNode(Z,ee),Z.range===null&&(Z.range=j.getRangeAt(Z.cachedAbsoluteStart,Z.cachedAbsoluteEnd)),Z.range}_resolveNode(j,Z){ie(j)?this._injectedTextDecorationsTree.resolveNode(j,Z):F(j)?this._decorationsTree1.resolveNode(j,Z):this._decorationsTree0.resolveNode(j,Z)}acceptReplace(j,Z,ee,le){this._decorationsTree0.acceptReplace(j,Z,ee,le),this._decorationsTree1.acceptReplace(j,Z,ee,le),this._injectedTextDecorationsTree.acceptReplace(j,Z,ee,le)}}function ne(Y){return Y.replace(/[^a-z0-9\\-_]/gi,\" \")}class ${constructor(j){this.color=j.color||\"\",this.darkColor=j.darkColor||\"\"}}class J extends ${constructor(j){super(j),this._resolvedColor=null,this.position=typeof j.position==\"number\"?j.position:c.OverviewRulerLane.Center}getColor(j){return this._resolvedColor||(j.type!==\"light\"&&this.darkColor?this._resolvedColor=this._resolveColor(this.darkColor,j):this._resolvedColor=this._resolveColor(this.color,j)),this._resolvedColor}invalidateCachedColor(){this._resolvedColor=null}_resolveColor(j,Z){if(typeof j==\"string\")return j;const ee=j?Z.getColor(j.id):null;return ee?ee.toString():\"\"}}e.ModelDecorationOverviewRulerOptions=J;class Q{constructor(j){var Z;this.position=(Z=j?.position)!==null&&Z!==void 0?Z:c.GlyphMarginLane.Center,this.persistLane=j?.persistLane}}e.ModelDecorationGlyphMarginOptions=Q;class re extends ${constructor(j){super(j),this.position=j.position}getColor(j){return this._resolvedColor||(j.type!==\"light\"&&this.darkColor?this._resolvedColor=this._resolveColor(this.darkColor,j):this._resolvedColor=this._resolveColor(this.color,j)),this._resolvedColor}invalidateCachedColor(){this._resolvedColor=void 0}_resolveColor(j,Z){return typeof j==\"string\"?k.Color.fromHex(j):Z.getColor(j.id)}}e.ModelDecorationMinimapOptions=re;class de{static from(j){return j instanceof de?j:new de(j)}constructor(j){this.content=j.content||\"\",this.inlineClassName=j.inlineClassName||null,this.inlineClassNameAffectsLetterSpacing=j.inlineClassNameAffectsLetterSpacing||!1,this.attachedData=j.attachedData||null,this.cursorStops=j.cursorStops||null}}e.ModelDecorationInjectedTextOptions=de;class he{static register(j){return new he(j)}static createDynamic(j){return new he(j)}constructor(j){var Z,ee,le,ue,ce,pe;this.description=j.description,this.blockClassName=j.blockClassName?ne(j.blockClassName):null,this.blockDoesNotCollapse=(Z=j.blockDoesNotCollapse)!==null&&Z!==void 0?Z:null,this.blockIsAfterEnd=(ee=j.blockIsAfterEnd)!==null&&ee!==void 0?ee:null,this.blockPadding=(le=j.blockPadding)!==null&&le!==void 0?le:null,this.stickiness=j.stickiness||0,this.zIndex=j.zIndex||0,this.className=j.className?ne(j.className):null,this.shouldFillLineOnLineBreak=(ue=j.shouldFillLineOnLineBreak)!==null&&ue!==void 0?ue:null,this.hoverMessage=j.hoverMessage||null,this.glyphMarginHoverMessage=j.glyphMarginHoverMessage||null,this.lineNumberHoverMessage=j.lineNumberHoverMessage||null,this.isWholeLine=j.isWholeLine||!1,this.showIfCollapsed=j.showIfCollapsed||!1,this.collapseOnReplaceEdit=j.collapseOnReplaceEdit||!1,this.overviewRuler=j.overviewRuler?new J(j.overviewRuler):null,this.minimap=j.minimap?new re(j.minimap):null,this.glyphMargin=j.glyphMarginClassName?new Q(j.glyphMargin):null,this.glyphMarginClassName=j.glyphMarginClassName?ne(j.glyphMarginClassName):null,this.linesDecorationsClassName=j.linesDecorationsClassName?ne(j.linesDecorationsClassName):null,this.lineNumberClassName=j.lineNumberClassName?ne(j.lineNumberClassName):null,this.linesDecorationsTooltip=j.linesDecorationsTooltip?p.htmlAttributeEncodeValue(j.linesDecorationsTooltip):null,this.firstLineDecorationClassName=j.firstLineDecorationClassName?ne(j.firstLineDecorationClassName):null,this.marginClassName=j.marginClassName?ne(j.marginClassName):null,this.inlineClassName=j.inlineClassName?ne(j.inlineClassName):null,this.inlineClassNameAffectsLetterSpacing=j.inlineClassNameAffectsLetterSpacing||!1,this.beforeContentClassName=j.beforeContentClassName?ne(j.beforeContentClassName):null,this.afterContentClassName=j.afterContentClassName?ne(j.afterContentClassName):null,this.after=j.after?de.from(j.after):null,this.before=j.before?de.from(j.before):null,this.hideInCommentTokens=(ce=j.hideInCommentTokens)!==null&&ce!==void 0?ce:!1,this.hideInStringTokens=(pe=j.hideInStringTokens)!==null&&pe!==void 0?pe:!1}}e.ModelDecorationOptions=he,he.EMPTY=he.register({description:\"empty\"});const me=[he.register({description:\"tracked-range-always-grows-when-typing-at-edges\",stickiness:0}),he.register({description:\"tracked-range-never-grows-when-typing-at-edges\",stickiness:1}),he.register({description:\"tracked-range-grows-only-when-typing-before\",stickiness:2}),he.register({description:\"tracked-range-grows-only-when-typing-after\",stickiness:3})];function X(Y){return Y instanceof he?Y:he.createDynamic(Y)}class U extends S.Disposable{constructor(j){super(),this.handleBeforeFire=j,this._actual=this._register(new E.Emitter),this.event=this._actual.event,this._affectedInjectedTextLines=null,this._deferredCnt=0,this._shouldFireDeferred=!1,this._affectsMinimap=!1,this._affectsOverviewRuler=!1,this._affectsGlyphMargin=!1,this._affectsLineNumber=!1}beginDeferredEmit(){this._deferredCnt++}endDeferredEmit(){var j;this._deferredCnt--,this._deferredCnt===0&&(this._shouldFireDeferred&&this.doFire(),(j=this._affectedInjectedTextLines)===null||j===void 0||j.clear(),this._affectedInjectedTextLines=null)}recordLineAffectedByInjectedText(j){this._affectedInjectedTextLines||(this._affectedInjectedTextLines=new Set),this._affectedInjectedTextLines.add(j)}checkAffectedAndFire(j){var Z,ee;this._affectsMinimap||(this._affectsMinimap=!!(!((Z=j.minimap)===null||Z===void 0)&&Z.position)),this._affectsOverviewRuler||(this._affectsOverviewRuler=!!(!((ee=j.overviewRuler)===null||ee===void 0)&&ee.color)),this._affectsGlyphMargin||(this._affectsGlyphMargin=!!j.glyphMarginClassName),this._affectsLineNumber||(this._affectsLineNumber=!!j.lineNumberClassName),this.tryFire()}fire(){this._affectsMinimap=!0,this._affectsOverviewRuler=!0,this._affectsGlyphMargin=!0,this.tryFire()}tryFire(){this._deferredCnt===0?this.doFire():this._shouldFireDeferred=!0}doFire(){this.handleBeforeFire(this._affectedInjectedTextLines);const j={affectsMinimap:this._affectsMinimap,affectsOverviewRuler:this._affectsOverviewRuler,affectsGlyphMargin:this._affectsGlyphMargin,affectsLineNumber:this._affectsLineNumber};this._shouldFireDeferred=!1,this._affectsMinimap=!1,this._affectsOverviewRuler=!1,this._affectsGlyphMargin=!1,this._actual.fire(j)}}class G extends S.Disposable{constructor(){super(),this._fastEmitter=this._register(new E.Emitter),this.fastEvent=this._fastEmitter.event,this._slowEmitter=this._register(new E.Emitter),this.slowEvent=this._slowEmitter.event,this._deferredCnt=0,this._deferredEvent=null}beginDeferredEmit(){this._deferredCnt++}endDeferredEmit(j=null){if(this._deferredCnt--,this._deferredCnt===0&&this._deferredEvent!==null){this._deferredEvent.rawContentChangedEvent.resultingSelection=j;const Z=this._deferredEvent;this._deferredEvent=null,this._fastEmitter.fire(Z),this._slowEmitter.fire(Z)}}fire(j){if(this._deferredCnt>0){this._deferredEvent?this._deferredEvent=this._deferredEvent.merge(j):this._deferredEvent=j;return}this._fastEmitter.fire(j),this._slowEmitter.fire(j)}}class z{constructor(){this._onDidChangeVisibleRanges=new E.Emitter,this.onDidChangeVisibleRanges=this._onDidChangeVisibleRanges.event,this._views=new Set}attachView(){const j=new H(Z=>{this._onDidChangeVisibleRanges.fire({view:j,state:Z})});return this._views.add(j),j}detachView(j){this._views.delete(j),this._onDidChangeVisibleRanges.fire({view:j,state:void 0})}}e.AttachedViews=z;class H{constructor(j){this.handleStateChange=j}setVisibleLines(j,Z){const ee=j.map(le=>new a.LineRange(le.startLineNumber,le.endLineNumber+1));this.handleStateChange({visibleLineRanges:ee,stabilized:Z})}}}),define(se[258],oe([1,0,26,28,38,631,29,82]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.diffDeleteDecorationEmpty=e.diffWholeLineDeleteDecoration=e.diffDeleteDecoration=e.diffAddDecorationEmpty=e.diffWholeLineAddDecoration=e.diffAddDecoration=e.diffLineDeleteDecorationBackground=e.diffLineAddDecorationBackground=e.diffLineDeleteDecorationBackgroundWithIndicator=e.diffLineAddDecorationBackgroundWithIndicator=e.diffRemoveIcon=e.diffInsertIcon=e.diffEditorUnchangedRegionShadow=e.diffMoveBorderActive=e.diffMoveBorder=void 0,e.diffMoveBorder=(0,S.registerColor)(\"diffEditor.move.border\",{dark:\"#8b8b8b9c\",light:\"#8b8b8b9c\",hcDark:\"#8b8b8b9c\",hcLight:\"#8b8b8b9c\"},(0,E.localize)(0,null)),e.diffMoveBorderActive=(0,S.registerColor)(\"diffEditor.moveActive.border\",{dark:\"#FFA500\",light:\"#FFA500\",hcDark:\"#FFA500\",hcLight:\"#FFA500\"},(0,E.localize)(1,null)),e.diffEditorUnchangedRegionShadow=(0,S.registerColor)(\"diffEditor.unchangedRegionShadow\",{dark:\"#000000\",light:\"#737373BF\",hcDark:\"#000000\",hcLight:\"#737373BF\"},(0,E.localize)(2,null)),e.diffInsertIcon=(0,p.registerIcon)(\"diff-insert\",L.Codicon.add,(0,E.localize)(3,null)),e.diffRemoveIcon=(0,p.registerIcon)(\"diff-remove\",L.Codicon.remove,(0,E.localize)(4,null)),e.diffLineAddDecorationBackgroundWithIndicator=y.ModelDecorationOptions.register({className:\"line-insert\",description:\"line-insert\",isWholeLine:!0,linesDecorationsClassName:\"insert-sign \"+k.ThemeIcon.asClassName(e.diffInsertIcon),marginClassName:\"gutter-insert\"}),e.diffLineDeleteDecorationBackgroundWithIndicator=y.ModelDecorationOptions.register({className:\"line-delete\",description:\"line-delete\",isWholeLine:!0,linesDecorationsClassName:\"delete-sign \"+k.ThemeIcon.asClassName(e.diffRemoveIcon),marginClassName:\"gutter-delete\"}),e.diffLineAddDecorationBackground=y.ModelDecorationOptions.register({className:\"line-insert\",description:\"line-insert\",isWholeLine:!0,marginClassName:\"gutter-insert\"}),e.diffLineDeleteDecorationBackground=y.ModelDecorationOptions.register({className:\"line-delete\",description:\"line-delete\",isWholeLine:!0,marginClassName:\"gutter-delete\"}),e.diffAddDecoration=y.ModelDecorationOptions.register({className:\"char-insert\",description:\"char-insert\",shouldFillLineOnLineBreak:!0}),e.diffWholeLineAddDecoration=y.ModelDecorationOptions.register({className:\"char-insert\",description:\"char-insert\",isWholeLine:!0}),e.diffAddDecorationEmpty=y.ModelDecorationOptions.register({className:\"char-insert diff-range-empty\",description:\"char-insert diff-range-empty\"}),e.diffDeleteDecoration=y.ModelDecorationOptions.register({className:\"char-delete\",description:\"char-delete\",shouldFillLineOnLineBreak:!0}),e.diffWholeLineDeleteDecoration=y.ModelDecorationOptions.register({className:\"char-delete\",description:\"char-delete\",isWholeLine:!0}),e.diffDeleteDecorationEmpty=y.ModelDecorationOptions.register({className:\"char-delete diff-range-empty\",description:\"char-delete diff-range-empty\"})}),define(se[881],oe([1,0,2,35,334,258,87]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DiffEditorDecorations=void 0;class p extends L.Disposable{constructor(v,b,a,i){super(),this._editors=v,this._diffModel=b,this._options=a,this._decorations=(0,k.derived)(this,n=>{var t;const r=(t=this._diffModel.read(n))===null||t===void 0?void 0:t.diff.read(n);if(!r)return null;const u=this._diffModel.read(n).movedTextToCompare.read(n),f=this._options.renderIndicators.read(n),c=this._options.showEmptyDecorations.read(n),d=[],s=[];if(!u)for(const o of r.mappings)if(o.lineRangeMapping.original.isEmpty||d.push({range:o.lineRangeMapping.original.toInclusiveRange(),options:f?E.diffLineDeleteDecorationBackgroundWithIndicator:E.diffLineDeleteDecorationBackground}),o.lineRangeMapping.modified.isEmpty||s.push({range:o.lineRangeMapping.modified.toInclusiveRange(),options:f?E.diffLineAddDecorationBackgroundWithIndicator:E.diffLineAddDecorationBackground}),o.lineRangeMapping.modified.isEmpty||o.lineRangeMapping.original.isEmpty)o.lineRangeMapping.original.isEmpty||d.push({range:o.lineRangeMapping.original.toInclusiveRange(),options:E.diffWholeLineDeleteDecoration}),o.lineRangeMapping.modified.isEmpty||s.push({range:o.lineRangeMapping.modified.toInclusiveRange(),options:E.diffWholeLineAddDecoration});else for(const g of o.lineRangeMapping.innerChanges||[])o.lineRangeMapping.original.contains(g.originalRange.startLineNumber)&&d.push({range:g.originalRange,options:g.originalRange.isEmpty()&&c?E.diffDeleteDecorationEmpty:E.diffDeleteDecoration}),o.lineRangeMapping.modified.contains(g.modifiedRange.startLineNumber)&&s.push({range:g.modifiedRange,options:g.modifiedRange.isEmpty()&&c?E.diffAddDecorationEmpty:E.diffAddDecoration});if(u)for(const o of u.changes){const g=o.original.toInclusiveRange();g&&d.push({range:g,options:f?E.diffLineDeleteDecorationBackgroundWithIndicator:E.diffLineDeleteDecorationBackground});const h=o.modified.toInclusiveRange();h&&s.push({range:h,options:f?E.diffLineAddDecorationBackgroundWithIndicator:E.diffLineAddDecorationBackground});for(const m of o.innerChanges||[])d.push({range:m.originalRange,options:E.diffDeleteDecoration}),s.push({range:m.modifiedRange,options:E.diffAddDecoration})}const l=this._diffModel.read(n).activeMovedText.read(n);for(const o of r.movedTexts)d.push({range:o.lineRangeMapping.original.toInclusiveRange(),options:{description:\"moved\",blockClassName:\"movedOriginal\"+(o===l?\" currentMove\":\"\"),blockPadding:[y.MovedBlocksLinesFeature.movedCodeBlockPadding,0,y.MovedBlocksLinesFeature.movedCodeBlockPadding,y.MovedBlocksLinesFeature.movedCodeBlockPadding]}}),s.push({range:o.lineRangeMapping.modified.toInclusiveRange(),options:{description:\"moved\",blockClassName:\"movedModified\"+(o===l?\" currentMove\":\"\"),blockPadding:[4,0,4,4]}});return{originalDecorations:d,modifiedDecorations:s}}),this._register((0,S.applyObservableDecorations)(this._editors.original,this._decorations.map(n=>n?.originalDecorations||[]))),this._register((0,S.applyObservableDecorations)(this._editors.modified,this._decorations.map(n=>n?.modifiedDecorations||[])))}}e.DiffEditorDecorations=p}),define(se[882],oe([1,0,7,13,14,26,2,35,28,20,72,258,359,625,648,87,62,10,86,103,59]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DiffEditorViewZones=void 0;let l=class extends S.Disposable{constructor(m,C,w,D,I,T,A,P,N,M){super(),this._targetWindow=m,this._editors=C,this._diffModel=w,this._options=D,this._diffEditorWidget=I,this._canIgnoreViewZoneUpdateEvent=T,this._origViewZonesToIgnore=A,this._modViewZonesToIgnore=P,this._clipboardService=N,this._contextMenuService=M,this._originalTopPadding=(0,p.observableValue)(this,0),this._originalScrollOffset=(0,p.observableValue)(this,0),this._originalScrollOffsetAnimated=(0,r.animatedObservable)(this._targetWindow,this._originalScrollOffset,this._store),this._modifiedTopPadding=(0,p.observableValue)(this,0),this._modifiedScrollOffset=(0,p.observableValue)(this,0),this._modifiedScrollOffsetAnimated=(0,r.animatedObservable)(this._targetWindow,this._modifiedScrollOffset,this._store);const R=(0,p.observableValue)(\"invalidateAlignmentsState\",0),x=this._register(new y.RunOnceScheduler(()=>{R.set(R.get()+1,void 0)},0));this._register(this._editors.original.onDidChangeViewZones(q=>{this._canIgnoreViewZoneUpdateEvent()||x.schedule()})),this._register(this._editors.modified.onDidChangeViewZones(q=>{this._canIgnoreViewZoneUpdateEvent()||x.schedule()})),this._register(this._editors.original.onDidChangeConfiguration(q=>{(q.hasChanged(144)||q.hasChanged(66))&&x.schedule()})),this._register(this._editors.modified.onDidChangeConfiguration(q=>{(q.hasChanged(144)||q.hasChanged(66))&&x.schedule()}));const O=this._diffModel.map(q=>q?(0,p.observableFromEvent)(q.model.original.onDidChangeTokens,()=>q.model.original.tokenization.backgroundTokenizationState===2):void 0).map((q,ie)=>q?.read(ie)),B=(0,p.derived)(q=>{const ie=this._diffModel.read(q),ae=ie?.diff.read(q);if(!ie||!ae)return null;R.read(q);const $=this._options.renderSideBySide.read(q);return o(this._editors.original,this._editors.modified,ae.mappings,this._origViewZonesToIgnore,this._modViewZonesToIgnore,$)}),W=(0,p.derived)(q=>{var ie;const ae=(ie=this._diffModel.read(q))===null||ie===void 0?void 0:ie.movedTextToCompare.read(q);if(!ae)return null;R.read(q);const ne=ae.changes.map($=>new i.DiffMapping($));return o(this._editors.original,this._editors.modified,ne,this._origViewZonesToIgnore,this._modViewZonesToIgnore,!0)});function V(){const q=document.createElement(\"div\");return q.className=\"diagonal-fill\",q}const K=this._register(new S.DisposableStore);this.viewZones=(0,p.derivedWithStore)(this,(q,ie)=>{var ae,ne,$,J,Q,re,de,he;K.clear();const me=B.read(q)||[],X=[],U=[],G=this._modifiedTopPadding.read(q);G>0&&U.push({afterLineNumber:0,domNode:document.createElement(\"div\"),heightInPx:G,showInHiddenAreas:!0,suppressMouseDown:!0});const z=this._originalTopPadding.read(q);z>0&&X.push({afterLineNumber:0,domNode:document.createElement(\"div\"),heightInPx:z,showInHiddenAreas:!0,suppressMouseDown:!0});const H=this._options.renderSideBySide.read(q),Y=H||(ae=this._editors.modified._getViewModel())===null||ae===void 0?void 0:ae.createLineBreaksComputer();if(Y){const ve=this._editors.original.getModel();for(const Ce of me)if(Ce.diff)for(let Se=Ce.originalRange.startLineNumber;Se<Ce.originalRange.endLineNumberExclusive;Se++){if(Se>ve.getLineCount())return{orig:X,mod:U};Y?.addRequest(ve.getLineContent(Se),null,null)}}const j=(ne=Y?.finalize())!==null&&ne!==void 0?ne:[];let Z=0;const ee=this._editors.modified.getOption(66),le=($=this._diffModel.read(q))===null||$===void 0?void 0:$.movedTextToCompare.read(q),ue=(Q=(J=this._editors.original.getModel())===null||J===void 0?void 0:J.mightContainNonBasicASCII())!==null&&Q!==void 0?Q:!1,ce=(de=(re=this._editors.original.getModel())===null||re===void 0?void 0:re.mightContainRTL())!==null&&de!==void 0?de:!1,pe=t.RenderOptions.fromEditor(this._editors.modified);for(const ve of me)if(ve.diff&&!H){if(!ve.originalRange.isEmpty){O.read(q);const Se=document.createElement(\"div\");Se.classList.add(\"view-lines\",\"line-delete\",\"monaco-mouse-cursor-text\");const _e=this._editors.original.getModel();if(ve.originalRange.endLineNumberExclusive-1>_e.getLineCount())return{orig:X,mod:U};const Ee=new t.LineSource(ve.originalRange.mapToLineArray(Ie=>_e.tokenization.getLineTokens(Ie)),ve.originalRange.mapToLineArray(Ie=>j[Z++]),ue,ce),Ae=[];for(const Ie of ve.diff.innerChanges||[])Ae.push(new c.InlineDecoration(Ie.originalRange.delta(-(ve.diff.original.startLineNumber-1)),a.diffDeleteDecoration.className,0));const xe=(0,t.renderLines)(Ee,pe,Ae,Se),Be=document.createElement(\"div\");if(Be.className=\"inline-deleted-margin-view-zone\",(0,b.applyFontInfo)(Be,pe.fontInfo),this._options.renderIndicators.read(q))for(let Ie=0;Ie<xe.heightInLines;Ie++){const fe=document.createElement(\"div\");fe.className=`delete-sign ${_.ThemeIcon.asClassName(a.diffRemoveIcon)}`,fe.setAttribute(\"style\",`position:absolute;top:${Ie*ee}px;width:${pe.lineDecorationsWidth}px;height:${ee}px;right:0;`),Be.appendChild(fe)}let De;K.add(new n.InlineDiffDeletedCodeMargin(()=>(0,v.assertIsDefined)(De),Be,this._editors.modified,ve.diff,this._diffEditorWidget,xe.viewLineCounts,this._editors.original.getModel(),this._contextMenuService,this._clipboardService));for(let Ie=0;Ie<xe.viewLineCounts.length;Ie++){const fe=xe.viewLineCounts[Ie];fe>1&&X.push({afterLineNumber:ve.originalRange.startLineNumber+Ie,domNode:V(),heightInPx:(fe-1)*ee,showInHiddenAreas:!0,suppressMouseDown:!0})}U.push({afterLineNumber:ve.modifiedRange.startLineNumber-1,domNode:Se,heightInPx:xe.heightInLines*ee,minWidthInPx:xe.minWidthInPx,marginDomNode:Be,setZoneId(Ie){De=Ie},showInHiddenAreas:!0,suppressMouseDown:!0})}const Ce=document.createElement(\"div\");Ce.className=\"gutter-delete\",X.push({afterLineNumber:ve.originalRange.endLineNumberExclusive-1,domNode:V(),heightInPx:ve.modifiedHeightInPx,marginDomNode:Ce,showInHiddenAreas:!0,suppressMouseDown:!0})}else{const Ce=ve.modifiedHeightInPx-ve.originalHeightInPx;if(Ce>0){if(le?.lineRangeMapping.original.delta(-1).deltaLength(2).contains(ve.originalRange.endLineNumberExclusive-1))continue;X.push({afterLineNumber:ve.originalRange.endLineNumberExclusive-1,domNode:V(),heightInPx:Ce,showInHiddenAreas:!0,suppressMouseDown:!0})}else{let Se=function(){const Ee=document.createElement(\"div\");return Ee.className=\"arrow-revert-change \"+_.ThemeIcon.asClassName(E.Codicon.arrowRight),ie.add((0,L.addDisposableListener)(Ee,\"mousedown\",Ae=>Ae.stopPropagation())),ie.add((0,L.addDisposableListener)(Ee,\"click\",Ae=>{Ae.stopPropagation(),I.revert(ve.diff)})),(0,L.$)(\"div\",{},Ee)};if(le?.lineRangeMapping.modified.delta(-1).deltaLength(2).contains(ve.modifiedRange.endLineNumberExclusive-1))continue;let _e;ve.diff&&ve.diff.modified.isEmpty&&this._options.shouldRenderRevertArrows.read(q)&&(_e=Se()),U.push({afterLineNumber:ve.modifiedRange.endLineNumberExclusive-1,domNode:V(),heightInPx:-Ce,marginDomNode:_e,showInHiddenAreas:!0,suppressMouseDown:!0})}}for(const ve of(he=W.read(q))!==null&&he!==void 0?he:[]){if(!le?.lineRangeMapping.original.intersect(ve.originalRange)||!le?.lineRangeMapping.modified.intersect(ve.modifiedRange))continue;const Ce=ve.modifiedHeightInPx-ve.originalHeightInPx;Ce>0?X.push({afterLineNumber:ve.originalRange.endLineNumberExclusive-1,domNode:V(),heightInPx:Ce,showInHiddenAreas:!0,suppressMouseDown:!0}):U.push({afterLineNumber:ve.modifiedRange.endLineNumberExclusive-1,domNode:V(),heightInPx:-Ce,showInHiddenAreas:!0,suppressMouseDown:!0})}return{orig:X,mod:U}});let F=!1;this._register(this._editors.original.onDidScrollChange(q=>{q.scrollLeftChanged&&!F&&(F=!0,this._editors.modified.setScrollLeft(q.scrollLeft),F=!1)})),this._register(this._editors.modified.onDidScrollChange(q=>{q.scrollLeftChanged&&!F&&(F=!0,this._editors.original.setScrollLeft(q.scrollLeft),F=!1)})),this._originalScrollTop=(0,p.observableFromEvent)(this._editors.original.onDidScrollChange,()=>this._editors.original.getScrollTop()),this._modifiedScrollTop=(0,p.observableFromEvent)(this._editors.modified.onDidScrollChange,()=>this._editors.modified.getScrollTop()),this._register((0,p.autorun)(q=>{const ie=this._originalScrollTop.read(q)-(this._originalScrollOffsetAnimated.get()-this._modifiedScrollOffsetAnimated.read(q))-(this._originalTopPadding.get()-this._modifiedTopPadding.read(q));ie!==this._editors.modified.getScrollTop()&&this._editors.modified.setScrollTop(ie,1)})),this._register((0,p.autorun)(q=>{const ie=this._modifiedScrollTop.read(q)-(this._modifiedScrollOffsetAnimated.get()-this._originalScrollOffsetAnimated.read(q))-(this._modifiedTopPadding.get()-this._originalTopPadding.read(q));ie!==this._editors.original.getScrollTop()&&this._editors.original.setScrollTop(ie,1)})),this._register((0,p.autorun)(q=>{var ie;const ae=(ie=this._diffModel.read(q))===null||ie===void 0?void 0:ie.movedTextToCompare.read(q);let ne=0;if(ae){const $=this._editors.original.getTopForLineNumber(ae.lineRangeMapping.original.startLineNumber,!0)-this._originalTopPadding.get();ne=this._editors.modified.getTopForLineNumber(ae.lineRangeMapping.modified.startLineNumber,!0)-this._modifiedTopPadding.get()-$}ne>0?(this._modifiedTopPadding.set(0,void 0),this._originalTopPadding.set(ne,void 0)):ne<0?(this._modifiedTopPadding.set(-ne,void 0),this._originalTopPadding.set(0,void 0)):setTimeout(()=>{this._modifiedTopPadding.set(0,void 0),this._originalTopPadding.set(0,void 0)},400),this._editors.modified.hasTextFocus()?this._originalScrollOffset.set(this._modifiedScrollOffset.get()-ne,void 0,!0):this._modifiedScrollOffset.set(this._originalScrollOffset.get()+ne,void 0,!0)}))}};e.DiffEditorViewZones=l,e.DiffEditorViewZones=l=ke([ge(8,d.IClipboardService),ge(9,s.IContextMenuService)],l);function o(h,m,C,w,D,I){const T=new k.ArrayQueue(g(h,w)),A=new k.ArrayQueue(g(m,D)),P=h.getOption(66),N=m.getOption(66),M=[];let R=0,x=0;function O(B,W){for(;;){let V=T.peek(),K=A.peek();if(V&&V.lineNumber>=B&&(V=void 0),K&&K.lineNumber>=W&&(K=void 0),!V&&!K)break;const F=V?V.lineNumber-R:Number.MAX_VALUE,q=K?K.lineNumber-x:Number.MAX_VALUE;F<q?(T.dequeue(),K={lineNumber:V.lineNumber-R+x,heightInPx:0}):F>q?(A.dequeue(),V={lineNumber:K.lineNumber-x+R,heightInPx:0}):(T.dequeue(),A.dequeue()),M.push({originalRange:u.LineRange.ofLength(V.lineNumber,1),modifiedRange:u.LineRange.ofLength(K.lineNumber,1),originalHeightInPx:P+V.heightInPx,modifiedHeightInPx:N+K.heightInPx,diff:void 0})}}for(const B of C){let q=function(ie,ae){var ne,$,J,Q;if(ie<F||ae<K)return;if(V)V=!1;else if(ie===F||ae===K)return;const re=new u.LineRange(F,ie),de=new u.LineRange(K,ae);if(re.isEmpty&&de.isEmpty)return;const he=($=(ne=T.takeWhile(X=>X.lineNumber<ie))===null||ne===void 0?void 0:ne.reduce((X,U)=>X+U.heightInPx,0))!==null&&$!==void 0?$:0,me=(Q=(J=A.takeWhile(X=>X.lineNumber<ae))===null||J===void 0?void 0:J.reduce((X,U)=>X+U.heightInPx,0))!==null&&Q!==void 0?Q:0;M.push({originalRange:re,modifiedRange:de,originalHeightInPx:re.length*P+he,modifiedHeightInPx:de.length*N+me,diff:B.lineRangeMapping}),F=ie,K=ae};const W=B.lineRangeMapping;O(W.original.startLineNumber,W.modified.startLineNumber);let V=!0,K=W.modified.startLineNumber,F=W.original.startLineNumber;if(I)for(const ie of W.innerChanges||[]){ie.originalRange.startColumn>1&&ie.modifiedRange.startColumn>1&&q(ie.originalRange.startLineNumber,ie.modifiedRange.startLineNumber);const ae=h.getModel(),ne=ie.originalRange.endLineNumber<=ae.getLineCount()?ae.getLineMaxColumn(ie.originalRange.endLineNumber):Number.MAX_SAFE_INTEGER;ie.originalRange.endColumn<ne&&q(ie.originalRange.endLineNumber,ie.modifiedRange.endLineNumber)}q(W.original.endLineNumberExclusive,W.modified.endLineNumberExclusive),R=W.original.endLineNumberExclusive,x=W.modified.endLineNumberExclusive}return O(Number.MAX_VALUE,Number.MAX_VALUE),M}function g(h,m){const C=[],w=[],D=h.getOption(144).wrappingColumn!==-1,I=h._getViewModel().coordinatesConverter,T=h.getOption(66);if(D)for(let P=1;P<=h.getModel().getLineCount();P++){const N=I.getModelLineViewLineCount(P);N>1&&w.push({lineNumber:P,heightInPx:T*(N-1)})}for(const P of h.getWhitespaces()){if(m.has(P.id))continue;const N=P.afterLineNumber===0?0:I.convertViewPositionToModelPosition(new f.Position(P.afterLineNumber,1)).lineNumber;C.push({lineNumber:N,heightInPx:P.height})}return(0,r.joinCombine)(C,w,P=>P.lineNumber,(P,N)=>({lineNumber:P.lineNumber,heightInPx:P.heightInPx+N.heightInPx}))}}),define(se[883],oe([1,0,6,2,17,38,179,80,43,189,27,193,111,340,47,55,32]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";var f;Object.defineProperty(e,\"__esModule\",{value:!0}),e.DefaultModelSHA1Computer=e.ModelService=void 0;function c(h){return h.toString()}class d{constructor(m,C,w){this.model=m,this._modelEventListeners=new k.DisposableStore,this.model=m,this._modelEventListeners.add(m.onWillDispose(()=>C(m))),this._modelEventListeners.add(m.onDidChangeLanguage(D=>w(m,D)))}dispose(){this._modelEventListeners.dispose()}}const s=y.isLinux||y.isMacintosh?1:2;class l{constructor(m,C,w,D,I,T,A,P){this.uri=m,this.initialUndoRedoSnapshot=C,this.time=w,this.sharesUndoRedoStack=D,this.heapSize=I,this.sha1=T,this.versionId=A,this.alternativeVersionId=P}}let o=f=class extends k.Disposable{constructor(m,C,w,D,I){super(),this._configurationService=m,this._resourcePropertiesService=C,this._undoRedoService=w,this._languageService=D,this._languageConfigurationService=I,this._onModelAdded=this._register(new L.Emitter),this.onModelAdded=this._onModelAdded.event,this._onModelRemoved=this._register(new L.Emitter),this.onModelRemoved=this._onModelRemoved.event,this._onModelModeChanged=this._register(new L.Emitter),this.onModelLanguageChanged=this._onModelModeChanged.event,this._modelCreationOptionsByLanguageAndResource=Object.create(null),this._models={},this._disposedModels=new Map,this._disposedModelsHeapSize=0,this._register(this._configurationService.onDidChangeConfiguration(T=>this._updateModelOptions(T))),this._updateModelOptions(void 0)}static _readModelOptions(m,C){var w;let D=S.EDITOR_MODEL_DEFAULTS.tabSize;if(m.editor&&typeof m.editor.tabSize<\"u\"){const O=parseInt(m.editor.tabSize,10);isNaN(O)||(D=O),D<1&&(D=1)}let I=\"tabSize\";if(m.editor&&typeof m.editor.indentSize<\"u\"&&m.editor.indentSize!==\"tabSize\"){const O=parseInt(m.editor.indentSize,10);isNaN(O)||(I=Math.max(O,1))}let T=S.EDITOR_MODEL_DEFAULTS.insertSpaces;m.editor&&typeof m.editor.insertSpaces<\"u\"&&(T=m.editor.insertSpaces===\"false\"?!1:!!m.editor.insertSpaces);let A=s;const P=m.eol;P===`\\r\n`?A=2:P===`\n`&&(A=1);let N=S.EDITOR_MODEL_DEFAULTS.trimAutoWhitespace;m.editor&&typeof m.editor.trimAutoWhitespace<\"u\"&&(N=m.editor.trimAutoWhitespace===\"false\"?!1:!!m.editor.trimAutoWhitespace);let M=S.EDITOR_MODEL_DEFAULTS.detectIndentation;m.editor&&typeof m.editor.detectIndentation<\"u\"&&(M=m.editor.detectIndentation===\"false\"?!1:!!m.editor.detectIndentation);let R=S.EDITOR_MODEL_DEFAULTS.largeFileOptimizations;m.editor&&typeof m.editor.largeFileOptimizations<\"u\"&&(R=m.editor.largeFileOptimizations===\"false\"?!1:!!m.editor.largeFileOptimizations);let x=S.EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions;return!((w=m.editor)===null||w===void 0)&&w.bracketPairColorization&&typeof m.editor.bracketPairColorization==\"object\"&&(x={enabled:!!m.editor.bracketPairColorization.enabled,independentColorPoolPerBracketType:!!m.editor.bracketPairColorization.independentColorPoolPerBracketType}),{isForSimpleWidget:C,tabSize:D,indentSize:I,insertSpaces:T,detectIndentation:M,defaultEOL:A,trimAutoWhitespace:N,largeFileOptimizations:R,bracketPairColorizationOptions:x}}_getEOL(m,C){if(m)return this._resourcePropertiesService.getEOL(m,C);const w=this._configurationService.getValue(\"files.eol\",{overrideIdentifier:C});return w&&typeof w==\"string\"&&w!==\"auto\"?w:y.OS===3||y.OS===2?`\n`:`\\r\n`}_shouldRestoreUndoStack(){const m=this._configurationService.getValue(\"files.restoreUndoStack\");return typeof m==\"boolean\"?m:!0}getCreationOptions(m,C,w){const D=typeof m==\"string\"?m:m.languageId;let I=this._modelCreationOptionsByLanguageAndResource[D+C];if(!I){const T=this._configurationService.getValue(\"editor\",{overrideIdentifier:D,resource:C}),A=this._getEOL(C,D);I=f._readModelOptions({editor:T,eol:A},w),this._modelCreationOptionsByLanguageAndResource[D+C]=I}return I}_updateModelOptions(m){const C=this._modelCreationOptionsByLanguageAndResource;this._modelCreationOptionsByLanguageAndResource=Object.create(null);const w=Object.keys(this._models);for(let D=0,I=w.length;D<I;D++){const T=w[D],A=this._models[T],P=A.model.getLanguageId(),N=A.model.uri;if(m&&!m.affectsConfiguration(\"editor\",{overrideIdentifier:P,resource:N})&&!m.affectsConfiguration(\"files.eol\",{overrideIdentifier:P,resource:N}))continue;const M=C[P+N],R=this.getCreationOptions(P,N,A.model.isForSimpleWidget);f._setModelOptionsForModel(A.model,R,M)}}static _setModelOptionsForModel(m,C,w){w&&w.defaultEOL!==C.defaultEOL&&m.getLineCount()===1&&m.setEOL(C.defaultEOL===1?0:1),!(w&&w.detectIndentation===C.detectIndentation&&w.insertSpaces===C.insertSpaces&&w.tabSize===C.tabSize&&w.indentSize===C.indentSize&&w.trimAutoWhitespace===C.trimAutoWhitespace&&(0,r.equals)(w.bracketPairColorizationOptions,C.bracketPairColorizationOptions))&&(C.detectIndentation?(m.detectIndentation(C.insertSpaces,C.tabSize),m.updateOptions({trimAutoWhitespace:C.trimAutoWhitespace,bracketColorizationOptions:C.bracketPairColorizationOptions})):m.updateOptions({insertSpaces:C.insertSpaces,tabSize:C.tabSize,indentSize:C.indentSize,trimAutoWhitespace:C.trimAutoWhitespace,bracketColorizationOptions:C.bracketPairColorizationOptions}))}_insertDisposedModel(m){this._disposedModels.set(c(m.uri),m),this._disposedModelsHeapSize+=m.heapSize}_removeDisposedModel(m){const C=this._disposedModels.get(c(m));return C&&(this._disposedModelsHeapSize-=C.heapSize),this._disposedModels.delete(c(m)),C}_ensureDisposedModelsHeapSize(m){if(this._disposedModelsHeapSize>m){const C=[];for(this._disposedModels.forEach(w=>{w.sharesUndoRedoStack||C.push(w)}),C.sort((w,D)=>w.time-D.time);C.length>0&&this._disposedModelsHeapSize>m;){const w=C.shift();this._removeDisposedModel(w.uri),w.initialUndoRedoSnapshot!==null&&this._undoRedoService.restoreSnapshot(w.initialUndoRedoSnapshot)}}}_createModelData(m,C,w,D){const I=this.getCreationOptions(C,w,D),T=new E.TextModel(m,C,I,w,this._undoRedoService,this._languageService,this._languageConfigurationService);if(w&&this._disposedModels.has(c(w))){const N=this._removeDisposedModel(w),M=this._undoRedoService.getElements(w),R=this._getSHA1Computer(),x=R.canComputeSHA1(T)?R.computeSHA1(T)===N.sha1:!1;if(x||N.sharesUndoRedoStack){for(const O of M.past)(0,n.isEditStackElement)(O)&&O.matchesResource(w)&&O.setModel(T);for(const O of M.future)(0,n.isEditStackElement)(O)&&O.matchesResource(w)&&O.setModel(T);this._undoRedoService.setElementsValidFlag(w,!0,O=>(0,n.isEditStackElement)(O)&&O.matchesResource(w)),x&&(T._overwriteVersionId(N.versionId),T._overwriteAlternativeVersionId(N.alternativeVersionId),T._overwriteInitialUndoRedoSnapshot(N.initialUndoRedoSnapshot))}else N.initialUndoRedoSnapshot!==null&&this._undoRedoService.restoreSnapshot(N.initialUndoRedoSnapshot)}const A=c(T.uri);if(this._models[A])throw new Error(\"ModelService: Cannot add model because it already exists!\");const P=new d(T,N=>this._onWillDispose(N),(N,M)=>this._onDidChangeLanguage(N,M));return this._models[A]=P,P}createModel(m,C,w,D=!1){let I;return C?I=this._createModelData(m,C,w,D):I=this._createModelData(m,p.PLAINTEXT_LANGUAGE_ID,w,D),this._onModelAdded.fire(I.model),I.model}getModels(){const m=[],C=Object.keys(this._models);for(let w=0,D=C.length;w<D;w++){const I=C[w];m.push(this._models[I].model)}return m}getModel(m){const C=c(m),w=this._models[C];return w?w.model:null}_schemaShouldMaintainUndoRedoElements(m){return m.scheme===t.Schemas.file||m.scheme===t.Schemas.vscodeRemote||m.scheme===t.Schemas.vscodeUserData||m.scheme===t.Schemas.vscodeNotebookCell||m.scheme===\"fake-fs\"}_onWillDispose(m){const C=c(m.uri),w=this._models[C],D=this._undoRedoService.getUriComparisonKey(m.uri)!==m.uri.toString();let I=!1,T=0;if(D||this._shouldRestoreUndoStack()&&this._schemaShouldMaintainUndoRedoElements(m.uri)){const N=this._undoRedoService.getElements(m.uri);if(N.past.length>0||N.future.length>0){for(const M of N.past)(0,n.isEditStackElement)(M)&&M.matchesResource(m.uri)&&(I=!0,T+=M.heapSize(m.uri),M.setModel(m.uri));for(const M of N.future)(0,n.isEditStackElement)(M)&&M.matchesResource(m.uri)&&(I=!0,T+=M.heapSize(m.uri),M.setModel(m.uri))}}const A=f.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK,P=this._getSHA1Computer();if(I)if(!D&&(T>A||!P.canComputeSHA1(m))){const N=w.model.getInitialUndoRedoSnapshot();N!==null&&this._undoRedoService.restoreSnapshot(N)}else this._ensureDisposedModelsHeapSize(A-T),this._undoRedoService.setElementsValidFlag(m.uri,!1,N=>(0,n.isEditStackElement)(N)&&N.matchesResource(m.uri)),this._insertDisposedModel(new l(m.uri,w.model.getInitialUndoRedoSnapshot(),Date.now(),D,T,P.computeSHA1(m),m.getVersionId(),m.getAlternativeVersionId()));else if(!D){const N=w.model.getInitialUndoRedoSnapshot();N!==null&&this._undoRedoService.restoreSnapshot(N)}delete this._models[C],w.dispose(),delete this._modelCreationOptionsByLanguageAndResource[m.getLanguageId()+m.uri],this._onModelRemoved.fire(m)}_onDidChangeLanguage(m,C){const w=C.oldLanguage,D=m.getLanguageId(),I=this.getCreationOptions(w,m.uri,m.isForSimpleWidget),T=this.getCreationOptions(D,m.uri,m.isForSimpleWidget);f._setModelOptionsForModel(m,T,I),this._onModelModeChanged.fire({model:m,oldLanguageId:w})}_getSHA1Computer(){return new g}};e.ModelService=o,o.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK=20*1024*1024,e.ModelService=o=f=ke([ge(0,b.IConfigurationService),ge(1,v.ITextResourcePropertiesService),ge(2,a.IUndoRedoService),ge(3,_.ILanguageService),ge(4,u.ILanguageConfigurationService)],o);class g{canComputeSHA1(m){return m.getValueLength()<=g.MAX_MODEL_SIZE}computeSHA1(m){const C=new i.StringSHA1,w=m.createSnapshot();let D;for(;D=w.read();)C.update(D);return C.digest()}}e.DefaultModelSHA1Computer=g,g.MAX_MODEL_SIZE=10*1024*1024}),define(se[884],oe([1,0,13,10,5,212,38,114,214,547,291,86]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewModelLinesFromModelAsIs=e.ViewModelLinesFromProjectedModel=void 0;class i{constructor(s,l,o,g,h,m,C,w,D,I){this._editorId=s,this.model=l,this._validModelVersionId=-1,this._domLineBreaksComputerFactory=o,this._monospaceLineBreaksComputerFactory=g,this.fontInfo=h,this.tabSize=m,this.wrappingStrategy=C,this.wrappingColumn=w,this.wrappingIndent=D,this.wordBreak=I,this._constructLines(!0,null)}dispose(){this.hiddenAreasDecorationIds=this.model.deltaDecorations(this.hiddenAreasDecorationIds,[])}createCoordinatesConverter(){return new u(this)}_constructLines(s,l){this.modelLineProjections=[],s&&(this.hiddenAreasDecorationIds=this.model.deltaDecorations(this.hiddenAreasDecorationIds,[]));const o=this.model.getLinesContent(),g=this.model.getInjectedTextDecorations(this._editorId),h=o.length,m=this.createLineBreaksComputer(),C=new L.ArrayQueue(p.LineInjectedText.fromDecorations(g));for(let M=0;M<h;M++){const R=C.takeWhile(x=>x.lineNumber===M+1);m.addRequest(o[M],R,l?l[M]:null)}const w=m.finalize(),D=[],I=this.hiddenAreasDecorationIds.map(M=>this.model.getDecorationRange(M)).sort(y.Range.compareRangesUsingStarts);let T=1,A=0,P=-1,N=P+1<I.length?A+1:h+2;for(let M=0;M<h;M++){const R=M+1;R===N&&(P++,T=I[P].startLineNumber,A=I[P].endLineNumber,N=P+1<I.length?A+1:h+2);const x=R>=T&&R<=A,O=(0,v.createModelLineProjection)(w[M],!x);D[M]=O.getViewLineCount(),this.modelLineProjections[M]=O}this._validModelVersionId=this.model.getVersionId(),this.projectedModelLineLineCounts=new b.ConstantTimePrefixSumComputer(D)}getHiddenAreas(){return this.hiddenAreasDecorationIds.map(s=>this.model.getDecorationRange(s))}setHiddenAreas(s){const l=s.map(A=>this.model.validateRange(A)),o=n(l),g=this.hiddenAreasDecorationIds.map(A=>this.model.getDecorationRange(A)).sort(y.Range.compareRangesUsingStarts);if(o.length===g.length){let A=!1;for(let P=0;P<o.length;P++)if(!o[P].equalsRange(g[P])){A=!0;break}if(!A)return!1}const h=o.map(A=>({range:A,options:S.ModelDecorationOptions.EMPTY}));this.hiddenAreasDecorationIds=this.model.deltaDecorations(this.hiddenAreasDecorationIds,h);const m=o;let C=1,w=0,D=-1,I=D+1<m.length?w+1:this.modelLineProjections.length+2,T=!1;for(let A=0;A<this.modelLineProjections.length;A++){const P=A+1;P===I&&(D++,C=m[D].startLineNumber,w=m[D].endLineNumber,I=D+1<m.length?w+1:this.modelLineProjections.length+2);let N=!1;if(P>=C&&P<=w?this.modelLineProjections[A].isVisible()&&(this.modelLineProjections[A]=this.modelLineProjections[A].setVisible(!1),N=!0):(T=!0,this.modelLineProjections[A].isVisible()||(this.modelLineProjections[A]=this.modelLineProjections[A].setVisible(!0),N=!0)),N){const M=this.modelLineProjections[A].getViewLineCount();this.projectedModelLineLineCounts.setValue(A,M)}}return T||this.setHiddenAreas([]),!0}modelPositionIsVisible(s,l){return s<1||s>this.modelLineProjections.length?!1:this.modelLineProjections[s-1].isVisible()}getModelLineViewLineCount(s){return s<1||s>this.modelLineProjections.length?1:this.modelLineProjections[s-1].getViewLineCount()}setTabSize(s){return this.tabSize===s?!1:(this.tabSize=s,this._constructLines(!1,null),!0)}setWrappingSettings(s,l,o,g,h){const m=this.fontInfo.equals(s),C=this.wrappingStrategy===l,w=this.wrappingColumn===o,D=this.wrappingIndent===g,I=this.wordBreak===h;if(m&&C&&w&&D&&I)return!1;const T=m&&C&&!w&&D&&I;this.fontInfo=s,this.wrappingStrategy=l,this.wrappingColumn=o,this.wrappingIndent=g,this.wordBreak=h;let A=null;if(T){A=[];for(let P=0,N=this.modelLineProjections.length;P<N;P++)A[P]=this.modelLineProjections[P].getProjectionData()}return this._constructLines(!1,A),!0}createLineBreaksComputer(){return(this.wrappingStrategy===\"advanced\"?this._domLineBreaksComputerFactory:this._monospaceLineBreaksComputerFactory).createLineBreaksComputer(this.fontInfo,this.tabSize,this.wrappingColumn,this.wrappingIndent,this.wordBreak)}onModelFlushed(){this._constructLines(!0,null)}onModelLinesDeleted(s,l,o){if(!s||s<=this._validModelVersionId)return null;const g=l===1?1:this.projectedModelLineLineCounts.getPrefixSum(l-1)+1,h=this.projectedModelLineLineCounts.getPrefixSum(o);return this.modelLineProjections.splice(l-1,o-l+1),this.projectedModelLineLineCounts.removeValues(l-1,o-l+1),new _.ViewLinesDeletedEvent(g,h)}onModelLinesInserted(s,l,o,g){if(!s||s<=this._validModelVersionId)return null;const h=l>2&&!this.modelLineProjections[l-2].isVisible(),m=l===1?1:this.projectedModelLineLineCounts.getPrefixSum(l-1)+1;let C=0;const w=[],D=[];for(let I=0,T=g.length;I<T;I++){const A=(0,v.createModelLineProjection)(g[I],!h);w.push(A);const P=A.getViewLineCount();C+=P,D[I]=P}return this.modelLineProjections=this.modelLineProjections.slice(0,l-1).concat(w).concat(this.modelLineProjections.slice(l-1)),this.projectedModelLineLineCounts.insertValues(l-1,D),new _.ViewLinesInsertedEvent(m,m+C-1)}onModelLineChanged(s,l,o){if(s!==null&&s<=this._validModelVersionId)return[!1,null,null,null];const g=l-1,h=this.modelLineProjections[g].getViewLineCount(),m=this.modelLineProjections[g].isVisible(),C=(0,v.createModelLineProjection)(o,m);this.modelLineProjections[g]=C;const w=this.modelLineProjections[g].getViewLineCount();let D=!1,I=0,T=-1,A=0,P=-1,N=0,M=-1;h>w?(I=this.projectedModelLineLineCounts.getPrefixSum(l-1)+1,T=I+w-1,N=T+1,M=N+(h-w)-1,D=!0):h<w?(I=this.projectedModelLineLineCounts.getPrefixSum(l-1)+1,T=I+h-1,A=T+1,P=A+(w-h)-1,D=!0):(I=this.projectedModelLineLineCounts.getPrefixSum(l-1)+1,T=I+w-1),this.projectedModelLineLineCounts.setValue(g,w);const R=I<=T?new _.ViewLinesChangedEvent(I,T-I+1):null,x=A<=P?new _.ViewLinesInsertedEvent(A,P):null,O=N<=M?new _.ViewLinesDeletedEvent(N,M):null;return[D,R,x,O]}acceptVersionId(s){this._validModelVersionId=s,this.modelLineProjections.length===1&&!this.modelLineProjections[0].isVisible()&&this.setHiddenAreas([])}getViewLineCount(){return this.projectedModelLineLineCounts.getTotalSum()}_toValidViewLineNumber(s){if(s<1)return 1;const l=this.getViewLineCount();return s>l?l:s|0}getActiveIndentGuide(s,l,o){s=this._toValidViewLineNumber(s),l=this._toValidViewLineNumber(l),o=this._toValidViewLineNumber(o);const g=this.convertViewPositionToModelPosition(s,this.getViewLineMinColumn(s)),h=this.convertViewPositionToModelPosition(l,this.getViewLineMinColumn(l)),m=this.convertViewPositionToModelPosition(o,this.getViewLineMinColumn(o)),C=this.model.guides.getActiveIndentGuide(g.lineNumber,h.lineNumber,m.lineNumber),w=this.convertModelPositionToViewPosition(C.startLineNumber,1),D=this.convertModelPositionToViewPosition(C.endLineNumber,this.model.getLineMaxColumn(C.endLineNumber));return{startLineNumber:w.lineNumber,endLineNumber:D.lineNumber,indent:C.indent}}getViewLineInfo(s){s=this._toValidViewLineNumber(s);const l=this.projectedModelLineLineCounts.getIndexOf(s-1),o=l.index,g=l.remainder;return new t(o+1,g)}getMinColumnOfViewLine(s){return this.modelLineProjections[s.modelLineNumber-1].getViewLineMinColumn(this.model,s.modelLineNumber,s.modelLineWrappedLineIdx)}getMaxColumnOfViewLine(s){return this.modelLineProjections[s.modelLineNumber-1].getViewLineMaxColumn(this.model,s.modelLineNumber,s.modelLineWrappedLineIdx)}getModelStartPositionOfViewLine(s){const l=this.modelLineProjections[s.modelLineNumber-1],o=l.getViewLineMinColumn(this.model,s.modelLineNumber,s.modelLineWrappedLineIdx),g=l.getModelColumnOfViewPosition(s.modelLineWrappedLineIdx,o);return new k.Position(s.modelLineNumber,g)}getModelEndPositionOfViewLine(s){const l=this.modelLineProjections[s.modelLineNumber-1],o=l.getViewLineMaxColumn(this.model,s.modelLineNumber,s.modelLineWrappedLineIdx),g=l.getModelColumnOfViewPosition(s.modelLineWrappedLineIdx,o);return new k.Position(s.modelLineNumber,g)}getViewLineInfosGroupedByModelRanges(s,l){const o=this.getViewLineInfo(s),g=this.getViewLineInfo(l),h=new Array;let m=this.getModelStartPositionOfViewLine(o),C=new Array;for(let w=o.modelLineNumber;w<=g.modelLineNumber;w++){const D=this.modelLineProjections[w-1];if(D.isVisible()){const I=w===o.modelLineNumber?o.modelLineWrappedLineIdx:0,T=w===g.modelLineNumber?g.modelLineWrappedLineIdx+1:D.getViewLineCount();for(let A=I;A<T;A++)C.push(new t(w,A))}if(!D.isVisible()&&m){const I=new k.Position(w-1,this.model.getLineMaxColumn(w-1)+1),T=y.Range.fromPositions(m,I);h.push(new r(T,C)),C=[],m=null}else D.isVisible()&&!m&&(m=new k.Position(w,1))}if(m){const w=y.Range.fromPositions(m,this.getModelEndPositionOfViewLine(g));h.push(new r(w,C))}return h}getViewLinesBracketGuides(s,l,o,g){const h=o?this.convertViewPositionToModelPosition(o.lineNumber,o.column):null,m=[];for(const C of this.getViewLineInfosGroupedByModelRanges(s,l)){const w=C.modelRange.startLineNumber,D=this.model.guides.getLinesBracketGuides(w,C.modelRange.endLineNumber,h,g);for(const I of C.viewLines){const A=D[I.modelLineNumber-w].map(P=>{if(P.forWrappedLinesAfterColumn!==-1&&this.modelLineProjections[I.modelLineNumber-1].getViewPositionOfModelPosition(0,P.forWrappedLinesAfterColumn).lineNumber>=I.modelLineWrappedLineIdx||P.forWrappedLinesBeforeOrAtColumn!==-1&&this.modelLineProjections[I.modelLineNumber-1].getViewPositionOfModelPosition(0,P.forWrappedLinesBeforeOrAtColumn).lineNumber<I.modelLineWrappedLineIdx)return;if(!P.horizontalLine)return P;let N=-1;if(P.column!==-1){const x=this.modelLineProjections[I.modelLineNumber-1].getViewPositionOfModelPosition(0,P.column);if(x.lineNumber===I.modelLineWrappedLineIdx)N=x.column;else if(x.lineNumber<I.modelLineWrappedLineIdx)N=this.getMinColumnOfViewLine(I);else if(x.lineNumber>I.modelLineWrappedLineIdx)return}const M=this.convertModelPositionToViewPosition(I.modelLineNumber,P.horizontalLine.endColumn),R=this.modelLineProjections[I.modelLineNumber-1].getViewPositionOfModelPosition(0,P.horizontalLine.endColumn);return R.lineNumber===I.modelLineWrappedLineIdx?new E.IndentGuide(P.visibleColumn,N,P.className,new E.IndentGuideHorizontalLine(P.horizontalLine.top,M.column),-1,-1):R.lineNumber<I.modelLineWrappedLineIdx||P.visibleColumn!==-1?void 0:new E.IndentGuide(P.visibleColumn,N,P.className,new E.IndentGuideHorizontalLine(P.horizontalLine.top,this.getMaxColumnOfViewLine(I)),-1,-1)});m.push(A.filter(P=>!!P))}}return m}getViewLinesIndentGuides(s,l){s=this._toValidViewLineNumber(s),l=this._toValidViewLineNumber(l);const o=this.convertViewPositionToModelPosition(s,this.getViewLineMinColumn(s)),g=this.convertViewPositionToModelPosition(l,this.getViewLineMaxColumn(l));let h=[];const m=[],C=[],w=o.lineNumber-1,D=g.lineNumber-1;let I=null;for(let N=w;N<=D;N++){const M=this.modelLineProjections[N];if(M.isVisible()){const R=M.getViewLineNumberOfModelPosition(0,N===w?o.column:1),x=M.getViewLineNumberOfModelPosition(0,this.model.getLineMaxColumn(N+1)),O=x-R+1;let B=0;O>1&&M.getViewLineMinColumn(this.model,N+1,x)===1&&(B=R===0?1:2),m.push(O),C.push(B),I===null&&(I=new k.Position(N+1,0))}else I!==null&&(h=h.concat(this.model.guides.getLinesIndentGuides(I.lineNumber,N)),I=null)}I!==null&&(h=h.concat(this.model.guides.getLinesIndentGuides(I.lineNumber,g.lineNumber)),I=null);const T=l-s+1,A=new Array(T);let P=0;for(let N=0,M=h.length;N<M;N++){let R=h[N];const x=Math.min(T-P,m[N]),O=C[N];let B;O===2?B=0:O===1?B=1:B=x;for(let W=0;W<x;W++)W===B&&(R=0),A[P++]=R}return A}getViewLineContent(s){const l=this.getViewLineInfo(s);return this.modelLineProjections[l.modelLineNumber-1].getViewLineContent(this.model,l.modelLineNumber,l.modelLineWrappedLineIdx)}getViewLineLength(s){const l=this.getViewLineInfo(s);return this.modelLineProjections[l.modelLineNumber-1].getViewLineLength(this.model,l.modelLineNumber,l.modelLineWrappedLineIdx)}getViewLineMinColumn(s){const l=this.getViewLineInfo(s);return this.modelLineProjections[l.modelLineNumber-1].getViewLineMinColumn(this.model,l.modelLineNumber,l.modelLineWrappedLineIdx)}getViewLineMaxColumn(s){const l=this.getViewLineInfo(s);return this.modelLineProjections[l.modelLineNumber-1].getViewLineMaxColumn(this.model,l.modelLineNumber,l.modelLineWrappedLineIdx)}getViewLineData(s){const l=this.getViewLineInfo(s);return this.modelLineProjections[l.modelLineNumber-1].getViewLineData(this.model,l.modelLineNumber,l.modelLineWrappedLineIdx)}getViewLinesData(s,l,o){s=this._toValidViewLineNumber(s),l=this._toValidViewLineNumber(l);const g=this.projectedModelLineLineCounts.getIndexOf(s-1);let h=s;const m=g.index,C=g.remainder,w=[];for(let D=m,I=this.model.getLineCount();D<I;D++){const T=this.modelLineProjections[D];if(!T.isVisible())continue;const A=D===m?C:0;let P=T.getViewLineCount()-A,N=!1;if(h+P>l&&(N=!0,P=l-h+1),T.getViewLinesData(this.model,D+1,A,P,h-s,o,w),h+=P,N)break}return w}validateViewPosition(s,l,o){s=this._toValidViewLineNumber(s);const g=this.projectedModelLineLineCounts.getIndexOf(s-1),h=g.index,m=g.remainder,C=this.modelLineProjections[h],w=C.getViewLineMinColumn(this.model,h+1,m),D=C.getViewLineMaxColumn(this.model,h+1,m);l<w&&(l=w),l>D&&(l=D);const I=C.getModelColumnOfViewPosition(m,l);return this.model.validatePosition(new k.Position(h+1,I)).equals(o)?new k.Position(s,l):this.convertModelPositionToViewPosition(o.lineNumber,o.column)}validateViewRange(s,l){const o=this.validateViewPosition(s.startLineNumber,s.startColumn,l.getStartPosition()),g=this.validateViewPosition(s.endLineNumber,s.endColumn,l.getEndPosition());return new y.Range(o.lineNumber,o.column,g.lineNumber,g.column)}convertViewPositionToModelPosition(s,l){const o=this.getViewLineInfo(s),g=this.modelLineProjections[o.modelLineNumber-1].getModelColumnOfViewPosition(o.modelLineWrappedLineIdx,l);return this.model.validatePosition(new k.Position(o.modelLineNumber,g))}convertViewRangeToModelRange(s){const l=this.convertViewPositionToModelPosition(s.startLineNumber,s.startColumn),o=this.convertViewPositionToModelPosition(s.endLineNumber,s.endColumn);return new y.Range(l.lineNumber,l.column,o.lineNumber,o.column)}convertModelPositionToViewPosition(s,l,o=2,g=!1,h=!1){const m=this.model.validatePosition(new k.Position(s,l)),C=m.lineNumber,w=m.column;let D=C-1,I=!1;if(h)for(;D<this.modelLineProjections.length&&!this.modelLineProjections[D].isVisible();)D++,I=!0;else for(;D>0&&!this.modelLineProjections[D].isVisible();)D--,I=!0;if(D===0&&!this.modelLineProjections[D].isVisible())return new k.Position(g?0:1,1);const T=1+this.projectedModelLineLineCounts.getPrefixSum(D);let A;return I?h?A=this.modelLineProjections[D].getViewPositionOfModelPosition(T,1,o):A=this.modelLineProjections[D].getViewPositionOfModelPosition(T,this.model.getLineMaxColumn(D+1),o):A=this.modelLineProjections[C-1].getViewPositionOfModelPosition(T,w,o),A}convertModelRangeToViewRange(s,l=0){if(s.isEmpty()){const o=this.convertModelPositionToViewPosition(s.startLineNumber,s.startColumn,l);return y.Range.fromPositions(o)}else{const o=this.convertModelPositionToViewPosition(s.startLineNumber,s.startColumn,1),g=this.convertModelPositionToViewPosition(s.endLineNumber,s.endColumn,0);return new y.Range(o.lineNumber,o.column,g.lineNumber,g.column)}}getViewLineNumberOfModelPosition(s,l){let o=s-1;if(this.modelLineProjections[o].isVisible()){const h=1+this.projectedModelLineLineCounts.getPrefixSum(o);return this.modelLineProjections[o].getViewLineNumberOfModelPosition(h,l)}for(;o>0&&!this.modelLineProjections[o].isVisible();)o--;if(o===0&&!this.modelLineProjections[o].isVisible())return 1;const g=1+this.projectedModelLineLineCounts.getPrefixSum(o);return this.modelLineProjections[o].getViewLineNumberOfModelPosition(g,this.model.getLineMaxColumn(o+1))}getDecorationsInRange(s,l,o,g,h){const m=this.convertViewPositionToModelPosition(s.startLineNumber,s.startColumn),C=this.convertViewPositionToModelPosition(s.endLineNumber,s.endColumn);if(C.lineNumber-m.lineNumber<=s.endLineNumber-s.startLineNumber)return this.model.getDecorationsInRange(new y.Range(m.lineNumber,1,C.lineNumber,C.column),l,o,g,h);let w=[];const D=m.lineNumber-1,I=C.lineNumber-1;let T=null;for(let M=D;M<=I;M++)if(this.modelLineProjections[M].isVisible())T===null&&(T=new k.Position(M+1,M===D?m.column:1));else if(T!==null){const x=this.model.getLineMaxColumn(M);w=w.concat(this.model.getDecorationsInRange(new y.Range(T.lineNumber,T.column,M,x),l,o,g)),T=null}T!==null&&(w=w.concat(this.model.getDecorationsInRange(new y.Range(T.lineNumber,T.column,C.lineNumber,C.column),l,o,g)),T=null),w.sort((M,R)=>{const x=y.Range.compareRangesUsingStarts(M.range,R.range);return x===0?M.id<R.id?-1:M.id>R.id?1:0:x});const A=[];let P=0,N=null;for(const M of w){const R=M.id;N!==R&&(N=R,A[P++]=M)}return A}getInjectedTextAt(s){const l=this.getViewLineInfo(s.lineNumber);return this.modelLineProjections[l.modelLineNumber-1].getInjectedTextAt(l.modelLineWrappedLineIdx,s.column)}normalizePosition(s,l){const o=this.getViewLineInfo(s.lineNumber);return this.modelLineProjections[o.modelLineNumber-1].normalizePosition(o.modelLineWrappedLineIdx,s,l)}getLineIndentColumn(s){const l=this.getViewLineInfo(s);return l.modelLineWrappedLineIdx===0?this.model.getLineIndentColumn(l.modelLineNumber):0}}e.ViewModelLinesFromProjectedModel=i;function n(d){if(d.length===0)return[];const s=d.slice();s.sort(y.Range.compareRangesUsingStarts);const l=[];let o=s[0].startLineNumber,g=s[0].endLineNumber;for(let h=1,m=s.length;h<m;h++){const C=s[h];C.startLineNumber>g+1?(l.push(new y.Range(o,1,g,1)),o=C.startLineNumber,g=C.endLineNumber):C.endLineNumber>g&&(g=C.endLineNumber)}return l.push(new y.Range(o,1,g,1)),l}class t{constructor(s,l){this.modelLineNumber=s,this.modelLineWrappedLineIdx=l}}class r{constructor(s,l){this.modelRange=s,this.viewLines=l}}class u{constructor(s){this._lines=s}convertViewPositionToModelPosition(s){return this._lines.convertViewPositionToModelPosition(s.lineNumber,s.column)}convertViewRangeToModelRange(s){return this._lines.convertViewRangeToModelRange(s)}validateViewPosition(s,l){return this._lines.validateViewPosition(s.lineNumber,s.column,l)}validateViewRange(s,l){return this._lines.validateViewRange(s,l)}convertModelPositionToViewPosition(s,l,o,g){return this._lines.convertModelPositionToViewPosition(s.lineNumber,s.column,l,o,g)}convertModelRangeToViewRange(s,l){return this._lines.convertModelRangeToViewRange(s,l)}modelPositionIsVisible(s){return this._lines.modelPositionIsVisible(s.lineNumber,s.column)}getModelLineViewLineCount(s){return this._lines.getModelLineViewLineCount(s)}getViewLineNumberOfModelPosition(s,l){return this._lines.getViewLineNumberOfModelPosition(s,l)}}class f{constructor(s){this.model=s}dispose(){}createCoordinatesConverter(){return new c(this)}getHiddenAreas(){return[]}setHiddenAreas(s){return!1}setTabSize(s){return!1}setWrappingSettings(s,l,o,g){return!1}createLineBreaksComputer(){const s=[];return{addRequest:(l,o,g)=>{s.push(null)},finalize:()=>s}}onModelFlushed(){}onModelLinesDeleted(s,l,o){return new _.ViewLinesDeletedEvent(l,o)}onModelLinesInserted(s,l,o,g){return new _.ViewLinesInsertedEvent(l,o)}onModelLineChanged(s,l,o){return[!1,new _.ViewLinesChangedEvent(l,1),null,null]}acceptVersionId(s){}getViewLineCount(){return this.model.getLineCount()}getActiveIndentGuide(s,l,o){return{startLineNumber:s,endLineNumber:s,indent:0}}getViewLinesBracketGuides(s,l,o){return new Array(l-s+1).fill([])}getViewLinesIndentGuides(s,l){const o=l-s+1,g=new Array(o);for(let h=0;h<o;h++)g[h]=0;return g}getViewLineContent(s){return this.model.getLineContent(s)}getViewLineLength(s){return this.model.getLineLength(s)}getViewLineMinColumn(s){return this.model.getLineMinColumn(s)}getViewLineMaxColumn(s){return this.model.getLineMaxColumn(s)}getViewLineData(s){const l=this.model.tokenization.getLineTokens(s),o=l.getLineContent();return new a.ViewLineData(o,!1,1,o.length+1,0,l.inflate(),null)}getViewLinesData(s,l,o){const g=this.model.getLineCount();s=Math.min(Math.max(1,s),g),l=Math.min(Math.max(1,l),g);const h=[];for(let m=s;m<=l;m++){const C=m-s;h[C]=o[C]?this.getViewLineData(m):null}return h}getDecorationsInRange(s,l,o,g,h){return this.model.getDecorationsInRange(s,l,o,g,h)}normalizePosition(s,l){return this.model.normalizePosition(s,l)}getLineIndentColumn(s){return this.model.getLineIndentColumn(s)}getInjectedTextAt(s){return null}}e.ViewModelLinesFromModelAsIs=f;class c{constructor(s){this._lines=s}_validPosition(s){return this._lines.model.validatePosition(s)}_validRange(s){return this._lines.model.validateRange(s)}convertViewPositionToModelPosition(s){return this._validPosition(s)}convertViewRangeToModelRange(s){return this._validRange(s)}validateViewPosition(s,l){return this._validPosition(l)}validateViewRange(s,l){return this._validRange(l)}convertModelPositionToViewPosition(s){return this._validPosition(s)}convertModelRangeToViewRange(s){return this._validRange(s)}modelPositionIsVisible(s){const l=this._lines.model.getLineCount();return!(s.lineNumber<1||s.lineNumber>l)}getModelLineViewLineCount(s){return 1}getViewLineNumberOfModelPosition(s,l){return s}}}),define(se[885],oe([1,0,13,14,39,2,17,11,36,791,75,10,5,114,31,80,337,214,551,339,86,336,215,884,546]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ViewModel=void 0;const m=!0;class C extends E.Disposable{constructor(M,R,x,O,B,W,V,K,F){if(super(),this.languageConfigurationService=V,this._themeService=K,this._attachedView=F,this.hiddenAreasModel=new I,this.previousHiddenAreas=[],this._editorId=M,this._configuration=R,this.model=x,this._eventDispatcher=new o.ViewModelEventDispatcher,this.onEvent=this._eventDispatcher.onEvent,this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._updateConfigurationViewLineCount=this._register(new k.RunOnceScheduler(()=>this._updateConfigurationViewLineCountNow(),0)),this._hasFocus=!1,this._viewportStart=w.create(this.model),this.glyphLanes=new h.GlyphMarginLanesModel(0),m&&this.model.isTooLargeForTokenization())this._lines=new g.ViewModelLinesFromModelAsIs(this.model);else{const q=this._configuration.options,ie=q.get(50),ae=q.get(137),ne=q.get(144),$=q.get(136),J=q.get(128);this._lines=new g.ViewModelLinesFromProjectedModel(this._editorId,this.model,O,B,ie,this.model.getOptions().tabSize,ae,ne.wrappingColumn,$,J)}this.coordinatesConverter=this._lines.createCoordinatesConverter(),this._cursor=this._register(new v.CursorsController(x,this,this.coordinatesConverter,this.cursorConfig)),this.viewLayout=this._register(new c.ViewLayout(this._configuration,this.getLineCount(),W)),this._register(this.viewLayout.onDidScroll(q=>{q.scrollTopChanged&&this._handleVisibleLinesChanged(),q.scrollTopChanged&&this._viewportStart.invalidate(),this._eventDispatcher.emitSingleViewEvent(new f.ViewScrollChangedEvent(q)),this._eventDispatcher.emitOutgoingEvent(new o.ScrollChangedEvent(q.oldScrollWidth,q.oldScrollLeft,q.oldScrollHeight,q.oldScrollTop,q.scrollWidth,q.scrollLeft,q.scrollHeight,q.scrollTop))})),this._register(this.viewLayout.onDidContentSizeChange(q=>{this._eventDispatcher.emitOutgoingEvent(q)})),this._decorations=new l.ViewModelDecorations(this._editorId,this.model,this._configuration,this._lines,this.coordinatesConverter),this._registerModelEvents(),this._register(this._configuration.onDidChangeFast(q=>{try{const ie=this._eventDispatcher.beginEmitViewEvents();this._onConfigurationChanged(ie,q)}finally{this._eventDispatcher.endEmitViewEvents()}})),this._register(d.MinimapTokensColorTracker.getInstance().onDidChange(()=>{this._eventDispatcher.emitSingleViewEvent(new f.ViewTokensColorsChangedEvent)})),this._register(this._themeService.onDidColorThemeChange(q=>{this._invalidateDecorationsColorCache(),this._eventDispatcher.emitSingleViewEvent(new f.ViewThemeChangedEvent(q))})),this._updateConfigurationViewLineCountNow()}dispose(){super.dispose(),this._decorations.dispose(),this._lines.dispose(),this._viewportStart.dispose(),this._eventDispatcher.dispose()}createLineBreaksComputer(){return this._lines.createLineBreaksComputer()}addViewEventHandler(M){this._eventDispatcher.addViewEventHandler(M)}removeViewEventHandler(M){this._eventDispatcher.removeViewEventHandler(M)}_updateConfigurationViewLineCountNow(){this._configuration.setViewLineCount(this._lines.getViewLineCount())}getModelVisibleRanges(){const M=this.viewLayout.getLinesViewportData(),R=new i.Range(M.startLineNumber,this.getLineMinColumn(M.startLineNumber),M.endLineNumber,this.getLineMaxColumn(M.endLineNumber));return this._toModelVisibleRanges(R)}visibleLinesStabilized(){const M=this.getModelVisibleRanges();this._attachedView.setVisibleLines(M,!0)}_handleVisibleLinesChanged(){const M=this.getModelVisibleRanges();this._attachedView.setVisibleLines(M,!1)}setHasFocus(M){this._hasFocus=M,this._cursor.setHasFocus(M),this._eventDispatcher.emitSingleViewEvent(new f.ViewFocusChangedEvent(M)),this._eventDispatcher.emitOutgoingEvent(new o.FocusChangedEvent(!M,M))}onCompositionStart(){this._eventDispatcher.emitSingleViewEvent(new f.ViewCompositionStartEvent)}onCompositionEnd(){this._eventDispatcher.emitSingleViewEvent(new f.ViewCompositionEndEvent)}_captureStableViewport(){if(this._viewportStart.isValid&&this.viewLayout.getCurrentScrollTop()>0){const M=new a.Position(this._viewportStart.viewLineNumber,this.getLineMinColumn(this._viewportStart.viewLineNumber)),R=this.coordinatesConverter.convertViewPositionToModelPosition(M);return new P(R,this._viewportStart.startLineDelta)}return new P(null,0)}_onConfigurationChanged(M,R){const x=this._captureStableViewport(),O=this._configuration.options,B=O.get(50),W=O.get(137),V=O.get(144),K=O.get(136),F=O.get(128);this._lines.setWrappingSettings(B,W,V.wrappingColumn,K,F)&&(M.emitViewEvent(new f.ViewFlushedEvent),M.emitViewEvent(new f.ViewLineMappingChangedEvent),M.emitViewEvent(new f.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(M),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),this._updateConfigurationViewLineCount.schedule()),R.hasChanged(90)&&(this._decorations.reset(),M.emitViewEvent(new f.ViewDecorationsChangedEvent(null))),R.hasChanged(97)&&(this._decorations.reset(),M.emitViewEvent(new f.ViewDecorationsChangedEvent(null))),M.emitViewEvent(new f.ViewConfigurationChangedEvent(R)),this.viewLayout.onConfigurationChanged(R),x.recoverViewportStart(this.coordinatesConverter,this.viewLayout),b.CursorConfiguration.shouldRecreate(R)&&(this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._cursor.updateConfiguration(this.cursorConfig))}_registerModelEvents(){this._register(this.model.onDidChangeContentOrInjectedText(M=>{try{const x=this._eventDispatcher.beginEmitViewEvents();let O=!1,B=!1;const W=M instanceof n.InternalModelContentChangeEvent?M.rawContentChangedEvent.changes:M.changes,V=M instanceof n.InternalModelContentChangeEvent?M.rawContentChangedEvent.versionId:null,K=this._lines.createLineBreaksComputer();for(const ie of W)switch(ie.changeType){case 4:{for(let ae=0;ae<ie.detail.length;ae++){const ne=ie.detail[ae];let $=ie.injectedTexts[ae];$&&($=$.filter(J=>!J.ownerId||J.ownerId===this._editorId)),K.addRequest(ne,$,null)}break}case 2:{let ae=null;ie.injectedText&&(ae=ie.injectedText.filter(ne=>!ne.ownerId||ne.ownerId===this._editorId)),K.addRequest(ie.detail,ae,null);break}}const F=K.finalize(),q=new L.ArrayQueue(F);for(const ie of W)switch(ie.changeType){case 1:{this._lines.onModelFlushed(),x.emitViewEvent(new f.ViewFlushedEvent),this._decorations.reset(),this.viewLayout.onFlushed(this.getLineCount()),O=!0;break}case 3:{const ae=this._lines.onModelLinesDeleted(V,ie.fromLineNumber,ie.toLineNumber);ae!==null&&(x.emitViewEvent(ae),this.viewLayout.onLinesDeleted(ae.fromLineNumber,ae.toLineNumber)),O=!0;break}case 4:{const ae=q.takeCount(ie.detail.length),ne=this._lines.onModelLinesInserted(V,ie.fromLineNumber,ie.toLineNumber,ae);ne!==null&&(x.emitViewEvent(ne),this.viewLayout.onLinesInserted(ne.fromLineNumber,ne.toLineNumber)),O=!0;break}case 2:{const ae=q.dequeue(),[ne,$,J,Q]=this._lines.onModelLineChanged(V,ie.lineNumber,ae);B=ne,$&&x.emitViewEvent($),J&&(x.emitViewEvent(J),this.viewLayout.onLinesInserted(J.fromLineNumber,J.toLineNumber)),Q&&(x.emitViewEvent(Q),this.viewLayout.onLinesDeleted(Q.fromLineNumber,Q.toLineNumber));break}case 5:break}V!==null&&this._lines.acceptVersionId(V),this.viewLayout.onHeightMaybeChanged(),!O&&B&&(x.emitViewEvent(new f.ViewLineMappingChangedEvent),x.emitViewEvent(new f.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(x),this._decorations.onLineMappingChanged())}finally{this._eventDispatcher.endEmitViewEvents()}const R=this._viewportStart.isValid;if(this._viewportStart.invalidate(),this._configuration.setModelLineCount(this.model.getLineCount()),this._updateConfigurationViewLineCountNow(),!this._hasFocus&&this.model.getAttachedEditorCount()>=2&&R){const x=this.model._getTrackedRange(this._viewportStart.modelTrackedRange);if(x){const O=this.coordinatesConverter.convertModelPositionToViewPosition(x.getStartPosition()),B=this.viewLayout.getVerticalOffsetForLineNumber(O.lineNumber);this.viewLayout.setScrollPosition({scrollTop:B+this._viewportStart.startLineDelta},1)}}try{const x=this._eventDispatcher.beginEmitViewEvents();M instanceof n.InternalModelContentChangeEvent&&x.emitOutgoingEvent(new o.ModelContentChangedEvent(M.contentChangedEvent)),this._cursor.onModelContentChanged(x,M)}finally{this._eventDispatcher.endEmitViewEvents()}this._handleVisibleLinesChanged()})),this._register(this.model.onDidChangeTokens(M=>{const R=[];for(let x=0,O=M.ranges.length;x<O;x++){const B=M.ranges[x],W=this.coordinatesConverter.convertModelPositionToViewPosition(new a.Position(B.fromLineNumber,1)).lineNumber,V=this.coordinatesConverter.convertModelPositionToViewPosition(new a.Position(B.toLineNumber,this.model.getLineMaxColumn(B.toLineNumber))).lineNumber;R[x]={fromLineNumber:W,toLineNumber:V}}this._eventDispatcher.emitSingleViewEvent(new f.ViewTokensChangedEvent(R)),this._eventDispatcher.emitOutgoingEvent(new o.ModelTokensChangedEvent(M))})),this._register(this.model.onDidChangeLanguageConfiguration(M=>{this._eventDispatcher.emitSingleViewEvent(new f.ViewLanguageConfigurationEvent),this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._cursor.updateConfiguration(this.cursorConfig),this._eventDispatcher.emitOutgoingEvent(new o.ModelLanguageConfigurationChangedEvent(M))})),this._register(this.model.onDidChangeLanguage(M=>{this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._cursor.updateConfiguration(this.cursorConfig),this._eventDispatcher.emitOutgoingEvent(new o.ModelLanguageChangedEvent(M))})),this._register(this.model.onDidChangeOptions(M=>{if(this._lines.setTabSize(this.model.getOptions().tabSize)){try{const R=this._eventDispatcher.beginEmitViewEvents();R.emitViewEvent(new f.ViewFlushedEvent),R.emitViewEvent(new f.ViewLineMappingChangedEvent),R.emitViewEvent(new f.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(R),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount())}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule()}this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._cursor.updateConfiguration(this.cursorConfig),this._eventDispatcher.emitOutgoingEvent(new o.ModelOptionsChangedEvent(M))})),this._register(this.model.onDidChangeDecorations(M=>{this._decorations.onModelDecorationsChanged(),this._eventDispatcher.emitSingleViewEvent(new f.ViewDecorationsChangedEvent(M)),this._eventDispatcher.emitOutgoingEvent(new o.ModelDecorationsChangedEvent(M))}))}setHiddenAreas(M,R){var x;this.hiddenAreasModel.setHiddenAreas(R,M);const O=this.hiddenAreasModel.getMergedRanges();if(O===this.previousHiddenAreas)return;this.previousHiddenAreas=O;const B=this._captureStableViewport();let W=!1;try{const V=this._eventDispatcher.beginEmitViewEvents();W=this._lines.setHiddenAreas(O),W&&(V.emitViewEvent(new f.ViewFlushedEvent),V.emitViewEvent(new f.ViewLineMappingChangedEvent),V.emitViewEvent(new f.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(V),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),this.viewLayout.onHeightMaybeChanged());const K=(x=B.viewportStartModelPosition)===null||x===void 0?void 0:x.lineNumber;K&&O.some(q=>q.startLineNumber<=K&&K<=q.endLineNumber)||B.recoverViewportStart(this.coordinatesConverter,this.viewLayout)}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule(),W&&this._eventDispatcher.emitOutgoingEvent(new o.HiddenAreasChangedEvent)}getVisibleRangesPlusViewportAboveBelow(){const M=this._configuration.options.get(143),R=this._configuration.options.get(66),x=Math.max(20,Math.round(M.height/R)),O=this.viewLayout.getLinesViewportData(),B=Math.max(1,O.completelyVisibleStartLineNumber-x),W=Math.min(this.getLineCount(),O.completelyVisibleEndLineNumber+x);return this._toModelVisibleRanges(new i.Range(B,this.getLineMinColumn(B),W,this.getLineMaxColumn(W)))}getVisibleRanges(){const M=this.getCompletelyVisibleViewRange();return this._toModelVisibleRanges(M)}getHiddenAreas(){return this._lines.getHiddenAreas()}_toModelVisibleRanges(M){const R=this.coordinatesConverter.convertViewRangeToModelRange(M),x=this._lines.getHiddenAreas();if(x.length===0)return[R];const O=[];let B=0,W=R.startLineNumber,V=R.startColumn;const K=R.endLineNumber,F=R.endColumn;for(let q=0,ie=x.length;q<ie;q++){const ae=x[q].startLineNumber,ne=x[q].endLineNumber;ne<W||ae>K||(W<ae&&(O[B++]=new i.Range(W,V,ae-1,this.model.getLineMaxColumn(ae-1))),W=ne+1,V=1)}return(W<K||W===K&&V<F)&&(O[B++]=new i.Range(W,V,K,F)),O}getCompletelyVisibleViewRange(){const M=this.viewLayout.getLinesViewportData(),R=M.completelyVisibleStartLineNumber,x=M.completelyVisibleEndLineNumber;return new i.Range(R,this.getLineMinColumn(R),x,this.getLineMaxColumn(x))}getCompletelyVisibleViewRangeAtScrollTop(M){const R=this.viewLayout.getLinesViewportDataAtScrollTop(M),x=R.completelyVisibleStartLineNumber,O=R.completelyVisibleEndLineNumber;return new i.Range(x,this.getLineMinColumn(x),O,this.getLineMaxColumn(O))}saveState(){const M=this.viewLayout.saveState(),R=M.scrollTop,x=this.viewLayout.getLineNumberAtVerticalOffset(R),O=this.coordinatesConverter.convertViewPositionToModelPosition(new a.Position(x,this.getLineMinColumn(x))),B=this.viewLayout.getVerticalOffsetForLineNumber(x)-R;return{scrollLeft:M.scrollLeft,firstPosition:O,firstPositionDeltaTop:B}}reduceRestoreState(M){if(typeof M.firstPosition>\"u\")return this._reduceRestoreStateCompatibility(M);const R=this.model.validatePosition(M.firstPosition),x=this.coordinatesConverter.convertModelPositionToViewPosition(R),O=this.viewLayout.getVerticalOffsetForLineNumber(x.lineNumber)-M.firstPositionDeltaTop;return{scrollLeft:M.scrollLeft,scrollTop:O}}_reduceRestoreStateCompatibility(M){return{scrollLeft:M.scrollLeft,scrollTop:M.scrollTopWithoutViewZones}}getTabSize(){return this.model.getOptions().tabSize}getLineCount(){return this._lines.getViewLineCount()}setViewport(M,R,x){this._viewportStart.update(this,M)}getActiveIndentGuide(M,R,x){return this._lines.getActiveIndentGuide(M,R,x)}getLinesIndentGuides(M,R){return this._lines.getViewLinesIndentGuides(M,R)}getBracketGuidesInRangeByLine(M,R,x,O){return this._lines.getViewLinesBracketGuides(M,R,x,O)}getLineContent(M){return this._lines.getViewLineContent(M)}getLineLength(M){return this._lines.getViewLineLength(M)}getLineMinColumn(M){return this._lines.getViewLineMinColumn(M)}getLineMaxColumn(M){return this._lines.getViewLineMaxColumn(M)}getLineFirstNonWhitespaceColumn(M){const R=p.firstNonWhitespaceIndex(this.getLineContent(M));return R===-1?0:R+1}getLineLastNonWhitespaceColumn(M){const R=p.lastNonWhitespaceIndex(this.getLineContent(M));return R===-1?0:R+2}getMinimapDecorationsInRange(M){return this._decorations.getMinimapDecorationsInRange(M)}getDecorationsInViewport(M){return this._decorations.getDecorationsViewportData(M).decorations}getInjectedTextAt(M){return this._lines.getInjectedTextAt(M)}getViewportViewLineRenderingData(M,R){const O=this._decorations.getDecorationsViewportData(M).inlineDecorations[R-M.startLineNumber];return this._getViewLineRenderingData(R,O)}getViewLineRenderingData(M){const R=this._decorations.getInlineDecorationsOnLine(M);return this._getViewLineRenderingData(M,R)}_getViewLineRenderingData(M,R){const x=this.model.mightContainRTL(),O=this.model.mightContainNonBasicASCII(),B=this.getTabSize(),W=this._lines.getViewLineData(M);return W.inlineDecorations&&(R=[...R,...W.inlineDecorations.map(V=>V.toInlineDecoration(M))]),new s.ViewLineRenderingData(W.minColumn,W.maxColumn,W.content,W.continuesWithWrappedLine,x,O,W.tokens,R,B,W.startVisibleColumn)}getViewLineData(M){return this._lines.getViewLineData(M)}getMinimapLinesRenderingData(M,R,x){const O=this._lines.getViewLinesData(M,R,x);return new s.MinimapLinesRenderingData(this.getTabSize(),O)}getAllOverviewRulerDecorations(M){const R=this.model.getOverviewRulerDecorations(this._editorId,(0,_.filterValidationDecorations)(this._configuration.options)),x=new D;for(const O of R){const B=O.options,W=B.overviewRuler;if(!W)continue;const V=W.position;if(V===0)continue;const K=W.getColor(M.value),F=this.coordinatesConverter.getViewLineNumberOfModelPosition(O.range.startLineNumber,O.range.startColumn),q=this.coordinatesConverter.getViewLineNumberOfModelPosition(O.range.endLineNumber,O.range.endColumn);x.accept(K,B.zIndex,F,q,V)}return x.asArray}_invalidateDecorationsColorCache(){const M=this.model.getOverviewRulerDecorations();for(const R of M){const x=R.options.overviewRuler;x?.invalidateCachedColor();const O=R.options.minimap;O?.invalidateCachedColor()}}getValueInRange(M,R){const x=this.coordinatesConverter.convertViewRangeToModelRange(M);return this.model.getValueInRange(x,R)}getValueLengthInRange(M,R){const x=this.coordinatesConverter.convertViewRangeToModelRange(M);return this.model.getValueLengthInRange(x,R)}modifyPosition(M,R){const x=this.coordinatesConverter.convertViewPositionToModelPosition(M),O=this.model.modifyPosition(x,R);return this.coordinatesConverter.convertModelPositionToViewPosition(O)}deduceModelPositionRelativeToViewPosition(M,R,x){const O=this.coordinatesConverter.convertViewPositionToModelPosition(M);this.model.getEOL().length===2&&(R<0?R-=x:R+=x);const W=this.model.getOffsetAt(O)+R;return this.model.getPositionAt(W)}getPlainTextToCopy(M,R,x){const O=x?`\\r\n`:this.model.getEOL();M=M.slice(0),M.sort(i.Range.compareRangesUsingStarts);let B=!1,W=!1;for(const K of M)K.isEmpty()?B=!0:W=!0;if(!W){if(!R)return\"\";const K=M.map(q=>q.startLineNumber);let F=\"\";for(let q=0;q<K.length;q++)q>0&&K[q-1]===K[q]||(F+=this.model.getLineContent(K[q])+O);return F}if(B&&R){const K=[];let F=0;for(const q of M){const ie=q.startLineNumber;q.isEmpty()?ie!==F&&K.push(this.model.getLineContent(ie)):K.push(this.model.getValueInRange(q,x?2:0)),F=ie}return K.length===1?K[0]:K}const V=[];for(const K of M)K.isEmpty()||V.push(this.model.getValueInRange(K,x?2:0));return V.length===1?V[0]:V}getRichTextToCopy(M,R){const x=this.model.getLanguageId();if(x===r.PLAINTEXT_LANGUAGE_ID||M.length!==1)return null;let O=M[0];if(O.isEmpty()){if(!R)return null;const q=O.startLineNumber;O=new i.Range(q,this.model.getLineMinColumn(q),q,this.model.getLineMaxColumn(q))}const B=this._configuration.options.get(50),W=this._getColorMap(),K=/[:;\\\\\\/<>]/.test(B.fontFamily)||B.fontFamily===_.EDITOR_FONT_DEFAULTS.fontFamily;let F;return K?F=_.EDITOR_FONT_DEFAULTS.fontFamily:(F=B.fontFamily,F=F.replace(/\"/g,\"'\"),/[,']/.test(F)||/[+ ]/.test(F)&&(F=`'${F}'`),F=`${F}, ${_.EDITOR_FONT_DEFAULTS.fontFamily}`),{mode:x,html:`<div style=\"color: ${W[1]};background-color: ${W[2]};font-family: ${F};font-weight: ${B.fontWeight};font-size: ${B.fontSize}px;line-height: ${B.lineHeight}px;white-space: pre;\">`+this._getHTMLToCopy(O,W)+\"</div>\"}}_getHTMLToCopy(M,R){const x=M.startLineNumber,O=M.startColumn,B=M.endLineNumber,W=M.endColumn,V=this.getTabSize();let K=\"\";for(let F=x;F<=B;F++){const q=this.model.tokenization.getLineTokens(F),ie=q.getLineContent(),ae=F===x?O-1:0,ne=F===B?W-1:ie.length;ie===\"\"?K+=\"<br>\":K+=(0,u.tokenizeLineToHTML)(ie,q.inflate(),R,ae,ne,V,S.isWindows)}return K}_getColorMap(){const M=t.TokenizationRegistry.getColorMap(),R=[\"#000000\"];if(M)for(let x=1,O=M.length;x<O;x++)R[x]=y.Color.Format.CSS.formatHex(M[x]);return R}getPrimaryCursorState(){return this._cursor.getPrimaryCursorState()}getLastAddedCursorIndex(){return this._cursor.getLastAddedCursorIndex()}getCursorStates(){return this._cursor.getCursorStates()}setCursorStates(M,R,x){return this._withViewEventsCollector(O=>this._cursor.setStates(O,M,R,x))}getCursorColumnSelectData(){return this._cursor.getCursorColumnSelectData()}getCursorAutoClosedCharacters(){return this._cursor.getAutoClosedCharacters()}setCursorColumnSelectData(M){this._cursor.setCursorColumnSelectData(M)}getPrevEditOperationType(){return this._cursor.getPrevEditOperationType()}setPrevEditOperationType(M){this._cursor.setPrevEditOperationType(M)}getSelection(){return this._cursor.getSelection()}getSelections(){return this._cursor.getSelections()}getPosition(){return this._cursor.getPrimaryCursorState().modelState.position}setSelections(M,R,x=0){this._withViewEventsCollector(O=>this._cursor.setSelections(O,M,R,x))}saveCursorState(){return this._cursor.saveState()}restoreCursorState(M){this._withViewEventsCollector(R=>this._cursor.restoreState(R,M))}_executeCursorEdit(M){if(this._cursor.context.cursorConfig.readOnly){this._eventDispatcher.emitOutgoingEvent(new o.ReadOnlyEditAttemptEvent);return}this._withViewEventsCollector(M)}executeEdits(M,R,x){this._executeCursorEdit(O=>this._cursor.executeEdits(O,M,R,x))}startComposition(){this._executeCursorEdit(M=>this._cursor.startComposition(M))}endComposition(M){this._executeCursorEdit(R=>this._cursor.endComposition(R,M))}type(M,R){this._executeCursorEdit(x=>this._cursor.type(x,M,R))}compositionType(M,R,x,O,B){this._executeCursorEdit(W=>this._cursor.compositionType(W,M,R,x,O,B))}paste(M,R,x,O){this._executeCursorEdit(B=>this._cursor.paste(B,M,R,x,O))}cut(M){this._executeCursorEdit(R=>this._cursor.cut(R,M))}executeCommand(M,R){this._executeCursorEdit(x=>this._cursor.executeCommand(x,M,R))}executeCommands(M,R){this._executeCursorEdit(x=>this._cursor.executeCommands(x,M,R))}revealPrimaryCursor(M,R,x=!1){this._withViewEventsCollector(O=>this._cursor.revealPrimary(O,M,x,0,R,0))}revealTopMostCursor(M){const R=this._cursor.getTopMostViewPosition(),x=new i.Range(R.lineNumber,R.column,R.lineNumber,R.column);this._withViewEventsCollector(O=>O.emitViewEvent(new f.ViewRevealRangeRequestEvent(M,!1,x,null,0,!0,0)))}revealBottomMostCursor(M){const R=this._cursor.getBottomMostViewPosition(),x=new i.Range(R.lineNumber,R.column,R.lineNumber,R.column);this._withViewEventsCollector(O=>O.emitViewEvent(new f.ViewRevealRangeRequestEvent(M,!1,x,null,0,!0,0)))}revealRange(M,R,x,O,B){this._withViewEventsCollector(W=>W.emitViewEvent(new f.ViewRevealRangeRequestEvent(M,!1,x,null,O,R,B)))}changeWhitespace(M){this.viewLayout.changeWhitespace(M)&&(this._eventDispatcher.emitSingleViewEvent(new f.ViewZonesChangedEvent),this._eventDispatcher.emitOutgoingEvent(new o.ViewZonesChangedEvent))}_withViewEventsCollector(M){try{const R=this._eventDispatcher.beginEmitViewEvents();return M(R)}finally{this._eventDispatcher.endEmitViewEvents()}}normalizePosition(M,R){return this._lines.normalizePosition(M,R)}getLineIndentColumn(M){return this._lines.getLineIndentColumn(M)}}e.ViewModel=C;class w{static create(M){const R=M._setTrackedRange(null,new i.Range(1,1,1,1),1);return new w(M,1,!1,R,0)}get viewLineNumber(){return this._viewLineNumber}get isValid(){return this._isValid}get modelTrackedRange(){return this._modelTrackedRange}get startLineDelta(){return this._startLineDelta}constructor(M,R,x,O,B){this._model=M,this._viewLineNumber=R,this._isValid=x,this._modelTrackedRange=O,this._startLineDelta=B}dispose(){this._model._setTrackedRange(this._modelTrackedRange,null,1)}update(M,R){const x=M.coordinatesConverter.convertViewPositionToModelPosition(new a.Position(R,M.getLineMinColumn(R))),O=M.model._setTrackedRange(this._modelTrackedRange,new i.Range(x.lineNumber,x.column,x.lineNumber,x.column),1),B=M.viewLayout.getVerticalOffsetForLineNumber(R),W=M.viewLayout.getCurrentScrollTop();this._viewLineNumber=R,this._isValid=!0,this._modelTrackedRange=O,this._startLineDelta=W-B}invalidate(){this._isValid=!1}}class D{constructor(){this._asMap=Object.create(null),this.asArray=[]}accept(M,R,x,O,B){const W=this._asMap[M];if(W){const V=W.data,K=V[V.length-3],F=V[V.length-1];if(K===B&&F+1>=x){O>F&&(V[V.length-1]=O);return}V.push(B,x,O)}else{const V=new s.OverviewRulerDecorationsGroup(M,R,[B,x,O]);this._asMap[M]=V,this.asArray.push(V)}}}class I{constructor(){this.hiddenAreas=new Map,this.shouldRecompute=!1,this.ranges=[]}setHiddenAreas(M,R){const x=this.hiddenAreas.get(M);x&&A(x,R)||(this.hiddenAreas.set(M,R),this.shouldRecompute=!0)}getMergedRanges(){if(!this.shouldRecompute)return this.ranges;this.shouldRecompute=!1;const M=Array.from(this.hiddenAreas.values()).reduce((R,x)=>T(R,x),[]);return A(this.ranges,M)?this.ranges:(this.ranges=M,this.ranges)}}function T(N,M){const R=[];let x=0,O=0;for(;x<N.length&&O<M.length;){const B=N[x],W=M[O];if(B.endLineNumber<W.startLineNumber-1)R.push(N[x++]);else if(W.endLineNumber<B.startLineNumber-1)R.push(M[O++]);else{const V=Math.min(B.startLineNumber,W.startLineNumber),K=Math.max(B.endLineNumber,W.endLineNumber);R.push(new i.Range(V,1,K,1)),x++,O++}}for(;x<N.length;)R.push(N[x++]);for(;O<M.length;)R.push(M[O++]);return R}function A(N,M){if(N.length!==M.length)return!1;for(let R=0;R<N.length;R++)if(!N[R].equalsRange(M[R]))return!1;return!0}class P{constructor(M,R){this.viewportStartModelPosition=M,this.startLineDelta=R}recoverViewportStart(M,R){if(!this.viewportStartModelPosition)return;const x=M.convertModelPositionToViewPosition(this.viewportStartModelPosition),O=R.getVerticalOffsetForLineNumber(x.lineNumber);R.setScrollPosition({scrollTop:O+this.startLineDelta},1)}}}),define(se[194],oe([1,0,621,7,12,6,2,47,771,16,33,862,279,36,85,10,5,24,287,180,21,38,83,29,885,25,15,8,163,50,23,69,548,609,181,32,72,18,607,202,807,451]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P,N,M,R,x,O,B,W){\"use strict\";var V;Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorModeContext=e.BooleanEventEmitter=e.CodeEditorWidget=void 0;let K=0;class F{constructor(z,H,Y,j,Z,ee){this.model=z,this.viewModel=H,this.view=Y,this.hasRealView=j,this.listenersToRemove=Z,this.attachedView=ee}dispose(){(0,S.dispose)(this.listenersToRemove),this.model.onBeforeDetached(this.attachedView),this.hasRealView&&this.view.dispose(),this.viewModel.dispose()}}let q=V=class extends S.Disposable{get isSimpleWidget(){return this._configuration.isSimpleWidget}constructor(z,H,Y,j,Z,ee,le,ue,ce,pe,ve,Ce){var Se;super(),this.languageConfigurationService=ve,this._deliveryQueue=(0,E.createEventDeliveryQueue)(),this._contributions=this._register(new B.CodeEditorContributions),this._onDidDispose=this._register(new E.Emitter),this.onDidDispose=this._onDidDispose.event,this._onDidChangeModelContent=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeModelContent=this._onDidChangeModelContent.event,this._onDidChangeModelLanguage=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeModelLanguage=this._onDidChangeModelLanguage.event,this._onDidChangeModelLanguageConfiguration=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeModelLanguageConfiguration=this._onDidChangeModelLanguageConfiguration.event,this._onDidChangeModelOptions=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeModelOptions=this._onDidChangeModelOptions.event,this._onDidChangeModelDecorations=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeModelDecorations=this._onDidChangeModelDecorations.event,this._onDidChangeModelTokens=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeModelTokens=this._onDidChangeModelTokens.event,this._onDidChangeConfiguration=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeConfiguration=this._onDidChangeConfiguration.event,this._onWillChangeModel=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onWillChangeModel=this._onWillChangeModel.event,this._onDidChangeModel=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeModel=this._onDidChangeModel.event,this._onDidChangeCursorPosition=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeCursorPosition=this._onDidChangeCursorPosition.event,this._onDidChangeCursorSelection=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeCursorSelection=this._onDidChangeCursorSelection.event,this._onDidAttemptReadOnlyEdit=this._register(new ae(this._contributions,this._deliveryQueue)),this.onDidAttemptReadOnlyEdit=this._onDidAttemptReadOnlyEdit.event,this._onDidLayoutChange=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidLayoutChange=this._onDidLayoutChange.event,this._editorTextFocus=this._register(new ie({deliveryQueue:this._deliveryQueue})),this.onDidFocusEditorText=this._editorTextFocus.onDidChangeToTrue,this.onDidBlurEditorText=this._editorTextFocus.onDidChangeToFalse,this._editorWidgetFocus=this._register(new ie({deliveryQueue:this._deliveryQueue})),this.onDidFocusEditorWidget=this._editorWidgetFocus.onDidChangeToTrue,this.onDidBlurEditorWidget=this._editorWidgetFocus.onDidChangeToFalse,this._onWillType=this._register(new ae(this._contributions,this._deliveryQueue)),this.onWillType=this._onWillType.event,this._onDidType=this._register(new ae(this._contributions,this._deliveryQueue)),this.onDidType=this._onDidType.event,this._onDidCompositionStart=this._register(new ae(this._contributions,this._deliveryQueue)),this.onDidCompositionStart=this._onDidCompositionStart.event,this._onDidCompositionEnd=this._register(new ae(this._contributions,this._deliveryQueue)),this.onDidCompositionEnd=this._onDidCompositionEnd.event,this._onDidPaste=this._register(new ae(this._contributions,this._deliveryQueue)),this.onDidPaste=this._onDidPaste.event,this._onMouseUp=this._register(new ae(this._contributions,this._deliveryQueue)),this.onMouseUp=this._onMouseUp.event,this._onMouseDown=this._register(new ae(this._contributions,this._deliveryQueue)),this.onMouseDown=this._onMouseDown.event,this._onMouseDrag=this._register(new ae(this._contributions,this._deliveryQueue)),this.onMouseDrag=this._onMouseDrag.event,this._onMouseDrop=this._register(new ae(this._contributions,this._deliveryQueue)),this.onMouseDrop=this._onMouseDrop.event,this._onMouseDropCanceled=this._register(new ae(this._contributions,this._deliveryQueue)),this.onMouseDropCanceled=this._onMouseDropCanceled.event,this._onDropIntoEditor=this._register(new ae(this._contributions,this._deliveryQueue)),this.onDropIntoEditor=this._onDropIntoEditor.event,this._onContextMenu=this._register(new ae(this._contributions,this._deliveryQueue)),this.onContextMenu=this._onContextMenu.event,this._onMouseMove=this._register(new ae(this._contributions,this._deliveryQueue)),this.onMouseMove=this._onMouseMove.event,this._onMouseLeave=this._register(new ae(this._contributions,this._deliveryQueue)),this.onMouseLeave=this._onMouseLeave.event,this._onMouseWheel=this._register(new ae(this._contributions,this._deliveryQueue)),this.onMouseWheel=this._onMouseWheel.event,this._onKeyUp=this._register(new ae(this._contributions,this._deliveryQueue)),this.onKeyUp=this._onKeyUp.event,this._onKeyDown=this._register(new ae(this._contributions,this._deliveryQueue)),this.onKeyDown=this._onKeyDown.event,this._onDidContentSizeChange=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidContentSizeChange=this._onDidContentSizeChange.event,this._onDidScrollChange=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidScrollChange=this._onDidScrollChange.event,this._onDidChangeViewZones=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeViewZones=this._onDidChangeViewZones.event,this._onDidChangeHiddenAreas=this._register(new E.Emitter({deliveryQueue:this._deliveryQueue})),this.onDidChangeHiddenAreas=this._onDidChangeHiddenAreas.event,this._actions=new Map,this._bannerDomNode=null,this._dropIntoEditorDecorations=this.createDecorationsCollection(),Z.willCreateCodeEditor();const _e={...H};this._domElement=z,this._overflowWidgetsDomNode=_e.overflowWidgetsDomNode,delete _e.overflowWidgetsDomNode,this._id=++K,this._decorationTypeKeysToIds={},this._decorationTypeSubtypes={},this._telemetryData=Y.telemetryData,this._configuration=this._register(this._createConfiguration(Y.isSimpleWidget||!1,_e,pe)),this._register(this._configuration.onDidChange(xe=>{this._onDidChangeConfiguration.fire(xe);const Be=this._configuration.options;if(xe.hasChanged(143)){const De=Be.get(143);this._onDidLayoutChange.fire(De)}})),this._contextKeyService=this._register(le.createScoped(this._domElement)),this._notificationService=ce,this._codeEditorService=Z,this._commandService=ee,this._themeService=ue,this._register(new ne(this,this._contextKeyService)),this._register(new $(this,this._contextKeyService,Ce)),this._instantiationService=j.createChild(new D.ServiceCollection([C.IContextKeyService,this._contextKeyService])),this._modelData=null,this._focusTracker=new J(z,this._overflowWidgetsDomNode),this._register(this._focusTracker.onChange(()=>{this._editorWidgetFocus.setValue(this._focusTracker.hasFocus())})),this._contentWidgets={},this._overlayWidgets={},this._glyphMarginWidgets={};let Ee;Array.isArray(Y.contributions)?Ee=Y.contributions:Ee=v.EditorExtensionsRegistry.getEditorContributions(),this._contributions.initialize(this,Ee,this._instantiationService);for(const xe of v.EditorExtensionsRegistry.getEditorActions()){if(this._actions.has(xe.id)){(0,y.onUnexpectedError)(new Error(`Cannot have two actions with the same id ${xe.id}`));continue}const Be=new c.InternalEditorAction(xe.id,xe.label,xe.alias,xe.metadata,(Se=xe.precondition)!==null&&Se!==void 0?Se:void 0,De=>this._instantiationService.invokeFunction(Ie=>Promise.resolve(xe.runEditorCommand(Ie,this,De))),this._contextKeyService);this._actions.set(Be.id,Be)}const Ae=()=>!this._configuration.options.get(90)&&this._configuration.options.get(36).enabled;this._register(new k.DragAndDropObserver(this._domElement,{onDragOver:xe=>{if(!Ae())return;const Be=this.getTargetAtClientPoint(xe.clientX,xe.clientY);Be?.position&&this.showDropIndicatorAt(Be.position)},onDrop:async xe=>{if(!Ae()||(this.removeDropIndicator(),!xe.dataTransfer))return;const Be=this.getTargetAtClientPoint(xe.clientX,xe.clientY);Be?.position&&this._onDropIntoEditor.fire({position:Be.position,event:xe})},onDragLeave:()=>{this.removeDropIndicator()},onDragEnd:()=>{this.removeDropIndicator()}})),this._codeEditorService.addCodeEditor(this)}writeScreenReaderContent(z){var H;(H=this._modelData)===null||H===void 0||H.view.writeScreenReaderContent(z)}_createConfiguration(z,H,Y){return new _.EditorConfiguration(z,H,this._domElement,Y)}getId(){return this.getEditorType()+\":\"+this._id}getEditorType(){return d.EditorType.ICodeEditor}dispose(){this._codeEditorService.removeCodeEditor(this),this._focusTracker.dispose(),this._actions.clear(),this._contentWidgets={},this._overlayWidgets={},this._removeDecorationTypes(),this._postDetachModelCleanup(this._detachModel()),this._onDidDispose.fire(),super.dispose()}invokeWithinContext(z){return this._instantiationService.invokeFunction(z)}updateOptions(z){this._configuration.updateOptions(z||{})}getOptions(){return this._configuration.options}getOption(z){return this._configuration.options.get(z)}getRawOptions(){return this._configuration.getRawOptions()}getOverflowWidgetsDomNode(){return this._overflowWidgetsDomNode}getConfiguredWordAtPosition(z){return this._modelData?M.WordOperations.getWordAtPosition(this._modelData.model,this._configuration.options.get(129),z):null}getValue(z=null){if(!this._modelData)return\"\";const H=!!(z&&z.preserveBOM);let Y=0;return z&&z.lineEnding&&z.lineEnding===`\n`?Y=1:z&&z.lineEnding&&z.lineEnding===`\\r\n`&&(Y=2),this._modelData.model.getValue(Y,H)}setValue(z){this._modelData&&this._modelData.model.setValue(z)}getModel(){return this._modelData?this._modelData.model:null}setModel(z=null){var H;const Y=z;if(this._modelData===null&&Y===null||this._modelData&&this._modelData.model===Y)return;const j={oldModelUrl:((H=this._modelData)===null||H===void 0?void 0:H.model.uri)||null,newModelUrl:Y?.uri||null};this._onWillChangeModel.fire(j);const Z=this.hasTextFocus(),ee=this._detachModel();this._attachModel(Y),Z&&this.hasModel()&&this.focus(),this._removeDecorationTypes(),this._onDidChangeModel.fire(j),this._postDetachModelCleanup(ee),this._contributions.onAfterModelAttached()}_removeDecorationTypes(){if(this._decorationTypeKeysToIds={},this._decorationTypeSubtypes){for(const z in this._decorationTypeSubtypes){const H=this._decorationTypeSubtypes[z];for(const Y in H)this._removeDecorationType(z+\"-\"+Y)}this._decorationTypeSubtypes={}}}getVisibleRanges(){return this._modelData?this._modelData.viewModel.getVisibleRanges():[]}getVisibleRangesPlusViewportAboveBelow(){return this._modelData?this._modelData.viewModel.getVisibleRangesPlusViewportAboveBelow():[]}getWhitespaces(){return this._modelData?this._modelData.viewModel.viewLayout.getWhitespaces():[]}static _getVerticalOffsetAfterPosition(z,H,Y,j){const Z=z.model.validatePosition({lineNumber:H,column:Y}),ee=z.viewModel.coordinatesConverter.convertModelPositionToViewPosition(Z);return z.viewModel.viewLayout.getVerticalOffsetAfterLineNumber(ee.lineNumber,j)}getTopForLineNumber(z,H=!1){return this._modelData?V._getVerticalOffsetForPosition(this._modelData,z,1,H):-1}getTopForPosition(z,H){return this._modelData?V._getVerticalOffsetForPosition(this._modelData,z,H,!1):-1}static _getVerticalOffsetForPosition(z,H,Y,j=!1){const Z=z.model.validatePosition({lineNumber:H,column:Y}),ee=z.viewModel.coordinatesConverter.convertModelPositionToViewPosition(Z);return z.viewModel.viewLayout.getVerticalOffsetForLineNumber(ee.lineNumber,j)}getBottomForLineNumber(z,H=!1){return this._modelData?V._getVerticalOffsetAfterPosition(this._modelData,z,1,H):-1}setHiddenAreas(z,H){var Y;(Y=this._modelData)===null||Y===void 0||Y.viewModel.setHiddenAreas(z.map(j=>u.Range.lift(j)),H)}getVisibleColumnFromPosition(z){if(!this._modelData)return z.column;const H=this._modelData.model.validatePosition(z),Y=this._modelData.model.getOptions().tabSize;return t.CursorColumns.visibleColumnFromColumn(this._modelData.model.getLineContent(H.lineNumber),H.column,Y)+1}getPosition(){return this._modelData?this._modelData.viewModel.getPosition():null}setPosition(z,H=\"api\"){if(this._modelData){if(!r.Position.isIPosition(z))throw new Error(\"Invalid arguments\");this._modelData.viewModel.setSelections(H,[{selectionStartLineNumber:z.lineNumber,selectionStartColumn:z.column,positionLineNumber:z.lineNumber,positionColumn:z.column}])}}_sendRevealRange(z,H,Y,j){if(!this._modelData)return;if(!u.Range.isIRange(z))throw new Error(\"Invalid arguments\");const Z=this._modelData.model.validateRange(z),ee=this._modelData.viewModel.coordinatesConverter.convertModelRangeToViewRange(Z);this._modelData.viewModel.revealRange(\"api\",Y,ee,H,j)}revealLine(z,H=0){this._revealLine(z,0,H)}revealLineInCenter(z,H=0){this._revealLine(z,1,H)}revealLineInCenterIfOutsideViewport(z,H=0){this._revealLine(z,2,H)}revealLineNearTop(z,H=0){this._revealLine(z,5,H)}_revealLine(z,H,Y){if(typeof z!=\"number\")throw new Error(\"Invalid arguments\");this._sendRevealRange(new u.Range(z,1,z,1),H,!1,Y)}revealPosition(z,H=0){this._revealPosition(z,0,!0,H)}revealPositionInCenter(z,H=0){this._revealPosition(z,1,!0,H)}revealPositionInCenterIfOutsideViewport(z,H=0){this._revealPosition(z,2,!0,H)}revealPositionNearTop(z,H=0){this._revealPosition(z,5,!0,H)}_revealPosition(z,H,Y,j){if(!r.Position.isIPosition(z))throw new Error(\"Invalid arguments\");this._sendRevealRange(new u.Range(z.lineNumber,z.column,z.lineNumber,z.column),H,Y,j)}getSelection(){return this._modelData?this._modelData.viewModel.getSelection():null}getSelections(){return this._modelData?this._modelData.viewModel.getSelections():null}setSelection(z,H=\"api\"){const Y=f.Selection.isISelection(z),j=u.Range.isIRange(z);if(!Y&&!j)throw new Error(\"Invalid arguments\");if(Y)this._setSelectionImpl(z,H);else if(j){const Z={selectionStartLineNumber:z.startLineNumber,selectionStartColumn:z.startColumn,positionLineNumber:z.endLineNumber,positionColumn:z.endColumn};this._setSelectionImpl(Z,H)}}_setSelectionImpl(z,H){if(!this._modelData)return;const Y=new f.Selection(z.selectionStartLineNumber,z.selectionStartColumn,z.positionLineNumber,z.positionColumn);this._modelData.viewModel.setSelections(H,[Y])}revealLines(z,H,Y=0){this._revealLines(z,H,0,Y)}revealLinesInCenter(z,H,Y=0){this._revealLines(z,H,1,Y)}revealLinesInCenterIfOutsideViewport(z,H,Y=0){this._revealLines(z,H,2,Y)}revealLinesNearTop(z,H,Y=0){this._revealLines(z,H,5,Y)}_revealLines(z,H,Y,j){if(typeof z!=\"number\"||typeof H!=\"number\")throw new Error(\"Invalid arguments\");this._sendRevealRange(new u.Range(z,1,H,1),Y,!1,j)}revealRange(z,H=0,Y=!1,j=!0){this._revealRange(z,Y?1:0,j,H)}revealRangeInCenter(z,H=0){this._revealRange(z,1,!0,H)}revealRangeInCenterIfOutsideViewport(z,H=0){this._revealRange(z,2,!0,H)}revealRangeNearTop(z,H=0){this._revealRange(z,5,!0,H)}revealRangeNearTopIfOutsideViewport(z,H=0){this._revealRange(z,6,!0,H)}revealRangeAtTop(z,H=0){this._revealRange(z,3,!0,H)}_revealRange(z,H,Y,j){if(!u.Range.isIRange(z))throw new Error(\"Invalid arguments\");this._sendRevealRange(u.Range.lift(z),H,Y,j)}setSelections(z,H=\"api\",Y=0){if(this._modelData){if(!z||z.length===0)throw new Error(\"Invalid arguments\");for(let j=0,Z=z.length;j<Z;j++)if(!f.Selection.isISelection(z[j]))throw new Error(\"Invalid arguments\");this._modelData.viewModel.setSelections(H,z,Y)}}getContentWidth(){return this._modelData?this._modelData.viewModel.viewLayout.getContentWidth():-1}getScrollWidth(){return this._modelData?this._modelData.viewModel.viewLayout.getScrollWidth():-1}getScrollLeft(){return this._modelData?this._modelData.viewModel.viewLayout.getCurrentScrollLeft():-1}getContentHeight(){return this._modelData?this._modelData.viewModel.viewLayout.getContentHeight():-1}getScrollHeight(){return this._modelData?this._modelData.viewModel.viewLayout.getScrollHeight():-1}getScrollTop(){return this._modelData?this._modelData.viewModel.viewLayout.getCurrentScrollTop():-1}setScrollLeft(z,H=1){if(this._modelData){if(typeof z!=\"number\")throw new Error(\"Invalid arguments\");this._modelData.viewModel.viewLayout.setScrollPosition({scrollLeft:z},H)}}setScrollTop(z,H=1){if(this._modelData){if(typeof z!=\"number\")throw new Error(\"Invalid arguments\");this._modelData.viewModel.viewLayout.setScrollPosition({scrollTop:z},H)}}setScrollPosition(z,H=1){this._modelData&&this._modelData.viewModel.viewLayout.setScrollPosition(z,H)}hasPendingScrollAnimation(){return this._modelData?this._modelData.viewModel.viewLayout.hasPendingScrollAnimation():!1}saveViewState(){if(!this._modelData)return null;const z=this._contributions.saveViewState(),H=this._modelData.viewModel.saveCursorState(),Y=this._modelData.viewModel.saveState();return{cursorState:H,viewState:Y,contributionsState:z}}restoreViewState(z){if(!this._modelData||!this._modelData.hasRealView)return;const H=z;if(H&&H.cursorState&&H.viewState){const Y=H.cursorState;Array.isArray(Y)?Y.length>0&&this._modelData.viewModel.restoreCursorState(Y):this._modelData.viewModel.restoreCursorState([Y]),this._contributions.restoreViewState(H.contributionsState||{});const j=this._modelData.viewModel.reduceRestoreState(H.viewState);this._modelData.view.restoreState(j)}}handleInitialized(){var z;(z=this._getViewModel())===null||z===void 0||z.visibleLinesStabilized()}getContribution(z){return this._contributions.get(z)}getActions(){return Array.from(this._actions.values())}getSupportedActions(){let z=this.getActions();return z=z.filter(H=>H.isSupported()),z}getAction(z){return this._actions.get(z)||null}trigger(z,H,Y){switch(Y=Y||{},H){case\"compositionStart\":this._startComposition();return;case\"compositionEnd\":this._endComposition(z);return;case\"type\":{const Z=Y;this._type(z,Z.text||\"\");return}case\"replacePreviousChar\":{const Z=Y;this._compositionType(z,Z.text||\"\",Z.replaceCharCnt||0,0,0);return}case\"compositionType\":{const Z=Y;this._compositionType(z,Z.text||\"\",Z.replacePrevCharCnt||0,Z.replaceNextCharCnt||0,Z.positionDelta||0);return}case\"paste\":{const Z=Y;this._paste(z,Z.text||\"\",Z.pasteOnNewLine||!1,Z.multicursorText||null,Z.mode||null);return}case\"cut\":this._cut(z);return}const j=this.getAction(H);if(j){Promise.resolve(j.run(Y)).then(void 0,y.onUnexpectedError);return}this._modelData&&(this._triggerEditorCommand(z,H,Y)||this._triggerCommand(H,Y))}_triggerCommand(z,H){this._commandService.executeCommand(z,H)}_startComposition(){this._modelData&&(this._modelData.viewModel.startComposition(),this._onDidCompositionStart.fire())}_endComposition(z){this._modelData&&(this._modelData.viewModel.endComposition(z),this._onDidCompositionEnd.fire())}_type(z,H){!this._modelData||H.length===0||(z===\"keyboard\"&&this._onWillType.fire(H),this._modelData.viewModel.type(H,z),z===\"keyboard\"&&this._onDidType.fire(H))}_compositionType(z,H,Y,j,Z){this._modelData&&this._modelData.viewModel.compositionType(H,Y,j,Z,z)}_paste(z,H,Y,j,Z){if(!this._modelData||H.length===0)return;const ee=this._modelData.viewModel,le=ee.getSelection().getStartPosition();ee.paste(H,Y,j,z);const ue=ee.getSelection().getStartPosition();z===\"keyboard\"&&this._onDidPaste.fire({range:new u.Range(le.lineNumber,le.column,ue.lineNumber,ue.column),languageId:Z})}_cut(z){this._modelData&&this._modelData.viewModel.cut(z)}_triggerEditorCommand(z,H,Y){const j=v.EditorExtensionsRegistry.getEditorCommand(H);return j?(Y=Y||{},Y.source=z,this._instantiationService.invokeFunction(Z=>{Promise.resolve(j.runEditorCommand(Z,this,Y)).then(void 0,y.onUnexpectedError)}),!0):!1}_getViewModel(){return this._modelData?this._modelData.viewModel:null}pushUndoStop(){return!this._modelData||this._configuration.options.get(90)?!1:(this._modelData.model.pushStackElement(),!0)}popUndoStop(){return!this._modelData||this._configuration.options.get(90)?!1:(this._modelData.model.popStackElement(),!0)}executeEdits(z,H,Y){if(!this._modelData||this._configuration.options.get(90))return!1;let j;return Y?Array.isArray(Y)?j=()=>Y:j=Y:j=()=>null,this._modelData.viewModel.executeEdits(z,H,j),!0}executeCommand(z,H){this._modelData&&this._modelData.viewModel.executeCommand(H,z)}executeCommands(z,H){this._modelData&&this._modelData.viewModel.executeCommands(H,z)}createDecorationsCollection(z){return new Q(this,z)}changeDecorations(z){return this._modelData?this._modelData.model.changeDecorations(z,this._id):null}getLineDecorations(z){return this._modelData?this._modelData.model.getLineDecorations(z,this._id,(0,n.filterValidationDecorations)(this._configuration.options)):null}getDecorationsInRange(z){return this._modelData?this._modelData.model.getDecorationsInRange(z,this._id,(0,n.filterValidationDecorations)(this._configuration.options)):null}deltaDecorations(z,H){return this._modelData?z.length===0&&H.length===0?z:this._modelData.model.deltaDecorations(z,H,this._id):[]}removeDecorations(z){!this._modelData||z.length===0||this._modelData.model.changeDecorations(H=>{H.deltaDecorations(z,[])})}removeDecorationsByType(z){const H=this._decorationTypeKeysToIds[z];H&&this.deltaDecorations(H,[]),this._decorationTypeKeysToIds.hasOwnProperty(z)&&delete this._decorationTypeKeysToIds[z],this._decorationTypeSubtypes.hasOwnProperty(z)&&delete this._decorationTypeSubtypes[z]}getLayoutInfo(){return this._configuration.options.get(143)}createOverviewRuler(z){return!this._modelData||!this._modelData.hasRealView?null:this._modelData.view.createOverviewRuler(z)}getContainerDomNode(){return this._domElement}getDomNode(){return!this._modelData||!this._modelData.hasRealView?null:this._modelData.view.domNode.domNode}delegateVerticalScrollbarPointerDown(z){!this._modelData||!this._modelData.hasRealView||this._modelData.view.delegateVerticalScrollbarPointerDown(z)}delegateScrollFromMouseWheelEvent(z){!this._modelData||!this._modelData.hasRealView||this._modelData.view.delegateScrollFromMouseWheelEvent(z)}layout(z,H=!1){this._configuration.observeContainer(z),H||this.render()}focus(){!this._modelData||!this._modelData.hasRealView||this._modelData.view.focus()}hasTextFocus(){return!this._modelData||!this._modelData.hasRealView?!1:this._modelData.view.isFocused()}hasWidgetFocus(){return this._focusTracker&&this._focusTracker.hasFocus()}addContentWidget(z){const H={widget:z,position:z.getPosition()};this._contentWidgets.hasOwnProperty(z.getId())&&console.warn(\"Overwriting a content widget with the same id:\"+z.getId()),this._contentWidgets[z.getId()]=H,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addContentWidget(H)}layoutContentWidget(z){const H=z.getId();if(this._contentWidgets.hasOwnProperty(H)){const Y=this._contentWidgets[H];Y.position=z.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutContentWidget(Y)}}removeContentWidget(z){const H=z.getId();if(this._contentWidgets.hasOwnProperty(H)){const Y=this._contentWidgets[H];delete this._contentWidgets[H],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeContentWidget(Y)}}addOverlayWidget(z){const H={widget:z,position:z.getPosition()};this._overlayWidgets.hasOwnProperty(z.getId())&&console.warn(\"Overwriting an overlay widget with the same id.\"),this._overlayWidgets[z.getId()]=H,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addOverlayWidget(H)}layoutOverlayWidget(z){const H=z.getId();if(this._overlayWidgets.hasOwnProperty(H)){const Y=this._overlayWidgets[H];Y.position=z.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutOverlayWidget(Y)}}removeOverlayWidget(z){const H=z.getId();if(this._overlayWidgets.hasOwnProperty(H)){const Y=this._overlayWidgets[H];delete this._overlayWidgets[H],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeOverlayWidget(Y)}}addGlyphMarginWidget(z){const H={widget:z,position:z.getPosition()};this._glyphMarginWidgets.hasOwnProperty(z.getId())&&console.warn(\"Overwriting a glyph margin widget with the same id.\"),this._glyphMarginWidgets[z.getId()]=H,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addGlyphMarginWidget(H)}layoutGlyphMarginWidget(z){const H=z.getId();if(this._glyphMarginWidgets.hasOwnProperty(H)){const Y=this._glyphMarginWidgets[H];Y.position=z.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutGlyphMarginWidget(Y)}}removeGlyphMarginWidget(z){const H=z.getId();if(this._glyphMarginWidgets.hasOwnProperty(H)){const Y=this._glyphMarginWidgets[H];delete this._glyphMarginWidgets[H],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeGlyphMarginWidget(Y)}}changeViewZones(z){!this._modelData||!this._modelData.hasRealView||this._modelData.view.change(z)}getTargetAtClientPoint(z,H){return!this._modelData||!this._modelData.hasRealView?null:this._modelData.view.getTargetAtClientPoint(z,H)}getScrolledVisiblePosition(z){if(!this._modelData||!this._modelData.hasRealView)return null;const H=this._modelData.model.validatePosition(z),Y=this._configuration.options,j=Y.get(143),Z=V._getVerticalOffsetForPosition(this._modelData,H.lineNumber,H.column)-this.getScrollTop(),ee=this._modelData.view.getOffsetForColumn(H.lineNumber,H.column)+j.glyphMarginWidth+j.lineNumbersWidth+j.decorationsWidth-this.getScrollLeft();return{top:Z,left:ee,height:Y.get(66)}}getOffsetForColumn(z,H){return!this._modelData||!this._modelData.hasRealView?-1:this._modelData.view.getOffsetForColumn(z,H)}render(z=!1){!this._modelData||!this._modelData.hasRealView||this._modelData.view.render(!0,z)}setAriaOptions(z){!this._modelData||!this._modelData.hasRealView||this._modelData.view.setAriaOptions(z)}applyFontInfo(z){(0,x.applyFontInfo)(z,this._configuration.options.get(50))}setBanner(z,H){this._bannerDomNode&&this._domElement.contains(this._bannerDomNode)&&this._domElement.removeChild(this._bannerDomNode),this._bannerDomNode=z,this._configuration.setReservedHeight(z?H:0),this._bannerDomNode&&this._domElement.prepend(this._bannerDomNode)}_attachModel(z){if(!z){this._modelData=null;return}const H=[];this._domElement.setAttribute(\"data-mode-id\",z.getLanguageId()),this._configuration.setIsDominatedByLongLines(z.isDominatedByLongLines()),this._configuration.setModelLineCount(z.getLineCount());const Y=z.onBeforeAttached(),j=new h.ViewModel(this._id,this._configuration,z,N.DOMLineBreaksComputerFactory.create(k.getWindow(this._domElement)),P.MonospaceLineBreaksComputerFactory.create(this._configuration.options),le=>k.scheduleAtNextAnimationFrame(k.getWindow(this._domElement),le),this.languageConfigurationService,this._themeService,Y);H.push(z.onWillDispose(()=>this.setModel(null))),H.push(j.onEvent(le=>{switch(le.kind){case 0:this._onDidContentSizeChange.fire(le);break;case 1:this._editorTextFocus.setValue(le.hasFocus);break;case 2:this._onDidScrollChange.fire(le);break;case 3:this._onDidChangeViewZones.fire();break;case 4:this._onDidChangeHiddenAreas.fire();break;case 5:this._onDidAttemptReadOnlyEdit.fire();break;case 6:{if(le.reachedMaxCursorCount){const ve=this.getOption(79),Ce=L.localize(0,null,ve);this._notificationService.prompt(I.Severity.Warning,Ce,[{label:\"Find and Replace\",run:()=>{this._commandService.executeCommand(\"editor.action.startFindReplaceAction\")}},{label:L.localize(1,null),run:()=>{this._commandService.executeCommand(\"workbench.action.openSettings2\",{query:\"editor.multiCursorLimit\"})}}])}const ue=[];for(let ve=0,Ce=le.selections.length;ve<Ce;ve++)ue[ve]=le.selections[ve].getPosition();const ce={position:ue[0],secondaryPositions:ue.slice(1),reason:le.reason,source:le.source};this._onDidChangeCursorPosition.fire(ce);const pe={selection:le.selections[0],secondarySelections:le.selections.slice(1),modelVersionId:le.modelVersionId,oldSelections:le.oldSelections,oldModelVersionId:le.oldModelVersionId,source:le.source,reason:le.reason};this._onDidChangeCursorSelection.fire(pe);break}case 7:this._onDidChangeModelDecorations.fire(le.event);break;case 8:this._domElement.setAttribute(\"data-mode-id\",z.getLanguageId()),this._onDidChangeModelLanguage.fire(le.event);break;case 9:this._onDidChangeModelLanguageConfiguration.fire(le.event);break;case 10:this._onDidChangeModelContent.fire(le.event);break;case 11:this._onDidChangeModelOptions.fire(le.event);break;case 12:this._onDidChangeModelTokens.fire(le.event);break}}));const[Z,ee]=this._createView(j);if(ee){this._domElement.appendChild(Z.domNode.domNode);let le=Object.keys(this._contentWidgets);for(let ue=0,ce=le.length;ue<ce;ue++){const pe=le[ue];Z.addContentWidget(this._contentWidgets[pe])}le=Object.keys(this._overlayWidgets);for(let ue=0,ce=le.length;ue<ce;ue++){const pe=le[ue];Z.addOverlayWidget(this._overlayWidgets[pe])}le=Object.keys(this._glyphMarginWidgets);for(let ue=0,ce=le.length;ue<ce;ue++){const pe=le[ue];Z.addGlyphMarginWidget(this._glyphMarginWidgets[pe])}Z.render(!1,!0),Z.domNode.domNode.setAttribute(\"data-uri\",z.uri.toString())}this._modelData=new F(z,j,Z,ee,H,Y)}_createView(z){let H;this.isSimpleWidget?H={paste:(Z,ee,le,ue)=>{this._paste(\"keyboard\",Z,ee,le,ue)},type:Z=>{this._type(\"keyboard\",Z)},compositionType:(Z,ee,le,ue)=>{this._compositionType(\"keyboard\",Z,ee,le,ue)},startComposition:()=>{this._startComposition()},endComposition:()=>{this._endComposition(\"keyboard\")},cut:()=>{this._cut(\"keyboard\")}}:H={paste:(Z,ee,le,ue)=>{const ce={text:Z,pasteOnNewLine:ee,multicursorText:le,mode:ue};this._commandService.executeCommand(\"paste\",ce)},type:Z=>{const ee={text:Z};this._commandService.executeCommand(\"type\",ee)},compositionType:(Z,ee,le,ue)=>{if(le||ue){const ce={text:Z,replacePrevCharCnt:ee,replaceNextCharCnt:le,positionDelta:ue};this._commandService.executeCommand(\"compositionType\",ce)}else{const ce={text:Z,replaceCharCnt:ee};this._commandService.executeCommand(\"replacePreviousChar\",ce)}},startComposition:()=>{this._commandService.executeCommand(\"compositionStart\",{})},endComposition:()=>{this._commandService.executeCommand(\"compositionEnd\",{})},cut:()=>{this._commandService.executeCommand(\"cut\",{})}};const Y=new i.ViewUserInputEvents(z.coordinatesConverter);return Y.onKeyDown=Z=>this._onKeyDown.fire(Z),Y.onKeyUp=Z=>this._onKeyUp.fire(Z),Y.onContextMenu=Z=>this._onContextMenu.fire(Z),Y.onMouseMove=Z=>this._onMouseMove.fire(Z),Y.onMouseLeave=Z=>this._onMouseLeave.fire(Z),Y.onMouseDown=Z=>this._onMouseDown.fire(Z),Y.onMouseUp=Z=>this._onMouseUp.fire(Z),Y.onMouseDrag=Z=>this._onMouseDrag.fire(Z),Y.onMouseDrop=Z=>this._onMouseDrop.fire(Z),Y.onMouseDropCanceled=Z=>this._onMouseDropCanceled.fire(Z),Y.onMouseWheel=Z=>this._onMouseWheel.fire(Z),[new a.View(H,this._configuration,this._themeService.getColorTheme(),z,Y,this._overflowWidgetsDomNode,this._instantiationService),!0]}_postDetachModelCleanup(z){z?.removeAllDecorationsWithOwnerId(this._id)}_detachModel(){if(!this._modelData)return null;const z=this._modelData.model,H=this._modelData.hasRealView?this._modelData.view.domNode.domNode:null;return this._modelData.dispose(),this._modelData=null,this._domElement.removeAttribute(\"data-mode-id\"),H&&this._domElement.contains(H)&&this._domElement.removeChild(H),this._bannerDomNode&&this._domElement.contains(this._bannerDomNode)&&this._domElement.removeChild(this._bannerDomNode),z}_removeDecorationType(z){this._codeEditorService.removeDecorationType(z)}hasModel(){return this._modelData!==null}showDropIndicatorAt(z){const H=[{range:new u.Range(z.lineNumber,z.column,z.lineNumber,z.column),options:V.dropIntoEditorDecorationOptions}];this._dropIntoEditorDecorations.set(H),this.revealPosition(z,1)}removeDropIndicator(){this._dropIntoEditorDecorations.clear()}setContextValue(z,H){this._contextKeyService.createKey(z,H)}};e.CodeEditorWidget=q,q.dropIntoEditorDecorationOptions=l.ModelDecorationOptions.register({description:\"workbench-dnd-target\",className:\"dnd-target\"}),e.CodeEditorWidget=q=V=ke([ge(3,w.IInstantiationService),ge(4,b.ICodeEditorService),ge(5,m.ICommandService),ge(6,C.IContextKeyService),ge(7,T.IThemeService),ge(8,I.INotificationService),ge(9,A.IAccessibilityService),ge(10,R.ILanguageConfigurationService),ge(11,O.ILanguageFeaturesService)],q);class ie extends S.Disposable{constructor(z){super(),this._emitterOptions=z,this._onDidChangeToTrue=this._register(new E.Emitter(this._emitterOptions)),this.onDidChangeToTrue=this._onDidChangeToTrue.event,this._onDidChangeToFalse=this._register(new E.Emitter(this._emitterOptions)),this.onDidChangeToFalse=this._onDidChangeToFalse.event,this._value=0}setValue(z){const H=z?2:1;this._value!==H&&(this._value=H,this._value===2?this._onDidChangeToTrue.fire():this._value===1&&this._onDidChangeToFalse.fire())}}e.BooleanEventEmitter=ie;class ae extends E.Emitter{constructor(z,H){super({deliveryQueue:H}),this._contributions=z}fire(z){this._contributions.onBeforeInteractionEvent(),super.fire(z)}}class ne extends S.Disposable{constructor(z,H){super(),this._editor=z,H.createKey(\"editorId\",z.getId()),this._editorSimpleInput=s.EditorContextKeys.editorSimpleInput.bindTo(H),this._editorFocus=s.EditorContextKeys.focus.bindTo(H),this._textInputFocus=s.EditorContextKeys.textInputFocus.bindTo(H),this._editorTextFocus=s.EditorContextKeys.editorTextFocus.bindTo(H),this._tabMovesFocus=s.EditorContextKeys.tabMovesFocus.bindTo(H),this._editorReadonly=s.EditorContextKeys.readOnly.bindTo(H),this._inDiffEditor=s.EditorContextKeys.inDiffEditor.bindTo(H),this._editorColumnSelection=s.EditorContextKeys.columnSelection.bindTo(H),this._hasMultipleSelections=s.EditorContextKeys.hasMultipleSelections.bindTo(H),this._hasNonEmptySelection=s.EditorContextKeys.hasNonEmptySelection.bindTo(H),this._canUndo=s.EditorContextKeys.canUndo.bindTo(H),this._canRedo=s.EditorContextKeys.canRedo.bindTo(H),this._register(this._editor.onDidChangeConfiguration(()=>this._updateFromConfig())),this._register(this._editor.onDidChangeCursorSelection(()=>this._updateFromSelection())),this._register(this._editor.onDidFocusEditorWidget(()=>this._updateFromFocus())),this._register(this._editor.onDidBlurEditorWidget(()=>this._updateFromFocus())),this._register(this._editor.onDidFocusEditorText(()=>this._updateFromFocus())),this._register(this._editor.onDidBlurEditorText(()=>this._updateFromFocus())),this._register(this._editor.onDidChangeModel(()=>this._updateFromModel())),this._register(this._editor.onDidChangeConfiguration(()=>this._updateFromModel())),this._register(W.TabFocus.onDidChangeTabFocus(Y=>this._tabMovesFocus.set(Y))),this._updateFromConfig(),this._updateFromSelection(),this._updateFromFocus(),this._updateFromModel(),this._editorSimpleInput.set(this._editor.isSimpleWidget)}_updateFromConfig(){const z=this._editor.getOptions();this._tabMovesFocus.set(W.TabFocus.getTabFocusMode()),this._editorReadonly.set(z.get(90)),this._inDiffEditor.set(z.get(61)),this._editorColumnSelection.set(z.get(22))}_updateFromSelection(){const z=this._editor.getSelections();z?(this._hasMultipleSelections.set(z.length>1),this._hasNonEmptySelection.set(z.some(H=>!H.isEmpty()))):(this._hasMultipleSelections.reset(),this._hasNonEmptySelection.reset())}_updateFromFocus(){this._editorFocus.set(this._editor.hasWidgetFocus()&&!this._editor.isSimpleWidget),this._editorTextFocus.set(this._editor.hasTextFocus()&&!this._editor.isSimpleWidget),this._textInputFocus.set(this._editor.hasTextFocus())}_updateFromModel(){const z=this._editor.getModel();this._canUndo.set(!!(z&&z.canUndo())),this._canRedo.set(!!(z&&z.canRedo()))}}class $ extends S.Disposable{constructor(z,H,Y){super(),this._editor=z,this._contextKeyService=H,this._languageFeaturesService=Y,this._langId=s.EditorContextKeys.languageId.bindTo(H),this._hasCompletionItemProvider=s.EditorContextKeys.hasCompletionItemProvider.bindTo(H),this._hasCodeActionsProvider=s.EditorContextKeys.hasCodeActionsProvider.bindTo(H),this._hasCodeLensProvider=s.EditorContextKeys.hasCodeLensProvider.bindTo(H),this._hasDefinitionProvider=s.EditorContextKeys.hasDefinitionProvider.bindTo(H),this._hasDeclarationProvider=s.EditorContextKeys.hasDeclarationProvider.bindTo(H),this._hasImplementationProvider=s.EditorContextKeys.hasImplementationProvider.bindTo(H),this._hasTypeDefinitionProvider=s.EditorContextKeys.hasTypeDefinitionProvider.bindTo(H),this._hasHoverProvider=s.EditorContextKeys.hasHoverProvider.bindTo(H),this._hasDocumentHighlightProvider=s.EditorContextKeys.hasDocumentHighlightProvider.bindTo(H),this._hasDocumentSymbolProvider=s.EditorContextKeys.hasDocumentSymbolProvider.bindTo(H),this._hasReferenceProvider=s.EditorContextKeys.hasReferenceProvider.bindTo(H),this._hasRenameProvider=s.EditorContextKeys.hasRenameProvider.bindTo(H),this._hasSignatureHelpProvider=s.EditorContextKeys.hasSignatureHelpProvider.bindTo(H),this._hasInlayHintsProvider=s.EditorContextKeys.hasInlayHintsProvider.bindTo(H),this._hasDocumentFormattingProvider=s.EditorContextKeys.hasDocumentFormattingProvider.bindTo(H),this._hasDocumentSelectionFormattingProvider=s.EditorContextKeys.hasDocumentSelectionFormattingProvider.bindTo(H),this._hasMultipleDocumentFormattingProvider=s.EditorContextKeys.hasMultipleDocumentFormattingProvider.bindTo(H),this._hasMultipleDocumentSelectionFormattingProvider=s.EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider.bindTo(H),this._isInWalkThrough=s.EditorContextKeys.isInWalkThroughSnippet.bindTo(H);const j=()=>this._update();this._register(z.onDidChangeModel(j)),this._register(z.onDidChangeModelLanguage(j)),this._register(Y.completionProvider.onDidChange(j)),this._register(Y.codeActionProvider.onDidChange(j)),this._register(Y.codeLensProvider.onDidChange(j)),this._register(Y.definitionProvider.onDidChange(j)),this._register(Y.declarationProvider.onDidChange(j)),this._register(Y.implementationProvider.onDidChange(j)),this._register(Y.typeDefinitionProvider.onDidChange(j)),this._register(Y.hoverProvider.onDidChange(j)),this._register(Y.documentHighlightProvider.onDidChange(j)),this._register(Y.documentSymbolProvider.onDidChange(j)),this._register(Y.referenceProvider.onDidChange(j)),this._register(Y.renameProvider.onDidChange(j)),this._register(Y.documentFormattingEditProvider.onDidChange(j)),this._register(Y.documentRangeFormattingEditProvider.onDidChange(j)),this._register(Y.signatureHelpProvider.onDidChange(j)),this._register(Y.inlayHintsProvider.onDidChange(j)),j()}dispose(){super.dispose()}reset(){this._contextKeyService.bufferChangeEvents(()=>{this._langId.reset(),this._hasCompletionItemProvider.reset(),this._hasCodeActionsProvider.reset(),this._hasCodeLensProvider.reset(),this._hasDefinitionProvider.reset(),this._hasDeclarationProvider.reset(),this._hasImplementationProvider.reset(),this._hasTypeDefinitionProvider.reset(),this._hasHoverProvider.reset(),this._hasDocumentHighlightProvider.reset(),this._hasDocumentSymbolProvider.reset(),this._hasReferenceProvider.reset(),this._hasRenameProvider.reset(),this._hasDocumentFormattingProvider.reset(),this._hasDocumentSelectionFormattingProvider.reset(),this._hasSignatureHelpProvider.reset(),this._isInWalkThrough.reset()})}_update(){const z=this._editor.getModel();if(!z){this.reset();return}this._contextKeyService.bufferChangeEvents(()=>{this._langId.set(z.getLanguageId()),this._hasCompletionItemProvider.set(this._languageFeaturesService.completionProvider.has(z)),this._hasCodeActionsProvider.set(this._languageFeaturesService.codeActionProvider.has(z)),this._hasCodeLensProvider.set(this._languageFeaturesService.codeLensProvider.has(z)),this._hasDefinitionProvider.set(this._languageFeaturesService.definitionProvider.has(z)),this._hasDeclarationProvider.set(this._languageFeaturesService.declarationProvider.has(z)),this._hasImplementationProvider.set(this._languageFeaturesService.implementationProvider.has(z)),this._hasTypeDefinitionProvider.set(this._languageFeaturesService.typeDefinitionProvider.has(z)),this._hasHoverProvider.set(this._languageFeaturesService.hoverProvider.has(z)),this._hasDocumentHighlightProvider.set(this._languageFeaturesService.documentHighlightProvider.has(z)),this._hasDocumentSymbolProvider.set(this._languageFeaturesService.documentSymbolProvider.has(z)),this._hasReferenceProvider.set(this._languageFeaturesService.referenceProvider.has(z)),this._hasRenameProvider.set(this._languageFeaturesService.renameProvider.has(z)),this._hasSignatureHelpProvider.set(this._languageFeaturesService.signatureHelpProvider.has(z)),this._hasInlayHintsProvider.set(this._languageFeaturesService.inlayHintsProvider.has(z)),this._hasDocumentFormattingProvider.set(this._languageFeaturesService.documentFormattingEditProvider.has(z)||this._languageFeaturesService.documentRangeFormattingEditProvider.has(z)),this._hasDocumentSelectionFormattingProvider.set(this._languageFeaturesService.documentRangeFormattingEditProvider.has(z)),this._hasMultipleDocumentFormattingProvider.set(this._languageFeaturesService.documentFormattingEditProvider.all(z).length+this._languageFeaturesService.documentRangeFormattingEditProvider.all(z).length>1),this._hasMultipleDocumentSelectionFormattingProvider.set(this._languageFeaturesService.documentRangeFormattingEditProvider.all(z).length>1),this._isInWalkThrough.set(z.uri.scheme===p.Schemas.walkThroughSnippet)})}}e.EditorModeContext=$;class J extends S.Disposable{constructor(z,H){super(),this._onChange=this._register(new E.Emitter),this.onChange=this._onChange.event,this._hadFocus=void 0,this._hasDomElementFocus=!1,this._domFocusTracker=this._register(k.trackFocus(z)),this._overflowWidgetsDomNodeHasFocus=!1,this._register(this._domFocusTracker.onDidFocus(()=>{this._hasDomElementFocus=!0,this._update()})),this._register(this._domFocusTracker.onDidBlur(()=>{this._hasDomElementFocus=!1,this._update()})),H&&(this._overflowWidgetsDomNode=this._register(k.trackFocus(H)),this._register(this._overflowWidgetsDomNode.onDidFocus(()=>{this._overflowWidgetsDomNodeHasFocus=!0,this._update()})),this._register(this._overflowWidgetsDomNode.onDidBlur(()=>{this._overflowWidgetsDomNodeHasFocus=!1,this._update()})))}_update(){const z=this._hasDomElementFocus||this._overflowWidgetsDomNodeHasFocus;this._hadFocus!==z&&(this._hadFocus=z,this._onChange.fire(void 0))}hasFocus(){var z;return(z=this._hadFocus)!==null&&z!==void 0?z:!1}}class Q{get length(){return this._decorationIds.length}constructor(z,H){this._editor=z,this._decorationIds=[],this._isChangingDecorations=!1,Array.isArray(H)&&H.length>0&&this.set(H)}onDidChange(z,H,Y){return this._editor.onDidChangeModelDecorations(j=>{this._isChangingDecorations||z.call(H,j)},Y)}getRange(z){return!this._editor.hasModel()||z>=this._decorationIds.length?null:this._editor.getModel().getDecorationRange(this._decorationIds[z])}getRanges(){if(!this._editor.hasModel())return[];const z=this._editor.getModel(),H=[];for(const Y of this._decorationIds){const j=z.getDecorationRange(Y);j&&H.push(j)}return H}has(z){return this._decorationIds.includes(z.id)}clear(){this._decorationIds.length!==0&&this.set([])}set(z){try{this._isChangingDecorations=!0,this._editor.changeDecorations(H=>{this._decorationIds=H.deltaDecorations(this._decorationIds,z)})}finally{this._isChangingDecorations=!1}return this._decorationIds}append(z){let H=[];try{this._isChangingDecorations=!0,this._editor.changeDecorations(Y=>{H=Y.deltaDecorations([],z),this._decorationIds=this._decorationIds.concat(H)})}finally{this._isChangingDecorations=!1}return H}}const re=encodeURIComponent(\"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 6 3' enable-background='new 0 0 6 3' height='3' width='6'><g fill='\"),de=encodeURIComponent(\"'><polygon points='5.5,0 2.5,3 1.1,3 4.1,0'/><polygon points='4,0 6,2 6,0.6 5.4,0'/><polygon points='0,2 1,3 2.4,3 0,0.6'/></g></svg>\");function he(G){return re+encodeURIComponent(G.toString())+de}const me=encodeURIComponent('<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"3\" width=\"12\"><g fill=\"'),X=encodeURIComponent('\"><circle cx=\"1\" cy=\"1\" r=\"1\"/><circle cx=\"5\" cy=\"1\" r=\"1\"/><circle cx=\"9\" cy=\"1\" r=\"1\"/></g></svg>');function U(G){return me+encodeURIComponent(G.toString())+X}(0,T.registerThemingParticipant)((G,z)=>{const H=G.getColor(g.editorErrorForeground);H&&z.addRule(`.monaco-editor .squiggly-error { background: url(\"data:image/svg+xml,${he(H)}\") repeat-x bottom left; }`);const Y=G.getColor(g.editorWarningForeground);Y&&z.addRule(`.monaco-editor .squiggly-warning { background: url(\"data:image/svg+xml,${he(Y)}\") repeat-x bottom left; }`);const j=G.getColor(g.editorInfoForeground);j&&z.addRule(`.monaco-editor .squiggly-info { background: url(\"data:image/svg+xml,${he(j)}\") repeat-x bottom left; }`);const Z=G.getColor(g.editorHintForeground);Z&&z.addRule(`.monaco-editor .squiggly-hint { background: url(\"data:image/svg+xml,${U(Z)}\") no-repeat bottom left; }`);const ee=G.getColor(o.editorUnnecessaryCodeOpacity);ee&&z.addRule(`.monaco-editor.showUnused .squiggly-inline-unnecessary { opacity: ${ee.rgba.a}; }`)})}),define(se[259],oe([1,0,7,60,12,6,2,35,171,16,33,127,194,841,881,608,342,882,334,368,87,10,5,180,21,122,15,8,163,88,498,855,637,359,630,448]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P,N,M){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DiffEditorWidget=void 0;let R=class extends T.DelegatingEditor{get onDidContentSizeChange(){return this._editors.onDidContentSizeChange}constructor(B,W,V,K,F,q,ie,ae){var ne;super(),this._domElement=B,this._parentContextKeyService=K,this._parentInstantiationService=F,this._audioCueService=ie,this._editorProgressService=ae,this.elements=(0,L.h)(\"div.monaco-diff-editor.side-by-side\",{style:{position:\"relative\",height:\"100%\"}},[(0,L.h)(\"div.noModificationsOverlay@overlay\",{style:{position:\"absolute\",height:\"100%\",visibility:\"hidden\"}},[(0,L.$)(\"span\",{},\"No Changes\")]),(0,L.h)(\"div.editor.original@original\",{style:{position:\"absolute\",height:\"100%\"}}),(0,L.h)(\"div.editor.modified@modified\",{style:{position:\"absolute\",height:\"100%\"}}),(0,L.h)(\"div.accessibleDiffViewer@accessibleDiffViewer\",{style:{position:\"absolute\",height:\"100%\"}})]),this._diffModel=(0,p.observableValue)(this,void 0),this._shouldDisposeDiffModel=!1,this.onDidChangeModel=E.Event.fromObservableLight(this._diffModel),this._contextKeyService=this._register(this._parentContextKeyService.createScoped(this._domElement)),this._instantiationService=this._parentInstantiationService.createChild(new D.ServiceCollection([C.IContextKeyService,this._contextKeyService])),this._boundarySashes=(0,p.observableValue)(this,void 0),this._accessibleDiffViewerShouldBeVisible=(0,p.observableValue)(this,!1),this._accessibleDiffViewerVisible=(0,p.derived)(this,z=>this._options.onlyShowAccessibleDiffViewer.read(z)?!0:this._accessibleDiffViewerShouldBeVisible.read(z)),this._movedBlocksLinesPart=(0,p.observableValue)(this,void 0),this._layoutInfo=(0,p.derived)(this,z=>{var H,Y,j,Z,ee;const le=this._rootSizeObserver.width.read(z),ue=this._rootSizeObserver.height.read(z),ce=(H=this._sash.read(z))===null||H===void 0?void 0:H.sashLeft.read(z),pe=ce??Math.max(5,this._editors.original.getLayoutInfo().decorationsLeft),ve=le-pe-((j=(Y=this._overviewRulerPart.read(z))===null||Y===void 0?void 0:Y.width)!==null&&j!==void 0?j:0),Ce=(ee=(Z=this._movedBlocksLinesPart.read(z))===null||Z===void 0?void 0:Z.width.read(z))!==null&&ee!==void 0?ee:0,Se=pe-Ce;return this.elements.original.style.width=Se+\"px\",this.elements.original.style.left=\"0px\",this.elements.modified.style.width=ve+\"px\",this.elements.modified.style.left=pe+\"px\",this._editors.original.layout({width:Se,height:ue},!0),this._editors.modified.layout({width:ve,height:ue},!0),{modifiedEditor:this._editors.modified.getLayoutInfo(),originalEditor:this._editors.original.getLayoutInfo()}}),this._diffValue=this._diffModel.map((z,H)=>z?.diff.read(H)),this.onDidUpdateDiff=E.Event.fromObservableLight(this._diffValue),q.willCreateDiffEditor(),this._contextKeyService.createKey(\"isInDiffEditor\",!0),this._domElement.appendChild(this.elements.root),this._register((0,S.toDisposable)(()=>this._domElement.removeChild(this.elements.root))),this._rootSizeObserver=this._register(new s.ObservableElementSizeObserver(this.elements.root,W.dimension)),this._rootSizeObserver.setAutomaticLayout((ne=W.automaticLayout)!==null&&ne!==void 0?ne:!1),this._options=new P.DiffEditorOptions(W),this._register((0,p.autorun)(z=>{this._options.setWidth(this._rootSizeObserver.width.read(z))})),this._contextKeyService.createKey(h.EditorContextKeys.isEmbeddedDiffEditor.key,!1),this._register((0,s.bindContextKey)(h.EditorContextKeys.isEmbeddedDiffEditor,this._contextKeyService,z=>this._options.isInEmbeddedEditor.read(z))),this._register((0,s.bindContextKey)(h.EditorContextKeys.comparingMovedCode,this._contextKeyService,z=>{var H;return!!(!((H=this._diffModel.read(z))===null||H===void 0)&&H.movedTextToCompare.read(z))})),this._register((0,s.bindContextKey)(h.EditorContextKeys.diffEditorRenderSideBySideInlineBreakpointReached,this._contextKeyService,z=>this._options.couldShowInlineViewBecauseOfSize.read(z))),this._register((0,s.bindContextKey)(h.EditorContextKeys.hasChanges,this._contextKeyService,z=>{var H,Y,j;return((j=(Y=(H=this._diffModel.read(z))===null||H===void 0?void 0:H.diff.read(z))===null||Y===void 0?void 0:Y.mappings.length)!==null&&j!==void 0?j:0)>0})),this._editors=this._register(this._instantiationService.createInstance(A.DiffEditorEditors,this.elements.original,this.elements.modified,this._options,V,(z,H,Y,j)=>this._createInnerEditor(z,H,Y,j))),this._overviewRulerPart=(0,_.derivedDisposable)(this,z=>this._options.renderOverviewRuler.read(z)?this._instantiationService.createInstance((0,s.readHotReloadableExport)(d.OverviewRulerFeature,z),this._editors,this.elements.root,this._diffModel,this._rootSizeObserver.width,this._rootSizeObserver.height,this._layoutInfo.map(H=>H.modifiedEditor)):void 0).recomputeInitiallyAndOnChange(this._store),this._sash=(0,_.derivedDisposable)(this,z=>{const H=this._options.renderSideBySide.read(z);return this.elements.root.classList.toggle(\"side-by-side\",H),H?new r.DiffEditorSash(this._options,this.elements.root,{height:this._rootSizeObserver.height,width:this._rootSizeObserver.width.map((Y,j)=>{var Z,ee;return Y-((ee=(Z=this._overviewRulerPart.read(j))===null||Z===void 0?void 0:Z.width)!==null&&ee!==void 0?ee:0)})},this._boundarySashes):void 0}).recomputeInitiallyAndOnChange(this._store);const $=(0,_.derivedDisposable)(this,z=>this._instantiationService.createInstance((0,s.readHotReloadableExport)(u.HideUnchangedRegionsFeature,z),this._editors,this._diffModel,this._options)).recomputeInitiallyAndOnChange(this._store);(0,_.derivedDisposable)(this,z=>this._instantiationService.createInstance((0,s.readHotReloadableExport)(t.DiffEditorDecorations,z),this._editors,this._diffModel,this._options,this)).recomputeInitiallyAndOnChange(this._store);const J=new Set,Q=new Set;let re=!1;const de=(0,_.derivedDisposable)(this,z=>this._instantiationService.createInstance((0,s.readHotReloadableExport)(f.DiffEditorViewZones,z),(0,L.getWindow)(this._domElement),this._editors,this._diffModel,this._options,this,()=>re||$.get().isUpdatingHiddenAreas,J,Q)).recomputeInitiallyAndOnChange(this._store),he=(0,p.derived)(this,z=>{const H=de.read(z).viewZones.read(z).orig,Y=$.read(z).viewZones.read(z).origViewZones;return H.concat(Y)}),me=(0,p.derived)(this,z=>{const H=de.read(z).viewZones.read(z).mod,Y=$.read(z).viewZones.read(z).modViewZones;return H.concat(Y)});this._register((0,s.applyViewZones)(this._editors.original,he,z=>{re=z},J));let X;this._register((0,s.applyViewZones)(this._editors.modified,me,z=>{re=z,re?X=a.StableEditorScrollState.capture(this._editors.modified):(X?.restore(this._editors.modified),X=void 0)},Q)),this._accessibleDiffViewer=(0,_.derivedDisposable)(this,z=>this._instantiationService.createInstance((0,s.readHotReloadableExport)(n.AccessibleDiffViewer,z),this.elements.accessibleDiffViewer,this._accessibleDiffViewerVisible,(H,Y)=>this._accessibleDiffViewerShouldBeVisible.set(H,Y),this._options.onlyShowAccessibleDiffViewer.map(H=>!H),this._rootSizeObserver.width,this._rootSizeObserver.height,this._diffModel.map((H,Y)=>{var j;return(j=H?.diff.read(Y))===null||j===void 0?void 0:j.mappings.map(Z=>Z.lineRangeMapping)}),this._editors)).recomputeInitiallyAndOnChange(this._store);const U=this._accessibleDiffViewerVisible.map(z=>z?\"hidden\":\"visible\");this._register((0,s.applyStyle)(this.elements.modified,{visibility:U})),this._register((0,s.applyStyle)(this.elements.original,{visibility:U})),this._createDiffEditorContributions(),q.addDiffEditor(this),this._register((0,p.recomputeInitiallyAndOnChange)(this._layoutInfo)),(0,_.derivedDisposable)(this,z=>new((0,s.readHotReloadableExport)(c.MovedBlocksLinesFeature,z))(this.elements.root,this._diffModel,this._layoutInfo.map(H=>H.originalEditor),this._layoutInfo.map(H=>H.modifiedEditor),this._editors)).recomputeInitiallyAndOnChange(this._store,z=>{this._movedBlocksLinesPart.set(z,void 0)}),this._register((0,s.applyStyle)(this.elements.overlay,{width:this._layoutInfo.map((z,H)=>z.originalEditor.width+(this._options.renderSideBySide.read(H)?0:z.modifiedEditor.width)),visibility:(0,p.derived)(z=>{var H,Y;return this._options.hideUnchangedRegions.read(z)&&((Y=(H=this._diffModel.read(z))===null||H===void 0?void 0:H.diff.read(z))===null||Y===void 0?void 0:Y.mappings.length)===0?\"visible\":\"hidden\"})})),this._register(E.Event.runAndSubscribe(this._editors.modified.onDidChangeCursorPosition,z=>{var H,Y;if(z?.reason===3){const j=(Y=(H=this._diffModel.get())===null||H===void 0?void 0:H.diff.get())===null||Y===void 0?void 0:Y.mappings.find(Z=>Z.lineRangeMapping.modified.contains(z.position.lineNumber));j?.lineRangeMapping.modified.isEmpty?this._audioCueService.playAudioCue(m.AudioCue.diffLineDeleted,{source:\"diffEditor.cursorPositionChanged\"}):j?.lineRangeMapping.original.isEmpty?this._audioCueService.playAudioCue(m.AudioCue.diffLineInserted,{source:\"diffEditor.cursorPositionChanged\"}):j&&this._audioCueService.playAudioCue(m.AudioCue.diffLineModified,{source:\"diffEditor.cursorPositionChanged\"})}}));const G=this._diffModel.map(this,(z,H)=>{if(z)return z.diff.read(H)===void 0&&!z.isDiffUpToDate.read(H)});this._register((0,p.autorunWithStore)((z,H)=>{if(G.read(z)===!0){const Y=this._editorProgressService.show(!0,1e3);H.add((0,S.toDisposable)(()=>Y.done()))}})),this._register((0,S.toDisposable)(()=>{var z;this._shouldDisposeDiffModel&&((z=this._diffModel.get())===null||z===void 0||z.dispose())})),this._register(new M.RevertButtonsFeature(this._editors,this._diffModel,this._options,this))}_createInnerEditor(B,W,V,K){return B.createInstance(i.CodeEditorWidget,W,V,K)}_createDiffEditorContributions(){const B=v.EditorExtensionsRegistry.getDiffEditorContributions();for(const W of B)try{this._register(this._instantiationService.createInstance(W.ctor,this))}catch(V){(0,y.onUnexpectedError)(V)}}get _targetEditor(){return this._editors.modified}getEditorType(){return g.EditorType.IDiffEditor}layout(B){this._rootSizeObserver.observe(B)}hasTextFocus(){return this._editors.original.hasTextFocus()||this._editors.modified.hasTextFocus()}saveViewState(){var B;const W=this._editors.original.saveViewState(),V=this._editors.modified.saveViewState();return{original:W,modified:V,modelState:(B=this._diffModel.get())===null||B===void 0?void 0:B.serializeState()}}restoreViewState(B){var W;if(B&&B.original&&B.modified){const V=B;this._editors.original.restoreViewState(V.original),this._editors.modified.restoreViewState(V.modified),V.modelState&&((W=this._diffModel.get())===null||W===void 0||W.restoreSerializedState(V.modelState))}}handleInitialized(){this._editors.original.handleInitialized(),this._editors.modified.handleInitialized()}createViewModel(B){return this._instantiationService.createInstance(N.DiffEditorViewModel,B,this._options)}getModel(){var B,W;return(W=(B=this._diffModel.get())===null||B===void 0?void 0:B.model)!==null&&W!==void 0?W:null}setModel(B,W){!B&&this._diffModel.get()&&this._accessibleDiffViewer.get().close();const V=B?\"model\"in B?{model:B,shouldDispose:!1}:{model:this.createViewModel(B),shouldDispose:!0}:void 0;this._diffModel.get()!==V?.model&&(0,p.subtransaction)(W,K=>{var F;p.observableFromEvent.batchEventsGlobally(K,()=>{this._editors.original.setModel(V?V.model.model.original:null),this._editors.modified.setModel(V?V.model.model.modified:null)});const q=this._diffModel.get(),ie=this._shouldDisposeDiffModel;this._shouldDisposeDiffModel=(F=V?.shouldDispose)!==null&&F!==void 0?F:!1,this._diffModel.set(V?.model,K),ie&&q?.dispose()})}updateOptions(B){this._options.updateOptions(B)}getContainerDomNode(){return this._domElement}getOriginalEditor(){return this._editors.original}getModifiedEditor(){return this._editors.modified}getLineChanges(){var B;const W=(B=this._diffModel.get())===null||B===void 0?void 0:B.diff.get();return W?x(W):null}revert(B){if(B.innerChanges){this.revertRangeMappings(B.innerChanges);return}const W=this._diffModel.get();!W||!W.isDiffUpToDate.get()||this._editors.modified.executeEdits(\"diffEditor\",[{range:B.modified.toExclusiveRange(),text:W.model.original.getValueInRange(B.original.toExclusiveRange())}])}revertRangeMappings(B){const W=this._diffModel.get();if(!W||!W.isDiffUpToDate.get())return;const V=B.map(K=>({range:K.modifiedRange,text:W.model.original.getValueInRange(K.originalRange)}));this._editors.modified.executeEdits(\"diffEditor\",V)}_goTo(B){this._editors.modified.setPosition(new l.Position(B.lineRangeMapping.modified.startLineNumber,1)),this._editors.modified.revealRangeInCenter(B.lineRangeMapping.modified.toExclusiveRange())}goToDiff(B){var W,V,K,F;const q=(V=(W=this._diffModel.get())===null||W===void 0?void 0:W.diff.get())===null||V===void 0?void 0:V.mappings;if(!q||q.length===0)return;const ie=this._editors.modified.getPosition().lineNumber;let ae;B===\"next\"?ae=(K=q.find(ne=>ne.lineRangeMapping.modified.startLineNumber>ie))!==null&&K!==void 0?K:q[0]:ae=(F=(0,k.findLast)(q,ne=>ne.lineRangeMapping.modified.startLineNumber<ie))!==null&&F!==void 0?F:q[q.length-1],this._goTo(ae),ae.lineRangeMapping.modified.isEmpty?this._audioCueService.playAudioCue(m.AudioCue.diffLineDeleted,{source:\"diffEditor.goToDiff\"}):ae.lineRangeMapping.original.isEmpty?this._audioCueService.playAudioCue(m.AudioCue.diffLineInserted,{source:\"diffEditor.goToDiff\"}):ae&&this._audioCueService.playAudioCue(m.AudioCue.diffLineModified,{source:\"diffEditor.goToDiff\"})}revealFirstDiff(){const B=this._diffModel.get();B&&this.waitForDiff().then(()=>{var W;const V=(W=B.diff.get())===null||W===void 0?void 0:W.mappings;!V||V.length===0||this._goTo(V[0])})}accessibleDiffViewerNext(){this._accessibleDiffViewer.get().next()}accessibleDiffViewerPrev(){this._accessibleDiffViewer.get().prev()}async waitForDiff(){const B=this._diffModel.get();B&&await B.waitForDiff()}mapToOtherSide(){var B,W;const V=this._editors.modified.hasWidgetFocus(),K=V?this._editors.modified:this._editors.original,F=V?this._editors.original:this._editors.modified;let q;const ie=K.getSelection();if(ie){const ae=(W=(B=this._diffModel.get())===null||B===void 0?void 0:B.diff.get())===null||W===void 0?void 0:W.mappings.map(ne=>V?ne.lineRangeMapping.flip():ne.lineRangeMapping);if(ae){const ne=(0,s.translatePosition)(ie.getStartPosition(),ae),$=(0,s.translatePosition)(ie.getEndPosition(),ae);q=o.Range.plusRange(ne,$)}}return{destination:F,destinationSelection:q}}switchSide(){const{destination:B,destinationSelection:W}=this.mapToOtherSide();B.focus(),W&&B.setSelection(W)}exitCompareMove(){const B=this._diffModel.get();B&&B.movedTextToCompare.set(void 0,void 0)}collapseAllUnchangedRegions(){var B;const W=(B=this._diffModel.get())===null||B===void 0?void 0:B.unchangedRegions.get();W&&(0,p.transaction)(V=>{for(const K of W)K.collapseAll(V)})}showAllUnchangedRegions(){var B;const W=(B=this._diffModel.get())===null||B===void 0?void 0:B.unchangedRegions.get();W&&(0,p.transaction)(V=>{for(const K of W)K.showAll(V)})}};e.DiffEditorWidget=R,e.DiffEditorWidget=R=ke([ge(3,C.IContextKeyService),ge(4,w.IInstantiationService),ge(5,b.ICodeEditorService),ge(6,m.IAudioCueService),ge(7,I.IEditorProgressService)],R);function x(O){return O.mappings.map(B=>{const W=B.lineRangeMapping;let V,K,F,q,ie=W.innerChanges;return W.original.isEmpty?(V=W.original.startLineNumber-1,K=0,ie=void 0):(V=W.original.startLineNumber,K=W.original.endLineNumberExclusive-1),W.modified.isEmpty?(F=W.modified.startLineNumber-1,q=0,ie=void 0):(F=W.modified.startLineNumber,q=W.modified.endLineNumberExclusive-1),{originalStartLineNumber:V,originalEndLineNumber:K,modifiedStartLineNumber:F,modifiedEndLineNumber:q,charChanges:ie?.map(ae=>({originalStartLineNumber:ae.originalRange.startLineNumber,originalStartColumn:ae.originalRange.startColumn,originalEndLineNumber:ae.originalRange.endLineNumber,originalEndColumn:ae.originalRange.endColumn,modifiedStartLineNumber:ae.modifiedRange.startLineNumber,modifiedStartColumn:ae.modifiedRange.startColumn,modifiedEndLineNumber:ae.modifiedRange.endLineNumber,modifiedEndColumn:ae.modifiedRange.endColumn}))}})}}),define(se[886],oe([1,0,7,26,16,33,259,21,626,30,25,27,15,258]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.findFocusedDiffEditor=e.AccessibleDiffViewerPrev=e.AccessibleDiffViewerNext=e.ShowAllUnchangedRegions=e.CollapseAllUnchangedRegions=e.ExitCompareMove=e.SwitchSide=e.ToggleUseInlineViewWhenSpaceIsLimited=e.ToggleShowMovedCodeBlocks=e.ToggleCollapseUnchangedRegions=void 0;class n extends v.Action2{constructor(){super({id:\"diffEditor.toggleCollapseUnchangedRegions\",title:(0,_.localize2)(5,\"Toggle Collapse Unchanged Regions\"),icon:k.Codicon.map,toggled:i.ContextKeyExpr.has(\"config.diffEditor.hideUnchangedRegions.enabled\"),precondition:i.ContextKeyExpr.has(\"isInDiffEditor\"),menu:{when:i.ContextKeyExpr.has(\"isInDiffEditor\"),id:v.MenuId.EditorTitle,order:22,group:\"navigation\"}})}run(w,...D){const I=w.get(a.IConfigurationService),T=!I.getValue(\"diffEditor.hideUnchangedRegions.enabled\");I.updateValue(\"diffEditor.hideUnchangedRegions.enabled\",T)}}e.ToggleCollapseUnchangedRegions=n,(0,v.registerAction2)(n);class t extends v.Action2{constructor(){super({id:\"diffEditor.toggleShowMovedCodeBlocks\",title:(0,_.localize2)(6,\"Toggle Show Moved Code Blocks\"),precondition:i.ContextKeyExpr.has(\"isInDiffEditor\")})}run(w,...D){const I=w.get(a.IConfigurationService),T=!I.getValue(\"diffEditor.experimental.showMoves\");I.updateValue(\"diffEditor.experimental.showMoves\",T)}}e.ToggleShowMovedCodeBlocks=t,(0,v.registerAction2)(t);class r extends v.Action2{constructor(){super({id:\"diffEditor.toggleUseInlineViewWhenSpaceIsLimited\",title:(0,_.localize2)(7,\"Toggle Use Inline View When Space Is Limited\"),precondition:i.ContextKeyExpr.has(\"isInDiffEditor\")})}run(w,...D){const I=w.get(a.IConfigurationService),T=!I.getValue(\"diffEditor.useInlineViewWhenSpaceIsLimited\");I.updateValue(\"diffEditor.useInlineViewWhenSpaceIsLimited\",T)}}e.ToggleUseInlineViewWhenSpaceIsLimited=r,(0,v.registerAction2)(r),v.MenuRegistry.appendMenuItem(v.MenuId.EditorTitle,{command:{id:new r().desc.id,title:(0,_.localize)(0,null),toggled:i.ContextKeyExpr.has(\"config.diffEditor.useInlineViewWhenSpaceIsLimited\"),precondition:i.ContextKeyExpr.has(\"isInDiffEditor\")},order:11,group:\"1_diff\",when:i.ContextKeyExpr.and(p.EditorContextKeys.diffEditorRenderSideBySideInlineBreakpointReached,i.ContextKeyExpr.has(\"isInDiffEditor\"))}),v.MenuRegistry.appendMenuItem(v.MenuId.EditorTitle,{command:{id:new t().desc.id,title:(0,_.localize)(1,null),icon:k.Codicon.move,toggled:i.ContextKeyEqualsExpr.create(\"config.diffEditor.experimental.showMoves\",!0),precondition:i.ContextKeyExpr.has(\"isInDiffEditor\")},order:10,group:\"1_diff\",when:i.ContextKeyExpr.has(\"isInDiffEditor\")});const u={value:(0,_.localize)(2,null),original:\"Diff Editor\"};class f extends y.EditorAction2{constructor(){super({id:\"diffEditor.switchSide\",title:(0,_.localize2)(8,\"Switch Side\"),icon:k.Codicon.arrowSwap,precondition:i.ContextKeyExpr.has(\"isInDiffEditor\"),f1:!0,category:u})}runEditorCommand(w,D,I){const T=h(w);if(T instanceof S.DiffEditorWidget){if(I&&I.dryRun)return{destinationSelection:T.mapToOtherSide().destinationSelection};T.switchSide()}}}e.SwitchSide=f,(0,v.registerAction2)(f);class c extends y.EditorAction2{constructor(){super({id:\"diffEditor.exitCompareMove\",title:(0,_.localize2)(9,\"Exit Compare Move\"),icon:k.Codicon.close,precondition:p.EditorContextKeys.comparingMovedCode,f1:!1,category:u,keybinding:{weight:1e4,primary:9}})}runEditorCommand(w,D,...I){const T=h(w);T instanceof S.DiffEditorWidget&&T.exitCompareMove()}}e.ExitCompareMove=c,(0,v.registerAction2)(c);class d extends y.EditorAction2{constructor(){super({id:\"diffEditor.collapseAllUnchangedRegions\",title:(0,_.localize2)(10,\"Collapse All Unchanged Regions\"),icon:k.Codicon.fold,precondition:i.ContextKeyExpr.has(\"isInDiffEditor\"),f1:!0,category:u})}runEditorCommand(w,D,...I){const T=h(w);T instanceof S.DiffEditorWidget&&T.collapseAllUnchangedRegions()}}e.CollapseAllUnchangedRegions=d,(0,v.registerAction2)(d);class s extends y.EditorAction2{constructor(){super({id:\"diffEditor.showAllUnchangedRegions\",title:(0,_.localize2)(11,\"Show All Unchanged Regions\"),icon:k.Codicon.unfold,precondition:i.ContextKeyExpr.has(\"isInDiffEditor\"),f1:!0,category:u})}runEditorCommand(w,D,...I){const T=h(w);T instanceof S.DiffEditorWidget&&T.showAllUnchangedRegions()}}e.ShowAllUnchangedRegions=s,(0,v.registerAction2)(s);const l={value:(0,_.localize)(3,null),original:\"Accessible Diff Viewer\"};class o extends v.Action2{constructor(){super({id:o.id,title:(0,_.localize2)(12,\"Go to Next Difference\"),category:l,precondition:i.ContextKeyExpr.has(\"isInDiffEditor\"),keybinding:{primary:65,weight:100},f1:!0})}run(w){const D=h(w);D?.accessibleDiffViewerNext()}}e.AccessibleDiffViewerNext=o,o.id=\"editor.action.accessibleDiffViewer.next\",v.MenuRegistry.appendMenuItem(v.MenuId.EditorTitle,{command:{id:o.id,title:(0,_.localize)(4,null),precondition:i.ContextKeyExpr.has(\"isInDiffEditor\")},order:10,group:\"2_diff\",when:i.ContextKeyExpr.and(p.EditorContextKeys.accessibleDiffViewerVisible.negate(),i.ContextKeyExpr.has(\"isInDiffEditor\"))});class g extends v.Action2{constructor(){super({id:g.id,title:(0,_.localize2)(13,\"Go to Previous Difference\"),category:l,precondition:i.ContextKeyExpr.has(\"isInDiffEditor\"),keybinding:{primary:1089,weight:100},f1:!0})}run(w){const D=h(w);D?.accessibleDiffViewerPrev()}}e.AccessibleDiffViewerPrev=g,g.id=\"editor.action.accessibleDiffViewer.prev\";function h(C){const D=C.get(E.ICodeEditorService).listDiffEditors(),I=(0,L.getActiveElement)();if(I)for(const T of D){const A=T.getContainerDomNode();if(m(A,I))return T}return null}e.findFocusedDiffEditor=h;function m(C,w){let D=w;for(;D;){if(D===C)return!0;D=D.parentElement}return!1}b.CommandsRegistry.registerCommandAlias(\"editor.action.diffReview.next\",o.id),(0,v.registerAction2)(o),b.CommandsRegistry.registerCommandAlias(\"editor.action.diffReview.prev\",g.id),(0,v.registerAction2)(g)}),define(se[168],oe([1,0,55,33,194,32,18,69,25,15,8,50,23]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.EmbeddedCodeEditorWidget=void 0;let n=class extends y.CodeEditorWidget{constructor(r,u,f,c,d,s,l,o,g,h,m,C,w){super(r,{...c.getRawOptions(),overflowWidgetsDomNode:c.getOverflowWidgetsDomNode()},f,d,s,l,o,g,h,m,C,w),this._parentEditor=c,this._overwriteOptions=u,super.updateOptions(this._overwriteOptions),this._register(c.onDidChangeConfiguration(D=>this._onParentConfigurationChanged(D)))}getParentEditor(){return this._parentEditor}_onParentConfigurationChanged(r){super.updateOptions(this._parentEditor.getRawOptions()),super.updateOptions(this._overwriteOptions)}updateOptions(r){L.mixin(this._overwriteOptions,r,!0),super.updateOptions(this._overwriteOptions)}};e.EmbeddedCodeEditorWidget=n,e.EmbeddedCodeEditorWidget=n=ke([ge(4,b.IInstantiationService),ge(5,k.ICodeEditorService),ge(6,_.ICommandService),ge(7,v.IContextKeyService),ge(8,i.IThemeService),ge(9,a.INotificationService),ge(10,p.IAccessibilityService),ge(11,E.ILanguageConfigurationService),ge(12,S.ILanguageFeaturesService)],n)}),define(se[374],oe([1,0,7,229,26,2,35,110,259,373,30,8,578]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DiffEditorItemTemplate=e.TemplateData=void 0;class n{constructor(f){this.viewModel=f}getId(){return this.viewModel}}e.TemplateData=n;let t=class extends E.Disposable{constructor(f,c,d,s){super(),this._container=f,this._overflowWidgetsDomNode=c,this._workbenchUIElementFactory=d,this._instantiationService=s,this._viewModel=(0,p.observableValue)(this,void 0),this._collapsed=(0,S.derived)(this,o=>{var g;return(g=this._viewModel.read(o))===null||g===void 0?void 0:g.collapsed.read(o)}),this._editorContentHeight=(0,p.observableValue)(this,500),this.contentHeight=(0,S.derived)(this,o=>(this._collapsed.read(o)?0:this._editorContentHeight.read(o))+this._outerEditorHeight),this._modifiedContentWidth=(0,p.observableValue)(this,0),this._modifiedWidth=(0,p.observableValue)(this,0),this._originalContentWidth=(0,p.observableValue)(this,0),this._originalWidth=(0,p.observableValue)(this,0),this.maxScroll=(0,S.derived)(this,o=>{const g=this._modifiedContentWidth.read(o)-this._modifiedWidth.read(o),h=this._originalContentWidth.read(o)-this._originalWidth.read(o);return g>h?{maxScroll:g,width:this._modifiedWidth.read(o)}:{maxScroll:h,width:this._originalWidth.read(o)}}),this._elements=(0,L.h)(\"div.multiDiffEntry\",[(0,L.h)(\"div.header@header\",[(0,L.h)(\"div.collapse-button@collapseButton\"),(0,L.h)(\"div.file-path\",[(0,L.h)(\"div.title.modified.show-file-icons@primaryPath\",[]),(0,L.h)(\"div.status.deleted@status\",[\"R\"]),(0,L.h)(\"div.title.original.show-file-icons@secondaryPath\",[])]),(0,L.h)(\"div.actions@actions\")]),(0,L.h)(\"div.editorParent\",[(0,L.h)(\"div.editorContainer@editor\")])]),this.editor=this._register(this._instantiationService.createInstance(_.DiffEditorWidget,this._elements.editor,{overflowWidgetsDomNode:this._overflowWidgetsDomNode},{})),this.isModifedFocused=r(this.editor.getModifiedEditor()),this.isOriginalFocused=r(this.editor.getOriginalEditor()),this.isFocused=(0,S.derived)(this,o=>this.isModifedFocused.read(o)||this.isOriginalFocused.read(o)),this._resourceLabel=this._workbenchUIElementFactory.createResourceLabel?this._register(this._workbenchUIElementFactory.createResourceLabel(this._elements.primaryPath)):void 0,this._resourceLabel2=this._workbenchUIElementFactory.createResourceLabel?this._register(this._workbenchUIElementFactory.createResourceLabel(this._elements.secondaryPath)):void 0,this._dataStore=new E.DisposableStore,this._headerHeight=38;const l=new k.Button(this._elements.collapseButton,{});this._register((0,S.autorun)(o=>{l.element.className=\"\",l.icon=this._collapsed.read(o)?y.Codicon.chevronRight:y.Codicon.chevronDown})),this._register(l.onDidClick(()=>{var o;(o=this._viewModel.get())===null||o===void 0||o.collapsed.set(!this._collapsed.get(),void 0)})),this._register((0,S.autorun)(o=>{this._elements.editor.style.display=this._collapsed.read(o)?\"none\":\"block\"})),this.editor.getModifiedEditor().onDidLayoutChange(o=>{const g=this.editor.getModifiedEditor().getLayoutInfo().contentWidth;this._modifiedWidth.set(g,void 0)}),this.editor.getOriginalEditor().onDidLayoutChange(o=>{const g=this.editor.getOriginalEditor().getLayoutInfo().contentWidth;this._originalWidth.set(g,void 0)}),this._register(this.editor.onDidContentSizeChange(o=>{(0,p.globalTransaction)(g=>{this._editorContentHeight.set(o.contentHeight,g),this._modifiedContentWidth.set(this.editor.getModifiedEditor().getContentWidth(),g),this._originalContentWidth.set(this.editor.getOriginalEditor().getContentWidth(),g)})})),this._register((0,S.autorun)(o=>{const g=this.isFocused.read(o);this._elements.root.classList.toggle(\"focused\",g)})),this._container.appendChild(this._elements.root),this._outerEditorHeight=38,this._register(this._instantiationService.createInstance(v.MenuWorkbenchToolBar,this._elements.actions,b.MenuId.MultiDiffEditorFileToolbar,{actionRunner:this._register(new i.ActionRunnerWithContext(()=>{var o;return(o=this._viewModel.get())===null||o===void 0?void 0:o.modifiedUri})),menuOptions:{shouldForwardArgs:!0},toolbarOptions:{primaryGroup:o=>o.startsWith(\"navigation\")}}))}setScrollLeft(f){this._modifiedContentWidth.get()-this._modifiedWidth.get()>this._originalContentWidth.get()-this._originalWidth.get()?this.editor.getModifiedEditor().setScrollLeft(f):this.editor.getOriginalEditor().setScrollLeft(f)}setData(f){function c(s){return{...s,scrollBeyondLastLine:!1,hideUnchangedRegions:{enabled:!0},scrollbar:{vertical:\"hidden\",horizontal:\"hidden\",handleMouseWheel:!1,useShadows:!1},renderOverviewRuler:!1,fixedOverflowWidgets:!0,overviewRulerBorder:!1}}const d=f.viewModel.entry.value;d.onOptionsDidChange&&this._dataStore.add(d.onOptionsDidChange(()=>{var s;this.editor.updateOptions(c((s=d.options)!==null&&s!==void 0?s:{}))})),(0,p.globalTransaction)(s=>{var l,o,g,h;(l=this._resourceLabel)===null||l===void 0||l.setUri((o=f.viewModel.modifiedUri)!==null&&o!==void 0?o:f.viewModel.originalUri,{strikethrough:f.viewModel.modifiedUri===void 0});let m=!1,C=!1,w=!1,D=\"\";f.viewModel.modifiedUri&&f.viewModel.originalUri&&f.viewModel.modifiedUri.path!==f.viewModel.originalUri.path?(D=\"R\",m=!0):f.viewModel.modifiedUri?f.viewModel.originalUri||(D=\"A\",w=!0):(D=\"D\",C=!0),this._elements.status.classList.toggle(\"renamed\",m),this._elements.status.classList.toggle(\"deleted\",C),this._elements.status.classList.toggle(\"added\",w),this._elements.status.innerText=D,(g=this._resourceLabel2)===null||g===void 0||g.setUri(m?f.viewModel.originalUri:void 0,{strikethrough:!0}),this._dataStore.clear(),this._viewModel.set(f.viewModel,s),this.editor.setModel(f.viewModel.diffEditorViewModel,s),this.editor.updateOptions(c((h=d.options)!==null&&h!==void 0?h:{}))})}render(f,c,d,s){this._elements.root.style.visibility=\"visible\",this._elements.root.style.top=`${f.start}px`,this._elements.root.style.height=`${f.length}px`,this._elements.root.style.width=`${c}px`,this._elements.root.style.position=\"absolute\";const l=Math.max(0,Math.min(f.length-this._headerHeight,s.start-f.start));this._elements.header.style.transform=`translateY(${l}px)`,(0,p.globalTransaction)(o=>{this.editor.layout({width:c,height:f.length-this._outerEditorHeight})}),this.editor.getOriginalEditor().setScrollTop(d),this._elements.header.classList.toggle(\"shadow\",l>0||d>0)}hide(){this._elements.root.style.top=\"-100000px\",this._elements.root.style.visibility=\"hidden\"}};e.DiffEditorItemTemplate=t,e.DiffEditorItemTemplate=t=ke([ge(3,a.IInstantiationService)],t);function r(u){return(0,S.observableFromEvent)(f=>{const c=new E.DisposableStore;return c.add(u.onDidFocusEditorWidget(()=>f(!0))),c.add(u.onDidBlurEditorWidget(()=>f(!1))),c},()=>u.hasWidgetFocus())}}),define(se[887],oe([1,0,7,77,60,2,35,110,147,87,73,8,374,499,15,163,21,24,452]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MultiDiffEditorWidgetImpl=void 0;let c=class extends E.Disposable{constructor(l,o,g,h,m,C){super(),this._element=l,this._dimension=o,this._viewModel=g,this._workbenchUIElementFactory=h,this._parentContextKeyService=m,this._parentInstantiationService=C,this._elements=(0,L.h)(\"div.monaco-component.multiDiffEditor\",[(0,L.h)(\"div@content\",{style:{overflow:\"hidden\"}}),(0,L.h)(\"div.monaco-editor@overflowWidgetsDomNode\",{})]),this._sizeObserver=this._register(new v.ObservableElementSizeObserver(this._element,void 0)),this._objectPool=this._register(new n.ObjectPool(D=>{const I=this._instantiationService.createInstance(i.DiffEditorItemTemplate,this._elements.content,this._elements.overflowWidgetsDomNode,this._workbenchUIElementFactory);return I.setData(D),I})),this._scrollable=this._register(new _.Scrollable({forceIntegerValues:!1,scheduleAtNextAnimationFrame:D=>(0,L.scheduleAtNextAnimationFrame)((0,L.getWindow)(this._element),D),smoothScrollDuration:100})),this._scrollableElement=this._register(new k.SmoothScrollableElement(this._elements.root,{vertical:1,horizontal:1,useShadows:!1},this._scrollable)),this.scrollTop=(0,S.observableFromEvent)(this._scrollableElement.onScroll,()=>this._scrollableElement.getScrollPosition().scrollTop),this.scrollLeft=(0,S.observableFromEvent)(this._scrollableElement.onScroll,()=>this._scrollableElement.getScrollPosition().scrollLeft),this._viewItems=(0,S.derivedWithStore)(this,(D,I)=>{const T=this._viewModel.read(D);return T?T.items.read(D).map(P=>{var N;const M=I.add(new d(P,this._objectPool,this.scrollLeft)),R=(N=this._lastDocStates)===null||N===void 0?void 0:N[M.getKey()];return R&&(0,p.transaction)(x=>{M.setViewState(R,x)}),M}):[]}),this._spaceBetweenPx=10,this._totalHeight=this._viewItems.map(this,(D,I)=>D.reduce((T,A)=>T+A.contentHeight.read(I)+this._spaceBetweenPx,0)),this.activeDiffItem=(0,S.derived)(this,D=>this._viewItems.read(D).find(I=>{var T;return(T=I.template.read(D))===null||T===void 0?void 0:T.isFocused.read(D)})),this.lastActiveDiffItem=(0,S.derivedObservableWithCache)((D,I)=>{var T;return(T=this.activeDiffItem.read(D))!==null&&T!==void 0?T:I}),this._contextKeyService=this._register(this._parentContextKeyService.createScoped(this._element)),this._instantiationService=this._parentInstantiationService.createChild(new r.ServiceCollection([t.IContextKeyService,this._contextKeyService])),this._lastDocStates={},this._contextKeyService.createKey(u.EditorContextKeys.inMultiDiffEditor.key,!0),this._register((0,S.autorunWithStore)((D,I)=>{const T=this._viewModel.read(D);if(T&&T.contextKeys)for(const[A,P]of Object.entries(T.contextKeys)){const N=this._contextKeyService.createKey(A,void 0);N.set(P),I.add((0,E.toDisposable)(()=>N.reset()))}}));const w=this._parentContextKeyService.createKey(u.EditorContextKeys.multiDiffEditorAllCollapsed.key,!1);this._register((0,S.autorun)(D=>{const I=this._viewModel.read(D);if(I){const T=I.items.read(D).every(A=>A.collapsed.read(D));w.set(T)}})),this._register((0,S.autorun)(D=>{const I=this.lastActiveDiffItem.read(D);(0,p.transaction)(T=>{var A;(A=this._viewModel.read(D))===null||A===void 0||A.activeDiffItem.set(I?.viewModel,T)})})),this._register((0,S.autorun)(D=>{const I=this._dimension.read(D);this._sizeObserver.observe(I)})),this._elements.content.style.position=\"relative\",this._register((0,S.autorun)(D=>{const I=this._sizeObserver.height.read(D);this._elements.root.style.height=`${I}px`;const T=this._totalHeight.read(D);this._elements.content.style.height=`${T}px`;const A=this._sizeObserver.width.read(D);let P=A;const N=this._viewItems.read(D),M=(0,y.findFirstMaxBy)(N,R=>R.maxScroll.read(D).maxScroll);if(M){const R=M.maxScroll.read(D);P=A+R.maxScroll}this._scrollableElement.setScrollDimensions({width:A,height:I,scrollHeight:T,scrollWidth:P})})),l.replaceChildren(this._scrollableElement.getDomNode()),this._register((0,E.toDisposable)(()=>{l.replaceChildren()})),this._register(this._register((0,S.autorun)(D=>{(0,p.globalTransaction)(I=>{this.render(D)})})))}render(l){const o=this.scrollTop.read(l);let g=0,h=0,m=0;const C=this._sizeObserver.height.read(l),w=b.OffsetRange.ofStartAndLength(o,C),D=this._sizeObserver.width.read(l);for(const I of this._viewItems.read(l)){const T=I.contentHeight.read(l),A=Math.min(T,C),P=b.OffsetRange.ofStartAndLength(h,A),N=b.OffsetRange.ofStartAndLength(m,T);if(N.isBefore(w))g-=T-A,I.hide();else if(N.isAfter(w))I.hide();else{const M=Math.max(0,Math.min(w.start-N.start,T-A));g-=M;const R=b.OffsetRange.ofStartAndLength(o+g,C);I.render(P,M,D,R)}h+=A+this._spaceBetweenPx,m+=T+this._spaceBetweenPx}this._elements.content.style.transform=`translateY(${-(o+g)}px)`}};e.MultiDiffEditorWidgetImpl=c,e.MultiDiffEditorWidgetImpl=c=ke([ge(4,t.IContextKeyService),ge(5,a.IInstantiationService)],c);class d extends E.Disposable{constructor(l,o,g){super(),this.viewModel=l,this._objectPool=o,this._scrollLeft=g,this._templateRef=this._register((0,p.disposableObservableValue)(this,void 0)),this.contentHeight=(0,S.derived)(this,h=>{var m,C,w;return(w=(C=(m=this._templateRef.read(h))===null||m===void 0?void 0:m.object.contentHeight)===null||C===void 0?void 0:C.read(h))!==null&&w!==void 0?w:this.viewModel.lastTemplateData.read(h).contentHeight}),this.maxScroll=(0,S.derived)(this,h=>{var m,C;return(C=(m=this._templateRef.read(h))===null||m===void 0?void 0:m.object.maxScroll.read(h))!==null&&C!==void 0?C:{maxScroll:0,scrollWidth:0}}),this.template=(0,S.derived)(this,h=>{var m;return(m=this._templateRef.read(h))===null||m===void 0?void 0:m.object}),this._isHidden=(0,S.observableValue)(this,!1),this._register((0,S.autorun)(h=>{var m;const C=this._scrollLeft.read(h);(m=this._templateRef.read(h))===null||m===void 0||m.object.setScrollLeft(C)})),this._register((0,S.autorun)(h=>{const m=this._templateRef.read(h);!m||!this._isHidden.read(h)||m.object.isFocused.read(h)||this._clear()}))}dispose(){this._clear(),super.dispose()}toString(){var l;return`VirtualViewItem(${(l=this.viewModel.entry.value.modified)===null||l===void 0?void 0:l.uri.toString()})`}getKey(){return this.viewModel.getKey()}setViewState(l,o){var g;this.viewModel.collapsed.set(l.collapsed,o),this._updateTemplateData(o);const h=this.viewModel.lastTemplateData.get(),m=(g=l.selections)===null||g===void 0?void 0:g.map(f.Selection.liftSelection);this.viewModel.lastTemplateData.set({...h,selections:m},o);const C=this._templateRef.get();C&&m&&C.object.editor.setSelections(m)}_updateTemplateData(l){var o;const g=this._templateRef.get();g&&this.viewModel.lastTemplateData.set({contentHeight:g.object.contentHeight.get(),selections:(o=g.object.editor.getSelections())!==null&&o!==void 0?o:void 0},l)}_clear(){const l=this._templateRef.get();l&&(0,p.transaction)(o=>{this._updateTemplateData(o),l.object.hide(),this._templateRef.set(void 0,o)})}hide(){this._isHidden.set(!0,void 0)}render(l,o,g,h){this._isHidden.set(!1,void 0);let m=this._templateRef.get();if(!m){m=this._objectPool.getUnusedObj(new i.TemplateData(this.viewModel)),this._templateRef.set(m,void 0);const C=this.viewModel.lastTemplateData.get().selections;C&&m.object.editor.setSelections(C)}m.object.render(l,g,o,h)}}}),define(se[888],oe([1,0,2,35,87,887,8,374,835]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MultiDiffEditorWidget=void 0;let _=class extends L.Disposable{constructor(b,a,i){super(),this._element=b,this._workbenchUIElementFactory=a,this._instantiationService=i,this._dimension=(0,k.observableValue)(this,void 0),this._viewModel=(0,k.observableValue)(this,void 0),this._widgetImpl=(0,k.derivedWithStore)(this,(n,t)=>((0,y.readHotReloadableExport)(p.DiffEditorItemTemplate,n),t.add(this._instantiationService.createInstance((0,y.readHotReloadableExport)(E.MultiDiffEditorWidgetImpl,n),this._element,this._dimension,this._viewModel,this._workbenchUIElementFactory)))),this._register((0,k.recomputeInitiallyAndOnChange)(this._widgetImpl))}};e.MultiDiffEditorWidget=_,e.MultiDiffEditorWidget=_=ke([ge(2,S.IInstantiationService)],_)}),define(se[889],oe([1,0,14,2,16,10,5,24,21,41,38,650,30,29,23,454]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.BracketMatchingController=void 0;const r=(0,n.registerColor)(\"editorOverviewRuler.bracketMatchForeground\",{dark:\"#A0A0A0\",light:\"#A0A0A0\",hcDark:\"#A0A0A0\",hcLight:\"#A0A0A0\"},a.localize(0,null));class u extends y.EditorAction{constructor(){super({id:\"editor.action.jumpToBracket\",label:a.localize(1,null),alias:\"Go to Bracket\",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.editorTextFocus,primary:3165,weight:100}})}run(o,g){var h;(h=s.get(g))===null||h===void 0||h.jumpToBracket()}}class f extends y.EditorAction{constructor(){super({id:\"editor.action.selectToBracket\",label:a.localize(2,null),alias:\"Select to Bracket\",precondition:void 0,metadata:{description:a.localize2(5,\"Select the text inside and including the brackets or curly braces\"),args:[{name:\"args\",schema:{type:\"object\",properties:{selectBrackets:{type:\"boolean\",default:!0}}}}]}})}run(o,g,h){var m;let C=!0;h&&h.selectBrackets===!1&&(C=!1),(m=s.get(g))===null||m===void 0||m.selectToBracket(C)}}class c extends y.EditorAction{constructor(){super({id:\"editor.action.removeBrackets\",label:a.localize(3,null),alias:\"Remove Brackets\",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.editorTextFocus,primary:2561,weight:100}})}run(o,g){var h;(h=s.get(g))===null||h===void 0||h.removeBrackets(this.id)}}class d{constructor(o,g,h){this.position=o,this.brackets=g,this.options=h}}class s extends k.Disposable{static get(o){return o.getContribution(s.ID)}constructor(o){super(),this._editor=o,this._lastBracketsData=[],this._lastVersionId=0,this._decorations=this._editor.createDecorationsCollection(),this._updateBracketsSoon=this._register(new L.RunOnceScheduler(()=>this._updateBrackets(),50)),this._matchBrackets=this._editor.getOption(71),this._updateBracketsSoon.schedule(),this._register(o.onDidChangeCursorPosition(g=>{this._matchBrackets!==\"never\"&&this._updateBracketsSoon.schedule()})),this._register(o.onDidChangeModelContent(g=>{this._updateBracketsSoon.schedule()})),this._register(o.onDidChangeModel(g=>{this._lastBracketsData=[],this._updateBracketsSoon.schedule()})),this._register(o.onDidChangeModelLanguageConfiguration(g=>{this._lastBracketsData=[],this._updateBracketsSoon.schedule()})),this._register(o.onDidChangeConfiguration(g=>{g.hasChanged(71)&&(this._matchBrackets=this._editor.getOption(71),this._decorations.clear(),this._lastBracketsData=[],this._lastVersionId=0,this._updateBracketsSoon.schedule())})),this._register(o.onDidBlurEditorWidget(()=>{this._updateBracketsSoon.schedule()})),this._register(o.onDidFocusEditorWidget(()=>{this._updateBracketsSoon.schedule()}))}jumpToBracket(){if(!this._editor.hasModel())return;const o=this._editor.getModel(),g=this._editor.getSelections().map(h=>{const m=h.getStartPosition(),C=o.bracketPairs.matchBracket(m);let w=null;if(C)C[0].containsPosition(m)&&!C[1].containsPosition(m)?w=C[1].getStartPosition():C[1].containsPosition(m)&&(w=C[0].getStartPosition());else{const D=o.bracketPairs.findEnclosingBrackets(m);if(D)w=D[1].getStartPosition();else{const I=o.bracketPairs.findNextBracket(m);I&&I.range&&(w=I.range.getStartPosition())}}return w?new p.Selection(w.lineNumber,w.column,w.lineNumber,w.column):new p.Selection(m.lineNumber,m.column,m.lineNumber,m.column)});this._editor.setSelections(g),this._editor.revealRange(g[0])}selectToBracket(o){if(!this._editor.hasModel())return;const g=this._editor.getModel(),h=[];this._editor.getSelections().forEach(m=>{const C=m.getStartPosition();let w=g.bracketPairs.matchBracket(C);if(!w&&(w=g.bracketPairs.findEnclosingBrackets(C),!w)){const T=g.bracketPairs.findNextBracket(C);T&&T.range&&(w=g.bracketPairs.matchBracket(T.range.getStartPosition()))}let D=null,I=null;if(w){w.sort(S.Range.compareRangesUsingStarts);const[T,A]=w;if(D=o?T.getStartPosition():T.getEndPosition(),I=o?A.getEndPosition():A.getStartPosition(),A.containsPosition(C)){const P=D;D=I,I=P}}D&&I&&h.push(new p.Selection(D.lineNumber,D.column,I.lineNumber,I.column))}),h.length>0&&(this._editor.setSelections(h),this._editor.revealRange(h[0]))}removeBrackets(o){if(!this._editor.hasModel())return;const g=this._editor.getModel();this._editor.getSelections().forEach(h=>{const m=h.getPosition();let C=g.bracketPairs.matchBracket(m);C||(C=g.bracketPairs.findEnclosingBrackets(m)),C&&(this._editor.pushUndoStop(),this._editor.executeEdits(o,[{range:C[0],text:\"\"},{range:C[1],text:\"\"}]),this._editor.pushUndoStop())})}_updateBrackets(){if(this._matchBrackets===\"never\")return;this._recomputeBrackets();const o=[];let g=0;for(const h of this._lastBracketsData){const m=h.brackets;m&&(o[g++]={range:m[0],options:h.options},o[g++]={range:m[1],options:h.options})}this._decorations.set(o)}_recomputeBrackets(){if(!this._editor.hasModel()||!this._editor.hasWidgetFocus()){this._lastBracketsData=[],this._lastVersionId=0;return}const o=this._editor.getSelections();if(o.length>100){this._lastBracketsData=[],this._lastVersionId=0;return}const g=this._editor.getModel(),h=g.getVersionId();let m=[];this._lastVersionId===h&&(m=this._lastBracketsData);const C=[];let w=0;for(let P=0,N=o.length;P<N;P++){const M=o[P];M.isEmpty()&&(C[w++]=M.getStartPosition())}C.length>1&&C.sort(E.Position.compare);const D=[];let I=0,T=0;const A=m.length;for(let P=0,N=C.length;P<N;P++){const M=C[P];for(;T<A&&m[T].position.isBefore(M);)T++;if(T<A&&m[T].position.equals(M))D[I++]=m[T];else{let R=g.bracketPairs.matchBracket(M,20),x=s._DECORATION_OPTIONS_WITH_OVERVIEW_RULER;!R&&this._matchBrackets===\"always\"&&(R=g.bracketPairs.findEnclosingBrackets(M,20),x=s._DECORATION_OPTIONS_WITHOUT_OVERVIEW_RULER),D[I++]=new d(M,R,x)}}this._lastBracketsData=D,this._lastVersionId=h}}e.BracketMatchingController=s,s.ID=\"editor.contrib.bracketMatchingController\",s._DECORATION_OPTIONS_WITH_OVERVIEW_RULER=b.ModelDecorationOptions.register({description:\"bracket-match-overview\",stickiness:1,className:\"bracket-match\",overviewRuler:{color:(0,t.themeColorFromId)(r),position:v.OverviewRulerLane.Center}}),s._DECORATION_OPTIONS_WITHOUT_OVERVIEW_RULER=b.ModelDecorationOptions.register({description:\"bracket-match-no-overview\",stickiness:1,className:\"bracket-match\"}),(0,y.registerEditorContribution)(s.ID,s,1),(0,y.registerEditorAction)(f),(0,y.registerEditorAction)(u),(0,y.registerEditorAction)(c),i.MenuRegistry.appendMenuItem(i.MenuId.MenubarGoMenu,{group:\"5_infile_nav\",command:{id:\"editor.action.jumpToBracket\",title:a.localize(4,null)},order:2})}),define(se[260],oe([1,0,7,48,12,99,2,10,38,18,140,816,836,361,166,657,839,25,27,15,8,97,88,29,89,23,116,360]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w){\"use strict\";var D;Object.defineProperty(e,\"__esModule\",{value:!0}),e.CodeActionController=void 0;const I=\"quickfix-edit-highlight\";let T=D=class extends S.Disposable{static get(P){return P.getContribution(D.ID)}constructor(P,N,M,R,x,O,B,W,V,K){super(),this._commandService=B,this._configurationService=W,this._actionWidgetService=V,this._instantiationService=K,this._activeCodeActions=this._register(new S.MutableDisposable),this._showDisabled=!1,this._disposed=!1,this._editor=P,this._model=this._register(new w.CodeActionModel(this._editor,x.codeActionProvider,N,M,O,W)),this._register(this._model.onDidChangeState(F=>this.update(F))),this._lightBulbWidget=new E.Lazy(()=>{const F=this._editor.getContribution(n.LightBulbWidget.ID);return F&&this._register(F.onClick(q=>this.showCodeActionsFromLightbulb(q.actions,q))),F}),this._resolver=R.createInstance(a.CodeActionKeybindingResolver),this._register(this._editor.onDidLayoutChange(()=>this._actionWidgetService.hide()))}dispose(){this._disposed=!0,super.dispose()}async showCodeActionsFromLightbulb(P,N){if(P.allAIFixes&&P.validActions.length===1){const M=P.validActions[0],R=M.action.command;R&&R.id===\"inlineChat.start\"&&R.arguments&&R.arguments.length>=1&&(R.arguments[0]={...R.arguments[0],autoSend:!1}),await this._applyCodeAction(M,!1,!1,b.ApplyCodeActionReason.FromAILightbulb);return}await this.showCodeActionList(P,N,{includeDisabledActions:!1,fromLightbulb:!0})}showCodeActions(P,N,M){return this.showCodeActionList(N,M,{includeDisabledActions:!1,fromLightbulb:!1})}manualTriggerAtCurrentPosition(P,N,M,R){var x;if(!this._editor.hasModel())return;(x=t.MessageController.get(this._editor))===null||x===void 0||x.closeMessage();const O=this._editor.getPosition();this._trigger({type:1,triggerAction:N,filter:M,autoApply:R,context:{notAvailableMessage:P,position:O}})}_trigger(P){return this._model.trigger(P)}async _applyCodeAction(P,N,M,R){try{await this._instantiationService.invokeFunction(b.applyCodeAction,P,R,{preview:M,editor:this._editor})}finally{N&&this._trigger({type:2,triggerAction:C.CodeActionTriggerSource.QuickFix,filter:{}})}}async update(P){var N,M,R,x,O,B,W;if(P.type!==1){(N=this._lightBulbWidget.rawValue)===null||N===void 0||N.hide();return}let V;try{V=await P.actions}catch(K){(0,y.onUnexpectedError)(K);return}if(!this._disposed)if((M=this._lightBulbWidget.value)===null||M===void 0||M.update(V,P.trigger,P.position),P.trigger.type===1){if(!((R=P.trigger.filter)===null||R===void 0)&&R.include){const F=this.tryGetValidActionToApply(P.trigger,V);if(F){try{(x=this._lightBulbWidget.value)===null||x===void 0||x.hide(),await this._applyCodeAction(F,!1,!1,b.ApplyCodeActionReason.FromCodeActions)}finally{V.dispose()}return}if(P.trigger.context){const q=this.getInvalidActionThatWouldHaveBeenApplied(P.trigger,V);if(q&&q.action.disabled){(O=t.MessageController.get(this._editor))===null||O===void 0||O.showMessage(q.action.disabled,P.trigger.context.position),V.dispose();return}}}const K=!!(!((B=P.trigger.filter)===null||B===void 0)&&B.include);if(P.trigger.context&&(!V.allActions.length||!K&&!V.validActions.length)){(W=t.MessageController.get(this._editor))===null||W===void 0||W.showMessage(P.trigger.context.notAvailableMessage,P.trigger.context.position),this._activeCodeActions.value=V,V.dispose();return}this._activeCodeActions.value=V,this.showCodeActionList(V,this.toCoords(P.position),{includeDisabledActions:K,fromLightbulb:!1})}else this._actionWidgetService.isVisible?V.dispose():this._activeCodeActions.value=V}getInvalidActionThatWouldHaveBeenApplied(P,N){if(N.allActions.length&&(P.autoApply===\"first\"&&N.validActions.length===0||P.autoApply===\"ifSingle\"&&N.allActions.length===1))return N.allActions.find(({action:M})=>M.disabled)}tryGetValidActionToApply(P,N){if(N.validActions.length&&(P.autoApply===\"first\"&&N.validActions.length>0||P.autoApply===\"ifSingle\"&&N.validActions.length===1))return N.validActions[0]}async showCodeActionList(P,N,M){const R=this._editor.createDecorationsCollection(),x=this._editor.getDomNode();if(!x)return;const O=M.includeDisabledActions&&(this._showDisabled||P.validActions.length===0)?P.allActions:P.validActions;if(!O.length)return;const B=p.Position.isIPosition(N)?this.toCoords(N):N,W={onSelect:async(V,K)=>{this._applyCodeAction(V,!0,!!K,b.ApplyCodeActionReason.FromCodeActions),this._actionWidgetService.hide(),R.clear()},onHide:()=>{var V;(V=this._editor)===null||V===void 0||V.focus(),R.clear()},onHover:async(V,K)=>{var F;if(!K.isCancellationRequested)return{canPreview:!!(!((F=V.action.edit)===null||F===void 0)&&F.edits.length)}},onFocus:V=>{var K,F;if(V&&V.action){const q=V.action.ranges,ie=V.action.diagnostics;if(R.clear(),q&&q.length>0){const ae=q.map(ne=>({range:ne,options:D.DECORATION}));R.set(ae)}else if(ie&&ie.length>0){const ae=ie.map($=>({range:$,options:D.DECORATION}));R.set(ae);const ne=ie[0];if(ne.startLineNumber&&ne.startColumn){const $=(F=(K=this._editor.getModel())===null||K===void 0?void 0:K.getWordAtPosition({lineNumber:ne.startLineNumber,column:ne.startColumn}))===null||F===void 0?void 0:F.word;k.status((0,r.localize)(0,null,$,ne.startLineNumber,ne.startColumn))}}}else R.clear()}};this._actionWidgetService.show(\"codeActionWidget\",!0,(0,i.toMenuItems)(O,this._shouldShowHeaders(),this._resolver.getResolver()),W,B,x,this._getActionBarActions(P,N,M))}toCoords(P){if(!this._editor.hasModel())return{x:0,y:0};this._editor.revealPosition(P,1),this._editor.render();const N=this._editor.getScrolledVisiblePosition(P),M=(0,L.getDomNodePagePosition)(this._editor.getDomNode()),R=M.left+N.left,x=M.top+N.top+N.height;return{x:R,y:x}}_shouldShowHeaders(){var P;const N=(P=this._editor)===null||P===void 0?void 0:P.getModel();return this._configurationService.getValue(\"editor.codeActionWidget.showHeaders\",{resource:N?.uri})}_getActionBarActions(P,N,M){if(M.fromLightbulb)return[];const R=P.documentation.map(x=>{var O;return{id:x.id,label:x.title,tooltip:(O=x.tooltip)!==null&&O!==void 0?O:\"\",class:void 0,enabled:!0,run:()=>{var B;return this._commandService.executeCommand(x.id,...(B=x.arguments)!==null&&B!==void 0?B:[])}}});return M.includeDisabledActions&&P.validActions.length>0&&P.allActions.length!==P.validActions.length&&R.push(this._showDisabled?{id:\"hideMoreActions\",label:(0,r.localize)(1,null),enabled:!0,tooltip:\"\",class:void 0,run:()=>(this._showDisabled=!1,this.showCodeActionList(P,N,M))}:{id:\"showMoreActions\",label:(0,r.localize)(2,null),enabled:!0,tooltip:\"\",class:void 0,run:()=>(this._showDisabled=!0,this.showCodeActionList(P,N,M))}),R}};e.CodeActionController=T,T.ID=\"editor.contrib.codeActionController\",T.DECORATION=_.ModelDecorationOptions.register({description:\"quickfix-highlight\",className:I}),e.CodeActionController=T=D=ke([ge(1,l.IMarkerService),ge(2,d.IContextKeyService),ge(3,s.IInstantiationService),ge(4,v.ILanguageFeaturesService),ge(5,o.IEditorProgressService),ge(6,f.ICommandService),ge(7,c.IConfigurationService),ge(8,u.IActionWidgetService),ge(9,s.IInstantiationService)],T),(0,m.registerThemingParticipant)((A,P)=>{((R,x)=>{x&&P.addRule(`.monaco-editor ${R} { background-color: ${x}; }`)})(\".quickfix-edit-highlight\",A.getColor(g.editorFindMatchHighlight));const M=A.getColor(g.editorFindMatchHighlightBorder);M&&P.addRule(`.monaco-editor .quickfix-edit-highlight { border: 1px ${(0,h.isHighContrast)(A.type)?\"dotted\":\"solid\"} ${M}; box-sizing: border-box; }`)})}),define(se[890],oe([1,0,11,16,21,140,655,15,116,260,360]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.AutoFixAction=e.FixAllAction=e.OrganizeImportsAction=e.SourceAction=e.RefactorAction=e.CodeActionCommand=e.QuickFixAction=void 0;function a(l){return p.ContextKeyExpr.regex(b.SUPPORTED_CODE_ACTIONS.keys()[0],new RegExp(\"(\\\\s|^)\"+(0,L.escapeRegExpCharacters)(l.value)+\"\\\\b\"))}const i={type:\"object\",defaultSnippets:[{body:{kind:\"\"}}],properties:{kind:{type:\"string\",description:S.localize(0,null)},apply:{type:\"string\",description:S.localize(1,null),default:\"ifSingle\",enum:[\"first\",\"ifSingle\",\"never\"],enumDescriptions:[S.localize(2,null),S.localize(3,null),S.localize(4,null)]},preferred:{type:\"boolean\",default:!1,description:S.localize(5,null)}}};function n(l,o,g,h,m=_.CodeActionTriggerSource.Default){if(l.hasModel()){const C=v.CodeActionController.get(l);C?.manualTriggerAtCurrentPosition(o,m,g,h)}}class t extends k.EditorAction{constructor(){super({id:E.quickFixCommandId,label:S.localize(6,null),alias:\"Quick Fix...\",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,y.EditorContextKeys.hasCodeActionsProvider),kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:2137,weight:100}})}run(o,g){return n(g,S.localize(7,null),void 0,void 0,_.CodeActionTriggerSource.QuickFix)}}e.QuickFixAction=t;class r extends k.EditorCommand{constructor(){super({id:E.codeActionCommandId,precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,y.EditorContextKeys.hasCodeActionsProvider),metadata:{description:\"Trigger a code action\",args:[{name:\"args\",schema:i}]}})}runEditorCommand(o,g,h){const m=_.CodeActionCommandArgs.fromUser(h,{kind:_.CodeActionKind.Empty,apply:\"ifSingle\"});return n(g,typeof h?.kind==\"string\"?m.preferred?S.localize(8,null,h.kind):S.localize(9,null,h.kind):m.preferred?S.localize(10,null):S.localize(11,null),{include:m.kind,includeSourceActions:!0,onlyIncludePreferredActions:m.preferred},m.apply)}}e.CodeActionCommand=r;class u extends k.EditorAction{constructor(){super({id:E.refactorCommandId,label:S.localize(12,null),alias:\"Refactor...\",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,y.EditorContextKeys.hasCodeActionsProvider),kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:3120,mac:{primary:1328},weight:100},contextMenuOpts:{group:\"1_modification\",order:2,when:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.Refactor))},metadata:{description:\"Refactor...\",args:[{name:\"args\",schema:i}]}})}run(o,g,h){const m=_.CodeActionCommandArgs.fromUser(h,{kind:_.CodeActionKind.Refactor,apply:\"never\"});return n(g,typeof h?.kind==\"string\"?m.preferred?S.localize(13,null,h.kind):S.localize(14,null,h.kind):m.preferred?S.localize(15,null):S.localize(16,null),{include:_.CodeActionKind.Refactor.contains(m.kind)?m.kind:_.CodeActionKind.None,onlyIncludePreferredActions:m.preferred},m.apply,_.CodeActionTriggerSource.Refactor)}}e.RefactorAction=u;class f extends k.EditorAction{constructor(){super({id:E.sourceActionCommandId,label:S.localize(17,null),alias:\"Source Action...\",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,y.EditorContextKeys.hasCodeActionsProvider),contextMenuOpts:{group:\"1_modification\",order:2.1,when:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.Source))},metadata:{description:\"Source Action...\",args:[{name:\"args\",schema:i}]}})}run(o,g,h){const m=_.CodeActionCommandArgs.fromUser(h,{kind:_.CodeActionKind.Source,apply:\"never\"});return n(g,typeof h?.kind==\"string\"?m.preferred?S.localize(18,null,h.kind):S.localize(19,null,h.kind):m.preferred?S.localize(20,null):S.localize(21,null),{include:_.CodeActionKind.Source.contains(m.kind)?m.kind:_.CodeActionKind.None,includeSourceActions:!0,onlyIncludePreferredActions:m.preferred},m.apply,_.CodeActionTriggerSource.SourceAction)}}e.SourceAction=f;class c extends k.EditorAction{constructor(){super({id:E.organizeImportsCommandId,label:S.localize(22,null),alias:\"Organize Imports\",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.SourceOrganizeImports)),kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:1581,weight:100}})}run(o,g){return n(g,S.localize(23,null),{include:_.CodeActionKind.SourceOrganizeImports,includeSourceActions:!0},\"ifSingle\",_.CodeActionTriggerSource.OrganizeImports)}}e.OrganizeImportsAction=c;class d extends k.EditorAction{constructor(){super({id:E.fixAllCommandId,label:S.localize(24,null),alias:\"Fix All\",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.SourceFixAll))})}run(o,g){return n(g,S.localize(25,null),{include:_.CodeActionKind.SourceFixAll,includeSourceActions:!0},\"ifSingle\",_.CodeActionTriggerSource.FixAll)}}e.FixAllAction=d;class s extends k.EditorAction{constructor(){super({id:E.autoFixCommandId,label:S.localize(26,null),alias:\"Auto Fix...\",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.QuickFix)),kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:1625,mac:{primary:2649},weight:100}})}run(o,g){return n(g,S.localize(27,null),{include:_.CodeActionKind.QuickFix,onlyIncludePreferredActions:!0},\"ifSingle\",_.CodeActionTriggerSource.AutoFix)}}e.AutoFixAction=s}),define(se[891],oe([1,0,16,246,890,260,361,656,98,37]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),(0,L.registerEditorContribution)(E.CodeActionController.ID,E.CodeActionController,3),(0,L.registerEditorContribution)(S.LightBulbWidget.ID,S.LightBulbWidget,4),(0,L.registerEditorAction)(y.QuickFixAction),(0,L.registerEditorAction)(y.RefactorAction),(0,L.registerEditorAction)(y.SourceAction),(0,L.registerEditorAction)(y.OrganizeImportsAction),(0,L.registerEditorAction)(y.AutoFixAction),(0,L.registerEditorAction)(y.FixAllAction),(0,L.registerEditorCommand)(new y.CodeActionCommand),v.Registry.as(_.Extensions.Configuration).registerConfiguration({...k.editorConfigurationBaseNode,properties:{\"editor.codeActionWidget.showHeaders\":{type:\"boolean\",scope:5,description:p.localize(0,null),default:!0}}}),v.Registry.as(_.Extensions.Configuration).registerConfiguration({...k.editorConfigurationBaseNode,properties:{\"editor.codeActionWidget.includeNearbyQuickFixes\":{type:\"boolean\",scope:5,description:p.localize(1,null),default:!0}}})}),define(se[892],oe([1,0,7,118,5,38,456]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CodeLensWidget=e.CodeLensHelper=void 0;class S{constructor(i,n,t){this.afterColumn=1073741824,this.afterLineNumber=i,this.heightInPx=n,this._onHeight=t,this.suppressMouseDown=!0,this.domNode=document.createElement(\"div\")}onComputedHeight(i){this._lastHeight===void 0?this._lastHeight=i:this._lastHeight!==i&&(this._lastHeight=i,this._onHeight())}isVisible(){return this._lastHeight!==0&&this.domNode.hasAttribute(\"monaco-visible-view-zone\")}}class p{constructor(i,n){this.allowEditorOverflow=!1,this.suppressMouseDown=!0,this._commands=new Map,this._isEmpty=!0,this._editor=i,this._id=`codelens.widget-${p._idPool++}`,this.updatePosition(n),this._domNode=document.createElement(\"span\"),this._domNode.className=\"codelens-decoration\"}withCommands(i,n){this._commands.clear();const t=[];let r=!1;for(let u=0;u<i.length;u++){const f=i[u];if(f&&(r=!0,f.command)){const c=(0,k.renderLabelWithIcons)(f.command.title.trim());if(f.command.id){const d=`c${p._idPool++}`;t.push(L.$(\"a\",{id:d,title:f.command.tooltip,role:\"button\"},...c)),this._commands.set(d,f.command)}else t.push(L.$(\"span\",{title:f.command.tooltip},...c));u+1<i.length&&t.push(L.$(\"span\",void 0,\"\\xA0|\\xA0\"))}}r?(L.reset(this._domNode,...t),this._isEmpty&&n&&this._domNode.classList.add(\"fadein\"),this._isEmpty=!1):L.reset(this._domNode,L.$(\"span\",void 0,\"no commands\"))}getCommand(i){return i.parentElement===this._domNode?this._commands.get(i.id):void 0}getId(){return this._id}getDomNode(){return this._domNode}updatePosition(i){const n=this._editor.getModel().getLineFirstNonWhitespaceColumn(i);this._widgetPosition={position:{lineNumber:i,column:n},preference:[1]}}getPosition(){return this._widgetPosition||null}}p._idPool=0;class _{constructor(){this._removeDecorations=[],this._addDecorations=[],this._addDecorationsCallbacks=[]}addDecoration(i,n){this._addDecorations.push(i),this._addDecorationsCallbacks.push(n)}removeDecoration(i){this._removeDecorations.push(i)}commit(i){const n=i.deltaDecorations(this._removeDecorations,this._addDecorations);for(let t=0,r=n.length;t<r;t++)this._addDecorationsCallbacks[t](n[t])}}e.CodeLensHelper=_;const v=E.ModelDecorationOptions.register({collapseOnReplaceEdit:!0,description:\"codelens\"});class b{constructor(i,n,t,r,u,f){this._isDisposed=!1,this._editor=n,this._data=i,this._decorationIds=[];let c;const d=[];this._data.forEach((s,l)=>{s.symbol.command&&d.push(s.symbol),t.addDecoration({range:s.symbol.range,options:v},o=>this._decorationIds[l]=o),c?c=y.Range.plusRange(c,s.symbol.range):c=y.Range.lift(s.symbol.range)}),this._viewZone=new S(c.startLineNumber-1,u,f),this._viewZoneId=r.addZone(this._viewZone),d.length>0&&(this._createContentWidgetIfNecessary(),this._contentWidget.withCommands(d,!1))}_createContentWidgetIfNecessary(){this._contentWidget?this._editor.layoutContentWidget(this._contentWidget):(this._contentWidget=new p(this._editor,this._viewZone.afterLineNumber+1),this._editor.addContentWidget(this._contentWidget))}dispose(i,n){this._decorationIds.forEach(i.removeDecoration,i),this._decorationIds=[],n?.removeZone(this._viewZoneId),this._contentWidget&&(this._editor.removeContentWidget(this._contentWidget),this._contentWidget=void 0),this._isDisposed=!0}isDisposed(){return this._isDisposed}isValid(){return this._decorationIds.some((i,n)=>{const t=this._editor.getModel().getDecorationRange(i),r=this._data[n].symbol;return!!(t&&y.Range.isEmpty(r.range)===t.isEmpty())})}updateCodeLensSymbols(i,n){this._decorationIds.forEach(n.removeDecoration,n),this._decorationIds=[],this._data=i,this._data.forEach((t,r)=>{n.addDecoration({range:t.symbol.range,options:v},u=>this._decorationIds[r]=u)})}updateHeight(i,n){this._viewZone.heightInPx=i,n.layoutZone(this._viewZoneId),this._contentWidget&&this._editor.layoutContentWidget(this._contentWidget)}computeIfNecessary(i){if(!this._viewZone.isVisible())return null;for(let n=0;n<this._decorationIds.length;n++){const t=i.getDecorationRange(this._decorationIds[n]);t&&(this._data[n].symbol.range=t)}return this._data}updateCommands(i){this._createContentWidgetIfNecessary(),this._contentWidget.withCommands(i,!0);for(let n=0;n<this._data.length;n++){const t=i[n];if(t){const{symbol:r}=this._data[n];r.command=t.command||r.command}}}getCommand(i){var n;return(n=this._contentWidget)===null||n===void 0?void 0:n.getCommand(i)}getLineNumber(){const i=this._editor.getModel().getDecorationRange(this._decorationIds[0]);return i?i.startLineNumber:-1}update(i){if(this.isValid()){const n=this._editor.getModel().getDecorationRange(this._decorationIds[0]);n&&(this._viewZone.afterLineNumber=n.startLineNumber-1,i.layoutZone(this._viewZoneId),this._contentWidget&&(this._contentWidget.updatePosition(n.startLineNumber),this._editor.layoutContentWidget(this._contentWidget)))}}}e.CodeLensWidget=b}),define(se[893],oe([1,0,14,12,2,127,16,36,21,343,805,892,660,25,50,70,79,18]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.CodeLensContribution=void 0;let c=class{constructor(s,l,o,g,h,m){this._editor=s,this._languageFeaturesService=l,this._commandService=g,this._notificationService=h,this._codeLensCache=m,this._disposables=new y.DisposableStore,this._localToDispose=new y.DisposableStore,this._lenses=[],this._oldCodeLensModels=new y.DisposableStore,this._provideCodeLensDebounce=o.for(l.codeLensProvider,\"CodeLensProvide\",{min:250}),this._resolveCodeLensesDebounce=o.for(l.codeLensProvider,\"CodeLensResolve\",{min:250,salt:\"resolve\"}),this._resolveCodeLensesScheduler=new L.RunOnceScheduler(()=>this._resolveCodeLensesInViewport(),this._resolveCodeLensesDebounce.default()),this._disposables.add(this._editor.onDidChangeModel(()=>this._onModelChange())),this._disposables.add(this._editor.onDidChangeModelLanguage(()=>this._onModelChange())),this._disposables.add(this._editor.onDidChangeConfiguration(C=>{(C.hasChanged(50)||C.hasChanged(19)||C.hasChanged(18))&&this._updateLensStyle(),C.hasChanged(17)&&this._onModelChange()})),this._disposables.add(l.codeLensProvider.onDidChange(this._onModelChange,this)),this._onModelChange(),this._updateLensStyle()}dispose(){var s;this._localDispose(),this._disposables.dispose(),this._oldCodeLensModels.dispose(),(s=this._currentCodeLensModel)===null||s===void 0||s.dispose()}_getLayoutInfo(){const s=Math.max(1.3,this._editor.getOption(66)/this._editor.getOption(52));let l=this._editor.getOption(19);return(!l||l<5)&&(l=this._editor.getOption(52)*.9|0),{fontSize:l,codeLensHeight:l*s|0}}_updateLensStyle(){const{codeLensHeight:s,fontSize:l}=this._getLayoutInfo(),o=this._editor.getOption(18),g=this._editor.getOption(50),{style:h}=this._editor.getContainerDomNode();h.setProperty(\"--vscode-editorCodeLens-lineHeight\",`${s}px`),h.setProperty(\"--vscode-editorCodeLens-fontSize\",`${l}px`),h.setProperty(\"--vscode-editorCodeLens-fontFeatureSettings\",g.fontFeatureSettings),o&&(h.setProperty(\"--vscode-editorCodeLens-fontFamily\",o),h.setProperty(\"--vscode-editorCodeLens-fontFamilyDefault\",p.EDITOR_FONT_DEFAULTS.fontFamily)),this._editor.changeViewZones(m=>{for(const C of this._lenses)C.updateHeight(s,m)})}_localDispose(){var s,l,o;(s=this._getCodeLensModelPromise)===null||s===void 0||s.cancel(),this._getCodeLensModelPromise=void 0,(l=this._resolveCodeLensesPromise)===null||l===void 0||l.cancel(),this._resolveCodeLensesPromise=void 0,this._localToDispose.clear(),this._oldCodeLensModels.clear(),(o=this._currentCodeLensModel)===null||o===void 0||o.dispose()}_onModelChange(){this._localDispose();const s=this._editor.getModel();if(!s||!this._editor.getOption(17)||s.isTooLargeForTokenization())return;const l=this._codeLensCache.get(s);if(l&&this._renderCodeLensSymbols(l),!this._languageFeaturesService.codeLensProvider.has(s)){l&&(0,L.disposableTimeout)(()=>{const g=this._codeLensCache.get(s);l===g&&(this._codeLensCache.delete(s),this._onModelChange())},30*1e3,this._localToDispose);return}for(const g of this._languageFeaturesService.codeLensProvider.all(s))if(typeof g.onDidChange==\"function\"){const h=g.onDidChange(()=>o.schedule());this._localToDispose.add(h)}const o=new L.RunOnceScheduler(()=>{var g;const h=Date.now();(g=this._getCodeLensModelPromise)===null||g===void 0||g.cancel(),this._getCodeLensModelPromise=(0,L.createCancelablePromise)(m=>(0,v.getCodeLensModel)(this._languageFeaturesService.codeLensProvider,s,m)),this._getCodeLensModelPromise.then(m=>{this._currentCodeLensModel&&this._oldCodeLensModels.add(this._currentCodeLensModel),this._currentCodeLensModel=m,this._codeLensCache.put(s,m);const C=this._provideCodeLensDebounce.update(s,Date.now()-h);o.delay=C,this._renderCodeLensSymbols(m),this._resolveCodeLensesInViewportSoon()},k.onUnexpectedError)},this._provideCodeLensDebounce.get(s));this._localToDispose.add(o),this._localToDispose.add((0,y.toDisposable)(()=>this._resolveCodeLensesScheduler.cancel())),this._localToDispose.add(this._editor.onDidChangeModelContent(()=>{var g;this._editor.changeDecorations(h=>{this._editor.changeViewZones(m=>{const C=[];let w=-1;this._lenses.forEach(I=>{!I.isValid()||w===I.getLineNumber()?C.push(I):(I.update(m),w=I.getLineNumber())});const D=new a.CodeLensHelper;C.forEach(I=>{I.dispose(D,m),this._lenses.splice(this._lenses.indexOf(I),1)}),D.commit(h)})}),o.schedule(),this._resolveCodeLensesScheduler.cancel(),(g=this._resolveCodeLensesPromise)===null||g===void 0||g.cancel(),this._resolveCodeLensesPromise=void 0})),this._localToDispose.add(this._editor.onDidFocusEditorWidget(()=>{o.schedule()})),this._localToDispose.add(this._editor.onDidBlurEditorText(()=>{o.cancel()})),this._localToDispose.add(this._editor.onDidScrollChange(g=>{g.scrollTopChanged&&this._lenses.length>0&&this._resolveCodeLensesInViewportSoon()})),this._localToDispose.add(this._editor.onDidLayoutChange(()=>{this._resolveCodeLensesInViewportSoon()})),this._localToDispose.add((0,y.toDisposable)(()=>{if(this._editor.getModel()){const g=E.StableEditorScrollState.capture(this._editor);this._editor.changeDecorations(h=>{this._editor.changeViewZones(m=>{this._disposeAllLenses(h,m)})}),g.restore(this._editor)}else this._disposeAllLenses(void 0,void 0)})),this._localToDispose.add(this._editor.onMouseDown(g=>{if(g.target.type!==9)return;let h=g.target.element;if(h?.tagName===\"SPAN\"&&(h=h.parentElement),h?.tagName===\"A\")for(const m of this._lenses){const C=m.getCommand(h);if(C){this._commandService.executeCommand(C.id,...C.arguments||[]).catch(w=>this._notificationService.error(w));break}}})),o.schedule()}_disposeAllLenses(s,l){const o=new a.CodeLensHelper;for(const g of this._lenses)g.dispose(o,l);s&&o.commit(s),this._lenses.length=0}_renderCodeLensSymbols(s){if(!this._editor.hasModel())return;const l=this._editor.getModel().getLineCount(),o=[];let g;for(const C of s.lenses){const w=C.symbol.range.startLineNumber;w<1||w>l||(g&&g[g.length-1].symbol.range.startLineNumber===w?g.push(C):(g=[C],o.push(g)))}if(!o.length&&!this._lenses.length)return;const h=E.StableEditorScrollState.capture(this._editor),m=this._getLayoutInfo();this._editor.changeDecorations(C=>{this._editor.changeViewZones(w=>{const D=new a.CodeLensHelper;let I=0,T=0;for(;T<o.length&&I<this._lenses.length;){const A=o[T][0].symbol.range.startLineNumber,P=this._lenses[I].getLineNumber();P<A?(this._lenses[I].dispose(D,w),this._lenses.splice(I,1)):P===A?(this._lenses[I].updateCodeLensSymbols(o[T],D),T++,I++):(this._lenses.splice(I,0,new a.CodeLensWidget(o[T],this._editor,D,w,m.codeLensHeight,()=>this._resolveCodeLensesInViewportSoon())),I++,T++)}for(;I<this._lenses.length;)this._lenses[I].dispose(D,w),this._lenses.splice(I,1);for(;T<o.length;)this._lenses.push(new a.CodeLensWidget(o[T],this._editor,D,w,m.codeLensHeight,()=>this._resolveCodeLensesInViewportSoon())),T++;D.commit(C)})}),h.restore(this._editor)}_resolveCodeLensesInViewportSoon(){this._editor.getModel()&&this._resolveCodeLensesScheduler.schedule()}_resolveCodeLensesInViewport(){var s;(s=this._resolveCodeLensesPromise)===null||s===void 0||s.cancel(),this._resolveCodeLensesPromise=void 0;const l=this._editor.getModel();if(!l)return;const o=[],g=[];if(this._lenses.forEach(C=>{const w=C.computeIfNecessary(l);w&&(o.push(w),g.push(C))}),o.length===0)return;const h=Date.now(),m=(0,L.createCancelablePromise)(C=>{const w=o.map((D,I)=>{const T=new Array(D.length),A=D.map((P,N)=>!P.symbol.command&&typeof P.provider.resolveCodeLens==\"function\"?Promise.resolve(P.provider.resolveCodeLens(l,P.symbol,C)).then(M=>{T[N]=M},k.onUnexpectedExternalError):(T[N]=P.symbol,Promise.resolve(void 0)));return Promise.all(A).then(()=>{!C.isCancellationRequested&&!g[I].isDisposed()&&g[I].updateCommands(T)})});return Promise.all(w)});this._resolveCodeLensesPromise=m,this._resolveCodeLensesPromise.then(()=>{const C=this._resolveCodeLensesDebounce.update(l,Date.now()-h);this._resolveCodeLensesScheduler.delay=C,this._currentCodeLensModel&&this._codeLensCache.put(l,this._currentCodeLensModel),this._oldCodeLensModels.clear(),m===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)},C=>{(0,k.onUnexpectedError)(C),m===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)})}async getModel(){var s;return await this._getCodeLensModelPromise,await this._resolveCodeLensesPromise,!((s=this._currentCodeLensModel)===null||s===void 0)&&s.isDisposed?void 0:this._currentCodeLensModel}};e.CodeLensContribution=c,c.ID=\"css.editor.codeLens\",e.CodeLensContribution=c=ke([ge(1,f.ILanguageFeaturesService),ge(2,u.ILanguageFeatureDebounceService),ge(3,n.ICommandService),ge(4,t.INotificationService),ge(5,b.ICodeLensCache)],c),(0,S.registerEditorContribution)(c.ID,c,1),(0,S.registerEditorAction)(class extends S.EditorAction{constructor(){super({id:\"codelens.showLensesInCurrentLine\",precondition:_.EditorContextKeys.hasCodeLensProvider,label:(0,i.localize)(0,null),alias:\"Show CodeLens Commands For Current Line\"})}async run(s,l){if(!l.hasModel())return;const o=s.get(r.IQuickInputService),g=s.get(n.ICommandService),h=s.get(t.INotificationService),m=l.getSelection().positionLineNumber,C=l.getContribution(c.ID);if(!C)return;const w=await C.getModel();if(!w)return;const D=[];for(const A of w.lenses)A.symbol.command&&A.symbol.range.startLineNumber===m&&D.push({label:A.symbol.command.title,command:A.symbol.command});if(D.length===0)return;const I=await o.pick(D,{canPickMany:!1,placeHolder:(0,i.localize)(1,null)});if(!I)return;let T=I.command;if(w.isDisposed){const A=await C.getModel(),P=A?.lenses.find(N=>{var M;return N.symbol.range.startLineNumber===m&&((M=N.symbol.command)===null||M===void 0?void 0:M.title)===T.title});if(!P||!P.symbol.command)return;T=P.symbol.command}try{await g.executeCommand(T.id,...T.arguments||[])}catch(A){h.error(A)}}})}),define(se[375],oe([1,0,14,39,12,6,2,61,11,167,16,5,38,79,18,354,27]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";var f;Object.defineProperty(e,\"__esModule\",{value:!0}),e.DecoratorLimitReporter=e.ColorDetector=e.ColorDecorationInjectedTextMarker=void 0,e.ColorDecorationInjectedTextMarker=Object.create({});let c=f=class extends S.Disposable{constructor(l,o,g,h){super(),this._editor=l,this._configurationService=o,this._languageFeaturesService=g,this._localToDispose=this._register(new S.DisposableStore),this._decorationsIds=[],this._colorDatas=new Map,this._colorDecoratorIds=this._editor.createDecorationsCollection(),this._ruleFactory=new v.DynamicCssRules(this._editor),this._decoratorLimitReporter=new d,this._colorDecorationClassRefs=this._register(new S.DisposableStore),this._debounceInformation=h.for(g.colorProvider,\"Document Colors\",{min:f.RECOMPUTE_TIME}),this._register(l.onDidChangeModel(()=>{this._isColorDecoratorsEnabled=this.isEnabled(),this.updateColors()})),this._register(l.onDidChangeModelLanguage(()=>this.updateColors())),this._register(g.colorProvider.onDidChange(()=>this.updateColors())),this._register(l.onDidChangeConfiguration(m=>{const C=this._isColorDecoratorsEnabled;this._isColorDecoratorsEnabled=this.isEnabled(),this._isDefaultColorDecoratorsEnabled=this._editor.getOption(145);const w=C!==this._isColorDecoratorsEnabled||m.hasChanged(21),D=m.hasChanged(145);(w||D)&&(this._isColorDecoratorsEnabled?this.updateColors():this.removeAllDecorations())})),this._timeoutTimer=null,this._computePromise=null,this._isColorDecoratorsEnabled=this.isEnabled(),this._isDefaultColorDecoratorsEnabled=this._editor.getOption(145),this.updateColors()}isEnabled(){const l=this._editor.getModel();if(!l)return!1;const o=l.getLanguageId(),g=this._configurationService.getValue(o);if(g&&typeof g==\"object\"){const h=g.colorDecorators;if(h&&h.enable!==void 0&&!h.enable)return h.enable}return this._editor.getOption(20)}static get(l){return l.getContribution(this.ID)}dispose(){this.stop(),this.removeAllDecorations(),super.dispose()}updateColors(){if(this.stop(),!this._isColorDecoratorsEnabled)return;const l=this._editor.getModel();!l||!this._languageFeaturesService.colorProvider.has(l)||(this._localToDispose.add(this._editor.onDidChangeModelContent(()=>{this._timeoutTimer||(this._timeoutTimer=new L.TimeoutTimer,this._timeoutTimer.cancelAndSet(()=>{this._timeoutTimer=null,this.beginCompute()},this._debounceInformation.get(l)))})),this.beginCompute())}async beginCompute(){this._computePromise=(0,L.createCancelablePromise)(async l=>{const o=this._editor.getModel();if(!o)return[];const g=new p.StopWatch(!1),h=await(0,r.getColors)(this._languageFeaturesService.colorProvider,o,l,this._isDefaultColorDecoratorsEnabled);return this._debounceInformation.update(o,g.elapsed()),h});try{const l=await this._computePromise;this.updateDecorations(l),this.updateColorDecorators(l),this._computePromise=null}catch(l){(0,y.onUnexpectedError)(l)}}stop(){this._timeoutTimer&&(this._timeoutTimer.cancel(),this._timeoutTimer=null),this._computePromise&&(this._computePromise.cancel(),this._computePromise=null),this._localToDispose.clear()}updateDecorations(l){const o=l.map(g=>({range:{startLineNumber:g.colorInfo.range.startLineNumber,startColumn:g.colorInfo.range.startColumn,endLineNumber:g.colorInfo.range.endLineNumber,endColumn:g.colorInfo.range.endColumn},options:i.ModelDecorationOptions.EMPTY}));this._editor.changeDecorations(g=>{this._decorationsIds=g.deltaDecorations(this._decorationsIds,o),this._colorDatas=new Map,this._decorationsIds.forEach((h,m)=>this._colorDatas.set(h,l[m]))})}updateColorDecorators(l){this._colorDecorationClassRefs.clear();const o=[],g=this._editor.getOption(21);for(let m=0;m<l.length&&o.length<g;m++){const{red:C,green:w,blue:D,alpha:I}=l[m].colorInfo.color,T=new k.RGBA(Math.round(C*255),Math.round(w*255),Math.round(D*255),I),A=`rgba(${T.r}, ${T.g}, ${T.b}, ${T.a})`,P=this._colorDecorationClassRefs.add(this._ruleFactory.createClassNameRef({backgroundColor:A}));o.push({range:{startLineNumber:l[m].colorInfo.range.startLineNumber,startColumn:l[m].colorInfo.range.startColumn,endLineNumber:l[m].colorInfo.range.endLineNumber,endColumn:l[m].colorInfo.range.endColumn},options:{description:\"colorDetector\",before:{content:_.noBreakWhitespace,inlineClassName:`${P.className} colorpicker-color-decoration`,inlineClassNameAffectsLetterSpacing:!0,attachedData:e.ColorDecorationInjectedTextMarker}}})}const h=g<l.length?g:!1;this._decoratorLimitReporter.update(l.length,h),this._colorDecoratorIds.set(o)}removeAllDecorations(){this._editor.removeDecorations(this._decorationsIds),this._decorationsIds=[],this._colorDecoratorIds.clear(),this._colorDecorationClassRefs.clear()}getColorData(l){const o=this._editor.getModel();if(!o)return null;const g=o.getDecorationsInRange(a.Range.fromPositions(l,l)).filter(h=>this._colorDatas.has(h.id));return g.length===0?null:this._colorDatas.get(g[0].id)}isColorDecoration(l){return this._colorDecoratorIds.has(l)}};e.ColorDetector=c,c.ID=\"editor.contrib.colorDetector\",c.RECOMPUTE_TIME=1e3,e.ColorDetector=c=f=ke([ge(1,u.IConfigurationService),ge(2,t.ILanguageFeaturesService),ge(3,n.ILanguageFeatureDebounceService)],c);class d{constructor(){this._onDidChange=new E.Emitter,this._computed=0,this._limited=!1}update(l,o){(l!==this._computed||o!==this._limited)&&(this._computed=l,this._limited=o,this._onDidChange.fire())}}e.DecoratorLimitReporter=d,(0,b.registerEditorContribution)(c.ID,c,1)}),define(se[376],oe([1,0,14,19,39,2,5,354,375,553,842,23,7]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StandaloneColorPickerParticipant=e.StandaloneColorPickerHover=e.ColorHoverParticipant=e.ColorHover=void 0;class n{constructor(o,g,h,m){this.owner=o,this.range=g,this.model=h,this.provider=m,this.forceShowAtRange=!0}isValidForHoverAnchor(o){return o.type===1&&this.range.startColumn<=o.range.startColumn&&this.range.endColumn>=o.range.endColumn}}e.ColorHover=n;let t=class{constructor(o,g){this._editor=o,this._themeService=g,this.hoverOrdinal=2}computeSync(o,g){return[]}computeAsync(o,g,h){return L.AsyncIterableObject.fromPromise(this._computeAsync(o,g,h))}async _computeAsync(o,g,h){if(!this._editor.hasModel())return[];const m=_.ColorDetector.get(this._editor);if(!m)return[];for(const C of g){if(!m.isColorDecoration(C))continue;const w=m.getColorData(C.range.getStartPosition());if(w)return[await f(this,this._editor.getModel(),w.colorInfo,w.provider)]}return[]}renderHoverParts(o,g){return c(this,this._editor,this._themeService,g,o)}};e.ColorHoverParticipant=t,e.ColorHoverParticipant=t=ke([ge(1,a.IThemeService)],t);class r{constructor(o,g,h,m){this.owner=o,this.range=g,this.model=h,this.provider=m}}e.StandaloneColorPickerHover=r;let u=class{constructor(o,g){this._editor=o,this._themeService=g,this._color=null}async createColorHover(o,g,h){if(!this._editor.hasModel()||!_.ColorDetector.get(this._editor))return null;const C=await(0,p.getColors)(h,this._editor.getModel(),k.CancellationToken.None);let w=null,D=null;for(const P of C){const N=P.colorInfo;S.Range.containsRange(N.range,o.range)&&(w=N,D=P.provider)}const I=w??o,T=D??g,A=!!w;return{colorHover:await f(this,this._editor.getModel(),I,T),foundInEditor:A}}async updateEditorModel(o){if(!this._editor.hasModel())return;const g=o.model;let h=new S.Range(o.range.startLineNumber,o.range.startColumn,o.range.endLineNumber,o.range.endColumn);this._color&&(await s(this._editor.getModel(),g,this._color,h,o),h=d(this._editor,h,g))}renderHoverParts(o,g){return c(this,this._editor,this._themeService,g,o)}set color(o){this._color=o}get color(){return this._color}};e.StandaloneColorPickerParticipant=u,e.StandaloneColorPickerParticipant=u=ke([ge(1,a.IThemeService)],u);async function f(l,o,g,h){const m=o.getValueInRange(g.range),{red:C,green:w,blue:D,alpha:I}=g.color,T=new y.RGBA(Math.round(C*255),Math.round(w*255),Math.round(D*255),I),A=new y.Color(T),P=await(0,p.getColorPresentations)(o,g,h,k.CancellationToken.None),N=new v.ColorPickerModel(A,[],0);return N.colorPresentations=P||[],N.guessColorPresentation(A,m),l instanceof t?new n(l,S.Range.lift(g.range),N,h):new r(l,S.Range.lift(g.range),N,h)}function c(l,o,g,h,m){if(h.length===0||!o.hasModel())return E.Disposable.None;if(m.setMinimumDimensions){const N=o.getOption(66)+8;m.setMinimumDimensions(new i.Dimension(302,N))}const C=new E.DisposableStore,w=h[0],D=o.getModel(),I=w.model,T=C.add(new b.ColorPickerWidget(m.fragment,I,o.getOption(141),g,l instanceof u));m.setColorPicker(T);let A=!1,P=new S.Range(w.range.startLineNumber,w.range.startColumn,w.range.endLineNumber,w.range.endColumn);if(l instanceof u){const N=h[0].model.color;l.color=N,s(D,I,N,P,w),C.add(I.onColorFlushed(M=>{l.color=M}))}else C.add(I.onColorFlushed(async N=>{await s(D,I,N,P,w),A=!0,P=d(o,P,I)}));return C.add(I.onDidChangeColor(N=>{s(D,I,N,P,w)})),C.add(o.onDidChangeModelContent(N=>{A?A=!1:(m.hide(),o.focus())})),C}function d(l,o,g){var h,m;const C=[],w=(h=g.presentation.textEdit)!==null&&h!==void 0?h:{range:o,text:g.presentation.label,forceMoveMarkers:!1};C.push(w),g.presentation.additionalTextEdits&&C.push(...g.presentation.additionalTextEdits);const D=S.Range.lift(w.range),I=l.getModel()._setTrackedRange(null,D,3);return l.executeEdits(\"colorpicker\",C),l.pushUndoStop(),(m=l.getModel()._getTrackedRange(I))!==null&&m!==void 0?m:D}async function s(l,o,g,h,m){const C=await(0,p.getColorPresentations)(l,{range:h,color:{red:g.rgba.r/255,green:g.rgba.g/255,blue:g.rgba.b/255,alpha:g.rgba.a}},m.provider,k.CancellationToken.None);o.colorPresentations=C||[]}}),define(se[894],oe([1,0,2,17,16,10,5,24,38,555,457]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DragAndDropController=void 0;function b(i){return k.isMacintosh?i.altKey:i.ctrlKey}class a extends L.Disposable{constructor(n){super(),this._editor=n,this._dndDecorationIds=this._editor.createDecorationsCollection(),this._register(this._editor.onMouseDown(t=>this._onEditorMouseDown(t))),this._register(this._editor.onMouseUp(t=>this._onEditorMouseUp(t))),this._register(this._editor.onMouseDrag(t=>this._onEditorMouseDrag(t))),this._register(this._editor.onMouseDrop(t=>this._onEditorMouseDrop(t))),this._register(this._editor.onMouseDropCanceled(()=>this._onEditorMouseDropCanceled())),this._register(this._editor.onKeyDown(t=>this.onEditorKeyDown(t))),this._register(this._editor.onKeyUp(t=>this.onEditorKeyUp(t))),this._register(this._editor.onDidBlurEditorWidget(()=>this.onEditorBlur())),this._register(this._editor.onDidBlurEditorText(()=>this.onEditorBlur())),this._mouseDown=!1,this._modifierPressed=!1,this._dragSelection=null}onEditorBlur(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1}onEditorKeyDown(n){!this._editor.getOption(35)||this._editor.getOption(22)||(b(n)&&(this._modifierPressed=!0),this._mouseDown&&b(n)&&this._editor.updateOptions({mouseStyle:\"copy\"}))}onEditorKeyUp(n){!this._editor.getOption(35)||this._editor.getOption(22)||(b(n)&&(this._modifierPressed=!1),this._mouseDown&&n.keyCode===a.TRIGGER_KEY_VALUE&&this._editor.updateOptions({mouseStyle:\"default\"}))}_onEditorMouseDown(n){this._mouseDown=!0}_onEditorMouseUp(n){this._mouseDown=!1,this._editor.updateOptions({mouseStyle:\"text\"})}_onEditorMouseDrag(n){const t=n.target;if(this._dragSelection===null){const u=(this._editor.getSelections()||[]).filter(f=>t.position&&f.containsPosition(t.position));if(u.length===1)this._dragSelection=u[0];else return}b(n.event)?this._editor.updateOptions({mouseStyle:\"copy\"}):this._editor.updateOptions({mouseStyle:\"default\"}),t.position&&(this._dragSelection.containsPosition(t.position)?this._removeDecoration():this.showAt(t.position))}_onEditorMouseDropCanceled(){this._editor.updateOptions({mouseStyle:\"text\"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}_onEditorMouseDrop(n){if(n.target&&(this._hitContent(n.target)||this._hitMargin(n.target))&&n.target.position){const t=new E.Position(n.target.position.lineNumber,n.target.position.column);if(this._dragSelection===null){let r=null;if(n.event.shiftKey){const u=this._editor.getSelection();if(u){const{selectionStartLineNumber:f,selectionStartColumn:c}=u;r=[new p.Selection(f,c,t.lineNumber,t.column)]}}else r=(this._editor.getSelections()||[]).map(u=>u.containsPosition(t)?new p.Selection(t.lineNumber,t.column,t.lineNumber,t.column):u);this._editor.setSelections(r||[],\"mouse\",3)}else(!this._dragSelection.containsPosition(t)||(b(n.event)||this._modifierPressed)&&(this._dragSelection.getEndPosition().equals(t)||this._dragSelection.getStartPosition().equals(t)))&&(this._editor.pushUndoStop(),this._editor.executeCommand(a.ID,new v.DragAndDropCommand(this._dragSelection,t,b(n.event)||this._modifierPressed)),this._editor.pushUndoStop())}this._editor.updateOptions({mouseStyle:\"text\"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}showAt(n){this._dndDecorationIds.set([{range:new S.Range(n.lineNumber,n.column,n.lineNumber,n.column),options:a._DECORATION_OPTIONS}]),this._editor.revealPosition(n,1)}_removeDecoration(){this._dndDecorationIds.clear()}_hitContent(n){return n.type===6||n.type===7}_hitMargin(n){return n.type===2||n.type===3||n.type===4}dispose(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1,super.dispose()}}e.DragAndDropController=a,a.ID=\"editor.contrib.dragAndDrop\",a.TRIGGER_KEY_VALUE=k.isMacintosh?6:5,a._DECORATION_OPTIONS=_.ModelDecorationOptions.register({description:\"dnd-target\",className:\"dnd-target\"}),(0,y.registerEditorContribution)(a.ID,a,2)}),define(se[895],oe([1,0,5,41,38,29,23]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindDecorations=void 0;class p{constructor(v){this._editor=v,this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null,this._startPosition=this._editor.getPosition()}dispose(){this._editor.removeDecorations(this._allDecorations()),this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null}reset(){this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null}getCount(){return this._decorations.length}getFindScope(){return this._findScopeDecorationIds[0]?this._editor.getModel().getDecorationRange(this._findScopeDecorationIds[0]):null}getFindScopes(){if(this._findScopeDecorationIds.length){const v=this._findScopeDecorationIds.map(b=>this._editor.getModel().getDecorationRange(b)).filter(b=>!!b);if(v.length)return v}return null}getStartPosition(){return this._startPosition}setStartPosition(v){this._startPosition=v,this.setCurrentFindMatch(null)}_getDecorationIndex(v){const b=this._decorations.indexOf(v);return b>=0?b+1:1}getDecorationRangeAt(v){const b=v<this._decorations.length?this._decorations[v]:null;return b?this._editor.getModel().getDecorationRange(b):null}getCurrentMatchesPosition(v){const b=this._editor.getModel().getDecorationsInRange(v);for(const a of b){const i=a.options;if(i===p._FIND_MATCH_DECORATION||i===p._CURRENT_FIND_MATCH_DECORATION)return this._getDecorationIndex(a.id)}return 0}setCurrentFindMatch(v){let b=null,a=0;if(v)for(let i=0,n=this._decorations.length;i<n;i++){const t=this._editor.getModel().getDecorationRange(this._decorations[i]);if(v.equalsRange(t)){b=this._decorations[i],a=i+1;break}}return(this._highlightedDecorationId!==null||b!==null)&&this._editor.changeDecorations(i=>{if(this._highlightedDecorationId!==null&&(i.changeDecorationOptions(this._highlightedDecorationId,p._FIND_MATCH_DECORATION),this._highlightedDecorationId=null),b!==null&&(this._highlightedDecorationId=b,i.changeDecorationOptions(this._highlightedDecorationId,p._CURRENT_FIND_MATCH_DECORATION)),this._rangeHighlightDecorationId!==null&&(i.removeDecoration(this._rangeHighlightDecorationId),this._rangeHighlightDecorationId=null),b!==null){let n=this._editor.getModel().getDecorationRange(b);if(n.startLineNumber!==n.endLineNumber&&n.endColumn===1){const t=n.endLineNumber-1,r=this._editor.getModel().getLineMaxColumn(t);n=new L.Range(n.startLineNumber,n.startColumn,t,r)}this._rangeHighlightDecorationId=i.addDecoration(n,p._RANGE_HIGHLIGHT_DECORATION)}}),a}set(v,b){this._editor.changeDecorations(a=>{let i=p._FIND_MATCH_DECORATION;const n=[];if(v.length>1e3){i=p._FIND_MATCH_NO_OVERVIEW_DECORATION;const r=this._editor.getModel().getLineCount(),f=this._editor.getLayoutInfo().height/r,c=Math.max(2,Math.ceil(3/f));let d=v[0].range.startLineNumber,s=v[0].range.endLineNumber;for(let l=1,o=v.length;l<o;l++){const g=v[l].range;s+c>=g.startLineNumber?g.endLineNumber>s&&(s=g.endLineNumber):(n.push({range:new L.Range(d,1,s,1),options:p._FIND_MATCH_ONLY_OVERVIEW_DECORATION}),d=g.startLineNumber,s=g.endLineNumber)}n.push({range:new L.Range(d,1,s,1),options:p._FIND_MATCH_ONLY_OVERVIEW_DECORATION})}const t=new Array(v.length);for(let r=0,u=v.length;r<u;r++)t[r]={range:v[r].range,options:i};this._decorations=a.deltaDecorations(this._decorations,t),this._overviewRulerApproximateDecorations=a.deltaDecorations(this._overviewRulerApproximateDecorations,n),this._rangeHighlightDecorationId&&(a.removeDecoration(this._rangeHighlightDecorationId),this._rangeHighlightDecorationId=null),this._findScopeDecorationIds.length&&(this._findScopeDecorationIds.forEach(r=>a.removeDecoration(r)),this._findScopeDecorationIds=[]),b?.length&&(this._findScopeDecorationIds=b.map(r=>a.addDecoration(r,p._FIND_SCOPE_DECORATION)))})}matchBeforePosition(v){if(this._decorations.length===0)return null;for(let b=this._decorations.length-1;b>=0;b--){const a=this._decorations[b],i=this._editor.getModel().getDecorationRange(a);if(!(!i||i.endLineNumber>v.lineNumber)){if(i.endLineNumber<v.lineNumber)return i;if(!(i.endColumn>v.column))return i}}return this._editor.getModel().getDecorationRange(this._decorations[this._decorations.length-1])}matchAfterPosition(v){if(this._decorations.length===0)return null;for(let b=0,a=this._decorations.length;b<a;b++){const i=this._decorations[b],n=this._editor.getModel().getDecorationRange(i);if(!(!n||n.startLineNumber<v.lineNumber)){if(n.startLineNumber>v.lineNumber)return n;if(!(n.startColumn<v.column))return n}}return this._editor.getModel().getDecorationRange(this._decorations[0])}_allDecorations(){let v=[];return v=v.concat(this._decorations),v=v.concat(this._overviewRulerApproximateDecorations),this._findScopeDecorationIds.length&&v.push(...this._findScopeDecorationIds),this._rangeHighlightDecorationId&&v.push(this._rangeHighlightDecorationId),v}}e.FindDecorations=p,p._CURRENT_FIND_MATCH_DECORATION=y.ModelDecorationOptions.register({description:\"current-find-match\",stickiness:1,zIndex:13,className:\"currentFindMatch\",showIfCollapsed:!0,overviewRuler:{color:(0,S.themeColorFromId)(E.overviewRulerFindMatchForeground),position:k.OverviewRulerLane.Center},minimap:{color:(0,S.themeColorFromId)(E.minimapFindMatch),position:k.MinimapPosition.Inline}}),p._FIND_MATCH_DECORATION=y.ModelDecorationOptions.register({description:\"find-match\",stickiness:1,zIndex:10,className:\"findMatch\",showIfCollapsed:!0,overviewRuler:{color:(0,S.themeColorFromId)(E.overviewRulerFindMatchForeground),position:k.OverviewRulerLane.Center},minimap:{color:(0,S.themeColorFromId)(E.minimapFindMatch),position:k.MinimapPosition.Inline}}),p._FIND_MATCH_NO_OVERVIEW_DECORATION=y.ModelDecorationOptions.register({description:\"find-match-no-overview\",stickiness:1,className:\"findMatch\",showIfCollapsed:!0}),p._FIND_MATCH_ONLY_OVERVIEW_DECORATION=y.ModelDecorationOptions.register({description:\"find-match-only-overview\",stickiness:1,overviewRuler:{color:(0,S.themeColorFromId)(E.overviewRulerFindMatchForeground),position:k.OverviewRulerLane.Center}}),p._RANGE_HIGHLIGHT_DECORATION=y.ModelDecorationOptions.register({description:\"find-range-highlight\",stickiness:1,className:\"rangeHighlight\",isWholeLine:!0}),p._FIND_SCOPE_DECORATION=y.ModelDecorationOptions.register({description:\"find-scope\",className:\"findScope\",isWholeLine:!0})}),define(se[195],oe([1,0,60,14,2,130,10,5,24,184,895,556,557,15]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindModelBoundToEditorModel=e.MATCHES_LIMIT=e.FIND_IDS=e.TogglePreserveCaseKeybinding=e.ToggleSearchScopeKeybinding=e.ToggleRegexKeybinding=e.ToggleWholeWordKeybinding=e.ToggleCaseSensitiveKeybinding=e.CONTEXT_REPLACE_INPUT_FOCUSED=e.CONTEXT_FIND_INPUT_FOCUSED=e.CONTEXT_FIND_WIDGET_NOT_VISIBLE=e.CONTEXT_FIND_WIDGET_VISIBLE=void 0,e.CONTEXT_FIND_WIDGET_VISIBLE=new n.RawContextKey(\"findWidgetVisible\",!1),e.CONTEXT_FIND_WIDGET_NOT_VISIBLE=e.CONTEXT_FIND_WIDGET_VISIBLE.toNegated(),e.CONTEXT_FIND_INPUT_FOCUSED=new n.RawContextKey(\"findInputFocussed\",!1),e.CONTEXT_REPLACE_INPUT_FOCUSED=new n.RawContextKey(\"replaceInputFocussed\",!1),e.ToggleCaseSensitiveKeybinding={primary:545,mac:{primary:2593}},e.ToggleWholeWordKeybinding={primary:565,mac:{primary:2613}},e.ToggleRegexKeybinding={primary:560,mac:{primary:2608}},e.ToggleSearchScopeKeybinding={primary:554,mac:{primary:2602}},e.TogglePreserveCaseKeybinding={primary:558,mac:{primary:2606}},e.FIND_IDS={StartFindAction:\"actions.find\",StartFindWithSelection:\"actions.findWithSelection\",StartFindWithArgs:\"editor.actions.findWithArgs\",NextMatchFindAction:\"editor.action.nextMatchFindAction\",PreviousMatchFindAction:\"editor.action.previousMatchFindAction\",GoToMatchFindAction:\"editor.action.goToMatchFindAction\",NextSelectionMatchFindAction:\"editor.action.nextSelectionMatchFindAction\",PreviousSelectionMatchFindAction:\"editor.action.previousSelectionMatchFindAction\",StartFindReplaceAction:\"editor.action.startFindReplaceAction\",CloseFindWidgetCommand:\"closeFindWidget\",ToggleCaseSensitiveCommand:\"toggleFindCaseSensitive\",ToggleWholeWordCommand:\"toggleFindWholeWord\",ToggleRegexCommand:\"toggleFindRegex\",ToggleSearchScopeCommand:\"toggleFindInSelection\",TogglePreserveCaseCommand:\"togglePreserveCase\",ReplaceOneAction:\"editor.action.replaceOne\",ReplaceAllAction:\"editor.action.replaceAll\",SelectAllMatchesAction:\"editor.action.selectAllMatches\"},e.MATCHES_LIMIT=19999;const t=240;class r{constructor(f,c){this._toDispose=new y.DisposableStore,this._editor=f,this._state=c,this._isDisposed=!1,this._startSearchingTimer=new k.TimeoutTimer,this._decorations=new b.FindDecorations(f),this._toDispose.add(this._decorations),this._updateDecorationsScheduler=new k.RunOnceScheduler(()=>this.research(!1),100),this._toDispose.add(this._updateDecorationsScheduler),this._toDispose.add(this._editor.onDidChangeCursorPosition(d=>{(d.reason===3||d.reason===5||d.reason===6)&&this._decorations.setStartPosition(this._editor.getPosition())})),this._ignoreModelContentChanged=!1,this._toDispose.add(this._editor.onDidChangeModelContent(d=>{this._ignoreModelContentChanged||(d.isFlush&&this._decorations.reset(),this._decorations.setStartPosition(this._editor.getPosition()),this._updateDecorationsScheduler.schedule())})),this._toDispose.add(this._state.onFindReplaceStateChange(d=>this._onStateChanged(d))),this.research(!1,this._state.searchScope)}dispose(){this._isDisposed=!0,(0,y.dispose)(this._startSearchingTimer),this._toDispose.dispose()}_onStateChanged(f){this._isDisposed||this._editor.hasModel()&&(f.searchString||f.isReplaceRevealed||f.isRegex||f.wholeWord||f.matchCase||f.searchScope)&&(this._editor.getModel().isTooLargeForSyncing()?(this._startSearchingTimer.cancel(),this._startSearchingTimer.setIfNotSet(()=>{f.searchScope?this.research(f.moveCursor,this._state.searchScope):this.research(f.moveCursor)},t)):f.searchScope?this.research(f.moveCursor,this._state.searchScope):this.research(f.moveCursor))}static _getSearchRange(f,c){return c||f.getFullModelRange()}research(f,c){let d=null;typeof c<\"u\"?c!==null&&(Array.isArray(c)?d=c:d=[c]):d=this._decorations.getFindScopes(),d!==null&&(d=d.map(g=>{if(g.startLineNumber!==g.endLineNumber){let h=g.endLineNumber;return g.endColumn===1&&(h=h-1),new p.Range(g.startLineNumber,1,h,this._editor.getModel().getLineMaxColumn(h))}return g}));const s=this._findMatches(d,!1,e.MATCHES_LIMIT);this._decorations.set(s,d);const l=this._editor.getSelection();let o=this._decorations.getCurrentMatchesPosition(l);if(o===0&&s.length>0){const g=(0,L.findFirstIdxMonotonousOrArrLen)(s.map(h=>h.range),h=>p.Range.compareRangesUsingStarts(h,l)>=0);o=g>0?g-1+1:o}this._state.changeMatchInfo(o,this._decorations.getCount(),void 0),f&&this._editor.getOption(41).cursorMoveOnType&&this._moveToNextMatch(this._decorations.getStartPosition())}_hasMatches(){return this._state.matchesCount>0}_cannotFind(){if(!this._hasMatches()){const f=this._decorations.getFindScope();return f&&this._editor.revealRangeInCenterIfOutsideViewport(f,0),!0}return!1}_setCurrentFindMatch(f){const c=this._decorations.setCurrentFindMatch(f);this._state.changeMatchInfo(c,this._decorations.getCount(),f),this._editor.setSelection(f),this._editor.revealRangeInCenterIfOutsideViewport(f,0)}_prevSearchPosition(f){const c=this._state.isRegex&&(this._state.searchString.indexOf(\"^\")>=0||this._state.searchString.indexOf(\"$\")>=0);let{lineNumber:d,column:s}=f;const l=this._editor.getModel();return c||s===1?(d===1?d=l.getLineCount():d--,s=l.getLineMaxColumn(d)):s--,new S.Position(d,s)}_moveToPrevMatch(f,c=!1){if(!this._state.canNavigateBack()){const C=this._decorations.matchAfterPosition(f);C&&this._setCurrentFindMatch(C);return}if(this._decorations.getCount()<e.MATCHES_LIMIT){let C=this._decorations.matchBeforePosition(f);C&&C.isEmpty()&&C.getStartPosition().equals(f)&&(f=this._prevSearchPosition(f),C=this._decorations.matchBeforePosition(f)),C&&this._setCurrentFindMatch(C);return}if(this._cannotFind())return;const d=this._decorations.getFindScope(),s=r._getSearchRange(this._editor.getModel(),d);s.getEndPosition().isBefore(f)&&(f=s.getEndPosition()),f.isBefore(s.getStartPosition())&&(f=s.getEndPosition());const{lineNumber:l,column:o}=f,g=this._editor.getModel();let h=new S.Position(l,o),m=g.findPreviousMatch(this._state.searchString,h,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(129):null,!1);if(m&&m.range.isEmpty()&&m.range.getStartPosition().equals(h)&&(h=this._prevSearchPosition(h),m=g.findPreviousMatch(this._state.searchString,h,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(129):null,!1)),!!m){if(!c&&!s.containsRange(m.range))return this._moveToPrevMatch(m.range.getStartPosition(),!0);this._setCurrentFindMatch(m.range)}}moveToPrevMatch(){this._moveToPrevMatch(this._editor.getSelection().getStartPosition())}_nextSearchPosition(f){const c=this._state.isRegex&&(this._state.searchString.indexOf(\"^\")>=0||this._state.searchString.indexOf(\"$\")>=0);let{lineNumber:d,column:s}=f;const l=this._editor.getModel();return c||s===l.getLineMaxColumn(d)?(d===l.getLineCount()?d=1:d++,s=1):s++,new S.Position(d,s)}_moveToNextMatch(f){if(!this._state.canNavigateForward()){const d=this._decorations.matchBeforePosition(f);d&&this._setCurrentFindMatch(d);return}if(this._decorations.getCount()<e.MATCHES_LIMIT){let d=this._decorations.matchAfterPosition(f);d&&d.isEmpty()&&d.getStartPosition().equals(f)&&(f=this._nextSearchPosition(f),d=this._decorations.matchAfterPosition(f)),d&&this._setCurrentFindMatch(d);return}const c=this._getNextMatch(f,!1,!0);c&&this._setCurrentFindMatch(c.range)}_getNextMatch(f,c,d,s=!1){if(this._cannotFind())return null;const l=this._decorations.getFindScope(),o=r._getSearchRange(this._editor.getModel(),l);o.getEndPosition().isBefore(f)&&(f=o.getStartPosition()),f.isBefore(o.getStartPosition())&&(f=o.getStartPosition());const{lineNumber:g,column:h}=f,m=this._editor.getModel();let C=new S.Position(g,h),w=m.findNextMatch(this._state.searchString,C,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(129):null,c);return d&&w&&w.range.isEmpty()&&w.range.getStartPosition().equals(C)&&(C=this._nextSearchPosition(C),w=m.findNextMatch(this._state.searchString,C,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(129):null,c)),w?!s&&!o.containsRange(w.range)?this._getNextMatch(w.range.getEndPosition(),c,d,!0):w:null}moveToNextMatch(){this._moveToNextMatch(this._editor.getSelection().getEndPosition())}_moveToMatch(f){const c=this._decorations.getDecorationRangeAt(f);c&&this._setCurrentFindMatch(c)}moveToMatch(f){this._moveToMatch(f)}_getReplacePattern(){return this._state.isRegex?(0,i.parseReplaceString)(this._state.replaceString):i.ReplacePattern.fromStaticValue(this._state.replaceString)}replace(){if(!this._hasMatches())return;const f=this._getReplacePattern(),c=this._editor.getSelection(),d=this._getNextMatch(c.getStartPosition(),!0,!1);if(d)if(c.equalsRange(d.range)){const s=f.buildReplaceString(d.matches,this._state.preserveCase),l=new E.ReplaceCommand(c,s);this._executeEditorCommand(\"replace\",l),this._decorations.setStartPosition(new S.Position(c.startLineNumber,c.startColumn+s.length)),this.research(!0)}else this._decorations.setStartPosition(this._editor.getPosition()),this._setCurrentFindMatch(d.range)}_findMatches(f,c,d){const s=(f||[null]).map(l=>r._getSearchRange(this._editor.getModel(),l));return this._editor.getModel().findMatches(this._state.searchString,s,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(129):null,c,d)}replaceAll(){if(!this._hasMatches())return;const f=this._decorations.getFindScopes();f===null&&this._state.matchesCount>=e.MATCHES_LIMIT?this._largeReplaceAll():this._regularReplaceAll(f),this.research(!1)}_largeReplaceAll(){const c=new v.SearchParams(this._state.searchString,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(129):null).parseSearchRequest();if(!c)return;let d=c.regex;if(!d.multiline){let w=\"mu\";d.ignoreCase&&(w+=\"i\"),d.global&&(w+=\"g\"),d=new RegExp(d.source,w)}const s=this._editor.getModel(),l=s.getValue(1),o=s.getFullModelRange(),g=this._getReplacePattern();let h;const m=this._state.preserveCase;g.hasReplacementPatterns||m?h=l.replace(d,function(){return g.buildReplaceString(arguments,m)}):h=l.replace(d,g.buildReplaceString(null,m));const C=new E.ReplaceCommandThatPreservesSelection(o,h,this._editor.getSelection());this._executeEditorCommand(\"replaceAll\",C)}_regularReplaceAll(f){const c=this._getReplacePattern(),d=this._findMatches(f,c.hasReplacementPatterns||this._state.preserveCase,1073741824),s=[];for(let o=0,g=d.length;o<g;o++)s[o]=c.buildReplaceString(d[o].matches,this._state.preserveCase);const l=new a.ReplaceAllCommand(this._editor.getSelection(),d.map(o=>o.range),s);this._executeEditorCommand(\"replaceAll\",l)}selectAllMatches(){if(!this._hasMatches())return;const f=this._decorations.getFindScopes();let d=this._findMatches(f,!1,1073741824).map(l=>new _.Selection(l.range.startLineNumber,l.range.startColumn,l.range.endLineNumber,l.range.endColumn));const s=this._editor.getSelection();for(let l=0,o=d.length;l<o;l++)if(d[l].equalsRange(s)){d=[s].concat(d.slice(0,l)).concat(d.slice(l+1));break}this._editor.setSelections(d)}_executeEditorCommand(f,c){try{this._ignoreModelContentChanged=!0,this._editor.pushUndoStop(),this._editor.executeCommand(f,c),this._editor.pushUndoStop()}finally{this._ignoreModelContentChanged=!1}}}e.FindModelBoundToEditorModel=r}),define(se[896],oe([1,0,7,323,76,14,195,29,459]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindOptionsWidget=void 0;class _ extends y.Widget{constructor(b,a,i){super(),this._hideSoon=this._register(new E.RunOnceScheduler(()=>this._hide(),2e3)),this._isVisible=!1,this._editor=b,this._state=a,this._keybindingService=i,this._domNode=document.createElement(\"div\"),this._domNode.className=\"findOptionsWidget\",this._domNode.style.display=\"none\",this._domNode.style.top=\"10px\",this._domNode.style.zIndex=\"12\",this._domNode.setAttribute(\"role\",\"presentation\"),this._domNode.setAttribute(\"aria-hidden\",\"true\");const n={inputActiveOptionBorder:(0,p.asCssVariable)(p.inputActiveOptionBorder),inputActiveOptionForeground:(0,p.asCssVariable)(p.inputActiveOptionForeground),inputActiveOptionBackground:(0,p.asCssVariable)(p.inputActiveOptionBackground)};this.caseSensitive=this._register(new k.CaseSensitiveToggle({appendTitle:this._keybindingLabelFor(S.FIND_IDS.ToggleCaseSensitiveCommand),isChecked:this._state.matchCase,...n})),this._domNode.appendChild(this.caseSensitive.domNode),this._register(this.caseSensitive.onChange(()=>{this._state.change({matchCase:this.caseSensitive.checked},!1)})),this.wholeWords=this._register(new k.WholeWordsToggle({appendTitle:this._keybindingLabelFor(S.FIND_IDS.ToggleWholeWordCommand),isChecked:this._state.wholeWord,...n})),this._domNode.appendChild(this.wholeWords.domNode),this._register(this.wholeWords.onChange(()=>{this._state.change({wholeWord:this.wholeWords.checked},!1)})),this.regex=this._register(new k.RegexToggle({appendTitle:this._keybindingLabelFor(S.FIND_IDS.ToggleRegexCommand),isChecked:this._state.isRegex,...n})),this._domNode.appendChild(this.regex.domNode),this._register(this.regex.onChange(()=>{this._state.change({isRegex:this.regex.checked},!1)})),this._editor.addOverlayWidget(this),this._register(this._state.onFindReplaceStateChange(t=>{let r=!1;t.isRegex&&(this.regex.checked=this._state.isRegex,r=!0),t.wholeWord&&(this.wholeWords.checked=this._state.wholeWord,r=!0),t.matchCase&&(this.caseSensitive.checked=this._state.matchCase,r=!0),!this._state.isRevealed&&r&&this._revealTemporarily()})),this._register(L.addDisposableListener(this._domNode,L.EventType.MOUSE_LEAVE,t=>this._onMouseLeave())),this._register(L.addDisposableListener(this._domNode,\"mouseover\",t=>this._onMouseOver()))}_keybindingLabelFor(b){const a=this._keybindingService.lookupKeybinding(b);return a?` (${a.getLabel()})`:\"\"}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}getId(){return _.ID}getDomNode(){return this._domNode}getPosition(){return{preference:0}}highlightFindOptions(){this._revealTemporarily()}_revealTemporarily(){this._show(),this._hideSoon.schedule()}_onMouseLeave(){this._hideSoon.schedule()}_onMouseOver(){this._hideSoon.cancel()}_show(){this._isVisible||(this._isVisible=!0,this._domNode.style.display=\"block\")}_hide(){this._isVisible&&(this._isVisible=!1,this._domNode.style.display=\"none\")}}e.FindOptionsWidget=_,_.ID=\"editor.contrib.findOptionsWidget\"}),define(se[897],oe([1,0,6,2,5,195]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FindReplaceState=void 0;function S(_,v){return _===1?!0:_===2?!1:v}class p extends k.Disposable{get searchString(){return this._searchString}get replaceString(){return this._replaceString}get isRevealed(){return this._isRevealed}get isReplaceRevealed(){return this._isReplaceRevealed}get isRegex(){return S(this._isRegexOverride,this._isRegex)}get wholeWord(){return S(this._wholeWordOverride,this._wholeWord)}get matchCase(){return S(this._matchCaseOverride,this._matchCase)}get preserveCase(){return S(this._preserveCaseOverride,this._preserveCase)}get actualIsRegex(){return this._isRegex}get actualWholeWord(){return this._wholeWord}get actualMatchCase(){return this._matchCase}get actualPreserveCase(){return this._preserveCase}get searchScope(){return this._searchScope}get matchesPosition(){return this._matchesPosition}get matchesCount(){return this._matchesCount}get currentMatch(){return this._currentMatch}constructor(){super(),this._onFindReplaceStateChange=this._register(new L.Emitter),this.onFindReplaceStateChange=this._onFindReplaceStateChange.event,this._searchString=\"\",this._replaceString=\"\",this._isRevealed=!1,this._isReplaceRevealed=!1,this._isRegex=!1,this._isRegexOverride=0,this._wholeWord=!1,this._wholeWordOverride=0,this._matchCase=!1,this._matchCaseOverride=0,this._preserveCase=!1,this._preserveCaseOverride=0,this._searchScope=null,this._matchesPosition=0,this._matchesCount=0,this._currentMatch=null,this._loop=!0,this._isSearching=!1,this._filters=null}changeMatchInfo(v,b,a){const i={moveCursor:!1,updateHistory:!1,searchString:!1,replaceString:!1,isRevealed:!1,isReplaceRevealed:!1,isRegex:!1,wholeWord:!1,matchCase:!1,preserveCase:!1,searchScope:!1,matchesPosition:!1,matchesCount:!1,currentMatch:!1,loop:!1,isSearching:!1,filters:!1};let n=!1;b===0&&(v=0),v>b&&(v=b),this._matchesPosition!==v&&(this._matchesPosition=v,i.matchesPosition=!0,n=!0),this._matchesCount!==b&&(this._matchesCount=b,i.matchesCount=!0,n=!0),typeof a<\"u\"&&(y.Range.equalsRange(this._currentMatch,a)||(this._currentMatch=a,i.currentMatch=!0,n=!0)),n&&this._onFindReplaceStateChange.fire(i)}change(v,b,a=!0){var i;const n={moveCursor:b,updateHistory:a,searchString:!1,replaceString:!1,isRevealed:!1,isReplaceRevealed:!1,isRegex:!1,wholeWord:!1,matchCase:!1,preserveCase:!1,searchScope:!1,matchesPosition:!1,matchesCount:!1,currentMatch:!1,loop:!1,isSearching:!1,filters:!1};let t=!1;const r=this.isRegex,u=this.wholeWord,f=this.matchCase,c=this.preserveCase;typeof v.searchString<\"u\"&&this._searchString!==v.searchString&&(this._searchString=v.searchString,n.searchString=!0,t=!0),typeof v.replaceString<\"u\"&&this._replaceString!==v.replaceString&&(this._replaceString=v.replaceString,n.replaceString=!0,t=!0),typeof v.isRevealed<\"u\"&&this._isRevealed!==v.isRevealed&&(this._isRevealed=v.isRevealed,n.isRevealed=!0,t=!0),typeof v.isReplaceRevealed<\"u\"&&this._isReplaceRevealed!==v.isReplaceRevealed&&(this._isReplaceRevealed=v.isReplaceRevealed,n.isReplaceRevealed=!0,t=!0),typeof v.isRegex<\"u\"&&(this._isRegex=v.isRegex),typeof v.wholeWord<\"u\"&&(this._wholeWord=v.wholeWord),typeof v.matchCase<\"u\"&&(this._matchCase=v.matchCase),typeof v.preserveCase<\"u\"&&(this._preserveCase=v.preserveCase),typeof v.searchScope<\"u\"&&(!((i=v.searchScope)===null||i===void 0)&&i.every(d=>{var s;return(s=this._searchScope)===null||s===void 0?void 0:s.some(l=>!y.Range.equalsRange(l,d))})||(this._searchScope=v.searchScope,n.searchScope=!0,t=!0)),typeof v.loop<\"u\"&&this._loop!==v.loop&&(this._loop=v.loop,n.loop=!0,t=!0),typeof v.isSearching<\"u\"&&this._isSearching!==v.isSearching&&(this._isSearching=v.isSearching,n.isSearching=!0,t=!0),typeof v.filters<\"u\"&&(this._filters?this._filters.update(v.filters):this._filters=v.filters,n.filters=!0,t=!0),this._isRegexOverride=typeof v.isRegexOverride<\"u\"?v.isRegexOverride:0,this._wholeWordOverride=typeof v.wholeWordOverride<\"u\"?v.wholeWordOverride:0,this._matchCaseOverride=typeof v.matchCaseOverride<\"u\"?v.matchCaseOverride:0,this._preserveCaseOverride=typeof v.preserveCaseOverride<\"u\"?v.preserveCaseOverride:0,r!==this.isRegex&&(t=!0,n.isRegex=!0),u!==this.wholeWord&&(t=!0,n.wholeWord=!0),f!==this.matchCase&&(t=!0,n.matchCase=!0),c!==this.preserveCase&&(t=!0,n.preserveCase=!0),t&&this._onFindReplaceStateChange.fire(n)}canNavigateBack(){return this.canNavigateInLoop()||this.matchesPosition!==1}canNavigateForward(){return this.canNavigateInLoop()||this.matchesPosition<this.matchesCount}canNavigateInLoop(){return this._loop||this.matchesCount>=E.MATCHES_LIMIT}}e.FindReplaceState=p}),define(se[898],oe([1,0,7,48,159,158,76,14,26,12,2,17,11,5,195,673,357,761,29,82,23,28,89,20,106,460]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SimpleButton=e.FindWidget=e.FindWidgetViewZone=e.NLS_NO_RESULTS=e.NLS_MATCHES_LOCATION=e.findNextMatchIcon=e.findPreviousMatchIcon=e.findReplaceAllIcon=e.findReplaceIcon=void 0;const m=(0,d.registerIcon)(\"find-selection\",_.Codicon.selection,r.localize(0,null)),C=(0,d.registerIcon)(\"find-collapsed\",_.Codicon.chevronRight,r.localize(1,null)),w=(0,d.registerIcon)(\"find-expanded\",_.Codicon.chevronDown,r.localize(2,null));e.findReplaceIcon=(0,d.registerIcon)(\"find-replace\",_.Codicon.replace,r.localize(3,null)),e.findReplaceAllIcon=(0,d.registerIcon)(\"find-replace-all\",_.Codicon.replaceAll,r.localize(4,null)),e.findPreviousMatchIcon=(0,d.registerIcon)(\"find-previous-match\",_.Codicon.arrowUp,r.localize(5,null)),e.findNextMatchIcon=(0,d.registerIcon)(\"find-next-match\",_.Codicon.arrowDown,r.localize(6,null));const D=r.localize(7,null),I=r.localize(8,null),T=r.localize(9,null),A=r.localize(10,null),P=r.localize(11,null),N=r.localize(12,null),M=r.localize(13,null),R=r.localize(14,null),x=r.localize(15,null),O=r.localize(16,null),B=r.localize(17,null),W=r.localize(18,null),V=r.localize(19,null,t.MATCHES_LIMIT);e.NLS_MATCHES_LOCATION=r.localize(20,null),e.NLS_NO_RESULTS=r.localize(21,null);const K=419,q=275-54;let ie=69;const ae=33,ne=\"ctrlEnterReplaceAll.windows.donotask\",$=a.isMacintosh?256:2048;class J{constructor(X){this.afterLineNumber=X,this.heightInPx=ae,this.suppressMouseDown=!1,this.domNode=document.createElement(\"div\"),this.domNode.className=\"dock-find-viewzone\"}}e.FindWidgetViewZone=J;function Q(me,X,U){const G=!!X.match(/\\n/);if(U&&G&&U.selectionStart>0){me.stopPropagation();return}}function re(me,X,U){const G=!!X.match(/\\n/);if(U&&G&&U.selectionEnd<U.value.length){me.stopPropagation();return}}class de extends S.Widget{constructor(X,U,G,z,H,Y,j,Z,ee){super(),this._cachedHeight=null,this._revealTimeouts=[],this._codeEditor=X,this._controller=U,this._state=G,this._contextViewProvider=z,this._keybindingService=H,this._contextKeyService=Y,this._storageService=Z,this._notificationService=ee,this._ctrlEnterReplaceAllWarningPrompted=!!Z.getBoolean(ne,0),this._isVisible=!1,this._isReplaceVisible=!1,this._ignoreChangeEvent=!1,this._updateHistoryDelayer=new p.Delayer(500),this._register((0,b.toDisposable)(()=>this._updateHistoryDelayer.cancel())),this._register(this._state.onFindReplaceStateChange(le=>this._onStateChanged(le))),this._buildDomNode(),this._updateButtons(),this._tryUpdateWidgetWidth(),this._findInput.inputBox.layout(),this._register(this._codeEditor.onDidChangeConfiguration(le=>{if(le.hasChanged(90)&&(this._codeEditor.getOption(90)&&this._state.change({isReplaceRevealed:!1},!1),this._updateButtons()),le.hasChanged(143)&&this._tryUpdateWidgetWidth(),le.hasChanged(2)&&this.updateAccessibilitySupport(),le.hasChanged(41)){const ue=this._codeEditor.getOption(41).loop;this._state.change({loop:ue},!1);const ce=this._codeEditor.getOption(41).addExtraSpaceOnTop;ce&&!this._viewZone&&(this._viewZone=new J(0),this._showViewZone()),!ce&&this._viewZone&&this._removeViewZone()}})),this.updateAccessibilitySupport(),this._register(this._codeEditor.onDidChangeCursorSelection(()=>{this._isVisible&&this._updateToggleSelectionFindButton()})),this._register(this._codeEditor.onDidFocusEditorWidget(async()=>{if(this._isVisible){const le=await this._controller.getGlobalBufferTerm();le&&le!==this._state.searchString&&(this._state.change({searchString:le},!1),this._findInput.select())}})),this._findInputFocused=t.CONTEXT_FIND_INPUT_FOCUSED.bindTo(Y),this._findFocusTracker=this._register(L.trackFocus(this._findInput.inputBox.inputElement)),this._register(this._findFocusTracker.onDidFocus(()=>{this._findInputFocused.set(!0),this._updateSearchScope()})),this._register(this._findFocusTracker.onDidBlur(()=>{this._findInputFocused.set(!1)})),this._replaceInputFocused=t.CONTEXT_REPLACE_INPUT_FOCUSED.bindTo(Y),this._replaceFocusTracker=this._register(L.trackFocus(this._replaceInput.inputBox.inputElement)),this._register(this._replaceFocusTracker.onDidFocus(()=>{this._replaceInputFocused.set(!0),this._updateSearchScope()})),this._register(this._replaceFocusTracker.onDidBlur(()=>{this._replaceInputFocused.set(!1)})),this._codeEditor.addOverlayWidget(this),this._codeEditor.getOption(41).addExtraSpaceOnTop&&(this._viewZone=new J(0)),this._register(this._codeEditor.onDidChangeModel(()=>{this._isVisible&&(this._viewZoneId=void 0)})),this._register(this._codeEditor.onDidScrollChange(le=>{if(le.scrollTopChanged){this._layoutViewZone();return}setTimeout(()=>{this._layoutViewZone()},0)}))}getId(){return de.ID}getDomNode(){return this._domNode}getPosition(){return this._isVisible?{preference:0}:null}_onStateChanged(X){if(X.searchString){try{this._ignoreChangeEvent=!0,this._findInput.setValue(this._state.searchString)}finally{this._ignoreChangeEvent=!1}this._updateButtons()}if(X.replaceString&&(this._replaceInput.inputBox.value=this._state.replaceString),X.isRevealed&&(this._state.isRevealed?this._reveal():this._hide(!0)),X.isReplaceRevealed&&(this._state.isReplaceRevealed?!this._codeEditor.getOption(90)&&!this._isReplaceVisible&&(this._isReplaceVisible=!0,this._replaceInput.width=L.getTotalWidth(this._findInput.domNode),this._updateButtons(),this._replaceInput.inputBox.layout()):this._isReplaceVisible&&(this._isReplaceVisible=!1,this._updateButtons())),(X.isRevealed||X.isReplaceRevealed)&&(this._state.isRevealed||this._state.isReplaceRevealed)&&this._tryUpdateHeight()&&this._showViewZone(),X.isRegex&&this._findInput.setRegex(this._state.isRegex),X.wholeWord&&this._findInput.setWholeWords(this._state.wholeWord),X.matchCase&&this._findInput.setCaseSensitive(this._state.matchCase),X.preserveCase&&this._replaceInput.setPreserveCase(this._state.preserveCase),X.searchScope&&(this._state.searchScope?this._toggleSelectionFind.checked=!0:this._toggleSelectionFind.checked=!1,this._updateToggleSelectionFindButton()),X.searchString||X.matchesCount||X.matchesPosition){const U=this._state.searchString.length>0&&this._state.matchesCount===0;this._domNode.classList.toggle(\"no-results\",U),this._updateMatchesCount(),this._updateButtons()}(X.searchString||X.currentMatch)&&this._layoutViewZone(),X.updateHistory&&this._delayedUpdateHistory(),X.loop&&this._updateButtons()}_delayedUpdateHistory(){this._updateHistoryDelayer.trigger(this._updateHistory.bind(this)).then(void 0,v.onUnexpectedError)}_updateHistory(){this._state.searchString&&this._findInput.inputBox.addToHistory(),this._state.replaceString&&this._replaceInput.inputBox.addToHistory()}_updateMatchesCount(){this._matchesCount.style.minWidth=ie+\"px\",this._state.matchesCount>=t.MATCHES_LIMIT?this._matchesCount.title=V:this._matchesCount.title=\"\",this._matchesCount.firstChild&&this._matchesCount.removeChild(this._matchesCount.firstChild);let X;if(this._state.matchesCount>0){let U=String(this._state.matchesCount);this._state.matchesCount>=t.MATCHES_LIMIT&&(U+=\"+\");let G=String(this._state.matchesPosition);G===\"0\"&&(G=\"?\"),X=i.format(e.NLS_MATCHES_LOCATION,G,U)}else X=e.NLS_NO_RESULTS;this._matchesCount.appendChild(document.createTextNode(X)),(0,k.alert)(this._getAriaLabel(X,this._state.currentMatch,this._state.searchString)),ie=Math.max(ie,this._matchesCount.clientWidth)}_getAriaLabel(X,U,G){if(X===e.NLS_NO_RESULTS)return G===\"\"?r.localize(22,null,X):r.localize(23,null,X,G);if(U){const z=r.localize(24,null,X,G,U.startLineNumber+\":\"+U.startColumn),H=this._codeEditor.getModel();return H&&U.startLineNumber<=H.getLineCount()&&U.startLineNumber>=1?`${H.getLineContent(U.startLineNumber)}, ${z}`:z}return r.localize(25,null,X,G)}_updateToggleSelectionFindButton(){const X=this._codeEditor.getSelection(),U=X?X.startLineNumber!==X.endLineNumber||X.startColumn!==X.endColumn:!1,G=this._toggleSelectionFind.checked;this._isVisible&&(G||U)?this._toggleSelectionFind.enable():this._toggleSelectionFind.disable()}_updateButtons(){this._findInput.setEnabled(this._isVisible),this._replaceInput.setEnabled(this._isVisible&&this._isReplaceVisible),this._updateToggleSelectionFindButton(),this._closeBtn.setEnabled(this._isVisible);const X=this._state.searchString.length>0,U=!!this._state.matchesCount;this._prevBtn.setEnabled(this._isVisible&&X&&U&&this._state.canNavigateBack()),this._nextBtn.setEnabled(this._isVisible&&X&&U&&this._state.canNavigateForward()),this._replaceBtn.setEnabled(this._isVisible&&this._isReplaceVisible&&X),this._replaceAllBtn.setEnabled(this._isVisible&&this._isReplaceVisible&&X),this._domNode.classList.toggle(\"replaceToggled\",this._isReplaceVisible),this._toggleReplaceBtn.setExpanded(this._isReplaceVisible);const G=!this._codeEditor.getOption(90);this._toggleReplaceBtn.setEnabled(this._isVisible&&G)}_reveal(){if(this._revealTimeouts.forEach(X=>{clearTimeout(X)}),this._revealTimeouts=[],!this._isVisible){this._isVisible=!0;const X=this._codeEditor.getSelection();switch(this._codeEditor.getOption(41).autoFindInSelection){case\"always\":this._toggleSelectionFind.checked=!0;break;case\"never\":this._toggleSelectionFind.checked=!1;break;case\"multiline\":{const G=!!X&&X.startLineNumber!==X.endLineNumber;this._toggleSelectionFind.checked=G;break}default:break}this._tryUpdateWidgetWidth(),this._updateButtons(),this._revealTimeouts.push(setTimeout(()=>{this._domNode.classList.add(\"visible\"),this._domNode.setAttribute(\"aria-hidden\",\"false\")},0)),this._revealTimeouts.push(setTimeout(()=>{this._findInput.validate()},200)),this._codeEditor.layoutOverlayWidget(this);let U=!0;if(this._codeEditor.getOption(41).seedSearchStringFromSelection&&X){const G=this._codeEditor.getDomNode();if(G){const z=L.getDomNodePagePosition(G),H=this._codeEditor.getScrolledVisiblePosition(X.getStartPosition()),Y=z.left+(H?H.left:0),j=H?H.top:0;if(this._viewZone&&j<this._viewZone.heightInPx){X.endLineNumber>X.startLineNumber&&(U=!1);const Z=L.getTopLeftOffset(this._domNode).left;Y>Z&&(U=!1);const ee=this._codeEditor.getScrolledVisiblePosition(X.getEndPosition());z.left+(ee?ee.left:0)>Z&&(U=!1)}}}this._showViewZone(U)}}_hide(X){this._revealTimeouts.forEach(U=>{clearTimeout(U)}),this._revealTimeouts=[],this._isVisible&&(this._isVisible=!1,this._updateButtons(),this._domNode.classList.remove(\"visible\"),this._domNode.setAttribute(\"aria-hidden\",\"true\"),this._findInput.clearMessage(),X&&this._codeEditor.focus(),this._codeEditor.layoutOverlayWidget(this),this._removeViewZone())}_layoutViewZone(X){if(!this._codeEditor.getOption(41).addExtraSpaceOnTop){this._removeViewZone();return}if(!this._isVisible)return;const G=this._viewZone;this._viewZoneId!==void 0||!G||this._codeEditor.changeViewZones(z=>{G.heightInPx=this._getHeight(),this._viewZoneId=z.addZone(G),this._codeEditor.setScrollTop(X||this._codeEditor.getScrollTop()+G.heightInPx)})}_showViewZone(X=!0){if(!this._isVisible||!this._codeEditor.getOption(41).addExtraSpaceOnTop)return;this._viewZone===void 0&&(this._viewZone=new J(0));const G=this._viewZone;this._codeEditor.changeViewZones(z=>{if(this._viewZoneId!==void 0){const H=this._getHeight();if(H===G.heightInPx)return;const Y=H-G.heightInPx;G.heightInPx=H,z.layoutZone(this._viewZoneId),X&&this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()+Y);return}else{let H=this._getHeight();if(H-=this._codeEditor.getOption(83).top,H<=0)return;G.heightInPx=H,this._viewZoneId=z.addZone(G),X&&this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()+H)}})}_removeViewZone(){this._codeEditor.changeViewZones(X=>{this._viewZoneId!==void 0&&(X.removeZone(this._viewZoneId),this._viewZoneId=void 0,this._viewZone&&(this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()-this._viewZone.heightInPx),this._viewZone=void 0))})}_tryUpdateWidgetWidth(){if(!this._isVisible||!this._domNode.isConnected)return;const X=this._codeEditor.getLayoutInfo();if(X.contentWidth<=0){this._domNode.classList.add(\"hiddenEditor\");return}else this._domNode.classList.contains(\"hiddenEditor\")&&this._domNode.classList.remove(\"hiddenEditor\");const G=X.width,z=X.minimap.minimapWidth;let H=!1,Y=!1,j=!1;if(this._resized&&L.getTotalWidth(this._domNode)>K){this._domNode.style.maxWidth=`${G-28-z-15}px`,this._replaceInput.width=L.getTotalWidth(this._findInput.domNode);return}if(K+28+z>=G&&(Y=!0),K+28+z-ie>=G&&(j=!0),K+28+z-ie>=G+50&&(H=!0),this._domNode.classList.toggle(\"collapsed-find-widget\",H),this._domNode.classList.toggle(\"narrow-find-widget\",j),this._domNode.classList.toggle(\"reduced-find-widget\",Y),!j&&!H&&(this._domNode.style.maxWidth=`${G-28-z-15}px`),this._findInput.layout({collapsedFindWidget:H,narrowFindWidget:j,reducedFindWidget:Y}),this._resized){const Z=this._findInput.inputBox.element.clientWidth;Z>0&&(this._replaceInput.width=Z)}else this._isReplaceVisible&&(this._replaceInput.width=L.getTotalWidth(this._findInput.domNode))}_getHeight(){let X=0;return X+=4,X+=this._findInput.inputBox.height+2,this._isReplaceVisible&&(X+=4,X+=this._replaceInput.inputBox.height+2),X+=4,X}_tryUpdateHeight(){const X=this._getHeight();return this._cachedHeight!==null&&this._cachedHeight===X?!1:(this._cachedHeight=X,this._domNode.style.height=`${X}px`,!0)}focusFindInput(){this._findInput.select(),this._findInput.focus()}focusReplaceInput(){this._replaceInput.select(),this._replaceInput.focus()}highlightFindOptions(){this._findInput.highlightFindOptions()}_updateSearchScope(){if(this._codeEditor.hasModel()&&this._toggleSelectionFind.checked){const X=this._codeEditor.getSelections();X.map(U=>{U.endColumn===1&&U.endLineNumber>U.startLineNumber&&(U=U.setEndPosition(U.endLineNumber-1,this._codeEditor.getModel().getLineMaxColumn(U.endLineNumber-1)));const G=this._state.currentMatch;return U.startLineNumber!==U.endLineNumber&&!n.Range.equalsRange(U,G)?U:null}).filter(U=>!!U),X.length&&this._state.change({searchScope:X},!0)}}_onFindInputMouseDown(X){X.middleButton&&X.stopPropagation()}_onFindInputKeyDown(X){if(X.equals($|3))if(this._keybindingService.dispatchEvent(X,X.target)){X.preventDefault();return}else{this._findInput.inputBox.insertAtCursor(`\n`),X.preventDefault();return}if(X.equals(2)){this._isReplaceVisible?this._replaceInput.focus():this._findInput.focusOnCaseSensitive(),X.preventDefault();return}if(X.equals(2066)){this._codeEditor.focus(),X.preventDefault();return}if(X.equals(16))return Q(X,this._findInput.getValue(),this._findInput.domNode.querySelector(\"textarea\"));if(X.equals(18))return re(X,this._findInput.getValue(),this._findInput.domNode.querySelector(\"textarea\"))}_onReplaceInputKeyDown(X){if(X.equals($|3))if(this._keybindingService.dispatchEvent(X,X.target)){X.preventDefault();return}else{a.isWindows&&a.isNative&&!this._ctrlEnterReplaceAllWarningPrompted&&(this._notificationService.info(r.localize(26,null)),this._ctrlEnterReplaceAllWarningPrompted=!0,this._storageService.store(ne,!0,0,0)),this._replaceInput.inputBox.insertAtCursor(`\n`),X.preventDefault();return}if(X.equals(2)){this._findInput.focusOnCaseSensitive(),X.preventDefault();return}if(X.equals(1026)){this._findInput.focus(),X.preventDefault();return}if(X.equals(2066)){this._codeEditor.focus(),X.preventDefault();return}if(X.equals(16))return Q(X,this._replaceInput.inputBox.value,this._replaceInput.inputBox.element.querySelector(\"textarea\"));if(X.equals(18))return re(X,this._replaceInput.inputBox.value,this._replaceInput.inputBox.element.querySelector(\"textarea\"))}getVerticalSashLeft(X){return 0}_keybindingLabelFor(X){const U=this._keybindingService.lookupKeybinding(X);return U?` (${U.getLabel()})`:\"\"}_buildDomNode(){this._findInput=this._register(new u.ContextScopedFindInput(null,this._contextViewProvider,{width:q,label:I,placeholder:T,appendCaseSensitiveLabel:this._keybindingLabelFor(t.FIND_IDS.ToggleCaseSensitiveCommand),appendWholeWordsLabel:this._keybindingLabelFor(t.FIND_IDS.ToggleWholeWordCommand),appendRegexLabel:this._keybindingLabelFor(t.FIND_IDS.ToggleRegexCommand),validation:Z=>{if(Z.length===0||!this._findInput.getRegex())return null;try{return new RegExp(Z,\"gu\"),null}catch(ee){return{content:ee.message}}},flexibleHeight:!0,flexibleWidth:!0,flexibleMaxHeight:118,showCommonFindToggles:!0,showHistoryHint:()=>(0,f.showHistoryKeybindingHint)(this._keybindingService),inputBoxStyles:h.defaultInputBoxStyles,toggleStyles:h.defaultToggleStyles},this._contextKeyService)),this._findInput.setRegex(!!this._state.isRegex),this._findInput.setCaseSensitive(!!this._state.matchCase),this._findInput.setWholeWords(!!this._state.wholeWord),this._register(this._findInput.onKeyDown(Z=>this._onFindInputKeyDown(Z))),this._register(this._findInput.inputBox.onDidChange(()=>{this._ignoreChangeEvent||this._state.change({searchString:this._findInput.getValue()},!0)})),this._register(this._findInput.onDidOptionChange(()=>{this._state.change({isRegex:this._findInput.getRegex(),wholeWord:this._findInput.getWholeWords(),matchCase:this._findInput.getCaseSensitive()},!0)})),this._register(this._findInput.onCaseSensitiveKeyDown(Z=>{Z.equals(1026)&&this._isReplaceVisible&&(this._replaceInput.focus(),Z.preventDefault())})),this._register(this._findInput.onRegexKeyDown(Z=>{Z.equals(2)&&this._isReplaceVisible&&(this._replaceInput.focusOnPreserve(),Z.preventDefault())})),this._register(this._findInput.inputBox.onDidHeightChange(Z=>{this._tryUpdateHeight()&&this._showViewZone()})),a.isLinux&&this._register(this._findInput.onMouseDown(Z=>this._onFindInputMouseDown(Z))),this._matchesCount=document.createElement(\"div\"),this._matchesCount.className=\"matchesCount\",this._updateMatchesCount(),this._prevBtn=this._register(new he({label:A+this._keybindingLabelFor(t.FIND_IDS.PreviousMatchFindAction),icon:e.findPreviousMatchIcon,onTrigger:()=>{(0,g.assertIsDefined)(this._codeEditor.getAction(t.FIND_IDS.PreviousMatchFindAction)).run().then(void 0,v.onUnexpectedError)}})),this._nextBtn=this._register(new he({label:P+this._keybindingLabelFor(t.FIND_IDS.NextMatchFindAction),icon:e.findNextMatchIcon,onTrigger:()=>{(0,g.assertIsDefined)(this._codeEditor.getAction(t.FIND_IDS.NextMatchFindAction)).run().then(void 0,v.onUnexpectedError)}}));const G=document.createElement(\"div\");G.className=\"find-part\",G.appendChild(this._findInput.domNode);const z=document.createElement(\"div\");z.className=\"find-actions\",G.appendChild(z),z.appendChild(this._matchesCount),z.appendChild(this._prevBtn.domNode),z.appendChild(this._nextBtn.domNode),this._toggleSelectionFind=this._register(new y.Toggle({icon:m,title:N+this._keybindingLabelFor(t.FIND_IDS.ToggleSearchScopeCommand),isChecked:!1,inputActiveOptionBackground:(0,c.asCssVariable)(c.inputActiveOptionBackground),inputActiveOptionBorder:(0,c.asCssVariable)(c.inputActiveOptionBorder),inputActiveOptionForeground:(0,c.asCssVariable)(c.inputActiveOptionForeground)})),this._register(this._toggleSelectionFind.onChange(()=>{if(this._toggleSelectionFind.checked){if(this._codeEditor.hasModel()){const Z=this._codeEditor.getSelections();Z.map(ee=>(ee.endColumn===1&&ee.endLineNumber>ee.startLineNumber&&(ee=ee.setEndPosition(ee.endLineNumber-1,this._codeEditor.getModel().getLineMaxColumn(ee.endLineNumber-1))),ee.isEmpty()?null:ee)).filter(ee=>!!ee),Z.length&&this._state.change({searchScope:Z},!0)}}else this._state.change({searchScope:null},!0)})),z.appendChild(this._toggleSelectionFind.domNode),this._closeBtn=this._register(new he({label:M+this._keybindingLabelFor(t.FIND_IDS.CloseFindWidgetCommand),icon:d.widgetClose,onTrigger:()=>{this._state.change({isRevealed:!1,searchScope:null},!1)},onKeyDown:Z=>{Z.equals(2)&&this._isReplaceVisible&&(this._replaceBtn.isEnabled()?this._replaceBtn.focus():this._codeEditor.focus(),Z.preventDefault())}})),this._replaceInput=this._register(new u.ContextScopedReplaceInput(null,void 0,{label:R,placeholder:x,appendPreserveCaseLabel:this._keybindingLabelFor(t.FIND_IDS.TogglePreserveCaseCommand),history:[],flexibleHeight:!0,flexibleWidth:!0,flexibleMaxHeight:118,showHistoryHint:()=>(0,f.showHistoryKeybindingHint)(this._keybindingService),inputBoxStyles:h.defaultInputBoxStyles,toggleStyles:h.defaultToggleStyles},this._contextKeyService,!0)),this._replaceInput.setPreserveCase(!!this._state.preserveCase),this._register(this._replaceInput.onKeyDown(Z=>this._onReplaceInputKeyDown(Z))),this._register(this._replaceInput.inputBox.onDidChange(()=>{this._state.change({replaceString:this._replaceInput.inputBox.value},!1)})),this._register(this._replaceInput.inputBox.onDidHeightChange(Z=>{this._isReplaceVisible&&this._tryUpdateHeight()&&this._showViewZone()})),this._register(this._replaceInput.onDidOptionChange(()=>{this._state.change({preserveCase:this._replaceInput.getPreserveCase()},!0)})),this._register(this._replaceInput.onPreserveCaseKeyDown(Z=>{Z.equals(2)&&(this._prevBtn.isEnabled()?this._prevBtn.focus():this._nextBtn.isEnabled()?this._nextBtn.focus():this._toggleSelectionFind.enabled?this._toggleSelectionFind.focus():this._closeBtn.isEnabled()&&this._closeBtn.focus(),Z.preventDefault())})),this._replaceBtn=this._register(new he({label:O+this._keybindingLabelFor(t.FIND_IDS.ReplaceOneAction),icon:e.findReplaceIcon,onTrigger:()=>{this._controller.replace()},onKeyDown:Z=>{Z.equals(1026)&&(this._closeBtn.focus(),Z.preventDefault())}})),this._replaceAllBtn=this._register(new he({label:B+this._keybindingLabelFor(t.FIND_IDS.ReplaceAllAction),icon:e.findReplaceAllIcon,onTrigger:()=>{this._controller.replaceAll()}}));const H=document.createElement(\"div\");H.className=\"replace-part\",H.appendChild(this._replaceInput.domNode);const Y=document.createElement(\"div\");Y.className=\"replace-actions\",H.appendChild(Y),Y.appendChild(this._replaceBtn.domNode),Y.appendChild(this._replaceAllBtn.domNode),this._toggleReplaceBtn=this._register(new he({label:W,className:\"codicon toggle left\",onTrigger:()=>{this._state.change({isReplaceRevealed:!this._isReplaceVisible},!1),this._isReplaceVisible&&(this._replaceInput.width=L.getTotalWidth(this._findInput.domNode),this._replaceInput.inputBox.layout()),this._showViewZone()}})),this._toggleReplaceBtn.setExpanded(this._isReplaceVisible),this._domNode=document.createElement(\"div\"),this._domNode.className=\"editor-widget find-widget\",this._domNode.setAttribute(\"aria-hidden\",\"true\"),this._domNode.ariaLabel=D,this._domNode.role=\"dialog\",this._domNode.style.width=`${K}px`,this._domNode.appendChild(this._toggleReplaceBtn.domNode),this._domNode.appendChild(G),this._domNode.appendChild(this._closeBtn.domNode),this._domNode.appendChild(H),this._resizeSash=new E.Sash(this._domNode,this,{orientation:0,size:2}),this._resized=!1;let j=K;this._register(this._resizeSash.onDidStart(()=>{j=L.getTotalWidth(this._domNode)})),this._register(this._resizeSash.onDidChange(Z=>{this._resized=!0;const ee=j+Z.startX-Z.currentX;if(ee<K)return;const le=parseFloat(L.getComputedStyle(this._domNode).maxWidth)||0;ee>le||(this._domNode.style.width=`${ee}px`,this._isReplaceVisible&&(this._replaceInput.width=L.getTotalWidth(this._findInput.domNode)),this._findInput.inputBox.layout(),this._tryUpdateHeight())})),this._register(this._resizeSash.onDidReset(()=>{const Z=L.getTotalWidth(this._domNode);if(Z<K)return;let ee=K;if(!this._resized||Z===K){const le=this._codeEditor.getLayoutInfo();ee=le.width-28-le.minimap.minimapWidth-15,this._resized=!0}this._domNode.style.width=`${ee}px`,this._isReplaceVisible&&(this._replaceInput.width=L.getTotalWidth(this._findInput.domNode)),this._findInput.inputBox.layout()}))}updateAccessibilitySupport(){const X=this._codeEditor.getOption(2);this._findInput.setFocusInputOnOptionClick(X!==2)}}e.FindWidget=de,de.ID=\"editor.contrib.findWidget\";class he extends S.Widget{constructor(X){super(),this._opts=X;let U=\"button\";this._opts.className&&(U=U+\" \"+this._opts.className),this._opts.icon&&(U=U+\" \"+l.ThemeIcon.asClassName(this._opts.icon)),this._domNode=document.createElement(\"div\"),this._domNode.title=this._opts.label,this._domNode.tabIndex=0,this._domNode.className=U,this._domNode.setAttribute(\"role\",\"button\"),this._domNode.setAttribute(\"aria-label\",this._opts.label),this.onclick(this._domNode,G=>{this._opts.onTrigger(),G.preventDefault()}),this.onkeydown(this._domNode,G=>{var z,H;if(G.equals(10)||G.equals(3)){this._opts.onTrigger(),G.preventDefault();return}(H=(z=this._opts).onKeyDown)===null||H===void 0||H.call(z,G)})}get domNode(){return this._domNode}isEnabled(){return this._domNode.tabIndex>=0}focus(){this._domNode.focus()}setEnabled(X){this._domNode.classList.toggle(\"disabled\",!X),this._domNode.setAttribute(\"aria-disabled\",String(!X)),this._domNode.tabIndex=X?0:-1}setExpanded(X){this._domNode.setAttribute(\"aria-expanded\",String(!!X)),X?(this._domNode.classList.remove(...l.ThemeIcon.asClassNameArray(C)),this._domNode.classList.add(...l.ThemeIcon.asClassNameArray(w))):(this._domNode.classList.remove(...l.ThemeIcon.asClassNameArray(w)),this._domNode.classList.add(...l.ThemeIcon.asClassNameArray(C)))}}e.SimpleButton=he,(0,s.registerThemingParticipant)((me,X)=>{const U=(Ce,Se)=>{Se&&X.addRule(`.monaco-editor ${Ce} { background-color: ${Se}; }`)};U(\".findMatch\",me.getColor(c.editorFindMatchHighlight)),U(\".currentFindMatch\",me.getColor(c.editorFindMatch)),U(\".findScope\",me.getColor(c.editorFindRangeHighlight));const G=me.getColor(c.editorWidgetBackground);U(\".find-widget\",G);const z=me.getColor(c.widgetShadow);z&&X.addRule(`.monaco-editor .find-widget { box-shadow: 0 0 8px 2px ${z}; }`);const H=me.getColor(c.widgetBorder);H&&X.addRule(`.monaco-editor .find-widget { border-left: 1px solid ${H}; border-right: 1px solid ${H}; border-bottom: 1px solid ${H}; }`);const Y=me.getColor(c.editorFindMatchHighlightBorder);Y&&X.addRule(`.monaco-editor .findMatch { border: 1px ${(0,o.isHighContrast)(me.type)?\"dotted\":\"solid\"} ${Y}; box-sizing: border-box; }`);const j=me.getColor(c.editorFindMatchBorder);j&&X.addRule(`.monaco-editor .currentFindMatch { border: 2px solid ${j}; padding: 1px; box-sizing: border-box; }`);const Z=me.getColor(c.editorFindRangeHighlightBorder);Z&&X.addRule(`.monaco-editor .findScope { border: 1px ${(0,o.isHighContrast)(me.type)?\"dashed\":\"solid\"} ${Z}; }`);const ee=me.getColor(c.contrastBorder);ee&&X.addRule(`.monaco-editor .find-widget { border: 1px solid ${ee}; }`);const le=me.getColor(c.editorWidgetForeground);le&&X.addRule(`.monaco-editor .find-widget { color: ${le}; }`);const ue=me.getColor(c.errorForeground);ue&&X.addRule(`.monaco-editor .find-widget.no-results .matchesCount { color: ${ue}; }`);const ce=me.getColor(c.editorWidgetResizeBorder);if(ce)X.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${ce}; }`);else{const Ce=me.getColor(c.editorWidgetBorder);Ce&&X.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${Ce}; }`)}const pe=me.getColor(c.toolbarHoverBackground);pe&&X.addRule(`\n\t\t.monaco-editor .find-widget .button:not(.disabled):hover,\n\t\t.monaco-editor .find-widget .codicon-find-selection:hover {\n\t\t\tbackground-color: ${pe} !important;\n\t\t}\n\t`);const ve=me.getColor(c.focusBorder);ve&&X.addRule(`.monaco-editor .find-widget .monaco-inputbox.synthetic-focus { outline-color: ${ve}; }`)})}),define(se[377],oe([1,0,14,2,11,16,83,21,41,195,896,897,898,672,30,103,15,59,34,50,70,92,23]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o){\"use strict\";var g;Object.defineProperty(e,\"__esModule\",{value:!0}),e.StartFindReplaceAction=e.PreviousSelectionMatchFindAction=e.NextSelectionMatchFindAction=e.SelectionMatchFindAction=e.MoveToMatchFindAction=e.PreviousMatchFindAction=e.NextMatchFindAction=e.MatchFindAction=e.StartFindWithSelectionAction=e.StartFindWithArgsAction=e.StartFindAction=e.FindController=e.CommonFindController=e.getSelectionSearchString=void 0;const h=524288;function m(W,V=\"single\",K=!1){if(!W.hasModel())return null;const F=W.getSelection();if(V===\"single\"&&F.startLineNumber===F.endLineNumber||V===\"multiple\"){if(F.isEmpty()){const q=W.getConfiguredWordAtPosition(F.getStartPosition());if(q&&K===!1)return q.word}else if(W.getModel().getValueLengthInRange(F)<h)return W.getModel().getValueInRange(F)}return null}e.getSelectionSearchString=m;let C=g=class extends k.Disposable{get editor(){return this._editor}static get(V){return V.getContribution(g.ID)}constructor(V,K,F,q,ie){super(),this._editor=V,this._findWidgetVisible=v.CONTEXT_FIND_WIDGET_VISIBLE.bindTo(K),this._contextKeyService=K,this._storageService=F,this._clipboardService=q,this._notificationService=ie,this._updateHistoryDelayer=new L.Delayer(500),this._state=this._register(new a.FindReplaceState),this.loadQueryState(),this._register(this._state.onFindReplaceStateChange(ae=>this._onStateChanged(ae))),this._model=null,this._register(this._editor.onDidChangeModel(()=>{const ae=this._editor.getModel()&&this._state.isRevealed;this.disposeModel(),this._state.change({searchScope:null,matchCase:this._storageService.getBoolean(\"editor.matchCase\",1,!1),wholeWord:this._storageService.getBoolean(\"editor.wholeWord\",1,!1),isRegex:this._storageService.getBoolean(\"editor.isRegex\",1,!1),preserveCase:this._storageService.getBoolean(\"editor.preserveCase\",1,!1)},!1),ae&&this._start({forceRevealReplace:!1,seedSearchStringFromSelection:\"none\",seedSearchStringFromNonEmptySelection:!1,seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!1,updateSearchScope:!1,loop:this._editor.getOption(41).loop})}))}dispose(){this.disposeModel(),super.dispose()}disposeModel(){this._model&&(this._model.dispose(),this._model=null)}_onStateChanged(V){this.saveQueryState(V),V.isRevealed&&(this._state.isRevealed?this._findWidgetVisible.set(!0):(this._findWidgetVisible.reset(),this.disposeModel())),V.searchString&&this.setGlobalBufferTerm(this._state.searchString)}saveQueryState(V){V.isRegex&&this._storageService.store(\"editor.isRegex\",this._state.actualIsRegex,1,1),V.wholeWord&&this._storageService.store(\"editor.wholeWord\",this._state.actualWholeWord,1,1),V.matchCase&&this._storageService.store(\"editor.matchCase\",this._state.actualMatchCase,1,1),V.preserveCase&&this._storageService.store(\"editor.preserveCase\",this._state.actualPreserveCase,1,1)}loadQueryState(){this._state.change({matchCase:this._storageService.getBoolean(\"editor.matchCase\",1,this._state.matchCase),wholeWord:this._storageService.getBoolean(\"editor.wholeWord\",1,this._state.wholeWord),isRegex:this._storageService.getBoolean(\"editor.isRegex\",1,this._state.isRegex),preserveCase:this._storageService.getBoolean(\"editor.preserveCase\",1,this._state.preserveCase)},!1)}isFindInputFocused(){return!!v.CONTEXT_FIND_INPUT_FOCUSED.getValue(this._contextKeyService)}getState(){return this._state}closeFindWidget(){this._state.change({isRevealed:!1,searchScope:null},!1),this._editor.focus()}toggleCaseSensitive(){this._state.change({matchCase:!this._state.matchCase},!1),this._state.isRevealed||this.highlightFindOptions()}toggleWholeWords(){this._state.change({wholeWord:!this._state.wholeWord},!1),this._state.isRevealed||this.highlightFindOptions()}toggleRegex(){this._state.change({isRegex:!this._state.isRegex},!1),this._state.isRevealed||this.highlightFindOptions()}togglePreserveCase(){this._state.change({preserveCase:!this._state.preserveCase},!1),this._state.isRevealed||this.highlightFindOptions()}toggleSearchScope(){if(this._state.searchScope)this._state.change({searchScope:null},!0);else if(this._editor.hasModel()){const V=this._editor.getSelections();V.map(K=>(K.endColumn===1&&K.endLineNumber>K.startLineNumber&&(K=K.setEndPosition(K.endLineNumber-1,this._editor.getModel().getLineMaxColumn(K.endLineNumber-1))),K.isEmpty()?null:K)).filter(K=>!!K),V.length&&this._state.change({searchScope:V},!0)}}setSearchString(V){this._state.isRegex&&(V=y.escapeRegExpCharacters(V)),this._state.change({searchString:V},!1)}highlightFindOptions(V=!1){}async _start(V,K){if(this.disposeModel(),!this._editor.hasModel())return;const F={...K,isRevealed:!0};if(V.seedSearchStringFromSelection===\"single\"){const q=m(this._editor,V.seedSearchStringFromSelection,V.seedSearchStringFromNonEmptySelection);q&&(this._state.isRegex?F.searchString=y.escapeRegExpCharacters(q):F.searchString=q)}else if(V.seedSearchStringFromSelection===\"multiple\"&&!V.updateSearchScope){const q=m(this._editor,V.seedSearchStringFromSelection);q&&(F.searchString=q)}if(!F.searchString&&V.seedSearchStringFromGlobalClipboard){const q=await this.getGlobalBufferTerm();if(!this._editor.hasModel())return;q&&(F.searchString=q)}if(V.forceRevealReplace||F.isReplaceRevealed?F.isReplaceRevealed=!0:this._findWidgetVisible.get()||(F.isReplaceRevealed=!1),V.updateSearchScope){const q=this._editor.getSelections();q.some(ie=>!ie.isEmpty())&&(F.searchScope=q)}F.loop=V.loop,this._state.change(F,!1),this._model||(this._model=new v.FindModelBoundToEditorModel(this._editor,this._state))}start(V,K){return this._start(V,K)}moveToNextMatch(){return this._model?(this._model.moveToNextMatch(),!0):!1}moveToPrevMatch(){return this._model?(this._model.moveToPrevMatch(),!0):!1}goToMatch(V){return this._model?(this._model.moveToMatch(V),!0):!1}replace(){return this._model?(this._model.replace(),!0):!1}replaceAll(){var V;return this._model?!((V=this._editor.getModel())===null||V===void 0)&&V.isTooLargeForHeapOperation()?(this._notificationService.warn(n.localize(0,null)),!1):(this._model.replaceAll(),!0):!1}selectAllMatches(){return this._model?(this._model.selectAllMatches(),this._editor.focus(),!0):!1}async getGlobalBufferTerm(){return this._editor.getOption(41).globalFindClipboard&&this._editor.hasModel()&&!this._editor.getModel().isTooLargeForSyncing()?this._clipboardService.readFindText():\"\"}setGlobalBufferTerm(V){this._editor.getOption(41).globalFindClipboard&&this._editor.hasModel()&&!this._editor.getModel().isTooLargeForSyncing()&&this._clipboardService.writeFindText(V)}};e.CommonFindController=C,C.ID=\"editor.contrib.findController\",e.CommonFindController=C=g=ke([ge(1,u.IContextKeyService),ge(2,l.IStorageService),ge(3,r.IClipboardService),ge(4,d.INotificationService)],C);let w=class extends C{constructor(V,K,F,q,ie,ae,ne,$){super(V,F,ne,$,ae),this._contextViewService=K,this._keybindingService=q,this._themeService=ie,this._widget=null,this._findOptionsWidget=null}async _start(V,K){this._widget||this._createFindWidget();const F=this._editor.getSelection();let q=!1;switch(this._editor.getOption(41).autoFindInSelection){case\"always\":q=!0;break;case\"never\":q=!1;break;case\"multiline\":{q=!!F&&F.startLineNumber!==F.endLineNumber;break}default:break}V.updateSearchScope=V.updateSearchScope||q,await super._start(V,K),this._widget&&(V.shouldFocus===2?this._widget.focusReplaceInput():V.shouldFocus===1&&this._widget.focusFindInput())}highlightFindOptions(V=!1){this._widget||this._createFindWidget(),this._state.isRevealed&&!V?this._widget.highlightFindOptions():this._findOptionsWidget.highlightFindOptions()}_createFindWidget(){this._widget=this._register(new i.FindWidget(this._editor,this,this._state,this._contextViewService,this._keybindingService,this._contextKeyService,this._themeService,this._storageService,this._notificationService)),this._findOptionsWidget=this._register(new b.FindOptionsWidget(this._editor,this._state,this._keybindingService))}};e.FindController=w,e.FindController=w=ke([ge(1,f.IContextViewService),ge(2,u.IContextKeyService),ge(3,c.IKeybindingService),ge(4,o.IThemeService),ge(5,d.INotificationService),ge(6,l.IStorageService),ge(7,r.IClipboardService)],w),e.StartFindAction=(0,E.registerMultiEditorAction)(new E.MultiEditorAction({id:v.FIND_IDS.StartFindAction,label:n.localize(1,null),alias:\"Find\",precondition:u.ContextKeyExpr.or(p.EditorContextKeys.focus,u.ContextKeyExpr.has(\"editorIsOpen\")),kbOpts:{kbExpr:null,primary:2084,weight:100},menuOpts:{menuId:t.MenuId.MenubarEditMenu,group:\"3_find\",title:n.localize(2,null),order:1}})),e.StartFindAction.addImplementation(0,(W,V,K)=>{const F=C.get(V);return F?F.start({forceRevealReplace:!1,seedSearchStringFromSelection:V.getOption(41).seedSearchStringFromSelection!==\"never\"?\"single\":\"none\",seedSearchStringFromNonEmptySelection:V.getOption(41).seedSearchStringFromSelection===\"selection\",seedSearchStringFromGlobalClipboard:V.getOption(41).globalFindClipboard,shouldFocus:1,shouldAnimate:!0,updateSearchScope:!1,loop:V.getOption(41).loop}):!1});const D={description:\"Open a new In-Editor Find Widget.\",args:[{name:\"Open a new In-Editor Find Widget args\",schema:{properties:{searchString:{type:\"string\"},replaceString:{type:\"string\"},isRegex:{type:\"boolean\"},matchWholeWord:{type:\"boolean\"},isCaseSensitive:{type:\"boolean\"},preserveCase:{type:\"boolean\"},findInSelection:{type:\"boolean\"}}}}]};class I extends E.EditorAction{constructor(){super({id:v.FIND_IDS.StartFindWithArgs,label:n.localize(3,null),alias:\"Find With Arguments\",precondition:void 0,kbOpts:{kbExpr:null,primary:0,weight:100},metadata:D})}async run(V,K,F){const q=C.get(K);if(q){const ie=F?{searchString:F.searchString,replaceString:F.replaceString,isReplaceRevealed:F.replaceString!==void 0,isRegex:F.isRegex,wholeWord:F.matchWholeWord,matchCase:F.isCaseSensitive,preserveCase:F.preserveCase}:{};await q.start({forceRevealReplace:!1,seedSearchStringFromSelection:q.getState().searchString.length===0&&K.getOption(41).seedSearchStringFromSelection!==\"never\"?\"single\":\"none\",seedSearchStringFromNonEmptySelection:K.getOption(41).seedSearchStringFromSelection===\"selection\",seedSearchStringFromGlobalClipboard:!0,shouldFocus:1,shouldAnimate:!0,updateSearchScope:F?.findInSelection||!1,loop:K.getOption(41).loop},ie),q.setGlobalBufferTerm(q.getState().searchString)}}}e.StartFindWithArgsAction=I;class T extends E.EditorAction{constructor(){super({id:v.FIND_IDS.StartFindWithSelection,label:n.localize(4,null),alias:\"Find With Selection\",precondition:void 0,kbOpts:{kbExpr:null,primary:0,mac:{primary:2083},weight:100}})}async run(V,K){const F=C.get(K);F&&(await F.start({forceRevealReplace:!1,seedSearchStringFromSelection:\"multiple\",seedSearchStringFromNonEmptySelection:!1,seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:K.getOption(41).loop}),F.setGlobalBufferTerm(F.getState().searchString))}}e.StartFindWithSelectionAction=T;class A extends E.EditorAction{async run(V,K){const F=C.get(K);F&&!this._run(F)&&(await F.start({forceRevealReplace:!1,seedSearchStringFromSelection:F.getState().searchString.length===0&&K.getOption(41).seedSearchStringFromSelection!==\"never\"?\"single\":\"none\",seedSearchStringFromNonEmptySelection:K.getOption(41).seedSearchStringFromSelection===\"selection\",seedSearchStringFromGlobalClipboard:!0,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:K.getOption(41).loop}),this._run(F))}}e.MatchFindAction=A;class P extends A{constructor(){super({id:v.FIND_IDS.NextMatchFindAction,label:n.localize(5,null),alias:\"Find Next\",precondition:void 0,kbOpts:[{kbExpr:p.EditorContextKeys.focus,primary:61,mac:{primary:2085,secondary:[61]},weight:100},{kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,v.CONTEXT_FIND_INPUT_FOCUSED),primary:3,weight:100}]})}_run(V){return V.moveToNextMatch()?(V.editor.pushUndoStop(),!0):!1}}e.NextMatchFindAction=P;class N extends A{constructor(){super({id:v.FIND_IDS.PreviousMatchFindAction,label:n.localize(6,null),alias:\"Find Previous\",precondition:void 0,kbOpts:[{kbExpr:p.EditorContextKeys.focus,primary:1085,mac:{primary:3109,secondary:[1085]},weight:100},{kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,v.CONTEXT_FIND_INPUT_FOCUSED),primary:1027,weight:100}]})}_run(V){return V.moveToPrevMatch()}}e.PreviousMatchFindAction=N;class M extends E.EditorAction{constructor(){super({id:v.FIND_IDS.GoToMatchFindAction,label:n.localize(7,null),alias:\"Go to Match...\",precondition:v.CONTEXT_FIND_WIDGET_VISIBLE}),this._highlightDecorations=[]}run(V,K,F){const q=C.get(K);if(!q)return;const ie=q.getState().matchesCount;if(ie<1){V.get(d.INotificationService).notify({severity:d.Severity.Warning,message:n.localize(8,null)});return}const ne=V.get(s.IQuickInputService).createInputBox();ne.placeholder=n.localize(9,null,ie);const $=Q=>{const re=parseInt(Q);if(isNaN(re))return;const de=q.getState().matchesCount;if(re>0&&re<=de)return re-1;if(re<0&&re>=-de)return de+re},J=Q=>{const re=$(Q);if(typeof re==\"number\"){ne.validationMessage=void 0,q.goToMatch(re);const de=q.getState().currentMatch;de&&this.addDecorations(K,de)}else ne.validationMessage=n.localize(10,null,q.getState().matchesCount),this.clearDecorations(K)};ne.onDidChangeValue(Q=>{J(Q)}),ne.onDidAccept(()=>{const Q=$(ne.value);typeof Q==\"number\"?(q.goToMatch(Q),ne.hide()):ne.validationMessage=n.localize(11,null,q.getState().matchesCount)}),ne.onDidHide(()=>{this.clearDecorations(K),ne.dispose()}),ne.show()}clearDecorations(V){V.changeDecorations(K=>{this._highlightDecorations=K.deltaDecorations(this._highlightDecorations,[])})}addDecorations(V,K){V.changeDecorations(F=>{this._highlightDecorations=F.deltaDecorations(this._highlightDecorations,[{range:K,options:{description:\"find-match-quick-access-range-highlight\",className:\"rangeHighlight\",isWholeLine:!0}},{range:K,options:{description:\"find-match-quick-access-range-highlight-overview\",overviewRuler:{color:(0,o.themeColorFromId)(S.overviewRulerRangeHighlight),position:_.OverviewRulerLane.Full}}}])})}}e.MoveToMatchFindAction=M;class R extends E.EditorAction{async run(V,K){const F=C.get(K);if(!F)return;const q=m(K,\"single\",!1);q&&F.setSearchString(q),this._run(F)||(await F.start({forceRevealReplace:!1,seedSearchStringFromSelection:\"none\",seedSearchStringFromNonEmptySelection:!1,seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:K.getOption(41).loop}),this._run(F))}}e.SelectionMatchFindAction=R;class x extends R{constructor(){super({id:v.FIND_IDS.NextSelectionMatchFindAction,label:n.localize(12,null),alias:\"Find Next Selection\",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.focus,primary:2109,weight:100}})}_run(V){return V.moveToNextMatch()}}e.NextSelectionMatchFindAction=x;class O extends R{constructor(){super({id:v.FIND_IDS.PreviousSelectionMatchFindAction,label:n.localize(13,null),alias:\"Find Previous Selection\",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.focus,primary:3133,weight:100}})}_run(V){return V.moveToPrevMatch()}}e.PreviousSelectionMatchFindAction=O,e.StartFindReplaceAction=(0,E.registerMultiEditorAction)(new E.MultiEditorAction({id:v.FIND_IDS.StartFindReplaceAction,label:n.localize(14,null),alias:\"Replace\",precondition:u.ContextKeyExpr.or(p.EditorContextKeys.focus,u.ContextKeyExpr.has(\"editorIsOpen\")),kbOpts:{kbExpr:null,primary:2086,mac:{primary:2596},weight:100},menuOpts:{menuId:t.MenuId.MenubarEditMenu,group:\"3_find\",title:n.localize(15,null),order:2}})),e.StartFindReplaceAction.addImplementation(0,(W,V,K)=>{if(!V.hasModel()||V.getOption(90))return!1;const F=C.get(V);if(!F)return!1;const q=V.getSelection(),ie=F.isFindInputFocused(),ae=!q.isEmpty()&&q.startLineNumber===q.endLineNumber&&V.getOption(41).seedSearchStringFromSelection!==\"never\"&&!ie,ne=ie||ae?2:1;return F.start({forceRevealReplace:!0,seedSearchStringFromSelection:ae?\"single\":\"none\",seedSearchStringFromNonEmptySelection:V.getOption(41).seedSearchStringFromSelection===\"selection\",seedSearchStringFromGlobalClipboard:V.getOption(41).seedSearchStringFromSelection!==\"never\",shouldFocus:ne,shouldAnimate:!0,updateSearchScope:!1,loop:V.getOption(41).loop})}),(0,E.registerEditorContribution)(C.ID,w,0),(0,E.registerEditorAction)(I),(0,E.registerEditorAction)(T),(0,E.registerEditorAction)(P),(0,E.registerEditorAction)(N),(0,E.registerEditorAction)(M),(0,E.registerEditorAction)(x),(0,E.registerEditorAction)(O);const B=E.EditorCommand.bindToContribution(C.get);(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.CloseFindWidgetCommand,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.closeFindWidget(),kbOpts:{weight:100+5,kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,u.ContextKeyExpr.not(\"isComposing\")),primary:9,secondary:[1033]}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ToggleCaseSensitiveCommand,precondition:void 0,handler:W=>W.toggleCaseSensitive(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.ToggleCaseSensitiveKeybinding.primary,mac:v.ToggleCaseSensitiveKeybinding.mac,win:v.ToggleCaseSensitiveKeybinding.win,linux:v.ToggleCaseSensitiveKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ToggleWholeWordCommand,precondition:void 0,handler:W=>W.toggleWholeWords(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.ToggleWholeWordKeybinding.primary,mac:v.ToggleWholeWordKeybinding.mac,win:v.ToggleWholeWordKeybinding.win,linux:v.ToggleWholeWordKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ToggleRegexCommand,precondition:void 0,handler:W=>W.toggleRegex(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.ToggleRegexKeybinding.primary,mac:v.ToggleRegexKeybinding.mac,win:v.ToggleRegexKeybinding.win,linux:v.ToggleRegexKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ToggleSearchScopeCommand,precondition:void 0,handler:W=>W.toggleSearchScope(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.ToggleSearchScopeKeybinding.primary,mac:v.ToggleSearchScopeKeybinding.mac,win:v.ToggleSearchScopeKeybinding.win,linux:v.ToggleSearchScopeKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.TogglePreserveCaseCommand,precondition:void 0,handler:W=>W.togglePreserveCase(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.TogglePreserveCaseKeybinding.primary,mac:v.TogglePreserveCaseKeybinding.mac,win:v.TogglePreserveCaseKeybinding.win,linux:v.TogglePreserveCaseKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ReplaceOneAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.replace(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:3094}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ReplaceOneAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.replace(),kbOpts:{weight:100+5,kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,v.CONTEXT_REPLACE_INPUT_FOCUSED),primary:3}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ReplaceAllAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.replaceAll(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:2563}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ReplaceAllAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.replaceAll(),kbOpts:{weight:100+5,kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,v.CONTEXT_REPLACE_INPUT_FOCUSED),primary:void 0,mac:{primary:2051}}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.SelectAllMatchesAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.selectAllMatches(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:515}}))}),define(se[378],oe([1,0,26,41,38,675,29,82,23,28]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FoldingDecorationProvider=e.foldingManualExpandedIcon=e.foldingManualCollapsedIcon=e.foldingCollapsedIcon=e.foldingExpandedIcon=void 0;const b=(0,S.registerColor)(\"editor.foldBackground\",{light:(0,S.transparent)(S.editorSelectionBackground,.3),dark:(0,S.transparent)(S.editorSelectionBackground,.3),hcDark:null,hcLight:null},(0,E.localize)(0,null),!0);(0,S.registerColor)(\"editorGutter.foldingControlForeground\",{dark:S.iconForeground,light:S.iconForeground,hcDark:S.iconForeground,hcLight:S.iconForeground},(0,E.localize)(1,null)),e.foldingExpandedIcon=(0,p.registerIcon)(\"folding-expanded\",L.Codicon.chevronDown,(0,E.localize)(2,null)),e.foldingCollapsedIcon=(0,p.registerIcon)(\"folding-collapsed\",L.Codicon.chevronRight,(0,E.localize)(3,null)),e.foldingManualCollapsedIcon=(0,p.registerIcon)(\"folding-manual-collapsed\",e.foldingCollapsedIcon,(0,E.localize)(4,null)),e.foldingManualExpandedIcon=(0,p.registerIcon)(\"folding-manual-expanded\",e.foldingExpandedIcon,(0,E.localize)(5,null));const a={color:(0,_.themeColorFromId)(b),position:k.MinimapPosition.Inline},i=(0,E.localize)(6,null),n=(0,E.localize)(7,null);class t{constructor(u){this.editor=u,this.showFoldingControls=\"mouseover\",this.showFoldingHighlights=!0}getDecorationOption(u,f,c){return f?t.HIDDEN_RANGE_DECORATION:this.showFoldingControls===\"never\"?u?this.showFoldingHighlights?t.NO_CONTROLS_COLLAPSED_HIGHLIGHTED_RANGE_DECORATION:t.NO_CONTROLS_COLLAPSED_RANGE_DECORATION:t.NO_CONTROLS_EXPANDED_RANGE_DECORATION:u?c?this.showFoldingHighlights?t.MANUALLY_COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION:t.MANUALLY_COLLAPSED_VISUAL_DECORATION:this.showFoldingHighlights?t.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION:t.COLLAPSED_VISUAL_DECORATION:this.showFoldingControls===\"mouseover\"?c?t.MANUALLY_EXPANDED_AUTO_HIDE_VISUAL_DECORATION:t.EXPANDED_AUTO_HIDE_VISUAL_DECORATION:c?t.MANUALLY_EXPANDED_VISUAL_DECORATION:t.EXPANDED_VISUAL_DECORATION}changeDecorations(u){return this.editor.changeDecorations(u)}removeDecorations(u){this.editor.removeDecorations(u)}}e.FoldingDecorationProvider=t,t.COLLAPSED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:\"folding-collapsed-visual-decoration\",stickiness:0,afterContentClassName:\"inline-folded\",isWholeLine:!0,linesDecorationsTooltip:i,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingCollapsedIcon)}),t.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:\"folding-collapsed-highlighted-visual-decoration\",stickiness:0,afterContentClassName:\"inline-folded\",className:\"folded-background\",minimap:a,isWholeLine:!0,linesDecorationsTooltip:i,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingCollapsedIcon)}),t.MANUALLY_COLLAPSED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:\"folding-manually-collapsed-visual-decoration\",stickiness:0,afterContentClassName:\"inline-folded\",isWholeLine:!0,linesDecorationsTooltip:i,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingManualCollapsedIcon)}),t.MANUALLY_COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:\"folding-manually-collapsed-highlighted-visual-decoration\",stickiness:0,afterContentClassName:\"inline-folded\",className:\"folded-background\",minimap:a,isWholeLine:!0,linesDecorationsTooltip:i,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingManualCollapsedIcon)}),t.NO_CONTROLS_COLLAPSED_RANGE_DECORATION=y.ModelDecorationOptions.register({description:\"folding-no-controls-range-decoration\",stickiness:0,afterContentClassName:\"inline-folded\",isWholeLine:!0,linesDecorationsTooltip:i}),t.NO_CONTROLS_COLLAPSED_HIGHLIGHTED_RANGE_DECORATION=y.ModelDecorationOptions.register({description:\"folding-no-controls-range-decoration\",stickiness:0,afterContentClassName:\"inline-folded\",className:\"folded-background\",minimap:a,isWholeLine:!0,linesDecorationsTooltip:i}),t.EXPANDED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:\"folding-expanded-visual-decoration\",stickiness:1,isWholeLine:!0,firstLineDecorationClassName:\"alwaysShowFoldIcons \"+v.ThemeIcon.asClassName(e.foldingExpandedIcon),linesDecorationsTooltip:n}),t.EXPANDED_AUTO_HIDE_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:\"folding-expanded-auto-hide-visual-decoration\",stickiness:1,isWholeLine:!0,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingExpandedIcon),linesDecorationsTooltip:n}),t.MANUALLY_EXPANDED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:\"folding-manually-expanded-visual-decoration\",stickiness:0,isWholeLine:!0,firstLineDecorationClassName:\"alwaysShowFoldIcons \"+v.ThemeIcon.asClassName(e.foldingManualExpandedIcon),linesDecorationsTooltip:n}),t.MANUALLY_EXPANDED_AUTO_HIDE_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:\"folding-manually-expanded-auto-hide-visual-decoration\",stickiness:0,isWholeLine:!0,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingManualExpandedIcon),linesDecorationsTooltip:n}),t.NO_CONTROLS_EXPANDED_RANGE_DECORATION=y.ModelDecorationOptions.register({description:\"folding-no-controls-range-decoration\",stickiness:0,isWholeLine:!0}),t.HIDDEN_RANGE_DECORATION=y.ModelDecorationOptions.register({description:\"folding-hidden-range-decoration\",stickiness:1})}),define(se[261],oe([1,0,14,19,12,65,2,11,20,127,16,21,31,32,302,558,303,674,15,378,185,304,50,79,61,18,6,25,22,51,27,461]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T){\"use strict\";var A;Object.defineProperty(e,\"__esModule\",{value:!0}),e.RangesLimitReporter=e.FoldingController=void 0;const P=new c.RawContextKey(\"foldingEnabled\",!1);let N=A=class extends S.Disposable{static get(G){return G.getContribution(A.ID)}static getFoldingRangeProviders(G,z){var H,Y;const j=G.foldingRangeProvider.ordered(z);return(Y=(H=A._foldingRangeSelector)===null||H===void 0?void 0:H.call(A,j,z))!==null&&Y!==void 0?Y:j}constructor(G,z,H,Y,j,Z){super(),this.contextKeyService=z,this.languageConfigurationService=H,this.languageFeaturesService=Z,this.localToDispose=this._register(new S.DisposableStore),this.editor=G,this._foldingLimitReporter=new M(G);const ee=this.editor.getOptions();this._isEnabled=ee.get(43),this._useFoldingProviders=ee.get(44)!==\"indentation\",this._unfoldOnClickAfterEndOfLine=ee.get(48),this._restoringViewState=!1,this._currentModelHasFoldedImports=!1,this._foldingImportsByDefault=ee.get(46),this.updateDebounceInfo=j.for(Z.foldingRangeProvider,\"Folding\",{min:200}),this.foldingModel=null,this.hiddenRangeModel=null,this.rangeProvider=null,this.foldingRegionPromise=null,this.foldingModelPromise=null,this.updateScheduler=null,this.cursorChangedScheduler=null,this.mouseDownInfo=null,this.foldingDecorationProvider=new d.FoldingDecorationProvider(G),this.foldingDecorationProvider.showFoldingControls=ee.get(109),this.foldingDecorationProvider.showFoldingHighlights=ee.get(45),this.foldingEnabled=P.bindTo(this.contextKeyService),this.foldingEnabled.set(this._isEnabled),this._register(this.editor.onDidChangeModel(()=>this.onModelChanged())),this._register(this.editor.onDidChangeConfiguration(le=>{if(le.hasChanged(43)&&(this._isEnabled=this.editor.getOptions().get(43),this.foldingEnabled.set(this._isEnabled),this.onModelChanged()),le.hasChanged(47)&&this.onModelChanged(),le.hasChanged(109)||le.hasChanged(45)){const ue=this.editor.getOptions();this.foldingDecorationProvider.showFoldingControls=ue.get(109),this.foldingDecorationProvider.showFoldingHighlights=ue.get(45),this.triggerFoldingModelChanged()}le.hasChanged(44)&&(this._useFoldingProviders=this.editor.getOptions().get(44)!==\"indentation\",this.onFoldingStrategyChanged()),le.hasChanged(48)&&(this._unfoldOnClickAfterEndOfLine=this.editor.getOptions().get(48)),le.hasChanged(46)&&(this._foldingImportsByDefault=this.editor.getOptions().get(46))})),this.onModelChanged()}saveViewState(){const G=this.editor.getModel();if(!G||!this._isEnabled||G.isTooLargeForTokenization())return{};if(this.foldingModel){const z=this.foldingModel.getMemento(),H=this.rangeProvider?this.rangeProvider.id:void 0;return{collapsedRegions:z,lineCount:G.getLineCount(),provider:H,foldedImports:this._currentModelHasFoldedImports}}}restoreViewState(G){const z=this.editor.getModel();if(!(!z||!this._isEnabled||z.isTooLargeForTokenization()||!this.hiddenRangeModel)&&G&&(this._currentModelHasFoldedImports=!!G.foldedImports,G.collapsedRegions&&G.collapsedRegions.length>0&&this.foldingModel)){this._restoringViewState=!0;try{this.foldingModel.applyMemento(G.collapsedRegions)}finally{this._restoringViewState=!1}}}onModelChanged(){this.localToDispose.clear();const G=this.editor.getModel();!this._isEnabled||!G||G.isTooLargeForTokenization()||(this._currentModelHasFoldedImports=!1,this.foldingModel=new t.FoldingModel(G,this.foldingDecorationProvider),this.localToDispose.add(this.foldingModel),this.hiddenRangeModel=new r.HiddenRangeModel(this.foldingModel),this.localToDispose.add(this.hiddenRangeModel),this.localToDispose.add(this.hiddenRangeModel.onDidChange(z=>this.onHiddenRangesChanges(z))),this.updateScheduler=new L.Delayer(this.updateDebounceInfo.get(G)),this.cursorChangedScheduler=new L.RunOnceScheduler(()=>this.revealCursor(),200),this.localToDispose.add(this.cursorChangedScheduler),this.localToDispose.add(this.languageFeaturesService.foldingRangeProvider.onDidChange(()=>this.onFoldingStrategyChanged())),this.localToDispose.add(this.editor.onDidChangeModelLanguageConfiguration(()=>this.onFoldingStrategyChanged())),this.localToDispose.add(this.editor.onDidChangeModelContent(z=>this.onDidChangeModelContent(z))),this.localToDispose.add(this.editor.onDidChangeCursorPosition(()=>this.onCursorPositionChanged())),this.localToDispose.add(this.editor.onMouseDown(z=>this.onEditorMouseDown(z))),this.localToDispose.add(this.editor.onMouseUp(z=>this.onEditorMouseUp(z))),this.localToDispose.add({dispose:()=>{var z,H;this.foldingRegionPromise&&(this.foldingRegionPromise.cancel(),this.foldingRegionPromise=null),(z=this.updateScheduler)===null||z===void 0||z.cancel(),this.updateScheduler=null,this.foldingModel=null,this.foldingModelPromise=null,this.hiddenRangeModel=null,this.cursorChangedScheduler=null,(H=this.rangeProvider)===null||H===void 0||H.dispose(),this.rangeProvider=null}}),this.triggerFoldingModelChanged())}onFoldingStrategyChanged(){var G;(G=this.rangeProvider)===null||G===void 0||G.dispose(),this.rangeProvider=null,this.triggerFoldingModelChanged()}getRangeProvider(G){if(this.rangeProvider)return this.rangeProvider;const z=new u.IndentRangeProvider(G,this.languageConfigurationService,this._foldingLimitReporter);if(this.rangeProvider=z,this._useFoldingProviders&&this.foldingModel){const H=A.getFoldingRangeProviders(this.languageFeaturesService,G);H.length>0&&(this.rangeProvider=new l.SyntaxRangeProvider(G,H,()=>this.triggerFoldingModelChanged(),this._foldingLimitReporter,z))}return this.rangeProvider}getFoldingModel(){return this.foldingModelPromise}onDidChangeModelContent(G){var z;(z=this.hiddenRangeModel)===null||z===void 0||z.notifyChangeModelContent(G),this.triggerFoldingModelChanged()}triggerFoldingModelChanged(){this.updateScheduler&&(this.foldingRegionPromise&&(this.foldingRegionPromise.cancel(),this.foldingRegionPromise=null),this.foldingModelPromise=this.updateScheduler.trigger(()=>{const G=this.foldingModel;if(!G)return null;const z=new h.StopWatch,H=this.getRangeProvider(G.textModel),Y=this.foldingRegionPromise=(0,L.createCancelablePromise)(j=>H.compute(j));return Y.then(j=>{if(j&&Y===this.foldingRegionPromise){let Z;if(this._foldingImportsByDefault&&!this._currentModelHasFoldedImports){const ce=j.setCollapsedAllOfType(i.FoldingRangeKind.Imports.value,!0);ce&&(Z=v.StableEditorScrollState.capture(this.editor),this._currentModelHasFoldedImports=ce)}const ee=this.editor.getSelections(),le=ee?ee.map(ce=>ce.startLineNumber):[];G.update(j,le),Z?.restore(this.editor);const ue=this.updateDebounceInfo.update(G.textModel,z.elapsed());this.updateScheduler&&(this.updateScheduler.defaultDelay=ue)}return G})}).then(void 0,G=>((0,y.onUnexpectedError)(G),null)))}onHiddenRangesChanges(G){if(this.hiddenRangeModel&&G.length&&!this._restoringViewState){const z=this.editor.getSelections();z&&this.hiddenRangeModel.adjustSelections(z)&&this.editor.setSelections(z)}this.editor.setHiddenAreas(G,this)}onCursorPositionChanged(){this.hiddenRangeModel&&this.hiddenRangeModel.hasRanges()&&this.cursorChangedScheduler.schedule()}revealCursor(){const G=this.getFoldingModel();G&&G.then(z=>{if(z){const H=this.editor.getSelections();if(H&&H.length>0){const Y=[];for(const j of H){const Z=j.selectionStartLineNumber;this.hiddenRangeModel&&this.hiddenRangeModel.isHidden(Z)&&Y.push(...z.getAllRegionsAtLine(Z,ee=>ee.isCollapsed&&Z>ee.startLineNumber))}Y.length&&(z.toggleCollapseState(Y),this.reveal(H[0].getPosition()))}}}).then(void 0,y.onUnexpectedError)}onEditorMouseDown(G){if(this.mouseDownInfo=null,!this.hiddenRangeModel||!G.target||!G.target.range||!G.event.leftButton&&!G.event.middleButton)return;const z=G.target.range;let H=!1;switch(G.target.type){case 4:{const Y=G.target.detail,j=G.target.element.offsetLeft;if(Y.offsetX-j<4)return;H=!0;break}case 7:{if(this._unfoldOnClickAfterEndOfLine&&this.hiddenRangeModel.hasRanges()&&!G.target.detail.isAfterLines)break;return}case 6:{if(this.hiddenRangeModel.hasRanges()){const Y=this.editor.getModel();if(Y&&z.startColumn===Y.getLineMaxColumn(z.startLineNumber))break}return}default:return}this.mouseDownInfo={lineNumber:z.startLineNumber,iconClicked:H}}onEditorMouseUp(G){const z=this.foldingModel;if(!z||!this.mouseDownInfo||!G.target)return;const H=this.mouseDownInfo.lineNumber,Y=this.mouseDownInfo.iconClicked,j=G.target.range;if(!j||j.startLineNumber!==H)return;if(Y){if(G.target.type!==4)return}else{const ee=this.editor.getModel();if(!ee||j.startColumn!==ee.getLineMaxColumn(H))return}const Z=z.getRegionAtLine(H);if(Z&&Z.startLineNumber===H){const ee=Z.isCollapsed;if(Y||ee){const le=G.event.altKey;let ue=[];if(le){const ce=ve=>!ve.containedBy(Z)&&!Z.containedBy(ve),pe=z.getRegionsInside(null,ce);for(const ve of pe)ve.isCollapsed&&ue.push(ve);ue.length===0&&(ue=pe)}else{const ce=G.event.middleButton||G.event.shiftKey;if(ce)for(const pe of z.getRegionsInside(Z))pe.isCollapsed===ee&&ue.push(pe);(ee||!ce||ue.length===0)&&ue.push(Z)}z.toggleCollapseState(ue),this.reveal({lineNumber:H,column:1})}}}reveal(G){this.editor.revealPositionInCenterIfOutsideViewport(G,0)}};e.FoldingController=N,N.ID=\"editor.contrib.folding\",e.FoldingController=N=A=ke([ge(1,c.IContextKeyService),ge(2,n.ILanguageConfigurationService),ge(3,o.INotificationService),ge(4,g.ILanguageFeatureDebounceService),ge(5,m.ILanguageFeaturesService)],N);class M{constructor(G){this.editor=G,this._onDidChange=new C.Emitter,this._computed=0,this._limited=!1}get limit(){return this.editor.getOptions().get(47)}update(G,z){(G!==this._computed||z!==this._limited)&&(this._computed=G,this._limited=z,this._onDidChange.fire())}}e.RangesLimitReporter=M;class R extends b.EditorAction{runEditorCommand(G,z,H){const Y=G.get(n.ILanguageConfigurationService),j=N.get(z);if(!j)return;const Z=j.getFoldingModel();if(Z)return this.reportTelemetry(G,z),Z.then(ee=>{if(ee){this.invoke(j,ee,z,H,Y);const le=z.getSelection();le&&j.reveal(le.getStartPosition())}})}getSelectedLines(G){const z=G.getSelections();return z?z.map(H=>H.startLineNumber):[]}getLineNumbers(G,z){return G&&G.selectionLines?G.selectionLines.map(H=>H+1):this.getSelectedLines(z)}run(G,z){}}function x(U){if(!_.isUndefined(U)){if(!_.isObject(U))return!1;const G=U;if(!_.isUndefined(G.levels)&&!_.isNumber(G.levels)||!_.isUndefined(G.direction)&&!_.isString(G.direction)||!_.isUndefined(G.selectionLines)&&(!Array.isArray(G.selectionLines)||!G.selectionLines.every(_.isNumber)))return!1}return!0}class O extends R{constructor(){super({id:\"editor.unfold\",label:f.localize(0,null),alias:\"Unfold\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:3166,mac:{primary:2654},weight:100},metadata:{description:\"Unfold the content in the editor\",args:[{name:\"Unfold editor argument\",description:`Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t* 'levels': Number of levels to unfold. If not set, defaults to 1.\n\t\t\t\t\t\t* 'direction': If 'up', unfold given number of levels up otherwise unfolds down.\n\t\t\t\t\t\t* 'selectionLines': Array of the start lines (0-based) of the editor selections to apply the unfold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t`,constraint:x,schema:{type:\"object\",properties:{levels:{type:\"number\",default:1},direction:{type:\"string\",enum:[\"up\",\"down\"],default:\"down\"},selectionLines:{type:\"array\",items:{type:\"number\"}}}}}]}})}invoke(G,z,H,Y){const j=Y&&Y.levels||1,Z=this.getLineNumbers(Y,H);Y&&Y.direction===\"up\"?(0,t.setCollapseStateLevelsUp)(z,!1,j,Z):(0,t.setCollapseStateLevelsDown)(z,!1,j,Z)}}class B extends R{constructor(){super({id:\"editor.unfoldRecursively\",label:f.localize(1,null),alias:\"Unfold Recursively\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2142),weight:100}})}invoke(G,z,H,Y){(0,t.setCollapseStateLevelsDown)(z,!1,Number.MAX_VALUE,this.getSelectedLines(H))}}class W extends R{constructor(){super({id:\"editor.fold\",label:f.localize(2,null),alias:\"Fold\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:3164,mac:{primary:2652},weight:100},metadata:{description:\"Fold the content in the editor\",args:[{name:\"Fold editor argument\",description:`Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t\t* 'levels': Number of levels to fold.\n\t\t\t\t\t\t\t* 'direction': If 'up', folds given number of levels up otherwise folds down.\n\t\t\t\t\t\t\t* 'selectionLines': Array of the start lines (0-based) of the editor selections to apply the fold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t\tIf no levels or direction is set, folds the region at the locations or if already collapsed, the first uncollapsed parent instead.\n\t\t\t\t\t\t`,constraint:x,schema:{type:\"object\",properties:{levels:{type:\"number\"},direction:{type:\"string\",enum:[\"up\",\"down\"]},selectionLines:{type:\"array\",items:{type:\"number\"}}}}}]}})}invoke(G,z,H,Y){const j=this.getLineNumbers(Y,H),Z=Y&&Y.levels,ee=Y&&Y.direction;typeof Z!=\"number\"&&typeof ee!=\"string\"?(0,t.setCollapseStateUp)(z,!0,j):ee===\"up\"?(0,t.setCollapseStateLevelsUp)(z,!0,Z||1,j):(0,t.setCollapseStateLevelsDown)(z,!0,Z||1,j)}}class V extends R{constructor(){super({id:\"editor.toggleFold\",label:f.localize(3,null),alias:\"Toggle Fold\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2090),weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);(0,t.toggleCollapseState)(z,1,Y)}}class K extends R{constructor(){super({id:\"editor.foldRecursively\",label:f.localize(4,null),alias:\"Fold Recursively\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2140),weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);(0,t.setCollapseStateLevelsDown)(z,!0,Number.MAX_VALUE,Y)}}class F extends R{constructor(){super({id:\"editor.foldAllBlockComments\",label:f.localize(5,null),alias:\"Fold All Block Comments\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2138),weight:100}})}invoke(G,z,H,Y,j){if(z.regions.hasTypes())(0,t.setCollapseStateForType)(z,i.FoldingRangeKind.Comment.value,!0);else{const Z=H.getModel();if(!Z)return;const ee=j.getLanguageConfiguration(Z.getLanguageId()).comments;if(ee&&ee.blockCommentStartToken){const le=new RegExp(\"^\\\\s*\"+(0,p.escapeRegExpCharacters)(ee.blockCommentStartToken));(0,t.setCollapseStateForMatchingLines)(z,le,!0)}}}}class q extends R{constructor(){super({id:\"editor.foldAllMarkerRegions\",label:f.localize(6,null),alias:\"Fold All Regions\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2077),weight:100}})}invoke(G,z,H,Y,j){if(z.regions.hasTypes())(0,t.setCollapseStateForType)(z,i.FoldingRangeKind.Region.value,!0);else{const Z=H.getModel();if(!Z)return;const ee=j.getLanguageConfiguration(Z.getLanguageId()).foldingRules;if(ee&&ee.markers&&ee.markers.start){const le=new RegExp(ee.markers.start);(0,t.setCollapseStateForMatchingLines)(z,le,!0)}}}}class ie extends R{constructor(){super({id:\"editor.unfoldAllMarkerRegions\",label:f.localize(7,null),alias:\"Unfold All Regions\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2078),weight:100}})}invoke(G,z,H,Y,j){if(z.regions.hasTypes())(0,t.setCollapseStateForType)(z,i.FoldingRangeKind.Region.value,!1);else{const Z=H.getModel();if(!Z)return;const ee=j.getLanguageConfiguration(Z.getLanguageId()).foldingRules;if(ee&&ee.markers&&ee.markers.start){const le=new RegExp(ee.markers.start);(0,t.setCollapseStateForMatchingLines)(z,le,!1)}}}}class ae extends R{constructor(){super({id:\"editor.foldAllExcept\",label:f.localize(8,null),alias:\"Fold All Except Selected\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2136),weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);(0,t.setCollapseStateForRest)(z,!0,Y)}}class ne extends R{constructor(){super({id:\"editor.unfoldAllExcept\",label:f.localize(9,null),alias:\"Unfold All Except Selected\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2134),weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);(0,t.setCollapseStateForRest)(z,!1,Y)}}class $ extends R{constructor(){super({id:\"editor.foldAll\",label:f.localize(10,null),alias:\"Fold All\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2069),weight:100}})}invoke(G,z,H){(0,t.setCollapseStateLevelsDown)(z,!0)}}class J extends R{constructor(){super({id:\"editor.unfoldAll\",label:f.localize(11,null),alias:\"Unfold All\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2088),weight:100}})}invoke(G,z,H){(0,t.setCollapseStateLevelsDown)(z,!1)}}class Q extends R{getFoldingLevel(){return parseInt(this.id.substr(Q.ID_PREFIX.length))}invoke(G,z,H){(0,t.setCollapseStateAtLevel)(z,this.getFoldingLevel(),!0,this.getSelectedLines(H))}}Q.ID_PREFIX=\"editor.foldLevel\",Q.ID=U=>Q.ID_PREFIX+U;class re extends R{constructor(){super({id:\"editor.gotoParentFold\",label:f.localize(12,null),alias:\"Go to Parent Fold\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);if(Y.length>0){const j=(0,t.getParentFoldLine)(Y[0],z);j!==null&&H.setSelection({startLineNumber:j,startColumn:1,endLineNumber:j,endColumn:1})}}}class de extends R{constructor(){super({id:\"editor.gotoPreviousFold\",label:f.localize(13,null),alias:\"Go to Previous Folding Range\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);if(Y.length>0){const j=(0,t.getPreviousFoldLine)(Y[0],z);j!==null&&H.setSelection({startLineNumber:j,startColumn:1,endLineNumber:j,endColumn:1})}}}class he extends R{constructor(){super({id:\"editor.gotoNextFold\",label:f.localize(14,null),alias:\"Go to Next Folding Range\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);if(Y.length>0){const j=(0,t.getNextFoldLine)(Y[0],z);j!==null&&H.setSelection({startLineNumber:j,startColumn:1,endLineNumber:j,endColumn:1})}}}class me extends R{constructor(){super({id:\"editor.createFoldingRangeFromSelection\",label:f.localize(15,null),alias:\"Create Folding Range from Selection\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2135),weight:100}})}invoke(G,z,H){var Y;const j=[],Z=H.getSelections();if(Z){for(const ee of Z){let le=ee.endLineNumber;ee.endColumn===1&&--le,le>ee.startLineNumber&&(j.push({startLineNumber:ee.startLineNumber,endLineNumber:le,type:void 0,isCollapsed:!0,source:1}),H.setSelection({startLineNumber:ee.startLineNumber,startColumn:1,endLineNumber:ee.startLineNumber,endColumn:1}))}if(j.length>0){j.sort((le,ue)=>le.startLineNumber-ue.startLineNumber);const ee=s.FoldingRegions.sanitizeAndMerge(z.regions,j,(Y=H.getModel())===null||Y===void 0?void 0:Y.getLineCount());z.updatePost(s.FoldingRegions.fromFoldRanges(ee))}}}}class X extends R{constructor(){super({id:\"editor.removeManualFoldingRanges\",label:f.localize(16,null),alias:\"Remove Manual Folding Ranges\",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2137),weight:100}})}invoke(G,z,H){const Y=H.getSelections();if(Y){const j=[];for(const Z of Y){const{startLineNumber:ee,endLineNumber:le}=Z;j.push(le>=ee?{startLineNumber:ee,endLineNumber:le}:{endLineNumber:le,startLineNumber:ee})}z.removeManualRanges(j),G.triggerFoldingModelChanged()}}}(0,b.registerEditorContribution)(N.ID,N,0),(0,b.registerEditorAction)(O),(0,b.registerEditorAction)(B),(0,b.registerEditorAction)(W),(0,b.registerEditorAction)(K),(0,b.registerEditorAction)($),(0,b.registerEditorAction)(J),(0,b.registerEditorAction)(F),(0,b.registerEditorAction)(q),(0,b.registerEditorAction)(ie),(0,b.registerEditorAction)(ae),(0,b.registerEditorAction)(ne),(0,b.registerEditorAction)(V),(0,b.registerEditorAction)(re),(0,b.registerEditorAction)(de),(0,b.registerEditorAction)(he),(0,b.registerEditorAction)(me),(0,b.registerEditorAction)(X);for(let U=1;U<=7;U++)(0,b.registerInstantiatedEditorAction)(new Q({id:Q.ID(U),label:f.localize(17,null,U),alias:`Fold Level ${U}`,precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2048|21+U),weight:100}}));w.CommandsRegistry.registerCommand(\"_executeFoldingRangeProvider\",async function(U,...G){const[z]=G;if(!(z instanceof D.URI))throw(0,y.illegalArgument)();const H=U.get(m.ILanguageFeaturesService),Y=U.get(I.IModelService).getModel(z);if(!Y)throw(0,y.illegalArgument)();const j=U.get(T.IConfigurationService);if(!j.getValue(\"editor.folding\",{resource:z}))return[];const Z=U.get(n.ILanguageConfigurationService),ee=j.getValue(\"editor.foldingStrategy\",{resource:z}),le={get limit(){return j.getValue(\"editor.foldingMaximumRegions\",{resource:z})},update:(Ce,Se)=>{}},ue=new u.IndentRangeProvider(Y,Z,le);let ce=ue;if(ee!==\"indentation\"){const Ce=N.getFoldingRangeProviders(H,Y);Ce.length&&(ce=new l.SyntaxRangeProvider(Y,Ce,()=>{},le,ue))}const pe=await ce.compute(k.CancellationToken.None),ve=[];try{if(pe)for(let Ce=0;Ce<pe.length;Ce++){const Se=pe.getType(Ce);ve.push({start:pe.getStartLineNumber(Ce),end:pe.getEndLineNumber(Ce),kind:Se?i.FoldingRangeKind.fromValue(Se):void 0})}return ve}finally{ce.dispose()}})}),define(se[379],oe([1,0,7,227,13,2,10,5,38,31,332,101,8,34,14,21,15,616,27,69]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d){\"use strict\";var s,l;Object.defineProperty(e,\"__esModule\",{value:!0}),e.EditorHoverStatusBar=e.ContentHoverWidget=e.ContentHoverController=void 0;const o=L.$;let g=s=class extends E.Disposable{constructor(R,x,O){super(),this._editor=R,this._instantiationService=x,this._keybindingService=O,this._currentResult=null,this._widget=this._register(this._instantiationService.createInstance(T,this._editor)),this._participants=[];for(const B of a.HoverParticipantRegistry.getAll())this._participants.push(this._instantiationService.createInstance(B,this._editor));this._participants.sort((B,W)=>B.hoverOrdinal-W.hoverOrdinal),this._computer=new P(this._editor,this._participants),this._hoverOperation=this._register(new b.HoverOperation(this._editor,this._computer)),this._register(this._hoverOperation.onResult(B=>{if(!this._computer.anchor)return;const W=B.hasLoadingMessage?this._addLoadingMessage(B.value):B.value;this._withResult(new h(this._computer.anchor,W,B.isComplete))})),this._register(L.addStandardDisposableListener(this._widget.getDomNode(),\"keydown\",B=>{B.equals(9)&&this.hide()})),this._register(v.TokenizationRegistry.onDidChange(()=>{this._widget.position&&this._currentResult&&this._setCurrentResult(this._currentResult)}))}_startShowingOrUpdateHover(R,x,O,B,W){return!this._widget.position||!this._currentResult?R?(this._startHoverOperationIfNecessary(R,x,O,B,!1),!0):!1:this._editor.getOption(60).sticky&&W&&this._widget.isMouseGettingCloser(W.event.posx,W.event.posy)?(R&&this._startHoverOperationIfNecessary(R,x,O,B,!0),!0):R?R&&this._currentResult.anchor.equals(R)?!0:R.canAdoptVisibleHover(this._currentResult.anchor,this._widget.position)?(this._setCurrentResult(this._currentResult.filter(R)),this._startHoverOperationIfNecessary(R,x,O,B,!1),!0):(this._setCurrentResult(null),this._startHoverOperationIfNecessary(R,x,O,B,!1),!0):(this._setCurrentResult(null),!1)}_startHoverOperationIfNecessary(R,x,O,B,W){this._computer.anchor&&this._computer.anchor.equals(R)||(this._hoverOperation.cancel(),this._computer.anchor=R,this._computer.shouldFocus=B,this._computer.source=O,this._computer.insistOnKeepingHoverVisible=W,this._hoverOperation.start(x))}_setCurrentResult(R){this._currentResult!==R&&(R&&R.messages.length===0&&(R=null),this._currentResult=R,this._currentResult?this._renderMessages(this._currentResult.anchor,this._currentResult.messages):this._widget.hide())}_addLoadingMessage(R){if(this._computer.anchor){for(const x of this._participants)if(x.createLoadingMessage){const O=x.createLoadingMessage(this._computer.anchor);if(O)return R.slice(0).concat([O])}}return R}_withResult(R){this._widget.position&&this._currentResult&&this._currentResult.isComplete&&(!R.isComplete||this._computer.insistOnKeepingHoverVisible&&R.messages.length===0)||this._setCurrentResult(R)}_renderMessages(R,x){const{showAtPosition:O,showAtSecondaryPosition:B,highlightRange:W}=s.computeHoverRanges(this._editor,R.range,x),V=new E.DisposableStore,K=V.add(new A(this._keybindingService)),F=document.createDocumentFragment();let q=null;const ie={fragment:F,statusBar:K,setColorPicker:ne=>q=ne,onContentsChanged:()=>this._widget.onContentsChanged(),setMinimumDimensions:ne=>this._widget.setMinimumDimensions(ne),hide:()=>this.hide()};for(const ne of this._participants){const $=x.filter(J=>J.owner===ne);$.length>0&&V.add(ne.renderHoverParts(ie,$))}const ae=x.some(ne=>ne.isBeforeContent);if(K.hasContent&&F.appendChild(K.hoverElement),F.hasChildNodes()){if(W){const ne=this._editor.createDecorationsCollection();ne.set([{range:W,options:s._DECORATION_OPTIONS}]),V.add((0,E.toDisposable)(()=>{ne.clear()}))}this._widget.showAt(F,new C(R.initialMousePosX,R.initialMousePosY,q,O,B,this._editor.getOption(60).above,this._computer.shouldFocus,this._computer.source,ae,V))}else V.dispose()}static computeHoverRanges(R,x,O){let B=1;if(R.hasModel()){const ae=R._getViewModel(),ne=ae.coordinatesConverter,$=ne.convertModelRangeToViewRange(x),J=new S.Position($.startLineNumber,ae.getLineMinColumn($.startLineNumber));B=ne.convertViewPositionToModelPosition(J).column}const W=x.startLineNumber;let V=x.startColumn,K=O[0].range,F=null;for(const ae of O)K=p.Range.plusRange(K,ae.range),ae.range.startLineNumber===W&&ae.range.endLineNumber===W&&(V=Math.max(Math.min(V,ae.range.startColumn),B)),ae.forceShowAtRange&&(F=ae.range);const q=F?F.getStartPosition():new S.Position(W,x.startColumn),ie=F?F.getStartPosition():new S.Position(W,V);return{showAtPosition:q,showAtSecondaryPosition:ie,highlightRange:K}}showsOrWillShow(R){if(this._widget.isResizing)return!0;const x=[];for(const B of this._participants)if(B.suggestHoverAnchor){const W=B.suggestHoverAnchor(R);W&&x.push(W)}const O=R.target;if(O.type===6&&x.push(new a.HoverRangeAnchor(0,O.range,R.event.posx,R.event.posy)),O.type===7){const B=this._editor.getOption(50).typicalHalfwidthCharacterWidth/2;!O.detail.isAfterLines&&typeof O.detail.horizontalDistanceToText==\"number\"&&O.detail.horizontalDistanceToText<B&&x.push(new a.HoverRangeAnchor(0,O.range,R.event.posx,R.event.posy))}return x.length===0?this._startShowingOrUpdateHover(null,0,0,!1,R):(x.sort((B,W)=>W.priority-B.priority),this._startShowingOrUpdateHover(x[0],0,0,!1,R))}startShowingAtRange(R,x,O,B){this._startShowingOrUpdateHover(new a.HoverRangeAnchor(0,R,void 0,void 0),x,O,B,null)}containsNode(R){return R?this._widget.getDomNode().contains(R):!1}focus(){this._widget.focus()}scrollUp(){this._widget.scrollUp()}scrollDown(){this._widget.scrollDown()}scrollLeft(){this._widget.scrollLeft()}scrollRight(){this._widget.scrollRight()}pageUp(){this._widget.pageUp()}pageDown(){this._widget.pageDown()}goToTop(){this._widget.goToTop()}goToBottom(){this._widget.goToBottom()}hide(){this._computer.anchor=null,this._hoverOperation.cancel(),this._setCurrentResult(null)}get isColorPickerVisible(){return this._widget.isColorPickerVisible}get isVisibleFromKeyboard(){return this._widget.isVisibleFromKeyboard}get isVisible(){return this._widget.isVisible}get isFocused(){return this._widget.isFocused}get isResizing(){return this._widget.isResizing}get widget(){return this._widget}};e.ContentHoverController=g,g._DECORATION_OPTIONS=_.ModelDecorationOptions.register({description:\"content-hover-highlight\",className:\"hoverHighlight\"}),e.ContentHoverController=g=s=ke([ge(1,i.IInstantiationService),ge(2,n.IKeybindingService)],g);class h{constructor(R,x,O){this.anchor=R,this.messages=x,this.isComplete=O}filter(R){const x=this.messages.filter(O=>O.isValidForHoverAnchor(R));return x.length===this.messages.length?this:new m(this,this.anchor,x,this.isComplete)}}class m extends h{constructor(R,x,O,B){super(x,O,B),this.original=R}filter(R){return this.original.filter(R)}}class C{constructor(R,x,O,B,W,V,K,F,q,ie){this.initialMousePosX=R,this.initialMousePosY=x,this.colorPicker=O,this.showAtPosition=B,this.showAtSecondaryPosition=W,this.preferAbove=V,this.stoleFocus=K,this.source=F,this.isBeforeContent=q,this.disposables=ie,this.closestMouseDistance=void 0}}const w=30,D=10,I=6;let T=l=class extends f.ResizableContentWidget{get isColorPickerVisible(){var R;return!!(!((R=this._visibleData)===null||R===void 0)&&R.colorPicker)}get isVisibleFromKeyboard(){var R;return((R=this._visibleData)===null||R===void 0?void 0:R.source)===1}get isVisible(){var R;return(R=this._hoverVisibleKey.get())!==null&&R!==void 0?R:!1}get isFocused(){var R;return(R=this._hoverFocusedKey.get())!==null&&R!==void 0?R:!1}constructor(R,x,O,B,W){const V=R.getOption(66)+8,K=150,F=new L.Dimension(K,V);super(R,F),this._configurationService=O,this._accessibilityService=B,this._keybindingService=W,this._hover=this._register(new k.HoverWidget),this._minimumSize=F,this._hoverVisibleKey=r.EditorContextKeys.hoverVisible.bindTo(x),this._hoverFocusedKey=r.EditorContextKeys.hoverFocused.bindTo(x),L.append(this._resizableNode.domNode,this._hover.containerDomNode),this._resizableNode.domNode.style.zIndex=\"50\",this._register(this._editor.onDidLayoutChange(()=>{this.isVisible&&this._updateMaxDimensions()})),this._register(this._editor.onDidChangeConfiguration(ie=>{ie.hasChanged(50)&&this._updateFont()}));const q=this._register(L.trackFocus(this._resizableNode.domNode));this._register(q.onDidFocus(()=>{this._hoverFocusedKey.set(!0)})),this._register(q.onDidBlur(()=>{this._hoverFocusedKey.set(!1)})),this._setHoverData(void 0),this._editor.addContentWidget(this)}dispose(){var R;super.dispose(),(R=this._visibleData)===null||R===void 0||R.disposables.dispose(),this._editor.removeContentWidget(this)}getId(){return l.ID}static _applyDimensions(R,x,O){const B=typeof x==\"number\"?`${x}px`:x,W=typeof O==\"number\"?`${O}px`:O;R.style.width=B,R.style.height=W}_setContentsDomNodeDimensions(R,x){const O=this._hover.contentsDomNode;return l._applyDimensions(O,R,x)}_setContainerDomNodeDimensions(R,x){const O=this._hover.containerDomNode;return l._applyDimensions(O,R,x)}_setHoverWidgetDimensions(R,x){this._setContentsDomNodeDimensions(R,x),this._setContainerDomNodeDimensions(R,x),this._layoutContentWidget()}static _applyMaxDimensions(R,x,O){const B=typeof x==\"number\"?`${x}px`:x,W=typeof O==\"number\"?`${O}px`:O;R.style.maxWidth=B,R.style.maxHeight=W}_setHoverWidgetMaxDimensions(R,x){l._applyMaxDimensions(this._hover.contentsDomNode,R,x),l._applyMaxDimensions(this._hover.containerDomNode,R,x),this._hover.containerDomNode.style.setProperty(\"--vscode-hover-maxWidth\",typeof R==\"number\"?`${R}px`:R),this._layoutContentWidget()}_hasHorizontalScrollbar(){const R=this._hover.scrollbar.getScrollDimensions();return R.scrollWidth>R.width}_adjustContentsBottomPadding(){const R=this._hover.contentsDomNode,x=`${this._hover.scrollbar.options.horizontalScrollbarSize}px`;R.style.paddingBottom!==x&&(R.style.paddingBottom=x)}_setAdjustedHoverWidgetDimensions(R){this._setHoverWidgetMaxDimensions(\"none\",\"none\");const x=R.width,O=R.height;this._setHoverWidgetDimensions(x,O),this._hasHorizontalScrollbar()&&(this._adjustContentsBottomPadding(),this._setContentsDomNodeDimensions(x,O-D))}_updateResizableNodeMaxDimensions(){var R,x;const O=(R=this._findMaximumRenderingWidth())!==null&&R!==void 0?R:1/0,B=(x=this._findMaximumRenderingHeight())!==null&&x!==void 0?x:1/0;this._resizableNode.maxSize=new L.Dimension(O,B),this._setHoverWidgetMaxDimensions(O,B)}_resize(R){var x,O;l._lastDimensions=new L.Dimension(R.width,R.height),this._setAdjustedHoverWidgetDimensions(R),this._resizableNode.layout(R.height,R.width),this._updateResizableNodeMaxDimensions(),this._hover.scrollbar.scanDomNode(),this._editor.layoutContentWidget(this),(O=(x=this._visibleData)===null||x===void 0?void 0:x.colorPicker)===null||O===void 0||O.layout()}_findAvailableSpaceVertically(){var R;const x=(R=this._visibleData)===null||R===void 0?void 0:R.showAtPosition;if(x)return this._positionPreference===1?this._availableVerticalSpaceAbove(x):this._availableVerticalSpaceBelow(x)}_findMaximumRenderingHeight(){const R=this._findAvailableSpaceVertically();if(!R)return;let x=I;return Array.from(this._hover.contentsDomNode.children).forEach(O=>{x+=O.clientHeight}),this._hasHorizontalScrollbar()&&(x+=D),Math.min(R,x)}_isHoverTextOverflowing(){this._hover.containerDomNode.style.setProperty(\"--vscode-hover-whiteSpace\",\"nowrap\"),this._hover.containerDomNode.style.setProperty(\"--vscode-hover-sourceWhiteSpace\",\"nowrap\");const R=Array.from(this._hover.contentsDomNode.children).some(x=>x.scrollWidth>x.clientWidth);return this._hover.containerDomNode.style.removeProperty(\"--vscode-hover-whiteSpace\"),this._hover.containerDomNode.style.removeProperty(\"--vscode-hover-sourceWhiteSpace\"),R}_findMaximumRenderingWidth(){if(!this._editor||!this._editor.hasModel())return;const R=this._isHoverTextOverflowing(),x=typeof this._contentWidth>\"u\"?0:this._contentWidth-2;return R||this._hover.containerDomNode.clientWidth<x?L.getClientArea(this._hover.containerDomNode.ownerDocument.body).width-14:this._hover.containerDomNode.clientWidth+2}isMouseGettingCloser(R,x){if(!this._visibleData)return!1;if(typeof this._visibleData.initialMousePosX>\"u\"||typeof this._visibleData.initialMousePosY>\"u\")return this._visibleData.initialMousePosX=R,this._visibleData.initialMousePosY=x,!1;const O=L.getDomNodePagePosition(this.getDomNode());typeof this._visibleData.closestMouseDistance>\"u\"&&(this._visibleData.closestMouseDistance=N(this._visibleData.initialMousePosX,this._visibleData.initialMousePosY,O.left,O.top,O.width,O.height));const B=N(R,x,O.left,O.top,O.width,O.height);return B>this._visibleData.closestMouseDistance+4?!1:(this._visibleData.closestMouseDistance=Math.min(this._visibleData.closestMouseDistance,B),!0)}_setHoverData(R){var x;(x=this._visibleData)===null||x===void 0||x.disposables.dispose(),this._visibleData=R,this._hoverVisibleKey.set(!!R),this._hover.containerDomNode.classList.toggle(\"hidden\",!R)}_updateFont(){const{fontSize:R,lineHeight:x}=this._editor.getOption(50),O=this._hover.contentsDomNode;O.style.fontSize=`${R}px`,O.style.lineHeight=`${x/R}`,Array.prototype.slice.call(this._hover.contentsDomNode.getElementsByClassName(\"code\")).forEach(W=>this._editor.applyFontInfo(W))}_updateContent(R){const x=this._hover.contentsDomNode;x.style.paddingBottom=\"\",x.textContent=\"\",x.appendChild(R)}_layoutContentWidget(){this._editor.layoutContentWidget(this),this._hover.onContentsChanged()}_updateMaxDimensions(){const R=Math.max(this._editor.getLayoutInfo().height/4,250,l._lastDimensions.height),x=Math.max(this._editor.getLayoutInfo().width*.66,500,l._lastDimensions.width);this._setHoverWidgetMaxDimensions(x,R)}_render(R,x){this._setHoverData(x),this._updateFont(),this._updateContent(R),this._updateMaxDimensions(),this.onContentsChanged(),this._editor.render()}getPosition(){var R;return this._visibleData?{position:this._visibleData.showAtPosition,secondaryPosition:this._visibleData.showAtSecondaryPosition,positionAffinity:this._visibleData.isBeforeContent?3:void 0,preference:[(R=this._positionPreference)!==null&&R!==void 0?R:1]}:null}showAt(R,x){var O,B,W,V;if(!this._editor||!this._editor.hasModel())return;this._render(R,x);const K=L.getTotalHeight(this._hover.containerDomNode),F=x.showAtPosition;this._positionPreference=(O=this._findPositionPreference(K,F))!==null&&O!==void 0?O:1,this.onContentsChanged(),x.stoleFocus&&this._hover.containerDomNode.focus(),(B=x.colorPicker)===null||B===void 0||B.layout();const ie=this._hover.containerDomNode.ownerDocument.activeElement===this._hover.containerDomNode&&(0,k.getHoverAccessibleViewHint)(this._configurationService.getValue(\"accessibility.verbosity.hover\")===!0&&this._accessibilityService.isScreenReaderOptimized(),(V=(W=this._keybindingService.lookupKeybinding(\"editor.action.accessibleView\"))===null||W===void 0?void 0:W.getAriaLabel())!==null&&V!==void 0?V:\"\");ie&&(this._hover.contentsDomNode.ariaLabel=this._hover.contentsDomNode.textContent+\", \"+ie)}hide(){if(!this._visibleData)return;const R=this._visibleData.stoleFocus||this._hoverFocusedKey.get();this._setHoverData(void 0),this._resizableNode.maxSize=new L.Dimension(1/0,1/0),this._resizableNode.clearSashHoverState(),this._hoverFocusedKey.set(!1),this._editor.layoutContentWidget(this),R&&this._editor.focus()}_removeConstraintsRenderNormally(){const R=this._editor.getLayoutInfo();this._resizableNode.layout(R.height,R.width),this._setHoverWidgetDimensions(\"auto\",\"auto\")}_adjustHoverHeightForScrollbar(R){var x;const O=this._hover.containerDomNode,B=this._hover.contentsDomNode,W=(x=this._findMaximumRenderingHeight())!==null&&x!==void 0?x:1/0;this._setContainerDomNodeDimensions(L.getTotalWidth(O),Math.min(W,R)),this._setContentsDomNodeDimensions(L.getTotalWidth(B),Math.min(W,R-D))}setMinimumDimensions(R){this._minimumSize=new L.Dimension(Math.max(this._minimumSize.width,R.width),Math.max(this._minimumSize.height,R.height)),this._updateMinimumWidth()}_updateMinimumWidth(){const R=typeof this._contentWidth>\"u\"?this._minimumSize.width:Math.min(this._contentWidth,this._minimumSize.width);this._resizableNode.minSize=new L.Dimension(R,this._minimumSize.height)}onContentsChanged(){var R;this._removeConstraintsRenderNormally();const x=this._hover.containerDomNode;let O=L.getTotalHeight(x),B=L.getTotalWidth(x);if(this._resizableNode.layout(O,B),this._setHoverWidgetDimensions(B,O),O=L.getTotalHeight(x),B=L.getTotalWidth(x),this._contentWidth=B,this._updateMinimumWidth(),this._resizableNode.layout(O,B),this._hasHorizontalScrollbar()&&(this._adjustContentsBottomPadding(),this._adjustHoverHeightForScrollbar(O)),!((R=this._visibleData)===null||R===void 0)&&R.showAtPosition){const W=L.getTotalHeight(this._hover.containerDomNode);this._positionPreference=this._findPositionPreference(W,this._visibleData.showAtPosition)}this._layoutContentWidget()}focus(){this._hover.containerDomNode.focus()}scrollUp(){const R=this._hover.scrollbar.getScrollPosition().scrollTop,x=this._editor.getOption(50);this._hover.scrollbar.setScrollPosition({scrollTop:R-x.lineHeight})}scrollDown(){const R=this._hover.scrollbar.getScrollPosition().scrollTop,x=this._editor.getOption(50);this._hover.scrollbar.setScrollPosition({scrollTop:R+x.lineHeight})}scrollLeft(){const R=this._hover.scrollbar.getScrollPosition().scrollLeft;this._hover.scrollbar.setScrollPosition({scrollLeft:R-w})}scrollRight(){const R=this._hover.scrollbar.getScrollPosition().scrollLeft;this._hover.scrollbar.setScrollPosition({scrollLeft:R+w})}pageUp(){const R=this._hover.scrollbar.getScrollPosition().scrollTop,x=this._hover.scrollbar.getScrollDimensions().height;this._hover.scrollbar.setScrollPosition({scrollTop:R-x})}pageDown(){const R=this._hover.scrollbar.getScrollPosition().scrollTop,x=this._hover.scrollbar.getScrollDimensions().height;this._hover.scrollbar.setScrollPosition({scrollTop:R+x})}goToTop(){this._hover.scrollbar.setScrollPosition({scrollTop:0})}goToBottom(){this._hover.scrollbar.setScrollPosition({scrollTop:this._hover.scrollbar.getScrollDimensions().scrollHeight})}};e.ContentHoverWidget=T,T.ID=\"editor.contrib.resizableContentHoverWidget\",T._lastDimensions=new L.Dimension(0,0),e.ContentHoverWidget=T=l=ke([ge(1,u.IContextKeyService),ge(2,c.IConfigurationService),ge(3,d.IAccessibilityService),ge(4,n.IKeybindingService)],T);let A=class extends E.Disposable{get hasContent(){return this._hasContent}constructor(R){super(),this._keybindingService=R,this._hasContent=!1,this.hoverElement=o(\"div.hover-row.status-bar\"),this.actionsElement=L.append(this.hoverElement,o(\"div.actions\"))}addAction(R){const x=this._keybindingService.lookupKeybinding(R.commandId),O=x?x.getLabel():null;return this._hasContent=!0,this._register(k.HoverAction.render(this.actionsElement,R,O))}append(R){const x=L.append(this.actionsElement,R);return this._hasContent=!0,x}};e.EditorHoverStatusBar=A,e.EditorHoverStatusBar=A=ke([ge(0,n.IKeybindingService)],A);class P{get anchor(){return this._anchor}set anchor(R){this._anchor=R}get shouldFocus(){return this._shouldFocus}set shouldFocus(R){this._shouldFocus=R}get source(){return this._source}set source(R){this._source=R}get insistOnKeepingHoverVisible(){return this._insistOnKeepingHoverVisible}set insistOnKeepingHoverVisible(R){this._insistOnKeepingHoverVisible=R}constructor(R,x){this._editor=R,this._participants=x,this._anchor=null,this._shouldFocus=!1,this._source=0,this._insistOnKeepingHoverVisible=!1}static _getLineDecorations(R,x){if(x.type!==1&&!x.supportsMarkerHover)return[];const O=R.getModel(),B=x.range.startLineNumber;if(B>O.getLineCount())return[];const W=O.getLineMaxColumn(B);return R.getLineDecorations(B).filter(V=>{if(V.options.isWholeLine)return!0;const K=V.range.startLineNumber===B?V.range.startColumn:1,F=V.range.endLineNumber===B?V.range.endColumn:W;if(V.options.showIfCollapsed){if(K>x.range.startColumn+1||x.range.endColumn-1>F)return!1}else if(K>x.range.startColumn||x.range.endColumn>F)return!1;return!0})}computeAsync(R){const x=this._anchor;if(!this._editor.hasModel()||!x)return t.AsyncIterableObject.EMPTY;const O=P._getLineDecorations(this._editor,x);return t.AsyncIterableObject.merge(this._participants.map(B=>B.computeAsync?B.computeAsync(x,O,R):t.AsyncIterableObject.EMPTY))}computeSync(){if(!this._editor.hasModel()||!this._anchor)return[];const R=P._getLineDecorations(this._editor,this._anchor);let x=[];for(const O of this._participants)x=x.concat(O.computeSync(this._anchor,R));return(0,y.coalesce)(x)}}function N(M,R,x,O,B,W){const V=x+B/2,K=O+W/2,F=Math.max(Math.abs(M-V)-B/2,0),q=Math.max(Math.abs(R-K)-W/2,0);return Math.sqrt(F*F+q*q)}}),define(se[899],oe([1,0,2,376,8,379,34,6,18,16,21,15,51,32,353,7,201]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";var u,f;Object.defineProperty(e,\"__esModule\",{value:!0}),e.StandaloneColorPickerWidget=e.StandaloneColorPickerController=void 0;let c=u=class extends L.Disposable{constructor(h,m,C,w,D,I,T){super(),this._editor=h,this._modelService=C,this._keybindingService=w,this._instantiationService=D,this._languageFeatureService=I,this._languageConfigurationService=T,this._standaloneColorPickerWidget=null,this._standaloneColorPickerVisible=b.EditorContextKeys.standaloneColorPickerVisible.bindTo(m),this._standaloneColorPickerFocused=b.EditorContextKeys.standaloneColorPickerFocused.bindTo(m)}showOrFocus(){var h;this._editor.hasModel()&&(this._standaloneColorPickerVisible.get()?this._standaloneColorPickerFocused.get()||(h=this._standaloneColorPickerWidget)===null||h===void 0||h.focus():this._standaloneColorPickerWidget=new l(this._editor,this._standaloneColorPickerVisible,this._standaloneColorPickerFocused,this._instantiationService,this._modelService,this._keybindingService,this._languageFeatureService,this._languageConfigurationService))}hide(){var h;this._standaloneColorPickerFocused.set(!1),this._standaloneColorPickerVisible.set(!1),(h=this._standaloneColorPickerWidget)===null||h===void 0||h.hide(),this._editor.focus()}insertColor(){var h;(h=this._standaloneColorPickerWidget)===null||h===void 0||h.updateEditor(),this.hide()}static get(h){return h.getContribution(u.ID)}};e.StandaloneColorPickerController=c,c.ID=\"editor.contrib.standaloneColorPickerController\",e.StandaloneColorPickerController=c=u=ke([ge(1,a.IContextKeyService),ge(2,i.IModelService),ge(3,S.IKeybindingService),ge(4,y.IInstantiationService),ge(5,_.ILanguageFeaturesService),ge(6,n.ILanguageConfigurationService)],c),(0,v.registerEditorContribution)(c.ID,c,1);const d=8,s=22;let l=f=class extends L.Disposable{constructor(h,m,C,w,D,I,T,A){var P;super(),this._editor=h,this._standaloneColorPickerVisible=m,this._standaloneColorPickerFocused=C,this._modelService=D,this._keybindingService=I,this._languageFeaturesService=T,this._languageConfigurationService=A,this.allowEditorOverflow=!0,this._position=void 0,this._body=document.createElement(\"div\"),this._colorHover=null,this._selectionSetInEditor=!1,this._onResult=this._register(new p.Emitter),this.onResult=this._onResult.event,this._standaloneColorPickerVisible.set(!0),this._standaloneColorPickerParticipant=w.createInstance(k.StandaloneColorPickerParticipant,this._editor),this._position=(P=this._editor._getViewModel())===null||P===void 0?void 0:P.getPrimaryCursorState().modelState.position;const N=this._editor.getSelection(),M=N?{startLineNumber:N.startLineNumber,startColumn:N.startColumn,endLineNumber:N.endLineNumber,endColumn:N.endColumn}:{startLineNumber:0,endLineNumber:0,endColumn:0,startColumn:0},R=this._register(r.trackFocus(this._body));this._register(R.onDidBlur(x=>{this.hide()})),this._register(R.onDidFocus(x=>{this.focus()})),this._register(this._editor.onDidChangeCursorPosition(()=>{this._selectionSetInEditor?this._selectionSetInEditor=!1:this.hide()})),this._register(this._editor.onMouseMove(x=>{var O;const B=(O=x.target.element)===null||O===void 0?void 0:O.classList;B&&B.contains(\"colorpicker-color-decoration\")&&this.hide()})),this._register(this.onResult(x=>{this._render(x.value,x.foundInEditor)})),this._start(M),this._body.style.zIndex=\"50\",this._editor.addContentWidget(this)}updateEditor(){this._colorHover&&this._standaloneColorPickerParticipant.updateEditorModel(this._colorHover)}getId(){return f.ID}getDomNode(){return this._body}getPosition(){if(!this._position)return null;const h=this._editor.getOption(60).above;return{position:this._position,secondaryPosition:this._position,preference:h?[1,2]:[2,1],positionAffinity:2}}hide(){this.dispose(),this._standaloneColorPickerVisible.set(!1),this._standaloneColorPickerFocused.set(!1),this._editor.removeContentWidget(this),this._editor.focus()}focus(){this._standaloneColorPickerFocused.set(!0),this._body.focus()}async _start(h){const m=await this._computeAsync(h);m&&this._onResult.fire(new o(m.result,m.foundInEditor))}async _computeAsync(h){if(!this._editor.hasModel())return null;const m={range:h,color:{red:0,green:0,blue:0,alpha:1}},C=await this._standaloneColorPickerParticipant.createColorHover(m,new t.DefaultDocumentColorProvider(this._modelService,this._languageConfigurationService),this._languageFeaturesService.colorProvider);return C?{result:C.colorHover,foundInEditor:C.foundInEditor}:null}_render(h,m){const C=document.createDocumentFragment(),w=this._register(new E.EditorHoverStatusBar(this._keybindingService));let D;const I={fragment:C,statusBar:w,setColorPicker:B=>D=B,onContentsChanged:()=>{},hide:()=>this.hide()};if(this._colorHover=h,this._register(this._standaloneColorPickerParticipant.renderHoverParts(I,[h])),D===void 0)return;this._body.classList.add(\"standalone-colorpicker-body\"),this._body.style.maxHeight=Math.max(this._editor.getLayoutInfo().height/4,250)+\"px\",this._body.style.maxWidth=Math.max(this._editor.getLayoutInfo().width*.66,500)+\"px\",this._body.tabIndex=0,this._body.appendChild(C),D.layout();const T=D.body,A=T.saturationBox.domNode.clientWidth,P=T.domNode.clientWidth-A-s-d,N=D.body.enterButton;N?.onClicked(()=>{this.updateEditor(),this.hide()});const M=D.header,R=M.pickedColorNode;R.style.width=A+d+\"px\";const x=M.originalColorNode;x.style.width=P+\"px\";const O=D.header.closeButton;O?.onClicked(()=>{this.hide()}),m&&(N&&(N.button.textContent=\"Replace\"),this._selectionSetInEditor=!0,this._editor.setSelection(h.range)),this._editor.layoutContentWidget(this)}};e.StandaloneColorPickerWidget=l,l.ID=\"editor.contrib.standaloneColorPickerWidget\",e.StandaloneColorPickerWidget=l=f=ke([ge(3,y.IInstantiationService),ge(4,i.IModelService),ge(5,S.IKeybindingService),ge(6,_.ILanguageFeaturesService),ge(7,n.ILanguageConfigurationService)],l);class o{constructor(h,m){this.value=h,this.foundInEditor=m}}}),define(se[900],oe([1,0,16,662,899,21,30,201]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ShowOrFocusStandaloneColorPicker=void 0;class p extends L.EditorAction2{constructor(){super({id:\"editor.action.showOrFocusStandaloneColorPicker\",title:{value:(0,k.localize)(0,null),mnemonicTitle:(0,k.localize)(1,null),original:\"Show or Focus Standalone Color Picker\"},precondition:void 0,menu:[{id:S.MenuId.CommandPalette}]})}runEditorCommand(a,i){var n;(n=y.StandaloneColorPickerController.get(i))===null||n===void 0||n.showOrFocus()}}e.ShowOrFocusStandaloneColorPicker=p;class _ extends L.EditorAction{constructor(){super({id:\"editor.action.hideColorPicker\",label:(0,k.localize)(2,null),alias:\"Hide the Color Picker\",precondition:E.EditorContextKeys.standaloneColorPickerVisible.isEqualTo(!0),kbOpts:{primary:9,weight:100}})}run(a,i){var n;(n=y.StandaloneColorPickerController.get(i))===null||n===void 0||n.hide()}}class v extends L.EditorAction{constructor(){super({id:\"editor.action.insertColorWithStandaloneColorPicker\",label:(0,k.localize)(3,null),alias:\"Insert Color with Standalone Color Picker\",precondition:E.EditorContextKeys.standaloneColorPickerFocused.isEqualTo(!0),kbOpts:{primary:3,weight:100}})}run(a,i){var n;(n=y.StandaloneColorPickerController.get(i))===null||n===void 0||n.insertColor()}}(0,L.registerEditorAction)(_),(0,L.registerEditorAction)(v),(0,S.registerAction2)(p)}),define(se[901],oe([1,0,14,12,105,16,5,24,21,38,121,690,559,466]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";var n;Object.defineProperty(e,\"__esModule\",{value:!0});let t=n=class{static get(c){return c.getContribution(n.ID)}constructor(c,d){this.editor=c,this.editorWorkerService=d,this.decorations=this.editor.createDecorationsCollection()}dispose(){}run(c,d){var s;(s=this.currentRequest)===null||s===void 0||s.cancel();const l=this.editor.getSelection(),o=this.editor.getModel();if(!o||!l)return;let g=l;if(g.startLineNumber!==g.endLineNumber)return;const h=new y.EditorState(this.editor,5),m=o.uri;return this.editorWorkerService.canNavigateValueSet(m)?(this.currentRequest=(0,L.createCancelablePromise)(C=>this.editorWorkerService.navigateValueSet(m,g,d)),this.currentRequest.then(C=>{var w;if(!C||!C.range||!C.value||!h.validate(this.editor))return;const D=S.Range.lift(C.range);let I=C.range;const T=C.value.length-(g.endColumn-g.startColumn);I={startLineNumber:I.startLineNumber,startColumn:I.startColumn,endLineNumber:I.endLineNumber,endColumn:I.startColumn+C.value.length},T>1&&(g=new p.Selection(g.startLineNumber,g.startColumn,g.endLineNumber,g.endColumn+T-1));const A=new i.InPlaceReplaceCommand(D,g,C.value);this.editor.pushUndoStop(),this.editor.executeCommand(c,A),this.editor.pushUndoStop(),this.decorations.set([{range:I,options:n.DECORATION}]),(w=this.decorationRemover)===null||w===void 0||w.cancel(),this.decorationRemover=(0,L.timeout)(350),this.decorationRemover.then(()=>this.decorations.clear()).catch(k.onUnexpectedError)}).catch(k.onUnexpectedError)):Promise.resolve(void 0)}};t.ID=\"editor.contrib.inPlaceReplaceController\",t.DECORATION=v.ModelDecorationOptions.register({description:\"in-place-replace\",className:\"valueSetReplacement\"}),t=n=ke([ge(1,b.IEditorWorkerService)],t);class r extends E.EditorAction{constructor(){super({id:\"editor.action.inPlaceReplace.up\",label:a.localize(0,null),alias:\"Replace with Previous Value\",precondition:_.EditorContextKeys.writable,kbOpts:{kbExpr:_.EditorContextKeys.editorTextFocus,primary:3159,weight:100}})}run(c,d){const s=t.get(d);return s?s.run(this.id,!1):Promise.resolve(void 0)}}class u extends E.EditorAction{constructor(){super({id:\"editor.action.inPlaceReplace.down\",label:a.localize(1,null),alias:\"Replace with Next Value\",precondition:_.EditorContextKeys.writable,kbOpts:{kbExpr:_.EditorContextKeys.editorTextFocus,primary:3161,weight:100}})}run(c,d){const s=t.get(d);return s?s.run(this.id,!0):Promise.resolve(void 0)}}(0,E.registerEditorContribution)(t.ID,t,4),(0,E.registerEditorAction)(r),(0,E.registerEditorAction)(u)}),define(se[262],oe([1,0,7,14,26,2,11,28,5,38,8,469]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlineProgressManager=void 0;const a=v.ModelDecorationOptions.register({description:\"inline-progress-widget\",stickiness:1,showIfCollapsed:!0,after:{content:S.noBreakWhitespace,inlineClassName:\"inline-editor-progress-decoration\",inlineClassNameAffectsLetterSpacing:!0}});class i extends E.Disposable{constructor(r,u,f,c,d){super(),this.typeId=r,this.editor=u,this.range=f,this.delegate=d,this.allowEditorOverflow=!1,this.suppressMouseDown=!0,this.create(c),this.editor.addContentWidget(this),this.editor.layoutContentWidget(this)}create(r){this.domNode=L.$(\".inline-progress-widget\"),this.domNode.role=\"button\",this.domNode.title=r;const u=L.$(\"span.icon\");this.domNode.append(u),u.classList.add(...p.ThemeIcon.asClassNameArray(y.Codicon.loading),\"codicon-modifier-spin\");const f=()=>{const c=this.editor.getOption(66);this.domNode.style.height=`${c}px`,this.domNode.style.width=`${Math.ceil(.8*c)}px`};f(),this._register(this.editor.onDidChangeConfiguration(c=>{(c.hasChanged(52)||c.hasChanged(66))&&f()})),this._register(L.addDisposableListener(this.domNode,L.EventType.CLICK,c=>{this.delegate.cancel()}))}getId(){return i.baseId+\".\"+this.typeId}getDomNode(){return this.domNode}getPosition(){return{position:{lineNumber:this.range.startLineNumber,column:this.range.startColumn},preference:[0]}}dispose(){super.dispose(),this.editor.removeContentWidget(this)}}i.baseId=\"editor.widget.inlineProgressWidget\";let n=class extends E.Disposable{constructor(r,u,f){super(),this.id=r,this._editor=u,this._instantiationService=f,this._showDelay=500,this._showPromise=this._register(new E.MutableDisposable),this._currentWidget=new E.MutableDisposable,this._operationIdPool=0,this._currentDecorations=u.createDecorationsCollection()}async showWhile(r,u,f){const c=this._operationIdPool++;this._currentOperation=c,this.clear(),this._showPromise.value=(0,k.disposableTimeout)(()=>{const d=_.Range.fromPositions(r);this._currentDecorations.set([{range:d,options:a}]).length>0&&(this._currentWidget.value=this._instantiationService.createInstance(i,this.id,this._editor,d,u,f))},this._showDelay);try{return await f}finally{this._currentOperation===c&&(this.clear(),this._currentOperation=void 0)}}clear(){this._showPromise.clear(),this._currentDecorations.clear(),this._currentWidget.clear()}};e.InlineProgressManager=n,e.InlineProgressManager=n=ke([ge(2,b.IInstantiationService)],n)}),define(se[380],oe([1,0,7,13,14,176,2,109,17,175,190,352,136,5,18,239,105,262,667,103,15,8,88,70,346,166]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m){\"use strict\";var C;Object.defineProperty(e,\"__esModule\",{value:!0}),e.CopyPasteController=e.pasteWidgetVisibleCtx=e.changePasteTypeCommandId=void 0,e.changePasteTypeCommandId=\"editor.changePasteType\",e.pasteWidgetVisibleCtx=new s.RawContextKey(\"pasteWidgetVisible\",!1,(0,c.localize)(0,null));const w=\"application/vnd.code.copyMetadata\";let D=C=class extends S.Disposable{static get(A){return A.getContribution(C.ID)}constructor(A,P,N,M,R,x,O){super(),this._bulkEditService=N,this._clipboardService=M,this._languageFeaturesService=R,this._quickInputService=x,this._progressService=O,this._editor=A;const B=A.getContainerDomNode();this._register((0,L.addDisposableListener)(B,\"copy\",W=>this.handleCopy(W))),this._register((0,L.addDisposableListener)(B,\"cut\",W=>this.handleCopy(W))),this._register((0,L.addDisposableListener)(B,\"paste\",W=>this.handlePaste(W),!0)),this._pasteProgressManager=this._register(new f.InlineProgressManager(\"pasteIntoEditor\",A,P)),this._postPasteWidgetManager=this._register(P.createInstance(h.PostEditWidgetManager,\"pasteIntoEditor\",A,e.pasteWidgetVisibleCtx,{id:e.changePasteTypeCommandId,label:(0,c.localize)(1,null)}))}changePasteType(){this._postPasteWidgetManager.tryShowSelector()}pasteAs(A){this._editor.focus();try{this._pasteAsActionContext={preferredId:A},(0,L.getActiveDocument)().execCommand(\"paste\")}finally{this._pasteAsActionContext=void 0}}isPasteAsEnabled(){return this._editor.getOption(84).enabled&&!this._editor.getOption(90)}async finishedPaste(){await this._currentPasteOperation}handleCopy(A){var P,N;if(!this._editor.hasTextFocus()||(_.isWeb&&this._clipboardService.writeResources([]),!A.clipboardData||!this.isPasteAsEnabled()))return;const M=this._editor.getModel(),R=this._editor.getSelections();if(!M||!R?.length)return;const x=this._editor.getOption(37);let O=R;const B=R.length===1&&R[0].isEmpty();if(B){if(!x)return;O=[new n.Range(O[0].startLineNumber,1,O[0].startLineNumber,1+M.getLineLength(O[0].startLineNumber))]}const W=(P=this._editor._getViewModel())===null||P===void 0?void 0:P.getPlainTextToCopy(R,x,_.isWindows),K={multicursorText:Array.isArray(W)?W:null,pasteOnNewLine:B,mode:null},F=this._languageFeaturesService.documentPasteEditProvider.ordered(M).filter($=>!!$.prepareDocumentPaste);if(!F.length){this.setCopyMetadata(A.clipboardData,{defaultPastePayload:K});return}const q=(0,a.toVSDataTransfer)(A.clipboardData),ie=F.flatMap($=>{var J;return(J=$.copyMimeTypes)!==null&&J!==void 0?J:[]}),ae=(0,v.generateUuid)();this.setCopyMetadata(A.clipboardData,{id:ae,providerCopyMimeTypes:ie,defaultPastePayload:K});const ne=(0,y.createCancelablePromise)(async $=>{const J=(0,k.coalesce)(await Promise.all(F.map(async Q=>{try{return await Q.prepareDocumentPaste(M,O,q,$)}catch(re){console.error(re);return}})));J.reverse();for(const Q of J)for(const[re,de]of Q)q.replace(re,de);return q});(N=this._currentCopyOperation)===null||N===void 0||N.dataTransferPromise.cancel(),this._currentCopyOperation={handle:ae,dataTransferPromise:ne}}async handlePaste(A){var P,N,M,R,x;if(!A.clipboardData||!this._editor.hasTextFocus())return;(P=m.MessageController.get(this._editor))===null||P===void 0||P.closeMessage(),(N=this._currentPasteOperation)===null||N===void 0||N.cancel(),this._currentPasteOperation=void 0;const O=this._editor.getModel(),B=this._editor.getSelections();if(!B?.length||!O||!this.isPasteAsEnabled()&&!this._pasteAsActionContext)return;const W=this.fetchCopyMetadata(A),V=(0,a.toExternalVSDataTransfer)(A.clipboardData);V.delete(w);const K=[...A.clipboardData.types,...(M=W?.providerCopyMimeTypes)!==null&&M!==void 0?M:[],p.Mimes.uriList],F=this._languageFeaturesService.documentPasteEditProvider.ordered(O).filter(q=>{var ie,ae;return!((ie=this._pasteAsActionContext)===null||ie===void 0)&&ie.preferredId&&this._pasteAsActionContext.preferredId!==q.id?!1:(ae=q.pasteMimeTypes)===null||ae===void 0?void 0:ae.some(ne=>(0,E.matchesMimeType)(ne,K))});if(!F.length){!((R=this._pasteAsActionContext)===null||R===void 0)&&R.preferredId&&this.showPasteAsNoEditMessage(B,(x=this._pasteAsActionContext)===null||x===void 0?void 0:x.preferredId);return}A.preventDefault(),A.stopImmediatePropagation(),this._pasteAsActionContext?this.showPasteAsPick(this._pasteAsActionContext.preferredId,F,B,V,W,{trigger:\"explicit\",only:this._pasteAsActionContext.preferredId}):this.doPasteInline(F,B,V,W,{trigger:\"implicit\"})}showPasteAsNoEditMessage(A,P){var N;(N=m.MessageController.get(this._editor))===null||N===void 0||N.showMessage((0,c.localize)(2,null,P),A[0].getStartPosition())}doPasteInline(A,P,N,M,R){const x=(0,y.createCancelablePromise)(async O=>{const B=this._editor;if(!B.hasModel())return;const W=B.getModel(),V=new u.EditorStateCancellationTokenSource(B,3,void 0,O);try{if(await this.mergeInDataFromCopy(N,M,V.token),V.token.isCancellationRequested)return;const K=A.filter(q=>I(q,N));if(!K.length||K.length===1&&K[0].id===\"text\"){await this.applyDefaultPasteHandler(N,M,V.token);return}const F=await this.getPasteEdits(K,N,W,P,R,V.token);if(V.token.isCancellationRequested)return;if(F.length===1&&F[0].providerId===\"text\"){await this.applyDefaultPasteHandler(N,M,V.token);return}if(F.length){const q=B.getOption(84).showPasteSelector===\"afterPaste\";return this._postPasteWidgetManager.applyEditAndShowIfNeeded(P,{activeEditIndex:0,allEdits:F},q,V.token)}await this.applyDefaultPasteHandler(N,M,V.token)}finally{V.dispose(),this._currentPasteOperation===x&&(this._currentPasteOperation=void 0)}});this._pasteProgressManager.showWhile(P[0].getEndPosition(),(0,c.localize)(3,null),x),this._currentPasteOperation=x}showPasteAsPick(A,P,N,M,R,x){const O=(0,y.createCancelablePromise)(async B=>{const W=this._editor;if(!W.hasModel())return;const V=W.getModel(),K=new u.EditorStateCancellationTokenSource(W,3,void 0,B);try{if(await this.mergeInDataFromCopy(M,R,K.token),K.token.isCancellationRequested)return;let F=P.filter(ne=>I(ne,M));A&&(F=F.filter(ne=>ne.id===A));const q=await this.getPasteEdits(F,M,V,N,x,K.token);if(K.token.isCancellationRequested)return;if(!q.length){x.only&&this.showPasteAsNoEditMessage(N,x.only);return}let ie;if(A)ie=q.at(0);else{const ne=await this._quickInputService.pick(q.map($=>({label:$.label,description:$.providerId,detail:$.detail,edit:$})),{placeHolder:(0,c.localize)(4,null)});ie=ne?.edit}if(!ie)return;const ae=(0,r.createCombinedWorkspaceEdit)(V.uri,N,ie);await this._bulkEditService.apply(ae,{editor:this._editor})}finally{K.dispose(),this._currentPasteOperation===O&&(this._currentPasteOperation=void 0)}});this._progressService.withProgress({location:10,title:(0,c.localize)(5,null)},()=>O)}setCopyMetadata(A,P){A.setData(w,JSON.stringify(P))}fetchCopyMetadata(A){var P;if(!A.clipboardData)return;const N=A.clipboardData.getData(w);if(N)try{return JSON.parse(N)}catch{return}const[M,R]=b.ClipboardEventUtils.getTextData(A.clipboardData);if(R)return{defaultPastePayload:{mode:R.mode,multicursorText:(P=R.multicursorText)!==null&&P!==void 0?P:null,pasteOnNewLine:!!R.isFromEmptySelection}}}async mergeInDataFromCopy(A,P,N){var M;if(P?.id&&((M=this._currentCopyOperation)===null||M===void 0?void 0:M.handle)===P.id){const R=await this._currentCopyOperation.dataTransferPromise;if(N.isCancellationRequested)return;for(const[x,O]of R)A.replace(x,O)}if(!A.has(p.Mimes.uriList)){const R=await this._clipboardService.readResources();if(N.isCancellationRequested)return;R.length&&A.append(p.Mimes.uriList,(0,E.createStringDataTransferItem)(E.UriList.create(R)))}}async getPasteEdits(A,P,N,M,R,x){const O=await(0,y.raceCancellation)(Promise.all(A.map(async W=>{var V;try{const K=await((V=W.provideDocumentPasteEdits)===null||V===void 0?void 0:V.call(W,N,M,P,R,x));if(K)return{...K,providerId:W.id}}catch(K){console.error(K)}})),x),B=(0,k.coalesce)(O??[]);return(0,r.sortEditsByYieldTo)(B)}async applyDefaultPasteHandler(A,P,N){var M,R,x;const O=(M=A.get(p.Mimes.text))!==null&&M!==void 0?M:A.get(\"text\");if(!O)return;const B=await O.asString();if(N.isCancellationRequested)return;const W={text:B,pasteOnNewLine:(R=P?.defaultPastePayload.pasteOnNewLine)!==null&&R!==void 0?R:!1,multicursorText:(x=P?.defaultPastePayload.multicursorText)!==null&&x!==void 0?x:null,mode:null};this._editor.trigger(\"keyboard\",\"paste\",W)}};e.CopyPasteController=D,D.ID=\"editor.contrib.copyPasteActionController\",e.CopyPasteController=D=C=ke([ge(1,l.IInstantiationService),ge(2,i.IBulkEditService),ge(3,d.IClipboardService),ge(4,t.ILanguageFeaturesService),ge(5,g.IQuickInputService),ge(6,o.IProgressService)],D);function I(T,A){var P;return!!(!((P=T.pasteMimeTypes)===null||P===void 0)&&P.some(N=>A.matches(N)))}}),define(se[902],oe([1,0,54,7,17,190,16,33,21,380,653,30,103,15]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.PasteAction=e.CopyAction=e.CutAction=void 0;const t=\"9_cutcopypaste\",r=y.isNative||document.queryCommandSupported(\"cut\"),u=y.isNative||document.queryCommandSupported(\"copy\"),f=typeof navigator.clipboard>\"u\"||L.isFirefox?document.queryCommandSupported(\"paste\"):!0;function c(l){return l.register(),l}e.CutAction=r?c(new S.MultiCommand({id:\"editor.action.clipboardCutAction\",precondition:void 0,kbOpts:y.isNative?{primary:2102,win:{primary:2102,secondary:[1044]},weight:100}:void 0,menuOpts:[{menuId:a.MenuId.MenubarEditMenu,group:\"2_ccp\",title:b.localize(0,null),order:1},{menuId:a.MenuId.EditorContext,group:t,title:b.localize(1,null),when:_.EditorContextKeys.writable,order:1},{menuId:a.MenuId.CommandPalette,group:\"\",title:b.localize(2,null),order:1},{menuId:a.MenuId.SimpleEditorContext,group:t,title:b.localize(3,null),when:_.EditorContextKeys.writable,order:1}]})):void 0,e.CopyAction=u?c(new S.MultiCommand({id:\"editor.action.clipboardCopyAction\",precondition:void 0,kbOpts:y.isNative?{primary:2081,win:{primary:2081,secondary:[2067]},weight:100}:void 0,menuOpts:[{menuId:a.MenuId.MenubarEditMenu,group:\"2_ccp\",title:b.localize(4,null),order:2},{menuId:a.MenuId.EditorContext,group:t,title:b.localize(5,null),order:2},{menuId:a.MenuId.CommandPalette,group:\"\",title:b.localize(6,null),order:1},{menuId:a.MenuId.SimpleEditorContext,group:t,title:b.localize(7,null),order:2}]})):void 0,a.MenuRegistry.appendMenuItem(a.MenuId.MenubarEditMenu,{submenu:a.MenuId.MenubarCopy,title:{value:b.localize(8,null),original:\"Copy As\"},group:\"2_ccp\",order:3}),a.MenuRegistry.appendMenuItem(a.MenuId.EditorContext,{submenu:a.MenuId.EditorContextCopy,title:{value:b.localize(9,null),original:\"Copy As\"},group:t,order:3}),a.MenuRegistry.appendMenuItem(a.MenuId.EditorContext,{submenu:a.MenuId.EditorContextShare,title:{value:b.localize(10,null),original:\"Share\"},group:\"11_share\",order:-1,when:n.ContextKeyExpr.and(n.ContextKeyExpr.notEquals(\"resourceScheme\",\"output\"),_.EditorContextKeys.editorTextFocus)}),a.MenuRegistry.appendMenuItem(a.MenuId.EditorTitleContext,{submenu:a.MenuId.EditorTitleContextShare,title:{value:b.localize(11,null),original:\"Share\"},group:\"11_share\",order:-1}),a.MenuRegistry.appendMenuItem(a.MenuId.ExplorerContext,{submenu:a.MenuId.ExplorerContextShare,title:{value:b.localize(12,null),original:\"Share\"},group:\"11_share\",order:-1}),e.PasteAction=f?c(new S.MultiCommand({id:\"editor.action.clipboardPasteAction\",precondition:void 0,kbOpts:y.isNative?{primary:2100,win:{primary:2100,secondary:[1043]},linux:{primary:2100,secondary:[1043]},weight:100}:void 0,menuOpts:[{menuId:a.MenuId.MenubarEditMenu,group:\"2_ccp\",title:b.localize(13,null),order:4},{menuId:a.MenuId.EditorContext,group:t,title:b.localize(14,null),when:_.EditorContextKeys.writable,order:4},{menuId:a.MenuId.CommandPalette,group:\"\",title:b.localize(15,null),order:1},{menuId:a.MenuId.SimpleEditorContext,group:t,title:b.localize(16,null),when:_.EditorContextKeys.writable,order:4}]})):void 0;class d extends S.EditorAction{constructor(){super({id:\"editor.action.clipboardCopyWithSyntaxHighlightingAction\",label:b.localize(17,null),alias:\"Copy With Syntax Highlighting\",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.textInputFocus,primary:0,weight:100}})}run(o,g){!g.hasModel()||!g.getOption(37)&&g.getSelection().isEmpty()||(E.CopyOptions.forceCopyWithSyntaxHighlighting=!0,g.focus(),g.getContainerDomNode().ownerDocument.execCommand(\"copy\"),E.CopyOptions.forceCopyWithSyntaxHighlighting=!1)}}function s(l,o){l&&(l.addImplementation(1e4,\"code-editor\",(g,h)=>{const m=g.get(p.ICodeEditorService).getFocusedCodeEditor();if(m&&m.hasTextFocus()){const C=m.getOption(37),w=m.getSelection();return w&&w.isEmpty()&&!C||m.getContainerDomNode().ownerDocument.execCommand(o),!0}return!1}),l.addImplementation(0,\"generic-dom\",(g,h)=>((0,k.getActiveDocument)().execCommand(o),!0)))}s(e.CutAction,\"cut\"),s(e.CopyAction,\"copy\"),e.PasteAction&&(e.PasteAction.addImplementation(1e4,\"code-editor\",(l,o)=>{var g,h;const m=l.get(p.ICodeEditorService),C=l.get(i.IClipboardService),w=m.getFocusedCodeEditor();return w&&w.hasTextFocus()?w.getContainerDomNode().ownerDocument.execCommand(\"paste\")?(h=(g=v.CopyPasteController.get(w))===null||g===void 0?void 0:g.finishedPaste())!==null&&h!==void 0?h:Promise.resolve():y.isWeb?(async()=>{const I=await C.readText();if(I!==\"\"){const T=E.InMemoryClipboardMetadataManager.INSTANCE.get(I);let A=!1,P=null,N=null;T&&(A=w.getOption(37)&&!!T.isFromEmptySelection,P=typeof T.multicursorText<\"u\"?T.multicursorText:null,N=T.mode),w.trigger(\"keyboard\",\"paste\",{text:I,pasteOnNewLine:A,multicursorText:P,mode:N})}})():!0:!1}),e.PasteAction.addImplementation(0,\"generic-dom\",(l,o)=>((0,k.getActiveDocument)().execCommand(\"paste\"),!0))),u&&(0,S.registerEditorAction)(d)}),define(se[903],oe([1,0,13,14,176,2,352,5,18,295,764,105,262,670,27,15,351,8,239,346]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d){\"use strict\";var s;Object.defineProperty(e,\"__esModule\",{value:!0}),e.DropIntoEditorController=e.dropWidgetVisibleCtx=e.changeDropTypeCommandId=e.defaultProviderConfig=void 0,e.defaultProviderConfig=\"editor.experimental.dropIntoEditor.defaultProvider\",e.changeDropTypeCommandId=\"editor.changeDropType\",e.dropWidgetVisibleCtx=new r.RawContextKey(\"dropWidgetVisible\",!1,(0,n.localize)(0,null));let l=s=class extends E.Disposable{static get(g){return g.getContribution(s.ID)}constructor(g,h,m,C,w){super(),this._configService=m,this._languageFeaturesService=C,this._treeViewsDragAndDropService=w,this.treeItemsTransfer=u.LocalSelectionTransfer.getInstance(),this._dropProgressManager=this._register(h.createInstance(i.InlineProgressManager,\"dropIntoEditor\",g)),this._postDropWidgetManager=this._register(h.createInstance(d.PostEditWidgetManager,\"dropIntoEditor\",g,e.dropWidgetVisibleCtx,{id:e.changeDropTypeCommandId,label:(0,n.localize)(1,null)})),this._register(g.onDropIntoEditor(D=>this.onDropIntoEditor(g,D.position,D.event)))}changeDropType(){this._postDropWidgetManager.tryShowSelector()}async onDropIntoEditor(g,h,m){var C;if(!m.dataTransfer||!g.hasModel())return;(C=this._currentOperation)===null||C===void 0||C.cancel(),g.focus(),g.setPosition(h);const w=(0,k.createCancelablePromise)(async D=>{const I=new a.EditorStateCancellationTokenSource(g,1,void 0,D);try{const T=await this.extractDataTransferData(m);if(T.size===0||I.token.isCancellationRequested)return;const A=g.getModel();if(!A)return;const P=this._languageFeaturesService.documentOnDropEditProvider.ordered(A).filter(M=>M.dropMimeTypes?M.dropMimeTypes.some(R=>T.matches(R)):!0),N=await this.getDropEdits(P,A,h,T,I);if(I.token.isCancellationRequested)return;if(N.length){const M=this.getInitialActiveEditIndex(A,N),R=g.getOption(36).showDropSelector===\"afterDrop\";await this._postDropWidgetManager.applyEditAndShowIfNeeded([p.Range.fromPositions(h)],{activeEditIndex:M,allEdits:N},R,D)}}finally{I.dispose(),this._currentOperation===w&&(this._currentOperation=void 0)}});this._dropProgressManager.showWhile(h,(0,n.localize)(2,null),w),this._currentOperation=w}async getDropEdits(g,h,m,C,w){const D=await(0,k.raceCancellation)(Promise.all(g.map(async T=>{try{const A=await T.provideDocumentOnDropEdits(h,m,C,w.token);if(A)return{...A,providerId:T.id}}catch(A){console.error(A)}})),w.token),I=(0,L.coalesce)(D??[]);return(0,c.sortEditsByYieldTo)(I)}getInitialActiveEditIndex(g,h){const m=this._configService.getValue(e.defaultProviderConfig,{resource:g.uri});for(const[C,w]of Object.entries(m)){const D=h.findIndex(I=>w===I.providerId&&I.handledMimeType&&(0,y.matchesMimeType)(C,[I.handledMimeType]));if(D>=0)return D}return 0}async extractDataTransferData(g){if(!g.dataTransfer)return new y.VSDataTransfer;const h=(0,S.toExternalVSDataTransfer)(g.dataTransfer);if(this.treeItemsTransfer.hasData(v.DraggedTreeItemsIdentifier.prototype)){const m=this.treeItemsTransfer.getData(v.DraggedTreeItemsIdentifier.prototype);if(Array.isArray(m))for(const C of m){const w=await this._treeViewsDragAndDropService.removeDragOperationTransfer(C.identifier);if(w)for(const[D,I]of w)h.replace(D,I)}}return h}};e.DropIntoEditorController=l,l.ID=\"editor.contrib.dropIntoEditorController\",e.DropIntoEditorController=l=s=ke([ge(1,f.IInstantiationService),ge(2,t.IConfigurationService),ge(3,_.ILanguageFeaturesService),ge(4,b.ITreeViewsDnDService)],l)}),define(se[904],oe([1,0,13,14,19,39,12,6,2,11,22,16,33,10,5,21,38,32,700,15,18,29,79,61,470]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g){\"use strict\";var h;Object.defineProperty(e,\"__esModule\",{value:!0}),e.editorLinkedEditingBackground=e.LinkedEditingAction=e.LinkedEditingContribution=e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE=void 0,e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE=new d.RawContextKey(\"LinkedEditingInputVisible\",!1);const m=\"linked-editing-decoration\";let C=h=class extends _.Disposable{static get(A){return A.getContribution(h.ID)}constructor(A,P,N,M,R){super(),this.languageConfigurationService=M,this._syncRangesToken=0,this._localToDispose=this._register(new _.DisposableStore),this._editor=A,this._providers=N.linkedEditingRangeProvider,this._enabled=!1,this._visibleContextKey=e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE.bindTo(P),this._debounceInformation=R.for(this._providers,\"Linked Editing\",{max:200}),this._currentDecorations=this._editor.createDecorationsCollection(),this._languageWordPattern=null,this._currentWordPattern=null,this._ignoreChangeEvent=!1,this._localToDispose=this._register(new _.DisposableStore),this._rangeUpdateTriggerPromise=null,this._rangeSyncTriggerPromise=null,this._currentRequestCts=null,this._currentRequestPosition=null,this._currentRequestModelVersion=null,this._register(this._editor.onDidChangeModel(()=>this.reinitialize(!0))),this._register(this._editor.onDidChangeConfiguration(x=>{(x.hasChanged(69)||x.hasChanged(92))&&this.reinitialize(!1)})),this._register(this._providers.onDidChange(()=>this.reinitialize(!1))),this._register(this._editor.onDidChangeModelLanguage(()=>this.reinitialize(!0))),this.reinitialize(!0)}reinitialize(A){const P=this._editor.getModel(),N=P!==null&&(this._editor.getOption(69)||this._editor.getOption(92))&&this._providers.has(P);if(N===this._enabled&&!A||(this._enabled=N,this.clearRanges(),this._localToDispose.clear(),!N||P===null))return;this._localToDispose.add(p.Event.runAndSubscribe(P.onDidChangeLanguageConfiguration,()=>{this._languageWordPattern=this.languageConfigurationService.getLanguageConfiguration(P.getLanguageId()).getWordDefinition()}));const M=new k.Delayer(this._debounceInformation.get(P)),R=()=>{var B;this._rangeUpdateTriggerPromise=M.trigger(()=>this.updateRanges(),(B=this._debounceDuration)!==null&&B!==void 0?B:this._debounceInformation.get(P))},x=new k.Delayer(0),O=B=>{this._rangeSyncTriggerPromise=x.trigger(()=>this._syncRanges(B))};this._localToDispose.add(this._editor.onDidChangeCursorPosition(()=>{R()})),this._localToDispose.add(this._editor.onDidChangeModelContent(B=>{if(!this._ignoreChangeEvent&&this._currentDecorations.length>0){const W=this._currentDecorations.getRange(0);if(W&&B.changes.every(V=>W.intersectRanges(V.range))){O(this._syncRangesToken);return}}R()})),this._localToDispose.add({dispose:()=>{M.dispose(),x.dispose()}}),this.updateRanges()}_syncRanges(A){if(!this._editor.hasModel()||A!==this._syncRangesToken||this._currentDecorations.length===0)return;const P=this._editor.getModel(),N=this._currentDecorations.getRange(0);if(!N||N.startLineNumber!==N.endLineNumber)return this.clearRanges();const M=P.getValueInRange(N);if(this._currentWordPattern){const x=M.match(this._currentWordPattern);if((x?x[0].length:0)!==M.length)return this.clearRanges()}const R=[];for(let x=1,O=this._currentDecorations.length;x<O;x++){const B=this._currentDecorations.getRange(x);if(B)if(B.startLineNumber!==B.endLineNumber)R.push({range:B,text:M});else{let W=P.getValueInRange(B),V=M,K=B.startColumn,F=B.endColumn;const q=v.commonPrefixLength(W,V);K+=q,W=W.substr(q),V=V.substr(q);const ie=v.commonSuffixLength(W,V);F-=ie,W=W.substr(0,W.length-ie),V=V.substr(0,V.length-ie),(K!==F||V.length!==0)&&R.push({range:new t.Range(B.startLineNumber,K,B.endLineNumber,F),text:V})}}if(R.length!==0)try{this._editor.popUndoStop(),this._ignoreChangeEvent=!0;const x=this._editor._getViewModel().getPrevEditOperationType();this._editor.executeEdits(\"linkedEditing\",R),this._editor._getViewModel().setPrevEditOperationType(x)}finally{this._ignoreChangeEvent=!1}}dispose(){this.clearRanges(),super.dispose()}clearRanges(){this._visibleContextKey.set(!1),this._currentDecorations.clear(),this._currentRequestCts&&(this._currentRequestCts.cancel(),this._currentRequestCts=null,this._currentRequestPosition=null)}async updateRanges(A=!1){if(!this._editor.hasModel()){this.clearRanges();return}const P=this._editor.getPosition();if(!this._enabled&&!A||this._editor.getSelections().length>1){this.clearRanges();return}const N=this._editor.getModel(),M=N.getVersionId();if(this._currentRequestPosition&&this._currentRequestModelVersion===M){if(P.equals(this._currentRequestPosition))return;if(this._currentDecorations.length>0){const x=this._currentDecorations.getRange(0);if(x&&x.containsPosition(P))return}}this.clearRanges(),this._currentRequestPosition=P,this._currentRequestModelVersion=M;const R=this._currentRequestCts=new y.CancellationTokenSource;try{const x=new g.StopWatch(!1),O=await I(this._providers,N,P,R.token);if(this._debounceInformation.update(N,x.elapsed()),R!==this._currentRequestCts||(this._currentRequestCts=null,M!==N.getVersionId()))return;let B=[];O?.ranges&&(B=O.ranges),this._currentWordPattern=O?.wordPattern||this._languageWordPattern;let W=!1;for(let K=0,F=B.length;K<F;K++)if(t.Range.containsPosition(B[K],P)){if(W=!0,K!==0){const q=B[K];B.splice(K,1),B.unshift(q)}break}if(!W){this.clearRanges();return}const V=B.map(K=>({range:K,options:h.DECORATION}));this._visibleContextKey.set(!0),this._currentDecorations.set(V),this._syncRangesToken++}catch(x){(0,S.isCancellationError)(x)||(0,S.onUnexpectedError)(x),(this._currentRequestCts===R||!this._currentRequestCts)&&this.clearRanges()}}};e.LinkedEditingContribution=C,C.ID=\"editor.contrib.linkedEditing\",C.DECORATION=u.ModelDecorationOptions.register({description:\"linked-editing\",stickiness:0,className:m}),e.LinkedEditingContribution=C=h=ke([ge(1,d.IContextKeyService),ge(2,s.ILanguageFeaturesService),ge(3,f.ILanguageConfigurationService),ge(4,o.ILanguageFeatureDebounceService)],C);class w extends a.EditorAction{constructor(){super({id:\"editor.action.linkedEditing\",label:c.localize(0,null),alias:\"Start Linked Editing\",precondition:d.ContextKeyExpr.and(r.EditorContextKeys.writable,r.EditorContextKeys.hasRenameProvider),kbOpts:{kbExpr:r.EditorContextKeys.editorTextFocus,primary:3132,weight:100}})}runCommand(A,P){const N=A.get(i.ICodeEditorService),[M,R]=Array.isArray(P)&&P||[void 0,void 0];return b.URI.isUri(M)&&n.Position.isIPosition(R)?N.openCodeEditor({resource:M},N.getActiveCodeEditor()).then(x=>{x&&(x.setPosition(R),x.invokeWithinContext(O=>(this.reportTelemetry(O,x),this.run(O,x))))},S.onUnexpectedError):super.runCommand(A,P)}run(A,P){const N=C.get(P);return N?Promise.resolve(N.updateRanges(!0)):Promise.resolve()}}e.LinkedEditingAction=w;const D=a.EditorCommand.bindToContribution(C.get);(0,a.registerEditorCommand)(new D({id:\"cancelLinkedEditingInput\",precondition:e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE,handler:T=>T.clearRanges(),kbOpts:{kbExpr:r.EditorContextKeys.editorTextFocus,weight:100+99,primary:9,secondary:[1033]}}));function I(T,A,P,N){const M=T.ordered(A);return(0,k.first)(M.map(R=>async()=>{try{return await R.provideLinkedEditingRanges(A,P,N)}catch(x){(0,S.onUnexpectedExternalError)(x);return}}),R=>!!R&&L.isNonEmptyArray(R?.ranges))}e.editorLinkedEditingBackground=(0,l.registerColor)(\"editor.linkedEditingBackground\",{dark:E.Color.fromHex(\"#f00\").transparent(.3),light:E.Color.fromHex(\"#f00\").transparent(.3),hcDark:E.Color.fromHex(\"#f00\").transparent(.3),hcLight:E.Color.white},c.localize(1,null)),(0,a.registerModelAndPositionCommand)(\"_executeLinkedEditingProvider\",(T,A,P)=>{const{linkedEditingRangeProvider:N}=T.get(s.ILanguageFeaturesService);return I(N,A,P,y.CancellationToken.None)}),(0,a.registerEditorContribution)(C.ID,C,1),(0,a.registerEditorAction)(w)}),define(se[905],oe([1,0,14,19,12,58,2,47,17,49,61,22,16,38,79,18,188,766,701,50,57,471]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){\"use strict\";var l;Object.defineProperty(e,\"__esModule\",{value:!0}),e.LinkDetector=void 0;let o=l=class extends S.Disposable{static get(D){return D.getContribution(l.ID)}constructor(D,I,T,A,P){super(),this.editor=D,this.openerService=I,this.notificationService=T,this.languageFeaturesService=A,this.providers=this.languageFeaturesService.linkProvider,this.debounceInformation=P.for(this.providers,\"Links\",{min:1e3,max:4e3}),this.computeLinks=this._register(new L.RunOnceScheduler(()=>this.computeLinksNow(),1e3)),this.computePromise=null,this.activeLinksList=null,this.currentOccurrences={},this.activeLinkDecorationId=null;const N=this._register(new u.ClickLinkGesture(D));this._register(N.onMouseMoveOrRelevantKeyDown(([M,R])=>{this._onEditorMouseMove(M,R)})),this._register(N.onExecute(M=>{this.onEditorMouseUp(M)})),this._register(N.onCancel(M=>{this.cleanUpActiveLinkDecoration()})),this._register(D.onDidChangeConfiguration(M=>{M.hasChanged(70)&&(this.updateDecorations([]),this.stop(),this.computeLinks.schedule(0))})),this._register(D.onDidChangeModelContent(M=>{this.editor.hasModel()&&this.computeLinks.schedule(this.debounceInformation.get(this.editor.getModel()))})),this._register(D.onDidChangeModel(M=>{this.currentOccurrences={},this.activeLinkDecorationId=null,this.stop(),this.computeLinks.schedule(0)})),this._register(D.onDidChangeModelLanguage(M=>{this.stop(),this.computeLinks.schedule(0)})),this._register(this.providers.onDidChange(M=>{this.stop(),this.computeLinks.schedule(0)})),this.computeLinks.schedule(0)}async computeLinksNow(){if(!this.editor.hasModel()||!this.editor.getOption(70))return;const D=this.editor.getModel();if(!D.isTooLargeForSyncing()&&this.providers.has(D)){this.activeLinksList&&(this.activeLinksList.dispose(),this.activeLinksList=null),this.computePromise=(0,L.createCancelablePromise)(I=>(0,f.getLinks)(this.providers,D,I));try{const I=new b.StopWatch(!1);if(this.activeLinksList=await this.computePromise,this.debounceInformation.update(D,I.elapsed()),D.isDisposed())return;this.updateDecorations(this.activeLinksList.links)}catch(I){(0,y.onUnexpectedError)(I)}finally{this.computePromise=null}}}updateDecorations(D){const I=this.editor.getOption(77)===\"altKey\",T=[],A=Object.keys(this.currentOccurrences);for(const N of A){const M=this.currentOccurrences[N];T.push(M.decorationId)}const P=[];if(D)for(const N of D)P.push(h.decoration(N,I));this.editor.changeDecorations(N=>{const M=N.deltaDecorations(T,P);this.currentOccurrences={},this.activeLinkDecorationId=null;for(let R=0,x=M.length;R<x;R++){const O=new h(D[R],M[R]);this.currentOccurrences[O.decorationId]=O}})}_onEditorMouseMove(D,I){const T=this.editor.getOption(77)===\"altKey\";if(this.isEnabled(D,I)){this.cleanUpActiveLinkDecoration();const A=this.getLinkOccurrence(D.target.position);A&&this.editor.changeDecorations(P=>{A.activate(P,T),this.activeLinkDecorationId=A.decorationId})}else this.cleanUpActiveLinkDecoration()}cleanUpActiveLinkDecoration(){const D=this.editor.getOption(77)===\"altKey\";if(this.activeLinkDecorationId){const I=this.currentOccurrences[this.activeLinkDecorationId];I&&this.editor.changeDecorations(T=>{I.deactivate(T,D)}),this.activeLinkDecorationId=null}}onEditorMouseUp(D){if(!this.isEnabled(D))return;const I=this.getLinkOccurrence(D.target.position);I&&this.openLinkOccurrence(I,D.hasSideBySideModifier,!0)}openLinkOccurrence(D,I,T=!1){if(!this.openerService)return;const{link:A}=D;A.resolve(k.CancellationToken.None).then(P=>{if(typeof P==\"string\"&&this.editor.hasModel()){const N=this.editor.getModel().uri;if(N.scheme===p.Schemas.file&&P.startsWith(`${p.Schemas.file}:`)){const M=a.URI.parse(P);if(M.scheme===p.Schemas.file){const R=v.originalFSPath(M);let x=null;R.startsWith(\"/./\")?x=`.${R.substr(1)}`:R.startsWith(\"//./\")&&(x=`.${R.substr(2)}`),x&&(P=v.joinPath(N,x))}}}return this.openerService.open(P,{openToSide:I,fromUserGesture:T,allowContributedOpeners:!0,allowCommands:!0,fromWorkspace:!0})},P=>{const N=P instanceof Error?P.message:P;N===\"invalid\"?this.notificationService.warn(c.localize(0,null,A.url.toString())):N===\"missing\"?this.notificationService.warn(c.localize(1,null)):(0,y.onUnexpectedError)(P)})}getLinkOccurrence(D){if(!this.editor.hasModel()||!D)return null;const I=this.editor.getModel().getDecorationsInRange({startLineNumber:D.lineNumber,startColumn:D.column,endLineNumber:D.lineNumber,endColumn:D.column},0,!0);for(const T of I){const A=this.currentOccurrences[T.id];if(A)return A}return null}isEnabled(D,I){return!!(D.target.type===6&&(D.hasTriggerModifier||I&&I.keyCodeIsTriggerKey))}stop(){var D;this.computeLinks.cancel(),this.activeLinksList&&((D=this.activeLinksList)===null||D===void 0||D.dispose(),this.activeLinksList=null),this.computePromise&&(this.computePromise.cancel(),this.computePromise=null)}dispose(){super.dispose(),this.stop()}};e.LinkDetector=o,o.ID=\"editor.linkDetector\",e.LinkDetector=o=l=ke([ge(1,s.IOpenerService),ge(2,d.INotificationService),ge(3,r.ILanguageFeaturesService),ge(4,t.ILanguageFeatureDebounceService)],o);const g={general:n.ModelDecorationOptions.register({description:\"detected-link\",stickiness:1,collapseOnReplaceEdit:!0,inlineClassName:\"detected-link\"}),active:n.ModelDecorationOptions.register({description:\"detected-link-active\",stickiness:1,collapseOnReplaceEdit:!0,inlineClassName:\"detected-link-active\"})};class h{static decoration(D,I){return{range:D.range,options:h._getOptions(D,I,!1)}}static _getOptions(D,I,T){const A={...T?g.active:g.general};return A.hoverMessage=m(D,I),A}constructor(D,I){this.link=D,this.decorationId=I}activate(D,I){D.changeDecorationOptions(this.decorationId,h._getOptions(this.link,I,!0))}deactivate(D,I){D.changeDecorationOptions(this.decorationId,h._getOptions(this.link,I,!1))}}function m(w,D){const I=w.url&&/^command:/i.test(w.url.toString()),T=w.tooltip?w.tooltip:I?c.localize(2,null):c.localize(3,null),A=D?_.isMacintosh?c.localize(4,null):c.localize(5,null):_.isMacintosh?c.localize(6,null):c.localize(7,null);if(w.url){let P=\"\";if(/^command:/i.test(w.url.toString())){const M=w.url.toString().match(/^command:([^?#]+)/);if(M){const R=M[1];P=c.localize(8,null,R)}}return new E.MarkdownString(\"\",!0).appendLink(w.url.toString(!0).replace(/ /g,\"%20\"),T,P).appendMarkdown(` (${A})`)}else return new E.MarkdownString().appendText(`${T} (${A})`)}class C extends i.EditorAction{constructor(){super({id:\"editor.action.openLink\",label:c.localize(9,null),alias:\"Open Link\",precondition:void 0})}run(D,I){const T=o.get(I);if(!T||!I.hasModel())return;const A=I.getSelections();for(const P of A){const N=T.getLinkOccurrence(P.getEndPosition());N&&T.openLinkOccurrence(N,!1)}}}(0,i.registerEditorContribution)(o.ID,o,1),(0,i.registerEditorAction)(C)}),define(se[906],oe([1,0,2,18,165,14,261,304,303,32,12,310,52]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StickyModelProvider=void 0;var n;(function(l){l.OUTLINE_MODEL=\"outlineModel\",l.FOLDING_PROVIDER_MODEL=\"foldingProviderModel\",l.INDENTATION_MODEL=\"indentationModel\"})(n||(n={}));var t;(function(l){l[l.VALID=0]=\"VALID\",l[l.INVALID=1]=\"INVALID\",l[l.CANCELED=2]=\"CANCELED\"})(t||(t={}));let r=class extends L.Disposable{constructor(o,g,h,m){super(),this._editor=o,this._languageConfigurationService=g,this._languageFeaturesService=h,this._modelProviders=[],this._modelPromise=null,this._updateScheduler=this._register(new E.Delayer(300)),this._updateOperation=this._register(new L.DisposableStore);const C=new f(h),w=new s(this._editor,h),D=new d(this._editor,g);switch(m){case n.OUTLINE_MODEL:this._modelProviders.push(C),this._modelProviders.push(w),this._modelProviders.push(D);break;case n.FOLDING_PROVIDER_MODEL:this._modelProviders.push(w),this._modelProviders.push(D);break;case n.INDENTATION_MODEL:this._modelProviders.push(D);break}}_cancelModelPromise(){this._modelPromise&&(this._modelPromise.cancel(),this._modelPromise=null)}async update(o,g,h){return this._updateOperation.clear(),this._updateOperation.add({dispose:()=>{this._cancelModelPromise(),this._updateScheduler.cancel()}}),this._cancelModelPromise(),await this._updateScheduler.trigger(async()=>{for(const m of this._modelProviders){const{statusPromise:C,modelPromise:w}=m.computeStickyModel(o,g,h);this._modelPromise=w;const D=await C;if(this._modelPromise!==w)return null;switch(D){case t.CANCELED:return this._updateOperation.clear(),null;case t.VALID:return m.stickyModel}}return null}).catch(m=>((0,b.onUnexpectedError)(m),null))}};e.StickyModelProvider=r,e.StickyModelProvider=r=ke([ge(1,v.ILanguageConfigurationService),ge(2,k.ILanguageFeaturesService)],r);class u{constructor(){this._stickyModel=null}get stickyModel(){return this._stickyModel}_invalid(){return this._stickyModel=null,t.INVALID}computeStickyModel(o,g,h){if(h.isCancellationRequested||!this.isProviderValid(o))return{statusPromise:this._invalid(),modelPromise:null};const m=(0,E.createCancelablePromise)(C=>this.createModelFromProvider(o,g,C));return{statusPromise:m.then(C=>this.isModelValid(C)?h.isCancellationRequested?t.CANCELED:(this._stickyModel=this.createStickyModel(o,g,h,C),t.VALID):this._invalid()).then(void 0,C=>((0,b.onUnexpectedError)(C),t.CANCELED)),modelPromise:m}}isModelValid(o){return!0}isProviderValid(o){return!0}}let f=class extends u{constructor(o){super(),this._languageFeaturesService=o}createModelFromProvider(o,g,h){return y.OutlineModel.create(this._languageFeaturesService.documentSymbolProvider,o,h)}createStickyModel(o,g,h,m){var C;const{stickyOutlineElement:w,providerID:D}=this._stickyModelFromOutlineModel(m,(C=this._stickyModel)===null||C===void 0?void 0:C.outlineProviderId);return new a.StickyModel(o.uri,g,w,D)}isModelValid(o){return o&&o.children.size>0}_stickyModelFromOutlineModel(o,g){let h;if(i.Iterable.first(o.children.values())instanceof y.OutlineGroup){const D=i.Iterable.find(o.children.values(),I=>I.id===g);if(D)h=D.children;else{let I=\"\",T=-1,A;for(const[P,N]of o.children.entries()){const M=this._findSumOfRangesOfGroup(N);M>T&&(A=N,T=M,I=N.id)}g=I,h=A.children}}else h=o.children;const m=[],C=Array.from(h.values()).sort((D,I)=>{const T=new a.StickyRange(D.symbol.range.startLineNumber,D.symbol.range.endLineNumber),A=new a.StickyRange(I.symbol.range.startLineNumber,I.symbol.range.endLineNumber);return this._comparator(T,A)});for(const D of C)m.push(this._stickyModelFromOutlineElement(D,D.symbol.selectionRange.startLineNumber));return{stickyOutlineElement:new a.StickyElement(void 0,m,void 0),providerID:g}}_stickyModelFromOutlineElement(o,g){const h=[];for(const C of o.children.values())if(C.symbol.selectionRange.startLineNumber!==C.symbol.range.endLineNumber)if(C.symbol.selectionRange.startLineNumber!==g)h.push(this._stickyModelFromOutlineElement(C,C.symbol.selectionRange.startLineNumber));else for(const w of C.children.values())h.push(this._stickyModelFromOutlineElement(w,C.symbol.selectionRange.startLineNumber));h.sort((C,w)=>this._comparator(C.range,w.range));const m=new a.StickyRange(o.symbol.selectionRange.startLineNumber,o.symbol.range.endLineNumber);return new a.StickyElement(m,h,void 0)}_comparator(o,g){return o.startLineNumber!==g.startLineNumber?o.startLineNumber-g.startLineNumber:g.endLineNumber-o.endLineNumber}_findSumOfRangesOfGroup(o){let g=0;for(const h of o.children.values())g+=this._findSumOfRangesOfGroup(h);return o instanceof y.OutlineElement?g+o.symbol.range.endLineNumber-o.symbol.selectionRange.startLineNumber:g}};f=ke([ge(0,k.ILanguageFeaturesService)],f);class c extends u{constructor(o){super(),this._foldingLimitReporter=new S.RangesLimitReporter(o)}createStickyModel(o,g,h,m){const C=this._fromFoldingRegions(m);return new a.StickyModel(o.uri,g,C,void 0)}isModelValid(o){return o!==null}_fromFoldingRegions(o){const g=o.length,h=[],m=new a.StickyElement(void 0,[],void 0);for(let C=0;C<g;C++){const w=o.getParentIndex(C);let D;w!==-1?D=h[w]:D=m;const I=new a.StickyElement(new a.StickyRange(o.getStartLineNumber(C),o.getEndLineNumber(C)+1),[],D);D.children.push(I),h.push(I)}return m}}let d=class extends c{constructor(o,g){super(o),this._languageConfigurationService=g}createModelFromProvider(o,g,h){return new _.IndentRangeProvider(o,this._languageConfigurationService,this._foldingLimitReporter).compute(h)}};d=ke([ge(1,v.ILanguageConfigurationService)],d);let s=class extends c{constructor(o,g){super(o),this._languageFeaturesService=g}isProviderValid(o){return S.FoldingController.getFoldingRangeProviders(this._languageFeaturesService,o).length>0}createModelFromProvider(o,g,h){const m=S.FoldingController.getFoldingRangeProviders(this._languageFeaturesService,o);return new p.SyntaxRangeProvider(o,m,()=>this.createModelFromProvider(o,g,h),this._foldingLimitReporter,void 0).compute(h)}};s=ke([ge(1,k.ILanguageFeaturesService)],s)}),define(se[907],oe([1,0,2,18,19,14,13,6,32,906]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StickyLineCandidateProvider=e.StickyLineCandidate=void 0;class b{constructor(n,t,r){this.startLineNumber=n,this.endLineNumber=t,this.nestingDepth=r}}e.StickyLineCandidate=b;let a=class extends L.Disposable{constructor(n,t,r){super(),this._languageFeaturesService=t,this._languageConfigurationService=r,this._onDidChangeStickyScroll=this._register(new p.Emitter),this.onDidChangeStickyScroll=this._onDidChangeStickyScroll.event,this._options=null,this._model=null,this._cts=null,this._stickyModelProvider=null,this._editor=n,this._sessionStore=this._register(new L.DisposableStore),this._updateSoon=this._register(new E.RunOnceScheduler(()=>this.update(),50)),this._register(this._editor.onDidChangeConfiguration(u=>{u.hasChanged(114)&&this.readConfiguration()})),this.readConfiguration()}readConfiguration(){this._stickyModelProvider=null,this._sessionStore.clear(),this._options=this._editor.getOption(114),this._options.enabled&&(this._stickyModelProvider=this._sessionStore.add(new v.StickyModelProvider(this._editor,this._languageConfigurationService,this._languageFeaturesService,this._options.defaultModel)),this._sessionStore.add(this._editor.onDidChangeModel(()=>{this._model=null,this._onDidChangeStickyScroll.fire(),this.update()})),this._sessionStore.add(this._editor.onDidChangeHiddenAreas(()=>this.update())),this._sessionStore.add(this._editor.onDidChangeModelContent(()=>this._updateSoon.schedule())),this._sessionStore.add(this._languageFeaturesService.documentSymbolProvider.onDidChange(()=>this.update())),this.update())}getVersionId(){var n;return(n=this._model)===null||n===void 0?void 0:n.version}async update(){var n;(n=this._cts)===null||n===void 0||n.dispose(!0),this._cts=new y.CancellationTokenSource,await this.updateStickyModel(this._cts.token),this._onDidChangeStickyScroll.fire()}async updateStickyModel(n){if(!this._editor.hasModel()||!this._stickyModelProvider||this._editor.getModel().isTooLargeForTokenization()){this._model=null;return}const t=this._editor.getModel(),r=t.getVersionId(),u=await this._stickyModelProvider.update(t,r,n);n.isCancellationRequested||(this._model=u)}updateIndex(n){return n===-1?n=0:n<0&&(n=-n-2),n}getCandidateStickyLinesIntersectingFromStickyModel(n,t,r,u,f){if(t.children.length===0)return;let c=f;const d=[];for(let o=0;o<t.children.length;o++){const g=t.children[o];g.range&&d.push(g.range.startLineNumber)}const s=this.updateIndex((0,S.binarySearch)(d,n.startLineNumber,(o,g)=>o-g)),l=this.updateIndex((0,S.binarySearch)(d,n.startLineNumber+u,(o,g)=>o-g));for(let o=s;o<=l;o++){const g=t.children[o];if(!g)return;if(g.range){const h=g.range.startLineNumber,m=g.range.endLineNumber;n.startLineNumber<=m+1&&h-1<=n.endLineNumber&&h!==c&&(c=h,r.push(new b(h,m-1,u+1)),this.getCandidateStickyLinesIntersectingFromStickyModel(n,g,r,u+1,h))}else this.getCandidateStickyLinesIntersectingFromStickyModel(n,g,r,u,f)}}getCandidateStickyLinesIntersecting(n){var t,r;if(!(!((t=this._model)===null||t===void 0)&&t.element))return[];let u=[];this.getCandidateStickyLinesIntersectingFromStickyModel(n,this._model.element,u,0,-1);const f=(r=this._editor._getViewModel())===null||r===void 0?void 0:r.getHiddenAreas();if(f)for(const c of f)u=u.filter(d=>!(d.startLineNumber>=c.startLineNumber&&d.endLineNumber<=c.endLineNumber+1));return u}};e.StickyLineCandidateProvider=a,e.StickyLineCandidateProvider=a=ke([ge(1,k.ILanguageFeaturesService),ge(2,_.ILanguageConfigurationService)],a)}),define(se[908],oe([1,0,7,93,13,2,28,255,168,10,102,155,120,378,477]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StickyScrollWidget=e.StickyScrollWidgetState=void 0;class t{constructor(h,m,C,w=null){this.startLineNumbers=h,this.endLineNumbers=m,this.lastLineRelativePosition=C,this.showEndForLine=w}equals(h){return!!h&&this.lastLineRelativePosition===h.lastLineRelativePosition&&this.showEndForLine===h.showEndForLine&&(0,y.equals)(this.startLineNumbers,h.startLineNumbers)&&(0,y.equals)(this.endLineNumbers,h.endLineNumbers)}}e.StickyScrollWidgetState=t;const r=(0,k.createTrustedTypesPolicy)(\"stickyScrollViewLayer\",{createHTML:g=>g}),u=\"data-sticky-line-index\",f=\"data-sticky-is-line\",c=\"data-sticky-is-line-number\",d=\"data-sticky-is-folding-icon\";class s extends E.Disposable{constructor(h){super(),this._editor=h,this._foldingIconStore=new E.DisposableStore,this._rootDomNode=document.createElement(\"div\"),this._lineNumbersDomNode=document.createElement(\"div\"),this._linesDomNodeScrollable=document.createElement(\"div\"),this._linesDomNode=document.createElement(\"div\"),this._lineHeight=this._editor.getOption(66),this._renderedStickyLines=[],this._lineNumbers=[],this._lastLineRelativePosition=0,this._minContentWidthInPx=0,this._isOnGlyphMargin=!1,this._lineNumbersDomNode.className=\"sticky-widget-line-numbers\",this._lineNumbersDomNode.setAttribute(\"role\",\"none\"),this._linesDomNode.className=\"sticky-widget-lines\",this._linesDomNode.setAttribute(\"role\",\"list\"),this._linesDomNodeScrollable.className=\"sticky-widget-lines-scrollable\",this._linesDomNodeScrollable.appendChild(this._linesDomNode),this._rootDomNode.className=\"sticky-widget\",this._rootDomNode.classList.toggle(\"peek\",h instanceof _.EmbeddedCodeEditorWidget),this._rootDomNode.appendChild(this._lineNumbersDomNode),this._rootDomNode.appendChild(this._linesDomNodeScrollable);const m=()=>{this._linesDomNode.style.left=this._editor.getOption(114).scrollWithEditor?`-${this._editor.getScrollLeft()}px`:\"0px\"};this._register(this._editor.onDidChangeConfiguration(C=>{C.hasChanged(114)&&m(),C.hasChanged(66)&&(this._lineHeight=this._editor.getOption(66))})),this._register(this._editor.onDidScrollChange(C=>{C.scrollLeftChanged&&m(),C.scrollWidthChanged&&this._updateWidgetWidth()})),this._register(this._editor.onDidChangeModel(()=>{m(),this._updateWidgetWidth()})),this._register(this._foldingIconStore),m(),this._register(this._editor.onDidLayoutChange(C=>{this._updateWidgetWidth()})),this._updateWidgetWidth()}get lineNumbers(){return this._lineNumbers}get lineNumberCount(){return this._lineNumbers.length}getRenderedStickyLine(h){return this._renderedStickyLines.find(m=>m.lineNumber===h)}getCurrentLines(){return this._lineNumbers}setState(h,m,C){if(C===void 0&&(!this._previousState&&!h||this._previousState&&this._previousState.equals(h)))return;const w=this._isWidgetHeightZero(h),D=w?void 0:h,I=w?0:this._findLineToRebuildWidgetFrom(h,C);this._renderRootNode(D,m,I),this._previousState=h}_isWidgetHeightZero(h){if(!h)return!0;const m=h.startLineNumbers.length*this._lineHeight+h.lastLineRelativePosition;if(m>0){this._lastLineRelativePosition=h.lastLineRelativePosition;const C=[...h.startLineNumbers];h.showEndForLine!==null&&(C[h.showEndForLine]=h.endLineNumbers[h.showEndForLine]),this._lineNumbers=C}else this._lastLineRelativePosition=0,this._lineNumbers=[];return m===0}_findLineToRebuildWidgetFrom(h,m){if(!h||!this._previousState)return 0;if(m!==void 0)return m;const C=this._previousState,w=h.startLineNumbers.findIndex(D=>!C.startLineNumbers.includes(D));return w===-1?0:w}_updateWidgetWidth(){const h=this._editor.getLayoutInfo(),m=h.contentLeft;this._lineNumbersDomNode.style.width=`${m}px`,this._linesDomNodeScrollable.style.setProperty(\"--vscode-editorStickyScroll-scrollableWidth\",`${this._editor.getScrollWidth()-h.verticalScrollbarWidth}px`),this._rootDomNode.style.width=`${h.width-h.verticalScrollbarWidth}px`}_clearStickyLinesFromLine(h){this._foldingIconStore.clear();for(let m=h;m<this._renderedStickyLines.length;m++){const C=this._renderedStickyLines[m];C.lineNumberDomNode.remove(),C.lineDomNode.remove()}this._renderedStickyLines=this._renderedStickyLines.slice(0,h),this._rootDomNode.style.display=\"none\"}_useFoldingOpacityTransition(h){this._lineNumbersDomNode.style.setProperty(\"--vscode-editorStickyScroll-foldingOpacityTransition\",`opacity ${h?.5:0}s`)}_setFoldingIconsVisibility(h){for(const m of this._renderedStickyLines){const C=m.foldingIcon;C&&C.setVisible(h?!0:C.isCollapsed)}}async _renderRootNode(h,m,C){if(this._clearStickyLinesFromLine(C),!h)return;for(const T of this._renderedStickyLines)this._updateTopAndZIndexOfStickyLine(T);const w=this._editor.getLayoutInfo(),D=this._lineNumbers.slice(C);for(const[T,A]of D.entries()){const P=this._renderChildNode(T+C,A,m,w);P&&(this._linesDomNode.appendChild(P.lineDomNode),this._lineNumbersDomNode.appendChild(P.lineNumberDomNode),this._renderedStickyLines.push(P))}m&&(this._setFoldingHoverListeners(),this._useFoldingOpacityTransition(!this._isOnGlyphMargin));const I=this._lineNumbers.length*this._lineHeight+this._lastLineRelativePosition;this._rootDomNode.style.display=\"block\",this._lineNumbersDomNode.style.height=`${I}px`,this._linesDomNodeScrollable.style.height=`${I}px`,this._rootDomNode.style.height=`${I}px`,this._rootDomNode.style.marginLeft=\"0px\",this._minContentWidthInPx=Math.max(...this._renderedStickyLines.map(T=>T.scrollWidth))+w.verticalScrollbarWidth,this._editor.layoutOverlayWidget(this)}_setFoldingHoverListeners(){this._editor.getOption(109)===\"mouseover\"&&(this._foldingIconStore.add(L.addDisposableListener(this._lineNumbersDomNode,L.EventType.MOUSE_ENTER,()=>{this._isOnGlyphMargin=!0,this._setFoldingIconsVisibility(!0)})),this._foldingIconStore.add(L.addDisposableListener(this._lineNumbersDomNode,L.EventType.MOUSE_LEAVE,()=>{this._isOnGlyphMargin=!1,this._useFoldingOpacityTransition(!0),this._setFoldingIconsVisibility(!1)})))}_renderChildNode(h,m,C,w){const D=this._editor._getViewModel();if(!D)return;const I=D.coordinatesConverter.convertModelPositionToViewPosition(new v.Position(m,1)).lineNumber,T=D.getViewLineRenderingData(I),A=this._editor.getOption(67);let P;try{P=a.LineDecoration.filter(T.inlineDecorations,I,T.minColumn,T.maxColumn)}catch{P=[]}const N=new i.RenderLineInput(!0,!0,T.content,T.continuesWithWrappedLine,T.isBasicASCII,T.containsRTL,0,T.tokens,P,T.tabSize,T.startVisibleColumn,1,1,1,500,\"none\",!0,!0,null),M=new b.StringBuilder(2e3),R=(0,i.renderViewLine)(N,M);let x;r?x=r.createHTML(M.build()):x=M.build();const O=document.createElement(\"span\");O.setAttribute(u,String(h)),O.setAttribute(f,\"\"),O.setAttribute(\"role\",\"listitem\"),O.tabIndex=0,O.className=\"sticky-line-content\",O.classList.add(`stickyLine${m}`),O.style.lineHeight=`${this._lineHeight}px`,O.innerHTML=x;const B=document.createElement(\"span\");B.setAttribute(u,String(h)),B.setAttribute(c,\"\"),B.className=\"sticky-line-number\",B.style.lineHeight=`${this._lineHeight}px`;const W=w.contentLeft;B.style.width=`${W}px`;const V=document.createElement(\"span\");A.renderType===1||A.renderType===3&&m%10===0?V.innerText=m.toString():A.renderType===2&&(V.innerText=Math.abs(m-this._editor.getPosition().lineNumber).toString()),V.className=\"sticky-line-number-inner\",V.style.lineHeight=`${this._lineHeight}px`,V.style.width=`${w.lineNumbersWidth}px`,V.style.paddingLeft=`${w.lineNumbersLeft}px`,B.appendChild(V);const K=this._renderFoldingIconForLine(C,m);K&&B.appendChild(K.domNode),this._editor.applyFontInfo(O),this._editor.applyFontInfo(V),B.style.lineHeight=`${this._lineHeight}px`,O.style.lineHeight=`${this._lineHeight}px`,B.style.height=`${this._lineHeight}px`,O.style.height=`${this._lineHeight}px`;const F=new l(h,m,O,B,K,R.characterMapping,O.scrollWidth);return this._updateTopAndZIndexOfStickyLine(F)}_updateTopAndZIndexOfStickyLine(h){var m;const C=h.index,w=h.lineDomNode,D=h.lineNumberDomNode,I=C===this._lineNumbers.length-1,T=\"0\",A=\"1\";w.style.zIndex=I?T:A,D.style.zIndex=I?T:A;const P=`${C*this._lineHeight+this._lastLineRelativePosition+(!((m=h.foldingIcon)===null||m===void 0)&&m.isCollapsed?1:0)}px`,N=`${C*this._lineHeight}px`;return w.style.top=I?P:N,D.style.top=I?P:N,h}_renderFoldingIconForLine(h,m){const C=this._editor.getOption(109);if(!h||C===\"never\")return;const w=h.regions,D=w.findRange(m),I=w.getStartLineNumber(D);if(!(m===I))return;const A=w.isCollapsed(D),P=new o(A,I,w.getEndLineNumber(D),this._lineHeight);return P.setVisible(this._isOnGlyphMargin?!0:A||C===\"always\"),P.domNode.setAttribute(d,\"\"),P}getId(){return\"editor.contrib.stickyScrollWidget\"}getDomNode(){return this._rootDomNode}getPosition(){return{preference:null}}getMinContentWidthInPx(){return this._minContentWidthInPx}focusLineWithIndex(h){0<=h&&h<this._renderedStickyLines.length&&this._renderedStickyLines[h].lineDomNode.focus()}getEditorPositionFromNode(h){if(!h||h.children.length>0)return null;const m=this._getRenderedStickyLineFromChildDomNode(h);if(!m)return null;const C=(0,p.getColumnOfNodeOffset)(m.characterMapping,h,0);return new v.Position(m.lineNumber,C)}getLineNumberFromChildDomNode(h){var m,C;return(C=(m=this._getRenderedStickyLineFromChildDomNode(h))===null||m===void 0?void 0:m.lineNumber)!==null&&C!==void 0?C:null}_getRenderedStickyLineFromChildDomNode(h){const m=this.getLineIndexFromChildDomNode(h);return m===null||m<0||m>=this._renderedStickyLines.length?null:this._renderedStickyLines[m]}getLineIndexFromChildDomNode(h){const m=this._getAttributeValue(h,u);return m?parseInt(m,10):null}isInStickyLine(h){return this._getAttributeValue(h,f)!==void 0}isInFoldingIconDomNode(h){return this._getAttributeValue(h,d)!==void 0}_getAttributeValue(h,m){for(;h&&h!==this._rootDomNode;){const C=h.getAttribute(m);if(C!==null)return C;h=h.parentElement}}}e.StickyScrollWidget=s;class l{constructor(h,m,C,w,D,I,T){this.index=h,this.lineNumber=m,this.lineDomNode=C,this.lineNumberDomNode=w,this.foldingIcon=D,this.characterMapping=I,this.scrollWidth=T}}class o{constructor(h,m,C,w){this.isCollapsed=h,this.foldingStartLine=m,this.foldingEndLine=C,this.dimension=w,this.domNode=document.createElement(\"div\"),this.domNode.style.width=`${w}px`,this.domNode.style.height=`${w}px`,this.domNode.className=S.ThemeIcon.asClassName(h?n.foldingCollapsedIcon:n.foldingExpandedIcon)}setVisible(h){this.domNode.style.cursor=h?\"pointer\":\"default\",this.domNode.style.opacity=h?\"1\":\"0\"}}}),define(se[909],oe([1,0,7,119,14,12,6,2,145,11,168,877,718,15,8,92,29,89,23,225,138,355,872,106,48,177,478,254]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h){\"use strict\";var m;Object.defineProperty(e,\"__esModule\",{value:!0}),e.SuggestContentWidget=e.SuggestWidget=e.editorSuggestWidgetSelectedBackground=void 0,(0,u.registerColor)(\"editorSuggestWidget.background\",{dark:u.editorWidgetBackground,light:u.editorWidgetBackground,hcDark:u.editorWidgetBackground,hcLight:u.editorWidgetBackground},i.localize(0,null)),(0,u.registerColor)(\"editorSuggestWidget.border\",{dark:u.editorWidgetBorder,light:u.editorWidgetBorder,hcDark:u.editorWidgetBorder,hcLight:u.editorWidgetBorder},i.localize(1,null));const C=(0,u.registerColor)(\"editorSuggestWidget.foreground\",{dark:u.editorForeground,light:u.editorForeground,hcDark:u.editorForeground,hcLight:u.editorForeground},i.localize(2,null));(0,u.registerColor)(\"editorSuggestWidget.selectedForeground\",{dark:u.quickInputListFocusForeground,light:u.quickInputListFocusForeground,hcDark:u.quickInputListFocusForeground,hcLight:u.quickInputListFocusForeground},i.localize(3,null)),(0,u.registerColor)(\"editorSuggestWidget.selectedIconForeground\",{dark:u.quickInputListFocusIconForeground,light:u.quickInputListFocusIconForeground,hcDark:u.quickInputListFocusIconForeground,hcLight:u.quickInputListFocusIconForeground},i.localize(4,null)),e.editorSuggestWidgetSelectedBackground=(0,u.registerColor)(\"editorSuggestWidget.selectedBackground\",{dark:u.quickInputListFocusBackground,light:u.quickInputListFocusBackground,hcDark:u.quickInputListFocusBackground,hcLight:u.quickInputListFocusBackground},i.localize(5,null)),(0,u.registerColor)(\"editorSuggestWidget.highlightForeground\",{dark:u.listHighlightForeground,light:u.listHighlightForeground,hcDark:u.listHighlightForeground,hcLight:u.listHighlightForeground},i.localize(6,null)),(0,u.registerColor)(\"editorSuggestWidget.focusHighlightForeground\",{dark:u.listFocusHighlightForeground,light:u.listFocusHighlightForeground,hcDark:u.listFocusHighlightForeground,hcLight:u.listFocusHighlightForeground},i.localize(7,null)),(0,u.registerColor)(\"editorSuggestWidgetStatus.foreground\",{dark:(0,u.transparent)(C,.5),light:(0,u.transparent)(C,.5),hcDark:(0,u.transparent)(C,.5),hcLight:(0,u.transparent)(C,.5)},i.localize(8,null));class w{constructor(A,P){this._service=A,this._key=`suggestWidget.size/${P.getEditorType()}/${P instanceof b.EmbeddedCodeEditorWidget}`}restore(){var A;const P=(A=this._service.get(this._key,0))!==null&&A!==void 0?A:\"\";try{const N=JSON.parse(P);if(L.Dimension.is(N))return L.Dimension.lift(N)}catch{}}store(A){this._service.store(this._key,JSON.stringify(A),0,1)}reset(){this._service.remove(this._key,0)}}let D=m=class{constructor(A,P,N,M,R){this.editor=A,this._storageService=P,this._state=0,this._isAuto=!1,this._pendingLayout=new p.MutableDisposable,this._pendingShowDetails=new p.MutableDisposable,this._ignoreFocusEvents=!1,this._forceRenderingAbove=!1,this._explainMode=!1,this._showTimeout=new y.TimeoutTimer,this._disposables=new p.DisposableStore,this._onDidSelect=new S.PauseableEmitter,this._onDidFocus=new S.PauseableEmitter,this._onDidHide=new S.Emitter,this._onDidShow=new S.Emitter,this.onDidSelect=this._onDidSelect.event,this.onDidFocus=this._onDidFocus.event,this.onDidHide=this._onDidHide.event,this.onDidShow=this._onDidShow.event,this._onDetailsKeydown=new S.Emitter,this.onDetailsKeyDown=this._onDetailsKeydown.event,this.element=new d.ResizableHTMLElement,this.element.domNode.classList.add(\"editor-widget\",\"suggest-widget\"),this._contentWidget=new I(this,A),this._persistedSize=new w(P,A);class x{constructor(q,ie,ae=!1,ne=!1){this.persistedSize=q,this.currentSize=ie,this.persistHeight=ae,this.persistWidth=ne}}let O;this._disposables.add(this.element.onDidWillResize(()=>{this._contentWidget.lockPreference(),O=new x(this._persistedSize.restore(),this.element.size)})),this._disposables.add(this.element.onDidResize(F=>{var q,ie,ae,ne;if(this._resize(F.dimension.width,F.dimension.height),O&&(O.persistHeight=O.persistHeight||!!F.north||!!F.south,O.persistWidth=O.persistWidth||!!F.east||!!F.west),!!F.done){if(O){const{itemHeight:$,defaultSize:J}=this.getLayoutInfo(),Q=Math.round($/2);let{width:re,height:de}=this.element.size;(!O.persistHeight||Math.abs(O.currentSize.height-de)<=Q)&&(de=(ie=(q=O.persistedSize)===null||q===void 0?void 0:q.height)!==null&&ie!==void 0?ie:J.height),(!O.persistWidth||Math.abs(O.currentSize.width-re)<=Q)&&(re=(ne=(ae=O.persistedSize)===null||ae===void 0?void 0:ae.width)!==null&&ne!==void 0?ne:J.width),this._persistedSize.store(new L.Dimension(re,de))}this._contentWidget.unlockPreference(),O=void 0}})),this._messageElement=L.append(this.element.domNode,L.$(\".message\")),this._listElement=L.append(this.element.domNode,L.$(\".tree\"));const B=this._disposables.add(R.createInstance(l.SuggestDetailsWidget,this.editor));B.onDidClose(this.toggleDetails,this,this._disposables),this._details=new l.SuggestDetailsOverlay(B,this.editor);const W=()=>this.element.domNode.classList.toggle(\"no-icons\",!this.editor.getOption(117).showIcons);W();const V=R.createInstance(o.ItemRenderer,this.editor);this._disposables.add(V),this._disposables.add(V.onDidToggleDetails(()=>this.toggleDetails())),this._list=new k.List(\"SuggestWidget\",this._listElement,{getHeight:F=>this.getLayoutInfo().itemHeight,getTemplateId:F=>\"suggestion\"},[V],{alwaysConsumeMouseWheel:!0,useShadows:!1,mouseSupport:!1,multipleSelectionSupport:!1,accessibilityProvider:{getRole:()=>\"option\",getWidgetAriaLabel:()=>i.localize(11,null),getWidgetRole:()=>\"listbox\",getAriaLabel:F=>{let q=F.textLabel;if(typeof F.completion.label!=\"string\"){const{detail:$,description:J}=F.completion.label;$&&J?q=i.localize(12,null,q,$,J):$?q=i.localize(13,null,q,$):J&&(q=i.localize(14,null,q,J))}if(!F.isResolved||!this._isDetailsVisible())return q;const{documentation:ie,detail:ae}=F.completion,ne=v.format(\"{0}{1}\",ae||\"\",ie?typeof ie==\"string\"?ie:ie.value:\"\");return i.localize(15,null,q,ne)}}}),this._list.style((0,g.getListStyles)({listInactiveFocusBackground:e.editorSuggestWidgetSelectedBackground,listInactiveFocusOutline:u.activeContrastBorder})),this._status=R.createInstance(a.SuggestWidgetStatus,this.element.domNode,s.suggestWidgetStatusbarMenu);const K=()=>this.element.domNode.classList.toggle(\"with-status-bar\",this.editor.getOption(117).showStatusBar);K(),this._disposables.add(M.onDidColorThemeChange(F=>this._onThemeChange(F))),this._onThemeChange(M.getColorTheme()),this._disposables.add(this._list.onMouseDown(F=>this._onListMouseDownOrTap(F))),this._disposables.add(this._list.onTap(F=>this._onListMouseDownOrTap(F))),this._disposables.add(this._list.onDidChangeSelection(F=>this._onListSelection(F))),this._disposables.add(this._list.onDidChangeFocus(F=>this._onListFocus(F))),this._disposables.add(this.editor.onDidChangeCursorSelection(()=>this._onCursorSelectionChanged())),this._disposables.add(this.editor.onDidChangeConfiguration(F=>{F.hasChanged(117)&&(K(),W()),this._completionModel&&(F.hasChanged(50)||F.hasChanged(118)||F.hasChanged(119))&&this._list.splice(0,this._list.length,this._completionModel.items)})),this._ctxSuggestWidgetVisible=s.Context.Visible.bindTo(N),this._ctxSuggestWidgetDetailsVisible=s.Context.DetailsVisible.bindTo(N),this._ctxSuggestWidgetMultipleSuggestions=s.Context.MultipleSuggestions.bindTo(N),this._ctxSuggestWidgetHasFocusedSuggestion=s.Context.HasFocusedSuggestion.bindTo(N),this._disposables.add(L.addStandardDisposableListener(this._details.widget.domNode,\"keydown\",F=>{this._onDetailsKeydown.fire(F)})),this._disposables.add(this.editor.onMouseDown(F=>this._onEditorMouseDown(F)))}dispose(){var A;this._details.widget.dispose(),this._details.dispose(),this._list.dispose(),this._status.dispose(),this._disposables.dispose(),(A=this._loadingTimeout)===null||A===void 0||A.dispose(),this._pendingLayout.dispose(),this._pendingShowDetails.dispose(),this._showTimeout.dispose(),this._contentWidget.dispose(),this.element.dispose()}_onEditorMouseDown(A){this._details.widget.domNode.contains(A.target.element)?this._details.widget.domNode.focus():this.element.domNode.contains(A.target.element)&&this.editor.focus()}_onCursorSelectionChanged(){this._state!==0&&this._contentWidget.layout()}_onListMouseDownOrTap(A){typeof A.element>\"u\"||typeof A.index>\"u\"||(A.browserEvent.preventDefault(),A.browserEvent.stopPropagation(),this._select(A.element,A.index))}_onListSelection(A){A.elements.length&&this._select(A.elements[0],A.indexes[0])}_select(A,P){const N=this._completionModel;N&&(this._onDidSelect.fire({item:A,index:P,model:N}),this.editor.focus())}_onThemeChange(A){this._details.widget.borderWidth=(0,f.isHighContrast)(A.type)?2:1}_onListFocus(A){var P;if(this._ignoreFocusEvents)return;if(!A.elements.length){this._currentSuggestionDetails&&(this._currentSuggestionDetails.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem=void 0),this.editor.setAriaOptions({activeDescendant:void 0}),this._ctxSuggestWidgetHasFocusedSuggestion.set(!1);return}if(!this._completionModel)return;this._ctxSuggestWidgetHasFocusedSuggestion.set(!0);const N=A.elements[0],M=A.indexes[0];N!==this._focusedItem&&((P=this._currentSuggestionDetails)===null||P===void 0||P.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem=N,this._list.reveal(M),this._currentSuggestionDetails=(0,y.createCancelablePromise)(async R=>{const x=(0,y.disposableTimeout)(()=>{this._isDetailsVisible()&&this.showDetails(!0)},250),O=R.onCancellationRequested(()=>x.dispose());try{return await N.resolve(R)}finally{x.dispose(),O.dispose()}}),this._currentSuggestionDetails.then(()=>{M>=this._list.length||N!==this._list.element(M)||(this._ignoreFocusEvents=!0,this._list.splice(M,1,[N]),this._list.setFocus([M]),this._ignoreFocusEvents=!1,this._isDetailsVisible()?this.showDetails(!1):this.element.domNode.classList.remove(\"docs-side\"),this.editor.setAriaOptions({activeDescendant:(0,o.getAriaId)(M)}))}).catch(E.onUnexpectedError)),this._onDidFocus.fire({item:N,index:M,model:this._completionModel})}_setState(A){if(this._state!==A)switch(this._state=A,this.element.domNode.classList.toggle(\"frozen\",A===4),this.element.domNode.classList.remove(\"message\"),A){case 0:L.hide(this._messageElement,this._listElement,this._status.element),this._details.hide(!0),this._status.hide(),this._contentWidget.hide(),this._ctxSuggestWidgetVisible.reset(),this._ctxSuggestWidgetMultipleSuggestions.reset(),this._ctxSuggestWidgetHasFocusedSuggestion.reset(),this._showTimeout.cancel(),this.element.domNode.classList.remove(\"visible\"),this._list.splice(0,this._list.length),this._focusedItem=void 0,this._cappedHeight=void 0,this._explainMode=!1;break;case 1:this.element.domNode.classList.add(\"message\"),this._messageElement.textContent=m.LOADING_MESSAGE,L.hide(this._listElement,this._status.element),L.show(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0,(0,h.status)(m.LOADING_MESSAGE);break;case 2:this.element.domNode.classList.add(\"message\"),this._messageElement.textContent=m.NO_SUGGESTIONS_MESSAGE,L.hide(this._listElement,this._status.element),L.show(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0,(0,h.status)(m.NO_SUGGESTIONS_MESSAGE);break;case 3:L.hide(this._messageElement),L.show(this._listElement,this._status.element),this._show();break;case 4:L.hide(this._messageElement),L.show(this._listElement,this._status.element),this._show();break;case 5:L.hide(this._messageElement),L.show(this._listElement,this._status.element),this._details.show(),this._show();break}}_show(){this._status.show(),this._contentWidget.show(),this._layout(this._persistedSize.restore()),this._ctxSuggestWidgetVisible.set(!0),this._showTimeout.cancelAndSet(()=>{this.element.domNode.classList.add(\"visible\"),this._onDidShow.fire(this)},100)}showTriggered(A,P){this._state===0&&(this._contentWidget.setPosition(this.editor.getPosition()),this._isAuto=!!A,this._isAuto||(this._loadingTimeout=(0,y.disposableTimeout)(()=>this._setState(1),P)))}showSuggestions(A,P,N,M,R){var x,O;if(this._contentWidget.setPosition(this.editor.getPosition()),(x=this._loadingTimeout)===null||x===void 0||x.dispose(),(O=this._currentSuggestionDetails)===null||O===void 0||O.cancel(),this._currentSuggestionDetails=void 0,this._completionModel!==A&&(this._completionModel=A),N&&this._state!==2&&this._state!==0){this._setState(4);return}const B=this._completionModel.items.length,W=B===0;if(this._ctxSuggestWidgetMultipleSuggestions.set(B>1),W){this._setState(M?0:2),this._completionModel=void 0;return}this._focusedItem=void 0,this._onDidFocus.pause(),this._onDidSelect.pause();try{this._list.splice(0,this._list.length,this._completionModel.items),this._setState(N?4:3),this._list.reveal(P,0),this._list.setFocus(R?[]:[P])}finally{this._onDidFocus.resume(),this._onDidSelect.resume()}this._pendingLayout.value=L.runAtThisOrScheduleAtNextAnimationFrame(L.getWindow(this.element.domNode),()=>{this._pendingLayout.clear(),this._layout(this.element.size),this._details.widget.domNode.classList.remove(\"focused\")})}focusSelected(){this._list.length>0&&this._list.setFocus([0])}selectNextPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageDown(),!0;case 1:return!this._isAuto;default:return this._list.focusNextPage(),!0}}selectNext(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusNext(1,!0),!0}}selectLast(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollBottom(),!0;case 1:return!this._isAuto;default:return this._list.focusLast(),!0}}selectPreviousPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageUp(),!0;case 1:return!this._isAuto;default:return this._list.focusPreviousPage(),!0}}selectPrevious(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusPrevious(1,!0),!1}}selectFirst(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollTop(),!0;case 1:return!this._isAuto;default:return this._list.focusFirst(),!0}}getFocusedItem(){if(this._state!==0&&this._state!==2&&this._state!==1&&this._completionModel&&this._list.getFocus().length>0)return{item:this._list.getFocusedElements()[0],index:this._list.getFocus()[0],model:this._completionModel}}toggleDetailsFocus(){this._state===5?(this._setState(3),this._details.widget.domNode.classList.remove(\"focused\")):this._state===3&&this._isDetailsVisible()&&(this._setState(5),this._details.widget.domNode.classList.add(\"focused\"))}toggleDetails(){this._isDetailsVisible()?(this._pendingShowDetails.clear(),this._ctxSuggestWidgetDetailsVisible.set(!1),this._setDetailsVisible(!1),this._details.hide(),this.element.domNode.classList.remove(\"shows-details\")):((0,l.canExpandCompletionItem)(this._list.getFocusedElements()[0])||this._explainMode)&&(this._state===3||this._state===5||this._state===4)&&(this._ctxSuggestWidgetDetailsVisible.set(!0),this._setDetailsVisible(!0),this.showDetails(!1))}showDetails(A){this._pendingShowDetails.value=L.runAtThisOrScheduleAtNextAnimationFrame(L.getWindow(this.element.domNode),()=>{this._pendingShowDetails.clear(),this._details.show(),A?this._details.widget.renderLoading():this._details.widget.renderItem(this._list.getFocusedElements()[0],this._explainMode),this._details.widget.isEmpty?this._details.hide():(this._positionDetails(),this.element.domNode.classList.add(\"shows-details\")),this.editor.focus()})}toggleExplainMode(){this._list.getFocusedElements()[0]&&(this._explainMode=!this._explainMode,this._isDetailsVisible()?this.showDetails(!1):this.toggleDetails())}resetPersistedSize(){this._persistedSize.reset()}hideWidget(){var A;this._pendingLayout.clear(),this._pendingShowDetails.clear(),(A=this._loadingTimeout)===null||A===void 0||A.dispose(),this._setState(0),this._onDidHide.fire(this),this.element.clearSashHoverState();const P=this._persistedSize.restore(),N=Math.ceil(this.getLayoutInfo().itemHeight*4.3);P&&P.height<N&&this._persistedSize.store(P.with(void 0,N))}isFrozen(){return this._state===4}_afterRender(A){if(A===null){this._isDetailsVisible()&&this._details.hide();return}this._state===2||this._state===1||(this._isDetailsVisible()&&!this._details.widget.isEmpty&&this._details.show(),this._positionDetails())}_layout(A){var P,N,M;if(!this.editor.hasModel()||!this.editor.getDomNode())return;const R=L.getClientArea(this.element.domNode.ownerDocument.body),x=this.getLayoutInfo();A||(A=x.defaultSize);let O=A.height,B=A.width;if(this._status.element.style.height=`${x.itemHeight}px`,this._state===2||this._state===1)O=x.itemHeight+x.borderHeight,B=x.defaultSize.width/2,this.element.enableSashes(!1,!1,!1,!1),this.element.minSize=this.element.maxSize=new L.Dimension(B,O),this._contentWidget.setPreference(2);else{const W=R.width-x.borderHeight-2*x.horizontalPadding;B>W&&(B=W);const V=this._completionModel?this._completionModel.stats.pLabelLen*x.typicalHalfwidthCharacterWidth:B,K=x.statusBarHeight+this._list.contentHeight+x.borderHeight,F=x.itemHeight+x.statusBarHeight,q=L.getDomNodePagePosition(this.editor.getDomNode()),ie=this.editor.getScrolledVisiblePosition(this.editor.getPosition()),ae=q.top+ie.top+ie.height,ne=Math.min(R.height-ae-x.verticalPadding,K),$=q.top+ie.top-x.verticalPadding,J=Math.min($,K);let Q=Math.min(Math.max(J,ne)+x.borderHeight,K);O===((P=this._cappedHeight)===null||P===void 0?void 0:P.capped)&&(O=this._cappedHeight.wanted),O<F&&(O=F),O>Q&&(O=Q);const re=150;O>ne||this._forceRenderingAbove&&$>re?(this._contentWidget.setPreference(1),this.element.enableSashes(!0,!0,!1,!1),Q=J):(this._contentWidget.setPreference(2),this.element.enableSashes(!1,!0,!0,!1),Q=ne),this.element.preferredSize=new L.Dimension(V,x.defaultSize.height),this.element.maxSize=new L.Dimension(W,Q),this.element.minSize=new L.Dimension(220,F),this._cappedHeight=O===K?{wanted:(M=(N=this._cappedHeight)===null||N===void 0?void 0:N.wanted)!==null&&M!==void 0?M:A.height,capped:O}:void 0}this._resize(B,O)}_resize(A,P){const{width:N,height:M}=this.element.maxSize;A=Math.min(N,A),P=Math.min(M,P);const{statusBarHeight:R}=this.getLayoutInfo();this._list.layout(P-R,A),this._listElement.style.height=`${P-R}px`,this.element.layout(P,A),this._contentWidget.layout(),this._positionDetails()}_positionDetails(){var A;this._isDetailsVisible()&&this._details.placeAtAnchor(this.element.domNode,((A=this._contentWidget.getPosition())===null||A===void 0?void 0:A.preference[0])===2)}getLayoutInfo(){const A=this.editor.getOption(50),P=(0,_.clamp)(this.editor.getOption(119)||A.lineHeight,8,1e3),N=!this.editor.getOption(117).showStatusBar||this._state===2||this._state===1?0:P,M=this._details.widget.borderWidth,R=2*M;return{itemHeight:P,statusBarHeight:N,borderWidth:M,borderHeight:R,typicalHalfwidthCharacterWidth:A.typicalHalfwidthCharacterWidth,verticalPadding:22,horizontalPadding:14,defaultSize:new L.Dimension(430,N+12*P+R)}}_isDetailsVisible(){return this._storageService.getBoolean(\"expandSuggestionDocs\",0,!1)}_setDetailsVisible(A){this._storageService.store(\"expandSuggestionDocs\",A,0,0)}forceRenderingAbove(){this._forceRenderingAbove||(this._forceRenderingAbove=!0,this._layout(this._persistedSize.restore()))}stopForceRenderingAbove(){this._forceRenderingAbove=!1}};e.SuggestWidget=D,D.LOADING_MESSAGE=i.localize(9,null),D.NO_SUGGESTIONS_MESSAGE=i.localize(10,null),e.SuggestWidget=D=m=ke([ge(1,r.IStorageService),ge(2,n.IContextKeyService),ge(3,c.IThemeService),ge(4,t.IInstantiationService)],D);class I{constructor(A,P){this._widget=A,this._editor=P,this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._preferenceLocked=!1,this._added=!1,this._hidden=!1}dispose(){this._added&&(this._added=!1,this._editor.removeContentWidget(this))}getId(){return\"editor.widget.suggestWidget\"}getDomNode(){return this._widget.element.domNode}show(){this._hidden=!1,this._added||(this._added=!0,this._editor.addContentWidget(this))}hide(){this._hidden||(this._hidden=!0,this.layout())}layout(){this._editor.layoutContentWidget(this)}getPosition(){return this._hidden||!this._position||!this._preference?null:{position:this._position,preference:[this._preference]}}beforeRender(){const{height:A,width:P}=this._widget.element.size,{borderWidth:N,horizontalPadding:M}=this._widget.getLayoutInfo();return new L.Dimension(P+2*N+M,A+2*N)}afterRender(A){this._widget._afterRender(A)}setPreference(A){this._preferenceLocked||(this._preference=A)}lockPreference(){this._preferenceLocked=!0}unlockPreference(){this._preferenceLocked=!1}setPosition(A){this._position=A}}e.SuggestContentWidget=I}),define(se[381],oe([1,0,41,38,31,727,29,23,482]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getSelectionHighlightDecorationOptions=e.getHighlightDecorationOptions=void 0;const _=(0,S.registerColor)(\"editor.wordHighlightBackground\",{dark:\"#575757B8\",light:\"#57575740\",hcDark:null,hcLight:null},E.localize(0,null),!0);(0,S.registerColor)(\"editor.wordHighlightStrongBackground\",{dark:\"#004972B8\",light:\"#0e639c40\",hcDark:null,hcLight:null},E.localize(1,null),!0),(0,S.registerColor)(\"editor.wordHighlightTextBackground\",{light:_,dark:_,hcDark:_,hcLight:_},E.localize(2,null),!0);const v=(0,S.registerColor)(\"editor.wordHighlightBorder\",{light:null,dark:null,hcDark:S.activeContrastBorder,hcLight:S.activeContrastBorder},E.localize(3,null));(0,S.registerColor)(\"editor.wordHighlightStrongBorder\",{light:null,dark:null,hcDark:S.activeContrastBorder,hcLight:S.activeContrastBorder},E.localize(4,null)),(0,S.registerColor)(\"editor.wordHighlightTextBorder\",{light:v,dark:v,hcDark:v,hcLight:v},E.localize(5,null));const b=(0,S.registerColor)(\"editorOverviewRuler.wordHighlightForeground\",{dark:\"#A0A0A0CC\",light:\"#A0A0A0CC\",hcDark:\"#A0A0A0CC\",hcLight:\"#A0A0A0CC\"},E.localize(6,null),!0),a=(0,S.registerColor)(\"editorOverviewRuler.wordHighlightStrongForeground\",{dark:\"#C0A0C0CC\",light:\"#C0A0C0CC\",hcDark:\"#C0A0C0CC\",hcLight:\"#C0A0C0CC\"},E.localize(7,null),!0),i=(0,S.registerColor)(\"editorOverviewRuler.wordHighlightTextForeground\",{dark:S.overviewRulerSelectionHighlightForeground,light:S.overviewRulerSelectionHighlightForeground,hcDark:S.overviewRulerSelectionHighlightForeground,hcLight:S.overviewRulerSelectionHighlightForeground},E.localize(8,null),!0),n=k.ModelDecorationOptions.register({description:\"word-highlight-strong\",stickiness:1,className:\"wordHighlightStrong\",overviewRuler:{color:(0,p.themeColorFromId)(a),position:L.OverviewRulerLane.Center},minimap:{color:(0,p.themeColorFromId)(S.minimapSelectionOccurrenceHighlight),position:L.MinimapPosition.Inline}}),t=k.ModelDecorationOptions.register({description:\"word-highlight-text\",stickiness:1,className:\"wordHighlightText\",overviewRuler:{color:(0,p.themeColorFromId)(i),position:L.OverviewRulerLane.Center},minimap:{color:(0,p.themeColorFromId)(S.minimapSelectionOccurrenceHighlight),position:L.MinimapPosition.Inline}}),r=k.ModelDecorationOptions.register({description:\"selection-highlight-overview\",stickiness:1,className:\"selectionHighlight\",overviewRuler:{color:(0,p.themeColorFromId)(S.overviewRulerSelectionHighlightForeground),position:L.OverviewRulerLane.Center},minimap:{color:(0,p.themeColorFromId)(S.minimapSelectionOccurrenceHighlight),position:L.MinimapPosition.Inline}}),u=k.ModelDecorationOptions.register({description:\"selection-highlight\",stickiness:1,className:\"selectionHighlight\"}),f=k.ModelDecorationOptions.register({description:\"word-highlight\",stickiness:1,className:\"wordHighlight\",overviewRuler:{color:(0,p.themeColorFromId)(b),position:L.OverviewRulerLane.Center},minimap:{color:(0,p.themeColorFromId)(S.minimapSelectionOccurrenceHighlight),position:L.MinimapPosition.Inline}});function c(s){return s===y.DocumentHighlightKind.Write?n:s===y.DocumentHighlightKind.Text?t:f}e.getHighlightDecorationOptions=c;function d(s){return s?u:r}e.getSelectionHighlightDecorationOptions=d,(0,p.registerThemingParticipant)((s,l)=>{const o=s.getColor(S.editorSelectionHighlight);o&&l.addRule(`.monaco-editor .selectionHighlight { background-color: ${o.transparent(.5)}; }`)})}),define(se[910],oe([1,0,48,14,65,2,16,208,5,24,21,377,703,30,15,18,381,8]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){\"use strict\";var c;Object.defineProperty(e,\"__esModule\",{value:!0}),e.FocusPreviousCursor=e.FocusNextCursor=e.SelectionHighlighter=e.CompatChangeAll=e.SelectHighlightsAction=e.MoveSelectionToPreviousFindMatchAction=e.MoveSelectionToNextFindMatchAction=e.AddSelectionToPreviousFindMatchAction=e.AddSelectionToNextFindMatchAction=e.MultiCursorSelectionControllerAction=e.MultiCursorSelectionController=e.MultiCursorSession=e.MultiCursorSessionResult=e.InsertCursorBelow=e.InsertCursorAbove=void 0;function d(K,F){const q=F.filter(ie=>!K.find(ae=>ae.equals(ie)));if(q.length>=1){const ie=q.map(ne=>`line ${ne.viewState.position.lineNumber} column ${ne.viewState.position.column}`).join(\", \"),ae=q.length===1?i.localize(0,null,ie):i.localize(1,null,ie);(0,L.status)(ae)}}class s extends S.EditorAction{constructor(){super({id:\"editor.action.insertCursorAbove\",label:i.localize(2,null),alias:\"Add Cursor Above\",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.editorTextFocus,primary:2576,linux:{primary:1552,secondary:[3088]},weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:\"3_multi\",title:i.localize(3,null),order:2}})}run(F,q,ie){if(!q.hasModel())return;let ae=!0;ie&&ie.logicalLine===!1&&(ae=!1);const ne=q._getViewModel();if(ne.cursorConfig.readOnly)return;ne.model.pushStackElement();const $=ne.getCursorStates();ne.setCursorStates(ie.source,3,p.CursorMoveCommands.addCursorUp(ne,$,ae)),ne.revealTopMostCursor(ie.source),d($,ne.getCursorStates())}}e.InsertCursorAbove=s;class l extends S.EditorAction{constructor(){super({id:\"editor.action.insertCursorBelow\",label:i.localize(4,null),alias:\"Add Cursor Below\",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.editorTextFocus,primary:2578,linux:{primary:1554,secondary:[3090]},weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:\"3_multi\",title:i.localize(5,null),order:3}})}run(F,q,ie){if(!q.hasModel())return;let ae=!0;ie&&ie.logicalLine===!1&&(ae=!1);const ne=q._getViewModel();if(ne.cursorConfig.readOnly)return;ne.model.pushStackElement();const $=ne.getCursorStates();ne.setCursorStates(ie.source,3,p.CursorMoveCommands.addCursorDown(ne,$,ae)),ne.revealBottomMostCursor(ie.source),d($,ne.getCursorStates())}}e.InsertCursorBelow=l;class o extends S.EditorAction{constructor(){super({id:\"editor.action.insertCursorAtEndOfEachLineSelected\",label:i.localize(6,null),alias:\"Add Cursors to Line Ends\",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.editorTextFocus,primary:1575,weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:\"3_multi\",title:i.localize(7,null),order:4}})}getCursorsForSelection(F,q,ie){if(!F.isEmpty()){for(let ae=F.startLineNumber;ae<F.endLineNumber;ae++){const ne=q.getLineMaxColumn(ae);ie.push(new v.Selection(ae,ne,ae,ne))}F.endColumn>1&&ie.push(new v.Selection(F.endLineNumber,F.endColumn,F.endLineNumber,F.endColumn))}}run(F,q){if(!q.hasModel())return;const ie=q.getModel(),ae=q.getSelections(),ne=q._getViewModel(),$=ne.getCursorStates(),J=[];ae.forEach(Q=>this.getCursorsForSelection(Q,ie,J)),J.length>0&&q.setSelections(J),d($,ne.getCursorStates())}}class g extends S.EditorAction{constructor(){super({id:\"editor.action.addCursorsToBottom\",label:i.localize(8,null),alias:\"Add Cursors To Bottom\",precondition:void 0})}run(F,q){if(!q.hasModel())return;const ie=q.getSelections(),ae=q.getModel().getLineCount(),ne=[];for(let Q=ie[0].startLineNumber;Q<=ae;Q++)ne.push(new v.Selection(Q,ie[0].startColumn,Q,ie[0].endColumn));const $=q._getViewModel(),J=$.getCursorStates();ne.length>0&&q.setSelections(ne),d(J,$.getCursorStates())}}class h extends S.EditorAction{constructor(){super({id:\"editor.action.addCursorsToTop\",label:i.localize(9,null),alias:\"Add Cursors To Top\",precondition:void 0})}run(F,q){if(!q.hasModel())return;const ie=q.getSelections(),ae=[];for(let J=ie[0].startLineNumber;J>=1;J--)ae.push(new v.Selection(J,ie[0].startColumn,J,ie[0].endColumn));const ne=q._getViewModel(),$=ne.getCursorStates();ae.length>0&&q.setSelections(ae),d($,ne.getCursorStates())}}class m{constructor(F,q,ie){this.selections=F,this.revealRange=q,this.revealScrollType=ie}}e.MultiCursorSessionResult=m;class C{static create(F,q){if(!F.hasModel())return null;const ie=q.getState();if(!F.hasTextFocus()&&ie.isRevealed&&ie.searchString.length>0)return new C(F,q,!1,ie.searchString,ie.wholeWord,ie.matchCase,null);let ae=!1,ne,$;const J=F.getSelections();J.length===1&&J[0].isEmpty()?(ae=!0,ne=!0,$=!0):(ne=ie.wholeWord,$=ie.matchCase);const Q=F.getSelection();let re,de=null;if(Q.isEmpty()){const he=F.getConfiguredWordAtPosition(Q.getStartPosition());if(!he)return null;re=he.word,de=new v.Selection(Q.startLineNumber,he.startColumn,Q.startLineNumber,he.endColumn)}else re=F.getModel().getValueInRange(Q).replace(/\\r\\n/g,`\n`);return new C(F,q,ae,re,ne,$,de)}constructor(F,q,ie,ae,ne,$,J){this._editor=F,this.findController=q,this.isDisconnectedFromFindController=ie,this.searchText=ae,this.wholeWord=ne,this.matchCase=$,this.currentMatch=J}addSelectionToNextFindMatch(){if(!this._editor.hasModel())return null;const F=this._getNextMatch();if(!F)return null;const q=this._editor.getSelections();return new m(q.concat(F),F,0)}moveSelectionToNextFindMatch(){if(!this._editor.hasModel())return null;const F=this._getNextMatch();if(!F)return null;const q=this._editor.getSelections();return new m(q.slice(0,q.length-1).concat(F),F,0)}_getNextMatch(){if(!this._editor.hasModel())return null;if(this.currentMatch){const ae=this.currentMatch;return this.currentMatch=null,ae}this.findController.highlightFindOptions();const F=this._editor.getSelections(),q=F[F.length-1],ie=this._editor.getModel().findNextMatch(this.searchText,q.getEndPosition(),!1,this.matchCase,this.wholeWord?this._editor.getOption(129):null,!1);return ie?new v.Selection(ie.range.startLineNumber,ie.range.startColumn,ie.range.endLineNumber,ie.range.endColumn):null}addSelectionToPreviousFindMatch(){if(!this._editor.hasModel())return null;const F=this._getPreviousMatch();if(!F)return null;const q=this._editor.getSelections();return new m(q.concat(F),F,0)}moveSelectionToPreviousFindMatch(){if(!this._editor.hasModel())return null;const F=this._getPreviousMatch();if(!F)return null;const q=this._editor.getSelections();return new m(q.slice(0,q.length-1).concat(F),F,0)}_getPreviousMatch(){if(!this._editor.hasModel())return null;if(this.currentMatch){const ae=this.currentMatch;return this.currentMatch=null,ae}this.findController.highlightFindOptions();const F=this._editor.getSelections(),q=F[F.length-1],ie=this._editor.getModel().findPreviousMatch(this.searchText,q.getStartPosition(),!1,this.matchCase,this.wholeWord?this._editor.getOption(129):null,!1);return ie?new v.Selection(ie.range.startLineNumber,ie.range.startColumn,ie.range.endLineNumber,ie.range.endColumn):null}selectAll(F){if(!this._editor.hasModel())return[];this.findController.highlightFindOptions();const q=this._editor.getModel();return F?q.findMatches(this.searchText,F,!1,this.matchCase,this.wholeWord?this._editor.getOption(129):null,!1,1073741824):q.findMatches(this.searchText,!0,!1,this.matchCase,this.wholeWord?this._editor.getOption(129):null,!1,1073741824)}}e.MultiCursorSession=C;class w extends E.Disposable{static get(F){return F.getContribution(w.ID)}constructor(F){super(),this._sessionDispose=this._register(new E.DisposableStore),this._editor=F,this._ignoreSelectionChange=!1,this._session=null}dispose(){this._endSession(),super.dispose()}_beginSessionIfNeeded(F){if(!this._session){const q=C.create(this._editor,F);if(!q)return;this._session=q;const ie={searchString:this._session.searchText};this._session.isDisconnectedFromFindController&&(ie.wholeWordOverride=1,ie.matchCaseOverride=1,ie.isRegexOverride=2),F.getState().change(ie,!1),this._sessionDispose.add(this._editor.onDidChangeCursorSelection(ae=>{this._ignoreSelectionChange||this._endSession()})),this._sessionDispose.add(this._editor.onDidBlurEditorText(()=>{this._endSession()})),this._sessionDispose.add(F.getState().onFindReplaceStateChange(ae=>{(ae.matchCase||ae.wholeWord)&&this._endSession()}))}}_endSession(){if(this._sessionDispose.clear(),this._session&&this._session.isDisconnectedFromFindController){const F={wholeWordOverride:0,matchCaseOverride:0,isRegexOverride:0};this._session.findController.getState().change(F,!1)}this._session=null}_setSelections(F){this._ignoreSelectionChange=!0,this._editor.setSelections(F),this._ignoreSelectionChange=!1}_expandEmptyToWord(F,q){if(!q.isEmpty())return q;const ie=this._editor.getConfiguredWordAtPosition(q.getStartPosition());return ie?new v.Selection(q.startLineNumber,ie.startColumn,q.startLineNumber,ie.endColumn):q}_applySessionResult(F){F&&(this._setSelections(F.selections),F.revealRange&&this._editor.revealRangeInCenterIfOutsideViewport(F.revealRange,F.revealScrollType))}getSession(F){return this._session}addSelectionToNextFindMatch(F){if(this._editor.hasModel()){if(!this._session){const q=this._editor.getSelections();if(q.length>1){const ae=F.getState().matchCase;if(!O(this._editor.getModel(),q,ae)){const $=this._editor.getModel(),J=[];for(let Q=0,re=q.length;Q<re;Q++)J[Q]=this._expandEmptyToWord($,q[Q]);this._editor.setSelections(J);return}}}this._beginSessionIfNeeded(F),this._session&&this._applySessionResult(this._session.addSelectionToNextFindMatch())}}addSelectionToPreviousFindMatch(F){this._beginSessionIfNeeded(F),this._session&&this._applySessionResult(this._session.addSelectionToPreviousFindMatch())}moveSelectionToNextFindMatch(F){this._beginSessionIfNeeded(F),this._session&&this._applySessionResult(this._session.moveSelectionToNextFindMatch())}moveSelectionToPreviousFindMatch(F){this._beginSessionIfNeeded(F),this._session&&this._applySessionResult(this._session.moveSelectionToPreviousFindMatch())}selectAll(F){if(!this._editor.hasModel())return;let q=null;const ie=F.getState();if(ie.isRevealed&&ie.searchString.length>0&&ie.isRegex){const ae=this._editor.getModel();ie.searchScope?q=ae.findMatches(ie.searchString,ie.searchScope,ie.isRegex,ie.matchCase,ie.wholeWord?this._editor.getOption(129):null,!1,1073741824):q=ae.findMatches(ie.searchString,!0,ie.isRegex,ie.matchCase,ie.wholeWord?this._editor.getOption(129):null,!1,1073741824)}else{if(this._beginSessionIfNeeded(F),!this._session)return;q=this._session.selectAll(ie.searchScope)}if(q.length>0){const ae=this._editor.getSelection();for(let ne=0,$=q.length;ne<$;ne++){const J=q[ne];if(J.range.intersectRanges(ae)){q[ne]=q[0],q[0]=J;break}}this._setSelections(q.map(ne=>new v.Selection(ne.range.startLineNumber,ne.range.startColumn,ne.range.endLineNumber,ne.range.endColumn)))}}}e.MultiCursorSelectionController=w,w.ID=\"editor.contrib.multiCursorController\";class D extends S.EditorAction{run(F,q){const ie=w.get(q);if(!ie)return;const ae=q._getViewModel();if(ae){const ne=ae.getCursorStates(),$=a.CommonFindController.get(q);if($)this._run(ie,$);else{const J=F.get(f.IInstantiationService).createInstance(a.CommonFindController,q);this._run(ie,J),J.dispose()}d(ne,ae.getCursorStates())}}}e.MultiCursorSelectionControllerAction=D;class I extends D{constructor(){super({id:\"editor.action.addSelectionToNextFindMatch\",label:i.localize(10,null),alias:\"Add Selection To Next Find Match\",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.focus,primary:2082,weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:\"3_multi\",title:i.localize(11,null),order:5}})}_run(F,q){F.addSelectionToNextFindMatch(q)}}e.AddSelectionToNextFindMatchAction=I;class T extends D{constructor(){super({id:\"editor.action.addSelectionToPreviousFindMatch\",label:i.localize(12,null),alias:\"Add Selection To Previous Find Match\",precondition:void 0,menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:\"3_multi\",title:i.localize(13,null),order:6}})}_run(F,q){F.addSelectionToPreviousFindMatch(q)}}e.AddSelectionToPreviousFindMatchAction=T;class A extends D{constructor(){super({id:\"editor.action.moveSelectionToNextFindMatch\",label:i.localize(14,null),alias:\"Move Last Selection To Next Find Match\",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.focus,primary:(0,y.KeyChord)(2089,2082),weight:100}})}_run(F,q){F.moveSelectionToNextFindMatch(q)}}e.MoveSelectionToNextFindMatchAction=A;class P extends D{constructor(){super({id:\"editor.action.moveSelectionToPreviousFindMatch\",label:i.localize(15,null),alias:\"Move Last Selection To Previous Find Match\",precondition:void 0})}_run(F,q){F.moveSelectionToPreviousFindMatch(q)}}e.MoveSelectionToPreviousFindMatchAction=P;class N extends D{constructor(){super({id:\"editor.action.selectHighlights\",label:i.localize(16,null),alias:\"Select All Occurrences of Find Match\",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.focus,primary:3114,weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:\"3_multi\",title:i.localize(17,null),order:7}})}_run(F,q){F.selectAll(q)}}e.SelectHighlightsAction=N;class M extends D{constructor(){super({id:\"editor.action.changeAll\",label:i.localize(18,null),alias:\"Change All Occurrences\",precondition:t.ContextKeyExpr.and(b.EditorContextKeys.writable,b.EditorContextKeys.editorTextFocus),kbOpts:{kbExpr:b.EditorContextKeys.editorTextFocus,primary:2108,weight:100},contextMenuOpts:{group:\"1_modification\",order:1.2}})}_run(F,q){F.selectAll(q)}}e.CompatChangeAll=M;class R{constructor(F,q,ie,ae,ne){this._model=F,this._searchText=q,this._matchCase=ie,this._wordSeparators=ae,this._modelVersionId=this._model.getVersionId(),this._cachedFindMatches=null,ne&&this._model===ne._model&&this._searchText===ne._searchText&&this._matchCase===ne._matchCase&&this._wordSeparators===ne._wordSeparators&&this._modelVersionId===ne._modelVersionId&&(this._cachedFindMatches=ne._cachedFindMatches)}findMatches(){return this._cachedFindMatches===null&&(this._cachedFindMatches=this._model.findMatches(this._searchText,!0,!1,this._matchCase,this._wordSeparators,!1).map(F=>F.range),this._cachedFindMatches.sort(_.Range.compareRangesUsingStarts)),this._cachedFindMatches}}let x=c=class extends E.Disposable{constructor(F,q){super(),this._languageFeaturesService=q,this.editor=F,this._isEnabled=F.getOption(107),this._decorations=F.createDecorationsCollection(),this.updateSoon=this._register(new k.RunOnceScheduler(()=>this._update(),300)),this.state=null,this._register(F.onDidChangeConfiguration(ae=>{this._isEnabled=F.getOption(107)})),this._register(F.onDidChangeCursorSelection(ae=>{this._isEnabled&&(ae.selection.isEmpty()?ae.reason===3?(this.state&&this._setState(null),this.updateSoon.schedule()):this._setState(null):this._update())})),this._register(F.onDidChangeModel(ae=>{this._setState(null)})),this._register(F.onDidChangeModelContent(ae=>{this._isEnabled&&this.updateSoon.schedule()}));const ie=a.CommonFindController.get(F);ie&&this._register(ie.getState().onFindReplaceStateChange(ae=>{this._update()})),this.updateSoon.schedule()}_update(){this._setState(c._createState(this.state,this._isEnabled,this.editor))}static _createState(F,q,ie){if(!q||!ie.hasModel())return null;const ae=ie.getSelection();if(ae.startLineNumber!==ae.endLineNumber)return null;const ne=w.get(ie);if(!ne)return null;const $=a.CommonFindController.get(ie);if(!$)return null;let J=ne.getSession($);if(!J){const de=ie.getSelections();if(de.length>1){const me=$.getState().matchCase;if(!O(ie.getModel(),de,me))return null}J=C.create(ie,$)}if(!J||J.currentMatch||/^[ \\t]+$/.test(J.searchText)||J.searchText.length>200)return null;const Q=$.getState(),re=Q.matchCase;if(Q.isRevealed){let de=Q.searchString;re||(de=de.toLowerCase());let he=J.searchText;if(re||(he=he.toLowerCase()),de===he&&J.matchCase===Q.matchCase&&J.wholeWord===Q.wholeWord&&!Q.isRegex)return null}return new R(ie.getModel(),J.searchText,J.matchCase,J.wholeWord?ie.getOption(129):null,F)}_setState(F){if(this.state=F,!this.state){this._decorations.clear();return}if(!this.editor.hasModel())return;const q=this.editor.getModel();if(q.isTooLargeForTokenization())return;const ie=this.state.findMatches(),ae=this.editor.getSelections();ae.sort(_.Range.compareRangesUsingStarts);const ne=[];for(let re=0,de=0,he=ie.length,me=ae.length;re<he;){const X=ie[re];if(de>=me)ne.push(X),re++;else{const U=_.Range.compareRangesUsingStarts(X,ae[de]);U<0?((ae[de].isEmpty()||!_.Range.areIntersecting(X,ae[de]))&&ne.push(X),re++):(U>0||re++,de++)}}const $=this.editor.getOption(80)!==\"off\",J=this._languageFeaturesService.documentHighlightProvider.has(q)&&$,Q=ne.map(re=>({range:re,options:(0,u.getSelectionHighlightDecorationOptions)(J)}));this._decorations.set(Q)}dispose(){this._setState(null),super.dispose()}};e.SelectionHighlighter=x,x.ID=\"editor.contrib.selectionHighlighter\",e.SelectionHighlighter=x=c=ke([ge(1,r.ILanguageFeaturesService)],x);function O(K,F,q){const ie=B(K,F[0],!q);for(let ae=1,ne=F.length;ae<ne;ae++){const $=F[ae];if($.isEmpty())return!1;const J=B(K,$,!q);if(ie!==J)return!1}return!0}function B(K,F,q){const ie=K.getValueInRange(F);return q?ie.toLowerCase():ie}class W extends S.EditorAction{constructor(){super({id:\"editor.action.focusNextCursor\",label:i.localize(19,null),metadata:{description:i.localize(20,null),args:[]},alias:\"Focus Next Cursor\",precondition:void 0})}run(F,q,ie){if(!q.hasModel())return;const ae=q._getViewModel();if(ae.cursorConfig.readOnly)return;ae.model.pushStackElement();const ne=Array.from(ae.getCursorStates()),$=ne.shift();$&&(ne.push($),ae.setCursorStates(ie.source,3,ne),ae.revealPrimaryCursor(ie.source,!0),d(ne,ae.getCursorStates()))}}e.FocusNextCursor=W;class V extends S.EditorAction{constructor(){super({id:\"editor.action.focusPreviousCursor\",label:i.localize(21,null),metadata:{description:i.localize(22,null),args:[]},alias:\"Focus Previous Cursor\",precondition:void 0})}run(F,q,ie){if(!q.hasModel())return;const ae=q._getViewModel();if(ae.cursorConfig.readOnly)return;ae.model.pushStackElement();const ne=Array.from(ae.getCursorStates()),$=ne.pop();$&&(ne.unshift($),ae.setCursorStates(ie.source,3,ne),ae.revealPrimaryCursor(ie.source,!0),d(ne,ae.getCursorStates()))}}e.FocusPreviousCursor=V,(0,S.registerEditorContribution)(w.ID,w,4),(0,S.registerEditorContribution)(x.ID,x,1),(0,S.registerEditorAction)(s),(0,S.registerEditorAction)(l),(0,S.registerEditorAction)(o),(0,S.registerEditorAction)(I),(0,S.registerEditorAction)(T),(0,S.registerEditorAction)(A),(0,S.registerEditorAction)(P),(0,S.registerEditorAction)(N),(0,S.registerEditorAction)(M),(0,S.registerEditorAction)(g),(0,S.registerEditorAction)(h),(0,S.registerEditorAction)(W),(0,S.registerEditorAction)(V)}),define(se[911],oe([1,0,728,13,48,14,19,12,2,153,16,33,5,21,31,41,18,381,15,47,53,330]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l){\"use strict\";var o,g;Object.defineProperty(e,\"__esModule\",{value:!0}),e.WordHighlighterContribution=e.getOccurrencesAcrossMultipleModels=e.getOccurrencesAtPosition=void 0;const h=new c.RawContextKey(\"hasWordHighlights\",!1);function m(W,V,K,F){const q=W.ordered(V);return(0,E.first)(q.map(ie=>()=>Promise.resolve(ie.provideDocumentHighlights(V,K,F)).then(void 0,p.onUnexpectedExternalError)),k.isNonEmptyArray).then(ie=>{if(ie){const ae=new s.ResourceMap;return ae.set(V.uri,ie),ae}return new s.ResourceMap})}e.getOccurrencesAtPosition=m;function C(W,V,K,F,q,ie){const ae=W.ordered(V);return(0,E.first)(ae.map(ne=>()=>{const $=ie.filter(J=>(0,r.shouldSynchronizeModel)(J)).filter(J=>(0,l.score)(ne.selector,J.uri,J.getLanguageId(),!0,void 0,void 0)>0);return Promise.resolve(ne.provideMultiDocumentHighlights(V,K,$,q)).then(void 0,p.onUnexpectedExternalError)}),ne=>ne instanceof s.ResourceMap&&ne.size>0)}e.getOccurrencesAcrossMultipleModels=C;class w{constructor(V,K,F){this._model=V,this._selection=K,this._wordSeparators=F,this._wordRange=this._getCurrentWordRange(V,K),this._result=null}get result(){return this._result||(this._result=(0,E.createCancelablePromise)(V=>this._compute(this._model,this._selection,this._wordSeparators,V))),this._result}_getCurrentWordRange(V,K){const F=V.getWordAtPosition(K.getPosition());return F?new i.Range(K.startLineNumber,F.startColumn,K.startLineNumber,F.endColumn):null}isValid(V,K,F){const q=K.startLineNumber,ie=K.startColumn,ae=K.endColumn,ne=this._getCurrentWordRange(V,K);let $=!!(this._wordRange&&this._wordRange.equalsRange(ne));for(let J=0,Q=F.length;!$&&J<Q;J++){const re=F.getRange(J);re&&re.startLineNumber===q&&re.startColumn<=ie&&re.endColumn>=ae&&($=!0)}return $}cancel(){this.result.cancel()}}class D extends w{constructor(V,K,F,q){super(V,K,F),this._providers=q}_compute(V,K,F,q){return m(this._providers,V,K.getPosition(),q).then(ie=>ie||new s.ResourceMap)}}class I extends w{constructor(V,K,F,q,ie){super(V,K,F),this._providers=q,this._otherModels=ie}_compute(V,K,F,q){return C(this._providers,V,K.getPosition(),F,q,this._otherModels).then(ie=>ie||new s.ResourceMap)}}class T extends w{constructor(V,K,F,q,ie){super(V,K,q),this._otherModels=ie,this._selectionIsEmpty=K.isEmpty(),this._word=F}_compute(V,K,F,q){return(0,E.timeout)(250,q).then(()=>{const ie=new s.ResourceMap;let ae;if(this._word?ae=this._word:ae=V.getWordAtPosition(K.getPosition()),!ae)return new s.ResourceMap;const ne=[V,...this._otherModels];for(const $ of ne){if($.isDisposed())continue;const Q=$.findMatches(ae.word,!0,!1,!0,F,!1).map(re=>({range:re.range,kind:t.DocumentHighlightKind.Text}));Q&&ie.set($.uri,Q)}return ie})}isValid(V,K,F){const q=K.isEmpty();return this._selectionIsEmpty!==q?!1:super.isValid(V,K,F)}}function A(W,V,K,F,q){return W.has(V)?new D(V,K,q,W):new T(V,K,F,q,[])}function P(W,V,K,F,q,ie){return W.has(V)?new I(V,K,q,W,ie):new T(V,K,F,q,ie)}(0,b.registerModelAndPositionCommand)(\"_executeDocumentHighlights\",async(W,V,K)=>{const F=W.get(u.ILanguageFeaturesService),q=await m(F.documentHighlightProvider,V,K,S.CancellationToken.None);return q?.get(V.uri)});let N=o=class{constructor(V,K,F,q,ie){this.toUnhook=new _.DisposableStore,this.workerRequestTokenId=0,this.workerRequestCompleted=!1,this.workerRequestValue=new s.ResourceMap,this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1,this.editor=V,this.providers=K,this.multiDocumentProviders=F,this.codeEditorService=ie,this._hasWordHighlights=h.bindTo(q),this._ignorePositionChangeEvent=!1,this.occurrencesHighlight=this.editor.getOption(80),this.model=this.editor.getModel(),this.toUnhook.add(V.onDidChangeCursorPosition(ae=>{this._ignorePositionChangeEvent||this.occurrencesHighlight!==\"off\"&&this._onPositionChanged(ae)})),this.toUnhook.add(V.onDidChangeModelContent(ae=>{this._stopAll()})),this.toUnhook.add(V.onDidChangeModel(ae=>{!ae.newModelUrl&&ae.oldModelUrl?this._stopSingular():o.query&&this._run()})),this.toUnhook.add(V.onDidChangeConfiguration(ae=>{const ne=this.editor.getOption(80);this.occurrencesHighlight!==ne&&(this.occurrencesHighlight=ne,this._stopAll())})),this.decorations=this.editor.createDecorationsCollection(),this.workerRequestTokenId=0,this.workerRequest=null,this.workerRequestCompleted=!1,this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1,o.query&&this._run()}hasDecorations(){return this.decorations.length>0}restore(){this.occurrencesHighlight!==\"off\"&&this._run()}_getSortedHighlights(){return this.decorations.getRanges().sort(i.Range.compareRangesUsingStarts)}moveNext(){const V=this._getSortedHighlights(),F=(V.findIndex(ie=>ie.containsPosition(this.editor.getPosition()))+1)%V.length,q=V[F];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(q.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(q);const ie=this._getWord();if(ie){const ae=this.editor.getModel().getLineContent(q.startLineNumber);(0,y.alert)(`${ae}, ${F+1} of ${V.length} for '${ie.word}'`)}}finally{this._ignorePositionChangeEvent=!1}}moveBack(){const V=this._getSortedHighlights(),F=(V.findIndex(ie=>ie.containsPosition(this.editor.getPosition()))-1+V.length)%V.length,q=V[F];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(q.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(q);const ie=this._getWord();if(ie){const ae=this.editor.getModel().getLineContent(q.startLineNumber);(0,y.alert)(`${ae}, ${F+1} of ${V.length} for '${ie.word}'`)}}finally{this._ignorePositionChangeEvent=!1}}_removeSingleDecorations(){if(!this.editor.hasModel())return;const V=o.storedDecorations.get(this.editor.getModel().uri);V&&(this.editor.removeDecorations(V),o.storedDecorations.delete(this.editor.getModel().uri),this.decorations.length>0&&(this.decorations.clear(),this._hasWordHighlights.set(!1)))}_removeAllDecorations(){const V=this.codeEditorService.listCodeEditors();for(const K of V){if(!K.hasModel())continue;const F=o.storedDecorations.get(K.getModel().uri);if(!F)continue;K.removeDecorations(F),o.storedDecorations.delete(K.getModel().uri);const q=M.get(K);q?.wordHighlighter&&q.wordHighlighter.decorations.length>0&&(q.wordHighlighter.decorations.clear(),q.wordHighlighter._hasWordHighlights.set(!1))}}_stopSingular(){var V,K,F,q;this._removeSingleDecorations(),this.editor.hasWidgetFocus()&&(((V=this.editor.getModel())===null||V===void 0?void 0:V.uri.scheme)!==d.Schemas.vscodeNotebookCell&&((F=(K=o.query)===null||K===void 0?void 0:K.modelInfo)===null||F===void 0?void 0:F.model.uri.scheme)!==d.Schemas.vscodeNotebookCell?(o.query=null,this._run()):!((q=o.query)===null||q===void 0)&&q.modelInfo&&(o.query.modelInfo=null)),this.renderDecorationsTimer!==-1&&(clearTimeout(this.renderDecorationsTimer),this.renderDecorationsTimer=-1),this.workerRequest!==null&&(this.workerRequest.cancel(),this.workerRequest=null),this.workerRequestCompleted||(this.workerRequestTokenId++,this.workerRequestCompleted=!0)}_stopAll(){this._removeAllDecorations(),this.renderDecorationsTimer!==-1&&(clearTimeout(this.renderDecorationsTimer),this.renderDecorationsTimer=-1),this.workerRequest!==null&&(this.workerRequest.cancel(),this.workerRequest=null),this.workerRequestCompleted||(this.workerRequestTokenId++,this.workerRequestCompleted=!0)}_onPositionChanged(V){var K;if(this.occurrencesHighlight===\"off\"){this._stopAll();return}if(V.reason!==3&&((K=this.editor.getModel())===null||K===void 0?void 0:K.uri.scheme)!==d.Schemas.vscodeNotebookCell){this._stopAll();return}this._run()}_getWord(){const V=this.editor.getSelection(),K=V.startLineNumber,F=V.startColumn;return this.model.isDisposed()?null:this.model.getWordAtPosition({lineNumber:K,column:F})}getOtherModelsToHighlight(V){if(!V)return[];if(V.uri.scheme===d.Schemas.vscodeNotebookCell){const ie=[],ae=this.codeEditorService.listCodeEditors();for(const ne of ae){const $=ne.getModel();$&&$!==V&&$.uri.scheme===d.Schemas.vscodeNotebookCell&&ie.push($)}return ie}const F=[],q=this.codeEditorService.listCodeEditors();for(const ie of q){if(!(0,v.isDiffEditor)(ie))continue;const ae=ie.getModel();ae&&V===ae.modified&&F.push(ae.modified)}if(F.length)return F;if(this.occurrencesHighlight===\"singleFile\")return[];for(const ie of q){const ae=ie.getModel();ae&&ae!==V&&F.push(ae)}return F}_run(){var V,K;let F;if(this.editor.hasWidgetFocus()){const q=this.editor.getSelection();if(!q||q.startLineNumber!==q.endLineNumber){this._stopAll();return}const ie=q.startColumn,ae=q.endColumn,ne=this._getWord();if(!ne||ne.startColumn>ie||ne.endColumn<ae){o.query=null,this._stopAll();return}F=this.workerRequest&&this.workerRequest.isValid(this.model,q,this.decorations),o.query={modelInfo:{model:this.model,selection:q},word:ne}}else if(o.query===null)return;if(this.lastCursorPositionChangeTime=new Date().getTime(),F)this.workerRequestCompleted&&this.renderDecorationsTimer!==-1&&(clearTimeout(this.renderDecorationsTimer),this.renderDecorationsTimer=-1,this._beginRenderDecorations());else{this._stopAll();const q=++this.workerRequestTokenId;this.workerRequestCompleted=!1;const ie=this.getOtherModelsToHighlight(this.editor.getModel()),ae=!!(!o.query.modelInfo&&o.query.word||((V=o.query.modelInfo)===null||V===void 0?void 0:V.model.uri)!==this.model.uri);!o.query.modelInfo||o.query.modelInfo.model.uri!==this.model.uri?this.workerRequest=this.computeWithModel(this.model,this.editor.getSelection(),ae?o.query.word:null,ie):this.workerRequest=this.computeWithModel(o.query.modelInfo.model,o.query.modelInfo.selection,o.query.word,ie),(K=this.workerRequest)===null||K===void 0||K.result.then(ne=>{q===this.workerRequestTokenId&&(this.workerRequestCompleted=!0,this.workerRequestValue=ne||[],this._beginRenderDecorations())},p.onUnexpectedError)}}computeWithModel(V,K,F,q){return q.length?P(this.multiDocumentProviders,V,K,F,this.editor.getOption(129),q):A(this.providers,V,K,F,this.editor.getOption(129))}_beginRenderDecorations(){const V=new Date().getTime(),K=this.lastCursorPositionChangeTime+250;V>=K?(this.renderDecorationsTimer=-1,this.renderDecorations()):this.renderDecorationsTimer=setTimeout(()=>{this.renderDecorations()},K-V)}renderDecorations(){var V,K,F;this.renderDecorationsTimer=-1;const q=this.codeEditorService.listCodeEditors();for(const ie of q){const ae=M.get(ie);if(!ae)continue;const ne=[],$=(V=ie.getModel())===null||V===void 0?void 0:V.uri;if($&&this.workerRequestValue.has($)){const J=o.storedDecorations.get($),Q=this.workerRequestValue.get($);if(Q)for(const de of Q)ne.push({range:de.range,options:(0,f.getHighlightDecorationOptions)(de.kind)});let re=[];ie.changeDecorations(de=>{re=de.deltaDecorations(J??[],ne)}),o.storedDecorations=o.storedDecorations.set($,re),ne.length>0&&((K=ae.wordHighlighter)===null||K===void 0||K.decorations.set(ne),(F=ae.wordHighlighter)===null||F===void 0||F._hasWordHighlights.set(!0))}}}dispose(){this._stopSingular(),this.toUnhook.dispose()}};N.storedDecorations=new s.ResourceMap,N.query=null,N=o=ke([ge(4,a.ICodeEditorService)],N);let M=g=class extends _.Disposable{static get(V){return V.getContribution(g.ID)}constructor(V,K,F,q){super(),this._wordHighlighter=null;const ie=()=>{V.hasModel()&&!V.getModel().isTooLargeForTokenization()&&(this._wordHighlighter=new N(V,F.documentHighlightProvider,F.multiDocumentHighlightProvider,K,q))};this._register(V.onDidChangeModel(ae=>{this._wordHighlighter&&(this._wordHighlighter.dispose(),this._wordHighlighter=null),ie()})),ie()}get wordHighlighter(){return this._wordHighlighter}saveViewState(){return!!(this._wordHighlighter&&this._wordHighlighter.hasDecorations())}moveNext(){var V;(V=this._wordHighlighter)===null||V===void 0||V.moveNext()}moveBack(){var V;(V=this._wordHighlighter)===null||V===void 0||V.moveBack()}restoreViewState(V){this._wordHighlighter&&V&&this._wordHighlighter.restore()}dispose(){this._wordHighlighter&&(this._wordHighlighter.dispose(),this._wordHighlighter=null),super.dispose()}};e.WordHighlighterContribution=M,M.ID=\"editor.contrib.wordHighlighter\",e.WordHighlighterContribution=M=g=ke([ge(1,c.IContextKeyService),ge(2,u.ILanguageFeaturesService),ge(3,a.ICodeEditorService)],M);class R extends b.EditorAction{constructor(V,K){super(K),this._isNext=V}run(V,K){const F=M.get(K);F&&(this._isNext?F.moveNext():F.moveBack())}}class x extends R{constructor(){super(!0,{id:\"editor.action.wordHighlight.next\",label:L.localize(0,null),alias:\"Go to Next Symbol Highlight\",precondition:h,kbOpts:{kbExpr:n.EditorContextKeys.editorTextFocus,primary:65,weight:100}})}}class O extends R{constructor(){super(!1,{id:\"editor.action.wordHighlight.prev\",label:L.localize(1,null),alias:\"Go to Previous Symbol Highlight\",precondition:h,kbOpts:{kbExpr:n.EditorContextKeys.editorTextFocus,primary:1089,weight:100}})}}class B extends b.EditorAction{constructor(){super({id:\"editor.action.wordHighlight.trigger\",label:L.localize(2,null),alias:\"Trigger Symbol Highlight\",precondition:h.toNegated(),kbOpts:{kbExpr:n.EditorContextKeys.editorTextFocus,primary:0,weight:100}})}run(V,K,F){const q=M.get(K);q&&q.restoreViewState(!0)}}(0,b.registerEditorContribution)(M.ID,M,0),(0,b.registerEditorAction)(x),(0,b.registerEditorAction)(O),(0,b.registerEditorAction)(B)}),define(se[912],oe([1,0,7,158,39,170,2,55,5,38,483]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ZoneWidget=e.OverlayWidgetDelegate=void 0;const b=new y.Color(new y.RGBA(0,122,204)),a={showArrow:!0,showFrame:!0,className:\"\",frameColor:b,arrowColor:b,keepEditorSelection:!1},i=\"vs.editor.contrib.zoneWidget\";class n{constructor(c,d,s,l,o,g,h,m){this.id=\"\",this.domNode=c,this.afterLineNumber=d,this.afterColumn=s,this.heightInLines=l,this.showInHiddenAreas=h,this.ordinal=m,this._onDomNodeTop=o,this._onComputedHeight=g}onDomNodeTop(c){this._onDomNodeTop(c)}onComputedHeight(c){this._onComputedHeight(c)}}class t{constructor(c,d){this._id=c,this._domNode=d}getId(){return this._id}getDomNode(){return this._domNode}getPosition(){return null}}e.OverlayWidgetDelegate=t;class r{constructor(c){this._editor=c,this._ruleName=r._IdGenerator.nextId(),this._decorations=this._editor.createDecorationsCollection(),this._color=null,this._height=-1}dispose(){this.hide(),L.removeCSSRulesContainingSelector(this._ruleName)}set color(c){this._color!==c&&(this._color=c,this._updateStyle())}set height(c){this._height!==c&&(this._height=c,this._updateStyle())}_updateStyle(){L.removeCSSRulesContainingSelector(this._ruleName),L.createCSSRule(`.monaco-editor ${this._ruleName}`,`border-style: solid; border-color: transparent; border-bottom-color: ${this._color}; border-width: ${this._height}px; bottom: -${this._height}px; margin-left: -${this._height}px; `)}show(c){c.column===1&&(c={lineNumber:c.lineNumber,column:2}),this._decorations.set([{range:_.Range.fromPositions(c),options:{description:\"zone-widget-arrow\",className:this._ruleName,stickiness:1}}])}hide(){this._decorations.clear()}}r._IdGenerator=new E.IdGenerator(\".arrow-decoration-\");class u{constructor(c,d={}){this._arrow=null,this._overlayWidget=null,this._resizeSash=null,this._viewZone=null,this._disposables=new S.DisposableStore,this.container=null,this._isShowing=!1,this.editor=c,this._positionMarkerId=this.editor.createDecorationsCollection(),this.options=p.deepClone(d),p.mixin(this.options,a,!1),this.domNode=document.createElement(\"div\"),this.options.isAccessible||(this.domNode.setAttribute(\"aria-hidden\",\"true\"),this.domNode.setAttribute(\"role\",\"presentation\")),this._disposables.add(this.editor.onDidLayoutChange(s=>{const l=this._getWidth(s);this.domNode.style.width=l+\"px\",this.domNode.style.left=this._getLeft(s)+\"px\",this._onWidth(l)}))}dispose(){this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this._viewZone&&this.editor.changeViewZones(c=>{this._viewZone&&c.removeZone(this._viewZone.id),this._viewZone=null}),this._positionMarkerId.clear(),this._disposables.dispose()}create(){this.domNode.classList.add(\"zone-widget\"),this.options.className&&this.domNode.classList.add(this.options.className),this.container=document.createElement(\"div\"),this.container.classList.add(\"zone-widget-container\"),this.domNode.appendChild(this.container),this.options.showArrow&&(this._arrow=new r(this.editor),this._disposables.add(this._arrow)),this._fillContainer(this.container),this._initSash(),this._applyStyles()}style(c){c.frameColor&&(this.options.frameColor=c.frameColor),c.arrowColor&&(this.options.arrowColor=c.arrowColor),this._applyStyles()}_applyStyles(){if(this.container&&this.options.frameColor){const c=this.options.frameColor.toString();this.container.style.borderTopColor=c,this.container.style.borderBottomColor=c}if(this._arrow&&this.options.arrowColor){const c=this.options.arrowColor.toString();this._arrow.color=c}}_getWidth(c){return c.width-c.minimap.minimapWidth-c.verticalScrollbarWidth}_getLeft(c){return c.minimap.minimapWidth>0&&c.minimap.minimapLeft===0?c.minimap.minimapWidth:0}_onViewZoneTop(c){this.domNode.style.top=c+\"px\"}_onViewZoneHeight(c){var d;if(this.domNode.style.height=`${c}px`,this.container){const s=c-this._decoratingElementsHeight();this.container.style.height=`${s}px`;const l=this.editor.getLayoutInfo();this._doLayout(s,this._getWidth(l))}(d=this._resizeSash)===null||d===void 0||d.layout()}get position(){const c=this._positionMarkerId.getRange(0);if(c)return c.getStartPosition()}show(c,d){const s=_.Range.isIRange(c)?_.Range.lift(c):_.Range.fromPositions(c);this._isShowing=!0,this._showImpl(s,d),this._isShowing=!1,this._positionMarkerId.set([{range:s,options:v.ModelDecorationOptions.EMPTY}])}hide(){var c;this._viewZone&&(this.editor.changeViewZones(d=>{this._viewZone&&d.removeZone(this._viewZone.id)}),this._viewZone=null),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),(c=this._arrow)===null||c===void 0||c.hide(),this._positionMarkerId.clear()}_decoratingElementsHeight(){const c=this.editor.getOption(66);let d=0;if(this.options.showArrow){const s=Math.round(c/3);d+=2*s}if(this.options.showFrame){const s=Math.round(c/9);d+=2*s}return d}_showImpl(c,d){const s=c.getStartPosition(),l=this.editor.getLayoutInfo(),o=this._getWidth(l);this.domNode.style.width=`${o}px`,this.domNode.style.left=this._getLeft(l)+\"px\";const g=document.createElement(\"div\");g.style.overflow=\"hidden\";const h=this.editor.getOption(66);if(!this.options.allowUnlimitedHeight){const I=Math.max(12,this.editor.getLayoutInfo().height/h*.8);d=Math.min(d,I)}let m=0,C=0;if(this._arrow&&this.options.showArrow&&(m=Math.round(h/3),this._arrow.height=m,this._arrow.show(s)),this.options.showFrame&&(C=Math.round(h/9)),this.editor.changeViewZones(I=>{this._viewZone&&I.removeZone(this._viewZone.id),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this.domNode.style.top=\"-1000px\",this._viewZone=new n(g,s.lineNumber,s.column,d,T=>this._onViewZoneTop(T),T=>this._onViewZoneHeight(T),this.options.showInHiddenAreas,this.options.ordinal),this._viewZone.id=I.addZone(this._viewZone),this._overlayWidget=new t(i+this._viewZone.id,this.domNode),this.editor.addOverlayWidget(this._overlayWidget)}),this.container&&this.options.showFrame){const I=this.options.frameWidth?this.options.frameWidth:C;this.container.style.borderTopWidth=I+\"px\",this.container.style.borderBottomWidth=I+\"px\"}const w=d*h-this._decoratingElementsHeight();this.container&&(this.container.style.top=m+\"px\",this.container.style.height=w+\"px\",this.container.style.overflow=\"hidden\"),this._doLayout(w,o),this.options.keepEditorSelection||this.editor.setSelection(c);const D=this.editor.getModel();if(D){const I=D.validateRange(new _.Range(c.startLineNumber,1,c.endLineNumber+1,1));this.revealRange(I,I.startLineNumber===D.getLineCount())}}revealRange(c,d){d?this.editor.revealLineNearTop(c.endLineNumber,0):this.editor.revealRange(c,0)}setCssClass(c,d){this.container&&(d&&this.container.classList.remove(d),this.container.classList.add(c))}_onWidth(c){}_doLayout(c,d){}_relayout(c){this._viewZone&&this._viewZone.heightInLines!==c&&this.editor.changeViewZones(d=>{this._viewZone&&(this._viewZone.heightInLines=c,d.layoutZone(this._viewZone.id))})}_initSash(){if(this._resizeSash)return;this._resizeSash=this._disposables.add(new k.Sash(this.domNode,this,{orientation:1})),this.options.isResizeable||(this._resizeSash.state=0);let c;this._disposables.add(this._resizeSash.onDidStart(d=>{this._viewZone&&(c={startY:d.startY,heightInLines:this._viewZone.heightInLines})})),this._disposables.add(this._resizeSash.onDidEnd(()=>{c=void 0})),this._disposables.add(this._resizeSash.onDidChange(d=>{if(c){const s=(d.currentY-c.startY)/this.editor.getOption(66),l=s<0?Math.ceil(s):Math.floor(s),o=c.heightInLines+l;o>5&&o<35&&this._relayout(o)}}))}getHorizontalSashLeft(){return 0}getHorizontalSashTop(){return(this.domNode.style.height===null?0:parseInt(this.domNode.style.height))-this._decoratingElementsHeight()/2}getHorizontalSashWidth(){const c=this.editor.getLayoutInfo();return c.width-c.minimap.minimapWidth}}e.ZoneWidget=u}),define(se[142],oe([1,0,7,78,42,26,28,39,6,55,16,33,168,912,706,141,15,45,8,29,474]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.peekViewEditorMatchHighlightBorder=e.peekViewEditorMatchHighlight=e.peekViewResultsMatchHighlight=e.peekViewEditorStickyScrollBackground=e.peekViewEditorGutterBackground=e.peekViewEditorBackground=e.peekViewResultsSelectionForeground=e.peekViewResultsSelectionBackground=e.peekViewResultsFileForeground=e.peekViewResultsMatchForeground=e.peekViewResultsBackground=e.peekViewBorder=e.peekViewTitleInfoForeground=e.peekViewTitleForeground=e.peekViewTitleBackground=e.PeekViewWidget=e.getOuterEditor=e.PeekContext=e.IPeekViewService=void 0,e.IPeekViewService=(0,c.createDecorator)(\"IPeekViewService\"),(0,f.registerSingleton)(e.IPeekViewService,class{constructor(){this._widgets=new Map}addExclusiveWidget(m,C){const w=this._widgets.get(m);w&&(w.listener.dispose(),w.widget.dispose());const D=()=>{const I=this._widgets.get(m);I&&I.widget===C&&(I.listener.dispose(),this._widgets.delete(m))};this._widgets.set(m,{widget:C,listener:C.onDidClose(D)})}},1);var s;(function(m){m.inPeekEditor=new u.RawContextKey(\"inReferenceSearchEditor\",!0,t.localize(0,null)),m.notInPeekEditor=m.inPeekEditor.toNegated()})(s||(e.PeekContext=s={}));let l=class{constructor(C,w){C instanceof i.EmbeddedCodeEditorWidget&&s.inPeekEditor.bindTo(w)}dispose(){}};l.ID=\"editor.contrib.referenceController\",l=ke([ge(1,u.IContextKeyService)],l),(0,b.registerEditorContribution)(l.ID,l,0);function o(m){const C=m.get(a.ICodeEditorService).getFocusedCodeEditor();return C instanceof i.EmbeddedCodeEditorWidget?C.getParentEditor():C}e.getOuterEditor=o;const g={headerBackgroundColor:p.Color.white,primaryHeadingColor:p.Color.fromHex(\"#333333\"),secondaryHeadingColor:p.Color.fromHex(\"#6c6c6cb3\")};let h=class extends n.ZoneWidget{constructor(C,w,D){super(C,w),this.instantiationService=D,this._onDidClose=new _.Emitter,this.onDidClose=this._onDidClose.event,v.mixin(this.options,g,!1)}dispose(){this.disposed||(this.disposed=!0,super.dispose(),this._onDidClose.fire(this))}style(C){const w=this.options;C.headerBackgroundColor&&(w.headerBackgroundColor=C.headerBackgroundColor),C.primaryHeadingColor&&(w.primaryHeadingColor=C.primaryHeadingColor),C.secondaryHeadingColor&&(w.secondaryHeadingColor=C.secondaryHeadingColor),super.style(C)}_applyStyles(){super._applyStyles();const C=this.options;this._headElement&&C.headerBackgroundColor&&(this._headElement.style.backgroundColor=C.headerBackgroundColor.toString()),this._primaryHeading&&C.primaryHeadingColor&&(this._primaryHeading.style.color=C.primaryHeadingColor.toString()),this._secondaryHeading&&C.secondaryHeadingColor&&(this._secondaryHeading.style.color=C.secondaryHeadingColor.toString()),this._bodyElement&&C.frameColor&&(this._bodyElement.style.borderColor=C.frameColor.toString())}_fillContainer(C){this.setCssClass(\"peekview-widget\"),this._headElement=L.$(\".head\"),this._bodyElement=L.$(\".body\"),this._fillHead(this._headElement),this._fillBody(this._bodyElement),C.appendChild(this._headElement),C.appendChild(this._bodyElement)}_fillHead(C,w){this._titleElement=L.$(\".peekview-title\"),this.options.supportOnTitleClick&&(this._titleElement.classList.add(\"clickable\"),L.addStandardDisposableListener(this._titleElement,\"click\",T=>this._onTitleClick(T))),L.append(this._headElement,this._titleElement),this._fillTitleIcon(this._titleElement),this._primaryHeading=L.$(\"span.filename\"),this._secondaryHeading=L.$(\"span.dirname\"),this._metaHeading=L.$(\"span.meta\"),L.append(this._titleElement,this._primaryHeading,this._secondaryHeading,this._metaHeading);const D=L.$(\".peekview-actions\");L.append(this._headElement,D);const I=this._getActionBarOptions();this._actionbarWidget=new k.ActionBar(D,I),this._disposables.add(this._actionbarWidget),w||this._actionbarWidget.push(new y.Action(\"peekview.close\",t.localize(1,null),S.ThemeIcon.asClassName(E.Codicon.close),!0,()=>(this.dispose(),Promise.resolve())),{label:!1,icon:!0})}_fillTitleIcon(C){}_getActionBarOptions(){return{actionViewItemProvider:r.createActionViewItem.bind(void 0,this.instantiationService),orientation:0}}_onTitleClick(C){}setTitle(C,w){this._primaryHeading&&this._secondaryHeading&&(this._primaryHeading.innerText=C,this._primaryHeading.setAttribute(\"title\",C),w?this._secondaryHeading.innerText=w:L.clearNode(this._secondaryHeading))}setMetaTitle(C){this._metaHeading&&(C?(this._metaHeading.innerText=C,L.show(this._metaHeading)):L.hide(this._metaHeading))}_doLayout(C,w){if(!this._isShowing&&C<0){this.dispose();return}const D=Math.ceil(this.editor.getOption(66)*1.2),I=Math.round(C-(D+2));this._doLayoutHead(D,w),this._doLayoutBody(I,w)}_doLayoutHead(C,w){this._headElement&&(this._headElement.style.height=`${C}px`,this._headElement.style.lineHeight=this._headElement.style.height)}_doLayoutBody(C,w){this._bodyElement&&(this._bodyElement.style.height=`${C}px`)}};e.PeekViewWidget=h,e.PeekViewWidget=h=ke([ge(2,c.IInstantiationService)],h),e.peekViewTitleBackground=(0,d.registerColor)(\"peekViewTitle.background\",{dark:\"#252526\",light:\"#F3F3F3\",hcDark:p.Color.black,hcLight:p.Color.white},t.localize(2,null)),e.peekViewTitleForeground=(0,d.registerColor)(\"peekViewTitleLabel.foreground\",{dark:p.Color.white,light:p.Color.black,hcDark:p.Color.white,hcLight:d.editorForeground},t.localize(3,null)),e.peekViewTitleInfoForeground=(0,d.registerColor)(\"peekViewTitleDescription.foreground\",{dark:\"#ccccccb3\",light:\"#616161\",hcDark:\"#FFFFFF99\",hcLight:\"#292929\"},t.localize(4,null)),e.peekViewBorder=(0,d.registerColor)(\"peekView.border\",{dark:d.editorInfoForeground,light:d.editorInfoForeground,hcDark:d.contrastBorder,hcLight:d.contrastBorder},t.localize(5,null)),e.peekViewResultsBackground=(0,d.registerColor)(\"peekViewResult.background\",{dark:\"#252526\",light:\"#F3F3F3\",hcDark:p.Color.black,hcLight:p.Color.white},t.localize(6,null)),e.peekViewResultsMatchForeground=(0,d.registerColor)(\"peekViewResult.lineForeground\",{dark:\"#bbbbbb\",light:\"#646465\",hcDark:p.Color.white,hcLight:d.editorForeground},t.localize(7,null)),e.peekViewResultsFileForeground=(0,d.registerColor)(\"peekViewResult.fileForeground\",{dark:p.Color.white,light:\"#1E1E1E\",hcDark:p.Color.white,hcLight:d.editorForeground},t.localize(8,null)),e.peekViewResultsSelectionBackground=(0,d.registerColor)(\"peekViewResult.selectionBackground\",{dark:\"#3399ff33\",light:\"#3399ff33\",hcDark:null,hcLight:null},t.localize(9,null)),e.peekViewResultsSelectionForeground=(0,d.registerColor)(\"peekViewResult.selectionForeground\",{dark:p.Color.white,light:\"#6C6C6C\",hcDark:p.Color.white,hcLight:d.editorForeground},t.localize(10,null)),e.peekViewEditorBackground=(0,d.registerColor)(\"peekViewEditor.background\",{dark:\"#001F33\",light:\"#F2F8FC\",hcDark:p.Color.black,hcLight:p.Color.white},t.localize(11,null)),e.peekViewEditorGutterBackground=(0,d.registerColor)(\"peekViewEditorGutter.background\",{dark:e.peekViewEditorBackground,light:e.peekViewEditorBackground,hcDark:e.peekViewEditorBackground,hcLight:e.peekViewEditorBackground},t.localize(12,null)),e.peekViewEditorStickyScrollBackground=(0,d.registerColor)(\"peekViewEditorStickyScroll.background\",{dark:e.peekViewEditorBackground,light:e.peekViewEditorBackground,hcDark:e.peekViewEditorBackground,hcLight:e.peekViewEditorBackground},t.localize(13,null)),e.peekViewResultsMatchHighlight=(0,d.registerColor)(\"peekViewResult.matchHighlightBackground\",{dark:\"#ea5c004d\",light:\"#ea5c004d\",hcDark:null,hcLight:null},t.localize(14,null)),e.peekViewEditorMatchHighlight=(0,d.registerColor)(\"peekViewEditor.matchHighlightBackground\",{dark:\"#ff8f0099\",light:\"#f5d802de\",hcDark:null,hcLight:null},t.localize(15,null)),e.peekViewEditorMatchHighlightBorder=(0,d.registerColor)(\"peekViewEditor.matchHighlightBorder\",{dark:null,light:null,hcDark:d.activeContrastBorder,hcLight:d.activeContrastBorder},t.localize(16,null))}),define(se[913],oe([1,0,7,77,13,39,6,2,49,11,5,142,679,141,30,15,8,164,97,57,804,29,23,462]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o){\"use strict\";var g;Object.defineProperty(e,\"__esModule\",{value:!0}),e.MarkerNavigationWidget=void 0;class h{constructor(O,B,W,V,K){this._openerService=V,this._labelService=K,this._lines=0,this._longestLineLength=0,this._relatedDiagnostics=new WeakMap,this._disposables=new p.DisposableStore,this._editor=B;const F=document.createElement(\"div\");F.className=\"descriptioncontainer\",this._messageBlock=document.createElement(\"div\"),this._messageBlock.classList.add(\"message\"),this._messageBlock.setAttribute(\"aria-live\",\"assertive\"),this._messageBlock.setAttribute(\"role\",\"alert\"),F.appendChild(this._messageBlock),this._relatedBlock=document.createElement(\"div\"),F.appendChild(this._relatedBlock),this._disposables.add(L.addStandardDisposableListener(this._relatedBlock,\"click\",q=>{q.preventDefault();const ie=this._relatedDiagnostics.get(q.target);ie&&W(ie)})),this._scrollable=new k.ScrollableElement(F,{horizontal:1,vertical:1,useShadows:!1,horizontalScrollbarSize:6,verticalScrollbarSize:6}),O.appendChild(this._scrollable.getDomNode()),this._disposables.add(this._scrollable.onScroll(q=>{F.style.left=`-${q.scrollLeft}px`,F.style.top=`-${q.scrollTop}px`})),this._disposables.add(this._scrollable)}dispose(){(0,p.dispose)(this._disposables)}update(O){const{source:B,message:W,relatedInformation:V,code:K}=O;let F=(B?.length||0)+2;K&&(typeof K==\"string\"?F+=K.length:F+=K.value.length);const q=(0,v.splitLines)(W);this._lines=q.length,this._longestLineLength=0;for(const J of q)this._longestLineLength=Math.max(J.length+F,this._longestLineLength);L.clearNode(this._messageBlock),this._messageBlock.setAttribute(\"aria-label\",this.getAriaLabel(O)),this._editor.applyFontInfo(this._messageBlock);let ie=this._messageBlock;for(const J of q)ie=document.createElement(\"div\"),ie.innerText=J,J===\"\"&&(ie.style.height=this._messageBlock.style.lineHeight),this._messageBlock.appendChild(ie);if(B||K){const J=document.createElement(\"span\");if(J.classList.add(\"details\"),ie.appendChild(J),B){const Q=document.createElement(\"span\");Q.innerText=B,Q.classList.add(\"source\"),J.appendChild(Q)}if(K)if(typeof K==\"string\"){const Q=document.createElement(\"span\");Q.innerText=`(${K})`,Q.classList.add(\"code\"),J.appendChild(Q)}else{this._codeLink=L.$(\"a.code-link\"),this._codeLink.setAttribute(\"href\",`${K.target.toString()}`),this._codeLink.onclick=re=>{this._openerService.open(K.target,{allowCommands:!0}),re.preventDefault(),re.stopPropagation()};const Q=L.append(this._codeLink,L.$(\"span\"));Q.innerText=K.value,J.appendChild(this._codeLink)}}if(L.clearNode(this._relatedBlock),this._editor.applyFontInfo(this._relatedBlock),(0,y.isNonEmptyArray)(V)){const J=this._relatedBlock.appendChild(document.createElement(\"div\"));J.style.paddingTop=`${Math.floor(this._editor.getOption(66)*.66)}px`,this._lines+=1;for(const Q of V){const re=document.createElement(\"div\"),de=document.createElement(\"a\");de.classList.add(\"filename\"),de.innerText=`${this._labelService.getUriBasenameLabel(Q.resource)}(${Q.startLineNumber}, ${Q.startColumn}): `,de.title=this._labelService.getUriLabel(Q.resource),this._relatedDiagnostics.set(de,Q);const he=document.createElement(\"span\");he.innerText=Q.message,re.appendChild(de),re.appendChild(he),this._lines+=1,J.appendChild(re)}}const ae=this._editor.getOption(50),ne=Math.ceil(ae.typicalFullwidthCharacterWidth*this._longestLineLength*.75),$=ae.lineHeight*this._lines;this._scrollable.setScrollDimensions({scrollWidth:ne,scrollHeight:$})}layout(O,B){this._scrollable.getDomNode().style.height=`${O}px`,this._scrollable.getDomNode().style.width=`${B}px`,this._scrollable.setScrollDimensions({width:B,height:O})}getHeightInLines(){return Math.min(17,this._lines)}getAriaLabel(O){let B=\"\";switch(O.severity){case c.MarkerSeverity.Error:B=i.localize(0,null);break;case c.MarkerSeverity.Warning:B=i.localize(1,null);break;case c.MarkerSeverity.Info:B=i.localize(2,null);break;case c.MarkerSeverity.Hint:B=i.localize(3,null);break}let W=i.localize(4,null,B,O.startLineNumber+\":\"+O.startColumn);const V=this._editor.getModel();return V&&O.startLineNumber<=V.getLineCount()&&O.startLineNumber>=1&&(W=`${V.getLineContent(O.startLineNumber)}, ${W}`),W}}let m=g=class extends a.PeekViewWidget{constructor(O,B,W,V,K,F,q){super(O,{showArrow:!0,showFrame:!0,isAccessible:!0,frameWidth:1},K),this._themeService=B,this._openerService=W,this._menuService=V,this._contextKeyService=F,this._labelService=q,this._callOnDispose=new p.DisposableStore,this._onDidSelectRelatedInformation=new S.Emitter,this.onDidSelectRelatedInformation=this._onDidSelectRelatedInformation.event,this._severity=c.MarkerSeverity.Warning,this._backgroundColor=E.Color.white,this._applyTheme(B.getColorTheme()),this._callOnDispose.add(B.onDidColorThemeChange(this._applyTheme.bind(this))),this.create()}_applyTheme(O){this._backgroundColor=O.getColor(R);let B=I,W=T;this._severity===c.MarkerSeverity.Warning?(B=A,W=P):this._severity===c.MarkerSeverity.Info&&(B=N,W=M);const V=O.getColor(B),K=O.getColor(W);this.style({arrowColor:V,frameColor:V,headerBackgroundColor:K,primaryHeadingColor:O.getColor(a.peekViewTitleForeground),secondaryHeadingColor:O.getColor(a.peekViewTitleInfoForeground)})}_applyStyles(){this._parentContainer&&(this._parentContainer.style.backgroundColor=this._backgroundColor?this._backgroundColor.toString():\"\"),super._applyStyles()}dispose(){this._callOnDispose.dispose(),super.dispose()}_fillHead(O){super._fillHead(O),this._disposables.add(this._actionbarWidget.actionRunner.onWillRun(V=>this.editor.focus()));const B=[],W=this._menuService.createMenu(g.TitleMenu,this._contextKeyService);(0,n.createAndFillInActionBarActions)(W,void 0,B),this._actionbarWidget.push(B,{label:!1,icon:!0,index:0}),W.dispose()}_fillTitleIcon(O){this._icon=L.append(O,L.$(\"\"))}_fillBody(O){this._parentContainer=O,O.classList.add(\"marker-widget\"),this._parentContainer.tabIndex=0,this._parentContainer.setAttribute(\"role\",\"tooltip\"),this._container=document.createElement(\"div\"),O.appendChild(this._container),this._message=new h(this._container,this.editor,B=>this._onDidSelectRelatedInformation.fire(B),this._openerService,this._labelService),this._disposables.add(this._message)}show(){throw new Error(\"call showAtMarker\")}showAtMarker(O,B,W){this._container.classList.remove(\"stale\"),this._message.update(O),this._severity=O.severity,this._applyTheme(this._themeService.getColorTheme());const V=b.Range.lift(O),K=this.editor.getPosition(),F=K&&V.containsPosition(K)?K:V.getStartPosition();super.show(F,this.computeRequiredHeight());const q=this.editor.getModel();if(q){const ie=W>1?i.localize(5,null,B,W):i.localize(6,null,B,W);this.setTitle((0,_.basename)(q.uri),ie)}this._icon.className=`codicon ${s.SeverityIcon.className(c.MarkerSeverity.toSeverity(this._severity))}`,this.editor.revealPositionNearTop(F,0),this.editor.focus()}updateMarker(O){this._container.classList.remove(\"stale\"),this._message.update(O)}showStale(){this._container.classList.add(\"stale\"),this._relayout()}_doLayoutBody(O,B){super._doLayoutBody(O,B),this._heightInPixel=O,this._message.layout(O,B),this._container.style.height=`${O}px`}_onWidth(O){this._message.layout(this._heightInPixel,O)}_relayout(){super._relayout(this.computeRequiredHeight())}computeRequiredHeight(){return 3+this._message.getHeightInLines()}};e.MarkerNavigationWidget=m,m.TitleMenu=new t.MenuId(\"gotoErrorTitleMenu\"),e.MarkerNavigationWidget=m=g=ke([ge(1,o.IThemeService),ge(2,d.IOpenerService),ge(3,t.IMenuService),ge(4,u.IInstantiationService),ge(5,r.IContextKeyService),ge(6,f.ILabelService)],m);const C=(0,l.oneOf)(l.editorErrorForeground,l.editorErrorBorder),w=(0,l.oneOf)(l.editorWarningForeground,l.editorWarningBorder),D=(0,l.oneOf)(l.editorInfoForeground,l.editorInfoBorder),I=(0,l.registerColor)(\"editorMarkerNavigationError.background\",{dark:C,light:C,hcDark:l.contrastBorder,hcLight:l.contrastBorder},i.localize(7,null)),T=(0,l.registerColor)(\"editorMarkerNavigationError.headerBackground\",{dark:(0,l.transparent)(I,.1),light:(0,l.transparent)(I,.1),hcDark:null,hcLight:null},i.localize(8,null)),A=(0,l.registerColor)(\"editorMarkerNavigationWarning.background\",{dark:w,light:w,hcDark:l.contrastBorder,hcLight:l.contrastBorder},i.localize(9,null)),P=(0,l.registerColor)(\"editorMarkerNavigationWarning.headerBackground\",{dark:(0,l.transparent)(A,.1),light:(0,l.transparent)(A,.1),hcDark:\"#0C141F\",hcLight:(0,l.transparent)(A,.2)},i.localize(10,null)),N=(0,l.registerColor)(\"editorMarkerNavigationInfo.background\",{dark:D,light:D,hcDark:l.contrastBorder,hcLight:l.contrastBorder},i.localize(11,null)),M=(0,l.registerColor)(\"editorMarkerNavigationInfo.headerBackground\",{dark:(0,l.transparent)(N,.1),light:(0,l.transparent)(N,.1),hcDark:null,hcLight:null},i.localize(12,null)),R=(0,l.registerColor)(\"editorMarkerNavigation.background\",{dark:l.editorBackground,light:l.editorBackground,hcDark:l.editorBackground,hcLight:l.editorBackground},i.localize(13,null))}),define(se[382],oe([1,0,26,2,16,33,10,5,21,783,678,30,15,8,82,913]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";var u;Object.defineProperty(e,\"__esModule\",{value:!0}),e.NextMarkerAction=e.MarkerController=void 0;let f=u=class{static get(C){return C.getContribution(u.ID)}constructor(C,w,D,I,T){this._markerNavigationService=w,this._contextKeyService=D,this._editorService=I,this._instantiationService=T,this._sessionDispoables=new k.DisposableStore,this._editor=C,this._widgetVisible=g.bindTo(this._contextKeyService)}dispose(){this._cleanUp(),this._sessionDispoables.dispose()}_cleanUp(){this._widgetVisible.reset(),this._sessionDispoables.clear(),this._widget=void 0,this._model=void 0}_getOrCreateModel(C){if(this._model&&this._model.matches(C))return this._model;let w=!1;return this._model&&(w=!0,this._cleanUp()),this._model=this._markerNavigationService.getMarkerList(C),w&&this._model.move(!0,this._editor.getModel(),this._editor.getPosition()),this._widget=this._instantiationService.createInstance(r.MarkerNavigationWidget,this._editor),this._widget.onDidClose(()=>this.close(),this,this._sessionDispoables),this._widgetVisible.set(!0),this._sessionDispoables.add(this._model),this._sessionDispoables.add(this._widget),this._sessionDispoables.add(this._editor.onDidChangeCursorPosition(D=>{var I,T,A;(!(!((I=this._model)===null||I===void 0)&&I.selected)||!p.Range.containsPosition((T=this._model)===null||T===void 0?void 0:T.selected.marker,D.position))&&((A=this._model)===null||A===void 0||A.resetIndex())})),this._sessionDispoables.add(this._model.onDidChange(()=>{if(!this._widget||!this._widget.position||!this._model)return;const D=this._model.find(this._editor.getModel().uri,this._widget.position);D?this._widget.updateMarker(D.marker):this._widget.showStale()})),this._sessionDispoables.add(this._widget.onDidSelectRelatedInformation(D=>{this._editorService.openCodeEditor({resource:D.resource,options:{pinned:!0,revealIfOpened:!0,selection:p.Range.lift(D).collapseToStart()}},this._editor),this.close(!1)})),this._sessionDispoables.add(this._editor.onDidChangeModel(()=>this._cleanUp())),this._model}close(C=!0){this._cleanUp(),C&&this._editor.focus()}showAtMarker(C){if(this._editor.hasModel()){const w=this._getOrCreateModel(this._editor.getModel().uri);w.resetIndex(),w.move(!0,this._editor.getModel(),new S.Position(C.startLineNumber,C.startColumn)),w.selected&&this._widget.showAtMarker(w.selected.marker,w.selected.index,w.selected.total)}}async nagivate(C,w){var D,I;if(this._editor.hasModel()){const T=this._getOrCreateModel(w?void 0:this._editor.getModel().uri);if(T.move(C,this._editor.getModel(),this._editor.getPosition()),!T.selected)return;if(T.selected.marker.resource.toString()!==this._editor.getModel().uri.toString()){this._cleanUp();const A=await this._editorService.openCodeEditor({resource:T.selected.marker.resource,options:{pinned:!1,revealIfOpened:!0,selectionRevealType:2,selection:T.selected.marker}},this._editor);A&&((D=u.get(A))===null||D===void 0||D.close(),(I=u.get(A))===null||I===void 0||I.nagivate(C,w))}else this._widget.showAtMarker(T.selected.marker,T.selected.index,T.selected.total)}}};e.MarkerController=f,f.ID=\"editor.contrib.markerController\",e.MarkerController=f=u=ke([ge(1,v.IMarkerNavigationService),ge(2,i.IContextKeyService),ge(3,E.ICodeEditorService),ge(4,n.IInstantiationService)],f);class c extends y.EditorAction{constructor(C,w,D){super(D),this._next=C,this._multiFile=w}async run(C,w){var D;w.hasModel()&&((D=f.get(w))===null||D===void 0||D.nagivate(this._next,this._multiFile))}}class d extends c{constructor(){super(!0,!1,{id:d.ID,label:d.LABEL,alias:\"Go to Next Problem (Error, Warning, Info)\",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.focus,primary:578,weight:100},menuOpts:{menuId:r.MarkerNavigationWidget.TitleMenu,title:d.LABEL,icon:(0,t.registerIcon)(\"marker-navigation-next\",L.Codicon.arrowDown,b.localize(1,null)),group:\"navigation\",order:1}})}}e.NextMarkerAction=d,d.ID=\"editor.action.marker.next\",d.LABEL=b.localize(0,null);class s extends c{constructor(){super(!1,!1,{id:s.ID,label:s.LABEL,alias:\"Go to Previous Problem (Error, Warning, Info)\",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.focus,primary:1602,weight:100},menuOpts:{menuId:r.MarkerNavigationWidget.TitleMenu,title:s.LABEL,icon:(0,t.registerIcon)(\"marker-navigation-previous\",L.Codicon.arrowUp,b.localize(3,null)),group:\"navigation\",order:2}})}}s.ID=\"editor.action.marker.prev\",s.LABEL=b.localize(2,null);class l extends c{constructor(){super(!0,!0,{id:\"editor.action.marker.nextInFiles\",label:b.localize(4,null),alias:\"Go to Next Problem in Files (Error, Warning, Info)\",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.focus,primary:66,weight:100},menuOpts:{menuId:a.MenuId.MenubarGoMenu,title:b.localize(5,null),group:\"6_problem_nav\",order:1}})}}class o extends c{constructor(){super(!1,!0,{id:\"editor.action.marker.prevInFiles\",label:b.localize(6,null),alias:\"Go to Previous Problem in Files (Error, Warning, Info)\",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.focus,primary:1090,weight:100},menuOpts:{menuId:a.MenuId.MenubarGoMenu,title:b.localize(7,null),group:\"6_problem_nav\",order:2}})}}(0,y.registerEditorContribution)(f.ID,f,4),(0,y.registerEditorAction)(d),(0,y.registerEditorAction)(s),(0,y.registerEditorAction)(l),(0,y.registerEditorAction)(o);const g=new i.RawContextKey(\"markersNavigationVisible\",!1),h=y.EditorCommand.bindToContribution(f.get);(0,y.registerEditorCommand)(new h({id:\"closeMarkersNavigation\",precondition:g,handler:m=>m.close(),kbOpts:{weight:100+50,kbExpr:_.EditorContextKeys.focus,primary:9,secondary:[1033]}}))}),define(se[914],oe([1,0,7,322,39,6,2,47,49,168,5,38,32,80,43,68,837,142,684,8,34,164,192,23,193,161,464]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ReferenceWidget=e.LayoutData=void 0;class C{constructor(A,P){this._editor=A,this._model=P,this._decorations=new Map,this._decorationIgnoreSet=new Set,this._callOnDispose=new S.DisposableStore,this._callOnModelChange=new S.DisposableStore,this._callOnDispose.add(this._editor.onDidChangeModel(()=>this._onModelChanged())),this._onModelChanged()}dispose(){this._callOnModelChange.dispose(),this._callOnDispose.dispose(),this.removeDecorations()}_onModelChanged(){this._callOnModelChange.clear();const A=this._editor.getModel();if(A){for(const P of this._model.references)if(P.uri.toString()===A.uri.toString()){this._addDecorations(P.parent);return}}}_addDecorations(A){if(!this._editor.hasModel())return;this._callOnModelChange.add(this._editor.getModel().onDidChangeDecorations(()=>this._onDecorationChanged()));const P=[],N=[];for(let M=0,R=A.children.length;M<R;M++){const x=A.children[M];this._decorationIgnoreSet.has(x.id)||x.uri.toString()===this._editor.getModel().uri.toString()&&(P.push({range:x.range,options:C.DecorationOptions}),N.push(M))}this._editor.changeDecorations(M=>{const R=M.deltaDecorations([],P);for(let x=0;x<R.length;x++)this._decorations.set(R[x],A.children[N[x]])})}_onDecorationChanged(){const A=[],P=this._editor.getModel();if(P){for(const[N,M]of this._decorations){const R=P.getDecorationRange(N);if(!R)continue;let x=!1;if(!b.Range.equalsRange(R,M.range)){if(b.Range.spansMultipleLines(R))x=!0;else{const O=M.range.endColumn-M.range.startColumn,B=R.endColumn-R.startColumn;O!==B&&(x=!0)}x?(this._decorationIgnoreSet.add(M.id),A.push(N)):M.range=R}}for(let N=0,M=A.length;N<M;N++)this._decorations.delete(A[N]);this._editor.removeDecorations(A)}}removeDecorations(){this._editor.removeDecorations([...this._decorations.keys()]),this._decorations.clear()}}C.DecorationOptions=a.ModelDecorationOptions.register({description:\"reference-decoration\",stickiness:1,className:\"reference-decoration\"});class w{constructor(){this.ratio=.7,this.heightInLines=18}static fromJSON(A){let P,N;try{const M=JSON.parse(A);P=M.ratio,N=M.heightInLines}catch{}return{ratio:P||.7,heightInLines:N||18}}}e.LayoutData=w;class D extends o.WorkbenchAsyncDataTree{}let I=class extends f.PeekViewWidget{constructor(A,P,N,M,R,x,O,B,W,V,K,F){super(A,{showFrame:!1,showArrow:!0,isResizeable:!0,isAccessible:!0,supportOnTitleClick:!0},x),this._defaultTreeKeyboardSupport=P,this.layoutData=N,this._textModelResolverService=R,this._instantiationService=x,this._peekViewService=O,this._uriLabel=B,this._undoRedoService=W,this._keybindingService=V,this._languageService=K,this._languageConfigurationService=F,this._disposeOnNewModel=new S.DisposableStore,this._callOnDispose=new S.DisposableStore,this._onDidSelectReference=new E.Emitter,this.onDidSelectReference=this._onDidSelectReference.event,this._dim=new L.Dimension(0,0),this._applyTheme(M.getColorTheme()),this._callOnDispose.add(M.onDidColorThemeChange(this._applyTheme.bind(this))),this._peekViewService.addExclusiveWidget(A,this),this.create()}dispose(){this.setModel(void 0),this._callOnDispose.dispose(),this._disposeOnNewModel.dispose(),(0,S.dispose)(this._preview),(0,S.dispose)(this._previewNotAvailableMessage),(0,S.dispose)(this._tree),(0,S.dispose)(this._previewModelReference),this._splitView.dispose(),super.dispose()}_applyTheme(A){const P=A.getColor(f.peekViewBorder)||y.Color.transparent;this.style({arrowColor:P,frameColor:P,headerBackgroundColor:A.getColor(f.peekViewTitleBackground)||y.Color.transparent,primaryHeadingColor:A.getColor(f.peekViewTitleForeground),secondaryHeadingColor:A.getColor(f.peekViewTitleInfoForeground)})}show(A){super.show(A,this.layoutData.heightInLines||18)}focusOnReferenceTree(){this._tree.domFocus()}focusOnPreviewEditor(){this._preview.focus()}isPreviewEditorFocused(){return this._preview.hasTextFocus()}_onTitleClick(A){this._preview&&this._preview.getModel()&&this._onDidSelectReference.fire({element:this._getFocusedReference(),kind:A.ctrlKey||A.metaKey||A.altKey?\"side\":\"open\",source:\"title\"})}_fillBody(A){this.setCssClass(\"reference-zone-widget\"),this._messageContainer=L.append(A,L.$(\"div.messages\")),L.hide(this._messageContainer),this._splitView=new k.SplitView(A,{orientation:1}),this._previewContainer=L.append(A,L.$(\"div.preview.inline\"));const P={scrollBeyondLastLine:!1,scrollbar:{verticalScrollbarSize:14,horizontal:\"auto\",useShadows:!0,verticalHasArrows:!1,horizontalHasArrows:!1,alwaysConsumeMouseWheel:!0},overviewRulerLanes:2,fixedOverflowWidgets:!0,minimap:{enabled:!1}};this._preview=this._instantiationService.createInstance(v.EmbeddedCodeEditorWidget,this._previewContainer,P,{},this.editor),L.hide(this._previewContainer),this._previewNotAvailableMessage=new a.TextModel(c.localize(0,null),n.PLAINTEXT_LANGUAGE_ID,a.TextModel.DEFAULT_CREATION_OPTIONS,null,this._undoRedoService,this._languageService,this._languageConfigurationService),this._treeContainer=L.append(A,L.$(\"div.ref-tree.inline\"));const N={keyboardSupport:this._defaultTreeKeyboardSupport,accessibilityProvider:new u.AccessibilityProvider,keyboardNavigationLabelProvider:this._instantiationService.createInstance(u.StringRepresentationProvider),identityProvider:new u.IdentityProvider,openOnSingleClick:!0,selectionNavigation:!0,overrideStyles:{listBackground:f.peekViewResultsBackground}};this._defaultTreeKeyboardSupport&&this._callOnDispose.add(L.addStandardDisposableListener(this._treeContainer,\"keydown\",R=>{R.equals(9)&&(this._keybindingService.dispatchEvent(R,R.target),R.stopPropagation())},!0)),this._tree=this._instantiationService.createInstance(D,\"ReferencesWidget\",this._treeContainer,new u.Delegate,[this._instantiationService.createInstance(u.FileReferencesRenderer),this._instantiationService.createInstance(u.OneReferenceRenderer)],this._instantiationService.createInstance(u.DataSource),N),this._splitView.addView({onDidChange:E.Event.None,element:this._previewContainer,minimumSize:200,maximumSize:Number.MAX_VALUE,layout:R=>{this._preview.layout({height:this._dim.height,width:R})}},k.Sizing.Distribute),this._splitView.addView({onDidChange:E.Event.None,element:this._treeContainer,minimumSize:100,maximumSize:Number.MAX_VALUE,layout:R=>{this._treeContainer.style.height=`${this._dim.height}px`,this._treeContainer.style.width=`${R}px`,this._tree.layout(this._dim.height,R)}},k.Sizing.Distribute),this._disposables.add(this._splitView.onDidSashChange(()=>{this._dim.width&&(this.layoutData.ratio=this._splitView.getViewSize(0)/this._dim.width)},void 0));const M=(R,x)=>{R instanceof m.OneReference&&(x===\"show\"&&this._revealReference(R,!1),this._onDidSelectReference.fire({element:R,kind:x,source:\"tree\"}))};this._tree.onDidOpen(R=>{R.sideBySide?M(R.element,\"side\"):R.editorOptions.pinned?M(R.element,\"goto\"):M(R.element,\"show\")}),L.hide(this._treeContainer)}_onWidth(A){this._dim&&this._doLayoutBody(this._dim.height,A)}_doLayoutBody(A,P){super._doLayoutBody(A,P),this._dim=new L.Dimension(P,A),this.layoutData.heightInLines=this._viewZone?this._viewZone.heightInLines:this.layoutData.heightInLines,this._splitView.layout(P),this._splitView.resizeView(0,P*this.layoutData.ratio)}setSelection(A){return this._revealReference(A,!0).then(()=>{this._model&&(this._tree.setSelection([A]),this._tree.setFocus([A]))})}setModel(A){return this._disposeOnNewModel.clear(),this._model=A,this._model?this._onNewModel():Promise.resolve()}_onNewModel(){return this._model?this._model.isEmpty?(this.setTitle(\"\"),this._messageContainer.innerText=c.localize(1,null),L.show(this._messageContainer),Promise.resolve(void 0)):(L.hide(this._messageContainer),this._decorationsManager=new C(this._preview,this._model),this._disposeOnNewModel.add(this._decorationsManager),this._disposeOnNewModel.add(this._model.onDidChangeReferenceRange(A=>this._tree.rerender(A))),this._disposeOnNewModel.add(this._preview.onMouseDown(A=>{const{event:P,target:N}=A;if(P.detail!==2)return;const M=this._getFocusedReference();M&&this._onDidSelectReference.fire({element:{uri:M.uri,range:N.range},kind:P.ctrlKey||P.metaKey||P.altKey?\"side\":\"open\",source:\"editor\"})})),this.container.classList.add(\"results-loaded\"),L.show(this._treeContainer),L.show(this._previewContainer),this._splitView.layout(this._dim.width),this.focusOnReferenceTree(),this._tree.setInput(this._model.groups.length===1?this._model.groups[0]:this._model)):Promise.resolve(void 0)}_getFocusedReference(){const[A]=this._tree.getFocus();if(A instanceof m.OneReference)return A;if(A instanceof m.FileReferences&&A.children.length>0)return A.children[0]}async revealReference(A){await this._revealReference(A,!1),this._onDidSelectReference.fire({element:A,kind:\"goto\",source:\"tree\"})}async _revealReference(A,P){if(this._revealedReference===A)return;this._revealedReference=A,A.uri.scheme!==p.Schemas.inMemory?this.setTitle((0,_.basenameOrAuthority)(A.uri),this._uriLabel.getUriLabel((0,_.dirname)(A.uri))):this.setTitle(c.localize(2,null));const N=this._textModelResolverService.createModelReference(A.uri);this._tree.getInput()===A.parent?this._tree.reveal(A):(P&&this._tree.reveal(A.parent),await this._tree.expand(A.parent),this._tree.reveal(A));const M=await N;if(!this._model){M.dispose();return}(0,S.dispose)(this._previewModelReference);const R=M.object;if(R){const x=this._preview.getModel()===R.textEditorModel?0:1,O=b.Range.lift(A.range).collapseToStart();this._previewModelReference=M,this._preview.setModel(R.textEditorModel),this._preview.setSelection(O),this._preview.revealRangeInCenter(O,x)}else this._preview.setModel(this._previewNotAvailableMessage),M.dispose()}};e.ReferenceWidget=I,e.ReferenceWidget=I=ke([ge(3,g.IThemeService),ge(4,r.ITextModelService),ge(5,d.IInstantiationService),ge(6,f.IPeekViewService),ge(7,l.ILabelService),ge(8,h.IUndoRedoService),ge(9,s.IKeybindingService),ge(10,t.ILanguageService),ge(11,i.ILanguageConfigurationService)],I)}),define(se[383],oe([1,0,14,12,65,2,33,10,5,142,682,25,27,15,8,124,192,50,92,161,914]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){\"use strict\";var l;Object.defineProperty(e,\"__esModule\",{value:!0}),e.ReferencesController=e.ctxReferenceSearchVisible=void 0,e.ctxReferenceSearchVisible=new n.RawContextKey(\"referenceSearchVisible\",!1,b.localize(0,null));let o=l=class{static get(m){return m.getContribution(l.ID)}constructor(m,C,w,D,I,T,A,P){this._defaultTreeKeyboardSupport=m,this._editor=C,this._editorService=D,this._notificationService=I,this._instantiationService=T,this._storageService=A,this._configurationService=P,this._disposables=new E.DisposableStore,this._requestIdPool=0,this._ignoreModelChangeEvent=!1,this._referenceSearchVisible=e.ctxReferenceSearchVisible.bindTo(w)}dispose(){var m,C;this._referenceSearchVisible.reset(),this._disposables.dispose(),(m=this._widget)===null||m===void 0||m.dispose(),(C=this._model)===null||C===void 0||C.dispose(),this._widget=void 0,this._model=void 0}toggleWidget(m,C,w){let D;if(this._widget&&(D=this._widget.position),this.closeWidget(),D&&m.containsPosition(D))return;this._peekMode=w,this._referenceSearchVisible.set(!0),this._disposables.add(this._editor.onDidChangeModelLanguage(()=>{this.closeWidget()})),this._disposables.add(this._editor.onDidChangeModel(()=>{this._ignoreModelChangeEvent||this.closeWidget()}));const I=\"peekViewLayout\",T=s.LayoutData.fromJSON(this._storageService.get(I,0,\"{}\"));this._widget=this._instantiationService.createInstance(s.ReferenceWidget,this._editor,this._defaultTreeKeyboardSupport,T),this._widget.setTitle(b.localize(1,null)),this._widget.show(m),this._disposables.add(this._widget.onDidClose(()=>{C.cancel(),this._widget&&(this._storageService.store(I,JSON.stringify(this._widget.layoutData),0,1),this._widget=void 0),this.closeWidget()})),this._disposables.add(this._widget.onDidSelectReference(P=>{const{element:N,kind:M}=P;if(N)switch(M){case\"open\":(P.source!==\"editor\"||!this._configurationService.getValue(\"editor.stablePeek\"))&&this.openReference(N,!1,!1);break;case\"side\":this.openReference(N,!0,!1);break;case\"goto\":w?this._gotoReference(N,!0):this.openReference(N,!1,!0);break}}));const A=++this._requestIdPool;C.then(P=>{var N;if(A!==this._requestIdPool||!this._widget){P.dispose();return}return(N=this._model)===null||N===void 0||N.dispose(),this._model=P,this._widget.setModel(this._model).then(()=>{if(this._widget&&this._model&&this._editor.hasModel()){this._model.isEmpty?this._widget.setMetaTitle(\"\"):this._widget.setMetaTitle(b.localize(2,null,this._model.title,this._model.references.length));const M=this._editor.getModel().uri,R=new p.Position(m.startLineNumber,m.startColumn),x=this._model.nearestReference(M,R);if(x)return this._widget.setSelection(x).then(()=>{this._widget&&this._editor.getOption(86)===\"editor\"&&this._widget.focusOnPreviewEditor()})}})},P=>{this._notificationService.error(P)})}changeFocusBetweenPreviewAndReferences(){this._widget&&(this._widget.isPreviewEditorFocused()?this._widget.focusOnReferenceTree():this._widget.focusOnPreviewEditor())}async goToNextOrPreviousReference(m){if(!this._editor.hasModel()||!this._model||!this._widget)return;const C=this._widget.position;if(!C)return;const w=this._model.nearestReference(this._editor.getModel().uri,C);if(!w)return;const D=this._model.nextOrPreviousReference(w,m),I=this._editor.hasTextFocus(),T=this._widget.isPreviewEditorFocused();await this._widget.setSelection(D),await this._gotoReference(D,!1),I?this._editor.focus():this._widget&&T&&this._widget.focusOnPreviewEditor()}async revealReference(m){!this._editor.hasModel()||!this._model||!this._widget||await this._widget.revealReference(m)}closeWidget(m=!0){var C,w;(C=this._widget)===null||C===void 0||C.dispose(),(w=this._model)===null||w===void 0||w.dispose(),this._referenceSearchVisible.reset(),this._disposables.clear(),this._widget=void 0,this._model=void 0,m&&this._editor.focus(),this._requestIdPool+=1}_gotoReference(m,C){var w;(w=this._widget)===null||w===void 0||w.hide(),this._ignoreModelChangeEvent=!0;const D=_.Range.lift(m.range).collapseToStart();return this._editorService.openCodeEditor({resource:m.uri,options:{selection:D,selectionSource:\"code.jump\",pinned:C}},this._editor).then(I=>{var T;if(this._ignoreModelChangeEvent=!1,!I||!this._widget){this.closeWidget();return}if(this._editor===I)this._widget.show(D),this._widget.focusOnReferenceTree();else{const A=l.get(I),P=this._model.clone();this.closeWidget(),I.focus(),A?.toggleWidget(D,(0,L.createCancelablePromise)(N=>Promise.resolve(P)),(T=this._peekMode)!==null&&T!==void 0?T:!1)}},I=>{this._ignoreModelChangeEvent=!1,(0,k.onUnexpectedError)(I)})}openReference(m,C,w){C||this.closeWidget();const{uri:D,range:I}=m;this._editorService.openCodeEditor({resource:D,options:{selection:I,selectionSource:\"code.jump\",pinned:w}},this._editor,C)}};e.ReferencesController=o,o.ID=\"editor.contrib.referencesController\",e.ReferencesController=o=l=ke([ge(2,n.IContextKeyService),ge(3,S.ICodeEditorService),ge(4,f.INotificationService),ge(5,t.IInstantiationService),ge(6,c.IStorageService),ge(7,i.IConfigurationService)],o);function g(h,m){const C=(0,v.getOuterEditor)(h);if(!C)return;const w=o.get(C);w&&m(w)}r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:\"togglePeekWidgetFocus\",weight:100,primary:(0,y.KeyChord)(2089,60),when:n.ContextKeyExpr.or(e.ctxReferenceSearchVisible,v.PeekContext.inPeekEditor),handler(h){g(h,m=>{m.changeFocusBetweenPreviewAndReferences()})}}),r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:\"goToNextReference\",weight:100-10,primary:62,secondary:[70],when:n.ContextKeyExpr.or(e.ctxReferenceSearchVisible,v.PeekContext.inPeekEditor),handler(h){g(h,m=>{m.goToNextOrPreviousReference(!0)})}}),r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:\"goToPreviousReference\",weight:100-10,primary:1086,secondary:[1094],when:n.ContextKeyExpr.or(e.ctxReferenceSearchVisible,v.PeekContext.inPeekEditor),handler(h){g(h,m=>{m.goToNextOrPreviousReference(!1)})}}),a.CommandsRegistry.registerCommandAlias(\"goToNextReferenceFromEmbeddedEditor\",\"goToNextReference\"),a.CommandsRegistry.registerCommandAlias(\"goToPreviousReferenceFromEmbeddedEditor\",\"goToPreviousReference\"),a.CommandsRegistry.registerCommandAlias(\"closeReferenceSearchEditor\",\"closeReferenceSearch\"),a.CommandsRegistry.registerCommand(\"closeReferenceSearch\",h=>g(h,m=>m.closeWidget())),r.KeybindingsRegistry.registerKeybindingRule({id:\"closeReferenceSearch\",weight:100-101,primary:9,secondary:[1033],when:n.ContextKeyExpr.and(v.PeekContext.inPeekEditor,n.ContextKeyExpr.not(\"config.editor.stablePeek\"))}),r.KeybindingsRegistry.registerKeybindingRule({id:\"closeReferenceSearch\",weight:200+50,primary:9,secondary:[1033],when:n.ContextKeyExpr.and(e.ctxReferenceSearchVisible,n.ContextKeyExpr.not(\"config.editor.stablePeek\"))}),r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:\"revealReference\",weight:200,primary:3,mac:{primary:3,secondary:[2066]},when:n.ContextKeyExpr.and(e.ctxReferenceSearchVisible,u.WorkbenchListFocusContextKey,u.WorkbenchTreeElementCanCollapse.negate(),u.WorkbenchTreeElementCanExpand.negate()),handler(h){var m;const w=(m=h.get(u.IListService).lastFocusedList)===null||m===void 0?void 0:m.getFocus();Array.isArray(w)&&w[0]instanceof d.OneReference&&g(h,D=>D.revealReference(w[0]))}}),r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:\"openReferenceToSide\",weight:100,primary:2051,mac:{primary:259},when:n.ContextKeyExpr.and(e.ctxReferenceSearchVisible,u.WorkbenchListFocusContextKey,u.WorkbenchTreeElementCanCollapse.negate(),u.WorkbenchTreeElementCanExpand.negate()),handler(h){var m;const w=(m=h.get(u.IListService).lastFocusedList)===null||m===void 0?void 0:m.getFocus();Array.isArray(w)&&w[0]instanceof d.OneReference&&g(h,D=>D.openReference(w[0],!0,!0))}}),a.CommandsRegistry.registerCommand(\"openReference\",h=>{var m;const w=(m=h.get(u.IListService).lastFocusedList)===null||m===void 0?void 0:m.getFocus();Array.isArray(w)&&w[0]instanceof d.OneReference&&g(h,D=>D.openReference(w[0],!1,!0))})}),define(se[263],oe([1,0,48,14,65,20,22,105,153,16,33,168,10,5,21,31,383,161,819,166,142,680,30,25,15,8,50,88,252,18,52,242]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A){\"use strict\";var P,N,M,R,x,O,B,W;Object.defineProperty(e,\"__esModule\",{value:!0}),e.DefinitionAction=e.SymbolNavigationAction=e.SymbolNavigationAnchor=void 0,o.MenuRegistry.appendMenuItem(o.MenuId.EditorContext,{submenu:o.MenuId.EditorContextPeek,title:l.localize(0,null),group:\"navigation\",order:100});class V{static is(Q){return!Q||typeof Q!=\"object\"?!1:!!(Q instanceof V||i.Position.isIPosition(Q.position)&&Q.model)}constructor(Q,re){this.model=Q,this.position=re}}e.SymbolNavigationAnchor=V;class K extends v.EditorAction2{static all(){return K._allSymbolNavigationCommands.values()}static _patchConfig(Q){const re={...Q,f1:!0};if(re.menu)for(const de of T.Iterable.wrap(re.menu))(de.id===o.MenuId.EditorContext||de.id===o.MenuId.EditorContextPeek)&&(de.when=h.ContextKeyExpr.and(Q.precondition,de.when));return re}constructor(Q,re){super(K._patchConfig(re)),this.configuration=Q,K._allSymbolNavigationCommands.set(re.id,this)}runEditorCommand(Q,re,de,he){if(!re.hasModel())return Promise.resolve(void 0);const me=Q.get(C.INotificationService),X=Q.get(b.ICodeEditorService),U=Q.get(w.IEditorProgressService),G=Q.get(c.ISymbolNavigationService),z=Q.get(I.ILanguageFeaturesService),H=Q.get(m.IInstantiationService),Y=re.getModel(),j=re.getPosition(),Z=V.is(de)?de:new V(Y,j),ee=new p.EditorStateCancellationTokenSource(re,5),le=(0,k.raceCancellation)(this._getLocationModel(z,Z.model,Z.position,ee.token),ee.token).then(async ue=>{var ce;if(!ue||ee.token.isCancellationRequested)return;(0,L.alert)(ue.ariaMessage);let pe;if(ue.referenceAt(Y.uri,j)){const Ce=this._getAlternativeCommand(re);!K._activeAlternativeCommands.has(Ce)&&K._allSymbolNavigationCommands.has(Ce)&&(pe=K._allSymbolNavigationCommands.get(Ce))}const ve=ue.references.length;if(ve===0){if(!this.configuration.muteMessage){const Ce=Y.getWordAtPosition(j);(ce=d.MessageController.get(re))===null||ce===void 0||ce.showMessage(this._getNoResultFoundMessage(Ce),j)}}else if(ve===1&&pe)K._activeAlternativeCommands.add(this.desc.id),H.invokeFunction(Ce=>pe.runEditorCommand(Ce,re,de,he).finally(()=>{K._activeAlternativeCommands.delete(this.desc.id)}));else return this._onResult(X,G,re,ue,he)},ue=>{me.error(ue)}).finally(()=>{ee.dispose()});return U.showWhile(le,250),le}async _onResult(Q,re,de,he,me){const X=this._getGoToPreference(de);if(!(de instanceof a.EmbeddedCodeEditorWidget)&&(this.configuration.openInPeek||X===\"peek\"&&he.references.length>1))this._openInPeek(de,he,me);else{const U=he.firstReference(),G=he.references.length>1&&X===\"gotoAndPeek\",z=await this._openReference(de,Q,U,this.configuration.openToSide,!G);G&&z?this._openInPeek(z,he,me):he.dispose(),X===\"goto\"&&re.put(U)}}async _openReference(Q,re,de,he,me){let X;if((0,r.isLocationLink)(de)&&(X=de.targetSelectionRange),X||(X=de.range),!X)return;const U=await re.openCodeEditor({resource:de.uri,options:{selection:n.Range.collapseToStart(X),selectionRevealType:3,selectionSource:\"code.jump\"}},Q,he);if(U){if(me){const G=U.getModel(),z=U.createDecorationsCollection([{range:X,options:{description:\"symbol-navigate-action-highlight\",className:\"symbolHighlight\"}}]);setTimeout(()=>{U.getModel()===G&&z.clear()},350)}return U}}_openInPeek(Q,re,de){const he=u.ReferencesController.get(Q);he&&Q.hasModel()?he.toggleWidget(de??Q.getSelection(),(0,k.createCancelablePromise)(me=>Promise.resolve(re)),this.configuration.openInPeek):re.dispose()}}e.SymbolNavigationAction=K,K._allSymbolNavigationCommands=new Map,K._activeAlternativeCommands=new Set;class F extends K{async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getDefinitionsAtPosition)(Q.definitionProvider,re,de,he),l.localize(1,null))}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(2,null,Q.word):l.localize(3,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeDefinitionCommand}_getGoToPreference(Q){return Q.getOption(58).multipleDefinitions}}e.DefinitionAction=F,(0,o.registerAction2)((P=class extends F{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:P.id,title:{value:l.localize(4,null),original:\"Go to Definition\",mnemonicTitle:l.localize(5,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDefinitionProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:[{when:t.EditorContextKeys.editorTextFocus,primary:70,weight:100},{when:h.ContextKeyExpr.and(t.EditorContextKeys.editorTextFocus,A.IsWebContext),primary:2118,weight:100}],menu:[{id:o.MenuId.EditorContext,group:\"navigation\",order:1.1},{id:o.MenuId.MenubarGoMenu,precondition:null,group:\"4_symbol_nav\",order:2}]}),g.CommandsRegistry.registerCommandAlias(\"editor.action.goToDeclaration\",P.id)}},P.id=\"editor.action.revealDefinition\",P)),(0,o.registerAction2)((N=class extends F{constructor(){super({openToSide:!0,openInPeek:!1,muteMessage:!1},{id:N.id,title:{value:l.localize(6,null),original:\"Open Definition to the Side\"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDefinitionProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:[{when:t.EditorContextKeys.editorTextFocus,primary:(0,y.KeyChord)(2089,70),weight:100},{when:h.ContextKeyExpr.and(t.EditorContextKeys.editorTextFocus,A.IsWebContext),primary:(0,y.KeyChord)(2089,2118),weight:100}]}),g.CommandsRegistry.registerCommandAlias(\"editor.action.openDeclarationToTheSide\",N.id)}},N.id=\"editor.action.revealDefinitionAside\",N)),(0,o.registerAction2)((M=class extends F{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:M.id,title:{value:l.localize(7,null),original:\"Peek Definition\"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDefinitionProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:582,linux:{primary:3140},weight:100},menu:{id:o.MenuId.EditorContextPeek,group:\"peek\",order:2}}),g.CommandsRegistry.registerCommandAlias(\"editor.action.previewDeclaration\",M.id)}},M.id=\"editor.action.peekDefinition\",M));class q extends K{async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getDeclarationsAtPosition)(Q.declarationProvider,re,de,he),l.localize(8,null))}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(9,null,Q.word):l.localize(10,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeDeclarationCommand}_getGoToPreference(Q){return Q.getOption(58).multipleDeclarations}}(0,o.registerAction2)((R=class extends q{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:R.id,title:{value:l.localize(11,null),original:\"Go to Declaration\",mnemonicTitle:l.localize(12,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDeclarationProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),menu:[{id:o.MenuId.EditorContext,group:\"navigation\",order:1.3},{id:o.MenuId.MenubarGoMenu,precondition:null,group:\"4_symbol_nav\",order:3}]})}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(13,null,Q.word):l.localize(14,null)}},R.id=\"editor.action.revealDeclaration\",R)),(0,o.registerAction2)(class extends q{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:\"editor.action.peekDeclaration\",title:{value:l.localize(15,null),original:\"Peek Declaration\"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDeclarationProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),menu:{id:o.MenuId.EditorContextPeek,group:\"peek\",order:3}})}});class ie extends K{async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getTypeDefinitionsAtPosition)(Q.typeDefinitionProvider,re,de,he),l.localize(16,null))}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(17,null,Q.word):l.localize(18,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeTypeDefinitionCommand}_getGoToPreference(Q){return Q.getOption(58).multipleTypeDefinitions}}(0,o.registerAction2)((x=class extends ie{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:x.ID,title:{value:l.localize(19,null),original:\"Go to Type Definition\",mnemonicTitle:l.localize(20,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasTypeDefinitionProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:0,weight:100},menu:[{id:o.MenuId.EditorContext,group:\"navigation\",order:1.4},{id:o.MenuId.MenubarGoMenu,precondition:null,group:\"4_symbol_nav\",order:3}]})}},x.ID=\"editor.action.goToTypeDefinition\",x)),(0,o.registerAction2)((O=class extends ie{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:O.ID,title:{value:l.localize(21,null),original:\"Peek Type Definition\"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasTypeDefinitionProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),menu:{id:o.MenuId.EditorContextPeek,group:\"peek\",order:4}})}},O.ID=\"editor.action.peekTypeDefinition\",O));class ae extends K{async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getImplementationsAtPosition)(Q.implementationProvider,re,de,he),l.localize(22,null))}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(23,null,Q.word):l.localize(24,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeImplementationCommand}_getGoToPreference(Q){return Q.getOption(58).multipleImplementations}}(0,o.registerAction2)((B=class extends ae{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:B.ID,title:{value:l.localize(25,null),original:\"Go to Implementations\",mnemonicTitle:l.localize(26,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasImplementationProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:2118,weight:100},menu:[{id:o.MenuId.EditorContext,group:\"navigation\",order:1.45},{id:o.MenuId.MenubarGoMenu,precondition:null,group:\"4_symbol_nav\",order:4}]})}},B.ID=\"editor.action.goToImplementation\",B)),(0,o.registerAction2)((W=class extends ae{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:W.ID,title:{value:l.localize(27,null),original:\"Peek Implementations\"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasImplementationProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:3142,weight:100},menu:{id:o.MenuId.EditorContextPeek,group:\"peek\",order:5}})}},W.ID=\"editor.action.peekImplementation\",W));class ne extends K{_getNoResultFoundMessage(Q){return Q?l.localize(28,null,Q.word):l.localize(29,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeReferenceCommand}_getGoToPreference(Q){return Q.getOption(58).multipleReferences}}(0,o.registerAction2)(class extends ne{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:\"editor.action.goToReferences\",title:{value:l.localize(30,null),original:\"Go to References\",mnemonicTitle:l.localize(31,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasReferenceProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:1094,weight:100},menu:[{id:o.MenuId.EditorContext,group:\"navigation\",order:1.45},{id:o.MenuId.MenubarGoMenu,precondition:null,group:\"4_symbol_nav\",order:5}]})}async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getReferencesAtPosition)(Q.referenceProvider,re,de,!0,he),l.localize(32,null))}}),(0,o.registerAction2)(class extends ne{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:\"editor.action.referenceSearch.trigger\",title:{value:l.localize(33,null),original:\"Peek References\"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasReferenceProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),menu:{id:o.MenuId.EditorContextPeek,group:\"peek\",order:6}})}async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getReferencesAtPosition)(Q.referenceProvider,re,de,!1,he),l.localize(34,null))}});class $ extends K{constructor(Q,re,de){super(Q,{id:\"editor.action.goToLocation\",title:{value:l.localize(35,null),original:\"Go to Any Symbol\"},precondition:h.ContextKeyExpr.and(s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated())}),this._references=re,this._gotoMultipleBehaviour=de}async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(this._references,l.localize(36,null))}_getNoResultFoundMessage(Q){return Q&&l.localize(37,null,Q.word)||\"\"}_getGoToPreference(Q){var re;return(re=this._gotoMultipleBehaviour)!==null&&re!==void 0?re:Q.getOption(58).multipleReferences}_getAlternativeCommand(){return\"\"}}g.CommandsRegistry.registerCommand({id:\"editor.action.goToLocations\",metadata:{description:\"Go to locations from a position in a file\",args:[{name:\"uri\",description:\"The text document in which to start\",constraint:S.URI},{name:\"position\",description:\"The position at which to start\",constraint:i.Position.isIPosition},{name:\"locations\",description:\"An array of locations.\",constraint:Array},{name:\"multiple\",description:\"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto`\"},{name:\"noResultsMessage\",description:\"Human readable message that shows when locations is empty.\"}]},handler:async(J,Q,re,de,he,me,X)=>{(0,E.assertType)(S.URI.isUri(Q)),(0,E.assertType)(i.Position.isIPosition(re)),(0,E.assertType)(Array.isArray(de)),(0,E.assertType)(typeof he>\"u\"||typeof he==\"string\"),(0,E.assertType)(typeof X>\"u\"||typeof X==\"boolean\");const U=J.get(b.ICodeEditorService),G=await U.openCodeEditor({resource:Q},U.getFocusedCodeEditor());if((0,_.isCodeEditor)(G))return G.setPosition(re),G.revealPositionInCenterIfOutsideViewport(re,0),G.invokeWithinContext(z=>{const H=new class extends ${_getNoResultFoundMessage(Y){return me||super._getNoResultFoundMessage(Y)}}({muteMessage:!me,openInPeek:!!X,openToSide:!1},de,he);z.get(m.IInstantiationService).invokeFunction(H.run.bind(H),G)})}}),g.CommandsRegistry.registerCommand({id:\"editor.action.peekLocations\",metadata:{description:\"Peek locations from a position in a file\",args:[{name:\"uri\",description:\"The text document in which to start\",constraint:S.URI},{name:\"position\",description:\"The position at which to start\",constraint:i.Position.isIPosition},{name:\"locations\",description:\"An array of locations.\",constraint:Array},{name:\"multiple\",description:\"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto`\"}]},handler:async(J,Q,re,de,he)=>{J.get(g.ICommandService).executeCommand(\"editor.action.goToLocations\",Q,re,de,he,void 0,!0)}}),g.CommandsRegistry.registerCommand({id:\"editor.action.findReferences\",handler:(J,Q,re)=>{(0,E.assertType)(S.URI.isUri(Q)),(0,E.assertType)(i.Position.isIPosition(re));const de=J.get(I.ILanguageFeaturesService),he=J.get(b.ICodeEditorService);return he.openCodeEditor({resource:Q},he.getFocusedCodeEditor()).then(me=>{if(!(0,_.isCodeEditor)(me)||!me.hasModel())return;const X=u.ReferencesController.get(me);if(!X)return;const U=(0,k.createCancelablePromise)(z=>(0,D.getReferencesAtPosition)(de.referenceProvider,me.getModel(),i.Position.lift(re),!1,z).then(H=>new f.ReferencesModel(H,l.localize(38,null)))),G=new n.Range(re.lineNumber,re.column,re.lineNumber,re.column);return Promise.resolve(X.toggleWidget(G,U,!1))})}}),g.CommandsRegistry.registerCommandAlias(\"editor.action.showReferences\",\"editor.action.peekLocations\")}),define(se[384],oe([1,0,14,12,58,2,105,16,5,43,68,188,142,681,15,263,252,18,38,463]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";var d;Object.defineProperty(e,\"__esModule\",{value:!0}),e.GotoDefinitionAtPositionEditorContribution=void 0;let s=d=class{constructor(o,g,h,m){this.textModelResolverService=g,this.languageService=h,this.languageFeaturesService=m,this.toUnhook=new E.DisposableStore,this.toUnhookForKeyboard=new E.DisposableStore,this.currentWordAtPosition=null,this.previousPromise=null,this.editor=o,this.linkDecorations=this.editor.createDecorationsCollection();const C=new a.ClickLinkGesture(o);this.toUnhook.add(C),this.toUnhook.add(C.onMouseMoveOrRelevantKeyDown(([w,D])=>{this.startFindDefinitionFromMouse(w,D??void 0)})),this.toUnhook.add(C.onExecute(w=>{this.isEnabled(w)&&this.gotoDefinition(w.target.position,w.hasSideBySideModifier).catch(D=>{(0,k.onUnexpectedError)(D)}).finally(()=>{this.removeLinkDecorations()})})),this.toUnhook.add(C.onCancel(()=>{this.removeLinkDecorations(),this.currentWordAtPosition=null}))}static get(o){return o.getContribution(d.ID)}async startFindDefinitionFromCursor(o){await this.startFindDefinition(o),this.toUnhookForKeyboard.add(this.editor.onDidChangeCursorPosition(()=>{this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear()})),this.toUnhookForKeyboard.add(this.editor.onKeyDown(g=>{g&&(this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear())}))}startFindDefinitionFromMouse(o,g){if(o.target.type===9&&this.linkDecorations.length>0)return;if(!this.editor.hasModel()||!this.isEnabled(o,g)){this.currentWordAtPosition=null,this.removeLinkDecorations();return}const h=o.target.position;this.startFindDefinition(h)}async startFindDefinition(o){var g;this.toUnhookForKeyboard.clear();const h=o?(g=this.editor.getModel())===null||g===void 0?void 0:g.getWordAtPosition(o):null;if(!h){this.currentWordAtPosition=null,this.removeLinkDecorations();return}if(this.currentWordAtPosition&&this.currentWordAtPosition.startColumn===h.startColumn&&this.currentWordAtPosition.endColumn===h.endColumn&&this.currentWordAtPosition.word===h.word)return;this.currentWordAtPosition=h;const m=new S.EditorState(this.editor,15);this.previousPromise&&(this.previousPromise.cancel(),this.previousPromise=null),this.previousPromise=(0,L.createCancelablePromise)(D=>this.findDefinition(o,D));let C;try{C=await this.previousPromise}catch(D){(0,k.onUnexpectedError)(D);return}if(!C||!C.length||!m.validate(this.editor)){this.removeLinkDecorations();return}const w=C[0].originSelectionRange?_.Range.lift(C[0].originSelectionRange):new _.Range(o.lineNumber,h.startColumn,o.lineNumber,h.endColumn);if(C.length>1){let D=w;for(const{originSelectionRange:I}of C)I&&(D=_.Range.plusRange(D,I));this.addDecoration(D,new y.MarkdownString().appendText(n.localize(0,null,C.length)))}else{const D=C[0];if(!D.uri)return;this.textModelResolverService.createModelReference(D.uri).then(I=>{if(!I.object||!I.object.textEditorModel){I.dispose();return}const{object:{textEditorModel:T}}=I,{startLineNumber:A}=D.range;if(A<1||A>T.getLineCount()){I.dispose();return}const P=this.getPreviewValue(T,A,D),N=this.languageService.guessLanguageIdByFilepathOrFirstLine(T.uri);this.addDecoration(w,P?new y.MarkdownString().appendCodeblock(N||\"\",P):void 0),I.dispose()})}}getPreviewValue(o,g,h){let m=h.range;return m.endLineNumber-m.startLineNumber>=d.MAX_SOURCE_PREVIEW_LINES&&(m=this.getPreviewRangeBasedOnIndentation(o,g)),this.stripIndentationFromPreviewRange(o,g,m)}stripIndentationFromPreviewRange(o,g,h){let C=o.getLineFirstNonWhitespaceColumn(g);for(let D=g+1;D<h.endLineNumber;D++){const I=o.getLineFirstNonWhitespaceColumn(D);C=Math.min(C,I)}return o.getValueInRange(h).replace(new RegExp(`^\\\\s{${C-1}}`,\"gm\"),\"\").trim()}getPreviewRangeBasedOnIndentation(o,g){const h=o.getLineFirstNonWhitespaceColumn(g),m=Math.min(o.getLineCount(),g+d.MAX_SOURCE_PREVIEW_LINES);let C=g+1;for(;C<m;C++){const w=o.getLineFirstNonWhitespaceColumn(C);if(h===w)break}return new _.Range(g,1,C+1,1)}addDecoration(o,g){const h={range:o,options:{description:\"goto-definition-link\",inlineClassName:\"goto-definition-link\",hoverMessage:g}};this.linkDecorations.set([h])}removeLinkDecorations(){this.linkDecorations.clear()}isEnabled(o,g){var h;return this.editor.hasModel()&&o.isLeftClick&&o.isNoneOrSingleMouseDown&&o.target.type===6&&!(((h=o.target.detail.injectedText)===null||h===void 0?void 0:h.options)instanceof c.ModelDecorationInjectedTextOptions)&&(o.hasTriggerModifier||(g?g.keyCodeIsTriggerKey:!1))&&this.languageFeaturesService.definitionProvider.has(this.editor.getModel())}findDefinition(o,g){const h=this.editor.getModel();return h?(0,u.getDefinitionsAtPosition)(this.languageFeaturesService.definitionProvider,h,o,g):Promise.resolve(null)}gotoDefinition(o,g){return this.editor.setPosition(o),this.editor.invokeWithinContext(h=>{const m=!g&&this.editor.getOption(87)&&!this.isInPeekEditor(h);return new r.DefinitionAction({openToSide:g,openInPeek:m,muteMessage:!0},{title:{value:\"\",original:\"\"},id:\"\",precondition:void 0}).run(h)})}isInPeekEditor(o){const g=o.get(t.IContextKeyService);return i.PeekContext.inPeekEditor.getValue(g)}dispose(){this.toUnhook.dispose(),this.toUnhookForKeyboard.dispose()}};e.GotoDefinitionAtPositionEditorContribution=s,s.ID=\"editor.contrib.gotodefinitionatposition\",s.MAX_SOURCE_PREVIEW_LINES=8,e.GotoDefinitionAtPositionEditorContribution=s=d=ke([ge(1,b.ITextModelService),ge(2,v.ILanguageService),ge(3,f.ILanguageFeaturesService)],s),(0,p.registerEditorContribution)(s.ID,s,2)}),define(se[915],oe([1,0,7,13,14,12,2,49,5,18,237,140,260,116,382,689,97,57,88]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.MarkerHoverParticipant=e.MarkerHover=void 0;const d=L.$;class s{constructor(h,m,C){this.owner=h,this.range=m,this.marker=C}isValidForHoverAnchor(h){return h.type===1&&this.range.startColumn<=h.range.startColumn&&this.range.endColumn>=h.range.endColumn}}e.MarkerHover=s;const l={type:1,filter:{include:n.CodeActionKind.QuickFix},triggerAction:n.CodeActionTriggerSource.QuickFixHover};let o=class{constructor(h,m,C,w){this._editor=h,this._markerDecorationsService=m,this._openerService=C,this._languageFeaturesService=w,this.hoverOrdinal=1,this.recentMarkerCodeActionsInfo=void 0}computeSync(h,m){if(!this._editor.hasModel()||h.type!==1&&!h.supportsMarkerHover)return[];const C=this._editor.getModel(),w=h.range.startLineNumber,D=C.getLineMaxColumn(w),I=[];for(const T of m){const A=T.range.startLineNumber===w?T.range.startColumn:1,P=T.range.endLineNumber===w?T.range.endColumn:D,N=this._markerDecorationsService.getMarker(C.uri,T);if(!N)continue;const M=new _.Range(h.range.startLineNumber,A,h.range.startLineNumber,P);I.push(new s(this,M,N))}return I}renderHoverParts(h,m){if(!m.length)return S.Disposable.None;const C=new S.DisposableStore;m.forEach(D=>h.fragment.appendChild(this.renderMarkerHover(D,C)));const w=m.length===1?m[0]:m.sort((D,I)=>u.MarkerSeverity.compare(D.marker.severity,I.marker.severity))[0];return this.renderMarkerStatusbar(h,w,C),C}renderMarkerHover(h,m){const C=d(\"div.hover-row\"),w=L.append(C,d(\"div.marker.hover-contents\")),{source:D,message:I,code:T,relatedInformation:A}=h.marker;this._editor.applyFontInfo(w);const P=L.append(w,d(\"span\"));if(P.style.whiteSpace=\"pre-wrap\",P.innerText=I,D||T)if(T&&typeof T!=\"string\"){const N=d(\"span\");if(D){const O=L.append(N,d(\"span\"));O.innerText=D}const M=L.append(N,d(\"a.code-link\"));M.setAttribute(\"href\",T.target.toString()),m.add(L.addDisposableListener(M,\"click\",O=>{this._openerService.open(T.target,{allowCommands:!0}),O.preventDefault(),O.stopPropagation()}));const R=L.append(M,d(\"span\"));R.innerText=T.value;const x=L.append(w,N);x.style.opacity=\"0.6\",x.style.paddingLeft=\"6px\"}else{const N=L.append(w,d(\"span\"));N.style.opacity=\"0.6\",N.style.paddingLeft=\"6px\",N.innerText=D&&T?`${D}(${T})`:D||`(${T})`}if((0,k.isNonEmptyArray)(A))for(const{message:N,resource:M,startLineNumber:R,startColumn:x}of A){const O=L.append(w,d(\"div\"));O.style.marginTop=\"8px\";const B=L.append(O,d(\"a\"));B.innerText=`${(0,p.basename)(M)}(${R}, ${x}): `,B.style.cursor=\"pointer\",m.add(L.addDisposableListener(B,\"click\",V=>{V.stopPropagation(),V.preventDefault(),this._openerService&&this._openerService.open(M,{fromUserGesture:!0,editorOptions:{selection:{startLineNumber:R,startColumn:x}}}).catch(E.onUnexpectedError)}));const W=L.append(O,d(\"span\"));W.innerText=N,this._editor.applyFontInfo(W)}return C}renderMarkerStatusbar(h,m,C){if((m.marker.severity===u.MarkerSeverity.Error||m.marker.severity===u.MarkerSeverity.Warning||m.marker.severity===u.MarkerSeverity.Info)&&h.statusBar.addAction({label:r.localize(0,null),commandId:t.NextMarkerAction.ID,run:()=>{var w;h.hide(),(w=t.MarkerController.get(this._editor))===null||w===void 0||w.showAtMarker(m.marker),this._editor.focus()}}),!this._editor.getOption(90)){const w=h.statusBar.append(d(\"div\"));this.recentMarkerCodeActionsInfo&&(u.IMarkerData.makeKey(this.recentMarkerCodeActionsInfo.marker)===u.IMarkerData.makeKey(m.marker)?this.recentMarkerCodeActionsInfo.hasCodeActions||(w.textContent=r.localize(1,null)):this.recentMarkerCodeActionsInfo=void 0);const D=this.recentMarkerCodeActionsInfo&&!this.recentMarkerCodeActionsInfo.hasCodeActions?S.Disposable.None:(0,y.disposableTimeout)(()=>w.textContent=r.localize(2,null),200,C);w.textContent||(w.textContent=String.fromCharCode(160));const I=this.getCodeActions(m.marker);C.add((0,S.toDisposable)(()=>I.cancel())),I.then(T=>{if(D.dispose(),this.recentMarkerCodeActionsInfo={marker:m.marker,hasCodeActions:T.validActions.length>0},!this.recentMarkerCodeActionsInfo.hasCodeActions){T.dispose(),w.textContent=r.localize(3,null);return}w.style.display=\"none\";let A=!1;C.add((0,S.toDisposable)(()=>{A||T.dispose()})),h.statusBar.addAction({label:r.localize(4,null),commandId:a.quickFixCommandId,run:P=>{A=!0;const N=i.CodeActionController.get(this._editor),M=L.getDomNodePagePosition(P);h.hide(),N?.showCodeActions(l,T,{x:M.left,y:M.top,width:M.width,height:M.height})}})},E.onUnexpectedError)}}getCodeActions(h){return(0,y.createCancelablePromise)(m=>(0,a.getCodeActions)(this._languageFeaturesService.codeActionProvider,this._editor.getModel(),new _.Range(h.startLineNumber,h.startColumn,h.endLineNumber,h.endColumn),l,c.Progress.None,m))}};e.MarkerHoverParticipant=o,e.MarkerHoverParticipant=o=ke([ge(1,b.IMarkerDecorationsService),ge(2,f.IOpenerService),ge(3,v.ILanguageFeaturesService)],o)}),define(se[385],oe([1,0,65,2,16,5,21,43,384,379,796,8,57,29,23,101,253,915,257,34,14,687,465]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l){\"use strict\";var o;Object.defineProperty(e,\"__esModule\",{value:!0}),e.HoverController=void 0;const g=!1;let h=o=class extends k.Disposable{constructor(O,B,W,V,K){super(),this._editor=O,this._instantiationService=B,this._openerService=W,this._languageService=V,this._keybindingService=K,this._listenersStore=new k.DisposableStore,this._hoverState={mouseDown:!1,contentHoverFocused:!1,activatedByDecoratorClick:!1},this._reactToEditorMouseMoveRunner=this._register(new s.RunOnceScheduler(()=>this._reactToEditorMouseMove(this._mouseMoveEvent),0)),this._hookListeners(),this._register(this._editor.onDidChangeConfiguration(F=>{F.hasChanged(60)&&(this._unhookListeners(),this._hookListeners())}))}static get(O){return O.getContribution(o.ID)}_hookListeners(){const O=this._editor.getOption(60);this._hoverSettings={enabled:O.enabled,sticky:O.sticky,hidingDelay:O.delay},O.enabled?(this._listenersStore.add(this._editor.onMouseDown(B=>this._onEditorMouseDown(B))),this._listenersStore.add(this._editor.onMouseUp(()=>this._onEditorMouseUp())),this._listenersStore.add(this._editor.onMouseMove(B=>this._onEditorMouseMove(B))),this._listenersStore.add(this._editor.onKeyDown(B=>this._onKeyDown(B)))):(this._listenersStore.add(this._editor.onMouseMove(B=>this._onEditorMouseMove(B))),this._listenersStore.add(this._editor.onKeyDown(B=>this._onKeyDown(B)))),this._listenersStore.add(this._editor.onMouseLeave(B=>this._onEditorMouseLeave(B))),this._listenersStore.add(this._editor.onDidChangeModel(()=>{this._cancelScheduler(),this._hideWidgets()})),this._listenersStore.add(this._editor.onDidChangeModelContent(()=>this._cancelScheduler())),this._listenersStore.add(this._editor.onDidScrollChange(B=>this._onEditorScrollChanged(B)))}_unhookListeners(){this._listenersStore.clear()}_cancelScheduler(){this._mouseMoveEvent=void 0,this._reactToEditorMouseMoveRunner.cancel()}_onEditorScrollChanged(O){(O.scrollTopChanged||O.scrollLeftChanged)&&this._hideWidgets()}_onEditorMouseDown(O){var B;this._hoverState.mouseDown=!0;const W=O.target;if(W.type===9&&W.detail===v.ContentHoverWidget.ID){this._hoverState.contentHoverFocused=!0;return}W.type===12&&W.detail===b.MarginHoverWidget.ID||(W.type!==12&&(this._hoverState.contentHoverFocused=!1),!(!((B=this._contentWidget)===null||B===void 0)&&B.widget.isResizing)&&this._hideWidgets())}_onEditorMouseUp(){this._hoverState.mouseDown=!1}_onEditorMouseLeave(O){var B,W;this._cancelScheduler();const V=O.event.browserEvent.relatedTarget;!((B=this._contentWidget)===null||B===void 0)&&B.widget.isResizing||!((W=this._contentWidget)===null||W===void 0)&&W.containsNode(V)||g||this._hideWidgets()}_isMouseOverWidget(O){var B,W,V,K,F;const q=O.target,ie=this._hoverSettings.sticky;return!!(ie&&q.type===9&&q.detail===v.ContentHoverWidget.ID||ie&&(!((B=this._contentWidget)===null||B===void 0)&&B.containsNode((W=O.event.browserEvent.view)===null||W===void 0?void 0:W.document.activeElement))&&!(!((K=(V=O.event.browserEvent.view)===null||V===void 0?void 0:V.getSelection())===null||K===void 0)&&K.isCollapsed)||!ie&&q.type===9&&q.detail===v.ContentHoverWidget.ID&&(!((F=this._contentWidget)===null||F===void 0)&&F.isColorPickerVisible)||ie&&q.type===12&&q.detail===b.MarginHoverWidget.ID)}_onEditorMouseMove(O){var B,W,V,K;if(this._mouseMoveEvent=O,!((B=this._contentWidget)===null||B===void 0)&&B.isFocused||!((W=this._contentWidget)===null||W===void 0)&&W.isResizing||this._hoverState.mouseDown&&this._hoverState.contentHoverFocused)return;const F=this._hoverSettings.sticky;if(F&&(!((V=this._contentWidget)===null||V===void 0)&&V.isVisibleFromKeyboard))return;if(this._isMouseOverWidget(O)){this._reactToEditorMouseMoveRunner.cancel();return}const ie=this._hoverSettings.hidingDelay;if(!((K=this._contentWidget)===null||K===void 0)&&K.isVisible&&F&&ie>0){this._reactToEditorMouseMoveRunner.isScheduled()||this._reactToEditorMouseMoveRunner.schedule(ie);return}this._reactToEditorMouseMove(O)}_reactToEditorMouseMove(O){var B,W,V,K;if(!O)return;const F=O.target,q=(B=F.element)===null||B===void 0?void 0:B.classList.contains(\"colorpicker-color-decoration\"),ie=this._editor.getOption(146),ae=this._hoverSettings.enabled,ne=this._hoverState.activatedByDecoratorClick;if(q&&(ie===\"click\"&&!ne||ie===\"hover\"&&!ae&&!g||ie===\"clickAndHover\"&&!ae&&!ne)||!q&&!ae&&!ne){this._hideWidgets();return}if(this._getOrCreateContentWidget().showsOrWillShow(O)){(W=this._glyphWidget)===null||W===void 0||W.hide();return}if(F.type===2&&F.position&&F.detail.glyphMarginLane){(V=this._contentWidget)===null||V===void 0||V.hide(),this._getOrCreateGlyphWidget().startShowingAt(F.position.lineNumber,F.detail.glyphMarginLane);return}if(F.type===3&&F.position){(K=this._contentWidget)===null||K===void 0||K.hide(),this._getOrCreateGlyphWidget().startShowingAt(F.position.lineNumber,\"lineNo\");return}g||this._hideWidgets()}_onKeyDown(O){var B;if(!this._editor.hasModel())return;const W=this._keybindingService.softDispatch(O,this._editor.getDomNode()),V=W.kind===1||W.kind===2&&W.commandId===\"editor.action.showHover\"&&((B=this._contentWidget)===null||B===void 0?void 0:B.isVisible);O.keyCode===5||O.keyCode===6||O.keyCode===57||O.keyCode===4||V||this._hideWidgets()}_hideWidgets(){var O,B,W;g||this._hoverState.mouseDown&&this._hoverState.contentHoverFocused&&(!((O=this._contentWidget)===null||O===void 0)&&O.isColorPickerVisible)||c.InlineSuggestionHintsContentWidget.dropDownVisible||(this._hoverState.activatedByDecoratorClick=!1,this._hoverState.contentHoverFocused=!1,(B=this._glyphWidget)===null||B===void 0||B.hide(),(W=this._contentWidget)===null||W===void 0||W.hide())}_getOrCreateContentWidget(){return this._contentWidget||(this._contentWidget=this._instantiationService.createInstance(v.ContentHoverController,this._editor)),this._contentWidget}_getOrCreateGlyphWidget(){return this._glyphWidget||(this._glyphWidget=new b.MarginHoverWidget(this._editor,this._languageService,this._openerService)),this._glyphWidget}showContentHover(O,B,W,V,K=!1){this._hoverState.activatedByDecoratorClick=K,this._getOrCreateContentWidget().startShowingAtRange(O,B,W,V)}focus(){var O;(O=this._contentWidget)===null||O===void 0||O.focus()}scrollUp(){var O;(O=this._contentWidget)===null||O===void 0||O.scrollUp()}scrollDown(){var O;(O=this._contentWidget)===null||O===void 0||O.scrollDown()}scrollLeft(){var O;(O=this._contentWidget)===null||O===void 0||O.scrollLeft()}scrollRight(){var O;(O=this._contentWidget)===null||O===void 0||O.scrollRight()}pageUp(){var O;(O=this._contentWidget)===null||O===void 0||O.pageUp()}pageDown(){var O;(O=this._contentWidget)===null||O===void 0||O.pageDown()}goToTop(){var O;(O=this._contentWidget)===null||O===void 0||O.goToTop()}goToBottom(){var O;(O=this._contentWidget)===null||O===void 0||O.goToBottom()}get isColorPickerVisible(){var O;return(O=this._contentWidget)===null||O===void 0?void 0:O.isColorPickerVisible}get isHoverVisible(){var O;return(O=this._contentWidget)===null||O===void 0?void 0:O.isVisible}dispose(){var O,B;super.dispose(),this._unhookListeners(),this._listenersStore.dispose(),(O=this._glyphWidget)===null||O===void 0||O.dispose(),(B=this._contentWidget)===null||B===void 0||B.dispose()}};e.HoverController=h,h.ID=\"editor.contrib.hover\",e.HoverController=h=o=ke([ge(1,a.IInstantiationService),ge(2,i.IOpenerService),ge(3,p.ILanguageService),ge(4,d.IKeybindingService)],h);var m;(function(x){x.NoAutoFocus=\"noAutoFocus\",x.FocusIfVisible=\"focusIfVisible\",x.AutoFocusImmediately=\"autoFocusImmediately\"})(m||(m={}));class C extends y.EditorAction{constructor(){super({id:\"editor.action.showHover\",label:l.localize(0,null),metadata:{description:\"Show or Focus Hover\",args:[{name:\"args\",schema:{type:\"object\",properties:{focus:{description:\"Controls if and when the hover should take focus upon being triggered by this action.\",enum:[m.NoAutoFocus,m.FocusIfVisible,m.AutoFocusImmediately],enumDescriptions:[l.localize(1,null),l.localize(2,null),l.localize(3,null)],default:m.FocusIfVisible}}}}]},alias:\"Show or Focus Hover\",precondition:void 0,kbOpts:{kbExpr:S.EditorContextKeys.editorTextFocus,primary:(0,L.KeyChord)(2089,2087),weight:100}})}run(O,B,W){if(!B.hasModel())return;const V=h.get(B);if(!V)return;const K=W?.focus;let F=m.FocusIfVisible;Object.values(m).includes(K)?F=K:typeof K==\"boolean\"&&K&&(F=m.AutoFocusImmediately);const q=ae=>{const ne=B.getPosition(),$=new E.Range(ne.lineNumber,ne.column,ne.lineNumber,ne.column);V.showContentHover($,1,1,ae)},ie=B.getOption(2)===2;V.isHoverVisible?F!==m.NoAutoFocus?V.focus():q(ie):q(ie||F===m.AutoFocusImmediately)}}class w extends y.EditorAction{constructor(){super({id:\"editor.action.showDefinitionPreviewHover\",label:l.localize(4,null),alias:\"Show Definition Preview Hover\",precondition:void 0})}run(O,B){const W=h.get(B);if(!W)return;const V=B.getPosition();if(!V)return;const K=new E.Range(V.lineNumber,V.column,V.lineNumber,V.column),F=_.GotoDefinitionAtPositionEditorContribution.get(B);if(!F)return;F.startFindDefinitionFromCursor(V).then(()=>{W.showContentHover(K,1,1,!0)})}}class D extends y.EditorAction{constructor(){super({id:\"editor.action.scrollUpHover\",label:l.localize(5,null),alias:\"Scroll Up Hover\",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:16,weight:100}})}run(O,B){const W=h.get(B);W&&W.scrollUp()}}class I extends y.EditorAction{constructor(){super({id:\"editor.action.scrollDownHover\",label:l.localize(6,null),alias:\"Scroll Down Hover\",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:18,weight:100}})}run(O,B){const W=h.get(B);W&&W.scrollDown()}}class T extends y.EditorAction{constructor(){super({id:\"editor.action.scrollLeftHover\",label:l.localize(7,null),alias:\"Scroll Left Hover\",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:15,weight:100}})}run(O,B){const W=h.get(B);W&&W.scrollLeft()}}class A extends y.EditorAction{constructor(){super({id:\"editor.action.scrollRightHover\",label:l.localize(8,null),alias:\"Scroll Right Hover\",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:17,weight:100}})}run(O,B){const W=h.get(B);W&&W.scrollRight()}}class P extends y.EditorAction{constructor(){super({id:\"editor.action.pageUpHover\",label:l.localize(9,null),alias:\"Page Up Hover\",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:11,secondary:[528],weight:100}})}run(O,B){const W=h.get(B);W&&W.pageUp()}}class N extends y.EditorAction{constructor(){super({id:\"editor.action.pageDownHover\",label:l.localize(10,null),alias:\"Page Down Hover\",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:12,secondary:[530],weight:100}})}run(O,B){const W=h.get(B);W&&W.pageDown()}}class M extends y.EditorAction{constructor(){super({id:\"editor.action.goToTopHover\",label:l.localize(11,null),alias:\"Go To Bottom Hover\",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:14,secondary:[2064],weight:100}})}run(O,B){const W=h.get(B);W&&W.goToTop()}}class R extends y.EditorAction{constructor(){super({id:\"editor.action.goToBottomHover\",label:l.localize(12,null),alias:\"Go To Bottom Hover\",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:13,secondary:[2066],weight:100}})}run(O,B){const W=h.get(B);W&&W.goToBottom()}}(0,y.registerEditorContribution)(h.ID,h,2),(0,y.registerEditorAction)(C),(0,y.registerEditorAction)(w),(0,y.registerEditorAction)(D),(0,y.registerEditorAction)(I),(0,y.registerEditorAction)(T),(0,y.registerEditorAction)(A),(0,y.registerEditorAction)(P),(0,y.registerEditorAction)(N),(0,y.registerEditorAction)(M),(0,y.registerEditorAction)(R),r.HoverParticipantRegistry.register(u.MarkdownHoverParticipant),r.HoverParticipantRegistry.register(f.MarkerHoverParticipant),(0,t.registerThemingParticipant)((x,O)=>{const B=x.getColor(n.editorHoverBorder);B&&(O.addRule(`.monaco-editor .monaco-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${B.transparent(.5)}; }`),O.addRule(`.monaco-editor .monaco-hover hr { border-top: 1px solid ${B.transparent(.5)}; }`),O.addRule(`.monaco-editor .monaco-hover hr { border-bottom: 0px solid ${B.transparent(.5)}; }`))})}),define(se[916],oe([1,0,2,16,5,375,376,385,101]),function(te,e,L,k,y,E,S,p,_){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ColorContribution=void 0;class v extends L.Disposable{constructor(a){super(),this._editor=a,this._register(a.onMouseDown(i=>this.onMouseDown(i)))}dispose(){super.dispose()}onMouseDown(a){const i=this._editor.getOption(146);if(i!==\"click\"&&i!==\"clickAndHover\")return;const n=a.target;if(n.type!==6||!n.detail.injectedText||n.detail.injectedText.options.attachedData!==E.ColorDecorationInjectedTextMarker||!n.range)return;const t=this._editor.getContribution(p.HoverController.ID);if(t&&!t.isColorPickerVisible){const r=new y.Range(n.range.startLineNumber,n.range.startColumn+1,n.range.endLineNumber,n.range.endColumn+1);t.showContentHover(r,1,0,!1,!0)}}}e.ColorContribution=v,v.ID=\"editor.contrib.colorContribution\",(0,k.registerEditorContribution)(v.ID,v,2),_.HoverParticipantRegistry.register(S.ColorHoverParticipant)}),define(se[386],oe([1,0,7,42,19,175,5,68,263,142,30,25,15,59,8,50]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.goToDefinitionWithLocation=e.showGoToContextMenu=void 0;async function u(c,d,s,l){var o;const g=c.get(p.ITextModelService),h=c.get(n.IContextMenuService),m=c.get(a.ICommandService),C=c.get(t.IInstantiationService),w=c.get(r.INotificationService);if(await l.item.resolve(y.CancellationToken.None),!l.part.location)return;const D=l.part.location,I=[],T=new Set(b.MenuRegistry.getMenuItems(b.MenuId.EditorContext).map(P=>(0,b.isIMenuItem)(P)?P.command.id:(0,E.generateUuid)()));for(const P of _.SymbolNavigationAction.all())T.has(P.desc.id)&&I.push(new k.Action(P.desc.id,b.MenuItemAction.label(P.desc,{renderShortTitle:!0}),void 0,!0,async()=>{const N=await g.createModelReference(D.uri);try{const M=new _.SymbolNavigationAnchor(N.object.textEditorModel,S.Range.getStartPosition(D.range)),R=l.item.anchor.range;await C.invokeFunction(P.runEditorCommand.bind(P),d,M,R)}finally{N.dispose()}}));if(l.part.command){const{command:P}=l.part;I.push(new k.Separator),I.push(new k.Action(P.id,P.title,void 0,!0,async()=>{var N;try{await m.executeCommand(P.id,...(N=P.arguments)!==null&&N!==void 0?N:[])}catch(M){w.notify({severity:r.Severity.Error,source:l.item.provider.displayName,message:M})}}))}const A=d.getOption(126);h.showContextMenu({domForShadowRoot:A&&(o=d.getDomNode())!==null&&o!==void 0?o:void 0,getAnchor:()=>{const P=L.getDomNodePagePosition(s);return{x:P.left,y:P.top+P.height+8}},getActions:()=>I,onHide:()=>{d.focus()},autoSelectFirstItem:!0})}e.showGoToContextMenu=u;async function f(c,d,s,l){const g=await c.get(p.ITextModelService).createModelReference(l.uri);await s.invokeWithinContext(async h=>{const m=d.hasSideBySideModifier,C=h.get(i.IContextKeyService),w=v.PeekContext.inPeekEditor.getValue(C),D=!m&&s.getOption(87)&&!w;return new _.DefinitionAction({openToSide:m,openInPeek:D,muteMessage:!0},{title:{value:\"\",original:\"\"},id:\"\",precondition:void 0}).run(h,new _.SymbolNavigationAnchor(g.object.textEditorModel,S.Range.getStartPosition(l.range)),S.Range.lift(l.range))}),g.dispose()}e.goToDefinitionWithLocation=f}),define(se[387],oe([1,0,7,13,14,19,12,2,53,20,22,167,127,36,74,5,31,41,38,79,18,68,188,333,386,25,45,8,50,29,23]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T){\"use strict\";var A;Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlayHintsController=e.RenderedInlayHintLabelPart=void 0;class P{constructor(){this._entries=new _.LRUCache(50)}get(W){const V=P._key(W);return this._entries.get(V)}set(W,V){const K=P._key(W);this._entries.set(K,V)}static _key(W){return`${W.uri.toString()}/${W.getVersionId()}`}}const N=(0,w.createDecorator)(\"IInlayHintsCache\");(0,C.registerSingleton)(N,P,1);class M{constructor(W,V){this.item=W,this.index=V}get part(){const W=this.item.hint.label;return typeof W==\"string\"?{label:W}:W[this.index]}}e.RenderedInlayHintLabelPart=M;class R{constructor(W,V){this.part=W,this.hasTriggerModifier=V}}let x=A=class{static get(W){var V;return(V=W.getContribution(A.ID))!==null&&V!==void 0?V:void 0}constructor(W,V,K,F,q,ie,ae){this._editor=W,this._languageFeaturesService=V,this._inlayHintsCache=F,this._commandService=q,this._notificationService=ie,this._instaService=ae,this._disposables=new p.DisposableStore,this._sessionDisposables=new p.DisposableStore,this._decorationsMetadata=new Map,this._ruleFactory=new a.DynamicCssRules(this._editor),this._activeRenderMode=0,this._debounceInfo=K.for(V.inlayHintsProvider,\"InlayHint\",{min:25}),this._disposables.add(V.inlayHintsProvider.onDidChange(()=>this._update())),this._disposables.add(W.onDidChangeModel(()=>this._update())),this._disposables.add(W.onDidChangeModelLanguage(()=>this._update())),this._disposables.add(W.onDidChangeConfiguration(ne=>{ne.hasChanged(139)&&this._update()})),this._update()}dispose(){this._sessionDisposables.dispose(),this._removeAllDecorations(),this._disposables.dispose()}_update(){this._sessionDisposables.clear(),this._removeAllDecorations();const W=this._editor.getOption(139);if(W.enabled===\"off\")return;const V=this._editor.getModel();if(!V||!this._languageFeaturesService.inlayHintsProvider.has(V))return;if(W.enabled===\"on\")this._activeRenderMode=0;else{let ae,ne;W.enabled===\"onUnlessPressed\"?(ae=0,ne=1):(ae=1,ne=0),this._activeRenderMode=ae,this._sessionDisposables.add(L.ModifierKeyEmitter.getInstance().event($=>{if(!this._editor.hasModel())return;const J=$.altKey&&$.ctrlKey&&!($.shiftKey||$.metaKey)?ne:ae;if(J!==this._activeRenderMode){this._activeRenderMode=J;const Q=this._editor.getModel(),re=this._copyInlayHintsWithCurrentAnchor(Q);this._updateHintsDecorators([Q.getFullModelRange()],re),ie.schedule(0)}}))}const K=this._inlayHintsCache.get(V);K&&this._updateHintsDecorators([V.getFullModelRange()],K),this._sessionDisposables.add((0,p.toDisposable)(()=>{V.isDisposed()||this._cacheHintsForFastRestore(V)}));let F;const q=new Set,ie=new y.RunOnceScheduler(async()=>{const ae=Date.now();F?.dispose(!0),F=new E.CancellationTokenSource;const ne=V.onWillDispose(()=>F?.cancel());try{const $=F.token,J=await g.InlayHintsFragments.create(this._languageFeaturesService.inlayHintsProvider,V,this._getHintsRanges(),$);if(ie.delay=this._debounceInfo.update(V,Date.now()-ae),$.isCancellationRequested){J.dispose();return}for(const Q of J.provider)typeof Q.onDidChangeInlayHints==\"function\"&&!q.has(Q)&&(q.add(Q),this._sessionDisposables.add(Q.onDidChangeInlayHints(()=>{ie.isScheduled()||ie.schedule()})));this._sessionDisposables.add(J),this._updateHintsDecorators(J.ranges,J.items),this._cacheHintsForFastRestore(V)}catch($){(0,S.onUnexpectedError)($)}finally{F.dispose(),ne.dispose()}},this._debounceInfo.get(V));this._sessionDisposables.add(ie),this._sessionDisposables.add((0,p.toDisposable)(()=>F?.dispose(!0))),ie.schedule(0),this._sessionDisposables.add(this._editor.onDidScrollChange(ae=>{(ae.scrollTopChanged||!ie.isScheduled())&&ie.schedule()})),this._sessionDisposables.add(this._editor.onDidChangeModelContent(ae=>{F?.cancel();const ne=Math.max(ie.delay,1250);ie.schedule(ne)})),this._sessionDisposables.add(this._installDblClickGesture(()=>ie.schedule(0))),this._sessionDisposables.add(this._installLinkGesture()),this._sessionDisposables.add(this._installContextMenu())}_installLinkGesture(){const W=new p.DisposableStore,V=W.add(new o.ClickLinkGesture(this._editor)),K=new p.DisposableStore;return W.add(K),W.add(V.onMouseMoveOrRelevantKeyDown(F=>{const[q]=F,ie=this._getInlayHintLabelPart(q),ae=this._editor.getModel();if(!ie||!ae){K.clear();return}const ne=new E.CancellationTokenSource;K.add((0,p.toDisposable)(()=>ne.dispose(!0))),ie.item.resolve(ne.token),this._activeInlayHintPart=ie.part.command||ie.part.location?new R(ie,q.hasTriggerModifier):void 0;const $=ae.validatePosition(ie.item.hint.position).lineNumber,J=new r.Range($,1,$,ae.getLineMaxColumn($)),Q=this._getInlineHintsForRange(J);this._updateHintsDecorators([J],Q),K.add((0,p.toDisposable)(()=>{this._activeInlayHintPart=void 0,this._updateHintsDecorators([J],Q)}))})),W.add(V.onCancel(()=>K.clear())),W.add(V.onExecute(async F=>{const q=this._getInlayHintLabelPart(F);if(q){const ie=q.part;ie.location?this._instaService.invokeFunction(h.goToDefinitionWithLocation,F,this._editor,ie.location):u.Command.is(ie.command)&&await this._invokeCommand(ie.command,q.item)}})),W}_getInlineHintsForRange(W){const V=new Set;for(const K of this._decorationsMetadata.values())W.containsRange(K.item.anchor.range)&&V.add(K.item);return Array.from(V)}_installDblClickGesture(W){return this._editor.onMouseUp(async V=>{if(V.event.detail!==2)return;const K=this._getInlayHintLabelPart(V);if(K&&(V.event.preventDefault(),await K.item.resolve(E.CancellationToken.None),(0,k.isNonEmptyArray)(K.item.hint.textEdits))){const F=K.item.hint.textEdits.map(q=>t.EditOperation.replace(r.Range.lift(q.range),q.text));this._editor.executeEdits(\"inlayHint.default\",F),W()}})}_installContextMenu(){return this._editor.onContextMenu(async W=>{if(!(W.event.target instanceof HTMLElement))return;const V=this._getInlayHintLabelPart(W);V&&await this._instaService.invokeFunction(h.showGoToContextMenu,this._editor,W.event.target,V)})}_getInlayHintLabelPart(W){var V;if(W.target.type!==6)return;const K=(V=W.target.detail.injectedText)===null||V===void 0?void 0:V.options;if(K instanceof c.ModelDecorationInjectedTextOptions&&K?.attachedData instanceof M)return K.attachedData}async _invokeCommand(W,V){var K;try{await this._commandService.executeCommand(W.id,...(K=W.arguments)!==null&&K!==void 0?K:[])}catch(F){this._notificationService.notify({severity:D.Severity.Error,source:V.provider.displayName,message:F})}}_cacheHintsForFastRestore(W){const V=this._copyInlayHintsWithCurrentAnchor(W);this._inlayHintsCache.set(W,V)}_copyInlayHintsWithCurrentAnchor(W){const V=new Map;for(const[K,F]of this._decorationsMetadata){if(V.has(F.item))continue;const q=W.getDecorationRange(K);if(q){const ie=new g.InlayHintAnchor(q,F.item.anchor.direction),ae=F.item.with({anchor:ie});V.set(F.item,ae)}}return Array.from(V.values())}_getHintsRanges(){const V=this._editor.getModel(),K=this._editor.getVisibleRangesPlusViewportAboveBelow(),F=[];for(const q of K.sort(r.Range.compareRangesUsingStarts)){const ie=V.validateRange(new r.Range(q.startLineNumber-30,q.startColumn,q.endLineNumber+30,q.endColumn));F.length===0||!r.Range.areIntersectingOrTouching(F[F.length-1],ie)?F.push(ie):F[F.length-1]=r.Range.plusRange(F[F.length-1],ie)}return F}_updateHintsDecorators(W,V){var K,F;const q=[],ie=(X,U,G,z,H)=>{const Y={content:G,inlineClassNameAffectsLetterSpacing:!0,inlineClassName:U.className,cursorStops:z,attachedData:H};q.push({item:X,classNameRef:U,decoration:{range:X.anchor.range,options:{description:\"InlayHint\",showIfCollapsed:X.anchor.range.isEmpty(),collapseOnReplaceEdit:!X.anchor.range.isEmpty(),stickiness:0,[X.anchor.direction]:this._activeRenderMode===0?Y:void 0}}})},ae=(X,U)=>{const G=this._ruleFactory.createClassNameRef({width:`${ne/3|0}px`,display:\"inline-block\"});ie(X,G,\"\\u200A\",U?f.InjectedTextCursorStops.Right:f.InjectedTextCursorStops.None)},{fontSize:ne,fontFamily:$,padding:J,isUniform:Q}=this._getLayoutInfo(),re=\"--code-editorInlayHintsFontFamily\";this._editor.getContainerDomNode().style.setProperty(re,$);let de={line:0,totalLen:0};for(const X of V){if(de.line!==X.anchor.range.startLineNumber&&(de={line:X.anchor.range.startLineNumber,totalLen:0}),de.totalLen>A._MAX_LABEL_LEN)continue;X.hint.paddingLeft&&ae(X,!1);const U=typeof X.hint.label==\"string\"?[{label:X.hint.label}]:X.hint.label;for(let G=0;G<U.length;G++){const z=U[G],H=G===0,Y=G===U.length-1,j={fontSize:`${ne}px`,fontFamily:`var(${re}), ${n.EDITOR_FONT_DEFAULTS.fontFamily}`,verticalAlign:Q?\"baseline\":\"middle\",unicodeBidi:\"isolate\"};(0,k.isNonEmptyArray)(X.hint.textEdits)&&(j.cursor=\"default\"),this._fillInColors(j,X.hint),(z.command||z.location)&&((K=this._activeInlayHintPart)===null||K===void 0?void 0:K.part.item)===X&&this._activeInlayHintPart.part.index===G&&(j.textDecoration=\"underline\",this._activeInlayHintPart.hasTriggerModifier&&(j.color=(0,T.themeColorFromId)(I.editorActiveLinkForeground),j.cursor=\"pointer\")),J&&(H&&Y?(j.padding=`1px ${Math.max(1,ne/4)|0}px`,j.borderRadius=`${ne/4|0}px`):H?(j.padding=`1px 0 1px ${Math.max(1,ne/4)|0}px`,j.borderRadius=`${ne/4|0}px 0 0 ${ne/4|0}px`):Y?(j.padding=`1px ${Math.max(1,ne/4)|0}px 1px 0`,j.borderRadius=`0 ${ne/4|0}px ${ne/4|0}px 0`):j.padding=\"1px 0 1px 0\");let Z=z.label;de.totalLen+=Z.length;let ee=!1;const le=de.totalLen-A._MAX_LABEL_LEN;if(le>0&&(Z=Z.slice(0,-le)+\"\\u2026\",ee=!0),ie(X,this._ruleFactory.createClassNameRef(j),O(Z),Y&&!X.hint.paddingRight?f.InjectedTextCursorStops.Right:f.InjectedTextCursorStops.None,new M(X,G)),ee)break}if(X.hint.paddingRight&&ae(X,!0),q.length>A._MAX_DECORATORS)break}const he=[];for(const[X,U]of this._decorationsMetadata){const G=(F=this._editor.getModel())===null||F===void 0?void 0:F.getDecorationRange(X);G&&W.some(z=>z.containsRange(G))&&(he.push(X),U.classNameRef.dispose(),this._decorationsMetadata.delete(X))}const me=i.StableEditorScrollState.capture(this._editor);this._editor.changeDecorations(X=>{const U=X.deltaDecorations(he,q.map(G=>G.decoration));for(let G=0;G<U.length;G++){const z=q[G];this._decorationsMetadata.set(U[G],z)}}),me.restore(this._editor)}_fillInColors(W,V){V.kind===u.InlayHintKind.Parameter?(W.backgroundColor=(0,T.themeColorFromId)(I.editorInlayHintParameterBackground),W.color=(0,T.themeColorFromId)(I.editorInlayHintParameterForeground)):V.kind===u.InlayHintKind.Type?(W.backgroundColor=(0,T.themeColorFromId)(I.editorInlayHintTypeBackground),W.color=(0,T.themeColorFromId)(I.editorInlayHintTypeForeground)):(W.backgroundColor=(0,T.themeColorFromId)(I.editorInlayHintBackground),W.color=(0,T.themeColorFromId)(I.editorInlayHintForeground))}_getLayoutInfo(){const W=this._editor.getOption(139),V=W.padding,K=this._editor.getOption(52),F=this._editor.getOption(49);let q=W.fontSize;(!q||q<5||q>K)&&(q=K);const ie=W.fontFamily||F;return{fontSize:q,fontFamily:ie,padding:V,isUniform:!V&&ie===F&&q===K}}_removeAllDecorations(){this._editor.removeDecorations(Array.from(this._decorationsMetadata.keys()));for(const W of this._decorationsMetadata.values())W.classNameRef.dispose();this._decorationsMetadata.clear()}};e.InlayHintsController=x,x.ID=\"editor.contrib.InlayHints\",x._MAX_DECORATORS=1500,x._MAX_LABEL_LEN=43,e.InlayHintsController=x=A=ke([ge(1,s.ILanguageFeaturesService),ge(2,d.ILanguageFeatureDebounceService),ge(3,N),ge(4,m.ICommandService),ge(5,D.INotificationService),ge(6,w.IInstantiationService)],x);function O(B){const W=\"\\xA0\";return B.replace(/[ \\t]/g,W)}m.CommandsRegistry.registerCommand(\"_executeInlayHintProvider\",async(B,...W)=>{const[V,K]=W;(0,v.assertType)(b.URI.isUri(V)),(0,v.assertType)(r.Range.isIRange(K));const{inlayHintsProvider:F}=B.get(s.ILanguageFeaturesService),q=await B.get(l.ITextModelService).createModelReference(V);try{const ie=await g.InlayHintsFragments.create(F,q.object.textEditorModel,[r.Range.lift(K)],E.CancellationToken.None),ae=ie.items.map(ne=>ne.hint);return setTimeout(()=>ie.dispose(),0),ae}finally{q.dispose()}})}),define(se[917],oe([1,0,14,58,10,38,101,43,68,363,253,387,27,57,18,692,17,333,13]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlayHintsHover=void 0;class d extends S.HoverForeignElementAnchor{constructor(o,g,h,m){super(10,g,o.item.anchor.range,h,m,!0),this.part=o}}let s=class extends b.MarkdownHoverParticipant{constructor(o,g,h,m,C,w){super(o,g,h,m,w),this._resolverService=C,this.hoverOrdinal=6}suggestHoverAnchor(o){var g;if(!a.InlayHintsController.get(this._editor)||o.target.type!==6)return null;const m=(g=o.target.detail.injectedText)===null||g===void 0?void 0:g.options;return m instanceof E.ModelDecorationInjectedTextOptions&&m.attachedData instanceof a.RenderedInlayHintLabelPart?new d(m.attachedData,this,o.event.posx,o.event.posy):null}computeSync(){return[]}computeAsync(o,g,h){return o instanceof d?new L.AsyncIterableObject(async m=>{const{part:C}=o;if(await C.item.resolve(h),h.isCancellationRequested)return;let w;typeof C.item.hint.tooltip==\"string\"?w=new k.MarkdownString().appendText(C.item.hint.tooltip):C.item.hint.tooltip&&(w=C.item.hint.tooltip),w&&m.emitOne(new b.MarkdownHover(this,o.range,[w],!1,0)),(0,c.isNonEmptyArray)(C.item.hint.textEdits)&&m.emitOne(new b.MarkdownHover(this,o.range,[new k.MarkdownString().appendText((0,r.localize)(0,null))],!1,10001));let D;if(typeof C.part.tooltip==\"string\"?D=new k.MarkdownString().appendText(C.part.tooltip):C.part.tooltip&&(D=C.part.tooltip),D&&m.emitOne(new b.MarkdownHover(this,o.range,[D],!1,1)),C.part.location||C.part.command){let T;const P=this._editor.getOption(77)===\"altKey\"?u.isMacintosh?(0,r.localize)(1,null):(0,r.localize)(2,null):u.isMacintosh?(0,r.localize)(3,null):(0,r.localize)(4,null);C.part.location&&C.part.command?T=new k.MarkdownString().appendText((0,r.localize)(5,null,P)):C.part.location?T=new k.MarkdownString().appendText((0,r.localize)(6,null,P)):C.part.command&&(T=new k.MarkdownString(`[${(0,r.localize)(7,null)}](${(0,f.asCommandLink)(C.part.command)} \"${C.part.command.title}\") (${P})`,{isTrusted:!0})),T&&m.emitOne(new b.MarkdownHover(this,o.range,[T],!1,1e4))}const I=await this._resolveInlayHintLabelPartHover(C,h);for await(const T of I)m.emitOne(T)}):L.AsyncIterableObject.EMPTY}async _resolveInlayHintLabelPartHover(o,g){if(!o.part.location)return L.AsyncIterableObject.EMPTY;const{uri:h,range:m}=o.part.location,C=await this._resolverService.createModelReference(h);try{const w=C.object.textEditorModel;return this._languageFeaturesService.hoverProvider.has(w)?(0,v.getHover)(this._languageFeaturesService.hoverProvider,w,new y.Position(m.startLineNumber,m.startColumn),g).filter(D=>!(0,k.isEmptyMarkdownString)(D.hover.contents)).map(D=>new b.MarkdownHover(this,o.item.anchor.range,D.hover.contents,!1,2+D.ordinal)):L.AsyncIterableObject.EMPTY}finally{C.dispose()}}};e.InlayHintsHover=s,e.InlayHintsHover=s=ke([ge(1,p.ILanguageService),ge(2,n.IOpenerService),ge(3,i.IConfigurationService),ge(4,_.ITextModelService),ge(5,t.ILanguageFeaturesService)],s)}),define(se[918],oe([1,0,16,101,387,917]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),(0,L.registerEditorContribution)(y.InlayHintsController.ID,y.InlayHintsController,1),k.HoverParticipantRegistry.register(E.InlayHintsHover)}),define(se[388],oe([1,0,2,18,908,907,8,59,30,15,21,188,5,252,386,10,19,32,79,7,310,67,261,302]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g){\"use strict\";var h;Object.defineProperty(e,\"__esModule\",{value:!0}),e.StickyScrollController=void 0;let m=h=class extends L.Disposable{constructor(w,D,I,T,A,P,N){super(),this._editor=w,this._contextMenuService=D,this._languageFeaturesService=I,this._instaService=T,this._contextKeyService=N,this._sessionStore=new L.DisposableStore,this._foldingModel=null,this._maxStickyLines=Number.MAX_SAFE_INTEGER,this._candidateDefinitionsLength=-1,this._focusedStickyElementIndex=-1,this._enabled=!1,this._focused=!1,this._positionRevealed=!1,this._onMouseDown=!1,this._endLineNumbers=[],this._showEndForLine=null,this._stickyScrollWidget=new y.StickyScrollWidget(this._editor),this._stickyLineCandidateProvider=new E.StickyLineCandidateProvider(this._editor,I,A),this._register(this._stickyScrollWidget),this._register(this._stickyLineCandidateProvider),this._widgetState=new y.StickyScrollWidgetState([],[],0),this._readConfiguration();const M=this._stickyScrollWidget.getDomNode();this._register(this._editor.onDidChangeConfiguration(x=>{(x.hasChanged(114)||x.hasChanged(72)||x.hasChanged(66)||x.hasChanged(109))&&this._readConfiguration()})),this._register(d.addDisposableListener(M,d.EventType.CONTEXT_MENU,async x=>{this._onContextMenu(d.getWindow(M),x)})),this._stickyScrollFocusedContextKey=b.EditorContextKeys.stickyScrollFocused.bindTo(this._contextKeyService),this._stickyScrollVisibleContextKey=b.EditorContextKeys.stickyScrollVisible.bindTo(this._contextKeyService);const R=this._register(d.trackFocus(M));this._register(R.onDidBlur(x=>{this._positionRevealed===!1&&M.clientHeight===0?(this._focusedStickyElementIndex=-1,this.focus()):this._disposeFocusStickyScrollStore()})),this._register(R.onDidFocus(x=>{this.focus()})),this._registerMouseListeners(),this._register(d.addDisposableListener(M,d.EventType.MOUSE_DOWN,x=>{this._onMouseDown=!0}))}static get(w){return w.getContribution(h.ID)}_disposeFocusStickyScrollStore(){var w;this._stickyScrollFocusedContextKey.set(!1),(w=this._focusDisposableStore)===null||w===void 0||w.dispose(),this._focused=!1,this._positionRevealed=!1,this._onMouseDown=!1}focus(){if(this._onMouseDown){this._onMouseDown=!1,this._editor.focus();return}this._stickyScrollFocusedContextKey.get()!==!0&&(this._focused=!0,this._focusDisposableStore=new L.DisposableStore,this._stickyScrollFocusedContextKey.set(!0),this._focusedStickyElementIndex=this._stickyScrollWidget.lineNumbers.length-1,this._stickyScrollWidget.focusLineWithIndex(this._focusedStickyElementIndex))}focusNext(){this._focusedStickyElementIndex<this._stickyScrollWidget.lineNumberCount-1&&this._focusNav(!0)}focusPrevious(){this._focusedStickyElementIndex>0&&this._focusNav(!1)}selectEditor(){this._editor.focus()}_focusNav(w){this._focusedStickyElementIndex=w?this._focusedStickyElementIndex+1:this._focusedStickyElementIndex-1,this._stickyScrollWidget.focusLineWithIndex(this._focusedStickyElementIndex)}goToFocused(){const w=this._stickyScrollWidget.lineNumbers;this._disposeFocusStickyScrollStore(),this._revealPosition({lineNumber:w[this._focusedStickyElementIndex],column:1})}_revealPosition(w){this._reveaInEditor(w,()=>this._editor.revealPosition(w))}_revealLineInCenterIfOutsideViewport(w){this._reveaInEditor(w,()=>this._editor.revealLineInCenterIfOutsideViewport(w.lineNumber,0))}_reveaInEditor(w,D){this._focused&&this._disposeFocusStickyScrollStore(),this._positionRevealed=!0,D(),this._editor.setSelection(i.Range.fromPositions(w)),this._editor.focus()}_registerMouseListeners(){const w=this._register(new L.DisposableStore),D=this._register(new a.ClickLinkGesture(this._editor,{extractLineNumberFromMouseEvent:A=>{const P=this._stickyScrollWidget.getEditorPositionFromNode(A.target.element);return P?P.lineNumber:0}})),I=A=>{if(!this._editor.hasModel()||A.target.type!==12||A.target.detail!==this._stickyScrollWidget.getId())return null;const P=A.target.element;if(!P||P.innerText!==P.innerHTML)return null;const N=this._stickyScrollWidget.getEditorPositionFromNode(P);return N?{range:new i.Range(N.lineNumber,N.column,N.lineNumber,N.column+P.innerText.length),textElement:P}:null},T=this._stickyScrollWidget.getDomNode();this._register(d.addStandardDisposableListener(T,d.EventType.CLICK,A=>{if(A.ctrlKey||A.altKey||A.metaKey||!A.leftButton)return;if(A.shiftKey){const R=this._stickyScrollWidget.getLineIndexFromChildDomNode(A.target);if(R===null)return;const x=new r.Position(this._endLineNumbers[R],1);this._revealLineInCenterIfOutsideViewport(x);return}if(this._stickyScrollWidget.isInFoldingIconDomNode(A.target)){const R=this._stickyScrollWidget.getLineNumberFromChildDomNode(A.target);this._toggleFoldingRegionForLine(R);return}if(!this._stickyScrollWidget.isInStickyLine(A.target))return;let M=this._stickyScrollWidget.getEditorPositionFromNode(A.target);if(!M){const R=this._stickyScrollWidget.getLineNumberFromChildDomNode(A.target);if(R===null)return;M=new r.Position(R,1)}this._revealPosition(M)})),this._register(d.addStandardDisposableListener(T,d.EventType.MOUSE_MOVE,A=>{if(A.shiftKey){const P=this._stickyScrollWidget.getLineIndexFromChildDomNode(A.target);if(P===null||this._showEndForLine!==null&&this._showEndForLine===P)return;this._showEndForLine=P,this._renderStickyScroll();return}this._showEndForLine!==null&&(this._showEndForLine=null,this._renderStickyScroll())})),this._register(d.addDisposableListener(T,d.EventType.MOUSE_LEAVE,A=>{this._showEndForLine!==null&&(this._showEndForLine=null,this._renderStickyScroll())})),this._register(D.onMouseMoveOrRelevantKeyDown(([A,P])=>{const N=I(A);if(!N||!A.hasTriggerModifier||!this._editor.hasModel()){w.clear();return}const{range:M,textElement:R}=N;if(!M.equalsRange(this._stickyRangeProjectedOnEditor))this._stickyRangeProjectedOnEditor=M,w.clear();else if(R.style.textDecoration===\"underline\")return;const x=new u.CancellationTokenSource;w.add((0,L.toDisposable)(()=>x.dispose(!0)));let O;(0,n.getDefinitionsAtPosition)(this._languageFeaturesService.definitionProvider,this._editor.getModel(),new r.Position(M.startLineNumber,M.startColumn+1),x.token).then(B=>{if(!x.token.isCancellationRequested)if(B.length!==0){this._candidateDefinitionsLength=B.length;const W=R;O!==W?(w.clear(),O=W,O.style.textDecoration=\"underline\",w.add((0,L.toDisposable)(()=>{O.style.textDecoration=\"none\"}))):O||(O=W,O.style.textDecoration=\"underline\",w.add((0,L.toDisposable)(()=>{O.style.textDecoration=\"none\"})))}else w.clear()})})),this._register(D.onCancel(()=>{w.clear()})),this._register(D.onExecute(async A=>{if(A.target.type!==12||A.target.detail!==this._stickyScrollWidget.getId())return;const P=this._stickyScrollWidget.getEditorPositionFromNode(A.target.element);P&&(!this._editor.hasModel()||!this._stickyRangeProjectedOnEditor||(this._candidateDefinitionsLength>1&&(this._focused&&this._disposeFocusStickyScrollStore(),this._revealPosition({lineNumber:P.lineNumber,column:1})),this._instaService.invokeFunction(t.goToDefinitionWithLocation,A,this._editor,{uri:this._editor.getModel().uri,range:this._stickyRangeProjectedOnEditor})))}))}_onContextMenu(w,D){const I=new l.StandardMouseEvent(w,D);this._contextMenuService.showContextMenu({menuId:_.MenuId.StickyScrollContext,getAnchor:()=>I})}_toggleFoldingRegionForLine(w){if(!this._foldingModel||w===null)return;const D=this._stickyScrollWidget.getRenderedStickyLine(w),I=D?.foldingIcon;if(!I)return;(0,g.toggleCollapseState)(this._foldingModel,Number.MAX_VALUE,[w]),I.isCollapsed=!I.isCollapsed;const T=(I.isCollapsed?this._editor.getTopForLineNumber(I.foldingEndLine):this._editor.getTopForLineNumber(I.foldingStartLine))-this._editor.getOption(66)*D.index+1;this._editor.setScrollTop(T),this._renderStickyScroll(w)}_readConfiguration(){const w=this._editor.getOption(114);if(w.enabled===!1){this._editor.removeOverlayWidget(this._stickyScrollWidget),this._sessionStore.clear(),this._enabled=!1;return}else w.enabled&&!this._enabled&&(this._editor.addOverlayWidget(this._stickyScrollWidget),this._sessionStore.add(this._editor.onDidScrollChange(I=>{I.scrollTopChanged&&(this._showEndForLine=null,this._renderStickyScroll())})),this._sessionStore.add(this._editor.onDidLayoutChange(()=>this._onDidResize())),this._sessionStore.add(this._editor.onDidChangeModelTokens(I=>this._onTokensChange(I))),this._sessionStore.add(this._stickyLineCandidateProvider.onDidChangeStickyScroll(()=>{this._showEndForLine=null,this._renderStickyScroll()})),this._enabled=!0);this._editor.getOption(67).renderType===2&&this._sessionStore.add(this._editor.onDidChangeCursorPosition(()=>{this._showEndForLine=null,this._renderStickyScroll(0)}))}_needsUpdate(w){const D=this._stickyScrollWidget.getCurrentLines();for(const I of D)for(const T of w.ranges)if(I>=T.fromLineNumber&&I<=T.toLineNumber)return!0;return!1}_onTokensChange(w){this._needsUpdate(w)&&this._renderStickyScroll(0)}_onDidResize(){const D=this._editor.getLayoutInfo().height/this._editor.getOption(66);this._maxStickyLines=Math.round(D*.25)}async _renderStickyScroll(w){var D,I;const T=this._editor.getModel();if(!T||T.isTooLargeForTokenization()){this._foldingModel=null,this._stickyScrollWidget.setState(void 0,null);return}const A=this._stickyLineCandidateProvider.getVersionId();if(A===void 0||A===T.getVersionId())if(this._foldingModel=(I=await((D=o.FoldingController.get(this._editor))===null||D===void 0?void 0:D.getFoldingModel()))!==null&&I!==void 0?I:null,this._widgetState=this.findScrollWidgetState(),this._stickyScrollVisibleContextKey.set(this._widgetState.startLineNumbers.length!==0),!this._focused)this._stickyScrollWidget.setState(this._widgetState,this._foldingModel,w);else if(this._focusedStickyElementIndex===-1)this._stickyScrollWidget.setState(this._widgetState,this._foldingModel,w),this._focusedStickyElementIndex=this._stickyScrollWidget.lineNumberCount-1,this._focusedStickyElementIndex!==-1&&this._stickyScrollWidget.focusLineWithIndex(this._focusedStickyElementIndex);else{const P=this._stickyScrollWidget.lineNumbers[this._focusedStickyElementIndex];this._stickyScrollWidget.setState(this._widgetState,this._foldingModel,w),this._stickyScrollWidget.lineNumberCount===0?this._focusedStickyElementIndex=-1:(this._stickyScrollWidget.lineNumbers.includes(P)||(this._focusedStickyElementIndex=this._stickyScrollWidget.lineNumberCount-1),this._stickyScrollWidget.focusLineWithIndex(this._focusedStickyElementIndex))}}findScrollWidgetState(){const w=this._editor.getOption(66),D=Math.min(this._maxStickyLines,this._editor.getOption(114).maxLineCount),I=this._editor.getScrollTop();let T=0;const A=[],P=[],N=this._editor.getVisibleRanges();if(N.length!==0){const M=new s.StickyRange(N[0].startLineNumber,N[N.length-1].endLineNumber),R=this._stickyLineCandidateProvider.getCandidateStickyLinesIntersecting(M);for(const x of R){const O=x.startLineNumber,B=x.endLineNumber,W=x.nestingDepth;if(B-O>0){const V=(W-1)*w,K=W*w,F=this._editor.getBottomForLineNumber(O)-I,q=this._editor.getTopForLineNumber(B)-I,ie=this._editor.getBottomForLineNumber(B)-I;if(V>q&&V<=ie){A.push(O),P.push(B+1),T=ie-K;break}else K>F&&K<=ie&&(A.push(O),P.push(B+1));if(A.length===D)break}}}return this._endLineNumbers=P,new y.StickyScrollWidgetState(A,P,T,this._showEndForLine)}dispose(){super.dispose(),this._sessionStore.dispose()}};e.StickyScrollController=m,m.ID=\"store.contrib.stickyScrollController\",e.StickyScrollController=m=h=ke([ge(1,p.IContextMenuService),ge(2,k.ILanguageFeaturesService),ge(3,S.IInstantiationService),ge(4,f.ILanguageConfigurationService),ge(5,c.ILanguageFeatureDebounceService),ge(6,v.IContextKeyService)],m)}),define(se[919],oe([1,0,16,715,757,30,27,15,21,388]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SelectEditor=e.GoToStickyScrollLine=e.SelectPreviousStickyScrollLine=e.SelectNextStickyScrollLine=e.FocusStickyScroll=e.ToggleStickyScroll=void 0;class b extends E.Action2{constructor(){super({id:\"editor.action.toggleStickyScroll\",title:{value:(0,k.localize)(0,null),mnemonicTitle:(0,k.localize)(1,null),original:\"Toggle Editor Sticky Scroll\"},category:y.Categories.View,toggled:{condition:p.ContextKeyExpr.equals(\"config.editor.stickyScroll.enabled\",!0),title:(0,k.localize)(2,null),mnemonicTitle:(0,k.localize)(3,null)},menu:[{id:E.MenuId.CommandPalette},{id:E.MenuId.MenubarAppearanceMenu,group:\"4_editor\",order:3},{id:E.MenuId.StickyScrollContext}]})}async run(c){const d=c.get(S.IConfigurationService),s=!d.getValue(\"editor.stickyScroll.enabled\");return d.updateValue(\"editor.stickyScroll.enabled\",s)}}e.ToggleStickyScroll=b;const a=100;class i extends L.EditorAction2{constructor(){super({id:\"editor.action.focusStickyScroll\",title:{value:(0,k.localize)(4,null),mnemonicTitle:(0,k.localize)(5,null),original:\"Focus Sticky Scroll\"},precondition:p.ContextKeyExpr.and(p.ContextKeyExpr.has(\"config.editor.stickyScroll.enabled\"),_.EditorContextKeys.stickyScrollVisible),menu:[{id:E.MenuId.CommandPalette}]})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.focus()}}e.FocusStickyScroll=i;class n extends L.EditorAction2{constructor(){super({id:\"editor.action.selectNextStickyScrollLine\",title:{value:(0,k.localize)(6,null),original:\"Select next sticky scroll line\"},precondition:_.EditorContextKeys.stickyScrollFocused.isEqualTo(!0),keybinding:{weight:a,primary:18}})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.focusNext()}}e.SelectNextStickyScrollLine=n;class t extends L.EditorAction2{constructor(){super({id:\"editor.action.selectPreviousStickyScrollLine\",title:{value:(0,k.localize)(7,null),original:\"Select previous sticky scroll line\"},precondition:_.EditorContextKeys.stickyScrollFocused.isEqualTo(!0),keybinding:{weight:a,primary:16}})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.focusPrevious()}}e.SelectPreviousStickyScrollLine=t;class r extends L.EditorAction2{constructor(){super({id:\"editor.action.goToFocusedStickyScrollLine\",title:{value:(0,k.localize)(8,null),original:\"Go to focused sticky scroll line\"},precondition:_.EditorContextKeys.stickyScrollFocused.isEqualTo(!0),keybinding:{weight:a,primary:3}})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.goToFocused()}}e.GoToStickyScrollLine=r;class u extends L.EditorAction2{constructor(){super({id:\"editor.action.selectEditor\",title:{value:(0,k.localize)(9,null),original:\"Select Editor\"},precondition:_.EditorContextKeys.stickyScrollFocused.isEqualTo(!0),keybinding:{weight:a,primary:9}})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.selectEditor()}}e.SelectEditor=u}),define(se[920],oe([1,0,16,919,388,30]),function(te,e,L,k,y,E){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),(0,L.registerEditorContribution)(y.StickyScrollController.ID,y.StickyScrollController,1),(0,E.registerAction2)(k.ToggleStickyScroll),(0,E.registerAction2)(k.FocusStickyScroll),(0,E.registerAction2)(k.SelectPreviousStickyScrollLine),(0,E.registerAction2)(k.SelectNextStickyScrollLine),(0,E.registerAction2)(k.GoToStickyScrollLine),(0,E.registerAction2)(k.SelectEditor)}),define(se[921],oe([1,0,16,33,383,27,15,8,50,92]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StandaloneReferencesController=void 0;let b=class extends y.ReferencesController{constructor(i,n,t,r,u,f,c){super(!0,i,n,t,r,u,f,c)}};e.StandaloneReferencesController=b,e.StandaloneReferencesController=b=ke([ge(1,S.IContextKeyService),ge(2,k.ICodeEditorService),ge(3,_.INotificationService),ge(4,p.IInstantiationService),ge(5,v.IStorageService),ge(6,E.IConfigurationService)],b),(0,L.registerEditorContribution)(y.ReferencesController.ID,b,4)}),define(se[922],oe([1,0,12,2,47,100,754,162,45,50,193]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.UndoRedoService=void 0;const a=!1;function i(g){return g.scheme===y.Schemas.file?g.fsPath:g.path}let n=0;class t{constructor(h,m,C,w,D,I,T){this.id=++n,this.type=0,this.actual=h,this.label=h.label,this.confirmBeforeUndo=h.confirmBeforeUndo||!1,this.resourceLabel=m,this.strResource=C,this.resourceLabels=[this.resourceLabel],this.strResources=[this.strResource],this.groupId=w,this.groupOrder=D,this.sourceId=I,this.sourceOrder=T,this.isValid=!0}setValid(h){this.isValid=h}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.isValid?\"  VALID\":\"INVALID\"}] ${this.actual.constructor.name} - ${this.actual}`}}class r{constructor(h,m){this.resourceLabel=h,this.reason=m}}class u{constructor(){this.elements=new Map}createMessage(){const h=[],m=[];for(const[,w]of this.elements)(w.reason===0?h:m).push(w.resourceLabel);const C=[];return h.length>0&&C.push(S.localize(0,null,h.join(\", \"))),m.length>0&&C.push(S.localize(1,null,m.join(\", \"))),C.join(`\n`)}get size(){return this.elements.size}has(h){return this.elements.has(h)}set(h,m){this.elements.set(h,m)}delete(h){return this.elements.delete(h)}}class f{constructor(h,m,C,w,D,I,T){this.id=++n,this.type=1,this.actual=h,this.label=h.label,this.confirmBeforeUndo=h.confirmBeforeUndo||!1,this.resourceLabels=m,this.strResources=C,this.groupId=w,this.groupOrder=D,this.sourceId=I,this.sourceOrder=T,this.removedResources=null,this.invalidatedResources=null}canSplit(){return typeof this.actual.split==\"function\"}removeResource(h,m,C){this.removedResources||(this.removedResources=new u),this.removedResources.has(m)||this.removedResources.set(m,new r(h,C))}setValid(h,m,C){C?this.invalidatedResources&&(this.invalidatedResources.delete(m),this.invalidatedResources.size===0&&(this.invalidatedResources=null)):(this.invalidatedResources||(this.invalidatedResources=new u),this.invalidatedResources.has(m)||this.invalidatedResources.set(m,new r(h,0)))}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources?\"INVALID\":\"  VALID\"}] ${this.actual.constructor.name} - ${this.actual}`}}class c{constructor(h,m){this.resourceLabel=h,this.strResource=m,this._past=[],this._future=[],this.locked=!1,this.versionId=1}dispose(){for(const h of this._past)h.type===1&&h.removeResource(this.resourceLabel,this.strResource,0);for(const h of this._future)h.type===1&&h.removeResource(this.resourceLabel,this.strResource,0);this.versionId++}toString(){const h=[];h.push(`* ${this.strResource}:`);for(let m=0;m<this._past.length;m++)h.push(`   * [UNDO] ${this._past[m]}`);for(let m=this._future.length-1;m>=0;m--)h.push(`   * [REDO] ${this._future[m]}`);return h.join(`\n`)}flushAllElements(){this._past=[],this._future=[],this.versionId++}_setElementValidFlag(h,m){h.type===1?h.setValid(this.resourceLabel,this.strResource,m):h.setValid(m)}setElementsValidFlag(h,m){for(const C of this._past)m(C.actual)&&this._setElementValidFlag(C,h);for(const C of this._future)m(C.actual)&&this._setElementValidFlag(C,h)}pushElement(h){for(const m of this._future)m.type===1&&m.removeResource(this.resourceLabel,this.strResource,1);this._future=[],this._past.push(h),this.versionId++}createSnapshot(h){const m=[];for(let C=0,w=this._past.length;C<w;C++)m.push(this._past[C].id);for(let C=this._future.length-1;C>=0;C--)m.push(this._future[C].id);return new b.ResourceEditStackSnapshot(h,m)}restoreSnapshot(h){const m=h.elements.length;let C=!0,w=0,D=-1;for(let T=0,A=this._past.length;T<A;T++,w++){const P=this._past[T];C&&(w>=m||P.id!==h.elements[w])&&(C=!1,D=0),!C&&P.type===1&&P.removeResource(this.resourceLabel,this.strResource,0)}let I=-1;for(let T=this._future.length-1;T>=0;T--,w++){const A=this._future[T];C&&(w>=m||A.id!==h.elements[w])&&(C=!1,I=T),!C&&A.type===1&&A.removeResource(this.resourceLabel,this.strResource,0)}D!==-1&&(this._past=this._past.slice(0,D)),I!==-1&&(this._future=this._future.slice(I+1)),this.versionId++}getElements(){const h=[],m=[];for(const C of this._past)h.push(C.actual);for(const C of this._future)m.push(C.actual);return{past:h,future:m}}getClosestPastElement(){return this._past.length===0?null:this._past[this._past.length-1]}getSecondClosestPastElement(){return this._past.length<2?null:this._past[this._past.length-2]}getClosestFutureElement(){return this._future.length===0?null:this._future[this._future.length-1]}hasPastElements(){return this._past.length>0}hasFutureElements(){return this._future.length>0}splitPastWorkspaceElement(h,m){for(let C=this._past.length-1;C>=0;C--)if(this._past[C]===h){m.has(this.strResource)?this._past[C]=m.get(this.strResource):this._past.splice(C,1);break}this.versionId++}splitFutureWorkspaceElement(h,m){for(let C=this._future.length-1;C>=0;C--)if(this._future[C]===h){m.has(this.strResource)?this._future[C]=m.get(this.strResource):this._future.splice(C,1);break}this.versionId++}moveBackward(h){this._past.pop(),this._future.push(h),this.versionId++}moveForward(h){this._future.pop(),this._past.push(h),this.versionId++}}class d{constructor(h){this.editStacks=h,this._versionIds=[];for(let m=0,C=this.editStacks.length;m<C;m++)this._versionIds[m]=this.editStacks[m].versionId}isValid(){for(let h=0,m=this.editStacks.length;h<m;h++)if(this._versionIds[h]!==this.editStacks[h].versionId)return!1;return!0}}const s=new c(\"\",\"\");s.locked=!0;let l=class{constructor(h,m){this._dialogService=h,this._notificationService=m,this._editStacks=new Map,this._uriComparisonKeyComputers=[]}getUriComparisonKey(h){for(const m of this._uriComparisonKeyComputers)if(m[0]===h.scheme)return m[1].getComparisonKey(h);return h.toString()}_print(h){console.log(\"------------------------------------\"),console.log(`AFTER ${h}: `);const m=[];for(const C of this._editStacks)m.push(C[1].toString());console.log(m.join(`\n`))}pushElement(h,m=b.UndoRedoGroup.None,C=b.UndoRedoSource.None){if(h.type===0){const w=i(h.resource),D=this.getUriComparisonKey(h.resource);this._pushElement(new t(h,w,D,m.id,m.nextOrder(),C.id,C.nextOrder()))}else{const w=new Set,D=[],I=[];for(const T of h.resources){const A=i(T),P=this.getUriComparisonKey(T);w.has(P)||(w.add(P),D.push(A),I.push(P))}D.length===1?this._pushElement(new t(h,D[0],I[0],m.id,m.nextOrder(),C.id,C.nextOrder())):this._pushElement(new f(h,D,I,m.id,m.nextOrder(),C.id,C.nextOrder()))}a&&this._print(\"pushElement\")}_pushElement(h){for(let m=0,C=h.strResources.length;m<C;m++){const w=h.resourceLabels[m],D=h.strResources[m];let I;this._editStacks.has(D)?I=this._editStacks.get(D):(I=new c(w,D),this._editStacks.set(D,I)),I.pushElement(h)}}getLastElement(h){const m=this.getUriComparisonKey(h);if(this._editStacks.has(m)){const C=this._editStacks.get(m);if(C.hasFutureElements())return null;const w=C.getClosestPastElement();return w?w.actual:null}return null}_splitPastWorkspaceElement(h,m){const C=h.actual.split(),w=new Map;for(const D of C){const I=i(D.resource),T=this.getUriComparisonKey(D.resource),A=new t(D,I,T,0,0,0,0);w.set(A.strResource,A)}for(const D of h.strResources){if(m&&m.has(D))continue;this._editStacks.get(D).splitPastWorkspaceElement(h,w)}}_splitFutureWorkspaceElement(h,m){const C=h.actual.split(),w=new Map;for(const D of C){const I=i(D.resource),T=this.getUriComparisonKey(D.resource),A=new t(D,I,T,0,0,0,0);w.set(A.strResource,A)}for(const D of h.strResources){if(m&&m.has(D))continue;this._editStacks.get(D).splitFutureWorkspaceElement(h,w)}}removeElements(h){const m=typeof h==\"string\"?h:this.getUriComparisonKey(h);this._editStacks.has(m)&&(this._editStacks.get(m).dispose(),this._editStacks.delete(m)),a&&this._print(\"removeElements\")}setElementsValidFlag(h,m,C){const w=this.getUriComparisonKey(h);this._editStacks.has(w)&&this._editStacks.get(w).setElementsValidFlag(m,C),a&&this._print(\"setElementsValidFlag\")}createSnapshot(h){const m=this.getUriComparisonKey(h);return this._editStacks.has(m)?this._editStacks.get(m).createSnapshot(h):new b.ResourceEditStackSnapshot(h,[])}restoreSnapshot(h){const m=this.getUriComparisonKey(h.resource);if(this._editStacks.has(m)){const C=this._editStacks.get(m);C.restoreSnapshot(h),!C.hasPastElements()&&!C.hasFutureElements()&&(C.dispose(),this._editStacks.delete(m))}a&&this._print(\"restoreSnapshot\")}getElements(h){const m=this.getUriComparisonKey(h);return this._editStacks.has(m)?this._editStacks.get(m).getElements():{past:[],future:[]}}_findClosestUndoElementWithSource(h){if(!h)return[null,null];let m=null,C=null;for(const[w,D]of this._editStacks){const I=D.getClosestPastElement();I&&I.sourceId===h&&(!m||I.sourceOrder>m.sourceOrder)&&(m=I,C=w)}return[m,C]}canUndo(h){if(h instanceof b.UndoRedoSource){const[,C]=this._findClosestUndoElementWithSource(h.id);return!!C}const m=this.getUriComparisonKey(h);return this._editStacks.has(m)?this._editStacks.get(m).hasPastElements():!1}_onError(h,m){(0,L.onUnexpectedError)(h);for(const C of m.strResources)this.removeElements(C);this._notificationService.error(h)}_acquireLocks(h){for(const m of h.editStacks)if(m.locked)throw new Error(\"Cannot acquire edit stack lock\");for(const m of h.editStacks)m.locked=!0;return()=>{for(const m of h.editStacks)m.locked=!1}}_safeInvokeWithLocks(h,m,C,w,D){const I=this._acquireLocks(C);let T;try{T=m()}catch(A){return I(),w.dispose(),this._onError(A,h)}return T?T.then(()=>(I(),w.dispose(),D()),A=>(I(),w.dispose(),this._onError(A,h))):(I(),w.dispose(),D())}async _invokeWorkspacePrepare(h){if(typeof h.actual.prepareUndoRedo>\"u\")return k.Disposable.None;const m=h.actual.prepareUndoRedo();return typeof m>\"u\"?k.Disposable.None:m}_invokeResourcePrepare(h,m){if(h.actual.type!==1||typeof h.actual.prepareUndoRedo>\"u\")return m(k.Disposable.None);const C=h.actual.prepareUndoRedo();return C?(0,k.isDisposable)(C)?m(C):C.then(w=>m(w)):m(k.Disposable.None)}_getAffectedEditStacks(h){const m=[];for(const C of h.strResources)m.push(this._editStacks.get(C)||s);return new d(m)}_tryToSplitAndUndo(h,m,C,w){if(m.canSplit())return this._splitPastWorkspaceElement(m,C),this._notificationService.warn(w),new o(this._undo(h,0,!0));for(const D of m.strResources)this.removeElements(D);return this._notificationService.warn(w),new o}_checkWorkspaceUndo(h,m,C,w){if(m.removedResources)return this._tryToSplitAndUndo(h,m,m.removedResources,S.localize(2,null,m.label,m.removedResources.createMessage()));if(w&&m.invalidatedResources)return this._tryToSplitAndUndo(h,m,m.invalidatedResources,S.localize(3,null,m.label,m.invalidatedResources.createMessage()));const D=[];for(const T of C.editStacks)T.getClosestPastElement()!==m&&D.push(T.resourceLabel);if(D.length>0)return this._tryToSplitAndUndo(h,m,null,S.localize(4,null,m.label,D.join(\", \")));const I=[];for(const T of C.editStacks)T.locked&&I.push(T.resourceLabel);return I.length>0?this._tryToSplitAndUndo(h,m,null,S.localize(5,null,m.label,I.join(\", \"))):C.isValid()?null:this._tryToSplitAndUndo(h,m,null,S.localize(6,null,m.label))}_workspaceUndo(h,m,C){const w=this._getAffectedEditStacks(m),D=this._checkWorkspaceUndo(h,m,w,!1);return D?D.returnValue:this._confirmAndExecuteWorkspaceUndo(h,m,w,C)}_isPartOfUndoGroup(h){if(!h.groupId)return!1;for(const[,m]of this._editStacks){const C=m.getClosestPastElement();if(C){if(C===h){const w=m.getSecondClosestPastElement();if(w&&w.groupId===h.groupId)return!0}if(C.groupId===h.groupId)return!0}}return!1}async _confirmAndExecuteWorkspaceUndo(h,m,C,w){if(m.canSplit()&&!this._isPartOfUndoGroup(m)){let T;(function(N){N[N.All=0]=\"All\",N[N.This=1]=\"This\",N[N.Cancel=2]=\"Cancel\"})(T||(T={}));const{result:A}=await this._dialogService.prompt({type:E.default.Info,message:S.localize(7,null,m.label),buttons:[{label:S.localize(8,null,C.editStacks.length),run:()=>T.All},{label:S.localize(9,null),run:()=>T.This}],cancelButton:{run:()=>T.Cancel}});if(A===T.Cancel)return;if(A===T.This)return this._splitPastWorkspaceElement(m,null),this._undo(h,0,!0);const P=this._checkWorkspaceUndo(h,m,C,!1);if(P)return P.returnValue;w=!0}let D;try{D=await this._invokeWorkspacePrepare(m)}catch(T){return this._onError(T,m)}const I=this._checkWorkspaceUndo(h,m,C,!0);if(I)return D.dispose(),I.returnValue;for(const T of C.editStacks)T.moveBackward(m);return this._safeInvokeWithLocks(m,()=>m.actual.undo(),C,D,()=>this._continueUndoInGroup(m.groupId,w))}_resourceUndo(h,m,C){if(!m.isValid){h.flushAllElements();return}if(h.locked){const w=S.localize(10,null,m.label);this._notificationService.warn(w);return}return this._invokeResourcePrepare(m,w=>(h.moveBackward(m),this._safeInvokeWithLocks(m,()=>m.actual.undo(),new d([h]),w,()=>this._continueUndoInGroup(m.groupId,C))))}_findClosestUndoElementInGroup(h){if(!h)return[null,null];let m=null,C=null;for(const[w,D]of this._editStacks){const I=D.getClosestPastElement();I&&I.groupId===h&&(!m||I.groupOrder>m.groupOrder)&&(m=I,C=w)}return[m,C]}_continueUndoInGroup(h,m){if(!h)return;const[,C]=this._findClosestUndoElementInGroup(h);if(C)return this._undo(C,0,m)}undo(h){if(h instanceof b.UndoRedoSource){const[,m]=this._findClosestUndoElementWithSource(h.id);return m?this._undo(m,h.id,!1):void 0}return typeof h==\"string\"?this._undo(h,0,!1):this._undo(this.getUriComparisonKey(h),0,!1)}_undo(h,m=0,C){if(!this._editStacks.has(h))return;const w=this._editStacks.get(h),D=w.getClosestPastElement();if(!D)return;if(D.groupId){const[T,A]=this._findClosestUndoElementInGroup(D.groupId);if(D!==T&&A)return this._undo(A,m,C)}if((D.sourceId!==m||D.confirmBeforeUndo)&&!C)return this._confirmAndContinueUndo(h,m,D);try{return D.type===1?this._workspaceUndo(h,D,C):this._resourceUndo(w,D,C)}finally{a&&this._print(\"undo\")}}async _confirmAndContinueUndo(h,m,C){if((await this._dialogService.confirm({message:S.localize(11,null,C.label),primaryButton:S.localize(12,null),cancelButton:S.localize(13,null)})).confirmed)return this._undo(h,m,!0)}_findClosestRedoElementWithSource(h){if(!h)return[null,null];let m=null,C=null;for(const[w,D]of this._editStacks){const I=D.getClosestFutureElement();I&&I.sourceId===h&&(!m||I.sourceOrder<m.sourceOrder)&&(m=I,C=w)}return[m,C]}canRedo(h){if(h instanceof b.UndoRedoSource){const[,C]=this._findClosestRedoElementWithSource(h.id);return!!C}const m=this.getUriComparisonKey(h);return this._editStacks.has(m)?this._editStacks.get(m).hasFutureElements():!1}_tryToSplitAndRedo(h,m,C,w){if(m.canSplit())return this._splitFutureWorkspaceElement(m,C),this._notificationService.warn(w),new o(this._redo(h));for(const D of m.strResources)this.removeElements(D);return this._notificationService.warn(w),new o}_checkWorkspaceRedo(h,m,C,w){if(m.removedResources)return this._tryToSplitAndRedo(h,m,m.removedResources,S.localize(14,null,m.label,m.removedResources.createMessage()));if(w&&m.invalidatedResources)return this._tryToSplitAndRedo(h,m,m.invalidatedResources,S.localize(15,null,m.label,m.invalidatedResources.createMessage()));const D=[];for(const T of C.editStacks)T.getClosestFutureElement()!==m&&D.push(T.resourceLabel);if(D.length>0)return this._tryToSplitAndRedo(h,m,null,S.localize(16,null,m.label,D.join(\", \")));const I=[];for(const T of C.editStacks)T.locked&&I.push(T.resourceLabel);return I.length>0?this._tryToSplitAndRedo(h,m,null,S.localize(17,null,m.label,I.join(\", \"))):C.isValid()?null:this._tryToSplitAndRedo(h,m,null,S.localize(18,null,m.label))}_workspaceRedo(h,m){const C=this._getAffectedEditStacks(m),w=this._checkWorkspaceRedo(h,m,C,!1);return w?w.returnValue:this._executeWorkspaceRedo(h,m,C)}async _executeWorkspaceRedo(h,m,C){let w;try{w=await this._invokeWorkspacePrepare(m)}catch(I){return this._onError(I,m)}const D=this._checkWorkspaceRedo(h,m,C,!0);if(D)return w.dispose(),D.returnValue;for(const I of C.editStacks)I.moveForward(m);return this._safeInvokeWithLocks(m,()=>m.actual.redo(),C,w,()=>this._continueRedoInGroup(m.groupId))}_resourceRedo(h,m){if(!m.isValid){h.flushAllElements();return}if(h.locked){const C=S.localize(19,null,m.label);this._notificationService.warn(C);return}return this._invokeResourcePrepare(m,C=>(h.moveForward(m),this._safeInvokeWithLocks(m,()=>m.actual.redo(),new d([h]),C,()=>this._continueRedoInGroup(m.groupId))))}_findClosestRedoElementInGroup(h){if(!h)return[null,null];let m=null,C=null;for(const[w,D]of this._editStacks){const I=D.getClosestFutureElement();I&&I.groupId===h&&(!m||I.groupOrder<m.groupOrder)&&(m=I,C=w)}return[m,C]}_continueRedoInGroup(h){if(!h)return;const[,m]=this._findClosestRedoElementInGroup(h);if(m)return this._redo(m)}redo(h){if(h instanceof b.UndoRedoSource){const[,m]=this._findClosestRedoElementWithSource(h.id);return m?this._redo(m):void 0}return typeof h==\"string\"?this._redo(h):this._redo(this.getUriComparisonKey(h))}_redo(h){if(!this._editStacks.has(h))return;const m=this._editStacks.get(h),C=m.getClosestFutureElement();if(C){if(C.groupId){const[w,D]=this._findClosestRedoElementInGroup(C.groupId);if(C!==w&&D)return this._redo(D)}try{return C.type===1?this._workspaceRedo(h,C):this._resourceRedo(m,C)}finally{a&&this._print(\"redo\")}}}};e.UndoRedoService=l,e.UndoRedoService=l=ke([ge(0,p.IDialogService),ge(1,v.INotificationService)],l);class o{constructor(h){this.returnValue=h}}(0,_.registerSingleton)(b.IUndoRedoService,l,1)}),define(se[169],oe([1,0,755,95,199,22,8]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.isStandaloneEditorWorkspace=e.STANDALONE_EDITOR_WORKSPACE_ID=e.WORKSPACE_FILTER=e.WORKSPACE_EXTENSION=e.WorkspaceFolder=e.Workspace=e.isWorkspaceIdentifier=e.toWorkspaceIdentifier=e.UNKNOWN_EMPTY_WINDOW_WORKSPACE=e.EXTENSION_DEVELOPMENT_EMPTY_WINDOW_WORKSPACE=e.isEmptyWorkspaceIdentifier=e.isSingleFolderWorkspaceIdentifier=e.IWorkspaceContextService=void 0,e.IWorkspaceContextService=(0,S.createDecorator)(\"contextService\");function p(t){const r=t;return typeof r?.id==\"string\"&&E.URI.isUri(r.uri)}e.isSingleFolderWorkspaceIdentifier=p;function _(t){const r=t;return typeof r?.id==\"string\"&&!p(t)&&!b(t)}e.isEmptyWorkspaceIdentifier=_,e.EXTENSION_DEVELOPMENT_EMPTY_WINDOW_WORKSPACE={id:\"ext-dev\"},e.UNKNOWN_EMPTY_WINDOW_WORKSPACE={id:\"empty-window\"};function v(t,r){if(typeof t==\"string\"||typeof t>\"u\")return typeof t==\"string\"?{id:(0,k.basename)(t)}:r?e.EXTENSION_DEVELOPMENT_EMPTY_WINDOW_WORKSPACE:e.UNKNOWN_EMPTY_WINDOW_WORKSPACE;const u=t;return u.configuration?{id:u.id,configPath:u.configuration}:u.folders.length===1?{id:u.id,uri:u.folders[0].uri}:{id:u.id}}e.toWorkspaceIdentifier=v;function b(t){const r=t;return typeof r?.id==\"string\"&&E.URI.isUri(r.configPath)}e.isWorkspaceIdentifier=b;class a{constructor(r,u,f,c,d){this._id=r,this._transient=f,this._configuration=c,this._ignorePathCasing=d,this._foldersMap=y.TernarySearchTree.forUris(this._ignorePathCasing,()=>!0),this.folders=u}get folders(){return this._folders}set folders(r){this._folders=r,this.updateFoldersMap()}get id(){return this._id}get transient(){return this._transient}get configuration(){return this._configuration}set configuration(r){this._configuration=r}getFolder(r){return r&&this._foldersMap.findSubstr(r)||null}updateFoldersMap(){this._foldersMap=y.TernarySearchTree.forUris(this._ignorePathCasing,()=>!0);for(const r of this.folders)this._foldersMap.set(r.uri,r)}toJSON(){return{id:this.id,folders:this.folders,transient:this.transient,configuration:this.configuration}}}e.Workspace=a;class i{constructor(r,u){this.raw=u,this.uri=r.uri,this.index=r.index,this.name=r.name}toJSON(){return{uri:this.uri,name:this.name,index:this.index}}}e.WorkspaceFolder=i,e.WORKSPACE_EXTENSION=\"code-workspace\",e.WORKSPACE_FILTER=[{name:(0,L.localize)(0,null),extensions:[e.WORKSPACE_EXTENSION]}],e.STANDALONE_EDITOR_WORKSPACE_ID=\"4064f6ec-cb38-4ad0-af64-ee6467e63c82\";function n(t){return t.id===e.STANDALONE_EDITOR_WORKSPACE_ID}e.isStandaloneEditorWorkspace=n}),define(se[923],oe([1,0,7,135,42,2,17,16,21,664,30,15,59,34,27,169]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";var u;Object.defineProperty(e,\"__esModule\",{value:!0}),e.ContextMenuController=void 0;let f=u=class{static get(s){return s.getContribution(u.ID)}constructor(s,l,o,g,h,m,C,w){this._contextMenuService=l,this._contextViewService=o,this._contextKeyService=g,this._keybindingService=h,this._menuService=m,this._configurationService=C,this._workspaceContextService=w,this._toDispose=new E.DisposableStore,this._contextMenuIsBeingShownCount=0,this._editor=s,this._toDispose.add(this._editor.onContextMenu(D=>this._onContextMenu(D))),this._toDispose.add(this._editor.onMouseWheel(D=>{if(this._contextMenuIsBeingShownCount>0){const I=this._contextViewService.getContextViewElement(),T=D.srcElement;T.shadowRoot&&L.getShadowRoot(I)===T.shadowRoot||this._contextViewService.hideContextView()}})),this._toDispose.add(this._editor.onKeyDown(D=>{this._editor.getOption(24)&&D.keyCode===58&&(D.preventDefault(),D.stopPropagation(),this.showContextMenu())}))}_onContextMenu(s){if(!this._editor.hasModel())return;if(!this._editor.getOption(24)){this._editor.focus(),s.target.position&&!this._editor.getSelection().containsPosition(s.target.position)&&this._editor.setPosition(s.target.position);return}if(s.target.type===12||s.target.type===6&&s.target.detail.injectedText)return;if(s.event.preventDefault(),s.event.stopPropagation(),s.target.type===11)return this._showScrollbarContextMenu(s.event);if(s.target.type!==6&&s.target.type!==7&&s.target.type!==1)return;if(this._editor.focus(),s.target.position){let o=!1;for(const g of this._editor.getSelections())if(g.containsPosition(s.target.position)){o=!0;break}o||this._editor.setPosition(s.target.position)}let l=null;s.target.type!==1&&(l=s.event),this.showContextMenu(l)}showContextMenu(s){if(!this._editor.getOption(24)||!this._editor.hasModel())return;const l=this._getMenuActions(this._editor.getModel(),this._editor.isSimpleWidget?b.MenuId.SimpleEditorContext:b.MenuId.EditorContext);l.length>0&&this._doShowContextMenu(l,s)}_getMenuActions(s,l){const o=[],g=this._menuService.createMenu(l,this._contextKeyService),h=g.getActions({arg:s.uri});g.dispose();for(const m of h){const[,C]=m;let w=0;for(const D of C)if(D instanceof b.SubmenuItemAction){const I=this._getMenuActions(s,D.item.submenu);I.length>0&&(o.push(new y.SubmenuAction(D.id,D.label,I)),w++)}else o.push(D),w++;w&&o.push(new y.Separator)}return o.length&&o.pop(),o}_doShowContextMenu(s,l=null){if(!this._editor.hasModel())return;const o=this._editor.getOption(60);this._editor.updateOptions({hover:{enabled:!1}});let g=l;if(!g){this._editor.revealPosition(this._editor.getPosition(),1),this._editor.render();const m=this._editor.getScrolledVisiblePosition(this._editor.getPosition()),C=L.getDomNodePagePosition(this._editor.getDomNode()),w=C.left+m.left,D=C.top+m.top+m.height;g={x:w,y:D}}const h=this._editor.getOption(126)&&!S.isIOS;this._contextMenuIsBeingShownCount++,this._contextMenuService.showContextMenu({domForShadowRoot:h?this._editor.getDomNode():void 0,getAnchor:()=>g,getActions:()=>s,getActionViewItem:m=>{const C=this._keybindingFor(m);if(C)return new k.ActionViewItem(m,m,{label:!0,keybinding:C.getLabel(),isMenu:!0});const w=m;return typeof w.getActionViewItem==\"function\"?w.getActionViewItem():new k.ActionViewItem(m,m,{icon:!0,label:!0,isMenu:!0})},getKeyBinding:m=>this._keybindingFor(m),onHide:m=>{this._contextMenuIsBeingShownCount--,this._editor.updateOptions({hover:o})}})}_showScrollbarContextMenu(s){if(!this._editor.hasModel()||(0,r.isStandaloneEditorWorkspace)(this._workspaceContextService.getWorkspace()))return;const l=this._editor.getOption(72);let o=0;const g=D=>({id:`menu-action-${++o}`,label:D.label,tooltip:\"\",class:void 0,enabled:typeof D.enabled>\"u\"?!0:D.enabled,checked:D.checked,run:D.run}),h=(D,I)=>new y.SubmenuAction(`menu-action-${++o}`,D,I,void 0),m=(D,I,T,A,P)=>{if(!I)return g({label:D,enabled:I,run:()=>{}});const N=R=>()=>{this._configurationService.updateValue(T,R)},M=[];for(const R of P)M.push(g({label:R.label,checked:A===R.value,run:N(R.value)}));return h(D,M)},C=[];C.push(g({label:v.localize(0,null),checked:l.enabled,run:()=>{this._configurationService.updateValue(\"editor.minimap.enabled\",!l.enabled)}})),C.push(new y.Separator),C.push(g({label:v.localize(1,null),enabled:l.enabled,checked:l.renderCharacters,run:()=>{this._configurationService.updateValue(\"editor.minimap.renderCharacters\",!l.renderCharacters)}})),C.push(m(v.localize(2,null),l.enabled,\"editor.minimap.size\",l.size,[{label:v.localize(3,null),value:\"proportional\"},{label:v.localize(4,null),value:\"fill\"},{label:v.localize(5,null),value:\"fit\"}])),C.push(m(v.localize(6,null),l.enabled,\"editor.minimap.showSlider\",l.showSlider,[{label:v.localize(7,null),value:\"mouseover\"},{label:v.localize(8,null),value:\"always\"}]));const w=this._editor.getOption(126)&&!S.isIOS;this._contextMenuIsBeingShownCount++,this._contextMenuService.showContextMenu({domForShadowRoot:w?this._editor.getDomNode():void 0,getAnchor:()=>s,getActions:()=>C,onHide:D=>{this._contextMenuIsBeingShownCount--,this._editor.focus()}})}_keybindingFor(s){return this._keybindingService.lookupKeybinding(s.id)}dispose(){this._contextMenuIsBeingShownCount>0&&this._contextViewService.hideContextView(),this._toDispose.dispose()}};e.ContextMenuController=f,f.ID=\"editor.contrib.contextmenu\",e.ContextMenuController=f=u=ke([ge(1,i.IContextMenuService),ge(2,i.IContextViewService),ge(3,a.IContextKeyService),ge(4,n.IKeybindingService),ge(5,b.IMenuService),ge(6,t.IConfigurationService),ge(7,r.IWorkspaceContextService)],f);class c extends p.EditorAction{constructor(){super({id:\"editor.action.showContextMenu\",label:v.localize(9,null),alias:\"Show Editor Context Menu\",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.textInputFocus,primary:1092,weight:100}})}run(s,l){var o;(o=f.get(l))===null||o===void 0||o.showContextMenu()}}(0,p.registerEditorContribution)(f.ID,f,2),(0,p.registerEditorAction)(c)}),define(se[389],oe([1,0,13,176,2,109,47,49,22,18,668,169]),function(te,e,L,k,y,E,S,p,_,v,b,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.DefaultPasteProvidersFeature=e.DefaultDropProvidersFeature=void 0;const i=(0,b.localize)(0,null);class n{async provideDocumentPasteEdits(o,g,h,m,C){const w=await this.getEdit(h,C);return w?{insertText:w.insertText,label:w.label,detail:w.detail,handledMimeType:w.handledMimeType,yieldTo:w.yieldTo}:void 0}async provideDocumentOnDropEdits(o,g,h,m){const C=await this.getEdit(h,m);return C?{insertText:C.insertText,label:C.label,handledMimeType:C.handledMimeType,yieldTo:C.yieldTo}:void 0}}class t extends n{constructor(){super(...arguments),this.id=\"text\",this.dropMimeTypes=[E.Mimes.text],this.pasteMimeTypes=[E.Mimes.text]}async getEdit(o,g){const h=o.get(E.Mimes.text);if(!h||o.has(E.Mimes.uriList))return;const m=await h.asString();return{handledMimeType:E.Mimes.text,label:(0,b.localize)(1,null),detail:i,insertText:m}}}class r extends n{constructor(){super(...arguments),this.id=\"uri\",this.dropMimeTypes=[E.Mimes.uriList],this.pasteMimeTypes=[E.Mimes.uriList]}async getEdit(o,g){const h=await c(o);if(!h.length||g.isCancellationRequested)return;let m=0;const C=h.map(({uri:D,originalText:I})=>D.scheme===S.Schemas.file?D.fsPath:(m++,I)).join(\" \");let w;return m>0?w=h.length>1?(0,b.localize)(2,null):(0,b.localize)(3,null):w=h.length>1?(0,b.localize)(4,null):(0,b.localize)(5,null),{handledMimeType:E.Mimes.uriList,insertText:C,label:w,detail:i}}}let u=class extends n{constructor(o){super(),this._workspaceContextService=o,this.id=\"relativePath\",this.dropMimeTypes=[E.Mimes.uriList],this.pasteMimeTypes=[E.Mimes.uriList]}async getEdit(o,g){const h=await c(o);if(!h.length||g.isCancellationRequested)return;const m=(0,L.coalesce)(h.map(({uri:C})=>{const w=this._workspaceContextService.getWorkspaceFolder(C);return w?(0,p.relativePath)(w.uri,C):void 0}));if(m.length)return{handledMimeType:E.Mimes.uriList,insertText:m.join(\" \"),label:h.length>1?(0,b.localize)(6,null):(0,b.localize)(7,null),detail:i}}};u=ke([ge(0,a.IWorkspaceContextService)],u);class f{constructor(){this.id=\"html\",this.pasteMimeTypes=[\"text/html\"],this._yieldTo=[{mimeType:E.Mimes.text}]}async provideDocumentPasteEdits(o,g,h,m,C){if(m.trigger!==\"explicit\"&&m.only!==this.id)return;const w=h.get(\"text/html\"),D=await w?.asString();if(!(!D||C.isCancellationRequested))return{insertText:D,yieldTo:this._yieldTo,label:(0,b.localize)(8,null),detail:i}}}async function c(l){const o=l.get(E.Mimes.uriList);if(!o)return[];const g=await o.asString(),h=[];for(const m of k.UriList.parse(g))try{h.push({uri:_.URI.parse(m),originalText:m})}catch{}return h}let d=class extends y.Disposable{constructor(o,g){super(),this._register(o.documentOnDropEditProvider.register(\"*\",new t)),this._register(o.documentOnDropEditProvider.register(\"*\",new r)),this._register(o.documentOnDropEditProvider.register(\"*\",new u(g)))}};e.DefaultDropProvidersFeature=d,e.DefaultDropProvidersFeature=d=ke([ge(0,v.ILanguageFeaturesService),ge(1,a.IWorkspaceContextService)],d);let s=class extends y.Disposable{constructor(o,g){super(),this._register(o.documentPasteEditProvider.register(\"*\",new t)),this._register(o.documentPasteEditProvider.register(\"*\",new r)),this._register(o.documentPasteEditProvider.register(\"*\",new u(g))),this._register(o.documentPasteEditProvider.register(\"*\",new f))}};e.DefaultPasteProvidersFeature=s,e.DefaultPasteProvidersFeature=s=ke([ge(0,v.ILanguageFeaturesService),ge(1,a.IWorkspaceContextService)],s)}),define(se[924],oe([1,0,16,21,131,380,389,666]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),(0,L.registerEditorContribution)(E.CopyPasteController.ID,E.CopyPasteController,0),(0,y.registerEditorFeature)(S.DefaultPasteProvidersFeature),(0,L.registerEditorCommand)(new class extends L.EditorCommand{constructor(){super({id:E.changePasteTypeCommandId,precondition:E.pasteWidgetVisibleCtx,kbOpts:{weight:100,primary:2137}})}runEditorCommand(_,v,b){var a;return(a=E.CopyPasteController.get(v))===null||a===void 0?void 0:a.changePasteType()}}),(0,L.registerEditorAction)(class extends L.EditorAction{constructor(){super({id:\"editor.action.pasteAs\",label:p.localize(0,null),alias:\"Paste As...\",precondition:k.EditorContextKeys.writable,metadata:{description:\"Paste as\",args:[{name:\"args\",schema:{type:\"object\",properties:{id:{type:\"string\",description:p.localize(1,null)}}}}]}})}run(_,v,b){var a;const i=typeof b?.id==\"string\"?b.id:void 0;return(a=E.CopyPasteController.get(v))===null||a===void 0?void 0:a.pasteAs(i)}}),(0,L.registerEditorAction)(class extends L.EditorAction{constructor(){super({id:\"editor.action.pasteAsText\",label:p.localize(2,null),alias:\"Paste as Text\",precondition:k.EditorContextKeys.writable})}run(_,v,b){var a;return(a=E.CopyPasteController.get(v))===null||a===void 0?void 0:a.pasteAs(\"text\")}})}),define(se[925],oe([1,0,16,246,131,389,669,98,37,903]),function(te,e,L,k,y,E,S,p,_,v){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),(0,L.registerEditorContribution)(v.DropIntoEditorController.ID,v.DropIntoEditorController,2),(0,L.registerEditorCommand)(new class extends L.EditorCommand{constructor(){super({id:v.changeDropTypeCommandId,precondition:v.dropWidgetVisibleCtx,kbOpts:{weight:100,primary:2137}})}runEditorCommand(b,a,i){var n;(n=v.DropIntoEditorController.get(a))===null||n===void 0||n.changeDropType()}}),(0,y.registerEditorFeature)(E.DefaultDropProvidersFeature),_.Registry.as(p.Extensions.Configuration).registerConfiguration({...k.editorConfigurationBaseNode,properties:{[v.defaultProviderConfig]:{type:\"object\",scope:5,description:S.localize(0,null),default:{},additionalProperties:{type:\"string\"}}}})}),define(se[926],oe([1,0,587,95,49,11,175,32,117,714,169]),function(te,e,L,k,y,E,S,p,_,v,b){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.RandomBasedVariableResolver=e.WorkspaceBasedVariableResolver=e.TimeBasedVariableResolver=e.CommentBasedVariableResolver=e.ClipboardBasedVariableResolver=e.ModelBasedVariableResolver=e.SelectionBasedVariableResolver=e.CompositeSnippetVariableResolver=e.KnownSnippetVariableNames=void 0,e.KnownSnippetVariableNames=Object.freeze({CURRENT_YEAR:!0,CURRENT_YEAR_SHORT:!0,CURRENT_MONTH:!0,CURRENT_DATE:!0,CURRENT_HOUR:!0,CURRENT_MINUTE:!0,CURRENT_SECOND:!0,CURRENT_DAY_NAME:!0,CURRENT_DAY_NAME_SHORT:!0,CURRENT_MONTH_NAME:!0,CURRENT_MONTH_NAME_SHORT:!0,CURRENT_SECONDS_UNIX:!0,CURRENT_TIMEZONE_OFFSET:!0,SELECTION:!0,CLIPBOARD:!0,TM_SELECTED_TEXT:!0,TM_CURRENT_LINE:!0,TM_CURRENT_WORD:!0,TM_LINE_INDEX:!0,TM_LINE_NUMBER:!0,TM_FILENAME:!0,TM_FILENAME_BASE:!0,TM_DIRECTORY:!0,TM_FILEPATH:!0,CURSOR_INDEX:!0,CURSOR_NUMBER:!0,RELATIVE_FILEPATH:!0,BLOCK_COMMENT_START:!0,BLOCK_COMMENT_END:!0,LINE_COMMENT:!0,WORKSPACE_NAME:!0,WORKSPACE_FOLDER:!0,RANDOM:!0,RANDOM_HEX:!0,UUID:!0});class a{constructor(s){this._delegates=s}resolve(s){for(const l of this._delegates){const o=l.resolve(s);if(o!==void 0)return o}}}e.CompositeSnippetVariableResolver=a;class i{constructor(s,l,o,g){this._model=s,this._selection=l,this._selectionIdx=o,this._overtypingCapturer=g}resolve(s){const{name:l}=s;if(l===\"SELECTION\"||l===\"TM_SELECTED_TEXT\"){let o=this._model.getValueInRange(this._selection)||void 0,g=this._selection.startLineNumber!==this._selection.endLineNumber;if(!o&&this._overtypingCapturer){const h=this._overtypingCapturer.getLastOvertypedInfo(this._selectionIdx);h&&(o=h.value,g=h.multiline)}if(o&&g&&s.snippet){const h=this._model.getLineContent(this._selection.startLineNumber),m=(0,E.getLeadingWhitespace)(h,0,this._selection.startColumn-1);let C=m;s.snippet.walk(D=>D===s?!1:(D instanceof _.Text&&(C=(0,E.getLeadingWhitespace)((0,E.splitLines)(D.value).pop())),!0));const w=(0,E.commonPrefixLength)(C,m);o=o.replace(/(\\r\\n|\\r|\\n)(.*)/g,(D,I,T)=>`${I}${C.substr(w)}${T}`)}return o}else{if(l===\"TM_CURRENT_LINE\")return this._model.getLineContent(this._selection.positionLineNumber);if(l===\"TM_CURRENT_WORD\"){const o=this._model.getWordAtPosition({lineNumber:this._selection.positionLineNumber,column:this._selection.positionColumn});return o&&o.word||void 0}else{if(l===\"TM_LINE_INDEX\")return String(this._selection.positionLineNumber-1);if(l===\"TM_LINE_NUMBER\")return String(this._selection.positionLineNumber);if(l===\"CURSOR_INDEX\")return String(this._selectionIdx);if(l===\"CURSOR_NUMBER\")return String(this._selectionIdx+1)}}}}e.SelectionBasedVariableResolver=i;class n{constructor(s,l){this._labelService=s,this._model=l}resolve(s){const{name:l}=s;if(l===\"TM_FILENAME\")return k.basename(this._model.uri.fsPath);if(l===\"TM_FILENAME_BASE\"){const o=k.basename(this._model.uri.fsPath),g=o.lastIndexOf(\".\");return g<=0?o:o.slice(0,g)}else{if(l===\"TM_DIRECTORY\")return k.dirname(this._model.uri.fsPath)===\".\"?\"\":this._labelService.getUriLabel((0,y.dirname)(this._model.uri));if(l===\"TM_FILEPATH\")return this._labelService.getUriLabel(this._model.uri);if(l===\"RELATIVE_FILEPATH\")return this._labelService.getUriLabel(this._model.uri,{relative:!0,noPrefix:!0})}}}e.ModelBasedVariableResolver=n;class t{constructor(s,l,o,g){this._readClipboardText=s,this._selectionIdx=l,this._selectionCount=o,this._spread=g}resolve(s){if(s.name!==\"CLIPBOARD\")return;const l=this._readClipboardText();if(l){if(this._spread){const o=l.split(/\\r\\n|\\n|\\r/).filter(g=>!(0,E.isFalsyOrWhitespace)(g));if(o.length===this._selectionCount)return o[this._selectionIdx]}return l}}}e.ClipboardBasedVariableResolver=t;let r=class{constructor(s,l,o){this._model=s,this._selection=l,this._languageConfigurationService=o}resolve(s){const{name:l}=s,o=this._model.getLanguageIdAtPosition(this._selection.selectionStartLineNumber,this._selection.selectionStartColumn),g=this._languageConfigurationService.getLanguageConfiguration(o).comments;if(g){if(l===\"LINE_COMMENT\")return g.lineCommentToken||void 0;if(l===\"BLOCK_COMMENT_START\")return g.blockCommentStartToken||void 0;if(l===\"BLOCK_COMMENT_END\")return g.blockCommentEndToken||void 0}}};e.CommentBasedVariableResolver=r,e.CommentBasedVariableResolver=r=ke([ge(2,p.ILanguageConfigurationService)],r);class u{constructor(){this._date=new Date}resolve(s){const{name:l}=s;if(l===\"CURRENT_YEAR\")return String(this._date.getFullYear());if(l===\"CURRENT_YEAR_SHORT\")return String(this._date.getFullYear()).slice(-2);if(l===\"CURRENT_MONTH\")return String(this._date.getMonth().valueOf()+1).padStart(2,\"0\");if(l===\"CURRENT_DATE\")return String(this._date.getDate().valueOf()).padStart(2,\"0\");if(l===\"CURRENT_HOUR\")return String(this._date.getHours().valueOf()).padStart(2,\"0\");if(l===\"CURRENT_MINUTE\")return String(this._date.getMinutes().valueOf()).padStart(2,\"0\");if(l===\"CURRENT_SECOND\")return String(this._date.getSeconds().valueOf()).padStart(2,\"0\");if(l===\"CURRENT_DAY_NAME\")return u.dayNames[this._date.getDay()];if(l===\"CURRENT_DAY_NAME_SHORT\")return u.dayNamesShort[this._date.getDay()];if(l===\"CURRENT_MONTH_NAME\")return u.monthNames[this._date.getMonth()];if(l===\"CURRENT_MONTH_NAME_SHORT\")return u.monthNamesShort[this._date.getMonth()];if(l===\"CURRENT_SECONDS_UNIX\")return String(Math.floor(this._date.getTime()/1e3));if(l===\"CURRENT_TIMEZONE_OFFSET\"){const o=this._date.getTimezoneOffset(),g=o>0?\"-\":\"+\",h=Math.trunc(Math.abs(o/60)),m=h<10?\"0\"+h:h,C=Math.abs(o)-h*60,w=C<10?\"0\"+C:C;return g+m+\":\"+w}}}e.TimeBasedVariableResolver=u,u.dayNames=[v.localize(0,null),v.localize(1,null),v.localize(2,null),v.localize(3,null),v.localize(4,null),v.localize(5,null),v.localize(6,null)],u.dayNamesShort=[v.localize(7,null),v.localize(8,null),v.localize(9,null),v.localize(10,null),v.localize(11,null),v.localize(12,null),v.localize(13,null)],u.monthNames=[v.localize(14,null),v.localize(15,null),v.localize(16,null),v.localize(17,null),v.localize(18,null),v.localize(19,null),v.localize(20,null),v.localize(21,null),v.localize(22,null),v.localize(23,null),v.localize(24,null),v.localize(25,null)],u.monthNamesShort=[v.localize(26,null),v.localize(27,null),v.localize(28,null),v.localize(29,null),v.localize(30,null),v.localize(31,null),v.localize(32,null),v.localize(33,null),v.localize(34,null),v.localize(35,null),v.localize(36,null),v.localize(37,null)];class f{constructor(s){this._workspaceService=s}resolve(s){if(!this._workspaceService)return;const l=(0,b.toWorkspaceIdentifier)(this._workspaceService.getWorkspace());if(!(0,b.isEmptyWorkspaceIdentifier)(l)){if(s.name===\"WORKSPACE_NAME\")return this._resolveWorkspaceName(l);if(s.name===\"WORKSPACE_FOLDER\")return this._resoveWorkspacePath(l)}}_resolveWorkspaceName(s){if((0,b.isSingleFolderWorkspaceIdentifier)(s))return k.basename(s.uri.path);let l=k.basename(s.configPath.path);return l.endsWith(b.WORKSPACE_EXTENSION)&&(l=l.substr(0,l.length-b.WORKSPACE_EXTENSION.length-1)),l}_resoveWorkspacePath(s){if((0,b.isSingleFolderWorkspaceIdentifier)(s))return(0,L.normalizeDriveLetter)(s.uri.fsPath);const l=k.basename(s.configPath.path);let o=s.configPath.fsPath;return o.endsWith(l)&&(o=o.substr(0,o.length-l.length-1)),o?(0,L.normalizeDriveLetter)(o):\"/\"}}e.WorkspaceBasedVariableResolver=f;class c{resolve(s){const{name:l}=s;if(l===\"RANDOM\")return Math.random().toString().slice(-6);if(l===\"RANDOM_HEX\")return Math.random().toString(16).slice(-6);if(l===\"UUID\")return(0,S.generateUuid)()}}e.RandomBasedVariableResolver=c}),define(se[390],oe([1,0,13,2,11,74,5,24,32,38,164,169,117,926,476]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";var t;Object.defineProperty(e,\"__esModule\",{value:!0}),e.SnippetSession=e.OneSnippet=void 0;class r{constructor(d,s,l){this._editor=d,this._snippet=s,this._snippetLineLeadingWhitespace=l,this._offset=-1,this._nestingLevel=1,this._placeholderGroups=(0,L.groupBy)(s.placeholders,i.Placeholder.compareByIndex),this._placeholderGroupsIdx=-1}initialize(d){this._offset=d.newPosition}dispose(){this._placeholderDecorations&&this._editor.removeDecorations([...this._placeholderDecorations.values()]),this._placeholderGroups.length=0}_initDecorations(){if(this._offset===-1)throw new Error(\"Snippet not initialized!\");if(this._placeholderDecorations)return;this._placeholderDecorations=new Map;const d=this._editor.getModel();this._editor.changeDecorations(s=>{for(const l of this._snippet.placeholders){const o=this._snippet.offset(l),g=this._snippet.fullLen(l),h=S.Range.fromPositions(d.getPositionAt(this._offset+o),d.getPositionAt(this._offset+o+g)),m=l.isFinalTabstop?r._decor.inactiveFinal:r._decor.inactive,C=s.addDecoration(h,m);this._placeholderDecorations.set(l,C)}})}move(d){if(!this._editor.hasModel())return[];if(this._initDecorations(),this._placeholderGroupsIdx>=0){const o=[];for(const g of this._placeholderGroups[this._placeholderGroupsIdx])if(g.transform){const h=this._placeholderDecorations.get(g),m=this._editor.getModel().getDecorationRange(h),C=this._editor.getModel().getValueInRange(m),w=g.transform.resolve(C).split(/\\r\\n|\\r|\\n/);for(let D=1;D<w.length;D++)w[D]=this._editor.getModel().normalizeIndentation(this._snippetLineLeadingWhitespace+w[D]);o.push(E.EditOperation.replace(m,w.join(this._editor.getModel().getEOL())))}o.length>0&&this._editor.executeEdits(\"snippet.placeholderTransform\",o)}let s=!1;d===!0&&this._placeholderGroupsIdx<this._placeholderGroups.length-1?(this._placeholderGroupsIdx+=1,s=!0):d===!1&&this._placeholderGroupsIdx>0&&(this._placeholderGroupsIdx-=1,s=!0);const l=this._editor.getModel().changeDecorations(o=>{const g=new Set,h=[];for(const m of this._placeholderGroups[this._placeholderGroupsIdx]){const C=this._placeholderDecorations.get(m),w=this._editor.getModel().getDecorationRange(C);h.push(new p.Selection(w.startLineNumber,w.startColumn,w.endLineNumber,w.endColumn)),s=s&&this._hasPlaceholderBeenCollapsed(m),o.changeDecorationOptions(C,m.isFinalTabstop?r._decor.activeFinal:r._decor.active),g.add(m);for(const D of this._snippet.enclosingPlaceholders(m)){const I=this._placeholderDecorations.get(D);o.changeDecorationOptions(I,D.isFinalTabstop?r._decor.activeFinal:r._decor.active),g.add(D)}}for(const[m,C]of this._placeholderDecorations)g.has(m)||o.changeDecorationOptions(C,m.isFinalTabstop?r._decor.inactiveFinal:r._decor.inactive);return h});return s?this.move(d):l??[]}_hasPlaceholderBeenCollapsed(d){let s=d;for(;s;){if(s instanceof i.Placeholder){const l=this._placeholderDecorations.get(s);if(this._editor.getModel().getDecorationRange(l).isEmpty()&&s.toString().length>0)return!0}s=s.parent}return!1}get isAtFirstPlaceholder(){return this._placeholderGroupsIdx<=0||this._placeholderGroups.length===0}get isAtLastPlaceholder(){return this._placeholderGroupsIdx===this._placeholderGroups.length-1}get hasPlaceholder(){return this._snippet.placeholders.length>0}get isTrivialSnippet(){if(this._snippet.placeholders.length===0)return!0;if(this._snippet.placeholders.length===1){const[d]=this._snippet.placeholders;if(d.isFinalTabstop&&this._snippet.rightMostDescendant===d)return!0}return!1}computePossibleSelections(){const d=new Map;for(const s of this._placeholderGroups){let l;for(const o of s){if(o.isFinalTabstop)break;l||(l=[],d.set(o.index,l));const g=this._placeholderDecorations.get(o),h=this._editor.getModel().getDecorationRange(g);if(!h){d.delete(o.index);break}l.push(h)}}return d}get activeChoice(){if(!this._placeholderDecorations)return;const d=this._placeholderGroups[this._placeholderGroupsIdx][0];if(!d?.choice)return;const s=this._placeholderDecorations.get(d);if(!s)return;const l=this._editor.getModel().getDecorationRange(s);if(l)return{range:l,choice:d.choice}}get hasChoice(){let d=!1;return this._snippet.walk(s=>(d=s instanceof i.Choice,!d)),d}merge(d){const s=this._editor.getModel();this._nestingLevel*=10,this._editor.changeDecorations(l=>{for(const o of this._placeholderGroups[this._placeholderGroupsIdx]){const g=d.shift();console.assert(g._offset!==-1),console.assert(!g._placeholderDecorations);const h=g._snippet.placeholderInfo.last.index;for(const C of g._snippet.placeholderInfo.all)C.isFinalTabstop?C.index=o.index+(h+1)/this._nestingLevel:C.index=o.index+C.index/this._nestingLevel;this._snippet.replace(o,g._snippet.children);const m=this._placeholderDecorations.get(o);l.removeDecoration(m),this._placeholderDecorations.delete(o);for(const C of g._snippet.placeholders){const w=g._snippet.offset(C),D=g._snippet.fullLen(C),I=S.Range.fromPositions(s.getPositionAt(g._offset+w),s.getPositionAt(g._offset+w+D)),T=l.addDecoration(I,r._decor.inactive);this._placeholderDecorations.set(C,T)}}this._placeholderGroups=(0,L.groupBy)(this._snippet.placeholders,i.Placeholder.compareByIndex)})}}e.OneSnippet=r,r._decor={active:v.ModelDecorationOptions.register({description:\"snippet-placeholder-1\",stickiness:0,className:\"snippet-placeholder\"}),inactive:v.ModelDecorationOptions.register({description:\"snippet-placeholder-2\",stickiness:1,className:\"snippet-placeholder\"}),activeFinal:v.ModelDecorationOptions.register({description:\"snippet-placeholder-3\",stickiness:1,className:\"finish-snippet-placeholder\"}),inactiveFinal:v.ModelDecorationOptions.register({description:\"snippet-placeholder-4\",stickiness:1,className:\"finish-snippet-placeholder\"})};const u={overwriteBefore:0,overwriteAfter:0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};let f=t=class{static adjustWhitespace(d,s,l,o,g){const h=d.getLineContent(s.lineNumber),m=(0,y.getLeadingWhitespace)(h,0,s.column-1);let C;return o.walk(w=>{if(!(w instanceof i.Text)||w.parent instanceof i.Choice||g&&!g.has(w))return!0;const D=w.value.split(/\\r\\n|\\r|\\n/);if(l){const T=o.offset(w);if(T===0)D[0]=d.normalizeIndentation(D[0]);else{C=C??o.toString();const A=C.charCodeAt(T-1);(A===10||A===13)&&(D[0]=d.normalizeIndentation(m+D[0]))}for(let A=1;A<D.length;A++)D[A]=d.normalizeIndentation(m+D[A])}const I=D.join(d.getEOL());return I!==w.value&&(w.parent.replace(w,[new i.Text(I)]),C=void 0),!0}),m}static adjustSelection(d,s,l,o){if(l!==0||o!==0){const{positionLineNumber:g,positionColumn:h}=s,m=h-l,C=h+o,w=d.validateRange({startLineNumber:g,startColumn:m,endLineNumber:g,endColumn:C});s=p.Selection.createWithDirection(w.startLineNumber,w.startColumn,w.endLineNumber,w.endColumn,s.getDirection())}return s}static createEditsAndSnippetsFromSelections(d,s,l,o,g,h,m,C,w){const D=[],I=[];if(!d.hasModel())return{edits:D,snippets:I};const T=d.getModel(),A=d.invokeWithinContext(B=>B.get(a.IWorkspaceContextService)),P=d.invokeWithinContext(B=>new n.ModelBasedVariableResolver(B.get(b.ILabelService),T)),N=()=>m,M=T.getValueInRange(t.adjustSelection(T,d.getSelection(),l,0)),R=T.getValueInRange(t.adjustSelection(T,d.getSelection(),0,o)),x=T.getLineFirstNonWhitespaceColumn(d.getSelection().positionLineNumber),O=d.getSelections().map((B,W)=>({selection:B,idx:W})).sort((B,W)=>S.Range.compareRangesUsingStarts(B.selection,W.selection));for(const{selection:B,idx:W}of O){let V=t.adjustSelection(T,B,l,0),K=t.adjustSelection(T,B,0,o);M!==T.getValueInRange(V)&&(V=B),R!==T.getValueInRange(K)&&(K=B);const F=B.setStartPosition(V.startLineNumber,V.startColumn).setEndPosition(K.endLineNumber,K.endColumn),q=new i.SnippetParser().parse(s,!0,g),ie=F.getStartPosition(),ae=t.adjustWhitespace(T,ie,h||W>0&&x!==T.getLineFirstNonWhitespaceColumn(B.positionLineNumber),q);q.resolveVariables(new n.CompositeSnippetVariableResolver([P,new n.ClipboardBasedVariableResolver(N,W,O.length,d.getOption(78)===\"spread\"),new n.SelectionBasedVariableResolver(T,B,W,C),new n.CommentBasedVariableResolver(T,B,w),new n.TimeBasedVariableResolver,new n.WorkspaceBasedVariableResolver(A),new n.RandomBasedVariableResolver])),D[W]=E.EditOperation.replace(F,q.toString()),D[W].identifier={major:W,minor:0},D[W]._isTracked=!0,I[W]=new r(d,q,ae)}return{edits:D,snippets:I}}static createEditsAndSnippetsFromEdits(d,s,l,o,g,h,m){if(!d.hasModel()||s.length===0)return{edits:[],snippets:[]};const C=[],w=d.getModel(),D=new i.SnippetParser,I=new i.TextmateSnippet,T=new n.CompositeSnippetVariableResolver([d.invokeWithinContext(P=>new n.ModelBasedVariableResolver(P.get(b.ILabelService),w)),new n.ClipboardBasedVariableResolver(()=>g,0,d.getSelections().length,d.getOption(78)===\"spread\"),new n.SelectionBasedVariableResolver(w,d.getSelection(),0,h),new n.CommentBasedVariableResolver(w,d.getSelection(),m),new n.TimeBasedVariableResolver,new n.WorkspaceBasedVariableResolver(d.invokeWithinContext(P=>P.get(a.IWorkspaceContextService))),new n.RandomBasedVariableResolver]);s=s.sort((P,N)=>S.Range.compareRangesUsingStarts(P.range,N.range));let A=0;for(let P=0;P<s.length;P++){const{range:N,template:M}=s[P];if(P>0){const W=s[P-1].range,V=S.Range.fromPositions(W.getEndPosition(),N.getStartPosition()),K=new i.Text(w.getValueInRange(V));I.appendChild(K),A+=K.value.length}const R=D.parseFragment(M,I);t.adjustWhitespace(w,N.getStartPosition(),!0,I,new Set(R)),I.resolveVariables(T);const x=I.toString(),O=x.slice(A);A=x.length;const B=E.EditOperation.replace(N,O);B.identifier={major:P,minor:0},B._isTracked=!0,C.push(B)}return D.ensureFinalTabstop(I,l,!0),{edits:C,snippets:[new r(d,I,\"\")]}}constructor(d,s,l=u,o){this._editor=d,this._template=s,this._options=l,this._languageConfigurationService=o,this._templateMerges=[],this._snippets=[]}dispose(){(0,k.dispose)(this._snippets)}_logInfo(){return`template=\"${this._template}\", merged_templates=\"${this._templateMerges.join(\" -> \")}\"`}insert(){if(!this._editor.hasModel())return;const{edits:d,snippets:s}=typeof this._template==\"string\"?t.createEditsAndSnippetsFromSelections(this._editor,this._template,this._options.overwriteBefore,this._options.overwriteAfter,!1,this._options.adjustWhitespace,this._options.clipboardText,this._options.overtypingCapturer,this._languageConfigurationService):t.createEditsAndSnippetsFromEdits(this._editor,this._template,!1,this._options.adjustWhitespace,this._options.clipboardText,this._options.overtypingCapturer,this._languageConfigurationService);this._snippets=s,this._editor.executeEdits(\"snippet\",d,l=>{const o=l.filter(g=>!!g.identifier);for(let g=0;g<s.length;g++)s[g].initialize(o[g].textChange);return this._snippets[0].hasPlaceholder?this._move(!0):o.map(g=>p.Selection.fromPositions(g.range.getEndPosition()))}),this._editor.revealRange(this._editor.getSelections()[0])}merge(d,s=u){if(!this._editor.hasModel())return;this._templateMerges.push([this._snippets[0]._nestingLevel,this._snippets[0]._placeholderGroupsIdx,d]);const{edits:l,snippets:o}=t.createEditsAndSnippetsFromSelections(this._editor,d,s.overwriteBefore,s.overwriteAfter,!0,s.adjustWhitespace,s.clipboardText,s.overtypingCapturer,this._languageConfigurationService);this._editor.executeEdits(\"snippet\",l,g=>{const h=g.filter(C=>!!C.identifier);for(let C=0;C<o.length;C++)o[C].initialize(h[C].textChange);const m=o[0].isTrivialSnippet;if(!m){for(const C of this._snippets)C.merge(o);console.assert(o.length===0)}return this._snippets[0].hasPlaceholder&&!m?this._move(void 0):h.map(C=>p.Selection.fromPositions(C.range.getEndPosition()))})}next(){const d=this._move(!0);this._editor.setSelections(d),this._editor.revealPositionInCenterIfOutsideViewport(d[0].getPosition())}prev(){const d=this._move(!1);this._editor.setSelections(d),this._editor.revealPositionInCenterIfOutsideViewport(d[0].getPosition())}_move(d){const s=[];for(const l of this._snippets){const o=l.move(d);s.push(...o)}return s}get isAtFirstPlaceholder(){return this._snippets[0].isAtFirstPlaceholder}get isAtLastPlaceholder(){return this._snippets[0].isAtLastPlaceholder}get hasPlaceholder(){return this._snippets[0].hasPlaceholder}get hasChoice(){return this._snippets[0].hasChoice}get activeChoice(){return this._snippets[0].activeChoice}isSelectionWithinPlaceholders(){if(!this.hasPlaceholder)return!1;const d=this._editor.getSelections();if(d.length<this._snippets.length)return!1;const s=new Map;for(const l of this._snippets){const o=l.computePossibleSelections();if(s.size===0)for(const[g,h]of o){h.sort(S.Range.compareRangesUsingStarts);for(const m of d)if(h[0].containsRange(m)){s.set(g,[]);break}}if(s.size===0)return!1;s.forEach((g,h)=>{g.push(...o.get(h))})}d.sort(S.Range.compareRangesUsingStarts);for(const[l,o]of s){if(o.length!==d.length){s.delete(l);continue}o.sort(S.Range.compareRangesUsingStarts);for(let g=0;g<o.length;g++)if(!o[g].containsRange(d[g])){s.delete(l);continue}}return s.size>0}};e.SnippetSession=f,e.SnippetSession=f=t=ke([ge(3,_.ILanguageConfigurationService)],f)}),define(se[196],oe([1,0,2,20,16,10,21,32,18,138,713,15,64,390]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";var t;Object.defineProperty(e,\"__esModule\",{value:!0}),e.SnippetController2=void 0;const r={overwriteBefore:0,overwriteAfter:0,undoStopBefore:!0,undoStopAfter:!0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};let u=t=class{static get(d){return d.getContribution(t.ID)}constructor(d,s,l,o,g){this._editor=d,this._logService=s,this._languageFeaturesService=l,this._languageConfigurationService=g,this._snippetListener=new L.DisposableStore,this._modelVersionId=-1,this._inSnippet=t.InSnippetMode.bindTo(o),this._hasNextTabstop=t.HasNextTabstop.bindTo(o),this._hasPrevTabstop=t.HasPrevTabstop.bindTo(o)}dispose(){var d;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),(d=this._session)===null||d===void 0||d.dispose(),this._snippetListener.dispose()}insert(d,s){try{this._doInsert(d,typeof s>\"u\"?r:{...r,...s})}catch(l){this.cancel(),this._logService.error(l),this._logService.error(\"snippet_error\"),this._logService.error(\"insert_template=\",d),this._logService.error(\"existing_template=\",this._session?this._session._logInfo():\"<no_session>\")}}_doInsert(d,s){var l;if(this._editor.hasModel()){if(this._snippetListener.clear(),s.undoStopBefore&&this._editor.getModel().pushStackElement(),this._session&&typeof d!=\"string\"&&this.cancel(),this._session?((0,k.assertType)(typeof d==\"string\"),this._session.merge(d,s)):(this._modelVersionId=this._editor.getModel().getAlternativeVersionId(),this._session=new n.SnippetSession(this._editor,d,s,this._languageConfigurationService),this._session.insert()),s.undoStopAfter&&this._editor.getModel().pushStackElement(),!((l=this._session)===null||l===void 0)&&l.hasChoice){const o={_debugDisplayName:\"snippetChoiceCompletions\",provideCompletionItems:(D,I)=>{if(!this._session||D!==this._editor.getModel()||!E.Position.equals(this._editor.getPosition(),I))return;const{activeChoice:T}=this._session;if(!T||T.choice.options.length===0)return;const A=D.getValueInRange(T.range),P=!!T.choice.options.find(M=>M.value===A),N=[];for(let M=0;M<T.choice.options.length;M++){const R=T.choice.options[M];N.push({kind:13,label:R.value,insertText:R.value,sortText:\"a\".repeat(M+1),range:T.range,filterText:P?`${A}_${R.value}`:void 0,command:{id:\"jumpToNextSnippetPlaceholder\",title:(0,b.localize)(3,null)}})}return{suggestions:N}}},g=this._editor.getModel();let h,m=!1;const C=()=>{h?.dispose(),m=!1},w=()=>{m||(h=this._languageFeaturesService.completionProvider.register({language:g.getLanguageId(),pattern:g.uri.fsPath,scheme:g.uri.scheme,exclusive:!0},o),this._snippetListener.add(h),m=!0)};this._choiceCompletions={provider:o,enable:w,disable:C}}this._updateState(),this._snippetListener.add(this._editor.onDidChangeModelContent(o=>o.isFlush&&this.cancel())),this._snippetListener.add(this._editor.onDidChangeModel(()=>this.cancel())),this._snippetListener.add(this._editor.onDidChangeCursorSelection(()=>this._updateState()))}}_updateState(){if(!(!this._session||!this._editor.hasModel())){if(this._modelVersionId===this._editor.getModel().getAlternativeVersionId())return this.cancel();if(!this._session.hasPlaceholder)return this.cancel();if(this._session.isAtLastPlaceholder||!this._session.isSelectionWithinPlaceholders())return this._editor.getModel().pushStackElement(),this.cancel();this._inSnippet.set(!0),this._hasPrevTabstop.set(!this._session.isAtFirstPlaceholder),this._hasNextTabstop.set(!this._session.isAtLastPlaceholder),this._handleChoice()}}_handleChoice(){var d;if(!this._session||!this._editor.hasModel()){this._currentChoice=void 0;return}const{activeChoice:s}=this._session;if(!s||!this._choiceCompletions){(d=this._choiceCompletions)===null||d===void 0||d.disable(),this._currentChoice=void 0;return}this._currentChoice!==s.choice&&(this._currentChoice=s.choice,this._choiceCompletions.enable(),queueMicrotask(()=>{(0,v.showSimpleSuggestions)(this._editor,this._choiceCompletions.provider)}))}finish(){for(;this._inSnippet.get();)this.next()}cancel(d=!1){var s;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),this._snippetListener.clear(),this._currentChoice=void 0,(s=this._session)===null||s===void 0||s.dispose(),this._session=void 0,this._modelVersionId=-1,d&&this._editor.setSelections([this._editor.getSelection()])}prev(){var d;(d=this._session)===null||d===void 0||d.prev(),this._updateState()}next(){var d;(d=this._session)===null||d===void 0||d.next(),this._updateState()}isInSnippet(){return!!this._inSnippet.get()}};e.SnippetController2=u,u.ID=\"snippetController2\",u.InSnippetMode=new a.RawContextKey(\"inSnippetMode\",!1,(0,b.localize)(0,null)),u.HasNextTabstop=new a.RawContextKey(\"hasNextTabstop\",!1,(0,b.localize)(1,null)),u.HasPrevTabstop=new a.RawContextKey(\"hasPrevTabstop\",!1,(0,b.localize)(2,null)),e.SnippetController2=u=t=ke([ge(1,i.ILogService),ge(2,_.ILanguageFeaturesService),ge(3,a.IContextKeyService),ge(4,p.ILanguageConfigurationService)],u),(0,y.registerEditorContribution)(u.ID,u,4);const f=y.EditorCommand.bindToContribution(u.get);(0,y.registerEditorCommand)(new f({id:\"jumpToNextSnippetPlaceholder\",precondition:a.ContextKeyExpr.and(u.InSnippetMode,u.HasNextTabstop),handler:c=>c.next(),kbOpts:{weight:100+30,kbExpr:S.EditorContextKeys.editorTextFocus,primary:2}})),(0,y.registerEditorCommand)(new f({id:\"jumpToPrevSnippetPlaceholder\",precondition:a.ContextKeyExpr.and(u.InSnippetMode,u.HasPrevTabstop),handler:c=>c.prev(),kbOpts:{weight:100+30,kbExpr:S.EditorContextKeys.editorTextFocus,primary:1026}})),(0,y.registerEditorCommand)(new f({id:\"leaveSnippet\",precondition:u.InSnippetMode,handler:c=>c.cancel(!0),kbOpts:{weight:100+30,kbExpr:S.EditorContextKeys.editorTextFocus,primary:9,secondary:[1033]}})),(0,y.registerEditorCommand)(new f({id:\"acceptSnippet\",precondition:u.InSnippetMode,handler:c=>c.finish()}))}),define(se[927],oe([1,0,60,12,2,35,20,74,10,5,31,32,217,797,156,196,25,8]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlineCompletionsModel=e.VersionIdChangeReason=void 0;var c;(function(s){s[s.Undo=0]=\"Undo\",s[s.Redo=1]=\"Redo\",s[s.AcceptWord=2]=\"AcceptWord\",s[s.Other=3]=\"Other\"})(c||(e.VersionIdChangeReason=c={}));let d=class extends y.Disposable{get isAcceptingPartially(){return this._isAcceptingPartially}constructor(l,o,g,h,m,C,w,D,I,T,A,P){super(),this.textModel=l,this.selectedSuggestItem=o,this.cursorPosition=g,this.textModelVersionId=h,this._debounceValue=m,this._suggestPreviewEnabled=C,this._suggestPreviewMode=w,this._inlineSuggestMode=D,this._enabled=I,this._instantiationService=T,this._commandService=A,this._languageConfigurationService=P,this._source=this._register(this._instantiationService.createInstance(n.InlineCompletionsSource,this.textModel,this.textModelVersionId,this._debounceValue)),this._isActive=(0,E.observableValue)(this,!1),this._forceUpdateSignal=(0,E.observableSignal)(\"forceUpdate\"),this._selectedInlineCompletionId=(0,E.observableValue)(this,void 0),this._isAcceptingPartially=!1,this._preserveCurrentCompletionReasons=new Set([c.Redo,c.Undo,c.AcceptWord]),this._fetchInlineCompletions=(0,E.derivedHandleChanges)({owner:this,createEmptyChangeSummary:()=>({preserveCurrentCompletion:!1,inlineCompletionTriggerKind:b.InlineCompletionTriggerKind.Automatic}),handleChange:(M,R)=>(M.didChange(this.textModelVersionId)&&this._preserveCurrentCompletionReasons.has(M.change)?R.preserveCurrentCompletion=!0:M.didChange(this._forceUpdateSignal)&&(R.inlineCompletionTriggerKind=M.change),!0)},(M,R)=>{if(this._forceUpdateSignal.read(M),!(this._enabled.read(M)&&this.selectedSuggestItem.read(M)||this._isActive.read(M))){this._source.cancelUpdate();return}this.textModelVersionId.read(M);const O=this.selectedInlineCompletion.get(),B=R.preserveCurrentCompletion||O?.forwardStable?O:void 0,W=this._source.suggestWidgetInlineCompletions.get(),V=this.selectedSuggestItem.read(M);if(W&&!V){const q=this._source.inlineCompletions.get();(0,E.transaction)(ie=>{(!q||W.request.versionId>q.request.versionId)&&this._source.inlineCompletions.set(W.clone(),ie),this._source.clearSuggestWidgetInlineCompletions(ie)})}const K=this.cursorPosition.read(M),F={triggerKind:R.inlineCompletionTriggerKind,selectedSuggestionInfo:V?.toSelectedSuggestionInfo()};return this._source.fetch(K,F,B)}),this._filteredInlineCompletionItems=(0,E.derived)(this,M=>{const R=this._source.inlineCompletions.read(M);if(!R)return[];const x=this.cursorPosition.read(M);return R.inlineCompletions.filter(B=>B.isVisible(this.textModel,x,M))}),this.selectedInlineCompletionIndex=(0,E.derived)(this,M=>{const R=this._selectedInlineCompletionId.read(M),x=this._filteredInlineCompletionItems.read(M),O=this._selectedInlineCompletionId===void 0?-1:x.findIndex(B=>B.semanticId===R);return O===-1?(this._selectedInlineCompletionId.set(void 0,void 0),0):O}),this.selectedInlineCompletion=(0,E.derived)(this,M=>{const R=this._filteredInlineCompletionItems.read(M),x=this.selectedInlineCompletionIndex.read(M);return R[x]}),this.lastTriggerKind=this._source.inlineCompletions.map(this,M=>M?.request.context.triggerKind),this.inlineCompletionsCount=(0,E.derived)(this,M=>{if(this.lastTriggerKind.read(M)===b.InlineCompletionTriggerKind.Explicit)return this._filteredInlineCompletionItems.read(M).length}),this.state=(0,E.derivedOpts)({owner:this,equalityComparer:(M,R)=>!M||!R?M===R:(0,i.ghostTextOrReplacementEquals)(M.ghostText,R.ghostText)&&M.inlineCompletion===R.inlineCompletion&&M.suggestItem===R.suggestItem},M=>{var R;const x=this.textModel,O=this.selectedSuggestItem.read(M);if(O){const B=O.toSingleTextEdit().removeCommonPrefix(x),W=this._computeAugmentedCompletion(B,M);if(!this._suggestPreviewEnabled.read(M)&&!W)return;const K=(R=W?.edit)!==null&&R!==void 0?R:B,F=W?W.edit.text.length-B.text.length:0,q=this._suggestPreviewMode.read(M),ie=this.cursorPosition.read(M),ae=K.computeGhostText(x,q,ie,F);return{ghostText:ae??new i.GhostText(K.range.endLineNumber,[]),inlineCompletion:W?.completion,suggestItem:O}}else{if(!this._isActive.read(M))return;const B=this.selectedInlineCompletion.read(M);if(!B)return;const W=B.toSingleTextEdit(M),V=this._inlineSuggestMode.read(M),K=this.cursorPosition.read(M),F=W.computeGhostText(x,V,K);return F?{ghostText:F,inlineCompletion:B,suggestItem:void 0}:void 0}}),this.ghostText=(0,E.derivedOpts)({owner:this,equalityComparer:i.ghostTextOrReplacementEquals},M=>{const R=this.state.read(M);if(R)return R.ghostText}),this._register((0,E.recomputeInitiallyAndOnChange)(this._fetchInlineCompletions));let N;this._register((0,E.autorun)(M=>{var R,x;const O=this.state.read(M),B=O?.inlineCompletion;if(B?.semanticId!==N?.semanticId&&(N=B,B)){const W=B.inlineCompletion,V=W.source;(x=(R=V.provider).handleItemDidShow)===null||x===void 0||x.call(R,V.inlineCompletions,W.sourceInlineCompletion,W.insertText)}}))}async trigger(l){this._isActive.set(!0,l),await this._fetchInlineCompletions.get()}async triggerExplicitly(l){(0,E.subtransaction)(l,o=>{this._isActive.set(!0,o),this._forceUpdateSignal.trigger(o,b.InlineCompletionTriggerKind.Explicit)}),await this._fetchInlineCompletions.get()}stop(l){(0,E.subtransaction)(l,o=>{this._isActive.set(!1,o),this._source.clear(o)})}_computeAugmentedCompletion(l,o){const g=this.textModel,h=this._source.suggestWidgetInlineCompletions.read(o),m=h?h.inlineCompletions:[this.selectedInlineCompletion.read(o)].filter(S.isDefined);return(0,L.mapFindFirst)(m,w=>{let D=w.toSingleTextEdit(o);return D=D.removeCommonPrefix(g,v.Range.fromPositions(D.range.getStartPosition(),l.range.getEndPosition())),D.augments(l)?{edit:D,completion:w}:void 0})}async _deltaSelectedInlineCompletionIndex(l){await this.triggerExplicitly();const o=this._filteredInlineCompletionItems.get()||[];if(o.length>0){const g=(this.selectedInlineCompletionIndex.get()+l+o.length)%o.length;this._selectedInlineCompletionId.set(o[g].semanticId,void 0)}else this._selectedInlineCompletionId.set(void 0,void 0)}async next(){await this._deltaSelectedInlineCompletionIndex(1)}async previous(){await this._deltaSelectedInlineCompletionIndex(-1)}async accept(l){var o;if(l.getModel()!==this.textModel)throw new k.BugIndicatingError;const g=this.state.get();if(!g||g.ghostText.isEmpty()||!g.inlineCompletion)return;const h=g.inlineCompletion.toInlineCompletion(void 0);l.pushUndoStop(),h.snippetInfo?(l.executeEdits(\"inlineSuggestion.accept\",[p.EditOperation.replaceMove(h.range,\"\"),...h.additionalTextEdits]),l.setPosition(h.snippetInfo.range.getStartPosition(),\"inlineCompletionAccept\"),(o=r.SnippetController2.get(l))===null||o===void 0||o.insert(h.snippetInfo.snippet,{undoStopBefore:!1})):l.executeEdits(\"inlineSuggestion.accept\",[p.EditOperation.replaceMove(h.range,h.insertText),...h.additionalTextEdits]),h.command&&h.source.addRef(),(0,E.transaction)(m=>{this._source.clear(m),this._isActive.set(!1,m)}),h.command&&(await this._commandService.executeCommand(h.command.id,...h.command.arguments||[]).then(void 0,k.onUnexpectedExternalError),h.source.removeRef())}async acceptNextWord(l){await this._acceptNext(l,(o,g)=>{const h=this.textModel.getLanguageIdAtPosition(o.lineNumber,o.column),m=this._languageConfigurationService.getLanguageConfiguration(h),C=new RegExp(m.wordDefinition.source,m.wordDefinition.flags.replace(\"g\",\"\")),w=g.match(C);let D=0;w&&w.index!==void 0?w.index===0?D=w[0].length:D=w.index:D=g.length;const T=/\\s+/g.exec(g);return T&&T.index!==void 0&&T.index+T[0].length<D&&(D=T.index+T[0].length),D})}async acceptNextLine(l){await this._acceptNext(l,(o,g)=>{const h=g.match(/\\n/);return h&&h.index!==void 0?h.index+1:g.length})}async _acceptNext(l,o){if(l.getModel()!==this.textModel)throw new k.BugIndicatingError;const g=this.state.get();if(!g||g.ghostText.isEmpty()||!g.inlineCompletion)return;const h=g.ghostText,m=g.inlineCompletion.toInlineCompletion(void 0);if(m.snippetInfo||m.filterText!==m.insertText){await this.accept(l);return}const C=h.parts[0],w=new _.Position(h.lineNumber,C.column),D=C.lines.join(`\n`),I=o(w,D);if(I===D.length&&h.parts.length===1){this.accept(l);return}const T=D.substring(0,I);m.source.addRef();try{this._isAcceptingPartially=!0;try{l.pushUndoStop(),l.executeEdits(\"inlineSuggestion.accept\",[p.EditOperation.replace(v.Range.fromPositions(w),T)]);const A=(0,t.lengthOfText)(T);l.setPosition((0,t.addPositions)(w,A),\"inlineCompletionPartialAccept\")}finally{this._isAcceptingPartially=!1}if(m.source.provider.handlePartialAccept){const A=v.Range.fromPositions(m.range.getStartPosition(),(0,t.addPositions)(w,(0,t.lengthOfText)(T))),P=l.getModel().getValueInRange(A,1);m.source.provider.handlePartialAccept(m.source.inlineCompletions,m.sourceInlineCompletion,P.length)}}finally{m.source.removeRef()}}handleSuggestAccepted(l){var o,g;const h=l.toSingleTextEdit().removeCommonPrefix(this.textModel),m=this._computeAugmentedCompletion(h,void 0);if(!m)return;const C=m.completion.inlineCompletion;(g=(o=C.source.provider).handlePartialAccept)===null||g===void 0||g.call(o,C.source.inlineCompletions,C.sourceInlineCompletion,h.text.length)}};e.InlineCompletionsModel=d,e.InlineCompletionsModel=d=ke([ge(9,f.IInstantiationService),ge(10,u.ICommandService),ge(11,a.ILanguageConfigurationService)],d)}),define(se[391],oe([1,0,14,19,12,6,2,11,24,121,312,103,27,15,64,81,311,138,18,71,20,240,196,243]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g){\"use strict\";var h;Object.defineProperty(e,\"__esModule\",{value:!0}),e.SuggestModel=e.LineContext=void 0;class m{static shouldAutoTrigger(T){if(!T.hasModel())return!1;const A=T.getModel(),P=T.getPosition();A.tokenization.tokenizeIfCheap(P.lineNumber);const N=A.getWordAtPosition(P);return!(!N||N.endColumn!==P.column&&N.startColumn+1!==P.column||!isNaN(Number(N.word)))}constructor(T,A,P){this.leadingLineContent=T.getLineContent(A.lineNumber).substr(0,A.column-1),this.leadingWord=T.getWordUntilPosition(A),this.lineNumber=A.lineNumber,this.column=A.column,this.triggerOptions=P}}e.LineContext=m;function C(I,T,A){if(!T.getContextKeyValue(l.InlineCompletionContextKeys.inlineSuggestionVisible.key))return!0;const P=T.getContextKeyValue(l.InlineCompletionContextKeys.suppressSuggestions.key);return P!==void 0?!P:!I.getOption(62).suppressSuggestions}function w(I,T,A){if(!T.getContextKeyValue(\"inlineSuggestionVisible\"))return!0;const P=T.getContextKeyValue(l.InlineCompletionContextKeys.suppressSuggestions.key);return P!==void 0?!P:!I.getOption(62).suppressSuggestions}let D=h=class{constructor(T,A,P,N,M,R,x,O,B){this._editor=T,this._editorWorkerService=A,this._clipboardService=P,this._telemetryService=N,this._logService=M,this._contextKeyService=R,this._configurationService=x,this._languageFeaturesService=O,this._envService=B,this._toDispose=new S.DisposableStore,this._triggerCharacterListener=new S.DisposableStore,this._triggerQuickSuggest=new L.TimeoutTimer,this._triggerState=void 0,this._completionDisposables=new S.DisposableStore,this._onDidCancel=new E.Emitter,this._onDidTrigger=new E.Emitter,this._onDidSuggest=new E.Emitter,this.onDidCancel=this._onDidCancel.event,this.onDidTrigger=this._onDidTrigger.event,this.onDidSuggest=this._onDidSuggest.event,this._telemetryGate=0,this._currentSelection=this._editor.getSelection()||new _.Selection(1,1,1,1),this._toDispose.add(this._editor.onDidChangeModel(()=>{this._updateTriggerCharacters(),this.cancel()})),this._toDispose.add(this._editor.onDidChangeModelLanguage(()=>{this._updateTriggerCharacters(),this.cancel()})),this._toDispose.add(this._editor.onDidChangeConfiguration(()=>{this._updateTriggerCharacters()})),this._toDispose.add(this._languageFeaturesService.completionProvider.onDidChange(()=>{this._updateTriggerCharacters(),this._updateActiveSuggestSession()}));let W=!1;this._toDispose.add(this._editor.onDidCompositionStart(()=>{W=!0})),this._toDispose.add(this._editor.onDidCompositionEnd(()=>{W=!1,this._onCompositionEnd()})),this._toDispose.add(this._editor.onDidChangeCursorSelection(V=>{W||this._onCursorChange(V)})),this._toDispose.add(this._editor.onDidChangeModelContent(()=>{!W&&this._triggerState!==void 0&&this._refilterCompletionItems()})),this._updateTriggerCharacters()}dispose(){(0,S.dispose)(this._triggerCharacterListener),(0,S.dispose)([this._onDidCancel,this._onDidSuggest,this._onDidTrigger,this._triggerQuickSuggest]),this._toDispose.dispose(),this._completionDisposables.dispose(),this.cancel()}_updateTriggerCharacters(){if(this._triggerCharacterListener.clear(),this._editor.getOption(90)||!this._editor.hasModel()||!this._editor.getOption(120))return;const T=new Map;for(const P of this._languageFeaturesService.completionProvider.all(this._editor.getModel()))for(const N of P.triggerCharacters||[]){let M=T.get(N);M||(M=new Set,M.add((0,f.getSnippetSuggestSupport)()),T.set(N,M)),M.add(P)}const A=P=>{var N;if(!w(this._editor,this._contextKeyService,this._configurationService)||m.shouldAutoTrigger(this._editor))return;if(!P){const x=this._editor.getPosition();P=this._editor.getModel().getLineContent(x.lineNumber).substr(0,x.column-1)}let M=\"\";(0,p.isLowSurrogate)(P.charCodeAt(P.length-1))?(0,p.isHighSurrogate)(P.charCodeAt(P.length-2))&&(M=P.substr(P.length-2)):M=P.charAt(P.length-1);const R=T.get(M);if(R){const x=new Map;if(this._completionModel)for(const[O,B]of this._completionModel.getItemsByProvider())R.has(O)||x.set(O,B);this.trigger({auto:!0,triggerKind:1,triggerCharacter:M,retrigger:!!this._completionModel,clipboardText:(N=this._completionModel)===null||N===void 0?void 0:N.clipboardText,completionOptions:{providerFilter:R,providerItemsToReuse:x}})}};this._triggerCharacterListener.add(this._editor.onDidType(A)),this._triggerCharacterListener.add(this._editor.onDidCompositionEnd(()=>A()))}get state(){return this._triggerState?this._triggerState.auto?2:1:0}cancel(T=!1){var A;this._triggerState!==void 0&&(this._triggerQuickSuggest.cancel(),(A=this._requestToken)===null||A===void 0||A.cancel(),this._requestToken=void 0,this._triggerState=void 0,this._completionModel=void 0,this._context=void 0,this._onDidCancel.fire({retrigger:T}))}clear(){this._completionDisposables.clear()}_updateActiveSuggestSession(){this._triggerState!==void 0&&(!this._editor.hasModel()||!this._languageFeaturesService.completionProvider.has(this._editor.getModel())?this.cancel():this.trigger({auto:this._triggerState.auto,retrigger:!0}))}_onCursorChange(T){if(!this._editor.hasModel())return;const A=this._currentSelection;if(this._currentSelection=this._editor.getSelection(),!T.selection.isEmpty()||T.reason!==0&&T.reason!==3||T.source!==\"keyboard\"&&T.source!==\"deleteLeft\"){this.cancel();return}this._triggerState===void 0&&T.reason===0?(A.containsRange(this._currentSelection)||A.getEndPosition().isBeforeOrEqual(this._currentSelection.getPosition()))&&this._doTriggerQuickSuggest():this._triggerState!==void 0&&T.reason===3&&this._refilterCompletionItems()}_onCompositionEnd(){this._triggerState===void 0?this._doTriggerQuickSuggest():this._refilterCompletionItems()}_doTriggerQuickSuggest(){var T;f.QuickSuggestionsOptions.isAllOff(this._editor.getOption(88))||this._editor.getOption(117).snippetsPreventQuickSuggestions&&(!((T=o.SnippetController2.get(this._editor))===null||T===void 0)&&T.isInSnippet())||(this.cancel(),this._triggerQuickSuggest.cancelAndSet(()=>{if(this._triggerState!==void 0||!m.shouldAutoTrigger(this._editor)||!this._editor.hasModel()||!this._editor.hasWidgetFocus())return;const A=this._editor.getModel(),P=this._editor.getPosition(),N=this._editor.getOption(88);if(!f.QuickSuggestionsOptions.isAllOff(N)){if(!f.QuickSuggestionsOptions.isAllOn(N)){A.tokenization.tokenizeIfCheap(P.lineNumber);const M=A.tokenization.getLineTokens(P.lineNumber),R=M.getStandardTokenType(M.findTokenIndexAtOffset(Math.max(P.column-1-1,0)));if(f.QuickSuggestionsOptions.valueFor(N,R)!==\"on\")return}C(this._editor,this._contextKeyService,this._configurationService)&&this._languageFeaturesService.completionProvider.has(A)&&this.trigger({auto:!0})}},this._editor.getOption(89)))}_refilterCompletionItems(){(0,s.assertType)(this._editor.hasModel()),(0,s.assertType)(this._triggerState!==void 0);const T=this._editor.getModel(),A=this._editor.getPosition(),P=new m(T,A,{...this._triggerState,refilter:!0});this._onNewContext(P)}trigger(T){var A,P,N,M,R,x;if(!this._editor.hasModel())return;const O=this._editor.getModel(),B=new m(O,this._editor.getPosition(),T);this.cancel(T.retrigger),this._triggerState=T,this._onDidTrigger.fire({auto:T.auto,shy:(A=T.shy)!==null&&A!==void 0?A:!1,position:this._editor.getPosition()}),this._context=B;let W={triggerKind:(P=T.triggerKind)!==null&&P!==void 0?P:0};T.triggerCharacter&&(W={triggerKind:1,triggerCharacter:T.triggerCharacter}),this._requestToken=new k.CancellationTokenSource;const V=this._editor.getOption(111);let K=1;switch(V){case\"top\":K=0;break;case\"bottom\":K=2;break}const{itemKind:F,showDeprecated:q}=h.createSuggestFilter(this._editor),ie=new f.CompletionOptions(K,(M=(N=T.completionOptions)===null||N===void 0?void 0:N.kindFilter)!==null&&M!==void 0?M:F,(R=T.completionOptions)===null||R===void 0?void 0:R.providerFilter,(x=T.completionOptions)===null||x===void 0?void 0:x.providerItemsToReuse,q),ae=b.WordDistance.create(this._editorWorkerService,this._editor),ne=(0,f.provideSuggestionItems)(this._languageFeaturesService.completionProvider,O,this._editor.getPosition(),ie,W,this._requestToken.token);Promise.all([ne,ae]).then(async([$,J])=>{var Q;if((Q=this._requestToken)===null||Q===void 0||Q.dispose(),!this._editor.hasModel())return;let re=T?.clipboardText;if(!re&&$.needsClipboard&&(re=await this._clipboardService.readText()),this._triggerState===void 0)return;const de=this._editor.getModel(),he=new m(de,this._editor.getPosition(),T),me={...d.FuzzyScoreOptions.default,firstMatchCanBeWeak:!this._editor.getOption(117).matchOnWordStartOnly};if(this._completionModel=new u.CompletionModel($.items,this._context.column,{leadingLineContent:he.leadingLineContent,characterCountDelta:he.column-this._context.column},J,this._editor.getOption(117),this._editor.getOption(111),me,re),this._completionDisposables.add($.disposable),this._onNewContext(he),this._reportDurationsTelemetry($.durations),!this._envService.isBuilt||this._envService.isExtensionDevelopment)for(const X of $.items)X.isInvalid&&this._logService.warn(`[suggest] did IGNORE invalid completion item from ${X.provider._debugDisplayName}`,X.completion)}).catch(y.onUnexpectedError)}_reportDurationsTelemetry(T){this._telemetryGate++%230===0&&setTimeout(()=>{this._telemetryService.publicLog2(\"suggest.durations.json\",{data:JSON.stringify(T)}),this._logService.debug(\"suggest.durations.json\",T)})}static createSuggestFilter(T){const A=new Set;T.getOption(111)===\"none\"&&A.add(27);const N=T.getOption(117);return N.showMethods||A.add(0),N.showFunctions||A.add(1),N.showConstructors||A.add(2),N.showFields||A.add(3),N.showVariables||A.add(4),N.showClasses||A.add(5),N.showStructs||A.add(6),N.showInterfaces||A.add(7),N.showModules||A.add(8),N.showProperties||A.add(9),N.showEvents||A.add(10),N.showOperators||A.add(11),N.showUnits||A.add(12),N.showValues||A.add(13),N.showConstants||A.add(14),N.showEnums||A.add(15),N.showEnumMembers||A.add(16),N.showKeywords||A.add(17),N.showWords||A.add(18),N.showColors||A.add(19),N.showFiles||A.add(20),N.showReferences||A.add(21),N.showColors||A.add(22),N.showFolders||A.add(23),N.showTypeParameters||A.add(24),N.showSnippets||A.add(27),N.showUsers||A.add(25),N.showIssues||A.add(26),{itemKind:A,showDeprecated:N.showDeprecated}}_onNewContext(T){if(this._context){if(T.lineNumber!==this._context.lineNumber){this.cancel();return}if((0,p.getLeadingWhitespace)(T.leadingLineContent)!==(0,p.getLeadingWhitespace)(this._context.leadingLineContent)){this.cancel();return}if(T.column<this._context.column){T.leadingWord.word?this.trigger({auto:this._context.triggerOptions.auto,retrigger:!0}):this.cancel();return}if(this._completionModel){if(T.leadingWord.word.length!==0&&T.leadingWord.startColumn>this._context.leadingWord.startColumn){if(m.shouldAutoTrigger(this._editor)&&this._context){const P=this._completionModel.getItemsByProvider();this.trigger({auto:this._context.triggerOptions.auto,retrigger:!0,clipboardText:this._completionModel.clipboardText,completionOptions:{providerItemsToReuse:P}})}return}if(T.column>this._context.column&&this._completionModel.getIncompleteProvider().size>0&&T.leadingWord.word.length!==0){const A=new Map,P=new Set;for(const[N,M]of this._completionModel.getItemsByProvider())M.length>0&&M[0].container.incomplete?P.add(N):A.set(N,M);this.trigger({auto:this._context.triggerOptions.auto,triggerKind:2,retrigger:!0,clipboardText:this._completionModel.clipboardText,completionOptions:{providerFilter:P,providerItemsToReuse:A}})}else{const A=this._completionModel.lineContext;let P=!1;if(this._completionModel.lineContext={leadingLineContent:T.leadingLineContent,characterCountDelta:T.column-this._context.column},this._completionModel.items.length===0){const N=m.shouldAutoTrigger(this._editor);if(!this._context){this.cancel();return}if(N&&this._context.leadingWord.endColumn<T.leadingWord.startColumn){this.trigger({auto:this._context.triggerOptions.auto,retrigger:!0});return}if(this._context.triggerOptions.auto){this.cancel();return}else if(this._completionModel.lineContext=A,P=this._completionModel.items.length>0,P&&T.leadingWord.word.length===0){this.cancel();return}}this._onDidSuggest.fire({completionModel:this._completionModel,triggerOptions:T.triggerOptions,isFrozen:P})}}}}};e.SuggestModel=D,e.SuggestModel=D=h=ke([ge(1,v.IEditorWorkerService),ge(2,a.IClipboardService),ge(3,r.ITelemetryService),ge(4,t.ILogService),ge(5,n.IContextKeyService),ge(6,i.IConfigurationService),ge(7,c.ILanguageFeaturesService),ge(8,g.IEnvironmentService)],D)}),define(se[392],oe([1,0,48,13,19,12,6,125,2,17,61,20,127,16,74,10,5,21,196,117,358,770,717,25,15,8,64,138,769,563,391,564,909,81,49,111,7,38]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P,N,M,R,x,O){\"use strict\";var B;Object.defineProperty(e,\"__esModule\",{value:!0}),e.TriggerSuggestAction=e.SuggestController=void 0;const W=!1;class V{constructor($,J){if(this._model=$,this._position=J,this._decorationOptions=O.ModelDecorationOptions.register({description:\"suggest-line-suffix\",stickiness:1}),$.getLineMaxColumn(J.lineNumber)!==J.column){const re=$.getOffsetAt(J),de=$.getPositionAt(re+1);$.changeDecorations(he=>{this._marker&&he.removeDecoration(this._marker),this._marker=he.addDecoration(u.Range.fromPositions(J,de),this._decorationOptions)})}}dispose(){this._marker&&!this._model.isDisposed()&&this._model.changeDecorations($=>{$.removeDecoration(this._marker),this._marker=void 0})}delta($){if(this._model.isDisposed()||this._position.lineNumber!==$.lineNumber)return 0;if(this._marker){const J=this._model.getDecorationRange(this._marker);return this._model.getOffsetAt(J.getStartPosition())-this._model.getOffsetAt($)}else return this._model.getLineMaxColumn($.lineNumber)-$.column}}let K=B=class{static get($){return $.getContribution(B.ID)}constructor($,J,Q,re,de,he,me){this._memoryService=J,this._commandService=Q,this._contextKeyService=re,this._instantiationService=de,this._logService=he,this._telemetryService=me,this._lineSuffix=new _.MutableDisposable,this._toDispose=new _.DisposableStore,this._selectors=new F(z=>z.priority),this._onWillInsertSuggestItem=new S.Emitter,this.onWillInsertSuggestItem=this._onWillInsertSuggestItem.event,this.editor=$,this.model=de.createInstance(T.SuggestModel,this.editor),this._selectors.register({priority:0,select:(z,H,Y)=>this._memoryService.select(z,H,Y)});const X=w.Context.InsertMode.bindTo(re);X.set($.getOption(117).insertMode),this._toDispose.add(this.model.onDidTrigger(()=>X.set($.getOption(117).insertMode))),this.widget=this._toDispose.add(new x.WindowIdleValue((0,x.getWindow)($.getDomNode()),()=>{const z=this._instantiationService.createInstance(P.SuggestWidget,this.editor);this._toDispose.add(z),this._toDispose.add(z.onDidSelect(ee=>this._insertSuggestion(ee,0),this));const H=new I.CommitCharacterController(this.editor,z,this.model,ee=>this._insertSuggestion(ee,2));this._toDispose.add(H);const Y=w.Context.MakesTextEdit.bindTo(this._contextKeyService),j=w.Context.HasInsertAndReplaceRange.bindTo(this._contextKeyService),Z=w.Context.CanResolve.bindTo(this._contextKeyService);return this._toDispose.add((0,_.toDisposable)(()=>{Y.reset(),j.reset(),Z.reset()})),this._toDispose.add(z.onDidFocus(({item:ee})=>{const le=this.editor.getPosition(),ue=ee.editStart.column,ce=le.column;let pe=!0;this.editor.getOption(1)===\"smart\"&&this.model.state===2&&!ee.completion.additionalTextEdits&&!(ee.completion.insertTextRules&4)&&ce-ue===ee.completion.insertText.length&&(pe=this.editor.getModel().getValueInRange({startLineNumber:le.lineNumber,startColumn:ue,endLineNumber:le.lineNumber,endColumn:ce})!==ee.completion.insertText),Y.set(pe),j.set(!r.Position.equals(ee.editInsertEnd,ee.editReplaceEnd)),Z.set(!!ee.provider.resolveCompletionItem||!!ee.completion.documentation||ee.completion.detail!==ee.completion.label)})),this._toDispose.add(z.onDetailsKeyDown(ee=>{if(ee.toKeyCodeChord().equals(new p.KeyCodeChord(!0,!1,!1,!1,33))||v.isMacintosh&&ee.toKeyCodeChord().equals(new p.KeyCodeChord(!1,!1,!1,!0,33))){ee.stopPropagation();return}ee.toKeyCodeChord().isModifierKey()||this.editor.focus()})),z})),this._overtypingCapturer=this._toDispose.add(new x.WindowIdleValue((0,x.getWindow)($.getDomNode()),()=>this._toDispose.add(new A.OvertypingCapturer(this.editor,this.model)))),this._alternatives=this._toDispose.add(new x.WindowIdleValue((0,x.getWindow)($.getDomNode()),()=>this._toDispose.add(new D.SuggestAlternatives(this.editor,this._contextKeyService)))),this._toDispose.add(de.createInstance(l.WordContextKey,$)),this._toDispose.add(this.model.onDidTrigger(z=>{this.widget.value.showTriggered(z.auto,z.shy?250:50),this._lineSuffix.value=new V(this.editor.getModel(),z.position)})),this._toDispose.add(this.model.onDidSuggest(z=>{if(z.triggerOptions.shy)return;let H=-1;for(const j of this._selectors.itemsOrderedByPriorityDesc)if(H=j.select(this.editor.getModel(),this.editor.getPosition(),z.completionModel.items),H!==-1)break;if(H===-1&&(H=0),this.model.state===0)return;let Y=!1;if(z.triggerOptions.auto){const j=this.editor.getOption(117);j.selectionMode===\"never\"||j.selectionMode===\"always\"?Y=j.selectionMode===\"never\":j.selectionMode===\"whenTriggerCharacter\"?Y=z.triggerOptions.triggerKind!==1:j.selectionMode===\"whenQuickSuggestion\"&&(Y=z.triggerOptions.triggerKind===1&&!z.triggerOptions.refilter)}this.widget.value.showSuggestions(z.completionModel,H,z.isFrozen,z.triggerOptions.auto,Y)})),this._toDispose.add(this.model.onDidCancel(z=>{z.retrigger||this.widget.value.hideWidget()})),this._toDispose.add(this.editor.onDidBlurEditorWidget(()=>{W||(this.model.cancel(),this.model.clear())}));const U=w.Context.AcceptSuggestionsOnEnter.bindTo(re),G=()=>{const z=this.editor.getOption(1);U.set(z===\"on\"||z===\"smart\")};this._toDispose.add(this.editor.onDidChangeConfiguration(()=>G())),G()}dispose(){this._alternatives.dispose(),this._toDispose.dispose(),this.widget.dispose(),this.model.dispose(),this._lineSuffix.dispose(),this._onWillInsertSuggestItem.dispose()}_insertSuggestion($,J){if(!$||!$.item){this._alternatives.value.reset(),this.model.cancel(),this.model.clear();return}if(!this.editor.hasModel())return;const Q=c.SnippetController2.get(this.editor);if(!Q)return;this._onWillInsertSuggestItem.fire({item:$.item});const re=this.editor.getModel(),de=re.getAlternativeVersionId(),{item:he}=$,me=[],X=new y.CancellationTokenSource;J&1||this.editor.pushUndoStop();const U=this.getOverwriteInfo(he,!!(J&8));this._memoryService.memorize(re,this.editor.getPosition(),he);const G=he.isResolved;let z=-1,H=-1;if(Array.isArray(he.completion.additionalTextEdits)){this.model.cancel();const j=i.StableEditorScrollState.capture(this.editor);this.editor.executeEdits(\"suggestController.additionalTextEdits.sync\",he.completion.additionalTextEdits.map(Z=>{let ee=u.Range.lift(Z.range);if(ee.startLineNumber===he.position.lineNumber&&ee.startColumn>he.position.column){const le=this.editor.getPosition().column-he.position.column,ue=le,ce=u.Range.spansMultipleLines(ee)?0:le;ee=new u.Range(ee.startLineNumber,ee.startColumn+ue,ee.endLineNumber,ee.endColumn+ce)}return t.EditOperation.replaceMove(ee,Z.text)})),j.restoreRelativeVerticalPositionOfCursor(this.editor)}else if(!G){const j=new b.StopWatch;let Z;const ee=re.onDidChangeContent(pe=>{if(pe.isFlush){X.cancel(),ee.dispose();return}for(const ve of pe.changes){const Ce=u.Range.getEndPosition(ve.range);(!Z||r.Position.isBefore(Ce,Z))&&(Z=Ce)}}),le=J;J|=2;let ue=!1;const ce=this.editor.onWillType(()=>{ce.dispose(),ue=!0,le&2||this.editor.pushUndoStop()});me.push(he.resolve(X.token).then(()=>{if(!he.completion.additionalTextEdits||X.token.isCancellationRequested)return;if(Z&&he.completion.additionalTextEdits.some(ve=>r.Position.isBefore(Z,u.Range.getStartPosition(ve.range))))return!1;ue&&this.editor.pushUndoStop();const pe=i.StableEditorScrollState.capture(this.editor);return this.editor.executeEdits(\"suggestController.additionalTextEdits.async\",he.completion.additionalTextEdits.map(ve=>t.EditOperation.replaceMove(u.Range.lift(ve.range),ve.text))),pe.restoreRelativeVerticalPositionOfCursor(this.editor),(ue||!(le&2))&&this.editor.pushUndoStop(),!0}).then(pe=>{this._logService.trace(\"[suggest] async resolving of edits DONE (ms, applied?)\",j.elapsed(),pe),H=pe===!0?1:pe===!1?0:-2}).finally(()=>{ee.dispose(),ce.dispose()}))}let{insertText:Y}=he.completion;if(he.completion.insertTextRules&4||(Y=d.SnippetParser.escape(Y)),this.model.cancel(),Q.insert(Y,{overwriteBefore:U.overwriteBefore,overwriteAfter:U.overwriteAfter,undoStopBefore:!1,undoStopAfter:!1,adjustWhitespace:!(he.completion.insertTextRules&1),clipboardText:$.model.clipboardText,overtypingCapturer:this._overtypingCapturer.value}),J&2||this.editor.pushUndoStop(),he.completion.command)if(he.completion.command.id===q.id)this.model.trigger({auto:!0,retrigger:!0});else{const j=new b.StopWatch;me.push(this._commandService.executeCommand(he.completion.command.id,...he.completion.command.arguments?[...he.completion.command.arguments]:[]).catch(Z=>{he.completion.extensionId?(0,E.onUnexpectedExternalError)(Z):(0,E.onUnexpectedError)(Z)}).finally(()=>{z=j.elapsed()}))}J&4&&this._alternatives.value.set($,j=>{for(X.cancel();re.canUndo();){de!==re.getAlternativeVersionId()&&re.undo(),this._insertSuggestion(j,3|(J&8?8:0));break}}),this._alertCompletionItem(he),Promise.all(me).finally(()=>{this._reportSuggestionAcceptedTelemetry(he,re,G,z,H),this.model.clear(),X.dispose()})}_reportSuggestionAcceptedTelemetry($,J,Q,re,de){var he,me,X;Math.floor(Math.random()*100)!==0&&this._telemetryService.publicLog2(\"suggest.acceptedSuggestion\",{extensionId:(me=(he=$.extensionId)===null||he===void 0?void 0:he.value)!==null&&me!==void 0?me:\"unknown\",providerId:(X=$.provider._debugDisplayName)!==null&&X!==void 0?X:\"unknown\",kind:$.completion.kind,basenameHash:(0,R.hash)((0,M.basename)(J.uri)).toString(16),languageId:J.getLanguageId(),fileExtension:(0,M.extname)(J.uri),resolveInfo:$.provider.resolveCompletionItem?Q?1:0:-1,resolveDuration:$.resolveDuration,commandDuration:re,additionalEditsAsync:de})}getOverwriteInfo($,J){(0,a.assertType)(this.editor.hasModel());let Q=this.editor.getOption(117).insertMode===\"replace\";J&&(Q=!Q);const re=$.position.column-$.editStart.column,de=(Q?$.editReplaceEnd.column:$.editInsertEnd.column)-$.position.column,he=this.editor.getPosition().column-$.position.column,me=this._lineSuffix.value?this._lineSuffix.value.delta(this.editor.getPosition()):0;return{overwriteBefore:re+he,overwriteAfter:de+me}}_alertCompletionItem($){if((0,k.isNonEmptyArray)($.completion.additionalTextEdits)){const J=o.localize(0,null,$.textLabel,$.completion.additionalTextEdits.length);(0,L.alert)(J)}}triggerSuggest($,J,Q){this.editor.hasModel()&&(this.model.trigger({auto:J??!1,completionOptions:{providerFilter:$,kindFilter:Q?new Set:void 0}}),this.editor.revealPosition(this.editor.getPosition(),0),this.editor.focus())}triggerSuggestAndAcceptBest($){if(!this.editor.hasModel())return;const J=this.editor.getPosition(),Q=()=>{J.equals(this.editor.getPosition())&&this._commandService.executeCommand($.fallback)},re=de=>{if(de.completion.insertTextRules&4||de.completion.additionalTextEdits)return!0;const he=this.editor.getPosition(),me=de.editStart.column,X=he.column;return X-me!==de.completion.insertText.length?!0:this.editor.getModel().getValueInRange({startLineNumber:he.lineNumber,startColumn:me,endLineNumber:he.lineNumber,endColumn:X})!==de.completion.insertText};S.Event.once(this.model.onDidTrigger)(de=>{const he=[];S.Event.any(this.model.onDidTrigger,this.model.onDidCancel)(()=>{(0,_.dispose)(he),Q()},void 0,he),this.model.onDidSuggest(({completionModel:me})=>{if((0,_.dispose)(he),me.items.length===0){Q();return}const X=this._memoryService.select(this.editor.getModel(),this.editor.getPosition(),me.items),U=me.items[X];if(!re(U)){Q();return}this.editor.pushUndoStop(),this._insertSuggestion({index:X,item:U,model:me},7)},void 0,he)}),this.model.trigger({auto:!1,shy:!0}),this.editor.revealPosition(J,0),this.editor.focus()}acceptSelectedSuggestion($,J){const Q=this.widget.value.getFocusedItem();let re=0;$&&(re|=4),J&&(re|=8),this._insertSuggestion(Q,re)}acceptNextSuggestion(){this._alternatives.value.next()}acceptPrevSuggestion(){this._alternatives.value.prev()}cancelSuggestWidget(){this.model.cancel(),this.model.clear(),this.widget.value.hideWidget()}focusSuggestion(){this.widget.value.focusSelected()}selectNextSuggestion(){this.widget.value.selectNext()}selectNextPageSuggestion(){this.widget.value.selectNextPage()}selectLastSuggestion(){this.widget.value.selectLast()}selectPrevSuggestion(){this.widget.value.selectPrevious()}selectPrevPageSuggestion(){this.widget.value.selectPreviousPage()}selectFirstSuggestion(){this.widget.value.selectFirst()}toggleSuggestionDetails(){this.widget.value.toggleDetails()}toggleExplainMode(){this.widget.value.toggleExplainMode()}toggleSuggestionFocus(){this.widget.value.toggleDetailsFocus()}resetWidgetSize(){this.widget.value.resetPersistedSize()}forceRenderingAbove(){this.widget.value.forceRenderingAbove()}stopForceRenderingAbove(){this.widget.isInitialized&&this.widget.value.stopForceRenderingAbove()}registerSelector($){return this._selectors.register($)}};e.SuggestController=K,K.ID=\"editor.contrib.suggestController\",e.SuggestController=K=B=ke([ge(1,s.ISuggestMemoryService),ge(2,g.ICommandService),ge(3,h.IContextKeyService),ge(4,m.IInstantiationService),ge(5,C.ILogService),ge(6,N.ITelemetryService)],K);class F{constructor($){this.prioritySelector=$,this._items=new Array}register($){if(this._items.indexOf($)!==-1)throw new Error(\"Value is already registered\");return this._items.push($),this._items.sort((J,Q)=>this.prioritySelector(Q)-this.prioritySelector(J)),{dispose:()=>{const J=this._items.indexOf($);J>=0&&this._items.splice(J,1)}}}get itemsOrderedByPriorityDesc(){return this._items}}class q extends n.EditorAction{constructor(){super({id:q.id,label:o.localize(1,null),alias:\"Trigger Suggest\",precondition:h.ContextKeyExpr.and(f.EditorContextKeys.writable,f.EditorContextKeys.hasCompletionItemProvider,w.Context.Visible.toNegated()),kbOpts:{kbExpr:f.EditorContextKeys.textInputFocus,primary:2058,secondary:[2087],mac:{primary:266,secondary:[521,2087]},weight:100}})}run($,J,Q){const re=K.get(J);if(!re)return;let de;Q&&typeof Q==\"object\"&&Q.auto===!0&&(de=!0),re.triggerSuggest(void 0,de,void 0)}}e.TriggerSuggestAction=q,q.id=\"editor.action.triggerSuggest\",(0,n.registerEditorContribution)(K.ID,K,2),(0,n.registerEditorAction)(q);const ie=100+90,ae=n.EditorCommand.bindToContribution(K.get);(0,n.registerEditorCommand)(new ae({id:\"acceptSelectedSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,w.Context.HasFocusedSuggestion),handler(ne){ne.acceptSelectedSuggestion(!0,!1)},kbOpts:[{primary:2,kbExpr:h.ContextKeyExpr.and(w.Context.Visible,f.EditorContextKeys.textInputFocus),weight:ie},{primary:3,kbExpr:h.ContextKeyExpr.and(w.Context.Visible,f.EditorContextKeys.textInputFocus,w.Context.AcceptSuggestionsOnEnter,w.Context.MakesTextEdit),weight:ie}],menuOpts:[{menuId:w.suggestWidgetStatusbarMenu,title:o.localize(2,null),group:\"left\",order:1,when:w.Context.HasInsertAndReplaceRange.toNegated()},{menuId:w.suggestWidgetStatusbarMenu,title:o.localize(3,null),group:\"left\",order:1,when:h.ContextKeyExpr.and(w.Context.HasInsertAndReplaceRange,w.Context.InsertMode.isEqualTo(\"insert\"))},{menuId:w.suggestWidgetStatusbarMenu,title:o.localize(4,null),group:\"left\",order:1,when:h.ContextKeyExpr.and(w.Context.HasInsertAndReplaceRange,w.Context.InsertMode.isEqualTo(\"replace\"))}]})),(0,n.registerEditorCommand)(new ae({id:\"acceptAlternativeSelectedSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,f.EditorContextKeys.textInputFocus,w.Context.HasFocusedSuggestion),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:1027,secondary:[1026]},handler(ne){ne.acceptSelectedSuggestion(!1,!0)},menuOpts:[{menuId:w.suggestWidgetStatusbarMenu,group:\"left\",order:2,when:h.ContextKeyExpr.and(w.Context.HasInsertAndReplaceRange,w.Context.InsertMode.isEqualTo(\"insert\")),title:o.localize(5,null)},{menuId:w.suggestWidgetStatusbarMenu,group:\"left\",order:2,when:h.ContextKeyExpr.and(w.Context.HasInsertAndReplaceRange,w.Context.InsertMode.isEqualTo(\"replace\")),title:o.localize(6,null)}]})),g.CommandsRegistry.registerCommandAlias(\"acceptSelectedSuggestionOnEnter\",\"acceptSelectedSuggestion\"),(0,n.registerEditorCommand)(new ae({id:\"hideSuggestWidget\",precondition:w.Context.Visible,handler:ne=>ne.cancelSuggestWidget(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:9,secondary:[1033]}})),(0,n.registerEditorCommand)(new ae({id:\"selectNextSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectNextSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:18,secondary:[2066],mac:{primary:18,secondary:[2066,300]}}})),(0,n.registerEditorCommand)(new ae({id:\"selectNextPageSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectNextPageSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:12,secondary:[2060]}})),(0,n.registerEditorCommand)(new ae({id:\"selectLastSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectLastSuggestion()})),(0,n.registerEditorCommand)(new ae({id:\"selectPrevSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectPrevSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:16,secondary:[2064],mac:{primary:16,secondary:[2064,302]}}})),(0,n.registerEditorCommand)(new ae({id:\"selectPrevPageSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectPrevPageSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:11,secondary:[2059]}})),(0,n.registerEditorCommand)(new ae({id:\"selectFirstSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectFirstSuggestion()})),(0,n.registerEditorCommand)(new ae({id:\"focusSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,w.Context.HasFocusedSuggestion.negate()),handler:ne=>ne.focusSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:2058,secondary:[2087],mac:{primary:266,secondary:[2087]}}})),(0,n.registerEditorCommand)(new ae({id:\"focusAndAcceptSuggestion\",precondition:h.ContextKeyExpr.and(w.Context.Visible,w.Context.HasFocusedSuggestion.negate()),handler:ne=>{ne.focusSuggestion(),ne.acceptSelectedSuggestion(!0,!1)}})),(0,n.registerEditorCommand)(new ae({id:\"toggleSuggestionDetails\",precondition:h.ContextKeyExpr.and(w.Context.Visible,w.Context.HasFocusedSuggestion),handler:ne=>ne.toggleSuggestionDetails(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:2058,secondary:[2087],mac:{primary:266,secondary:[2087]}},menuOpts:[{menuId:w.suggestWidgetStatusbarMenu,group:\"right\",order:1,when:h.ContextKeyExpr.and(w.Context.DetailsVisible,w.Context.CanResolve),title:o.localize(7,null)},{menuId:w.suggestWidgetStatusbarMenu,group:\"right\",order:1,when:h.ContextKeyExpr.and(w.Context.DetailsVisible.toNegated(),w.Context.CanResolve),title:o.localize(8,null)}]})),(0,n.registerEditorCommand)(new ae({id:\"toggleExplainMode\",precondition:w.Context.Visible,handler:ne=>ne.toggleExplainMode(),kbOpts:{weight:100,primary:2138}})),(0,n.registerEditorCommand)(new ae({id:\"toggleSuggestionFocus\",precondition:w.Context.Visible,handler:ne=>ne.toggleSuggestionFocus(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:2570,mac:{primary:778}}})),(0,n.registerEditorCommand)(new ae({id:\"insertBestCompletion\",precondition:h.ContextKeyExpr.and(f.EditorContextKeys.textInputFocus,h.ContextKeyExpr.equals(\"config.editor.tabCompletion\",\"on\"),l.WordContextKey.AtEnd,w.Context.Visible.toNegated(),D.SuggestAlternatives.OtherSuggestions.toNegated(),c.SnippetController2.InSnippetMode.toNegated()),handler:(ne,$)=>{ne.triggerSuggestAndAcceptBest((0,a.isObject)($)?{fallback:\"tab\",...$}:{fallback:\"tab\"})},kbOpts:{weight:ie,primary:2}})),(0,n.registerEditorCommand)(new ae({id:\"insertNextSuggestion\",precondition:h.ContextKeyExpr.and(f.EditorContextKeys.textInputFocus,h.ContextKeyExpr.equals(\"config.editor.tabCompletion\",\"on\"),D.SuggestAlternatives.OtherSuggestions,w.Context.Visible.toNegated(),c.SnippetController2.InSnippetMode.toNegated()),handler:ne=>ne.acceptNextSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:2}})),(0,n.registerEditorCommand)(new ae({id:\"insertPrevSuggestion\",precondition:h.ContextKeyExpr.and(f.EditorContextKeys.textInputFocus,h.ContextKeyExpr.equals(\"config.editor.tabCompletion\",\"on\"),D.SuggestAlternatives.OtherSuggestions,w.Context.Visible.toNegated(),c.SnippetController2.InSnippetMode.toNegated()),handler:ne=>ne.acceptPrevSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:1026}})),(0,n.registerEditorAction)(class extends n.EditorAction{constructor(){super({id:\"editor.action.resetSuggestSize\",label:o.localize(9,null),alias:\"Reset Suggest Widget Size\",precondition:void 0})}run(ne,$){var J;(J=K.get($))===null||J===void 0||J.resetWidgetSize()}})}),define(se[928],oe([1,0,6,2,10,5,31,117,390,392,35,307,13,60]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SuggestItemInfo=e.SuggestWidgetAdaptor=void 0;class t extends k.Disposable{get selectedItem(){return this._selectedItem}constructor(c,d,s,l){super(),this.editor=c,this.suggestControllerPreselector=d,this.checkModelVersion=s,this.onWillAccept=l,this.isSuggestWidgetVisible=!1,this.isShiftKeyPressed=!1,this._isActive=!1,this._currentSuggestItemInfo=void 0,this._selectedItem=(0,b.observableValue)(this,void 0),this._register(c.onKeyDown(g=>{g.shiftKey&&!this.isShiftKeyPressed&&(this.isShiftKeyPressed=!0,this.update(this._isActive))})),this._register(c.onKeyUp(g=>{g.shiftKey&&this.isShiftKeyPressed&&(this.isShiftKeyPressed=!1,this.update(this._isActive))}));const o=v.SuggestController.get(this.editor);if(o){this._register(o.registerSelector({priority:100,select:(m,C,w)=>{var D;(0,b.transaction)(M=>this.checkModelVersion(M));const I=this.editor.getModel();if(!I)return-1;const T=(D=this.suggestControllerPreselector())===null||D===void 0?void 0:D.removeCommonPrefix(I);if(!T)return-1;const A=y.Position.lift(C),P=w.map((M,R)=>{const O=r.fromSuggestion(o,I,A,M,this.isShiftKeyPressed).toSingleTextEdit().removeCommonPrefix(I),B=T.augments(O);return{index:R,valid:B,prefixLength:O.text.length,suggestItem:M}}).filter(M=>M&&M.valid&&M.prefixLength>0),N=(0,n.findFirstMaxBy)(P,(0,i.compareBy)(M=>M.prefixLength,i.numberComparator));return N?N.index:-1}}));let g=!1;const h=()=>{g||(g=!0,this._register(o.widget.value.onDidShow(()=>{this.isSuggestWidgetVisible=!0,this.update(!0)})),this._register(o.widget.value.onDidHide(()=>{this.isSuggestWidgetVisible=!1,this.update(!1)})),this._register(o.widget.value.onDidFocus(()=>{this.isSuggestWidgetVisible=!0,this.update(!0)})))};this._register(L.Event.once(o.model.onDidTrigger)(m=>{h()})),this._register(o.onWillInsertSuggestItem(m=>{const C=this.editor.getPosition(),w=this.editor.getModel();if(!C||!w)return;const D=r.fromSuggestion(o,w,C,m.item,this.isShiftKeyPressed);this.onWillAccept(D)}))}this.update(this._isActive)}update(c){const d=this.getSuggestItemInfo();(this._isActive!==c||!u(this._currentSuggestItemInfo,d))&&(this._isActive=c,this._currentSuggestItemInfo=d,(0,b.transaction)(s=>{this.checkModelVersion(s),this._selectedItem.set(this._isActive?this._currentSuggestItemInfo:void 0,s)}))}getSuggestItemInfo(){const c=v.SuggestController.get(this.editor);if(!c||!this.isSuggestWidgetVisible)return;const d=c.widget.value.getFocusedItem(),s=this.editor.getPosition(),l=this.editor.getModel();if(!(!d||!s||!l))return r.fromSuggestion(c,l,s,d.item,this.isShiftKeyPressed)}stopForceRenderingAbove(){const c=v.SuggestController.get(this.editor);c?.stopForceRenderingAbove()}forceRenderingAbove(){const c=v.SuggestController.get(this.editor);c?.forceRenderingAbove()}}e.SuggestWidgetAdaptor=t;class r{static fromSuggestion(c,d,s,l,o){let{insertText:g}=l.completion,h=!1;if(l.completion.insertTextRules&4){const C=new p.SnippetParser().parse(g);C.children.length<100&&_.SnippetSession.adjustWhitespace(d,s,!0,C),g=C.toString(),h=!0}const m=c.getOverwriteInfo(l,o);return new r(E.Range.fromPositions(s.delta(0,-m.overwriteBefore),s.delta(0,Math.max(m.overwriteAfter,0))),g,l.completion.kind,h)}constructor(c,d,s,l){this.range=c,this.insertText=d,this.completionItemKind=s,this.isSnippetText=l}equals(c){return this.range.equalsRange(c.range)&&this.insertText===c.insertText&&this.completionItemKind===c.completionItemKind&&this.isSnippetText===c.isSnippetText}toSelectedSuggestionInfo(){return new S.SelectedSuggestionInfo(this.range,this.insertText,this.completionItemKind,this.isSnippetText)}toSingleTextEdit(){return new a.SingleTextEdit(this.range,this.insertText)}}e.SuggestItemInfo=r;function u(f,c){return f===c?!0:!f||!c?!1:f.equals(c)}}),define(se[264],oe([1,0,7,48,2,35,191,10,79,18,216,765,240,257,927,928,696,122,25,27,15,8,34]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o){\"use strict\";var g;Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlineCompletionsController=void 0;let h=g=class extends y.Disposable{static get(C){return C.getContribution(g.ID)}constructor(C,w,D,I,T,A,P,N,M){super(),this.editor=C,this._instantiationService=w,this._contextKeyService=D,this._configurationService=I,this._commandService=T,this._debounceService=A,this._languageFeaturesService=P,this._audioCueService=N,this._keybindingService=M,this.model=(0,E.disposableObservableValue)(\"inlineCompletionModel\",void 0),this._textModelVersionId=(0,E.observableValue)(this,-1),this._cursorPosition=(0,E.observableValue)(this,new p.Position(1,1)),this._suggestWidgetAdaptor=this._register(new r.SuggestWidgetAdaptor(this.editor,()=>{var B,W;return(W=(B=this.model.get())===null||B===void 0?void 0:B.selectedInlineCompletion.get())===null||W===void 0?void 0:W.toSingleTextEdit(void 0)},B=>this.updateObservables(B,t.VersionIdChangeReason.Other),B=>{(0,E.transaction)(W=>{var V;this.updateObservables(W,t.VersionIdChangeReason.Other),(V=this.model.get())===null||V===void 0||V.handleSuggestAccepted(B)})})),this._enabled=(0,E.observableFromEvent)(this.editor.onDidChangeConfiguration,()=>this.editor.getOption(62).enabled),this._fontFamily=(0,E.observableFromEvent)(this.editor.onDidChangeConfiguration,()=>this.editor.getOption(62).fontFamily),this._ghostTextWidget=this._register(this._instantiationService.createInstance(a.GhostTextWidget,this.editor,{ghostText:this.model.map((B,W)=>B?.ghostText.read(W)),minReservedLineCount:(0,E.constObservable)(0),targetTextModel:this.model.map(B=>B?.textModel)})),this._debounceValue=this._debounceService.for(this._languageFeaturesService.inlineCompletionsProvider,\"InlineCompletionsDebounce\",{min:50,max:50}),this._playAudioCueSignal=(0,E.observableSignal)(this),this._isReadonly=(0,E.observableFromEvent)(this.editor.onDidChangeConfiguration,()=>this.editor.getOption(90)),this._textModel=(0,E.observableFromEvent)(this.editor.onDidChangeModel,()=>this.editor.getModel()),this._textModelIfWritable=(0,E.derived)(B=>this._isReadonly.read(B)?void 0:this._textModel.read(B)),this._register(new i.InlineCompletionContextKeys(this._contextKeyService,this.model)),this._register((0,E.autorun)(B=>{const W=this._textModelIfWritable.read(B);(0,E.transaction)(V=>{if(this.model.set(void 0,V),this.updateObservables(V,t.VersionIdChangeReason.Other),W){const K=w.createInstance(t.InlineCompletionsModel,W,this._suggestWidgetAdaptor.selectedItem,this._cursorPosition,this._textModelVersionId,this._debounceValue,(0,E.observableFromEvent)(C.onDidChangeConfiguration,()=>C.getOption(117).preview),(0,E.observableFromEvent)(C.onDidChangeConfiguration,()=>C.getOption(117).previewMode),(0,E.observableFromEvent)(C.onDidChangeConfiguration,()=>C.getOption(62).mode),this._enabled);this.model.set(K,V)}})}));const R=this._register((0,L.createStyleSheet2)());this._register((0,E.autorun)(B=>{const W=this._fontFamily.read(B);R.setStyle(W===\"\"||W===\"default\"?\"\":`\n.monaco-editor .ghost-text-decoration,\n.monaco-editor .ghost-text-decoration-preview,\n.monaco-editor .ghost-text {\n\tfont-family: ${W};\n}`)}));const x=B=>{var W;return B.isUndoing?t.VersionIdChangeReason.Undo:B.isRedoing?t.VersionIdChangeReason.Redo:!((W=this.model.get())===null||W===void 0)&&W.isAcceptingPartially?t.VersionIdChangeReason.AcceptWord:t.VersionIdChangeReason.Other};this._register(C.onDidChangeModelContent(B=>(0,E.transaction)(W=>this.updateObservables(W,x(B))))),this._register(C.onDidChangeCursorPosition(B=>(0,E.transaction)(W=>{var V;this.updateObservables(W,t.VersionIdChangeReason.Other),(B.reason===3||B.source===\"api\")&&((V=this.model.get())===null||V===void 0||V.stop(W))}))),this._register(C.onDidType(()=>(0,E.transaction)(B=>{var W;this.updateObservables(B,t.VersionIdChangeReason.Other),this._enabled.get()&&((W=this.model.get())===null||W===void 0||W.trigger(B))}))),this._register(this._commandService.onDidExecuteCommand(B=>{new Set([S.CoreEditingCommands.Tab.id,S.CoreEditingCommands.DeleteLeft.id,S.CoreEditingCommands.DeleteRight.id,b.inlineSuggestCommitId,\"acceptSelectedSuggestion\"]).has(B.commandId)&&C.hasTextFocus()&&this._enabled.get()&&(0,E.transaction)(V=>{var K;(K=this.model.get())===null||K===void 0||K.trigger(V)})})),this._register(this.editor.onDidBlurEditorWidget(()=>{this._contextKeyService.getContextKeyValue(\"accessibleViewIsShown\")||this._configurationService.getValue(\"editor.inlineSuggest.keepOnBlur\")||C.getOption(62).keepOnBlur||n.InlineSuggestionHintsContentWidget.dropDownVisible||(0,E.transaction)(B=>{var W;(W=this.model.get())===null||W===void 0||W.stop(B)})})),this._register((0,E.autorun)(B=>{var W;const V=(W=this.model.read(B))===null||W===void 0?void 0:W.state.read(B);V?.suggestItem?V.ghostText.lineCount>=2&&this._suggestWidgetAdaptor.forceRenderingAbove():this._suggestWidgetAdaptor.stopForceRenderingAbove()})),this._register((0,y.toDisposable)(()=>{this._suggestWidgetAdaptor.stopForceRenderingAbove()}));let O;this._register((0,E.autorunHandleChanges)({handleChange:(B,W)=>(B.didChange(this._playAudioCueSignal)&&(O=void 0),!0)},async B=>{this._playAudioCueSignal.read(B);const W=this.model.read(B),V=W?.state.read(B);if(!W||!V||!V.inlineCompletion){O=void 0;return}if(V.inlineCompletion.semanticId!==O){O=V.inlineCompletion.semanticId;const K=W.textModel.getLineContent(V.ghostText.lineNumber);this._audioCueService.playAudioCue(f.AudioCue.inlineSuggestion).then(()=>{this.editor.getOption(8)&&this.provideScreenReaderUpdate(V.ghostText.renderForScreenReader(K))})}})),this._register(new n.InlineCompletionsHintsWidget(this.editor,this.model,this._instantiationService)),this._register(this._configurationService.onDidChangeConfiguration(B=>{B.affectsConfiguration(\"accessibility.verbosity.inlineCompletions\")&&this.editor.updateOptions({inlineCompletionsAccessibilityVerbose:this._configurationService.getValue(\"accessibility.verbosity.inlineCompletions\")})})),this.editor.updateOptions({inlineCompletionsAccessibilityVerbose:this._configurationService.getValue(\"accessibility.verbosity.inlineCompletions\")})}playAudioCue(C){this._playAudioCueSignal.trigger(C)}provideScreenReaderUpdate(C){const w=this._contextKeyService.getContextKeyValue(\"accessibleViewIsShown\"),D=this._keybindingService.lookupKeybinding(\"editor.action.accessibleView\");let I;!w&&D&&this.editor.getOption(147)&&(I=(0,u.localize)(0,null,D.getAriaLabel())),I?(0,k.alert)(C+\", \"+I):(0,k.alert)(C)}updateObservables(C,w){var D,I;const T=this.editor.getModel();this._textModelVersionId.set((D=T?.getVersionId())!==null&&D!==void 0?D:-1,C,w),this._cursorPosition.set((I=this.editor.getPosition())!==null&&I!==void 0?I:new p.Position(1,1),C)}shouldShowHoverAt(C){var w;const D=(w=this.model.get())===null||w===void 0?void 0:w.ghostText.get();return D?D.parts.some(I=>C.containsPosition(new p.Position(D.lineNumber,I.column))):!1}shouldShowHoverAtViewZone(C){return this._ghostTextWidget.ownsViewZone(C)}};e.InlineCompletionsController=h,h.ID=\"editor.contrib.inlineCompletionsController\",e.InlineCompletionsController=h=g=ke([ge(1,l.IInstantiationService),ge(2,s.IContextKeyService),ge(3,d.IConfigurationService),ge(4,c.ICommandService),ge(5,_.ILanguageFeatureDebounceService),ge(6,v.ILanguageFeaturesService),ge(7,f.IAudioCueService),ge(8,o.IKeybindingService)],h)}),define(se[929],oe([1,0,35,110,16,21,216,240,264,138,693,30,27,15]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ToggleAlwaysShowInlineSuggestionToolbar=e.HideInlineCompletion=e.AcceptInlineCompletion=e.AcceptNextLineOfInlineCompletion=e.AcceptNextWordOfInlineCompletion=e.TriggerInlineSuggestionAction=e.ShowPreviousInlineSuggestionAction=e.ShowNextInlineSuggestionAction=void 0;class t extends y.EditorAction{constructor(){super({id:t.ID,label:b.localize(0,null),alias:\"Show Next Inline Suggestion\",precondition:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible),kbOpts:{weight:100,primary:606}})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);(m=C?.model.get())===null||m===void 0||m.next()}}e.ShowNextInlineSuggestionAction=t,t.ID=S.showNextInlineSuggestionActionId;class r extends y.EditorAction{constructor(){super({id:r.ID,label:b.localize(1,null),alias:\"Show Previous Inline Suggestion\",precondition:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible),kbOpts:{weight:100,primary:604}})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);(m=C?.model.get())===null||m===void 0||m.previous()}}e.ShowPreviousInlineSuggestionAction=r,r.ID=S.showPreviousInlineSuggestionActionId;class u extends y.EditorAction{constructor(){super({id:\"editor.action.inlineSuggest.trigger\",label:b.localize(2,null),alias:\"Trigger Inline Suggestion\",precondition:E.EditorContextKeys.writable})}async run(g,h){const m=_.InlineCompletionsController.get(h);await(0,k.asyncTransaction)(async C=>{var w;await((w=m?.model.get())===null||w===void 0?void 0:w.triggerExplicitly(C)),m?.playAudioCue(C)})}}e.TriggerInlineSuggestionAction=u;class f extends y.EditorAction{constructor(){super({id:\"editor.action.inlineSuggest.acceptNextWord\",label:b.localize(3,null),alias:\"Accept Next Word Of Inline Suggestion\",precondition:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible),kbOpts:{weight:100+1,primary:2065,kbExpr:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible)},menuOpts:[{menuId:a.MenuId.InlineSuggestionToolbar,title:b.localize(4,null),group:\"primary\",order:2}]})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);await((m=C?.model.get())===null||m===void 0?void 0:m.acceptNextWord(C.editor))}}e.AcceptNextWordOfInlineCompletion=f;class c extends y.EditorAction{constructor(){super({id:\"editor.action.inlineSuggest.acceptNextLine\",label:b.localize(5,null),alias:\"Accept Next Line Of Inline Suggestion\",precondition:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible),kbOpts:{weight:100+1},menuOpts:[{menuId:a.MenuId.InlineSuggestionToolbar,title:b.localize(6,null),group:\"secondary\",order:2}]})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);await((m=C?.model.get())===null||m===void 0?void 0:m.acceptNextLine(C.editor))}}e.AcceptNextLineOfInlineCompletion=c;class d extends y.EditorAction{constructor(){super({id:S.inlineSuggestCommitId,label:b.localize(7,null),alias:\"Accept Inline Suggestion\",precondition:p.InlineCompletionContextKeys.inlineSuggestionVisible,menuOpts:[{menuId:a.MenuId.InlineSuggestionToolbar,title:b.localize(8,null),group:\"primary\",order:1}],kbOpts:{primary:2,weight:200,kbExpr:n.ContextKeyExpr.and(p.InlineCompletionContextKeys.inlineSuggestionVisible,E.EditorContextKeys.tabMovesFocus.toNegated(),p.InlineCompletionContextKeys.inlineSuggestionHasIndentationLessThanTabSize,v.Context.Visible.toNegated(),E.EditorContextKeys.hoverFocused.toNegated())}})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);C&&((m=C.model.get())===null||m===void 0||m.accept(C.editor),C.editor.focus())}}e.AcceptInlineCompletion=d;class s extends y.EditorAction{constructor(){super({id:s.ID,label:b.localize(9,null),alias:\"Hide Inline Suggestion\",precondition:p.InlineCompletionContextKeys.inlineSuggestionVisible,kbOpts:{weight:100,primary:9}})}async run(g,h){const m=_.InlineCompletionsController.get(h);(0,L.transaction)(C=>{var w;(w=m?.model.get())===null||w===void 0||w.stop(C)})}}e.HideInlineCompletion=s,s.ID=\"editor.action.inlineSuggest.hide\";class l extends a.Action2{constructor(){super({id:l.ID,title:b.localize(10,null),f1:!1,precondition:void 0,menu:[{id:a.MenuId.InlineSuggestionToolbar,group:\"secondary\",order:10}],toggled:n.ContextKeyExpr.equals(\"config.editor.inlineSuggest.showToolbar\",\"always\")})}async run(g,h){const m=g.get(i.IConfigurationService),w=m.getValue(\"editor.inlineSuggest.showToolbar\")===\"always\"?\"onHover\":\"always\";m.updateValue(\"editor.inlineSuggest.showToolbar\",w)}}e.ToggleAlwaysShowInlineSuggestionToolbar=l,l.ID=\"editor.action.inlineSuggest.toggleAlwaysShowToolbar\"}),define(se[930],oe([1,0,7,58,2,35,5,43,101,264,257,104,694,69,8,57,81]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.InlineCompletionsHoverParticipant=e.InlineCompletionsHover=void 0;class f{constructor(s,l,o){this.owner=s,this.range=l,this.controller=o}isValidForHoverAnchor(s){return s.type===1&&this.range.startColumn<=s.range.startColumn&&this.range.endColumn>=s.range.endColumn}}e.InlineCompletionsHover=f;let c=class{constructor(s,l,o,g,h,m){this._editor=s,this._languageService=l,this._openerService=o,this.accessibilityService=g,this._instantiationService=h,this._telemetryService=m,this.hoverOrdinal=4}suggestHoverAnchor(s){const l=v.InlineCompletionsController.get(this._editor);if(!l)return null;const o=s.target;if(o.type===8){const g=o.detail;if(l.shouldShowHoverAtViewZone(g.viewZoneId))return new _.HoverForeignElementAnchor(1e3,this,S.Range.fromPositions(this._editor.getModel().validatePosition(g.positionBefore||g.position)),s.event.posx,s.event.posy,!1)}return o.type===7&&l.shouldShowHoverAt(o.range)?new _.HoverForeignElementAnchor(1e3,this,o.range,s.event.posx,s.event.posy,!1):o.type===6&&o.detail.mightBeForeignElement&&l.shouldShowHoverAt(o.range)?new _.HoverForeignElementAnchor(1e3,this,o.range,s.event.posx,s.event.posy,!1):null}computeSync(s,l){if(this._editor.getOption(62).showToolbar!==\"onHover\")return[];const o=v.InlineCompletionsController.get(this._editor);return o&&o.shouldShowHoverAt(s.range)?[new f(this,s.range,o)]:[]}renderHoverParts(s,l){const o=new y.DisposableStore,g=l[0];this._telemetryService.publicLog2(\"inlineCompletionHover.shown\"),this.accessibilityService.isScreenReaderOptimized()&&!this._editor.getOption(8)&&this.renderScreenReaderText(s,g,o);const h=g.controller.model.get(),m=this._instantiationService.createInstance(b.InlineSuggestionHintsContentWidget,this._editor,!1,(0,E.constObservable)(null),h.selectedInlineCompletionIndex,h.inlineCompletionsCount,h.selectedInlineCompletion.map(C=>{var w;return(w=C?.inlineCompletion.source.inlineCompletions.commands)!==null&&w!==void 0?w:[]}));return s.fragment.appendChild(m.getDomNode()),h.triggerExplicitly(),o.add(m),o}renderScreenReaderText(s,l,o){const g=L.$,h=g(\"div.hover-row.markdown-hover\"),m=L.append(h,g(\"div.hover-contents\",{[\"aria-live\"]:\"assertive\"})),C=o.add(new a.MarkdownRenderer({editor:this._editor},this._languageService,this._openerService)),w=D=>{o.add(C.onDidRenderAsync(()=>{m.className=\"hover-contents code-hover-contents\",s.onContentsChanged()}));const I=i.localize(0,null),T=o.add(C.render(new k.MarkdownString().appendText(I).appendCodeblock(\"text\",D)));m.replaceChildren(T.element)};o.add((0,E.autorun)(D=>{var I;const T=(I=l.controller.model.read(D))===null||I===void 0?void 0:I.ghostText.read(D);if(T){const A=this._editor.getModel().getLineContent(T.lineNumber);w(T.renderForScreenReader(A))}else L.reset(m)})),s.fragment.appendChild(h)}};e.InlineCompletionsHoverParticipant=c,e.InlineCompletionsHoverParticipant=c=ke([ge(1,p.ILanguageService),ge(2,r.IOpenerService),ge(3,n.IAccessibilityService),ge(4,t.IInstantiationService),ge(5,u.ITelemetryService)],c)}),define(se[931],oe([1,0,16,101,929,930,264,30]),function(te,e,L,k,y,E,S,p){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),(0,L.registerEditorContribution)(S.InlineCompletionsController.ID,S.InlineCompletionsController,3),(0,L.registerEditorAction)(y.TriggerInlineSuggestionAction),(0,L.registerEditorAction)(y.ShowNextInlineSuggestionAction),(0,L.registerEditorAction)(y.ShowPreviousInlineSuggestionAction),(0,L.registerEditorAction)(y.AcceptNextWordOfInlineCompletion),(0,L.registerEditorAction)(y.AcceptNextLineOfInlineCompletion),(0,L.registerEditorAction)(y.AcceptInlineCompletion),(0,L.registerEditorAction)(y.HideInlineCompletion),(0,p.registerAction2)(y.ToggleAlwaysShowInlineSuggestionToolbar),k.HoverParticipantRegistry.register(E.InlineCompletionsHoverParticipant)}),define(se[932],oe([1,0,19,71,52,2,33,5,131,18,311,138,358,391,312,103]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SuggestInlineCompletions=void 0;class u{constructor(s,l,o,g,h,m){this.range=s,this.insertText=l,this.filterText=o,this.additionalTextEdits=g,this.command=h,this.completion=m}}let f=class extends E.RefCountedDisposable{constructor(s,l,o,g,h,m){super(h.disposable),this.model=s,this.line=l,this.word=o,this.completionModel=g,this._suggestMemoryService=m}canBeReused(s,l,o){return this.model===s&&this.line===l&&this.word.word.length>0&&this.word.startColumn===o.startColumn&&this.word.endColumn<o.endColumn&&this.completionModel.getIncompleteProvider().size===0}get items(){var s;const l=[],{items:o}=this.completionModel,g=this._suggestMemoryService.select(this.model,{lineNumber:this.line,column:this.word.endColumn+this.completionModel.lineContext.characterCountDelta},o),h=y.Iterable.slice(o,g),m=y.Iterable.slice(o,0,g);let C=5;for(const w of y.Iterable.concat(h,m)){if(w.score===k.FuzzyScore.Default)continue;const D=new p.Range(w.editStart.lineNumber,w.editStart.column,w.editInsertEnd.lineNumber,w.editInsertEnd.column+this.completionModel.lineContext.characterCountDelta),I=w.completion.insertTextRules&&w.completion.insertTextRules&4?{snippet:w.completion.insertText}:w.completion.insertText;l.push(new u(D,I,(s=w.filterTextLow)!==null&&s!==void 0?s:w.labelLow,w.completion.additionalTextEdits,w.completion.command,w)),C-->=0&&w.resolve(L.CancellationToken.None)}return l}};f=ke([ge(5,i.ISuggestMemoryService)],f);let c=class extends E.Disposable{constructor(s,l,o,g){super(),this._languageFeatureService=s,this._clipboardService=l,this._suggestMemoryService=o,this._editorService=g,this._store.add(s.inlineCompletionsProvider.register(\"*\",this))}async provideInlineCompletions(s,l,o,g){var h;if(o.selectedSuggestionInfo)return;let m;for(const N of this._editorService.listCodeEditors())if(N.getModel()===s){m=N;break}if(!m)return;const C=m.getOption(88);if(a.QuickSuggestionsOptions.isAllOff(C))return;s.tokenization.tokenizeIfCheap(l.lineNumber);const w=s.tokenization.getLineTokens(l.lineNumber),D=w.getStandardTokenType(w.findTokenIndexAtOffset(Math.max(l.column-1-1,0)));if(a.QuickSuggestionsOptions.valueFor(C,D)!==\"inline\")return;let I=s.getWordAtPosition(l),T;if(I?.word||(T=this._getTriggerCharacterInfo(s,l)),!I?.word&&!T||(I||(I=s.getWordUntilPosition(l)),I.endColumn!==l.column))return;let A;const P=s.getValueInRange(new p.Range(l.lineNumber,1,l.lineNumber,l.column));if(!T&&(!((h=this._lastResult)===null||h===void 0)&&h.canBeReused(s,l.lineNumber,I))){const N=new b.LineContext(P,l.column-this._lastResult.word.endColumn);this._lastResult.completionModel.lineContext=N,this._lastResult.acquire(),A=this._lastResult}else{const N=await(0,a.provideSuggestionItems)(this._languageFeatureService.completionProvider,s,l,new a.CompletionOptions(void 0,n.SuggestModel.createSuggestFilter(m).itemKind,T?.providers),T&&{triggerKind:1,triggerCharacter:T.ch},g);let M;N.needsClipboard&&(M=await this._clipboardService.readText());const R=new b.CompletionModel(N.items,l.column,new b.LineContext(P,0),t.WordDistance.None,m.getOption(117),m.getOption(111),{boostFullMatch:!1,firstMatchCanBeWeak:!1},M);A=new f(s,l.lineNumber,I,R,N,this._suggestMemoryService)}return this._lastResult=A,A}handleItemDidShow(s,l){l.completion.resolve(L.CancellationToken.None)}freeInlineCompletions(s){s.release()}_getTriggerCharacterInfo(s,l){var o;const g=s.getValueInRange(p.Range.fromPositions({lineNumber:l.lineNumber,column:l.column-1},l)),h=new Set;for(const m of this._languageFeatureService.completionProvider.all(s))!((o=m.triggerCharacters)===null||o===void 0)&&o.includes(g)&&h.add(m);if(h.size!==0)return{providers:h,ch:g}}};e.SuggestInlineCompletions=c,e.SuggestInlineCompletions=c=ke([ge(0,v.ILanguageFeaturesService),ge(1,r.IClipboardService),ge(2,i.ISuggestMemoryService),ge(3,S.ICodeEditorService)],c),(0,_.registerEditorFeature)(c)}),define(se[393],oe([1,0,8]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.IWorkspaceTrustManagementService=void 0,e.IWorkspaceTrustManagementService=(0,L.createDecorator)(\"workspaceTrustManagementService\")}),define(se[933],oe([1,0,14,26,58,2,17,11,16,36,38,296,121,43,336,101,253,845,725,27,8,57,70,82,393,481]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.ShowExcludeOptions=e.DisableHighlightingOfNonBasicAsciiCharactersAction=e.DisableHighlightingOfInvisibleCharactersAction=e.DisableHighlightingOfAmbiguousCharactersAction=e.DisableHighlightingInStringsAction=e.DisableHighlightingInCommentsAction=e.UnicodeHighlighterHoverParticipant=e.UnicodeHighlighter=e.warningIcon=void 0,e.warningIcon=(0,g.registerIcon)(\"extensions-warning-message\",k.Codicon.warning,c.localize(0,null));let m=class extends E.Disposable{constructor(ne,$,J,Q){super(),this._editor=ne,this._editorWorkerService=$,this._workspaceTrustService=J,this._highlighter=null,this._bannerClosed=!1,this._updateState=re=>{if(re&&re.hasMore){if(this._bannerClosed)return;const de=Math.max(re.ambiguousCharacterCount,re.nonBasicAsciiCharacterCount,re.invisibleCharacterCount);let he;if(re.nonBasicAsciiCharacterCount>=de)he={message:c.localize(1,null),command:new V};else if(re.ambiguousCharacterCount>=de)he={message:c.localize(2,null),command:new B};else if(re.invisibleCharacterCount>=de)he={message:c.localize(3,null),command:new W};else throw new Error(\"Unreachable\");this._bannerController.show({id:\"unicodeHighlightBanner\",message:he.message,icon:e.warningIcon,actions:[{label:he.command.shortLabel,href:`command:${he.command.id}`}],onClose:()=>{this._bannerClosed=!0}})}else this._bannerController.hide()},this._bannerController=this._register(Q.createInstance(f.BannerController,ne)),this._register(this._editor.onDidChangeModel(()=>{this._bannerClosed=!1,this._updateHighlighter()})),this._options=ne.getOption(124),this._register(J.onDidChangeTrust(re=>{this._updateHighlighter()})),this._register(ne.onDidChangeConfiguration(re=>{re.hasChanged(124)&&(this._options=ne.getOption(124),this._updateHighlighter())})),this._updateHighlighter()}dispose(){this._highlighter&&(this._highlighter.dispose(),this._highlighter=null),super.dispose()}_updateHighlighter(){if(this._updateState(null),this._highlighter&&(this._highlighter.dispose(),this._highlighter=null),!this._editor.hasModel())return;const ne=C(this._workspaceTrustService.isWorkspaceTrusted(),this._options);if([ne.nonBasicASCII,ne.ambiguousCharacters,ne.invisibleCharacters].every(J=>J===!1))return;const $={nonBasicASCII:ne.nonBasicASCII,ambiguousCharacters:ne.ambiguousCharacters,invisibleCharacters:ne.invisibleCharacters,includeComments:ne.includeComments,includeStrings:ne.includeStrings,allowedCodePoints:Object.keys(ne.allowedCharacters).map(J=>J.codePointAt(0)),allowedLocales:Object.keys(ne.allowedLocales).map(J=>J===\"_os\"?new Intl.NumberFormat().resolvedOptions().locale:J===\"_vscode\"?S.language:J)};this._editorWorkerService.canComputeUnicodeHighlights(this._editor.getModel().uri)?this._highlighter=new w(this._editor,$,this._updateState,this._editorWorkerService):this._highlighter=new D(this._editor,$,this._updateState)}getDecorationInfo(ne){return this._highlighter?this._highlighter.getDecorationInfo(ne):null}};e.UnicodeHighlighter=m,m.ID=\"editor.contrib.unicodeHighlighter\",e.UnicodeHighlighter=m=ke([ge(1,i.IEditorWorkerService),ge(2,h.IWorkspaceTrustManagementService),ge(3,s.IInstantiationService)],m);function C(ae,ne){return{nonBasicASCII:ne.nonBasicASCII===v.inUntrustedWorkspace?!ae:ne.nonBasicASCII,ambiguousCharacters:ne.ambiguousCharacters,invisibleCharacters:ne.invisibleCharacters,includeComments:ne.includeComments===v.inUntrustedWorkspace?!ae:ne.includeComments,includeStrings:ne.includeStrings===v.inUntrustedWorkspace?!ae:ne.includeStrings,allowedCharacters:ne.allowedCharacters,allowedLocales:ne.allowedLocales}}let w=class extends E.Disposable{constructor(ne,$,J,Q){super(),this._editor=ne,this._options=$,this._updateState=J,this._editorWorkerService=Q,this._model=this._editor.getModel(),this._decorations=this._editor.createDecorationsCollection(),this._updateSoon=this._register(new L.RunOnceScheduler(()=>this._update(),250)),this._register(this._editor.onDidChangeModelContent(()=>{this._updateSoon.schedule()})),this._updateSoon.schedule()}dispose(){this._decorations.clear(),super.dispose()}_update(){if(this._model.isDisposed())return;if(!this._model.mightContainNonBasicASCII()){this._decorations.clear();return}const ne=this._model.getVersionId();this._editorWorkerService.computedUnicodeHighlights(this._model.uri,this._options).then($=>{if(this._model.isDisposed()||this._model.getVersionId()!==ne)return;this._updateState($);const J=[];if(!$.hasMore)for(const Q of $.ranges)J.push({range:Q,options:R.instance.getDecorationFromOptions(this._options)});this._decorations.set(J)})}getDecorationInfo(ne){if(!this._decorations.has(ne))return null;const $=this._editor.getModel();if(!(0,t.isModelDecorationVisible)($,ne))return null;const J=$.getValueInRange(ne.range);return{reason:M(J,this._options),inComment:(0,t.isModelDecorationInComment)($,ne),inString:(0,t.isModelDecorationInString)($,ne)}}};w=ke([ge(3,i.IEditorWorkerService)],w);class D extends E.Disposable{constructor(ne,$,J){super(),this._editor=ne,this._options=$,this._updateState=J,this._model=this._editor.getModel(),this._decorations=this._editor.createDecorationsCollection(),this._updateSoon=this._register(new L.RunOnceScheduler(()=>this._update(),250)),this._register(this._editor.onDidLayoutChange(()=>{this._updateSoon.schedule()})),this._register(this._editor.onDidScrollChange(()=>{this._updateSoon.schedule()})),this._register(this._editor.onDidChangeHiddenAreas(()=>{this._updateSoon.schedule()})),this._register(this._editor.onDidChangeModelContent(()=>{this._updateSoon.schedule()})),this._updateSoon.schedule()}dispose(){this._decorations.clear(),super.dispose()}_update(){if(this._model.isDisposed())return;if(!this._model.mightContainNonBasicASCII()){this._decorations.clear();return}const ne=this._editor.getVisibleRanges(),$=[],J={ranges:[],ambiguousCharacterCount:0,invisibleCharacterCount:0,nonBasicAsciiCharacterCount:0,hasMore:!1};for(const Q of ne){const re=a.UnicodeTextModelHighlighter.computeUnicodeHighlights(this._model,this._options,Q);for(const de of re.ranges)J.ranges.push(de);J.ambiguousCharacterCount+=J.ambiguousCharacterCount,J.invisibleCharacterCount+=J.invisibleCharacterCount,J.nonBasicAsciiCharacterCount+=J.nonBasicAsciiCharacterCount,J.hasMore=J.hasMore||re.hasMore}if(!J.hasMore)for(const Q of J.ranges)$.push({range:Q,options:R.instance.getDecorationFromOptions(this._options)});this._updateState(J),this._decorations.set($)}getDecorationInfo(ne){if(!this._decorations.has(ne))return null;const $=this._editor.getModel(),J=$.getValueInRange(ne.range);return(0,t.isModelDecorationVisible)($,ne)?{reason:M(J,this._options),inComment:(0,t.isModelDecorationInComment)($,ne),inString:(0,t.isModelDecorationInString)($,ne)}:null}}const I=c.localize(4,null);let T=class{constructor(ne,$,J){this._editor=ne,this._languageService=$,this._openerService=J,this.hoverOrdinal=5}computeSync(ne,$){if(!this._editor.hasModel()||ne.type!==1)return[];const J=this._editor.getModel(),Q=this._editor.getContribution(m.ID);if(!Q)return[];const re=[],de=new Set;let he=300;for(const me of $){const X=Q.getDecorationInfo(me);if(!X)continue;const G=J.getValueInRange(me.range).codePointAt(0),z=P(G);let H;switch(X.reason.kind){case 0:{(0,p.isBasicASCII)(X.reason.confusableWith)?H=c.localize(5,null,z,P(X.reason.confusableWith.codePointAt(0))):H=c.localize(6,null,z,P(X.reason.confusableWith.codePointAt(0)));break}case 1:H=c.localize(7,null,z);break;case 2:H=c.localize(8,null,z);break}if(de.has(H))continue;de.add(H);const Y={codePoint:G,reason:X.reason,inComment:X.inComment,inString:X.inString},j=c.localize(9,null),Z=`command:${K.ID}?${encodeURIComponent(JSON.stringify(Y))}`,ee=new y.MarkdownString(\"\",!0).appendMarkdown(H).appendText(\" \").appendLink(Z,j,I);re.push(new u.MarkdownHover(this,me.range,[ee],!1,he++))}return re}renderHoverParts(ne,$){return(0,u.renderMarkdownHovers)(ne,$,this._editor,this._languageService,this._openerService)}};e.UnicodeHighlighterHoverParticipant=T,e.UnicodeHighlighterHoverParticipant=T=ke([ge(1,n.ILanguageService),ge(2,l.IOpenerService)],T);function A(ae){return`U+${ae.toString(16).padStart(4,\"0\")}`}function P(ae){let ne=`\\`${A(ae)}\\``;return p.InvisibleCharacters.isInvisibleCharacter(ae)||(ne+=` \"${`${N(ae)}`}\"`),ne}function N(ae){return ae===96?\"`` ` ``\":\"`\"+String.fromCodePoint(ae)+\"`\"}function M(ae,ne){return a.UnicodeTextModelHighlighter.computeUnicodeHighlightReason(ae,ne)}class R{constructor(){this.map=new Map}getDecorationFromOptions(ne){return this.getDecoration(!ne.includeComments,!ne.includeStrings)}getDecoration(ne,$){const J=`${ne}${$}`;let Q=this.map.get(J);return Q||(Q=b.ModelDecorationOptions.createDynamic({description:\"unicode-highlight\",stickiness:1,className:\"unicode-highlight\",showIfCollapsed:!0,overviewRuler:null,minimap:null,hideInCommentTokens:ne,hideInStringTokens:$}),this.map.set(J,Q)),Q}}R.instance=new R;class x extends _.EditorAction{constructor(){super({id:B.ID,label:c.localize(11,null),alias:\"Disable highlighting of characters in comments\",precondition:void 0}),this.shortLabel=c.localize(10,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.includeComments,!1,2)}}e.DisableHighlightingInCommentsAction=x;class O extends _.EditorAction{constructor(){super({id:B.ID,label:c.localize(13,null),alias:\"Disable highlighting of characters in strings\",precondition:void 0}),this.shortLabel=c.localize(12,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.includeStrings,!1,2)}}e.DisableHighlightingInStringsAction=O;class B extends _.EditorAction{constructor(){super({id:B.ID,label:c.localize(15,null),alias:\"Disable highlighting of ambiguous characters\",precondition:void 0}),this.shortLabel=c.localize(14,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.ambiguousCharacters,!1,2)}}e.DisableHighlightingOfAmbiguousCharactersAction=B,B.ID=\"editor.action.unicodeHighlight.disableHighlightingOfAmbiguousCharacters\";class W extends _.EditorAction{constructor(){super({id:W.ID,label:c.localize(17,null),alias:\"Disable highlighting of invisible characters\",precondition:void 0}),this.shortLabel=c.localize(16,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.invisibleCharacters,!1,2)}}e.DisableHighlightingOfInvisibleCharactersAction=W,W.ID=\"editor.action.unicodeHighlight.disableHighlightingOfInvisibleCharacters\";class V extends _.EditorAction{constructor(){super({id:V.ID,label:c.localize(19,null),alias:\"Disable highlighting of non basic ASCII characters\",precondition:void 0}),this.shortLabel=c.localize(18,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.nonBasicASCII,!1,2)}}e.DisableHighlightingOfNonBasicAsciiCharactersAction=V,V.ID=\"editor.action.unicodeHighlight.disableHighlightingOfNonBasicAsciiCharacters\";class K extends _.EditorAction{constructor(){super({id:K.ID,label:c.localize(20,null),alias:\"Show Exclude Options\",precondition:void 0})}async run(ne,$,J){const{codePoint:Q,reason:re,inString:de,inComment:he}=J,me=String.fromCodePoint(Q),X=ne.get(o.IQuickInputService),U=ne.get(d.IConfigurationService);function G(Y){return p.InvisibleCharacters.isInvisibleCharacter(Y)?c.localize(21,null,A(Y)):c.localize(22,null,`${A(Y)} \"${me}\"`)}const z=[];if(re.kind===0)for(const Y of re.notAmbiguousInLocales)z.push({label:c.localize(23,null,Y),run:async()=>{q(U,[Y])}});if(z.push({label:G(Q),run:()=>F(U,[Q])}),he){const Y=new x;z.push({label:Y.label,run:async()=>Y.runAction(U)})}else if(de){const Y=new O;z.push({label:Y.label,run:async()=>Y.runAction(U)})}if(re.kind===0){const Y=new B;z.push({label:Y.label,run:async()=>Y.runAction(U)})}else if(re.kind===1){const Y=new W;z.push({label:Y.label,run:async()=>Y.runAction(U)})}else if(re.kind===2){const Y=new V;z.push({label:Y.label,run:async()=>Y.runAction(U)})}else ie(re);const H=await X.pick(z,{title:I});H&&await H.run()}}e.ShowExcludeOptions=K,K.ID=\"editor.action.unicodeHighlight.showExcludeOptions\";async function F(ae,ne){const $=ae.getValue(v.unicodeHighlightConfigKeys.allowedCharacters);let J;typeof $==\"object\"&&$?J=$:J={};for(const Q of ne)J[String.fromCodePoint(Q)]=!0;await ae.updateValue(v.unicodeHighlightConfigKeys.allowedCharacters,J,2)}async function q(ae,ne){var $;const J=($=ae.inspect(v.unicodeHighlightConfigKeys.allowedLocales).user)===null||$===void 0?void 0:$.value;let Q;typeof J==\"object\"&&J?Q=Object.assign({},J):Q={};for(const re of ne)Q[re]=!0;await ae.updateValue(v.unicodeHighlightConfigKeys.allowedLocales,Q,2)}function ie(ae){throw new Error(`Unexpected value: ${ae}`)}(0,_.registerEditorAction)(B),(0,_.registerEditorAction)(W),(0,_.registerEditorAction)(V),(0,_.registerEditorAction)(K),(0,_.registerEditorContribution)(m.ID,m,1),r.HoverParticipantRegistry.register(T)}),define(se[934],oe([1,0,191,194,886,810,889,811,812,902,891,893,916,900,813,923,814,894,924,925,377,261,817,818,780,931,262,263,384,382,385,820,918,901,821,822,904,905,823,910,844,869,870,871,825,196,920,392,932,826,800,933,827,911,364,828,824,779,96,177]),function(te,e){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0})}),define(se[265],oe([1,0,11,7,46,6,125,2,17,100,22,136,246,74,10,5,51,68,189,25,27,356,15,162,8,775,34,347,124,348,776,164,50,88,81,169,123,96,49,33,64,393,59,778,795,878,45,785,121,247,43,864,237,883,880,372,137,777,69,30,806,781,103,772,236,773,163,192,97,784,57,70,92,799,122,782,131,12,243,44,32,371,349,922,79,865,763,852]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P,N,M,R,x,O,B,W,V,K,F,q,ie,ae,ne,$,J,Q,re,de,he,me,X,U,G,z,H,Y,j,Z,ee,le,ue,ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be,De,Ie,fe,be,Ne){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.StandaloneServices=e.updateConfigurationService=e.StandaloneConfigurationService=e.StandaloneKeybindingService=e.StandaloneCommandService=e.StandaloneNotificationService=void 0;class Pe{constructor(Fe){this.disposed=!1,this.model=Fe,this._onWillDispose=new E.Emitter}get textEditorModel(){return this.model}dispose(){this.disposed=!0,this._onWillDispose.fire()}}let ze=class{constructor(Fe){this.modelService=Fe}createModelReference(Fe){const We=this.modelService.getModel(Fe);return We?Promise.resolve(new p.ImmortalReference(new Pe(We))):Promise.reject(new Error(\"Model not found\"))}};ze=ke([ge(0,u.IModelService)],ze);class Ke{show(){return Ke.NULL_PROGRESS_RUNNER}async showWhile(Fe,We){await Fe}}Ke.NULL_PROGRESS_RUNNER={done:()=>{},total:()=>{},worked:()=>{}};class je{withProgress(Fe,We,He){return We({report:()=>{}})}}class Je{constructor(){this.isExtensionDevelopment=!1,this.isBuilt=!1}}class rt{async confirm(Fe){return{confirmed:this.doConfirm(Fe.message,Fe.detail),checkboxChecked:!1}}doConfirm(Fe,We){let He=Fe;return We&&(He=He+`\n\n`+We),Ne.mainWindow.confirm(He)}async prompt(Fe){var We,He;let Ue;if(this.doConfirm(Fe.message,Fe.detail)){const Xe=[...(We=Fe.buttons)!==null&&We!==void 0?We:[]];Fe.cancelButton&&typeof Fe.cancelButton!=\"string\"&&typeof Fe.cancelButton!=\"boolean\"&&Xe.push(Fe.cancelButton),Ue=await((He=Xe[0])===null||He===void 0?void 0:He.run({checkboxChecked:!1}))}return{result:Ue}}async error(Fe,We){await this.prompt({type:v.default.Error,message:Fe,detail:We})}}class et{info(Fe){return this.notify({severity:v.default.Info,message:Fe})}warn(Fe){return this.notify({severity:v.default.Warning,message:Fe})}error(Fe){return this.notify({severity:v.default.Error,message:Fe})}notify(Fe){switch(Fe.severity){case v.default.Error:console.error(Fe.message);break;case v.default.Warning:console.warn(Fe.message);break;default:console.log(Fe.message);break}return et.NO_OP}prompt(Fe,We,He,Ue){return et.NO_OP}status(Fe,We){return p.Disposable.None}}e.StandaloneNotificationService=et,et.NO_OP=new P.NoOpNotification;let st=class{constructor(Fe){this._onWillExecuteCommand=new E.Emitter,this._onDidExecuteCommand=new E.Emitter,this.onDidExecuteCommand=this._onDidExecuteCommand.event,this._instantiationService=Fe}executeCommand(Fe,...We){const He=d.CommandsRegistry.getCommand(Fe);if(!He)return Promise.reject(new Error(`command '${Fe}' not found`));try{this._onWillExecuteCommand.fire({commandId:Fe,args:We});const Ue=this._instantiationService.invokeFunction.apply(this._instantiationService,[He.handler,...We]);return this._onDidExecuteCommand.fire({commandId:Fe,args:We}),Promise.resolve(Ue)}catch(Ue){return Promise.reject(Ue)}}};e.StandaloneCommandService=st,e.StandaloneCommandService=st=ke([ge(0,h.IInstantiationService)],st);let Qe=class extends m.AbstractKeybindingService{constructor(Fe,We,He,Ue,tt,Xe){super(Fe,We,He,Ue,tt),this._cachedResolver=null,this._dynamicKeybindings=[],this._domNodeListeners=[];const dt=ut=>{const wt=new p.DisposableStore;wt.add(k.addDisposableListener(ut,k.EventType.KEY_DOWN,Dt=>{const yt=new y.StandardKeyboardEvent(Dt);this._dispatch(yt,yt.target)&&(yt.preventDefault(),yt.stopPropagation())})),wt.add(k.addDisposableListener(ut,k.EventType.KEY_UP,Dt=>{const yt=new y.StandardKeyboardEvent(Dt);this._singleModifierDispatch(yt,yt.target)&&yt.preventDefault()})),this._domNodeListeners.push(new ft(ut,wt))},it=ut=>{for(let wt=0;wt<this._domNodeListeners.length;wt++){const Dt=this._domNodeListeners[wt];Dt.domNode===ut&&(this._domNodeListeners.splice(wt,1),Dt.dispose())}},nt=ut=>{ut.getOption(61)||dt(ut.getContainerDomNode())},ot=ut=>{ut.getOption(61)||it(ut.getContainerDomNode())};this._register(Xe.onCodeEditorAdd(nt)),this._register(Xe.onCodeEditorRemove(ot)),Xe.listCodeEditors().forEach(nt);const ht=ut=>{dt(ut.getContainerDomNode())},St=ut=>{it(ut.getContainerDomNode())};this._register(Xe.onDiffEditorAdd(ht)),this._register(Xe.onDiffEditorRemove(St)),Xe.listDiffEditors().forEach(ht)}addDynamicKeybinding(Fe,We,He,Ue){return(0,p.combinedDisposable)(d.CommandsRegistry.registerCommand(Fe,He),this.addDynamicKeybindings([{keybinding:We,command:Fe,when:Ue}]))}addDynamicKeybindings(Fe){const We=Fe.map(He=>{var Ue;return{keybinding:(0,S.decodeKeybinding)(He.keybinding,_.OS),command:(Ue=He.command)!==null&&Ue!==void 0?Ue:null,commandArgs:He.commandArgs,when:He.when,weight1:1e3,weight2:0,extensionId:null,isBuiltinExtension:!1}});return this._dynamicKeybindings=this._dynamicKeybindings.concat(We),this.updateResolver(),(0,p.toDisposable)(()=>{for(let He=0;He<this._dynamicKeybindings.length;He++)if(this._dynamicKeybindings[He]===We[0]){this._dynamicKeybindings.splice(He,We.length),this.updateResolver();return}})}updateResolver(){this._cachedResolver=null,this._onDidUpdateKeybindings.fire()}_getResolver(){if(!this._cachedResolver){const Fe=this._toNormalizedKeybindingItems(D.KeybindingsRegistry.getDefaultKeybindings(),!0),We=this._toNormalizedKeybindingItems(this._dynamicKeybindings,!1);this._cachedResolver=new w.KeybindingResolver(Fe,We,He=>this._log(He))}return this._cachedResolver}_documentHasFocus(){return Ne.mainWindow.document.hasFocus()}_toNormalizedKeybindingItems(Fe,We){const He=[];let Ue=0;for(const tt of Fe){const Xe=tt.when||void 0,dt=tt.keybinding;if(!dt)He[Ue++]=new I.ResolvedKeybindingItem(void 0,tt.command,tt.commandArgs,Xe,We,null,!1);else{const it=T.USLayoutResolvedKeybinding.resolveKeybinding(dt,_.OS);for(const nt of it)He[Ue++]=new I.ResolvedKeybindingItem(nt,tt.command,tt.commandArgs,Xe,We,null,!1)}}return He}resolveKeyboardEvent(Fe){const We=new S.KeyCodeChord(Fe.ctrlKey,Fe.shiftKey,Fe.altKey,Fe.metaKey,Fe.keyCode);return new T.USLayoutResolvedKeybinding([We],_.OS)}};e.StandaloneKeybindingService=Qe,e.StandaloneKeybindingService=Qe=ke([ge(0,o.IContextKeyService),ge(1,d.ICommandService),ge(2,M.ITelemetryService),ge(3,P.INotificationService),ge(4,V.ILogService),ge(5,W.ICodeEditorService)],Qe);class ft extends p.Disposable{constructor(Fe,We){super(),this.domNode=Fe,this._register(We)}}function at(qe){return qe&&typeof qe==\"object\"&&(!qe.overrideIdentifier||typeof qe.overrideIdentifier==\"string\")&&(!qe.resource||qe.resource instanceof b.URI)}class ct{constructor(){this._onDidChangeConfiguration=new E.Emitter,this.onDidChangeConfiguration=this._onDidChangeConfiguration.event;const Fe=new xe.DefaultConfiguration;this._configuration=new l.Configuration(Fe.reload(),new l.ConfigurationModel,new l.ConfigurationModel,new l.ConfigurationModel),Fe.dispose()}getValue(Fe,We){const He=typeof Fe==\"string\"?Fe:void 0,Ue=at(Fe)?Fe:at(We)?We:{};return this._configuration.getValue(He,Ue,void 0)}updateValues(Fe){const We={data:this._configuration.toData()},He=[];for(const Ue of Fe){const[tt,Xe]=Ue;this.getValue(tt)!==Xe&&(this._configuration.updateValue(tt,Xe),He.push(tt))}if(He.length>0){const Ue=new l.ConfigurationChangeEvent({keys:He,overrides:[]},We,this._configuration);Ue.source=8,this._onDidChangeConfiguration.fire(Ue)}return Promise.resolve()}updateValue(Fe,We,He,Ue){return this.updateValues([[Fe,We]])}inspect(Fe,We={}){return this._configuration.inspect(Fe,We,void 0)}}e.StandaloneConfigurationService=ct;let lt=class{constructor(Fe,We,He){this.configurationService=Fe,this.modelService=We,this.languageService=He,this._onDidChangeConfiguration=new E.Emitter,this.configurationService.onDidChangeConfiguration(Ue=>{this._onDidChangeConfiguration.fire({affectedKeys:Ue.affectedKeys,affectsConfiguration:(tt,Xe)=>Ue.affectsConfiguration(Xe)})})}getValue(Fe,We,He){const Ue=t.Position.isIPosition(We)?We:null,tt=Ue?typeof He==\"string\"?He:void 0:typeof We==\"string\"?We:void 0,Xe=Fe?this.getLanguage(Fe,Ue):void 0;return typeof tt>\"u\"?this.configurationService.getValue({resource:Fe,overrideIdentifier:Xe}):this.configurationService.getValue(tt,{resource:Fe,overrideIdentifier:Xe})}getLanguage(Fe,We){const He=this.modelService.getModel(Fe);return He?We?He.getLanguageIdAtPosition(We.lineNumber,We.column):He.getLanguageId():this.languageService.guessLanguageIdByFilepathOrFirstLine(Fe)}};lt=ke([ge(0,s.IConfigurationService),ge(1,u.IModelService),ge(2,re.ILanguageService)],lt);let mt=class{constructor(Fe){this.configurationService=Fe}getEOL(Fe,We){const He=this.configurationService.getValue(\"files.eol\",{overrideIdentifier:We,resource:Fe});return He&&typeof He==\"string\"&&He!==\"auto\"?He:_.isLinux||_.isMacintosh?`\n`:`\\r\n`}};mt=ke([ge(0,s.IConfigurationService)],mt);class pt{publicLog2(){}}class Le{constructor(){const Fe=b.URI.from({scheme:Le.SCHEME,authority:\"model\",path:\"/\"});this.workspace={id:R.STANDALONE_EDITOR_WORKSPACE_ID,folders:[new R.WorkspaceFolder({uri:Fe,name:\"\",index:0})]}}getWorkspace(){return this.workspace}getWorkspaceFolder(Fe){return Fe&&Fe.scheme===Le.SCHEME?this.workspace.folders[0]:null}}Le.SCHEME=\"inmemory\";function ye(qe,Fe,We){if(!Fe||!(qe instanceof ct))return;const He=[];Object.keys(Fe).forEach(Ue=>{(0,i.isEditorConfigurationKey)(Ue)&&He.push([`editor.${Ue}`,Fe[Ue]]),We&&(0,i.isDiffEditorConfigurationKey)(Ue)&&He.push([`diffEditor.${Ue}`,Fe[Ue]])}),He.length>0&&qe.updateValues(He)}e.updateConfigurationService=ye;let Me=class{constructor(Fe){this._modelService=Fe}hasPreviewHandler(){return!1}async apply(Fe,We){const He=Array.isArray(Fe)?Fe:a.ResourceEdit.convert(Fe),Ue=new Map;for(const dt of He){if(!(dt instanceof a.ResourceTextEdit))throw new Error(\"bad edit - only text edits are supported\");const it=this._modelService.getModel(dt.resource);if(!it)throw new Error(\"bad edit - model not found\");if(typeof dt.versionId==\"number\"&&it.getVersionId()!==dt.versionId)throw new Error(\"bad state - model changed in the meantime\");let nt=Ue.get(it);nt||(nt=[],Ue.set(it,nt)),nt.push(n.EditOperation.replaceMove(r.Range.lift(dt.textEdit.range),dt.textEdit.text))}let tt=0,Xe=0;for(const[dt,it]of Ue)dt.pushStackElement(),dt.pushEditOperations([],it,()=>[]),dt.pushStackElement(),Xe+=1,tt+=it.length;return{ariaSummary:L.format(O.StandaloneServicesNLS.bulkEditServiceSummary,tt,Xe),isApplied:tt>0}}};Me=ke([ge(0,u.IModelService)],Me);class Te{getUriLabel(Fe,We){return Fe.scheme===\"file\"?Fe.fsPath:Fe.path}getUriBasenameLabel(Fe){return(0,B.basename)(Fe)}}let we=class extends q.ContextViewService{constructor(Fe,We){super(Fe),this._codeEditorService=We}showContextView(Fe,We,He){if(!We){const Ue=this._codeEditorService.getFocusedCodeEditor()||this._codeEditorService.getActiveCodeEditor();Ue&&(We=Ue.getContainerDomNode())}return super.showContextView(Fe,We,He)}};we=ke([ge(0,x.ILayoutService),ge(1,W.ICodeEditorService)],we);class Re{constructor(){this._neverEmitter=new E.Emitter,this.onDidChangeTrust=this._neverEmitter.event}isWorkspaceTrusted(){return!0}}class Oe extends ie.LanguageService{constructor(){super()}}class Ve extends De.LogService{constructor(){super(new V.ConsoleLogger)}}let $e=class extends ae.ContextMenuService{constructor(Fe,We,He,Ue,tt,Xe){super(Fe,We,He,Ue,tt,Xe),this.configure({blockMouse:!1})}};$e=ke([ge(0,M.ITelemetryService),ge(1,P.INotificationService),ge(2,F.IContextViewService),ge(3,C.IKeybindingService),ge(4,Y.IMenuService),ge(5,o.IContextKeyService)],$e);class Ze{async playAudioCue(Fe,We){}}(0,ne.registerSingleton)(s.IConfigurationService,ct,0),(0,ne.registerSingleton)(c.ITextResourceConfigurationService,lt,0),(0,ne.registerSingleton)(c.ITextResourcePropertiesService,mt,0),(0,ne.registerSingleton)(R.IWorkspaceContextService,Le,0),(0,ne.registerSingleton)(A.ILabelService,Te,0),(0,ne.registerSingleton)(M.ITelemetryService,pt,0),(0,ne.registerSingleton)(g.IDialogService,rt,0),(0,ne.registerSingleton)(be.IEnvironmentService,Je,0),(0,ne.registerSingleton)(P.INotificationService,et,0),(0,ne.registerSingleton)(Ce.IMarkerService,Se.MarkerService,0),(0,ne.registerSingleton)(re.ILanguageService,Oe,0),(0,ne.registerSingleton)(G.IStandaloneThemeService,U.StandaloneThemeService,0),(0,ne.registerSingleton)(V.ILogService,Ve,0),(0,ne.registerSingleton)(u.IModelService,me.ModelService,0),(0,ne.registerSingleton)(he.IMarkerDecorationsService,de.MarkerDecorationsService,0),(0,ne.registerSingleton)(o.IContextKeyService,le.ContextKeyService,0),(0,ne.registerSingleton)(N.IProgressService,je,0),(0,ne.registerSingleton)(N.IEditorProgressService,Ke,0),(0,ne.registerSingleton)(Ae.IStorageService,Ae.InMemoryStorageService,0),(0,ne.registerSingleton)(J.IEditorWorkerService,Q.EditorWorkerService,0),(0,ne.registerSingleton)(a.IBulkEditService,Me,0),(0,ne.registerSingleton)(K.IWorkspaceTrustManagementService,Re,0),(0,ne.registerSingleton)(f.ITextModelService,ze,0),(0,ne.registerSingleton)(H.IAccessibilityService,z.AccessibilityService,0),(0,ne.registerSingleton)(ve.IListService,ve.ListService,0),(0,ne.registerSingleton)(d.ICommandService,st,0),(0,ne.registerSingleton)(C.IKeybindingService,Qe,0),(0,ne.registerSingleton)(Ee.IQuickInputService,X.StandaloneQuickInputService,0),(0,ne.registerSingleton)(F.IContextViewService,we,0),(0,ne.registerSingleton)(_e.IOpenerService,$.OpenerService,0),(0,ne.registerSingleton)(ee.IClipboardService,Z.BrowserClipboardService,0),(0,ne.registerSingleton)(F.IContextMenuService,$e,0),(0,ne.registerSingleton)(Y.IMenuService,j.MenuService,0),(0,ne.registerSingleton)(Be.IAudioCueService,Ze,0);var Ge;(function(qe){const Fe=new pe.ServiceCollection;for(const[it,nt]of(0,ne.getSingletonServiceDescriptors)())Fe.set(it,nt);const We=new ce.InstantiationService(Fe,!0);Fe.set(h.IInstantiationService,We);function He(it){Ue||Xe({});const nt=Fe.get(it);if(!nt)throw new Error(\"Missing service \"+it);return nt instanceof ue.SyncDescriptor?We.invokeFunction(ot=>ot.get(it)):nt}qe.get=He;let Ue=!1;const tt=new E.Emitter;function Xe(it){if(Ue)return We;Ue=!0;for(const[ot,ht]of(0,ne.getSingletonServiceDescriptors)())Fe.get(ot)||Fe.set(ot,ht);for(const ot in it)if(it.hasOwnProperty(ot)){const ht=(0,h.createDecorator)(ot);Fe.get(ht)instanceof ue.SyncDescriptor&&Fe.set(ht,it[ot])}const nt=(0,Ie.getEditorFeatures)();for(const ot of nt)try{We.createInstance(ot)}catch(ht){(0,fe.onUnexpectedError)(ht)}return tt.fire(),We}qe.initialize=Xe;function dt(it){if(Ue)return it();const nt=new p.DisposableStore,ot=nt.add(tt.event(()=>{ot.dispose(),nt.add(it())}));return nt}qe.withServices=dt})(Ge||(e.StandaloneServices=Ge={}))}),define(se[935],oe([1,0,48,2,33,194,287,265,137,30,25,27,15,59,8,34,50,23,69,96,103,88,51,43,371,80,32,18,259,122,44]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createTextModel=e.StandaloneDiffEditor2=e.StandaloneEditor=e.StandaloneCodeEditor=void 0;let A=0,P=!1;function N(W){if(!W){if(P)return;P=!0}L.setARIAContainer(W||T.mainWindow.document.body)}let M=class extends E.CodeEditorWidget{constructor(V,K,F,q,ie,ae,ne,$,J,Q,re,de){const he={...K};he.ariaLabel=he.ariaLabel||d.StandaloneCodeEditorNLS.editorViewAccessibleLabel,he.ariaLabel=he.ariaLabel+\";\"+d.StandaloneCodeEditorNLS.accessibilityHelpMessage,super(V,he,{},F,q,ie,ae,$,J,Q,re,de),ne instanceof p.StandaloneKeybindingService?this._standaloneKeybindingService=ne:this._standaloneKeybindingService=null,N(he.ariaContainerElement)}addCommand(V,K,F){if(!this._standaloneKeybindingService)return console.warn(\"Cannot add command because the editor is configured with an unrecognized KeybindingService\"),null;const q=\"DYNAMIC_\"+ ++A,ie=i.ContextKeyExpr.deserialize(F);return this._standaloneKeybindingService.addDynamicKeybinding(q,V,K,ie),q}createContextKey(V,K){return this._contextKeyService.createKey(V,K)}addAction(V){if(typeof V.id!=\"string\"||typeof V.label!=\"string\"||typeof V.run!=\"function\")throw new Error(\"Invalid action descriptor, `id`, `label` and `run` are required properties!\");if(!this._standaloneKeybindingService)return console.warn(\"Cannot add keybinding because the editor is configured with an unrecognized KeybindingService\"),k.Disposable.None;const K=V.id,F=V.label,q=i.ContextKeyExpr.and(i.ContextKeyExpr.equals(\"editorId\",this.getId()),i.ContextKeyExpr.deserialize(V.precondition)),ie=V.keybindings,ae=i.ContextKeyExpr.and(q,i.ContextKeyExpr.deserialize(V.keybindingContext)),ne=V.contextMenuGroupId||null,$=V.contextMenuOrder||0,J=(he,...me)=>Promise.resolve(V.run(this,...me)),Q=new k.DisposableStore,re=this.getId()+\":\"+K;if(Q.add(b.CommandsRegistry.registerCommand(re,J)),ne){const he={command:{id:re,title:F},when:q,group:ne,order:$};Q.add(v.MenuRegistry.appendMenuItem(v.MenuId.EditorContext,he))}if(Array.isArray(ie))for(const he of ie)Q.add(this._standaloneKeybindingService.addDynamicKeybinding(re,he,J,ae));const de=new S.InternalEditorAction(re,F,F,void 0,q,(...he)=>Promise.resolve(V.run(this,...he)),this._contextKeyService);return this._actions.set(K,de),Q.add((0,k.toDisposable)(()=>{this._actions.delete(K)})),Q}_triggerCommand(V,K){if(this._codeEditorService instanceof h.StandaloneCodeEditorService)try{this._codeEditorService.setActiveCodeEditor(this),super._triggerCommand(V,K)}finally{this._codeEditorService.setActiveCodeEditor(null)}else super._triggerCommand(V,K)}};e.StandaloneCodeEditor=M,e.StandaloneCodeEditor=M=ke([ge(2,t.IInstantiationService),ge(3,y.ICodeEditorService),ge(4,b.ICommandService),ge(5,i.IContextKeyService),ge(6,r.IKeybindingService),ge(7,f.IThemeService),ge(8,u.INotificationService),ge(9,c.IAccessibilityService),ge(10,C.ILanguageConfigurationService),ge(11,w.ILanguageFeaturesService)],M);let R=class extends M{constructor(V,K,F,q,ie,ae,ne,$,J,Q,re,de,he,me,X){const U={...K};(0,p.updateConfigurationService)(Q,U,!1);const G=$.registerEditorContainer(V);typeof U.theme==\"string\"&&$.setTheme(U.theme),typeof U.autoDetectHighContrast<\"u\"&&$.setAutoDetectHighContrast(!!U.autoDetectHighContrast);const z=U.model;delete U.model,super(V,U,F,q,ie,ae,ne,$,J,re,me,X),this._configurationService=Q,this._standaloneThemeService=$,this._register(G);let H;if(typeof z>\"u\"){const Y=he.getLanguageIdByMimeType(U.language)||U.language||m.PLAINTEXT_LANGUAGE_ID;H=O(de,he,U.value||\"\",Y,void 0),this._ownsModel=!0}else H=z,this._ownsModel=!1;if(this._attachModel(H),H){const Y={oldModelUrl:null,newModelUrl:H.uri};this._onDidChangeModel.fire(Y)}}dispose(){super.dispose()}updateOptions(V){(0,p.updateConfigurationService)(this._configurationService,V,!1),typeof V.theme==\"string\"&&this._standaloneThemeService.setTheme(V.theme),typeof V.autoDetectHighContrast<\"u\"&&this._standaloneThemeService.setAutoDetectHighContrast(!!V.autoDetectHighContrast),super.updateOptions(V)}_postDetachModelCleanup(V){super._postDetachModelCleanup(V),V&&this._ownsModel&&(V.dispose(),this._ownsModel=!1)}};e.StandaloneEditor=R,e.StandaloneEditor=R=ke([ge(2,t.IInstantiationService),ge(3,y.ICodeEditorService),ge(4,b.ICommandService),ge(5,i.IContextKeyService),ge(6,r.IKeybindingService),ge(7,_.IStandaloneThemeService),ge(8,u.INotificationService),ge(9,a.IConfigurationService),ge(10,c.IAccessibilityService),ge(11,o.IModelService),ge(12,g.ILanguageService),ge(13,C.ILanguageConfigurationService),ge(14,w.ILanguageFeaturesService)],R);let x=class extends D.DiffEditorWidget{constructor(V,K,F,q,ie,ae,ne,$,J,Q,re,de){const he={...K};(0,p.updateConfigurationService)($,he,!0);const me=ae.registerEditorContainer(V);typeof he.theme==\"string\"&&ae.setTheme(he.theme),typeof he.autoDetectHighContrast<\"u\"&&ae.setAutoDetectHighContrast(!!he.autoDetectHighContrast),super(V,he,{},q,F,ie,de,Q),this._configurationService=$,this._standaloneThemeService=ae,this._register(me)}dispose(){super.dispose()}updateOptions(V){(0,p.updateConfigurationService)(this._configurationService,V,!0),typeof V.theme==\"string\"&&this._standaloneThemeService.setTheme(V.theme),typeof V.autoDetectHighContrast<\"u\"&&this._standaloneThemeService.setAutoDetectHighContrast(!!V.autoDetectHighContrast),super.updateOptions(V)}_createInnerEditor(V,K,F){return V.createInstance(M,K,F)}getOriginalEditor(){return super.getOriginalEditor()}getModifiedEditor(){return super.getModifiedEditor()}addCommand(V,K,F){return this.getModifiedEditor().addCommand(V,K,F)}createContextKey(V,K){return this.getModifiedEditor().createContextKey(V,K)}addAction(V){return this.getModifiedEditor().addAction(V)}};e.StandaloneDiffEditor2=x,e.StandaloneDiffEditor2=x=ke([ge(2,t.IInstantiationService),ge(3,i.IContextKeyService),ge(4,y.ICodeEditorService),ge(5,_.IStandaloneThemeService),ge(6,u.INotificationService),ge(7,a.IConfigurationService),ge(8,n.IContextMenuService),ge(9,l.IEditorProgressService),ge(10,s.IClipboardService),ge(11,I.IAudioCueService)],x);function O(W,V,K,F,q){if(K=K||\"\",!F){const ie=K.indexOf(`\n`);let ae=K;return ie!==-1&&(ae=K.substring(0,ie)),B(W,K,V.createByFilepathOrFirstLine(q||null,ae),q)}return B(W,K,V.createById(F),q)}e.createTextModel=O;function B(W,V,K,F){return W.createModel(V,K,F)}}),define(se[936],oe([1,0,44,2,11,22,335,16,33,790,36,149,235,180,31,43,32,80,160,41,51,211,767,935,265,137,30,25,15,34,97,57,888,487]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createMonacoEditorAPI=e.registerEditorOpener=e.registerLinkOpener=e.registerCommand=e.remeasureFonts=e.setTheme=e.defineTheme=e.tokenize=e.colorizeModelLine=e.colorize=e.colorizeElement=e.createWebWorker=e.onDidChangeModelLanguage=e.onWillDisposeModel=e.onDidCreateModel=e.getModels=e.getModel=e.onDidChangeMarkers=e.getModelMarkers=e.removeAllMarkers=e.setModelMarkers=e.setModelLanguage=e.createModel=e.addKeybindingRules=e.addKeybindingRule=e.addEditorAction=e.addCommand=e.createMultiFileDiffEditor=e.createDiffEditor=e.getDiffEditors=e.getEditors=e.onDidCreateDiffEditor=e.onDidCreateEditor=e.create=void 0;function N(Ce,Se,_e){return h.StandaloneServices.initialize(_e||{}).createInstance(g.StandaloneEditor,Ce,Se)}e.create=N;function M(Ce){return h.StandaloneServices.get(_.ICodeEditorService).onCodeEditorAdd(_e=>{Ce(_e)})}e.onDidCreateEditor=M;function R(Ce){return h.StandaloneServices.get(_.ICodeEditorService).onDiffEditorAdd(_e=>{Ce(_e)})}e.onDidCreateDiffEditor=R;function x(){return h.StandaloneServices.get(_.ICodeEditorService).listCodeEditors()}e.getEditors=x;function O(){return h.StandaloneServices.get(_.ICodeEditorService).listDiffEditors()}e.getDiffEditors=O;function B(Ce,Se,_e){return h.StandaloneServices.initialize(_e||{}).createInstance(g.StandaloneDiffEditor2,Ce,Se)}e.createDiffEditor=B;function W(Ce,Se){const _e=h.StandaloneServices.initialize(Se||{});return new P.MultiDiffEditorWidget(Ce,{},_e)}e.createMultiFileDiffEditor=W;function V(Ce){if(typeof Ce.id!=\"string\"||typeof Ce.run!=\"function\")throw new Error(\"Invalid command descriptor, `id` and `run` are required properties!\");return w.CommandsRegistry.registerCommand(Ce.id,Ce.run)}e.addCommand=V;function K(Ce){if(typeof Ce.id!=\"string\"||typeof Ce.label!=\"string\"||typeof Ce.run!=\"function\")throw new Error(\"Invalid action descriptor, `id`, `label` and `run` are required properties!\");const Se=D.ContextKeyExpr.deserialize(Ce.precondition),_e=(Ae,...xe)=>p.EditorCommand.runEditorCommand(Ae,xe,Se,(Be,De,Ie)=>Promise.resolve(Ce.run(De,...Ie))),Ee=new k.DisposableStore;if(Ee.add(w.CommandsRegistry.registerCommand(Ce.id,_e)),Ce.contextMenuGroupId){const Ae={command:{id:Ce.id,title:Ce.label},when:Se,group:Ce.contextMenuGroupId,order:Ce.contextMenuOrder||0};Ee.add(C.MenuRegistry.appendMenuItem(C.MenuId.EditorContext,Ae))}if(Array.isArray(Ce.keybindings)){const Ae=h.StandaloneServices.get(I.IKeybindingService);if(!(Ae instanceof h.StandaloneKeybindingService))console.warn(\"Cannot add keybinding because the editor is configured with an unrecognized KeybindingService\");else{const xe=D.ContextKeyExpr.and(Se,D.ContextKeyExpr.deserialize(Ce.keybindingContext));Ee.add(Ae.addDynamicKeybindings(Ce.keybindings.map(Be=>({keybinding:Be,command:Ce.id,when:xe}))))}}return Ee}e.addEditorAction=K;function F(Ce){return q([Ce])}e.addKeybindingRule=F;function q(Ce){const Se=h.StandaloneServices.get(I.IKeybindingService);return Se instanceof h.StandaloneKeybindingService?Se.addDynamicKeybindings(Ce.map(_e=>({keybinding:_e.keybinding,command:_e.command,commandArgs:_e.commandArgs,when:D.ContextKeyExpr.deserialize(_e.when)}))):(console.warn(\"Cannot add keybinding because the editor is configured with an unrecognized KeybindingService\"),k.Disposable.None)}e.addKeybindingRules=q;function ie(Ce,Se,_e){const Ee=h.StandaloneServices.get(r.ILanguageService),Ae=Ee.getLanguageIdByMimeType(Se)||Se;return(0,g.createTextModel)(h.StandaloneServices.get(s.IModelService),Ee,Ce,Ae,_e)}e.createModel=ie;function ae(Ce,Se){const _e=h.StandaloneServices.get(r.ILanguageService),Ee=_e.getLanguageIdByMimeType(Se)||Se||f.PLAINTEXT_LANGUAGE_ID;Ce.setLanguage(_e.createById(Ee))}e.setModelLanguage=ae;function ne(Ce,Se,_e){Ce&&h.StandaloneServices.get(T.IMarkerService).changeOne(Se,Ce.uri,_e)}e.setModelMarkers=ne;function $(Ce){h.StandaloneServices.get(T.IMarkerService).changeAll(Ce,[])}e.removeAllMarkers=$;function J(Ce){return h.StandaloneServices.get(T.IMarkerService).read(Ce)}e.getModelMarkers=J;function Q(Ce){return h.StandaloneServices.get(T.IMarkerService).onMarkerChanged(Ce)}e.onDidChangeMarkers=Q;function re(Ce){return h.StandaloneServices.get(s.IModelService).getModel(Ce)}e.getModel=re;function de(){return h.StandaloneServices.get(s.IModelService).getModels()}e.getModels=de;function he(Ce){return h.StandaloneServices.get(s.IModelService).onModelAdded(Ce)}e.onDidCreateModel=he;function me(Ce){return h.StandaloneServices.get(s.IModelService).onModelRemoved(Ce)}e.onWillDisposeModel=me;function X(Ce){return h.StandaloneServices.get(s.IModelService).onModelLanguageChanged(_e=>{Ce({model:_e.model,oldLanguage:_e.oldLanguageId})})}e.onDidChangeModelLanguage=X;function U(Ce){return(0,v.createWebWorker)(h.StandaloneServices.get(s.IModelService),h.StandaloneServices.get(u.ILanguageConfigurationService),Ce)}e.createWebWorker=U;function G(Ce,Se){const _e=h.StandaloneServices.get(r.ILanguageService),Ee=h.StandaloneServices.get(m.IStandaloneThemeService);return o.Colorizer.colorizeElement(Ee,_e,Ce,Se).then(()=>{Ee.registerEditorContainer(Ce)})}e.colorizeElement=G;function z(Ce,Se,_e){const Ee=h.StandaloneServices.get(r.ILanguageService);return h.StandaloneServices.get(m.IStandaloneThemeService).registerEditorContainer(L.mainWindow.document.body),o.Colorizer.colorize(Ee,Ce,Se,_e)}e.colorize=z;function H(Ce,Se,_e=4){return h.StandaloneServices.get(m.IStandaloneThemeService).registerEditorContainer(L.mainWindow.document.body),o.Colorizer.colorizeModelLine(Ce,Se,_e)}e.colorizeModelLine=H;function Y(Ce){const Se=t.TokenizationRegistry.get(Ce);return Se||{getInitialState:()=>c.NullState,tokenize:(_e,Ee,Ae)=>(0,c.nullTokenize)(Ce,Ae)}}function j(Ce,Se){t.TokenizationRegistry.getOrCreate(Se);const _e=Y(Se),Ee=(0,y.splitLines)(Ce),Ae=[];let xe=_e.getInitialState();for(let Be=0,De=Ee.length;Be<De;Be++){const Ie=Ee[Be],fe=_e.tokenize(Ie,!0,xe);Ae[Be]=fe.tokens,xe=fe.endState}return Ae}e.tokenize=j;function Z(Ce,Se){h.StandaloneServices.get(m.IStandaloneThemeService).defineTheme(Ce,Se)}e.defineTheme=Z;function ee(Ce){h.StandaloneServices.get(m.IStandaloneThemeService).setTheme(Ce)}e.setTheme=ee;function le(){S.FontMeasurements.clearAllFontInfos()}e.remeasureFonts=le;function ue(Ce,Se){return w.CommandsRegistry.registerCommand({id:Ce,handler:Se})}e.registerCommand=ue;function ce(Ce){return h.StandaloneServices.get(A.IOpenerService).registerOpener({async open(_e){return typeof _e==\"string\"&&(_e=E.URI.parse(_e)),Ce.open(_e)}})}e.registerLinkOpener=ce;function pe(Ce){return h.StandaloneServices.get(_.ICodeEditorService).registerCodeEditorOpenHandler(async(_e,Ee,Ae)=>{var xe;if(!Ee)return null;const Be=(xe=_e.options)===null||xe===void 0?void 0:xe.selection;let De;return Be&&typeof Be.endLineNumber==\"number\"&&typeof Be.endColumn==\"number\"?De=Be:Be&&(De={lineNumber:Be.startLineNumber,column:Be.startColumn}),await Ce.openCodeEditor(Ee,_e.resource,De)?Ee:null})}e.registerEditorOpener=pe;function ve(){return{create:N,getEditors:x,getDiffEditors:O,onDidCreateEditor:M,onDidCreateDiffEditor:R,createDiffEditor:B,addCommand:V,addEditorAction:K,addKeybindingRule:F,addKeybindingRules:q,createModel:ie,setModelLanguage:ae,setModelMarkers:ne,getModelMarkers:J,removeAllMarkers:$,onDidChangeMarkers:Q,getModels:de,getModel:re,onDidCreateModel:he,onWillDisposeModel:me,onDidChangeModelLanguage:X,createWebWorker:U,colorizeElement:G,colorize:z,colorizeModelLine:H,tokenize:j,defineTheme:Z,setTheme:ee,remeasureFonts:le,registerCommand:ue,registerLinkOpener:ce,registerEditorOpener:pe,AccessibilitySupport:l.AccessibilitySupport,ContentWidgetPositionPreference:l.ContentWidgetPositionPreference,CursorChangeReason:l.CursorChangeReason,DefaultEndOfLine:l.DefaultEndOfLine,EditorAutoIndentStrategy:l.EditorAutoIndentStrategy,EditorOption:l.EditorOption,EndOfLinePreference:l.EndOfLinePreference,EndOfLineSequence:l.EndOfLineSequence,MinimapPosition:l.MinimapPosition,MouseTargetType:l.MouseTargetType,OverlayWidgetPositionPreference:l.OverlayWidgetPositionPreference,OverviewRulerLane:l.OverviewRulerLane,GlyphMarginLane:l.GlyphMarginLane,RenderLineNumbersType:l.RenderLineNumbersType,RenderMinimap:l.RenderMinimap,ScrollbarVisibility:l.ScrollbarVisibility,ScrollType:l.ScrollType,TextEditorCursorBlinkingStyle:l.TextEditorCursorBlinkingStyle,TextEditorCursorStyle:l.TextEditorCursorStyle,TrackedRangeStickiness:l.TrackedRangeStickiness,WrappingIndent:l.WrappingIndent,InjectedTextCursorStops:l.InjectedTextCursorStops,PositionAffinity:l.PositionAffinity,ShowLightbulbIconMode:l.ShowLightbulbIconMode,ConfigurationChangedEvent:b.ConfigurationChangedEvent,BareFontInfo:i.BareFontInfo,FontInfo:i.FontInfo,TextModelResolvedOptions:d.TextModelResolvedOptions,FindMatch:d.FindMatch,ApplyUpdateResult:b.ApplyUpdateResult,EditorZoom:a.EditorZoom,createMultiFileDiffEditor:W,EditorType:n.EditorType,EditorOptions:b.EditorOptions}}e.createMonacoEditorAPI=ve}),define(se[937],oe([1,0,39,5,31,32,80,43,211,265,565,345,137,97,18,27]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.createMonacoLanguagesAPI=e.registerInlayHintsProvider=e.registerInlineCompletionsProvider=e.registerDocumentRangeSemanticTokensProvider=e.registerDocumentSemanticTokensProvider=e.registerSelectionRangeProvider=e.registerDeclarationProvider=e.registerFoldingRangeProvider=e.registerColorProvider=e.registerCompletionItemProvider=e.registerLinkProvider=e.registerOnTypeFormattingEditProvider=e.registerDocumentRangeFormattingEditProvider=e.registerDocumentFormattingEditProvider=e.registerCodeActionProvider=e.registerCodeLensProvider=e.registerTypeDefinitionProvider=e.registerImplementationProvider=e.registerDefinitionProvider=e.registerLinkedEditingRangeProvider=e.registerDocumentHighlightProvider=e.registerDocumentSymbolProvider=e.registerHoverProvider=e.registerSignatureHelpProvider=e.registerRenameProvider=e.registerReferenceProvider=e.setMonarchTokensProvider=e.setTokensProvider=e.registerTokensProviderFactory=e.setColorMap=e.TokenizationSupportAdapter=e.EncodedTokenizationSupportAdapter=e.setLanguageConfiguration=e.onLanguageEncountered=e.onLanguage=e.getEncodedLanguageId=e.getLanguages=e.register=void 0;function u(H){S.ModesRegistry.registerLanguage(H)}e.register=u;function f(){let H=[];return H=H.concat(S.ModesRegistry.getLanguages()),H}e.getLanguages=f;function c(H){return v.StandaloneServices.get(p.ILanguageService).languageIdCodec.encodeLanguageId(H)}e.getEncodedLanguageId=c;function d(H,Y){return v.StandaloneServices.withServices(()=>{const Z=v.StandaloneServices.get(p.ILanguageService).onDidRequestRichLanguageFeatures(ee=>{ee===H&&(Z.dispose(),Y())});return Z})}e.onLanguage=d;function s(H,Y){return v.StandaloneServices.withServices(()=>{const Z=v.StandaloneServices.get(p.ILanguageService).onDidRequestBasicLanguageFeatures(ee=>{ee===H&&(Z.dispose(),Y())});return Z})}e.onLanguageEncountered=s;function l(H,Y){if(!v.StandaloneServices.get(p.ILanguageService).isRegisteredLanguageId(H))throw new Error(`Cannot set configuration for unknown language ${H}`);return v.StandaloneServices.get(E.ILanguageConfigurationService).register(H,Y,100)}e.setLanguageConfiguration=l;class o{constructor(Y,j){this._languageId=Y,this._actual=j}dispose(){}getInitialState(){return this._actual.getInitialState()}tokenize(Y,j,Z){if(typeof this._actual.tokenize==\"function\")return g.adaptTokenize(this._languageId,this._actual,Y,Z);throw new Error(\"Not supported!\")}tokenizeEncoded(Y,j,Z){const ee=this._actual.tokenizeEncoded(Y,Z);return new y.EncodedTokenizationResult(ee.tokens,ee.endState)}}e.EncodedTokenizationSupportAdapter=o;class g{constructor(Y,j,Z,ee){this._languageId=Y,this._actual=j,this._languageService=Z,this._standaloneThemeService=ee}dispose(){}getInitialState(){return this._actual.getInitialState()}static _toClassicTokens(Y,j){const Z=[];let ee=0;for(let le=0,ue=Y.length;le<ue;le++){const ce=Y[le];let pe=ce.startIndex;le===0?pe=0:pe<ee&&(pe=ee),Z[le]=new y.Token(pe,ce.scopes,j),ee=pe}return Z}static adaptTokenize(Y,j,Z,ee){const le=j.tokenize(Z,ee),ue=g._toClassicTokens(le.tokens,Y);let ce;return le.endState.equals(ee)?ce=ee:ce=le.endState,new y.TokenizationResult(ue,ce)}tokenize(Y,j,Z){return g.adaptTokenize(this._languageId,this._actual,Y,Z)}_toBinaryTokens(Y,j){const Z=Y.encodeLanguageId(this._languageId),ee=this._standaloneThemeService.getColorTheme().tokenTheme,le=[];let ue=0,ce=0;for(let ve=0,Ce=j.length;ve<Ce;ve++){const Se=j[ve],_e=ee.match(Z,Se.scopes)|1024;if(ue>0&&le[ue-1]===_e)continue;let Ee=Se.startIndex;ve===0?Ee=0:Ee<ce&&(Ee=ce),le[ue++]=Ee,le[ue++]=_e,ce=Ee}const pe=new Uint32Array(ue);for(let ve=0;ve<ue;ve++)pe[ve]=le[ve];return pe}tokenizeEncoded(Y,j,Z){const ee=this._actual.tokenize(Y,Z),le=this._toBinaryTokens(this._languageService.languageIdCodec,ee.tokens);let ue;return ee.endState.equals(Z)?ue=Z:ue=ee.endState,new y.EncodedTokenizationResult(le,ue)}}e.TokenizationSupportAdapter=g;function h(H){return typeof H.getInitialState==\"function\"}function m(H){return\"tokenizeEncoded\"in H}function C(H){return H&&typeof H.then==\"function\"}function w(H){const Y=v.StandaloneServices.get(i.IStandaloneThemeService);if(H){const j=[null];for(let Z=1,ee=H.length;Z<ee;Z++)j[Z]=L.Color.fromHex(H[Z]);Y.setColorMapOverride(j)}else Y.setColorMapOverride(null)}e.setColorMap=w;function D(H,Y){return m(Y)?new o(H,Y):new g(H,Y,v.StandaloneServices.get(p.ILanguageService),v.StandaloneServices.get(i.IStandaloneThemeService))}function I(H,Y){const j=new y.LazyTokenizationSupport(async()=>{const Z=await Promise.resolve(Y.create());return Z?h(Z)?D(H,Z):new a.MonarchTokenizer(v.StandaloneServices.get(p.ILanguageService),v.StandaloneServices.get(i.IStandaloneThemeService),H,(0,b.compile)(H,Z),v.StandaloneServices.get(r.IConfigurationService)):null});return y.TokenizationRegistry.registerFactory(H,j)}e.registerTokensProviderFactory=I;function T(H,Y){if(!v.StandaloneServices.get(p.ILanguageService).isRegisteredLanguageId(H))throw new Error(`Cannot set tokens provider for unknown language ${H}`);return C(Y)?I(H,{create:()=>Y}):y.TokenizationRegistry.register(H,D(H,Y))}e.setTokensProvider=T;function A(H,Y){const j=Z=>new a.MonarchTokenizer(v.StandaloneServices.get(p.ILanguageService),v.StandaloneServices.get(i.IStandaloneThemeService),H,(0,b.compile)(H,Z),v.StandaloneServices.get(r.IConfigurationService));return C(Y)?I(H,{create:()=>Y}):y.TokenizationRegistry.register(H,j(Y))}e.setMonarchTokensProvider=A;function P(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).referenceProvider.register(H,Y)}e.registerReferenceProvider=P;function N(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).renameProvider.register(H,Y)}e.registerRenameProvider=N;function M(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).signatureHelpProvider.register(H,Y)}e.registerSignatureHelpProvider=M;function R(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).hoverProvider.register(H,{provideHover:(Z,ee,le)=>{const ue=Z.getWordAtPosition(ee);return Promise.resolve(Y.provideHover(Z,ee,le)).then(ce=>{if(ce)return!ce.range&&ue&&(ce.range=new k.Range(ee.lineNumber,ue.startColumn,ee.lineNumber,ue.endColumn)),ce.range||(ce.range=new k.Range(ee.lineNumber,ee.column,ee.lineNumber,ee.column)),ce})}})}e.registerHoverProvider=R;function x(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentSymbolProvider.register(H,Y)}e.registerDocumentSymbolProvider=x;function O(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentHighlightProvider.register(H,Y)}e.registerDocumentHighlightProvider=O;function B(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).linkedEditingRangeProvider.register(H,Y)}e.registerLinkedEditingRangeProvider=B;function W(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).definitionProvider.register(H,Y)}e.registerDefinitionProvider=W;function V(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).implementationProvider.register(H,Y)}e.registerImplementationProvider=V;function K(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).typeDefinitionProvider.register(H,Y)}e.registerTypeDefinitionProvider=K;function F(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).codeLensProvider.register(H,Y)}e.registerCodeLensProvider=F;function q(H,Y,j){return v.StandaloneServices.get(t.ILanguageFeaturesService).codeActionProvider.register(H,{providedCodeActionKinds:j?.providedCodeActionKinds,documentation:j?.documentation,provideCodeActions:(ee,le,ue,ce)=>{const ve=v.StandaloneServices.get(n.IMarkerService).read({resource:ee.uri}).filter(Ce=>k.Range.areIntersectingOrTouching(Ce,le));return Y.provideCodeActions(ee,le,{markers:ve,only:ue.only,trigger:ue.trigger},ce)},resolveCodeAction:Y.resolveCodeAction})}e.registerCodeActionProvider=q;function ie(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentFormattingEditProvider.register(H,Y)}e.registerDocumentFormattingEditProvider=ie;function ae(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentRangeFormattingEditProvider.register(H,Y)}e.registerDocumentRangeFormattingEditProvider=ae;function ne(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).onTypeFormattingEditProvider.register(H,Y)}e.registerOnTypeFormattingEditProvider=ne;function $(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).linkProvider.register(H,Y)}e.registerLinkProvider=$;function J(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).completionProvider.register(H,Y)}e.registerCompletionItemProvider=J;function Q(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).colorProvider.register(H,Y)}e.registerColorProvider=Q;function re(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).foldingRangeProvider.register(H,Y)}e.registerFoldingRangeProvider=re;function de(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).declarationProvider.register(H,Y)}e.registerDeclarationProvider=de;function he(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).selectionRangeProvider.register(H,Y)}e.registerSelectionRangeProvider=he;function me(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentSemanticTokensProvider.register(H,Y)}e.registerDocumentSemanticTokensProvider=me;function X(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentRangeSemanticTokensProvider.register(H,Y)}e.registerDocumentRangeSemanticTokensProvider=X;function U(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).inlineCompletionsProvider.register(H,Y)}e.registerInlineCompletionsProvider=U;function G(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).inlayHintsProvider.register(H,Y)}e.registerInlayHintsProvider=G;function z(){return{register:u,getLanguages:f,onLanguage:d,onLanguageEncountered:s,getEncodedLanguageId:c,setLanguageConfiguration:l,setColorMap:w,registerTokensProviderFactory:I,setTokensProvider:T,setMonarchTokensProvider:A,registerReferenceProvider:P,registerRenameProvider:N,registerCompletionItemProvider:J,registerSignatureHelpProvider:M,registerHoverProvider:R,registerDocumentSymbolProvider:x,registerDocumentHighlightProvider:O,registerLinkedEditingRangeProvider:B,registerDefinitionProvider:W,registerImplementationProvider:V,registerTypeDefinitionProvider:K,registerCodeLensProvider:F,registerCodeActionProvider:q,registerDocumentFormattingEditProvider:ie,registerDocumentRangeFormattingEditProvider:ae,registerOnTypeFormattingEditProvider:ne,registerLinkProvider:$,registerColorProvider:Q,registerFoldingRangeProvider:re,registerDeclarationProvider:de,registerSelectionRangeProvider:he,registerDocumentSemanticTokensProvider:me,registerDocumentRangeSemanticTokensProvider:X,registerInlineCompletionsProvider:U,registerInlayHintsProvider:G,DocumentHighlightKind:_.DocumentHighlightKind,CompletionItemKind:_.CompletionItemKind,CompletionItemTag:_.CompletionItemTag,CompletionItemInsertTextRule:_.CompletionItemInsertTextRule,SymbolKind:_.SymbolKind,SymbolTag:_.SymbolTag,IndentAction:_.IndentAction,CompletionTriggerKind:_.CompletionTriggerKind,SignatureHelpTriggerKind:_.SignatureHelpTriggerKind,InlayHintKind:_.InlayHintKind,InlineCompletionTriggerKind:_.InlineCompletionTriggerKind,CodeActionTriggerType:_.CodeActionTriggerType,FoldingRangeKind:y.FoldingRangeKind,SelectedSuggestionInfo:y.SelectedSuggestionInfo}}e.createMonacoLanguagesAPI=z}),define(se[938],oe([1,0,36,338,936,937,362]),function(te,e,L,k,y,E,S){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.languages=e.editor=e.Token=e.Uri=e.MarkerTag=e.MarkerSeverity=e.SelectionDirection=e.Selection=e.Range=e.Position=e.KeyMod=e.KeyCode=e.Emitter=e.CancellationTokenSource=void 0,L.EditorOptions.wrappingIndent.defaultValue=0,L.EditorOptions.glyphMargin.defaultValue=!1,L.EditorOptions.autoIndent.defaultValue=3,L.EditorOptions.overviewRulerLanes.defaultValue=2,S.FormattingConflicts.setFormatterSelector((v,b,a)=>Promise.resolve(v[0]));const p=(0,k.createMonacoBaseAPI)();p.editor=(0,y.createMonacoEditorAPI)(),p.languages=(0,E.createMonacoLanguagesAPI)(),e.CancellationTokenSource=p.CancellationTokenSource,e.Emitter=p.Emitter,e.KeyCode=p.KeyCode,e.KeyMod=p.KeyMod,e.Position=p.Position,e.Range=p.Range,e.Selection=p.Selection,e.SelectionDirection=p.SelectionDirection,e.MarkerSeverity=p.MarkerSeverity,e.MarkerTag=p.MarkerTag,e.Uri=p.Uri,e.Token=p.Token,e.editor=p.editor,e.languages=p.languages;const _=globalThis.MonacoEnvironment;(_?.globalAPI||typeof define==\"function\"&&define.amd)&&(globalThis.monaco=p),typeof globalThis.require<\"u\"&&typeof globalThis.require.config==\"function\"&&globalThis.require.config({ignoreDuplicateModules:[\"vscode-languageserver-types\",\"vscode-languageserver-types/main\",\"vscode-languageserver-textdocument\",\"vscode-languageserver-textdocument/main\",\"vscode-nls\",\"vscode-nls/vscode-nls\",\"jsonc-parser\",\"jsonc-parser/main\",\"vscode-uri\",\"vscode-uri/index\",\"vs/basic-languages/typescript/typescript\"]})});var pi=this&&this.__createBinding||(Object.create?function(te,e,L,k){k===void 0&&(k=L);var y=Object.getOwnPropertyDescriptor(e,L);(!y||(\"get\"in y?!e.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return e[L]}}),Object.defineProperty(te,k,y)}:function(te,e,L,k){k===void 0&&(k=L),te[k]=e[L]}),vi=this&&this.__exportStar||function(te,e){for(var L in te)L!==\"default\"&&!Object.prototype.hasOwnProperty.call(e,L)&&pi(e,te,L)};define(se[940],oe([1,0,938,934,829,830,802,873,874,833,921,876]),function(te,e,L){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),vi(L,e)})}).call(this);\n\n\n/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/basic-languages/monaco.contribution\", [\"require\",\"require\",\"vs/editor/editor.api\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var y=Object.create;var g=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var a=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(r,s)=>(typeof require<\"u\"?require:r)[s]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var D=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var l=(e,r,s,n)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let o of q(r))!M.call(e,o)&&o!==s&&g(e,o,{get:()=>r[o],enumerable:!(n=x(r,o))||n.enumerable});return e},p=(e,r,s)=>(l(e,r,\"default\"),s&&l(s,r,\"default\")),c=(e,r,s)=>(s=e!=null?y(A(e)):{},l(r||!e||!e.__esModule?g(s,\"default\",{value:e,enumerable:!0}):s,e));var v=D((w,d)=>{var b=c(a(\"vs/editor/editor.api\"));d.exports=b});var t={};p(t,c(v()));var f={},m={},u=class e{static getOrCreate(r){return m[r]||(m[r]=new e(r)),m[r]}constructor(r){this._languageId=r,this._loadingTriggered=!1,this._lazyLoadPromise=new Promise((s,n)=>{this._lazyLoadPromiseResolve=s,this._lazyLoadPromiseReject=n})}load(){return this._loadingTriggered||(this._loadingTriggered=!0,f[this._languageId].loader().then(r=>this._lazyLoadPromiseResolve(r),r=>this._lazyLoadPromiseReject(r))),this._lazyLoadPromise}};function i(e){let r=e.id;f[r]=e,t.languages.register(e);let s=u.getOrCreate(r);t.languages.registerTokensProviderFactory(r,{create:async()=>(await s.load()).language}),t.languages.onLanguageEncountered(r,async()=>{let n=await s.load();t.languages.setLanguageConfiguration(r,n.conf)})}i({id:\"abap\",extensions:[\".abap\"],aliases:[\"abap\",\"ABAP\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/abap/abap\"],e,r)})});i({id:\"apex\",extensions:[\".cls\"],aliases:[\"Apex\",\"apex\"],mimetypes:[\"text/x-apex-source\",\"text/x-apex\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/apex/apex\"],e,r)})});i({id:\"azcli\",extensions:[\".azcli\"],aliases:[\"Azure CLI\",\"azcli\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/azcli/azcli\"],e,r)})});i({id:\"bat\",extensions:[\".bat\",\".cmd\"],aliases:[\"Batch\",\"bat\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/bat/bat\"],e,r)})});i({id:\"bicep\",extensions:[\".bicep\"],aliases:[\"Bicep\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/bicep/bicep\"],e,r)})});i({id:\"cameligo\",extensions:[\".mligo\"],aliases:[\"Cameligo\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/cameligo/cameligo\"],e,r)})});i({id:\"clojure\",extensions:[\".clj\",\".cljs\",\".cljc\",\".edn\"],aliases:[\"clojure\",\"Clojure\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/clojure/clojure\"],e,r)})});i({id:\"coffeescript\",extensions:[\".coffee\"],aliases:[\"CoffeeScript\",\"coffeescript\",\"coffee\"],mimetypes:[\"text/x-coffeescript\",\"text/coffeescript\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/coffee/coffee\"],e,r)})});i({id:\"c\",extensions:[\".c\",\".h\"],aliases:[\"C\",\"c\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/cpp/cpp\"],e,r)})});i({id:\"cpp\",extensions:[\".cpp\",\".cc\",\".cxx\",\".hpp\",\".hh\",\".hxx\"],aliases:[\"C++\",\"Cpp\",\"cpp\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/cpp/cpp\"],e,r)})});i({id:\"csharp\",extensions:[\".cs\",\".csx\",\".cake\"],aliases:[\"C#\",\"csharp\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/csharp/csharp\"],e,r)})});i({id:\"csp\",extensions:[],aliases:[\"CSP\",\"csp\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/csp/csp\"],e,r)})});i({id:\"css\",extensions:[\".css\"],aliases:[\"CSS\",\"css\"],mimetypes:[\"text/css\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/css/css\"],e,r)})});i({id:\"cypher\",extensions:[\".cypher\",\".cyp\"],aliases:[\"Cypher\",\"OpenCypher\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/cypher/cypher\"],e,r)})});i({id:\"dart\",extensions:[\".dart\"],aliases:[\"Dart\",\"dart\"],mimetypes:[\"text/x-dart-source\",\"text/x-dart\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/dart/dart\"],e,r)})});i({id:\"dockerfile\",extensions:[\".dockerfile\"],filenames:[\"Dockerfile\"],aliases:[\"Dockerfile\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/dockerfile/dockerfile\"],e,r)})});i({id:\"ecl\",extensions:[\".ecl\"],aliases:[\"ECL\",\"Ecl\",\"ecl\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/ecl/ecl\"],e,r)})});i({id:\"elixir\",extensions:[\".ex\",\".exs\"],aliases:[\"Elixir\",\"elixir\",\"ex\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/elixir/elixir\"],e,r)})});i({id:\"flow9\",extensions:[\".flow\"],aliases:[\"Flow9\",\"Flow\",\"flow9\",\"flow\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/flow9/flow9\"],e,r)})});i({id:\"fsharp\",extensions:[\".fs\",\".fsi\",\".ml\",\".mli\",\".fsx\",\".fsscript\"],aliases:[\"F#\",\"FSharp\",\"fsharp\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/fsharp/fsharp\"],e,r)})});i({id:\"freemarker2\",extensions:[\".ftl\",\".ftlh\",\".ftlx\"],aliases:[\"FreeMarker2\",\"Apache FreeMarker2\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/freemarker2/freemarker2\"],e,r)}).then(e=>e.TagAngleInterpolationDollar)});i({id:\"freemarker2.tag-angle.interpolation-dollar\",aliases:[\"FreeMarker2 (Angle/Dollar)\",\"Apache FreeMarker2 (Angle/Dollar)\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/freemarker2/freemarker2\"],e,r)}).then(e=>e.TagAngleInterpolationDollar)});i({id:\"freemarker2.tag-bracket.interpolation-dollar\",aliases:[\"FreeMarker2 (Bracket/Dollar)\",\"Apache FreeMarker2 (Bracket/Dollar)\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/freemarker2/freemarker2\"],e,r)}).then(e=>e.TagBracketInterpolationDollar)});i({id:\"freemarker2.tag-angle.interpolation-bracket\",aliases:[\"FreeMarker2 (Angle/Bracket)\",\"Apache FreeMarker2 (Angle/Bracket)\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/freemarker2/freemarker2\"],e,r)}).then(e=>e.TagAngleInterpolationBracket)});i({id:\"freemarker2.tag-bracket.interpolation-bracket\",aliases:[\"FreeMarker2 (Bracket/Bracket)\",\"Apache FreeMarker2 (Bracket/Bracket)\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/freemarker2/freemarker2\"],e,r)}).then(e=>e.TagBracketInterpolationBracket)});i({id:\"freemarker2.tag-auto.interpolation-dollar\",aliases:[\"FreeMarker2 (Auto/Dollar)\",\"Apache FreeMarker2 (Auto/Dollar)\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/freemarker2/freemarker2\"],e,r)}).then(e=>e.TagAutoInterpolationDollar)});i({id:\"freemarker2.tag-auto.interpolation-bracket\",aliases:[\"FreeMarker2 (Auto/Bracket)\",\"Apache FreeMarker2 (Auto/Bracket)\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/freemarker2/freemarker2\"],e,r)}).then(e=>e.TagAutoInterpolationBracket)});i({id:\"go\",extensions:[\".go\"],aliases:[\"Go\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/go/go\"],e,r)})});i({id:\"graphql\",extensions:[\".graphql\",\".gql\"],aliases:[\"GraphQL\",\"graphql\",\"gql\"],mimetypes:[\"application/graphql\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/graphql/graphql\"],e,r)})});i({id:\"handlebars\",extensions:[\".handlebars\",\".hbs\"],aliases:[\"Handlebars\",\"handlebars\",\"hbs\"],mimetypes:[\"text/x-handlebars-template\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/handlebars/handlebars\"],e,r)})});i({id:\"hcl\",extensions:[\".tf\",\".tfvars\",\".hcl\"],aliases:[\"Terraform\",\"tf\",\"HCL\",\"hcl\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/hcl/hcl\"],e,r)})});i({id:\"html\",extensions:[\".html\",\".htm\",\".shtml\",\".xhtml\",\".mdoc\",\".jsp\",\".asp\",\".aspx\",\".jshtm\"],aliases:[\"HTML\",\"htm\",\"html\",\"xhtml\"],mimetypes:[\"text/html\",\"text/x-jshtm\",\"text/template\",\"text/ng-template\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/html/html\"],e,r)})});i({id:\"ini\",extensions:[\".ini\",\".properties\",\".gitconfig\"],filenames:[\"config\",\".gitattributes\",\".gitconfig\",\".editorconfig\"],aliases:[\"Ini\",\"ini\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/ini/ini\"],e,r)})});i({id:\"java\",extensions:[\".java\",\".jav\"],aliases:[\"Java\",\"java\"],mimetypes:[\"text/x-java-source\",\"text/x-java\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/java/java\"],e,r)})});i({id:\"javascript\",extensions:[\".js\",\".es6\",\".jsx\",\".mjs\",\".cjs\"],firstLine:\"^#!.*\\\\bnode\",filenames:[\"jakefile\"],aliases:[\"JavaScript\",\"javascript\",\"js\"],mimetypes:[\"text/javascript\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/javascript/javascript\"],e,r)})});i({id:\"julia\",extensions:[\".jl\"],aliases:[\"julia\",\"Julia\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/julia/julia\"],e,r)})});i({id:\"kotlin\",extensions:[\".kt\",\".kts\"],aliases:[\"Kotlin\",\"kotlin\"],mimetypes:[\"text/x-kotlin-source\",\"text/x-kotlin\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/kotlin/kotlin\"],e,r)})});i({id:\"less\",extensions:[\".less\"],aliases:[\"Less\",\"less\"],mimetypes:[\"text/x-less\",\"text/less\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/less/less\"],e,r)})});i({id:\"lexon\",extensions:[\".lex\"],aliases:[\"Lexon\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/lexon/lexon\"],e,r)})});i({id:\"lua\",extensions:[\".lua\"],aliases:[\"Lua\",\"lua\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/lua/lua\"],e,r)})});i({id:\"liquid\",extensions:[\".liquid\",\".html.liquid\"],aliases:[\"Liquid\",\"liquid\"],mimetypes:[\"application/liquid\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/liquid/liquid\"],e,r)})});i({id:\"m3\",extensions:[\".m3\",\".i3\",\".mg\",\".ig\"],aliases:[\"Modula-3\",\"Modula3\",\"modula3\",\"m3\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/m3/m3\"],e,r)})});i({id:\"markdown\",extensions:[\".md\",\".markdown\",\".mdown\",\".mkdn\",\".mkd\",\".mdwn\",\".mdtxt\",\".mdtext\"],aliases:[\"Markdown\",\"markdown\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/markdown/markdown\"],e,r)})});i({id:\"mdx\",extensions:[\".mdx\"],aliases:[\"MDX\",\"mdx\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/mdx/mdx\"],e,r)})});i({id:\"mips\",extensions:[\".s\"],aliases:[\"MIPS\",\"MIPS-V\"],mimetypes:[\"text/x-mips\",\"text/mips\",\"text/plaintext\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/mips/mips\"],e,r)})});i({id:\"msdax\",extensions:[\".dax\",\".msdax\"],aliases:[\"DAX\",\"MSDAX\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/msdax/msdax\"],e,r)})});i({id:\"mysql\",extensions:[],aliases:[\"MySQL\",\"mysql\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/mysql/mysql\"],e,r)})});i({id:\"objective-c\",extensions:[\".m\"],aliases:[\"Objective-C\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/objective-c/objective-c\"],e,r)})});i({id:\"pascal\",extensions:[\".pas\",\".p\",\".pp\"],aliases:[\"Pascal\",\"pas\"],mimetypes:[\"text/x-pascal-source\",\"text/x-pascal\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/pascal/pascal\"],e,r)})});i({id:\"pascaligo\",extensions:[\".ligo\"],aliases:[\"Pascaligo\",\"ligo\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/pascaligo/pascaligo\"],e,r)})});i({id:\"perl\",extensions:[\".pl\",\".pm\"],aliases:[\"Perl\",\"pl\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/perl/perl\"],e,r)})});i({id:\"pgsql\",extensions:[],aliases:[\"PostgreSQL\",\"postgres\",\"pg\",\"postgre\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/pgsql/pgsql\"],e,r)})});i({id:\"php\",extensions:[\".php\",\".php4\",\".php5\",\".phtml\",\".ctp\"],aliases:[\"PHP\",\"php\"],mimetypes:[\"application/x-php\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/php/php\"],e,r)})});i({id:\"pla\",extensions:[\".pla\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/pla/pla\"],e,r)})});i({id:\"postiats\",extensions:[\".dats\",\".sats\",\".hats\"],aliases:[\"ATS\",\"ATS/Postiats\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/postiats/postiats\"],e,r)})});i({id:\"powerquery\",extensions:[\".pq\",\".pqm\"],aliases:[\"PQ\",\"M\",\"Power Query\",\"Power Query M\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/powerquery/powerquery\"],e,r)})});i({id:\"powershell\",extensions:[\".ps1\",\".psm1\",\".psd1\"],aliases:[\"PowerShell\",\"powershell\",\"ps\",\"ps1\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/powershell/powershell\"],e,r)})});i({id:\"proto\",extensions:[\".proto\"],aliases:[\"protobuf\",\"Protocol Buffers\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/protobuf/protobuf\"],e,r)})});i({id:\"pug\",extensions:[\".jade\",\".pug\"],aliases:[\"Pug\",\"Jade\",\"jade\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/pug/pug\"],e,r)})});i({id:\"python\",extensions:[\".py\",\".rpy\",\".pyw\",\".cpy\",\".gyp\",\".gypi\"],aliases:[\"Python\",\"py\"],firstLine:\"^#!/.*\\\\bpython[0-9.-]*\\\\b\",loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/python/python\"],e,r)})});i({id:\"qsharp\",extensions:[\".qs\"],aliases:[\"Q#\",\"qsharp\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/qsharp/qsharp\"],e,r)})});i({id:\"r\",extensions:[\".r\",\".rhistory\",\".rmd\",\".rprofile\",\".rt\"],aliases:[\"R\",\"r\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/r/r\"],e,r)})});i({id:\"razor\",extensions:[\".cshtml\"],aliases:[\"Razor\",\"razor\"],mimetypes:[\"text/x-cshtml\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/razor/razor\"],e,r)})});i({id:\"redis\",extensions:[\".redis\"],aliases:[\"redis\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/redis/redis\"],e,r)})});i({id:\"redshift\",extensions:[],aliases:[\"Redshift\",\"redshift\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/redshift/redshift\"],e,r)})});i({id:\"restructuredtext\",extensions:[\".rst\"],aliases:[\"reStructuredText\",\"restructuredtext\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/restructuredtext/restructuredtext\"],e,r)})});i({id:\"ruby\",extensions:[\".rb\",\".rbx\",\".rjs\",\".gemspec\",\".pp\"],filenames:[\"rakefile\",\"Gemfile\"],aliases:[\"Ruby\",\"rb\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/ruby/ruby\"],e,r)})});i({id:\"rust\",extensions:[\".rs\",\".rlib\"],aliases:[\"Rust\",\"rust\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/rust/rust\"],e,r)})});i({id:\"sb\",extensions:[\".sb\"],aliases:[\"Small Basic\",\"sb\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/sb/sb\"],e,r)})});i({id:\"scala\",extensions:[\".scala\",\".sc\",\".sbt\"],aliases:[\"Scala\",\"scala\",\"SBT\",\"Sbt\",\"sbt\",\"Dotty\",\"dotty\"],mimetypes:[\"text/x-scala-source\",\"text/x-scala\",\"text/x-sbt\",\"text/x-dotty\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/scala/scala\"],e,r)})});i({id:\"scheme\",extensions:[\".scm\",\".ss\",\".sch\",\".rkt\"],aliases:[\"scheme\",\"Scheme\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/scheme/scheme\"],e,r)})});i({id:\"scss\",extensions:[\".scss\"],aliases:[\"Sass\",\"sass\",\"scss\"],mimetypes:[\"text/x-scss\",\"text/scss\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/scss/scss\"],e,r)})});i({id:\"shell\",extensions:[\".sh\",\".bash\"],aliases:[\"Shell\",\"sh\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/shell/shell\"],e,r)})});i({id:\"sol\",extensions:[\".sol\"],aliases:[\"sol\",\"solidity\",\"Solidity\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/solidity/solidity\"],e,r)})});i({id:\"aes\",extensions:[\".aes\"],aliases:[\"aes\",\"sophia\",\"Sophia\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/sophia/sophia\"],e,r)})});i({id:\"sparql\",extensions:[\".rq\"],aliases:[\"sparql\",\"SPARQL\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/sparql/sparql\"],e,r)})});i({id:\"sql\",extensions:[\".sql\"],aliases:[\"SQL\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/sql/sql\"],e,r)})});i({id:\"st\",extensions:[\".st\",\".iecst\",\".iecplc\",\".lc3lib\",\".TcPOU\",\".TcDUT\",\".TcGVL\",\".TcIO\"],aliases:[\"StructuredText\",\"scl\",\"stl\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/st/st\"],e,r)})});i({id:\"swift\",aliases:[\"Swift\",\"swift\"],extensions:[\".swift\"],mimetypes:[\"text/swift\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/swift/swift\"],e,r)})});i({id:\"systemverilog\",extensions:[\".sv\",\".svh\"],aliases:[\"SV\",\"sv\",\"SystemVerilog\",\"systemverilog\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/systemverilog/systemverilog\"],e,r)})});i({id:\"verilog\",extensions:[\".v\",\".vh\"],aliases:[\"V\",\"v\",\"Verilog\",\"verilog\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/systemverilog/systemverilog\"],e,r)})});i({id:\"tcl\",extensions:[\".tcl\"],aliases:[\"tcl\",\"Tcl\",\"tcltk\",\"TclTk\",\"tcl/tk\",\"Tcl/Tk\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/tcl/tcl\"],e,r)})});i({id:\"twig\",extensions:[\".twig\"],aliases:[\"Twig\",\"twig\"],mimetypes:[\"text/x-twig\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/twig/twig\"],e,r)})});i({id:\"typescript\",extensions:[\".ts\",\".tsx\",\".cts\",\".mts\"],aliases:[\"TypeScript\",\"ts\",\"typescript\"],mimetypes:[\"text/typescript\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/typescript/typescript\"],e,r)})});i({id:\"vb\",extensions:[\".vb\"],aliases:[\"Visual Basic\",\"vb\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/vb/vb\"],e,r)})});i({id:\"wgsl\",extensions:[\".wgsl\"],aliases:[\"WebGPU Shading Language\",\"WGSL\",\"wgsl\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/wgsl/wgsl\"],e,r)})});i({id:\"xml\",extensions:[\".xml\",\".xsd\",\".dtd\",\".ascx\",\".csproj\",\".config\",\".props\",\".targets\",\".wxi\",\".wxl\",\".wxs\",\".xaml\",\".svg\",\".svgz\",\".opf\",\".xslt\",\".xsl\"],firstLine:\"(\\\\<\\\\?xml.*)|(\\\\<svg)|(\\\\<\\\\!doctype\\\\s+svg)\",aliases:[\"XML\",\"xml\"],mimetypes:[\"text/xml\",\"application/xml\",\"application/xaml+xml\",\"application/xml-dtd\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/xml/xml\"],e,r)})});i({id:\"yaml\",extensions:[\".yaml\",\".yml\"],aliases:[\"YAML\",\"yaml\",\"YML\",\"yml\"],mimetypes:[\"application/x-yaml\",\"text/x-yaml\"],loader:()=>new Promise((e,r)=>{a([\"vs/basic-languages/yaml/yaml\"],e,r)})});})();\nreturn moduleExports;\n});\n\n/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/css/monaco.contribution\", [\"require\",\"require\",\"vs/editor/editor.api\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var C=Object.create;var g=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var l=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(n,r)=>(typeof require<\"u\"?require:n)[r]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var I=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),M=(e,n)=>{for(var r in n)g(e,r,{get:n[r],enumerable:!0})},s=(e,n,r,a)=>{if(n&&typeof n==\"object\"||typeof n==\"function\")for(let t of b(n))!h.call(e,t)&&t!==r&&g(e,t,{get:()=>n[t],enumerable:!(a=S(n,t))||a.enumerable});return e},y=(e,n,r)=>(s(e,n,\"default\"),r&&s(r,n,\"default\")),w=(e,n,r)=>(r=e!=null?C(x(e)):{},s(n||!e||!e.__esModule?g(r,\"default\",{value:e,enumerable:!0}):r,e)),P=e=>s(g({},\"__esModule\",{value:!0}),e);var v=I((k,D)=>{var O=w(l(\"vs/editor/editor.api\"));D.exports=O});var R={};M(R,{cssDefaults:()=>p,lessDefaults:()=>f,scssDefaults:()=>c});var o={};y(o,w(v()));var i=class{constructor(n,r,a){this._onDidChange=new o.Emitter;this._languageId=n,this.setOptions(r),this.setModeConfiguration(a)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get modeConfiguration(){return this._modeConfiguration}get diagnosticsOptions(){return this.options}get options(){return this._options}setOptions(n){this._options=n||Object.create(null),this._onDidChange.fire(this)}setDiagnosticsOptions(n){this.setOptions(n)}setModeConfiguration(n){this._modeConfiguration=n||Object.create(null),this._onDidChange.fire(this)}},d={validate:!0,lint:{compatibleVendorPrefixes:\"ignore\",vendorPrefix:\"warning\",duplicateProperties:\"warning\",emptyRules:\"warning\",importStatement:\"ignore\",boxModel:\"ignore\",universalSelector:\"ignore\",zeroUnits:\"ignore\",fontFaceProperties:\"warning\",hexColorLength:\"error\",argumentsInColorFunction:\"error\",unknownProperties:\"warning\",ieHack:\"ignore\",unknownVendorSpecificProperties:\"ignore\",propertyIgnoredDueToDisplay:\"warning\",important:\"ignore\",float:\"ignore\",idSelector:\"ignore\"},data:{useDefaultDataProvider:!0},format:{newlineBetweenSelectors:!0,newlineBetweenRules:!0,spaceAroundSelectorSeparator:!1,braceStyle:\"collapse\",maxPreserveNewLines:void 0,preserveNewLines:!0}},u={completionItems:!0,hovers:!0,documentSymbols:!0,definitions:!0,references:!0,documentHighlights:!0,rename:!0,colors:!0,foldingRanges:!0,diagnostics:!0,selectionRanges:!0,documentFormattingEdits:!0,documentRangeFormattingEdits:!0},p=new i(\"css\",d,u),c=new i(\"scss\",d,u),f=new i(\"less\",d,u);o.languages.css={cssDefaults:p,lessDefaults:f,scssDefaults:c};function m(){return new Promise((e,n)=>{l([\"vs/language/css/cssMode\"],e,n)})}o.languages.onLanguage(\"less\",()=>{m().then(e=>e.setupMode(f))});o.languages.onLanguage(\"scss\",()=>{m().then(e=>e.setupMode(c))});o.languages.onLanguage(\"css\",()=>{m().then(e=>e.setupMode(p))});return P(R);})();\nreturn moduleExports;\n});\n\n/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/html/monaco.contribution\", [\"require\",\"require\",\"vs/editor/editor.api\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var w=Object.create;var l=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var f=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(n,t)=>(typeof require<\"u\"?require:n)[t]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var k=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),T=(e,n)=>{for(var t in n)l(e,t,{get:n[t],enumerable:!0})},d=(e,n,t,r)=>{if(n&&typeof n==\"object\"||typeof n==\"function\")for(let o of H(n))!_.call(e,o)&&o!==t&&l(e,o,{get:()=>n[o],enumerable:!(r=R(n,o))||r.enumerable});return e},b=(e,n,t)=>(d(e,n,\"default\"),t&&d(t,n,\"default\")),v=(e,n,t)=>(t=e!=null?w(O(e)):{},d(n||!e||!e.__esModule?l(t,\"default\",{value:e,enumerable:!0}):t,e)),A=e=>d(l({},\"__esModule\",{value:!0}),e);var C=k((z,h)=>{var E=v(f(\"vs/editor/editor.api\"));h.exports=E});var V={};T(V,{handlebarDefaults:()=>M,handlebarLanguageService:()=>m,htmlDefaults:()=>x,htmlLanguageService:()=>c,razorDefaults:()=>I,razorLanguageService:()=>y,registerHTMLLanguageService:()=>s});var a={};b(a,v(C()));var p=class{constructor(n,t,r){this._onDidChange=new a.Emitter;this._languageId=n,this.setOptions(t),this.setModeConfiguration(r)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get options(){return this._options}get modeConfiguration(){return this._modeConfiguration}setOptions(n){this._options=n||Object.create(null),this._onDidChange.fire(this)}setModeConfiguration(n){this._modeConfiguration=n||Object.create(null),this._onDidChange.fire(this)}},F={tabSize:4,insertSpaces:!1,wrapLineLength:120,unformatted:'default\": \"a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, select, small, span, strong, sub, sup, textarea, tt, var',contentUnformatted:\"pre\",indentInnerHtml:!1,preserveNewLines:!0,maxPreserveNewLines:void 0,indentHandlebars:!1,endWithNewline:!1,extraLiners:\"head, body, /html\",wrapAttributes:\"auto\"},u={format:F,suggest:{},data:{useDefaultDataProvider:!0}};function g(e){return{completionItems:!0,hovers:!0,documentSymbols:!0,links:!0,documentHighlights:!0,rename:!0,colors:!0,foldingRanges:!0,selectionRanges:!0,diagnostics:e===i,documentFormattingEdits:e===i,documentRangeFormattingEdits:e===i}}var i=\"html\",D=\"handlebars\",L=\"razor\",c=s(i,u,g(i)),x=c.defaults,m=s(D,u,g(D)),M=m.defaults,y=s(L,u,g(L)),I=y.defaults;a.languages.html={htmlDefaults:x,razorDefaults:I,handlebarDefaults:M,htmlLanguageService:c,handlebarLanguageService:m,razorLanguageService:y,registerHTMLLanguageService:s};function P(){return new Promise((e,n)=>{f([\"vs/language/html/htmlMode\"],e,n)})}function s(e,n=u,t=g(e)){let r=new p(e,n,t),o,S=a.languages.onLanguage(e,async()=>{o=(await P()).setupMode(r)});return{defaults:r,dispose(){S.dispose(),o?.dispose(),o=void 0}}}return A(V);})();\nreturn moduleExports;\n});\n\n/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/json/monaco.contribution\", [\"require\",\"require\",\"vs/editor/editor.api\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var y=Object.create;var i=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var s=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(n,o)=>(typeof require<\"u\"?require:n)[o]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var O=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),v=(e,n)=>{for(var o in n)i(e,o,{get:n[o],enumerable:!0})},g=(e,n,o,a)=>{if(n&&typeof n==\"object\"||typeof n==\"function\")for(let r of h(n))!b.call(e,r)&&r!==o&&i(e,r,{get:()=>n[r],enumerable:!(a=f(n,r))||a.enumerable});return e};var m=(e,n,o)=>(o=e!=null?y(N(e)):{},g(n||!e||!e.__esModule?i(o,\"default\",{value:e,enumerable:!0}):o,e)),x=e=>g(i({},\"__esModule\",{value:!0}),e);var u=O((J,c)=>{var A=m(s(\"vs/editor/editor.api\"));c.exports=A});var C={};v(C,{getWorker:()=>S,jsonDefaults:()=>l});var t=m(u());var d=class{constructor(n,o,a){this._onDidChange=new t.Emitter;this._languageId=n,this.setDiagnosticsOptions(o),this.setModeConfiguration(a)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get modeConfiguration(){return this._modeConfiguration}get diagnosticsOptions(){return this._diagnosticsOptions}setDiagnosticsOptions(n){this._diagnosticsOptions=n||Object.create(null),this._onDidChange.fire(this)}setModeConfiguration(n){this._modeConfiguration=n||Object.create(null),this._onDidChange.fire(this)}},T={validate:!0,allowComments:!0,schemas:[],enableSchemaRequest:!1,schemaRequest:\"warning\",schemaValidation:\"warning\",comments:\"error\",trailingCommas:\"error\"},D={documentFormattingEdits:!0,documentRangeFormattingEdits:!0,completionItems:!0,hovers:!0,documentSymbols:!0,tokens:!0,colors:!0,foldingRanges:!0,diagnostics:!0,selectionRanges:!0},l=new d(\"json\",T,D),S=()=>p().then(e=>e.getWorker());t.languages.json={jsonDefaults:l,getWorker:S};function p(){return new Promise((e,n)=>{s([\"vs/language/json/jsonMode\"],e,n)})}t.languages.register({id:\"json\",extensions:[\".json\",\".bowerrc\",\".jshintrc\",\".jscsrc\",\".eslintrc\",\".babelrc\",\".har\"],aliases:[\"JSON\",\"json\"],mimetypes:[\"application/json\"]});t.languages.onLanguage(\"json\",()=>{p().then(e=>e.setupMode(l))});return x(C);})();\nreturn moduleExports;\n});\n\n/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/typescript/monaco.contribution\", [\"require\",\"require\",\"vs/editor/editor.api\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var N=Object.create;var d=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var c=(n=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(n,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):n)(function(n){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+n+'\" is not supported')});var w=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),A=(n,e)=>{for(var t in e)d(n,t,{get:e[t],enumerable:!0})},g=(n,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let r of M(e))!F.call(n,r)&&r!==t&&d(n,r,{get:()=>e[r],enumerable:!(i=H(e,r))||i.enumerable});return n},D=(n,e,t)=>(g(n,e,\"default\"),t&&g(t,e,\"default\")),C=(n,e,t)=>(t=n!=null?N(R(n)):{},g(e||!n||!n.__esModule?d(t,\"default\",{value:n,enumerable:!0}):t,n)),W=n=>g(d({},\"__esModule\",{value:!0}),n);var _=w((B,E)=>{var V=C(c(\"vs/editor/editor.api\"));E.exports=V});var T={};A(T,{JsxEmit:()=>f,ModuleKind:()=>b,ModuleResolutionKind:()=>O,NewLineKind:()=>y,ScriptTarget:()=>h,getJavaScriptWorker:()=>k,getTypeScriptWorker:()=>P,javascriptDefaults:()=>v,typescriptDefaults:()=>x,typescriptVersion:()=>I});var L=\"5.0.2\";var l={};D(l,C(_()));var b=(s=>(s[s.None=0]=\"None\",s[s.CommonJS=1]=\"CommonJS\",s[s.AMD=2]=\"AMD\",s[s.UMD=3]=\"UMD\",s[s.System=4]=\"System\",s[s.ES2015=5]=\"ES2015\",s[s.ESNext=99]=\"ESNext\",s))(b||{}),f=(a=>(a[a.None=0]=\"None\",a[a.Preserve=1]=\"Preserve\",a[a.React=2]=\"React\",a[a.ReactNative=3]=\"ReactNative\",a[a.ReactJSX=4]=\"ReactJSX\",a[a.ReactJSXDev=5]=\"ReactJSXDev\",a))(f||{}),y=(t=>(t[t.CarriageReturnLineFeed=0]=\"CarriageReturnLineFeed\",t[t.LineFeed=1]=\"LineFeed\",t))(y||{}),h=(o=>(o[o.ES3=0]=\"ES3\",o[o.ES5=1]=\"ES5\",o[o.ES2015=2]=\"ES2015\",o[o.ES2016=3]=\"ES2016\",o[o.ES2017=4]=\"ES2017\",o[o.ES2018=5]=\"ES2018\",o[o.ES2019=6]=\"ES2019\",o[o.ES2020=7]=\"ES2020\",o[o.ESNext=99]=\"ESNext\",o[o.JSON=100]=\"JSON\",o[o.Latest=99]=\"Latest\",o))(h||{}),O=(t=>(t[t.Classic=1]=\"Classic\",t[t.NodeJs=2]=\"NodeJs\",t))(O||{}),m=class{constructor(e,t,i,r,p){this._onDidChange=new l.Emitter;this._onDidExtraLibsChange=new l.Emitter;this._extraLibs=Object.create(null),this._removedExtraLibs=Object.create(null),this._eagerModelSync=!1,this.setCompilerOptions(e),this.setDiagnosticsOptions(t),this.setWorkerOptions(i),this.setInlayHintsOptions(r),this.setModeConfiguration(p),this._onDidExtraLibsChangeTimeout=-1}get onDidChange(){return this._onDidChange.event}get onDidExtraLibsChange(){return this._onDidExtraLibsChange.event}get modeConfiguration(){return this._modeConfiguration}get workerOptions(){return this._workerOptions}get inlayHintsOptions(){return this._inlayHintsOptions}getExtraLibs(){return this._extraLibs}addExtraLib(e,t){let i;if(typeof t>\"u\"?i=`ts:extralib-${Math.random().toString(36).substring(2,15)}`:i=t,this._extraLibs[i]&&this._extraLibs[i].content===e)return{dispose:()=>{}};let r=1;return this._removedExtraLibs[i]&&(r=this._removedExtraLibs[i]+1),this._extraLibs[i]&&(r=this._extraLibs[i].version+1),this._extraLibs[i]={content:e,version:r},this._fireOnDidExtraLibsChangeSoon(),{dispose:()=>{let p=this._extraLibs[i];p&&p.version===r&&(delete this._extraLibs[i],this._removedExtraLibs[i]=r,this._fireOnDidExtraLibsChangeSoon())}}}setExtraLibs(e){for(let t in this._extraLibs)this._removedExtraLibs[t]=this._extraLibs[t].version;if(this._extraLibs=Object.create(null),e&&e.length>0)for(let t of e){let i=t.filePath||`ts:extralib-${Math.random().toString(36).substring(2,15)}`,r=t.content,p=1;this._removedExtraLibs[i]&&(p=this._removedExtraLibs[i]+1),this._extraLibs[i]={content:r,version:p}}this._fireOnDidExtraLibsChangeSoon()}_fireOnDidExtraLibsChangeSoon(){this._onDidExtraLibsChangeTimeout===-1&&(this._onDidExtraLibsChangeTimeout=window.setTimeout(()=>{this._onDidExtraLibsChangeTimeout=-1,this._onDidExtraLibsChange.fire(void 0)},0))}getCompilerOptions(){return this._compilerOptions}setCompilerOptions(e){this._compilerOptions=e||Object.create(null),this._onDidChange.fire(void 0)}getDiagnosticsOptions(){return this._diagnosticsOptions}setDiagnosticsOptions(e){this._diagnosticsOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setWorkerOptions(e){this._workerOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setInlayHintsOptions(e){this._inlayHintsOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setMaximumWorkerIdleTime(e){}setEagerModelSync(e){this._eagerModelSync=e}getEagerModelSync(){return this._eagerModelSync}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(void 0)}},I=L,S={completionItems:!0,hovers:!0,documentSymbols:!0,definitions:!0,references:!0,documentHighlights:!0,rename:!0,diagnostics:!0,documentRangeFormattingEdits:!0,signatureHelp:!0,onTypeFormattingEdits:!0,codeActions:!0,inlayHints:!0},x=new m({allowNonTsExtensions:!0,target:99},{noSemanticValidation:!1,noSyntaxValidation:!1,onlyVisible:!1},{},{},S),v=new m({allowNonTsExtensions:!0,allowJs:!0,target:99},{noSemanticValidation:!0,noSyntaxValidation:!1,onlyVisible:!1},{},{},S),P=()=>u().then(n=>n.getTypeScriptWorker()),k=()=>u().then(n=>n.getJavaScriptWorker());l.languages.typescript={ModuleKind:b,JsxEmit:f,NewLineKind:y,ScriptTarget:h,ModuleResolutionKind:O,typescriptVersion:I,typescriptDefaults:x,javascriptDefaults:v,getTypeScriptWorker:P,getJavaScriptWorker:k};function u(){return new Promise((n,e)=>{c([\"vs/language/typescript/tsMode\"],n,e)})}l.languages.onLanguage(\"typescript\",()=>u().then(n=>n.setupTypeScript(x)));l.languages.onLanguage(\"javascript\",()=>u().then(n=>n.setupJavaScript(v)));return W(T);})();\nreturn moduleExports;\n});\n\ndefine(\"vs/editor/editor.main\", [\"vs/editor/edcore.main\",\"vs/basic-languages/monaco.contribution\",\"vs/language/css/monaco.contribution\",\"vs/language/html/monaco.contribution\",\"vs/language/json/monaco.contribution\",\"vs/language/typescript/monaco.contribution\"], function(api) { return api; });\n//# sourceMappingURL=../../../min-maps/vs/editor/editor.main.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/editor/editor.main.nls.js",
    "content": "/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/define(\"vs/editor/editor.main.nls\",{\"vs/base/browser/ui/actionbar/actionViewItems\":[\"{0} ({1})\"],\"vs/base/browser/ui/findinput/findInput\":[\"input\"],\"vs/base/browser/ui/findinput/findInputToggles\":[\"Match Case\",\"Match Whole Word\",\"Use Regular Expression\"],\"vs/base/browser/ui/findinput/replaceInput\":[\"input\",\"Preserve Case\"],\"vs/base/browser/ui/hover/hoverWidget\":[\"Inspect this in the accessible view with {0}.\",\"Inspect this in the accessible view via the command Open Accessible View which is currently not triggerable via keybinding.\"],\"vs/base/browser/ui/iconLabel/iconLabelHover\":[\"Loading...\"],\"vs/base/browser/ui/inputbox/inputBox\":[\"Error: {0}\",\"Warning: {0}\",\"Info: {0}\",\" or {0} for history\",\" ({0} for history)\",\"Cleared Input\"],\"vs/base/browser/ui/keybindingLabel/keybindingLabel\":[\"Unbound\"],\"vs/base/browser/ui/selectBox/selectBoxCustom\":[\"Select Box\"],\"vs/base/browser/ui/toolbar/toolbar\":[\"More Actions...\"],\"vs/base/browser/ui/tree/abstractTree\":[\"Filter\",\"Fuzzy Match\",\"Type to filter\",\"Type to search\",\"Type to search\",\"Close\",\"No elements found.\"],\"vs/base/common/actions\":[\"(empty)\"],\"vs/base/common/errorMessage\":[\"{0}: {1}\",\"A system error occurred ({0})\",\"An unknown error occurred. Please consult the log for more details.\",\"An unknown error occurred. Please consult the log for more details.\",\"{0} ({1} errors in total)\",\"An unknown error occurred. Please consult the log for more details.\"],\"vs/base/common/keybindingLabels\":[\"Ctrl\",\"Shift\",\"Alt\",\"Windows\",\"Ctrl\",\"Shift\",\"Alt\",\"Super\",\"Control\",\"Shift\",\"Option\",\"Command\",\"Control\",\"Shift\",\"Alt\",\"Windows\",\"Control\",\"Shift\",\"Alt\",\"Super\"],\"vs/base/common/platform\":[\"_\"],\"vs/editor/browser/controller/textAreaHandler\":[\"editor\",\"The editor is not accessible at this time.\",\"{0} To enable screen reader optimized mode, use {1}\",\"{0} To enable screen reader optimized mode, open the quick pick with {1} and run the command Toggle Screen Reader Accessibility Mode, which is currently not triggerable via keyboard.\",\"{0} Please assign a keybinding for the command Toggle Screen Reader Accessibility Mode by accessing the keybindings editor with {1} and run it.\"],\"vs/editor/browser/coreCommands\":[\"Stick to the end even when going to longer lines\",\"Stick to the end even when going to longer lines\",\"Removed secondary cursors\"],\"vs/editor/browser/editorExtensions\":[\"&&Undo\",\"Undo\",\"&&Redo\",\"Redo\",\"&&Select All\",\"Select All\"],\"vs/editor/browser/widget/codeEditorWidget\":[\"The number of cursors has been limited to {0}. Consider using [find and replace](https://code.visualstudio.com/docs/editor/codebasics#_find-and-replace) for larger changes or increase the editor multi cursor limit setting.\",\"Increase Multi Cursor Limit\"],\"vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer\":[\"Icon for 'Insert' in accessible diff viewer.\",\"Icon for 'Remove' in accessible diff viewer.\",\"Icon for 'Close' in accessible diff viewer.\",\"Close\",\"Accessible Diff Viewer. Use arrow up and down to navigate.\",\"no lines changed\",\"1 line changed\",\"{0} lines changed\",\"Difference {0} of {1}: original line {2}, {3}, modified line {4}, {5}\",\"blank\",\"{0} unchanged line {1}\",\"{0} original line {1} modified line {2}\",\"+ {0} modified line {1}\",\"- {0} original line {1}\"],\"vs/editor/browser/widget/diffEditor/components/diffEditorEditors\":[\" use {0} to open the accessibility help.\"],\"vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin\":[\"Copy deleted lines\",\"Copy deleted line\",\"Copy changed lines\",\"Copy changed line\",\"Copy deleted line ({0})\",\"Copy changed line ({0})\",\"Revert this change\"],\"vs/editor/browser/widget/diffEditor/diffEditor.contribution\":[\"Use Inline View When Space Is Limited\",\"Show Moved Code Blocks\",\"Diff Editor\",\"Accessible Diff Viewer\",\"Open Accessible Diff Viewer\",\"Toggle Collapse Unchanged Regions\",\"Toggle Show Moved Code Blocks\",\"Toggle Use Inline View When Space Is Limited\",\"Switch Side\",\"Exit Compare Move\",\"Collapse All Unchanged Regions\",\"Show All Unchanged Regions\",\"Go to Next Difference\",\"Go to Previous Difference\"],\"vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature\":[\"Fold Unchanged Region\",\"Click or drag to show more above\",\"Show Unchanged Region\",\"Click or drag to show more below\",\"{0} hidden lines\",\"Double click to unfold\"],\"vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature\":[\"Code moved with changes to line {0}-{1}\",\"Code moved with changes from line {0}-{1}\",\"Code moved to line {0}-{1}\",\"Code moved from line {0}-{1}\"],\"vs/editor/browser/widget/diffEditor/features/revertButtonsFeature\":[\"Revert Selected Changes\",\"Revert Change\"],\"vs/editor/browser/widget/diffEditor/registrations.contribution\":[\"The border color for text that got moved in the diff editor.\",\"The active border color for text that got moved in the diff editor.\",\"The color of the shadow around unchanged region widgets.\",\"Line decoration for inserts in the diff editor.\",\"Line decoration for removals in the diff editor.\"],\"vs/editor/browser/widget/hoverWidget/hoverWidget\":[\"Hold {0} key to mouse over\"],\"vs/editor/browser/widget/multiDiffEditorWidget/colors\":[\"The background color of the diff editor's header\",\"The background color of the multi file diff editor\",\"The border color of the multi file diff editor\"],\"vs/editor/common/config/editorConfigurationSchema\":[\"Editor\",\"The number of spaces a tab is equal to. This setting is overridden based on the file contents when {0} is on.\",'The number of spaces used for indentation or `\"tabSize\"` to use the value from `#editor.tabSize#`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.',\"Insert spaces when pressing `Tab`. This setting is overridden based on the file contents when {0} is on.\",\"Controls whether {0} and {1} will be automatically detected when a file is opened based on the file contents.\",\"Remove trailing auto inserted whitespace.\",\"Special handling for large files to disable certain memory intensive features.\",\"Turn off Word Based Suggestions.\",\"Only suggest words from the active document.\",\"Suggest words from all open documents of the same language.\",\"Suggest words from all open documents.\",\"Controls whether completions should be computed based on words in the document and from which documents they are computed.\",\"Semantic highlighting enabled for all color themes.\",\"Semantic highlighting disabled for all color themes.\",\"Semantic highlighting is configured by the current color theme's `semanticHighlighting` setting.\",\"Controls whether the semanticHighlighting is shown for the languages that support it.\",\"Keep peek editors open even when double-clicking their content or when hitting `Escape`.\",\"Lines above this length will not be tokenized for performance reasons\",\"Controls whether the tokenization should happen asynchronously on a web worker.\",\"Controls whether async tokenization should be logged. For debugging only.\",\"Controls whether async tokenization should be verified against legacy background tokenization. Might slow down tokenization. For debugging only.\",\"Defines the bracket symbols that increase or decrease the indentation.\",\"The opening bracket character or string sequence.\",\"The closing bracket character or string sequence.\",\"Defines the bracket pairs that are colorized by their nesting level if bracket pair colorization is enabled.\",\"The opening bracket character or string sequence.\",\"The closing bracket character or string sequence.\",\"Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.\",\"Maximum file size in MB for which to compute diffs. Use 0 for no limit.\",\"Controls whether the diff editor shows the diff side by side or inline.\",\"If the diff editor width is smaller than this value, the inline view is used.\",\"If enabled and the editor width is too small, the inline view is used.\",\"When enabled, the diff editor shows arrows in its glyph margin to revert changes.\",\"When enabled, the diff editor ignores changes in leading or trailing whitespace.\",\"Controls whether the diff editor shows +/- indicators for added/removed changes.\",\"Controls whether the editor shows CodeLens.\",\"Lines will never wrap.\",\"Lines will wrap at the viewport width.\",\"Lines will wrap according to the {0} setting.\",\"Uses the legacy diffing algorithm.\",\"Uses the advanced diffing algorithm.\",\"Controls whether the diff editor shows unchanged regions.\",\"Controls how many lines are used for unchanged regions.\",\"Controls how many lines are used as a minimum for unchanged regions.\",\"Controls how many lines are used as context when comparing unchanged regions.\",\"Controls whether the diff editor should show detected code moves.\",\"Controls whether the diff editor shows empty decorations to see where characters got inserted or deleted.\"],\"vs/editor/common/config/editorOptions\":[\"Use platform APIs to detect when a Screen Reader is attached.\",\"Optimize for usage with a Screen Reader.\",\"Assume a screen reader is not attached.\",\"Controls if the UI should run in a mode where it is optimized for screen readers.\",\"Controls whether a space character is inserted when commenting.\",\"Controls if empty lines should be ignored with toggle, add or remove actions for line comments.\",\"Controls whether copying without a selection copies the current line.\",\"Controls whether the cursor should jump to find matches while typing.\",\"Never seed search string from the editor selection.\",\"Always seed search string from the editor selection, including word at cursor position.\",\"Only seed search string from the editor selection.\",\"Controls whether the search string in the Find Widget is seeded from the editor selection.\",\"Never turn on Find in Selection automatically (default).\",\"Always turn on Find in Selection automatically.\",\"Turn on Find in Selection automatically when multiple lines of content are selected.\",\"Controls the condition for turning on Find in Selection automatically.\",\"Controls whether the Find Widget should read or modify the shared find clipboard on macOS.\",\"Controls whether the Find Widget should add extra lines on top of the editor. When true, you can scroll beyond the first line when the Find Widget is visible.\",\"Controls whether the search automatically restarts from the beginning (or the end) when no further matches can be found.\",\"Enables/Disables font ligatures ('calt' and 'liga' font features). Change this to a string for fine-grained control of the 'font-feature-settings' CSS property.\",\"Explicit 'font-feature-settings' CSS property. A boolean can be passed instead if one only needs to turn on/off ligatures.\",\"Configures font ligatures or font features. Can be either a boolean to enable/disable ligatures or a string for the value of the CSS 'font-feature-settings' property.\",\"Enables/Disables the translation from font-weight to font-variation-settings. Change this to a string for fine-grained control of the 'font-variation-settings' CSS property.\",\"Explicit 'font-variation-settings' CSS property. A boolean can be passed instead if one only needs to translate font-weight to font-variation-settings.\",\"Configures font variations. Can be either a boolean to enable/disable the translation from font-weight to font-variation-settings or a string for the value of the CSS 'font-variation-settings' property.\",\"Controls the font size in pixels.\",'Only \"normal\" and \"bold\" keywords or numbers between 1 and 1000 are allowed.','Controls the font weight. Accepts \"normal\" and \"bold\" keywords or numbers between 1 and 1000.',\"Show Peek view of the results (default)\",\"Go to the primary result and show a Peek view\",\"Go to the primary result and enable Peek-less navigation to others\",\"This setting is deprecated, please use separate settings like 'editor.editor.gotoLocation.multipleDefinitions' or 'editor.editor.gotoLocation.multipleImplementations' instead.\",\"Controls the behavior the 'Go to Definition'-command when multiple target locations exist.\",\"Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist.\",\"Controls the behavior the 'Go to Declaration'-command when multiple target locations exist.\",\"Controls the behavior the 'Go to Implementations'-command when multiple target locations exist.\",\"Controls the behavior the 'Go to References'-command when multiple target locations exist.\",\"Alternative command id that is being executed when the result of 'Go to Definition' is the current location.\",\"Alternative command id that is being executed when the result of 'Go to Type Definition' is the current location.\",\"Alternative command id that is being executed when the result of 'Go to Declaration' is the current location.\",\"Alternative command id that is being executed when the result of 'Go to Implementation' is the current location.\",\"Alternative command id that is being executed when the result of 'Go to Reference' is the current location.\",\"Controls whether the hover is shown.\",\"Controls the delay in milliseconds after which the hover is shown.\",\"Controls whether the hover should remain visible when mouse is moved over it.\",\"Controls the delay in milliseconds after which the hover is hidden. Requires `editor.hover.sticky` to be enabled.\",\"Prefer showing hovers above the line, if there's space.\",\"Assumes that all characters are of the same width. This is a fast algorithm that works correctly for monospace fonts and certain scripts (like Latin characters) where glyphs are of equal width.\",\"Delegates wrapping points computation to the browser. This is a slow algorithm, that might cause freezes for large files, but it works correctly in all cases.\",\"Controls the algorithm that computes wrapping points. Note that when in accessibility mode, advanced will be used for the best experience.\",\"Disable the code action menu.\",\"Show the code action menu when the cursor is on lines with code.\",\"Show the code action menu when the cursor is on lines with code or on empty lines.\",\"Enables the Code Action lightbulb in the editor.\",\"Shows the nested current scopes during the scroll at the top of the editor.\",\"Defines the maximum number of sticky lines to show.\",\"Defines the model to use for determining which lines to stick. If the outline model does not exist, it will fall back on the folding provider model which falls back on the indentation model. This order is respected in all three cases.\",\"Enable scrolling of Sticky Scroll with the editor's horizontal scrollbar.\",\"Enables the inlay hints in the editor.\",\"Inlay hints are enabled\",\"Inlay hints are showing by default and hide when holding {0}\",\"Inlay hints are hidden by default and show when holding {0}\",\"Inlay hints are disabled\",\"Controls font size of inlay hints in the editor. As default the {0} is used when the configured value is less than {1} or greater than the editor font size.\",\"Controls font family of inlay hints in the editor. When set to empty, the {0} is used.\",\"Enables the padding around the inlay hints in the editor.\",`Controls the line height. \n - Use 0 to automatically compute the line height from the font size.\n - Values between 0 and 8 will be used as a multiplier with the font size.\n - Values greater than or equal to 8 will be used as effective values.`,\"Controls whether the minimap is shown.\",\"Controls whether the minimap is hidden automatically.\",\"The minimap has the same size as the editor contents (and might scroll).\",\"The minimap will stretch or shrink as necessary to fill the height of the editor (no scrolling).\",\"The minimap will shrink as necessary to never be larger than the editor (no scrolling).\",\"Controls the size of the minimap.\",\"Controls the side where to render the minimap.\",\"Controls when the minimap slider is shown.\",\"Scale of content drawn in the minimap: 1, 2 or 3.\",\"Render the actual characters on a line as opposed to color blocks.\",\"Limit the width of the minimap to render at most a certain number of columns.\",\"Controls the amount of space between the top edge of the editor and the first line.\",\"Controls the amount of space between the bottom edge of the editor and the last line.\",\"Enables a pop-up that shows parameter documentation and type information as you type.\",\"Controls whether the parameter hints menu cycles or closes when reaching the end of the list.\",\"Quick suggestions show inside the suggest widget\",\"Quick suggestions show as ghost text\",\"Quick suggestions are disabled\",\"Enable quick suggestions inside strings.\",\"Enable quick suggestions inside comments.\",\"Enable quick suggestions outside of strings and comments.\",\"Controls whether suggestions should automatically show up while typing. This can be controlled for typing in comments, strings, and other code. Quick suggestion can be configured to show as ghost text or with the suggest widget. Also be aware of the '{0}'-setting which controls if suggestions are triggered by special characters.\",\"Line numbers are not rendered.\",\"Line numbers are rendered as absolute number.\",\"Line numbers are rendered as distance in lines to cursor position.\",\"Line numbers are rendered every 10 lines.\",\"Controls the display of line numbers.\",\"Number of monospace characters at which this editor ruler will render.\",\"Color of this editor ruler.\",\"Render vertical rulers after a certain number of monospace characters. Use multiple values for multiple rulers. No rulers are drawn if array is empty.\",\"The vertical scrollbar will be visible only when necessary.\",\"The vertical scrollbar will always be visible.\",\"The vertical scrollbar will always be hidden.\",\"Controls the visibility of the vertical scrollbar.\",\"The horizontal scrollbar will be visible only when necessary.\",\"The horizontal scrollbar will always be visible.\",\"The horizontal scrollbar will always be hidden.\",\"Controls the visibility of the horizontal scrollbar.\",\"The width of the vertical scrollbar.\",\"The height of the horizontal scrollbar.\",\"Controls whether clicks scroll by page or jump to click position.\",\"When set, the horizontal scrollbar will not increase the size of the editor's content.\",\"Controls whether all non-basic ASCII characters are highlighted. Only characters between U+0020 and U+007E, tab, line-feed and carriage-return are considered basic ASCII.\",\"Controls whether characters that just reserve space or have no width at all are highlighted.\",\"Controls whether characters are highlighted that can be confused with basic ASCII characters, except those that are common in the current user locale.\",\"Controls whether characters in comments should also be subject to Unicode highlighting.\",\"Controls whether characters in strings should also be subject to Unicode highlighting.\",\"Defines allowed characters that are not being highlighted.\",\"Unicode characters that are common in allowed locales are not being highlighted.\",\"Controls whether to automatically show inline suggestions in the editor.\",\"Show the inline suggestion toolbar whenever an inline suggestion is shown.\",\"Show the inline suggestion toolbar when hovering over an inline suggestion.\",\"Never show the inline suggestion toolbar.\",\"Controls when to show the inline suggestion toolbar.\",\"Controls how inline suggestions interact with the suggest widget. If enabled, the suggest widget is not shown automatically when inline suggestions are available.\",\"Controls the font family of the inline suggestions.\",\"Controls whether bracket pair colorization is enabled or not. Use {0} to override the bracket highlight colors.\",\"Controls whether each bracket type has its own independent color pool.\",\"Enables bracket pair guides.\",\"Enables bracket pair guides only for the active bracket pair.\",\"Disables bracket pair guides.\",\"Controls whether bracket pair guides are enabled or not.\",\"Enables horizontal guides as addition to vertical bracket pair guides.\",\"Enables horizontal guides only for the active bracket pair.\",\"Disables horizontal bracket pair guides.\",\"Controls whether horizontal bracket pair guides are enabled or not.\",\"Controls whether the editor should highlight the active bracket pair.\",\"Controls whether the editor should render indent guides.\",\"Highlights the active indent guide.\",\"Highlights the active indent guide even if bracket guides are highlighted.\",\"Do not highlight the active indent guide.\",\"Controls whether the editor should highlight the active indent guide.\",\"Insert suggestion without overwriting text right of the cursor.\",\"Insert suggestion and overwrite text right of the cursor.\",\"Controls whether words are overwritten when accepting completions. Note that this depends on extensions opting into this feature.\",\"Controls whether filtering and sorting suggestions accounts for small typos.\",\"Controls whether sorting favors words that appear close to the cursor.\",\"Controls whether remembered suggestion selections are shared between multiple workspaces and windows (needs `#editor.suggestSelection#`).\",\"Always select a suggestion when automatically triggering IntelliSense.\",\"Never select a suggestion when automatically triggering IntelliSense.\",\"Select a suggestion only when triggering IntelliSense from a trigger character.\",\"Select a suggestion only when triggering IntelliSense as you type.\",\"Controls whether a suggestion is selected when the widget shows. Note that this only applies to automatically triggered suggestions (`#editor.quickSuggestions#` and `#editor.suggestOnTriggerCharacters#`) and that a suggestion is always selected when explicitly invoked, e.g via `Ctrl+Space`.\",\"Controls whether an active snippet prevents quick suggestions.\",\"Controls whether to show or hide icons in suggestions.\",\"Controls the visibility of the status bar at the bottom of the suggest widget.\",\"Controls whether to preview the suggestion outcome in the editor.\",\"Controls whether suggest details show inline with the label or only in the details widget.\",\"This setting is deprecated. The suggest widget can now be resized.\",\"This setting is deprecated, please use separate settings like 'editor.suggest.showKeywords' or 'editor.suggest.showSnippets' instead.\",\"When enabled IntelliSense shows `method`-suggestions.\",\"When enabled IntelliSense shows `function`-suggestions.\",\"When enabled IntelliSense shows `constructor`-suggestions.\",\"When enabled IntelliSense shows `deprecated`-suggestions.\",\"When enabled IntelliSense filtering requires that the first character matches on a word start. For example, `c` on `Console` or `WebContext` but _not_ on `description`. When disabled IntelliSense will show more results but still sorts them by match quality.\",\"When enabled IntelliSense shows `field`-suggestions.\",\"When enabled IntelliSense shows `variable`-suggestions.\",\"When enabled IntelliSense shows `class`-suggestions.\",\"When enabled IntelliSense shows `struct`-suggestions.\",\"When enabled IntelliSense shows `interface`-suggestions.\",\"When enabled IntelliSense shows `module`-suggestions.\",\"When enabled IntelliSense shows `property`-suggestions.\",\"When enabled IntelliSense shows `event`-suggestions.\",\"When enabled IntelliSense shows `operator`-suggestions.\",\"When enabled IntelliSense shows `unit`-suggestions.\",\"When enabled IntelliSense shows `value`-suggestions.\",\"When enabled IntelliSense shows `constant`-suggestions.\",\"When enabled IntelliSense shows `enum`-suggestions.\",\"When enabled IntelliSense shows `enumMember`-suggestions.\",\"When enabled IntelliSense shows `keyword`-suggestions.\",\"When enabled IntelliSense shows `text`-suggestions.\",\"When enabled IntelliSense shows `color`-suggestions.\",\"When enabled IntelliSense shows `file`-suggestions.\",\"When enabled IntelliSense shows `reference`-suggestions.\",\"When enabled IntelliSense shows `customcolor`-suggestions.\",\"When enabled IntelliSense shows `folder`-suggestions.\",\"When enabled IntelliSense shows `typeParameter`-suggestions.\",\"When enabled IntelliSense shows `snippet`-suggestions.\",\"When enabled IntelliSense shows `user`-suggestions.\",\"When enabled IntelliSense shows `issues`-suggestions.\",\"Whether leading and trailing whitespace should always be selected.\",\"Whether subwords (like 'foo' in 'fooBar' or 'foo_bar') should be selected.\",\"No indentation. Wrapped lines begin at column 1.\",\"Wrapped lines get the same indentation as the parent.\",\"Wrapped lines get +1 indentation toward the parent.\",\"Wrapped lines get +2 indentation toward the parent.\",\"Controls the indentation of wrapped lines.\",\"Controls whether you can drag and drop a file into a text editor by holding down the `Shift` key (instead of opening the file in an editor).\",\"Controls if a widget is shown when dropping files into the editor. This widget lets you control how the file is dropped.\",\"Show the drop selector widget after a file is dropped into the editor.\",\"Never show the drop selector widget. Instead the default drop provider is always used.\",\"Controls whether you can paste content in different ways.\",\"Controls if a widget is shown when pasting content in to the editor. This widget lets you control how the file is pasted.\",\"Show the paste selector widget after content is pasted into the editor.\",\"Never show the paste selector widget. Instead the default pasting behavior is always used.\",\"Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character.\",\"Only accept a suggestion with `Enter` when it makes a textual change.\",\"Controls whether suggestions should be accepted on `Enter`, in addition to `Tab`. Helps to avoid ambiguity between inserting new lines or accepting suggestions.\",\"Controls the number of lines in the editor that can be read out by a screen reader at once. When we detect a screen reader we automatically set the default to be 500. Warning: this has a performance implication for numbers larger than the default.\",\"Editor content\",\"Control whether inline suggestions are announced by a screen reader.\",\"Use language configurations to determine when to autoclose brackets.\",\"Autoclose brackets only when the cursor is to the left of whitespace.\",\"Controls whether the editor should automatically close brackets after the user adds an opening bracket.\",\"Use language configurations to determine when to autoclose comments.\",\"Autoclose comments only when the cursor is to the left of whitespace.\",\"Controls whether the editor should automatically close comments after the user adds an opening comment.\",\"Remove adjacent closing quotes or brackets only if they were automatically inserted.\",\"Controls whether the editor should remove adjacent closing quotes or brackets when deleting.\",\"Type over closing quotes or brackets only if they were automatically inserted.\",\"Controls whether the editor should type over closing quotes or brackets.\",\"Use language configurations to determine when to autoclose quotes.\",\"Autoclose quotes only when the cursor is to the left of whitespace.\",\"Controls whether the editor should automatically close quotes after the user adds an opening quote.\",\"The editor will not insert indentation automatically.\",\"The editor will keep the current line's indentation.\",\"The editor will keep the current line's indentation and honor language defined brackets.\",\"The editor will keep the current line's indentation, honor language defined brackets and invoke special onEnterRules defined by languages.\",\"The editor will keep the current line's indentation, honor language defined brackets, invoke special onEnterRules defined by languages, and honor indentationRules defined by languages.\",\"Controls whether the editor should automatically adjust the indentation when users type, paste, move or indent lines.\",\"Use language configurations to determine when to automatically surround selections.\",\"Surround with quotes but not brackets.\",\"Surround with brackets but not quotes.\",\"Controls whether the editor should automatically surround selections when typing quotes or brackets.\",\"Emulate selection behavior of tab characters when using spaces for indentation. Selection will stick to tab stops.\",\"Controls whether the editor shows CodeLens.\",\"Controls the font family for CodeLens.\",\"Controls the font size in pixels for CodeLens. When set to 0, 90% of `#editor.fontSize#` is used.\",\"Controls whether the editor should render the inline color decorators and color picker.\",\"Make the color picker appear both on click and hover of the color decorator\",\"Make the color picker appear on hover of the color decorator\",\"Make the color picker appear on click of the color decorator\",\"Controls the condition to make a color picker appear from a color decorator\",\"Controls the max number of color decorators that can be rendered in an editor at once.\",\"Enable that the selection with the mouse and keys is doing column selection.\",\"Controls whether syntax highlighting should be copied into the clipboard.\",\"Control the cursor animation style.\",\"Smooth caret animation is disabled.\",\"Smooth caret animation is enabled only when the user moves the cursor with an explicit gesture.\",\"Smooth caret animation is always enabled.\",\"Controls whether the smooth caret animation should be enabled.\",\"Controls the cursor style.\",\"Controls the minimal number of visible leading lines (minimum 0) and trailing lines (minimum 1) surrounding the cursor. Known as 'scrollOff' or 'scrollOffset' in some other editors.\",\"`cursorSurroundingLines` is enforced only when triggered via the keyboard or API.\",\"`cursorSurroundingLines` is enforced always.\",\"Controls when `#cursorSurroundingLines#` should be enforced.\",\"Controls the width of the cursor when `#editor.cursorStyle#` is set to `line`.\",\"Controls whether the editor should allow moving selections via drag and drop.\",\"Use a new rendering method with svgs.\",\"Use a new rendering method with font characters.\",\"Use the stable rendering method.\",\"Controls whether whitespace is rendered with a new, experimental method.\",\"Scrolling speed multiplier when pressing `Alt`.\",\"Controls whether the editor has code folding enabled.\",\"Use a language-specific folding strategy if available, else the indentation-based one.\",\"Use the indentation-based folding strategy.\",\"Controls the strategy for computing folding ranges.\",\"Controls whether the editor should highlight folded ranges.\",\"Controls whether the editor automatically collapses import ranges.\",\"The maximum number of foldable regions. Increasing this value may result in the editor becoming less responsive when the current source has a large number of foldable regions.\",\"Controls whether clicking on the empty content after a folded line will unfold the line.\",\"Controls the font family.\",\"Controls whether the editor should automatically format the pasted content. A formatter must be available and the formatter should be able to format a range in a document.\",\"Controls whether the editor should automatically format the line after typing.\",\"Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.\",\"Controls whether the cursor should be hidden in the overview ruler.\",\"Controls the letter spacing in pixels.\",\"Controls whether the editor has linked editing enabled. Depending on the language, related symbols such as HTML tags, are updated while editing.\",\"Controls whether the editor should detect links and make them clickable.\",\"Highlight matching brackets.\",\"A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.\",\"Zoom the font of the editor when using mouse wheel and holding `Cmd`.\",\"Zoom the font of the editor when using mouse wheel and holding `Ctrl`.\",\"Merge multiple cursors when they are overlapping.\",\"Maps to `Control` on Windows and Linux and to `Command` on macOS.\",\"Maps to `Alt` on Windows and Linux and to `Option` on macOS.\",\"The modifier to be used to add multiple cursors with the mouse. The Go to Definition and Open Link mouse gestures will adapt such that they do not conflict with the [multicursor modifier](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).\",\"Each cursor pastes a single line of the text.\",\"Each cursor pastes the full text.\",\"Controls pasting when the line count of the pasted text matches the cursor count.\",\"Controls the max number of cursors that can be in an active editor at once.\",\"Does not highlight occurrences.\",\"Highlights occurrences only in the current file.\",\"Experimental: Highlights occurrences across all valid open files.\",\"Controls whether occurrences should be highlighted across open files.\",\"Controls whether a border should be drawn around the overview ruler.\",\"Focus the tree when opening peek\",\"Focus the editor when opening peek\",\"Controls whether to focus the inline editor or the tree in the peek widget.\",\"Controls whether the Go to Definition mouse gesture always opens the peek widget.\",\"Controls the delay in milliseconds after which quick suggestions will show up.\",\"Controls whether the editor auto renames on type.\",\"Deprecated, use `editor.linkedEditing` instead.\",\"Controls whether the editor should render control characters.\",\"Render last line number when the file ends with a newline.\",\"Highlights both the gutter and the current line.\",\"Controls how the editor should render the current line highlight.\",\"Controls if the editor should render the current line highlight only when the editor is focused.\",\"Render whitespace characters except for single spaces between words.\",\"Render whitespace characters only on selected text.\",\"Render only trailing whitespace characters.\",\"Controls how the editor should render whitespace characters.\",\"Controls whether selections should have rounded corners.\",\"Controls the number of extra characters beyond which the editor will scroll horizontally.\",\"Controls whether the editor will scroll beyond the last line.\",\"Scroll only along the predominant axis when scrolling both vertically and horizontally at the same time. Prevents horizontal drift when scrolling vertically on a trackpad.\",\"Controls whether the Linux primary clipboard should be supported.\",\"Controls whether the editor should highlight matches similar to the selection.\",\"Always show the folding controls.\",\"Never show the folding controls and reduce the gutter size.\",\"Only show the folding controls when the mouse is over the gutter.\",\"Controls when the folding controls on the gutter are shown.\",\"Controls fading out of unused code.\",\"Controls strikethrough deprecated variables.\",\"Show snippet suggestions on top of other suggestions.\",\"Show snippet suggestions below other suggestions.\",\"Show snippets suggestions with other suggestions.\",\"Do not show snippet suggestions.\",\"Controls whether snippets are shown with other suggestions and how they are sorted.\",\"Controls whether the editor will scroll using an animation.\",\"Controls whether the accessibility hint should be provided to screen reader users when an inline completion is shown.\",\"Font size for the suggest widget. When set to {0}, the value of {1} is used.\",\"Line height for the suggest widget. When set to {0}, the value of {1} is used. The minimum value is 8.\",\"Controls whether suggestions should automatically show up when typing trigger characters.\",\"Always select the first suggestion.\",\"Select recent suggestions unless further typing selects one, e.g. `console.| -> console.log` because `log` has been completed recently.\",\"Select suggestions based on previous prefixes that have completed those suggestions, e.g. `co -> console` and `con -> const`.\",\"Controls how suggestions are pre-selected when showing the suggest list.\",\"Tab complete will insert the best matching suggestion when pressing tab.\",\"Disable tab completions.\",\"Tab complete snippets when their prefix match. Works best when 'quickSuggestions' aren't enabled.\",\"Enables tab completions.\",\"Unusual line terminators are automatically removed.\",\"Unusual line terminators are ignored.\",\"Unusual line terminators prompt to be removed.\",\"Remove unusual line terminators that might cause problems.\",\"Inserting and deleting whitespace follows tab stops.\",\"Use the default line break rule.\",\"Word breaks should not be used for Chinese/Japanese/Korean (CJK) text. Non-CJK text behavior is the same as for normal.\",\"Controls the word break rules used for Chinese/Japanese/Korean (CJK) text.\",\"Characters that will be used as word separators when doing word related navigations or operations.\",\"Lines will never wrap.\",\"Lines will wrap at the viewport width.\",\"Lines will wrap at `#editor.wordWrapColumn#`.\",\"Lines will wrap at the minimum of viewport and `#editor.wordWrapColumn#`.\",\"Controls how lines should wrap.\",\"Controls the wrapping column of the editor when `#editor.wordWrap#` is `wordWrapColumn` or `bounded`.\",\"Controls whether inline color decorations should be shown using the default document color provider\",\"Controls whether the editor receives tabs or defers them to the workbench for navigation.\"],\"vs/editor/common/core/editorColorRegistry\":[\"Background color for the highlight of line at the cursor position.\",\"Background color for the border around the line at the cursor position.\",\"Background color of highlighted ranges, like by quick open and find features. The color must not be opaque so as not to hide underlying decorations.\",\"Background color of the border around highlighted ranges.\",\"Background color of highlighted symbol, like for go to definition or go next/previous symbol. The color must not be opaque so as not to hide underlying decorations.\",\"Background color of the border around highlighted symbols.\",\"Color of the editor cursor.\",\"The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.\",\"Color of whitespace characters in the editor.\",\"Color of editor line numbers.\",\"Color of the editor indentation guides.\",\"'editorIndentGuide.background' is deprecated. Use 'editorIndentGuide.background1' instead.\",\"Color of the active editor indentation guides.\",\"'editorIndentGuide.activeBackground' is deprecated. Use 'editorIndentGuide.activeBackground1' instead.\",\"Color of the editor indentation guides (1).\",\"Color of the editor indentation guides (2).\",\"Color of the editor indentation guides (3).\",\"Color of the editor indentation guides (4).\",\"Color of the editor indentation guides (5).\",\"Color of the editor indentation guides (6).\",\"Color of the active editor indentation guides (1).\",\"Color of the active editor indentation guides (2).\",\"Color of the active editor indentation guides (3).\",\"Color of the active editor indentation guides (4).\",\"Color of the active editor indentation guides (5).\",\"Color of the active editor indentation guides (6).\",\"Color of editor active line number\",\"Id is deprecated. Use 'editorLineNumber.activeForeground' instead.\",\"Color of editor active line number\",\"Color of the final editor line when editor.renderFinalNewline is set to dimmed.\",\"Color of the editor rulers.\",\"Foreground color of editor CodeLens\",\"Background color behind matching brackets\",\"Color for matching brackets boxes\",\"Color of the overview ruler border.\",\"Background color of the editor overview ruler.\",\"Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.\",\"Border color of unnecessary (unused) source code in the editor.\",`Opacity of unnecessary (unused) source code in the editor. For example, \"#000000c0\" will render the code with 75% opacity. For high contrast themes, use the  'editorUnnecessaryCode.border' theme color to underline unnecessary code instead of fading it out.`,\"Border color of ghost text in the editor.\",\"Foreground color of the ghost text in the editor.\",\"Background color of the ghost text in the editor.\",\"Overview ruler marker color for range highlights. The color must not be opaque so as not to hide underlying decorations.\",\"Overview ruler marker color for errors.\",\"Overview ruler marker color for warnings.\",\"Overview ruler marker color for infos.\",\"Foreground color of brackets (1). Requires enabling bracket pair colorization.\",\"Foreground color of brackets (2). Requires enabling bracket pair colorization.\",\"Foreground color of brackets (3). Requires enabling bracket pair colorization.\",\"Foreground color of brackets (4). Requires enabling bracket pair colorization.\",\"Foreground color of brackets (5). Requires enabling bracket pair colorization.\",\"Foreground color of brackets (6). Requires enabling bracket pair colorization.\",\"Foreground color of unexpected brackets.\",\"Background color of inactive bracket pair guides (1). Requires enabling bracket pair guides.\",\"Background color of inactive bracket pair guides (2). Requires enabling bracket pair guides.\",\"Background color of inactive bracket pair guides (3). Requires enabling bracket pair guides.\",\"Background color of inactive bracket pair guides (4). Requires enabling bracket pair guides.\",\"Background color of inactive bracket pair guides (5). Requires enabling bracket pair guides.\",\"Background color of inactive bracket pair guides (6). Requires enabling bracket pair guides.\",\"Background color of active bracket pair guides (1). Requires enabling bracket pair guides.\",\"Background color of active bracket pair guides (2). Requires enabling bracket pair guides.\",\"Background color of active bracket pair guides (3). Requires enabling bracket pair guides.\",\"Background color of active bracket pair guides (4). Requires enabling bracket pair guides.\",\"Background color of active bracket pair guides (5). Requires enabling bracket pair guides.\",\"Background color of active bracket pair guides (6). Requires enabling bracket pair guides.\",\"Border color used to highlight unicode characters.\",\"Background color used to highlight unicode characters.\"],\"vs/editor/common/editorContextKeys\":[\"Whether the editor text has focus (cursor is blinking)\",\"Whether the editor or an editor widget has focus (e.g. focus is in the find widget)\",\"Whether an editor or a rich text input has focus (cursor is blinking)\",\"Whether the editor is read-only\",\"Whether the context is a diff editor\",\"Whether the context is an embedded diff editor\",\"Whether the context is a multi diff editor\",\"Whether all files in multi diff editor are collapsed\",\"Whether the diff editor has changes\",\"Whether a moved code block is selected for comparison\",\"Whether the accessible diff viewer is visible\",\"Whether the diff editor render side by side inline breakpoint is reached\",\"Whether `editor.columnSelection` is enabled\",\"Whether the editor has text selected\",\"Whether the editor has multiple selections\",\"Whether `Tab` will move focus out of the editor\",\"Whether the editor hover is visible\",\"Whether the editor hover is focused\",\"Whether the sticky scroll is focused\",\"Whether the sticky scroll is visible\",\"Whether the standalone color picker is visible\",\"Whether the standalone color picker is focused\",\"Whether the editor is part of a larger editor (e.g. notebooks)\",\"The language identifier of the editor\",\"Whether the editor has a completion item provider\",\"Whether the editor has a code actions provider\",\"Whether the editor has a code lens provider\",\"Whether the editor has a definition provider\",\"Whether the editor has a declaration provider\",\"Whether the editor has an implementation provider\",\"Whether the editor has a type definition provider\",\"Whether the editor has a hover provider\",\"Whether the editor has a document highlight provider\",\"Whether the editor has a document symbol provider\",\"Whether the editor has a reference provider\",\"Whether the editor has a rename provider\",\"Whether the editor has a signature help provider\",\"Whether the editor has an inline hints provider\",\"Whether the editor has a document formatting provider\",\"Whether the editor has a document selection formatting provider\",\"Whether the editor has multiple document formatting providers\",\"Whether the editor has multiple document selection formatting providers\"],\"vs/editor/common/languages\":[\"array\",\"boolean\",\"class\",\"constant\",\"constructor\",\"enumeration\",\"enumeration member\",\"event\",\"field\",\"file\",\"function\",\"interface\",\"key\",\"method\",\"module\",\"namespace\",\"null\",\"number\",\"object\",\"operator\",\"package\",\"property\",\"string\",\"struct\",\"type parameter\",\"variable\",\"{0} ({1})\"],\"vs/editor/common/languages/modesRegistry\":[\"Plain Text\"],\"vs/editor/common/model/editStack\":[\"Typing\"],\"vs/editor/common/standaloneStrings\":[\"Developer: Inspect Tokens\",\"Go to Line/Column...\",\"Show all Quick Access Providers\",\"Command Palette\",\"Show And Run Commands\",\"Go to Symbol...\",\"Go to Symbol by Category...\",\"Editor content\",\"Press Alt+F1 for Accessibility Options.\",\"Toggle High Contrast Theme\",\"Made {0} edits in {1} files\"],\"vs/editor/common/viewLayout/viewLineRenderer\":[\"Show more ({0})\",\"{0} chars\"],\"vs/editor/contrib/anchorSelect/browser/anchorSelect\":[\"Selection Anchor\",\"Anchor set at {0}:{1}\",\"Set Selection Anchor\",\"Go to Selection Anchor\",\"Select from Anchor to Cursor\",\"Cancel Selection Anchor\"],\"vs/editor/contrib/bracketMatching/browser/bracketMatching\":[\"Overview ruler marker color for matching brackets.\",\"Go to Bracket\",\"Select to Bracket\",\"Remove Brackets\",\"Go to &&Bracket\",\"Select the text inside and including the brackets or curly braces\"],\"vs/editor/contrib/caretOperations/browser/caretOperations\":[\"Move Selected Text Left\",\"Move Selected Text Right\"],\"vs/editor/contrib/caretOperations/browser/transpose\":[\"Transpose Letters\"],\"vs/editor/contrib/clipboard/browser/clipboard\":[\"Cu&&t\",\"Cut\",\"Cut\",\"Cut\",\"&&Copy\",\"Copy\",\"Copy\",\"Copy\",\"Copy As\",\"Copy As\",\"Share\",\"Share\",\"Share\",\"&&Paste\",\"Paste\",\"Paste\",\"Paste\",\"Copy With Syntax Highlighting\"],\"vs/editor/contrib/codeAction/browser/codeAction\":[\"An unknown error occurred while applying the code action\"],\"vs/editor/contrib/codeAction/browser/codeActionCommands\":[\"Kind of the code action to run.\",\"Controls when the returned actions are applied.\",\"Always apply the first returned code action.\",\"Apply the first returned code action if it is the only one.\",\"Do not apply the returned code actions.\",\"Controls if only preferred code actions should be returned.\",\"Quick Fix...\",\"No code actions available\",\"No preferred code actions for '{0}' available\",\"No code actions for '{0}' available\",\"No preferred code actions available\",\"No code actions available\",\"Refactor...\",\"No preferred refactorings for '{0}' available\",\"No refactorings for '{0}' available\",\"No preferred refactorings available\",\"No refactorings available\",\"Source Action...\",\"No preferred source actions for '{0}' available\",\"No source actions for '{0}' available\",\"No preferred source actions available\",\"No source actions available\",\"Organize Imports\",\"No organize imports action available\",\"Fix All\",\"No fix all action available\",\"Auto Fix...\",\"No auto fixes available\"],\"vs/editor/contrib/codeAction/browser/codeActionContributions\":[\"Enable/disable showing group headers in the Code Action menu.\",\"Enable/disable showing nearest Quick Fix within a line when not currently on a diagnostic.\"],\"vs/editor/contrib/codeAction/browser/codeActionController\":[\"Context: {0} at line {1} and column {2}.\",\"Hide Disabled\",\"Show Disabled\"],\"vs/editor/contrib/codeAction/browser/codeActionMenu\":[\"More Actions...\",\"Quick Fix\",\"Extract\",\"Inline\",\"Rewrite\",\"Move\",\"Surround With\",\"Source Action\"],\"vs/editor/contrib/codeAction/browser/lightBulbWidget\":[\"Run: {0}\",\"Show Code Actions. Preferred Quick Fix Available ({0})\",\"Show Code Actions ({0})\",\"Show Code Actions\"],\"vs/editor/contrib/codelens/browser/codelensController\":[\"Show CodeLens Commands For Current Line\",\"Select a command\"],\"vs/editor/contrib/colorPicker/browser/colorPickerWidget\":[\"Click to toggle color options (rgb/hsl/hex)\",\"Icon to close the color picker\"],\"vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions\":[\"Show or Focus Standalone Color Picker\",\"&&Show or Focus Standalone Color Picker\",\"Hide the Color Picker\",\"Insert Color with Standalone Color Picker\"],\"vs/editor/contrib/comment/browser/comment\":[\"Toggle Line Comment\",\"&&Toggle Line Comment\",\"Add Line Comment\",\"Remove Line Comment\",\"Toggle Block Comment\",\"Toggle &&Block Comment\"],\"vs/editor/contrib/contextmenu/browser/contextmenu\":[\"Minimap\",\"Render Characters\",\"Vertical size\",\"Proportional\",\"Fill\",\"Fit\",\"Slider\",\"Mouse Over\",\"Always\",\"Show Editor Context Menu\"],\"vs/editor/contrib/cursorUndo/browser/cursorUndo\":[\"Cursor Undo\",\"Cursor Redo\"],\"vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution\":[\"Paste As...\",\"The id of the paste edit to try applying. If not provided, the editor will show a picker.\",\"Paste as Text\"],\"vs/editor/contrib/dropOrPasteInto/browser/copyPasteController\":[\"Whether the paste widget is showing\",\"Show paste options...\",\"No paste edits for '{0}' found\",\"Running paste handlers. Click to cancel\",\"Select Paste Action\",\"Running paste handlers\"],\"vs/editor/contrib/dropOrPasteInto/browser/defaultProviders\":[\"Built-in\",\"Insert Plain Text\",\"Insert Uris\",\"Insert Uri\",\"Insert Paths\",\"Insert Path\",\"Insert Relative Paths\",\"Insert Relative Path\",\"Insert HTML\"],\"vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution\":[\"Configures the default drop provider to use for content of a given mime type.\"],\"vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController\":[\"Whether the drop widget is showing\",\"Show drop options...\",\"Running drop handlers. Click to cancel\"],\"vs/editor/contrib/editorState/browser/keybindingCancellation\":[\"Whether the editor runs a cancellable operation, e.g. like 'Peek References'\"],\"vs/editor/contrib/find/browser/findController\":[\"The file is too large to perform a replace all operation.\",\"Find\",\"&&Find\",\"Find With Arguments\",\"Find With Selection\",\"Find Next\",\"Find Previous\",\"Go to Match...\",\"No matches. Try searching for something else.\",\"Type a number to go to a specific match (between 1 and {0})\",\"Please type a number between 1 and {0}\",\"Please type a number between 1 and {0}\",\"Find Next Selection\",\"Find Previous Selection\",\"Replace\",\"&&Replace\"],\"vs/editor/contrib/find/browser/findWidget\":[\"Icon for 'Find in Selection' in the editor find widget.\",\"Icon to indicate that the editor find widget is collapsed.\",\"Icon to indicate that the editor find widget is expanded.\",\"Icon for 'Replace' in the editor find widget.\",\"Icon for 'Replace All' in the editor find widget.\",\"Icon for 'Find Previous' in the editor find widget.\",\"Icon for 'Find Next' in the editor find widget.\",\"Find / Replace\",\"Find\",\"Find\",\"Previous Match\",\"Next Match\",\"Find in Selection\",\"Close\",\"Replace\",\"Replace\",\"Replace\",\"Replace All\",\"Toggle Replace\",\"Only the first {0} results are highlighted, but all find operations work on the entire text.\",\"{0} of {1}\",\"No results\",\"{0} found\",\"{0} found for '{1}'\",\"{0} found for '{1}', at {2}\",\"{0} found for '{1}'\",\"Ctrl+Enter now inserts line break instead of replacing all. You can modify the keybinding for editor.action.replaceAll to override this behavior.\"],\"vs/editor/contrib/folding/browser/folding\":[\"Unfold\",\"Unfold Recursively\",\"Fold\",\"Toggle Fold\",\"Fold Recursively\",\"Fold All Block Comments\",\"Fold All Regions\",\"Unfold All Regions\",\"Fold All Except Selected\",\"Unfold All Except Selected\",\"Fold All\",\"Unfold All\",\"Go to Parent Fold\",\"Go to Previous Folding Range\",\"Go to Next Folding Range\",\"Create Folding Range from Selection\",\"Remove Manual Folding Ranges\",\"Fold Level {0}\"],\"vs/editor/contrib/folding/browser/foldingDecorations\":[\"Background color behind folded ranges. The color must not be opaque so as not to hide underlying decorations.\",\"Color of the folding control in the editor gutter.\",\"Icon for expanded ranges in the editor glyph margin.\",\"Icon for collapsed ranges in the editor glyph margin.\",\"Icon for manually collapsed ranges in the editor glyph margin.\",\"Icon for manually expanded ranges in the editor glyph margin.\",\"Click to expand the range.\",\"Click to collapse the range.\"],\"vs/editor/contrib/fontZoom/browser/fontZoom\":[\"Increase Editor Font Size\",\"Decrease Editor Font Size\",\"Reset Editor Font Size\"],\"vs/editor/contrib/format/browser/formatActions\":[\"Format Document\",\"Format Selection\"],\"vs/editor/contrib/gotoError/browser/gotoError\":[\"Go to Next Problem (Error, Warning, Info)\",\"Icon for goto next marker.\",\"Go to Previous Problem (Error, Warning, Info)\",\"Icon for goto previous marker.\",\"Go to Next Problem in Files (Error, Warning, Info)\",\"Next &&Problem\",\"Go to Previous Problem in Files (Error, Warning, Info)\",\"Previous &&Problem\"],\"vs/editor/contrib/gotoError/browser/gotoErrorWidget\":[\"Error\",\"Warning\",\"Info\",\"Hint\",\"{0} at {1}. \",\"{0} of {1} problems\",\"{0} of {1} problem\",\"Editor marker navigation widget error color.\",\"Editor marker navigation widget error heading background.\",\"Editor marker navigation widget warning color.\",\"Editor marker navigation widget warning heading background.\",\"Editor marker navigation widget info color.\",\"Editor marker navigation widget info heading background.\",\"Editor marker navigation widget background.\"],\"vs/editor/contrib/gotoSymbol/browser/goToCommands\":[\"Peek\",\"Definitions\",\"No definition found for '{0}'\",\"No definition found\",\"Go to Definition\",\"Go to &&Definition\",\"Open Definition to the Side\",\"Peek Definition\",\"Declarations\",\"No declaration found for '{0}'\",\"No declaration found\",\"Go to Declaration\",\"Go to &&Declaration\",\"No declaration found for '{0}'\",\"No declaration found\",\"Peek Declaration\",\"Type Definitions\",\"No type definition found for '{0}'\",\"No type definition found\",\"Go to Type Definition\",\"Go to &&Type Definition\",\"Peek Type Definition\",\"Implementations\",\"No implementation found for '{0}'\",\"No implementation found\",\"Go to Implementations\",\"Go to &&Implementations\",\"Peek Implementations\",\"No references found for '{0}'\",\"No references found\",\"Go to References\",\"Go to &&References\",\"References\",\"Peek References\",\"References\",\"Go to Any Symbol\",\"Locations\",\"No results for '{0}'\",\"References\"],\"vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition\":[\"Click to show {0} definitions.\"],\"vs/editor/contrib/gotoSymbol/browser/peek/referencesController\":[\"Whether reference peek is visible, like 'Peek References' or 'Peek Definition'\",\"Loading...\",\"{0} ({1})\"],\"vs/editor/contrib/gotoSymbol/browser/peek/referencesTree\":[\"{0} references\",\"{0} reference\",\"References\"],\"vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget\":[\"no preview available\",\"No results\",\"References\"],\"vs/editor/contrib/gotoSymbol/browser/referencesModel\":[\"in {0} on line {1} at column {2}\",\"{0} in {1} on line {2} at column {3}\",\"1 symbol in {0}, full path {1}\",\"{0} symbols in {1}, full path {2}\",\"No results found\",\"Found 1 symbol in {0}\",\"Found {0} symbols in {1}\",\"Found {0} symbols in {1} files\"],\"vs/editor/contrib/gotoSymbol/browser/symbolNavigation\":[\"Whether there are symbol locations that can be navigated via keyboard-only.\",\"Symbol {0} of {1}, {2} for next\",\"Symbol {0} of {1}\"],\"vs/editor/contrib/hover/browser/hover\":[\"Show or Focus Hover\",\"The hover will not automatically take focus.\",\"The hover will take focus only if it is already visible.\",\"The hover will automatically take focus when it appears.\",\"Show Definition Preview Hover\",\"Scroll Up Hover\",\"Scroll Down Hover\",\"Scroll Left Hover\",\"Scroll Right Hover\",\"Page Up Hover\",\"Page Down Hover\",\"Go To Top Hover\",\"Go To Bottom Hover\"],\"vs/editor/contrib/hover/browser/markdownHoverParticipant\":[\"Loading...\",\"Rendering paused for long line for performance reasons. This can be configured via `editor.stopRenderingLineAfter`.\",\"Tokenization is skipped for long lines for performance reasons. This can be configured via `editor.maxTokenizationLineLength`.\"],\"vs/editor/contrib/hover/browser/markerHoverParticipant\":[\"View Problem\",\"No quick fixes available\",\"Checking for quick fixes...\",\"No quick fixes available\",\"Quick Fix...\"],\"vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace\":[\"Replace with Previous Value\",\"Replace with Next Value\"],\"vs/editor/contrib/indentation/browser/indentation\":[\"Convert Indentation to Spaces\",\"Convert Indentation to Tabs\",\"Configured Tab Size\",\"Default Tab Size\",\"Current Tab Size\",\"Select Tab Size for Current File\",\"Indent Using Tabs\",\"Indent Using Spaces\",\"Change Tab Display Size\",\"Detect Indentation from Content\",\"Reindent Lines\",\"Reindent Selected Lines\"],\"vs/editor/contrib/inlayHints/browser/inlayHintsHover\":[\"Double-click to insert\",\"cmd + click\",\"ctrl + click\",\"option + click\",\"alt + click\",\"Go to Definition ({0}), right click for more\",\"Go to Definition ({0})\",\"Execute Command\"],\"vs/editor/contrib/inlineCompletions/browser/commands\":[\"Show Next Inline Suggestion\",\"Show Previous Inline Suggestion\",\"Trigger Inline Suggestion\",\"Accept Next Word Of Inline Suggestion\",\"Accept Word\",\"Accept Next Line Of Inline Suggestion\",\"Accept Line\",\"Accept Inline Suggestion\",\"Accept\",\"Hide Inline Suggestion\",\"Always Show Toolbar\"],\"vs/editor/contrib/inlineCompletions/browser/hoverParticipant\":[\"Suggestion:\"],\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys\":[\"Whether an inline suggestion is visible\",\"Whether the inline suggestion starts with whitespace\",\"Whether the inline suggestion starts with whitespace that is less than what would be inserted by tab\",\"Whether suggestions should be suppressed for the current suggestion\"],\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController\":[\"Inspect this in the accessible view ({0})\"],\"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget\":[\"Icon for show next parameter hint.\",\"Icon for show previous parameter hint.\",\"{0} ({1})\",\"Previous\",\"Next\"],\"vs/editor/contrib/lineSelection/browser/lineSelection\":[\"Expand Line Selection\"],\"vs/editor/contrib/linesOperations/browser/linesOperations\":[\"Copy Line Up\",\"&&Copy Line Up\",\"Copy Line Down\",\"Co&&py Line Down\",\"Duplicate Selection\",\"&&Duplicate Selection\",\"Move Line Up\",\"Mo&&ve Line Up\",\"Move Line Down\",\"Move &&Line Down\",\"Sort Lines Ascending\",\"Sort Lines Descending\",\"Delete Duplicate Lines\",\"Trim Trailing Whitespace\",\"Delete Line\",\"Indent Line\",\"Outdent Line\",\"Insert Line Above\",\"Insert Line Below\",\"Delete All Left\",\"Delete All Right\",\"Join Lines\",\"Transpose Characters around the Cursor\",\"Transform to Uppercase\",\"Transform to Lowercase\",\"Transform to Title Case\",\"Transform to Snake Case\",\"Transform to Camel Case\",\"Transform to Kebab Case\"],\"vs/editor/contrib/linkedEditing/browser/linkedEditing\":[\"Start Linked Editing\",\"Background color when the editor auto renames on type.\"],\"vs/editor/contrib/links/browser/links\":[\"Failed to open this link because it is not well-formed: {0}\",\"Failed to open this link because its target is missing.\",\"Execute command\",\"Follow link\",\"cmd + click\",\"ctrl + click\",\"option + click\",\"alt + click\",\"Execute command {0}\",\"Open Link\"],\"vs/editor/contrib/message/browser/messageController\":[\"Whether the editor is currently showing an inline message\"],\"vs/editor/contrib/multicursor/browser/multicursor\":[\"Cursor added: {0}\",\"Cursors added: {0}\",\"Add Cursor Above\",\"&&Add Cursor Above\",\"Add Cursor Below\",\"A&&dd Cursor Below\",\"Add Cursors to Line Ends\",\"Add C&&ursors to Line Ends\",\"Add Cursors To Bottom\",\"Add Cursors To Top\",\"Add Selection To Next Find Match\",\"Add &&Next Occurrence\",\"Add Selection To Previous Find Match\",\"Add P&&revious Occurrence\",\"Move Last Selection To Next Find Match\",\"Move Last Selection To Previous Find Match\",\"Select All Occurrences of Find Match\",\"Select All &&Occurrences\",\"Change All Occurrences\",\"Focus Next Cursor\",\"Focuses the next cursor\",\"Focus Previous Cursor\",\"Focuses the previous cursor\"],\"vs/editor/contrib/parameterHints/browser/parameterHints\":[\"Trigger Parameter Hints\"],\"vs/editor/contrib/parameterHints/browser/parameterHintsWidget\":[\"Icon for show next parameter hint.\",\"Icon for show previous parameter hint.\",\"{0}, hint\",\"Foreground color of the active item in the parameter hint.\"],\"vs/editor/contrib/peekView/browser/peekView\":[\"Whether the current code editor is embedded inside peek\",\"Close\",\"Background color of the peek view title area.\",\"Color of the peek view title.\",\"Color of the peek view title info.\",\"Color of the peek view borders and arrow.\",\"Background color of the peek view result list.\",\"Foreground color for line nodes in the peek view result list.\",\"Foreground color for file nodes in the peek view result list.\",\"Background color of the selected entry in the peek view result list.\",\"Foreground color of the selected entry in the peek view result list.\",\"Background color of the peek view editor.\",\"Background color of the gutter in the peek view editor.\",\"Background color of sticky scroll in the peek view editor.\",\"Match highlight color in the peek view result list.\",\"Match highlight color in the peek view editor.\",\"Match highlight border in the peek view editor.\"],\"vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess\":[\"Open a text editor first to go to a line.\",\"Go to line {0} and character {1}.\",\"Go to line {0}.\",\"Current Line: {0}, Character: {1}. Type a line number between 1 and {2} to navigate to.\",\"Current Line: {0}, Character: {1}. Type a line number to navigate to.\"],\"vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess\":[\"To go to a symbol, first open a text editor with symbol information.\",\"The active text editor does not provide symbol information.\",\"No matching editor symbols\",\"No editor symbols\",\"Open to the Side\",\"Open to the Bottom\",\"symbols ({0})\",\"properties ({0})\",\"methods ({0})\",\"functions ({0})\",\"constructors ({0})\",\"variables ({0})\",\"classes ({0})\",\"structs ({0})\",\"events ({0})\",\"operators ({0})\",\"interfaces ({0})\",\"namespaces ({0})\",\"packages ({0})\",\"type parameters ({0})\",\"modules ({0})\",\"properties ({0})\",\"enumerations ({0})\",\"enumeration members ({0})\",\"strings ({0})\",\"files ({0})\",\"arrays ({0})\",\"numbers ({0})\",\"booleans ({0})\",\"objects ({0})\",\"keys ({0})\",\"fields ({0})\",\"constants ({0})\"],\"vs/editor/contrib/readOnlyMessage/browser/contribution\":[\"Cannot edit in read-only input\",\"Cannot edit in read-only editor\"],\"vs/editor/contrib/rename/browser/rename\":[\"No result.\",\"An unknown error occurred while resolving rename location\",\"Renaming '{0}' to '{1}'\",\"Renaming {0} to {1}\",\"Successfully renamed '{0}' to '{1}'. Summary: {2}\",\"Rename failed to apply edits\",\"Rename failed to compute edits\",\"Rename Symbol\",\"Enable/disable the ability to preview changes before renaming\"],\"vs/editor/contrib/rename/browser/renameInputField\":[\"Whether the rename input widget is visible\",\"Rename input. Type new name and press Enter to commit.\",\"{0} to Rename, {1} to Preview\"],\"vs/editor/contrib/smartSelect/browser/smartSelect\":[\"Expand Selection\",\"&&Expand Selection\",\"Shrink Selection\",\"&&Shrink Selection\"],\"vs/editor/contrib/snippet/browser/snippetController2\":[\"Whether the editor in current in snippet mode\",\"Whether there is a next tab stop when in snippet mode\",\"Whether there is a previous tab stop when in snippet mode\",\"Go to next placeholder...\"],\"vs/editor/contrib/snippet/browser/snippetVariables\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"vs/editor/contrib/stickyScroll/browser/stickyScrollActions\":[\"Toggle Editor Sticky Scroll\",\"&&Toggle Editor Sticky Scroll\",\"Sticky Scroll\",\"&&Sticky Scroll\",\"Focus Sticky Scroll\",\"&&Focus Sticky Scroll\",\"Select next sticky scroll line\",\"Select previous sticky scroll line\",\"Go to focused sticky scroll line\",\"Select Editor\"],\"vs/editor/contrib/suggest/browser/suggest\":[\"Whether any suggestion is focused\",\"Whether suggestion details are visible\",\"Whether there are multiple suggestions to pick from\",\"Whether inserting the current suggestion yields in a change or has everything already been typed\",\"Whether suggestions are inserted when pressing Enter\",\"Whether the current suggestion has insert and replace behaviour\",\"Whether the default behaviour is to insert or replace\",\"Whether the current suggestion supports to resolve further details\"],\"vs/editor/contrib/suggest/browser/suggestController\":[\"Accepting '{0}' made {1} additional edits\",\"Trigger Suggest\",\"Insert\",\"Insert\",\"Replace\",\"Replace\",\"Insert\",\"show less\",\"show more\",\"Reset Suggest Widget Size\"],\"vs/editor/contrib/suggest/browser/suggestWidget\":[\"Background color of the suggest widget.\",\"Border color of the suggest widget.\",\"Foreground color of the suggest widget.\",\"Foreground color of the selected entry in the suggest widget.\",\"Icon foreground color of the selected entry in the suggest widget.\",\"Background color of the selected entry in the suggest widget.\",\"Color of the match highlights in the suggest widget.\",\"Color of the match highlights in the suggest widget when an item is focused.\",\"Foreground color of the suggest widget status.\",\"Loading...\",\"No suggestions.\",\"Suggest\",\"{0} {1}, {2}\",\"{0} {1}\",\"{0}, {1}\",\"{0}, docs: {1}\"],\"vs/editor/contrib/suggest/browser/suggestWidgetDetails\":[\"Close\",\"Loading...\"],\"vs/editor/contrib/suggest/browser/suggestWidgetRenderer\":[\"Icon for more information in the suggest widget.\",\"Read More\"],\"vs/editor/contrib/suggest/browser/suggestWidgetStatus\":[\"{0} ({1})\"],\"vs/editor/contrib/symbolIcons/browser/symbolIcons\":[\"The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for boolean symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for class symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for color symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for constant symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for constructor symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for enumerator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for enumerator member symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for event symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for field symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for file symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for folder symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for function symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for interface symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for key symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for keyword symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for method symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for module symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for namespace symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for null symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for number symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for object symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for operator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for package symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for property symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for reference symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for snippet symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for string symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for struct symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for text symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for type parameter symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for unit symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\",\"The foreground color for variable symbols. These symbols appear in the outline, breadcrumb, and suggest widget.\"],\"vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode\":[\"Toggle Tab Key Moves Focus\",\"Pressing Tab will now move focus to the next focusable element\",\"Pressing Tab will now insert the tab character\"],\"vs/editor/contrib/tokenization/browser/tokenization\":[\"Developer: Force Retokenize\"],\"vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter\":[\"Icon shown with a warning message in the extensions editor.\",\"This document contains many non-basic ASCII unicode characters\",\"This document contains many ambiguous unicode characters\",\"This document contains many invisible unicode characters\",\"Configure Unicode Highlight Options\",\"The character {0} could be confused with the ASCII character {1}, which is more common in source code.\",\"The character {0} could be confused with the character {1}, which is more common in source code.\",\"The character {0} is invisible.\",\"The character {0} is not a basic ASCII character.\",\"Adjust settings\",\"Disable Highlight In Comments\",\"Disable highlighting of characters in comments\",\"Disable Highlight In Strings\",\"Disable highlighting of characters in strings\",\"Disable Ambiguous Highlight\",\"Disable highlighting of ambiguous characters\",\"Disable Invisible Highlight\",\"Disable highlighting of invisible characters\",\"Disable Non ASCII Highlight\",\"Disable highlighting of non basic ASCII characters\",\"Show Exclude Options\",\"Exclude {0} (invisible character) from being highlighted\",\"Exclude {0} from being highlighted\",'Allow unicode characters that are more common in the language \"{0}\".'],\"vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators\":[\"Unusual Line Terminators\",\"Detected unusual line terminators\",\"The file '{0}' contains one or more unusual line terminator characters, like Line Separator (LS) or Paragraph Separator (PS).\\n\\nIt is recommended to remove them from the file. This can be configured via `editor.unusualLineTerminators`.\",\"&&Remove Unusual Line Terminators\",\"Ignore\"],\"vs/editor/contrib/wordHighlighter/browser/highlightDecorations\":[\"Background color of a symbol during read-access, like reading a variable. The color must not be opaque so as not to hide underlying decorations.\",\"Background color of a symbol during write-access, like writing to a variable. The color must not be opaque so as not to hide underlying decorations.\",\"Background color of a textual occurrence for a symbol. The color must not be opaque so as not to hide underlying decorations.\",\"Border color of a symbol during read-access, like reading a variable.\",\"Border color of a symbol during write-access, like writing to a variable.\",\"Border color of a textual occurrence for a symbol.\",\"Overview ruler marker color for symbol highlights. The color must not be opaque so as not to hide underlying decorations.\",\"Overview ruler marker color for write-access symbol highlights. The color must not be opaque so as not to hide underlying decorations.\",\"Overview ruler marker color of a textual occurrence for a symbol. The color must not be opaque so as not to hide underlying decorations.\"],\"vs/editor/contrib/wordHighlighter/browser/wordHighlighter\":[\"Go to Next Symbol Highlight\",\"Go to Previous Symbol Highlight\",\"Trigger Symbol Highlight\"],\"vs/editor/contrib/wordOperations/browser/wordOperations\":[\"Delete Word\"],\"vs/platform/action/common/actionCommonCategories\":[\"Developer\",\"View\",\"Help\",\"Test\",\"File\",\"Preferences\"],\"vs/platform/actionWidget/browser/actionList\":[\"{0} to apply, {1} to preview\",\"{0} to apply\",\"{0}, Disabled Reason: {1}\",\"Action Widget\"],\"vs/platform/actionWidget/browser/actionWidget\":[\"Background color for toggled action items in action bar.\",\"Whether the action widget list is visible\",\"Hide action widget\",\"Select previous action\",\"Select next action\",\"Accept selected action\",\"Preview selected action\"],\"vs/platform/actions/browser/menuEntryActionViewItem\":[\"{0} ({1})\",\"{0} ({1})\",`{0}\n[{1}] {2}`],\"vs/platform/actions/browser/toolbar\":[\"Hide\",\"Reset Menu\"],\"vs/platform/actions/common/menuService\":[\"Hide '{0}'\"],\"vs/platform/audioCues/browser/audioCueService\":[\"Error on Line\",\"Error\",\"Warning on Line\",\"Warning\",\"Folded Area on Line\",\"Folded\",\"Breakpoint on Line\",\"Breakpoint\",\"Inline Suggestion on Line\",\"Terminal Quick Fix\",\"Quick Fix\",\"Debugger Stopped on Breakpoint\",\"Breakpoint\",\"No Inlay Hints on Line\",\"No Inlay Hints\",\"Task Completed\",\"Task Completed\",\"Task Failed\",\"Task Failed\",\"Terminal Command Failed\",\"Command Failed\",\"Terminal Bell\",\"Terminal Bell\",\"Notebook Cell Completed\",\"Notebook Cell Completed\",\"Notebook Cell Failed\",\"Notebook Cell Failed\",\"Diff Line Inserted\",\"Diff Line Deleted\",\"Diff Line Modified\",\"Chat Request Sent\",\"Chat Request Sent\",\"Chat Response Received\",\"Chat Response Pending\",\"Chat Response Pending\",\"Clear\",\"Clear\",\"Save\",\"Save\",\"Format\",\"Format\"],\"vs/platform/configuration/common/configurationRegistry\":[\"Default Language Configuration Overrides\",\"Configure settings to be overridden for the {0} language.\",\"Configure editor settings to be overridden for a language.\",\"This setting does not support per-language configuration.\",\"Configure editor settings to be overridden for a language.\",\"This setting does not support per-language configuration.\",\"Cannot register an empty property\",\"Cannot register '{0}'. This matches property pattern '\\\\\\\\[.*\\\\\\\\]$' for describing language specific editor settings. Use 'configurationDefaults' contribution.\",\"Cannot register '{0}'. This property is already registered.\",\"Cannot register '{0}'. The associated policy {1} is already registered with {2}.\"],\"vs/platform/contextkey/browser/contextKeyService\":[\"A command that returns information about context keys\"],\"vs/platform/contextkey/common/contextkey\":[\"Empty context key expression\",\"Did you forget to write an expression? You can also put 'false' or 'true' to always evaluate to false or true, respectively.\",\"'in' after 'not'.\",\"closing parenthesis ')'\",\"Unexpected token\",\"Did you forget to put && or || before the token?\",\"Unexpected end of expression\",\"Did you forget to put a context key?\",`Expected: {0}\nReceived: '{1}'.`],\"vs/platform/contextkey/common/contextkeys\":[\"Whether the operating system is macOS\",\"Whether the operating system is Linux\",\"Whether the operating system is Windows\",\"Whether the platform is a web browser\",\"Whether the operating system is macOS on a non-browser platform\",\"Whether the operating system is iOS\",\"Whether the platform is a mobile web browser\",\"Quality type of VS Code\",\"Whether keyboard focus is inside an input box\"],\"vs/platform/contextkey/common/scanner\":[\"Did you mean {0}?\",\"Did you mean {0} or {1}?\",\"Did you mean {0}, {1} or {2}?\",\"Did you forget to open or close the quote?\",\"Did you forget to escape the '/' (slash) character? Put two backslashes before it to escape, e.g., '\\\\\\\\/'.\"],\"vs/platform/history/browser/contextScopedHistoryWidget\":[\"Whether suggestion are visible\"],\"vs/platform/keybinding/common/abstractKeybindingService\":[\"({0}) was pressed. Waiting for second key of chord...\",\"({0}) was pressed. Waiting for next key of chord...\",\"The key combination ({0}, {1}) is not a command.\",\"The key combination ({0}, {1}) is not a command.\"],\"vs/platform/list/browser/listService\":[\"Workbench\",\"Maps to `Control` on Windows and Linux and to `Command` on macOS.\",\"Maps to `Alt` on Windows and Linux and to `Option` on macOS.\",\"The modifier to be used to add an item in trees and lists to a multi-selection with the mouse (for example in the explorer, open editors and scm view). The 'Open to Side' mouse gestures - if supported - will adapt such that they do not conflict with the multiselect modifier.\",\"Controls how to open items in trees and lists using the mouse (if supported). Note that some trees and lists might choose to ignore this setting if it is not applicable.\",\"Controls whether lists and trees support horizontal scrolling in the workbench. Warning: turning on this setting has a performance implication.\",\"Controls whether clicks in the scrollbar scroll page by page.\",\"Controls tree indentation in pixels.\",\"Controls whether the tree should render indent guides.\",\"Controls whether lists and trees have smooth scrolling.\",\"A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.\",\"Scrolling speed multiplier when pressing `Alt`.\",\"Highlight elements when searching. Further up and down navigation will traverse only the highlighted elements.\",\"Filter elements when searching.\",\"Controls the default find mode for lists and trees in the workbench.\",\"Simple keyboard navigation focuses elements which match the keyboard input. Matching is done only on prefixes.\",\"Highlight keyboard navigation highlights elements which match the keyboard input. Further up and down navigation will traverse only the highlighted elements.\",\"Filter keyboard navigation will filter out and hide all the elements which do not match the keyboard input.\",\"Controls the keyboard navigation style for lists and trees in the workbench. Can be simple, highlight and filter.\",\"Please use 'workbench.list.defaultFindMode' and\t'workbench.list.typeNavigationMode' instead.\",\"Use fuzzy matching when searching.\",\"Use contiguous matching when searching.\",\"Controls the type of matching used when searching lists and trees in the workbench.\",\"Controls how tree folders are expanded when clicking the folder names. Note that some trees and lists might choose to ignore this setting if it is not applicable.\",\"Controls whether sticky scrolling is enabled in trees.\",\"Controls the number of sticky elements displayed in the tree when `#workbench.tree.enableStickyScroll#` is enabled.\",\"Controls how type navigation works in lists and trees in the workbench. When set to `trigger`, type navigation begins once the `list.triggerTypeNavigation` command is run.\"],\"vs/platform/markers/common/markers\":[\"Error\",\"Warning\",\"Info\"],\"vs/platform/quickinput/browser/commandsQuickAccess\":[\"recently used\",\"similar commands\",\"commonly used\",\"other commands\",\"similar commands\",\"{0}, {1}\",\"Command '{0}' resulted in an error\"],\"vs/platform/quickinput/browser/helpQuickAccess\":[\"{0}, {1}\"],\"vs/platform/quickinput/browser/quickInput\":[\"Back\",\"Press 'Enter' to confirm your input or 'Escape' to cancel\",\"{0}/{1}\",\"Type to narrow down results.\"],\"vs/platform/quickinput/browser/quickInputController\":[\"Toggle all checkboxes\",\"{0} Results\",\"{0} Selected\",\"OK\",\"Custom\",\"Back ({0})\",\"Back\"],\"vs/platform/quickinput/browser/quickInputList\":[\"Quick Input\"],\"vs/platform/quickinput/browser/quickInputUtils\":[\"Click to execute command '{0}'\"],\"vs/platform/theme/common/colorRegistry\":[\"Overall foreground color. This color is only used if not overridden by a component.\",\"Overall foreground for disabled elements. This color is only used if not overridden by a component.\",\"Overall foreground color for error messages. This color is only used if not overridden by a component.\",\"Foreground color for description text providing additional information, for example for a label.\",\"The default color for icons in the workbench.\",\"Overall border color for focused elements. This color is only used if not overridden by a component.\",\"An extra border around elements to separate them from others for greater contrast.\",\"An extra border around active elements to separate them from others for greater contrast.\",\"The background color of text selections in the workbench (e.g. for input fields or text areas). Note that this does not apply to selections within the editor.\",\"Color for text separators.\",\"Foreground color for links in text.\",\"Foreground color for links in text when clicked on and on mouse hover.\",\"Foreground color for preformatted text segments.\",\"Background color for preformatted text segments.\",\"Background color for block quotes in text.\",\"Border color for block quotes in text.\",\"Background color for code blocks in text.\",\"Shadow color of widgets such as find/replace inside the editor.\",\"Border color of widgets such as find/replace inside the editor.\",\"Input box background.\",\"Input box foreground.\",\"Input box border.\",\"Border color of activated options in input fields.\",\"Background color of activated options in input fields.\",\"Background hover color of options in input fields.\",\"Foreground color of activated options in input fields.\",\"Input box foreground color for placeholder text.\",\"Input validation background color for information severity.\",\"Input validation foreground color for information severity.\",\"Input validation border color for information severity.\",\"Input validation background color for warning severity.\",\"Input validation foreground color for warning severity.\",\"Input validation border color for warning severity.\",\"Input validation background color for error severity.\",\"Input validation foreground color for error severity.\",\"Input validation border color for error severity.\",\"Dropdown background.\",\"Dropdown list background.\",\"Dropdown foreground.\",\"Dropdown border.\",\"Button foreground color.\",\"Button separator color.\",\"Button background color.\",\"Button background color when hovering.\",\"Button border color.\",\"Secondary button foreground color.\",\"Secondary button background color.\",\"Secondary button background color when hovering.\",\"Badge background color. Badges are small information labels, e.g. for search results count.\",\"Badge foreground color. Badges are small information labels, e.g. for search results count.\",\"Scrollbar shadow to indicate that the view is scrolled.\",\"Scrollbar slider background color.\",\"Scrollbar slider background color when hovering.\",\"Scrollbar slider background color when clicked on.\",\"Background color of the progress bar that can show for long running operations.\",\"Background color of error text in the editor. The color must not be opaque so as not to hide underlying decorations.\",\"Foreground color of error squigglies in the editor.\",\"If set, color of double underlines for errors in the editor.\",\"Background color of warning text in the editor. The color must not be opaque so as not to hide underlying decorations.\",\"Foreground color of warning squigglies in the editor.\",\"If set, color of double underlines for warnings in the editor.\",\"Background color of info text in the editor. The color must not be opaque so as not to hide underlying decorations.\",\"Foreground color of info squigglies in the editor.\",\"If set, color of double underlines for infos in the editor.\",\"Foreground color of hint squigglies in the editor.\",\"If set, color of double underlines for hints in the editor.\",\"Border color of active sashes.\",\"Editor background color.\",\"Editor default foreground color.\",\"Background color of sticky scroll in the editor\",\"Background color of sticky scroll on hover in the editor\",\"Border color of sticky scroll in the editor\",\" Shadow color of sticky scroll in the editor\",\"Background color of editor widgets, such as find/replace.\",\"Foreground color of editor widgets, such as find/replace.\",\"Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.\",\"Border color of the resize bar of editor widgets. The color is only used if the widget chooses to have a resize border and if the color is not overridden by a widget.\",\"Quick picker background color. The quick picker widget is the container for pickers like the command palette.\",\"Quick picker foreground color. The quick picker widget is the container for pickers like the command palette.\",\"Quick picker title background color. The quick picker widget is the container for pickers like the command palette.\",\"Quick picker color for grouping labels.\",\"Quick picker color for grouping borders.\",\"Keybinding label background color. The keybinding label is used to represent a keyboard shortcut.\",\"Keybinding label foreground color. The keybinding label is used to represent a keyboard shortcut.\",\"Keybinding label border color. The keybinding label is used to represent a keyboard shortcut.\",\"Keybinding label border bottom color. The keybinding label is used to represent a keyboard shortcut.\",\"Color of the editor selection.\",\"Color of the selected text for high contrast.\",\"Color of the selection in an inactive editor. The color must not be opaque so as not to hide underlying decorations.\",\"Color for regions with the same content as the selection. The color must not be opaque so as not to hide underlying decorations.\",\"Border color for regions with the same content as the selection.\",\"Color of the current search match.\",\"Color of the other search matches. The color must not be opaque so as not to hide underlying decorations.\",\"Color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.\",\"Border color of the current search match.\",\"Border color of the other search matches.\",\"Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.\",\"Color of the Search Editor query matches.\",\"Border color of the Search Editor query matches.\",\"Color of the text in the search viewlet's completion message.\",\"Highlight below the word for which a hover is shown. The color must not be opaque so as not to hide underlying decorations.\",\"Background color of the editor hover.\",\"Foreground color of the editor hover.\",\"Border color of the editor hover.\",\"Background color of the editor hover status bar.\",\"Color of active links.\",\"Foreground color of inline hints\",\"Background color of inline hints\",\"Foreground color of inline hints for types\",\"Background color of inline hints for types\",\"Foreground color of inline hints for parameters\",\"Background color of inline hints for parameters\",\"The color used for the lightbulb actions icon.\",\"The color used for the lightbulb auto fix actions icon.\",\"The color used for the lightbulb AI icon.\",\"Background color for text that got inserted. The color must not be opaque so as not to hide underlying decorations.\",\"Background color for text that got removed. The color must not be opaque so as not to hide underlying decorations.\",\"Background color for lines that got inserted. The color must not be opaque so as not to hide underlying decorations.\",\"Background color for lines that got removed. The color must not be opaque so as not to hide underlying decorations.\",\"Background color for the margin where lines got inserted.\",\"Background color for the margin where lines got removed.\",\"Diff overview ruler foreground for inserted content.\",\"Diff overview ruler foreground for removed content.\",\"Outline color for the text that got inserted.\",\"Outline color for text that got removed.\",\"Border color between the two text editors.\",\"Color of the diff editor's diagonal fill. The diagonal fill is used in side-by-side diff views.\",\"The background color of unchanged blocks in the diff editor.\",\"The foreground color of unchanged blocks in the diff editor.\",\"The background color of unchanged code in the diff editor.\",\"List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree outline color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree outline color for the focused item when the list/tree is active and selected. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree icon foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree icon foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree background color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree outline color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\",\"List/Tree background when hovering over items using the mouse.\",\"List/Tree foreground when hovering over items using the mouse.\",\"List/Tree drag and drop background when moving items over other items when using the mouse.\",\"List/Tree drag and drop border color when moving items between items when using the mouse.\",\"List/Tree foreground color of the match highlights when searching inside the list/tree.\",\"List/Tree foreground color of the match highlights on actively focused items when searching inside the list/tree.\",\"List/Tree foreground color for invalid items, for example an unresolved root in explorer.\",\"Foreground color of list items containing errors.\",\"Foreground color of list items containing warnings.\",\"Background color of the type filter widget in lists and trees.\",\"Outline color of the type filter widget in lists and trees.\",\"Outline color of the type filter widget in lists and trees, when there are no matches.\",\"Shadow color of the type filter widget in lists and trees.\",\"Background color of the filtered match.\",\"Border color of the filtered match.\",\"Tree stroke color for the indentation guides.\",\"Tree stroke color for the indentation guides that are not active.\",\"Table border color between columns.\",\"Background color for odd table rows.\",\"List/Tree foreground color for items that are deemphasized. \",\"Background color of checkbox widget.\",\"Background color of checkbox widget when the element it's in is selected.\",\"Foreground color of checkbox widget.\",\"Border color of checkbox widget.\",\"Border color of checkbox widget when the element it's in is selected.\",\"Please use quickInputList.focusBackground instead\",\"Quick picker foreground color for the focused item.\",\"Quick picker icon foreground color for the focused item.\",\"Quick picker background color for the focused item.\",\"Border color of menus.\",\"Foreground color of menu items.\",\"Background color of menu items.\",\"Foreground color of the selected menu item in menus.\",\"Background color of the selected menu item in menus.\",\"Border color of the selected menu item in menus.\",\"Color of a separator menu item in menus.\",\"Toolbar background when hovering over actions using the mouse\",\"Toolbar outline when hovering over actions using the mouse\",\"Toolbar background when holding the mouse over actions\",\"Highlight background color of a snippet tabstop.\",\"Highlight border color of a snippet tabstop.\",\"Highlight background color of the final tabstop of a snippet.\",\"Highlight border color of the final tabstop of a snippet.\",\"Color of focused breadcrumb items.\",\"Background color of breadcrumb items.\",\"Color of focused breadcrumb items.\",\"Color of selected breadcrumb items.\",\"Background color of breadcrumb item picker.\",\"Current header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.\",\"Current content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.\",\"Incoming header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.\",\"Incoming content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.\",\"Common ancestor header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.\",\"Common ancestor content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.\",\"Border color on headers and the splitter in inline merge-conflicts.\",\"Current overview ruler foreground for inline merge-conflicts.\",\"Incoming overview ruler foreground for inline merge-conflicts.\",\"Common ancestor overview ruler foreground for inline merge-conflicts.\",\"Overview ruler marker color for find matches. The color must not be opaque so as not to hide underlying decorations.\",\"Overview ruler marker color for selection highlights. The color must not be opaque so as not to hide underlying decorations.\",\"Minimap marker color for find matches.\",\"Minimap marker color for repeating editor selections.\",\"Minimap marker color for the editor selection.\",\"Minimap marker color for infos.\",\"Minimap marker color for warnings.\",\"Minimap marker color for errors.\",\"Minimap background color.\",'Opacity of foreground elements rendered in the minimap. For example, \"#000000c0\" will render the elements with 75% opacity.',\"Minimap slider background color.\",\"Minimap slider background color when hovering.\",\"Minimap slider background color when clicked on.\",\"The color used for the problems error icon.\",\"The color used for the problems warning icon.\",\"The color used for the problems info icon.\",\"The foreground color used in charts.\",\"The color used for horizontal lines in charts.\",\"The red color used in chart visualizations.\",\"The blue color used in chart visualizations.\",\"The yellow color used in chart visualizations.\",\"The orange color used in chart visualizations.\",\"The green color used in chart visualizations.\",\"The purple color used in chart visualizations.\"],\"vs/platform/theme/common/iconRegistry\":[\"The id of the font to use. If not set, the font that is defined first is used.\",\"The font character associated with the icon definition.\",\"Icon for the close action in widgets.\",\"Icon for goto previous editor location.\",\"Icon for goto next editor location.\"],\"vs/platform/undoRedo/common/undoRedoService\":[\"The following files have been closed and modified on disk: {0}.\",\"The following files have been modified in an incompatible way: {0}.\",\"Could not undo '{0}' across all files. {1}\",\"Could not undo '{0}' across all files. {1}\",\"Could not undo '{0}' across all files because changes were made to {1}\",\"Could not undo '{0}' across all files because there is already an undo or redo operation running on {1}\",\"Could not undo '{0}' across all files because an undo or redo operation occurred in the meantime\",\"Would you like to undo '{0}' across all files?\",\"&&Undo in {0} Files\",\"Undo this &&File\",\"Could not undo '{0}' because there is already an undo or redo operation running.\",\"Would you like to undo '{0}'?\",\"&&Yes\",\"No\",\"Could not redo '{0}' across all files. {1}\",\"Could not redo '{0}' across all files. {1}\",\"Could not redo '{0}' across all files because changes were made to {1}\",\"Could not redo '{0}' across all files because there is already an undo or redo operation running on {1}\",\"Could not redo '{0}' across all files because an undo or redo operation occurred in the meantime\",\"Could not redo '{0}' because there is already an undo or redo operation running.\"],\"vs/platform/workspace/common/workspace\":[\"Code Workspace\"]});\n\n//# sourceMappingURL=../../../min-maps/vs/editor/editor.main.nls.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/css/cssMode.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/css/cssMode\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var tn=Object.create;var Y=Object.defineProperty;var rn=Object.getOwnPropertyDescriptor;var on=Object.getOwnPropertyNames;var sn=Object.getPrototypeOf,an=Object.prototype.hasOwnProperty;var un=(n=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(n,{get:(t,i)=>(typeof require<\"u\"?require:t)[i]}):n)(function(n){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+n+'\" is not supported')});var dn=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),cn=(n,t)=>{for(var i in t)Y(n,i,{get:t[i],enumerable:!0})},J=(n,t,i,r)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let e of on(t))!an.call(n,e)&&e!==i&&Y(n,e,{get:()=>t[e],enumerable:!(r=rn(t,e))||r.enumerable});return n},pe=(n,t,i)=>(J(n,t,\"default\"),i&&J(i,t,\"default\")),he=(n,t,i)=>(i=n!=null?tn(sn(n)):{},J(t||!n||!n.__esModule?Y(i,\"default\",{value:n,enumerable:!0}):i,n)),ln=n=>J(Y({},\"__esModule\",{value:!0}),n);var ve=dn((Wn,me)=>{var gn=he(un(\"vs/editor/editor.api\"));me.exports=gn});var Sn={};cn(Sn,{CompletionAdapter:()=>H,DefinitionAdapter:()=>O,DiagnosticsAdapter:()=>K,DocumentColorAdapter:()=>$,DocumentFormattingEditProvider:()=>X,DocumentHighlightAdapter:()=>j,DocumentLinkAdapter:()=>le,DocumentRangeFormattingEditProvider:()=>B,DocumentSymbolAdapter:()=>z,FoldingRangeAdapter:()=>q,HoverAdapter:()=>U,ReferenceAdapter:()=>N,RenameAdapter:()=>V,SelectionRangeAdapter:()=>Q,WorkerManager:()=>E,fromPosition:()=>_,fromRange:()=>ge,setupMode:()=>Rn,toRange:()=>T,toTextEdit:()=>W});var d={};pe(d,he(ve()));var fn=2*60*1e3,E=class{constructor(t){this._defaults=t,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>fn&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=d.editor.createWebWorker({moduleId:\"vs/language/css/cssWorker\",label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...t){let i;return this._getClient().then(r=>{i=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(t)}).then(r=>i)}};var ye;(function(n){n.MIN_VALUE=-2147483648,n.MAX_VALUE=2147483647})(ye||(ye={}));var ee;(function(n){n.MIN_VALUE=0,n.MAX_VALUE=2147483647})(ee||(ee={}));var x;(function(n){function t(r,e){return r===Number.MAX_VALUE&&(r=ee.MAX_VALUE),e===Number.MAX_VALUE&&(e=ee.MAX_VALUE),{line:r,character:e}}n.create=t;function i(r){var e=r;return a.objectLiteral(e)&&a.uinteger(e.line)&&a.uinteger(e.character)}n.is=i})(x||(x={}));var v;(function(n){function t(r,e,o,s){if(a.uinteger(r)&&a.uinteger(e)&&a.uinteger(o)&&a.uinteger(s))return{start:x.create(r,e),end:x.create(o,s)};if(x.is(r)&&x.is(e))return{start:r,end:e};throw new Error(\"Range#create called with invalid arguments[\"+r+\", \"+e+\", \"+o+\", \"+s+\"]\")}n.create=t;function i(r){var e=r;return a.objectLiteral(e)&&x.is(e.start)&&x.is(e.end)}n.is=i})(v||(v={}));var se;(function(n){function t(r,e){return{uri:r,range:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.range)&&(a.string(e.uri)||a.undefined(e.uri))}n.is=i})(se||(se={}));var Te;(function(n){function t(r,e,o,s){return{targetUri:r,targetRange:e,targetSelectionRange:o,originSelectionRange:s}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.targetRange)&&a.string(e.targetUri)&&(v.is(e.targetSelectionRange)||a.undefined(e.targetSelectionRange))&&(v.is(e.originSelectionRange)||a.undefined(e.originSelectionRange))}n.is=i})(Te||(Te={}));var ae;(function(n){function t(r,e,o,s){return{red:r,green:e,blue:o,alpha:s}}n.create=t;function i(r){var e=r;return a.numberRange(e.red,0,1)&&a.numberRange(e.green,0,1)&&a.numberRange(e.blue,0,1)&&a.numberRange(e.alpha,0,1)}n.is=i})(ae||(ae={}));var xe;(function(n){function t(r,e){return{range:r,color:e}}n.create=t;function i(r){var e=r;return v.is(e.range)&&ae.is(e.color)}n.is=i})(xe||(xe={}));var ke;(function(n){function t(r,e,o){return{label:r,textEdit:e,additionalTextEdits:o}}n.create=t;function i(r){var e=r;return a.string(e.label)&&(a.undefined(e.textEdit)||C.is(e))&&(a.undefined(e.additionalTextEdits)||a.typedArray(e.additionalTextEdits,C.is))}n.is=i})(ke||(ke={}));var S;(function(n){n.Comment=\"comment\",n.Imports=\"imports\",n.Region=\"region\"})(S||(S={}));var Ie;(function(n){function t(r,e,o,s,u){var l={startLine:r,endLine:e};return a.defined(o)&&(l.startCharacter=o),a.defined(s)&&(l.endCharacter=s),a.defined(u)&&(l.kind=u),l}n.create=t;function i(r){var e=r;return a.uinteger(e.startLine)&&a.uinteger(e.startLine)&&(a.undefined(e.startCharacter)||a.uinteger(e.startCharacter))&&(a.undefined(e.endCharacter)||a.uinteger(e.endCharacter))&&(a.undefined(e.kind)||a.string(e.kind))}n.is=i})(Ie||(Ie={}));var ue;(function(n){function t(r,e){return{location:r,message:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&se.is(e.location)&&a.string(e.message)}n.is=i})(ue||(ue={}));var b;(function(n){n.Error=1,n.Warning=2,n.Information=3,n.Hint=4})(b||(b={}));var Ce;(function(n){n.Unnecessary=1,n.Deprecated=2})(Ce||(Ce={}));var _e;(function(n){function t(i){var r=i;return r!=null&&a.string(r.href)}n.is=t})(_e||(_e={}));var ne;(function(n){function t(r,e,o,s,u,l){var f={range:r,message:e};return a.defined(o)&&(f.severity=o),a.defined(s)&&(f.code=s),a.defined(u)&&(f.source=u),a.defined(l)&&(f.relatedInformation=l),f}n.create=t;function i(r){var e,o=r;return a.defined(o)&&v.is(o.range)&&a.string(o.message)&&(a.number(o.severity)||a.undefined(o.severity))&&(a.integer(o.code)||a.string(o.code)||a.undefined(o.code))&&(a.undefined(o.codeDescription)||a.string((e=o.codeDescription)===null||e===void 0?void 0:e.href))&&(a.string(o.source)||a.undefined(o.source))&&(a.undefined(o.relatedInformation)||a.typedArray(o.relatedInformation,ue.is))}n.is=i})(ne||(ne={}));var D;(function(n){function t(r,e){for(var o=[],s=2;s<arguments.length;s++)o[s-2]=arguments[s];var u={title:r,command:e};return a.defined(o)&&o.length>0&&(u.arguments=o),u}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.title)&&a.string(e.command)}n.is=i})(D||(D={}));var C;(function(n){function t(o,s){return{range:o,newText:s}}n.replace=t;function i(o,s){return{range:{start:o,end:o},newText:s}}n.insert=i;function r(o){return{range:o,newText:\"\"}}n.del=r;function e(o){var s=o;return a.objectLiteral(s)&&a.string(s.newText)&&v.is(s.range)}n.is=e})(C||(C={}));var R;(function(n){function t(r,e,o){var s={label:r};return e!==void 0&&(s.needsConfirmation=e),o!==void 0&&(s.description=o),s}n.create=t;function i(r){var e=r;return e!==void 0&&a.objectLiteral(e)&&a.string(e.label)&&(a.boolean(e.needsConfirmation)||e.needsConfirmation===void 0)&&(a.string(e.description)||e.description===void 0)}n.is=i})(R||(R={}));var y;(function(n){function t(i){var r=i;return typeof r==\"string\"}n.is=t})(y||(y={}));var I;(function(n){function t(o,s,u){return{range:o,newText:s,annotationId:u}}n.replace=t;function i(o,s,u){return{range:{start:o,end:o},newText:s,annotationId:u}}n.insert=i;function r(o,s){return{range:o,newText:\"\",annotationId:s}}n.del=r;function e(o){var s=o;return C.is(s)&&(R.is(s.annotationId)||y.is(s.annotationId))}n.is=e})(I||(I={}));var te;(function(n){function t(r,e){return{textDocument:r,edits:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&re.is(e.textDocument)&&Array.isArray(e.edits)}n.is=i})(te||(te={}));var L;(function(n){function t(r,e,o){var s={kind:\"create\",uri:r};return e!==void 0&&(e.overwrite!==void 0||e.ignoreIfExists!==void 0)&&(s.options=e),o!==void 0&&(s.annotationId=o),s}n.create=t;function i(r){var e=r;return e&&e.kind===\"create\"&&a.string(e.uri)&&(e.options===void 0||(e.options.overwrite===void 0||a.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||a.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||y.is(e.annotationId))}n.is=i})(L||(L={}));var F;(function(n){function t(r,e,o,s){var u={kind:\"rename\",oldUri:r,newUri:e};return o!==void 0&&(o.overwrite!==void 0||o.ignoreIfExists!==void 0)&&(u.options=o),s!==void 0&&(u.annotationId=s),u}n.create=t;function i(r){var e=r;return e&&e.kind===\"rename\"&&a.string(e.oldUri)&&a.string(e.newUri)&&(e.options===void 0||(e.options.overwrite===void 0||a.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||a.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||y.is(e.annotationId))}n.is=i})(F||(F={}));var M;(function(n){function t(r,e,o){var s={kind:\"delete\",uri:r};return e!==void 0&&(e.recursive!==void 0||e.ignoreIfNotExists!==void 0)&&(s.options=e),o!==void 0&&(s.annotationId=o),s}n.create=t;function i(r){var e=r;return e&&e.kind===\"delete\"&&a.string(e.uri)&&(e.options===void 0||(e.options.recursive===void 0||a.boolean(e.options.recursive))&&(e.options.ignoreIfNotExists===void 0||a.boolean(e.options.ignoreIfNotExists)))&&(e.annotationId===void 0||y.is(e.annotationId))}n.is=i})(M||(M={}));var de;(function(n){function t(i){var r=i;return r&&(r.changes!==void 0||r.documentChanges!==void 0)&&(r.documentChanges===void 0||r.documentChanges.every(function(e){return a.string(e.kind)?L.is(e)||F.is(e)||M.is(e):te.is(e)}))}n.is=t})(de||(de={}));var Z=function(){function n(t,i){this.edits=t,this.changeAnnotations=i}return n.prototype.insert=function(t,i,r){var e,o;if(r===void 0?e=C.insert(t,i):y.is(r)?(o=r,e=I.insert(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),e=I.insert(t,i,o)),this.edits.push(e),o!==void 0)return o},n.prototype.replace=function(t,i,r){var e,o;if(r===void 0?e=C.replace(t,i):y.is(r)?(o=r,e=I.replace(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),e=I.replace(t,i,o)),this.edits.push(e),o!==void 0)return o},n.prototype.delete=function(t,i){var r,e;if(i===void 0?r=C.del(t):y.is(i)?(e=i,r=I.del(t,i)):(this.assertChangeAnnotations(this.changeAnnotations),e=this.changeAnnotations.manage(i),r=I.del(t,e)),this.edits.push(r),e!==void 0)return e},n.prototype.add=function(t){this.edits.push(t)},n.prototype.all=function(){return this.edits},n.prototype.clear=function(){this.edits.splice(0,this.edits.length)},n.prototype.assertChangeAnnotations=function(t){if(t===void 0)throw new Error(\"Text edit change is not configured to manage change annotations.\")},n}(),be=function(){function n(t){this._annotations=t===void 0?Object.create(null):t,this._counter=0,this._size=0}return n.prototype.all=function(){return this._annotations},Object.defineProperty(n.prototype,\"size\",{get:function(){return this._size},enumerable:!1,configurable:!0}),n.prototype.manage=function(t,i){var r;if(y.is(t)?r=t:(r=this.nextId(),i=t),this._annotations[r]!==void 0)throw new Error(\"Id \"+r+\" is already in use.\");if(i===void 0)throw new Error(\"No annotation provided for id \"+r);return this._annotations[r]=i,this._size++,r},n.prototype.nextId=function(){return this._counter++,this._counter.toString()},n}(),Kn=function(){function n(t){var i=this;this._textEditChanges=Object.create(null),t!==void 0?(this._workspaceEdit=t,t.documentChanges?(this._changeAnnotations=new be(t.changeAnnotations),t.changeAnnotations=this._changeAnnotations.all(),t.documentChanges.forEach(function(r){if(te.is(r)){var e=new Z(r.edits,i._changeAnnotations);i._textEditChanges[r.textDocument.uri]=e}})):t.changes&&Object.keys(t.changes).forEach(function(r){var e=new Z(t.changes[r]);i._textEditChanges[r]=e})):this._workspaceEdit={}}return Object.defineProperty(n.prototype,\"edit\",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),n.prototype.getTextEditChange=function(t){if(re.is(t)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var i={uri:t.uri,version:t.version},r=this._textEditChanges[i.uri];if(!r){var e=[],o={textDocument:i,edits:e};this._workspaceEdit.documentChanges.push(o),r=new Z(e,this._changeAnnotations),this._textEditChanges[i.uri]=r}return r}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error(\"Workspace edit is not configured for normal text edit changes.\");var r=this._textEditChanges[t];if(!r){var e=[];this._workspaceEdit.changes[t]=e,r=new Z(e),this._textEditChanges[t]=r}return r}},n.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new be,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},n.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},n.prototype.createFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var e;R.is(i)||y.is(i)?e=i:r=i;var o,s;if(e===void 0?o=L.create(t,r):(s=y.is(e)?e:this._changeAnnotations.manage(e),o=L.create(t,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n.prototype.renameFile=function(t,i,r,e){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var o;R.is(r)||y.is(r)?o=r:e=r;var s,u;if(o===void 0?s=F.create(t,i,e):(u=y.is(o)?o:this._changeAnnotations.manage(o),s=F.create(t,i,e,u)),this._workspaceEdit.documentChanges.push(s),u!==void 0)return u},n.prototype.deleteFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var e;R.is(i)||y.is(i)?e=i:r=i;var o,s;if(e===void 0?o=M.create(t,r):(s=y.is(e)?e:this._changeAnnotations.manage(e),o=M.create(t,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n}();var we;(function(n){function t(r){return{uri:r}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)}n.is=i})(we||(we={}));var Ee;(function(n){function t(r,e){return{uri:r,version:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&a.integer(e.version)}n.is=i})(Ee||(Ee={}));var re;(function(n){function t(r,e){return{uri:r,version:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&(e.version===null||a.integer(e.version))}n.is=i})(re||(re={}));var Re;(function(n){function t(r,e,o,s){return{uri:r,languageId:e,version:o,text:s}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&a.string(e.languageId)&&a.integer(e.version)&&a.string(e.text)}n.is=i})(Re||(Re={}));var A;(function(n){n.PlainText=\"plaintext\",n.Markdown=\"markdown\"})(A||(A={}));(function(n){function t(i){var r=i;return r===n.PlainText||r===n.Markdown}n.is=t})(A||(A={}));var ce;(function(n){function t(i){var r=i;return a.objectLiteral(i)&&A.is(r.kind)&&a.string(r.value)}n.is=t})(ce||(ce={}));var p;(function(n){n.Text=1,n.Method=2,n.Function=3,n.Constructor=4,n.Field=5,n.Variable=6,n.Class=7,n.Interface=8,n.Module=9,n.Property=10,n.Unit=11,n.Value=12,n.Enum=13,n.Keyword=14,n.Snippet=15,n.Color=16,n.File=17,n.Reference=18,n.Folder=19,n.EnumMember=20,n.Constant=21,n.Struct=22,n.Event=23,n.Operator=24,n.TypeParameter=25})(p||(p={}));var ie;(function(n){n.PlainText=1,n.Snippet=2})(ie||(ie={}));var Se;(function(n){n.Deprecated=1})(Se||(Se={}));var Pe;(function(n){function t(r,e,o){return{newText:r,insert:e,replace:o}}n.create=t;function i(r){var e=r;return e&&a.string(e.newText)&&v.is(e.insert)&&v.is(e.replace)}n.is=i})(Pe||(Pe={}));var We;(function(n){n.asIs=1,n.adjustIndentation=2})(We||(We={}));var De;(function(n){function t(i){return{label:i}}n.create=t})(De||(De={}));var Le;(function(n){function t(i,r){return{items:i||[],isIncomplete:!!r}}n.create=t})(Le||(Le={}));var oe;(function(n){function t(r){return r.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}n.fromPlainText=t;function i(r){var e=r;return a.string(e)||a.objectLiteral(e)&&a.string(e.language)&&a.string(e.value)}n.is=i})(oe||(oe={}));var Fe;(function(n){function t(i){var r=i;return!!r&&a.objectLiteral(r)&&(ce.is(r.contents)||oe.is(r.contents)||a.typedArray(r.contents,oe.is))&&(i.range===void 0||v.is(i.range))}n.is=t})(Fe||(Fe={}));var Me;(function(n){function t(i,r){return r?{label:i,documentation:r}:{label:i}}n.create=t})(Me||(Me={}));var Ae;(function(n){function t(i,r){for(var e=[],o=2;o<arguments.length;o++)e[o-2]=arguments[o];var s={label:i};return a.defined(r)&&(s.documentation=r),a.defined(e)?s.parameters=e:s.parameters=[],s}n.create=t})(Ae||(Ae={}));var P;(function(n){n.Text=1,n.Read=2,n.Write=3})(P||(P={}));var Ke;(function(n){function t(i,r){var e={range:i};return a.number(r)&&(e.kind=r),e}n.create=t})(Ke||(Ke={}));var h;(function(n){n.File=1,n.Module=2,n.Namespace=3,n.Package=4,n.Class=5,n.Method=6,n.Property=7,n.Field=8,n.Constructor=9,n.Enum=10,n.Interface=11,n.Function=12,n.Variable=13,n.Constant=14,n.String=15,n.Number=16,n.Boolean=17,n.Array=18,n.Object=19,n.Key=20,n.Null=21,n.EnumMember=22,n.Struct=23,n.Event=24,n.Operator=25,n.TypeParameter=26})(h||(h={}));var He;(function(n){n.Deprecated=1})(He||(He={}));var Ue;(function(n){function t(i,r,e,o,s){var u={name:i,kind:r,location:{uri:o,range:e}};return s&&(u.containerName=s),u}n.create=t})(Ue||(Ue={}));var je;(function(n){function t(r,e,o,s,u,l){var f={name:r,detail:e,kind:o,range:s,selectionRange:u};return l!==void 0&&(f.children=l),f}n.create=t;function i(r){var e=r;return e&&a.string(e.name)&&a.number(e.kind)&&v.is(e.range)&&v.is(e.selectionRange)&&(e.detail===void 0||a.string(e.detail))&&(e.deprecated===void 0||a.boolean(e.deprecated))&&(e.children===void 0||Array.isArray(e.children))&&(e.tags===void 0||Array.isArray(e.tags))}n.is=i})(je||(je={}));var Oe;(function(n){n.Empty=\"\",n.QuickFix=\"quickfix\",n.Refactor=\"refactor\",n.RefactorExtract=\"refactor.extract\",n.RefactorInline=\"refactor.inline\",n.RefactorRewrite=\"refactor.rewrite\",n.Source=\"source\",n.SourceOrganizeImports=\"source.organizeImports\",n.SourceFixAll=\"source.fixAll\"})(Oe||(Oe={}));var Ne;(function(n){function t(r,e){var o={diagnostics:r};return e!=null&&(o.only=e),o}n.create=t;function i(r){var e=r;return a.defined(e)&&a.typedArray(e.diagnostics,ne.is)&&(e.only===void 0||a.typedArray(e.only,a.string))}n.is=i})(Ne||(Ne={}));var Ve;(function(n){function t(r,e,o){var s={title:r},u=!0;return typeof e==\"string\"?(u=!1,s.kind=e):D.is(e)?s.command=e:s.edit=e,u&&o!==void 0&&(s.kind=o),s}n.create=t;function i(r){var e=r;return e&&a.string(e.title)&&(e.diagnostics===void 0||a.typedArray(e.diagnostics,ne.is))&&(e.kind===void 0||a.string(e.kind))&&(e.edit!==void 0||e.command!==void 0)&&(e.command===void 0||D.is(e.command))&&(e.isPreferred===void 0||a.boolean(e.isPreferred))&&(e.edit===void 0||de.is(e.edit))}n.is=i})(Ve||(Ve={}));var ze;(function(n){function t(r,e){var o={range:r};return a.defined(e)&&(o.data=e),o}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.range)&&(a.undefined(e.command)||D.is(e.command))}n.is=i})(ze||(ze={}));var Xe;(function(n){function t(r,e){return{tabSize:r,insertSpaces:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.uinteger(e.tabSize)&&a.boolean(e.insertSpaces)}n.is=i})(Xe||(Xe={}));var Be;(function(n){function t(r,e,o){return{range:r,target:e,data:o}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.range)&&(a.undefined(e.target)||a.string(e.target))}n.is=i})(Be||(Be={}));var $e;(function(n){function t(r,e){return{range:r,parent:e}}n.create=t;function i(r){var e=r;return e!==void 0&&v.is(e.range)&&(e.parent===void 0||n.is(e.parent))}n.is=i})($e||($e={}));var qe;(function(n){function t(o,s,u,l){return new pn(o,s,u,l)}n.create=t;function i(o){var s=o;return!!(a.defined(s)&&a.string(s.uri)&&(a.undefined(s.languageId)||a.string(s.languageId))&&a.uinteger(s.lineCount)&&a.func(s.getText)&&a.func(s.positionAt)&&a.func(s.offsetAt))}n.is=i;function r(o,s){for(var u=o.getText(),l=e(s,function(w,G){var fe=w.range.start.line-G.range.start.line;return fe===0?w.range.start.character-G.range.start.character:fe}),f=u.length,g=l.length-1;g>=0;g--){var m=l[g],k=o.offsetAt(m.range.start),c=o.offsetAt(m.range.end);if(c<=f)u=u.substring(0,k)+m.newText+u.substring(c,u.length);else throw new Error(\"Overlapping edit\");f=k}return u}n.applyEdits=r;function e(o,s){if(o.length<=1)return o;var u=o.length/2|0,l=o.slice(0,u),f=o.slice(u);e(l,s),e(f,s);for(var g=0,m=0,k=0;g<l.length&&m<f.length;){var c=s(l[g],f[m]);c<=0?o[k++]=l[g++]:o[k++]=f[m++]}for(;g<l.length;)o[k++]=l[g++];for(;m<f.length;)o[k++]=f[m++];return o}})(qe||(qe={}));var pn=function(){function n(t,i,r,e){this._uri=t,this._languageId=i,this._version=r,this._content=e,this._lineOffsets=void 0}return Object.defineProperty(n.prototype,\"uri\",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,\"languageId\",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,\"version\",{get:function(){return this._version},enumerable:!1,configurable:!0}),n.prototype.getText=function(t){if(t){var i=this.offsetAt(t.start),r=this.offsetAt(t.end);return this._content.substring(i,r)}return this._content},n.prototype.update=function(t,i){this._content=t.text,this._version=i,this._lineOffsets=void 0},n.prototype.getLineOffsets=function(){if(this._lineOffsets===void 0){for(var t=[],i=this._content,r=!0,e=0;e<i.length;e++){r&&(t.push(e),r=!1);var o=i.charAt(e);r=o===\"\\r\"||o===`\n`,o===\"\\r\"&&e+1<i.length&&i.charAt(e+1)===`\n`&&e++}r&&i.length>0&&t.push(i.length),this._lineOffsets=t}return this._lineOffsets},n.prototype.positionAt=function(t){t=Math.max(Math.min(t,this._content.length),0);var i=this.getLineOffsets(),r=0,e=i.length;if(e===0)return x.create(0,t);for(;r<e;){var o=Math.floor((r+e)/2);i[o]>t?e=o:r=o+1}var s=r-1;return x.create(s,t-i[s])},n.prototype.offsetAt=function(t){var i=this.getLineOffsets();if(t.line>=i.length)return this._content.length;if(t.line<0)return 0;var r=i[t.line],e=t.line+1<i.length?i[t.line+1]:this._content.length;return Math.max(Math.min(r+t.character,e),r)},Object.defineProperty(n.prototype,\"lineCount\",{get:function(){return this.getLineOffsets().length},enumerable:!1,configurable:!0}),n}(),a;(function(n){var t=Object.prototype.toString;function i(c){return typeof c<\"u\"}n.defined=i;function r(c){return typeof c>\"u\"}n.undefined=r;function e(c){return c===!0||c===!1}n.boolean=e;function o(c){return t.call(c)===\"[object String]\"}n.string=o;function s(c){return t.call(c)===\"[object Number]\"}n.number=s;function u(c,w,G){return t.call(c)===\"[object Number]\"&&w<=c&&c<=G}n.numberRange=u;function l(c){return t.call(c)===\"[object Number]\"&&-2147483648<=c&&c<=2147483647}n.integer=l;function f(c){return t.call(c)===\"[object Number]\"&&0<=c&&c<=2147483647}n.uinteger=f;function g(c){return t.call(c)===\"[object Function]\"}n.func=g;function m(c){return c!==null&&typeof c==\"object\"}n.objectLiteral=m;function k(c,w){return Array.isArray(c)&&c.every(w)}n.typedArray=k})(a||(a={}));var K=class{constructor(t,i,r){this._languageId=t;this._worker=i;this._disposables=[];this._listener=Object.create(null);let e=s=>{let u=s.getLanguageId();if(u!==this._languageId)return;let l;this._listener[s.uri.toString()]=s.onDidChangeContent(()=>{window.clearTimeout(l),l=window.setTimeout(()=>this._doValidate(s.uri,u),500)}),this._doValidate(s.uri,u)},o=s=>{d.editor.setModelMarkers(s,this._languageId,[]);let u=s.uri.toString(),l=this._listener[u];l&&(l.dispose(),delete this._listener[u])};this._disposables.push(d.editor.onDidCreateModel(e)),this._disposables.push(d.editor.onWillDisposeModel(o)),this._disposables.push(d.editor.onDidChangeModelLanguage(s=>{o(s.model),e(s.model)})),this._disposables.push(r(s=>{d.editor.getModels().forEach(u=>{u.getLanguageId()===this._languageId&&(o(u),e(u))})})),this._disposables.push({dispose:()=>{d.editor.getModels().forEach(o);for(let s in this._listener)this._listener[s].dispose()}}),d.editor.getModels().forEach(e)}dispose(){this._disposables.forEach(t=>t&&t.dispose()),this._disposables.length=0}_doValidate(t,i){this._worker(t).then(r=>r.doValidation(t.toString())).then(r=>{let e=r.map(s=>vn(t,s)),o=d.editor.getModel(t);o&&o.getLanguageId()===i&&d.editor.setModelMarkers(o,i,e)}).then(void 0,r=>{console.error(r)})}};function mn(n){switch(n){case b.Error:return d.MarkerSeverity.Error;case b.Warning:return d.MarkerSeverity.Warning;case b.Information:return d.MarkerSeverity.Info;case b.Hint:return d.MarkerSeverity.Hint;default:return d.MarkerSeverity.Info}}function vn(n,t){let i=typeof t.code==\"number\"?String(t.code):t.code;return{severity:mn(t.severity),startLineNumber:t.range.start.line+1,startColumn:t.range.start.character+1,endLineNumber:t.range.end.line+1,endColumn:t.range.end.character+1,message:t.message,code:i,source:t.source}}var H=class{constructor(t,i){this._worker=t;this._triggerCharacters=i}get triggerCharacters(){return this._triggerCharacters}provideCompletionItems(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.doComplete(o.toString(),_(i))).then(s=>{if(!s)return;let u=t.getWordUntilPosition(i),l=new d.Range(i.lineNumber,u.startColumn,i.lineNumber,u.endColumn),f=s.items.map(g=>{let m={label:g.label,insertText:g.insertText||g.label,sortText:g.sortText,filterText:g.filterText,documentation:g.documentation,detail:g.detail,command:xn(g.command),range:l,kind:Tn(g.kind)};return g.textEdit&&(yn(g.textEdit)?m.range={insert:T(g.textEdit.insert),replace:T(g.textEdit.replace)}:m.range=T(g.textEdit.range),m.insertText=g.textEdit.newText),g.additionalTextEdits&&(m.additionalTextEdits=g.additionalTextEdits.map(W)),g.insertTextFormat===ie.Snippet&&(m.insertTextRules=d.languages.CompletionItemInsertTextRule.InsertAsSnippet),m});return{isIncomplete:s.isIncomplete,suggestions:f}})}};function _(n){if(n)return{character:n.column-1,line:n.lineNumber-1}}function ge(n){if(n)return{start:{line:n.startLineNumber-1,character:n.startColumn-1},end:{line:n.endLineNumber-1,character:n.endColumn-1}}}function T(n){if(n)return new d.Range(n.start.line+1,n.start.character+1,n.end.line+1,n.end.character+1)}function yn(n){return typeof n.insert<\"u\"&&typeof n.replace<\"u\"}function Tn(n){let t=d.languages.CompletionItemKind;switch(n){case p.Text:return t.Text;case p.Method:return t.Method;case p.Function:return t.Function;case p.Constructor:return t.Constructor;case p.Field:return t.Field;case p.Variable:return t.Variable;case p.Class:return t.Class;case p.Interface:return t.Interface;case p.Module:return t.Module;case p.Property:return t.Property;case p.Unit:return t.Unit;case p.Value:return t.Value;case p.Enum:return t.Enum;case p.Keyword:return t.Keyword;case p.Snippet:return t.Snippet;case p.Color:return t.Color;case p.File:return t.File;case p.Reference:return t.Reference}return t.Property}function W(n){if(n)return{range:T(n.range),text:n.newText}}function xn(n){return n&&n.command===\"editor.action.triggerSuggest\"?{id:n.command,title:n.title,arguments:n.arguments}:void 0}var U=class{constructor(t){this._worker=t}provideHover(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.doHover(e.toString(),_(i))).then(o=>{if(o)return{range:T(o.range),contents:In(o.contents)}})}};function kn(n){return n&&typeof n==\"object\"&&typeof n.kind==\"string\"}function Qe(n){return typeof n==\"string\"?{value:n}:kn(n)?n.kind===\"plaintext\"?{value:n.value.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}:{value:n.value}:{value:\"```\"+n.language+`\n`+n.value+\"\\n```\\n\"}}function In(n){if(n)return Array.isArray(n)?n.map(Qe):[Qe(n)]}var j=class{constructor(t){this._worker=t}provideDocumentHighlights(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.findDocumentHighlights(e.toString(),_(i))).then(o=>{if(o)return o.map(s=>({range:T(s.range),kind:Cn(s.kind)}))})}};function Cn(n){switch(n){case P.Read:return d.languages.DocumentHighlightKind.Read;case P.Write:return d.languages.DocumentHighlightKind.Write;case P.Text:return d.languages.DocumentHighlightKind.Text}return d.languages.DocumentHighlightKind.Text}var O=class{constructor(t){this._worker=t}provideDefinition(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.findDefinition(e.toString(),_(i))).then(o=>{if(o)return[Ge(o)]})}};function Ge(n){return{uri:d.Uri.parse(n.uri),range:T(n.range)}}var N=class{constructor(t){this._worker=t}provideReferences(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.findReferences(o.toString(),_(i))).then(s=>{if(s)return s.map(Ge)})}},V=class{constructor(t){this._worker=t}provideRenameEdits(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.doRename(o.toString(),_(i),r)).then(s=>_n(s))}};function _n(n){if(!n||!n.changes)return;let t=[];for(let i in n.changes){let r=d.Uri.parse(i);for(let e of n.changes[i])t.push({resource:r,versionId:void 0,textEdit:{range:T(e.range),text:e.newText}})}return{edits:t}}var z=class{constructor(t){this._worker=t}provideDocumentSymbols(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentSymbols(r.toString())).then(e=>{if(e)return e.map(o=>bn(o)?Je(o):{name:o.name,detail:\"\",containerName:o.containerName,kind:Ye(o.kind),range:T(o.location.range),selectionRange:T(o.location.range),tags:[]})})}};function bn(n){return\"children\"in n}function Je(n){return{name:n.name,detail:n.detail??\"\",kind:Ye(n.kind),range:T(n.range),selectionRange:T(n.selectionRange),tags:n.tags??[],children:(n.children??[]).map(t=>Je(t))}}function Ye(n){let t=d.languages.SymbolKind;switch(n){case h.File:return t.File;case h.Module:return t.Module;case h.Namespace:return t.Namespace;case h.Package:return t.Package;case h.Class:return t.Class;case h.Method:return t.Method;case h.Property:return t.Property;case h.Field:return t.Field;case h.Constructor:return t.Constructor;case h.Enum:return t.Enum;case h.Interface:return t.Interface;case h.Function:return t.Function;case h.Variable:return t.Variable;case h.Constant:return t.Constant;case h.String:return t.String;case h.Number:return t.Number;case h.Boolean:return t.Boolean;case h.Array:return t.Array}return t.Function}var le=class{constructor(t){this._worker=t}provideLinks(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentLinks(r.toString())).then(e=>{if(e)return{links:e.map(o=>({range:T(o.range),url:o.target}))}})}},X=class{constructor(t){this._worker=t}provideDocumentFormattingEdits(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.format(e.toString(),null,Ze(i)).then(s=>{if(!(!s||s.length===0))return s.map(W)}))}},B=class{constructor(t){this._worker=t;this.canFormatMultipleRanges=!1}provideDocumentRangeFormattingEdits(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.format(o.toString(),ge(i),Ze(r)).then(u=>{if(!(!u||u.length===0))return u.map(W)}))}};function Ze(n){return{tabSize:n.tabSize,insertSpaces:n.insertSpaces}}var $=class{constructor(t){this._worker=t}provideDocumentColors(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentColors(r.toString())).then(e=>{if(e)return e.map(o=>({color:o.color,range:T(o.range)}))})}provideColorPresentations(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getColorPresentations(e.toString(),i.color,ge(i.range))).then(o=>{if(o)return o.map(s=>{let u={label:s.label};return s.textEdit&&(u.textEdit=W(s.textEdit)),s.additionalTextEdits&&(u.additionalTextEdits=s.additionalTextEdits.map(W)),u})})}},q=class{constructor(t){this._worker=t}provideFoldingRanges(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getFoldingRanges(e.toString(),i)).then(o=>{if(o)return o.map(s=>{let u={start:s.startLine+1,end:s.endLine+1};return typeof s.kind<\"u\"&&(u.kind=wn(s.kind)),u})})}};function wn(n){switch(n){case S.Comment:return d.languages.FoldingRangeKind.Comment;case S.Imports:return d.languages.FoldingRangeKind.Imports;case S.Region:return d.languages.FoldingRangeKind.Region}}var Q=class{constructor(t){this._worker=t}provideSelectionRanges(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getSelectionRanges(e.toString(),i.map(_))).then(o=>{if(o)return o.map(s=>{let u=[];for(;s;)u.push({range:T(s.range)}),s=s.parent;return u})})}};function Rn(n){let t=[],i=[],r=new E(n);t.push(r);let e=(...s)=>r.getLanguageServiceWorker(...s);function o(){let{languageId:s,modeConfiguration:u}=n;nn(i),u.completionItems&&i.push(d.languages.registerCompletionItemProvider(s,new H(e,[\"/\",\"-\",\":\"]))),u.hovers&&i.push(d.languages.registerHoverProvider(s,new U(e))),u.documentHighlights&&i.push(d.languages.registerDocumentHighlightProvider(s,new j(e))),u.definitions&&i.push(d.languages.registerDefinitionProvider(s,new O(e))),u.references&&i.push(d.languages.registerReferenceProvider(s,new N(e))),u.documentSymbols&&i.push(d.languages.registerDocumentSymbolProvider(s,new z(e))),u.rename&&i.push(d.languages.registerRenameProvider(s,new V(e))),u.colors&&i.push(d.languages.registerColorProvider(s,new $(e))),u.foldingRanges&&i.push(d.languages.registerFoldingRangeProvider(s,new q(e))),u.diagnostics&&i.push(new K(s,e,n.onDidChange)),u.selectionRanges&&i.push(d.languages.registerSelectionRangeProvider(s,new Q(e))),u.documentFormattingEdits&&i.push(d.languages.registerDocumentFormattingEditProvider(s,new X(e))),u.documentRangeFormattingEdits&&i.push(d.languages.registerDocumentRangeFormattingEditProvider(s,new B(e)))}return o(),t.push(en(i)),en(t)}function en(n){return{dispose:()=>nn(n)}}function nn(n){for(;n.length;)n.pop().dispose()}return ln(Sn);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/css/cssWorker.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/css/cssWorker\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var $n=Object.defineProperty;var ds=Object.getOwnPropertyDescriptor;var hs=Object.getOwnPropertyNames;var ps=Object.prototype.hasOwnProperty;var us=(n,e)=>{for(var t in e)$n(n,t,{get:e[t],enumerable:!0})},ms=(n,e,t,r)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let i of hs(e))!ps.call(n,i)&&i!==t&&$n(n,i,{get:()=>e[i],enumerable:!(r=ds(e,i))||r.enumerable});return n};var fs=n=>ms($n({},\"__esModule\",{value:!0}),n);var sl={};us(sl,{CSSWorker:()=>Vn,create:()=>ol});var d;(function(n){n[n.Ident=0]=\"Ident\",n[n.AtKeyword=1]=\"AtKeyword\",n[n.String=2]=\"String\",n[n.BadString=3]=\"BadString\",n[n.UnquotedString=4]=\"UnquotedString\",n[n.Hash=5]=\"Hash\",n[n.Num=6]=\"Num\",n[n.Percentage=7]=\"Percentage\",n[n.Dimension=8]=\"Dimension\",n[n.UnicodeRange=9]=\"UnicodeRange\",n[n.CDO=10]=\"CDO\",n[n.CDC=11]=\"CDC\",n[n.Colon=12]=\"Colon\",n[n.SemiColon=13]=\"SemiColon\",n[n.CurlyL=14]=\"CurlyL\",n[n.CurlyR=15]=\"CurlyR\",n[n.ParenthesisL=16]=\"ParenthesisL\",n[n.ParenthesisR=17]=\"ParenthesisR\",n[n.BracketL=18]=\"BracketL\",n[n.BracketR=19]=\"BracketR\",n[n.Whitespace=20]=\"Whitespace\",n[n.Includes=21]=\"Includes\",n[n.Dashmatch=22]=\"Dashmatch\",n[n.SubstringOperator=23]=\"SubstringOperator\",n[n.PrefixOperator=24]=\"PrefixOperator\",n[n.SuffixOperator=25]=\"SuffixOperator\",n[n.Delim=26]=\"Delim\",n[n.EMS=27]=\"EMS\",n[n.EXS=28]=\"EXS\",n[n.Length=29]=\"Length\",n[n.Angle=30]=\"Angle\",n[n.Time=31]=\"Time\",n[n.Freq=32]=\"Freq\",n[n.Exclamation=33]=\"Exclamation\",n[n.Resolution=34]=\"Resolution\",n[n.Comma=35]=\"Comma\",n[n.Charset=36]=\"Charset\",n[n.EscapedJavaScript=37]=\"EscapedJavaScript\",n[n.BadEscapedJavaScript=38]=\"BadEscapedJavaScript\",n[n.Comment=39]=\"Comment\",n[n.SingleLineComment=40]=\"SingleLineComment\",n[n.EOF=41]=\"EOF\",n[n.CustomToken=42]=\"CustomToken\"})(d||(d={}));var Kr=function(){function n(e){this.source=e,this.len=e.length,this.position=0}return n.prototype.substring=function(e,t){return t===void 0&&(t=this.position),this.source.substring(e,t)},n.prototype.eos=function(){return this.len<=this.position},n.prototype.pos=function(){return this.position},n.prototype.goBackTo=function(e){this.position=e},n.prototype.goBack=function(e){this.position-=e},n.prototype.advance=function(e){this.position+=e},n.prototype.nextChar=function(){return this.source.charCodeAt(this.position++)||0},n.prototype.peekChar=function(e){return e===void 0&&(e=0),this.source.charCodeAt(this.position+e)||0},n.prototype.lookbackChar=function(e){return e===void 0&&(e=0),this.source.charCodeAt(this.position-e)||0},n.prototype.advanceIfChar=function(e){return e===this.source.charCodeAt(this.position)?(this.position++,!0):!1},n.prototype.advanceIfChars=function(e){if(this.position+e.length>this.source.length)return!1;for(var t=0;t<e.length;t++)if(this.source.charCodeAt(this.position+t)!==e[t])return!1;return this.advance(t),!0},n.prototype.advanceWhileChar=function(e){for(var t=this.position;this.position<this.len&&e(this.source.charCodeAt(this.position));)this.position++;return this.position-t},n}();var tn=97,Gr=102,Hr=122;var nn=65,Jr=70,Xr=90,St=48,kt=57,gs=126,bs=94,Ct=61,vs=124,Ye=45,Yr=95,ys=37,qn=42,ri=40,ii=41,ws=60,xs=62,Ss=64,ks=35,Cs=36,Kn=92,Qr=47,st=10,at=13,_t=12,Zr=34,ei=39,Gn=32,Hn=9,_s=59,Fs=58,Es=123,Ds=125,zs=91,Rs=93,Is=44,ti=46,ni=33,Ms=63,Ts=43,_e={};_e[_s]=d.SemiColon;_e[Fs]=d.Colon;_e[Es]=d.CurlyL;_e[Ds]=d.CurlyR;_e[Rs]=d.BracketR;_e[zs]=d.BracketL;_e[ri]=d.ParenthesisL;_e[ii]=d.ParenthesisR;_e[Is]=d.Comma;var X={};X.em=d.EMS;X.ex=d.EXS;X.px=d.Length;X.cm=d.Length;X.mm=d.Length;X.in=d.Length;X.pt=d.Length;X.pc=d.Length;X.deg=d.Angle;X.rad=d.Angle;X.grad=d.Angle;X.ms=d.Time;X.s=d.Time;X.hz=d.Freq;X.khz=d.Freq;X[\"%\"]=d.Percentage;X.fr=d.Percentage;X.dpi=d.Resolution;X.dpcm=d.Resolution;var Fe=function(){function n(){this.stream=new Kr(\"\"),this.ignoreComment=!0,this.ignoreWhitespace=!0,this.inURL=!1}return n.prototype.setSource=function(e){this.stream=new Kr(e)},n.prototype.finishToken=function(e,t,r){return{offset:e,len:this.stream.pos()-e,type:t,text:r||this.stream.substring(e)}},n.prototype.substring=function(e,t){return this.stream.substring(e,e+t)},n.prototype.pos=function(){return this.stream.pos()},n.prototype.goBackTo=function(e){this.stream.goBackTo(e)},n.prototype.scanUnquotedString=function(){var e=this.stream.pos(),t=[];return this._unquotedString(t)?this.finishToken(e,d.UnquotedString,t.join(\"\")):null},n.prototype.scan=function(){var e=this.trivia();if(e!==null)return e;var t=this.stream.pos();return this.stream.eos()?this.finishToken(t,d.EOF):this.scanNext(t)},n.prototype.tryScanUnicode=function(){var e=this.stream.pos();if(!this.stream.eos()&&this._unicodeRange())return this.finishToken(e,d.UnicodeRange);this.stream.goBackTo(e)},n.prototype.scanNext=function(e){if(this.stream.advanceIfChars([ws,ni,Ye,Ye]))return this.finishToken(e,d.CDO);if(this.stream.advanceIfChars([Ye,Ye,xs]))return this.finishToken(e,d.CDC);var t=[];if(this.ident(t))return this.finishToken(e,d.Ident,t.join(\"\"));if(this.stream.advanceIfChar(Ss))if(t=[\"@\"],this._name(t)){var r=t.join(\"\");return r===\"@charset\"?this.finishToken(e,d.Charset,r):this.finishToken(e,d.AtKeyword,r)}else return this.finishToken(e,d.Delim);if(this.stream.advanceIfChar(ks))return t=[\"#\"],this._name(t)?this.finishToken(e,d.Hash,t.join(\"\")):this.finishToken(e,d.Delim);if(this.stream.advanceIfChar(ni))return this.finishToken(e,d.Exclamation);if(this._number()){var i=this.stream.pos();if(t=[this.stream.substring(e,i)],this.stream.advanceIfChar(ys))return this.finishToken(e,d.Percentage);if(this.ident(t)){var o=this.stream.substring(i).toLowerCase(),s=X[o];return typeof s<\"u\"?this.finishToken(e,s,t.join(\"\")):this.finishToken(e,d.Dimension,t.join(\"\"))}return this.finishToken(e,d.Num)}t=[];var a=this._string(t);return a!==null?this.finishToken(e,a,t.join(\"\")):(a=_e[this.stream.peekChar()],typeof a<\"u\"?(this.stream.advance(1),this.finishToken(e,a)):this.stream.peekChar(0)===gs&&this.stream.peekChar(1)===Ct?(this.stream.advance(2),this.finishToken(e,d.Includes)):this.stream.peekChar(0)===vs&&this.stream.peekChar(1)===Ct?(this.stream.advance(2),this.finishToken(e,d.Dashmatch)):this.stream.peekChar(0)===qn&&this.stream.peekChar(1)===Ct?(this.stream.advance(2),this.finishToken(e,d.SubstringOperator)):this.stream.peekChar(0)===bs&&this.stream.peekChar(1)===Ct?(this.stream.advance(2),this.finishToken(e,d.PrefixOperator)):this.stream.peekChar(0)===Cs&&this.stream.peekChar(1)===Ct?(this.stream.advance(2),this.finishToken(e,d.SuffixOperator)):(this.stream.nextChar(),this.finishToken(e,d.Delim)))},n.prototype.trivia=function(){for(;;){var e=this.stream.pos();if(this._whitespace()){if(!this.ignoreWhitespace)return this.finishToken(e,d.Whitespace)}else if(this.comment()){if(!this.ignoreComment)return this.finishToken(e,d.Comment)}else return null}},n.prototype.comment=function(){if(this.stream.advanceIfChars([Qr,qn])){var e=!1,t=!1;return this.stream.advanceWhileChar(function(r){return t&&r===Qr?(e=!0,!1):(t=r===qn,!0)}),e&&this.stream.advance(1),!0}return!1},n.prototype._number=function(){var e=0,t;return this.stream.peekChar()===ti&&(e=1),t=this.stream.peekChar(e),t>=St&&t<=kt?(this.stream.advance(e+1),this.stream.advanceWhileChar(function(r){return r>=St&&r<=kt||e===0&&r===ti}),!0):!1},n.prototype._newline=function(e){var t=this.stream.peekChar();switch(t){case at:case _t:case st:return this.stream.advance(1),e.push(String.fromCharCode(t)),t===at&&this.stream.advanceIfChar(st)&&e.push(`\n`),!0}return!1},n.prototype._escape=function(e,t){var r=this.stream.peekChar();if(r===Kn){this.stream.advance(1),r=this.stream.peekChar();for(var i=0;i<6&&(r>=St&&r<=kt||r>=tn&&r<=Gr||r>=nn&&r<=Jr);)this.stream.advance(1),r=this.stream.peekChar(),i++;if(i>0){try{var o=parseInt(this.stream.substring(this.stream.pos()-i),16);o&&e.push(String.fromCharCode(o))}catch{}return r===Gn||r===Hn?this.stream.advance(1):this._newline([]),!0}if(r!==at&&r!==_t&&r!==st)return this.stream.advance(1),e.push(String.fromCharCode(r)),!0;if(t)return this._newline(e)}return!1},n.prototype._stringChar=function(e,t){var r=this.stream.peekChar();return r!==0&&r!==e&&r!==Kn&&r!==at&&r!==_t&&r!==st?(this.stream.advance(1),t.push(String.fromCharCode(r)),!0):!1},n.prototype._string=function(e){if(this.stream.peekChar()===ei||this.stream.peekChar()===Zr){var t=this.stream.nextChar();for(e.push(String.fromCharCode(t));this._stringChar(t,e)||this._escape(e,!0););return this.stream.peekChar()===t?(this.stream.nextChar(),e.push(String.fromCharCode(t)),d.String):d.BadString}return null},n.prototype._unquotedChar=function(e){var t=this.stream.peekChar();return t!==0&&t!==Kn&&t!==ei&&t!==Zr&&t!==ri&&t!==ii&&t!==Gn&&t!==Hn&&t!==st&&t!==_t&&t!==at?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._unquotedString=function(e){for(var t=!1;this._unquotedChar(e)||this._escape(e);)t=!0;return t},n.prototype._whitespace=function(){var e=this.stream.advanceWhileChar(function(t){return t===Gn||t===Hn||t===st||t===_t||t===at});return e>0},n.prototype._name=function(e){for(var t=!1;this._identChar(e)||this._escape(e);)t=!0;return t},n.prototype.ident=function(e){var t=this.stream.pos(),r=this._minus(e);if(r){if(this._minus(e)||this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}}else if(this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}return this.stream.goBackTo(t),!1},n.prototype._identFirstChar=function(e){var t=this.stream.peekChar();return t===Yr||t>=tn&&t<=Hr||t>=nn&&t<=Xr||t>=128&&t<=65535?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._minus=function(e){var t=this.stream.peekChar();return t===Ye?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._identChar=function(e){var t=this.stream.peekChar();return t===Yr||t===Ye||t>=tn&&t<=Hr||t>=nn&&t<=Xr||t>=St&&t<=kt||t>=128&&t<=65535?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._unicodeRange=function(){if(this.stream.advanceIfChar(Ts)){var e=function(i){return i>=St&&i<=kt||i>=tn&&i<=Gr||i>=nn&&i<=Jr},t=this.stream.advanceWhileChar(e)+this.stream.advanceWhileChar(function(i){return i===Ms});if(t>=1&&t<=6)if(this.stream.advanceIfChar(Ye)){var r=this.stream.advanceWhileChar(e);if(r>=1&&r<=6)return!0}else return!0}return!1},n}();function q(n,e){if(n.length<e.length)return!1;for(var t=0;t<e.length;t++)if(n[t]!==e[t])return!1;return!0}function rn(n,e){var t=n.length-e.length;return t>0?n.lastIndexOf(e)===t:t===0?n===e:!1}function oi(n,e,t){t===void 0&&(t=4);var r=Math.abs(n.length-e.length);if(r>t)return 0;var i=[],o=[],s,a;for(s=0;s<e.length+1;++s)o.push(0);for(s=0;s<n.length+1;++s)i.push(o);for(s=1;s<n.length+1;++s)for(a=1;a<e.length+1;++a)n[s-1]===e[a-1]?i[s][a]=i[s-1][a-1]+1:i[s][a]=Math.max(i[s-1][a],i[s][a-1]);return i[n.length][e.length]-Math.sqrt(r)}function Jn(n,e){return e===void 0&&(e=!0),n?n.length<140?n:n.slice(0,140)+(e?\"\\u2026\":\"\"):\"\"}function si(n,e){var t=e.exec(n);return t&&t[0].length?n.substr(0,n.length-t[0].length):n}function Xn(n,e){for(var t=\"\";e>0;)(e&1)===1&&(t+=n),n+=n,e=e>>>1;return t}var E=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),u;(function(n){n[n.Undefined=0]=\"Undefined\",n[n.Identifier=1]=\"Identifier\",n[n.Stylesheet=2]=\"Stylesheet\",n[n.Ruleset=3]=\"Ruleset\",n[n.Selector=4]=\"Selector\",n[n.SimpleSelector=5]=\"SimpleSelector\",n[n.SelectorInterpolation=6]=\"SelectorInterpolation\",n[n.SelectorCombinator=7]=\"SelectorCombinator\",n[n.SelectorCombinatorParent=8]=\"SelectorCombinatorParent\",n[n.SelectorCombinatorSibling=9]=\"SelectorCombinatorSibling\",n[n.SelectorCombinatorAllSiblings=10]=\"SelectorCombinatorAllSiblings\",n[n.SelectorCombinatorShadowPiercingDescendant=11]=\"SelectorCombinatorShadowPiercingDescendant\",n[n.Page=12]=\"Page\",n[n.PageBoxMarginBox=13]=\"PageBoxMarginBox\",n[n.ClassSelector=14]=\"ClassSelector\",n[n.IdentifierSelector=15]=\"IdentifierSelector\",n[n.ElementNameSelector=16]=\"ElementNameSelector\",n[n.PseudoSelector=17]=\"PseudoSelector\",n[n.AttributeSelector=18]=\"AttributeSelector\",n[n.Declaration=19]=\"Declaration\",n[n.Declarations=20]=\"Declarations\",n[n.Property=21]=\"Property\",n[n.Expression=22]=\"Expression\",n[n.BinaryExpression=23]=\"BinaryExpression\",n[n.Term=24]=\"Term\",n[n.Operator=25]=\"Operator\",n[n.Value=26]=\"Value\",n[n.StringLiteral=27]=\"StringLiteral\",n[n.URILiteral=28]=\"URILiteral\",n[n.EscapedValue=29]=\"EscapedValue\",n[n.Function=30]=\"Function\",n[n.NumericValue=31]=\"NumericValue\",n[n.HexColorValue=32]=\"HexColorValue\",n[n.RatioValue=33]=\"RatioValue\",n[n.MixinDeclaration=34]=\"MixinDeclaration\",n[n.MixinReference=35]=\"MixinReference\",n[n.VariableName=36]=\"VariableName\",n[n.VariableDeclaration=37]=\"VariableDeclaration\",n[n.Prio=38]=\"Prio\",n[n.Interpolation=39]=\"Interpolation\",n[n.NestedProperties=40]=\"NestedProperties\",n[n.ExtendsReference=41]=\"ExtendsReference\",n[n.SelectorPlaceholder=42]=\"SelectorPlaceholder\",n[n.Debug=43]=\"Debug\",n[n.If=44]=\"If\",n[n.Else=45]=\"Else\",n[n.For=46]=\"For\",n[n.Each=47]=\"Each\",n[n.While=48]=\"While\",n[n.MixinContentReference=49]=\"MixinContentReference\",n[n.MixinContentDeclaration=50]=\"MixinContentDeclaration\",n[n.Media=51]=\"Media\",n[n.Keyframe=52]=\"Keyframe\",n[n.FontFace=53]=\"FontFace\",n[n.Import=54]=\"Import\",n[n.Namespace=55]=\"Namespace\",n[n.Invocation=56]=\"Invocation\",n[n.FunctionDeclaration=57]=\"FunctionDeclaration\",n[n.ReturnStatement=58]=\"ReturnStatement\",n[n.MediaQuery=59]=\"MediaQuery\",n[n.MediaCondition=60]=\"MediaCondition\",n[n.MediaFeature=61]=\"MediaFeature\",n[n.FunctionParameter=62]=\"FunctionParameter\",n[n.FunctionArgument=63]=\"FunctionArgument\",n[n.KeyframeSelector=64]=\"KeyframeSelector\",n[n.ViewPort=65]=\"ViewPort\",n[n.Document=66]=\"Document\",n[n.AtApplyRule=67]=\"AtApplyRule\",n[n.CustomPropertyDeclaration=68]=\"CustomPropertyDeclaration\",n[n.CustomPropertySet=69]=\"CustomPropertySet\",n[n.ListEntry=70]=\"ListEntry\",n[n.Supports=71]=\"Supports\",n[n.SupportsCondition=72]=\"SupportsCondition\",n[n.NamespacePrefix=73]=\"NamespacePrefix\",n[n.GridLine=74]=\"GridLine\",n[n.Plugin=75]=\"Plugin\",n[n.UnknownAtRule=76]=\"UnknownAtRule\",n[n.Use=77]=\"Use\",n[n.ModuleConfiguration=78]=\"ModuleConfiguration\",n[n.Forward=79]=\"Forward\",n[n.ForwardVisibility=80]=\"ForwardVisibility\",n[n.Module=81]=\"Module\",n[n.UnicodeRange=82]=\"UnicodeRange\"})(u||(u={}));var A;(function(n){n[n.Mixin=0]=\"Mixin\",n[n.Rule=1]=\"Rule\",n[n.Variable=2]=\"Variable\",n[n.Function=3]=\"Function\",n[n.Keyframe=4]=\"Keyframe\",n[n.Unknown=5]=\"Unknown\",n[n.Module=6]=\"Module\",n[n.Forward=7]=\"Forward\",n[n.ForwardVisibility=8]=\"ForwardVisibility\"})(A||(A={}));function on(n,e){var t=null;return!n||e<n.offset||e>n.end?null:(n.accept(function(r){return r.offset===-1&&r.length===-1?!0:r.offset<=e&&r.end>=e?(t?r.length<=t.length&&(t=r):t=r,!0):!1}),t)}function lt(n,e){for(var t=on(n,e),r=[];t;)r.unshift(t),t=t.parent;return r}function ai(n){var e=n.findParent(u.Declaration),t=e&&e.getValue();return t&&t.encloses(n)?e:null}var F=function(){function n(e,t,r){e===void 0&&(e=-1),t===void 0&&(t=-1),this.parent=null,this.offset=e,this.length=t,r&&(this.nodeType=r)}return Object.defineProperty(n.prototype,\"end\",{get:function(){return this.offset+this.length},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,\"type\",{get:function(){return this.nodeType||u.Undefined},set:function(e){this.nodeType=e},enumerable:!1,configurable:!0}),n.prototype.getTextProvider=function(){for(var e=this;e&&!e.textProvider;)e=e.parent;return e?e.textProvider:function(){return\"unknown\"}},n.prototype.getText=function(){return this.getTextProvider()(this.offset,this.length)},n.prototype.matches=function(e){return this.length===e.length&&this.getTextProvider()(this.offset,this.length)===e},n.prototype.startsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.offset,e.length)===e},n.prototype.endsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.end-e.length,e.length)===e},n.prototype.accept=function(e){if(e(this)&&this.children)for(var t=0,r=this.children;t<r.length;t++){var i=r[t];i.accept(e)}},n.prototype.acceptVisitor=function(e){this.accept(e.visitNode.bind(e))},n.prototype.adoptChild=function(e,t){if(t===void 0&&(t=-1),e.parent&&e.parent.children){var r=e.parent.children.indexOf(e);r>=0&&e.parent.children.splice(r,1)}e.parent=this;var i=this.children;return i||(i=this.children=[]),t!==-1?i.splice(t,0,e):i.push(e),e},n.prototype.attachTo=function(e,t){return t===void 0&&(t=-1),e&&e.adoptChild(this,t),this},n.prototype.collectIssues=function(e){this.issues&&e.push.apply(e,this.issues)},n.prototype.addIssue=function(e){this.issues||(this.issues=[]),this.issues.push(e)},n.prototype.hasIssue=function(e){return Array.isArray(this.issues)&&this.issues.some(function(t){return t.getRule()===e})},n.prototype.isErroneous=function(e){return e===void 0&&(e=!1),this.issues&&this.issues.length>0?!0:e&&Array.isArray(this.children)&&this.children.some(function(t){return t.isErroneous(!0)})},n.prototype.setNode=function(e,t,r){return r===void 0&&(r=-1),t?(t.attachTo(this,r),this[e]=t,!0):!1},n.prototype.addChild=function(e){return e?(this.children||(this.children=[]),e.attachTo(this),this.updateOffsetAndLength(e),!0):!1},n.prototype.updateOffsetAndLength=function(e){(e.offset<this.offset||this.offset===-1)&&(this.offset=e.offset);var t=e.end;(t>this.end||this.length===-1)&&(this.length=t-this.offset)},n.prototype.hasChildren=function(){return!!this.children&&this.children.length>0},n.prototype.getChildren=function(){return this.children?this.children.slice(0):[]},n.prototype.getChild=function(e){return this.children&&e<this.children.length?this.children[e]:null},n.prototype.addChildren=function(e){for(var t=0,r=e;t<r.length;t++){var i=r[t];this.addChild(i)}},n.prototype.findFirstChildBeforeOffset=function(e){if(this.children){for(var t=null,r=this.children.length-1;r>=0;r--)if(t=this.children[r],t.offset<=e)return t}return null},n.prototype.findChildAtOffset=function(e,t){var r=this.findFirstChildBeforeOffset(e);return r&&r.end>=e?t&&r.findChildAtOffset(e,!0)||r:null},n.prototype.encloses=function(e){return this.offset<=e.offset&&this.offset+this.length>=e.offset+e.length},n.prototype.getParent=function(){for(var e=this.parent;e instanceof ee;)e=e.parent;return e},n.prototype.findParent=function(e){for(var t=this;t&&t.type!==e;)t=t.parent;return t},n.prototype.findAParent=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var r=this;r&&!e.some(function(i){return r.type===i});)r=r.parent;return r},n.prototype.setData=function(e,t){this.options||(this.options={}),this.options[e]=t},n.prototype.getData=function(e){return!this.options||!this.options.hasOwnProperty(e)?null:this.options[e]},n}();var ee=function(n){E(e,n);function e(t,r){r===void 0&&(r=-1);var i=n.call(this,-1,-1)||this;return i.attachTo(t,r),i.offset=-1,i.length=-1,i}return e}(F);var li=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.UnicodeRange},enumerable:!1,configurable:!0}),e.prototype.setRangeStart=function(t){return this.setNode(\"rangeStart\",t)},e.prototype.getRangeStart=function(){return this.rangeStart},e.prototype.setRangeEnd=function(t){return this.setNode(\"rangeEnd\",t)},e.prototype.getRangeEnd=function(){return this.rangeEnd},e}(F);var te=function(n){E(e,n);function e(t,r){var i=n.call(this,t,r)||this;return i.isCustomProperty=!1,i}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Identifier},enumerable:!1,configurable:!0}),e.prototype.containsInterpolation=function(){return this.hasChildren()},e}(F);var ci=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Stylesheet},enumerable:!1,configurable:!0}),e}(F);var Ft=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Declarations},enumerable:!1,configurable:!0}),e}(F);var K=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return e.prototype.getDeclarations=function(){return this.declarations},e.prototype.setDeclarations=function(t){return this.setNode(\"declarations\",t)},e}(F);var Te=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Ruleset},enumerable:!1,configurable:!0}),e.prototype.getSelectors=function(){return this.selectors||(this.selectors=new ee(this)),this.selectors},e.prototype.isNested=function(){return!!this.parent&&this.parent.findParent(u.Declarations)!==null},e}(K);var Ee=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Selector},enumerable:!1,configurable:!0}),e}(F);var De=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.SimpleSelector},enumerable:!1,configurable:!0}),e}(F);var cl=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.AtApplyRule},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return this.identifier?this.identifier.getText():\"\"},e}(F);var sn=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return e}(F);var di=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.CustomPropertySet},enumerable:!1,configurable:!0}),e}(K);var ae=function(n){E(e,n);function e(t,r){var i=n.call(this,t,r)||this;return i.property=null,i}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Declaration},enumerable:!1,configurable:!0}),e.prototype.setProperty=function(t){return this.setNode(\"property\",t)},e.prototype.getProperty=function(){return this.property},e.prototype.getFullPropertyName=function(){var t=this.property?this.property.getName():\"unknown\";if(this.parent instanceof Ft&&this.parent.getParent()instanceof Yn){var r=this.parent.getParent().getParent();if(r instanceof e)return r.getFullPropertyName()+t}return t},e.prototype.getNonPrefixedPropertyName=function(){var t=this.getFullPropertyName();if(t&&t.charAt(0)===\"-\"){var r=t.indexOf(\"-\",1);if(r!==-1)return t.substring(r+1)}return t},e.prototype.setValue=function(t){return this.setNode(\"value\",t)},e.prototype.getValue=function(){return this.value},e.prototype.setNestedProperties=function(t){return this.setNode(\"nestedProperties\",t)},e.prototype.getNestedProperties=function(){return this.nestedProperties},e}(sn);var hi=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.CustomPropertyDeclaration},enumerable:!1,configurable:!0}),e.prototype.setPropertySet=function(t){return this.setNode(\"propertySet\",t)},e.prototype.getPropertySet=function(){return this.propertySet},e}(ae);var ct=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Property},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return si(this.getText(),/[_\\+]+$/)},e.prototype.isCustomProperty=function(){return!!this.identifier&&this.identifier.isCustomProperty},e}(F);var Ns=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Invocation},enumerable:!1,configurable:!0}),e.prototype.getArguments=function(){return this.arguments||(this.arguments=new ee(this)),this.arguments},e}(F);var Pe=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Function},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return this.identifier?this.identifier.getText():\"\"},e}(Ns);var Be=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.FunctionParameter},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return this.identifier?this.identifier.getText():\"\"},e.prototype.setDefaultValue=function(t){return this.setNode(\"defaultValue\",t,0)},e.prototype.getDefaultValue=function(){return this.defaultValue},e}(F);var we=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.FunctionArgument},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return this.identifier?this.identifier.getText():\"\"},e.prototype.setValue=function(t){return this.setNode(\"value\",t,0)},e.prototype.getValue=function(){return this.value},e}(F);var pi=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.If},enumerable:!1,configurable:!0}),e.prototype.setExpression=function(t){return this.setNode(\"expression\",t,0)},e.prototype.setElseClause=function(t){return this.setNode(\"elseClause\",t)},e}(K);var ui=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.For},enumerable:!1,configurable:!0}),e.prototype.setVariable=function(t){return this.setNode(\"variable\",t,0)},e}(K);var mi=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Each},enumerable:!1,configurable:!0}),e.prototype.getVariables=function(){return this.variables||(this.variables=new ee(this)),this.variables},e}(K);var fi=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.While},enumerable:!1,configurable:!0}),e}(K);var gi=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Else},enumerable:!1,configurable:!0}),e}(K);var Qe=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.FunctionDeclaration},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return this.identifier?this.identifier.getText():\"\"},e.prototype.getParameters=function(){return this.parameters||(this.parameters=new ee(this)),this.parameters},e}(K);var bi=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.ViewPort},enumerable:!1,configurable:!0}),e}(K);var an=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.FontFace},enumerable:!1,configurable:!0}),e}(K);var Yn=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.NestedProperties},enumerable:!1,configurable:!0}),e}(K);var ln=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Keyframe},enumerable:!1,configurable:!0}),e.prototype.setKeyword=function(t){return this.setNode(\"keyword\",t,0)},e.prototype.getKeyword=function(){return this.keyword},e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return this.identifier?this.identifier.getText():\"\"},e}(K);var Qn=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.KeyframeSelector},enumerable:!1,configurable:!0}),e}(K);var dt=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Import},enumerable:!1,configurable:!0}),e.prototype.setMedialist=function(t){return t?(t.attachTo(this),!0):!1},e}(F);var vi=function(n){E(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Use},enumerable:!1,configurable:!0}),e.prototype.getParameters=function(){return this.parameters||(this.parameters=new ee(this)),this.parameters},e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e}(F);var yi=function(n){E(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.ModuleConfiguration},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return this.identifier?this.identifier.getText():\"\"},e.prototype.setValue=function(t){return this.setNode(\"value\",t,0)},e.prototype.getValue=function(){return this.value},e}(F);var wi=function(n){E(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Forward},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getMembers=function(){return this.members||(this.members=new ee(this)),this.members},e.prototype.getParameters=function(){return this.parameters||(this.parameters=new ee(this)),this.parameters},e}(F);var xi=function(n){E(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.ForwardVisibility},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e}(F);var Si=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Namespace},enumerable:!1,configurable:!0}),e}(F);var cn=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Media},enumerable:!1,configurable:!0}),e}(K);var Et=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Supports},enumerable:!1,configurable:!0}),e}(K);var ki=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Document},enumerable:!1,configurable:!0}),e}(K);var dn=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return e.prototype.getMediums=function(){return this.mediums||(this.mediums=new ee(this)),this.mediums},e}(F);var hn=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.MediaQuery},enumerable:!1,configurable:!0}),e}(F);var Ci=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.MediaCondition},enumerable:!1,configurable:!0}),e}(F);var _i=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.MediaFeature},enumerable:!1,configurable:!0}),e}(F);var Ze=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.SupportsCondition},enumerable:!1,configurable:!0}),e}(F);var Fi=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Page},enumerable:!1,configurable:!0}),e}(K);var Ei=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.PageBoxMarginBox},enumerable:!1,configurable:!0}),e}(K);var pn=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Expression},enumerable:!1,configurable:!0}),e}(F);var ht=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.BinaryExpression},enumerable:!1,configurable:!0}),e.prototype.setLeft=function(t){return this.setNode(\"left\",t)},e.prototype.getLeft=function(){return this.left},e.prototype.setRight=function(t){return this.setNode(\"right\",t)},e.prototype.getRight=function(){return this.right},e.prototype.setOperator=function(t){return this.setNode(\"operator\",t)},e.prototype.getOperator=function(){return this.operator},e}(F);var Di=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Term},enumerable:!1,configurable:!0}),e.prototype.setOperator=function(t){return this.setNode(\"operator\",t)},e.prototype.getOperator=function(){return this.operator},e.prototype.setExpression=function(t){return this.setNode(\"expression\",t)},e.prototype.getExpression=function(){return this.expression},e}(F);var zi=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.AttributeSelector},enumerable:!1,configurable:!0}),e.prototype.setNamespacePrefix=function(t){return this.setNode(\"namespacePrefix\",t)},e.prototype.getNamespacePrefix=function(){return this.namespacePrefix},e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.setOperator=function(t){return this.setNode(\"operator\",t)},e.prototype.getOperator=function(){return this.operator},e.prototype.setValue=function(t){return this.setNode(\"value\",t)},e.prototype.getValue=function(){return this.value},e}(F);var dl=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Operator},enumerable:!1,configurable:!0}),e}(F);var Dt=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.HexColorValue},enumerable:!1,configurable:!0}),e}(F);var Ri=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.RatioValue},enumerable:!1,configurable:!0}),e}(F);var Os=46,Ws=48,Ls=57,zt=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.NumericValue},enumerable:!1,configurable:!0}),e.prototype.getValue=function(){for(var t=this.getText(),r=0,i,o=0,s=t.length;o<s&&(i=t.charCodeAt(o),Ws<=i&&i<=Ls||i===Os);o++)r+=1;return{value:t.substring(0,r),unit:r<t.length?t.substring(r):void 0}},e}(F);var $e=function(n){E(e,n);function e(t,r){var i=n.call(this,t,r)||this;return i.variable=null,i.value=null,i.needsSemicolon=!0,i}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.VariableDeclaration},enumerable:!1,configurable:!0}),e.prototype.setVariable=function(t){return t?(t.attachTo(this),this.variable=t,!0):!1},e.prototype.getVariable=function(){return this.variable},e.prototype.getName=function(){return this.variable?this.variable.getName():\"\"},e.prototype.setValue=function(t){return t?(t.attachTo(this),this.value=t,!0):!1},e.prototype.getValue=function(){return this.value},e}(sn);var Rt=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Interpolation},enumerable:!1,configurable:!0}),e}(F);var pt=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.VariableName},enumerable:!1,configurable:!0}),e.prototype.getName=function(){return this.getText()},e}(F);var qe=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.ExtendsReference},enumerable:!1,configurable:!0}),e.prototype.getSelectors=function(){return this.selectors||(this.selectors=new ee(this)),this.selectors},e}(F);var Ii=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.MixinContentReference},enumerable:!1,configurable:!0}),e.prototype.getArguments=function(){return this.arguments||(this.arguments=new ee(this)),this.arguments},e}(F);var Mi=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.MixinContentReference},enumerable:!1,configurable:!0}),e.prototype.getParameters=function(){return this.parameters||(this.parameters=new ee(this)),this.parameters},e}(K);var et=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.MixinReference},enumerable:!1,configurable:!0}),e.prototype.getNamespaces=function(){return this.namespaces||(this.namespaces=new ee(this)),this.namespaces},e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return this.identifier?this.identifier.getText():\"\"},e.prototype.getArguments=function(){return this.arguments||(this.arguments=new ee(this)),this.arguments},e.prototype.setContent=function(t){return this.setNode(\"content\",t)},e.prototype.getContent=function(){return this.content},e}(F);var Ae=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.MixinDeclaration},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e.prototype.getName=function(){return this.identifier?this.identifier.getText():\"\"},e.prototype.getParameters=function(){return this.parameters||(this.parameters=new ee(this)),this.parameters},e.prototype.setGuard=function(t){return t&&(t.attachTo(this),this.guard=t),!1},e}(K);var un=function(n){E(e,n);function e(t,r){return n.call(this,t,r)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.UnknownAtRule},enumerable:!1,configurable:!0}),e.prototype.setAtRuleName=function(t){this.atRuleName=t},e.prototype.getAtRuleName=function(){return this.atRuleName},e}(K);var Ti=function(n){E(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.ListEntry},enumerable:!1,configurable:!0}),e.prototype.setKey=function(t){return this.setNode(\"key\",t,0)},e.prototype.setValue=function(t){return this.setNode(\"value\",t,1)},e}(F);var Pi=function(n){E(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.getConditions=function(){return this.conditions||(this.conditions=new ee(this)),this.conditions},e}(F);var Ai=function(n){E(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.setVariable=function(t){return this.setNode(\"variable\",t)},e}(F);var Zn=function(n){E(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return Object.defineProperty(e.prototype,\"type\",{get:function(){return u.Module},enumerable:!1,configurable:!0}),e.prototype.setIdentifier=function(t){return this.setNode(\"identifier\",t,0)},e.prototype.getIdentifier=function(){return this.identifier},e}(F);var ne;(function(n){n[n.Ignore=1]=\"Ignore\",n[n.Warning=2]=\"Warning\",n[n.Error=4]=\"Error\"})(ne||(ne={}));var mn=function(){function n(e,t,r,i,o,s){o===void 0&&(o=e.offset),s===void 0&&(s=e.length),this.node=e,this.rule=t,this.level=r,this.message=i||t.message,this.offset=o,this.length=s}return n.prototype.getRule=function(){return this.rule},n.prototype.getLevel=function(){return this.level},n.prototype.getOffset=function(){return this.offset},n.prototype.getLength=function(){return this.length},n.prototype.getNode=function(){return this.node},n.prototype.getMessage=function(){return this.message},n}();var Ni=function(){function n(){this.entries=[]}return n.entries=function(e){var t=new n;return e.acceptVisitor(t),t.entries},n.prototype.visitNode=function(e){return e.isErroneous()&&e.collectIssues(this.entries),!0},n}();function Us(n,e){let t;return e.length===0?t=n:t=n.replace(/\\{(\\d+)\\}/g,(r,i)=>{let o=i[0];return typeof e[o]<\"u\"?e[o]:r}),t}function js(n,e,...t){return Us(e,t)}function H(n){return js}var U=H(),j=function(){function n(e,t){this.id=e,this.message=t}return n}();var f={NumberExpected:new j(\"css-numberexpected\",U(\"expected.number\",\"number expected\")),ConditionExpected:new j(\"css-conditionexpected\",U(\"expected.condt\",\"condition expected\")),RuleOrSelectorExpected:new j(\"css-ruleorselectorexpected\",U(\"expected.ruleorselector\",\"at-rule or selector expected\")),DotExpected:new j(\"css-dotexpected\",U(\"expected.dot\",\"dot expected\")),ColonExpected:new j(\"css-colonexpected\",U(\"expected.colon\",\"colon expected\")),SemiColonExpected:new j(\"css-semicolonexpected\",U(\"expected.semicolon\",\"semi-colon expected\")),TermExpected:new j(\"css-termexpected\",U(\"expected.term\",\"term expected\")),ExpressionExpected:new j(\"css-expressionexpected\",U(\"expected.expression\",\"expression expected\")),OperatorExpected:new j(\"css-operatorexpected\",U(\"expected.operator\",\"operator expected\")),IdentifierExpected:new j(\"css-identifierexpected\",U(\"expected.ident\",\"identifier expected\")),PercentageExpected:new j(\"css-percentageexpected\",U(\"expected.percentage\",\"percentage expected\")),URIOrStringExpected:new j(\"css-uriorstringexpected\",U(\"expected.uriorstring\",\"uri or string expected\")),URIExpected:new j(\"css-uriexpected\",U(\"expected.uri\",\"URI expected\")),VariableNameExpected:new j(\"css-varnameexpected\",U(\"expected.varname\",\"variable name expected\")),VariableValueExpected:new j(\"css-varvalueexpected\",U(\"expected.varvalue\",\"variable value expected\")),PropertyValueExpected:new j(\"css-propertyvalueexpected\",U(\"expected.propvalue\",\"property value expected\")),LeftCurlyExpected:new j(\"css-lcurlyexpected\",U(\"expected.lcurly\",\"{ expected\")),RightCurlyExpected:new j(\"css-rcurlyexpected\",U(\"expected.rcurly\",\"} expected\")),LeftSquareBracketExpected:new j(\"css-rbracketexpected\",U(\"expected.lsquare\",\"[ expected\")),RightSquareBracketExpected:new j(\"css-lbracketexpected\",U(\"expected.rsquare\",\"] expected\")),LeftParenthesisExpected:new j(\"css-lparentexpected\",U(\"expected.lparen\",\"( expected\")),RightParenthesisExpected:new j(\"css-rparentexpected\",U(\"expected.rparent\",\") expected\")),CommaExpected:new j(\"css-commaexpected\",U(\"expected.comma\",\"comma expected\")),PageDirectiveOrDeclarationExpected:new j(\"css-pagedirordeclexpected\",U(\"expected.pagedirordecl\",\"page directive or declaraton expected\")),UnknownAtRule:new j(\"css-unknownatrule\",U(\"unknown.atrule\",\"at-rule unknown\")),UnknownKeyword:new j(\"css-unknownkeyword\",U(\"unknown.keyword\",\"unknown keyword\")),SelectorExpected:new j(\"css-selectorexpected\",U(\"expected.selector\",\"selector expected\")),StringLiteralExpected:new j(\"css-stringliteralexpected\",U(\"expected.stringliteral\",\"string literal expected\")),WhitespaceExpected:new j(\"css-whitespaceexpected\",U(\"expected.whitespace\",\"whitespace expected\")),MediaQueryExpected:new j(\"css-mediaqueryexpected\",U(\"expected.mediaquery\",\"media query expected\")),IdentifierOrWildcardExpected:new j(\"css-idorwildcardexpected\",U(\"expected.idorwildcard\",\"identifier or wildcard expected\")),WildcardExpected:new j(\"css-wildcardexpected\",U(\"expected.wildcard\",\"wildcard expected\")),IdentifierOrVariableExpected:new j(\"css-idorvarexpected\",U(\"expected.idorvar\",\"identifier or variable expected\"))};var Oi;(function(n){n.MIN_VALUE=-2147483648,n.MAX_VALUE=2147483647})(Oi||(Oi={}));var gn;(function(n){n.MIN_VALUE=0,n.MAX_VALUE=2147483647})(gn||(gn={}));var Q;(function(n){function e(r,i){return r===Number.MAX_VALUE&&(r=gn.MAX_VALUE),i===Number.MAX_VALUE&&(i=gn.MAX_VALUE),{line:r,character:i}}n.create=e;function t(r){var i=r;return v.objectLiteral(i)&&v.uinteger(i.line)&&v.uinteger(i.character)}n.is=t})(Q||(Q={}));var W;(function(n){function e(r,i,o,s){if(v.uinteger(r)&&v.uinteger(i)&&v.uinteger(o)&&v.uinteger(s))return{start:Q.create(r,i),end:Q.create(o,s)};if(Q.is(r)&&Q.is(i))return{start:r,end:i};throw new Error(\"Range#create called with invalid arguments[\"+r+\", \"+i+\", \"+o+\", \"+s+\"]\")}n.create=e;function t(r){var i=r;return v.objectLiteral(i)&&Q.is(i.start)&&Q.is(i.end)}n.is=t})(W||(W={}));var tt;(function(n){function e(r,i){return{uri:r,range:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&W.is(i.range)&&(v.string(i.uri)||v.undefined(i.uri))}n.is=t})(tt||(tt={}));var Wi;(function(n){function e(r,i,o,s){return{targetUri:r,targetRange:i,targetSelectionRange:o,originSelectionRange:s}}n.create=e;function t(r){var i=r;return v.defined(i)&&W.is(i.targetRange)&&v.string(i.targetUri)&&(W.is(i.targetSelectionRange)||v.undefined(i.targetSelectionRange))&&(W.is(i.originSelectionRange)||v.undefined(i.originSelectionRange))}n.is=t})(Wi||(Wi={}));var bn;(function(n){function e(r,i,o,s){return{red:r,green:i,blue:o,alpha:s}}n.create=e;function t(r){var i=r;return v.numberRange(i.red,0,1)&&v.numberRange(i.green,0,1)&&v.numberRange(i.blue,0,1)&&v.numberRange(i.alpha,0,1)}n.is=t})(bn||(bn={}));var er;(function(n){function e(r,i){return{range:r,color:i}}n.create=e;function t(r){var i=r;return W.is(i.range)&&bn.is(i.color)}n.is=t})(er||(er={}));var tr;(function(n){function e(r,i,o){return{label:r,textEdit:i,additionalTextEdits:o}}n.create=e;function t(r){var i=r;return v.string(i.label)&&(v.undefined(i.textEdit)||T.is(i))&&(v.undefined(i.additionalTextEdits)||v.typedArray(i.additionalTextEdits,T.is))}n.is=t})(tr||(tr={}));var nr;(function(n){n.Comment=\"comment\",n.Imports=\"imports\",n.Region=\"region\"})(nr||(nr={}));var rr;(function(n){function e(r,i,o,s,a){var l={startLine:r,endLine:i};return v.defined(o)&&(l.startCharacter=o),v.defined(s)&&(l.endCharacter=s),v.defined(a)&&(l.kind=a),l}n.create=e;function t(r){var i=r;return v.uinteger(i.startLine)&&v.uinteger(i.startLine)&&(v.undefined(i.startCharacter)||v.uinteger(i.startCharacter))&&(v.undefined(i.endCharacter)||v.uinteger(i.endCharacter))&&(v.undefined(i.kind)||v.string(i.kind))}n.is=t})(rr||(rr={}));var ir;(function(n){function e(r,i){return{location:r,message:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&tt.is(i.location)&&v.string(i.message)}n.is=t})(ir||(ir={}));var mt;(function(n){n.Error=1,n.Warning=2,n.Information=3,n.Hint=4})(mt||(mt={}));var Li;(function(n){n.Unnecessary=1,n.Deprecated=2})(Li||(Li={}));var Ui;(function(n){function e(t){var r=t;return r!=null&&v.string(r.href)}n.is=e})(Ui||(Ui={}));var It;(function(n){function e(r,i,o,s,a,l){var c={range:r,message:i};return v.defined(o)&&(c.severity=o),v.defined(s)&&(c.code=s),v.defined(a)&&(c.source=a),v.defined(l)&&(c.relatedInformation=l),c}n.create=e;function t(r){var i,o=r;return v.defined(o)&&W.is(o.range)&&v.string(o.message)&&(v.number(o.severity)||v.undefined(o.severity))&&(v.integer(o.code)||v.string(o.code)||v.undefined(o.code))&&(v.undefined(o.codeDescription)||v.string((i=o.codeDescription)===null||i===void 0?void 0:i.href))&&(v.string(o.source)||v.undefined(o.source))&&(v.undefined(o.relatedInformation)||v.typedArray(o.relatedInformation,ir.is))}n.is=t})(It||(It={}));var Ge;(function(n){function e(r,i){for(var o=[],s=2;s<arguments.length;s++)o[s-2]=arguments[s];var a={title:r,command:i};return v.defined(o)&&o.length>0&&(a.arguments=o),a}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.title)&&v.string(i.command)}n.is=t})(Ge||(Ge={}));var T;(function(n){function e(o,s){return{range:o,newText:s}}n.replace=e;function t(o,s){return{range:{start:o,end:o},newText:s}}n.insert=t;function r(o){return{range:o,newText:\"\"}}n.del=r;function i(o){var s=o;return v.objectLiteral(s)&&v.string(s.newText)&&W.is(s.range)}n.is=i})(T||(T={}));var ut;(function(n){function e(r,i,o){var s={label:r};return i!==void 0&&(s.needsConfirmation=i),o!==void 0&&(s.description=o),s}n.create=e;function t(r){var i=r;return i!==void 0&&v.objectLiteral(i)&&v.string(i.label)&&(v.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(v.string(i.description)||i.description===void 0)}n.is=t})(ut||(ut={}));var le;(function(n){function e(t){var r=t;return typeof r==\"string\"}n.is=e})(le||(le={}));var Ke;(function(n){function e(o,s,a){return{range:o,newText:s,annotationId:a}}n.replace=e;function t(o,s,a){return{range:{start:o,end:o},newText:s,annotationId:a}}n.insert=t;function r(o,s){return{range:o,newText:\"\",annotationId:s}}n.del=r;function i(o){var s=o;return T.is(s)&&(ut.is(s.annotationId)||le.is(s.annotationId))}n.is=i})(Ke||(Ke={}));var nt;(function(n){function e(r,i){return{textDocument:r,edits:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&yn.is(i.textDocument)&&Array.isArray(i.edits)}n.is=t})(nt||(nt={}));var Mt;(function(n){function e(r,i,o){var s={kind:\"create\",uri:r};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),o!==void 0&&(s.annotationId=o),s}n.create=e;function t(r){var i=r;return i&&i.kind===\"create\"&&v.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||v.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||v.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||le.is(i.annotationId))}n.is=t})(Mt||(Mt={}));var Tt;(function(n){function e(r,i,o,s){var a={kind:\"rename\",oldUri:r,newUri:i};return o!==void 0&&(o.overwrite!==void 0||o.ignoreIfExists!==void 0)&&(a.options=o),s!==void 0&&(a.annotationId=s),a}n.create=e;function t(r){var i=r;return i&&i.kind===\"rename\"&&v.string(i.oldUri)&&v.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||v.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||v.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||le.is(i.annotationId))}n.is=t})(Tt||(Tt={}));var Pt;(function(n){function e(r,i,o){var s={kind:\"delete\",uri:r};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),o!==void 0&&(s.annotationId=o),s}n.create=e;function t(r){var i=r;return i&&i.kind===\"delete\"&&v.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||v.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||v.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||le.is(i.annotationId))}n.is=t})(Pt||(Pt={}));var vn;(function(n){function e(t){var r=t;return r&&(r.changes!==void 0||r.documentChanges!==void 0)&&(r.documentChanges===void 0||r.documentChanges.every(function(i){return v.string(i.kind)?Mt.is(i)||Tt.is(i)||Pt.is(i):nt.is(i)}))}n.is=e})(vn||(vn={}));var fn=function(){function n(e,t){this.edits=e,this.changeAnnotations=t}return n.prototype.insert=function(e,t,r){var i,o;if(r===void 0?i=T.insert(e,t):le.is(r)?(o=r,i=Ke.insert(e,t,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),i=Ke.insert(e,t,o)),this.edits.push(i),o!==void 0)return o},n.prototype.replace=function(e,t,r){var i,o;if(r===void 0?i=T.replace(e,t):le.is(r)?(o=r,i=Ke.replace(e,t,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),i=Ke.replace(e,t,o)),this.edits.push(i),o!==void 0)return o},n.prototype.delete=function(e,t){var r,i;if(t===void 0?r=T.del(e):le.is(t)?(i=t,r=Ke.del(e,t)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(t),r=Ke.del(e,i)),this.edits.push(r),i!==void 0)return i},n.prototype.add=function(e){this.edits.push(e)},n.prototype.all=function(){return this.edits},n.prototype.clear=function(){this.edits.splice(0,this.edits.length)},n.prototype.assertChangeAnnotations=function(e){if(e===void 0)throw new Error(\"Text edit change is not configured to manage change annotations.\")},n}(),ji=function(){function n(e){this._annotations=e===void 0?Object.create(null):e,this._counter=0,this._size=0}return n.prototype.all=function(){return this._annotations},Object.defineProperty(n.prototype,\"size\",{get:function(){return this._size},enumerable:!1,configurable:!0}),n.prototype.manage=function(e,t){var r;if(le.is(e)?r=e:(r=this.nextId(),t=e),this._annotations[r]!==void 0)throw new Error(\"Id \"+r+\" is already in use.\");if(t===void 0)throw new Error(\"No annotation provided for id \"+r);return this._annotations[r]=t,this._size++,r},n.prototype.nextId=function(){return this._counter++,this._counter.toString()},n}(),pl=function(){function n(e){var t=this;this._textEditChanges=Object.create(null),e!==void 0?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new ji(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach(function(r){if(nt.is(r)){var i=new fn(r.edits,t._changeAnnotations);t._textEditChanges[r.textDocument.uri]=i}})):e.changes&&Object.keys(e.changes).forEach(function(r){var i=new fn(e.changes[r]);t._textEditChanges[r]=i})):this._workspaceEdit={}}return Object.defineProperty(n.prototype,\"edit\",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),n.prototype.getTextEditChange=function(e){if(yn.is(e)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var t={uri:e.uri,version:e.version},r=this._textEditChanges[t.uri];if(!r){var i=[],o={textDocument:t,edits:i};this._workspaceEdit.documentChanges.push(o),r=new fn(i,this._changeAnnotations),this._textEditChanges[t.uri]=r}return r}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error(\"Workspace edit is not configured for normal text edit changes.\");var r=this._textEditChanges[e];if(!r){var i=[];this._workspaceEdit.changes[e]=i,r=new fn(i),this._textEditChanges[e]=r}return r}},n.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new ji,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},n.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},n.prototype.createFile=function(e,t,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var i;ut.is(t)||le.is(t)?i=t:r=t;var o,s;if(i===void 0?o=Mt.create(e,r):(s=le.is(i)?i:this._changeAnnotations.manage(i),o=Mt.create(e,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n.prototype.renameFile=function(e,t,r,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var o;ut.is(r)||le.is(r)?o=r:i=r;var s,a;if(o===void 0?s=Tt.create(e,t,i):(a=le.is(o)?o:this._changeAnnotations.manage(o),s=Tt.create(e,t,i,a)),this._workspaceEdit.documentChanges.push(s),a!==void 0)return a},n.prototype.deleteFile=function(e,t,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var i;ut.is(t)||le.is(t)?i=t:r=t;var o,s;if(i===void 0?o=Pt.create(e,r):(s=le.is(i)?i:this._changeAnnotations.manage(i),o=Pt.create(e,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n}();var Vi;(function(n){function e(r){return{uri:r}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)}n.is=t})(Vi||(Vi={}));var At;(function(n){function e(r,i){return{uri:r,version:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)&&v.integer(i.version)}n.is=t})(At||(At={}));var yn;(function(n){function e(r,i){return{uri:r,version:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)&&(i.version===null||v.integer(i.version))}n.is=t})(yn||(yn={}));var Bi;(function(n){function e(r,i,o,s){return{uri:r,languageId:i,version:o,text:s}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)&&v.string(i.languageId)&&v.integer(i.version)&&v.string(i.text)}n.is=t})(Bi||(Bi={}));var ce;(function(n){n.PlainText=\"plaintext\",n.Markdown=\"markdown\"})(ce||(ce={}));(function(n){function e(t){var r=t;return r===n.PlainText||r===n.Markdown}n.is=e})(ce||(ce={}));var wn;(function(n){function e(t){var r=t;return v.objectLiteral(t)&&ce.is(r.kind)&&v.string(r.value)}n.is=e})(wn||(wn={}));var R;(function(n){n.Text=1,n.Method=2,n.Function=3,n.Constructor=4,n.Field=5,n.Variable=6,n.Class=7,n.Interface=8,n.Module=9,n.Property=10,n.Unit=11,n.Value=12,n.Enum=13,n.Keyword=14,n.Snippet=15,n.Color=16,n.File=17,n.Reference=18,n.Folder=19,n.EnumMember=20,n.Constant=21,n.Struct=22,n.Event=23,n.Operator=24,n.TypeParameter=25})(R||(R={}));var re;(function(n){n.PlainText=1,n.Snippet=2})(re||(re={}));var Ne;(function(n){n.Deprecated=1})(Ne||(Ne={}));var $i;(function(n){function e(r,i,o){return{newText:r,insert:i,replace:o}}n.create=e;function t(r){var i=r;return i&&v.string(i.newText)&&W.is(i.insert)&&W.is(i.replace)}n.is=t})($i||($i={}));var qi;(function(n){n.asIs=1,n.adjustIndentation=2})(qi||(qi={}));var or;(function(n){function e(t){return{label:t}}n.create=e})(or||(or={}));var sr;(function(n){function e(t,r){return{items:t||[],isIncomplete:!!r}}n.create=e})(sr||(sr={}));var Nt;(function(n){function e(r){return r.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}n.fromPlainText=e;function t(r){var i=r;return v.string(i)||v.objectLiteral(i)&&v.string(i.language)&&v.string(i.value)}n.is=t})(Nt||(Nt={}));var ar;(function(n){function e(t){var r=t;return!!r&&v.objectLiteral(r)&&(wn.is(r.contents)||Nt.is(r.contents)||v.typedArray(r.contents,Nt.is))&&(t.range===void 0||W.is(t.range))}n.is=e})(ar||(ar={}));var Ki;(function(n){function e(t,r){return r?{label:t,documentation:r}:{label:t}}n.create=e})(Ki||(Ki={}));var Gi;(function(n){function e(t,r){for(var i=[],o=2;o<arguments.length;o++)i[o-2]=arguments[o];var s={label:t};return v.defined(r)&&(s.documentation=r),v.defined(i)?s.parameters=i:s.parameters=[],s}n.create=e})(Gi||(Gi={}));var He;(function(n){n.Text=1,n.Read=2,n.Write=3})(He||(He={}));var lr;(function(n){function e(t,r){var i={range:t};return v.number(r)&&(i.kind=r),i}n.create=e})(lr||(lr={}));var Oe;(function(n){n.File=1,n.Module=2,n.Namespace=3,n.Package=4,n.Class=5,n.Method=6,n.Property=7,n.Field=8,n.Constructor=9,n.Enum=10,n.Interface=11,n.Function=12,n.Variable=13,n.Constant=14,n.String=15,n.Number=16,n.Boolean=17,n.Array=18,n.Object=19,n.Key=20,n.Null=21,n.EnumMember=22,n.Struct=23,n.Event=24,n.Operator=25,n.TypeParameter=26})(Oe||(Oe={}));var Hi;(function(n){n.Deprecated=1})(Hi||(Hi={}));var cr;(function(n){function e(t,r,i,o,s){var a={name:t,kind:r,location:{uri:o,range:i}};return s&&(a.containerName=s),a}n.create=e})(cr||(cr={}));var dr;(function(n){function e(r,i,o,s,a,l){var c={name:r,detail:i,kind:o,range:s,selectionRange:a};return l!==void 0&&(c.children=l),c}n.create=e;function t(r){var i=r;return i&&v.string(i.name)&&v.number(i.kind)&&W.is(i.range)&&W.is(i.selectionRange)&&(i.detail===void 0||v.string(i.detail))&&(i.deprecated===void 0||v.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}n.is=t})(dr||(dr={}));var Ot;(function(n){n.Empty=\"\",n.QuickFix=\"quickfix\",n.Refactor=\"refactor\",n.RefactorExtract=\"refactor.extract\",n.RefactorInline=\"refactor.inline\",n.RefactorRewrite=\"refactor.rewrite\",n.Source=\"source\",n.SourceOrganizeImports=\"source.organizeImports\",n.SourceFixAll=\"source.fixAll\"})(Ot||(Ot={}));var hr;(function(n){function e(r,i){var o={diagnostics:r};return i!=null&&(o.only=i),o}n.create=e;function t(r){var i=r;return v.defined(i)&&v.typedArray(i.diagnostics,It.is)&&(i.only===void 0||v.typedArray(i.only,v.string))}n.is=t})(hr||(hr={}));var Wt;(function(n){function e(r,i,o){var s={title:r},a=!0;return typeof i==\"string\"?(a=!1,s.kind=i):Ge.is(i)?s.command=i:s.edit=i,a&&o!==void 0&&(s.kind=o),s}n.create=e;function t(r){var i=r;return i&&v.string(i.title)&&(i.diagnostics===void 0||v.typedArray(i.diagnostics,It.is))&&(i.kind===void 0||v.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||Ge.is(i.command))&&(i.isPreferred===void 0||v.boolean(i.isPreferred))&&(i.edit===void 0||vn.is(i.edit))}n.is=t})(Wt||(Wt={}));var Ji;(function(n){function e(r,i){var o={range:r};return v.defined(i)&&(o.data=i),o}n.create=e;function t(r){var i=r;return v.defined(i)&&W.is(i.range)&&(v.undefined(i.command)||Ge.is(i.command))}n.is=t})(Ji||(Ji={}));var Xi;(function(n){function e(r,i){return{tabSize:r,insertSpaces:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.uinteger(i.tabSize)&&v.boolean(i.insertSpaces)}n.is=t})(Xi||(Xi={}));var pr;(function(n){function e(r,i,o){return{range:r,target:i,data:o}}n.create=e;function t(r){var i=r;return v.defined(i)&&W.is(i.range)&&(v.undefined(i.target)||v.string(i.target))}n.is=t})(pr||(pr={}));var ft;(function(n){function e(r,i){return{range:r,parent:i}}n.create=e;function t(r){var i=r;return i!==void 0&&W.is(i.range)&&(i.parent===void 0||n.is(i.parent))}n.is=t})(ft||(ft={}));var Yi;(function(n){function e(o,s,a,l){return new Vs(o,s,a,l)}n.create=e;function t(o){var s=o;return!!(v.defined(s)&&v.string(s.uri)&&(v.undefined(s.languageId)||v.string(s.languageId))&&v.uinteger(s.lineCount)&&v.func(s.getText)&&v.func(s.positionAt)&&v.func(s.offsetAt))}n.is=t;function r(o,s){for(var a=o.getText(),l=i(s,function(w,x){var y=w.range.start.line-x.range.start.line;return y===0?w.range.start.character-x.range.start.character:y}),c=a.length,h=l.length-1;h>=0;h--){var p=l[h],m=o.offsetAt(p.range.start),g=o.offsetAt(p.range.end);if(g<=c)a=a.substring(0,m)+p.newText+a.substring(g,a.length);else throw new Error(\"Overlapping edit\");c=m}return a}n.applyEdits=r;function i(o,s){if(o.length<=1)return o;var a=o.length/2|0,l=o.slice(0,a),c=o.slice(a);i(l,s),i(c,s);for(var h=0,p=0,m=0;h<l.length&&p<c.length;){var g=s(l[h],c[p]);g<=0?o[m++]=l[h++]:o[m++]=c[p++]}for(;h<l.length;)o[m++]=l[h++];for(;p<c.length;)o[m++]=c[p++];return o}})(Yi||(Yi={}));var Vs=function(){function n(e,t,r,i){this._uri=e,this._languageId=t,this._version=r,this._content=i,this._lineOffsets=void 0}return Object.defineProperty(n.prototype,\"uri\",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,\"languageId\",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,\"version\",{get:function(){return this._version},enumerable:!1,configurable:!0}),n.prototype.getText=function(e){if(e){var t=this.offsetAt(e.start),r=this.offsetAt(e.end);return this._content.substring(t,r)}return this._content},n.prototype.update=function(e,t){this._content=e.text,this._version=t,this._lineOffsets=void 0},n.prototype.getLineOffsets=function(){if(this._lineOffsets===void 0){for(var e=[],t=this._content,r=!0,i=0;i<t.length;i++){r&&(e.push(i),r=!1);var o=t.charAt(i);r=o===\"\\r\"||o===`\n`,o===\"\\r\"&&i+1<t.length&&t.charAt(i+1)===`\n`&&i++}r&&t.length>0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets},n.prototype.positionAt=function(e){e=Math.max(Math.min(e,this._content.length),0);var t=this.getLineOffsets(),r=0,i=t.length;if(i===0)return Q.create(0,e);for(;r<i;){var o=Math.floor((r+i)/2);t[o]>e?i=o:r=o+1}var s=r-1;return Q.create(s,e-t[s])},n.prototype.offsetAt=function(e){var t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;var r=t[e.line],i=e.line+1<t.length?t[e.line+1]:this._content.length;return Math.max(Math.min(r+e.character,i),r)},Object.defineProperty(n.prototype,\"lineCount\",{get:function(){return this.getLineOffsets().length},enumerable:!1,configurable:!0}),n}(),v;(function(n){var e=Object.prototype.toString;function t(g){return typeof g<\"u\"}n.defined=t;function r(g){return typeof g>\"u\"}n.undefined=r;function i(g){return g===!0||g===!1}n.boolean=i;function o(g){return e.call(g)===\"[object String]\"}n.string=o;function s(g){return e.call(g)===\"[object Number]\"}n.number=s;function a(g,w,x){return e.call(g)===\"[object Number]\"&&w<=g&&g<=x}n.numberRange=a;function l(g){return e.call(g)===\"[object Number]\"&&-2147483648<=g&&g<=2147483647}n.integer=l;function c(g){return e.call(g)===\"[object Number]\"&&0<=g&&g<=2147483647}n.uinteger=c;function h(g){return e.call(g)===\"[object Function]\"}n.func=h;function p(g){return g!==null&&typeof g==\"object\"}n.objectLiteral=p;function m(g,w){return Array.isArray(g)&&g.every(w)}n.typedArray=m})(v||(v={}));var xn=class n{constructor(e,t,r,i){this._uri=e,this._languageId=t,this._version=r,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let t=this.offsetAt(e.start),r=this.offsetAt(e.end);return this._content.substring(t,r)}return this._content}update(e,t){for(let r of e)if(n.isIncremental(r)){let i=Zi(r.range),o=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,o)+r.text+this._content.substring(s,this._content.length);let a=Math.max(i.start.line,0),l=Math.max(i.end.line,0),c=this._lineOffsets,h=Qi(r.text,!1,o);if(l-a===h.length)for(let m=0,g=h.length;m<g;m++)c[m+a+1]=h[m];else h.length<1e4?c.splice(a+1,l-a,...h):this._lineOffsets=c=c.slice(0,a+1).concat(h,c.slice(l+1));let p=r.text.length-(s-o);if(p!==0)for(let m=a+1+h.length,g=c.length;m<g;m++)c[m]=c[m]+p}else if(n.isFull(r))this._content=r.text,this._lineOffsets=void 0;else throw new Error(\"Unknown change event received\");this._version=t}getLineOffsets(){return this._lineOffsets===void 0&&(this._lineOffsets=Qi(this._content,!0)),this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let t=this.getLineOffsets(),r=0,i=t.length;if(i===0)return{line:0,character:e};for(;r<i;){let s=Math.floor((r+i)/2);t[s]>e?i=s:r=s+1}let o=r-1;return{line:o,character:e-t[o]}}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;let r=t[e.line],i=e.line+1<t.length?t[e.line+1]:this._content.length;return Math.max(Math.min(r+e.character,i),r)}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let t=e;return t!=null&&typeof t.text==\"string\"&&t.range!==void 0&&(t.rangeLength===void 0||typeof t.rangeLength==\"number\")}static isFull(e){let t=e;return t!=null&&typeof t.text==\"string\"&&t.range===void 0&&t.rangeLength===void 0}},Lt;(function(n){function e(i,o,s,a){return new xn(i,o,s,a)}n.create=e;function t(i,o,s){if(i instanceof xn)return i.update(o,s),i;throw new Error(\"TextDocument.update: document must be created by TextDocument.create\")}n.update=t;function r(i,o){let s=i.getText(),a=ur(o.map(Bs),(h,p)=>{let m=h.range.start.line-p.range.start.line;return m===0?h.range.start.character-p.range.start.character:m}),l=0,c=[];for(let h of a){let p=i.offsetAt(h.range.start);if(p<l)throw new Error(\"Overlapping edit\");p>l&&c.push(s.substring(l,p)),h.newText.length&&c.push(h.newText),l=i.offsetAt(h.range.end)}return c.push(s.substr(l)),c.join(\"\")}n.applyEdits=r})(Lt||(Lt={}));function ur(n,e){if(n.length<=1)return n;let t=n.length/2|0,r=n.slice(0,t),i=n.slice(t);ur(r,e),ur(i,e);let o=0,s=0,a=0;for(;o<r.length&&s<i.length;)e(r[o],i[s])<=0?n[a++]=r[o++]:n[a++]=i[s++];for(;o<r.length;)n[a++]=r[o++];for(;s<i.length;)n[a++]=i[s++];return n}function Qi(n,e,t=0){let r=e?[t]:[];for(let i=0;i<n.length;i++){let o=n.charCodeAt(i);(o===13||o===10)&&(o===13&&i+1<n.length&&n.charCodeAt(i+1)===10&&i++,r.push(t+i+1))}return r}function Zi(n){let e=n.start,t=n.end;return e.line>t.line||e.line===t.line&&e.character>t.character?{start:t,end:e}:n}function Bs(n){let e=Zi(n.range);return e!==n.range?{newText:n.newText,range:e}:n}var eo;(function(n){n.LATEST={textDocument:{completion:{completionItem:{documentationFormat:[ce.Markdown,ce.PlainText]}},hover:{contentFormat:[ce.Markdown,ce.PlainText]}}}})(eo||(eo={}));var rt;(function(n){n[n.Unknown=0]=\"Unknown\",n[n.File=1]=\"File\",n[n.Directory=2]=\"Directory\",n[n.SymbolicLink=64]=\"SymbolicLink\"})(rt||(rt={}));var to={E:\"Edge\",FF:\"Firefox\",S:\"Safari\",C:\"Chrome\",IE:\"IE\",O:\"Opera\"};function no(n){switch(n){case\"experimental\":return`\\u26A0\\uFE0F Property is experimental. Be cautious when using it.\\uFE0F\n\n`;case\"nonstandard\":return`\\u{1F6A8}\\uFE0F Property is nonstandard. Avoid using it.\n\n`;case\"obsolete\":return`\\u{1F6A8}\\uFE0F\\uFE0F\\uFE0F Property is obsolete. Avoid using it.\n\n`;default:return\"\"}}function ze(n,e,t){var r;if(e?r={kind:\"markdown\",value:qs(n,t)}:r={kind:\"plaintext\",value:$s(n,t)},r.value!==\"\")return r}function Sn(n){return n=n.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\"),n.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")}function $s(n,e){if(!n.description||n.description===\"\")return\"\";if(typeof n.description!=\"string\")return n.description.value;var t=\"\";if(e?.documentation!==!1){n.status&&(t+=no(n.status)),t+=n.description;var r=ro(n.browsers);r&&(t+=`\n(`+r+\")\"),\"syntax\"in n&&(t+=`\n\nSyntax: `.concat(n.syntax))}return n.references&&n.references.length>0&&e?.references!==!1&&(t.length>0&&(t+=`\n\n`),t+=n.references.map(function(i){return\"\".concat(i.name,\": \").concat(i.url)}).join(\" | \")),t}function qs(n,e){if(!n.description||n.description===\"\")return\"\";var t=\"\";if(e?.documentation!==!1){n.status&&(t+=no(n.status)),typeof n.description==\"string\"?t+=Sn(n.description):t+=n.description.kind===ce.Markdown?n.description.value:Sn(n.description.value);var r=ro(n.browsers);r&&(t+=`\n\n(`+Sn(r)+\")\"),\"syntax\"in n&&n.syntax&&(t+=`\n\nSyntax: `.concat(Sn(n.syntax)))}return n.references&&n.references.length>0&&e?.references!==!1&&(t.length>0&&(t+=`\n\n`),t+=n.references.map(function(i){return\"[\".concat(i.name,\"](\").concat(i.url,\")\")}).join(\" | \")),t}function ro(n){return n===void 0&&(n=[]),n.length===0?null:n.map(function(e){var t=\"\",r=e.match(/([A-Z]+)(\\d+)?/),i=r[1],o=r[2];return i in to&&(t+=to[i]),o&&(t+=\" \"+o),t}).join(\", \")}var Ut=H(),ao=[{func:\"rgb($red, $green, $blue)\",desc:Ut(\"css.builtin.rgb\",\"Creates a Color from red, green, and blue values.\")},{func:\"rgba($red, $green, $blue, $alpha)\",desc:Ut(\"css.builtin.rgba\",\"Creates a Color from red, green, blue, and alpha values.\")},{func:\"hsl($hue, $saturation, $lightness)\",desc:Ut(\"css.builtin.hsl\",\"Creates a Color from hue, saturation, and lightness values.\")},{func:\"hsla($hue, $saturation, $lightness, $alpha)\",desc:Ut(\"css.builtin.hsla\",\"Creates a Color from hue, saturation, lightness, and alpha values.\")},{func:\"hwb($hue $white $black)\",desc:Ut(\"css.builtin.hwb\",\"Creates a Color from hue, white and black.\")}],jt={aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgrey:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",grey:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgray:\"#d3d3d3\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#ff0000\",rebeccapurple:\"#663399\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\"},mr={currentColor:\"The value of the 'color' property. The computed value of the 'currentColor' keyword is the computed value of the 'color' property. If the 'currentColor' keyword is set on the 'color' property itself, it is treated as 'color:inherit' at parse time.\",transparent:\"Fully transparent. This keyword can be considered a shorthand for rgba(0,0,0,0) which is its computed value.\"};function Je(n,e){var t=n.getText(),r=t.match(/^([-+]?[0-9]*\\.?[0-9]+)(%?)$/);if(r){r[2]&&(e=100);var i=parseFloat(r[1])/e;if(i>=0&&i<=1)return i}throw new Error}function io(n){var e=n.getText(),t=e.match(/^([-+]?[0-9]*\\.?[0-9]+)(deg|rad|grad|turn)?$/);if(t)switch(t[2]){case\"deg\":return parseFloat(e)%360;case\"rad\":return parseFloat(e)*180/Math.PI%360;case\"grad\":return parseFloat(e)*.9%360;case\"turn\":return parseFloat(e)*360%360;default:if(typeof t[2]>\"u\")return parseFloat(e)%360}throw new Error}function lo(n){var e=n.getName();return e?/^(rgb|rgba|hsl|hsla|hwb)$/gi.test(e):!1}var oo=48,Ks=57,Gs=65;var kn=97,Hs=102;function J(n){return n<oo?0:n<=Ks?n-oo:(n<kn&&(n+=kn-Gs),n>=kn&&n<=Hs?n-kn+10:0)}function so(n){if(n[0]!==\"#\")return null;switch(n.length){case 4:return{red:J(n.charCodeAt(1))*17/255,green:J(n.charCodeAt(2))*17/255,blue:J(n.charCodeAt(3))*17/255,alpha:1};case 5:return{red:J(n.charCodeAt(1))*17/255,green:J(n.charCodeAt(2))*17/255,blue:J(n.charCodeAt(3))*17/255,alpha:J(n.charCodeAt(4))*17/255};case 7:return{red:(J(n.charCodeAt(1))*16+J(n.charCodeAt(2)))/255,green:(J(n.charCodeAt(3))*16+J(n.charCodeAt(4)))/255,blue:(J(n.charCodeAt(5))*16+J(n.charCodeAt(6)))/255,alpha:1};case 9:return{red:(J(n.charCodeAt(1))*16+J(n.charCodeAt(2)))/255,green:(J(n.charCodeAt(3))*16+J(n.charCodeAt(4)))/255,blue:(J(n.charCodeAt(5))*16+J(n.charCodeAt(6)))/255,alpha:(J(n.charCodeAt(7))*16+J(n.charCodeAt(8)))/255}}return null}function co(n,e,t,r){if(r===void 0&&(r=1),n=n/60,e===0)return{red:t,green:t,blue:t,alpha:r};var i=function(a,l,c){for(;c<0;)c+=6;for(;c>=6;)c-=6;return c<1?(l-a)*c+a:c<3?l:c<4?(l-a)*(4-c)+a:a},o=t<=.5?t*(e+1):t+e-t*e,s=t*2-o;return{red:i(s,o,n+2),green:i(s,o,n),blue:i(s,o,n-2),alpha:r}}function fr(n){var e=n.red,t=n.green,r=n.blue,i=n.alpha,o=Math.max(e,t,r),s=Math.min(e,t,r),a=0,l=0,c=(s+o)/2,h=o-s;if(h>0){switch(l=Math.min(c<=.5?h/(2*c):h/(2-2*c),1),o){case e:a=(t-r)/h+(t<r?6:0);break;case t:a=(r-e)/h+2;break;case r:a=(e-t)/h+4;break}a*=60,a=Math.round(a)}return{h:a,s:l,l:c,a:i}}function Js(n,e,t,r){if(r===void 0&&(r=1),e+t>=1){var i=e/(e+t);return{red:i,green:i,blue:i,alpha:r}}var o=co(n,1,.5,r),s=o.red;s*=1-e-t,s+=e;var a=o.green;a*=1-e-t,a+=e;var l=o.blue;return l*=1-e-t,l+=e,{red:s,green:a,blue:l,alpha:r}}function ho(n){var e=fr(n),t=Math.min(n.red,n.green,n.blue),r=1-Math.max(n.red,n.green,n.blue);return{h:e.h,w:t,b:r,a:e.a}}function po(n){if(n.type===u.HexColorValue){var e=n.getText();return so(e)}else if(n.type===u.Function){var t=n,r=t.getName(),i=t.getArguments().getChildren();if(i.length===1){var o=i[0].getChildren();if(o.length===1&&o[0].type===u.Expression&&(i=o[0].getChildren(),i.length===3)){var s=i[2];if(s instanceof ht){var a=s.getLeft(),l=s.getRight(),c=s.getOperator();a&&l&&c&&c.matches(\"/\")&&(i=[i[0],i[1],a,l])}}}if(!r||i.length<3||i.length>4)return null;try{var h=i.length===4?Je(i[3],1):1;if(r===\"rgb\"||r===\"rgba\")return{red:Je(i[0],255),green:Je(i[1],255),blue:Je(i[2],255),alpha:h};if(r===\"hsl\"||r===\"hsla\"){var p=io(i[0]),m=Je(i[1],100),g=Je(i[2],100);return co(p,m,g,h)}else if(r===\"hwb\"){var p=io(i[0]),w=Je(i[1],100),x=Je(i[2],100);return Js(p,w,x,h)}}catch{return null}}else if(n.type===u.Identifier){if(n.parent&&n.parent.type!==u.Term)return null;var y=n.parent;if(y&&y.parent&&y.parent.type===u.BinaryExpression){var D=y.parent;if(D.parent&&D.parent.type===u.ListEntry&&D.parent.key===D)return null}var M=n.getText().toLowerCase();if(M===\"none\")return null;var z=jt[M];if(z)return so(z)}return null}var gr={bottom:\"Computes to \\u2018100%\\u2019 for the vertical position if one or two values are given, otherwise specifies the bottom edge as the origin for the next offset.\",center:\"Computes to \\u201850%\\u2019 (\\u2018left 50%\\u2019) for the horizontal position if the horizontal position is not otherwise specified, or \\u201850%\\u2019 (\\u2018top 50%\\u2019) for the vertical position if it is.\",left:\"Computes to \\u20180%\\u2019 for the horizontal position if one or two values are given, otherwise specifies the left edge as the origin for the next offset.\",right:\"Computes to \\u2018100%\\u2019 for the horizontal position if one or two values are given, otherwise specifies the right edge as the origin for the next offset.\",top:\"Computes to \\u20180%\\u2019 for the vertical position if one or two values are given, otherwise specifies the top edge as the origin for the next offset.\"},br={\"no-repeat\":\"Placed once and not repeated in this direction.\",repeat:\"Repeated in this direction as often as needed to cover the background painting area.\",\"repeat-x\":\"Computes to \\u2018repeat no-repeat\\u2019.\",\"repeat-y\":\"Computes to \\u2018no-repeat repeat\\u2019.\",round:\"Repeated as often as will fit within the background positioning area. If it doesn\\u2019t fit a whole number of times, it is rescaled so that it does.\",space:\"Repeated as often as will fit within the background positioning area without being clipped and then the images are spaced out to fill the area.\"},vr={dashed:\"A series of square-ended dashes.\",dotted:\"A series of round dots.\",double:\"Two parallel solid lines with some space between them.\",groove:\"Looks as if it were carved in the canvas.\",hidden:\"Same as \\u2018none\\u2019, but has different behavior in the border conflict resolution rules for border-collapsed tables.\",inset:\"Looks as if the content on the inside of the border is sunken into the canvas.\",none:\"No border. Color and width are ignored.\",outset:\"Looks as if the content on the inside of the border is coming out of the canvas.\",ridge:\"Looks as if it were coming out of the canvas.\",solid:\"A single line segment.\"},uo=[\"medium\",\"thick\",\"thin\"],yr={\"border-box\":\"The background is painted within (clipped to) the border box.\",\"content-box\":\"The background is painted within (clipped to) the content box.\",\"padding-box\":\"The background is painted within (clipped to) the padding box.\"},wr={\"margin-box\":\"Uses the margin box as reference box.\",\"fill-box\":\"Uses the object bounding box as reference box.\",\"stroke-box\":\"Uses the stroke bounding box as reference box.\",\"view-box\":\"Uses the nearest SVG viewport as reference box.\"},xr={initial:\"Represents the value specified as the property\\u2019s initial value.\",inherit:\"Represents the computed value of the property on the element\\u2019s parent.\",unset:\"Acts as either `inherit` or `initial`, depending on whether the property is inherited or not.\"},Sr={\"var()\":\"Evaluates the value of a custom variable.\",\"calc()\":\"Evaluates an mathematical expression. The following operators can be used: + - * /.\"},kr={\"url()\":\"Reference an image file by URL\",\"image()\":\"Provide image fallbacks and annotations.\",\"-webkit-image-set()\":\"Provide multiple resolutions. Remember to use unprefixed image-set() in addition.\",\"image-set()\":\"Provide multiple resolutions of an image and const the UA decide which is most appropriate in a given situation.\",\"-moz-element()\":\"Use an element in the document as an image. Remember to use unprefixed element() in addition.\",\"element()\":\"Use an element in the document as an image.\",\"cross-fade()\":\"Indicates the two images to be combined and how far along in the transition the combination is.\",\"-webkit-gradient()\":\"Deprecated. Use modern linear-gradient() or radial-gradient() instead.\",\"-webkit-linear-gradient()\":\"Linear gradient. Remember to use unprefixed version in addition.\",\"-moz-linear-gradient()\":\"Linear gradient. Remember to use unprefixed version in addition.\",\"-o-linear-gradient()\":\"Linear gradient. Remember to use unprefixed version in addition.\",\"linear-gradient()\":\"A linear gradient is created by specifying a straight gradient line, and then several colors placed along that line.\",\"-webkit-repeating-linear-gradient()\":\"Repeating Linear gradient. Remember to use unprefixed version in addition.\",\"-moz-repeating-linear-gradient()\":\"Repeating Linear gradient. Remember to use unprefixed version in addition.\",\"-o-repeating-linear-gradient()\":\"Repeating Linear gradient. Remember to use unprefixed version in addition.\",\"repeating-linear-gradient()\":\"Same as linear-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop\\u2019s position and the first specified color-stop\\u2019s position.\",\"-webkit-radial-gradient()\":\"Radial gradient. Remember to use unprefixed version in addition.\",\"-moz-radial-gradient()\":\"Radial gradient. Remember to use unprefixed version in addition.\",\"radial-gradient()\":\"Colors emerge from a single point and smoothly spread outward in a circular or elliptical shape.\",\"-webkit-repeating-radial-gradient()\":\"Repeating radial gradient. Remember to use unprefixed version in addition.\",\"-moz-repeating-radial-gradient()\":\"Repeating radial gradient. Remember to use unprefixed version in addition.\",\"repeating-radial-gradient()\":\"Same as radial-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop\\u2019s position and the first specified color-stop\\u2019s position.\"},Cr={ease:\"Equivalent to cubic-bezier(0.25, 0.1, 0.25, 1.0).\",\"ease-in\":\"Equivalent to cubic-bezier(0.42, 0, 1.0, 1.0).\",\"ease-in-out\":\"Equivalent to cubic-bezier(0.42, 0, 0.58, 1.0).\",\"ease-out\":\"Equivalent to cubic-bezier(0, 0, 0.58, 1.0).\",linear:\"Equivalent to cubic-bezier(0.0, 0.0, 1.0, 1.0).\",\"step-end\":\"Equivalent to steps(1, end).\",\"step-start\":\"Equivalent to steps(1, start).\",\"steps()\":\"The first parameter specifies the number of intervals in the function. The second parameter, which is optional, is either the value \\u201Cstart\\u201D or \\u201Cend\\u201D.\",\"cubic-bezier()\":\"Specifies a cubic-bezier curve. The four values specify points P1 and P2  of the curve as (x1, y1, x2, y2).\",\"cubic-bezier(0.6, -0.28, 0.735, 0.045)\":\"Ease-in Back. Overshoots.\",\"cubic-bezier(0.68, -0.55, 0.265, 1.55)\":\"Ease-in-out Back. Overshoots.\",\"cubic-bezier(0.175, 0.885, 0.32, 1.275)\":\"Ease-out Back. Overshoots.\",\"cubic-bezier(0.6, 0.04, 0.98, 0.335)\":\"Ease-in Circular. Based on half circle.\",\"cubic-bezier(0.785, 0.135, 0.15, 0.86)\":\"Ease-in-out Circular. Based on half circle.\",\"cubic-bezier(0.075, 0.82, 0.165, 1)\":\"Ease-out Circular. Based on half circle.\",\"cubic-bezier(0.55, 0.055, 0.675, 0.19)\":\"Ease-in Cubic. Based on power of three.\",\"cubic-bezier(0.645, 0.045, 0.355, 1)\":\"Ease-in-out Cubic. Based on power of three.\",\"cubic-bezier(0.215, 0.610, 0.355, 1)\":\"Ease-out Cubic. Based on power of three.\",\"cubic-bezier(0.95, 0.05, 0.795, 0.035)\":\"Ease-in Exponential. Based on two to the power ten.\",\"cubic-bezier(1, 0, 0, 1)\":\"Ease-in-out Exponential. Based on two to the power ten.\",\"cubic-bezier(0.19, 1, 0.22, 1)\":\"Ease-out Exponential. Based on two to the power ten.\",\"cubic-bezier(0.47, 0, 0.745, 0.715)\":\"Ease-in Sine.\",\"cubic-bezier(0.445, 0.05, 0.55, 0.95)\":\"Ease-in-out Sine.\",\"cubic-bezier(0.39, 0.575, 0.565, 1)\":\"Ease-out Sine.\",\"cubic-bezier(0.55, 0.085, 0.68, 0.53)\":\"Ease-in Quadratic. Based on power of two.\",\"cubic-bezier(0.455, 0.03, 0.515, 0.955)\":\"Ease-in-out Quadratic. Based on power of two.\",\"cubic-bezier(0.25, 0.46, 0.45, 0.94)\":\"Ease-out Quadratic. Based on power of two.\",\"cubic-bezier(0.895, 0.03, 0.685, 0.22)\":\"Ease-in Quartic. Based on power of four.\",\"cubic-bezier(0.77, 0, 0.175, 1)\":\"Ease-in-out Quartic. Based on power of four.\",\"cubic-bezier(0.165, 0.84, 0.44, 1)\":\"Ease-out Quartic. Based on power of four.\",\"cubic-bezier(0.755, 0.05, 0.855, 0.06)\":\"Ease-in Quintic. Based on power of five.\",\"cubic-bezier(0.86, 0, 0.07, 1)\":\"Ease-in-out Quintic. Based on power of five.\",\"cubic-bezier(0.23, 1, 0.320, 1)\":\"Ease-out Quintic. Based on power of five.\"},_r={\"circle()\":\"Defines a circle.\",\"ellipse()\":\"Defines an ellipse.\",\"inset()\":\"Defines an inset rectangle.\",\"polygon()\":\"Defines a polygon.\"},Cn={length:[\"em\",\"rem\",\"ex\",\"px\",\"cm\",\"mm\",\"in\",\"pt\",\"pc\",\"ch\",\"vw\",\"vh\",\"vmin\",\"vmax\"],angle:[\"deg\",\"rad\",\"grad\",\"turn\"],time:[\"ms\",\"s\"],frequency:[\"Hz\",\"kHz\"],resolution:[\"dpi\",\"dpcm\",\"dppx\"],percentage:[\"%\",\"fr\"]},mo=[\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"picture\",\"pre\",\"progress\",\"q\",\"rb\",\"rp\",\"rt\",\"rtc\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"title\",\"tr\",\"track\",\"u\",\"ul\",\"const\",\"video\",\"wbr\"],fo=[\"circle\",\"clipPath\",\"cursor\",\"defs\",\"desc\",\"ellipse\",\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feDropShadow\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\",\"filter\",\"foreignObject\",\"g\",\"hatch\",\"hatchpath\",\"image\",\"line\",\"linearGradient\",\"marker\",\"mask\",\"mesh\",\"meshpatch\",\"meshrow\",\"metadata\",\"mpath\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialGradient\",\"rect\",\"set\",\"solidcolor\",\"stop\",\"svg\",\"switch\",\"symbol\",\"text\",\"textPath\",\"tspan\",\"use\",\"view\"],go=[\"@bottom-center\",\"@bottom-left\",\"@bottom-left-corner\",\"@bottom-right\",\"@bottom-right-corner\",\"@left-bottom\",\"@left-middle\",\"@left-top\",\"@right-bottom\",\"@right-middle\",\"@right-top\",\"@top-center\",\"@top-left\",\"@top-left-corner\",\"@top-right\",\"@top-right-corner\"];function Vt(n){return Object.keys(n).map(function(e){return n[e]})}function he(n){return typeof n<\"u\"}var bo=function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,o;r<i;r++)(o||!(r in e))&&(o||(o=Array.prototype.slice.call(e,0,r)),o[r]=e[r]);return n.concat(o||Array.prototype.slice.call(e))},gt=function(){function n(e){e===void 0&&(e=new Fe),this.keyframeRegex=/^@(\\-(webkit|ms|moz|o)\\-)?keyframes$/i,this.scanner=e,this.token={type:d.EOF,offset:-1,len:0,text:\"\"},this.prevToken=void 0}return n.prototype.peekIdent=function(e){return d.Ident===this.token.type&&e.length===this.token.text.length&&e===this.token.text.toLowerCase()},n.prototype.peekKeyword=function(e){return d.AtKeyword===this.token.type&&e.length===this.token.text.length&&e===this.token.text.toLowerCase()},n.prototype.peekDelim=function(e){return d.Delim===this.token.type&&e===this.token.text},n.prototype.peek=function(e){return e===this.token.type},n.prototype.peekOne=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e.indexOf(this.token.type)!==-1},n.prototype.peekRegExp=function(e,t){return e!==this.token.type?!1:t.test(this.token.text)},n.prototype.hasWhitespace=function(){return!!this.prevToken&&this.prevToken.offset+this.prevToken.len!==this.token.offset},n.prototype.consumeToken=function(){this.prevToken=this.token,this.token=this.scanner.scan()},n.prototype.acceptUnicodeRange=function(){var e=this.scanner.tryScanUnicode();return e?(this.prevToken=e,this.token=this.scanner.scan(),!0):!1},n.prototype.mark=function(){return{prev:this.prevToken,curr:this.token,pos:this.scanner.pos()}},n.prototype.restoreAtMark=function(e){this.prevToken=e.prev,this.token=e.curr,this.scanner.goBackTo(e.pos)},n.prototype.try=function(e){var t=this.mark(),r=e();return r||(this.restoreAtMark(t),null)},n.prototype.acceptOneKeyword=function(e){if(d.AtKeyword===this.token.type)for(var t=0,r=e;t<r.length;t++){var i=r[t];if(i.length===this.token.text.length&&i===this.token.text.toLowerCase())return this.consumeToken(),!0}return!1},n.prototype.accept=function(e){return e===this.token.type?(this.consumeToken(),!0):!1},n.prototype.acceptIdent=function(e){return this.peekIdent(e)?(this.consumeToken(),!0):!1},n.prototype.acceptKeyword=function(e){return this.peekKeyword(e)?(this.consumeToken(),!0):!1},n.prototype.acceptDelim=function(e){return this.peekDelim(e)?(this.consumeToken(),!0):!1},n.prototype.acceptRegexp=function(e){return e.test(this.token.text)?(this.consumeToken(),!0):!1},n.prototype._parseRegexp=function(e){var t=this.createNode(u.Identifier);do;while(this.acceptRegexp(e));return this.finish(t)},n.prototype.acceptUnquotedString=function(){var e=this.scanner.pos();this.scanner.goBackTo(this.token.offset);var t=this.scanner.scanUnquotedString();return t?(this.token=t,this.consumeToken(),!0):(this.scanner.goBackTo(e),!1)},n.prototype.resync=function(e,t){for(;;){if(e&&e.indexOf(this.token.type)!==-1)return this.consumeToken(),!0;if(t&&t.indexOf(this.token.type)!==-1)return!0;if(this.token.type===d.EOF)return!1;this.token=this.scanner.scan()}},n.prototype.createNode=function(e){return new F(this.token.offset,this.token.len,e)},n.prototype.create=function(e){return new e(this.token.offset,this.token.len)},n.prototype.finish=function(e,t,r,i){if(!(e instanceof ee)&&(t&&this.markError(e,t,r,i),this.prevToken)){var o=this.prevToken.offset+this.prevToken.len;e.length=o>e.offset?o-e.offset:0}return e},n.prototype.markError=function(e,t,r,i){this.token!==this.lastErrorToken&&(e.addIssue(new mn(e,t,ne.Error,void 0,this.token.offset,this.token.len)),this.lastErrorToken=this.token),(r||i)&&this.resync(r,i)},n.prototype.parseStylesheet=function(e){var t=e.version,r=e.getText(),i=function(o,s){if(e.version!==t)throw new Error(\"Underlying model has changed, AST is no longer valid\");return r.substr(o,s)};return this.internalParse(r,this._parseStylesheet,i)},n.prototype.internalParse=function(e,t,r){this.scanner.setSource(e),this.token=this.scanner.scan();var i=t.bind(this)();return i&&(r?i.textProvider=r:i.textProvider=function(o,s){return e.substr(o,s)}),i},n.prototype._parseStylesheet=function(){for(var e=this.create(ci);e.addChild(this._parseStylesheetStart()););var t=!1;do{var r=!1;do{r=!1;var i=this._parseStylesheetStatement();for(i&&(e.addChild(i),r=!0,t=!1,!this.peek(d.EOF)&&this._needsSemicolonAfter(i)&&!this.accept(d.SemiColon)&&this.markError(e,f.SemiColonExpected));this.accept(d.SemiColon)||this.accept(d.CDO)||this.accept(d.CDC);)r=!0,t=!1}while(r);if(this.peek(d.EOF))break;t||(this.peek(d.AtKeyword)?this.markError(e,f.UnknownAtRule):this.markError(e,f.RuleOrSelectorExpected),t=!0),this.consumeToken()}while(!this.peek(d.EOF));return this.finish(e)},n.prototype._parseStylesheetStart=function(){return this._parseCharset()},n.prototype._parseStylesheetStatement=function(e){return e===void 0&&(e=!1),this.peek(d.AtKeyword)?this._parseStylesheetAtStatement(e):this._parseRuleset(e)},n.prototype._parseStylesheetAtStatement=function(e){return e===void 0&&(e=!1),this._parseImport()||this._parseMedia(e)||this._parsePage()||this._parseFontFace()||this._parseKeyframe()||this._parseSupports(e)||this._parseViewPort()||this._parseNamespace()||this._parseDocument()||this._parseUnknownAtRule()},n.prototype._tryParseRuleset=function(e){var t=this.mark();if(this._parseSelector(e)){for(;this.accept(d.Comma)&&this._parseSelector(e););if(this.accept(d.CurlyL))return this.restoreAtMark(t),this._parseRuleset(e)}return this.restoreAtMark(t),null},n.prototype._parseRuleset=function(e){e===void 0&&(e=!1);var t=this.create(Te),r=t.getSelectors();if(!r.addChild(this._parseSelector(e)))return null;for(;this.accept(d.Comma);)if(!r.addChild(this._parseSelector(e)))return this.finish(t,f.SelectorExpected);return this._parseBody(t,this._parseRuleSetDeclaration.bind(this))},n.prototype._parseRuleSetDeclarationAtStatement=function(){return this._parseUnknownAtRule()},n.prototype._parseRuleSetDeclaration=function(){return this.peek(d.AtKeyword)?this._parseRuleSetDeclarationAtStatement():this._parseDeclaration()},n.prototype._needsSemicolonAfter=function(e){switch(e.type){case u.Keyframe:case u.ViewPort:case u.Media:case u.Ruleset:case u.Namespace:case u.If:case u.For:case u.Each:case u.While:case u.MixinDeclaration:case u.FunctionDeclaration:case u.MixinContentDeclaration:return!1;case u.ExtendsReference:case u.MixinContentReference:case u.ReturnStatement:case u.MediaQuery:case u.Debug:case u.Import:case u.AtApplyRule:case u.CustomPropertyDeclaration:return!0;case u.VariableDeclaration:return e.needsSemicolon;case u.MixinReference:return!e.getContent();case u.Declaration:return!e.getNestedProperties()}return!1},n.prototype._parseDeclarations=function(e){var t=this.create(Ft);if(!this.accept(d.CurlyL))return null;for(var r=e();t.addChild(r)&&!this.peek(d.CurlyR);){if(this._needsSemicolonAfter(r)&&!this.accept(d.SemiColon))return this.finish(t,f.SemiColonExpected,[d.SemiColon,d.CurlyR]);for(r&&this.prevToken&&this.prevToken.type===d.SemiColon&&(r.semicolonPosition=this.prevToken.offset);this.accept(d.SemiColon););r=e()}return this.accept(d.CurlyR)?this.finish(t):this.finish(t,f.RightCurlyExpected,[d.CurlyR,d.SemiColon])},n.prototype._parseBody=function(e,t){return e.setDeclarations(this._parseDeclarations(t))?this.finish(e):this.finish(e,f.LeftCurlyExpected,[d.CurlyR,d.SemiColon])},n.prototype._parseSelector=function(e){var t=this.create(Ee),r=!1;for(e&&(r=t.addChild(this._parseCombinator()));t.addChild(this._parseSimpleSelector());)r=!0,t.addChild(this._parseCombinator());return r?this.finish(t):null},n.prototype._parseDeclaration=function(e){var t=this._tryParseCustomPropertyDeclaration(e);if(t)return t;var r=this.create(ae);return r.setProperty(this._parseProperty())?this.accept(d.Colon)?(this.prevToken&&(r.colonPosition=this.prevToken.offset),r.setValue(this._parseExpr())?(r.addChild(this._parsePrio()),this.peek(d.SemiColon)&&(r.semicolonPosition=this.token.offset),this.finish(r)):this.finish(r,f.PropertyValueExpected)):this.finish(r,f.ColonExpected,[d.Colon],e||[d.SemiColon]):null},n.prototype._tryParseCustomPropertyDeclaration=function(e){if(!this.peekRegExp(d.Ident,/^--/))return null;var t=this.create(hi);if(!t.setProperty(this._parseProperty()))return null;if(!this.accept(d.Colon))return this.finish(t,f.ColonExpected,[d.Colon]);this.prevToken&&(t.colonPosition=this.prevToken.offset);var r=this.mark();if(this.peek(d.CurlyL)){var i=this.create(di),o=this._parseDeclarations(this._parseRuleSetDeclaration.bind(this));if(i.setDeclarations(o)&&!o.isErroneous(!0)&&(i.addChild(this._parsePrio()),this.peek(d.SemiColon)))return this.finish(i),t.setPropertySet(i),t.semicolonPosition=this.token.offset,this.finish(t);this.restoreAtMark(r)}var s=this._parseExpr();return s&&!s.isErroneous(!0)&&(this._parsePrio(),this.peekOne.apply(this,bo(bo([],e||[],!1),[d.SemiColon,d.EOF],!1)))?(t.setValue(s),this.peek(d.SemiColon)&&(t.semicolonPosition=this.token.offset),this.finish(t)):(this.restoreAtMark(r),t.addChild(this._parseCustomPropertyValue(e)),t.addChild(this._parsePrio()),he(t.colonPosition)&&this.token.offset===t.colonPosition+1?this.finish(t,f.PropertyValueExpected):this.finish(t))},n.prototype._parseCustomPropertyValue=function(e){var t=this;e===void 0&&(e=[d.CurlyR]);var r=this.create(F),i=function(){return s===0&&a===0&&l===0},o=function(){return e.indexOf(t.token.type)!==-1},s=0,a=0,l=0;e:for(;;){switch(this.token.type){case d.SemiColon:if(i())break e;break;case d.Exclamation:if(i())break e;break;case d.CurlyL:s++;break;case d.CurlyR:if(s--,s<0){if(o()&&a===0&&l===0)break e;return this.finish(r,f.LeftCurlyExpected)}break;case d.ParenthesisL:a++;break;case d.ParenthesisR:if(a--,a<0){if(o()&&l===0&&s===0)break e;return this.finish(r,f.LeftParenthesisExpected)}break;case d.BracketL:l++;break;case d.BracketR:if(l--,l<0)return this.finish(r,f.LeftSquareBracketExpected);break;case d.BadString:break e;case d.EOF:var c=f.RightCurlyExpected;return l>0?c=f.RightSquareBracketExpected:a>0&&(c=f.RightParenthesisExpected),this.finish(r,c)}this.consumeToken()}return this.finish(r)},n.prototype._tryToParseDeclaration=function(e){var t=this.mark();return this._parseProperty()&&this.accept(d.Colon)?(this.restoreAtMark(t),this._parseDeclaration(e)):(this.restoreAtMark(t),null)},n.prototype._parseProperty=function(){var e=this.create(ct),t=this.mark();return(this.acceptDelim(\"*\")||this.acceptDelim(\"_\"))&&this.hasWhitespace()?(this.restoreAtMark(t),null):e.setIdentifier(this._parsePropertyIdentifier())?this.finish(e):null},n.prototype._parsePropertyIdentifier=function(){return this._parseIdent()},n.prototype._parseCharset=function(){if(!this.peek(d.Charset))return null;var e=this.create(F);return this.consumeToken(),this.accept(d.String)?this.accept(d.SemiColon)?this.finish(e):this.finish(e,f.SemiColonExpected):this.finish(e,f.IdentifierExpected)},n.prototype._parseImport=function(){if(!this.peekKeyword(\"@import\"))return null;var e=this.create(dt);return this.consumeToken(),!e.addChild(this._parseURILiteral())&&!e.addChild(this._parseStringLiteral())?this.finish(e,f.URIOrStringExpected):(!this.peek(d.SemiColon)&&!this.peek(d.EOF)&&e.setMedialist(this._parseMediaQueryList()),this.finish(e))},n.prototype._parseNamespace=function(){if(!this.peekKeyword(\"@namespace\"))return null;var e=this.create(Si);return this.consumeToken(),!e.addChild(this._parseURILiteral())&&(e.addChild(this._parseIdent()),!e.addChild(this._parseURILiteral())&&!e.addChild(this._parseStringLiteral()))?this.finish(e,f.URIExpected,[d.SemiColon]):this.accept(d.SemiColon)?this.finish(e):this.finish(e,f.SemiColonExpected)},n.prototype._parseFontFace=function(){if(!this.peekKeyword(\"@font-face\"))return null;var e=this.create(an);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._parseViewPort=function(){if(!this.peekKeyword(\"@-ms-viewport\")&&!this.peekKeyword(\"@-o-viewport\")&&!this.peekKeyword(\"@viewport\"))return null;var e=this.create(bi);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._parseKeyframe=function(){if(!this.peekRegExp(d.AtKeyword,this.keyframeRegex))return null;var e=this.create(ln),t=this.create(F);return this.consumeToken(),e.setKeyword(this.finish(t)),t.matches(\"@-ms-keyframes\")&&this.markError(t,f.UnknownKeyword),e.setIdentifier(this._parseKeyframeIdent())?this._parseBody(e,this._parseKeyframeSelector.bind(this)):this.finish(e,f.IdentifierExpected,[d.CurlyR])},n.prototype._parseKeyframeIdent=function(){return this._parseIdent([A.Keyframe])},n.prototype._parseKeyframeSelector=function(){var e=this.create(Qn);if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return null;for(;this.accept(d.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return this.finish(e,f.PercentageExpected);return this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._tryParseKeyframeSelector=function(){var e=this.create(Qn),t=this.mark();if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return null;for(;this.accept(d.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return this.restoreAtMark(t),null;return this.peek(d.CurlyL)?this._parseBody(e,this._parseRuleSetDeclaration.bind(this)):(this.restoreAtMark(t),null)},n.prototype._parseSupports=function(e){if(e===void 0&&(e=!1),!this.peekKeyword(\"@supports\"))return null;var t=this.create(Et);return this.consumeToken(),t.addChild(this._parseSupportsCondition()),this._parseBody(t,this._parseSupportsDeclaration.bind(this,e))},n.prototype._parseSupportsDeclaration=function(e){return e===void 0&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},n.prototype._parseSupportsCondition=function(){var e=this.create(Ze);if(this.acceptIdent(\"not\"))e.addChild(this._parseSupportsConditionInParens());else if(e.addChild(this._parseSupportsConditionInParens()),this.peekRegExp(d.Ident,/^(and|or)$/i))for(var t=this.token.text.toLowerCase();this.acceptIdent(t);)e.addChild(this._parseSupportsConditionInParens());return this.finish(e)},n.prototype._parseSupportsConditionInParens=function(){var e=this.create(Ze);if(this.accept(d.ParenthesisL))return this.prevToken&&(e.lParent=this.prevToken.offset),!e.addChild(this._tryToParseDeclaration([d.ParenthesisR]))&&!this._parseSupportsCondition()?this.finish(e,f.ConditionExpected):this.accept(d.ParenthesisR)?(this.prevToken&&(e.rParent=this.prevToken.offset),this.finish(e)):this.finish(e,f.RightParenthesisExpected,[d.ParenthesisR],[]);if(this.peek(d.Ident)){var t=this.mark();if(this.consumeToken(),!this.hasWhitespace()&&this.accept(d.ParenthesisL)){for(var r=1;this.token.type!==d.EOF&&r!==0;)this.token.type===d.ParenthesisL?r++:this.token.type===d.ParenthesisR&&r--,this.consumeToken();return this.finish(e)}else this.restoreAtMark(t)}return this.finish(e,f.LeftParenthesisExpected,[],[d.ParenthesisL])},n.prototype._parseMediaDeclaration=function(e){return e===void 0&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},n.prototype._parseMedia=function(e){if(e===void 0&&(e=!1),!this.peekKeyword(\"@media\"))return null;var t=this.create(cn);return this.consumeToken(),t.addChild(this._parseMediaQueryList())?this._parseBody(t,this._parseMediaDeclaration.bind(this,e)):this.finish(t,f.MediaQueryExpected)},n.prototype._parseMediaQueryList=function(){var e=this.create(dn);if(!e.addChild(this._parseMediaQuery()))return this.finish(e,f.MediaQueryExpected);for(;this.accept(d.Comma);)if(!e.addChild(this._parseMediaQuery()))return this.finish(e,f.MediaQueryExpected);return this.finish(e)},n.prototype._parseMediaQuery=function(){var e=this.create(hn),t=this.mark();if(this.acceptIdent(\"not\"),this.peek(d.ParenthesisL))this.restoreAtMark(t),e.addChild(this._parseMediaCondition());else{if(this.acceptIdent(\"only\"),!e.addChild(this._parseIdent()))return null;this.acceptIdent(\"and\")&&e.addChild(this._parseMediaCondition())}return this.finish(e)},n.prototype._parseRatio=function(){var e=this.mark(),t=this.create(Ri);return this._parseNumeric()?this.acceptDelim(\"/\")?this._parseNumeric()?this.finish(t):this.finish(t,f.NumberExpected):(this.restoreAtMark(e),null):null},n.prototype._parseMediaCondition=function(){var e=this.create(Ci);this.acceptIdent(\"not\");for(var t=!0;t;){if(!this.accept(d.ParenthesisL))return this.finish(e,f.LeftParenthesisExpected,[],[d.CurlyL]);if(this.peek(d.ParenthesisL)||this.peekIdent(\"not\")?e.addChild(this._parseMediaCondition()):e.addChild(this._parseMediaFeature()),!this.accept(d.ParenthesisR))return this.finish(e,f.RightParenthesisExpected,[],[d.CurlyL]);t=this.acceptIdent(\"and\")||this.acceptIdent(\"or\")}return this.finish(e)},n.prototype._parseMediaFeature=function(){var e=this,t=[d.ParenthesisR],r=this.create(_i),i=function(){return e.acceptDelim(\"<\")||e.acceptDelim(\">\")?(e.hasWhitespace()||e.acceptDelim(\"=\"),!0):!!e.acceptDelim(\"=\")};if(r.addChild(this._parseMediaFeatureName())){if(this.accept(d.Colon)){if(!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t)}else if(i()){if(!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t);if(i()&&!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t)}}else if(r.addChild(this._parseMediaFeatureValue())){if(!i())return this.finish(r,f.OperatorExpected,[],t);if(!r.addChild(this._parseMediaFeatureName()))return this.finish(r,f.IdentifierExpected,[],t);if(i()&&!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t)}else return this.finish(r,f.IdentifierExpected,[],t);return this.finish(r)},n.prototype._parseMediaFeatureName=function(){return this._parseIdent()},n.prototype._parseMediaFeatureValue=function(){return this._parseRatio()||this._parseTermExpression()},n.prototype._parseMedium=function(){var e=this.create(F);return e.addChild(this._parseIdent())?this.finish(e):null},n.prototype._parsePageDeclaration=function(){return this._parsePageMarginBox()||this._parseRuleSetDeclaration()},n.prototype._parsePage=function(){if(!this.peekKeyword(\"@page\"))return null;var e=this.create(Fi);if(this.consumeToken(),e.addChild(this._parsePageSelector())){for(;this.accept(d.Comma);)if(!e.addChild(this._parsePageSelector()))return this.finish(e,f.IdentifierExpected)}return this._parseBody(e,this._parsePageDeclaration.bind(this))},n.prototype._parsePageMarginBox=function(){if(!this.peek(d.AtKeyword))return null;var e=this.create(Ei);return this.acceptOneKeyword(go)||this.markError(e,f.UnknownAtRule,[],[d.CurlyL]),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._parsePageSelector=function(){if(!this.peek(d.Ident)&&!this.peek(d.Colon))return null;var e=this.create(F);return e.addChild(this._parseIdent()),this.accept(d.Colon)&&!e.addChild(this._parseIdent())?this.finish(e,f.IdentifierExpected):this.finish(e)},n.prototype._parseDocument=function(){if(!this.peekKeyword(\"@-moz-document\"))return null;var e=this.create(ki);return this.consumeToken(),this.resync([],[d.CurlyL]),this._parseBody(e,this._parseStylesheetStatement.bind(this))},n.prototype._parseUnknownAtRule=function(){if(!this.peek(d.AtKeyword))return null;var e=this.create(un);e.addChild(this._parseUnknownAtRuleName());var t=function(){return i===0&&o===0&&s===0},r=0,i=0,o=0,s=0;e:for(;;){switch(this.token.type){case d.SemiColon:if(t())break e;break;case d.EOF:return i>0?this.finish(e,f.RightCurlyExpected):s>0?this.finish(e,f.RightSquareBracketExpected):o>0?this.finish(e,f.RightParenthesisExpected):this.finish(e);case d.CurlyL:r++,i++;break;case d.CurlyR:if(i--,r>0&&i===0){if(this.consumeToken(),s>0)return this.finish(e,f.RightSquareBracketExpected);if(o>0)return this.finish(e,f.RightParenthesisExpected);break e}if(i<0){if(o===0&&s===0)break e;return this.finish(e,f.LeftCurlyExpected)}break;case d.ParenthesisL:o++;break;case d.ParenthesisR:if(o--,o<0)return this.finish(e,f.LeftParenthesisExpected);break;case d.BracketL:s++;break;case d.BracketR:if(s--,s<0)return this.finish(e,f.LeftSquareBracketExpected);break}this.consumeToken()}return e},n.prototype._parseUnknownAtRuleName=function(){var e=this.create(F);return this.accept(d.AtKeyword)?this.finish(e):e},n.prototype._parseOperator=function(){if(this.peekDelim(\"/\")||this.peekDelim(\"*\")||this.peekDelim(\"+\")||this.peekDelim(\"-\")||this.peek(d.Dashmatch)||this.peek(d.Includes)||this.peek(d.SubstringOperator)||this.peek(d.PrefixOperator)||this.peek(d.SuffixOperator)||this.peekDelim(\"=\")){var e=this.createNode(u.Operator);return this.consumeToken(),this.finish(e)}else return null},n.prototype._parseUnaryOperator=function(){if(!this.peekDelim(\"+\")&&!this.peekDelim(\"-\"))return null;var e=this.create(F);return this.consumeToken(),this.finish(e)},n.prototype._parseCombinator=function(){if(this.peekDelim(\">\")){var e=this.create(F);this.consumeToken();var t=this.mark();if(!this.hasWhitespace()&&this.acceptDelim(\">\")){if(!this.hasWhitespace()&&this.acceptDelim(\">\"))return e.type=u.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return e.type=u.SelectorCombinatorParent,this.finish(e)}else if(this.peekDelim(\"+\")){var e=this.create(F);return this.consumeToken(),e.type=u.SelectorCombinatorSibling,this.finish(e)}else if(this.peekDelim(\"~\")){var e=this.create(F);return this.consumeToken(),e.type=u.SelectorCombinatorAllSiblings,this.finish(e)}else if(this.peekDelim(\"/\")){var e=this.create(F);this.consumeToken();var t=this.mark();if(!this.hasWhitespace()&&this.acceptIdent(\"deep\")&&!this.hasWhitespace()&&this.acceptDelim(\"/\"))return e.type=u.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return null},n.prototype._parseSimpleSelector=function(){var e=this.create(De),t=0;for(e.addChild(this._parseElementName())&&t++;(t===0||!this.hasWhitespace())&&e.addChild(this._parseSimpleSelectorBody());)t++;return t>0?this.finish(e):null},n.prototype._parseSimpleSelectorBody=function(){return this._parsePseudo()||this._parseHash()||this._parseClass()||this._parseAttrib()},n.prototype._parseSelectorIdent=function(){return this._parseIdent()},n.prototype._parseHash=function(){if(!this.peek(d.Hash)&&!this.peekDelim(\"#\"))return null;var e=this.createNode(u.IdentifierSelector);if(this.acceptDelim(\"#\")){if(this.hasWhitespace()||!e.addChild(this._parseSelectorIdent()))return this.finish(e,f.IdentifierExpected)}else this.consumeToken();return this.finish(e)},n.prototype._parseClass=function(){if(!this.peekDelim(\".\"))return null;var e=this.createNode(u.ClassSelector);return this.consumeToken(),this.hasWhitespace()||!e.addChild(this._parseSelectorIdent())?this.finish(e,f.IdentifierExpected):this.finish(e)},n.prototype._parseElementName=function(){var e=this.mark(),t=this.createNode(u.ElementNameSelector);return t.addChild(this._parseNamespacePrefix()),!t.addChild(this._parseSelectorIdent())&&!this.acceptDelim(\"*\")?(this.restoreAtMark(e),null):this.finish(t)},n.prototype._parseNamespacePrefix=function(){var e=this.mark(),t=this.createNode(u.NamespacePrefix);return!t.addChild(this._parseIdent())&&this.acceptDelim(\"*\"),this.acceptDelim(\"|\")?this.finish(t):(this.restoreAtMark(e),null)},n.prototype._parseAttrib=function(){if(!this.peek(d.BracketL))return null;var e=this.create(zi);return this.consumeToken(),e.setNamespacePrefix(this._parseNamespacePrefix()),e.setIdentifier(this._parseIdent())?(e.setOperator(this._parseOperator())&&(e.setValue(this._parseBinaryExpr()),this.acceptIdent(\"i\"),this.acceptIdent(\"s\")),this.accept(d.BracketR)?this.finish(e):this.finish(e,f.RightSquareBracketExpected)):this.finish(e,f.IdentifierExpected)},n.prototype._parsePseudo=function(){var e=this,t=this._tryParsePseudoIdentifier();if(t){if(!this.hasWhitespace()&&this.accept(d.ParenthesisL)){var r=function(){var i=e.create(F);if(!i.addChild(e._parseSelector(!1)))return null;for(;e.accept(d.Comma)&&i.addChild(e._parseSelector(!1)););return e.peek(d.ParenthesisR)?e.finish(i):null};if(t.addChild(this.try(r)||this._parseBinaryExpr()),!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}return this.finish(t)}return null},n.prototype._tryParsePseudoIdentifier=function(){if(!this.peek(d.Colon))return null;var e=this.mark(),t=this.createNode(u.PseudoSelector);return this.consumeToken(),this.hasWhitespace()?(this.restoreAtMark(e),null):(this.accept(d.Colon),this.hasWhitespace()||!t.addChild(this._parseIdent())?this.finish(t,f.IdentifierExpected):this.finish(t))},n.prototype._tryParsePrio=function(){var e=this.mark(),t=this._parsePrio();return t||(this.restoreAtMark(e),null)},n.prototype._parsePrio=function(){if(!this.peek(d.Exclamation))return null;var e=this.createNode(u.Prio);return this.accept(d.Exclamation)&&this.acceptIdent(\"important\")?this.finish(e):null},n.prototype._parseExpr=function(e){e===void 0&&(e=!1);var t=this.create(pn);if(!t.addChild(this._parseBinaryExpr()))return null;for(;;){if(this.peek(d.Comma)){if(e)return this.finish(t);this.consumeToken()}else if(!this.hasWhitespace())break;if(!t.addChild(this._parseBinaryExpr()))break}return this.finish(t)},n.prototype._parseUnicodeRange=function(){if(!this.peekIdent(\"u\"))return null;var e=this.create(li);return this.acceptUnicodeRange()?this.finish(e):null},n.prototype._parseNamedLine=function(){if(!this.peek(d.BracketL))return null;var e=this.createNode(u.GridLine);for(this.consumeToken();e.addChild(this._parseIdent()););return this.accept(d.BracketR)?this.finish(e):this.finish(e,f.RightSquareBracketExpected)},n.prototype._parseBinaryExpr=function(e,t){var r=this.create(ht);if(!r.setLeft(e||this._parseTerm()))return null;if(!r.setOperator(t||this._parseOperator()))return this.finish(r);if(!r.setRight(this._parseTerm()))return this.finish(r,f.TermExpected);r=this.finish(r);var i=this._parseOperator();return i&&(r=this._parseBinaryExpr(r,i)),this.finish(r)},n.prototype._parseTerm=function(){var e=this.create(Di);return e.setOperator(this._parseUnaryOperator()),e.setExpression(this._parseTermExpression())?this.finish(e):null},n.prototype._parseTermExpression=function(){return this._parseURILiteral()||this._parseUnicodeRange()||this._parseFunction()||this._parseIdent()||this._parseStringLiteral()||this._parseNumeric()||this._parseHexColor()||this._parseOperation()||this._parseNamedLine()},n.prototype._parseOperation=function(){if(!this.peek(d.ParenthesisL))return null;var e=this.create(F);return this.consumeToken(),e.addChild(this._parseExpr()),this.accept(d.ParenthesisR)?this.finish(e):this.finish(e,f.RightParenthesisExpected)},n.prototype._parseNumeric=function(){if(this.peek(d.Num)||this.peek(d.Percentage)||this.peek(d.Resolution)||this.peek(d.Length)||this.peek(d.EMS)||this.peek(d.EXS)||this.peek(d.Angle)||this.peek(d.Time)||this.peek(d.Dimension)||this.peek(d.Freq)){var e=this.create(zt);return this.consumeToken(),this.finish(e)}return null},n.prototype._parseStringLiteral=function(){if(!this.peek(d.String)&&!this.peek(d.BadString))return null;var e=this.createNode(u.StringLiteral);return this.consumeToken(),this.finish(e)},n.prototype._parseURILiteral=function(){if(!this.peekRegExp(d.Ident,/^url(-prefix)?$/i))return null;var e=this.mark(),t=this.createNode(u.URILiteral);return this.accept(d.Ident),this.hasWhitespace()||!this.peek(d.ParenthesisL)?(this.restoreAtMark(e),null):(this.scanner.inURL=!0,this.consumeToken(),t.addChild(this._parseURLArgument()),this.scanner.inURL=!1,this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected))},n.prototype._parseURLArgument=function(){var e=this.create(F);return!this.accept(d.String)&&!this.accept(d.BadString)&&!this.acceptUnquotedString()?null:this.finish(e)},n.prototype._parseIdent=function(e){if(!this.peek(d.Ident))return null;var t=this.create(te);return e&&(t.referenceTypes=e),t.isCustomProperty=this.peekRegExp(d.Ident,/^--/),this.consumeToken(),this.finish(t)},n.prototype._parseFunction=function(){var e=this.mark(),t=this.create(Pe);if(!t.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(d.ParenthesisL))return this.restoreAtMark(e),null;if(t.getArguments().addChild(this._parseFunctionArgument()))for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)t.getArguments().addChild(this._parseFunctionArgument())||this.markError(t,f.ExpressionExpected);return this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},n.prototype._parseFunctionIdentifier=function(){if(!this.peek(d.Ident))return null;var e=this.create(te);if(e.referenceTypes=[A.Function],this.acceptIdent(\"progid\")){if(this.accept(d.Colon))for(;this.accept(d.Ident)&&this.acceptDelim(\".\"););return this.finish(e)}return this.consumeToken(),this.finish(e)},n.prototype._parseFunctionArgument=function(){var e=this.create(we);return e.setValue(this._parseExpr(!0))?this.finish(e):null},n.prototype._parseHexColor=function(){if(this.peekRegExp(d.Hash,/^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/g)){var e=this.create(Dt);return this.consumeToken(),this.finish(e)}else return null},n}();function yo(n,e){var t=0,r=n.length;if(r===0)return 0;for(;t<r;){var i=Math.floor((t+r)/2);e(n[i])?r=i:t=i+1}return t}function Fr(n,e){return n.indexOf(e)!==-1}function Bt(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];for(var t=[],r=0,i=n;r<i.length;r++)for(var o=i[r],s=0,a=o;s<a.length;s++){var l=a[s];Fr(t,l)||t.push(l)}return t}var Ys=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),wo=function(){function n(e,t){this.offset=e,this.length=t,this.symbols=[],this.parent=null,this.children=[]}return n.prototype.addChild=function(e){this.children.push(e),e.setParent(this)},n.prototype.setParent=function(e){this.parent=e},n.prototype.findScope=function(e,t){return t===void 0&&(t=0),this.offset<=e&&this.offset+this.length>e+t||this.offset===e&&this.length===t?this.findInScope(e,t):null},n.prototype.findInScope=function(e,t){t===void 0&&(t=0);var r=e+t,i=yo(this.children,function(s){return s.offset>r});if(i===0)return this;var o=this.children[i-1];return o.offset<=e&&o.offset+o.length>=e+t?o.findInScope(e,t):this},n.prototype.addSymbol=function(e){this.symbols.push(e)},n.prototype.getSymbol=function(e,t){for(var r=0;r<this.symbols.length;r++){var i=this.symbols[r];if(i.name===e&&i.type===t)return i}return null},n.prototype.getSymbols=function(){return this.symbols},n}();var Qs=function(n){Ys(e,n);function e(){return n.call(this,0,Number.MAX_VALUE)||this}return e}(wo);var Fn=function(){function n(e,t,r,i){this.name=e,this.value=t,this.node=r,this.type=i}return n}();var Zs=function(){function n(e){this.scope=e}return n.prototype.addSymbol=function(e,t,r,i){if(e.offset!==-1){var o=this.scope.findScope(e.offset,e.length);o&&o.addSymbol(new Fn(t,r,e,i))}},n.prototype.addScope=function(e){if(e.offset!==-1){var t=this.scope.findScope(e.offset,e.length);if(t&&(t.offset!==e.offset||t.length!==e.length)){var r=new wo(e.offset,e.length);return t.addChild(r),r}return t}return null},n.prototype.addSymbolToChildScope=function(e,t,r,i,o){if(e&&e.offset!==-1){var s=this.addScope(e);s&&s.addSymbol(new Fn(r,i,t,o))}},n.prototype.visitNode=function(e){switch(e.type){case u.Keyframe:return this.addSymbol(e,e.getName(),void 0,A.Keyframe),!0;case u.CustomPropertyDeclaration:return this.visitCustomPropertyDeclarationNode(e);case u.VariableDeclaration:return this.visitVariableDeclarationNode(e);case u.Ruleset:return this.visitRuleSet(e);case u.MixinDeclaration:return this.addSymbol(e,e.getName(),void 0,A.Mixin),!0;case u.FunctionDeclaration:return this.addSymbol(e,e.getName(),void 0,A.Function),!0;case u.FunctionParameter:return this.visitFunctionParameterNode(e);case u.Declarations:return this.addScope(e),!0;case u.For:var t=e,r=t.getDeclarations();return r&&t.variable&&this.addSymbolToChildScope(r,t.variable,t.variable.getName(),void 0,A.Variable),!0;case u.Each:{var i=e,o=i.getDeclarations();if(o)for(var s=i.getVariables().getChildren(),a=0,l=s;a<l.length;a++){var c=l[a];this.addSymbolToChildScope(o,c,c.getName(),void 0,A.Variable)}return!0}}return!0},n.prototype.visitRuleSet=function(e){var t=this.scope.findScope(e.offset,e.length);if(t)for(var r=0,i=e.getSelectors().getChildren();r<i.length;r++){var o=i[r];o instanceof Ee&&o.getChildren().length===1&&t.addSymbol(new Fn(o.getChild(0).getText(),void 0,o,A.Rule))}return!0},n.prototype.visitVariableDeclarationNode=function(e){var t=e.getValue()?e.getValue().getText():void 0;return this.addSymbol(e,e.getName(),t,A.Variable),!0},n.prototype.visitFunctionParameterNode=function(e){var t=e.getParent().getDeclarations();if(t){var r=e.getDefaultValue(),i=r?r.getText():void 0;this.addSymbolToChildScope(t,e,e.getName(),i,A.Variable)}return!0},n.prototype.visitCustomPropertyDeclarationNode=function(e){var t=e.getValue()?e.getValue().getText():\"\";return this.addCSSVariable(e.getProperty(),e.getProperty().getName(),t,A.Variable),!0},n.prototype.addCSSVariable=function(e,t,r,i){e.offset!==-1&&this.scope.addSymbol(new Fn(t,r,e,i))},n}();var $t=function(){function n(e){this.global=new Qs,e.acceptVisitor(new Zs(this.global))}return n.prototype.findSymbolsAtOffset=function(e,t){for(var r=this.global.findScope(e,0),i=[],o={};r;){for(var s=r.getSymbols(),a=0;a<s.length;a++){var l=s[a];l.type===t&&!o[l.name]&&(i.push(l),o[l.name]=!0)}r=r.parent}return i},n.prototype.internalFindSymbol=function(e,t){var r=e;if(e.parent instanceof Be&&e.parent.getParent()instanceof K&&(r=e.parent.getParent().getDeclarations()),e.parent instanceof we&&e.parent.getParent()instanceof Pe){var i=e.parent.getParent().getIdentifier();if(i){var o=this.internalFindSymbol(i,[A.Function]);o&&(r=o.node.getDeclarations())}}if(!r)return null;for(var s=e.getText(),a=this.global.findScope(r.offset,r.length);a;){for(var l=0;l<t.length;l++){var c=t[l],h=a.getSymbol(s,c);if(h)return h}a=a.parent}return null},n.prototype.evaluateReferenceTypes=function(e){if(e instanceof te){var t=e.referenceTypes;if(t)return t;if(e.isCustomProperty)return[A.Variable];var r=ai(e);if(r){var i=r.getNonPrefixedPropertyName();if((i===\"animation\"||i===\"animation-name\")&&r.getValue()&&r.getValue().offset===e.offset)return[A.Keyframe]}}else if(e instanceof pt)return[A.Variable];var o=e.findAParent(u.Selector,u.ExtendsReference);return o?[A.Rule]:null},n.prototype.findSymbolFromNode=function(e){if(!e)return null;for(;e.type===u.Interpolation;)e=e.getParent();var t=this.evaluateReferenceTypes(e);return t?this.internalFindSymbol(e,t):null},n.prototype.matchesSymbol=function(e,t){if(!e)return!1;for(;e.type===u.Interpolation;)e=e.getParent();if(!e.matches(t.name))return!1;var r=this.evaluateReferenceTypes(e);if(!r||r.indexOf(t.type)===-1)return!1;var i=this.internalFindSymbol(e,r);return i===t},n.prototype.findSymbol=function(e,t,r){for(var i=this.global.findScope(r);i;){var o=i.getSymbol(e,t);if(o)return o;i=i.parent}return null},n}();var xo;xo=(()=>{\"use strict\";var n={470:r=>{function i(a){if(typeof a!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(a))}function o(a,l){for(var c,h=\"\",p=0,m=-1,g=0,w=0;w<=a.length;++w){if(w<a.length)c=a.charCodeAt(w);else{if(c===47)break;c=47}if(c===47){if(!(m===w-1||g===1))if(m!==w-1&&g===2){if(h.length<2||p!==2||h.charCodeAt(h.length-1)!==46||h.charCodeAt(h.length-2)!==46){if(h.length>2){var x=h.lastIndexOf(\"/\");if(x!==h.length-1){x===-1?(h=\"\",p=0):p=(h=h.slice(0,x)).length-1-h.lastIndexOf(\"/\"),m=w,g=0;continue}}else if(h.length===2||h.length===1){h=\"\",p=0,m=w,g=0;continue}}l&&(h.length>0?h+=\"/..\":h=\"..\",p=2)}else h.length>0?h+=\"/\"+a.slice(m+1,w):h=a.slice(m+1,w),p=w-m-1;m=w,g=0}else c===46&&g!==-1?++g:g=-1}return h}var s={resolve:function(){for(var a,l=\"\",c=!1,h=arguments.length-1;h>=-1&&!c;h--){var p;h>=0?p=arguments[h]:(a===void 0&&(a=process.cwd()),p=a),i(p),p.length!==0&&(l=p+\"/\"+l,c=p.charCodeAt(0)===47)}return l=o(l,!c),c?l.length>0?\"/\"+l:\"/\":l.length>0?l:\".\"},normalize:function(a){if(i(a),a.length===0)return\".\";var l=a.charCodeAt(0)===47,c=a.charCodeAt(a.length-1)===47;return(a=o(a,!l)).length!==0||l||(a=\".\"),a.length>0&&c&&(a+=\"/\"),l?\"/\"+a:a},isAbsolute:function(a){return i(a),a.length>0&&a.charCodeAt(0)===47},join:function(){if(arguments.length===0)return\".\";for(var a,l=0;l<arguments.length;++l){var c=arguments[l];i(c),c.length>0&&(a===void 0?a=c:a+=\"/\"+c)}return a===void 0?\".\":s.normalize(a)},relative:function(a,l){if(i(a),i(l),a===l||(a=s.resolve(a))===(l=s.resolve(l)))return\"\";for(var c=1;c<a.length&&a.charCodeAt(c)===47;++c);for(var h=a.length,p=h-c,m=1;m<l.length&&l.charCodeAt(m)===47;++m);for(var g=l.length-m,w=p<g?p:g,x=-1,y=0;y<=w;++y){if(y===w){if(g>w){if(l.charCodeAt(m+y)===47)return l.slice(m+y+1);if(y===0)return l.slice(m+y)}else p>w&&(a.charCodeAt(c+y)===47?x=y:y===0&&(x=0));break}var D=a.charCodeAt(c+y);if(D!==l.charCodeAt(m+y))break;D===47&&(x=y)}var M=\"\";for(y=c+x+1;y<=h;++y)y!==h&&a.charCodeAt(y)!==47||(M.length===0?M+=\"..\":M+=\"/..\");return M.length>0?M+l.slice(m+x):(m+=x,l.charCodeAt(m)===47&&++m,l.slice(m))},_makeLong:function(a){return a},dirname:function(a){if(i(a),a.length===0)return\".\";for(var l=a.charCodeAt(0),c=l===47,h=-1,p=!0,m=a.length-1;m>=1;--m)if((l=a.charCodeAt(m))===47){if(!p){h=m;break}}else p=!1;return h===-1?c?\"/\":\".\":c&&h===1?\"//\":a.slice(0,h)},basename:function(a,l){if(l!==void 0&&typeof l!=\"string\")throw new TypeError('\"ext\" argument must be a string');i(a);var c,h=0,p=-1,m=!0;if(l!==void 0&&l.length>0&&l.length<=a.length){if(l.length===a.length&&l===a)return\"\";var g=l.length-1,w=-1;for(c=a.length-1;c>=0;--c){var x=a.charCodeAt(c);if(x===47){if(!m){h=c+1;break}}else w===-1&&(m=!1,w=c+1),g>=0&&(x===l.charCodeAt(g)?--g==-1&&(p=c):(g=-1,p=w))}return h===p?p=w:p===-1&&(p=a.length),a.slice(h,p)}for(c=a.length-1;c>=0;--c)if(a.charCodeAt(c)===47){if(!m){h=c+1;break}}else p===-1&&(m=!1,p=c+1);return p===-1?\"\":a.slice(h,p)},extname:function(a){i(a);for(var l=-1,c=0,h=-1,p=!0,m=0,g=a.length-1;g>=0;--g){var w=a.charCodeAt(g);if(w!==47)h===-1&&(p=!1,h=g+1),w===46?l===-1?l=g:m!==1&&(m=1):l!==-1&&(m=-1);else if(!p){c=g+1;break}}return l===-1||h===-1||m===0||m===1&&l===h-1&&l===c+1?\"\":a.slice(l,h)},format:function(a){if(a===null||typeof a!=\"object\")throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof a);return function(l,c){var h=c.dir||c.root,p=c.base||(c.name||\"\")+(c.ext||\"\");return h?h===c.root?h+p:h+\"/\"+p:p}(0,a)},parse:function(a){i(a);var l={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(a.length===0)return l;var c,h=a.charCodeAt(0),p=h===47;p?(l.root=\"/\",c=1):c=0;for(var m=-1,g=0,w=-1,x=!0,y=a.length-1,D=0;y>=c;--y)if((h=a.charCodeAt(y))!==47)w===-1&&(x=!1,w=y+1),h===46?m===-1?m=y:D!==1&&(D=1):m!==-1&&(D=-1);else if(!x){g=y+1;break}return m===-1||w===-1||D===0||D===1&&m===w-1&&m===g+1?w!==-1&&(l.base=l.name=g===0&&p?a.slice(1,w):a.slice(g,w)):(g===0&&p?(l.name=a.slice(1,m),l.base=a.slice(1,w)):(l.name=a.slice(g,m),l.base=a.slice(g,w)),l.ext=a.slice(m,w)),g>0?l.dir=a.slice(0,g-1):p&&(l.dir=\"/\"),l},sep:\"/\",delimiter:\":\",win32:null,posix:null};s.posix=s,r.exports=s},447:(r,i,o)=>{var s;if(o.r(i),o.d(i,{URI:()=>M,Utils:()=>pe}),typeof process==\"object\")s=process.platform===\"win32\";else if(typeof navigator==\"object\"){var a=navigator.userAgent;s=a.indexOf(\"Windows\")>=0}var l,c,h=(l=function(C,b){return(l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(k,_){k.__proto__=_}||function(k,_){for(var N in _)Object.prototype.hasOwnProperty.call(_,N)&&(k[N]=_[N])})(C,b)},function(C,b){if(typeof b!=\"function\"&&b!==null)throw new TypeError(\"Class extends value \"+String(b)+\" is not a constructor or null\");function k(){this.constructor=C}l(C,b),C.prototype=b===null?Object.create(b):(k.prototype=b.prototype,new k)}),p=/^\\w[\\w\\d+.-]*$/,m=/^\\//,g=/^\\/\\//;function w(C,b){if(!C.scheme&&b)throw new Error('[UriError]: Scheme is missing: {scheme: \"\", authority: \"'.concat(C.authority,'\", path: \"').concat(C.path,'\", query: \"').concat(C.query,'\", fragment: \"').concat(C.fragment,'\"}'));if(C.scheme&&!p.test(C.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(C.path){if(C.authority){if(!m.test(C.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(g.test(C.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}}var x=\"\",y=\"/\",D=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/,M=function(){function C(b,k,_,N,O,B){B===void 0&&(B=!1),typeof b==\"object\"?(this.scheme=b.scheme||x,this.authority=b.authority||x,this.path=b.path||x,this.query=b.query||x,this.fragment=b.fragment||x):(this.scheme=function(Ce,se){return Ce||se?Ce:\"file\"}(b,B),this.authority=k||x,this.path=function(Ce,se){switch(Ce){case\"https\":case\"http\":case\"file\":se?se[0]!==y&&(se=y+se):se=y}return se}(this.scheme,_||x),this.query=N||x,this.fragment=O||x,w(this,B))}return C.isUri=function(b){return b instanceof C||!!b&&typeof b.authority==\"string\"&&typeof b.fragment==\"string\"&&typeof b.path==\"string\"&&typeof b.query==\"string\"&&typeof b.scheme==\"string\"&&typeof b.fsPath==\"string\"&&typeof b.with==\"function\"&&typeof b.toString==\"function\"},Object.defineProperty(C.prototype,\"fsPath\",{get:function(){return oe(this,!1)},enumerable:!1,configurable:!0}),C.prototype.with=function(b){if(!b)return this;var k=b.scheme,_=b.authority,N=b.path,O=b.query,B=b.fragment;return k===void 0?k=this.scheme:k===null&&(k=x),_===void 0?_=this.authority:_===null&&(_=x),N===void 0?N=this.path:N===null&&(N=x),O===void 0?O=this.query:O===null&&(O=x),B===void 0?B=this.fragment:B===null&&(B=x),k===this.scheme&&_===this.authority&&N===this.path&&O===this.query&&B===this.fragment?this:new P(k,_,N,O,B)},C.parse=function(b,k){k===void 0&&(k=!1);var _=D.exec(b);return _?new P(_[2]||x,ke(_[4]||x),ke(_[5]||x),ke(_[7]||x),ke(_[9]||x),k):new P(x,x,x,x,x)},C.file=function(b){var k=x;if(s&&(b=b.replace(/\\\\/g,y)),b[0]===y&&b[1]===y){var _=b.indexOf(y,2);_===-1?(k=b.substring(2),b=y):(k=b.substring(2,_),b=b.substring(_)||y)}return new P(\"file\",k,b,x,x)},C.from=function(b){var k=new P(b.scheme,b.authority,b.path,b.query,b.fragment);return w(k,!0),k},C.prototype.toString=function(b){return b===void 0&&(b=!1),me(this,b)},C.prototype.toJSON=function(){return this},C.revive=function(b){if(b){if(b instanceof C)return b;var k=new P(b);return k._formatted=b.external,k._fsPath=b._sep===z?b.fsPath:null,k}return b},C}(),z=s?1:void 0,P=function(C){function b(){var k=C!==null&&C.apply(this,arguments)||this;return k._formatted=null,k._fsPath=null,k}return h(b,C),Object.defineProperty(b.prototype,\"fsPath\",{get:function(){return this._fsPath||(this._fsPath=oe(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),b.prototype.toString=function(k){return k===void 0&&(k=!1),k?me(this,!0):(this._formatted||(this._formatted=me(this,!1)),this._formatted)},b.prototype.toJSON=function(){var k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=z),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k},b}(M),L=((c={})[58]=\"%3A\",c[47]=\"%2F\",c[63]=\"%3F\",c[35]=\"%23\",c[91]=\"%5B\",c[93]=\"%5D\",c[64]=\"%40\",c[33]=\"%21\",c[36]=\"%24\",c[38]=\"%26\",c[39]=\"%27\",c[40]=\"%28\",c[41]=\"%29\",c[42]=\"%2A\",c[43]=\"%2B\",c[44]=\"%2C\",c[59]=\"%3B\",c[61]=\"%3D\",c[32]=\"%20\",c);function $(C,b){for(var k=void 0,_=-1,N=0;N<C.length;N++){var O=C.charCodeAt(N);if(O>=97&&O<=122||O>=65&&O<=90||O>=48&&O<=57||O===45||O===46||O===95||O===126||b&&O===47)_!==-1&&(k+=encodeURIComponent(C.substring(_,N)),_=-1),k!==void 0&&(k+=C.charAt(N));else{k===void 0&&(k=C.substr(0,N));var B=L[O];B!==void 0?(_!==-1&&(k+=encodeURIComponent(C.substring(_,N)),_=-1),k+=B):_===-1&&(_=N)}}return _!==-1&&(k+=encodeURIComponent(C.substring(_))),k!==void 0?k:C}function ue(C){for(var b=void 0,k=0;k<C.length;k++){var _=C.charCodeAt(k);_===35||_===63?(b===void 0&&(b=C.substr(0,k)),b+=L[_]):b!==void 0&&(b+=C[k])}return b!==void 0?b:C}function oe(C,b){var k;return k=C.authority&&C.path.length>1&&C.scheme===\"file\"?\"//\".concat(C.authority).concat(C.path):C.path.charCodeAt(0)===47&&(C.path.charCodeAt(1)>=65&&C.path.charCodeAt(1)<=90||C.path.charCodeAt(1)>=97&&C.path.charCodeAt(1)<=122)&&C.path.charCodeAt(2)===58?b?C.path.substr(1):C.path[1].toLowerCase()+C.path.substr(2):C.path,s&&(k=k.replace(/\\//g,\"\\\\\")),k}function me(C,b){var k=b?ue:$,_=\"\",N=C.scheme,O=C.authority,B=C.path,Ce=C.query,se=C.fragment;if(N&&(_+=N,_+=\":\"),(O||N===\"file\")&&(_+=y,_+=y),O){var ge=O.indexOf(\"@\");if(ge!==-1){var Xe=O.substr(0,ge);O=O.substr(ge+1),(ge=Xe.indexOf(\":\"))===-1?_+=k(Xe,!1):(_+=k(Xe.substr(0,ge),!1),_+=\":\",_+=k(Xe.substr(ge+1),!1)),_+=\"@\"}(ge=(O=O.toLowerCase()).indexOf(\":\"))===-1?_+=k(O,!1):(_+=k(O.substr(0,ge),!1),_+=O.substr(ge))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58)(Me=B.charCodeAt(1))>=65&&Me<=90&&(B=\"/\".concat(String.fromCharCode(Me+32),\":\").concat(B.substr(3)));else if(B.length>=2&&B.charCodeAt(1)===58){var Me;(Me=B.charCodeAt(0))>=65&&Me<=90&&(B=\"\".concat(String.fromCharCode(Me+32),\":\").concat(B.substr(2)))}_+=k(B,!0)}return Ce&&(_+=\"?\",_+=k(Ce,!1)),se&&(_+=\"#\",_+=b?se:$(se,!1)),_}function ve(C){try{return decodeURIComponent(C)}catch{return C.length>3?C.substr(0,3)+ve(C.substr(3)):C}}var ye=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function ke(C){return C.match(ye)?C.replace(ye,function(b){return ve(b)}):C}var pe,G=o(470),Ie=function(C,b,k){if(k||arguments.length===2)for(var _,N=0,O=b.length;N<O;N++)!_&&N in b||(_||(_=Array.prototype.slice.call(b,0,N)),_[N]=b[N]);return C.concat(_||Array.prototype.slice.call(b))},fe=G.posix||G;(function(C){C.joinPath=function(b){for(var k=[],_=1;_<arguments.length;_++)k[_-1]=arguments[_];return b.with({path:fe.join.apply(fe,Ie([b.path],k,!1))})},C.resolvePath=function(b){for(var k=[],_=1;_<arguments.length;_++)k[_-1]=arguments[_];var N=b.path||\"/\";return b.with({path:fe.resolve.apply(fe,Ie([N],k,!1))})},C.dirname=function(b){var k=fe.dirname(b.path);return k.length===1&&k.charCodeAt(0)===46?b:b.with({path:k})},C.basename=function(b){return fe.basename(b.path)},C.extname=function(b){return fe.extname(b.path)}})(pe||(pe={}))}},e={};function t(r){if(e[r])return e[r].exports;var i=e[r]={exports:{}};return n[r](i,i.exports,t),i.exports}return t.d=(r,i)=>{for(var o in i)t.o(i,o)&&!t.o(r,o)&&Object.defineProperty(r,o,{enumerable:!0,get:i[o]})},t.o=(r,i)=>Object.prototype.hasOwnProperty.call(r,i),t.r=r=>{typeof Symbol<\"u\"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(r,\"__esModule\",{value:!0})},t(447)})();var{URI:qt,Utils:En}=xo;var ea=function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,o;r<i;r++)(o||!(r in e))&&(o||(o=Array.prototype.slice.call(e,0,r)),o[r]=e[r]);return n.concat(o||Array.prototype.slice.call(e))};function Dn(n){return En.dirname(qt.parse(n)).toString()}function Kt(n){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];return En.joinPath.apply(En,ea([qt.parse(n)],e,!1)).toString()}var So=function(n,e,t,r){function i(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function a(h){try{c(r.next(h))}catch(p){s(p)}}function l(h){try{c(r.throw(h))}catch(p){s(p)}}function c(h){h.done?o(h.value):i(h.value).then(a,l)}c((r=r.apply(n,e||[])).next())})},ko=function(n,e){var t={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,s;return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol==\"function\"&&(s[Symbol.iterator]=function(){return this}),s;function a(c){return function(h){return l([c,h])}}function l(c){if(r)throw new TypeError(\"Generator is already executing.\");for(;t;)try{if(r=1,i&&(o=c[0]&2?i.return:c[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,c[1])).done)return o;switch(i=0,o&&(c=[c[0]&2,o.value]),c[0]){case 0:case 1:o=c;break;case 4:return t.label++,{value:c[1],done:!1};case 5:t.label++,i=c[1],c=[0];continue;case 7:c=t.ops.pop(),t.trys.pop();continue;default:if(o=t.trys,!(o=o.length>0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){t.label=c[1];break}if(c[0]===6&&t.label<o[1]){t.label=o[1],o=c;break}if(o&&t.label<o[2]){t.label=o[2],t.ops.push(c);break}o[2]&&t.ops.pop(),t.trys.pop();continue}c=e.call(n,t)}catch(h){c=[6,h],i=0}finally{r=o=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}},Co=function(){function n(e){this.readDirectory=e,this.literalCompletions=[],this.importCompletions=[]}return n.prototype.onCssURILiteralValue=function(e){this.literalCompletions.push(e)},n.prototype.onCssImportPath=function(e){this.importCompletions.push(e)},n.prototype.computeCompletions=function(e,t){return So(this,void 0,void 0,function(){var r,i,o,s,a,x,l,c,h,z,p,m,g,w,x,y,D,M,z;return ko(this,function(P){switch(P.label){case 0:r={items:[],isIncomplete:!1},i=0,o=this.literalCompletions,P.label=1;case 1:return i<o.length?(s=o[i],a=s.uriValue,x=Er(a),x===\".\"||x===\"..\"?(r.isIncomplete=!0,[3,4]):[3,2]):[3,5];case 2:return[4,this.providePathSuggestions(a,s.position,s.range,e,t)];case 3:for(l=P.sent(),c=0,h=l;c<h.length;c++)z=h[c],r.items.push(z);P.label=4;case 4:return i++,[3,1];case 5:p=0,m=this.importCompletions,P.label=6;case 6:return p<m.length?(g=m[p],w=g.pathValue,x=Er(w),x===\".\"||x===\"..\"?(r.isIncomplete=!0,[3,9]):[3,7]):[3,10];case 7:return[4,this.providePathSuggestions(w,g.position,g.range,e,t)];case 8:for(y=P.sent(),e.languageId===\"scss\"&&y.forEach(function(L){q(L.label,\"_\")&&rn(L.label,\".scss\")&&(L.textEdit?L.textEdit.newText=L.label.slice(1,-5):L.label=L.label.slice(1,-5))}),D=0,M=y;D<M.length;D++)z=M[D],r.items.push(z);P.label=9;case 9:return p++,[3,6];case 10:return[2,r]}})})},n.prototype.providePathSuggestions=function(e,t,r,i,o){return So(this,void 0,void 0,function(){var s,a,l,c,h,p,m,g,w,x,y,D,M,z,P,L;return ko(this,function($){switch($.label){case 0:if(s=Er(e),a=q(e,\"'\")||q(e,'\"'),l=a?s.slice(0,t.character-(r.start.character+1)):s.slice(0,t.character-r.start.character),c=i.uri,h=a?ia(r,1,-1):r,p=na(l,s,h),m=l.substring(0,l.lastIndexOf(\"/\")+1),g=o.resolveReference(m||\".\",c),!g)return[3,4];$.label=1;case 1:return $.trys.push([1,3,,4]),w=[],[4,this.readDirectory(g)];case 2:for(x=$.sent(),y=0,D=x;y<D.length;y++)M=D[y],z=M[0],P=M[1],z.charCodeAt(0)!==ta&&(P===rt.Directory||Kt(g,z)!==c)&&w.push(ra(z,P===rt.Directory,p));return[2,w];case 3:return L=$.sent(),[3,4];case 4:return[2,[]]}})})},n}();var ta=46;function Er(n){return q(n,\"'\")||q(n,'\"')?n.slice(1,-1):n}function na(n,e,t){var r,i=n.lastIndexOf(\"/\");if(i===-1)r=t;else{var o=e.slice(i+1),s=Rn(t.end,-o.length),a=o.indexOf(\" \"),l=void 0;a!==-1?l=Rn(s,a):l=t.end,r=W.create(s,l)}return r}function ra(n,e,t){return e?(n=n+\"/\",{label:zn(n),kind:R.Folder,textEdit:T.replace(t,zn(n)),command:{title:\"Suggest\",command:\"editor.action.triggerSuggest\"}}):{label:zn(n),kind:R.File,textEdit:T.replace(t,zn(n))}}function zn(n){return n.replace(/(\\s|\\(|\\)|,|\"|')/g,\"\\\\$1\")}function Rn(n,e){return Q.create(n.line,n.character+e)}function ia(n,e,t){var r=Rn(n.start,e),i=Rn(n.end,t);return W.create(r,i)}var oa=function(n,e,t,r){function i(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function a(h){try{c(r.next(h))}catch(p){s(p)}}function l(h){try{c(r.throw(h))}catch(p){s(p)}}function c(h){h.done?o(h.value):i(h.value).then(a,l)}c((r=r.apply(n,e||[])).next())})},sa=function(n,e){var t={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,s;return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol==\"function\"&&(s[Symbol.iterator]=function(){return this}),s;function a(c){return function(h){return l([c,h])}}function l(c){if(r)throw new TypeError(\"Generator is already executing.\");for(;t;)try{if(r=1,i&&(o=c[0]&2?i.return:c[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,c[1])).done)return o;switch(i=0,o&&(c=[c[0]&2,o.value]),c[0]){case 0:case 1:o=c;break;case 4:return t.label++,{value:c[1],done:!1};case 5:t.label++,i=c[1],c=[0];continue;case 7:c=t.ops.pop(),t.trys.pop();continue;default:if(o=t.trys,!(o=o.length>0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){t.label=c[1];break}if(c[0]===6&&t.label<o[1]){t.label=o[1],o=c;break}if(o&&t.label<o[2]){t.label=o[2],t.ops.push(c);break}o[2]&&t.ops.pop(),t.trys.pop();continue}c=e.call(n,t)}catch(h){c=[6,h],i=0}finally{r=o=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}},aa=H(),We=re.Snippet,_o={title:\"Suggest\",command:\"editor.action.triggerSuggest\"},Re;(function(n){n.Enums=\" \",n.Normal=\"d\",n.VendorPrefixed=\"x\",n.Term=\"y\",n.Variable=\"z\"})(Re||(Re={}));var vt=function(){function n(e,t,r){e===void 0&&(e=null),this.variablePrefix=e,this.lsOptions=t,this.cssDataManager=r,this.completionParticipants=[]}return n.prototype.configure=function(e){this.defaultSettings=e},n.prototype.getSymbolContext=function(){return this.symbolContext||(this.symbolContext=new $t(this.styleSheet)),this.symbolContext},n.prototype.setCompletionParticipants=function(e){this.completionParticipants=e||[]},n.prototype.doComplete2=function(e,t,r,i,o){return o===void 0&&(o=this.defaultSettings),oa(this,void 0,void 0,function(){var s,a,l,c;return sa(this,function(h){switch(h.label){case 0:if(!this.lsOptions.fileSystemProvider||!this.lsOptions.fileSystemProvider.readDirectory)return[2,this.doComplete(e,t,r,o)];s=new Co(this.lsOptions.fileSystemProvider.readDirectory),a=this.completionParticipants,this.completionParticipants=[s].concat(a),l=this.doComplete(e,t,r,o),h.label=1;case 1:return h.trys.push([1,,3,4]),[4,s.computeCompletions(e,i)];case 2:return c=h.sent(),[2,{isIncomplete:l.isIncomplete||c.isIncomplete,items:c.items.concat(l.items)}];case 3:return this.completionParticipants=a,[7];case 4:return[2]}})})},n.prototype.doComplete=function(e,t,r,i){this.offset=e.offsetAt(t),this.position=t,this.currentWord=ha(e,this.offset),this.defaultReplaceRange=W.create(Q.create(this.position.line,this.position.character-this.currentWord.length),this.position),this.textDocument=e,this.styleSheet=r,this.documentSettings=i;try{var o={isIncomplete:!1,items:[]};this.nodePath=lt(this.styleSheet,this.offset);for(var s=this.nodePath.length-1;s>=0;s--){var a=this.nodePath[s];if(a instanceof ct)this.getCompletionsForDeclarationProperty(a.getParent(),o);else if(a instanceof pn)a.parent instanceof Rt?this.getVariableProposals(null,o):this.getCompletionsForExpression(a,o);else if(a instanceof De){var l=a.findAParent(u.ExtendsReference,u.Ruleset);if(l)if(l.type===u.ExtendsReference)this.getCompletionsForExtendsReference(l,a,o);else{var c=l;this.getCompletionsForSelector(c,c&&c.isNested(),o)}}else if(a instanceof we)this.getCompletionsForFunctionArgument(a,a.getParent(),o);else if(a instanceof Ft)this.getCompletionsForDeclarations(a,o);else if(a instanceof $e)this.getCompletionsForVariableDeclaration(a,o);else if(a instanceof Te)this.getCompletionsForRuleSet(a,o);else if(a instanceof Rt)this.getCompletionsForInterpolation(a,o);else if(a instanceof Qe)this.getCompletionsForFunctionDeclaration(a,o);else if(a instanceof et)this.getCompletionsForMixinReference(a,o);else if(a instanceof Pe)this.getCompletionsForFunctionArgument(null,a,o);else if(a instanceof Et)this.getCompletionsForSupports(a,o);else if(a instanceof Ze)this.getCompletionsForSupportsCondition(a,o);else if(a instanceof qe)this.getCompletionsForExtendsReference(a,null,o);else if(a.type===u.URILiteral)this.getCompletionForUriLiteralValue(a,o);else if(a.parent===null)this.getCompletionForTopLevel(o);else if(a.type===u.StringLiteral&&this.isImportPathParent(a.parent.type))this.getCompletionForImportPath(a,o);else continue;if(o.items.length>0||this.offset>a.offset)return this.finalize(o)}return this.getCompletionsForStylesheet(o),o.items.length===0&&this.variablePrefix&&this.currentWord.indexOf(this.variablePrefix)===0&&this.getVariableProposals(null,o),this.finalize(o)}finally{this.position=null,this.currentWord=null,this.textDocument=null,this.styleSheet=null,this.symbolContext=null,this.defaultReplaceRange=null,this.nodePath=null}},n.prototype.isImportPathParent=function(e){return e===u.Import},n.prototype.finalize=function(e){return e},n.prototype.findInNodePath=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var r=this.nodePath.length-1;r>=0;r--){var i=this.nodePath[r];if(e.indexOf(i.type)!==-1)return i}return null},n.prototype.getCompletionsForDeclarationProperty=function(e,t){return this.getPropertyProposals(e,t)},n.prototype.getPropertyProposals=function(e,t){var r=this,i=this.isTriggerPropertyValueCompletionEnabled,o=this.isCompletePropertyWithSemicolonEnabled,s=this.cssDataManager.getProperties();return s.forEach(function(a){var l,c,h=!1;e?(l=r.getCompletionRange(e.getProperty()),c=a.name,he(e.colonPosition)||(c+=\": \",h=!0)):(l=r.getCompletionRange(null),c=a.name+\": \",h=!0),!e&&o&&(c+=\"$0;\"),e&&!e.semicolonPosition&&o&&r.offset>=r.textDocument.offsetAt(l.end)&&(c+=\"$0;\");var p={label:a.name,documentation:ze(a,r.doesSupportMarkdown()),tags:Gt(a)?[Ne.Deprecated]:[],textEdit:T.replace(l,c),insertTextFormat:re.Snippet,kind:R.Property};a.restrictions||(h=!1),i&&h&&(p.command=_o);var m=typeof a.relevance==\"number\"?Math.min(Math.max(a.relevance,0),99):50,g=(255-m).toString(16),w=q(a.name,\"-\")?Re.VendorPrefixed:Re.Normal;p.sortText=w+\"_\"+g,t.items.push(p)}),this.completionParticipants.forEach(function(a){a.onCssProperty&&a.onCssProperty({propertyName:r.currentWord,range:r.defaultReplaceRange})}),t},Object.defineProperty(n.prototype,\"isTriggerPropertyValueCompletionEnabled\",{get:function(){var e,t;return(t=(e=this.documentSettings)===null||e===void 0?void 0:e.triggerPropertyValueCompletion)!==null&&t!==void 0?t:!0},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,\"isCompletePropertyWithSemicolonEnabled\",{get:function(){var e,t;return(t=(e=this.documentSettings)===null||e===void 0?void 0:e.completePropertyWithSemicolon)!==null&&t!==void 0?t:!0},enumerable:!1,configurable:!0}),n.prototype.getCompletionsForDeclarationValue=function(e,t){for(var r=this,i=e.getFullPropertyName(),o=this.cssDataManager.getProperty(i),s=e.getValue()||null;s&&s.hasChildren();)s=s.findChildAtOffset(this.offset,!1);if(this.completionParticipants.forEach(function(w){w.onCssPropertyValue&&w.onCssPropertyValue({propertyName:i,propertyValue:r.currentWord,range:r.getCompletionRange(s)})}),o){if(o.restrictions)for(var a=0,l=o.restrictions;a<l.length;a++){var c=l[a];switch(c){case\"color\":this.getColorProposals(o,s,t);break;case\"position\":this.getPositionProposals(o,s,t);break;case\"repeat\":this.getRepeatStyleProposals(o,s,t);break;case\"line-style\":this.getLineStyleProposals(o,s,t);break;case\"line-width\":this.getLineWidthProposals(o,s,t);break;case\"geometry-box\":this.getGeometryBoxProposals(o,s,t);break;case\"box\":this.getBoxProposals(o,s,t);break;case\"image\":this.getImageProposals(o,s,t);break;case\"timing-function\":this.getTimingFunctionProposals(o,s,t);break;case\"shape\":this.getBasicShapeProposals(o,s,t);break}}this.getValueEnumProposals(o,s,t),this.getCSSWideKeywordProposals(o,s,t),this.getUnitProposals(o,s,t)}else for(var h=la(this.styleSheet,e),p=0,m=h.getEntries();p<m.length;p++){var g=m[p];t.items.push({label:g,textEdit:T.replace(this.getCompletionRange(s),g),kind:R.Value})}return this.getVariableProposals(s,t),this.getTermProposals(o,s,t),t},n.prototype.getValueEnumProposals=function(e,t,r){if(e.values)for(var i=0,o=e.values;i<o.length;i++){var s=o[i],a=s.name,l=void 0;if(rn(a,\")\")){var c=a.lastIndexOf(\"(\");c!==-1&&(a=a.substr(0,c)+\"($1)\",l=We)}var h=Re.Enums;q(s.name,\"-\")&&(h+=Re.VendorPrefixed);var p={label:s.name,documentation:ze(s,this.doesSupportMarkdown()),tags:Gt(e)?[Ne.Deprecated]:[],textEdit:T.replace(this.getCompletionRange(t),a),sortText:h,kind:R.Value,insertTextFormat:l};r.items.push(p)}return r},n.prototype.getCSSWideKeywordProposals=function(e,t,r){for(var i in xr)r.items.push({label:i,documentation:xr[i],textEdit:T.replace(this.getCompletionRange(t),i),kind:R.Value});for(var o in Sr){var s=bt(o);r.items.push({label:o,documentation:Sr[o],textEdit:T.replace(this.getCompletionRange(t),s),kind:R.Function,insertTextFormat:We,command:q(o,\"var\")?_o:void 0})}return r},n.prototype.getCompletionsForInterpolation=function(e,t){return this.offset>=e.offset+2&&this.getVariableProposals(null,t),t},n.prototype.getVariableProposals=function(e,t){for(var r=this.getSymbolContext().findSymbolsAtOffset(this.offset,A.Variable),i=0,o=r;i<o.length;i++){var s=o[i],a=q(s.name,\"--\")?\"var(\".concat(s.name,\")\"):s.name,l={label:s.name,documentation:s.value?Jn(s.value):s.value,textEdit:T.replace(this.getCompletionRange(e),a),kind:R.Variable,sortText:Re.Variable};if(typeof l.documentation==\"string\"&&Fo(l.documentation)&&(l.kind=R.Color),s.node.type===u.FunctionParameter){var c=s.node.getParent();c.type===u.MixinDeclaration&&(l.detail=aa(\"completion.argument\",\"argument from '{0}'\",c.getName()))}t.items.push(l)}return t},n.prototype.getVariableProposalsForCSSVarFunction=function(e){var t=new Dr;this.styleSheet.acceptVisitor(new da(t,this.offset));for(var r=this.getSymbolContext().findSymbolsAtOffset(this.offset,A.Variable),i=0,o=r;i<o.length;i++){var s=o[i];if(q(s.name,\"--\")){var a={label:s.name,documentation:s.value?Jn(s.value):s.value,textEdit:T.replace(this.getCompletionRange(null),s.name),kind:R.Variable};typeof a.documentation==\"string\"&&Fo(a.documentation)&&(a.kind=R.Color),e.items.push(a)}t.remove(s.name)}for(var l=0,c=t.getEntries();l<c.length;l++){var h=c[l];if(q(h,\"--\")){var a={label:h,textEdit:T.replace(this.getCompletionRange(null),h),kind:R.Variable};e.items.push(a)}}return e},n.prototype.getUnitProposals=function(e,t,r){var i=\"0\";if(this.currentWord.length>0){var o=this.currentWord.match(/^-?\\d[\\.\\d+]*/);o&&(i=o[0],r.isIncomplete=i.length===this.currentWord.length)}else this.currentWord.length===0&&(r.isIncomplete=!0);if(t&&t.parent&&t.parent.type===u.Term&&(t=t.getParent()),e.restrictions)for(var s=0,a=e.restrictions;s<a.length;s++){var l=a[s],c=Cn[l];if(c)for(var h=0,p=c;h<p.length;h++){var m=p[h],g=i+m;r.items.push({label:g,textEdit:T.replace(this.getCompletionRange(t),g),kind:R.Unit})}}return r},n.prototype.getCompletionRange=function(e){if(e&&e.offset<=this.offset&&this.offset<=e.end){var t=e.end!==-1?this.textDocument.positionAt(e.end):this.position,r=this.textDocument.positionAt(e.offset);if(r.line===t.line)return W.create(r,t)}return this.defaultReplaceRange},n.prototype.getColorProposals=function(e,t,r){for(var i in jt)r.items.push({label:i,documentation:jt[i],textEdit:T.replace(this.getCompletionRange(t),i),kind:R.Color});for(var i in mr)r.items.push({label:i,documentation:mr[i],textEdit:T.replace(this.getCompletionRange(t),i),kind:R.Value});var o=new Dr;this.styleSheet.acceptVisitor(new ca(o,this.offset));for(var s=0,a=o.getEntries();s<a.length;s++){var i=a[s];r.items.push({label:i,textEdit:T.replace(this.getCompletionRange(t),i),kind:R.Color})}for(var l=function(g){var w=1,x=function(D,M){return\"${\"+w+++\":\"+M+\"}\"},y=g.func.replace(/\\[?\\$(\\w+)\\]?/g,x);r.items.push({label:g.func.substr(0,g.func.indexOf(\"(\")),detail:g.func,documentation:g.desc,textEdit:T.replace(c.getCompletionRange(t),y),insertTextFormat:We,kind:R.Function})},c=this,h=0,p=ao;h<p.length;h++){var m=p[h];l(m)}return r},n.prototype.getPositionProposals=function(e,t,r){for(var i in gr)r.items.push({label:i,documentation:gr[i],textEdit:T.replace(this.getCompletionRange(t),i),kind:R.Value});return r},n.prototype.getRepeatStyleProposals=function(e,t,r){for(var i in br)r.items.push({label:i,documentation:br[i],textEdit:T.replace(this.getCompletionRange(t),i),kind:R.Value});return r},n.prototype.getLineStyleProposals=function(e,t,r){for(var i in vr)r.items.push({label:i,documentation:vr[i],textEdit:T.replace(this.getCompletionRange(t),i),kind:R.Value});return r},n.prototype.getLineWidthProposals=function(e,t,r){for(var i=0,o=uo;i<o.length;i++){var s=o[i];r.items.push({label:s,textEdit:T.replace(this.getCompletionRange(t),s),kind:R.Value})}return r},n.prototype.getGeometryBoxProposals=function(e,t,r){for(var i in wr)r.items.push({label:i,documentation:wr[i],textEdit:T.replace(this.getCompletionRange(t),i),kind:R.Value});return r},n.prototype.getBoxProposals=function(e,t,r){for(var i in yr)r.items.push({label:i,documentation:yr[i],textEdit:T.replace(this.getCompletionRange(t),i),kind:R.Value});return r},n.prototype.getImageProposals=function(e,t,r){for(var i in kr){var o=bt(i);r.items.push({label:i,documentation:kr[i],textEdit:T.replace(this.getCompletionRange(t),o),kind:R.Function,insertTextFormat:i!==o?We:void 0})}return r},n.prototype.getTimingFunctionProposals=function(e,t,r){for(var i in Cr){var o=bt(i);r.items.push({label:i,documentation:Cr[i],textEdit:T.replace(this.getCompletionRange(t),o),kind:R.Function,insertTextFormat:i!==o?We:void 0})}return r},n.prototype.getBasicShapeProposals=function(e,t,r){for(var i in _r){var o=bt(i);r.items.push({label:i,documentation:_r[i],textEdit:T.replace(this.getCompletionRange(t),o),kind:R.Function,insertTextFormat:i!==o?We:void 0})}return r},n.prototype.getCompletionsForStylesheet=function(e){var t=this.styleSheet.findFirstChildBeforeOffset(this.offset);return t?t instanceof Te?this.getCompletionsForRuleSet(t,e):t instanceof Et?this.getCompletionsForSupports(t,e):e:this.getCompletionForTopLevel(e)},n.prototype.getCompletionForTopLevel=function(e){var t=this;return this.cssDataManager.getAtDirectives().forEach(function(r){e.items.push({label:r.name,textEdit:T.replace(t.getCompletionRange(null),r.name),documentation:ze(r,t.doesSupportMarkdown()),tags:Gt(r)?[Ne.Deprecated]:[],kind:R.Keyword})}),this.getCompletionsForSelector(null,!1,e),e},n.prototype.getCompletionsForRuleSet=function(e,t){var r=e.getDeclarations(),i=r&&r.endsWith(\"}\")&&this.offset>=r.end;if(i)return this.getCompletionForTopLevel(t);var o=!r||this.offset<=r.offset;return o?this.getCompletionsForSelector(e,e.isNested(),t):this.getCompletionsForDeclarations(e.getDeclarations(),t)},n.prototype.getCompletionsForSelector=function(e,t,r){var i=this,o=this.findInNodePath(u.PseudoSelector,u.IdentifierSelector,u.ClassSelector,u.ElementNameSelector);!o&&this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,\":\")&&(this.currentWord=\":\"+this.currentWord,this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,\":\")&&(this.currentWord=\":\"+this.currentWord),this.defaultReplaceRange=W.create(Q.create(this.position.line,this.position.character-this.currentWord.length),this.position));var s=this.cssDataManager.getPseudoClasses();s.forEach(function(y){var D=bt(y.name),M={label:y.name,textEdit:T.replace(i.getCompletionRange(o),D),documentation:ze(y,i.doesSupportMarkdown()),tags:Gt(y)?[Ne.Deprecated]:[],kind:R.Function,insertTextFormat:y.name!==D?We:void 0};q(y.name,\":-\")&&(M.sortText=Re.VendorPrefixed),r.items.push(M)});var a=this.cssDataManager.getPseudoElements();if(a.forEach(function(y){var D=bt(y.name),M={label:y.name,textEdit:T.replace(i.getCompletionRange(o),D),documentation:ze(y,i.doesSupportMarkdown()),tags:Gt(y)?[Ne.Deprecated]:[],kind:R.Function,insertTextFormat:y.name!==D?We:void 0};q(y.name,\"::-\")&&(M.sortText=Re.VendorPrefixed),r.items.push(M)}),!t){for(var l=0,c=mo;l<c.length;l++){var h=c[l];r.items.push({label:h,textEdit:T.replace(this.getCompletionRange(o),h),kind:R.Keyword})}for(var p=0,m=fo;p<m.length;p++){var h=m[p];r.items.push({label:h,textEdit:T.replace(this.getCompletionRange(o),h),kind:R.Keyword})}}var g={};g[this.currentWord]=!0;var w=this.textDocument.getText();if(this.styleSheet.accept(function(y){if(y.type===u.SimpleSelector&&y.length>0){var D=w.substr(y.offset,y.length);return D.charAt(0)===\".\"&&!g[D]&&(g[D]=!0,r.items.push({label:D,textEdit:T.replace(i.getCompletionRange(o),D),kind:R.Keyword})),!1}return!0}),e&&e.isNested()){var x=e.getSelectors().findFirstChildBeforeOffset(this.offset);x&&e.getSelectors().getChildren().indexOf(x)===0&&this.getPropertyProposals(null,r)}return r},n.prototype.getCompletionsForDeclarations=function(e,t){if(!e||this.offset===e.offset)return t;var r=e.findFirstChildBeforeOffset(this.offset);if(!r)return this.getCompletionsForDeclarationProperty(null,t);if(r instanceof sn){var i=r;if(!he(i.colonPosition)||this.offset<=i.colonPosition)return this.getCompletionsForDeclarationProperty(i,t);if(he(i.semicolonPosition)&&i.semicolonPosition<this.offset)return this.offset===i.semicolonPosition+1?t:this.getCompletionsForDeclarationProperty(null,t);if(i instanceof ae)return this.getCompletionsForDeclarationValue(i,t)}else r instanceof qe?this.getCompletionsForExtendsReference(r,null,t):this.currentWord&&this.currentWord[0]===\"@\"?this.getCompletionsForDeclarationProperty(null,t):r instanceof Te&&this.getCompletionsForDeclarationProperty(null,t);return t},n.prototype.getCompletionsForVariableDeclaration=function(e,t){return this.offset&&he(e.colonPosition)&&this.offset>e.colonPosition&&this.getVariableProposals(e.getValue(),t),t},n.prototype.getCompletionsForExpression=function(e,t){var r=e.getParent();if(r instanceof we)return this.getCompletionsForFunctionArgument(r,r.getParent(),t),t;var i=e.findParent(u.Declaration);if(!i)return this.getTermProposals(void 0,null,t),t;var o=e.findChildAtOffset(this.offset,!0);return o?o instanceof zt||o instanceof te?this.getCompletionsForDeclarationValue(i,t):t:this.getCompletionsForDeclarationValue(i,t)},n.prototype.getCompletionsForFunctionArgument=function(e,t,r){var i=t.getIdentifier();return i&&i.matches(\"var\")&&(!t.getArguments().hasChildren()||t.getArguments().getChild(0)===e)&&this.getVariableProposalsForCSSVarFunction(r),r},n.prototype.getCompletionsForFunctionDeclaration=function(e,t){var r=e.getDeclarations();return r&&this.offset>r.offset&&this.offset<r.end&&this.getTermProposals(void 0,null,t),t},n.prototype.getCompletionsForMixinReference=function(e,t){for(var r=this,i=this.getSymbolContext().findSymbolsAtOffset(this.offset,A.Mixin),o=0,s=i;o<s.length;o++){var a=s[o];a.node instanceof Ae&&t.items.push(this.makeTermProposal(a,a.node.getParameters(),null))}var l=e.getIdentifier()||null;return this.completionParticipants.forEach(function(c){c.onCssMixinReference&&c.onCssMixinReference({mixinName:r.currentWord,range:r.getCompletionRange(l)})}),t},n.prototype.getTermProposals=function(e,t,r){for(var i=this.getSymbolContext().findSymbolsAtOffset(this.offset,A.Function),o=0,s=i;o<s.length;o++){var a=s[o];a.node instanceof Qe&&r.items.push(this.makeTermProposal(a,a.node.getParameters(),t))}return r},n.prototype.makeTermProposal=function(e,t,r){var i=e.node,o=t.getChildren().map(function(a){return a instanceof Be?a.getName():a.getText()}),s=e.name+\"(\"+o.map(function(a,l){return\"${\"+(l+1)+\":\"+a+\"}\"}).join(\", \")+\")\";return{label:e.name,detail:e.name+\"(\"+o.join(\", \")+\")\",textEdit:T.replace(this.getCompletionRange(r),s),insertTextFormat:We,kind:R.Function,sortText:Re.Term}},n.prototype.getCompletionsForSupportsCondition=function(e,t){var r=e.findFirstChildBeforeOffset(this.offset);if(r){if(r instanceof ae)return!he(r.colonPosition)||this.offset<=r.colonPosition?this.getCompletionsForDeclarationProperty(r,t):this.getCompletionsForDeclarationValue(r,t);if(r instanceof Ze)return this.getCompletionsForSupportsCondition(r,t)}return he(e.lParent)&&this.offset>e.lParent&&(!he(e.rParent)||this.offset<=e.rParent)?this.getCompletionsForDeclarationProperty(null,t):t},n.prototype.getCompletionsForSupports=function(e,t){var r=e.getDeclarations(),i=!r||this.offset<=r.offset;if(i){var o=e.findFirstChildBeforeOffset(this.offset);return o instanceof Ze?this.getCompletionsForSupportsCondition(o,t):t}return this.getCompletionForTopLevel(t)},n.prototype.getCompletionsForExtendsReference=function(e,t,r){return r},n.prototype.getCompletionForUriLiteralValue=function(e,t){var r,i,o;if(e.hasChildren()){var a=e.getChild(0);r=a.getText(),i=this.position,o=this.getCompletionRange(a)}else{r=\"\",i=this.position;var s=this.textDocument.positionAt(e.offset+4);o=W.create(s,s)}return this.completionParticipants.forEach(function(l){l.onCssURILiteralValue&&l.onCssURILiteralValue({uriValue:r,position:i,range:o})}),t},n.prototype.getCompletionForImportPath=function(e,t){var r=this;return this.completionParticipants.forEach(function(i){i.onCssImportPath&&i.onCssImportPath({pathValue:e.getText(),position:r.position,range:r.getCompletionRange(e)})}),t},n.prototype.hasCharacterAtPosition=function(e,t){var r=this.textDocument.getText();return e>=0&&e<r.length&&r.charAt(e)===t},n.prototype.doesSupportMarkdown=function(){var e,t,r;if(!he(this.supportsMarkdown)){if(!he(this.lsOptions.clientCapabilities))return this.supportsMarkdown=!0,this.supportsMarkdown;var i=(r=(t=(e=this.lsOptions.clientCapabilities.textDocument)===null||e===void 0?void 0:e.completion)===null||t===void 0?void 0:t.completionItem)===null||r===void 0?void 0:r.documentationFormat;this.supportsMarkdown=Array.isArray(i)&&i.indexOf(ce.Markdown)!==-1}return this.supportsMarkdown},n}();function Gt(n){return!!(n.status&&(n.status===\"nonstandard\"||n.status===\"obsolete\"))}var Dr=function(){function n(){this.entries={}}return n.prototype.add=function(e){this.entries[e]=!0},n.prototype.remove=function(e){delete this.entries[e]},n.prototype.getEntries=function(){return Object.keys(this.entries)},n}();function bt(n){return n.replace(/\\(\\)$/,\"($1)\")}function la(n,e){var t=e.getFullPropertyName(),r=new Dr;function i(a){return(a instanceof te||a instanceof zt||a instanceof Dt)&&r.add(a.getText()),!0}function o(a){var l=a.getFullPropertyName();return t===l}function s(a){if(a instanceof ae&&a!==e&&o(a)){var l=a.getValue();l&&l.accept(i)}return!0}return n.accept(s),r}var ca=function(){function n(e,t){this.entries=e,this.currentOffset=t}return n.prototype.visitNode=function(e){return(e instanceof Dt||e instanceof Pe&&lo(e))&&(this.currentOffset<e.offset||e.end<this.currentOffset)&&this.entries.add(e.getText()),!0},n}(),da=function(){function n(e,t){this.entries=e,this.currentOffset=t}return n.prototype.visitNode=function(e){return e instanceof te&&e.isCustomProperty&&(this.currentOffset<e.offset||e.end<this.currentOffset)&&this.entries.add(e.getText()),!0},n}();function ha(n,e){for(var t=e-1,r=n.getText();t>=0&&` \t\n\\r\":{[()]},*>+`.indexOf(r.charAt(t))===-1;)t--;return r.substring(t+1,e)}function Fo(n){return n.toLowerCase()in jt||/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(n)}var zo=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),pa=H(),Rr=function(){function n(){this.parent=null,this.children=null,this.attributes=null}return n.prototype.findAttribute=function(e){if(this.attributes)for(var t=0,r=this.attributes;t<r.length;t++){var i=r[t];if(i.name===e)return i.value}return null},n.prototype.addChild=function(e){e instanceof n&&(e.parent=this),this.children||(this.children=[]),this.children.push(e)},n.prototype.append=function(e){if(this.attributes){var t=this.attributes[this.attributes.length-1];t.value=t.value+e}},n.prototype.prepend=function(e){if(this.attributes){var t=this.attributes[0];t.value=e+t.value}},n.prototype.findRoot=function(){for(var e=this;e.parent&&!(e.parent instanceof yt);)e=e.parent;return e},n.prototype.removeChild=function(e){if(this.children){var t=this.children.indexOf(e);if(t!==-1)return this.children.splice(t,1),!0}return!1},n.prototype.addAttr=function(e,t){this.attributes||(this.attributes=[]);for(var r=0,i=this.attributes;r<i.length;r++){var o=i[r];if(o.name===e){o.value+=\" \"+t;return}}this.attributes.push({name:e,value:t})},n.prototype.clone=function(e){e===void 0&&(e=!0);var t=new n;if(this.attributes){t.attributes=[];for(var r=0,i=this.attributes;r<i.length;r++){var o=i[r];t.addAttr(o.name,o.value)}}if(e&&this.children){t.children=[];for(var s=0;s<this.children.length;s++)t.addChild(this.children[s].clone())}return t},n.prototype.cloneWithParent=function(){var e=this.clone(!1);if(this.parent&&!(this.parent instanceof yt)){var t=this.parent.cloneWithParent();t.addChild(e)}return e},n}();var yt=function(n){zo(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e}(Rr);var zr=function(n){zo(e,n);function e(t){var r=n.call(this)||this;return r.addAttr(\"name\",t),r}return e}(Rr);var Eo=function(){function n(e){this.quote=e,this.result=[]}return n.prototype.print=function(e){this.result=[],e instanceof yt?e.children&&this.doPrint(e.children,0):this.doPrint([e],0);var t=this.result.join(`\n`);return[{language:\"html\",value:t}]},n.prototype.doPrint=function(e,t){for(var r=0,i=e;r<i.length;r++){var o=i[r];this.doPrintElement(o,t),o.children&&this.doPrint(o.children,t+1)}},n.prototype.writeLine=function(e,t){var r=new Array(e+1).join(\"  \");this.result.push(r+t)},n.prototype.doPrintElement=function(e,t){var r=e.findAttribute(\"name\");if(e instanceof zr||r===\"\\u2026\"){this.writeLine(t,r);return}var i=[\"<\"];if(r?i.push(r):i.push(\"element\"),e.attributes)for(var o=0,s=e.attributes;o<s.length;o++){var a=s[o];if(a.name!==\"name\"){i.push(\" \"),i.push(a.name);var l=a.value;l&&(i.push(\"=\"),i.push(Le.ensure(l,this.quote)))}}i.push(\">\"),this.writeLine(t,i.join(\"\"))},n}(),Le;(function(n){function e(r,i){return i+t(r)+i}n.ensure=e;function t(r){var i=r.match(/^['\"](.*)[\"']$/);return i?i[1]:r}n.remove=t})(Le||(Le={}));var Do=function(){function n(){this.id=0,this.attr=0,this.tag=0}return n}();function Ro(n,e){for(var t=new Rr,r=0,i=n.getChildren();r<i.length;r++){var o=i[r];switch(o.type){case u.SelectorCombinator:if(e){var s=o.getText().split(\"&\");if(s.length===1){t.addAttr(\"name\",s[0]);break}if(t=e.cloneWithParent(),s[0]){var a=t.findRoot();a.prepend(s[0])}for(var l=1;l<s.length;l++){if(l>1){var c=e.cloneWithParent();t.addChild(c.findRoot()),t=c}t.append(s[l])}}break;case u.SelectorPlaceholder:if(o.matches(\"@at-root\"))return t;case u.ElementNameSelector:var h=o.getText();t.addAttr(\"name\",h===\"*\"?\"element\":be(h));break;case u.ClassSelector:t.addAttr(\"class\",be(o.getText().substring(1)));break;case u.IdentifierSelector:t.addAttr(\"id\",be(o.getText().substring(1)));break;case u.MixinDeclaration:t.addAttr(\"class\",o.getName());break;case u.PseudoSelector:t.addAttr(be(o.getText()),\"\");break;case u.AttributeSelector:var p=o,m=p.getIdentifier();if(m){var g=p.getValue(),w=p.getOperator(),x=void 0;if(g&&w)switch(be(w.getText())){case\"|=\":x=\"\".concat(Le.remove(be(g.getText())),\"-\\u2026\");break;case\"^=\":x=\"\".concat(Le.remove(be(g.getText())),\"\\u2026\");break;case\"$=\":x=\"\\u2026\".concat(Le.remove(be(g.getText())));break;case\"~=\":x=\" \\u2026 \".concat(Le.remove(be(g.getText())),\" \\u2026 \");break;case\"*=\":x=\"\\u2026\".concat(Le.remove(be(g.getText())),\"\\u2026\");break;default:x=Le.remove(be(g.getText()));break}t.addAttr(be(m.getText()),x)}break}}return t}function be(n){var e=new Fe;e.setSource(n);var t=e.scanUnquotedString();return t?t.text:n}var Io=function(){function n(e){this.cssDataManager=e}return n.prototype.selectorToMarkedString=function(e){var t=fa(e);if(t){var r=new Eo('\"').print(t);return r.push(this.selectorToSpecificityMarkedString(e)),r}else return[]},n.prototype.simpleSelectorToMarkedString=function(e){var t=Ro(e),r=new Eo('\"').print(t);return r.push(this.selectorToSpecificityMarkedString(e)),r},n.prototype.isPseudoElementIdentifier=function(e){var t=e.match(/^::?([\\w-]+)/);return t?!!this.cssDataManager.getPseudoElement(\"::\"+t[1]):!1},n.prototype.selectorToSpecificityMarkedString=function(e){var t=this,r=function(o){var s=new Do;e:for(var a=0,l=o.getChildren();a<l.length;a++){var c=l[a];switch(c.type){case u.IdentifierSelector:s.id++;break;case u.ClassSelector:case u.AttributeSelector:s.attr++;break;case u.ElementNameSelector:if(c.matches(\"*\"))break;s.tag++;break;case u.PseudoSelector:var h=c.getText();if(t.isPseudoElementIdentifier(h)){s.tag++;break}if(h.match(/^:where/i))continue e;if(h.match(/^:(not|has|is)/i)&&c.getChildren().length>0){for(var p=new Do,m=0,g=c.getChildren();m<g.length;m++){var w=g[m],x=void 0;w.type===u.Undefined?x=w.getChildren():x=[w];for(var y=0,D=w.getChildren();y<D.length;y++){var M=D[y],z=r(M);if(z.id>p.id){p=z;continue}else if(z.id<p.id)continue;if(z.attr>p.attr){p=z;continue}else if(z.attr<p.attr)continue;if(z.tag>p.tag){p=z;continue}}}s.id+=p.id,s.attr+=p.attr,s.tag+=p.tag;continue e}s.attr++;break}if(c.getChildren().length>0){var z=r(c);s.id+=z.id,s.attr+=z.attr,s.tag+=z.tag}}return s},i=r(e);return pa(\"specificity\",\"[Selector Specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity): ({0}, {1}, {2})\",i.id,i.attr,i.tag)},n}();var ua=function(){function n(e){this.prev=null,this.element=e}return n.prototype.processSelector=function(e){var t=null;if(!(this.element instanceof yt)&&e.getChildren().some(function(h){return h.hasChildren()&&h.getChild(0).type===u.SelectorCombinator})){var r=this.element.findRoot();r.parent instanceof yt&&(t=this.element,this.element=r.parent,this.element.removeChild(r),this.prev=null)}for(var i=0,o=e.getChildren();i<o.length;i++){var s=o[i];if(s instanceof De){if(this.prev instanceof De){var a=new zr(\"\\u2026\");this.element.addChild(a),this.element=a}else this.prev&&(this.prev.matches(\"+\")||this.prev.matches(\"~\"))&&this.element.parent&&(this.element=this.element.parent);this.prev&&this.prev.matches(\"~\")&&this.element.addChild(new zr(\"\\u22EE\"));var l=Ro(s,t),c=l.findRoot();this.element.addChild(c),this.element=l}(s instanceof De||s.type===u.SelectorCombinatorParent||s.type===u.SelectorCombinatorShadowPiercingDescendant||s.type===u.SelectorCombinatorSibling||s.type===u.SelectorCombinatorAllSiblings)&&(this.prev=s)}},n}();function ma(n){switch(n.type){case u.MixinDeclaration:case u.Stylesheet:return!0}return!1}function fa(n){if(n.matches(\"@at-root\"))return null;var e=new yt,t=[],r=n.getParent();if(r instanceof Te)for(var i=r.getParent();i&&!ma(i);){if(i instanceof Te){if(i.getSelectors().matches(\"@at-root\"))break;t.push(i)}i=i.getParent()}for(var o=new ua(e),s=t.length-1;s>=0;s--){var a=t[s].getSelectors().getChild(0);a&&o.processSelector(a)}return o.processSelector(n),e}var In=function(){function n(e,t){this.clientCapabilities=e,this.cssDataManager=t,this.selectorPrinting=new Io(t)}return n.prototype.configure=function(e){this.defaultSettings=e},n.prototype.doHover=function(e,t,r,i){i===void 0&&(i=this.defaultSettings);function o(y){return W.create(e.positionAt(y.offset),e.positionAt(y.end))}for(var s=e.offsetAt(t),a=lt(r,s),l=null,c=0;c<a.length;c++){var h=a[c];if(h instanceof Ee){l={contents:this.selectorPrinting.selectorToMarkedString(h),range:o(h)};break}if(h instanceof De){q(h.getText(),\"@\")||(l={contents:this.selectorPrinting.simpleSelectorToMarkedString(h),range:o(h)});break}if(h instanceof ae){var p=h.getFullPropertyName(),m=this.cssDataManager.getProperty(p);if(m){var g=ze(m,this.doesSupportMarkdown(),i);g?l={contents:g,range:o(h)}:l=null}continue}if(h instanceof un){var w=h.getText(),m=this.cssDataManager.getAtDirective(w);if(m){var g=ze(m,this.doesSupportMarkdown(),i);g?l={contents:g,range:o(h)}:l=null}continue}if(h instanceof F&&h.type===u.PseudoSelector){var x=h.getText(),m=x.slice(0,2)===\"::\"?this.cssDataManager.getPseudoElement(x):this.cssDataManager.getPseudoClass(x);if(m){var g=ze(m,this.doesSupportMarkdown(),i);g?l={contents:g,range:o(h)}:l=null}continue}}return l&&(l.contents=this.convertContents(l.contents)),l},n.prototype.convertContents=function(e){return this.doesSupportMarkdown()||typeof e==\"string\"?e:\"kind\"in e?{kind:\"plaintext\",value:e.value}:Array.isArray(e)?e.map(function(t){return typeof t==\"string\"?t:t.value}):e.value},n.prototype.doesSupportMarkdown=function(){if(!he(this.supportsMarkdown)){if(!he(this.clientCapabilities))return this.supportsMarkdown=!0,this.supportsMarkdown;var e=this.clientCapabilities.textDocument&&this.clientCapabilities.textDocument.hover;this.supportsMarkdown=e&&e.contentFormat&&Array.isArray(e.contentFormat)&&e.contentFormat.indexOf(ce.Markdown)!==-1}return this.supportsMarkdown},n}();var Ht=function(n,e,t,r){function i(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function a(h){try{c(r.next(h))}catch(p){s(p)}}function l(h){try{c(r.throw(h))}catch(p){s(p)}}function c(h){h.done?o(h.value):i(h.value).then(a,l)}c((r=r.apply(n,e||[])).next())})},Jt=function(n,e){var t={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,s;return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol==\"function\"&&(s[Symbol.iterator]=function(){return this}),s;function a(c){return function(h){return l([c,h])}}function l(c){if(r)throw new TypeError(\"Generator is already executing.\");for(;t;)try{if(r=1,i&&(o=c[0]&2?i.return:c[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,c[1])).done)return o;switch(i=0,o&&(c=[c[0]&2,o.value]),c[0]){case 0:case 1:o=c;break;case 4:return t.label++,{value:c[1],done:!1};case 5:t.label++,i=c[1],c=[0];continue;case 7:c=t.ops.pop(),t.trys.pop();continue;default:if(o=t.trys,!(o=o.length>0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){t.label=c[1];break}if(c[0]===6&&t.label<o[1]){t.label=o[1],o=c;break}if(o&&t.label<o[2]){t.label=o[2],t.ops.push(c);break}o[2]&&t.ops.pop(),t.trys.pop();continue}c=e.call(n,t)}catch(h){c=[6,h],i=0}finally{r=o=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}},Mo=H(),To=/^\\w+:\\/\\//,Po=/^data:/,Xt=function(){function n(e,t){this.fileSystemProvider=e,this.resolveModuleReferences=t}return n.prototype.findDefinition=function(e,t,r){var i=new $t(r),o=e.offsetAt(t),s=on(r,o);if(!s)return null;var a=i.findSymbolFromNode(s);return a?{uri:e.uri,range:ot(a.node,e)}:null},n.prototype.findReferences=function(e,t,r){var i=this.findDocumentHighlights(e,t,r);return i.map(function(o){return{uri:e.uri,range:o.range}})},n.prototype.findDocumentHighlights=function(e,t,r){var i=[],o=e.offsetAt(t),s=on(r,o);if(!s||s.type===u.Stylesheet||s.type===u.Declarations)return i;s.type===u.Identifier&&s.parent&&s.parent.type===u.ClassSelector&&(s=s.parent);var a=new $t(r),l=a.findSymbolFromNode(s),c=s.getText();return r.accept(function(h){if(l){if(a.matchesSymbol(h,l))return i.push({kind:Ao(h),range:ot(h,e)}),!1}else s&&s.type===h.type&&h.matches(c)&&i.push({kind:Ao(h),range:ot(h,e)});return!0}),i},n.prototype.isRawStringDocumentLinkNode=function(e){return e.type===u.Import},n.prototype.findDocumentLinks=function(e,t,r){for(var i=this.findUnresolvedLinks(e,t),o=[],s=0,a=i;s<a.length;s++){var l=a[s],c=l.link,h=c.target;if(!(!h||Po.test(h)))if(To.test(h))o.push(c);else{var p=r.resolveReference(h,e.uri);p&&(c.target=p),o.push(c)}}return o},n.prototype.findDocumentLinks2=function(e,t,r){return Ht(this,void 0,void 0,function(){var i,o,s,a,l,c,h,p;return Jt(this,function(m){switch(m.label){case 0:i=this.findUnresolvedLinks(e,t),o=[],s=0,a=i,m.label=1;case 1:return s<a.length?(l=a[s],c=l.link,h=c.target,!h||Po.test(h)?[3,5]:[3,2]):[3,6];case 2:return To.test(h)?(o.push(c),[3,5]):[3,3];case 3:return[4,this.resolveRelativeReference(h,e.uri,r,l.isRawLink)];case 4:p=m.sent(),p!==void 0&&(c.target=p,o.push(c)),m.label=5;case 5:return s++,[3,1];case 6:return[2,o]}})})},n.prototype.findUnresolvedLinks=function(e,t){var r=this,i=[],o=function(s){var a=s.getText(),l=ot(s,e);if(!(l.start.line===l.end.line&&l.start.character===l.end.character)){(q(a,\"'\")||q(a,'\"'))&&(a=a.slice(1,-1));var c=s.parent?r.isRawStringDocumentLinkNode(s.parent):!1;i.push({link:{target:a,range:l},isRawLink:c})}};return t.accept(function(s){if(s.type===u.URILiteral){var a=s.getChild(0);return a&&o(a),!1}if(s.parent&&r.isRawStringDocumentLinkNode(s.parent)){var l=s.getText();return(q(l,\"'\")||q(l,'\"'))&&o(s),!1}return!0}),i},n.prototype.findDocumentSymbols=function(e,t){var r=[];return t.accept(function(i){var o={name:null,kind:Oe.Class,location:null},s=i;if(i instanceof Ee)return o.name=i.getText(),s=i.findAParent(u.Ruleset,u.ExtendsReference),s&&(o.location=tt.create(e.uri,ot(s,e)),r.push(o)),!1;if(i instanceof $e)o.name=i.getName(),o.kind=Oe.Variable;else if(i instanceof Ae)o.name=i.getName(),o.kind=Oe.Method;else if(i instanceof Qe)o.name=i.getName(),o.kind=Oe.Function;else if(i instanceof ln)o.name=Mo(\"literal.keyframes\",\"@keyframes {0}\",i.getName());else if(i instanceof an)o.name=Mo(\"literal.fontface\",\"@font-face\");else if(i instanceof cn){var a=i.getChild(0);a instanceof dn&&(o.name=\"@media \"+a.getText(),o.kind=Oe.Module)}return o.name&&(o.location=tt.create(e.uri,ot(s,e)),r.push(o)),!0}),r},n.prototype.findDocumentColors=function(e,t){var r=[];return t.accept(function(i){var o=ga(i,e);return o&&r.push(o),!0}),r},n.prototype.getColorPresentations=function(e,t,r,i){var o=[],s=Math.round(r.red*255),a=Math.round(r.green*255),l=Math.round(r.blue*255),c;r.alpha===1?c=\"rgb(\".concat(s,\", \").concat(a,\", \").concat(l,\")\"):c=\"rgba(\".concat(s,\", \").concat(a,\", \").concat(l,\", \").concat(r.alpha,\")\"),o.push({label:c,textEdit:T.replace(i,c)}),r.alpha===1?c=\"#\".concat(it(s)).concat(it(a)).concat(it(l)):c=\"#\".concat(it(s)).concat(it(a)).concat(it(l)).concat(it(Math.round(r.alpha*255))),o.push({label:c,textEdit:T.replace(i,c)});var h=fr(r);h.a===1?c=\"hsl(\".concat(h.h,\", \").concat(Math.round(h.s*100),\"%, \").concat(Math.round(h.l*100),\"%)\"):c=\"hsla(\".concat(h.h,\", \").concat(Math.round(h.s*100),\"%, \").concat(Math.round(h.l*100),\"%, \").concat(h.a,\")\"),o.push({label:c,textEdit:T.replace(i,c)});var p=ho(r);return p.a===1?c=\"hwb(\".concat(p.h,\" \").concat(Math.round(p.w*100),\"% \").concat(Math.round(p.b*100),\"%)\"):c=\"hwb(\".concat(p.h,\" \").concat(Math.round(p.w*100),\"% \").concat(Math.round(p.b*100),\"% / \").concat(p.a,\")\"),o.push({label:c,textEdit:T.replace(i,c)}),o},n.prototype.doRename=function(e,t,r,i){var o,s=this.findDocumentHighlights(e,t,i),a=s.map(function(l){return T.replace(l.range,r)});return{changes:(o={},o[e.uri]=a,o)}},n.prototype.resolveModuleReference=function(e,t,r){return Ht(this,void 0,void 0,function(){var i,o,s,a,l;return Jt(this,function(c){switch(c.label){case 0:return q(t,\"file://\")?(i=ba(e),o=r.resolveReference(\"/\",t),s=Dn(t),[4,this.resolvePathToModule(i,s,o)]):[3,2];case 1:if(a=c.sent(),a)return l=e.substring(i.length+1),[2,Kt(a,l)];c.label=2;case 2:return[2,void 0]}})})},n.prototype.resolveRelativeReference=function(e,t,r,i){return Ht(this,void 0,void 0,function(){var o,s;return Jt(this,function(a){switch(a.label){case 0:return o=r.resolveReference(e,t),e[0]===\"~\"&&e[1]!==\"/\"&&this.fileSystemProvider?(e=e.substring(1),[4,this.resolveModuleReference(e,t,r)]):[3,2];case 1:return[2,a.sent()||o];case 2:return this.resolveModuleReferences?(s=o,s?[4,this.fileExists(o)]:[3,4]):[3,7];case 3:s=a.sent(),a.label=4;case 4:return s?[2,o]:[3,5];case 5:return[4,this.resolveModuleReference(e,t,r)];case 6:return[2,a.sent()||o];case 7:return[2,o]}})})},n.prototype.resolvePathToModule=function(e,t,r){return Ht(this,void 0,void 0,function(){var i;return Jt(this,function(o){switch(o.label){case 0:return i=Kt(t,\"node_modules\",e,\"package.json\"),[4,this.fileExists(i)];case 1:return o.sent()?[2,Dn(i)]:r&&t.startsWith(r)&&t.length!==r.length?[2,this.resolvePathToModule(e,Dn(t),r)]:[2,void 0]}})})},n.prototype.fileExists=function(e){return Ht(this,void 0,void 0,function(){var t,r;return Jt(this,function(i){switch(i.label){case 0:if(!this.fileSystemProvider)return[2,!1];i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this.fileSystemProvider.stat(e)];case 2:return t=i.sent(),t.type===rt.Unknown&&t.size===-1?[2,!1]:[2,!0];case 3:return r=i.sent(),[2,!1];case 4:return[2]}})})},n}();function ga(n,e){var t=po(n);if(t){var r=ot(n,e);return{color:t,range:r}}return null}function ot(n,e){return W.create(e.positionAt(n.offset),e.positionAt(n.end))}function Ao(n){if(n.type===u.Selector)return He.Write;if(n instanceof te&&n.parent&&n.parent instanceof ct&&n.isCustomProperty)return He.Write;if(n.parent)switch(n.parent.type){case u.FunctionDeclaration:case u.MixinDeclaration:case u.Keyframe:case u.VariableDeclaration:case u.FunctionParameter:return He.Write}return He.Read}function it(n){var e=n.toString(16);return e.length!==2?\"0\"+e:e}function ba(n){return n[0]===\"@\"?n.substring(0,n.indexOf(\"/\",n.indexOf(\"/\")+1)):n.substring(0,n.indexOf(\"/\"))}var Y=H(),wt=ne.Warning,No=ne.Error,Se=ne.Ignore,Z=function(){function n(e,t,r){this.id=e,this.message=t,this.defaultValue=r}return n}();var va=function(){function n(e,t,r){this.id=e,this.message=t,this.defaultValue=r}return n}();var V={AllVendorPrefixes:new Z(\"compatibleVendorPrefixes\",Y(\"rule.vendorprefixes.all\",\"When using a vendor-specific prefix make sure to also include all other vendor-specific properties\"),Se),IncludeStandardPropertyWhenUsingVendorPrefix:new Z(\"vendorPrefix\",Y(\"rule.standardvendorprefix.all\",\"When using a vendor-specific prefix also include the standard property\"),wt),DuplicateDeclarations:new Z(\"duplicateProperties\",Y(\"rule.duplicateDeclarations\",\"Do not use duplicate style definitions\"),Se),EmptyRuleSet:new Z(\"emptyRules\",Y(\"rule.emptyRuleSets\",\"Do not use empty rulesets\"),wt),ImportStatemement:new Z(\"importStatement\",Y(\"rule.importDirective\",\"Import statements do not load in parallel\"),Se),BewareOfBoxModelSize:new Z(\"boxModel\",Y(\"rule.bewareOfBoxModelSize\",\"Do not use width or height when using padding or border\"),Se),UniversalSelector:new Z(\"universalSelector\",Y(\"rule.universalSelector\",\"The universal selector (*) is known to be slow\"),Se),ZeroWithUnit:new Z(\"zeroUnits\",Y(\"rule.zeroWidthUnit\",\"No unit for zero needed\"),Se),RequiredPropertiesForFontFace:new Z(\"fontFaceProperties\",Y(\"rule.fontFaceProperties\",\"@font-face rule must define 'src' and 'font-family' properties\"),wt),HexColorLength:new Z(\"hexColorLength\",Y(\"rule.hexColor\",\"Hex colors must consist of three, four, six or eight hex numbers\"),No),ArgsInColorFunction:new Z(\"argumentsInColorFunction\",Y(\"rule.colorFunction\",\"Invalid number of parameters\"),No),UnknownProperty:new Z(\"unknownProperties\",Y(\"rule.unknownProperty\",\"Unknown property.\"),wt),UnknownAtRules:new Z(\"unknownAtRules\",Y(\"rule.unknownAtRules\",\"Unknown at-rule.\"),wt),IEStarHack:new Z(\"ieHack\",Y(\"rule.ieHack\",\"IE hacks are only necessary when supporting IE7 and older\"),Se),UnknownVendorSpecificProperty:new Z(\"unknownVendorSpecificProperties\",Y(\"rule.unknownVendorSpecificProperty\",\"Unknown vendor specific property.\"),Se),PropertyIgnoredDueToDisplay:new Z(\"propertyIgnoredDueToDisplay\",Y(\"rule.propertyIgnoredDueToDisplay\",\"Property is ignored due to the display.\"),wt),AvoidImportant:new Z(\"important\",Y(\"rule.avoidImportant\",\"Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.\"),Se),AvoidFloat:new Z(\"float\",Y(\"rule.avoidFloat\",\"Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.\"),Se),AvoidIdSelector:new Z(\"idSelector\",Y(\"rule.avoidIdSelector\",\"Selectors should not contain IDs because these rules are too tightly coupled with the HTML.\"),Se)},Oo={ValidProperties:new va(\"validProperties\",Y(\"rule.validProperties\",\"A list of properties that are not validated against the `unknownProperties` rule.\"),[])},Wo=function(){function n(e){e===void 0&&(e={}),this.conf=e}return n.prototype.getRule=function(e){if(this.conf.hasOwnProperty(e.id)){var t=ya(this.conf[e.id]);if(t)return t}return e.defaultValue},n.prototype.getSetting=function(e){return this.conf[e.id]},n}();function ya(n){switch(n){case\"ignore\":return ne.Ignore;case\"warning\":return ne.Warning;case\"error\":return ne.Error}return null}var wa=H(),Mn=function(){function n(e){this.cssDataManager=e}return n.prototype.doCodeActions=function(e,t,r,i){return this.doCodeActions2(e,t,r,i).map(function(o){var s=o.edit&&o.edit.documentChanges&&o.edit.documentChanges[0];return Ge.create(o.title,\"_css.applyCodeAction\",e.uri,e.version,s&&s.edits)})},n.prototype.doCodeActions2=function(e,t,r,i){var o=[];if(r.diagnostics)for(var s=0,a=r.diagnostics;s<a.length;s++){var l=a[s];this.appendFixesForMarker(e,i,l,o)}return o},n.prototype.getFixesForUnknownProperty=function(e,t,r,i){var o=t.getName(),s=[];this.cssDataManager.getProperties().forEach(function(D){var M=oi(o,D.name);M>=o.length/2&&s.push({property:D.name,score:M})}),s.sort(function(D,M){return M.score-D.score||D.property.localeCompare(M.property)});for(var a=3,l=0,c=s;l<c.length;l++){var h=c[l],p=h.property,m=wa(\"css.codeaction.rename\",\"Rename to '{0}'\",p),g=T.replace(r.range,p),w=At.create(e.uri,e.version),x={documentChanges:[nt.create(w,[g])]},y=Wt.create(m,x,Ot.QuickFix);if(y.diagnostics=[r],i.push(y),--a<=0)return}},n.prototype.appendFixesForMarker=function(e,t,r,i){if(r.code===V.UnknownProperty.id)for(var o=e.offsetAt(r.range.start),s=e.offsetAt(r.range.end),a=lt(t,o),l=a.length-1;l>=0;l--){var c=a[l];if(c instanceof ae){var h=c.getProperty();if(h&&h.offset===o&&h.end===s){this.getFixesForUnknownProperty(e,h,r,i);return}}}},n}();var Uo=function(){function n(e){this.fullPropertyName=e.getFullPropertyName().toLowerCase(),this.node=e}return n}();function Yt(n,e,t,r){var i=n[e];i.value=t,t&&(Fr(i.properties,r)||i.properties.push(r))}function xa(n,e,t){Yt(n,\"top\",e,t),Yt(n,\"right\",e,t),Yt(n,\"bottom\",e,t),Yt(n,\"left\",e,t)}function ie(n,e,t,r){e===\"top\"||e===\"right\"||e===\"bottom\"||e===\"left\"?Yt(n,e,t,r):xa(n,t,r)}function Ir(n,e,t){switch(e.length){case 1:ie(n,void 0,e[0],t);break;case 2:ie(n,\"top\",e[0],t),ie(n,\"bottom\",e[0],t),ie(n,\"right\",e[1],t),ie(n,\"left\",e[1],t);break;case 3:ie(n,\"top\",e[0],t),ie(n,\"right\",e[1],t),ie(n,\"left\",e[1],t),ie(n,\"bottom\",e[2],t);break;case 4:ie(n,\"top\",e[0],t),ie(n,\"right\",e[1],t),ie(n,\"bottom\",e[2],t),ie(n,\"left\",e[3],t);break}}function Mr(n,e){for(var t=0,r=e;t<r.length;t++){var i=r[t];if(n.matches(i))return!0}return!1}function Qt(n,e){return e===void 0&&(e=!0),e&&Mr(n,[\"initial\",\"unset\"])?!1:parseFloat(n.getText())!==0}function Lo(n,e){return e===void 0&&(e=!0),n.map(function(t){return Qt(t,e)})}function Tn(n,e){return e===void 0&&(e=!0),!(Mr(n,[\"none\",\"hidden\"])||e&&Mr(n,[\"initial\",\"unset\"]))}function Sa(n,e){return e===void 0&&(e=!0),n.map(function(t){return Tn(t,e)})}function ka(n){var e=n.getChildren();if(e.length===1){var t=e[0];return Qt(t)&&Tn(t)}for(var r=0,i=e;r<i.length;r++){var o=i[r],t=o;if(!Qt(t,!1)||!Tn(t,!1))return!1}return!0}function Tr(n){for(var e={top:{value:!1,properties:[]},right:{value:!1,properties:[]},bottom:{value:!1,properties:[]},left:{value:!1,properties:[]}},t=0,r=n;t<r.length;t++){var i=r[t],o=i.node.value;if(!(typeof o>\"u\"))switch(i.fullPropertyName){case\"box-sizing\":return{top:{value:!1,properties:[]},right:{value:!1,properties:[]},bottom:{value:!1,properties:[]},left:{value:!1,properties:[]}};case\"width\":e.width=i;break;case\"height\":e.height=i;break;default:var s=i.fullPropertyName.split(\"-\");switch(s[0]){case\"border\":switch(s[1]){case void 0:case\"top\":case\"right\":case\"bottom\":case\"left\":switch(s[2]){case void 0:ie(e,s[1],ka(o),i);break;case\"width\":ie(e,s[1],Qt(o,!1),i);break;case\"style\":ie(e,s[1],Tn(o,!0),i);break}break;case\"width\":Ir(e,Lo(o.getChildren(),!1),i);break;case\"style\":Ir(e,Sa(o.getChildren(),!0),i);break}break;case\"padding\":s.length===1?Ir(e,Lo(o.getChildren(),!0),i):ie(e,s[1],Qt(o,!0),i);break}break}}return e}var Ue=H(),jo=function(){function n(){this.data={}}return n.prototype.add=function(e,t,r){var i=this.data[e];i||(i={nodes:[],names:[]},this.data[e]=i),i.names.push(t),r&&i.nodes.push(r)},n}(),Vo=function(){function n(e,t,r){var i=this;this.cssDataManager=r,this.warnings=[],this.settings=t,this.documentText=e.getText(),this.keyframes=new jo,this.validProperties={};var o=t.getSetting(Oo.ValidProperties);Array.isArray(o)&&o.forEach(function(s){if(typeof s==\"string\"){var a=s.trim().toLowerCase();a.length&&(i.validProperties[a]=!0)}})}return n.entries=function(e,t,r,i,o){var s=new n(t,r,i);return e.acceptVisitor(s),s.completeValidations(),s.getEntries(o)},n.prototype.isValidPropertyDeclaration=function(e){var t=e.fullPropertyName;return this.validProperties[t]},n.prototype.fetch=function(e,t){for(var r=[],i=0,o=e;i<o.length;i++){var s=o[i];s.fullPropertyName===t&&r.push(s)}return r},n.prototype.fetchWithValue=function(e,t,r){for(var i=[],o=0,s=e;o<s.length;o++){var a=s[o];if(a.fullPropertyName===t){var l=a.node.getValue();l&&this.findValueInExpression(l,r)&&i.push(a)}}return i},n.prototype.findValueInExpression=function(e,t){var r=!1;return e.accept(function(i){return i.type===u.Identifier&&i.matches(t)&&(r=!0),!r}),r},n.prototype.getEntries=function(e){return e===void 0&&(e=ne.Warning|ne.Error),this.warnings.filter(function(t){return(t.getLevel()&e)!==0})},n.prototype.addEntry=function(e,t,r){var i=new mn(e,t,this.settings.getRule(t),r);this.warnings.push(i)},n.prototype.getMissingNames=function(e,t){for(var r=e.slice(0),i=0;i<t.length;i++){var o=r.indexOf(t[i]);o!==-1&&(r[o]=null)}for(var s=null,i=0;i<r.length;i++){var a=r[i];a&&(s===null?s=Ue(\"namelist.single\",\"'{0}'\",a):s=Ue(\"namelist.concatenated\",\"{0}, '{1}'\",s,a))}return s},n.prototype.visitNode=function(e){switch(e.type){case u.UnknownAtRule:return this.visitUnknownAtRule(e);case u.Keyframe:return this.visitKeyframe(e);case u.FontFace:return this.visitFontFace(e);case u.Ruleset:return this.visitRuleSet(e);case u.SimpleSelector:return this.visitSimpleSelector(e);case u.Function:return this.visitFunction(e);case u.NumericValue:return this.visitNumericValue(e);case u.Import:return this.visitImport(e);case u.HexColorValue:return this.visitHexColorValue(e);case u.Prio:return this.visitPrio(e);case u.IdentifierSelector:return this.visitIdentifierSelector(e)}return!0},n.prototype.completeValidations=function(){this.validateKeyframes()},n.prototype.visitUnknownAtRule=function(e){var t=e.getChild(0);if(!t)return!1;var r=this.cssDataManager.getAtDirective(t.getText());return r?!1:(this.addEntry(t,V.UnknownAtRules,\"Unknown at rule \".concat(t.getText())),!0)},n.prototype.visitKeyframe=function(e){var t=e.getKeyword();if(!t)return!1;var r=t.getText();return this.keyframes.add(e.getName(),r,r!==\"@keyframes\"?t:null),!0},n.prototype.validateKeyframes=function(){var e=[\"@-webkit-keyframes\",\"@-moz-keyframes\",\"@-o-keyframes\"];for(var t in this.keyframes.data){var r=this.keyframes.data[t].names,i=r.indexOf(\"@keyframes\")===-1;if(!(!i&&r.length===1)){var o=this.getMissingNames(e,r);if(o||i)for(var s=0,a=this.keyframes.data[t].nodes;s<a.length;s++){var l=a[s];if(i){var c=Ue(\"keyframes.standardrule.missing\",\"Always define standard rule '@keyframes' when defining keyframes.\");this.addEntry(l,V.IncludeStandardPropertyWhenUsingVendorPrefix,c)}if(o){var c=Ue(\"keyframes.vendorspecific.missing\",\"Always include all vendor specific rules: Missing: {0}\",o);this.addEntry(l,V.AllVendorPrefixes,c)}}}}return!0},n.prototype.visitSimpleSelector=function(e){var t=this.documentText.charAt(e.offset);return e.length===1&&t===\"*\"&&this.addEntry(e,V.UniversalSelector),!0},n.prototype.visitIdentifierSelector=function(e){return this.addEntry(e,V.AvoidIdSelector),!0},n.prototype.visitImport=function(e){return this.addEntry(e,V.ImportStatemement),!0},n.prototype.visitRuleSet=function(e){var t=e.getDeclarations();if(!t)return!1;t.hasChildren()||this.addEntry(e.getSelectors(),V.EmptyRuleSet);for(var r=[],i=0,o=t.getChildren();i<o.length;i++){var s=o[i];s instanceof ae&&r.push(new Uo(s))}var a=Tr(r);if(a.width){var l=[];if(a.right.value&&(l=Bt(l,a.right.properties)),a.left.value&&(l=Bt(l,a.left.properties)),l.length!==0){for(var c=0,h=l;c<h.length;c++){var p=h[c];this.addEntry(p.node,V.BewareOfBoxModelSize)}this.addEntry(a.width.node,V.BewareOfBoxModelSize)}}if(a.height){var l=[];if(a.top.value&&(l=Bt(l,a.top.properties)),a.bottom.value&&(l=Bt(l,a.bottom.properties)),l.length!==0){for(var m=0,g=l;m<g.length;m++){var p=g[m];this.addEntry(p.node,V.BewareOfBoxModelSize)}this.addEntry(a.height.node,V.BewareOfBoxModelSize)}}var w=this.fetchWithValue(r,\"display\",\"inline-block\");if(w.length>0)for(var x=this.fetch(r,\"float\"),y=0;y<x.length;y++){var D=x[y].node,M=D.getValue();M&&!M.matches(\"none\")&&this.addEntry(D,V.PropertyIgnoredDueToDisplay,Ue(\"rule.propertyIgnoredDueToDisplayInlineBlock\",\"inline-block is ignored due to the float. If 'float' has a value other than 'none', the box is floated and 'display' is treated as 'block'\"))}if(w=this.fetchWithValue(r,\"display\",\"block\"),w.length>0)for(var x=this.fetch(r,\"vertical-align\"),y=0;y<x.length;y++)this.addEntry(x[y].node,V.PropertyIgnoredDueToDisplay,Ue(\"rule.propertyIgnoredDueToDisplayBlock\",\"Property is ignored due to the display. With 'display: block', vertical-align should not be used.\"));for(var z=this.fetch(r,\"float\"),y=0;y<z.length;y++){var s=z[y];this.isValidPropertyDeclaration(s)||this.addEntry(s.node,V.AvoidFloat)}for(var P=0;P<r.length;P++){var s=r[P];if(s.fullPropertyName!==\"background\"&&!this.validProperties[s.fullPropertyName]){var M=s.node.getValue();if(M&&this.documentText.charAt(M.offset)!==\"-\"){var L=this.fetch(r,s.fullPropertyName);if(L.length>1)for(var $=0;$<L.length;$++){var ue=L[$].node.getValue();ue&&this.documentText.charAt(ue.offset)!==\"-\"&&L[$]!==s&&this.addEntry(s.node,V.DuplicateDeclarations)}}}}var oe=e.getSelectors().matches(\":export\");if(!oe){for(var me=new jo,ve=!1,ye=0,ke=r;ye<ke.length;ye++){var s=ke[ye],pe=s.node;if(this.isCSSDeclaration(pe)){var G=s.fullPropertyName,Ie=G.charAt(0);if(Ie===\"-\"){if(G.charAt(1)!==\"-\"){!this.cssDataManager.isKnownProperty(G)&&!this.validProperties[G]&&this.addEntry(pe.getProperty(),V.UnknownVendorSpecificProperty);var fe=pe.getNonPrefixedPropertyName();me.add(fe,G,pe.getProperty())}}else{var C=G;(Ie===\"*\"||Ie===\"_\")&&(this.addEntry(pe.getProperty(),V.IEStarHack),G=G.substr(1)),!this.cssDataManager.isKnownProperty(C)&&!this.cssDataManager.isKnownProperty(G)&&(this.validProperties[G]||this.addEntry(pe.getProperty(),V.UnknownProperty,Ue(\"property.unknownproperty.detailed\",\"Unknown property: '{0}'\",pe.getFullPropertyName()))),me.add(G,G,null)}}else ve=!0}if(!ve)for(var b in me.data){var k=me.data[b],_=k.names,N=this.cssDataManager.isStandardProperty(b)&&_.indexOf(b)===-1;if(!(!N&&_.length===1)){for(var O=[],P=0,B=n.prefixes.length;P<B;P++){var Ce=n.prefixes[P];this.cssDataManager.isStandardProperty(Ce+b)&&O.push(Ce+b)}var se=this.getMissingNames(O,_);if(se||N)for(var ge=0,Xe=k.nodes;ge<Xe.length;ge++){var Me=Xe[ge];if(N){var Bn=Ue(\"property.standard.missing\",\"Also define the standard property '{0}' for compatibility\",b);this.addEntry(Me,V.IncludeStandardPropertyWhenUsingVendorPrefix,Bn)}if(se){var Bn=Ue(\"property.vendorspecific.missing\",\"Always include all vendor specific properties: Missing: {0}\",se);this.addEntry(Me,V.AllVendorPrefixes,Bn)}}}}}return!0},n.prototype.visitPrio=function(e){return this.addEntry(e,V.AvoidImportant),!0},n.prototype.visitNumericValue=function(e){var t=e.findParent(u.Function);if(t&&t.getName()===\"calc\")return!0;var r=e.findParent(u.Declaration);if(r){var i=r.getValue();if(i){var o=e.getValue();if(!o.unit||Cn.length.indexOf(o.unit.toLowerCase())===-1)return!0;parseFloat(o.value)===0&&o.unit&&!this.validProperties[r.getFullPropertyName()]&&this.addEntry(e,V.ZeroWithUnit)}}return!0},n.prototype.visitFontFace=function(e){var t=e.getDeclarations();if(!t)return!1;for(var r=!1,i=!1,o=!1,s=0,a=t.getChildren();s<a.length;s++){var l=a[s];if(this.isCSSDeclaration(l)){var c=l.getProperty().getName().toLowerCase();c===\"src\"&&(r=!0),c===\"font-family\"&&(i=!0)}else o=!0}return!o&&(!r||!i)&&this.addEntry(e,V.RequiredPropertiesForFontFace),!0},n.prototype.isCSSDeclaration=function(e){if(e instanceof ae){if(!e.getValue())return!1;var t=e.getProperty();if(!t)return!1;var r=t.getIdentifier();return!(!r||r.containsInterpolation())}return!1},n.prototype.visitHexColorValue=function(e){var t=e.length;return t!==9&&t!==7&&t!==5&&t!==4&&this.addEntry(e,V.HexColorLength),!1},n.prototype.visitFunction=function(e){var t=e.getName().toLowerCase(),r=-1,i=0;switch(t){case\"rgb(\":case\"hsl(\":r=3;break;case\"rgba(\":case\"hsla(\":r=4;break}return r!==-1&&(e.getArguments().accept(function(o){return o instanceof ht?(i+=1,!1):!0}),i!==r&&this.addEntry(e,V.ArgsInColorFunction)),!0},n.prefixes=[\"-ms-\",\"-moz-\",\"-o-\",\"-webkit-\"],n}();var Pn=function(){function n(e){this.cssDataManager=e}return n.prototype.configure=function(e){this.settings=e},n.prototype.doValidation=function(e,t,r){if(r===void 0&&(r=this.settings),r&&r.validate===!1)return[];var i=[];i.push.apply(i,Ni.entries(t)),i.push.apply(i,Vo.entries(t,e,new Wo(r&&r.lint),this.cssDataManager));var o=[];for(var s in V)o.push(V[s].id);function a(l){var c=W.create(e.positionAt(l.getOffset()),e.positionAt(l.getOffset()+l.getLength())),h=e.languageId;return{code:l.getRule().id,source:h,message:l.getMessage(),severity:l.getLevel()===ne.Warning?mt.Warning:mt.Error,range:c}}return i.filter(function(l){return l.getLevel()!==ne.Ignore}).map(a)},n}();var Ca=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),Bo=47,_a=10,Fa=13,Ea=12,Da=36,za=35,Ra=123,Zt=61,Ia=33,Ma=60,Ta=62,Pr=46;var je=d.CustomToken,An=je++,xt=je++,vc=je++,Ar=je++,Nr=je++,Or=je++,Wr=je++,en=je++,yc=je++,Nn=function(n){Ca(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.scanNext=function(t){if(this.stream.advanceIfChar(Da)){var r=[\"$\"];if(this.ident(r))return this.finishToken(t,An,r.join(\"\"));this.stream.goBackTo(t)}return this.stream.advanceIfChars([za,Ra])?this.finishToken(t,xt):this.stream.advanceIfChars([Zt,Zt])?this.finishToken(t,Ar):this.stream.advanceIfChars([Ia,Zt])?this.finishToken(t,Nr):this.stream.advanceIfChar(Ma)?this.stream.advanceIfChar(Zt)?this.finishToken(t,Wr):this.finishToken(t,d.Delim):this.stream.advanceIfChar(Ta)?this.stream.advanceIfChar(Zt)?this.finishToken(t,Or):this.finishToken(t,d.Delim):this.stream.advanceIfChars([Pr,Pr,Pr])?this.finishToken(t,en):n.prototype.scanNext.call(this,t)},e.prototype.comment=function(){return n.prototype.comment.call(this)?!0:!this.inURL&&this.stream.advanceIfChars([Bo,Bo])?(this.stream.advanceWhileChar(function(t){switch(t){case _a:case Fa:case Ea:return!1;default:return!0}}),!0):!1},e}(Fe);var Lr=H(),Ur=function(){function n(e,t){this.id=e,this.message=t}return n}();var On={FromExpected:new Ur(\"scss-fromexpected\",Lr(\"expected.from\",\"'from' expected\")),ThroughOrToExpected:new Ur(\"scss-throughexpected\",Lr(\"expected.through\",\"'through' or 'to' expected\")),InExpected:new Ur(\"scss-fromexpected\",Lr(\"expected.in\",\"'in' expected\"))};var Aa=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),$o=function(n){Aa(e,n);function e(){return n.call(this,new Nn)||this}return e.prototype._parseStylesheetStatement=function(t){return t===void 0&&(t=!1),this.peek(d.AtKeyword)?this._parseWarnAndDebug()||this._parseControlStatement()||this._parseMixinDeclaration()||this._parseMixinContent()||this._parseMixinReference()||this._parseFunctionDeclaration()||this._parseForward()||this._parseUse()||this._parseRuleset(t)||n.prototype._parseStylesheetAtStatement.call(this,t):this._parseRuleset(!0)||this._parseVariableDeclaration()},e.prototype._parseImport=function(){if(!this.peekKeyword(\"@import\"))return null;var t=this.create(dt);if(this.consumeToken(),!t.addChild(this._parseURILiteral())&&!t.addChild(this._parseStringLiteral()))return this.finish(t,f.URIOrStringExpected);for(;this.accept(d.Comma);)if(!t.addChild(this._parseURILiteral())&&!t.addChild(this._parseStringLiteral()))return this.finish(t,f.URIOrStringExpected);return!this.peek(d.SemiColon)&&!this.peek(d.EOF)&&t.setMedialist(this._parseMediaQueryList()),this.finish(t)},e.prototype._parseVariableDeclaration=function(t){if(t===void 0&&(t=[]),!this.peek(An))return null;var r=this.create($e);if(!r.setVariable(this._parseVariable()))return null;if(!this.accept(d.Colon))return this.finish(r,f.ColonExpected);if(this.prevToken&&(r.colonPosition=this.prevToken.offset),!r.setValue(this._parseExpr()))return this.finish(r,f.VariableValueExpected,[],t);for(;this.peek(d.Exclamation);)if(!r.addChild(this._tryParsePrio())){if(this.consumeToken(),!this.peekRegExp(d.Ident,/^(default|global)$/))return this.finish(r,f.UnknownKeyword);this.consumeToken()}return this.peek(d.SemiColon)&&(r.semicolonPosition=this.token.offset),this.finish(r)},e.prototype._parseMediaCondition=function(){return this._parseInterpolation()||n.prototype._parseMediaCondition.call(this)},e.prototype._parseMediaFeatureName=function(){return this._parseModuleMember()||this._parseFunction()||this._parseIdent()||this._parseVariable()},e.prototype._parseKeyframeSelector=function(){return this._tryParseKeyframeSelector()||this._parseControlStatement(this._parseKeyframeSelector.bind(this))||this._parseVariableDeclaration()||this._parseMixinContent()},e.prototype._parseVariable=function(){if(!this.peek(An))return null;var t=this.create(pt);return this.consumeToken(),t},e.prototype._parseModuleMember=function(){var t=this.mark(),r=this.create(Zn);return r.setIdentifier(this._parseIdent([A.Module]))?this.hasWhitespace()||!this.acceptDelim(\".\")||this.hasWhitespace()?(this.restoreAtMark(t),null):r.addChild(this._parseVariable()||this._parseFunction())?r:this.finish(r,f.IdentifierOrVariableExpected):null},e.prototype._parseIdent=function(t){var r=this;if(!this.peek(d.Ident)&&!this.peek(xt)&&!this.peekDelim(\"-\"))return null;var i=this.create(te);i.referenceTypes=t,i.isCustomProperty=this.peekRegExp(d.Ident,/^--/);for(var o=!1,s=function(){var a=r.mark();return r.acceptDelim(\"-\")&&(r.hasWhitespace()||r.acceptDelim(\"-\"),r.hasWhitespace())?(r.restoreAtMark(a),null):r._parseInterpolation()};(this.accept(d.Ident)||i.addChild(s())||o&&this.acceptRegexp(/^[\\w-]/))&&(o=!0,!this.hasWhitespace()););return o?this.finish(i):null},e.prototype._parseTermExpression=function(){return this._parseModuleMember()||this._parseVariable()||this._parseSelectorCombinator()||n.prototype._parseTermExpression.call(this)},e.prototype._parseInterpolation=function(){if(this.peek(xt)){var t=this.create(Rt);return this.consumeToken(),!t.addChild(this._parseExpr())&&!this._parseSelectorCombinator()?this.accept(d.CurlyR)?this.finish(t):this.finish(t,f.ExpressionExpected):this.accept(d.CurlyR)?this.finish(t):this.finish(t,f.RightCurlyExpected)}return null},e.prototype._parseOperator=function(){if(this.peek(Ar)||this.peek(Nr)||this.peek(Or)||this.peek(Wr)||this.peekDelim(\">\")||this.peekDelim(\"<\")||this.peekIdent(\"and\")||this.peekIdent(\"or\")||this.peekDelim(\"%\")){var t=this.createNode(u.Operator);return this.consumeToken(),this.finish(t)}return n.prototype._parseOperator.call(this)},e.prototype._parseUnaryOperator=function(){if(this.peekIdent(\"not\")){var t=this.create(F);return this.consumeToken(),this.finish(t)}return n.prototype._parseUnaryOperator.call(this)},e.prototype._parseRuleSetDeclaration=function(){return this.peek(d.AtKeyword)?this._parseKeyframe()||this._parseImport()||this._parseMedia(!0)||this._parseFontFace()||this._parseWarnAndDebug()||this._parseControlStatement()||this._parseFunctionDeclaration()||this._parseExtends()||this._parseMixinReference()||this._parseMixinContent()||this._parseMixinDeclaration()||this._parseRuleset(!0)||this._parseSupports(!0)||n.prototype._parseRuleSetDeclarationAtStatement.call(this):this._parseVariableDeclaration()||this._tryParseRuleset(!0)||n.prototype._parseRuleSetDeclaration.call(this)},e.prototype._parseDeclaration=function(t){var r=this._tryParseCustomPropertyDeclaration(t);if(r)return r;var i=this.create(ae);if(!i.setProperty(this._parseProperty()))return null;if(!this.accept(d.Colon))return this.finish(i,f.ColonExpected,[d.Colon],t||[d.SemiColon]);this.prevToken&&(i.colonPosition=this.prevToken.offset);var o=!1;if(i.setValue(this._parseExpr())&&(o=!0,i.addChild(this._parsePrio())),this.peek(d.CurlyL))i.setNestedProperties(this._parseNestedProperties());else if(!o)return this.finish(i,f.PropertyValueExpected);return this.peek(d.SemiColon)&&(i.semicolonPosition=this.token.offset),this.finish(i)},e.prototype._parseNestedProperties=function(){var t=this.create(Yn);return this._parseBody(t,this._parseDeclaration.bind(this))},e.prototype._parseExtends=function(){if(this.peekKeyword(\"@extend\")){var t=this.create(qe);if(this.consumeToken(),!t.getSelectors().addChild(this._parseSimpleSelector()))return this.finish(t,f.SelectorExpected);for(;this.accept(d.Comma);)t.getSelectors().addChild(this._parseSimpleSelector());return this.accept(d.Exclamation)&&!this.acceptIdent(\"optional\")?this.finish(t,f.UnknownKeyword):this.finish(t)}return null},e.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||this._parseSelectorPlaceholder()||n.prototype._parseSimpleSelectorBody.call(this)},e.prototype._parseSelectorCombinator=function(){if(this.peekDelim(\"&\")){var t=this.createNode(u.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim(\"-\")||this.accept(d.Num)||this.accept(d.Dimension)||t.addChild(this._parseIdent())||this.acceptDelim(\"&\")););return this.finish(t)}return null},e.prototype._parseSelectorPlaceholder=function(){if(this.peekDelim(\"%\")){var t=this.createNode(u.SelectorPlaceholder);return this.consumeToken(),this._parseIdent(),this.finish(t)}else if(this.peekKeyword(\"@at-root\")){var t=this.createNode(u.SelectorPlaceholder);return this.consumeToken(),this.finish(t)}return null},e.prototype._parseElementName=function(){var t=this.mark(),r=n.prototype._parseElementName.call(this);return r&&!this.hasWhitespace()&&this.peek(d.ParenthesisL)?(this.restoreAtMark(t),null):r},e.prototype._tryParsePseudoIdentifier=function(){return this._parseInterpolation()||n.prototype._tryParsePseudoIdentifier.call(this)},e.prototype._parseWarnAndDebug=function(){if(!this.peekKeyword(\"@debug\")&&!this.peekKeyword(\"@warn\")&&!this.peekKeyword(\"@error\"))return null;var t=this.createNode(u.Debug);return this.consumeToken(),t.addChild(this._parseExpr()),this.finish(t)},e.prototype._parseControlStatement=function(t){return t===void 0&&(t=this._parseRuleSetDeclaration.bind(this)),this.peek(d.AtKeyword)?this._parseIfStatement(t)||this._parseForStatement(t)||this._parseEachStatement(t)||this._parseWhileStatement(t):null},e.prototype._parseIfStatement=function(t){return this.peekKeyword(\"@if\")?this._internalParseIfStatement(t):null},e.prototype._internalParseIfStatement=function(t){var r=this.create(pi);if(this.consumeToken(),!r.setExpression(this._parseExpr(!0)))return this.finish(r,f.ExpressionExpected);if(this._parseBody(r,t),this.acceptKeyword(\"@else\")){if(this.peekIdent(\"if\"))r.setElseClause(this._internalParseIfStatement(t));else if(this.peek(d.CurlyL)){var i=this.create(gi);this._parseBody(i,t),r.setElseClause(i)}}return this.finish(r)},e.prototype._parseForStatement=function(t){if(!this.peekKeyword(\"@for\"))return null;var r=this.create(ui);return this.consumeToken(),r.setVariable(this._parseVariable())?this.acceptIdent(\"from\")?r.addChild(this._parseBinaryExpr())?!this.acceptIdent(\"to\")&&!this.acceptIdent(\"through\")?this.finish(r,On.ThroughOrToExpected,[d.CurlyR]):r.addChild(this._parseBinaryExpr())?this._parseBody(r,t):this.finish(r,f.ExpressionExpected,[d.CurlyR]):this.finish(r,f.ExpressionExpected,[d.CurlyR]):this.finish(r,On.FromExpected,[d.CurlyR]):this.finish(r,f.VariableNameExpected,[d.CurlyR])},e.prototype._parseEachStatement=function(t){if(!this.peekKeyword(\"@each\"))return null;var r=this.create(mi);this.consumeToken();var i=r.getVariables();if(!i.addChild(this._parseVariable()))return this.finish(r,f.VariableNameExpected,[d.CurlyR]);for(;this.accept(d.Comma);)if(!i.addChild(this._parseVariable()))return this.finish(r,f.VariableNameExpected,[d.CurlyR]);return this.finish(i),this.acceptIdent(\"in\")?r.addChild(this._parseExpr())?this._parseBody(r,t):this.finish(r,f.ExpressionExpected,[d.CurlyR]):this.finish(r,On.InExpected,[d.CurlyR])},e.prototype._parseWhileStatement=function(t){if(!this.peekKeyword(\"@while\"))return null;var r=this.create(fi);return this.consumeToken(),r.addChild(this._parseBinaryExpr())?this._parseBody(r,t):this.finish(r,f.ExpressionExpected,[d.CurlyR])},e.prototype._parseFunctionBodyDeclaration=function(){return this._parseVariableDeclaration()||this._parseReturnStatement()||this._parseWarnAndDebug()||this._parseControlStatement(this._parseFunctionBodyDeclaration.bind(this))},e.prototype._parseFunctionDeclaration=function(){if(!this.peekKeyword(\"@function\"))return null;var t=this.create(Qe);if(this.consumeToken(),!t.setIdentifier(this._parseIdent([A.Function])))return this.finish(t,f.IdentifierExpected,[d.CurlyR]);if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.CurlyR]);if(t.getParameters().addChild(this._parseParameterDeclaration())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(t,f.VariableNameExpected)}return this.accept(d.ParenthesisR)?this._parseBody(t,this._parseFunctionBodyDeclaration.bind(this)):this.finish(t,f.RightParenthesisExpected,[d.CurlyR])},e.prototype._parseReturnStatement=function(){if(!this.peekKeyword(\"@return\"))return null;var t=this.createNode(u.ReturnStatement);return this.consumeToken(),t.addChild(this._parseExpr())?this.finish(t):this.finish(t,f.ExpressionExpected)},e.prototype._parseMixinDeclaration=function(){if(!this.peekKeyword(\"@mixin\"))return null;var t=this.create(Ae);if(this.consumeToken(),!t.setIdentifier(this._parseIdent([A.Mixin])))return this.finish(t,f.IdentifierExpected,[d.CurlyR]);if(this.accept(d.ParenthesisL)){if(t.getParameters().addChild(this._parseParameterDeclaration())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(t,f.VariableNameExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected,[d.CurlyR])}return this._parseBody(t,this._parseRuleSetDeclaration.bind(this))},e.prototype._parseParameterDeclaration=function(){var t=this.create(Be);return t.setIdentifier(this._parseVariable())?(this.accept(en),this.accept(d.Colon)&&!t.setDefaultValue(this._parseExpr(!0))?this.finish(t,f.VariableValueExpected,[],[d.Comma,d.ParenthesisR]):this.finish(t)):null},e.prototype._parseMixinContent=function(){if(!this.peekKeyword(\"@content\"))return null;var t=this.create(Ii);if(this.consumeToken(),this.accept(d.ParenthesisL)){if(t.getArguments().addChild(this._parseFunctionArgument())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getArguments().addChild(this._parseFunctionArgument()))return this.finish(t,f.ExpressionExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}return this.finish(t)},e.prototype._parseMixinReference=function(){if(!this.peekKeyword(\"@include\"))return null;var t=this.create(et);this.consumeToken();var r=this._parseIdent([A.Mixin]);if(!t.setIdentifier(r))return this.finish(t,f.IdentifierExpected,[d.CurlyR]);if(!this.hasWhitespace()&&this.acceptDelim(\".\")&&!this.hasWhitespace()){var i=this._parseIdent([A.Mixin]);if(!i)return this.finish(t,f.IdentifierExpected,[d.CurlyR]);var o=this.create(Zn);r.referenceTypes=[A.Module],o.setIdentifier(r),t.setIdentifier(i),t.addChild(o)}if(this.accept(d.ParenthesisL)){if(t.getArguments().addChild(this._parseFunctionArgument())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getArguments().addChild(this._parseFunctionArgument()))return this.finish(t,f.ExpressionExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}return(this.peekIdent(\"using\")||this.peek(d.CurlyL))&&t.setContent(this._parseMixinContentDeclaration()),this.finish(t)},e.prototype._parseMixinContentDeclaration=function(){var t=this.create(Mi);if(this.acceptIdent(\"using\")){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.CurlyL]);if(t.getParameters().addChild(this._parseParameterDeclaration())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(t,f.VariableNameExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected,[d.CurlyL])}return this.peek(d.CurlyL)&&this._parseBody(t,this._parseMixinReferenceBodyStatement.bind(this)),this.finish(t)},e.prototype._parseMixinReferenceBodyStatement=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},e.prototype._parseFunctionArgument=function(){var t=this.create(we),r=this.mark(),i=this._parseVariable();if(i)if(this.accept(d.Colon))t.setIdentifier(i);else{if(this.accept(en))return t.setValue(i),this.finish(t);this.restoreAtMark(r)}return t.setValue(this._parseExpr(!0))?(this.accept(en),t.addChild(this._parsePrio()),this.finish(t)):t.setValue(this._tryParsePrio())?this.finish(t):null},e.prototype._parseURLArgument=function(){var t=this.mark(),r=n.prototype._parseURLArgument.call(this);if(!r||!this.peek(d.ParenthesisR)){this.restoreAtMark(t);var i=this.create(F);return i.addChild(this._parseBinaryExpr()),this.finish(i)}return r},e.prototype._parseOperation=function(){if(!this.peek(d.ParenthesisL))return null;var t=this.create(F);for(this.consumeToken();t.addChild(this._parseListElement());)this.accept(d.Comma);return this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},e.prototype._parseListElement=function(){var t=this.create(Ti),r=this._parseBinaryExpr();if(!r)return null;if(this.accept(d.Colon)){if(t.setKey(r),!t.setValue(this._parseBinaryExpr()))return this.finish(t,f.ExpressionExpected)}else t.setValue(r);return this.finish(t)},e.prototype._parseUse=function(){if(!this.peekKeyword(\"@use\"))return null;var t=this.create(vi);if(this.consumeToken(),!t.addChild(this._parseStringLiteral()))return this.finish(t,f.StringLiteralExpected);if(!this.peek(d.SemiColon)&&!this.peek(d.EOF)){if(!this.peekRegExp(d.Ident,/as|with/))return this.finish(t,f.UnknownKeyword);if(this.acceptIdent(\"as\")&&!t.setIdentifier(this._parseIdent([A.Module]))&&!this.acceptDelim(\"*\"))return this.finish(t,f.IdentifierOrWildcardExpected);if(this.acceptIdent(\"with\")){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.ParenthesisR]);if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}}return!this.accept(d.SemiColon)&&!this.accept(d.EOF)?this.finish(t,f.SemiColonExpected):this.finish(t)},e.prototype._parseModuleConfigDeclaration=function(){var t=this.create(yi);return t.setIdentifier(this._parseVariable())?!this.accept(d.Colon)||!t.setValue(this._parseExpr(!0))?this.finish(t,f.VariableValueExpected,[],[d.Comma,d.ParenthesisR]):this.accept(d.Exclamation)&&(this.hasWhitespace()||!this.acceptIdent(\"default\"))?this.finish(t,f.UnknownKeyword):this.finish(t):null},e.prototype._parseForward=function(){if(!this.peekKeyword(\"@forward\"))return null;var t=this.create(wi);if(this.consumeToken(),!t.addChild(this._parseStringLiteral()))return this.finish(t,f.StringLiteralExpected);if(this.acceptIdent(\"with\")){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.ParenthesisR]);if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}if(!this.peek(d.SemiColon)&&!this.peek(d.EOF)){if(!this.peekRegExp(d.Ident,/as|hide|show/))return this.finish(t,f.UnknownKeyword);if(this.acceptIdent(\"as\")){var r=this._parseIdent([A.Forward]);if(!t.setIdentifier(r))return this.finish(t,f.IdentifierExpected);if(this.hasWhitespace()||!this.acceptDelim(\"*\"))return this.finish(t,f.WildcardExpected)}if((this.peekIdent(\"hide\")||this.peekIdent(\"show\"))&&!t.addChild(this._parseForwardVisibility()))return this.finish(t,f.IdentifierOrVariableExpected)}return!this.accept(d.SemiColon)&&!this.accept(d.EOF)?this.finish(t,f.SemiColonExpected):this.finish(t)},e.prototype._parseForwardVisibility=function(){var t=this.create(xi);for(t.setIdentifier(this._parseIdent());t.addChild(this._parseVariable()||this._parseIdent());)this.accept(d.Comma);return t.getChildren().length>1?t:null},e.prototype._parseSupportsCondition=function(){return this._parseInterpolation()||n.prototype._parseSupportsCondition.call(this)},e}(gt);var Na=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),S=H(),Ko=function(n){Na(e,n);function e(t,r){var i=n.call(this,\"$\",t,r)||this;return qo(e.scssModuleLoaders),qo(e.scssModuleBuiltIns),i}return e.prototype.isImportPathParent=function(t){return t===u.Forward||t===u.Use||n.prototype.isImportPathParent.call(this,t)},e.prototype.getCompletionForImportPath=function(t,r){var i=t.getParent().type;if(i===u.Forward||i===u.Use)for(var o=0,s=e.scssModuleBuiltIns;o<s.length;o++){var a=s[o],l={label:a.label,documentation:a.documentation,textEdit:T.replace(this.getCompletionRange(t),\"'\".concat(a.label,\"'\")),kind:R.Module};r.items.push(l)}return n.prototype.getCompletionForImportPath.call(this,t,r)},e.prototype.createReplaceFunction=function(){var t=1;return function(r,i){return\"\\\\\"+i+\": ${\"+t+++\":\"+(e.variableDefaults[i]||\"\")+\"}\"}},e.prototype.createFunctionProposals=function(t,r,i,o){for(var s=0,a=t;s<a.length;s++){var l=a[s],c=l.func.replace(/\\[?(\\$\\w+)\\]?/g,this.createReplaceFunction()),h=l.func.substr(0,l.func.indexOf(\"(\")),p={label:h,detail:l.func,documentation:l.desc,textEdit:T.replace(this.getCompletionRange(r),c),insertTextFormat:re.Snippet,kind:R.Function};i&&(p.sortText=\"z\"),o.items.push(p)}return o},e.prototype.getCompletionsForSelector=function(t,r,i){return this.createFunctionProposals(e.selectorFuncs,null,!0,i),n.prototype.getCompletionsForSelector.call(this,t,r,i)},e.prototype.getTermProposals=function(t,r,i){var o=e.builtInFuncs;return t&&(o=o.filter(function(s){return!s.type||!t.restrictions||t.restrictions.indexOf(s.type)!==-1})),this.createFunctionProposals(o,r,!0,i),n.prototype.getTermProposals.call(this,t,r,i)},e.prototype.getColorProposals=function(t,r,i){return this.createFunctionProposals(e.colorProposals,r,!1,i),n.prototype.getColorProposals.call(this,t,r,i)},e.prototype.getCompletionsForDeclarationProperty=function(t,r){return this.getCompletionForAtDirectives(r),this.getCompletionsForSelector(null,!0,r),n.prototype.getCompletionsForDeclarationProperty.call(this,t,r)},e.prototype.getCompletionsForExtendsReference=function(t,r,i){for(var o=this.getSymbolContext().findSymbolsAtOffset(this.offset,A.Rule),s=0,a=o;s<a.length;s++){var l=a[s],c={label:l.name,textEdit:T.replace(this.getCompletionRange(r),l.name),kind:R.Function};i.items.push(c)}return i},e.prototype.getCompletionForAtDirectives=function(t){var r;return(r=t.items).push.apply(r,e.scssAtDirectives),t},e.prototype.getCompletionForTopLevel=function(t){return this.getCompletionForAtDirectives(t),this.getCompletionForModuleLoaders(t),n.prototype.getCompletionForTopLevel.call(this,t),t},e.prototype.getCompletionForModuleLoaders=function(t){var r;return(r=t.items).push.apply(r,e.scssModuleLoaders),t},e.variableDefaults={$red:\"1\",$green:\"2\",$blue:\"3\",$alpha:\"1.0\",$color:\"#000000\",$weight:\"0.5\",$hue:\"0\",$saturation:\"0%\",$lightness:\"0%\",$degrees:\"0\",$amount:\"0\",$string:'\"\"',$substring:'\"s\"',$number:\"0\",$limit:\"1\"},e.colorProposals=[{func:\"red($color)\",desc:S(\"scss.builtin.red\",\"Gets the red component of a color.\")},{func:\"green($color)\",desc:S(\"scss.builtin.green\",\"Gets the green component of a color.\")},{func:\"blue($color)\",desc:S(\"scss.builtin.blue\",\"Gets the blue component of a color.\")},{func:\"mix($color, $color, [$weight])\",desc:S(\"scss.builtin.mix\",\"Mixes two colors together.\")},{func:\"hue($color)\",desc:S(\"scss.builtin.hue\",\"Gets the hue component of a color.\")},{func:\"saturation($color)\",desc:S(\"scss.builtin.saturation\",\"Gets the saturation component of a color.\")},{func:\"lightness($color)\",desc:S(\"scss.builtin.lightness\",\"Gets the lightness component of a color.\")},{func:\"adjust-hue($color, $degrees)\",desc:S(\"scss.builtin.adjust-hue\",\"Changes the hue of a color.\")},{func:\"lighten($color, $amount)\",desc:S(\"scss.builtin.lighten\",\"Makes a color lighter.\")},{func:\"darken($color, $amount)\",desc:S(\"scss.builtin.darken\",\"Makes a color darker.\")},{func:\"saturate($color, $amount)\",desc:S(\"scss.builtin.saturate\",\"Makes a color more saturated.\")},{func:\"desaturate($color, $amount)\",desc:S(\"scss.builtin.desaturate\",\"Makes a color less saturated.\")},{func:\"grayscale($color)\",desc:S(\"scss.builtin.grayscale\",\"Converts a color to grayscale.\")},{func:\"complement($color)\",desc:S(\"scss.builtin.complement\",\"Returns the complement of a color.\")},{func:\"invert($color)\",desc:S(\"scss.builtin.invert\",\"Returns the inverse of a color.\")},{func:\"alpha($color)\",desc:S(\"scss.builtin.alpha\",\"Gets the opacity component of a color.\")},{func:\"opacity($color)\",desc:\"Gets the alpha component (opacity) of a color.\"},{func:\"rgba($color, $alpha)\",desc:S(\"scss.builtin.rgba\",\"Changes the alpha component for a color.\")},{func:\"opacify($color, $amount)\",desc:S(\"scss.builtin.opacify\",\"Makes a color more opaque.\")},{func:\"fade-in($color, $amount)\",desc:S(\"scss.builtin.fade-in\",\"Makes a color more opaque.\")},{func:\"transparentize($color, $amount)\",desc:S(\"scss.builtin.transparentize\",\"Makes a color more transparent.\")},{func:\"fade-out($color, $amount)\",desc:S(\"scss.builtin.fade-out\",\"Makes a color more transparent.\")},{func:\"adjust-color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha])\",desc:S(\"scss.builtin.adjust-color\",\"Increases or decreases one or more components of a color.\")},{func:\"scale-color($color, [$red], [$green], [$blue], [$saturation], [$lightness], [$alpha])\",desc:S(\"scss.builtin.scale-color\",\"Fluidly scales one or more properties of a color.\")},{func:\"change-color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha])\",desc:S(\"scss.builtin.change-color\",\"Changes one or more properties of a color.\")},{func:\"ie-hex-str($color)\",desc:S(\"scss.builtin.ie-hex-str\",\"Converts a color into the format understood by IE filters.\")}],e.selectorFuncs=[{func:\"selector-nest($selectors\\u2026)\",desc:S(\"scss.builtin.selector-nest\",\"Nests selector beneath one another like they would be nested in the stylesheet.\")},{func:\"selector-append($selectors\\u2026)\",desc:S(\"scss.builtin.selector-append\",\"Appends selectors to one another without spaces in between.\")},{func:\"selector-extend($selector, $extendee, $extender)\",desc:S(\"scss.builtin.selector-extend\",\"Extends $extendee with $extender within $selector.\")},{func:\"selector-replace($selector, $original, $replacement)\",desc:S(\"scss.builtin.selector-replace\",\"Replaces $original with $replacement within $selector.\")},{func:\"selector-unify($selector1, $selector2)\",desc:S(\"scss.builtin.selector-unify\",\"Unifies two selectors to produce a selector that matches elements matched by both.\")},{func:\"is-superselector($super, $sub)\",desc:S(\"scss.builtin.is-superselector\",\"Returns whether $super matches all the elements $sub does, and possibly more.\")},{func:\"simple-selectors($selector)\",desc:S(\"scss.builtin.simple-selectors\",\"Returns the simple selectors that comprise a compound selector.\")},{func:\"selector-parse($selector)\",desc:S(\"scss.builtin.selector-parse\",\"Parses a selector into the format returned by &.\")}],e.builtInFuncs=[{func:\"unquote($string)\",desc:S(\"scss.builtin.unquote\",\"Removes quotes from a string.\")},{func:\"quote($string)\",desc:S(\"scss.builtin.quote\",\"Adds quotes to a string.\")},{func:\"str-length($string)\",desc:S(\"scss.builtin.str-length\",\"Returns the number of characters in a string.\")},{func:\"str-insert($string, $insert, $index)\",desc:S(\"scss.builtin.str-insert\",\"Inserts $insert into $string at $index.\")},{func:\"str-index($string, $substring)\",desc:S(\"scss.builtin.str-index\",\"Returns the index of the first occurance of $substring in $string.\")},{func:\"str-slice($string, $start-at, [$end-at])\",desc:S(\"scss.builtin.str-slice\",\"Extracts a substring from $string.\")},{func:\"to-upper-case($string)\",desc:S(\"scss.builtin.to-upper-case\",\"Converts a string to upper case.\")},{func:\"to-lower-case($string)\",desc:S(\"scss.builtin.to-lower-case\",\"Converts a string to lower case.\")},{func:\"percentage($number)\",desc:S(\"scss.builtin.percentage\",\"Converts a unitless number to a percentage.\"),type:\"percentage\"},{func:\"round($number)\",desc:S(\"scss.builtin.round\",\"Rounds a number to the nearest whole number.\")},{func:\"ceil($number)\",desc:S(\"scss.builtin.ceil\",\"Rounds a number up to the next whole number.\")},{func:\"floor($number)\",desc:S(\"scss.builtin.floor\",\"Rounds a number down to the previous whole number.\")},{func:\"abs($number)\",desc:S(\"scss.builtin.abs\",\"Returns the absolute value of a number.\")},{func:\"min($numbers)\",desc:S(\"scss.builtin.min\",\"Finds the minimum of several numbers.\")},{func:\"max($numbers)\",desc:S(\"scss.builtin.max\",\"Finds the maximum of several numbers.\")},{func:\"random([$limit])\",desc:S(\"scss.builtin.random\",\"Returns a random number.\")},{func:\"length($list)\",desc:S(\"scss.builtin.length\",\"Returns the length of a list.\")},{func:\"nth($list, $n)\",desc:S(\"scss.builtin.nth\",\"Returns a specific item in a list.\")},{func:\"set-nth($list, $n, $value)\",desc:S(\"scss.builtin.set-nth\",\"Replaces the nth item in a list.\")},{func:\"join($list1, $list2, [$separator])\",desc:S(\"scss.builtin.join\",\"Joins together two lists into one.\")},{func:\"append($list1, $val, [$separator])\",desc:S(\"scss.builtin.append\",\"Appends a single value onto the end of a list.\")},{func:\"zip($lists)\",desc:S(\"scss.builtin.zip\",\"Combines several lists into a single multidimensional list.\")},{func:\"index($list, $value)\",desc:S(\"scss.builtin.index\",\"Returns the position of a value within a list.\")},{func:\"list-separator(#list)\",desc:S(\"scss.builtin.list-separator\",\"Returns the separator of a list.\")},{func:\"map-get($map, $key)\",desc:S(\"scss.builtin.map-get\",\"Returns the value in a map associated with a given key.\")},{func:\"map-merge($map1, $map2)\",desc:S(\"scss.builtin.map-merge\",\"Merges two maps together into a new map.\")},{func:\"map-remove($map, $keys)\",desc:S(\"scss.builtin.map-remove\",\"Returns a new map with keys removed.\")},{func:\"map-keys($map)\",desc:S(\"scss.builtin.map-keys\",\"Returns a list of all keys in a map.\")},{func:\"map-values($map)\",desc:S(\"scss.builtin.map-values\",\"Returns a list of all values in a map.\")},{func:\"map-has-key($map, $key)\",desc:S(\"scss.builtin.map-has-key\",\"Returns whether a map has a value associated with a given key.\")},{func:\"keywords($args)\",desc:S(\"scss.builtin.keywords\",\"Returns the keywords passed to a function that takes variable arguments.\")},{func:\"feature-exists($feature)\",desc:S(\"scss.builtin.feature-exists\",\"Returns whether a feature exists in the current Sass runtime.\")},{func:\"variable-exists($name)\",desc:S(\"scss.builtin.variable-exists\",\"Returns whether a variable with the given name exists in the current scope.\")},{func:\"global-variable-exists($name)\",desc:S(\"scss.builtin.global-variable-exists\",\"Returns whether a variable with the given name exists in the global scope.\")},{func:\"function-exists($name)\",desc:S(\"scss.builtin.function-exists\",\"Returns whether a function with the given name exists.\")},{func:\"mixin-exists($name)\",desc:S(\"scss.builtin.mixin-exists\",\"Returns whether a mixin with the given name exists.\")},{func:\"inspect($value)\",desc:S(\"scss.builtin.inspect\",\"Returns the string representation of a value as it would be represented in Sass.\")},{func:\"type-of($value)\",desc:S(\"scss.builtin.type-of\",\"Returns the type of a value.\")},{func:\"unit($number)\",desc:S(\"scss.builtin.unit\",\"Returns the unit(s) associated with a number.\")},{func:\"unitless($number)\",desc:S(\"scss.builtin.unitless\",\"Returns whether a number has units.\")},{func:\"comparable($number1, $number2)\",desc:S(\"scss.builtin.comparable\",\"Returns whether two numbers can be added, subtracted, or compared.\")},{func:\"call($name, $args\\u2026)\",desc:S(\"scss.builtin.call\",\"Dynamically calls a Sass function.\")}],e.scssAtDirectives=[{label:\"@extend\",documentation:S(\"scss.builtin.@extend\",\"Inherits the styles of another selector.\"),kind:R.Keyword},{label:\"@at-root\",documentation:S(\"scss.builtin.@at-root\",\"Causes one or more rules to be emitted at the root of the document.\"),kind:R.Keyword},{label:\"@debug\",documentation:S(\"scss.builtin.@debug\",\"Prints the value of an expression to the standard error output stream. Useful for debugging complicated Sass files.\"),kind:R.Keyword},{label:\"@warn\",documentation:S(\"scss.builtin.@warn\",\"Prints the value of an expression to the standard error output stream. Useful for libraries that need to warn users of deprecations or recovering from minor mixin usage mistakes. Warnings can be turned off with the `--quiet` command-line option or the `:quiet` Sass option.\"),kind:R.Keyword},{label:\"@error\",documentation:S(\"scss.builtin.@error\",\"Throws the value of an expression as a fatal error with stack trace. Useful for validating arguments to mixins and functions.\"),kind:R.Keyword},{label:\"@if\",documentation:S(\"scss.builtin.@if\",\"Includes the body if the expression does not evaluate to `false` or `null`.\"),insertText:`@if \\${1:expr} {\n\t$0\n}`,insertTextFormat:re.Snippet,kind:R.Keyword},{label:\"@for\",documentation:S(\"scss.builtin.@for\",\"For loop that repeatedly outputs a set of styles for each `$var` in the `from/through` or `from/to` clause.\"),insertText:\"@for \\\\$${1:var} from ${2:start} ${3|to,through|} ${4:end} {\\n\t$0\\n}\",insertTextFormat:re.Snippet,kind:R.Keyword},{label:\"@each\",documentation:S(\"scss.builtin.@each\",\"Each loop that sets `$var` to each item in the list or map, then outputs the styles it contains using that value of `$var`.\"),insertText:\"@each \\\\$${1:var} in ${2:list} {\\n\t$0\\n}\",insertTextFormat:re.Snippet,kind:R.Keyword},{label:\"@while\",documentation:S(\"scss.builtin.@while\",\"While loop that takes an expression and repeatedly outputs the nested styles until the statement evaluates to `false`.\"),insertText:`@while \\${1:condition} {\n\t$0\n}`,insertTextFormat:re.Snippet,kind:R.Keyword},{label:\"@mixin\",documentation:S(\"scss.builtin.@mixin\",\"Defines styles that can be re-used throughout the stylesheet with `@include`.\"),insertText:`@mixin \\${1:name} {\n\t$0\n}`,insertTextFormat:re.Snippet,kind:R.Keyword},{label:\"@include\",documentation:S(\"scss.builtin.@include\",\"Includes the styles defined by another mixin into the current rule.\"),kind:R.Keyword},{label:\"@function\",documentation:S(\"scss.builtin.@function\",\"Defines complex operations that can be re-used throughout stylesheets.\"),kind:R.Keyword}],e.scssModuleLoaders=[{label:\"@use\",documentation:S(\"scss.builtin.@use\",\"Loads mixins, functions, and variables from other Sass stylesheets as 'modules', and combines CSS from multiple stylesheets together.\"),references:[{name:\"Sass documentation\",url:\"https://sass-lang.com/documentation/at-rules/use\"}],insertText:\"@use $0;\",insertTextFormat:re.Snippet,kind:R.Keyword},{label:\"@forward\",documentation:S(\"scss.builtin.@forward\",\"Loads a Sass stylesheet and makes its mixins, functions, and variables available when this stylesheet is loaded with the @use rule.\"),references:[{name:\"Sass documentation\",url:\"https://sass-lang.com/documentation/at-rules/forward\"}],insertText:\"@forward $0;\",insertTextFormat:re.Snippet,kind:R.Keyword}],e.scssModuleBuiltIns=[{label:\"sass:math\",documentation:S(\"scss.builtin.sass:math\",\"Provides functions that operate on numbers.\"),references:[{name:\"Sass documentation\",url:\"https://sass-lang.com/documentation/modules/math\"}]},{label:\"sass:string\",documentation:S(\"scss.builtin.sass:string\",\"Makes it easy to combine, search, or split apart strings.\"),references:[{name:\"Sass documentation\",url:\"https://sass-lang.com/documentation/modules/string\"}]},{label:\"sass:color\",documentation:S(\"scss.builtin.sass:color\",\"Generates new colors based on existing ones, making it easy to build color themes.\"),references:[{name:\"Sass documentation\",url:\"https://sass-lang.com/documentation/modules/color\"}]},{label:\"sass:list\",documentation:S(\"scss.builtin.sass:list\",\"Lets you access and modify values in lists.\"),references:[{name:\"Sass documentation\",url:\"https://sass-lang.com/documentation/modules/list\"}]},{label:\"sass:map\",documentation:S(\"scss.builtin.sass:map\",\"Makes it possible to look up the value associated with a key in a map, and much more.\"),references:[{name:\"Sass documentation\",url:\"https://sass-lang.com/documentation/modules/map\"}]},{label:\"sass:selector\",documentation:S(\"scss.builtin.sass:selector\",\"Provides access to Sass\\u2019s powerful selector engine.\"),references:[{name:\"Sass documentation\",url:\"https://sass-lang.com/documentation/modules/selector\"}]},{label:\"sass:meta\",documentation:S(\"scss.builtin.sass:meta\",\"Exposes the details of Sass\\u2019s inner workings.\"),references:[{name:\"Sass documentation\",url:\"https://sass-lang.com/documentation/modules/meta\"}]}],e}(vt);function qo(n){n.forEach(function(e){if(e.documentation&&e.references&&e.references.length>0){var t=typeof e.documentation==\"string\"?{kind:\"markdown\",value:e.documentation}:{kind:\"markdown\",value:e.documentation.value};t.value+=`\n\n`,t.value+=e.references.map(function(r){return\"[\".concat(r.name,\"](\").concat(r.url,\")\")}).join(\" | \"),e.documentation=t}})}var Oa=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),Go=47,Wa=10,La=13,Ua=12,jr=96,Vr=46,ja=d.CustomToken,Wn=ja++,Ln=function(n){Oa(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.scanNext=function(t){var r=this.escapedJavaScript();return r!==null?this.finishToken(t,r):this.stream.advanceIfChars([Vr,Vr,Vr])?this.finishToken(t,Wn):n.prototype.scanNext.call(this,t)},e.prototype.comment=function(){return n.prototype.comment.call(this)?!0:!this.inURL&&this.stream.advanceIfChars([Go,Go])?(this.stream.advanceWhileChar(function(t){switch(t){case Wa:case La:case Ua:return!1;default:return!0}}),!0):!1},e.prototype.escapedJavaScript=function(){var t=this.stream.peekChar();return t===jr?(this.stream.advance(1),this.stream.advanceWhileChar(function(r){return r!==jr}),this.stream.advanceIfChar(jr)?d.EscapedJavaScript:d.BadEscapedJavaScript):null},e}(Fe);var Ba=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),Ho=function(n){Ba(e,n);function e(){return n.call(this,new Ln)||this}return e.prototype._parseStylesheetStatement=function(t){return t===void 0&&(t=!1),this.peek(d.AtKeyword)?this._parseVariableDeclaration()||this._parsePlugin()||n.prototype._parseStylesheetAtStatement.call(this,t):this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseFunction()||this._parseRuleset(!0)},e.prototype._parseImport=function(){if(!this.peekKeyword(\"@import\")&&!this.peekKeyword(\"@import-once\"))return null;var t=this.create(dt);if(this.consumeToken(),this.accept(d.ParenthesisL)){if(!this.accept(d.Ident))return this.finish(t,f.IdentifierExpected,[d.SemiColon]);do if(!this.accept(d.Comma))break;while(this.accept(d.Ident));if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected,[d.SemiColon])}return!t.addChild(this._parseURILiteral())&&!t.addChild(this._parseStringLiteral())?this.finish(t,f.URIOrStringExpected,[d.SemiColon]):(!this.peek(d.SemiColon)&&!this.peek(d.EOF)&&t.setMedialist(this._parseMediaQueryList()),this.finish(t))},e.prototype._parsePlugin=function(){if(!this.peekKeyword(\"@plugin\"))return null;var t=this.createNode(u.Plugin);return this.consumeToken(),t.addChild(this._parseStringLiteral())?this.accept(d.SemiColon)?this.finish(t):this.finish(t,f.SemiColonExpected):this.finish(t,f.StringLiteralExpected)},e.prototype._parseMediaQuery=function(){var t=n.prototype._parseMediaQuery.call(this);if(!t){var r=this.create(hn);return r.addChild(this._parseVariable())?this.finish(r):null}return t},e.prototype._parseMediaDeclaration=function(t){return t===void 0&&(t=!1),this._tryParseRuleset(t)||this._tryToParseDeclaration()||this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseDetachedRuleSetMixin()||this._parseStylesheetStatement(t)},e.prototype._parseMediaFeatureName=function(){return this._parseIdent()||this._parseVariable()},e.prototype._parseVariableDeclaration=function(t){t===void 0&&(t=[]);var r=this.create($e),i=this.mark();if(!r.setVariable(this._parseVariable(!0)))return null;if(this.accept(d.Colon)){if(this.prevToken&&(r.colonPosition=this.prevToken.offset),r.setValue(this._parseDetachedRuleSet()))r.needsSemicolon=!1;else if(!r.setValue(this._parseExpr()))return this.finish(r,f.VariableValueExpected,[],t);r.addChild(this._parsePrio())}else return this.restoreAtMark(i),null;return this.peek(d.SemiColon)&&(r.semicolonPosition=this.token.offset),this.finish(r)},e.prototype._parseDetachedRuleSet=function(){var t=this.mark();if(this.peekDelim(\"#\")||this.peekDelim(\".\"))if(this.consumeToken(),!this.hasWhitespace()&&this.accept(d.ParenthesisL)){var r=this.create(Ae);if(r.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)r.getParameters().addChild(this._parseMixinParameter())||this.markError(r,f.IdentifierExpected,[],[d.ParenthesisR]);if(!this.accept(d.ParenthesisR))return this.restoreAtMark(t),null}else return this.restoreAtMark(t),null;if(!this.peek(d.CurlyL))return null;var i=this.create(K);return this._parseBody(i,this._parseDetachedRuleSetBody.bind(this)),this.finish(i)},e.prototype._parseDetachedRuleSetBody=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},e.prototype._addLookupChildren=function(t){if(!t.addChild(this._parseLookupValue()))return!1;for(var r=!1;this.peek(d.BracketL)&&(r=!0),!!t.addChild(this._parseLookupValue());)r=!1;return!r},e.prototype._parseLookupValue=function(){var t=this.create(F),r=this.mark();return this.accept(d.BracketL)?(t.addChild(this._parseVariable(!1,!0))||t.addChild(this._parsePropertyIdentifier()))&&this.accept(d.BracketR)||this.accept(d.BracketR)?t:(this.restoreAtMark(r),null):(this.restoreAtMark(r),null)},e.prototype._parseVariable=function(t,r){t===void 0&&(t=!1),r===void 0&&(r=!1);var i=!t&&this.peekDelim(\"$\");if(!this.peekDelim(\"@\")&&!i&&!this.peek(d.AtKeyword))return null;for(var o=this.create(pt),s=this.mark();this.acceptDelim(\"@\")||!t&&this.acceptDelim(\"$\");)if(this.hasWhitespace())return this.restoreAtMark(s),null;return!this.accept(d.AtKeyword)&&!this.accept(d.Ident)?(this.restoreAtMark(s),null):!r&&this.peek(d.BracketL)&&!this._addLookupChildren(o)?(this.restoreAtMark(s),null):o},e.prototype._parseTermExpression=function(){return this._parseVariable()||this._parseEscaped()||n.prototype._parseTermExpression.call(this)||this._tryParseMixinReference(!1)},e.prototype._parseEscaped=function(){if(this.peek(d.EscapedJavaScript)||this.peek(d.BadEscapedJavaScript)){var t=this.createNode(u.EscapedValue);return this.consumeToken(),this.finish(t)}if(this.peekDelim(\"~\")){var t=this.createNode(u.EscapedValue);return this.consumeToken(),this.accept(d.String)||this.accept(d.EscapedJavaScript)?this.finish(t):this.finish(t,f.TermExpected)}return null},e.prototype._parseOperator=function(){var t=this._parseGuardOperator();return t||n.prototype._parseOperator.call(this)},e.prototype._parseGuardOperator=function(){if(this.peekDelim(\">\")){var t=this.createNode(u.Operator);return this.consumeToken(),this.acceptDelim(\"=\"),t}else if(this.peekDelim(\"=\")){var t=this.createNode(u.Operator);return this.consumeToken(),this.acceptDelim(\"<\"),t}else if(this.peekDelim(\"<\")){var t=this.createNode(u.Operator);return this.consumeToken(),this.acceptDelim(\"=\"),t}return null},e.prototype._parseRuleSetDeclaration=function(){return this.peek(d.AtKeyword)?this._parseKeyframe()||this._parseMedia(!0)||this._parseImport()||this._parseSupports(!0)||this._parseDetachedRuleSetMixin()||this._parseVariableDeclaration()||n.prototype._parseRuleSetDeclarationAtStatement.call(this):this._tryParseMixinDeclaration()||this._tryParseRuleset(!0)||this._tryParseMixinReference()||this._parseFunction()||this._parseExtend()||n.prototype._parseRuleSetDeclaration.call(this)},e.prototype._parseKeyframeIdent=function(){return this._parseIdent([A.Keyframe])||this._parseVariable()},e.prototype._parseKeyframeSelector=function(){return this._parseDetachedRuleSetMixin()||n.prototype._parseKeyframeSelector.call(this)},e.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||n.prototype._parseSimpleSelectorBody.call(this)},e.prototype._parseSelector=function(t){var r=this.create(Ee),i=!1;for(t&&(i=r.addChild(this._parseCombinator()));r.addChild(this._parseSimpleSelector());){i=!0;var o=this.mark();if(r.addChild(this._parseGuard())&&this.peek(d.CurlyL))break;this.restoreAtMark(o),r.addChild(this._parseCombinator())}return i?this.finish(r):null},e.prototype._parseSelectorCombinator=function(){if(this.peekDelim(\"&\")){var t=this.createNode(u.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim(\"-\")||this.accept(d.Num)||this.accept(d.Dimension)||t.addChild(this._parseIdent())||this.acceptDelim(\"&\")););return this.finish(t)}return null},e.prototype._parseSelectorIdent=function(){if(!this.peekInterpolatedIdent())return null;var t=this.createNode(u.SelectorInterpolation),r=this._acceptInterpolatedIdent(t);return r?this.finish(t):null},e.prototype._parsePropertyIdentifier=function(t){t===void 0&&(t=!1);var r=/^[\\w-]+/;if(!this.peekInterpolatedIdent()&&!this.peekRegExp(this.token.type,r))return null;var i=this.mark(),o=this.create(te);o.isCustomProperty=this.acceptDelim(\"-\")&&this.acceptDelim(\"-\");var s=!1;return t?o.isCustomProperty?s=o.addChild(this._parseIdent()):s=o.addChild(this._parseRegexp(r)):o.isCustomProperty?s=this._acceptInterpolatedIdent(o):s=this._acceptInterpolatedIdent(o,r),s?(!t&&!this.hasWhitespace()&&(this.acceptDelim(\"+\"),this.hasWhitespace()||this.acceptIdent(\"_\")),this.finish(o)):(this.restoreAtMark(i),null)},e.prototype.peekInterpolatedIdent=function(){return this.peek(d.Ident)||this.peekDelim(\"@\")||this.peekDelim(\"$\")||this.peekDelim(\"-\")},e.prototype._acceptInterpolatedIdent=function(t,r){for(var i=this,o=!1,s=function(){var l=i.mark();return i.acceptDelim(\"-\")&&(i.hasWhitespace()||i.acceptDelim(\"-\"),i.hasWhitespace())?(i.restoreAtMark(l),null):i._parseInterpolation()},a=r?function(){return i.acceptRegexp(r)}:function(){return i.accept(d.Ident)};(a()||t.addChild(this._parseInterpolation()||this.try(s)))&&(o=!0,!this.hasWhitespace()););return o},e.prototype._parseInterpolation=function(){var t=this.mark();if(this.peekDelim(\"@\")||this.peekDelim(\"$\")){var r=this.createNode(u.Interpolation);return this.consumeToken(),this.hasWhitespace()||!this.accept(d.CurlyL)?(this.restoreAtMark(t),null):r.addChild(this._parseIdent())?this.accept(d.CurlyR)?this.finish(r):this.finish(r,f.RightCurlyExpected):this.finish(r,f.IdentifierExpected)}return null},e.prototype._tryParseMixinDeclaration=function(){var t=this.mark(),r=this.create(Ae);if(!r.setIdentifier(this._parseMixinDeclarationIdentifier())||!this.accept(d.ParenthesisL))return this.restoreAtMark(t),null;if(r.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)r.getParameters().addChild(this._parseMixinParameter())||this.markError(r,f.IdentifierExpected,[],[d.ParenthesisR]);return this.accept(d.ParenthesisR)?(r.setGuard(this._parseGuard()),this.peek(d.CurlyL)?this._parseBody(r,this._parseMixInBodyDeclaration.bind(this)):(this.restoreAtMark(t),null)):(this.restoreAtMark(t),null)},e.prototype._parseMixInBodyDeclaration=function(){return this._parseFontFace()||this._parseRuleSetDeclaration()},e.prototype._parseMixinDeclarationIdentifier=function(){var t;if(this.peekDelim(\"#\")||this.peekDelim(\".\")){if(t=this.create(te),this.consumeToken(),this.hasWhitespace()||!t.addChild(this._parseIdent()))return null}else if(this.peek(d.Hash))t=this.create(te),this.consumeToken();else return null;return t.referenceTypes=[A.Mixin],this.finish(t)},e.prototype._parsePseudo=function(){if(!this.peek(d.Colon))return null;var t=this.mark(),r=this.create(qe);return this.consumeToken(),this.acceptIdent(\"extend\")?this._completeExtends(r):(this.restoreAtMark(t),n.prototype._parsePseudo.call(this))},e.prototype._parseExtend=function(){if(!this.peekDelim(\"&\"))return null;var t=this.mark(),r=this.create(qe);return this.consumeToken(),this.hasWhitespace()||!this.accept(d.Colon)||!this.acceptIdent(\"extend\")?(this.restoreAtMark(t),null):this._completeExtends(r)},e.prototype._completeExtends=function(t){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected);var r=t.getSelectors();if(!r.addChild(this._parseSelector(!0)))return this.finish(t,f.SelectorExpected);for(;this.accept(d.Comma);)if(!r.addChild(this._parseSelector(!0)))return this.finish(t,f.SelectorExpected);return this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},e.prototype._parseDetachedRuleSetMixin=function(){if(!this.peek(d.AtKeyword))return null;var t=this.mark(),r=this.create(et);return r.addChild(this._parseVariable(!0))&&(this.hasWhitespace()||!this.accept(d.ParenthesisL))?(this.restoreAtMark(t),null):this.accept(d.ParenthesisR)?this.finish(r):this.finish(r,f.RightParenthesisExpected)},e.prototype._tryParseMixinReference=function(t){t===void 0&&(t=!0);for(var r=this.mark(),i=this.create(et),o=this._parseMixinDeclarationIdentifier();o;){this.acceptDelim(\">\");var s=this._parseMixinDeclarationIdentifier();if(s)i.getNamespaces().addChild(o),o=s;else break}if(!i.setIdentifier(o))return this.restoreAtMark(r),null;var a=!1;if(this.accept(d.ParenthesisL)){if(a=!0,i.getArguments().addChild(this._parseMixinArgument())){for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)if(!i.getArguments().addChild(this._parseMixinArgument()))return this.finish(i,f.ExpressionExpected)}if(!this.accept(d.ParenthesisR))return this.finish(i,f.RightParenthesisExpected);o.referenceTypes=[A.Mixin]}else o.referenceTypes=[A.Mixin,A.Rule];return this.peek(d.BracketL)?t||this._addLookupChildren(i):i.addChild(this._parsePrio()),!a&&!this.peek(d.SemiColon)&&!this.peek(d.CurlyR)&&!this.peek(d.EOF)?(this.restoreAtMark(r),null):this.finish(i)},e.prototype._parseMixinArgument=function(){var t=this.create(we),r=this.mark(),i=this._parseVariable();return i&&(this.accept(d.Colon)?t.setIdentifier(i):this.restoreAtMark(r)),t.setValue(this._parseDetachedRuleSet()||this._parseExpr(!0))?this.finish(t):(this.restoreAtMark(r),null)},e.prototype._parseMixinParameter=function(){var t=this.create(Be);if(this.peekKeyword(\"@rest\")){var r=this.create(F);return this.consumeToken(),this.accept(Wn)?(t.setIdentifier(this.finish(r)),this.finish(t)):this.finish(t,f.DotExpected,[],[d.Comma,d.ParenthesisR])}if(this.peek(Wn)){var i=this.create(F);return this.consumeToken(),t.setIdentifier(this.finish(i)),this.finish(t)}var o=!1;return t.setIdentifier(this._parseVariable())&&(this.accept(d.Colon),o=!0),!t.setDefaultValue(this._parseDetachedRuleSet()||this._parseExpr(!0))&&!o?null:this.finish(t)},e.prototype._parseGuard=function(){if(!this.peekIdent(\"when\"))return null;var t=this.create(Pi);if(this.consumeToken(),t.isNegated=this.acceptIdent(\"not\"),!t.getConditions().addChild(this._parseGuardCondition()))return this.finish(t,f.ConditionExpected);for(;this.acceptIdent(\"and\")||this.accept(d.Comma);)if(!t.getConditions().addChild(this._parseGuardCondition()))return this.finish(t,f.ConditionExpected);return this.finish(t)},e.prototype._parseGuardCondition=function(){if(!this.peek(d.ParenthesisL))return null;var t=this.create(Ai);return this.consumeToken(),t.addChild(this._parseExpr()),this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},e.prototype._parseFunction=function(){var t=this.mark(),r=this.create(Pe);if(!r.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(d.ParenthesisL))return this.restoreAtMark(t),null;if(r.getArguments().addChild(this._parseMixinArgument())){for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)if(!r.getArguments().addChild(this._parseMixinArgument()))return this.finish(r,f.ExpressionExpected)}return this.accept(d.ParenthesisR)?this.finish(r):this.finish(r,f.RightParenthesisExpected)},e.prototype._parseFunctionIdentifier=function(){if(this.peekDelim(\"%\")){var t=this.create(te);return t.referenceTypes=[A.Function],this.consumeToken(),this.finish(t)}return n.prototype._parseFunctionIdentifier.call(this)},e.prototype._parseURLArgument=function(){var t=this.mark(),r=n.prototype._parseURLArgument.call(this);if(!r||!this.peek(d.ParenthesisR)){this.restoreAtMark(t);var i=this.create(F);return i.addChild(this._parseBinaryExpr()),this.finish(i)}return r},e}(gt);var $a=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),I=H(),Jo=function(n){$a(e,n);function e(t,r){return n.call(this,\"@\",t,r)||this}return e.prototype.createFunctionProposals=function(t,r,i,o){for(var s=0,a=t;s<a.length;s++){var l=a[s],c={label:l.name,detail:l.example,documentation:l.description,textEdit:T.replace(this.getCompletionRange(r),l.name+\"($0)\"),insertTextFormat:re.Snippet,kind:R.Function};i&&(c.sortText=\"z\"),o.items.push(c)}return o},e.prototype.getTermProposals=function(t,r,i){var o=e.builtInProposals;return t&&(o=o.filter(function(s){return!s.type||!t.restrictions||t.restrictions.indexOf(s.type)!==-1})),this.createFunctionProposals(o,r,!0,i),n.prototype.getTermProposals.call(this,t,r,i)},e.prototype.getColorProposals=function(t,r,i){return this.createFunctionProposals(e.colorProposals,r,!1,i),n.prototype.getColorProposals.call(this,t,r,i)},e.prototype.getCompletionsForDeclarationProperty=function(t,r){return this.getCompletionsForSelector(null,!0,r),n.prototype.getCompletionsForDeclarationProperty.call(this,t,r)},e.builtInProposals=[{name:\"if\",example:\"if(condition, trueValue [, falseValue]);\",description:I(\"less.builtin.if\",\"returns one of two values depending on a condition.\")},{name:\"boolean\",example:\"boolean(condition);\",description:I(\"less.builtin.boolean\",'\"store\" a boolean test for later evaluation in a guard or if().')},{name:\"length\",example:\"length(@list);\",description:I(\"less.builtin.length\",\"returns the number of elements in a value list\")},{name:\"extract\",example:\"extract(@list, index);\",description:I(\"less.builtin.extract\",\"returns a value at the specified position in the list\")},{name:\"range\",example:\"range([start, ] end [, step]);\",description:I(\"less.builtin.range\",\"generate a list spanning a range of values\")},{name:\"each\",example:\"each(@list, ruleset);\",description:I(\"less.builtin.each\",\"bind the evaluation of a ruleset to each member of a list.\")},{name:\"escape\",example:\"escape(@string);\",description:I(\"less.builtin.escape\",\"URL encodes a string\")},{name:\"e\",example:\"e(@string);\",description:I(\"less.builtin.e\",\"escape string content\")},{name:\"replace\",example:\"replace(@string, @pattern, @replacement[, @flags]);\",description:I(\"less.builtin.replace\",\"string replace\")},{name:\"unit\",example:\"unit(@dimension, [@unit: '']);\",description:I(\"less.builtin.unit\",\"remove or change the unit of a dimension\")},{name:\"color\",example:\"color(@string);\",description:I(\"less.builtin.color\",\"parses a string to a color\"),type:\"color\"},{name:\"convert\",example:\"convert(@value, unit);\",description:I(\"less.builtin.convert\",\"converts numbers from one type into another\")},{name:\"data-uri\",example:\"data-uri([mimetype,] url);\",description:I(\"less.builtin.data-uri\",\"inlines a resource and falls back to `url()`\"),type:\"url\"},{name:\"abs\",description:I(\"less.builtin.abs\",\"absolute value of a number\"),example:\"abs(number);\"},{name:\"acos\",description:I(\"less.builtin.acos\",\"arccosine - inverse of cosine function\"),example:\"acos(number);\"},{name:\"asin\",description:I(\"less.builtin.asin\",\"arcsine - inverse of sine function\"),example:\"asin(number);\"},{name:\"ceil\",example:\"ceil(@number);\",description:I(\"less.builtin.ceil\",\"rounds up to an integer\")},{name:\"cos\",description:I(\"less.builtin.cos\",\"cosine function\"),example:\"cos(number);\"},{name:\"floor\",description:I(\"less.builtin.floor\",\"rounds down to an integer\"),example:\"floor(@number);\"},{name:\"percentage\",description:I(\"less.builtin.percentage\",\"converts to a %, e.g. 0.5 > 50%\"),example:\"percentage(@number);\",type:\"percentage\"},{name:\"round\",description:I(\"less.builtin.round\",\"rounds a number to a number of places\"),example:\"round(number, [places: 0]);\"},{name:\"sqrt\",description:I(\"less.builtin.sqrt\",\"calculates square root of a number\"),example:\"sqrt(number);\"},{name:\"sin\",description:I(\"less.builtin.sin\",\"sine function\"),example:\"sin(number);\"},{name:\"tan\",description:I(\"less.builtin.tan\",\"tangent function\"),example:\"tan(number);\"},{name:\"atan\",description:I(\"less.builtin.atan\",\"arctangent - inverse of tangent function\"),example:\"atan(number);\"},{name:\"pi\",description:I(\"less.builtin.pi\",\"returns pi\"),example:\"pi();\"},{name:\"pow\",description:I(\"less.builtin.pow\",\"first argument raised to the power of the second argument\"),example:\"pow(@base, @exponent);\"},{name:\"mod\",description:I(\"less.builtin.mod\",\"first argument modulus second argument\"),example:\"mod(number, number);\"},{name:\"min\",description:I(\"less.builtin.min\",\"returns the lowest of one or more values\"),example:\"min(@x, @y);\"},{name:\"max\",description:I(\"less.builtin.max\",\"returns the lowest of one or more values\"),example:\"max(@x, @y);\"}],e.colorProposals=[{name:\"argb\",example:\"argb(@color);\",description:I(\"less.builtin.argb\",\"creates a #AARRGGBB\")},{name:\"hsl\",example:\"hsl(@hue, @saturation, @lightness);\",description:I(\"less.builtin.hsl\",\"creates a color\")},{name:\"hsla\",example:\"hsla(@hue, @saturation, @lightness, @alpha);\",description:I(\"less.builtin.hsla\",\"creates a color\")},{name:\"hsv\",example:\"hsv(@hue, @saturation, @value);\",description:I(\"less.builtin.hsv\",\"creates a color\")},{name:\"hsva\",example:\"hsva(@hue, @saturation, @value, @alpha);\",description:I(\"less.builtin.hsva\",\"creates a color\")},{name:\"hue\",example:\"hue(@color);\",description:I(\"less.builtin.hue\",\"returns the `hue` channel of `@color` in the HSL space\")},{name:\"saturation\",example:\"saturation(@color);\",description:I(\"less.builtin.saturation\",\"returns the `saturation` channel of `@color` in the HSL space\")},{name:\"lightness\",example:\"lightness(@color);\",description:I(\"less.builtin.lightness\",\"returns the `lightness` channel of `@color` in the HSL space\")},{name:\"hsvhue\",example:\"hsvhue(@color);\",description:I(\"less.builtin.hsvhue\",\"returns the `hue` channel of `@color` in the HSV space\")},{name:\"hsvsaturation\",example:\"hsvsaturation(@color);\",description:I(\"less.builtin.hsvsaturation\",\"returns the `saturation` channel of `@color` in the HSV space\")},{name:\"hsvvalue\",example:\"hsvvalue(@color);\",description:I(\"less.builtin.hsvvalue\",\"returns the `value` channel of `@color` in the HSV space\")},{name:\"red\",example:\"red(@color);\",description:I(\"less.builtin.red\",\"returns the `red` channel of `@color`\")},{name:\"green\",example:\"green(@color);\",description:I(\"less.builtin.green\",\"returns the `green` channel of `@color`\")},{name:\"blue\",example:\"blue(@color);\",description:I(\"less.builtin.blue\",\"returns the `blue` channel of `@color`\")},{name:\"alpha\",example:\"alpha(@color);\",description:I(\"less.builtin.alpha\",\"returns the `alpha` channel of `@color`\")},{name:\"luma\",example:\"luma(@color);\",description:I(\"less.builtin.luma\",\"returns the `luma` value (perceptual brightness) of `@color`\")},{name:\"saturate\",example:\"saturate(@color, 10%);\",description:I(\"less.builtin.saturate\",\"return `@color` 10% points more saturated\")},{name:\"desaturate\",example:\"desaturate(@color, 10%);\",description:I(\"less.builtin.desaturate\",\"return `@color` 10% points less saturated\")},{name:\"lighten\",example:\"lighten(@color, 10%);\",description:I(\"less.builtin.lighten\",\"return `@color` 10% points lighter\")},{name:\"darken\",example:\"darken(@color, 10%);\",description:I(\"less.builtin.darken\",\"return `@color` 10% points darker\")},{name:\"fadein\",example:\"fadein(@color, 10%);\",description:I(\"less.builtin.fadein\",\"return `@color` 10% points less transparent\")},{name:\"fadeout\",example:\"fadeout(@color, 10%);\",description:I(\"less.builtin.fadeout\",\"return `@color` 10% points more transparent\")},{name:\"fade\",example:\"fade(@color, 50%);\",description:I(\"less.builtin.fade\",\"return `@color` with 50% transparency\")},{name:\"spin\",example:\"spin(@color, 10);\",description:I(\"less.builtin.spin\",\"return `@color` with a 10 degree larger in hue\")},{name:\"mix\",example:\"mix(@color1, @color2, [@weight: 50%]);\",description:I(\"less.builtin.mix\",\"return a mix of `@color1` and `@color2`\")},{name:\"greyscale\",example:\"greyscale(@color);\",description:I(\"less.builtin.greyscale\",\"returns a grey, 100% desaturated color\")},{name:\"contrast\",example:\"contrast(@color1, [@darkcolor: black], [@lightcolor: white], [@threshold: 43%]);\",description:I(\"less.builtin.contrast\",\"return `@darkcolor` if `@color1 is> 43% luma` otherwise return `@lightcolor`, see notes\")},{name:\"multiply\",example:\"multiply(@color1, @color2);\"},{name:\"screen\",example:\"screen(@color1, @color2);\"},{name:\"overlay\",example:\"overlay(@color1, @color2);\"},{name:\"softlight\",example:\"softlight(@color1, @color2);\"},{name:\"hardlight\",example:\"hardlight(@color1, @color2);\"},{name:\"difference\",example:\"difference(@color1, @color2);\"},{name:\"exclusion\",example:\"exclusion(@color1, @color2);\"},{name:\"average\",example:\"average(@color1, @color2);\"},{name:\"negation\",example:\"negation(@color1, @color2);\"}],e}(vt);function Yo(n,e){var t=qa(n);return Ka(t,e)}function qa(n){function e(p){return n.positionAt(p.offset).line}function t(p){return n.positionAt(p.offset+p.len).line}function r(){switch(n.languageId){case\"scss\":return new Nn;case\"less\":return new Ln;default:return new Fe}}function i(p,m){var g=e(p),w=t(p);return g!==w?{startLine:g,endLine:w,kind:m}:null}var o=[],s=[],a=r();a.ignoreComment=!1,a.setSource(n.getText());for(var l=a.scan(),c=null,h=function(){switch(l.type){case d.CurlyL:case xt:{s.push({line:e(l),type:\"brace\",isStart:!0});break}case d.CurlyR:{if(s.length!==0){var p=Xo(s,\"brace\");if(!p)break;var m=t(l);p.type===\"brace\"&&(c&&t(c)!==m&&m--,p.line!==m&&o.push({startLine:p.line,endLine:m,kind:void 0}))}break}case d.Comment:{var g=function(D){return D===\"#region\"?{line:e(l),type:\"comment\",isStart:!0}:{line:t(l),type:\"comment\",isStart:!1}},w=function(D){var M=D.text.match(/^\\s*\\/\\*\\s*(#region|#endregion)\\b\\s*(.*?)\\s*\\*\\//);if(M)return g(M[1]);if(n.languageId===\"scss\"||n.languageId===\"less\"){var z=D.text.match(/^\\s*\\/\\/\\s*(#region|#endregion)\\b\\s*(.*?)\\s*/);if(z)return g(z[1])}return null},x=w(l);if(x)if(x.isStart)s.push(x);else{var p=Xo(s,\"comment\");if(!p)break;p.type===\"comment\"&&p.line!==x.line&&o.push({startLine:p.line,endLine:x.line,kind:\"region\"})}else{var y=i(l,\"comment\");y&&o.push(y)}break}}c=l,l=a.scan()};l.type!==d.EOF;)h();return o}function Xo(n,e){if(n.length===0)return null;for(var t=n.length-1;t>=0;t--)if(n[t].type===e&&n[t].isStart)return n.splice(t,1)[0];return null}function Ka(n,e){var t=e&&e.rangeLimit||Number.MAX_VALUE,r=n.sort(function(s,a){var l=s.startLine-a.startLine;return l===0&&(l=s.endLine-a.endLine),l}),i=[],o=-1;return r.forEach(function(s){s.startLine<o&&o<s.endLine||(i.push(s),o=s.endLine)}),i.length<t?i:i.slice(0,t)}var Qo;(function(){\"use strict\";var n=[,,function(i){function o(l){this.__parent=l,this.__character_count=0,this.__indent_count=-1,this.__alignment_count=0,this.__wrap_point_index=0,this.__wrap_point_character_count=0,this.__wrap_point_indent_count=-1,this.__wrap_point_alignment_count=0,this.__items=[]}o.prototype.clone_empty=function(){var l=new o(this.__parent);return l.set_indent(this.__indent_count,this.__alignment_count),l},o.prototype.item=function(l){return l<0?this.__items[this.__items.length+l]:this.__items[l]},o.prototype.has_match=function(l){for(var c=this.__items.length-1;c>=0;c--)if(this.__items[c].match(l))return!0;return!1},o.prototype.set_indent=function(l,c){this.is_empty()&&(this.__indent_count=l||0,this.__alignment_count=c||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},o.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},o.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},o.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var l=this.__parent.current_line;return l.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),l.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),l.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count,l.__items[0]===\" \"&&(l.__items.splice(0,1),l.__character_count-=1),!0}return!1},o.prototype.is_empty=function(){return this.__items.length===0},o.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},o.prototype.push=function(l){this.__items.push(l);var c=l.lastIndexOf(`\n`);c!==-1?this.__character_count=l.length-c:this.__character_count+=l.length},o.prototype.pop=function(){var l=null;return this.is_empty()||(l=this.__items.pop(),this.__character_count-=l.length),l},o.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},o.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},o.prototype.trim=function(){for(;this.last()===\" \";)this.__items.pop(),this.__character_count-=1},o.prototype.toString=function(){var l=\"\";return this.is_empty()?this.__parent.indent_empty_lines&&(l=this.__parent.get_indent_string(this.__indent_count)):(l=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),l+=this.__items.join(\"\")),l};function s(l,c){this.__cache=[\"\"],this.__indent_size=l.indent_size,this.__indent_string=l.indent_char,l.indent_with_tabs||(this.__indent_string=new Array(l.indent_size+1).join(l.indent_char)),c=c||\"\",l.indent_level>0&&(c=new Array(l.indent_level+1).join(this.__indent_string)),this.__base_string=c,this.__base_string_length=c.length}s.prototype.get_indent_size=function(l,c){var h=this.__base_string_length;return c=c||0,l<0&&(h=0),h+=l*this.__indent_size,h+=c,h},s.prototype.get_indent_string=function(l,c){var h=this.__base_string;return c=c||0,l<0&&(l=0,h=\"\"),c+=l*this.__indent_size,this.__ensure_cache(c),h+=this.__cache[c],h},s.prototype.__ensure_cache=function(l){for(;l>=this.__cache.length;)this.__add_column()},s.prototype.__add_column=function(){var l=this.__cache.length,c=0,h=\"\";this.__indent_size&&l>=this.__indent_size&&(c=Math.floor(l/this.__indent_size),l-=c*this.__indent_size,h=new Array(c+1).join(this.__indent_string)),l&&(h+=new Array(l+1).join(\" \")),this.__cache.push(h)};function a(l,c){this.__indent_cache=new s(l,c),this.raw=!1,this._end_with_newline=l.end_with_newline,this.indent_size=l.indent_size,this.wrap_line_length=l.wrap_line_length,this.indent_empty_lines=l.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new o(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}a.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},a.prototype.get_line_number=function(){return this.__lines.length},a.prototype.get_indent_string=function(l,c){return this.__indent_cache.get_indent_string(l,c)},a.prototype.get_indent_size=function(l,c){return this.__indent_cache.get_indent_size(l,c)},a.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},a.prototype.add_new_line=function(l){return this.is_empty()||!l&&this.just_added_newline()?!1:(this.raw||this.__add_outputline(),!0)},a.prototype.get_code=function(l){this.trim(!0);var c=this.current_line.pop();c&&(c[c.length-1]===`\n`&&(c=c.replace(/\\n+$/g,\"\")),this.current_line.push(c)),this._end_with_newline&&this.__add_outputline();var h=this.__lines.join(`\n`);return l!==`\n`&&(h=h.replace(/[\\n]/g,l)),h},a.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},a.prototype.set_indent=function(l,c){return l=l||0,c=c||0,this.next_line.set_indent(l,c),this.__lines.length>1?(this.current_line.set_indent(l,c),!0):(this.current_line.set_indent(),!1)},a.prototype.add_raw_token=function(l){for(var c=0;c<l.newlines;c++)this.__add_outputline();this.current_line.set_indent(-1),this.current_line.push(l.whitespace_before),this.current_line.push(l.text),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1},a.prototype.add_token=function(l){this.__add_space_before_token(),this.current_line.push(l),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=this.current_line._allow_wrap()},a.prototype.__add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&(this.non_breaking_space||this.set_wrap_point(),this.current_line.push(\" \"))},a.prototype.remove_indent=function(l){for(var c=this.__lines.length;l<c;)this.__lines[l]._remove_indent(),l++;this.current_line._remove_wrap_indent()},a.prototype.trim=function(l){for(l=l===void 0?!1:l,this.current_line.trim();l&&this.__lines.length>1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},a.prototype.just_added_newline=function(){return this.current_line.is_empty()},a.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},a.prototype.ensure_empty_line_above=function(l,c){for(var h=this.__lines.length-2;h>=0;){var p=this.__lines[h];if(p.is_empty())break;if(p.item(0).indexOf(l)!==0&&p.item(-1)!==c){this.__lines.splice(h+1,0,new o(this)),this.previous_line=this.__lines[this.__lines.length-2];break}h--}},i.exports.Output=a},,,,function(i){function o(l,c){this.raw_options=s(l,c),this.disabled=this._get_boolean(\"disabled\"),this.eol=this._get_characters(\"eol\",\"auto\"),this.end_with_newline=this._get_boolean(\"end_with_newline\"),this.indent_size=this._get_number(\"indent_size\",4),this.indent_char=this._get_characters(\"indent_char\",\" \"),this.indent_level=this._get_number(\"indent_level\"),this.preserve_newlines=this._get_boolean(\"preserve_newlines\",!0),this.max_preserve_newlines=this._get_number(\"max_preserve_newlines\",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean(\"indent_with_tabs\",this.indent_char===\"\t\"),this.indent_with_tabs&&(this.indent_char=\"\t\",this.indent_size===1&&(this.indent_size=4)),this.wrap_line_length=this._get_number(\"wrap_line_length\",this._get_number(\"max_char\")),this.indent_empty_lines=this._get_boolean(\"indent_empty_lines\"),this.templating=this._get_selection_list(\"templating\",[\"auto\",\"none\",\"django\",\"erb\",\"handlebars\",\"php\",\"smarty\"],[\"auto\"])}o.prototype._get_array=function(l,c){var h=this.raw_options[l],p=c||[];return typeof h==\"object\"?h!==null&&typeof h.concat==\"function\"&&(p=h.concat()):typeof h==\"string\"&&(p=h.split(/[^a-zA-Z0-9_\\/\\-]+/)),p},o.prototype._get_boolean=function(l,c){var h=this.raw_options[l],p=h===void 0?!!c:!!h;return p},o.prototype._get_characters=function(l,c){var h=this.raw_options[l],p=c||\"\";return typeof h==\"string\"&&(p=h.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,`\n`).replace(/\\\\t/,\"\t\")),p},o.prototype._get_number=function(l,c){var h=this.raw_options[l];c=parseInt(c,10),isNaN(c)&&(c=0);var p=parseInt(h,10);return isNaN(p)&&(p=c),p},o.prototype._get_selection=function(l,c,h){var p=this._get_selection_list(l,c,h);if(p.length!==1)throw new Error(\"Invalid Option Value: The option '\"+l+`' can only be one of the following values:\n`+c+`\nYou passed in: '`+this.raw_options[l]+\"'\");return p[0]},o.prototype._get_selection_list=function(l,c,h){if(!c||c.length===0)throw new Error(\"Selection list cannot be empty.\");if(h=h||[c[0]],!this._is_valid_selection(h,c))throw new Error(\"Invalid Default Value!\");var p=this._get_array(l,h);if(!this._is_valid_selection(p,c))throw new Error(\"Invalid Option Value: The option '\"+l+`' can contain only the following values:\n`+c+`\nYou passed in: '`+this.raw_options[l]+\"'\");return p},o.prototype._is_valid_selection=function(l,c){return l.length&&c.length&&!l.some(function(h){return c.indexOf(h)===-1})};function s(l,c){var h={};l=a(l);var p;for(p in l)p!==c&&(h[p]=l[p]);if(c&&l[c])for(p in l[c])h[p]=l[c][p];return h}function a(l){var c={},h;for(h in l){var p=h.replace(/-/g,\"_\");c[p]=l[h]}return c}i.exports.Options=o,i.exports.normalizeOpts=a,i.exports.mergeOpts=s},,function(i){var o=RegExp.prototype.hasOwnProperty(\"sticky\");function s(a){this.__input=a||\"\",this.__input_length=this.__input.length,this.__position=0}s.prototype.restart=function(){this.__position=0},s.prototype.back=function(){this.__position>0&&(this.__position-=1)},s.prototype.hasNext=function(){return this.__position<this.__input_length},s.prototype.next=function(){var a=null;return this.hasNext()&&(a=this.__input.charAt(this.__position),this.__position+=1),a},s.prototype.peek=function(a){var l=null;return a=a||0,a+=this.__position,a>=0&&a<this.__input_length&&(l=this.__input.charAt(a)),l},s.prototype.__match=function(a,l){a.lastIndex=l;var c=a.exec(this.__input);return c&&!(o&&a.sticky)&&c.index!==l&&(c=null),c},s.prototype.test=function(a,l){return l=l||0,l+=this.__position,l>=0&&l<this.__input_length?!!this.__match(a,l):!1},s.prototype.testChar=function(a,l){var c=this.peek(l);return a.lastIndex=0,c!==null&&a.test(c)},s.prototype.match=function(a){var l=this.__match(a,this.__position);return l?this.__position+=l[0].length:l=null,l},s.prototype.read=function(a,l,c){var h=\"\",p;return a&&(p=this.match(a),p&&(h+=p[0])),l&&(p||!a)&&(h+=this.readUntil(l,c)),h},s.prototype.readUntil=function(a,l){var c=\"\",h=this.__position;a.lastIndex=this.__position;var p=a.exec(this.__input);return p?(h=p.index,l&&(h+=p[0].length)):h=this.__input_length,c=this.__input.substring(this.__position,h),this.__position=h,c},s.prototype.readUntilAfter=function(a){return this.readUntil(a,!0)},s.prototype.get_regexp=function(a,l){var c=null,h=\"g\";return l&&o&&(h=\"y\"),typeof a==\"string\"&&a!==\"\"?c=new RegExp(a,h):a&&(c=new RegExp(a.source,h)),c},s.prototype.get_literal_regexp=function(a){return RegExp(a.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"))},s.prototype.peekUntilAfter=function(a){var l=this.__position,c=this.readUntilAfter(a);return this.__position=l,c},s.prototype.lookBack=function(a){var l=this.__position-1;return l>=a.length&&this.__input.substring(l-a.length,l).toLowerCase()===a},i.exports.InputScanner=s},,,,,function(i){function o(s,a){s=typeof s==\"string\"?s:s.source,a=typeof a==\"string\"?a:a.source,this.__directives_block_pattern=new RegExp(s+/ beautify( \\w+[:]\\w+)+ /.source+a,\"g\"),this.__directive_pattern=/ (\\w+)[:](\\w+)/g,this.__directives_end_ignore_pattern=new RegExp(s+/\\sbeautify\\signore:end\\s/.source+a,\"g\")}o.prototype.get_directives=function(s){if(!s.match(this.__directives_block_pattern))return null;var a={};this.__directive_pattern.lastIndex=0;for(var l=this.__directive_pattern.exec(s);l;)a[l[1]]=l[2],l=this.__directive_pattern.exec(s);return a},o.prototype.readIgnored=function(s){return s.readUntilAfter(this.__directives_end_ignore_pattern)},i.exports.Directives=o},,function(i,o,s){var a=s(16).Beautifier,l=s(17).Options;function c(h,p){var m=new a(h,p);return m.beautify()}i.exports=c,i.exports.defaultOptions=function(){return new l}},function(i,o,s){var a=s(17).Options,l=s(2).Output,c=s(8).InputScanner,h=s(13).Directives,p=new h(/\\/\\*/,/\\*\\//),m=/\\r\\n|[\\r\\n]/,g=/\\r\\n|[\\r\\n]/g,w=/\\s/,x=/(?:\\s|\\n)+/g,y=/\\/\\*(?:[\\s\\S]*?)((?:\\*\\/)|$)/g,D=/\\/\\/(?:[^\\n\\r\\u2028\\u2029]*)/g;function M(z,P){this._source_text=z||\"\",this._options=new a(P),this._ch=null,this._input=null,this.NESTED_AT_RULE={\"@page\":!0,\"@font-face\":!0,\"@keyframes\":!0,\"@media\":!0,\"@supports\":!0,\"@document\":!0},this.CONDITIONAL_GROUP_RULE={\"@media\":!0,\"@supports\":!0,\"@document\":!0}}M.prototype.eatString=function(z){var P=\"\";for(this._ch=this._input.next();this._ch;){if(P+=this._ch,this._ch===\"\\\\\")P+=this._input.next();else if(z.indexOf(this._ch)!==-1||this._ch===`\n`)break;this._ch=this._input.next()}return P},M.prototype.eatWhitespace=function(z){for(var P=w.test(this._input.peek()),L=0;w.test(this._input.peek());)this._ch=this._input.next(),z&&this._ch===`\n`&&(L===0||L<this._options.max_preserve_newlines)&&(L++,this._output.add_new_line(!0));return P},M.prototype.foundNestedPseudoClass=function(){for(var z=0,P=1,L=this._input.peek(P);L;){if(L===\"{\")return!0;if(L===\"(\")z+=1;else if(L===\")\"){if(z===0)return!1;z-=1}else if(L===\";\"||L===\"}\")return!1;P++,L=this._input.peek(P)}return!1},M.prototype.print_string=function(z){this._output.set_indent(this._indentLevel),this._output.non_breaking_space=!0,this._output.add_token(z)},M.prototype.preserveSingleSpace=function(z){z&&(this._output.space_before_token=!0)},M.prototype.indent=function(){this._indentLevel++},M.prototype.outdent=function(){this._indentLevel>0&&this._indentLevel--},M.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var z=this._source_text,P=this._options.eol;P===\"auto\"&&(P=`\n`,z&&m.test(z||\"\")&&(P=z.match(m)[0])),z=z.replace(g,`\n`);var L=z.match(/^[\\t ]*/)[0];this._output=new l(this._options,L),this._input=new c(z),this._indentLevel=0,this._nestedLevel=0,this._ch=null;for(var $=0,ue=!1,oe=!1,me=!1,ve=!1,ye=!1,ke=this._ch,pe,G,Ie;pe=this._input.read(x),G=pe!==\"\",Ie=ke,this._ch=this._input.next(),this._ch===\"\\\\\"&&this._input.hasNext()&&(this._ch+=this._input.next()),ke=this._ch,this._ch;)if(this._ch===\"/\"&&this._input.peek()===\"*\"){this._output.add_new_line(),this._input.back();var fe=this._input.read(y),C=p.get_directives(fe);C&&C.ignore===\"start\"&&(fe+=p.readIgnored(this._input)),this.print_string(fe),this.eatWhitespace(!0),this._output.add_new_line()}else if(this._ch===\"/\"&&this._input.peek()===\"/\")this._output.space_before_token=!0,this._input.back(),this.print_string(this._input.read(D)),this.eatWhitespace(!0);else if(this._ch===\"@\")if(this.preserveSingleSpace(G),this._input.peek()===\"{\")this.print_string(this._ch+this.eatString(\"}\"));else{this.print_string(this._ch);var b=this._input.peekUntilAfter(/[: ,;{}()[\\]\\/='\"]/g);b.match(/[ :]$/)&&(b=this.eatString(\": \").replace(/\\s$/,\"\"),this.print_string(b),this._output.space_before_token=!0),b=b.replace(/\\s$/,\"\"),b===\"extend\"?ve=!0:b===\"import\"&&(ye=!0),b in this.NESTED_AT_RULE?(this._nestedLevel+=1,b in this.CONDITIONAL_GROUP_RULE&&(me=!0)):!ue&&$===0&&b.indexOf(\":\")!==-1&&(oe=!0,this.indent())}else this._ch===\"#\"&&this._input.peek()===\"{\"?(this.preserveSingleSpace(G),this.print_string(this._ch+this.eatString(\"}\"))):this._ch===\"{\"?(oe&&(oe=!1,this.outdent()),me?(me=!1,ue=this._indentLevel>=this._nestedLevel):ue=this._indentLevel>=this._nestedLevel-1,this._options.newline_between_rules&&ue&&this._output.previous_line&&this._output.previous_line.item(-1)!==\"{\"&&this._output.ensure_empty_line_above(\"/\",\",\"),this._output.space_before_token=!0,this._options.brace_style===\"expand\"?(this._output.add_new_line(),this.print_string(this._ch),this.indent(),this._output.set_indent(this._indentLevel)):(this.indent(),this.print_string(this._ch)),this.eatWhitespace(!0),this._output.add_new_line()):this._ch===\"}\"?(this.outdent(),this._output.add_new_line(),Ie===\"{\"&&this._output.trim(!0),ye=!1,ve=!1,oe&&(this.outdent(),oe=!1),this.print_string(this._ch),ue=!1,this._nestedLevel&&this._nestedLevel--,this.eatWhitespace(!0),this._output.add_new_line(),this._options.newline_between_rules&&!this._output.just_added_blankline()&&this._input.peek()!==\"}\"&&this._output.add_new_line(!0)):this._ch===\":\"?(ue||me)&&!(this._input.lookBack(\"&\")||this.foundNestedPseudoClass())&&!this._input.lookBack(\"(\")&&!ve&&$===0?(this.print_string(\":\"),oe||(oe=!0,this._output.space_before_token=!0,this.eatWhitespace(!0),this.indent())):(this._input.lookBack(\" \")&&(this._output.space_before_token=!0),this._input.peek()===\":\"?(this._ch=this._input.next(),this.print_string(\"::\")):this.print_string(\":\")):this._ch==='\"'||this._ch===\"'\"?(this.preserveSingleSpace(G),this.print_string(this._ch+this.eatString(this._ch)),this.eatWhitespace(!0)):this._ch===\";\"?$===0?(oe&&(this.outdent(),oe=!1),ve=!1,ye=!1,this.print_string(this._ch),this.eatWhitespace(!0),this._input.peek()!==\"/\"&&this._output.add_new_line()):(this.print_string(this._ch),this.eatWhitespace(!0),this._output.space_before_token=!0):this._ch===\"(\"?this._input.lookBack(\"url\")?(this.print_string(this._ch),this.eatWhitespace(),$++,this.indent(),this._ch=this._input.next(),this._ch===\")\"||this._ch==='\"'||this._ch===\"'\"?this._input.back():this._ch&&(this.print_string(this._ch+this.eatString(\")\")),$&&($--,this.outdent()))):(this.preserveSingleSpace(G),this.print_string(this._ch),this.eatWhitespace(),$++,this.indent()):this._ch===\")\"?($&&($--,this.outdent()),this.print_string(this._ch)):this._ch===\",\"?(this.print_string(this._ch),this.eatWhitespace(!0),this._options.selector_separator_newline&&!oe&&$===0&&!ye&&!ve?this._output.add_new_line():this._output.space_before_token=!0):(this._ch===\">\"||this._ch===\"+\"||this._ch===\"~\")&&!oe&&$===0?this._options.space_around_combinator?(this._output.space_before_token=!0,this.print_string(this._ch),this._output.space_before_token=!0):(this.print_string(this._ch),this.eatWhitespace(),this._ch&&w.test(this._ch)&&(this._ch=\"\")):this._ch===\"]\"?this.print_string(this._ch):this._ch===\"[\"?(this.preserveSingleSpace(G),this.print_string(this._ch)):this._ch===\"=\"?(this.eatWhitespace(),this.print_string(\"=\"),w.test(this._ch)&&(this._ch=\"\")):this._ch===\"!\"&&!this._input.lookBack(\"\\\\\")?(this.print_string(\" \"),this.print_string(this._ch)):(this.preserveSingleSpace(G),this.print_string(this._ch));var k=this._output.get_code(P);return k},i.exports.Beautifier=M},function(i,o,s){var a=s(6).Options;function l(c){a.call(this,c,\"css\"),this.selector_separator_newline=this._get_boolean(\"selector_separator_newline\",!0),this.newline_between_rules=this._get_boolean(\"newline_between_rules\",!0);var h=this._get_boolean(\"space_around_selector_separator\");this.space_around_combinator=this._get_boolean(\"space_around_combinator\")||h;var p=this._get_selection_list(\"brace_style\",[\"collapse\",\"expand\",\"end-expand\",\"none\",\"preserve-inline\"]);this.brace_style=\"collapse\";for(var m=0;m<p.length;m++)p[m]!==\"expand\"?this.brace_style=\"collapse\":this.brace_style=p[m]}l.prototype=new a,i.exports.Options=l}],e={};function t(i){var o=e[i];if(o!==void 0)return o.exports;var s=e[i]={exports:{}};return n[i](s,s.exports,t),s.exports}var r=t(15);Qo=r})();var Zo=Qo;function rs(n,e,t){var r=n.getText(),i=!0,o=0,s=!1,a=t.tabSize||4;if(e){for(var l=n.offsetAt(e.start),c=l;c>0&&ns(r,c-1);)c--;c===0||ts(r,c-1)?l=c:c<l&&(l=c+1);for(var h=n.offsetAt(e.end),p=h;p<r.length&&ns(r,p);)p++;if((p===r.length||ts(r,p))&&(h=p),e=W.create(n.positionAt(l),n.positionAt(h)),s=Ja(r,l),i=h===r.length,r=r.substring(l,h),l!==0){var m=n.offsetAt(Q.create(e.start.line,0));o=Xa(n.getText(),m,t)}s&&(r=`{\n`.concat(es(r)))}else e=W.create(Q.create(0,0),n.positionAt(r.length));var g={indent_size:a,indent_char:t.insertSpaces?\" \":\"\t\",end_with_newline:i&&Ve(t,\"insertFinalNewline\",!1),selector_separator_newline:Ve(t,\"newlineBetweenSelectors\",!0),newline_between_rules:Ve(t,\"newlineBetweenRules\",!0),space_around_selector_separator:Ve(t,\"spaceAroundSelectorSeparator\",!1),brace_style:Ve(t,\"braceStyle\",\"collapse\"),indent_empty_lines:Ve(t,\"indentEmptyLines\",!1),max_preserve_newlines:Ve(t,\"maxPreserveNewLines\",void 0),preserve_newlines:Ve(t,\"preserveNewLines\",!0),wrap_line_length:Ve(t,\"wrapLineLength\",void 0),eol:`\n`},w=Zo(r,g);if(s&&(w=es(w.substring(2))),o>0){var x=t.insertSpaces?Xn(\" \",a*o):Xn(\"\t\",o);w=w.split(`\n`).join(`\n`+x),e.start.character===0&&(w=x+w)}return[{range:e,newText:w}]}function es(n){return n.replace(/^\\s+/,\"\")}var Ga=123,Ha=125;function Ja(n,e){for(;e>=0;){var t=n.charCodeAt(e);if(t===Ga)return!0;if(t===Ha)return!1;e--}return!1}function Ve(n,e,t){if(n&&n.hasOwnProperty(e)){var r=n[e];if(r!==null)return r}return t}function Xa(n,e,t){for(var r=e,i=0,o=t.tabSize||4;r<n.length;){var s=n.charAt(r);if(s===\" \")i++;else if(s===\"\t\")i+=o;else break;r++}return Math.floor(i/o)}function ts(n,e){return`\\r\n`.indexOf(n.charAt(e))!==-1}function ns(n,e){return\" \t\".indexOf(n.charAt(e))!==-1}var Br={version:1.1,properties:[{name:\"additive-symbols\",browsers:[\"FF33\"],syntax:\"[ <integer> && <symbol> ]#\",relevance:50,description:\"@counter-style descriptor. Specifies the symbols used by the marker-construction algorithm specified by the system descriptor. Needs to be specified if the counter system is 'additive'.\",restrictions:[\"integer\",\"string\",\"image\",\"identifier\"]},{name:\"align-content\",values:[{name:\"center\",description:\"Lines are packed toward the center of the flex container.\"},{name:\"flex-end\",description:\"Lines are packed toward the end of the flex container.\"},{name:\"flex-start\",description:\"Lines are packed toward the start of the flex container.\"},{name:\"space-around\",description:\"Lines are evenly distributed in the flex container, with half-size spaces on either end.\"},{name:\"space-between\",description:\"Lines are evenly distributed in the flex container.\"},{name:\"stretch\",description:\"Lines stretch to take up the remaining space.\"}],syntax:\"normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>\",relevance:62,description:\"Aligns a flex container\\u2019s lines within the flex container when there is extra space in the cross-axis, similar to how 'justify-content' aligns individual items within the main-axis.\",restrictions:[\"enum\"]},{name:\"align-items\",values:[{name:\"baseline\",description:\"If the flex item\\u2019s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment.\"},{name:\"center\",description:\"The flex item\\u2019s margin box is centered in the cross axis within the line.\"},{name:\"flex-end\",description:\"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line.\"},{name:\"flex-start\",description:\"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line.\"},{name:\"stretch\",description:\"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched.\"}],syntax:\"normal | stretch | <baseline-position> | [ <overflow-position>? <self-position> ]\",relevance:85,description:\"Aligns flex items along the cross axis of the current line of the flex container.\",restrictions:[\"enum\"]},{name:\"justify-items\",values:[{name:\"auto\"},{name:\"normal\"},{name:\"end\"},{name:\"start\"},{name:\"flex-end\",description:'\"Flex items are packed toward the end of the line.\"'},{name:\"flex-start\",description:'\"Flex items are packed toward the start of the line.\"'},{name:\"self-end\",description:\"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis.\"},{name:\"self-start\",description:\"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis..\"},{name:\"center\",description:\"The items are packed flush to each other toward the center of the of the alignment container.\"},{name:\"left\"},{name:\"right\"},{name:\"baseline\"},{name:\"first baseline\"},{name:\"last baseline\"},{name:\"stretch\",description:\"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched.\"},{name:\"save\"},{name:\"unsave\"},{name:\"legacy\"}],syntax:\"normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ] | legacy | legacy && [ left | right | center ]\",relevance:53,description:\"Defines the default justify-self for all items of the box, giving them the default way of justifying each box along the appropriate axis\",restrictions:[\"enum\"]},{name:\"justify-self\",values:[{name:\"auto\"},{name:\"normal\"},{name:\"end\"},{name:\"start\"},{name:\"flex-end\",description:'\"Flex items are packed toward the end of the line.\"'},{name:\"flex-start\",description:'\"Flex items are packed toward the start of the line.\"'},{name:\"self-end\",description:\"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis.\"},{name:\"self-start\",description:\"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis..\"},{name:\"center\",description:\"The items are packed flush to each other toward the center of the of the alignment container.\"},{name:\"left\"},{name:\"right\"},{name:\"baseline\"},{name:\"first baseline\"},{name:\"last baseline\"},{name:\"stretch\",description:\"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched.\"},{name:\"save\"},{name:\"unsave\"}],syntax:\"auto | normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ]\",relevance:53,description:\"Defines the way of justifying a box inside its container along the appropriate axis.\",restrictions:[\"enum\"]},{name:\"align-self\",values:[{name:\"auto\",description:\"Computes to the value of 'align-items' on the element\\u2019s parent, or 'stretch' if the element has no parent. On absolutely positioned elements, it computes to itself.\"},{name:\"baseline\",description:\"If the flex item\\u2019s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment.\"},{name:\"center\",description:\"The flex item\\u2019s margin box is centered in the cross axis within the line.\"},{name:\"flex-end\",description:\"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line.\"},{name:\"flex-start\",description:\"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line.\"},{name:\"stretch\",description:\"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched.\"}],syntax:\"auto | normal | stretch | <baseline-position> | <overflow-position>? <self-position>\",relevance:72,description:\"Allows the default alignment along the cross axis to be overridden for individual flex items.\",restrictions:[\"enum\"]},{name:\"all\",browsers:[\"E79\",\"FF27\",\"S9.1\",\"C37\",\"O24\"],values:[],syntax:\"initial | inherit | unset | revert\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/all\"}],description:\"Shorthand that resets all properties except 'direction' and 'unicode-bidi'.\",restrictions:[\"enum\"]},{name:\"alt\",browsers:[\"S9\"],values:[],relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/alt\"}],description:\"Provides alternative text for assistive technology to replace the generated content of a ::before or ::after element.\",restrictions:[\"string\",\"enum\"]},{name:\"animation\",values:[{name:\"alternate\",description:\"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction.\"},{name:\"alternate-reverse\",description:\"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction.\"},{name:\"backwards\",description:\"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'.\"},{name:\"both\",description:\"Both forwards and backwards fill modes are applied.\"},{name:\"forwards\",description:\"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes.\"},{name:\"infinite\",description:\"Causes the animation to repeat forever.\"},{name:\"none\",description:\"No animation is performed\"},{name:\"normal\",description:\"Normal playback.\"},{name:\"reverse\",description:\"All iterations of the animation are played in the reverse direction from the way they were specified.\"}],syntax:\"<single-animation>#\",relevance:82,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation\"}],description:\"Shorthand property combines six of the animation properties into a single property.\",restrictions:[\"time\",\"timing-function\",\"enum\",\"identifier\",\"number\"]},{name:\"animation-delay\",syntax:\"<time>#\",relevance:64,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation-delay\"}],description:\"Defines when the animation will start.\",restrictions:[\"time\"]},{name:\"animation-direction\",values:[{name:\"alternate\",description:\"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction.\"},{name:\"alternate-reverse\",description:\"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction.\"},{name:\"normal\",description:\"Normal playback.\"},{name:\"reverse\",description:\"All iterations of the animation are played in the reverse direction from the way they were specified.\"}],syntax:\"<single-animation-direction>#\",relevance:57,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation-direction\"}],description:\"Defines whether or not the animation should play in reverse on alternate cycles.\",restrictions:[\"enum\"]},{name:\"animation-duration\",syntax:\"<time>#\",relevance:68,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation-duration\"}],description:\"Defines the length of time that an animation takes to complete one cycle.\",restrictions:[\"time\"]},{name:\"animation-fill-mode\",values:[{name:\"backwards\",description:\"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'.\"},{name:\"both\",description:\"Both forwards and backwards fill modes are applied.\"},{name:\"forwards\",description:\"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes.\"},{name:\"none\",description:\"There is no change to the property value between the time the animation is applied and the time the animation begins playing or after the animation completes.\"}],syntax:\"<single-animation-fill-mode>#\",relevance:63,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode\"}],description:\"Defines what values are applied by the animation outside the time it is executing.\",restrictions:[\"enum\"]},{name:\"animation-iteration-count\",values:[{name:\"infinite\",description:\"Causes the animation to repeat forever.\"}],syntax:\"<single-animation-iteration-count>#\",relevance:60,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count\"}],description:\"Defines the number of times an animation cycle is played. The default value is one, meaning the animation will play from beginning to end once.\",restrictions:[\"number\",\"enum\"]},{name:\"animation-name\",values:[{name:\"none\",description:\"No animation is performed\"}],syntax:\"[ none | <keyframes-name> ]#\",relevance:68,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation-name\"}],description:\"Defines a list of animations that apply. Each name is used to select the keyframe at-rule that provides the property values for the animation.\",restrictions:[\"identifier\",\"enum\"]},{name:\"animation-play-state\",values:[{name:\"paused\",description:\"A running animation will be paused.\"},{name:\"running\",description:\"Resume playback of a paused animation.\"}],syntax:\"<single-animation-play-state>#\",relevance:54,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation-play-state\"}],description:\"Defines whether the animation is running or paused.\",restrictions:[\"enum\"]},{name:\"animation-timing-function\",syntax:\"<easing-function>#\",relevance:71,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation-timing-function\"}],description:\"Describes how the animation will progress over one cycle of its duration.\",restrictions:[\"timing-function\"]},{name:\"backface-visibility\",values:[{name:\"hidden\",description:\"Back side is hidden.\"},{name:\"visible\",description:\"Back side is visible.\"}],syntax:\"visible | hidden\",relevance:59,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/backface-visibility\"}],description:\"Determines whether or not the 'back' side of a transformed element is visible when facing the viewer. With an identity transform, the front side of an element faces the viewer.\",restrictions:[\"enum\"]},{name:\"background\",values:[{name:\"fixed\",description:\"The background is fixed with regard to the viewport. In paged media where there is no viewport, a 'fixed' background is fixed with respect to the page box and therefore replicated on every page.\"},{name:\"local\",description:\"The background is fixed with regard to the element's contents: if the element has a scrolling mechanism, the background scrolls with the element's contents.\"},{name:\"none\",description:\"A value of 'none' counts as an image layer but draws nothing.\"},{name:\"scroll\",description:\"The background is fixed with regard to the element itself and does not scroll with its contents. (It is effectively attached to the element's border.)\"}],syntax:\"[ <bg-layer> , ]* <final-bg-layer>\",relevance:93,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background\"}],description:\"Shorthand property for setting most background properties at the same place in the style sheet.\",restrictions:[\"enum\",\"image\",\"color\",\"position\",\"length\",\"repeat\",\"percentage\",\"box\"]},{name:\"background-attachment\",values:[{name:\"fixed\",description:\"The background is fixed with regard to the viewport. In paged media where there is no viewport, a 'fixed' background is fixed with respect to the page box and therefore replicated on every page.\"},{name:\"local\",description:\"The background is fixed with regard to the element\\u2019s contents: if the element has a scrolling mechanism, the background scrolls with the element\\u2019s contents.\"},{name:\"scroll\",description:\"The background is fixed with regard to the element itself and does not scroll with its contents. (It is effectively attached to the element\\u2019s border.)\"}],syntax:\"<attachment>#\",relevance:54,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-attachment\"}],description:\"Specifies whether the background images are fixed with regard to the viewport ('fixed') or scroll along with the element ('scroll') or its contents ('local').\",restrictions:[\"enum\"]},{name:\"background-blend-mode\",browsers:[\"E79\",\"FF30\",\"S8\",\"C35\",\"O22\"],values:[{name:\"normal\",description:\"Default attribute which specifies no blending\"},{name:\"multiply\",description:\"The source color is multiplied by the destination color and replaces the destination.\"},{name:\"screen\",description:\"Multiplies the complements of the backdrop and source color values, then complements the result.\"},{name:\"overlay\",description:\"Multiplies or screens the colors, depending on the backdrop color value.\"},{name:\"darken\",description:\"Selects the darker of the backdrop and source colors.\"},{name:\"lighten\",description:\"Selects the lighter of the backdrop and source colors.\"},{name:\"color-dodge\",description:\"Brightens the backdrop color to reflect the source color.\"},{name:\"color-burn\",description:\"Darkens the backdrop color to reflect the source color.\"},{name:\"hard-light\",description:\"Multiplies or screens the colors, depending on the source color value.\"},{name:\"soft-light\",description:\"Darkens or lightens the colors, depending on the source color value.\"},{name:\"difference\",description:\"Subtracts the darker of the two constituent colors from the lighter color..\"},{name:\"exclusion\",description:\"Produces an effect similar to that of the Difference mode but lower in contrast.\"},{name:\"hue\",browsers:[\"E79\",\"FF30\",\"S8\",\"C35\",\"O22\"],description:\"Creates a color with the hue of the source color and the saturation and luminosity of the backdrop color.\"},{name:\"saturation\",browsers:[\"E79\",\"FF30\",\"S8\",\"C35\",\"O22\"],description:\"Creates a color with the saturation of the source color and the hue and luminosity of the backdrop color.\"},{name:\"color\",browsers:[\"E79\",\"FF30\",\"S8\",\"C35\",\"O22\"],description:\"Creates a color with the hue and saturation of the source color and the luminosity of the backdrop color.\"},{name:\"luminosity\",browsers:[\"E79\",\"FF30\",\"S8\",\"C35\",\"O22\"],description:\"Creates a color with the luminosity of the source color and the hue and saturation of the backdrop color.\"}],syntax:\"<blend-mode>#\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-blend-mode\"}],description:\"Defines the blending mode of each background layer.\",restrictions:[\"enum\"]},{name:\"background-clip\",syntax:\"<box>#\",relevance:69,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-clip\"}],description:\"Determines the background painting area.\",restrictions:[\"box\"]},{name:\"background-color\",syntax:\"<color>\",relevance:95,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-color\"}],description:\"Sets the background color of an element.\",restrictions:[\"color\"]},{name:\"background-image\",values:[{name:\"none\",description:\"Counts as an image layer but draws nothing.\"}],syntax:\"<bg-image>#\",relevance:89,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-image\"}],description:\"Sets the background image(s) of an element.\",restrictions:[\"image\",\"enum\"]},{name:\"background-origin\",syntax:\"<box>#\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-origin\"}],description:\"For elements rendered as a single box, specifies the background positioning area. For elements rendered as multiple boxes (e.g., inline boxes on several lines, boxes on several pages) specifies which boxes 'box-decoration-break' operates on to determine the background positioning area(s).\",restrictions:[\"box\"]},{name:\"background-position\",syntax:\"<bg-position>#\",relevance:88,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-position\"}],description:\"Specifies the initial position of the background image(s) (after any resizing) within their corresponding background positioning area.\",restrictions:[\"position\",\"length\",\"percentage\"]},{name:\"background-position-x\",values:[{name:\"center\",description:\"Equivalent to '50%' ('left 50%') for the horizontal position if the horizontal position is not otherwise specified, or '50%' ('top 50%') for the vertical position if it is.\"},{name:\"left\",description:\"Equivalent to '0%' for the horizontal position if one or two values are given, otherwise specifies the left edge as the origin for the next offset.\"},{name:\"right\",description:\"Equivalent to '100%' for the horizontal position if one or two values are given, otherwise specifies the right edge as the origin for the next offset.\"}],status:\"experimental\",syntax:\"[ center | [ [ left | right | x-start | x-end ]? <length-percentage>? ]! ]#\",relevance:54,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-position-x\"}],description:\"If background images have been specified, this property specifies their initial position (after any resizing) within their corresponding background positioning area.\",restrictions:[\"length\",\"percentage\"]},{name:\"background-position-y\",values:[{name:\"bottom\",description:\"Equivalent to '100%' for the vertical position if one or two values are given, otherwise specifies the bottom edge as the origin for the next offset.\"},{name:\"center\",description:\"Equivalent to '50%' ('left 50%') for the horizontal position if the horizontal position is not otherwise specified, or '50%' ('top 50%') for the vertical position if it is.\"},{name:\"top\",description:\"Equivalent to '0%' for the vertical position if one or two values are given, otherwise specifies the top edge as the origin for the next offset.\"}],status:\"experimental\",syntax:\"[ center | [ [ top | bottom | y-start | y-end ]? <length-percentage>? ]! ]#\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-position-y\"}],description:\"If background images have been specified, this property specifies their initial position (after any resizing) within their corresponding background positioning area.\",restrictions:[\"length\",\"percentage\"]},{name:\"background-repeat\",values:[],syntax:\"<repeat-style>#\",relevance:85,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-repeat\"}],description:\"Specifies how background images are tiled after they have been sized and positioned.\",restrictions:[\"repeat\"]},{name:\"background-size\",values:[{name:\"auto\",description:\"Resolved by using the image\\u2019s intrinsic ratio and the size of the other dimension, or failing that, using the image\\u2019s intrinsic size, or failing that, treating it as 100%.\"},{name:\"contain\",description:\"Scale the image, while preserving its intrinsic aspect ratio (if any), to the largest size such that both its width and its height can fit inside the background positioning area.\"},{name:\"cover\",description:\"Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its width and its height can completely cover the background positioning area.\"}],syntax:\"<bg-size>#\",relevance:85,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/background-size\"}],description:\"Specifies the size of the background images.\",restrictions:[\"length\",\"percentage\"]},{name:\"behavior\",browsers:[\"IE6\"],relevance:50,description:\"IE only. Used to extend behaviors of the browser.\",restrictions:[\"url\"]},{name:\"block-size\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"Depends on the values of other properties.\"}],syntax:\"<'width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/block-size\"}],description:\"Size of an element in the direction opposite that of the direction specified by 'writing-mode'.\",restrictions:[\"length\",\"percentage\"]},{name:\"border\",syntax:\"<line-width> || <line-style> || <color>\",relevance:96,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border\"}],description:\"Shorthand property for setting border width, style, and color.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"border-block-end\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-width'> || <'border-top-style'> || <color>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-end\"}],description:\"Logical 'border-bottom'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"border-block-start\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-width'> || <'border-top-style'> || <color>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-start\"}],description:\"Logical 'border-top'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"border-block-end-color\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-color'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-end-color\"}],description:\"Logical 'border-bottom-color'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"color\"]},{name:\"border-block-start-color\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-color'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-start-color\"}],description:\"Logical 'border-top-color'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"color\"]},{name:\"border-block-end-style\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-style'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-end-style\"}],description:\"Logical 'border-bottom-style'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"line-style\"]},{name:\"border-block-start-style\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-style'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-start-style\"}],description:\"Logical 'border-top-style'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"line-style\"]},{name:\"border-block-end-width\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-end-width\"}],description:\"Logical 'border-bottom-width'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"line-width\"]},{name:\"border-block-start-width\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-start-width\"}],description:\"Logical 'border-top-width'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"line-width\"]},{name:\"border-bottom\",syntax:\"<line-width> || <line-style> || <color>\",relevance:89,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-bottom\"}],description:\"Shorthand property for setting border width, style and color.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"border-bottom-color\",syntax:\"<'border-top-color'>\",relevance:72,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-bottom-color\"}],description:\"Sets the color of the bottom border.\",restrictions:[\"color\"]},{name:\"border-bottom-left-radius\",syntax:\"<length-percentage>{1,2}\",relevance:75,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius\"}],description:\"Defines the radii of the bottom left outer border edge.\",restrictions:[\"length\",\"percentage\"]},{name:\"border-bottom-right-radius\",syntax:\"<length-percentage>{1,2}\",relevance:75,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius\"}],description:\"Defines the radii of the bottom right outer border edge.\",restrictions:[\"length\",\"percentage\"]},{name:\"border-bottom-style\",syntax:\"<line-style>\",relevance:59,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-bottom-style\"}],description:\"Sets the style of the bottom border.\",restrictions:[\"line-style\"]},{name:\"border-bottom-width\",syntax:\"<line-width>\",relevance:63,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-bottom-width\"}],description:\"Sets the thickness of the bottom border.\",restrictions:[\"length\",\"line-width\"]},{name:\"border-collapse\",values:[{name:\"collapse\",description:\"Selects the collapsing borders model.\"},{name:\"separate\",description:\"Selects the separated borders border model.\"}],syntax:\"collapse | separate\",relevance:75,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-collapse\"}],description:\"Selects a table's border model.\",restrictions:[\"enum\"]},{name:\"border-color\",values:[],syntax:\"<color>{1,4}\",relevance:87,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-color\"}],description:\"The color of the border around all four edges of an element.\",restrictions:[\"color\"]},{name:\"border-image\",values:[{name:\"auto\",description:\"If 'auto' is specified then the border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead.\"},{name:\"fill\",description:\"Causes the middle part of the border-image to be preserved.\"},{name:\"none\",description:\"Use the border styles.\"},{name:\"repeat\",description:\"The image is tiled (repeated) to fill the area.\"},{name:\"round\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does.\"},{name:\"space\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles.\"},{name:\"stretch\",description:\"The image is stretched to fill the area.\"},{name:\"url()\"}],syntax:\"<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-image\"}],description:\"Shorthand property for setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat'. Omitted values are set to their initial values.\",restrictions:[\"length\",\"percentage\",\"number\",\"url\",\"enum\"]},{name:\"border-image-outset\",syntax:\"[ <length> | <number> ]{1,4}\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-image-outset\"}],description:\"The values specify the amount by which the border image area extends beyond the border box on the top, right, bottom, and left sides respectively. If the fourth value is absent, it is the same as the second. If the third one is also absent, it is the same as the first. If the second one is also absent, it is the same as the first. Numbers represent multiples of the corresponding border-width.\",restrictions:[\"length\",\"number\"]},{name:\"border-image-repeat\",values:[{name:\"repeat\",description:\"The image is tiled (repeated) to fill the area.\"},{name:\"round\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does.\"},{name:\"space\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles.\"},{name:\"stretch\",description:\"The image is stretched to fill the area.\"}],syntax:\"[ stretch | repeat | round | space ]{1,2}\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-image-repeat\"}],description:\"Specifies how the images for the sides and the middle part of the border image are scaled and tiled. If the second keyword is absent, it is assumed to be the same as the first.\",restrictions:[\"enum\"]},{name:\"border-image-slice\",values:[{name:\"fill\",description:\"Causes the middle part of the border-image to be preserved.\"}],syntax:\"<number-percentage>{1,4} && fill?\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-image-slice\"}],description:\"Specifies inward offsets from the top, right, bottom, and left edges of the image, dividing it into nine regions: four corners, four edges and a middle.\",restrictions:[\"number\",\"percentage\"]},{name:\"border-image-source\",values:[{name:\"none\",description:\"Use the border styles.\"}],syntax:\"none | <image>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-image-source\"}],description:\"Specifies an image to use instead of the border styles given by the 'border-style' properties and as an additional background layer for the element. If the value is 'none' or if the image cannot be displayed, the border styles will be used.\",restrictions:[\"image\"]},{name:\"border-image-width\",values:[{name:\"auto\",description:\"The border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead.\"}],syntax:\"[ <length-percentage> | <number> | auto ]{1,4}\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-image-width\"}],description:\"The four values of 'border-image-width' specify offsets that are used to divide the border image area into nine parts. They represent inward distances from the top, right, bottom, and left sides of the area, respectively.\",restrictions:[\"length\",\"percentage\",\"number\"]},{name:\"border-inline-end\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-width'> || <'border-top-style'> || <color>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-end\"}],description:\"Logical 'border-right'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"border-inline-start\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-width'> || <'border-top-style'> || <color>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-start\"}],description:\"Logical 'border-left'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"border-inline-end-color\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-color'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-end-color\"}],description:\"Logical 'border-right-color'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"color\"]},{name:\"border-inline-start-color\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-color'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-start-color\"}],description:\"Logical 'border-left-color'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"color\"]},{name:\"border-inline-end-style\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-style'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-end-style\"}],description:\"Logical 'border-right-style'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"line-style\"]},{name:\"border-inline-start-style\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-style'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-start-style\"}],description:\"Logical 'border-left-style'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"line-style\"]},{name:\"border-inline-end-width\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-end-width\"}],description:\"Logical 'border-right-width'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"line-width\"]},{name:\"border-inline-start-width\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'border-top-width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-start-width\"}],description:\"Logical 'border-left-width'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"line-width\"]},{name:\"border-left\",syntax:\"<line-width> || <line-style> || <color>\",relevance:83,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-left\"}],description:\"Shorthand property for setting border width, style and color\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"border-left-color\",syntax:\"<color>\",relevance:65,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-left-color\"}],description:\"Sets the color of the left border.\",restrictions:[\"color\"]},{name:\"border-left-style\",syntax:\"<line-style>\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-left-style\"}],description:\"Sets the style of the left border.\",restrictions:[\"line-style\"]},{name:\"border-left-width\",syntax:\"<line-width>\",relevance:59,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-left-width\"}],description:\"Sets the thickness of the left border.\",restrictions:[\"length\",\"line-width\"]},{name:\"border-radius\",syntax:\"<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?\",relevance:92,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-radius\"}],description:\"Defines the radii of the outer border edge.\",restrictions:[\"length\",\"percentage\"]},{name:\"border-right\",syntax:\"<line-width> || <line-style> || <color>\",relevance:82,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-right\"}],description:\"Shorthand property for setting border width, style and color\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"border-right-color\",syntax:\"<color>\",relevance:65,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-right-color\"}],description:\"Sets the color of the right border.\",restrictions:[\"color\"]},{name:\"border-right-style\",syntax:\"<line-style>\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-right-style\"}],description:\"Sets the style of the right border.\",restrictions:[\"line-style\"]},{name:\"border-right-width\",syntax:\"<line-width>\",relevance:59,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-right-width\"}],description:\"Sets the thickness of the right border.\",restrictions:[\"length\",\"line-width\"]},{name:\"border-spacing\",syntax:\"<length> <length>?\",relevance:68,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-spacing\"}],description:\"The lengths specify the distance that separates adjoining cell borders. If one length is specified, it gives both the horizontal and vertical spacing. If two are specified, the first gives the horizontal spacing and the second the vertical spacing. Lengths may not be negative.\",restrictions:[\"length\"]},{name:\"border-style\",values:[],syntax:\"<line-style>{1,4}\",relevance:81,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-style\"}],description:\"The style of the border around edges of an element.\",restrictions:[\"line-style\"]},{name:\"border-top\",syntax:\"<line-width> || <line-style> || <color>\",relevance:88,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-top\"}],description:\"Shorthand property for setting border width, style and color\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"border-top-color\",syntax:\"<color>\",relevance:72,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-top-color\"}],description:\"Sets the color of the top border.\",restrictions:[\"color\"]},{name:\"border-top-left-radius\",syntax:\"<length-percentage>{1,2}\",relevance:76,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius\"}],description:\"Defines the radii of the top left outer border edge.\",restrictions:[\"length\",\"percentage\"]},{name:\"border-top-right-radius\",syntax:\"<length-percentage>{1,2}\",relevance:75,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius\"}],description:\"Defines the radii of the top right outer border edge.\",restrictions:[\"length\",\"percentage\"]},{name:\"border-top-style\",syntax:\"<line-style>\",relevance:57,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-top-style\"}],description:\"Sets the style of the top border.\",restrictions:[\"line-style\"]},{name:\"border-top-width\",syntax:\"<line-width>\",relevance:61,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-top-width\"}],description:\"Sets the thickness of the top border.\",restrictions:[\"length\",\"line-width\"]},{name:\"border-width\",values:[],syntax:\"<line-width>{1,4}\",relevance:82,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-width\"}],description:\"Shorthand that sets the four 'border-*-width' properties. If it has four values, they set top, right, bottom and left in that order. If left is missing, it is the same as right; if bottom is missing, it is the same as top; if right is missing, it is the same as top.\",restrictions:[\"length\",\"line-width\"]},{name:\"bottom\",values:[{name:\"auto\",description:\"For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well\"}],syntax:\"<length> | <percentage> | auto\",relevance:90,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/bottom\"}],description:\"Specifies how far an absolutely positioned box's bottom margin edge is offset above the bottom edge of the box's 'containing block'.\",restrictions:[\"length\",\"percentage\"]},{name:\"box-decoration-break\",browsers:[\"E79\",\"FF32\",\"S7\",\"C22\",\"O15\"],values:[{name:\"clone\",description:\"Each box is independently wrapped with the border and padding.\"},{name:\"slice\",description:\"The effect is as though the element were rendered with no breaks present, and then sliced by the breaks afterward.\"}],syntax:\"slice | clone\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-decoration-break\"}],description:\"Specifies whether individual boxes are treated as broken pieces of one continuous box, or whether each box is individually wrapped with the border and padding.\",restrictions:[\"enum\"]},{name:\"box-shadow\",values:[{name:\"inset\",description:\"Changes the drop shadow from an outer shadow (one that shadows the box onto the canvas, as if it were lifted above the canvas) to an inner shadow (one that shadows the canvas onto the box, as if the box were cut out of the canvas and shifted behind it).\"},{name:\"none\",description:\"No shadow.\"}],syntax:\"none | <shadow>#\",relevance:90,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-shadow\"}],description:\"Attaches one or more drop-shadows to the box. The property is a comma-separated list of shadows, each specified by 2-4 length values, an optional color, and an optional 'inset' keyword. Omitted lengths are 0; omitted colors are a user agent chosen color.\",restrictions:[\"length\",\"color\",\"enum\"]},{name:\"box-sizing\",values:[{name:\"border-box\",description:\"The specified width and height (and respective min/max properties) on this element determine the border box of the element.\"},{name:\"content-box\",description:\"Behavior of width and height as specified by CSS2.1. The specified width and height (and respective min/max properties) apply to the width and height respectively of the content box of the element.\"}],syntax:\"content-box | border-box\",relevance:93,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-sizing\"}],description:\"Specifies the behavior of the 'width' and 'height' properties.\",restrictions:[\"enum\"]},{name:\"break-after\",values:[{name:\"always\",description:\"Always force a page break before/after the generated box.\"},{name:\"auto\",description:\"Neither force nor forbid a page/column break before/after the principal box.\"},{name:\"avoid\",description:\"Avoid a break before/after the principal box.\"},{name:\"avoid-column\",description:\"Avoid a column break before/after the principal box.\"},{name:\"avoid-page\",description:\"Avoid a page break before/after the principal box.\"},{name:\"column\",description:\"Always force a column break before/after the principal box.\"},{name:\"left\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a left page.\"},{name:\"page\",description:\"Always force a page break before/after the principal box.\"},{name:\"right\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a right page.\"}],syntax:\"auto | avoid | always | all | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region\",relevance:50,description:\"Describes the page/column/region break behavior after the generated box.\",restrictions:[\"enum\"]},{name:\"break-before\",values:[{name:\"always\",description:\"Always force a page break before/after the generated box.\"},{name:\"auto\",description:\"Neither force nor forbid a page/column break before/after the principal box.\"},{name:\"avoid\",description:\"Avoid a break before/after the principal box.\"},{name:\"avoid-column\",description:\"Avoid a column break before/after the principal box.\"},{name:\"avoid-page\",description:\"Avoid a page break before/after the principal box.\"},{name:\"column\",description:\"Always force a column break before/after the principal box.\"},{name:\"left\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a left page.\"},{name:\"page\",description:\"Always force a page break before/after the principal box.\"},{name:\"right\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a right page.\"}],syntax:\"auto | avoid | always | all | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region\",relevance:50,description:\"Describes the page/column/region break behavior before the generated box.\",restrictions:[\"enum\"]},{name:\"break-inside\",values:[{name:\"auto\",description:\"Impose no additional breaking constraints within the box.\"},{name:\"avoid\",description:\"Avoid breaks within the box.\"},{name:\"avoid-column\",description:\"Avoid a column break within the box.\"},{name:\"avoid-page\",description:\"Avoid a page break within the box.\"}],syntax:\"auto | avoid | avoid-page | avoid-column | avoid-region\",relevance:51,description:\"Describes the page/column/region break behavior inside the principal box.\",restrictions:[\"enum\"]},{name:\"caption-side\",values:[{name:\"bottom\",description:\"Positions the caption box below the table box.\"},{name:\"top\",description:\"Positions the caption box above the table box.\"}],syntax:\"top | bottom | block-start | block-end | inline-start | inline-end\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/caption-side\"}],description:\"Specifies the position of the caption box with respect to the table box.\",restrictions:[\"enum\"]},{name:\"caret-color\",browsers:[\"E79\",\"FF53\",\"S11.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"The user agent selects an appropriate color for the caret. This is generally currentcolor, but the user agent may choose a different color to ensure good visibility and contrast with the surrounding content, taking into account the value of currentcolor, the background, shadows, and other factors.\"}],syntax:\"auto | <color>\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/caret-color\"}],description:\"Controls the color of the text insertion indicator.\",restrictions:[\"color\",\"enum\"]},{name:\"clear\",values:[{name:\"both\",description:\"The clearance of the generated box is set to the amount necessary to place the top border edge below the bottom outer edge of any right-floating and left-floating boxes that resulted from elements earlier in the source document.\"},{name:\"left\",description:\"The clearance of the generated box is set to the amount necessary to place the top border edge below the bottom outer edge of any left-floating boxes that resulted from elements earlier in the source document.\"},{name:\"none\",description:\"No constraint on the box's position with respect to floats.\"},{name:\"right\",description:\"The clearance of the generated box is set to the amount necessary to place the top border edge below the bottom outer edge of any right-floating boxes that resulted from elements earlier in the source document.\"}],syntax:\"none | left | right | both | inline-start | inline-end\",relevance:85,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/clear\"}],description:\"Indicates which sides of an element's box(es) may not be adjacent to an earlier floating box. The 'clear' property does not consider floats inside the element itself or in other block formatting contexts.\",restrictions:[\"enum\"]},{name:\"clip\",values:[{name:\"auto\",description:\"The element does not clip.\"},{name:\"rect()\",description:\"Specifies offsets from the edges of the border box.\"}],syntax:\"<shape> | auto\",relevance:75,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/clip\"}],description:\"Deprecated. Use the 'clip-path' property when support allows. Defines the visible portion of an element\\u2019s box.\",restrictions:[\"enum\"]},{name:\"clip-path\",values:[{name:\"none\",description:\"No clipping path gets created.\"},{name:\"url()\",description:\"References a <clipPath> element to create a clipping path.\"}],syntax:\"<clip-source> | [ <basic-shape> || <geometry-box> ] | none\",relevance:62,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/clip-path\"}],description:\"Specifies a clipping path where everything inside the path is visible and everything outside is clipped out.\",restrictions:[\"url\",\"shape\",\"geometry-box\",\"enum\"]},{name:\"clip-rule\",browsers:[\"E\",\"C5\",\"FF3\",\"IE10\",\"O9\",\"S6\"],values:[{name:\"evenodd\",description:\"Determines the \\u2018insideness\\u2019 of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses.\"},{name:\"nonzero\",description:\"Determines the \\u2018insideness\\u2019 of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray.\"}],relevance:50,description:\"Indicates the algorithm which is to be used to determine what parts of the canvas are included inside the shape.\",restrictions:[\"enum\"]},{name:\"color\",syntax:\"<color>\",relevance:95,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/color\"}],description:\"Sets the color of an element's text\",restrictions:[\"color\"]},{name:\"color-interpolation-filters\",browsers:[\"E\",\"C5\",\"FF3\",\"IE10\",\"O9\",\"S6\"],values:[{name:\"auto\",description:\"Color operations are not required to occur in a particular color space.\"},{name:\"linearRGB\",description:\"Color operations should occur in the linearized RGB color space.\"},{name:\"sRGB\",description:\"Color operations should occur in the sRGB color space.\"}],relevance:50,description:\"Specifies the color space for imaging operations performed via filter effects.\",restrictions:[\"enum\"]},{name:\"column-count\",values:[{name:\"auto\",description:\"Determines the number of columns by the 'column-width' property and the element width.\"}],syntax:\"<integer> | auto\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/column-count\"}],description:\"Describes the optimal number of columns into which the content of the element will be flowed.\",restrictions:[\"integer\",\"enum\"]},{name:\"column-fill\",values:[{name:\"auto\",description:\"Fills columns sequentially.\"},{name:\"balance\",description:\"Balance content equally between columns, if possible.\"}],syntax:\"auto | balance | balance-all\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/column-fill\"}],description:\"In continuous media, this property will only be consulted if the length of columns has been constrained. Otherwise, columns will automatically be balanced.\",restrictions:[\"enum\"]},{name:\"column-gap\",values:[{name:\"normal\",description:\"User agent specific and typically equivalent to 1em.\"}],syntax:\"normal | <length-percentage>\",relevance:54,description:\"Sets the gap between columns. If there is a column rule between columns, it will appear in the middle of the gap.\",restrictions:[\"length\",\"enum\"]},{name:\"column-rule\",syntax:\"<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/column-rule\"}],description:\"Shorthand for setting 'column-rule-width', 'column-rule-style', and 'column-rule-color' at the same place in the style sheet. Omitted values are set to their initial values.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"column-rule-color\",syntax:\"<color>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/column-rule-color\"}],description:\"Sets the color of the column rule\",restrictions:[\"color\"]},{name:\"column-rule-style\",syntax:\"<'border-style'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/column-rule-style\"}],description:\"Sets the style of the rule between columns of an element.\",restrictions:[\"line-style\"]},{name:\"column-rule-width\",syntax:\"<'border-width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/column-rule-width\"}],description:\"Sets the width of the rule between columns. Negative values are not allowed.\",restrictions:[\"length\",\"line-width\"]},{name:\"columns\",values:[{name:\"auto\",description:\"The width depends on the values of other properties.\"}],syntax:\"<'column-width'> || <'column-count'>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/columns\"}],description:\"A shorthand property which sets both 'column-width' and 'column-count'.\",restrictions:[\"length\",\"integer\",\"enum\"]},{name:\"column-span\",values:[{name:\"all\",description:\"The element spans across all columns. Content in the normal flow that appears before the element is automatically balanced across all columns before the element appear.\"},{name:\"none\",description:\"The element does not span multiple columns.\"}],syntax:\"none | all\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/column-span\"}],description:\"Describes the page/column break behavior after the generated box.\",restrictions:[\"enum\"]},{name:\"column-width\",values:[{name:\"auto\",description:\"The width depends on the values of other properties.\"}],syntax:\"<length> | auto\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/column-width\"}],description:\"Describes the width of columns in multicol elements.\",restrictions:[\"length\",\"enum\"]},{name:\"contain\",browsers:[\"E79\",\"FF69\",\"S15.4\",\"C52\",\"O40\"],values:[{name:\"none\",description:\"Indicates that the property has no effect.\"},{name:\"strict\",description:\"Turns on all forms of containment for the element.\"},{name:\"content\",description:\"All containment rules except size are applied to the element.\"},{name:\"size\",description:\"For properties that can have effects on more than just an element and its descendants, those effects don't escape the containing element.\"},{name:\"layout\",description:\"Turns on layout containment for the element.\"},{name:\"style\",description:\"Turns on style containment for the element.\"},{name:\"paint\",description:\"Turns on paint containment for the element.\"}],syntax:\"none | strict | content | [ size || layout || style || paint ]\",relevance:59,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/contain\"}],description:\"Indicates that an element and its contents are, as much as possible, independent of the rest of the document tree.\",restrictions:[\"enum\"]},{name:\"content\",values:[{name:\"attr()\",description:\"The attr(n) function returns as a string the value of attribute n for the subject of the selector.\"},{name:\"counter(name)\",description:\"Counters are denoted by identifiers (see the 'counter-increment' and 'counter-reset' properties).\"},{name:\"icon\",description:\"The (pseudo-)element is replaced in its entirety by the resource referenced by its 'icon' property, and treated as a replaced element.\"},{name:\"none\",description:\"On elements, this inhibits the children of the element from being rendered as children of this element, as if the element was empty. On pseudo-elements it causes the pseudo-element to have no content.\"},{name:\"normal\",description:\"See http://www.w3.org/TR/css3-content/#content for computation rules.\"},{name:\"url()\"}],syntax:\"normal | none | [ <content-replacement> | <content-list> ] [/ [ <string> | <counter> ]+ ]?\",relevance:90,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/content\"}],description:\"Determines which page-based occurrence of a given element is applied to a counter or string value.\",restrictions:[\"string\",\"url\"]},{name:\"counter-increment\",values:[{name:\"none\",description:\"This element does not alter the value of any counters.\"}],syntax:\"[ <counter-name> <integer>? ]+ | none\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/counter-increment\"}],description:\"Manipulate the value of existing counters.\",restrictions:[\"identifier\",\"integer\"]},{name:\"counter-reset\",values:[{name:\"none\",description:\"The counter is not modified.\"}],syntax:\"[ <counter-name> <integer>? | <reversed-counter-name> <integer>? ]+ | none\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/counter-reset\"}],description:\"Property accepts one or more names of counters (identifiers), each one optionally followed by an integer. The integer gives the value that the counter is set to on each occurrence of the element.\",restrictions:[\"identifier\",\"integer\"]},{name:\"cursor\",values:[{name:\"alias\",description:\"Indicates an alias of/shortcut to something is to be created. Often rendered as an arrow with a small curved arrow next to it.\"},{name:\"all-scroll\",description:\"Indicates that the something can be scrolled in any direction. Often rendered as arrows pointing up, down, left, and right with a dot in the middle.\"},{name:\"auto\",description:\"The UA determines the cursor to display based on the current context.\"},{name:\"cell\",description:\"Indicates that a cell or set of cells may be selected. Often rendered as a thick plus-sign with a dot in the middle.\"},{name:\"col-resize\",description:\"Indicates that the item/column can be resized horizontally. Often rendered as arrows pointing left and right with a vertical bar separating them.\"},{name:\"context-menu\",description:\"A context menu is available for the object under the cursor. Often rendered as an arrow with a small menu-like graphic next to it.\"},{name:\"copy\",description:\"Indicates something is to be copied. Often rendered as an arrow with a small plus sign next to it.\"},{name:\"crosshair\",description:\"A simple crosshair (e.g., short line segments resembling a '+' sign). Often used to indicate a two dimensional bitmap selection mode.\"},{name:\"default\",description:\"The platform-dependent default cursor. Often rendered as an arrow.\"},{name:\"e-resize\",description:\"Indicates that east edge is to be moved.\"},{name:\"ew-resize\",description:\"Indicates a bidirectional east-west resize cursor.\"},{name:\"grab\",description:\"Indicates that something can be grabbed.\"},{name:\"grabbing\",description:\"Indicates that something is being grabbed.\"},{name:\"help\",description:\"Help is available for the object under the cursor. Often rendered as a question mark or a balloon.\"},{name:\"move\",description:\"Indicates something is to be moved.\"},{name:\"-moz-grab\",description:\"Indicates that something can be grabbed.\"},{name:\"-moz-grabbing\",description:\"Indicates that something is being grabbed.\"},{name:\"-moz-zoom-in\",description:\"Indicates that something can be zoomed (magnified) in.\"},{name:\"-moz-zoom-out\",description:\"Indicates that something can be zoomed (magnified) out.\"},{name:\"ne-resize\",description:\"Indicates that movement starts from north-east corner.\"},{name:\"nesw-resize\",description:\"Indicates a bidirectional north-east/south-west cursor.\"},{name:\"no-drop\",description:\"Indicates that the dragged item cannot be dropped at the current cursor location. Often rendered as a hand or pointer with a small circle with a line through it.\"},{name:\"none\",description:\"No cursor is rendered for the element.\"},{name:\"not-allowed\",description:\"Indicates that the requested action will not be carried out. Often rendered as a circle with a line through it.\"},{name:\"n-resize\",description:\"Indicates that north edge is to be moved.\"},{name:\"ns-resize\",description:\"Indicates a bidirectional north-south cursor.\"},{name:\"nw-resize\",description:\"Indicates that movement starts from north-west corner.\"},{name:\"nwse-resize\",description:\"Indicates a bidirectional north-west/south-east cursor.\"},{name:\"pointer\",description:\"The cursor is a pointer that indicates a link.\"},{name:\"progress\",description:\"A progress indicator. The program is performing some processing, but is different from 'wait' in that the user may still interact with the program. Often rendered as a spinning beach ball, or an arrow with a watch or hourglass.\"},{name:\"row-resize\",description:\"Indicates that the item/row can be resized vertically. Often rendered as arrows pointing up and down with a horizontal bar separating them.\"},{name:\"se-resize\",description:\"Indicates that movement starts from south-east corner.\"},{name:\"s-resize\",description:\"Indicates that south edge is to be moved.\"},{name:\"sw-resize\",description:\"Indicates that movement starts from south-west corner.\"},{name:\"text\",description:\"Indicates text that may be selected. Often rendered as a vertical I-beam.\"},{name:\"vertical-text\",description:\"Indicates vertical-text that may be selected. Often rendered as a horizontal I-beam.\"},{name:\"wait\",description:\"Indicates that the program is busy and the user should wait. Often rendered as a watch or hourglass.\"},{name:\"-webkit-grab\",description:\"Indicates that something can be grabbed.\"},{name:\"-webkit-grabbing\",description:\"Indicates that something is being grabbed.\"},{name:\"-webkit-zoom-in\",description:\"Indicates that something can be zoomed (magnified) in.\"},{name:\"-webkit-zoom-out\",description:\"Indicates that something can be zoomed (magnified) out.\"},{name:\"w-resize\",description:\"Indicates that west edge is to be moved.\"},{name:\"zoom-in\",description:\"Indicates that something can be zoomed (magnified) in.\"},{name:\"zoom-out\",description:\"Indicates that something can be zoomed (magnified) out.\"}],syntax:\"[ [ <url> [ <x> <y> ]? , ]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out | grab | grabbing ] ]\",relevance:92,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/cursor\"}],description:\"Allows control over cursor appearance in an element\",restrictions:[\"url\",\"number\",\"enum\"]},{name:\"direction\",values:[{name:\"ltr\",description:\"Left-to-right direction.\"},{name:\"rtl\",description:\"Right-to-left direction.\"}],syntax:\"ltr | rtl\",relevance:69,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/direction\"}],description:\"Specifies the inline base direction or directionality of any bidi paragraph, embedding, isolate, or override established by the box. Note: for HTML content use the 'dir' attribute and 'bdo' element rather than this property.\",restrictions:[\"enum\"]},{name:\"display\",values:[{name:\"block\",description:\"The element generates a block-level box\"},{name:\"contents\",description:\"The element itself does not generate any boxes, but its children and pseudo-elements still generate boxes as normal.\"},{name:\"flex\",description:\"The element generates a principal flex container box and establishes a flex formatting context.\"},{name:\"flexbox\",description:\"The element lays out its contents using flow layout (block-and-inline layout). Standardized as 'flex'.\"},{name:\"flow-root\",description:\"The element generates a block container box, and lays out its contents using flow layout.\"},{name:\"grid\",description:\"The element generates a principal grid container box, and establishes a grid formatting context.\"},{name:\"inline\",description:\"The element generates an inline-level box.\"},{name:\"inline-block\",description:\"A block box, which itself is flowed as a single inline box, similar to a replaced element. The inside of an inline-block is formatted as a block box, and the box itself is formatted as an inline box.\"},{name:\"inline-flex\",description:\"Inline-level flex container.\"},{name:\"inline-flexbox\",description:\"Inline-level flex container. Standardized as 'inline-flex'\"},{name:\"inline-table\",description:\"Inline-level table wrapper box containing table box.\"},{name:\"list-item\",description:\"One or more block boxes and one marker box.\"},{name:\"-moz-box\",description:\"The element lays out its contents using flow layout (block-and-inline layout). Standardized as 'flex'.\"},{name:\"-moz-deck\"},{name:\"-moz-grid\"},{name:\"-moz-grid-group\"},{name:\"-moz-grid-line\"},{name:\"-moz-groupbox\"},{name:\"-moz-inline-box\",description:\"Inline-level flex container. Standardized as 'inline-flex'\"},{name:\"-moz-inline-grid\"},{name:\"-moz-inline-stack\"},{name:\"-moz-marker\"},{name:\"-moz-popup\"},{name:\"-moz-stack\"},{name:\"-ms-flexbox\",description:\"The element lays out its contents using flow layout (block-and-inline layout). Standardized as 'flex'.\"},{name:\"-ms-grid\",description:\"The element generates a principal grid container box, and establishes a grid formatting context.\"},{name:\"-ms-inline-flexbox\",description:\"Inline-level flex container. Standardized as 'inline-flex'\"},{name:\"-ms-inline-grid\",description:\"Inline-level grid container.\"},{name:\"none\",description:\"The element and its descendants generates no boxes.\"},{name:\"ruby\",description:\"The element generates a principal ruby container box, and establishes a ruby formatting context.\"},{name:\"ruby-base\"},{name:\"ruby-base-container\"},{name:\"ruby-text\"},{name:\"ruby-text-container\"},{name:\"run-in\",description:\"The element generates a run-in box. Run-in elements act like inlines or blocks, depending on the surrounding elements.\"},{name:\"table\",description:\"The element generates a principal table wrapper box containing an additionally-generated table box, and establishes a table formatting context.\"},{name:\"table-caption\"},{name:\"table-cell\"},{name:\"table-column\"},{name:\"table-column-group\"},{name:\"table-footer-group\"},{name:\"table-header-group\"},{name:\"table-row\"},{name:\"table-row-group\"},{name:\"-webkit-box\",description:\"The element lays out its contents using flow layout (block-and-inline layout). Standardized as 'flex'.\"},{name:\"-webkit-flex\",description:\"The element lays out its contents using flow layout (block-and-inline layout).\"},{name:\"-webkit-inline-box\",description:\"Inline-level flex container. Standardized as 'inline-flex'\"},{name:\"-webkit-inline-flex\",description:\"Inline-level flex container.\"}],syntax:\"[ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy>\",relevance:96,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/display\"}],description:\"In combination with 'float' and 'position', determines the type of box or boxes that are generated for an element.\",restrictions:[\"enum\"]},{name:\"empty-cells\",values:[{name:\"hide\",description:\"No borders or backgrounds are drawn around/behind empty cells.\"},{name:\"-moz-show-background\"},{name:\"show\",description:\"Borders and backgrounds are drawn around/behind empty cells (like normal cells).\"}],syntax:\"show | hide\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/empty-cells\"}],description:\"In the separated borders model, this property controls the rendering of borders and backgrounds around cells that have no visible content.\",restrictions:[\"enum\"]},{name:\"enable-background\",values:[{name:\"accumulate\",description:\"If the ancestor container element has a property of new, then all graphics elements within the current container are rendered both on the parent's background image and onto the target.\"},{name:\"new\",description:\"Create a new background image canvas. All children of the current container element can access the background, and they will be rendered onto both the parent's background image canvas in addition to the target device.\"}],relevance:50,description:\"Deprecated. Use 'isolation' property instead when support allows. Specifies how the accumulation of the background image is managed.\",restrictions:[\"integer\",\"length\",\"percentage\",\"enum\"]},{name:\"fallback\",browsers:[\"FF33\"],syntax:\"<counter-style-name>\",relevance:50,description:\"@counter-style descriptor. Specifies a fallback counter style to be used when the current counter style can\\u2019t create a representation for a given counter value.\",restrictions:[\"identifier\"]},{name:\"fill\",values:[{name:\"url()\",description:\"A URL reference to a paint server element, which is an element that defines a paint server: \\u2018hatch\\u2019, \\u2018linearGradient\\u2019, \\u2018mesh\\u2019, \\u2018pattern\\u2019, \\u2018radialGradient\\u2019 and \\u2018solidcolor\\u2019.\"},{name:\"none\",description:\"No paint is applied in this layer.\"}],relevance:77,description:\"Paints the interior of the given graphical element.\",restrictions:[\"color\",\"enum\",\"url\"]},{name:\"fill-opacity\",relevance:52,description:\"Specifies the opacity of the painting operation used to paint the interior the current object.\",restrictions:[\"number(0-1)\"]},{name:\"fill-rule\",values:[{name:\"evenodd\",description:\"Determines the \\u2018insideness\\u2019 of a point on the canvas by drawing a ray from that point to infinity in any direction and counting the number of path segments from the given shape that the ray crosses.\"},{name:\"nonzero\",description:\"Determines the \\u2018insideness\\u2019 of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray.\"}],relevance:50,description:\"Indicates the algorithm (or winding rule) which is to be used to determine what parts of the canvas are included inside the shape.\",restrictions:[\"enum\"]},{name:\"filter\",browsers:[\"E12\",\"FF35\",\"S9.1\",\"C53\",\"O40\"],values:[{name:\"none\",description:\"No filter effects are applied.\"},{name:\"blur()\",description:\"Applies a Gaussian blur to the input image.\"},{name:\"brightness()\",description:\"Applies a linear multiplier to input image, making it appear more or less bright.\"},{name:\"contrast()\",description:\"Adjusts the contrast of the input.\"},{name:\"drop-shadow()\",description:\"Applies a drop shadow effect to the input image.\"},{name:\"grayscale()\",description:\"Converts the input image to grayscale.\"},{name:\"hue-rotate()\",description:\"Applies a hue rotation on the input image. \"},{name:\"invert()\",description:\"Inverts the samples in the input image.\"},{name:\"opacity()\",description:\"Applies transparency to the samples in the input image.\"},{name:\"saturate()\",description:\"Saturates the input image.\"},{name:\"sepia()\",description:\"Converts the input image to sepia.\"},{name:\"url()\",browsers:[\"E12\",\"FF35\",\"S9.1\",\"C53\",\"O40\"],description:\"A filter reference to a <filter> element.\"}],syntax:\"none | <filter-function-list>\",relevance:66,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/filter\"}],description:\"Processes an element\\u2019s rendering before it is displayed in the document, by applying one or more filter effects.\",restrictions:[\"enum\",\"url\"]},{name:\"flex\",values:[{name:\"auto\",description:\"Retrieves the value of the main size property as the used 'flex-basis'.\"},{name:\"content\",description:\"Indicates automatic sizing, based on the flex item\\u2019s content.\"},{name:\"none\",description:\"Expands to '0 0 auto'.\"}],syntax:\"none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]\",relevance:80,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/flex\"}],description:\"Specifies the components of a flexible length: the flex grow factor and flex shrink factor, and the flex basis.\",restrictions:[\"length\",\"number\",\"percentage\"]},{name:\"flex-basis\",values:[{name:\"auto\",description:\"Retrieves the value of the main size property as the used 'flex-basis'.\"},{name:\"content\",description:\"Indicates automatic sizing, based on the flex item\\u2019s content.\"}],syntax:\"content | <'width'>\",relevance:65,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/flex-basis\"}],description:\"Sets the flex basis.\",restrictions:[\"length\",\"number\",\"percentage\"]},{name:\"flex-direction\",values:[{name:\"column\",description:\"The flex container\\u2019s main axis has the same orientation as the block axis of the current writing mode.\"},{name:\"column-reverse\",description:\"Same as 'column', except the main-start and main-end directions are swapped.\"},{name:\"row\",description:\"The flex container\\u2019s main axis has the same orientation as the inline axis of the current writing mode.\"},{name:\"row-reverse\",description:\"Same as 'row', except the main-start and main-end directions are swapped.\"}],syntax:\"row | row-reverse | column | column-reverse\",relevance:83,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/flex-direction\"}],description:\"Specifies how flex items are placed in the flex container, by setting the direction of the flex container\\u2019s main axis.\",restrictions:[\"enum\"]},{name:\"flex-flow\",values:[{name:\"column\",description:\"The flex container\\u2019s main axis has the same orientation as the block axis of the current writing mode.\"},{name:\"column-reverse\",description:\"Same as 'column', except the main-start and main-end directions are swapped.\"},{name:\"nowrap\",description:\"The flex container is single-line.\"},{name:\"row\",description:\"The flex container\\u2019s main axis has the same orientation as the inline axis of the current writing mode.\"},{name:\"row-reverse\",description:\"Same as 'row', except the main-start and main-end directions are swapped.\"},{name:\"wrap\",description:\"The flexbox is multi-line.\"},{name:\"wrap-reverse\",description:\"Same as 'wrap', except the cross-start and cross-end directions are swapped.\"}],syntax:\"<'flex-direction'> || <'flex-wrap'>\",relevance:61,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/flex-flow\"}],description:\"Specifies how flexbox items are placed in the flexbox.\",restrictions:[\"enum\"]},{name:\"flex-grow\",syntax:\"<number>\",relevance:75,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/flex-grow\"}],description:\"Sets the flex grow factor. Negative numbers are invalid.\",restrictions:[\"number\"]},{name:\"flex-shrink\",syntax:\"<number>\",relevance:74,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/flex-shrink\"}],description:\"Sets the flex shrink factor. Negative numbers are invalid.\",restrictions:[\"number\"]},{name:\"flex-wrap\",values:[{name:\"nowrap\",description:\"The flex container is single-line.\"},{name:\"wrap\",description:\"The flexbox is multi-line.\"},{name:\"wrap-reverse\",description:\"Same as 'wrap', except the cross-start and cross-end directions are swapped.\"}],syntax:\"nowrap | wrap | wrap-reverse\",relevance:79,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/flex-wrap\"}],description:\"Controls whether the flex container is single-line or multi-line, and the direction of the cross-axis, which determines the direction new lines are stacked in.\",restrictions:[\"enum\"]},{name:\"float\",values:[{name:\"inline-end\",description:\"A keyword indicating that the element must float on the end side of its containing block. That is the right side with ltr scripts, and the left side with rtl scripts.\"},{name:\"inline-start\",description:\"A keyword indicating that the element must float on the start side of its containing block. That is the left side with ltr scripts, and the right side with rtl scripts.\"},{name:\"left\",description:\"The element generates a block box that is floated to the left. Content flows on the right side of the box, starting at the top (subject to the 'clear' property).\"},{name:\"none\",description:\"The box is not floated.\"},{name:\"right\",description:\"Similar to 'left', except the box is floated to the right, and content flows on the left side of the box, starting at the top.\"}],syntax:\"left | right | none | inline-start | inline-end\",relevance:91,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/float\"}],description:\"Specifies how a box should be floated. It may be set for any element, but only applies to elements that generate boxes that are not absolutely positioned.\",restrictions:[\"enum\"]},{name:\"flood-color\",browsers:[\"E\",\"C5\",\"FF3\",\"IE10\",\"O9\",\"S6\"],relevance:50,description:\"Indicates what color to use to flood the current filter primitive subregion.\",restrictions:[\"color\"]},{name:\"flood-opacity\",browsers:[\"E\",\"C5\",\"FF3\",\"IE10\",\"O9\",\"S6\"],relevance:50,description:\"Indicates what opacity to use to flood the current filter primitive subregion.\",restrictions:[\"number(0-1)\",\"percentage\"]},{name:\"font\",values:[{name:\"100\",description:\"Thin\"},{name:\"200\",description:\"Extra Light (Ultra Light)\"},{name:\"300\",description:\"Light\"},{name:\"400\",description:\"Normal\"},{name:\"500\",description:\"Medium\"},{name:\"600\",description:\"Semi Bold (Demi Bold)\"},{name:\"700\",description:\"Bold\"},{name:\"800\",description:\"Extra Bold (Ultra Bold)\"},{name:\"900\",description:\"Black (Heavy)\"},{name:\"bold\",description:\"Same as 700\"},{name:\"bolder\",description:\"Specifies the weight of the face bolder than the inherited value.\"},{name:\"caption\",description:\"The font used for captioned controls (e.g., buttons, drop-downs, etc.).\"},{name:\"icon\",description:\"The font used to label icons.\"},{name:\"italic\",description:\"Selects a font that is labeled 'italic', or, if that is not available, one labeled 'oblique'.\"},{name:\"large\"},{name:\"larger\"},{name:\"lighter\",description:\"Specifies the weight of the face lighter than the inherited value.\"},{name:\"medium\"},{name:\"menu\",description:\"The font used in menus (e.g., dropdown menus and menu lists).\"},{name:\"message-box\",description:\"The font used in dialog boxes.\"},{name:\"normal\",description:\"Specifies a face that is not labeled as a small-caps font.\"},{name:\"oblique\",description:\"Selects a font that is labeled 'oblique'.\"},{name:\"small\"},{name:\"small-caps\",description:\"Specifies a font that is labeled as a small-caps font. If a genuine small-caps font is not available, user agents should simulate a small-caps font.\"},{name:\"small-caption\",description:\"The font used for labeling small controls.\"},{name:\"smaller\"},{name:\"status-bar\",description:\"The font used in window status bars.\"},{name:\"x-large\"},{name:\"x-small\"},{name:\"xx-large\"},{name:\"xx-small\"}],syntax:\"[ [ <'font-style'> || <font-variant-css21> || <'font-weight'> || <'font-stretch'> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar\",relevance:84,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font\"}],description:\"Shorthand property for setting 'font-style', 'font-variant', 'font-weight', 'font-size', 'line-height', and 'font-family', at the same place in the style sheet. The syntax of this property is based on a traditional typographical shorthand notation to set multiple properties related to fonts.\",restrictions:[\"font\"]},{name:\"font-family\",values:[{name:\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif\"},{name:\"Arial, Helvetica, sans-serif\"},{name:\"Cambria, Cochin, Georgia, Times, 'Times New Roman', serif\"},{name:\"'Courier New', Courier, monospace\"},{name:\"cursive\"},{name:\"fantasy\"},{name:\"'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif\"},{name:\"Georgia, 'Times New Roman', Times, serif\"},{name:\"'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif\"},{name:\"Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif\"},{name:\"'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif\"},{name:\"monospace\"},{name:\"sans-serif\"},{name:\"'Segoe UI', Tahoma, Geneva, Verdana, sans-serif\"},{name:\"serif\"},{name:\"'Times New Roman', Times, serif\"},{name:\"'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif\"},{name:\"Verdana, Geneva, Tahoma, sans-serif\"}],syntax:\"<family-name>\",relevance:94,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-family\"}],description:\"Specifies a prioritized list of font family names or generic family names. A user agent iterates through the list of family names until it matches an available font that contains a glyph for the character to be rendered.\",restrictions:[\"font\"]},{name:\"font-feature-settings\",values:[{name:'\"aalt\"',description:\"Access All Alternates.\"},{name:'\"abvf\"',description:\"Above-base Forms. Required in Khmer script.\"},{name:'\"abvm\"',description:\"Above-base Mark Positioning. Required in Indic scripts.\"},{name:'\"abvs\"',description:\"Above-base Substitutions. Required in Indic scripts.\"},{name:'\"afrc\"',description:\"Alternative Fractions.\"},{name:'\"akhn\"',description:\"Akhand. Required in most Indic scripts.\"},{name:'\"blwf\"',description:\"Below-base Form. Required in a number of Indic scripts.\"},{name:'\"blwm\"',description:\"Below-base Mark Positioning. Required in Indic scripts.\"},{name:'\"blws\"',description:\"Below-base Substitutions. Required in Indic scripts.\"},{name:'\"calt\"',description:\"Contextual Alternates.\"},{name:'\"case\"',description:\"Case-Sensitive Forms. Applies only to European scripts; particularly prominent in Spanish-language setting.\"},{name:'\"ccmp\"',description:\"Glyph Composition/Decomposition.\"},{name:'\"cfar\"',description:\"Conjunct Form After Ro. Required in Khmer scripts.\"},{name:'\"cjct\"',description:\"Conjunct Forms. Required in Indic scripts that show similarity to Devanagari.\"},{name:'\"clig\"',description:\"Contextual Ligatures.\"},{name:'\"cpct\"',description:\"Centered CJK Punctuation. Used primarily in Chinese fonts.\"},{name:'\"cpsp\"',description:\"Capital Spacing. Should not be used in connecting scripts (e.g. most Arabic).\"},{name:'\"cswh\"',description:\"Contextual Swash.\"},{name:'\"curs\"',description:\"Cursive Positioning. Can be used in any cursive script.\"},{name:'\"c2pc\"',description:\"Petite Capitals From Capitals. Applies only to bicameral scripts.\"},{name:'\"c2sc\"',description:\"Small Capitals From Capitals. Applies only to bicameral scripts.\"},{name:'\"dist\"',description:\"Distances. Required in Indic scripts.\"},{name:'\"dlig\"',description:\"Discretionary ligatures.\"},{name:'\"dnom\"',description:\"Denominators.\"},{name:'\"dtls\"',description:\"Dotless Forms. Applied to math formula layout.\"},{name:'\"expt\"',description:\"Expert Forms. Applies only to Japanese.\"},{name:'\"falt\"',description:\"Final Glyph on Line Alternates. Can be used in any cursive script.\"},{name:'\"fin2\"',description:\"Terminal Form #2. Used only with the Syriac script.\"},{name:'\"fin3\"',description:\"Terminal Form #3. Used only with the Syriac script.\"},{name:'\"fina\"',description:\"Terminal Forms. Can be used in any alphabetic script.\"},{name:'\"flac\"',description:\"Flattened ascent forms. Applied to math formula layout.\"},{name:'\"frac\"',description:\"Fractions.\"},{name:'\"fwid\"',description:\"Full Widths. Applies to any script which can use monospaced forms.\"},{name:'\"half\"',description:\"Half Forms. Required in Indic scripts that show similarity to Devanagari.\"},{name:'\"haln\"',description:\"Halant Forms. Required in Indic scripts.\"},{name:'\"halt\"',description:\"Alternate Half Widths. Used only in CJKV fonts.\"},{name:'\"hist\"',description:\"Historical Forms.\"},{name:'\"hkna\"',description:\"Horizontal Kana Alternates. Applies only to fonts that support kana (hiragana and katakana).\"},{name:'\"hlig\"',description:\"Historical Ligatures.\"},{name:'\"hngl\"',description:\"Hangul. Korean only.\"},{name:'\"hojo\"',description:\"Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms). Used only with Kanji script.\"},{name:'\"hwid\"',description:\"Half Widths. Generally used only in CJKV fonts.\"},{name:'\"init\"',description:\"Initial Forms. Can be used in any alphabetic script.\"},{name:'\"isol\"',description:\"Isolated Forms. Can be used in any cursive script.\"},{name:'\"ital\"',description:\"Italics. Applies mostly to Latin; note that many non-Latin fonts contain Latin as well.\"},{name:'\"jalt\"',description:\"Justification Alternates. Can be used in any cursive script.\"},{name:'\"jp78\"',description:\"JIS78 Forms. Applies only to Japanese.\"},{name:'\"jp83\"',description:\"JIS83 Forms. Applies only to Japanese.\"},{name:'\"jp90\"',description:\"JIS90 Forms. Applies only to Japanese.\"},{name:'\"jp04\"',description:\"JIS2004 Forms. Applies only to Japanese.\"},{name:'\"kern\"',description:\"Kerning.\"},{name:'\"lfbd\"',description:\"Left Bounds.\"},{name:'\"liga\"',description:\"Standard Ligatures.\"},{name:'\"ljmo\"',description:\"Leading Jamo Forms. Required for Hangul script when Ancient Hangul writing system is supported.\"},{name:'\"lnum\"',description:\"Lining Figures.\"},{name:'\"locl\"',description:\"Localized Forms.\"},{name:'\"ltra\"',description:\"Left-to-right glyph alternates.\"},{name:'\"ltrm\"',description:\"Left-to-right mirrored forms.\"},{name:'\"mark\"',description:\"Mark Positioning.\"},{name:'\"med2\"',description:\"Medial Form #2. Used only with the Syriac script.\"},{name:'\"medi\"',description:\"Medial Forms.\"},{name:'\"mgrk\"',description:\"Mathematical Greek.\"},{name:'\"mkmk\"',description:\"Mark to Mark Positioning.\"},{name:'\"nalt\"',description:\"Alternate Annotation Forms.\"},{name:'\"nlck\"',description:\"NLC Kanji Forms. Used only with Kanji script.\"},{name:'\"nukt\"',description:\"Nukta Forms. Required in Indic scripts..\"},{name:'\"numr\"',description:\"Numerators.\"},{name:'\"onum\"',description:\"Oldstyle Figures.\"},{name:'\"opbd\"',description:\"Optical Bounds.\"},{name:'\"ordn\"',description:\"Ordinals. Applies mostly to Latin script.\"},{name:'\"ornm\"',description:\"Ornaments.\"},{name:'\"palt\"',description:\"Proportional Alternate Widths. Used mostly in CJKV fonts.\"},{name:'\"pcap\"',description:\"Petite Capitals.\"},{name:'\"pkna\"',description:\"Proportional Kana. Generally used only in Japanese fonts.\"},{name:'\"pnum\"',description:\"Proportional Figures.\"},{name:'\"pref\"',description:\"Pre-base Forms. Required in Khmer and Myanmar (Burmese) scripts and southern Indic scripts that may display a pre-base form of Ra.\"},{name:'\"pres\"',description:\"Pre-base Substitutions. Required in Indic scripts.\"},{name:'\"pstf\"',description:\"Post-base Forms. Required in scripts of south and southeast Asia that have post-base forms for consonants eg: Gurmukhi, Malayalam, Khmer.\"},{name:'\"psts\"',description:\"Post-base Substitutions.\"},{name:'\"pwid\"',description:\"Proportional Widths.\"},{name:'\"qwid\"',description:\"Quarter Widths. Generally used only in CJKV fonts.\"},{name:'\"rand\"',description:\"Randomize.\"},{name:'\"rclt\"',description:\"Required Contextual Alternates. May apply to any script, but is especially important for many styles of Arabic.\"},{name:'\"rlig\"',description:\"Required Ligatures. Applies to Arabic and Syriac. May apply to some other scripts.\"},{name:'\"rkrf\"',description:\"Rakar Forms. Required in Devanagari and Gujarati scripts.\"},{name:'\"rphf\"',description:\"Reph Form. Required in Indic scripts. E.g. Devanagari, Kannada.\"},{name:'\"rtbd\"',description:\"Right Bounds.\"},{name:'\"rtla\"',description:\"Right-to-left alternates.\"},{name:'\"rtlm\"',description:\"Right-to-left mirrored forms.\"},{name:'\"ruby\"',description:\"Ruby Notation Forms. Applies only to Japanese.\"},{name:'\"salt\"',description:\"Stylistic Alternates.\"},{name:'\"sinf\"',description:\"Scientific Inferiors.\"},{name:'\"size\"',description:\"Optical size.\"},{name:'\"smcp\"',description:\"Small Capitals. Applies only to bicameral scripts.\"},{name:'\"smpl\"',description:\"Simplified Forms. Applies only to Chinese and Japanese.\"},{name:'\"ssty\"',description:\"Math script style alternates.\"},{name:'\"stch\"',description:\"Stretching Glyph Decomposition.\"},{name:'\"subs\"',description:\"Subscript.\"},{name:'\"sups\"',description:\"Superscript.\"},{name:'\"swsh\"',description:\"Swash. Does not apply to ideographic scripts.\"},{name:'\"titl\"',description:\"Titling.\"},{name:'\"tjmo\"',description:\"Trailing Jamo Forms. Required for Hangul script when Ancient Hangul writing system is supported.\"},{name:'\"tnam\"',description:\"Traditional Name Forms. Applies only to Japanese.\"},{name:'\"tnum\"',description:\"Tabular Figures.\"},{name:'\"trad\"',description:\"Traditional Forms. Applies only to Chinese and Japanese.\"},{name:'\"twid\"',description:\"Third Widths. Generally used only in CJKV fonts.\"},{name:'\"unic\"',description:\"Unicase.\"},{name:'\"valt\"',description:\"Alternate Vertical Metrics. Applies only to scripts with vertical writing modes.\"},{name:'\"vatu\"',description:\"Vattu Variants. Used for Indic scripts. E.g. Devanagari.\"},{name:'\"vert\"',description:\"Vertical Alternates. Applies only to scripts with vertical writing modes.\"},{name:'\"vhal\"',description:\"Alternate Vertical Half Metrics. Used only in CJKV fonts.\"},{name:'\"vjmo\"',description:\"Vowel Jamo Forms. Required for Hangul script when Ancient Hangul writing system is supported.\"},{name:'\"vkna\"',description:\"Vertical Kana Alternates. Applies only to fonts that support kana (hiragana and katakana).\"},{name:'\"vkrn\"',description:\"Vertical Kerning.\"},{name:'\"vpal\"',description:\"Proportional Alternate Vertical Metrics. Used mostly in CJKV fonts.\"},{name:'\"vrt2\"',description:\"Vertical Alternates and Rotation. Applies only to scripts with vertical writing modes.\"},{name:'\"zero\"',description:\"Slashed Zero.\"},{name:\"normal\",description:\"No change in glyph substitution or positioning occurs.\"},{name:\"off\",description:\"Disable feature.\"},{name:\"on\",description:\"Enable feature.\"}],syntax:\"normal | <feature-tag-value>#\",relevance:57,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-feature-settings\"}],description:\"Provides low-level control over OpenType font features. It is intended as a way of providing access to font features that are not widely used but are needed for a particular use case.\",restrictions:[\"string\",\"integer\"]},{name:\"font-kerning\",browsers:[\"E79\",\"FF32\",\"S9\",\"C33\",\"O20\"],values:[{name:\"auto\",description:\"Specifies that kerning is applied at the discretion of the user agent.\"},{name:\"none\",description:\"Specifies that kerning is not applied.\"},{name:\"normal\",description:\"Specifies that kerning is applied.\"}],syntax:\"auto | normal | none\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-kerning\"}],description:\"Kerning is the contextual adjustment of inter-glyph spacing. This property controls metric kerning, kerning that utilizes adjustment data contained in the font.\",restrictions:[\"enum\"]},{name:\"font-language-override\",browsers:[\"FF34\"],values:[{name:\"normal\",description:\"Implies that when rendering with OpenType fonts the language of the document is used to infer the OpenType language system, used to select language specific features when rendering.\"}],syntax:\"normal | <string>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-language-override\"}],description:\"The value of 'normal' implies that when rendering with OpenType fonts the language of the document is used to infer the OpenType language system, used to select language specific features when rendering.\",restrictions:[\"string\"]},{name:\"font-size\",values:[{name:\"large\"},{name:\"larger\"},{name:\"medium\"},{name:\"small\"},{name:\"smaller\"},{name:\"x-large\"},{name:\"x-small\"},{name:\"xx-large\"},{name:\"xx-small\"}],syntax:\"<absolute-size> | <relative-size> | <length-percentage>\",relevance:95,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-size\"}],description:\"Indicates the desired height of glyphs from the font. For scalable fonts, the font-size is a scale factor applied to the EM unit of the font. (Note that certain glyphs may bleed outside their EM box.) For non-scalable fonts, the font-size is converted into absolute units and matched against the declared font-size of the font, using the same absolute coordinate space for both of the matched values.\",restrictions:[\"length\",\"percentage\"]},{name:\"font-size-adjust\",browsers:[\"E79\",\"FF40\",\"C43\",\"O30\"],values:[{name:\"none\",description:\"Do not preserve the font\\u2019s x-height.\"}],syntax:\"none | [ ex-height | cap-height | ch-width | ic-width | ic-height ]? [ from-font | <number> ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-size-adjust\"}],description:\"Preserves the readability of text when font fallback occurs by adjusting the font-size so that the x-height is the same regardless of the font used.\",restrictions:[\"number\"]},{name:\"font-stretch\",values:[{name:\"condensed\"},{name:\"expanded\"},{name:\"extra-condensed\"},{name:\"extra-expanded\"},{name:\"narrower\",description:\"Indicates a narrower value relative to the width of the parent element.\"},{name:\"normal\"},{name:\"semi-condensed\"},{name:\"semi-expanded\"},{name:\"ultra-condensed\"},{name:\"ultra-expanded\"},{name:\"wider\",description:\"Indicates a wider value relative to the width of the parent element.\"}],syntax:\"<font-stretch-absolute>{1,2}\",relevance:56,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-stretch\"}],description:\"Selects a normal, condensed, or expanded face from a font family.\",restrictions:[\"enum\"]},{name:\"font-style\",values:[{name:\"italic\",description:\"Selects a font that is labeled as an 'italic' face, or an 'oblique' face if one is not\"},{name:\"normal\",description:\"Selects a face that is classified as 'normal'.\"},{name:\"oblique\",description:\"Selects a font that is labeled as an 'oblique' face, or an 'italic' face if one is not.\"}],syntax:\"normal | italic | oblique <angle>{0,2}\",relevance:90,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-style\"}],description:\"Allows italic or oblique faces to be selected. Italic forms are generally cursive in nature while oblique faces are typically sloped versions of the regular face.\",restrictions:[\"enum\"]},{name:\"font-synthesis\",browsers:[\"E97\",\"FF34\",\"S9\",\"C97\",\"O83\"],values:[{name:\"none\",description:\"Disallow all synthetic faces.\"},{name:\"style\",description:\"Allow synthetic italic faces.\"},{name:\"weight\",description:\"Allow synthetic bold faces.\"}],syntax:\"none | [ weight || style || small-caps ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-synthesis\"}],description:\"Controls whether user agents are allowed to synthesize bold or oblique font faces when a font family lacks bold or italic faces.\",restrictions:[\"enum\"]},{name:\"font-variant\",values:[{name:\"normal\",description:\"Specifies a face that is not labeled as a small-caps font.\"},{name:\"small-caps\",description:\"Specifies a font that is labeled as a small-caps font. If a genuine small-caps font is not available, user agents should simulate a small-caps font.\"}],syntax:\"normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> || stylistic(<feature-value-name>) || historical-forms || styleset(<feature-value-name>#) || character-variant(<feature-value-name>#) || swash(<feature-value-name>) || ornaments(<feature-value-name>) || annotation(<feature-value-name>) || [ small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps ] || <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero || <east-asian-variant-values> || <east-asian-width-values> || ruby ]\",relevance:64,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-variant\"}],description:\"Specifies variant representations of the font\",restrictions:[\"enum\"]},{name:\"font-variant-alternates\",browsers:[\"FF34\",\"S9.1\"],values:[{name:\"annotation()\",description:\"Enables display of alternate annotation forms.\"},{name:\"character-variant()\",description:\"Enables display of specific character variants.\"},{name:\"historical-forms\",description:\"Enables display of historical forms.\"},{name:\"normal\",description:\"None of the features are enabled.\"},{name:\"ornaments()\",description:\"Enables replacement of default glyphs with ornaments, if provided in the font.\"},{name:\"styleset()\",description:\"Enables display with stylistic sets.\"},{name:\"stylistic()\",description:\"Enables display of stylistic alternates.\"},{name:\"swash()\",description:\"Enables display of swash glyphs.\"}],syntax:\"normal | [ stylistic( <feature-value-name> ) || historical-forms || styleset( <feature-value-name># ) || character-variant( <feature-value-name># ) || swash( <feature-value-name> ) || ornaments( <feature-value-name> ) || annotation( <feature-value-name> ) ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-variant-alternates\"}],description:\"For any given character, fonts can provide a variety of alternate glyphs in addition to the default glyph for that character. This property provides control over the selection of these alternate glyphs.\",restrictions:[\"enum\"]},{name:\"font-variant-caps\",browsers:[\"E79\",\"FF34\",\"S9.1\",\"C52\",\"O39\"],values:[{name:\"all-petite-caps\",description:\"Enables display of petite capitals for both upper and lowercase letters.\"},{name:\"all-small-caps\",description:\"Enables display of small capitals for both upper and lowercase letters.\"},{name:\"normal\",description:\"None of the features are enabled.\"},{name:\"petite-caps\",description:\"Enables display of petite capitals.\"},{name:\"small-caps\",description:\"Enables display of small capitals. Small-caps glyphs typically use the form of uppercase letters but are reduced to the size of lowercase letters.\"},{name:\"titling-caps\",description:\"Enables display of titling capitals.\"},{name:\"unicase\",description:\"Enables display of mixture of small capitals for uppercase letters with normal lowercase letters.\"}],syntax:\"normal | small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-variant-caps\"}],description:\"Specifies control over capitalized forms.\",restrictions:[\"enum\"]},{name:\"font-variant-east-asian\",browsers:[\"E79\",\"FF34\",\"S9.1\",\"C63\",\"O50\"],values:[{name:\"full-width\",description:\"Enables rendering of full-width variants.\"},{name:\"jis04\",description:\"Enables rendering of JIS04 forms.\"},{name:\"jis78\",description:\"Enables rendering of JIS78 forms.\"},{name:\"jis83\",description:\"Enables rendering of JIS83 forms.\"},{name:\"jis90\",description:\"Enables rendering of JIS90 forms.\"},{name:\"normal\",description:\"None of the features are enabled.\"},{name:\"proportional-width\",description:\"Enables rendering of proportionally-spaced variants.\"},{name:\"ruby\",description:\"Enables display of ruby variant glyphs.\"},{name:\"simplified\",description:\"Enables rendering of simplified forms.\"},{name:\"traditional\",description:\"Enables rendering of traditional forms.\"}],syntax:\"normal | [ <east-asian-variant-values> || <east-asian-width-values> || ruby ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-variant-east-asian\"}],description:\"Allows control of glyph substitute and positioning in East Asian text.\",restrictions:[\"enum\"]},{name:\"font-variant-ligatures\",browsers:[\"E79\",\"FF34\",\"S9.1\",\"C34\",\"O21\"],values:[{name:\"additional-ligatures\",description:\"Enables display of additional ligatures.\"},{name:\"common-ligatures\",description:\"Enables display of common ligatures.\"},{name:\"contextual\",browsers:[\"E79\",\"FF34\",\"S9.1\",\"C34\",\"O21\"],description:\"Enables display of contextual alternates.\"},{name:\"discretionary-ligatures\",description:\"Enables display of discretionary ligatures.\"},{name:\"historical-ligatures\",description:\"Enables display of historical ligatures.\"},{name:\"no-additional-ligatures\",description:\"Disables display of additional ligatures.\"},{name:\"no-common-ligatures\",description:\"Disables display of common ligatures.\"},{name:\"no-contextual\",browsers:[\"E79\",\"FF34\",\"S9.1\",\"C34\",\"O21\"],description:\"Disables display of contextual alternates.\"},{name:\"no-discretionary-ligatures\",description:\"Disables display of discretionary ligatures.\"},{name:\"no-historical-ligatures\",description:\"Disables display of historical ligatures.\"},{name:\"none\",browsers:[\"E79\",\"FF34\",\"S9.1\",\"C34\",\"O21\"],description:\"Disables all ligatures.\"},{name:\"normal\",description:\"Implies that the defaults set by the font are used.\"}],syntax:\"normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> ]\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-variant-ligatures\"}],description:\"Specifies control over which ligatures are enabled or disabled. A value of \\u2018normal\\u2019 implies that the defaults set by the font are used.\",restrictions:[\"enum\"]},{name:\"font-variant-numeric\",browsers:[\"E79\",\"FF34\",\"S9.1\",\"C52\",\"O39\"],values:[{name:\"diagonal-fractions\",description:\"Enables display of lining diagonal fractions.\"},{name:\"lining-nums\",description:\"Enables display of lining numerals.\"},{name:\"normal\",description:\"None of the features are enabled.\"},{name:\"oldstyle-nums\",description:\"Enables display of old-style numerals.\"},{name:\"ordinal\",description:\"Enables display of letter forms used with ordinal numbers.\"},{name:\"proportional-nums\",description:\"Enables display of proportional numerals.\"},{name:\"slashed-zero\",description:\"Enables display of slashed zeros.\"},{name:\"stacked-fractions\",description:\"Enables display of lining stacked fractions.\"},{name:\"tabular-nums\",description:\"Enables display of tabular numerals.\"}],syntax:\"normal | [ <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-variant-numeric\"}],description:\"Specifies control over numerical forms.\",restrictions:[\"enum\"]},{name:\"font-variant-position\",browsers:[\"FF34\",\"S9.1\"],values:[{name:\"normal\",description:\"None of the features are enabled.\"},{name:\"sub\",description:\"Enables display of subscript variants (OpenType feature: subs).\"},{name:\"super\",description:\"Enables display of superscript variants (OpenType feature: sups).\"}],syntax:\"normal | sub | super\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-variant-position\"}],description:\"Specifies the vertical position\",restrictions:[\"enum\"]},{name:\"font-weight\",values:[{name:\"100\",description:\"Thin\"},{name:\"200\",description:\"Extra Light (Ultra Light)\"},{name:\"300\",description:\"Light\"},{name:\"400\",description:\"Normal\"},{name:\"500\",description:\"Medium\"},{name:\"600\",description:\"Semi Bold (Demi Bold)\"},{name:\"700\",description:\"Bold\"},{name:\"800\",description:\"Extra Bold (Ultra Bold)\"},{name:\"900\",description:\"Black (Heavy)\"},{name:\"bold\",description:\"Same as 700\"},{name:\"bolder\",description:\"Specifies the weight of the face bolder than the inherited value.\"},{name:\"lighter\",description:\"Specifies the weight of the face lighter than the inherited value.\"},{name:\"normal\",description:\"Same as 400\"}],syntax:\"<font-weight-absolute>{1,2}\",relevance:94,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-weight\"}],description:\"Specifies weight of glyphs in the font, their degree of blackness or stroke thickness.\",restrictions:[\"enum\"]},{name:\"glyph-orientation-horizontal\",relevance:50,description:\"Controls glyph orientation when the inline-progression-direction is horizontal.\",restrictions:[\"angle\",\"number\"]},{name:\"glyph-orientation-vertical\",values:[{name:\"auto\",description:\"Sets the orientation based on the fullwidth or non-fullwidth characters and the most common orientation.\"}],relevance:50,description:\"Controls glyph orientation when the inline-progression-direction is vertical.\",restrictions:[\"angle\",\"number\",\"enum\"]},{name:\"grid-area\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"The property contributes nothing to the grid item\\u2019s placement, indicating auto-placement, an automatic span, or a default span of one.\"},{name:\"span\",description:\"Contributes a grid span to the grid item\\u2019s placement such that the corresponding edge of the grid item\\u2019s grid area is N lines from its opposite edge.\"}],syntax:\"<grid-line> [ / <grid-line> ]{0,3}\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-area\"}],description:\"Determine a grid item\\u2019s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement. Shorthand for 'grid-row-start', 'grid-column-start', 'grid-row-end', and 'grid-column-end'.\",restrictions:[\"identifier\",\"integer\"]},{name:\"grid\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],syntax:\"<'grid-template'> | <'grid-template-rows'> / [ auto-flow && dense? ] <'grid-auto-columns'>? | [ auto-flow && dense? ] <'grid-auto-rows'>? / <'grid-template-columns'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid\"}],description:\"The grid CSS property is a shorthand property that sets all of the explicit grid properties ('grid-template-rows', 'grid-template-columns', and 'grid-template-areas'), and all the implicit grid properties ('grid-auto-rows', 'grid-auto-columns', and 'grid-auto-flow'), in a single declaration.\",restrictions:[\"identifier\",\"length\",\"percentage\",\"string\",\"enum\"]},{name:\"grid-auto-columns\",values:[{name:\"min-content\",description:\"Represents the largest min-content contribution of the grid items occupying the grid track.\"},{name:\"max-content\",description:\"Represents the largest max-content contribution of the grid items occupying the grid track.\"},{name:\"auto\",description:\"As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track.\"},{name:\"minmax()\",description:\"Defines a size range greater than or equal to min and less than or equal to max.\"}],syntax:\"<track-size>+\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-auto-columns\"}],description:\"Specifies the size of implicitly created columns.\",restrictions:[\"length\",\"percentage\"]},{name:\"grid-auto-flow\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"row\",description:\"The auto-placement algorithm places items by filling each row in turn, adding new rows as necessary.\"},{name:\"column\",description:\"The auto-placement algorithm places items by filling each column in turn, adding new columns as necessary.\"},{name:\"dense\",description:\"If specified, the auto-placement algorithm uses a \\u201Cdense\\u201D packing algorithm, which attempts to fill in holes earlier in the grid if smaller items come up later.\"}],syntax:\"[ row | column ] || dense\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-auto-flow\"}],description:\"Controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.\",restrictions:[\"enum\"]},{name:\"grid-auto-rows\",values:[{name:\"min-content\",description:\"Represents the largest min-content contribution of the grid items occupying the grid track.\"},{name:\"max-content\",description:\"Represents the largest max-content contribution of the grid items occupying the grid track.\"},{name:\"auto\",description:\"As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track.\"},{name:\"minmax()\",description:\"Defines a size range greater than or equal to min and less than or equal to max.\"}],syntax:\"<track-size>+\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-auto-rows\"}],description:\"Specifies the size of implicitly created rows.\",restrictions:[\"length\",\"percentage\"]},{name:\"grid-column\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"The property contributes nothing to the grid item\\u2019s placement, indicating auto-placement, an automatic span, or a default span of one.\"},{name:\"span\",description:\"Contributes a grid span to the grid item\\u2019s placement such that the corresponding edge of the grid item\\u2019s grid area is N lines from its opposite edge.\"}],syntax:\"<grid-line> [ / <grid-line> ]?\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-column\"}],description:\"Shorthand for 'grid-column-start' and 'grid-column-end'.\",restrictions:[\"identifier\",\"integer\",\"enum\"]},{name:\"grid-column-end\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"The property contributes nothing to the grid item\\u2019s placement, indicating auto-placement, an automatic span, or a default span of one.\"},{name:\"span\",description:\"Contributes a grid span to the grid item\\u2019s placement such that the corresponding edge of the grid item\\u2019s grid area is N lines from its opposite edge.\"}],syntax:\"<grid-line>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-column-end\"}],description:\"Determine a grid item\\u2019s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement.\",restrictions:[\"identifier\",\"integer\",\"enum\"]},{name:\"grid-column-gap\",browsers:[\"FF52\",\"C57\",\"S10.1\",\"O44\"],status:\"obsolete\",syntax:\"<length-percentage>\",relevance:2,description:\"Specifies the gutters between grid columns. Replaced by 'column-gap' property.\",restrictions:[\"length\"]},{name:\"grid-column-start\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"The property contributes nothing to the grid item\\u2019s placement, indicating auto-placement, an automatic span, or a default span of one.\"},{name:\"span\",description:\"Contributes a grid span to the grid item\\u2019s placement such that the corresponding edge of the grid item\\u2019s grid area is N lines from its opposite edge.\"}],syntax:\"<grid-line>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-column-start\"}],description:\"Determine a grid item\\u2019s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement.\",restrictions:[\"identifier\",\"integer\",\"enum\"]},{name:\"grid-gap\",browsers:[\"FF52\",\"C57\",\"S10.1\",\"O44\"],status:\"obsolete\",syntax:\"<'grid-row-gap'> <'grid-column-gap'>?\",relevance:3,description:\"Shorthand that specifies the gutters between grid columns and grid rows in one declaration. Replaced by 'gap' property.\",restrictions:[\"length\"]},{name:\"grid-row\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"The property contributes nothing to the grid item\\u2019s placement, indicating auto-placement, an automatic span, or a default span of one.\"},{name:\"span\",description:\"Contributes a grid span to the grid item\\u2019s placement such that the corresponding edge of the grid item\\u2019s grid area is N lines from its opposite edge.\"}],syntax:\"<grid-line> [ / <grid-line> ]?\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-row\"}],description:\"Shorthand for 'grid-row-start' and 'grid-row-end'.\",restrictions:[\"identifier\",\"integer\",\"enum\"]},{name:\"grid-row-end\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"The property contributes nothing to the grid item\\u2019s placement, indicating auto-placement, an automatic span, or a default span of one.\"},{name:\"span\",description:\"Contributes a grid span to the grid item\\u2019s placement such that the corresponding edge of the grid item\\u2019s grid area is N lines from its opposite edge.\"}],syntax:\"<grid-line>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-row-end\"}],description:\"Determine a grid item\\u2019s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement.\",restrictions:[\"identifier\",\"integer\",\"enum\"]},{name:\"grid-row-gap\",browsers:[\"FF52\",\"C57\",\"S10.1\",\"O44\"],status:\"obsolete\",syntax:\"<length-percentage>\",relevance:1,description:\"Specifies the gutters between grid rows. Replaced by 'row-gap' property.\",restrictions:[\"length\"]},{name:\"grid-row-start\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"The property contributes nothing to the grid item\\u2019s placement, indicating auto-placement, an automatic span, or a default span of one.\"},{name:\"span\",description:\"Contributes a grid span to the grid item\\u2019s placement such that the corresponding edge of the grid item\\u2019s grid area is N lines from its opposite edge.\"}],syntax:\"<grid-line>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-row-start\"}],description:\"Determine a grid item\\u2019s size and location within the grid by contributing a line, a span, or nothing (automatic) to its grid placement.\",restrictions:[\"identifier\",\"integer\",\"enum\"]},{name:\"grid-template\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"none\",description:\"Sets all three properties to their initial values.\"},{name:\"min-content\",description:\"Represents the largest min-content contribution of the grid items occupying the grid track.\"},{name:\"max-content\",description:\"Represents the largest max-content contribution of the grid items occupying the grid track.\"},{name:\"auto\",description:\"As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track.\"},{name:\"subgrid\",description:\"Sets 'grid-template-rows' and 'grid-template-columns' to 'subgrid', and 'grid-template-areas' to its initial value.\"},{name:\"minmax()\",description:\"Defines a size range greater than or equal to min and less than or equal to max.\"},{name:\"repeat()\",description:\"Represents a repeated fragment of the track list, allowing a large number of columns or rows that exhibit a recurring pattern to be written in a more compact form.\"}],syntax:\"none | [ <'grid-template-rows'> / <'grid-template-columns'> ] | [ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]?\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-template\"}],description:\"Shorthand for setting grid-template-columns, grid-template-rows, and grid-template-areas in a single declaration.\",restrictions:[\"identifier\",\"length\",\"percentage\",\"string\",\"enum\"]},{name:\"grid-template-areas\",browsers:[\"E16\",\"FF52\",\"S10.1\",\"C57\",\"O44\"],values:[{name:\"none\",description:\"The grid container doesn\\u2019t define any named grid areas.\"}],syntax:\"none | <string>+\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-template-areas\"}],description:\"Specifies named grid areas, which are not associated with any particular grid item, but can be referenced from the grid-placement properties.\",restrictions:[\"string\"]},{name:\"grid-template-columns\",values:[{name:\"none\",description:\"There is no explicit grid; any rows/columns will be implicitly generated.\"},{name:\"min-content\",description:\"Represents the largest min-content contribution of the grid items occupying the grid track.\"},{name:\"max-content\",description:\"Represents the largest max-content contribution of the grid items occupying the grid track.\"},{name:\"auto\",description:\"As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track.\"},{name:\"subgrid\",description:\"Indicates that the grid will align to its parent grid in that axis.\"},{name:\"minmax()\",description:\"Defines a size range greater than or equal to min and less than or equal to max.\"},{name:\"repeat()\",description:\"Represents a repeated fragment of the track list, allowing a large number of columns or rows that exhibit a recurring pattern to be written in a more compact form.\"}],syntax:\"none | <track-list> | <auto-track-list> | subgrid <line-name-list>?\",relevance:58,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-template-columns\"}],description:\"specifies, as a space-separated track list, the line names and track sizing functions of the grid.\",restrictions:[\"identifier\",\"length\",\"percentage\",\"enum\"]},{name:\"grid-template-rows\",values:[{name:\"none\",description:\"There is no explicit grid; any rows/columns will be implicitly generated.\"},{name:\"min-content\",description:\"Represents the largest min-content contribution of the grid items occupying the grid track.\"},{name:\"max-content\",description:\"Represents the largest max-content contribution of the grid items occupying the grid track.\"},{name:\"auto\",description:\"As a maximum, identical to 'max-content'. As a minimum, represents the largest minimum size (as specified by min-width/min-height) of the grid items occupying the grid track.\"},{name:\"subgrid\",description:\"Indicates that the grid will align to its parent grid in that axis.\"},{name:\"minmax()\",description:\"Defines a size range greater than or equal to min and less than or equal to max.\"},{name:\"repeat()\",description:\"Represents a repeated fragment of the track list, allowing a large number of columns or rows that exhibit a recurring pattern to be written in a more compact form.\"}],syntax:\"none | <track-list> | <auto-track-list> | subgrid <line-name-list>?\",relevance:54,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/grid-template-rows\"}],description:\"specifies, as a space-separated track list, the line names and track sizing functions of the grid.\",restrictions:[\"identifier\",\"length\",\"percentage\",\"string\",\"enum\"]},{name:\"height\",values:[{name:\"auto\",description:\"The height depends on the values of other properties.\"},{name:\"fit-content\",description:\"Use the fit-content inline size or fit-content block size, as appropriate to the writing mode.\"},{name:\"max-content\",description:\"Use the max-content inline size or max-content block size, as appropriate to the writing mode.\"},{name:\"min-content\",description:\"Use the min-content inline size or min-content block size, as appropriate to the writing mode.\"}],syntax:\"<viewport-length>{1,2}\",relevance:96,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/height\"}],description:\"Specifies the height of the content area, padding area or border area (depending on 'box-sizing') of certain boxes.\",restrictions:[\"length\",\"percentage\"]},{name:\"hyphens\",values:[{name:\"auto\",description:\"Conditional hyphenation characters inside a word, if present, take priority over automatic resources when determining hyphenation points within the word.\"},{name:\"manual\",description:\"Words are only broken at line breaks where there are characters inside the word that suggest line break opportunities\"},{name:\"none\",description:\"Words are not broken at line breaks, even if characters inside the word suggest line break points.\"}],syntax:\"none | manual | auto\",relevance:55,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/hyphens\"}],description:\"Controls whether hyphenation is allowed to create more break opportunities within a line of text.\",restrictions:[\"enum\"]},{name:\"image-orientation\",browsers:[\"E81\",\"FF26\",\"S13.1\",\"C81\",\"O67\"],values:[{name:\"flip\",description:\"After rotating by the precededing angle, the image is flipped horizontally. Defaults to 0deg if the angle is ommitted.\"},{name:\"from-image\",description:\"If the image has an orientation specified in its metadata, such as EXIF, this value computes to the angle that the metadata specifies is necessary to correctly orient the image.\"}],syntax:\"from-image | <angle> | [ <angle>? flip ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/image-orientation\"}],description:\"Specifies an orthogonal rotation to be applied to an image before it is laid out.\",restrictions:[\"angle\"]},{name:\"image-rendering\",browsers:[\"E79\",\"FF3.6\",\"S6\",\"C13\",\"O15\"],values:[{name:\"auto\",description:\"The image should be scaled with an algorithm that maximizes the appearance of the image.\"},{name:\"crisp-edges\",description:\"The image must be scaled with an algorithm that preserves contrast and edges in the image, and which does not smooth colors or introduce blur to the image in the process.\"},{name:\"-moz-crisp-edges\",browsers:[\"E79\",\"FF3.6\",\"S6\",\"C13\",\"O15\"]},{name:\"optimizeQuality\",description:\"Deprecated.\"},{name:\"optimizeSpeed\",description:\"Deprecated.\"},{name:\"pixelated\",description:\"When scaling the image up, the 'nearest neighbor' or similar algorithm must be used, so that the image appears to be simply composed of very large pixels.\"}],syntax:\"auto | crisp-edges | pixelated\",relevance:54,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/image-rendering\"}],description:\"Provides a hint to the user-agent about what aspects of an image are most important to preserve when the image is scaled, to aid the user-agent in the choice of an appropriate scaling algorithm.\",restrictions:[\"enum\"]},{name:\"ime-mode\",browsers:[\"E12\",\"FF3\",\"IE5\"],values:[{name:\"active\",description:\"The input method editor is initially active; text entry is performed using it unless the user specifically dismisses it.\"},{name:\"auto\",description:\"No change is made to the current input method editor state. This is the default.\"},{name:\"disabled\",description:\"The input method editor is disabled and may not be activated by the user.\"},{name:\"inactive\",description:\"The input method editor is initially inactive, but the user may activate it if they wish.\"},{name:\"normal\",description:\"The IME state should be normal; this value can be used in a user style sheet to override the page setting.\"}],status:\"obsolete\",syntax:\"auto | normal | active | inactive | disabled\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/ime-mode\"}],description:\"Controls the state of the input method editor for text fields.\",restrictions:[\"enum\"]},{name:\"inline-size\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C57\",\"O44\"],values:[{name:\"auto\",description:\"Depends on the values of other properties.\"}],syntax:\"<'width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/inline-size\"}],description:\"Size of an element in the direction specified by 'writing-mode'.\",restrictions:[\"length\",\"percentage\"]},{name:\"isolation\",browsers:[\"E79\",\"FF36\",\"S8\",\"C41\",\"O30\"],values:[{name:\"auto\",description:\"Elements are not isolated unless an operation is applied that causes the creation of a stacking context.\"},{name:\"isolate\",description:\"In CSS will turn the element into a stacking context.\"}],syntax:\"auto | isolate\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/isolation\"}],description:\"In CSS setting to 'isolate' will turn the element into a stacking context. In SVG, it defines whether an element is isolated or not.\",restrictions:[\"enum\"]},{name:\"justify-content\",values:[{name:\"center\",description:\"Flex items are packed toward the center of the line.\"},{name:\"start\",description:\"The items are packed flush to each other toward the start edge of the alignment container in the main axis.\"},{name:\"end\",description:\"The items are packed flush to each other toward the end edge of the alignment container in the main axis.\"},{name:\"left\",description:\"The items are packed flush to each other toward the left edge of the alignment container in the main axis.\"},{name:\"right\",description:\"The items are packed flush to each other toward the right edge of the alignment container in the main axis.\"},{name:\"safe\",description:\"If the size of the item overflows the alignment container, the item is instead aligned as if the alignment mode were start.\"},{name:\"unsafe\",description:\"Regardless of the relative sizes of the item and alignment container, the given alignment value is honored.\"},{name:\"stretch\",description:\"If the combined size of the alignment subjects is less than the size of the alignment container, any auto-sized alignment subjects have their size increased equally (not proportionally), while still respecting the constraints imposed by max-height/max-width (or equivalent functionality), so that the combined size exactly fills the alignment container.\"},{name:\"space-evenly\",description:\"The items are evenly distributed within the alignment container along the main axis.\"},{name:\"flex-end\",description:\"Flex items are packed toward the end of the line.\"},{name:\"flex-start\",description:\"Flex items are packed toward the start of the line.\"},{name:\"space-around\",description:\"Flex items are evenly distributed in the line, with half-size spaces on either end.\"},{name:\"space-between\",description:\"Flex items are evenly distributed in the line.\"},{name:\"baseline\",description:\"Specifies participation in first-baseline alignment.\"},{name:\"first baseline\",description:\"Specifies participation in first-baseline alignment.\"},{name:\"last baseline\",description:\"Specifies participation in last-baseline alignment.\"}],syntax:\"normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]\",relevance:85,description:\"Aligns flex items along the main axis of the current line of the flex container.\",restrictions:[\"enum\"]},{name:\"kerning\",values:[{name:\"auto\",description:\"Indicates that the user agent should adjust inter-glyph spacing based on kerning tables that are included in the font that will be used.\"}],relevance:50,description:\"Indicates whether the user agent should adjust inter-glyph spacing based on kerning tables that are included in the relevant font or instead disable auto-kerning and set inter-character spacing to a specific length.\",restrictions:[\"length\",\"enum\"]},{name:\"left\",values:[{name:\"auto\",description:\"For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well\"}],syntax:\"<length> | <percentage> | auto\",relevance:95,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/left\"}],description:\"Specifies how far an absolutely positioned box's left margin edge is offset to the right of the left edge of the box's 'containing block'.\",restrictions:[\"length\",\"percentage\"]},{name:\"letter-spacing\",values:[{name:\"normal\",description:\"The spacing is the normal spacing for the current font. It is typically zero-length.\"}],syntax:\"normal | <length>\",relevance:81,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/letter-spacing\"}],description:\"Specifies the minimum, maximum, and optimal spacing between grapheme clusters.\",restrictions:[\"length\"]},{name:\"lighting-color\",browsers:[\"E\",\"C5\",\"FF3\",\"IE10\",\"O9\",\"S6\"],relevance:50,description:\"Defines the color of the light source for filter primitives 'feDiffuseLighting' and 'feSpecularLighting'.\",restrictions:[\"color\"]},{name:\"line-break\",values:[{name:\"auto\",description:\"The UA determines the set of line-breaking restrictions to use for CJK scripts, and it may vary the restrictions based on the length of the line; e.g., use a less restrictive set of line-break rules for short lines.\"},{name:\"loose\",description:\"Breaks text using the least restrictive set of line-breaking rules. Typically used for short lines, such as in newspapers.\"},{name:\"normal\",description:\"Breaks text using the most common set of line-breaking rules.\"},{name:\"strict\",description:\"Breaks CJK scripts using a more restrictive set of line-breaking rules than 'normal'.\"}],syntax:\"auto | loose | normal | strict | anywhere\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/line-break\"}],description:\"Specifies what set of line breaking restrictions are in effect within the element.\",restrictions:[\"enum\"]},{name:\"line-height\",values:[{name:\"normal\",description:\"Tells user agents to set the computed value to a 'reasonable' value based on the font size of the element.\"}],syntax:\"normal | <number> | <length> | <percentage>\",relevance:93,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/line-height\"}],description:\"Determines the block-progression dimension of the text content area of an inline box.\",restrictions:[\"number\",\"length\",\"percentage\"]},{name:\"list-style\",values:[{name:\"armenian\"},{name:\"circle\",description:\"A hollow circle.\"},{name:\"decimal\"},{name:\"decimal-leading-zero\"},{name:\"disc\",description:\"A filled circle.\"},{name:\"georgian\"},{name:\"inside\",description:\"The marker box is outside the principal block box, as described in the section on the ::marker pseudo-element below.\"},{name:\"lower-alpha\"},{name:\"lower-greek\"},{name:\"lower-latin\"},{name:\"lower-roman\"},{name:\"none\"},{name:\"outside\",description:\"The ::marker pseudo-element is an inline element placed immediately before all ::before pseudo-elements in the principal block box, after which the element's content flows.\"},{name:\"square\",description:\"A filled square.\"},{name:\"symbols()\",description:\"Allows a counter style to be defined inline.\"},{name:\"upper-alpha\"},{name:\"upper-latin\"},{name:\"upper-roman\"},{name:\"url()\"}],syntax:\"<'list-style-type'> || <'list-style-position'> || <'list-style-image'>\",relevance:85,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/list-style\"}],description:\"Shorthand for setting 'list-style-type', 'list-style-position' and 'list-style-image'\",restrictions:[\"image\",\"enum\",\"url\"]},{name:\"list-style-image\",values:[{name:\"none\",description:\"The default contents of the of the list item\\u2019s marker are given by 'list-style-type' instead.\"}],syntax:\"<image> | none\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/list-style-image\"}],description:\"Sets the image that will be used as the list item marker. When the image is available, it will replace the marker set with the 'list-style-type' marker.\",restrictions:[\"image\"]},{name:\"list-style-position\",values:[{name:\"inside\",description:\"The marker box is outside the principal block box, as described in the section on the ::marker pseudo-element below.\"},{name:\"outside\",description:\"The ::marker pseudo-element is an inline element placed immediately before all ::before pseudo-elements in the principal block box, after which the element's content flows.\"}],syntax:\"inside | outside\",relevance:55,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/list-style-position\"}],description:\"Specifies the position of the '::marker' pseudo-element's box in the list item.\",restrictions:[\"enum\"]},{name:\"list-style-type\",values:[{name:\"armenian\",description:\"Traditional uppercase Armenian numbering.\"},{name:\"circle\",description:\"A hollow circle.\"},{name:\"decimal\",description:\"Western decimal numbers.\"},{name:\"decimal-leading-zero\",description:\"Decimal numbers padded by initial zeros.\"},{name:\"disc\",description:\"A filled circle.\"},{name:\"georgian\",description:\"Traditional Georgian numbering.\"},{name:\"lower-alpha\",description:\"Lowercase ASCII letters.\"},{name:\"lower-greek\",description:\"Lowercase classical Greek.\"},{name:\"lower-latin\",description:\"Lowercase ASCII letters.\"},{name:\"lower-roman\",description:\"Lowercase ASCII Roman numerals.\"},{name:\"none\",description:\"No marker\"},{name:\"square\",description:\"A filled square.\"},{name:\"symbols()\",description:\"Allows a counter style to be defined inline.\"},{name:\"upper-alpha\",description:\"Uppercase ASCII letters.\"},{name:\"upper-latin\",description:\"Uppercase ASCII letters.\"},{name:\"upper-roman\",description:\"Uppercase ASCII Roman numerals.\"}],syntax:\"<counter-style> | <string> | none\",relevance:75,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/list-style-type\"}],description:\"Used to construct the default contents of a list item\\u2019s marker\",restrictions:[\"enum\",\"string\"]},{name:\"margin\",values:[{name:\"auto\"}],syntax:\"[ <length> | <percentage> | auto ]{1,4}\",relevance:96,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin\"}],description:\"Shorthand property to set values for the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits.\",restrictions:[\"length\",\"percentage\"]},{name:\"margin-block-end\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],values:[{name:\"auto\"}],syntax:\"<'margin-left'>\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-block-end\"}],description:\"Logical 'margin-bottom'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"margin-block-start\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],values:[{name:\"auto\"}],syntax:\"<'margin-left'>\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-block-start\"}],description:\"Logical 'margin-top'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"margin-bottom\",values:[{name:\"auto\"}],syntax:\"<length> | <percentage> | auto\",relevance:92,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-bottom\"}],description:\"Shorthand property to set values for the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits..\",restrictions:[\"length\",\"percentage\"]},{name:\"margin-inline-end\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],values:[{name:\"auto\"}],syntax:\"<'margin-left'>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-inline-end\"}],description:\"Logical 'margin-right'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"margin-inline-start\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],values:[{name:\"auto\"}],syntax:\"<'margin-left'>\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-inline-start\"}],description:\"Logical 'margin-left'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"margin-left\",values:[{name:\"auto\"}],syntax:\"<length> | <percentage> | auto\",relevance:92,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-left\"}],description:\"Shorthand property to set values for the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits..\",restrictions:[\"length\",\"percentage\"]},{name:\"margin-right\",values:[{name:\"auto\"}],syntax:\"<length> | <percentage> | auto\",relevance:91,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-right\"}],description:\"Shorthand property to set values for the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits..\",restrictions:[\"length\",\"percentage\"]},{name:\"margin-top\",values:[{name:\"auto\"}],syntax:\"<length> | <percentage> | auto\",relevance:95,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-top\"}],description:\"Shorthand property to set values for the thickness of the margin area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. Negative values for margin properties are allowed, but there may be implementation-specific limits..\",restrictions:[\"length\",\"percentage\"]},{name:\"marker\",values:[{name:\"none\",description:\"Indicates that no marker symbol will be drawn at the given vertex or vertices.\"},{name:\"url()\",description:\"Indicates that the <marker> element referenced will be used.\"}],relevance:50,description:\"Specifies the marker symbol that shall be used for all points on the sets the value for all vertices on the given \\u2018path\\u2019 element or basic shape.\",restrictions:[\"url\"]},{name:\"marker-end\",values:[{name:\"none\",description:\"Indicates that no marker symbol will be drawn at the given vertex or vertices.\"},{name:\"url()\",description:\"Indicates that the <marker> element referenced will be used.\"}],relevance:50,description:\"Specifies the marker that will be drawn at the last vertices of the given markable element.\",restrictions:[\"url\"]},{name:\"marker-mid\",values:[{name:\"none\",description:\"Indicates that no marker symbol will be drawn at the given vertex or vertices.\"},{name:\"url()\",description:\"Indicates that the <marker> element referenced will be used.\"}],relevance:50,description:\"Specifies the marker that will be drawn at all vertices except the first and last.\",restrictions:[\"url\"]},{name:\"marker-start\",values:[{name:\"none\",description:\"Indicates that no marker symbol will be drawn at the given vertex or vertices.\"},{name:\"url()\",description:\"Indicates that the <marker> element referenced will be used.\"}],relevance:50,description:\"Specifies the marker that will be drawn at the first vertices of the given markable element.\",restrictions:[\"url\"]},{name:\"mask-image\",browsers:[\"E79\",\"FF53\",\"S15.4\",\"C1\",\"O15\"],values:[{name:\"none\",description:\"Counts as a transparent black image layer.\"},{name:\"url()\",description:\"Reference to a <mask element or to a CSS image.\"}],syntax:\"<mask-reference>#\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-image\"}],description:\"Sets the mask layer image of an element.\",restrictions:[\"url\",\"image\",\"enum\"]},{name:\"mask-mode\",browsers:[\"FF53\",\"S15.4\"],values:[{name:\"alpha\",description:\"Alpha values of the mask layer image should be used as the mask values.\"},{name:\"auto\",description:\"Use alpha values if 'mask-image' is an image, luminance if a <mask> element or a CSS image.\"},{name:\"luminance\",description:\"Luminance values of the mask layer image should be used as the mask values.\"}],syntax:\"<masking-mode>#\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-mode\"}],description:\"Indicates whether the mask layer image is treated as luminance mask or alpha mask.\",restrictions:[\"url\",\"image\",\"enum\"]},{name:\"mask-origin\",browsers:[\"E79\",\"FF53\",\"S15.4\",\"C1\",\"O15\"],syntax:\"<geometry-box>#\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-origin\"}],description:\"Specifies the mask positioning area.\",restrictions:[\"geometry-box\",\"enum\"]},{name:\"mask-position\",browsers:[\"E79\",\"FF53\",\"S15.4\",\"C1\",\"O15\"],syntax:\"<position>#\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-position\"}],description:\"Specifies how mask layer images are positioned.\",restrictions:[\"position\",\"length\",\"percentage\"]},{name:\"mask-repeat\",browsers:[\"E79\",\"FF53\",\"S15.4\",\"C1\",\"O15\"],syntax:\"<repeat-style>#\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-repeat\"}],description:\"Specifies how mask layer images are tiled after they have been sized and positioned.\",restrictions:[\"repeat\"]},{name:\"mask-size\",browsers:[\"E79\",\"FF53\",\"S15.4\",\"C4\",\"O15\"],values:[{name:\"auto\",description:\"Resolved by using the image\\u2019s intrinsic ratio and the size of the other dimension, or failing that, using the image\\u2019s intrinsic size, or failing that, treating it as 100%.\"},{name:\"contain\",description:\"Scale the image, while preserving its intrinsic aspect ratio (if any), to the largest size such that both its width and its height can fit inside the background positioning area.\"},{name:\"cover\",description:\"Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its width and its height can completely cover the background positioning area.\"}],syntax:\"<bg-size>#\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-size\"}],description:\"Specifies the size of the mask layer images.\",restrictions:[\"length\",\"percentage\",\"enum\"]},{name:\"mask-type\",browsers:[\"E79\",\"FF35\",\"S7\",\"C24\",\"O15\"],values:[{name:\"alpha\",description:\"Indicates that the alpha values of the mask should be used.\"},{name:\"luminance\",description:\"Indicates that the luminance values of the mask should be used.\"}],syntax:\"luminance | alpha\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-type\"}],description:\"Defines whether the content of the <mask> element is treated as as luminance mask or alpha mask.\",restrictions:[\"enum\"]},{name:\"max-block-size\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C57\",\"O44\"],values:[{name:\"none\",description:\"No limit on the width of the box.\"}],syntax:\"<'max-width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/max-block-size\"}],description:\"Maximum size of an element in the direction opposite that of the direction specified by 'writing-mode'.\",restrictions:[\"length\",\"percentage\"]},{name:\"max-height\",values:[{name:\"none\",description:\"No limit on the height of the box.\"},{name:\"fit-content\",description:\"Use the fit-content inline size or fit-content block size, as appropriate to the writing mode.\"},{name:\"max-content\",description:\"Use the max-content inline size or max-content block size, as appropriate to the writing mode.\"},{name:\"min-content\",description:\"Use the min-content inline size or min-content block size, as appropriate to the writing mode.\"}],syntax:\"<viewport-length>\",relevance:85,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/max-height\"}],description:\"Allows authors to constrain content height to a certain range.\",restrictions:[\"length\",\"percentage\"]},{name:\"max-inline-size\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C57\",\"O44\"],values:[{name:\"none\",description:\"No limit on the height of the box.\"}],syntax:\"<'max-width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/max-inline-size\"}],description:\"Maximum size of an element in the direction specified by 'writing-mode'.\",restrictions:[\"length\",\"percentage\"]},{name:\"max-width\",values:[{name:\"none\",description:\"No limit on the width of the box.\"},{name:\"fit-content\",description:\"Use the fit-content inline size or fit-content block size, as appropriate to the writing mode.\"},{name:\"max-content\",description:\"Use the max-content inline size or max-content block size, as appropriate to the writing mode.\"},{name:\"min-content\",description:\"Use the min-content inline size or min-content block size, as appropriate to the writing mode.\"}],syntax:\"<viewport-length>\",relevance:91,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/max-width\"}],description:\"Allows authors to constrain content width to a certain range.\",restrictions:[\"length\",\"percentage\"]},{name:\"min-block-size\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C57\",\"O44\"],syntax:\"<'min-width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/min-block-size\"}],description:\"Minimal size of an element in the direction opposite that of the direction specified by 'writing-mode'.\",restrictions:[\"length\",\"percentage\"]},{name:\"min-height\",values:[{name:\"auto\"},{name:\"fit-content\",description:\"Use the fit-content inline size or fit-content block size, as appropriate to the writing mode.\"},{name:\"max-content\",description:\"Use the max-content inline size or max-content block size, as appropriate to the writing mode.\"},{name:\"min-content\",description:\"Use the min-content inline size or min-content block size, as appropriate to the writing mode.\"}],syntax:\"<viewport-length>\",relevance:90,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/min-height\"}],description:\"Allows authors to constrain content height to a certain range.\",restrictions:[\"length\",\"percentage\"]},{name:\"min-inline-size\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C57\",\"O44\"],syntax:\"<'min-width'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/min-inline-size\"}],description:\"Minimal size of an element in the direction specified by 'writing-mode'.\",restrictions:[\"length\",\"percentage\"]},{name:\"min-width\",values:[{name:\"auto\"},{name:\"fit-content\",description:\"Use the fit-content inline size or fit-content block size, as appropriate to the writing mode.\"},{name:\"max-content\",description:\"Use the max-content inline size or max-content block size, as appropriate to the writing mode.\"},{name:\"min-content\",description:\"Use the min-content inline size or min-content block size, as appropriate to the writing mode.\"}],syntax:\"<viewport-length>\",relevance:88,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/min-width\"}],description:\"Allows authors to constrain content width to a certain range.\",restrictions:[\"length\",\"percentage\"]},{name:\"mix-blend-mode\",browsers:[\"E79\",\"FF32\",\"S8\",\"C41\",\"O28\"],values:[{name:\"normal\",description:\"Default attribute which specifies no blending\"},{name:\"multiply\",description:\"The source color is multiplied by the destination color and replaces the destination.\"},{name:\"screen\",description:\"Multiplies the complements of the backdrop and source color values, then complements the result.\"},{name:\"overlay\",description:\"Multiplies or screens the colors, depending on the backdrop color value.\"},{name:\"darken\",description:\"Selects the darker of the backdrop and source colors.\"},{name:\"lighten\",description:\"Selects the lighter of the backdrop and source colors.\"},{name:\"color-dodge\",description:\"Brightens the backdrop color to reflect the source color.\"},{name:\"color-burn\",description:\"Darkens the backdrop color to reflect the source color.\"},{name:\"hard-light\",description:\"Multiplies or screens the colors, depending on the source color value.\"},{name:\"soft-light\",description:\"Darkens or lightens the colors, depending on the source color value.\"},{name:\"difference\",description:\"Subtracts the darker of the two constituent colors from the lighter color..\"},{name:\"exclusion\",description:\"Produces an effect similar to that of the Difference mode but lower in contrast.\"},{name:\"hue\",browsers:[\"E79\",\"FF32\",\"S8\",\"C41\",\"O28\"],description:\"Creates a color with the hue of the source color and the saturation and luminosity of the backdrop color.\"},{name:\"saturation\",browsers:[\"E79\",\"FF32\",\"S8\",\"C41\",\"O28\"],description:\"Creates a color with the saturation of the source color and the hue and luminosity of the backdrop color.\"},{name:\"color\",browsers:[\"E79\",\"FF32\",\"S8\",\"C41\",\"O28\"],description:\"Creates a color with the hue and saturation of the source color and the luminosity of the backdrop color.\"},{name:\"luminosity\",browsers:[\"E79\",\"FF32\",\"S8\",\"C41\",\"O28\"],description:\"Creates a color with the luminosity of the source color and the hue and saturation of the backdrop color.\"}],syntax:\"<blend-mode>\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mix-blend-mode\"}],description:\"Defines the formula that must be used to mix the colors with the backdrop.\",restrictions:[\"enum\"]},{name:\"motion\",browsers:[\"C46\",\"O33\"],values:[{name:\"none\",description:\"No motion path gets created.\"},{name:\"path()\",description:\"Defines an SVG path as a string, with optional 'fill-rule' as the first argument.\"},{name:\"auto\",description:\"Indicates that the object is rotated by the angle of the direction of the motion path.\"},{name:\"reverse\",description:\"Indicates that the object is rotated by the angle of the direction of the motion path plus 180 degrees.\"}],relevance:50,description:\"Shorthand property for setting 'motion-path', 'motion-offset' and 'motion-rotation'.\",restrictions:[\"url\",\"length\",\"percentage\",\"angle\",\"shape\",\"geometry-box\",\"enum\"]},{name:\"motion-offset\",browsers:[\"C46\",\"O33\"],relevance:50,description:\"A distance that describes the position along the specified motion path.\",restrictions:[\"length\",\"percentage\"]},{name:\"motion-path\",browsers:[\"C46\",\"O33\"],values:[{name:\"none\",description:\"No motion path gets created.\"},{name:\"path()\",description:\"Defines an SVG path as a string, with optional 'fill-rule' as the first argument.\"}],relevance:50,description:\"Specifies the motion path the element gets positioned at.\",restrictions:[\"url\",\"shape\",\"geometry-box\",\"enum\"]},{name:\"motion-rotation\",browsers:[\"C46\",\"O33\"],values:[{name:\"auto\",description:\"Indicates that the object is rotated by the angle of the direction of the motion path.\"},{name:\"reverse\",description:\"Indicates that the object is rotated by the angle of the direction of the motion path plus 180 degrees.\"}],relevance:50,description:\"Defines the direction of the element while positioning along the motion path.\",restrictions:[\"angle\"]},{name:\"-moz-animation\",browsers:[\"FF9\"],values:[{name:\"alternate\",description:\"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction.\"},{name:\"alternate-reverse\",description:\"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction.\"},{name:\"backwards\",description:\"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'.\"},{name:\"both\",description:\"Both forwards and backwards fill modes are applied.\"},{name:\"forwards\",description:\"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes.\"},{name:\"infinite\",description:\"Causes the animation to repeat forever.\"},{name:\"none\",description:\"No animation is performed\"},{name:\"normal\",description:\"Normal playback.\"},{name:\"reverse\",description:\"All iterations of the animation are played in the reverse direction from the way they were specified.\"}],relevance:50,description:\"Shorthand property combines six of the animation properties into a single property.\",restrictions:[\"time\",\"enum\",\"timing-function\",\"identifier\",\"number\"]},{name:\"-moz-animation-delay\",browsers:[\"FF9\"],relevance:50,description:\"Defines when the animation will start.\",restrictions:[\"time\"]},{name:\"-moz-animation-direction\",browsers:[\"FF9\"],values:[{name:\"alternate\",description:\"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction.\"},{name:\"alternate-reverse\",description:\"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction.\"},{name:\"normal\",description:\"Normal playback.\"},{name:\"reverse\",description:\"All iterations of the animation are played in the reverse direction from the way they were specified.\"}],relevance:50,description:\"Defines whether or not the animation should play in reverse on alternate cycles.\",restrictions:[\"enum\"]},{name:\"-moz-animation-duration\",browsers:[\"FF9\"],relevance:50,description:\"Defines the length of time that an animation takes to complete one cycle.\",restrictions:[\"time\"]},{name:\"-moz-animation-iteration-count\",browsers:[\"FF9\"],values:[{name:\"infinite\",description:\"Causes the animation to repeat forever.\"}],relevance:50,description:\"Defines the number of times an animation cycle is played. The default value is one, meaning the animation will play from beginning to end once.\",restrictions:[\"number\",\"enum\"]},{name:\"-moz-animation-name\",browsers:[\"FF9\"],values:[{name:\"none\",description:\"No animation is performed\"}],relevance:50,description:\"Defines a list of animations that apply. Each name is used to select the keyframe at-rule that provides the property values for the animation.\",restrictions:[\"identifier\",\"enum\"]},{name:\"-moz-animation-play-state\",browsers:[\"FF9\"],values:[{name:\"paused\",description:\"A running animation will be paused.\"},{name:\"running\",description:\"Resume playback of a paused animation.\"}],relevance:50,description:\"Defines whether the animation is running or paused.\",restrictions:[\"enum\"]},{name:\"-moz-animation-timing-function\",browsers:[\"FF9\"],relevance:50,description:\"Describes how the animation will progress over one cycle of its duration. See the 'transition-timing-function'.\",restrictions:[\"timing-function\"]},{name:\"-moz-appearance\",browsers:[\"FF1\"],values:[{name:\"button\"},{name:\"button-arrow-down\"},{name:\"button-arrow-next\"},{name:\"button-arrow-previous\"},{name:\"button-arrow-up\"},{name:\"button-bevel\"},{name:\"checkbox\"},{name:\"checkbox-container\"},{name:\"checkbox-label\"},{name:\"dialog\"},{name:\"groupbox\"},{name:\"listbox\"},{name:\"menuarrow\"},{name:\"menuimage\"},{name:\"menuitem\"},{name:\"menuitemtext\"},{name:\"menulist\"},{name:\"menulist-button\"},{name:\"menulist-text\"},{name:\"menulist-textfield\"},{name:\"menupopup\"},{name:\"menuradio\"},{name:\"menuseparator\"},{name:\"-moz-mac-unified-toolbar\"},{name:\"-moz-win-borderless-glass\"},{name:\"-moz-win-browsertabbar-toolbox\"},{name:\"-moz-win-communications-toolbox\"},{name:\"-moz-win-glass\"},{name:\"-moz-win-media-toolbox\"},{name:\"none\"},{name:\"progressbar\"},{name:\"progresschunk\"},{name:\"radio\"},{name:\"radio-container\"},{name:\"radio-label\"},{name:\"radiomenuitem\"},{name:\"resizer\"},{name:\"resizerpanel\"},{name:\"scrollbarbutton-down\"},{name:\"scrollbarbutton-left\"},{name:\"scrollbarbutton-right\"},{name:\"scrollbarbutton-up\"},{name:\"scrollbar-small\"},{name:\"scrollbartrack-horizontal\"},{name:\"scrollbartrack-vertical\"},{name:\"separator\"},{name:\"spinner\"},{name:\"spinner-downbutton\"},{name:\"spinner-textfield\"},{name:\"spinner-upbutton\"},{name:\"statusbar\"},{name:\"statusbarpanel\"},{name:\"tab\"},{name:\"tabpanels\"},{name:\"tab-scroll-arrow-back\"},{name:\"tab-scroll-arrow-forward\"},{name:\"textfield\"},{name:\"textfield-multiline\"},{name:\"toolbar\"},{name:\"toolbox\"},{name:\"tooltip\"},{name:\"treeheadercell\"},{name:\"treeheadersortarrow\"},{name:\"treeitem\"},{name:\"treetwistyopen\"},{name:\"treeview\"},{name:\"treewisty\"},{name:\"window\"}],status:\"nonstandard\",syntax:\"none | button | button-arrow-down | button-arrow-next | button-arrow-previous | button-arrow-up | button-bevel | button-focus | caret | checkbox | checkbox-container | checkbox-label | checkmenuitem | dualbutton | groupbox | listbox | listitem | menuarrow | menubar | menucheckbox | menuimage | menuitem | menuitemtext | menulist | menulist-button | menulist-text | menulist-textfield | menupopup | menuradio | menuseparator | meterbar | meterchunk | progressbar | progressbar-vertical | progresschunk | progresschunk-vertical | radio | radio-container | radio-label | radiomenuitem | range | range-thumb | resizer | resizerpanel | scale-horizontal | scalethumbend | scalethumb-horizontal | scalethumbstart | scalethumbtick | scalethumb-vertical | scale-vertical | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | searchfield | separator | sheet | spinner | spinner-downbutton | spinner-textfield | spinner-upbutton | splitter | statusbar | statusbarpanel | tab | tabpanel | tabpanels | tab-scroll-arrow-back | tab-scroll-arrow-forward | textfield | textfield-multiline | toolbar | toolbarbutton | toolbarbutton-dropdown | toolbargripper | toolbox | tooltip | treeheader | treeheadercell | treeheadersortarrow | treeitem | treeline | treetwisty | treetwistyopen | treeview | -moz-mac-unified-toolbar | -moz-win-borderless-glass | -moz-win-browsertabbar-toolbox | -moz-win-communicationstext | -moz-win-communications-toolbox | -moz-win-exclude-glass | -moz-win-glass | -moz-win-mediatext | -moz-win-media-toolbox | -moz-window-button-box | -moz-window-button-box-maximized | -moz-window-button-close | -moz-window-button-maximize | -moz-window-button-minimize | -moz-window-button-restore | -moz-window-frame-bottom | -moz-window-frame-left | -moz-window-frame-right | -moz-window-titlebar | -moz-window-titlebar-maximized\",relevance:0,description:\"Used in Gecko (Firefox) to display an element using a platform-native styling based on the operating system's theme.\",restrictions:[\"enum\"]},{name:\"-moz-backface-visibility\",browsers:[\"FF10\"],values:[{name:\"hidden\"},{name:\"visible\"}],relevance:50,description:\"Determines whether or not the 'back' side of a transformed element is visible when facing the viewer. With an identity transform, the front side of an element faces the viewer.\",restrictions:[\"enum\"]},{name:\"-moz-background-clip\",browsers:[\"FF1-3.6\"],values:[{name:\"padding\"}],relevance:50,description:\"Determines the background painting area.\",restrictions:[\"box\",\"enum\"]},{name:\"-moz-background-inline-policy\",browsers:[\"FF1\"],values:[{name:\"bounding-box\"},{name:\"continuous\"},{name:\"each-box\"}],relevance:50,description:\"In Gecko-based applications like Firefox, the -moz-background-inline-policy CSS property specifies how the background image of an inline element is determined when the content of the inline element wraps onto multiple lines. The choice of position has significant effects on repetition.\",restrictions:[\"enum\"]},{name:\"-moz-background-origin\",browsers:[\"FF1\"],relevance:50,description:\"For elements rendered as a single box, specifies the background positioning area. For elements rendered as multiple boxes (e.g., inline boxes on several lines, boxes on several pages) specifies which boxes 'box-decoration-break' operates on to determine the background positioning area(s).\",restrictions:[\"box\"]},{name:\"-moz-border-bottom-colors\",browsers:[\"FF1\"],status:\"nonstandard\",syntax:\"<color>+ | none\",relevance:0,description:\"Sets a list of colors for the bottom border.\",restrictions:[\"color\"]},{name:\"-moz-border-image\",browsers:[\"FF3.6\"],values:[{name:\"auto\",description:\"If 'auto' is specified then the border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead.\"},{name:\"fill\",description:\"Causes the middle part of the border-image to be preserved.\"},{name:\"none\"},{name:\"repeat\",description:\"The image is tiled (repeated) to fill the area.\"},{name:\"round\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does.\"},{name:\"space\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles.\"},{name:\"stretch\",description:\"The image is stretched to fill the area.\"},{name:\"url()\"}],relevance:50,description:\"Shorthand property for setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat'. Omitted values are set to their initial values.\",restrictions:[\"length\",\"percentage\",\"number\",\"url\",\"enum\"]},{name:\"-moz-border-left-colors\",browsers:[\"FF1\"],status:\"nonstandard\",syntax:\"<color>+ | none\",relevance:0,description:\"Sets a list of colors for the bottom border.\",restrictions:[\"color\"]},{name:\"-moz-border-right-colors\",browsers:[\"FF1\"],status:\"nonstandard\",syntax:\"<color>+ | none\",relevance:0,description:\"Sets a list of colors for the bottom border.\",restrictions:[\"color\"]},{name:\"-moz-border-top-colors\",browsers:[\"FF1\"],status:\"nonstandard\",syntax:\"<color>+ | none\",relevance:0,description:\"Ske Firefox, -moz-border-bottom-colors sets a list of colors for the bottom border.\",restrictions:[\"color\"]},{name:\"-moz-box-align\",browsers:[\"FF1\"],values:[{name:\"baseline\",description:\"If this box orientation is inline-axis or horizontal, all children are placed with their baselines aligned, and extra space placed before or after as necessary. For block flows, the baseline of the first non-empty line box located within the element is used. For tables, the baseline of the first cell is used.\"},{name:\"center\",description:\"Any extra space is divided evenly, with half placed above the child and the other half placed after the child.\"},{name:\"end\",description:\"For normal direction boxes, the bottom edge of each child is placed along the bottom of the box. Extra space is placed above the element. For reverse direction boxes, the top edge of each child is placed along the top of the box. Extra space is placed below the element.\"},{name:\"start\",description:\"For normal direction boxes, the top edge of each child is placed along the top of the box. Extra space is placed below the element. For reverse direction boxes, the bottom edge of each child is placed along the bottom of the box. Extra space is placed above the element.\"},{name:\"stretch\",description:\"The height of each child is adjusted to that of the containing block.\"}],relevance:50,description:\"Specifies how a XUL box aligns its contents across (perpendicular to) the direction of its layout. The effect of this is only visible if there is extra space in the box.\",restrictions:[\"enum\"]},{name:\"-moz-box-direction\",browsers:[\"FF1\"],values:[{name:\"normal\",description:\"A box with a computed value of horizontal for box-orient displays its children from left to right. A box with a computed value of vertical displays its children from top to bottom.\"},{name:\"reverse\",description:\"A box with a computed value of horizontal for box-orient displays its children from right to left. A box with a computed value of vertical displays its children from bottom to top.\"}],relevance:50,description:\"Specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\",restrictions:[\"enum\"]},{name:\"-moz-box-flex\",browsers:[\"FF1\"],relevance:50,description:\"Specifies how a box grows to fill the box that contains it, in the direction of the containing box's layout.\",restrictions:[\"number\"]},{name:\"-moz-box-flexgroup\",browsers:[\"FF1\"],relevance:50,description:\"Flexible elements can be assigned to flex groups using the 'box-flex-group' property.\",restrictions:[\"integer\"]},{name:\"-moz-box-ordinal-group\",browsers:[\"FF1\"],relevance:50,description:\"Indicates the ordinal group the element belongs to. Elements with a lower ordinal group are displayed before those with a higher ordinal group.\",restrictions:[\"integer\"]},{name:\"-moz-box-orient\",browsers:[\"FF1\"],values:[{name:\"block-axis\",description:\"Elements are oriented along the box's axis.\"},{name:\"horizontal\",description:\"The box displays its children from left to right in a horizontal line.\"},{name:\"inline-axis\",description:\"Elements are oriented vertically.\"},{name:\"vertical\",description:\"The box displays its children from stacked from top to bottom vertically.\"}],relevance:50,description:\"In Mozilla applications, -moz-box-orient specifies whether a box lays out its contents horizontally or vertically.\",restrictions:[\"enum\"]},{name:\"-moz-box-pack\",browsers:[\"FF1\"],values:[{name:\"center\",description:\"The extra space is divided evenly, with half placed before the first child and the other half placed after the last child.\"},{name:\"end\",description:\"For normal direction boxes, the right edge of the last child is placed at the right side, with all extra space placed before the first child. For reverse direction boxes, the left edge of the first child is placed at the left side, with all extra space placed after the last child.\"},{name:\"justify\",description:\"The space is divided evenly in-between each child, with none of the extra space placed before the first child or after the last child. If there is only one child, treat the pack value as if it were start.\"},{name:\"start\",description:\"For normal direction boxes, the left edge of the first child is placed at the left side, with all extra space placed after the last child. For reverse direction boxes, the right edge of the last child is placed at the right side, with all extra space placed before the first child.\"}],relevance:50,description:\"Specifies how a box packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\",restrictions:[\"enum\"]},{name:\"-moz-box-sizing\",browsers:[\"FF1\"],values:[{name:\"border-box\",description:\"The specified width and height (and respective min/max properties) on this element determine the border box of the element.\"},{name:\"content-box\",description:\"Behavior of width and height as specified by CSS2.1. The specified width and height (and respective min/max properties) apply to the width and height respectively of the content box of the element.\"},{name:\"padding-box\",description:\"The specified width and height (and respective min/max properties) on this element determine the padding box of the element.\"}],relevance:50,description:\"Box Model addition in CSS3.\",restrictions:[\"enum\"]},{name:\"-moz-column-count\",browsers:[\"FF3.5\"],values:[{name:\"auto\",description:\"Determines the number of columns by the 'column-width' property and the element width.\"}],relevance:50,description:\"Describes the optimal number of columns into which the content of the element will be flowed.\",restrictions:[\"integer\"]},{name:\"-moz-column-gap\",browsers:[\"FF3.5\"],values:[{name:\"normal\",description:\"User agent specific and typically equivalent to 1em.\"}],relevance:50,description:\"Sets the gap between columns. If there is a column rule between columns, it will appear in the middle of the gap.\",restrictions:[\"length\"]},{name:\"-moz-column-rule\",browsers:[\"FF3.5\"],relevance:50,description:\"Shorthand for setting 'column-rule-width', 'column-rule-style', and 'column-rule-color' at the same place in the style sheet. Omitted values are set to their initial values.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"-moz-column-rule-color\",browsers:[\"FF3.5\"],relevance:50,description:\"Sets the color of the column rule\",restrictions:[\"color\"]},{name:\"-moz-column-rule-style\",browsers:[\"FF3.5\"],relevance:50,description:\"Sets the style of the rule between columns of an element.\",restrictions:[\"line-style\"]},{name:\"-moz-column-rule-width\",browsers:[\"FF3.5\"],relevance:50,description:\"Sets the width of the rule between columns. Negative values are not allowed.\",restrictions:[\"length\",\"line-width\"]},{name:\"-moz-columns\",browsers:[\"FF9\"],values:[{name:\"auto\",description:\"The width depends on the values of other properties.\"}],relevance:50,description:\"A shorthand property which sets both 'column-width' and 'column-count'.\",restrictions:[\"length\",\"integer\"]},{name:\"-moz-column-width\",browsers:[\"FF3.5\"],values:[{name:\"auto\",description:\"The width depends on the values of other properties.\"}],relevance:50,description:\"This property describes the width of columns in multicol elements.\",restrictions:[\"length\"]},{name:\"-moz-font-feature-settings\",browsers:[\"FF4\"],values:[{name:'\"c2cs\"'},{name:'\"dlig\"'},{name:'\"kern\"'},{name:'\"liga\"'},{name:'\"lnum\"'},{name:'\"onum\"'},{name:'\"smcp\"'},{name:'\"swsh\"'},{name:'\"tnum\"'},{name:\"normal\",description:\"No change in glyph substitution or positioning occurs.\"},{name:\"off\",browsers:[\"FF4\"]},{name:\"on\",browsers:[\"FF4\"]}],relevance:50,description:\"Provides low-level control over OpenType font features. It is intended as a way of providing access to font features that are not widely used but are needed for a particular use case.\",restrictions:[\"string\",\"integer\"]},{name:\"-moz-hyphens\",browsers:[\"FF9\"],values:[{name:\"auto\",description:\"Conditional hyphenation characters inside a word, if present, take priority over automatic resources when determining hyphenation points within the word.\"},{name:\"manual\",description:\"Words are only broken at line breaks where there are characters inside the word that suggest line break opportunities\"},{name:\"none\",description:\"Words are not broken at line breaks, even if characters inside the word suggest line break points.\"}],relevance:50,description:\"Controls whether hyphenation is allowed to create more break opportunities within a line of text.\",restrictions:[\"enum\"]},{name:\"-moz-perspective\",browsers:[\"FF10\"],values:[{name:\"none\",description:\"No perspective transform is applied.\"}],relevance:50,description:\"Applies the same transform as the perspective(<number>) transform function, except that it applies only to the positioned or transformed children of the element, not to the transform on the element itself.\",restrictions:[\"length\"]},{name:\"-moz-perspective-origin\",browsers:[\"FF10\"],relevance:50,description:\"Establishes the origin for the perspective property. It effectively sets the X and Y position at which the viewer appears to be looking at the children of the element.\",restrictions:[\"position\",\"percentage\",\"length\"]},{name:\"-moz-text-align-last\",browsers:[\"FF12\"],values:[{name:\"auto\"},{name:\"center\",description:\"The inline contents are centered within the line box.\"},{name:\"justify\",description:\"The text is justified according to the method specified by the 'text-justify' property.\"},{name:\"left\",description:\"The inline contents are aligned to the left edge of the line box. In vertical text, 'left' aligns to the edge of the line box that would be the start edge for left-to-right text.\"},{name:\"right\",description:\"The inline contents are aligned to the right edge of the line box. In vertical text, 'right' aligns to the edge of the line box that would be the end edge for left-to-right text.\"}],relevance:50,description:\"Describes how the last line of a block or a line right before a forced line break is aligned when 'text-align' is set to 'justify'.\",restrictions:[\"enum\"]},{name:\"-moz-text-decoration-color\",browsers:[\"FF6\"],relevance:50,description:\"Specifies the color of text decoration (underlines overlines, and line-throughs) set on the element with text-decoration-line.\",restrictions:[\"color\"]},{name:\"-moz-text-decoration-line\",browsers:[\"FF6\"],values:[{name:\"line-through\",description:\"Each line of text has a line through the middle.\"},{name:\"none\",description:\"Neither produces nor inhibits text decoration.\"},{name:\"overline\",description:\"Each line of text has a line above it.\"},{name:\"underline\",description:\"Each line of text is underlined.\"}],relevance:50,description:\"Specifies what line decorations, if any, are added to the element.\",restrictions:[\"enum\"]},{name:\"-moz-text-decoration-style\",browsers:[\"FF6\"],values:[{name:\"dashed\",description:\"Produces a dashed line style.\"},{name:\"dotted\",description:\"Produces a dotted line.\"},{name:\"double\",description:\"Produces a double line.\"},{name:\"none\",description:\"Produces no line.\"},{name:\"solid\",description:\"Produces a solid line.\"},{name:\"wavy\",description:\"Produces a wavy line.\"}],relevance:50,description:\"Specifies the line style for underline, line-through and overline text decoration.\",restrictions:[\"enum\"]},{name:\"-moz-text-size-adjust\",browsers:[\"FF\"],values:[{name:\"auto\",description:\"Renderers must use the default size adjustment when displaying on a small device.\"},{name:\"none\",description:\"Renderers must not do size adjustment when displaying on a small device.\"}],relevance:50,description:\"Specifies a size adjustment for displaying text content in mobile browsers.\",restrictions:[\"enum\",\"percentage\"]},{name:\"-moz-transform\",browsers:[\"FF3.5\"],values:[{name:\"matrix()\",description:\"Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]\"},{name:\"matrix3d()\",description:\"Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order.\"},{name:\"none\"},{name:\"perspective\",description:\"Specifies a perspective projection matrix.\"},{name:\"rotate()\",description:\"Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property.\"},{name:\"rotate3d()\",description:\"Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters.\"},{name:\"rotateX('angle')\",description:\"Specifies a clockwise rotation by the given angle about the X axis.\"},{name:\"rotateY('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Y axis.\"},{name:\"rotateZ('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Z axis.\"},{name:\"scale()\",description:\"Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first.\"},{name:\"scale3d()\",description:\"Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters.\"},{name:\"scaleX()\",description:\"Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter.\"},{name:\"scaleY()\",description:\"Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter.\"},{name:\"scaleZ()\",description:\"Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter.\"},{name:\"skew()\",description:\"Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis).\"},{name:\"skewX()\",description:\"Specifies a skew transformation along the X axis by the given angle.\"},{name:\"skewY()\",description:\"Specifies a skew transformation along the Y axis by the given angle.\"},{name:\"translate()\",description:\"Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter.\"},{name:\"translate3d()\",description:\"Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively.\"},{name:\"translateX()\",description:\"Specifies a translation by the given amount in the X direction.\"},{name:\"translateY()\",description:\"Specifies a translation by the given amount in the Y direction.\"},{name:\"translateZ()\",description:\"Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0.\"}],relevance:50,description:\"A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.\",restrictions:[\"enum\"]},{name:\"-moz-transform-origin\",browsers:[\"FF3.5\"],relevance:50,description:\"Establishes the origin of transformation for an element.\",restrictions:[\"position\",\"length\",\"percentage\"]},{name:\"-moz-transition\",browsers:[\"FF4\"],values:[{name:\"all\",description:\"Every property that is able to undergo a transition will do so.\"},{name:\"none\",description:\"No property will transition.\"}],relevance:50,description:\"Shorthand property combines four of the transition properties into a single property.\",restrictions:[\"time\",\"property\",\"timing-function\",\"enum\"]},{name:\"-moz-transition-delay\",browsers:[\"FF4\"],relevance:50,description:\"Defines when the transition will start. It allows a transition to begin execution some period of time from when it is applied.\",restrictions:[\"time\"]},{name:\"-moz-transition-duration\",browsers:[\"FF4\"],relevance:50,description:\"Specifies how long the transition from the old value to the new value should take.\",restrictions:[\"time\"]},{name:\"-moz-transition-property\",browsers:[\"FF4\"],values:[{name:\"all\",description:\"Every property that is able to undergo a transition will do so.\"},{name:\"none\",description:\"No property will transition.\"}],relevance:50,description:\"Specifies the name of the CSS property to which the transition is applied.\",restrictions:[\"property\"]},{name:\"-moz-transition-timing-function\",browsers:[\"FF4\"],relevance:50,description:\"Describes how the intermediate values used during a transition will be calculated.\",restrictions:[\"timing-function\"]},{name:\"-moz-user-focus\",browsers:[\"FF1\"],values:[{name:\"ignore\"},{name:\"normal\"}],status:\"nonstandard\",syntax:\"ignore | normal | select-after | select-before | select-menu | select-same | select-all | none\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-user-focus\"}],description:\"Used to indicate whether the element can have focus.\"},{name:\"-moz-user-select\",browsers:[\"FF1.5\"],values:[{name:\"all\"},{name:\"element\"},{name:\"elements\"},{name:\"-moz-all\"},{name:\"-moz-none\"},{name:\"none\"},{name:\"text\"},{name:\"toggle\"}],relevance:50,description:\"Controls the appearance of selection.\",restrictions:[\"enum\"]},{name:\"-ms-accelerator\",browsers:[\"E\",\"IE10\"],values:[{name:\"false\",description:\"The element does not contain an accelerator key sequence.\"},{name:\"true\",description:\"The element contains an accelerator key sequence.\"}],status:\"nonstandard\",syntax:\"false | true\",relevance:0,description:\"IE only. Has the ability to turn off its system underlines for accelerator keys until the ALT key is pressed\",restrictions:[\"enum\"]},{name:\"-ms-behavior\",browsers:[\"IE8\"],relevance:50,description:\"IE only. Used to extend behaviors of the browser\",restrictions:[\"url\"]},{name:\"-ms-block-progression\",browsers:[\"IE8\"],values:[{name:\"bt\",description:\"Bottom-to-top block flow. Layout is horizontal.\"},{name:\"lr\",description:\"Left-to-right direction. The flow orientation is vertical.\"},{name:\"rl\",description:\"Right-to-left direction. The flow orientation is vertical.\"},{name:\"tb\",description:\"Top-to-bottom direction. The flow orientation is horizontal.\"}],status:\"nonstandard\",syntax:\"tb | rl | bt | lr\",relevance:0,description:\"Sets the block-progression value and the flow orientation\",restrictions:[\"enum\"]},{name:\"-ms-content-zoom-chaining\",browsers:[\"E\",\"IE10\"],values:[{name:\"chained\",description:\"The nearest zoomable parent element begins zooming when the user hits a zoom limit during a manipulation. No bounce effect is shown.\"},{name:\"none\",description:\"A bounce effect is shown when the user hits a zoom limit during a manipulation.\"}],status:\"nonstandard\",syntax:\"none | chained\",relevance:0,description:\"Specifies the zoom behavior that occurs when a user hits the zoom limit during a manipulation.\"},{name:\"-ms-content-zooming\",browsers:[\"E\",\"IE10\"],values:[{name:\"none\",description:\"The element is not zoomable.\"},{name:\"zoom\",description:\"The element is zoomable.\"}],status:\"nonstandard\",syntax:\"none | zoom\",relevance:0,description:\"Specifies whether zooming is enabled.\",restrictions:[\"enum\"]},{name:\"-ms-content-zoom-limit\",browsers:[\"E\",\"IE10\"],status:\"nonstandard\",syntax:\"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>\",relevance:0,description:\"Shorthand property for the -ms-content-zoom-limit-min and -ms-content-zoom-limit-max properties.\",restrictions:[\"percentage\"]},{name:\"-ms-content-zoom-limit-max\",browsers:[\"E\",\"IE10\"],status:\"nonstandard\",syntax:\"<percentage>\",relevance:0,description:\"Specifies the maximum zoom factor.\",restrictions:[\"percentage\"]},{name:\"-ms-content-zoom-limit-min\",browsers:[\"E\",\"IE10\"],status:\"nonstandard\",syntax:\"<percentage>\",relevance:0,description:\"Specifies the minimum zoom factor.\",restrictions:[\"percentage\"]},{name:\"-ms-content-zoom-snap\",browsers:[\"E\",\"IE10\"],values:[{name:\"mandatory\",description:\"Indicates that the motion of the content after the contact is picked up is always adjusted so that it lands on a snap-point.\"},{name:\"none\",description:\"Indicates that zooming is unaffected by any defined snap-points.\"},{name:\"proximity\",description:'Indicates that the motion of the content after the contact is picked up may be adjusted if the content would normally stop \"close enough\" to a snap-point.'},{name:\"snapInterval(100%, 100%)\",description:\"Specifies where the snap-points will be placed.\"},{name:\"snapList()\",description:\"Specifies the position of individual snap-points as a comma-separated list of zoom factors.\"}],status:\"nonstandard\",syntax:\"<'-ms-content-zoom-snap-type'> || <'-ms-content-zoom-snap-points'>\",relevance:0,description:\"Shorthand property for the -ms-content-zoom-snap-type and -ms-content-zoom-snap-points properties.\"},{name:\"-ms-content-zoom-snap-points\",browsers:[\"E\",\"IE10\"],values:[{name:\"snapInterval(100%, 100%)\",description:\"Specifies where the snap-points will be placed.\"},{name:\"snapList()\",description:\"Specifies the position of individual snap-points as a comma-separated list of zoom factors.\"}],status:\"nonstandard\",syntax:\"snapInterval( <percentage>, <percentage> ) | snapList( <percentage># )\",relevance:0,description:\"Defines where zoom snap-points are located.\"},{name:\"-ms-content-zoom-snap-type\",browsers:[\"E\",\"IE10\"],values:[{name:\"mandatory\",description:\"Indicates that the motion of the content after the contact is picked up is always adjusted so that it lands on a snap-point.\"},{name:\"none\",description:\"Indicates that zooming is unaffected by any defined snap-points.\"},{name:\"proximity\",description:'Indicates that the motion of the content after the contact is picked up may be adjusted if the content would normally stop \"close enough\" to a snap-point.'}],status:\"nonstandard\",syntax:\"none | proximity | mandatory\",relevance:0,description:\"Specifies how zooming is affected by defined snap-points.\",restrictions:[\"enum\"]},{name:\"-ms-filter\",browsers:[\"IE8-9\"],status:\"nonstandard\",syntax:\"<string>\",relevance:0,description:\"IE only. Used to produce visual effects.\",restrictions:[\"string\"]},{name:\"-ms-flex\",browsers:[\"IE10\"],values:[{name:\"auto\",description:\"Retrieves the value of the main size property as the used 'flex-basis'.\"},{name:\"none\",description:\"Expands to '0 0 auto'.\"}],relevance:50,description:\"specifies the parameters of a flexible length: the positive and negative flexibility, and the preferred size.\",restrictions:[\"length\",\"number\",\"percentage\"]},{name:\"-ms-flex-align\",browsers:[\"IE10\"],values:[{name:\"baseline\",description:\"If the flex item\\u2019s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment.\"},{name:\"center\",description:\"The flex item\\u2019s margin box is centered in the cross axis within the line.\"},{name:\"end\",description:\"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line.\"},{name:\"start\",description:\"The cross-start margin edge of the flexbox item is placed flush with the cross-start edge of the line.\"},{name:\"stretch\",description:\"If the cross size property of the flexbox item is anything other than 'auto', this value is identical to 'start'.\"}],relevance:50,description:\"Aligns flex items along the cross axis of the current line of the flex container.\",restrictions:[\"enum\"]},{name:\"-ms-flex-direction\",browsers:[\"IE10\"],values:[{name:\"column\",description:\"The flex container\\u2019s main axis has the same orientation as the block axis of the current writing mode.\"},{name:\"column-reverse\",description:\"Same as 'column', except the main-start and main-end directions are swapped.\"},{name:\"row\",description:\"The flex container\\u2019s main axis has the same orientation as the inline axis of the current writing mode.\"},{name:\"row-reverse\",description:\"Same as 'row', except the main-start and main-end directions are swapped.\"}],relevance:50,description:\"Specifies how flex items are placed in the flex container, by setting the direction of the flex container\\u2019s main axis.\",restrictions:[\"enum\"]},{name:\"-ms-flex-flow\",browsers:[\"IE10\"],values:[{name:\"column\",description:\"The flex container\\u2019s main axis has the same orientation as the block axis of the current writing mode.\"},{name:\"column-reverse\",description:\"Same as 'column', except the main-start and main-end directions are swapped.\"},{name:\"nowrap\",description:\"The flex container is single-line.\"},{name:\"row\",description:\"The flex container\\u2019s main axis has the same orientation as the inline axis of the current writing mode.\"},{name:\"wrap\",description:\"The flexbox is multi-line.\"},{name:\"wrap-reverse\",description:\"Same as 'wrap', except the cross-start and cross-end directions are swapped.\"}],relevance:50,description:\"Specifies how flexbox items are placed in the flexbox.\",restrictions:[\"enum\"]},{name:\"-ms-flex-item-align\",browsers:[\"IE10\"],values:[{name:\"auto\",description:\"Computes to the value of 'align-items' on the element\\u2019s parent, or 'stretch' if the element has no parent. On absolutely positioned elements, it computes to itself.\"},{name:\"baseline\",description:\"If the flex item\\u2019s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment.\"},{name:\"center\",description:\"The flex item\\u2019s margin box is centered in the cross axis within the line.\"},{name:\"end\",description:\"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line.\"},{name:\"start\",description:\"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line.\"},{name:\"stretch\",description:\"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched.\"}],relevance:50,description:\"Allows the default alignment along the cross axis to be overridden for individual flex items.\",restrictions:[\"enum\"]},{name:\"-ms-flex-line-pack\",browsers:[\"IE10\"],values:[{name:\"center\",description:\"Lines are packed toward the center of the flex container.\"},{name:\"distribute\",description:\"Lines are evenly distributed in the flex container, with half-size spaces on either end.\"},{name:\"end\",description:\"Lines are packed toward the end of the flex container.\"},{name:\"justify\",description:\"Lines are evenly distributed in the flex container.\"},{name:\"start\",description:\"Lines are packed toward the start of the flex container.\"},{name:\"stretch\",description:\"Lines stretch to take up the remaining space.\"}],relevance:50,description:\"Aligns a flex container\\u2019s lines within the flex container when there is extra space in the cross-axis, similar to how 'justify-content' aligns individual items within the main-axis.\",restrictions:[\"enum\"]},{name:\"-ms-flex-order\",browsers:[\"IE10\"],relevance:50,description:\"Controls the order in which children of a flex container appear within the flex container, by assigning them to ordinal groups.\",restrictions:[\"integer\"]},{name:\"-ms-flex-pack\",browsers:[\"IE10\"],values:[{name:\"center\",description:\"Flex items are packed toward the center of the line.\"},{name:\"distribute\",description:\"Flex items are evenly distributed in the line, with half-size spaces on either end.\"},{name:\"end\",description:\"Flex items are packed toward the end of the line.\"},{name:\"justify\",description:\"Flex items are evenly distributed in the line.\"},{name:\"start\",description:\"Flex items are packed toward the start of the line.\"}],relevance:50,description:\"Aligns flex items along the main axis of the current line of the flex container.\",restrictions:[\"enum\"]},{name:\"-ms-flex-wrap\",browsers:[\"IE10\"],values:[{name:\"nowrap\",description:\"The flex container is single-line.\"},{name:\"wrap\",description:\"The flexbox is multi-line.\"},{name:\"wrap-reverse\",description:\"Same as 'wrap', except the cross-start and cross-end directions are swapped.\"}],relevance:50,description:\"Controls whether the flex container is single-line or multi-line, and the direction of the cross-axis, which determines the direction new lines are stacked in.\",restrictions:[\"enum\"]},{name:\"-ms-flow-from\",browsers:[\"E\",\"IE10\"],values:[{name:\"none\",description:\"The block container is not a CSS Region.\"}],status:\"nonstandard\",syntax:\"[ none | <custom-ident> ]#\",relevance:0,description:\"Makes a block container a region and associates it with a named flow.\",restrictions:[\"identifier\"]},{name:\"-ms-flow-into\",browsers:[\"E\",\"IE10\"],values:[{name:\"none\",description:\"The element is not moved to a named flow and normal CSS processing takes place.\"}],status:\"nonstandard\",syntax:\"[ none | <custom-ident> ]#\",relevance:0,description:\"Places an element or its contents into a named flow.\",restrictions:[\"identifier\"]},{name:\"-ms-grid-column\",browsers:[\"E12\",\"IE10\"],values:[{name:\"auto\"},{name:\"end\"},{name:\"start\"}],relevance:50,description:\"Used to place grid items and explicitly defined grid cells in the Grid.\",restrictions:[\"integer\",\"string\",\"enum\"]},{name:\"-ms-grid-column-align\",browsers:[\"E12\",\"IE10\"],values:[{name:\"center\",description:\"Places the center of the Grid Item's margin box at the center of the Grid Item's column.\"},{name:\"end\",description:\"Aligns the end edge of the Grid Item's margin box to the end edge of the Grid Item's column.\"},{name:\"start\",description:\"Aligns the starting edge of the Grid Item's margin box to the starting edge of the Grid Item's column.\"},{name:\"stretch\",description:\"Ensures that the Grid Item's margin box is equal to the size of the Grid Item's column.\"}],relevance:50,description:\"Aligns the columns in a grid.\",restrictions:[\"enum\"]},{name:\"-ms-grid-columns\",browsers:[\"E\",\"IE10\"],status:\"nonstandard\",syntax:\"none | <track-list> | <auto-track-list>\",relevance:0,description:\"Lays out the columns of the grid.\"},{name:\"-ms-grid-column-span\",browsers:[\"E12\",\"IE10\"],relevance:50,description:\"Specifies the number of columns to span.\",restrictions:[\"integer\"]},{name:\"-ms-grid-layer\",browsers:[\"E\",\"IE10\"],relevance:50,description:\"Grid-layer is similar in concept to z-index, but avoids overloading the meaning of the z-index property, which is applicable only to positioned elements.\",restrictions:[\"integer\"]},{name:\"-ms-grid-row\",browsers:[\"E12\",\"IE10\"],values:[{name:\"auto\"},{name:\"end\"},{name:\"start\"}],relevance:50,description:\"grid-row is used to place grid items and explicitly defined grid cells in the Grid.\",restrictions:[\"integer\",\"string\",\"enum\"]},{name:\"-ms-grid-row-align\",browsers:[\"E12\",\"IE10\"],values:[{name:\"center\",description:\"Places the center of the Grid Item's margin box at the center of the Grid Item's row.\"},{name:\"end\",description:\"Aligns the end edge of the Grid Item's margin box to the end edge of the Grid Item's row.\"},{name:\"start\",description:\"Aligns the starting edge of the Grid Item's margin box to the starting edge of the Grid Item's row.\"},{name:\"stretch\",description:\"Ensures that the Grid Item's margin box is equal to the size of the Grid Item's row.\"}],relevance:50,description:\"Aligns the rows in a grid.\",restrictions:[\"enum\"]},{name:\"-ms-grid-rows\",browsers:[\"E\",\"IE10\"],status:\"nonstandard\",syntax:\"none | <track-list> | <auto-track-list>\",relevance:0,description:\"Lays out the columns of the grid.\"},{name:\"-ms-grid-row-span\",browsers:[\"E12\",\"IE10\"],relevance:50,description:\"Specifies the number of rows to span.\",restrictions:[\"integer\"]},{name:\"-ms-high-contrast-adjust\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\",description:\"Properties will be adjusted as applicable.\"},{name:\"none\",description:\"No adjustments will be applied.\"}],status:\"nonstandard\",syntax:\"auto | none\",relevance:0,description:\"Specifies if properties should be adjusted in high contrast mode.\",restrictions:[\"enum\"]},{name:\"-ms-hyphenate-limit-chars\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\",description:\"The user agent chooses a value that adapts to the current layout.\"}],status:\"nonstandard\",syntax:\"auto | <integer>{1,3}\",relevance:0,description:\"Specifies the minimum number of characters in a hyphenated word.\",restrictions:[\"integer\"]},{name:\"-ms-hyphenate-limit-lines\",browsers:[\"E\",\"IE10\"],values:[{name:\"no-limit\",description:\"There is no limit.\"}],status:\"nonstandard\",syntax:\"no-limit | <integer>\",relevance:0,description:\"Indicates the maximum number of successive hyphenated lines in an element.\",restrictions:[\"integer\"]},{name:\"-ms-hyphenate-limit-zone\",browsers:[\"E\",\"IE10\"],status:\"nonstandard\",syntax:\"<percentage> | <length>\",relevance:0,description:\"Specifies the maximum amount of unfilled space (before justification) that may be left in the line box before hyphenation is triggered to pull part of a word from the next line back up into the current line.\",restrictions:[\"percentage\",\"length\"]},{name:\"-ms-hyphens\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\",description:\"Conditional hyphenation characters inside a word, if present, take priority over automatic resources when determining hyphenation points within the word.\"},{name:\"manual\",description:\"Words are only broken at line breaks where there are characters inside the word that suggest line break opportunities\"},{name:\"none\",description:\"Words are not broken at line breaks, even if characters inside the word suggest line break points.\"}],relevance:50,description:\"Controls whether hyphenation is allowed to create more break opportunities within a line of text.\",restrictions:[\"enum\"]},{name:\"-ms-ime-mode\",browsers:[\"IE10\"],values:[{name:\"active\",description:\"The input method editor is initially active; text entry is performed using it unless the user specifically dismisses it.\"},{name:\"auto\",description:\"No change is made to the current input method editor state. This is the default.\"},{name:\"disabled\",description:\"The input method editor is disabled and may not be activated by the user.\"},{name:\"inactive\",description:\"The input method editor is initially inactive, but the user may activate it if they wish.\"},{name:\"normal\",description:\"The IME state should be normal; this value can be used in a user style sheet to override the page setting.\"}],relevance:50,description:\"Controls the state of the input method editor for text fields.\",restrictions:[\"enum\"]},{name:\"-ms-interpolation-mode\",browsers:[\"IE7\"],values:[{name:\"bicubic\"},{name:\"nearest-neighbor\"}],relevance:50,description:\"Gets or sets the interpolation (resampling) method used to stretch images.\",restrictions:[\"enum\"]},{name:\"-ms-layout-grid\",browsers:[\"E\",\"IE10\"],values:[{name:\"char\",description:\"Any of the range of character values available to the -ms-layout-grid-char property.\"},{name:\"line\",description:\"Any of the range of line values available to the -ms-layout-grid-line property.\"},{name:\"mode\",description:\"Any of the range of mode values available to the -ms-layout-grid-mode property.\"},{name:\"type\",description:\"Any of the range of type values available to the -ms-layout-grid-type property.\"}],relevance:50,description:\"Sets or retrieves the composite document grid properties that specify the layout of text characters.\"},{name:\"-ms-layout-grid-char\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\",description:\"Largest character in the font of the element is used to set the character grid.\"},{name:\"none\",description:\"Default. No character grid is set.\"}],relevance:50,description:\"Sets or retrieves the size of the character grid used for rendering the text content of an element.\",restrictions:[\"enum\",\"length\",\"percentage\"]},{name:\"-ms-layout-grid-line\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\",description:\"Largest character in the font of the element is used to set the character grid.\"},{name:\"none\",description:\"Default. No grid line is set.\"}],relevance:50,description:\"Sets or retrieves the gridline value used for rendering the text content of an element.\",restrictions:[\"length\"]},{name:\"-ms-layout-grid-mode\",browsers:[\"E\",\"IE10\"],values:[{name:\"both\",description:\"Default. Both the char and line grid modes are enabled. This setting is necessary to fully enable the layout grid on an element.\"},{name:\"char\",description:\"Only a character grid is used. This is recommended for use with block-level elements, such as a blockquote, where the line grid is intended to be disabled.\"},{name:\"line\",description:\"Only a line grid is used. This is recommended for use with inline elements, such as a span, to disable the horizontal grid on runs of text that act as a single entity in the grid layout.\"},{name:\"none\",description:\"No grid is used.\"}],relevance:50,description:\"Gets or sets whether the text layout grid uses two dimensions.\",restrictions:[\"enum\"]},{name:\"-ms-layout-grid-type\",browsers:[\"E\",\"IE10\"],values:[{name:\"fixed\",description:\"Grid used for monospaced layout. All noncursive characters are treated as equal; every character is centered within a single grid space by default.\"},{name:\"loose\",description:\"Default. Grid used for Japanese and Korean characters.\"},{name:\"strict\",description:\"Grid used for Chinese, as well as Japanese (Genko) and Korean characters. Only the ideographs, kanas, and wide characters are snapped to the grid.\"}],relevance:50,description:\"Sets or retrieves the type of grid used for rendering the text content of an element.\",restrictions:[\"enum\"]},{name:\"-ms-line-break\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\",description:\"The UA determines the set of line-breaking restrictions to use for CJK scripts, and it may vary the restrictions based on the length of the line; e.g., use a less restrictive set of line-break rules for short lines.\"},{name:\"keep-all\",description:\"Sequences of CJK characters can no longer break on implied break points. This option should only be used where the presence of word separator characters still creates line-breaking opportunities, as in Korean.\"},{name:\"newspaper\",description:\"Breaks CJK scripts using the least restrictive set of line-breaking rules. Typically used for short lines, such as in newspapers.\"},{name:\"normal\",description:\"Breaks CJK scripts using a normal set of line-breaking rules.\"},{name:\"strict\",description:\"Breaks CJK scripts using a more restrictive set of line-breaking rules than 'normal'.\"}],relevance:50,description:\"Specifies what set of line breaking restrictions are in effect within the element.\",restrictions:[\"enum\"]},{name:\"-ms-overflow-style\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\",description:\"No preference, UA should use the first scrolling method in the list that it supports.\"},{name:\"-ms-autohiding-scrollbar\",description:\"Indicates the element displays auto-hiding scrollbars during mouse interactions and panning indicators during touch and keyboard interactions.\"},{name:\"none\",description:\"Indicates the element does not display scrollbars or panning indicators, even when its content overflows.\"},{name:\"scrollbar\",description:'Scrollbars are typically narrow strips inserted on one or two edges of an element and which often have arrows to click on and a \"thumb\" to drag up and down (or left and right) to move the contents of the element.'}],status:\"nonstandard\",syntax:\"auto | none | scrollbar | -ms-autohiding-scrollbar\",relevance:0,description:\"Specify whether content is clipped when it overflows the element's content area.\",restrictions:[\"enum\"]},{name:\"-ms-perspective\",browsers:[\"IE10\"],values:[{name:\"none\",description:\"No perspective transform is applied.\"}],relevance:50,description:\"Applies the same transform as the perspective(<number>) transform function, except that it applies only to the positioned or transformed children of the element, not to the transform on the element itself.\",restrictions:[\"length\"]},{name:\"-ms-perspective-origin\",browsers:[\"IE10\"],relevance:50,description:\"Establishes the origin for the perspective property. It effectively sets the X and Y position at which the viewer appears to be looking at the children of the element.\",restrictions:[\"position\",\"percentage\",\"length\"]},{name:\"-ms-perspective-origin-x\",browsers:[\"IE10\"],relevance:50,description:\"Establishes the origin for the perspective property. It effectively sets the X  position at which the viewer appears to be looking at the children of the element.\",restrictions:[\"position\",\"percentage\",\"length\"]},{name:\"-ms-perspective-origin-y\",browsers:[\"IE10\"],relevance:50,description:\"Establishes the origin for the perspective property. It effectively sets the Y position at which the viewer appears to be looking at the children of the element.\",restrictions:[\"position\",\"percentage\",\"length\"]},{name:\"-ms-progress-appearance\",browsers:[\"IE10\"],values:[{name:\"bar\"},{name:\"ring\"}],relevance:50,description:\"Gets or sets a value that specifies whether a progress control displays as a bar or a ring.\",restrictions:[\"enum\"]},{name:\"-ms-scrollbar-3dlight-color\",browsers:[\"IE8\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,description:\"Determines the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.\",restrictions:[\"color\"]},{name:\"-ms-scrollbar-arrow-color\",browsers:[\"IE8\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,description:\"Determines the color of the arrow elements of a scroll arrow.\",restrictions:[\"color\"]},{name:\"-ms-scrollbar-base-color\",browsers:[\"IE8\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,description:\"Determines the color of the main elements of a scroll bar, which include the scroll box, track, and scroll arrows.\",restrictions:[\"color\"]},{name:\"-ms-scrollbar-darkshadow-color\",browsers:[\"IE8\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,description:\"Determines the color of the gutter of a scroll bar.\",restrictions:[\"color\"]},{name:\"-ms-scrollbar-face-color\",browsers:[\"IE8\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,description:\"Determines the color of the scroll box and scroll arrows of a scroll bar.\",restrictions:[\"color\"]},{name:\"-ms-scrollbar-highlight-color\",browsers:[\"IE8\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,description:\"Determines the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.\",restrictions:[\"color\"]},{name:\"-ms-scrollbar-shadow-color\",browsers:[\"IE8\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,description:\"Determines the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.\",restrictions:[\"color\"]},{name:\"-ms-scrollbar-track-color\",browsers:[\"IE5\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-ms-scrollbar-track-color\"}],description:\"Determines the color of the track element of a scroll bar.\",restrictions:[\"color\"]},{name:\"-ms-scroll-chaining\",browsers:[\"E\",\"IE10\"],values:[{name:\"chained\"},{name:\"none\"}],status:\"nonstandard\",syntax:\"chained | none\",relevance:0,description:\"Gets or sets a value that indicates the scrolling behavior that occurs when a user hits the content boundary during a manipulation.\",restrictions:[\"enum\",\"length\"]},{name:\"-ms-scroll-limit\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\"}],status:\"nonstandard\",syntax:\"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>\",relevance:0,description:\"Gets or sets a shorthand value that sets values for the -ms-scroll-limit-x-min, -ms-scroll-limit-y-min, -ms-scroll-limit-x-max, and -ms-scroll-limit-y-max properties.\",restrictions:[\"length\"]},{name:\"-ms-scroll-limit-x-max\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\"}],status:\"nonstandard\",syntax:\"auto | <length>\",relevance:0,description:\"Gets or sets a value that specifies the maximum value for the scrollLeft property.\",restrictions:[\"length\"]},{name:\"-ms-scroll-limit-x-min\",browsers:[\"E\",\"IE10\"],status:\"nonstandard\",syntax:\"<length>\",relevance:0,description:\"Gets or sets a value that specifies the minimum value for the scrollLeft property.\",restrictions:[\"length\"]},{name:\"-ms-scroll-limit-y-max\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\"}],status:\"nonstandard\",syntax:\"auto | <length>\",relevance:0,description:\"Gets or sets a value that specifies the maximum value for the scrollTop property.\",restrictions:[\"length\"]},{name:\"-ms-scroll-limit-y-min\",browsers:[\"E\",\"IE10\"],status:\"nonstandard\",syntax:\"<length>\",relevance:0,description:\"Gets or sets a value that specifies the minimum value for the scrollTop property.\",restrictions:[\"length\"]},{name:\"-ms-scroll-rails\",browsers:[\"E\",\"IE10\"],values:[{name:\"none\"},{name:\"railed\"}],status:\"nonstandard\",syntax:\"none | railed\",relevance:0,description:\"Gets or sets a value that indicates whether or not small motions perpendicular to the primary axis of motion will result in either changes to both the scrollTop and scrollLeft properties or a change to the primary axis (for instance, either the scrollTop or scrollLeft properties will change, but not both).\",restrictions:[\"enum\",\"length\"]},{name:\"-ms-scroll-snap-points-x\",browsers:[\"E\",\"IE10\"],values:[{name:\"snapInterval(100%, 100%)\"},{name:\"snapList()\"}],status:\"nonstandard\",syntax:\"snapInterval( <length-percentage>, <length-percentage> ) | snapList( <length-percentage># )\",relevance:0,description:\"Gets or sets a value that defines where snap-points will be located along the x-axis.\",restrictions:[\"enum\"]},{name:\"-ms-scroll-snap-points-y\",browsers:[\"E\",\"IE10\"],values:[{name:\"snapInterval(100%, 100%)\"},{name:\"snapList()\"}],status:\"nonstandard\",syntax:\"snapInterval( <length-percentage>, <length-percentage> ) | snapList( <length-percentage># )\",relevance:0,description:\"Gets or sets a value that defines where snap-points will be located along the y-axis.\",restrictions:[\"enum\"]},{name:\"-ms-scroll-snap-type\",browsers:[\"E\",\"IE10\"],values:[{name:\"none\",description:\"The visual viewport of this scroll container must ignore snap points, if any, when scrolled.\"},{name:\"mandatory\",description:\"The visual viewport of this scroll container is guaranteed to rest on a snap point when there are no active scrolling operations.\"},{name:\"proximity\",description:\"The visual viewport of this scroll container may come to rest on a snap point at the termination of a scroll at the discretion of the UA given the parameters of the scroll.\"}],status:\"nonstandard\",syntax:\"none | proximity | mandatory\",relevance:0,description:\"Gets or sets a value that defines what type of snap-point should be used for the current element. There are two type of snap-points, with the primary difference being whether or not the user is guaranteed to always stop on a snap-point.\",restrictions:[\"enum\"]},{name:\"-ms-scroll-snap-x\",browsers:[\"E\",\"IE10\"],values:[{name:\"mandatory\"},{name:\"none\"},{name:\"proximity\"},{name:\"snapInterval(100%, 100%)\"},{name:\"snapList()\"}],status:\"nonstandard\",syntax:\"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>\",relevance:0,description:\"Gets or sets a shorthand value that sets values for the -ms-scroll-snap-type and -ms-scroll-snap-points-x properties.\",restrictions:[\"enum\"]},{name:\"-ms-scroll-snap-y\",browsers:[\"E\",\"IE10\"],values:[{name:\"mandatory\"},{name:\"none\"},{name:\"proximity\"},{name:\"snapInterval(100%, 100%)\"},{name:\"snapList()\"}],status:\"nonstandard\",syntax:\"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>\",relevance:0,description:\"Gets or sets a shorthand value that sets values for the -ms-scroll-snap-type and -ms-scroll-snap-points-y properties.\",restrictions:[\"enum\"]},{name:\"-ms-scroll-translation\",browsers:[\"E\",\"IE10\"],values:[{name:\"none\"},{name:\"vertical-to-horizontal\"}],status:\"nonstandard\",syntax:\"none | vertical-to-horizontal\",relevance:0,description:\"Gets or sets a value that specifies whether vertical-to-horizontal scroll wheel translation occurs on the specified element.\",restrictions:[\"enum\"]},{name:\"-ms-text-align-last\",browsers:[\"E\",\"IE8\"],values:[{name:\"auto\"},{name:\"center\",description:\"The inline contents are centered within the line box.\"},{name:\"justify\",description:\"The text is justified according to the method specified by the 'text-justify' property.\"},{name:\"left\",description:\"The inline contents are aligned to the left edge of the line box. In vertical text, 'left' aligns to the edge of the line box that would be the start edge for left-to-right text.\"},{name:\"right\",description:\"The inline contents are aligned to the right edge of the line box. In vertical text, 'right' aligns to the edge of the line box that would be the end edge for left-to-right text.\"}],relevance:50,description:\"Describes how the last line of a block or a line right before a forced line break is aligned when 'text-align' is set to 'justify'.\",restrictions:[\"enum\"]},{name:\"-ms-text-autospace\",browsers:[\"E\",\"IE8\"],values:[{name:\"ideograph-alpha\",description:\"Creates 1/4em extra spacing between runs of ideographic letters and non-ideographic letters, such as Latin-based, Cyrillic, Greek, Arabic or Hebrew.\"},{name:\"ideograph-numeric\",description:\"Creates 1/4em extra spacing between runs of ideographic letters and numeric glyphs.\"},{name:\"ideograph-parenthesis\",description:\"Creates extra spacing between normal (non wide) parenthesis and ideographs.\"},{name:\"ideograph-space\",description:\"Extends the width of the space character while surrounded by ideographs.\"},{name:\"none\",description:\"No extra space is created.\"},{name:\"punctuation\",description:\"Creates extra non-breaking spacing around punctuation as required by language-specific typographic conventions.\"}],status:\"nonstandard\",syntax:\"none | ideograph-alpha | ideograph-numeric | ideograph-parenthesis | ideograph-space\",relevance:0,description:\"Determines whether or not a full-width punctuation mark character should be trimmed if it appears at the beginning of a line, so that its 'ink' lines up with the first glyph in the line above and below.\",restrictions:[\"enum\"]},{name:\"-ms-text-combine-horizontal\",browsers:[\"E\",\"IE11\"],values:[{name:\"all\",description:\"Attempt to typeset horizontally all consecutive characters within the box such that they take up the space of a single character within the vertical line box.\"},{name:\"digits\",description:\"Attempt to typeset horizontally each maximal sequence of consecutive ASCII digits (U+0030\\u2013U+0039) that has as many or fewer characters than the specified integer such that it takes up the space of a single character within the vertical line box.\"},{name:\"none\",description:\"No special processing.\"}],relevance:50,description:\"This property specifies the combination of multiple characters into the space of a single character.\",restrictions:[\"enum\",\"integer\"]},{name:\"-ms-text-justify\",browsers:[\"E\",\"IE8\"],values:[{name:\"auto\",description:\"The UA determines the justification algorithm to follow, based on a balance between performance and adequate presentation quality.\"},{name:\"distribute\",description:\"Justification primarily changes spacing both at word separators and at grapheme cluster boundaries in all scripts except those in the connected and cursive groups. This value is sometimes used in e.g. Japanese, often with the 'text-align-last' property.\"},{name:\"inter-cluster\",description:\"Justification primarily changes spacing at word separators and at grapheme cluster boundaries in clustered scripts. This value is typically used for Southeast Asian scripts such as Thai.\"},{name:\"inter-ideograph\",description:\"Justification primarily changes spacing at word separators and at inter-graphemic boundaries in scripts that use no word spaces. This value is typically used for CJK languages.\"},{name:\"inter-word\",description:\"Justification primarily changes spacing at word separators. This value is typically used for languages that separate words using spaces, like English or (sometimes) Korean.\"},{name:\"kashida\",description:\"Justification primarily stretches Arabic and related scripts through the use of kashida or other calligraphic elongation.\"}],relevance:50,description:\"Selects the justification algorithm used when 'text-align' is set to 'justify'. The property applies to block containers, but the UA may (but is not required to) also support it on inline elements.\",restrictions:[\"enum\"]},{name:\"-ms-text-kashida-space\",browsers:[\"E\",\"IE10\"],relevance:50,description:\"Sets or retrieves the ratio of kashida expansion to white space expansion when justifying lines of text in the object.\",restrictions:[\"percentage\"]},{name:\"-ms-text-overflow\",browsers:[\"IE10\"],values:[{name:\"clip\",description:\"Clip inline content that overflows. Characters may be only partially rendered.\"},{name:\"ellipsis\",description:\"Render an ellipsis character (U+2026) to represent clipped inline content.\"}],relevance:50,description:\"Text can overflow for example when it is prevented from wrapping\",restrictions:[\"enum\"]},{name:\"-ms-text-size-adjust\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\",description:\"Renderers must use the default size adjustment when displaying on a small device.\"},{name:\"none\",description:\"Renderers must not do size adjustment when displaying on a small device.\"}],relevance:50,description:\"Specifies a size adjustment for displaying text content in mobile browsers.\",restrictions:[\"enum\",\"percentage\"]},{name:\"-ms-text-underline-position\",browsers:[\"E\",\"IE10\"],values:[{name:\"alphabetic\",description:\"The underline is aligned with the alphabetic baseline. In this case the underline is likely to cross some descenders.\"},{name:\"auto\",description:\"The user agent may use any algorithm to determine the underline's position. In horizontal line layout, the underline should be aligned as for alphabetic. In vertical line layout, if the language is set to Japanese or Korean, the underline should be aligned as for over.\"},{name:\"over\",description:\"The underline is aligned with the 'top' (right in vertical writing) edge of the element's em-box. In this mode, an overline also switches sides.\"},{name:\"under\",description:\"The underline is aligned with the 'bottom' (left in vertical writing) edge of the element's em-box. In this case the underline usually does not cross the descenders. This is sometimes called 'accounting' underline.\"}],relevance:50,description:\"Sets the position of an underline specified on the same element: it does not affect underlines specified by ancestor elements.This property is typically used in vertical writing contexts such as in Japanese documents where it often desired to have the underline appear 'over' (to the right of) the affected run of text\",restrictions:[\"enum\"]},{name:\"-ms-touch-action\",browsers:[\"IE10\"],values:[{name:\"auto\",description:\"The element is a passive element, with several exceptions.\"},{name:\"double-tap-zoom\",description:\"The element will zoom on double-tap.\"},{name:\"manipulation\",description:\"The element is a manipulation-causing element.\"},{name:\"none\",description:\"The element is a manipulation-blocking element.\"},{name:\"pan-x\",description:\"The element permits touch-driven panning on the horizontal axis. The touch pan is performed on the nearest ancestor with horizontally scrollable content.\"},{name:\"pan-y\",description:\"The element permits touch-driven panning on the vertical axis. The touch pan is performed on the nearest ancestor with vertically scrollable content.\"},{name:\"pinch-zoom\",description:\"The element permits pinch-zooming. The pinch-zoom is performed on the nearest ancestor with zoomable content.\"}],relevance:50,description:\"Gets or sets a value that indicates whether and how a given region can be manipulated by the user.\",restrictions:[\"enum\"]},{name:\"-ms-touch-select\",browsers:[\"E\",\"IE10\"],values:[{name:\"grippers\",description:\"Grippers are always on.\"},{name:\"none\",description:\"Grippers are always off.\"}],status:\"nonstandard\",syntax:\"grippers | none\",relevance:0,description:\"Gets or sets a value that toggles the 'gripper' visual elements that enable touch text selection.\",restrictions:[\"enum\"]},{name:\"-ms-transform\",browsers:[\"IE9-9\"],values:[{name:\"matrix()\",description:\"Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]\"},{name:\"matrix3d()\",description:\"Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order.\"},{name:\"none\"},{name:\"rotate()\",description:\"Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property.\"},{name:\"rotate3d()\",description:\"Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters.\"},{name:\"rotateX('angle')\",description:\"Specifies a clockwise rotation by the given angle about the X axis.\"},{name:\"rotateY('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Y axis.\"},{name:\"rotateZ('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Z axis.\"},{name:\"scale()\",description:\"Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first.\"},{name:\"scale3d()\",description:\"Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters.\"},{name:\"scaleX()\",description:\"Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter.\"},{name:\"scaleY()\",description:\"Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter.\"},{name:\"scaleZ()\",description:\"Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter.\"},{name:\"skew()\",description:\"Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis).\"},{name:\"skewX()\",description:\"Specifies a skew transformation along the X axis by the given angle.\"},{name:\"skewY()\",description:\"Specifies a skew transformation along the Y axis by the given angle.\"},{name:\"translate()\",description:\"Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter.\"},{name:\"translate3d()\",description:\"Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively.\"},{name:\"translateX()\",description:\"Specifies a translation by the given amount in the X direction.\"},{name:\"translateY()\",description:\"Specifies a translation by the given amount in the Y direction.\"},{name:\"translateZ()\",description:\"Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0.\"}],relevance:50,description:\"A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.\",restrictions:[\"enum\"]},{name:\"-ms-transform-origin\",browsers:[\"IE9-9\"],relevance:50,description:\"Establishes the origin of transformation for an element.\",restrictions:[\"position\",\"length\",\"percentage\"]},{name:\"-ms-transform-origin-x\",browsers:[\"IE10\"],relevance:50,description:\"The x coordinate of the origin for transforms applied to an element with respect to its border box.\",restrictions:[\"length\",\"percentage\"]},{name:\"-ms-transform-origin-y\",browsers:[\"IE10\"],relevance:50,description:\"The y coordinate of the origin for transforms applied to an element with respect to its border box.\",restrictions:[\"length\",\"percentage\"]},{name:\"-ms-transform-origin-z\",browsers:[\"IE10\"],relevance:50,description:\"The z coordinate of the origin for transforms applied to an element with respect to its border box.\",restrictions:[\"length\",\"percentage\"]},{name:\"-ms-user-select\",browsers:[\"E\",\"IE10\"],values:[{name:\"element\"},{name:\"none\"},{name:\"text\"}],status:\"nonstandard\",syntax:\"none | element | text\",relevance:0,description:\"Controls the appearance of selection.\",restrictions:[\"enum\"]},{name:\"-ms-word-break\",browsers:[\"IE8\"],values:[{name:\"break-all\",description:\"Lines may break between any two grapheme clusters for non-CJK scripts.\"},{name:\"keep-all\",description:\"Block characters can no longer create implied break points.\"},{name:\"normal\",description:\"Breaks non-CJK scripts according to their own rules.\"}],relevance:50,description:\"Specifies line break opportunities for non-CJK scripts.\",restrictions:[\"enum\"]},{name:\"-ms-word-wrap\",browsers:[\"IE8\"],values:[{name:\"break-word\",description:\"An unbreakable 'word' may be broken at an arbitrary point if there are no otherwise-acceptable break points in the line.\"},{name:\"normal\",description:\"Lines may break only at allowed break points.\"}],relevance:50,description:\"Specifies whether the UA may break within a word to prevent overflow when an otherwise-unbreakable string is too long to fit.\",restrictions:[\"enum\"]},{name:\"-ms-wrap-flow\",browsers:[\"E\",\"IE10\"],values:[{name:\"auto\",description:\"For floats an exclusion is created, for all other elements an exclusion is not created.\"},{name:\"both\",description:\"Inline flow content can flow on all sides of the exclusion.\"},{name:\"clear\",description:\"Inline flow content can only wrap on top and bottom of the exclusion and must leave the areas to the start and end edges of the exclusion box empty.\"},{name:\"end\",description:\"Inline flow content can wrap on the end side of the exclusion area but must leave the area to the start edge of the exclusion area empty.\"},{name:\"maximum\",description:\"Inline flow content can wrap on the side of the exclusion with the largest available space for the given line, and must leave the other side of the exclusion empty.\"},{name:\"minimum\",description:\"Inline flow content can flow around the edge of the exclusion with the smallest available space within the flow content\\u2019s containing block, and must leave the other edge of the exclusion empty.\"},{name:\"start\",description:\"Inline flow content can wrap on the start edge of the exclusion area but must leave the area to end edge of the exclusion area empty.\"}],status:\"nonstandard\",syntax:\"auto | both | start | end | maximum | clear\",relevance:0,description:\"An element becomes an exclusion when its 'wrap-flow' property has a computed value other than 'auto'.\",restrictions:[\"enum\"]},{name:\"-ms-wrap-margin\",browsers:[\"E\",\"IE10\"],status:\"nonstandard\",syntax:\"<length>\",relevance:0,description:\"Gets or sets a value that is used to offset the inner wrap shape from other shapes.\",restrictions:[\"length\",\"percentage\"]},{name:\"-ms-wrap-through\",browsers:[\"E\",\"IE10\"],values:[{name:\"none\",description:\"The exclusion element does not inherit its parent node's wrapping context. Its descendants are only subject to exclusion shapes defined inside the element.\"},{name:\"wrap\",description:\"The exclusion element inherits its parent node's wrapping context. Its descendant inline content wraps around exclusions defined outside the element.\"}],status:\"nonstandard\",syntax:\"wrap | none\",relevance:0,description:\"Specifies if an element inherits its parent wrapping context. In other words if it is subject to the exclusions defined outside the element.\",restrictions:[\"enum\"]},{name:\"-ms-writing-mode\",browsers:[\"IE8\"],values:[{name:\"bt-lr\"},{name:\"bt-rl\"},{name:\"lr-bt\"},{name:\"lr-tb\"},{name:\"rl-bt\"},{name:\"rl-tb\"},{name:\"tb-lr\"},{name:\"tb-rl\"}],relevance:50,description:\"Shorthand property for both 'direction' and 'block-progression'.\",restrictions:[\"enum\"]},{name:\"-ms-zoom\",browsers:[\"IE8\"],values:[{name:\"normal\"}],relevance:50,description:\"Sets or retrieves the magnification scale of the object.\",restrictions:[\"enum\",\"integer\",\"number\",\"percentage\"]},{name:\"-ms-zoom-animation\",browsers:[\"IE10\"],values:[{name:\"default\"},{name:\"none\"}],relevance:50,description:\"Gets or sets a value that indicates whether an animation is used when zooming.\",restrictions:[\"enum\"]},{name:\"nav-down\",browsers:[\"O9.5\"],values:[{name:\"auto\",description:\"The user agent automatically determines which element to navigate the focus to in response to directional navigational input.\"},{name:\"current\",description:\"Indicates that the user agent should target the frame that the element is in.\"},{name:\"root\",description:\"Indicates that the user agent should target the full window.\"}],relevance:50,description:\"Provides an way to control directional focus navigation.\",restrictions:[\"enum\",\"identifier\",\"string\"]},{name:\"nav-index\",browsers:[\"O9.5\"],values:[{name:\"auto\",description:\"The element's sequential navigation order is assigned automatically by the user agent.\"}],relevance:50,description:\"Provides an input-method-neutral way of specifying the sequential navigation order (also known as 'tabbing order').\",restrictions:[\"number\"]},{name:\"nav-left\",browsers:[\"O9.5\"],values:[{name:\"auto\",description:\"The user agent automatically determines which element to navigate the focus to in response to directional navigational input.\"},{name:\"current\",description:\"Indicates that the user agent should target the frame that the element is in.\"},{name:\"root\",description:\"Indicates that the user agent should target the full window.\"}],relevance:50,description:\"Provides an way to control directional focus navigation.\",restrictions:[\"enum\",\"identifier\",\"string\"]},{name:\"nav-right\",browsers:[\"O9.5\"],values:[{name:\"auto\",description:\"The user agent automatically determines which element to navigate the focus to in response to directional navigational input.\"},{name:\"current\",description:\"Indicates that the user agent should target the frame that the element is in.\"},{name:\"root\",description:\"Indicates that the user agent should target the full window.\"}],relevance:50,description:\"Provides an way to control directional focus navigation.\",restrictions:[\"enum\",\"identifier\",\"string\"]},{name:\"nav-up\",browsers:[\"O9.5\"],values:[{name:\"auto\",description:\"The user agent automatically determines which element to navigate the focus to in response to directional navigational input.\"},{name:\"current\",description:\"Indicates that the user agent should target the frame that the element is in.\"},{name:\"root\",description:\"Indicates that the user agent should target the full window.\"}],relevance:50,description:\"Provides an way to control directional focus navigation.\",restrictions:[\"enum\",\"identifier\",\"string\"]},{name:\"negative\",browsers:[\"FF33\"],syntax:\"<symbol> <symbol>?\",relevance:50,description:\"@counter-style descriptor. Defines how to alter the representation when the counter value is negative.\",restrictions:[\"image\",\"identifier\",\"string\"]},{name:\"-o-animation\",browsers:[\"O12\"],values:[{name:\"alternate\",description:\"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction.\"},{name:\"alternate-reverse\",description:\"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction.\"},{name:\"backwards\",description:\"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'.\"},{name:\"both\",description:\"Both forwards and backwards fill modes are applied.\"},{name:\"forwards\",description:\"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes.\"},{name:\"infinite\",description:\"Causes the animation to repeat forever.\"},{name:\"none\",description:\"No animation is performed\"},{name:\"normal\",description:\"Normal playback.\"},{name:\"reverse\",description:\"All iterations of the animation are played in the reverse direction from the way they were specified.\"}],relevance:50,description:\"Shorthand property combines six of the animation properties into a single property.\",restrictions:[\"time\",\"enum\",\"timing-function\",\"identifier\",\"number\"]},{name:\"-o-animation-delay\",browsers:[\"O12\"],relevance:50,description:\"Defines when the animation will start.\",restrictions:[\"time\"]},{name:\"-o-animation-direction\",browsers:[\"O12\"],values:[{name:\"alternate\",description:\"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction.\"},{name:\"alternate-reverse\",description:\"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction.\"},{name:\"normal\",description:\"Normal playback.\"},{name:\"reverse\",description:\"All iterations of the animation are played in the reverse direction from the way they were specified.\"}],relevance:50,description:\"Defines whether or not the animation should play in reverse on alternate cycles.\",restrictions:[\"enum\"]},{name:\"-o-animation-duration\",browsers:[\"O12\"],relevance:50,description:\"Defines the length of time that an animation takes to complete one cycle.\",restrictions:[\"time\"]},{name:\"-o-animation-fill-mode\",browsers:[\"O12\"],values:[{name:\"backwards\",description:\"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'.\"},{name:\"both\",description:\"Both forwards and backwards fill modes are applied.\"},{name:\"forwards\",description:\"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes.\"},{name:\"none\",description:\"There is no change to the property value between the time the animation is applied and the time the animation begins playing or after the animation completes.\"}],relevance:50,description:\"Defines what values are applied by the animation outside the time it is executing.\",restrictions:[\"enum\"]},{name:\"-o-animation-iteration-count\",browsers:[\"O12\"],values:[{name:\"infinite\",description:\"Causes the animation to repeat forever.\"}],relevance:50,description:\"Defines the number of times an animation cycle is played. The default value is one, meaning the animation will play from beginning to end once.\",restrictions:[\"number\",\"enum\"]},{name:\"-o-animation-name\",browsers:[\"O12\"],values:[{name:\"none\",description:\"No animation is performed\"}],relevance:50,description:\"Defines a list of animations that apply. Each name is used to select the keyframe at-rule that provides the property values for the animation.\",restrictions:[\"identifier\",\"enum\"]},{name:\"-o-animation-play-state\",browsers:[\"O12\"],values:[{name:\"paused\",description:\"A running animation will be paused.\"},{name:\"running\",description:\"Resume playback of a paused animation.\"}],relevance:50,description:\"Defines whether the animation is running or paused.\",restrictions:[\"enum\"]},{name:\"-o-animation-timing-function\",browsers:[\"O12\"],relevance:50,description:\"Describes how the animation will progress over one cycle of its duration. See the 'transition-timing-function'.\",restrictions:[\"timing-function\"]},{name:\"object-fit\",browsers:[\"E79\",\"FF36\",\"S10\",\"C32\",\"O19\"],values:[{name:\"contain\",description:\"The replaced content is sized to maintain its aspect ratio while fitting within the element\\u2019s content box: its concrete object size is resolved as a contain constraint against the element's used width and height.\"},{name:\"cover\",description:\"The replaced content is sized to maintain its aspect ratio while filling the element's entire content box: its concrete object size is resolved as a cover constraint against the element\\u2019s used width and height.\"},{name:\"fill\",description:\"The replaced content is sized to fill the element\\u2019s content box: the object's concrete object size is the element's used width and height.\"},{name:\"none\",description:\"The replaced content is not resized to fit inside the element's content box\"},{name:\"scale-down\",description:\"Size the content as if \\u2018none\\u2019 or \\u2018contain\\u2019 were specified, whichever would result in a smaller concrete object size.\"}],syntax:\"fill | contain | cover | none | scale-down\",relevance:68,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/object-fit\"}],description:\"Specifies how the contents of a replaced element should be scaled relative to the box established by its used height and width.\",restrictions:[\"enum\"]},{name:\"object-position\",browsers:[\"E79\",\"FF36\",\"S10\",\"C32\",\"O19\"],syntax:\"<position>\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/object-position\"}],description:\"Determines the alignment of the replaced element inside its box.\",restrictions:[\"position\",\"length\",\"percentage\"]},{name:\"-o-border-image\",browsers:[\"O11.6\"],values:[{name:\"auto\",description:\"If 'auto' is specified then the border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead.\"},{name:\"fill\",description:\"Causes the middle part of the border-image to be preserved.\"},{name:\"none\"},{name:\"repeat\",description:\"The image is tiled (repeated) to fill the area.\"},{name:\"round\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does.\"},{name:\"space\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles.\"},{name:\"stretch\",description:\"The image is stretched to fill the area.\"}],relevance:50,description:\"Shorthand property for setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat'. Omitted values are set to their initial values.\",restrictions:[\"length\",\"percentage\",\"number\",\"image\",\"enum\"]},{name:\"-o-object-fit\",browsers:[\"O10.6\"],values:[{name:\"contain\",description:\"The replaced content is sized to maintain its aspect ratio while fitting within the element\\u2019s content box: its concrete object size is resolved as a contain constraint against the element's used width and height.\"},{name:\"cover\",description:\"The replaced content is sized to maintain its aspect ratio while filling the element's entire content box: its concrete object size is resolved as a cover constraint against the element\\u2019s used width and height.\"},{name:\"fill\",description:\"The replaced content is sized to fill the element\\u2019s content box: the object's concrete object size is the element's used width and height.\"},{name:\"none\",description:\"The replaced content is not resized to fit inside the element's content box\"},{name:\"scale-down\",description:\"Size the content as if \\u2018none\\u2019 or \\u2018contain\\u2019 were specified, whichever would result in a smaller concrete object size.\"}],relevance:50,description:\"Specifies how the contents of a replaced element should be scaled relative to the box established by its used height and width.\",restrictions:[\"enum\"]},{name:\"-o-object-position\",browsers:[\"O10.6\"],relevance:50,description:\"Determines the alignment of the replaced element inside its box.\",restrictions:[\"position\",\"length\",\"percentage\"]},{name:\"opacity\",syntax:\"<alpha-value>\",relevance:93,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/opacity\"}],description:\"Opacity of an element's text, where 1 is opaque and 0 is entirely transparent.\",restrictions:[\"number(0-1)\"]},{name:\"order\",syntax:\"<integer>\",relevance:63,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/order\"}],description:\"Controls the order in which children of a flex container appear within the flex container, by assigning them to ordinal groups.\",restrictions:[\"integer\"]},{name:\"orphans\",browsers:[\"E12\",\"S1.3\",\"C25\",\"IE8\",\"O9.2\"],syntax:\"<integer>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/orphans\"}],description:\"Specifies the minimum number of line boxes in a block container that must be left in a fragment before a fragmentation break.\",restrictions:[\"integer\"]},{name:\"-o-table-baseline\",browsers:[\"O9.6\"],relevance:50,description:\"Determines which row of a inline-table should be used as baseline of inline-table.\",restrictions:[\"integer\"]},{name:\"-o-tab-size\",browsers:[\"O10.6\"],relevance:50,description:\"This property determines the width of the tab character (U+0009), in space characters (U+0020), when rendered.\",restrictions:[\"integer\",\"length\"]},{name:\"-o-text-overflow\",browsers:[\"O10\"],values:[{name:\"clip\",description:\"Clip inline content that overflows. Characters may be only partially rendered.\"},{name:\"ellipsis\",description:\"Render an ellipsis character (U+2026) to represent clipped inline content.\"}],relevance:50,description:\"Text can overflow for example when it is prevented from wrapping\",restrictions:[\"enum\"]},{name:\"-o-transform\",browsers:[\"O10.5\"],values:[{name:\"matrix()\",description:\"Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]\"},{name:\"matrix3d()\",description:\"Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order.\"},{name:\"none\"},{name:\"rotate()\",description:\"Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property.\"},{name:\"rotate3d()\",description:\"Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters.\"},{name:\"rotateX('angle')\",description:\"Specifies a clockwise rotation by the given angle about the X axis.\"},{name:\"rotateY('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Y axis.\"},{name:\"rotateZ('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Z axis.\"},{name:\"scale()\",description:\"Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first.\"},{name:\"scale3d()\",description:\"Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters.\"},{name:\"scaleX()\",description:\"Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter.\"},{name:\"scaleY()\",description:\"Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter.\"},{name:\"scaleZ()\",description:\"Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter.\"},{name:\"skew()\",description:\"Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis).\"},{name:\"skewX()\",description:\"Specifies a skew transformation along the X axis by the given angle.\"},{name:\"skewY()\",description:\"Specifies a skew transformation along the Y axis by the given angle.\"},{name:\"translate()\",description:\"Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter.\"},{name:\"translate3d()\",description:\"Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively.\"},{name:\"translateX()\",description:\"Specifies a translation by the given amount in the X direction.\"},{name:\"translateY()\",description:\"Specifies a translation by the given amount in the Y direction.\"},{name:\"translateZ()\",description:\"Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0.\"}],relevance:50,description:\"A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.\",restrictions:[\"enum\"]},{name:\"-o-transform-origin\",browsers:[\"O10.5\"],relevance:50,description:\"Establishes the origin of transformation for an element.\",restrictions:[\"positon\",\"length\",\"percentage\"]},{name:\"-o-transition\",browsers:[\"O11.5\"],values:[{name:\"all\",description:\"Every property that is able to undergo a transition will do so.\"},{name:\"none\",description:\"No property will transition.\"}],relevance:50,description:\"Shorthand property combines four of the transition properties into a single property.\",restrictions:[\"time\",\"property\",\"timing-function\",\"enum\"]},{name:\"-o-transition-delay\",browsers:[\"O11.5\"],relevance:50,description:\"Defines when the transition will start. It allows a transition to begin execution some period of time from when it is applied.\",restrictions:[\"time\"]},{name:\"-o-transition-duration\",browsers:[\"O11.5\"],relevance:50,description:\"Specifies how long the transition from the old value to the new value should take.\",restrictions:[\"time\"]},{name:\"-o-transition-property\",browsers:[\"O11.5\"],values:[{name:\"all\",description:\"Every property that is able to undergo a transition will do so.\"},{name:\"none\",description:\"No property will transition.\"}],relevance:50,description:\"Specifies the name of the CSS property to which the transition is applied.\",restrictions:[\"property\"]},{name:\"-o-transition-timing-function\",browsers:[\"O11.5\"],relevance:50,description:\"Describes how the intermediate values used during a transition will be calculated.\",restrictions:[\"timing-function\"]},{name:\"offset-block-end\",browsers:[\"FF41\"],values:[{name:\"auto\",description:\"For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well.\"}],relevance:50,description:\"Logical 'bottom'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"offset-block-start\",browsers:[\"FF41\"],values:[{name:\"auto\",description:\"For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well.\"}],relevance:50,description:\"Logical 'top'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"offset-inline-end\",browsers:[\"FF41\"],values:[{name:\"auto\",description:\"For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well.\"}],relevance:50,description:\"Logical 'right'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"offset-inline-start\",browsers:[\"FF41\"],values:[{name:\"auto\",description:\"For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well.\"}],relevance:50,description:\"Logical 'left'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"outline\",values:[{name:\"auto\",description:\"Permits the user agent to render a custom outline style, typically the default platform style.\"},{name:\"invert\",description:\"Performs a color inversion on the pixels on the screen.\"}],syntax:\"[ <'outline-color'> || <'outline-style'> || <'outline-width'> ]\",relevance:88,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/outline\"}],description:\"Shorthand property for 'outline-style', 'outline-width', and 'outline-color'.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\",\"enum\"]},{name:\"outline-color\",values:[{name:\"invert\",description:\"Performs a color inversion on the pixels on the screen.\"}],syntax:\"<color> | invert\",relevance:55,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/outline-color\"}],description:\"The color of the outline.\",restrictions:[\"enum\",\"color\"]},{name:\"outline-offset\",browsers:[\"E15\",\"FF1.5\",\"S1.2\",\"C1\",\"O9.5\"],syntax:\"<length>\",relevance:69,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/outline-offset\"}],description:\"Offset the outline and draw it beyond the border edge.\",restrictions:[\"length\"]},{name:\"outline-style\",values:[{name:\"auto\",description:\"Permits the user agent to render a custom outline style, typically the default platform style.\"}],syntax:\"auto | <'border-style'>\",relevance:61,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/outline-style\"}],description:\"Style of the outline.\",restrictions:[\"line-style\",\"enum\"]},{name:\"outline-width\",syntax:\"<line-width>\",relevance:61,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/outline-width\"}],description:\"Width of the outline.\",restrictions:[\"length\",\"line-width\"]},{name:\"overflow\",values:[{name:\"auto\",description:\"The behavior of the 'auto' value is UA-dependent, but should cause a scrolling mechanism to be provided for overflowing boxes.\"},{name:\"hidden\",description:\"Content is clipped and no scrolling mechanism should be provided to view the content outside the clipping region.\"},{name:\"-moz-hidden-unscrollable\",description:\"Same as the standardized 'clip', except doesn\\u2019t establish a block formatting context.\"},{name:\"scroll\",description:\"Content is clipped and if the user agent uses a scrolling mechanism that is visible on the screen (such as a scroll bar or a panner), that mechanism should be displayed for a box whether or not any of its content is clipped.\"},{name:\"visible\",description:\"Content is not clipped, i.e., it may be rendered outside the content box.\"}],syntax:\"[ visible | hidden | clip | scroll | auto ]{1,2}\",relevance:93,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overflow\"}],description:\"Shorthand for setting 'overflow-x' and 'overflow-y'.\",restrictions:[\"enum\"]},{name:\"overflow-wrap\",values:[{name:\"break-word\",description:\"An otherwise unbreakable sequence of characters may be broken at an arbitrary point if there are no otherwise-acceptable break points in the line.\"},{name:\"normal\",description:\"Lines may break only at allowed break points.\"}],syntax:\"normal | break-word | anywhere\",relevance:66,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overflow-wrap\"}],description:\"Specifies whether the UA may break within a word to prevent overflow when an otherwise-unbreakable string is too long to fit within the line box.\",restrictions:[\"enum\"]},{name:\"overflow-x\",values:[{name:\"auto\",description:\"The behavior of the 'auto' value is UA-dependent, but should cause a scrolling mechanism to be provided for overflowing boxes.\"},{name:\"hidden\",description:\"Content is clipped and no scrolling mechanism should be provided to view the content outside the clipping region.\"},{name:\"scroll\",description:\"Content is clipped and if the user agent uses a scrolling mechanism that is visible on the screen (such as a scroll bar or a panner), that mechanism should be displayed for a box whether or not any of its content is clipped.\"},{name:\"visible\",description:\"Content is not clipped, i.e., it may be rendered outside the content box.\"}],syntax:\"visible | hidden | clip | scroll | auto\",relevance:81,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overflow-x\"}],description:\"Specifies the handling of overflow in the horizontal direction.\",restrictions:[\"enum\"]},{name:\"overflow-y\",values:[{name:\"auto\",description:\"The behavior of the 'auto' value is UA-dependent, but should cause a scrolling mechanism to be provided for overflowing boxes.\"},{name:\"hidden\",description:\"Content is clipped and no scrolling mechanism should be provided to view the content outside the clipping region.\"},{name:\"scroll\",description:\"Content is clipped and if the user agent uses a scrolling mechanism that is visible on the screen (such as a scroll bar or a panner), that mechanism should be displayed for a box whether or not any of its content is clipped.\"},{name:\"visible\",description:\"Content is not clipped, i.e., it may be rendered outside the content box.\"}],syntax:\"visible | hidden | clip | scroll | auto\",relevance:83,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overflow-y\"}],description:\"Specifies the handling of overflow in the vertical direction.\",restrictions:[\"enum\"]},{name:\"pad\",browsers:[\"FF33\"],syntax:\"<integer> && <symbol>\",relevance:50,description:\"@counter-style descriptor. Specifies a \\u201Cfixed-width\\u201D counter style, where representations shorter than the pad value are padded with a particular <symbol>\",restrictions:[\"integer\",\"image\",\"string\",\"identifier\"]},{name:\"padding\",values:[],syntax:\"[ <length> | <percentage> ]{1,4}\",relevance:96,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding\"}],description:\"Shorthand property to set values for the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.\",restrictions:[\"length\",\"percentage\"]},{name:\"padding-bottom\",syntax:\"<length> | <percentage>\",relevance:89,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-bottom\"}],description:\"Shorthand property to set values for the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.\",restrictions:[\"length\",\"percentage\"]},{name:\"padding-block-end\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'padding-left'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-block-end\"}],description:\"Logical 'padding-bottom'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"padding-block-start\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'padding-left'>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-block-start\"}],description:\"Logical 'padding-top'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"padding-inline-end\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'padding-left'>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-inline-end\"}],description:\"Logical 'padding-right'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"padding-inline-start\",browsers:[\"E79\",\"FF41\",\"S12.1\",\"C69\",\"O56\"],syntax:\"<'padding-left'>\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-inline-start\"}],description:\"Logical 'padding-left'. Mapping depends on the parent element\\u2019s 'writing-mode', 'direction', and 'text-orientation'.\",restrictions:[\"length\",\"percentage\"]},{name:\"padding-left\",syntax:\"<length> | <percentage>\",relevance:91,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-left\"}],description:\"Shorthand property to set values for the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.\",restrictions:[\"length\",\"percentage\"]},{name:\"padding-right\",syntax:\"<length> | <percentage>\",relevance:90,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-right\"}],description:\"Shorthand property to set values for the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.\",restrictions:[\"length\",\"percentage\"]},{name:\"padding-top\",syntax:\"<length> | <percentage>\",relevance:90,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-top\"}],description:\"Shorthand property to set values for the thickness of the padding area. If left is omitted, it is the same as right. If bottom is omitted it is the same as top, if right is omitted it is the same as top. The value may not be negative.\",restrictions:[\"length\",\"percentage\"]},{name:\"page-break-after\",values:[{name:\"always\",description:\"Always force a page break after the generated box.\"},{name:\"auto\",description:\"Neither force nor forbid a page break after generated box.\"},{name:\"avoid\",description:\"Avoid a page break after the generated box.\"},{name:\"left\",description:\"Force one or two page breaks after the generated box so that the next page is formatted as a left page.\"},{name:\"right\",description:\"Force one or two page breaks after the generated box so that the next page is formatted as a right page.\"}],syntax:\"auto | always | avoid | left | right | recto | verso\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/page-break-after\"}],description:\"Defines rules for page breaks after an element.\",restrictions:[\"enum\"]},{name:\"page-break-before\",values:[{name:\"always\",description:\"Always force a page break before the generated box.\"},{name:\"auto\",description:\"Neither force nor forbid a page break before the generated box.\"},{name:\"avoid\",description:\"Avoid a page break before the generated box.\"},{name:\"left\",description:\"Force one or two page breaks before the generated box so that the next page is formatted as a left page.\"},{name:\"right\",description:\"Force one or two page breaks before the generated box so that the next page is formatted as a right page.\"}],syntax:\"auto | always | avoid | left | right | recto | verso\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/page-break-before\"}],description:\"Defines rules for page breaks before an element.\",restrictions:[\"enum\"]},{name:\"page-break-inside\",values:[{name:\"auto\",description:\"Neither force nor forbid a page break inside the generated box.\"},{name:\"avoid\",description:\"Avoid a page break inside the generated box.\"}],syntax:\"auto | avoid\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/page-break-inside\"}],description:\"Defines rules for page breaks inside an element.\",restrictions:[\"enum\"]},{name:\"paint-order\",browsers:[\"E17\",\"FF60\",\"S8\",\"C35\",\"O22\"],values:[{name:\"fill\"},{name:\"markers\"},{name:\"normal\",description:\"The element is painted with the standard order of painting operations: the 'fill' is painted first, then its 'stroke' and finally its markers.\"},{name:\"stroke\"}],syntax:\"normal | [ fill || stroke || markers ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/paint-order\"}],description:\"Controls the order that the three paint operations that shapes and text are rendered with: their fill, their stroke and any markers they might have.\",restrictions:[\"enum\"]},{name:\"perspective\",values:[{name:\"none\",description:\"No perspective transform is applied.\"}],syntax:\"none | <length>\",relevance:55,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/perspective\"}],description:\"Applies the same transform as the perspective(<number>) transform function, except that it applies only to the positioned or transformed children of the element, not to the transform on the element itself.\",restrictions:[\"length\",\"enum\"]},{name:\"perspective-origin\",syntax:\"<position>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/perspective-origin\"}],description:\"Establishes the origin for the perspective property. It effectively sets the X and Y position at which the viewer appears to be looking at the children of the element.\",restrictions:[\"position\",\"percentage\",\"length\"]},{name:\"pointer-events\",values:[{name:\"all\",description:\"The given element can be the target element for pointer events whenever the pointer is over either the interior or the perimeter of the element.\"},{name:\"fill\",description:\"The given element can be the target element for pointer events whenever the pointer is over the interior of the element.\"},{name:\"none\",description:\"The given element does not receive pointer events.\"},{name:\"painted\",description:'The given element can be the target element for pointer events when the pointer is over a \"painted\" area. '},{name:\"stroke\",description:\"The given element can be the target element for pointer events whenever the pointer is over the perimeter of the element.\"},{name:\"visible\",description:\"The given element can be the target element for pointer events when the \\u2018visibility\\u2019 property is set to visible and the pointer is over either the interior or the perimeter of the element.\"},{name:\"visibleFill\",description:\"The given element can be the target element for pointer events when the \\u2018visibility\\u2019 property is set to visible and when the pointer is over the interior of the element.\"},{name:\"visiblePainted\",description:\"The given element can be the target element for pointer events when the \\u2018visibility\\u2019 property is set to visible and when the pointer is over a \\u2018painted\\u2019 area.\"},{name:\"visibleStroke\",description:\"The given element can be the target element for pointer events when the \\u2018visibility\\u2019 property is set to visible and when the pointer is over the perimeter of the element.\"}],syntax:\"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit\",relevance:82,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/pointer-events\"}],description:\"Specifies under what circumstances a given element can be the target element for a pointer event.\",restrictions:[\"enum\"]},{name:\"position\",values:[{name:\"absolute\",description:\"The box's position (and possibly size) is specified with the 'top', 'right', 'bottom', and 'left' properties. These properties specify offsets with respect to the box's 'containing block'.\"},{name:\"fixed\",description:\"The box's position is calculated according to the 'absolute' model, but in addition, the box is fixed with respect to some reference. As with the 'absolute' model, the box's margins do not collapse with any other margins.\"},{name:\"-ms-page\",description:\"The box's position is calculated according to the 'absolute' model.\"},{name:\"relative\",description:\"The box's position is calculated according to the normal flow (this is called the position in normal flow). Then the box is offset relative to its normal position.\"},{name:\"static\",description:\"The box is a normal box, laid out according to the normal flow. The 'top', 'right', 'bottom', and 'left' properties do not apply.\"},{name:\"sticky\",description:\"The box's position is calculated according to the normal flow. Then the box is offset relative to its flow root and containing block and in all cases, including table elements, does not affect the position of any following boxes.\"},{name:\"-webkit-sticky\",description:\"The box's position is calculated according to the normal flow. Then the box is offset relative to its flow root and containing block and in all cases, including table elements, does not affect the position of any following boxes.\"}],syntax:\"static | relative | absolute | sticky | fixed\",relevance:96,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/position\"}],description:\"The position CSS property sets how an element is positioned in a document. The top, right, bottom, and left properties determine the final location of positioned elements.\",restrictions:[\"enum\"]},{name:\"prefix\",browsers:[\"FF33\"],syntax:\"<symbol>\",relevance:50,description:\"@counter-style descriptor. Specifies a <symbol> that is prepended to the marker representation.\",restrictions:[\"image\",\"string\",\"identifier\"]},{name:\"quotes\",values:[{name:\"none\",description:\"The 'open-quote' and 'close-quote' values of the 'content' property produce no quotations marks, as if they were 'no-open-quote' and 'no-close-quote' respectively.\"}],syntax:\"none | auto | [ <string> <string> ]+\",relevance:53,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/quotes\"}],description:\"Specifies quotation marks for any number of embedded quotations.\",restrictions:[\"string\"]},{name:\"range\",browsers:[\"FF33\"],values:[{name:\"auto\",description:\"The range depends on the counter system.\"},{name:\"infinite\",description:\"If used as the first value in a range, it represents negative infinity; if used as the second value, it represents positive infinity.\"}],syntax:\"[ [ <integer> | infinite ]{2} ]# | auto\",relevance:50,description:\"@counter-style descriptor. Defines the ranges over which the counter style is defined.\",restrictions:[\"integer\",\"enum\"]},{name:\"resize\",browsers:[\"E79\",\"FF4\",\"S3\",\"C1\",\"O12.1\"],values:[{name:\"both\",description:\"The UA presents a bidirectional resizing mechanism to allow the user to adjust both the height and the width of the element.\"},{name:\"horizontal\",description:\"The UA presents a unidirectional horizontal resizing mechanism to allow the user to adjust only the width of the element.\"},{name:\"none\",description:\"The UA does not present a resizing mechanism on the element, and the user is given no direct manipulation mechanism to resize the element.\"},{name:\"vertical\",description:\"The UA presents a unidirectional vertical resizing mechanism to allow the user to adjust only the height of the element.\"}],syntax:\"none | both | horizontal | vertical | block | inline\",relevance:61,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/resize\"}],description:\"Specifies whether or not an element is resizable by the user, and if so, along which axis/axes.\",restrictions:[\"enum\"]},{name:\"right\",values:[{name:\"auto\",description:\"For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well\"}],syntax:\"<length> | <percentage> | auto\",relevance:91,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/right\"}],description:\"Specifies how far an absolutely positioned box's right margin edge is offset to the left of the right edge of the box's 'containing block'.\",restrictions:[\"length\",\"percentage\"]},{name:\"ruby-align\",browsers:[\"FF38\"],values:[{name:\"auto\",browsers:[\"FF38\"],description:\"The user agent determines how the ruby contents are aligned. This is the initial value.\"},{name:\"center\",description:\"The ruby content is centered within its box.\"},{name:\"distribute-letter\",browsers:[\"FF38\"],description:\"If the width of the ruby text is smaller than that of the base, then the ruby text contents are evenly distributed across the width of the base, with the first and last ruby text glyphs lining up with the corresponding first and last base glyphs. If the width of the ruby text is at least the width of the base, then the letters of the base are evenly distributed across the width of the ruby text.\"},{name:\"distribute-space\",browsers:[\"FF38\"],description:\"If the width of the ruby text is smaller than that of the base, then the ruby text contents are evenly distributed across the width of the base, with a certain amount of white space preceding the first and following the last character in the ruby text. That amount of white space is normally equal to half the amount of inter-character space of the ruby text.\"},{name:\"left\",description:\"The ruby text content is aligned with the start edge of the base.\"},{name:\"line-edge\",browsers:[\"FF38\"],description:\"If the ruby text is not adjacent to a line edge, it is aligned as in 'auto'. If it is adjacent to a line edge, then it is still aligned as in auto, but the side of the ruby text that touches the end of the line is lined up with the corresponding edge of the base.\"},{name:\"right\",browsers:[\"FF38\"],description:\"The ruby text content is aligned with the end edge of the base.\"},{name:\"start\",browsers:[\"FF38\"],description:\"The ruby text content is aligned with the start edge of the base.\"},{name:\"space-between\",browsers:[\"FF38\"],description:\"The ruby content expands as defined for normal text justification (as defined by 'text-justify'),\"},{name:\"space-around\",browsers:[\"FF38\"],description:\"As for 'space-between' except that there exists an extra justification opportunities whose space is distributed half before and half after the ruby content.\"}],status:\"experimental\",syntax:\"start | center | space-between | space-around\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/ruby-align\"}],description:\"Specifies how text is distributed within the various ruby boxes when their contents do not exactly fill their respective boxes.\",restrictions:[\"enum\"]},{name:\"ruby-overhang\",browsers:[\"FF10\",\"IE5\"],values:[{name:\"auto\",description:\"The ruby text can overhang text adjacent to the base on either side. This is the initial value.\"},{name:\"end\",description:\"The ruby text can overhang the text that follows it.\"},{name:\"none\",description:\"The ruby text cannot overhang any text adjacent to its base, only its own base.\"},{name:\"start\",description:\"The ruby text can overhang the text that precedes it.\"}],relevance:50,description:\"Determines whether, and on which side, ruby text is allowed to partially overhang any adjacent text in addition to its own base, when the ruby text is wider than the ruby base.\",restrictions:[\"enum\"]},{name:\"ruby-position\",browsers:[\"E84\",\"FF38\",\"S7\",\"C84\",\"O70\"],values:[{name:\"after\",description:\"The ruby text appears after the base. This is a relatively rare setting used in ideographic East Asian writing systems, most easily found in educational text.\"},{name:\"before\",description:\"The ruby text appears before the base. This is the most common setting used in ideographic East Asian writing systems.\"},{name:\"inline\"},{name:\"right\",description:\"The ruby text appears on the right of the base. Unlike 'before' and 'after', this value is not relative to the text flow direction.\"}],status:\"experimental\",syntax:\"[ alternate || [ over | under ] ] | inter-character\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/ruby-position\"}],description:\"Used by the parent of elements with display: ruby-text to control the position of the ruby text with respect to its base.\",restrictions:[\"enum\"]},{name:\"ruby-span\",browsers:[\"FF10\"],values:[{name:\"attr(x)\",description:\"The value of attribute 'x' is a string value. The string value is evaluated as a <number> to determine the number of ruby base elements to be spanned by the annotation element.\"},{name:\"none\",description:\"No spanning. The computed value is '1'.\"}],relevance:50,description:\"Determines whether, and on which side, ruby text is allowed to partially overhang any adjacent text in addition to its own base, when the ruby text is wider than the ruby base.\",restrictions:[\"enum\"]},{name:\"scrollbar-3dlight-color\",browsers:[\"IE5\"],relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-3dlight-color\"}],description:\"Determines the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.\",restrictions:[\"color\"]},{name:\"scrollbar-arrow-color\",browsers:[\"IE5\"],relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-arrow-color\"}],description:\"Determines the color of the arrow elements of a scroll arrow.\",restrictions:[\"color\"]},{name:\"scrollbar-base-color\",browsers:[\"IE5\"],relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-base-color\"}],description:\"Determines the color of the main elements of a scroll bar, which include the scroll box, track, and scroll arrows.\",restrictions:[\"color\"]},{name:\"scrollbar-darkshadow-color\",browsers:[\"IE5\"],relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-darkshadow-color\"}],description:\"Determines the color of the gutter of a scroll bar.\",restrictions:[\"color\"]},{name:\"scrollbar-face-color\",browsers:[\"IE5\"],relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-face-color\"}],description:\"Determines the color of the scroll box and scroll arrows of a scroll bar.\",restrictions:[\"color\"]},{name:\"scrollbar-highlight-color\",browsers:[\"IE5\"],relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-highlight-color\"}],description:\"Determines the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.\",restrictions:[\"color\"]},{name:\"scrollbar-shadow-color\",browsers:[\"IE5\"],relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-shadow-color\"}],description:\"Determines the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.\",restrictions:[\"color\"]},{name:\"scrollbar-track-color\",browsers:[\"IE6\"],relevance:50,description:\"Determines the color of the track element of a scroll bar.\",restrictions:[\"color\"]},{name:\"scroll-behavior\",browsers:[\"E79\",\"FF36\",\"S15.4\",\"C61\",\"O48\"],values:[{name:\"auto\",description:\"Scrolls in an instant fashion.\"},{name:\"smooth\",description:\"Scrolls in a smooth fashion using a user-agent-defined timing function and time period.\"}],syntax:\"auto | smooth\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-behavior\"}],description:\"Specifies the scrolling behavior for a scrolling box, when scrolling happens due to navigation or CSSOM scrolling APIs.\",restrictions:[\"enum\"]},{name:\"scroll-snap-coordinate\",browsers:[\"FF39\"],values:[{name:\"none\",description:\"Specifies that this element does not contribute a snap point.\"}],status:\"obsolete\",syntax:\"none | <position>#\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-snap-coordinate\"}],description:\"Defines the x and y coordinate within the element which will align with the nearest ancestor scroll container\\u2019s snap-destination for the respective axis.\",restrictions:[\"position\",\"length\",\"percentage\",\"enum\"]},{name:\"scroll-snap-destination\",browsers:[\"FF39\"],status:\"obsolete\",syntax:\"<position>\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-snap-destination\"}],description:\"Define the x and y coordinate within the scroll container\\u2019s visual viewport which element snap points will align with.\",restrictions:[\"position\",\"length\",\"percentage\"]},{name:\"scroll-snap-points-x\",browsers:[\"FF39\",\"S9\"],values:[{name:\"none\",description:\"No snap points are defined by this scroll container.\"},{name:\"repeat()\",description:\"Defines an interval at which snap points are defined, starting from the container\\u2019s relevant start edge.\"}],status:\"obsolete\",syntax:\"none | repeat( <length-percentage> )\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-snap-points-x\"}],description:\"Defines the positioning of snap points along the x axis of the scroll container it is applied to.\",restrictions:[\"enum\"]},{name:\"scroll-snap-points-y\",browsers:[\"FF39\",\"S9\"],values:[{name:\"none\",description:\"No snap points are defined by this scroll container.\"},{name:\"repeat()\",description:\"Defines an interval at which snap points are defined, starting from the container\\u2019s relevant start edge.\"}],status:\"obsolete\",syntax:\"none | repeat( <length-percentage> )\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-snap-points-y\"}],description:\"Defines the positioning of snap points along the y axis of the scroll container it is applied to.\",restrictions:[\"enum\"]},{name:\"scroll-snap-type\",values:[{name:\"none\",description:\"The visual viewport of this scroll container must ignore snap points, if any, when scrolled.\"},{name:\"mandatory\",description:\"The visual viewport of this scroll container is guaranteed to rest on a snap point when there are no active scrolling operations.\"},{name:\"proximity\",description:\"The visual viewport of this scroll container may come to rest on a snap point at the termination of a scroll at the discretion of the UA given the parameters of the scroll.\"}],syntax:\"none | [ x | y | block | inline | both ] [ mandatory | proximity ]?\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type\"}],description:\"Defines how strictly snap points are enforced on the scroll container.\",restrictions:[\"enum\"]},{name:\"shape-image-threshold\",browsers:[\"E79\",\"FF62\",\"S10.1\",\"C37\",\"O24\"],syntax:\"<alpha-value>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/shape-image-threshold\"}],description:\"Defines the alpha channel threshold used to extract the shape using an image. A value of 0.5 means that the shape will enclose all the pixels that are more than 50% opaque.\",restrictions:[\"number\"]},{name:\"shape-margin\",browsers:[\"E79\",\"FF62\",\"S10.1\",\"C37\",\"O24\"],syntax:\"<length-percentage>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/shape-margin\"}],description:\"Adds a margin to a 'shape-outside'. This defines a new shape that is the smallest contour that includes all the points that are the 'shape-margin' distance outward in the perpendicular direction from a point on the underlying shape.\",restrictions:[\"url\",\"length\",\"percentage\"]},{name:\"shape-outside\",browsers:[\"E79\",\"FF62\",\"S10.1\",\"C37\",\"O24\"],values:[{name:\"margin-box\",description:\"The background is painted within (clipped to) the margin box.\"},{name:\"none\",description:\"The float area is unaffected.\"}],syntax:\"none | [ <shape-box> || <basic-shape> ] | <image>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/shape-outside\"}],description:\"Specifies an orthogonal rotation to be applied to an image before it is laid out.\",restrictions:[\"image\",\"box\",\"shape\",\"enum\"]},{name:\"shape-rendering\",values:[{name:\"auto\",description:\"Suppresses aural rendering.\"},{name:\"crispEdges\",description:\"Emphasize the contrast between clean edges of artwork over rendering speed and geometric precision.\"},{name:\"geometricPrecision\",description:\"Emphasize geometric precision over speed and crisp edges.\"},{name:\"optimizeSpeed\",description:\"Emphasize rendering speed over geometric precision and crisp edges.\"}],relevance:50,description:\"Provides hints about what tradeoffs to make as it renders vector graphics elements such as <path> elements and basic shapes such as circles and rectangles.\",restrictions:[\"enum\"]},{name:\"size\",browsers:[\"C\",\"O8\"],syntax:\"<length>{1,2} | auto | [ <page-size> || [ portrait | landscape ] ]\",relevance:53,description:\"The size CSS at-rule descriptor, used with the @page at-rule, defines the size and orientation of the box which is used to represent a page. Most of the time, this size corresponds to the target size of the printed page if applicable.\",restrictions:[\"length\"]},{name:\"src\",values:[{name:\"url()\",description:\"Reference font by URL\"},{name:\"format()\",description:\"Optional hint describing the format of the font resource.\"},{name:\"local()\",description:\"Format-specific string that identifies a locally available copy of a given font.\"}],syntax:\"[ <url> [ format( <string># ) ]? | local( <family-name> ) ]#\",relevance:87,description:\"@font-face descriptor. Specifies the resource containing font data. It is required, whether the font is downloadable or locally installed.\",restrictions:[\"enum\",\"url\",\"identifier\"]},{name:\"stop-color\",relevance:51,description:\"Indicates what color to use at that gradient stop.\",restrictions:[\"color\"]},{name:\"stop-opacity\",relevance:50,description:\"Defines the opacity of a given gradient stop.\",restrictions:[\"number(0-1)\"]},{name:\"stroke\",values:[{name:\"url()\",description:\"A URL reference to a paint server element, which is an element that defines a paint server: \\u2018hatch\\u2019, \\u2018linearGradient\\u2019, \\u2018mesh\\u2019, \\u2018pattern\\u2019, \\u2018radialGradient\\u2019 and \\u2018solidcolor\\u2019.\"},{name:\"none\",description:\"No paint is applied in this layer.\"}],relevance:65,description:\"Paints along the outline of the given graphical element.\",restrictions:[\"color\",\"enum\",\"url\"]},{name:\"stroke-dasharray\",values:[{name:\"none\",description:\"Indicates that no dashing is used.\"}],relevance:58,description:\"Controls the pattern of dashes and gaps used to stroke paths.\",restrictions:[\"length\",\"percentage\",\"number\",\"enum\"]},{name:\"stroke-dashoffset\",relevance:59,description:\"Specifies the distance into the dash pattern to start the dash.\",restrictions:[\"percentage\",\"length\"]},{name:\"stroke-linecap\",values:[{name:\"butt\",description:\"Indicates that the stroke for each subpath does not extend beyond its two endpoints.\"},{name:\"round\",description:\"Indicates that at each end of each subpath, the shape representing the stroke will be extended by a half circle with a radius equal to the stroke width.\"},{name:\"square\",description:\"Indicates that at the end of each subpath, the shape representing the stroke will be extended by a rectangle with the same width as the stroke width and whose length is half of the stroke width.\"}],relevance:53,description:\"Specifies the shape to be used at the end of open subpaths when they are stroked.\",restrictions:[\"enum\"]},{name:\"stroke-linejoin\",values:[{name:\"bevel\",description:\"Indicates that a bevelled corner is to be used to join path segments.\"},{name:\"miter\",description:\"Indicates that a sharp corner is to be used to join path segments.\"},{name:\"round\",description:\"Indicates that a round corner is to be used to join path segments.\"}],relevance:50,description:\"Specifies the shape to be used at the corners of paths or basic shapes when they are stroked.\",restrictions:[\"enum\"]},{name:\"stroke-miterlimit\",relevance:51,description:\"When two line segments meet at a sharp angle and miter joins have been specified for 'stroke-linejoin', it is possible for the miter to extend far beyond the thickness of the line stroking the path.\",restrictions:[\"number\"]},{name:\"stroke-opacity\",relevance:52,description:\"Specifies the opacity of the painting operation used to stroke the current object.\",restrictions:[\"number(0-1)\"]},{name:\"stroke-width\",relevance:61,description:\"Specifies the width of the stroke on the current object.\",restrictions:[\"percentage\",\"length\"]},{name:\"suffix\",browsers:[\"FF33\"],syntax:\"<symbol>\",relevance:50,description:\"@counter-style descriptor. Specifies a <symbol> that is appended to the marker representation.\",restrictions:[\"image\",\"string\",\"identifier\"]},{name:\"system\",browsers:[\"FF33\"],values:[{name:\"additive\",description:\"Represents \\u201Csign-value\\u201D numbering systems, which, rather than using reusing digits in different positions to change their value, define additional digits with much larger values, so that the value of the number can be obtained by adding all the digits together.\"},{name:\"alphabetic\",description:'Interprets the list of counter symbols as digits to an alphabetic numbering system, similar to the default lower-alpha counter style, which wraps from \"a\", \"b\", \"c\", to \"aa\", \"ab\", \"ac\".'},{name:\"cyclic\",description:\"Cycles repeatedly through its provided symbols, looping back to the beginning when it reaches the end of the list.\"},{name:\"extends\",description:\"Use the algorithm of another counter style, but alter other aspects.\"},{name:\"fixed\",description:\"Runs through its list of counter symbols once, then falls back.\"},{name:\"numeric\",description:`interprets the list of counter symbols as digits to a \"place-value\" numbering system, similar to the default 'decimal' counter style.`},{name:\"symbolic\",description:\"Cycles repeatedly through its provided symbols, doubling, tripling, etc. the symbols on each successive pass through the list.\"}],syntax:\"cyclic | numeric | alphabetic | symbolic | additive | [ fixed <integer>? ] | [ extends <counter-style-name> ]\",relevance:50,description:\"@counter-style descriptor. Specifies which algorithm will be used to construct the counter\\u2019s representation based on the counter value.\",restrictions:[\"enum\",\"integer\"]},{name:\"symbols\",browsers:[\"FF33\"],syntax:\"<symbol>+\",relevance:50,description:\"@counter-style descriptor. Specifies the symbols used by the marker-construction algorithm specified by the system descriptor.\",restrictions:[\"image\",\"string\",\"identifier\"]},{name:\"table-layout\",values:[{name:\"auto\",description:\"Use any automatic table layout algorithm.\"},{name:\"fixed\",description:\"Use the fixed table layout algorithm.\"}],syntax:\"auto | fixed\",relevance:60,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/table-layout\"}],description:\"Controls the algorithm used to lay out the table cells, rows, and columns.\",restrictions:[\"enum\"]},{name:\"tab-size\",browsers:[\"E79\",\"FF91\",\"S7\",\"C21\",\"O15\"],syntax:\"<integer> | <length>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/tab-size\"}],description:\"Determines the width of the tab character (U+0009), in space characters (U+0020), when rendered.\",restrictions:[\"integer\",\"length\"]},{name:\"text-align\",values:[{name:\"center\",description:\"The inline contents are centered within the line box.\"},{name:\"end\",description:\"The inline contents are aligned to the end edge of the line box.\"},{name:\"justify\",description:\"The text is justified according to the method specified by the 'text-justify' property.\"},{name:\"left\",description:\"The inline contents are aligned to the left edge of the line box. In vertical text, 'left' aligns to the edge of the line box that would be the start edge for left-to-right text.\"},{name:\"right\",description:\"The inline contents are aligned to the right edge of the line box. In vertical text, 'right' aligns to the edge of the line box that would be the end edge for left-to-right text.\"},{name:\"start\",description:\"The inline contents are aligned to the start edge of the line box.\"}],syntax:\"start | end | left | right | center | justify | match-parent\",relevance:94,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-align\"}],description:\"Describes how inline contents of a block are horizontally aligned if the contents do not completely fill the line box.\",restrictions:[\"string\"]},{name:\"text-align-last\",browsers:[\"E12\",\"FF49\",\"C47\",\"IE5.5\",\"O34\"],values:[{name:\"auto\",description:\"Content on the affected line is aligned per 'text-align' unless 'text-align' is set to 'justify', in which case it is 'start-aligned'.\"},{name:\"center\",description:\"The inline contents are centered within the line box.\"},{name:\"justify\",description:\"The text is justified according to the method specified by the 'text-justify' property.\"},{name:\"left\",description:\"The inline contents are aligned to the left edge of the line box. In vertical text, 'left' aligns to the edge of the line box that would be the start edge for left-to-right text.\"},{name:\"right\",description:\"The inline contents are aligned to the right edge of the line box. In vertical text, 'right' aligns to the edge of the line box that would be the end edge for left-to-right text.\"}],syntax:\"auto | start | end | left | right | center | justify\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-align-last\"}],description:\"Describes how the last line of a block or a line right before a forced line break is aligned when 'text-align' is set to 'justify'.\",restrictions:[\"enum\"]},{name:\"text-anchor\",values:[{name:\"end\",description:\"The rendered characters are aligned such that the end of the resulting rendered text is at the initial current text position.\"},{name:\"middle\",description:\"The rendered characters are aligned such that the geometric middle of the resulting rendered text is at the initial current text position.\"},{name:\"start\",description:\"The rendered characters are aligned such that the start of the resulting rendered text is at the initial current text position.\"}],relevance:50,description:\"Used to align (start-, middle- or end-alignment) a string of text relative to a given point.\",restrictions:[\"enum\"]},{name:\"text-decoration\",values:[{name:\"dashed\",description:\"Produces a dashed line style.\"},{name:\"dotted\",description:\"Produces a dotted line.\"},{name:\"double\",description:\"Produces a double line.\"},{name:\"line-through\",description:\"Each line of text has a line through the middle.\"},{name:\"none\",description:\"Produces no line.\"},{name:\"overline\",description:\"Each line of text has a line above it.\"},{name:\"solid\",description:\"Produces a solid line.\"},{name:\"underline\",description:\"Each line of text is underlined.\"},{name:\"wavy\",description:\"Produces a wavy line.\"}],syntax:\"<'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'> || <'text-decoration-thickness'>\",relevance:92,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-decoration\"}],description:\"Decorations applied to font used for an element's text.\",restrictions:[\"enum\",\"color\"]},{name:\"text-decoration-color\",browsers:[\"E79\",\"FF36\",\"S12.1\",\"C57\",\"O44\"],syntax:\"<color>\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-decoration-color\"}],description:\"Specifies the color of text decoration (underlines overlines, and line-throughs) set on the element with text-decoration-line.\",restrictions:[\"color\"]},{name:\"text-decoration-line\",browsers:[\"E79\",\"FF36\",\"S12.1\",\"C57\",\"O44\"],values:[{name:\"line-through\",description:\"Each line of text has a line through the middle.\"},{name:\"none\",description:\"Neither produces nor inhibits text decoration.\"},{name:\"overline\",description:\"Each line of text has a line above it.\"},{name:\"underline\",description:\"Each line of text is underlined.\"}],syntax:\"none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error\",relevance:52,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-decoration-line\"}],description:\"Specifies what line decorations, if any, are added to the element.\",restrictions:[\"enum\"]},{name:\"text-decoration-style\",browsers:[\"E79\",\"FF36\",\"S12.1\",\"C57\",\"O44\"],values:[{name:\"dashed\",description:\"Produces a dashed line style.\"},{name:\"dotted\",description:\"Produces a dotted line.\"},{name:\"double\",description:\"Produces a double line.\"},{name:\"none\",description:\"Produces no line.\"},{name:\"solid\",description:\"Produces a solid line.\"},{name:\"wavy\",description:\"Produces a wavy line.\"}],syntax:\"solid | double | dotted | dashed | wavy\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-decoration-style\"}],description:\"Specifies the line style for underline, line-through and overline text decoration.\",restrictions:[\"enum\"]},{name:\"text-indent\",values:[],syntax:\"<length-percentage> && hanging? && each-line?\",relevance:68,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-indent\"}],description:\"Specifies the indentation applied to lines of inline content in a block. The indentation only affects the first line of inline content in the block unless the 'hanging' keyword is specified, in which case it affects all lines except the first.\",restrictions:[\"percentage\",\"length\"]},{name:\"text-justify\",browsers:[\"E12\",\"FF55\",\"C32\",\"IE11\",\"O19\"],values:[{name:\"auto\",description:\"The UA determines the justification algorithm to follow, based on a balance between performance and adequate presentation quality.\"},{name:\"distribute\",description:\"Justification primarily changes spacing both at word separators and at grapheme cluster boundaries in all scripts except those in the connected and cursive groups. This value is sometimes used in e.g. Japanese, often with the 'text-align-last' property.\"},{name:\"distribute-all-lines\"},{name:\"inter-cluster\",description:\"Justification primarily changes spacing at word separators and at grapheme cluster boundaries in clustered scripts. This value is typically used for Southeast Asian scripts such as Thai.\"},{name:\"inter-ideograph\",description:\"Justification primarily changes spacing at word separators and at inter-graphemic boundaries in scripts that use no word spaces. This value is typically used for CJK languages.\"},{name:\"inter-word\",description:\"Justification primarily changes spacing at word separators. This value is typically used for languages that separate words using spaces, like English or (sometimes) Korean.\"},{name:\"kashida\",description:\"Justification primarily stretches Arabic and related scripts through the use of kashida or other calligraphic elongation.\"},{name:\"newspaper\"}],syntax:\"auto | inter-character | inter-word | none\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-justify\"}],description:\"Selects the justification algorithm used when 'text-align' is set to 'justify'. The property applies to block containers, but the UA may (but is not required to) also support it on inline elements.\",restrictions:[\"enum\"]},{name:\"text-orientation\",browsers:[\"E79\",\"FF41\",\"S14\",\"C48\",\"O35\"],values:[{name:\"sideways\",browsers:[\"E79\",\"FF41\",\"S14\",\"C48\",\"O35\"],description:\"This value is equivalent to 'sideways-right' in 'vertical-rl' writing mode and equivalent to 'sideways-left' in 'vertical-lr' writing mode.\"},{name:\"sideways-right\",browsers:[\"E79\",\"FF41\",\"S14\",\"C48\",\"O35\"],description:\"In vertical writing modes, this causes text to be set as if in a horizontal layout, but rotated 90\\xB0 clockwise.\"},{name:\"upright\",description:\"In vertical writing modes, characters from horizontal-only scripts are rendered upright, i.e. in their standard horizontal orientation.\"}],syntax:\"mixed | upright | sideways\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-orientation\"}],description:\"Specifies the orientation of text within a line.\",restrictions:[\"enum\"]},{name:\"text-overflow\",values:[{name:\"clip\",description:\"Clip inline content that overflows. Characters may be only partially rendered.\"},{name:\"ellipsis\",description:\"Render an ellipsis character (U+2026) to represent clipped inline content.\"}],syntax:\"[ clip | ellipsis | <string> ]{1,2}\",relevance:82,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-overflow\"}],description:\"Text can overflow for example when it is prevented from wrapping.\",restrictions:[\"enum\",\"string\"]},{name:\"text-rendering\",browsers:[\"E79\",\"FF1\",\"S5\",\"C4\",\"O15\"],values:[{name:\"auto\"},{name:\"geometricPrecision\",description:\"Indicates that the user agent shall emphasize geometric precision over legibility and rendering speed.\"},{name:\"optimizeLegibility\",description:\"Indicates that the user agent shall emphasize legibility over rendering speed and geometric precision.\"},{name:\"optimizeSpeed\",description:\"Indicates that the user agent shall emphasize rendering speed over legibility and geometric precision.\"}],syntax:\"auto | optimizeSpeed | optimizeLegibility | geometricPrecision\",relevance:70,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-rendering\"}],description:\"The creator of SVG content might want to provide a hint to the implementation about what tradeoffs to make as it renders text. The \\u2018text-rendering\\u2019 property provides these hints.\",restrictions:[\"enum\"]},{name:\"text-shadow\",values:[{name:\"none\",description:\"No shadow.\"}],syntax:\"none | <shadow-t>#\",relevance:74,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-shadow\"}],description:\"Enables shadow effects to be applied to the text of the element.\",restrictions:[\"length\",\"color\"]},{name:\"text-transform\",values:[{name:\"capitalize\",description:\"Puts the first typographic letter unit of each word in titlecase.\"},{name:\"lowercase\",description:\"Puts all letters in lowercase.\"},{name:\"none\",description:\"No effects.\"},{name:\"uppercase\",description:\"Puts all letters in uppercase.\"}],syntax:\"none | capitalize | uppercase | lowercase | full-width | full-size-kana\",relevance:86,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-transform\"}],description:\"Controls capitalization effects of an element\\u2019s text.\",restrictions:[\"enum\"]},{name:\"text-underline-position\",values:[{name:\"above\"},{name:\"auto\",description:\"The user agent may use any algorithm to determine the underline\\u2019s position. In horizontal line layout, the underline should be aligned as for alphabetic. In vertical line layout, if the language is set to Japanese or Korean, the underline should be aligned as for over.\"},{name:\"below\",description:\"The underline is aligned with the under edge of the element\\u2019s content box.\"}],syntax:\"auto | from-font | [ under || [ left | right ] ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-underline-position\"}],description:\"Sets the position of an underline specified on the same element: it does not affect underlines specified by ancestor elements. This property is typically used in vertical writing contexts such as in Japanese documents where it often desired to have the underline appear 'over' (to the right of) the affected run of text\",restrictions:[\"enum\"]},{name:\"top\",values:[{name:\"auto\",description:\"For non-replaced elements, the effect of this value depends on which of related properties have the value 'auto' as well\"}],syntax:\"<length> | <percentage> | auto\",relevance:95,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/top\"}],description:\"Specifies how far an absolutely positioned box's top margin edge is offset below the top edge of the box's 'containing block'.\",restrictions:[\"length\",\"percentage\"]},{name:\"touch-action\",values:[{name:\"auto\",description:\"The user agent may determine any permitted touch behaviors for touches that begin on the element.\"},{name:\"cross-slide-x\"},{name:\"cross-slide-y\"},{name:\"double-tap-zoom\"},{name:\"manipulation\",description:\"The user agent may consider touches that begin on the element only for the purposes of scrolling and continuous zooming.\"},{name:\"none\",description:\"Touches that begin on the element must not trigger default touch behaviors.\"},{name:\"pan-x\",description:\"The user agent may consider touches that begin on the element only for the purposes of horizontally scrolling the element\\u2019s nearest ancestor with horizontally scrollable content.\"},{name:\"pan-y\",description:\"The user agent may consider touches that begin on the element only for the purposes of vertically scrolling the element\\u2019s nearest ancestor with vertically scrollable content.\"},{name:\"pinch-zoom\"}],syntax:\"auto | none | [ [ pan-x | pan-left | pan-right ] || [ pan-y | pan-up | pan-down ] || pinch-zoom ] | manipulation\",relevance:67,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/touch-action\"}],description:\"Determines whether touch input may trigger default behavior supplied by user agent.\",restrictions:[\"enum\"]},{name:\"transform\",values:[{name:\"matrix()\",description:\"Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]\"},{name:\"matrix3d()\",description:\"Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order.\"},{name:\"none\"},{name:\"perspective()\",description:\"Specifies a perspective projection matrix.\"},{name:\"rotate()\",description:\"Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property.\"},{name:\"rotate3d()\",description:\"Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters.\"},{name:\"rotateX('angle')\",description:\"Specifies a clockwise rotation by the given angle about the X axis.\"},{name:\"rotateY('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Y axis.\"},{name:\"rotateZ('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Z axis.\"},{name:\"scale()\",description:\"Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first.\"},{name:\"scale3d()\",description:\"Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters.\"},{name:\"scaleX()\",description:\"Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter.\"},{name:\"scaleY()\",description:\"Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter.\"},{name:\"scaleZ()\",description:\"Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter.\"},{name:\"skew()\",description:\"Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis).\"},{name:\"skewX()\",description:\"Specifies a skew transformation along the X axis by the given angle.\"},{name:\"skewY()\",description:\"Specifies a skew transformation along the Y axis by the given angle.\"},{name:\"translate()\",description:\"Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter.\"},{name:\"translate3d()\",description:\"Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively.\"},{name:\"translateX()\",description:\"Specifies a translation by the given amount in the X direction.\"},{name:\"translateY()\",description:\"Specifies a translation by the given amount in the Y direction.\"},{name:\"translateZ()\",description:\"Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0.\"}],syntax:\"none | <transform-list>\",relevance:90,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/transform\"}],description:\"A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.\",restrictions:[\"enum\"]},{name:\"transform-origin\",syntax:\"[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?\",relevance:77,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/transform-origin\"}],description:\"Establishes the origin of transformation for an element.\",restrictions:[\"position\",\"length\",\"percentage\"]},{name:\"transform-style\",browsers:[\"E12\",\"FF16\",\"S9\",\"C36\",\"O23\"],values:[{name:\"flat\",description:\"All children of this element are rendered flattened into the 2D plane of the element.\"},{name:\"preserve-3d\",browsers:[\"E12\",\"FF16\",\"S9\",\"C36\",\"O23\"],description:\"Flattening is not performed, so children maintain their position in 3D space.\"}],syntax:\"flat | preserve-3d\",relevance:55,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/transform-style\"}],description:\"Defines how nested elements are rendered in 3D space.\",restrictions:[\"enum\"]},{name:\"transition\",values:[{name:\"all\",description:\"Every property that is able to undergo a transition will do so.\"},{name:\"none\",description:\"No property will transition.\"}],syntax:\"<single-transition>#\",relevance:88,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/transition\"}],description:\"Shorthand property combines four of the transition properties into a single property.\",restrictions:[\"time\",\"property\",\"timing-function\",\"enum\"]},{name:\"transition-delay\",syntax:\"<time>#\",relevance:64,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/transition-delay\"}],description:\"Defines when the transition will start. It allows a transition to begin execution some period of time from when it is applied.\",restrictions:[\"time\"]},{name:\"transition-duration\",syntax:\"<time>#\",relevance:64,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/transition-duration\"}],description:\"Specifies how long the transition from the old value to the new value should take.\",restrictions:[\"time\"]},{name:\"transition-property\",values:[{name:\"all\",description:\"Every property that is able to undergo a transition will do so.\"},{name:\"none\",description:\"No property will transition.\"}],syntax:\"none | <single-transition-property>#\",relevance:64,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/transition-property\"}],description:\"Specifies the name of the CSS property to which the transition is applied.\",restrictions:[\"property\"]},{name:\"transition-timing-function\",syntax:\"<easing-function>#\",relevance:64,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/transition-timing-function\"}],description:\"Describes how the intermediate values used during a transition will be calculated.\",restrictions:[\"timing-function\"]},{name:\"unicode-bidi\",values:[{name:\"bidi-override\",description:\"Inside the element, reordering is strictly in sequence according to the 'direction' property; the implicit part of the bidirectional algorithm is ignored.\"},{name:\"embed\",description:\"If the element is inline-level, this value opens an additional level of embedding with respect to the bidirectional algorithm. The direction of this embedding level is given by the 'direction' property.\"},{name:\"isolate\",description:\"The contents of the element are considered to be inside a separate, independent paragraph.\"},{name:\"isolate-override\",description:\"This combines the isolation behavior of 'isolate' with the directional override behavior of 'bidi-override'\"},{name:\"normal\",description:\"The element does not open an additional level of embedding with respect to the bidirectional algorithm. For inline-level elements, implicit reordering works across element boundaries.\"},{name:\"plaintext\",description:\"For the purposes of the Unicode bidirectional algorithm, the base directionality of each bidi paragraph for which the element forms the containing block is determined not by the element's computed 'direction'.\"}],syntax:\"normal | embed | isolate | bidi-override | isolate-override | plaintext\",relevance:57,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/unicode-bidi\"}],description:\"The level of embedding with respect to the bidirectional algorithm.\",restrictions:[\"enum\"]},{name:\"unicode-range\",values:[{name:\"U+26\",description:\"Ampersand.\"},{name:\"U+20-24F, U+2B0-2FF, U+370-4FF, U+1E00-1EFF, U+2000-20CF, U+2100-23FF, U+2500-26FF, U+E000-F8FF, U+FB00\\u2013FB4F\",description:\"WGL4 character set (Pan-European).\"},{name:\"U+20-17F, U+2B0-2FF, U+2000-206F, U+20A0-20CF, U+2100-21FF, U+2600-26FF\",description:\"The Multilingual European Subset No. 1. Latin. Covers ~44 languages.\"},{name:\"U+20-2FF, U+370-4FF, U+1E00-20CF, U+2100-23FF, U+2500-26FF, U+FB00-FB4F, U+FFF0-FFFD\",description:\"The Multilingual European Subset No. 2. Latin, Greek, and Cyrillic. Covers ~128 language.\"},{name:\"U+20-4FF, U+530-58F, U+10D0-10FF, U+1E00-23FF, U+2440-245F, U+2500-26FF, U+FB00-FB4F, U+FE20-FE2F, U+FFF0-FFFD\",description:\"The Multilingual European Subset No. 3. Covers all characters belonging to European scripts.\"},{name:\"U+00-7F\",description:\"Basic Latin (ASCII).\"},{name:\"U+80-FF\",description:\"Latin-1 Supplement. Accented characters for Western European languages, common punctuation characters, multiplication and division signs.\"},{name:\"U+100-17F\",description:\"Latin Extended-A. Accented characters for for Czech, Dutch, Polish, and Turkish.\"},{name:\"U+180-24F\",description:\"Latin Extended-B. Croatian, Slovenian, Romanian, Non-European and historic latin, Khoisan, Pinyin, Livonian, Sinology.\"},{name:\"U+1E00-1EFF\",description:\"Latin Extended Additional. Vietnamese, German captial sharp s, Medievalist, Latin general use.\"},{name:\"U+250-2AF\",description:\"International Phonetic Alphabet Extensions.\"},{name:\"U+370-3FF\",description:\"Greek and Coptic.\"},{name:\"U+1F00-1FFF\",description:\"Greek Extended. Accented characters for polytonic Greek.\"},{name:\"U+400-4FF\",description:\"Cyrillic.\"},{name:\"U+500-52F\",description:\"Cyrillic Supplement. Extra letters for Komi, Khanty, Chukchi, Mordvin, Kurdish, Aleut, Chuvash, Abkhaz, Azerbaijani, and Orok.\"},{name:\"U+00-52F, U+1E00-1FFF, U+2200\\u201322FF\",description:\"Latin, Greek, Cyrillic, some punctuation and symbols.\"},{name:\"U+530\\u201358F\",description:\"Armenian.\"},{name:\"U+590\\u20135FF\",description:\"Hebrew.\"},{name:\"U+600\\u20136FF\",description:\"Arabic.\"},{name:\"U+750\\u201377F\",description:\"Arabic Supplement. Additional letters for African languages, Khowar, Torwali, Burushaski, and early Persian.\"},{name:\"U+8A0\\u20138FF\",description:\"Arabic Extended-A. Additional letters for African languages, European and Central Asian languages, Rohingya, Tamazight, Arwi, and Koranic annotation signs.\"},{name:\"U+700\\u201374F\",description:\"Syriac.\"},{name:\"U+900\\u201397F\",description:\"Devanagari.\"},{name:\"U+980\\u20139FF\",description:\"Bengali.\"},{name:\"U+A00\\u2013A7F\",description:\"Gurmukhi.\"},{name:\"U+A80\\u2013AFF\",description:\"Gujarati.\"},{name:\"U+B00\\u2013B7F\",description:\"Oriya.\"},{name:\"U+B80\\u2013BFF\",description:\"Tamil.\"},{name:\"U+C00\\u2013C7F\",description:\"Telugu.\"},{name:\"U+C80\\u2013CFF\",description:\"Kannada.\"},{name:\"U+D00\\u2013D7F\",description:\"Malayalam.\"},{name:\"U+D80\\u2013DFF\",description:\"Sinhala.\"},{name:\"U+118A0\\u2013118FF\",description:\"Warang Citi.\"},{name:\"U+E00\\u2013E7F\",description:\"Thai.\"},{name:\"U+1A20\\u20131AAF\",description:\"Tai Tham.\"},{name:\"U+AA80\\u2013AADF\",description:\"Tai Viet.\"},{name:\"U+E80\\u2013EFF\",description:\"Lao.\"},{name:\"U+F00\\u2013FFF\",description:\"Tibetan.\"},{name:\"U+1000\\u2013109F\",description:\"Myanmar (Burmese).\"},{name:\"U+10A0\\u201310FF\",description:\"Georgian.\"},{name:\"U+1200\\u2013137F\",description:\"Ethiopic.\"},{name:\"U+1380\\u2013139F\",description:\"Ethiopic Supplement. Extra Syllables for Sebatbeit, and Tonal marks\"},{name:\"U+2D80\\u20132DDF\",description:\"Ethiopic Extended. Extra Syllables for Me'en, Blin, and Sebatbeit.\"},{name:\"U+AB00\\u2013AB2F\",description:\"Ethiopic Extended-A. Extra characters for Gamo-Gofa-Dawro, Basketo, and Gumuz.\"},{name:\"U+1780\\u201317FF\",description:\"Khmer.\"},{name:\"U+1800\\u201318AF\",description:\"Mongolian.\"},{name:\"U+1B80\\u20131BBF\",description:\"Sundanese.\"},{name:\"U+1CC0\\u20131CCF\",description:\"Sundanese Supplement. Punctuation.\"},{name:\"U+4E00\\u20139FD5\",description:\"CJK (Chinese, Japanese, Korean) Unified Ideographs. Most common ideographs for modern Chinese and Japanese.\"},{name:\"U+3400\\u20134DB5\",description:\"CJK Unified Ideographs Extension A. Rare ideographs.\"},{name:\"U+2F00\\u20132FDF\",description:\"Kangxi Radicals.\"},{name:\"U+2E80\\u20132EFF\",description:\"CJK Radicals Supplement. Alternative forms of Kangxi Radicals.\"},{name:\"U+1100\\u201311FF\",description:\"Hangul Jamo.\"},{name:\"U+AC00\\u2013D7AF\",description:\"Hangul Syllables.\"},{name:\"U+3040\\u2013309F\",description:\"Hiragana.\"},{name:\"U+30A0\\u201330FF\",description:\"Katakana.\"},{name:\"U+A5, U+4E00-9FFF, U+30??, U+FF00-FF9F\",description:\"Japanese Kanji, Hiragana and Katakana characters plus Yen/Yuan symbol.\"},{name:\"U+A4D0\\u2013A4FF\",description:\"Lisu.\"},{name:\"U+A000\\u2013A48F\",description:\"Yi Syllables.\"},{name:\"U+A490\\u2013A4CF\",description:\"Yi Radicals.\"},{name:\"U+2000-206F\",description:\"General Punctuation.\"},{name:\"U+3000\\u2013303F\",description:\"CJK Symbols and Punctuation.\"},{name:\"U+2070\\u2013209F\",description:\"Superscripts and Subscripts.\"},{name:\"U+20A0\\u201320CF\",description:\"Currency Symbols.\"},{name:\"U+2100\\u2013214F\",description:\"Letterlike Symbols.\"},{name:\"U+2150\\u2013218F\",description:\"Number Forms.\"},{name:\"U+2190\\u201321FF\",description:\"Arrows.\"},{name:\"U+2200\\u201322FF\",description:\"Mathematical Operators.\"},{name:\"U+2300\\u201323FF\",description:\"Miscellaneous Technical.\"},{name:\"U+E000-F8FF\",description:\"Private Use Area.\"},{name:\"U+FB00\\u2013FB4F\",description:\"Alphabetic Presentation Forms. Ligatures for latin, Armenian, and Hebrew.\"},{name:\"U+FB50\\u2013FDFF\",description:\"Arabic Presentation Forms-A. Contextual forms / ligatures for Persian, Urdu, Sindhi, Central Asian languages, etc, Arabic pedagogical symbols, word ligatures.\"},{name:\"U+1F600\\u20131F64F\",description:\"Emoji: Emoticons.\"},{name:\"U+2600\\u201326FF\",description:\"Emoji: Miscellaneous Symbols.\"},{name:\"U+1F300\\u20131F5FF\",description:\"Emoji: Miscellaneous Symbols and Pictographs.\"},{name:\"U+1F900\\u20131F9FF\",description:\"Emoji: Supplemental Symbols and Pictographs.\"},{name:\"U+1F680\\u20131F6FF\",description:\"Emoji: Transport and Map Symbols.\"}],syntax:\"<unicode-range>#\",relevance:73,description:\"@font-face descriptor. Defines the set of Unicode codepoints that may be supported by the font face for which it is declared.\",restrictions:[\"unicode-range\"]},{name:\"user-select\",values:[{name:\"all\",description:\"The content of the element must be selected atomically\"},{name:\"auto\"},{name:\"contain\",description:\"UAs must not allow a selection which is started in this element to be extended outside of this element.\"},{name:\"none\",description:\"The UA must not allow selections to be started in this element.\"},{name:\"text\",description:\"The element imposes no constraint on the selection.\"}],syntax:\"auto | text | none | contain | all\",relevance:78,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/user-select\"}],description:\"Controls the appearance of selection.\",restrictions:[\"enum\"]},{name:\"vertical-align\",values:[{name:\"auto\",description:\"Align the dominant baseline of the parent box with the equivalent, or heuristically reconstructed, baseline of the element inline box.\"},{name:\"baseline\",description:\"Align the 'alphabetic' baseline of the element with the 'alphabetic' baseline of the parent element.\"},{name:\"bottom\",description:\"Align the after edge of the extended inline box with the after-edge of the line box.\"},{name:\"middle\",description:\"Align the 'middle' baseline of the inline element with the middle baseline of the parent.\"},{name:\"sub\",description:\"Lower the baseline of the box to the proper position for subscripts of the parent's box. (This value has no effect on the font size of the element's text.)\"},{name:\"super\",description:\"Raise the baseline of the box to the proper position for superscripts of the parent's box. (This value has no effect on the font size of the element's text.)\"},{name:\"text-bottom\",description:\"Align the bottom of the box with the after-edge of the parent element's font.\"},{name:\"text-top\",description:\"Align the top of the box with the before-edge of the parent element's font.\"},{name:\"top\",description:\"Align the before edge of the extended inline box with the before-edge of the line box.\"},{name:\"-webkit-baseline-middle\"}],syntax:\"baseline | sub | super | text-top | text-bottom | middle | top | bottom | <percentage> | <length>\",relevance:92,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/vertical-align\"}],description:\"Affects the vertical positioning of the inline boxes generated by an inline-level element inside a line box.\",restrictions:[\"percentage\",\"length\"]},{name:\"visibility\",values:[{name:\"collapse\",description:\"Table-specific. If used on elements other than rows, row groups, columns, or column groups, 'collapse' has the same meaning as 'hidden'.\"},{name:\"hidden\",description:\"The generated box is invisible (fully transparent, nothing is drawn), but still affects layout.\"},{name:\"visible\",description:\"The generated box is visible.\"}],syntax:\"visible | hidden | collapse\",relevance:88,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/visibility\"}],description:\"Specifies whether the boxes generated by an element are rendered. Invisible boxes still affect layout (set the \\u2018display\\u2019 property to \\u2018none\\u2019 to suppress box generation altogether).\",restrictions:[\"enum\"]},{name:\"-webkit-animation\",browsers:[\"C\",\"S5\"],values:[{name:\"alternate\",description:\"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction.\"},{name:\"alternate-reverse\",description:\"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction.\"},{name:\"backwards\",description:\"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'.\"},{name:\"both\",description:\"Both forwards and backwards fill modes are applied.\"},{name:\"forwards\",description:\"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes.\"},{name:\"infinite\",description:\"Causes the animation to repeat forever.\"},{name:\"none\",description:\"No animation is performed\"},{name:\"normal\",description:\"Normal playback.\"},{name:\"reverse\",description:\"All iterations of the animation are played in the reverse direction from the way they were specified.\"}],relevance:50,description:\"Shorthand property combines six of the animation properties into a single property.\",restrictions:[\"time\",\"enum\",\"timing-function\",\"identifier\",\"number\"]},{name:\"-webkit-animation-delay\",browsers:[\"C\",\"S5\"],relevance:50,description:\"Defines when the animation will start.\",restrictions:[\"time\"]},{name:\"-webkit-animation-direction\",browsers:[\"C\",\"S5\"],values:[{name:\"alternate\",description:\"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction.\"},{name:\"alternate-reverse\",description:\"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction.\"},{name:\"normal\",description:\"Normal playback.\"},{name:\"reverse\",description:\"All iterations of the animation are played in the reverse direction from the way they were specified.\"}],relevance:50,description:\"Defines whether or not the animation should play in reverse on alternate cycles.\",restrictions:[\"enum\"]},{name:\"-webkit-animation-duration\",browsers:[\"C\",\"S5\"],relevance:50,description:\"Defines the length of time that an animation takes to complete one cycle.\",restrictions:[\"time\"]},{name:\"-webkit-animation-fill-mode\",browsers:[\"C\",\"S5\"],values:[{name:\"backwards\",description:\"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'.\"},{name:\"both\",description:\"Both forwards and backwards fill modes are applied.\"},{name:\"forwards\",description:\"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes.\"},{name:\"none\",description:\"There is no change to the property value between the time the animation is applied and the time the animation begins playing or after the animation completes.\"}],relevance:50,description:\"Defines what values are applied by the animation outside the time it is executing.\",restrictions:[\"enum\"]},{name:\"-webkit-animation-iteration-count\",browsers:[\"C\",\"S5\"],values:[{name:\"infinite\",description:\"Causes the animation to repeat forever.\"}],relevance:50,description:\"Defines the number of times an animation cycle is played. The default value is one, meaning the animation will play from beginning to end once.\",restrictions:[\"number\",\"enum\"]},{name:\"-webkit-animation-name\",browsers:[\"C\",\"S5\"],values:[{name:\"none\",description:\"No animation is performed\"}],relevance:50,description:\"Defines a list of animations that apply. Each name is used to select the keyframe at-rule that provides the property values for the animation.\",restrictions:[\"identifier\",\"enum\"]},{name:\"-webkit-animation-play-state\",browsers:[\"C\",\"S5\"],values:[{name:\"paused\",description:\"A running animation will be paused.\"},{name:\"running\",description:\"Resume playback of a paused animation.\"}],relevance:50,description:\"Defines whether the animation is running or paused.\",restrictions:[\"enum\"]},{name:\"-webkit-animation-timing-function\",browsers:[\"C\",\"S5\"],relevance:50,description:\"Describes how the animation will progress over one cycle of its duration. See the 'transition-timing-function'.\",restrictions:[\"timing-function\"]},{name:\"-webkit-appearance\",browsers:[\"C\",\"S3\"],values:[{name:\"button\"},{name:\"button-bevel\"},{name:\"caps-lock-indicator\"},{name:\"caret\"},{name:\"checkbox\"},{name:\"default-button\"},{name:\"listbox\"},{name:\"listitem\"},{name:\"media-fullscreen-button\"},{name:\"media-mute-button\"},{name:\"media-play-button\"},{name:\"media-seek-back-button\"},{name:\"media-seek-forward-button\"},{name:\"media-slider\"},{name:\"media-sliderthumb\"},{name:\"menulist\"},{name:\"menulist-button\"},{name:\"menulist-text\"},{name:\"menulist-textfield\"},{name:\"none\"},{name:\"push-button\"},{name:\"radio\"},{name:\"scrollbarbutton-down\"},{name:\"scrollbarbutton-left\"},{name:\"scrollbarbutton-right\"},{name:\"scrollbarbutton-up\"},{name:\"scrollbargripper-horizontal\"},{name:\"scrollbargripper-vertical\"},{name:\"scrollbarthumb-horizontal\"},{name:\"scrollbarthumb-vertical\"},{name:\"scrollbartrack-horizontal\"},{name:\"scrollbartrack-vertical\"},{name:\"searchfield\"},{name:\"searchfield-cancel-button\"},{name:\"searchfield-decoration\"},{name:\"searchfield-results-button\"},{name:\"searchfield-results-decoration\"},{name:\"slider-horizontal\"},{name:\"sliderthumb-horizontal\"},{name:\"sliderthumb-vertical\"},{name:\"slider-vertical\"},{name:\"square-button\"},{name:\"textarea\"},{name:\"textfield\"}],status:\"nonstandard\",syntax:\"none | button | button-bevel | caret | checkbox | default-button | inner-spin-button | listbox | listitem | media-controls-background | media-controls-fullscreen-background | media-current-time-display | media-enter-fullscreen-button | media-exit-fullscreen-button | media-fullscreen-button | media-mute-button | media-overlay-play-button | media-play-button | media-seek-back-button | media-seek-forward-button | media-slider | media-sliderthumb | media-time-remaining-display | media-toggle-closed-captions-button | media-volume-slider | media-volume-slider-container | media-volume-sliderthumb | menulist | menulist-button | menulist-text | menulist-textfield | meter | progress-bar | progress-bar-value | push-button | radio | searchfield | searchfield-cancel-button | searchfield-decoration | searchfield-results-button | searchfield-results-decoration | slider-horizontal | slider-vertical | sliderthumb-horizontal | sliderthumb-vertical | square-button | textarea | textfield | -apple-pay-button\",relevance:0,description:\"Changes the appearance of buttons and other controls to resemble native controls.\",restrictions:[\"enum\"]},{name:\"-webkit-backdrop-filter\",browsers:[\"S9\"],values:[{name:\"none\",description:\"No filter effects are applied.\"},{name:\"blur()\",description:\"Applies a Gaussian blur to the input image.\"},{name:\"brightness()\",description:\"Applies a linear multiplier to input image, making it appear more or less bright.\"},{name:\"contrast()\",description:\"Adjusts the contrast of the input.\"},{name:\"drop-shadow()\",description:\"Applies a drop shadow effect to the input image.\"},{name:\"grayscale()\",description:\"Converts the input image to grayscale.\"},{name:\"hue-rotate()\",description:\"Applies a hue rotation on the input image. \"},{name:\"invert()\",description:\"Inverts the samples in the input image.\"},{name:\"opacity()\",description:\"Applies transparency to the samples in the input image.\"},{name:\"saturate()\",description:\"Saturates the input image.\"},{name:\"sepia()\",description:\"Converts the input image to sepia.\"},{name:\"url()\",description:\"A filter reference to a <filter> element.\"}],relevance:50,description:\"Applies a filter effect where the first filter in the list takes the element's background image as the input image.\",restrictions:[\"enum\",\"url\"]},{name:\"-webkit-backface-visibility\",browsers:[\"C\",\"S5\"],values:[{name:\"hidden\"},{name:\"visible\"}],relevance:50,description:\"Determines whether or not the 'back' side of a transformed element is visible when facing the viewer. With an identity transform, the front side of an element faces the viewer.\",restrictions:[\"enum\"]},{name:\"-webkit-background-clip\",browsers:[\"C\",\"S3\"],relevance:50,description:\"Determines the background painting area.\",restrictions:[\"box\"]},{name:\"-webkit-background-composite\",browsers:[\"C\",\"S3\"],values:[{name:\"border\"},{name:\"padding\"}],relevance:50,restrictions:[\"enum\"]},{name:\"-webkit-background-origin\",browsers:[\"C\",\"S3\"],relevance:50,description:\"For elements rendered as a single box, specifies the background positioning area. For elements rendered as multiple boxes (e.g., inline boxes on several lines, boxes on several pages) specifies which boxes 'box-decoration-break' operates on to determine the background positioning area(s).\",restrictions:[\"box\"]},{name:\"-webkit-border-image\",browsers:[\"C\",\"S5\"],values:[{name:\"auto\",description:\"If 'auto' is specified then the border image width is the intrinsic width or height (whichever is applicable) of the corresponding image slice. If the image does not have the required intrinsic dimension then the corresponding border-width is used instead.\"},{name:\"fill\",description:\"Causes the middle part of the border-image to be preserved.\"},{name:\"none\"},{name:\"repeat\",description:\"The image is tiled (repeated) to fill the area.\"},{name:\"round\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the image is rescaled so that it does.\"},{name:\"space\",description:\"The image is tiled (repeated) to fill the area. If it does not fill the area with a whole number of tiles, the extra space is distributed around the tiles.\"},{name:\"stretch\",description:\"The image is stretched to fill the area.\"},{name:\"url()\"}],relevance:50,description:\"Shorthand property for setting 'border-image-source', 'border-image-slice', 'border-image-width', 'border-image-outset' and 'border-image-repeat'. Omitted values are set to their initial values.\",restrictions:[\"length\",\"percentage\",\"number\",\"url\",\"enum\"]},{name:\"-webkit-box-align\",browsers:[\"C\",\"S3\"],values:[{name:\"baseline\",description:\"If this box orientation is inline-axis or horizontal, all children are placed with their baselines aligned, and extra space placed before or after as necessary. For block flows, the baseline of the first non-empty line box located within the element is used. For tables, the baseline of the first cell is used.\"},{name:\"center\",description:\"Any extra space is divided evenly, with half placed above the child and the other half placed after the child.\"},{name:\"end\",description:\"For normal direction boxes, the bottom edge of each child is placed along the bottom of the box. Extra space is placed above the element. For reverse direction boxes, the top edge of each child is placed along the top of the box. Extra space is placed below the element.\"},{name:\"start\",description:\"For normal direction boxes, the top edge of each child is placed along the top of the box. Extra space is placed below the element. For reverse direction boxes, the bottom edge of each child is placed along the bottom of the box. Extra space is placed above the element.\"},{name:\"stretch\",description:\"The height of each child is adjusted to that of the containing block.\"}],relevance:50,description:\"Specifies the alignment of nested elements within an outer flexible box element.\",restrictions:[\"enum\"]},{name:\"-webkit-box-direction\",browsers:[\"C\",\"S3\"],values:[{name:\"normal\",description:\"A box with a computed value of horizontal for box-orient displays its children from left to right. A box with a computed value of vertical displays its children from top to bottom.\"},{name:\"reverse\",description:\"A box with a computed value of horizontal for box-orient displays its children from right to left. A box with a computed value of vertical displays its children from bottom to top.\"}],relevance:50,description:\"In webkit applications, -webkit-box-direction specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\",restrictions:[\"enum\"]},{name:\"-webkit-box-flex\",browsers:[\"C\",\"S3\"],relevance:50,description:\"Specifies an element's flexibility.\",restrictions:[\"number\"]},{name:\"-webkit-box-flex-group\",browsers:[\"C\",\"S3\"],relevance:50,description:\"Flexible elements can be assigned to flex groups using the 'box-flex-group' property.\",restrictions:[\"integer\"]},{name:\"-webkit-box-ordinal-group\",browsers:[\"C\",\"S3\"],relevance:50,description:\"Indicates the ordinal group the element belongs to. Elements with a lower ordinal group are displayed before those with a higher ordinal group.\",restrictions:[\"integer\"]},{name:\"-webkit-box-orient\",browsers:[\"C\",\"S3\"],values:[{name:\"block-axis\",description:\"Elements are oriented along the box's axis.\"},{name:\"horizontal\",description:\"The box displays its children from left to right in a horizontal line.\"},{name:\"inline-axis\",description:\"Elements are oriented vertically.\"},{name:\"vertical\",description:\"The box displays its children from stacked from top to bottom vertically.\"}],relevance:50,description:\"In webkit applications, -webkit-box-orient specifies whether a box lays out its contents horizontally or vertically.\",restrictions:[\"enum\"]},{name:\"-webkit-box-pack\",browsers:[\"C\",\"S3\"],values:[{name:\"center\",description:\"The extra space is divided evenly, with half placed before the first child and the other half placed after the last child.\"},{name:\"end\",description:\"For normal direction boxes, the right edge of the last child is placed at the right side, with all extra space placed before the first child. For reverse direction boxes, the left edge of the first child is placed at the left side, with all extra space placed after the last child.\"},{name:\"justify\",description:\"The space is divided evenly in-between each child, with none of the extra space placed before the first child or after the last child. If there is only one child, treat the pack value as if it were start.\"},{name:\"start\",description:\"For normal direction boxes, the left edge of the first child is placed at the left side, with all extra space placed after the last child. For reverse direction boxes, the right edge of the last child is placed at the right side, with all extra space placed before the first child.\"}],relevance:50,description:\"Specifies alignment of child elements within the current element in the direction of orientation.\",restrictions:[\"enum\"]},{name:\"-webkit-box-reflect\",browsers:[\"E79\",\"S4\",\"C4\",\"O15\"],values:[{name:\"above\",description:\"The reflection appears above the border box.\"},{name:\"below\",description:\"The reflection appears below the border box.\"},{name:\"left\",description:\"The reflection appears to the left of the border box.\"},{name:\"right\",description:\"The reflection appears to the right of the border box.\"}],status:\"nonstandard\",syntax:\"[ above | below | right | left ]? <length>? <image>?\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-box-reflect\"}],description:\"Defines a reflection of a border box.\"},{name:\"-webkit-box-sizing\",browsers:[\"C\",\"S3\"],values:[{name:\"border-box\",description:\"The specified width and height (and respective min/max properties) on this element determine the border box of the element.\"},{name:\"content-box\",description:\"Behavior of width and height as specified by CSS2.1. The specified width and height (and respective min/max properties) apply to the width and height respectively of the content box of the element.\"}],relevance:50,description:\"Box Model addition in CSS3.\",restrictions:[\"enum\"]},{name:\"-webkit-break-after\",browsers:[\"S7\"],values:[{name:\"always\",description:\"Always force a page break before/after the generated box.\"},{name:\"auto\",description:\"Neither force nor forbid a page/column break before/after the generated box.\"},{name:\"avoid\",description:\"Avoid a page/column break before/after the generated box.\"},{name:\"avoid-column\",description:\"Avoid a column break before/after the generated box.\"},{name:\"avoid-page\",description:\"Avoid a page break before/after the generated box.\"},{name:\"avoid-region\"},{name:\"column\",description:\"Always force a column break before/after the generated box.\"},{name:\"left\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a left page.\"},{name:\"page\",description:\"Always force a page break before/after the generated box.\"},{name:\"region\"},{name:\"right\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a right page.\"}],relevance:50,description:\"Describes the page/column break behavior before the generated box.\",restrictions:[\"enum\"]},{name:\"-webkit-break-before\",browsers:[\"S7\"],values:[{name:\"always\",description:\"Always force a page break before/after the generated box.\"},{name:\"auto\",description:\"Neither force nor forbid a page/column break before/after the generated box.\"},{name:\"avoid\",description:\"Avoid a page/column break before/after the generated box.\"},{name:\"avoid-column\",description:\"Avoid a column break before/after the generated box.\"},{name:\"avoid-page\",description:\"Avoid a page break before/after the generated box.\"},{name:\"avoid-region\"},{name:\"column\",description:\"Always force a column break before/after the generated box.\"},{name:\"left\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a left page.\"},{name:\"page\",description:\"Always force a page break before/after the generated box.\"},{name:\"region\"},{name:\"right\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a right page.\"}],relevance:50,description:\"Describes the page/column break behavior before the generated box.\",restrictions:[\"enum\"]},{name:\"-webkit-break-inside\",browsers:[\"S7\"],values:[{name:\"auto\",description:\"Neither force nor forbid a page/column break inside the generated box.\"},{name:\"avoid\",description:\"Avoid a page/column break inside the generated box.\"},{name:\"avoid-column\",description:\"Avoid a column break inside the generated box.\"},{name:\"avoid-page\",description:\"Avoid a page break inside the generated box.\"},{name:\"avoid-region\"}],relevance:50,description:\"Describes the page/column break behavior inside the generated box.\",restrictions:[\"enum\"]},{name:\"-webkit-column-break-after\",browsers:[\"C\",\"S3\"],values:[{name:\"always\",description:\"Always force a page break before/after the generated box.\"},{name:\"auto\",description:\"Neither force nor forbid a page/column break before/after the generated box.\"},{name:\"avoid\",description:\"Avoid a page/column break before/after the generated box.\"},{name:\"avoid-column\",description:\"Avoid a column break before/after the generated box.\"},{name:\"avoid-page\",description:\"Avoid a page break before/after the generated box.\"},{name:\"avoid-region\"},{name:\"column\",description:\"Always force a column break before/after the generated box.\"},{name:\"left\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a left page.\"},{name:\"page\",description:\"Always force a page break before/after the generated box.\"},{name:\"region\"},{name:\"right\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a right page.\"}],relevance:50,description:\"Describes the page/column break behavior before the generated box.\",restrictions:[\"enum\"]},{name:\"-webkit-column-break-before\",browsers:[\"C\",\"S3\"],values:[{name:\"always\",description:\"Always force a page break before/after the generated box.\"},{name:\"auto\",description:\"Neither force nor forbid a page/column break before/after the generated box.\"},{name:\"avoid\",description:\"Avoid a page/column break before/after the generated box.\"},{name:\"avoid-column\",description:\"Avoid a column break before/after the generated box.\"},{name:\"avoid-page\",description:\"Avoid a page break before/after the generated box.\"},{name:\"avoid-region\"},{name:\"column\",description:\"Always force a column break before/after the generated box.\"},{name:\"left\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a left page.\"},{name:\"page\",description:\"Always force a page break before/after the generated box.\"},{name:\"region\"},{name:\"right\",description:\"Force one or two page breaks before/after the generated box so that the next page is formatted as a right page.\"}],relevance:50,description:\"Describes the page/column break behavior before the generated box.\",restrictions:[\"enum\"]},{name:\"-webkit-column-break-inside\",browsers:[\"C\",\"S3\"],values:[{name:\"auto\",description:\"Neither force nor forbid a page/column break inside the generated box.\"},{name:\"avoid\",description:\"Avoid a page/column break inside the generated box.\"},{name:\"avoid-column\",description:\"Avoid a column break inside the generated box.\"},{name:\"avoid-page\",description:\"Avoid a page break inside the generated box.\"},{name:\"avoid-region\"}],relevance:50,description:\"Describes the page/column break behavior inside the generated box.\",restrictions:[\"enum\"]},{name:\"-webkit-column-count\",browsers:[\"C\",\"S3\"],values:[{name:\"auto\",description:\"Determines the number of columns by the 'column-width' property and the element width.\"}],relevance:50,description:\"Describes the optimal number of columns into which the content of the element will be flowed.\",restrictions:[\"integer\"]},{name:\"-webkit-column-gap\",browsers:[\"C\",\"S3\"],values:[{name:\"normal\",description:\"User agent specific and typically equivalent to 1em.\"}],relevance:50,description:\"Sets the gap between columns. If there is a column rule between columns, it will appear in the middle of the gap.\",restrictions:[\"length\"]},{name:\"-webkit-column-rule\",browsers:[\"C\",\"S3\"],relevance:50,description:\"This property is a shorthand for setting 'column-rule-width', 'column-rule-style', and 'column-rule-color' at the same place in the style sheet. Omitted values are set to their initial values.\",restrictions:[\"length\",\"line-width\",\"line-style\",\"color\"]},{name:\"-webkit-column-rule-color\",browsers:[\"C\",\"S3\"],relevance:50,description:\"Sets the color of the column rule\",restrictions:[\"color\"]},{name:\"-webkit-column-rule-style\",browsers:[\"C\",\"S3\"],relevance:50,description:\"Sets the style of the rule between columns of an element.\",restrictions:[\"line-style\"]},{name:\"-webkit-column-rule-width\",browsers:[\"C\",\"S3\"],relevance:50,description:\"Sets the width of the rule between columns. Negative values are not allowed.\",restrictions:[\"length\",\"line-width\"]},{name:\"-webkit-columns\",browsers:[\"C\",\"S3\"],values:[{name:\"auto\",description:\"The width depends on the values of other properties.\"}],relevance:50,description:\"A shorthand property which sets both 'column-width' and 'column-count'.\",restrictions:[\"length\",\"integer\"]},{name:\"-webkit-column-span\",browsers:[\"C\",\"S3\"],values:[{name:\"all\",description:\"The element spans across all columns. Content in the normal flow that appears before the element is automatically balanced across all columns before the element appear.\"},{name:\"none\",description:\"The element does not span multiple columns.\"}],relevance:50,description:\"Describes the page/column break behavior after the generated box.\",restrictions:[\"enum\"]},{name:\"-webkit-column-width\",browsers:[\"C\",\"S3\"],values:[{name:\"auto\",description:\"The width depends on the values of other properties.\"}],relevance:50,description:\"This property describes the width of columns in multicol elements.\",restrictions:[\"length\"]},{name:\"-webkit-filter\",browsers:[\"C18\",\"O15\",\"S6\"],values:[{name:\"none\",description:\"No filter effects are applied.\"},{name:\"blur()\",description:\"Applies a Gaussian blur to the input image.\"},{name:\"brightness()\",description:\"Applies a linear multiplier to input image, making it appear more or less bright.\"},{name:\"contrast()\",description:\"Adjusts the contrast of the input.\"},{name:\"drop-shadow()\",description:\"Applies a drop shadow effect to the input image.\"},{name:\"grayscale()\",description:\"Converts the input image to grayscale.\"},{name:\"hue-rotate()\",description:\"Applies a hue rotation on the input image. \"},{name:\"invert()\",description:\"Inverts the samples in the input image.\"},{name:\"opacity()\",description:\"Applies transparency to the samples in the input image.\"},{name:\"saturate()\",description:\"Saturates the input image.\"},{name:\"sepia()\",description:\"Converts the input image to sepia.\"},{name:\"url()\",description:\"A filter reference to a <filter> element.\"}],relevance:50,description:\"Processes an element\\u2019s rendering before it is displayed in the document, by applying one or more filter effects.\",restrictions:[\"enum\",\"url\"]},{name:\"-webkit-flow-from\",browsers:[\"S6.1\"],values:[{name:\"none\",description:\"The block container is not a CSS Region.\"}],relevance:50,description:\"Makes a block container a region and associates it with a named flow.\",restrictions:[\"identifier\"]},{name:\"-webkit-flow-into\",browsers:[\"S6.1\"],values:[{name:\"none\",description:\"The element is not moved to a named flow and normal CSS processing takes place.\"}],relevance:50,description:\"Places an element or its contents into a named flow.\",restrictions:[\"identifier\"]},{name:\"-webkit-font-feature-settings\",browsers:[\"C16\"],values:[{name:'\"c2cs\"'},{name:'\"dlig\"'},{name:'\"kern\"'},{name:'\"liga\"'},{name:'\"lnum\"'},{name:'\"onum\"'},{name:'\"smcp\"'},{name:'\"swsh\"'},{name:'\"tnum\"'},{name:\"normal\",description:\"No change in glyph substitution or positioning occurs.\"},{name:\"off\"},{name:\"on\"}],relevance:50,description:\"This property provides low-level control over OpenType font features. It is intended as a way of providing access to font features that are not widely used but are needed for a particular use case.\",restrictions:[\"string\",\"integer\"]},{name:\"-webkit-hyphens\",browsers:[\"S5.1\"],values:[{name:\"auto\",description:\"Conditional hyphenation characters inside a word, if present, take priority over automatic resources when determining hyphenation points within the word.\"},{name:\"manual\",description:\"Words are only broken at line breaks where there are characters inside the word that suggest line break opportunities\"},{name:\"none\",description:\"Words are not broken at line breaks, even if characters inside the word suggest line break points.\"}],relevance:50,description:\"Controls whether hyphenation is allowed to create more break opportunities within a line of text.\",restrictions:[\"enum\"]},{name:\"-webkit-line-break\",browsers:[\"C\",\"S3\"],values:[{name:\"after-white-space\"},{name:\"normal\"}],relevance:50,description:\"Specifies line-breaking rules for CJK (Chinese, Japanese, and Korean) text.\"},{name:\"-webkit-margin-bottom-collapse\",browsers:[\"C\",\"S3\"],values:[{name:\"collapse\"},{name:\"discard\"},{name:\"separate\"}],relevance:50,restrictions:[\"enum\"]},{name:\"-webkit-margin-collapse\",browsers:[\"C\",\"S3\"],values:[{name:\"collapse\"},{name:\"discard\"},{name:\"separate\"}],relevance:50,restrictions:[\"enum\"]},{name:\"-webkit-margin-start\",browsers:[\"C\",\"S3\"],values:[{name:\"auto\"}],relevance:50,restrictions:[\"percentage\",\"length\"]},{name:\"-webkit-margin-top-collapse\",browsers:[\"C\",\"S3\"],values:[{name:\"collapse\"},{name:\"discard\"},{name:\"separate\"}],relevance:50,restrictions:[\"enum\"]},{name:\"-webkit-mask-clip\",browsers:[\"C\",\"O15\",\"S4\"],status:\"nonstandard\",syntax:\"[ <box> | border | padding | content | text ]#\",relevance:0,description:\"Determines the mask painting area, which determines the area that is affected by the mask.\",restrictions:[\"box\"]},{name:\"-webkit-mask-image\",browsers:[\"C\",\"O15\",\"S4\"],values:[{name:\"none\",description:\"Counts as a transparent black image layer.\"},{name:\"url()\",description:\"Reference to a <mask element or to a CSS image.\"}],status:\"nonstandard\",syntax:\"<mask-reference>#\",relevance:0,description:\"Sets the mask layer image of an element.\",restrictions:[\"url\",\"image\",\"enum\"]},{name:\"-webkit-mask-origin\",browsers:[\"C\",\"O15\",\"S4\"],status:\"nonstandard\",syntax:\"[ <box> | border | padding | content ]#\",relevance:0,description:\"Specifies the mask positioning area.\",restrictions:[\"box\"]},{name:\"-webkit-mask-repeat\",browsers:[\"C\",\"O15\",\"S4\"],status:\"nonstandard\",syntax:\"<repeat-style>#\",relevance:0,description:\"Specifies how mask layer images are tiled after they have been sized and positioned.\",restrictions:[\"repeat\"]},{name:\"-webkit-mask-size\",browsers:[\"C\",\"O15\",\"S4\"],values:[{name:\"auto\",description:\"Resolved by using the image\\u2019s intrinsic ratio and the size of the other dimension, or failing that, using the image\\u2019s intrinsic size, or failing that, treating it as 100%.\"},{name:\"contain\",description:\"Scale the image, while preserving its intrinsic aspect ratio (if any), to the largest size such that both its width and its height can fit inside the background positioning area.\"},{name:\"cover\",description:\"Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its width and its height can completely cover the background positioning area.\"}],status:\"nonstandard\",syntax:\"<bg-size>#\",relevance:0,description:\"Specifies the size of the mask layer images.\",restrictions:[\"length\",\"percentage\",\"enum\"]},{name:\"-webkit-nbsp-mode\",browsers:[\"C\",\"S3\"],values:[{name:\"normal\"},{name:\"space\"}],relevance:50,description:\"Defines the behavior of nonbreaking spaces within text.\"},{name:\"-webkit-overflow-scrolling\",browsers:[\"C\",\"S5\"],values:[{name:\"auto\"},{name:\"touch\"}],status:\"nonstandard\",syntax:\"auto | touch\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-overflow-scrolling\"}],description:\"Specifies whether to use native-style scrolling in an overflow:scroll element.\"},{name:\"-webkit-padding-start\",browsers:[\"C\",\"S3\"],relevance:50,restrictions:[\"percentage\",\"length\"]},{name:\"-webkit-perspective\",browsers:[\"C\",\"S4\"],values:[{name:\"none\",description:\"No perspective transform is applied.\"}],relevance:50,description:\"Applies the same transform as the perspective(<number>) transform function, except that it applies only to the positioned or transformed children of the element, not to the transform on the element itself.\",restrictions:[\"length\"]},{name:\"-webkit-perspective-origin\",browsers:[\"C\",\"S4\"],relevance:50,description:\"Establishes the origin for the perspective property. It effectively sets the X and Y position at which the viewer appears to be looking at the children of the element.\",restrictions:[\"position\",\"percentage\",\"length\"]},{name:\"-webkit-region-fragment\",browsers:[\"S7\"],values:[{name:\"auto\",description:\"Content flows as it would in a regular content box.\"},{name:\"break\",description:\"If the content fits within the CSS Region, then this property has no effect.\"}],relevance:50,description:\"The 'region-fragment' property controls the behavior of the last region associated with a named flow.\",restrictions:[\"enum\"]},{name:\"-webkit-tap-highlight-color\",browsers:[\"E12\",\"C16\",\"O15\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-tap-highlight-color\"}],restrictions:[\"color\"]},{name:\"-webkit-text-fill-color\",browsers:[\"E12\",\"FF49\",\"S3\",\"C1\",\"O15\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-text-fill-color\"}],restrictions:[\"color\"]},{name:\"-webkit-text-size-adjust\",browsers:[\"E\",\"C\",\"S3\"],values:[{name:\"auto\",description:\"Renderers must use the default size adjustment when displaying on a small device.\"},{name:\"none\",description:\"Renderers must not do size adjustment when displaying on a small device.\"}],relevance:50,description:\"Specifies a size adjustment for displaying text content in mobile browsers.\",restrictions:[\"percentage\"]},{name:\"-webkit-text-stroke\",browsers:[\"E15\",\"FF49\",\"S3\",\"C4\",\"O15\"],status:\"nonstandard\",syntax:\"<length> || <color>\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-text-stroke\"}],restrictions:[\"length\",\"line-width\",\"color\",\"percentage\"]},{name:\"-webkit-text-stroke-color\",browsers:[\"E15\",\"FF49\",\"S3\",\"C1\",\"O15\"],status:\"nonstandard\",syntax:\"<color>\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-text-stroke-color\"}],restrictions:[\"color\"]},{name:\"-webkit-text-stroke-width\",browsers:[\"E15\",\"FF49\",\"S3\",\"C1\",\"O15\"],status:\"nonstandard\",syntax:\"<length>\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-text-stroke-width\"}],restrictions:[\"length\",\"line-width\",\"percentage\"]},{name:\"-webkit-touch-callout\",browsers:[\"S3\"],values:[{name:\"none\"}],status:\"nonstandard\",syntax:\"default | none\",relevance:0,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-touch-callout\"}],restrictions:[\"enum\"]},{name:\"-webkit-transform\",browsers:[\"C\",\"O12\",\"S3.1\"],values:[{name:\"matrix()\",description:\"Specifies a 2D transformation in the form of a transformation matrix of six values. matrix(a,b,c,d,e,f) is equivalent to applying the transformation matrix [a b c d e f]\"},{name:\"matrix3d()\",description:\"Specifies a 3D transformation as a 4x4 homogeneous matrix of 16 values in column-major order.\"},{name:\"none\"},{name:\"perspective()\",description:\"Specifies a perspective projection matrix.\"},{name:\"rotate()\",description:\"Specifies a 2D rotation by the angle specified in the parameter about the origin of the element, as defined by the transform-origin property.\"},{name:\"rotate3d()\",description:\"Specifies a clockwise 3D rotation by the angle specified in last parameter about the [x,y,z] direction vector described by the first 3 parameters.\"},{name:\"rotateX('angle')\",description:\"Specifies a clockwise rotation by the given angle about the X axis.\"},{name:\"rotateY('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Y axis.\"},{name:\"rotateZ('angle')\",description:\"Specifies a clockwise rotation by the given angle about the Z axis.\"},{name:\"scale()\",description:\"Specifies a 2D scale operation by the [sx,sy] scaling vector described by the 2 parameters. If the second parameter is not provided, it is takes a value equal to the first.\"},{name:\"scale3d()\",description:\"Specifies a 3D scale operation by the [sx,sy,sz] scaling vector described by the 3 parameters.\"},{name:\"scaleX()\",description:\"Specifies a scale operation using the [sx,1] scaling vector, where sx is given as the parameter.\"},{name:\"scaleY()\",description:\"Specifies a scale operation using the [sy,1] scaling vector, where sy is given as the parameter.\"},{name:\"scaleZ()\",description:\"Specifies a scale operation using the [1,1,sz] scaling vector, where sz is given as the parameter.\"},{name:\"skew()\",description:\"Specifies a skew transformation along the X and Y axes. The first angle parameter specifies the skew on the X axis. The second angle parameter specifies the skew on the Y axis. If the second parameter is not given then a value of 0 is used for the Y angle (ie: no skew on the Y axis).\"},{name:\"skewX()\",description:\"Specifies a skew transformation along the X axis by the given angle.\"},{name:\"skewY()\",description:\"Specifies a skew transformation along the Y axis by the given angle.\"},{name:\"translate()\",description:\"Specifies a 2D translation by the vector [tx, ty], where tx is the first translation-value parameter and ty is the optional second translation-value parameter.\"},{name:\"translate3d()\",description:\"Specifies a 3D translation by the vector [tx,ty,tz], with tx, ty and tz being the first, second and third translation-value parameters respectively.\"},{name:\"translateX()\",description:\"Specifies a translation by the given amount in the X direction.\"},{name:\"translateY()\",description:\"Specifies a translation by the given amount in the Y direction.\"},{name:\"translateZ()\",description:\"Specifies a translation by the given amount in the Z direction. Note that percentage values are not allowed in the translateZ translation-value, and if present are evaluated as 0.\"}],relevance:50,description:\"A two-dimensional transformation is applied to an element through the 'transform' property. This property contains a list of transform functions similar to those allowed by SVG.\",restrictions:[\"enum\"]},{name:\"-webkit-transform-origin\",browsers:[\"C\",\"O15\",\"S3.1\"],relevance:50,description:\"Establishes the origin of transformation for an element.\",restrictions:[\"position\",\"length\",\"percentage\"]},{name:\"-webkit-transform-origin-x\",browsers:[\"C\",\"S3.1\"],relevance:50,description:\"The x coordinate of the origin for transforms applied to an element with respect to its border box.\",restrictions:[\"length\",\"percentage\"]},{name:\"-webkit-transform-origin-y\",browsers:[\"C\",\"S3.1\"],relevance:50,description:\"The y coordinate of the origin for transforms applied to an element with respect to its border box.\",restrictions:[\"length\",\"percentage\"]},{name:\"-webkit-transform-origin-z\",browsers:[\"C\",\"S4\"],relevance:50,description:\"The z coordinate of the origin for transforms applied to an element with respect to its border box.\",restrictions:[\"length\",\"percentage\"]},{name:\"-webkit-transform-style\",browsers:[\"C\",\"S4\"],values:[{name:\"flat\",description:\"All children of this element are rendered flattened into the 2D plane of the element.\"}],relevance:50,description:\"Defines how nested elements are rendered in 3D space.\",restrictions:[\"enum\"]},{name:\"-webkit-transition\",browsers:[\"C\",\"O12\",\"S5\"],values:[{name:\"all\",description:\"Every property that is able to undergo a transition will do so.\"},{name:\"none\",description:\"No property will transition.\"}],relevance:50,description:\"Shorthand property combines four of the transition properties into a single property.\",restrictions:[\"time\",\"property\",\"timing-function\",\"enum\"]},{name:\"-webkit-transition-delay\",browsers:[\"C\",\"O12\",\"S5\"],relevance:50,description:\"Defines when the transition will start. It allows a transition to begin execution some period of time from when it is applied.\",restrictions:[\"time\"]},{name:\"-webkit-transition-duration\",browsers:[\"C\",\"O12\",\"S5\"],relevance:50,description:\"Specifies how long the transition from the old value to the new value should take.\",restrictions:[\"time\"]},{name:\"-webkit-transition-property\",browsers:[\"C\",\"O12\",\"S5\"],values:[{name:\"all\",description:\"Every property that is able to undergo a transition will do so.\"},{name:\"none\",description:\"No property will transition.\"}],relevance:50,description:\"Specifies the name of the CSS property to which the transition is applied.\",restrictions:[\"property\"]},{name:\"-webkit-transition-timing-function\",browsers:[\"C\",\"O12\",\"S5\"],relevance:50,description:\"Describes how the intermediate values used during a transition will be calculated.\",restrictions:[\"timing-function\"]},{name:\"-webkit-user-drag\",browsers:[\"S3\"],values:[{name:\"auto\"},{name:\"element\"},{name:\"none\"}],relevance:50,restrictions:[\"enum\"]},{name:\"-webkit-user-modify\",browsers:[\"C\",\"S3\"],values:[{name:\"read-only\"},{name:\"read-write\"},{name:\"read-write-plaintext-only\"}],status:\"nonstandard\",syntax:\"read-only | read-write | read-write-plaintext-only\",relevance:0,description:\"Determines whether a user can edit the content of an element.\",restrictions:[\"enum\"]},{name:\"-webkit-user-select\",browsers:[\"C\",\"S3\"],values:[{name:\"auto\"},{name:\"none\"},{name:\"text\"}],relevance:50,description:\"Controls the appearance of selection.\",restrictions:[\"enum\"]},{name:\"widows\",browsers:[\"E12\",\"S1.3\",\"C25\",\"IE8\",\"O9.2\"],syntax:\"<integer>\",relevance:51,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/widows\"}],description:\"Specifies the minimum number of line boxes of a block container that must be left in a fragment after a break.\",restrictions:[\"integer\"]},{name:\"width\",values:[{name:\"auto\",description:\"The width depends on the values of other properties.\"},{name:\"fit-content\",description:\"Use the fit-content inline size or fit-content block size, as appropriate to the writing mode.\"},{name:\"max-content\",description:\"Use the max-content inline size or max-content block size, as appropriate to the writing mode.\"},{name:\"min-content\",description:\"Use the min-content inline size or min-content block size, as appropriate to the writing mode.\"}],syntax:\"<viewport-length>{1,2}\",relevance:96,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/width\"}],description:\"Specifies the width of the content area, padding area or border area (depending on 'box-sizing') of certain boxes.\",restrictions:[\"length\",\"percentage\"]},{name:\"will-change\",browsers:[\"E79\",\"FF36\",\"S9.1\",\"C36\",\"O24\"],values:[{name:\"auto\",description:\"Expresses no particular intent.\"},{name:\"contents\",description:\"Indicates that the author expects to animate or change something about the element\\u2019s contents in the near future.\"},{name:\"scroll-position\",description:\"Indicates that the author expects to animate or change the scroll position of the element in the near future.\"}],syntax:\"auto | <animateable-feature>#\",relevance:63,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/will-change\"}],description:\"Provides a rendering hint to the user agent, stating what kinds of changes the author expects to perform on the element.\",restrictions:[\"enum\",\"identifier\"]},{name:\"word-break\",values:[{name:\"break-all\",description:\"Lines may break between any two grapheme clusters for non-CJK scripts.\"},{name:\"keep-all\",description:\"Block characters can no longer create implied break points.\"},{name:\"normal\",description:\"Breaks non-CJK scripts according to their own rules.\"}],syntax:\"normal | break-all | keep-all | break-word\",relevance:75,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/word-break\"}],description:\"Specifies line break opportunities for non-CJK scripts.\",restrictions:[\"enum\"]},{name:\"word-spacing\",values:[{name:\"normal\",description:\"No additional spacing is applied. Computes to zero.\"}],syntax:\"normal | <length>\",relevance:57,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/word-spacing\"}],description:\"Specifies additional spacing between \\u201Cwords\\u201D.\",restrictions:[\"length\",\"percentage\"]},{name:\"word-wrap\",values:[{name:\"break-word\",description:\"An otherwise unbreakable sequence of characters may be broken at an arbitrary point if there are no otherwise-acceptable break points in the line.\"},{name:\"normal\",description:\"Lines may break only at allowed break points.\"}],syntax:\"normal | break-word\",relevance:78,description:\"Specifies whether the UA may break within a word to prevent overflow when an otherwise-unbreakable string is too long to fit.\",restrictions:[\"enum\"]},{name:\"writing-mode\",values:[{name:\"horizontal-tb\",description:\"Top-to-bottom block flow direction. The writing mode is horizontal.\"},{name:\"sideways-lr\",description:\"Left-to-right block flow direction. The writing mode is vertical, while the typographic mode is horizontal.\"},{name:\"sideways-rl\",description:\"Right-to-left block flow direction. The writing mode is vertical, while the typographic mode is horizontal.\"},{name:\"vertical-lr\",description:\"Left-to-right block flow direction. The writing mode is vertical.\"},{name:\"vertical-rl\",description:\"Right-to-left block flow direction. The writing mode is vertical.\"}],syntax:\"horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/writing-mode\"}],description:\"This is a shorthand property for both 'direction' and 'block-progression'.\",restrictions:[\"enum\"]},{name:\"z-index\",values:[{name:\"auto\",description:\"The stack level of the generated box in the current stacking context is 0. The box does not establish a new stacking context unless it is the root element.\"}],syntax:\"auto | <integer>\",relevance:92,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/z-index\"}],description:\"For a positioned box, the 'z-index' property specifies the stack level of the box in the current stacking context and whether the box establishes a local stacking context.\",restrictions:[\"integer\"]},{name:\"zoom\",browsers:[\"E12\",\"S3.1\",\"C1\",\"IE5.5\",\"O15\"],values:[{name:\"normal\"}],syntax:\"auto | <number> | <percentage>\",relevance:67,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/zoom\"}],description:\"Non-standard. Specifies the magnification scale of the object. See 'transform: scale()' for a standards-based alternative.\",restrictions:[\"enum\",\"integer\",\"number\",\"percentage\"]},{name:\"-ms-ime-align\",status:\"nonstandard\",syntax:\"auto | after\",relevance:0,description:\"Aligns the Input Method Editor (IME) candidate window box relative to the element on which the IME composition is active.\"},{name:\"-moz-binding\",status:\"nonstandard\",syntax:\"<url> | none\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-binding\"}],description:\"The -moz-binding CSS property is used by Mozilla-based applications to attach an XBL binding to a DOM element.\"},{name:\"-moz-context-properties\",status:\"nonstandard\",syntax:\"none | [ fill | fill-opacity | stroke | stroke-opacity ]#\",relevance:0,browsers:[\"FF55\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-context-properties\"}],description:`If you reference an SVG image in a webpage (such as with the <img> element or as a background image), the SVG image can coordinate with the embedding element (its context) to have the image adopt property values set on the embedding element. To do this the embedding element needs to list the properties that are to be made available to the image by listing them as values of the -moz-context-properties property, and the image needs to opt in to using those properties by using values such as the context-fill value.\n\nThis feature is available since Firefox 55, but is only currently supported with SVG images loaded via chrome:// or resource:// URLs. To experiment with the feature in SVG on the Web it is necessary to set the svg.context-properties.content.enabled pref to true.`},{name:\"-moz-float-edge\",status:\"nonstandard\",syntax:\"border-box | content-box | margin-box | padding-box\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-float-edge\"}],description:\"The non-standard -moz-float-edge CSS property specifies whether the height and width properties of the element include the margin, border, or padding thickness.\"},{name:\"-moz-force-broken-image-icon\",status:\"nonstandard\",syntax:\"0 | 1\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-force-broken-image-icon\"}],description:\"The -moz-force-broken-image-icon extended CSS property can be used to force the broken image icon to be shown even when a broken image has an alt attribute.\"},{name:\"-moz-image-region\",status:\"nonstandard\",syntax:\"<shape> | auto\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-image-region\"}],description:\"For certain XUL elements and pseudo-elements that use an image from the list-style-image property, this property specifies a region of the image that is used in place of the whole image. This allows elements to use different pieces of the same image to improve performance.\"},{name:\"-moz-orient\",status:\"nonstandard\",syntax:\"inline | block | horizontal | vertical\",relevance:0,browsers:[\"FF6\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-orient\"}],description:\"The -moz-orient CSS property specifies the orientation of the element to which it's applied.\"},{name:\"-moz-outline-radius\",status:\"nonstandard\",syntax:\"<outline-radius>{1,4} [ / <outline-radius>{1,4} ]?\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius\"}],description:\"In Mozilla applications like Firefox, the -moz-outline-radius CSS property can be used to give an element's outline rounded corners.\"},{name:\"-moz-outline-radius-bottomleft\",status:\"nonstandard\",syntax:\"<outline-radius>\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius-bottomleft\"}],description:\"In Mozilla applications, the -moz-outline-radius-bottomleft CSS property can be used to round the bottom-left corner of an element's outline.\"},{name:\"-moz-outline-radius-bottomright\",status:\"nonstandard\",syntax:\"<outline-radius>\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius-bottomright\"}],description:\"In Mozilla applications, the -moz-outline-radius-bottomright CSS property can be used to round the bottom-right corner of an element's outline.\"},{name:\"-moz-outline-radius-topleft\",status:\"nonstandard\",syntax:\"<outline-radius>\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius-topleft\"}],description:\"In Mozilla applications, the -moz-outline-radius-topleft CSS property can be used to round the top-left corner of an element's outline.\"},{name:\"-moz-outline-radius-topright\",status:\"nonstandard\",syntax:\"<outline-radius>\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-outline-radius-topright\"}],description:\"In Mozilla applications, the -moz-outline-radius-topright CSS property can be used to round the top-right corner of an element's outline.\"},{name:\"-moz-stack-sizing\",status:\"nonstandard\",syntax:\"ignore | stretch-to-fit\",relevance:0,description:\"-moz-stack-sizing is an extended CSS property. Normally, a stack will change its size so that all of its child elements are completely visible. For example, moving a child of the stack far to the right will widen the stack so the child remains visible.\"},{name:\"-moz-text-blink\",status:\"nonstandard\",syntax:\"none | blink\",relevance:0,description:\"The -moz-text-blink non-standard Mozilla CSS extension specifies the blink mode.\"},{name:\"-moz-user-input\",status:\"nonstandard\",syntax:\"auto | none | enabled | disabled\",relevance:0,browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-moz-user-input\"}],description:\"In Mozilla applications, -moz-user-input determines if an element will accept user input.\"},{name:\"-moz-user-modify\",status:\"nonstandard\",syntax:\"read-only | read-write | write-only\",relevance:0,description:\"The -moz-user-modify property has no effect. It was originally planned to determine whether or not the content of an element can be edited by a user.\"},{name:\"-moz-window-dragging\",status:\"nonstandard\",syntax:\"drag | no-drag\",relevance:0,description:\"The -moz-window-dragging CSS property specifies whether a window is draggable or not. It only works in Chrome code, and only on Mac OS X.\"},{name:\"-moz-window-shadow\",status:\"nonstandard\",syntax:\"default | menu | tooltip | sheet | none\",relevance:0,description:\"The -moz-window-shadow CSS property specifies whether a window will have a shadow. It only works on Mac OS X.\"},{name:\"-webkit-border-before\",status:\"nonstandard\",syntax:\"<'border-width'> || <'border-style'> || <color>\",relevance:0,browsers:[\"E79\",\"S5.1\",\"C8\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-border-before\"}],description:\"The -webkit-border-before CSS property is a shorthand property for setting the individual logical block start border property values in a single place in the style sheet.\"},{name:\"-webkit-border-before-color\",status:\"nonstandard\",syntax:\"<color>\",relevance:0,description:\"The -webkit-border-before-color CSS property sets the color of the individual logical block start border in a single place in the style sheet.\"},{name:\"-webkit-border-before-style\",status:\"nonstandard\",syntax:\"<'border-style'>\",relevance:0,description:\"The -webkit-border-before-style CSS property sets the style of the individual logical block start border in a single place in the style sheet.\"},{name:\"-webkit-border-before-width\",status:\"nonstandard\",syntax:\"<'border-width'>\",relevance:0,description:\"The -webkit-border-before-width CSS property sets the width of the individual logical block start border in a single place in the style sheet.\"},{name:\"-webkit-line-clamp\",syntax:\"none | <integer>\",relevance:50,browsers:[\"E17\",\"FF68\",\"S5\",\"C6\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-line-clamp\"}],description:\"The -webkit-line-clamp CSS property allows limiting of the contents of a block container to the specified number of lines.\"},{name:\"-webkit-mask\",status:\"nonstandard\",syntax:\"[ <mask-reference> || <position> [ / <bg-size> ]? || <repeat-style> || [ <box> | border | padding | content | text ] || [ <box> | border | padding | content ] ]#\",relevance:0,description:\"The mask CSS property alters the visibility of an element by either partially or fully hiding it. This is accomplished by either masking or clipping the image at specific points.\"},{name:\"-webkit-mask-attachment\",status:\"nonstandard\",syntax:\"<attachment>#\",relevance:0,browsers:[\"S4\",\"C1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-attachment\"}],description:\"If a -webkit-mask-image is specified, -webkit-mask-attachment determines whether the mask image's position is fixed within the viewport, or scrolls along with its containing block.\"},{name:\"-webkit-mask-composite\",status:\"nonstandard\",syntax:\"<composite-style>#\",relevance:0,browsers:[\"E18\",\"FF53\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-composite\"}],description:\"The -webkit-mask-composite property specifies the manner in which multiple mask images applied to the same element are composited with one another. Mask images are composited in the opposite order that they are declared with the -webkit-mask-image property.\"},{name:\"-webkit-mask-position\",status:\"nonstandard\",syntax:\"<position>#\",relevance:0,description:\"The mask-position CSS property sets the initial position, relative to the mask position layer defined by mask-origin, for each defined mask image.\"},{name:\"-webkit-mask-position-x\",status:\"nonstandard\",syntax:\"[ <length-percentage> | left | center | right ]#\",relevance:0,browsers:[\"E18\",\"FF49\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-position-x\"}],description:\"The -webkit-mask-position-x CSS property sets the initial horizontal position of a mask image.\"},{name:\"-webkit-mask-position-y\",status:\"nonstandard\",syntax:\"[ <length-percentage> | top | center | bottom ]#\",relevance:0,browsers:[\"E18\",\"FF49\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-position-y\"}],description:\"The -webkit-mask-position-y CSS property sets the initial vertical position of a mask image.\"},{name:\"-webkit-mask-repeat-x\",status:\"nonstandard\",syntax:\"repeat | no-repeat | space | round\",relevance:0,browsers:[\"E18\",\"S5\",\"C3\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-repeat-x\"}],description:\"The -webkit-mask-repeat-x property specifies whether and how a mask image is repeated (tiled) horizontally.\"},{name:\"-webkit-mask-repeat-y\",status:\"nonstandard\",syntax:\"repeat | no-repeat | space | round\",relevance:0,browsers:[\"E18\",\"S5\",\"C3\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-repeat-y\"}],description:\"The -webkit-mask-repeat-y property specifies whether and how a mask image is repeated (tiled) vertically.\"},{name:\"accent-color\",syntax:\"auto | <color>\",relevance:50,browsers:[\"E93\",\"FF92\",\"S15.4\",\"C93\",\"O79\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/accent-color\"}],description:\"Sets the color of the elements accent\"},{name:\"align-tracks\",status:\"experimental\",syntax:\"[ normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position> ]#\",relevance:50,browsers:[\"FF77\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/align-tracks\"}],description:\"The align-tracks CSS property sets the alignment in the masonry axis for grid containers that have masonry in their block axis.\"},{name:\"animation-timeline\",syntax:\"<single-animation-timeline>#\",relevance:50,browsers:[\"FF97\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/animation-timeline\"}],description:\"Specifies the names of one or more @scroll-timeline at-rules to describe the element's scroll animations.\"},{name:\"appearance\",status:\"experimental\",syntax:\"none | auto | textfield | menulist-button | <compat-auto>\",relevance:62,browsers:[\"E84\",\"FF80\",\"S15.4\",\"C84\",\"O70\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/appearance\"}],description:\"Changes the appearance of buttons and other controls to resemble native controls.\"},{name:\"aspect-ratio\",status:\"experimental\",syntax:\"auto | <ratio>\",relevance:52,browsers:[\"E88\",\"FF89\",\"S15\",\"C88\",\"O74\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/aspect-ratio\"}],description:\"The aspect-ratio   CSS property sets a preferred aspect ratio for the box, which will be used in the calculation of auto sizes and some other layout functions.\"},{name:\"azimuth\",status:\"obsolete\",syntax:\"<angle> | [ [ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards\",relevance:0,description:\"In combination with elevation, the azimuth CSS property enables different audio sources to be positioned spatially for aural presentation. This is important in that it provides a natural way to tell several voices apart, as each can be positioned to originate at a different location on the sound stage. Stereo output produce a lateral sound stage, while binaural headphones and multi-speaker setups allow for a fully three-dimensional stage.\"},{name:\"backdrop-filter\",syntax:\"none | <filter-function-list>\",relevance:53,browsers:[\"E17\",\"FF70\",\"S9\",\"C76\",\"O63\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/backdrop-filter\"}],description:\"The backdrop-filter CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything behind the element, to see the effect you must make the element or its background at least partially transparent.\"},{name:\"border-block\",syntax:\"<'border-top-width'> || <'border-top-style'> || <color>\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block\"}],description:\"The border-block CSS property is a shorthand property for setting the individual logical block border property values in a single place in the style sheet.\"},{name:\"border-block-color\",syntax:\"<'border-top-color'>{1,2}\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-color\"}],description:\"The border-block-color CSS property defines the color of the logical block borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-color and border-bottom-color, or border-right-color and border-left-color property depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"border-block-style\",syntax:\"<'border-top-style'>\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-style\"}],description:\"The border-block-style CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-style and border-bottom-style, or border-left-style and border-right-style properties depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"border-block-width\",syntax:\"<'border-top-width'>\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-block-width\"}],description:\"The border-block-width CSS property defines the width of the logical block borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-width and border-bottom-width, or border-left-width, and border-right-width property depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"border-end-end-radius\",syntax:\"<length-percentage>{1,2}\",relevance:50,browsers:[\"E89\",\"FF66\",\"S15\",\"C89\",\"O75\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-end-end-radius\"}],description:\"The border-end-end-radius CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on on the element's writing-mode, direction, and text-orientation.\"},{name:\"border-end-start-radius\",syntax:\"<length-percentage>{1,2}\",relevance:50,browsers:[\"E89\",\"FF66\",\"S15\",\"C89\",\"O75\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-end-start-radius\"}],description:\"The border-end-start-radius CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's writing-mode, direction, and text-orientation.\"},{name:\"border-inline\",syntax:\"<'border-top-width'> || <'border-top-style'> || <color>\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline\"}],description:\"The border-inline CSS property is a shorthand property for setting the individual logical inline border property values in a single place in the style sheet.\"},{name:\"border-inline-color\",syntax:\"<'border-top-color'>{1,2}\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-color\"}],description:\"The border-inline-color CSS property defines the color of the logical inline borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-color and border-bottom-color, or border-right-color and border-left-color property depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"border-inline-style\",syntax:\"<'border-top-style'>\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-style\"}],description:\"The border-inline-style CSS property defines the style of the logical inline borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-style and border-bottom-style, or border-left-style and border-right-style properties depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"border-inline-width\",syntax:\"<'border-top-width'>\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-inline-width\"}],description:\"The border-inline-width CSS property defines the width of the logical inline borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the border-top-width and border-bottom-width, or border-left-width, and border-right-width property depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"border-start-end-radius\",syntax:\"<length-percentage>{1,2}\",relevance:50,browsers:[\"E89\",\"FF66\",\"S15\",\"C89\",\"O75\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-start-end-radius\"}],description:\"The border-start-end-radius CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's writing-mode, direction, and text-orientation.\"},{name:\"border-start-start-radius\",syntax:\"<length-percentage>{1,2}\",relevance:50,browsers:[\"E89\",\"FF66\",\"S15\",\"C89\",\"O75\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/border-start-start-radius\"}],description:\"The border-start-start-radius CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's writing-mode, direction, and text-orientation.\"},{name:\"box-align\",status:\"nonstandard\",syntax:\"start | center | end | baseline | stretch\",relevance:0,browsers:[\"E12\",\"FF1\",\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-align\"}],description:\"The box-align CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.\"},{name:\"box-direction\",status:\"nonstandard\",syntax:\"normal | reverse | inherit\",relevance:0,browsers:[\"E12\",\"FF1\",\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-direction\"}],description:\"The box-direction CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).\"},{name:\"box-flex\",status:\"nonstandard\",syntax:\"<number>\",relevance:0,browsers:[\"E12\",\"FF1\",\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-flex\"}],description:\"The -moz-box-flex and -webkit-box-flex CSS properties specify how a -moz-box or -webkit-box grows to fill the box that contains it, in the direction of the containing box's layout.\"},{name:\"box-flex-group\",status:\"nonstandard\",syntax:\"<integer>\",relevance:0,browsers:[\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-flex-group\"}],description:\"The box-flex-group CSS property assigns the flexbox's child elements to a flex group.\"},{name:\"box-lines\",status:\"nonstandard\",syntax:\"single | multiple\",relevance:0,browsers:[\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-lines\"}],description:\"The box-lines CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).\"},{name:\"box-ordinal-group\",status:\"nonstandard\",syntax:\"<integer>\",relevance:0,browsers:[\"E12\",\"FF1\",\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-ordinal-group\"}],description:\"The box-ordinal-group CSS property assigns the flexbox's child elements to an ordinal group.\"},{name:\"box-orient\",status:\"nonstandard\",syntax:\"horizontal | vertical | inline-axis | block-axis | inherit\",relevance:0,browsers:[\"E12\",\"FF1\",\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-orient\"}],description:\"The box-orient CSS property specifies whether an element lays out its contents horizontally or vertically.\"},{name:\"box-pack\",status:\"nonstandard\",syntax:\"start | center | end | justify\",relevance:0,browsers:[\"E12\",\"FF1\",\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/box-pack\"}],description:\"The -moz-box-pack and -webkit-box-pack CSS properties specify how a -moz-box or -webkit-box packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.\"},{name:\"print-color-adjust\",syntax:\"economy | exact\",relevance:50,browsers:[\"E79\",\"FF97\",\"S15.4\",\"C17\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/print-color-adjust\"}],description:\"Defines what optimization the user agent is allowed to do when adjusting the appearance for an output device.\"},{name:\"color-scheme\",syntax:\"normal | [ light | dark | <custom-ident> ]+ && only?\",relevance:52,browsers:[\"E81\",\"FF96\",\"S13\",\"C81\",\"O68\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/color-scheme\"}],description:\"The color-scheme CSS property allows an element to indicate which color schemes it can comfortably be rendered in.\"},{name:\"content-visibility\",syntax:\"visible | auto | hidden\",relevance:51,browsers:[\"E85\",\"S15.4\",\"C85\",\"O71\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/content-visibility\"}],description:\"Controls whether or not an element renders its contents at all, along with forcing a strong set of containments, allowing user agents to potentially omit large swathes of layout and rendering work until it becomes needed.\"},{name:\"counter-set\",syntax:\"[ <counter-name> <integer>? ]+ | none\",relevance:50,browsers:[\"E85\",\"FF68\",\"C85\",\"O71\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/counter-set\"}],description:\"The counter-set CSS property sets a CSS counter to a given value. It manipulates the value of existing counters, and will only create new counters if there isn't already a counter of the given name on the element.\"},{name:\"font-optical-sizing\",syntax:\"auto | none\",relevance:50,browsers:[\"E17\",\"FF62\",\"S11\",\"C79\",\"O66\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-optical-sizing\"}],description:\"The font-optical-sizing CSS property allows developers to control whether browsers render text with slightly differing visual representations to optimize viewing at different sizes, or not. This only works for fonts that have an optical size variation axis.\"},{name:\"font-variation-settings\",syntax:\"normal | [ <string> <number> ]#\",relevance:50,browsers:[\"E17\",\"FF62\",\"S11\",\"C62\",\"O49\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-variation-settings\"}],description:\"The font-variation-settings CSS property provides low-level control over OpenType or TrueType font variations, by specifying the four letter axis names of the features you want to vary, along with their variation values.\"},{name:\"font-smooth\",status:\"nonstandard\",syntax:\"auto | never | always | <absolute-size> | <length>\",relevance:0,browsers:[\"E79\",\"FF25\",\"S4\",\"C5\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/font-smooth\"}],description:\"The font-smooth CSS property controls the application of anti-aliasing when fonts are rendered.\"},{name:\"forced-color-adjust\",status:\"experimental\",syntax:\"auto | none\",relevance:52,browsers:[\"E79\",\"C89\",\"IE10\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/forced-color-adjust\"}],description:\"Allows authors to opt certain elements out of forced colors mode. This then restores the control of those values to CSS\"},{name:\"gap\",syntax:\"<'row-gap'> <'column-gap'>?\",relevance:55,browsers:[\"E84\",\"FF63\",\"S14.1\",\"C84\",\"O70\"],description:\"The gap CSS property is a shorthand property for row-gap and column-gap specifying the gutters between grid rows and columns.\"},{name:\"hanging-punctuation\",syntax:\"none | [ first || [ force-end | allow-end ] || last ]\",relevance:50,browsers:[\"S10\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/hanging-punctuation\"}],description:\"The hanging-punctuation CSS property specifies whether a punctuation mark should hang at the start or end of a line of text. Hanging punctuation may be placed outside the line box.\"},{name:\"hyphenate-character\",syntax:\"auto | <string>\",relevance:50,browsers:[\"E79\",\"FF98\",\"S5.1\",\"C6\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/hyphenate-character\"}],description:\"A hyphenate character used at the end of a line.\"},{name:\"image-resolution\",status:\"experimental\",syntax:\"[ from-image || <resolution> ] && snap?\",relevance:50,description:\"The image-resolution property specifies the intrinsic resolution of all raster images used in or on the element. It affects both content images (e.g. replaced elements and generated content) and decorative images (such as background-image). The intrinsic resolution of an image is used to determine the image\\u2019s intrinsic dimensions.\"},{name:\"initial-letter\",status:\"experimental\",syntax:\"normal | [ <number> <integer>? ]\",relevance:50,browsers:[\"S9\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/initial-letter\"}],description:\"The initial-letter CSS property specifies styling for dropped, raised, and sunken initial letters.\"},{name:\"initial-letter-align\",status:\"experimental\",syntax:\"[ auto | alphabetic | hanging | ideographic ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/initial-letter-align\"}],description:\"The initial-letter-align CSS property specifies the alignment of initial letters within a paragraph.\"},{name:\"input-security\",syntax:\"auto | none\",relevance:50,description:\"Enables or disables the obscuring a sensitive test input.\"},{name:\"inset\",syntax:\"<'top'>{1,4}\",relevance:51,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/inset\"}],description:\"The inset CSS property defines the logical block and inline start and end offsets of an element, which map to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the top and bottom, or right and left properties depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"inset-block\",syntax:\"<'top'>{1,2}\",relevance:50,browsers:[\"E87\",\"FF63\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/inset-block\"}],description:\"The inset-block CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the top and bottom, or right and left properties depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"inset-block-end\",syntax:\"<'top'>\",relevance:50,browsers:[\"E87\",\"FF63\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/inset-block-end\"}],description:\"The inset-block-end CSS property defines the logical block end offset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the top, right, bottom, or left property depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"inset-block-start\",syntax:\"<'top'>\",relevance:50,browsers:[\"E87\",\"FF63\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/inset-block-start\"}],description:\"The inset-block-start CSS property defines the logical block start offset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the top, right, bottom, or left property depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"inset-inline\",syntax:\"<'top'>{1,2}\",relevance:50,browsers:[\"E87\",\"FF63\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/inset-inline\"}],description:\"The inset-inline CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the top and bottom, or right and left properties depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"inset-inline-end\",syntax:\"<'top'>\",relevance:50,browsers:[\"E87\",\"FF63\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/inset-inline-end\"}],description:\"The inset-inline-end CSS property defines the logical inline end inset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the top, right, bottom, or left property depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"inset-inline-start\",syntax:\"<'top'>\",relevance:50,browsers:[\"E87\",\"FF63\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/inset-inline-start\"}],description:\"The inset-inline-start CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the top, right, bottom, or left property depending on the values defined for writing-mode, direction, and text-orientation.\"},{name:\"justify-tracks\",status:\"experimental\",syntax:\"[ normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ] ]#\",relevance:50,browsers:[\"FF77\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/justify-tracks\"}],description:\"The justify-tracks CSS property sets the alignment in the masonry axis for grid containers that have masonry in their inline axis\"},{name:\"line-clamp\",status:\"experimental\",syntax:\"none | <integer>\",relevance:50,description:\"The line-clamp property allows limiting the contents of a block container to the specified number of lines; remaining content is fragmented away and neither rendered nor measured. Optionally, it also allows inserting content into the last line box to indicate the continuity of truncated/interrupted content.\"},{name:\"line-height-step\",status:\"experimental\",syntax:\"<length>\",relevance:50,browsers:[\"E79\",\"C60\",\"O47\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/line-height-step\"}],description:\"The line-height-step CSS property defines the step units for line box heights. When the step unit is positive, line box heights are rounded up to the closest multiple of the unit. Negative values are invalid.\"},{name:\"margin-block\",syntax:\"<'margin-left'>{1,2}\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-block\"}],description:\"The margin-block CSS property defines the logical block start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\"},{name:\"margin-inline\",syntax:\"<'margin-left'>{1,2}\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-inline\"}],description:\"The margin-inline CSS property defines the logical inline start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.\"},{name:\"margin-trim\",status:\"experimental\",syntax:\"none | in-flow | all\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/margin-trim\"}],description:\"The margin-trim property allows the container to trim the margins of its children where they adjoin the container\\u2019s edges.\"},{name:\"mask\",syntax:\"<mask-layer>#\",relevance:50,browsers:[\"E79\",\"FF2\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask\"}],description:\"The mask CSS property alters the visibility of an element by either partially or fully hiding it. This is accomplished by either masking or clipping the image at specific points.\"},{name:\"mask-border\",syntax:\"<'mask-border-source'> || <'mask-border-slice'> [ / <'mask-border-width'>? [ / <'mask-border-outset'> ]? ]? || <'mask-border-repeat'> || <'mask-border-mode'>\",relevance:50,browsers:[\"E79\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-border\"}],description:`The mask-border CSS property lets you create a mask along the edge of an element's border.\n\nThis property is a shorthand for mask-border-source, mask-border-slice, mask-border-width, mask-border-outset, mask-border-repeat, and mask-border-mode. As with all shorthand properties, any omitted sub-values will be set to their initial value.`},{name:\"mask-border-mode\",syntax:\"luminance | alpha\",relevance:50,description:\"The mask-border-mode CSS property specifies the blending mode used in a mask border.\"},{name:\"mask-border-outset\",syntax:\"[ <length> | <number> ]{1,4}\",relevance:50,browsers:[\"E79\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-border-outset\"}],description:\"The mask-border-outset CSS property specifies the distance by which an element's mask border is set out from its border box.\"},{name:\"mask-border-repeat\",syntax:\"[ stretch | repeat | round | space ]{1,2}\",relevance:50,browsers:[\"E79\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-border-repeat\"}],description:\"The mask-border-repeat CSS property defines how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border.\"},{name:\"mask-border-slice\",syntax:\"<number-percentage>{1,4} fill?\",relevance:50,browsers:[\"E79\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-border-slice\"}],description:\"The mask-border-slice CSS property divides the image specified by mask-border-source into regions. These regions are used to form the components of an element's mask border.\"},{name:\"mask-border-source\",syntax:\"none | <image>\",relevance:50,browsers:[\"E79\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-border-source\"}],description:`The mask-border-source CSS property specifies the source image used to create an element's mask border.\n\nThe mask-border-slice property is used to divide the source image into regions, which are then dynamically applied to the final mask border.`},{name:\"mask-border-width\",syntax:\"[ <length-percentage> | <number> | auto ]{1,4}\",relevance:50,browsers:[\"E79\",\"S3.1\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-border-width\"}],description:\"The mask-border-width CSS property specifies the width of an element's mask border.\"},{name:\"mask-clip\",syntax:\"[ <geometry-box> | no-clip ]#\",relevance:50,browsers:[\"E79\",\"FF53\",\"S15.4\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-clip\"}],description:\"The mask-clip CSS property determines the area, which is affected by a mask. The painted content of an element must be restricted to this area.\"},{name:\"mask-composite\",syntax:\"<compositing-operator>#\",relevance:50,browsers:[\"E18\",\"FF53\",\"S15.4\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/mask-composite\"}],description:\"The mask-composite CSS property represents a compositing operation used on the current mask layer with the mask layers below it.\"},{name:\"masonry-auto-flow\",status:\"experimental\",syntax:\"[ pack | next ] || [ definite-first | ordered ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/masonry-auto-flow\"}],description:\"The masonry-auto-flow CSS property modifies how items are placed when using masonry in CSS Grid Layout.\"},{name:\"math-style\",syntax:\"normal | compact\",relevance:50,browsers:[\"FF83\",\"S14.1\",\"C83\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/math-style\"}],description:\"The math-style property indicates whether MathML equations should render with normal or compact height.\"},{name:\"max-lines\",status:\"experimental\",syntax:\"none | <integer>\",relevance:50,description:\"The max-liens property forces a break after a set number of lines\"},{name:\"offset\",syntax:\"[ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'> ]? ]? ]! [ / <'offset-anchor'> ]?\",relevance:50,browsers:[\"E79\",\"FF72\",\"C55\",\"O42\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/offset\"}],description:\"The offset CSS property is a shorthand property for animating an element along a defined path.\"},{name:\"offset-anchor\",syntax:\"auto | <position>\",relevance:50,browsers:[\"FF72\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/offset-anchor\"}],description:\"Defines an anchor point of the box positioned along the path. The anchor point specifies the point of the box which is to be considered as the point that is moved along the path.\"},{name:\"offset-distance\",syntax:\"<length-percentage>\",relevance:50,browsers:[\"E79\",\"FF72\",\"C55\",\"O42\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/offset-distance\"}],description:\"The offset-distance CSS property specifies a position along an offset-path.\"},{name:\"offset-path\",syntax:\"none | ray( [ <angle> && <size> && contain? ] ) | <path()> | <url> | [ <basic-shape> || <geometry-box> ]\",relevance:50,browsers:[\"E79\",\"FF72\",\"C55\",\"O45\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/offset-path\"}],description:`The offset-path CSS property specifies the offset path where the element gets positioned. The exact element\\u2019s position on the offset path is determined by the offset-distance property. An offset path is either a specified path with one or multiple sub-paths or the geometry of a not-styled basic shape. Each shape or path must define an initial position for the computed value of \"0\" for offset-distance and an initial direction which specifies the rotation of the object to the initial position.\n\nIn this specification, a direction (or rotation) of 0 degrees is equivalent to the direction of the positive x-axis in the object\\u2019s local coordinate system. In other words, a rotation of 0 degree points to the right side of the UA if the object and its ancestors have no transformation applied.`},{name:\"offset-position\",status:\"experimental\",syntax:\"auto | <position>\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/offset-position\"}],description:\"Specifies the initial position of the offset path. If position is specified with static, offset-position would be ignored.\"},{name:\"offset-rotate\",syntax:\"[ auto | reverse ] || <angle>\",relevance:50,browsers:[\"E79\",\"FF72\",\"C56\",\"O43\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/offset-rotate\"}],description:\"The offset-rotate CSS property defines the direction of the element while positioning along the offset path.\"},{name:\"overflow-anchor\",syntax:\"auto | none\",relevance:52,browsers:[\"E79\",\"FF66\",\"C56\",\"O43\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overflow-anchor\"}],description:\"The overflow-anchor CSS property provides a way to opt out browser scroll anchoring behavior which adjusts scroll position to minimize content shifts.\"},{name:\"overflow-block\",syntax:\"visible | hidden | clip | scroll | auto\",relevance:50,browsers:[\"FF69\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overflow-block\"}],description:\"The overflow-block CSS media feature can be used to test how the output device handles content that overflows the initial containing block along the block axis.\"},{name:\"overflow-clip-box\",status:\"nonstandard\",syntax:\"padding-box | content-box\",relevance:0,browsers:[\"FF29\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Mozilla/Gecko/Chrome/CSS/overflow-clip-box\"}],description:\"The overflow-clip-box CSS property specifies relative to which box the clipping happens when there is an overflow. It is short hand for the overflow-clip-box-inline and overflow-clip-box-block properties.\"},{name:\"overflow-clip-margin\",syntax:\"<visual-box> || <length [0,\\u221E]>\",relevance:50,browsers:[\"E90\",\"C90\",\"O76\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overflow-clip-margin\"}],description:\"The overflow-clip-margin CSS property determines how far outside its bounds an element with overflow: clip may be painted before being clipped.\"},{name:\"overflow-inline\",syntax:\"visible | hidden | clip | scroll | auto\",relevance:50,browsers:[\"FF69\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overflow-inline\"}],description:\"The overflow-inline CSS media feature can be used to test how the output device handles content that overflows the initial containing block along the inline axis.\"},{name:\"overscroll-behavior\",syntax:\"[ contain | none | auto ]{1,2}\",relevance:50,browsers:[\"E18\",\"FF59\",\"C63\",\"O50\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior\"}],description:\"The overscroll-behavior CSS property is shorthand for the overscroll-behavior-x and overscroll-behavior-y properties, which allow you to control the browser's scroll overflow behavior \\u2014 what happens when the boundary of a scrolling area is reached.\"},{name:\"overscroll-behavior-block\",syntax:\"contain | none | auto\",relevance:50,browsers:[\"E79\",\"FF73\",\"C77\",\"O64\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-block\"}],description:\"The overscroll-behavior-block CSS property sets the browser's behavior when the block direction boundary of a scrolling area is reached.\"},{name:\"overscroll-behavior-inline\",syntax:\"contain | none | auto\",relevance:50,browsers:[\"E79\",\"FF73\",\"C77\",\"O64\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-inline\"}],description:\"The overscroll-behavior-inline CSS property sets the browser's behavior when the inline direction boundary of a scrolling area is reached.\"},{name:\"overscroll-behavior-x\",syntax:\"contain | none | auto\",relevance:50,browsers:[\"E18\",\"FF59\",\"C63\",\"O50\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-x\"}],description:\"The overscroll-behavior-x CSS property is allows you to control the browser's scroll overflow behavior \\u2014 what happens when the boundary of a scrolling area is reached \\u2014 in the x axis direction.\"},{name:\"overscroll-behavior-y\",syntax:\"contain | none | auto\",relevance:50,browsers:[\"E18\",\"FF59\",\"C63\",\"O50\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-y\"}],description:\"The overscroll-behavior-y CSS property is allows you to control the browser's scroll overflow behavior \\u2014 what happens when the boundary of a scrolling area is reached \\u2014 in the y axis direction.\"},{name:\"padding-block\",syntax:\"<'padding-left'>{1,2}\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-block\"}],description:\"The padding-block CSS property defines the logical block start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\"},{name:\"padding-inline\",syntax:\"<'padding-left'>{1,2}\",relevance:50,browsers:[\"E87\",\"FF66\",\"S14.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/padding-inline\"}],description:\"The padding-inline CSS property defines the logical inline start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.\"},{name:\"place-content\",syntax:\"<'align-content'> <'justify-content'>?\",relevance:50,browsers:[\"E79\",\"FF45\",\"S9\",\"C59\",\"O46\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/place-content\"}],description:\"The place-content CSS shorthand property sets both the align-content and justify-content properties.\"},{name:\"place-items\",syntax:\"<'align-items'> <'justify-items'>?\",relevance:50,browsers:[\"E79\",\"FF45\",\"S11\",\"C59\",\"O46\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/place-items\"}],description:\"The CSS place-items shorthand property sets both the align-items and justify-items properties. The first value is the align-items property value, the second the justify-items one. If the second value is not present, the first value is also used for it.\"},{name:\"place-self\",syntax:\"<'align-self'> <'justify-self'>?\",relevance:50,browsers:[\"E79\",\"FF45\",\"S11\",\"C59\",\"O46\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/place-self\"}],description:\"The place-self CSS property is a shorthand property sets both the align-self and justify-self properties. The first value is the align-self property value, the second the justify-self one. If the second value is not present, the first value is also used for it.\"},{name:\"rotate\",syntax:\"none | <angle> | [ x | y | z | <number>{3} ] && <angle>\",relevance:50,browsers:[\"FF72\",\"S14.1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/rotate\"}],description:\"The rotate CSS property allows you to specify rotation transforms individually and independently of the transform property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the transform value.\"},{name:\"row-gap\",syntax:\"normal | <length-percentage>\",relevance:51,browsers:[\"E84\",\"FF63\",\"S14.1\",\"C84\",\"O70\"],description:\"The row-gap CSS property specifies the gutter between grid rows.\"},{name:\"ruby-merge\",status:\"experimental\",syntax:\"separate | collapse | auto\",relevance:50,description:\"This property controls how ruby annotation boxes should be rendered when there are more than one in a ruby container box: whether each pair should be kept separate, the annotations should be collapsed and rendered as a group, or the separation should be determined based on the space available.\"},{name:\"scale\",syntax:\"none | <number>{1,3}\",relevance:50,browsers:[\"FF72\",\"S14.1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scale\"}],description:\"The scale CSS property allows you to specify scale transforms individually and independently of the transform property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the transform value.\"},{name:\"scrollbar-color\",syntax:\"auto | <color>{2}\",relevance:50,browsers:[\"FF64\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-color\"}],description:\"The scrollbar-color CSS property sets the color of the scrollbar track and thumb.\"},{name:\"scrollbar-gutter\",syntax:\"auto | stable && both-edges?\",relevance:50,browsers:[\"E94\",\"FF97\",\"C94\",\"O80\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-gutter\"}],description:\"The scrollbar-gutter CSS property allows authors to reserve space for the scrollbar, preventing unwanted layout changes as the content grows while also avoiding unnecessary visuals when scrolling isn't needed.\"},{name:\"scrollbar-width\",syntax:\"auto | thin | none\",relevance:50,browsers:[\"FF64\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scrollbar-width\"}],description:\"The scrollbar-width property allows the author to set the maximum thickness of an element\\u2019s scrollbars when they are shown. \"},{name:\"scroll-margin\",syntax:\"<length>{1,4}\",relevance:50,browsers:[\"E79\",\"FF90\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin\"}],description:\"The scroll-margin property is a shorthand property which sets all of the scroll-margin longhands, assigning values much like the margin property does for the margin-* longhands.\"},{name:\"scroll-margin-block\",syntax:\"<length>{1,2}\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block\"}],description:\"The scroll-margin-block property is a shorthand property which sets the scroll-margin longhands in the block dimension.\"},{name:\"scroll-margin-block-start\",syntax:\"<length>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-start\"}],description:\"The scroll-margin-block-start property defines the margin of the scroll snap area at the start of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container\\u2019s coordinate space), then adding the specified outsets.\"},{name:\"scroll-margin-block-end\",syntax:\"<length>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-end\"}],description:\"The scroll-margin-block-end property defines the margin of the scroll snap area at the end of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container\\u2019s coordinate space), then adding the specified outsets.\"},{name:\"scroll-margin-bottom\",syntax:\"<length>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom\"}],description:\"The scroll-margin-bottom property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container\\u2019s coordinate space), then adding the specified outsets.\"},{name:\"scroll-margin-inline\",syntax:\"<length>{1,2}\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline\"}],description:\"The scroll-margin-inline property is a shorthand property which sets the scroll-margin longhands in the inline dimension.\"},{name:\"scroll-margin-inline-start\",syntax:\"<length>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-start\"}],description:\"The scroll-margin-inline-start property defines the margin of the scroll snap area at the start of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container\\u2019s coordinate space), then adding the specified outsets.\"},{name:\"scroll-margin-inline-end\",syntax:\"<length>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-end\"}],description:\"The scroll-margin-inline-end property defines the margin of the scroll snap area at the end of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container\\u2019s coordinate space), then adding the specified outsets.\"},{name:\"scroll-margin-left\",syntax:\"<length>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left\"}],description:\"The scroll-margin-left property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container\\u2019s coordinate space), then adding the specified outsets.\"},{name:\"scroll-margin-right\",syntax:\"<length>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right\"}],description:\"The scroll-margin-right property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container\\u2019s coordinate space), then adding the specified outsets.\"},{name:\"scroll-margin-top\",syntax:\"<length>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top\"}],description:\"The scroll-margin-top property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container\\u2019s coordinate space), then adding the specified outsets.\"},{name:\"scroll-padding\",syntax:\"[ auto | <length-percentage> ]{1,4}\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding\"}],description:\"The scroll-padding property is a shorthand property which sets all of the scroll-padding longhands, assigning values much like the padding property does for the padding-* longhands.\"},{name:\"scroll-padding-block\",syntax:\"[ auto | <length-percentage> ]{1,2}\",relevance:50,browsers:[\"E79\",\"FF68\",\"S15\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block\"}],description:\"The scroll-padding-block property is a shorthand property which sets the scroll-padding longhands for the block dimension.\"},{name:\"scroll-padding-block-start\",syntax:\"auto | <length-percentage>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S15\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-start\"}],description:\"The scroll-padding-block-start property defines offsets for the start edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport.\"},{name:\"scroll-padding-block-end\",syntax:\"auto | <length-percentage>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S15\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-end\"}],description:\"The scroll-padding-block-end property defines offsets for the end edge in the block dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport.\"},{name:\"scroll-padding-bottom\",syntax:\"auto | <length-percentage>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-bottom\"}],description:\"The scroll-padding-bottom property defines offsets for the bottom of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport.\"},{name:\"scroll-padding-inline\",syntax:\"[ auto | <length-percentage> ]{1,2}\",relevance:50,browsers:[\"E79\",\"FF68\",\"S15\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline\"}],description:\"The scroll-padding-inline property is a shorthand property which sets the scroll-padding longhands for the inline dimension.\"},{name:\"scroll-padding-inline-start\",syntax:\"auto | <length-percentage>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S15\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-start\"}],description:\"The scroll-padding-inline-start property defines offsets for the start edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport.\"},{name:\"scroll-padding-inline-end\",syntax:\"auto | <length-percentage>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S15\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-end\"}],description:\"The scroll-padding-inline-end property defines offsets for the end edge in the inline dimension of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport.\"},{name:\"scroll-padding-left\",syntax:\"auto | <length-percentage>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-left\"}],description:\"The scroll-padding-left property defines offsets for the left of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport.\"},{name:\"scroll-padding-right\",syntax:\"auto | <length-percentage>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-right\"}],description:\"The scroll-padding-right property defines offsets for the right of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport.\"},{name:\"scroll-padding-top\",syntax:\"auto | <length-percentage>\",relevance:50,browsers:[\"E79\",\"FF68\",\"S14.1\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-padding-top\"}],description:\"The scroll-padding-top property defines offsets for the top of the optimal viewing region of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or simply to put more breathing room between a targeted element and the edges of the scrollport.\"},{name:\"scroll-snap-align\",syntax:\"[ none | start | end | center ]{1,2}\",relevance:52,browsers:[\"E79\",\"FF68\",\"S11\",\"C69\",\"O56\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-snap-align\"}],description:\"The scroll-snap-align property specifies the box\\u2019s snap position as an alignment of its snap area (as the alignment subject) within its snap container\\u2019s snapport (as the alignment container). The two values specify the snapping alignment in the block axis and inline axis, respectively. If only one value is specified, the second value defaults to the same value.\"},{name:\"scroll-snap-stop\",syntax:\"normal | always\",relevance:50,browsers:[\"E79\",\"S15\",\"C75\",\"O62\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-snap-stop\"}],description:'The scroll-snap-stop CSS property defines whether the scroll container is allowed to \"pass over\" possible snap positions.'},{name:\"scroll-snap-type-x\",status:\"obsolete\",syntax:\"none | mandatory | proximity\",relevance:0,browsers:[\"FF39\",\"S9\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type-x\"}],description:`The scroll-snap-type-x CSS property defines how strictly snap points are enforced on the horizontal axis of the scroll container in case there is one.\n\nSpecifying any precise animations or physics used to enforce those snap points is not covered by this property but instead left up to the user agent.`},{name:\"scroll-snap-type-y\",status:\"obsolete\",syntax:\"none | mandatory | proximity\",relevance:0,browsers:[\"FF39\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type-y\"}],description:`The scroll-snap-type-y CSS property defines how strictly snap points are enforced on the vertical axis of the scroll container in case there is one.\n\nSpecifying any precise animations or physics used to enforce those snap points is not covered by this property but instead left up to the user agent.`},{name:\"text-combine-upright\",syntax:\"none | all | [ digits <integer>? ]\",relevance:50,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-combine-upright\"}],description:`The text-combine-upright CSS property specifies the combination of multiple characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.\n\nThis is used to produce an effect that is known as tate-ch\\u016B-yoko (\\u7E26\\u4E2D\\u6A2A) in Japanese, or as \\u76F4\\u66F8\\u6A6B\\u5411 in Chinese.`},{name:\"text-decoration-skip\",status:\"experimental\",syntax:\"none | [ objects || [ spaces | [ leading-spaces || trailing-spaces ] ] || edges || box-decoration ]\",relevance:52,browsers:[\"S12.1\",\"C57\",\"O44\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip\"}],description:\"The text-decoration-skip CSS property specifies what parts of the element\\u2019s content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.\"},{name:\"text-decoration-skip-ink\",syntax:\"auto | all | none\",relevance:50,browsers:[\"E79\",\"FF70\",\"S15.4\",\"C64\",\"O50\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip-ink\"}],description:\"The text-decoration-skip-ink CSS property specifies how overlines and underlines are drawn when they pass over glyph ascenders and descenders.\"},{name:\"text-decoration-thickness\",syntax:\"auto | from-font | <length> | <percentage> \",relevance:50,browsers:[\"E89\",\"FF70\",\"S12.1\",\"C89\",\"O75\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness\"}],description:\"The text-decoration-thickness CSS property sets the thickness, or width, of the decoration line that is used on text in an element, such as a line-through, underline, or overline.\"},{name:\"text-emphasis\",syntax:\"<'text-emphasis-style'> || <'text-emphasis-color'>\",relevance:50,browsers:[\"E79\",\"FF46\",\"S7\",\"C25\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-emphasis\"}],description:\"The text-emphasis CSS property is a shorthand property for setting text-emphasis-style and text-emphasis-color in one declaration. This property will apply the specified emphasis mark to each character of the element's text, except separator characters, like spaces,  and control characters.\"},{name:\"text-emphasis-color\",syntax:\"<color>\",relevance:50,browsers:[\"E79\",\"FF46\",\"S7\",\"C25\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-emphasis-color\"}],description:\"The text-emphasis-color CSS property defines the color used to draw emphasis marks on text being rendered in the HTML document. This value can also be set and reset using the text-emphasis shorthand.\"},{name:\"text-emphasis-position\",syntax:\"[ over | under ] && [ right | left ]\",relevance:50,browsers:[\"E79\",\"FF46\",\"S7\",\"C25\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-emphasis-position\"}],description:\"The text-emphasis-position CSS property describes where emphasis marks are drawn at. The effect of emphasis marks on the line height is the same as for ruby text: if there isn't enough place, the line height is increased.\"},{name:\"text-emphasis-style\",syntax:\"none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>\",relevance:50,browsers:[\"E79\",\"FF46\",\"S7\",\"C25\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-emphasis-style\"}],description:\"The text-emphasis-style CSS property defines the type of emphasis used. It can also be set, and reset, using the text-emphasis shorthand.\"},{name:\"text-size-adjust\",status:\"experimental\",syntax:\"none | auto | <percentage>\",relevance:57,browsers:[\"E79\",\"C54\",\"O41\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-size-adjust\"}],description:\"The text-size-adjust CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.\"},{name:\"text-underline-offset\",syntax:\"auto | <length> | <percentage> \",relevance:50,browsers:[\"E87\",\"FF70\",\"S12.1\",\"C87\",\"O73\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/text-underline-offset\"}],description:\"The text-underline-offset CSS property sets the offset distance of an underline text decoration line (applied using text-decoration) from its original position.\"},{name:\"transform-box\",syntax:\"content-box | border-box | fill-box | stroke-box | view-box\",relevance:50,browsers:[\"E79\",\"FF55\",\"S11\",\"C64\",\"O51\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/transform-box\"}],description:\"The transform-box CSS property defines the layout box to which the transform and transform-origin properties relate.\"},{name:\"translate\",syntax:\"none | <length-percentage> [ <length-percentage> <length>? ]?\",relevance:50,browsers:[\"FF72\",\"S14.1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/translate\"}],description:\"The translate CSS property allows you to specify translation transforms individually and independently of the transform property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the transform value.\"},{name:\"white-space\",syntax:\"normal | pre | nowrap | pre-wrap | pre-line | break-spaces\",relevance:90,references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/white-space\"}],description:\"Specifies how whitespace is handled in an element.\"},{name:\"speak-as\",syntax:\"auto | bullets | numbers | words | spell-out | <counter-style-name>\",relevance:50,description:\"The speak-as descriptor specifies how a counter symbol constructed with a given @counter-style will be represented in the spoken form. For example, an author can specify a counter symbol to be either spoken as its numerical value or just represented with an audio cue.\"},{name:\"ascent-override\",status:\"experimental\",syntax:\"normal | <percentage>\",relevance:50,description:\"Describes the ascent metric of a font.\"},{name:\"descent-override\",status:\"experimental\",syntax:\"normal | <percentage>\",relevance:50,description:\"Describes the descent metric of a font.\"},{name:\"font-display\",status:\"experimental\",syntax:\"[ auto | block | swap | fallback | optional ]\",relevance:70,description:\"The font-display descriptor determines how a font face is displayed based on whether and when it is downloaded and ready to use.\"},{name:\"line-gap-override\",status:\"experimental\",syntax:\"normal | <percentage>\",relevance:50,description:\"Describes the line-gap metric of a font.\"},{name:\"size-adjust\",status:\"experimental\",syntax:\"<percentage>\",relevance:50,description:\"A multiplier for glyph outlines and metrics of a font.\"},{name:\"bleed\",syntax:\"auto | <length>\",relevance:50,description:\"The bleed CSS at-rule descriptor, used with the @page at-rule, specifies the extent of the page bleed area outside the page box. This property only has effect if crop marks are enabled using the marks property.\"},{name:\"marks\",syntax:\"none | [ crop || cross ]\",relevance:50,description:\"The marks CSS at-rule descriptor, used with the @page at-rule, adds crop and/or cross marks to the presentation of the document. Crop marks indicate where the page should be cut. Cross marks are used to align sheets.\"},{name:\"syntax\",status:\"experimental\",syntax:\"<string>\",relevance:50,description:\"Specifies the syntax of the custom property registration represented by the @property rule, controlling how the property\\u2019s value is parsed at computed value time.\"},{name:\"inherits\",status:\"experimental\",syntax:\"true | false\",relevance:50,description:\"Specifies the inherit flag of the custom property registration represented by the @property rule, controlling whether or not the property inherits by default.\"},{name:\"initial-value\",status:\"experimental\",syntax:\"<string>\",relevance:50,description:\"Specifies the initial value of the custom property registration represented by the @property rule, controlling the property\\u2019s initial value.\"},{name:\"max-zoom\",syntax:\"auto | <number> | <percentage>\",relevance:50,description:`The max-zoom CSS descriptor sets the maximum zoom factor of a document defined by the @viewport at-rule. The browser will not zoom in any further than this, whether automatically or at the user's request.\n\nA zoom factor of 1.0 or 100% corresponds to no zooming. Larger values are zoomed in. Smaller values are zoomed out.`},{name:\"min-zoom\",syntax:\"auto | <number> | <percentage>\",relevance:50,description:`The min-zoom CSS descriptor sets the minimum zoom factor of a document defined by the @viewport at-rule. The browser will not zoom out any further than this, whether automatically or at the user's request.\n\nA zoom factor of 1.0 or 100% corresponds to no zooming. Larger values are zoomed in. Smaller values are zoomed out.`},{name:\"orientation\",syntax:\"auto | portrait | landscape\",relevance:50,description:\"The orientation CSS @media media feature can be used to apply styles based on the orientation of the viewport (or the page box, for paged media).\"},{name:\"user-zoom\",syntax:\"zoom | fixed\",relevance:50,description:\"The user-zoom CSS descriptor controls whether or not the user can change the zoom factor of a document defined by @viewport.\"},{name:\"viewport-fit\",syntax:\"auto | contain | cover\",relevance:50,description:\"The border-block-style CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation.\"}],atDirectives:[{name:\"@charset\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@charset\"}],description:\"Defines character set of the document.\"},{name:\"@counter-style\",browsers:[\"E91\",\"FF33\",\"C91\",\"O77\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@counter-style\"}],description:\"Defines a custom counter style.\"},{name:\"@font-face\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@font-face\"}],description:\"Allows for linking to fonts that are automatically activated when needed. This permits authors to work around the limitation of 'web-safe' fonts, allowing for consistent rendering independent of the fonts available in a given user's environment.\"},{name:\"@font-feature-values\",browsers:[\"FF34\",\"S9.1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@font-feature-values\"}],description:\"Defines named values for the indices used to select alternate glyphs for a given font family.\"},{name:\"@import\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@import\"}],description:\"Includes content of another file.\"},{name:\"@keyframes\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@keyframes\"}],description:\"Defines set of animation key frames.\"},{name:\"@media\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@media\"}],description:\"Defines a stylesheet for a particular media type.\"},{name:\"@-moz-document\",browsers:[\"FF1.8\"],description:\"Gecko-specific at-rule that restricts the style rules contained within it based on the URL of the document.\"},{name:\"@-moz-keyframes\",browsers:[\"FF5\"],description:\"Defines set of animation key frames.\"},{name:\"@-ms-viewport\",browsers:[\"E\",\"IE10\"],description:\"Specifies the size, zoom factor, and orientation of the viewport.\"},{name:\"@namespace\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@namespace\"}],description:\"Declares a prefix and associates it with a namespace name.\"},{name:\"@-o-keyframes\",browsers:[\"O12\"],description:\"Defines set of animation key frames.\"},{name:\"@-o-viewport\",browsers:[\"O11\"],description:\"Specifies the size, zoom factor, and orientation of the viewport.\"},{name:\"@page\",browsers:[\"E12\",\"FF19\",\"C2\",\"IE8\",\"O6\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@page\"}],description:\"Directive defines various page parameters.\"},{name:\"@supports\",browsers:[\"E12\",\"FF22\",\"S9\",\"C28\",\"O12.1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/@supports\"}],description:\"A conditional group rule whose condition tests whether the user agent supports CSS property:value pairs.\"},{name:\"@-webkit-keyframes\",browsers:[\"C\",\"S4\"],description:\"Defines set of animation key frames.\"}],pseudoClasses:[{name:\":active\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:active\"}],description:\"Applies while an element is being activated by the user. For example, between the times the user presses the mouse button and releases it.\"},{name:\":any-link\",browsers:[\"E79\",\"FF50\",\"S9\",\"C65\",\"O52\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:any-link\"}],description:\"Represents an element that acts as the source anchor of a hyperlink. Applies to both visited and unvisited links.\"},{name:\":checked\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:checked\"}],description:\"Radio and checkbox elements can be toggled by the user. Some menu items are 'checked' when the user selects them. When such elements are toggled 'on' the :checked pseudo-class applies.\"},{name:\":corner-present\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Indicates whether or not a scrollbar corner is present.\"},{name:\":decrement\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Applies to buttons and track pieces. Indicates whether or not the button or track piece will decrement the view\\u2019s position when used.\"},{name:\":default\",browsers:[\"E79\",\"FF4\",\"S5\",\"C10\",\"O10\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:default\"}],description:\"Applies to the one or more UI elements that are the default among a set of similar elements. Typically applies to context menu items, buttons, and select lists/menus.\"},{name:\":disabled\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:disabled\"}],description:\"Represents user interface elements that are in a disabled state; such elements have a corresponding enabled state.\"},{name:\":double-button\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Applies to buttons and track pieces. Applies when both buttons are displayed together at the same end of the scrollbar.\"},{name:\":empty\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:empty\"}],description:\"Represents an element that has no children at all.\"},{name:\":enabled\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:enabled\"}],description:\"Represents user interface elements that are in an enabled state; such elements have a corresponding disabled state.\"},{name:\":end\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Applies to buttons and track pieces. Indicates whether the object is placed after the thumb.\"},{name:\":first\",browsers:[\"E12\",\"S6\",\"C18\",\"IE8\",\"O9.2\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:first\"}],description:\"When printing double-sided documents, the page boxes on left and right pages may be different. This can be expressed through CSS pseudo-classes defined in the  page context.\"},{name:\":first-child\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:first-child\"}],description:\"Same as :nth-child(1). Represents an element that is the first child of some other element.\"},{name:\":first-of-type\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:first-of-type\"}],description:\"Same as :nth-of-type(1). Represents an element that is the first sibling of its type in the list of children of its parent element.\"},{name:\":focus\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:focus\"}],description:\"Applies while an element has the focus (accepts keyboard or mouse events, or other forms of input).\"},{name:\":fullscreen\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:fullscreen\"}],description:\"Matches any element that has its fullscreen flag set.\"},{name:\":future\",browsers:[\"S7\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:future\"}],description:\"Represents any element that is defined to occur entirely after a :current element.\"},{name:\":horizontal\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Applies to any scrollbar pieces that have a horizontal orientation.\"},{name:\":host\",browsers:[\"E79\",\"FF63\",\"S10\",\"C54\",\"O41\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:host\"}],description:\"When evaluated in the context of a shadow tree, matches the shadow tree\\u2019s host element.\"},{name:\":host()\",browsers:[\"C35\",\"O22\"],description:\"When evaluated in the context of a shadow tree, it matches the shadow tree\\u2019s host element if the host element, in its normal context, matches the selector argument.\"},{name:\":host-context()\",browsers:[\"C35\",\"O22\"],description:\"Tests whether there is an ancestor, outside the shadow tree, which matches a particular selector.\"},{name:\":hover\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:hover\"}],description:\"Applies while the user designates an element with a pointing device, but does not necessarily activate it. For example, a visual user agent could apply this pseudo-class when the cursor (mouse pointer) hovers over a box generated by the element.\"},{name:\":increment\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Applies to buttons and track pieces. Indicates whether or not the button or track piece will increment the view\\u2019s position when used.\"},{name:\":indeterminate\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:indeterminate\"}],description:\"Applies to UI elements whose value is in an indeterminate state.\"},{name:\":in-range\",browsers:[\"E13\",\"FF29\",\"S5.1\",\"C10\",\"O11\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:in-range\"}],description:\"Used in conjunction with the min and max attributes, whether on a range input, a number field, or any other types that accept those attributes.\"},{name:\":invalid\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:invalid\"}],description:\"An element is :valid or :invalid when it is, respectively, valid or invalid with respect to data validity semantics defined by a different specification.\"},{name:\":lang()\",browsers:[\"E\",\"C\",\"FF1\",\"IE8\",\"O8\",\"S3\"],description:\"Represents an element that is in language specified.\"},{name:\":last-child\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:last-child\"}],description:\"Same as :nth-last-child(1). Represents an element that is the last child of some other element.\"},{name:\":last-of-type\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:last-of-type\"}],description:\"Same as :nth-last-of-type(1). Represents an element that is the last sibling of its type in the list of children of its parent element.\"},{name:\":left\",browsers:[\"E12\",\"S5.1\",\"C6\",\"IE8\",\"O9.2\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:left\"}],description:\"When printing double-sided documents, the page boxes on left and right pages may be different. This can be expressed through CSS pseudo-classes defined in the  page context.\"},{name:\":link\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:link\"}],description:\"Applies to links that have not yet been visited.\"},{name:\":matches()\",browsers:[\"S9\"],description:\"Takes a selector list as its argument. It represents an element that is represented by its argument.\"},{name:\":-moz-any()\",browsers:[\"FF4\"],description:\"Represents an element that is represented by the selector list passed as its argument. Standardized as :matches().\"},{name:\":-moz-any-link\",browsers:[\"FF1\"],description:\"Represents an element that acts as the source anchor of a hyperlink. Applies to both visited and unvisited links.\"},{name:\":-moz-broken\",browsers:[\"FF3\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:-moz-broken\"}],description:\"Non-standard. Matches elements representing broken images.\"},{name:\":-moz-drag-over\",browsers:[\"FF1\"],description:\"Non-standard. Matches elements when a drag-over event applies to it.\"},{name:\":-moz-first-node\",browsers:[\"FF1\"],description:\"Non-standard. Represents an element that is the first child node of some other element.\"},{name:\":-moz-focusring\",browsers:[\"FF4\"],description:\"Non-standard. Matches an element that has focus and focus ring drawing is enabled in the browser.\"},{name:\":-moz-full-screen\",browsers:[\"FF9\"],description:\"Matches any element that has its fullscreen flag set. Standardized as :fullscreen.\"},{name:\":-moz-last-node\",browsers:[\"FF1\"],description:\"Non-standard. Represents an element that is the last child node of some other element.\"},{name:\":-moz-loading\",browsers:[\"FF3\"],description:\"Non-standard. Matches elements, such as images, that haven\\u2019t started loading yet.\"},{name:\":-moz-only-whitespace\",browsers:[\"FF1\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:-moz-only-whitespace\"}],description:\"The same as :empty, except that it additionally matches elements that only contain code points affected by whitespace processing. Standardized as :blank.\"},{name:\":-moz-placeholder\",browsers:[\"FF4\"],description:\"Deprecated. Represents placeholder text in an input field. Use ::-moz-placeholder for Firefox 19+.\"},{name:\":-moz-submit-invalid\",browsers:[\"FF88\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:-moz-submit-invalid\"}],description:\"Non-standard. Represents any submit button when the contents of the associated form are not valid.\"},{name:\":-moz-suppressed\",browsers:[\"FF3\"],description:\"Non-standard. Matches elements representing images that have been blocked from loading.\"},{name:\":-moz-ui-invalid\",browsers:[\"FF4\"],description:\"Non-standard. Represents any validated form element whose value isn't valid \"},{name:\":-moz-ui-valid\",browsers:[\"FF4\"],description:\"Non-standard. Represents any validated form element whose value is valid \"},{name:\":-moz-user-disabled\",browsers:[\"FF3\"],description:\"Non-standard. Matches elements representing images that have been disabled due to the user\\u2019s preferences.\"},{name:\":-moz-window-inactive\",browsers:[\"FF4\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:-moz-window-inactive\"}],description:\"Non-standard. Matches elements in an inactive window.\"},{name:\":-ms-fullscreen\",browsers:[\"IE11\"],description:\"Matches any element that has its fullscreen flag set.\"},{name:\":-ms-input-placeholder\",browsers:[\"IE10\"],description:\"Represents placeholder text in an input field. Note: for Edge use the pseudo-element ::-ms-input-placeholder. Standardized as ::placeholder.\"},{name:\":-ms-keyboard-active\",browsers:[\"IE10\"],description:\"Windows Store apps only. Applies one or more styles to an element when it has focus and the user presses the space bar.\"},{name:\":-ms-lang()\",browsers:[\"E\",\"IE10\"],description:\"Represents an element that is in the language specified. Accepts a comma separated list of language tokens.\"},{name:\":no-button\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Applies to track pieces. Applies when there is no button at that end of the track.\"},{name:\":not()\",browsers:[\"E\",\"C\",\"FF1\",\"IE9\",\"O9.5\",\"S2\"],description:\"The negation pseudo-class, :not(X), is a functional notation taking a simple selector (excluding the negation pseudo-class itself) as an argument. It represents an element that is not represented by its argument.\"},{name:\":nth-child()\",browsers:[\"E\",\"C\",\"FF3.5\",\"IE9\",\"O9.5\",\"S3.1\"],description:\"Represents an element that has an+b-1 siblings before it in the document tree, for any positive integer or zero value of n, and has a parent element.\"},{name:\":nth-last-child()\",browsers:[\"E\",\"C\",\"FF3.5\",\"IE9\",\"O9.5\",\"S3.1\"],description:\"Represents an element that has an+b-1 siblings after it in the document tree, for any positive integer or zero value of n, and has a parent element.\"},{name:\":nth-last-of-type()\",browsers:[\"E\",\"C\",\"FF3.5\",\"IE9\",\"O9.5\",\"S3.1\"],description:\"Represents an element that has an+b-1 siblings with the same expanded element name after it in the document tree, for any zero or positive integer value of n, and has a parent element.\"},{name:\":nth-of-type()\",browsers:[\"E\",\"C\",\"FF3.5\",\"IE9\",\"O9.5\",\"S3.1\"],description:\"Represents an element that has an+b-1 siblings with the same expanded element name before it in the document tree, for any zero or positive integer value of n, and has a parent element.\"},{name:\":only-child\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:only-child\"}],description:\"Represents an element that has a parent element and whose parent element has no other element children. Same as :first-child:last-child or :nth-child(1):nth-last-child(1), but with a lower specificity.\"},{name:\":only-of-type\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:only-of-type\"}],description:\"Matches every element that is the only child of its type, of its parent. Same as :first-of-type:last-of-type or :nth-of-type(1):nth-last-of-type(1), but with a lower specificity.\"},{name:\":optional\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:optional\"}],description:\"A form element is :required or :optional if a value for it is, respectively, required or optional before the form it belongs to is submitted. Elements that are not form elements are neither required nor optional.\"},{name:\":out-of-range\",browsers:[\"E13\",\"FF29\",\"S5.1\",\"C10\",\"O11\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:out-of-range\"}],description:\"Used in conjunction with the min and max attributes, whether on a range input, a number field, or any other types that accept those attributes.\"},{name:\":past\",browsers:[\"S7\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:past\"}],description:\"Represents any element that is defined to occur entirely prior to a :current element.\"},{name:\":read-only\",browsers:[\"E13\",\"FF78\",\"S4\",\"C1\",\"O9\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:read-only\"}],description:\"An element whose contents are not user-alterable is :read-only. However, elements whose contents are user-alterable (such as text input fields) are considered to be in a :read-write state. In typical documents, most elements are :read-only.\"},{name:\":read-write\",browsers:[\"E13\",\"FF78\",\"S4\",\"C1\",\"O9\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:read-write\"}],description:\"An element whose contents are not user-alterable is :read-only. However, elements whose contents are user-alterable (such as text input fields) are considered to be in a :read-write state. In typical documents, most elements are :read-only.\"},{name:\":required\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:required\"}],description:\"A form element is :required or :optional if a value for it is, respectively, required or optional before the form it belongs to is submitted. Elements that are not form elements are neither required nor optional.\"},{name:\":right\",browsers:[\"E12\",\"S5.1\",\"C6\",\"IE8\",\"O9.2\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:right\"}],description:\"When printing double-sided documents, the page boxes on left and right pages may be different. This can be expressed through CSS pseudo-classes defined in the  page context.\"},{name:\":root\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:root\"}],description:\"Represents an element that is the root of the document. In HTML 4, this is always the HTML element.\"},{name:\":scope\",browsers:[\"E79\",\"FF32\",\"S7\",\"C27\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:scope\"}],description:\"Represents any element that is in the contextual reference element set.\"},{name:\":single-button\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Applies to buttons and track pieces. Applies when both buttons are displayed separately at either end of the scrollbar.\"},{name:\":start\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Applies to buttons and track pieces. Indicates whether the object is placed before the thumb.\"},{name:\":target\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:target\"}],description:\"Some URIs refer to a location within a resource. This kind of URI ends with a 'number sign' (#) followed by an anchor identifier (called the fragment identifier).\"},{name:\":valid\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:valid\"}],description:\"An element is :valid or :invalid when it is, respectively, valid or invalid with respect to data validity semantics defined by a different specification.\"},{name:\":vertical\",browsers:[\"C\",\"S5\"],description:\"Non-standard. Applies to any scrollbar pieces that have a vertical orientation.\"},{name:\":visited\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:visited\"}],description:\"Applies once the link has been visited by the user.\"},{name:\":-webkit-any()\",browsers:[\"C\",\"S5\"],description:\"Represents an element that is represented by the selector list passed as its argument. Standardized as :matches().\"},{name:\":-webkit-full-screen\",browsers:[\"C\",\"S6\"],description:\"Matches any element that has its fullscreen flag set. Standardized as :fullscreen.\"},{name:\":window-inactive\",browsers:[\"C\",\"S3\"],description:\"Non-standard. Applies to all scrollbar pieces. Indicates whether or not the window containing the scrollbar is currently active.\"},{name:\":current\",status:\"experimental\",description:\"The :current CSS pseudo-class selector is a time-dimensional pseudo-class that represents the element, or an ancestor of the element, that is currently being displayed\"},{name:\":blank\",status:\"experimental\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:blank\"}],description:\"The :blank CSS pseudo-class selects empty user input elements (eg. <input> or <textarea>).\"},{name:\":defined\",status:\"experimental\",browsers:[\"E79\",\"FF63\",\"S10\",\"C54\",\"O41\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:defined\"}],description:\"The :defined CSS pseudo-class represents any element that has been defined. This includes any standard element built in to the browser, and custom elements that have been successfully defined (i.e. with the CustomElementRegistry.define() method).\"},{name:\":dir\",browsers:[\"FF49\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:dir\"}],description:\"The :dir() CSS pseudo-class matches elements based on the directionality of the text contained in them.\"},{name:\":focus-visible\",browsers:[\"E86\",\"FF85\",\"S15.4\",\"C86\",\"O72\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:focus-visible\"}],description:\"The :focus-visible pseudo-class applies while an element matches the :focus pseudo-class and the UA determines via heuristics that the focus should be made evident on the element.\"},{name:\":focus-within\",browsers:[\"E79\",\"FF52\",\"S10.1\",\"C60\",\"O47\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:focus-within\"}],description:\"The :focus-within pseudo-class applies to any element for which the :focus pseudo class applies as well as to an element whose descendant in the flat tree (including non-element nodes, such as text nodes) matches the conditions for matching :focus.\"},{name:\":has\",status:\"experimental\",browsers:[\"S15.4\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:has\"}],description:\":The :has() CSS pseudo-class represents an element if any of the selectors passed as parameters (relative to the :scope of the given element), match at least one element.\"},{name:\":is\",status:\"experimental\",browsers:[\"E88\",\"FF78\",\"S14\",\"C88\",\"O74\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:is\"}],description:\"The :is() CSS pseudo-class function takes a selector list as its argument, and selects any element that can be selected by one of the selectors in that list. This is useful for writing large selectors in a more compact form.\"},{name:\":local-link\",status:\"experimental\",description:\"The :local-link CSS pseudo-class represents an link to the same document\"},{name:\":nth-col\",status:\"experimental\",description:\"The :nth-col() CSS pseudo-class is designed for tables and grids. It accepts the An+B notation such as used with the :nth-child selector, using this to target every nth column. \"},{name:\":nth-last-col\",status:\"experimental\",description:\"The :nth-last-col() CSS pseudo-class is designed for tables and grids. It accepts the An+B notation such as used with the :nth-child selector, using this to target every nth column before it, therefore counting back from the end of the set of columns.\"},{name:\":paused\",status:\"experimental\",description:\"The :paused CSS pseudo-class selector is a resource state pseudo-class that will match an audio, video, or similar resource that is capable of being \\u201Cplayed\\u201D or \\u201Cpaused\\u201D, when that element is \\u201Cpaused\\u201D.\"},{name:\":placeholder-shown\",status:\"experimental\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:placeholder-shown\"}],description:\"The :placeholder-shown CSS pseudo-class represents any <input> or <textarea> element that is currently displaying placeholder text.\"},{name:\":playing\",status:\"experimental\",description:\"The :playing CSS pseudo-class selector is a resource state pseudo-class that will match an audio, video, or similar resource that is capable of being \\u201Cplayed\\u201D or \\u201Cpaused\\u201D, when that element is \\u201Cplaying\\u201D. \"},{name:\":target-within\",status:\"experimental\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:target-within\"}],description:\"The :target-within CSS pseudo-class represents an element that is a target element or contains an element that is a target. A target element is a unique element with an id matching the URL's fragment.\"},{name:\":user-invalid\",status:\"experimental\",browsers:[\"FF88\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:user-invalid\"}],description:\"The :user-invalid CSS pseudo-class represents any validated form element whose value isn't valid based on their validation constraints, after the user has interacted with it.\"},{name:\":user-valid\",status:\"experimental\",browsers:[\"FF88\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:user-valid\"}],description:\"The :user-valid CSS pseudo-class represents any validated form element whose value validates correctly based on its validation constraints. However, unlike :valid it only matches once the user has interacted with it.\"},{name:\":where\",status:\"experimental\",browsers:[\"E88\",\"FF78\",\"S14\",\"C88\",\"O74\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/:where\"}],description:\"The :where() CSS pseudo-class function takes a selector list as its argument, and selects any element that can be selected by one of the selectors in that list.\"},{name:\":picture-in-picture\",status:\"experimental\",description:\"The :picture-in-picture CSS pseudo-class matches the element which is currently in picture-in-picture mode.\"}],pseudoElements:[{name:\"::after\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::after\"}],description:\"Represents a styleable child pseudo-element immediately after the originating element\\u2019s actual content.\"},{name:\"::backdrop\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::backdrop\"}],description:\"Used to create a backdrop that hides the underlying document for an element in a top layer (such as an element that is displayed fullscreen).\"},{name:\"::before\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::before\"}],description:\"Represents a styleable child pseudo-element immediately before the originating element\\u2019s actual content.\"},{name:\"::content\",browsers:[\"C35\",\"O22\"],description:\"Deprecated. Matches the distribution list itself, on elements that have one. Use ::slotted for forward compatibility.\"},{name:\"::cue\",browsers:[\"E79\",\"FF55\",\"S7\",\"C26\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::cue\"}]},{name:\"::cue()\",browsers:[\"C\",\"O16\",\"S6\"]},{name:\"::cue-region\",browsers:[\"C\",\"O16\",\"S6\"]},{name:\"::cue-region()\",browsers:[\"C\",\"O16\",\"S6\"]},{name:\"::first-letter\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::first-letter\"}],description:\"Represents the first letter of an element, if it is not preceded by any other content (such as images or inline tables) on its line.\"},{name:\"::first-line\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::first-line\"}],description:\"Describes the contents of the first formatted line of its originating element.\"},{name:\"::-moz-focus-inner\",browsers:[\"FF4\"]},{name:\"::-moz-focus-outer\",browsers:[\"FF4\"]},{name:\"::-moz-list-bullet\",browsers:[\"FF1\"],description:\"Used to style the bullet of a list element. Similar to the standardized ::marker.\"},{name:\"::-moz-list-number\",browsers:[\"FF1\"],description:\"Used to style the numbers of a list element. Similar to the standardized ::marker.\"},{name:\"::-moz-placeholder\",browsers:[\"FF19\"],description:\"Represents placeholder text in an input field\"},{name:\"::-moz-progress-bar\",browsers:[\"FF9\"],description:\"Represents the bar portion of a progress bar.\"},{name:\"::-moz-selection\",browsers:[\"FF1\"],description:\"Represents the portion of a document that has been highlighted by the user.\"},{name:\"::-ms-backdrop\",browsers:[\"IE11\"],description:\"Used to create a backdrop that hides the underlying document for an element in a top layer (such as an element that is displayed fullscreen).\"},{name:\"::-ms-browse\",browsers:[\"E\",\"IE10\"],description:\"Represents the browse button of an input type=file control.\"},{name:\"::-ms-check\",browsers:[\"E\",\"IE10\"],description:\"Represents the check of a checkbox or radio button input control.\"},{name:\"::-ms-clear\",browsers:[\"E\",\"IE10\"],description:\"Represents the clear button of a text input control\"},{name:\"::-ms-expand\",browsers:[\"E\",\"IE10\"],description:\"Represents the drop-down button of a select control.\"},{name:\"::-ms-fill\",browsers:[\"E\",\"IE10\"],description:\"Represents the bar portion of a progress bar.\"},{name:\"::-ms-fill-lower\",browsers:[\"E\",\"IE10\"],description:\"Represents the portion of the slider track from its smallest value up to the value currently selected by the thumb. In a left-to-right layout, this is the portion of the slider track to the left of the thumb.\"},{name:\"::-ms-fill-upper\",browsers:[\"E\",\"IE10\"],description:\"Represents the portion of the slider track from the value currently selected by the thumb up to the slider's largest value. In a left-to-right layout, this is the portion of the slider track to the right of the thumb.\"},{name:\"::-ms-reveal\",browsers:[\"E\",\"IE10\"],description:\"Represents the password reveal button of an input type=password control.\"},{name:\"::-ms-thumb\",browsers:[\"E\",\"IE10\"],description:\"Represents the portion of range input control (also known as a slider control) that the user drags.\"},{name:\"::-ms-ticks-after\",browsers:[\"E\",\"IE10\"],description:\"Represents the tick marks of a slider that begin just after the thumb and continue up to the slider's largest value. In a left-to-right layout, these are the ticks to the right of the thumb.\"},{name:\"::-ms-ticks-before\",browsers:[\"E\",\"IE10\"],description:\"Represents the tick marks of a slider that represent its smallest values up to the value currently selected by the thumb. In a left-to-right layout, these are the ticks to the left of the thumb.\"},{name:\"::-ms-tooltip\",browsers:[\"E\",\"IE10\"],description:\"Represents the tooltip of a slider (input type=range).\"},{name:\"::-ms-track\",browsers:[\"E\",\"IE10\"],description:\"Represents the track of a slider.\"},{name:\"::-ms-value\",browsers:[\"E\",\"IE10\"],description:\"Represents the content of a text or password input control, or a select control.\"},{name:\"::selection\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::selection\"}],description:\"Represents the portion of a document that has been highlighted by the user.\"},{name:\"::shadow\",browsers:[\"C35\",\"O22\"],description:\"Matches the shadow root if an element has a shadow tree.\"},{name:\"::-webkit-file-upload-button\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-inner-spin-button\",browsers:[\"E79\",\"S5\",\"C6\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-inner-spin-button\"}]},{name:\"::-webkit-input-placeholder\",browsers:[\"C\",\"S4\"]},{name:\"::-webkit-keygen-select\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-meter-bar\",browsers:[\"E79\",\"S5.1\",\"C12\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-meter-bar\"}]},{name:\"::-webkit-meter-even-less-good-value\",browsers:[\"E79\",\"S5.1\",\"C12\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-meter-even-less-good-value\"}]},{name:\"::-webkit-meter-optimum-value\",browsers:[\"E79\",\"S5.1\",\"C12\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-meter-optimum-value\"}]},{name:\"::-webkit-meter-suboptimum-value\",browsers:[\"E79\",\"S5.1\",\"C12\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-meter-suboptimum-value\"}]},{name:\"::-webkit-outer-spin-button\",browsers:[\"S5\",\"C6\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-outer-spin-button\"}]},{name:\"::-webkit-progress-bar\",browsers:[\"E79\",\"S7\",\"C25\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-progress-bar\"}]},{name:\"::-webkit-progress-inner-element\",browsers:[\"E79\",\"S7\",\"C23\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-progress-inner-element\"}]},{name:\"::-webkit-progress-value\",browsers:[\"E79\",\"S7\",\"C25\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-progress-value\"}]},{name:\"::-webkit-resizer\",browsers:[\"E79\",\"S4\",\"C2\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar\"}]},{name:\"::-webkit-scrollbar\",browsers:[\"E79\",\"S4\",\"C2\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar\"}]},{name:\"::-webkit-scrollbar-button\",browsers:[\"E79\",\"S4\",\"C2\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar\"}]},{name:\"::-webkit-scrollbar-corner\",browsers:[\"E79\",\"S4\",\"C2\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar\"}]},{name:\"::-webkit-scrollbar-thumb\",browsers:[\"E79\",\"S4\",\"C2\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar\"}]},{name:\"::-webkit-scrollbar-track\",browsers:[\"E79\",\"S4\",\"C2\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar\"}]},{name:\"::-webkit-scrollbar-track-piece\",browsers:[\"E79\",\"S4\",\"C2\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-scrollbar\"}]},{name:\"::-webkit-search-cancel-button\",browsers:[\"E79\",\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-search-cancel-button\"}]},{name:\"::-webkit-search-decoration\",browsers:[\"C\",\"S4\"]},{name:\"::-webkit-search-results-button\",browsers:[\"E79\",\"S3\",\"C1\",\"O15\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-webkit-search-results-button\"}]},{name:\"::-webkit-search-results-decoration\",browsers:[\"C\",\"S4\"]},{name:\"::-webkit-slider-runnable-track\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-slider-thumb\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-textfield-decoration-container\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-validation-bubble\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-validation-bubble-arrow\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-validation-bubble-arrow-clipper\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-validation-bubble-heading\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-validation-bubble-message\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::-webkit-validation-bubble-text-block\",browsers:[\"C\",\"O\",\"S6\"]},{name:\"::target-text\",status:\"experimental\",browsers:[\"E89\",\"C89\",\"O75\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::target-text\"}],description:\"The ::target-text CSS pseudo-element represents the text that has been scrolled to if the browser supports scroll-to-text fragments. It allows authors to choose how to highlight that section of text.\"},{name:\"::-moz-range-progress\",status:\"nonstandard\",browsers:[\"FF22\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-moz-range-progress\"}],description:'The ::-moz-range-progress CSS pseudo-element is a Mozilla extension that represents the lower portion of the track (i.e., groove) in which the indicator slides in an <input> of type=\"range\". This portion corresponds to values lower than the value currently selected by the thumb (i.e., virtual knob).'},{name:\"::-moz-range-thumb\",status:\"nonstandard\",browsers:[\"FF21\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-moz-range-thumb\"}],description:`The ::-moz-range-thumb CSS pseudo-element is a Mozilla extension that represents the thumb (i.e., virtual knob) of an <input> of type=\"range\". The user can move the thumb along the input's track to alter its numerical value.`},{name:\"::-moz-range-track\",status:\"nonstandard\",browsers:[\"FF21\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::-moz-range-track\"}],description:'The ::-moz-range-track CSS pseudo-element is a Mozilla extension that represents the track (i.e., groove) in which the indicator slides in an <input> of type=\"range\".'},{name:\"::-webkit-progress-inner-value\",status:\"nonstandard\",description:`The ::-webkit-progress-value CSS pseudo-element represents the filled-in portion of the bar of a <progress> element. It is a child of the ::-webkit-progress-bar pseudo-element.\n\nIn order to let ::-webkit-progress-value take effect, -webkit-appearance needs to be set to none on the <progress> element.`},{name:\"::grammar-error\",status:\"experimental\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::grammar-error\"}],description:\"The ::grammar-error CSS pseudo-element represents a text segment which the user agent has flagged as grammatically incorrect.\"},{name:\"::marker\",browsers:[\"E86\",\"FF68\",\"S11.1\",\"C86\",\"O72\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::marker\"}],description:\"The ::marker CSS pseudo-element selects the marker box of a list item, which typically contains a bullet or number. It works on any element or pseudo-element set to display: list-item, such as the <li> and <summary> elements.\"},{name:\"::part\",status:\"experimental\",browsers:[\"E79\",\"FF72\",\"S13.1\",\"C73\",\"O60\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::part\"}],description:\"The ::part CSS pseudo-element represents any element within a shadow tree that has a matching part attribute.\"},{name:\"::placeholder\",browsers:[\"E79\",\"FF51\",\"S10.1\",\"C57\",\"O44\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::placeholder\"}],description:\"The ::placeholder CSS pseudo-element represents the placeholder text of a form element.\"},{name:\"::slotted\",browsers:[\"E79\",\"FF63\",\"S10\",\"C50\",\"O37\"],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::slotted\"}],description:\"The :slotted() CSS pseudo-element represents any element that has been placed into a slot inside an HTML template.\"},{name:\"::spelling-error\",status:\"experimental\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/CSS/::spelling-error\"}],description:\"The ::spelling-error CSS pseudo-element represents a text segment which the user agent has flagged as incorrectly spelled.\"}]};var Un=function(){function n(e){this._properties=[],this._atDirectives=[],this._pseudoClasses=[],this._pseudoElements=[],this.addData(e)}return n.prototype.provideProperties=function(){return this._properties},n.prototype.provideAtDirectives=function(){return this._atDirectives},n.prototype.providePseudoClasses=function(){return this._pseudoClasses},n.prototype.providePseudoElements=function(){return this._pseudoElements},n.prototype.addData=function(e){if(Array.isArray(e.properties))for(var t=0,r=e.properties;t<r.length;t++){var i=r[t];Ya(i)&&this._properties.push(i)}if(Array.isArray(e.atDirectives))for(var o=0,s=e.atDirectives;o<s.length;o++){var i=s[o];Qa(i)&&this._atDirectives.push(i)}if(Array.isArray(e.pseudoClasses))for(var a=0,l=e.pseudoClasses;a<l.length;a++){var i=l[a];Za(i)&&this._pseudoClasses.push(i)}if(Array.isArray(e.pseudoElements))for(var c=0,h=e.pseudoElements;c<h.length;c++){var i=h[c];el(i)&&this._pseudoElements.push(i)}},n}();function Ya(n){return typeof n.name==\"string\"}function Qa(n){return typeof n.name==\"string\"}function Za(n){return typeof n.name==\"string\"}function el(n){return typeof n.name==\"string\"}var jn=function(){function n(e){this.dataProviders=[],this._propertySet={},this._atDirectiveSet={},this._pseudoClassSet={},this._pseudoElementSet={},this._properties=[],this._atDirectives=[],this._pseudoClasses=[],this._pseudoElements=[],this.setDataProviders(e?.useDefaultDataProvider!==!1,e?.customDataProviders||[])}return n.prototype.setDataProviders=function(e,t){var r;this.dataProviders=[],e&&this.dataProviders.push(new Un(Br)),(r=this.dataProviders).push.apply(r,t),this.collectData()},n.prototype.collectData=function(){var e=this;this._propertySet={},this._atDirectiveSet={},this._pseudoClassSet={},this._pseudoElementSet={},this.dataProviders.forEach(function(t){t.provideProperties().forEach(function(r){e._propertySet[r.name]||(e._propertySet[r.name]=r)}),t.provideAtDirectives().forEach(function(r){e._atDirectiveSet[r.name]||(e._atDirectiveSet[r.name]=r)}),t.providePseudoClasses().forEach(function(r){e._pseudoClassSet[r.name]||(e._pseudoClassSet[r.name]=r)}),t.providePseudoElements().forEach(function(r){e._pseudoElementSet[r.name]||(e._pseudoElementSet[r.name]=r)})}),this._properties=Vt(this._propertySet),this._atDirectives=Vt(this._atDirectiveSet),this._pseudoClasses=Vt(this._pseudoClassSet),this._pseudoElements=Vt(this._pseudoElementSet)},n.prototype.getProperty=function(e){return this._propertySet[e]},n.prototype.getAtDirective=function(e){return this._atDirectiveSet[e]},n.prototype.getPseudoClass=function(e){return this._pseudoClassSet[e]},n.prototype.getPseudoElement=function(e){return this._pseudoElementSet[e]},n.prototype.getProperties=function(){return this._properties},n.prototype.getAtDirectives=function(){return this._atDirectives},n.prototype.getPseudoClasses=function(){return this._pseudoClasses},n.prototype.getPseudoElements=function(){return this._pseudoElements},n.prototype.isKnownProperty=function(e){return e.toLowerCase()in this._propertySet},n.prototype.isStandardProperty=function(e){return this.isKnownProperty(e)&&(!this._propertySet[e.toLowerCase()].status||this._propertySet[e.toLowerCase()].status===\"standard\")},n}();function is(n,e,t){function r(o){for(var s=i(o),a=void 0,l=s.length-1;l>=0;l--)a=ft.create(W.create(n.positionAt(s[l][0]),n.positionAt(s[l][1])),a);return a||(a=ft.create(W.create(o,o))),a}return e.map(r);function i(o){var s=n.offsetAt(o),a=t.findChildAtOffset(s,!0);if(!a)return[];for(var l=[];a;){if(a.parent&&a.offset===a.parent.offset&&a.end===a.parent.end){a=a.parent;continue}a.type===u.Declarations&&s>a.offset&&s<a.end&&l.push([a.offset+1,a.end-1]),l.push([a.offset,a.end]),a=a.parent}return l}}var tl=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!=\"function\"&&t!==null)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),nl=function(n,e,t,r){function i(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function a(h){try{c(r.next(h))}catch(p){s(p)}}function l(h){try{c(r.throw(h))}catch(p){s(p)}}function c(h){h.done?o(h.value):i(h.value).then(a,l)}c((r=r.apply(n,e||[])).next())})},rl=function(n,e){var t={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},r,i,o,s;return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol==\"function\"&&(s[Symbol.iterator]=function(){return this}),s;function a(c){return function(h){return l([c,h])}}function l(c){if(r)throw new TypeError(\"Generator is already executing.\");for(;t;)try{if(r=1,i&&(o=c[0]&2?i.return:c[0]?i.throw||((o=i.return)&&o.call(i),0):i.next)&&!(o=o.call(i,c[1])).done)return o;switch(i=0,o&&(c=[c[0]&2,o.value]),c[0]){case 0:case 1:o=c;break;case 4:return t.label++,{value:c[1],done:!1};case 5:t.label++,i=c[1],c=[0];continue;case 7:c=t.ops.pop(),t.trys.pop();continue;default:if(o=t.trys,!(o=o.length>0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]<o[3])){t.label=c[1];break}if(c[0]===6&&t.label<o[1]){t.label=o[1],o=c;break}if(o&&t.label<o[2]){t.label=o[2],t.ops.push(c);break}o[2]&&t.ops.pop(),t.trys.pop();continue}c=e.call(n,t)}catch(h){c=[6,h],i=0}finally{r=o=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}},os=function(n){tl(e,n);function e(t){return n.call(this,t,!0)||this}return e.prototype.isRawStringDocumentLinkNode=function(t){return n.prototype.isRawStringDocumentLinkNode.call(this,t)||t.type===u.Use||t.type===u.Forward},e.prototype.resolveRelativeReference=function(t,r,i,o){return nl(this,void 0,void 0,function(){function s(m){if(m.path!==\"\"&&!(m.path.endsWith(\".scss\")||m.path.endsWith(\".css\"))){if(m.path.endsWith(\"/\"))return[m.with({path:m.path+\"index.scss\"}).toString(),m.with({path:m.path+\"_index.scss\"}).toString()];var g=m.path.split(\"/\"),w=g[g.length-1],x=m.path.slice(0,-w.length);if(w.startsWith(\"_\"))return m.path.endsWith(\".scss\")?void 0:[m.with({path:m.path+\".scss\"}).toString()];var y=w+\".scss\",D=function(ue){return m.with({path:x+ue}).toString()},M=D(y),z=D(\"_\"+y),P=D(y.slice(0,-5)+\"/index.scss\"),L=D(y.slice(0,-5)+\"/_index.scss\"),$=D(y.slice(0,-5)+\".css\");return[M,z,P,L,$]}}var a,l,c,h,p;return rl(this,function(m){switch(m.label){case 0:return q(t,\"sass:\")?[2,void 0]:[4,n.prototype.resolveRelativeReference.call(this,t,r,i,o)];case 1:if(a=m.sent(),!(this.fileSystemProvider&&a&&o))return[3,8];l=qt.parse(a),m.label=2;case 2:if(m.trys.push([2,7,,8]),c=s(l),!c)return[3,6];h=0,m.label=3;case 3:return h<c.length?[4,this.fileExists(c[h])]:[3,6];case 4:if(m.sent())return[2,c[h]];m.label=5;case 5:return h++,[3,3];case 6:return[3,8];case 7:return p=m.sent(),[3,8];case 8:return[2,a]}})})},e}(Xt);function ss(n){return new Un(n)}function $r(n,e,t,r,i,o,s){return{configure:function(a){o.configure(a),e.configure(a?.completion),t.configure(a?.hover)},setDataProviders:s.setDataProviders.bind(s),doValidation:o.doValidation.bind(o),parseStylesheet:n.parseStylesheet.bind(n),doComplete:e.doComplete.bind(e),doComplete2:e.doComplete2.bind(e),setCompletionParticipants:e.setCompletionParticipants.bind(e),doHover:t.doHover.bind(t),format:rs,findDefinition:r.findDefinition.bind(r),findReferences:r.findReferences.bind(r),findDocumentHighlights:r.findDocumentHighlights.bind(r),findDocumentLinks:r.findDocumentLinks.bind(r),findDocumentLinks2:r.findDocumentLinks2.bind(r),findDocumentSymbols:r.findDocumentSymbols.bind(r),doCodeActions:i.doCodeActions.bind(i),doCodeActions2:i.doCodeActions2.bind(i),findDocumentColors:r.findDocumentColors.bind(r),getColorPresentations:r.getColorPresentations.bind(r),doRename:r.doRename.bind(r),getFoldingRanges:Yo,getSelectionRanges:is}}var qr={};function as(n){n===void 0&&(n=qr);var e=new jn(n);return $r(new gt,new vt(null,n,e),new In(n&&n.clientCapabilities,e),new Xt(n&&n.fileSystemProvider,!1),new Mn(e),new Pn(e),e)}function ls(n){n===void 0&&(n=qr);var e=new jn(n);return $r(new $o,new Ko(n,e),new In(n&&n.clientCapabilities,e),new os(n&&n.fileSystemProvider),new Mn(e),new Pn(e),e)}function cs(n){n===void 0&&(n=qr);var e=new jn(n);return $r(new Ho,new Jo(n,e),new In(n&&n.clientCapabilities,e),new Xt(n&&n.fileSystemProvider,!0),new Mn(e),new Pn(e),e)}var Vn=class{constructor(e,t){this._ctx=e,this._languageSettings=t.options,this._languageId=t.languageId;let r=t.options.data,i=r?.useDefaultDataProvider,o=[];if(r?.dataProviders)for(let a in r.dataProviders)o.push(ss(r.dataProviders[a]));let s={customDataProviders:o,useDefaultDataProvider:i};switch(this._languageId){case\"css\":this._languageService=as(s);break;case\"less\":this._languageService=cs(s);break;case\"scss\":this._languageService=ls(s);break;default:throw new Error(\"Invalid language id: \"+this._languageId)}this._languageService.configure(this._languageSettings)}async doValidation(e){let t=this._getTextDocument(e);if(t){let r=this._languageService.parseStylesheet(t),i=this._languageService.doValidation(t,r);return Promise.resolve(i)}return Promise.resolve([])}async doComplete(e,t){let r=this._getTextDocument(e);if(!r)return null;let i=this._languageService.parseStylesheet(r),o=this._languageService.doComplete(r,t,i);return Promise.resolve(o)}async doHover(e,t){let r=this._getTextDocument(e);if(!r)return null;let i=this._languageService.parseStylesheet(r),o=this._languageService.doHover(r,t,i);return Promise.resolve(o)}async findDefinition(e,t){let r=this._getTextDocument(e);if(!r)return null;let i=this._languageService.parseStylesheet(r),o=this._languageService.findDefinition(r,t,i);return Promise.resolve(o)}async findReferences(e,t){let r=this._getTextDocument(e);if(!r)return[];let i=this._languageService.parseStylesheet(r),o=this._languageService.findReferences(r,t,i);return Promise.resolve(o)}async findDocumentHighlights(e,t){let r=this._getTextDocument(e);if(!r)return[];let i=this._languageService.parseStylesheet(r),o=this._languageService.findDocumentHighlights(r,t,i);return Promise.resolve(o)}async findDocumentSymbols(e){let t=this._getTextDocument(e);if(!t)return[];let r=this._languageService.parseStylesheet(t),i=this._languageService.findDocumentSymbols(t,r);return Promise.resolve(i)}async doCodeActions(e,t,r){let i=this._getTextDocument(e);if(!i)return[];let o=this._languageService.parseStylesheet(i),s=this._languageService.doCodeActions(i,t,r,o);return Promise.resolve(s)}async findDocumentColors(e){let t=this._getTextDocument(e);if(!t)return[];let r=this._languageService.parseStylesheet(t),i=this._languageService.findDocumentColors(t,r);return Promise.resolve(i)}async getColorPresentations(e,t,r){let i=this._getTextDocument(e);if(!i)return[];let o=this._languageService.parseStylesheet(i),s=this._languageService.getColorPresentations(i,o,t,r);return Promise.resolve(s)}async getFoldingRanges(e,t){let r=this._getTextDocument(e);if(!r)return[];let i=this._languageService.getFoldingRanges(r,t);return Promise.resolve(i)}async getSelectionRanges(e,t){let r=this._getTextDocument(e);if(!r)return[];let i=this._languageService.parseStylesheet(r),o=this._languageService.getSelectionRanges(r,t,i);return Promise.resolve(o)}async doRename(e,t,r){let i=this._getTextDocument(e);if(!i)return null;let o=this._languageService.parseStylesheet(i),s=this._languageService.doRename(i,t,r,o);return Promise.resolve(s)}async format(e,t,r){let i=this._getTextDocument(e);if(!i)return[];let o={...this._languageSettings.format,...r},s=this._languageService.format(i,t,o);return Promise.resolve(s)}_getTextDocument(e){let t=this._ctx.getMirrorModels();for(let r of t)if(r.uri.toString()===e)return Lt.create(e,this._languageId,r.version,r.getValue());return null}};function ol(n,e){return new Vn(n,e)}return fs(sl);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/html/htmlMode.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/html/htmlMode\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var rn=Object.create;var Q=Object.defineProperty;var on=Object.getOwnPropertyDescriptor;var sn=Object.getOwnPropertyNames;var an=Object.getPrototypeOf,un=Object.prototype.hasOwnProperty;var dn=(n=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(n,{get:(t,i)=>(typeof require<\"u\"?require:t)[i]}):n)(function(n){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+n+'\" is not supported')});var cn=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),ln=(n,t)=>{for(var i in t)Q(n,i,{get:t[i],enumerable:!0})},q=(n,t,i,r)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let e of sn(t))!un.call(n,e)&&e!==i&&Q(n,e,{get:()=>t[e],enumerable:!(r=on(t,e))||r.enumerable});return n},me=(n,t,i)=>(q(n,t,\"default\"),i&&q(i,t,\"default\")),he=(n,t,i)=>(i=n!=null?rn(an(n)):{},q(t||!n||!n.__esModule?Q(i,\"default\",{value:n,enumerable:!0}):i,n)),gn=n=>q(Q({},\"__esModule\",{value:!0}),n);var Te=cn((Sn,ve)=>{var fn=he(dn(\"vs/editor/editor.api\"));ve.exports=fn});var Dn={};ln(Dn,{CompletionAdapter:()=>B,DefinitionAdapter:()=>ce,DiagnosticsAdapter:()=>de,DocumentColorAdapter:()=>ge,DocumentFormattingEditProvider:()=>H,DocumentHighlightAdapter:()=>S,DocumentLinkAdapter:()=>A,DocumentRangeFormattingEditProvider:()=>K,DocumentSymbolAdapter:()=>M,FoldingRangeAdapter:()=>U,HoverAdapter:()=>L,ReferenceAdapter:()=>le,RenameAdapter:()=>F,SelectionRangeAdapter:()=>j,WorkerManager:()=>b,fromPosition:()=>C,fromRange:()=>fe,setupMode:()=>Wn,setupMode1:()=>Pn,toRange:()=>y,toTextEdit:()=>D});var d={};me(d,he(Te()));var pn=2*60*1e3,b=class{constructor(t){this._defaults=t,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>pn&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=d.editor.createWebWorker({moduleId:\"vs/language/html/htmlWorker\",createData:{languageSettings:this._defaults.options,languageId:this._defaults.languageId},label:this._defaults.languageId}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...t){let i;return this._getClient().then(r=>{i=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(t)}).then(r=>i)}};var ye;(function(n){n.MIN_VALUE=-2147483648,n.MAX_VALUE=2147483647})(ye||(ye={}));var J;(function(n){n.MIN_VALUE=0,n.MAX_VALUE=2147483647})(J||(J={}));var x;(function(n){function t(r,e){return r===Number.MAX_VALUE&&(r=J.MAX_VALUE),e===Number.MAX_VALUE&&(e=J.MAX_VALUE),{line:r,character:e}}n.create=t;function i(r){var e=r;return a.objectLiteral(e)&&a.uinteger(e.line)&&a.uinteger(e.character)}n.is=i})(x||(x={}));var v;(function(n){function t(r,e,o,s){if(a.uinteger(r)&&a.uinteger(e)&&a.uinteger(o)&&a.uinteger(s))return{start:x.create(r,e),end:x.create(o,s)};if(x.is(r)&&x.is(e))return{start:r,end:e};throw new Error(\"Range#create called with invalid arguments[\"+r+\", \"+e+\", \"+o+\", \"+s+\"]\")}n.create=t;function i(r){var e=r;return a.objectLiteral(e)&&x.is(e.start)&&x.is(e.end)}n.is=i})(v||(v={}));var ie;(function(n){function t(r,e){return{uri:r,range:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.range)&&(a.string(e.uri)||a.undefined(e.uri))}n.is=i})(ie||(ie={}));var xe;(function(n){function t(r,e,o,s){return{targetUri:r,targetRange:e,targetSelectionRange:o,originSelectionRange:s}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.targetRange)&&a.string(e.targetUri)&&(v.is(e.targetSelectionRange)||a.undefined(e.targetSelectionRange))&&(v.is(e.originSelectionRange)||a.undefined(e.originSelectionRange))}n.is=i})(xe||(xe={}));var oe;(function(n){function t(r,e,o,s){return{red:r,green:e,blue:o,alpha:s}}n.create=t;function i(r){var e=r;return a.numberRange(e.red,0,1)&&a.numberRange(e.green,0,1)&&a.numberRange(e.blue,0,1)&&a.numberRange(e.alpha,0,1)}n.is=i})(oe||(oe={}));var ke;(function(n){function t(r,e){return{range:r,color:e}}n.create=t;function i(r){var e=r;return v.is(e.range)&&oe.is(e.color)}n.is=i})(ke||(ke={}));var Ie;(function(n){function t(r,e,o){return{label:r,textEdit:e,additionalTextEdits:o}}n.create=t;function i(r){var e=r;return a.string(e.label)&&(a.undefined(e.textEdit)||_.is(e))&&(a.undefined(e.additionalTextEdits)||a.typedArray(e.additionalTextEdits,_.is))}n.is=i})(Ie||(Ie={}));var P;(function(n){n.Comment=\"comment\",n.Imports=\"imports\",n.Region=\"region\"})(P||(P={}));var _e;(function(n){function t(r,e,o,s,u){var l={startLine:r,endLine:e};return a.defined(o)&&(l.startCharacter=o),a.defined(s)&&(l.endCharacter=s),a.defined(u)&&(l.kind=u),l}n.create=t;function i(r){var e=r;return a.uinteger(e.startLine)&&a.uinteger(e.startLine)&&(a.undefined(e.startCharacter)||a.uinteger(e.startCharacter))&&(a.undefined(e.endCharacter)||a.uinteger(e.endCharacter))&&(a.undefined(e.kind)||a.string(e.kind))}n.is=i})(_e||(_e={}));var se;(function(n){function t(r,e){return{location:r,message:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&ie.is(e.location)&&a.string(e.message)}n.is=i})(se||(se={}));var w;(function(n){n.Error=1,n.Warning=2,n.Information=3,n.Hint=4})(w||(w={}));var Ce;(function(n){n.Unnecessary=1,n.Deprecated=2})(Ce||(Ce={}));var be;(function(n){function t(i){var r=i;return r!=null&&a.string(r.href)}n.is=t})(be||(be={}));var Y;(function(n){function t(r,e,o,s,u,l){var f={range:r,message:e};return a.defined(o)&&(f.severity=o),a.defined(s)&&(f.code=s),a.defined(u)&&(f.source=u),a.defined(l)&&(f.relatedInformation=l),f}n.create=t;function i(r){var e,o=r;return a.defined(o)&&v.is(o.range)&&a.string(o.message)&&(a.number(o.severity)||a.undefined(o.severity))&&(a.integer(o.code)||a.string(o.code)||a.undefined(o.code))&&(a.undefined(o.codeDescription)||a.string((e=o.codeDescription)===null||e===void 0?void 0:e.href))&&(a.string(o.source)||a.undefined(o.source))&&(a.undefined(o.relatedInformation)||a.typedArray(o.relatedInformation,se.is))}n.is=i})(Y||(Y={}));var O;(function(n){function t(r,e){for(var o=[],s=2;s<arguments.length;s++)o[s-2]=arguments[s];var u={title:r,command:e};return a.defined(o)&&o.length>0&&(u.arguments=o),u}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.title)&&a.string(e.command)}n.is=i})(O||(O={}));var _;(function(n){function t(o,s){return{range:o,newText:s}}n.replace=t;function i(o,s){return{range:{start:o,end:o},newText:s}}n.insert=i;function r(o){return{range:o,newText:\"\"}}n.del=r;function e(o){var s=o;return a.objectLiteral(s)&&a.string(s.newText)&&v.is(s.range)}n.is=e})(_||(_={}));var R;(function(n){function t(r,e,o){var s={label:r};return e!==void 0&&(s.needsConfirmation=e),o!==void 0&&(s.description=o),s}n.create=t;function i(r){var e=r;return e!==void 0&&a.objectLiteral(e)&&a.string(e.label)&&(a.boolean(e.needsConfirmation)||e.needsConfirmation===void 0)&&(a.string(e.description)||e.description===void 0)}n.is=i})(R||(R={}));var T;(function(n){function t(i){var r=i;return typeof r==\"string\"}n.is=t})(T||(T={}));var I;(function(n){function t(o,s,u){return{range:o,newText:s,annotationId:u}}n.replace=t;function i(o,s,u){return{range:{start:o,end:o},newText:s,annotationId:u}}n.insert=i;function r(o,s){return{range:o,newText:\"\",annotationId:s}}n.del=r;function e(o){var s=o;return _.is(s)&&(R.is(s.annotationId)||T.is(s.annotationId))}n.is=e})(I||(I={}));var Z;(function(n){function t(r,e){return{textDocument:r,edits:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&ee.is(e.textDocument)&&Array.isArray(e.edits)}n.is=i})(Z||(Z={}));var N;(function(n){function t(r,e,o){var s={kind:\"create\",uri:r};return e!==void 0&&(e.overwrite!==void 0||e.ignoreIfExists!==void 0)&&(s.options=e),o!==void 0&&(s.annotationId=o),s}n.create=t;function i(r){var e=r;return e&&e.kind===\"create\"&&a.string(e.uri)&&(e.options===void 0||(e.options.overwrite===void 0||a.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||a.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||T.is(e.annotationId))}n.is=i})(N||(N={}));var V;(function(n){function t(r,e,o,s){var u={kind:\"rename\",oldUri:r,newUri:e};return o!==void 0&&(o.overwrite!==void 0||o.ignoreIfExists!==void 0)&&(u.options=o),s!==void 0&&(u.annotationId=s),u}n.create=t;function i(r){var e=r;return e&&e.kind===\"rename\"&&a.string(e.oldUri)&&a.string(e.newUri)&&(e.options===void 0||(e.options.overwrite===void 0||a.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||a.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||T.is(e.annotationId))}n.is=i})(V||(V={}));var z;(function(n){function t(r,e,o){var s={kind:\"delete\",uri:r};return e!==void 0&&(e.recursive!==void 0||e.ignoreIfNotExists!==void 0)&&(s.options=e),o!==void 0&&(s.annotationId=o),s}n.create=t;function i(r){var e=r;return e&&e.kind===\"delete\"&&a.string(e.uri)&&(e.options===void 0||(e.options.recursive===void 0||a.boolean(e.options.recursive))&&(e.options.ignoreIfNotExists===void 0||a.boolean(e.options.ignoreIfNotExists)))&&(e.annotationId===void 0||T.is(e.annotationId))}n.is=i})(z||(z={}));var ae;(function(n){function t(i){var r=i;return r&&(r.changes!==void 0||r.documentChanges!==void 0)&&(r.documentChanges===void 0||r.documentChanges.every(function(e){return a.string(e.kind)?N.is(e)||V.is(e)||z.is(e):Z.is(e)}))}n.is=t})(ae||(ae={}));var G=function(){function n(t,i){this.edits=t,this.changeAnnotations=i}return n.prototype.insert=function(t,i,r){var e,o;if(r===void 0?e=_.insert(t,i):T.is(r)?(o=r,e=I.insert(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),e=I.insert(t,i,o)),this.edits.push(e),o!==void 0)return o},n.prototype.replace=function(t,i,r){var e,o;if(r===void 0?e=_.replace(t,i):T.is(r)?(o=r,e=I.replace(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),e=I.replace(t,i,o)),this.edits.push(e),o!==void 0)return o},n.prototype.delete=function(t,i){var r,e;if(i===void 0?r=_.del(t):T.is(i)?(e=i,r=I.del(t,i)):(this.assertChangeAnnotations(this.changeAnnotations),e=this.changeAnnotations.manage(i),r=I.del(t,e)),this.edits.push(r),e!==void 0)return e},n.prototype.add=function(t){this.edits.push(t)},n.prototype.all=function(){return this.edits},n.prototype.clear=function(){this.edits.splice(0,this.edits.length)},n.prototype.assertChangeAnnotations=function(t){if(t===void 0)throw new Error(\"Text edit change is not configured to manage change annotations.\")},n}(),we=function(){function n(t){this._annotations=t===void 0?Object.create(null):t,this._counter=0,this._size=0}return n.prototype.all=function(){return this._annotations},Object.defineProperty(n.prototype,\"size\",{get:function(){return this._size},enumerable:!1,configurable:!0}),n.prototype.manage=function(t,i){var r;if(T.is(t)?r=t:(r=this.nextId(),i=t),this._annotations[r]!==void 0)throw new Error(\"Id \"+r+\" is already in use.\");if(i===void 0)throw new Error(\"No annotation provided for id \"+r);return this._annotations[r]=i,this._size++,r},n.prototype.nextId=function(){return this._counter++,this._counter.toString()},n}(),Un=function(){function n(t){var i=this;this._textEditChanges=Object.create(null),t!==void 0?(this._workspaceEdit=t,t.documentChanges?(this._changeAnnotations=new we(t.changeAnnotations),t.changeAnnotations=this._changeAnnotations.all(),t.documentChanges.forEach(function(r){if(Z.is(r)){var e=new G(r.edits,i._changeAnnotations);i._textEditChanges[r.textDocument.uri]=e}})):t.changes&&Object.keys(t.changes).forEach(function(r){var e=new G(t.changes[r]);i._textEditChanges[r]=e})):this._workspaceEdit={}}return Object.defineProperty(n.prototype,\"edit\",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),n.prototype.getTextEditChange=function(t){if(ee.is(t)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var i={uri:t.uri,version:t.version},r=this._textEditChanges[i.uri];if(!r){var e=[],o={textDocument:i,edits:e};this._workspaceEdit.documentChanges.push(o),r=new G(e,this._changeAnnotations),this._textEditChanges[i.uri]=r}return r}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error(\"Workspace edit is not configured for normal text edit changes.\");var r=this._textEditChanges[t];if(!r){var e=[];this._workspaceEdit.changes[t]=e,r=new G(e),this._textEditChanges[t]=r}return r}},n.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new we,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},n.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},n.prototype.createFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var e;R.is(i)||T.is(i)?e=i:r=i;var o,s;if(e===void 0?o=N.create(t,r):(s=T.is(e)?e:this._changeAnnotations.manage(e),o=N.create(t,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n.prototype.renameFile=function(t,i,r,e){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var o;R.is(r)||T.is(r)?o=r:e=r;var s,u;if(o===void 0?s=V.create(t,i,e):(u=T.is(o)?o:this._changeAnnotations.manage(o),s=V.create(t,i,e,u)),this._workspaceEdit.documentChanges.push(s),u!==void 0)return u},n.prototype.deleteFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var e;R.is(i)||T.is(i)?e=i:r=i;var o,s;if(e===void 0?o=z.create(t,r):(s=T.is(e)?e:this._changeAnnotations.manage(e),o=z.create(t,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n}();var Ee;(function(n){function t(r){return{uri:r}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)}n.is=i})(Ee||(Ee={}));var Re;(function(n){function t(r,e){return{uri:r,version:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&a.integer(e.version)}n.is=i})(Re||(Re={}));var ee;(function(n){function t(r,e){return{uri:r,version:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&(e.version===null||a.integer(e.version))}n.is=i})(ee||(ee={}));var Pe;(function(n){function t(r,e,o,s){return{uri:r,languageId:e,version:o,text:s}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&a.string(e.languageId)&&a.integer(e.version)&&a.string(e.text)}n.is=i})(Pe||(Pe={}));var X;(function(n){n.PlainText=\"plaintext\",n.Markdown=\"markdown\"})(X||(X={}));(function(n){function t(i){var r=i;return r===n.PlainText||r===n.Markdown}n.is=t})(X||(X={}));var ue;(function(n){function t(i){var r=i;return a.objectLiteral(i)&&X.is(r.kind)&&a.string(r.value)}n.is=t})(ue||(ue={}));var p;(function(n){n.Text=1,n.Method=2,n.Function=3,n.Constructor=4,n.Field=5,n.Variable=6,n.Class=7,n.Interface=8,n.Module=9,n.Property=10,n.Unit=11,n.Value=12,n.Enum=13,n.Keyword=14,n.Snippet=15,n.Color=16,n.File=17,n.Reference=18,n.Folder=19,n.EnumMember=20,n.Constant=21,n.Struct=22,n.Event=23,n.Operator=24,n.TypeParameter=25})(p||(p={}));var ne;(function(n){n.PlainText=1,n.Snippet=2})(ne||(ne={}));var We;(function(n){n.Deprecated=1})(We||(We={}));var De;(function(n){function t(r,e,o){return{newText:r,insert:e,replace:o}}n.create=t;function i(r){var e=r;return e&&a.string(e.newText)&&v.is(e.insert)&&v.is(e.replace)}n.is=i})(De||(De={}));var Le;(function(n){n.asIs=1,n.adjustIndentation=2})(Le||(Le={}));var Se;(function(n){function t(i){return{label:i}}n.create=t})(Se||(Se={}));var Fe;(function(n){function t(i,r){return{items:i||[],isIncomplete:!!r}}n.create=t})(Fe||(Fe={}));var te;(function(n){function t(r){return r.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}n.fromPlainText=t;function i(r){var e=r;return a.string(e)||a.objectLiteral(e)&&a.string(e.language)&&a.string(e.value)}n.is=i})(te||(te={}));var Me;(function(n){function t(i){var r=i;return!!r&&a.objectLiteral(r)&&(ue.is(r.contents)||te.is(r.contents)||a.typedArray(r.contents,te.is))&&(i.range===void 0||v.is(i.range))}n.is=t})(Me||(Me={}));var Ae;(function(n){function t(i,r){return r?{label:i,documentation:r}:{label:i}}n.create=t})(Ae||(Ae={}));var He;(function(n){function t(i,r){for(var e=[],o=2;o<arguments.length;o++)e[o-2]=arguments[o];var s={label:i};return a.defined(r)&&(s.documentation=r),a.defined(e)?s.parameters=e:s.parameters=[],s}n.create=t})(He||(He={}));var W;(function(n){n.Text=1,n.Read=2,n.Write=3})(W||(W={}));var Ke;(function(n){function t(i,r){var e={range:i};return a.number(r)&&(e.kind=r),e}n.create=t})(Ke||(Ke={}));var m;(function(n){n.File=1,n.Module=2,n.Namespace=3,n.Package=4,n.Class=5,n.Method=6,n.Property=7,n.Field=8,n.Constructor=9,n.Enum=10,n.Interface=11,n.Function=12,n.Variable=13,n.Constant=14,n.String=15,n.Number=16,n.Boolean=17,n.Array=18,n.Object=19,n.Key=20,n.Null=21,n.EnumMember=22,n.Struct=23,n.Event=24,n.Operator=25,n.TypeParameter=26})(m||(m={}));var Ue;(function(n){n.Deprecated=1})(Ue||(Ue={}));var je;(function(n){function t(i,r,e,o,s){var u={name:i,kind:r,location:{uri:o,range:e}};return s&&(u.containerName=s),u}n.create=t})(je||(je={}));var Oe;(function(n){function t(r,e,o,s,u,l){var f={name:r,detail:e,kind:o,range:s,selectionRange:u};return l!==void 0&&(f.children=l),f}n.create=t;function i(r){var e=r;return e&&a.string(e.name)&&a.number(e.kind)&&v.is(e.range)&&v.is(e.selectionRange)&&(e.detail===void 0||a.string(e.detail))&&(e.deprecated===void 0||a.boolean(e.deprecated))&&(e.children===void 0||Array.isArray(e.children))&&(e.tags===void 0||Array.isArray(e.tags))}n.is=i})(Oe||(Oe={}));var Ne;(function(n){n.Empty=\"\",n.QuickFix=\"quickfix\",n.Refactor=\"refactor\",n.RefactorExtract=\"refactor.extract\",n.RefactorInline=\"refactor.inline\",n.RefactorRewrite=\"refactor.rewrite\",n.Source=\"source\",n.SourceOrganizeImports=\"source.organizeImports\",n.SourceFixAll=\"source.fixAll\"})(Ne||(Ne={}));var Ve;(function(n){function t(r,e){var o={diagnostics:r};return e!=null&&(o.only=e),o}n.create=t;function i(r){var e=r;return a.defined(e)&&a.typedArray(e.diagnostics,Y.is)&&(e.only===void 0||a.typedArray(e.only,a.string))}n.is=i})(Ve||(Ve={}));var ze;(function(n){function t(r,e,o){var s={title:r},u=!0;return typeof e==\"string\"?(u=!1,s.kind=e):O.is(e)?s.command=e:s.edit=e,u&&o!==void 0&&(s.kind=o),s}n.create=t;function i(r){var e=r;return e&&a.string(e.title)&&(e.diagnostics===void 0||a.typedArray(e.diagnostics,Y.is))&&(e.kind===void 0||a.string(e.kind))&&(e.edit!==void 0||e.command!==void 0)&&(e.command===void 0||O.is(e.command))&&(e.isPreferred===void 0||a.boolean(e.isPreferred))&&(e.edit===void 0||ae.is(e.edit))}n.is=i})(ze||(ze={}));var Xe;(function(n){function t(r,e){var o={range:r};return a.defined(e)&&(o.data=e),o}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.range)&&(a.undefined(e.command)||O.is(e.command))}n.is=i})(Xe||(Xe={}));var Be;(function(n){function t(r,e){return{tabSize:r,insertSpaces:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.uinteger(e.tabSize)&&a.boolean(e.insertSpaces)}n.is=i})(Be||(Be={}));var $e;(function(n){function t(r,e,o){return{range:r,target:e,data:o}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.range)&&(a.undefined(e.target)||a.string(e.target))}n.is=i})($e||($e={}));var qe;(function(n){function t(r,e){return{range:r,parent:e}}n.create=t;function i(r){var e=r;return e!==void 0&&v.is(e.range)&&(e.parent===void 0||n.is(e.parent))}n.is=i})(qe||(qe={}));var Qe;(function(n){function t(o,s,u,l){return new mn(o,s,u,l)}n.create=t;function i(o){var s=o;return!!(a.defined(s)&&a.string(s.uri)&&(a.undefined(s.languageId)||a.string(s.languageId))&&a.uinteger(s.lineCount)&&a.func(s.getText)&&a.func(s.positionAt)&&a.func(s.offsetAt))}n.is=i;function r(o,s){for(var u=o.getText(),l=e(s,function(E,$){var pe=E.range.start.line-$.range.start.line;return pe===0?E.range.start.character-$.range.start.character:pe}),f=u.length,g=l.length-1;g>=0;g--){var h=l[g],k=o.offsetAt(h.range.start),c=o.offsetAt(h.range.end);if(c<=f)u=u.substring(0,k)+h.newText+u.substring(c,u.length);else throw new Error(\"Overlapping edit\");f=k}return u}n.applyEdits=r;function e(o,s){if(o.length<=1)return o;var u=o.length/2|0,l=o.slice(0,u),f=o.slice(u);e(l,s),e(f,s);for(var g=0,h=0,k=0;g<l.length&&h<f.length;){var c=s(l[g],f[h]);c<=0?o[k++]=l[g++]:o[k++]=f[h++]}for(;g<l.length;)o[k++]=l[g++];for(;h<f.length;)o[k++]=f[h++];return o}})(Qe||(Qe={}));var mn=function(){function n(t,i,r,e){this._uri=t,this._languageId=i,this._version=r,this._content=e,this._lineOffsets=void 0}return Object.defineProperty(n.prototype,\"uri\",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,\"languageId\",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,\"version\",{get:function(){return this._version},enumerable:!1,configurable:!0}),n.prototype.getText=function(t){if(t){var i=this.offsetAt(t.start),r=this.offsetAt(t.end);return this._content.substring(i,r)}return this._content},n.prototype.update=function(t,i){this._content=t.text,this._version=i,this._lineOffsets=void 0},n.prototype.getLineOffsets=function(){if(this._lineOffsets===void 0){for(var t=[],i=this._content,r=!0,e=0;e<i.length;e++){r&&(t.push(e),r=!1);var o=i.charAt(e);r=o===\"\\r\"||o===`\n`,o===\"\\r\"&&e+1<i.length&&i.charAt(e+1)===`\n`&&e++}r&&i.length>0&&t.push(i.length),this._lineOffsets=t}return this._lineOffsets},n.prototype.positionAt=function(t){t=Math.max(Math.min(t,this._content.length),0);var i=this.getLineOffsets(),r=0,e=i.length;if(e===0)return x.create(0,t);for(;r<e;){var o=Math.floor((r+e)/2);i[o]>t?e=o:r=o+1}var s=r-1;return x.create(s,t-i[s])},n.prototype.offsetAt=function(t){var i=this.getLineOffsets();if(t.line>=i.length)return this._content.length;if(t.line<0)return 0;var r=i[t.line],e=t.line+1<i.length?i[t.line+1]:this._content.length;return Math.max(Math.min(r+t.character,e),r)},Object.defineProperty(n.prototype,\"lineCount\",{get:function(){return this.getLineOffsets().length},enumerable:!1,configurable:!0}),n}(),a;(function(n){var t=Object.prototype.toString;function i(c){return typeof c<\"u\"}n.defined=i;function r(c){return typeof c>\"u\"}n.undefined=r;function e(c){return c===!0||c===!1}n.boolean=e;function o(c){return t.call(c)===\"[object String]\"}n.string=o;function s(c){return t.call(c)===\"[object Number]\"}n.number=s;function u(c,E,$){return t.call(c)===\"[object Number]\"&&E<=c&&c<=$}n.numberRange=u;function l(c){return t.call(c)===\"[object Number]\"&&-2147483648<=c&&c<=2147483647}n.integer=l;function f(c){return t.call(c)===\"[object Number]\"&&0<=c&&c<=2147483647}n.uinteger=f;function g(c){return t.call(c)===\"[object Function]\"}n.func=g;function h(c){return c!==null&&typeof c==\"object\"}n.objectLiteral=h;function k(c,E){return Array.isArray(c)&&c.every(E)}n.typedArray=k})(a||(a={}));var de=class{constructor(t,i,r){this._languageId=t;this._worker=i;this._disposables=[];this._listener=Object.create(null);let e=s=>{let u=s.getLanguageId();if(u!==this._languageId)return;let l;this._listener[s.uri.toString()]=s.onDidChangeContent(()=>{window.clearTimeout(l),l=window.setTimeout(()=>this._doValidate(s.uri,u),500)}),this._doValidate(s.uri,u)},o=s=>{d.editor.setModelMarkers(s,this._languageId,[]);let u=s.uri.toString(),l=this._listener[u];l&&(l.dispose(),delete this._listener[u])};this._disposables.push(d.editor.onDidCreateModel(e)),this._disposables.push(d.editor.onWillDisposeModel(o)),this._disposables.push(d.editor.onDidChangeModelLanguage(s=>{o(s.model),e(s.model)})),this._disposables.push(r(s=>{d.editor.getModels().forEach(u=>{u.getLanguageId()===this._languageId&&(o(u),e(u))})})),this._disposables.push({dispose:()=>{d.editor.getModels().forEach(o);for(let s in this._listener)this._listener[s].dispose()}}),d.editor.getModels().forEach(e)}dispose(){this._disposables.forEach(t=>t&&t.dispose()),this._disposables.length=0}_doValidate(t,i){this._worker(t).then(r=>r.doValidation(t.toString())).then(r=>{let e=r.map(s=>Tn(t,s)),o=d.editor.getModel(t);o&&o.getLanguageId()===i&&d.editor.setModelMarkers(o,i,e)}).then(void 0,r=>{console.error(r)})}};function vn(n){switch(n){case w.Error:return d.MarkerSeverity.Error;case w.Warning:return d.MarkerSeverity.Warning;case w.Information:return d.MarkerSeverity.Info;case w.Hint:return d.MarkerSeverity.Hint;default:return d.MarkerSeverity.Info}}function Tn(n,t){let i=typeof t.code==\"number\"?String(t.code):t.code;return{severity:vn(t.severity),startLineNumber:t.range.start.line+1,startColumn:t.range.start.character+1,endLineNumber:t.range.end.line+1,endColumn:t.range.end.character+1,message:t.message,code:i,source:t.source}}var B=class{constructor(t,i){this._worker=t;this._triggerCharacters=i}get triggerCharacters(){return this._triggerCharacters}provideCompletionItems(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.doComplete(o.toString(),C(i))).then(s=>{if(!s)return;let u=t.getWordUntilPosition(i),l=new d.Range(i.lineNumber,u.startColumn,i.lineNumber,u.endColumn),f=s.items.map(g=>{let h={label:g.label,insertText:g.insertText||g.label,sortText:g.sortText,filterText:g.filterText,documentation:g.documentation,detail:g.detail,command:kn(g.command),range:l,kind:xn(g.kind)};return g.textEdit&&(yn(g.textEdit)?h.range={insert:y(g.textEdit.insert),replace:y(g.textEdit.replace)}:h.range=y(g.textEdit.range),h.insertText=g.textEdit.newText),g.additionalTextEdits&&(h.additionalTextEdits=g.additionalTextEdits.map(D)),g.insertTextFormat===ne.Snippet&&(h.insertTextRules=d.languages.CompletionItemInsertTextRule.InsertAsSnippet),h});return{isIncomplete:s.isIncomplete,suggestions:f}})}};function C(n){if(n)return{character:n.column-1,line:n.lineNumber-1}}function fe(n){if(n)return{start:{line:n.startLineNumber-1,character:n.startColumn-1},end:{line:n.endLineNumber-1,character:n.endColumn-1}}}function y(n){if(n)return new d.Range(n.start.line+1,n.start.character+1,n.end.line+1,n.end.character+1)}function yn(n){return typeof n.insert<\"u\"&&typeof n.replace<\"u\"}function xn(n){let t=d.languages.CompletionItemKind;switch(n){case p.Text:return t.Text;case p.Method:return t.Method;case p.Function:return t.Function;case p.Constructor:return t.Constructor;case p.Field:return t.Field;case p.Variable:return t.Variable;case p.Class:return t.Class;case p.Interface:return t.Interface;case p.Module:return t.Module;case p.Property:return t.Property;case p.Unit:return t.Unit;case p.Value:return t.Value;case p.Enum:return t.Enum;case p.Keyword:return t.Keyword;case p.Snippet:return t.Snippet;case p.Color:return t.Color;case p.File:return t.File;case p.Reference:return t.Reference}return t.Property}function D(n){if(n)return{range:y(n.range),text:n.newText}}function kn(n){return n&&n.command===\"editor.action.triggerSuggest\"?{id:n.command,title:n.title,arguments:n.arguments}:void 0}var L=class{constructor(t){this._worker=t}provideHover(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.doHover(e.toString(),C(i))).then(o=>{if(o)return{range:y(o.range),contents:_n(o.contents)}})}};function In(n){return n&&typeof n==\"object\"&&typeof n.kind==\"string\"}function Ge(n){return typeof n==\"string\"?{value:n}:In(n)?n.kind===\"plaintext\"?{value:n.value.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}:{value:n.value}:{value:\"```\"+n.language+`\n`+n.value+\"\\n```\\n\"}}function _n(n){if(n)return Array.isArray(n)?n.map(Ge):[Ge(n)]}var S=class{constructor(t){this._worker=t}provideDocumentHighlights(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.findDocumentHighlights(e.toString(),C(i))).then(o=>{if(o)return o.map(s=>({range:y(s.range),kind:Cn(s.kind)}))})}};function Cn(n){switch(n){case W.Read:return d.languages.DocumentHighlightKind.Read;case W.Write:return d.languages.DocumentHighlightKind.Write;case W.Text:return d.languages.DocumentHighlightKind.Text}return d.languages.DocumentHighlightKind.Text}var ce=class{constructor(t){this._worker=t}provideDefinition(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.findDefinition(e.toString(),C(i))).then(o=>{if(o)return[Je(o)]})}};function Je(n){return{uri:d.Uri.parse(n.uri),range:y(n.range)}}var le=class{constructor(t){this._worker=t}provideReferences(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.findReferences(o.toString(),C(i))).then(s=>{if(s)return s.map(Je)})}},F=class{constructor(t){this._worker=t}provideRenameEdits(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.doRename(o.toString(),C(i),r)).then(s=>bn(s))}};function bn(n){if(!n||!n.changes)return;let t=[];for(let i in n.changes){let r=d.Uri.parse(i);for(let e of n.changes[i])t.push({resource:r,versionId:void 0,textEdit:{range:y(e.range),text:e.newText}})}return{edits:t}}var M=class{constructor(t){this._worker=t}provideDocumentSymbols(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentSymbols(r.toString())).then(e=>{if(e)return e.map(o=>wn(o)?Ye(o):{name:o.name,detail:\"\",containerName:o.containerName,kind:Ze(o.kind),range:y(o.location.range),selectionRange:y(o.location.range),tags:[]})})}};function wn(n){return\"children\"in n}function Ye(n){return{name:n.name,detail:n.detail??\"\",kind:Ze(n.kind),range:y(n.range),selectionRange:y(n.selectionRange),tags:n.tags??[],children:(n.children??[]).map(t=>Ye(t))}}function Ze(n){let t=d.languages.SymbolKind;switch(n){case m.File:return t.File;case m.Module:return t.Module;case m.Namespace:return t.Namespace;case m.Package:return t.Package;case m.Class:return t.Class;case m.Method:return t.Method;case m.Property:return t.Property;case m.Field:return t.Field;case m.Constructor:return t.Constructor;case m.Enum:return t.Enum;case m.Interface:return t.Interface;case m.Function:return t.Function;case m.Variable:return t.Variable;case m.Constant:return t.Constant;case m.String:return t.String;case m.Number:return t.Number;case m.Boolean:return t.Boolean;case m.Array:return t.Array}return t.Function}var A=class{constructor(t){this._worker=t}provideLinks(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentLinks(r.toString())).then(e=>{if(e)return{links:e.map(o=>({range:y(o.range),url:o.target}))}})}},H=class{constructor(t){this._worker=t}provideDocumentFormattingEdits(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.format(e.toString(),null,en(i)).then(s=>{if(!(!s||s.length===0))return s.map(D)}))}},K=class{constructor(t){this._worker=t;this.canFormatMultipleRanges=!1}provideDocumentRangeFormattingEdits(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.format(o.toString(),fe(i),en(r)).then(u=>{if(!(!u||u.length===0))return u.map(D)}))}};function en(n){return{tabSize:n.tabSize,insertSpaces:n.insertSpaces}}var ge=class{constructor(t){this._worker=t}provideDocumentColors(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentColors(r.toString())).then(e=>{if(e)return e.map(o=>({color:o.color,range:y(o.range)}))})}provideColorPresentations(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getColorPresentations(e.toString(),i.color,fe(i.range))).then(o=>{if(o)return o.map(s=>{let u={label:s.label};return s.textEdit&&(u.textEdit=D(s.textEdit)),s.additionalTextEdits&&(u.additionalTextEdits=s.additionalTextEdits.map(D)),u})})}},U=class{constructor(t){this._worker=t}provideFoldingRanges(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getFoldingRanges(e.toString(),i)).then(o=>{if(o)return o.map(s=>{let u={start:s.startLine+1,end:s.endLine+1};return typeof s.kind<\"u\"&&(u.kind=En(s.kind)),u})})}};function En(n){switch(n){case P.Comment:return d.languages.FoldingRangeKind.Comment;case P.Imports:return d.languages.FoldingRangeKind.Imports;case P.Region:return d.languages.FoldingRangeKind.Region}}var j=class{constructor(t){this._worker=t}provideSelectionRanges(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getSelectionRanges(e.toString(),i.map(C))).then(o=>{if(o)return o.map(s=>{let u=[];for(;s;)u.push({range:y(s.range)}),s=s.parent;return u})})}};var re=class extends B{constructor(t){super(t,[\".\",\":\",\"<\",'\"',\"=\",\"/\"])}};function Pn(n){let t=new b(n),i=(...e)=>t.getLanguageServiceWorker(...e),r=n.languageId;d.languages.registerCompletionItemProvider(r,new re(i)),d.languages.registerHoverProvider(r,new L(i)),d.languages.registerDocumentHighlightProvider(r,new S(i)),d.languages.registerLinkProvider(r,new A(i)),d.languages.registerFoldingRangeProvider(r,new U(i)),d.languages.registerDocumentSymbolProvider(r,new M(i)),d.languages.registerSelectionRangeProvider(r,new j(i)),d.languages.registerRenameProvider(r,new F(i)),r===\"html\"&&(d.languages.registerDocumentFormattingEditProvider(r,new H(i)),d.languages.registerDocumentRangeFormattingEditProvider(r,new K(i)))}function Wn(n){let t=[],i=[],r=new b(n);t.push(r);let e=(...s)=>r.getLanguageServiceWorker(...s);function o(){let{languageId:s,modeConfiguration:u}=n;tn(i),u.completionItems&&i.push(d.languages.registerCompletionItemProvider(s,new re(e))),u.hovers&&i.push(d.languages.registerHoverProvider(s,new L(e))),u.documentHighlights&&i.push(d.languages.registerDocumentHighlightProvider(s,new S(e))),u.links&&i.push(d.languages.registerLinkProvider(s,new A(e))),u.documentSymbols&&i.push(d.languages.registerDocumentSymbolProvider(s,new M(e))),u.rename&&i.push(d.languages.registerRenameProvider(s,new F(e))),u.foldingRanges&&i.push(d.languages.registerFoldingRangeProvider(s,new U(e))),u.selectionRanges&&i.push(d.languages.registerSelectionRangeProvider(s,new j(e))),u.documentFormattingEdits&&i.push(d.languages.registerDocumentFormattingEditProvider(s,new H(e))),u.documentRangeFormattingEdits&&i.push(d.languages.registerDocumentRangeFormattingEditProvider(s,new K(e)))}return o(),t.push(nn(i)),nn(t)}function nn(n){return{dispose:()=>tn(n)}}function tn(n){for(;n.length;)n.pop().dispose()}return gn(Dn);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/html/htmlWorker.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/html/htmlWorker\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var Xe=Object.defineProperty;var xn=Object.getOwnPropertyDescriptor;var Dn=Object.getOwnPropertyNames;var En=Object.prototype.hasOwnProperty;var Cn=(t,i)=>{for(var o in i)Xe(t,o,{get:i[o],enumerable:!0})},Ln=(t,i,o,n)=>{if(i&&typeof i==\"object\"||typeof i==\"function\")for(let e of Dn(i))!En.call(t,e)&&e!==o&&Xe(t,e,{get:()=>i[e],enumerable:!(n=xn(i,e))||n.enumerable});return t};var Mn=t=>Ln(Xe({},\"__esModule\",{value:!0}),t);var Ri={};Cn(Ri,{HTMLWorker:()=>Je,create:()=>Mi});function Rn(t,i){let o;return i.length===0?o=t:o=t.replace(/\\{(\\d+)\\}/g,(n,e)=>{let a=e[0];return typeof i[a]<\"u\"?i[a]:n}),o}function zn(t,i,...o){return Rn(i,o)}function ge(t){return zn}var yt;(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647})(yt||(yt={}));var Ie;(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647})(Ie||(Ie={}));var X;(function(t){function i(n,e){return n===Number.MAX_VALUE&&(n=Ie.MAX_VALUE),e===Number.MAX_VALUE&&(e=Ie.MAX_VALUE),{line:n,character:e}}t.create=i;function o(n){var e=n;return _.objectLiteral(e)&&_.uinteger(e.line)&&_.uinteger(e.character)}t.is=o})(X||(X={}));var P;(function(t){function i(n,e,a,c){if(_.uinteger(n)&&_.uinteger(e)&&_.uinteger(a)&&_.uinteger(c))return{start:X.create(n,e),end:X.create(a,c)};if(X.is(n)&&X.is(e))return{start:n,end:e};throw new Error(\"Range#create called with invalid arguments[\"+n+\", \"+e+\", \"+a+\", \"+c+\"]\")}t.create=i;function o(n){var e=n;return _.objectLiteral(e)&&X.is(e.start)&&X.is(e.end)}t.is=o})(P||(P={}));var ve;(function(t){function i(n,e){return{uri:n,range:e}}t.create=i;function o(n){var e=n;return _.defined(e)&&P.is(e.range)&&(_.string(e.uri)||_.undefined(e.uri))}t.is=o})(ve||(ve={}));var Tt;(function(t){function i(n,e,a,c){return{targetUri:n,targetRange:e,targetSelectionRange:a,originSelectionRange:c}}t.create=i;function o(n){var e=n;return _.defined(e)&&P.is(e.targetRange)&&_.string(e.targetUri)&&(P.is(e.targetSelectionRange)||_.undefined(e.targetSelectionRange))&&(P.is(e.originSelectionRange)||_.undefined(e.originSelectionRange))}t.is=o})(Tt||(Tt={}));var Ue;(function(t){function i(n,e,a,c){return{red:n,green:e,blue:a,alpha:c}}t.create=i;function o(n){var e=n;return _.numberRange(e.red,0,1)&&_.numberRange(e.green,0,1)&&_.numberRange(e.blue,0,1)&&_.numberRange(e.alpha,0,1)}t.is=o})(Ue||(Ue={}));var $e;(function(t){function i(n,e){return{range:n,color:e}}t.create=i;function o(n){var e=n;return P.is(e.range)&&Ue.is(e.color)}t.is=o})($e||($e={}));var Qe;(function(t){function i(n,e,a){return{label:n,textEdit:e,additionalTextEdits:a}}t.create=i;function o(n){var e=n;return _.string(e.label)&&(_.undefined(e.textEdit)||Y.is(e))&&(_.undefined(e.additionalTextEdits)||_.typedArray(e.additionalTextEdits,Y.is))}t.is=o})(Qe||(Qe={}));var we;(function(t){t.Comment=\"comment\",t.Imports=\"imports\",t.Region=\"region\"})(we||(we={}));var Ze;(function(t){function i(n,e,a,c,l){var r={startLine:n,endLine:e};return _.defined(a)&&(r.startCharacter=a),_.defined(c)&&(r.endCharacter=c),_.defined(l)&&(r.kind=l),r}t.create=i;function o(n){var e=n;return _.uinteger(e.startLine)&&_.uinteger(e.startLine)&&(_.undefined(e.startCharacter)||_.uinteger(e.startCharacter))&&(_.undefined(e.endCharacter)||_.uinteger(e.endCharacter))&&(_.undefined(e.kind)||_.string(e.kind))}t.is=o})(Ze||(Ze={}));var Ke;(function(t){function i(n,e){return{location:n,message:e}}t.create=i;function o(n){var e=n;return _.defined(e)&&ve.is(e.location)&&_.string(e.message)}t.is=o})(Ke||(Ke={}));var kt;(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(kt||(kt={}));var St;(function(t){t.Unnecessary=1,t.Deprecated=2})(St||(St={}));var At;(function(t){function i(o){var n=o;return n!=null&&_.string(n.href)}t.is=i})(At||(At={}));var Ae;(function(t){function i(n,e,a,c,l,r){var s={range:n,message:e};return _.defined(a)&&(s.severity=a),_.defined(c)&&(s.code=c),_.defined(l)&&(s.source=l),_.defined(r)&&(s.relatedInformation=r),s}t.create=i;function o(n){var e,a=n;return _.defined(a)&&P.is(a.range)&&_.string(a.message)&&(_.number(a.severity)||_.undefined(a.severity))&&(_.integer(a.code)||_.string(a.code)||_.undefined(a.code))&&(_.undefined(a.codeDescription)||_.string((e=a.codeDescription)===null||e===void 0?void 0:e.href))&&(_.string(a.source)||_.undefined(a.source))&&(_.undefined(a.relatedInformation)||_.typedArray(a.relatedInformation,Ke.is))}t.is=o})(Ae||(Ae={}));var _e;(function(t){function i(n,e){for(var a=[],c=2;c<arguments.length;c++)a[c-2]=arguments[c];var l={title:n,command:e};return _.defined(a)&&a.length>0&&(l.arguments=a),l}t.create=i;function o(n){var e=n;return _.defined(e)&&_.string(e.title)&&_.string(e.command)}t.is=o})(_e||(_e={}));var Y;(function(t){function i(a,c){return{range:a,newText:c}}t.replace=i;function o(a,c){return{range:{start:a,end:a},newText:c}}t.insert=o;function n(a){return{range:a,newText:\"\"}}t.del=n;function e(a){var c=a;return _.objectLiteral(c)&&_.string(c.newText)&&P.is(c.range)}t.is=e})(Y||(Y={}));var be;(function(t){function i(n,e,a){var c={label:n};return e!==void 0&&(c.needsConfirmation=e),a!==void 0&&(c.description=a),c}t.create=i;function o(n){var e=n;return e!==void 0&&_.objectLiteral(e)&&_.string(e.label)&&(_.boolean(e.needsConfirmation)||e.needsConfirmation===void 0)&&(_.string(e.description)||e.description===void 0)}t.is=o})(be||(be={}));var Z;(function(t){function i(o){var n=o;return typeof n==\"string\"}t.is=i})(Z||(Z={}));var ce;(function(t){function i(a,c,l){return{range:a,newText:c,annotationId:l}}t.replace=i;function o(a,c,l){return{range:{start:a,end:a},newText:c,annotationId:l}}t.insert=o;function n(a,c){return{range:a,newText:\"\",annotationId:c}}t.del=n;function e(a){var c=a;return Y.is(c)&&(be.is(c.annotationId)||Z.is(c.annotationId))}t.is=e})(ce||(ce={}));var We;(function(t){function i(n,e){return{textDocument:n,edits:e}}t.create=i;function o(n){var e=n;return _.defined(e)&&Fe.is(e.textDocument)&&Array.isArray(e.edits)}t.is=o})(We||(We={}));var xe;(function(t){function i(n,e,a){var c={kind:\"create\",uri:n};return e!==void 0&&(e.overwrite!==void 0||e.ignoreIfExists!==void 0)&&(c.options=e),a!==void 0&&(c.annotationId=a),c}t.create=i;function o(n){var e=n;return e&&e.kind===\"create\"&&_.string(e.uri)&&(e.options===void 0||(e.options.overwrite===void 0||_.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||_.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||Z.is(e.annotationId))}t.is=o})(xe||(xe={}));var De;(function(t){function i(n,e,a,c){var l={kind:\"rename\",oldUri:n,newUri:e};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),c!==void 0&&(l.annotationId=c),l}t.create=i;function o(n){var e=n;return e&&e.kind===\"rename\"&&_.string(e.oldUri)&&_.string(e.newUri)&&(e.options===void 0||(e.options.overwrite===void 0||_.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||_.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||Z.is(e.annotationId))}t.is=o})(De||(De={}));var Ee;(function(t){function i(n,e,a){var c={kind:\"delete\",uri:n};return e!==void 0&&(e.recursive!==void 0||e.ignoreIfNotExists!==void 0)&&(c.options=e),a!==void 0&&(c.annotationId=a),c}t.create=i;function o(n){var e=n;return e&&e.kind===\"delete\"&&_.string(e.uri)&&(e.options===void 0||(e.options.recursive===void 0||_.boolean(e.options.recursive))&&(e.options.ignoreIfNotExists===void 0||_.boolean(e.options.ignoreIfNotExists)))&&(e.annotationId===void 0||Z.is(e.annotationId))}t.is=o})(Ee||(Ee={}));var Be;(function(t){function i(o){var n=o;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(function(e){return _.string(e.kind)?xe.is(e)||De.is(e)||Ee.is(e):We.is(e)}))}t.is=i})(Be||(Be={}));var He=function(){function t(i,o){this.edits=i,this.changeAnnotations=o}return t.prototype.insert=function(i,o,n){var e,a;if(n===void 0?e=Y.insert(i,o):Z.is(n)?(a=n,e=ce.insert(i,o,n)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(n),e=ce.insert(i,o,a)),this.edits.push(e),a!==void 0)return a},t.prototype.replace=function(i,o,n){var e,a;if(n===void 0?e=Y.replace(i,o):Z.is(n)?(a=n,e=ce.replace(i,o,n)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(n),e=ce.replace(i,o,a)),this.edits.push(e),a!==void 0)return a},t.prototype.delete=function(i,o){var n,e;if(o===void 0?n=Y.del(i):Z.is(o)?(e=o,n=ce.del(i,o)):(this.assertChangeAnnotations(this.changeAnnotations),e=this.changeAnnotations.manage(o),n=ce.del(i,e)),this.edits.push(n),e!==void 0)return e},t.prototype.add=function(i){this.edits.push(i)},t.prototype.all=function(){return this.edits},t.prototype.clear=function(){this.edits.splice(0,this.edits.length)},t.prototype.assertChangeAnnotations=function(i){if(i===void 0)throw new Error(\"Text edit change is not configured to manage change annotations.\")},t}(),xt=function(){function t(i){this._annotations=i===void 0?Object.create(null):i,this._counter=0,this._size=0}return t.prototype.all=function(){return this._annotations},Object.defineProperty(t.prototype,\"size\",{get:function(){return this._size},enumerable:!1,configurable:!0}),t.prototype.manage=function(i,o){var n;if(Z.is(i)?n=i:(n=this.nextId(),o=i),this._annotations[n]!==void 0)throw new Error(\"Id \"+n+\" is already in use.\");if(o===void 0)throw new Error(\"No annotation provided for id \"+n);return this._annotations[n]=o,this._size++,n},t.prototype.nextId=function(){return this._counter++,this._counter.toString()},t}(),Hi=function(){function t(i){var o=this;this._textEditChanges=Object.create(null),i!==void 0?(this._workspaceEdit=i,i.documentChanges?(this._changeAnnotations=new xt(i.changeAnnotations),i.changeAnnotations=this._changeAnnotations.all(),i.documentChanges.forEach(function(n){if(We.is(n)){var e=new He(n.edits,o._changeAnnotations);o._textEditChanges[n.textDocument.uri]=e}})):i.changes&&Object.keys(i.changes).forEach(function(n){var e=new He(i.changes[n]);o._textEditChanges[n]=e})):this._workspaceEdit={}}return Object.defineProperty(t.prototype,\"edit\",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),t.prototype.getTextEditChange=function(i){if(Fe.is(i)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var o={uri:i.uri,version:i.version},n=this._textEditChanges[o.uri];if(!n){var e=[],a={textDocument:o,edits:e};this._workspaceEdit.documentChanges.push(a),n=new He(e,this._changeAnnotations),this._textEditChanges[o.uri]=n}return n}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error(\"Workspace edit is not configured for normal text edit changes.\");var n=this._textEditChanges[i];if(!n){var e=[];this._workspaceEdit.changes[i]=e,n=new He(e),this._textEditChanges[i]=n}return n}},t.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new xt,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},t.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},t.prototype.createFile=function(i,o,n){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var e;be.is(o)||Z.is(o)?e=o:n=o;var a,c;if(e===void 0?a=xe.create(i,n):(c=Z.is(e)?e:this._changeAnnotations.manage(e),a=xe.create(i,n,c)),this._workspaceEdit.documentChanges.push(a),c!==void 0)return c},t.prototype.renameFile=function(i,o,n,e){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var a;be.is(n)||Z.is(n)?a=n:e=n;var c,l;if(a===void 0?c=De.create(i,o,e):(l=Z.is(a)?a:this._changeAnnotations.manage(a),c=De.create(i,o,e,l)),this._workspaceEdit.documentChanges.push(c),l!==void 0)return l},t.prototype.deleteFile=function(i,o,n){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var e;be.is(o)||Z.is(o)?e=o:n=o;var a,c;if(e===void 0?a=Ee.create(i,n):(c=Z.is(e)?e:this._changeAnnotations.manage(e),a=Ee.create(i,n,c)),this._workspaceEdit.documentChanges.push(a),c!==void 0)return c},t}();var Dt;(function(t){function i(n){return{uri:n}}t.create=i;function o(n){var e=n;return _.defined(e)&&_.string(e.uri)}t.is=o})(Dt||(Dt={}));var Et;(function(t){function i(n,e){return{uri:n,version:e}}t.create=i;function o(n){var e=n;return _.defined(e)&&_.string(e.uri)&&_.integer(e.version)}t.is=o})(Et||(Et={}));var Fe;(function(t){function i(n,e){return{uri:n,version:e}}t.create=i;function o(n){var e=n;return _.defined(e)&&_.string(e.uri)&&(e.version===null||_.integer(e.version))}t.is=o})(Fe||(Fe={}));var Ct;(function(t){function i(n,e,a,c){return{uri:n,languageId:e,version:a,text:c}}t.create=i;function o(n){var e=n;return _.defined(e)&&_.string(e.uri)&&_.string(e.languageId)&&_.integer(e.version)&&_.string(e.text)}t.is=o})(Ct||(Ct={}));var ee;(function(t){t.PlainText=\"plaintext\",t.Markdown=\"markdown\"})(ee||(ee={}));(function(t){function i(o){var n=o;return n===t.PlainText||n===t.Markdown}t.is=i})(ee||(ee={}));var Pe;(function(t){function i(o){var n=o;return _.objectLiteral(o)&&ee.is(n.kind)&&_.string(n.value)}t.is=i})(Pe||(Pe={}));var Q;(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(Q||(Q={}));var ne;(function(t){t.PlainText=1,t.Snippet=2})(ne||(ne={}));var et;(function(t){t.Deprecated=1})(et||(et={}));var tt;(function(t){function i(n,e,a){return{newText:n,insert:e,replace:a}}t.create=i;function o(n){var e=n;return e&&_.string(e.newText)&&P.is(e.insert)&&P.is(e.replace)}t.is=o})(tt||(tt={}));var nt;(function(t){t.asIs=1,t.adjustIndentation=2})(nt||(nt={}));var it;(function(t){function i(o){return{label:o}}t.create=i})(it||(it={}));var rt;(function(t){function i(o,n){return{items:o||[],isIncomplete:!!n}}t.create=i})(rt||(rt={}));var Ce;(function(t){function i(n){return n.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}t.fromPlainText=i;function o(n){var e=n;return _.string(e)||_.objectLiteral(e)&&_.string(e.language)&&_.string(e.value)}t.is=o})(Ce||(Ce={}));var at;(function(t){function i(o){var n=o;return!!n&&_.objectLiteral(n)&&(Pe.is(n.contents)||Ce.is(n.contents)||_.typedArray(n.contents,Ce.is))&&(o.range===void 0||P.is(o.range))}t.is=i})(at||(at={}));var Lt;(function(t){function i(o,n){return n?{label:o,documentation:n}:{label:o}}t.create=i})(Lt||(Lt={}));var Mt;(function(t){function i(o,n){for(var e=[],a=2;a<arguments.length;a++)e[a-2]=arguments[a];var c={label:o};return _.defined(n)&&(c.documentation=n),_.defined(e)?c.parameters=e:c.parameters=[],c}t.create=i})(Mt||(Mt={}));var ye;(function(t){t.Text=1,t.Read=2,t.Write=3})(ye||(ye={}));var ot;(function(t){function i(o,n){var e={range:o};return _.number(n)&&(e.kind=n),e}t.create=i})(ot||(ot={}));var Le;(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(Le||(Le={}));var Rt;(function(t){t.Deprecated=1})(Rt||(Rt={}));var st;(function(t){function i(o,n,e,a,c){var l={name:o,kind:n,location:{uri:a,range:e}};return c&&(l.containerName=c),l}t.create=i})(st||(st={}));var zt;(function(t){function i(n,e,a,c,l,r){var s={name:n,detail:e,kind:a,range:c,selectionRange:l};return r!==void 0&&(s.children=r),s}t.create=i;function o(n){var e=n;return e&&_.string(e.name)&&_.number(e.kind)&&P.is(e.range)&&P.is(e.selectionRange)&&(e.detail===void 0||_.string(e.detail))&&(e.deprecated===void 0||_.boolean(e.deprecated))&&(e.children===void 0||Array.isArray(e.children))&&(e.tags===void 0||Array.isArray(e.tags))}t.is=o})(zt||(zt={}));var Ht;(function(t){t.Empty=\"\",t.QuickFix=\"quickfix\",t.Refactor=\"refactor\",t.RefactorExtract=\"refactor.extract\",t.RefactorInline=\"refactor.inline\",t.RefactorRewrite=\"refactor.rewrite\",t.Source=\"source\",t.SourceOrganizeImports=\"source.organizeImports\",t.SourceFixAll=\"source.fixAll\"})(Ht||(Ht={}));var It;(function(t){function i(n,e){var a={diagnostics:n};return e!=null&&(a.only=e),a}t.create=i;function o(n){var e=n;return _.defined(e)&&_.typedArray(e.diagnostics,Ae.is)&&(e.only===void 0||_.typedArray(e.only,_.string))}t.is=o})(It||(It={}));var Ut;(function(t){function i(n,e,a){var c={title:n},l=!0;return typeof e==\"string\"?(l=!1,c.kind=e):_e.is(e)?c.command=e:c.edit=e,l&&a!==void 0&&(c.kind=a),c}t.create=i;function o(n){var e=n;return e&&_.string(e.title)&&(e.diagnostics===void 0||_.typedArray(e.diagnostics,Ae.is))&&(e.kind===void 0||_.string(e.kind))&&(e.edit!==void 0||e.command!==void 0)&&(e.command===void 0||_e.is(e.command))&&(e.isPreferred===void 0||_.boolean(e.isPreferred))&&(e.edit===void 0||Be.is(e.edit))}t.is=o})(Ut||(Ut={}));var Wt;(function(t){function i(n,e){var a={range:n};return _.defined(e)&&(a.data=e),a}t.create=i;function o(n){var e=n;return _.defined(e)&&P.is(e.range)&&(_.undefined(e.command)||_e.is(e.command))}t.is=o})(Wt||(Wt={}));var lt;(function(t){function i(n,e){return{tabSize:n,insertSpaces:e}}t.create=i;function o(n){var e=n;return _.defined(e)&&_.uinteger(e.tabSize)&&_.boolean(e.insertSpaces)}t.is=o})(lt||(lt={}));var ut;(function(t){function i(n,e,a){return{range:n,target:e,data:a}}t.create=i;function o(n){var e=n;return _.defined(e)&&P.is(e.range)&&(_.undefined(e.target)||_.string(e.target))}t.is=o})(ut||(ut={}));var Te;(function(t){function i(n,e){return{range:n,parent:e}}t.create=i;function o(n){var e=n;return e!==void 0&&P.is(e.range)&&(e.parent===void 0||t.is(e.parent))}t.is=o})(Te||(Te={}));var Bt;(function(t){function i(a,c,l,r){return new Hn(a,c,l,r)}t.create=i;function o(a){var c=a;return!!(_.defined(c)&&_.string(c.uri)&&(_.undefined(c.languageId)||_.string(c.languageId))&&_.uinteger(c.lineCount)&&_.func(c.getText)&&_.func(c.positionAt)&&_.func(c.offsetAt))}t.is=o;function n(a,c){for(var l=a.getText(),r=e(c,function(y,m){var A=y.range.start.line-m.range.start.line;return A===0?y.range.start.character-m.range.start.character:A}),s=l.length,u=r.length-1;u>=0;u--){var h=r[u],d=a.offsetAt(h.range.start),g=a.offsetAt(h.range.end);if(g<=s)l=l.substring(0,d)+h.newText+l.substring(g,l.length);else throw new Error(\"Overlapping edit\");s=d}return l}t.applyEdits=n;function e(a,c){if(a.length<=1)return a;var l=a.length/2|0,r=a.slice(0,l),s=a.slice(l);e(r,c),e(s,c);for(var u=0,h=0,d=0;u<r.length&&h<s.length;){var g=c(r[u],s[h]);g<=0?a[d++]=r[u++]:a[d++]=s[h++]}for(;u<r.length;)a[d++]=r[u++];for(;h<s.length;)a[d++]=s[h++];return a}})(Bt||(Bt={}));var Hn=function(){function t(i,o,n,e){this._uri=i,this._languageId=o,this._version=n,this._content=e,this._lineOffsets=void 0}return Object.defineProperty(t.prototype,\"uri\",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"languageId\",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"version\",{get:function(){return this._version},enumerable:!1,configurable:!0}),t.prototype.getText=function(i){if(i){var o=this.offsetAt(i.start),n=this.offsetAt(i.end);return this._content.substring(o,n)}return this._content},t.prototype.update=function(i,o){this._content=i.text,this._version=o,this._lineOffsets=void 0},t.prototype.getLineOffsets=function(){if(this._lineOffsets===void 0){for(var i=[],o=this._content,n=!0,e=0;e<o.length;e++){n&&(i.push(e),n=!1);var a=o.charAt(e);n=a===\"\\r\"||a===`\n`,a===\"\\r\"&&e+1<o.length&&o.charAt(e+1)===`\n`&&e++}n&&o.length>0&&i.push(o.length),this._lineOffsets=i}return this._lineOffsets},t.prototype.positionAt=function(i){i=Math.max(Math.min(i,this._content.length),0);var o=this.getLineOffsets(),n=0,e=o.length;if(e===0)return X.create(0,i);for(;n<e;){var a=Math.floor((n+e)/2);o[a]>i?e=a:n=a+1}var c=n-1;return X.create(c,i-o[c])},t.prototype.offsetAt=function(i){var o=this.getLineOffsets();if(i.line>=o.length)return this._content.length;if(i.line<0)return 0;var n=o[i.line],e=i.line+1<o.length?o[i.line+1]:this._content.length;return Math.max(Math.min(n+i.character,e),n)},Object.defineProperty(t.prototype,\"lineCount\",{get:function(){return this.getLineOffsets().length},enumerable:!1,configurable:!0}),t}(),_;(function(t){var i=Object.prototype.toString;function o(g){return typeof g<\"u\"}t.defined=o;function n(g){return typeof g>\"u\"}t.undefined=n;function e(g){return g===!0||g===!1}t.boolean=e;function a(g){return i.call(g)===\"[object String]\"}t.string=a;function c(g){return i.call(g)===\"[object Number]\"}t.number=c;function l(g,y,m){return i.call(g)===\"[object Number]\"&&y<=g&&g<=m}t.numberRange=l;function r(g){return i.call(g)===\"[object Number]\"&&-2147483648<=g&&g<=2147483647}t.integer=r;function s(g){return i.call(g)===\"[object Number]\"&&0<=g&&g<=2147483647}t.uinteger=s;function u(g){return i.call(g)===\"[object Function]\"}t.func=u;function h(g){return g!==null&&typeof g==\"object\"}t.objectLiteral=h;function d(g,y){return Array.isArray(g)&&g.every(y)}t.typedArray=d})(_||(_={}));var Ne=class t{constructor(i,o,n,e){this._uri=i,this._languageId=o,this._version=n,this._content=e,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(i){if(i){let o=this.offsetAt(i.start),n=this.offsetAt(i.end);return this._content.substring(o,n)}return this._content}update(i,o){for(let n of i)if(t.isIncremental(n)){let e=Pt(n.range),a=this.offsetAt(e.start),c=this.offsetAt(e.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(c,this._content.length);let l=Math.max(e.start.line,0),r=Math.max(e.end.line,0),s=this._lineOffsets,u=Ft(n.text,!1,a);if(r-l===u.length)for(let d=0,g=u.length;d<g;d++)s[d+l+1]=u[d];else u.length<1e4?s.splice(l+1,r-l,...u):this._lineOffsets=s=s.slice(0,l+1).concat(u,s.slice(r+1));let h=n.text.length-(c-a);if(h!==0)for(let d=l+1+u.length,g=s.length;d<g;d++)s[d]=s[d]+h}else if(t.isFull(n))this._content=n.text,this._lineOffsets=void 0;else throw new Error(\"Unknown change event received\");this._version=o}getLineOffsets(){return this._lineOffsets===void 0&&(this._lineOffsets=Ft(this._content,!0)),this._lineOffsets}positionAt(i){i=Math.max(Math.min(i,this._content.length),0);let o=this.getLineOffsets(),n=0,e=o.length;if(e===0)return{line:0,character:i};for(;n<e;){let c=Math.floor((n+e)/2);o[c]>i?e=c:n=c+1}let a=n-1;return{line:a,character:i-o[a]}}offsetAt(i){let o=this.getLineOffsets();if(i.line>=o.length)return this._content.length;if(i.line<0)return 0;let n=o[i.line],e=i.line+1<o.length?o[i.line+1]:this._content.length;return Math.max(Math.min(n+i.character,e),n)}get lineCount(){return this.getLineOffsets().length}static isIncremental(i){let o=i;return o!=null&&typeof o.text==\"string\"&&o.range!==void 0&&(o.rangeLength===void 0||typeof o.rangeLength==\"number\")}static isFull(i){let o=i;return o!=null&&typeof o.text==\"string\"&&o.range===void 0&&o.rangeLength===void 0}},Me;(function(t){function i(e,a,c,l){return new Ne(e,a,c,l)}t.create=i;function o(e,a,c){if(e instanceof Ne)return e.update(a,c),e;throw new Error(\"TextDocument.update: document must be created by TextDocument.create\")}t.update=o;function n(e,a){let c=e.getText(),l=ct(a.map(In),(u,h)=>{let d=u.range.start.line-h.range.start.line;return d===0?u.range.start.character-h.range.start.character:d}),r=0,s=[];for(let u of l){let h=e.offsetAt(u.range.start);if(h<r)throw new Error(\"Overlapping edit\");h>r&&s.push(c.substring(r,h)),u.newText.length&&s.push(u.newText),r=e.offsetAt(u.range.end)}return s.push(c.substr(r)),s.join(\"\")}t.applyEdits=n})(Me||(Me={}));function ct(t,i){if(t.length<=1)return t;let o=t.length/2|0,n=t.slice(0,o),e=t.slice(o);ct(n,i),ct(e,i);let a=0,c=0,l=0;for(;a<n.length&&c<e.length;)i(n[a],e[c])<=0?t[l++]=n[a++]:t[l++]=e[c++];for(;a<n.length;)t[l++]=n[a++];for(;c<e.length;)t[l++]=e[c++];return t}function Ft(t,i,o=0){let n=i?[o]:[];for(let e=0;e<t.length;e++){let a=t.charCodeAt(e);(a===13||a===10)&&(a===13&&e+1<t.length&&t.charCodeAt(e+1)===10&&e++,n.push(o+e+1))}return n}function Pt(t){let i=t.start,o=t.end;return i.line>o.line||i.line===o.line&&i.character>o.character?{start:o,end:i}:t}function In(t){let i=Pt(t.range);return i!==t.range?{newText:t.newText,range:i}:t}var S;(function(t){t[t.StartCommentTag=0]=\"StartCommentTag\",t[t.Comment=1]=\"Comment\",t[t.EndCommentTag=2]=\"EndCommentTag\",t[t.StartTagOpen=3]=\"StartTagOpen\",t[t.StartTagClose=4]=\"StartTagClose\",t[t.StartTagSelfClose=5]=\"StartTagSelfClose\",t[t.StartTag=6]=\"StartTag\",t[t.EndTagOpen=7]=\"EndTagOpen\",t[t.EndTagClose=8]=\"EndTagClose\",t[t.EndTag=9]=\"EndTag\",t[t.DelimiterAssign=10]=\"DelimiterAssign\",t[t.AttributeName=11]=\"AttributeName\",t[t.AttributeValue=12]=\"AttributeValue\",t[t.StartDoctypeTag=13]=\"StartDoctypeTag\",t[t.Doctype=14]=\"Doctype\",t[t.EndDoctypeTag=15]=\"EndDoctypeTag\",t[t.Content=16]=\"Content\",t[t.Whitespace=17]=\"Whitespace\",t[t.Unknown=18]=\"Unknown\",t[t.Script=19]=\"Script\",t[t.Styles=20]=\"Styles\",t[t.EOS=21]=\"EOS\"})(S||(S={}));var W;(function(t){t[t.WithinContent=0]=\"WithinContent\",t[t.AfterOpeningStartTag=1]=\"AfterOpeningStartTag\",t[t.AfterOpeningEndTag=2]=\"AfterOpeningEndTag\",t[t.WithinDoctype=3]=\"WithinDoctype\",t[t.WithinTag=4]=\"WithinTag\",t[t.WithinEndTag=5]=\"WithinEndTag\",t[t.WithinComment=6]=\"WithinComment\",t[t.WithinScriptContent=7]=\"WithinScriptContent\",t[t.WithinStyleContent=8]=\"WithinStyleContent\",t[t.AfterAttributeName=9]=\"AfterAttributeName\",t[t.BeforeAttributeValue=10]=\"BeforeAttributeValue\"})(W||(W={}));var Nt;(function(t){t.LATEST={textDocument:{completion:{completionItem:{documentationFormat:[ee.Markdown,ee.PlainText]}},hover:{contentFormat:[ee.Markdown,ee.PlainText]}}}})(Nt||(Nt={}));var Oe;(function(t){t[t.Unknown=0]=\"Unknown\",t[t.File=1]=\"File\",t[t.Directory=2]=\"Directory\",t[t.SymbolicLink=64]=\"SymbolicLink\"})(Oe||(Oe={}));var he=ge(),Un=function(){function t(i,o){this.source=i,this.len=i.length,this.position=o}return t.prototype.eos=function(){return this.len<=this.position},t.prototype.getSource=function(){return this.source},t.prototype.pos=function(){return this.position},t.prototype.goBackTo=function(i){this.position=i},t.prototype.goBack=function(i){this.position-=i},t.prototype.advance=function(i){this.position+=i},t.prototype.goToEnd=function(){this.position=this.source.length},t.prototype.nextChar=function(){return this.source.charCodeAt(this.position++)||0},t.prototype.peekChar=function(i){return i===void 0&&(i=0),this.source.charCodeAt(this.position+i)||0},t.prototype.advanceIfChar=function(i){return i===this.source.charCodeAt(this.position)?(this.position++,!0):!1},t.prototype.advanceIfChars=function(i){var o;if(this.position+i.length>this.source.length)return!1;for(o=0;o<i.length;o++)if(this.source.charCodeAt(this.position+o)!==i[o])return!1;return this.advance(o),!0},t.prototype.advanceIfRegExp=function(i){var o=this.source.substr(this.position),n=o.match(i);return n?(this.position=this.position+n.index+n[0].length,n[0]):\"\"},t.prototype.advanceUntilRegExp=function(i){var o=this.source.substr(this.position),n=o.match(i);return n?(this.position=this.position+n.index,n[0]):(this.goToEnd(),\"\")},t.prototype.advanceUntilChar=function(i){for(;this.position<this.source.length;){if(this.source.charCodeAt(this.position)===i)return!0;this.advance(1)}return!1},t.prototype.advanceUntilChars=function(i){for(;this.position+i.length<=this.source.length;){for(var o=0;o<i.length&&this.source.charCodeAt(this.position+o)===i[o];o++);if(o===i.length)return!0;this.advance(1)}return this.goToEnd(),!1},t.prototype.skipWhitespace=function(){var i=this.advanceWhileChar(function(o){return o===qn||o===jn||o===Pn||o===On||o===Nn});return i>0},t.prototype.advanceWhileChar=function(i){for(var o=this.position;this.position<this.len&&i(this.source.charCodeAt(this.position));)this.position++;return this.position-o},t}(),Ot=33,ke=45,qe=60,se=62,ht=47,Wn=61,Bn=34,Fn=39,Pn=10,Nn=13,On=12,qn=32,jn=9,Gn={\"text/x-handlebars-template\":!0,\"text/html\":!0};function $(t,i,o,n){i===void 0&&(i=0),o===void 0&&(o=W.WithinContent),n===void 0&&(n=!1);var e=new Un(t,i),a=o,c=0,l=S.Unknown,r,s,u,h,d;function g(){return e.advanceIfRegExp(/^[_:\\w][_:\\w-.\\d]*/).toLowerCase()}function y(){return e.advanceIfRegExp(/^[^\\s\"'></=\\x00-\\x0F\\x7F\\x80-\\x9F]*/).toLowerCase()}function m(w,M,B){return l=M,c=w,r=B,M}function A(){var w=e.pos(),M=a,B=E();return B!==S.EOS&&w===e.pos()&&!(n&&(B===S.StartTagClose||B===S.EndTagClose))?(console.log(\"Scanner.scan has not advanced at offset \"+w+\", state before: \"+M+\" after: \"+a),e.advance(1),m(w,S.Unknown)):B}function E(){var w=e.pos();if(e.eos())return m(w,S.EOS);var M;switch(a){case W.WithinComment:return e.advanceIfChars([ke,ke,se])?(a=W.WithinContent,m(w,S.EndCommentTag)):(e.advanceUntilChars([ke,ke,se]),m(w,S.Comment));case W.WithinDoctype:return e.advanceIfChar(se)?(a=W.WithinContent,m(w,S.EndDoctypeTag)):(e.advanceUntilChar(se),m(w,S.Doctype));case W.WithinContent:if(e.advanceIfChar(qe)){if(!e.eos()&&e.peekChar()===Ot){if(e.advanceIfChars([Ot,ke,ke]))return a=W.WithinComment,m(w,S.StartCommentTag);if(e.advanceIfRegExp(/^!doctype/i))return a=W.WithinDoctype,m(w,S.StartDoctypeTag)}return e.advanceIfChar(ht)?(a=W.AfterOpeningEndTag,m(w,S.EndTagOpen)):(a=W.AfterOpeningStartTag,m(w,S.StartTagOpen))}return e.advanceUntilChar(qe),m(w,S.Content);case W.AfterOpeningEndTag:var B=g();return B.length>0?(a=W.WithinEndTag,m(w,S.EndTag)):e.skipWhitespace()?m(w,S.Whitespace,he(\"error.unexpectedWhitespace\",\"Tag name must directly follow the open bracket.\")):(a=W.WithinEndTag,e.advanceUntilChar(se),w<e.pos()?m(w,S.Unknown,he(\"error.endTagNameExpected\",\"End tag name expected.\")):E());case W.WithinEndTag:if(e.skipWhitespace())return m(w,S.Whitespace);if(e.advanceIfChar(se))return a=W.WithinContent,m(w,S.EndTagClose);if(n&&e.peekChar()===qe)return a=W.WithinContent,m(w,S.EndTagClose,he(\"error.closingBracketMissing\",\"Closing bracket missing.\"));M=he(\"error.closingBracketExpected\",\"Closing bracket expected.\");break;case W.AfterOpeningStartTag:return u=g(),d=void 0,h=void 0,u.length>0?(s=!1,a=W.WithinTag,m(w,S.StartTag)):e.skipWhitespace()?m(w,S.Whitespace,he(\"error.unexpectedWhitespace\",\"Tag name must directly follow the open bracket.\")):(a=W.WithinTag,e.advanceUntilChar(se),w<e.pos()?m(w,S.Unknown,he(\"error.startTagNameExpected\",\"Start tag name expected.\")):E());case W.WithinTag:return e.skipWhitespace()?(s=!0,m(w,S.Whitespace)):s&&(h=y(),h.length>0)?(a=W.AfterAttributeName,s=!1,m(w,S.AttributeName)):e.advanceIfChars([ht,se])?(a=W.WithinContent,m(w,S.StartTagSelfClose)):e.advanceIfChar(se)?(u===\"script\"?d&&Gn[d]?a=W.WithinContent:a=W.WithinScriptContent:u===\"style\"?a=W.WithinStyleContent:a=W.WithinContent,m(w,S.StartTagClose)):n&&e.peekChar()===qe?(a=W.WithinContent,m(w,S.StartTagClose,he(\"error.closingBracketMissing\",\"Closing bracket missing.\"))):(e.advance(1),m(w,S.Unknown,he(\"error.unexpectedCharacterInTag\",\"Unexpected character in tag.\")));case W.AfterAttributeName:return e.skipWhitespace()?(s=!0,m(w,S.Whitespace)):e.advanceIfChar(Wn)?(a=W.BeforeAttributeValue,m(w,S.DelimiterAssign)):(a=W.WithinTag,E());case W.BeforeAttributeValue:if(e.skipWhitespace())return m(w,S.Whitespace);var G=e.advanceIfRegExp(/^[^\\s\"'`=<>]+/);if(G.length>0)return e.peekChar()===se&&e.peekChar(-1)===ht&&(e.goBack(1),G=G.substr(0,G.length-1)),h===\"type\"&&(d=G),a=W.WithinTag,s=!1,m(w,S.AttributeValue);var J=e.peekChar();return J===Fn||J===Bn?(e.advance(1),e.advanceUntilChar(J)&&e.advance(1),h===\"type\"&&(d=e.getSource().substring(w+1,e.pos()-1)),a=W.WithinTag,s=!1,m(w,S.AttributeValue)):(a=W.WithinTag,s=!1,E());case W.WithinScriptContent:for(var f=1;!e.eos();){var p=e.advanceIfRegExp(/<!--|-->|<\\/?script\\s*\\/?>?/i);if(p.length===0)return e.goToEnd(),m(w,S.Script);if(p===\"<!--\")f===1&&(f=2);else if(p===\"-->\")f=1;else if(p[1]!==\"/\")f===2&&(f=3);else if(f===3)f=2;else{e.goBack(p.length);break}}return a=W.WithinContent,w<e.pos()?m(w,S.Script):E();case W.WithinStyleContent:return e.advanceUntilRegExp(/<\\/style/i),a=W.WithinContent,w<e.pos()?m(w,S.Styles):E()}return e.advance(1),a=W.WithinContent,m(w,S.Unknown,M)}return{scan:A,getTokenType:function(){return l},getTokenOffset:function(){return c},getTokenLength:function(){return e.pos()-c},getTokenEnd:function(){return e.pos()},getTokenText:function(){return e.getSource().substring(c,e.pos())},getScannerState:function(){return a},getTokenError:function(){return r}}}function dt(t,i){var o=0,n=t.length;if(n===0)return 0;for(;o<n;){var e=Math.floor((o+n)/2);i(t[e])?n=e:o=e+1}return o}function qt(t,i,o){for(var n=0,e=t.length-1;n<=e;){var a=(n+e)/2|0,c=o(t[a],i);if(c<0)n=a+1;else if(c>0)e=a-1;else return a}return-(n+1)}var Jn=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"menuitem\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"];function pe(t){return!!t&&qt(Jn,t.toLowerCase(),function(i,o){return i.localeCompare(o)})>=0}var jt=function(){function t(i,o,n,e){this.start=i,this.end=o,this.children=n,this.parent=e,this.closed=!1}return Object.defineProperty(t.prototype,\"attributeNames\",{get:function(){return this.attributes?Object.keys(this.attributes):[]},enumerable:!1,configurable:!0}),t.prototype.isSameTag=function(i){return this.tag===void 0?i===void 0:i!==void 0&&this.tag.length===i.length&&this.tag.toLowerCase()===i},Object.defineProperty(t.prototype,\"firstChild\",{get:function(){return this.children[0]},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"lastChild\",{get:function(){return this.children.length?this.children[this.children.length-1]:void 0},enumerable:!1,configurable:!0}),t.prototype.findNodeBefore=function(i){var o=dt(this.children,function(a){return i<=a.start})-1;if(o>=0){var n=this.children[o];if(i>n.start){if(i<n.end)return n.findNodeBefore(i);var e=n.lastChild;return e&&e.end===n.end?n.findNodeBefore(i):n}}return this},t.prototype.findNodeAt=function(i){var o=dt(this.children,function(e){return i<=e.start})-1;if(o>=0){var n=this.children[o];if(i>n.start&&i<=n.end)return n.findNodeAt(i)}return this},t}();function je(t){for(var i=$(t,void 0,void 0,!0),o=new jt(0,t.length,[],void 0),n=o,e=-1,a=void 0,c=null,l=i.scan();l!==S.EOS;){switch(l){case S.StartTagOpen:var r=new jt(i.getTokenOffset(),t.length,[],n);n.children.push(r),n=r;break;case S.StartTag:n.tag=i.getTokenText();break;case S.StartTagClose:n.parent&&(n.end=i.getTokenEnd(),i.getTokenLength()?(n.startTagEnd=i.getTokenEnd(),n.tag&&pe(n.tag)&&(n.closed=!0,n=n.parent)):n=n.parent);break;case S.StartTagSelfClose:n.parent&&(n.closed=!0,n.end=i.getTokenEnd(),n.startTagEnd=i.getTokenEnd(),n=n.parent);break;case S.EndTagOpen:e=i.getTokenOffset(),a=void 0;break;case S.EndTag:a=i.getTokenText().toLowerCase();break;case S.EndTagClose:for(var s=n;!s.isSameTag(a)&&s.parent;)s=s.parent;if(s.parent){for(;n!==s;)n.end=e,n.closed=!1,n=n.parent;n.closed=!0,n.endTagStart=e,n.end=i.getTokenEnd(),n=n.parent}break;case S.AttributeName:{c=i.getTokenText();var u=n.attributes;u||(n.attributes=u={}),u[c]=null;break}case S.AttributeValue:{var h=i.getTokenText(),u=n.attributes;u&&c&&(u[c]=h,c=null);break}}l=i.scan()}for(;n.parent;)n.end=t.length,n.closed=!1,n=n.parent;return{roots:o.children,findNodeBefore:o.findNodeBefore.bind(o),findNodeAt:o.findNodeAt.bind(o)}}var me={\"Aacute;\":\"\\xC1\",Aacute:\"\\xC1\",\"aacute;\":\"\\xE1\",aacute:\"\\xE1\",\"Abreve;\":\"\\u0102\",\"abreve;\":\"\\u0103\",\"ac;\":\"\\u223E\",\"acd;\":\"\\u223F\",\"acE;\":\"\\u223E\\u0333\",\"Acirc;\":\"\\xC2\",Acirc:\"\\xC2\",\"acirc;\":\"\\xE2\",acirc:\"\\xE2\",\"acute;\":\"\\xB4\",acute:\"\\xB4\",\"Acy;\":\"\\u0410\",\"acy;\":\"\\u0430\",\"AElig;\":\"\\xC6\",AElig:\"\\xC6\",\"aelig;\":\"\\xE6\",aelig:\"\\xE6\",\"af;\":\"\\u2061\",\"Afr;\":\"\\u{1D504}\",\"afr;\":\"\\u{1D51E}\",\"Agrave;\":\"\\xC0\",Agrave:\"\\xC0\",\"agrave;\":\"\\xE0\",agrave:\"\\xE0\",\"alefsym;\":\"\\u2135\",\"aleph;\":\"\\u2135\",\"Alpha;\":\"\\u0391\",\"alpha;\":\"\\u03B1\",\"Amacr;\":\"\\u0100\",\"amacr;\":\"\\u0101\",\"amalg;\":\"\\u2A3F\",\"AMP;\":\"&\",AMP:\"&\",\"amp;\":\"&\",amp:\"&\",\"And;\":\"\\u2A53\",\"and;\":\"\\u2227\",\"andand;\":\"\\u2A55\",\"andd;\":\"\\u2A5C\",\"andslope;\":\"\\u2A58\",\"andv;\":\"\\u2A5A\",\"ang;\":\"\\u2220\",\"ange;\":\"\\u29A4\",\"angle;\":\"\\u2220\",\"angmsd;\":\"\\u2221\",\"angmsdaa;\":\"\\u29A8\",\"angmsdab;\":\"\\u29A9\",\"angmsdac;\":\"\\u29AA\",\"angmsdad;\":\"\\u29AB\",\"angmsdae;\":\"\\u29AC\",\"angmsdaf;\":\"\\u29AD\",\"angmsdag;\":\"\\u29AE\",\"angmsdah;\":\"\\u29AF\",\"angrt;\":\"\\u221F\",\"angrtvb;\":\"\\u22BE\",\"angrtvbd;\":\"\\u299D\",\"angsph;\":\"\\u2222\",\"angst;\":\"\\xC5\",\"angzarr;\":\"\\u237C\",\"Aogon;\":\"\\u0104\",\"aogon;\":\"\\u0105\",\"Aopf;\":\"\\u{1D538}\",\"aopf;\":\"\\u{1D552}\",\"ap;\":\"\\u2248\",\"apacir;\":\"\\u2A6F\",\"apE;\":\"\\u2A70\",\"ape;\":\"\\u224A\",\"apid;\":\"\\u224B\",\"apos;\":\"'\",\"ApplyFunction;\":\"\\u2061\",\"approx;\":\"\\u2248\",\"approxeq;\":\"\\u224A\",\"Aring;\":\"\\xC5\",Aring:\"\\xC5\",\"aring;\":\"\\xE5\",aring:\"\\xE5\",\"Ascr;\":\"\\u{1D49C}\",\"ascr;\":\"\\u{1D4B6}\",\"Assign;\":\"\\u2254\",\"ast;\":\"*\",\"asymp;\":\"\\u2248\",\"asympeq;\":\"\\u224D\",\"Atilde;\":\"\\xC3\",Atilde:\"\\xC3\",\"atilde;\":\"\\xE3\",atilde:\"\\xE3\",\"Auml;\":\"\\xC4\",Auml:\"\\xC4\",\"auml;\":\"\\xE4\",auml:\"\\xE4\",\"awconint;\":\"\\u2233\",\"awint;\":\"\\u2A11\",\"backcong;\":\"\\u224C\",\"backepsilon;\":\"\\u03F6\",\"backprime;\":\"\\u2035\",\"backsim;\":\"\\u223D\",\"backsimeq;\":\"\\u22CD\",\"Backslash;\":\"\\u2216\",\"Barv;\":\"\\u2AE7\",\"barvee;\":\"\\u22BD\",\"Barwed;\":\"\\u2306\",\"barwed;\":\"\\u2305\",\"barwedge;\":\"\\u2305\",\"bbrk;\":\"\\u23B5\",\"bbrktbrk;\":\"\\u23B6\",\"bcong;\":\"\\u224C\",\"Bcy;\":\"\\u0411\",\"bcy;\":\"\\u0431\",\"bdquo;\":\"\\u201E\",\"becaus;\":\"\\u2235\",\"Because;\":\"\\u2235\",\"because;\":\"\\u2235\",\"bemptyv;\":\"\\u29B0\",\"bepsi;\":\"\\u03F6\",\"bernou;\":\"\\u212C\",\"Bernoullis;\":\"\\u212C\",\"Beta;\":\"\\u0392\",\"beta;\":\"\\u03B2\",\"beth;\":\"\\u2136\",\"between;\":\"\\u226C\",\"Bfr;\":\"\\u{1D505}\",\"bfr;\":\"\\u{1D51F}\",\"bigcap;\":\"\\u22C2\",\"bigcirc;\":\"\\u25EF\",\"bigcup;\":\"\\u22C3\",\"bigodot;\":\"\\u2A00\",\"bigoplus;\":\"\\u2A01\",\"bigotimes;\":\"\\u2A02\",\"bigsqcup;\":\"\\u2A06\",\"bigstar;\":\"\\u2605\",\"bigtriangledown;\":\"\\u25BD\",\"bigtriangleup;\":\"\\u25B3\",\"biguplus;\":\"\\u2A04\",\"bigvee;\":\"\\u22C1\",\"bigwedge;\":\"\\u22C0\",\"bkarow;\":\"\\u290D\",\"blacklozenge;\":\"\\u29EB\",\"blacksquare;\":\"\\u25AA\",\"blacktriangle;\":\"\\u25B4\",\"blacktriangledown;\":\"\\u25BE\",\"blacktriangleleft;\":\"\\u25C2\",\"blacktriangleright;\":\"\\u25B8\",\"blank;\":\"\\u2423\",\"blk12;\":\"\\u2592\",\"blk14;\":\"\\u2591\",\"blk34;\":\"\\u2593\",\"block;\":\"\\u2588\",\"bne;\":\"=\\u20E5\",\"bnequiv;\":\"\\u2261\\u20E5\",\"bNot;\":\"\\u2AED\",\"bnot;\":\"\\u2310\",\"Bopf;\":\"\\u{1D539}\",\"bopf;\":\"\\u{1D553}\",\"bot;\":\"\\u22A5\",\"bottom;\":\"\\u22A5\",\"bowtie;\":\"\\u22C8\",\"boxbox;\":\"\\u29C9\",\"boxDL;\":\"\\u2557\",\"boxDl;\":\"\\u2556\",\"boxdL;\":\"\\u2555\",\"boxdl;\":\"\\u2510\",\"boxDR;\":\"\\u2554\",\"boxDr;\":\"\\u2553\",\"boxdR;\":\"\\u2552\",\"boxdr;\":\"\\u250C\",\"boxH;\":\"\\u2550\",\"boxh;\":\"\\u2500\",\"boxHD;\":\"\\u2566\",\"boxHd;\":\"\\u2564\",\"boxhD;\":\"\\u2565\",\"boxhd;\":\"\\u252C\",\"boxHU;\":\"\\u2569\",\"boxHu;\":\"\\u2567\",\"boxhU;\":\"\\u2568\",\"boxhu;\":\"\\u2534\",\"boxminus;\":\"\\u229F\",\"boxplus;\":\"\\u229E\",\"boxtimes;\":\"\\u22A0\",\"boxUL;\":\"\\u255D\",\"boxUl;\":\"\\u255C\",\"boxuL;\":\"\\u255B\",\"boxul;\":\"\\u2518\",\"boxUR;\":\"\\u255A\",\"boxUr;\":\"\\u2559\",\"boxuR;\":\"\\u2558\",\"boxur;\":\"\\u2514\",\"boxV;\":\"\\u2551\",\"boxv;\":\"\\u2502\",\"boxVH;\":\"\\u256C\",\"boxVh;\":\"\\u256B\",\"boxvH;\":\"\\u256A\",\"boxvh;\":\"\\u253C\",\"boxVL;\":\"\\u2563\",\"boxVl;\":\"\\u2562\",\"boxvL;\":\"\\u2561\",\"boxvl;\":\"\\u2524\",\"boxVR;\":\"\\u2560\",\"boxVr;\":\"\\u255F\",\"boxvR;\":\"\\u255E\",\"boxvr;\":\"\\u251C\",\"bprime;\":\"\\u2035\",\"Breve;\":\"\\u02D8\",\"breve;\":\"\\u02D8\",\"brvbar;\":\"\\xA6\",brvbar:\"\\xA6\",\"Bscr;\":\"\\u212C\",\"bscr;\":\"\\u{1D4B7}\",\"bsemi;\":\"\\u204F\",\"bsim;\":\"\\u223D\",\"bsime;\":\"\\u22CD\",\"bsol;\":\"\\\\\",\"bsolb;\":\"\\u29C5\",\"bsolhsub;\":\"\\u27C8\",\"bull;\":\"\\u2022\",\"bullet;\":\"\\u2022\",\"bump;\":\"\\u224E\",\"bumpE;\":\"\\u2AAE\",\"bumpe;\":\"\\u224F\",\"Bumpeq;\":\"\\u224E\",\"bumpeq;\":\"\\u224F\",\"Cacute;\":\"\\u0106\",\"cacute;\":\"\\u0107\",\"Cap;\":\"\\u22D2\",\"cap;\":\"\\u2229\",\"capand;\":\"\\u2A44\",\"capbrcup;\":\"\\u2A49\",\"capcap;\":\"\\u2A4B\",\"capcup;\":\"\\u2A47\",\"capdot;\":\"\\u2A40\",\"CapitalDifferentialD;\":\"\\u2145\",\"caps;\":\"\\u2229\\uFE00\",\"caret;\":\"\\u2041\",\"caron;\":\"\\u02C7\",\"Cayleys;\":\"\\u212D\",\"ccaps;\":\"\\u2A4D\",\"Ccaron;\":\"\\u010C\",\"ccaron;\":\"\\u010D\",\"Ccedil;\":\"\\xC7\",Ccedil:\"\\xC7\",\"ccedil;\":\"\\xE7\",ccedil:\"\\xE7\",\"Ccirc;\":\"\\u0108\",\"ccirc;\":\"\\u0109\",\"Cconint;\":\"\\u2230\",\"ccups;\":\"\\u2A4C\",\"ccupssm;\":\"\\u2A50\",\"Cdot;\":\"\\u010A\",\"cdot;\":\"\\u010B\",\"cedil;\":\"\\xB8\",cedil:\"\\xB8\",\"Cedilla;\":\"\\xB8\",\"cemptyv;\":\"\\u29B2\",\"cent;\":\"\\xA2\",cent:\"\\xA2\",\"CenterDot;\":\"\\xB7\",\"centerdot;\":\"\\xB7\",\"Cfr;\":\"\\u212D\",\"cfr;\":\"\\u{1D520}\",\"CHcy;\":\"\\u0427\",\"chcy;\":\"\\u0447\",\"check;\":\"\\u2713\",\"checkmark;\":\"\\u2713\",\"Chi;\":\"\\u03A7\",\"chi;\":\"\\u03C7\",\"cir;\":\"\\u25CB\",\"circ;\":\"\\u02C6\",\"circeq;\":\"\\u2257\",\"circlearrowleft;\":\"\\u21BA\",\"circlearrowright;\":\"\\u21BB\",\"circledast;\":\"\\u229B\",\"circledcirc;\":\"\\u229A\",\"circleddash;\":\"\\u229D\",\"CircleDot;\":\"\\u2299\",\"circledR;\":\"\\xAE\",\"circledS;\":\"\\u24C8\",\"CircleMinus;\":\"\\u2296\",\"CirclePlus;\":\"\\u2295\",\"CircleTimes;\":\"\\u2297\",\"cirE;\":\"\\u29C3\",\"cire;\":\"\\u2257\",\"cirfnint;\":\"\\u2A10\",\"cirmid;\":\"\\u2AEF\",\"cirscir;\":\"\\u29C2\",\"ClockwiseContourIntegral;\":\"\\u2232\",\"CloseCurlyDoubleQuote;\":\"\\u201D\",\"CloseCurlyQuote;\":\"\\u2019\",\"clubs;\":\"\\u2663\",\"clubsuit;\":\"\\u2663\",\"Colon;\":\"\\u2237\",\"colon;\":\":\",\"Colone;\":\"\\u2A74\",\"colone;\":\"\\u2254\",\"coloneq;\":\"\\u2254\",\"comma;\":\",\",\"commat;\":\"@\",\"comp;\":\"\\u2201\",\"compfn;\":\"\\u2218\",\"complement;\":\"\\u2201\",\"complexes;\":\"\\u2102\",\"cong;\":\"\\u2245\",\"congdot;\":\"\\u2A6D\",\"Congruent;\":\"\\u2261\",\"Conint;\":\"\\u222F\",\"conint;\":\"\\u222E\",\"ContourIntegral;\":\"\\u222E\",\"Copf;\":\"\\u2102\",\"copf;\":\"\\u{1D554}\",\"coprod;\":\"\\u2210\",\"Coproduct;\":\"\\u2210\",\"COPY;\":\"\\xA9\",COPY:\"\\xA9\",\"copy;\":\"\\xA9\",copy:\"\\xA9\",\"copysr;\":\"\\u2117\",\"CounterClockwiseContourIntegral;\":\"\\u2233\",\"crarr;\":\"\\u21B5\",\"Cross;\":\"\\u2A2F\",\"cross;\":\"\\u2717\",\"Cscr;\":\"\\u{1D49E}\",\"cscr;\":\"\\u{1D4B8}\",\"csub;\":\"\\u2ACF\",\"csube;\":\"\\u2AD1\",\"csup;\":\"\\u2AD0\",\"csupe;\":\"\\u2AD2\",\"ctdot;\":\"\\u22EF\",\"cudarrl;\":\"\\u2938\",\"cudarrr;\":\"\\u2935\",\"cuepr;\":\"\\u22DE\",\"cuesc;\":\"\\u22DF\",\"cularr;\":\"\\u21B6\",\"cularrp;\":\"\\u293D\",\"Cup;\":\"\\u22D3\",\"cup;\":\"\\u222A\",\"cupbrcap;\":\"\\u2A48\",\"CupCap;\":\"\\u224D\",\"cupcap;\":\"\\u2A46\",\"cupcup;\":\"\\u2A4A\",\"cupdot;\":\"\\u228D\",\"cupor;\":\"\\u2A45\",\"cups;\":\"\\u222A\\uFE00\",\"curarr;\":\"\\u21B7\",\"curarrm;\":\"\\u293C\",\"curlyeqprec;\":\"\\u22DE\",\"curlyeqsucc;\":\"\\u22DF\",\"curlyvee;\":\"\\u22CE\",\"curlywedge;\":\"\\u22CF\",\"curren;\":\"\\xA4\",curren:\"\\xA4\",\"curvearrowleft;\":\"\\u21B6\",\"curvearrowright;\":\"\\u21B7\",\"cuvee;\":\"\\u22CE\",\"cuwed;\":\"\\u22CF\",\"cwconint;\":\"\\u2232\",\"cwint;\":\"\\u2231\",\"cylcty;\":\"\\u232D\",\"Dagger;\":\"\\u2021\",\"dagger;\":\"\\u2020\",\"daleth;\":\"\\u2138\",\"Darr;\":\"\\u21A1\",\"dArr;\":\"\\u21D3\",\"darr;\":\"\\u2193\",\"dash;\":\"\\u2010\",\"Dashv;\":\"\\u2AE4\",\"dashv;\":\"\\u22A3\",\"dbkarow;\":\"\\u290F\",\"dblac;\":\"\\u02DD\",\"Dcaron;\":\"\\u010E\",\"dcaron;\":\"\\u010F\",\"Dcy;\":\"\\u0414\",\"dcy;\":\"\\u0434\",\"DD;\":\"\\u2145\",\"dd;\":\"\\u2146\",\"ddagger;\":\"\\u2021\",\"ddarr;\":\"\\u21CA\",\"DDotrahd;\":\"\\u2911\",\"ddotseq;\":\"\\u2A77\",\"deg;\":\"\\xB0\",deg:\"\\xB0\",\"Del;\":\"\\u2207\",\"Delta;\":\"\\u0394\",\"delta;\":\"\\u03B4\",\"demptyv;\":\"\\u29B1\",\"dfisht;\":\"\\u297F\",\"Dfr;\":\"\\u{1D507}\",\"dfr;\":\"\\u{1D521}\",\"dHar;\":\"\\u2965\",\"dharl;\":\"\\u21C3\",\"dharr;\":\"\\u21C2\",\"DiacriticalAcute;\":\"\\xB4\",\"DiacriticalDot;\":\"\\u02D9\",\"DiacriticalDoubleAcute;\":\"\\u02DD\",\"DiacriticalGrave;\":\"`\",\"DiacriticalTilde;\":\"\\u02DC\",\"diam;\":\"\\u22C4\",\"Diamond;\":\"\\u22C4\",\"diamond;\":\"\\u22C4\",\"diamondsuit;\":\"\\u2666\",\"diams;\":\"\\u2666\",\"die;\":\"\\xA8\",\"DifferentialD;\":\"\\u2146\",\"digamma;\":\"\\u03DD\",\"disin;\":\"\\u22F2\",\"div;\":\"\\xF7\",\"divide;\":\"\\xF7\",divide:\"\\xF7\",\"divideontimes;\":\"\\u22C7\",\"divonx;\":\"\\u22C7\",\"DJcy;\":\"\\u0402\",\"djcy;\":\"\\u0452\",\"dlcorn;\":\"\\u231E\",\"dlcrop;\":\"\\u230D\",\"dollar;\":\"$\",\"Dopf;\":\"\\u{1D53B}\",\"dopf;\":\"\\u{1D555}\",\"Dot;\":\"\\xA8\",\"dot;\":\"\\u02D9\",\"DotDot;\":\"\\u20DC\",\"doteq;\":\"\\u2250\",\"doteqdot;\":\"\\u2251\",\"DotEqual;\":\"\\u2250\",\"dotminus;\":\"\\u2238\",\"dotplus;\":\"\\u2214\",\"dotsquare;\":\"\\u22A1\",\"doublebarwedge;\":\"\\u2306\",\"DoubleContourIntegral;\":\"\\u222F\",\"DoubleDot;\":\"\\xA8\",\"DoubleDownArrow;\":\"\\u21D3\",\"DoubleLeftArrow;\":\"\\u21D0\",\"DoubleLeftRightArrow;\":\"\\u21D4\",\"DoubleLeftTee;\":\"\\u2AE4\",\"DoubleLongLeftArrow;\":\"\\u27F8\",\"DoubleLongLeftRightArrow;\":\"\\u27FA\",\"DoubleLongRightArrow;\":\"\\u27F9\",\"DoubleRightArrow;\":\"\\u21D2\",\"DoubleRightTee;\":\"\\u22A8\",\"DoubleUpArrow;\":\"\\u21D1\",\"DoubleUpDownArrow;\":\"\\u21D5\",\"DoubleVerticalBar;\":\"\\u2225\",\"DownArrow;\":\"\\u2193\",\"Downarrow;\":\"\\u21D3\",\"downarrow;\":\"\\u2193\",\"DownArrowBar;\":\"\\u2913\",\"DownArrowUpArrow;\":\"\\u21F5\",\"DownBreve;\":\"\\u0311\",\"downdownarrows;\":\"\\u21CA\",\"downharpoonleft;\":\"\\u21C3\",\"downharpoonright;\":\"\\u21C2\",\"DownLeftRightVector;\":\"\\u2950\",\"DownLeftTeeVector;\":\"\\u295E\",\"DownLeftVector;\":\"\\u21BD\",\"DownLeftVectorBar;\":\"\\u2956\",\"DownRightTeeVector;\":\"\\u295F\",\"DownRightVector;\":\"\\u21C1\",\"DownRightVectorBar;\":\"\\u2957\",\"DownTee;\":\"\\u22A4\",\"DownTeeArrow;\":\"\\u21A7\",\"drbkarow;\":\"\\u2910\",\"drcorn;\":\"\\u231F\",\"drcrop;\":\"\\u230C\",\"Dscr;\":\"\\u{1D49F}\",\"dscr;\":\"\\u{1D4B9}\",\"DScy;\":\"\\u0405\",\"dscy;\":\"\\u0455\",\"dsol;\":\"\\u29F6\",\"Dstrok;\":\"\\u0110\",\"dstrok;\":\"\\u0111\",\"dtdot;\":\"\\u22F1\",\"dtri;\":\"\\u25BF\",\"dtrif;\":\"\\u25BE\",\"duarr;\":\"\\u21F5\",\"duhar;\":\"\\u296F\",\"dwangle;\":\"\\u29A6\",\"DZcy;\":\"\\u040F\",\"dzcy;\":\"\\u045F\",\"dzigrarr;\":\"\\u27FF\",\"Eacute;\":\"\\xC9\",Eacute:\"\\xC9\",\"eacute;\":\"\\xE9\",eacute:\"\\xE9\",\"easter;\":\"\\u2A6E\",\"Ecaron;\":\"\\u011A\",\"ecaron;\":\"\\u011B\",\"ecir;\":\"\\u2256\",\"Ecirc;\":\"\\xCA\",Ecirc:\"\\xCA\",\"ecirc;\":\"\\xEA\",ecirc:\"\\xEA\",\"ecolon;\":\"\\u2255\",\"Ecy;\":\"\\u042D\",\"ecy;\":\"\\u044D\",\"eDDot;\":\"\\u2A77\",\"Edot;\":\"\\u0116\",\"eDot;\":\"\\u2251\",\"edot;\":\"\\u0117\",\"ee;\":\"\\u2147\",\"efDot;\":\"\\u2252\",\"Efr;\":\"\\u{1D508}\",\"efr;\":\"\\u{1D522}\",\"eg;\":\"\\u2A9A\",\"Egrave;\":\"\\xC8\",Egrave:\"\\xC8\",\"egrave;\":\"\\xE8\",egrave:\"\\xE8\",\"egs;\":\"\\u2A96\",\"egsdot;\":\"\\u2A98\",\"el;\":\"\\u2A99\",\"Element;\":\"\\u2208\",\"elinters;\":\"\\u23E7\",\"ell;\":\"\\u2113\",\"els;\":\"\\u2A95\",\"elsdot;\":\"\\u2A97\",\"Emacr;\":\"\\u0112\",\"emacr;\":\"\\u0113\",\"empty;\":\"\\u2205\",\"emptyset;\":\"\\u2205\",\"EmptySmallSquare;\":\"\\u25FB\",\"emptyv;\":\"\\u2205\",\"EmptyVerySmallSquare;\":\"\\u25AB\",\"emsp;\":\"\\u2003\",\"emsp13;\":\"\\u2004\",\"emsp14;\":\"\\u2005\",\"ENG;\":\"\\u014A\",\"eng;\":\"\\u014B\",\"ensp;\":\"\\u2002\",\"Eogon;\":\"\\u0118\",\"eogon;\":\"\\u0119\",\"Eopf;\":\"\\u{1D53C}\",\"eopf;\":\"\\u{1D556}\",\"epar;\":\"\\u22D5\",\"eparsl;\":\"\\u29E3\",\"eplus;\":\"\\u2A71\",\"epsi;\":\"\\u03B5\",\"Epsilon;\":\"\\u0395\",\"epsilon;\":\"\\u03B5\",\"epsiv;\":\"\\u03F5\",\"eqcirc;\":\"\\u2256\",\"eqcolon;\":\"\\u2255\",\"eqsim;\":\"\\u2242\",\"eqslantgtr;\":\"\\u2A96\",\"eqslantless;\":\"\\u2A95\",\"Equal;\":\"\\u2A75\",\"equals;\":\"=\",\"EqualTilde;\":\"\\u2242\",\"equest;\":\"\\u225F\",\"Equilibrium;\":\"\\u21CC\",\"equiv;\":\"\\u2261\",\"equivDD;\":\"\\u2A78\",\"eqvparsl;\":\"\\u29E5\",\"erarr;\":\"\\u2971\",\"erDot;\":\"\\u2253\",\"Escr;\":\"\\u2130\",\"escr;\":\"\\u212F\",\"esdot;\":\"\\u2250\",\"Esim;\":\"\\u2A73\",\"esim;\":\"\\u2242\",\"Eta;\":\"\\u0397\",\"eta;\":\"\\u03B7\",\"ETH;\":\"\\xD0\",ETH:\"\\xD0\",\"eth;\":\"\\xF0\",eth:\"\\xF0\",\"Euml;\":\"\\xCB\",Euml:\"\\xCB\",\"euml;\":\"\\xEB\",euml:\"\\xEB\",\"euro;\":\"\\u20AC\",\"excl;\":\"!\",\"exist;\":\"\\u2203\",\"Exists;\":\"\\u2203\",\"expectation;\":\"\\u2130\",\"ExponentialE;\":\"\\u2147\",\"exponentiale;\":\"\\u2147\",\"fallingdotseq;\":\"\\u2252\",\"Fcy;\":\"\\u0424\",\"fcy;\":\"\\u0444\",\"female;\":\"\\u2640\",\"ffilig;\":\"\\uFB03\",\"fflig;\":\"\\uFB00\",\"ffllig;\":\"\\uFB04\",\"Ffr;\":\"\\u{1D509}\",\"ffr;\":\"\\u{1D523}\",\"filig;\":\"\\uFB01\",\"FilledSmallSquare;\":\"\\u25FC\",\"FilledVerySmallSquare;\":\"\\u25AA\",\"fjlig;\":\"fj\",\"flat;\":\"\\u266D\",\"fllig;\":\"\\uFB02\",\"fltns;\":\"\\u25B1\",\"fnof;\":\"\\u0192\",\"Fopf;\":\"\\u{1D53D}\",\"fopf;\":\"\\u{1D557}\",\"ForAll;\":\"\\u2200\",\"forall;\":\"\\u2200\",\"fork;\":\"\\u22D4\",\"forkv;\":\"\\u2AD9\",\"Fouriertrf;\":\"\\u2131\",\"fpartint;\":\"\\u2A0D\",\"frac12;\":\"\\xBD\",frac12:\"\\xBD\",\"frac13;\":\"\\u2153\",\"frac14;\":\"\\xBC\",frac14:\"\\xBC\",\"frac15;\":\"\\u2155\",\"frac16;\":\"\\u2159\",\"frac18;\":\"\\u215B\",\"frac23;\":\"\\u2154\",\"frac25;\":\"\\u2156\",\"frac34;\":\"\\xBE\",frac34:\"\\xBE\",\"frac35;\":\"\\u2157\",\"frac38;\":\"\\u215C\",\"frac45;\":\"\\u2158\",\"frac56;\":\"\\u215A\",\"frac58;\":\"\\u215D\",\"frac78;\":\"\\u215E\",\"frasl;\":\"\\u2044\",\"frown;\":\"\\u2322\",\"Fscr;\":\"\\u2131\",\"fscr;\":\"\\u{1D4BB}\",\"gacute;\":\"\\u01F5\",\"Gamma;\":\"\\u0393\",\"gamma;\":\"\\u03B3\",\"Gammad;\":\"\\u03DC\",\"gammad;\":\"\\u03DD\",\"gap;\":\"\\u2A86\",\"Gbreve;\":\"\\u011E\",\"gbreve;\":\"\\u011F\",\"Gcedil;\":\"\\u0122\",\"Gcirc;\":\"\\u011C\",\"gcirc;\":\"\\u011D\",\"Gcy;\":\"\\u0413\",\"gcy;\":\"\\u0433\",\"Gdot;\":\"\\u0120\",\"gdot;\":\"\\u0121\",\"gE;\":\"\\u2267\",\"ge;\":\"\\u2265\",\"gEl;\":\"\\u2A8C\",\"gel;\":\"\\u22DB\",\"geq;\":\"\\u2265\",\"geqq;\":\"\\u2267\",\"geqslant;\":\"\\u2A7E\",\"ges;\":\"\\u2A7E\",\"gescc;\":\"\\u2AA9\",\"gesdot;\":\"\\u2A80\",\"gesdoto;\":\"\\u2A82\",\"gesdotol;\":\"\\u2A84\",\"gesl;\":\"\\u22DB\\uFE00\",\"gesles;\":\"\\u2A94\",\"Gfr;\":\"\\u{1D50A}\",\"gfr;\":\"\\u{1D524}\",\"Gg;\":\"\\u22D9\",\"gg;\":\"\\u226B\",\"ggg;\":\"\\u22D9\",\"gimel;\":\"\\u2137\",\"GJcy;\":\"\\u0403\",\"gjcy;\":\"\\u0453\",\"gl;\":\"\\u2277\",\"gla;\":\"\\u2AA5\",\"glE;\":\"\\u2A92\",\"glj;\":\"\\u2AA4\",\"gnap;\":\"\\u2A8A\",\"gnapprox;\":\"\\u2A8A\",\"gnE;\":\"\\u2269\",\"gne;\":\"\\u2A88\",\"gneq;\":\"\\u2A88\",\"gneqq;\":\"\\u2269\",\"gnsim;\":\"\\u22E7\",\"Gopf;\":\"\\u{1D53E}\",\"gopf;\":\"\\u{1D558}\",\"grave;\":\"`\",\"GreaterEqual;\":\"\\u2265\",\"GreaterEqualLess;\":\"\\u22DB\",\"GreaterFullEqual;\":\"\\u2267\",\"GreaterGreater;\":\"\\u2AA2\",\"GreaterLess;\":\"\\u2277\",\"GreaterSlantEqual;\":\"\\u2A7E\",\"GreaterTilde;\":\"\\u2273\",\"Gscr;\":\"\\u{1D4A2}\",\"gscr;\":\"\\u210A\",\"gsim;\":\"\\u2273\",\"gsime;\":\"\\u2A8E\",\"gsiml;\":\"\\u2A90\",\"GT;\":\">\",GT:\">\",\"Gt;\":\"\\u226B\",\"gt;\":\">\",gt:\">\",\"gtcc;\":\"\\u2AA7\",\"gtcir;\":\"\\u2A7A\",\"gtdot;\":\"\\u22D7\",\"gtlPar;\":\"\\u2995\",\"gtquest;\":\"\\u2A7C\",\"gtrapprox;\":\"\\u2A86\",\"gtrarr;\":\"\\u2978\",\"gtrdot;\":\"\\u22D7\",\"gtreqless;\":\"\\u22DB\",\"gtreqqless;\":\"\\u2A8C\",\"gtrless;\":\"\\u2277\",\"gtrsim;\":\"\\u2273\",\"gvertneqq;\":\"\\u2269\\uFE00\",\"gvnE;\":\"\\u2269\\uFE00\",\"Hacek;\":\"\\u02C7\",\"hairsp;\":\"\\u200A\",\"half;\":\"\\xBD\",\"hamilt;\":\"\\u210B\",\"HARDcy;\":\"\\u042A\",\"hardcy;\":\"\\u044A\",\"hArr;\":\"\\u21D4\",\"harr;\":\"\\u2194\",\"harrcir;\":\"\\u2948\",\"harrw;\":\"\\u21AD\",\"Hat;\":\"^\",\"hbar;\":\"\\u210F\",\"Hcirc;\":\"\\u0124\",\"hcirc;\":\"\\u0125\",\"hearts;\":\"\\u2665\",\"heartsuit;\":\"\\u2665\",\"hellip;\":\"\\u2026\",\"hercon;\":\"\\u22B9\",\"Hfr;\":\"\\u210C\",\"hfr;\":\"\\u{1D525}\",\"HilbertSpace;\":\"\\u210B\",\"hksearow;\":\"\\u2925\",\"hkswarow;\":\"\\u2926\",\"hoarr;\":\"\\u21FF\",\"homtht;\":\"\\u223B\",\"hookleftarrow;\":\"\\u21A9\",\"hookrightarrow;\":\"\\u21AA\",\"Hopf;\":\"\\u210D\",\"hopf;\":\"\\u{1D559}\",\"horbar;\":\"\\u2015\",\"HorizontalLine;\":\"\\u2500\",\"Hscr;\":\"\\u210B\",\"hscr;\":\"\\u{1D4BD}\",\"hslash;\":\"\\u210F\",\"Hstrok;\":\"\\u0126\",\"hstrok;\":\"\\u0127\",\"HumpDownHump;\":\"\\u224E\",\"HumpEqual;\":\"\\u224F\",\"hybull;\":\"\\u2043\",\"hyphen;\":\"\\u2010\",\"Iacute;\":\"\\xCD\",Iacute:\"\\xCD\",\"iacute;\":\"\\xED\",iacute:\"\\xED\",\"ic;\":\"\\u2063\",\"Icirc;\":\"\\xCE\",Icirc:\"\\xCE\",\"icirc;\":\"\\xEE\",icirc:\"\\xEE\",\"Icy;\":\"\\u0418\",\"icy;\":\"\\u0438\",\"Idot;\":\"\\u0130\",\"IEcy;\":\"\\u0415\",\"iecy;\":\"\\u0435\",\"iexcl;\":\"\\xA1\",iexcl:\"\\xA1\",\"iff;\":\"\\u21D4\",\"Ifr;\":\"\\u2111\",\"ifr;\":\"\\u{1D526}\",\"Igrave;\":\"\\xCC\",Igrave:\"\\xCC\",\"igrave;\":\"\\xEC\",igrave:\"\\xEC\",\"ii;\":\"\\u2148\",\"iiiint;\":\"\\u2A0C\",\"iiint;\":\"\\u222D\",\"iinfin;\":\"\\u29DC\",\"iiota;\":\"\\u2129\",\"IJlig;\":\"\\u0132\",\"ijlig;\":\"\\u0133\",\"Im;\":\"\\u2111\",\"Imacr;\":\"\\u012A\",\"imacr;\":\"\\u012B\",\"image;\":\"\\u2111\",\"ImaginaryI;\":\"\\u2148\",\"imagline;\":\"\\u2110\",\"imagpart;\":\"\\u2111\",\"imath;\":\"\\u0131\",\"imof;\":\"\\u22B7\",\"imped;\":\"\\u01B5\",\"Implies;\":\"\\u21D2\",\"in;\":\"\\u2208\",\"incare;\":\"\\u2105\",\"infin;\":\"\\u221E\",\"infintie;\":\"\\u29DD\",\"inodot;\":\"\\u0131\",\"Int;\":\"\\u222C\",\"int;\":\"\\u222B\",\"intcal;\":\"\\u22BA\",\"integers;\":\"\\u2124\",\"Integral;\":\"\\u222B\",\"intercal;\":\"\\u22BA\",\"Intersection;\":\"\\u22C2\",\"intlarhk;\":\"\\u2A17\",\"intprod;\":\"\\u2A3C\",\"InvisibleComma;\":\"\\u2063\",\"InvisibleTimes;\":\"\\u2062\",\"IOcy;\":\"\\u0401\",\"iocy;\":\"\\u0451\",\"Iogon;\":\"\\u012E\",\"iogon;\":\"\\u012F\",\"Iopf;\":\"\\u{1D540}\",\"iopf;\":\"\\u{1D55A}\",\"Iota;\":\"\\u0399\",\"iota;\":\"\\u03B9\",\"iprod;\":\"\\u2A3C\",\"iquest;\":\"\\xBF\",iquest:\"\\xBF\",\"Iscr;\":\"\\u2110\",\"iscr;\":\"\\u{1D4BE}\",\"isin;\":\"\\u2208\",\"isindot;\":\"\\u22F5\",\"isinE;\":\"\\u22F9\",\"isins;\":\"\\u22F4\",\"isinsv;\":\"\\u22F3\",\"isinv;\":\"\\u2208\",\"it;\":\"\\u2062\",\"Itilde;\":\"\\u0128\",\"itilde;\":\"\\u0129\",\"Iukcy;\":\"\\u0406\",\"iukcy;\":\"\\u0456\",\"Iuml;\":\"\\xCF\",Iuml:\"\\xCF\",\"iuml;\":\"\\xEF\",iuml:\"\\xEF\",\"Jcirc;\":\"\\u0134\",\"jcirc;\":\"\\u0135\",\"Jcy;\":\"\\u0419\",\"jcy;\":\"\\u0439\",\"Jfr;\":\"\\u{1D50D}\",\"jfr;\":\"\\u{1D527}\",\"jmath;\":\"\\u0237\",\"Jopf;\":\"\\u{1D541}\",\"jopf;\":\"\\u{1D55B}\",\"Jscr;\":\"\\u{1D4A5}\",\"jscr;\":\"\\u{1D4BF}\",\"Jsercy;\":\"\\u0408\",\"jsercy;\":\"\\u0458\",\"Jukcy;\":\"\\u0404\",\"jukcy;\":\"\\u0454\",\"Kappa;\":\"\\u039A\",\"kappa;\":\"\\u03BA\",\"kappav;\":\"\\u03F0\",\"Kcedil;\":\"\\u0136\",\"kcedil;\":\"\\u0137\",\"Kcy;\":\"\\u041A\",\"kcy;\":\"\\u043A\",\"Kfr;\":\"\\u{1D50E}\",\"kfr;\":\"\\u{1D528}\",\"kgreen;\":\"\\u0138\",\"KHcy;\":\"\\u0425\",\"khcy;\":\"\\u0445\",\"KJcy;\":\"\\u040C\",\"kjcy;\":\"\\u045C\",\"Kopf;\":\"\\u{1D542}\",\"kopf;\":\"\\u{1D55C}\",\"Kscr;\":\"\\u{1D4A6}\",\"kscr;\":\"\\u{1D4C0}\",\"lAarr;\":\"\\u21DA\",\"Lacute;\":\"\\u0139\",\"lacute;\":\"\\u013A\",\"laemptyv;\":\"\\u29B4\",\"lagran;\":\"\\u2112\",\"Lambda;\":\"\\u039B\",\"lambda;\":\"\\u03BB\",\"Lang;\":\"\\u27EA\",\"lang;\":\"\\u27E8\",\"langd;\":\"\\u2991\",\"langle;\":\"\\u27E8\",\"lap;\":\"\\u2A85\",\"Laplacetrf;\":\"\\u2112\",\"laquo;\":\"\\xAB\",laquo:\"\\xAB\",\"Larr;\":\"\\u219E\",\"lArr;\":\"\\u21D0\",\"larr;\":\"\\u2190\",\"larrb;\":\"\\u21E4\",\"larrbfs;\":\"\\u291F\",\"larrfs;\":\"\\u291D\",\"larrhk;\":\"\\u21A9\",\"larrlp;\":\"\\u21AB\",\"larrpl;\":\"\\u2939\",\"larrsim;\":\"\\u2973\",\"larrtl;\":\"\\u21A2\",\"lat;\":\"\\u2AAB\",\"lAtail;\":\"\\u291B\",\"latail;\":\"\\u2919\",\"late;\":\"\\u2AAD\",\"lates;\":\"\\u2AAD\\uFE00\",\"lBarr;\":\"\\u290E\",\"lbarr;\":\"\\u290C\",\"lbbrk;\":\"\\u2772\",\"lbrace;\":\"{\",\"lbrack;\":\"[\",\"lbrke;\":\"\\u298B\",\"lbrksld;\":\"\\u298F\",\"lbrkslu;\":\"\\u298D\",\"Lcaron;\":\"\\u013D\",\"lcaron;\":\"\\u013E\",\"Lcedil;\":\"\\u013B\",\"lcedil;\":\"\\u013C\",\"lceil;\":\"\\u2308\",\"lcub;\":\"{\",\"Lcy;\":\"\\u041B\",\"lcy;\":\"\\u043B\",\"ldca;\":\"\\u2936\",\"ldquo;\":\"\\u201C\",\"ldquor;\":\"\\u201E\",\"ldrdhar;\":\"\\u2967\",\"ldrushar;\":\"\\u294B\",\"ldsh;\":\"\\u21B2\",\"lE;\":\"\\u2266\",\"le;\":\"\\u2264\",\"LeftAngleBracket;\":\"\\u27E8\",\"LeftArrow;\":\"\\u2190\",\"Leftarrow;\":\"\\u21D0\",\"leftarrow;\":\"\\u2190\",\"LeftArrowBar;\":\"\\u21E4\",\"LeftArrowRightArrow;\":\"\\u21C6\",\"leftarrowtail;\":\"\\u21A2\",\"LeftCeiling;\":\"\\u2308\",\"LeftDoubleBracket;\":\"\\u27E6\",\"LeftDownTeeVector;\":\"\\u2961\",\"LeftDownVector;\":\"\\u21C3\",\"LeftDownVectorBar;\":\"\\u2959\",\"LeftFloor;\":\"\\u230A\",\"leftharpoondown;\":\"\\u21BD\",\"leftharpoonup;\":\"\\u21BC\",\"leftleftarrows;\":\"\\u21C7\",\"LeftRightArrow;\":\"\\u2194\",\"Leftrightarrow;\":\"\\u21D4\",\"leftrightarrow;\":\"\\u2194\",\"leftrightarrows;\":\"\\u21C6\",\"leftrightharpoons;\":\"\\u21CB\",\"leftrightsquigarrow;\":\"\\u21AD\",\"LeftRightVector;\":\"\\u294E\",\"LeftTee;\":\"\\u22A3\",\"LeftTeeArrow;\":\"\\u21A4\",\"LeftTeeVector;\":\"\\u295A\",\"leftthreetimes;\":\"\\u22CB\",\"LeftTriangle;\":\"\\u22B2\",\"LeftTriangleBar;\":\"\\u29CF\",\"LeftTriangleEqual;\":\"\\u22B4\",\"LeftUpDownVector;\":\"\\u2951\",\"LeftUpTeeVector;\":\"\\u2960\",\"LeftUpVector;\":\"\\u21BF\",\"LeftUpVectorBar;\":\"\\u2958\",\"LeftVector;\":\"\\u21BC\",\"LeftVectorBar;\":\"\\u2952\",\"lEg;\":\"\\u2A8B\",\"leg;\":\"\\u22DA\",\"leq;\":\"\\u2264\",\"leqq;\":\"\\u2266\",\"leqslant;\":\"\\u2A7D\",\"les;\":\"\\u2A7D\",\"lescc;\":\"\\u2AA8\",\"lesdot;\":\"\\u2A7F\",\"lesdoto;\":\"\\u2A81\",\"lesdotor;\":\"\\u2A83\",\"lesg;\":\"\\u22DA\\uFE00\",\"lesges;\":\"\\u2A93\",\"lessapprox;\":\"\\u2A85\",\"lessdot;\":\"\\u22D6\",\"lesseqgtr;\":\"\\u22DA\",\"lesseqqgtr;\":\"\\u2A8B\",\"LessEqualGreater;\":\"\\u22DA\",\"LessFullEqual;\":\"\\u2266\",\"LessGreater;\":\"\\u2276\",\"lessgtr;\":\"\\u2276\",\"LessLess;\":\"\\u2AA1\",\"lesssim;\":\"\\u2272\",\"LessSlantEqual;\":\"\\u2A7D\",\"LessTilde;\":\"\\u2272\",\"lfisht;\":\"\\u297C\",\"lfloor;\":\"\\u230A\",\"Lfr;\":\"\\u{1D50F}\",\"lfr;\":\"\\u{1D529}\",\"lg;\":\"\\u2276\",\"lgE;\":\"\\u2A91\",\"lHar;\":\"\\u2962\",\"lhard;\":\"\\u21BD\",\"lharu;\":\"\\u21BC\",\"lharul;\":\"\\u296A\",\"lhblk;\":\"\\u2584\",\"LJcy;\":\"\\u0409\",\"ljcy;\":\"\\u0459\",\"Ll;\":\"\\u22D8\",\"ll;\":\"\\u226A\",\"llarr;\":\"\\u21C7\",\"llcorner;\":\"\\u231E\",\"Lleftarrow;\":\"\\u21DA\",\"llhard;\":\"\\u296B\",\"lltri;\":\"\\u25FA\",\"Lmidot;\":\"\\u013F\",\"lmidot;\":\"\\u0140\",\"lmoust;\":\"\\u23B0\",\"lmoustache;\":\"\\u23B0\",\"lnap;\":\"\\u2A89\",\"lnapprox;\":\"\\u2A89\",\"lnE;\":\"\\u2268\",\"lne;\":\"\\u2A87\",\"lneq;\":\"\\u2A87\",\"lneqq;\":\"\\u2268\",\"lnsim;\":\"\\u22E6\",\"loang;\":\"\\u27EC\",\"loarr;\":\"\\u21FD\",\"lobrk;\":\"\\u27E6\",\"LongLeftArrow;\":\"\\u27F5\",\"Longleftarrow;\":\"\\u27F8\",\"longleftarrow;\":\"\\u27F5\",\"LongLeftRightArrow;\":\"\\u27F7\",\"Longleftrightarrow;\":\"\\u27FA\",\"longleftrightarrow;\":\"\\u27F7\",\"longmapsto;\":\"\\u27FC\",\"LongRightArrow;\":\"\\u27F6\",\"Longrightarrow;\":\"\\u27F9\",\"longrightarrow;\":\"\\u27F6\",\"looparrowleft;\":\"\\u21AB\",\"looparrowright;\":\"\\u21AC\",\"lopar;\":\"\\u2985\",\"Lopf;\":\"\\u{1D543}\",\"lopf;\":\"\\u{1D55D}\",\"loplus;\":\"\\u2A2D\",\"lotimes;\":\"\\u2A34\",\"lowast;\":\"\\u2217\",\"lowbar;\":\"_\",\"LowerLeftArrow;\":\"\\u2199\",\"LowerRightArrow;\":\"\\u2198\",\"loz;\":\"\\u25CA\",\"lozenge;\":\"\\u25CA\",\"lozf;\":\"\\u29EB\",\"lpar;\":\"(\",\"lparlt;\":\"\\u2993\",\"lrarr;\":\"\\u21C6\",\"lrcorner;\":\"\\u231F\",\"lrhar;\":\"\\u21CB\",\"lrhard;\":\"\\u296D\",\"lrm;\":\"\\u200E\",\"lrtri;\":\"\\u22BF\",\"lsaquo;\":\"\\u2039\",\"Lscr;\":\"\\u2112\",\"lscr;\":\"\\u{1D4C1}\",\"Lsh;\":\"\\u21B0\",\"lsh;\":\"\\u21B0\",\"lsim;\":\"\\u2272\",\"lsime;\":\"\\u2A8D\",\"lsimg;\":\"\\u2A8F\",\"lsqb;\":\"[\",\"lsquo;\":\"\\u2018\",\"lsquor;\":\"\\u201A\",\"Lstrok;\":\"\\u0141\",\"lstrok;\":\"\\u0142\",\"LT;\":\"<\",LT:\"<\",\"Lt;\":\"\\u226A\",\"lt;\":\"<\",lt:\"<\",\"ltcc;\":\"\\u2AA6\",\"ltcir;\":\"\\u2A79\",\"ltdot;\":\"\\u22D6\",\"lthree;\":\"\\u22CB\",\"ltimes;\":\"\\u22C9\",\"ltlarr;\":\"\\u2976\",\"ltquest;\":\"\\u2A7B\",\"ltri;\":\"\\u25C3\",\"ltrie;\":\"\\u22B4\",\"ltrif;\":\"\\u25C2\",\"ltrPar;\":\"\\u2996\",\"lurdshar;\":\"\\u294A\",\"luruhar;\":\"\\u2966\",\"lvertneqq;\":\"\\u2268\\uFE00\",\"lvnE;\":\"\\u2268\\uFE00\",\"macr;\":\"\\xAF\",macr:\"\\xAF\",\"male;\":\"\\u2642\",\"malt;\":\"\\u2720\",\"maltese;\":\"\\u2720\",\"Map;\":\"\\u2905\",\"map;\":\"\\u21A6\",\"mapsto;\":\"\\u21A6\",\"mapstodown;\":\"\\u21A7\",\"mapstoleft;\":\"\\u21A4\",\"mapstoup;\":\"\\u21A5\",\"marker;\":\"\\u25AE\",\"mcomma;\":\"\\u2A29\",\"Mcy;\":\"\\u041C\",\"mcy;\":\"\\u043C\",\"mdash;\":\"\\u2014\",\"mDDot;\":\"\\u223A\",\"measuredangle;\":\"\\u2221\",\"MediumSpace;\":\"\\u205F\",\"Mellintrf;\":\"\\u2133\",\"Mfr;\":\"\\u{1D510}\",\"mfr;\":\"\\u{1D52A}\",\"mho;\":\"\\u2127\",\"micro;\":\"\\xB5\",micro:\"\\xB5\",\"mid;\":\"\\u2223\",\"midast;\":\"*\",\"midcir;\":\"\\u2AF0\",\"middot;\":\"\\xB7\",middot:\"\\xB7\",\"minus;\":\"\\u2212\",\"minusb;\":\"\\u229F\",\"minusd;\":\"\\u2238\",\"minusdu;\":\"\\u2A2A\",\"MinusPlus;\":\"\\u2213\",\"mlcp;\":\"\\u2ADB\",\"mldr;\":\"\\u2026\",\"mnplus;\":\"\\u2213\",\"models;\":\"\\u22A7\",\"Mopf;\":\"\\u{1D544}\",\"mopf;\":\"\\u{1D55E}\",\"mp;\":\"\\u2213\",\"Mscr;\":\"\\u2133\",\"mscr;\":\"\\u{1D4C2}\",\"mstpos;\":\"\\u223E\",\"Mu;\":\"\\u039C\",\"mu;\":\"\\u03BC\",\"multimap;\":\"\\u22B8\",\"mumap;\":\"\\u22B8\",\"nabla;\":\"\\u2207\",\"Nacute;\":\"\\u0143\",\"nacute;\":\"\\u0144\",\"nang;\":\"\\u2220\\u20D2\",\"nap;\":\"\\u2249\",\"napE;\":\"\\u2A70\\u0338\",\"napid;\":\"\\u224B\\u0338\",\"napos;\":\"\\u0149\",\"napprox;\":\"\\u2249\",\"natur;\":\"\\u266E\",\"natural;\":\"\\u266E\",\"naturals;\":\"\\u2115\",\"nbsp;\":\"\\xA0\",nbsp:\"\\xA0\",\"nbump;\":\"\\u224E\\u0338\",\"nbumpe;\":\"\\u224F\\u0338\",\"ncap;\":\"\\u2A43\",\"Ncaron;\":\"\\u0147\",\"ncaron;\":\"\\u0148\",\"Ncedil;\":\"\\u0145\",\"ncedil;\":\"\\u0146\",\"ncong;\":\"\\u2247\",\"ncongdot;\":\"\\u2A6D\\u0338\",\"ncup;\":\"\\u2A42\",\"Ncy;\":\"\\u041D\",\"ncy;\":\"\\u043D\",\"ndash;\":\"\\u2013\",\"ne;\":\"\\u2260\",\"nearhk;\":\"\\u2924\",\"neArr;\":\"\\u21D7\",\"nearr;\":\"\\u2197\",\"nearrow;\":\"\\u2197\",\"nedot;\":\"\\u2250\\u0338\",\"NegativeMediumSpace;\":\"\\u200B\",\"NegativeThickSpace;\":\"\\u200B\",\"NegativeThinSpace;\":\"\\u200B\",\"NegativeVeryThinSpace;\":\"\\u200B\",\"nequiv;\":\"\\u2262\",\"nesear;\":\"\\u2928\",\"nesim;\":\"\\u2242\\u0338\",\"NestedGreaterGreater;\":\"\\u226B\",\"NestedLessLess;\":\"\\u226A\",\"NewLine;\":`\n`,\"nexist;\":\"\\u2204\",\"nexists;\":\"\\u2204\",\"Nfr;\":\"\\u{1D511}\",\"nfr;\":\"\\u{1D52B}\",\"ngE;\":\"\\u2267\\u0338\",\"nge;\":\"\\u2271\",\"ngeq;\":\"\\u2271\",\"ngeqq;\":\"\\u2267\\u0338\",\"ngeqslant;\":\"\\u2A7E\\u0338\",\"nges;\":\"\\u2A7E\\u0338\",\"nGg;\":\"\\u22D9\\u0338\",\"ngsim;\":\"\\u2275\",\"nGt;\":\"\\u226B\\u20D2\",\"ngt;\":\"\\u226F\",\"ngtr;\":\"\\u226F\",\"nGtv;\":\"\\u226B\\u0338\",\"nhArr;\":\"\\u21CE\",\"nharr;\":\"\\u21AE\",\"nhpar;\":\"\\u2AF2\",\"ni;\":\"\\u220B\",\"nis;\":\"\\u22FC\",\"nisd;\":\"\\u22FA\",\"niv;\":\"\\u220B\",\"NJcy;\":\"\\u040A\",\"njcy;\":\"\\u045A\",\"nlArr;\":\"\\u21CD\",\"nlarr;\":\"\\u219A\",\"nldr;\":\"\\u2025\",\"nlE;\":\"\\u2266\\u0338\",\"nle;\":\"\\u2270\",\"nLeftarrow;\":\"\\u21CD\",\"nleftarrow;\":\"\\u219A\",\"nLeftrightarrow;\":\"\\u21CE\",\"nleftrightarrow;\":\"\\u21AE\",\"nleq;\":\"\\u2270\",\"nleqq;\":\"\\u2266\\u0338\",\"nleqslant;\":\"\\u2A7D\\u0338\",\"nles;\":\"\\u2A7D\\u0338\",\"nless;\":\"\\u226E\",\"nLl;\":\"\\u22D8\\u0338\",\"nlsim;\":\"\\u2274\",\"nLt;\":\"\\u226A\\u20D2\",\"nlt;\":\"\\u226E\",\"nltri;\":\"\\u22EA\",\"nltrie;\":\"\\u22EC\",\"nLtv;\":\"\\u226A\\u0338\",\"nmid;\":\"\\u2224\",\"NoBreak;\":\"\\u2060\",\"NonBreakingSpace;\":\"\\xA0\",\"Nopf;\":\"\\u2115\",\"nopf;\":\"\\u{1D55F}\",\"Not;\":\"\\u2AEC\",\"not;\":\"\\xAC\",not:\"\\xAC\",\"NotCongruent;\":\"\\u2262\",\"NotCupCap;\":\"\\u226D\",\"NotDoubleVerticalBar;\":\"\\u2226\",\"NotElement;\":\"\\u2209\",\"NotEqual;\":\"\\u2260\",\"NotEqualTilde;\":\"\\u2242\\u0338\",\"NotExists;\":\"\\u2204\",\"NotGreater;\":\"\\u226F\",\"NotGreaterEqual;\":\"\\u2271\",\"NotGreaterFullEqual;\":\"\\u2267\\u0338\",\"NotGreaterGreater;\":\"\\u226B\\u0338\",\"NotGreaterLess;\":\"\\u2279\",\"NotGreaterSlantEqual;\":\"\\u2A7E\\u0338\",\"NotGreaterTilde;\":\"\\u2275\",\"NotHumpDownHump;\":\"\\u224E\\u0338\",\"NotHumpEqual;\":\"\\u224F\\u0338\",\"notin;\":\"\\u2209\",\"notindot;\":\"\\u22F5\\u0338\",\"notinE;\":\"\\u22F9\\u0338\",\"notinva;\":\"\\u2209\",\"notinvb;\":\"\\u22F7\",\"notinvc;\":\"\\u22F6\",\"NotLeftTriangle;\":\"\\u22EA\",\"NotLeftTriangleBar;\":\"\\u29CF\\u0338\",\"NotLeftTriangleEqual;\":\"\\u22EC\",\"NotLess;\":\"\\u226E\",\"NotLessEqual;\":\"\\u2270\",\"NotLessGreater;\":\"\\u2278\",\"NotLessLess;\":\"\\u226A\\u0338\",\"NotLessSlantEqual;\":\"\\u2A7D\\u0338\",\"NotLessTilde;\":\"\\u2274\",\"NotNestedGreaterGreater;\":\"\\u2AA2\\u0338\",\"NotNestedLessLess;\":\"\\u2AA1\\u0338\",\"notni;\":\"\\u220C\",\"notniva;\":\"\\u220C\",\"notnivb;\":\"\\u22FE\",\"notnivc;\":\"\\u22FD\",\"NotPrecedes;\":\"\\u2280\",\"NotPrecedesEqual;\":\"\\u2AAF\\u0338\",\"NotPrecedesSlantEqual;\":\"\\u22E0\",\"NotReverseElement;\":\"\\u220C\",\"NotRightTriangle;\":\"\\u22EB\",\"NotRightTriangleBar;\":\"\\u29D0\\u0338\",\"NotRightTriangleEqual;\":\"\\u22ED\",\"NotSquareSubset;\":\"\\u228F\\u0338\",\"NotSquareSubsetEqual;\":\"\\u22E2\",\"NotSquareSuperset;\":\"\\u2290\\u0338\",\"NotSquareSupersetEqual;\":\"\\u22E3\",\"NotSubset;\":\"\\u2282\\u20D2\",\"NotSubsetEqual;\":\"\\u2288\",\"NotSucceeds;\":\"\\u2281\",\"NotSucceedsEqual;\":\"\\u2AB0\\u0338\",\"NotSucceedsSlantEqual;\":\"\\u22E1\",\"NotSucceedsTilde;\":\"\\u227F\\u0338\",\"NotSuperset;\":\"\\u2283\\u20D2\",\"NotSupersetEqual;\":\"\\u2289\",\"NotTilde;\":\"\\u2241\",\"NotTildeEqual;\":\"\\u2244\",\"NotTildeFullEqual;\":\"\\u2247\",\"NotTildeTilde;\":\"\\u2249\",\"NotVerticalBar;\":\"\\u2224\",\"npar;\":\"\\u2226\",\"nparallel;\":\"\\u2226\",\"nparsl;\":\"\\u2AFD\\u20E5\",\"npart;\":\"\\u2202\\u0338\",\"npolint;\":\"\\u2A14\",\"npr;\":\"\\u2280\",\"nprcue;\":\"\\u22E0\",\"npre;\":\"\\u2AAF\\u0338\",\"nprec;\":\"\\u2280\",\"npreceq;\":\"\\u2AAF\\u0338\",\"nrArr;\":\"\\u21CF\",\"nrarr;\":\"\\u219B\",\"nrarrc;\":\"\\u2933\\u0338\",\"nrarrw;\":\"\\u219D\\u0338\",\"nRightarrow;\":\"\\u21CF\",\"nrightarrow;\":\"\\u219B\",\"nrtri;\":\"\\u22EB\",\"nrtrie;\":\"\\u22ED\",\"nsc;\":\"\\u2281\",\"nsccue;\":\"\\u22E1\",\"nsce;\":\"\\u2AB0\\u0338\",\"Nscr;\":\"\\u{1D4A9}\",\"nscr;\":\"\\u{1D4C3}\",\"nshortmid;\":\"\\u2224\",\"nshortparallel;\":\"\\u2226\",\"nsim;\":\"\\u2241\",\"nsime;\":\"\\u2244\",\"nsimeq;\":\"\\u2244\",\"nsmid;\":\"\\u2224\",\"nspar;\":\"\\u2226\",\"nsqsube;\":\"\\u22E2\",\"nsqsupe;\":\"\\u22E3\",\"nsub;\":\"\\u2284\",\"nsubE;\":\"\\u2AC5\\u0338\",\"nsube;\":\"\\u2288\",\"nsubset;\":\"\\u2282\\u20D2\",\"nsubseteq;\":\"\\u2288\",\"nsubseteqq;\":\"\\u2AC5\\u0338\",\"nsucc;\":\"\\u2281\",\"nsucceq;\":\"\\u2AB0\\u0338\",\"nsup;\":\"\\u2285\",\"nsupE;\":\"\\u2AC6\\u0338\",\"nsupe;\":\"\\u2289\",\"nsupset;\":\"\\u2283\\u20D2\",\"nsupseteq;\":\"\\u2289\",\"nsupseteqq;\":\"\\u2AC6\\u0338\",\"ntgl;\":\"\\u2279\",\"Ntilde;\":\"\\xD1\",Ntilde:\"\\xD1\",\"ntilde;\":\"\\xF1\",ntilde:\"\\xF1\",\"ntlg;\":\"\\u2278\",\"ntriangleleft;\":\"\\u22EA\",\"ntrianglelefteq;\":\"\\u22EC\",\"ntriangleright;\":\"\\u22EB\",\"ntrianglerighteq;\":\"\\u22ED\",\"Nu;\":\"\\u039D\",\"nu;\":\"\\u03BD\",\"num;\":\"#\",\"numero;\":\"\\u2116\",\"numsp;\":\"\\u2007\",\"nvap;\":\"\\u224D\\u20D2\",\"nVDash;\":\"\\u22AF\",\"nVdash;\":\"\\u22AE\",\"nvDash;\":\"\\u22AD\",\"nvdash;\":\"\\u22AC\",\"nvge;\":\"\\u2265\\u20D2\",\"nvgt;\":\">\\u20D2\",\"nvHarr;\":\"\\u2904\",\"nvinfin;\":\"\\u29DE\",\"nvlArr;\":\"\\u2902\",\"nvle;\":\"\\u2264\\u20D2\",\"nvlt;\":\"<\\u20D2\",\"nvltrie;\":\"\\u22B4\\u20D2\",\"nvrArr;\":\"\\u2903\",\"nvrtrie;\":\"\\u22B5\\u20D2\",\"nvsim;\":\"\\u223C\\u20D2\",\"nwarhk;\":\"\\u2923\",\"nwArr;\":\"\\u21D6\",\"nwarr;\":\"\\u2196\",\"nwarrow;\":\"\\u2196\",\"nwnear;\":\"\\u2927\",\"Oacute;\":\"\\xD3\",Oacute:\"\\xD3\",\"oacute;\":\"\\xF3\",oacute:\"\\xF3\",\"oast;\":\"\\u229B\",\"ocir;\":\"\\u229A\",\"Ocirc;\":\"\\xD4\",Ocirc:\"\\xD4\",\"ocirc;\":\"\\xF4\",ocirc:\"\\xF4\",\"Ocy;\":\"\\u041E\",\"ocy;\":\"\\u043E\",\"odash;\":\"\\u229D\",\"Odblac;\":\"\\u0150\",\"odblac;\":\"\\u0151\",\"odiv;\":\"\\u2A38\",\"odot;\":\"\\u2299\",\"odsold;\":\"\\u29BC\",\"OElig;\":\"\\u0152\",\"oelig;\":\"\\u0153\",\"ofcir;\":\"\\u29BF\",\"Ofr;\":\"\\u{1D512}\",\"ofr;\":\"\\u{1D52C}\",\"ogon;\":\"\\u02DB\",\"Ograve;\":\"\\xD2\",Ograve:\"\\xD2\",\"ograve;\":\"\\xF2\",ograve:\"\\xF2\",\"ogt;\":\"\\u29C1\",\"ohbar;\":\"\\u29B5\",\"ohm;\":\"\\u03A9\",\"oint;\":\"\\u222E\",\"olarr;\":\"\\u21BA\",\"olcir;\":\"\\u29BE\",\"olcross;\":\"\\u29BB\",\"oline;\":\"\\u203E\",\"olt;\":\"\\u29C0\",\"Omacr;\":\"\\u014C\",\"omacr;\":\"\\u014D\",\"Omega;\":\"\\u03A9\",\"omega;\":\"\\u03C9\",\"Omicron;\":\"\\u039F\",\"omicron;\":\"\\u03BF\",\"omid;\":\"\\u29B6\",\"ominus;\":\"\\u2296\",\"Oopf;\":\"\\u{1D546}\",\"oopf;\":\"\\u{1D560}\",\"opar;\":\"\\u29B7\",\"OpenCurlyDoubleQuote;\":\"\\u201C\",\"OpenCurlyQuote;\":\"\\u2018\",\"operp;\":\"\\u29B9\",\"oplus;\":\"\\u2295\",\"Or;\":\"\\u2A54\",\"or;\":\"\\u2228\",\"orarr;\":\"\\u21BB\",\"ord;\":\"\\u2A5D\",\"order;\":\"\\u2134\",\"orderof;\":\"\\u2134\",\"ordf;\":\"\\xAA\",ordf:\"\\xAA\",\"ordm;\":\"\\xBA\",ordm:\"\\xBA\",\"origof;\":\"\\u22B6\",\"oror;\":\"\\u2A56\",\"orslope;\":\"\\u2A57\",\"orv;\":\"\\u2A5B\",\"oS;\":\"\\u24C8\",\"Oscr;\":\"\\u{1D4AA}\",\"oscr;\":\"\\u2134\",\"Oslash;\":\"\\xD8\",Oslash:\"\\xD8\",\"oslash;\":\"\\xF8\",oslash:\"\\xF8\",\"osol;\":\"\\u2298\",\"Otilde;\":\"\\xD5\",Otilde:\"\\xD5\",\"otilde;\":\"\\xF5\",otilde:\"\\xF5\",\"Otimes;\":\"\\u2A37\",\"otimes;\":\"\\u2297\",\"otimesas;\":\"\\u2A36\",\"Ouml;\":\"\\xD6\",Ouml:\"\\xD6\",\"ouml;\":\"\\xF6\",ouml:\"\\xF6\",\"ovbar;\":\"\\u233D\",\"OverBar;\":\"\\u203E\",\"OverBrace;\":\"\\u23DE\",\"OverBracket;\":\"\\u23B4\",\"OverParenthesis;\":\"\\u23DC\",\"par;\":\"\\u2225\",\"para;\":\"\\xB6\",para:\"\\xB6\",\"parallel;\":\"\\u2225\",\"parsim;\":\"\\u2AF3\",\"parsl;\":\"\\u2AFD\",\"part;\":\"\\u2202\",\"PartialD;\":\"\\u2202\",\"Pcy;\":\"\\u041F\",\"pcy;\":\"\\u043F\",\"percnt;\":\"%\",\"period;\":\".\",\"permil;\":\"\\u2030\",\"perp;\":\"\\u22A5\",\"pertenk;\":\"\\u2031\",\"Pfr;\":\"\\u{1D513}\",\"pfr;\":\"\\u{1D52D}\",\"Phi;\":\"\\u03A6\",\"phi;\":\"\\u03C6\",\"phiv;\":\"\\u03D5\",\"phmmat;\":\"\\u2133\",\"phone;\":\"\\u260E\",\"Pi;\":\"\\u03A0\",\"pi;\":\"\\u03C0\",\"pitchfork;\":\"\\u22D4\",\"piv;\":\"\\u03D6\",\"planck;\":\"\\u210F\",\"planckh;\":\"\\u210E\",\"plankv;\":\"\\u210F\",\"plus;\":\"+\",\"plusacir;\":\"\\u2A23\",\"plusb;\":\"\\u229E\",\"pluscir;\":\"\\u2A22\",\"plusdo;\":\"\\u2214\",\"plusdu;\":\"\\u2A25\",\"pluse;\":\"\\u2A72\",\"PlusMinus;\":\"\\xB1\",\"plusmn;\":\"\\xB1\",plusmn:\"\\xB1\",\"plussim;\":\"\\u2A26\",\"plustwo;\":\"\\u2A27\",\"pm;\":\"\\xB1\",\"Poincareplane;\":\"\\u210C\",\"pointint;\":\"\\u2A15\",\"Popf;\":\"\\u2119\",\"popf;\":\"\\u{1D561}\",\"pound;\":\"\\xA3\",pound:\"\\xA3\",\"Pr;\":\"\\u2ABB\",\"pr;\":\"\\u227A\",\"prap;\":\"\\u2AB7\",\"prcue;\":\"\\u227C\",\"prE;\":\"\\u2AB3\",\"pre;\":\"\\u2AAF\",\"prec;\":\"\\u227A\",\"precapprox;\":\"\\u2AB7\",\"preccurlyeq;\":\"\\u227C\",\"Precedes;\":\"\\u227A\",\"PrecedesEqual;\":\"\\u2AAF\",\"PrecedesSlantEqual;\":\"\\u227C\",\"PrecedesTilde;\":\"\\u227E\",\"preceq;\":\"\\u2AAF\",\"precnapprox;\":\"\\u2AB9\",\"precneqq;\":\"\\u2AB5\",\"precnsim;\":\"\\u22E8\",\"precsim;\":\"\\u227E\",\"Prime;\":\"\\u2033\",\"prime;\":\"\\u2032\",\"primes;\":\"\\u2119\",\"prnap;\":\"\\u2AB9\",\"prnE;\":\"\\u2AB5\",\"prnsim;\":\"\\u22E8\",\"prod;\":\"\\u220F\",\"Product;\":\"\\u220F\",\"profalar;\":\"\\u232E\",\"profline;\":\"\\u2312\",\"profsurf;\":\"\\u2313\",\"prop;\":\"\\u221D\",\"Proportion;\":\"\\u2237\",\"Proportional;\":\"\\u221D\",\"propto;\":\"\\u221D\",\"prsim;\":\"\\u227E\",\"prurel;\":\"\\u22B0\",\"Pscr;\":\"\\u{1D4AB}\",\"pscr;\":\"\\u{1D4C5}\",\"Psi;\":\"\\u03A8\",\"psi;\":\"\\u03C8\",\"puncsp;\":\"\\u2008\",\"Qfr;\":\"\\u{1D514}\",\"qfr;\":\"\\u{1D52E}\",\"qint;\":\"\\u2A0C\",\"Qopf;\":\"\\u211A\",\"qopf;\":\"\\u{1D562}\",\"qprime;\":\"\\u2057\",\"Qscr;\":\"\\u{1D4AC}\",\"qscr;\":\"\\u{1D4C6}\",\"quaternions;\":\"\\u210D\",\"quatint;\":\"\\u2A16\",\"quest;\":\"?\",\"questeq;\":\"\\u225F\",\"QUOT;\":'\"',QUOT:'\"',\"quot;\":'\"',quot:'\"',\"rAarr;\":\"\\u21DB\",\"race;\":\"\\u223D\\u0331\",\"Racute;\":\"\\u0154\",\"racute;\":\"\\u0155\",\"radic;\":\"\\u221A\",\"raemptyv;\":\"\\u29B3\",\"Rang;\":\"\\u27EB\",\"rang;\":\"\\u27E9\",\"rangd;\":\"\\u2992\",\"range;\":\"\\u29A5\",\"rangle;\":\"\\u27E9\",\"raquo;\":\"\\xBB\",raquo:\"\\xBB\",\"Rarr;\":\"\\u21A0\",\"rArr;\":\"\\u21D2\",\"rarr;\":\"\\u2192\",\"rarrap;\":\"\\u2975\",\"rarrb;\":\"\\u21E5\",\"rarrbfs;\":\"\\u2920\",\"rarrc;\":\"\\u2933\",\"rarrfs;\":\"\\u291E\",\"rarrhk;\":\"\\u21AA\",\"rarrlp;\":\"\\u21AC\",\"rarrpl;\":\"\\u2945\",\"rarrsim;\":\"\\u2974\",\"Rarrtl;\":\"\\u2916\",\"rarrtl;\":\"\\u21A3\",\"rarrw;\":\"\\u219D\",\"rAtail;\":\"\\u291C\",\"ratail;\":\"\\u291A\",\"ratio;\":\"\\u2236\",\"rationals;\":\"\\u211A\",\"RBarr;\":\"\\u2910\",\"rBarr;\":\"\\u290F\",\"rbarr;\":\"\\u290D\",\"rbbrk;\":\"\\u2773\",\"rbrace;\":\"}\",\"rbrack;\":\"]\",\"rbrke;\":\"\\u298C\",\"rbrksld;\":\"\\u298E\",\"rbrkslu;\":\"\\u2990\",\"Rcaron;\":\"\\u0158\",\"rcaron;\":\"\\u0159\",\"Rcedil;\":\"\\u0156\",\"rcedil;\":\"\\u0157\",\"rceil;\":\"\\u2309\",\"rcub;\":\"}\",\"Rcy;\":\"\\u0420\",\"rcy;\":\"\\u0440\",\"rdca;\":\"\\u2937\",\"rdldhar;\":\"\\u2969\",\"rdquo;\":\"\\u201D\",\"rdquor;\":\"\\u201D\",\"rdsh;\":\"\\u21B3\",\"Re;\":\"\\u211C\",\"real;\":\"\\u211C\",\"realine;\":\"\\u211B\",\"realpart;\":\"\\u211C\",\"reals;\":\"\\u211D\",\"rect;\":\"\\u25AD\",\"REG;\":\"\\xAE\",REG:\"\\xAE\",\"reg;\":\"\\xAE\",reg:\"\\xAE\",\"ReverseElement;\":\"\\u220B\",\"ReverseEquilibrium;\":\"\\u21CB\",\"ReverseUpEquilibrium;\":\"\\u296F\",\"rfisht;\":\"\\u297D\",\"rfloor;\":\"\\u230B\",\"Rfr;\":\"\\u211C\",\"rfr;\":\"\\u{1D52F}\",\"rHar;\":\"\\u2964\",\"rhard;\":\"\\u21C1\",\"rharu;\":\"\\u21C0\",\"rharul;\":\"\\u296C\",\"Rho;\":\"\\u03A1\",\"rho;\":\"\\u03C1\",\"rhov;\":\"\\u03F1\",\"RightAngleBracket;\":\"\\u27E9\",\"RightArrow;\":\"\\u2192\",\"Rightarrow;\":\"\\u21D2\",\"rightarrow;\":\"\\u2192\",\"RightArrowBar;\":\"\\u21E5\",\"RightArrowLeftArrow;\":\"\\u21C4\",\"rightarrowtail;\":\"\\u21A3\",\"RightCeiling;\":\"\\u2309\",\"RightDoubleBracket;\":\"\\u27E7\",\"RightDownTeeVector;\":\"\\u295D\",\"RightDownVector;\":\"\\u21C2\",\"RightDownVectorBar;\":\"\\u2955\",\"RightFloor;\":\"\\u230B\",\"rightharpoondown;\":\"\\u21C1\",\"rightharpoonup;\":\"\\u21C0\",\"rightleftarrows;\":\"\\u21C4\",\"rightleftharpoons;\":\"\\u21CC\",\"rightrightarrows;\":\"\\u21C9\",\"rightsquigarrow;\":\"\\u219D\",\"RightTee;\":\"\\u22A2\",\"RightTeeArrow;\":\"\\u21A6\",\"RightTeeVector;\":\"\\u295B\",\"rightthreetimes;\":\"\\u22CC\",\"RightTriangle;\":\"\\u22B3\",\"RightTriangleBar;\":\"\\u29D0\",\"RightTriangleEqual;\":\"\\u22B5\",\"RightUpDownVector;\":\"\\u294F\",\"RightUpTeeVector;\":\"\\u295C\",\"RightUpVector;\":\"\\u21BE\",\"RightUpVectorBar;\":\"\\u2954\",\"RightVector;\":\"\\u21C0\",\"RightVectorBar;\":\"\\u2953\",\"ring;\":\"\\u02DA\",\"risingdotseq;\":\"\\u2253\",\"rlarr;\":\"\\u21C4\",\"rlhar;\":\"\\u21CC\",\"rlm;\":\"\\u200F\",\"rmoust;\":\"\\u23B1\",\"rmoustache;\":\"\\u23B1\",\"rnmid;\":\"\\u2AEE\",\"roang;\":\"\\u27ED\",\"roarr;\":\"\\u21FE\",\"robrk;\":\"\\u27E7\",\"ropar;\":\"\\u2986\",\"Ropf;\":\"\\u211D\",\"ropf;\":\"\\u{1D563}\",\"roplus;\":\"\\u2A2E\",\"rotimes;\":\"\\u2A35\",\"RoundImplies;\":\"\\u2970\",\"rpar;\":\")\",\"rpargt;\":\"\\u2994\",\"rppolint;\":\"\\u2A12\",\"rrarr;\":\"\\u21C9\",\"Rrightarrow;\":\"\\u21DB\",\"rsaquo;\":\"\\u203A\",\"Rscr;\":\"\\u211B\",\"rscr;\":\"\\u{1D4C7}\",\"Rsh;\":\"\\u21B1\",\"rsh;\":\"\\u21B1\",\"rsqb;\":\"]\",\"rsquo;\":\"\\u2019\",\"rsquor;\":\"\\u2019\",\"rthree;\":\"\\u22CC\",\"rtimes;\":\"\\u22CA\",\"rtri;\":\"\\u25B9\",\"rtrie;\":\"\\u22B5\",\"rtrif;\":\"\\u25B8\",\"rtriltri;\":\"\\u29CE\",\"RuleDelayed;\":\"\\u29F4\",\"ruluhar;\":\"\\u2968\",\"rx;\":\"\\u211E\",\"Sacute;\":\"\\u015A\",\"sacute;\":\"\\u015B\",\"sbquo;\":\"\\u201A\",\"Sc;\":\"\\u2ABC\",\"sc;\":\"\\u227B\",\"scap;\":\"\\u2AB8\",\"Scaron;\":\"\\u0160\",\"scaron;\":\"\\u0161\",\"sccue;\":\"\\u227D\",\"scE;\":\"\\u2AB4\",\"sce;\":\"\\u2AB0\",\"Scedil;\":\"\\u015E\",\"scedil;\":\"\\u015F\",\"Scirc;\":\"\\u015C\",\"scirc;\":\"\\u015D\",\"scnap;\":\"\\u2ABA\",\"scnE;\":\"\\u2AB6\",\"scnsim;\":\"\\u22E9\",\"scpolint;\":\"\\u2A13\",\"scsim;\":\"\\u227F\",\"Scy;\":\"\\u0421\",\"scy;\":\"\\u0441\",\"sdot;\":\"\\u22C5\",\"sdotb;\":\"\\u22A1\",\"sdote;\":\"\\u2A66\",\"searhk;\":\"\\u2925\",\"seArr;\":\"\\u21D8\",\"searr;\":\"\\u2198\",\"searrow;\":\"\\u2198\",\"sect;\":\"\\xA7\",sect:\"\\xA7\",\"semi;\":\";\",\"seswar;\":\"\\u2929\",\"setminus;\":\"\\u2216\",\"setmn;\":\"\\u2216\",\"sext;\":\"\\u2736\",\"Sfr;\":\"\\u{1D516}\",\"sfr;\":\"\\u{1D530}\",\"sfrown;\":\"\\u2322\",\"sharp;\":\"\\u266F\",\"SHCHcy;\":\"\\u0429\",\"shchcy;\":\"\\u0449\",\"SHcy;\":\"\\u0428\",\"shcy;\":\"\\u0448\",\"ShortDownArrow;\":\"\\u2193\",\"ShortLeftArrow;\":\"\\u2190\",\"shortmid;\":\"\\u2223\",\"shortparallel;\":\"\\u2225\",\"ShortRightArrow;\":\"\\u2192\",\"ShortUpArrow;\":\"\\u2191\",\"shy;\":\"\\xAD\",shy:\"\\xAD\",\"Sigma;\":\"\\u03A3\",\"sigma;\":\"\\u03C3\",\"sigmaf;\":\"\\u03C2\",\"sigmav;\":\"\\u03C2\",\"sim;\":\"\\u223C\",\"simdot;\":\"\\u2A6A\",\"sime;\":\"\\u2243\",\"simeq;\":\"\\u2243\",\"simg;\":\"\\u2A9E\",\"simgE;\":\"\\u2AA0\",\"siml;\":\"\\u2A9D\",\"simlE;\":\"\\u2A9F\",\"simne;\":\"\\u2246\",\"simplus;\":\"\\u2A24\",\"simrarr;\":\"\\u2972\",\"slarr;\":\"\\u2190\",\"SmallCircle;\":\"\\u2218\",\"smallsetminus;\":\"\\u2216\",\"smashp;\":\"\\u2A33\",\"smeparsl;\":\"\\u29E4\",\"smid;\":\"\\u2223\",\"smile;\":\"\\u2323\",\"smt;\":\"\\u2AAA\",\"smte;\":\"\\u2AAC\",\"smtes;\":\"\\u2AAC\\uFE00\",\"SOFTcy;\":\"\\u042C\",\"softcy;\":\"\\u044C\",\"sol;\":\"/\",\"solb;\":\"\\u29C4\",\"solbar;\":\"\\u233F\",\"Sopf;\":\"\\u{1D54A}\",\"sopf;\":\"\\u{1D564}\",\"spades;\":\"\\u2660\",\"spadesuit;\":\"\\u2660\",\"spar;\":\"\\u2225\",\"sqcap;\":\"\\u2293\",\"sqcaps;\":\"\\u2293\\uFE00\",\"sqcup;\":\"\\u2294\",\"sqcups;\":\"\\u2294\\uFE00\",\"Sqrt;\":\"\\u221A\",\"sqsub;\":\"\\u228F\",\"sqsube;\":\"\\u2291\",\"sqsubset;\":\"\\u228F\",\"sqsubseteq;\":\"\\u2291\",\"sqsup;\":\"\\u2290\",\"sqsupe;\":\"\\u2292\",\"sqsupset;\":\"\\u2290\",\"sqsupseteq;\":\"\\u2292\",\"squ;\":\"\\u25A1\",\"Square;\":\"\\u25A1\",\"square;\":\"\\u25A1\",\"SquareIntersection;\":\"\\u2293\",\"SquareSubset;\":\"\\u228F\",\"SquareSubsetEqual;\":\"\\u2291\",\"SquareSuperset;\":\"\\u2290\",\"SquareSupersetEqual;\":\"\\u2292\",\"SquareUnion;\":\"\\u2294\",\"squarf;\":\"\\u25AA\",\"squf;\":\"\\u25AA\",\"srarr;\":\"\\u2192\",\"Sscr;\":\"\\u{1D4AE}\",\"sscr;\":\"\\u{1D4C8}\",\"ssetmn;\":\"\\u2216\",\"ssmile;\":\"\\u2323\",\"sstarf;\":\"\\u22C6\",\"Star;\":\"\\u22C6\",\"star;\":\"\\u2606\",\"starf;\":\"\\u2605\",\"straightepsilon;\":\"\\u03F5\",\"straightphi;\":\"\\u03D5\",\"strns;\":\"\\xAF\",\"Sub;\":\"\\u22D0\",\"sub;\":\"\\u2282\",\"subdot;\":\"\\u2ABD\",\"subE;\":\"\\u2AC5\",\"sube;\":\"\\u2286\",\"subedot;\":\"\\u2AC3\",\"submult;\":\"\\u2AC1\",\"subnE;\":\"\\u2ACB\",\"subne;\":\"\\u228A\",\"subplus;\":\"\\u2ABF\",\"subrarr;\":\"\\u2979\",\"Subset;\":\"\\u22D0\",\"subset;\":\"\\u2282\",\"subseteq;\":\"\\u2286\",\"subseteqq;\":\"\\u2AC5\",\"SubsetEqual;\":\"\\u2286\",\"subsetneq;\":\"\\u228A\",\"subsetneqq;\":\"\\u2ACB\",\"subsim;\":\"\\u2AC7\",\"subsub;\":\"\\u2AD5\",\"subsup;\":\"\\u2AD3\",\"succ;\":\"\\u227B\",\"succapprox;\":\"\\u2AB8\",\"succcurlyeq;\":\"\\u227D\",\"Succeeds;\":\"\\u227B\",\"SucceedsEqual;\":\"\\u2AB0\",\"SucceedsSlantEqual;\":\"\\u227D\",\"SucceedsTilde;\":\"\\u227F\",\"succeq;\":\"\\u2AB0\",\"succnapprox;\":\"\\u2ABA\",\"succneqq;\":\"\\u2AB6\",\"succnsim;\":\"\\u22E9\",\"succsim;\":\"\\u227F\",\"SuchThat;\":\"\\u220B\",\"Sum;\":\"\\u2211\",\"sum;\":\"\\u2211\",\"sung;\":\"\\u266A\",\"Sup;\":\"\\u22D1\",\"sup;\":\"\\u2283\",\"sup1;\":\"\\xB9\",sup1:\"\\xB9\",\"sup2;\":\"\\xB2\",sup2:\"\\xB2\",\"sup3;\":\"\\xB3\",sup3:\"\\xB3\",\"supdot;\":\"\\u2ABE\",\"supdsub;\":\"\\u2AD8\",\"supE;\":\"\\u2AC6\",\"supe;\":\"\\u2287\",\"supedot;\":\"\\u2AC4\",\"Superset;\":\"\\u2283\",\"SupersetEqual;\":\"\\u2287\",\"suphsol;\":\"\\u27C9\",\"suphsub;\":\"\\u2AD7\",\"suplarr;\":\"\\u297B\",\"supmult;\":\"\\u2AC2\",\"supnE;\":\"\\u2ACC\",\"supne;\":\"\\u228B\",\"supplus;\":\"\\u2AC0\",\"Supset;\":\"\\u22D1\",\"supset;\":\"\\u2283\",\"supseteq;\":\"\\u2287\",\"supseteqq;\":\"\\u2AC6\",\"supsetneq;\":\"\\u228B\",\"supsetneqq;\":\"\\u2ACC\",\"supsim;\":\"\\u2AC8\",\"supsub;\":\"\\u2AD4\",\"supsup;\":\"\\u2AD6\",\"swarhk;\":\"\\u2926\",\"swArr;\":\"\\u21D9\",\"swarr;\":\"\\u2199\",\"swarrow;\":\"\\u2199\",\"swnwar;\":\"\\u292A\",\"szlig;\":\"\\xDF\",szlig:\"\\xDF\",\"Tab;\":\"\t\",\"target;\":\"\\u2316\",\"Tau;\":\"\\u03A4\",\"tau;\":\"\\u03C4\",\"tbrk;\":\"\\u23B4\",\"Tcaron;\":\"\\u0164\",\"tcaron;\":\"\\u0165\",\"Tcedil;\":\"\\u0162\",\"tcedil;\":\"\\u0163\",\"Tcy;\":\"\\u0422\",\"tcy;\":\"\\u0442\",\"tdot;\":\"\\u20DB\",\"telrec;\":\"\\u2315\",\"Tfr;\":\"\\u{1D517}\",\"tfr;\":\"\\u{1D531}\",\"there4;\":\"\\u2234\",\"Therefore;\":\"\\u2234\",\"therefore;\":\"\\u2234\",\"Theta;\":\"\\u0398\",\"theta;\":\"\\u03B8\",\"thetasym;\":\"\\u03D1\",\"thetav;\":\"\\u03D1\",\"thickapprox;\":\"\\u2248\",\"thicksim;\":\"\\u223C\",\"ThickSpace;\":\"\\u205F\\u200A\",\"thinsp;\":\"\\u2009\",\"ThinSpace;\":\"\\u2009\",\"thkap;\":\"\\u2248\",\"thksim;\":\"\\u223C\",\"THORN;\":\"\\xDE\",THORN:\"\\xDE\",\"thorn;\":\"\\xFE\",thorn:\"\\xFE\",\"Tilde;\":\"\\u223C\",\"tilde;\":\"\\u02DC\",\"TildeEqual;\":\"\\u2243\",\"TildeFullEqual;\":\"\\u2245\",\"TildeTilde;\":\"\\u2248\",\"times;\":\"\\xD7\",times:\"\\xD7\",\"timesb;\":\"\\u22A0\",\"timesbar;\":\"\\u2A31\",\"timesd;\":\"\\u2A30\",\"tint;\":\"\\u222D\",\"toea;\":\"\\u2928\",\"top;\":\"\\u22A4\",\"topbot;\":\"\\u2336\",\"topcir;\":\"\\u2AF1\",\"Topf;\":\"\\u{1D54B}\",\"topf;\":\"\\u{1D565}\",\"topfork;\":\"\\u2ADA\",\"tosa;\":\"\\u2929\",\"tprime;\":\"\\u2034\",\"TRADE;\":\"\\u2122\",\"trade;\":\"\\u2122\",\"triangle;\":\"\\u25B5\",\"triangledown;\":\"\\u25BF\",\"triangleleft;\":\"\\u25C3\",\"trianglelefteq;\":\"\\u22B4\",\"triangleq;\":\"\\u225C\",\"triangleright;\":\"\\u25B9\",\"trianglerighteq;\":\"\\u22B5\",\"tridot;\":\"\\u25EC\",\"trie;\":\"\\u225C\",\"triminus;\":\"\\u2A3A\",\"TripleDot;\":\"\\u20DB\",\"triplus;\":\"\\u2A39\",\"trisb;\":\"\\u29CD\",\"tritime;\":\"\\u2A3B\",\"trpezium;\":\"\\u23E2\",\"Tscr;\":\"\\u{1D4AF}\",\"tscr;\":\"\\u{1D4C9}\",\"TScy;\":\"\\u0426\",\"tscy;\":\"\\u0446\",\"TSHcy;\":\"\\u040B\",\"tshcy;\":\"\\u045B\",\"Tstrok;\":\"\\u0166\",\"tstrok;\":\"\\u0167\",\"twixt;\":\"\\u226C\",\"twoheadleftarrow;\":\"\\u219E\",\"twoheadrightarrow;\":\"\\u21A0\",\"Uacute;\":\"\\xDA\",Uacute:\"\\xDA\",\"uacute;\":\"\\xFA\",uacute:\"\\xFA\",\"Uarr;\":\"\\u219F\",\"uArr;\":\"\\u21D1\",\"uarr;\":\"\\u2191\",\"Uarrocir;\":\"\\u2949\",\"Ubrcy;\":\"\\u040E\",\"ubrcy;\":\"\\u045E\",\"Ubreve;\":\"\\u016C\",\"ubreve;\":\"\\u016D\",\"Ucirc;\":\"\\xDB\",Ucirc:\"\\xDB\",\"ucirc;\":\"\\xFB\",ucirc:\"\\xFB\",\"Ucy;\":\"\\u0423\",\"ucy;\":\"\\u0443\",\"udarr;\":\"\\u21C5\",\"Udblac;\":\"\\u0170\",\"udblac;\":\"\\u0171\",\"udhar;\":\"\\u296E\",\"ufisht;\":\"\\u297E\",\"Ufr;\":\"\\u{1D518}\",\"ufr;\":\"\\u{1D532}\",\"Ugrave;\":\"\\xD9\",Ugrave:\"\\xD9\",\"ugrave;\":\"\\xF9\",ugrave:\"\\xF9\",\"uHar;\":\"\\u2963\",\"uharl;\":\"\\u21BF\",\"uharr;\":\"\\u21BE\",\"uhblk;\":\"\\u2580\",\"ulcorn;\":\"\\u231C\",\"ulcorner;\":\"\\u231C\",\"ulcrop;\":\"\\u230F\",\"ultri;\":\"\\u25F8\",\"Umacr;\":\"\\u016A\",\"umacr;\":\"\\u016B\",\"uml;\":\"\\xA8\",uml:\"\\xA8\",\"UnderBar;\":\"_\",\"UnderBrace;\":\"\\u23DF\",\"UnderBracket;\":\"\\u23B5\",\"UnderParenthesis;\":\"\\u23DD\",\"Union;\":\"\\u22C3\",\"UnionPlus;\":\"\\u228E\",\"Uogon;\":\"\\u0172\",\"uogon;\":\"\\u0173\",\"Uopf;\":\"\\u{1D54C}\",\"uopf;\":\"\\u{1D566}\",\"UpArrow;\":\"\\u2191\",\"Uparrow;\":\"\\u21D1\",\"uparrow;\":\"\\u2191\",\"UpArrowBar;\":\"\\u2912\",\"UpArrowDownArrow;\":\"\\u21C5\",\"UpDownArrow;\":\"\\u2195\",\"Updownarrow;\":\"\\u21D5\",\"updownarrow;\":\"\\u2195\",\"UpEquilibrium;\":\"\\u296E\",\"upharpoonleft;\":\"\\u21BF\",\"upharpoonright;\":\"\\u21BE\",\"uplus;\":\"\\u228E\",\"UpperLeftArrow;\":\"\\u2196\",\"UpperRightArrow;\":\"\\u2197\",\"Upsi;\":\"\\u03D2\",\"upsi;\":\"\\u03C5\",\"upsih;\":\"\\u03D2\",\"Upsilon;\":\"\\u03A5\",\"upsilon;\":\"\\u03C5\",\"UpTee;\":\"\\u22A5\",\"UpTeeArrow;\":\"\\u21A5\",\"upuparrows;\":\"\\u21C8\",\"urcorn;\":\"\\u231D\",\"urcorner;\":\"\\u231D\",\"urcrop;\":\"\\u230E\",\"Uring;\":\"\\u016E\",\"uring;\":\"\\u016F\",\"urtri;\":\"\\u25F9\",\"Uscr;\":\"\\u{1D4B0}\",\"uscr;\":\"\\u{1D4CA}\",\"utdot;\":\"\\u22F0\",\"Utilde;\":\"\\u0168\",\"utilde;\":\"\\u0169\",\"utri;\":\"\\u25B5\",\"utrif;\":\"\\u25B4\",\"uuarr;\":\"\\u21C8\",\"Uuml;\":\"\\xDC\",Uuml:\"\\xDC\",\"uuml;\":\"\\xFC\",uuml:\"\\xFC\",\"uwangle;\":\"\\u29A7\",\"vangrt;\":\"\\u299C\",\"varepsilon;\":\"\\u03F5\",\"varkappa;\":\"\\u03F0\",\"varnothing;\":\"\\u2205\",\"varphi;\":\"\\u03D5\",\"varpi;\":\"\\u03D6\",\"varpropto;\":\"\\u221D\",\"vArr;\":\"\\u21D5\",\"varr;\":\"\\u2195\",\"varrho;\":\"\\u03F1\",\"varsigma;\":\"\\u03C2\",\"varsubsetneq;\":\"\\u228A\\uFE00\",\"varsubsetneqq;\":\"\\u2ACB\\uFE00\",\"varsupsetneq;\":\"\\u228B\\uFE00\",\"varsupsetneqq;\":\"\\u2ACC\\uFE00\",\"vartheta;\":\"\\u03D1\",\"vartriangleleft;\":\"\\u22B2\",\"vartriangleright;\":\"\\u22B3\",\"Vbar;\":\"\\u2AEB\",\"vBar;\":\"\\u2AE8\",\"vBarv;\":\"\\u2AE9\",\"Vcy;\":\"\\u0412\",\"vcy;\":\"\\u0432\",\"VDash;\":\"\\u22AB\",\"Vdash;\":\"\\u22A9\",\"vDash;\":\"\\u22A8\",\"vdash;\":\"\\u22A2\",\"Vdashl;\":\"\\u2AE6\",\"Vee;\":\"\\u22C1\",\"vee;\":\"\\u2228\",\"veebar;\":\"\\u22BB\",\"veeeq;\":\"\\u225A\",\"vellip;\":\"\\u22EE\",\"Verbar;\":\"\\u2016\",\"verbar;\":\"|\",\"Vert;\":\"\\u2016\",\"vert;\":\"|\",\"VerticalBar;\":\"\\u2223\",\"VerticalLine;\":\"|\",\"VerticalSeparator;\":\"\\u2758\",\"VerticalTilde;\":\"\\u2240\",\"VeryThinSpace;\":\"\\u200A\",\"Vfr;\":\"\\u{1D519}\",\"vfr;\":\"\\u{1D533}\",\"vltri;\":\"\\u22B2\",\"vnsub;\":\"\\u2282\\u20D2\",\"vnsup;\":\"\\u2283\\u20D2\",\"Vopf;\":\"\\u{1D54D}\",\"vopf;\":\"\\u{1D567}\",\"vprop;\":\"\\u221D\",\"vrtri;\":\"\\u22B3\",\"Vscr;\":\"\\u{1D4B1}\",\"vscr;\":\"\\u{1D4CB}\",\"vsubnE;\":\"\\u2ACB\\uFE00\",\"vsubne;\":\"\\u228A\\uFE00\",\"vsupnE;\":\"\\u2ACC\\uFE00\",\"vsupne;\":\"\\u228B\\uFE00\",\"Vvdash;\":\"\\u22AA\",\"vzigzag;\":\"\\u299A\",\"Wcirc;\":\"\\u0174\",\"wcirc;\":\"\\u0175\",\"wedbar;\":\"\\u2A5F\",\"Wedge;\":\"\\u22C0\",\"wedge;\":\"\\u2227\",\"wedgeq;\":\"\\u2259\",\"weierp;\":\"\\u2118\",\"Wfr;\":\"\\u{1D51A}\",\"wfr;\":\"\\u{1D534}\",\"Wopf;\":\"\\u{1D54E}\",\"wopf;\":\"\\u{1D568}\",\"wp;\":\"\\u2118\",\"wr;\":\"\\u2240\",\"wreath;\":\"\\u2240\",\"Wscr;\":\"\\u{1D4B2}\",\"wscr;\":\"\\u{1D4CC}\",\"xcap;\":\"\\u22C2\",\"xcirc;\":\"\\u25EF\",\"xcup;\":\"\\u22C3\",\"xdtri;\":\"\\u25BD\",\"Xfr;\":\"\\u{1D51B}\",\"xfr;\":\"\\u{1D535}\",\"xhArr;\":\"\\u27FA\",\"xharr;\":\"\\u27F7\",\"Xi;\":\"\\u039E\",\"xi;\":\"\\u03BE\",\"xlArr;\":\"\\u27F8\",\"xlarr;\":\"\\u27F5\",\"xmap;\":\"\\u27FC\",\"xnis;\":\"\\u22FB\",\"xodot;\":\"\\u2A00\",\"Xopf;\":\"\\u{1D54F}\",\"xopf;\":\"\\u{1D569}\",\"xoplus;\":\"\\u2A01\",\"xotime;\":\"\\u2A02\",\"xrArr;\":\"\\u27F9\",\"xrarr;\":\"\\u27F6\",\"Xscr;\":\"\\u{1D4B3}\",\"xscr;\":\"\\u{1D4CD}\",\"xsqcup;\":\"\\u2A06\",\"xuplus;\":\"\\u2A04\",\"xutri;\":\"\\u25B3\",\"xvee;\":\"\\u22C1\",\"xwedge;\":\"\\u22C0\",\"Yacute;\":\"\\xDD\",Yacute:\"\\xDD\",\"yacute;\":\"\\xFD\",yacute:\"\\xFD\",\"YAcy;\":\"\\u042F\",\"yacy;\":\"\\u044F\",\"Ycirc;\":\"\\u0176\",\"ycirc;\":\"\\u0177\",\"Ycy;\":\"\\u042B\",\"ycy;\":\"\\u044B\",\"yen;\":\"\\xA5\",yen:\"\\xA5\",\"Yfr;\":\"\\u{1D51C}\",\"yfr;\":\"\\u{1D536}\",\"YIcy;\":\"\\u0407\",\"yicy;\":\"\\u0457\",\"Yopf;\":\"\\u{1D550}\",\"yopf;\":\"\\u{1D56A}\",\"Yscr;\":\"\\u{1D4B4}\",\"yscr;\":\"\\u{1D4CE}\",\"YUcy;\":\"\\u042E\",\"yucy;\":\"\\u044E\",\"Yuml;\":\"\\u0178\",\"yuml;\":\"\\xFF\",yuml:\"\\xFF\",\"Zacute;\":\"\\u0179\",\"zacute;\":\"\\u017A\",\"Zcaron;\":\"\\u017D\",\"zcaron;\":\"\\u017E\",\"Zcy;\":\"\\u0417\",\"zcy;\":\"\\u0437\",\"Zdot;\":\"\\u017B\",\"zdot;\":\"\\u017C\",\"zeetrf;\":\"\\u2128\",\"ZeroWidthSpace;\":\"\\u200B\",\"Zeta;\":\"\\u0396\",\"zeta;\":\"\\u03B6\",\"Zfr;\":\"\\u2128\",\"zfr;\":\"\\u{1D537}\",\"ZHcy;\":\"\\u0416\",\"zhcy;\":\"\\u0436\",\"zigrarr;\":\"\\u21DD\",\"Zopf;\":\"\\u2124\",\"zopf;\":\"\\u{1D56B}\",\"Zscr;\":\"\\u{1D4B5}\",\"zscr;\":\"\\u{1D4CF}\",\"zwj;\":\"\\u200D\",\"zwnj;\":\"\\u200C\"};function ae(t,i){if(t.length<i.length)return!1;for(var o=0;o<i.length;o++)if(t[o]!==i[o])return!1;return!0}function Gt(t,i){var o=t.length-i.length;return o>0?t.lastIndexOf(i)===o:o===0?t===i:!1}function pt(t,i){for(var o=\"\";i>0;)(i&1)===1&&(o+=t),t+=t,i=i>>>1;return o}var Xn=97,Yn=122,$n=65,Qn=90,Zn=48,Kn=57;function fe(t,i){var o=t.charCodeAt(i);return Xn<=o&&o<=Yn||$n<=o&&o<=Qn||Zn<=o&&o<=Kn}function Se(t){return typeof t<\"u\"}function Vt(t){if(t)return typeof t==\"string\"?{kind:\"markdown\",value:t}:{kind:\"markdown\",value:t.value}}var Ge=function(){function t(i,o){var n=this;this.id=i,this._tags=[],this._tagMap={},this._valueSetMap={},this._tags=o.tags||[],this._globalAttributes=o.globalAttributes||[],this._tags.forEach(function(e){n._tagMap[e.name.toLowerCase()]=e}),o.valueSets&&o.valueSets.forEach(function(e){n._valueSetMap[e.name]=e.values})}return t.prototype.isApplicable=function(){return!0},t.prototype.getId=function(){return this.id},t.prototype.provideTags=function(){return this._tags},t.prototype.provideAttributes=function(i){var o=[],n=function(a){o.push(a)},e=this._tagMap[i.toLowerCase()];return e&&e.attributes.forEach(n),this._globalAttributes.forEach(n),o},t.prototype.provideValues=function(i,o){var n=this,e=[];o=o.toLowerCase();var a=function(l){l.forEach(function(r){r.name.toLowerCase()===o&&(r.values&&r.values.forEach(function(s){e.push(s)}),r.valueSet&&n._valueSetMap[r.valueSet]&&n._valueSetMap[r.valueSet].forEach(function(s){e.push(s)}))})},c=this._tagMap[i.toLowerCase()];return c&&a(c.attributes),a(this._globalAttributes),e},t}();function le(t,i,o){i===void 0&&(i={});var n={kind:o?\"markdown\":\"plaintext\",value:\"\"};if(t.description&&i.documentation!==!1){var e=Vt(t.description);e&&(n.value+=e.value)}if(t.references&&t.references.length>0&&i.references!==!1&&(n.value.length&&(n.value+=`\n\n`),o?n.value+=t.references.map(function(a){return\"[\".concat(a.name,\"](\").concat(a.url,\")\")}).join(\" | \"):n.value+=t.references.map(function(a){return\"\".concat(a.name,\": \").concat(a.url)}).join(`\n`)),n.value!==\"\")return n}var Jt=function(t,i,o,n){function e(a){return a instanceof o?a:new o(function(c){c(a)})}return new(o||(o=Promise))(function(a,c){function l(u){try{s(n.next(u))}catch(h){c(h)}}function r(u){try{s(n.throw(u))}catch(h){c(h)}}function s(u){u.done?a(u.value):e(u.value).then(l,r)}s((n=n.apply(t,i||[])).next())})},Xt=function(t,i){var o={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},n,e,a,c;return c={next:l(0),throw:l(1),return:l(2)},typeof Symbol==\"function\"&&(c[Symbol.iterator]=function(){return this}),c;function l(s){return function(u){return r([s,u])}}function r(s){if(n)throw new TypeError(\"Generator is already executing.\");for(;o;)try{if(n=1,e&&(a=s[0]&2?e.return:s[0]?e.throw||((a=e.return)&&a.call(e),0):e.next)&&!(a=a.call(e,s[1])).done)return a;switch(e=0,a&&(s=[s[0]&2,a.value]),s[0]){case 0:case 1:a=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,e=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(a=o.trys,!(a=a.length>0&&a[a.length-1])&&(s[0]===6||s[0]===2)){o=0;continue}if(s[0]===3&&(!a||s[1]>a[0]&&s[1]<a[3])){o.label=s[1];break}if(s[0]===6&&o.label<a[1]){o.label=a[1],a=s;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(s);break}a[2]&&o.ops.pop(),o.trys.pop();continue}s=i.call(t,o)}catch(u){s=[6,u],e=0}finally{n=a=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}},Yt=function(){function t(i){this.readDirectory=i,this.atributeCompletions=[]}return t.prototype.onHtmlAttributeValue=function(i){ri(i.tag,i.attribute)&&this.atributeCompletions.push(i)},t.prototype.computeCompletions=function(i,o){return Jt(this,void 0,void 0,function(){var n,e,a,c,l,r,s,u,h,d;return Xt(this,function(g){switch(g.label){case 0:n={items:[],isIncomplete:!1},e=0,a=this.atributeCompletions,g.label=1;case 1:return e<a.length?(c=a[e],l=ni(i.getText(c.range)),ii(l)?l===\".\"||l===\"..\"?(n.isIncomplete=!0,[3,4]):[3,2]:[3,4]):[3,5];case 2:return r=ai(c.value,l,c.range),[4,this.providePathSuggestions(c.value,r,i,o)];case 3:for(s=g.sent(),u=0,h=s;u<h.length;u++)d=h[u],n.items.push(d);g.label=4;case 4:return e++,[3,1];case 5:return[2,n]}})})},t.prototype.providePathSuggestions=function(i,o,n,e){return Jt(this,void 0,void 0,function(){var a,c,l,r,s,u,h,d,g,y;return Xt(this,function(m){switch(m.label){case 0:if(a=i.substring(0,i.lastIndexOf(\"/\")+1),c=e.resolveReference(a||\".\",n.uri),!c)return[3,4];m.label=1;case 1:return m.trys.push([1,3,,4]),l=[],[4,this.readDirectory(c)];case 2:for(r=m.sent(),s=0,u=r;s<u.length;s++)h=u[s],d=h[0],g=h[1],d.charCodeAt(0)!==ti&&l.push(oi(d,g===Oe.Directory,o));return[2,l];case 3:return y=m.sent(),[3,4];case 4:return[2,[]]}})})},t}();var ti=46;function ni(t){return ae(t,\"'\")||ae(t,'\"')?t.slice(1,-1):t}function ii(t){return!(ae(t,\"http\")||ae(t,\"https\")||ae(t,\"//\"))}function ri(t,i){if(i===\"src\"||i===\"href\")return!0;var o=li[t];return o?typeof o==\"string\"?o===i:o.indexOf(i)!==-1:!1}function ai(t,i,o){var n,e=t.lastIndexOf(\"/\");if(e===-1)n=si(o,1,-1);else{var a=i.slice(e+1),c=Re(o.end,-1-a.length),l=a.indexOf(\" \"),r=void 0;l!==-1?r=Re(c,l):r=Re(o.end,-1),n=P.create(c,r)}return n}function oi(t,i,o){return i?(t=t+\"/\",{label:t,kind:Q.Folder,textEdit:Y.replace(o,t),command:{title:\"Suggest\",command:\"editor.action.triggerSuggest\"}}):{label:t,kind:Q.File,textEdit:Y.replace(o,t)}}function Re(t,i){return X.create(t.line,t.character+i)}function si(t,i,o){var n=Re(t.start,i),e=Re(t.end,o);return P.create(n,e)}var li={a:\"href\",area:\"href\",body:\"background\",del:\"cite\",form:\"action\",frame:[\"src\",\"longdesc\"],img:[\"src\",\"longdesc\"],ins:\"cite\",link:\"href\",object:\"data\",q:\"cite\",script:\"src\",audio:\"src\",button:\"formaction\",command:\"icon\",embed:\"src\",html:\"manifest\",input:[\"src\",\"formaction\"],source:\"src\",track:\"src\",video:[\"src\",\"poster\"]};var ui=function(t,i,o,n){function e(a){return a instanceof o?a:new o(function(c){c(a)})}return new(o||(o=Promise))(function(a,c){function l(u){try{s(n.next(u))}catch(h){c(h)}}function r(u){try{s(n.throw(u))}catch(h){c(h)}}function s(u){u.done?a(u.value):e(u.value).then(l,r)}s((n=n.apply(t,i||[])).next())})},ci=function(t,i){var o={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},n,e,a,c;return c={next:l(0),throw:l(1),return:l(2)},typeof Symbol==\"function\"&&(c[Symbol.iterator]=function(){return this}),c;function l(s){return function(u){return r([s,u])}}function r(s){if(n)throw new TypeError(\"Generator is already executing.\");for(;o;)try{if(n=1,e&&(a=s[0]&2?e.return:s[0]?e.throw||((a=e.return)&&a.call(e),0):e.next)&&!(a=a.call(e,s[1])).done)return a;switch(e=0,a&&(s=[s[0]&2,a.value]),s[0]){case 0:case 1:a=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,e=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(a=o.trys,!(a=a.length>0&&a[a.length-1])&&(s[0]===6||s[0]===2)){o=0;continue}if(s[0]===3&&(!a||s[1]>a[0]&&s[1]<a[3])){o.label=s[1];break}if(s[0]===6&&o.label<a[1]){o.label=a[1],a=s;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(s);break}a[2]&&o.ops.pop(),o.trys.pop();continue}s=i.call(t,o)}catch(u){s=[6,u],e=0}finally{n=a=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}},hi=ge(),Qt=function(){function t(i,o){this.lsOptions=i,this.dataManager=o,this.completionParticipants=[]}return t.prototype.setCompletionParticipants=function(i){this.completionParticipants=i||[]},t.prototype.doComplete2=function(i,o,n,e,a){return ui(this,void 0,void 0,function(){var c,l,r,s;return ci(this,function(u){switch(u.label){case 0:if(!this.lsOptions.fileSystemProvider||!this.lsOptions.fileSystemProvider.readDirectory)return[2,this.doComplete(i,o,n,a)];c=new Yt(this.lsOptions.fileSystemProvider.readDirectory),l=this.completionParticipants,this.completionParticipants=[c].concat(l),r=this.doComplete(i,o,n,a),u.label=1;case 1:return u.trys.push([1,,3,4]),[4,c.computeCompletions(i,e)];case 2:return s=u.sent(),[2,{isIncomplete:r.isIncomplete||s.isIncomplete,items:s.items.concat(r.items)}];case 3:return this.completionParticipants=l,[7];case 4:return[2]}})})},t.prototype.doComplete=function(i,o,n,e){var a=this._doComplete(i,o,n,e);return this.convertCompletionList(a)},t.prototype._doComplete=function(i,o,n,e){var a={isIncomplete:!1,items:[]},c=this.completionParticipants,l=this.dataManager.getDataProviders().filter(function(x){return x.isApplicable(i.languageId)&&(!e||e[x.getId()]!==!1)}),r=this.doesSupportMarkdown(),s=i.getText(),u=i.offsetAt(o),h=n.findNodeBefore(u);if(!h)return a;var d=$(s,h.start),g=\"\",y;function m(x,D){return D===void 0&&(D=u),x>u&&(x=u),{start:i.positionAt(x),end:i.positionAt(D)}}function A(x,D){var L=m(x,D);return l.forEach(function(q){q.provideTags().forEach(function(j){a.items.push({label:j.name,kind:Q.Property,documentation:le(j,void 0,r),textEdit:Y.replace(L,j.name),insertTextFormat:ne.PlainText})})}),a}function E(x){for(var D=x;D>0;){var L=s.charAt(D-1);if(`\n\\r`.indexOf(L)>=0)return s.substring(D,x);if(!Ve(L))return null;D--}return s.substring(0,x)}function w(x,D,L){L===void 0&&(L=u);var q=m(x,L),j=$t(s,L,W.WithinEndTag,S.EndTagClose)?\"\":\">\",O=h;for(D&&(O=O.parent);O;){var V=O.tag;if(V&&(!O.closed||O.endTagStart&&O.endTagStart>u)){var K={label:\"/\"+V,kind:Q.Property,filterText:\"/\"+V,textEdit:Y.replace(q,\"/\"+V+j),insertTextFormat:ne.PlainText},oe=E(O.start),ue=E(x-1);if(oe!==null&&ue!==null&&oe!==ue){var te=oe+\"</\"+V+j;K.textEdit=Y.replace(m(x-1-ue.length),te),K.filterText=ue+\"</\"+V}return a.items.push(K),a}O=O.parent}return D||l.forEach(function(de){de.provideTags().forEach(function(re){a.items.push({label:\"/\"+re.name,kind:Q.Property,documentation:le(re,void 0,r),filterText:\"/\"+re.name+j,textEdit:Y.replace(q,\"/\"+re.name+j),insertTextFormat:ne.PlainText})})}),a}function M(x,D){if(e&&e.hideAutoCompleteProposals)return a;if(!pe(D)){var L=i.positionAt(x);a.items.push({label:\"</\"+D+\">\",kind:Q.Property,filterText:\"</\"+D+\">\",textEdit:Y.insert(L,\"$0</\"+D+\">\"),insertTextFormat:ne.Snippet})}return a}function B(x,D){return A(x,D),w(x,!0,D),a}function G(){var x=Object.create(null);return h.attributeNames.forEach(function(D){x[D]=!0}),x}function J(x,D){var L;D===void 0&&(D=u);for(var q=u;q<D&&s[q]!==\"<\";)q++;var j=s.substring(x,D),O=m(x,q),V=\"\";if(!$t(s,D,W.AfterAttributeName,S.DelimiterAssign)){var K=(L=e?.attributeDefaultValue)!==null&&L!==void 0?L:\"doublequotes\";K===\"empty\"?V=\"=$1\":K===\"singlequotes\"?V=\"='$1'\":V='=\"$1\"'}var oe=G();return oe[j]=!1,l.forEach(function(ue){ue.provideAttributes(g).forEach(function(te){if(!oe[te.name]){oe[te.name]=!0;var de=te.name,re;te.valueSet!==\"v\"&&V.length&&(de=de+V,(te.valueSet||te.name===\"style\")&&(re={title:\"Suggest\",command:\"editor.action.triggerSuggest\"})),a.items.push({label:te.name,kind:te.valueSet===\"handler\"?Q.Function:Q.Value,documentation:le(te,void 0,r),textEdit:Y.replace(O,de),insertTextFormat:ne.Snippet,command:re})}})}),f(O,oe),a}function f(x,D){var L=\"data-\",q={};q[L]=\"\".concat(L,'$1=\"$2\"');function j(O){O.attributeNames.forEach(function(V){ae(V,L)&&!q[V]&&!D[V]&&(q[V]=V+'=\"$1\"')}),O.children.forEach(function(V){return j(V)})}n&&n.roots.forEach(function(O){return j(O)}),Object.keys(q).forEach(function(O){return a.items.push({label:O,kind:Q.Value,textEdit:Y.replace(x,q[O]),insertTextFormat:ne.Snippet})})}function p(x,D){D===void 0&&(D=u);var L,q,j;if(u>x&&u<=D&&di(s[x])){var O=x+1,V=D;D>x&&s[D-1]===s[x]&&V--;var K=pi(s,u,O),oe=mi(s,u,V);L=m(K,oe),j=u>=O&&u<=V?s.substring(O,u):\"\",q=!1}else L=m(x,D),j=s.substring(x,u),q=!0;if(c.length>0)for(var ue=g.toLowerCase(),te=y.toLowerCase(),de=m(x,D),re=0,vt=c;re<vt.length;re++){var wt=vt[re];wt.onHtmlAttributeValue&&wt.onHtmlAttributeValue({document:i,position:o,tag:ue,attribute:te,value:j,range:de})}return l.forEach(function(An){An.provideValues(g,y).forEach(function(ze){var _t=q?'\"'+ze.name+'\"':ze.name;a.items.push({label:ze.name,filterText:_t,kind:Q.Unit,documentation:le(ze,void 0,r),textEdit:Y.replace(L,_t),insertTextFormat:ne.PlainText})})}),R(),a}function b(x){return u===d.getTokenEnd()&&(H=d.scan(),H===x&&d.getTokenOffset()===u)?d.getTokenEnd():u}function N(){for(var x=0,D=c;x<D.length;x++){var L=D[x];L.onHtmlContent&&L.onHtmlContent({document:i,position:o})}return R()}function R(){for(var x=u-1,D=o.character;x>=0&&fe(s,x);)x--,D--;if(x>=0&&s[x]===\"&\"){var L=P.create(X.create(o.line,D-1),o);for(var q in me)if(Gt(q,\";\")){var j=\"&\"+q;a.items.push({label:j,kind:Q.Keyword,documentation:hi(\"entity.propose\",\"Character entity representing '\".concat(me[q],\"'\")),textEdit:Y.replace(L,j),insertTextFormat:ne.PlainText})}}return a}function U(x,D){var L=m(x,D);a.items.push({label:\"!DOCTYPE\",kind:Q.Property,documentation:\"A preamble for an HTML document.\",textEdit:Y.replace(L,\"!DOCTYPE html>\"),insertTextFormat:ne.PlainText})}for(var H=d.scan();H!==S.EOS&&d.getTokenOffset()<=u;){switch(H){case S.StartTagOpen:if(d.getTokenEnd()===u){var z=b(S.StartTag);return o.line===0&&U(u,z),B(u,z)}break;case S.StartTag:if(d.getTokenOffset()<=u&&u<=d.getTokenEnd())return A(d.getTokenOffset(),d.getTokenEnd());g=d.getTokenText();break;case S.AttributeName:if(d.getTokenOffset()<=u&&u<=d.getTokenEnd())return J(d.getTokenOffset(),d.getTokenEnd());y=d.getTokenText();break;case S.DelimiterAssign:if(d.getTokenEnd()===u){var z=b(S.AttributeValue);return p(u,z)}break;case S.AttributeValue:if(d.getTokenOffset()<=u&&u<=d.getTokenEnd())return p(d.getTokenOffset(),d.getTokenEnd());break;case S.Whitespace:if(u<=d.getTokenEnd())switch(d.getScannerState()){case W.AfterOpeningStartTag:var I=d.getTokenOffset(),F=b(S.StartTag);return B(I,F);case W.WithinTag:case W.AfterAttributeName:return J(d.getTokenEnd());case W.BeforeAttributeValue:return p(d.getTokenEnd());case W.AfterOpeningEndTag:return w(d.getTokenOffset()-1,!1);case W.WithinContent:return N()}break;case S.EndTagOpen:if(u<=d.getTokenEnd()){var T=d.getTokenOffset()+1,v=b(S.EndTag);return w(T,!1,v)}break;case S.EndTag:if(u<=d.getTokenEnd())for(var k=d.getTokenOffset()-1;k>=0;){var C=s.charAt(k);if(C===\"/\")return w(k,!1,d.getTokenEnd());if(!Ve(C))break;k--}break;case S.StartTagClose:if(u<=d.getTokenEnd()&&g)return M(d.getTokenEnd(),g);break;case S.Content:if(u<=d.getTokenEnd())return N();break;default:if(u<=d.getTokenEnd())return a;break}H=d.scan()}return a},t.prototype.doQuoteComplete=function(i,o,n,e){var a,c=i.offsetAt(o);if(c<=0)return null;var l=(a=e?.attributeDefaultValue)!==null&&a!==void 0?a:\"doublequotes\";if(l===\"empty\")return null;var r=i.getText().charAt(c-1);if(r!==\"=\")return null;var s=l===\"doublequotes\"?'\"$1\"':\"'$1'\",u=n.findNodeBefore(c);if(u&&u.attributes&&u.start<c&&(!u.endTagStart||u.endTagStart>c))for(var h=$(i.getText(),u.start),d=h.scan();d!==S.EOS&&h.getTokenEnd()<=c;){if(d===S.AttributeName&&h.getTokenEnd()===c-1)return d=h.scan(),d!==S.DelimiterAssign||(d=h.scan(),d===S.Unknown||d===S.AttributeValue)?null:s;d=h.scan()}return null},t.prototype.doTagComplete=function(i,o,n){var e=i.offsetAt(o);if(e<=0)return null;var a=i.getText().charAt(e-1);if(a===\">\"){var c=n.findNodeBefore(e);if(c&&c.tag&&!pe(c.tag)&&c.start<e&&(!c.endTagStart||c.endTagStart>e))for(var l=$(i.getText(),c.start),r=l.scan();r!==S.EOS&&l.getTokenEnd()<=e;){if(r===S.StartTagClose&&l.getTokenEnd()===e)return\"$0</\".concat(c.tag,\">\");r=l.scan()}}else if(a===\"/\"){for(var c=n.findNodeBefore(e);c&&c.closed&&!(c.endTagStart&&c.endTagStart>e);)c=c.parent;if(c&&c.tag)for(var l=$(i.getText(),c.start),r=l.scan();r!==S.EOS&&l.getTokenEnd()<=e;){if(r===S.EndTagOpen&&l.getTokenEnd()===e)return\"\".concat(c.tag,\">\");r=l.scan()}}return null},t.prototype.convertCompletionList=function(i){return this.doesSupportMarkdown()||i.items.forEach(function(o){o.documentation&&typeof o.documentation!=\"string\"&&(o.documentation={kind:\"plaintext\",value:o.documentation.value})}),i},t.prototype.doesSupportMarkdown=function(){var i,o,n;if(!Se(this.supportsMarkdown)){if(!Se(this.lsOptions.clientCapabilities))return this.supportsMarkdown=!0,this.supportsMarkdown;var e=(n=(o=(i=this.lsOptions.clientCapabilities.textDocument)===null||i===void 0?void 0:i.completion)===null||o===void 0?void 0:o.completionItem)===null||n===void 0?void 0:n.documentationFormat;this.supportsMarkdown=Array.isArray(e)&&e.indexOf(ee.Markdown)!==-1}return this.supportsMarkdown},t}();function di(t){return/^[\"']*$/.test(t)}function Ve(t){return/^\\s*$/.test(t)}function $t(t,i,o,n){for(var e=$(t,i,o),a=e.scan();a===S.Whitespace;)a=e.scan();return a===n}function pi(t,i,o){for(;i>o&&!Ve(t[i-1]);)i--;return i}function mi(t,i,o){for(;i<o&&!Ve(t[i]);)i++;return i}var fi=ge(),Zt=function(){function t(i,o){this.lsOptions=i,this.dataManager=o}return t.prototype.doHover=function(i,o,n,e){var a=this.convertContents.bind(this),c=this.doesSupportMarkdown(),l=i.offsetAt(o),r=n.findNodeAt(l),s=i.getText();if(!r||!r.tag)return null;var u=this.dataManager.getDataProviders().filter(function(U){return U.isApplicable(i.languageId)});function h(U,H,z){for(var I=function(C){var x=null;if(C.provideTags().forEach(function(D){if(D.name.toLowerCase()===U.toLowerCase()){var L=le(D,e,c);L||(L={kind:c?\"markdown\":\"plaintext\",value:\"\"}),x={contents:L,range:H}}}),x)return x.contents=a(x.contents),{value:x}},F=0,T=u;F<T.length;F++){var v=T[F],k=I(v);if(typeof k==\"object\")return k.value}return null}function d(U,H,z){for(var I=function(C){var x=null;if(C.provideAttributes(U).forEach(function(D){if(H===D.name&&D.description){var L=le(D,e,c);L?x={contents:L,range:z}:x=null}}),x)return x.contents=a(x.contents),{value:x}},F=0,T=u;F<T.length;F++){var v=T[F],k=I(v);if(typeof k==\"object\")return k.value}return null}function g(U,H,z,I){for(var F=function(x){var D=null;if(x.provideValues(U,H).forEach(function(L){if(z===L.name&&L.description){var q=le(L,e,c);q?D={contents:q,range:I}:D=null}}),D)return D.contents=a(D.contents),{value:D}},T=0,v=u;T<v.length;T++){var k=v[T],C=F(k);if(typeof C==\"object\")return C.value}return null}function y(U,H){var z=E(U);for(var I in me){var F=null,T=\"&\"+I;if(z===T){var v=me[I].charCodeAt(0).toString(16).toUpperCase(),k=\"U+\";if(v.length<4)for(var C=4-v.length,x=0;x<C;)k+=\"0\",x+=1;k+=v;var D=fi(\"entity.propose\",\"Character entity representing '\".concat(me[I],\"', unicode equivalent '\").concat(k,\"'\"));D?F={contents:D,range:H}:F=null}if(F)return F.contents=a(F.contents),F}return null}function m(U,H){for(var z=$(i.getText(),H),I=z.scan();I!==S.EOS&&(z.getTokenEnd()<l||z.getTokenEnd()===l&&I!==U);)I=z.scan();return I===U&&l<=z.getTokenEnd()?{start:i.positionAt(z.getTokenOffset()),end:i.positionAt(z.getTokenEnd())}:null}function A(){for(var U=l-1,H=o.character;U>=0&&fe(s,U);)U--,H--;for(var z=U+1,I=H;fe(s,z);)z++,I++;if(U>=0&&s[U]===\"&\"){var F=null;return s[z]===\";\"?F=P.create(X.create(o.line,H),X.create(o.line,I+1)):F=P.create(X.create(o.line,H),X.create(o.line,I)),F}return null}function E(U){for(var H=l-1,z=\"&\";H>=0&&fe(U,H);)H--;for(H=H+1;fe(U,H);)z+=U[H],H+=1;return z+=\";\",z}if(r.endTagStart&&l>=r.endTagStart){var w=m(S.EndTag,r.endTagStart);return w?h(r.tag,w,!1):null}var M=m(S.StartTag,r.start);if(M)return h(r.tag,M,!0);var B=m(S.AttributeName,r.start);if(B){var G=r.tag,J=i.getText(B);return d(G,J,B)}var f=A();if(f)return y(s,f);function p(U,H){for(var z=$(i.getText(),U),I=z.scan(),F=void 0;I!==S.EOS&&z.getTokenEnd()<=H;)I=z.scan(),I===S.AttributeName&&(F=z.getTokenText());return F}var b=m(S.AttributeValue,r.start);if(b){var G=r.tag,N=gi(i.getText(b)),R=p(r.start,i.offsetAt(b.start));if(R)return g(G,R,N,b)}return null},t.prototype.convertContents=function(i){if(!this.doesSupportMarkdown()){if(typeof i==\"string\")return i;if(\"kind\"in i)return{kind:\"plaintext\",value:i.value};if(Array.isArray(i))i.map(function(o){return typeof o==\"string\"?o:o.value});else return i.value}return i},t.prototype.doesSupportMarkdown=function(){var i,o,n;if(!Se(this.supportsMarkdown)){if(!Se(this.lsOptions.clientCapabilities))return this.supportsMarkdown=!0,this.supportsMarkdown;var e=(n=(o=(i=this.lsOptions.clientCapabilities)===null||i===void 0?void 0:i.textDocument)===null||o===void 0?void 0:o.hover)===null||n===void 0?void 0:n.contentFormat;this.supportsMarkdown=Array.isArray(e)&&e.indexOf(ee.Markdown)!==-1}return this.supportsMarkdown},t}();function gi(t){return t.length<=1?t.replace(/['\"]/,\"\"):((t[0]===\"'\"||t[0]==='\"')&&(t=t.slice(1)),(t[t.length-1]===\"'\"||t[t.length-1]==='\"')&&(t=t.slice(0,-1)),t)}function Kt(t,i){return t}var en;(function(){\"use strict\";var t=[,,function(e){function a(r){this.__parent=r,this.__character_count=0,this.__indent_count=-1,this.__alignment_count=0,this.__wrap_point_index=0,this.__wrap_point_character_count=0,this.__wrap_point_indent_count=-1,this.__wrap_point_alignment_count=0,this.__items=[]}a.prototype.clone_empty=function(){var r=new a(this.__parent);return r.set_indent(this.__indent_count,this.__alignment_count),r},a.prototype.item=function(r){return r<0?this.__items[this.__items.length+r]:this.__items[r]},a.prototype.has_match=function(r){for(var s=this.__items.length-1;s>=0;s--)if(this.__items[s].match(r))return!0;return!1},a.prototype.set_indent=function(r,s){this.is_empty()&&(this.__indent_count=r||0,this.__alignment_count=s||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},a.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},a.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},a.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var r=this.__parent.current_line;return r.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),r.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),r.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count,r.__items[0]===\" \"&&(r.__items.splice(0,1),r.__character_count-=1),!0}return!1},a.prototype.is_empty=function(){return this.__items.length===0},a.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},a.prototype.push=function(r){this.__items.push(r);var s=r.lastIndexOf(`\n`);s!==-1?this.__character_count=r.length-s:this.__character_count+=r.length},a.prototype.pop=function(){var r=null;return this.is_empty()||(r=this.__items.pop(),this.__character_count-=r.length),r},a.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},a.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},a.prototype.trim=function(){for(;this.last()===\" \";)this.__items.pop(),this.__character_count-=1},a.prototype.toString=function(){var r=\"\";return this.is_empty()?this.__parent.indent_empty_lines&&(r=this.__parent.get_indent_string(this.__indent_count)):(r=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),r+=this.__items.join(\"\")),r};function c(r,s){this.__cache=[\"\"],this.__indent_size=r.indent_size,this.__indent_string=r.indent_char,r.indent_with_tabs||(this.__indent_string=new Array(r.indent_size+1).join(r.indent_char)),s=s||\"\",r.indent_level>0&&(s=new Array(r.indent_level+1).join(this.__indent_string)),this.__base_string=s,this.__base_string_length=s.length}c.prototype.get_indent_size=function(r,s){var u=this.__base_string_length;return s=s||0,r<0&&(u=0),u+=r*this.__indent_size,u+=s,u},c.prototype.get_indent_string=function(r,s){var u=this.__base_string;return s=s||0,r<0&&(r=0,u=\"\"),s+=r*this.__indent_size,this.__ensure_cache(s),u+=this.__cache[s],u},c.prototype.__ensure_cache=function(r){for(;r>=this.__cache.length;)this.__add_column()},c.prototype.__add_column=function(){var r=this.__cache.length,s=0,u=\"\";this.__indent_size&&r>=this.__indent_size&&(s=Math.floor(r/this.__indent_size),r-=s*this.__indent_size,u=new Array(s+1).join(this.__indent_string)),r&&(u+=new Array(r+1).join(\" \")),this.__cache.push(u)};function l(r,s){this.__indent_cache=new c(r,s),this.raw=!1,this._end_with_newline=r.end_with_newline,this.indent_size=r.indent_size,this.wrap_line_length=r.wrap_line_length,this.indent_empty_lines=r.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new a(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}l.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},l.prototype.get_line_number=function(){return this.__lines.length},l.prototype.get_indent_string=function(r,s){return this.__indent_cache.get_indent_string(r,s)},l.prototype.get_indent_size=function(r,s){return this.__indent_cache.get_indent_size(r,s)},l.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},l.prototype.add_new_line=function(r){return this.is_empty()||!r&&this.just_added_newline()?!1:(this.raw||this.__add_outputline(),!0)},l.prototype.get_code=function(r){this.trim(!0);var s=this.current_line.pop();s&&(s[s.length-1]===`\n`&&(s=s.replace(/\\n+$/g,\"\")),this.current_line.push(s)),this._end_with_newline&&this.__add_outputline();var u=this.__lines.join(`\n`);return r!==`\n`&&(u=u.replace(/[\\n]/g,r)),u},l.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},l.prototype.set_indent=function(r,s){return r=r||0,s=s||0,this.next_line.set_indent(r,s),this.__lines.length>1?(this.current_line.set_indent(r,s),!0):(this.current_line.set_indent(),!1)},l.prototype.add_raw_token=function(r){for(var s=0;s<r.newlines;s++)this.__add_outputline();this.current_line.set_indent(-1),this.current_line.push(r.whitespace_before),this.current_line.push(r.text),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1},l.prototype.add_token=function(r){this.__add_space_before_token(),this.current_line.push(r),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=this.current_line._allow_wrap()},l.prototype.__add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&(this.non_breaking_space||this.set_wrap_point(),this.current_line.push(\" \"))},l.prototype.remove_indent=function(r){for(var s=this.__lines.length;r<s;)this.__lines[r]._remove_indent(),r++;this.current_line._remove_wrap_indent()},l.prototype.trim=function(r){for(r=r===void 0?!1:r,this.current_line.trim();r&&this.__lines.length>1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},l.prototype.just_added_newline=function(){return this.current_line.is_empty()},l.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},l.prototype.ensure_empty_line_above=function(r,s){for(var u=this.__lines.length-2;u>=0;){var h=this.__lines[u];if(h.is_empty())break;if(h.item(0).indexOf(r)!==0&&h.item(-1)!==s){this.__lines.splice(u+1,0,new a(this)),this.previous_line=this.__lines[this.__lines.length-2];break}u--}},e.exports.Output=l},,,,function(e){function a(r,s){this.raw_options=c(r,s),this.disabled=this._get_boolean(\"disabled\"),this.eol=this._get_characters(\"eol\",\"auto\"),this.end_with_newline=this._get_boolean(\"end_with_newline\"),this.indent_size=this._get_number(\"indent_size\",4),this.indent_char=this._get_characters(\"indent_char\",\" \"),this.indent_level=this._get_number(\"indent_level\"),this.preserve_newlines=this._get_boolean(\"preserve_newlines\",!0),this.max_preserve_newlines=this._get_number(\"max_preserve_newlines\",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean(\"indent_with_tabs\",this.indent_char===\"\t\"),this.indent_with_tabs&&(this.indent_char=\"\t\",this.indent_size===1&&(this.indent_size=4)),this.wrap_line_length=this._get_number(\"wrap_line_length\",this._get_number(\"max_char\")),this.indent_empty_lines=this._get_boolean(\"indent_empty_lines\"),this.templating=this._get_selection_list(\"templating\",[\"auto\",\"none\",\"django\",\"erb\",\"handlebars\",\"php\",\"smarty\"],[\"auto\"])}a.prototype._get_array=function(r,s){var u=this.raw_options[r],h=s||[];return typeof u==\"object\"?u!==null&&typeof u.concat==\"function\"&&(h=u.concat()):typeof u==\"string\"&&(h=u.split(/[^a-zA-Z0-9_\\/\\-]+/)),h},a.prototype._get_boolean=function(r,s){var u=this.raw_options[r],h=u===void 0?!!s:!!u;return h},a.prototype._get_characters=function(r,s){var u=this.raw_options[r],h=s||\"\";return typeof u==\"string\"&&(h=u.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,`\n`).replace(/\\\\t/,\"\t\")),h},a.prototype._get_number=function(r,s){var u=this.raw_options[r];s=parseInt(s,10),isNaN(s)&&(s=0);var h=parseInt(u,10);return isNaN(h)&&(h=s),h},a.prototype._get_selection=function(r,s,u){var h=this._get_selection_list(r,s,u);if(h.length!==1)throw new Error(\"Invalid Option Value: The option '\"+r+`' can only be one of the following values:\n`+s+`\nYou passed in: '`+this.raw_options[r]+\"'\");return h[0]},a.prototype._get_selection_list=function(r,s,u){if(!s||s.length===0)throw new Error(\"Selection list cannot be empty.\");if(u=u||[s[0]],!this._is_valid_selection(u,s))throw new Error(\"Invalid Default Value!\");var h=this._get_array(r,u);if(!this._is_valid_selection(h,s))throw new Error(\"Invalid Option Value: The option '\"+r+`' can contain only the following values:\n`+s+`\nYou passed in: '`+this.raw_options[r]+\"'\");return h},a.prototype._is_valid_selection=function(r,s){return r.length&&s.length&&!r.some(function(u){return s.indexOf(u)===-1})};function c(r,s){var u={};r=l(r);var h;for(h in r)h!==s&&(u[h]=r[h]);if(s&&r[s])for(h in r[s])u[h]=r[s][h];return u}function l(r){var s={},u;for(u in r){var h=u.replace(/-/g,\"_\");s[h]=r[u]}return s}e.exports.Options=a,e.exports.normalizeOpts=l,e.exports.mergeOpts=c},,function(e){var a=RegExp.prototype.hasOwnProperty(\"sticky\");function c(l){this.__input=l||\"\",this.__input_length=this.__input.length,this.__position=0}c.prototype.restart=function(){this.__position=0},c.prototype.back=function(){this.__position>0&&(this.__position-=1)},c.prototype.hasNext=function(){return this.__position<this.__input_length},c.prototype.next=function(){var l=null;return this.hasNext()&&(l=this.__input.charAt(this.__position),this.__position+=1),l},c.prototype.peek=function(l){var r=null;return l=l||0,l+=this.__position,l>=0&&l<this.__input_length&&(r=this.__input.charAt(l)),r},c.prototype.__match=function(l,r){l.lastIndex=r;var s=l.exec(this.__input);return s&&!(a&&l.sticky)&&s.index!==r&&(s=null),s},c.prototype.test=function(l,r){return r=r||0,r+=this.__position,r>=0&&r<this.__input_length?!!this.__match(l,r):!1},c.prototype.testChar=function(l,r){var s=this.peek(r);return l.lastIndex=0,s!==null&&l.test(s)},c.prototype.match=function(l){var r=this.__match(l,this.__position);return r?this.__position+=r[0].length:r=null,r},c.prototype.read=function(l,r,s){var u=\"\",h;return l&&(h=this.match(l),h&&(u+=h[0])),r&&(h||!l)&&(u+=this.readUntil(r,s)),u},c.prototype.readUntil=function(l,r){var s=\"\",u=this.__position;l.lastIndex=this.__position;var h=l.exec(this.__input);return h?(u=h.index,r&&(u+=h[0].length)):u=this.__input_length,s=this.__input.substring(this.__position,u),this.__position=u,s},c.prototype.readUntilAfter=function(l){return this.readUntil(l,!0)},c.prototype.get_regexp=function(l,r){var s=null,u=\"g\";return r&&a&&(u=\"y\"),typeof l==\"string\"&&l!==\"\"?s=new RegExp(l,u):l&&(s=new RegExp(l.source,u)),s},c.prototype.get_literal_regexp=function(l){return RegExp(l.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"))},c.prototype.peekUntilAfter=function(l){var r=this.__position,s=this.readUntilAfter(l);return this.__position=r,s},c.prototype.lookBack=function(l){var r=this.__position-1;return r>=l.length&&this.__input.substring(r-l.length,r).toLowerCase()===l},e.exports.InputScanner=c},,,,,function(e){function a(c,l){c=typeof c==\"string\"?c:c.source,l=typeof l==\"string\"?l:l.source,this.__directives_block_pattern=new RegExp(c+/ beautify( \\w+[:]\\w+)+ /.source+l,\"g\"),this.__directive_pattern=/ (\\w+)[:](\\w+)/g,this.__directives_end_ignore_pattern=new RegExp(c+/\\sbeautify\\signore:end\\s/.source+l,\"g\")}a.prototype.get_directives=function(c){if(!c.match(this.__directives_block_pattern))return null;var l={};this.__directive_pattern.lastIndex=0;for(var r=this.__directive_pattern.exec(c);r;)l[r[1]]=r[2],r=this.__directive_pattern.exec(c);return l},a.prototype.readIgnored=function(c){return c.readUntilAfter(this.__directives_end_ignore_pattern)},e.exports.Directives=a},,function(e,a,c){var l=c(16).Beautifier,r=c(17).Options;function s(u,h){var d=new l(u,h);return d.beautify()}e.exports=s,e.exports.defaultOptions=function(){return new r}},function(e,a,c){var l=c(17).Options,r=c(2).Output,s=c(8).InputScanner,u=c(13).Directives,h=new u(/\\/\\*/,/\\*\\//),d=/\\r\\n|[\\r\\n]/,g=/\\r\\n|[\\r\\n]/g,y=/\\s/,m=/(?:\\s|\\n)+/g,A=/\\/\\*(?:[\\s\\S]*?)((?:\\*\\/)|$)/g,E=/\\/\\/(?:[^\\n\\r\\u2028\\u2029]*)/g;function w(M,B){this._source_text=M||\"\",this._options=new l(B),this._ch=null,this._input=null,this.NESTED_AT_RULE={\"@page\":!0,\"@font-face\":!0,\"@keyframes\":!0,\"@media\":!0,\"@supports\":!0,\"@document\":!0},this.CONDITIONAL_GROUP_RULE={\"@media\":!0,\"@supports\":!0,\"@document\":!0}}w.prototype.eatString=function(M){var B=\"\";for(this._ch=this._input.next();this._ch;){if(B+=this._ch,this._ch===\"\\\\\")B+=this._input.next();else if(M.indexOf(this._ch)!==-1||this._ch===`\n`)break;this._ch=this._input.next()}return B},w.prototype.eatWhitespace=function(M){for(var B=y.test(this._input.peek()),G=0;y.test(this._input.peek());)this._ch=this._input.next(),M&&this._ch===`\n`&&(G===0||G<this._options.max_preserve_newlines)&&(G++,this._output.add_new_line(!0));return B},w.prototype.foundNestedPseudoClass=function(){for(var M=0,B=1,G=this._input.peek(B);G;){if(G===\"{\")return!0;if(G===\"(\")M+=1;else if(G===\")\"){if(M===0)return!1;M-=1}else if(G===\";\"||G===\"}\")return!1;B++,G=this._input.peek(B)}return!1},w.prototype.print_string=function(M){this._output.set_indent(this._indentLevel),this._output.non_breaking_space=!0,this._output.add_token(M)},w.prototype.preserveSingleSpace=function(M){M&&(this._output.space_before_token=!0)},w.prototype.indent=function(){this._indentLevel++},w.prototype.outdent=function(){this._indentLevel>0&&this._indentLevel--},w.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var M=this._source_text,B=this._options.eol;B===\"auto\"&&(B=`\n`,M&&d.test(M||\"\")&&(B=M.match(d)[0])),M=M.replace(g,`\n`);var G=M.match(/^[\\t ]*/)[0];this._output=new r(this._options,G),this._input=new s(M),this._indentLevel=0,this._nestedLevel=0,this._ch=null;for(var J=0,f=!1,p=!1,b=!1,N=!1,R=!1,U=this._ch,H,z,I;H=this._input.read(m),z=H!==\"\",I=U,this._ch=this._input.next(),this._ch===\"\\\\\"&&this._input.hasNext()&&(this._ch+=this._input.next()),U=this._ch,this._ch;)if(this._ch===\"/\"&&this._input.peek()===\"*\"){this._output.add_new_line(),this._input.back();var F=this._input.read(A),T=h.get_directives(F);T&&T.ignore===\"start\"&&(F+=h.readIgnored(this._input)),this.print_string(F),this.eatWhitespace(!0),this._output.add_new_line()}else if(this._ch===\"/\"&&this._input.peek()===\"/\")this._output.space_before_token=!0,this._input.back(),this.print_string(this._input.read(E)),this.eatWhitespace(!0);else if(this._ch===\"@\")if(this.preserveSingleSpace(z),this._input.peek()===\"{\")this.print_string(this._ch+this.eatString(\"}\"));else{this.print_string(this._ch);var v=this._input.peekUntilAfter(/[: ,;{}()[\\]\\/='\"]/g);v.match(/[ :]$/)&&(v=this.eatString(\": \").replace(/\\s$/,\"\"),this.print_string(v),this._output.space_before_token=!0),v=v.replace(/\\s$/,\"\"),v===\"extend\"?N=!0:v===\"import\"&&(R=!0),v in this.NESTED_AT_RULE?(this._nestedLevel+=1,v in this.CONDITIONAL_GROUP_RULE&&(b=!0)):!f&&J===0&&v.indexOf(\":\")!==-1&&(p=!0,this.indent())}else this._ch===\"#\"&&this._input.peek()===\"{\"?(this.preserveSingleSpace(z),this.print_string(this._ch+this.eatString(\"}\"))):this._ch===\"{\"?(p&&(p=!1,this.outdent()),b?(b=!1,f=this._indentLevel>=this._nestedLevel):f=this._indentLevel>=this._nestedLevel-1,this._options.newline_between_rules&&f&&this._output.previous_line&&this._output.previous_line.item(-1)!==\"{\"&&this._output.ensure_empty_line_above(\"/\",\",\"),this._output.space_before_token=!0,this._options.brace_style===\"expand\"?(this._output.add_new_line(),this.print_string(this._ch),this.indent(),this._output.set_indent(this._indentLevel)):(this.indent(),this.print_string(this._ch)),this.eatWhitespace(!0),this._output.add_new_line()):this._ch===\"}\"?(this.outdent(),this._output.add_new_line(),I===\"{\"&&this._output.trim(!0),R=!1,N=!1,p&&(this.outdent(),p=!1),this.print_string(this._ch),f=!1,this._nestedLevel&&this._nestedLevel--,this.eatWhitespace(!0),this._output.add_new_line(),this._options.newline_between_rules&&!this._output.just_added_blankline()&&this._input.peek()!==\"}\"&&this._output.add_new_line(!0)):this._ch===\":\"?(f||b)&&!(this._input.lookBack(\"&\")||this.foundNestedPseudoClass())&&!this._input.lookBack(\"(\")&&!N&&J===0?(this.print_string(\":\"),p||(p=!0,this._output.space_before_token=!0,this.eatWhitespace(!0),this.indent())):(this._input.lookBack(\" \")&&(this._output.space_before_token=!0),this._input.peek()===\":\"?(this._ch=this._input.next(),this.print_string(\"::\")):this.print_string(\":\")):this._ch==='\"'||this._ch===\"'\"?(this.preserveSingleSpace(z),this.print_string(this._ch+this.eatString(this._ch)),this.eatWhitespace(!0)):this._ch===\";\"?J===0?(p&&(this.outdent(),p=!1),N=!1,R=!1,this.print_string(this._ch),this.eatWhitespace(!0),this._input.peek()!==\"/\"&&this._output.add_new_line()):(this.print_string(this._ch),this.eatWhitespace(!0),this._output.space_before_token=!0):this._ch===\"(\"?this._input.lookBack(\"url\")?(this.print_string(this._ch),this.eatWhitespace(),J++,this.indent(),this._ch=this._input.next(),this._ch===\")\"||this._ch==='\"'||this._ch===\"'\"?this._input.back():this._ch&&(this.print_string(this._ch+this.eatString(\")\")),J&&(J--,this.outdent()))):(this.preserveSingleSpace(z),this.print_string(this._ch),this.eatWhitespace(),J++,this.indent()):this._ch===\")\"?(J&&(J--,this.outdent()),this.print_string(this._ch)):this._ch===\",\"?(this.print_string(this._ch),this.eatWhitespace(!0),this._options.selector_separator_newline&&!p&&J===0&&!R&&!N?this._output.add_new_line():this._output.space_before_token=!0):(this._ch===\">\"||this._ch===\"+\"||this._ch===\"~\")&&!p&&J===0?this._options.space_around_combinator?(this._output.space_before_token=!0,this.print_string(this._ch),this._output.space_before_token=!0):(this.print_string(this._ch),this.eatWhitespace(),this._ch&&y.test(this._ch)&&(this._ch=\"\")):this._ch===\"]\"?this.print_string(this._ch):this._ch===\"[\"?(this.preserveSingleSpace(z),this.print_string(this._ch)):this._ch===\"=\"?(this.eatWhitespace(),this.print_string(\"=\"),y.test(this._ch)&&(this._ch=\"\")):this._ch===\"!\"&&!this._input.lookBack(\"\\\\\")?(this.print_string(\" \"),this.print_string(this._ch)):(this.preserveSingleSpace(z),this.print_string(this._ch));var k=this._output.get_code(B);return k},e.exports.Beautifier=w},function(e,a,c){var l=c(6).Options;function r(s){l.call(this,s,\"css\"),this.selector_separator_newline=this._get_boolean(\"selector_separator_newline\",!0),this.newline_between_rules=this._get_boolean(\"newline_between_rules\",!0);var u=this._get_boolean(\"space_around_selector_separator\");this.space_around_combinator=this._get_boolean(\"space_around_combinator\")||u;var h=this._get_selection_list(\"brace_style\",[\"collapse\",\"expand\",\"end-expand\",\"none\",\"preserve-inline\"]);this.brace_style=\"collapse\";for(var d=0;d<h.length;d++)h[d]!==\"expand\"?this.brace_style=\"collapse\":this.brace_style=h[d]}r.prototype=new l,e.exports.Options=r}],i={};function o(e){var a=i[e];if(a!==void 0)return a.exports;var c=i[e]={exports:{}};return t[e](c,c.exports,o),c.exports}var n=o(15);en=n})();var tn=en;var nn;(function(){\"use strict\";var t=[,,function(e){function a(r){this.__parent=r,this.__character_count=0,this.__indent_count=-1,this.__alignment_count=0,this.__wrap_point_index=0,this.__wrap_point_character_count=0,this.__wrap_point_indent_count=-1,this.__wrap_point_alignment_count=0,this.__items=[]}a.prototype.clone_empty=function(){var r=new a(this.__parent);return r.set_indent(this.__indent_count,this.__alignment_count),r},a.prototype.item=function(r){return r<0?this.__items[this.__items.length+r]:this.__items[r]},a.prototype.has_match=function(r){for(var s=this.__items.length-1;s>=0;s--)if(this.__items[s].match(r))return!0;return!1},a.prototype.set_indent=function(r,s){this.is_empty()&&(this.__indent_count=r||0,this.__alignment_count=s||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},a.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},a.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},a.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var r=this.__parent.current_line;return r.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),r.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),r.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count,r.__items[0]===\" \"&&(r.__items.splice(0,1),r.__character_count-=1),!0}return!1},a.prototype.is_empty=function(){return this.__items.length===0},a.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},a.prototype.push=function(r){this.__items.push(r);var s=r.lastIndexOf(`\n`);s!==-1?this.__character_count=r.length-s:this.__character_count+=r.length},a.prototype.pop=function(){var r=null;return this.is_empty()||(r=this.__items.pop(),this.__character_count-=r.length),r},a.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},a.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},a.prototype.trim=function(){for(;this.last()===\" \";)this.__items.pop(),this.__character_count-=1},a.prototype.toString=function(){var r=\"\";return this.is_empty()?this.__parent.indent_empty_lines&&(r=this.__parent.get_indent_string(this.__indent_count)):(r=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),r+=this.__items.join(\"\")),r};function c(r,s){this.__cache=[\"\"],this.__indent_size=r.indent_size,this.__indent_string=r.indent_char,r.indent_with_tabs||(this.__indent_string=new Array(r.indent_size+1).join(r.indent_char)),s=s||\"\",r.indent_level>0&&(s=new Array(r.indent_level+1).join(this.__indent_string)),this.__base_string=s,this.__base_string_length=s.length}c.prototype.get_indent_size=function(r,s){var u=this.__base_string_length;return s=s||0,r<0&&(u=0),u+=r*this.__indent_size,u+=s,u},c.prototype.get_indent_string=function(r,s){var u=this.__base_string;return s=s||0,r<0&&(r=0,u=\"\"),s+=r*this.__indent_size,this.__ensure_cache(s),u+=this.__cache[s],u},c.prototype.__ensure_cache=function(r){for(;r>=this.__cache.length;)this.__add_column()},c.prototype.__add_column=function(){var r=this.__cache.length,s=0,u=\"\";this.__indent_size&&r>=this.__indent_size&&(s=Math.floor(r/this.__indent_size),r-=s*this.__indent_size,u=new Array(s+1).join(this.__indent_string)),r&&(u+=new Array(r+1).join(\" \")),this.__cache.push(u)};function l(r,s){this.__indent_cache=new c(r,s),this.raw=!1,this._end_with_newline=r.end_with_newline,this.indent_size=r.indent_size,this.wrap_line_length=r.wrap_line_length,this.indent_empty_lines=r.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new a(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}l.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},l.prototype.get_line_number=function(){return this.__lines.length},l.prototype.get_indent_string=function(r,s){return this.__indent_cache.get_indent_string(r,s)},l.prototype.get_indent_size=function(r,s){return this.__indent_cache.get_indent_size(r,s)},l.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},l.prototype.add_new_line=function(r){return this.is_empty()||!r&&this.just_added_newline()?!1:(this.raw||this.__add_outputline(),!0)},l.prototype.get_code=function(r){this.trim(!0);var s=this.current_line.pop();s&&(s[s.length-1]===`\n`&&(s=s.replace(/\\n+$/g,\"\")),this.current_line.push(s)),this._end_with_newline&&this.__add_outputline();var u=this.__lines.join(`\n`);return r!==`\n`&&(u=u.replace(/[\\n]/g,r)),u},l.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},l.prototype.set_indent=function(r,s){return r=r||0,s=s||0,this.next_line.set_indent(r,s),this.__lines.length>1?(this.current_line.set_indent(r,s),!0):(this.current_line.set_indent(),!1)},l.prototype.add_raw_token=function(r){for(var s=0;s<r.newlines;s++)this.__add_outputline();this.current_line.set_indent(-1),this.current_line.push(r.whitespace_before),this.current_line.push(r.text),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1},l.prototype.add_token=function(r){this.__add_space_before_token(),this.current_line.push(r),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=this.current_line._allow_wrap()},l.prototype.__add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&(this.non_breaking_space||this.set_wrap_point(),this.current_line.push(\" \"))},l.prototype.remove_indent=function(r){for(var s=this.__lines.length;r<s;)this.__lines[r]._remove_indent(),r++;this.current_line._remove_wrap_indent()},l.prototype.trim=function(r){for(r=r===void 0?!1:r,this.current_line.trim();r&&this.__lines.length>1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},l.prototype.just_added_newline=function(){return this.current_line.is_empty()},l.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},l.prototype.ensure_empty_line_above=function(r,s){for(var u=this.__lines.length-2;u>=0;){var h=this.__lines[u];if(h.is_empty())break;if(h.item(0).indexOf(r)!==0&&h.item(-1)!==s){this.__lines.splice(u+1,0,new a(this)),this.previous_line=this.__lines[this.__lines.length-2];break}u--}},e.exports.Output=l},function(e){function a(c,l,r,s){this.type=c,this.text=l,this.comments_before=null,this.newlines=r||0,this.whitespace_before=s||\"\",this.parent=null,this.next=null,this.previous=null,this.opened=null,this.closed=null,this.directives=null}e.exports.Token=a},,,function(e){function a(r,s){this.raw_options=c(r,s),this.disabled=this._get_boolean(\"disabled\"),this.eol=this._get_characters(\"eol\",\"auto\"),this.end_with_newline=this._get_boolean(\"end_with_newline\"),this.indent_size=this._get_number(\"indent_size\",4),this.indent_char=this._get_characters(\"indent_char\",\" \"),this.indent_level=this._get_number(\"indent_level\"),this.preserve_newlines=this._get_boolean(\"preserve_newlines\",!0),this.max_preserve_newlines=this._get_number(\"max_preserve_newlines\",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean(\"indent_with_tabs\",this.indent_char===\"\t\"),this.indent_with_tabs&&(this.indent_char=\"\t\",this.indent_size===1&&(this.indent_size=4)),this.wrap_line_length=this._get_number(\"wrap_line_length\",this._get_number(\"max_char\")),this.indent_empty_lines=this._get_boolean(\"indent_empty_lines\"),this.templating=this._get_selection_list(\"templating\",[\"auto\",\"none\",\"django\",\"erb\",\"handlebars\",\"php\",\"smarty\"],[\"auto\"])}a.prototype._get_array=function(r,s){var u=this.raw_options[r],h=s||[];return typeof u==\"object\"?u!==null&&typeof u.concat==\"function\"&&(h=u.concat()):typeof u==\"string\"&&(h=u.split(/[^a-zA-Z0-9_\\/\\-]+/)),h},a.prototype._get_boolean=function(r,s){var u=this.raw_options[r],h=u===void 0?!!s:!!u;return h},a.prototype._get_characters=function(r,s){var u=this.raw_options[r],h=s||\"\";return typeof u==\"string\"&&(h=u.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,`\n`).replace(/\\\\t/,\"\t\")),h},a.prototype._get_number=function(r,s){var u=this.raw_options[r];s=parseInt(s,10),isNaN(s)&&(s=0);var h=parseInt(u,10);return isNaN(h)&&(h=s),h},a.prototype._get_selection=function(r,s,u){var h=this._get_selection_list(r,s,u);if(h.length!==1)throw new Error(\"Invalid Option Value: The option '\"+r+`' can only be one of the following values:\n`+s+`\nYou passed in: '`+this.raw_options[r]+\"'\");return h[0]},a.prototype._get_selection_list=function(r,s,u){if(!s||s.length===0)throw new Error(\"Selection list cannot be empty.\");if(u=u||[s[0]],!this._is_valid_selection(u,s))throw new Error(\"Invalid Default Value!\");var h=this._get_array(r,u);if(!this._is_valid_selection(h,s))throw new Error(\"Invalid Option Value: The option '\"+r+`' can contain only the following values:\n`+s+`\nYou passed in: '`+this.raw_options[r]+\"'\");return h},a.prototype._is_valid_selection=function(r,s){return r.length&&s.length&&!r.some(function(u){return s.indexOf(u)===-1})};function c(r,s){var u={};r=l(r);var h;for(h in r)h!==s&&(u[h]=r[h]);if(s&&r[s])for(h in r[s])u[h]=r[s][h];return u}function l(r){var s={},u;for(u in r){var h=u.replace(/-/g,\"_\");s[h]=r[u]}return s}e.exports.Options=a,e.exports.normalizeOpts=l,e.exports.mergeOpts=c},,function(e){var a=RegExp.prototype.hasOwnProperty(\"sticky\");function c(l){this.__input=l||\"\",this.__input_length=this.__input.length,this.__position=0}c.prototype.restart=function(){this.__position=0},c.prototype.back=function(){this.__position>0&&(this.__position-=1)},c.prototype.hasNext=function(){return this.__position<this.__input_length},c.prototype.next=function(){var l=null;return this.hasNext()&&(l=this.__input.charAt(this.__position),this.__position+=1),l},c.prototype.peek=function(l){var r=null;return l=l||0,l+=this.__position,l>=0&&l<this.__input_length&&(r=this.__input.charAt(l)),r},c.prototype.__match=function(l,r){l.lastIndex=r;var s=l.exec(this.__input);return s&&!(a&&l.sticky)&&s.index!==r&&(s=null),s},c.prototype.test=function(l,r){return r=r||0,r+=this.__position,r>=0&&r<this.__input_length?!!this.__match(l,r):!1},c.prototype.testChar=function(l,r){var s=this.peek(r);return l.lastIndex=0,s!==null&&l.test(s)},c.prototype.match=function(l){var r=this.__match(l,this.__position);return r?this.__position+=r[0].length:r=null,r},c.prototype.read=function(l,r,s){var u=\"\",h;return l&&(h=this.match(l),h&&(u+=h[0])),r&&(h||!l)&&(u+=this.readUntil(r,s)),u},c.prototype.readUntil=function(l,r){var s=\"\",u=this.__position;l.lastIndex=this.__position;var h=l.exec(this.__input);return h?(u=h.index,r&&(u+=h[0].length)):u=this.__input_length,s=this.__input.substring(this.__position,u),this.__position=u,s},c.prototype.readUntilAfter=function(l){return this.readUntil(l,!0)},c.prototype.get_regexp=function(l,r){var s=null,u=\"g\";return r&&a&&(u=\"y\"),typeof l==\"string\"&&l!==\"\"?s=new RegExp(l,u):l&&(s=new RegExp(l.source,u)),s},c.prototype.get_literal_regexp=function(l){return RegExp(l.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"))},c.prototype.peekUntilAfter=function(l){var r=this.__position,s=this.readUntilAfter(l);return this.__position=r,s},c.prototype.lookBack=function(l){var r=this.__position-1;return r>=l.length&&this.__input.substring(r-l.length,r).toLowerCase()===l},e.exports.InputScanner=c},function(e,a,c){var l=c(8).InputScanner,r=c(3).Token,s=c(10).TokenStream,u=c(11).WhitespacePattern,h={START:\"TK_START\",RAW:\"TK_RAW\",EOF:\"TK_EOF\"},d=function(g,y){this._input=new l(g),this._options=y||{},this.__tokens=null,this._patterns={},this._patterns.whitespace=new u(this._input)};d.prototype.tokenize=function(){this._input.restart(),this.__tokens=new s,this._reset();for(var g,y=new r(h.START,\"\"),m=null,A=[],E=new s;y.type!==h.EOF;){for(g=this._get_next_token(y,m);this._is_comment(g);)E.add(g),g=this._get_next_token(y,m);E.isEmpty()||(g.comments_before=E,E=new s),g.parent=m,this._is_opening(g)?(A.push(m),m=g):m&&this._is_closing(g,m)&&(g.opened=m,m.closed=g,m=A.pop(),g.parent=m),g.previous=y,y.next=g,this.__tokens.add(g),y=g}return this.__tokens},d.prototype._is_first_token=function(){return this.__tokens.isEmpty()},d.prototype._reset=function(){},d.prototype._get_next_token=function(g,y){this._readWhitespace();var m=this._input.read(/.+/g);return m?this._create_token(h.RAW,m):this._create_token(h.EOF,\"\")},d.prototype._is_comment=function(g){return!1},d.prototype._is_opening=function(g){return!1},d.prototype._is_closing=function(g,y){return!1},d.prototype._create_token=function(g,y){var m=new r(g,y,this._patterns.whitespace.newline_count,this._patterns.whitespace.whitespace_before_token);return m},d.prototype._readWhitespace=function(){return this._patterns.whitespace.read()},e.exports.Tokenizer=d,e.exports.TOKEN=h},function(e){function a(c){this.__tokens=[],this.__tokens_length=this.__tokens.length,this.__position=0,this.__parent_token=c}a.prototype.restart=function(){this.__position=0},a.prototype.isEmpty=function(){return this.__tokens_length===0},a.prototype.hasNext=function(){return this.__position<this.__tokens_length},a.prototype.next=function(){var c=null;return this.hasNext()&&(c=this.__tokens[this.__position],this.__position+=1),c},a.prototype.peek=function(c){var l=null;return c=c||0,c+=this.__position,c>=0&&c<this.__tokens_length&&(l=this.__tokens[c]),l},a.prototype.add=function(c){this.__parent_token&&(c.parent=this.__parent_token),this.__tokens.push(c),this.__tokens_length+=1},e.exports.TokenStream=a},function(e,a,c){var l=c(12).Pattern;function r(s,u){l.call(this,s,u),u?this._line_regexp=this._input.get_regexp(u._line_regexp):this.__set_whitespace_patterns(\"\",\"\"),this.newline_count=0,this.whitespace_before_token=\"\"}r.prototype=new l,r.prototype.__set_whitespace_patterns=function(s,u){s+=\"\\\\t \",u+=\"\\\\n\\\\r\",this._match_pattern=this._input.get_regexp(\"[\"+s+u+\"]+\",!0),this._newline_regexp=this._input.get_regexp(\"\\\\r\\\\n|[\"+u+\"]\")},r.prototype.read=function(){this.newline_count=0,this.whitespace_before_token=\"\";var s=this._input.read(this._match_pattern);if(s===\" \")this.whitespace_before_token=\" \";else if(s){var u=this.__split(this._newline_regexp,s);this.newline_count=u.length-1,this.whitespace_before_token=u[this.newline_count]}return s},r.prototype.matching=function(s,u){var h=this._create();return h.__set_whitespace_patterns(s,u),h._update(),h},r.prototype._create=function(){return new r(this._input,this)},r.prototype.__split=function(s,u){s.lastIndex=0;for(var h=0,d=[],g=s.exec(u);g;)d.push(u.substring(h,g.index)),h=g.index+g[0].length,g=s.exec(u);return h<u.length?d.push(u.substring(h,u.length)):d.push(\"\"),d},e.exports.WhitespacePattern=r},function(e){function a(c,l){this._input=c,this._starting_pattern=null,this._match_pattern=null,this._until_pattern=null,this._until_after=!1,l&&(this._starting_pattern=this._input.get_regexp(l._starting_pattern,!0),this._match_pattern=this._input.get_regexp(l._match_pattern,!0),this._until_pattern=this._input.get_regexp(l._until_pattern),this._until_after=l._until_after)}a.prototype.read=function(){var c=this._input.read(this._starting_pattern);return(!this._starting_pattern||c)&&(c+=this._input.read(this._match_pattern,this._until_pattern,this._until_after)),c},a.prototype.read_match=function(){return this._input.match(this._match_pattern)},a.prototype.until_after=function(c){var l=this._create();return l._until_after=!0,l._until_pattern=this._input.get_regexp(c),l._update(),l},a.prototype.until=function(c){var l=this._create();return l._until_after=!1,l._until_pattern=this._input.get_regexp(c),l._update(),l},a.prototype.starting_with=function(c){var l=this._create();return l._starting_pattern=this._input.get_regexp(c,!0),l._update(),l},a.prototype.matching=function(c){var l=this._create();return l._match_pattern=this._input.get_regexp(c,!0),l._update(),l},a.prototype._create=function(){return new a(this._input,this)},a.prototype._update=function(){},e.exports.Pattern=a},function(e){function a(c,l){c=typeof c==\"string\"?c:c.source,l=typeof l==\"string\"?l:l.source,this.__directives_block_pattern=new RegExp(c+/ beautify( \\w+[:]\\w+)+ /.source+l,\"g\"),this.__directive_pattern=/ (\\w+)[:](\\w+)/g,this.__directives_end_ignore_pattern=new RegExp(c+/\\sbeautify\\signore:end\\s/.source+l,\"g\")}a.prototype.get_directives=function(c){if(!c.match(this.__directives_block_pattern))return null;var l={};this.__directive_pattern.lastIndex=0;for(var r=this.__directive_pattern.exec(c);r;)l[r[1]]=r[2],r=this.__directive_pattern.exec(c);return l},a.prototype.readIgnored=function(c){return c.readUntilAfter(this.__directives_end_ignore_pattern)},e.exports.Directives=a},function(e,a,c){var l=c(12).Pattern,r={django:!1,erb:!1,handlebars:!1,php:!1,smarty:!1};function s(u,h){l.call(this,u,h),this.__template_pattern=null,this._disabled=Object.assign({},r),this._excluded=Object.assign({},r),h&&(this.__template_pattern=this._input.get_regexp(h.__template_pattern),this._excluded=Object.assign(this._excluded,h._excluded),this._disabled=Object.assign(this._disabled,h._disabled));var d=new l(u);this.__patterns={handlebars_comment:d.starting_with(/{{!--/).until_after(/--}}/),handlebars_unescaped:d.starting_with(/{{{/).until_after(/}}}/),handlebars:d.starting_with(/{{/).until_after(/}}/),php:d.starting_with(/<\\?(?:[= ]|php)/).until_after(/\\?>/),erb:d.starting_with(/<%[^%]/).until_after(/[^%]%>/),django:d.starting_with(/{%/).until_after(/%}/),django_value:d.starting_with(/{{/).until_after(/}}/),django_comment:d.starting_with(/{#/).until_after(/#}/),smarty:d.starting_with(/{(?=[^}{\\s\\n])/).until_after(/[^\\s\\n]}/),smarty_comment:d.starting_with(/{\\*/).until_after(/\\*}/),smarty_literal:d.starting_with(/{literal}/).until_after(/{\\/literal}/)}}s.prototype=new l,s.prototype._create=function(){return new s(this._input,this)},s.prototype._update=function(){this.__set_templated_pattern()},s.prototype.disable=function(u){var h=this._create();return h._disabled[u]=!0,h._update(),h},s.prototype.read_options=function(u){var h=this._create();for(var d in r)h._disabled[d]=u.templating.indexOf(d)===-1;return h._update(),h},s.prototype.exclude=function(u){var h=this._create();return h._excluded[u]=!0,h._update(),h},s.prototype.read=function(){var u=\"\";this._match_pattern?u=this._input.read(this._starting_pattern):u=this._input.read(this._starting_pattern,this.__template_pattern);for(var h=this._read_template();h;)this._match_pattern?h+=this._input.read(this._match_pattern):h+=this._input.readUntil(this.__template_pattern),u+=h,h=this._read_template();return this._until_after&&(u+=this._input.readUntilAfter(this._until_pattern)),u},s.prototype.__set_templated_pattern=function(){var u=[];this._disabled.php||u.push(this.__patterns.php._starting_pattern.source),this._disabled.handlebars||u.push(this.__patterns.handlebars._starting_pattern.source),this._disabled.erb||u.push(this.__patterns.erb._starting_pattern.source),this._disabled.django||(u.push(this.__patterns.django._starting_pattern.source),u.push(this.__patterns.django_value._starting_pattern.source),u.push(this.__patterns.django_comment._starting_pattern.source)),this._disabled.smarty||u.push(this.__patterns.smarty._starting_pattern.source),this._until_pattern&&u.push(this._until_pattern.source),this.__template_pattern=this._input.get_regexp(\"(?:\"+u.join(\"|\")+\")\")},s.prototype._read_template=function(){var u=\"\",h=this._input.peek();if(h===\"<\"){var d=this._input.peek(1);!this._disabled.php&&!this._excluded.php&&d===\"?\"&&(u=u||this.__patterns.php.read()),!this._disabled.erb&&!this._excluded.erb&&d===\"%\"&&(u=u||this.__patterns.erb.read())}else h===\"{\"&&(!this._disabled.handlebars&&!this._excluded.handlebars&&(u=u||this.__patterns.handlebars_comment.read(),u=u||this.__patterns.handlebars_unescaped.read(),u=u||this.__patterns.handlebars.read()),this._disabled.django||(!this._excluded.django&&!this._excluded.handlebars&&(u=u||this.__patterns.django_value.read()),this._excluded.django||(u=u||this.__patterns.django_comment.read(),u=u||this.__patterns.django.read())),this._disabled.smarty||this._disabled.django&&this._disabled.handlebars&&(u=u||this.__patterns.smarty_comment.read(),u=u||this.__patterns.smarty_literal.read(),u=u||this.__patterns.smarty.read()));return u},e.exports.TemplatablePattern=s},,,,function(e,a,c){var l=c(19).Beautifier,r=c(20).Options;function s(u,h,d,g){var y=new l(u,h,d,g);return y.beautify()}e.exports=s,e.exports.defaultOptions=function(){return new r}},function(e,a,c){var l=c(20).Options,r=c(2).Output,s=c(21).Tokenizer,u=c(21).TOKEN,h=/\\r\\n|[\\r\\n]/,d=/\\r\\n|[\\r\\n]/g,g=function(f,p){this.indent_level=0,this.alignment_size=0,this.max_preserve_newlines=f.max_preserve_newlines,this.preserve_newlines=f.preserve_newlines,this._output=new r(f,p)};g.prototype.current_line_has_match=function(f){return this._output.current_line.has_match(f)},g.prototype.set_space_before_token=function(f,p){this._output.space_before_token=f,this._output.non_breaking_space=p},g.prototype.set_wrap_point=function(){this._output.set_indent(this.indent_level,this.alignment_size),this._output.set_wrap_point()},g.prototype.add_raw_token=function(f){this._output.add_raw_token(f)},g.prototype.print_preserved_newlines=function(f){var p=0;f.type!==u.TEXT&&f.previous.type!==u.TEXT&&(p=f.newlines?1:0),this.preserve_newlines&&(p=f.newlines<this.max_preserve_newlines+1?f.newlines:this.max_preserve_newlines+1);for(var b=0;b<p;b++)this.print_newline(b>0);return p!==0},g.prototype.traverse_whitespace=function(f){return f.whitespace_before||f.newlines?(this.print_preserved_newlines(f)||(this._output.space_before_token=!0),!0):!1},g.prototype.previous_token_wrapped=function(){return this._output.previous_token_wrapped},g.prototype.print_newline=function(f){this._output.add_new_line(f)},g.prototype.print_token=function(f){f.text&&(this._output.set_indent(this.indent_level,this.alignment_size),this._output.add_token(f.text))},g.prototype.indent=function(){this.indent_level++},g.prototype.get_full_indent=function(f){return f=this.indent_level+(f||0),f<1?\"\":this._output.get_indent_string(f)};var y=function(f){for(var p=null,b=f.next;b.type!==u.EOF&&f.closed!==b;){if(b.type===u.ATTRIBUTE&&b.text===\"type\"){b.next&&b.next.type===u.EQUALS&&b.next.next&&b.next.next.type===u.VALUE&&(p=b.next.next.text);break}b=b.next}return p},m=function(f,p){var b=null,N=null;return p.closed?(f===\"script\"?b=\"text/javascript\":f===\"style\"&&(b=\"text/css\"),b=y(p)||b,b.search(\"text/css\")>-1?N=\"css\":b.search(/module|((text|application|dojo)\\/(x-)?(javascript|ecmascript|jscript|livescript|(ld\\+)?json|method|aspect))/)>-1?N=\"javascript\":b.search(/(text|application|dojo)\\/(x-)?(html)/)>-1?N=\"html\":b.search(/test\\/null/)>-1&&(N=\"null\"),N):null};function A(f,p){return p.indexOf(f)!==-1}function E(f,p,b){this.parent=f||null,this.tag=p?p.tag_name:\"\",this.indent_level=b||0,this.parser_token=p||null}function w(f){this._printer=f,this._current_frame=null}w.prototype.get_parser_token=function(){return this._current_frame?this._current_frame.parser_token:null},w.prototype.record_tag=function(f){var p=new E(this._current_frame,f,this._printer.indent_level);this._current_frame=p},w.prototype._try_pop_frame=function(f){var p=null;return f&&(p=f.parser_token,this._printer.indent_level=f.indent_level,this._current_frame=f.parent),p},w.prototype._get_frame=function(f,p){for(var b=this._current_frame;b&&f.indexOf(b.tag)===-1;){if(p&&p.indexOf(b.tag)!==-1){b=null;break}b=b.parent}return b},w.prototype.try_pop=function(f,p){var b=this._get_frame([f],p);return this._try_pop_frame(b)},w.prototype.indent_to_tag=function(f){var p=this._get_frame(f);p&&(this._printer.indent_level=p.indent_level)};function M(f,p,b,N){this._source_text=f||\"\",p=p||{},this._js_beautify=b,this._css_beautify=N,this._tag_stack=null;var R=new l(p,\"html\");this._options=R,this._is_wrap_attributes_force=this._options.wrap_attributes.substr(0,5)===\"force\",this._is_wrap_attributes_force_expand_multiline=this._options.wrap_attributes===\"force-expand-multiline\",this._is_wrap_attributes_force_aligned=this._options.wrap_attributes===\"force-aligned\",this._is_wrap_attributes_aligned_multiple=this._options.wrap_attributes===\"aligned-multiple\",this._is_wrap_attributes_preserve=this._options.wrap_attributes.substr(0,8)===\"preserve\",this._is_wrap_attributes_preserve_aligned=this._options.wrap_attributes===\"preserve-aligned\"}M.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var f=this._source_text,p=this._options.eol;this._options.eol===\"auto\"&&(p=`\n`,f&&h.test(f)&&(p=f.match(h)[0])),f=f.replace(d,`\n`);var b=f.match(/^[\\t ]*/)[0],N={text:\"\",type:\"\"},R=new B,U=new g(this._options,b),H=new s(f,this._options).tokenize();this._tag_stack=new w(U);for(var z=null,I=H.next();I.type!==u.EOF;)I.type===u.TAG_OPEN||I.type===u.COMMENT?(z=this._handle_tag_open(U,I,R,N),R=z):I.type===u.ATTRIBUTE||I.type===u.EQUALS||I.type===u.VALUE||I.type===u.TEXT&&!R.tag_complete?z=this._handle_inside_tag(U,I,R,H):I.type===u.TAG_CLOSE?z=this._handle_tag_close(U,I,R):I.type===u.TEXT?z=this._handle_text(U,I,R):U.add_raw_token(I),N=z,I=H.next();var F=U._output.get_code(p);return F},M.prototype._handle_tag_close=function(f,p,b){var N={text:p.text,type:p.type};return f.alignment_size=0,b.tag_complete=!0,f.set_space_before_token(p.newlines||p.whitespace_before!==\"\",!0),b.is_unformatted?f.add_raw_token(p):(b.tag_start_char===\"<\"&&(f.set_space_before_token(p.text[0]===\"/\",!0),this._is_wrap_attributes_force_expand_multiline&&b.has_wrapped_attrs&&f.print_newline(!1)),f.print_token(p)),b.indent_content&&!(b.is_unformatted||b.is_content_unformatted)&&(f.indent(),b.indent_content=!1),!b.is_inline_element&&!(b.is_unformatted||b.is_content_unformatted)&&f.set_wrap_point(),N},M.prototype._handle_inside_tag=function(f,p,b,N){var R=b.has_wrapped_attrs,U={text:p.text,type:p.type};if(f.set_space_before_token(p.newlines||p.whitespace_before!==\"\",!0),b.is_unformatted)f.add_raw_token(p);else if(b.tag_start_char===\"{\"&&p.type===u.TEXT)f.print_preserved_newlines(p)?(p.newlines=0,f.add_raw_token(p)):f.print_token(p);else{if(p.type===u.ATTRIBUTE?(f.set_space_before_token(!0),b.attr_count+=1):(p.type===u.EQUALS||p.type===u.VALUE&&p.previous.type===u.EQUALS)&&f.set_space_before_token(!1),p.type===u.ATTRIBUTE&&b.tag_start_char===\"<\"&&((this._is_wrap_attributes_preserve||this._is_wrap_attributes_preserve_aligned)&&(f.traverse_whitespace(p),R=R||p.newlines!==0),this._is_wrap_attributes_force)){var H=b.attr_count>1;if(this._is_wrap_attributes_force_expand_multiline&&b.attr_count===1){var z=!0,I=0,F;do{if(F=N.peek(I),F.type===u.ATTRIBUTE){z=!1;break}I+=1}while(I<4&&F.type!==u.EOF&&F.type!==u.TAG_CLOSE);H=!z}H&&(f.print_newline(!1),R=!0)}f.print_token(p),R=R||f.previous_token_wrapped(),b.has_wrapped_attrs=R}return U},M.prototype._handle_text=function(f,p,b){var N={text:p.text,type:\"TK_CONTENT\"};return b.custom_beautifier_name?this._print_custom_beatifier_text(f,p,b):b.is_unformatted||b.is_content_unformatted?f.add_raw_token(p):(f.traverse_whitespace(p),f.print_token(p)),N},M.prototype._print_custom_beatifier_text=function(f,p,b){var N=this;if(p.text!==\"\"){var R=p.text,U,H=1,z=\"\",I=\"\";b.custom_beautifier_name===\"javascript\"&&typeof this._js_beautify==\"function\"?U=this._js_beautify:b.custom_beautifier_name===\"css\"&&typeof this._css_beautify==\"function\"?U=this._css_beautify:b.custom_beautifier_name===\"html\"&&(U=function(x,D){var L=new M(x,D,N._js_beautify,N._css_beautify);return L.beautify()}),this._options.indent_scripts===\"keep\"?H=0:this._options.indent_scripts===\"separate\"&&(H=-f.indent_level);var F=f.get_full_indent(H);if(R=R.replace(/\\n[ \\t]*$/,\"\"),b.custom_beautifier_name!==\"html\"&&R[0]===\"<\"&&R.match(/^(<!--|<!\\[CDATA\\[)/)){var T=/^(<!--[^\\n]*|<!\\[CDATA\\[)(\\n?)([ \\t\\n]*)([\\s\\S]*)(-->|]]>)$/.exec(R);if(!T){f.add_raw_token(p);return}z=F+T[1]+`\n`,R=T[4],T[5]&&(I=F+T[5]),R=R.replace(/\\n[ \\t]*$/,\"\"),(T[2]||T[3].indexOf(`\n`)!==-1)&&(T=T[3].match(/[ \\t]+$/),T&&(p.whitespace_before=T[0]))}if(R)if(U){var v=function(){this.eol=`\n`};v.prototype=this._options.raw_options;var k=new v;R=U(F+R,k)}else{var C=p.whitespace_before;C&&(R=R.replace(new RegExp(`\n(`+C+\")?\",\"g\"),`\n`)),R=F+R.replace(/\\n/g,`\n`+F)}z&&(R?R=z+R+`\n`+I:R=z+I),f.print_newline(!1),R&&(p.text=R,p.whitespace_before=\"\",p.newlines=0,f.add_raw_token(p),f.print_newline(!0))}},M.prototype._handle_tag_open=function(f,p,b,N){var R=this._get_tag_open_token(p);return(b.is_unformatted||b.is_content_unformatted)&&!b.is_empty_element&&p.type===u.TAG_OPEN&&p.text.indexOf(\"</\")===0?(f.add_raw_token(p),R.start_tag_token=this._tag_stack.try_pop(R.tag_name)):(f.traverse_whitespace(p),this._set_tag_position(f,p,R,b,N),R.is_inline_element||f.set_wrap_point(),f.print_token(p)),(this._is_wrap_attributes_force_aligned||this._is_wrap_attributes_aligned_multiple||this._is_wrap_attributes_preserve_aligned)&&(R.alignment_size=p.text.length+1),!R.tag_complete&&!R.is_unformatted&&(f.alignment_size=R.alignment_size),R};var B=function(f,p){if(this.parent=f||null,this.text=\"\",this.type=\"TK_TAG_OPEN\",this.tag_name=\"\",this.is_inline_element=!1,this.is_unformatted=!1,this.is_content_unformatted=!1,this.is_empty_element=!1,this.is_start_tag=!1,this.is_end_tag=!1,this.indent_content=!1,this.multiline_content=!1,this.custom_beautifier_name=null,this.start_tag_token=null,this.attr_count=0,this.has_wrapped_attrs=!1,this.alignment_size=0,this.tag_complete=!1,this.tag_start_char=\"\",this.tag_check=\"\",!p)this.tag_complete=!0;else{var b;this.tag_start_char=p.text[0],this.text=p.text,this.tag_start_char===\"<\"?(b=p.text.match(/^<([^\\s>]*)/),this.tag_check=b?b[1]:\"\"):(b=p.text.match(/^{{(?:[\\^]|#\\*?)?([^\\s}]+)/),this.tag_check=b?b[1]:\"\",p.text===\"{{#>\"&&this.tag_check===\">\"&&p.next!==null&&(this.tag_check=p.next.text)),this.tag_check=this.tag_check.toLowerCase(),p.type===u.COMMENT&&(this.tag_complete=!0),this.is_start_tag=this.tag_check.charAt(0)!==\"/\",this.tag_name=this.is_start_tag?this.tag_check:this.tag_check.substr(1),this.is_end_tag=!this.is_start_tag||p.closed&&p.closed.text===\"/>\",this.is_end_tag=this.is_end_tag||this.tag_start_char===\"{\"&&(this.text.length<3||/[^#\\^]/.test(this.text.charAt(2)))}};M.prototype._get_tag_open_token=function(f){var p=new B(this._tag_stack.get_parser_token(),f);return p.alignment_size=this._options.wrap_attributes_indent_size,p.is_end_tag=p.is_end_tag||A(p.tag_check,this._options.void_elements),p.is_empty_element=p.tag_complete||p.is_start_tag&&p.is_end_tag,p.is_unformatted=!p.tag_complete&&A(p.tag_check,this._options.unformatted),p.is_content_unformatted=!p.is_empty_element&&A(p.tag_check,this._options.content_unformatted),p.is_inline_element=A(p.tag_name,this._options.inline)||p.tag_start_char===\"{\",p},M.prototype._set_tag_position=function(f,p,b,N,R){if(b.is_empty_element||(b.is_end_tag?b.start_tag_token=this._tag_stack.try_pop(b.tag_name):(this._do_optional_end_element(b)&&(b.is_inline_element||f.print_newline(!1)),this._tag_stack.record_tag(b),(b.tag_name===\"script\"||b.tag_name===\"style\")&&!(b.is_unformatted||b.is_content_unformatted)&&(b.custom_beautifier_name=m(b.tag_check,p)))),A(b.tag_check,this._options.extra_liners)&&(f.print_newline(!1),f._output.just_added_blankline()||f.print_newline(!0)),b.is_empty_element){if(b.tag_start_char===\"{\"&&b.tag_check===\"else\"){this._tag_stack.indent_to_tag([\"if\",\"unless\",\"each\"]),b.indent_content=!0;var U=f.current_line_has_match(/{{#if/);U||f.print_newline(!1)}b.tag_name===\"!--\"&&R.type===u.TAG_CLOSE&&N.is_end_tag&&b.text.indexOf(`\n`)===-1||(b.is_inline_element||b.is_unformatted||f.print_newline(!1),this._calcluate_parent_multiline(f,b))}else if(b.is_end_tag){var H=!1;H=b.start_tag_token&&b.start_tag_token.multiline_content,H=H||!b.is_inline_element&&!(N.is_inline_element||N.is_unformatted)&&!(R.type===u.TAG_CLOSE&&b.start_tag_token===N)&&R.type!==\"TK_CONTENT\",(b.is_content_unformatted||b.is_unformatted)&&(H=!1),H&&f.print_newline(!1)}else b.indent_content=!b.custom_beautifier_name,b.tag_start_char===\"<\"&&(b.tag_name===\"html\"?b.indent_content=this._options.indent_inner_html:b.tag_name===\"head\"?b.indent_content=this._options.indent_head_inner_html:b.tag_name===\"body\"&&(b.indent_content=this._options.indent_body_inner_html)),!(b.is_inline_element||b.is_unformatted)&&(R.type!==\"TK_CONTENT\"||b.is_content_unformatted)&&f.print_newline(!1),this._calcluate_parent_multiline(f,b)},M.prototype._calcluate_parent_multiline=function(f,p){p.parent&&f._output.just_added_newline()&&!((p.is_inline_element||p.is_unformatted)&&p.parent.is_inline_element)&&(p.parent.multiline_content=!0)};var G=[\"address\",\"article\",\"aside\",\"blockquote\",\"details\",\"div\",\"dl\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hr\",\"main\",\"nav\",\"ol\",\"p\",\"pre\",\"section\",\"table\",\"ul\"],J=[\"a\",\"audio\",\"del\",\"ins\",\"map\",\"noscript\",\"video\"];M.prototype._do_optional_end_element=function(f){var p=null;if(!(f.is_empty_element||!f.is_start_tag||!f.parent)){if(f.tag_name===\"body\")p=p||this._tag_stack.try_pop(\"head\");else if(f.tag_name===\"li\")p=p||this._tag_stack.try_pop(\"li\",[\"ol\",\"ul\"]);else if(f.tag_name===\"dd\"||f.tag_name===\"dt\")p=p||this._tag_stack.try_pop(\"dt\",[\"dl\"]),p=p||this._tag_stack.try_pop(\"dd\",[\"dl\"]);else if(f.parent.tag_name===\"p\"&&G.indexOf(f.tag_name)!==-1){var b=f.parent.parent;(!b||J.indexOf(b.tag_name)===-1)&&(p=p||this._tag_stack.try_pop(\"p\"))}else f.tag_name===\"rp\"||f.tag_name===\"rt\"?(p=p||this._tag_stack.try_pop(\"rt\",[\"ruby\",\"rtc\"]),p=p||this._tag_stack.try_pop(\"rp\",[\"ruby\",\"rtc\"])):f.tag_name===\"optgroup\"?p=p||this._tag_stack.try_pop(\"optgroup\",[\"select\"]):f.tag_name===\"option\"?p=p||this._tag_stack.try_pop(\"option\",[\"select\",\"datalist\",\"optgroup\"]):f.tag_name===\"colgroup\"?p=p||this._tag_stack.try_pop(\"caption\",[\"table\"]):f.tag_name===\"thead\"?(p=p||this._tag_stack.try_pop(\"caption\",[\"table\"]),p=p||this._tag_stack.try_pop(\"colgroup\",[\"table\"])):f.tag_name===\"tbody\"||f.tag_name===\"tfoot\"?(p=p||this._tag_stack.try_pop(\"caption\",[\"table\"]),p=p||this._tag_stack.try_pop(\"colgroup\",[\"table\"]),p=p||this._tag_stack.try_pop(\"thead\",[\"table\"]),p=p||this._tag_stack.try_pop(\"tbody\",[\"table\"])):f.tag_name===\"tr\"?(p=p||this._tag_stack.try_pop(\"caption\",[\"table\"]),p=p||this._tag_stack.try_pop(\"colgroup\",[\"table\"]),p=p||this._tag_stack.try_pop(\"tr\",[\"table\",\"thead\",\"tbody\",\"tfoot\"])):(f.tag_name===\"th\"||f.tag_name===\"td\")&&(p=p||this._tag_stack.try_pop(\"td\",[\"table\",\"thead\",\"tbody\",\"tfoot\",\"tr\"]),p=p||this._tag_stack.try_pop(\"th\",[\"table\",\"thead\",\"tbody\",\"tfoot\",\"tr\"]));return f.parent=this._tag_stack.get_parser_token(),p}},e.exports.Beautifier=M},function(e,a,c){var l=c(6).Options;function r(s){l.call(this,s,\"html\"),this.templating.length===1&&this.templating[0]===\"auto\"&&(this.templating=[\"django\",\"erb\",\"handlebars\",\"php\"]),this.indent_inner_html=this._get_boolean(\"indent_inner_html\"),this.indent_body_inner_html=this._get_boolean(\"indent_body_inner_html\",!0),this.indent_head_inner_html=this._get_boolean(\"indent_head_inner_html\",!0),this.indent_handlebars=this._get_boolean(\"indent_handlebars\",!0),this.wrap_attributes=this._get_selection(\"wrap_attributes\",[\"auto\",\"force\",\"force-aligned\",\"force-expand-multiline\",\"aligned-multiple\",\"preserve\",\"preserve-aligned\"]),this.wrap_attributes_indent_size=this._get_number(\"wrap_attributes_indent_size\",this.indent_size),this.extra_liners=this._get_array(\"extra_liners\",[\"head\",\"body\",\"/html\"]),this.inline=this._get_array(\"inline\",[\"a\",\"abbr\",\"area\",\"audio\",\"b\",\"bdi\",\"bdo\",\"br\",\"button\",\"canvas\",\"cite\",\"code\",\"data\",\"datalist\",\"del\",\"dfn\",\"em\",\"embed\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"map\",\"mark\",\"math\",\"meter\",\"noscript\",\"object\",\"output\",\"progress\",\"q\",\"ruby\",\"s\",\"samp\",\"select\",\"small\",\"span\",\"strong\",\"sub\",\"sup\",\"svg\",\"template\",\"textarea\",\"time\",\"u\",\"var\",\"video\",\"wbr\",\"text\",\"acronym\",\"big\",\"strike\",\"tt\"]),this.void_elements=this._get_array(\"void_elements\",[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"menuitem\",\"meta\",\"param\",\"source\",\"track\",\"wbr\",\"!doctype\",\"?xml\",\"basefont\",\"isindex\"]),this.unformatted=this._get_array(\"unformatted\",[]),this.content_unformatted=this._get_array(\"content_unformatted\",[\"pre\",\"textarea\"]),this.unformatted_content_delimiter=this._get_characters(\"unformatted_content_delimiter\"),this.indent_scripts=this._get_selection(\"indent_scripts\",[\"normal\",\"keep\",\"separate\"])}r.prototype=new l,e.exports.Options=r},function(e,a,c){var l=c(9).Tokenizer,r=c(9).TOKEN,s=c(13).Directives,u=c(14).TemplatablePattern,h=c(12).Pattern,d={TAG_OPEN:\"TK_TAG_OPEN\",TAG_CLOSE:\"TK_TAG_CLOSE\",ATTRIBUTE:\"TK_ATTRIBUTE\",EQUALS:\"TK_EQUALS\",VALUE:\"TK_VALUE\",COMMENT:\"TK_COMMENT\",TEXT:\"TK_TEXT\",UNKNOWN:\"TK_UNKNOWN\",START:r.START,RAW:r.RAW,EOF:r.EOF},g=new s(/<\\!--/,/-->/),y=function(m,A){l.call(this,m,A),this._current_tag_name=\"\";var E=new u(this._input).read_options(this._options),w=new h(this._input);if(this.__patterns={word:E.until(/[\\n\\r\\t <]/),single_quote:E.until_after(/'/),double_quote:E.until_after(/\"/),attribute:E.until(/[\\n\\r\\t =>]|\\/>/),element_name:E.until(/[\\n\\r\\t >\\/]/),handlebars_comment:w.starting_with(/{{!--/).until_after(/--}}/),handlebars:w.starting_with(/{{/).until_after(/}}/),handlebars_open:w.until(/[\\n\\r\\t }]/),handlebars_raw_close:w.until(/}}/),comment:w.starting_with(/<!--/).until_after(/-->/),cdata:w.starting_with(/<!\\[CDATA\\[/).until_after(/]]>/),conditional_comment:w.starting_with(/<!\\[/).until_after(/]>/),processing:w.starting_with(/<\\?/).until_after(/\\?>/)},this._options.indent_handlebars&&(this.__patterns.word=this.__patterns.word.exclude(\"handlebars\")),this._unformatted_content_delimiter=null,this._options.unformatted_content_delimiter){var M=this._input.get_literal_regexp(this._options.unformatted_content_delimiter);this.__patterns.unformatted_content_delimiter=w.matching(M).until_after(M)}};y.prototype=new l,y.prototype._is_comment=function(m){return!1},y.prototype._is_opening=function(m){return m.type===d.TAG_OPEN},y.prototype._is_closing=function(m,A){return m.type===d.TAG_CLOSE&&A&&((m.text===\">\"||m.text===\"/>\")&&A.text[0]===\"<\"||m.text===\"}}\"&&A.text[0]===\"{\"&&A.text[1]===\"{\")},y.prototype._reset=function(){this._current_tag_name=\"\"},y.prototype._get_next_token=function(m,A){var E=null;this._readWhitespace();var w=this._input.peek();return w===null?this._create_token(d.EOF,\"\"):(E=E||this._read_open_handlebars(w,A),E=E||this._read_attribute(w,m,A),E=E||this._read_close(w,A),E=E||this._read_raw_content(w,m,A),E=E||this._read_content_word(w),E=E||this._read_comment_or_cdata(w),E=E||this._read_processing(w),E=E||this._read_open(w,A),E=E||this._create_token(d.UNKNOWN,this._input.next()),E)},y.prototype._read_comment_or_cdata=function(m){var A=null,E=null,w=null;if(m===\"<\"){var M=this._input.peek(1);M===\"!\"&&(E=this.__patterns.comment.read(),E?(w=g.get_directives(E),w&&w.ignore===\"start\"&&(E+=g.readIgnored(this._input))):E=this.__patterns.cdata.read()),E&&(A=this._create_token(d.COMMENT,E),A.directives=w)}return A},y.prototype._read_processing=function(m){var A=null,E=null,w=null;if(m===\"<\"){var M=this._input.peek(1);(M===\"!\"||M===\"?\")&&(E=this.__patterns.conditional_comment.read(),E=E||this.__patterns.processing.read()),E&&(A=this._create_token(d.COMMENT,E),A.directives=w)}return A},y.prototype._read_open=function(m,A){var E=null,w=null;return A||m===\"<\"&&(E=this._input.next(),this._input.peek()===\"/\"&&(E+=this._input.next()),E+=this.__patterns.element_name.read(),w=this._create_token(d.TAG_OPEN,E)),w},y.prototype._read_open_handlebars=function(m,A){var E=null,w=null;return A||this._options.indent_handlebars&&m===\"{\"&&this._input.peek(1)===\"{\"&&(this._input.peek(2)===\"!\"?(E=this.__patterns.handlebars_comment.read(),E=E||this.__patterns.handlebars.read(),w=this._create_token(d.COMMENT,E)):(E=this.__patterns.handlebars_open.read(),w=this._create_token(d.TAG_OPEN,E))),w},y.prototype._read_close=function(m,A){var E=null,w=null;return A&&(A.text[0]===\"<\"&&(m===\">\"||m===\"/\"&&this._input.peek(1)===\">\")?(E=this._input.next(),m===\"/\"&&(E+=this._input.next()),w=this._create_token(d.TAG_CLOSE,E)):A.text[0]===\"{\"&&m===\"}\"&&this._input.peek(1)===\"}\"&&(this._input.next(),this._input.next(),w=this._create_token(d.TAG_CLOSE,\"}}\"))),w},y.prototype._read_attribute=function(m,A,E){var w=null,M=\"\";if(E&&E.text[0]===\"<\")if(m===\"=\")w=this._create_token(d.EQUALS,this._input.next());else if(m==='\"'||m===\"'\"){var B=this._input.next();m==='\"'?B+=this.__patterns.double_quote.read():B+=this.__patterns.single_quote.read(),w=this._create_token(d.VALUE,B)}else M=this.__patterns.attribute.read(),M&&(A.type===d.EQUALS?w=this._create_token(d.VALUE,M):w=this._create_token(d.ATTRIBUTE,M));return w},y.prototype._is_content_unformatted=function(m){return this._options.void_elements.indexOf(m)===-1&&(this._options.content_unformatted.indexOf(m)!==-1||this._options.unformatted.indexOf(m)!==-1)},y.prototype._read_raw_content=function(m,A,E){var w=\"\";if(E&&E.text[0]===\"{\")w=this.__patterns.handlebars_raw_close.read();else if(A.type===d.TAG_CLOSE&&A.opened.text[0]===\"<\"&&A.text[0]!==\"/\"){var M=A.opened.text.substr(1).toLowerCase();if(M===\"script\"||M===\"style\"){var B=this._read_comment_or_cdata(m);if(B)return B.type=d.TEXT,B;w=this._input.readUntil(new RegExp(\"</\"+M+\"[\\\\n\\\\r\\\\t ]*?>\",\"ig\"))}else this._is_content_unformatted(M)&&(w=this._input.readUntil(new RegExp(\"</\"+M+\"[\\\\n\\\\r\\\\t ]*?>\",\"ig\")))}return w?this._create_token(d.TEXT,w):null},y.prototype._read_content_word=function(m){var A=\"\";if(this._options.unformatted_content_delimiter&&m===this._options.unformatted_content_delimiter[0]&&(A=this.__patterns.unformatted_content_delimiter.read()),A||(A=this.__patterns.word.read()),A)return this._create_token(d.TEXT,A)},e.exports.Tokenizer=y,e.exports.TOKEN=d}],i={};function o(e){var a=i[e];if(a!==void 0)return a.exports;var c=i[e]={exports:{}};return t[e](c,c.exports,o),c.exports}var n=o(18);nn=n})();function rn(t,i){return nn(t,i,Kt,tn)}function sn(t,i,o){var n=t.getText(),e=!0,a=0,c=o.tabSize||4;if(i){for(var l=t.offsetAt(i.start),r=l;r>0&&on(n,r-1);)r--;r===0||an(n,r-1)?l=r:r<l&&(l=r+1);for(var s=t.offsetAt(i.end),u=s;u<n.length&&on(n,u);)u++;(u===n.length||an(n,u))&&(s=u),i=P.create(t.positionAt(l),t.positionAt(s));var h=n.substring(0,l);if(new RegExp(/.*[<][^>]*$/).test(h))return n=n.substring(l,s),[{range:i,newText:n}];if(e=s===n.length,n=n.substring(l,s),l!==0){var d=t.offsetAt(X.create(i.start.line,0));a=wi(t.getText(),d,o)}}else i=P.create(X.create(0,0),t.positionAt(n.length));var g={indent_size:c,indent_char:o.insertSpaces?\" \":\"\t\",indent_empty_lines:ie(o,\"indentEmptyLines\",!1),wrap_line_length:ie(o,\"wrapLineLength\",120),unformatted:mt(o,\"unformatted\",void 0),content_unformatted:mt(o,\"contentUnformatted\",void 0),indent_inner_html:ie(o,\"indentInnerHtml\",!1),preserve_newlines:ie(o,\"preserveNewLines\",!0),max_preserve_newlines:ie(o,\"maxPreserveNewLines\",32786),indent_handlebars:ie(o,\"indentHandlebars\",!1),end_with_newline:e&&ie(o,\"endWithNewline\",!1),extra_liners:mt(o,\"extraLiners\",void 0),wrap_attributes:ie(o,\"wrapAttributes\",\"auto\"),wrap_attributes_indent_size:ie(o,\"wrapAttributesIndentSize\",void 0),eol:`\n`,indent_scripts:ie(o,\"indentScripts\",\"normal\"),templating:vi(o,\"all\"),unformatted_content_delimiter:ie(o,\"unformattedContentDelimiter\",\"\")},y=rn(bi(n),g);if(a>0){var m=o.insertSpaces?pt(\" \",c*a):pt(\"\t\",a);y=y.split(`\n`).join(`\n`+m),i.start.character===0&&(y=m+y)}return[{range:i,newText:y}]}function bi(t){return t.replace(/^\\s+/,\"\")}function ie(t,i,o){if(t&&t.hasOwnProperty(i)){var n=t[i];if(n!==null)return n}return o}function mt(t,i,o){var n=ie(t,i,null);return typeof n==\"string\"?n.length>0?n.split(\",\").map(function(e){return e.trim().toLowerCase()}):[]:o}function vi(t,i){var o=ie(t,\"templating\",i);return o===!0?[\"auto\"]:[\"none\"]}function wi(t,i,o){for(var n=i,e=0,a=o.tabSize||4;n<t.length;){var c=t.charAt(n);if(c===\" \")e++;else if(c===\"\t\")e+=a;else break;n++}return Math.floor(e/a)}function an(t,i){return`\\r\n`.indexOf(t.charAt(i))!==-1}function on(t,i){return\" \t\".indexOf(t.charAt(i))!==-1}var ln;ln=(()=>{\"use strict\";var t={470:n=>{function e(l){if(typeof l!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(l))}function a(l,r){for(var s,u=\"\",h=0,d=-1,g=0,y=0;y<=l.length;++y){if(y<l.length)s=l.charCodeAt(y);else{if(s===47)break;s=47}if(s===47){if(!(d===y-1||g===1))if(d!==y-1&&g===2){if(u.length<2||h!==2||u.charCodeAt(u.length-1)!==46||u.charCodeAt(u.length-2)!==46){if(u.length>2){var m=u.lastIndexOf(\"/\");if(m!==u.length-1){m===-1?(u=\"\",h=0):h=(u=u.slice(0,m)).length-1-u.lastIndexOf(\"/\"),d=y,g=0;continue}}else if(u.length===2||u.length===1){u=\"\",h=0,d=y,g=0;continue}}r&&(u.length>0?u+=\"/..\":u=\"..\",h=2)}else u.length>0?u+=\"/\"+l.slice(d+1,y):u=l.slice(d+1,y),h=y-d-1;d=y,g=0}else s===46&&g!==-1?++g:g=-1}return u}var c={resolve:function(){for(var l,r=\"\",s=!1,u=arguments.length-1;u>=-1&&!s;u--){var h;u>=0?h=arguments[u]:(l===void 0&&(l=process.cwd()),h=l),e(h),h.length!==0&&(r=h+\"/\"+r,s=h.charCodeAt(0)===47)}return r=a(r,!s),s?r.length>0?\"/\"+r:\"/\":r.length>0?r:\".\"},normalize:function(l){if(e(l),l.length===0)return\".\";var r=l.charCodeAt(0)===47,s=l.charCodeAt(l.length-1)===47;return(l=a(l,!r)).length!==0||r||(l=\".\"),l.length>0&&s&&(l+=\"/\"),r?\"/\"+l:l},isAbsolute:function(l){return e(l),l.length>0&&l.charCodeAt(0)===47},join:function(){if(arguments.length===0)return\".\";for(var l,r=0;r<arguments.length;++r){var s=arguments[r];e(s),s.length>0&&(l===void 0?l=s:l+=\"/\"+s)}return l===void 0?\".\":c.normalize(l)},relative:function(l,r){if(e(l),e(r),l===r||(l=c.resolve(l))===(r=c.resolve(r)))return\"\";for(var s=1;s<l.length&&l.charCodeAt(s)===47;++s);for(var u=l.length,h=u-s,d=1;d<r.length&&r.charCodeAt(d)===47;++d);for(var g=r.length-d,y=h<g?h:g,m=-1,A=0;A<=y;++A){if(A===y){if(g>y){if(r.charCodeAt(d+A)===47)return r.slice(d+A+1);if(A===0)return r.slice(d+A)}else h>y&&(l.charCodeAt(s+A)===47?m=A:A===0&&(m=0));break}var E=l.charCodeAt(s+A);if(E!==r.charCodeAt(d+A))break;E===47&&(m=A)}var w=\"\";for(A=s+m+1;A<=u;++A)A!==u&&l.charCodeAt(A)!==47||(w.length===0?w+=\"..\":w+=\"/..\");return w.length>0?w+r.slice(d+m):(d+=m,r.charCodeAt(d)===47&&++d,r.slice(d))},_makeLong:function(l){return l},dirname:function(l){if(e(l),l.length===0)return\".\";for(var r=l.charCodeAt(0),s=r===47,u=-1,h=!0,d=l.length-1;d>=1;--d)if((r=l.charCodeAt(d))===47){if(!h){u=d;break}}else h=!1;return u===-1?s?\"/\":\".\":s&&u===1?\"//\":l.slice(0,u)},basename:function(l,r){if(r!==void 0&&typeof r!=\"string\")throw new TypeError('\"ext\" argument must be a string');e(l);var s,u=0,h=-1,d=!0;if(r!==void 0&&r.length>0&&r.length<=l.length){if(r.length===l.length&&r===l)return\"\";var g=r.length-1,y=-1;for(s=l.length-1;s>=0;--s){var m=l.charCodeAt(s);if(m===47){if(!d){u=s+1;break}}else y===-1&&(d=!1,y=s+1),g>=0&&(m===r.charCodeAt(g)?--g==-1&&(h=s):(g=-1,h=y))}return u===h?h=y:h===-1&&(h=l.length),l.slice(u,h)}for(s=l.length-1;s>=0;--s)if(l.charCodeAt(s)===47){if(!d){u=s+1;break}}else h===-1&&(d=!1,h=s+1);return h===-1?\"\":l.slice(u,h)},extname:function(l){e(l);for(var r=-1,s=0,u=-1,h=!0,d=0,g=l.length-1;g>=0;--g){var y=l.charCodeAt(g);if(y!==47)u===-1&&(h=!1,u=g+1),y===46?r===-1?r=g:d!==1&&(d=1):r!==-1&&(d=-1);else if(!h){s=g+1;break}}return r===-1||u===-1||d===0||d===1&&r===u-1&&r===s+1?\"\":l.slice(r,u)},format:function(l){if(l===null||typeof l!=\"object\")throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof l);return function(r,s){var u=s.dir||s.root,h=s.base||(s.name||\"\")+(s.ext||\"\");return u?u===s.root?u+h:u+\"/\"+h:h}(0,l)},parse:function(l){e(l);var r={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(l.length===0)return r;var s,u=l.charCodeAt(0),h=u===47;h?(r.root=\"/\",s=1):s=0;for(var d=-1,g=0,y=-1,m=!0,A=l.length-1,E=0;A>=s;--A)if((u=l.charCodeAt(A))!==47)y===-1&&(m=!1,y=A+1),u===46?d===-1?d=A:E!==1&&(E=1):d!==-1&&(E=-1);else if(!m){g=A+1;break}return d===-1||y===-1||E===0||E===1&&d===y-1&&d===g+1?y!==-1&&(r.base=r.name=g===0&&h?l.slice(1,y):l.slice(g,y)):(g===0&&h?(r.name=l.slice(1,d),r.base=l.slice(1,y)):(r.name=l.slice(g,d),r.base=l.slice(g,y)),r.ext=l.slice(d,y)),g>0?r.dir=l.slice(0,g-1):h&&(r.dir=\"/\"),r},sep:\"/\",delimiter:\":\",win32:null,posix:null};c.posix=c,n.exports=c},447:(n,e,a)=>{var c;if(a.r(e),a.d(e,{URI:()=>w,Utils:()=>H}),typeof process==\"object\")c=process.platform===\"win32\";else if(typeof navigator==\"object\"){var l=navigator.userAgent;c=l.indexOf(\"Windows\")>=0}var r,s,u=(r=function(T,v){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(k,C){k.__proto__=C}||function(k,C){for(var x in C)Object.prototype.hasOwnProperty.call(C,x)&&(k[x]=C[x])})(T,v)},function(T,v){if(typeof v!=\"function\"&&v!==null)throw new TypeError(\"Class extends value \"+String(v)+\" is not a constructor or null\");function k(){this.constructor=T}r(T,v),T.prototype=v===null?Object.create(v):(k.prototype=v.prototype,new k)}),h=/^\\w[\\w\\d+.-]*$/,d=/^\\//,g=/^\\/\\//;function y(T,v){if(!T.scheme&&v)throw new Error('[UriError]: Scheme is missing: {scheme: \"\", authority: \"'.concat(T.authority,'\", path: \"').concat(T.path,'\", query: \"').concat(T.query,'\", fragment: \"').concat(T.fragment,'\"}'));if(T.scheme&&!h.test(T.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(T.path){if(T.authority){if(!d.test(T.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(g.test(T.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}}var m=\"\",A=\"/\",E=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/,w=function(){function T(v,k,C,x,D,L){L===void 0&&(L=!1),typeof v==\"object\"?(this.scheme=v.scheme||m,this.authority=v.authority||m,this.path=v.path||m,this.query=v.query||m,this.fragment=v.fragment||m):(this.scheme=function(q,j){return q||j?q:\"file\"}(v,L),this.authority=k||m,this.path=function(q,j){switch(q){case\"https\":case\"http\":case\"file\":j?j[0]!==A&&(j=A+j):j=A}return j}(this.scheme,C||m),this.query=x||m,this.fragment=D||m,y(this,L))}return T.isUri=function(v){return v instanceof T||!!v&&typeof v.authority==\"string\"&&typeof v.fragment==\"string\"&&typeof v.path==\"string\"&&typeof v.query==\"string\"&&typeof v.scheme==\"string\"&&typeof v.fsPath==\"string\"&&typeof v.with==\"function\"&&typeof v.toString==\"function\"},Object.defineProperty(T.prototype,\"fsPath\",{get:function(){return p(this,!1)},enumerable:!1,configurable:!0}),T.prototype.with=function(v){if(!v)return this;var k=v.scheme,C=v.authority,x=v.path,D=v.query,L=v.fragment;return k===void 0?k=this.scheme:k===null&&(k=m),C===void 0?C=this.authority:C===null&&(C=m),x===void 0?x=this.path:x===null&&(x=m),D===void 0?D=this.query:D===null&&(D=m),L===void 0?L=this.fragment:L===null&&(L=m),k===this.scheme&&C===this.authority&&x===this.path&&D===this.query&&L===this.fragment?this:new B(k,C,x,D,L)},T.parse=function(v,k){k===void 0&&(k=!1);var C=E.exec(v);return C?new B(C[2]||m,U(C[4]||m),U(C[5]||m),U(C[7]||m),U(C[9]||m),k):new B(m,m,m,m,m)},T.file=function(v){var k=m;if(c&&(v=v.replace(/\\\\/g,A)),v[0]===A&&v[1]===A){var C=v.indexOf(A,2);C===-1?(k=v.substring(2),v=A):(k=v.substring(2,C),v=v.substring(C)||A)}return new B(\"file\",k,v,m,m)},T.from=function(v){var k=new B(v.scheme,v.authority,v.path,v.query,v.fragment);return y(k,!0),k},T.prototype.toString=function(v){return v===void 0&&(v=!1),b(this,v)},T.prototype.toJSON=function(){return this},T.revive=function(v){if(v){if(v instanceof T)return v;var k=new B(v);return k._formatted=v.external,k._fsPath=v._sep===M?v.fsPath:null,k}return v},T}(),M=c?1:void 0,B=function(T){function v(){var k=T!==null&&T.apply(this,arguments)||this;return k._formatted=null,k._fsPath=null,k}return u(v,T),Object.defineProperty(v.prototype,\"fsPath\",{get:function(){return this._fsPath||(this._fsPath=p(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),v.prototype.toString=function(k){return k===void 0&&(k=!1),k?b(this,!0):(this._formatted||(this._formatted=b(this,!1)),this._formatted)},v.prototype.toJSON=function(){var k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=M),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k},v}(w),G=((s={})[58]=\"%3A\",s[47]=\"%2F\",s[63]=\"%3F\",s[35]=\"%23\",s[91]=\"%5B\",s[93]=\"%5D\",s[64]=\"%40\",s[33]=\"%21\",s[36]=\"%24\",s[38]=\"%26\",s[39]=\"%27\",s[40]=\"%28\",s[41]=\"%29\",s[42]=\"%2A\",s[43]=\"%2B\",s[44]=\"%2C\",s[59]=\"%3B\",s[61]=\"%3D\",s[32]=\"%20\",s);function J(T,v){for(var k=void 0,C=-1,x=0;x<T.length;x++){var D=T.charCodeAt(x);if(D>=97&&D<=122||D>=65&&D<=90||D>=48&&D<=57||D===45||D===46||D===95||D===126||v&&D===47)C!==-1&&(k+=encodeURIComponent(T.substring(C,x)),C=-1),k!==void 0&&(k+=T.charAt(x));else{k===void 0&&(k=T.substr(0,x));var L=G[D];L!==void 0?(C!==-1&&(k+=encodeURIComponent(T.substring(C,x)),C=-1),k+=L):C===-1&&(C=x)}}return C!==-1&&(k+=encodeURIComponent(T.substring(C))),k!==void 0?k:T}function f(T){for(var v=void 0,k=0;k<T.length;k++){var C=T.charCodeAt(k);C===35||C===63?(v===void 0&&(v=T.substr(0,k)),v+=G[C]):v!==void 0&&(v+=T[k])}return v!==void 0?v:T}function p(T,v){var k;return k=T.authority&&T.path.length>1&&T.scheme===\"file\"?\"//\".concat(T.authority).concat(T.path):T.path.charCodeAt(0)===47&&(T.path.charCodeAt(1)>=65&&T.path.charCodeAt(1)<=90||T.path.charCodeAt(1)>=97&&T.path.charCodeAt(1)<=122)&&T.path.charCodeAt(2)===58?v?T.path.substr(1):T.path[1].toLowerCase()+T.path.substr(2):T.path,c&&(k=k.replace(/\\//g,\"\\\\\")),k}function b(T,v){var k=v?f:J,C=\"\",x=T.scheme,D=T.authority,L=T.path,q=T.query,j=T.fragment;if(x&&(C+=x,C+=\":\"),(D||x===\"file\")&&(C+=A,C+=A),D){var O=D.indexOf(\"@\");if(O!==-1){var V=D.substr(0,O);D=D.substr(O+1),(O=V.indexOf(\":\"))===-1?C+=k(V,!1):(C+=k(V.substr(0,O),!1),C+=\":\",C+=k(V.substr(O+1),!1)),C+=\"@\"}(O=(D=D.toLowerCase()).indexOf(\":\"))===-1?C+=k(D,!1):(C+=k(D.substr(0,O),!1),C+=D.substr(O))}if(L){if(L.length>=3&&L.charCodeAt(0)===47&&L.charCodeAt(2)===58)(K=L.charCodeAt(1))>=65&&K<=90&&(L=\"/\".concat(String.fromCharCode(K+32),\":\").concat(L.substr(3)));else if(L.length>=2&&L.charCodeAt(1)===58){var K;(K=L.charCodeAt(0))>=65&&K<=90&&(L=\"\".concat(String.fromCharCode(K+32),\":\").concat(L.substr(2)))}C+=k(L,!0)}return q&&(C+=\"?\",C+=k(q,!1)),j&&(C+=\"#\",C+=v?j:J(j,!1)),C}function N(T){try{return decodeURIComponent(T)}catch{return T.length>3?T.substr(0,3)+N(T.substr(3)):T}}var R=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function U(T){return T.match(R)?T.replace(R,function(v){return N(v)}):T}var H,z=a(470),I=function(T,v,k){if(k||arguments.length===2)for(var C,x=0,D=v.length;x<D;x++)!C&&x in v||(C||(C=Array.prototype.slice.call(v,0,x)),C[x]=v[x]);return T.concat(C||Array.prototype.slice.call(v))},F=z.posix||z;(function(T){T.joinPath=function(v){for(var k=[],C=1;C<arguments.length;C++)k[C-1]=arguments[C];return v.with({path:F.join.apply(F,I([v.path],k,!1))})},T.resolvePath=function(v){for(var k=[],C=1;C<arguments.length;C++)k[C-1]=arguments[C];var x=v.path||\"/\";return v.with({path:F.resolve.apply(F,I([x],k,!1))})},T.dirname=function(v){var k=F.dirname(v.path);return k.length===1&&k.charCodeAt(0)===46?v:v.with({path:k})},T.basename=function(v){return F.basename(v.path)},T.extname=function(v){return F.extname(v.path)}})(H||(H={}))}},i={};function o(n){if(i[n])return i[n].exports;var e=i[n]={exports:{}};return t[n](e,e.exports,o),e.exports}return o.d=(n,e)=>{for(var a in e)o.o(e,a)&&!o.o(n,a)&&Object.defineProperty(n,a,{enumerable:!0,get:e[a]})},o.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),o.r=n=>{typeof Symbol<\"u\"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(n,\"__esModule\",{value:!0})},o(447)})();var{URI:un,Utils:Dr}=ln;function ft(t){var i=t[0],o=t[t.length-1];return i===o&&(i===\"'\"||i==='\"')&&(t=t.substr(1,t.length-2)),t}function _i(t,i){return!t.length||i===\"handlebars\"&&/{{|}}/.test(t)?!1:/\\b(w[\\w\\d+.-]*:\\/\\/)?[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|\\/?))/.test(t)}function yi(t,i,o,n){if(!(/^\\s*javascript\\:/i.test(i)||/[\\n\\r]/.test(i))){if(i=i.replace(/^\\s*/g,\"\"),/^https?:\\/\\//i.test(i)||/^file:\\/\\//i.test(i))return i;if(/^\\#/i.test(i))return t+i;if(/^\\/\\//i.test(i)){var e=ae(t,\"https://\")?\"https\":\"http\";return e+\":\"+i.replace(/^\\s*/g,\"\")}return o?o.resolveReference(i,n||t):i}}function Ti(t,i,o,n,e,a){var c=ft(o);if(_i(c,t.languageId)){c.length<o.length&&(n++,e--);var l=yi(t.uri,c,i,a);if(!(!l||!ki(l)))return{range:P.create(t.positionAt(n),t.positionAt(e)),target:l}}}function ki(t){try{return un.parse(t),!0}catch{return!1}}function cn(t,i){for(var o=[],n=$(t.getText(),0),e=n.scan(),a=void 0,c=!1,l=void 0,r={};e!==S.EOS;){switch(e){case S.StartTag:if(!l){var s=n.getTokenText().toLowerCase();c=s===\"base\"}break;case S.AttributeName:a=n.getTokenText().toLowerCase();break;case S.AttributeValue:if(a===\"src\"||a===\"href\"){var u=n.getTokenText();if(!c){var h=Ti(t,i,u,n.getTokenOffset(),n.getTokenEnd(),l);h&&o.push(h)}c&&typeof l>\"u\"&&(l=ft(u),l&&i&&(l=i.resolveReference(l,t.uri))),c=!1,a=void 0}else if(a===\"id\"){var d=ft(n.getTokenText());r[d]=n.getTokenOffset()}break}e=n.scan()}for(var g=0,y=o;g<y.length;g++){var h=y[g],m=t.uri+\"#\";if(h.target&&ae(h.target,m)){var A=h.target.substr(m.length),E=r[A];if(E!==void 0){var w=t.positionAt(E);h.target=\"\".concat(m).concat(w.line+1,\",\").concat(w.character+1)}}}return o}function mn(t,i,o){var n=t.offsetAt(i),e=o.findNodeAt(n);if(!e.tag)return[];var a=[],c=pn(S.StartTag,t,e.start),l=typeof e.endTagStart==\"number\"&&pn(S.EndTag,t,e.endTagStart);return(c&&dn(c,i)||l&&dn(l,i))&&(c&&a.push({kind:ye.Read,range:c}),l&&a.push({kind:ye.Read,range:l})),a}function hn(t,i){return t.line<i.line||t.line===i.line&&t.character<=i.character}function dn(t,i){return hn(t.start,i)&&hn(i,t.end)}function pn(t,i,o){for(var n=$(i.getText(),o),e=n.scan();e!==S.EOS&&e!==t;)e=n.scan();return e!==S.EOS?{start:i.positionAt(n.getTokenOffset()),end:i.positionAt(n.getTokenEnd())}:null}function fn(t,i){var o=[];return i.roots.forEach(function(n){gn(t,n,\"\",o)}),o}function gn(t,i,o,n){var e=Si(i),a=ve.create(t.uri,P.create(t.positionAt(i.start),t.positionAt(i.end))),c={name:e,location:a,containerName:o,kind:Le.Field};n.push(c),i.children.forEach(function(l){gn(t,l,e,n)})}function Si(t){var i=t.tag;if(t.attributes){var o=t.attributes.id,n=t.attributes.class;o&&(i+=\"#\".concat(o.replace(/[\\\"\\']/g,\"\"))),n&&(i+=n.replace(/[\\\"\\']/g,\"\").split(/\\s+/).map(function(e){return\".\".concat(e)}).join(\"\"))}return i||\"?\"}function bn(t,i,o,n){var e,a=t.offsetAt(i),c=n.findNodeAt(a);if(!c.tag||!Ai(c,a,c.tag))return null;var l=[],r={start:t.positionAt(c.start+1),end:t.positionAt(c.start+1+c.tag.length)};if(l.push({range:r,newText:o}),c.endTagStart){var s={start:t.positionAt(c.endTagStart+2),end:t.positionAt(c.endTagStart+2+c.tag.length)};l.push({range:s,newText:o})}var u=(e={},e[t.uri.toString()]=l,e);return{changes:u}}function Ai(t,i,o){return t.endTagStart&&t.endTagStart+2<=i&&i<=t.endTagStart+2+o.length?!0:t.start+1<=i&&i<=t.start+1+o.length}function vn(t,i,o){var n=t.offsetAt(i),e=o.findNodeAt(n);if(!e.tag||!e.endTagStart)return null;if(e.start+1<=n&&n<=e.start+1+e.tag.length){var a=n-1-e.start+e.endTagStart+2;return t.positionAt(a)}if(e.endTagStart+2<=n&&n<=e.endTagStart+2+e.tag.length){var a=n-2-e.endTagStart+e.start+1;return t.positionAt(a)}return null}function gt(t,i,o){var n=t.offsetAt(i),e=o.findNodeAt(n),a=e.tag?e.tag.length:0;return e.endTagStart&&(e.start+1<=n&&n<=e.start+1+a||e.endTagStart+2<=n&&n<=e.endTagStart+2+a)?[P.create(t.positionAt(e.start+1),t.positionAt(e.start+1+a)),P.create(t.positionAt(e.endTagStart+2),t.positionAt(e.endTagStart+2+a))]:null}function xi(t,i){t=t.sort(function(y,m){var A=y.startLine-m.startLine;return A===0&&(A=y.endLine-m.endLine),A});for(var o=void 0,n=[],e=[],a=[],c=function(y,m){e[y]=m,m<30&&(a[m]=(a[m]||0)+1)},l=0;l<t.length;l++){var r=t[l];if(!o)o=r,c(l,0);else if(r.startLine>o.startLine){if(r.endLine<=o.endLine)n.push(o),o=r,c(l,n.length);else if(r.startLine>o.endLine){do o=n.pop();while(o&&r.startLine>o.endLine);o&&n.push(o),o=r,c(l,n.length)}}}for(var s=0,u=0,l=0;l<a.length;l++){var h=a[l];if(h){if(h+s>i){u=l;break}s+=h}}for(var d=[],l=0;l<t.length;l++){var g=e[l];typeof g==\"number\"&&(g<u||g===u&&s++<i)&&d.push(t[l])}return d}function wn(t,i){var o=$(t.getText()),n=o.scan(),e=[],a=[],c=null,l=-1;function r(w){e.push(w),l=w.startLine}for(;n!==S.EOS;){switch(n){case S.StartTag:{var s=o.getTokenText(),u=t.positionAt(o.getTokenOffset()).line;a.push({startLine:u,tagName:s}),c=s;break}case S.EndTag:{c=o.getTokenText();break}case S.StartTagClose:if(!c||!pe(c))break;case S.EndTagClose:case S.StartTagSelfClose:{for(var h=a.length-1;h>=0&&a[h].tagName!==c;)h--;if(h>=0){var d=a[h];a.length=h;var g=t.positionAt(o.getTokenOffset()).line,u=d.startLine,y=g-1;y>u&&l!==u&&r({startLine:u,endLine:y})}break}case S.Comment:{var u=t.positionAt(o.getTokenOffset()).line,m=o.getTokenText(),A=m.match(/^\\s*#(region\\b)|(endregion\\b)/);if(A)if(A[1])a.push({startLine:u,tagName:\"\"});else{for(var h=a.length-1;h>=0&&a[h].tagName.length;)h--;if(h>=0){var d=a[h];a.length=h;var y=u;u=d.startLine,y>u&&l!==u&&r({startLine:u,endLine:y,kind:we.Region})}}else{var y=t.positionAt(o.getTokenOffset()+o.getTokenLength()).line;u<y&&r({startLine:u,endLine:y,kind:we.Comment})}break}}n=o.scan()}var E=i&&i.rangeLimit||Number.MAX_VALUE;return e.length>E?xi(e,E):e}function yn(t,i){function o(n){for(var e=Di(t,n),a=void 0,c=void 0,l=e.length-1;l>=0;l--){var r=e[l];(!a||r[0]!==a[0]||r[1]!==a[1])&&(c=Te.create(P.create(t.positionAt(e[l][0]),t.positionAt(e[l][1])),c)),a=r}return c||(c=Te.create(P.create(n,n))),c}return i.map(o)}function Di(t,i){var o=je(t.getText()),n=t.offsetAt(i),e=o.findNodeAt(n),a=Ei(e);if(e.startTagEnd&&!e.endTagStart){if(e.startTagEnd!==e.end)return[[e.start,e.end]];var c=P.create(t.positionAt(e.startTagEnd-2),t.positionAt(e.startTagEnd)),l=t.getText(c);l===\"/>\"?a.unshift([e.start+1,e.startTagEnd-2]):a.unshift([e.start+1,e.startTagEnd-1]);var r=_n(t,e,n);return a=r.concat(a),a}if(!e.startTagEnd||!e.endTagStart)return a;if(a.unshift([e.start,e.end]),e.start<n&&n<e.startTagEnd){a.unshift([e.start+1,e.startTagEnd-1]);var r=_n(t,e,n);return a=r.concat(a),a}else return e.startTagEnd<=n&&n<=e.endTagStart?(a.unshift([e.startTagEnd,e.endTagStart]),a):(n>=e.endTagStart+2&&a.unshift([e.endTagStart+2,e.end-1]),a)}function Ei(t){for(var i=t,o=function(e){return e.startTagEnd&&e.endTagStart&&e.startTagEnd<e.endTagStart?[[e.startTagEnd,e.endTagStart],[e.start,e.end]]:[[e.start,e.end]]},n=[];i.parent;)i=i.parent,o(i).forEach(function(e){return n.push(e)});return n}function _n(t,i,o){for(var n=P.create(t.positionAt(i.start),t.positionAt(i.end)),e=t.getText(n),a=o-i.start,c=$(e),l=c.scan(),r=i.start,s=[],u=!1,h=-1;l!==S.EOS;){switch(l){case S.AttributeName:{if(a<c.getTokenOffset()){u=!1;break}a<=c.getTokenEnd()&&s.unshift([c.getTokenOffset(),c.getTokenEnd()]),u=!0,h=c.getTokenOffset();break}case S.AttributeValue:{if(!u)break;var d=c.getTokenText();if(a<c.getTokenOffset()){s.push([h,c.getTokenEnd()]);break}a>=c.getTokenOffset()&&a<=c.getTokenEnd()&&(s.unshift([c.getTokenOffset(),c.getTokenEnd()]),(d[0]==='\"'&&d[d.length-1]==='\"'||d[0]===\"'\"&&d[d.length-1]===\"'\")&&a>=c.getTokenOffset()+1&&a<=c.getTokenEnd()-1&&s.unshift([c.getTokenOffset()+1,c.getTokenEnd()-1]),s.push([h,c.getTokenEnd()]));break}}l=c.scan()}return s.map(function(g){return[g[0]+r,g[1]+r]})}var bt={version:1.1,tags:[{name:\"html\",description:{kind:\"markdown\",value:\"The html element represents the root of an HTML document.\"},attributes:[{name:\"manifest\",description:{kind:\"markdown\",value:\"Specifies the URI of a resource manifest indicating resources that should be cached locally. See [Using the application cache](https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache) for details.\"}},{name:\"version\",description:'Specifies the version of the HTML [Document Type Definition](https://developer.mozilla.org/en-US/docs/Glossary/DTD \"Document Type Definition: In HTML, the doctype is the required \"<!DOCTYPE html>\" preamble found at the top of all documents. Its sole purpose is to prevent a browser from switching into so-called \\u201Cquirks mode\\u201D when rendering a document; that is, the \"<!DOCTYPE html>\" doctype ensures that the browser makes a best-effort attempt at following the relevant specifications, rather than using a different rendering mode that is incompatible with some specifications.\") that governs the current document. This attribute is not needed, because it is redundant with the version information in the document type declaration.'},{name:\"xmlns\",description:'Specifies the XML Namespace of the document. Default value is `\"http://www.w3.org/1999/xhtml\"`. This is required in documents parsed with XML parsers, and optional in text/html documents.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/html\"}]},{name:\"head\",description:{kind:\"markdown\",value:\"The head element represents a collection of metadata for the Document.\"},attributes:[{name:\"profile\",description:\"The URIs of one or more metadata profiles, separated by white space.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/head\"}]},{name:\"title\",description:{kind:\"markdown\",value:\"The title element represents the document's title or name. Authors should use titles that identify their documents even when they are used out of context, for example in a user's history or bookmarks, or in search results. The document's title is often different from its first heading, since the first heading does not have to stand alone when taken out of context.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/title\"}]},{name:\"base\",description:{kind:\"markdown\",value:\"The base element allows authors to specify the document base URL for the purposes of resolving relative URLs, and the name of the default browsing context for the purposes of following hyperlinks. The element does not represent any content beyond this information.\"},attributes:[{name:\"href\",description:{kind:\"markdown\",value:\"The base URL to be used throughout the document for relative URL addresses. If this attribute is specified, this element must come before any other elements with attributes whose values are URLs. Absolute and relative URLs are allowed.\"}},{name:\"target\",description:{kind:\"markdown\",value:\"A name or keyword indicating the default location to display the result when hyperlinks or forms cause navigation, for elements that do not have an explicit target reference. It is a name of, or keyword for, a _browsing context_ (for example: tab, window, or inline frame). The following keywords have special meanings:\\n\\n*   `_self`: Load the result into the same browsing context as the current one. This value is the default if the attribute is not specified.\\n*   `_blank`: Load the result into a new unnamed browsing context.\\n*   `_parent`: Load the result into the parent browsing context of the current one. If there is no parent, this option behaves the same way as `_self`.\\n*   `_top`: Load the result into the top-level browsing context (that is, the browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this option behaves the same way as `_self`.\\n\\nIf this attribute is specified, this element must come before any other elements with attributes whose values are URLs.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/base\"}]},{name:\"link\",description:{kind:\"markdown\",value:\"The link element allows authors to link their document to other resources.\"},attributes:[{name:\"href\",description:{kind:\"markdown\",value:'This attribute specifies the [URL](https://developer.mozilla.org/en-US/docs/Glossary/URL \"URL: Uniform Resource Locator (URL) is a text string specifying where a resource can be found on the Internet.\") of the linked resource. A URL can be absolute or relative.'}},{name:\"crossorigin\",valueSet:\"xo\",description:{kind:\"markdown\",value:'This enumerated attribute indicates whether [CORS](https://developer.mozilla.org/en-US/docs/Glossary/CORS \"CORS: CORS (Cross-Origin Resource Sharing) is a system, consisting of transmitting HTTP headers, that determines whether browsers block frontend JavaScript code from accessing responses for cross-origin requests.\") must be used when fetching the resource. [CORS-enabled images](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_Enabled_Image) can be reused in the [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas \"Use the HTML <canvas> element with either the canvas scripting API or the WebGL API to draw graphics and animations.\") element without being _tainted_. The allowed values are:\\n\\n`anonymous`\\n\\nA cross-origin request (i.e. with an [`Origin`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin \"The Origin request header indicates where a fetch originates from. It doesn\\'t include any path information, but only the server name. It is sent with CORS requests, as well as with POST requests. It is similar to the Referer header, but, unlike this header, it doesn\\'t disclose the whole path.\") HTTP header) is performed, but no credential is sent (i.e. no cookie, X.509 certificate, or HTTP Basic authentication). If the server does not give credentials to the origin site (by not setting the [`Access-Control-Allow-Origin`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin \"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given origin.\") HTTP header) the image will be tainted and its usage restricted.\\n\\n`use-credentials`\\n\\nA cross-origin request (i.e. with an `Origin` HTTP header) is performed along with a credential sent (i.e. a cookie, certificate, and/or HTTP Basic authentication is performed). If the server does not give credentials to the origin site (through [`Access-Control-Allow-Credentials`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials \"The Access-Control-Allow-Credentials response header tells browsers whether to expose the response to frontend JavaScript code when the request\\'s credentials mode (Request.credentials) is \"include\".\") HTTP header), the resource will be _tainted_ and its usage restricted.\\n\\nIf the attribute is not present, the resource is fetched without a [CORS](https://developer.mozilla.org/en-US/docs/Glossary/CORS \"CORS: CORS (Cross-Origin Resource Sharing) is a system, consisting of transmitting HTTP headers, that determines whether browsers block frontend JavaScript code from accessing responses for cross-origin requests.\") request (i.e. without sending the `Origin` HTTP header), preventing its non-tainted usage. If invalid, it is handled as if the enumerated keyword **anonymous** was used. See [CORS settings attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for additional information.'}},{name:\"rel\",description:{kind:\"markdown\",value:\"This attribute names a relationship of the linked document to the current document. The attribute must be a space-separated list of the [link types values](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types).\"}},{name:\"media\",description:{kind:\"markdown\",value:\"This attribute specifies the media that the linked resource applies to. Its value must be a media type / [media query](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_queries). This attribute is mainly useful when linking to external stylesheets \\u2014 it allows the user agent to pick the best adapted one for the device it runs on.\\n\\n**Notes:**\\n\\n*   In HTML 4, this can only be a simple white-space-separated list of media description literals, i.e., [media types and groups](https://developer.mozilla.org/en-US/docs/Web/CSS/@media), where defined and allowed as values for this attribute, such as `print`, `screen`, `aural`, `braille`. HTML5 extended this to any kind of [media queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_queries), which are a superset of the allowed values of HTML 4.\\n*   Browsers not supporting [CSS3 Media Queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_queries) won't necessarily recognize the adequate link; do not forget to set fallback links, the restricted set of media queries defined in HTML 4.\"}},{name:\"hreflang\",description:{kind:\"markdown\",value:\"This attribute indicates the language of the linked resource. It is purely advisory. Allowed values are determined by [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt). Use this attribute only if the [`href`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-href) attribute is present.\"}},{name:\"type\",description:{kind:\"markdown\",value:'This attribute is used to define the type of the content linked to. The value of the attribute should be a MIME type such as **text/html**, **text/css**, and so on. The common use of this attribute is to define the type of stylesheet being referenced (such as **text/css**), but given that CSS is the only stylesheet language used on the web, not only is it possible to omit the `type` attribute, but is actually now recommended practice. It is also used on `rel=\"preload\"` link types, to make sure the browser only downloads file types that it supports.'}},{name:\"sizes\",description:{kind:\"markdown\",value:\"This attribute defines the sizes of the icons for visual media contained in the resource. It must be present only if the [`rel`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link#attr-rel) contains a value of `icon` or a non-standard type such as Apple's `apple-touch-icon`. It may have the following values:\\n\\n*   `any`, meaning that the icon can be scaled to any size as it is in a vector format, like `image/svg+xml`.\\n*   a white-space separated list of sizes, each in the format `_<width in pixels>_x_<height in pixels>_` or `_<width in pixels>_X_<height in pixels>_`. Each of these sizes must be contained in the resource.\\n\\n**Note:** Most icon formats are only able to store one single icon; therefore most of the time the [`sizes`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-sizes) contains only one entry. MS's ICO format does, as well as Apple's ICNS. ICO is more ubiquitous; you should definitely use it.\"}},{name:\"as\",description:'This attribute is only used when `rel=\"preload\"` or `rel=\"prefetch\"` has been set on the `<link>` element. It specifies the type of content being loaded by the `<link>`, which is necessary for content prioritization, request matching, application of correct [content security policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP), and setting of correct [`Accept`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept \"The Accept request HTTP header advertises which content types, expressed as MIME types, the client is able to understand. Using content negotiation, the server then selects one of the proposals, uses it and informs the client of its choice with the Content-Type response header. Browsers set adequate values for this header depending on\\xA0the context where the request is done: when fetching a CSS stylesheet a different value is set for the request than when fetching an image,\\xA0video or a script.\") request header.'},{name:\"importance\",description:\"Indicates the relative importance of the resource. Priority hints are delegated using the values:\"},{name:\"importance\",description:'**`auto`**: Indicates\\xA0**no\\xA0preference**. The browser may use its own heuristics to decide the priority of the resource.\\n\\n**`high`**: Indicates to the\\xA0browser\\xA0that the resource is of\\xA0**high** priority.\\n\\n**`low`**:\\xA0Indicates to the\\xA0browser\\xA0that the resource is of\\xA0**low** priority.\\n\\n**Note:** The `importance` attribute may only be used for the `<link>` element if `rel=\"preload\"` or `rel=\"prefetch\"` is present.'},{name:\"integrity\",description:\"Contains inline metadata \\u2014 a base64-encoded cryptographic hash of the resource (file) you\\u2019re telling the browser to fetch. The browser can use this to verify that the fetched resource has been delivered free of unexpected manipulation. See [Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity).\"},{name:\"referrerpolicy\",description:'A string indicating which referrer to use when fetching the resource:\\n\\n*   `no-referrer` means that the [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent.\\n*   `no-referrer-when-downgrade` means that no [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will be sent when navigating to an origin without TLS (HTTPS). This is a user agent\\u2019s default behavior, if no policy is otherwise specified.\\n*   `origin` means that the referrer will be the origin of the page, which is roughly the scheme, the host, and the port.\\n*   `origin-when-cross-origin` means that navigating to other origins will be limited to the scheme, the host, and the port, while navigating on the same origin will include the referrer\\'s path.\\n*   `unsafe-url` means that the referrer will include the origin and the path (but not the fragment, password, or username). This case is unsafe because it can leak origins and paths from TLS-protected resources to insecure origins.'},{name:\"title\",description:'The `title` attribute has special semantics on the `<link>` element. When used on a `<link rel=\"stylesheet\">` it defines a [preferred or an alternate stylesheet](https://developer.mozilla.org/en-US/docs/Web/CSS/Alternative_style_sheets). Incorrectly using it may [cause the stylesheet to be ignored](https://developer.mozilla.org/en-US/docs/Correctly_Using_Titles_With_External_Stylesheets).'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/link\"}]},{name:\"meta\",description:{kind:\"markdown\",value:\"The meta element represents various kinds of metadata that cannot be expressed using the title, base, link, style, and script elements.\"},attributes:[{name:\"name\",description:{kind:\"markdown\",value:`This attribute defines the name of a piece of document-level metadata. It should not be set if one of the attributes [\\`itemprop\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-itemprop), [\\`http-equiv\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-http-equiv) or [\\`charset\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-charset) is also set.\n\nThis metadata name is associated with the value contained by the [\\`content\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-content) attribute. The possible values for the name attribute are:\n\n*   \\`application-name\\` which defines the name of the application running in the web page.\n    \n    **Note:**\n    \n    *   Browsers may use this to identify the application. It is different from the [\\`<title>\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title \"The HTML Title element (<title>) defines the document's title that is shown in a browser's title bar or a page's tab.\") element, which usually contain the application name, but may also contain information like the document name or a status.\n    *   Simple web pages shouldn't define an application-name.\n    \n*   \\`author\\` which defines the name of the document's author.\n*   \\`description\\` which contains a short and accurate summary of the content of the page. Several browsers, like Firefox and Opera, use this as the default description of bookmarked pages.\n*   \\`generator\\` which contains the identifier of the software that generated the page.\n*   \\`keywords\\` which contains words relevant to the page's content separated by commas.\n*   \\`referrer\\` which controls the [\\`Referer\\` HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer) attached to requests sent from the document:\n    \n    Values for the \\`content\\` attribute of \\`<meta name=\"referrer\">\\`\n    \n    \\`no-referrer\\`\n    \n    Do not send a HTTP \\`Referrer\\` header.\n    \n    \\`origin\\`\n    \n    Send the [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin) of the document.\n    \n    \\`no-referrer-when-downgrade\\`\n    \n    Send the [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin) as a referrer to URLs as secure as the current page, (https\\u2192https), but does not send a referrer to less secure URLs (https\\u2192http). This is the default behaviour.\n    \n    \\`origin-when-cross-origin\\`\n    \n    Send the full URL (stripped of parameters) for same-origin requests, but only send the [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin) for other cases.\n    \n    \\`same-origin\\`\n    \n    A referrer will be sent for [same-site origins](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy), but cross-origin requests will contain no referrer information.\n    \n    \\`strict-origin\\`\n    \n    Only send the origin of the document as the referrer to a-priori as-much-secure destination (HTTPS->HTTPS), but don't send it to a less secure destination (HTTPS->HTTP).\n    \n    \\`strict-origin-when-cross-origin\\`\n    \n    Send a full URL when performing a same-origin request, only send the origin of the document to a-priori as-much-secure destination (HTTPS->HTTPS), and send no header to a less secure destination (HTTPS->HTTP).\n    \n    \\`unsafe-URL\\`\n    \n    Send the full URL (stripped of parameters) for same-origin or cross-origin requests.\n    \n    **Notes:**\n    \n    *   Some browsers support the deprecated values of \\`always\\`, \\`default\\`, and \\`never\\` for referrer.\n    *   Dynamically inserting \\`<meta name=\"referrer\">\\` (with [\\`document.write\\`](https://developer.mozilla.org/en-US/docs/Web/API/Document/write) or [\\`appendChild\\`](https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild)) makes the referrer behaviour unpredictable.\n    *   When several conflicting policies are defined, the no-referrer policy is applied.\n    \n\nThis attribute may also have a value taken from the extended list defined on [WHATWG Wiki MetaExtensions page](https://wiki.whatwg.org/wiki/MetaExtensions). Although none have been formally accepted yet, a few commonly used names are:\n\n*   \\`creator\\` which defines the name of the creator of the document, such as an organization or institution. If there are more than one, several [\\`<meta>\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") elements should be used.\n*   \\`googlebot\\`, a synonym of \\`robots\\`, is only followed by Googlebot (the indexing crawler for Google).\n*   \\`publisher\\` which defines the name of the document's publisher.\n*   \\`robots\\` which defines the behaviour that cooperative crawlers, or \"robots\", should use with the page. It is a comma-separated list of the values below:\n    \n    Values for the content of \\`<meta name=\"robots\">\\`\n    \n    Value\n    \n    Description\n    \n    Used by\n    \n    \\`index\\`\n    \n    Allows the robot to index the page (default).\n    \n    All\n    \n    \\`noindex\\`\n    \n    Requests the robot to not index the page.\n    \n    All\n    \n    \\`follow\\`\n    \n    Allows the robot to follow the links on the page (default).\n    \n    All\n    \n    \\`nofollow\\`\n    \n    Requests the robot to not follow the links on the page.\n    \n    All\n    \n    \\`none\\`\n    \n    Equivalent to \\`noindex, nofollow\\`\n    \n    [Google](https://support.google.com/webmasters/answer/79812)\n    \n    \\`noodp\\`\n    \n    Prevents using the [Open Directory Project](https://www.dmoz.org/) description, if any, as the page description in search engine results.\n    \n    [Google](https://support.google.com/webmasters/answer/35624#nodmoz), [Yahoo](https://help.yahoo.com/kb/search-for-desktop/meta-tags-robotstxt-yahoo-search-sln2213.html#cont5), [Bing](https://www.bing.com/webmaster/help/which-robots-metatags-does-bing-support-5198d240)\n    \n    \\`noarchive\\`\n    \n    Requests the search engine not to cache the page content.\n    \n    [Google](https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag#valid-indexing--serving-directives), [Yahoo](https://help.yahoo.com/kb/search-for-desktop/SLN2213.html), [Bing](https://www.bing.com/webmaster/help/which-robots-metatags-does-bing-support-5198d240)\n    \n    \\`nosnippet\\`\n    \n    Prevents displaying any description of the page in search engine results.\n    \n    [Google](https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag#valid-indexing--serving-directives), [Bing](https://www.bing.com/webmaster/help/which-robots-metatags-does-bing-support-5198d240)\n    \n    \\`noimageindex\\`\n    \n    Requests this page not to appear as the referring page of an indexed image.\n    \n    [Google](https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag#valid-indexing--serving-directives)\n    \n    \\`nocache\\`\n    \n    Synonym of \\`noarchive\\`.\n    \n    [Bing](https://www.bing.com/webmaster/help/which-robots-metatags-does-bing-support-5198d240)\n    \n    **Notes:**\n    \n    *   Only cooperative robots follow these rules. Do not expect to prevent e-mail harvesters with them.\n    *   The robot still needs to access the page in order to read these rules. To prevent bandwidth consumption, use a _[robots.txt](https://developer.mozilla.org/en-US/docs/Glossary/robots.txt \"robots.txt: Robots.txt is a file which is usually placed in the root of any website. It decides whether\\xA0crawlers are permitted or forbidden access to the web site.\")_ file.\n    *   If you want to remove a page, \\`noindex\\` will work, but only after the robot visits the page again. Ensure that the \\`robots.txt\\` file is not preventing revisits.\n    *   Some values are mutually exclusive, like \\`index\\` and \\`noindex\\`, or \\`follow\\` and \\`nofollow\\`. In these cases the robot's behaviour is undefined and may vary between them.\n    *   Some crawler robots, like Google, Yahoo and Bing, support the same values for the HTTP header \\`X-Robots-Tag\\`; this allows non-HTML documents like images to use these rules.\n    \n*   \\`slurp\\`, is a synonym of \\`robots\\`, but only for Slurp - the crawler for Yahoo Search.\n*   \\`viewport\\`, which gives hints about the size of the initial size of the [viewport](https://developer.mozilla.org/en-US/docs/Glossary/viewport \"viewport: A viewport represents a polygonal (normally rectangular) area in computer graphics that is currently being viewed. In web browser terms, it refers to the part of the document you're viewing which is currently visible in its window (or the screen, if the document is being viewed in full screen mode). Content outside the viewport is not visible onscreen until scrolled into view.\"). Used by mobile devices only.\n    \n    Values for the content of \\`<meta name=\"viewport\">\\`\n    \n    Value\n    \n    Possible subvalues\n    \n    Description\n    \n    \\`width\\`\n    \n    A positive integer number, or the text \\`device-width\\`\n    \n    Defines the pixel width of the viewport that you want the web site to be rendered at.\n    \n    \\`height\\`\n    \n    A positive integer, or the text \\`device-height\\`\n    \n    Defines the height of the viewport. Not used by any browser.\n    \n    \\`initial-scale\\`\n    \n    A positive number between \\`0.0\\` and \\`10.0\\`\n    \n    Defines the ratio between the device width (\\`device-width\\` in portrait mode or \\`device-height\\` in landscape mode) and the viewport size.\n    \n    \\`maximum-scale\\`\n    \n    A positive number between \\`0.0\\` and \\`10.0\\`\n    \n    Defines the maximum amount to zoom in. It must be greater or equal to the \\`minimum-scale\\` or the behaviour is undefined. Browser settings can ignore this rule and iOS10+ ignores it by default.\n    \n    \\`minimum-scale\\`\n    \n    A positive number between \\`0.0\\` and \\`10.0\\`\n    \n    Defines the minimum zoom level. It must be smaller or equal to the \\`maximum-scale\\` or the behaviour is undefined. Browser settings can ignore this rule and iOS10+ ignores it by default.\n    \n    \\`user-scalable\\`\n    \n    \\`yes\\` or \\`no\\`\n    \n    If set to \\`no\\`, the user is not able to zoom in the webpage. The default is \\`yes\\`. Browser settings can ignore this rule, and iOS10+ ignores it by default.\n    \n    Specification\n    \n    Status\n    \n    Comment\n    \n    [CSS Device Adaptation  \n    The definition of '<meta name=\"viewport\">' in that specification.](https://drafts.csswg.org/css-device-adapt/#viewport-meta)\n    \n    Working Draft\n    \n    Non-normatively describes the Viewport META element\n    \n    See also: [\\`@viewport\\`](https://developer.mozilla.org/en-US/docs/Web/CSS/@viewport \"The @viewport CSS at-rule lets you configure the viewport through which the document is viewed. It's primarily used for mobile devices, but is also used by desktop browsers that support features like \"snap to edge\" (such as Microsoft Edge).\")\n    \n    **Notes:**\n    \n    *   Though unstandardized, this declaration is respected by most mobile browsers due to de-facto dominance.\n    *   The default values may vary between devices and browsers.\n    *   To learn about this declaration in Firefox for Mobile, see [this article](https://developer.mozilla.org/en-US/docs/Mobile/Viewport_meta_tag \"Mobile/Viewport meta tag\").`}},{name:\"http-equiv\",description:{kind:\"markdown\",value:'Defines a pragma directive. The attribute is named `**http-equiv**(alent)` because all the allowed values are names of particular HTTP headers:\\n\\n*   `\"content-language\"`  \\n    Defines the default language of the page. It can be overridden by the [lang](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang) attribute on any element.\\n    \\n    **Warning:** Do not use this value, as it is obsolete. Prefer the `lang` attribute on the [`<html>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/html \"The HTML <html> element represents the root (top-level element) of an HTML document, so it is also referred to as the root element. All other elements must be descendants of this element.\") element.\\n    \\n*   `\"content-security-policy\"`  \\n    Allows page authors to define a [content policy](https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives) for the current page. Content policies mostly specify allowed server origins and script endpoints which help guard against cross-site scripting attacks.\\n*   `\"content-type\"`  \\n    Defines the [MIME type](https://developer.mozilla.org/en-US/docs/Glossary/MIME_type) of the document, followed by its character encoding. It follows the same syntax as the HTTP `content-type` entity-header field, but as it is inside a HTML page, most values other than `text/html` are impossible. Therefore the valid syntax for its `content` is the string \\'`text/html`\\' followed by a character set with the following syntax: \\'`; charset=_IANAcharset_`\\', where `IANAcharset` is the _preferred MIME name_ for a character set as [defined by the IANA.](https://www.iana.org/assignments/character-sets)\\n    \\n    **Warning:** Do not use this value, as it is obsolete. Use the [`charset`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-charset) attribute on the [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") element.\\n    \\n    **Note:** As [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") can\\'t change documents\\' types in XHTML or HTML5\\'s XHTML serialization, never set the MIME type to an XHTML MIME type with `<meta>`.\\n    \\n*   `\"refresh\"`  \\n    This instruction specifies:\\n    *   The number of seconds until the page should be reloaded - only if the [`content`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-content) attribute contains a positive integer.\\n    *   The number of seconds until the page should redirect to another - only if the [`content`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-content) attribute contains a positive integer followed by the string \\'`;url=`\\', and a valid URL.\\n*   `\"set-cookie\"`  \\n    Defines a [cookie](https://developer.mozilla.org/en-US/docs/cookie) for the page. Its content must follow the syntax defined in the [IETF HTTP Cookie Specification](https://tools.ietf.org/html/draft-ietf-httpstate-cookie-14).\\n    \\n    **Warning:** Do not use this instruction, as it is obsolete. Use the HTTP header [`Set-Cookie`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) instead.'}},{name:\"content\",description:{kind:\"markdown\",value:\"This attribute contains the value for the [`http-equiv`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-http-equiv) or [`name`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-name) attribute, depending on which is used.\"}},{name:\"charset\",description:{kind:\"markdown\",value:'This attribute declares the page\\'s character encoding. It must contain a [standard IANA MIME name for character encodings](https://www.iana.org/assignments/character-sets). Although the standard doesn\\'t request a specific encoding, it suggests:\\n\\n*   Authors are encouraged to use [`UTF-8`](https://developer.mozilla.org/en-US/docs/Glossary/UTF-8).\\n*   Authors should not use ASCII-incompatible encodings to avoid security risk: browsers not supporting them may interpret harmful content as HTML. This happens with the `JIS_C6226-1983`, `JIS_X0212-1990`, `HZ-GB-2312`, `JOHAB`, the ISO-2022 family and the EBCDIC family.\\n\\n**Note:** ASCII-incompatible encodings are those that don\\'t map the 8-bit code points `0x20` to `0x7E` to the `0x0020` to `0x007E` Unicode code points)\\n\\n*   Authors **must not** use `CESU-8`, `UTF-7`, `BOCU-1` and/or `SCSU` as [cross-site scripting](https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting) attacks with these encodings have been demonstrated.\\n*   Authors should not use `UTF-32` because not all HTML5 encoding algorithms can distinguish it from `UTF-16`.\\n\\n**Notes:**\\n\\n*   The declared character encoding must match the one the page was saved with to avoid garbled characters and security holes.\\n*   The [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") element declaring the encoding must be inside the [`<head>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head \"The HTML <head> element provides general information (metadata) about the document, including its title and links to its\\xA0scripts and style sheets.\") element and **within the first 1024 bytes** of the HTML as some browsers only look at those bytes before choosing an encoding.\\n*   This [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") element is only one part of the [algorithm to determine a page\\'s character set](https://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#encoding-sniffing-algorithm \"Algorithm charset page\"). The [`Content-Type` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type) and any [Byte-Order Marks](https://developer.mozilla.org/en-US/docs/Glossary/Byte-Order_Mark \"The definition of that term (Byte-Order Marks) has not been written yet; please consider contributing it!\") override this element.\\n*   It is strongly recommended to define the character encoding. If a page\\'s encoding is undefined, cross-scripting techniques are possible, such as the [`UTF-7` fallback cross-scripting technique](https://code.google.com/p/doctype-mirror/wiki/ArticleUtf7).\\n*   The [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta \"The HTML <meta> element represents metadata that cannot be represented by other HTML meta-related elements, like <base>, <link>, <script>, <style> or <title>.\") element with a `charset` attribute is a synonym for the pre-HTML5 `<meta http-equiv=\"Content-Type\" content=\"text/html; charset=_IANAcharset_\">`, where _`IANAcharset`_ contains the value of the equivalent [`charset`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-charset) attribute. This syntax is still allowed, although no longer recommended.'}},{name:\"scheme\",description:\"This attribute defines the scheme in which metadata is described. A scheme is a context leading to the correct interpretations of the [`content`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta#attr-content) value, like a format.\\n\\n**Warning:** Do not use this value, as it is obsolete. There is no replacement as there was no real usage for it.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/meta\"}]},{name:\"style\",description:{kind:\"markdown\",value:\"The style element allows authors to embed style information in their documents. The style element is one of several inputs to the styling processing model. The element does not represent content for the user.\"},attributes:[{name:\"media\",description:{kind:\"markdown\",value:\"This attribute defines which media the style should be applied to. Its value is a [media query](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries), which defaults to `all` if the attribute is missing.\"}},{name:\"nonce\",description:{kind:\"markdown\",value:\"A cryptographic nonce (number used once) used to whitelist inline styles in a [style-src Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src). The server must generate a unique nonce value each time it transmits a policy. It is critical to provide a nonce that cannot be guessed as bypassing a resource\\u2019s policy is otherwise trivial.\"}},{name:\"type\",description:{kind:\"markdown\",value:\"This attribute defines the styling language as a MIME type (charset should not be specified). This attribute is optional and defaults to `text/css` if it is not specified \\u2014 there is very little reason to include this in modern web documents.\"}},{name:\"scoped\",valueSet:\"v\"},{name:\"title\",description:\"This attribute specifies [alternative style sheet](https://developer.mozilla.org/en-US/docs/Web/CSS/Alternative_style_sheets) sets.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/style\"}]},{name:\"body\",description:{kind:\"markdown\",value:\"The body element represents the content of the document.\"},attributes:[{name:\"onafterprint\",description:{kind:\"markdown\",value:\"Function to call after the user has printed the document.\"}},{name:\"onbeforeprint\",description:{kind:\"markdown\",value:\"Function to call when the user requests printing of the document.\"}},{name:\"onbeforeunload\",description:{kind:\"markdown\",value:\"Function to call when the document is about to be unloaded.\"}},{name:\"onhashchange\",description:{kind:\"markdown\",value:\"Function to call when the fragment identifier part (starting with the hash (`'#'`) character) of the document's current address has changed.\"}},{name:\"onlanguagechange\",description:{kind:\"markdown\",value:\"Function to call when the preferred languages changed.\"}},{name:\"onmessage\",description:{kind:\"markdown\",value:\"Function to call when the document has received a message.\"}},{name:\"onoffline\",description:{kind:\"markdown\",value:\"Function to call when network communication has failed.\"}},{name:\"ononline\",description:{kind:\"markdown\",value:\"Function to call when network communication has been restored.\"}},{name:\"onpagehide\"},{name:\"onpageshow\"},{name:\"onpopstate\",description:{kind:\"markdown\",value:\"Function to call when the user has navigated session history.\"}},{name:\"onstorage\",description:{kind:\"markdown\",value:\"Function to call when the storage area has changed.\"}},{name:\"onunload\",description:{kind:\"markdown\",value:\"Function to call when the document is going away.\"}},{name:\"alink\",description:'Color of text for hyperlinks when selected. _This method is non-conforming, use CSS [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color \"The color CSS property sets the foreground color value of an element\\'s text and text decorations, and sets the currentcolor value.\") property in conjunction with the [`:active`](https://developer.mozilla.org/en-US/docs/Web/CSS/:active \"The :active CSS pseudo-class represents an element (such as a button) that is being activated by the user.\") pseudo-class instead._'},{name:\"background\",description:'URI of a image to use as a background. _This method is non-conforming, use CSS [`background`](https://developer.mozilla.org/en-US/docs/Web/CSS/background \"The background shorthand CSS property sets all background style properties at once, such as color, image, origin and size, or repeat method.\") property on the element instead._'},{name:\"bgcolor\",description:'Background color for the document. _This method is non-conforming, use CSS [`background-color`](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color \"The background-color CSS property sets the background color of an element.\") property on the element instead._'},{name:\"bottommargin\",description:'The margin of the bottom of the body. _This method is non-conforming, use CSS [`margin-bottom`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-bottom \"The margin-bottom CSS property sets the margin area on the bottom of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") property on the element instead._'},{name:\"leftmargin\",description:'The margin of the left of the body. _This method is non-conforming, use CSS [`margin-left`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-left \"The margin-left CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") property on the element instead._'},{name:\"link\",description:'Color of text for unvisited hypertext links. _This method is non-conforming, use CSS [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color \"The color CSS property sets the foreground color value of an element\\'s text and text decorations, and sets the currentcolor value.\") property in conjunction with the [`:link`](https://developer.mozilla.org/en-US/docs/Web/CSS/:link \"The :link CSS pseudo-class represents an element that has not yet been visited. It matches every unvisited <a>, <area>, or <link> element that has an href attribute.\") pseudo-class instead._'},{name:\"onblur\",description:\"Function to call when the document loses focus.\"},{name:\"onerror\",description:\"Function to call when the document fails to load properly.\"},{name:\"onfocus\",description:\"Function to call when the document receives focus.\"},{name:\"onload\",description:\"Function to call when the document has finished loading.\"},{name:\"onredo\",description:\"Function to call when the user has moved forward in undo transaction history.\"},{name:\"onresize\",description:\"Function to call when the document has been resized.\"},{name:\"onundo\",description:\"Function to call when the user has moved backward in undo transaction history.\"},{name:\"rightmargin\",description:'The margin of the right of the body. _This method is non-conforming, use CSS [`margin-right`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-right \"The margin-right CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") property on the element instead._'},{name:\"text\",description:'Foreground color of text. _This method is non-conforming, use CSS [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color \"The color CSS property sets the foreground color value of an element\\'s text and text decorations, and sets the currentcolor value.\") property on the element instead._'},{name:\"topmargin\",description:'The margin of the top of the body. _This method is non-conforming, use CSS [`margin-top`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-top \"The margin-top CSS property sets the margin area on the top of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") property on the element instead._'},{name:\"vlink\",description:'Color of text for visited hypertext links. _This method is non-conforming, use CSS [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color \"The color CSS property sets the foreground color value of an element\\'s text and text decorations, and sets the currentcolor value.\") property in conjunction with the [`:visited`](https://developer.mozilla.org/en-US/docs/Web/CSS/:visited \"The :visited CSS pseudo-class represents links that the user has already visited. For privacy reasons, the styles that can be modified using this selector are very limited.\") pseudo-class instead._'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/body\"}]},{name:\"article\",description:{kind:\"markdown\",value:\"The article element represents a complete, or self-contained, composition in a document, page, application, or site and that is, in principle, independently distributable or reusable, e.g. in syndication. This could be a forum post, a magazine or newspaper article, a blog entry, a user-submitted comment, an interactive widget or gadget, or any other independent item of content. Each article should be identified, typically by including a heading (h1\\u2013h6 element) as a child of the article element.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/article\"}]},{name:\"section\",description:{kind:\"markdown\",value:\"The section element represents a generic section of a document or application. A section, in this context, is a thematic grouping of content. Each section should be identified, typically by including a heading ( h1- h6 element) as a child of the section element.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/section\"}]},{name:\"nav\",description:{kind:\"markdown\",value:\"The nav element represents a section of a page that links to other pages or to parts within the page: a section with navigation links.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/nav\"}]},{name:\"aside\",description:{kind:\"markdown\",value:\"The aside element represents a section of a page that consists of content that is tangentially related to the content around the aside element, and which could be considered separate from that content. Such sections are often represented as sidebars in printed typography.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/aside\"}]},{name:\"h1\",description:{kind:\"markdown\",value:\"The h1 element represents a section heading.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements\"}]},{name:\"h2\",description:{kind:\"markdown\",value:\"The h2 element represents a section heading.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements\"}]},{name:\"h3\",description:{kind:\"markdown\",value:\"The h3 element represents a section heading.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements\"}]},{name:\"h4\",description:{kind:\"markdown\",value:\"The h4 element represents a section heading.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements\"}]},{name:\"h5\",description:{kind:\"markdown\",value:\"The h5 element represents a section heading.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements\"}]},{name:\"h6\",description:{kind:\"markdown\",value:\"The h6 element represents a section heading.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/Heading_Elements\"}]},{name:\"header\",description:{kind:\"markdown\",value:\"The header element represents introductory content for its nearest ancestor sectioning content or sectioning root element. A header typically contains a group of introductory or navigational aids. When the nearest ancestor sectioning content or sectioning root element is the body element, then it applies to the whole page.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/header\"}]},{name:\"footer\",description:{kind:\"markdown\",value:\"The footer element represents a footer for its nearest ancestor sectioning content or sectioning root element. A footer typically contains information about its section such as who wrote it, links to related documents, copyright data, and the like.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/footer\"}]},{name:\"address\",description:{kind:\"markdown\",value:\"The address element represents the contact information for its nearest article or body element ancestor. If that is the body element, then the contact information applies to the document as a whole.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/address\"}]},{name:\"p\",description:{kind:\"markdown\",value:\"The p element represents a paragraph.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/p\"}]},{name:\"hr\",description:{kind:\"markdown\",value:\"The hr element represents a paragraph-level thematic break, e.g. a scene change in a story, or a transition to another topic within a section of a reference book.\"},attributes:[{name:\"align\",description:\"Sets the alignment of the rule on the page. If no value is specified, the default value is `left`.\"},{name:\"color\",description:\"Sets the color of the rule through color name or hexadecimal value.\"},{name:\"noshade\",description:\"Sets the rule to have no shading.\"},{name:\"size\",description:\"Sets the height, in pixels, of the rule.\"},{name:\"width\",description:\"Sets the length of the rule on the page through a pixel or percentage value.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/hr\"}]},{name:\"pre\",description:{kind:\"markdown\",value:\"The pre element represents a block of preformatted text, in which structure is represented by typographic conventions rather than by elements.\"},attributes:[{name:\"cols\",description:'Contains the _preferred_ count of characters that a line should have. It was a non-standard synonym of [`width`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre#attr-width). To achieve such an effect, use CSS [`width`](https://developer.mozilla.org/en-US/docs/Web/CSS/width \"The width CSS property sets an element\\'s width. By default it sets the width of the content area, but if box-sizing is set to border-box, it sets the width of the border area.\") instead.'},{name:\"width\",description:'Contains the _preferred_ count of characters that a line should have. Though technically still implemented, this attribute has no visual effect; to achieve such an effect, use CSS [`width`](https://developer.mozilla.org/en-US/docs/Web/CSS/width \"The width CSS property sets an element\\'s width. By default it sets the width of the content area, but if box-sizing is set to border-box, it sets the width of the border area.\") instead.'},{name:\"wrap\",description:'Is a _hint_ indicating how the overflow must happen. In modern browser this hint is ignored and no visual effect results in its present; to achieve such an effect, use CSS [`white-space`](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space \"The white-space CSS property sets how white space inside an element is handled.\") instead.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/pre\"}]},{name:\"blockquote\",description:{kind:\"markdown\",value:\"The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element, and optionally with in-line changes such as annotations and abbreviations.\"},attributes:[{name:\"cite\",description:{kind:\"markdown\",value:\"A URL that designates a source document or message for the information quoted. This attribute is intended to point to information explaining the context or the reference for the quote.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/blockquote\"}]},{name:\"ol\",description:{kind:\"markdown\",value:\"The ol element represents a list of items, where the items have been intentionally ordered, such that changing the order would change the meaning of the document.\"},attributes:[{name:\"reversed\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This Boolean attribute specifies that the items of the list are specified in reversed order.\"}},{name:\"start\",description:{kind:\"markdown\",value:'This integer attribute specifies the start value for numbering the individual list items. Although the ordering type of list elements might be Roman numerals, such as XXXI, or letters, the value of start is always represented as a number. To start numbering elements from the letter \"C\", use `<ol start=\"3\">`.\\n\\n**Note**: This attribute was deprecated in HTML4, but reintroduced in HTML5.'}},{name:\"type\",valueSet:\"lt\",description:{kind:\"markdown\",value:\"Indicates the numbering type:\\n\\n*   `'a'` indicates lowercase letters,\\n*   `'A'` indicates uppercase letters,\\n*   `'i'` indicates lowercase Roman numerals,\\n*   `'I'` indicates uppercase Roman numerals,\\n*   and `'1'` indicates numbers (default).\\n\\nThe type set is used for the entire list unless a different [`type`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li#attr-type) attribute is used within an enclosed [`<li>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li \\\"The HTML <li> element is used to represent an item in a list. It must be contained in a parent element: an ordered list (<ol>), an unordered list (<ul>), or a menu (<menu>). In menus and unordered lists, list items are usually displayed using bullet points. In ordered lists, they are usually displayed with an ascending counter on the left, such as a number or letter.\\\") element.\\n\\n**Note:** This attribute was deprecated in HTML4, but reintroduced in HTML5.\\n\\nUnless the value of the list number matters (e.g. in legal or technical documents where items are to be referenced by their number/letter), the CSS [`list-style-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type \\\"The list-style-type CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.\\\") property should be used instead.\"}},{name:\"compact\",description:'This Boolean attribute hints that the list should be rendered in a compact style. The interpretation of this attribute depends on the user agent and it doesn\\'t work in all browsers.\\n\\n**Warning:** Do not use this attribute, as it has been deprecated: the [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol \"The HTML <ol> element represents an ordered list of items, typically rendered as a numbered list.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/CSS). To give an effect similar to the `compact` attribute, the [CSS](https://developer.mozilla.org/en-US/docs/CSS) property [`line-height`](https://developer.mozilla.org/en-US/docs/Web/CSS/line-height \"The line-height CSS property sets the amount of space used for lines, such as in text. On block-level elements, it specifies the minimum height of line boxes within the element. On non-replaced inline elements, it specifies the height that is used to calculate line box height.\") can be used with a value of `80%`.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/ol\"}]},{name:\"ul\",description:{kind:\"markdown\",value:\"The ul element represents a list of items, where the order of the items is not important \\u2014 that is, where changing the order would not materially change the meaning of the document.\"},attributes:[{name:\"compact\",description:'This Boolean attribute hints that the list should be rendered in a compact style. The interpretation of this attribute depends on the user agent and it doesn\\'t work in all browsers.\\n\\n**Usage note:\\xA0**Do not use this attribute, as it has been deprecated: the [`<ul>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul \"The HTML <ul> element represents an unordered list of items, typically rendered as a bulleted list.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/CSS). To give a similar effect as the `compact` attribute, the [CSS](https://developer.mozilla.org/en-US/docs/CSS) property [line-height](https://developer.mozilla.org/en-US/docs/CSS/line-height) can be used with a value of `80%`.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/ul\"}]},{name:\"li\",description:{kind:\"markdown\",value:\"The li element represents a list item. If its parent element is an ol, ul, or menu element, then the element is an item of the parent element's list, as defined for those elements. Otherwise, the list item has no defined list-related relationship to any other li element.\"},attributes:[{name:\"value\",description:{kind:\"markdown\",value:'This integer attribute indicates the current ordinal value of the list item as defined by the [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol \"The HTML <ol> element represents an ordered list of items, typically rendered as a numbered list.\") element. The only allowed value for this attribute is a number, even if the list is displayed with Roman numerals or letters. List items that follow this one continue numbering from the value set. The **value** attribute has no meaning for unordered lists ([`<ul>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul \"The HTML <ul> element represents an unordered list of items, typically rendered as a bulleted list.\")) or for menus ([`<menu>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu \"The HTML <menu> element represents a group of commands that a user can perform or activate. This includes both list menus, which might appear across the top of a screen, as well as context menus, such as those that might appear underneath a button after it has been clicked.\")).\\n\\n**Note**: This attribute was deprecated in HTML4, but reintroduced in HTML5.\\n\\n**Note:** Prior to Gecko\\xA09.0, negative values were incorrectly converted to 0. Starting in Gecko\\xA09.0 all integer values are correctly parsed.'}},{name:\"type\",description:'This character attribute indicates the numbering type:\\n\\n*   `a`: lowercase letters\\n*   `A`: uppercase letters\\n*   `i`: lowercase Roman numerals\\n*   `I`: uppercase Roman numerals\\n*   `1`: numbers\\n\\nThis type overrides the one used by its parent [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol \"The HTML <ol> element represents an ordered list of items, typically rendered as a numbered list.\") element, if any.\\n\\n**Usage note:** This attribute has been deprecated: use the CSS [`list-style-type`](https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type \"The list-style-type CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.\") property instead.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/li\"}]},{name:\"dl\",description:{kind:\"markdown\",value:\"The dl element represents an association list consisting of zero or more name-value groups (a description list). A name-value group consists of one or more names (dt elements) followed by one or more values (dd elements), ignoring any nodes other than dt and dd elements. Within a single dl element, there should not be more than one dt element for each name.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/dl\"}]},{name:\"dt\",description:{kind:\"markdown\",value:\"The dt element represents the term, or name, part of a term-description group in a description list (dl element).\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/dt\"}]},{name:\"dd\",description:{kind:\"markdown\",value:\"The dd element represents the description, definition, or value, part of a term-description group in a description list (dl element).\"},attributes:[{name:\"nowrap\",description:\"If the value of this attribute is set to `yes`, the definition text will not wrap. The default value is `no`.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/dd\"}]},{name:\"figure\",description:{kind:\"markdown\",value:\"The figure element represents some flow content, optionally with a caption, that is self-contained (like a complete sentence) and is typically referenced as a single unit from the main flow of the document.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/figure\"}]},{name:\"figcaption\",description:{kind:\"markdown\",value:\"The figcaption element represents a caption or legend for the rest of the contents of the figcaption element's parent figure element, if any.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/figcaption\"}]},{name:\"main\",description:{kind:\"markdown\",value:\"The main element represents the main content of the body of a document or application. The main content area consists of content that is directly related to or expands upon the central topic of a document or central functionality of an application.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/main\"}]},{name:\"div\",description:{kind:\"markdown\",value:\"The div element has no special meaning at all. It represents its children. It can be used with the class, lang, and title attributes to mark up semantics common to a group of consecutive elements.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/div\"}]},{name:\"a\",description:{kind:\"markdown\",value:\"If the a element has an href attribute, then it represents a hyperlink (a hypertext anchor) labeled by its contents.\"},attributes:[{name:\"href\",description:{kind:\"markdown\",value:\"Contains a URL or a URL fragment that the hyperlink points to.\"}},{name:\"target\",description:{kind:\"markdown\",value:'Specifies where to display the linked URL. It is a name of, or keyword for, a _browsing context_: a tab, window, or `<iframe>`. The following keywords have special meanings:\\n\\n*   `_self`: Load the URL into the same browsing context as the current one. This is the default behavior.\\n*   `_blank`: Load the URL into a new browsing context. This is usually a tab, but users can configure browsers to use new windows instead.\\n*   `_parent`: Load the URL into the parent browsing context of the current one. If there is no parent, this behaves the same way as `_self`.\\n*   `_top`: Load the URL into the top-level browsing context (that is, the \"highest\" browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this behaves the same way as `_self`.\\n\\n**Note:** When using `target`, consider adding `rel=\"noreferrer\"` to avoid exploitation of the `window.opener` API.\\n\\n**Note:** Linking to another page using `target=\"_blank\"` will run the new page on the same process as your page. If the new page is executing expensive JS, your page\\'s performance may suffer. To avoid this use `rel=\"noopener\"`.'}},{name:\"download\",description:{kind:\"markdown\",value:\"This attribute instructs browsers to download a URL instead of navigating to it, so the user will be prompted to save it as a local file. If the attribute has a value, it is used as the pre-filled file name in the Save prompt (the user can still change the file name if they want). There are no restrictions on allowed values, though `/` and `\\\\` are converted to underscores. Most file systems limit some punctuation in file names, and browsers will adjust the suggested name accordingly.\\n\\n**Notes:**\\n\\n*   This attribute only works for [same-origin URLs](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy).\\n*   Although HTTP(s) URLs need to be in the same-origin, [`blob:` URLs](https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL) and [`data:` URLs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) are allowed so that content generated by JavaScript, such as pictures created in an image-editor Web app, can be downloaded.\\n*   If the HTTP header [`Content-Disposition:`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition) gives a different filename than this attribute, the HTTP header takes priority over this attribute.\\n*   If `Content-Disposition:` is set to `inline`, Firefox prioritizes `Content-Disposition`, like the filename case, while Chrome prioritizes the `download` attribute.\"}},{name:\"ping\",description:{kind:\"markdown\",value:'Contains a space-separated list of URLs to which, when the hyperlink is followed, [`POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST \"The HTTP POST method sends data to the server. The type of the body of the request is indicated by the Content-Type header.\") requests with the body `PING` will be sent by the browser (in the background). Typically used for tracking.'}},{name:\"rel\",description:{kind:\"markdown\",value:\"Specifies the relationship of the target object to the link object. The value is a space-separated list of [link types](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types).\"}},{name:\"hreflang\",description:{kind:\"markdown\",value:'This attribute indicates the human language of the linked resource. It is purely advisory, with no built-in functionality. Allowed values are determined by [BCP47](https://www.ietf.org/rfc/bcp/bcp47.txt \"Tags for Identifying Languages\").'}},{name:\"type\",description:{kind:\"markdown\",value:'Specifies the media type in the form of a [MIME type](https://developer.mozilla.org/en-US/docs/Glossary/MIME_type \"MIME type: A\\xA0MIME type\\xA0(now properly called \"media type\", but\\xA0also sometimes \"content type\") is a string sent along\\xA0with a file indicating the type of the file (describing the content format, for example, a sound file might be labeled\\xA0audio/ogg, or an image file\\xA0image/png).\") for the linked URL. It is purely advisory, with no built-in functionality.'}},{name:\"referrerpolicy\",description:\"Indicates which [referrer](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer) to send when fetching the URL:\\n\\n*   `'no-referrer'` means the `Referer:` header will not be sent.\\n*   `'no-referrer-when-downgrade'` means no `Referer:` header will be sent when navigating to an origin without HTTPS. This is the default behavior.\\n*   `'origin'` means the referrer will be the [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin) of the page, not including information after the domain.\\n*   `'origin-when-cross-origin'` meaning that navigations to other origins will be limited to the scheme, the host and the port, while navigations on the same origin will include the referrer's path.\\n*   `'strict-origin-when-cross-origin'`\\n*   `'unsafe-url'` means the referrer will include the origin and path, but not the fragment, password, or username. This is unsafe because it can leak data from secure URLs to insecure ones.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/a\"}]},{name:\"em\",description:{kind:\"markdown\",value:\"The em element represents stress emphasis of its contents.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/em\"}]},{name:\"strong\",description:{kind:\"markdown\",value:\"The strong element represents strong importance, seriousness, or urgency for its contents.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/strong\"}]},{name:\"small\",description:{kind:\"markdown\",value:\"The small element represents side comments such as small print.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/small\"}]},{name:\"s\",description:{kind:\"markdown\",value:\"The s element represents contents that are no longer accurate or no longer relevant.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/s\"}]},{name:\"cite\",description:{kind:\"markdown\",value:\"The cite element represents a reference to a creative work. It must include the title of the work or the name of the author(person, people or organization) or an URL reference, or a reference in abbreviated form as per the conventions used for the addition of citation metadata.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/cite\"}]},{name:\"q\",description:{kind:\"markdown\",value:\"The q element represents some phrasing content quoted from another source.\"},attributes:[{name:\"cite\",description:{kind:\"markdown\",value:\"The value of this attribute is a URL that designates a source document or message for the information quoted. This attribute is intended to point to information explaining the context or the reference for the quote.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/q\"}]},{name:\"dfn\",description:{kind:\"markdown\",value:\"The dfn element represents the defining instance of a term. The paragraph, description list group, or section that is the nearest ancestor of the dfn element must also contain the definition(s) for the term given by the dfn element.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/dfn\"}]},{name:\"abbr\",description:{kind:\"markdown\",value:\"The abbr element represents an abbreviation or acronym, optionally with its expansion. The title attribute may be used to provide an expansion of the abbreviation. The attribute, if specified, must contain an expansion of the abbreviation, and nothing else.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/abbr\"}]},{name:\"ruby\",description:{kind:\"markdown\",value:\"The ruby element allows one or more spans of phrasing content to be marked with ruby annotations. Ruby annotations are short runs of text presented alongside base text, primarily used in East Asian typography as a guide for pronunciation or to include other annotations. In Japanese, this form of typography is also known as furigana. Ruby text can appear on either side, and sometimes both sides, of the base text, and it is possible to control its position using CSS. A more complete introduction to ruby can be found in the Use Cases & Exploratory Approaches for Ruby Markup document as well as in CSS Ruby Module Level 1. [RUBY-UC] [CSSRUBY]\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/ruby\"}]},{name:\"rb\",description:{kind:\"markdown\",value:\"The rb element marks the base text component of a ruby annotation. When it is the child of a ruby element, it doesn't represent anything itself, but its parent ruby element uses it as part of determining what it represents.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/rb\"}]},{name:\"rt\",description:{kind:\"markdown\",value:\"The rt element marks the ruby text component of a ruby annotation. When it is the child of a ruby element or of an rtc element that is itself the child of a ruby element, it doesn't represent anything itself, but its ancestor ruby element uses it as part of determining what it represents.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/rt\"}]},{name:\"rp\",description:{kind:\"markdown\",value:\"The rp element is used to provide fallback text to be shown by user agents that don't support ruby annotations. One widespread convention is to provide parentheses around the ruby text component of a ruby annotation.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/rp\"}]},{name:\"time\",description:{kind:\"markdown\",value:\"The time element represents its contents, along with a machine-readable form of those contents in the datetime attribute. The kind of content is limited to various kinds of dates, times, time-zone offsets, and durations, as described below.\"},attributes:[{name:\"datetime\",description:{kind:\"markdown\",value:\"This attribute indicates the time and/or date of the element and must be in one of the formats described below.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/time\"}]},{name:\"code\",description:{kind:\"markdown\",value:\"The code element represents a fragment of computer code. This could be an XML element name, a file name, a computer program, or any other string that a computer would recognize.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/code\"}]},{name:\"var\",description:{kind:\"markdown\",value:\"The var element represents a variable. This could be an actual variable in a mathematical expression or programming context, an identifier representing a constant, a symbol identifying a physical quantity, a function parameter, or just be a term used as a placeholder in prose.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/var\"}]},{name:\"samp\",description:{kind:\"markdown\",value:\"The samp element represents sample or quoted output from another program or computing system.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/samp\"}]},{name:\"kbd\",description:{kind:\"markdown\",value:\"The kbd element represents user input (typically keyboard input, although it may also be used to represent other input, such as voice commands).\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/kbd\"}]},{name:\"sub\",description:{kind:\"markdown\",value:\"The sub element represents a subscript.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/sub\"}]},{name:\"sup\",description:{kind:\"markdown\",value:\"The sup element represents a superscript.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/sup\"}]},{name:\"i\",description:{kind:\"markdown\",value:\"The i element represents a span of text in an alternate voice or mood, or otherwise offset from the normal prose in a manner indicating a different quality of text, such as a taxonomic designation, a technical term, an idiomatic phrase from another language, transliteration, a thought, or a ship name in Western texts.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/i\"}]},{name:\"b\",description:{kind:\"markdown\",value:\"The b element represents a span of text to which attention is being drawn for utilitarian purposes without conveying any extra importance and with no implication of an alternate voice or mood, such as key words in a document abstract, product names in a review, actionable words in interactive text-driven software, or an article lede.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/b\"}]},{name:\"u\",description:{kind:\"markdown\",value:\"The u element represents a span of text with an unarticulated, though explicitly rendered, non-textual annotation, such as labeling the text as being a proper name in Chinese text (a Chinese proper name mark), or labeling the text as being misspelt.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/u\"}]},{name:\"mark\",description:{kind:\"markdown\",value:\"The mark element represents a run of text in one document marked or highlighted for reference purposes, due to its relevance in another context. When used in a quotation or other block of text referred to from the prose, it indicates a highlight that was not originally present but which has been added to bring the reader's attention to a part of the text that might not have been considered important by the original author when the block was originally written, but which is now under previously unexpected scrutiny. When used in the main prose of a document, it indicates a part of the document that has been highlighted due to its likely relevance to the user's current activity.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/mark\"}]},{name:\"bdi\",description:{kind:\"markdown\",value:\"The bdi element represents a span of text that is to be isolated from its surroundings for the purposes of bidirectional text formatting. [BIDI]\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/bdi\"}]},{name:\"bdo\",description:{kind:\"markdown\",value:\"The bdo element represents explicit text directionality formatting control for its children. It allows authors to override the Unicode bidirectional algorithm by explicitly specifying a direction override. [BIDI]\"},attributes:[{name:\"dir\",description:\"The direction in which text should be rendered in this element's contents. Possible values are:\\n\\n*   `ltr`: Indicates that the text should go in a left-to-right direction.\\n*   `rtl`: Indicates that the text should go in a right-to-left direction.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/bdo\"}]},{name:\"span\",description:{kind:\"markdown\",value:\"The span element doesn't mean anything on its own, but can be useful when used together with the global attributes, e.g. class, lang, or dir. It represents its children.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/span\"}]},{name:\"br\",description:{kind:\"markdown\",value:\"The br element represents a line break.\"},attributes:[{name:\"clear\",description:\"Indicates where to begin the next line after the break.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/br\"}]},{name:\"wbr\",description:{kind:\"markdown\",value:\"The wbr element represents a line break opportunity.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/wbr\"}]},{name:\"ins\",description:{kind:\"markdown\",value:\"The ins element represents an addition to the document.\"},attributes:[{name:\"cite\",description:\"This attribute defines the URI of a resource that explains the change, such as a link to meeting minutes or a ticket in a troubleshooting system.\"},{name:\"datetime\",description:'This attribute indicates the time and date of the change and must be a valid date with an optional time string. If the value cannot be parsed as a date with an optional time string, the element does not have an associated time stamp. For the format of the string without a time, see [Format of a valid date string](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#Format_of_a_valid_date_string \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\") in [Date and time formats used in HTML](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\"). The format of the string if it includes both date and time is covered in [Format of a valid local date and time string](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#Format_of_a_valid_local_date_and_time_string \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\") in [Date and time formats used in HTML](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\").'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/ins\"}]},{name:\"del\",description:{kind:\"markdown\",value:\"The del element represents a removal from the document.\"},attributes:[{name:\"cite\",description:{kind:\"markdown\",value:\"A URI for a resource that explains the change (for example, meeting minutes).\"}},{name:\"datetime\",description:{kind:\"markdown\",value:'This attribute indicates the time and date of the change and must be a valid date string with an optional time. If the value cannot be parsed as a date with an optional time string, the element does not have an associated time stamp. For the format of the string without a time, see [Format of a valid date string](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#Format_of_a_valid_date_string \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\") in [Date and time formats used in HTML](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\"). The format of the string if it includes both date and time is covered in [Format of a valid local date and time string](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#Format_of_a_valid_local_date_and_time_string \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\") in [Date and time formats used in HTML](https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats \"Certain HTML elements use date and/or time values. The formats of the strings that specify these are described in this article.\").'}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/del\"}]},{name:\"picture\",description:{kind:\"markdown\",value:\"The picture element is a container which provides multiple sources to its contained img element to allow authors to declaratively control or give hints to the user agent about which image resource to use, based on the screen pixel density, viewport size, image format, and other factors. It represents its children.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/picture\"}]},{name:\"img\",description:{kind:\"markdown\",value:\"An img element represents an image.\"},attributes:[{name:\"alt\",description:{kind:\"markdown\",value:'This attribute defines an alternative text description of the image.\\n\\n**Note:** Browsers do not always display the image referenced by the element. This is the case for non-graphical browsers (including those used by people with visual impairments), if the user chooses not to display images, or if the browser cannot display the image because it is invalid or an [unsupported type](#Supported_image_formats). In these cases, the browser may replace the image with the text defined in this element\\'s `alt` attribute. You should, for these reasons and others, provide a useful value for `alt` whenever possible.\\n\\n**Note:** Omitting this attribute altogether indicates that the image is a key part of the content, and no textual equivalent is available. Setting this attribute to an empty string (`alt=\"\"`) indicates that this image is _not_ a key part of the content (decorative), and that non-visual browsers may omit it from rendering.'}},{name:\"src\",description:{kind:\"markdown\",value:\"The image URL. This attribute is mandatory for the `<img>` element. On browsers supporting `srcset`, `src` is treated like a candidate image with a pixel density descriptor `1x` unless an image with this pixel density descriptor is already defined in `srcset,` or unless `srcset` contains '`w`' descriptors.\"}},{name:\"srcset\",description:{kind:\"markdown\",value:\"A list of one or more strings separated by commas indicating a set of possible image sources for the user agent to use. Each string is composed of:\\n\\n1.  a URL to an image,\\n2.  optionally, whitespace followed by one of:\\n    *   A width descriptor, or a positive integer directly followed by '`w`'. The width descriptor is divided by the source size given in the `sizes` attribute to calculate the effective pixel density.\\n    *   A pixel density descriptor, which is a positive floating point number directly followed by '`x`'.\\n\\nIf no descriptor is specified, the source is assigned the default descriptor: `1x`.\\n\\nIt is incorrect to mix width descriptors and pixel density descriptors in the same `srcset` attribute. Duplicate descriptors (for instance, two sources in the same `srcset` which are both described with '`2x`') are also invalid.\\n\\nThe user agent selects any one of the available sources at its discretion. This provides them with significant leeway to tailor their selection based on things like user preferences or bandwidth conditions. See our [Responsive images](https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images) tutorial for an example.\"}},{name:\"crossorigin\",valueSet:\"xo\",description:{kind:\"markdown\",value:'This enumerated attribute indicates if the fetching of the related image must be done using CORS or not. [CORS-enabled images](https://developer.mozilla.org/en-US/docs/CORS_Enabled_Image) can be reused in the [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas \"Use the HTML <canvas> element with either the canvas scripting API or the WebGL API to draw graphics and animations.\") element without being \"[tainted](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image#What_is_a_tainted_canvas).\" The allowed values are:'}},{name:\"usemap\",description:{kind:\"markdown\",value:'The partial URL (starting with \\'#\\') of an [image map](https://developer.mozilla.org/en-US/docs/HTML/Element/map) associated with the element.\\n\\n**Note:** You cannot use this attribute if the `<img>` element is a descendant of an [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a \"The HTML <a> element (or anchor element) creates a hyperlink to other web pages, files, locations within the same page, email addresses, or any other URL.\") or [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") element.'}},{name:\"ismap\",valueSet:\"v\",description:{kind:\"markdown\",value:'This Boolean attribute indicates that the image is part of a server-side map. If so, the precise coordinates of a click are sent to the server.\\n\\n**Note:** This attribute is allowed only if the `<img>` element is a descendant of an [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a \"The HTML <a> element (or anchor element) creates a hyperlink to other web pages, files, locations within the same page, email addresses, or any other URL.\") element with a valid [`href`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-href) attribute.'}},{name:\"width\",description:{kind:\"markdown\",value:\"The intrinsic width of the image in pixels.\"}},{name:\"height\",description:{kind:\"markdown\",value:\"The intrinsic height of the image in pixels.\"}},{name:\"decoding\",description:\"Provides an image decoding hint to the browser. The allowed values are:\"},{name:\"decoding\",description:`\\`sync\\`\n\nDecode the image synchronously for atomic presentation with other content.\n\n\\`async\\`\n\nDecode the image asynchronously to reduce delay in presenting other content.\n\n\\`auto\\`\n\nDefault mode, which indicates no preference for the decoding mode. The browser decides what is best for the user.`},{name:\"importance\",description:\"Indicates the relative importance of the resource. Priority hints are delegated using the values:\"},{name:\"importance\",description:\"`auto`: Indicates\\xA0**no\\xA0preference**. The browser may use its own heuristics to decide the priority of the image.\\n\\n`high`: Indicates to the\\xA0browser\\xA0that the image is of\\xA0**high** priority.\\n\\n`low`:\\xA0Indicates to the\\xA0browser\\xA0that the image is of\\xA0**low** priority.\"},{name:\"intrinsicsize\",description:\"This attribute tells the browser to ignore the actual intrinsic size of the image and pretend it\\u2019s the size specified in the attribute. Specifically, the image would raster at these dimensions and `naturalWidth`/`naturalHeight` on images would return the values specified in this attribute. [Explainer](https://github.com/ojanvafai/intrinsicsize-attribute), [examples](https://googlechrome.github.io/samples/intrinsic-size/index.html)\"},{name:\"referrerpolicy\",description:\"A string indicating which referrer to use when fetching the resource:\\n\\n*   `no-referrer:` The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \\\"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\\\") header will not be sent.\\n*   `no-referrer-when-downgrade:` No `Referer` header will be sent when navigating to an origin without TLS (HTTPS). This is a user agent\\u2019s default behavior if no policy is otherwise specified.\\n*   `origin:` The `Referer` header will include the page of origin's scheme, the host, and the port.\\n*   `origin-when-cross-origin:` Navigating to other origins will limit the included referral data to the scheme, the host and the port, while navigating from the same origin will include the referrer's full path.\\n*   `unsafe-url:` The `Referer` header will include the origin and the path, but not the fragment, password, or username. This case is unsafe because it can leak origins and paths from TLS-protected resources to insecure origins.\"},{name:\"sizes\",description:\"A list of one or more strings separated by commas indicating a set of source sizes. Each source size consists of:\\n\\n1.  a media condition. This must be omitted for the last item.\\n2.  a source size value.\\n\\nSource size values specify the intended display size of the image. User agents use the current source size to select one of the sources supplied by the `srcset` attribute, when those sources are described using width ('`w`') descriptors. The selected source size affects the intrinsic size of the image (the image\\u2019s display size if no CSS styling is applied). If the `srcset` attribute is absent, or contains no values with a width (`w`) descriptor, then the `sizes` attribute has no effect.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/img\"}]},{name:\"iframe\",description:{kind:\"markdown\",value:\"The iframe element represents a nested browsing context.\"},attributes:[{name:\"src\",description:{kind:\"markdown\",value:'The URL of the page to embed. Use a value of `about:blank` to embed an empty page that conforms to the [same-origin policy](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy#Inherited_origins). Also note that programatically removing an `<iframe>`\\'s src attribute (e.g. via [`Element.removeAttribute()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute \"The Element method removeAttribute() removes the attribute with the specified name from the element.\")) causes `about:blank` to be loaded in the frame in Firefox (from version 65), Chromium-based browsers, and Safari/iOS.'}},{name:\"srcdoc\",description:{kind:\"markdown\",value:\"Inline HTML to embed, overriding the `src` attribute. If a browser does not support the `srcdoc` attribute, it will fall back to the URL in the `src` attribute.\"}},{name:\"name\",description:{kind:\"markdown\",value:'A targetable name for the embedded browsing context. This can be used in the `target` attribute of the [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a \"The HTML <a> element (or anchor element) creates a hyperlink to other web pages, files, locations within the same page, email addresses, or any other URL.\"), [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\"), or [`<base>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base \"The HTML <base> element specifies the base URL to use for all relative URLs contained within a document. There can be only one <base> element in a document.\") elements; the `formtarget` attribute of the [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") or [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") elements; or the `windowName` parameter in the [`window.open()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open \"The\\xA0Window interface\\'s open() method loads the specified resource into the browsing context (window, <iframe> or tab) with the specified name. If the name doesn\\'t exist, then a new window is opened and the specified resource is loaded into its browsing context.\") method.'}},{name:\"sandbox\",valueSet:\"sb\",description:{kind:\"markdown\",value:'Applies extra restrictions to the content in the frame. The value of the attribute can either be empty to apply all restrictions, or space-separated tokens to lift particular restrictions:\\n\\n*   `allow-forms`: Allows the resource to submit forms. If this keyword is not used, form submission is blocked.\\n*   `allow-modals`: Lets the resource [open modal windows](https://html.spec.whatwg.org/multipage/origin.html#sandboxed-modals-flag).\\n*   `allow-orientation-lock`: Lets the resource [lock the screen orientation](https://developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation).\\n*   `allow-pointer-lock`: Lets the resource use the [Pointer Lock API](https://developer.mozilla.org/en-US/docs/WebAPI/Pointer_Lock).\\n*   `allow-popups`: Allows popups (such as `window.open()`, `target=\"_blank\"`, or `showModalDialog()`). If this keyword is not used, the popup will silently fail to open.\\n*   `allow-popups-to-escape-sandbox`: Lets the sandboxed document open new windows without those windows inheriting the sandboxing. For example, this can safely sandbox an advertisement without forcing the same restrictions upon the page the ad links to.\\n*   `allow-presentation`: Lets the resource start a [presentation session](https://developer.mozilla.org/en-US/docs/Web/API/PresentationRequest).\\n*   `allow-same-origin`: If this token is not used, the resource is treated as being from a special origin that always fails the [same-origin policy](https://developer.mozilla.org/en-US/docs/Glossary/same-origin_policy \"same-origin policy: The same-origin policy is a critical security mechanism that restricts how a document or script loaded from one origin can interact with a resource from another origin.\").\\n*   `allow-scripts`: Lets the resource run scripts (but not create popup windows).\\n*   `allow-storage-access-by-user-activation` : Lets the resource request access to the parent\\'s storage capabilities with the [Storage Access API](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Access_API).\\n*   `allow-top-navigation`: Lets the resource navigate the top-level browsing context (the one named `_top`).\\n*   `allow-top-navigation-by-user-activation`: Lets the resource navigate the top-level browsing context, but only if initiated by a user gesture.\\n\\n**Notes about sandboxing:**\\n\\n*   When the embedded document has the same origin as the embedding page, it is **strongly discouraged** to use both `allow-scripts` and `allow-same-origin`, as that lets the embedded document remove the `sandbox` attribute \\u2014 making it no more secure than not using the `sandbox` attribute at all.\\n*   Sandboxing is useless if the attacker can display content outside a sandboxed `iframe` \\u2014 such as if the viewer opens the frame in a new tab. Such content should be also served from a _separate origin_ to limit potential damage.\\n*   The `sandbox` attribute is unsupported in Internet Explorer 9 and earlier.'}},{name:\"seamless\",valueSet:\"v\"},{name:\"allowfullscreen\",valueSet:\"v\",description:{kind:\"markdown\",value:'Set to `true` if the `<iframe>` can activate fullscreen mode by calling the [`requestFullscreen()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullscreen \"The Element.requestFullscreen() method issues an asynchronous request to make the element be displayed in full-screen mode.\") method.'}},{name:\"width\",description:{kind:\"markdown\",value:\"The width of the frame in CSS pixels. Default is `300`.\"}},{name:\"height\",description:{kind:\"markdown\",value:\"The height of the frame in CSS pixels. Default is `150`.\"}},{name:\"allow\",description:\"Specifies a [feature policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Feature_Policy) for the `<iframe>`.\"},{name:\"allowpaymentrequest\",description:\"Set to `true` if a cross-origin `<iframe>` should be allowed to invoke the [Payment Request API](https://developer.mozilla.org/en-US/docs/Web/API/Payment_Request_API).\"},{name:\"allowpaymentrequest\",description:'This attribute is considered a legacy attribute and redefined as `allow=\"payment\"`.'},{name:\"csp\",description:'A [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) enforced for the embedded resource. See [`HTMLIFrameElement.csp`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/csp \"The csp property of the HTMLIFrameElement interface specifies the Content Security Policy that an embedded document must agree to enforce upon itself.\") for details.'},{name:\"importance\",description:`The download priority of the resource in the \\`<iframe>\\`'s \\`src\\` attribute. Allowed values:\n\n\\`auto\\` (default)\n\nNo preference. The browser uses its own heuristics to decide the priority of the resource.\n\n\\`high\\`\n\nThe resource should be downloaded before other lower-priority page resources.\n\n\\`low\\`\n\nThe resource should be downloaded after other higher-priority page resources.`},{name:\"referrerpolicy\",description:'Indicates which [referrer](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer) to send when fetching the frame\\'s resource:\\n\\n*   `no-referrer`: The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent.\\n*   `no-referrer-when-downgrade` (default): The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent to [origin](https://developer.mozilla.org/en-US/docs/Glossary/origin \"origin: Web content\\'s origin is defined by the scheme (protocol), host (domain), and port of the URL used to access it. Two objects have the same origin only when the scheme, host, and port all match.\")s without [TLS](https://developer.mozilla.org/en-US/docs/Glossary/TLS \"TLS: Transport Layer Security (TLS), previously known as Secure Sockets Layer (SSL), is a protocol used by applications to communicate securely across a network, preventing tampering with and eavesdropping on email, web browsing, messaging, and other protocols.\") ([HTTPS](https://developer.mozilla.org/en-US/docs/Glossary/HTTPS \"HTTPS: HTTPS (HTTP Secure) is an encrypted version of the HTTP protocol. It usually uses SSL or TLS to encrypt all communication between a client and a server. This secure connection allows clients to safely exchange sensitive data with a server, for example for banking activities or online shopping.\")).\\n*   `origin`: The sent referrer will be limited to the origin of the referring page: its [scheme](https://developer.mozilla.org/en-US/docs/Archive/Mozilla/URIScheme), [host](https://developer.mozilla.org/en-US/docs/Glossary/host \"host: A host is a device connected to the Internet (or a local network). Some hosts called servers offer additional services like serving webpages or storing files and emails.\"), and [port](https://developer.mozilla.org/en-US/docs/Glossary/port \"port: For a computer connected to a network with an IP address, a port is a communication endpoint. Ports are designated by numbers, and below 1024 each port is associated by default with a specific protocol.\").\\n*   `origin-when-cross-origin`: The referrer sent to other origins will be limited to the scheme, the host, and the port. Navigations on the same origin will still include the path.\\n*   `same-origin`: A referrer will be sent for [same origin](https://developer.mozilla.org/en-US/docs/Glossary/Same-origin_policy \"same origin: The same-origin policy is a critical security mechanism that restricts how a document or script loaded from one origin can interact with a resource from another origin.\"), but cross-origin requests will contain no referrer information.\\n*   `strict-origin`: Only send the origin of the document as the referrer when the protocol security level stays the same (HTTPS\\u2192HTTPS), but don\\'t send it to a less secure destination (HTTPS\\u2192HTTP).\\n*   `strict-origin-when-cross-origin`: Send a full URL when performing a same-origin request, only send the origin when the protocol security level stays the same (HTTPS\\u2192HTTPS), and send no header to a less secure destination (HTTPS\\u2192HTTP).\\n*   `unsafe-url`: The referrer will include the origin _and_ the path (but not the [fragment](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/hash), [password](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/password), or [username](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/username)). **This value is unsafe**, because it leaks origins and paths from TLS-protected resources to insecure origins.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/iframe\"}]},{name:\"embed\",description:{kind:\"markdown\",value:\"The embed element provides an integration point for an external (typically non-HTML) application or interactive content.\"},attributes:[{name:\"src\",description:{kind:\"markdown\",value:\"The URL\\xA0of the resource being embedded.\"}},{name:\"type\",description:{kind:\"markdown\",value:\"The MIME\\xA0type to use to select the plug-in to instantiate.\"}},{name:\"width\",description:{kind:\"markdown\",value:\"The displayed width of the resource, in [CSS pixels](https://drafts.csswg.org/css-values/#px). This must be an absolute value; percentages are _not_ allowed.\"}},{name:\"height\",description:{kind:\"markdown\",value:\"The displayed height of the resource, in [CSS pixels](https://drafts.csswg.org/css-values/#px). This must be an absolute value; percentages are _not_ allowed.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/embed\"}]},{name:\"object\",description:{kind:\"markdown\",value:\"The object element can represent an external resource, which, depending on the type of the resource, will either be treated as an image, as a nested browsing context, or as an external resource to be processed by a plugin.\"},attributes:[{name:\"data\",description:{kind:\"markdown\",value:\"The address of the resource as a valid URL. At least one of **data** and **type** must be defined.\"}},{name:\"type\",description:{kind:\"markdown\",value:\"The [content type](https://developer.mozilla.org/en-US/docs/Glossary/Content_type) of the resource specified by **data**. At least one of **data** and **type** must be defined.\"}},{name:\"typemustmatch\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This Boolean attribute indicates if the **type** attribute and the actual [content type](https://developer.mozilla.org/en-US/docs/Glossary/Content_type) of the resource must match to be used.\"}},{name:\"name\",description:{kind:\"markdown\",value:\"The name of valid browsing context (HTML5), or the name of the control (HTML 4).\"}},{name:\"usemap\",description:{kind:\"markdown\",value:\"A hash-name reference to a [`<map>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map \\\"The HTML <map> element is used with <area> elements to define an image map (a clickable link area).\\\") element; that is a '#' followed by the value of a [`name`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map#attr-name) of a map element.\"}},{name:\"form\",description:{kind:\"markdown\",value:'The form element, if any, that the object element is associated with (its _form owner_). The value of the attribute must be an ID of a [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element in the same document.'}},{name:\"width\",description:{kind:\"markdown\",value:\"The width of the display resource, in [CSS pixels](https://drafts.csswg.org/css-values/#px). -- (Absolute values only. [NO percentages](https://html.spec.whatwg.org/multipage/embedded-content.html#dimension-attributes))\"}},{name:\"height\",description:{kind:\"markdown\",value:\"The height of the displayed resource, in [CSS pixels](https://drafts.csswg.org/css-values/#px). -- (Absolute values only. [NO percentages](https://html.spec.whatwg.org/multipage/embedded-content.html#dimension-attributes))\"}},{name:\"archive\",description:\"A space-separated list of URIs for archives of resources for the object.\"},{name:\"border\",description:\"The width of a border around the control, in pixels.\"},{name:\"classid\",description:\"The URI of the object's implementation. It can be used together with, or in place of, the **data** attribute.\"},{name:\"codebase\",description:\"The base path used to resolve relative URIs specified by **classid**, **data**, or **archive**. If not specified, the default is the base URI of the current document.\"},{name:\"codetype\",description:\"The content type of the data specified by **classid**.\"},{name:\"declare\",description:\"The presence of this Boolean attribute makes this element a declaration only. The object must be instantiated by a subsequent `<object>` element. In HTML5, repeat the <object> element completely each that that the resource is reused.\"},{name:\"standby\",description:\"A message that the browser can show while loading the object's implementation and data.\"},{name:\"tabindex\",description:\"The position of the element in the tabbing navigation order for the current document.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/object\"}]},{name:\"param\",description:{kind:\"markdown\",value:\"The param element defines parameters for plugins invoked by object elements. It does not represent anything on its own.\"},attributes:[{name:\"name\",description:{kind:\"markdown\",value:\"Name of the parameter.\"}},{name:\"value\",description:{kind:\"markdown\",value:\"Specifies the value of the parameter.\"}},{name:\"type\",description:'Only used if the `valuetype` is set to \"ref\". Specifies the MIME type of values found at the URI specified by value.'},{name:\"valuetype\",description:`Specifies the type of the \\`value\\` attribute. Possible values are:\n\n*   data: Default value. The value is passed to the object's implementation as a string.\n*   ref: The value is a URI to a resource where run-time values are stored.\n*   object: An ID of another [\\`<object>\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object \"The HTML <object> element represents an external resource, which can be treated as an image, a nested browsing context, or a resource to be handled by a plugin.\") in the same document.`}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/param\"}]},{name:\"video\",description:{kind:\"markdown\",value:\"A video element is used for playing videos or movies, and audio files with captions.\"},attributes:[{name:\"src\"},{name:\"crossorigin\",valueSet:\"xo\"},{name:\"poster\"},{name:\"preload\",valueSet:\"pl\"},{name:\"autoplay\",valueSet:\"v\",description:{kind:\"markdown\",value:\"A Boolean attribute; if specified, the video automatically begins to play back as soon as it can do so without stopping to finish loading the data.\"}},{name:\"mediagroup\"},{name:\"loop\",valueSet:\"v\"},{name:\"muted\",valueSet:\"v\"},{name:\"controls\",valueSet:\"v\"},{name:\"width\"},{name:\"height\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/video\"}]},{name:\"audio\",description:{kind:\"markdown\",value:\"An audio element represents a sound or audio stream.\"},attributes:[{name:\"src\",description:{kind:\"markdown\",value:'The URL of the audio to embed. This is subject to [HTTP access controls](https://developer.mozilla.org/en-US/docs/HTTP_access_control). This is optional; you may instead use the [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source \"The HTML <source> element specifies multiple media resources for the <picture>, the <audio> element, or the <video> element.\") element within the audio block to specify the audio to embed.'}},{name:\"crossorigin\",valueSet:\"xo\",description:{kind:\"markdown\",value:'This enumerated attribute indicates whether to use CORS to fetch the related image. [CORS-enabled resources](https://developer.mozilla.org/en-US/docs/CORS_Enabled_Image) can be reused in the [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas \"Use the HTML <canvas> element with either the canvas scripting API or the WebGL API to draw graphics and animations.\") element without being _tainted_. The allowed values are:\\n\\nanonymous\\n\\nSends a cross-origin request without a credential. In other words, it sends the `Origin:` HTTP header without a cookie, X.509 certificate, or performing HTTP Basic authentication. If the server does not give credentials to the origin site (by not setting the `Access-Control-Allow-Origin:` HTTP header), the image will be _tainted_, and its usage restricted.\\n\\nuse-credentials\\n\\nSends a cross-origin request with a credential. In other words, it sends the `Origin:` HTTP header with a cookie, a certificate, or performing HTTP Basic authentication. If the server does not give credentials to the origin site (through `Access-Control-Allow-Credentials:` HTTP header), the image will be _tainted_ and its usage restricted.\\n\\nWhen not present, the resource is fetched without a CORS request (i.e. without sending the `Origin:` HTTP header), preventing its non-tainted used in [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas \"Use the HTML <canvas> element with either the canvas scripting API or the WebGL API to draw graphics and animations.\") elements. If invalid, it is handled as if the enumerated keyword **anonymous** was used. See [CORS settings attributes](https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes) for additional information.'}},{name:\"preload\",valueSet:\"pl\",description:{kind:\"markdown\",value:\"This enumerated attribute is intended to provide a hint to the browser about what the author thinks will lead to the best user experience. It may have one of the following values:\\n\\n*   `none`: Indicates that the audio should not be preloaded.\\n*   `metadata`: Indicates that only audio metadata (e.g. length) is fetched.\\n*   `auto`: Indicates that the whole audio file can be downloaded, even if the user is not expected to use it.\\n*   _empty string_: A synonym of the `auto` value.\\n\\nIf not set, `preload`'s default value is browser-defined (i.e. each browser may have its own default value). The spec advises it to be set to `metadata`.\\n\\n**Usage notes:**\\n\\n*   The `autoplay` attribute has precedence over\\xA0`preload`. If `autoplay` is specified, the browser would obviously need to start downloading the audio for playback.\\n*   The browser is not forced by the specification to follow the value of this attribute; it is a mere hint.\"}},{name:\"autoplay\",valueSet:\"v\",description:{kind:\"markdown\",value:`A Boolean attribute:\\xA0if specified, the audio will automatically begin playback as soon as it can do so, without waiting for the entire audio file to finish downloading.\n\n**Note**: Sites that automatically play audio (or videos with an audio track) can be an unpleasant experience for users, so should be avoided when possible. If you must offer autoplay functionality, you should make it opt-in (requiring a user to specifically enable it). However, this can be useful when creating media elements whose source will be set at a later time, under user control.`}},{name:\"mediagroup\"},{name:\"loop\",valueSet:\"v\",description:{kind:\"markdown\",value:\"A Boolean attribute:\\xA0if specified, the audio player will\\xA0automatically seek back to the start\\xA0upon reaching the end of the audio.\"}},{name:\"muted\",valueSet:\"v\",description:{kind:\"markdown\",value:\"A Boolean attribute that indicates whether the audio will be initially silenced. Its default value is `false`.\"}},{name:\"controls\",valueSet:\"v\",description:{kind:\"markdown\",value:\"If this attribute is present, the browser will offer controls to allow the user to control audio playback, including volume, seeking, and pause/resume playback.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/audio\"}]},{name:\"source\",description:{kind:\"markdown\",value:\"The source element allows authors to specify multiple alternative media resources for media elements. It does not represent anything on its own.\"},attributes:[{name:\"src\",description:{kind:\"markdown\",value:'Required for [`<audio>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio \"The HTML <audio> element is used to embed sound content in documents. It may contain one or more audio sources, represented using the src attribute or the <source> element:\\xA0the browser will choose the most suitable one. It can also be the destination for streamed media, using a MediaStream.\") and [`<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video \"The HTML Video element (<video>) embeds a media player which supports video playback into the document.\"), address of the media resource. The value of this attribute is ignored when the `<source>` element is placed inside a [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture \"The HTML <picture> element contains zero or more <source> elements and one <img> element to provide versions of an image for different display/device scenarios.\") element.'}},{name:\"type\",description:{kind:\"markdown\",value:\"The MIME-type of the resource, optionally with a `codecs` parameter. See [RFC 4281](https://tools.ietf.org/html/rfc4281) for information about how to specify codecs.\"}},{name:\"sizes\",description:'Is a list of source sizes that describes the final rendered width of the image represented by the source. Each source size consists of a comma-separated list of media condition-length pairs. This information is used by the browser to determine, before laying the page out, which image defined in [`srcset`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source#attr-srcset) to use.  \\nThe `sizes` attribute has an effect only when the [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source \"The HTML <source> element specifies multiple media resources for the <picture>, the <audio> element, or the <video> element.\") element is the direct child of a [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture \"The HTML <picture> element contains zero or more <source> elements and one <img> element to provide versions of an image for different display/device scenarios.\") element.'},{name:\"srcset\",description:\"A list of one or more strings separated by commas indicating a set of possible images represented by the source for the browser to use. Each string is composed of:\\n\\n1.  one URL to an image,\\n2.  a width descriptor, that is a positive integer directly followed by `'w'`. The default value, if missing, is the infinity.\\n3.  a pixel density descriptor, that is a positive floating number directly followed by `'x'`. The default value, if missing, is `1x`.\\n\\nEach string in the list must have at least a width descriptor or a pixel density descriptor to be valid. Among the list, there must be only one string containing the same tuple of width descriptor and pixel density descriptor.  \\nThe browser chooses the most adequate image to display at a given point of time.  \\nThe `srcset` attribute has an effect only when the [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source \\\"The HTML <source> element specifies multiple media resources for the <picture>, the <audio> element, or the <video> element.\\\") element is the direct child of a [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture \\\"The HTML <picture> element contains zero or more <source> elements and one <img> element to provide versions of an image for different display/device scenarios.\\\") element.\"},{name:\"media\",description:'[Media query](https://developer.mozilla.org/en-US/docs/CSS/Media_queries) of the resource\\'s intended media; this should be used only in a [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture \"The HTML <picture> element contains zero or more <source> elements and one <img> element to provide versions of an image for different display/device scenarios.\") element.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/source\"}]},{name:\"track\",description:{kind:\"markdown\",value:\"The track element allows authors to specify explicit external timed text tracks for media elements. It does not represent anything on its own.\"},attributes:[{name:\"default\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This attribute indicates that the track should be enabled unless the user's preferences indicate that another track is more appropriate. This may only be used on one `track` element per media element.\"}},{name:\"kind\",valueSet:\"tk\",description:{kind:\"markdown\",value:\"How the text track is meant to be used. If omitted the default kind is `subtitles`. If the attribute is not present, it will use the `subtitles`. If the attribute contains an invalid value, it will use `metadata`. (Versions of Chrome earlier than 52 treated an invalid value as `subtitles`.)\\xA0The following keywords are allowed:\\n\\n*   `subtitles`\\n    *   Subtitles provide translation of content that cannot be understood by the viewer. For example dialogue or text that is not English in an English language film.\\n    *   Subtitles may contain additional content, usually extra background information. For example the text at the beginning of the Star Wars films, or the date, time, and location of a scene.\\n*   `captions`\\n    *   Closed captions provide a transcription and possibly a translation of audio.\\n    *   It may include important non-verbal information such as music cues or sound effects. It may indicate the cue's source (e.g. music, text, character).\\n    *   Suitable for users who are deaf or when the sound is muted.\\n*   `descriptions`\\n    *   Textual description of the video content.\\n    *   Suitable for users who are blind or where the video cannot be seen.\\n*   `chapters`\\n    *   Chapter titles are intended to be used when the user is navigating the media resource.\\n*   `metadata`\\n    *   Tracks used by scripts. Not visible to the user.\"}},{name:\"label\",description:{kind:\"markdown\",value:\"A user-readable title of the text track which is used by the browser when listing available text tracks.\"}},{name:\"src\",description:{kind:\"markdown\",value:'Address of the track (`.vtt` file). Must be a valid URL. This attribute must be specified and its URL value must have the same origin as the document \\u2014 unless the [`<audio>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio \"The HTML <audio> element is used to embed sound content in documents. It may contain one or more audio sources, represented using the src attribute or the <source> element:\\xA0the browser will choose the most suitable one. It can also be the destination for streamed media, using a MediaStream.\") or [`<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video \"The HTML Video element (<video>) embeds a media player which supports video playback into the document.\") parent element of the `track` element has a [`crossorigin`](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) attribute.'}},{name:\"srclang\",description:{kind:\"markdown\",value:\"Language of the track text data. It must be a valid [BCP 47](https://r12a.github.io/app-subtags/) language tag. If the `kind` attribute is set to\\xA0`subtitles,` then `srclang` must be defined.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/track\"}]},{name:\"map\",description:{kind:\"markdown\",value:\"The map element, in conjunction with an img element and any area element descendants, defines an image map. The element represents its children.\"},attributes:[{name:\"name\",description:{kind:\"markdown\",value:\"The name attribute gives the map a name so that it can be referenced. The attribute must be present and must have a non-empty value with no space characters. The value of the name attribute must not be a compatibility-caseless match for the value of the name attribute of another map element in the same document. If the id attribute is also specified, both attributes must have the same value.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/map\"}]},{name:\"area\",description:{kind:\"markdown\",value:\"The area element represents either a hyperlink with some text and a corresponding area on an image map, or a dead area on an image map.\"},attributes:[{name:\"alt\"},{name:\"coords\"},{name:\"shape\",valueSet:\"sh\"},{name:\"href\"},{name:\"target\"},{name:\"download\"},{name:\"ping\"},{name:\"rel\"},{name:\"hreflang\"},{name:\"type\"},{name:\"accesskey\",description:\"Specifies a keyboard navigation accelerator for the element. Pressing ALT or a similar key in association with the specified character selects the form control correlated with that key sequence. Page designers are forewarned to avoid key sequences already bound to browsers. This attribute is global since HTML5.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/area\"}]},{name:\"table\",description:{kind:\"markdown\",value:\"The table element represents data with more than one dimension, in the form of a table.\"},attributes:[{name:\"border\"},{name:\"align\",description:'This enumerated attribute indicates how the table must be aligned inside the containing document. It may have the following values:\\n\\n*   left: the table is displayed on the left side of the document;\\n*   center: the table is displayed in the center of the document;\\n*   right: the table is displayed on the right side of the document.\\n\\n**Usage Note**\\n\\n*   **Do not use this attribute**, as it has been deprecated. The [`<table>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table \"The HTML <table> element represents tabular data \\u2014 that is, information presented in a two-dimensional table comprised of rows and columns of cells containing data.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/CSS). Set [`margin-left`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-left \"The margin-left CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") and [`margin-right`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin-right \"The margin-right CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.\") to `auto` or [`margin`](https://developer.mozilla.org/en-US/docs/Web/CSS/margin \"The margin CSS property sets the margin area on all four sides of an element. It is a shorthand for margin-top, margin-right, margin-bottom, and margin-left.\") to `0 auto` to achieve an effect that is similar to the align attribute.\\n*   Prior to Firefox 4, Firefox also supported the `middle`, `absmiddle`, and `abscenter` values as synonyms of `center`, in quirks mode only.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/table\"}]},{name:\"caption\",description:{kind:\"markdown\",value:\"The caption element represents the title of the table that is its parent, if it has a parent and that is a table element.\"},attributes:[{name:\"align\",description:`This enumerated attribute indicates how the caption must be aligned with respect to the table. It may have one of the following values:\n\n\\`left\\`\n\nThe caption is displayed to the left of the table.\n\n\\`top\\`\n\nThe caption is displayed above the table.\n\n\\`right\\`\n\nThe caption is displayed to the right of the table.\n\n\\`bottom\\`\n\nThe caption is displayed below the table.\n\n**Usage note:** Do not use this attribute, as it has been deprecated. The [\\`<caption>\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption \"The HTML Table Caption element (<caption>) specifies the caption (or title) of a table, and if used is always the first child of a <table>.\") element should be styled using the [CSS](https://developer.mozilla.org/en-US/docs/CSS) properties [\\`caption-side\\`](https://developer.mozilla.org/en-US/docs/Web/CSS/caption-side \"The caption-side CSS property puts the content of a table's <caption> on the specified side. The values are relative to the writing-mode of the table.\") and [\\`text-align\\`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\").`}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/caption\"}]},{name:\"colgroup\",description:{kind:\"markdown\",value:\"The colgroup element represents a group of one or more columns in the table that is its parent, if it has a parent and that is a table element.\"},attributes:[{name:\"span\"},{name:\"align\",description:'This enumerated attribute specifies how horizontal alignment of each column cell content will be handled. Possible values are:\\n\\n*   `left`, aligning the content to the left of the cell\\n*   `center`, centering the content in the cell\\n*   `right`, aligning the content to the right of the cell\\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-charoff) attributes Unimplemented (see [bug\\xA02212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\\n\\nIf this attribute is not set, the `left` value is assumed. The descendant [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col \"The HTML <col> element defines a column within a table and is used for defining common semantics on all common cells. It is generally found within a <colgroup> element.\") elements may override this value using their own [`align`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-align) attribute.\\n\\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\\n\\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values:\\n    *   Do not try to set the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on a selector giving a [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup \"The HTML <colgroup> element defines a group of columns within a table.\") element. Because [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td \"The HTML <td> element defines a cell of a table that contains data. It participates in the table model.\") elements are not descendant of the [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup \"The HTML <colgroup> element defines a group of columns within a table.\") element, they won\\'t inherit it.\\n    *   If the table doesn\\'t use a [`colspan`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-colspan) attribute, use one `td:nth-child(an+b)` CSS selector per column, where a is the total number of the columns in the table and b is the ordinal position of this column in the table. Only after this selector the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property can be used.\\n    *   If the table does use a [`colspan`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-colspan) attribute, the effect can be achieved by combining adequate CSS attribute selectors like `[colspan=n]`, though this is not trivial.\\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/colgroup\"}]},{name:\"col\",description:{kind:\"markdown\",value:\"If a col element has a parent and that is a colgroup element that itself has a parent that is a table element, then the col element represents one or more columns in the column group represented by that colgroup.\"},attributes:[{name:\"span\"},{name:\"align\",description:'This enumerated attribute specifies how horizontal alignment of each column cell content will be handled. Possible values are:\\n\\n*   `left`, aligning the content to the left of the cell\\n*   `center`, centering the content in the cell\\n*   `right`, aligning the content to the right of the cell\\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-charoff) attributes Unimplemented (see [bug\\xA02212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\\n\\nIf this attribute is not set, its value is inherited from the [`align`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup#attr-align) of the [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup \"The HTML <colgroup> element defines a group of columns within a table.\") element this `<col>` element belongs too. If there are none, the `left` value is assumed.\\n\\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\\n\\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values:\\n    *   Do not try to set the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on a selector giving a [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col \"The HTML <col> element defines a column within a table and is used for defining common semantics on all common cells. It is generally found within a <colgroup> element.\") element. Because [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td \"The HTML <td> element defines a cell of a table that contains data. It participates in the table model.\") elements are not descendant of the [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col \"The HTML <col> element defines a column within a table and is used for defining common semantics on all common cells. It is generally found within a <colgroup> element.\") element, they won\\'t inherit it.\\n    *   If the table doesn\\'t use a [`colspan`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-colspan) attribute, use the `td:nth-child(an+b)` CSS selector. Set `a` to zero and `b` to the position of the column in the table, e.g. `td:nth-child(2) { text-align: right; }` to right-align the second column.\\n    *   If the table does use a [`colspan`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-colspan) attribute, the effect can be achieved by combining adequate CSS attribute selectors like `[colspan=n]`, though this is not trivial.\\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/col\"}]},{name:\"tbody\",description:{kind:\"markdown\",value:\"The tbody element represents a block of rows that consist of a body of data for the parent table element, if the tbody element has a parent and it is a table.\"},attributes:[{name:\"align\",description:'This enumerated attribute specifies how horizontal alignment of each cell content will be handled. Possible values are:\\n\\n*   `left`, aligning the content to the left of the cell\\n*   `center`, centering the content in the cell\\n*   `right`, aligning the content to the right of the cell\\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-charoff) attributes.\\n\\nIf this attribute is not set, the `left` value is assumed.\\n\\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\\n\\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, use the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on it.\\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/tbody\"}]},{name:\"thead\",description:{kind:\"markdown\",value:\"The thead element represents the block of rows that consist of the column labels (headers) for the parent table element, if the thead element has a parent and it is a table.\"},attributes:[{name:\"align\",description:'This enumerated attribute specifies how horizontal alignment of each cell content will be handled. Possible values are:\\n\\n*   `left`, aligning the content to the left of the cell\\n*   `center`, centering the content in the cell\\n*   `right`, aligning the content to the right of the cell\\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead#attr-charoff) attributes Unimplemented (see [bug\\xA02212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\\n\\nIf this attribute is not set, the `left` value is assumed.\\n\\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\\n\\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, use the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on it.\\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/thead\"}]},{name:\"tfoot\",description:{kind:\"markdown\",value:\"The tfoot element represents the block of rows that consist of the column summaries (footers) for the parent table element, if the tfoot element has a parent and it is a table.\"},attributes:[{name:\"align\",description:'This enumerated attribute specifies how horizontal alignment of each cell content will be handled. Possible values are:\\n\\n*   `left`, aligning the content to the left of the cell\\n*   `center`, centering the content in the cell\\n*   `right`, aligning the content to the right of the cell\\n*   `justify`, inserting spaces into the textual content so that the content is justified in the cell\\n*   `char`, aligning the textual content on a special character with a minimal offset, defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody#attr-charoff) attributes Unimplemented (see [bug\\xA02212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\\n\\nIf this attribute is not set, the `left` value is assumed.\\n\\n**Note:** Do not use this attribute as it is obsolete (not supported) in the latest standard.\\n\\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, use the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property on it.\\n*   To achieve the same effect as the `char` value, in CSS3, you can use the value of the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot#attr-char) as the value of the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property Unimplemented.'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/tfoot\"}]},{name:\"tr\",description:{kind:\"markdown\",value:\"The tr element represents a row of cells in a table.\"},attributes:[{name:\"align\",description:'A [`DOMString`](https://developer.mozilla.org/en-US/docs/Web/API/DOMString \"DOMString is a UTF-16 String. As JavaScript already uses such strings, DOMString is mapped directly to a String.\") which specifies how the cell\\'s context should be aligned horizontally within the cells in the row; this is shorthand for using `align` on every cell in the row individually. Possible values are:\\n\\n`left`\\n\\nAlign the content of each cell at its left edge.\\n\\n`center`\\n\\nCenter the contents of each cell between their left and right edges.\\n\\n`right`\\n\\nAlign the content of each cell at its right edge.\\n\\n`justify`\\n\\nWiden whitespaces within the text of each cell so that the text fills the full width of each cell (full justification).\\n\\n`char`\\n\\nAlign each cell in the row on a specific character (such that each row in the column that is configured this way will horizontally align its cells on that character). This uses the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr#attr-charoff) to establish the alignment character (typically \".\" or \",\" when aligning numerical data) and the number of characters that should follow the alignment character. This alignment type was never widely supported.\\n\\nIf no value is expressly set for `align`, the parent node\\'s value is inherited.\\n\\nInstead of using the obsolete `align` attribute, you should instead use the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property to establish `left`, `center`, `right`, or `justify` alignment for the row\\'s cells. To apply character-based alignment, set the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property to the alignment character (such as `\".\"` or `\",\"`).'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/tr\"}]},{name:\"td\",description:{kind:\"markdown\",value:\"The td element represents a data cell in a table.\"},attributes:[{name:\"colspan\"},{name:\"rowspan\"},{name:\"headers\"},{name:\"abbr\",description:`This attribute contains a short abbreviated description of the cell's content. Some user-agents, such as speech readers, may present this description before the content itself.\n\n**Note:** Do not use this attribute as it is obsolete in the latest standard. Alternatively, you can put the abbreviated description inside the cell and place the long content in the **title** attribute.`},{name:\"align\",description:'This enumerated attribute specifies how the cell content\\'s horizontal alignment will be handled. Possible values are:\\n\\n*   `left`: The content is aligned to the left of the cell.\\n*   `center`: The content is centered in the cell.\\n*   `right`: The content is aligned to the right of the cell.\\n*   `justify` (with text only): The content is stretched out inside the cell so that it covers its entire width.\\n*   `char` (with text only): The content is aligned to a character inside the `<th>` element with minimal offset. This character is defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-charoff) attributes Unimplemented (see [bug\\xA02212](https://bugzilla.mozilla.org/show_bug.cgi?id=2212 \"character alignment not implemented (align=char, charoff=, text-align:<string>)\")).\\n\\nThe default value when this attribute is not specified is `left`.\\n\\n**Note:** Do not use this attribute as it is obsolete in the latest standard.\\n\\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, apply the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property to the element.\\n*   To achieve the same effect as the `char` value, give the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property the same value you would use for the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td#attr-char). Unimplemented in CSS3.'},{name:\"axis\",description:\"This attribute contains a list of space-separated strings. Each string is the `id` of a group of cells that this header applies to.\\n\\n**Note:** Do not use this attribute as it is obsolete in the latest standard.\"},{name:\"bgcolor\",description:`This attribute defines the background color of each cell in a column. It consists of a 6-digit hexadecimal code as defined in [sRGB](https://www.w3.org/Graphics/Color/sRGB) and is prefixed by '#'. This attribute may be used with one of sixteen predefined color strings:\n\n\\xA0\n\n\\`black\\` = \"#000000\"\n\n\\xA0\n\n\\`green\\` = \"#008000\"\n\n\\xA0\n\n\\`silver\\` = \"#C0C0C0\"\n\n\\xA0\n\n\\`lime\\` = \"#00FF00\"\n\n\\xA0\n\n\\`gray\\` = \"#808080\"\n\n\\xA0\n\n\\`olive\\` = \"#808000\"\n\n\\xA0\n\n\\`white\\` = \"#FFFFFF\"\n\n\\xA0\n\n\\`yellow\\` = \"#FFFF00\"\n\n\\xA0\n\n\\`maroon\\` = \"#800000\"\n\n\\xA0\n\n\\`navy\\` = \"#000080\"\n\n\\xA0\n\n\\`red\\` = \"#FF0000\"\n\n\\xA0\n\n\\`blue\\` = \"#0000FF\"\n\n\\xA0\n\n\\`purple\\` = \"#800080\"\n\n\\xA0\n\n\\`teal\\` = \"#008080\"\n\n\\xA0\n\n\\`fuchsia\\` = \"#FF00FF\"\n\n\\xA0\n\n\\`aqua\\` = \"#00FFFF\"\n\n**Note:** Do not use this attribute, as it is non-standard and only implemented in some versions of Microsoft Internet Explorer: The [\\`<td>\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td \"The HTML <td> element defines a cell of a table that contains data. It participates in the table model.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/CSS). To create a similar effect use the [\\`background-color\\`](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color \"The background-color CSS property sets the background color of an element.\") property in [CSS](https://developer.mozilla.org/en-US/docs/CSS) instead.`}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/td\"}]},{name:\"th\",description:{kind:\"markdown\",value:\"The th element represents a header cell in a table.\"},attributes:[{name:\"colspan\"},{name:\"rowspan\"},{name:\"headers\"},{name:\"scope\",valueSet:\"s\"},{name:\"sorted\"},{name:\"abbr\",description:{kind:\"markdown\",value:\"This attribute contains a short abbreviated description of the cell's content. Some user-agents, such as speech readers, may present this description before the content itself.\"}},{name:\"align\",description:'This enumerated attribute specifies how the cell content\\'s horizontal alignment will be handled. Possible values are:\\n\\n*   `left`: The content is aligned to the left of the cell.\\n*   `center`: The content is centered in the cell.\\n*   `right`: The content is aligned to the right of the cell.\\n*   `justify` (with text only): The content is stretched out inside the cell so that it covers its entire width.\\n*   `char` (with text only): The content is aligned to a character inside the `<th>` element with minimal offset. This character is defined by the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-char) and [`charoff`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-charoff) attributes.\\n\\nThe default value when this attribute is not specified is `left`.\\n\\n**Note:** Do not use this attribute as it is obsolete in the latest standard.\\n\\n*   To achieve the same effect as the `left`, `center`, `right` or `justify` values, apply the CSS [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property to the element.\\n*   To achieve the same effect as the `char` value, give the [`text-align`](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align \"The text-align CSS property sets the horizontal alignment of an inline or table-cell box. This means it works like vertical-align but in the horizontal direction.\") property the same value you would use for the [`char`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-char). Unimplemented in CSS3.'},{name:\"axis\",description:\"This attribute contains a list of space-separated strings. Each string is the `id` of a group of cells that this header applies to.\\n\\n**Note:** Do not use this attribute as it is obsolete in the latest standard: use the [`scope`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th#attr-scope) attribute instead.\"},{name:\"bgcolor\",description:`This attribute defines the background color of each cell in a column. It consists of a 6-digit hexadecimal code as defined in [sRGB](https://www.w3.org/Graphics/Color/sRGB) and is prefixed by '#'. This attribute may be used with one of sixteen predefined color strings:\n\n\\xA0\n\n\\`black\\` = \"#000000\"\n\n\\xA0\n\n\\`green\\` = \"#008000\"\n\n\\xA0\n\n\\`silver\\` = \"#C0C0C0\"\n\n\\xA0\n\n\\`lime\\` = \"#00FF00\"\n\n\\xA0\n\n\\`gray\\` = \"#808080\"\n\n\\xA0\n\n\\`olive\\` = \"#808000\"\n\n\\xA0\n\n\\`white\\` = \"#FFFFFF\"\n\n\\xA0\n\n\\`yellow\\` = \"#FFFF00\"\n\n\\xA0\n\n\\`maroon\\` = \"#800000\"\n\n\\xA0\n\n\\`navy\\` = \"#000080\"\n\n\\xA0\n\n\\`red\\` = \"#FF0000\"\n\n\\xA0\n\n\\`blue\\` = \"#0000FF\"\n\n\\xA0\n\n\\`purple\\` = \"#800080\"\n\n\\xA0\n\n\\`teal\\` = \"#008080\"\n\n\\xA0\n\n\\`fuchsia\\` = \"#FF00FF\"\n\n\\xA0\n\n\\`aqua\\` = \"#00FFFF\"\n\n**Note:** Do not use this attribute, as it is non-standard and only implemented in some versions of Microsoft Internet Explorer: The [\\`<th>\\`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th \"The HTML <th> element defines a cell as header of a group of table cells. The exact nature of this group is defined by the scope and headers attributes.\") element should be styled using [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS). To create a similar effect use the [\\`background-color\\`](https://developer.mozilla.org/en-US/docs/Web/CSS/background-color \"The background-color CSS property sets the background color of an element.\") property in [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS) instead.`}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/th\"}]},{name:\"form\",description:{kind:\"markdown\",value:\"The form element represents a collection of form-associated elements, some of which can represent editable values that can be submitted to a server for processing.\"},attributes:[{name:\"accept-charset\",description:{kind:\"markdown\",value:'A space- or comma-delimited list of character encodings that the server accepts. The browser uses them in the order in which they are listed. The default value, the reserved string `\"UNKNOWN\"`, indicates the same encoding as that of the document containing the form element.  \\nIn previous versions of HTML, the different character encodings could be delimited by spaces or commas. In HTML5, only spaces are allowed as delimiters.'}},{name:\"action\",description:{kind:\"markdown\",value:'The URI of a program that processes the form information. This value can be overridden by a [`formaction`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formaction) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element.'}},{name:\"autocomplete\",valueSet:\"o\",description:{kind:\"markdown\",value:\"Indicates whether input elements can by default have their values automatically completed by the browser. This setting can be overridden by an `autocomplete` attribute on an element belonging to the form. Possible values are:\\n\\n*   `off`: The user must explicitly enter a value into each field for every use, or the document provides its own auto-completion method; the browser does not automatically complete entries.\\n*   `on`: The browser can automatically complete values based on values that the user has previously entered in the form.\\n\\nFor most modern browsers (including Firefox 38+, Google Chrome 34+, IE 11+) setting the autocomplete attribute will not prevent a browser's password manager from asking the user if they want to store login fields (username and password), if the user permits the storage the browser will autofill the login the next time the user visits the page. See [The autocomplete attribute and login fields](https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion#The_autocomplete_attribute_and_login_fields).\"}},{name:\"enctype\",valueSet:\"et\",description:{kind:\"markdown\",value:'When the value of the `method` attribute is `post`, enctype is the [MIME type](https://en.wikipedia.org/wiki/Mime_type) of content that is used to submit the form to the server. Possible values are:\\n\\n*   `application/x-www-form-urlencoded`: The default value if the attribute is not specified.\\n*   `multipart/form-data`: The value used for an [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element with the `type` attribute set to \"file\".\\n*   `text/plain`: (HTML5)\\n\\nThis value can be overridden by a [`formenctype`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formenctype) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element.'}},{name:\"method\",valueSet:\"m\",description:{kind:\"markdown\",value:'The [HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP) method that the browser uses to submit the form. Possible values are:\\n\\n*   `post`: Corresponds to the HTTP [POST method](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5) ; form data are included in the body of the form and sent to the server.\\n*   `get`: Corresponds to the HTTP [GET method](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3); form data are appended to the `action` attribute URI with a \\'?\\' as separator, and the resulting URI is sent to the server. Use this method when the form has no side-effects and contains only ASCII characters.\\n*   `dialog`: Use when the form is inside a\\xA0[`<dialog>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog \"The HTML <dialog> element represents a dialog box or other interactive component, such as an inspector or window.\") element to close the dialog when submitted.\\n\\nThis value can be overridden by a [`formmethod`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formmethod) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element.'}},{name:\"name\",description:{kind:\"markdown\",value:\"The name of the form. In HTML 4, its use is deprecated (`id` should be used instead). It must be unique among the forms in a document and not just an empty string in HTML 5.\"}},{name:\"novalidate\",valueSet:\"v\",description:{kind:\"markdown\",value:'This Boolean attribute indicates that the form is not to be validated when submitted. If this attribute is not specified (and therefore the form is validated), this default setting can be overridden by a [`formnovalidate`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formnovalidate) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element belonging to the form.'}},{name:\"target\",description:{kind:\"markdown\",value:'A name or keyword indicating where to display the response that is received after submitting the form. In HTML 4, this is the name/keyword for a frame. In HTML5, it is a name/keyword for a _browsing context_ (for example, tab, window, or inline frame). The following keywords have special meanings:\\n\\n*   `_self`: Load the response into the same HTML 4 frame (or HTML5 browsing context) as the current one. This value is the default if the attribute is not specified.\\n*   `_blank`: Load the response into a new unnamed HTML 4 window or HTML5 browsing context.\\n*   `_parent`: Load the response into the HTML 4 frameset parent of the current frame, or HTML5 parent browsing context of the current one. If there is no parent, this option behaves the same way as `_self`.\\n*   `_top`: HTML 4: Load the response into the full original window, and cancel all other frames. HTML5: Load the response into the top-level browsing context (i.e., the browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this option behaves the same way as `_self`.\\n*   _iframename_: The response is displayed in a named [`<iframe>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe \"The HTML Inline Frame element (<iframe>) represents a nested browsing context, embedding another HTML page into the current one.\").\\n\\nHTML5: This value can be overridden by a [`formtarget`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formtarget) attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") or [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element.'}},{name:\"accept\",description:'A comma-separated list of content types that the server accepts.\\n\\n**Usage note:** This attribute has been removed in HTML5 and should no longer be used. Instead, use the [`accept`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept) attribute of the specific [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element.'},{name:\"autocapitalize\",description:\"This is a nonstandard attribute used by iOS Safari Mobile which controls whether and how the text value for textual form control descendants should be automatically capitalized as it is entered/edited by the user. If the `autocapitalize` attribute is specified on an individual form control descendant, it trumps the form-wide `autocapitalize` setting. The non-deprecated values are available in iOS 5 and later. The default value is `sentences`. Possible values are:\\n\\n*   `none`: Completely disables automatic capitalization\\n*   `sentences`: Automatically capitalize the first letter of sentences.\\n*   `words`: Automatically capitalize the first letter of words.\\n*   `characters`: Automatically capitalize all characters.\\n*   `on`: Deprecated since iOS 5.\\n*   `off`: Deprecated since iOS 5.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/form\"}]},{name:\"label\",description:{kind:\"markdown\",value:\"The label element represents a caption in a user interface. The caption can be associated with a specific form control, known as the label element's labeled control, either using the for attribute, or by putting the form control inside the label element itself.\"},attributes:[{name:\"form\",description:{kind:\"markdown\",value:'The [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element with which the label is associated (its _form owner_). If specified, the value of the attribute is the `id` of a [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element in the same document. This lets you place label elements anywhere within a document, not just as descendants of their form elements.'}},{name:\"for\",description:{kind:\"markdown\",value:\"The [`id`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-id) of a [labelable](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Form_labelable) form-related element in the same document as the `<label>` element. The first element in the document with an `id` matching the value of the `for` attribute is the _labeled control_ for this label element, if it is a labelable element. If it is\\xA0not labelable then the `for` attribute has no effect. If there are other elements which also match the `id` value, later in the document, they are not considered.\\n\\n**Note**: A `<label>` element can have both a `for` attribute and a contained control element, as long as the `for` attribute points to the contained control element.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/label\"}]},{name:\"input\",description:{kind:\"markdown\",value:\"The input element represents a typed data field, usually with a form control to allow the user to edit the data.\"},attributes:[{name:\"accept\"},{name:\"alt\"},{name:\"autocomplete\",valueSet:\"inputautocomplete\"},{name:\"autofocus\",valueSet:\"v\"},{name:\"checked\",valueSet:\"v\"},{name:\"dirname\"},{name:\"disabled\",valueSet:\"v\"},{name:\"form\"},{name:\"formaction\"},{name:\"formenctype\",valueSet:\"et\"},{name:\"formmethod\",valueSet:\"fm\"},{name:\"formnovalidate\",valueSet:\"v\"},{name:\"formtarget\"},{name:\"height\"},{name:\"inputmode\",valueSet:\"im\"},{name:\"list\"},{name:\"max\"},{name:\"maxlength\"},{name:\"min\"},{name:\"minlength\"},{name:\"multiple\",valueSet:\"v\"},{name:\"name\"},{name:\"pattern\"},{name:\"placeholder\"},{name:\"readonly\",valueSet:\"v\"},{name:\"required\",valueSet:\"v\"},{name:\"size\"},{name:\"src\"},{name:\"step\"},{name:\"type\",valueSet:\"t\"},{name:\"value\"},{name:\"width\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/input\"}]},{name:\"button\",description:{kind:\"markdown\",value:\"The button element represents a button labeled by its contents.\"},attributes:[{name:\"autofocus\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This Boolean attribute lets you specify that the button should have input focus when the page loads, unless the user overrides it, for example by typing in a different control. Only one form-associated element in a document can have this attribute specified.\"}},{name:\"disabled\",valueSet:\"v\",description:{kind:\"markdown\",value:'This Boolean attribute indicates that the user cannot interact with the button. If this attribute is not specified, the button inherits its setting from the containing element, for example [`<fieldset>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset \"The HTML <fieldset> element is used to group several controls as well as labels (<label>) within a web form.\"); if there is no containing element with the **disabled** attribute set, then the button is enabled.\\n\\nFirefox will, unlike other browsers, by default, [persist the dynamic disabled state](https://stackoverflow.com/questions/5985839/bug-with-firefox-disabled-attribute-of-input-not-resetting-when-refreshing) of a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") across page loads. Use the [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-autocomplete) attribute to control this feature.'}},{name:\"form\",description:{kind:\"markdown\",value:'The form element that the button is associated with (its _form owner_). The value of the attribute must be the **id** attribute of a [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element in the same document. If this attribute is not specified, the `<button>` element will be associated to an ancestor [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element, if one exists. This attribute enables you to associate `<button>` elements to [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") elements anywhere within a document, not just as descendants of [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") elements.'}},{name:\"formaction\",description:{kind:\"markdown\",value:\"The URI of a program that processes the information submitted by the button. If specified, it overrides the [`action`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-action) attribute of the button's form owner.\"}},{name:\"formenctype\",valueSet:\"et\",description:{kind:\"markdown\",value:'If the button is a submit button, this attribute specifies the type of content that is used to submit the form to the server. Possible values are:\\n\\n*   `application/x-www-form-urlencoded`: The default value if the attribute is not specified.\\n*   `multipart/form-data`: Use this value if you are using an [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") element with the [`type`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-type) attribute set to `file`.\\n*   `text/plain`\\n\\nIf this attribute is specified, it overrides the [`enctype`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-enctype) attribute of the button\\'s form owner.'}},{name:\"formmethod\",valueSet:\"fm\",description:{kind:\"markdown\",value:\"If the button is a submit button, this attribute specifies the HTTP method that the browser uses to submit the form. Possible values are:\\n\\n*   `post`: The data from the form are included in the body of the form and sent to the server.\\n*   `get`: The data from the form are appended to the **form** attribute URI, with a '?' as a separator, and the resulting URI is sent to the server. Use this method when the form has no side-effects and contains only ASCII characters.\\n\\nIf specified, this attribute overrides the [`method`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-method) attribute of the button's form owner.\"}},{name:\"formnovalidate\",valueSet:\"v\",description:{kind:\"markdown\",value:\"If the button is a submit button, this Boolean attribute specifies that the form is not to be validated when it is submitted. If this attribute is specified, it overrides the [`novalidate`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-novalidate) attribute of the button's form owner.\"}},{name:\"formtarget\",description:{kind:\"markdown\",value:\"If the button is a submit button, this attribute is a name or keyword indicating where to display the response that is received after submitting the form. This is a name of, or keyword for, a _browsing context_ (for example, tab, window, or inline frame). If this attribute is specified, it overrides the [`target`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-target) attribute of the button's form owner. The following keywords have special meanings:\\n\\n*   `_self`: Load the response into the same browsing context as the current one. This value is the default if the attribute is not specified.\\n*   `_blank`: Load the response into a new unnamed browsing context.\\n*   `_parent`: Load the response into the parent browsing context of the current one. If there is no parent, this option behaves the same way as `_self`.\\n*   `_top`: Load the response into the top-level browsing context (that is, the browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this option behaves the same way as `_self`.\"}},{name:\"name\",description:{kind:\"markdown\",value:\"The name of the button, which is submitted with the form data.\"}},{name:\"type\",valueSet:\"bt\",description:{kind:\"markdown\",value:\"The type of the button. Possible values are:\\n\\n*   `submit`: The button submits the form data to the server. This is the default if the attribute is not specified, or if the attribute is dynamically changed to an empty or invalid value.\\n*   `reset`: The button resets all the controls to their initial values.\\n*   `button`: The button has no default behavior. It can have client-side scripts associated with the element's events, which are triggered when the events occur.\"}},{name:\"value\",description:{kind:\"markdown\",value:\"The initial value of the button. It defines the value associated with the button which is submitted with the form data. This value is passed to the server in params when the form is submitted.\"}},{name:\"autocomplete\",description:'The use of this attribute on a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") is nonstandard and Firefox-specific. By default, unlike other browsers, [Firefox persists the dynamic disabled state](https://stackoverflow.com/questions/5985839/bug-with-firefox-disabled-attribute-of-input-not-resetting-when-refreshing) of a [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button \"The HTML <button> element represents a clickable button, which can be used in forms or anywhere in a document that needs simple, standard button functionality.\") across page loads. Setting the value of this attribute to `off` (i.e. `autocomplete=\"off\"`) disables this feature. See [bug\\xA0654072](https://bugzilla.mozilla.org/show_bug.cgi?id=654072 \"if disabled state is changed with javascript, the normal state doesn\\'t return after refreshing the page\").'}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/button\"}]},{name:\"select\",description:{kind:\"markdown\",value:\"The select element represents a control for selecting amongst a set of options.\"},attributes:[{name:\"autocomplete\",valueSet:\"inputautocomplete\",description:{kind:\"markdown\",value:'A [`DOMString`](https://developer.mozilla.org/en-US/docs/Web/API/DOMString \"DOMString is a UTF-16 String. As JavaScript already uses such strings, DOMString is mapped directly to a String.\") providing a hint for a [user agent\\'s](https://developer.mozilla.org/en-US/docs/Glossary/user_agent \"user agent\\'s: A user agent is a computer program representing a person, for example, a browser in a Web context.\") autocomplete feature. See [The HTML autocomplete attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete) for a complete list of values and details on how to use autocomplete.'}},{name:\"autofocus\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This Boolean attribute lets you specify that a form control should have input focus when the page loads. Only one form element in a document can have the `autofocus` attribute.\"}},{name:\"disabled\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This Boolean attribute indicates that the user cannot interact with the control. If this attribute is not specified, the control inherits its setting from the containing element, for example `fieldset`; if there is no containing element with the `disabled` attribute set, then the control is enabled.\"}},{name:\"form\",description:{kind:\"markdown\",value:'This attribute lets you specify the form element to\\xA0which\\xA0the select element is associated\\xA0(that is, its \"form owner\"). If this attribute is specified, its value must be the same as the `id` of a form element in the same document. This enables you to place select elements anywhere within a document, not just as descendants of their form elements.'}},{name:\"multiple\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This Boolean attribute indicates that multiple options can be selected in the list. If it is not specified, then only one option can be selected at a time. When `multiple` is specified, most browsers will show a scrolling list box instead of a single line dropdown.\"}},{name:\"name\",description:{kind:\"markdown\",value:\"This attribute is used to specify the name of the control.\"}},{name:\"required\",valueSet:\"v\",description:{kind:\"markdown\",value:\"A Boolean attribute indicating that an option with a non-empty string value must be selected.\"}},{name:\"size\",description:{kind:\"markdown\",value:\"If the control is presented as a scrolling list box (e.g. when `multiple` is specified), this attribute represents the number of rows in the list that should be visible at one time. Browsers are not required to present a select element as a scrolled list box. The default value is 0.\\n\\n**Note:** According to the HTML5 specification, the default value for size should be 1; however, in practice, this has been found to break some web sites, and no other browser currently does that, so Mozilla has opted to continue to return 0 for the time being with Firefox.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/select\"}]},{name:\"datalist\",description:{kind:\"markdown\",value:\"The datalist element represents a set of option elements that represent predefined options for other controls. In the rendering, the datalist element represents nothing and it, along with its children, should be hidden.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/datalist\"}]},{name:\"optgroup\",description:{kind:\"markdown\",value:\"The optgroup element represents a group of option elements with a common label.\"},attributes:[{name:\"disabled\",valueSet:\"v\",description:{kind:\"markdown\",value:\"If this Boolean attribute is set, none of the items in this option group is selectable. Often browsers grey out such control and it won't receive any browsing events, like mouse clicks or focus-related ones.\"}},{name:\"label\",description:{kind:\"markdown\",value:\"The name of the group of options, which the browser can use when labeling the options in the user interface. This attribute is mandatory if this element is used.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/optgroup\"}]},{name:\"option\",description:{kind:\"markdown\",value:\"The option element represents an option in a select element or as part of a list of suggestions in a datalist element.\"},attributes:[{name:\"disabled\",valueSet:\"v\",description:{kind:\"markdown\",value:'If this Boolean attribute is set, this option is not checkable. Often browsers grey out such control and it won\\'t receive any browsing event, like mouse clicks or focus-related ones. If this attribute is not set, the element can still be disabled if one of its ancestors is a disabled [`<optgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup \"The HTML <optgroup> element creates a grouping of options within a <select> element.\") element.'}},{name:\"label\",description:{kind:\"markdown\",value:\"This attribute is text for the label indicating the meaning of the option. If the `label` attribute isn't defined, its value is that of the element text content.\"}},{name:\"selected\",valueSet:\"v\",description:{kind:\"markdown\",value:'If present, this Boolean attribute indicates that the option is initially selected. If the `<option>` element is the descendant of a [`<select>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select \"The HTML <select> element represents a control that provides a menu of options\") element whose [`multiple`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#attr-multiple) attribute is not set, only one single `<option>` of this [`<select>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select \"The HTML <select> element represents a control that provides a menu of options\") element may have the `selected` attribute.'}},{name:\"value\",description:{kind:\"markdown\",value:\"The content of this attribute represents the value to be submitted with the form, should this option be selected.\\xA0If this attribute is omitted, the value is taken from the text content of the option element.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/option\"}]},{name:\"textarea\",description:{kind:\"markdown\",value:\"The textarea element represents a multiline plain text edit control for the element's raw value. The contents of the control represent the control's default value.\"},attributes:[{name:\"autocomplete\",valueSet:\"inputautocomplete\",description:{kind:\"markdown\",value:'This attribute indicates whether the value of the control can be automatically completed by the browser. Possible values are:\\n\\n*   `off`: The user must explicitly enter a value into this field for every use, or the document provides its own auto-completion method; the browser does not automatically complete the entry.\\n*   `on`: The browser can automatically complete the value based on values that the user has entered during previous uses.\\n\\nIf the `autocomplete` attribute is not specified on a `<textarea>` element, then the browser uses the `autocomplete` attribute value of the `<textarea>` element\\'s form owner. The form owner is either the [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element that this `<textarea>` element is a descendant of or the form element whose `id` is specified by the `form` attribute of the input element. For more information, see the [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-autocomplete) attribute in [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\").'}},{name:\"autofocus\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This Boolean attribute lets you specify that a form control should have input focus when the page loads. Only one form-associated element in a document can have this attribute specified.\"}},{name:\"cols\",description:{kind:\"markdown\",value:\"The visible width of the text control, in average character widths. If it is specified, it must be a positive integer. If it is not specified, the default value is `20`.\"}},{name:\"dirname\"},{name:\"disabled\",valueSet:\"v\",description:{kind:\"markdown\",value:'This Boolean attribute indicates that the user cannot interact with the control. If this attribute is not specified, the control inherits its setting from the containing element, for example [`<fieldset>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset \"The HTML <fieldset> element is used to group several controls as well as labels (<label>) within a web form.\"); if there is no containing element when the `disabled` attribute is set, the control is enabled.'}},{name:\"form\",description:{kind:\"markdown\",value:'The form element that the `<textarea>` element is associated with (its \"form owner\"). The value of the attribute must be the `id` of a form element in the same document. If this attribute is not specified, the `<textarea>` element must be a descendant of a form element. This attribute enables you to place `<textarea>` elements anywhere within a document, not just as descendants of form elements.'}},{name:\"inputmode\",valueSet:\"im\"},{name:\"maxlength\",description:{kind:\"markdown\",value:\"The maximum number of characters (unicode code points) that the user can enter. If this value isn't specified, the user can enter an unlimited number of characters.\"}},{name:\"minlength\",description:{kind:\"markdown\",value:\"The minimum number of characters (unicode code points) required that the user should enter.\"}},{name:\"name\",description:{kind:\"markdown\",value:\"The name of the control.\"}},{name:\"placeholder\",description:{kind:\"markdown\",value:'A hint to the user of what can be entered in the control. Carriage returns or line-feeds within the placeholder text must be treated as line breaks when rendering the hint.\\n\\n**Note:** Placeholders should only be used to show an example of the type of data that should be entered into a form; they are _not_ a substitute for a proper [`<label>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label \"The HTML <label> element represents a caption for an item in a user interface.\") element tied to the input. See [Labels and placeholders](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Labels_and_placeholders \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") in [<input>: The Input (Form Input) element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") for a full explanation.'}},{name:\"readonly\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This Boolean attribute indicates that the user cannot modify the value of the control. Unlike the `disabled` attribute, the `readonly` attribute does not prevent the user from clicking or selecting in the control. The value of a read-only control is still submitted with the form.\"}},{name:\"required\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This attribute specifies that the user must fill in a value before submitting a form.\"}},{name:\"rows\",description:{kind:\"markdown\",value:\"The number of visible text lines for the control.\"}},{name:\"wrap\",valueSet:\"w\",description:{kind:\"markdown\",value:\"Indicates how the control wraps text. Possible values are:\\n\\n*   `hard`: The browser automatically inserts line breaks (CR+LF) so that each line has no more than the width of the control; the `cols` attribute must also be specified for this to take effect.\\n*   `soft`: The browser ensures that all line breaks in the value consist of a CR+LF pair, but does not insert any additional line breaks.\\n*   `off` : Like `soft` but changes appearance to `white-space: pre` so line segments exceeding `cols` are not wrapped and the `<textarea>` becomes horizontally scrollable.\\n\\nIf this attribute is not specified, `soft` is its default value.\"}},{name:\"autocapitalize\",description:\"This is a non-standard attribute supported by WebKit on iOS (therefore nearly all browsers running on iOS, including Safari, Firefox, and Chrome), which controls whether and how the text value should be automatically capitalized as it is entered/edited by the user. The non-deprecated values are available in iOS 5 and later. Possible values are:\\n\\n*   `none`: Completely disables automatic capitalization.\\n*   `sentences`: Automatically capitalize the first letter of sentences.\\n*   `words`: Automatically capitalize the first letter of words.\\n*   `characters`: Automatically capitalize all characters.\\n*   `on`: Deprecated since iOS 5.\\n*   `off`: Deprecated since iOS 5.\"},{name:\"spellcheck\",description:\"Specifies whether the `<textarea>` is subject to spell checking by the underlying browser/OS. the value can be:\\n\\n*   `true`: Indicates that the element needs to have its spelling and grammar checked.\\n*   `default` : Indicates that the element is to act according to a default behavior, possibly based on the parent element's own `spellcheck` value.\\n*   `false` : Indicates that the element should not be spell checked.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/textarea\"}]},{name:\"output\",description:{kind:\"markdown\",value:\"The output element represents the result of a calculation performed by the application, or the result of a user action.\"},attributes:[{name:\"for\",description:{kind:\"markdown\",value:\"A space-separated list of other elements\\u2019 [`id`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id)s, indicating that those elements contributed input values to (or otherwise affected) the calculation.\"}},{name:\"form\",description:{kind:\"markdown\",value:'The [form element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form) that this element is associated with (its \"form owner\"). The value of the attribute must be an `id` of a form element in the same document. If this attribute is not specified, the output element must be a descendant of a form element. This attribute enables you to place output elements anywhere within a document, not just as descendants of their form elements.'}},{name:\"name\",description:{kind:\"markdown\",value:'The name of the element, exposed in the [`HTMLFormElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement \"The HTMLFormElement interface represents a <form> element in the DOM; it allows access to and in some cases modification of aspects of the form, as well as access to its component elements.\") API.'}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/output\"}]},{name:\"progress\",description:{kind:\"markdown\",value:\"The progress element represents the completion progress of a task. The progress is either indeterminate, indicating that progress is being made but that it is not clear how much more work remains to be done before the task is complete (e.g. because the task is waiting for a remote host to respond), or the progress is a number in the range zero to a maximum, giving the fraction of work that has so far been completed.\"},attributes:[{name:\"value\",description:{kind:\"markdown\",value:\"This attribute specifies how much of the task that has been completed. It must be a valid floating point number between 0 and `max`, or between 0 and 1 if `max` is omitted. If there is no `value` attribute, the progress bar is indeterminate; this indicates that an activity is ongoing with no indication of how long it is expected to take.\"}},{name:\"max\",description:{kind:\"markdown\",value:\"This attribute describes how much work the task indicated by the `progress` element requires. The `max` attribute, if present, must have a value greater than zero and be a valid floating point number. The default value is 1.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/progress\"}]},{name:\"meter\",description:{kind:\"markdown\",value:\"The meter element represents a scalar measurement within a known range, or a fractional value; for example disk usage, the relevance of a query result, or the fraction of a voting population to have selected a particular candidate.\"},attributes:[{name:\"value\",description:{kind:\"markdown\",value:\"The current numeric value. This must be between the minimum and maximum values (`min` attribute and `max` attribute) if they are specified. If unspecified or malformed, the value is 0. If specified, but not within the range given by the `min` attribute and `max` attribute, the value is equal to the nearest end of the range.\\n\\n**Usage note:** Unless the `value` attribute is between `0` and `1` (inclusive), the `min` and `max` attributes should define the range so that the `value` attribute's value is within it.\"}},{name:\"min\",description:{kind:\"markdown\",value:\"The lower numeric bound of the measured range. This must be less than the maximum value (`max` attribute), if specified. If unspecified, the minimum value is 0.\"}},{name:\"max\",description:{kind:\"markdown\",value:\"The upper numeric bound of the measured range. This must be greater than the minimum value (`min` attribute), if specified. If unspecified, the maximum value is 1.\"}},{name:\"low\",description:{kind:\"markdown\",value:\"The upper numeric bound of the low end of the measured range. This must be greater than the minimum value (`min` attribute), and it also must be less than the high value and maximum value (`high` attribute and `max` attribute, respectively), if any are specified. If unspecified, or if less than the minimum value, the `low` value is equal to the minimum value.\"}},{name:\"high\",description:{kind:\"markdown\",value:\"The lower numeric bound of the high end of the measured range. This must be less than the maximum value (`max` attribute), and it also must be greater than the low value and minimum value (`low` attribute and **min** attribute, respectively), if any are specified. If unspecified, or if greater than the maximum value, the `high` value is equal to the maximum value.\"}},{name:\"optimum\",description:{kind:\"markdown\",value:\"This attribute indicates the optimal numeric value. It must be within the range (as defined by the `min` attribute and `max` attribute). When used with the `low` attribute and `high` attribute, it gives an indication where along the range is considered preferable. For example, if it is between the `min` attribute and the `low` attribute, then the lower range is considered preferred.\"}},{name:\"form\",description:\"This attribute associates the element with a `form` element that has ownership of the `meter` element. For example, a `meter` might be displaying a range corresponding to an `input` element of `type` _number_. This attribute is only used if the `meter` element is being used as a form-associated element; even then, it may be omitted if the element appears as a descendant of a `form` element.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/meter\"}]},{name:\"fieldset\",description:{kind:\"markdown\",value:\"The fieldset element represents a set of form controls optionally grouped under a common name.\"},attributes:[{name:\"disabled\",valueSet:\"v\",description:{kind:\"markdown\",value:\"If this Boolean attribute is set, all form controls that are descendants of the `<fieldset>`, are disabled, meaning they are not editable and won't be submitted along with the `<form>`. They won't receive any browsing events, like mouse clicks or focus-related events. By default browsers display such controls grayed out. Note that form elements inside the [`<legend>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend \\\"The HTML <legend> element represents a caption for the content of its parent <fieldset>.\\\") element won't be disabled.\"}},{name:\"form\",description:{kind:\"markdown\",value:'This attribute takes the value of the `id` attribute of a [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form \"The HTML <form> element represents a document section that contains interactive controls for submitting information to a web server.\") element you want the `<fieldset>` to be part of, even if it is not inside the form.'}},{name:\"name\",description:{kind:\"markdown\",value:'The name associated with the group.\\n\\n**Note**: The caption for the fieldset is given by the first [`<legend>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend \"The HTML <legend> element represents a caption for the content of its parent <fieldset>.\") element nested inside it.'}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/fieldset\"}]},{name:\"legend\",description:{kind:\"markdown\",value:\"The legend element represents a caption for the rest of the contents of the legend element's parent fieldset element, if any.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/legend\"}]},{name:\"details\",description:{kind:\"markdown\",value:\"The details element represents a disclosure widget from which the user can obtain additional information or controls.\"},attributes:[{name:\"open\",valueSet:\"v\",description:{kind:\"markdown\",value:\"This Boolean attribute indicates whether or not the details \\u2014 that is, the contents of the `<details>` element \\u2014 are currently visible. The default, `false`, means the details are not visible.\"}}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/details\"}]},{name:\"summary\",description:{kind:\"markdown\",value:\"The summary element represents a summary, caption, or legend for the rest of the contents of the summary element's parent details element, if any.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/summary\"}]},{name:\"dialog\",description:{kind:\"markdown\",value:\"The dialog element represents a part of an application that a user interacts with to perform a task, for example a dialog box, inspector, or window.\"},attributes:[{name:\"open\",description:\"Indicates that the dialog is active and available for interaction. When the `open` attribute is not set, the dialog shouldn't be shown to the user.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/dialog\"}]},{name:\"script\",description:{kind:\"markdown\",value:\"The script element allows authors to include dynamic script and data blocks in their documents. The element does not represent content for the user.\"},attributes:[{name:\"src\",description:{kind:\"markdown\",value:\"This attribute specifies the URI of an external script; this can be used as an alternative to embedding a script directly within a document.\\n\\nIf a `script` element has a `src` attribute specified, it should not have a script embedded inside its tags.\"}},{name:\"type\",description:{kind:\"markdown\",value:'This attribute indicates the type of script represented. The value of this attribute will be in one of the following categories:\\n\\n*   **Omitted or a JavaScript MIME type:** For HTML5-compliant browsers this indicates the script is JavaScript. HTML5 specification urges authors to omit the attribute rather than provide a redundant MIME type. In earlier browsers, this identified the scripting language of the embedded or imported (via the `src` attribute) code. JavaScript MIME types are [listed in the specification](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#JavaScript_types).\\n*   **`module`:** For HTML5-compliant browsers the code is treated as a JavaScript module. The processing of the script contents is not affected by the `charset` and `defer` attributes. For information on using `module`, see [ES6 in Depth: Modules](https://hacks.mozilla.org/2015/08/es6-in-depth-modules/). Code may behave differently when the `module` keyword is used.\\n*   **Any other value:** The embedded content is treated as a data block which won\\'t be processed by the browser. Developers must use a valid MIME type that is not a JavaScript MIME type to denote data blocks. The `src` attribute will be ignored.\\n\\n**Note:** in Firefox you could specify the version of JavaScript contained in a `<script>` element by including a non-standard `version` parameter inside the `type` attribute \\u2014 for example `type=\"text/javascript;version=1.8\"`. This has been removed in Firefox 59 (see [bug\\xA01428745](https://bugzilla.mozilla.org/show_bug.cgi?id=1428745 \"FIXED: Remove support for version parameter from script loader\")).'}},{name:\"charset\"},{name:\"async\",valueSet:\"v\",description:{kind:\"markdown\",value:`This is a Boolean attribute indicating that the browser should, if possible, load the script asynchronously.\n\nThis attribute must not be used if the \\`src\\` attribute is absent (i.e. for inline scripts). If it is included in this case it will have no effect.\n\nBrowsers usually assume the worst case scenario and load scripts synchronously, (i.e. \\`async=\"false\"\\`) during HTML parsing.\n\nDynamically inserted scripts (using [\\`document.createElement()\\`](https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement \"In an HTML document, the document.createElement() method creates the HTML element specified by tagName, or an HTMLUnknownElement if tagName isn't recognized.\")) load asynchronously by default, so to turn on synchronous loading (i.e. scripts load in the order they were inserted) set \\`async=\"false\"\\`.\n\nSee [Browser compatibility](#Browser_compatibility) for notes on browser support. See also [Async scripts for asm.js](https://developer.mozilla.org/en-US/docs/Games/Techniques/Async_scripts).`}},{name:\"defer\",valueSet:\"v\",description:{kind:\"markdown\",value:'This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed, but before firing [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded \"/en-US/docs/Web/Events/DOMContentLoaded\").\\n\\nScripts with the `defer` attribute will prevent the `DOMContentLoaded` event from firing until the script has loaded and finished evaluating.\\n\\nThis attribute must not be used if the `src` attribute is absent (i.e. for inline scripts), in this case it would have no effect.\\n\\nTo achieve a similar effect for dynamically inserted scripts use `async=\"false\"` instead. Scripts with the `defer` attribute will execute in the order in which they appear in the document.'}},{name:\"crossorigin\",valueSet:\"xo\",description:{kind:\"markdown\",value:'Normal `script` elements pass minimal information to the [`window.onerror`](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror \"The onerror property of the GlobalEventHandlers mixin is an EventHandler that processes error events.\") for scripts which do not pass the standard [CORS](https://developer.mozilla.org/en-US/docs/Glossary/CORS \"CORS: CORS (Cross-Origin Resource Sharing) is a system, consisting of transmitting HTTP headers, that determines whether browsers block frontend JavaScript code from accessing responses for cross-origin requests.\") checks. To allow error logging for sites which use a separate domain for static media, use this attribute. See [CORS settings attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for a more descriptive explanation of its valid arguments.'}},{name:\"nonce\",description:{kind:\"markdown\",value:\"A cryptographic nonce (number used once) to whitelist inline scripts in a [script-src Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src). The server must generate a unique nonce value each time it transmits a policy. It is critical to provide a nonce that cannot be guessed as bypassing a resource's policy is otherwise trivial.\"}},{name:\"integrity\",description:\"This attribute contains inline metadata that a user agent can use to verify that a fetched resource has been delivered free of unexpected manipulation. See [Subresource Integrity](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity).\"},{name:\"nomodule\",description:\"This Boolean attribute is set to indicate that the script should not be executed in browsers that support [ES2015 modules](https://hacks.mozilla.org/2015/08/es6-in-depth-modules/) \\u2014 in effect, this can be used to serve fallback scripts to older browsers that do not support modular JavaScript code.\"},{name:\"referrerpolicy\",description:'Indicates which [referrer](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer) to send when fetching the script, or resources fetched by the script:\\n\\n*   `no-referrer`: The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent.\\n*   `no-referrer-when-downgrade` (default): The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer \"The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.\") header will not be sent to [origin](https://developer.mozilla.org/en-US/docs/Glossary/origin \"origin: Web content\\'s origin is defined by the scheme (protocol), host (domain), and port of the URL used to access it. Two objects have the same origin only when the scheme, host, and port all match.\")s without [TLS](https://developer.mozilla.org/en-US/docs/Glossary/TLS \"TLS: Transport Layer Security (TLS), previously known as Secure Sockets Layer (SSL), is a protocol used by applications to communicate securely across a network, preventing tampering with and eavesdropping on email, web browsing, messaging, and other protocols.\") ([HTTPS](https://developer.mozilla.org/en-US/docs/Glossary/HTTPS \"HTTPS: HTTPS (HTTP Secure) is an encrypted version of the HTTP protocol. It usually uses SSL or TLS to encrypt all communication between a client and a server. This secure connection allows clients to safely exchange sensitive data with a server, for example for banking activities or online shopping.\")).\\n*   `origin`: The sent referrer will be limited to the origin of the referring page: its [scheme](https://developer.mozilla.org/en-US/docs/Archive/Mozilla/URIScheme), [host](https://developer.mozilla.org/en-US/docs/Glossary/host \"host: A host is a device connected to the Internet (or a local network). Some hosts called servers offer additional services like serving webpages or storing files and emails.\"), and [port](https://developer.mozilla.org/en-US/docs/Glossary/port \"port: For a computer connected to a network with an IP address, a port is a communication endpoint. Ports are designated by numbers, and below 1024 each port is associated by default with a specific protocol.\").\\n*   `origin-when-cross-origin`: The referrer sent to other origins will be limited to the scheme, the host, and the port. Navigations on the same origin will still include the path.\\n*   `same-origin`: A referrer will be sent for [same origin](https://developer.mozilla.org/en-US/docs/Glossary/Same-origin_policy \"same origin: The same-origin policy is a critical security mechanism that restricts how a document or script loaded from one origin can interact with a resource from another origin.\"), but cross-origin requests will contain no referrer information.\\n*   `strict-origin`: Only send the origin of the document as the referrer when the protocol security level stays the same (e.g. HTTPS\\u2192HTTPS), but don\\'t send it to a less secure destination (e.g. HTTPS\\u2192HTTP).\\n*   `strict-origin-when-cross-origin`: Send a full URL when performing a same-origin request, but only send the origin when the protocol security level stays the same (e.g.HTTPS\\u2192HTTPS), and send no header to a less secure destination (e.g. HTTPS\\u2192HTTP).\\n*   `unsafe-url`: The referrer will include the origin _and_ the path (but not the [fragment](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/hash), [password](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/password), or [username](https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/username)). **This value is unsafe**, because it leaks origins and paths from TLS-protected resources to insecure origins.\\n\\n**Note**: An empty string value (`\"\"`) is both the default value, and a fallback value if `referrerpolicy` is not supported. If `referrerpolicy` is not explicitly specified on the `<script>` element, it will adopt a higher-level referrer policy, i.e. one set on the whole document or domain. If a higher-level policy is not available,\\xA0the empty string is treated as being equivalent to `no-referrer-when-downgrade`.'},{name:\"text\",description:\"Like the `textContent` attribute, this attribute sets the text content of the element. Unlike the `textContent` attribute, however, this attribute is evaluated as executable code after the node is inserted into the DOM.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/script\"}]},{name:\"noscript\",description:{kind:\"markdown\",value:\"The noscript element represents nothing if scripting is enabled, and represents its children if scripting is disabled. It is used to present different markup to user agents that support scripting and those that don't support scripting, by affecting how the document is parsed.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/noscript\"}]},{name:\"template\",description:{kind:\"markdown\",value:\"The template element is used to declare fragments of HTML that can be cloned and inserted in the document by script.\"},attributes:[],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/template\"}]},{name:\"canvas\",description:{kind:\"markdown\",value:\"The canvas element provides scripts with a resolution-dependent bitmap canvas, which can be used for rendering graphs, game graphics, art, or other visual images on the fly.\"},attributes:[{name:\"width\",description:{kind:\"markdown\",value:\"The width of the coordinate space in CSS pixels. Defaults to 300.\"}},{name:\"height\",description:{kind:\"markdown\",value:\"The height of the coordinate space in CSS pixels. Defaults to 150.\"}},{name:\"moz-opaque\",description:\"Lets the canvas know whether or not translucency will be a factor. If the canvas knows there's no translucency, painting performance can be optimized. This is only supported by Mozilla-based browsers; use the standardized [`canvas.getContext('2d', { alpha: false })`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext \\\"The HTMLCanvasElement.getContext() method returns a drawing context on the canvas, or null if the context identifier is not supported.\\\") instead.\"}],references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Element/canvas\"}]}],globalAttributes:[{name:\"accesskey\",description:{kind:\"markdown\",value:\"Provides a hint for generating a keyboard shortcut for the current element. This attribute consists of a space-separated list of characters. The browser should use the first one that exists on the computer keyboard layout.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/accesskey\"}]},{name:\"autocapitalize\",description:{kind:\"markdown\",value:\"Controls whether and how text input is automatically capitalized as it is entered/edited by the user. It can have the following values:\\n\\n*   `off` or `none`, no autocapitalization is applied (all letters default to lowercase)\\n*   `on` or `sentences`, the first letter of each sentence defaults to a capital letter; all other letters default to lowercase\\n*   `words`, the first letter of each word defaults to a capital letter; all other letters default to lowercase\\n*   `characters`, all letters should default to uppercase\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/autocapitalize\"}]},{name:\"class\",description:{kind:\"markdown\",value:'A space-separated list of the classes of the element. Classes allows CSS and JavaScript to select and access specific elements via the [class selectors](/en-US/docs/Web/CSS/Class_selectors) or functions like the method [`Document.getElementsByClassName()`](/en-US/docs/Web/API/Document/getElementsByClassName \"returns an array-like object of all child elements which have all of the given class names.\").'},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/class\"}]},{name:\"contenteditable\",description:{kind:\"markdown\",value:\"An enumerated attribute indicating if the element should be editable by the user. If so, the browser modifies its widget to allow editing. The attribute must take one of the following values:\\n\\n*   `true` or the _empty string_, which indicates that the element must be editable;\\n*   `false`, which indicates that the element must not be editable.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/contenteditable\"}]},{name:\"contextmenu\",description:{kind:\"markdown\",value:'The `[**id**](#attr-id)` of a [`<menu>`](/en-US/docs/Web/HTML/Element/menu \"The HTML <menu> element represents a group of commands that a user can perform or activate. This includes both list menus, which might appear across the top of a screen, as well as context menus, such as those that might appear underneath a button after it has been clicked.\") to use as the contextual menu for this element.'},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/contextmenu\"}]},{name:\"dir\",description:{kind:\"markdown\",value:\"An enumerated attribute indicating the directionality of the element's text. It can have the following values:\\n\\n*   `ltr`, which means _left to right_ and is to be used for languages that are written from the left to the right (like English);\\n*   `rtl`, which means _right to left_ and is to be used for languages that are written from the right to the left (like Arabic);\\n*   `auto`, which lets the user agent decide. It uses a basic algorithm as it parses the characters inside the element until it finds a character with a strong directionality, then it applies that directionality to the whole element.\"},valueSet:\"d\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/dir\"}]},{name:\"draggable\",description:{kind:\"markdown\",value:\"An enumerated attribute indicating whether the element can be dragged, using the [Drag and Drop API](/en-us/docs/DragDrop/Drag_and_Drop). It can have the following values:\\n\\n*   `true`, which indicates that the element may be dragged\\n*   `false`, which indicates that the element may not be dragged.\"},valueSet:\"b\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/draggable\"}]},{name:\"dropzone\",description:{kind:\"markdown\",value:\"An enumerated attribute indicating what types of content can be dropped on an element, using the [Drag and Drop API](/en-US/docs/DragDrop/Drag_and_Drop). It can have the following values:\\n\\n*   `copy`, which indicates that dropping will create a copy of the element that was dragged\\n*   `move`, which indicates that the element that was dragged will be moved to this new location.\\n*   `link`, will create a link to the dragged data.\"}},{name:\"exportparts\",description:{kind:\"markdown\",value:\"Used to transitively export shadow parts from a nested shadow tree into a containing light tree.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/exportparts\"}]},{name:\"hidden\",description:{kind:\"markdown\",value:\"A Boolean attribute indicates that the element is not yet, or is no longer, _relevant_. For example, it can be used to hide elements of the page that can't be used until the login process has been completed. The browser won't render such elements. This attribute must not be used to hide content that could legitimately be shown.\"},valueSet:\"v\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/hidden\"}]},{name:\"id\",description:{kind:\"markdown\",value:\"Defines a unique identifier (ID) which must be unique in the whole document. Its purpose is to identify the element when linking (using a fragment identifier), scripting, or styling (with CSS).\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/id\"}]},{name:\"inputmode\",description:{kind:\"markdown\",value:'Provides a hint to browsers as to the type of virtual keyboard configuration to use when editing this element or its contents. Used primarily on [`<input>`](/en-US/docs/Web/HTML/Element/input \"The HTML <input> element is used to create interactive controls for web-based forms in order to accept data from the user; a wide variety of types of input data and control widgets are available, depending on the device and user agent.\") elements, but is usable on any element while in `[contenteditable](/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable)` mode.'},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/inputmode\"}]},{name:\"is\",description:{kind:\"markdown\",value:\"Allows you to specify that a standard HTML element should behave like a registered custom built-in element (see [Using custom elements](/en-US/docs/Web/Web_Components/Using_custom_elements) for more details).\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/is\"}]},{name:\"itemid\",description:{kind:\"markdown\",value:\"The unique, global identifier of an item.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemid\"}]},{name:\"itemprop\",description:{kind:\"markdown\",value:\"Used to add properties to an item. Every HTML element may have an `itemprop` attribute specified, where an `itemprop` consists of a name and value pair.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemprop\"}]},{name:\"itemref\",description:{kind:\"markdown\",value:\"Properties that are not descendants of an element with the `itemscope` attribute can be associated with the item using an `itemref`. It provides a list of element ids (not `itemid`s) with additional properties elsewhere in the document.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemref\"}]},{name:\"itemscope\",description:{kind:\"markdown\",value:\"`itemscope` (usually) works along with `[itemtype](/en-US/docs/Web/HTML/Global_attributes#attr-itemtype)` to specify that the HTML contained in a block is about a particular item. `itemscope` creates the Item and defines the scope of the `itemtype` associated with it. `itemtype` is a valid URL of a vocabulary (such as [schema.org](https://schema.org/)) that describes the item and its properties context.\"},valueSet:\"v\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemscope\"}]},{name:\"itemtype\",description:{kind:\"markdown\",value:\"Specifies the URL of the vocabulary that will be used to define `itemprop`s (item properties) in the data structure. `[itemscope](/en-US/docs/Web/HTML/Global_attributes#attr-itemscope)` is used to set the scope of where in the data structure the vocabulary set by `itemtype` will be active.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/itemtype\"}]},{name:\"lang\",description:{kind:\"markdown\",value:\"Helps define the language of an element: the language that non-editable elements are in, or the language that editable elements should be written in by the user. The attribute contains one \\u201Clanguage tag\\u201D (made of hyphen-separated \\u201Clanguage subtags\\u201D) in the format defined in [_Tags for Identifying Languages (BCP47)_](https://www.ietf.org/rfc/bcp/bcp47.txt). [**xml:lang**](#attr-xml:lang) has priority over it.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/lang\"}]},{name:\"part\",description:{kind:\"markdown\",value:'A space-separated list of the part names of the element. Part names allows CSS to select and style specific elements in a shadow tree via the [`::part`](/en-US/docs/Web/CSS/::part \"The ::part CSS pseudo-element represents any element within a shadow tree that has a matching part attribute.\") pseudo-element.'},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/part\"}]},{name:\"role\",valueSet:\"roles\"},{name:\"slot\",description:{kind:\"markdown\",value:\"Assigns a slot in a [shadow DOM](/en-US/docs/Web/Web_Components/Shadow_DOM) shadow tree to an element: An element with a `slot` attribute is assigned to the slot created by the [`<slot>`](/en-US/docs/Web/HTML/Element/slot \\\"The HTML <slot> element\\u2014part of the Web Components technology suite\\u2014is a placeholder inside a web component that you can fill with your own markup, which lets you create separate DOM trees and present them together.\\\") element whose `[name](/en-US/docs/Web/HTML/Element/slot#attr-name)` attribute's value matches that `slot` attribute's value.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/slot\"}]},{name:\"spellcheck\",description:{kind:\"markdown\",value:\"An enumerated attribute defines whether the element may be checked for spelling errors. It may have the following values:\\n\\n*   `true`, which indicates that the element should be, if possible, checked for spelling errors;\\n*   `false`, which indicates that the element should not be checked for spelling errors.\"},valueSet:\"b\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/spellcheck\"}]},{name:\"style\",description:{kind:\"markdown\",value:'Contains [CSS](/en-US/docs/Web/CSS) styling declarations to be applied to the element. Note that it is recommended for styles to be defined in a separate file or files. This attribute and the [`<style>`](/en-US/docs/Web/HTML/Element/style \"The HTML <style> element contains style information for a document, or part of a document.\") element have mainly the purpose of allowing for quick styling, for example for testing purposes.'},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/style\"}]},{name:\"tabindex\",description:{kind:\"markdown\",value:`An integer attribute indicating if the element can take input focus (is _focusable_), if it should participate to sequential keyboard navigation, and if so, at what position. It can take several values:\n\n*   a _negative value_ means that the element should be focusable, but should not be reachable via sequential keyboard navigation;\n*   \\`0\\` means that the element should be focusable and reachable via sequential keyboard navigation, but its relative order is defined by the platform convention;\n*   a _positive value_ means that the element should be focusable and reachable via sequential keyboard navigation; the order in which the elements are focused is the increasing value of the [**tabindex**](#attr-tabindex). If several elements share the same tabindex, their relative order follows their relative positions in the document.`},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/tabindex\"}]},{name:\"title\",description:{kind:\"markdown\",value:\"Contains a text representing advisory information related to the element it belongs to. Such information can typically, but not necessarily, be presented to the user as a tooltip.\"},references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/title\"}]},{name:\"translate\",description:{kind:\"markdown\",value:\"An enumerated attribute that is used to specify whether an element's attribute values and the values of its [`Text`](/en-US/docs/Web/API/Text \\\"The Text interface represents the textual content of Element or Attr. If an element has no markup within its content, it has a single child implementing Text that contains the element's text. However, if the element contains markup, it is parsed into information items and Text nodes that form its children.\\\") node children are to be translated when the page is localized, or whether to leave them unchanged. It can have the following values:\\n\\n*   empty string and `yes`, which indicates that the element will be translated.\\n*   `no`, which indicates that the element will not be translated.\"},valueSet:\"y\",references:[{name:\"MDN Reference\",url:\"https://developer.mozilla.org/docs/Web/HTML/Global_attributes/translate\"}]},{name:\"onabort\",description:{kind:\"markdown\",value:\"The loading of a resource has been aborted.\"}},{name:\"onblur\",description:{kind:\"markdown\",value:\"An element has lost focus (does not bubble).\"}},{name:\"oncanplay\",description:{kind:\"markdown\",value:\"The user agent can play the media, but estimates that not enough data has been loaded to play the media up to its end without having to stop for further buffering of content.\"}},{name:\"oncanplaythrough\",description:{kind:\"markdown\",value:\"The user agent can play the media up to its end without having to stop for further buffering of content.\"}},{name:\"onchange\",description:{kind:\"markdown\",value:\"The change event is fired for <input>, <select>, and <textarea> elements when a change to the element's value is committed by the user.\"}},{name:\"onclick\",description:{kind:\"markdown\",value:\"A pointing device button has been pressed and released on an element.\"}},{name:\"oncontextmenu\",description:{kind:\"markdown\",value:\"The right button of the mouse is clicked (before the context menu is displayed).\"}},{name:\"ondblclick\",description:{kind:\"markdown\",value:\"A pointing device button is clicked twice on an element.\"}},{name:\"ondrag\",description:{kind:\"markdown\",value:\"An element or text selection is being dragged (every 350ms).\"}},{name:\"ondragend\",description:{kind:\"markdown\",value:\"A drag operation is being ended (by releasing a mouse button or hitting the escape key).\"}},{name:\"ondragenter\",description:{kind:\"markdown\",value:\"A dragged element or text selection enters a valid drop target.\"}},{name:\"ondragleave\",description:{kind:\"markdown\",value:\"A dragged element or text selection leaves a valid drop target.\"}},{name:\"ondragover\",description:{kind:\"markdown\",value:\"An element or text selection is being dragged over a valid drop target (every 350ms).\"}},{name:\"ondragstart\",description:{kind:\"markdown\",value:\"The user starts dragging an element or text selection.\"}},{name:\"ondrop\",description:{kind:\"markdown\",value:\"An element is dropped on a valid drop target.\"}},{name:\"ondurationchange\",description:{kind:\"markdown\",value:\"The duration attribute has been updated.\"}},{name:\"onemptied\",description:{kind:\"markdown\",value:\"The media has become empty; for example, this event is sent if the media has already been loaded (or partially loaded), and the load() method is called to reload it.\"}},{name:\"onended\",description:{kind:\"markdown\",value:\"Playback has stopped because the end of the media was reached.\"}},{name:\"onerror\",description:{kind:\"markdown\",value:\"A resource failed to load.\"}},{name:\"onfocus\",description:{kind:\"markdown\",value:\"An element has received focus (does not bubble).\"}},{name:\"onformchange\"},{name:\"onforminput\"},{name:\"oninput\",description:{kind:\"markdown\",value:\"The value of an element changes or the content of an element with the attribute contenteditable is modified.\"}},{name:\"oninvalid\",description:{kind:\"markdown\",value:\"A submittable element has been checked and doesn't satisfy its constraints.\"}},{name:\"onkeydown\",description:{kind:\"markdown\",value:\"A key is pressed down.\"}},{name:\"onkeypress\",description:{kind:\"markdown\",value:\"A key is pressed down and that key normally produces a character value (use input instead).\"}},{name:\"onkeyup\",description:{kind:\"markdown\",value:\"A key is released.\"}},{name:\"onload\",description:{kind:\"markdown\",value:\"A resource and its dependent resources have finished loading.\"}},{name:\"onloadeddata\",description:{kind:\"markdown\",value:\"The first frame of the media has finished loading.\"}},{name:\"onloadedmetadata\",description:{kind:\"markdown\",value:\"The metadata has been loaded.\"}},{name:\"onloadstart\",description:{kind:\"markdown\",value:\"Progress has begun.\"}},{name:\"onmousedown\",description:{kind:\"markdown\",value:\"A pointing device button (usually a mouse) is pressed on an element.\"}},{name:\"onmousemove\",description:{kind:\"markdown\",value:\"A pointing device is moved over an element.\"}},{name:\"onmouseout\",description:{kind:\"markdown\",value:\"A pointing device is moved off the element that has the listener attached or off one of its children.\"}},{name:\"onmouseover\",description:{kind:\"markdown\",value:\"A pointing device is moved onto the element that has the listener attached or onto one of its children.\"}},{name:\"onmouseup\",description:{kind:\"markdown\",value:\"A pointing device button is released over an element.\"}},{name:\"onmousewheel\"},{name:\"onmouseenter\",description:{kind:\"markdown\",value:\"A pointing device is moved onto the element that has the listener attached.\"}},{name:\"onmouseleave\",description:{kind:\"markdown\",value:\"A pointing device is moved off the element that has the listener attached.\"}},{name:\"onpause\",description:{kind:\"markdown\",value:\"Playback has been paused.\"}},{name:\"onplay\",description:{kind:\"markdown\",value:\"Playback has begun.\"}},{name:\"onplaying\",description:{kind:\"markdown\",value:\"Playback is ready to start after having been paused or delayed due to lack of data.\"}},{name:\"onprogress\",description:{kind:\"markdown\",value:\"In progress.\"}},{name:\"onratechange\",description:{kind:\"markdown\",value:\"The playback rate has changed.\"}},{name:\"onreset\",description:{kind:\"markdown\",value:\"A form is reset.\"}},{name:\"onresize\",description:{kind:\"markdown\",value:\"The document view has been resized.\"}},{name:\"onreadystatechange\",description:{kind:\"markdown\",value:\"The readyState attribute of a document has changed.\"}},{name:\"onscroll\",description:{kind:\"markdown\",value:\"The document view or an element has been scrolled.\"}},{name:\"onseeked\",description:{kind:\"markdown\",value:\"A seek operation completed.\"}},{name:\"onseeking\",description:{kind:\"markdown\",value:\"A seek operation began.\"}},{name:\"onselect\",description:{kind:\"markdown\",value:\"Some text is being selected.\"}},{name:\"onshow\",description:{kind:\"markdown\",value:\"A contextmenu event was fired on/bubbled to an element that has a contextmenu attribute\"}},{name:\"onstalled\",description:{kind:\"markdown\",value:\"The user agent is trying to fetch media data, but data is unexpectedly not forthcoming.\"}},{name:\"onsubmit\",description:{kind:\"markdown\",value:\"A form is submitted.\"}},{name:\"onsuspend\",description:{kind:\"markdown\",value:\"Media data loading has been suspended.\"}},{name:\"ontimeupdate\",description:{kind:\"markdown\",value:\"The time indicated by the currentTime attribute has been updated.\"}},{name:\"onvolumechange\",description:{kind:\"markdown\",value:\"The volume has changed.\"}},{name:\"onwaiting\",description:{kind:\"markdown\",value:\"Playback has stopped because of a temporary lack of data.\"}},{name:\"onpointercancel\",description:{kind:\"markdown\",value:\"The pointer is unlikely to produce any more events.\"}},{name:\"onpointerdown\",description:{kind:\"markdown\",value:\"The pointer enters the active buttons state.\"}},{name:\"onpointerenter\",description:{kind:\"markdown\",value:\"Pointing device is moved inside the hit-testing boundary.\"}},{name:\"onpointerleave\",description:{kind:\"markdown\",value:\"Pointing device is moved out of the hit-testing boundary.\"}},{name:\"onpointerlockchange\",description:{kind:\"markdown\",value:\"The pointer was locked or released.\"}},{name:\"onpointerlockerror\",description:{kind:\"markdown\",value:\"It was impossible to lock the pointer for technical reasons or because the permission was denied.\"}},{name:\"onpointermove\",description:{kind:\"markdown\",value:\"The pointer changed coordinates.\"}},{name:\"onpointerout\",description:{kind:\"markdown\",value:\"The pointing device moved out of hit-testing boundary or leaves detectable hover range.\"}},{name:\"onpointerover\",description:{kind:\"markdown\",value:\"The pointing device is moved into the hit-testing boundary.\"}},{name:\"onpointerup\",description:{kind:\"markdown\",value:\"The pointer leaves the active buttons state.\"}},{name:\"aria-activedescendant\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-activedescendant\"}],description:{kind:\"markdown\",value:\"Identifies the currently active element when DOM focus is on a [`composite`](https://www.w3.org/TR/wai-aria-1.1/#composite) widget, [`textbox`](https://www.w3.org/TR/wai-aria-1.1/#textbox), [`group`](https://www.w3.org/TR/wai-aria-1.1/#group), or [`application`](https://www.w3.org/TR/wai-aria-1.1/#application).\"}},{name:\"aria-atomic\",valueSet:\"b\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-atomic\"}],description:{kind:\"markdown\",value:\"Indicates whether [assistive technologies](https://www.w3.org/TR/wai-aria-1.1/#dfn-assistive-technology) will present all, or only parts of, the changed region based on the change notifications defined by the [`aria-relevant`](https://www.w3.org/TR/wai-aria-1.1/#aria-relevant) attribute.\"}},{name:\"aria-autocomplete\",valueSet:\"autocomplete\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-autocomplete\"}],description:{kind:\"markdown\",value:\"Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for an input and specifies how predictions would be presented if they are made.\"}},{name:\"aria-busy\",valueSet:\"b\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-busy\"}],description:{kind:\"markdown\",value:\"Indicates an element is being modified and that assistive technologies _MAY_ want to wait until the modifications are complete before exposing them to the user.\"}},{name:\"aria-checked\",valueSet:\"tristate\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-checked\"}],description:{kind:\"markdown\",value:'Indicates the current \"checked\" [state](https://www.w3.org/TR/wai-aria-1.1/#dfn-state) of checkboxes, radio buttons, and other [widgets](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget). See related [`aria-pressed`](https://www.w3.org/TR/wai-aria-1.1/#aria-pressed) and [`aria-selected`](https://www.w3.org/TR/wai-aria-1.1/#aria-selected).'}},{name:\"aria-colcount\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-colcount\"}],description:{kind:\"markdown\",value:\"Defines the total number of columns in a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-colindex`](https://www.w3.org/TR/wai-aria-1.1/#aria-colindex).\"}},{name:\"aria-colindex\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-colindex\"}],description:{kind:\"markdown\",value:\"Defines an [element's](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) column index or position with respect to the total number of columns within a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-colcount`](https://www.w3.org/TR/wai-aria-1.1/#aria-colcount) and [`aria-colspan`](https://www.w3.org/TR/wai-aria-1.1/#aria-colspan).\"}},{name:\"aria-colspan\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-colspan\"}],description:{kind:\"markdown\",value:\"Defines the number of columns spanned by a cell or gridcell within a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-colindex`](https://www.w3.org/TR/wai-aria-1.1/#aria-colindex) and [`aria-rowspan`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowspan).\"}},{name:\"aria-controls\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-controls\"}],description:{kind:\"markdown\",value:\"Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) whose contents or presence are controlled by the current element. See related [`aria-owns`](https://www.w3.org/TR/wai-aria-1.1/#aria-owns).\"}},{name:\"aria-current\",valueSet:\"current\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-current\"}],description:{kind:\"markdown\",value:\"Indicates the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) that represents the current item within a container or set of related elements.\"}},{name:\"aria-describedby\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-describedby\"}],description:{kind:\"markdown\",value:\"Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) that describes the [object](https://www.w3.org/TR/wai-aria-1.1/#dfn-object). See related [`aria-labelledby`](https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby).\"}},{name:\"aria-disabled\",valueSet:\"b\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-disabled\"}],description:{kind:\"markdown\",value:\"Indicates that the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) is [perceivable](https://www.w3.org/TR/wai-aria-1.1/#dfn-perceivable) but disabled, so it is not editable or otherwise [operable](https://www.w3.org/TR/wai-aria-1.1/#dfn-operable). See related [`aria-hidden`](https://www.w3.org/TR/wai-aria-1.1/#aria-hidden) and [`aria-readonly`](https://www.w3.org/TR/wai-aria-1.1/#aria-readonly).\"}},{name:\"aria-dropeffect\",valueSet:\"dropeffect\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-dropeffect\"}],description:{kind:\"markdown\",value:\"\\\\[Deprecated in ARIA 1.1\\\\] Indicates what functions can be performed when a dragged object is released on the drop target.\"}},{name:\"aria-errormessage\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-errormessage\"}],description:{kind:\"markdown\",value:\"Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) that provides an error message for the [object](https://www.w3.org/TR/wai-aria-1.1/#dfn-object). See related [`aria-invalid`](https://www.w3.org/TR/wai-aria-1.1/#aria-invalid) and [`aria-describedby`](https://www.w3.org/TR/wai-aria-1.1/#aria-describedby).\"}},{name:\"aria-expanded\",valueSet:\"u\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-expanded\"}],description:{kind:\"markdown\",value:\"Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed.\"}},{name:\"aria-flowto\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-flowto\"}],description:{kind:\"markdown\",value:\"Identifies the next [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) in an alternate reading order of content which, at the user's discretion, allows assistive technology to override the general default of reading in document source order.\"}},{name:\"aria-grabbed\",valueSet:\"u\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-grabbed\"}],description:{kind:\"markdown\",value:`\\\\[Deprecated in ARIA 1.1\\\\] Indicates an element's \"grabbed\" [state](https://www.w3.org/TR/wai-aria-1.1/#dfn-state) in a drag-and-drop operation.`}},{name:\"aria-haspopup\",valueSet:\"haspopup\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-haspopup\"}],description:{kind:\"markdown\",value:\"Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element).\"}},{name:\"aria-hidden\",valueSet:\"b\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-hidden\"}],description:{kind:\"markdown\",value:\"Indicates whether the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) is exposed to an accessibility API. See related [`aria-disabled`](https://www.w3.org/TR/wai-aria-1.1/#aria-disabled).\"}},{name:\"aria-invalid\",valueSet:\"invalid\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-invalid\"}],description:{kind:\"markdown\",value:\"Indicates the entered value does not conform to the format expected by the application. See related [`aria-errormessage`](https://www.w3.org/TR/wai-aria-1.1/#aria-errormessage).\"}},{name:\"aria-label\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-label\"}],description:{kind:\"markdown\",value:\"Defines a string value that labels the current element. See related [`aria-labelledby`](https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby).\"}},{name:\"aria-labelledby\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby\"}],description:{kind:\"markdown\",value:\"Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) that labels the current element. See related [`aria-describedby`](https://www.w3.org/TR/wai-aria-1.1/#aria-describedby).\"}},{name:\"aria-level\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-level\"}],description:{kind:\"markdown\",value:\"Defines the hierarchical level of an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) within a structure.\"}},{name:\"aria-live\",valueSet:\"live\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-live\"}],description:{kind:\"markdown\",value:\"Indicates that an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) will be updated, and describes the types of updates the [user agents](https://www.w3.org/TR/wai-aria-1.1/#dfn-user-agent), [assistive technologies](https://www.w3.org/TR/wai-aria-1.1/#dfn-assistive-technology), and user can expect from the [live region](https://www.w3.org/TR/wai-aria-1.1/#dfn-live-region).\"}},{name:\"aria-modal\",valueSet:\"b\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-modal\"}],description:{kind:\"markdown\",value:\"Indicates whether an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) is modal when displayed.\"}},{name:\"aria-multiline\",valueSet:\"b\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-multiline\"}],description:{kind:\"markdown\",value:\"Indicates whether a text box accepts multiple lines of input or only a single line.\"}},{name:\"aria-multiselectable\",valueSet:\"b\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-multiselectable\"}],description:{kind:\"markdown\",value:\"Indicates that the user may select more than one item from the current selectable descendants.\"}},{name:\"aria-orientation\",valueSet:\"orientation\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-orientation\"}],description:{kind:\"markdown\",value:\"Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous.\"}},{name:\"aria-owns\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-owns\"}],description:{kind:\"markdown\",value:\"Identifies an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) (or elements) in order to define a visual, functional, or contextual parent/child [relationship](https://www.w3.org/TR/wai-aria-1.1/#dfn-relationship) between DOM elements where the DOM hierarchy cannot be used to represent the relationship. See related [`aria-controls`](https://www.w3.org/TR/wai-aria-1.1/#aria-controls).\"}},{name:\"aria-placeholder\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-placeholder\"}],description:{kind:\"markdown\",value:\"Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value. A hint could be a sample value or a brief description of the expected format.\"}},{name:\"aria-posinset\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-posinset\"}],description:{kind:\"markdown\",value:\"Defines an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element)'s number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. See related [`aria-setsize`](https://www.w3.org/TR/wai-aria-1.1/#aria-setsize).\"}},{name:\"aria-pressed\",valueSet:\"tristate\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-pressed\"}],description:{kind:\"markdown\",value:'Indicates the current \"pressed\" [state](https://www.w3.org/TR/wai-aria-1.1/#dfn-state) of toggle buttons. See related [`aria-checked`](https://www.w3.org/TR/wai-aria-1.1/#aria-checked) and [`aria-selected`](https://www.w3.org/TR/wai-aria-1.1/#aria-selected).'}},{name:\"aria-readonly\",valueSet:\"b\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-readonly\"}],description:{kind:\"markdown\",value:\"Indicates that the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) is not editable, but is otherwise [operable](https://www.w3.org/TR/wai-aria-1.1/#dfn-operable). See related [`aria-disabled`](https://www.w3.org/TR/wai-aria-1.1/#aria-disabled).\"}},{name:\"aria-relevant\",valueSet:\"relevant\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-relevant\"}],description:{kind:\"markdown\",value:\"Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified. See related [`aria-atomic`](https://www.w3.org/TR/wai-aria-1.1/#aria-atomic).\"}},{name:\"aria-required\",valueSet:\"b\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-required\"}],description:{kind:\"markdown\",value:\"Indicates that user input is required on the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) before a form may be submitted.\"}},{name:\"aria-roledescription\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-roledescription\"}],description:{kind:\"markdown\",value:\"Defines a human-readable, author-localized description for the [role](https://www.w3.org/TR/wai-aria-1.1/#dfn-role) of an [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element).\"}},{name:\"aria-rowcount\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-rowcount\"}],description:{kind:\"markdown\",value:\"Defines the total number of rows in a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-rowindex`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowindex).\"}},{name:\"aria-rowindex\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-rowindex\"}],description:{kind:\"markdown\",value:\"Defines an [element's](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) row index or position with respect to the total number of rows within a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-rowcount`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowcount) and [`aria-rowspan`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowspan).\"}},{name:\"aria-rowspan\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-rowspan\"}],description:{kind:\"markdown\",value:\"Defines the number of rows spanned by a cell or gridcell within a [`table`](https://www.w3.org/TR/wai-aria-1.1/#table), [`grid`](https://www.w3.org/TR/wai-aria-1.1/#grid), or [`treegrid`](https://www.w3.org/TR/wai-aria-1.1/#treegrid). See related [`aria-rowindex`](https://www.w3.org/TR/wai-aria-1.1/#aria-rowindex) and [`aria-colspan`](https://www.w3.org/TR/wai-aria-1.1/#aria-colspan).\"}},{name:\"aria-selected\",valueSet:\"u\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-selected\"}],description:{kind:\"markdown\",value:'Indicates the current \"selected\" [state](https://www.w3.org/TR/wai-aria-1.1/#dfn-state) of various [widgets](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget). See related [`aria-checked`](https://www.w3.org/TR/wai-aria-1.1/#aria-checked) and [`aria-pressed`](https://www.w3.org/TR/wai-aria-1.1/#aria-pressed).'}},{name:\"aria-setsize\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-setsize\"}],description:{kind:\"markdown\",value:\"Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. See related [`aria-posinset`](https://www.w3.org/TR/wai-aria-1.1/#aria-posinset).\"}},{name:\"aria-sort\",valueSet:\"sort\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-sort\"}],description:{kind:\"markdown\",value:\"Indicates if items in a table or grid are sorted in ascending or descending order.\"}},{name:\"aria-valuemax\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-valuemax\"}],description:{kind:\"markdown\",value:\"Defines the maximum allowed value for a range [widget](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget).\"}},{name:\"aria-valuemin\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-valuemin\"}],description:{kind:\"markdown\",value:\"Defines the minimum allowed value for a range [widget](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget).\"}},{name:\"aria-valuenow\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-valuenow\"}],description:{kind:\"markdown\",value:\"Defines the current value for a range [widget](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget). See related [`aria-valuetext`](https://www.w3.org/TR/wai-aria-1.1/#aria-valuetext).\"}},{name:\"aria-valuetext\",references:[{name:\"WAI-ARIA Reference\",url:\"https://www.w3.org/TR/wai-aria-1.1/#aria-valuetext\"}],description:{kind:\"markdown\",value:\"Defines the human readable text alternative of [`aria-valuenow`](https://www.w3.org/TR/wai-aria-1.1/#aria-valuenow) for a range [widget](https://www.w3.org/TR/wai-aria-1.1/#dfn-widget).\"}},{name:\"aria-details\",description:{kind:\"markdown\",value:\"Identifies the [element](https://www.w3.org/TR/wai-aria-1.1/#dfn-element) that provides a detailed, extended description for the [object](https://www.w3.org/TR/wai-aria-1.1/#dfn-object). See related [`aria-describedby`](https://www.w3.org/TR/wai-aria-1.1/#aria-describedby).\"}},{name:\"aria-keyshortcuts\",description:{kind:\"markdown\",value:\"Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element.\"}}],valueSets:[{name:\"b\",values:[{name:\"true\"},{name:\"false\"}]},{name:\"u\",values:[{name:\"true\"},{name:\"false\"},{name:\"undefined\"}]},{name:\"o\",values:[{name:\"on\"},{name:\"off\"}]},{name:\"y\",values:[{name:\"yes\"},{name:\"no\"}]},{name:\"w\",values:[{name:\"soft\"},{name:\"hard\"}]},{name:\"d\",values:[{name:\"ltr\"},{name:\"rtl\"},{name:\"auto\"}]},{name:\"m\",values:[{name:\"get\",description:{kind:\"markdown\",value:\"Corresponds to the HTTP [GET method](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3); form data are appended to the `action` attribute URI with a '?' as separator, and the resulting URI is sent to the server. Use this method when the form has no side-effects and contains only ASCII characters.\"}},{name:\"post\",description:{kind:\"markdown\",value:\"Corresponds to the HTTP [POST method](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5); form data are included in the body of the form and sent to the server.\"}},{name:\"dialog\",description:{kind:\"markdown\",value:\"Use when the form is inside a [`<dialog>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog) element to close the dialog when submitted.\"}}]},{name:\"fm\",values:[{name:\"get\"},{name:\"post\"}]},{name:\"s\",values:[{name:\"row\"},{name:\"col\"},{name:\"rowgroup\"},{name:\"colgroup\"}]},{name:\"t\",values:[{name:\"hidden\"},{name:\"text\"},{name:\"search\"},{name:\"tel\"},{name:\"url\"},{name:\"email\"},{name:\"password\"},{name:\"datetime\"},{name:\"date\"},{name:\"month\"},{name:\"week\"},{name:\"time\"},{name:\"datetime-local\"},{name:\"number\"},{name:\"range\"},{name:\"color\"},{name:\"checkbox\"},{name:\"radio\"},{name:\"file\"},{name:\"submit\"},{name:\"image\"},{name:\"reset\"},{name:\"button\"}]},{name:\"im\",values:[{name:\"verbatim\"},{name:\"latin\"},{name:\"latin-name\"},{name:\"latin-prose\"},{name:\"full-width-latin\"},{name:\"kana\"},{name:\"kana-name\"},{name:\"katakana\"},{name:\"numeric\"},{name:\"tel\"},{name:\"email\"},{name:\"url\"}]},{name:\"bt\",values:[{name:\"button\"},{name:\"submit\"},{name:\"reset\"},{name:\"menu\"}]},{name:\"lt\",values:[{name:\"1\"},{name:\"a\"},{name:\"A\"},{name:\"i\"},{name:\"I\"}]},{name:\"mt\",values:[{name:\"context\"},{name:\"toolbar\"}]},{name:\"mit\",values:[{name:\"command\"},{name:\"checkbox\"},{name:\"radio\"}]},{name:\"et\",values:[{name:\"application/x-www-form-urlencoded\"},{name:\"multipart/form-data\"},{name:\"text/plain\"}]},{name:\"tk\",values:[{name:\"subtitles\"},{name:\"captions\"},{name:\"descriptions\"},{name:\"chapters\"},{name:\"metadata\"}]},{name:\"pl\",values:[{name:\"none\"},{name:\"metadata\"},{name:\"auto\"}]},{name:\"sh\",values:[{name:\"circle\"},{name:\"default\"},{name:\"poly\"},{name:\"rect\"}]},{name:\"xo\",values:[{name:\"anonymous\"},{name:\"use-credentials\"}]},{name:\"sb\",values:[{name:\"allow-forms\"},{name:\"allow-modals\"},{name:\"allow-pointer-lock\"},{name:\"allow-popups\"},{name:\"allow-popups-to-escape-sandbox\"},{name:\"allow-same-origin\"},{name:\"allow-scripts\"},{name:\"allow-top-navigation\"}]},{name:\"tristate\",values:[{name:\"true\"},{name:\"false\"},{name:\"mixed\"},{name:\"undefined\"}]},{name:\"inputautocomplete\",values:[{name:\"additional-name\"},{name:\"address-level1\"},{name:\"address-level2\"},{name:\"address-level3\"},{name:\"address-level4\"},{name:\"address-line1\"},{name:\"address-line2\"},{name:\"address-line3\"},{name:\"bday\"},{name:\"bday-year\"},{name:\"bday-day\"},{name:\"bday-month\"},{name:\"billing\"},{name:\"cc-additional-name\"},{name:\"cc-csc\"},{name:\"cc-exp\"},{name:\"cc-exp-month\"},{name:\"cc-exp-year\"},{name:\"cc-family-name\"},{name:\"cc-given-name\"},{name:\"cc-name\"},{name:\"cc-number\"},{name:\"cc-type\"},{name:\"country\"},{name:\"country-name\"},{name:\"current-password\"},{name:\"email\"},{name:\"family-name\"},{name:\"fax\"},{name:\"given-name\"},{name:\"home\"},{name:\"honorific-prefix\"},{name:\"honorific-suffix\"},{name:\"impp\"},{name:\"language\"},{name:\"mobile\"},{name:\"name\"},{name:\"new-password\"},{name:\"nickname\"},{name:\"organization\"},{name:\"organization-title\"},{name:\"pager\"},{name:\"photo\"},{name:\"postal-code\"},{name:\"sex\"},{name:\"shipping\"},{name:\"street-address\"},{name:\"tel-area-code\"},{name:\"tel\"},{name:\"tel-country-code\"},{name:\"tel-extension\"},{name:\"tel-local\"},{name:\"tel-local-prefix\"},{name:\"tel-local-suffix\"},{name:\"tel-national\"},{name:\"transaction-amount\"},{name:\"transaction-currency\"},{name:\"url\"},{name:\"username\"},{name:\"work\"}]},{name:\"autocomplete\",values:[{name:\"inline\"},{name:\"list\"},{name:\"both\"},{name:\"none\"}]},{name:\"current\",values:[{name:\"page\"},{name:\"step\"},{name:\"location\"},{name:\"date\"},{name:\"time\"},{name:\"true\"},{name:\"false\"}]},{name:\"dropeffect\",values:[{name:\"copy\"},{name:\"move\"},{name:\"link\"},{name:\"execute\"},{name:\"popup\"},{name:\"none\"}]},{name:\"invalid\",values:[{name:\"grammar\"},{name:\"false\"},{name:\"spelling\"},{name:\"true\"}]},{name:\"live\",values:[{name:\"off\"},{name:\"polite\"},{name:\"assertive\"}]},{name:\"orientation\",values:[{name:\"vertical\"},{name:\"horizontal\"},{name:\"undefined\"}]},{name:\"relevant\",values:[{name:\"additions\"},{name:\"removals\"},{name:\"text\"},{name:\"all\"},{name:\"additions text\"}]},{name:\"sort\",values:[{name:\"ascending\"},{name:\"descending\"},{name:\"none\"},{name:\"other\"}]},{name:\"roles\",values:[{name:\"alert\"},{name:\"alertdialog\"},{name:\"button\"},{name:\"checkbox\"},{name:\"dialog\"},{name:\"gridcell\"},{name:\"link\"},{name:\"log\"},{name:\"marquee\"},{name:\"menuitem\"},{name:\"menuitemcheckbox\"},{name:\"menuitemradio\"},{name:\"option\"},{name:\"progressbar\"},{name:\"radio\"},{name:\"scrollbar\"},{name:\"searchbox\"},{name:\"slider\"},{name:\"spinbutton\"},{name:\"status\"},{name:\"switch\"},{name:\"tab\"},{name:\"tabpanel\"},{name:\"textbox\"},{name:\"timer\"},{name:\"tooltip\"},{name:\"treeitem\"},{name:\"combobox\"},{name:\"grid\"},{name:\"listbox\"},{name:\"menu\"},{name:\"menubar\"},{name:\"radiogroup\"},{name:\"tablist\"},{name:\"tree\"},{name:\"treegrid\"},{name:\"application\"},{name:\"article\"},{name:\"cell\"},{name:\"columnheader\"},{name:\"definition\"},{name:\"directory\"},{name:\"document\"},{name:\"feed\"},{name:\"figure\"},{name:\"group\"},{name:\"heading\"},{name:\"img\"},{name:\"list\"},{name:\"listitem\"},{name:\"math\"},{name:\"none\"},{name:\"note\"},{name:\"presentation\"},{name:\"region\"},{name:\"row\"},{name:\"rowgroup\"},{name:\"rowheader\"},{name:\"separator\"},{name:\"table\"},{name:\"term\"},{name:\"text\"},{name:\"toolbar\"},{name:\"banner\"},{name:\"complementary\"},{name:\"contentinfo\"},{name:\"form\"},{name:\"main\"},{name:\"navigation\"},{name:\"region\"},{name:\"search\"},{name:\"doc-abstract\"},{name:\"doc-acknowledgments\"},{name:\"doc-afterword\"},{name:\"doc-appendix\"},{name:\"doc-backlink\"},{name:\"doc-biblioentry\"},{name:\"doc-bibliography\"},{name:\"doc-biblioref\"},{name:\"doc-chapter\"},{name:\"doc-colophon\"},{name:\"doc-conclusion\"},{name:\"doc-cover\"},{name:\"doc-credit\"},{name:\"doc-credits\"},{name:\"doc-dedication\"},{name:\"doc-endnote\"},{name:\"doc-endnotes\"},{name:\"doc-epigraph\"},{name:\"doc-epilogue\"},{name:\"doc-errata\"},{name:\"doc-example\"},{name:\"doc-footnote\"},{name:\"doc-foreword\"},{name:\"doc-glossary\"},{name:\"doc-glossref\"},{name:\"doc-index\"},{name:\"doc-introduction\"},{name:\"doc-noteref\"},{name:\"doc-notice\"},{name:\"doc-pagebreak\"},{name:\"doc-pagelist\"},{name:\"doc-part\"},{name:\"doc-preface\"},{name:\"doc-prologue\"},{name:\"doc-pullquote\"},{name:\"doc-qna\"},{name:\"doc-subtitle\"},{name:\"doc-tip\"},{name:\"doc-toc\"}]},{name:\"metanames\",values:[{name:\"application-name\"},{name:\"author\"},{name:\"description\"},{name:\"format-detection\"},{name:\"generator\"},{name:\"keywords\"},{name:\"publisher\"},{name:\"referrer\"},{name:\"robots\"},{name:\"theme-color\"},{name:\"viewport\"}]},{name:\"haspopup\",values:[{name:\"false\",description:{kind:\"markdown\",value:\"(default) Indicates the element does not have a popup.\"}},{name:\"true\",description:{kind:\"markdown\",value:\"Indicates the popup is a menu.\"}},{name:\"menu\",description:{kind:\"markdown\",value:\"Indicates the popup is a menu.\"}},{name:\"listbox\",description:{kind:\"markdown\",value:\"Indicates the popup is a listbox.\"}},{name:\"tree\",description:{kind:\"markdown\",value:\"Indicates the popup is a tree.\"}},{name:\"grid\",description:{kind:\"markdown\",value:\"Indicates the popup is a grid.\"}},{name:\"dialog\",description:{kind:\"markdown\",value:\"Indicates the popup is a dialog.\"}}]}]};var Tn=function(){function t(i){this.dataProviders=[],this.setDataProviders(i.useDefaultDataProvider!==!1,i.customDataProviders||[])}return t.prototype.setDataProviders=function(i,o){var n;this.dataProviders=[],i&&this.dataProviders.push(new Ge(\"html5\",bt)),(n=this.dataProviders).push.apply(n,o)},t.prototype.getDataProviders=function(){return this.dataProviders},t}();var Ci={};function kn(t){t===void 0&&(t=Ci);var i=new Tn(t),o=new Zt(t,i),n=new Qt(t,i);return{setDataProviders:i.setDataProviders.bind(i),createScanner:$,parseHTMLDocument:function(e){return je(e.getText())},doComplete:n.doComplete.bind(n),doComplete2:n.doComplete2.bind(n),setCompletionParticipants:n.setCompletionParticipants.bind(n),doHover:o.doHover.bind(o),format:sn,findDocumentHighlights:mn,findDocumentLinks:cn,findDocumentSymbols:fn,getFoldingRanges:wn,getSelectionRanges:yn,doQuoteComplete:n.doQuoteComplete.bind(n),doTagComplete:n.doTagComplete.bind(n),doRename:bn,findMatchingTagPosition:vn,findOnTypeRenameRanges:gt,findLinkedEditingRanges:gt}}function Sn(t,i){return new Ge(t,i)}var Je=class{constructor(i,o){this._ctx=i,this._languageSettings=o.languageSettings,this._languageId=o.languageId;let n=this._languageSettings.data,e=n?.useDefaultDataProvider,a=[];if(n?.dataProviders)for(let c in n.dataProviders)a.push(Sn(c,n.dataProviders[c]));this._languageService=kn({useDefaultDataProvider:e,customDataProviders:a})}async doComplete(i,o){let n=this._getTextDocument(i);if(!n)return null;let e=this._languageService.parseHTMLDocument(n);return Promise.resolve(this._languageService.doComplete(n,o,e,this._languageSettings&&this._languageSettings.suggest))}async format(i,o,n){let e=this._getTextDocument(i);if(!e)return[];let a={...this._languageSettings.format,...n},c=this._languageService.format(e,o,a);return Promise.resolve(c)}async doHover(i,o){let n=this._getTextDocument(i);if(!n)return null;let e=this._languageService.parseHTMLDocument(n),a=this._languageService.doHover(n,o,e);return Promise.resolve(a)}async findDocumentHighlights(i,o){let n=this._getTextDocument(i);if(!n)return[];let e=this._languageService.parseHTMLDocument(n),a=this._languageService.findDocumentHighlights(n,o,e);return Promise.resolve(a)}async findDocumentLinks(i){let o=this._getTextDocument(i);if(!o)return[];let n=this._languageService.findDocumentLinks(o,null);return Promise.resolve(n)}async findDocumentSymbols(i){let o=this._getTextDocument(i);if(!o)return[];let n=this._languageService.parseHTMLDocument(o),e=this._languageService.findDocumentSymbols(o,n);return Promise.resolve(e)}async getFoldingRanges(i,o){let n=this._getTextDocument(i);if(!n)return[];let e=this._languageService.getFoldingRanges(n,o);return Promise.resolve(e)}async getSelectionRanges(i,o){let n=this._getTextDocument(i);if(!n)return[];let e=this._languageService.getSelectionRanges(n,o);return Promise.resolve(e)}async doRename(i,o,n){let e=this._getTextDocument(i);if(!e)return null;let a=this._languageService.parseHTMLDocument(e),c=this._languageService.doRename(e,o,n,a);return Promise.resolve(c)}_getTextDocument(i){let o=this._ctx.getMirrorModels();for(let n of o)if(n.uri.toString()===i)return Me.create(i,this._languageId,n.version,n.getValue());return null}};function Mi(t,i){return new Je(t,i)}return Mn(Ri);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/json/jsonMode.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/json/jsonMode\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var wn=Object.create;var ie=Object.defineProperty;var In=Object.getOwnPropertyDescriptor;var xn=Object.getOwnPropertyNames;var En=Object.getPrototypeOf,_n=Object.prototype.hasOwnProperty;var Sn=(e=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(e,{get:(t,i)=>(typeof require<\"u\"?require:t)[i]}):e)(function(e){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var Pn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),An=(e,t)=>{for(var i in t)ie(e,i,{get:t[i],enumerable:!0})},te=(e,t,i,r)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let n of xn(t))!_n.call(e,n)&&n!==i&&ie(e,n,{get:()=>t[n],enumerable:!(r=In(t,n))||r.enumerable});return e},_e=(e,t,i)=>(te(e,t,\"default\"),i&&te(i,t,\"default\")),Se=(e,t,i)=>(i=e!=null?wn(En(e)):{},te(t||!e||!e.__esModule?ie(i,\"default\",{value:e,enumerable:!0}):i,e)),Ln=e=>te(ie({},\"__esModule\",{value:!0}),e);var Ae=Pn((vr,Pe)=>{var On=Se(Sn(\"vs/editor/editor.api\"));Pe.exports=On});var hr={};An(hr,{CompletionAdapter:()=>X,DefinitionAdapter:()=>Te,DiagnosticsAdapter:()=>q,DocumentColorAdapter:()=>Z,DocumentFormattingEditProvider:()=>G,DocumentHighlightAdapter:()=>ke,DocumentLinkAdapter:()=>we,DocumentRangeFormattingEditProvider:()=>Q,DocumentSymbolAdapter:()=>$,FoldingRangeAdapter:()=>ee,HoverAdapter:()=>Y,ReferenceAdapter:()=>be,RenameAdapter:()=>Ce,SelectionRangeAdapter:()=>ne,WorkerManager:()=>D,fromPosition:()=>L,fromRange:()=>Ie,getWorker:()=>dr,setupMode:()=>gr,toRange:()=>b,toTextEdit:()=>j});var c={};_e(c,Se(Ae()));var Wn=2*60*1e3,D=class{constructor(t){this._defaults=t,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>Wn&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=c.editor.createWebWorker({moduleId:\"vs/language/json/jsonWorker\",label:this._defaults.languageId,createData:{languageSettings:this._defaults.diagnosticsOptions,languageId:this._defaults.languageId,enableSchemaRequest:this._defaults.diagnosticsOptions.enableSchemaRequest}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...t){let i;return this._getClient().then(r=>{i=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(t)}).then(r=>i)}};var Le;(function(e){e.MIN_VALUE=-2147483648,e.MAX_VALUE=2147483647})(Le||(Le={}));var oe;(function(e){e.MIN_VALUE=0,e.MAX_VALUE=2147483647})(oe||(oe={}));var S;(function(e){function t(r,n){return r===Number.MAX_VALUE&&(r=oe.MAX_VALUE),n===Number.MAX_VALUE&&(n=oe.MAX_VALUE),{line:r,character:n}}e.create=t;function i(r){var n=r;return s.objectLiteral(n)&&s.uinteger(n.line)&&s.uinteger(n.character)}e.is=i})(S||(S={}));var y;(function(e){function t(r,n,a,o){if(s.uinteger(r)&&s.uinteger(n)&&s.uinteger(a)&&s.uinteger(o))return{start:S.create(r,n),end:S.create(a,o)};if(S.is(r)&&S.is(n))return{start:r,end:n};throw new Error(\"Range#create called with invalid arguments[\"+r+\", \"+n+\", \"+a+\", \"+o+\"]\")}e.create=t;function i(r){var n=r;return s.objectLiteral(n)&&S.is(n.start)&&S.is(n.end)}e.is=i})(y||(y={}));var pe;(function(e){function t(r,n){return{uri:r,range:n}}e.create=t;function i(r){var n=r;return s.defined(n)&&y.is(n.range)&&(s.string(n.uri)||s.undefined(n.uri))}e.is=i})(pe||(pe={}));var Oe;(function(e){function t(r,n,a,o){return{targetUri:r,targetRange:n,targetSelectionRange:a,originSelectionRange:o}}e.create=t;function i(r){var n=r;return s.defined(n)&&y.is(n.targetRange)&&s.string(n.targetUri)&&(y.is(n.targetSelectionRange)||s.undefined(n.targetSelectionRange))&&(y.is(n.originSelectionRange)||s.undefined(n.originSelectionRange))}e.is=i})(Oe||(Oe={}));var he;(function(e){function t(r,n,a,o){return{red:r,green:n,blue:a,alpha:o}}e.create=t;function i(r){var n=r;return s.numberRange(n.red,0,1)&&s.numberRange(n.green,0,1)&&s.numberRange(n.blue,0,1)&&s.numberRange(n.alpha,0,1)}e.is=i})(he||(he={}));var We;(function(e){function t(r,n){return{range:r,color:n}}e.create=t;function i(r){var n=r;return y.is(n.range)&&he.is(n.color)}e.is=i})(We||(We={}));var Re;(function(e){function t(r,n,a){return{label:r,textEdit:n,additionalTextEdits:a}}e.create=t;function i(r){var n=r;return s.string(n.label)&&(s.undefined(n.textEdit)||A.is(n))&&(s.undefined(n.additionalTextEdits)||s.typedArray(n.additionalTextEdits,A.is))}e.is=i})(Re||(Re={}));var M;(function(e){e.Comment=\"comment\",e.Imports=\"imports\",e.Region=\"region\"})(M||(M={}));var De;(function(e){function t(r,n,a,o,u){var l={startLine:r,endLine:n};return s.defined(a)&&(l.startCharacter=a),s.defined(o)&&(l.endCharacter=o),s.defined(u)&&(l.kind=u),l}e.create=t;function i(r){var n=r;return s.uinteger(n.startLine)&&s.uinteger(n.startLine)&&(s.undefined(n.startCharacter)||s.uinteger(n.startCharacter))&&(s.undefined(n.endCharacter)||s.uinteger(n.endCharacter))&&(s.undefined(n.kind)||s.string(n.kind))}e.is=i})(De||(De={}));var me;(function(e){function t(r,n){return{location:r,message:n}}e.create=t;function i(r){var n=r;return s.defined(n)&&pe.is(n.location)&&s.string(n.message)}e.is=i})(me||(me={}));var O;(function(e){e.Error=1,e.Warning=2,e.Information=3,e.Hint=4})(O||(O={}));var Ne;(function(e){e.Unnecessary=1,e.Deprecated=2})(Ne||(Ne={}));var Me;(function(e){function t(i){var r=i;return r!=null&&s.string(r.href)}e.is=t})(Me||(Me={}));var se;(function(e){function t(r,n,a,o,u,l){var h={range:r,message:n};return s.defined(a)&&(h.severity=a),s.defined(o)&&(h.code=o),s.defined(u)&&(h.source=u),s.defined(l)&&(h.relatedInformation=l),h}e.create=t;function i(r){var n,a=r;return s.defined(a)&&y.is(a.range)&&s.string(a.message)&&(s.number(a.severity)||s.undefined(a.severity))&&(s.integer(a.code)||s.string(a.code)||s.undefined(a.code))&&(s.undefined(a.codeDescription)||s.string((n=a.codeDescription)===null||n===void 0?void 0:n.href))&&(s.string(a.source)||s.undefined(a.source))&&(s.undefined(a.relatedInformation)||s.typedArray(a.relatedInformation,me.is))}e.is=i})(se||(se={}));var K;(function(e){function t(r,n){for(var a=[],o=2;o<arguments.length;o++)a[o-2]=arguments[o];var u={title:r,command:n};return s.defined(a)&&a.length>0&&(u.arguments=a),u}e.create=t;function i(r){var n=r;return s.defined(n)&&s.string(n.title)&&s.string(n.command)}e.is=i})(K||(K={}));var A;(function(e){function t(a,o){return{range:a,newText:o}}e.replace=t;function i(a,o){return{range:{start:a,end:a},newText:o}}e.insert=i;function r(a){return{range:a,newText:\"\"}}e.del=r;function n(a){var o=a;return s.objectLiteral(o)&&s.string(o.newText)&&y.is(o.range)}e.is=n})(A||(A={}));var N;(function(e){function t(r,n,a){var o={label:r};return n!==void 0&&(o.needsConfirmation=n),a!==void 0&&(o.description=a),o}e.create=t;function i(r){var n=r;return n!==void 0&&s.objectLiteral(n)&&s.string(n.label)&&(s.boolean(n.needsConfirmation)||n.needsConfirmation===void 0)&&(s.string(n.description)||n.description===void 0)}e.is=i})(N||(N={}));var T;(function(e){function t(i){var r=i;return typeof r==\"string\"}e.is=t})(T||(T={}));var P;(function(e){function t(a,o,u){return{range:a,newText:o,annotationId:u}}e.replace=t;function i(a,o,u){return{range:{start:a,end:a},newText:o,annotationId:u}}e.insert=i;function r(a,o){return{range:a,newText:\"\",annotationId:o}}e.del=r;function n(a){var o=a;return A.is(o)&&(N.is(o.annotationId)||T.is(o.annotationId))}e.is=n})(P||(P={}));var ue;(function(e){function t(r,n){return{textDocument:r,edits:n}}e.create=t;function i(r){var n=r;return s.defined(n)&&ce.is(n.textDocument)&&Array.isArray(n.edits)}e.is=i})(ue||(ue={}));var H;(function(e){function t(r,n,a){var o={kind:\"create\",uri:r};return n!==void 0&&(n.overwrite!==void 0||n.ignoreIfExists!==void 0)&&(o.options=n),a!==void 0&&(o.annotationId=a),o}e.create=t;function i(r){var n=r;return n&&n.kind===\"create\"&&s.string(n.uri)&&(n.options===void 0||(n.options.overwrite===void 0||s.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||s.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||T.is(n.annotationId))}e.is=i})(H||(H={}));var J;(function(e){function t(r,n,a,o){var u={kind:\"rename\",oldUri:r,newUri:n};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(u.options=a),o!==void 0&&(u.annotationId=o),u}e.create=t;function i(r){var n=r;return n&&n.kind===\"rename\"&&s.string(n.oldUri)&&s.string(n.newUri)&&(n.options===void 0||(n.options.overwrite===void 0||s.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||s.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||T.is(n.annotationId))}e.is=i})(J||(J={}));var B;(function(e){function t(r,n,a){var o={kind:\"delete\",uri:r};return n!==void 0&&(n.recursive!==void 0||n.ignoreIfNotExists!==void 0)&&(o.options=n),a!==void 0&&(o.annotationId=a),o}e.create=t;function i(r){var n=r;return n&&n.kind===\"delete\"&&s.string(n.uri)&&(n.options===void 0||(n.options.recursive===void 0||s.boolean(n.options.recursive))&&(n.options.ignoreIfNotExists===void 0||s.boolean(n.options.ignoreIfNotExists)))&&(n.annotationId===void 0||T.is(n.annotationId))}e.is=i})(B||(B={}));var ve;(function(e){function t(i){var r=i;return r&&(r.changes!==void 0||r.documentChanges!==void 0)&&(r.documentChanges===void 0||r.documentChanges.every(function(n){return s.string(n.kind)?H.is(n)||J.is(n)||B.is(n):ue.is(n)}))}e.is=t})(ve||(ve={}));var ae=function(){function e(t,i){this.edits=t,this.changeAnnotations=i}return e.prototype.insert=function(t,i,r){var n,a;if(r===void 0?n=A.insert(t,i):T.is(r)?(a=r,n=P.insert(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(r),n=P.insert(t,i,a)),this.edits.push(n),a!==void 0)return a},e.prototype.replace=function(t,i,r){var n,a;if(r===void 0?n=A.replace(t,i):T.is(r)?(a=r,n=P.replace(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(r),n=P.replace(t,i,a)),this.edits.push(n),a!==void 0)return a},e.prototype.delete=function(t,i){var r,n;if(i===void 0?r=A.del(t):T.is(i)?(n=i,r=P.del(t,i)):(this.assertChangeAnnotations(this.changeAnnotations),n=this.changeAnnotations.manage(i),r=P.del(t,n)),this.edits.push(r),n!==void 0)return n},e.prototype.add=function(t){this.edits.push(t)},e.prototype.all=function(){return this.edits},e.prototype.clear=function(){this.edits.splice(0,this.edits.length)},e.prototype.assertChangeAnnotations=function(t){if(t===void 0)throw new Error(\"Text edit change is not configured to manage change annotations.\")},e}(),Fe=function(){function e(t){this._annotations=t===void 0?Object.create(null):t,this._counter=0,this._size=0}return e.prototype.all=function(){return this._annotations},Object.defineProperty(e.prototype,\"size\",{get:function(){return this._size},enumerable:!1,configurable:!0}),e.prototype.manage=function(t,i){var r;if(T.is(t)?r=t:(r=this.nextId(),i=t),this._annotations[r]!==void 0)throw new Error(\"Id \"+r+\" is already in use.\");if(i===void 0)throw new Error(\"No annotation provided for id \"+r);return this._annotations[r]=i,this._size++,r},e.prototype.nextId=function(){return this._counter++,this._counter.toString()},e}(),wr=function(){function e(t){var i=this;this._textEditChanges=Object.create(null),t!==void 0?(this._workspaceEdit=t,t.documentChanges?(this._changeAnnotations=new Fe(t.changeAnnotations),t.changeAnnotations=this._changeAnnotations.all(),t.documentChanges.forEach(function(r){if(ue.is(r)){var n=new ae(r.edits,i._changeAnnotations);i._textEditChanges[r.textDocument.uri]=n}})):t.changes&&Object.keys(t.changes).forEach(function(r){var n=new ae(t.changes[r]);i._textEditChanges[r]=n})):this._workspaceEdit={}}return Object.defineProperty(e.prototype,\"edit\",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),e.prototype.getTextEditChange=function(t){if(ce.is(t)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var i={uri:t.uri,version:t.version},r=this._textEditChanges[i.uri];if(!r){var n=[],a={textDocument:i,edits:n};this._workspaceEdit.documentChanges.push(a),r=new ae(n,this._changeAnnotations),this._textEditChanges[i.uri]=r}return r}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error(\"Workspace edit is not configured for normal text edit changes.\");var r=this._textEditChanges[t];if(!r){var n=[];this._workspaceEdit.changes[t]=n,r=new ae(n),this._textEditChanges[t]=r}return r}},e.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new Fe,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},e.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},e.prototype.createFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var n;N.is(i)||T.is(i)?n=i:r=i;var a,o;if(n===void 0?a=H.create(t,r):(o=T.is(n)?n:this._changeAnnotations.manage(n),a=H.create(t,r,o)),this._workspaceEdit.documentChanges.push(a),o!==void 0)return o},e.prototype.renameFile=function(t,i,r,n){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var a;N.is(r)||T.is(r)?a=r:n=r;var o,u;if(a===void 0?o=J.create(t,i,n):(u=T.is(a)?a:this._changeAnnotations.manage(a),o=J.create(t,i,n,u)),this._workspaceEdit.documentChanges.push(o),u!==void 0)return u},e.prototype.deleteFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var n;N.is(i)||T.is(i)?n=i:r=i;var a,o;if(n===void 0?a=B.create(t,r):(o=T.is(n)?n:this._changeAnnotations.manage(n),a=B.create(t,r,o)),this._workspaceEdit.documentChanges.push(a),o!==void 0)return o},e}();var je;(function(e){function t(r){return{uri:r}}e.create=t;function i(r){var n=r;return s.defined(n)&&s.string(n.uri)}e.is=i})(je||(je={}));var Ue;(function(e){function t(r,n){return{uri:r,version:n}}e.create=t;function i(r){var n=r;return s.defined(n)&&s.string(n.uri)&&s.integer(n.version)}e.is=i})(Ue||(Ue={}));var ce;(function(e){function t(r,n){return{uri:r,version:n}}e.create=t;function i(r){var n=r;return s.defined(n)&&s.string(n.uri)&&(n.version===null||s.integer(n.version))}e.is=i})(ce||(ce={}));var Ve;(function(e){function t(r,n,a,o){return{uri:r,languageId:n,version:a,text:o}}e.create=t;function i(r){var n=r;return s.defined(n)&&s.string(n.uri)&&s.string(n.languageId)&&s.integer(n.version)&&s.string(n.text)}e.is=i})(Ve||(Ve={}));var z;(function(e){e.PlainText=\"plaintext\",e.Markdown=\"markdown\"})(z||(z={}));(function(e){function t(i){var r=i;return r===e.PlainText||r===e.Markdown}e.is=t})(z||(z={}));var ye;(function(e){function t(i){var r=i;return s.objectLiteral(i)&&z.is(r.kind)&&s.string(r.value)}e.is=t})(ye||(ye={}));var m;(function(e){e.Text=1,e.Method=2,e.Function=3,e.Constructor=4,e.Field=5,e.Variable=6,e.Class=7,e.Interface=8,e.Module=9,e.Property=10,e.Unit=11,e.Value=12,e.Enum=13,e.Keyword=14,e.Snippet=15,e.Color=16,e.File=17,e.Reference=18,e.Folder=19,e.EnumMember=20,e.Constant=21,e.Struct=22,e.Event=23,e.Operator=24,e.TypeParameter=25})(m||(m={}));var le;(function(e){e.PlainText=1,e.Snippet=2})(le||(le={}));var Ke;(function(e){e.Deprecated=1})(Ke||(Ke={}));var He;(function(e){function t(r,n,a){return{newText:r,insert:n,replace:a}}e.create=t;function i(r){var n=r;return n&&s.string(n.newText)&&y.is(n.insert)&&y.is(n.replace)}e.is=i})(He||(He={}));var Je;(function(e){e.asIs=1,e.adjustIndentation=2})(Je||(Je={}));var Be;(function(e){function t(i){return{label:i}}e.create=t})(Be||(Be={}));var ze;(function(e){function t(i,r){return{items:i||[],isIncomplete:!!r}}e.create=t})(ze||(ze={}));var fe;(function(e){function t(r){return r.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}e.fromPlainText=t;function i(r){var n=r;return s.string(n)||s.objectLiteral(n)&&s.string(n.language)&&s.string(n.value)}e.is=i})(fe||(fe={}));var qe;(function(e){function t(i){var r=i;return!!r&&s.objectLiteral(r)&&(ye.is(r.contents)||fe.is(r.contents)||s.typedArray(r.contents,fe.is))&&(i.range===void 0||y.is(i.range))}e.is=t})(qe||(qe={}));var Xe;(function(e){function t(i,r){return r?{label:i,documentation:r}:{label:i}}e.create=t})(Xe||(Xe={}));var Ye;(function(e){function t(i,r){for(var n=[],a=2;a<arguments.length;a++)n[a-2]=arguments[a];var o={label:i};return s.defined(r)&&(o.documentation=r),s.defined(n)?o.parameters=n:o.parameters=[],o}e.create=t})(Ye||(Ye={}));var F;(function(e){e.Text=1,e.Read=2,e.Write=3})(F||(F={}));var $e;(function(e){function t(i,r){var n={range:i};return s.number(r)&&(n.kind=r),n}e.create=t})($e||($e={}));var v;(function(e){e.File=1,e.Module=2,e.Namespace=3,e.Package=4,e.Class=5,e.Method=6,e.Property=7,e.Field=8,e.Constructor=9,e.Enum=10,e.Interface=11,e.Function=12,e.Variable=13,e.Constant=14,e.String=15,e.Number=16,e.Boolean=17,e.Array=18,e.Object=19,e.Key=20,e.Null=21,e.EnumMember=22,e.Struct=23,e.Event=24,e.Operator=25,e.TypeParameter=26})(v||(v={}));var Ge;(function(e){e.Deprecated=1})(Ge||(Ge={}));var Qe;(function(e){function t(i,r,n,a,o){var u={name:i,kind:r,location:{uri:a,range:n}};return o&&(u.containerName=o),u}e.create=t})(Qe||(Qe={}));var Ze;(function(e){function t(r,n,a,o,u,l){var h={name:r,detail:n,kind:a,range:o,selectionRange:u};return l!==void 0&&(h.children=l),h}e.create=t;function i(r){var n=r;return n&&s.string(n.name)&&s.number(n.kind)&&y.is(n.range)&&y.is(n.selectionRange)&&(n.detail===void 0||s.string(n.detail))&&(n.deprecated===void 0||s.boolean(n.deprecated))&&(n.children===void 0||Array.isArray(n.children))&&(n.tags===void 0||Array.isArray(n.tags))}e.is=i})(Ze||(Ze={}));var en;(function(e){e.Empty=\"\",e.QuickFix=\"quickfix\",e.Refactor=\"refactor\",e.RefactorExtract=\"refactor.extract\",e.RefactorInline=\"refactor.inline\",e.RefactorRewrite=\"refactor.rewrite\",e.Source=\"source\",e.SourceOrganizeImports=\"source.organizeImports\",e.SourceFixAll=\"source.fixAll\"})(en||(en={}));var nn;(function(e){function t(r,n){var a={diagnostics:r};return n!=null&&(a.only=n),a}e.create=t;function i(r){var n=r;return s.defined(n)&&s.typedArray(n.diagnostics,se.is)&&(n.only===void 0||s.typedArray(n.only,s.string))}e.is=i})(nn||(nn={}));var rn;(function(e){function t(r,n,a){var o={title:r},u=!0;return typeof n==\"string\"?(u=!1,o.kind=n):K.is(n)?o.command=n:o.edit=n,u&&a!==void 0&&(o.kind=a),o}e.create=t;function i(r){var n=r;return n&&s.string(n.title)&&(n.diagnostics===void 0||s.typedArray(n.diagnostics,se.is))&&(n.kind===void 0||s.string(n.kind))&&(n.edit!==void 0||n.command!==void 0)&&(n.command===void 0||K.is(n.command))&&(n.isPreferred===void 0||s.boolean(n.isPreferred))&&(n.edit===void 0||ve.is(n.edit))}e.is=i})(rn||(rn={}));var tn;(function(e){function t(r,n){var a={range:r};return s.defined(n)&&(a.data=n),a}e.create=t;function i(r){var n=r;return s.defined(n)&&y.is(n.range)&&(s.undefined(n.command)||K.is(n.command))}e.is=i})(tn||(tn={}));var an;(function(e){function t(r,n){return{tabSize:r,insertSpaces:n}}e.create=t;function i(r){var n=r;return s.defined(n)&&s.uinteger(n.tabSize)&&s.boolean(n.insertSpaces)}e.is=i})(an||(an={}));var on;(function(e){function t(r,n,a){return{range:r,target:n,data:a}}e.create=t;function i(r){var n=r;return s.defined(n)&&y.is(n.range)&&(s.undefined(n.target)||s.string(n.target))}e.is=i})(on||(on={}));var sn;(function(e){function t(r,n){return{range:r,parent:n}}e.create=t;function i(r){var n=r;return n!==void 0&&y.is(n.range)&&(n.parent===void 0||e.is(n.parent))}e.is=i})(sn||(sn={}));var un;(function(e){function t(a,o,u,l){return new Rn(a,o,u,l)}e.create=t;function i(a){var o=a;return!!(s.defined(o)&&s.string(o.uri)&&(s.undefined(o.languageId)||s.string(o.languageId))&&s.uinteger(o.lineCount)&&s.func(o.getText)&&s.func(o.positionAt)&&s.func(o.offsetAt))}e.is=i;function r(a,o){for(var u=a.getText(),l=n(o,function(_,R){var V=_.range.start.line-R.range.start.line;return V===0?_.range.start.character-R.range.start.character:V}),h=u.length,p=l.length-1;p>=0;p--){var f=l[p],C=a.offsetAt(f.range.start),g=a.offsetAt(f.range.end);if(g<=h)u=u.substring(0,C)+f.newText+u.substring(g,u.length);else throw new Error(\"Overlapping edit\");h=C}return u}e.applyEdits=r;function n(a,o){if(a.length<=1)return a;var u=a.length/2|0,l=a.slice(0,u),h=a.slice(u);n(l,o),n(h,o);for(var p=0,f=0,C=0;p<l.length&&f<h.length;){var g=o(l[p],h[f]);g<=0?a[C++]=l[p++]:a[C++]=h[f++]}for(;p<l.length;)a[C++]=l[p++];for(;f<h.length;)a[C++]=h[f++];return a}})(un||(un={}));var Rn=function(){function e(t,i,r,n){this._uri=t,this._languageId=i,this._version=r,this._content=n,this._lineOffsets=void 0}return Object.defineProperty(e.prototype,\"uri\",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"languageId\",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,\"version\",{get:function(){return this._version},enumerable:!1,configurable:!0}),e.prototype.getText=function(t){if(t){var i=this.offsetAt(t.start),r=this.offsetAt(t.end);return this._content.substring(i,r)}return this._content},e.prototype.update=function(t,i){this._content=t.text,this._version=i,this._lineOffsets=void 0},e.prototype.getLineOffsets=function(){if(this._lineOffsets===void 0){for(var t=[],i=this._content,r=!0,n=0;n<i.length;n++){r&&(t.push(n),r=!1);var a=i.charAt(n);r=a===\"\\r\"||a===`\n`,a===\"\\r\"&&n+1<i.length&&i.charAt(n+1)===`\n`&&n++}r&&i.length>0&&t.push(i.length),this._lineOffsets=t}return this._lineOffsets},e.prototype.positionAt=function(t){t=Math.max(Math.min(t,this._content.length),0);var i=this.getLineOffsets(),r=0,n=i.length;if(n===0)return S.create(0,t);for(;r<n;){var a=Math.floor((r+n)/2);i[a]>t?n=a:r=a+1}var o=r-1;return S.create(o,t-i[o])},e.prototype.offsetAt=function(t){var i=this.getLineOffsets();if(t.line>=i.length)return this._content.length;if(t.line<0)return 0;var r=i[t.line],n=t.line+1<i.length?i[t.line+1]:this._content.length;return Math.max(Math.min(r+t.character,n),r)},Object.defineProperty(e.prototype,\"lineCount\",{get:function(){return this.getLineOffsets().length},enumerable:!1,configurable:!0}),e}(),s;(function(e){var t=Object.prototype.toString;function i(g){return typeof g<\"u\"}e.defined=i;function r(g){return typeof g>\"u\"}e.undefined=r;function n(g){return g===!0||g===!1}e.boolean=n;function a(g){return t.call(g)===\"[object String]\"}e.string=a;function o(g){return t.call(g)===\"[object Number]\"}e.number=o;function u(g,_,R){return t.call(g)===\"[object Number]\"&&_<=g&&g<=R}e.numberRange=u;function l(g){return t.call(g)===\"[object Number]\"&&-2147483648<=g&&g<=2147483647}e.integer=l;function h(g){return t.call(g)===\"[object Number]\"&&0<=g&&g<=2147483647}e.uinteger=h;function p(g){return t.call(g)===\"[object Function]\"}e.func=p;function f(g){return g!==null&&typeof g==\"object\"}e.objectLiteral=f;function C(g,_){return Array.isArray(g)&&g.every(_)}e.typedArray=C})(s||(s={}));var q=class{constructor(t,i,r){this._languageId=t;this._worker=i;this._disposables=[];this._listener=Object.create(null);let n=o=>{let u=o.getLanguageId();if(u!==this._languageId)return;let l;this._listener[o.uri.toString()]=o.onDidChangeContent(()=>{window.clearTimeout(l),l=window.setTimeout(()=>this._doValidate(o.uri,u),500)}),this._doValidate(o.uri,u)},a=o=>{c.editor.setModelMarkers(o,this._languageId,[]);let u=o.uri.toString(),l=this._listener[u];l&&(l.dispose(),delete this._listener[u])};this._disposables.push(c.editor.onDidCreateModel(n)),this._disposables.push(c.editor.onWillDisposeModel(a)),this._disposables.push(c.editor.onDidChangeModelLanguage(o=>{a(o.model),n(o.model)})),this._disposables.push(r(o=>{c.editor.getModels().forEach(u=>{u.getLanguageId()===this._languageId&&(a(u),n(u))})})),this._disposables.push({dispose:()=>{c.editor.getModels().forEach(a);for(let o in this._listener)this._listener[o].dispose()}}),c.editor.getModels().forEach(n)}dispose(){this._disposables.forEach(t=>t&&t.dispose()),this._disposables.length=0}_doValidate(t,i){this._worker(t).then(r=>r.doValidation(t.toString())).then(r=>{let n=r.map(o=>Mn(t,o)),a=c.editor.getModel(t);a&&a.getLanguageId()===i&&c.editor.setModelMarkers(a,i,n)}).then(void 0,r=>{console.error(r)})}};function Nn(e){switch(e){case O.Error:return c.MarkerSeverity.Error;case O.Warning:return c.MarkerSeverity.Warning;case O.Information:return c.MarkerSeverity.Info;case O.Hint:return c.MarkerSeverity.Hint;default:return c.MarkerSeverity.Info}}function Mn(e,t){let i=typeof t.code==\"number\"?String(t.code):t.code;return{severity:Nn(t.severity),startLineNumber:t.range.start.line+1,startColumn:t.range.start.character+1,endLineNumber:t.range.end.line+1,endColumn:t.range.end.character+1,message:t.message,code:i,source:t.source}}var X=class{constructor(t,i){this._worker=t;this._triggerCharacters=i}get triggerCharacters(){return this._triggerCharacters}provideCompletionItems(t,i,r,n){let a=t.uri;return this._worker(a).then(o=>o.doComplete(a.toString(),L(i))).then(o=>{if(!o)return;let u=t.getWordUntilPosition(i),l=new c.Range(i.lineNumber,u.startColumn,i.lineNumber,u.endColumn),h=o.items.map(p=>{let f={label:p.label,insertText:p.insertText||p.label,sortText:p.sortText,filterText:p.filterText,documentation:p.documentation,detail:p.detail,command:Un(p.command),range:l,kind:jn(p.kind)};return p.textEdit&&(Fn(p.textEdit)?f.range={insert:b(p.textEdit.insert),replace:b(p.textEdit.replace)}:f.range=b(p.textEdit.range),f.insertText=p.textEdit.newText),p.additionalTextEdits&&(f.additionalTextEdits=p.additionalTextEdits.map(j)),p.insertTextFormat===le.Snippet&&(f.insertTextRules=c.languages.CompletionItemInsertTextRule.InsertAsSnippet),f});return{isIncomplete:o.isIncomplete,suggestions:h}})}};function L(e){if(e)return{character:e.column-1,line:e.lineNumber-1}}function Ie(e){if(e)return{start:{line:e.startLineNumber-1,character:e.startColumn-1},end:{line:e.endLineNumber-1,character:e.endColumn-1}}}function b(e){if(e)return new c.Range(e.start.line+1,e.start.character+1,e.end.line+1,e.end.character+1)}function Fn(e){return typeof e.insert<\"u\"&&typeof e.replace<\"u\"}function jn(e){let t=c.languages.CompletionItemKind;switch(e){case m.Text:return t.Text;case m.Method:return t.Method;case m.Function:return t.Function;case m.Constructor:return t.Constructor;case m.Field:return t.Field;case m.Variable:return t.Variable;case m.Class:return t.Class;case m.Interface:return t.Interface;case m.Module:return t.Module;case m.Property:return t.Property;case m.Unit:return t.Unit;case m.Value:return t.Value;case m.Enum:return t.Enum;case m.Keyword:return t.Keyword;case m.Snippet:return t.Snippet;case m.Color:return t.Color;case m.File:return t.File;case m.Reference:return t.Reference}return t.Property}function j(e){if(e)return{range:b(e.range),text:e.newText}}function Un(e){return e&&e.command===\"editor.action.triggerSuggest\"?{id:e.command,title:e.title,arguments:e.arguments}:void 0}var Y=class{constructor(t){this._worker=t}provideHover(t,i,r){let n=t.uri;return this._worker(n).then(a=>a.doHover(n.toString(),L(i))).then(a=>{if(a)return{range:b(a.range),contents:Kn(a.contents)}})}};function Vn(e){return e&&typeof e==\"object\"&&typeof e.kind==\"string\"}function cn(e){return typeof e==\"string\"?{value:e}:Vn(e)?e.kind===\"plaintext\"?{value:e.value.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}:{value:e.value}:{value:\"```\"+e.language+`\n`+e.value+\"\\n```\\n\"}}function Kn(e){if(e)return Array.isArray(e)?e.map(cn):[cn(e)]}var ke=class{constructor(t){this._worker=t}provideDocumentHighlights(t,i,r){let n=t.uri;return this._worker(n).then(a=>a.findDocumentHighlights(n.toString(),L(i))).then(a=>{if(a)return a.map(o=>({range:b(o.range),kind:Hn(o.kind)}))})}};function Hn(e){switch(e){case F.Read:return c.languages.DocumentHighlightKind.Read;case F.Write:return c.languages.DocumentHighlightKind.Write;case F.Text:return c.languages.DocumentHighlightKind.Text}return c.languages.DocumentHighlightKind.Text}var Te=class{constructor(t){this._worker=t}provideDefinition(t,i,r){let n=t.uri;return this._worker(n).then(a=>a.findDefinition(n.toString(),L(i))).then(a=>{if(a)return[ln(a)]})}};function ln(e){return{uri:c.Uri.parse(e.uri),range:b(e.range)}}var be=class{constructor(t){this._worker=t}provideReferences(t,i,r,n){let a=t.uri;return this._worker(a).then(o=>o.findReferences(a.toString(),L(i))).then(o=>{if(o)return o.map(ln)})}},Ce=class{constructor(t){this._worker=t}provideRenameEdits(t,i,r,n){let a=t.uri;return this._worker(a).then(o=>o.doRename(a.toString(),L(i),r)).then(o=>Jn(o))}};function Jn(e){if(!e||!e.changes)return;let t=[];for(let i in e.changes){let r=c.Uri.parse(i);for(let n of e.changes[i])t.push({resource:r,versionId:void 0,textEdit:{range:b(n.range),text:n.newText}})}return{edits:t}}var $=class{constructor(t){this._worker=t}provideDocumentSymbols(t,i){let r=t.uri;return this._worker(r).then(n=>n.findDocumentSymbols(r.toString())).then(n=>{if(n)return n.map(a=>Bn(a)?fn(a):{name:a.name,detail:\"\",containerName:a.containerName,kind:dn(a.kind),range:b(a.location.range),selectionRange:b(a.location.range),tags:[]})})}};function Bn(e){return\"children\"in e}function fn(e){return{name:e.name,detail:e.detail??\"\",kind:dn(e.kind),range:b(e.range),selectionRange:b(e.selectionRange),tags:e.tags??[],children:(e.children??[]).map(t=>fn(t))}}function dn(e){let t=c.languages.SymbolKind;switch(e){case v.File:return t.File;case v.Module:return t.Module;case v.Namespace:return t.Namespace;case v.Package:return t.Package;case v.Class:return t.Class;case v.Method:return t.Method;case v.Property:return t.Property;case v.Field:return t.Field;case v.Constructor:return t.Constructor;case v.Enum:return t.Enum;case v.Interface:return t.Interface;case v.Function:return t.Function;case v.Variable:return t.Variable;case v.Constant:return t.Constant;case v.String:return t.String;case v.Number:return t.Number;case v.Boolean:return t.Boolean;case v.Array:return t.Array}return t.Function}var we=class{constructor(t){this._worker=t}provideLinks(t,i){let r=t.uri;return this._worker(r).then(n=>n.findDocumentLinks(r.toString())).then(n=>{if(n)return{links:n.map(a=>({range:b(a.range),url:a.target}))}})}},G=class{constructor(t){this._worker=t}provideDocumentFormattingEdits(t,i,r){let n=t.uri;return this._worker(n).then(a=>a.format(n.toString(),null,gn(i)).then(o=>{if(!(!o||o.length===0))return o.map(j)}))}},Q=class{constructor(t){this._worker=t;this.canFormatMultipleRanges=!1}provideDocumentRangeFormattingEdits(t,i,r,n){let a=t.uri;return this._worker(a).then(o=>o.format(a.toString(),Ie(i),gn(r)).then(u=>{if(!(!u||u.length===0))return u.map(j)}))}};function gn(e){return{tabSize:e.tabSize,insertSpaces:e.insertSpaces}}var Z=class{constructor(t){this._worker=t}provideDocumentColors(t,i){let r=t.uri;return this._worker(r).then(n=>n.findDocumentColors(r.toString())).then(n=>{if(n)return n.map(a=>({color:a.color,range:b(a.range)}))})}provideColorPresentations(t,i,r){let n=t.uri;return this._worker(n).then(a=>a.getColorPresentations(n.toString(),i.color,Ie(i.range))).then(a=>{if(a)return a.map(o=>{let u={label:o.label};return o.textEdit&&(u.textEdit=j(o.textEdit)),o.additionalTextEdits&&(u.additionalTextEdits=o.additionalTextEdits.map(j)),u})})}},ee=class{constructor(t){this._worker=t}provideFoldingRanges(t,i,r){let n=t.uri;return this._worker(n).then(a=>a.getFoldingRanges(n.toString(),i)).then(a=>{if(a)return a.map(o=>{let u={start:o.startLine+1,end:o.endLine+1};return typeof o.kind<\"u\"&&(u.kind=zn(o.kind)),u})})}};function zn(e){switch(e){case M.Comment:return c.languages.FoldingRangeKind.Comment;case M.Imports:return c.languages.FoldingRangeKind.Imports;case M.Region:return c.languages.FoldingRangeKind.Region}}var ne=class{constructor(t){this._worker=t}provideSelectionRanges(t,i,r){let n=t.uri;return this._worker(n).then(a=>a.getSelectionRanges(n.toString(),i.map(L))).then(a=>{if(a)return a.map(o=>{let u=[];for(;o;)u.push({range:b(o.range)}),o=o.parent;return u})})}};function de(e,t){t===void 0&&(t=!1);var i=e.length,r=0,n=\"\",a=0,o=16,u=0,l=0,h=0,p=0,f=0;function C(d,w){for(var E=0,I=0;E<d||!w;){var k=e.charCodeAt(r);if(k>=48&&k<=57)I=I*16+k-48;else if(k>=65&&k<=70)I=I*16+k-65+10;else if(k>=97&&k<=102)I=I*16+k-97+10;else break;r++,E++}return E<d&&(I=-1),I}function g(d){r=d,n=\"\",a=0,o=16,f=0}function _(){var d=r;if(e.charCodeAt(r)===48)r++;else for(r++;r<e.length&&U(e.charCodeAt(r));)r++;if(r<e.length&&e.charCodeAt(r)===46)if(r++,r<e.length&&U(e.charCodeAt(r)))for(r++;r<e.length&&U(e.charCodeAt(r));)r++;else return f=3,e.substring(d,r);var w=r;if(r<e.length&&(e.charCodeAt(r)===69||e.charCodeAt(r)===101))if(r++,(r<e.length&&e.charCodeAt(r)===43||e.charCodeAt(r)===45)&&r++,r<e.length&&U(e.charCodeAt(r))){for(r++;r<e.length&&U(e.charCodeAt(r));)r++;w=r}else f=3;return e.substring(d,w)}function R(){for(var d=\"\",w=r;;){if(r>=i){d+=e.substring(w,r),f=2;break}var E=e.charCodeAt(r);if(E===34){d+=e.substring(w,r),r++;break}if(E===92){if(d+=e.substring(w,r),r++,r>=i){f=2;break}var I=e.charCodeAt(r++);switch(I){case 34:d+='\"';break;case 92:d+=\"\\\\\";break;case 47:d+=\"/\";break;case 98:d+=\"\\b\";break;case 102:d+=\"\\f\";break;case 110:d+=`\n`;break;case 114:d+=\"\\r\";break;case 116:d+=\"\t\";break;case 117:var k=C(4,!0);k>=0?d+=String.fromCharCode(k):f=4;break;default:f=5}w=r;continue}if(E>=0&&E<=31)if(re(E)){d+=e.substring(w,r),f=2;break}else f=6;r++}return d}function V(){if(n=\"\",f=0,a=r,l=u,p=h,r>=i)return a=i,o=17;var d=e.charCodeAt(r);if(xe(d)){do r++,n+=String.fromCharCode(d),d=e.charCodeAt(r);while(xe(d));return o=15}if(re(d))return r++,n+=String.fromCharCode(d),d===13&&e.charCodeAt(r)===10&&(r++,n+=`\n`),u++,h=r,o=14;switch(d){case 123:return r++,o=1;case 125:return r++,o=2;case 91:return r++,o=3;case 93:return r++,o=4;case 58:return r++,o=6;case 44:return r++,o=5;case 34:return r++,n=R(),o=10;case 47:var w=r-1;if(e.charCodeAt(r+1)===47){for(r+=2;r<i&&!re(e.charCodeAt(r));)r++;return n=e.substring(w,r),o=12}if(e.charCodeAt(r+1)===42){r+=2;for(var E=i-1,I=!1;r<E;){var k=e.charCodeAt(r);if(k===42&&e.charCodeAt(r+1)===47){r+=2,I=!0;break}r++,re(k)&&(k===13&&e.charCodeAt(r)===10&&r++,u++,h=r)}return I||(r++,f=1),n=e.substring(w,r),o=13}return n+=String.fromCharCode(d),r++,o=16;case 45:if(n+=String.fromCharCode(d),r++,r===i||!U(e.charCodeAt(r)))return o=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n+=_(),o=11;default:for(;r<i&&bn(d);)r++,d=e.charCodeAt(r);if(a!==r){switch(n=e.substring(a,r),n){case\"true\":return o=8;case\"false\":return o=9;case\"null\":return o=7}return o=16}return n+=String.fromCharCode(d),r++,o=16}}function bn(d){if(xe(d)||re(d))return!1;switch(d){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function Cn(){var d;do d=V();while(d>=12&&d<=15);return d}return{setPosition:g,getPosition:function(){return r},scan:t?Cn:V,getToken:function(){return o},getTokenValue:function(){return n},getTokenOffset:function(){return a},getTokenLength:function(){return r-a},getTokenStartLine:function(){return l},getTokenStartCharacter:function(){return a-p},getTokenError:function(){return f}}}function xe(e){return e===32||e===9||e===11||e===12||e===160||e===5760||e>=8192&&e<=8203||e===8239||e===8287||e===12288||e===65279}function re(e){return e===10||e===13||e===8232||e===8233}function U(e){return e>=48&&e<=57}var pn;(function(e){e.DEFAULT={allowTrailingComma:!1}})(pn||(pn={}));var hn=de;function yn(e){return{getInitialState:()=>new ge(null,null,!1,null),tokenize:(t,i)=>fr(e,t,i)}}var mn=\"delimiter.bracket.json\",vn=\"delimiter.array.json\",rr=\"delimiter.colon.json\",tr=\"delimiter.comma.json\",ir=\"keyword.json\",ar=\"keyword.json\",or=\"string.value.json\",sr=\"number.json\",ur=\"string.key.json\",cr=\"comment.block.json\",lr=\"comment.line.json\";var W=class e{constructor(t,i){this.parent=t;this.type=i}static pop(t){return t?t.parent:null}static push(t,i){return new e(t,i)}static equals(t,i){if(!t&&!i)return!0;if(!t||!i)return!1;for(;t&&i;){if(t===i)return!0;if(t.type!==i.type)return!1;t=t.parent,i=i.parent}return!0}},ge=class e{constructor(t,i,r,n){this._state=t,this.scanError=i,this.lastWasColon=r,this.parents=n}clone(){return new e(this._state,this.scanError,this.lastWasColon,this.parents)}equals(t){return t===this?!0:!t||!(t instanceof e)?!1:this.scanError===t.scanError&&this.lastWasColon===t.lastWasColon&&W.equals(this.parents,t.parents)}getStateData(){return this._state}setStateData(t){this._state=t}};function fr(e,t,i,r=0){let n=0,a=!1;switch(i.scanError){case 2:t='\"'+t,n=1;break;case 1:t=\"/*\"+t,n=2;break}let o=hn(t),u=i.lastWasColon,l=i.parents,h={tokens:[],endState:i.clone()};for(;;){let p=r+o.getPosition(),f=\"\",C=o.scan();if(C===17)break;if(p===r+o.getPosition())throw new Error(\"Scanner did not advance, next 3 characters are: \"+t.substr(o.getPosition(),3));switch(a&&(p-=n),a=n>0,C){case 1:l=W.push(l,0),f=mn,u=!1;break;case 2:l=W.pop(l),f=mn,u=!1;break;case 3:l=W.push(l,1),f=vn,u=!1;break;case 4:l=W.pop(l),f=vn,u=!1;break;case 6:f=rr,u=!0;break;case 5:f=tr,u=!1;break;case 8:case 9:f=ir,u=!1;break;case 7:f=ar,u=!1;break;case 10:let _=(l?l.type:0)===1;f=u||_?or:ur,u=!1;break;case 11:f=sr,u=!1;break}if(e)switch(C){case 12:f=lr;break;case 13:f=cr;break}h.endState=new ge(i.getStateData(),o.getTokenError(),u,l),h.tokens.push({startIndex:p,scopes:f})}return h}var x;function dr(){return new Promise((e,t)=>{if(!x)return t(\"JSON not registered!\");e(x)})}var Ee=class extends q{constructor(t,i,r){super(t,i,r.onDidChange),this._disposables.push(c.editor.onWillDisposeModel(n=>{this._resetSchema(n.uri)})),this._disposables.push(c.editor.onDidChangeModelLanguage(n=>{this._resetSchema(n.model.uri)}))}_resetSchema(t){this._worker().then(i=>{i.resetSchema(t.toString())})}};function gr(e){let t=[],i=[],r=new D(e);t.push(r),x=(...o)=>r.getLanguageServiceWorker(...o);function n(){let{languageId:o,modeConfiguration:u}=e;Tn(i),u.documentFormattingEdits&&i.push(c.languages.registerDocumentFormattingEditProvider(o,new G(x))),u.documentRangeFormattingEdits&&i.push(c.languages.registerDocumentRangeFormattingEditProvider(o,new Q(x))),u.completionItems&&i.push(c.languages.registerCompletionItemProvider(o,new X(x,[\" \",\":\",'\"']))),u.hovers&&i.push(c.languages.registerHoverProvider(o,new Y(x))),u.documentSymbols&&i.push(c.languages.registerDocumentSymbolProvider(o,new $(x))),u.tokens&&i.push(c.languages.setTokensProvider(o,yn(!0))),u.colors&&i.push(c.languages.registerColorProvider(o,new Z(x))),u.foldingRanges&&i.push(c.languages.registerFoldingRangeProvider(o,new ee(x))),u.diagnostics&&i.push(new Ee(o,x,e)),u.selectionRanges&&i.push(c.languages.registerSelectionRangeProvider(o,new ne(x)))}n(),t.push(c.languages.setLanguageConfiguration(e.languageId,pr));let a=e.modeConfiguration;return e.onDidChange(o=>{o.modeConfiguration!==a&&(a=o.modeConfiguration,n())}),t.push(kn(i)),kn(t)}function kn(e){return{dispose:()=>Tn(e)}}function Tn(e){for(;e.length;)e.pop().dispose()}var pr={wordPattern:/(-?\\d*\\.\\d\\w*)|([^\\[\\{\\]\\}\\:\\\"\\,\\s]+)/g,comments:{lineComment:\"//\",blockComment:[\"/*\",\"*/\"]},brackets:[[\"{\",\"}\"],[\"[\",\"]\"]],autoClosingPairs:[{open:\"{\",close:\"}\",notIn:[\"string\"]},{open:\"[\",close:\"]\",notIn:[\"string\"]},{open:'\"',close:'\"',notIn:[\"string\"]}]};return Ln(hr);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/json/jsonWorker.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/json/jsonWorker\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var ht=Object.defineProperty;var Hr=Object.getOwnPropertyDescriptor;var Gr=Object.getOwnPropertyNames;var Xr=Object.prototype.hasOwnProperty;var Zr=(t,r)=>{for(var i in r)ht(t,i,{get:r[i],enumerable:!0})},Qr=(t,r,i,e)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let n of Gr(r))!Xr.call(t,n)&&n!==i&&ht(t,n,{get:()=>r[n],enumerable:!(e=Hr(r,n))||e.enumerable});return t};var Yr=t=>Qr(ht({},\"__esModule\",{value:!0}),t);var _n={};Zr(_n,{JSONWorker:()=>ft,create:()=>Bn});function Ce(t,r){r===void 0&&(r=!1);var i=t.length,e=0,n=\"\",a=0,s=16,o=0,f=0,l=0,u=0,c=0;function h(v,O){for(var E=0,I=0;E<v||!O;){var A=t.charCodeAt(e);if(A>=48&&A<=57)I=I*16+A-48;else if(A>=65&&A<=70)I=I*16+A-65+10;else if(A>=97&&A<=102)I=I*16+A-97+10;else break;e++,E++}return E<v&&(I=-1),I}function d(v){e=v,n=\"\",a=0,s=16,c=0}function m(){var v=e;if(t.charCodeAt(e)===48)e++;else for(e++;e<t.length&&Oe(t.charCodeAt(e));)e++;if(e<t.length&&t.charCodeAt(e)===46)if(e++,e<t.length&&Oe(t.charCodeAt(e)))for(e++;e<t.length&&Oe(t.charCodeAt(e));)e++;else return c=3,t.substring(v,e);var O=e;if(e<t.length&&(t.charCodeAt(e)===69||t.charCodeAt(e)===101))if(e++,(e<t.length&&t.charCodeAt(e)===43||t.charCodeAt(e)===45)&&e++,e<t.length&&Oe(t.charCodeAt(e))){for(e++;e<t.length&&Oe(t.charCodeAt(e));)e++;O=e}else c=3;return t.substring(v,O)}function p(){for(var v=\"\",O=e;;){if(e>=i){v+=t.substring(O,e),c=2;break}var E=t.charCodeAt(e);if(E===34){v+=t.substring(O,e),e++;break}if(E===92){if(v+=t.substring(O,e),e++,e>=i){c=2;break}var I=t.charCodeAt(e++);switch(I){case 34:v+='\"';break;case 92:v+=\"\\\\\";break;case 47:v+=\"/\";break;case 98:v+=\"\\b\";break;case 102:v+=\"\\f\";break;case 110:v+=`\n`;break;case 114:v+=\"\\r\";break;case 116:v+=\"\t\";break;case 117:var A=h(4,!0);A>=0?v+=String.fromCharCode(A):c=4;break;default:c=5}O=e;continue}if(E>=0&&E<=31)if(Me(E)){v+=t.substring(O,e),c=2;break}else c=6;e++}return v}function g(){if(n=\"\",c=0,a=e,f=o,u=l,e>=i)return a=i,s=17;var v=t.charCodeAt(e);if(gt(v)){do e++,n+=String.fromCharCode(v),v=t.charCodeAt(e);while(gt(v));return s=15}if(Me(v))return e++,n+=String.fromCharCode(v),v===13&&t.charCodeAt(e)===10&&(e++,n+=`\n`),o++,l=e,s=14;switch(v){case 123:return e++,s=1;case 125:return e++,s=2;case 91:return e++,s=3;case 93:return e++,s=4;case 58:return e++,s=6;case 44:return e++,s=5;case 34:return e++,n=p(),s=10;case 47:var O=e-1;if(t.charCodeAt(e+1)===47){for(e+=2;e<i&&!Me(t.charCodeAt(e));)e++;return n=t.substring(O,e),s=12}if(t.charCodeAt(e+1)===42){e+=2;for(var E=i-1,I=!1;e<E;){var A=t.charCodeAt(e);if(A===42&&t.charCodeAt(e+1)===47){e+=2,I=!0;break}e++,Me(A)&&(A===13&&t.charCodeAt(e)===10&&e++,o++,l=e)}return I||(e++,c=1),n=t.substring(O,e),s=13}return n+=String.fromCharCode(v),e++,s=16;case 45:if(n+=String.fromCharCode(v),e++,e===i||!Oe(t.charCodeAt(e)))return s=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return n+=m(),s=11;default:for(;e<i&&b(v);)e++,v=t.charCodeAt(e);if(a!==e){switch(n=t.substring(a,e),n){case\"true\":return s=8;case\"false\":return s=9;case\"null\":return s=7}return s=16}return n+=String.fromCharCode(v),e++,s=16}}function b(v){if(gt(v)||Me(v))return!1;switch(v){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function y(){var v;do v=g();while(v>=12&&v<=15);return v}return{setPosition:d,getPosition:function(){return e},scan:r?y:g,getToken:function(){return s},getTokenValue:function(){return n},getTokenOffset:function(){return a},getTokenLength:function(){return e-a},getTokenStartLine:function(){return f},getTokenStartCharacter:function(){return a-u},getTokenError:function(){return c}}}function gt(t){return t===32||t===9||t===11||t===12||t===160||t===5760||t>=8192&&t<=8203||t===8239||t===8287||t===12288||t===65279}function Me(t){return t===10||t===13||t===8232||t===8233}function Oe(t){return t>=48&&t<=57}function mt(t,r,i){var e,n,a,s,o;if(r){for(s=r.offset,o=s+r.length,a=s;a>0&&!pt(t,a-1);)a--;for(var f=o;f<t.length&&!pt(t,f);)f++;n=t.substring(a,f),e=en(n,i)}else n=t,e=0,a=0,s=0,o=t.length;var l=tn(i,t),u=!1,c=0,h;i.insertSpaces?h=dt(\" \",i.tabSize||4):h=\"\t\";var d=Ce(n,!1),m=!1;function p(){return l+dt(h,e+c)}function g(){var N=d.scan();for(u=!1;N===15||N===14;)u=u||N===14,N=d.scan();return m=N===16||d.getTokenError()!==0,N}var b=[];function y(N,L,R){!m&&(!r||L<o&&R>s)&&t.substring(L,R)!==N&&b.push({offset:L,length:R-L,content:N})}var v=g();if(v!==17){var O=d.getTokenOffset()+a,E=dt(h,e);y(E,a,O)}for(;v!==17;){for(var I=d.getTokenOffset()+d.getTokenLength()+a,A=g(),P=\"\",w=!1;!u&&(A===12||A===13);){var C=d.getTokenOffset()+a;y(\" \",I,C),I=d.getTokenOffset()+d.getTokenLength()+a,w=A===12,P=w?p():\"\",A=g()}if(A===2)v!==1&&(c--,P=p());else if(A===4)v!==3&&(c--,P=p());else{switch(v){case 3:case 1:c++,P=p();break;case 5:case 12:P=p();break;case 13:u?P=p():w||(P=\" \");break;case 6:w||(P=\" \");break;case 10:if(A===6){w||(P=\"\");break}case 7:case 8:case 9:case 11:case 2:case 4:A===12||A===13?w||(P=\" \"):A!==5&&A!==17&&(m=!0);break;case 16:m=!0;break}u&&(A===12||A===13)&&(P=p())}A===17&&(P=i.insertFinalNewline?l:\"\");var F=d.getTokenOffset()+a;y(P,I,F),v=A}return b}function dt(t,r){for(var i=\"\",e=0;e<r;e++)i+=t;return i}function en(t,r){for(var i=0,e=0,n=r.tabSize||4;i<t.length;){var a=t.charAt(i);if(a===\" \")e++;else if(a===\"\t\")e+=n;else break;i++}return Math.floor(e/n)}function tn(t,r){for(var i=0;i<r.length;i++){var e=r.charAt(i);if(e===\"\\r\")return i+1<r.length&&r.charAt(i+1)===`\n`?`\\r\n`:\"\\r\";if(e===`\n`)return`\n`}return t&&t.eol||`\n`}function pt(t,r){return`\\r\n`.indexOf(t.charAt(r))!==-1}var ze;(function(t){t.DEFAULT={allowTrailingComma:!1}})(ze||(ze={}));function Zt(t,r,i){r===void 0&&(r=[]),i===void 0&&(i=ze.DEFAULT);var e=null,n=[],a=[];function s(f){Array.isArray(n)?n.push(f):e!==null&&(n[e]=f)}var o={onObjectBegin:function(){var f={};s(f),a.push(n),n=f,e=null},onObjectProperty:function(f){e=f},onObjectEnd:function(){n=a.pop()},onArrayBegin:function(){var f=[];s(f),a.push(n),n=f,e=null},onArrayEnd:function(){n=a.pop()},onLiteralValue:s,onError:function(f,l,u){r.push({error:f,offset:l,length:u})}};return Qt(t,o,i),n[0]}function vt(t){if(!t.parent||!t.parent.children)return[];var r=vt(t.parent);if(t.parent.type===\"property\"){var i=t.parent.children[0].value;r.push(i)}else if(t.parent.type===\"array\"){var e=t.parent.children.indexOf(t);e!==-1&&r.push(e)}return r}function Be(t){switch(t.type){case\"array\":return t.children.map(Be);case\"object\":for(var r=Object.create(null),i=0,e=t.children;i<e.length;i++){var n=e[i],a=n.children[1];a&&(r[n.children[0].value]=Be(a))}return r;case\"null\":case\"string\":case\"number\":case\"boolean\":return t.value;default:return}}function nn(t,r,i){return i===void 0&&(i=!1),r>=t.offset&&r<t.offset+t.length||i&&r===t.offset+t.length}function yt(t,r,i){if(i===void 0&&(i=!1),nn(t,r,i)){var e=t.children;if(Array.isArray(e))for(var n=0;n<e.length&&e[n].offset<=r;n++){var a=yt(e[n],r,i);if(a)return a}return t}}function Qt(t,r,i){i===void 0&&(i=ze.DEFAULT);var e=Ce(t,!1);function n(w){return w?function(){return w(e.getTokenOffset(),e.getTokenLength(),e.getTokenStartLine(),e.getTokenStartCharacter())}:function(){return!0}}function a(w){return w?function(C){return w(C,e.getTokenOffset(),e.getTokenLength(),e.getTokenStartLine(),e.getTokenStartCharacter())}:function(){return!0}}var s=n(r.onObjectBegin),o=a(r.onObjectProperty),f=n(r.onObjectEnd),l=n(r.onArrayBegin),u=n(r.onArrayEnd),c=a(r.onLiteralValue),h=a(r.onSeparator),d=n(r.onComment),m=a(r.onError),p=i&&i.disallowComments,g=i&&i.allowTrailingComma;function b(){for(;;){var w=e.scan();switch(e.getTokenError()){case 4:y(14);break;case 5:y(15);break;case 3:y(13);break;case 1:p||y(11);break;case 2:y(12);break;case 6:y(16);break}switch(w){case 12:case 13:p?y(10):d();break;case 16:y(1);break;case 15:case 14:break;default:return w}}}function y(w,C,F){if(C===void 0&&(C=[]),F===void 0&&(F=[]),m(w),C.length+F.length>0)for(var N=e.getToken();N!==17;){if(C.indexOf(N)!==-1){b();break}else if(F.indexOf(N)!==-1)break;N=b()}}function v(w){var C=e.getTokenValue();return w?c(C):o(C),b(),!0}function O(){switch(e.getToken()){case 11:var w=e.getTokenValue(),C=Number(w);isNaN(C)&&(y(2),C=0),c(C);break;case 7:c(null);break;case 8:c(!0);break;case 9:c(!1);break;default:return!1}return b(),!0}function E(){return e.getToken()!==10?(y(3,[],[2,5]),!1):(v(!1),e.getToken()===6?(h(\":\"),b(),P()||y(4,[],[2,5])):y(5,[],[2,5]),!0)}function I(){s(),b();for(var w=!1;e.getToken()!==2&&e.getToken()!==17;){if(e.getToken()===5){if(w||y(4,[],[]),h(\",\"),b(),e.getToken()===2&&g)break}else w&&y(6,[],[]);E()||y(4,[],[2,5]),w=!0}return f(),e.getToken()!==2?y(7,[2],[]):b(),!0}function A(){l(),b();for(var w=!1;e.getToken()!==4&&e.getToken()!==17;){if(e.getToken()===5){if(w||y(4,[],[]),h(\",\"),b(),e.getToken()===4&&g)break}else w&&y(6,[],[]);P()||y(4,[],[4,5]),w=!0}return u(),e.getToken()!==4?y(8,[4],[]):b(),!0}function P(){switch(e.getToken()){case 3:return A();case 1:return I();case 10:return v(!0);default:return O()}}return b(),e.getToken()===17?i.allowEmptyContent?!0:(y(4,[],[]),!1):P()?(e.getToken()!==17&&y(9,[],[]),!0):(y(4,[],[]),!1)}var le=Ce;var Yt=Zt;var Kt=yt,er=vt,tr=Be;function rr(t,r,i){return mt(t,r,i)}function Pe(t,r){if(t===r)return!0;if(t==null||r===null||r===void 0||typeof t!=typeof r||typeof t!=\"object\"||Array.isArray(t)!==Array.isArray(r))return!1;var i,e;if(Array.isArray(t)){if(t.length!==r.length)return!1;for(i=0;i<t.length;i++)if(!Pe(t[i],r[i]))return!1}else{var n=[];for(e in t)n.push(e);n.sort();var a=[];for(e in r)a.push(e);if(a.sort(),!Pe(n,a))return!1;for(i=0;i<n.length;i++)if(!Pe(t[n[i]],r[n[i]]))return!1}return!0}function ee(t){return typeof t==\"number\"}function se(t){return typeof t<\"u\"}function ie(t){return typeof t==\"boolean\"}function nr(t){return typeof t==\"string\"}function un(t,r){if(t.length<r.length)return!1;for(var i=0;i<r.length;i++)if(t[i]!==r[i])return!1;return!0}function pe(t,r){var i=t.length-r.length;return i>0?t.lastIndexOf(r)===i:i===0?t===r:!1}function xe(t){var r=\"\";un(t,\"(?i)\")&&(t=t.substring(4),r=\"i\");try{return new RegExp(t,r+\"u\")}catch{try{return new RegExp(t,r)}catch{return}}}var ar;(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647})(ar||(ar={}));var He;(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647})(He||(He={}));var re;(function(t){function r(e,n){return e===Number.MAX_VALUE&&(e=He.MAX_VALUE),n===Number.MAX_VALUE&&(n=He.MAX_VALUE),{line:e,character:n}}t.create=r;function i(e){var n=e;return x.objectLiteral(n)&&x.uinteger(n.line)&&x.uinteger(n.character)}t.is=i})(re||(re={}));var U;(function(t){function r(e,n,a,s){if(x.uinteger(e)&&x.uinteger(n)&&x.uinteger(a)&&x.uinteger(s))return{start:re.create(e,n),end:re.create(a,s)};if(re.is(e)&&re.is(n))return{start:e,end:n};throw new Error(\"Range#create called with invalid arguments[\"+e+\", \"+n+\", \"+a+\", \"+s+\"]\")}t.create=r;function i(e){var n=e;return x.objectLiteral(n)&&re.is(n.start)&&re.is(n.end)}t.is=i})(U||(U={}));var Se;(function(t){function r(e,n){return{uri:e,range:n}}t.create=r;function i(e){var n=e;return x.defined(n)&&U.is(n.range)&&(x.string(n.uri)||x.undefined(n.uri))}t.is=i})(Se||(Se={}));var or;(function(t){function r(e,n,a,s){return{targetUri:e,targetRange:n,targetSelectionRange:a,originSelectionRange:s}}t.create=r;function i(e){var n=e;return x.defined(n)&&U.is(n.targetRange)&&x.string(n.targetUri)&&(U.is(n.targetSelectionRange)||x.undefined(n.targetSelectionRange))&&(U.is(n.originSelectionRange)||x.undefined(n.originSelectionRange))}t.is=i})(or||(or={}));var Ge;(function(t){function r(e,n,a,s){return{red:e,green:n,blue:a,alpha:s}}t.create=r;function i(e){var n=e;return x.numberRange(n.red,0,1)&&x.numberRange(n.green,0,1)&&x.numberRange(n.blue,0,1)&&x.numberRange(n.alpha,0,1)}t.is=i})(Ge||(Ge={}));var xt;(function(t){function r(e,n){return{range:e,color:n}}t.create=r;function i(e){var n=e;return U.is(n.range)&&Ge.is(n.color)}t.is=i})(xt||(xt={}));var St;(function(t){function r(e,n,a){return{label:e,textEdit:n,additionalTextEdits:a}}t.create=r;function i(e){var n=e;return x.string(n.label)&&(x.undefined(n.textEdit)||Y.is(n))&&(x.undefined(n.additionalTextEdits)||x.typedArray(n.additionalTextEdits,Y.is))}t.is=i})(St||(St={}));var Ae;(function(t){t.Comment=\"comment\",t.Imports=\"imports\",t.Region=\"region\"})(Ae||(Ae={}));var At;(function(t){function r(e,n,a,s,o){var f={startLine:e,endLine:n};return x.defined(a)&&(f.startCharacter=a),x.defined(s)&&(f.endCharacter=s),x.defined(o)&&(f.kind=o),f}t.create=r;function i(e){var n=e;return x.uinteger(n.startLine)&&x.uinteger(n.startLine)&&(x.undefined(n.startCharacter)||x.uinteger(n.startCharacter))&&(x.undefined(n.endCharacter)||x.uinteger(n.endCharacter))&&(x.undefined(n.kind)||x.string(n.kind))}t.is=i})(At||(At={}));var wt;(function(t){function r(e,n){return{location:e,message:n}}t.create=r;function i(e){var n=e;return x.defined(n)&&Se.is(n.location)&&x.string(n.message)}t.is=i})(wt||(wt={}));var Z;(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(Z||(Z={}));var sr;(function(t){t.Unnecessary=1,t.Deprecated=2})(sr||(sr={}));var fr;(function(t){function r(i){var e=i;return e!=null&&x.string(e.href)}t.is=r})(fr||(fr={}));var ae;(function(t){function r(e,n,a,s,o,f){var l={range:e,message:n};return x.defined(a)&&(l.severity=a),x.defined(s)&&(l.code=s),x.defined(o)&&(l.source=o),x.defined(f)&&(l.relatedInformation=f),l}t.create=r;function i(e){var n,a=e;return x.defined(a)&&U.is(a.range)&&x.string(a.message)&&(x.number(a.severity)||x.undefined(a.severity))&&(x.integer(a.code)||x.string(a.code)||x.undefined(a.code))&&(x.undefined(a.codeDescription)||x.string((n=a.codeDescription)===null||n===void 0?void 0:n.href))&&(x.string(a.source)||x.undefined(a.source))&&(x.undefined(a.relatedInformation)||x.typedArray(a.relatedInformation,wt.is))}t.is=i})(ae||(ae={}));var Ee;(function(t){function r(e,n){for(var a=[],s=2;s<arguments.length;s++)a[s-2]=arguments[s];var o={title:e,command:n};return x.defined(a)&&a.length>0&&(o.arguments=a),o}t.create=r;function i(e){var n=e;return x.defined(n)&&x.string(n.title)&&x.string(n.command)}t.is=i})(Ee||(Ee={}));var Y;(function(t){function r(a,s){return{range:a,newText:s}}t.replace=r;function i(a,s){return{range:{start:a,end:a},newText:s}}t.insert=i;function e(a){return{range:a,newText:\"\"}}t.del=e;function n(a){var s=a;return x.objectLiteral(s)&&x.string(s.newText)&&U.is(s.range)}t.is=n})(Y||(Y={}));var je;(function(t){function r(e,n,a){var s={label:e};return n!==void 0&&(s.needsConfirmation=n),a!==void 0&&(s.description=a),s}t.create=r;function i(e){var n=e;return n!==void 0&&x.objectLiteral(n)&&x.string(n.label)&&(x.boolean(n.needsConfirmation)||n.needsConfirmation===void 0)&&(x.string(n.description)||n.description===void 0)}t.is=i})(je||(je={}));var X;(function(t){function r(i){var e=i;return typeof e==\"string\"}t.is=r})(X||(X={}));var me;(function(t){function r(a,s,o){return{range:a,newText:s,annotationId:o}}t.replace=r;function i(a,s,o){return{range:{start:a,end:a},newText:s,annotationId:o}}t.insert=i;function e(a,s){return{range:a,newText:\"\",annotationId:s}}t.del=e;function n(a){var s=a;return Y.is(s)&&(je.is(s.annotationId)||X.is(s.annotationId))}t.is=n})(me||(me={}));var Fe;(function(t){function r(e,n){return{textDocument:e,edits:n}}t.create=r;function i(e){var n=e;return x.defined(n)&&Ze.is(n.textDocument)&&Array.isArray(n.edits)}t.is=i})(Fe||(Fe={}));var Le;(function(t){function r(e,n,a){var s={kind:\"create\",uri:e};return n!==void 0&&(n.overwrite!==void 0||n.ignoreIfExists!==void 0)&&(s.options=n),a!==void 0&&(s.annotationId=a),s}t.create=r;function i(e){var n=e;return n&&n.kind===\"create\"&&x.string(n.uri)&&(n.options===void 0||(n.options.overwrite===void 0||x.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||x.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||X.is(n.annotationId))}t.is=i})(Le||(Le={}));var Ve;(function(t){function r(e,n,a,s){var o={kind:\"rename\",oldUri:e,newUri:n};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(o.options=a),s!==void 0&&(o.annotationId=s),o}t.create=r;function i(e){var n=e;return n&&n.kind===\"rename\"&&x.string(n.oldUri)&&x.string(n.newUri)&&(n.options===void 0||(n.options.overwrite===void 0||x.boolean(n.options.overwrite))&&(n.options.ignoreIfExists===void 0||x.boolean(n.options.ignoreIfExists)))&&(n.annotationId===void 0||X.is(n.annotationId))}t.is=i})(Ve||(Ve={}));var De;(function(t){function r(e,n,a){var s={kind:\"delete\",uri:e};return n!==void 0&&(n.recursive!==void 0||n.ignoreIfNotExists!==void 0)&&(s.options=n),a!==void 0&&(s.annotationId=a),s}t.create=r;function i(e){var n=e;return n&&n.kind===\"delete\"&&x.string(n.uri)&&(n.options===void 0||(n.options.recursive===void 0||x.boolean(n.options.recursive))&&(n.options.ignoreIfNotExists===void 0||x.boolean(n.options.ignoreIfNotExists)))&&(n.annotationId===void 0||X.is(n.annotationId))}t.is=i})(De||(De={}));var Xe;(function(t){function r(i){var e=i;return e&&(e.changes!==void 0||e.documentChanges!==void 0)&&(e.documentChanges===void 0||e.documentChanges.every(function(n){return x.string(n.kind)?Le.is(n)||Ve.is(n)||De.is(n):Fe.is(n)}))}t.is=r})(Xe||(Xe={}));var _e=function(){function t(r,i){this.edits=r,this.changeAnnotations=i}return t.prototype.insert=function(r,i,e){var n,a;if(e===void 0?n=Y.insert(r,i):X.is(e)?(a=e,n=me.insert(r,i,e)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(e),n=me.insert(r,i,a)),this.edits.push(n),a!==void 0)return a},t.prototype.replace=function(r,i,e){var n,a;if(e===void 0?n=Y.replace(r,i):X.is(e)?(a=e,n=me.replace(r,i,e)):(this.assertChangeAnnotations(this.changeAnnotations),a=this.changeAnnotations.manage(e),n=me.replace(r,i,a)),this.edits.push(n),a!==void 0)return a},t.prototype.delete=function(r,i){var e,n;if(i===void 0?e=Y.del(r):X.is(i)?(n=i,e=me.del(r,i)):(this.assertChangeAnnotations(this.changeAnnotations),n=this.changeAnnotations.manage(i),e=me.del(r,n)),this.edits.push(e),n!==void 0)return n},t.prototype.add=function(r){this.edits.push(r)},t.prototype.all=function(){return this.edits},t.prototype.clear=function(){this.edits.splice(0,this.edits.length)},t.prototype.assertChangeAnnotations=function(r){if(r===void 0)throw new Error(\"Text edit change is not configured to manage change annotations.\")},t}(),ur=function(){function t(r){this._annotations=r===void 0?Object.create(null):r,this._counter=0,this._size=0}return t.prototype.all=function(){return this._annotations},Object.defineProperty(t.prototype,\"size\",{get:function(){return this._size},enumerable:!1,configurable:!0}),t.prototype.manage=function(r,i){var e;if(X.is(r)?e=r:(e=this.nextId(),i=r),this._annotations[e]!==void 0)throw new Error(\"Id \"+e+\" is already in use.\");if(i===void 0)throw new Error(\"No annotation provided for id \"+e);return this._annotations[e]=i,this._size++,e},t.prototype.nextId=function(){return this._counter++,this._counter.toString()},t}(),ni=function(){function t(r){var i=this;this._textEditChanges=Object.create(null),r!==void 0?(this._workspaceEdit=r,r.documentChanges?(this._changeAnnotations=new ur(r.changeAnnotations),r.changeAnnotations=this._changeAnnotations.all(),r.documentChanges.forEach(function(e){if(Fe.is(e)){var n=new _e(e.edits,i._changeAnnotations);i._textEditChanges[e.textDocument.uri]=n}})):r.changes&&Object.keys(r.changes).forEach(function(e){var n=new _e(r.changes[e]);i._textEditChanges[e]=n})):this._workspaceEdit={}}return Object.defineProperty(t.prototype,\"edit\",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),t.prototype.getTextEditChange=function(r){if(Ze.is(r)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var i={uri:r.uri,version:r.version},e=this._textEditChanges[i.uri];if(!e){var n=[],a={textDocument:i,edits:n};this._workspaceEdit.documentChanges.push(a),e=new _e(n,this._changeAnnotations),this._textEditChanges[i.uri]=e}return e}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error(\"Workspace edit is not configured for normal text edit changes.\");var e=this._textEditChanges[r];if(!e){var n=[];this._workspaceEdit.changes[r]=n,e=new _e(n),this._textEditChanges[r]=e}return e}},t.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new ur,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},t.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},t.prototype.createFile=function(r,i,e){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var n;je.is(i)||X.is(i)?n=i:e=i;var a,s;if(n===void 0?a=Le.create(r,e):(s=X.is(n)?n:this._changeAnnotations.manage(n),a=Le.create(r,e,s)),this._workspaceEdit.documentChanges.push(a),s!==void 0)return s},t.prototype.renameFile=function(r,i,e,n){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var a;je.is(e)||X.is(e)?a=e:n=e;var s,o;if(a===void 0?s=Ve.create(r,i,n):(o=X.is(a)?a:this._changeAnnotations.manage(a),s=Ve.create(r,i,n,o)),this._workspaceEdit.documentChanges.push(s),o!==void 0)return o},t.prototype.deleteFile=function(r,i,e){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error(\"Workspace edit is not configured for document changes.\");var n;je.is(i)||X.is(i)?n=i:e=i;var a,s;if(n===void 0?a=De.create(r,e):(s=X.is(n)?n:this._changeAnnotations.manage(n),a=De.create(r,e,s)),this._workspaceEdit.documentChanges.push(a),s!==void 0)return s},t}();var cr;(function(t){function r(e){return{uri:e}}t.create=r;function i(e){var n=e;return x.defined(n)&&x.string(n.uri)}t.is=i})(cr||(cr={}));var Tt;(function(t){function r(e,n){return{uri:e,version:n}}t.create=r;function i(e){var n=e;return x.defined(n)&&x.string(n.uri)&&x.integer(n.version)}t.is=i})(Tt||(Tt={}));var Ze;(function(t){function r(e,n){return{uri:e,version:n}}t.create=r;function i(e){var n=e;return x.defined(n)&&x.string(n.uri)&&(n.version===null||x.integer(n.version))}t.is=i})(Ze||(Ze={}));var lr;(function(t){function r(e,n,a,s){return{uri:e,languageId:n,version:a,text:s}}t.create=r;function i(e){var n=e;return x.defined(n)&&x.string(n.uri)&&x.string(n.languageId)&&x.integer(n.version)&&x.string(n.text)}t.is=i})(lr||(lr={}));var fe;(function(t){t.PlainText=\"plaintext\",t.Markdown=\"markdown\"})(fe||(fe={}));(function(t){function r(i){var e=i;return e===t.PlainText||e===t.Markdown}t.is=r})(fe||(fe={}));var Qe;(function(t){function r(i){var e=i;return x.objectLiteral(i)&&fe.is(e.kind)&&x.string(e.value)}t.is=r})(Qe||(Qe={}));var Q;(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(Q||(Q={}));var z;(function(t){t.PlainText=1,t.Snippet=2})(z||(z={}));var kt;(function(t){t.Deprecated=1})(kt||(kt={}));var hr;(function(t){function r(e,n,a){return{newText:e,insert:n,replace:a}}t.create=r;function i(e){var n=e;return n&&x.string(n.newText)&&U.is(n.insert)&&U.is(n.replace)}t.is=i})(hr||(hr={}));var gr;(function(t){t.asIs=1,t.adjustIndentation=2})(gr||(gr={}));var $e;(function(t){function r(i){return{label:i}}t.create=r})($e||($e={}));var Ot;(function(t){function r(i,e){return{items:i||[],isIncomplete:!!e}}t.create=r})(Ot||(Ot={}));var Re;(function(t){function r(e){return e.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}t.fromPlainText=r;function i(e){var n=e;return x.string(n)||x.objectLiteral(n)&&x.string(n.language)&&x.string(n.value)}t.is=i})(Re||(Re={}));var Ct;(function(t){function r(i){var e=i;return!!e&&x.objectLiteral(e)&&(Qe.is(e.contents)||Re.is(e.contents)||x.typedArray(e.contents,Re.is))&&(i.range===void 0||U.is(i.range))}t.is=r})(Ct||(Ct={}));var dr;(function(t){function r(i,e){return e?{label:i,documentation:e}:{label:i}}t.create=r})(dr||(dr={}));var pr;(function(t){function r(i,e){for(var n=[],a=2;a<arguments.length;a++)n[a-2]=arguments[a];var s={label:i};return x.defined(e)&&(s.documentation=e),x.defined(n)?s.parameters=n:s.parameters=[],s}t.create=r})(pr||(pr={}));var Pt;(function(t){t.Text=1,t.Read=2,t.Write=3})(Pt||(Pt={}));var jt;(function(t){function r(i,e){var n={range:i};return x.number(e)&&(n.kind=e),n}t.create=r})(jt||(jt={}));var oe;(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(oe||(oe={}));var mr;(function(t){t.Deprecated=1})(mr||(mr={}));var Et;(function(t){function r(i,e,n,a,s){var o={name:i,kind:e,location:{uri:a,range:n}};return s&&(o.containerName=s),o}t.create=r})(Et||(Et={}));var It;(function(t){function r(e,n,a,s,o,f){var l={name:e,detail:n,kind:a,range:s,selectionRange:o};return f!==void 0&&(l.children=f),l}t.create=r;function i(e){var n=e;return n&&x.string(n.name)&&x.number(n.kind)&&U.is(n.range)&&U.is(n.selectionRange)&&(n.detail===void 0||x.string(n.detail))&&(n.deprecated===void 0||x.boolean(n.deprecated))&&(n.children===void 0||Array.isArray(n.children))&&(n.tags===void 0||Array.isArray(n.tags))}t.is=i})(It||(It={}));var Nt;(function(t){t.Empty=\"\",t.QuickFix=\"quickfix\",t.Refactor=\"refactor\",t.RefactorExtract=\"refactor.extract\",t.RefactorInline=\"refactor.inline\",t.RefactorRewrite=\"refactor.rewrite\",t.Source=\"source\",t.SourceOrganizeImports=\"source.organizeImports\",t.SourceFixAll=\"source.fixAll\"})(Nt||(Nt={}));var Mt;(function(t){function r(e,n){var a={diagnostics:e};return n!=null&&(a.only=n),a}t.create=r;function i(e){var n=e;return x.defined(n)&&x.typedArray(n.diagnostics,ae.is)&&(n.only===void 0||x.typedArray(n.only,x.string))}t.is=i})(Mt||(Mt={}));var Ft;(function(t){function r(e,n,a){var s={title:e},o=!0;return typeof n==\"string\"?(o=!1,s.kind=n):Ee.is(n)?s.command=n:s.edit=n,o&&a!==void 0&&(s.kind=a),s}t.create=r;function i(e){var n=e;return n&&x.string(n.title)&&(n.diagnostics===void 0||x.typedArray(n.diagnostics,ae.is))&&(n.kind===void 0||x.string(n.kind))&&(n.edit!==void 0||n.command!==void 0)&&(n.command===void 0||Ee.is(n.command))&&(n.isPreferred===void 0||x.boolean(n.isPreferred))&&(n.edit===void 0||Xe.is(n.edit))}t.is=i})(Ft||(Ft={}));var vr;(function(t){function r(e,n){var a={range:e};return x.defined(n)&&(a.data=n),a}t.create=r;function i(e){var n=e;return x.defined(n)&&U.is(n.range)&&(x.undefined(n.command)||Ee.is(n.command))}t.is=i})(vr||(vr={}));var yr;(function(t){function r(e,n){return{tabSize:e,insertSpaces:n}}t.create=r;function i(e){var n=e;return x.defined(n)&&x.uinteger(n.tabSize)&&x.boolean(n.insertSpaces)}t.is=i})(yr||(yr={}));var Lt;(function(t){function r(e,n,a){return{range:e,target:n,data:a}}t.create=r;function i(e){var n=e;return x.defined(n)&&U.is(n.range)&&(x.undefined(n.target)||x.string(n.target))}t.is=i})(Lt||(Lt={}));var Ie;(function(t){function r(e,n){return{range:e,parent:n}}t.create=r;function i(e){var n=e;return n!==void 0&&U.is(n.range)&&(n.parent===void 0||t.is(n.parent))}t.is=i})(Ie||(Ie={}));var br;(function(t){function r(a,s,o,f){return new cn(a,s,o,f)}t.create=r;function i(a){var s=a;return!!(x.defined(s)&&x.string(s.uri)&&(x.undefined(s.languageId)||x.string(s.languageId))&&x.uinteger(s.lineCount)&&x.func(s.getText)&&x.func(s.positionAt)&&x.func(s.offsetAt))}t.is=i;function e(a,s){for(var o=a.getText(),f=n(s,function(m,p){var g=m.range.start.line-p.range.start.line;return g===0?m.range.start.character-p.range.start.character:g}),l=o.length,u=f.length-1;u>=0;u--){var c=f[u],h=a.offsetAt(c.range.start),d=a.offsetAt(c.range.end);if(d<=l)o=o.substring(0,h)+c.newText+o.substring(d,o.length);else throw new Error(\"Overlapping edit\");l=h}return o}t.applyEdits=e;function n(a,s){if(a.length<=1)return a;var o=a.length/2|0,f=a.slice(0,o),l=a.slice(o);n(f,s),n(l,s);for(var u=0,c=0,h=0;u<f.length&&c<l.length;){var d=s(f[u],l[c]);d<=0?a[h++]=f[u++]:a[h++]=l[c++]}for(;u<f.length;)a[h++]=f[u++];for(;c<l.length;)a[h++]=l[c++];return a}})(br||(br={}));var cn=function(){function t(r,i,e,n){this._uri=r,this._languageId=i,this._version=e,this._content=n,this._lineOffsets=void 0}return Object.defineProperty(t.prototype,\"uri\",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"languageId\",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"version\",{get:function(){return this._version},enumerable:!1,configurable:!0}),t.prototype.getText=function(r){if(r){var i=this.offsetAt(r.start),e=this.offsetAt(r.end);return this._content.substring(i,e)}return this._content},t.prototype.update=function(r,i){this._content=r.text,this._version=i,this._lineOffsets=void 0},t.prototype.getLineOffsets=function(){if(this._lineOffsets===void 0){for(var r=[],i=this._content,e=!0,n=0;n<i.length;n++){e&&(r.push(n),e=!1);var a=i.charAt(n);e=a===\"\\r\"||a===`\n`,a===\"\\r\"&&n+1<i.length&&i.charAt(n+1)===`\n`&&n++}e&&i.length>0&&r.push(i.length),this._lineOffsets=r}return this._lineOffsets},t.prototype.positionAt=function(r){r=Math.max(Math.min(r,this._content.length),0);var i=this.getLineOffsets(),e=0,n=i.length;if(n===0)return re.create(0,r);for(;e<n;){var a=Math.floor((e+n)/2);i[a]>r?n=a:e=a+1}var s=e-1;return re.create(s,r-i[s])},t.prototype.offsetAt=function(r){var i=this.getLineOffsets();if(r.line>=i.length)return this._content.length;if(r.line<0)return 0;var e=i[r.line],n=r.line+1<i.length?i[r.line+1]:this._content.length;return Math.max(Math.min(e+r.character,n),e)},Object.defineProperty(t.prototype,\"lineCount\",{get:function(){return this.getLineOffsets().length},enumerable:!1,configurable:!0}),t}(),x;(function(t){var r=Object.prototype.toString;function i(d){return typeof d<\"u\"}t.defined=i;function e(d){return typeof d>\"u\"}t.undefined=e;function n(d){return d===!0||d===!1}t.boolean=n;function a(d){return r.call(d)===\"[object String]\"}t.string=a;function s(d){return r.call(d)===\"[object Number]\"}t.number=s;function o(d,m,p){return r.call(d)===\"[object Number]\"&&m<=d&&d<=p}t.numberRange=o;function f(d){return r.call(d)===\"[object Number]\"&&-2147483648<=d&&d<=2147483647}t.integer=f;function l(d){return r.call(d)===\"[object Number]\"&&0<=d&&d<=2147483647}t.uinteger=l;function u(d){return r.call(d)===\"[object Function]\"}t.func=u;function c(d){return d!==null&&typeof d==\"object\"}t.objectLiteral=c;function h(d,m){return Array.isArray(d)&&d.every(m)}t.typedArray=h})(x||(x={}));var Ye=class t{constructor(r,i,e,n){this._uri=r,this._languageId=i,this._version=e,this._content=n,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(r){if(r){let i=this.offsetAt(r.start),e=this.offsetAt(r.end);return this._content.substring(i,e)}return this._content}update(r,i){for(let e of r)if(t.isIncremental(e)){let n=Sr(e.range),a=this.offsetAt(n.start),s=this.offsetAt(n.end);this._content=this._content.substring(0,a)+e.text+this._content.substring(s,this._content.length);let o=Math.max(n.start.line,0),f=Math.max(n.end.line,0),l=this._lineOffsets,u=xr(e.text,!1,a);if(f-o===u.length)for(let h=0,d=u.length;h<d;h++)l[h+o+1]=u[h];else u.length<1e4?l.splice(o+1,f-o,...u):this._lineOffsets=l=l.slice(0,o+1).concat(u,l.slice(f+1));let c=e.text.length-(s-a);if(c!==0)for(let h=o+1+u.length,d=l.length;h<d;h++)l[h]=l[h]+c}else if(t.isFull(e))this._content=e.text,this._lineOffsets=void 0;else throw new Error(\"Unknown change event received\");this._version=i}getLineOffsets(){return this._lineOffsets===void 0&&(this._lineOffsets=xr(this._content,!0)),this._lineOffsets}positionAt(r){r=Math.max(Math.min(r,this._content.length),0);let i=this.getLineOffsets(),e=0,n=i.length;if(n===0)return{line:0,character:r};for(;e<n;){let s=Math.floor((e+n)/2);i[s]>r?n=s:e=s+1}let a=e-1;return{line:a,character:r-i[a]}}offsetAt(r){let i=this.getLineOffsets();if(r.line>=i.length)return this._content.length;if(r.line<0)return 0;let e=i[r.line],n=r.line+1<i.length?i[r.line+1]:this._content.length;return Math.max(Math.min(e+r.character,n),e)}get lineCount(){return this.getLineOffsets().length}static isIncremental(r){let i=r;return i!=null&&typeof i.text==\"string\"&&i.range!==void 0&&(i.rangeLength===void 0||typeof i.rangeLength==\"number\")}static isFull(r){let i=r;return i!=null&&typeof i.text==\"string\"&&i.range===void 0&&i.rangeLength===void 0}},Ue;(function(t){function r(n,a,s,o){return new Ye(n,a,s,o)}t.create=r;function i(n,a,s){if(n instanceof Ye)return n.update(a,s),n;throw new Error(\"TextDocument.update: document must be created by TextDocument.create\")}t.update=i;function e(n,a){let s=n.getText(),o=Vt(a.map(ln),(u,c)=>{let h=u.range.start.line-c.range.start.line;return h===0?u.range.start.character-c.range.start.character:h}),f=0,l=[];for(let u of o){let c=n.offsetAt(u.range.start);if(c<f)throw new Error(\"Overlapping edit\");c>f&&l.push(s.substring(f,c)),u.newText.length&&l.push(u.newText),f=n.offsetAt(u.range.end)}return l.push(s.substr(f)),l.join(\"\")}t.applyEdits=e})(Ue||(Ue={}));function Vt(t,r){if(t.length<=1)return t;let i=t.length/2|0,e=t.slice(0,i),n=t.slice(i);Vt(e,r),Vt(n,r);let a=0,s=0,o=0;for(;a<e.length&&s<n.length;)r(e[a],n[s])<=0?t[o++]=e[a++]:t[o++]=n[s++];for(;a<e.length;)t[o++]=e[a++];for(;s<n.length;)t[o++]=n[s++];return t}function xr(t,r,i=0){let e=r?[i]:[];for(let n=0;n<t.length;n++){let a=t.charCodeAt(n);(a===13||a===10)&&(a===13&&n+1<t.length&&t.charCodeAt(n+1)===10&&n++,e.push(i+n+1))}return e}function Sr(t){let r=t.start,i=t.end;return r.line>i.line||r.line===i.line&&r.character>i.character?{start:i,end:r}:t}function ln(t){let r=Sr(t.range);return r!==t.range?{newText:t.newText,range:r}:t}var W;(function(t){t[t.Undefined=0]=\"Undefined\",t[t.EnumValueMismatch=1]=\"EnumValueMismatch\",t[t.Deprecated=2]=\"Deprecated\",t[t.UnexpectedEndOfComment=257]=\"UnexpectedEndOfComment\",t[t.UnexpectedEndOfString=258]=\"UnexpectedEndOfString\",t[t.UnexpectedEndOfNumber=259]=\"UnexpectedEndOfNumber\",t[t.InvalidUnicode=260]=\"InvalidUnicode\",t[t.InvalidEscapeCharacter=261]=\"InvalidEscapeCharacter\",t[t.InvalidCharacter=262]=\"InvalidCharacter\",t[t.PropertyExpected=513]=\"PropertyExpected\",t[t.CommaExpected=514]=\"CommaExpected\",t[t.ColonExpected=515]=\"ColonExpected\",t[t.ValueExpected=516]=\"ValueExpected\",t[t.CommaOrCloseBacketExpected=517]=\"CommaOrCloseBacketExpected\",t[t.CommaOrCloseBraceExpected=518]=\"CommaOrCloseBraceExpected\",t[t.TrailingComma=519]=\"TrailingComma\",t[t.DuplicateKey=520]=\"DuplicateKey\",t[t.CommentNotPermitted=521]=\"CommentNotPermitted\",t[t.SchemaResolveError=768]=\"SchemaResolveError\"})(W||(W={}));var Ke;(function(t){t.LATEST={textDocument:{completion:{completionItem:{documentationFormat:[fe.Markdown,fe.PlainText],commitCharactersSupport:!0}}}}})(Ke||(Ke={}));function hn(t,r){let i;return r.length===0?i=t:i=t.replace(/\\{(\\d+)\\}/g,(e,n)=>{let a=n[0];return typeof r[a]<\"u\"?r[a]:e}),i}function gn(t,r,...i){return hn(r,i)}function he(t){return gn}var we=function(){var t=function(r,i){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])},t(r,i)};return function(r,i){if(typeof i!=\"function\"&&i!==null)throw new TypeError(\"Class extends value \"+String(i)+\" is not a constructor or null\");t(r,i);function e(){this.constructor=r}r.prototype=i===null?Object.create(i):(e.prototype=i.prototype,new e)}}(),M=he(),dn={\"color-hex\":{errorMessage:M(\"colorHexFormatWarning\",\"Invalid color format. Use #RGB, #RGBA, #RRGGBB or #RRGGBBAA.\"),pattern:/^#([0-9A-Fa-f]{3,4}|([0-9A-Fa-f]{2}){3,4})$/},\"date-time\":{errorMessage:M(\"dateTimeFormatWarning\",\"String is not a RFC3339 date-time.\"),pattern:/^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))$/i},date:{errorMessage:M(\"dateFormatWarning\",\"String is not a RFC3339 date.\"),pattern:/^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/i},time:{errorMessage:M(\"timeFormatWarning\",\"String is not a RFC3339 time.\"),pattern:/^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))$/i},email:{errorMessage:M(\"emailFormatWarning\",\"String is not an e-mail address.\"),pattern:/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}))$/},hostname:{errorMessage:M(\"hostnameFormatWarning\",\"String is not a hostname.\"),pattern:/^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i},ipv4:{errorMessage:M(\"ipv4FormatWarning\",\"String is not an IPv4 address.\"),pattern:/^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/},ipv6:{errorMessage:M(\"ipv6FormatWarning\",\"String is not an IPv6 address.\"),pattern:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i}},Te=function(){function t(r,i,e){e===void 0&&(e=0),this.offset=i,this.length=e,this.parent=r}return Object.defineProperty(t.prototype,\"children\",{get:function(){return[]},enumerable:!1,configurable:!0}),t.prototype.toString=function(){return\"type: \"+this.type+\" (\"+this.offset+\"/\"+this.length+\")\"+(this.parent?\" parent: {\"+this.parent.toString()+\"}\":\"\")},t}();var pn=function(t){we(r,t);function r(i,e){var n=t.call(this,i,e)||this;return n.type=\"null\",n.value=null,n}return r}(Te);var Ar=function(t){we(r,t);function r(i,e,n){var a=t.call(this,i,n)||this;return a.type=\"boolean\",a.value=e,a}return r}(Te);var mn=function(t){we(r,t);function r(i,e){var n=t.call(this,i,e)||this;return n.type=\"array\",n.items=[],n}return Object.defineProperty(r.prototype,\"children\",{get:function(){return this.items},enumerable:!1,configurable:!0}),r}(Te);var vn=function(t){we(r,t);function r(i,e){var n=t.call(this,i,e)||this;return n.type=\"number\",n.isInteger=!0,n.value=Number.NaN,n}return r}(Te);var Dt=function(t){we(r,t);function r(i,e,n){var a=t.call(this,i,e,n)||this;return a.type=\"string\",a.value=\"\",a}return r}(Te);var yn=function(t){we(r,t);function r(i,e,n){var a=t.call(this,i,e)||this;return a.type=\"property\",a.colonOffset=-1,a.keyNode=n,a}return Object.defineProperty(r.prototype,\"children\",{get:function(){return this.valueNode?[this.keyNode,this.valueNode]:[this.keyNode]},enumerable:!1,configurable:!0}),r}(Te);var bn=function(t){we(r,t);function r(i,e){var n=t.call(this,i,e)||this;return n.type=\"object\",n.properties=[],n}return Object.defineProperty(r.prototype,\"children\",{get:function(){return this.properties},enumerable:!1,configurable:!0}),r}(Te);function K(t){return ie(t)?t?{}:{not:{}}:t}var wr;(function(t){t[t.Key=0]=\"Key\",t[t.Enum=1]=\"Enum\"})(wr||(wr={}));var xn=function(){function t(r,i){r===void 0&&(r=-1),this.focusOffset=r,this.exclude=i,this.schemas=[]}return t.prototype.add=function(r){this.schemas.push(r)},t.prototype.merge=function(r){Array.prototype.push.apply(this.schemas,r.schemas)},t.prototype.include=function(r){return(this.focusOffset===-1||Rt(r,this.focusOffset))&&r!==this.exclude},t.prototype.newSub=function(){return new t(-1,this.exclude)},t}(),$t=function(){function t(){}return Object.defineProperty(t.prototype,\"schemas\",{get:function(){return[]},enumerable:!1,configurable:!0}),t.prototype.add=function(r){},t.prototype.merge=function(r){},t.prototype.include=function(r){return!0},t.prototype.newSub=function(){return this},t.instance=new t,t}(),te=function(){function t(){this.problems=[],this.propertiesMatches=0,this.propertiesValueMatches=0,this.primaryValueMatches=0,this.enumValueMatch=!1,this.enumValues=void 0}return t.prototype.hasProblems=function(){return!!this.problems.length},t.prototype.mergeAll=function(r){for(var i=0,e=r;i<e.length;i++){var n=e[i];this.merge(n)}},t.prototype.merge=function(r){this.problems=this.problems.concat(r.problems)},t.prototype.mergeEnumValues=function(r){if(!this.enumValueMatch&&!r.enumValueMatch&&this.enumValues&&r.enumValues){this.enumValues=this.enumValues.concat(r.enumValues);for(var i=0,e=this.problems;i<e.length;i++){var n=e[i];n.code===W.EnumValueMismatch&&(n.message=M(\"enumWarning\",\"Value is not accepted. Valid values: {0}.\",this.enumValues.map(function(a){return JSON.stringify(a)}).join(\", \")))}}},t.prototype.mergePropertyMatch=function(r){this.merge(r),this.propertiesMatches++,(r.enumValueMatch||!r.hasProblems()&&r.propertiesMatches)&&this.propertiesValueMatches++,r.enumValueMatch&&r.enumValues&&r.enumValues.length===1&&this.primaryValueMatches++},t.prototype.compare=function(r){var i=this.hasProblems();return i!==r.hasProblems()?i?-1:1:this.enumValueMatch!==r.enumValueMatch?r.enumValueMatch?-1:1:this.primaryValueMatches!==r.primaryValueMatches?this.primaryValueMatches-r.primaryValueMatches:this.propertiesValueMatches!==r.propertiesValueMatches?this.propertiesValueMatches-r.propertiesValueMatches:this.propertiesMatches-r.propertiesMatches},t}();function Tr(t,r){return r===void 0&&(r=[]),new kr(t,r,[])}function de(t){return tr(t)}function Je(t){return er(t)}function Rt(t,r,i){return i===void 0&&(i=!1),r>=t.offset&&r<t.offset+t.length||i&&r===t.offset+t.length}var kr=function(){function t(r,i,e){i===void 0&&(i=[]),e===void 0&&(e=[]),this.root=r,this.syntaxErrors=i,this.comments=e}return t.prototype.getNodeFromOffset=function(r,i){if(i===void 0&&(i=!1),this.root)return Kt(this.root,r,i)},t.prototype.visit=function(r){if(this.root){var i=function(e){var n=r(e),a=e.children;if(Array.isArray(a))for(var s=0;s<a.length&&n;s++)n=i(a[s]);return n};i(this.root)}},t.prototype.validate=function(r,i,e){if(e===void 0&&(e=Z.Warning),this.root&&i){var n=new te;return _(this.root,i,n,$t.instance),n.problems.map(function(a){var s,o=U.create(r.positionAt(a.location.offset),r.positionAt(a.location.offset+a.location.length));return ae.create(o,a.message,(s=a.severity)!==null&&s!==void 0?s:e,a.code)})}},t.prototype.getMatchingSchemas=function(r,i,e){i===void 0&&(i=-1);var n=new xn(i,e);return this.root&&r&&_(this.root,r,new te,n),n.schemas},t}();function _(t,r,i,e){if(!t||!e.include(t))return;var n=t;switch(n.type){case\"object\":l(n,r,i,e);break;case\"array\":f(n,r,i,e);break;case\"string\":o(n,r,i,e);break;case\"number\":s(n,r,i,e);break;case\"property\":return _(n.valueNode,r,i,e)}a(),e.add({node:n,schema:r});function a(){function u(L){return n.type===L||L===\"integer\"&&n.type===\"number\"&&n.isInteger}if(Array.isArray(r.type)?r.type.some(u)||i.problems.push({location:{offset:n.offset,length:n.length},message:r.errorMessage||M(\"typeArrayMismatchWarning\",\"Incorrect type. Expected one of {0}.\",r.type.join(\", \"))}):r.type&&(u(r.type)||i.problems.push({location:{offset:n.offset,length:n.length},message:r.errorMessage||M(\"typeMismatchWarning\",'Incorrect type. Expected \"{0}\".',r.type)})),Array.isArray(r.allOf))for(var c=0,h=r.allOf;c<h.length;c++){var d=h[c];_(n,K(d),i,e)}var m=K(r.not);if(m){var p=new te,g=e.newSub();_(n,m,p,g),p.hasProblems()||i.problems.push({location:{offset:n.offset,length:n.length},message:M(\"notSchemaWarning\",\"Matches a schema that is not allowed.\")});for(var b=0,y=g.schemas;b<y.length;b++){var v=y[b];v.inverted=!v.inverted,e.add(v)}}var O=function(L,R){for(var H=[],q=void 0,T=0,S=L;T<S.length;T++){var k=S[T],j=K(k),V=new te,$=e.newSub();if(_(n,j,V,$),V.hasProblems()||H.push(j),!q)q={schema:j,validationResult:V,matchingSchemas:$};else if(!R&&!V.hasProblems()&&!q.validationResult.hasProblems())q.matchingSchemas.merge($),q.validationResult.propertiesMatches+=V.propertiesMatches,q.validationResult.propertiesValueMatches+=V.propertiesValueMatches;else{var J=V.compare(q.validationResult);J>0?q={schema:j,validationResult:V,matchingSchemas:$}:J===0&&(q.matchingSchemas.merge($),q.validationResult.mergeEnumValues(V))}}return H.length>1&&R&&i.problems.push({location:{offset:n.offset,length:1},message:M(\"oneOfWarning\",\"Matches multiple schemas when only one must validate.\")}),q&&(i.merge(q.validationResult),i.propertiesMatches+=q.validationResult.propertiesMatches,i.propertiesValueMatches+=q.validationResult.propertiesValueMatches,e.merge(q.matchingSchemas)),H.length};Array.isArray(r.anyOf)&&O(r.anyOf,!1),Array.isArray(r.oneOf)&&O(r.oneOf,!0);var E=function(L){var R=new te,H=e.newSub();_(n,K(L),R,H),i.merge(R),i.propertiesMatches+=R.propertiesMatches,i.propertiesValueMatches+=R.propertiesValueMatches,e.merge(H)},I=function(L,R,H){var q=K(L),T=new te,S=e.newSub();_(n,q,T,S),e.merge(S),T.hasProblems()?H&&E(H):R&&E(R)},A=K(r.if);if(A&&I(A,K(r.then),K(r.else)),Array.isArray(r.enum)){for(var P=de(n),w=!1,C=0,F=r.enum;C<F.length;C++){var N=F[C];if(Pe(P,N)){w=!0;break}}i.enumValues=r.enum,i.enumValueMatch=w,w||i.problems.push({location:{offset:n.offset,length:n.length},code:W.EnumValueMismatch,message:r.errorMessage||M(\"enumWarning\",\"Value is not accepted. Valid values: {0}.\",r.enum.map(function(L){return JSON.stringify(L)}).join(\", \"))})}if(se(r.const)){var P=de(n);Pe(P,r.const)?i.enumValueMatch=!0:(i.problems.push({location:{offset:n.offset,length:n.length},code:W.EnumValueMismatch,message:r.errorMessage||M(\"constWarning\",\"Value must be {0}.\",JSON.stringify(r.const))}),i.enumValueMatch=!1),i.enumValues=[r.const]}r.deprecationMessage&&n.parent&&i.problems.push({location:{offset:n.parent.offset,length:n.parent.length},severity:Z.Warning,message:r.deprecationMessage,code:W.Deprecated})}function s(u,c,h,d){var m=u.value;function p(C){var F,N=/^(-?\\d+)(?:\\.(\\d+))?(?:e([-+]\\d+))?$/.exec(C.toString());return N&&{value:Number(N[1]+(N[2]||\"\")),multiplier:(((F=N[2])===null||F===void 0?void 0:F.length)||0)-(parseInt(N[3])||0)}}if(ee(c.multipleOf)){var g=-1;if(Number.isInteger(c.multipleOf))g=m%c.multipleOf;else{var b=p(c.multipleOf),y=p(m);if(b&&y){var v=Math.pow(10,Math.abs(y.multiplier-b.multiplier));y.multiplier<b.multiplier?y.value*=v:b.value*=v,g=y.value%b.value}}g!==0&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"multipleOfWarning\",\"Value is not divisible by {0}.\",c.multipleOf)})}function O(C,F){if(ee(F))return F;if(ie(F)&&F)return C}function E(C,F){if(!ie(F)||!F)return C}var I=O(c.minimum,c.exclusiveMinimum);ee(I)&&m<=I&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"exclusiveMinimumWarning\",\"Value is below the exclusive minimum of {0}.\",I)});var A=O(c.maximum,c.exclusiveMaximum);ee(A)&&m>=A&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"exclusiveMaximumWarning\",\"Value is above the exclusive maximum of {0}.\",A)});var P=E(c.minimum,c.exclusiveMinimum);ee(P)&&m<P&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"minimumWarning\",\"Value is below the minimum of {0}.\",P)});var w=E(c.maximum,c.exclusiveMaximum);ee(w)&&m>w&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"maximumWarning\",\"Value is above the maximum of {0}.\",w)})}function o(u,c,h,d){if(ee(c.minLength)&&u.value.length<c.minLength&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"minLengthWarning\",\"String is shorter than the minimum length of {0}.\",c.minLength)}),ee(c.maxLength)&&u.value.length>c.maxLength&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"maxLengthWarning\",\"String is longer than the maximum length of {0}.\",c.maxLength)}),nr(c.pattern)){var m=xe(c.pattern);m?.test(u.value)||h.problems.push({location:{offset:u.offset,length:u.length},message:c.patternErrorMessage||c.errorMessage||M(\"patternWarning\",'String does not match the pattern of \"{0}\".',c.pattern)})}if(c.format)switch(c.format){case\"uri\":case\"uri-reference\":{var p=void 0;if(!u.value)p=M(\"uriEmpty\",\"URI expected.\");else{var g=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/.exec(u.value);g?!g[2]&&c.format===\"uri\"&&(p=M(\"uriSchemeMissing\",\"URI with a scheme is expected.\")):p=M(\"uriMissing\",\"URI is expected.\")}p&&h.problems.push({location:{offset:u.offset,length:u.length},message:c.patternErrorMessage||c.errorMessage||M(\"uriFormatWarning\",\"String is not a URI: {0}\",p)})}break;case\"color-hex\":case\"date-time\":case\"date\":case\"time\":case\"email\":case\"hostname\":case\"ipv4\":case\"ipv6\":var b=dn[c.format];(!u.value||!b.pattern.exec(u.value))&&h.problems.push({location:{offset:u.offset,length:u.length},message:c.patternErrorMessage||c.errorMessage||b.errorMessage});default:}}function f(u,c,h,d){if(Array.isArray(c.items)){for(var m=c.items,p=0;p<m.length;p++){var g=m[p],b=K(g),y=new te,v=u.items[p];v?(_(v,b,y,d),h.mergePropertyMatch(y)):u.items.length>=m.length&&h.propertiesValueMatches++}if(u.items.length>m.length)if(typeof c.additionalItems==\"object\")for(var O=m.length;O<u.items.length;O++){var y=new te;_(u.items[O],c.additionalItems,y,d),h.mergePropertyMatch(y)}else c.additionalItems===!1&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"additionalItemsWarning\",\"Array has too many items according to schema. Expected {0} or fewer.\",m.length)})}else{var E=K(c.items);if(E)for(var I=0,A=u.items;I<A.length;I++){var v=A[I],y=new te;_(v,E,y,d),h.mergePropertyMatch(y)}}var P=K(c.contains);if(P){var w=u.items.some(function(N){var L=new te;return _(N,P,L,$t.instance),!L.hasProblems()});w||h.problems.push({location:{offset:u.offset,length:u.length},message:c.errorMessage||M(\"requiredItemMissingWarning\",\"Array does not contain required item.\")})}if(ee(c.minItems)&&u.items.length<c.minItems&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"minItemsWarning\",\"Array has too few items. Expected {0} or more.\",c.minItems)}),ee(c.maxItems)&&u.items.length>c.maxItems&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"maxItemsWarning\",\"Array has too many items. Expected {0} or fewer.\",c.maxItems)}),c.uniqueItems===!0){var C=de(u),F=C.some(function(N,L){return L!==C.lastIndexOf(N)});F&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"uniqueItemsWarning\",\"Array has duplicate items.\")})}}function l(u,c,h,d){for(var m=Object.create(null),p=[],g=0,b=u.properties;g<b.length;g++){var y=b[g],v=y.keyNode.value;m[v]=y.valueNode,p.push(v)}if(Array.isArray(c.required))for(var O=0,E=c.required;O<E.length;O++){var I=E[O];if(!m[I]){var A=u.parent&&u.parent.type===\"property\"&&u.parent.keyNode,P=A?{offset:A.offset,length:A.length}:{offset:u.offset,length:1};h.problems.push({location:P,message:M(\"MissingRequiredPropWarning\",'Missing property \"{0}\".',I)})}}var w=function(Xt){for(var lt=p.indexOf(Xt);lt>=0;)p.splice(lt,1),lt=p.indexOf(Xt)};if(c.properties)for(var C=0,F=Object.keys(c.properties);C<F.length;C++){var I=F[C];w(I);var N=c.properties[I],L=m[I];if(L)if(ie(N))if(N)h.propertiesMatches++,h.propertiesValueMatches++;else{var y=L.parent;h.problems.push({location:{offset:y.keyNode.offset,length:y.keyNode.length},message:c.errorMessage||M(\"DisallowedExtraPropWarning\",\"Property {0} is not allowed.\",I)})}else{var R=new te;_(L,N,R,d),h.mergePropertyMatch(R)}}if(c.patternProperties)for(var H=0,q=Object.keys(c.patternProperties);H<q.length;H++)for(var T=q[H],S=xe(T),k=0,j=p.slice(0);k<j.length;k++){var I=j[k];if(S?.test(I)){w(I);var L=m[I];if(L){var N=c.patternProperties[T];if(ie(N))if(N)h.propertiesMatches++,h.propertiesValueMatches++;else{var y=L.parent;h.problems.push({location:{offset:y.keyNode.offset,length:y.keyNode.length},message:c.errorMessage||M(\"DisallowedExtraPropWarning\",\"Property {0} is not allowed.\",I)})}else{var R=new te;_(L,N,R,d),h.mergePropertyMatch(R)}}}}if(typeof c.additionalProperties==\"object\")for(var V=0,$=p;V<$.length;V++){var I=$[V],L=m[I];if(L){var R=new te;_(L,c.additionalProperties,R,d),h.mergePropertyMatch(R)}}else if(c.additionalProperties===!1&&p.length>0)for(var J=0,ue=p;J<ue.length;J++){var I=ue[J],L=m[I];if(L){var y=L.parent;h.problems.push({location:{offset:y.keyNode.offset,length:y.keyNode.length},message:c.errorMessage||M(\"DisallowedExtraPropWarning\",\"Property {0} is not allowed.\",I)})}}if(ee(c.maxProperties)&&u.properties.length>c.maxProperties&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"MaxPropWarning\",\"Object has more properties than limit of {0}.\",c.maxProperties)}),ee(c.minProperties)&&u.properties.length<c.minProperties&&h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"MinPropWarning\",\"Object has fewer properties than the required number of {0}\",c.minProperties)}),c.dependencies)for(var G=0,ne=Object.keys(c.dependencies);G<ne.length;G++){var v=ne[G],ke=m[v];if(ke){var ce=c.dependencies[v];if(Array.isArray(ce))for(var ut=0,Bt=ce;ut<Bt.length;ut++){var _t=Bt[ut];m[_t]?h.propertiesValueMatches++:h.problems.push({location:{offset:u.offset,length:u.length},message:M(\"RequiredDependentPropWarning\",\"Object is missing property {0} required by property {1}.\",_t,v)})}else{var N=K(ce);if(N){var R=new te;_(u,N,R,d),h.mergePropertyMatch(R)}}}}var Ht=K(c.propertyNames);if(Ht)for(var ct=0,Gt=u.properties;ct<Gt.length;ct++){var _r=Gt[ct],v=_r.keyNode;v&&_(v,Ht,h,$t.instance)}}}function Or(t,r){var i=[],e=-1,n=t.getText(),a=le(n,!1),s=r&&r.collectComments?[]:void 0;function o(){for(;;){var A=a.scan();switch(c(),A){case 12:case 13:Array.isArray(s)&&s.push(U.create(t.positionAt(a.getTokenOffset()),t.positionAt(a.getTokenOffset()+a.getTokenLength())));break;case 15:case 14:break;default:return A}}}function f(A){return a.getToken()===A?(o(),!0):!1}function l(A,P,w,C,F){if(F===void 0&&(F=Z.Error),i.length===0||w!==e){var N=U.create(t.positionAt(w),t.positionAt(C));i.push(ae.create(N,A,F,P,t.languageId)),e=w}}function u(A,P,w,C,F){w===void 0&&(w=void 0),C===void 0&&(C=[]),F===void 0&&(F=[]);var N=a.getTokenOffset(),L=a.getTokenOffset()+a.getTokenLength();if(N===L&&N>0){for(N--;N>0&&/\\s/.test(n.charAt(N));)N--;L=N+1}if(l(A,P,N,L),w&&h(w,!1),C.length+F.length>0)for(var R=a.getToken();R!==17;){if(C.indexOf(R)!==-1){o();break}else if(F.indexOf(R)!==-1)break;R=o()}return w}function c(){switch(a.getTokenError()){case 4:return u(M(\"InvalidUnicode\",\"Invalid unicode sequence in string.\"),W.InvalidUnicode),!0;case 5:return u(M(\"InvalidEscapeCharacter\",\"Invalid escape character in string.\"),W.InvalidEscapeCharacter),!0;case 3:return u(M(\"UnexpectedEndOfNumber\",\"Unexpected end of number.\"),W.UnexpectedEndOfNumber),!0;case 1:return u(M(\"UnexpectedEndOfComment\",\"Unexpected end of comment.\"),W.UnexpectedEndOfComment),!0;case 2:return u(M(\"UnexpectedEndOfString\",\"Unexpected end of string.\"),W.UnexpectedEndOfString),!0;case 6:return u(M(\"InvalidCharacter\",\"Invalid characters in string. Control characters must be escaped.\"),W.InvalidCharacter),!0}return!1}function h(A,P){return A.length=a.getTokenOffset()+a.getTokenLength()-A.offset,P&&o(),A}function d(A){if(a.getToken()===3){var P=new mn(A,a.getTokenOffset());o();for(var w=0,C=!1;a.getToken()!==4&&a.getToken()!==17;){if(a.getToken()===5){C||u(M(\"ValueExpected\",\"Value expected\"),W.ValueExpected);var F=a.getTokenOffset();if(o(),a.getToken()===4){C&&l(M(\"TrailingComma\",\"Trailing comma\"),W.TrailingComma,F,F+1);continue}}else C&&u(M(\"ExpectedComma\",\"Expected comma\"),W.CommaExpected);var N=O(P);N?P.items.push(N):u(M(\"PropertyExpected\",\"Value expected\"),W.ValueExpected,void 0,[],[4,5]),C=!0}return a.getToken()!==4?u(M(\"ExpectedCloseBracket\",\"Expected comma or closing bracket\"),W.CommaOrCloseBacketExpected,P):h(P,!0)}}var m=new Dt(void 0,0,0);function p(A,P){var w=new yn(A,a.getTokenOffset(),m),C=b(w);if(!C)if(a.getToken()===16){u(M(\"DoubleQuotesExpected\",\"Property keys must be doublequoted\"),W.Undefined);var F=new Dt(w,a.getTokenOffset(),a.getTokenLength());F.value=a.getTokenValue(),C=F,o()}else return;w.keyNode=C;var N=P[C.value];if(N?(l(M(\"DuplicateKeyWarning\",\"Duplicate object key\"),W.DuplicateKey,w.keyNode.offset,w.keyNode.offset+w.keyNode.length,Z.Warning),typeof N==\"object\"&&l(M(\"DuplicateKeyWarning\",\"Duplicate object key\"),W.DuplicateKey,N.keyNode.offset,N.keyNode.offset+N.keyNode.length,Z.Warning),P[C.value]=!0):P[C.value]=w,a.getToken()===6)w.colonOffset=a.getTokenOffset(),o();else if(u(M(\"ColonExpected\",\"Colon expected\"),W.ColonExpected),a.getToken()===10&&t.positionAt(C.offset+C.length).line<t.positionAt(a.getTokenOffset()).line)return w.length=C.length,w;var L=O(w);return L?(w.valueNode=L,w.length=L.offset+L.length-w.offset,w):u(M(\"ValueExpected\",\"Value expected\"),W.ValueExpected,w,[],[2,5])}function g(A){if(a.getToken()===1){var P=new bn(A,a.getTokenOffset()),w=Object.create(null);o();for(var C=!1;a.getToken()!==2&&a.getToken()!==17;){if(a.getToken()===5){C||u(M(\"PropertyExpected\",\"Property expected\"),W.PropertyExpected);var F=a.getTokenOffset();if(o(),a.getToken()===2){C&&l(M(\"TrailingComma\",\"Trailing comma\"),W.TrailingComma,F,F+1);continue}}else C&&u(M(\"ExpectedComma\",\"Expected comma\"),W.CommaExpected);var N=p(P,w);N?P.properties.push(N):u(M(\"PropertyExpected\",\"Property expected\"),W.PropertyExpected,void 0,[],[2,5]),C=!0}return a.getToken()!==2?u(M(\"ExpectedCloseBrace\",\"Expected comma or closing brace\"),W.CommaOrCloseBraceExpected,P):h(P,!0)}}function b(A){if(a.getToken()===10){var P=new Dt(A,a.getTokenOffset());return P.value=a.getTokenValue(),h(P,!0)}}function y(A){if(a.getToken()===11){var P=new vn(A,a.getTokenOffset());if(a.getTokenError()===0){var w=a.getTokenValue();try{var C=JSON.parse(w);if(!ee(C))return u(M(\"InvalidNumberFormat\",\"Invalid number format.\"),W.Undefined,P);P.value=C}catch{return u(M(\"InvalidNumberFormat\",\"Invalid number format.\"),W.Undefined,P)}P.isInteger=w.indexOf(\".\")===-1}return h(P,!0)}}function v(A){var P;switch(a.getToken()){case 7:return h(new pn(A,a.getTokenOffset()),!0);case 8:return h(new Ar(A,!0,a.getTokenOffset()),!0);case 9:return h(new Ar(A,!1,a.getTokenOffset()),!0);default:return}}function O(A){return d(A)||g(A)||b(A)||y(A)||v(A)}var E=void 0,I=o();return I!==17&&(E=O(E),E?a.getToken()!==17&&u(M(\"End of file expected\",\"End of file expected.\"),W.Undefined):u(M(\"Invalid symbol\",\"Expected a JSON object, array or literal.\"),W.Undefined)),new kr(E,i,s)}function tt(t,r,i){if(t!==null&&typeof t==\"object\"){var e=r+\"\t\";if(Array.isArray(t)){if(t.length===0)return\"[]\";for(var n=`[\n`,a=0;a<t.length;a++)n+=e+tt(t[a],e,i),a<t.length-1&&(n+=\",\"),n+=`\n`;return n+=r+\"]\",n}else{var s=Object.keys(t);if(s.length===0)return\"{}\";for(var n=`{\n`,a=0;a<s.length;a++){var o=s[a];n+=e+JSON.stringify(o)+\": \"+tt(t[o],e,i),a<s.length-1&&(n+=\",\"),n+=`\n`}return n+=r+\"}\",n}}return i(t)}var Ut=he(),Sn=[\",\",\"}\",\"]\"],An=[\":\"],Cr=function(){function t(r,i,e,n){i===void 0&&(i=[]),e===void 0&&(e=Promise),n===void 0&&(n={}),this.schemaService=r,this.contributions=i,this.promiseConstructor=e,this.clientCapabilities=n}return t.prototype.doResolve=function(r){for(var i=this.contributions.length-1;i>=0;i--){var e=this.contributions[i].resolveCompletion;if(e){var n=e(r);if(n)return n}}return this.promiseConstructor.resolve(r)},t.prototype.doComplete=function(r,i,e){var n=this,a={items:[],isIncomplete:!1},s=r.getText(),o=r.offsetAt(i),f=e.getNodeFromOffset(o,!0);if(this.isInComment(r,f?f.offset:0,o))return Promise.resolve(a);if(f&&o===f.offset+f.length&&o>0){var l=s[o-1];(f.type===\"object\"&&l===\"}\"||f.type===\"array\"&&l===\"]\")&&(f=f.parent)}var u=this.getCurrentWord(r,o),c;if(f&&(f.type===\"string\"||f.type===\"number\"||f.type===\"boolean\"||f.type===\"null\"))c=U.create(r.positionAt(f.offset),r.positionAt(f.offset+f.length));else{var h=o-u.length;h>0&&s[h-1]==='\"'&&h--,c=U.create(r.positionAt(h),i)}var d=!1,m={},p={add:function(g){var b=g.label,y=m[b];if(y)y.documentation||(y.documentation=g.documentation),y.detail||(y.detail=g.detail);else{if(b=b.replace(/[\\n]/g,\"\\u21B5\"),b.length>60){var v=b.substr(0,57).trim()+\"...\";m[v]||(b=v)}c&&g.insertText!==void 0&&(g.textEdit=Y.replace(c,g.insertText)),d&&(g.commitCharacters=g.kind===Q.Property?An:Sn),g.label=b,m[b]=g,a.items.push(g)}},setAsIncomplete:function(){a.isIncomplete=!0},error:function(g){console.error(g)},log:function(g){console.log(g)},getNumberOfProposals:function(){return a.items.length}};return this.schemaService.getSchemaForResource(r.uri,e).then(function(g){var b=[],y=!0,v=\"\",O=void 0;if(f&&f.type===\"string\"){var E=f.parent;E&&E.type===\"property\"&&E.keyNode===f&&(y=!E.valueNode,O=E,v=s.substr(f.offset+1,f.length-2),E&&(f=E.parent))}if(f&&f.type===\"object\"){if(f.offset===o)return a;var I=f.properties;I.forEach(function(C){(!O||O!==C)&&(m[C.keyNode.value]=$e.create(\"__\"))});var A=\"\";y&&(A=n.evaluateSeparatorAfter(r,r.offsetAt(c.end))),g?n.getPropertyCompletions(g,e,f,y,A,p):n.getSchemaLessPropertyCompletions(e,f,v,p);var P=Je(f);n.contributions.forEach(function(C){var F=C.collectPropertyCompletions(r.uri,P,u,y,A===\"\",p);F&&b.push(F)}),!g&&u.length>0&&s.charAt(o-u.length-1)!=='\"'&&(p.add({kind:Q.Property,label:n.getLabelForValue(u),insertText:n.getInsertTextForProperty(u,void 0,!1,A),insertTextFormat:z.Snippet,documentation:\"\"}),p.setAsIncomplete())}var w={};return g?n.getValueCompletions(g,e,f,o,r,p,w):n.getSchemaLessValueCompletions(e,f,o,r,p),n.contributions.length>0&&n.getContributedValueCompletions(e,f,o,r,p,b),n.promiseConstructor.all(b).then(function(){if(p.getNumberOfProposals()===0){var C=o;f&&(f.type===\"string\"||f.type===\"number\"||f.type===\"boolean\"||f.type===\"null\")&&(C=f.offset+f.length);var F=n.evaluateSeparatorAfter(r,C);n.addFillerValueCompletions(w,F,p)}return a})})},t.prototype.getPropertyCompletions=function(r,i,e,n,a,s){var o=this,f=i.getMatchingSchemas(r.schema,e.offset);f.forEach(function(l){if(l.node===e&&!l.inverted){var u=l.schema.properties;u&&Object.keys(u).forEach(function(p){var g=u[p];if(typeof g==\"object\"&&!g.deprecationMessage&&!g.doNotSuggest){var b={kind:Q.Property,label:p,insertText:o.getInsertTextForProperty(p,g,n,a),insertTextFormat:z.Snippet,filterText:o.getFilterTextForValue(p),documentation:o.fromMarkup(g.markdownDescription)||g.description||\"\"};g.suggestSortText!==void 0&&(b.sortText=g.suggestSortText),b.insertText&&pe(b.insertText,\"$1\".concat(a))&&(b.command={title:\"Suggest\",command:\"editor.action.triggerSuggest\"}),s.add(b)}});var c=l.schema.propertyNames;if(typeof c==\"object\"&&!c.deprecationMessage&&!c.doNotSuggest){var h=function(p,g){g===void 0&&(g=void 0);var b={kind:Q.Property,label:p,insertText:o.getInsertTextForProperty(p,void 0,n,a),insertTextFormat:z.Snippet,filterText:o.getFilterTextForValue(p),documentation:g||o.fromMarkup(c.markdownDescription)||c.description||\"\"};c.suggestSortText!==void 0&&(b.sortText=c.suggestSortText),b.insertText&&pe(b.insertText,\"$1\".concat(a))&&(b.command={title:\"Suggest\",command:\"editor.action.triggerSuggest\"}),s.add(b)};if(c.enum)for(var d=0;d<c.enum.length;d++){var m=void 0;c.markdownEnumDescriptions&&d<c.markdownEnumDescriptions.length?m=o.fromMarkup(c.markdownEnumDescriptions[d]):c.enumDescriptions&&d<c.enumDescriptions.length&&(m=c.enumDescriptions[d]),h(c.enum[d],m)}c.const&&h(c.const)}}})},t.prototype.getSchemaLessPropertyCompletions=function(r,i,e,n){var a=this,s=function(f){f.properties.forEach(function(l){var u=l.keyNode.value;n.add({kind:Q.Property,label:u,insertText:a.getInsertTextForValue(u,\"\"),insertTextFormat:z.Snippet,filterText:a.getFilterTextForValue(u),documentation:\"\"})})};if(i.parent)if(i.parent.type===\"property\"){var o=i.parent.keyNode.value;r.visit(function(f){return f.type===\"property\"&&f!==i.parent&&f.keyNode.value===o&&f.valueNode&&f.valueNode.type===\"object\"&&s(f.valueNode),!0})}else i.parent.type===\"array\"&&i.parent.items.forEach(function(f){f.type===\"object\"&&f!==i&&s(f)});else i.type===\"object\"&&n.add({kind:Q.Property,label:\"$schema\",insertText:this.getInsertTextForProperty(\"$schema\",void 0,!0,\"\"),insertTextFormat:z.Snippet,documentation:\"\",filterText:this.getFilterTextForValue(\"$schema\")})},t.prototype.getSchemaLessValueCompletions=function(r,i,e,n,a){var s=this,o=e;if(i&&(i.type===\"string\"||i.type===\"number\"||i.type===\"boolean\"||i.type===\"null\")&&(o=i.offset+i.length,i=i.parent),!i){a.add({kind:this.getSuggestionKind(\"object\"),label:\"Empty object\",insertText:this.getInsertTextForValue({},\"\"),insertTextFormat:z.Snippet,documentation:\"\"}),a.add({kind:this.getSuggestionKind(\"array\"),label:\"Empty array\",insertText:this.getInsertTextForValue([],\"\"),insertTextFormat:z.Snippet,documentation:\"\"});return}var f=this.evaluateSeparatorAfter(n,o),l=function(d){d.parent&&!Rt(d.parent,e,!0)&&a.add({kind:s.getSuggestionKind(d.type),label:s.getLabelTextForMatchingNode(d,n),insertText:s.getInsertTextForMatchingNode(d,n,f),insertTextFormat:z.Snippet,documentation:\"\"}),d.type===\"boolean\"&&s.addBooleanValueCompletion(!d.value,f,a)};if(i.type===\"property\"&&e>(i.colonOffset||0)){var u=i.valueNode;if(u&&(e>u.offset+u.length||u.type===\"object\"||u.type===\"array\"))return;var c=i.keyNode.value;r.visit(function(d){return d.type===\"property\"&&d.keyNode.value===c&&d.valueNode&&l(d.valueNode),!0}),c===\"$schema\"&&i.parent&&!i.parent.parent&&this.addDollarSchemaCompletions(f,a)}if(i.type===\"array\")if(i.parent&&i.parent.type===\"property\"){var h=i.parent.keyNode.value;r.visit(function(d){return d.type===\"property\"&&d.keyNode.value===h&&d.valueNode&&d.valueNode.type===\"array\"&&d.valueNode.items.forEach(l),!0})}else i.items.forEach(l)},t.prototype.getValueCompletions=function(r,i,e,n,a,s,o){var f=n,l=void 0,u=void 0;if(e&&(e.type===\"string\"||e.type===\"number\"||e.type===\"boolean\"||e.type===\"null\")&&(f=e.offset+e.length,u=e,e=e.parent),!e){this.addSchemaValueCompletions(r.schema,\"\",s,o);return}if(e.type===\"property\"&&n>(e.colonOffset||0)){var c=e.valueNode;if(c&&n>c.offset+c.length)return;l=e.keyNode.value,e=e.parent}if(e&&(l!==void 0||e.type===\"array\")){for(var h=this.evaluateSeparatorAfter(a,f),d=i.getMatchingSchemas(r.schema,e.offset,u),m=0,p=d;m<p.length;m++){var g=p[m];if(g.node===e&&!g.inverted&&g.schema){if(e.type===\"array\"&&g.schema.items)if(Array.isArray(g.schema.items)){var b=this.findItemAtOffset(e,a,n);b<g.schema.items.length&&this.addSchemaValueCompletions(g.schema.items[b],h,s,o)}else this.addSchemaValueCompletions(g.schema.items,h,s,o);if(l!==void 0){var y=!1;if(g.schema.properties){var v=g.schema.properties[l];v&&(y=!0,this.addSchemaValueCompletions(v,h,s,o))}if(g.schema.patternProperties&&!y)for(var O=0,E=Object.keys(g.schema.patternProperties);O<E.length;O++){var I=E[O],A=xe(I);if(A?.test(l)){y=!0;var v=g.schema.patternProperties[I];this.addSchemaValueCompletions(v,h,s,o)}}if(g.schema.additionalProperties&&!y){var v=g.schema.additionalProperties;this.addSchemaValueCompletions(v,h,s,o)}}}}l===\"$schema\"&&!e.parent&&this.addDollarSchemaCompletions(h,s),o.boolean&&(this.addBooleanValueCompletion(!0,h,s),this.addBooleanValueCompletion(!1,h,s)),o.null&&this.addNullValueCompletion(h,s)}},t.prototype.getContributedValueCompletions=function(r,i,e,n,a,s){if(!i)this.contributions.forEach(function(u){var c=u.collectDefaultCompletions(n.uri,a);c&&s.push(c)});else if((i.type===\"string\"||i.type===\"number\"||i.type===\"boolean\"||i.type===\"null\")&&(i=i.parent),i&&i.type===\"property\"&&e>(i.colonOffset||0)){var o=i.keyNode.value,f=i.valueNode;if((!f||e<=f.offset+f.length)&&i.parent){var l=Je(i.parent);this.contributions.forEach(function(u){var c=u.collectValueCompletions(n.uri,l,o,a);c&&s.push(c)})}}},t.prototype.addSchemaValueCompletions=function(r,i,e,n){var a=this;typeof r==\"object\"&&(this.addEnumValueCompletions(r,i,e),this.addDefaultValueCompletions(r,i,e),this.collectTypes(r,n),Array.isArray(r.allOf)&&r.allOf.forEach(function(s){return a.addSchemaValueCompletions(s,i,e,n)}),Array.isArray(r.anyOf)&&r.anyOf.forEach(function(s){return a.addSchemaValueCompletions(s,i,e,n)}),Array.isArray(r.oneOf)&&r.oneOf.forEach(function(s){return a.addSchemaValueCompletions(s,i,e,n)}))},t.prototype.addDefaultValueCompletions=function(r,i,e,n){var a=this;n===void 0&&(n=0);var s=!1;if(se(r.default)){for(var o=r.type,f=r.default,l=n;l>0;l--)f=[f],o=\"array\";e.add({kind:this.getSuggestionKind(o),label:this.getLabelForValue(f),insertText:this.getInsertTextForValue(f,i),insertTextFormat:z.Snippet,detail:Ut(\"json.suggest.default\",\"Default value\")}),s=!0}Array.isArray(r.examples)&&r.examples.forEach(function(u){for(var c=r.type,h=u,d=n;d>0;d--)h=[h],c=\"array\";e.add({kind:a.getSuggestionKind(c),label:a.getLabelForValue(h),insertText:a.getInsertTextForValue(h,i),insertTextFormat:z.Snippet}),s=!0}),Array.isArray(r.defaultSnippets)&&r.defaultSnippets.forEach(function(u){var c=r.type,h=u.body,d=u.label,m,p;if(se(h)){for(var g=r.type,b=n;b>0;b--)h=[h],g=\"array\";m=a.getInsertTextForSnippetValue(h,i),p=a.getFilterTextForSnippetValue(h),d=d||a.getLabelForSnippetValue(h)}else if(typeof u.bodyText==\"string\"){for(var y=\"\",v=\"\",O=\"\",b=n;b>0;b--)y=y+O+`[\n`,v=v+`\n`+O+\"]\",O+=\"\t\",c=\"array\";m=y+O+u.bodyText.split(`\n`).join(`\n`+O)+v+i,d=d||m,p=m.replace(/[\\n]/g,\"\")}else return;e.add({kind:a.getSuggestionKind(c),label:d,documentation:a.fromMarkup(u.markdownDescription)||u.description,insertText:m,insertTextFormat:z.Snippet,filterText:p}),s=!0}),!s&&typeof r.items==\"object\"&&!Array.isArray(r.items)&&n<5&&this.addDefaultValueCompletions(r.items,i,e,n+1)},t.prototype.addEnumValueCompletions=function(r,i,e){if(se(r.const)&&e.add({kind:this.getSuggestionKind(r.type),label:this.getLabelForValue(r.const),insertText:this.getInsertTextForValue(r.const,i),insertTextFormat:z.Snippet,documentation:this.fromMarkup(r.markdownDescription)||r.description}),Array.isArray(r.enum))for(var n=0,a=r.enum.length;n<a;n++){var s=r.enum[n],o=this.fromMarkup(r.markdownDescription)||r.description;r.markdownEnumDescriptions&&n<r.markdownEnumDescriptions.length&&this.doesSupportMarkdown()?o=this.fromMarkup(r.markdownEnumDescriptions[n]):r.enumDescriptions&&n<r.enumDescriptions.length&&(o=r.enumDescriptions[n]),e.add({kind:this.getSuggestionKind(r.type),label:this.getLabelForValue(s),insertText:this.getInsertTextForValue(s,i),insertTextFormat:z.Snippet,documentation:o})}},t.prototype.collectTypes=function(r,i){if(!(Array.isArray(r.enum)||se(r.const))){var e=r.type;Array.isArray(e)?e.forEach(function(n){return i[n]=!0}):e&&(i[e]=!0)}},t.prototype.addFillerValueCompletions=function(r,i,e){r.object&&e.add({kind:this.getSuggestionKind(\"object\"),label:\"{}\",insertText:this.getInsertTextForGuessedValue({},i),insertTextFormat:z.Snippet,detail:Ut(\"defaults.object\",\"New object\"),documentation:\"\"}),r.array&&e.add({kind:this.getSuggestionKind(\"array\"),label:\"[]\",insertText:this.getInsertTextForGuessedValue([],i),insertTextFormat:z.Snippet,detail:Ut(\"defaults.array\",\"New array\"),documentation:\"\"})},t.prototype.addBooleanValueCompletion=function(r,i,e){e.add({kind:this.getSuggestionKind(\"boolean\"),label:r?\"true\":\"false\",insertText:this.getInsertTextForValue(r,i),insertTextFormat:z.Snippet,documentation:\"\"})},t.prototype.addNullValueCompletion=function(r,i){i.add({kind:this.getSuggestionKind(\"null\"),label:\"null\",insertText:\"null\"+r,insertTextFormat:z.Snippet,documentation:\"\"})},t.prototype.addDollarSchemaCompletions=function(r,i){var e=this,n=this.schemaService.getRegisteredSchemaIds(function(a){return a===\"http\"||a===\"https\"});n.forEach(function(a){return i.add({kind:Q.Module,label:e.getLabelForValue(a),filterText:e.getFilterTextForValue(a),insertText:e.getInsertTextForValue(a,r),insertTextFormat:z.Snippet,documentation:\"\"})})},t.prototype.getLabelForValue=function(r){return JSON.stringify(r)},t.prototype.getFilterTextForValue=function(r){return JSON.stringify(r)},t.prototype.getFilterTextForSnippetValue=function(r){return JSON.stringify(r).replace(/\\$\\{\\d+:([^}]+)\\}|\\$\\d+/g,\"$1\")},t.prototype.getLabelForSnippetValue=function(r){var i=JSON.stringify(r);return i.replace(/\\$\\{\\d+:([^}]+)\\}|\\$\\d+/g,\"$1\")},t.prototype.getInsertTextForPlainText=function(r){return r.replace(/[\\\\\\$\\}]/g,\"\\\\$&\")},t.prototype.getInsertTextForValue=function(r,i){var e=JSON.stringify(r,null,\"\t\");return e===\"{}\"?\"{$1}\"+i:e===\"[]\"?\"[$1]\"+i:this.getInsertTextForPlainText(e+i)},t.prototype.getInsertTextForSnippetValue=function(r,i){var e=function(n){return typeof n==\"string\"&&n[0]===\"^\"?n.substr(1):JSON.stringify(n)};return tt(r,\"\",e)+i},t.prototype.getInsertTextForGuessedValue=function(r,i){switch(typeof r){case\"object\":return r===null?\"${1:null}\"+i:this.getInsertTextForValue(r,i);case\"string\":var e=JSON.stringify(r);return e=e.substr(1,e.length-2),e=this.getInsertTextForPlainText(e),'\"${1:'+e+'}\"'+i;case\"number\":case\"boolean\":return\"${1:\"+JSON.stringify(r)+\"}\"+i}return this.getInsertTextForValue(r,i)},t.prototype.getSuggestionKind=function(r){if(Array.isArray(r)){var i=r;r=i.length>0?i[0]:void 0}if(!r)return Q.Value;switch(r){case\"string\":return Q.Value;case\"object\":return Q.Module;case\"property\":return Q.Property;default:return Q.Value}},t.prototype.getLabelTextForMatchingNode=function(r,i){switch(r.type){case\"array\":return\"[]\";case\"object\":return\"{}\";default:var e=i.getText().substr(r.offset,r.length);return e}},t.prototype.getInsertTextForMatchingNode=function(r,i,e){switch(r.type){case\"array\":return this.getInsertTextForValue([],e);case\"object\":return this.getInsertTextForValue({},e);default:var n=i.getText().substr(r.offset,r.length)+e;return this.getInsertTextForPlainText(n)}},t.prototype.getInsertTextForProperty=function(r,i,e,n){var a=this.getInsertTextForValue(r,\"\");if(!e)return a;var s=a+\": \",o,f=0;if(i){if(Array.isArray(i.defaultSnippets)){if(i.defaultSnippets.length===1){var l=i.defaultSnippets[0].body;se(l)&&(o=this.getInsertTextForSnippetValue(l,\"\"))}f+=i.defaultSnippets.length}if(i.enum&&(!o&&i.enum.length===1&&(o=this.getInsertTextForGuessedValue(i.enum[0],\"\")),f+=i.enum.length),se(i.default)&&(o||(o=this.getInsertTextForGuessedValue(i.default,\"\")),f++),Array.isArray(i.examples)&&i.examples.length&&(o||(o=this.getInsertTextForGuessedValue(i.examples[0],\"\")),f+=i.examples.length),f===0){var u=Array.isArray(i.type)?i.type[0]:i.type;switch(u||(i.properties?u=\"object\":i.items&&(u=\"array\")),u){case\"boolean\":o=\"$1\";break;case\"string\":o='\"$1\"';break;case\"object\":o=\"{$1}\";break;case\"array\":o=\"[$1]\";break;case\"number\":case\"integer\":o=\"${1:0}\";break;case\"null\":o=\"${1:null}\";break;default:return a}}}return(!o||f>1)&&(o=\"$1\"),s+o+n},t.prototype.getCurrentWord=function(r,i){for(var e=i-1,n=r.getText();e>=0&&` \t\n\\r\\v\":{[,]}`.indexOf(n.charAt(e))===-1;)e--;return n.substring(e+1,i)},t.prototype.evaluateSeparatorAfter=function(r,i){var e=le(r.getText(),!0);e.setPosition(i);var n=e.scan();switch(n){case 5:case 2:case 4:case 17:return\"\";default:return\",\"}},t.prototype.findItemAtOffset=function(r,i,e){for(var n=le(i.getText(),!0),a=r.items,s=a.length-1;s>=0;s--){var o=a[s];if(e>o.offset+o.length){n.setPosition(o.offset+o.length);var f=n.scan();return f===5&&e>=n.getTokenOffset()+n.getTokenLength()?s+1:s}else if(e>=o.offset)return s}return 0},t.prototype.isInComment=function(r,i,e){var n=le(r.getText(),!1);n.setPosition(i);for(var a=n.scan();a!==17&&n.getTokenOffset()+n.getTokenLength()<e;)a=n.scan();return(a===12||a===13)&&n.getTokenOffset()<=e},t.prototype.fromMarkup=function(r){if(r&&this.doesSupportMarkdown())return{kind:fe.Markdown,value:r}},t.prototype.doesSupportMarkdown=function(){if(!se(this.supportsMarkdown)){var r=this.clientCapabilities.textDocument&&this.clientCapabilities.textDocument.completion;this.supportsMarkdown=r&&r.completionItem&&Array.isArray(r.completionItem.documentationFormat)&&r.completionItem.documentationFormat.indexOf(fe.Markdown)!==-1}return this.supportsMarkdown},t.prototype.doesSupportsCommitCharacters=function(){if(!se(this.supportsCommitCharacters)){var r=this.clientCapabilities.textDocument&&this.clientCapabilities.textDocument.completion;this.supportsCommitCharacters=r&&r.completionItem&&!!r.completionItem.commitCharactersSupport}return this.supportsCommitCharacters},t}();var Pr=function(){function t(r,i,e){i===void 0&&(i=[]),this.schemaService=r,this.contributions=i,this.promise=e||Promise}return t.prototype.doHover=function(r,i,e){var n=r.offsetAt(i),a=e.getNodeFromOffset(n);if(!a||(a.type===\"object\"||a.type===\"array\")&&n>a.offset+1&&n<a.offset+a.length-1)return this.promise.resolve(null);var s=a;if(a.type===\"string\"){var o=a.parent;if(o&&o.type===\"property\"&&o.keyNode===a&&(a=o.valueNode,!a))return this.promise.resolve(null)}for(var f=U.create(r.positionAt(s.offset),r.positionAt(s.offset+s.length)),l=function(m){var p={contents:m,range:f};return p},u=Je(a),c=this.contributions.length-1;c>=0;c--){var h=this.contributions[c],d=h.getInfoContribution(r.uri,u);if(d)return d.then(function(m){return l(m)})}return this.schemaService.getSchemaForResource(r.uri,e).then(function(m){if(m&&a){var p=e.getMatchingSchemas(m.schema,a.offset),g=void 0,b=void 0,y=void 0,v=void 0;p.every(function(E){if(E.node===a&&!E.inverted&&E.schema&&(g=g||E.schema.title,b=b||E.schema.markdownDescription||Wt(E.schema.description),E.schema.enum)){var I=E.schema.enum.indexOf(de(a));E.schema.markdownEnumDescriptions?y=E.schema.markdownEnumDescriptions[I]:E.schema.enumDescriptions&&(y=Wt(E.schema.enumDescriptions[I])),y&&(v=E.schema.enum[I],typeof v!=\"string\"&&(v=JSON.stringify(v)))}return!0});var O=\"\";return g&&(O=Wt(g)),b&&(O.length>0&&(O+=`\n\n`),O+=b),y&&(O.length>0&&(O+=`\n\n`),O+=\"`\".concat(wn(v),\"`: \").concat(y)),l([O])}return null})},t}();function Wt(t){if(t){var r=t.replace(/([^\\n\\r])(\\r?\\n)([^\\n\\r])/gm,`$1\n\n$3`);return r.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g,\"\\\\$&\")}}function wn(t){return t.indexOf(\"`\")!==-1?\"`` \"+t+\" ``\":t}var Tn=he(),jr=function(){function t(r,i){this.jsonSchemaService=r,this.promise=i,this.validationEnabled=!0}return t.prototype.configure=function(r){r&&(this.validationEnabled=r.validate!==!1,this.commentSeverity=r.allowComments?void 0:Z.Error)},t.prototype.doValidation=function(r,i,e,n){var a=this;if(!this.validationEnabled)return this.promise.resolve([]);var s=[],o={},f=function(h){var d=h.range.start.line+\" \"+h.range.start.character+\" \"+h.message;o[d]||(o[d]=!0,s.push(h))},l=function(h){var d=e?.trailingCommas?rt(e.trailingCommas):Z.Error,m=e?.comments?rt(e.comments):a.commentSeverity,p=e?.schemaValidation?rt(e.schemaValidation):Z.Warning,g=e?.schemaRequest?rt(e.schemaRequest):Z.Warning;if(h){if(h.errors.length&&i.root&&g){var b=i.root,y=b.type===\"object\"?b.properties[0]:void 0;if(y&&y.keyNode.value===\"$schema\"){var v=y.valueNode||y,O=U.create(r.positionAt(v.offset),r.positionAt(v.offset+v.length));f(ae.create(O,h.errors[0],g,W.SchemaResolveError))}else{var O=U.create(r.positionAt(b.offset),r.positionAt(b.offset+1));f(ae.create(O,h.errors[0],g,W.SchemaResolveError))}}else if(p){var E=i.validate(r,h.schema,p);E&&E.forEach(f)}Er(h.schema)&&(m=void 0),Ir(h.schema)&&(d=void 0)}for(var I=0,A=i.syntaxErrors;I<A.length;I++){var P=A[I];if(P.code===W.TrailingComma){if(typeof d!=\"number\")continue;P.severity=d}f(P)}if(typeof m==\"number\"){var w=Tn(\"InvalidCommentToken\",\"Comments are not permitted in JSON.\");i.comments.forEach(function(C){f(ae.create(C,w,m,W.CommentNotPermitted))})}return s};if(n){var u=n.id||\"schemaservice://untitled/\"+kn++,c=this.jsonSchemaService.registerExternalSchema(u,[],n);return c.getResolvedSchema().then(function(h){return l(h)})}return this.jsonSchemaService.getSchemaForResource(r.uri,i).then(function(h){return l(h)})},t.prototype.getLanguageStatus=function(r,i){return{schemas:this.jsonSchemaService.getSchemaURIsForResource(r.uri,i)}},t}();var kn=0;function Er(t){if(t&&typeof t==\"object\"){if(ie(t.allowComments))return t.allowComments;if(t.allOf)for(var r=0,i=t.allOf;r<i.length;r++){var e=i[r],n=Er(e);if(ie(n))return n}}}function Ir(t){if(t&&typeof t==\"object\"){if(ie(t.allowTrailingCommas))return t.allowTrailingCommas;var r=t;if(ie(r.allowsTrailingCommas))return r.allowsTrailingCommas;if(t.allOf)for(var i=0,e=t.allOf;i<e.length;i++){var n=e[i],a=Ir(n);if(ie(a))return a}}}function rt(t){switch(t){case\"error\":return Z.Error;case\"warning\":return Z.Warning;case\"ignore\":return}}var Nr=48,On=57,Cn=65,nt=97,Pn=102;function B(t){return t<Nr?0:t<=On?t-Nr:(t<nt&&(t+=nt-Cn),t>=nt&&t<=Pn?t-nt+10:0)}function Mr(t){if(t[0]===\"#\")switch(t.length){case 4:return{red:B(t.charCodeAt(1))*17/255,green:B(t.charCodeAt(2))*17/255,blue:B(t.charCodeAt(3))*17/255,alpha:1};case 5:return{red:B(t.charCodeAt(1))*17/255,green:B(t.charCodeAt(2))*17/255,blue:B(t.charCodeAt(3))*17/255,alpha:B(t.charCodeAt(4))*17/255};case 7:return{red:(B(t.charCodeAt(1))*16+B(t.charCodeAt(2)))/255,green:(B(t.charCodeAt(3))*16+B(t.charCodeAt(4)))/255,blue:(B(t.charCodeAt(5))*16+B(t.charCodeAt(6)))/255,alpha:1};case 9:return{red:(B(t.charCodeAt(1))*16+B(t.charCodeAt(2)))/255,green:(B(t.charCodeAt(3))*16+B(t.charCodeAt(4)))/255,blue:(B(t.charCodeAt(5))*16+B(t.charCodeAt(6)))/255,alpha:(B(t.charCodeAt(7))*16+B(t.charCodeAt(8)))/255}}}var Fr=function(){function t(r){this.schemaService=r}return t.prototype.findDocumentSymbols=function(r,i,e){var n=this;e===void 0&&(e={resultLimit:Number.MAX_VALUE});var a=i.root;if(!a)return[];var s=e.resultLimit||Number.MAX_VALUE,o=r.uri;if((o===\"vscode://defaultsettings/keybindings.json\"||pe(o.toLowerCase(),\"/user/keybindings.json\"))&&a.type===\"array\"){for(var f=[],l=0,u=a.items;l<u.length;l++){var c=u[l];if(c.type===\"object\")for(var h=0,d=c.properties;h<d.length;h++){var m=d[h];if(m.keyNode.value===\"key\"&&m.valueNode){var p=Se.create(r.uri,ve(r,c));if(f.push({name:de(m.valueNode),kind:oe.Function,location:p}),s--,s<=0)return e&&e.onResultLimitExceeded&&e.onResultLimitExceeded(o),f}}}return f}for(var g=[{node:a,containerName:\"\"}],b=0,y=!1,v=[],O=function(I,A){I.type===\"array\"?I.items.forEach(function(P){P&&g.push({node:P,containerName:A})}):I.type===\"object\"&&I.properties.forEach(function(P){var w=P.valueNode;if(w)if(s>0){s--;var C=Se.create(r.uri,ve(r,P)),F=A?A+\".\"+P.keyNode.value:P.keyNode.value;v.push({name:n.getKeyLabel(P),kind:n.getSymbolKind(w.type),location:C,containerName:A}),g.push({node:w,containerName:F})}else y=!0})};b<g.length;){var E=g[b++];O(E.node,E.containerName)}return y&&e&&e.onResultLimitExceeded&&e.onResultLimitExceeded(o),v},t.prototype.findDocumentSymbols2=function(r,i,e){var n=this;e===void 0&&(e={resultLimit:Number.MAX_VALUE});var a=i.root;if(!a)return[];var s=e.resultLimit||Number.MAX_VALUE,o=r.uri;if((o===\"vscode://defaultsettings/keybindings.json\"||pe(o.toLowerCase(),\"/user/keybindings.json\"))&&a.type===\"array\"){for(var f=[],l=0,u=a.items;l<u.length;l++){var c=u[l];if(c.type===\"object\")for(var h=0,d=c.properties;h<d.length;h++){var m=d[h];if(m.keyNode.value===\"key\"&&m.valueNode){var p=ve(r,c),g=ve(r,m.keyNode);if(f.push({name:de(m.valueNode),kind:oe.Function,range:p,selectionRange:g}),s--,s<=0)return e&&e.onResultLimitExceeded&&e.onResultLimitExceeded(o),f}}}return f}for(var b=[],y=[{node:a,result:b}],v=0,O=!1,E=function(A,P){A.type===\"array\"?A.items.forEach(function(w,C){if(w)if(s>0){s--;var F=ve(r,w),N=F,L=String(C),R={name:L,kind:n.getSymbolKind(w.type),range:F,selectionRange:N,children:[]};P.push(R),y.push({result:R.children,node:w})}else O=!0}):A.type===\"object\"&&A.properties.forEach(function(w){var C=w.valueNode;if(C)if(s>0){s--;var F=ve(r,w),N=ve(r,w.keyNode),L=[],R={name:n.getKeyLabel(w),kind:n.getSymbolKind(C.type),range:F,selectionRange:N,children:L,detail:n.getDetail(C)};P.push(R),y.push({result:L,node:C})}else O=!0})};v<y.length;){var I=y[v++];E(I.node,I.result)}return O&&e&&e.onResultLimitExceeded&&e.onResultLimitExceeded(o),b},t.prototype.getSymbolKind=function(r){switch(r){case\"object\":return oe.Module;case\"string\":return oe.String;case\"number\":return oe.Number;case\"array\":return oe.Array;case\"boolean\":return oe.Boolean;default:return oe.Variable}},t.prototype.getKeyLabel=function(r){var i=r.keyNode.value;return i&&(i=i.replace(/[\\n]/g,\"\\u21B5\")),i&&i.trim()?i:'\"'.concat(i,'\"')},t.prototype.getDetail=function(r){if(r){if(r.type===\"boolean\"||r.type===\"number\"||r.type===\"null\"||r.type===\"string\")return String(r.value);if(r.type===\"array\")return r.children.length?void 0:\"[]\";if(r.type===\"object\")return r.children.length?void 0:\"{}\"}},t.prototype.findDocumentColors=function(r,i,e){return this.schemaService.getSchemaForResource(r.uri,i).then(function(n){var a=[];if(n)for(var s=e&&typeof e.resultLimit==\"number\"?e.resultLimit:Number.MAX_VALUE,o=i.getMatchingSchemas(n.schema),f={},l=0,u=o;l<u.length;l++){var c=u[l];if(!c.inverted&&c.schema&&(c.schema.format===\"color\"||c.schema.format===\"color-hex\")&&c.node&&c.node.type===\"string\"){var h=String(c.node.offset);if(!f[h]){var d=Mr(de(c.node));if(d){var m=ve(r,c.node);a.push({color:d,range:m})}if(f[h]=!0,s--,s<=0)return e&&e.onResultLimitExceeded&&e.onResultLimitExceeded(r.uri),a}}}return a})},t.prototype.getColorPresentations=function(r,i,e,n){var a=[],s=Math.round(e.red*255),o=Math.round(e.green*255),f=Math.round(e.blue*255);function l(c){var h=c.toString(16);return h.length!==2?\"0\"+h:h}var u;return e.alpha===1?u=\"#\".concat(l(s)).concat(l(o)).concat(l(f)):u=\"#\".concat(l(s)).concat(l(o)).concat(l(f)).concat(l(Math.round(e.alpha*255))),a.push({label:u,textEdit:Y.replace(n,JSON.stringify(u))}),a},t}();function ve(t,r){return U.create(t.positionAt(r.offset),t.positionAt(r.offset+r.length))}var D=he(),ot={schemaAssociations:[],schemas:{\"http://json-schema.org/schema#\":{$ref:\"http://json-schema.org/draft-07/schema#\"},\"http://json-schema.org/draft-04/schema#\":{$schema:\"http://json-schema.org/draft-04/schema#\",definitions:{schemaArray:{type:\"array\",minItems:1,items:{$ref:\"#\"}},positiveInteger:{type:\"integer\",minimum:0},positiveIntegerDefault0:{allOf:[{$ref:\"#/definitions/positiveInteger\"},{default:0}]},simpleTypes:{type:\"string\",enum:[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},stringArray:{type:\"array\",items:{type:\"string\"},minItems:1,uniqueItems:!0}},type:\"object\",properties:{id:{type:\"string\",format:\"uri\"},$schema:{type:\"string\",format:\"uri\"},title:{type:\"string\"},description:{type:\"string\"},default:{},multipleOf:{type:\"number\",minimum:0,exclusiveMinimum:!0},maximum:{type:\"number\"},exclusiveMaximum:{type:\"boolean\",default:!1},minimum:{type:\"number\"},exclusiveMinimum:{type:\"boolean\",default:!1},maxLength:{allOf:[{$ref:\"#/definitions/positiveInteger\"}]},minLength:{allOf:[{$ref:\"#/definitions/positiveIntegerDefault0\"}]},pattern:{type:\"string\",format:\"regex\"},additionalItems:{anyOf:[{type:\"boolean\"},{$ref:\"#\"}],default:{}},items:{anyOf:[{$ref:\"#\"},{$ref:\"#/definitions/schemaArray\"}],default:{}},maxItems:{allOf:[{$ref:\"#/definitions/positiveInteger\"}]},minItems:{allOf:[{$ref:\"#/definitions/positiveIntegerDefault0\"}]},uniqueItems:{type:\"boolean\",default:!1},maxProperties:{allOf:[{$ref:\"#/definitions/positiveInteger\"}]},minProperties:{allOf:[{$ref:\"#/definitions/positiveIntegerDefault0\"}]},required:{allOf:[{$ref:\"#/definitions/stringArray\"}]},additionalProperties:{anyOf:[{type:\"boolean\"},{$ref:\"#\"}],default:{}},definitions:{type:\"object\",additionalProperties:{$ref:\"#\"},default:{}},properties:{type:\"object\",additionalProperties:{$ref:\"#\"},default:{}},patternProperties:{type:\"object\",additionalProperties:{$ref:\"#\"},default:{}},dependencies:{type:\"object\",additionalProperties:{anyOf:[{$ref:\"#\"},{$ref:\"#/definitions/stringArray\"}]}},enum:{type:\"array\",minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:\"#/definitions/simpleTypes\"},{type:\"array\",items:{$ref:\"#/definitions/simpleTypes\"},minItems:1,uniqueItems:!0}]},format:{anyOf:[{type:\"string\",enum:[\"date-time\",\"uri\",\"email\",\"hostname\",\"ipv4\",\"ipv6\",\"regex\"]},{type:\"string\"}]},allOf:{allOf:[{$ref:\"#/definitions/schemaArray\"}]},anyOf:{allOf:[{$ref:\"#/definitions/schemaArray\"}]},oneOf:{allOf:[{$ref:\"#/definitions/schemaArray\"}]},not:{allOf:[{$ref:\"#\"}]}},dependencies:{exclusiveMaximum:[\"maximum\"],exclusiveMinimum:[\"minimum\"]},default:{}},\"http://json-schema.org/draft-07/schema#\":{definitions:{schemaArray:{type:\"array\",minItems:1,items:{$ref:\"#\"}},nonNegativeInteger:{type:\"integer\",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:\"#/definitions/nonNegativeInteger\"},{default:0}]},simpleTypes:{enum:[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},stringArray:{type:\"array\",items:{type:\"string\"},uniqueItems:!0,default:[]}},type:[\"object\",\"boolean\"],properties:{$id:{type:\"string\",format:\"uri-reference\"},$schema:{type:\"string\",format:\"uri\"},$ref:{type:\"string\",format:\"uri-reference\"},$comment:{type:\"string\"},title:{type:\"string\"},description:{type:\"string\"},default:!0,readOnly:{type:\"boolean\",default:!1},examples:{type:\"array\",items:!0},multipleOf:{type:\"number\",exclusiveMinimum:0},maximum:{type:\"number\"},exclusiveMaximum:{type:\"number\"},minimum:{type:\"number\"},exclusiveMinimum:{type:\"number\"},maxLength:{$ref:\"#/definitions/nonNegativeInteger\"},minLength:{$ref:\"#/definitions/nonNegativeIntegerDefault0\"},pattern:{type:\"string\",format:\"regex\"},additionalItems:{$ref:\"#\"},items:{anyOf:[{$ref:\"#\"},{$ref:\"#/definitions/schemaArray\"}],default:!0},maxItems:{$ref:\"#/definitions/nonNegativeInteger\"},minItems:{$ref:\"#/definitions/nonNegativeIntegerDefault0\"},uniqueItems:{type:\"boolean\",default:!1},contains:{$ref:\"#\"},maxProperties:{$ref:\"#/definitions/nonNegativeInteger\"},minProperties:{$ref:\"#/definitions/nonNegativeIntegerDefault0\"},required:{$ref:\"#/definitions/stringArray\"},additionalProperties:{$ref:\"#\"},definitions:{type:\"object\",additionalProperties:{$ref:\"#\"},default:{}},properties:{type:\"object\",additionalProperties:{$ref:\"#\"},default:{}},patternProperties:{type:\"object\",additionalProperties:{$ref:\"#\"},propertyNames:{format:\"regex\"},default:{}},dependencies:{type:\"object\",additionalProperties:{anyOf:[{$ref:\"#\"},{$ref:\"#/definitions/stringArray\"}]}},propertyNames:{$ref:\"#\"},const:!0,enum:{type:\"array\",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:\"#/definitions/simpleTypes\"},{type:\"array\",items:{$ref:\"#/definitions/simpleTypes\"},minItems:1,uniqueItems:!0}]},format:{type:\"string\"},contentMediaType:{type:\"string\"},contentEncoding:{type:\"string\"},if:{$ref:\"#\"},then:{$ref:\"#\"},else:{$ref:\"#\"},allOf:{$ref:\"#/definitions/schemaArray\"},anyOf:{$ref:\"#/definitions/schemaArray\"},oneOf:{$ref:\"#/definitions/schemaArray\"},not:{$ref:\"#\"}},default:!0}}},jn={id:D(\"schema.json.id\",\"A unique identifier for the schema.\"),$schema:D(\"schema.json.$schema\",\"The schema to verify this document against.\"),title:D(\"schema.json.title\",\"A descriptive title of the element.\"),description:D(\"schema.json.description\",\"A long description of the element. Used in hover menus and suggestions.\"),default:D(\"schema.json.default\",\"A default value. Used by suggestions.\"),multipleOf:D(\"schema.json.multipleOf\",\"A number that should cleanly divide the current value (i.e. have no remainder).\"),maximum:D(\"schema.json.maximum\",\"The maximum numerical value, inclusive by default.\"),exclusiveMaximum:D(\"schema.json.exclusiveMaximum\",\"Makes the maximum property exclusive.\"),minimum:D(\"schema.json.minimum\",\"The minimum numerical value, inclusive by default.\"),exclusiveMinimum:D(\"schema.json.exclusiveMininum\",\"Makes the minimum property exclusive.\"),maxLength:D(\"schema.json.maxLength\",\"The maximum length of a string.\"),minLength:D(\"schema.json.minLength\",\"The minimum length of a string.\"),pattern:D(\"schema.json.pattern\",\"A regular expression to match the string against. It is not implicitly anchored.\"),additionalItems:D(\"schema.json.additionalItems\",\"For arrays, only when items is set as an array. If it is a schema, then this schema validates items after the ones specified by the items array. If it is false, then additional items will cause validation to fail.\"),items:D(\"schema.json.items\",\"For arrays. Can either be a schema to validate every element against or an array of schemas to validate each item against in order (the first schema will validate the first element, the second schema will validate the second element, and so on.\"),maxItems:D(\"schema.json.maxItems\",\"The maximum number of items that can be inside an array. Inclusive.\"),minItems:D(\"schema.json.minItems\",\"The minimum number of items that can be inside an array. Inclusive.\"),uniqueItems:D(\"schema.json.uniqueItems\",\"If all of the items in the array must be unique. Defaults to false.\"),maxProperties:D(\"schema.json.maxProperties\",\"The maximum number of properties an object can have. Inclusive.\"),minProperties:D(\"schema.json.minProperties\",\"The minimum number of properties an object can have. Inclusive.\"),required:D(\"schema.json.required\",\"An array of strings that lists the names of all properties required on this object.\"),additionalProperties:D(\"schema.json.additionalProperties\",\"Either a schema or a boolean. If a schema, then used to validate all properties not matched by 'properties' or 'patternProperties'. If false, then any properties not matched by either will cause this schema to fail.\"),definitions:D(\"schema.json.definitions\",\"Not used for validation. Place subschemas here that you wish to reference inline with $ref.\"),properties:D(\"schema.json.properties\",\"A map of property names to schemas for each property.\"),patternProperties:D(\"schema.json.patternProperties\",\"A map of regular expressions on property names to schemas for matching properties.\"),dependencies:D(\"schema.json.dependencies\",\"A map of property names to either an array of property names or a schema. An array of property names means the property named in the key depends on the properties in the array being present in the object in order to be valid. If the value is a schema, then the schema is only applied to the object if the property in the key exists on the object.\"),enum:D(\"schema.json.enum\",\"The set of literal values that are valid.\"),type:D(\"schema.json.type\",\"Either a string of one of the basic schema types (number, integer, null, array, object, boolean, string) or an array of strings specifying a subset of those types.\"),format:D(\"schema.json.format\",\"Describes the format expected for the value.\"),allOf:D(\"schema.json.allOf\",\"An array of schemas, all of which must match.\"),anyOf:D(\"schema.json.anyOf\",\"An array of schemas, where at least one must match.\"),oneOf:D(\"schema.json.oneOf\",\"An array of schemas, exactly one of which must match.\"),not:D(\"schema.json.not\",\"A schema which must not match.\"),$id:D(\"schema.json.$id\",\"A unique identifier for the schema.\"),$ref:D(\"schema.json.$ref\",\"Reference a definition hosted on any location.\"),$comment:D(\"schema.json.$comment\",\"Comments from schema authors to readers or maintainers of the schema.\"),readOnly:D(\"schema.json.readOnly\",\"Indicates that the value of the instance is managed exclusively by the owning authority.\"),examples:D(\"schema.json.examples\",\"Sample JSON values associated with a particular schema, for the purpose of illustrating usage.\"),contains:D(\"schema.json.contains\",'An array instance is valid against \"contains\" if at least one of its elements is valid against the given schema.'),propertyNames:D(\"schema.json.propertyNames\",\"If the instance is an object, this keyword validates if every property name in the instance validates against the provided schema.\"),const:D(\"schema.json.const\",\"An instance validates successfully against this keyword if its value is equal to the value of the keyword.\"),contentMediaType:D(\"schema.json.contentMediaType\",\"Describes the media type of a string property.\"),contentEncoding:D(\"schema.json.contentEncoding\",\"Describes the content encoding of a string property.\"),if:D(\"schema.json.if\",'The validation outcome of the \"if\" subschema controls which of the \"then\" or \"else\" keywords are evaluated.'),then:D(\"schema.json.then\",'The \"if\" subschema is used for validation when the \"if\" subschema succeeds.'),else:D(\"schema.json.else\",'The \"else\" subschema is used for validation when the \"if\" subschema fails.')};for(Lr in ot.schemas){it=ot.schemas[Lr];for(Ne in it.properties)at=it.properties[Ne],typeof at==\"boolean\"&&(at=it.properties[Ne]={}),Jt=jn[Ne],Jt?at.description=Jt:console.log(\"\".concat(Ne,\": localize('schema.json.\").concat(Ne,`', \"\")`))}var it,at,Jt,Ne,Lr;var Vr;Vr=(()=>{\"use strict\";var t={470:e=>{function n(o){if(typeof o!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(o))}function a(o,f){for(var l,u=\"\",c=0,h=-1,d=0,m=0;m<=o.length;++m){if(m<o.length)l=o.charCodeAt(m);else{if(l===47)break;l=47}if(l===47){if(!(h===m-1||d===1))if(h!==m-1&&d===2){if(u.length<2||c!==2||u.charCodeAt(u.length-1)!==46||u.charCodeAt(u.length-2)!==46){if(u.length>2){var p=u.lastIndexOf(\"/\");if(p!==u.length-1){p===-1?(u=\"\",c=0):c=(u=u.slice(0,p)).length-1-u.lastIndexOf(\"/\"),h=m,d=0;continue}}else if(u.length===2||u.length===1){u=\"\",c=0,h=m,d=0;continue}}f&&(u.length>0?u+=\"/..\":u=\"..\",c=2)}else u.length>0?u+=\"/\"+o.slice(h+1,m):u=o.slice(h+1,m),c=m-h-1;h=m,d=0}else l===46&&d!==-1?++d:d=-1}return u}var s={resolve:function(){for(var o,f=\"\",l=!1,u=arguments.length-1;u>=-1&&!l;u--){var c;u>=0?c=arguments[u]:(o===void 0&&(o=process.cwd()),c=o),n(c),c.length!==0&&(f=c+\"/\"+f,l=c.charCodeAt(0)===47)}return f=a(f,!l),l?f.length>0?\"/\"+f:\"/\":f.length>0?f:\".\"},normalize:function(o){if(n(o),o.length===0)return\".\";var f=o.charCodeAt(0)===47,l=o.charCodeAt(o.length-1)===47;return(o=a(o,!f)).length!==0||f||(o=\".\"),o.length>0&&l&&(o+=\"/\"),f?\"/\"+o:o},isAbsolute:function(o){return n(o),o.length>0&&o.charCodeAt(0)===47},join:function(){if(arguments.length===0)return\".\";for(var o,f=0;f<arguments.length;++f){var l=arguments[f];n(l),l.length>0&&(o===void 0?o=l:o+=\"/\"+l)}return o===void 0?\".\":s.normalize(o)},relative:function(o,f){if(n(o),n(f),o===f||(o=s.resolve(o))===(f=s.resolve(f)))return\"\";for(var l=1;l<o.length&&o.charCodeAt(l)===47;++l);for(var u=o.length,c=u-l,h=1;h<f.length&&f.charCodeAt(h)===47;++h);for(var d=f.length-h,m=c<d?c:d,p=-1,g=0;g<=m;++g){if(g===m){if(d>m){if(f.charCodeAt(h+g)===47)return f.slice(h+g+1);if(g===0)return f.slice(h+g)}else c>m&&(o.charCodeAt(l+g)===47?p=g:g===0&&(p=0));break}var b=o.charCodeAt(l+g);if(b!==f.charCodeAt(h+g))break;b===47&&(p=g)}var y=\"\";for(g=l+p+1;g<=u;++g)g!==u&&o.charCodeAt(g)!==47||(y.length===0?y+=\"..\":y+=\"/..\");return y.length>0?y+f.slice(h+p):(h+=p,f.charCodeAt(h)===47&&++h,f.slice(h))},_makeLong:function(o){return o},dirname:function(o){if(n(o),o.length===0)return\".\";for(var f=o.charCodeAt(0),l=f===47,u=-1,c=!0,h=o.length-1;h>=1;--h)if((f=o.charCodeAt(h))===47){if(!c){u=h;break}}else c=!1;return u===-1?l?\"/\":\".\":l&&u===1?\"//\":o.slice(0,u)},basename:function(o,f){if(f!==void 0&&typeof f!=\"string\")throw new TypeError('\"ext\" argument must be a string');n(o);var l,u=0,c=-1,h=!0;if(f!==void 0&&f.length>0&&f.length<=o.length){if(f.length===o.length&&f===o)return\"\";var d=f.length-1,m=-1;for(l=o.length-1;l>=0;--l){var p=o.charCodeAt(l);if(p===47){if(!h){u=l+1;break}}else m===-1&&(h=!1,m=l+1),d>=0&&(p===f.charCodeAt(d)?--d==-1&&(c=l):(d=-1,c=m))}return u===c?c=m:c===-1&&(c=o.length),o.slice(u,c)}for(l=o.length-1;l>=0;--l)if(o.charCodeAt(l)===47){if(!h){u=l+1;break}}else c===-1&&(h=!1,c=l+1);return c===-1?\"\":o.slice(u,c)},extname:function(o){n(o);for(var f=-1,l=0,u=-1,c=!0,h=0,d=o.length-1;d>=0;--d){var m=o.charCodeAt(d);if(m!==47)u===-1&&(c=!1,u=d+1),m===46?f===-1?f=d:h!==1&&(h=1):f!==-1&&(h=-1);else if(!c){l=d+1;break}}return f===-1||u===-1||h===0||h===1&&f===u-1&&f===l+1?\"\":o.slice(f,u)},format:function(o){if(o===null||typeof o!=\"object\")throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof o);return function(f,l){var u=l.dir||l.root,c=l.base||(l.name||\"\")+(l.ext||\"\");return u?u===l.root?u+c:u+\"/\"+c:c}(0,o)},parse:function(o){n(o);var f={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(o.length===0)return f;var l,u=o.charCodeAt(0),c=u===47;c?(f.root=\"/\",l=1):l=0;for(var h=-1,d=0,m=-1,p=!0,g=o.length-1,b=0;g>=l;--g)if((u=o.charCodeAt(g))!==47)m===-1&&(p=!1,m=g+1),u===46?h===-1?h=g:b!==1&&(b=1):h!==-1&&(b=-1);else if(!p){d=g+1;break}return h===-1||m===-1||b===0||b===1&&h===m-1&&h===d+1?m!==-1&&(f.base=f.name=d===0&&c?o.slice(1,m):o.slice(d,m)):(d===0&&c?(f.name=o.slice(1,h),f.base=o.slice(1,m)):(f.name=o.slice(d,h),f.base=o.slice(d,m)),f.ext=o.slice(h,m)),d>0?f.dir=o.slice(0,d-1):c&&(f.dir=\"/\"),f},sep:\"/\",delimiter:\":\",win32:null,posix:null};s.posix=s,e.exports=s},447:(e,n,a)=>{var s;if(a.r(n),a.d(n,{URI:()=>y,Utils:()=>L}),typeof process==\"object\")s=process.platform===\"win32\";else if(typeof navigator==\"object\"){var o=navigator.userAgent;s=o.indexOf(\"Windows\")>=0}var f,l,u=(f=function(T,S){return(f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(k,j){k.__proto__=j}||function(k,j){for(var V in j)Object.prototype.hasOwnProperty.call(j,V)&&(k[V]=j[V])})(T,S)},function(T,S){if(typeof S!=\"function\"&&S!==null)throw new TypeError(\"Class extends value \"+String(S)+\" is not a constructor or null\");function k(){this.constructor=T}f(T,S),T.prototype=S===null?Object.create(S):(k.prototype=S.prototype,new k)}),c=/^\\w[\\w\\d+.-]*$/,h=/^\\//,d=/^\\/\\//;function m(T,S){if(!T.scheme&&S)throw new Error('[UriError]: Scheme is missing: {scheme: \"\", authority: \"'.concat(T.authority,'\", path: \"').concat(T.path,'\", query: \"').concat(T.query,'\", fragment: \"').concat(T.fragment,'\"}'));if(T.scheme&&!c.test(T.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(T.path){if(T.authority){if(!h.test(T.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(d.test(T.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}}var p=\"\",g=\"/\",b=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/,y=function(){function T(S,k,j,V,$,J){J===void 0&&(J=!1),typeof S==\"object\"?(this.scheme=S.scheme||p,this.authority=S.authority||p,this.path=S.path||p,this.query=S.query||p,this.fragment=S.fragment||p):(this.scheme=function(ue,G){return ue||G?ue:\"file\"}(S,J),this.authority=k||p,this.path=function(ue,G){switch(ue){case\"https\":case\"http\":case\"file\":G?G[0]!==g&&(G=g+G):G=g}return G}(this.scheme,j||p),this.query=V||p,this.fragment=$||p,m(this,J))}return T.isUri=function(S){return S instanceof T||!!S&&typeof S.authority==\"string\"&&typeof S.fragment==\"string\"&&typeof S.path==\"string\"&&typeof S.query==\"string\"&&typeof S.scheme==\"string\"&&typeof S.fsPath==\"string\"&&typeof S.with==\"function\"&&typeof S.toString==\"function\"},Object.defineProperty(T.prototype,\"fsPath\",{get:function(){return P(this,!1)},enumerable:!1,configurable:!0}),T.prototype.with=function(S){if(!S)return this;var k=S.scheme,j=S.authority,V=S.path,$=S.query,J=S.fragment;return k===void 0?k=this.scheme:k===null&&(k=p),j===void 0?j=this.authority:j===null&&(j=p),V===void 0?V=this.path:V===null&&(V=p),$===void 0?$=this.query:$===null&&($=p),J===void 0?J=this.fragment:J===null&&(J=p),k===this.scheme&&j===this.authority&&V===this.path&&$===this.query&&J===this.fragment?this:new O(k,j,V,$,J)},T.parse=function(S,k){k===void 0&&(k=!1);var j=b.exec(S);return j?new O(j[2]||p,N(j[4]||p),N(j[5]||p),N(j[7]||p),N(j[9]||p),k):new O(p,p,p,p,p)},T.file=function(S){var k=p;if(s&&(S=S.replace(/\\\\/g,g)),S[0]===g&&S[1]===g){var j=S.indexOf(g,2);j===-1?(k=S.substring(2),S=g):(k=S.substring(2,j),S=S.substring(j)||g)}return new O(\"file\",k,S,p,p)},T.from=function(S){var k=new O(S.scheme,S.authority,S.path,S.query,S.fragment);return m(k,!0),k},T.prototype.toString=function(S){return S===void 0&&(S=!1),w(this,S)},T.prototype.toJSON=function(){return this},T.revive=function(S){if(S){if(S instanceof T)return S;var k=new O(S);return k._formatted=S.external,k._fsPath=S._sep===v?S.fsPath:null,k}return S},T}(),v=s?1:void 0,O=function(T){function S(){var k=T!==null&&T.apply(this,arguments)||this;return k._formatted=null,k._fsPath=null,k}return u(S,T),Object.defineProperty(S.prototype,\"fsPath\",{get:function(){return this._fsPath||(this._fsPath=P(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),S.prototype.toString=function(k){return k===void 0&&(k=!1),k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)},S.prototype.toJSON=function(){var k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=v),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k},S}(y),E=((l={})[58]=\"%3A\",l[47]=\"%2F\",l[63]=\"%3F\",l[35]=\"%23\",l[91]=\"%5B\",l[93]=\"%5D\",l[64]=\"%40\",l[33]=\"%21\",l[36]=\"%24\",l[38]=\"%26\",l[39]=\"%27\",l[40]=\"%28\",l[41]=\"%29\",l[42]=\"%2A\",l[43]=\"%2B\",l[44]=\"%2C\",l[59]=\"%3B\",l[61]=\"%3D\",l[32]=\"%20\",l);function I(T,S){for(var k=void 0,j=-1,V=0;V<T.length;V++){var $=T.charCodeAt(V);if($>=97&&$<=122||$>=65&&$<=90||$>=48&&$<=57||$===45||$===46||$===95||$===126||S&&$===47)j!==-1&&(k+=encodeURIComponent(T.substring(j,V)),j=-1),k!==void 0&&(k+=T.charAt(V));else{k===void 0&&(k=T.substr(0,V));var J=E[$];J!==void 0?(j!==-1&&(k+=encodeURIComponent(T.substring(j,V)),j=-1),k+=J):j===-1&&(j=V)}}return j!==-1&&(k+=encodeURIComponent(T.substring(j))),k!==void 0?k:T}function A(T){for(var S=void 0,k=0;k<T.length;k++){var j=T.charCodeAt(k);j===35||j===63?(S===void 0&&(S=T.substr(0,k)),S+=E[j]):S!==void 0&&(S+=T[k])}return S!==void 0?S:T}function P(T,S){var k;return k=T.authority&&T.path.length>1&&T.scheme===\"file\"?\"//\".concat(T.authority).concat(T.path):T.path.charCodeAt(0)===47&&(T.path.charCodeAt(1)>=65&&T.path.charCodeAt(1)<=90||T.path.charCodeAt(1)>=97&&T.path.charCodeAt(1)<=122)&&T.path.charCodeAt(2)===58?S?T.path.substr(1):T.path[1].toLowerCase()+T.path.substr(2):T.path,s&&(k=k.replace(/\\//g,\"\\\\\")),k}function w(T,S){var k=S?A:I,j=\"\",V=T.scheme,$=T.authority,J=T.path,ue=T.query,G=T.fragment;if(V&&(j+=V,j+=\":\"),($||V===\"file\")&&(j+=g,j+=g),$){var ne=$.indexOf(\"@\");if(ne!==-1){var ke=$.substr(0,ne);$=$.substr(ne+1),(ne=ke.indexOf(\":\"))===-1?j+=k(ke,!1):(j+=k(ke.substr(0,ne),!1),j+=\":\",j+=k(ke.substr(ne+1),!1)),j+=\"@\"}(ne=($=$.toLowerCase()).indexOf(\":\"))===-1?j+=k($,!1):(j+=k($.substr(0,ne),!1),j+=$.substr(ne))}if(J){if(J.length>=3&&J.charCodeAt(0)===47&&J.charCodeAt(2)===58)(ce=J.charCodeAt(1))>=65&&ce<=90&&(J=\"/\".concat(String.fromCharCode(ce+32),\":\").concat(J.substr(3)));else if(J.length>=2&&J.charCodeAt(1)===58){var ce;(ce=J.charCodeAt(0))>=65&&ce<=90&&(J=\"\".concat(String.fromCharCode(ce+32),\":\").concat(J.substr(2)))}j+=k(J,!0)}return ue&&(j+=\"?\",j+=k(ue,!1)),G&&(j+=\"#\",j+=S?G:I(G,!1)),j}function C(T){try{return decodeURIComponent(T)}catch{return T.length>3?T.substr(0,3)+C(T.substr(3)):T}}var F=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function N(T){return T.match(F)?T.replace(F,function(S){return C(S)}):T}var L,R=a(470),H=function(T,S,k){if(k||arguments.length===2)for(var j,V=0,$=S.length;V<$;V++)!j&&V in S||(j||(j=Array.prototype.slice.call(S,0,V)),j[V]=S[V]);return T.concat(j||Array.prototype.slice.call(S))},q=R.posix||R;(function(T){T.joinPath=function(S){for(var k=[],j=1;j<arguments.length;j++)k[j-1]=arguments[j];return S.with({path:q.join.apply(q,H([S.path],k,!1))})},T.resolvePath=function(S){for(var k=[],j=1;j<arguments.length;j++)k[j-1]=arguments[j];var V=S.path||\"/\";return S.with({path:q.resolve.apply(q,H([V],k,!1))})},T.dirname=function(S){var k=q.dirname(S.path);return k.length===1&&k.charCodeAt(0)===46?S:S.with({path:k})},T.basename=function(S){return q.basename(S.path)},T.extname=function(S){return q.extname(S.path)}})(L||(L={}))}},r={};function i(e){if(r[e])return r[e].exports;var n=r[e]={exports:{}};return t[e](n,n.exports,i),n.exports}return i.d=(e,n)=>{for(var a in n)i.o(n,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:n[a]})},i.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),i.r=e=>{typeof Symbol<\"u\"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},i(447)})();var{URI:ye,Utils:Pi}=Vr;function Dr(t,r){if(typeof t!=\"string\")throw new TypeError(\"Expected a string\");for(var i=String(t),e=\"\",n=r?!!r.extended:!1,a=r?!!r.globstar:!1,s=!1,o=r&&typeof r.flags==\"string\"?r.flags:\"\",f,l=0,u=i.length;l<u;l++)switch(f=i[l],f){case\"/\":case\"$\":case\"^\":case\"+\":case\".\":case\"(\":case\")\":case\"=\":case\"!\":case\"|\":e+=\"\\\\\"+f;break;case\"?\":if(n){e+=\".\";break}case\"[\":case\"]\":if(n){e+=f;break}case\"{\":if(n){s=!0,e+=\"(\";break}case\"}\":if(n){s=!1,e+=\")\";break}case\",\":if(s){e+=\"|\";break}e+=\"\\\\\"+f;break;case\"*\":for(var c=i[l-1],h=1;i[l+1]===\"*\";)h++,l++;var d=i[l+1];if(!a)e+=\".*\";else{var m=h>1&&(c===\"/\"||c===void 0||c===\"{\"||c===\",\")&&(d===\"/\"||d===void 0||d===\",\"||d===\"}\");m?(d===\"/\"?l++:c===\"/\"&&e.endsWith(\"\\\\/\")&&(e=e.substr(0,e.length-2)),e+=\"((?:[^/]*(?:/|$))*)\"):e+=\"([^/]*)\"}break;default:e+=f}return(!o||!~o.indexOf(\"g\"))&&(e=\"^\"+e+\"$\"),new RegExp(e,o)}var ge=he(),En=\"!\",In=\"/\",Nn=function(){function t(r,i){this.globWrappers=[];try{for(var e=0,n=r;e<n.length;e++){var a=n[e],s=a[0]!==En;s||(a=a.substring(1)),a.length>0&&(a[0]===In&&(a=a.substring(1)),this.globWrappers.push({regexp:Dr(\"**/\"+a,{extended:!0,globstar:!0}),include:s}))}this.uris=i}catch{this.globWrappers.length=0,this.uris=[]}}return t.prototype.matchesPattern=function(r){for(var i=!1,e=0,n=this.globWrappers;e<n.length;e++){var a=n[e],s=a.regexp,o=a.include;s.test(r)&&(i=o)}return i},t.prototype.getURIs=function(){return this.uris},t}(),Mn=function(){function t(r,i,e){this.service=r,this.uri=i,this.dependencies=new Set,this.anchors=void 0,e&&(this.unresolvedSchema=this.service.promise.resolve(new qe(e)))}return t.prototype.getUnresolvedSchema=function(){return this.unresolvedSchema||(this.unresolvedSchema=this.service.loadSchema(this.uri)),this.unresolvedSchema},t.prototype.getResolvedSchema=function(){var r=this;return this.resolvedSchema||(this.resolvedSchema=this.getUnresolvedSchema().then(function(i){return r.service.resolveSchemaContent(i,r)})),this.resolvedSchema},t.prototype.clearSchema=function(){var r=!!this.unresolvedSchema;return this.resolvedSchema=void 0,this.unresolvedSchema=void 0,this.dependencies.clear(),this.anchors=void 0,r},t}(),qe=function(){function t(r,i){i===void 0&&(i=[]),this.schema=r,this.errors=i}return t}();var $r=function(){function t(r,i){i===void 0&&(i=[]),this.schema=r,this.errors=i}return t.prototype.getSection=function(r){var i=this.getSectionRecursive(r,this.schema);if(i)return K(i)},t.prototype.getSectionRecursive=function(r,i){if(!i||typeof i==\"boolean\"||r.length===0)return i;var e=r.shift();if(i.properties&&typeof i.properties[e])return this.getSectionRecursive(r,i.properties[e]);if(i.patternProperties)for(var n=0,a=Object.keys(i.patternProperties);n<a.length;n++){var s=a[n],o=xe(s);if(o?.test(e))return this.getSectionRecursive(r,i.patternProperties[s])}else{if(typeof i.additionalProperties==\"object\")return this.getSectionRecursive(r,i.additionalProperties);if(e.match(\"[0-9]+\")){if(Array.isArray(i.items)){var f=parseInt(e,10);if(!isNaN(f)&&i.items[f])return this.getSectionRecursive(r,i.items[f])}else if(i.items)return this.getSectionRecursive(r,i.items)}}},t}();var Rr=function(){function t(r,i,e){this.contextService=i,this.requestService=r,this.promiseConstructor=e||Promise,this.callOnDispose=[],this.contributionSchemas={},this.contributionAssociations=[],this.schemasById={},this.filePatternAssociations=[],this.registeredSchemasIds={}}return t.prototype.getRegisteredSchemaIds=function(r){return Object.keys(this.registeredSchemasIds).filter(function(i){var e=ye.parse(i).scheme;return e!==\"schemaservice\"&&(!r||r(e))})},Object.defineProperty(t.prototype,\"promise\",{get:function(){return this.promiseConstructor},enumerable:!1,configurable:!0}),t.prototype.dispose=function(){for(;this.callOnDispose.length>0;)this.callOnDispose.pop()()},t.prototype.onResourceChange=function(r){var i=this;this.cachedSchemaForResource=void 0;var e=!1;r=be(r);for(var n=[r],a=Object.keys(this.schemasById).map(function(l){return i.schemasById[l]});n.length;)for(var s=n.pop(),o=0;o<a.length;o++){var f=a[o];f&&(f.uri===s||f.dependencies.has(s))&&(f.uri!==s&&n.push(f.uri),f.clearSchema()&&(e=!0),a[o]=void 0)}return e},t.prototype.setSchemaContributions=function(r){if(r.schemas){var i=r.schemas;for(var e in i){var n=be(e);this.contributionSchemas[n]=this.addSchemaHandle(n,i[e])}}if(Array.isArray(r.schemaAssociations))for(var a=r.schemaAssociations,s=0,o=a;s<o.length;s++){var f=o[s],l=f.uris.map(be),u=this.addFilePatternAssociation(f.pattern,l);this.contributionAssociations.push(u)}},t.prototype.addSchemaHandle=function(r,i){var e=new Mn(this,r,i);return this.schemasById[r]=e,e},t.prototype.getOrAddSchemaHandle=function(r,i){return this.schemasById[r]||this.addSchemaHandle(r,i)},t.prototype.addFilePatternAssociation=function(r,i){var e=new Nn(r,i);return this.filePatternAssociations.push(e),e},t.prototype.registerExternalSchema=function(r,i,e){var n=be(r);return this.registeredSchemasIds[n]=!0,this.cachedSchemaForResource=void 0,i&&this.addFilePatternAssociation(i,[n]),e?this.addSchemaHandle(n,e):this.getOrAddSchemaHandle(n)},t.prototype.clearExternalSchemas=function(){this.schemasById={},this.filePatternAssociations=[],this.registeredSchemasIds={},this.cachedSchemaForResource=void 0;for(var r in this.contributionSchemas)this.schemasById[r]=this.contributionSchemas[r],this.registeredSchemasIds[r]=!0;for(var i=0,e=this.contributionAssociations;i<e.length;i++){var n=e[i];this.filePatternAssociations.push(n)}},t.prototype.getResolvedSchema=function(r){var i=be(r),e=this.schemasById[i];return e?e.getResolvedSchema():this.promise.resolve(void 0)},t.prototype.loadSchema=function(r){if(!this.requestService){var i=ge(\"json.schema.norequestservice\",\"Unable to load schema from '{0}'. No schema request service available\",st(r));return this.promise.resolve(new qe({},[i]))}return this.requestService(r).then(function(e){if(!e){var n=ge(\"json.schema.nocontent\",\"Unable to load schema from '{0}': No content.\",st(r));return new qe({},[n])}var a={},s=[];a=Yt(e,s);var o=s.length?[ge(\"json.schema.invalidFormat\",\"Unable to parse content from '{0}': Parse error at offset {1}.\",st(r),s[0].offset)]:[];return new qe(a,o)},function(e){var n=e.toString(),a=e.toString().split(\"Error: \");return a.length>1&&(n=a[1]),pe(n,\".\")&&(n=n.substr(0,n.length-1)),new qe({},[ge(\"json.schema.nocontent\",\"Unable to load schema from '{0}': {1}.\",st(r),n)])})},t.prototype.resolveSchemaContent=function(r,i){var e=this,n=r.errors.slice(0),a=r.schema;if(a.$schema){var s=be(a.$schema);if(s===\"http://json-schema.org/draft-03/schema\")return this.promise.resolve(new $r({},[ge(\"json.schema.draft03.notsupported\",\"Draft-03 schemas are not supported.\")]));s===\"https://json-schema.org/draft/2019-09/schema\"?n.push(ge(\"json.schema.draft201909.notsupported\",\"Draft 2019-09 schemas are not yet fully supported.\")):s===\"https://json-schema.org/draft/2020-12/schema\"&&n.push(ge(\"json.schema.draft202012.notsupported\",\"Draft 2020-12 schemas are not yet fully supported.\"))}var o=this.contextService,f=function(p,g){g=decodeURIComponent(g);var b=p;return g[0]===\"/\"&&(g=g.substring(1)),g.split(\"/\").some(function(y){return y=y.replace(/~1/g,\"/\").replace(/~0/g,\"~\"),b=b[y],!b}),b},l=function(p,g,b){return g.anchors||(g.anchors=m(p)),g.anchors.get(b)},u=function(p,g){for(var b in g)g.hasOwnProperty(b)&&!p.hasOwnProperty(b)&&b!==\"id\"&&b!==\"$id\"&&(p[b]=g[b])},c=function(p,g,b,y){var v;y===void 0||y.length===0?v=g:y.charAt(0)===\"/\"?v=f(g,y):v=l(g,b,y),v?u(p,v):n.push(ge(\"json.schema.invalidid\",\"$ref '{0}' in '{1}' can not be resolved.\",y,b.uri))},h=function(p,g,b,y){o&&!/^[A-Za-z][A-Za-z0-9+\\-.+]*:\\/\\/.*/.test(g)&&(g=o.resolveRelativePath(g,y.uri)),g=be(g);var v=e.getOrAddSchemaHandle(g);return v.getUnresolvedSchema().then(function(O){if(y.dependencies.add(g),O.errors.length){var E=b?g+\"#\"+b:g;n.push(ge(\"json.schema.problemloadingref\",\"Problems loading reference '{0}': {1}\",E,O.errors[0]))}return c(p,O.schema,v,b),d(p,O.schema,v)})},d=function(p,g,b){var y=[];return e.traverseNodes(p,function(v){for(var O=new Set;v.$ref;){var E=v.$ref,I=E.split(\"#\",2);if(delete v.$ref,I[0].length>0){y.push(h(v,I[0],I[1],b));return}else if(!O.has(E)){var A=I[1];c(v,g,b,A),O.add(E)}}}),e.promise.all(y)},m=function(p){var g=new Map;return e.traverseNodes(p,function(b){var y=b.$id||b.id;if(typeof y==\"string\"&&y.charAt(0)===\"#\"){var v=y.substring(1);g.has(v)?n.push(ge(\"json.schema.duplicateid\",\"Duplicate id declaration: '{0}'\",y)):g.set(v,b)}}),g};return d(a,a,i).then(function(p){return new $r(a,n)})},t.prototype.traverseNodes=function(r,i){if(!r||typeof r!=\"object\")return Promise.resolve(null);for(var e=new Set,n=function(){for(var l=[],u=0;u<arguments.length;u++)l[u]=arguments[u];for(var c=0,h=l;c<h.length;c++){var d=h[c];typeof d==\"object\"&&o.push(d)}},a=function(){for(var l=[],u=0;u<arguments.length;u++)l[u]=arguments[u];for(var c=0,h=l;c<h.length;c++){var d=h[c];if(typeof d==\"object\")for(var m in d){var p=m,g=d[p];typeof g==\"object\"&&o.push(g)}}},s=function(){for(var l=[],u=0;u<arguments.length;u++)l[u]=arguments[u];for(var c=0,h=l;c<h.length;c++){var d=h[c];if(Array.isArray(d))for(var m=0,p=d;m<p.length;m++){var g=p[m];typeof g==\"object\"&&o.push(g)}}},o=[r],f=o.pop();f;)e.has(f)||(e.add(f),i(f),n(f.items,f.additionalItems,f.additionalProperties,f.not,f.contains,f.propertyNames,f.if,f.then,f.else),a(f.definitions,f.properties,f.patternProperties,f.dependencies),s(f.anyOf,f.allOf,f.oneOf,f.items)),f=o.pop()},t.prototype.getSchemaFromProperty=function(r,i){var e,n;if(((e=i.root)===null||e===void 0?void 0:e.type)===\"object\")for(var a=0,s=i.root.properties;a<s.length;a++){var o=s[a];if(o.keyNode.value===\"$schema\"&&((n=o.valueNode)===null||n===void 0?void 0:n.type)===\"string\"){var f=o.valueNode.value;return this.contextService&&!/^\\w[\\w\\d+.-]*:/.test(f)&&(f=this.contextService.resolveRelativePath(f,r)),f}}},t.prototype.getAssociatedSchemas=function(r){for(var i=Object.create(null),e=[],n=Ln(r),a=0,s=this.filePatternAssociations;a<s.length;a++){var o=s[a];if(o.matchesPattern(n))for(var f=0,l=o.getURIs();f<l.length;f++){var u=l[f];i[u]||(e.push(u),i[u]=!0)}}return e},t.prototype.getSchemaURIsForResource=function(r,i){var e=i&&this.getSchemaFromProperty(r,i);return e?[e]:this.getAssociatedSchemas(r)},t.prototype.getSchemaForResource=function(r,i){if(i){var e=this.getSchemaFromProperty(r,i);if(e){var n=be(e);return this.getOrAddSchemaHandle(n).getResolvedSchema()}}if(this.cachedSchemaForResource&&this.cachedSchemaForResource.resource===r)return this.cachedSchemaForResource.resolvedSchema;var a=this.getAssociatedSchemas(r),s=a.length>0?this.createCombinedSchema(r,a).getResolvedSchema():this.promise.resolve(void 0);return this.cachedSchemaForResource={resource:r,resolvedSchema:s},s},t.prototype.createCombinedSchema=function(r,i){if(i.length===1)return this.getOrAddSchemaHandle(i[0]);var e=\"schemaservice://combinedSchema/\"+encodeURIComponent(r),n={allOf:i.map(function(a){return{$ref:a}})};return this.addSchemaHandle(e,n)},t.prototype.getMatchingSchemas=function(r,i,e){if(e){var n=e.id||\"schemaservice://untitled/matchingSchemas/\"+Fn++,a=this.addSchemaHandle(n,e);return a.getResolvedSchema().then(function(s){return i.getMatchingSchemas(s.schema).filter(function(o){return!o.inverted})})}return this.getSchemaForResource(r.uri,i).then(function(s){return s?i.getMatchingSchemas(s.schema).filter(function(o){return!o.inverted}):[]})},t}();var Fn=0;function be(t){try{return ye.parse(t).toString(!0)}catch{return t}}function Ln(t){try{return ye.parse(t).with({fragment:null,query:null}).toString(!0)}catch{return t}}function st(t){try{var r=ye.parse(t);if(r.scheme===\"file\")return r.fsPath}catch{}return t}function Ur(t,r){var i=[],e=[],n=[],a=-1,s=le(t.getText(),!1),o=s.scan();function f(C){i.push(C),e.push(n.length)}for(;o!==17;){switch(o){case 1:case 3:{var l=t.positionAt(s.getTokenOffset()).line,u={startLine:l,endLine:l,kind:o===1?\"object\":\"array\"};n.push(u);break}case 2:case 4:{var c=o===2?\"object\":\"array\";if(n.length>0&&n[n.length-1].kind===c){var u=n.pop(),h=t.positionAt(s.getTokenOffset()).line;u&&h>u.startLine+1&&a!==u.startLine&&(u.endLine=h-1,f(u),a=u.startLine)}break}case 13:{var l=t.positionAt(s.getTokenOffset()).line,d=t.positionAt(s.getTokenOffset()+s.getTokenLength()).line;s.getTokenError()===1&&l+1<t.lineCount?s.setPosition(t.offsetAt(re.create(l+1,0))):l<d&&(f({startLine:l,endLine:d,kind:Ae.Comment}),a=l);break}case 12:{var m=t.getText().substr(s.getTokenOffset(),s.getTokenLength()),p=m.match(/^\\/\\/\\s*#(region\\b)|(endregion\\b)/);if(p){var h=t.positionAt(s.getTokenOffset()).line;if(p[1]){var u={startLine:h,endLine:h,kind:Ae.Region};n.push(u)}else{for(var g=n.length-1;g>=0&&n[g].kind!==Ae.Region;)g--;if(g>=0){var u=n[g];n.length=g,h>u.startLine&&a!==u.startLine&&(u.endLine=h,f(u),a=u.startLine)}}}break}}o=s.scan()}var b=r&&r.rangeLimit;if(typeof b!=\"number\"||i.length<=b)return i;r&&r.onRangeLimitExceeded&&r.onRangeLimitExceeded(t.uri);for(var y=[],v=0,O=e;v<O.length;v++){var E=O[v];E<30&&(y[E]=(y[E]||0)+1)}for(var I=0,A=0,g=0;g<y.length;g++){var P=y[g];if(P){if(P+I>b){A=g;break}I+=P}}for(var w=[],g=0;g<i.length;g++){var E=e[g];typeof E==\"number\"&&(E<A||E===A&&I++<b)&&w.push(i[g])}return w}function Wr(t,r,i){function e(o){for(var f=t.offsetAt(o),l=i.getNodeFromOffset(f,!0),u=[];l;){switch(l.type){case\"string\":case\"object\":case\"array\":var c=l.offset+1,h=l.offset+l.length-1;c<h&&f>=c&&f<=h&&u.push(n(c,h)),u.push(n(l.offset,l.offset+l.length));break;case\"number\":case\"boolean\":case\"null\":case\"property\":u.push(n(l.offset,l.offset+l.length));break}if(l.type===\"property\"||l.parent&&l.parent.type===\"array\"){var d=s(l.offset+l.length,5);d!==-1&&u.push(n(l.offset,d))}l=l.parent}for(var m=void 0,p=u.length-1;p>=0;p--)m=Ie.create(u[p],m);return m||(m=Ie.create(U.create(o,o))),m}function n(o,f){return U.create(t.positionAt(o),t.positionAt(f))}var a=le(t.getText(),!0);function s(o,f){a.setPosition(o);var l=a.scan();return l===f?a.getTokenOffset()+a.getTokenLength():-1}return r.map(e)}function Jr(t,r){var i=[];return r.visit(function(e){var n;if(e.type===\"property\"&&e.keyNode.value===\"$ref\"&&((n=e.valueNode)===null||n===void 0?void 0:n.type)===\"string\"){var a=e.valueNode.value,s=Dn(r,a);if(s){var o=t.positionAt(s.offset);i.push({target:\"\".concat(t.uri,\"#\").concat(o.line+1,\",\").concat(o.character+1),range:Vn(t,e.valueNode)})}}return!0}),Promise.resolve(i)}function Vn(t,r){return U.create(t.positionAt(r.offset+1),t.positionAt(r.offset+r.length-1))}function Dn(t,r){var i=$n(r);return i?qt(i,t.root):null}function qt(t,r){if(!r)return null;if(t.length===0)return r;var i=t.shift();if(r&&r.type===\"object\"){var e=r.properties.find(function(s){return s.keyNode.value===i});return e?qt(t,e.valueNode):null}else if(r&&r.type===\"array\"&&i.match(/^(0|[1-9][0-9]*)$/)){var n=Number.parseInt(i),a=r.items[n];return a?qt(t,a):null}return null}function $n(t){return t===\"#\"?[]:t[0]!==\"#\"||t[1]!==\"/\"?null:t.substring(2).split(/\\//).map(Rn)}function Rn(t){return t.replace(/~1/g,\"/\").replace(/~0/g,\"~\")}function qr(t){var r=t.promiseConstructor||Promise,i=new Rr(t.schemaRequestService,t.workspaceContext,r);i.setSchemaContributions(ot);var e=new Cr(i,t.contributions,r,t.clientCapabilities),n=new Pr(i,t.contributions,r),a=new Fr(i),s=new jr(i,r);return{configure:function(o){i.clearExternalSchemas(),o.schemas&&o.schemas.forEach(function(f){i.registerExternalSchema(f.uri,f.fileMatch,f.schema)}),s.configure(o)},resetSchema:function(o){return i.onResourceChange(o)},doValidation:s.doValidation.bind(s),getLanguageStatus:s.getLanguageStatus.bind(s),parseJSONDocument:function(o){return Or(o,{collectComments:!0})},newJSONDocument:function(o,f){return Tr(o,f)},getMatchingSchemas:i.getMatchingSchemas.bind(i),doResolve:e.doResolve.bind(e),doComplete:e.doComplete.bind(e),findDocumentSymbols:a.findDocumentSymbols.bind(a),findDocumentSymbols2:a.findDocumentSymbols2.bind(a),findDocumentColors:a.findDocumentColors.bind(a),getColorPresentations:a.getColorPresentations.bind(a),doHover:n.doHover.bind(n),getFoldingRanges:Ur,getSelectionRanges:Wr,findDefinition:function(){return Promise.resolve([])},findLinks:Jr,format:function(o,f,l){var u=void 0;if(f){var c=o.offsetAt(f.start),h=o.offsetAt(f.end)-c;u={offset:c,length:h}}var d={tabSize:l?l.tabSize:4,insertSpaces:l?.insertSpaces===!0,insertFinalNewline:l?.insertFinalNewline===!0,eol:`\n`};return rr(o.getText(),u,d).map(function(m){return Y.replace(U.create(o.positionAt(m.offset),o.positionAt(m.offset+m.length)),m.content)})}}}var zr;typeof fetch<\"u\"&&(zr=function(t){return fetch(t).then(r=>r.text())});var ft=class{constructor(r,i){this._ctx=r,this._languageSettings=i.languageSettings,this._languageId=i.languageId,this._languageService=qr({workspaceContext:{resolveRelativePath:(e,n)=>{let a=n.substr(0,n.lastIndexOf(\"/\")+1);return qn(a,e)}},schemaRequestService:i.enableSchemaRequest?zr:void 0,clientCapabilities:Ke.LATEST}),this._languageService.configure(this._languageSettings)}async doValidation(r){let i=this._getTextDocument(r);if(i){let e=this._languageService.parseJSONDocument(i);return this._languageService.doValidation(i,e,this._languageSettings)}return Promise.resolve([])}async doComplete(r,i){let e=this._getTextDocument(r);if(!e)return null;let n=this._languageService.parseJSONDocument(e);return this._languageService.doComplete(e,i,n)}async doResolve(r){return this._languageService.doResolve(r)}async doHover(r,i){let e=this._getTextDocument(r);if(!e)return null;let n=this._languageService.parseJSONDocument(e);return this._languageService.doHover(e,i,n)}async format(r,i,e){let n=this._getTextDocument(r);if(!n)return[];let a=this._languageService.format(n,i,e);return Promise.resolve(a)}async resetSchema(r){return Promise.resolve(this._languageService.resetSchema(r))}async findDocumentSymbols(r){let i=this._getTextDocument(r);if(!i)return[];let e=this._languageService.parseJSONDocument(i),n=this._languageService.findDocumentSymbols2(i,e);return Promise.resolve(n)}async findDocumentColors(r){let i=this._getTextDocument(r);if(!i)return[];let e=this._languageService.parseJSONDocument(i),n=this._languageService.findDocumentColors(i,e);return Promise.resolve(n)}async getColorPresentations(r,i,e){let n=this._getTextDocument(r);if(!n)return[];let a=this._languageService.parseJSONDocument(n),s=this._languageService.getColorPresentations(n,a,i,e);return Promise.resolve(s)}async getFoldingRanges(r,i){let e=this._getTextDocument(r);if(!e)return[];let n=this._languageService.getFoldingRanges(e,i);return Promise.resolve(n)}async getSelectionRanges(r,i){let e=this._getTextDocument(r);if(!e)return[];let n=this._languageService.parseJSONDocument(e),a=this._languageService.getSelectionRanges(e,i,n);return Promise.resolve(a)}async parseJSONDocument(r){let i=this._getTextDocument(r);if(!i)return null;let e=this._languageService.parseJSONDocument(i);return Promise.resolve(e)}async getMatchingSchemas(r){let i=this._getTextDocument(r);if(!i)return[];let e=this._languageService.parseJSONDocument(i);return Promise.resolve(this._languageService.getMatchingSchemas(i,e))}_getTextDocument(r){let i=this._ctx.getMirrorModels();for(let e of i)if(e.uri.toString()===r)return Ue.create(r,this._languageId,e.version,e.getValue());return null}},Wn=47,zt=46;function Jn(t){return t.charCodeAt(0)===Wn}function qn(t,r){if(Jn(r)){let i=ye.parse(t),e=r.split(\"/\");return i.with({path:Br(e)}).toString()}return zn(t,r)}function Br(t){let r=[];for(let e of t)e.length===0||e.length===1&&e.charCodeAt(0)===zt||(e.length===2&&e.charCodeAt(0)===zt&&e.charCodeAt(1)===zt?r.pop():r.push(e));t.length>1&&t[t.length-1].length===0&&r.push(\"\");let i=r.join(\"/\");return t[0].length===0&&(i=\"/\"+i),i}function zn(t,...r){let i=ye.parse(t),e=i.path.split(\"/\");for(let n of r)e.push(...n.split(\"/\"));return i.with({path:Br(e)}).toString()}function Bn(t,r){return new ft(t,r)}return Yr(_n);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/typescript/tsMode.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/typescript/tsMode\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var ee=Object.create;var K=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,se=Object.prototype.hasOwnProperty;var B=(s=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(s,{get:(e,t)=>(typeof require<\"u\"?require:e)[t]}):s)(function(s){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+s+'\" is not supported')});var ne=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),oe=(s,e)=>{for(var t in e)K(s,t,{get:e[t],enumerable:!0})},H=(s,e,t,i)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let l of ie(e))!se.call(s,l)&&l!==t&&K(s,l,{get:()=>e[l],enumerable:!(i=te(e,l))||i.enumerable});return s},$=(s,e,t)=>(H(s,e,\"default\"),t&&H(t,e,\"default\")),z=(s,e,t)=>(t=s!=null?ee(re(s)):{},H(e||!s||!s.__esModule?K(t,\"default\",{value:s,enumerable:!0}):t,s)),ae=s=>H(K({},\"__esModule\",{value:!0}),s);var G=ne((he,J)=>{var le=z(B(\"vs/editor/editor.api\"));J.exports=le});var me={};oe(me,{Adapter:()=>k,CodeActionAdaptor:()=>O,DefinitionAdapter:()=>F,DiagnosticsAdapter:()=>T,DocumentHighlightAdapter:()=>D,FormatAdapter:()=>A,FormatHelper:()=>x,FormatOnTypeAdapter:()=>R,InlayHintsAdapter:()=>N,Kind:()=>m,LibFiles:()=>_,OutlineAdapter:()=>M,QuickInfoAdapter:()=>P,ReferenceAdapter:()=>L,RenameAdapter:()=>E,SignatureHelpAdapter:()=>I,SuggestAdapter:()=>C,WorkerManager:()=>v,flattenDiagnosticMessageText:()=>U,getJavaScriptWorker:()=>pe,getTypeScriptWorker:()=>de,setupJavaScript:()=>ge,setupTypeScript:()=>ue});var r={};$(r,z(G()));var v=class{constructor(e,t){this._modeId=e;this._defaults=t;this._worker=null,this._client=null,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker()),this._updateExtraLibsToken=0,this._extraLibsChangeListener=this._defaults.onDidExtraLibsChange(()=>this._updateExtraLibs())}dispose(){this._configChangeListener.dispose(),this._extraLibsChangeListener.dispose(),this._stopWorker()}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}async _updateExtraLibs(){if(!this._worker)return;let e=++this._updateExtraLibsToken,t=await this._worker.getProxy();this._updateExtraLibsToken===e&&t.updateExtraLibs(this._defaults.getExtraLibs())}_getClient(){return this._client||(this._client=(async()=>(this._worker=r.editor.createWebWorker({moduleId:\"vs/language/typescript/tsWorker\",label:this._modeId,keepIdleModels:!0,createData:{compilerOptions:this._defaults.getCompilerOptions(),extraLibs:this._defaults.getExtraLibs(),customWorkerPath:this._defaults.workerOptions.customWorkerPath,inlayHintsOptions:this._defaults.inlayHintsOptions}}),this._defaults.getEagerModelSync()?await this._worker.withSyncedResources(r.editor.getModels().filter(e=>e.getLanguageId()===this._modeId).map(e=>e.uri)):await this._worker.getProxy()))()),this._client}async getLanguageServiceWorker(...e){let t=await this._getClient();return this._worker&&await this._worker.withSyncedResources(e),t}};var q=B(\"./monaco.contribution\");var n={};n[\"lib.d.ts\"]=!0;n[\"lib.decorators.d.ts\"]=!0;n[\"lib.decorators.legacy.d.ts\"]=!0;n[\"lib.dom.d.ts\"]=!0;n[\"lib.dom.iterable.d.ts\"]=!0;n[\"lib.es2015.collection.d.ts\"]=!0;n[\"lib.es2015.core.d.ts\"]=!0;n[\"lib.es2015.d.ts\"]=!0;n[\"lib.es2015.generator.d.ts\"]=!0;n[\"lib.es2015.iterable.d.ts\"]=!0;n[\"lib.es2015.promise.d.ts\"]=!0;n[\"lib.es2015.proxy.d.ts\"]=!0;n[\"lib.es2015.reflect.d.ts\"]=!0;n[\"lib.es2015.symbol.d.ts\"]=!0;n[\"lib.es2015.symbol.wellknown.d.ts\"]=!0;n[\"lib.es2016.array.include.d.ts\"]=!0;n[\"lib.es2016.d.ts\"]=!0;n[\"lib.es2016.full.d.ts\"]=!0;n[\"lib.es2017.d.ts\"]=!0;n[\"lib.es2017.full.d.ts\"]=!0;n[\"lib.es2017.intl.d.ts\"]=!0;n[\"lib.es2017.object.d.ts\"]=!0;n[\"lib.es2017.sharedmemory.d.ts\"]=!0;n[\"lib.es2017.string.d.ts\"]=!0;n[\"lib.es2017.typedarrays.d.ts\"]=!0;n[\"lib.es2018.asyncgenerator.d.ts\"]=!0;n[\"lib.es2018.asynciterable.d.ts\"]=!0;n[\"lib.es2018.d.ts\"]=!0;n[\"lib.es2018.full.d.ts\"]=!0;n[\"lib.es2018.intl.d.ts\"]=!0;n[\"lib.es2018.promise.d.ts\"]=!0;n[\"lib.es2018.regexp.d.ts\"]=!0;n[\"lib.es2019.array.d.ts\"]=!0;n[\"lib.es2019.d.ts\"]=!0;n[\"lib.es2019.full.d.ts\"]=!0;n[\"lib.es2019.intl.d.ts\"]=!0;n[\"lib.es2019.object.d.ts\"]=!0;n[\"lib.es2019.string.d.ts\"]=!0;n[\"lib.es2019.symbol.d.ts\"]=!0;n[\"lib.es2020.bigint.d.ts\"]=!0;n[\"lib.es2020.d.ts\"]=!0;n[\"lib.es2020.date.d.ts\"]=!0;n[\"lib.es2020.full.d.ts\"]=!0;n[\"lib.es2020.intl.d.ts\"]=!0;n[\"lib.es2020.number.d.ts\"]=!0;n[\"lib.es2020.promise.d.ts\"]=!0;n[\"lib.es2020.sharedmemory.d.ts\"]=!0;n[\"lib.es2020.string.d.ts\"]=!0;n[\"lib.es2020.symbol.wellknown.d.ts\"]=!0;n[\"lib.es2021.d.ts\"]=!0;n[\"lib.es2021.full.d.ts\"]=!0;n[\"lib.es2021.intl.d.ts\"]=!0;n[\"lib.es2021.promise.d.ts\"]=!0;n[\"lib.es2021.string.d.ts\"]=!0;n[\"lib.es2021.weakref.d.ts\"]=!0;n[\"lib.es2022.array.d.ts\"]=!0;n[\"lib.es2022.d.ts\"]=!0;n[\"lib.es2022.error.d.ts\"]=!0;n[\"lib.es2022.full.d.ts\"]=!0;n[\"lib.es2022.intl.d.ts\"]=!0;n[\"lib.es2022.object.d.ts\"]=!0;n[\"lib.es2022.regexp.d.ts\"]=!0;n[\"lib.es2022.sharedmemory.d.ts\"]=!0;n[\"lib.es2022.string.d.ts\"]=!0;n[\"lib.es2023.array.d.ts\"]=!0;n[\"lib.es2023.d.ts\"]=!0;n[\"lib.es2023.full.d.ts\"]=!0;n[\"lib.es5.d.ts\"]=!0;n[\"lib.es6.d.ts\"]=!0;n[\"lib.esnext.d.ts\"]=!0;n[\"lib.esnext.full.d.ts\"]=!0;n[\"lib.esnext.intl.d.ts\"]=!0;n[\"lib.scripthost.d.ts\"]=!0;n[\"lib.webworker.d.ts\"]=!0;n[\"lib.webworker.importscripts.d.ts\"]=!0;n[\"lib.webworker.iterable.d.ts\"]=!0;function U(s,e,t=0){if(typeof s==\"string\")return s;if(s===void 0)return\"\";let i=\"\";if(t){i+=e;for(let l=0;l<t;l++)i+=\"  \"}if(i+=s.messageText,t++,s.next)for(let l of s.next)i+=U(l,e,t);return i}function S(s){return s?s.map(e=>e.text).join(\"\"):\"\"}var k=class{constructor(e){this._worker=e}_textSpanToRange(e,t){let i=e.getPositionAt(t.start),l=e.getPositionAt(t.start+t.length),{lineNumber:c,column:u}=i,{lineNumber:g,column:o}=l;return{startLineNumber:c,startColumn:u,endLineNumber:g,endColumn:o}}},_=class{constructor(e){this._worker=e;this._libFiles={},this._hasFetchedLibFiles=!1,this._fetchLibFilesPromise=null}isLibFile(e){return e&&e.path.indexOf(\"/lib.\")===0?!!n[e.path.slice(1)]:!1}getOrCreateModel(e){let t=r.Uri.parse(e),i=r.editor.getModel(t);if(i)return i;if(this.isLibFile(t)&&this._hasFetchedLibFiles)return r.editor.createModel(this._libFiles[t.path.slice(1)],\"typescript\",t);let l=q.typescriptDefaults.getExtraLibs()[e];return l?r.editor.createModel(l.content,\"typescript\",t):null}_containsLibFile(e){for(let t of e)if(this.isLibFile(t))return!0;return!1}async fetchLibFilesIfNecessary(e){this._containsLibFile(e)&&await this._fetchLibFiles()}_fetchLibFiles(){return this._fetchLibFilesPromise||(this._fetchLibFilesPromise=this._worker().then(e=>e.getLibFiles()).then(e=>{this._hasFetchedLibFiles=!0,this._libFiles=e})),this._fetchLibFilesPromise}};var T=class extends k{constructor(t,i,l,c){super(c);this._libFiles=t;this._defaults=i;this._selector=l;this._disposables=[];this._listener=Object.create(null);let u=a=>{if(a.getLanguageId()!==l)return;let d=()=>{let{onlyVisible:y}=this._defaults.getDiagnosticsOptions();y?a.isAttachedToEditor()&&this._doValidate(a):this._doValidate(a)},p,f=a.onDidChangeContent(()=>{clearTimeout(p),p=window.setTimeout(d,500)}),b=a.onDidChangeAttached(()=>{let{onlyVisible:y}=this._defaults.getDiagnosticsOptions();y&&(a.isAttachedToEditor()?d():r.editor.setModelMarkers(a,this._selector,[]))});this._listener[a.uri.toString()]={dispose(){f.dispose(),b.dispose(),clearTimeout(p)}},d()},g=a=>{r.editor.setModelMarkers(a,this._selector,[]);let d=a.uri.toString();this._listener[d]&&(this._listener[d].dispose(),delete this._listener[d])};this._disposables.push(r.editor.onDidCreateModel(a=>u(a))),this._disposables.push(r.editor.onWillDisposeModel(g)),this._disposables.push(r.editor.onDidChangeModelLanguage(a=>{g(a.model),u(a.model)})),this._disposables.push({dispose(){for(let a of r.editor.getModels())g(a)}});let o=()=>{for(let a of r.editor.getModels())g(a),u(a)};this._disposables.push(this._defaults.onDidChange(o)),this._disposables.push(this._defaults.onDidExtraLibsChange(o)),r.editor.getModels().forEach(a=>u(a))}dispose(){this._disposables.forEach(t=>t&&t.dispose()),this._disposables=[]}async _doValidate(t){let i=await this._worker(t.uri);if(t.isDisposed())return;let l=[],{noSyntaxValidation:c,noSemanticValidation:u,noSuggestionDiagnostics:g}=this._defaults.getDiagnosticsOptions();c||l.push(i.getSyntacticDiagnostics(t.uri.toString())),u||l.push(i.getSemanticDiagnostics(t.uri.toString())),g||l.push(i.getSuggestionDiagnostics(t.uri.toString()));let o=await Promise.all(l);if(!o||t.isDisposed())return;let a=o.reduce((p,f)=>f.concat(p),[]).filter(p=>(this._defaults.getDiagnosticsOptions().diagnosticCodesToIgnore||[]).indexOf(p.code)===-1),d=a.map(p=>p.relatedInformation||[]).reduce((p,f)=>f.concat(p),[]).map(p=>p.file?r.Uri.parse(p.file.fileName):null);await this._libFiles.fetchLibFilesIfNecessary(d),!t.isDisposed()&&r.editor.setModelMarkers(t,this._selector,a.map(p=>this._convertDiagnostics(t,p)))}_convertDiagnostics(t,i){let l=i.start||0,c=i.length||1,{lineNumber:u,column:g}=t.getPositionAt(l),{lineNumber:o,column:a}=t.getPositionAt(l+c),d=[];return i.reportsUnnecessary&&d.push(r.MarkerTag.Unnecessary),i.reportsDeprecated&&d.push(r.MarkerTag.Deprecated),{severity:this._tsDiagnosticCategoryToMarkerSeverity(i.category),startLineNumber:u,startColumn:g,endLineNumber:o,endColumn:a,message:U(i.messageText,`\n`),code:i.code.toString(),tags:d,relatedInformation:this._convertRelatedInformation(t,i.relatedInformation)}}_convertRelatedInformation(t,i){if(!i)return[];let l=[];return i.forEach(c=>{let u=t;if(c.file&&(u=this._libFiles.getOrCreateModel(c.file.fileName)),!u)return;let g=c.start||0,o=c.length||1,{lineNumber:a,column:d}=u.getPositionAt(g),{lineNumber:p,column:f}=u.getPositionAt(g+o);l.push({resource:u.uri,startLineNumber:a,startColumn:d,endLineNumber:p,endColumn:f,message:U(c.messageText,`\n`)})}),l}_tsDiagnosticCategoryToMarkerSeverity(t){switch(t){case 1:return r.MarkerSeverity.Error;case 3:return r.MarkerSeverity.Info;case 0:return r.MarkerSeverity.Warning;case 2:return r.MarkerSeverity.Hint}return r.MarkerSeverity.Info}},C=class s extends k{get triggerCharacters(){return[\".\"]}async provideCompletionItems(e,t,i,l){let c=e.getWordUntilPosition(t),u=new r.Range(t.lineNumber,c.startColumn,t.lineNumber,c.endColumn),g=e.uri,o=e.getOffsetAt(t),a=await this._worker(g);if(e.isDisposed())return;let d=await a.getCompletionsAtPosition(g.toString(),o);return!d||e.isDisposed()?void 0:{suggestions:d.entries.map(f=>{let b=u;if(f.replacementSpan){let W=e.getPositionAt(f.replacementSpan.start),w=e.getPositionAt(f.replacementSpan.start+f.replacementSpan.length);b=new r.Range(W.lineNumber,W.column,w.lineNumber,w.column)}let y=[];return f.kindModifiers!==void 0&&f.kindModifiers.indexOf(\"deprecated\")!==-1&&y.push(r.languages.CompletionItemTag.Deprecated),{uri:g,position:t,offset:o,range:b,label:f.name,insertText:f.name,sortText:f.sortText,kind:s.convertKind(f.kind),tags:y}})}}async resolveCompletionItem(e,t){let i=e,l=i.uri,c=i.position,u=i.offset,o=await(await this._worker(l)).getCompletionEntryDetails(l.toString(),u,i.label);return o?{uri:l,position:c,label:o.name,kind:s.convertKind(o.kind),detail:S(o.displayParts),documentation:{value:s.createDocumentationString(o)}}:i}static convertKind(e){switch(e){case m.primitiveType:case m.keyword:return r.languages.CompletionItemKind.Keyword;case m.variable:case m.localVariable:return r.languages.CompletionItemKind.Variable;case m.memberVariable:case m.memberGetAccessor:case m.memberSetAccessor:return r.languages.CompletionItemKind.Field;case m.function:case m.memberFunction:case m.constructSignature:case m.callSignature:case m.indexSignature:return r.languages.CompletionItemKind.Function;case m.enum:return r.languages.CompletionItemKind.Enum;case m.module:return r.languages.CompletionItemKind.Module;case m.class:return r.languages.CompletionItemKind.Class;case m.interface:return r.languages.CompletionItemKind.Interface;case m.warning:return r.languages.CompletionItemKind.File}return r.languages.CompletionItemKind.Property}static createDocumentationString(e){let t=S(e.documentation);if(e.tags)for(let i of e.tags)t+=`\n\n${Q(i)}`;return t}};function Q(s){let e=`*@${s.name}*`;if(s.name===\"param\"&&s.text){let[t,...i]=s.text;e+=`\\`${t.text}\\``,i.length>0&&(e+=` \\u2014 ${i.map(l=>l.text).join(\" \")}`)}else Array.isArray(s.text)?e+=` \\u2014 ${s.text.map(t=>t.text).join(\" \")}`:s.text&&(e+=` \\u2014 ${s.text}`);return e}var I=class s extends k{constructor(){super(...arguments);this.signatureHelpTriggerCharacters=[\"(\",\",\"]}static _toSignatureHelpTriggerReason(t){switch(t.triggerKind){case r.languages.SignatureHelpTriggerKind.TriggerCharacter:return t.triggerCharacter?t.isRetrigger?{kind:\"retrigger\",triggerCharacter:t.triggerCharacter}:{kind:\"characterTyped\",triggerCharacter:t.triggerCharacter}:{kind:\"invoked\"};case r.languages.SignatureHelpTriggerKind.ContentChange:return t.isRetrigger?{kind:\"retrigger\"}:{kind:\"invoked\"};case r.languages.SignatureHelpTriggerKind.Invoke:default:return{kind:\"invoked\"}}}async provideSignatureHelp(t,i,l,c){let u=t.uri,g=t.getOffsetAt(i),o=await this._worker(u);if(t.isDisposed())return;let a=await o.getSignatureHelpItems(u.toString(),g,{triggerReason:s._toSignatureHelpTriggerReason(c)});if(!a||t.isDisposed())return;let d={activeSignature:a.selectedItemIndex,activeParameter:a.argumentIndex,signatures:[]};return a.items.forEach(p=>{let f={label:\"\",parameters:[]};f.documentation={value:S(p.documentation)},f.label+=S(p.prefixDisplayParts),p.parameters.forEach((b,y,W)=>{let w=S(b.displayParts),Z={label:w,documentation:{value:S(b.documentation)}};f.label+=w,f.parameters.push(Z),y<W.length-1&&(f.label+=S(p.separatorDisplayParts))}),f.label+=S(p.suffixDisplayParts),d.signatures.push(f)}),{value:d,dispose(){}}}},P=class extends k{async provideHover(e,t,i){let l=e.uri,c=e.getOffsetAt(t),u=await this._worker(l);if(e.isDisposed())return;let g=await u.getQuickInfoAtPosition(l.toString(),c);if(!g||e.isDisposed())return;let o=S(g.documentation),a=g.tags?g.tags.map(p=>Q(p)).join(`  \n\n`):\"\",d=S(g.displayParts);return{range:this._textSpanToRange(e,g.textSpan),contents:[{value:\"```typescript\\n\"+d+\"\\n```\\n\"},{value:o+(a?`\n\n`+a:\"\")}]}}},D=class extends k{async provideDocumentHighlights(e,t,i){let l=e.uri,c=e.getOffsetAt(t),u=await this._worker(l);if(e.isDisposed())return;let g=await u.getDocumentHighlights(l.toString(),c,[l.toString()]);if(!(!g||e.isDisposed()))return g.flatMap(o=>o.highlightSpans.map(a=>({range:this._textSpanToRange(e,a.textSpan),kind:a.kind===\"writtenReference\"?r.languages.DocumentHighlightKind.Write:r.languages.DocumentHighlightKind.Text})))}},F=class extends k{constructor(t,i){super(i);this._libFiles=t}async provideDefinition(t,i,l){let c=t.uri,u=t.getOffsetAt(i),g=await this._worker(c);if(t.isDisposed())return;let o=await g.getDefinitionAtPosition(c.toString(),u);if(!o||t.isDisposed()||(await this._libFiles.fetchLibFilesIfNecessary(o.map(d=>r.Uri.parse(d.fileName))),t.isDisposed()))return;let a=[];for(let d of o){let p=this._libFiles.getOrCreateModel(d.fileName);p&&a.push({uri:p.uri,range:this._textSpanToRange(p,d.textSpan)})}return a}},L=class extends k{constructor(t,i){super(i);this._libFiles=t}async provideReferences(t,i,l,c){let u=t.uri,g=t.getOffsetAt(i),o=await this._worker(u);if(t.isDisposed())return;let a=await o.getReferencesAtPosition(u.toString(),g);if(!a||t.isDisposed()||(await this._libFiles.fetchLibFilesIfNecessary(a.map(p=>r.Uri.parse(p.fileName))),t.isDisposed()))return;let d=[];for(let p of a){let f=this._libFiles.getOrCreateModel(p.fileName);f&&d.push({uri:f.uri,range:this._textSpanToRange(f,p.textSpan)})}return d}},M=class extends k{async provideDocumentSymbols(e,t){let i=e.uri,l=await this._worker(i);if(e.isDisposed())return;let c=await l.getNavigationTree(i.toString());if(!c||e.isDisposed())return;let u=(o,a)=>({name:o.text,detail:\"\",kind:h[o.kind]||r.languages.SymbolKind.Variable,range:this._textSpanToRange(e,o.spans[0]),selectionRange:this._textSpanToRange(e,o.spans[0]),tags:[],children:o.childItems?.map(p=>u(p,o.text)),containerName:a});return c.childItems?c.childItems.map(o=>u(o)):[]}},m=class{static{this.unknown=\"\"}static{this.keyword=\"keyword\"}static{this.script=\"script\"}static{this.module=\"module\"}static{this.class=\"class\"}static{this.interface=\"interface\"}static{this.type=\"type\"}static{this.enum=\"enum\"}static{this.variable=\"var\"}static{this.localVariable=\"local var\"}static{this.function=\"function\"}static{this.localFunction=\"local function\"}static{this.memberFunction=\"method\"}static{this.memberGetAccessor=\"getter\"}static{this.memberSetAccessor=\"setter\"}static{this.memberVariable=\"property\"}static{this.constructorImplementation=\"constructor\"}static{this.callSignature=\"call\"}static{this.indexSignature=\"index\"}static{this.constructSignature=\"construct\"}static{this.parameter=\"parameter\"}static{this.typeParameter=\"type parameter\"}static{this.primitiveType=\"primitive type\"}static{this.label=\"label\"}static{this.alias=\"alias\"}static{this.const=\"const\"}static{this.let=\"let\"}static{this.warning=\"warning\"}},h=Object.create(null);h[m.module]=r.languages.SymbolKind.Module;h[m.class]=r.languages.SymbolKind.Class;h[m.enum]=r.languages.SymbolKind.Enum;h[m.interface]=r.languages.SymbolKind.Interface;h[m.memberFunction]=r.languages.SymbolKind.Method;h[m.memberVariable]=r.languages.SymbolKind.Property;h[m.memberGetAccessor]=r.languages.SymbolKind.Property;h[m.memberSetAccessor]=r.languages.SymbolKind.Property;h[m.variable]=r.languages.SymbolKind.Variable;h[m.const]=r.languages.SymbolKind.Variable;h[m.localVariable]=r.languages.SymbolKind.Variable;h[m.variable]=r.languages.SymbolKind.Variable;h[m.function]=r.languages.SymbolKind.Function;h[m.localFunction]=r.languages.SymbolKind.Function;var x=class extends k{static _convertOptions(e){return{ConvertTabsToSpaces:e.insertSpaces,TabSize:e.tabSize,IndentSize:e.tabSize,IndentStyle:2,NewLineCharacter:`\n`,InsertSpaceAfterCommaDelimiter:!0,InsertSpaceAfterSemicolonInForStatements:!0,InsertSpaceBeforeAndAfterBinaryOperators:!0,InsertSpaceAfterKeywordsInControlFlowStatements:!0,InsertSpaceAfterFunctionKeywordForAnonymousFunctions:!0,InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis:!1,InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets:!1,InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces:!1,PlaceOpenBraceOnNewLineForControlBlocks:!1,PlaceOpenBraceOnNewLineForFunctions:!1}}_convertTextChanges(e,t){return{text:t.newText,range:this._textSpanToRange(e,t.span)}}},A=class extends x{constructor(){super(...arguments);this.canFormatMultipleRanges=!1}async provideDocumentRangeFormattingEdits(t,i,l,c){let u=t.uri,g=t.getOffsetAt({lineNumber:i.startLineNumber,column:i.startColumn}),o=t.getOffsetAt({lineNumber:i.endLineNumber,column:i.endColumn}),a=await this._worker(u);if(t.isDisposed())return;let d=await a.getFormattingEditsForRange(u.toString(),g,o,x._convertOptions(l));if(!(!d||t.isDisposed()))return d.map(p=>this._convertTextChanges(t,p))}},R=class extends x{get autoFormatTriggerCharacters(){return[\";\",\"}\",`\n`]}async provideOnTypeFormattingEdits(e,t,i,l,c){let u=e.uri,g=e.getOffsetAt(t),o=await this._worker(u);if(e.isDisposed())return;let a=await o.getFormattingEditsAfterKeystroke(u.toString(),g,i,x._convertOptions(l));if(!(!a||e.isDisposed()))return a.map(d=>this._convertTextChanges(e,d))}},O=class extends x{async provideCodeActions(e,t,i,l){let c=e.uri,u=e.getOffsetAt({lineNumber:t.startLineNumber,column:t.startColumn}),g=e.getOffsetAt({lineNumber:t.endLineNumber,column:t.endColumn}),o=x._convertOptions(e.getOptions()),a=i.markers.filter(b=>b.code).map(b=>b.code).map(Number),d=await this._worker(c);if(e.isDisposed())return;let p=await d.getCodeFixesAtPosition(c.toString(),u,g,a,o);return!p||e.isDisposed()?{actions:[],dispose:()=>{}}:{actions:p.filter(b=>b.changes.filter(y=>y.isNewFile).length===0).map(b=>this._tsCodeFixActionToMonacoCodeAction(e,i,b)),dispose:()=>{}}}_tsCodeFixActionToMonacoCodeAction(e,t,i){let l=[];for(let u of i.changes)for(let g of u.textChanges)l.push({resource:e.uri,versionId:void 0,textEdit:{range:this._textSpanToRange(e,g.span),text:g.newText}});return{title:i.description,edit:{edits:l},diagnostics:t.markers,kind:\"quickfix\"}}},E=class extends k{constructor(t,i){super(i);this._libFiles=t}async provideRenameEdits(t,i,l,c){let u=t.uri,g=u.toString(),o=t.getOffsetAt(i),a=await this._worker(u);if(t.isDisposed())return;let d=await a.getRenameInfo(g,o,{allowRenameOfImportPath:!1});if(d.canRename===!1)return{edits:[],rejectReason:d.localizedErrorMessage};if(d.fileToRename!==void 0)throw new Error(\"Renaming files is not supported.\");let p=await a.findRenameLocations(g,o,!1,!1,!1);if(!p||t.isDisposed())return;let f=[];for(let b of p){let y=this._libFiles.getOrCreateModel(b.fileName);if(y)f.push({resource:y.uri,versionId:void 0,textEdit:{range:this._textSpanToRange(y,b.textSpan),text:l}});else throw new Error(`Unknown file ${b.fileName}.`)}return{edits:f}}},N=class extends k{async provideInlayHints(e,t,i){let l=e.uri,c=l.toString(),u=e.getOffsetAt({lineNumber:t.startLineNumber,column:t.startColumn}),g=e.getOffsetAt({lineNumber:t.endLineNumber,column:t.endColumn}),o=await this._worker(l);return e.isDisposed()?null:{hints:(await o.provideInlayHints(c,u,g)).map(p=>({...p,label:p.text,position:e.getPositionAt(p.position),kind:this._convertHintKind(p.kind)})),dispose:()=>{}}}_convertHintKind(e){switch(e){case\"Parameter\":return r.languages.InlayHintKind.Parameter;case\"Type\":return r.languages.InlayHintKind.Type;default:return r.languages.InlayHintKind.Type}}};var V,j;function ue(s){j=X(s,\"typescript\")}function ge(s){V=X(s,\"javascript\")}function pe(){return new Promise((s,e)=>{if(!V)return e(\"JavaScript not registered!\");s(V)})}function de(){return new Promise((s,e)=>{if(!j)return e(\"TypeScript not registered!\");s(j)})}function X(s,e){let t=[],i=[],l=new v(e,s);t.push(l);let c=(...o)=>l.getLanguageServiceWorker(...o),u=new _(c);function g(){let{modeConfiguration:o}=s;Y(i),o.completionItems&&i.push(r.languages.registerCompletionItemProvider(e,new C(c))),o.signatureHelp&&i.push(r.languages.registerSignatureHelpProvider(e,new I(c))),o.hovers&&i.push(r.languages.registerHoverProvider(e,new P(c))),o.documentHighlights&&i.push(r.languages.registerDocumentHighlightProvider(e,new D(c))),o.definitions&&i.push(r.languages.registerDefinitionProvider(e,new F(u,c))),o.references&&i.push(r.languages.registerReferenceProvider(e,new L(u,c))),o.documentSymbols&&i.push(r.languages.registerDocumentSymbolProvider(e,new M(c))),o.rename&&i.push(r.languages.registerRenameProvider(e,new E(u,c))),o.documentRangeFormattingEdits&&i.push(r.languages.registerDocumentRangeFormattingEditProvider(e,new A(c))),o.onTypeFormattingEdits&&i.push(r.languages.registerOnTypeFormattingEditProvider(e,new R(c))),o.codeActions&&i.push(r.languages.registerCodeActionProvider(e,new O(c))),o.inlayHints&&i.push(r.languages.registerInlayHintsProvider(e,new N(c))),o.diagnostics&&i.push(new T(u,s,e,c))}return g(),t.push(fe(i)),c}function fe(s){return{dispose:()=>Y(s)}}function Y(s){for(;s.length;)s.pop().dispose()}return ae(me);})();\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/typescript/tsWorker.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt\n *-----------------------------------------------------------------------------*/\ndefine(\"vs/language/typescript/tsWorker\", [\"require\",\"require\"],(require)=>{\n\"use strict\";var moduleExports=(()=>{var rae=Object.defineProperty;var hit=Object.getOwnPropertyDescriptor;var git=Object.getOwnPropertyNames;var yit=Object.prototype.hasOwnProperty;var hke=(zd,ti)=>{for(var gt in ti)rae(zd,gt,{get:ti[gt],enumerable:!0})},vit=(zd,ti,gt,hs)=>{if(ti&&typeof ti==\"object\"||typeof ti==\"function\")for(let Mo of git(ti))!yit.call(zd,Mo)&&Mo!==gt&&rae(zd,Mo,{get:()=>ti[Mo],enumerable:!(hs=hit(ti,Mo))||hs.enumerable});return zd};var bit=zd=>vit(rae({},\"__esModule\",{value:!0}),zd);var kit={};hke(kit,{TypeScriptWorker:()=>o8,create:()=>Lit});var oae={};hke(oae,{EndOfLineState:()=>Sit,IndentStyle:()=>Ait,ScriptKind:()=>uA,ScriptTarget:()=>Cit,TokenClass:()=>Iit,createClassifier:()=>Eit,createLanguageService:()=>iae,displayPartsToString:()=>Tit,flattenDiagnosticMessageText:()=>xit,typescript:()=>aae});var d0=void 0,IU={exports:{}};var f0=(()=>{var zd=Object.defineProperty,ti=Object.getOwnPropertyNames,gt=(e,t)=>function(){return e&&(t=(0,e[ti(e)[0]])(e=0)),t},hs=(e,t)=>function(){return t||(0,e[ti(e)[0]])((t={exports:{}}).exports,t),t.exports},Mo=(e,t)=>{for(var r in t)zd(e,r,{get:t[r],enumerable:!0})},Sg,Rf,LU,gke=gt({\"src/compiler/corePublic.ts\"(){\"use strict\";Sg=\"5.0\",Rf=\"5.0.2\",LU=(e=>(e[e.LessThan=-1]=\"LessThan\",e[e.EqualTo=0]=\"EqualTo\",e[e.GreaterThan=1]=\"GreaterThan\",e))(LU||{})}});function Fn(e){return e?e.length:0}function mn(e,t){if(e)for(let r=0;r<e.length;r++){let i=t(e[r],r);if(i)return i}}function sae(e,t){if(e)for(let r=e.length-1;r>=0;r--){let i=t(e[r],r);if(i)return i}}function ks(e,t){if(e!==void 0)for(let r=0;r<e.length;r++){let i=t(e[r],r);if(i!==void 0)return i}}function FD(e,t){for(let r of e){let i=t(r);if(i!==void 0)return i}}function yke(e,t,r){let i=r;if(e){let o=0;for(let s of e)i=t(i,s,o),o++}return i}function kU(e,t,r){let i=[];L.assertEqual(e.length,t.length);for(let o=0;o<e.length;o++)i.push(r(e[o],t[o],o));return i}function DU(e,t){if(e.length<=1)return e;let r=[];for(let i=0,o=e.length;i<o;i++)i&&r.push(t),r.push(e[i]);return r}function Ji(e,t){if(e){for(let r=0;r<e.length;r++)if(!t(e[r],r))return!1}return!0}function wr(e,t,r){if(e!==void 0)for(let i=r??0;i<e.length;i++){let o=e[i];if(t(o,i))return o}}function dA(e,t,r){if(e!==void 0)for(let i=r??e.length-1;i>=0;i--){let o=e[i];if(t(o,i))return o}}function Yc(e,t,r){if(e===void 0)return-1;for(let i=r??0;i<e.length;i++)if(t(e[i],i))return i;return-1}function s8(e,t,r){if(e===void 0)return-1;for(let i=r??e.length-1;i>=0;i--)if(t(e[i],i))return i;return-1}function vke(e,t){for(let r=0;r<e.length;r++){let i=t(e[r],r);if(i)return i}return L.fail()}function ya(e,t,r=Zv){if(e){for(let i of e)if(r(i,t))return!0}return!1}function GD(e,t,r=Zv){return e.length===t.length&&e.every((i,o)=>r(i,t[o]))}function cae(e,t,r){for(let i=r||0;i<e.length;i++)if(ya(t,e.charCodeAt(i)))return i;return-1}function Oy(e,t){let r=0;if(e)for(let i=0;i<e.length;i++){let o=e[i];t(o,i)&&r++}return r}function Pr(e,t){if(e){let r=e.length,i=0;for(;i<r&&t(e[i]);)i++;if(i<r){let o=e.slice(0,i);for(i++;i<r;){let s=e[i];t(s)&&o.push(s),i++}return o}}return e}function wU(e,t){let r=0;for(let i=0;i<e.length;i++)t(e[i],i,e)&&(e[r]=e[i],r++);e.length=r}function Om(e){e.length=0}function on(e,t){let r;if(e){r=[];for(let i=0;i<e.length;i++)r.push(t(e[i],i))}return r}function*RU(e,t){for(let r of e)yield t(r)}function Tl(e,t){if(e)for(let r=0;r<e.length;r++){let i=e[r],o=t(i,r);if(i!==o){let s=e.slice(0,r);for(s.push(o),r++;r<e.length;r++)s.push(t(e[r],r));return s}}return e}function t_(e){let t=[];for(let r of e)r&&(ba(r)?si(t,r):t.push(r));return t}function Uo(e,t){let r;if(e)for(let i=0;i<e.length;i++){let o=t(e[i],i);o&&(ba(o)?r=si(r,o):r=Sn(r,o))}return r||Je}function BD(e,t){let r=[];if(e)for(let i=0;i<e.length;i++){let o=t(e[i],i);o&&(ba(o)?si(r,o):r.push(o))}return r}function*OU(e,t){for(let r of e){let i=t(r);i&&(yield*i)}}function lae(e,t){let r;if(e)for(let i=0;i<e.length;i++){let o=e[i],s=t(o,i);(r||o!==s||ba(s))&&(r||(r=e.slice(0,i)),ba(s)?si(r,s):r.push(s))}return r||e}function NU(e,t){let r=[];for(let i=0;i<e.length;i++){let o=t(e[i],i);if(o===void 0)return;r.push(o)}return r}function Zi(e,t){let r=[];if(e)for(let i=0;i<e.length;i++){let o=t(e[i],i);o!==void 0&&r.push(o)}return r}function*UD(e,t){for(let r of e){let i=t(r);i!==void 0&&(yield i)}}function bke(e,t){if(!e)return;let r=new Map;return e.forEach((i,o)=>{let s=t(o,i);if(s!==void 0){let[l,f]=s;l!==void 0&&f!==void 0&&r.set(l,f)}}),r}function VD(e,t,r){if(e.has(t))return e.get(t);let i=r();return e.set(t,i),i}function _0(e,t){return e.has(t)?!1:(e.add(t),!0)}function*Eke(e){yield e}function c8(e,t,r){let i;if(e){i=[];let o=e.length,s,l,f=0,d=0;for(;f<o;){for(;d<o;){let g=e[d];if(l=t(g,d),d===0)s=l;else if(l!==s)break;d++}if(f<d){let g=r(e.slice(f,d),s,f,d);g&&i.push(g),f=d}s=l,d++}}return i}function uae(e,t){if(!e)return;let r=new Map;return e.forEach((i,o)=>{let[s,l]=t(o,i);r.set(s,l)}),r}function vt(e,t){if(e)if(t){for(let r of e)if(t(r))return!0}else return e.length>0;return!1}function PU(e,t,r){let i;for(let o=0;o<e.length;o++)t(e[o])?i=i===void 0?o:i:i!==void 0&&(r(i,o),i=void 0);i!==void 0&&r(i,e.length)}function Qi(e,t){return vt(t)?vt(e)?[...e,...t]:t:e}function Tke(e,t){return t}function jD(e){return e.map(Tke)}function Ske(e,t,r){let i=jD(e);_ae(e,i,r);let o=e[i[0]],s=[i[0]];for(let l=1;l<i.length;l++){let f=i[l],d=e[f];t(o,d)||(s.push(f),o=d)}return s.sort(),s.map(l=>e[l])}function xke(e,t){let r=[];for(let i of e)Of(r,i,t);return r}function fA(e,t,r){return e.length===0?[]:e.length===1?e.slice():r?Ske(e,t,r):xke(e,t)}function Ake(e,t){if(e.length===0)return Je;let r=e[0],i=[r];for(let o=1;o<e.length;o++){let s=e[o];switch(t(s,r)){case!0:case 0:continue;case-1:return L.fail(\"Array is unsorted.\")}i.push(r=s)}return i}function MU(){return[]}function Ny(e,t,r,i){if(e.length===0)return e.push(t),!0;let o=Py(e,t,Ks,r);return o<0?(e.splice(~o,0,t),!0):i?(e.splice(o,0,t),!0):!1}function HD(e,t,r){return Ake(XC(e,t),r||t||su)}function dae(e,t){if(e.length<2)return!0;for(let r=1,i=e.length;r<i;r++)if(t(e[r-1],e[r])===1)return!1;return!0}function l8(e,t,r,i){let o=3;if(e.length<2)return o;let s=t(e[0]);for(let l=1,f=e.length;l<f&&o!==0;l++){let d=t(e[l]);o&1&&r(s,d)>0&&(o&=-2),o&2&&i(s,d)>0&&(o&=-3),s=d}return o}function up(e,t,r=Zv){if(!e||!t)return e===t;if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!r(e[i],t[i],i))return!1;return!0}function WD(e){let t;if(e)for(let r=0;r<e.length;r++){let i=e[r];(t||!i)&&(t||(t=e.slice(0,r)),i&&t.push(i))}return t||e}function fae(e,t,r){if(!t||!e||t.length===0||e.length===0)return t;let i=[];e:for(let o=0,s=0;s<t.length;s++){s>0&&L.assertGreaterThanOrEqual(r(t[s],t[s-1]),0);t:for(let l=o;o<e.length;o++)switch(o>l&&L.assertGreaterThanOrEqual(r(e[o],e[o-1]),0),r(t[s],e[o])){case-1:i.push(t[s]);continue e;case 0:continue e;case 1:continue t}}return i}function Sn(e,t){return t===void 0?e:e===void 0?[t]:(e.push(t),e)}function _A(e,t){return e===void 0?t:t===void 0?e:ba(e)?ba(t)?Qi(e,t):Sn(e,t):ba(t)?Sn(t,e):[e,t]}function FU(e,t){return t<0?e.length+t:t}function si(e,t,r,i){if(t===void 0||t.length===0)return e;if(e===void 0)return t.slice(r,i);r=r===void 0?0:FU(t,r),i=i===void 0?t.length:FU(t,i);for(let o=r;o<i&&o<t.length;o++)t[o]!==void 0&&e.push(t[o]);return e}function Of(e,t,r){return ya(e,t,r)?!1:(e.push(t),!0)}function xg(e,t,r){return e?(Of(e,t,r),e):[t]}function _ae(e,t,r){t.sort((i,o)=>r(e[i],e[o])||Es(i,o))}function XC(e,t){return e.length===0?e:e.slice().sort(t)}function*Cke(e){for(let t=e.length-1;t>=0;t--)yield e[t]}function Ag(e,t){let r=jD(e);return _ae(e,r,t),r.map(i=>e[i])}function GU(e,t,r,i){for(;r<i;){if(e[r]!==t[r])return!1;r++}return!0}function Sl(e){return e===void 0||e.length===0?void 0:e[0]}function u8(e){if(e)for(let t of e)return t}function Vo(e){return L.assert(e.length!==0),e[0]}function pae(e){for(let t of e)return t;L.fail(\"iterator is empty\")}function Os(e){return e===void 0||e.length===0?void 0:e[e.length-1]}function To(e){return L.assert(e.length!==0),e[e.length-1]}function Wp(e){return e&&e.length===1?e[0]:void 0}function BU(e){return L.checkDefined(Wp(e))}function zp(e){return e&&e.length===1?e[0]:e}function UU(e,t,r){let i=e.slice(0);return i[t]=r,i}function Py(e,t,r,i,o){return j1(e,r(t),r,i,o)}function j1(e,t,r,i,o){if(!vt(e))return-1;let s=o||0,l=e.length-1;for(;s<=l;){let f=s+(l-s>>1),d=r(e[f],f);switch(i(d,t)){case-1:s=f+1;break;case 0:return f;case 1:l=f-1;break}}return~s}function ou(e,t,r,i,o){if(e&&e.length>0){let s=e.length;if(s>0){let l=i===void 0||i<0?0:i,f=o===void 0||l+o>s-1?s-1:l+o,d;for(arguments.length<=2?(d=e[l],l++):d=r;l<=f;)d=t(d,e[l],l),l++;return d}}return r}function fs(e,t){return Lg.call(e,t)}function zD(e,t){return Lg.call(e,t)?e[t]:void 0}function bh(e){let t=[];for(let r in e)Lg.call(e,r)&&t.push(r);return t}function Ike(e){let t=[];do{let r=Object.getOwnPropertyNames(e);for(let i of r)Of(t,i)}while(e=Object.getPrototypeOf(e));return t}function H1(e){let t=[];for(let r in e)Lg.call(e,r)&&t.push(e[r]);return t}function mae(e,t){let r=new Array(e);for(let i=0;i<e;i++)r[i]=t(i);return r}function lo(e,t){let r=[];for(let i of e)r.push(t?t(i):i);return r}function JD(e,...t){for(let r of t)if(r!==void 0)for(let i in r)fs(r,i)&&(e[i]=r[i]);return e}function hae(e,t,r=Zv){if(e===t)return!0;if(!e||!t)return!1;for(let i in e)if(Lg.call(e,i)&&(!Lg.call(t,i)||!r(e[i],t[i])))return!1;for(let i in t)if(Lg.call(t,i)&&!Lg.call(e,i))return!1;return!0}function p0(e,t,r=Ks){let i=new Map;for(let o of e){let s=t(o);s!==void 0&&i.set(s,r(o))}return i}function gae(e,t,r=Ks){let i=[];for(let o of e)i[t(o)]=r(o);return i}function KD(e,t,r=Ks){let i=Nf();for(let o of e)i.add(t(o),r(o));return i}function YC(e,t,r=Ks){return lo(KD(e,t).values(),r)}function yae(e,t){var r;let i={};if(e)for(let o of e){let s=`${t(o)}`;((r=i[s])!=null?r:i[s]=[]).push(o)}return i}function VU(e){let t={};for(let r in e)Lg.call(e,r)&&(t[r]=e[r]);return t}function d8(e,t){let r={};for(let i in t)Lg.call(t,i)&&(r[i]=t[i]);for(let i in e)Lg.call(e,i)&&(r[i]=e[i]);return r}function jU(e,t){for(let r in t)Lg.call(t,r)&&(e[r]=t[r])}function ho(e,t){return t?t.bind(e):void 0}function Nf(){let e=new Map;return e.add=Lke,e.remove=kke,e}function Lke(e,t){let r=this.get(e);return r?r.push(t):this.set(e,r=[t]),r}function kke(e,t){let r=this.get(e);r&&(YD(r,t),r.length||this.delete(e))}function vae(){return Nf()}function HU(e){let t=e?.slice()||[],r=0;function i(){return r===t.length}function o(...l){t.push(...l)}function s(){if(i())throw new Error(\"Queue is empty\");let l=t[r];if(t[r]=void 0,r++,r>100&&r>t.length>>1){let f=t.length-r;t.copyWithin(0,r),t.length=f,r=0}return l}return{enqueue:o,dequeue:s,isEmpty:i}}function Dke(e,t){let r=new Map,i=0;function*o(){for(let l of r.values())ba(l)?yield*l:yield l}let s={has(l){let f=e(l);if(!r.has(f))return!1;let d=r.get(f);if(!ba(d))return t(d,l);for(let g of d)if(t(g,l))return!0;return!1},add(l){let f=e(l);if(r.has(f)){let d=r.get(f);if(ba(d))ya(d,l,t)||(d.push(l),i++);else{let g=d;t(g,l)||(r.set(f,[g,l]),i++)}}else r.set(f,l),i++;return this},delete(l){let f=e(l);if(!r.has(f))return!1;let d=r.get(f);if(ba(d)){for(let g=0;g<d.length;g++)if(t(d[g],l))return d.length===1?r.delete(f):d.length===2?r.set(f,d[1-g]):zU(d,g),i--,!0}else if(t(d,l))return r.delete(f),i--,!0;return!1},clear(){r.clear(),i=0},get size(){return i},forEach(l){for(let f of lo(r.values()))if(ba(f))for(let d of f)l(d,d,s);else{let d=f;l(d,d,s)}},keys(){return o()},values(){return o()},*entries(){for(let l of o())yield[l,l]},[Symbol.iterator]:()=>o(),[Symbol.toStringTag]:r[Symbol.toStringTag]};return s}function ba(e){return Array.isArray(e)}function qD(e){return ba(e)?e:[e]}function Ta(e){return typeof e==\"string\"}function Cg(e){return typeof e==\"number\"}function zr(e,t){return e!==void 0&&t(e)?e:void 0}function Ga(e,t){return e!==void 0&&t(e)?e:L.fail(`Invalid cast. The supplied value ${e} did not pass the test '${L.getFunctionName(t)}'.`)}function Ba(e){}function m0(){return!1}function h0(){return!0}function Qv(){}function Ks(e){return e}function bae(e){return e.toLowerCase()}function n_(e){return YU.test(e)?e.replace(YU,bae):e}function Sa(){throw new Error(\"Not implemented\")}function zu(e){let t;return()=>(e&&(t=e(),e=void 0),t)}function Jp(e){let t=new Map;return r=>{let i=`${typeof r}:${r}`,o=t.get(i);return o===void 0&&!t.has(i)&&(o=e(r),t.set(i,o)),o}}function wke(e){let t=new WeakMap;return r=>{let i=t.get(r);return i===void 0&&!t.has(r)&&(i=e(r),t.set(r,i)),i}}function Eae(e,t){return(...r)=>{let i=t.get(r);return i===void 0&&!t.has(r)&&(i=e(...r),t.set(r,i)),i}}function Rke(e,t,r,i,o){if(o){let s=[];for(let l=0;l<arguments.length;l++)s[l]=arguments[l];return l=>ou(s,(f,d)=>d(f),l)}else return i?s=>i(r(t(e(s)))):r?s=>r(t(e(s))):t?s=>t(e(s)):e?s=>e(s):s=>s}function Zv(e,t){return e===t}function W1(e,t){return e===t||e!==void 0&&t!==void 0&&e.toUpperCase()===t.toUpperCase()}function z1(e,t){return Zv(e,t)}function Tae(e,t){return e===t?0:e===void 0?-1:t===void 0?1:e<t?-1:1}function Es(e,t){return Tae(e,t)}function f8(e,t){return Es(e?.start,t?.start)||Es(e?.length,t?.length)}function WU(e,t){return ou(e,(r,i)=>t(r,i)===-1?r:i)}function _8(e,t){return e===t?0:e===void 0?-1:t===void 0?1:(e=e.toUpperCase(),t=t.toUpperCase(),e<t?-1:e>t?1:0)}function Sae(e,t){return e===t?0:e===void 0?-1:t===void 0?1:(e=e.toLowerCase(),t=t.toLowerCase(),e<t?-1:e>t?1:0)}function su(e,t){return Tae(e,t)}function p8(e){return e?_8:su}function xae(){return T8}function Aae(e){T8!==e&&(T8=e,QU=void 0)}function XD(e,t){return(QU||(QU=Mae(T8)))(e,t)}function Cae(e,t,r,i){return e===t?0:e===void 0?-1:t===void 0?1:i(e[r],t[r])}function g0(e,t){return Es(e?1:0,t?1:0)}function $C(e,t,r){let i=Math.max(2,Math.floor(e.length*.34)),o=Math.floor(e.length*.4)+1,s;for(let l of t){let f=r(l);if(f!==void 0&&Math.abs(f.length-e.length)<=i){if(f===e||f.length<3&&f.toLowerCase()!==e.toLowerCase())continue;let d=Oke(e,f,o-.1);if(d===void 0)continue;L.assert(d<o),o=d,s=l}}return s}function Oke(e,t,r){let i=new Array(t.length+1),o=new Array(t.length+1),s=r+.01;for(let f=0;f<=t.length;f++)i[f]=f;for(let f=1;f<=e.length;f++){let d=e.charCodeAt(f-1),g=Math.ceil(f>r?f-r:1),m=Math.floor(t.length>r+f?r+f:t.length);o[0]=f;let v=f;for(let x=1;x<g;x++)o[x]=s;for(let x=g;x<=m;x++){let A=e[f-1].toLowerCase()===t[x-1].toLowerCase()?i[x-1]+.1:i[x-1]+2,w=d===t.charCodeAt(x-1)?i[x-1]:Math.min(i[x]+1,o[x-1]+1,A);o[x]=w,v=Math.min(v,w)}for(let x=m+1;x<=t.length;x++)o[x]=s;if(v>r)return;let S=i;i=o,o=S}let l=i[t.length];return l>r?void 0:l}function Oc(e,t){let r=e.length-t.length;return r>=0&&e.indexOf(t,r)===r}function pA(e,t){return Oc(e,t)?e.slice(0,e.length-t.length):e}function Iae(e,t){return Oc(e,t)?e.slice(0,e.length-t.length):void 0}function jl(e,t){return e.indexOf(t)!==-1}function Lae(e){let t=e.length;for(let r=t-1;r>0;r--){let i=e.charCodeAt(r);if(i>=48&&i<=57)do--r,i=e.charCodeAt(r);while(r>0&&i>=48&&i<=57);else if(r>4&&(i===110||i===78)){if(--r,i=e.charCodeAt(r),i!==105&&i!==73||(--r,i=e.charCodeAt(r),i!==109&&i!==77))break;--r,i=e.charCodeAt(r)}else break;if(i!==45&&i!==46)break;t=r}return t===e.length?e:e.slice(0,t)}function m8(e,t){for(let r=0;r<e.length;r++)if(e[r]===t)return y0(e,r),!0;return!1}function y0(e,t){for(let r=t;r<e.length-1;r++)e[r]=e[r+1];e.pop()}function zU(e,t){e[t]=e[e.length-1],e.pop()}function YD(e,t){return Nke(e,r=>r===t)}function Nke(e,t){for(let r=0;r<e.length;r++)if(t(e[r]))return zU(e,r),!0;return!1}function Dl(e){return e?Ks:n_}function kae({prefix:e,suffix:t}){return`${e}*${t}`}function Dae(e,t){return L.assert(h8(e,t)),t.substring(e.prefix.length,t.length-e.suffix.length)}function JU(e,t,r){let i,o=-1;for(let s of e){let l=t(s);h8(l,r)&&l.prefix.length>o&&(o=l.prefix.length,i=s)}return i}function na(e,t){return e.lastIndexOf(t,0)===0}function QC(e,t){return na(e,t)?e.substr(t.length):e}function KU(e,t,r=Ks){return na(r(e),r(t))?e.substring(t.length):void 0}function h8({prefix:e,suffix:t},r){return r.length>=e.length+t.length&&na(r,e)&&Oc(r,t)}function g8(e,t){return r=>e(r)&&t(r)}function Kp(...e){return(...t)=>{let r;for(let i of e)if(r=i(...t),r)return r;return r}}function y8(e){return(...t)=>!e(...t)}function Pke(e){}function aT(e){return e===void 0?void 0:[e]}function wae(e,t,r,i,o,s){s=s||Ba;let l=0,f=0,d=e.length,g=t.length,m=!1;for(;l<d&&f<g;){let v=e[l],S=t[f],x=r(v,S);x===-1?(i(v),l++,m=!0):x===1?(o(S),f++,m=!0):(s(S,v),l++,f++)}for(;l<d;)i(e[l++]),m=!0;for(;f<g;)o(t[f++]),m=!0;return m}function Rae(e){let t=[];return Oae(e,t,void 0,0),t}function Oae(e,t,r,i){for(let o of e[i]){let s;r?(s=r.slice(),s.push(o)):s=[o],i===e.length-1?t.push(s):Oae(e,t,s,i+1)}}function J1(e,t,r=\" \"){return t<=e.length?e:r.repeat(t-e.length)+e}function Mke(e,t,r=\" \"){return t<=e.length?e:e+r.repeat(t-e.length)}function v8(e,t){if(e){let r=e.length,i=0;for(;i<r&&t(e[i]);)i++;return e.slice(0,i)}}function Nae(e,t){if(e){let r=e.length,i=0;for(;i<r&&t(e[i]);)i++;return e.slice(i)}}function Fke(e){let t=e.length-1;for(;t>=0&&xh(e.charCodeAt(t));)t--;return e.slice(0,t+1)}function qU(){return typeof process<\"u\"&&process.nextTick&&!process.browser&&typeof IU==\"object\"}var Je,b8,Pae,XU,Ig,Lg,E8,YU,$U,Mae,QU,T8,v0,$D,ZC,Gke=gt({\"src/compiler/core.ts\"(){\"use strict\";fa(),Je=[],b8=new Map,Pae=new Set,XU=(e=>(e[e.None=0]=\"None\",e[e.CaseSensitive=1]=\"CaseSensitive\",e[e.CaseInsensitive=2]=\"CaseInsensitive\",e[e.Both=3]=\"Both\",e))(XU||{}),Ig=Array.prototype.at?(e,t)=>e?.at(t):(e,t)=>{if(e&&(t=FU(e,t),t<e.length))return e[t]},Lg=Object.prototype.hasOwnProperty,E8={push:Ba,length:0},YU=/[^\\u0130\\u0131\\u00DFa-z0-9\\\\/:\\-_\\. ]+/g,$U=(e=>(e[e.None=0]=\"None\",e[e.Normal=1]=\"Normal\",e[e.Aggressive=2]=\"Aggressive\",e[e.VeryAggressive=3]=\"VeryAggressive\",e))($U||{}),Mae=(()=>{let e,t,r=f();return d;function i(g,m,v){if(g===m)return 0;if(g===void 0)return-1;if(m===void 0)return 1;let S=v(g,m);return S<0?-1:S>0?1:0}function o(g){let m=new Intl.Collator(g,{usage:\"sort\",sensitivity:\"variant\"}).compare;return(v,S)=>i(v,S,m)}function s(g){if(g!==void 0)return l();return(v,S)=>i(v,S,m);function m(v,S){return v.localeCompare(S)}}function l(){return(v,S)=>i(v,S,g);function g(v,S){return m(v.toUpperCase(),S.toUpperCase())||m(v,S)}function m(v,S){return v<S?-1:v>S?1:0}}function f(){return typeof Intl==\"object\"&&typeof Intl.Collator==\"function\"?o:typeof String.prototype.localeCompare==\"function\"&&typeof String.prototype.toLocaleUpperCase==\"function\"&&\"a\".localeCompare(\"B\")<0?s:l}function d(g){return g===void 0?e||(e=r(g)):g===\"en-US\"?t||(t=r(g)):r(g)}})(),v0=String.prototype.trim?e=>e.trim():e=>$D(ZC(e)),$D=String.prototype.trimEnd?e=>e.trimEnd():Fke,ZC=String.prototype.trimStart?e=>e.trimStart():e=>e.replace(/^\\s+/g,\"\")}}),ZU,L,Bke=gt({\"src/compiler/debug.ts\"(){\"use strict\";fa(),fa(),ZU=(e=>(e[e.Off=0]=\"Off\",e[e.Error=1]=\"Error\",e[e.Warning=2]=\"Warning\",e[e.Info=3]=\"Info\",e[e.Verbose=4]=\"Verbose\",e))(ZU||{}),(e=>{let t=0;e.currentLogLevel=2,e.isDebugging=!1;function r(Dt){return e.currentLogLevel<=Dt}e.shouldLog=r;function i(Dt,pn){e.loggingHost&&r(Dt)&&e.loggingHost.log(Dt,pn)}function o(Dt){i(3,Dt)}e.log=o,(Dt=>{function pn(ri){i(1,ri)}Dt.error=pn;function An(ri){i(2,ri)}Dt.warn=An;function Kn(ri){i(3,ri)}Dt.log=Kn;function hi(ri){i(4,ri)}Dt.trace=hi})(o=e.log||(e.log={}));let s={};function l(){return t}e.getAssertionLevel=l;function f(Dt){let pn=t;if(t=Dt,Dt>pn)for(let An of bh(s)){let Kn=s[An];Kn!==void 0&&e[An]!==Kn.assertion&&Dt>=Kn.level&&(e[An]=Kn,s[An]=void 0)}}e.setAssertionLevel=f;function d(Dt){return t>=Dt}e.shouldAssert=d;function g(Dt,pn){return d(Dt)?!0:(s[pn]={level:Dt,assertion:e[pn]},e[pn]=Ba,!1)}function m(Dt,pn){let An=new Error(Dt?`Debug Failure. ${Dt}`:\"Debug Failure.\");throw Error.captureStackTrace&&Error.captureStackTrace(An,pn||m),An}e.fail=m;function v(Dt,pn,An){return m(`${pn||\"Unexpected node.\"}\\r\nNode ${Ve(Dt.kind)} was unexpected.`,An||v)}e.failBadSyntaxKind=v;function S(Dt,pn,An,Kn){Dt||(pn=pn?`False expression: ${pn}`:\"False expression.\",An&&(pn+=`\\r\nVerbose Debug Information: `+(typeof An==\"string\"?An:An())),m(pn,Kn||S))}e.assert=S;function x(Dt,pn,An,Kn,hi){if(Dt!==pn){let ri=An?Kn?`${An} ${Kn}`:An:\"\";m(`Expected ${Dt} === ${pn}. ${ri}`,hi||x)}}e.assertEqual=x;function A(Dt,pn,An,Kn){Dt>=pn&&m(`Expected ${Dt} < ${pn}. ${An||\"\"}`,Kn||A)}e.assertLessThan=A;function w(Dt,pn,An){Dt>pn&&m(`Expected ${Dt} <= ${pn}`,An||w)}e.assertLessThanOrEqual=w;function C(Dt,pn,An){Dt<pn&&m(`Expected ${Dt} >= ${pn}`,An||C)}e.assertGreaterThanOrEqual=C;function P(Dt,pn,An){Dt==null&&m(pn,An||P)}e.assertIsDefined=P;function F(Dt,pn,An){return P(Dt,pn,An||F),Dt}e.checkDefined=F;function B(Dt,pn,An){for(let Kn of Dt)P(Kn,pn,An||B)}e.assertEachIsDefined=B;function q(Dt,pn,An){return B(Dt,pn,An||q),Dt}e.checkEachDefined=q;function W(Dt,pn=\"Illegal value:\",An){let Kn=typeof Dt==\"object\"&&fs(Dt,\"kind\")&&fs(Dt,\"pos\")?\"SyntaxKind: \"+Ve(Dt.kind):JSON.stringify(Dt);return m(`${pn} ${Kn}`,An||W)}e.assertNever=W;function Y(Dt,pn,An,Kn){g(1,\"assertEachNode\")&&S(pn===void 0||Ji(Dt,pn),An||\"Unexpected node.\",()=>`Node array did not pass test '${re(pn)}'.`,Kn||Y)}e.assertEachNode=Y;function R(Dt,pn,An,Kn){g(1,\"assertNode\")&&S(Dt!==void 0&&(pn===void 0||pn(Dt)),An||\"Unexpected node.\",()=>`Node ${Ve(Dt?.kind)} did not pass test '${re(pn)}'.`,Kn||R)}e.assertNode=R;function ie(Dt,pn,An,Kn){g(1,\"assertNotNode\")&&S(Dt===void 0||pn===void 0||!pn(Dt),An||\"Unexpected node.\",()=>`Node ${Ve(Dt.kind)} should not have passed test '${re(pn)}'.`,Kn||ie)}e.assertNotNode=ie;function $(Dt,pn,An,Kn){g(1,\"assertOptionalNode\")&&S(pn===void 0||Dt===void 0||pn(Dt),An||\"Unexpected node.\",()=>`Node ${Ve(Dt?.kind)} did not pass test '${re(pn)}'.`,Kn||$)}e.assertOptionalNode=$;function fe(Dt,pn,An,Kn){g(1,\"assertOptionalToken\")&&S(pn===void 0||Dt===void 0||Dt.kind===pn,An||\"Unexpected node.\",()=>`Node ${Ve(Dt?.kind)} was not a '${Ve(pn)}' token.`,Kn||fe)}e.assertOptionalToken=fe;function Z(Dt,pn,An){g(1,\"assertMissingNode\")&&S(Dt===void 0,pn||\"Unexpected node.\",()=>`Node ${Ve(Dt.kind)} was unexpected'.`,An||Z)}e.assertMissingNode=Z;function U(Dt){}e.type=U;function re(Dt){if(typeof Dt!=\"function\")return\"\";if(fs(Dt,\"name\"))return Dt.name;{let pn=Function.prototype.toString.call(Dt),An=/^function\\s+([\\w\\$]+)\\s*\\(/.exec(pn);return An?An[1]:\"\"}}e.getFunctionName=re;function le(Dt){return`{ name: ${Gi(Dt.escapedName)}; flags: ${Be(Dt.flags)}; declarations: ${on(Dt.declarations,pn=>Ve(pn.kind))} }`}e.formatSymbol=le;function _e(Dt=0,pn,An){let Kn=X(pn);if(Dt===0)return Kn.length>0&&Kn[0][0]===0?Kn[0][1]:\"0\";if(An){let hi=[],ri=Dt;for(let[vn,Ht]of Kn){if(vn>Dt)break;vn!==0&&vn&Dt&&(hi.push(Ht),ri&=~vn)}if(ri===0)return hi.join(\"|\")}else for(let[hi,ri]of Kn)if(hi===Dt)return ri;return Dt.toString()}e.formatEnum=_e;let ge=new Map;function X(Dt){let pn=ge.get(Dt);if(pn)return pn;let An=[];for(let hi in Dt){let ri=Dt[hi];typeof ri==\"number\"&&An.push([ri,hi])}let Kn=Ag(An,(hi,ri)=>Es(hi[0],ri[0]));return ge.set(Dt,Kn),Kn}function Ve(Dt){return _e(Dt,I8,!1)}e.formatSyntaxKind=Ve;function we(Dt){return _e(Dt,B8,!1)}e.formatSnippetKind=we;function ke(Dt){return _e(Dt,L8,!0)}e.formatNodeFlags=ke;function Pe(Dt){return _e(Dt,k8,!0)}e.formatModifierFlags=Pe;function Ce(Dt){return _e(Dt,G8,!0)}e.formatTransformFlags=Ce;function Ie(Dt){return _e(Dt,U8,!0)}e.formatEmitFlags=Ie;function Be(Dt){return _e(Dt,O8,!0)}e.formatSymbolFlags=Be;function Ne(Dt){return _e(Dt,N8,!0)}e.formatTypeFlags=Ne;function Le(Dt){return _e(Dt,M8,!0)}e.formatSignatureFlags=Le;function Ye(Dt){return _e(Dt,P8,!0)}e.formatObjectFlags=Ye;function _t(Dt){return _e(Dt,tw,!0)}e.formatFlowFlags=_t;function ct(Dt){return _e(Dt,D8,!0)}e.formatRelationComparisonResult=ct;function Rt(Dt){return _e(Dt,_F,!0)}e.formatCheckMode=Rt;function We(Dt){return _e(Dt,pF,!0)}e.formatSignatureCheckMode=We;function qe(Dt){return _e(Dt,dF,!0)}e.formatTypeFacts=qe;let zt=!1,Qt;function tn(Dt){\"__debugFlowFlags\"in Dt||Object.defineProperties(Dt,{__tsDebuggerDisplay:{value(){let pn=this.flags&2?\"FlowStart\":this.flags&4?\"FlowBranchLabel\":this.flags&8?\"FlowLoopLabel\":this.flags&16?\"FlowAssignment\":this.flags&32?\"FlowTrueCondition\":this.flags&64?\"FlowFalseCondition\":this.flags&128?\"FlowSwitchClause\":this.flags&256?\"FlowArrayMutation\":this.flags&512?\"FlowCall\":this.flags&1024?\"FlowReduceLabel\":this.flags&1?\"FlowUnreachable\":\"UnknownFlow\",An=this.flags&-2048;return`${pn}${An?` (${_t(An)})`:\"\"}`}},__debugFlowFlags:{get(){return _e(this.flags,tw,!0)}},__debugToString:{value(){return nn(this)}}})}function kn(Dt){zt&&(typeof Object.setPrototypeOf==\"function\"?(Qt||(Qt=Object.create(Object.prototype),tn(Qt)),Object.setPrototypeOf(Dt,Qt)):tn(Dt))}e.attachFlowNodeDebugInfo=kn;let _n;function Gt(Dt){\"__tsDebuggerDisplay\"in Dt||Object.defineProperties(Dt,{__tsDebuggerDisplay:{value(pn){return pn=String(pn).replace(/(?:,[\\s\\w\\d_]+:[^,]+)+\\]$/,\"]\"),`NodeArray ${pn}`}}})}function $n(Dt){zt&&(typeof Object.setPrototypeOf==\"function\"?(_n||(_n=Object.create(Array.prototype),Gt(_n)),Object.setPrototypeOf(Dt,_n)):Gt(Dt))}e.attachNodeArrayDebugInfo=$n;function ui(){if(zt)return;let Dt=new WeakMap,pn=new WeakMap;Object.defineProperties(ml.getSymbolConstructor().prototype,{__tsDebuggerDisplay:{value(){let Kn=this.flags&33554432?\"TransientSymbol\":\"Symbol\",hi=this.flags&-33554433;return`${Kn} '${fc(this)}'${hi?` (${Be(hi)})`:\"\"}`}},__debugFlags:{get(){return Be(this.flags)}}}),Object.defineProperties(ml.getTypeConstructor().prototype,{__tsDebuggerDisplay:{value(){let Kn=this.flags&98304?\"NullableType\":this.flags&384?`LiteralType ${JSON.stringify(this.value)}`:this.flags&2048?`LiteralType ${this.value.negative?\"-\":\"\"}${this.value.base10Value}n`:this.flags&8192?\"UniqueESSymbolType\":this.flags&32?\"EnumType\":this.flags&67359327?`IntrinsicType ${this.intrinsicName}`:this.flags&1048576?\"UnionType\":this.flags&2097152?\"IntersectionType\":this.flags&4194304?\"IndexType\":this.flags&8388608?\"IndexedAccessType\":this.flags&16777216?\"ConditionalType\":this.flags&33554432?\"SubstitutionType\":this.flags&262144?\"TypeParameter\":this.flags&524288?this.objectFlags&3?\"InterfaceType\":this.objectFlags&4?\"TypeReference\":this.objectFlags&8?\"TupleType\":this.objectFlags&16?\"AnonymousType\":this.objectFlags&32?\"MappedType\":this.objectFlags&1024?\"ReverseMappedType\":this.objectFlags&256?\"EvolvingArrayType\":\"ObjectType\":\"Type\",hi=this.flags&524288?this.objectFlags&-1344:0;return`${Kn}${this.symbol?` '${fc(this.symbol)}'`:\"\"}${hi?` (${Ye(hi)})`:\"\"}`}},__debugFlags:{get(){return Ne(this.flags)}},__debugObjectFlags:{get(){return this.flags&524288?Ye(this.objectFlags):\"\"}},__debugTypeToString:{value(){let Kn=Dt.get(this);return Kn===void 0&&(Kn=this.checker.typeToString(this),Dt.set(this,Kn)),Kn}}}),Object.defineProperties(ml.getSignatureConstructor().prototype,{__debugFlags:{get(){return Le(this.flags)}},__debugSignatureToString:{value(){var Kn;return(Kn=this.checker)==null?void 0:Kn.signatureToString(this)}}});let An=[ml.getNodeConstructor(),ml.getIdentifierConstructor(),ml.getTokenConstructor(),ml.getSourceFileConstructor()];for(let Kn of An)fs(Kn.prototype,\"__debugKind\")||Object.defineProperties(Kn.prototype,{__tsDebuggerDisplay:{value(){return`${tc(this)?\"GeneratedIdentifier\":Re(this)?`Identifier '${vr(this)}'`:pi(this)?`PrivateIdentifier '${vr(this)}'`:yo(this)?`StringLiteral ${JSON.stringify(this.text.length<10?this.text:this.text.slice(10)+\"...\")}`:Vf(this)?`NumericLiteral ${this.text}`:a3(this)?`BigIntLiteral ${this.text}n`:_c(this)?\"TypeParameterDeclaration\":ha(this)?\"ParameterDeclaration\":Ec(this)?\"ConstructorDeclaration\":p_(this)?\"GetAccessorDeclaration\":Sf(this)?\"SetAccessorDeclaration\":_2(this)?\"CallSignatureDeclaration\":uO(this)?\"ConstructSignatureDeclaration\":kS(this)?\"IndexSignatureDeclaration\":l3(this)?\"TypePredicateNode\":m_(this)?\"TypeReferenceNode\":Jm(this)?\"FunctionTypeNode\":yL(this)?\"ConstructorTypeNode\":vL(this)?\"TypeQueryNode\":Rd(this)?\"TypeLiteralNode\":wz(this)?\"ArrayTypeNode\":p2(this)?\"TupleTypeNode\":Rz(this)?\"OptionalTypeNode\":Oz(this)?\"RestTypeNode\":DS(this)?\"UnionTypeNode\":dO(this)?\"IntersectionTypeNode\":m2(this)?\"ConditionalTypeNode\":h2(this)?\"InferTypeNode\":wS(this)?\"ParenthesizedTypeNode\":u3(this)?\"ThisTypeNode\":RS(this)?\"TypeOperatorNode\":OS(this)?\"IndexedAccessTypeNode\":EL(this)?\"MappedTypeNode\":mb(this)?\"LiteralTypeNode\":bL(this)?\"NamedTupleMember\":Mh(this)?\"ImportTypeNode\":Ve(this.kind)}${this.flags?` (${ke(this.flags)})`:\"\"}`}},__debugKind:{get(){return Ve(this.kind)}},__debugNodeFlags:{get(){return ke(this.flags)}},__debugModifierFlags:{get(){return Pe(qce(this))}},__debugTransformFlags:{get(){return Ce(this.transformFlags)}},__debugIsParseTreeNode:{get(){return dI(this)}},__debugEmitFlags:{get(){return Ie(Ya(this))}},__debugGetText:{value(hi){if(ws(this))return\"\";let ri=pn.get(this);if(ri===void 0){let vn=ea(this),Ht=vn&&Gn(vn);ri=Ht?k0(Ht,vn,hi):\"\",pn.set(this,ri)}return ri}}});zt=!0}e.enableDebugInfo=ui;function Ni(Dt){let pn=Dt&7,An=pn===0?\"in out\":pn===3?\"[bivariant]\":pn===2?\"in\":pn===1?\"out\":pn===4?\"[independent]\":\"\";return Dt&8?An+=\" (unmeasurable)\":Dt&16&&(An+=\" (unreliable)\"),An}e.formatVariance=Ni;class Pi{__debugToString(){var pn;switch(this.kind){case 3:return((pn=this.debugInfo)==null?void 0:pn.call(this))||\"(function mapper)\";case 0:return`${this.source.__debugTypeToString()} -> ${this.target.__debugTypeToString()}`;case 1:return kU(this.sources,this.targets||on(this.sources,()=>\"any\"),(An,Kn)=>`${An.__debugTypeToString()} -> ${typeof Kn==\"string\"?Kn:Kn.__debugTypeToString()}`).join(\", \");case 2:return kU(this.sources,this.targets,(An,Kn)=>`${An.__debugTypeToString()} -> ${Kn().__debugTypeToString()}`).join(\", \");case 5:case 4:return`m1: ${this.mapper1.__debugToString().split(`\n`).join(`\n    `)}\nm2: ${this.mapper2.__debugToString().split(`\n`).join(`\n    `)}`;default:return W(this)}}}e.DebugTypeMapper=Pi;function gr(Dt){return e.isDebugging?Object.setPrototypeOf(Dt,Pi.prototype):Dt}e.attachDebugPrototypeIfDebug=gr;function pt(Dt){return console.log(nn(Dt))}e.printControlFlowGraph=pt;function nn(Dt){let pn=-1;function An(pe){return pe.id||(pe.id=pn,pn--),pe.id}let Kn;(pe=>{pe.lr=\"\\u2500\",pe.ud=\"\\u2502\",pe.dr=\"\\u256D\",pe.dl=\"\\u256E\",pe.ul=\"\\u256F\",pe.ur=\"\\u2570\",pe.udr=\"\\u251C\",pe.udl=\"\\u2524\",pe.dlr=\"\\u252C\",pe.ulr=\"\\u2534\",pe.udlr=\"\\u256B\"})(Kn||(Kn={}));let hi;(pe=>{pe[pe.None=0]=\"None\",pe[pe.Up=1]=\"Up\",pe[pe.Down=2]=\"Down\",pe[pe.Left=4]=\"Left\",pe[pe.Right=8]=\"Right\",pe[pe.UpDown=3]=\"UpDown\",pe[pe.LeftRight=12]=\"LeftRight\",pe[pe.UpLeft=5]=\"UpLeft\",pe[pe.UpRight=9]=\"UpRight\",pe[pe.DownLeft=6]=\"DownLeft\",pe[pe.DownRight=10]=\"DownRight\",pe[pe.UpDownLeft=7]=\"UpDownLeft\",pe[pe.UpDownRight=11]=\"UpDownRight\",pe[pe.UpLeftRight=13]=\"UpLeftRight\",pe[pe.DownLeftRight=14]=\"DownLeftRight\",pe[pe.UpDownLeftRight=15]=\"UpDownLeftRight\",pe[pe.NoChildren=16]=\"NoChildren\"})(hi||(hi={}));let ri=2032,vn=882,Ht=Object.create(null),En=[],dr=[],Cr=G(Dt,new Set);for(let pe of En)pe.text=ae(pe.flowNode,pe.circular),je(pe);let Se=Ge(Cr),at=kt(Se);return Kt(Cr,0),rt();function Tt(pe){return!!(pe.flags&128)}function ve(pe){return!!(pe.flags&12)&&!!pe.antecedents}function nt(pe){return!!(pe.flags&ri)}function ce(pe){return!!(pe.flags&vn)}function Q(pe){let z=[];for(let Te of pe.edges)Te.source===pe&&z.push(Te.target);return z}function ue(pe){let z=[];for(let Te of pe.edges)Te.target===pe&&z.push(Te.source);return z}function G(pe,z){let Te=An(pe),j=Ht[Te];if(j&&z.has(pe))return j.circular=!0,j={id:-1,flowNode:pe,edges:[],text:\"\",lane:-1,endLane:-1,level:-1,circular:\"circularity\"},En.push(j),j;if(z.add(pe),!j)if(Ht[Te]=j={id:Te,flowNode:pe,edges:[],text:\"\",lane:-1,endLane:-1,level:-1,circular:!1},En.push(j),ve(pe))for(let yt of pe.antecedents)Oe(j,yt,z);else nt(pe)&&Oe(j,pe.antecedent,z);return z.delete(pe),j}function Oe(pe,z,Te){let j=G(z,Te),yt={source:pe,target:j};dr.push(yt),pe.edges.push(yt),j.edges.push(yt)}function je(pe){if(pe.level!==-1)return pe.level;let z=0;for(let Te of ue(pe))z=Math.max(z,je(Te)+1);return pe.level=z}function Ge(pe){let z=0;for(let Te of Q(pe))z=Math.max(z,Ge(Te));return z+1}function kt(pe){let z=Ke(Array(pe),0);for(let Te of En)z[Te.level]=Math.max(z[Te.level],Te.text.length);return z}function Kt(pe,z){if(pe.lane===-1){pe.lane=z,pe.endLane=z;let Te=Q(pe);for(let j=0;j<Te.length;j++){j>0&&z++;let yt=Te[j];Kt(yt,z),yt.endLane>pe.endLane&&(z=yt.endLane)}pe.endLane=z}}function ln(pe){if(pe&2)return\"Start\";if(pe&4)return\"Branch\";if(pe&8)return\"Loop\";if(pe&16)return\"Assignment\";if(pe&32)return\"True\";if(pe&64)return\"False\";if(pe&128)return\"SwitchClause\";if(pe&256)return\"ArrayMutation\";if(pe&512)return\"Call\";if(pe&1024)return\"ReduceLabel\";if(pe&1)return\"Unreachable\";throw new Error}function ir(pe){let z=Gn(pe);return k0(z,pe,!1)}function ae(pe,z){let Te=ln(pe.flags);if(z&&(Te=`${Te}#${An(pe)}`),ce(pe))pe.node&&(Te+=` (${ir(pe.node)})`);else if(Tt(pe)){let j=[];for(let yt=pe.clauseStart;yt<pe.clauseEnd;yt++){let lt=pe.switchStatement.caseBlock.clauses[yt];yO(lt)?j.push(\"default\"):j.push(ir(lt.expression))}Te+=` (${j.join(\", \")})`}return z===\"circularity\"?`Circular(${Te})`:Te}function rt(){let pe=at.length,z=En.reduce((Qe,Vt)=>Math.max(Qe,Vt.lane),0)+1,Te=Ke(Array(z),\"\"),j=at.map(()=>Array(z)),yt=at.map(()=>Ke(Array(z),0));for(let Qe of En){j[Qe.level][Qe.lane]=Qe;let Vt=Q(Qe);for(let jr=0;jr<Vt.length;jr++){let ei=Vt[jr],Kr=8;ei.lane===Qe.lane&&(Kr|=4),jr>0&&(Kr|=1),jr<Vt.length-1&&(Kr|=2),yt[Qe.level][ei.lane]|=Kr}Vt.length===0&&(yt[Qe.level][Qe.lane]|=16);let Hn=ue(Qe);for(let jr=0;jr<Hn.length;jr++){let ei=Hn[jr],Kr=4;jr>0&&(Kr|=1),jr<Hn.length-1&&(Kr|=2),yt[Qe.level-1][ei.lane]|=Kr}}for(let Qe=0;Qe<pe;Qe++)for(let Vt=0;Vt<z;Vt++){let Hn=Qe>0?yt[Qe-1][Vt]:0,jr=Vt>0?yt[Qe][Vt-1]:0,ei=yt[Qe][Vt];ei||(Hn&8&&(ei|=12),jr&2&&(ei|=3),yt[Qe][Vt]=ei)}for(let Qe=0;Qe<pe;Qe++)for(let Vt=0;Vt<Te.length;Vt++){let Hn=yt[Qe][Vt],jr=Hn&4?\"\\u2500\":\" \",ei=j[Qe][Vt];ei?(lt(Vt,ei.text),Qe<pe-1&&(lt(Vt,\" \"),lt(Vt,oe(jr,at[Qe]-ei.text.length)))):Qe<pe-1&&lt(Vt,oe(jr,at[Qe]+1)),lt(Vt,Ot(Hn)),lt(Vt,Hn&8&&Qe<pe-1&&!j[Qe+1][Vt]?\"\\u2500\":\" \")}return`\n${Te.join(`\n`)}\n`;function lt(Qe,Vt){Te[Qe]+=Vt}}function Ot(pe){switch(pe){case 3:return\"\\u2502\";case 12:return\"\\u2500\";case 5:return\"\\u256F\";case 9:return\"\\u2570\";case 6:return\"\\u256E\";case 10:return\"\\u256D\";case 7:return\"\\u2524\";case 11:return\"\\u251C\";case 13:return\"\\u2534\";case 14:return\"\\u252C\";case 15:return\"\\u256B\"}return\" \"}function Ke(pe,z){if(pe.fill)pe.fill(z);else for(let Te=0;Te<pe.length;Te++)pe[Te]=z;return pe}function oe(pe,z){if(pe.repeat)return z>0?pe.repeat(z):\"\";let Te=\"\";for(;Te.length<z;)Te+=pe;return Te}}e.formatControlFlowGraph=nn})(L||(L={}))}});function Fae(e){let t=Bae.exec(e);if(!t)return;let[,r,i=\"0\",o=\"0\",s=\"\",l=\"\"]=t;if(!(s&&!Uae.test(s))&&!(l&&!jae.test(l)))return{major:parseInt(r,10),minor:parseInt(i,10),patch:parseInt(o,10),prerelease:s,build:l}}function Uke(e,t){if(e===t)return 0;if(e.length===0)return t.length===0?0:1;if(t.length===0)return-1;let r=Math.min(e.length,t.length);for(let i=0;i<r;i++){let o=e[i],s=t[i];if(o===s)continue;let l=tV.test(o),f=tV.test(s);if(l||f){if(l!==f)return l?-1:1;let d=Es(+o,+s);if(d)return d}else{let d=su(o,s);if(d)return d}}return Es(e.length,t.length)}function Gae(e){let t=[];for(let r of v0(e).split(Wae)){if(!r)continue;let i=[];r=v0(r);let o=Kae.exec(r);if(o){if(!Vke(o[1],o[2],i))return}else for(let s of r.split(zae)){let l=qae.exec(v0(s));if(!l||!jke(l[1],l[2],i))return}t.push(i)}return t}function eV(e){let t=Jae.exec(e);if(!t)return;let[,r,i=\"*\",o=\"*\",s,l]=t;return{version:new r_(mf(r)?0:parseInt(r,10),mf(r)||mf(i)?0:parseInt(i,10),mf(r)||mf(i)||mf(o)?0:parseInt(o,10),s,l),major:r,minor:i,patch:o}}function Vke(e,t,r){let i=eV(e);if(!i)return!1;let o=eV(t);return o?(mf(i.major)||r.push(dp(\">=\",i.version)),mf(o.major)||r.push(mf(o.minor)?dp(\"<\",o.version.increment(\"major\")):mf(o.patch)?dp(\"<\",o.version.increment(\"minor\")):dp(\"<=\",o.version)),!0):!1}function jke(e,t,r){let i=eV(t);if(!i)return!1;let{version:o,major:s,minor:l,patch:f}=i;if(mf(s))(e===\"<\"||e===\">\")&&r.push(dp(\"<\",r_.zero));else switch(e){case\"~\":r.push(dp(\">=\",o)),r.push(dp(\"<\",o.increment(mf(l)?\"major\":\"minor\")));break;case\"^\":r.push(dp(\">=\",o)),r.push(dp(\"<\",o.increment(o.major>0||mf(l)?\"major\":o.minor>0||mf(f)?\"minor\":\"patch\")));break;case\"<\":case\">=\":r.push(mf(l)||mf(f)?dp(e,o.with({prerelease:\"0\"})):dp(e,o));break;case\"<=\":case\">\":r.push(mf(l)?dp(e===\"<=\"?\"<\":\">=\",o.increment(\"major\").with({prerelease:\"0\"})):mf(f)?dp(e===\"<=\"?\"<\":\">=\",o.increment(\"minor\").with({prerelease:\"0\"})):dp(e,o));break;case\"=\":case void 0:mf(l)||mf(f)?(r.push(dp(\">=\",o.with({prerelease:\"0\"}))),r.push(dp(\"<\",o.increment(mf(l)?\"major\":\"minor\").with({prerelease:\"0\"})))):r.push(dp(\"=\",o));break;default:return!1}return!0}function mf(e){return e===\"*\"||e===\"x\"||e===\"X\"}function dp(e,t){return{operator:e,operand:t}}function Hke(e,t){if(t.length===0)return!0;for(let r of t)if(Wke(e,r))return!0;return!1}function Wke(e,t){for(let r of t)if(!zke(e,r.operator,r.operand))return!1;return!0}function zke(e,t,r){let i=e.compareTo(r);switch(t){case\"<\":return i<0;case\"<=\":return i<=0;case\">\":return i>0;case\">=\":return i>=0;case\"=\":return i===0;default:return L.assertNever(t)}}function Jke(e){return on(e,Kke).join(\" || \")||\"*\"}function Kke(e){return on(e,qke).join(\" \")}function qke(e){return`${e.operator}${e.operand}`}var Bae,Uae,Vae,jae,Hae,tV,K1,r_,mA,Wae,zae,Jae,Kae,qae,Xke=gt({\"src/compiler/semver.ts\"(){\"use strict\";fa(),Bae=/^(0|[1-9]\\d*)(?:\\.(0|[1-9]\\d*)(?:\\.(0|[1-9]\\d*)(?:\\-([a-z0-9-.]+))?(?:\\+([a-z0-9-.]+))?)?)?$/i,Uae=/^(?:0|[1-9]\\d*|[a-z-][a-z0-9-]*)(?:\\.(?:0|[1-9]\\d*|[a-z-][a-z0-9-]*))*$/i,Vae=/^(?:0|[1-9]\\d*|[a-z-][a-z0-9-]*)$/i,jae=/^[a-z0-9-]+(?:\\.[a-z0-9-]+)*$/i,Hae=/^[a-z0-9-]+$/i,tV=/^(0|[1-9]\\d*)$/,K1=class{constructor(e,t=0,r=0,i=\"\",o=\"\"){typeof e==\"string\"&&({major:e,minor:t,patch:r,prerelease:i,build:o}=L.checkDefined(Fae(e),\"Invalid version\")),L.assert(e>=0,\"Invalid argument: major\"),L.assert(t>=0,\"Invalid argument: minor\"),L.assert(r>=0,\"Invalid argument: patch\");let s=i?ba(i)?i:i.split(\".\"):Je,l=o?ba(o)?o:o.split(\".\"):Je;L.assert(Ji(s,f=>Vae.test(f)),\"Invalid argument: prerelease\"),L.assert(Ji(l,f=>Hae.test(f)),\"Invalid argument: build\"),this.major=e,this.minor=t,this.patch=r,this.prerelease=s,this.build=l}static tryParse(e){let t=Fae(e);if(!t)return;let{major:r,minor:i,patch:o,prerelease:s,build:l}=t;return new K1(r,i,o,s,l)}compareTo(e){return this===e?0:e===void 0?1:Es(this.major,e.major)||Es(this.minor,e.minor)||Es(this.patch,e.patch)||Uke(this.prerelease,e.prerelease)}increment(e){switch(e){case\"major\":return new K1(this.major+1,0,0);case\"minor\":return new K1(this.major,this.minor+1,0);case\"patch\":return new K1(this.major,this.minor,this.patch+1);default:return L.assertNever(e)}}with(e){let{major:t=this.major,minor:r=this.minor,patch:i=this.patch,prerelease:o=this.prerelease,build:s=this.build}=e;return new K1(t,r,i,o,s)}toString(){let e=`${this.major}.${this.minor}.${this.patch}`;return vt(this.prerelease)&&(e+=`-${this.prerelease.join(\".\")}`),vt(this.build)&&(e+=`+${this.build.join(\".\")}`),e}},r_=K1,r_.zero=new K1(0,0,0,[\"0\"]),mA=class{constructor(e){this._alternatives=e?L.checkDefined(Gae(e),\"Invalid range spec.\"):Je}static tryParse(e){let t=Gae(e);if(t){let r=new mA(\"\");return r._alternatives=t,r}}test(e){return typeof e==\"string\"&&(e=new r_(e)),Hke(e,this._alternatives)}toString(){return Jke(this._alternatives)}},Wae=/\\|\\|/g,zae=/\\s+/g,Jae=/^([xX*0]|[1-9]\\d*)(?:\\.([xX*0]|[1-9]\\d*)(?:\\.([xX*0]|[1-9]\\d*)(?:-([a-z0-9-.]+))?(?:\\+([a-z0-9-.]+))?)?)?$/i,Kae=/^\\s*([a-z0-9-+.*]+)\\s+-\\s+([a-z0-9-+.*]+)\\s*$/i,qae=/^(~|\\^|<|<=|>|>=|=)?\\s*([a-z0-9-+.*]+)$/i}});function Xae(e,t){return typeof e==\"object\"&&typeof e.timeOrigin==\"number\"&&typeof e.mark==\"function\"&&typeof e.measure==\"function\"&&typeof e.now==\"function\"&&typeof e.clearMarks==\"function\"&&typeof e.clearMeasures==\"function\"&&typeof t==\"function\"}function Yke(){if(typeof performance==\"object\"&&typeof PerformanceObserver==\"function\"&&Xae(performance,PerformanceObserver))return{shouldWriteNativeEvents:!0,performance,PerformanceObserver}}function $ke(){if(qU())try{let e,{performance:t,PerformanceObserver:r}=d0(\"perf_hooks\");if(Xae(t,r)){e=t;let i=new r_(process.versions.node);return new mA(\"<12.16.3 || 13 <13.13\").test(i)&&(e={get timeOrigin(){return t.timeOrigin},now(){return t.now()},mark(s){return t.mark(s)},measure(s,l=\"nodeStart\",f){f===void 0&&(f=\"__performance.measure-fix__\",t.mark(f)),t.measure(s,l,f),f===\"__performance.measure-fix__\"&&t.clearMarks(\"__performance.measure-fix__\")},clearMarks(s){return t.clearMarks(s)},clearMeasures(s){return t.clearMeasures(s)}}),{shouldWriteNativeEvents:!1,performance:e,PerformanceObserver:r}}}catch{}}function Yae(){return S8}var S8,nV,Ms,Qke=gt({\"src/compiler/performanceCore.ts\"(){\"use strict\";fa(),S8=Yke()||$ke(),nV=S8?.performance,Ms=nV?()=>nV.now():Date.now?Date.now:()=>+new Date}}),$ae,QD,Qae,fp,Zke=gt({\"src/compiler/perfLogger.ts\"(){\"use strict\";fa(),$ae={logEvent:Ba,logErrEvent:Ba,logPerfEvent:Ba,logInfoEvent:Ba,logStartCommand:Ba,logStopCommand:Ba,logStartUpdateProgram:Ba,logStopUpdateProgram:Ba,logStartUpdateGraph:Ba,logStopUpdateGraph:Ba,logStartResolveModule:Ba,logStopResolveModule:Ba,logStartParseSourceFile:Ba,logStopParseSourceFile:Ba,logStartReadFile:Ba,logStopReadFile:Ba,logStartBindFile:Ba,logStopBindFile:Ba,logStartScheduledOperation:Ba,logStopScheduledOperation:Ba};try{let e=(Qae=process.env.TS_ETW_MODULE_PATH)!=null?Qae:\"./node_modules/@microsoft/typescript-etw\";QD=d0(e)}catch{QD=void 0}fp=QD?.logEvent?QD:$ae}});function Zae(e,t,r,i){return e?x8(t,r,i):A8}function x8(e,t,r){let i=0;return{enter:o,exit:s};function o(){++i===1&&Fs(t)}function s(){--i===0?(Fs(r),hf(e,t,r)):i<0&&L.fail(\"enter/exit count does not match.\")}}function Fs(e){var t;if(q1){let r=(t=hA.get(e))!=null?t:0;hA.set(e,r+1),X1.set(e,Ms()),b0?.mark(e),typeof onProfilerEvent==\"function\"&&onProfilerEvent(e)}}function hf(e,t,r){var i,o;if(q1){let s=(i=r!==void 0?X1.get(r):void 0)!=null?i:Ms(),l=(o=t!==void 0?X1.get(t):void 0)!=null?o:rV,f=Y1.get(e)||0;Y1.set(e,f+(s-l)),b0?.measure(e,t,r)}}function eDe(e){return hA.get(e)||0}function tDe(e){return Y1.get(e)||0}function nDe(e){Y1.forEach((t,r)=>e(r,t))}function rDe(e){X1.forEach((t,r)=>e(r))}function iDe(e){e!==void 0?Y1.delete(e):Y1.clear(),b0?.clearMeasures(e)}function aDe(e){e!==void 0?(hA.delete(e),X1.delete(e)):(hA.clear(),X1.clear()),b0?.clearMarks(e)}function oDe(){return q1}function sDe(e=xl){var t;return q1||(q1=!0,eI||(eI=Yae()),eI&&(rV=eI.performance.timeOrigin,(eI.shouldWriteNativeEvents||(t=e?.cpuProfilingEnabled)!=null&&t.call(e)||e?.debugMode)&&(b0=eI.performance))),!0}function cDe(){q1&&(X1.clear(),hA.clear(),Y1.clear(),b0=void 0,q1=!1)}var eI,b0,A8,q1,rV,X1,hA,Y1,lDe=gt({\"src/compiler/performance.ts\"(){\"use strict\";fa(),A8={enter:Ba,exit:Ba},q1=!1,rV=Ms(),X1=new Map,hA=new Map,Y1=new Map}}),ZD={};Mo(ZD,{clearMarks:()=>aDe,clearMeasures:()=>iDe,createTimer:()=>x8,createTimerIf:()=>Zae,disable:()=>cDe,enable:()=>sDe,forEachMark:()=>rDe,forEachMeasure:()=>nDe,getCount:()=>eDe,getDuration:()=>tDe,isEnabled:()=>oDe,mark:()=>Fs,measure:()=>hf,nullTimer:()=>A8});var E0=gt({\"src/compiler/_namespaces/ts.performance.ts\"(){\"use strict\";lDe()}}),ai,ew,eoe,toe,uDe=gt({\"src/compiler/tracing.ts\"(){\"use strict\";fa(),E0(),(e=>{let t,r=0,i=0,o,s=[],l,f=[];function d(R,ie,$){if(L.assert(!ai,\"Tracing already started\"),t===void 0)try{t=d0(\"fs\")}catch(le){throw new Error(`tracing requires having fs\n(original error: ${le.message||le})`)}o=R,s.length=0,l===void 0&&(l=vi(ie,\"legend.json\")),t.existsSync(ie)||t.mkdirSync(ie,{recursive:!0});let fe=o===\"build\"?`.${process.pid}-${++r}`:o===\"server\"?`.${process.pid}`:\"\",Z=vi(ie,`trace${fe}.json`),U=vi(ie,`types${fe}.json`);f.push({configFilePath:$,tracePath:Z,typesPath:U}),i=t.openSync(Z,\"w\"),ai=e;let re={cat:\"__metadata\",ph:\"M\",ts:1e3*Ms(),pid:1,tid:1};t.writeSync(i,`[\n`+[{name:\"process_name\",args:{name:\"tsc\"},...re},{name:\"thread_name\",args:{name:\"Main\"},...re},{name:\"TracingStartedInBrowser\",...re,cat:\"disabled-by-default-devtools.timeline\"}].map(le=>JSON.stringify(le)).join(`,\n`))}e.startTracing=d;function g(){L.assert(ai,\"Tracing is not in progress\"),L.assert(!!s.length==(o!==\"server\")),t.writeSync(i,`\n]\n`),t.closeSync(i),ai=void 0,s.length?W(s):f[f.length-1].typesPath=void 0}e.stopTracing=g;function m(R){o!==\"server\"&&s.push(R)}e.recordType=m;let v;(R=>{R.Parse=\"parse\",R.Program=\"program\",R.Bind=\"bind\",R.Check=\"check\",R.CheckTypes=\"checkTypes\",R.Emit=\"emit\",R.Session=\"session\"})(v=e.Phase||(e.Phase={}));function S(R,ie,$){B(\"I\",R,ie,$,'\"s\":\"g\"')}e.instant=S;let x=[];function A(R,ie,$,fe=!1){fe&&B(\"B\",R,ie,$),x.push({phase:R,name:ie,args:$,time:1e3*Ms(),separateBeginAndEnd:fe})}e.push=A;function w(R){L.assert(x.length>0),F(x.length-1,1e3*Ms(),R),x.length--}e.pop=w;function C(){let R=1e3*Ms();for(let ie=x.length-1;ie>=0;ie--)F(ie,R);x.length=0}e.popAll=C;let P=1e3*10;function F(R,ie,$){let{phase:fe,name:Z,args:U,time:re,separateBeginAndEnd:le}=x[R];le?(L.assert(!$,\"`results` are not supported for events with `separateBeginAndEnd`\"),B(\"E\",fe,Z,U,void 0,ie)):P-re%P<=ie-re&&B(\"X\",fe,Z,{...U,results:$},`\"dur\":${ie-re}`,re)}function B(R,ie,$,fe,Z,U=1e3*Ms()){o===\"server\"&&ie===\"checkTypes\"||(Fs(\"beginTracing\"),t.writeSync(i,`,\n{\"pid\":1,\"tid\":1,\"ph\":\"${R}\",\"cat\":\"${ie}\",\"ts\":${U},\"name\":\"${$}\"`),Z&&t.writeSync(i,`,${Z}`),fe&&t.writeSync(i,`,\"args\":${JSON.stringify(fe)}`),t.writeSync(i,\"}\"),Fs(\"endTracing\"),hf(\"Tracing\",\"beginTracing\",\"endTracing\"))}function q(R){let ie=Gn(R);return ie?{path:ie.path,start:$(Gs(ie,R.pos)),end:$(Gs(ie,R.end))}:void 0;function $(fe){return{line:fe.line+1,character:fe.character+1}}}function W(R){var ie,$,fe,Z,U,re,le,_e,ge,X,Ve,we,ke,Pe,Ce,Ie,Be,Ne,Le,Ye,_t,ct;Fs(\"beginDumpTypes\");let Rt=f[f.length-1].typesPath,We=t.openSync(Rt,\"w\"),qe=new Map;t.writeSync(We,\"[\");let zt=R.length;for(let Qt=0;Qt<zt;Qt++){let tn=R[Qt],kn=tn.objectFlags,_n=(ie=tn.aliasSymbol)!=null?ie:tn.symbol,Gt;if(kn&16|tn.flags&2944)try{Gt=($=tn.checker)==null?void 0:$.typeToString(tn)}catch{Gt=void 0}let $n={};if(tn.flags&8388608){let An=tn;$n={indexedAccessObjectType:(fe=An.objectType)==null?void 0:fe.id,indexedAccessIndexType:(Z=An.indexType)==null?void 0:Z.id}}let ui={};if(kn&4){let An=tn;ui={instantiatedType:(U=An.target)==null?void 0:U.id,typeArguments:(re=An.resolvedTypeArguments)==null?void 0:re.map(Kn=>Kn.id),referenceLocation:q(An.node)}}let Ni={};if(tn.flags&16777216){let An=tn;Ni={conditionalCheckType:(le=An.checkType)==null?void 0:le.id,conditionalExtendsType:(_e=An.extendsType)==null?void 0:_e.id,conditionalTrueType:(X=(ge=An.resolvedTrueType)==null?void 0:ge.id)!=null?X:-1,conditionalFalseType:(we=(Ve=An.resolvedFalseType)==null?void 0:Ve.id)!=null?we:-1}}let Pi={};if(tn.flags&33554432){let An=tn;Pi={substitutionBaseType:(ke=An.baseType)==null?void 0:ke.id,constraintType:(Pe=An.constraint)==null?void 0:Pe.id}}let gr={};if(kn&1024){let An=tn;gr={reverseMappedSourceType:(Ce=An.source)==null?void 0:Ce.id,reverseMappedMappedType:(Ie=An.mappedType)==null?void 0:Ie.id,reverseMappedConstraintType:(Be=An.constraintType)==null?void 0:Be.id}}let pt={};if(kn&256){let An=tn;pt={evolvingArrayElementType:An.elementType.id,evolvingArrayFinalType:(Ne=An.finalArrayType)==null?void 0:Ne.id}}let nn,Dt=tn.checker.getRecursionIdentity(tn);Dt&&(nn=qe.get(Dt),nn||(nn=qe.size,qe.set(Dt,nn)));let pn={id:tn.id,intrinsicName:tn.intrinsicName,symbolName:_n?.escapedName&&Gi(_n.escapedName),recursionId:nn,isTuple:kn&8?!0:void 0,unionTypes:tn.flags&1048576?(Le=tn.types)==null?void 0:Le.map(An=>An.id):void 0,intersectionTypes:tn.flags&2097152?tn.types.map(An=>An.id):void 0,aliasTypeArguments:(Ye=tn.aliasTypeArguments)==null?void 0:Ye.map(An=>An.id),keyofType:tn.flags&4194304?(_t=tn.type)==null?void 0:_t.id:void 0,...$n,...ui,...Ni,...Pi,...gr,...pt,destructuringPattern:q(tn.pattern),firstDeclaration:q((ct=_n?.declarations)==null?void 0:ct[0]),flags:L.formatTypeFlags(tn.flags).split(\"|\"),display:Gt};t.writeSync(We,JSON.stringify(pn)),Qt<zt-1&&t.writeSync(We,`,\n`)}t.writeSync(We,`]\n`),t.closeSync(We),Fs(\"endDumpTypes\"),hf(\"Dump types\",\"beginDumpTypes\",\"endDumpTypes\")}function Y(){l&&t.writeFileSync(l,JSON.stringify(f))}e.dumpLegend=Y})(ew||(ew={})),eoe=ew.startTracing,toe=ew.dumpLegend}});function C8(e,t=!0){let r=nw[e.category];return t?r.toLowerCase():r}var I8,L8,k8,iV,D8,w8,aV,tw,oV,tI,R8,sV,cV,lV,uV,dV,fV,_V,pV,mV,hV,gV,yV,vV,bV,O8,EV,TV,SV,xV,N8,P8,AV,CV,IV,LV,kV,M8,DV,wV,RV,OV,NV,PV,nw,rw,MV,FV,GV,BV,F8,UV,VV,jV,HV,WV,zV,JV,KV,qV,G8,B8,U8,XV,YV,$V,QV,ZV,ej,tj,nj,iw,noe=gt({\"src/compiler/types.ts\"(){\"use strict\";I8=(e=>(e[e.Unknown=0]=\"Unknown\",e[e.EndOfFileToken=1]=\"EndOfFileToken\",e[e.SingleLineCommentTrivia=2]=\"SingleLineCommentTrivia\",e[e.MultiLineCommentTrivia=3]=\"MultiLineCommentTrivia\",e[e.NewLineTrivia=4]=\"NewLineTrivia\",e[e.WhitespaceTrivia=5]=\"WhitespaceTrivia\",e[e.ShebangTrivia=6]=\"ShebangTrivia\",e[e.ConflictMarkerTrivia=7]=\"ConflictMarkerTrivia\",e[e.NumericLiteral=8]=\"NumericLiteral\",e[e.BigIntLiteral=9]=\"BigIntLiteral\",e[e.StringLiteral=10]=\"StringLiteral\",e[e.JsxText=11]=\"JsxText\",e[e.JsxTextAllWhiteSpaces=12]=\"JsxTextAllWhiteSpaces\",e[e.RegularExpressionLiteral=13]=\"RegularExpressionLiteral\",e[e.NoSubstitutionTemplateLiteral=14]=\"NoSubstitutionTemplateLiteral\",e[e.TemplateHead=15]=\"TemplateHead\",e[e.TemplateMiddle=16]=\"TemplateMiddle\",e[e.TemplateTail=17]=\"TemplateTail\",e[e.OpenBraceToken=18]=\"OpenBraceToken\",e[e.CloseBraceToken=19]=\"CloseBraceToken\",e[e.OpenParenToken=20]=\"OpenParenToken\",e[e.CloseParenToken=21]=\"CloseParenToken\",e[e.OpenBracketToken=22]=\"OpenBracketToken\",e[e.CloseBracketToken=23]=\"CloseBracketToken\",e[e.DotToken=24]=\"DotToken\",e[e.DotDotDotToken=25]=\"DotDotDotToken\",e[e.SemicolonToken=26]=\"SemicolonToken\",e[e.CommaToken=27]=\"CommaToken\",e[e.QuestionDotToken=28]=\"QuestionDotToken\",e[e.LessThanToken=29]=\"LessThanToken\",e[e.LessThanSlashToken=30]=\"LessThanSlashToken\",e[e.GreaterThanToken=31]=\"GreaterThanToken\",e[e.LessThanEqualsToken=32]=\"LessThanEqualsToken\",e[e.GreaterThanEqualsToken=33]=\"GreaterThanEqualsToken\",e[e.EqualsEqualsToken=34]=\"EqualsEqualsToken\",e[e.ExclamationEqualsToken=35]=\"ExclamationEqualsToken\",e[e.EqualsEqualsEqualsToken=36]=\"EqualsEqualsEqualsToken\",e[e.ExclamationEqualsEqualsToken=37]=\"ExclamationEqualsEqualsToken\",e[e.EqualsGreaterThanToken=38]=\"EqualsGreaterThanToken\",e[e.PlusToken=39]=\"PlusToken\",e[e.MinusToken=40]=\"MinusToken\",e[e.AsteriskToken=41]=\"AsteriskToken\",e[e.AsteriskAsteriskToken=42]=\"AsteriskAsteriskToken\",e[e.SlashToken=43]=\"SlashToken\",e[e.PercentToken=44]=\"PercentToken\",e[e.PlusPlusToken=45]=\"PlusPlusToken\",e[e.MinusMinusToken=46]=\"MinusMinusToken\",e[e.LessThanLessThanToken=47]=\"LessThanLessThanToken\",e[e.GreaterThanGreaterThanToken=48]=\"GreaterThanGreaterThanToken\",e[e.GreaterThanGreaterThanGreaterThanToken=49]=\"GreaterThanGreaterThanGreaterThanToken\",e[e.AmpersandToken=50]=\"AmpersandToken\",e[e.BarToken=51]=\"BarToken\",e[e.CaretToken=52]=\"CaretToken\",e[e.ExclamationToken=53]=\"ExclamationToken\",e[e.TildeToken=54]=\"TildeToken\",e[e.AmpersandAmpersandToken=55]=\"AmpersandAmpersandToken\",e[e.BarBarToken=56]=\"BarBarToken\",e[e.QuestionToken=57]=\"QuestionToken\",e[e.ColonToken=58]=\"ColonToken\",e[e.AtToken=59]=\"AtToken\",e[e.QuestionQuestionToken=60]=\"QuestionQuestionToken\",e[e.BacktickToken=61]=\"BacktickToken\",e[e.HashToken=62]=\"HashToken\",e[e.EqualsToken=63]=\"EqualsToken\",e[e.PlusEqualsToken=64]=\"PlusEqualsToken\",e[e.MinusEqualsToken=65]=\"MinusEqualsToken\",e[e.AsteriskEqualsToken=66]=\"AsteriskEqualsToken\",e[e.AsteriskAsteriskEqualsToken=67]=\"AsteriskAsteriskEqualsToken\",e[e.SlashEqualsToken=68]=\"SlashEqualsToken\",e[e.PercentEqualsToken=69]=\"PercentEqualsToken\",e[e.LessThanLessThanEqualsToken=70]=\"LessThanLessThanEqualsToken\",e[e.GreaterThanGreaterThanEqualsToken=71]=\"GreaterThanGreaterThanEqualsToken\",e[e.GreaterThanGreaterThanGreaterThanEqualsToken=72]=\"GreaterThanGreaterThanGreaterThanEqualsToken\",e[e.AmpersandEqualsToken=73]=\"AmpersandEqualsToken\",e[e.BarEqualsToken=74]=\"BarEqualsToken\",e[e.BarBarEqualsToken=75]=\"BarBarEqualsToken\",e[e.AmpersandAmpersandEqualsToken=76]=\"AmpersandAmpersandEqualsToken\",e[e.QuestionQuestionEqualsToken=77]=\"QuestionQuestionEqualsToken\",e[e.CaretEqualsToken=78]=\"CaretEqualsToken\",e[e.Identifier=79]=\"Identifier\",e[e.PrivateIdentifier=80]=\"PrivateIdentifier\",e[e.BreakKeyword=81]=\"BreakKeyword\",e[e.CaseKeyword=82]=\"CaseKeyword\",e[e.CatchKeyword=83]=\"CatchKeyword\",e[e.ClassKeyword=84]=\"ClassKeyword\",e[e.ConstKeyword=85]=\"ConstKeyword\",e[e.ContinueKeyword=86]=\"ContinueKeyword\",e[e.DebuggerKeyword=87]=\"DebuggerKeyword\",e[e.DefaultKeyword=88]=\"DefaultKeyword\",e[e.DeleteKeyword=89]=\"DeleteKeyword\",e[e.DoKeyword=90]=\"DoKeyword\",e[e.ElseKeyword=91]=\"ElseKeyword\",e[e.EnumKeyword=92]=\"EnumKeyword\",e[e.ExportKeyword=93]=\"ExportKeyword\",e[e.ExtendsKeyword=94]=\"ExtendsKeyword\",e[e.FalseKeyword=95]=\"FalseKeyword\",e[e.FinallyKeyword=96]=\"FinallyKeyword\",e[e.ForKeyword=97]=\"ForKeyword\",e[e.FunctionKeyword=98]=\"FunctionKeyword\",e[e.IfKeyword=99]=\"IfKeyword\",e[e.ImportKeyword=100]=\"ImportKeyword\",e[e.InKeyword=101]=\"InKeyword\",e[e.InstanceOfKeyword=102]=\"InstanceOfKeyword\",e[e.NewKeyword=103]=\"NewKeyword\",e[e.NullKeyword=104]=\"NullKeyword\",e[e.ReturnKeyword=105]=\"ReturnKeyword\",e[e.SuperKeyword=106]=\"SuperKeyword\",e[e.SwitchKeyword=107]=\"SwitchKeyword\",e[e.ThisKeyword=108]=\"ThisKeyword\",e[e.ThrowKeyword=109]=\"ThrowKeyword\",e[e.TrueKeyword=110]=\"TrueKeyword\",e[e.TryKeyword=111]=\"TryKeyword\",e[e.TypeOfKeyword=112]=\"TypeOfKeyword\",e[e.VarKeyword=113]=\"VarKeyword\",e[e.VoidKeyword=114]=\"VoidKeyword\",e[e.WhileKeyword=115]=\"WhileKeyword\",e[e.WithKeyword=116]=\"WithKeyword\",e[e.ImplementsKeyword=117]=\"ImplementsKeyword\",e[e.InterfaceKeyword=118]=\"InterfaceKeyword\",e[e.LetKeyword=119]=\"LetKeyword\",e[e.PackageKeyword=120]=\"PackageKeyword\",e[e.PrivateKeyword=121]=\"PrivateKeyword\",e[e.ProtectedKeyword=122]=\"ProtectedKeyword\",e[e.PublicKeyword=123]=\"PublicKeyword\",e[e.StaticKeyword=124]=\"StaticKeyword\",e[e.YieldKeyword=125]=\"YieldKeyword\",e[e.AbstractKeyword=126]=\"AbstractKeyword\",e[e.AccessorKeyword=127]=\"AccessorKeyword\",e[e.AsKeyword=128]=\"AsKeyword\",e[e.AssertsKeyword=129]=\"AssertsKeyword\",e[e.AssertKeyword=130]=\"AssertKeyword\",e[e.AnyKeyword=131]=\"AnyKeyword\",e[e.AsyncKeyword=132]=\"AsyncKeyword\",e[e.AwaitKeyword=133]=\"AwaitKeyword\",e[e.BooleanKeyword=134]=\"BooleanKeyword\",e[e.ConstructorKeyword=135]=\"ConstructorKeyword\",e[e.DeclareKeyword=136]=\"DeclareKeyword\",e[e.GetKeyword=137]=\"GetKeyword\",e[e.InferKeyword=138]=\"InferKeyword\",e[e.IntrinsicKeyword=139]=\"IntrinsicKeyword\",e[e.IsKeyword=140]=\"IsKeyword\",e[e.KeyOfKeyword=141]=\"KeyOfKeyword\",e[e.ModuleKeyword=142]=\"ModuleKeyword\",e[e.NamespaceKeyword=143]=\"NamespaceKeyword\",e[e.NeverKeyword=144]=\"NeverKeyword\",e[e.OutKeyword=145]=\"OutKeyword\",e[e.ReadonlyKeyword=146]=\"ReadonlyKeyword\",e[e.RequireKeyword=147]=\"RequireKeyword\",e[e.NumberKeyword=148]=\"NumberKeyword\",e[e.ObjectKeyword=149]=\"ObjectKeyword\",e[e.SatisfiesKeyword=150]=\"SatisfiesKeyword\",e[e.SetKeyword=151]=\"SetKeyword\",e[e.StringKeyword=152]=\"StringKeyword\",e[e.SymbolKeyword=153]=\"SymbolKeyword\",e[e.TypeKeyword=154]=\"TypeKeyword\",e[e.UndefinedKeyword=155]=\"UndefinedKeyword\",e[e.UniqueKeyword=156]=\"UniqueKeyword\",e[e.UnknownKeyword=157]=\"UnknownKeyword\",e[e.FromKeyword=158]=\"FromKeyword\",e[e.GlobalKeyword=159]=\"GlobalKeyword\",e[e.BigIntKeyword=160]=\"BigIntKeyword\",e[e.OverrideKeyword=161]=\"OverrideKeyword\",e[e.OfKeyword=162]=\"OfKeyword\",e[e.QualifiedName=163]=\"QualifiedName\",e[e.ComputedPropertyName=164]=\"ComputedPropertyName\",e[e.TypeParameter=165]=\"TypeParameter\",e[e.Parameter=166]=\"Parameter\",e[e.Decorator=167]=\"Decorator\",e[e.PropertySignature=168]=\"PropertySignature\",e[e.PropertyDeclaration=169]=\"PropertyDeclaration\",e[e.MethodSignature=170]=\"MethodSignature\",e[e.MethodDeclaration=171]=\"MethodDeclaration\",e[e.ClassStaticBlockDeclaration=172]=\"ClassStaticBlockDeclaration\",e[e.Constructor=173]=\"Constructor\",e[e.GetAccessor=174]=\"GetAccessor\",e[e.SetAccessor=175]=\"SetAccessor\",e[e.CallSignature=176]=\"CallSignature\",e[e.ConstructSignature=177]=\"ConstructSignature\",e[e.IndexSignature=178]=\"IndexSignature\",e[e.TypePredicate=179]=\"TypePredicate\",e[e.TypeReference=180]=\"TypeReference\",e[e.FunctionType=181]=\"FunctionType\",e[e.ConstructorType=182]=\"ConstructorType\",e[e.TypeQuery=183]=\"TypeQuery\",e[e.TypeLiteral=184]=\"TypeLiteral\",e[e.ArrayType=185]=\"ArrayType\",e[e.TupleType=186]=\"TupleType\",e[e.OptionalType=187]=\"OptionalType\",e[e.RestType=188]=\"RestType\",e[e.UnionType=189]=\"UnionType\",e[e.IntersectionType=190]=\"IntersectionType\",e[e.ConditionalType=191]=\"ConditionalType\",e[e.InferType=192]=\"InferType\",e[e.ParenthesizedType=193]=\"ParenthesizedType\",e[e.ThisType=194]=\"ThisType\",e[e.TypeOperator=195]=\"TypeOperator\",e[e.IndexedAccessType=196]=\"IndexedAccessType\",e[e.MappedType=197]=\"MappedType\",e[e.LiteralType=198]=\"LiteralType\",e[e.NamedTupleMember=199]=\"NamedTupleMember\",e[e.TemplateLiteralType=200]=\"TemplateLiteralType\",e[e.TemplateLiteralTypeSpan=201]=\"TemplateLiteralTypeSpan\",e[e.ImportType=202]=\"ImportType\",e[e.ObjectBindingPattern=203]=\"ObjectBindingPattern\",e[e.ArrayBindingPattern=204]=\"ArrayBindingPattern\",e[e.BindingElement=205]=\"BindingElement\",e[e.ArrayLiteralExpression=206]=\"ArrayLiteralExpression\",e[e.ObjectLiteralExpression=207]=\"ObjectLiteralExpression\",e[e.PropertyAccessExpression=208]=\"PropertyAccessExpression\",e[e.ElementAccessExpression=209]=\"ElementAccessExpression\",e[e.CallExpression=210]=\"CallExpression\",e[e.NewExpression=211]=\"NewExpression\",e[e.TaggedTemplateExpression=212]=\"TaggedTemplateExpression\",e[e.TypeAssertionExpression=213]=\"TypeAssertionExpression\",e[e.ParenthesizedExpression=214]=\"ParenthesizedExpression\",e[e.FunctionExpression=215]=\"FunctionExpression\",e[e.ArrowFunction=216]=\"ArrowFunction\",e[e.DeleteExpression=217]=\"DeleteExpression\",e[e.TypeOfExpression=218]=\"TypeOfExpression\",e[e.VoidExpression=219]=\"VoidExpression\",e[e.AwaitExpression=220]=\"AwaitExpression\",e[e.PrefixUnaryExpression=221]=\"PrefixUnaryExpression\",e[e.PostfixUnaryExpression=222]=\"PostfixUnaryExpression\",e[e.BinaryExpression=223]=\"BinaryExpression\",e[e.ConditionalExpression=224]=\"ConditionalExpression\",e[e.TemplateExpression=225]=\"TemplateExpression\",e[e.YieldExpression=226]=\"YieldExpression\",e[e.SpreadElement=227]=\"SpreadElement\",e[e.ClassExpression=228]=\"ClassExpression\",e[e.OmittedExpression=229]=\"OmittedExpression\",e[e.ExpressionWithTypeArguments=230]=\"ExpressionWithTypeArguments\",e[e.AsExpression=231]=\"AsExpression\",e[e.NonNullExpression=232]=\"NonNullExpression\",e[e.MetaProperty=233]=\"MetaProperty\",e[e.SyntheticExpression=234]=\"SyntheticExpression\",e[e.SatisfiesExpression=235]=\"SatisfiesExpression\",e[e.TemplateSpan=236]=\"TemplateSpan\",e[e.SemicolonClassElement=237]=\"SemicolonClassElement\",e[e.Block=238]=\"Block\",e[e.EmptyStatement=239]=\"EmptyStatement\",e[e.VariableStatement=240]=\"VariableStatement\",e[e.ExpressionStatement=241]=\"ExpressionStatement\",e[e.IfStatement=242]=\"IfStatement\",e[e.DoStatement=243]=\"DoStatement\",e[e.WhileStatement=244]=\"WhileStatement\",e[e.ForStatement=245]=\"ForStatement\",e[e.ForInStatement=246]=\"ForInStatement\",e[e.ForOfStatement=247]=\"ForOfStatement\",e[e.ContinueStatement=248]=\"ContinueStatement\",e[e.BreakStatement=249]=\"BreakStatement\",e[e.ReturnStatement=250]=\"ReturnStatement\",e[e.WithStatement=251]=\"WithStatement\",e[e.SwitchStatement=252]=\"SwitchStatement\",e[e.LabeledStatement=253]=\"LabeledStatement\",e[e.ThrowStatement=254]=\"ThrowStatement\",e[e.TryStatement=255]=\"TryStatement\",e[e.DebuggerStatement=256]=\"DebuggerStatement\",e[e.VariableDeclaration=257]=\"VariableDeclaration\",e[e.VariableDeclarationList=258]=\"VariableDeclarationList\",e[e.FunctionDeclaration=259]=\"FunctionDeclaration\",e[e.ClassDeclaration=260]=\"ClassDeclaration\",e[e.InterfaceDeclaration=261]=\"InterfaceDeclaration\",e[e.TypeAliasDeclaration=262]=\"TypeAliasDeclaration\",e[e.EnumDeclaration=263]=\"EnumDeclaration\",e[e.ModuleDeclaration=264]=\"ModuleDeclaration\",e[e.ModuleBlock=265]=\"ModuleBlock\",e[e.CaseBlock=266]=\"CaseBlock\",e[e.NamespaceExportDeclaration=267]=\"NamespaceExportDeclaration\",e[e.ImportEqualsDeclaration=268]=\"ImportEqualsDeclaration\",e[e.ImportDeclaration=269]=\"ImportDeclaration\",e[e.ImportClause=270]=\"ImportClause\",e[e.NamespaceImport=271]=\"NamespaceImport\",e[e.NamedImports=272]=\"NamedImports\",e[e.ImportSpecifier=273]=\"ImportSpecifier\",e[e.ExportAssignment=274]=\"ExportAssignment\",e[e.ExportDeclaration=275]=\"ExportDeclaration\",e[e.NamedExports=276]=\"NamedExports\",e[e.NamespaceExport=277]=\"NamespaceExport\",e[e.ExportSpecifier=278]=\"ExportSpecifier\",e[e.MissingDeclaration=279]=\"MissingDeclaration\",e[e.ExternalModuleReference=280]=\"ExternalModuleReference\",e[e.JsxElement=281]=\"JsxElement\",e[e.JsxSelfClosingElement=282]=\"JsxSelfClosingElement\",e[e.JsxOpeningElement=283]=\"JsxOpeningElement\",e[e.JsxClosingElement=284]=\"JsxClosingElement\",e[e.JsxFragment=285]=\"JsxFragment\",e[e.JsxOpeningFragment=286]=\"JsxOpeningFragment\",e[e.JsxClosingFragment=287]=\"JsxClosingFragment\",e[e.JsxAttribute=288]=\"JsxAttribute\",e[e.JsxAttributes=289]=\"JsxAttributes\",e[e.JsxSpreadAttribute=290]=\"JsxSpreadAttribute\",e[e.JsxExpression=291]=\"JsxExpression\",e[e.CaseClause=292]=\"CaseClause\",e[e.DefaultClause=293]=\"DefaultClause\",e[e.HeritageClause=294]=\"HeritageClause\",e[e.CatchClause=295]=\"CatchClause\",e[e.AssertClause=296]=\"AssertClause\",e[e.AssertEntry=297]=\"AssertEntry\",e[e.ImportTypeAssertionContainer=298]=\"ImportTypeAssertionContainer\",e[e.PropertyAssignment=299]=\"PropertyAssignment\",e[e.ShorthandPropertyAssignment=300]=\"ShorthandPropertyAssignment\",e[e.SpreadAssignment=301]=\"SpreadAssignment\",e[e.EnumMember=302]=\"EnumMember\",e[e.UnparsedPrologue=303]=\"UnparsedPrologue\",e[e.UnparsedPrepend=304]=\"UnparsedPrepend\",e[e.UnparsedText=305]=\"UnparsedText\",e[e.UnparsedInternalText=306]=\"UnparsedInternalText\",e[e.UnparsedSyntheticReference=307]=\"UnparsedSyntheticReference\",e[e.SourceFile=308]=\"SourceFile\",e[e.Bundle=309]=\"Bundle\",e[e.UnparsedSource=310]=\"UnparsedSource\",e[e.InputFiles=311]=\"InputFiles\",e[e.JSDocTypeExpression=312]=\"JSDocTypeExpression\",e[e.JSDocNameReference=313]=\"JSDocNameReference\",e[e.JSDocMemberName=314]=\"JSDocMemberName\",e[e.JSDocAllType=315]=\"JSDocAllType\",e[e.JSDocUnknownType=316]=\"JSDocUnknownType\",e[e.JSDocNullableType=317]=\"JSDocNullableType\",e[e.JSDocNonNullableType=318]=\"JSDocNonNullableType\",e[e.JSDocOptionalType=319]=\"JSDocOptionalType\",e[e.JSDocFunctionType=320]=\"JSDocFunctionType\",e[e.JSDocVariadicType=321]=\"JSDocVariadicType\",e[e.JSDocNamepathType=322]=\"JSDocNamepathType\",e[e.JSDoc=323]=\"JSDoc\",e[e.JSDocComment=323]=\"JSDocComment\",e[e.JSDocText=324]=\"JSDocText\",e[e.JSDocTypeLiteral=325]=\"JSDocTypeLiteral\",e[e.JSDocSignature=326]=\"JSDocSignature\",e[e.JSDocLink=327]=\"JSDocLink\",e[e.JSDocLinkCode=328]=\"JSDocLinkCode\",e[e.JSDocLinkPlain=329]=\"JSDocLinkPlain\",e[e.JSDocTag=330]=\"JSDocTag\",e[e.JSDocAugmentsTag=331]=\"JSDocAugmentsTag\",e[e.JSDocImplementsTag=332]=\"JSDocImplementsTag\",e[e.JSDocAuthorTag=333]=\"JSDocAuthorTag\",e[e.JSDocDeprecatedTag=334]=\"JSDocDeprecatedTag\",e[e.JSDocClassTag=335]=\"JSDocClassTag\",e[e.JSDocPublicTag=336]=\"JSDocPublicTag\",e[e.JSDocPrivateTag=337]=\"JSDocPrivateTag\",e[e.JSDocProtectedTag=338]=\"JSDocProtectedTag\",e[e.JSDocReadonlyTag=339]=\"JSDocReadonlyTag\",e[e.JSDocOverrideTag=340]=\"JSDocOverrideTag\",e[e.JSDocCallbackTag=341]=\"JSDocCallbackTag\",e[e.JSDocOverloadTag=342]=\"JSDocOverloadTag\",e[e.JSDocEnumTag=343]=\"JSDocEnumTag\",e[e.JSDocParameterTag=344]=\"JSDocParameterTag\",e[e.JSDocReturnTag=345]=\"JSDocReturnTag\",e[e.JSDocThisTag=346]=\"JSDocThisTag\",e[e.JSDocTypeTag=347]=\"JSDocTypeTag\",e[e.JSDocTemplateTag=348]=\"JSDocTemplateTag\",e[e.JSDocTypedefTag=349]=\"JSDocTypedefTag\",e[e.JSDocSeeTag=350]=\"JSDocSeeTag\",e[e.JSDocPropertyTag=351]=\"JSDocPropertyTag\",e[e.JSDocThrowsTag=352]=\"JSDocThrowsTag\",e[e.JSDocSatisfiesTag=353]=\"JSDocSatisfiesTag\",e[e.SyntaxList=354]=\"SyntaxList\",e[e.NotEmittedStatement=355]=\"NotEmittedStatement\",e[e.PartiallyEmittedExpression=356]=\"PartiallyEmittedExpression\",e[e.CommaListExpression=357]=\"CommaListExpression\",e[e.MergeDeclarationMarker=358]=\"MergeDeclarationMarker\",e[e.EndOfDeclarationMarker=359]=\"EndOfDeclarationMarker\",e[e.SyntheticReferenceExpression=360]=\"SyntheticReferenceExpression\",e[e.Count=361]=\"Count\",e[e.FirstAssignment=63]=\"FirstAssignment\",e[e.LastAssignment=78]=\"LastAssignment\",e[e.FirstCompoundAssignment=64]=\"FirstCompoundAssignment\",e[e.LastCompoundAssignment=78]=\"LastCompoundAssignment\",e[e.FirstReservedWord=81]=\"FirstReservedWord\",e[e.LastReservedWord=116]=\"LastReservedWord\",e[e.FirstKeyword=81]=\"FirstKeyword\",e[e.LastKeyword=162]=\"LastKeyword\",e[e.FirstFutureReservedWord=117]=\"FirstFutureReservedWord\",e[e.LastFutureReservedWord=125]=\"LastFutureReservedWord\",e[e.FirstTypeNode=179]=\"FirstTypeNode\",e[e.LastTypeNode=202]=\"LastTypeNode\",e[e.FirstPunctuation=18]=\"FirstPunctuation\",e[e.LastPunctuation=78]=\"LastPunctuation\",e[e.FirstToken=0]=\"FirstToken\",e[e.LastToken=162]=\"LastToken\",e[e.FirstTriviaToken=2]=\"FirstTriviaToken\",e[e.LastTriviaToken=7]=\"LastTriviaToken\",e[e.FirstLiteralToken=8]=\"FirstLiteralToken\",e[e.LastLiteralToken=14]=\"LastLiteralToken\",e[e.FirstTemplateToken=14]=\"FirstTemplateToken\",e[e.LastTemplateToken=17]=\"LastTemplateToken\",e[e.FirstBinaryOperator=29]=\"FirstBinaryOperator\",e[e.LastBinaryOperator=78]=\"LastBinaryOperator\",e[e.FirstStatement=240]=\"FirstStatement\",e[e.LastStatement=256]=\"LastStatement\",e[e.FirstNode=163]=\"FirstNode\",e[e.FirstJSDocNode=312]=\"FirstJSDocNode\",e[e.LastJSDocNode=353]=\"LastJSDocNode\",e[e.FirstJSDocTagNode=330]=\"FirstJSDocTagNode\",e[e.LastJSDocTagNode=353]=\"LastJSDocTagNode\",e[e.FirstContextualKeyword=126]=\"FirstContextualKeyword\",e[e.LastContextualKeyword=162]=\"LastContextualKeyword\",e))(I8||{}),L8=(e=>(e[e.None=0]=\"None\",e[e.Let=1]=\"Let\",e[e.Const=2]=\"Const\",e[e.NestedNamespace=4]=\"NestedNamespace\",e[e.Synthesized=8]=\"Synthesized\",e[e.Namespace=16]=\"Namespace\",e[e.OptionalChain=32]=\"OptionalChain\",e[e.ExportContext=64]=\"ExportContext\",e[e.ContainsThis=128]=\"ContainsThis\",e[e.HasImplicitReturn=256]=\"HasImplicitReturn\",e[e.HasExplicitReturn=512]=\"HasExplicitReturn\",e[e.GlobalAugmentation=1024]=\"GlobalAugmentation\",e[e.HasAsyncFunctions=2048]=\"HasAsyncFunctions\",e[e.DisallowInContext=4096]=\"DisallowInContext\",e[e.YieldContext=8192]=\"YieldContext\",e[e.DecoratorContext=16384]=\"DecoratorContext\",e[e.AwaitContext=32768]=\"AwaitContext\",e[e.DisallowConditionalTypesContext=65536]=\"DisallowConditionalTypesContext\",e[e.ThisNodeHasError=131072]=\"ThisNodeHasError\",e[e.JavaScriptFile=262144]=\"JavaScriptFile\",e[e.ThisNodeOrAnySubNodesHasError=524288]=\"ThisNodeOrAnySubNodesHasError\",e[e.HasAggregatedChildData=1048576]=\"HasAggregatedChildData\",e[e.PossiblyContainsDynamicImport=2097152]=\"PossiblyContainsDynamicImport\",e[e.PossiblyContainsImportMeta=4194304]=\"PossiblyContainsImportMeta\",e[e.JSDoc=8388608]=\"JSDoc\",e[e.Ambient=16777216]=\"Ambient\",e[e.InWithStatement=33554432]=\"InWithStatement\",e[e.JsonFile=67108864]=\"JsonFile\",e[e.TypeCached=134217728]=\"TypeCached\",e[e.Deprecated=268435456]=\"Deprecated\",e[e.BlockScoped=3]=\"BlockScoped\",e[e.ReachabilityCheckFlags=768]=\"ReachabilityCheckFlags\",e[e.ReachabilityAndEmitFlags=2816]=\"ReachabilityAndEmitFlags\",e[e.ContextFlags=50720768]=\"ContextFlags\",e[e.TypeExcludesFlags=40960]=\"TypeExcludesFlags\",e[e.PermanentlySetIncrementalFlags=6291456]=\"PermanentlySetIncrementalFlags\",e[e.IdentifierHasExtendedUnicodeEscape=128]=\"IdentifierHasExtendedUnicodeEscape\",e[e.IdentifierIsInJSDocNamespace=2048]=\"IdentifierIsInJSDocNamespace\",e))(L8||{}),k8=(e=>(e[e.None=0]=\"None\",e[e.Export=1]=\"Export\",e[e.Ambient=2]=\"Ambient\",e[e.Public=4]=\"Public\",e[e.Private=8]=\"Private\",e[e.Protected=16]=\"Protected\",e[e.Static=32]=\"Static\",e[e.Readonly=64]=\"Readonly\",e[e.Accessor=128]=\"Accessor\",e[e.Abstract=256]=\"Abstract\",e[e.Async=512]=\"Async\",e[e.Default=1024]=\"Default\",e[e.Const=2048]=\"Const\",e[e.HasComputedJSDocModifiers=4096]=\"HasComputedJSDocModifiers\",e[e.Deprecated=8192]=\"Deprecated\",e[e.Override=16384]=\"Override\",e[e.In=32768]=\"In\",e[e.Out=65536]=\"Out\",e[e.Decorator=131072]=\"Decorator\",e[e.HasComputedFlags=536870912]=\"HasComputedFlags\",e[e.AccessibilityModifier=28]=\"AccessibilityModifier\",e[e.ParameterPropertyModifier=16476]=\"ParameterPropertyModifier\",e[e.NonPublicAccessibilityModifier=24]=\"NonPublicAccessibilityModifier\",e[e.TypeScriptModifier=117086]=\"TypeScriptModifier\",e[e.ExportDefault=1025]=\"ExportDefault\",e[e.All=258047]=\"All\",e[e.Modifier=126975]=\"Modifier\",e))(k8||{}),iV=(e=>(e[e.None=0]=\"None\",e[e.IntrinsicNamedElement=1]=\"IntrinsicNamedElement\",e[e.IntrinsicIndexedElement=2]=\"IntrinsicIndexedElement\",e[e.IntrinsicElement=3]=\"IntrinsicElement\",e))(iV||{}),D8=(e=>(e[e.Succeeded=1]=\"Succeeded\",e[e.Failed=2]=\"Failed\",e[e.Reported=4]=\"Reported\",e[e.ReportsUnmeasurable=8]=\"ReportsUnmeasurable\",e[e.ReportsUnreliable=16]=\"ReportsUnreliable\",e[e.ReportsMask=24]=\"ReportsMask\",e))(D8||{}),w8=(e=>(e[e.None=0]=\"None\",e[e.Auto=1]=\"Auto\",e[e.Loop=2]=\"Loop\",e[e.Unique=3]=\"Unique\",e[e.Node=4]=\"Node\",e[e.KindMask=7]=\"KindMask\",e[e.ReservedInNestedScopes=8]=\"ReservedInNestedScopes\",e[e.Optimistic=16]=\"Optimistic\",e[e.FileLevel=32]=\"FileLevel\",e[e.AllowNameSubstitution=64]=\"AllowNameSubstitution\",e))(w8||{}),aV=(e=>(e[e.None=0]=\"None\",e[e.PrecedingLineBreak=1]=\"PrecedingLineBreak\",e[e.PrecedingJSDocComment=2]=\"PrecedingJSDocComment\",e[e.Unterminated=4]=\"Unterminated\",e[e.ExtendedUnicodeEscape=8]=\"ExtendedUnicodeEscape\",e[e.Scientific=16]=\"Scientific\",e[e.Octal=32]=\"Octal\",e[e.HexSpecifier=64]=\"HexSpecifier\",e[e.BinarySpecifier=128]=\"BinarySpecifier\",e[e.OctalSpecifier=256]=\"OctalSpecifier\",e[e.ContainsSeparator=512]=\"ContainsSeparator\",e[e.UnicodeEscape=1024]=\"UnicodeEscape\",e[e.ContainsInvalidEscape=2048]=\"ContainsInvalidEscape\",e[e.BinaryOrOctalSpecifier=384]=\"BinaryOrOctalSpecifier\",e[e.NumericLiteralFlags=1008]=\"NumericLiteralFlags\",e[e.TemplateLiteralLikeFlags=2048]=\"TemplateLiteralLikeFlags\",e))(aV||{}),tw=(e=>(e[e.Unreachable=1]=\"Unreachable\",e[e.Start=2]=\"Start\",e[e.BranchLabel=4]=\"BranchLabel\",e[e.LoopLabel=8]=\"LoopLabel\",e[e.Assignment=16]=\"Assignment\",e[e.TrueCondition=32]=\"TrueCondition\",e[e.FalseCondition=64]=\"FalseCondition\",e[e.SwitchClause=128]=\"SwitchClause\",e[e.ArrayMutation=256]=\"ArrayMutation\",e[e.Call=512]=\"Call\",e[e.ReduceLabel=1024]=\"ReduceLabel\",e[e.Referenced=2048]=\"Referenced\",e[e.Shared=4096]=\"Shared\",e[e.Label=12]=\"Label\",e[e.Condition=96]=\"Condition\",e))(tw||{}),oV=(e=>(e[e.ExpectError=0]=\"ExpectError\",e[e.Ignore=1]=\"Ignore\",e))(oV||{}),tI=class{},R8=(e=>(e[e.RootFile=0]=\"RootFile\",e[e.SourceFromProjectReference=1]=\"SourceFromProjectReference\",e[e.OutputFromProjectReference=2]=\"OutputFromProjectReference\",e[e.Import=3]=\"Import\",e[e.ReferenceFile=4]=\"ReferenceFile\",e[e.TypeReferenceDirective=5]=\"TypeReferenceDirective\",e[e.LibFile=6]=\"LibFile\",e[e.LibReferenceDirective=7]=\"LibReferenceDirective\",e[e.AutomaticTypeDirectiveFile=8]=\"AutomaticTypeDirectiveFile\",e))(R8||{}),sV=(e=>(e[e.FilePreprocessingReferencedDiagnostic=0]=\"FilePreprocessingReferencedDiagnostic\",e[e.FilePreprocessingFileExplainingDiagnostic=1]=\"FilePreprocessingFileExplainingDiagnostic\",e[e.ResolutionDiagnostics=2]=\"ResolutionDiagnostics\",e))(sV||{}),cV=(e=>(e[e.Js=0]=\"Js\",e[e.Dts=1]=\"Dts\",e))(cV||{}),lV=(e=>(e[e.Not=0]=\"Not\",e[e.SafeModules=1]=\"SafeModules\",e[e.Completely=2]=\"Completely\",e))(lV||{}),uV=(e=>(e[e.Success=0]=\"Success\",e[e.DiagnosticsPresent_OutputsSkipped=1]=\"DiagnosticsPresent_OutputsSkipped\",e[e.DiagnosticsPresent_OutputsGenerated=2]=\"DiagnosticsPresent_OutputsGenerated\",e[e.InvalidProject_OutputsSkipped=3]=\"InvalidProject_OutputsSkipped\",e[e.ProjectReferenceCycle_OutputsSkipped=4]=\"ProjectReferenceCycle_OutputsSkipped\",e))(uV||{}),dV=(e=>(e[e.Ok=0]=\"Ok\",e[e.NeedsOverride=1]=\"NeedsOverride\",e[e.HasInvalidOverride=2]=\"HasInvalidOverride\",e))(dV||{}),fV=(e=>(e[e.None=0]=\"None\",e[e.Literal=1]=\"Literal\",e[e.Subtype=2]=\"Subtype\",e))(fV||{}),_V=(e=>(e[e.None=0]=\"None\",e[e.Signature=1]=\"Signature\",e[e.NoConstraints=2]=\"NoConstraints\",e[e.Completions=4]=\"Completions\",e[e.SkipBindingPatterns=8]=\"SkipBindingPatterns\",e))(_V||{}),pV=(e=>(e[e.None=0]=\"None\",e[e.NoTruncation=1]=\"NoTruncation\",e[e.WriteArrayAsGenericType=2]=\"WriteArrayAsGenericType\",e[e.GenerateNamesForShadowedTypeParams=4]=\"GenerateNamesForShadowedTypeParams\",e[e.UseStructuralFallback=8]=\"UseStructuralFallback\",e[e.ForbidIndexedAccessSymbolReferences=16]=\"ForbidIndexedAccessSymbolReferences\",e[e.WriteTypeArgumentsOfSignature=32]=\"WriteTypeArgumentsOfSignature\",e[e.UseFullyQualifiedType=64]=\"UseFullyQualifiedType\",e[e.UseOnlyExternalAliasing=128]=\"UseOnlyExternalAliasing\",e[e.SuppressAnyReturnType=256]=\"SuppressAnyReturnType\",e[e.WriteTypeParametersInQualifiedName=512]=\"WriteTypeParametersInQualifiedName\",e[e.MultilineObjectLiterals=1024]=\"MultilineObjectLiterals\",e[e.WriteClassExpressionAsTypeLiteral=2048]=\"WriteClassExpressionAsTypeLiteral\",e[e.UseTypeOfFunction=4096]=\"UseTypeOfFunction\",e[e.OmitParameterModifiers=8192]=\"OmitParameterModifiers\",e[e.UseAliasDefinedOutsideCurrentScope=16384]=\"UseAliasDefinedOutsideCurrentScope\",e[e.UseSingleQuotesForStringLiteralType=268435456]=\"UseSingleQuotesForStringLiteralType\",e[e.NoTypeReduction=536870912]=\"NoTypeReduction\",e[e.OmitThisParameter=33554432]=\"OmitThisParameter\",e[e.AllowThisInObjectLiteral=32768]=\"AllowThisInObjectLiteral\",e[e.AllowQualifiedNameInPlaceOfIdentifier=65536]=\"AllowQualifiedNameInPlaceOfIdentifier\",e[e.AllowAnonymousIdentifier=131072]=\"AllowAnonymousIdentifier\",e[e.AllowEmptyUnionOrIntersection=262144]=\"AllowEmptyUnionOrIntersection\",e[e.AllowEmptyTuple=524288]=\"AllowEmptyTuple\",e[e.AllowUniqueESSymbolType=1048576]=\"AllowUniqueESSymbolType\",e[e.AllowEmptyIndexInfoType=2097152]=\"AllowEmptyIndexInfoType\",e[e.WriteComputedProps=1073741824]=\"WriteComputedProps\",e[e.AllowNodeModulesRelativePaths=67108864]=\"AllowNodeModulesRelativePaths\",e[e.DoNotIncludeSymbolChain=134217728]=\"DoNotIncludeSymbolChain\",e[e.IgnoreErrors=70221824]=\"IgnoreErrors\",e[e.InObjectTypeLiteral=4194304]=\"InObjectTypeLiteral\",e[e.InTypeAlias=8388608]=\"InTypeAlias\",e[e.InInitialEntityName=16777216]=\"InInitialEntityName\",e))(pV||{}),mV=(e=>(e[e.None=0]=\"None\",e[e.NoTruncation=1]=\"NoTruncation\",e[e.WriteArrayAsGenericType=2]=\"WriteArrayAsGenericType\",e[e.UseStructuralFallback=8]=\"UseStructuralFallback\",e[e.WriteTypeArgumentsOfSignature=32]=\"WriteTypeArgumentsOfSignature\",e[e.UseFullyQualifiedType=64]=\"UseFullyQualifiedType\",e[e.SuppressAnyReturnType=256]=\"SuppressAnyReturnType\",e[e.MultilineObjectLiterals=1024]=\"MultilineObjectLiterals\",e[e.WriteClassExpressionAsTypeLiteral=2048]=\"WriteClassExpressionAsTypeLiteral\",e[e.UseTypeOfFunction=4096]=\"UseTypeOfFunction\",e[e.OmitParameterModifiers=8192]=\"OmitParameterModifiers\",e[e.UseAliasDefinedOutsideCurrentScope=16384]=\"UseAliasDefinedOutsideCurrentScope\",e[e.UseSingleQuotesForStringLiteralType=268435456]=\"UseSingleQuotesForStringLiteralType\",e[e.NoTypeReduction=536870912]=\"NoTypeReduction\",e[e.OmitThisParameter=33554432]=\"OmitThisParameter\",e[e.AllowUniqueESSymbolType=1048576]=\"AllowUniqueESSymbolType\",e[e.AddUndefined=131072]=\"AddUndefined\",e[e.WriteArrowStyleSignature=262144]=\"WriteArrowStyleSignature\",e[e.InArrayType=524288]=\"InArrayType\",e[e.InElementType=2097152]=\"InElementType\",e[e.InFirstTypeArgument=4194304]=\"InFirstTypeArgument\",e[e.InTypeAlias=8388608]=\"InTypeAlias\",e[e.NodeBuilderFlagsMask=848330091]=\"NodeBuilderFlagsMask\",e))(mV||{}),hV=(e=>(e[e.None=0]=\"None\",e[e.WriteTypeParametersOrArguments=1]=\"WriteTypeParametersOrArguments\",e[e.UseOnlyExternalAliasing=2]=\"UseOnlyExternalAliasing\",e[e.AllowAnyNodeKind=4]=\"AllowAnyNodeKind\",e[e.UseAliasDefinedOutsideCurrentScope=8]=\"UseAliasDefinedOutsideCurrentScope\",e[e.WriteComputedProps=16]=\"WriteComputedProps\",e[e.DoNotIncludeSymbolChain=32]=\"DoNotIncludeSymbolChain\",e))(hV||{}),gV=(e=>(e[e.Accessible=0]=\"Accessible\",e[e.NotAccessible=1]=\"NotAccessible\",e[e.CannotBeNamed=2]=\"CannotBeNamed\",e))(gV||{}),yV=(e=>(e[e.UnionOrIntersection=0]=\"UnionOrIntersection\",e[e.Spread=1]=\"Spread\",e))(yV||{}),vV=(e=>(e[e.This=0]=\"This\",e[e.Identifier=1]=\"Identifier\",e[e.AssertsThis=2]=\"AssertsThis\",e[e.AssertsIdentifier=3]=\"AssertsIdentifier\",e))(vV||{}),bV=(e=>(e[e.Unknown=0]=\"Unknown\",e[e.TypeWithConstructSignatureAndValue=1]=\"TypeWithConstructSignatureAndValue\",e[e.VoidNullableOrNeverType=2]=\"VoidNullableOrNeverType\",e[e.NumberLikeType=3]=\"NumberLikeType\",e[e.BigIntLikeType=4]=\"BigIntLikeType\",e[e.StringLikeType=5]=\"StringLikeType\",e[e.BooleanType=6]=\"BooleanType\",e[e.ArrayLikeType=7]=\"ArrayLikeType\",e[e.ESSymbolType=8]=\"ESSymbolType\",e[e.Promise=9]=\"Promise\",e[e.TypeWithCallSignature=10]=\"TypeWithCallSignature\",e[e.ObjectType=11]=\"ObjectType\",e))(bV||{}),O8=(e=>(e[e.None=0]=\"None\",e[e.FunctionScopedVariable=1]=\"FunctionScopedVariable\",e[e.BlockScopedVariable=2]=\"BlockScopedVariable\",e[e.Property=4]=\"Property\",e[e.EnumMember=8]=\"EnumMember\",e[e.Function=16]=\"Function\",e[e.Class=32]=\"Class\",e[e.Interface=64]=\"Interface\",e[e.ConstEnum=128]=\"ConstEnum\",e[e.RegularEnum=256]=\"RegularEnum\",e[e.ValueModule=512]=\"ValueModule\",e[e.NamespaceModule=1024]=\"NamespaceModule\",e[e.TypeLiteral=2048]=\"TypeLiteral\",e[e.ObjectLiteral=4096]=\"ObjectLiteral\",e[e.Method=8192]=\"Method\",e[e.Constructor=16384]=\"Constructor\",e[e.GetAccessor=32768]=\"GetAccessor\",e[e.SetAccessor=65536]=\"SetAccessor\",e[e.Signature=131072]=\"Signature\",e[e.TypeParameter=262144]=\"TypeParameter\",e[e.TypeAlias=524288]=\"TypeAlias\",e[e.ExportValue=1048576]=\"ExportValue\",e[e.Alias=2097152]=\"Alias\",e[e.Prototype=4194304]=\"Prototype\",e[e.ExportStar=8388608]=\"ExportStar\",e[e.Optional=16777216]=\"Optional\",e[e.Transient=33554432]=\"Transient\",e[e.Assignment=67108864]=\"Assignment\",e[e.ModuleExports=134217728]=\"ModuleExports\",e[e.All=67108863]=\"All\",e[e.Enum=384]=\"Enum\",e[e.Variable=3]=\"Variable\",e[e.Value=111551]=\"Value\",e[e.Type=788968]=\"Type\",e[e.Namespace=1920]=\"Namespace\",e[e.Module=1536]=\"Module\",e[e.Accessor=98304]=\"Accessor\",e[e.FunctionScopedVariableExcludes=111550]=\"FunctionScopedVariableExcludes\",e[e.BlockScopedVariableExcludes=111551]=\"BlockScopedVariableExcludes\",e[e.ParameterExcludes=111551]=\"ParameterExcludes\",e[e.PropertyExcludes=0]=\"PropertyExcludes\",e[e.EnumMemberExcludes=900095]=\"EnumMemberExcludes\",e[e.FunctionExcludes=110991]=\"FunctionExcludes\",e[e.ClassExcludes=899503]=\"ClassExcludes\",e[e.InterfaceExcludes=788872]=\"InterfaceExcludes\",e[e.RegularEnumExcludes=899327]=\"RegularEnumExcludes\",e[e.ConstEnumExcludes=899967]=\"ConstEnumExcludes\",e[e.ValueModuleExcludes=110735]=\"ValueModuleExcludes\",e[e.NamespaceModuleExcludes=0]=\"NamespaceModuleExcludes\",e[e.MethodExcludes=103359]=\"MethodExcludes\",e[e.GetAccessorExcludes=46015]=\"GetAccessorExcludes\",e[e.SetAccessorExcludes=78783]=\"SetAccessorExcludes\",e[e.AccessorExcludes=13247]=\"AccessorExcludes\",e[e.TypeParameterExcludes=526824]=\"TypeParameterExcludes\",e[e.TypeAliasExcludes=788968]=\"TypeAliasExcludes\",e[e.AliasExcludes=2097152]=\"AliasExcludes\",e[e.ModuleMember=2623475]=\"ModuleMember\",e[e.ExportHasLocal=944]=\"ExportHasLocal\",e[e.BlockScoped=418]=\"BlockScoped\",e[e.PropertyOrAccessor=98308]=\"PropertyOrAccessor\",e[e.ClassMember=106500]=\"ClassMember\",e[e.ExportSupportsDefaultModifier=112]=\"ExportSupportsDefaultModifier\",e[e.ExportDoesNotSupportDefaultModifier=-113]=\"ExportDoesNotSupportDefaultModifier\",e[e.Classifiable=2885600]=\"Classifiable\",e[e.LateBindingContainer=6256]=\"LateBindingContainer\",e))(O8||{}),EV=(e=>(e[e.Numeric=0]=\"Numeric\",e[e.Literal=1]=\"Literal\",e))(EV||{}),TV=(e=>(e[e.None=0]=\"None\",e[e.Instantiated=1]=\"Instantiated\",e[e.SyntheticProperty=2]=\"SyntheticProperty\",e[e.SyntheticMethod=4]=\"SyntheticMethod\",e[e.Readonly=8]=\"Readonly\",e[e.ReadPartial=16]=\"ReadPartial\",e[e.WritePartial=32]=\"WritePartial\",e[e.HasNonUniformType=64]=\"HasNonUniformType\",e[e.HasLiteralType=128]=\"HasLiteralType\",e[e.ContainsPublic=256]=\"ContainsPublic\",e[e.ContainsProtected=512]=\"ContainsProtected\",e[e.ContainsPrivate=1024]=\"ContainsPrivate\",e[e.ContainsStatic=2048]=\"ContainsStatic\",e[e.Late=4096]=\"Late\",e[e.ReverseMapped=8192]=\"ReverseMapped\",e[e.OptionalParameter=16384]=\"OptionalParameter\",e[e.RestParameter=32768]=\"RestParameter\",e[e.DeferredType=65536]=\"DeferredType\",e[e.HasNeverType=131072]=\"HasNeverType\",e[e.Mapped=262144]=\"Mapped\",e[e.StripOptional=524288]=\"StripOptional\",e[e.Unresolved=1048576]=\"Unresolved\",e[e.Synthetic=6]=\"Synthetic\",e[e.Discriminant=192]=\"Discriminant\",e[e.Partial=48]=\"Partial\",e))(TV||{}),SV=(e=>(e.Call=\"__call\",e.Constructor=\"__constructor\",e.New=\"__new\",e.Index=\"__index\",e.ExportStar=\"__export\",e.Global=\"__global\",e.Missing=\"__missing\",e.Type=\"__type\",e.Object=\"__object\",e.JSXAttributes=\"__jsxAttributes\",e.Class=\"__class\",e.Function=\"__function\",e.Computed=\"__computed\",e.Resolving=\"__resolving__\",e.ExportEquals=\"export=\",e.Default=\"default\",e.This=\"this\",e))(SV||{}),xV=(e=>(e[e.None=0]=\"None\",e[e.TypeChecked=1]=\"TypeChecked\",e[e.LexicalThis=2]=\"LexicalThis\",e[e.CaptureThis=4]=\"CaptureThis\",e[e.CaptureNewTarget=8]=\"CaptureNewTarget\",e[e.SuperInstance=16]=\"SuperInstance\",e[e.SuperStatic=32]=\"SuperStatic\",e[e.ContextChecked=64]=\"ContextChecked\",e[e.MethodWithSuperPropertyAccessInAsync=128]=\"MethodWithSuperPropertyAccessInAsync\",e[e.MethodWithSuperPropertyAssignmentInAsync=256]=\"MethodWithSuperPropertyAssignmentInAsync\",e[e.CaptureArguments=512]=\"CaptureArguments\",e[e.EnumValuesComputed=1024]=\"EnumValuesComputed\",e[e.LexicalModuleMergesWithClass=2048]=\"LexicalModuleMergesWithClass\",e[e.LoopWithCapturedBlockScopedBinding=4096]=\"LoopWithCapturedBlockScopedBinding\",e[e.ContainsCapturedBlockScopeBinding=8192]=\"ContainsCapturedBlockScopeBinding\",e[e.CapturedBlockScopedBinding=16384]=\"CapturedBlockScopedBinding\",e[e.BlockScopedBindingInLoop=32768]=\"BlockScopedBindingInLoop\",e[e.ClassWithBodyScopedClassBinding=65536]=\"ClassWithBodyScopedClassBinding\",e[e.BodyScopedClassBinding=131072]=\"BodyScopedClassBinding\",e[e.NeedsLoopOutParameter=262144]=\"NeedsLoopOutParameter\",e[e.AssignmentsMarked=524288]=\"AssignmentsMarked\",e[e.ClassWithConstructorReference=1048576]=\"ClassWithConstructorReference\",e[e.ConstructorReferenceInClass=2097152]=\"ConstructorReferenceInClass\",e[e.ContainsClassWithPrivateIdentifiers=4194304]=\"ContainsClassWithPrivateIdentifiers\",e[e.ContainsSuperPropertyInStaticInitializer=8388608]=\"ContainsSuperPropertyInStaticInitializer\",e[e.InCheckIdentifier=16777216]=\"InCheckIdentifier\",e))(xV||{}),N8=(e=>(e[e.Any=1]=\"Any\",e[e.Unknown=2]=\"Unknown\",e[e.String=4]=\"String\",e[e.Number=8]=\"Number\",e[e.Boolean=16]=\"Boolean\",e[e.Enum=32]=\"Enum\",e[e.BigInt=64]=\"BigInt\",e[e.StringLiteral=128]=\"StringLiteral\",e[e.NumberLiteral=256]=\"NumberLiteral\",e[e.BooleanLiteral=512]=\"BooleanLiteral\",e[e.EnumLiteral=1024]=\"EnumLiteral\",e[e.BigIntLiteral=2048]=\"BigIntLiteral\",e[e.ESSymbol=4096]=\"ESSymbol\",e[e.UniqueESSymbol=8192]=\"UniqueESSymbol\",e[e.Void=16384]=\"Void\",e[e.Undefined=32768]=\"Undefined\",e[e.Null=65536]=\"Null\",e[e.Never=131072]=\"Never\",e[e.TypeParameter=262144]=\"TypeParameter\",e[e.Object=524288]=\"Object\",e[e.Union=1048576]=\"Union\",e[e.Intersection=2097152]=\"Intersection\",e[e.Index=4194304]=\"Index\",e[e.IndexedAccess=8388608]=\"IndexedAccess\",e[e.Conditional=16777216]=\"Conditional\",e[e.Substitution=33554432]=\"Substitution\",e[e.NonPrimitive=67108864]=\"NonPrimitive\",e[e.TemplateLiteral=134217728]=\"TemplateLiteral\",e[e.StringMapping=268435456]=\"StringMapping\",e[e.AnyOrUnknown=3]=\"AnyOrUnknown\",e[e.Nullable=98304]=\"Nullable\",e[e.Literal=2944]=\"Literal\",e[e.Unit=109472]=\"Unit\",e[e.Freshable=2976]=\"Freshable\",e[e.StringOrNumberLiteral=384]=\"StringOrNumberLiteral\",e[e.StringOrNumberLiteralOrUnique=8576]=\"StringOrNumberLiteralOrUnique\",e[e.DefinitelyFalsy=117632]=\"DefinitelyFalsy\",e[e.PossiblyFalsy=117724]=\"PossiblyFalsy\",e[e.Intrinsic=67359327]=\"Intrinsic\",e[e.Primitive=134348796]=\"Primitive\",e[e.StringLike=402653316]=\"StringLike\",e[e.NumberLike=296]=\"NumberLike\",e[e.BigIntLike=2112]=\"BigIntLike\",e[e.BooleanLike=528]=\"BooleanLike\",e[e.EnumLike=1056]=\"EnumLike\",e[e.ESSymbolLike=12288]=\"ESSymbolLike\",e[e.VoidLike=49152]=\"VoidLike\",e[e.DefinitelyNonNullable=470302716]=\"DefinitelyNonNullable\",e[e.DisjointDomains=469892092]=\"DisjointDomains\",e[e.UnionOrIntersection=3145728]=\"UnionOrIntersection\",e[e.StructuredType=3670016]=\"StructuredType\",e[e.TypeVariable=8650752]=\"TypeVariable\",e[e.InstantiableNonPrimitive=58982400]=\"InstantiableNonPrimitive\",e[e.InstantiablePrimitive=406847488]=\"InstantiablePrimitive\",e[e.Instantiable=465829888]=\"Instantiable\",e[e.StructuredOrInstantiable=469499904]=\"StructuredOrInstantiable\",e[e.ObjectFlagsType=3899393]=\"ObjectFlagsType\",e[e.Simplifiable=25165824]=\"Simplifiable\",e[e.Singleton=67358815]=\"Singleton\",e[e.Narrowable=536624127]=\"Narrowable\",e[e.IncludesMask=205258751]=\"IncludesMask\",e[e.IncludesMissingType=262144]=\"IncludesMissingType\",e[e.IncludesNonWideningType=4194304]=\"IncludesNonWideningType\",e[e.IncludesWildcard=8388608]=\"IncludesWildcard\",e[e.IncludesEmptyObject=16777216]=\"IncludesEmptyObject\",e[e.IncludesInstantiable=33554432]=\"IncludesInstantiable\",e[e.NotPrimitiveUnion=36323363]=\"NotPrimitiveUnion\",e))(N8||{}),P8=(e=>(e[e.None=0]=\"None\",e[e.Class=1]=\"Class\",e[e.Interface=2]=\"Interface\",e[e.Reference=4]=\"Reference\",e[e.Tuple=8]=\"Tuple\",e[e.Anonymous=16]=\"Anonymous\",e[e.Mapped=32]=\"Mapped\",e[e.Instantiated=64]=\"Instantiated\",e[e.ObjectLiteral=128]=\"ObjectLiteral\",e[e.EvolvingArray=256]=\"EvolvingArray\",e[e.ObjectLiteralPatternWithComputedProperties=512]=\"ObjectLiteralPatternWithComputedProperties\",e[e.ReverseMapped=1024]=\"ReverseMapped\",e[e.JsxAttributes=2048]=\"JsxAttributes\",e[e.JSLiteral=4096]=\"JSLiteral\",e[e.FreshLiteral=8192]=\"FreshLiteral\",e[e.ArrayLiteral=16384]=\"ArrayLiteral\",e[e.PrimitiveUnion=32768]=\"PrimitiveUnion\",e[e.ContainsWideningType=65536]=\"ContainsWideningType\",e[e.ContainsObjectOrArrayLiteral=131072]=\"ContainsObjectOrArrayLiteral\",e[e.NonInferrableType=262144]=\"NonInferrableType\",e[e.CouldContainTypeVariablesComputed=524288]=\"CouldContainTypeVariablesComputed\",e[e.CouldContainTypeVariables=1048576]=\"CouldContainTypeVariables\",e[e.ClassOrInterface=3]=\"ClassOrInterface\",e[e.RequiresWidening=196608]=\"RequiresWidening\",e[e.PropagatingFlags=458752]=\"PropagatingFlags\",e[e.ObjectTypeKindMask=1343]=\"ObjectTypeKindMask\",e[e.ContainsSpread=2097152]=\"ContainsSpread\",e[e.ObjectRestType=4194304]=\"ObjectRestType\",e[e.InstantiationExpressionType=8388608]=\"InstantiationExpressionType\",e[e.IsClassInstanceClone=16777216]=\"IsClassInstanceClone\",e[e.IdenticalBaseTypeCalculated=33554432]=\"IdenticalBaseTypeCalculated\",e[e.IdenticalBaseTypeExists=67108864]=\"IdenticalBaseTypeExists\",e[e.IsGenericTypeComputed=2097152]=\"IsGenericTypeComputed\",e[e.IsGenericObjectType=4194304]=\"IsGenericObjectType\",e[e.IsGenericIndexType=8388608]=\"IsGenericIndexType\",e[e.IsGenericType=12582912]=\"IsGenericType\",e[e.ContainsIntersections=16777216]=\"ContainsIntersections\",e[e.IsUnknownLikeUnionComputed=33554432]=\"IsUnknownLikeUnionComputed\",e[e.IsUnknownLikeUnion=67108864]=\"IsUnknownLikeUnion\",e[e.IsNeverIntersectionComputed=16777216]=\"IsNeverIntersectionComputed\",e[e.IsNeverIntersection=33554432]=\"IsNeverIntersection\",e))(P8||{}),AV=(e=>(e[e.Invariant=0]=\"Invariant\",e[e.Covariant=1]=\"Covariant\",e[e.Contravariant=2]=\"Contravariant\",e[e.Bivariant=3]=\"Bivariant\",e[e.Independent=4]=\"Independent\",e[e.VarianceMask=7]=\"VarianceMask\",e[e.Unmeasurable=8]=\"Unmeasurable\",e[e.Unreliable=16]=\"Unreliable\",e[e.AllowsStructuralFallback=24]=\"AllowsStructuralFallback\",e))(AV||{}),CV=(e=>(e[e.Required=1]=\"Required\",e[e.Optional=2]=\"Optional\",e[e.Rest=4]=\"Rest\",e[e.Variadic=8]=\"Variadic\",e[e.Fixed=3]=\"Fixed\",e[e.Variable=12]=\"Variable\",e[e.NonRequired=14]=\"NonRequired\",e[e.NonRest=11]=\"NonRest\",e))(CV||{}),IV=(e=>(e[e.None=0]=\"None\",e[e.IncludeUndefined=1]=\"IncludeUndefined\",e[e.NoIndexSignatures=2]=\"NoIndexSignatures\",e[e.Writing=4]=\"Writing\",e[e.CacheSymbol=8]=\"CacheSymbol\",e[e.NoTupleBoundsCheck=16]=\"NoTupleBoundsCheck\",e[e.ExpressionPosition=32]=\"ExpressionPosition\",e[e.ReportDeprecated=64]=\"ReportDeprecated\",e[e.SuppressNoImplicitAnyError=128]=\"SuppressNoImplicitAnyError\",e[e.Contextual=256]=\"Contextual\",e[e.Persistent=1]=\"Persistent\",e))(IV||{}),LV=(e=>(e[e.Component=0]=\"Component\",e[e.Function=1]=\"Function\",e[e.Mixed=2]=\"Mixed\",e))(LV||{}),kV=(e=>(e[e.Call=0]=\"Call\",e[e.Construct=1]=\"Construct\",e))(kV||{}),M8=(e=>(e[e.None=0]=\"None\",e[e.HasRestParameter=1]=\"HasRestParameter\",e[e.HasLiteralTypes=2]=\"HasLiteralTypes\",e[e.Abstract=4]=\"Abstract\",e[e.IsInnerCallChain=8]=\"IsInnerCallChain\",e[e.IsOuterCallChain=16]=\"IsOuterCallChain\",e[e.IsUntypedSignatureInJSFile=32]=\"IsUntypedSignatureInJSFile\",e[e.PropagatingFlags=39]=\"PropagatingFlags\",e[e.CallChainFlags=24]=\"CallChainFlags\",e))(M8||{}),DV=(e=>(e[e.String=0]=\"String\",e[e.Number=1]=\"Number\",e))(DV||{}),wV=(e=>(e[e.Simple=0]=\"Simple\",e[e.Array=1]=\"Array\",e[e.Deferred=2]=\"Deferred\",e[e.Function=3]=\"Function\",e[e.Composite=4]=\"Composite\",e[e.Merged=5]=\"Merged\",e))(wV||{}),RV=(e=>(e[e.None=0]=\"None\",e[e.NakedTypeVariable=1]=\"NakedTypeVariable\",e[e.SpeculativeTuple=2]=\"SpeculativeTuple\",e[e.SubstituteSource=4]=\"SubstituteSource\",e[e.HomomorphicMappedType=8]=\"HomomorphicMappedType\",e[e.PartialHomomorphicMappedType=16]=\"PartialHomomorphicMappedType\",e[e.MappedTypeConstraint=32]=\"MappedTypeConstraint\",e[e.ContravariantConditional=64]=\"ContravariantConditional\",e[e.ReturnType=128]=\"ReturnType\",e[e.LiteralKeyof=256]=\"LiteralKeyof\",e[e.NoConstraints=512]=\"NoConstraints\",e[e.AlwaysStrict=1024]=\"AlwaysStrict\",e[e.MaxValue=2048]=\"MaxValue\",e[e.PriorityImpliesCombination=416]=\"PriorityImpliesCombination\",e[e.Circularity=-1]=\"Circularity\",e))(RV||{}),OV=(e=>(e[e.None=0]=\"None\",e[e.NoDefault=1]=\"NoDefault\",e[e.AnyDefault=2]=\"AnyDefault\",e[e.SkippedGenericFunction=4]=\"SkippedGenericFunction\",e))(OV||{}),NV=(e=>(e[e.False=0]=\"False\",e[e.Unknown=1]=\"Unknown\",e[e.Maybe=3]=\"Maybe\",e[e.True=-1]=\"True\",e))(NV||{}),PV=(e=>(e[e.None=0]=\"None\",e[e.ExportsProperty=1]=\"ExportsProperty\",e[e.ModuleExports=2]=\"ModuleExports\",e[e.PrototypeProperty=3]=\"PrototypeProperty\",e[e.ThisProperty=4]=\"ThisProperty\",e[e.Property=5]=\"Property\",e[e.Prototype=6]=\"Prototype\",e[e.ObjectDefinePropertyValue=7]=\"ObjectDefinePropertyValue\",e[e.ObjectDefinePropertyExports=8]=\"ObjectDefinePropertyExports\",e[e.ObjectDefinePrototypeProperty=9]=\"ObjectDefinePrototypeProperty\",e))(PV||{}),nw=(e=>(e[e.Warning=0]=\"Warning\",e[e.Error=1]=\"Error\",e[e.Suggestion=2]=\"Suggestion\",e[e.Message=3]=\"Message\",e))(nw||{}),rw=(e=>(e[e.Classic=1]=\"Classic\",e[e.NodeJs=2]=\"NodeJs\",e[e.Node10=2]=\"Node10\",e[e.Node16=3]=\"Node16\",e[e.NodeNext=99]=\"NodeNext\",e[e.Bundler=100]=\"Bundler\",e))(rw||{}),MV=(e=>(e[e.Legacy=1]=\"Legacy\",e[e.Auto=2]=\"Auto\",e[e.Force=3]=\"Force\",e))(MV||{}),FV=(e=>(e[e.FixedPollingInterval=0]=\"FixedPollingInterval\",e[e.PriorityPollingInterval=1]=\"PriorityPollingInterval\",e[e.DynamicPriorityPolling=2]=\"DynamicPriorityPolling\",e[e.FixedChunkSizePolling=3]=\"FixedChunkSizePolling\",e[e.UseFsEvents=4]=\"UseFsEvents\",e[e.UseFsEventsOnParentDirectory=5]=\"UseFsEventsOnParentDirectory\",e))(FV||{}),GV=(e=>(e[e.UseFsEvents=0]=\"UseFsEvents\",e[e.FixedPollingInterval=1]=\"FixedPollingInterval\",e[e.DynamicPriorityPolling=2]=\"DynamicPriorityPolling\",e[e.FixedChunkSizePolling=3]=\"FixedChunkSizePolling\",e))(GV||{}),BV=(e=>(e[e.FixedInterval=0]=\"FixedInterval\",e[e.PriorityInterval=1]=\"PriorityInterval\",e[e.DynamicPriority=2]=\"DynamicPriority\",e[e.FixedChunkSize=3]=\"FixedChunkSize\",e))(BV||{}),F8=(e=>(e[e.None=0]=\"None\",e[e.CommonJS=1]=\"CommonJS\",e[e.AMD=2]=\"AMD\",e[e.UMD=3]=\"UMD\",e[e.System=4]=\"System\",e[e.ES2015=5]=\"ES2015\",e[e.ES2020=6]=\"ES2020\",e[e.ES2022=7]=\"ES2022\",e[e.ESNext=99]=\"ESNext\",e[e.Node16=100]=\"Node16\",e[e.NodeNext=199]=\"NodeNext\",e))(F8||{}),UV=(e=>(e[e.None=0]=\"None\",e[e.Preserve=1]=\"Preserve\",e[e.React=2]=\"React\",e[e.ReactNative=3]=\"ReactNative\",e[e.ReactJSX=4]=\"ReactJSX\",e[e.ReactJSXDev=5]=\"ReactJSXDev\",e))(UV||{}),VV=(e=>(e[e.Remove=0]=\"Remove\",e[e.Preserve=1]=\"Preserve\",e[e.Error=2]=\"Error\",e))(VV||{}),jV=(e=>(e[e.CarriageReturnLineFeed=0]=\"CarriageReturnLineFeed\",e[e.LineFeed=1]=\"LineFeed\",e))(jV||{}),HV=(e=>(e[e.Unknown=0]=\"Unknown\",e[e.JS=1]=\"JS\",e[e.JSX=2]=\"JSX\",e[e.TS=3]=\"TS\",e[e.TSX=4]=\"TSX\",e[e.External=5]=\"External\",e[e.JSON=6]=\"JSON\",e[e.Deferred=7]=\"Deferred\",e))(HV||{}),WV=(e=>(e[e.ES3=0]=\"ES3\",e[e.ES5=1]=\"ES5\",e[e.ES2015=2]=\"ES2015\",e[e.ES2016=3]=\"ES2016\",e[e.ES2017=4]=\"ES2017\",e[e.ES2018=5]=\"ES2018\",e[e.ES2019=6]=\"ES2019\",e[e.ES2020=7]=\"ES2020\",e[e.ES2021=8]=\"ES2021\",e[e.ES2022=9]=\"ES2022\",e[e.ESNext=99]=\"ESNext\",e[e.JSON=100]=\"JSON\",e[e.Latest=99]=\"Latest\",e))(WV||{}),zV=(e=>(e[e.Standard=0]=\"Standard\",e[e.JSX=1]=\"JSX\",e))(zV||{}),JV=(e=>(e[e.None=0]=\"None\",e[e.Recursive=1]=\"Recursive\",e))(JV||{}),KV=(e=>(e[e.nullCharacter=0]=\"nullCharacter\",e[e.maxAsciiCharacter=127]=\"maxAsciiCharacter\",e[e.lineFeed=10]=\"lineFeed\",e[e.carriageReturn=13]=\"carriageReturn\",e[e.lineSeparator=8232]=\"lineSeparator\",e[e.paragraphSeparator=8233]=\"paragraphSeparator\",e[e.nextLine=133]=\"nextLine\",e[e.space=32]=\"space\",e[e.nonBreakingSpace=160]=\"nonBreakingSpace\",e[e.enQuad=8192]=\"enQuad\",e[e.emQuad=8193]=\"emQuad\",e[e.enSpace=8194]=\"enSpace\",e[e.emSpace=8195]=\"emSpace\",e[e.threePerEmSpace=8196]=\"threePerEmSpace\",e[e.fourPerEmSpace=8197]=\"fourPerEmSpace\",e[e.sixPerEmSpace=8198]=\"sixPerEmSpace\",e[e.figureSpace=8199]=\"figureSpace\",e[e.punctuationSpace=8200]=\"punctuationSpace\",e[e.thinSpace=8201]=\"thinSpace\",e[e.hairSpace=8202]=\"hairSpace\",e[e.zeroWidthSpace=8203]=\"zeroWidthSpace\",e[e.narrowNoBreakSpace=8239]=\"narrowNoBreakSpace\",e[e.ideographicSpace=12288]=\"ideographicSpace\",e[e.mathematicalSpace=8287]=\"mathematicalSpace\",e[e.ogham=5760]=\"ogham\",e[e._=95]=\"_\",e[e.$=36]=\"$\",e[e._0=48]=\"_0\",e[e._1=49]=\"_1\",e[e._2=50]=\"_2\",e[e._3=51]=\"_3\",e[e._4=52]=\"_4\",e[e._5=53]=\"_5\",e[e._6=54]=\"_6\",e[e._7=55]=\"_7\",e[e._8=56]=\"_8\",e[e._9=57]=\"_9\",e[e.a=97]=\"a\",e[e.b=98]=\"b\",e[e.c=99]=\"c\",e[e.d=100]=\"d\",e[e.e=101]=\"e\",e[e.f=102]=\"f\",e[e.g=103]=\"g\",e[e.h=104]=\"h\",e[e.i=105]=\"i\",e[e.j=106]=\"j\",e[e.k=107]=\"k\",e[e.l=108]=\"l\",e[e.m=109]=\"m\",e[e.n=110]=\"n\",e[e.o=111]=\"o\",e[e.p=112]=\"p\",e[e.q=113]=\"q\",e[e.r=114]=\"r\",e[e.s=115]=\"s\",e[e.t=116]=\"t\",e[e.u=117]=\"u\",e[e.v=118]=\"v\",e[e.w=119]=\"w\",e[e.x=120]=\"x\",e[e.y=121]=\"y\",e[e.z=122]=\"z\",e[e.A=65]=\"A\",e[e.B=66]=\"B\",e[e.C=67]=\"C\",e[e.D=68]=\"D\",e[e.E=69]=\"E\",e[e.F=70]=\"F\",e[e.G=71]=\"G\",e[e.H=72]=\"H\",e[e.I=73]=\"I\",e[e.J=74]=\"J\",e[e.K=75]=\"K\",e[e.L=76]=\"L\",e[e.M=77]=\"M\",e[e.N=78]=\"N\",e[e.O=79]=\"O\",e[e.P=80]=\"P\",e[e.Q=81]=\"Q\",e[e.R=82]=\"R\",e[e.S=83]=\"S\",e[e.T=84]=\"T\",e[e.U=85]=\"U\",e[e.V=86]=\"V\",e[e.W=87]=\"W\",e[e.X=88]=\"X\",e[e.Y=89]=\"Y\",e[e.Z=90]=\"Z\",e[e.ampersand=38]=\"ampersand\",e[e.asterisk=42]=\"asterisk\",e[e.at=64]=\"at\",e[e.backslash=92]=\"backslash\",e[e.backtick=96]=\"backtick\",e[e.bar=124]=\"bar\",e[e.caret=94]=\"caret\",e[e.closeBrace=125]=\"closeBrace\",e[e.closeBracket=93]=\"closeBracket\",e[e.closeParen=41]=\"closeParen\",e[e.colon=58]=\"colon\",e[e.comma=44]=\"comma\",e[e.dot=46]=\"dot\",e[e.doubleQuote=34]=\"doubleQuote\",e[e.equals=61]=\"equals\",e[e.exclamation=33]=\"exclamation\",e[e.greaterThan=62]=\"greaterThan\",e[e.hash=35]=\"hash\",e[e.lessThan=60]=\"lessThan\",e[e.minus=45]=\"minus\",e[e.openBrace=123]=\"openBrace\",e[e.openBracket=91]=\"openBracket\",e[e.openParen=40]=\"openParen\",e[e.percent=37]=\"percent\",e[e.plus=43]=\"plus\",e[e.question=63]=\"question\",e[e.semicolon=59]=\"semicolon\",e[e.singleQuote=39]=\"singleQuote\",e[e.slash=47]=\"slash\",e[e.tilde=126]=\"tilde\",e[e.backspace=8]=\"backspace\",e[e.formFeed=12]=\"formFeed\",e[e.byteOrderMark=65279]=\"byteOrderMark\",e[e.tab=9]=\"tab\",e[e.verticalTab=11]=\"verticalTab\",e))(KV||{}),qV=(e=>(e.Ts=\".ts\",e.Tsx=\".tsx\",e.Dts=\".d.ts\",e.Js=\".js\",e.Jsx=\".jsx\",e.Json=\".json\",e.TsBuildInfo=\".tsbuildinfo\",e.Mjs=\".mjs\",e.Mts=\".mts\",e.Dmts=\".d.mts\",e.Cjs=\".cjs\",e.Cts=\".cts\",e.Dcts=\".d.cts\",e))(qV||{}),G8=(e=>(e[e.None=0]=\"None\",e[e.ContainsTypeScript=1]=\"ContainsTypeScript\",e[e.ContainsJsx=2]=\"ContainsJsx\",e[e.ContainsESNext=4]=\"ContainsESNext\",e[e.ContainsES2022=8]=\"ContainsES2022\",e[e.ContainsES2021=16]=\"ContainsES2021\",e[e.ContainsES2020=32]=\"ContainsES2020\",e[e.ContainsES2019=64]=\"ContainsES2019\",e[e.ContainsES2018=128]=\"ContainsES2018\",e[e.ContainsES2017=256]=\"ContainsES2017\",e[e.ContainsES2016=512]=\"ContainsES2016\",e[e.ContainsES2015=1024]=\"ContainsES2015\",e[e.ContainsGenerator=2048]=\"ContainsGenerator\",e[e.ContainsDestructuringAssignment=4096]=\"ContainsDestructuringAssignment\",e[e.ContainsTypeScriptClassSyntax=8192]=\"ContainsTypeScriptClassSyntax\",e[e.ContainsLexicalThis=16384]=\"ContainsLexicalThis\",e[e.ContainsRestOrSpread=32768]=\"ContainsRestOrSpread\",e[e.ContainsObjectRestOrSpread=65536]=\"ContainsObjectRestOrSpread\",e[e.ContainsComputedPropertyName=131072]=\"ContainsComputedPropertyName\",e[e.ContainsBlockScopedBinding=262144]=\"ContainsBlockScopedBinding\",e[e.ContainsBindingPattern=524288]=\"ContainsBindingPattern\",e[e.ContainsYield=1048576]=\"ContainsYield\",e[e.ContainsAwait=2097152]=\"ContainsAwait\",e[e.ContainsHoistedDeclarationOrCompletion=4194304]=\"ContainsHoistedDeclarationOrCompletion\",e[e.ContainsDynamicImport=8388608]=\"ContainsDynamicImport\",e[e.ContainsClassFields=16777216]=\"ContainsClassFields\",e[e.ContainsDecorators=33554432]=\"ContainsDecorators\",e[e.ContainsPossibleTopLevelAwait=67108864]=\"ContainsPossibleTopLevelAwait\",e[e.ContainsLexicalSuper=134217728]=\"ContainsLexicalSuper\",e[e.ContainsUpdateExpressionForIdentifier=268435456]=\"ContainsUpdateExpressionForIdentifier\",e[e.ContainsPrivateIdentifierInExpression=536870912]=\"ContainsPrivateIdentifierInExpression\",e[e.HasComputedFlags=-2147483648]=\"HasComputedFlags\",e[e.AssertTypeScript=1]=\"AssertTypeScript\",e[e.AssertJsx=2]=\"AssertJsx\",e[e.AssertESNext=4]=\"AssertESNext\",e[e.AssertES2022=8]=\"AssertES2022\",e[e.AssertES2021=16]=\"AssertES2021\",e[e.AssertES2020=32]=\"AssertES2020\",e[e.AssertES2019=64]=\"AssertES2019\",e[e.AssertES2018=128]=\"AssertES2018\",e[e.AssertES2017=256]=\"AssertES2017\",e[e.AssertES2016=512]=\"AssertES2016\",e[e.AssertES2015=1024]=\"AssertES2015\",e[e.AssertGenerator=2048]=\"AssertGenerator\",e[e.AssertDestructuringAssignment=4096]=\"AssertDestructuringAssignment\",e[e.OuterExpressionExcludes=-2147483648]=\"OuterExpressionExcludes\",e[e.PropertyAccessExcludes=-2147483648]=\"PropertyAccessExcludes\",e[e.NodeExcludes=-2147483648]=\"NodeExcludes\",e[e.ArrowFunctionExcludes=-2072174592]=\"ArrowFunctionExcludes\",e[e.FunctionExcludes=-1937940480]=\"FunctionExcludes\",e[e.ConstructorExcludes=-1937948672]=\"ConstructorExcludes\",e[e.MethodOrAccessorExcludes=-2005057536]=\"MethodOrAccessorExcludes\",e[e.PropertyExcludes=-2013249536]=\"PropertyExcludes\",e[e.ClassExcludes=-2147344384]=\"ClassExcludes\",e[e.ModuleExcludes=-1941676032]=\"ModuleExcludes\",e[e.TypeExcludes=-2]=\"TypeExcludes\",e[e.ObjectLiteralExcludes=-2147278848]=\"ObjectLiteralExcludes\",e[e.ArrayLiteralOrCallOrNewExcludes=-2147450880]=\"ArrayLiteralOrCallOrNewExcludes\",e[e.VariableDeclarationListExcludes=-2146893824]=\"VariableDeclarationListExcludes\",e[e.ParameterExcludes=-2147483648]=\"ParameterExcludes\",e[e.CatchClauseExcludes=-2147418112]=\"CatchClauseExcludes\",e[e.BindingPatternExcludes=-2147450880]=\"BindingPatternExcludes\",e[e.ContainsLexicalThisOrSuper=134234112]=\"ContainsLexicalThisOrSuper\",e[e.PropertyNamePropagatingFlags=134234112]=\"PropertyNamePropagatingFlags\",e))(G8||{}),B8=(e=>(e[e.TabStop=0]=\"TabStop\",e[e.Placeholder=1]=\"Placeholder\",e[e.Choice=2]=\"Choice\",e[e.Variable=3]=\"Variable\",e))(B8||{}),U8=(e=>(e[e.None=0]=\"None\",e[e.SingleLine=1]=\"SingleLine\",e[e.MultiLine=2]=\"MultiLine\",e[e.AdviseOnEmitNode=4]=\"AdviseOnEmitNode\",e[e.NoSubstitution=8]=\"NoSubstitution\",e[e.CapturesThis=16]=\"CapturesThis\",e[e.NoLeadingSourceMap=32]=\"NoLeadingSourceMap\",e[e.NoTrailingSourceMap=64]=\"NoTrailingSourceMap\",e[e.NoSourceMap=96]=\"NoSourceMap\",e[e.NoNestedSourceMaps=128]=\"NoNestedSourceMaps\",e[e.NoTokenLeadingSourceMaps=256]=\"NoTokenLeadingSourceMaps\",e[e.NoTokenTrailingSourceMaps=512]=\"NoTokenTrailingSourceMaps\",e[e.NoTokenSourceMaps=768]=\"NoTokenSourceMaps\",e[e.NoLeadingComments=1024]=\"NoLeadingComments\",e[e.NoTrailingComments=2048]=\"NoTrailingComments\",e[e.NoComments=3072]=\"NoComments\",e[e.NoNestedComments=4096]=\"NoNestedComments\",e[e.HelperName=8192]=\"HelperName\",e[e.ExportName=16384]=\"ExportName\",e[e.LocalName=32768]=\"LocalName\",e[e.InternalName=65536]=\"InternalName\",e[e.Indented=131072]=\"Indented\",e[e.NoIndentation=262144]=\"NoIndentation\",e[e.AsyncFunctionBody=524288]=\"AsyncFunctionBody\",e[e.ReuseTempVariableScope=1048576]=\"ReuseTempVariableScope\",e[e.CustomPrologue=2097152]=\"CustomPrologue\",e[e.NoHoisting=4194304]=\"NoHoisting\",e[e.HasEndOfDeclarationMarker=8388608]=\"HasEndOfDeclarationMarker\",e[e.Iterator=16777216]=\"Iterator\",e[e.NoAsciiEscaping=33554432]=\"NoAsciiEscaping\",e))(U8||{}),XV=(e=>(e[e.None=0]=\"None\",e[e.TypeScriptClassWrapper=1]=\"TypeScriptClassWrapper\",e[e.NeverApplyImportHelper=2]=\"NeverApplyImportHelper\",e[e.IgnoreSourceNewlines=4]=\"IgnoreSourceNewlines\",e[e.Immutable=8]=\"Immutable\",e[e.IndirectCall=16]=\"IndirectCall\",e[e.TransformPrivateStaticElements=32]=\"TransformPrivateStaticElements\",e))(XV||{}),YV=(e=>(e[e.Extends=1]=\"Extends\",e[e.Assign=2]=\"Assign\",e[e.Rest=4]=\"Rest\",e[e.Decorate=8]=\"Decorate\",e[e.ESDecorateAndRunInitializers=8]=\"ESDecorateAndRunInitializers\",e[e.Metadata=16]=\"Metadata\",e[e.Param=32]=\"Param\",e[e.Awaiter=64]=\"Awaiter\",e[e.Generator=128]=\"Generator\",e[e.Values=256]=\"Values\",e[e.Read=512]=\"Read\",e[e.SpreadArray=1024]=\"SpreadArray\",e[e.Await=2048]=\"Await\",e[e.AsyncGenerator=4096]=\"AsyncGenerator\",e[e.AsyncDelegator=8192]=\"AsyncDelegator\",e[e.AsyncValues=16384]=\"AsyncValues\",e[e.ExportStar=32768]=\"ExportStar\",e[e.ImportStar=65536]=\"ImportStar\",e[e.ImportDefault=131072]=\"ImportDefault\",e[e.MakeTemplateObject=262144]=\"MakeTemplateObject\",e[e.ClassPrivateFieldGet=524288]=\"ClassPrivateFieldGet\",e[e.ClassPrivateFieldSet=1048576]=\"ClassPrivateFieldSet\",e[e.ClassPrivateFieldIn=2097152]=\"ClassPrivateFieldIn\",e[e.CreateBinding=4194304]=\"CreateBinding\",e[e.SetFunctionName=8388608]=\"SetFunctionName\",e[e.PropKey=16777216]=\"PropKey\",e[e.FirstEmitHelper=1]=\"FirstEmitHelper\",e[e.LastEmitHelper=16777216]=\"LastEmitHelper\",e[e.ForOfIncludes=256]=\"ForOfIncludes\",e[e.ForAwaitOfIncludes=16384]=\"ForAwaitOfIncludes\",e[e.AsyncGeneratorIncludes=6144]=\"AsyncGeneratorIncludes\",e[e.AsyncDelegatorIncludes=26624]=\"AsyncDelegatorIncludes\",e[e.SpreadIncludes=1536]=\"SpreadIncludes\",e))(YV||{}),$V=(e=>(e[e.SourceFile=0]=\"SourceFile\",e[e.Expression=1]=\"Expression\",e[e.IdentifierName=2]=\"IdentifierName\",e[e.MappedTypeParameter=3]=\"MappedTypeParameter\",e[e.Unspecified=4]=\"Unspecified\",e[e.EmbeddedStatement=5]=\"EmbeddedStatement\",e[e.JsxAttributeValue=6]=\"JsxAttributeValue\",e))($V||{}),QV=(e=>(e[e.Parentheses=1]=\"Parentheses\",e[e.TypeAssertions=2]=\"TypeAssertions\",e[e.NonNullAssertions=4]=\"NonNullAssertions\",e[e.PartiallyEmittedExpressions=8]=\"PartiallyEmittedExpressions\",e[e.Assertions=6]=\"Assertions\",e[e.All=15]=\"All\",e[e.ExcludeJSDocTypeAssertion=16]=\"ExcludeJSDocTypeAssertion\",e))(QV||{}),ZV=(e=>(e[e.None=0]=\"None\",e[e.InParameters=1]=\"InParameters\",e[e.VariablesHoistedInParameters=2]=\"VariablesHoistedInParameters\",e))(ZV||{}),ej=(e=>(e.Prologue=\"prologue\",e.EmitHelpers=\"emitHelpers\",e.NoDefaultLib=\"no-default-lib\",e.Reference=\"reference\",e.Type=\"type\",e.TypeResolutionModeRequire=\"type-require\",e.TypeResolutionModeImport=\"type-import\",e.Lib=\"lib\",e.Prepend=\"prepend\",e.Text=\"text\",e.Internal=\"internal\",e))(ej||{}),tj=(e=>(e[e.None=0]=\"None\",e[e.SingleLine=0]=\"SingleLine\",e[e.MultiLine=1]=\"MultiLine\",e[e.PreserveLines=2]=\"PreserveLines\",e[e.LinesMask=3]=\"LinesMask\",e[e.NotDelimited=0]=\"NotDelimited\",e[e.BarDelimited=4]=\"BarDelimited\",e[e.AmpersandDelimited=8]=\"AmpersandDelimited\",e[e.CommaDelimited=16]=\"CommaDelimited\",e[e.AsteriskDelimited=32]=\"AsteriskDelimited\",e[e.DelimitersMask=60]=\"DelimitersMask\",e[e.AllowTrailingComma=64]=\"AllowTrailingComma\",e[e.Indented=128]=\"Indented\",e[e.SpaceBetweenBraces=256]=\"SpaceBetweenBraces\",e[e.SpaceBetweenSiblings=512]=\"SpaceBetweenSiblings\",e[e.Braces=1024]=\"Braces\",e[e.Parenthesis=2048]=\"Parenthesis\",e[e.AngleBrackets=4096]=\"AngleBrackets\",e[e.SquareBrackets=8192]=\"SquareBrackets\",e[e.BracketsMask=15360]=\"BracketsMask\",e[e.OptionalIfUndefined=16384]=\"OptionalIfUndefined\",e[e.OptionalIfEmpty=32768]=\"OptionalIfEmpty\",e[e.Optional=49152]=\"Optional\",e[e.PreferNewLine=65536]=\"PreferNewLine\",e[e.NoTrailingNewLine=131072]=\"NoTrailingNewLine\",e[e.NoInterveningComments=262144]=\"NoInterveningComments\",e[e.NoSpaceIfEmpty=524288]=\"NoSpaceIfEmpty\",e[e.SingleElement=1048576]=\"SingleElement\",e[e.SpaceAfterList=2097152]=\"SpaceAfterList\",e[e.Modifiers=2359808]=\"Modifiers\",e[e.HeritageClauses=512]=\"HeritageClauses\",e[e.SingleLineTypeLiteralMembers=768]=\"SingleLineTypeLiteralMembers\",e[e.MultiLineTypeLiteralMembers=32897]=\"MultiLineTypeLiteralMembers\",e[e.SingleLineTupleTypeElements=528]=\"SingleLineTupleTypeElements\",e[e.MultiLineTupleTypeElements=657]=\"MultiLineTupleTypeElements\",e[e.UnionTypeConstituents=516]=\"UnionTypeConstituents\",e[e.IntersectionTypeConstituents=520]=\"IntersectionTypeConstituents\",e[e.ObjectBindingPatternElements=525136]=\"ObjectBindingPatternElements\",e[e.ArrayBindingPatternElements=524880]=\"ArrayBindingPatternElements\",e[e.ObjectLiteralExpressionProperties=526226]=\"ObjectLiteralExpressionProperties\",e[e.ImportClauseEntries=526226]=\"ImportClauseEntries\",e[e.ArrayLiteralExpressionElements=8914]=\"ArrayLiteralExpressionElements\",e[e.CommaListElements=528]=\"CommaListElements\",e[e.CallExpressionArguments=2576]=\"CallExpressionArguments\",e[e.NewExpressionArguments=18960]=\"NewExpressionArguments\",e[e.TemplateExpressionSpans=262144]=\"TemplateExpressionSpans\",e[e.SingleLineBlockStatements=768]=\"SingleLineBlockStatements\",e[e.MultiLineBlockStatements=129]=\"MultiLineBlockStatements\",e[e.VariableDeclarationList=528]=\"VariableDeclarationList\",e[e.SingleLineFunctionBodyStatements=768]=\"SingleLineFunctionBodyStatements\",e[e.MultiLineFunctionBodyStatements=1]=\"MultiLineFunctionBodyStatements\",e[e.ClassHeritageClauses=0]=\"ClassHeritageClauses\",e[e.ClassMembers=129]=\"ClassMembers\",e[e.InterfaceMembers=129]=\"InterfaceMembers\",e[e.EnumMembers=145]=\"EnumMembers\",e[e.CaseBlockClauses=129]=\"CaseBlockClauses\",e[e.NamedImportsOrExportsElements=525136]=\"NamedImportsOrExportsElements\",e[e.JsxElementOrFragmentChildren=262144]=\"JsxElementOrFragmentChildren\",e[e.JsxElementAttributes=262656]=\"JsxElementAttributes\",e[e.CaseOrDefaultClauseStatements=163969]=\"CaseOrDefaultClauseStatements\",e[e.HeritageClauseTypes=528]=\"HeritageClauseTypes\",e[e.SourceFileStatements=131073]=\"SourceFileStatements\",e[e.Decorators=2146305]=\"Decorators\",e[e.TypeArguments=53776]=\"TypeArguments\",e[e.TypeParameters=53776]=\"TypeParameters\",e[e.Parameters=2576]=\"Parameters\",e[e.IndexSignatureParameters=8848]=\"IndexSignatureParameters\",e[e.JSDocComment=33]=\"JSDocComment\",e))(tj||{}),nj=(e=>(e[e.None=0]=\"None\",e[e.TripleSlashXML=1]=\"TripleSlashXML\",e[e.SingleLine=2]=\"SingleLine\",e[e.MultiLine=4]=\"MultiLine\",e[e.All=7]=\"All\",e[e.Default=7]=\"Default\",e))(nj||{}),iw={reference:{args:[{name:\"types\",optional:!0,captureSpan:!0},{name:\"lib\",optional:!0,captureSpan:!0},{name:\"path\",optional:!0,captureSpan:!0},{name:\"no-default-lib\",optional:!0},{name:\"resolution-mode\",optional:!0}],kind:1},\"amd-dependency\":{args:[{name:\"path\"},{name:\"name\",optional:!0}],kind:1},\"amd-module\":{args:[{name:\"name\"}],kind:1},\"ts-check\":{kind:2},\"ts-nocheck\":{kind:2},jsx:{args:[{name:\"factory\"}],kind:4},jsxfrag:{args:[{name:\"factory\"}],kind:4},jsximportsource:{args:[{name:\"factory\"}],kind:4},jsxruntime:{args:[{name:\"factory\"}],kind:4}}}});function aw(e){let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t+e.charCodeAt(r);return t.toString()}function dDe(){Error.stackTraceLimit<100&&(Error.stackTraceLimit=100)}function $1(e,t){return e.getModifiedTime(t)||Eh}function rj(e){return{250:e.Low,500:e.Medium,2e3:e.High}}function fDe(e){if(!e.getEnvironmentVariable)return;let t=o(\"TSC_WATCH_POLLINGINTERVAL\",V8);cw=s(\"TSC_WATCH_POLLINGCHUNKSIZE\",sw)||cw,lw=s(\"TSC_WATCH_UNCHANGEDPOLLTHRESHOLDS\",sw)||lw;function r(l,f){return e.getEnvironmentVariable(`${l}_${f.toUpperCase()}`)}function i(l){let f;return d(\"Low\"),d(\"Medium\"),d(\"High\"),f;function d(g){let m=r(l,g);m&&((f||(f={}))[g]=Number(m))}}function o(l,f){let d=i(l);if(d)return g(\"Low\"),g(\"Medium\"),g(\"High\"),!0;return!1;function g(m){f[m]=d[m]||f[m]}}function s(l,f){let d=i(l);return(t||d)&&rj(d?{...f,...d}:f)}}function roe(e,t,r,i,o){let s=r;for(let f=t.length;i&&f;l(),f--){let d=t[r];if(d){if(d.isClosed){t[r]=void 0;continue}}else continue;i--;let g=hDe(d,$1(e,d.fileName));if(d.isClosed){t[r]=void 0;continue}o?.(d,r,g),t[r]&&(s<r&&(t[s]=d,t[r]=void 0),s++)}return r;function l(){r++,r===t.length&&(s<r&&(t.length=s),r=0,s=0)}}function _De(e){let t=[],r=[],i=f(250),o=f(500),s=f(2e3);return l;function l(C,P,F){let B={fileName:C,callback:P,unchangedPolls:0,mtime:$1(e,C)};return t.push(B),S(B,F),{close:()=>{B.isClosed=!0,YD(t,B)}}}function f(C){let P=[];return P.pollingInterval=C,P.pollIndex=0,P.pollScheduled=!1,P}function d(C){C.pollIndex=m(C,C.pollingInterval,C.pollIndex,cw[C.pollingInterval]),C.length?w(C.pollingInterval):(L.assert(C.pollIndex===0),C.pollScheduled=!1)}function g(C){m(r,250,0,r.length),d(C),!C.pollScheduled&&r.length&&w(250)}function m(C,P,F,B){return roe(e,C,F,B,q);function q(W,Y,R){R?(W.unchangedPolls=0,C!==r&&(C[Y]=void 0,x(W))):W.unchangedPolls!==lw[P]?W.unchangedPolls++:C===r?(W.unchangedPolls=1,C[Y]=void 0,S(W,250)):P!==2e3&&(W.unchangedPolls++,C[Y]=void 0,S(W,P===250?500:2e3))}}function v(C){switch(C){case 250:return i;case 500:return o;case 2e3:return s}}function S(C,P){v(P).push(C),A(P)}function x(C){r.push(C),A(250)}function A(C){v(C).pollScheduled||w(C)}function w(C){v(C).pollScheduled=e.setTimeout(C===250?g:d,C,v(C))}}function pDe(e,t){let r=Nf(),i=new Map,o=Dl(t);return s;function s(f,d,g,m){let v=o(f);r.add(v,d);let S=ni(v)||\".\",x=i.get(S)||l(ni(f)||\".\",S,m);return x.referenceCount++,{close:()=>{x.referenceCount===1?(x.close(),i.delete(S)):x.referenceCount--,r.remove(v,d)}}}function l(f,d,g){let m=e(f,1,(v,S,x)=>{if(!Ta(S))return;let A=_a(S,f),w=A&&r.get(o(A));if(w)for(let C of w)C(A,1,x)},!1,500,g);return m.referenceCount=0,i.set(d,m),m}}function mDe(e){let t=[],r=0,i;return o;function o(f,d){let g={fileName:f,callback:d,mtime:$1(e,f)};return t.push(g),l(),{close:()=>{g.isClosed=!0,YD(t,g)}}}function s(){i=void 0,r=roe(e,t,r,cw[250]),l()}function l(){!t.length||i||(i=e.setTimeout(s,2e3))}}function ioe(e,t,r,i,o){let l=Dl(t)(r),f=e.get(l);return f?f.callbacks.push(i):e.set(l,{watcher:o((d,g,m)=>{var v;return(v=e.get(l))==null?void 0:v.callbacks.slice().forEach(S=>S(d,g,m))}),callbacks:[i]}),{close:()=>{let d=e.get(l);d&&(!m8(d.callbacks,i)||d.callbacks.length||(e.delete(l),_m(d)))}}}function hDe(e,t){let r=e.mtime.getTime(),i=t.getTime();return r!==i?(e.mtime=t,e.callback(e.fileName,aoe(r,i),t),!0):!1}function aoe(e,t){return e===0?0:t===0?2:1}function ow(e){return aj(e)}function ooe(e){aj=e}function gDe({watchDirectory:e,useCaseSensitiveFileNames:t,getCurrentDirectory:r,getAccessibleSortedChildDirectories:i,fileSystemEntryExists:o,realpath:s,setTimeout:l,clearTimeout:f}){let d=new Map,g=Nf(),m=new Map,v,S=p8(!t),x=Dl(t);return(R,ie,$,fe)=>$?A(R,fe,ie):e(R,ie,$,fe);function A(R,ie,$){let fe=x(R),Z=d.get(fe);Z?Z.refCount++:(Z={watcher:e(R,re=>{W(re,ie)||(ie?.synchronousWatchDirectory?(w(fe,re),q(R,fe,ie)):C(R,fe,re,ie))},!1,ie),refCount:1,childWatches:Je},d.set(fe,Z),q(R,fe,ie));let U=$&&{dirName:R,callback:$};return U&&g.add(fe,U),{dirName:R,close:()=>{let re=L.checkDefined(d.get(fe));U&&g.remove(fe,U),re.refCount--,!re.refCount&&(d.delete(fe),_m(re),re.childWatches.forEach(am))}}}function w(R,ie,$){let fe,Z;Ta(ie)?fe=ie:Z=ie,g.forEach((U,re)=>{if(!(Z&&Z.get(re)===!0)&&(re===R||na(R,re)&&R[re.length]===_s))if(Z)if($){let le=Z.get(re);le?le.push(...$):Z.set(re,$.slice())}else Z.set(re,!0);else U.forEach(({callback:le})=>le(fe))})}function C(R,ie,$,fe){let Z=d.get(ie);if(Z&&o(R,1)){P(R,ie,$,fe);return}w(ie,$),B(Z)}function P(R,ie,$,fe){let Z=m.get(ie);Z?Z.fileNames.push($):m.set(ie,{dirName:R,options:fe,fileNames:[$]}),v&&(f(v),v=void 0),v=l(F,1e3)}function F(){v=void 0,ow(`sysLog:: onTimerToUpdateChildWatches:: ${m.size}`);let R=Ms(),ie=new Map;for(;!v&&m.size;){let fe=m.entries().next();L.assert(!fe.done);let{value:[Z,{dirName:U,options:re,fileNames:le}]}=fe;m.delete(Z);let _e=q(U,Z,re);w(Z,ie,_e?void 0:le)}ow(`sysLog:: invokingWatchers:: Elapsed:: ${Ms()-R}ms:: ${m.size}`),g.forEach((fe,Z)=>{let U=ie.get(Z);U&&fe.forEach(({callback:re,dirName:le})=>{ba(U)?U.forEach(re):re(le)})});let $=Ms()-R;ow(`sysLog:: Elapsed:: ${$}ms:: onTimerToUpdateChildWatches:: ${m.size} ${v}`)}function B(R){if(!R)return;let ie=R.childWatches;R.childWatches=Je;for(let $ of ie)$.close(),B(d.get(x($.dirName)))}function q(R,ie,$){let fe=d.get(ie);if(!fe)return!1;let Z,U=wae(o(R,1)?Zi(i(R),_e=>{let ge=_a(_e,R);return!W(ge,$)&&S(ge,So(s(ge)))===0?ge:void 0}):Je,fe.childWatches,(_e,ge)=>S(_e,ge.dirName),re,am,le);return fe.childWatches=Z||Je,U;function re(_e){let ge=A(_e,$);le(ge)}function le(_e){(Z||(Z=[])).push(_e)}}function W(R,ie){return vt(uw,$=>Y(R,$))||soe(R,ie,t,r)}function Y(R,ie){return jl(R,ie)?!0:t?!1:jl(x(R),ie)}}function yDe(e){return(t,r,i)=>e(r===1?\"change\":\"rename\",\"\",i)}function vDe(e,t,r){return(i,o,s)=>{i===\"rename\"?(s||(s=r(e)||Eh),t(e,s!==Eh?0:2,s)):t(e,1,s)}}function soe(e,t,r,i){return(t?.excludeDirectories||t?.excludeFiles)&&(G3(e,t?.excludeFiles,r,i())||G3(e,t?.excludeDirectories,r,i()))}function coe(e,t,r,i,o){return(s,l)=>{if(s===\"rename\"){let f=l?So(vi(e,l)):e;(!l||!soe(f,r,i,o))&&t(f)}}}function loe({pollingWatchFileWorker:e,getModifiedTime:t,setTimeout:r,clearTimeout:i,fsWatchWorker:o,fileSystemEntryExists:s,useCaseSensitiveFileNames:l,getCurrentDirectory:f,fsSupportsRecursiveFsWatch:d,getAccessibleSortedChildDirectories:g,realpath:m,tscWatchFile:v,useNonPollingWatchers:S,tscWatchDirectory:x,inodeWatching:A,sysLog:w}){let C=new Map,P=new Map,F=new Map,B,q,W,Y,R=!1;return{watchFile:ie,watchDirectory:re};function ie(we,ke,Pe,Ce){Ce=Z(Ce,S);let Ie=L.checkDefined(Ce.watchFile);switch(Ie){case 0:return ge(we,ke,250,void 0);case 1:return ge(we,ke,Pe,void 0);case 2:return $()(we,ke,Pe,void 0);case 3:return fe()(we,ke,void 0,void 0);case 4:return X(we,0,vDe(we,ke,t),!1,Pe,_N(Ce));case 5:return W||(W=pDe(X,l)),W(we,ke,Pe,_N(Ce));default:L.assertNever(Ie)}}function $(){return B||(B=_De({getModifiedTime:t,setTimeout:r}))}function fe(){return q||(q=mDe({getModifiedTime:t,setTimeout:r}))}function Z(we,ke){if(we&&we.watchFile!==void 0)return we;switch(v){case\"PriorityPollingInterval\":return{watchFile:1};case\"DynamicPriorityPolling\":return{watchFile:2};case\"UseFsEvents\":return U(4,1,we);case\"UseFsEventsWithFallbackDynamicPolling\":return U(4,2,we);case\"UseFsEventsOnParentDirectory\":ke=!0;default:return ke?U(5,1,we):{watchFile:4}}}function U(we,ke,Pe){let Ce=Pe?.fallbackPolling;return{watchFile:we,fallbackPolling:Ce===void 0?ke:Ce}}function re(we,ke,Pe,Ce){return d?X(we,1,coe(we,ke,Ce,l,f),Pe,500,_N(Ce)):(Y||(Y=gDe({useCaseSensitiveFileNames:l,getCurrentDirectory:f,fileSystemEntryExists:s,getAccessibleSortedChildDirectories:g,watchDirectory:le,realpath:m,setTimeout:r,clearTimeout:i})),Y(we,ke,Pe,Ce))}function le(we,ke,Pe,Ce){L.assert(!Pe);let Ie=_e(Ce),Be=L.checkDefined(Ie.watchDirectory);switch(Be){case 1:return ge(we,()=>ke(we),500,void 0);case 2:return $()(we,()=>ke(we),500,void 0);case 3:return fe()(we,()=>ke(we),void 0,void 0);case 0:return X(we,1,coe(we,ke,Ce,l,f),Pe,500,_N(Ie));default:L.assertNever(Be)}}function _e(we){if(we&&we.watchDirectory!==void 0)return we;switch(x){case\"RecursiveDirectoryUsingFsWatchFile\":return{watchDirectory:1};case\"RecursiveDirectoryUsingDynamicPriorityPolling\":return{watchDirectory:2};default:let ke=we?.fallbackPolling;return{watchDirectory:0,fallbackPolling:ke!==void 0?ke:void 0}}}function ge(we,ke,Pe,Ce){return ioe(C,l,we,ke,Ie=>e(we,Ie,Pe,Ce))}function X(we,ke,Pe,Ce,Ie,Be){return ioe(Ce?F:P,l,we,Pe,Ne=>Ve(we,ke,Ne,Ce,Ie,Be))}function Ve(we,ke,Pe,Ce,Ie,Be){let Ne,Le;A&&(Ne=we.substring(we.lastIndexOf(_s)),Le=Ne.slice(_s.length));let Ye=s(we,ke)?ct():qe();return{close:()=>{Ye&&(Ye.close(),Ye=void 0)}};function _t(zt){Ye&&(w(`sysLog:: ${we}:: Changing watcher to ${zt===ct?\"Present\":\"Missing\"}FileSystemEntryWatcher`),Ye.close(),Ye=zt())}function ct(){if(R)return w(`sysLog:: ${we}:: Defaulting to watchFile`),We();try{let zt=o(we,Ce,A?Rt:Pe);return zt.on(\"error\",()=>{Pe(\"rename\",\"\"),_t(qe)}),zt}catch(zt){return R||(R=zt.code===\"ENOSPC\"),w(`sysLog:: ${we}:: Changing to watchFile`),We()}}function Rt(zt,Qt){let tn;if(Qt&&Oc(Qt,\"~\")&&(tn=Qt,Qt=Qt.slice(0,Qt.length-1)),zt===\"rename\"&&(!Qt||Qt===Le||Oc(Qt,Ne))){let kn=t(we)||Eh;tn&&Pe(zt,tn,kn),Pe(zt,Qt,kn),A?_t(kn===Eh?qe:ct):kn===Eh&&_t(qe)}else tn&&Pe(zt,tn),Pe(zt,Qt)}function We(){return ie(we,yDe(Pe),Ie,Be)}function qe(){return ie(we,(zt,Qt,tn)=>{Qt===0&&(tn||(tn=t(we)||Eh),tn!==Eh&&(Pe(\"rename\",\"\",tn),_t(ct)))},Ie,Be)}}}function uoe(e){let t=e.writeFile;e.writeFile=(r,i,o)=>nW(r,i,!!o,(s,l,f)=>t.call(e,s,l,f),s=>e.createDirectory(s),s=>e.directoryExists(s))}function bDe(e){xl=e}var ij,V8,Eh,sw,cw,lw,uw,aj,oj,xl,EDe=gt({\"src/compiler/sys.ts\"(){\"use strict\";fa(),ij=(e=>(e[e.Created=0]=\"Created\",e[e.Changed=1]=\"Changed\",e[e.Deleted=2]=\"Deleted\",e))(ij||{}),V8=(e=>(e[e.High=2e3]=\"High\",e[e.Medium=500]=\"Medium\",e[e.Low=250]=\"Low\",e))(V8||{}),Eh=new Date(0),sw={Low:32,Medium:64,High:256},cw=rj(sw),lw=rj(sw),uw=[\"/node_modules/.\",\"/.git\",\"/.#\"],aj=Ba,oj=(e=>(e[e.File=0]=\"File\",e[e.Directory=1]=\"Directory\",e))(oj||{}),xl=(()=>{let e=\"\\uFEFF\";function t(){let i=/^native |^\\([^)]+\\)$|^(internal[\\\\/]|[a-zA-Z0-9_\\s]+(\\.js)?$)/,o=d0(\"fs\"),s=d0(\"path\"),l=d0(\"os\"),f;try{f=d0(\"crypto\")}catch{f=void 0}let d,g=\"./profile.cpuprofile\",m=d0(\"buffer\").Buffer,v=process.platform===\"linux\"||process.platform===\"darwin\",S=l.platform(),x=fe(),A=o.realpathSync.native?process.platform===\"win32\"?Ie:o.realpathSync.native:o.realpathSync,w=__filename.endsWith(\"sys.js\")?s.join(s.dirname(__dirname),\"__fake__.js\"):__filename,C=process.platform===\"win32\"||process.platform===\"darwin\",P=zu(()=>process.cwd()),{watchFile:F,watchDirectory:B}=loe({pollingWatchFileWorker:U,getModifiedTime:Ne,setTimeout,clearTimeout,fsWatchWorker:re,useCaseSensitiveFileNames:x,getCurrentDirectory:P,fileSystemEntryExists:we,fsSupportsRecursiveFsWatch:C,getAccessibleSortedChildDirectories:ct=>X(ct).directories,realpath:Be,tscWatchFile:process.env.TSC_WATCHFILE,useNonPollingWatchers:process.env.TSC_NONPOLLING_WATCHER,tscWatchDirectory:process.env.TSC_WATCHDIRECTORY,inodeWatching:v,sysLog:ow}),q={args:process.argv.slice(2),newLine:l.EOL,useCaseSensitiveFileNames:x,write(ct){process.stdout.write(ct)},getWidthOfTerminal(){return process.stdout.columns},writeOutputIsTTY(){return process.stdout.isTTY},readFile:_e,writeFile:ge,watchFile:F,watchDirectory:B,resolvePath:ct=>s.resolve(ct),fileExists:ke,directoryExists:Pe,createDirectory(ct){if(!q.directoryExists(ct))try{o.mkdirSync(ct)}catch(Rt){if(Rt.code!==\"EEXIST\")throw Rt}},getExecutingFilePath(){return w},getCurrentDirectory:P,getDirectories:Ce,getEnvironmentVariable(ct){return process.env[ct]||\"\"},readDirectory:Ve,getModifiedTime:Ne,setModifiedTime:Le,deleteFile:Ye,createHash:f?_t:aw,createSHA256Hash:f?_t:void 0,getMemoryUsage(){return global.gc&&global.gc(),process.memoryUsage().heapUsed},getFileSize(ct){try{let Rt=W(ct);if(Rt?.isFile())return Rt.size}catch{}return 0},exit(ct){ie(()=>process.exit(ct))},enableCPUProfiler:Y,disableCPUProfiler:ie,cpuProfilingEnabled:()=>!!d||ya(process.execArgv,\"--cpu-prof\")||ya(process.execArgv,\"--prof\"),realpath:Be,debugMode:!!process.env.NODE_INSPECTOR_IPC||!!process.env.VSCODE_INSPECTOR_OPTIONS||vt(process.execArgv,ct=>/^--(inspect|debug)(-brk)?(=\\d+)?$/i.test(ct)),tryEnableSourceMapsForHost(){try{d0(\"source-map-support\").install()}catch{}},setTimeout,clearTimeout,clearScreen:()=>{process.stdout.write(\"\\x1Bc\")},setBlocking:()=>{process.stdout&&process.stdout._handle&&process.stdout._handle.setBlocking&&process.stdout._handle.setBlocking(!0)},bufferFrom:$,base64decode:ct=>$(ct,\"base64\").toString(\"utf8\"),base64encode:ct=>$(ct).toString(\"base64\"),require:(ct,Rt)=>{try{let We=jfe(Rt,ct,q);return{module:d0(We),modulePath:We,error:void 0}}catch(We){return{module:void 0,modulePath:void 0,error:We}}}};return q;function W(ct){return o.statSync(ct,{throwIfNoEntry:!1})}function Y(ct,Rt){if(d)return Rt(),!1;let We=d0(\"inspector\");if(!We||!We.Session)return Rt(),!1;let qe=new We.Session;return qe.connect(),qe.post(\"Profiler.enable\",()=>{qe.post(\"Profiler.start\",()=>{d=qe,g=ct,Rt()})}),!0}function R(ct){let Rt=0,We=new Map,qe=Al(s.dirname(w)),zt=`file://${_p(qe)===1?\"\":\"/\"}${qe}`;for(let Qt of ct.nodes)if(Qt.callFrame.url){let tn=Al(Qt.callFrame.url);Gy(zt,tn,x)?Qt.callFrame.url=Q1(zt,tn,zt,Dl(x),!0):i.test(tn)||(Qt.callFrame.url=(We.has(tn)?We:We.set(tn,`external${Rt}.js`)).get(tn),Rt++)}return ct}function ie(ct){if(d&&d!==\"stopping\"){let Rt=d;return d.post(\"Profiler.stop\",(We,{profile:qe})=>{var zt;if(!We){try{(zt=W(g))!=null&&zt.isDirectory()&&(g=s.join(g,`${new Date().toISOString().replace(/:/g,\"-\")}+P${process.pid}.cpuprofile`))}catch{}try{o.mkdirSync(s.dirname(g),{recursive:!0})}catch{}o.writeFileSync(g,JSON.stringify(R(qe)))}d=void 0,Rt.disconnect(),ct()}),d=\"stopping\",!0}else return ct(),!1}function $(ct,Rt){return m.from&&m.from!==Int8Array.from?m.from(ct,Rt):new m(ct,Rt)}function fe(){return S===\"win32\"||S===\"win64\"?!1:!ke(Z(__filename))}function Z(ct){return ct.replace(/\\w/g,Rt=>{let We=Rt.toUpperCase();return Rt===We?Rt.toLowerCase():We})}function U(ct,Rt,We){o.watchFile(ct,{persistent:!0,interval:We},zt);let qe;return{close:()=>o.unwatchFile(ct,zt)};function zt(Qt,tn){let kn=+tn.mtime==0||qe===2;if(+Qt.mtime==0){if(kn)return;qe=2}else if(kn)qe=0;else{if(+Qt.mtime==+tn.mtime)return;qe=1}Rt(ct,qe,Qt.mtime)}}function re(ct,Rt,We){return o.watch(ct,C?{persistent:!0,recursive:!!Rt}:{persistent:!0},We)}function le(ct,Rt){let We;try{We=o.readFileSync(ct)}catch{return}let qe=We.length;if(qe>=2&&We[0]===254&&We[1]===255){qe&=-2;for(let zt=0;zt<qe;zt+=2){let Qt=We[zt];We[zt]=We[zt+1],We[zt+1]=Qt}return We.toString(\"utf16le\",2)}return qe>=2&&We[0]===255&&We[1]===254?We.toString(\"utf16le\",2):qe>=3&&We[0]===239&&We[1]===187&&We[2]===191?We.toString(\"utf8\",3):We.toString(\"utf8\")}function _e(ct,Rt){fp.logStartReadFile(ct);let We=le(ct,Rt);return fp.logStopReadFile(),We}function ge(ct,Rt,We){fp.logEvent(\"WriteFile: \"+ct),We&&(Rt=e+Rt);let qe;try{qe=o.openSync(ct,\"w\"),o.writeSync(qe,Rt,void 0,\"utf8\")}finally{qe!==void 0&&o.closeSync(qe)}}function X(ct){fp.logEvent(\"ReadDir: \"+(ct||\".\"));try{let Rt=o.readdirSync(ct||\".\",{withFileTypes:!0}),We=[],qe=[];for(let zt of Rt){let Qt=typeof zt==\"string\"?zt:zt.name;if(Qt===\".\"||Qt===\"..\")continue;let tn;if(typeof zt==\"string\"||zt.isSymbolicLink()){let kn=vi(ct,Qt);try{if(tn=W(kn),!tn)continue}catch{continue}}else tn=zt;tn.isFile()?We.push(Qt):tn.isDirectory()&&qe.push(Qt)}return We.sort(),qe.sort(),{files:We,directories:qe}}catch{return D4}}function Ve(ct,Rt,We,qe,zt){return wW(ct,Rt,We,qe,x,process.cwd(),zt,X,Be)}function we(ct,Rt){let We=Error.stackTraceLimit;Error.stackTraceLimit=0;try{let qe=W(ct);if(!qe)return!1;switch(Rt){case 0:return qe.isFile();case 1:return qe.isDirectory();default:return!1}}catch{return!1}finally{Error.stackTraceLimit=We}}function ke(ct){return we(ct,0)}function Pe(ct){return we(ct,1)}function Ce(ct){return X(ct).directories.slice()}function Ie(ct){return ct.length<260?o.realpathSync.native(ct):o.realpathSync(ct)}function Be(ct){try{return A(ct)}catch{return ct}}function Ne(ct){var Rt;let We=Error.stackTraceLimit;Error.stackTraceLimit=0;try{return(Rt=W(ct))==null?void 0:Rt.mtime}catch{return}finally{Error.stackTraceLimit=We}}function Le(ct,Rt){try{o.utimesSync(ct,Rt,Rt)}catch{return}}function Ye(ct){try{return o.unlinkSync(ct)}catch{return}}function _t(ct){let Rt=f.createHash(\"sha256\");return Rt.update(ct),Rt.digest(\"hex\")}}let r;return qU()&&(r=t()),r&&uoe(r),r})(),xl&&xl.getEnvironmentVariable&&(fDe(xl),L.setAssertionLevel(/^development$/i.test(xl.getEnvironmentVariable(\"NODE_ENV\"))?1:0)),xl&&xl.debugMode&&(L.isDebugging=!0)}});function sj(e){return e===47||e===92}function doe(e){return dw(e)<0}function qp(e){return dw(e)>0}function TDe(e){let t=dw(e);return t>0&&t===e.length}function nI(e){return dw(e)!==0}function Jd(e){return/^\\.\\.?($|[\\\\/])/.test(e)}function cj(e){return!nI(e)&&!Jd(e)}function gA(e){return jl(Hl(e),\".\")}function Gc(e,t){return e.length>t.length&&Oc(e,t)}function $c(e,t){for(let r of t)if(Gc(e,r))return!0;return!1}function My(e){return e.length>0&&sj(e.charCodeAt(e.length-1))}function foe(e){return e>=97&&e<=122||e>=65&&e<=90}function SDe(e,t){let r=e.charCodeAt(t);if(r===58)return t+1;if(r===37&&e.charCodeAt(t+1)===51){let i=e.charCodeAt(t+2);if(i===97||i===65)return t+3}return-1}function dw(e){if(!e)return 0;let t=e.charCodeAt(0);if(t===47||t===92){if(e.charCodeAt(1)!==t)return 1;let i=e.indexOf(t===47?_s:pw,2);return i<0?e.length:i+1}if(foe(t)&&e.charCodeAt(1)===58){let i=e.charCodeAt(2);if(i===47||i===92)return 3;if(e.length===2)return 2}let r=e.indexOf(pj);if(r!==-1){let i=r+pj.length,o=e.indexOf(_s,i);if(o!==-1){let s=e.slice(0,r),l=e.slice(i,o);if(s===\"file\"&&(l===\"\"||l===\"localhost\")&&foe(e.charCodeAt(o+1))){let f=SDe(e,o+2);if(f!==-1){if(e.charCodeAt(f)===47)return~(f+1);if(f===e.length)return~f}}return~(o+1)}return~e.length}return 0}function _p(e){let t=dw(e);return t<0?~t:t}function ni(e){e=Al(e);let t=_p(e);return t===e.length?e:(e=sT(e),e.slice(0,Math.max(t,e.lastIndexOf(_s))))}function Hl(e,t,r){if(e=Al(e),_p(e)===e.length)return\"\";e=sT(e);let o=e.slice(Math.max(_p(e),e.lastIndexOf(_s)+1)),s=t!==void 0&&r!==void 0?j8(o,t,r):void 0;return s?o.slice(0,o.length-s.length):o}function _oe(e,t,r){if(na(t,\".\")||(t=\".\"+t),e.length>=t.length&&e.charCodeAt(e.length-t.length)===46){let i=e.slice(e.length-t.length);if(r(i,t))return i}}function xDe(e,t,r){if(typeof t==\"string\")return _oe(e,t,r)||\"\";for(let i of t){let o=_oe(e,i,r);if(o)return o}return\"\"}function j8(e,t,r){if(t)return xDe(sT(e),t,r?W1:z1);let i=Hl(e),o=i.lastIndexOf(\".\");return o>=0?i.substring(o):\"\"}function ADe(e,t){let r=e.substring(0,t),i=e.substring(t).split(_s);return i.length&&!Os(i)&&i.pop(),[r,...i]}function Ou(e,t=\"\"){return e=vi(t,e),ADe(e,_p(e))}function T0(e){return e.length===0?\"\":(e[0]&&cu(e[0]))+e.slice(1).join(_s)}function Al(e){return e.indexOf(\"\\\\\")!==-1?e.replace(poe,_s):e}function oT(e){if(!vt(e))return[];let t=[e[0]];for(let r=1;r<e.length;r++){let i=e[r];if(i&&i!==\".\"){if(i===\"..\"){if(t.length>1){if(t[t.length-1]!==\"..\"){t.pop();continue}}else if(t[0])continue}t.push(i)}}return t}function vi(e,...t){e&&(e=Al(e));for(let r of t)r&&(r=Al(r),!e||_p(r)!==0?e=r:e=cu(e)+r);return e}function Fy(e,...t){return So(vt(t)?vi(e,...t):Al(e))}function fw(e,t){return oT(Ou(e,t))}function _a(e,t){return T0(fw(e,t))}function So(e){if(e=Al(e),!mw.test(e))return e;let t=e.replace(/\\/\\.\\//g,\"/\").replace(/^\\.\\//,\"\");if(t!==e&&(e=t,!mw.test(e)))return e;let r=T0(oT(Ou(e)));return r&&My(e)?cu(r):r}function CDe(e){return e.length===0?\"\":e.slice(1).join(_s)}function lj(e,t){return CDe(fw(e,t))}function Ts(e,t,r){let i=qp(e)?So(e):_a(e,t);return r(i)}function sT(e){return My(e)?e.substr(0,e.length-1):e}function cu(e){return My(e)?e:e+_s}function S0(e){return!nI(e)&&!Jd(e)?\"./\"+e:e}function uj(e,t,r,i){let o=r!==void 0&&i!==void 0?j8(e,r,i):j8(e);return o?e.slice(0,e.length-o.length)+(na(t,\".\")?t:\".\"+t):e}function dj(e,t,r){if(e===t)return 0;if(e===void 0)return-1;if(t===void 0)return 1;let i=e.substring(0,_p(e)),o=t.substring(0,_p(t)),s=_8(i,o);if(s!==0)return s;let l=e.substring(i.length),f=t.substring(o.length);if(!mw.test(l)&&!mw.test(f))return r(l,f);let d=oT(Ou(e)),g=oT(Ou(t)),m=Math.min(d.length,g.length);for(let v=1;v<m;v++){let S=r(d[v],g[v]);if(S!==0)return S}return Es(d.length,g.length)}function IDe(e,t){return dj(e,t,su)}function LDe(e,t){return dj(e,t,_8)}function cT(e,t,r,i){return typeof r==\"string\"?(e=vi(r,e),t=vi(r,t)):typeof r==\"boolean\"&&(i=r),dj(e,t,p8(i))}function Gy(e,t,r,i){if(typeof r==\"string\"?(e=vi(r,e),t=vi(r,t)):typeof r==\"boolean\"&&(i=r),e===void 0||t===void 0)return!1;if(e===t)return!0;let o=oT(Ou(e)),s=oT(Ou(t));if(s.length<o.length)return!1;let l=i?W1:z1;for(let f=0;f<o.length;f++)if(!(f===0?W1:l)(o[f],s[f]))return!1;return!0}function fj(e,t,r){let i=r(e),o=r(t);return na(i,o+\"/\")||na(i,o+\"\\\\\")}function _j(e,t,r,i){let o=oT(Ou(e)),s=oT(Ou(t)),l;for(l=0;l<o.length&&l<s.length;l++){let g=i(o[l]),m=i(s[l]);if(!(l===0?W1:r)(g,m))break}if(l===0)return s;let f=s.slice(l),d=[];for(;l<o.length;l++)d.push(\"..\");return[\"\",...d,...f]}function Xp(e,t,r){L.assert(_p(e)>0==_p(t)>0,\"Paths must either both be absolute or both be relative\");let s=_j(e,t,(typeof r==\"boolean\"?r:!1)?W1:z1,typeof r==\"function\"?r:Ks);return T0(s)}function rI(e,t,r){return qp(e)?Q1(t,e,t,r,!1):e}function _w(e,t,r){return S0(Xp(ni(e),t,r))}function Q1(e,t,r,i,o){let s=_j(Fy(r,e),Fy(r,t),z1,i),l=s[0];if(o&&qp(l)){let f=l.charAt(0)===_s?\"file://\":\"file:///\";s[0]=f+l}return T0(s)}function Th(e,t){for(;;){let r=t(e);if(r!==void 0)return r;let i=ni(e);if(i===e)return;e=i}}function H8(e){return Oc(e,\"/node_modules\")}var _s,pw,pj,poe,mw,kDe=gt({\"src/compiler/path.ts\"(){\"use strict\";fa(),_s=\"/\",pw=\"\\\\\",pj=\"://\",poe=/\\\\/g,mw=/(?:\\/\\/)|(?:^|\\/)\\.\\.?(?:$|\\/)/}});function b(e,t,r,i,o,s,l){return{code:e,category:t,key:r,message:i,reportsUnnecessary:o,elidedInCompatabilityPyramid:s,reportsDeprecated:l}}var _,DDe=gt({\"src/compiler/diagnosticInformationMap.generated.ts\"(){\"use strict\";noe(),_={Unterminated_string_literal:b(1002,1,\"Unterminated_string_literal_1002\",\"Unterminated string literal.\"),Identifier_expected:b(1003,1,\"Identifier_expected_1003\",\"Identifier expected.\"),_0_expected:b(1005,1,\"_0_expected_1005\",\"'{0}' expected.\"),A_file_cannot_have_a_reference_to_itself:b(1006,1,\"A_file_cannot_have_a_reference_to_itself_1006\",\"A file cannot have a reference to itself.\"),The_parser_expected_to_find_a_1_to_match_the_0_token_here:b(1007,1,\"The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007\",\"The parser expected to find a '{1}' to match the '{0}' token here.\"),Trailing_comma_not_allowed:b(1009,1,\"Trailing_comma_not_allowed_1009\",\"Trailing comma not allowed.\"),Asterisk_Slash_expected:b(1010,1,\"Asterisk_Slash_expected_1010\",\"'*/' expected.\"),An_element_access_expression_should_take_an_argument:b(1011,1,\"An_element_access_expression_should_take_an_argument_1011\",\"An element access expression should take an argument.\"),Unexpected_token:b(1012,1,\"Unexpected_token_1012\",\"Unexpected token.\"),A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma:b(1013,1,\"A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013\",\"A rest parameter or binding pattern may not have a trailing comma.\"),A_rest_parameter_must_be_last_in_a_parameter_list:b(1014,1,\"A_rest_parameter_must_be_last_in_a_parameter_list_1014\",\"A rest parameter must be last in a parameter list.\"),Parameter_cannot_have_question_mark_and_initializer:b(1015,1,\"Parameter_cannot_have_question_mark_and_initializer_1015\",\"Parameter cannot have question mark and initializer.\"),A_required_parameter_cannot_follow_an_optional_parameter:b(1016,1,\"A_required_parameter_cannot_follow_an_optional_parameter_1016\",\"A required parameter cannot follow an optional parameter.\"),An_index_signature_cannot_have_a_rest_parameter:b(1017,1,\"An_index_signature_cannot_have_a_rest_parameter_1017\",\"An index signature cannot have a rest parameter.\"),An_index_signature_parameter_cannot_have_an_accessibility_modifier:b(1018,1,\"An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018\",\"An index signature parameter cannot have an accessibility modifier.\"),An_index_signature_parameter_cannot_have_a_question_mark:b(1019,1,\"An_index_signature_parameter_cannot_have_a_question_mark_1019\",\"An index signature parameter cannot have a question mark.\"),An_index_signature_parameter_cannot_have_an_initializer:b(1020,1,\"An_index_signature_parameter_cannot_have_an_initializer_1020\",\"An index signature parameter cannot have an initializer.\"),An_index_signature_must_have_a_type_annotation:b(1021,1,\"An_index_signature_must_have_a_type_annotation_1021\",\"An index signature must have a type annotation.\"),An_index_signature_parameter_must_have_a_type_annotation:b(1022,1,\"An_index_signature_parameter_must_have_a_type_annotation_1022\",\"An index signature parameter must have a type annotation.\"),readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature:b(1024,1,\"readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024\",\"'readonly' modifier can only appear on a property declaration or index signature.\"),An_index_signature_cannot_have_a_trailing_comma:b(1025,1,\"An_index_signature_cannot_have_a_trailing_comma_1025\",\"An index signature cannot have a trailing comma.\"),Accessibility_modifier_already_seen:b(1028,1,\"Accessibility_modifier_already_seen_1028\",\"Accessibility modifier already seen.\"),_0_modifier_must_precede_1_modifier:b(1029,1,\"_0_modifier_must_precede_1_modifier_1029\",\"'{0}' modifier must precede '{1}' modifier.\"),_0_modifier_already_seen:b(1030,1,\"_0_modifier_already_seen_1030\",\"'{0}' modifier already seen.\"),_0_modifier_cannot_appear_on_class_elements_of_this_kind:b(1031,1,\"_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031\",\"'{0}' modifier cannot appear on class elements of this kind.\"),super_must_be_followed_by_an_argument_list_or_member_access:b(1034,1,\"super_must_be_followed_by_an_argument_list_or_member_access_1034\",\"'super' must be followed by an argument list or member access.\"),Only_ambient_modules_can_use_quoted_names:b(1035,1,\"Only_ambient_modules_can_use_quoted_names_1035\",\"Only ambient modules can use quoted names.\"),Statements_are_not_allowed_in_ambient_contexts:b(1036,1,\"Statements_are_not_allowed_in_ambient_contexts_1036\",\"Statements are not allowed in ambient contexts.\"),A_declare_modifier_cannot_be_used_in_an_already_ambient_context:b(1038,1,\"A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038\",\"A 'declare' modifier cannot be used in an already ambient context.\"),Initializers_are_not_allowed_in_ambient_contexts:b(1039,1,\"Initializers_are_not_allowed_in_ambient_contexts_1039\",\"Initializers are not allowed in ambient contexts.\"),_0_modifier_cannot_be_used_in_an_ambient_context:b(1040,1,\"_0_modifier_cannot_be_used_in_an_ambient_context_1040\",\"'{0}' modifier cannot be used in an ambient context.\"),_0_modifier_cannot_be_used_here:b(1042,1,\"_0_modifier_cannot_be_used_here_1042\",\"'{0}' modifier cannot be used here.\"),_0_modifier_cannot_appear_on_a_module_or_namespace_element:b(1044,1,\"_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044\",\"'{0}' modifier cannot appear on a module or namespace element.\"),Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier:b(1046,1,\"Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046\",\"Top-level declarations in .d.ts files must start with either a 'declare' or 'export' modifier.\"),A_rest_parameter_cannot_be_optional:b(1047,1,\"A_rest_parameter_cannot_be_optional_1047\",\"A rest parameter cannot be optional.\"),A_rest_parameter_cannot_have_an_initializer:b(1048,1,\"A_rest_parameter_cannot_have_an_initializer_1048\",\"A rest parameter cannot have an initializer.\"),A_set_accessor_must_have_exactly_one_parameter:b(1049,1,\"A_set_accessor_must_have_exactly_one_parameter_1049\",\"A 'set' accessor must have exactly one parameter.\"),A_set_accessor_cannot_have_an_optional_parameter:b(1051,1,\"A_set_accessor_cannot_have_an_optional_parameter_1051\",\"A 'set' accessor cannot have an optional parameter.\"),A_set_accessor_parameter_cannot_have_an_initializer:b(1052,1,\"A_set_accessor_parameter_cannot_have_an_initializer_1052\",\"A 'set' accessor parameter cannot have an initializer.\"),A_set_accessor_cannot_have_rest_parameter:b(1053,1,\"A_set_accessor_cannot_have_rest_parameter_1053\",\"A 'set' accessor cannot have rest parameter.\"),A_get_accessor_cannot_have_parameters:b(1054,1,\"A_get_accessor_cannot_have_parameters_1054\",\"A 'get' accessor cannot have parameters.\"),Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value:b(1055,1,\"Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055\",\"Type '{0}' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value.\"),Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher:b(1056,1,\"Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056\",\"Accessors are only available when targeting ECMAScript 5 and higher.\"),The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:b(1058,1,\"The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058\",\"The return type of an async function must either be a valid promise or must not contain a callable 'then' member.\"),A_promise_must_have_a_then_method:b(1059,1,\"A_promise_must_have_a_then_method_1059\",\"A promise must have a 'then' method.\"),The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback:b(1060,1,\"The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060\",\"The first parameter of the 'then' method of a promise must be a callback.\"),Enum_member_must_have_initializer:b(1061,1,\"Enum_member_must_have_initializer_1061\",\"Enum member must have initializer.\"),Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method:b(1062,1,\"Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062\",\"Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method.\"),An_export_assignment_cannot_be_used_in_a_namespace:b(1063,1,\"An_export_assignment_cannot_be_used_in_a_namespace_1063\",\"An export assignment cannot be used in a namespace.\"),The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0:b(1064,1,\"The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064\",\"The return type of an async function or method must be the global Promise<T> type. Did you mean to write 'Promise<{0}>'?\"),In_ambient_enum_declarations_member_initializer_must_be_constant_expression:b(1066,1,\"In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066\",\"In ambient enum declarations member initializer must be constant expression.\"),Unexpected_token_A_constructor_method_accessor_or_property_was_expected:b(1068,1,\"Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068\",\"Unexpected token. A constructor, method, accessor, or property was expected.\"),Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces:b(1069,1,\"Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069\",\"Unexpected token. A type parameter name was expected without curly braces.\"),_0_modifier_cannot_appear_on_a_type_member:b(1070,1,\"_0_modifier_cannot_appear_on_a_type_member_1070\",\"'{0}' modifier cannot appear on a type member.\"),_0_modifier_cannot_appear_on_an_index_signature:b(1071,1,\"_0_modifier_cannot_appear_on_an_index_signature_1071\",\"'{0}' modifier cannot appear on an index signature.\"),A_0_modifier_cannot_be_used_with_an_import_declaration:b(1079,1,\"A_0_modifier_cannot_be_used_with_an_import_declaration_1079\",\"A '{0}' modifier cannot be used with an import declaration.\"),Invalid_reference_directive_syntax:b(1084,1,\"Invalid_reference_directive_syntax_1084\",\"Invalid 'reference' directive syntax.\"),Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0:b(1085,1,\"Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085\",\"Octal literals are not available when targeting ECMAScript 5 and higher. Use the syntax '{0}'.\"),_0_modifier_cannot_appear_on_a_constructor_declaration:b(1089,1,\"_0_modifier_cannot_appear_on_a_constructor_declaration_1089\",\"'{0}' modifier cannot appear on a constructor declaration.\"),_0_modifier_cannot_appear_on_a_parameter:b(1090,1,\"_0_modifier_cannot_appear_on_a_parameter_1090\",\"'{0}' modifier cannot appear on a parameter.\"),Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement:b(1091,1,\"Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091\",\"Only a single variable declaration is allowed in a 'for...in' statement.\"),Type_parameters_cannot_appear_on_a_constructor_declaration:b(1092,1,\"Type_parameters_cannot_appear_on_a_constructor_declaration_1092\",\"Type parameters cannot appear on a constructor declaration.\"),Type_annotation_cannot_appear_on_a_constructor_declaration:b(1093,1,\"Type_annotation_cannot_appear_on_a_constructor_declaration_1093\",\"Type annotation cannot appear on a constructor declaration.\"),An_accessor_cannot_have_type_parameters:b(1094,1,\"An_accessor_cannot_have_type_parameters_1094\",\"An accessor cannot have type parameters.\"),A_set_accessor_cannot_have_a_return_type_annotation:b(1095,1,\"A_set_accessor_cannot_have_a_return_type_annotation_1095\",\"A 'set' accessor cannot have a return type annotation.\"),An_index_signature_must_have_exactly_one_parameter:b(1096,1,\"An_index_signature_must_have_exactly_one_parameter_1096\",\"An index signature must have exactly one parameter.\"),_0_list_cannot_be_empty:b(1097,1,\"_0_list_cannot_be_empty_1097\",\"'{0}' list cannot be empty.\"),Type_parameter_list_cannot_be_empty:b(1098,1,\"Type_parameter_list_cannot_be_empty_1098\",\"Type parameter list cannot be empty.\"),Type_argument_list_cannot_be_empty:b(1099,1,\"Type_argument_list_cannot_be_empty_1099\",\"Type argument list cannot be empty.\"),Invalid_use_of_0_in_strict_mode:b(1100,1,\"Invalid_use_of_0_in_strict_mode_1100\",\"Invalid use of '{0}' in strict mode.\"),with_statements_are_not_allowed_in_strict_mode:b(1101,1,\"with_statements_are_not_allowed_in_strict_mode_1101\",\"'with' statements are not allowed in strict mode.\"),delete_cannot_be_called_on_an_identifier_in_strict_mode:b(1102,1,\"delete_cannot_be_called_on_an_identifier_in_strict_mode_1102\",\"'delete' cannot be called on an identifier in strict mode.\"),for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules:b(1103,1,\"for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103\",\"'for await' loops are only allowed within async functions and at the top levels of modules.\"),A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement:b(1104,1,\"A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104\",\"A 'continue' statement can only be used within an enclosing iteration statement.\"),A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement:b(1105,1,\"A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105\",\"A 'break' statement can only be used within an enclosing iteration or switch statement.\"),The_left_hand_side_of_a_for_of_statement_may_not_be_async:b(1106,1,\"The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106\",\"The left-hand side of a 'for...of' statement may not be 'async'.\"),Jump_target_cannot_cross_function_boundary:b(1107,1,\"Jump_target_cannot_cross_function_boundary_1107\",\"Jump target cannot cross function boundary.\"),A_return_statement_can_only_be_used_within_a_function_body:b(1108,1,\"A_return_statement_can_only_be_used_within_a_function_body_1108\",\"A 'return' statement can only be used within a function body.\"),Expression_expected:b(1109,1,\"Expression_expected_1109\",\"Expression expected.\"),Type_expected:b(1110,1,\"Type_expected_1110\",\"Type expected.\"),A_default_clause_cannot_appear_more_than_once_in_a_switch_statement:b(1113,1,\"A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113\",\"A 'default' clause cannot appear more than once in a 'switch' statement.\"),Duplicate_label_0:b(1114,1,\"Duplicate_label_0_1114\",\"Duplicate label '{0}'.\"),A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement:b(1115,1,\"A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115\",\"A 'continue' statement can only jump to a label of an enclosing iteration statement.\"),A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement:b(1116,1,\"A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116\",\"A 'break' statement can only jump to a label of an enclosing statement.\"),An_object_literal_cannot_have_multiple_properties_with_the_same_name:b(1117,1,\"An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117\",\"An object literal cannot have multiple properties with the same name.\"),An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name:b(1118,1,\"An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118\",\"An object literal cannot have multiple get/set accessors with the same name.\"),An_object_literal_cannot_have_property_and_accessor_with_the_same_name:b(1119,1,\"An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119\",\"An object literal cannot have property and accessor with the same name.\"),An_export_assignment_cannot_have_modifiers:b(1120,1,\"An_export_assignment_cannot_have_modifiers_1120\",\"An export assignment cannot have modifiers.\"),Octal_literals_are_not_allowed_in_strict_mode:b(1121,1,\"Octal_literals_are_not_allowed_in_strict_mode_1121\",\"Octal literals are not allowed in strict mode.\"),Variable_declaration_list_cannot_be_empty:b(1123,1,\"Variable_declaration_list_cannot_be_empty_1123\",\"Variable declaration list cannot be empty.\"),Digit_expected:b(1124,1,\"Digit_expected_1124\",\"Digit expected.\"),Hexadecimal_digit_expected:b(1125,1,\"Hexadecimal_digit_expected_1125\",\"Hexadecimal digit expected.\"),Unexpected_end_of_text:b(1126,1,\"Unexpected_end_of_text_1126\",\"Unexpected end of text.\"),Invalid_character:b(1127,1,\"Invalid_character_1127\",\"Invalid character.\"),Declaration_or_statement_expected:b(1128,1,\"Declaration_or_statement_expected_1128\",\"Declaration or statement expected.\"),Statement_expected:b(1129,1,\"Statement_expected_1129\",\"Statement expected.\"),case_or_default_expected:b(1130,1,\"case_or_default_expected_1130\",\"'case' or 'default' expected.\"),Property_or_signature_expected:b(1131,1,\"Property_or_signature_expected_1131\",\"Property or signature expected.\"),Enum_member_expected:b(1132,1,\"Enum_member_expected_1132\",\"Enum member expected.\"),Variable_declaration_expected:b(1134,1,\"Variable_declaration_expected_1134\",\"Variable declaration expected.\"),Argument_expression_expected:b(1135,1,\"Argument_expression_expected_1135\",\"Argument expression expected.\"),Property_assignment_expected:b(1136,1,\"Property_assignment_expected_1136\",\"Property assignment expected.\"),Expression_or_comma_expected:b(1137,1,\"Expression_or_comma_expected_1137\",\"Expression or comma expected.\"),Parameter_declaration_expected:b(1138,1,\"Parameter_declaration_expected_1138\",\"Parameter declaration expected.\"),Type_parameter_declaration_expected:b(1139,1,\"Type_parameter_declaration_expected_1139\",\"Type parameter declaration expected.\"),Type_argument_expected:b(1140,1,\"Type_argument_expected_1140\",\"Type argument expected.\"),String_literal_expected:b(1141,1,\"String_literal_expected_1141\",\"String literal expected.\"),Line_break_not_permitted_here:b(1142,1,\"Line_break_not_permitted_here_1142\",\"Line break not permitted here.\"),or_expected:b(1144,1,\"or_expected_1144\",\"'{' or ';' expected.\"),or_JSX_element_expected:b(1145,1,\"or_JSX_element_expected_1145\",\"'{' or JSX element expected.\"),Declaration_expected:b(1146,1,\"Declaration_expected_1146\",\"Declaration expected.\"),Import_declarations_in_a_namespace_cannot_reference_a_module:b(1147,1,\"Import_declarations_in_a_namespace_cannot_reference_a_module_1147\",\"Import declarations in a namespace cannot reference a module.\"),Cannot_use_imports_exports_or_module_augmentations_when_module_is_none:b(1148,1,\"Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148\",\"Cannot use imports, exports, or module augmentations when '--module' is 'none'.\"),File_name_0_differs_from_already_included_file_name_1_only_in_casing:b(1149,1,\"File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149\",\"File name '{0}' differs from already included file name '{1}' only in casing.\"),const_declarations_must_be_initialized:b(1155,1,\"const_declarations_must_be_initialized_1155\",\"'const' declarations must be initialized.\"),const_declarations_can_only_be_declared_inside_a_block:b(1156,1,\"const_declarations_can_only_be_declared_inside_a_block_1156\",\"'const' declarations can only be declared inside a block.\"),let_declarations_can_only_be_declared_inside_a_block:b(1157,1,\"let_declarations_can_only_be_declared_inside_a_block_1157\",\"'let' declarations can only be declared inside a block.\"),Unterminated_template_literal:b(1160,1,\"Unterminated_template_literal_1160\",\"Unterminated template literal.\"),Unterminated_regular_expression_literal:b(1161,1,\"Unterminated_regular_expression_literal_1161\",\"Unterminated regular expression literal.\"),An_object_member_cannot_be_declared_optional:b(1162,1,\"An_object_member_cannot_be_declared_optional_1162\",\"An object member cannot be declared optional.\"),A_yield_expression_is_only_allowed_in_a_generator_body:b(1163,1,\"A_yield_expression_is_only_allowed_in_a_generator_body_1163\",\"A 'yield' expression is only allowed in a generator body.\"),Computed_property_names_are_not_allowed_in_enums:b(1164,1,\"Computed_property_names_are_not_allowed_in_enums_1164\",\"Computed property names are not allowed in enums.\"),A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type:b(1165,1,\"A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165\",\"A computed property name in an ambient context must refer to an expression whose type is a literal type or a 'unique symbol' type.\"),A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_symbol_type:b(1166,1,\"A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166\",\"A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type.\"),A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type:b(1168,1,\"A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168\",\"A computed property name in a method overload must refer to an expression whose type is a literal type or a 'unique symbol' type.\"),A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type:b(1169,1,\"A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169\",\"A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type.\"),A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type:b(1170,1,\"A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170\",\"A computed property name in a type literal must refer to an expression whose type is a literal type or a 'unique symbol' type.\"),A_comma_expression_is_not_allowed_in_a_computed_property_name:b(1171,1,\"A_comma_expression_is_not_allowed_in_a_computed_property_name_1171\",\"A comma expression is not allowed in a computed property name.\"),extends_clause_already_seen:b(1172,1,\"extends_clause_already_seen_1172\",\"'extends' clause already seen.\"),extends_clause_must_precede_implements_clause:b(1173,1,\"extends_clause_must_precede_implements_clause_1173\",\"'extends' clause must precede 'implements' clause.\"),Classes_can_only_extend_a_single_class:b(1174,1,\"Classes_can_only_extend_a_single_class_1174\",\"Classes can only extend a single class.\"),implements_clause_already_seen:b(1175,1,\"implements_clause_already_seen_1175\",\"'implements' clause already seen.\"),Interface_declaration_cannot_have_implements_clause:b(1176,1,\"Interface_declaration_cannot_have_implements_clause_1176\",\"Interface declaration cannot have 'implements' clause.\"),Binary_digit_expected:b(1177,1,\"Binary_digit_expected_1177\",\"Binary digit expected.\"),Octal_digit_expected:b(1178,1,\"Octal_digit_expected_1178\",\"Octal digit expected.\"),Unexpected_token_expected:b(1179,1,\"Unexpected_token_expected_1179\",\"Unexpected token. '{' expected.\"),Property_destructuring_pattern_expected:b(1180,1,\"Property_destructuring_pattern_expected_1180\",\"Property destructuring pattern expected.\"),Array_element_destructuring_pattern_expected:b(1181,1,\"Array_element_destructuring_pattern_expected_1181\",\"Array element destructuring pattern expected.\"),A_destructuring_declaration_must_have_an_initializer:b(1182,1,\"A_destructuring_declaration_must_have_an_initializer_1182\",\"A destructuring declaration must have an initializer.\"),An_implementation_cannot_be_declared_in_ambient_contexts:b(1183,1,\"An_implementation_cannot_be_declared_in_ambient_contexts_1183\",\"An implementation cannot be declared in ambient contexts.\"),Modifiers_cannot_appear_here:b(1184,1,\"Modifiers_cannot_appear_here_1184\",\"Modifiers cannot appear here.\"),Merge_conflict_marker_encountered:b(1185,1,\"Merge_conflict_marker_encountered_1185\",\"Merge conflict marker encountered.\"),A_rest_element_cannot_have_an_initializer:b(1186,1,\"A_rest_element_cannot_have_an_initializer_1186\",\"A rest element cannot have an initializer.\"),A_parameter_property_may_not_be_declared_using_a_binding_pattern:b(1187,1,\"A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187\",\"A parameter property may not be declared using a binding pattern.\"),Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement:b(1188,1,\"Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188\",\"Only a single variable declaration is allowed in a 'for...of' statement.\"),The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer:b(1189,1,\"The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189\",\"The variable declaration of a 'for...in' statement cannot have an initializer.\"),The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer:b(1190,1,\"The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190\",\"The variable declaration of a 'for...of' statement cannot have an initializer.\"),An_import_declaration_cannot_have_modifiers:b(1191,1,\"An_import_declaration_cannot_have_modifiers_1191\",\"An import declaration cannot have modifiers.\"),Module_0_has_no_default_export:b(1192,1,\"Module_0_has_no_default_export_1192\",\"Module '{0}' has no default export.\"),An_export_declaration_cannot_have_modifiers:b(1193,1,\"An_export_declaration_cannot_have_modifiers_1193\",\"An export declaration cannot have modifiers.\"),Export_declarations_are_not_permitted_in_a_namespace:b(1194,1,\"Export_declarations_are_not_permitted_in_a_namespace_1194\",\"Export declarations are not permitted in a namespace.\"),export_Asterisk_does_not_re_export_a_default:b(1195,1,\"export_Asterisk_does_not_re_export_a_default_1195\",\"'export *' does not re-export a default.\"),Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified:b(1196,1,\"Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196\",\"Catch clause variable type annotation must be 'any' or 'unknown' if specified.\"),Catch_clause_variable_cannot_have_an_initializer:b(1197,1,\"Catch_clause_variable_cannot_have_an_initializer_1197\",\"Catch clause variable cannot have an initializer.\"),An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive:b(1198,1,\"An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198\",\"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\"),Unterminated_Unicode_escape_sequence:b(1199,1,\"Unterminated_Unicode_escape_sequence_1199\",\"Unterminated Unicode escape sequence.\"),Line_terminator_not_permitted_before_arrow:b(1200,1,\"Line_terminator_not_permitted_before_arrow_1200\",\"Line terminator not permitted before arrow.\"),Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead:b(1202,1,\"Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202\",`Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"', or another module format instead.`),Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead:b(1203,1,\"Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203\",\"Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead.\"),Re_exporting_a_type_when_0_is_enabled_requires_using_export_type:b(1205,1,\"Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205\",\"Re-exporting a type when '{0}' is enabled requires using 'export type'.\"),Decorators_are_not_valid_here:b(1206,1,\"Decorators_are_not_valid_here_1206\",\"Decorators are not valid here.\"),Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name:b(1207,1,\"Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207\",\"Decorators cannot be applied to multiple get/set accessors of the same name.\"),Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0:b(1209,1,\"Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209\",\"Invalid optional chain from new expression. Did you mean to call '{0}()'?\"),Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode:b(1210,1,\"Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210\",\"Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.\"),A_class_declaration_without_the_default_modifier_must_have_a_name:b(1211,1,\"A_class_declaration_without_the_default_modifier_must_have_a_name_1211\",\"A class declaration without the 'default' modifier must have a name.\"),Identifier_expected_0_is_a_reserved_word_in_strict_mode:b(1212,1,\"Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212\",\"Identifier expected. '{0}' is a reserved word in strict mode.\"),Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode:b(1213,1,\"Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213\",\"Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode.\"),Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode:b(1214,1,\"Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214\",\"Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode.\"),Invalid_use_of_0_Modules_are_automatically_in_strict_mode:b(1215,1,\"Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215\",\"Invalid use of '{0}'. Modules are automatically in strict mode.\"),Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules:b(1216,1,\"Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216\",\"Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules.\"),Export_assignment_is_not_supported_when_module_flag_is_system:b(1218,1,\"Export_assignment_is_not_supported_when_module_flag_is_system_1218\",\"Export assignment is not supported when '--module' flag is 'system'.\"),Generators_are_not_allowed_in_an_ambient_context:b(1221,1,\"Generators_are_not_allowed_in_an_ambient_context_1221\",\"Generators are not allowed in an ambient context.\"),An_overload_signature_cannot_be_declared_as_a_generator:b(1222,1,\"An_overload_signature_cannot_be_declared_as_a_generator_1222\",\"An overload signature cannot be declared as a generator.\"),_0_tag_already_specified:b(1223,1,\"_0_tag_already_specified_1223\",\"'{0}' tag already specified.\"),Signature_0_must_be_a_type_predicate:b(1224,1,\"Signature_0_must_be_a_type_predicate_1224\",\"Signature '{0}' must be a type predicate.\"),Cannot_find_parameter_0:b(1225,1,\"Cannot_find_parameter_0_1225\",\"Cannot find parameter '{0}'.\"),Type_predicate_0_is_not_assignable_to_1:b(1226,1,\"Type_predicate_0_is_not_assignable_to_1_1226\",\"Type predicate '{0}' is not assignable to '{1}'.\"),Parameter_0_is_not_in_the_same_position_as_parameter_1:b(1227,1,\"Parameter_0_is_not_in_the_same_position_as_parameter_1_1227\",\"Parameter '{0}' is not in the same position as parameter '{1}'.\"),A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods:b(1228,1,\"A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228\",\"A type predicate is only allowed in return type position for functions and methods.\"),A_type_predicate_cannot_reference_a_rest_parameter:b(1229,1,\"A_type_predicate_cannot_reference_a_rest_parameter_1229\",\"A type predicate cannot reference a rest parameter.\"),A_type_predicate_cannot_reference_element_0_in_a_binding_pattern:b(1230,1,\"A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230\",\"A type predicate cannot reference element '{0}' in a binding pattern.\"),An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration:b(1231,1,\"An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231\",\"An export assignment must be at the top level of a file or module declaration.\"),An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module:b(1232,1,\"An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232\",\"An import declaration can only be used at the top level of a namespace or module.\"),An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module:b(1233,1,\"An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233\",\"An export declaration can only be used at the top level of a namespace or module.\"),An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file:b(1234,1,\"An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234\",\"An ambient module declaration is only allowed at the top level in a file.\"),A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module:b(1235,1,\"A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235\",\"A namespace declaration is only allowed at the top level of a namespace or module.\"),The_return_type_of_a_property_decorator_function_must_be_either_void_or_any:b(1236,1,\"The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236\",\"The return type of a property decorator function must be either 'void' or 'any'.\"),The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any:b(1237,1,\"The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237\",\"The return type of a parameter decorator function must be either 'void' or 'any'.\"),Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression:b(1238,1,\"Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238\",\"Unable to resolve signature of class decorator when called as an expression.\"),Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression:b(1239,1,\"Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239\",\"Unable to resolve signature of parameter decorator when called as an expression.\"),Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression:b(1240,1,\"Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240\",\"Unable to resolve signature of property decorator when called as an expression.\"),Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression:b(1241,1,\"Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241\",\"Unable to resolve signature of method decorator when called as an expression.\"),abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration:b(1242,1,\"abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242\",\"'abstract' modifier can only appear on a class, method, or property declaration.\"),_0_modifier_cannot_be_used_with_1_modifier:b(1243,1,\"_0_modifier_cannot_be_used_with_1_modifier_1243\",\"'{0}' modifier cannot be used with '{1}' modifier.\"),Abstract_methods_can_only_appear_within_an_abstract_class:b(1244,1,\"Abstract_methods_can_only_appear_within_an_abstract_class_1244\",\"Abstract methods can only appear within an abstract class.\"),Method_0_cannot_have_an_implementation_because_it_is_marked_abstract:b(1245,1,\"Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245\",\"Method '{0}' cannot have an implementation because it is marked abstract.\"),An_interface_property_cannot_have_an_initializer:b(1246,1,\"An_interface_property_cannot_have_an_initializer_1246\",\"An interface property cannot have an initializer.\"),A_type_literal_property_cannot_have_an_initializer:b(1247,1,\"A_type_literal_property_cannot_have_an_initializer_1247\",\"A type literal property cannot have an initializer.\"),A_class_member_cannot_have_the_0_keyword:b(1248,1,\"A_class_member_cannot_have_the_0_keyword_1248\",\"A class member cannot have the '{0}' keyword.\"),A_decorator_can_only_decorate_a_method_implementation_not_an_overload:b(1249,1,\"A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249\",\"A decorator can only decorate a method implementation, not an overload.\"),Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5:b(1250,1,\"Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250\",\"Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'.\"),Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode:b(1251,1,\"Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251\",\"Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode.\"),Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode:b(1252,1,\"Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252\",\"Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode.\"),A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference:b(1254,1,\"A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254\",\"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\"),A_definite_assignment_assertion_is_not_permitted_in_this_context:b(1255,1,\"A_definite_assignment_assertion_is_not_permitted_in_this_context_1255\",\"A definite assignment assertion '!' is not permitted in this context.\"),A_required_element_cannot_follow_an_optional_element:b(1257,1,\"A_required_element_cannot_follow_an_optional_element_1257\",\"A required element cannot follow an optional element.\"),A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration:b(1258,1,\"A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258\",\"A default export must be at the top level of a file or module declaration.\"),Module_0_can_only_be_default_imported_using_the_1_flag:b(1259,1,\"Module_0_can_only_be_default_imported_using_the_1_flag_1259\",\"Module '{0}' can only be default-imported using the '{1}' flag\"),Keywords_cannot_contain_escape_characters:b(1260,1,\"Keywords_cannot_contain_escape_characters_1260\",\"Keywords cannot contain escape characters.\"),Already_included_file_name_0_differs_from_file_name_1_only_in_casing:b(1261,1,\"Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261\",\"Already included file name '{0}' differs from file name '{1}' only in casing.\"),Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module:b(1262,1,\"Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262\",\"Identifier expected. '{0}' is a reserved word at the top-level of a module.\"),Declarations_with_initializers_cannot_also_have_definite_assignment_assertions:b(1263,1,\"Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263\",\"Declarations with initializers cannot also have definite assignment assertions.\"),Declarations_with_definite_assignment_assertions_must_also_have_type_annotations:b(1264,1,\"Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264\",\"Declarations with definite assignment assertions must also have type annotations.\"),A_rest_element_cannot_follow_another_rest_element:b(1265,1,\"A_rest_element_cannot_follow_another_rest_element_1265\",\"A rest element cannot follow another rest element.\"),An_optional_element_cannot_follow_a_rest_element:b(1266,1,\"An_optional_element_cannot_follow_a_rest_element_1266\",\"An optional element cannot follow a rest element.\"),Property_0_cannot_have_an_initializer_because_it_is_marked_abstract:b(1267,1,\"Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267\",\"Property '{0}' cannot have an initializer because it is marked abstract.\"),An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type:b(1268,1,\"An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268\",\"An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type.\"),Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled:b(1269,1,\"Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269\",\"Cannot use 'export import' on a type or type-only namespace when '{0}' is enabled.\"),Decorator_function_return_type_0_is_not_assignable_to_type_1:b(1270,1,\"Decorator_function_return_type_0_is_not_assignable_to_type_1_1270\",\"Decorator function return type '{0}' is not assignable to type '{1}'.\"),Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any:b(1271,1,\"Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271\",\"Decorator function return type is '{0}' but is expected to be 'void' or 'any'.\"),A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled:b(1272,1,\"A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272\",\"A type referenced in a decorated signature must be imported with 'import type' or a namespace import when 'isolatedModules' and 'emitDecoratorMetadata' are enabled.\"),_0_modifier_cannot_appear_on_a_type_parameter:b(1273,1,\"_0_modifier_cannot_appear_on_a_type_parameter_1273\",\"'{0}' modifier cannot appear on a type parameter\"),_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias:b(1274,1,\"_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274\",\"'{0}' modifier can only appear on a type parameter of a class, interface or type alias\"),accessor_modifier_can_only_appear_on_a_property_declaration:b(1275,1,\"accessor_modifier_can_only_appear_on_a_property_declaration_1275\",\"'accessor' modifier can only appear on a property declaration.\"),An_accessor_property_cannot_be_declared_optional:b(1276,1,\"An_accessor_property_cannot_be_declared_optional_1276\",\"An 'accessor' property cannot be declared optional.\"),_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class:b(1277,1,\"_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277\",\"'{0}' modifier can only appear on a type parameter of a function, method or class\"),The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0:b(1278,1,\"The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278\",\"The runtime will invoke the decorator with {1} arguments, but the decorator expects {0}.\"),The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0:b(1279,1,\"The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279\",\"The runtime will invoke the decorator with {1} arguments, but the decorator expects at least {0}.\"),Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to_be_a_global_script_set_moduleDetection_to_force_or_add_an_empty_export_statement:b(1280,1,\"Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280\",\"Namespaces are not allowed in global script files when '{0}' is enabled. If this file is not intended to be a global script, set 'moduleDetection' to 'force' or add an empty 'export {}' statement.\"),Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead:b(1281,1,\"Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281\",\"Cannot access '{0}' from another file without qualification when '{1}' is enabled. Use '{2}' instead.\"),An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type:b(1282,1,\"An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282\",\"An 'export =' declaration must reference a value when 'verbatimModuleSyntax' is enabled, but '{0}' only refers to a type.\"),An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration:b(1283,1,\"An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283\",\"An 'export =' declaration must reference a real value when 'verbatimModuleSyntax' is enabled, but '{0}' resolves to a type-only declaration.\"),An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type:b(1284,1,\"An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284\",\"An 'export default' must reference a value when 'verbatimModuleSyntax' is enabled, but '{0}' only refers to a type.\"),An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration:b(1285,1,\"An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285\",\"An 'export default' must reference a real value when 'verbatimModuleSyntax' is enabled, but '{0}' resolves to a type-only declaration.\"),ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled:b(1286,1,\"ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286\",\"ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled.\"),A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled:b(1287,1,\"A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287\",\"A top-level 'export' modifier cannot be used on value declarations in a CommonJS module when 'verbatimModuleSyntax' is enabled.\"),An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabled:b(1288,1,\"An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288\",\"An import alias cannot resolve to a type or type-only declaration when 'verbatimModuleSyntax' is enabled.\"),with_statements_are_not_allowed_in_an_async_function_block:b(1300,1,\"with_statements_are_not_allowed_in_an_async_function_block_1300\",\"'with' statements are not allowed in an async function block.\"),await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules:b(1308,1,\"await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308\",\"'await' expressions are only allowed within async functions and at the top levels of modules.\"),The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level:b(1309,1,\"The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309\",\"The current file is a CommonJS module and cannot use 'await' at the top level.\"),Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern:b(1312,1,\"Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312\",\"Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern.\"),The_body_of_an_if_statement_cannot_be_the_empty_statement:b(1313,1,\"The_body_of_an_if_statement_cannot_be_the_empty_statement_1313\",\"The body of an 'if' statement cannot be the empty statement.\"),Global_module_exports_may_only_appear_in_module_files:b(1314,1,\"Global_module_exports_may_only_appear_in_module_files_1314\",\"Global module exports may only appear in module files.\"),Global_module_exports_may_only_appear_in_declaration_files:b(1315,1,\"Global_module_exports_may_only_appear_in_declaration_files_1315\",\"Global module exports may only appear in declaration files.\"),Global_module_exports_may_only_appear_at_top_level:b(1316,1,\"Global_module_exports_may_only_appear_at_top_level_1316\",\"Global module exports may only appear at top level.\"),A_parameter_property_cannot_be_declared_using_a_rest_parameter:b(1317,1,\"A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317\",\"A parameter property cannot be declared using a rest parameter.\"),An_abstract_accessor_cannot_have_an_implementation:b(1318,1,\"An_abstract_accessor_cannot_have_an_implementation_1318\",\"An abstract accessor cannot have an implementation.\"),A_default_export_can_only_be_used_in_an_ECMAScript_style_module:b(1319,1,\"A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319\",\"A default export can only be used in an ECMAScript-style module.\"),Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:b(1320,1,\"Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320\",\"Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member.\"),Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:b(1321,1,\"Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321\",\"Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member.\"),Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:b(1322,1,\"Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322\",\"Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member.\"),Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext:b(1323,1,\"Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323\",\"Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', or 'nodenext'.\"),Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext:b(1324,1,\"Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324\",\"Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', or 'nodenext'.\"),Argument_of_dynamic_import_cannot_be_spread_element:b(1325,1,\"Argument_of_dynamic_import_cannot_be_spread_element_1325\",\"Argument of dynamic import cannot be spread element.\"),This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments:b(1326,1,\"This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326\",\"This use of 'import' is invalid. 'import()' calls can be written, but they must have parentheses and cannot have type arguments.\"),String_literal_with_double_quotes_expected:b(1327,1,\"String_literal_with_double_quotes_expected_1327\",\"String literal with double quotes expected.\"),Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal:b(1328,1,\"Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328\",\"Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal.\"),_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0:b(1329,1,\"_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329\",\"'{0}' accepts too few arguments to be used as a decorator here. Did you mean to call it first and write '@{0}()'?\"),A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly:b(1330,1,\"A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330\",\"A property of an interface or type literal whose type is a 'unique symbol' type must be 'readonly'.\"),A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly:b(1331,1,\"A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331\",\"A property of a class whose type is a 'unique symbol' type must be both 'static' and 'readonly'.\"),A_variable_whose_type_is_a_unique_symbol_type_must_be_const:b(1332,1,\"A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332\",\"A variable whose type is a 'unique symbol' type must be 'const'.\"),unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name:b(1333,1,\"unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333\",\"'unique symbol' types may not be used on a variable declaration with a binding name.\"),unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement:b(1334,1,\"unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334\",\"'unique symbol' types are only allowed on variables in a variable statement.\"),unique_symbol_types_are_not_allowed_here:b(1335,1,\"unique_symbol_types_are_not_allowed_here_1335\",\"'unique symbol' types are not allowed here.\"),An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead:b(1337,1,\"An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337\",\"An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.\"),infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type:b(1338,1,\"infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338\",\"'infer' declarations are only permitted in the 'extends' clause of a conditional type.\"),Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here:b(1339,1,\"Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339\",\"Module '{0}' does not refer to a value, but is used as a value here.\"),Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0:b(1340,1,\"Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340\",\"Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?\"),Class_constructor_may_not_be_an_accessor:b(1341,1,\"Class_constructor_may_not_be_an_accessor_1341\",\"Class constructor may not be an accessor.\"),The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_or_nodenext:b(1343,1,\"The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343\",\"The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', or 'nodenext'.\"),A_label_is_not_allowed_here:b(1344,1,\"A_label_is_not_allowed_here_1344\",\"'A label is not allowed here.\"),An_expression_of_type_void_cannot_be_tested_for_truthiness:b(1345,1,\"An_expression_of_type_void_cannot_be_tested_for_truthiness_1345\",\"An expression of type 'void' cannot be tested for truthiness.\"),This_parameter_is_not_allowed_with_use_strict_directive:b(1346,1,\"This_parameter_is_not_allowed_with_use_strict_directive_1346\",\"This parameter is not allowed with 'use strict' directive.\"),use_strict_directive_cannot_be_used_with_non_simple_parameter_list:b(1347,1,\"use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347\",\"'use strict' directive cannot be used with non-simple parameter list.\"),Non_simple_parameter_declared_here:b(1348,1,\"Non_simple_parameter_declared_here_1348\",\"Non-simple parameter declared here.\"),use_strict_directive_used_here:b(1349,1,\"use_strict_directive_used_here_1349\",\"'use strict' directive used here.\"),Print_the_final_configuration_instead_of_building:b(1350,3,\"Print_the_final_configuration_instead_of_building_1350\",\"Print the final configuration instead of building.\"),An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal:b(1351,1,\"An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351\",\"An identifier or keyword cannot immediately follow a numeric literal.\"),A_bigint_literal_cannot_use_exponential_notation:b(1352,1,\"A_bigint_literal_cannot_use_exponential_notation_1352\",\"A bigint literal cannot use exponential notation.\"),A_bigint_literal_must_be_an_integer:b(1353,1,\"A_bigint_literal_must_be_an_integer_1353\",\"A bigint literal must be an integer.\"),readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types:b(1354,1,\"readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354\",\"'readonly' type modifier is only permitted on array and tuple literal types.\"),A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals:b(1355,1,\"A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355\",\"A 'const' assertions can only be applied to references to enum members, or string, number, boolean, array, or object literals.\"),Did_you_mean_to_mark_this_function_as_async:b(1356,1,\"Did_you_mean_to_mark_this_function_as_async_1356\",\"Did you mean to mark this function as 'async'?\"),An_enum_member_name_must_be_followed_by_a_or:b(1357,1,\"An_enum_member_name_must_be_followed_by_a_or_1357\",\"An enum member name must be followed by a ',', '=', or '}'.\"),Tagged_template_expressions_are_not_permitted_in_an_optional_chain:b(1358,1,\"Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358\",\"Tagged template expressions are not permitted in an optional chain.\"),Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here:b(1359,1,\"Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359\",\"Identifier expected. '{0}' is a reserved word that cannot be used here.\"),Type_0_does_not_satisfy_the_expected_type_1:b(1360,1,\"Type_0_does_not_satisfy_the_expected_type_1_1360\",\"Type '{0}' does not satisfy the expected type '{1}'.\"),_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type:b(1361,1,\"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361\",\"'{0}' cannot be used as a value because it was imported using 'import type'.\"),_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type:b(1362,1,\"_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362\",\"'{0}' cannot be used as a value because it was exported using 'export type'.\"),A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both:b(1363,1,\"A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363\",\"A type-only import can specify a default import or named bindings, but not both.\"),Convert_to_type_only_export:b(1364,3,\"Convert_to_type_only_export_1364\",\"Convert to type-only export\"),Convert_all_re_exported_types_to_type_only_exports:b(1365,3,\"Convert_all_re_exported_types_to_type_only_exports_1365\",\"Convert all re-exported types to type-only exports\"),Split_into_two_separate_import_declarations:b(1366,3,\"Split_into_two_separate_import_declarations_1366\",\"Split into two separate import declarations\"),Split_all_invalid_type_only_imports:b(1367,3,\"Split_all_invalid_type_only_imports_1367\",\"Split all invalid type-only imports\"),Class_constructor_may_not_be_a_generator:b(1368,1,\"Class_constructor_may_not_be_a_generator_1368\",\"Class constructor may not be a generator.\"),Did_you_mean_0:b(1369,3,\"Did_you_mean_0_1369\",\"Did you mean '{0}'?\"),This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error:b(1371,1,\"This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371\",\"This import is never used as a value and must use 'import type' because 'importsNotUsedAsValues' is set to 'error'.\"),Convert_to_type_only_import:b(1373,3,\"Convert_to_type_only_import_1373\",\"Convert to type-only import\"),Convert_all_imports_not_used_as_a_value_to_type_only_imports:b(1374,3,\"Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374\",\"Convert all imports not used as a value to type-only imports\"),await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module:b(1375,1,\"await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375\",\"'await' expressions are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module.\"),_0_was_imported_here:b(1376,3,\"_0_was_imported_here_1376\",\"'{0}' was imported here.\"),_0_was_exported_here:b(1377,3,\"_0_was_exported_here_1377\",\"'{0}' was exported here.\"),Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher:b(1378,1,\"Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378\",\"Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', or 'nodenext', and the 'target' option is set to 'es2017' or higher.\"),An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type:b(1379,1,\"An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379\",\"An import alias cannot reference a declaration that was exported using 'export type'.\"),An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type:b(1380,1,\"An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380\",\"An import alias cannot reference a declaration that was imported using 'import type'.\"),Unexpected_token_Did_you_mean_or_rbrace:b(1381,1,\"Unexpected_token_Did_you_mean_or_rbrace_1381\",\"Unexpected token. Did you mean `{'}'}` or `&rbrace;`?\"),Unexpected_token_Did_you_mean_or_gt:b(1382,1,\"Unexpected_token_Did_you_mean_or_gt_1382\",\"Unexpected token. Did you mean `{'>'}` or `&gt;`?\"),Function_type_notation_must_be_parenthesized_when_used_in_a_union_type:b(1385,1,\"Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385\",\"Function type notation must be parenthesized when used in a union type.\"),Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type:b(1386,1,\"Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386\",\"Constructor type notation must be parenthesized when used in a union type.\"),Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type:b(1387,1,\"Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387\",\"Function type notation must be parenthesized when used in an intersection type.\"),Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type:b(1388,1,\"Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388\",\"Constructor type notation must be parenthesized when used in an intersection type.\"),_0_is_not_allowed_as_a_variable_declaration_name:b(1389,1,\"_0_is_not_allowed_as_a_variable_declaration_name_1389\",\"'{0}' is not allowed as a variable declaration name.\"),_0_is_not_allowed_as_a_parameter_name:b(1390,1,\"_0_is_not_allowed_as_a_parameter_name_1390\",\"'{0}' is not allowed as a parameter name.\"),An_import_alias_cannot_use_import_type:b(1392,1,\"An_import_alias_cannot_use_import_type_1392\",\"An import alias cannot use 'import type'\"),Imported_via_0_from_file_1:b(1393,3,\"Imported_via_0_from_file_1_1393\",\"Imported via {0} from file '{1}'\"),Imported_via_0_from_file_1_with_packageId_2:b(1394,3,\"Imported_via_0_from_file_1_with_packageId_2_1394\",\"Imported via {0} from file '{1}' with packageId '{2}'\"),Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions:b(1395,3,\"Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395\",\"Imported via {0} from file '{1}' to import 'importHelpers' as specified in compilerOptions\"),Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions:b(1396,3,\"Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396\",\"Imported via {0} from file '{1}' with packageId '{2}' to import 'importHelpers' as specified in compilerOptions\"),Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions:b(1397,3,\"Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397\",\"Imported via {0} from file '{1}' to import 'jsx' and 'jsxs' factory functions\"),Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions:b(1398,3,\"Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398\",\"Imported via {0} from file '{1}' with packageId '{2}' to import 'jsx' and 'jsxs' factory functions\"),File_is_included_via_import_here:b(1399,3,\"File_is_included_via_import_here_1399\",\"File is included via import here.\"),Referenced_via_0_from_file_1:b(1400,3,\"Referenced_via_0_from_file_1_1400\",\"Referenced via '{0}' from file '{1}'\"),File_is_included_via_reference_here:b(1401,3,\"File_is_included_via_reference_here_1401\",\"File is included via reference here.\"),Type_library_referenced_via_0_from_file_1:b(1402,3,\"Type_library_referenced_via_0_from_file_1_1402\",\"Type library referenced via '{0}' from file '{1}'\"),Type_library_referenced_via_0_from_file_1_with_packageId_2:b(1403,3,\"Type_library_referenced_via_0_from_file_1_with_packageId_2_1403\",\"Type library referenced via '{0}' from file '{1}' with packageId '{2}'\"),File_is_included_via_type_library_reference_here:b(1404,3,\"File_is_included_via_type_library_reference_here_1404\",\"File is included via type library reference here.\"),Library_referenced_via_0_from_file_1:b(1405,3,\"Library_referenced_via_0_from_file_1_1405\",\"Library referenced via '{0}' from file '{1}'\"),File_is_included_via_library_reference_here:b(1406,3,\"File_is_included_via_library_reference_here_1406\",\"File is included via library reference here.\"),Matched_by_include_pattern_0_in_1:b(1407,3,\"Matched_by_include_pattern_0_in_1_1407\",\"Matched by include pattern '{0}' in '{1}'\"),File_is_matched_by_include_pattern_specified_here:b(1408,3,\"File_is_matched_by_include_pattern_specified_here_1408\",\"File is matched by include pattern specified here.\"),Part_of_files_list_in_tsconfig_json:b(1409,3,\"Part_of_files_list_in_tsconfig_json_1409\",\"Part of 'files' list in tsconfig.json\"),File_is_matched_by_files_list_specified_here:b(1410,3,\"File_is_matched_by_files_list_specified_here_1410\",\"File is matched by 'files' list specified here.\"),Output_from_referenced_project_0_included_because_1_specified:b(1411,3,\"Output_from_referenced_project_0_included_because_1_specified_1411\",\"Output from referenced project '{0}' included because '{1}' specified\"),Output_from_referenced_project_0_included_because_module_is_specified_as_none:b(1412,3,\"Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412\",\"Output from referenced project '{0}' included because '--module' is specified as 'none'\"),File_is_output_from_referenced_project_specified_here:b(1413,3,\"File_is_output_from_referenced_project_specified_here_1413\",\"File is output from referenced project specified here.\"),Source_from_referenced_project_0_included_because_1_specified:b(1414,3,\"Source_from_referenced_project_0_included_because_1_specified_1414\",\"Source from referenced project '{0}' included because '{1}' specified\"),Source_from_referenced_project_0_included_because_module_is_specified_as_none:b(1415,3,\"Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415\",\"Source from referenced project '{0}' included because '--module' is specified as 'none'\"),File_is_source_from_referenced_project_specified_here:b(1416,3,\"File_is_source_from_referenced_project_specified_here_1416\",\"File is source from referenced project specified here.\"),Entry_point_of_type_library_0_specified_in_compilerOptions:b(1417,3,\"Entry_point_of_type_library_0_specified_in_compilerOptions_1417\",\"Entry point of type library '{0}' specified in compilerOptions\"),Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1:b(1418,3,\"Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418\",\"Entry point of type library '{0}' specified in compilerOptions with packageId '{1}'\"),File_is_entry_point_of_type_library_specified_here:b(1419,3,\"File_is_entry_point_of_type_library_specified_here_1419\",\"File is entry point of type library specified here.\"),Entry_point_for_implicit_type_library_0:b(1420,3,\"Entry_point_for_implicit_type_library_0_1420\",\"Entry point for implicit type library '{0}'\"),Entry_point_for_implicit_type_library_0_with_packageId_1:b(1421,3,\"Entry_point_for_implicit_type_library_0_with_packageId_1_1421\",\"Entry point for implicit type library '{0}' with packageId '{1}'\"),Library_0_specified_in_compilerOptions:b(1422,3,\"Library_0_specified_in_compilerOptions_1422\",\"Library '{0}' specified in compilerOptions\"),File_is_library_specified_here:b(1423,3,\"File_is_library_specified_here_1423\",\"File is library specified here.\"),Default_library:b(1424,3,\"Default_library_1424\",\"Default library\"),Default_library_for_target_0:b(1425,3,\"Default_library_for_target_0_1425\",\"Default library for target '{0}'\"),File_is_default_library_for_target_specified_here:b(1426,3,\"File_is_default_library_for_target_specified_here_1426\",\"File is default library for target specified here.\"),Root_file_specified_for_compilation:b(1427,3,\"Root_file_specified_for_compilation_1427\",\"Root file specified for compilation\"),File_is_output_of_project_reference_source_0:b(1428,3,\"File_is_output_of_project_reference_source_0_1428\",\"File is output of project reference source '{0}'\"),File_redirects_to_file_0:b(1429,3,\"File_redirects_to_file_0_1429\",\"File redirects to file '{0}'\"),The_file_is_in_the_program_because_Colon:b(1430,3,\"The_file_is_in_the_program_because_Colon_1430\",\"The file is in the program because:\"),for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module:b(1431,1,\"for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431\",\"'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module.\"),Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher:b(1432,1,\"Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432\",\"Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', or 'nodenext', and the 'target' option is set to 'es2017' or higher.\"),Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters:b(1433,1,\"Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433\",\"Neither decorators nor modifiers may be applied to 'this' parameters.\"),Unexpected_keyword_or_identifier:b(1434,1,\"Unexpected_keyword_or_identifier_1434\",\"Unexpected keyword or identifier.\"),Unknown_keyword_or_identifier_Did_you_mean_0:b(1435,1,\"Unknown_keyword_or_identifier_Did_you_mean_0_1435\",\"Unknown keyword or identifier. Did you mean '{0}'?\"),Decorators_must_precede_the_name_and_all_keywords_of_property_declarations:b(1436,1,\"Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436\",\"Decorators must precede the name and all keywords of property declarations.\"),Namespace_must_be_given_a_name:b(1437,1,\"Namespace_must_be_given_a_name_1437\",\"Namespace must be given a name.\"),Interface_must_be_given_a_name:b(1438,1,\"Interface_must_be_given_a_name_1438\",\"Interface must be given a name.\"),Type_alias_must_be_given_a_name:b(1439,1,\"Type_alias_must_be_given_a_name_1439\",\"Type alias must be given a name.\"),Variable_declaration_not_allowed_at_this_location:b(1440,1,\"Variable_declaration_not_allowed_at_this_location_1440\",\"Variable declaration not allowed at this location.\"),Cannot_start_a_function_call_in_a_type_annotation:b(1441,1,\"Cannot_start_a_function_call_in_a_type_annotation_1441\",\"Cannot start a function call in a type annotation.\"),Expected_for_property_initializer:b(1442,1,\"Expected_for_property_initializer_1442\",\"Expected '=' for property initializer.\"),Module_declaration_names_may_only_use_or_quoted_strings:b(1443,1,\"Module_declaration_names_may_only_use_or_quoted_strings_1443\",`Module declaration names may only use ' or \" quoted strings.`),_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled:b(1444,1,\"_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444\",\"'{0}' is a type and must be imported using a type-only import when 'preserveValueImports' and 'isolatedModules' are both enabled.\"),_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled:b(1446,1,\"_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446\",\"'{0}' resolves to a type-only declaration and must be imported using a type-only import when 'preserveValueImports' and 'isolatedModules' are both enabled.\"),_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_enabled:b(1448,1,\"_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448\",\"'{0}' resolves to a type-only declaration and must be re-exported using a type-only re-export when '{1}' is enabled.\"),Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed:b(1449,3,\"Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449\",\"Preserve unused imported values in the JavaScript output that would otherwise be removed.\"),Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments:b(1450,3,\"Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450\",\"Dynamic imports can only accept a module specifier and an optional assertion as arguments\"),Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression:b(1451,1,\"Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451\",\"Private identifiers are only allowed in class bodies and may only be used as part of a class member declaration, property access, or on the left-hand-side of an 'in' expression\"),resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext:b(1452,1,\"resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452\",\"'resolution-mode' assertions are only supported when `moduleResolution` is `node16` or `nodenext`.\"),resolution_mode_should_be_either_require_or_import:b(1453,1,\"resolution_mode_should_be_either_require_or_import_1453\",\"`resolution-mode` should be either `require` or `import`.\"),resolution_mode_can_only_be_set_for_type_only_imports:b(1454,1,\"resolution_mode_can_only_be_set_for_type_only_imports_1454\",\"`resolution-mode` can only be set for type-only imports.\"),resolution_mode_is_the_only_valid_key_for_type_import_assertions:b(1455,1,\"resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455\",\"`resolution-mode` is the only valid key for type import assertions.\"),Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require:b(1456,1,\"Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456\",\"Type import assertions should have exactly one key - `resolution-mode` - with value `import` or `require`.\"),Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk:b(1457,3,\"Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457\",\"Matched by default include pattern '**/*'\"),File_is_ECMAScript_module_because_0_has_field_type_with_value_module:b(1458,3,\"File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458\",`File is ECMAScript module because '{0}' has field \"type\" with value \"module\"`),File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module:b(1459,3,\"File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459\",`File is CommonJS module because '{0}' has field \"type\" whose value is not \"module\"`),File_is_CommonJS_module_because_0_does_not_have_field_type:b(1460,3,\"File_is_CommonJS_module_because_0_does_not_have_field_type_1460\",`File is CommonJS module because '{0}' does not have field \"type\"`),File_is_CommonJS_module_because_package_json_was_not_found:b(1461,3,\"File_is_CommonJS_module_because_package_json_was_not_found_1461\",\"File is CommonJS module because 'package.json' was not found\"),The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output:b(1470,1,\"The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470\",\"The 'import.meta' meta-property is not allowed in files which will build into CommonJS output.\"),Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_cannot_be_imported_with_require_Use_an_ECMAScript_import_instead:b(1471,1,\"Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471\",\"Module '{0}' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported with 'require'. Use an ECMAScript import instead.\"),catch_or_finally_expected:b(1472,1,\"catch_or_finally_expected_1472\",\"'catch' or 'finally' expected.\"),An_import_declaration_can_only_be_used_at_the_top_level_of_a_module:b(1473,1,\"An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473\",\"An import declaration can only be used at the top level of a module.\"),An_export_declaration_can_only_be_used_at_the_top_level_of_a_module:b(1474,1,\"An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474\",\"An export declaration can only be used at the top level of a module.\"),Control_what_method_is_used_to_detect_module_format_JS_files:b(1475,3,\"Control_what_method_is_used_to_detect_module_format_JS_files_1475\",\"Control what method is used to detect module-format JS files.\"),auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules:b(1476,3,\"auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476\",'\"auto\": Treat files with imports, exports, import.meta, jsx (with jsx: react-jsx), or esm format (with module: node16+) as modules.'),An_instantiation_expression_cannot_be_followed_by_a_property_access:b(1477,1,\"An_instantiation_expression_cannot_be_followed_by_a_property_access_1477\",\"An instantiation expression cannot be followed by a property access.\"),Identifier_or_string_literal_expected:b(1478,1,\"Identifier_or_string_literal_expected_1478\",\"Identifier or string literal expected.\"),The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_referenced_file_is_an_ECMAScript_module_and_cannot_be_imported_with_require_Consider_writing_a_dynamic_import_0_call_instead:b(1479,1,\"The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479\",`The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import(\"{0}\")' call instead.`),To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module:b(1480,3,\"To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480\",'To convert this file to an ECMAScript module, change its file extension to \\'{0}\\' or create a local package.json file with `{ \"type\": \"module\" }`.'),To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1:b(1481,3,\"To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481\",`To convert this file to an ECMAScript module, change its file extension to '{0}', or add the field \\`\"type\": \"module\"\\` to '{1}'.`),To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0:b(1482,3,\"To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482\",'To convert this file to an ECMAScript module, add the field `\"type\": \"module\"` to \\'{0}\\'.'),To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module:b(1483,3,\"To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483\",'To convert this file to an ECMAScript module, create a local package.json file with `{ \"type\": \"module\" }`.'),_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled:b(1484,1,\"_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484\",\"'{0}' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.\"),_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled:b(1485,1,\"_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485\",\"'{0}' resolves to a type-only declaration and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.\"),Decorator_used_before_export_here:b(1486,1,\"Decorator_used_before_export_here_1486\",\"Decorator used before 'export' here.\"),The_types_of_0_are_incompatible_between_these_types:b(2200,1,\"The_types_of_0_are_incompatible_between_these_types_2200\",\"The types of '{0}' are incompatible between these types.\"),The_types_returned_by_0_are_incompatible_between_these_types:b(2201,1,\"The_types_returned_by_0_are_incompatible_between_these_types_2201\",\"The types returned by '{0}' are incompatible between these types.\"),Call_signature_return_types_0_and_1_are_incompatible:b(2202,1,\"Call_signature_return_types_0_and_1_are_incompatible_2202\",\"Call signature return types '{0}' and '{1}' are incompatible.\",void 0,!0),Construct_signature_return_types_0_and_1_are_incompatible:b(2203,1,\"Construct_signature_return_types_0_and_1_are_incompatible_2203\",\"Construct signature return types '{0}' and '{1}' are incompatible.\",void 0,!0),Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1:b(2204,1,\"Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204\",\"Call signatures with no arguments have incompatible return types '{0}' and '{1}'.\",void 0,!0),Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1:b(2205,1,\"Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205\",\"Construct signatures with no arguments have incompatible return types '{0}' and '{1}'.\",void 0,!0),The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement:b(2206,1,\"The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206\",\"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\"),The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement:b(2207,1,\"The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207\",\"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\"),This_type_parameter_might_need_an_extends_0_constraint:b(2208,1,\"This_type_parameter_might_need_an_extends_0_constraint_2208\",\"This type parameter might need an `extends {0}` constraint.\"),The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate:b(2209,1,\"The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209\",\"The project root is ambiguous, but is required to resolve export map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate.\"),The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate:b(2210,1,\"The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210\",\"The project root is ambiguous, but is required to resolve import map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate.\"),Add_extends_constraint:b(2211,3,\"Add_extends_constraint_2211\",\"Add `extends` constraint.\"),Add_extends_constraint_to_all_type_parameters:b(2212,3,\"Add_extends_constraint_to_all_type_parameters_2212\",\"Add `extends` constraint to all type parameters\"),Duplicate_identifier_0:b(2300,1,\"Duplicate_identifier_0_2300\",\"Duplicate identifier '{0}'.\"),Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor:b(2301,1,\"Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301\",\"Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.\"),Static_members_cannot_reference_class_type_parameters:b(2302,1,\"Static_members_cannot_reference_class_type_parameters_2302\",\"Static members cannot reference class type parameters.\"),Circular_definition_of_import_alias_0:b(2303,1,\"Circular_definition_of_import_alias_0_2303\",\"Circular definition of import alias '{0}'.\"),Cannot_find_name_0:b(2304,1,\"Cannot_find_name_0_2304\",\"Cannot find name '{0}'.\"),Module_0_has_no_exported_member_1:b(2305,1,\"Module_0_has_no_exported_member_1_2305\",\"Module '{0}' has no exported member '{1}'.\"),File_0_is_not_a_module:b(2306,1,\"File_0_is_not_a_module_2306\",\"File '{0}' is not a module.\"),Cannot_find_module_0_or_its_corresponding_type_declarations:b(2307,1,\"Cannot_find_module_0_or_its_corresponding_type_declarations_2307\",\"Cannot find module '{0}' or its corresponding type declarations.\"),Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity:b(2308,1,\"Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308\",\"Module {0} has already exported a member named '{1}'. Consider explicitly re-exporting to resolve the ambiguity.\"),An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements:b(2309,1,\"An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309\",\"An export assignment cannot be used in a module with other exported elements.\"),Type_0_recursively_references_itself_as_a_base_type:b(2310,1,\"Type_0_recursively_references_itself_as_a_base_type_2310\",\"Type '{0}' recursively references itself as a base type.\"),Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function:b(2311,1,\"Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311\",\"Cannot find name '{0}'. Did you mean to write this in an async function?\"),An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members:b(2312,1,\"An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312\",\"An interface can only extend an object type or intersection of object types with statically known members.\"),Type_parameter_0_has_a_circular_constraint:b(2313,1,\"Type_parameter_0_has_a_circular_constraint_2313\",\"Type parameter '{0}' has a circular constraint.\"),Generic_type_0_requires_1_type_argument_s:b(2314,1,\"Generic_type_0_requires_1_type_argument_s_2314\",\"Generic type '{0}' requires {1} type argument(s).\"),Type_0_is_not_generic:b(2315,1,\"Type_0_is_not_generic_2315\",\"Type '{0}' is not generic.\"),Global_type_0_must_be_a_class_or_interface_type:b(2316,1,\"Global_type_0_must_be_a_class_or_interface_type_2316\",\"Global type '{0}' must be a class or interface type.\"),Global_type_0_must_have_1_type_parameter_s:b(2317,1,\"Global_type_0_must_have_1_type_parameter_s_2317\",\"Global type '{0}' must have {1} type parameter(s).\"),Cannot_find_global_type_0:b(2318,1,\"Cannot_find_global_type_0_2318\",\"Cannot find global type '{0}'.\"),Named_property_0_of_types_1_and_2_are_not_identical:b(2319,1,\"Named_property_0_of_types_1_and_2_are_not_identical_2319\",\"Named property '{0}' of types '{1}' and '{2}' are not identical.\"),Interface_0_cannot_simultaneously_extend_types_1_and_2:b(2320,1,\"Interface_0_cannot_simultaneously_extend_types_1_and_2_2320\",\"Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'.\"),Excessive_stack_depth_comparing_types_0_and_1:b(2321,1,\"Excessive_stack_depth_comparing_types_0_and_1_2321\",\"Excessive stack depth comparing types '{0}' and '{1}'.\"),Type_0_is_not_assignable_to_type_1:b(2322,1,\"Type_0_is_not_assignable_to_type_1_2322\",\"Type '{0}' is not assignable to type '{1}'.\"),Cannot_redeclare_exported_variable_0:b(2323,1,\"Cannot_redeclare_exported_variable_0_2323\",\"Cannot redeclare exported variable '{0}'.\"),Property_0_is_missing_in_type_1:b(2324,1,\"Property_0_is_missing_in_type_1_2324\",\"Property '{0}' is missing in type '{1}'.\"),Property_0_is_private_in_type_1_but_not_in_type_2:b(2325,1,\"Property_0_is_private_in_type_1_but_not_in_type_2_2325\",\"Property '{0}' is private in type '{1}' but not in type '{2}'.\"),Types_of_property_0_are_incompatible:b(2326,1,\"Types_of_property_0_are_incompatible_2326\",\"Types of property '{0}' are incompatible.\"),Property_0_is_optional_in_type_1_but_required_in_type_2:b(2327,1,\"Property_0_is_optional_in_type_1_but_required_in_type_2_2327\",\"Property '{0}' is optional in type '{1}' but required in type '{2}'.\"),Types_of_parameters_0_and_1_are_incompatible:b(2328,1,\"Types_of_parameters_0_and_1_are_incompatible_2328\",\"Types of parameters '{0}' and '{1}' are incompatible.\"),Index_signature_for_type_0_is_missing_in_type_1:b(2329,1,\"Index_signature_for_type_0_is_missing_in_type_1_2329\",\"Index signature for type '{0}' is missing in type '{1}'.\"),_0_and_1_index_signatures_are_incompatible:b(2330,1,\"_0_and_1_index_signatures_are_incompatible_2330\",\"'{0}' and '{1}' index signatures are incompatible.\"),this_cannot_be_referenced_in_a_module_or_namespace_body:b(2331,1,\"this_cannot_be_referenced_in_a_module_or_namespace_body_2331\",\"'this' cannot be referenced in a module or namespace body.\"),this_cannot_be_referenced_in_current_location:b(2332,1,\"this_cannot_be_referenced_in_current_location_2332\",\"'this' cannot be referenced in current location.\"),this_cannot_be_referenced_in_constructor_arguments:b(2333,1,\"this_cannot_be_referenced_in_constructor_arguments_2333\",\"'this' cannot be referenced in constructor arguments.\"),this_cannot_be_referenced_in_a_static_property_initializer:b(2334,1,\"this_cannot_be_referenced_in_a_static_property_initializer_2334\",\"'this' cannot be referenced in a static property initializer.\"),super_can_only_be_referenced_in_a_derived_class:b(2335,1,\"super_can_only_be_referenced_in_a_derived_class_2335\",\"'super' can only be referenced in a derived class.\"),super_cannot_be_referenced_in_constructor_arguments:b(2336,1,\"super_cannot_be_referenced_in_constructor_arguments_2336\",\"'super' cannot be referenced in constructor arguments.\"),Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors:b(2337,1,\"Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337\",\"Super calls are not permitted outside constructors or in nested functions inside constructors.\"),super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class:b(2338,1,\"super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338\",\"'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.\"),Property_0_does_not_exist_on_type_1:b(2339,1,\"Property_0_does_not_exist_on_type_1_2339\",\"Property '{0}' does not exist on type '{1}'.\"),Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword:b(2340,1,\"Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340\",\"Only public and protected methods of the base class are accessible via the 'super' keyword.\"),Property_0_is_private_and_only_accessible_within_class_1:b(2341,1,\"Property_0_is_private_and_only_accessible_within_class_1_2341\",\"Property '{0}' is private and only accessible within class '{1}'.\"),This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0:b(2343,1,\"This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343\",\"This syntax requires an imported helper named '{1}' which does not exist in '{0}'. Consider upgrading your version of '{0}'.\"),Type_0_does_not_satisfy_the_constraint_1:b(2344,1,\"Type_0_does_not_satisfy_the_constraint_1_2344\",\"Type '{0}' does not satisfy the constraint '{1}'.\"),Argument_of_type_0_is_not_assignable_to_parameter_of_type_1:b(2345,1,\"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345\",\"Argument of type '{0}' is not assignable to parameter of type '{1}'.\"),Call_target_does_not_contain_any_signatures:b(2346,1,\"Call_target_does_not_contain_any_signatures_2346\",\"Call target does not contain any signatures.\"),Untyped_function_calls_may_not_accept_type_arguments:b(2347,1,\"Untyped_function_calls_may_not_accept_type_arguments_2347\",\"Untyped function calls may not accept type arguments.\"),Value_of_type_0_is_not_callable_Did_you_mean_to_include_new:b(2348,1,\"Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348\",\"Value of type '{0}' is not callable. Did you mean to include 'new'?\"),This_expression_is_not_callable:b(2349,1,\"This_expression_is_not_callable_2349\",\"This expression is not callable.\"),Only_a_void_function_can_be_called_with_the_new_keyword:b(2350,1,\"Only_a_void_function_can_be_called_with_the_new_keyword_2350\",\"Only a void function can be called with the 'new' keyword.\"),This_expression_is_not_constructable:b(2351,1,\"This_expression_is_not_constructable_2351\",\"This expression is not constructable.\"),Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first:b(2352,1,\"Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352\",\"Conversion of type '{0}' to type '{1}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.\"),Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1:b(2353,1,\"Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353\",\"Object literal may only specify known properties, and '{0}' does not exist in type '{1}'.\"),This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found:b(2354,1,\"This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354\",\"This syntax requires an imported helper but module '{0}' cannot be found.\"),A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value:b(2355,1,\"A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355\",\"A function whose declared type is neither 'void' nor 'any' must return a value.\"),An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type:b(2356,1,\"An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356\",\"An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type.\"),The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access:b(2357,1,\"The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357\",\"The operand of an increment or decrement operator must be a variable or a property access.\"),The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter:b(2358,1,\"The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358\",\"The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.\"),The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type:b(2359,1,\"The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359\",\"The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.\"),The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type:b(2362,1,\"The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362\",\"The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.\"),The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type:b(2363,1,\"The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363\",\"The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.\"),The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access:b(2364,1,\"The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364\",\"The left-hand side of an assignment expression must be a variable or a property access.\"),Operator_0_cannot_be_applied_to_types_1_and_2:b(2365,1,\"Operator_0_cannot_be_applied_to_types_1_and_2_2365\",\"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\"),Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined:b(2366,1,\"Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366\",\"Function lacks ending return statement and return type does not include 'undefined'.\"),This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap:b(2367,1,\"This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367\",\"This comparison appears to be unintentional because the types '{0}' and '{1}' have no overlap.\"),Type_parameter_name_cannot_be_0:b(2368,1,\"Type_parameter_name_cannot_be_0_2368\",\"Type parameter name cannot be '{0}'.\"),A_parameter_property_is_only_allowed_in_a_constructor_implementation:b(2369,1,\"A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369\",\"A parameter property is only allowed in a constructor implementation.\"),A_rest_parameter_must_be_of_an_array_type:b(2370,1,\"A_rest_parameter_must_be_of_an_array_type_2370\",\"A rest parameter must be of an array type.\"),A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation:b(2371,1,\"A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371\",\"A parameter initializer is only allowed in a function or constructor implementation.\"),Parameter_0_cannot_reference_itself:b(2372,1,\"Parameter_0_cannot_reference_itself_2372\",\"Parameter '{0}' cannot reference itself.\"),Parameter_0_cannot_reference_identifier_1_declared_after_it:b(2373,1,\"Parameter_0_cannot_reference_identifier_1_declared_after_it_2373\",\"Parameter '{0}' cannot reference identifier '{1}' declared after it.\"),Duplicate_index_signature_for_type_0:b(2374,1,\"Duplicate_index_signature_for_type_0_2374\",\"Duplicate index signature for type '{0}'.\"),Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties:b(2375,1,\"Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375\",\"Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.\"),A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers:b(2376,1,\"A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376\",\"A 'super' call must be the first statement in the constructor to refer to 'super' or 'this' when a derived class contains initialized properties, parameter properties, or private identifiers.\"),Constructors_for_derived_classes_must_contain_a_super_call:b(2377,1,\"Constructors_for_derived_classes_must_contain_a_super_call_2377\",\"Constructors for derived classes must contain a 'super' call.\"),A_get_accessor_must_return_a_value:b(2378,1,\"A_get_accessor_must_return_a_value_2378\",\"A 'get' accessor must return a value.\"),Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties:b(2379,1,\"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379\",\"Argument of type '{0}' is not assignable to parameter of type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties.\"),The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type:b(2380,1,\"The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380\",\"The return type of a 'get' accessor must be assignable to its 'set' accessor type\"),Overload_signatures_must_all_be_exported_or_non_exported:b(2383,1,\"Overload_signatures_must_all_be_exported_or_non_exported_2383\",\"Overload signatures must all be exported or non-exported.\"),Overload_signatures_must_all_be_ambient_or_non_ambient:b(2384,1,\"Overload_signatures_must_all_be_ambient_or_non_ambient_2384\",\"Overload signatures must all be ambient or non-ambient.\"),Overload_signatures_must_all_be_public_private_or_protected:b(2385,1,\"Overload_signatures_must_all_be_public_private_or_protected_2385\",\"Overload signatures must all be public, private or protected.\"),Overload_signatures_must_all_be_optional_or_required:b(2386,1,\"Overload_signatures_must_all_be_optional_or_required_2386\",\"Overload signatures must all be optional or required.\"),Function_overload_must_be_static:b(2387,1,\"Function_overload_must_be_static_2387\",\"Function overload must be static.\"),Function_overload_must_not_be_static:b(2388,1,\"Function_overload_must_not_be_static_2388\",\"Function overload must not be static.\"),Function_implementation_name_must_be_0:b(2389,1,\"Function_implementation_name_must_be_0_2389\",\"Function implementation name must be '{0}'.\"),Constructor_implementation_is_missing:b(2390,1,\"Constructor_implementation_is_missing_2390\",\"Constructor implementation is missing.\"),Function_implementation_is_missing_or_not_immediately_following_the_declaration:b(2391,1,\"Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391\",\"Function implementation is missing or not immediately following the declaration.\"),Multiple_constructor_implementations_are_not_allowed:b(2392,1,\"Multiple_constructor_implementations_are_not_allowed_2392\",\"Multiple constructor implementations are not allowed.\"),Duplicate_function_implementation:b(2393,1,\"Duplicate_function_implementation_2393\",\"Duplicate function implementation.\"),This_overload_signature_is_not_compatible_with_its_implementation_signature:b(2394,1,\"This_overload_signature_is_not_compatible_with_its_implementation_signature_2394\",\"This overload signature is not compatible with its implementation signature.\"),Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local:b(2395,1,\"Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395\",\"Individual declarations in merged declaration '{0}' must be all exported or all local.\"),Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters:b(2396,1,\"Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396\",\"Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.\"),Declaration_name_conflicts_with_built_in_global_identifier_0:b(2397,1,\"Declaration_name_conflicts_with_built_in_global_identifier_0_2397\",\"Declaration name conflicts with built-in global identifier '{0}'.\"),constructor_cannot_be_used_as_a_parameter_property_name:b(2398,1,\"constructor_cannot_be_used_as_a_parameter_property_name_2398\",\"'constructor' cannot be used as a parameter property name.\"),Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference:b(2399,1,\"Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399\",\"Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.\"),Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference:b(2400,1,\"Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400\",\"Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.\"),A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers:b(2401,1,\"A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401\",\"A 'super' call must be a root-level statement within a constructor of a derived class that contains initialized properties, parameter properties, or private identifiers.\"),Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference:b(2402,1,\"Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402\",\"Expression resolves to '_super' that compiler uses to capture base class reference.\"),Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2:b(2403,1,\"Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403\",\"Subsequent variable declarations must have the same type.  Variable '{0}' must be of type '{1}', but here has type '{2}'.\"),The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation:b(2404,1,\"The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404\",\"The left-hand side of a 'for...in' statement cannot use a type annotation.\"),The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any:b(2405,1,\"The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405\",\"The left-hand side of a 'for...in' statement must be of type 'string' or 'any'.\"),The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access:b(2406,1,\"The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406\",\"The left-hand side of a 'for...in' statement must be a variable or a property access.\"),The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_here_has_type_0:b(2407,1,\"The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407\",\"The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type '{0}'.\"),Setters_cannot_return_a_value:b(2408,1,\"Setters_cannot_return_a_value_2408\",\"Setters cannot return a value.\"),Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class:b(2409,1,\"Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409\",\"Return type of constructor signature must be assignable to the instance type of the class.\"),The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any:b(2410,1,\"The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410\",\"The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'.\"),Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target:b(2412,1,\"Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412\",\"Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the type of the target.\"),Property_0_of_type_1_is_not_assignable_to_2_index_type_3:b(2411,1,\"Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411\",\"Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'.\"),_0_index_type_1_is_not_assignable_to_2_index_type_3:b(2413,1,\"_0_index_type_1_is_not_assignable_to_2_index_type_3_2413\",\"'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'.\"),Class_name_cannot_be_0:b(2414,1,\"Class_name_cannot_be_0_2414\",\"Class name cannot be '{0}'.\"),Class_0_incorrectly_extends_base_class_1:b(2415,1,\"Class_0_incorrectly_extends_base_class_1_2415\",\"Class '{0}' incorrectly extends base class '{1}'.\"),Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2:b(2416,1,\"Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416\",\"Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'.\"),Class_static_side_0_incorrectly_extends_base_class_static_side_1:b(2417,1,\"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417\",\"Class static side '{0}' incorrectly extends base class static side '{1}'.\"),Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1:b(2418,1,\"Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418\",\"Type of computed property's value is '{0}', which is not assignable to type '{1}'.\"),Types_of_construct_signatures_are_incompatible:b(2419,1,\"Types_of_construct_signatures_are_incompatible_2419\",\"Types of construct signatures are incompatible.\"),Class_0_incorrectly_implements_interface_1:b(2420,1,\"Class_0_incorrectly_implements_interface_1_2420\",\"Class '{0}' incorrectly implements interface '{1}'.\"),A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members:b(2422,1,\"A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422\",\"A class can only implement an object type or intersection of object types with statically known members.\"),Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor:b(2423,1,\"Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423\",\"Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.\"),Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function:b(2425,1,\"Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425\",\"Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.\"),Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function:b(2426,1,\"Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426\",\"Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.\"),Interface_name_cannot_be_0:b(2427,1,\"Interface_name_cannot_be_0_2427\",\"Interface name cannot be '{0}'.\"),All_declarations_of_0_must_have_identical_type_parameters:b(2428,1,\"All_declarations_of_0_must_have_identical_type_parameters_2428\",\"All declarations of '{0}' must have identical type parameters.\"),Interface_0_incorrectly_extends_interface_1:b(2430,1,\"Interface_0_incorrectly_extends_interface_1_2430\",\"Interface '{0}' incorrectly extends interface '{1}'.\"),Enum_name_cannot_be_0:b(2431,1,\"Enum_name_cannot_be_0_2431\",\"Enum name cannot be '{0}'.\"),In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element:b(2432,1,\"In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432\",\"In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.\"),A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged:b(2433,1,\"A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433\",\"A namespace declaration cannot be in a different file from a class or function with which it is merged.\"),A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged:b(2434,1,\"A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434\",\"A namespace declaration cannot be located prior to a class or function with which it is merged.\"),Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces:b(2435,1,\"Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435\",\"Ambient modules cannot be nested in other modules or namespaces.\"),Ambient_module_declaration_cannot_specify_relative_module_name:b(2436,1,\"Ambient_module_declaration_cannot_specify_relative_module_name_2436\",\"Ambient module declaration cannot specify relative module name.\"),Module_0_is_hidden_by_a_local_declaration_with_the_same_name:b(2437,1,\"Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437\",\"Module '{0}' is hidden by a local declaration with the same name.\"),Import_name_cannot_be_0:b(2438,1,\"Import_name_cannot_be_0_2438\",\"Import name cannot be '{0}'.\"),Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name:b(2439,1,\"Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439\",\"Import or export declaration in an ambient module declaration cannot reference module through relative module name.\"),Import_declaration_conflicts_with_local_declaration_of_0:b(2440,1,\"Import_declaration_conflicts_with_local_declaration_of_0_2440\",\"Import declaration conflicts with local declaration of '{0}'.\"),Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module:b(2441,1,\"Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441\",\"Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module.\"),Types_have_separate_declarations_of_a_private_property_0:b(2442,1,\"Types_have_separate_declarations_of_a_private_property_0_2442\",\"Types have separate declarations of a private property '{0}'.\"),Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2:b(2443,1,\"Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443\",\"Property '{0}' is protected but type '{1}' is not a class derived from '{2}'.\"),Property_0_is_protected_in_type_1_but_public_in_type_2:b(2444,1,\"Property_0_is_protected_in_type_1_but_public_in_type_2_2444\",\"Property '{0}' is protected in type '{1}' but public in type '{2}'.\"),Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses:b(2445,1,\"Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445\",\"Property '{0}' is protected and only accessible within class '{1}' and its subclasses.\"),Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_class_2:b(2446,1,\"Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446\",\"Property '{0}' is protected and only accessible through an instance of class '{1}'. This is an instance of class '{2}'.\"),The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead:b(2447,1,\"The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447\",\"The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead.\"),Block_scoped_variable_0_used_before_its_declaration:b(2448,1,\"Block_scoped_variable_0_used_before_its_declaration_2448\",\"Block-scoped variable '{0}' used before its declaration.\"),Class_0_used_before_its_declaration:b(2449,1,\"Class_0_used_before_its_declaration_2449\",\"Class '{0}' used before its declaration.\"),Enum_0_used_before_its_declaration:b(2450,1,\"Enum_0_used_before_its_declaration_2450\",\"Enum '{0}' used before its declaration.\"),Cannot_redeclare_block_scoped_variable_0:b(2451,1,\"Cannot_redeclare_block_scoped_variable_0_2451\",\"Cannot redeclare block-scoped variable '{0}'.\"),An_enum_member_cannot_have_a_numeric_name:b(2452,1,\"An_enum_member_cannot_have_a_numeric_name_2452\",\"An enum member cannot have a numeric name.\"),Variable_0_is_used_before_being_assigned:b(2454,1,\"Variable_0_is_used_before_being_assigned_2454\",\"Variable '{0}' is used before being assigned.\"),Type_alias_0_circularly_references_itself:b(2456,1,\"Type_alias_0_circularly_references_itself_2456\",\"Type alias '{0}' circularly references itself.\"),Type_alias_name_cannot_be_0:b(2457,1,\"Type_alias_name_cannot_be_0_2457\",\"Type alias name cannot be '{0}'.\"),An_AMD_module_cannot_have_multiple_name_assignments:b(2458,1,\"An_AMD_module_cannot_have_multiple_name_assignments_2458\",\"An AMD module cannot have multiple name assignments.\"),Module_0_declares_1_locally_but_it_is_not_exported:b(2459,1,\"Module_0_declares_1_locally_but_it_is_not_exported_2459\",\"Module '{0}' declares '{1}' locally, but it is not exported.\"),Module_0_declares_1_locally_but_it_is_exported_as_2:b(2460,1,\"Module_0_declares_1_locally_but_it_is_exported_as_2_2460\",\"Module '{0}' declares '{1}' locally, but it is exported as '{2}'.\"),Type_0_is_not_an_array_type:b(2461,1,\"Type_0_is_not_an_array_type_2461\",\"Type '{0}' is not an array type.\"),A_rest_element_must_be_last_in_a_destructuring_pattern:b(2462,1,\"A_rest_element_must_be_last_in_a_destructuring_pattern_2462\",\"A rest element must be last in a destructuring pattern.\"),A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature:b(2463,1,\"A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463\",\"A binding pattern parameter cannot be optional in an implementation signature.\"),A_computed_property_name_must_be_of_type_string_number_symbol_or_any:b(2464,1,\"A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464\",\"A computed property name must be of type 'string', 'number', 'symbol', or 'any'.\"),this_cannot_be_referenced_in_a_computed_property_name:b(2465,1,\"this_cannot_be_referenced_in_a_computed_property_name_2465\",\"'this' cannot be referenced in a computed property name.\"),super_cannot_be_referenced_in_a_computed_property_name:b(2466,1,\"super_cannot_be_referenced_in_a_computed_property_name_2466\",\"'super' cannot be referenced in a computed property name.\"),A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type:b(2467,1,\"A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467\",\"A computed property name cannot reference a type parameter from its containing type.\"),Cannot_find_global_value_0:b(2468,1,\"Cannot_find_global_value_0_2468\",\"Cannot find global value '{0}'.\"),The_0_operator_cannot_be_applied_to_type_symbol:b(2469,1,\"The_0_operator_cannot_be_applied_to_type_symbol_2469\",\"The '{0}' operator cannot be applied to type 'symbol'.\"),Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher:b(2472,1,\"Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472\",\"Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher.\"),Enum_declarations_must_all_be_const_or_non_const:b(2473,1,\"Enum_declarations_must_all_be_const_or_non_const_2473\",\"Enum declarations must all be const or non-const.\"),const_enum_member_initializers_must_be_constant_expressions:b(2474,1,\"const_enum_member_initializers_must_be_constant_expressions_2474\",\"const enum member initializers must be constant expressions.\"),const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query:b(2475,1,\"const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475\",\"'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query.\"),A_const_enum_member_can_only_be_accessed_using_a_string_literal:b(2476,1,\"A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476\",\"A const enum member can only be accessed using a string literal.\"),const_enum_member_initializer_was_evaluated_to_a_non_finite_value:b(2477,1,\"const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477\",\"'const' enum member initializer was evaluated to a non-finite value.\"),const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN:b(2478,1,\"const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478\",\"'const' enum member initializer was evaluated to disallowed value 'NaN'.\"),let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations:b(2480,1,\"let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480\",\"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\"),Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1:b(2481,1,\"Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481\",\"Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'.\"),The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation:b(2483,1,\"The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483\",\"The left-hand side of a 'for...of' statement cannot use a type annotation.\"),Export_declaration_conflicts_with_exported_declaration_of_0:b(2484,1,\"Export_declaration_conflicts_with_exported_declaration_of_0_2484\",\"Export declaration conflicts with exported declaration of '{0}'.\"),The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access:b(2487,1,\"The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487\",\"The left-hand side of a 'for...of' statement must be a variable or a property access.\"),Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator:b(2488,1,\"Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488\",\"Type '{0}' must have a '[Symbol.iterator]()' method that returns an iterator.\"),An_iterator_must_have_a_next_method:b(2489,1,\"An_iterator_must_have_a_next_method_2489\",\"An iterator must have a 'next()' method.\"),The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property:b(2490,1,\"The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490\",\"The type returned by the '{0}()' method of an iterator must have a 'value' property.\"),The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern:b(2491,1,\"The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491\",\"The left-hand side of a 'for...in' statement cannot be a destructuring pattern.\"),Cannot_redeclare_identifier_0_in_catch_clause:b(2492,1,\"Cannot_redeclare_identifier_0_in_catch_clause_2492\",\"Cannot redeclare identifier '{0}' in catch clause.\"),Tuple_type_0_of_length_1_has_no_element_at_index_2:b(2493,1,\"Tuple_type_0_of_length_1_has_no_element_at_index_2_2493\",\"Tuple type '{0}' of length '{1}' has no element at index '{2}'.\"),Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher:b(2494,1,\"Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494\",\"Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher.\"),Type_0_is_not_an_array_type_or_a_string_type:b(2495,1,\"Type_0_is_not_an_array_type_or_a_string_type_2495\",\"Type '{0}' is not an array type or a string type.\"),The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression:b(2496,1,\"The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496\",\"The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression.\"),This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export:b(2497,1,\"This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497\",\"This module can only be referenced with ECMAScript imports/exports by turning on the '{0}' flag and referencing its default export.\"),Module_0_uses_export_and_cannot_be_used_with_export_Asterisk:b(2498,1,\"Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498\",\"Module '{0}' uses 'export =' and cannot be used with 'export *'.\"),An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments:b(2499,1,\"An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499\",\"An interface can only extend an identifier/qualified-name with optional type arguments.\"),A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments:b(2500,1,\"A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500\",\"A class can only implement an identifier/qualified-name with optional type arguments.\"),A_rest_element_cannot_contain_a_binding_pattern:b(2501,1,\"A_rest_element_cannot_contain_a_binding_pattern_2501\",\"A rest element cannot contain a binding pattern.\"),_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation:b(2502,1,\"_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502\",\"'{0}' is referenced directly or indirectly in its own type annotation.\"),Cannot_find_namespace_0:b(2503,1,\"Cannot_find_namespace_0_2503\",\"Cannot find namespace '{0}'.\"),Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator:b(2504,1,\"Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504\",\"Type '{0}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator.\"),A_generator_cannot_have_a_void_type_annotation:b(2505,1,\"A_generator_cannot_have_a_void_type_annotation_2505\",\"A generator cannot have a 'void' type annotation.\"),_0_is_referenced_directly_or_indirectly_in_its_own_base_expression:b(2506,1,\"_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506\",\"'{0}' is referenced directly or indirectly in its own base expression.\"),Type_0_is_not_a_constructor_function_type:b(2507,1,\"Type_0_is_not_a_constructor_function_type_2507\",\"Type '{0}' is not a constructor function type.\"),No_base_constructor_has_the_specified_number_of_type_arguments:b(2508,1,\"No_base_constructor_has_the_specified_number_of_type_arguments_2508\",\"No base constructor has the specified number of type arguments.\"),Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members:b(2509,1,\"Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509\",\"Base constructor return type '{0}' is not an object type or intersection of object types with statically known members.\"),Base_constructors_must_all_have_the_same_return_type:b(2510,1,\"Base_constructors_must_all_have_the_same_return_type_2510\",\"Base constructors must all have the same return type.\"),Cannot_create_an_instance_of_an_abstract_class:b(2511,1,\"Cannot_create_an_instance_of_an_abstract_class_2511\",\"Cannot create an instance of an abstract class.\"),Overload_signatures_must_all_be_abstract_or_non_abstract:b(2512,1,\"Overload_signatures_must_all_be_abstract_or_non_abstract_2512\",\"Overload signatures must all be abstract or non-abstract.\"),Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression:b(2513,1,\"Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513\",\"Abstract method '{0}' in class '{1}' cannot be accessed via super expression.\"),A_tuple_type_cannot_be_indexed_with_a_negative_value:b(2514,1,\"A_tuple_type_cannot_be_indexed_with_a_negative_value_2514\",\"A tuple type cannot be indexed with a negative value.\"),Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2:b(2515,1,\"Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515\",\"Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'.\"),All_declarations_of_an_abstract_method_must_be_consecutive:b(2516,1,\"All_declarations_of_an_abstract_method_must_be_consecutive_2516\",\"All declarations of an abstract method must be consecutive.\"),Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type:b(2517,1,\"Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517\",\"Cannot assign an abstract constructor type to a non-abstract constructor type.\"),A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard:b(2518,1,\"A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518\",\"A 'this'-based type guard is not compatible with a parameter-based type guard.\"),An_async_iterator_must_have_a_next_method:b(2519,1,\"An_async_iterator_must_have_a_next_method_2519\",\"An async iterator must have a 'next()' method.\"),Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions:b(2520,1,\"Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520\",\"Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions.\"),The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method:b(2522,1,\"The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522\",\"The 'arguments' object cannot be referenced in an async function or method in ES3 and ES5. Consider using a standard function or method.\"),yield_expressions_cannot_be_used_in_a_parameter_initializer:b(2523,1,\"yield_expressions_cannot_be_used_in_a_parameter_initializer_2523\",\"'yield' expressions cannot be used in a parameter initializer.\"),await_expressions_cannot_be_used_in_a_parameter_initializer:b(2524,1,\"await_expressions_cannot_be_used_in_a_parameter_initializer_2524\",\"'await' expressions cannot be used in a parameter initializer.\"),Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value:b(2525,1,\"Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525\",\"Initializer provides no value for this binding element and the binding element has no default value.\"),A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface:b(2526,1,\"A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526\",\"A 'this' type is available only in a non-static member of a class or interface.\"),The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary:b(2527,1,\"The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527\",\"The inferred type of '{0}' references an inaccessible '{1}' type. A type annotation is necessary.\"),A_module_cannot_have_multiple_default_exports:b(2528,1,\"A_module_cannot_have_multiple_default_exports_2528\",\"A module cannot have multiple default exports.\"),Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions:b(2529,1,\"Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529\",\"Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions.\"),Property_0_is_incompatible_with_index_signature:b(2530,1,\"Property_0_is_incompatible_with_index_signature_2530\",\"Property '{0}' is incompatible with index signature.\"),Object_is_possibly_null:b(2531,1,\"Object_is_possibly_null_2531\",\"Object is possibly 'null'.\"),Object_is_possibly_undefined:b(2532,1,\"Object_is_possibly_undefined_2532\",\"Object is possibly 'undefined'.\"),Object_is_possibly_null_or_undefined:b(2533,1,\"Object_is_possibly_null_or_undefined_2533\",\"Object is possibly 'null' or 'undefined'.\"),A_function_returning_never_cannot_have_a_reachable_end_point:b(2534,1,\"A_function_returning_never_cannot_have_a_reachable_end_point_2534\",\"A function returning 'never' cannot have a reachable end point.\"),Type_0_cannot_be_used_to_index_type_1:b(2536,1,\"Type_0_cannot_be_used_to_index_type_1_2536\",\"Type '{0}' cannot be used to index type '{1}'.\"),Type_0_has_no_matching_index_signature_for_type_1:b(2537,1,\"Type_0_has_no_matching_index_signature_for_type_1_2537\",\"Type '{0}' has no matching index signature for type '{1}'.\"),Type_0_cannot_be_used_as_an_index_type:b(2538,1,\"Type_0_cannot_be_used_as_an_index_type_2538\",\"Type '{0}' cannot be used as an index type.\"),Cannot_assign_to_0_because_it_is_not_a_variable:b(2539,1,\"Cannot_assign_to_0_because_it_is_not_a_variable_2539\",\"Cannot assign to '{0}' because it is not a variable.\"),Cannot_assign_to_0_because_it_is_a_read_only_property:b(2540,1,\"Cannot_assign_to_0_because_it_is_a_read_only_property_2540\",\"Cannot assign to '{0}' because it is a read-only property.\"),Index_signature_in_type_0_only_permits_reading:b(2542,1,\"Index_signature_in_type_0_only_permits_reading_2542\",\"Index signature in type '{0}' only permits reading.\"),Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference:b(2543,1,\"Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543\",\"Duplicate identifier '_newTarget'. Compiler uses variable declaration '_newTarget' to capture 'new.target' meta-property reference.\"),Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference:b(2544,1,\"Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544\",\"Expression resolves to variable declaration '_newTarget' that compiler uses to capture 'new.target' meta-property reference.\"),A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any:b(2545,1,\"A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545\",\"A mixin class must have a constructor with a single rest parameter of type 'any[]'.\"),The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property:b(2547,1,\"The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547\",\"The type returned by the '{0}()' method of an async iterator must be a promise for a type with a 'value' property.\"),Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator:b(2548,1,\"Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548\",\"Type '{0}' is not an array type or does not have a '[Symbol.iterator]()' method that returns an iterator.\"),Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator:b(2549,1,\"Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549\",\"Type '{0}' is not an array type or a string type or does not have a '[Symbol.iterator]()' method that returns an iterator.\"),Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2_or_later:b(2550,1,\"Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550\",\"Property '{0}' does not exist on type '{1}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{2}' or later.\"),Property_0_does_not_exist_on_type_1_Did_you_mean_2:b(2551,1,\"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551\",\"Property '{0}' does not exist on type '{1}'. Did you mean '{2}'?\"),Cannot_find_name_0_Did_you_mean_1:b(2552,1,\"Cannot_find_name_0_Did_you_mean_1_2552\",\"Cannot find name '{0}'. Did you mean '{1}'?\"),Computed_values_are_not_permitted_in_an_enum_with_string_valued_members:b(2553,1,\"Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553\",\"Computed values are not permitted in an enum with string valued members.\"),Expected_0_arguments_but_got_1:b(2554,1,\"Expected_0_arguments_but_got_1_2554\",\"Expected {0} arguments, but got {1}.\"),Expected_at_least_0_arguments_but_got_1:b(2555,1,\"Expected_at_least_0_arguments_but_got_1_2555\",\"Expected at least {0} arguments, but got {1}.\"),A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter:b(2556,1,\"A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556\",\"A spread argument must either have a tuple type or be passed to a rest parameter.\"),Expected_0_type_arguments_but_got_1:b(2558,1,\"Expected_0_type_arguments_but_got_1_2558\",\"Expected {0} type arguments, but got {1}.\"),Type_0_has_no_properties_in_common_with_type_1:b(2559,1,\"Type_0_has_no_properties_in_common_with_type_1_2559\",\"Type '{0}' has no properties in common with type '{1}'.\"),Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it:b(2560,1,\"Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560\",\"Value of type '{0}' has no properties in common with type '{1}'. Did you mean to call it?\"),Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2:b(2561,1,\"Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561\",\"Object literal may only specify known properties, but '{0}' does not exist in type '{1}'. Did you mean to write '{2}'?\"),Base_class_expressions_cannot_reference_class_type_parameters:b(2562,1,\"Base_class_expressions_cannot_reference_class_type_parameters_2562\",\"Base class expressions cannot reference class type parameters.\"),The_containing_function_or_module_body_is_too_large_for_control_flow_analysis:b(2563,1,\"The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563\",\"The containing function or module body is too large for control flow analysis.\"),Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor:b(2564,1,\"Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564\",\"Property '{0}' has no initializer and is not definitely assigned in the constructor.\"),Property_0_is_used_before_being_assigned:b(2565,1,\"Property_0_is_used_before_being_assigned_2565\",\"Property '{0}' is used before being assigned.\"),A_rest_element_cannot_have_a_property_name:b(2566,1,\"A_rest_element_cannot_have_a_property_name_2566\",\"A rest element cannot have a property name.\"),Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations:b(2567,1,\"Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567\",\"Enum declarations can only merge with namespace or other enum declarations.\"),Property_0_may_not_exist_on_type_1_Did_you_mean_2:b(2568,1,\"Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568\",\"Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?\"),Could_not_find_name_0_Did_you_mean_1:b(2570,1,\"Could_not_find_name_0_Did_you_mean_1_2570\",\"Could not find name '{0}'. Did you mean '{1}'?\"),Object_is_of_type_unknown:b(2571,1,\"Object_is_of_type_unknown_2571\",\"Object is of type 'unknown'.\"),A_rest_element_type_must_be_an_array_type:b(2574,1,\"A_rest_element_type_must_be_an_array_type_2574\",\"A rest element type must be an array type.\"),No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments:b(2575,1,\"No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575\",\"No overload expects {0} arguments, but overloads do exist that expect either {1} or {2} arguments.\"),Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead:b(2576,1,\"Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576\",\"Property '{0}' does not exist on type '{1}'. Did you mean to access the static member '{2}' instead?\"),Return_type_annotation_circularly_references_itself:b(2577,1,\"Return_type_annotation_circularly_references_itself_2577\",\"Return type annotation circularly references itself.\"),Unused_ts_expect_error_directive:b(2578,1,\"Unused_ts_expect_error_directive_2578\",\"Unused '@ts-expect-error' directive.\"),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode:b(2580,1,\"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580\",\"Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.\"),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery:b(2581,1,\"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581\",\"Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery`.\"),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha:b(2582,1,\"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582\",\"Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha`.\"),Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later:b(2583,1,\"Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583\",\"Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{1}' or later.\"),Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom:b(2584,1,\"Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584\",\"Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.\"),_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_es2015_or_later:b(2585,1,\"_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585\",\"'{0}' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later.\"),Cannot_assign_to_0_because_it_is_a_constant:b(2588,1,\"Cannot_assign_to_0_because_it_is_a_constant_2588\",\"Cannot assign to '{0}' because it is a constant.\"),Type_instantiation_is_excessively_deep_and_possibly_infinite:b(2589,1,\"Type_instantiation_is_excessively_deep_and_possibly_infinite_2589\",\"Type instantiation is excessively deep and possibly infinite.\"),Expression_produces_a_union_type_that_is_too_complex_to_represent:b(2590,1,\"Expression_produces_a_union_type_that_is_too_complex_to_represent_2590\",\"Expression produces a union type that is too complex to represent.\"),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig:b(2591,1,\"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591\",\"Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig.\"),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig:b(2592,1,\"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592\",\"Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery` and then add 'jquery' to the types field in your tsconfig.\"),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig:b(2593,1,\"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593\",\"Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha` and then add 'jest' or 'mocha' to the types field in your tsconfig.\"),This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag:b(2594,1,\"This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594\",\"This module is declared with 'export =', and can only be used with a default import when using the '{0}' flag.\"),_0_can_only_be_imported_by_using_a_default_import:b(2595,1,\"_0_can_only_be_imported_by_using_a_default_import_2595\",\"'{0}' can only be imported by using a default import.\"),_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import:b(2596,1,\"_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596\",\"'{0}' can only be imported by turning on the 'esModuleInterop' flag and using a default import.\"),_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import:b(2597,1,\"_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597\",\"'{0}' can only be imported by using a 'require' call or by using a default import.\"),_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import:b(2598,1,\"_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598\",\"'{0}' can only be imported by using a 'require' call or by turning on the 'esModuleInterop' flag and using a default import.\"),JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist:b(2602,1,\"JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602\",\"JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist.\"),Property_0_in_type_1_is_not_assignable_to_type_2:b(2603,1,\"Property_0_in_type_1_is_not_assignable_to_type_2_2603\",\"Property '{0}' in type '{1}' is not assignable to type '{2}'.\"),JSX_element_type_0_does_not_have_any_construct_or_call_signatures:b(2604,1,\"JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604\",\"JSX element type '{0}' does not have any construct or call signatures.\"),Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property:b(2606,1,\"Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606\",\"Property '{0}' of JSX spread attribute is not assignable to target property.\"),JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property:b(2607,1,\"JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607\",\"JSX element class does not support attributes because it does not have a '{0}' property.\"),The_global_type_JSX_0_may_not_have_more_than_one_property:b(2608,1,\"The_global_type_JSX_0_may_not_have_more_than_one_property_2608\",\"The global type 'JSX.{0}' may not have more than one property.\"),JSX_spread_child_must_be_an_array_type:b(2609,1,\"JSX_spread_child_must_be_an_array_type_2609\",\"JSX spread child must be an array type.\"),_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property:b(2610,1,\"_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610\",\"'{0}' is defined as an accessor in class '{1}', but is overridden here in '{2}' as an instance property.\"),_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor:b(2611,1,\"_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611\",\"'{0}' is defined as a property in class '{1}', but is overridden here in '{2}' as an accessor.\"),Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration:b(2612,1,\"Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612\",\"Property '{0}' will overwrite the base property in '{1}'. If this is intentional, add an initializer. Otherwise, add a 'declare' modifier or remove the redundant declaration.\"),Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead:b(2613,1,\"Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613\",\"Module '{0}' has no default export. Did you mean to use 'import { {1} } from {0}' instead?\"),Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead:b(2614,1,\"Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614\",\"Module '{0}' has no exported member '{1}'. Did you mean to use 'import {1} from {0}' instead?\"),Type_of_property_0_circularly_references_itself_in_mapped_type_1:b(2615,1,\"Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615\",\"Type of property '{0}' circularly references itself in mapped type '{1}'.\"),_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import:b(2616,1,\"_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616\",\"'{0}' can only be imported by using 'import {1} = require({2})' or a default import.\"),_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import:b(2617,1,\"_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617\",\"'{0}' can only be imported by using 'import {1} = require({2})' or by turning on the 'esModuleInterop' flag and using a default import.\"),Source_has_0_element_s_but_target_requires_1:b(2618,1,\"Source_has_0_element_s_but_target_requires_1_2618\",\"Source has {0} element(s) but target requires {1}.\"),Source_has_0_element_s_but_target_allows_only_1:b(2619,1,\"Source_has_0_element_s_but_target_allows_only_1_2619\",\"Source has {0} element(s) but target allows only {1}.\"),Target_requires_0_element_s_but_source_may_have_fewer:b(2620,1,\"Target_requires_0_element_s_but_source_may_have_fewer_2620\",\"Target requires {0} element(s) but source may have fewer.\"),Target_allows_only_0_element_s_but_source_may_have_more:b(2621,1,\"Target_allows_only_0_element_s_but_source_may_have_more_2621\",\"Target allows only {0} element(s) but source may have more.\"),Source_provides_no_match_for_required_element_at_position_0_in_target:b(2623,1,\"Source_provides_no_match_for_required_element_at_position_0_in_target_2623\",\"Source provides no match for required element at position {0} in target.\"),Source_provides_no_match_for_variadic_element_at_position_0_in_target:b(2624,1,\"Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624\",\"Source provides no match for variadic element at position {0} in target.\"),Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target:b(2625,1,\"Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625\",\"Variadic element at position {0} in source does not match element at position {1} in target.\"),Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target:b(2626,1,\"Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626\",\"Type at position {0} in source is not compatible with type at position {1} in target.\"),Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target:b(2627,1,\"Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627\",\"Type at positions {0} through {1} in source is not compatible with type at position {2} in target.\"),Cannot_assign_to_0_because_it_is_an_enum:b(2628,1,\"Cannot_assign_to_0_because_it_is_an_enum_2628\",\"Cannot assign to '{0}' because it is an enum.\"),Cannot_assign_to_0_because_it_is_a_class:b(2629,1,\"Cannot_assign_to_0_because_it_is_a_class_2629\",\"Cannot assign to '{0}' because it is a class.\"),Cannot_assign_to_0_because_it_is_a_function:b(2630,1,\"Cannot_assign_to_0_because_it_is_a_function_2630\",\"Cannot assign to '{0}' because it is a function.\"),Cannot_assign_to_0_because_it_is_a_namespace:b(2631,1,\"Cannot_assign_to_0_because_it_is_a_namespace_2631\",\"Cannot assign to '{0}' because it is a namespace.\"),Cannot_assign_to_0_because_it_is_an_import:b(2632,1,\"Cannot_assign_to_0_because_it_is_an_import_2632\",\"Cannot assign to '{0}' because it is an import.\"),JSX_property_access_expressions_cannot_include_JSX_namespace_names:b(2633,1,\"JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633\",\"JSX property access expressions cannot include JSX namespace names\"),_0_index_signatures_are_incompatible:b(2634,1,\"_0_index_signatures_are_incompatible_2634\",\"'{0}' index signatures are incompatible.\"),Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable:b(2635,1,\"Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635\",\"Type '{0}' has no signatures for which the type argument list is applicable.\"),Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation:b(2636,1,\"Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636\",\"Type '{0}' is not assignable to type '{1}' as implied by variance annotation.\"),Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_types:b(2637,1,\"Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637\",\"Variance annotations are only supported in type aliases for object, function, constructor, and mapped types.\"),Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operator:b(2638,1,\"Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638\",\"Type '{0}' may represent a primitive value, which is not permitted as the right operand of the 'in' operator.\"),Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity:b(2649,1,\"Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649\",\"Cannot augment module '{0}' with value exports because it resolves to a non-module entity.\"),A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums:b(2651,1,\"A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651\",\"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\"),Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead:b(2652,1,\"Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652\",\"Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead.\"),Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1:b(2653,1,\"Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653\",\"Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'.\"),JSX_expressions_must_have_one_parent_element:b(2657,1,\"JSX_expressions_must_have_one_parent_element_2657\",\"JSX expressions must have one parent element.\"),Type_0_provides_no_match_for_the_signature_1:b(2658,1,\"Type_0_provides_no_match_for_the_signature_1_2658\",\"Type '{0}' provides no match for the signature '{1}'.\"),super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher:b(2659,1,\"super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659\",\"'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher.\"),super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions:b(2660,1,\"super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660\",\"'super' can only be referenced in members of derived classes or object literal expressions.\"),Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module:b(2661,1,\"Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661\",\"Cannot export '{0}'. Only local declarations can be exported from a module.\"),Cannot_find_name_0_Did_you_mean_the_static_member_1_0:b(2662,1,\"Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662\",\"Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?\"),Cannot_find_name_0_Did_you_mean_the_instance_member_this_0:b(2663,1,\"Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663\",\"Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?\"),Invalid_module_name_in_augmentation_module_0_cannot_be_found:b(2664,1,\"Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664\",\"Invalid module name in augmentation, module '{0}' cannot be found.\"),Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented:b(2665,1,\"Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665\",\"Invalid module name in augmentation. Module '{0}' resolves to an untyped module at '{1}', which cannot be augmented.\"),Exports_and_export_assignments_are_not_permitted_in_module_augmentations:b(2666,1,\"Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666\",\"Exports and export assignments are not permitted in module augmentations.\"),Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module:b(2667,1,\"Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667\",\"Imports are not permitted in module augmentations. Consider moving them to the enclosing external module.\"),export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible:b(2668,1,\"export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668\",\"'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible.\"),Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations:b(2669,1,\"Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669\",\"Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.\"),Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context:b(2670,1,\"Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670\",\"Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context.\"),Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity:b(2671,1,\"Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671\",\"Cannot augment module '{0}' because it resolves to a non-module entity.\"),Cannot_assign_a_0_constructor_type_to_a_1_constructor_type:b(2672,1,\"Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672\",\"Cannot assign a '{0}' constructor type to a '{1}' constructor type.\"),Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration:b(2673,1,\"Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673\",\"Constructor of class '{0}' is private and only accessible within the class declaration.\"),Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration:b(2674,1,\"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674\",\"Constructor of class '{0}' is protected and only accessible within the class declaration.\"),Cannot_extend_a_class_0_Class_constructor_is_marked_as_private:b(2675,1,\"Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675\",\"Cannot extend a class '{0}'. Class constructor is marked as private.\"),Accessors_must_both_be_abstract_or_non_abstract:b(2676,1,\"Accessors_must_both_be_abstract_or_non_abstract_2676\",\"Accessors must both be abstract or non-abstract.\"),A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type:b(2677,1,\"A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677\",\"A type predicate's type must be assignable to its parameter's type.\"),Type_0_is_not_comparable_to_type_1:b(2678,1,\"Type_0_is_not_comparable_to_type_1_2678\",\"Type '{0}' is not comparable to type '{1}'.\"),A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void:b(2679,1,\"A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679\",\"A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'.\"),A_0_parameter_must_be_the_first_parameter:b(2680,1,\"A_0_parameter_must_be_the_first_parameter_2680\",\"A '{0}' parameter must be the first parameter.\"),A_constructor_cannot_have_a_this_parameter:b(2681,1,\"A_constructor_cannot_have_a_this_parameter_2681\",\"A constructor cannot have a 'this' parameter.\"),this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation:b(2683,1,\"this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683\",\"'this' implicitly has type 'any' because it does not have a type annotation.\"),The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1:b(2684,1,\"The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684\",\"The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'.\"),The_this_types_of_each_signature_are_incompatible:b(2685,1,\"The_this_types_of_each_signature_are_incompatible_2685\",\"The 'this' types of each signature are incompatible.\"),_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead:b(2686,1,\"_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686\",\"'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead.\"),All_declarations_of_0_must_have_identical_modifiers:b(2687,1,\"All_declarations_of_0_must_have_identical_modifiers_2687\",\"All declarations of '{0}' must have identical modifiers.\"),Cannot_find_type_definition_file_for_0:b(2688,1,\"Cannot_find_type_definition_file_for_0_2688\",\"Cannot find type definition file for '{0}'.\"),Cannot_extend_an_interface_0_Did_you_mean_implements:b(2689,1,\"Cannot_extend_an_interface_0_Did_you_mean_implements_2689\",\"Cannot extend an interface '{0}'. Did you mean 'implements'?\"),_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0:b(2690,1,\"_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690\",\"'{0}' only refers to a type, but is being used as a value here. Did you mean to use '{1} in {0}'?\"),_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible:b(2692,1,\"_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692\",\"'{0}' is a primitive, but '{1}' is a wrapper object. Prefer using '{0}' when possible.\"),_0_only_refers_to_a_type_but_is_being_used_as_a_value_here:b(2693,1,\"_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693\",\"'{0}' only refers to a type, but is being used as a value here.\"),Namespace_0_has_no_exported_member_1:b(2694,1,\"Namespace_0_has_no_exported_member_1_2694\",\"Namespace '{0}' has no exported member '{1}'.\"),Left_side_of_comma_operator_is_unused_and_has_no_side_effects:b(2695,1,\"Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695\",\"Left side of comma operator is unused and has no side effects.\",!0),The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead:b(2696,1,\"The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696\",\"The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?\"),An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option:b(2697,1,\"An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697\",\"An async function or method must return a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option.\"),Spread_types_may_only_be_created_from_object_types:b(2698,1,\"Spread_types_may_only_be_created_from_object_types_2698\",\"Spread types may only be created from object types.\"),Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1:b(2699,1,\"Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699\",\"Static property '{0}' conflicts with built-in property 'Function.{0}' of constructor function '{1}'.\"),Rest_types_may_only_be_created_from_object_types:b(2700,1,\"Rest_types_may_only_be_created_from_object_types_2700\",\"Rest types may only be created from object types.\"),The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access:b(2701,1,\"The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701\",\"The target of an object rest assignment must be a variable or a property access.\"),_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here:b(2702,1,\"_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702\",\"'{0}' only refers to a type, but is being used as a namespace here.\"),The_operand_of_a_delete_operator_must_be_a_property_reference:b(2703,1,\"The_operand_of_a_delete_operator_must_be_a_property_reference_2703\",\"The operand of a 'delete' operator must be a property reference.\"),The_operand_of_a_delete_operator_cannot_be_a_read_only_property:b(2704,1,\"The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704\",\"The operand of a 'delete' operator cannot be a read-only property.\"),An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option:b(2705,1,\"An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705\",\"An async function or method in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option.\"),Required_type_parameters_may_not_follow_optional_type_parameters:b(2706,1,\"Required_type_parameters_may_not_follow_optional_type_parameters_2706\",\"Required type parameters may not follow optional type parameters.\"),Generic_type_0_requires_between_1_and_2_type_arguments:b(2707,1,\"Generic_type_0_requires_between_1_and_2_type_arguments_2707\",\"Generic type '{0}' requires between {1} and {2} type arguments.\"),Cannot_use_namespace_0_as_a_value:b(2708,1,\"Cannot_use_namespace_0_as_a_value_2708\",\"Cannot use namespace '{0}' as a value.\"),Cannot_use_namespace_0_as_a_type:b(2709,1,\"Cannot_use_namespace_0_as_a_type_2709\",\"Cannot use namespace '{0}' as a type.\"),_0_are_specified_twice_The_attribute_named_0_will_be_overwritten:b(2710,1,\"_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710\",\"'{0}' are specified twice. The attribute named '{0}' will be overwritten.\"),A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option:b(2711,1,\"A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711\",\"A dynamic import call returns a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option.\"),A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option:b(2712,1,\"A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712\",\"A dynamic import call in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option.\"),Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1:b(2713,1,\"Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713\",`Cannot access '{0}.{1}' because '{0}' is a type, but not a namespace. Did you mean to retrieve the type of the property '{1}' in '{0}' with '{0}[\"{1}\"]'?`),The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context:b(2714,1,\"The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714\",\"The expression of an export assignment must be an identifier or qualified name in an ambient context.\"),Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor:b(2715,1,\"Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715\",\"Abstract property '{0}' in class '{1}' cannot be accessed in the constructor.\"),Type_parameter_0_has_a_circular_default:b(2716,1,\"Type_parameter_0_has_a_circular_default_2716\",\"Type parameter '{0}' has a circular default.\"),Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2:b(2717,1,\"Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717\",\"Subsequent property declarations must have the same type.  Property '{0}' must be of type '{1}', but here has type '{2}'.\"),Duplicate_property_0:b(2718,1,\"Duplicate_property_0_2718\",\"Duplicate property '{0}'.\"),Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated:b(2719,1,\"Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719\",\"Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated.\"),Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass:b(2720,1,\"Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720\",\"Class '{0}' incorrectly implements class '{1}'. Did you mean to extend '{1}' and inherit its members as a subclass?\"),Cannot_invoke_an_object_which_is_possibly_null:b(2721,1,\"Cannot_invoke_an_object_which_is_possibly_null_2721\",\"Cannot invoke an object which is possibly 'null'.\"),Cannot_invoke_an_object_which_is_possibly_undefined:b(2722,1,\"Cannot_invoke_an_object_which_is_possibly_undefined_2722\",\"Cannot invoke an object which is possibly 'undefined'.\"),Cannot_invoke_an_object_which_is_possibly_null_or_undefined:b(2723,1,\"Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723\",\"Cannot invoke an object which is possibly 'null' or 'undefined'.\"),_0_has_no_exported_member_named_1_Did_you_mean_2:b(2724,1,\"_0_has_no_exported_member_named_1_Did_you_mean_2_2724\",\"'{0}' has no exported member named '{1}'. Did you mean '{2}'?\"),Class_name_cannot_be_Object_when_targeting_ES5_with_module_0:b(2725,1,\"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725\",\"Class name cannot be 'Object' when targeting ES5 with module {0}.\"),Cannot_find_lib_definition_for_0:b(2726,1,\"Cannot_find_lib_definition_for_0_2726\",\"Cannot find lib definition for '{0}'.\"),Cannot_find_lib_definition_for_0_Did_you_mean_1:b(2727,1,\"Cannot_find_lib_definition_for_0_Did_you_mean_1_2727\",\"Cannot find lib definition for '{0}'. Did you mean '{1}'?\"),_0_is_declared_here:b(2728,3,\"_0_is_declared_here_2728\",\"'{0}' is declared here.\"),Property_0_is_used_before_its_initialization:b(2729,1,\"Property_0_is_used_before_its_initialization_2729\",\"Property '{0}' is used before its initialization.\"),An_arrow_function_cannot_have_a_this_parameter:b(2730,1,\"An_arrow_function_cannot_have_a_this_parameter_2730\",\"An arrow function cannot have a 'this' parameter.\"),Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String:b(2731,1,\"Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731\",\"Implicit conversion of a 'symbol' to a 'string' will fail at runtime. Consider wrapping this expression in 'String(...)'.\"),Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension:b(2732,1,\"Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732\",\"Cannot find module '{0}'. Consider using '--resolveJsonModule' to import module with '.json' extension.\"),Property_0_was_also_declared_here:b(2733,1,\"Property_0_was_also_declared_here_2733\",\"Property '{0}' was also declared here.\"),Are_you_missing_a_semicolon:b(2734,1,\"Are_you_missing_a_semicolon_2734\",\"Are you missing a semicolon?\"),Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1:b(2735,1,\"Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735\",\"Did you mean for '{0}' to be constrained to type 'new (...args: any[]) => {1}'?\"),Operator_0_cannot_be_applied_to_type_1:b(2736,1,\"Operator_0_cannot_be_applied_to_type_1_2736\",\"Operator '{0}' cannot be applied to type '{1}'.\"),BigInt_literals_are_not_available_when_targeting_lower_than_ES2020:b(2737,1,\"BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737\",\"BigInt literals are not available when targeting lower than ES2020.\"),An_outer_value_of_this_is_shadowed_by_this_container:b(2738,3,\"An_outer_value_of_this_is_shadowed_by_this_container_2738\",\"An outer value of 'this' is shadowed by this container.\"),Type_0_is_missing_the_following_properties_from_type_1_Colon_2:b(2739,1,\"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739\",\"Type '{0}' is missing the following properties from type '{1}': {2}\"),Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more:b(2740,1,\"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740\",\"Type '{0}' is missing the following properties from type '{1}': {2}, and {3} more.\"),Property_0_is_missing_in_type_1_but_required_in_type_2:b(2741,1,\"Property_0_is_missing_in_type_1_but_required_in_type_2_2741\",\"Property '{0}' is missing in type '{1}' but required in type '{2}'.\"),The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary:b(2742,1,\"The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742\",\"The inferred type of '{0}' cannot be named without a reference to '{1}'. This is likely not portable. A type annotation is necessary.\"),No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments:b(2743,1,\"No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743\",\"No overload expects {0} type arguments, but overloads do exist that expect either {1} or {2} type arguments.\"),Type_parameter_defaults_can_only_reference_previously_declared_type_parameters:b(2744,1,\"Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744\",\"Type parameter defaults can only reference previously declared type parameters.\"),This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided:b(2745,1,\"This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745\",\"This JSX tag's '{0}' prop expects type '{1}' which requires multiple children, but only a single child was provided.\"),This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided:b(2746,1,\"This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746\",\"This JSX tag's '{0}' prop expects a single child of type '{1}', but multiple children were provided.\"),_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2:b(2747,1,\"_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747\",\"'{0}' components don't accept text as child elements. Text in JSX has the type 'string', but the expected type of '{1}' is '{2}'.\"),Cannot_access_ambient_const_enums_when_0_is_enabled:b(2748,1,\"Cannot_access_ambient_const_enums_when_0_is_enabled_2748\",\"Cannot access ambient const enums when '{0}' is enabled.\"),_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0:b(2749,1,\"_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749\",\"'{0}' refers to a value, but is being used as a type here. Did you mean 'typeof {0}'?\"),The_implementation_signature_is_declared_here:b(2750,1,\"The_implementation_signature_is_declared_here_2750\",\"The implementation signature is declared here.\"),Circularity_originates_in_type_at_this_location:b(2751,1,\"Circularity_originates_in_type_at_this_location_2751\",\"Circularity originates in type at this location.\"),The_first_export_default_is_here:b(2752,1,\"The_first_export_default_is_here_2752\",\"The first export default is here.\"),Another_export_default_is_here:b(2753,1,\"Another_export_default_is_here_2753\",\"Another export default is here.\"),super_may_not_use_type_arguments:b(2754,1,\"super_may_not_use_type_arguments_2754\",\"'super' may not use type arguments.\"),No_constituent_of_type_0_is_callable:b(2755,1,\"No_constituent_of_type_0_is_callable_2755\",\"No constituent of type '{0}' is callable.\"),Not_all_constituents_of_type_0_are_callable:b(2756,1,\"Not_all_constituents_of_type_0_are_callable_2756\",\"Not all constituents of type '{0}' are callable.\"),Type_0_has_no_call_signatures:b(2757,1,\"Type_0_has_no_call_signatures_2757\",\"Type '{0}' has no call signatures.\"),Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_other:b(2758,1,\"Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758\",\"Each member of the union type '{0}' has signatures, but none of those signatures are compatible with each other.\"),No_constituent_of_type_0_is_constructable:b(2759,1,\"No_constituent_of_type_0_is_constructable_2759\",\"No constituent of type '{0}' is constructable.\"),Not_all_constituents_of_type_0_are_constructable:b(2760,1,\"Not_all_constituents_of_type_0_are_constructable_2760\",\"Not all constituents of type '{0}' are constructable.\"),Type_0_has_no_construct_signatures:b(2761,1,\"Type_0_has_no_construct_signatures_2761\",\"Type '{0}' has no construct signatures.\"),Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_with_each_other:b(2762,1,\"Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762\",\"Each member of the union type '{0}' has construct signatures, but none of those signatures are compatible with each other.\"),Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0:b(2763,1,\"Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763\",\"Cannot iterate value because the 'next' method of its iterator expects type '{1}', but for-of will always send '{0}'.\"),Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0:b(2764,1,\"Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764\",\"Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array spread will always send '{0}'.\"),Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0:b(2765,1,\"Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765\",\"Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array destructuring will always send '{0}'.\"),Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0:b(2766,1,\"Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766\",\"Cannot delegate iteration to value because the 'next' method of its iterator expects type '{1}', but the containing generator will always send '{0}'.\"),The_0_property_of_an_iterator_must_be_a_method:b(2767,1,\"The_0_property_of_an_iterator_must_be_a_method_2767\",\"The '{0}' property of an iterator must be a method.\"),The_0_property_of_an_async_iterator_must_be_a_method:b(2768,1,\"The_0_property_of_an_async_iterator_must_be_a_method_2768\",\"The '{0}' property of an async iterator must be a method.\"),No_overload_matches_this_call:b(2769,1,\"No_overload_matches_this_call_2769\",\"No overload matches this call.\"),The_last_overload_gave_the_following_error:b(2770,1,\"The_last_overload_gave_the_following_error_2770\",\"The last overload gave the following error.\"),The_last_overload_is_declared_here:b(2771,1,\"The_last_overload_is_declared_here_2771\",\"The last overload is declared here.\"),Overload_0_of_1_2_gave_the_following_error:b(2772,1,\"Overload_0_of_1_2_gave_the_following_error_2772\",\"Overload {0} of {1}, '{2}', gave the following error.\"),Did_you_forget_to_use_await:b(2773,1,\"Did_you_forget_to_use_await_2773\",\"Did you forget to use 'await'?\"),This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead:b(2774,1,\"This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774\",\"This condition will always return true since this function is always defined. Did you mean to call it instead?\"),Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation:b(2775,1,\"Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775\",\"Assertions require every name in the call target to be declared with an explicit type annotation.\"),Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name:b(2776,1,\"Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776\",\"Assertions require the call target to be an identifier or qualified name.\"),The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access:b(2777,1,\"The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777\",\"The operand of an increment or decrement operator may not be an optional property access.\"),The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access:b(2778,1,\"The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778\",\"The target of an object rest assignment may not be an optional property access.\"),The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access:b(2779,1,\"The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779\",\"The left-hand side of an assignment expression may not be an optional property access.\"),The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access:b(2780,1,\"The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780\",\"The left-hand side of a 'for...in' statement may not be an optional property access.\"),The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access:b(2781,1,\"The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781\",\"The left-hand side of a 'for...of' statement may not be an optional property access.\"),_0_needs_an_explicit_type_annotation:b(2782,3,\"_0_needs_an_explicit_type_annotation_2782\",\"'{0}' needs an explicit type annotation.\"),_0_is_specified_more_than_once_so_this_usage_will_be_overwritten:b(2783,1,\"_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783\",\"'{0}' is specified more than once, so this usage will be overwritten.\"),get_and_set_accessors_cannot_declare_this_parameters:b(2784,1,\"get_and_set_accessors_cannot_declare_this_parameters_2784\",\"'get' and 'set' accessors cannot declare 'this' parameters.\"),This_spread_always_overwrites_this_property:b(2785,1,\"This_spread_always_overwrites_this_property_2785\",\"This spread always overwrites this property.\"),_0_cannot_be_used_as_a_JSX_component:b(2786,1,\"_0_cannot_be_used_as_a_JSX_component_2786\",\"'{0}' cannot be used as a JSX component.\"),Its_return_type_0_is_not_a_valid_JSX_element:b(2787,1,\"Its_return_type_0_is_not_a_valid_JSX_element_2787\",\"Its return type '{0}' is not a valid JSX element.\"),Its_instance_type_0_is_not_a_valid_JSX_element:b(2788,1,\"Its_instance_type_0_is_not_a_valid_JSX_element_2788\",\"Its instance type '{0}' is not a valid JSX element.\"),Its_element_type_0_is_not_a_valid_JSX_element:b(2789,1,\"Its_element_type_0_is_not_a_valid_JSX_element_2789\",\"Its element type '{0}' is not a valid JSX element.\"),The_operand_of_a_delete_operator_must_be_optional:b(2790,1,\"The_operand_of_a_delete_operator_must_be_optional_2790\",\"The operand of a 'delete' operator must be optional.\"),Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later:b(2791,1,\"Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791\",\"Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later.\"),Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option:b(2792,1,\"Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792\",\"Cannot find module '{0}'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\"),The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_are_not_externally_visible:b(2793,1,\"The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793\",\"The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible.\"),Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise:b(2794,1,\"Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794\",\"Expected {0} arguments, but got {1}. Did you forget to include 'void' in your type argument to 'Promise'?\"),The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types:b(2795,1,\"The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795\",\"The 'intrinsic' keyword can only be used to declare compiler provided intrinsic types.\"),It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tagged_template_expression_which_cannot_be_invoked:b(2796,1,\"It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796\",\"It is likely that you are missing a comma to separate these two template expressions. They form a tagged template expression which cannot be invoked.\"),A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract:b(2797,1,\"A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797\",\"A mixin class that extends from a type variable containing an abstract construct signature must also be declared 'abstract'.\"),The_declaration_was_marked_as_deprecated_here:b(2798,1,\"The_declaration_was_marked_as_deprecated_here_2798\",\"The declaration was marked as deprecated here.\"),Type_produces_a_tuple_type_that_is_too_large_to_represent:b(2799,1,\"Type_produces_a_tuple_type_that_is_too_large_to_represent_2799\",\"Type produces a tuple type that is too large to represent.\"),Expression_produces_a_tuple_type_that_is_too_large_to_represent:b(2800,1,\"Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800\",\"Expression produces a tuple type that is too large to represent.\"),This_condition_will_always_return_true_since_this_0_is_always_defined:b(2801,1,\"This_condition_will_always_return_true_since_this_0_is_always_defined_2801\",\"This condition will always return true since this '{0}' is always defined.\"),Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher:b(2802,1,\"Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802\",\"Type '{0}' can only be iterated through when using the '--downlevelIteration' flag or with a '--target' of 'es2015' or higher.\"),Cannot_assign_to_private_method_0_Private_methods_are_not_writable:b(2803,1,\"Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803\",\"Cannot assign to private method '{0}'. Private methods are not writable.\"),Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name:b(2804,1,\"Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804\",\"Duplicate identifier '{0}'. Static and instance elements cannot share the same private name.\"),Private_accessor_was_defined_without_a_getter:b(2806,1,\"Private_accessor_was_defined_without_a_getter_2806\",\"Private accessor was defined without a getter.\"),This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0:b(2807,1,\"This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807\",\"This syntax requires an imported helper named '{1}' with {2} parameters, which is not compatible with the one in '{0}'. Consider upgrading your version of '{0}'.\"),A_get_accessor_must_be_at_least_as_accessible_as_the_setter:b(2808,1,\"A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808\",\"A get accessor must be at least as accessible as the setter\"),Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_whole_assignment_in_parentheses:b(2809,1,\"Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809\",\"Declaration or statement expected. This '=' follows a block of statements, so if you intended to write a destructuring assignment, you might need to wrap the whole assignment in parentheses.\"),Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments:b(2810,1,\"Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810\",\"Expected 1 argument, but got 0. 'new Promise()' needs a JSDoc hint to produce a 'resolve' that can be called without arguments.\"),Initializer_for_property_0:b(2811,1,\"Initializer_for_property_0_2811\",\"Initializer for property '{0}'\"),Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom:b(2812,1,\"Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812\",\"Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'.\"),Class_declaration_cannot_implement_overload_list_for_0:b(2813,1,\"Class_declaration_cannot_implement_overload_list_for_0_2813\",\"Class declaration cannot implement overload list for '{0}'.\"),Function_with_bodies_can_only_merge_with_classes_that_are_ambient:b(2814,1,\"Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814\",\"Function with bodies can only merge with classes that are ambient.\"),arguments_cannot_be_referenced_in_property_initializers:b(2815,1,\"arguments_cannot_be_referenced_in_property_initializers_2815\",\"'arguments' cannot be referenced in property initializers.\"),Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class:b(2816,1,\"Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816\",\"Cannot use 'this' in a static property initializer of a decorated class.\"),Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block:b(2817,1,\"Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817\",\"Property '{0}' has no initializer and is not definitely assigned in a class static block.\"),Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers:b(2818,1,\"Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818\",\"Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers.\"),Namespace_name_cannot_be_0:b(2819,1,\"Namespace_name_cannot_be_0_2819\",\"Namespace name cannot be '{0}'.\"),Type_0_is_not_assignable_to_type_1_Did_you_mean_2:b(2820,1,\"Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820\",\"Type '{0}' is not assignable to type '{1}'. Did you mean '{2}'?\"),Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext:b(2821,1,\"Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821\",\"Import assertions are only supported when the '--module' option is set to 'esnext' or 'nodenext'.\"),Import_assertions_cannot_be_used_with_type_only_imports_or_exports:b(2822,1,\"Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822\",\"Import assertions cannot be used with type-only imports or exports.\"),Cannot_find_namespace_0_Did_you_mean_1:b(2833,1,\"Cannot_find_namespace_0_Did_you_mean_1_2833\",\"Cannot find namespace '{0}'. Did you mean '{1}'?\"),Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path:b(2834,1,\"Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834\",\"Relative import paths need explicit file extensions in EcmaScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Consider adding an extension to the import path.\"),Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0:b(2835,1,\"Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835\",\"Relative import paths need explicit file extensions in EcmaScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean '{0}'?\"),Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls:b(2836,1,\"Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836\",\"Import assertions are not allowed on statements that transpile to commonjs 'require' calls.\"),Import_assertion_values_must_be_string_literal_expressions:b(2837,1,\"Import_assertion_values_must_be_string_literal_expressions_2837\",\"Import assertion values must be string literal expressions.\"),All_declarations_of_0_must_have_identical_constraints:b(2838,1,\"All_declarations_of_0_must_have_identical_constraints_2838\",\"All declarations of '{0}' must have identical constraints.\"),This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value:b(2839,1,\"This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839\",\"This condition will always return '{0}' since JavaScript compares objects by reference, not value.\"),An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_classes:b(2840,1,\"An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840\",\"An interface cannot extend a primitive type like '{0}'; an interface can only extend named types and classes\"),The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_feature_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next:b(2841,1,\"The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841\",\"The type of this expression cannot be named without a 'resolution-mode' assertion, which is an unstable feature. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'.\"),_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation:b(2842,1,\"_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842\",\"'{0}' is an unused renaming of '{1}'. Did you intend to use it as a type annotation?\"),We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here:b(2843,1,\"We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843\",\"We can only write a type for '{0}' by adding a type for the entire parameter here.\"),Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor:b(2844,1,\"Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844\",\"Type of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.\"),This_condition_will_always_return_0:b(2845,1,\"This_condition_will_always_return_0_2845\",\"This condition will always return '{0}'.\"),A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_file_0_instead:b(2846,1,\"A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846\",\"A declaration file cannot be imported without 'import type'. Did you mean to import an implementation file '{0}' instead?\"),Import_declaration_0_is_using_private_name_1:b(4e3,1,\"Import_declaration_0_is_using_private_name_1_4000\",\"Import declaration '{0}' is using private name '{1}'.\"),Type_parameter_0_of_exported_class_has_or_is_using_private_name_1:b(4002,1,\"Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002\",\"Type parameter '{0}' of exported class has or is using private name '{1}'.\"),Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1:b(4004,1,\"Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004\",\"Type parameter '{0}' of exported interface has or is using private name '{1}'.\"),Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1:b(4006,1,\"Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006\",\"Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.\"),Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1:b(4008,1,\"Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008\",\"Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'.\"),Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:b(4010,1,\"Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010\",\"Type parameter '{0}' of public static method from exported class has or is using private name '{1}'.\"),Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:b(4012,1,\"Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012\",\"Type parameter '{0}' of public method from exported class has or is using private name '{1}'.\"),Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1:b(4014,1,\"Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014\",\"Type parameter '{0}' of method from exported interface has or is using private name '{1}'.\"),Type_parameter_0_of_exported_function_has_or_is_using_private_name_1:b(4016,1,\"Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016\",\"Type parameter '{0}' of exported function has or is using private name '{1}'.\"),Implements_clause_of_exported_class_0_has_or_is_using_private_name_1:b(4019,1,\"Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019\",\"Implements clause of exported class '{0}' has or is using private name '{1}'.\"),extends_clause_of_exported_class_0_has_or_is_using_private_name_1:b(4020,1,\"extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020\",\"'extends' clause of exported class '{0}' has or is using private name '{1}'.\"),extends_clause_of_exported_class_has_or_is_using_private_name_0:b(4021,1,\"extends_clause_of_exported_class_has_or_is_using_private_name_0_4021\",\"'extends' clause of exported class has or is using private name '{0}'.\"),extends_clause_of_exported_interface_0_has_or_is_using_private_name_1:b(4022,1,\"extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022\",\"'extends' clause of exported interface '{0}' has or is using private name '{1}'.\"),Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4023,1,\"Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023\",\"Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named.\"),Exported_variable_0_has_or_is_using_name_1_from_private_module_2:b(4024,1,\"Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024\",\"Exported variable '{0}' has or is using name '{1}' from private module '{2}'.\"),Exported_variable_0_has_or_is_using_private_name_1:b(4025,1,\"Exported_variable_0_has_or_is_using_private_name_1_4025\",\"Exported variable '{0}' has or is using private name '{1}'.\"),Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4026,1,\"Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026\",\"Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.\"),Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:b(4027,1,\"Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027\",\"Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'.\"),Public_static_property_0_of_exported_class_has_or_is_using_private_name_1:b(4028,1,\"Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028\",\"Public static property '{0}' of exported class has or is using private name '{1}'.\"),Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4029,1,\"Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029\",\"Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.\"),Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:b(4030,1,\"Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030\",\"Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'.\"),Public_property_0_of_exported_class_has_or_is_using_private_name_1:b(4031,1,\"Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031\",\"Public property '{0}' of exported class has or is using private name '{1}'.\"),Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:b(4032,1,\"Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032\",\"Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'.\"),Property_0_of_exported_interface_has_or_is_using_private_name_1:b(4033,1,\"Property_0_of_exported_interface_has_or_is_using_private_name_1_4033\",\"Property '{0}' of exported interface has or is using private name '{1}'.\"),Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:b(4034,1,\"Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034\",\"Parameter type of public static setter '{0}' from exported class has or is using name '{1}' from private module '{2}'.\"),Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1:b(4035,1,\"Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035\",\"Parameter type of public static setter '{0}' from exported class has or is using private name '{1}'.\"),Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:b(4036,1,\"Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036\",\"Parameter type of public setter '{0}' from exported class has or is using name '{1}' from private module '{2}'.\"),Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1:b(4037,1,\"Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037\",\"Parameter type of public setter '{0}' from exported class has or is using private name '{1}'.\"),Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4038,1,\"Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038\",\"Return type of public static getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named.\"),Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:b(4039,1,\"Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039\",\"Return type of public static getter '{0}' from exported class has or is using name '{1}' from private module '{2}'.\"),Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1:b(4040,1,\"Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040\",\"Return type of public static getter '{0}' from exported class has or is using private name '{1}'.\"),Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4041,1,\"Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041\",\"Return type of public getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named.\"),Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:b(4042,1,\"Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042\",\"Return type of public getter '{0}' from exported class has or is using name '{1}' from private module '{2}'.\"),Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1:b(4043,1,\"Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043\",\"Return type of public getter '{0}' from exported class has or is using private name '{1}'.\"),Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:b(4044,1,\"Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044\",\"Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'.\"),Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0:b(4045,1,\"Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045\",\"Return type of constructor signature from exported interface has or is using private name '{0}'.\"),Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:b(4046,1,\"Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046\",\"Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'.\"),Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0:b(4047,1,\"Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047\",\"Return type of call signature from exported interface has or is using private name '{0}'.\"),Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:b(4048,1,\"Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048\",\"Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'.\"),Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0:b(4049,1,\"Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049\",\"Return type of index signature from exported interface has or is using private name '{0}'.\"),Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:b(4050,1,\"Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050\",\"Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named.\"),Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:b(4051,1,\"Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051\",\"Return type of public static method from exported class has or is using name '{0}' from private module '{1}'.\"),Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0:b(4052,1,\"Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052\",\"Return type of public static method from exported class has or is using private name '{0}'.\"),Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:b(4053,1,\"Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053\",\"Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named.\"),Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:b(4054,1,\"Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054\",\"Return type of public method from exported class has or is using name '{0}' from private module '{1}'.\"),Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0:b(4055,1,\"Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055\",\"Return type of public method from exported class has or is using private name '{0}'.\"),Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1:b(4056,1,\"Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056\",\"Return type of method from exported interface has or is using name '{0}' from private module '{1}'.\"),Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0:b(4057,1,\"Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057\",\"Return type of method from exported interface has or is using private name '{0}'.\"),Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:b(4058,1,\"Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058\",\"Return type of exported function has or is using name '{0}' from external module {1} but cannot be named.\"),Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1:b(4059,1,\"Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059\",\"Return type of exported function has or is using name '{0}' from private module '{1}'.\"),Return_type_of_exported_function_has_or_is_using_private_name_0:b(4060,1,\"Return_type_of_exported_function_has_or_is_using_private_name_0_4060\",\"Return type of exported function has or is using private name '{0}'.\"),Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4061,1,\"Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061\",\"Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named.\"),Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2:b(4062,1,\"Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062\",\"Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'.\"),Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1:b(4063,1,\"Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063\",\"Parameter '{0}' of constructor from exported class has or is using private name '{1}'.\"),Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:b(4064,1,\"Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064\",\"Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'.\"),Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1:b(4065,1,\"Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065\",\"Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'.\"),Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:b(4066,1,\"Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066\",\"Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'.\"),Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1:b(4067,1,\"Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067\",\"Parameter '{0}' of call signature from exported interface has or is using private name '{1}'.\"),Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4068,1,\"Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068\",\"Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named.\"),Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:b(4069,1,\"Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069\",\"Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'.\"),Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:b(4070,1,\"Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070\",\"Parameter '{0}' of public static method from exported class has or is using private name '{1}'.\"),Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4071,1,\"Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071\",\"Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named.\"),Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:b(4072,1,\"Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072\",\"Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'.\"),Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:b(4073,1,\"Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073\",\"Parameter '{0}' of public method from exported class has or is using private name '{1}'.\"),Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2:b(4074,1,\"Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074\",\"Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'.\"),Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1:b(4075,1,\"Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075\",\"Parameter '{0}' of method from exported interface has or is using private name '{1}'.\"),Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4076,1,\"Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076\",\"Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named.\"),Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2:b(4077,1,\"Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077\",\"Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'.\"),Parameter_0_of_exported_function_has_or_is_using_private_name_1:b(4078,1,\"Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078\",\"Parameter '{0}' of exported function has or is using private name '{1}'.\"),Exported_type_alias_0_has_or_is_using_private_name_1:b(4081,1,\"Exported_type_alias_0_has_or_is_using_private_name_1_4081\",\"Exported type alias '{0}' has or is using private name '{1}'.\"),Default_export_of_the_module_has_or_is_using_private_name_0:b(4082,1,\"Default_export_of_the_module_has_or_is_using_private_name_0_4082\",\"Default export of the module has or is using private name '{0}'.\"),Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1:b(4083,1,\"Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083\",\"Type parameter '{0}' of exported type alias has or is using private name '{1}'.\"),Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2:b(4084,1,\"Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084\",\"Exported type alias '{0}' has or is using private name '{1}' from module {2}.\"),Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1:b(4085,1,\"Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085\",\"Extends clause for inferred type '{0}' has or is using private name '{1}'.\"),Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict:b(4090,1,\"Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090\",\"Conflicting definitions for '{0}' found at '{1}' and '{2}'. Consider installing a specific version of this library to resolve the conflict.\"),Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:b(4091,1,\"Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091\",\"Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'.\"),Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1:b(4092,1,\"Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092\",\"Parameter '{0}' of index signature from exported interface has or is using private name '{1}'.\"),Property_0_of_exported_class_expression_may_not_be_private_or_protected:b(4094,1,\"Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094\",\"Property '{0}' of exported class expression may not be private or protected.\"),Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4095,1,\"Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095\",\"Public static method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.\"),Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:b(4096,1,\"Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096\",\"Public static method '{0}' of exported class has or is using name '{1}' from private module '{2}'.\"),Public_static_method_0_of_exported_class_has_or_is_using_private_name_1:b(4097,1,\"Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097\",\"Public static method '{0}' of exported class has or is using private name '{1}'.\"),Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4098,1,\"Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098\",\"Public method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named.\"),Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:b(4099,1,\"Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099\",\"Public method '{0}' of exported class has or is using name '{1}' from private module '{2}'.\"),Public_method_0_of_exported_class_has_or_is_using_private_name_1:b(4100,1,\"Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100\",\"Public method '{0}' of exported class has or is using private name '{1}'.\"),Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:b(4101,1,\"Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101\",\"Method '{0}' of exported interface has or is using name '{1}' from private module '{2}'.\"),Method_0_of_exported_interface_has_or_is_using_private_name_1:b(4102,1,\"Method_0_of_exported_interface_has_or_is_using_private_name_1_4102\",\"Method '{0}' of exported interface has or is using private name '{1}'.\"),Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1:b(4103,1,\"Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103\",\"Type parameter '{0}' of exported mapped object type is using private name '{1}'.\"),The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1:b(4104,1,\"The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104\",\"The type '{0}' is 'readonly' and cannot be assigned to the mutable type '{1}'.\"),Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter:b(4105,1,\"Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105\",\"Private or protected member '{0}' cannot be accessed on a type parameter.\"),Parameter_0_of_accessor_has_or_is_using_private_name_1:b(4106,1,\"Parameter_0_of_accessor_has_or_is_using_private_name_1_4106\",\"Parameter '{0}' of accessor has or is using private name '{1}'.\"),Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2:b(4107,1,\"Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107\",\"Parameter '{0}' of accessor has or is using name '{1}' from private module '{2}'.\"),Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:b(4108,1,\"Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108\",\"Parameter '{0}' of accessor has or is using name '{1}' from external module '{2}' but cannot be named.\"),Type_arguments_for_0_circularly_reference_themselves:b(4109,1,\"Type_arguments_for_0_circularly_reference_themselves_4109\",\"Type arguments for '{0}' circularly reference themselves.\"),Tuple_type_arguments_circularly_reference_themselves:b(4110,1,\"Tuple_type_arguments_circularly_reference_themselves_4110\",\"Tuple type arguments circularly reference themselves.\"),Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0:b(4111,1,\"Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111\",\"Property '{0}' comes from an index signature, so it must be accessed with ['{0}'].\"),This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class:b(4112,1,\"This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112\",\"This member cannot have an 'override' modifier because its containing class '{0}' does not extend another class.\"),This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0:b(4113,1,\"This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113\",\"This member cannot have an 'override' modifier because it is not declared in the base class '{0}'.\"),This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0:b(4114,1,\"This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114\",\"This member must have an 'override' modifier because it overrides a member in the base class '{0}'.\"),This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0:b(4115,1,\"This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115\",\"This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'.\"),This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0:b(4116,1,\"This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116\",\"This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'.\"),This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1:b(4117,1,\"This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117\",\"This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?\"),The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized:b(4118,1,\"The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118\",\"The type of this node cannot be serialized because its property '{0}' cannot be serialized.\"),This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0:b(4119,1,\"This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119\",\"This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.\"),This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0:b(4120,1,\"This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120\",\"This parameter property must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'.\"),This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class:b(4121,1,\"This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121\",\"This member cannot have a JSDoc comment with an '@override' tag because its containing class '{0}' does not extend another class.\"),This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0:b(4122,1,\"This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122\",\"This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class '{0}'.\"),This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1:b(4123,1,\"This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123\",\"This member cannot have a JSDoc comment with an 'override' tag because it is not declared in the base class '{0}'. Did you mean '{1}'?\"),Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next:b(4124,1,\"Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124\",\"Compiler option '{0}' of value '{1}' is unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'.\"),resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next:b(4125,1,\"resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125\",\"'resolution-mode' assertions are unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'.\"),The_current_host_does_not_support_the_0_option:b(5001,1,\"The_current_host_does_not_support_the_0_option_5001\",\"The current host does not support the '{0}' option.\"),Cannot_find_the_common_subdirectory_path_for_the_input_files:b(5009,1,\"Cannot_find_the_common_subdirectory_path_for_the_input_files_5009\",\"Cannot find the common subdirectory path for the input files.\"),File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0:b(5010,1,\"File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010\",\"File specification cannot end in a recursive directory wildcard ('**'): '{0}'.\"),Cannot_read_file_0_Colon_1:b(5012,1,\"Cannot_read_file_0_Colon_1_5012\",\"Cannot read file '{0}': {1}.\"),Failed_to_parse_file_0_Colon_1:b(5014,1,\"Failed_to_parse_file_0_Colon_1_5014\",\"Failed to parse file '{0}': {1}.\"),Unknown_compiler_option_0:b(5023,1,\"Unknown_compiler_option_0_5023\",\"Unknown compiler option '{0}'.\"),Compiler_option_0_requires_a_value_of_type_1:b(5024,1,\"Compiler_option_0_requires_a_value_of_type_1_5024\",\"Compiler option '{0}' requires a value of type {1}.\"),Unknown_compiler_option_0_Did_you_mean_1:b(5025,1,\"Unknown_compiler_option_0_Did_you_mean_1_5025\",\"Unknown compiler option '{0}'. Did you mean '{1}'?\"),Could_not_write_file_0_Colon_1:b(5033,1,\"Could_not_write_file_0_Colon_1_5033\",\"Could not write file '{0}': {1}.\"),Option_project_cannot_be_mixed_with_source_files_on_a_command_line:b(5042,1,\"Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042\",\"Option 'project' cannot be mixed with source files on a command line.\"),Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher:b(5047,1,\"Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047\",\"Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher.\"),Option_0_cannot_be_specified_when_option_target_is_ES3:b(5048,1,\"Option_0_cannot_be_specified_when_option_target_is_ES3_5048\",\"Option '{0}' cannot be specified when option 'target' is 'ES3'.\"),Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided:b(5051,1,\"Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051\",\"Option '{0} can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided.\"),Option_0_cannot_be_specified_without_specifying_option_1:b(5052,1,\"Option_0_cannot_be_specified_without_specifying_option_1_5052\",\"Option '{0}' cannot be specified without specifying option '{1}'.\"),Option_0_cannot_be_specified_with_option_1:b(5053,1,\"Option_0_cannot_be_specified_with_option_1_5053\",\"Option '{0}' cannot be specified with option '{1}'.\"),A_tsconfig_json_file_is_already_defined_at_Colon_0:b(5054,1,\"A_tsconfig_json_file_is_already_defined_at_Colon_0_5054\",\"A 'tsconfig.json' file is already defined at: '{0}'.\"),Cannot_write_file_0_because_it_would_overwrite_input_file:b(5055,1,\"Cannot_write_file_0_because_it_would_overwrite_input_file_5055\",\"Cannot write file '{0}' because it would overwrite input file.\"),Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files:b(5056,1,\"Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056\",\"Cannot write file '{0}' because it would be overwritten by multiple input files.\"),Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0:b(5057,1,\"Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057\",\"Cannot find a tsconfig.json file at the specified directory: '{0}'.\"),The_specified_path_does_not_exist_Colon_0:b(5058,1,\"The_specified_path_does_not_exist_Colon_0_5058\",\"The specified path does not exist: '{0}'.\"),Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier:b(5059,1,\"Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059\",\"Invalid value for '--reactNamespace'. '{0}' is not a valid identifier.\"),Pattern_0_can_have_at_most_one_Asterisk_character:b(5061,1,\"Pattern_0_can_have_at_most_one_Asterisk_character_5061\",\"Pattern '{0}' can have at most one '*' character.\"),Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character:b(5062,1,\"Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062\",\"Substitution '{0}' in pattern '{1}' can have at most one '*' character.\"),Substitutions_for_pattern_0_should_be_an_array:b(5063,1,\"Substitutions_for_pattern_0_should_be_an_array_5063\",\"Substitutions for pattern '{0}' should be an array.\"),Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2:b(5064,1,\"Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064\",\"Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'.\"),File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0:b(5065,1,\"File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065\",\"File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'.\"),Substitutions_for_pattern_0_shouldn_t_be_an_empty_array:b(5066,1,\"Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066\",\"Substitutions for pattern '{0}' shouldn't be an empty array.\"),Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name:b(5067,1,\"Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067\",\"Invalid value for 'jsxFactory'. '{0}' is not a valid identifier or qualified-name.\"),Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig:b(5068,1,\"Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068\",\"Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig.\"),Option_0_cannot_be_specified_without_specifying_option_1_or_option_2:b(5069,1,\"Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069\",\"Option '{0}' cannot be specified without specifying option '{1}' or option '{2}'.\"),Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic:b(5070,1,\"Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070\",\"Option '--resolveJsonModule' cannot be specified when 'moduleResolution' is set to 'classic'.\"),Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_esNext:b(5071,1,\"Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071\",\"Option '--resolveJsonModule' can only be specified when module code generation is 'commonjs', 'amd', 'es2015' or 'esNext'.\"),Unknown_build_option_0:b(5072,1,\"Unknown_build_option_0_5072\",\"Unknown build option '{0}'.\"),Build_option_0_requires_a_value_of_type_1:b(5073,1,\"Build_option_0_requires_a_value_of_type_1_5073\",\"Build option '{0}' requires a value of type {1}.\"),Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified:b(5074,1,\"Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074\",\"Option '--incremental' can only be specified using tsconfig, emitting to single file or when option '--tsBuildInfoFile' is specified.\"),_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2:b(5075,1,\"_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075\",\"'{0}' is assignable to the constraint of type '{1}', but '{1}' could be instantiated with a different subtype of constraint '{2}'.\"),_0_and_1_operations_cannot_be_mixed_without_parentheses:b(5076,1,\"_0_and_1_operations_cannot_be_mixed_without_parentheses_5076\",\"'{0}' and '{1}' operations cannot be mixed without parentheses.\"),Unknown_build_option_0_Did_you_mean_1:b(5077,1,\"Unknown_build_option_0_Did_you_mean_1_5077\",\"Unknown build option '{0}'. Did you mean '{1}'?\"),Unknown_watch_option_0:b(5078,1,\"Unknown_watch_option_0_5078\",\"Unknown watch option '{0}'.\"),Unknown_watch_option_0_Did_you_mean_1:b(5079,1,\"Unknown_watch_option_0_Did_you_mean_1_5079\",\"Unknown watch option '{0}'. Did you mean '{1}'?\"),Watch_option_0_requires_a_value_of_type_1:b(5080,1,\"Watch_option_0_requires_a_value_of_type_1_5080\",\"Watch option '{0}' requires a value of type {1}.\"),Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0:b(5081,1,\"Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081\",\"Cannot find a tsconfig.json file at the current directory: {0}.\"),_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1:b(5082,1,\"_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082\",\"'{0}' could be instantiated with an arbitrary type which could be unrelated to '{1}'.\"),Cannot_read_file_0:b(5083,1,\"Cannot_read_file_0_5083\",\"Cannot read file '{0}'.\"),Tuple_members_must_all_have_names_or_all_not_have_names:b(5084,1,\"Tuple_members_must_all_have_names_or_all_not_have_names_5084\",\"Tuple members must all have names or all not have names.\"),A_tuple_member_cannot_be_both_optional_and_rest:b(5085,1,\"A_tuple_member_cannot_be_both_optional_and_rest_5085\",\"A tuple member cannot be both optional and rest.\"),A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type:b(5086,1,\"A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086\",\"A labeled tuple element is declared as optional with a question mark after the name and before the colon, rather than after the type.\"),A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type:b(5087,1,\"A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087\",\"A labeled tuple element is declared as rest with a '...' before the name, rather than before the type.\"),The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary:b(5088,1,\"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088\",\"The inferred type of '{0}' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary.\"),Option_0_cannot_be_specified_when_option_jsx_is_1:b(5089,1,\"Option_0_cannot_be_specified_when_option_jsx_is_1_5089\",\"Option '{0}' cannot be specified when option 'jsx' is '{1}'.\"),Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash:b(5090,1,\"Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090\",\"Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?\"),Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled:b(5091,1,\"Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091\",\"Option 'preserveConstEnums' cannot be disabled when '{0}' is enabled.\"),The_root_value_of_a_0_file_must_be_an_object:b(5092,1,\"The_root_value_of_a_0_file_must_be_an_object_5092\",\"The root value of a '{0}' file must be an object.\"),Compiler_option_0_may_only_be_used_with_build:b(5093,1,\"Compiler_option_0_may_only_be_used_with_build_5093\",\"Compiler option '--{0}' may only be used with '--build'.\"),Compiler_option_0_may_not_be_used_with_build:b(5094,1,\"Compiler_option_0_may_not_be_used_with_build_5094\",\"Compiler option '--{0}' may not be used with '--build'.\"),Option_0_can_only_be_used_when_module_is_set_to_es2015_or_later:b(5095,1,\"Option_0_can_only_be_used_when_module_is_set_to_es2015_or_later_5095\",\"Option '{0}' can only be used when 'module' is set to 'es2015' or later.\"),Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set:b(5096,1,\"Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096\",\"Option 'allowImportingTsExtensions' can only be used when either 'noEmit' or 'emitDeclarationOnly' is set.\"),An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled:b(5097,1,\"An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097\",\"An import path can only end with a '{0}' extension when 'allowImportingTsExtensions' is enabled.\"),Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler:b(5098,1,\"Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098\",\"Option '{0}' can only be used when 'moduleResolution' is set to 'node16', 'nodenext', or 'bundler'.\"),Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error:b(5101,1,\"Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101\",`Option '{0}' is deprecated and will stop functioning in TypeScript {1}. Specify compilerOption '\"ignoreDeprecations\": \"{2}\"' to silence this error.`),Option_0_has_been_removed_Please_remove_it_from_your_configuration:b(5102,1,\"Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102\",\"Option '{0}' has been removed. Please remove it from your configuration.\"),Invalid_value_for_ignoreDeprecations:b(5103,1,\"Invalid_value_for_ignoreDeprecations_5103\",\"Invalid value for '--ignoreDeprecations'.\"),Option_0_is_redundant_and_cannot_be_specified_with_option_1:b(5104,1,\"Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104\",\"Option '{0}' is redundant and cannot be specified with option '{1}'.\"),Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System:b(5105,1,\"Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105\",\"Option 'verbatimModuleSyntax' cannot be used when 'module' is set to 'UMD', 'AMD', or 'System'.\"),Use_0_instead:b(5106,3,\"Use_0_instead_5106\",\"Use '{0}' instead.\"),Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error:b(5107,1,\"Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107\",`Option '{0}={1}' is deprecated and will stop functioning in TypeScript {2}. Specify compilerOption '\"ignoreDeprecations\": \"{3}\"' to silence this error.`),Option_0_1_has_been_removed_Please_remove_it_from_your_configuration:b(5108,1,\"Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108\",\"Option '{0}={1}' has been removed. Please remove it from your configuration.\"),Generates_a_sourcemap_for_each_corresponding_d_ts_file:b(6e3,3,\"Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000\",\"Generates a sourcemap for each corresponding '.d.ts' file.\"),Concatenate_and_emit_output_to_single_file:b(6001,3,\"Concatenate_and_emit_output_to_single_file_6001\",\"Concatenate and emit output to single file.\"),Generates_corresponding_d_ts_file:b(6002,3,\"Generates_corresponding_d_ts_file_6002\",\"Generates corresponding '.d.ts' file.\"),Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations:b(6004,3,\"Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004\",\"Specify the location where debugger should locate TypeScript files instead of source locations.\"),Watch_input_files:b(6005,3,\"Watch_input_files_6005\",\"Watch input files.\"),Redirect_output_structure_to_the_directory:b(6006,3,\"Redirect_output_structure_to_the_directory_6006\",\"Redirect output structure to the directory.\"),Do_not_erase_const_enum_declarations_in_generated_code:b(6007,3,\"Do_not_erase_const_enum_declarations_in_generated_code_6007\",\"Do not erase const enum declarations in generated code.\"),Do_not_emit_outputs_if_any_errors_were_reported:b(6008,3,\"Do_not_emit_outputs_if_any_errors_were_reported_6008\",\"Do not emit outputs if any errors were reported.\"),Do_not_emit_comments_to_output:b(6009,3,\"Do_not_emit_comments_to_output_6009\",\"Do not emit comments to output.\"),Do_not_emit_outputs:b(6010,3,\"Do_not_emit_outputs_6010\",\"Do not emit outputs.\"),Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking:b(6011,3,\"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011\",\"Allow default imports from modules with no default export. This does not affect code emit, just typechecking.\"),Skip_type_checking_of_declaration_files:b(6012,3,\"Skip_type_checking_of_declaration_files_6012\",\"Skip type checking of declaration files.\"),Do_not_resolve_the_real_path_of_symlinks:b(6013,3,\"Do_not_resolve_the_real_path_of_symlinks_6013\",\"Do not resolve the real path of symlinks.\"),Only_emit_d_ts_declaration_files:b(6014,3,\"Only_emit_d_ts_declaration_files_6014\",\"Only emit '.d.ts' declaration files.\"),Specify_ECMAScript_target_version:b(6015,3,\"Specify_ECMAScript_target_version_6015\",\"Specify ECMAScript target version.\"),Specify_module_code_generation:b(6016,3,\"Specify_module_code_generation_6016\",\"Specify module code generation.\"),Print_this_message:b(6017,3,\"Print_this_message_6017\",\"Print this message.\"),Print_the_compiler_s_version:b(6019,3,\"Print_the_compiler_s_version_6019\",\"Print the compiler's version.\"),Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json:b(6020,3,\"Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020\",\"Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'.\"),Syntax_Colon_0:b(6023,3,\"Syntax_Colon_0_6023\",\"Syntax: {0}\"),options:b(6024,3,\"options_6024\",\"options\"),file:b(6025,3,\"file_6025\",\"file\"),Examples_Colon_0:b(6026,3,\"Examples_Colon_0_6026\",\"Examples: {0}\"),Options_Colon:b(6027,3,\"Options_Colon_6027\",\"Options:\"),Version_0:b(6029,3,\"Version_0_6029\",\"Version {0}\"),Insert_command_line_options_and_files_from_a_file:b(6030,3,\"Insert_command_line_options_and_files_from_a_file_6030\",\"Insert command line options and files from a file.\"),Starting_compilation_in_watch_mode:b(6031,3,\"Starting_compilation_in_watch_mode_6031\",\"Starting compilation in watch mode...\"),File_change_detected_Starting_incremental_compilation:b(6032,3,\"File_change_detected_Starting_incremental_compilation_6032\",\"File change detected. Starting incremental compilation...\"),KIND:b(6034,3,\"KIND_6034\",\"KIND\"),FILE:b(6035,3,\"FILE_6035\",\"FILE\"),VERSION:b(6036,3,\"VERSION_6036\",\"VERSION\"),LOCATION:b(6037,3,\"LOCATION_6037\",\"LOCATION\"),DIRECTORY:b(6038,3,\"DIRECTORY_6038\",\"DIRECTORY\"),STRATEGY:b(6039,3,\"STRATEGY_6039\",\"STRATEGY\"),FILE_OR_DIRECTORY:b(6040,3,\"FILE_OR_DIRECTORY_6040\",\"FILE OR DIRECTORY\"),Errors_Files:b(6041,3,\"Errors_Files_6041\",\"Errors  Files\"),Generates_corresponding_map_file:b(6043,3,\"Generates_corresponding_map_file_6043\",\"Generates corresponding '.map' file.\"),Compiler_option_0_expects_an_argument:b(6044,1,\"Compiler_option_0_expects_an_argument_6044\",\"Compiler option '{0}' expects an argument.\"),Unterminated_quoted_string_in_response_file_0:b(6045,1,\"Unterminated_quoted_string_in_response_file_0_6045\",\"Unterminated quoted string in response file '{0}'.\"),Argument_for_0_option_must_be_Colon_1:b(6046,1,\"Argument_for_0_option_must_be_Colon_1_6046\",\"Argument for '{0}' option must be: {1}.\"),Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1:b(6048,1,\"Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048\",\"Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'.\"),Unable_to_open_file_0:b(6050,1,\"Unable_to_open_file_0_6050\",\"Unable to open file '{0}'.\"),Corrupted_locale_file_0:b(6051,1,\"Corrupted_locale_file_0_6051\",\"Corrupted locale file {0}.\"),Raise_error_on_expressions_and_declarations_with_an_implied_any_type:b(6052,3,\"Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052\",\"Raise error on expressions and declarations with an implied 'any' type.\"),File_0_not_found:b(6053,1,\"File_0_not_found_6053\",\"File '{0}' not found.\"),File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1:b(6054,1,\"File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054\",\"File '{0}' has an unsupported extension. The only supported extensions are {1}.\"),Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures:b(6055,3,\"Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055\",\"Suppress noImplicitAny errors for indexing objects lacking index signatures.\"),Do_not_emit_declarations_for_code_that_has_an_internal_annotation:b(6056,3,\"Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056\",\"Do not emit declarations for code that has an '@internal' annotation.\"),Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir:b(6058,3,\"Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058\",\"Specify the root directory of input files. Use to control the output directory structure with --outDir.\"),File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files:b(6059,1,\"File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059\",\"File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files.\"),Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix:b(6060,3,\"Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060\",\"Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix).\"),NEWLINE:b(6061,3,\"NEWLINE_6061\",\"NEWLINE\"),Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line:b(6064,1,\"Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064\",\"Option '{0}' can only be specified in 'tsconfig.json' file or set to 'null' on command line.\"),Enables_experimental_support_for_ES7_decorators:b(6065,3,\"Enables_experimental_support_for_ES7_decorators_6065\",\"Enables experimental support for ES7 decorators.\"),Enables_experimental_support_for_emitting_type_metadata_for_decorators:b(6066,3,\"Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066\",\"Enables experimental support for emitting type metadata for decorators.\"),Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file:b(6070,3,\"Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070\",\"Initializes a TypeScript project and creates a tsconfig.json file.\"),Successfully_created_a_tsconfig_json_file:b(6071,3,\"Successfully_created_a_tsconfig_json_file_6071\",\"Successfully created a tsconfig.json file.\"),Suppress_excess_property_checks_for_object_literals:b(6072,3,\"Suppress_excess_property_checks_for_object_literals_6072\",\"Suppress excess property checks for object literals.\"),Stylize_errors_and_messages_using_color_and_context_experimental:b(6073,3,\"Stylize_errors_and_messages_using_color_and_context_experimental_6073\",\"Stylize errors and messages using color and context (experimental).\"),Do_not_report_errors_on_unused_labels:b(6074,3,\"Do_not_report_errors_on_unused_labels_6074\",\"Do not report errors on unused labels.\"),Report_error_when_not_all_code_paths_in_function_return_a_value:b(6075,3,\"Report_error_when_not_all_code_paths_in_function_return_a_value_6075\",\"Report error when not all code paths in function return a value.\"),Report_errors_for_fallthrough_cases_in_switch_statement:b(6076,3,\"Report_errors_for_fallthrough_cases_in_switch_statement_6076\",\"Report errors for fallthrough cases in switch statement.\"),Do_not_report_errors_on_unreachable_code:b(6077,3,\"Do_not_report_errors_on_unreachable_code_6077\",\"Do not report errors on unreachable code.\"),Disallow_inconsistently_cased_references_to_the_same_file:b(6078,3,\"Disallow_inconsistently_cased_references_to_the_same_file_6078\",\"Disallow inconsistently-cased references to the same file.\"),Specify_library_files_to_be_included_in_the_compilation:b(6079,3,\"Specify_library_files_to_be_included_in_the_compilation_6079\",\"Specify library files to be included in the compilation.\"),Specify_JSX_code_generation:b(6080,3,\"Specify_JSX_code_generation_6080\",\"Specify JSX code generation.\"),File_0_has_an_unsupported_extension_so_skipping_it:b(6081,3,\"File_0_has_an_unsupported_extension_so_skipping_it_6081\",\"File '{0}' has an unsupported extension, so skipping it.\"),Only_amd_and_system_modules_are_supported_alongside_0:b(6082,1,\"Only_amd_and_system_modules_are_supported_alongside_0_6082\",\"Only 'amd' and 'system' modules are supported alongside --{0}.\"),Base_directory_to_resolve_non_absolute_module_names:b(6083,3,\"Base_directory_to_resolve_non_absolute_module_names_6083\",\"Base directory to resolve non-absolute module names.\"),Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit:b(6084,3,\"Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084\",\"[Deprecated] Use '--jsxFactory' instead. Specify the object invoked for createElement when targeting 'react' JSX emit\"),Enable_tracing_of_the_name_resolution_process:b(6085,3,\"Enable_tracing_of_the_name_resolution_process_6085\",\"Enable tracing of the name resolution process.\"),Resolving_module_0_from_1:b(6086,3,\"Resolving_module_0_from_1_6086\",\"======== Resolving module '{0}' from '{1}'. ========\"),Explicitly_specified_module_resolution_kind_Colon_0:b(6087,3,\"Explicitly_specified_module_resolution_kind_Colon_0_6087\",\"Explicitly specified module resolution kind: '{0}'.\"),Module_resolution_kind_is_not_specified_using_0:b(6088,3,\"Module_resolution_kind_is_not_specified_using_0_6088\",\"Module resolution kind is not specified, using '{0}'.\"),Module_name_0_was_successfully_resolved_to_1:b(6089,3,\"Module_name_0_was_successfully_resolved_to_1_6089\",\"======== Module name '{0}' was successfully resolved to '{1}'. ========\"),Module_name_0_was_not_resolved:b(6090,3,\"Module_name_0_was_not_resolved_6090\",\"======== Module name '{0}' was not resolved. ========\"),paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0:b(6091,3,\"paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091\",\"'paths' option is specified, looking for a pattern to match module name '{0}'.\"),Module_name_0_matched_pattern_1:b(6092,3,\"Module_name_0_matched_pattern_1_6092\",\"Module name '{0}', matched pattern '{1}'.\"),Trying_substitution_0_candidate_module_location_Colon_1:b(6093,3,\"Trying_substitution_0_candidate_module_location_Colon_1_6093\",\"Trying substitution '{0}', candidate module location: '{1}'.\"),Resolving_module_name_0_relative_to_base_url_1_2:b(6094,3,\"Resolving_module_name_0_relative_to_base_url_1_2_6094\",\"Resolving module name '{0}' relative to base url '{1}' - '{2}'.\"),Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1:b(6095,3,\"Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095\",\"Loading module as file / folder, candidate module location '{0}', target file types: {1}.\"),File_0_does_not_exist:b(6096,3,\"File_0_does_not_exist_6096\",\"File '{0}' does not exist.\"),File_0_exists_use_it_as_a_name_resolution_result:b(6097,3,\"File_0_exists_use_it_as_a_name_resolution_result_6097\",\"File '{0}' exists - use it as a name resolution result.\"),Loading_module_0_from_node_modules_folder_target_file_types_Colon_1:b(6098,3,\"Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098\",\"Loading module '{0}' from 'node_modules' folder, target file types: {1}.\"),Found_package_json_at_0:b(6099,3,\"Found_package_json_at_0_6099\",\"Found 'package.json' at '{0}'.\"),package_json_does_not_have_a_0_field:b(6100,3,\"package_json_does_not_have_a_0_field_6100\",\"'package.json' does not have a '{0}' field.\"),package_json_has_0_field_1_that_references_2:b(6101,3,\"package_json_has_0_field_1_that_references_2_6101\",\"'package.json' has '{0}' field '{1}' that references '{2}'.\"),Allow_javascript_files_to_be_compiled:b(6102,3,\"Allow_javascript_files_to_be_compiled_6102\",\"Allow javascript files to be compiled.\"),Checking_if_0_is_the_longest_matching_prefix_for_1_2:b(6104,3,\"Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104\",\"Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'.\"),Expected_type_of_0_field_in_package_json_to_be_1_got_2:b(6105,3,\"Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105\",\"Expected type of '{0}' field in 'package.json' to be '{1}', got '{2}'.\"),baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1:b(6106,3,\"baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106\",\"'baseUrl' option is set to '{0}', using this value to resolve non-relative module name '{1}'.\"),rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0:b(6107,3,\"rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107\",\"'rootDirs' option is set, using it to resolve relative module name '{0}'.\"),Longest_matching_prefix_for_0_is_1:b(6108,3,\"Longest_matching_prefix_for_0_is_1_6108\",\"Longest matching prefix for '{0}' is '{1}'.\"),Loading_0_from_the_root_dir_1_candidate_location_2:b(6109,3,\"Loading_0_from_the_root_dir_1_candidate_location_2_6109\",\"Loading '{0}' from the root dir '{1}', candidate location '{2}'.\"),Trying_other_entries_in_rootDirs:b(6110,3,\"Trying_other_entries_in_rootDirs_6110\",\"Trying other entries in 'rootDirs'.\"),Module_resolution_using_rootDirs_has_failed:b(6111,3,\"Module_resolution_using_rootDirs_has_failed_6111\",\"Module resolution using 'rootDirs' has failed.\"),Do_not_emit_use_strict_directives_in_module_output:b(6112,3,\"Do_not_emit_use_strict_directives_in_module_output_6112\",\"Do not emit 'use strict' directives in module output.\"),Enable_strict_null_checks:b(6113,3,\"Enable_strict_null_checks_6113\",\"Enable strict null checks.\"),Unknown_option_excludes_Did_you_mean_exclude:b(6114,1,\"Unknown_option_excludes_Did_you_mean_exclude_6114\",\"Unknown option 'excludes'. Did you mean 'exclude'?\"),Raise_error_on_this_expressions_with_an_implied_any_type:b(6115,3,\"Raise_error_on_this_expressions_with_an_implied_any_type_6115\",\"Raise error on 'this' expressions with an implied 'any' type.\"),Resolving_type_reference_directive_0_containing_file_1_root_directory_2:b(6116,3,\"Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116\",\"======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========\"),Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2:b(6119,3,\"Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119\",\"======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========\"),Type_reference_directive_0_was_not_resolved:b(6120,3,\"Type_reference_directive_0_was_not_resolved_6120\",\"======== Type reference directive '{0}' was not resolved. ========\"),Resolving_with_primary_search_path_0:b(6121,3,\"Resolving_with_primary_search_path_0_6121\",\"Resolving with primary search path '{0}'.\"),Root_directory_cannot_be_determined_skipping_primary_search_paths:b(6122,3,\"Root_directory_cannot_be_determined_skipping_primary_search_paths_6122\",\"Root directory cannot be determined, skipping primary search paths.\"),Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set:b(6123,3,\"Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123\",\"======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========\"),Type_declaration_files_to_be_included_in_compilation:b(6124,3,\"Type_declaration_files_to_be_included_in_compilation_6124\",\"Type declaration files to be included in compilation.\"),Looking_up_in_node_modules_folder_initial_location_0:b(6125,3,\"Looking_up_in_node_modules_folder_initial_location_0_6125\",\"Looking up in 'node_modules' folder, initial location '{0}'.\"),Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder:b(6126,3,\"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126\",\"Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder.\"),Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1:b(6127,3,\"Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127\",\"======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========\"),Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set:b(6128,3,\"Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128\",\"======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========\"),Resolving_real_path_for_0_result_1:b(6130,3,\"Resolving_real_path_for_0_result_1_6130\",\"Resolving real path for '{0}', result '{1}'.\"),Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system:b(6131,1,\"Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131\",\"Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'.\"),File_name_0_has_a_1_extension_stripping_it:b(6132,3,\"File_name_0_has_a_1_extension_stripping_it_6132\",\"File name '{0}' has a '{1}' extension - stripping it.\"),_0_is_declared_but_its_value_is_never_read:b(6133,1,\"_0_is_declared_but_its_value_is_never_read_6133\",\"'{0}' is declared but its value is never read.\",!0),Report_errors_on_unused_locals:b(6134,3,\"Report_errors_on_unused_locals_6134\",\"Report errors on unused locals.\"),Report_errors_on_unused_parameters:b(6135,3,\"Report_errors_on_unused_parameters_6135\",\"Report errors on unused parameters.\"),The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files:b(6136,3,\"The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136\",\"The maximum dependency depth to search under node_modules and load JavaScript files.\"),Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1:b(6137,1,\"Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137\",\"Cannot import type declaration files. Consider importing '{0}' instead of '{1}'.\"),Property_0_is_declared_but_its_value_is_never_read:b(6138,1,\"Property_0_is_declared_but_its_value_is_never_read_6138\",\"Property '{0}' is declared but its value is never read.\",!0),Import_emit_helpers_from_tslib:b(6139,3,\"Import_emit_helpers_from_tslib_6139\",\"Import emit helpers from 'tslib'.\"),Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2:b(6140,1,\"Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140\",\"Auto discovery for typings is enabled in project '{0}'. Running extra resolution pass for module '{1}' using cache location '{2}'.\"),Parse_in_strict_mode_and_emit_use_strict_for_each_source_file:b(6141,3,\"Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141\",'Parse in strict mode and emit \"use strict\" for each source file.'),Module_0_was_resolved_to_1_but_jsx_is_not_set:b(6142,1,\"Module_0_was_resolved_to_1_but_jsx_is_not_set_6142\",\"Module '{0}' was resolved to '{1}', but '--jsx' is not set.\"),Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1:b(6144,3,\"Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144\",\"Module '{0}' was resolved as locally declared ambient module in file '{1}'.\"),Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified:b(6145,3,\"Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145\",\"Module '{0}' was resolved as ambient module declared in '{1}' since this file was not modified.\"),Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h:b(6146,3,\"Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146\",\"Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'.\"),Resolution_for_module_0_was_found_in_cache_from_location_1:b(6147,3,\"Resolution_for_module_0_was_found_in_cache_from_location_1_6147\",\"Resolution for module '{0}' was found in cache from location '{1}'.\"),Directory_0_does_not_exist_skipping_all_lookups_in_it:b(6148,3,\"Directory_0_does_not_exist_skipping_all_lookups_in_it_6148\",\"Directory '{0}' does not exist, skipping all lookups in it.\"),Show_diagnostic_information:b(6149,3,\"Show_diagnostic_information_6149\",\"Show diagnostic information.\"),Show_verbose_diagnostic_information:b(6150,3,\"Show_verbose_diagnostic_information_6150\",\"Show verbose diagnostic information.\"),Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file:b(6151,3,\"Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151\",\"Emit a single file with source maps instead of having a separate file.\"),Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set:b(6152,3,\"Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152\",\"Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set.\"),Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule:b(6153,3,\"Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153\",\"Transpile each file as a separate module (similar to 'ts.transpileModule').\"),Print_names_of_generated_files_part_of_the_compilation:b(6154,3,\"Print_names_of_generated_files_part_of_the_compilation_6154\",\"Print names of generated files part of the compilation.\"),Print_names_of_files_part_of_the_compilation:b(6155,3,\"Print_names_of_files_part_of_the_compilation_6155\",\"Print names of files part of the compilation.\"),The_locale_used_when_displaying_messages_to_the_user_e_g_en_us:b(6156,3,\"The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156\",\"The locale used when displaying messages to the user (e.g. 'en-us')\"),Do_not_generate_custom_helper_functions_like_extends_in_compiled_output:b(6157,3,\"Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157\",\"Do not generate custom helper functions like '__extends' in compiled output.\"),Do_not_include_the_default_library_file_lib_d_ts:b(6158,3,\"Do_not_include_the_default_library_file_lib_d_ts_6158\",\"Do not include the default library file (lib.d.ts).\"),Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files:b(6159,3,\"Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159\",\"Do not add triple-slash references or imported modules to the list of compiled files.\"),Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files:b(6160,3,\"Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160\",\"[Deprecated] Use '--skipLibCheck' instead. Skip type checking of default library declaration files.\"),List_of_folders_to_include_type_definitions_from:b(6161,3,\"List_of_folders_to_include_type_definitions_from_6161\",\"List of folders to include type definitions from.\"),Disable_size_limitations_on_JavaScript_projects:b(6162,3,\"Disable_size_limitations_on_JavaScript_projects_6162\",\"Disable size limitations on JavaScript projects.\"),The_character_set_of_the_input_files:b(6163,3,\"The_character_set_of_the_input_files_6163\",\"The character set of the input files.\"),Do_not_truncate_error_messages:b(6165,3,\"Do_not_truncate_error_messages_6165\",\"Do not truncate error messages.\"),Output_directory_for_generated_declaration_files:b(6166,3,\"Output_directory_for_generated_declaration_files_6166\",\"Output directory for generated declaration files.\"),A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl:b(6167,3,\"A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167\",\"A series of entries which re-map imports to lookup locations relative to the 'baseUrl'.\"),List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime:b(6168,3,\"List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168\",\"List of root folders whose combined content represents the structure of the project at runtime.\"),Show_all_compiler_options:b(6169,3,\"Show_all_compiler_options_6169\",\"Show all compiler options.\"),Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file:b(6170,3,\"Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170\",\"[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file\"),Command_line_Options:b(6171,3,\"Command_line_Options_6171\",\"Command-line Options\"),Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3:b(6179,3,\"Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179\",\"Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'.\"),Enable_all_strict_type_checking_options:b(6180,3,\"Enable_all_strict_type_checking_options_6180\",\"Enable all strict type-checking options.\"),Scoped_package_detected_looking_in_0:b(6182,3,\"Scoped_package_detected_looking_in_0_6182\",\"Scoped package detected, looking in '{0}'\"),Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2:b(6183,3,\"Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183\",\"Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'.\"),Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:b(6184,3,\"Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184\",\"Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'.\"),Enable_strict_checking_of_function_types:b(6186,3,\"Enable_strict_checking_of_function_types_6186\",\"Enable strict checking of function types.\"),Enable_strict_checking_of_property_initialization_in_classes:b(6187,3,\"Enable_strict_checking_of_property_initialization_in_classes_6187\",\"Enable strict checking of property initialization in classes.\"),Numeric_separators_are_not_allowed_here:b(6188,1,\"Numeric_separators_are_not_allowed_here_6188\",\"Numeric separators are not allowed here.\"),Multiple_consecutive_numeric_separators_are_not_permitted:b(6189,1,\"Multiple_consecutive_numeric_separators_are_not_permitted_6189\",\"Multiple consecutive numeric separators are not permitted.\"),Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen:b(6191,3,\"Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191\",\"Whether to keep outdated console output in watch mode instead of clearing the screen.\"),All_imports_in_import_declaration_are_unused:b(6192,1,\"All_imports_in_import_declaration_are_unused_6192\",\"All imports in import declaration are unused.\",!0),Found_1_error_Watching_for_file_changes:b(6193,3,\"Found_1_error_Watching_for_file_changes_6193\",\"Found 1 error. Watching for file changes.\"),Found_0_errors_Watching_for_file_changes:b(6194,3,\"Found_0_errors_Watching_for_file_changes_6194\",\"Found {0} errors. Watching for file changes.\"),Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols:b(6195,3,\"Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195\",\"Resolve 'keyof' to string valued property names only (no numbers or symbols).\"),_0_is_declared_but_never_used:b(6196,1,\"_0_is_declared_but_never_used_6196\",\"'{0}' is declared but never used.\",!0),Include_modules_imported_with_json_extension:b(6197,3,\"Include_modules_imported_with_json_extension_6197\",\"Include modules imported with '.json' extension\"),All_destructured_elements_are_unused:b(6198,1,\"All_destructured_elements_are_unused_6198\",\"All destructured elements are unused.\",!0),All_variables_are_unused:b(6199,1,\"All_variables_are_unused_6199\",\"All variables are unused.\",!0),Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0:b(6200,1,\"Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200\",\"Definitions of the following identifiers conflict with those in another file: {0}\"),Conflicts_are_in_this_file:b(6201,3,\"Conflicts_are_in_this_file_6201\",\"Conflicts are in this file.\"),Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0:b(6202,1,\"Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202\",\"Project references may not form a circular graph. Cycle detected: {0}\"),_0_was_also_declared_here:b(6203,3,\"_0_was_also_declared_here_6203\",\"'{0}' was also declared here.\"),and_here:b(6204,3,\"and_here_6204\",\"and here.\"),All_type_parameters_are_unused:b(6205,1,\"All_type_parameters_are_unused_6205\",\"All type parameters are unused.\"),package_json_has_a_typesVersions_field_with_version_specific_path_mappings:b(6206,3,\"package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206\",\"'package.json' has a 'typesVersions' field with version-specific path mappings.\"),package_json_does_not_have_a_typesVersions_entry_that_matches_version_0:b(6207,3,\"package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207\",\"'package.json' does not have a 'typesVersions' entry that matches version '{0}'.\"),package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2:b(6208,3,\"package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208\",\"'package.json' has a 'typesVersions' entry '{0}' that matches compiler version '{1}', looking for a pattern to match module name '{2}'.\"),package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range:b(6209,3,\"package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209\",\"'package.json' has a 'typesVersions' entry '{0}' that is not a valid semver range.\"),An_argument_for_0_was_not_provided:b(6210,3,\"An_argument_for_0_was_not_provided_6210\",\"An argument for '{0}' was not provided.\"),An_argument_matching_this_binding_pattern_was_not_provided:b(6211,3,\"An_argument_matching_this_binding_pattern_was_not_provided_6211\",\"An argument matching this binding pattern was not provided.\"),Did_you_mean_to_call_this_expression:b(6212,3,\"Did_you_mean_to_call_this_expression_6212\",\"Did you mean to call this expression?\"),Did_you_mean_to_use_new_with_this_expression:b(6213,3,\"Did_you_mean_to_use_new_with_this_expression_6213\",\"Did you mean to use 'new' with this expression?\"),Enable_strict_bind_call_and_apply_methods_on_functions:b(6214,3,\"Enable_strict_bind_call_and_apply_methods_on_functions_6214\",\"Enable strict 'bind', 'call', and 'apply' methods on functions.\"),Using_compiler_options_of_project_reference_redirect_0:b(6215,3,\"Using_compiler_options_of_project_reference_redirect_0_6215\",\"Using compiler options of project reference redirect '{0}'.\"),Found_1_error:b(6216,3,\"Found_1_error_6216\",\"Found 1 error.\"),Found_0_errors:b(6217,3,\"Found_0_errors_6217\",\"Found {0} errors.\"),Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2:b(6218,3,\"Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218\",\"======== Module name '{0}' was successfully resolved to '{1}' with Package ID '{2}'. ========\"),Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3:b(6219,3,\"Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219\",\"======== Type reference directive '{0}' was successfully resolved to '{1}' with Package ID '{2}', primary: {3}. ========\"),package_json_had_a_falsy_0_field:b(6220,3,\"package_json_had_a_falsy_0_field_6220\",\"'package.json' had a falsy '{0}' field.\"),Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects:b(6221,3,\"Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221\",\"Disable use of source files instead of declaration files from referenced projects.\"),Emit_class_fields_with_Define_instead_of_Set:b(6222,3,\"Emit_class_fields_with_Define_instead_of_Set_6222\",\"Emit class fields with Define instead of Set.\"),Generates_a_CPU_profile:b(6223,3,\"Generates_a_CPU_profile_6223\",\"Generates a CPU profile.\"),Disable_solution_searching_for_this_project:b(6224,3,\"Disable_solution_searching_for_this_project_6224\",\"Disable solution searching for this project.\"),Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory:b(6225,3,\"Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225\",\"Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.\"),Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling:b(6226,3,\"Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226\",\"Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.\"),Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize:b(6227,3,\"Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227\",\"Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.\"),Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3:b(6229,1,\"Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229\",\"Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'.\"),Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line:b(6230,1,\"Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230\",\"Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line.\"),Could_not_resolve_the_path_0_with_the_extensions_Colon_1:b(6231,1,\"Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231\",\"Could not resolve the path '{0}' with the extensions: {1}.\"),Declaration_augments_declaration_in_another_file_This_cannot_be_serialized:b(6232,1,\"Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232\",\"Declaration augments declaration in another file. This cannot be serialized.\"),This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file:b(6233,1,\"This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233\",\"This is the declaration being augmented. Consider moving the augmenting declaration into the same file.\"),This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without:b(6234,1,\"This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234\",\"This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'?\"),Disable_loading_referenced_projects:b(6235,3,\"Disable_loading_referenced_projects_6235\",\"Disable loading referenced projects.\"),Arguments_for_the_rest_parameter_0_were_not_provided:b(6236,1,\"Arguments_for_the_rest_parameter_0_were_not_provided_6236\",\"Arguments for the rest parameter '{0}' were not provided.\"),Generates_an_event_trace_and_a_list_of_types:b(6237,3,\"Generates_an_event_trace_and_a_list_of_types_6237\",\"Generates an event trace and a list of types.\"),Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react:b(6238,1,\"Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238\",\"Specify the module specifier to be used to import the 'jsx' and 'jsxs' factory functions from. eg, react\"),File_0_exists_according_to_earlier_cached_lookups:b(6239,3,\"File_0_exists_according_to_earlier_cached_lookups_6239\",\"File '{0}' exists according to earlier cached lookups.\"),File_0_does_not_exist_according_to_earlier_cached_lookups:b(6240,3,\"File_0_does_not_exist_according_to_earlier_cached_lookups_6240\",\"File '{0}' does not exist according to earlier cached lookups.\"),Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1:b(6241,3,\"Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241\",\"Resolution for type reference directive '{0}' was found in cache from location '{1}'.\"),Resolving_type_reference_directive_0_containing_file_1:b(6242,3,\"Resolving_type_reference_directive_0_containing_file_1_6242\",\"======== Resolving type reference directive '{0}', containing file '{1}'. ========\"),Interpret_optional_property_types_as_written_rather_than_adding_undefined:b(6243,3,\"Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243\",\"Interpret optional property types as written, rather than adding 'undefined'.\"),Modules:b(6244,3,\"Modules_6244\",\"Modules\"),File_Management:b(6245,3,\"File_Management_6245\",\"File Management\"),Emit:b(6246,3,\"Emit_6246\",\"Emit\"),JavaScript_Support:b(6247,3,\"JavaScript_Support_6247\",\"JavaScript Support\"),Type_Checking:b(6248,3,\"Type_Checking_6248\",\"Type Checking\"),Editor_Support:b(6249,3,\"Editor_Support_6249\",\"Editor Support\"),Watch_and_Build_Modes:b(6250,3,\"Watch_and_Build_Modes_6250\",\"Watch and Build Modes\"),Compiler_Diagnostics:b(6251,3,\"Compiler_Diagnostics_6251\",\"Compiler Diagnostics\"),Interop_Constraints:b(6252,3,\"Interop_Constraints_6252\",\"Interop Constraints\"),Backwards_Compatibility:b(6253,3,\"Backwards_Compatibility_6253\",\"Backwards Compatibility\"),Language_and_Environment:b(6254,3,\"Language_and_Environment_6254\",\"Language and Environment\"),Projects:b(6255,3,\"Projects_6255\",\"Projects\"),Output_Formatting:b(6256,3,\"Output_Formatting_6256\",\"Output Formatting\"),Completeness:b(6257,3,\"Completeness_6257\",\"Completeness\"),_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file:b(6258,1,\"_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258\",\"'{0}' should be set inside the 'compilerOptions' object of the config json file\"),Found_1_error_in_1:b(6259,3,\"Found_1_error_in_1_6259\",\"Found 1 error in {1}\"),Found_0_errors_in_the_same_file_starting_at_Colon_1:b(6260,3,\"Found_0_errors_in_the_same_file_starting_at_Colon_1_6260\",\"Found {0} errors in the same file, starting at: {1}\"),Found_0_errors_in_1_files:b(6261,3,\"Found_0_errors_in_1_files_6261\",\"Found {0} errors in {1} files.\"),File_name_0_has_a_1_extension_looking_up_2_instead:b(6262,3,\"File_name_0_has_a_1_extension_looking_up_2_instead_6262\",\"File name '{0}' has a '{1}' extension - looking up '{2}' instead.\"),Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set:b(6263,1,\"Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263\",\"Module '{0}' was resolved to '{1}', but '--allowArbitraryExtensions' is not set.\"),Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present:b(6264,3,\"Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264\",\"Enable importing files with any extension, provided a declaration file is present.\"),Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve:b(6270,3,\"Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270\",\"Directory '{0}' has no containing package.json scope. Imports will not resolve.\"),Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1:b(6271,3,\"Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271\",\"Import specifier '{0}' does not exist in package.json scope at path '{1}'.\"),Invalid_import_specifier_0_has_no_possible_resolutions:b(6272,3,\"Invalid_import_specifier_0_has_no_possible_resolutions_6272\",\"Invalid import specifier '{0}' has no possible resolutions.\"),package_json_scope_0_has_no_imports_defined:b(6273,3,\"package_json_scope_0_has_no_imports_defined_6273\",\"package.json scope '{0}' has no imports defined.\"),package_json_scope_0_explicitly_maps_specifier_1_to_null:b(6274,3,\"package_json_scope_0_explicitly_maps_specifier_1_to_null_6274\",\"package.json scope '{0}' explicitly maps specifier '{1}' to null.\"),package_json_scope_0_has_invalid_type_for_target_of_specifier_1:b(6275,3,\"package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275\",\"package.json scope '{0}' has invalid type for target of specifier '{1}'\"),Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1:b(6276,3,\"Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276\",\"Export specifier '{0}' does not exist in package.json scope at path '{1}'.\"),Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_if_npm_library_needs_configuration_update:b(6277,3,\"Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277\",\"Resolution of non-relative name failed; trying with modern Node resolution features disabled to see if npm library needs configuration update.\"),There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The_1_library_may_need_to_update_its_package_json_or_typings:b(6278,3,\"There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278\",`There are types at '{0}', but this result could not be resolved when respecting package.json \"exports\". The '{1}' library may need to update its package.json or typings.`),Enable_project_compilation:b(6302,3,\"Enable_project_compilation_6302\",\"Enable project compilation\"),Composite_projects_may_not_disable_declaration_emit:b(6304,1,\"Composite_projects_may_not_disable_declaration_emit_6304\",\"Composite projects may not disable declaration emit.\"),Output_file_0_has_not_been_built_from_source_file_1:b(6305,1,\"Output_file_0_has_not_been_built_from_source_file_1_6305\",\"Output file '{0}' has not been built from source file '{1}'.\"),Referenced_project_0_must_have_setting_composite_Colon_true:b(6306,1,\"Referenced_project_0_must_have_setting_composite_Colon_true_6306\",`Referenced project '{0}' must have setting \"composite\": true.`),File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern:b(6307,1,\"File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307\",\"File '{0}' is not listed within the file list of project '{1}'. Projects must list all files or use an 'include' pattern.\"),Cannot_prepend_project_0_because_it_does_not_have_outFile_set:b(6308,1,\"Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308\",\"Cannot prepend project '{0}' because it does not have 'outFile' set\"),Output_file_0_from_project_1_does_not_exist:b(6309,1,\"Output_file_0_from_project_1_does_not_exist_6309\",\"Output file '{0}' from project '{1}' does not exist\"),Referenced_project_0_may_not_disable_emit:b(6310,1,\"Referenced_project_0_may_not_disable_emit_6310\",\"Referenced project '{0}' may not disable emit.\"),Project_0_is_out_of_date_because_output_1_is_older_than_input_2:b(6350,3,\"Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350\",\"Project '{0}' is out of date because output '{1}' is older than input '{2}'\"),Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2:b(6351,3,\"Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351\",\"Project '{0}' is up to date because newest input '{1}' is older than output '{2}'\"),Project_0_is_out_of_date_because_output_file_1_does_not_exist:b(6352,3,\"Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352\",\"Project '{0}' is out of date because output file '{1}' does not exist\"),Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date:b(6353,3,\"Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353\",\"Project '{0}' is out of date because its dependency '{1}' is out of date\"),Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies:b(6354,3,\"Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354\",\"Project '{0}' is up to date with .d.ts files from its dependencies\"),Projects_in_this_build_Colon_0:b(6355,3,\"Projects_in_this_build_Colon_0_6355\",\"Projects in this build: {0}\"),A_non_dry_build_would_delete_the_following_files_Colon_0:b(6356,3,\"A_non_dry_build_would_delete_the_following_files_Colon_0_6356\",\"A non-dry build would delete the following files: {0}\"),A_non_dry_build_would_build_project_0:b(6357,3,\"A_non_dry_build_would_build_project_0_6357\",\"A non-dry build would build project '{0}'\"),Building_project_0:b(6358,3,\"Building_project_0_6358\",\"Building project '{0}'...\"),Updating_output_timestamps_of_project_0:b(6359,3,\"Updating_output_timestamps_of_project_0_6359\",\"Updating output timestamps of project '{0}'...\"),Project_0_is_up_to_date:b(6361,3,\"Project_0_is_up_to_date_6361\",\"Project '{0}' is up to date\"),Skipping_build_of_project_0_because_its_dependency_1_has_errors:b(6362,3,\"Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362\",\"Skipping build of project '{0}' because its dependency '{1}' has errors\"),Project_0_can_t_be_built_because_its_dependency_1_has_errors:b(6363,3,\"Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363\",\"Project '{0}' can't be built because its dependency '{1}' has errors\"),Build_one_or_more_projects_and_their_dependencies_if_out_of_date:b(6364,3,\"Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364\",\"Build one or more projects and their dependencies, if out of date\"),Delete_the_outputs_of_all_projects:b(6365,3,\"Delete_the_outputs_of_all_projects_6365\",\"Delete the outputs of all projects.\"),Show_what_would_be_built_or_deleted_if_specified_with_clean:b(6367,3,\"Show_what_would_be_built_or_deleted_if_specified_with_clean_6367\",\"Show what would be built (or deleted, if specified with '--clean')\"),Option_build_must_be_the_first_command_line_argument:b(6369,1,\"Option_build_must_be_the_first_command_line_argument_6369\",\"Option '--build' must be the first command line argument.\"),Options_0_and_1_cannot_be_combined:b(6370,1,\"Options_0_and_1_cannot_be_combined_6370\",\"Options '{0}' and '{1}' cannot be combined.\"),Updating_unchanged_output_timestamps_of_project_0:b(6371,3,\"Updating_unchanged_output_timestamps_of_project_0_6371\",\"Updating unchanged output timestamps of project '{0}'...\"),Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed:b(6372,3,\"Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372\",\"Project '{0}' is out of date because output of its dependency '{1}' has changed\"),Updating_output_of_project_0:b(6373,3,\"Updating_output_of_project_0_6373\",\"Updating output of project '{0}'...\"),A_non_dry_build_would_update_timestamps_for_output_of_project_0:b(6374,3,\"A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374\",\"A non-dry build would update timestamps for output of project '{0}'\"),A_non_dry_build_would_update_output_of_project_0:b(6375,3,\"A_non_dry_build_would_update_output_of_project_0_6375\",\"A non-dry build would update output of project '{0}'\"),Cannot_update_output_of_project_0_because_there_was_error_reading_file_1:b(6376,3,\"Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376\",\"Cannot update output of project '{0}' because there was error reading file '{1}'\"),Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1:b(6377,1,\"Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377\",\"Cannot write file '{0}' because it will overwrite '.tsbuildinfo' file generated by referenced project '{1}'\"),Composite_projects_may_not_disable_incremental_compilation:b(6379,1,\"Composite_projects_may_not_disable_incremental_compilation_6379\",\"Composite projects may not disable incremental compilation.\"),Specify_file_to_store_incremental_compilation_information:b(6380,3,\"Specify_file_to_store_incremental_compilation_information_6380\",\"Specify file to store incremental compilation information\"),Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2:b(6381,3,\"Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381\",\"Project '{0}' is out of date because output for it was generated with version '{1}' that differs with current version '{2}'\"),Skipping_build_of_project_0_because_its_dependency_1_was_not_built:b(6382,3,\"Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382\",\"Skipping build of project '{0}' because its dependency '{1}' was not built\"),Project_0_can_t_be_built_because_its_dependency_1_was_not_built:b(6383,3,\"Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383\",\"Project '{0}' can't be built because its dependency '{1}' was not built\"),Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it:b(6384,3,\"Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384\",\"Have recompiles in '--incremental' and '--watch' assume that changes within a file will only affect files directly depending on it.\"),_0_is_deprecated:b(6385,2,\"_0_is_deprecated_6385\",\"'{0}' is deprecated.\",void 0,void 0,!0),Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found:b(6386,3,\"Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386\",\"Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found.\"),The_signature_0_of_1_is_deprecated:b(6387,2,\"The_signature_0_of_1_is_deprecated_6387\",\"The signature '{0}' of '{1}' is deprecated.\",void 0,void 0,!0),Project_0_is_being_forcibly_rebuilt:b(6388,3,\"Project_0_is_being_forcibly_rebuilt_6388\",\"Project '{0}' is being forcibly rebuilt\"),Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved:b(6389,3,\"Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389\",\"Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved.\"),Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2:b(6390,3,\"Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390\",\"Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'.\"),Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:b(6391,3,\"Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391\",\"Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'.\"),Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved:b(6392,3,\"Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392\",\"Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved.\"),Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3:b(6393,3,\"Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393\",\"Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'.\"),Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4:b(6394,3,\"Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394\",\"Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'.\"),Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved:b(6395,3,\"Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395\",\"Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved.\"),Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3:b(6396,3,\"Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396\",\"Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'.\"),Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4:b(6397,3,\"Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397\",\"Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'.\"),Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved:b(6398,3,\"Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398\",\"Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved.\"),Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted:b(6399,3,\"Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399\",\"Project '{0}' is out of date because buildinfo file '{1}' indicates that some of the changes were not emitted\"),Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files:b(6400,3,\"Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400\",\"Project '{0}' is up to date but needs to update timestamps of output files that are older than input files\"),Project_0_is_out_of_date_because_there_was_error_reading_file_1:b(6401,3,\"Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401\",\"Project '{0}' is out of date because there was error reading file '{1}'\"),Resolving_in_0_mode_with_conditions_1:b(6402,3,\"Resolving_in_0_mode_with_conditions_1_6402\",\"Resolving in {0} mode with conditions {1}.\"),Matched_0_condition_1:b(6403,3,\"Matched_0_condition_1_6403\",\"Matched '{0}' condition '{1}'.\"),Using_0_subpath_1_with_target_2:b(6404,3,\"Using_0_subpath_1_with_target_2_6404\",\"Using '{0}' subpath '{1}' with target '{2}'.\"),Saw_non_matching_condition_0:b(6405,3,\"Saw_non_matching_condition_0_6405\",\"Saw non-matching condition '{0}'.\"),Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions:b(6406,3,\"Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406\",\"Project '{0}' is out of date because buildinfo file '{1}' indicates there is change in compilerOptions\"),Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noEmit_or_emitDeclarationOnly_to_be_set:b(6407,3,\"Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407\",\"Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set.\"),Use_the_package_json_exports_field_when_resolving_package_imports:b(6408,3,\"Use_the_package_json_exports_field_when_resolving_package_imports_6408\",\"Use the package.json 'exports' field when resolving package imports.\"),Use_the_package_json_imports_field_when_resolving_imports:b(6409,3,\"Use_the_package_json_imports_field_when_resolving_imports_6409\",\"Use the package.json 'imports' field when resolving imports.\"),Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports:b(6410,3,\"Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410\",\"Conditions to set in addition to the resolver-specific defaults when resolving imports.\"),true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false:b(6411,3,\"true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411\",\"`true` when 'moduleResolution' is 'node16', 'nodenext', or 'bundler'; otherwise `false`.\"),Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_but_not_any_more:b(6412,3,\"Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412\",\"Project '{0}' is out of date because buildinfo file '{1}' indicates that file '{2}' was root file of compilation but not any more.\"),Entering_conditional_exports:b(6413,3,\"Entering_conditional_exports_6413\",\"Entering conditional exports.\"),Resolved_under_condition_0:b(6414,3,\"Resolved_under_condition_0_6414\",\"Resolved under condition '{0}'.\"),Failed_to_resolve_under_condition_0:b(6415,3,\"Failed_to_resolve_under_condition_0_6415\",\"Failed to resolve under condition '{0}'.\"),Exiting_conditional_exports:b(6416,3,\"Exiting_conditional_exports_6416\",\"Exiting conditional exports.\"),The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1:b(6500,3,\"The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500\",\"The expected type comes from property '{0}' which is declared here on type '{1}'\"),The_expected_type_comes_from_this_index_signature:b(6501,3,\"The_expected_type_comes_from_this_index_signature_6501\",\"The expected type comes from this index signature.\"),The_expected_type_comes_from_the_return_type_of_this_signature:b(6502,3,\"The_expected_type_comes_from_the_return_type_of_this_signature_6502\",\"The expected type comes from the return type of this signature.\"),Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing:b(6503,3,\"Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503\",\"Print names of files that are part of the compilation and then stop processing.\"),File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option:b(6504,1,\"File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504\",\"File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?\"),Print_names_of_files_and_the_reason_they_are_part_of_the_compilation:b(6505,3,\"Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505\",\"Print names of files and the reason they are part of the compilation.\"),Consider_adding_a_declare_modifier_to_this_class:b(6506,3,\"Consider_adding_a_declare_modifier_to_this_class_6506\",\"Consider adding a 'declare' modifier to this class.\"),Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files:b(6600,3,\"Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600\",\"Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files.\"),Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export:b(6601,3,\"Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601\",\"Allow 'import x from y' when a module doesn't have a default export.\"),Allow_accessing_UMD_globals_from_modules:b(6602,3,\"Allow_accessing_UMD_globals_from_modules_6602\",\"Allow accessing UMD globals from modules.\"),Disable_error_reporting_for_unreachable_code:b(6603,3,\"Disable_error_reporting_for_unreachable_code_6603\",\"Disable error reporting for unreachable code.\"),Disable_error_reporting_for_unused_labels:b(6604,3,\"Disable_error_reporting_for_unused_labels_6604\",\"Disable error reporting for unused labels.\"),Ensure_use_strict_is_always_emitted:b(6605,3,\"Ensure_use_strict_is_always_emitted_6605\",\"Ensure 'use strict' is always emitted.\"),Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it:b(6606,3,\"Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606\",\"Have recompiles in projects that use 'incremental' and 'watch' mode assume that changes within a file will only affect files directly depending on it.\"),Specify_the_base_directory_to_resolve_non_relative_module_names:b(6607,3,\"Specify_the_base_directory_to_resolve_non_relative_module_names_6607\",\"Specify the base directory to resolve non-relative module names.\"),No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files:b(6608,3,\"No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608\",\"No longer supported. In early versions, manually set the text encoding for reading files.\"),Enable_error_reporting_in_type_checked_JavaScript_files:b(6609,3,\"Enable_error_reporting_in_type_checked_JavaScript_files_6609\",\"Enable error reporting in type-checked JavaScript files.\"),Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references:b(6611,3,\"Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611\",\"Enable constraints that allow a TypeScript project to be used with project references.\"),Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project:b(6612,3,\"Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612\",\"Generate .d.ts files from TypeScript and JavaScript files in your project.\"),Specify_the_output_directory_for_generated_declaration_files:b(6613,3,\"Specify_the_output_directory_for_generated_declaration_files_6613\",\"Specify the output directory for generated declaration files.\"),Create_sourcemaps_for_d_ts_files:b(6614,3,\"Create_sourcemaps_for_d_ts_files_6614\",\"Create sourcemaps for d.ts files.\"),Output_compiler_performance_information_after_building:b(6615,3,\"Output_compiler_performance_information_after_building_6615\",\"Output compiler performance information after building.\"),Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project:b(6616,3,\"Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616\",\"Disables inference for type acquisition by looking at filenames in a project.\"),Reduce_the_number_of_projects_loaded_automatically_by_TypeScript:b(6617,3,\"Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617\",\"Reduce the number of projects loaded automatically by TypeScript.\"),Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server:b(6618,3,\"Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618\",\"Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server.\"),Opt_a_project_out_of_multi_project_reference_checking_when_editing:b(6619,3,\"Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619\",\"Opt a project out of multi-project reference checking when editing.\"),Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects:b(6620,3,\"Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620\",\"Disable preferring source files instead of declaration files when referencing composite projects.\"),Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration:b(6621,3,\"Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621\",\"Emit more compliant, but verbose and less performant JavaScript for iteration.\"),Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files:b(6622,3,\"Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622\",\"Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files.\"),Only_output_d_ts_files_and_not_JavaScript_files:b(6623,3,\"Only_output_d_ts_files_and_not_JavaScript_files_6623\",\"Only output d.ts files and not JavaScript files.\"),Emit_design_type_metadata_for_decorated_declarations_in_source_files:b(6624,3,\"Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624\",\"Emit design-type metadata for decorated declarations in source files.\"),Disable_the_type_acquisition_for_JavaScript_projects:b(6625,3,\"Disable_the_type_acquisition_for_JavaScript_projects_6625\",\"Disable the type acquisition for JavaScript projects\"),Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility:b(6626,3,\"Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626\",\"Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility.\"),Filters_results_from_the_include_option:b(6627,3,\"Filters_results_from_the_include_option_6627\",\"Filters results from the `include` option.\"),Remove_a_list_of_directories_from_the_watch_process:b(6628,3,\"Remove_a_list_of_directories_from_the_watch_process_6628\",\"Remove a list of directories from the watch process.\"),Remove_a_list_of_files_from_the_watch_mode_s_processing:b(6629,3,\"Remove_a_list_of_files_from_the_watch_mode_s_processing_6629\",\"Remove a list of files from the watch mode's processing.\"),Enable_experimental_support_for_legacy_experimental_decorators:b(6630,3,\"Enable_experimental_support_for_legacy_experimental_decorators_6630\",\"Enable experimental support for legacy experimental decorators.\"),Print_files_read_during_the_compilation_including_why_it_was_included:b(6631,3,\"Print_files_read_during_the_compilation_including_why_it_was_included_6631\",\"Print files read during the compilation including why it was included.\"),Output_more_detailed_compiler_performance_information_after_building:b(6632,3,\"Output_more_detailed_compiler_performance_information_after_building_6632\",\"Output more detailed compiler performance information after building.\"),Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited:b(6633,3,\"Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633\",\"Specify one or more path or node module references to base configuration files from which settings are inherited.\"),Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers:b(6634,3,\"Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634\",\"Specify what approach the watcher should use if the system runs out of native file watchers.\"),Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include:b(6635,3,\"Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635\",\"Include a list of files. This does not support glob patterns, as opposed to `include`.\"),Build_all_projects_including_those_that_appear_to_be_up_to_date:b(6636,3,\"Build_all_projects_including_those_that_appear_to_be_up_to_date_6636\",\"Build all projects, including those that appear to be up to date.\"),Ensure_that_casing_is_correct_in_imports:b(6637,3,\"Ensure_that_casing_is_correct_in_imports_6637\",\"Ensure that casing is correct in imports.\"),Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging:b(6638,3,\"Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638\",\"Emit a v8 CPU profile of the compiler run for debugging.\"),Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file:b(6639,3,\"Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639\",\"Allow importing helper functions from tslib once per project, instead of including them per-file.\"),Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation:b(6641,3,\"Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641\",\"Specify a list of glob patterns that match files to be included in compilation.\"),Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects:b(6642,3,\"Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642\",\"Save .tsbuildinfo files to allow for incremental compilation of projects.\"),Include_sourcemap_files_inside_the_emitted_JavaScript:b(6643,3,\"Include_sourcemap_files_inside_the_emitted_JavaScript_6643\",\"Include sourcemap files inside the emitted JavaScript.\"),Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript:b(6644,3,\"Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644\",\"Include source code in the sourcemaps inside the emitted JavaScript.\"),Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports:b(6645,3,\"Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645\",\"Ensure that each file can be safely transpiled without relying on other imports.\"),Specify_what_JSX_code_is_generated:b(6646,3,\"Specify_what_JSX_code_is_generated_6646\",\"Specify what JSX code is generated.\"),Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h:b(6647,3,\"Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647\",\"Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'.\"),Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment:b(6648,3,\"Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648\",\"Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'.\"),Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk:b(6649,3,\"Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649\",\"Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'.\"),Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option:b(6650,3,\"Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650\",\"Make keyof only return strings instead of string, numbers or symbols. Legacy option.\"),Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment:b(6651,3,\"Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651\",\"Specify a set of bundled library declaration files that describe the target runtime environment.\"),Print_the_names_of_emitted_files_after_a_compilation:b(6652,3,\"Print_the_names_of_emitted_files_after_a_compilation_6652\",\"Print the names of emitted files after a compilation.\"),Print_all_of_the_files_read_during_the_compilation:b(6653,3,\"Print_all_of_the_files_read_during_the_compilation_6653\",\"Print all of the files read during the compilation.\"),Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit:b(6654,3,\"Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654\",\"Set the language of the messaging from TypeScript. This does not affect emit.\"),Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations:b(6655,3,\"Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655\",\"Specify the location where debugger should locate map files instead of generated locations.\"),Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs:b(6656,3,\"Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656\",\"Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'.\"),Specify_what_module_code_is_generated:b(6657,3,\"Specify_what_module_code_is_generated_6657\",\"Specify what module code is generated.\"),Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier:b(6658,3,\"Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658\",\"Specify how TypeScript looks up a file from a given module specifier.\"),Set_the_newline_character_for_emitting_files:b(6659,3,\"Set_the_newline_character_for_emitting_files_6659\",\"Set the newline character for emitting files.\"),Disable_emitting_files_from_a_compilation:b(6660,3,\"Disable_emitting_files_from_a_compilation_6660\",\"Disable emitting files from a compilation.\"),Disable_generating_custom_helper_functions_like_extends_in_compiled_output:b(6661,3,\"Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661\",\"Disable generating custom helper functions like '__extends' in compiled output.\"),Disable_emitting_files_if_any_type_checking_errors_are_reported:b(6662,3,\"Disable_emitting_files_if_any_type_checking_errors_are_reported_6662\",\"Disable emitting files if any type checking errors are reported.\"),Disable_truncating_types_in_error_messages:b(6663,3,\"Disable_truncating_types_in_error_messages_6663\",\"Disable truncating types in error messages.\"),Enable_error_reporting_for_fallthrough_cases_in_switch_statements:b(6664,3,\"Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664\",\"Enable error reporting for fallthrough cases in switch statements.\"),Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type:b(6665,3,\"Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665\",\"Enable error reporting for expressions and declarations with an implied 'any' type.\"),Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier:b(6666,3,\"Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666\",\"Ensure overriding members in derived classes are marked with an override modifier.\"),Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function:b(6667,3,\"Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667\",\"Enable error reporting for codepaths that do not explicitly return in a function.\"),Enable_error_reporting_when_this_is_given_the_type_any:b(6668,3,\"Enable_error_reporting_when_this_is_given_the_type_any_6668\",\"Enable error reporting when 'this' is given the type 'any'.\"),Disable_adding_use_strict_directives_in_emitted_JavaScript_files:b(6669,3,\"Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669\",\"Disable adding 'use strict' directives in emitted JavaScript files.\"),Disable_including_any_library_files_including_the_default_lib_d_ts:b(6670,3,\"Disable_including_any_library_files_including_the_default_lib_d_ts_6670\",\"Disable including any library files, including the default lib.d.ts.\"),Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type:b(6671,3,\"Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671\",\"Enforces using indexed accessors for keys declared using an indexed type.\"),Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project:b(6672,3,\"Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672\",\"Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project.\"),Disable_strict_checking_of_generic_signatures_in_function_types:b(6673,3,\"Disable_strict_checking_of_generic_signatures_in_function_types_6673\",\"Disable strict checking of generic signatures in function types.\"),Add_undefined_to_a_type_when_accessed_using_an_index:b(6674,3,\"Add_undefined_to_a_type_when_accessed_using_an_index_6674\",\"Add 'undefined' to a type when accessed using an index.\"),Enable_error_reporting_when_local_variables_aren_t_read:b(6675,3,\"Enable_error_reporting_when_local_variables_aren_t_read_6675\",\"Enable error reporting when local variables aren't read.\"),Raise_an_error_when_a_function_parameter_isn_t_read:b(6676,3,\"Raise_an_error_when_a_function_parameter_isn_t_read_6676\",\"Raise an error when a function parameter isn't read.\"),Deprecated_setting_Use_outFile_instead:b(6677,3,\"Deprecated_setting_Use_outFile_instead_6677\",\"Deprecated setting. Use 'outFile' instead.\"),Specify_an_output_folder_for_all_emitted_files:b(6678,3,\"Specify_an_output_folder_for_all_emitted_files_6678\",\"Specify an output folder for all emitted files.\"),Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output:b(6679,3,\"Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679\",\"Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output.\"),Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations:b(6680,3,\"Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680\",\"Specify a set of entries that re-map imports to additional lookup locations.\"),Specify_a_list_of_language_service_plugins_to_include:b(6681,3,\"Specify_a_list_of_language_service_plugins_to_include_6681\",\"Specify a list of language service plugins to include.\"),Disable_erasing_const_enum_declarations_in_generated_code:b(6682,3,\"Disable_erasing_const_enum_declarations_in_generated_code_6682\",\"Disable erasing 'const enum' declarations in generated code.\"),Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node:b(6683,3,\"Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683\",\"Disable resolving symlinks to their realpath. This correlates to the same flag in node.\"),Disable_wiping_the_console_in_watch_mode:b(6684,3,\"Disable_wiping_the_console_in_watch_mode_6684\",\"Disable wiping the console in watch mode.\"),Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read:b(6685,3,\"Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685\",\"Enable color and formatting in TypeScript's output to make compiler errors easier to read.\"),Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit:b(6686,3,\"Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686\",\"Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit.\"),Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references:b(6687,3,\"Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687\",\"Specify an array of objects that specify paths for projects. Used in project references.\"),Disable_emitting_comments:b(6688,3,\"Disable_emitting_comments_6688\",\"Disable emitting comments.\"),Enable_importing_json_files:b(6689,3,\"Enable_importing_json_files_6689\",\"Enable importing .json files.\"),Specify_the_root_folder_within_your_source_files:b(6690,3,\"Specify_the_root_folder_within_your_source_files_6690\",\"Specify the root folder within your source files.\"),Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules:b(6691,3,\"Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691\",\"Allow multiple folders to be treated as one when resolving modules.\"),Skip_type_checking_d_ts_files_that_are_included_with_TypeScript:b(6692,3,\"Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692\",\"Skip type checking .d.ts files that are included with TypeScript.\"),Skip_type_checking_all_d_ts_files:b(6693,3,\"Skip_type_checking_all_d_ts_files_6693\",\"Skip type checking all .d.ts files.\"),Create_source_map_files_for_emitted_JavaScript_files:b(6694,3,\"Create_source_map_files_for_emitted_JavaScript_files_6694\",\"Create source map files for emitted JavaScript files.\"),Specify_the_root_path_for_debuggers_to_find_the_reference_source_code:b(6695,3,\"Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695\",\"Specify the root path for debuggers to find the reference source code.\"),Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function:b(6697,3,\"Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697\",\"Check that the arguments for 'bind', 'call', and 'apply' methods match the original function.\"),When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible:b(6698,3,\"When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698\",\"When assigning functions, check to ensure parameters and the return values are subtype-compatible.\"),When_type_checking_take_into_account_null_and_undefined:b(6699,3,\"When_type_checking_take_into_account_null_and_undefined_6699\",\"When type checking, take into account 'null' and 'undefined'.\"),Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor:b(6700,3,\"Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700\",\"Check for class properties that are declared but not set in the constructor.\"),Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments:b(6701,3,\"Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701\",\"Disable emitting declarations that have '@internal' in their JSDoc comments.\"),Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals:b(6702,3,\"Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702\",\"Disable reporting of excess property errors during the creation of object literals.\"),Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures:b(6703,3,\"Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703\",\"Suppress 'noImplicitAny' errors when indexing objects that lack index signatures.\"),Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively:b(6704,3,\"Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704\",\"Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively.\"),Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations:b(6705,3,\"Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705\",\"Set the JavaScript language version for emitted JavaScript and include compatible library declarations.\"),Log_paths_used_during_the_moduleResolution_process:b(6706,3,\"Log_paths_used_during_the_moduleResolution_process_6706\",\"Log paths used during the 'moduleResolution' process.\"),Specify_the_path_to_tsbuildinfo_incremental_compilation_file:b(6707,3,\"Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707\",\"Specify the path to .tsbuildinfo incremental compilation file.\"),Specify_options_for_automatic_acquisition_of_declaration_files:b(6709,3,\"Specify_options_for_automatic_acquisition_of_declaration_files_6709\",\"Specify options for automatic acquisition of declaration files.\"),Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types:b(6710,3,\"Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710\",\"Specify multiple folders that act like './node_modules/@types'.\"),Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file:b(6711,3,\"Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711\",\"Specify type package names to be included without being referenced in a source file.\"),Emit_ECMAScript_standard_compliant_class_fields:b(6712,3,\"Emit_ECMAScript_standard_compliant_class_fields_6712\",\"Emit ECMAScript-standard-compliant class fields.\"),Enable_verbose_logging:b(6713,3,\"Enable_verbose_logging_6713\",\"Enable verbose logging.\"),Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality:b(6714,3,\"Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714\",\"Specify how directories are watched on systems that lack recursive file-watching functionality.\"),Specify_how_the_TypeScript_watch_mode_works:b(6715,3,\"Specify_how_the_TypeScript_watch_mode_works_6715\",\"Specify how the TypeScript watch mode works.\"),Require_undeclared_properties_from_index_signatures_to_use_element_accesses:b(6717,3,\"Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717\",\"Require undeclared properties from index signatures to use element accesses.\"),Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types:b(6718,3,\"Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718\",\"Specify emit/checking behavior for imports that are only used for types.\"),Default_catch_clause_variables_as_unknown_instead_of_any:b(6803,3,\"Default_catch_clause_variables_as_unknown_instead_of_any_6803\",\"Default catch clause variables as 'unknown' instead of 'any'.\"),Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting:b(6804,3,\"Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804\",\"Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting.\"),one_of_Colon:b(6900,3,\"one_of_Colon_6900\",\"one of:\"),one_or_more_Colon:b(6901,3,\"one_or_more_Colon_6901\",\"one or more:\"),type_Colon:b(6902,3,\"type_Colon_6902\",\"type:\"),default_Colon:b(6903,3,\"default_Colon_6903\",\"default:\"),module_system_or_esModuleInterop:b(6904,3,\"module_system_or_esModuleInterop_6904\",'module === \"system\" or esModuleInterop'),false_unless_strict_is_set:b(6905,3,\"false_unless_strict_is_set_6905\",\"`false`, unless `strict` is set\"),false_unless_composite_is_set:b(6906,3,\"false_unless_composite_is_set_6906\",\"`false`, unless `composite` is set\"),node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified:b(6907,3,\"node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907\",'`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`, plus the value of `outDir` if one is specified.'),if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk:b(6908,3,\"if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908\",'`[]` if `files` is specified, otherwise `[\"**/*\"]`'),true_if_composite_false_otherwise:b(6909,3,\"true_if_composite_false_otherwise_6909\",\"`true` if `composite`, `false` otherwise\"),module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node:b(69010,3,\"module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010\",\"module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`\"),Computed_from_the_list_of_input_files:b(6911,3,\"Computed_from_the_list_of_input_files_6911\",\"Computed from the list of input files\"),Platform_specific:b(6912,3,\"Platform_specific_6912\",\"Platform specific\"),You_can_learn_about_all_of_the_compiler_options_at_0:b(6913,3,\"You_can_learn_about_all_of_the_compiler_options_at_0_6913\",\"You can learn about all of the compiler options at {0}\"),Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon:b(6914,3,\"Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914\",\"Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:\"),Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0:b(6915,3,\"Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915\",\"Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}\"),COMMON_COMMANDS:b(6916,3,\"COMMON_COMMANDS_6916\",\"COMMON COMMANDS\"),ALL_COMPILER_OPTIONS:b(6917,3,\"ALL_COMPILER_OPTIONS_6917\",\"ALL COMPILER OPTIONS\"),WATCH_OPTIONS:b(6918,3,\"WATCH_OPTIONS_6918\",\"WATCH OPTIONS\"),BUILD_OPTIONS:b(6919,3,\"BUILD_OPTIONS_6919\",\"BUILD OPTIONS\"),COMMON_COMPILER_OPTIONS:b(6920,3,\"COMMON_COMPILER_OPTIONS_6920\",\"COMMON COMPILER OPTIONS\"),COMMAND_LINE_FLAGS:b(6921,3,\"COMMAND_LINE_FLAGS_6921\",\"COMMAND LINE FLAGS\"),tsc_Colon_The_TypeScript_Compiler:b(6922,3,\"tsc_Colon_The_TypeScript_Compiler_6922\",\"tsc: The TypeScript Compiler\"),Compiles_the_current_project_tsconfig_json_in_the_working_directory:b(6923,3,\"Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923\",\"Compiles the current project (tsconfig.json in the working directory.)\"),Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options:b(6924,3,\"Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924\",\"Ignoring tsconfig.json, compiles the specified files with default compiler options.\"),Build_a_composite_project_in_the_working_directory:b(6925,3,\"Build_a_composite_project_in_the_working_directory_6925\",\"Build a composite project in the working directory.\"),Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory:b(6926,3,\"Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926\",\"Creates a tsconfig.json with the recommended settings in the working directory.\"),Compiles_the_TypeScript_project_located_at_the_specified_path:b(6927,3,\"Compiles_the_TypeScript_project_located_at_the_specified_path_6927\",\"Compiles the TypeScript project located at the specified path.\"),An_expanded_version_of_this_information_showing_all_possible_compiler_options:b(6928,3,\"An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928\",\"An expanded version of this information, showing all possible compiler options\"),Compiles_the_current_project_with_additional_settings:b(6929,3,\"Compiles_the_current_project_with_additional_settings_6929\",\"Compiles the current project, with additional settings.\"),true_for_ES2022_and_above_including_ESNext:b(6930,3,\"true_for_ES2022_and_above_including_ESNext_6930\",\"`true` for ES2022 and above, including ESNext.\"),List_of_file_name_suffixes_to_search_when_resolving_a_module:b(6931,1,\"List_of_file_name_suffixes_to_search_when_resolving_a_module_6931\",\"List of file name suffixes to search when resolving a module.\"),Variable_0_implicitly_has_an_1_type:b(7005,1,\"Variable_0_implicitly_has_an_1_type_7005\",\"Variable '{0}' implicitly has an '{1}' type.\"),Parameter_0_implicitly_has_an_1_type:b(7006,1,\"Parameter_0_implicitly_has_an_1_type_7006\",\"Parameter '{0}' implicitly has an '{1}' type.\"),Member_0_implicitly_has_an_1_type:b(7008,1,\"Member_0_implicitly_has_an_1_type_7008\",\"Member '{0}' implicitly has an '{1}' type.\"),new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type:b(7009,1,\"new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009\",\"'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.\"),_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type:b(7010,1,\"_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010\",\"'{0}', which lacks return-type annotation, implicitly has an '{1}' return type.\"),Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type:b(7011,1,\"Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011\",\"Function expression, which lacks return-type annotation, implicitly has an '{0}' return type.\"),This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation:b(7012,1,\"This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012\",\"This overload implicitly returns the type '{0}' because it lacks a return type annotation.\"),Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type:b(7013,1,\"Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013\",\"Construct signature, which lacks return-type annotation, implicitly has an 'any' return type.\"),Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type:b(7014,1,\"Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014\",\"Function type, which lacks return-type annotation, implicitly has an '{0}' return type.\"),Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number:b(7015,1,\"Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015\",\"Element implicitly has an 'any' type because index expression is not of type 'number'.\"),Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type:b(7016,1,\"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016\",\"Could not find a declaration file for module '{0}'. '{1}' implicitly has an 'any' type.\"),Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature:b(7017,1,\"Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017\",\"Element implicitly has an 'any' type because type '{0}' has no index signature.\"),Object_literal_s_property_0_implicitly_has_an_1_type:b(7018,1,\"Object_literal_s_property_0_implicitly_has_an_1_type_7018\",\"Object literal's property '{0}' implicitly has an '{1}' type.\"),Rest_parameter_0_implicitly_has_an_any_type:b(7019,1,\"Rest_parameter_0_implicitly_has_an_any_type_7019\",\"Rest parameter '{0}' implicitly has an 'any[]' type.\"),Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type:b(7020,1,\"Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020\",\"Call signature, which lacks return-type annotation, implicitly has an 'any' return type.\"),_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer:b(7022,1,\"_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022\",\"'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.\"),_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions:b(7023,1,\"_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023\",\"'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.\"),Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions:b(7024,1,\"Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024\",\"Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions.\"),Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation:b(7025,1,\"Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_retu_7025\",\"Generator implicitly has yield type '{0}' because it does not yield any values. Consider supplying a return type annotation.\"),JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists:b(7026,1,\"JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026\",\"JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists.\"),Unreachable_code_detected:b(7027,1,\"Unreachable_code_detected_7027\",\"Unreachable code detected.\",!0),Unused_label:b(7028,1,\"Unused_label_7028\",\"Unused label.\",!0),Fallthrough_case_in_switch:b(7029,1,\"Fallthrough_case_in_switch_7029\",\"Fallthrough case in switch.\"),Not_all_code_paths_return_a_value:b(7030,1,\"Not_all_code_paths_return_a_value_7030\",\"Not all code paths return a value.\"),Binding_element_0_implicitly_has_an_1_type:b(7031,1,\"Binding_element_0_implicitly_has_an_1_type_7031\",\"Binding element '{0}' implicitly has an '{1}' type.\"),Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation:b(7032,1,\"Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032\",\"Property '{0}' implicitly has type 'any', because its set accessor lacks a parameter type annotation.\"),Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation:b(7033,1,\"Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033\",\"Property '{0}' implicitly has type 'any', because its get accessor lacks a return type annotation.\"),Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined:b(7034,1,\"Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034\",\"Variable '{0}' implicitly has type '{1}' in some locations where its type cannot be determined.\"),Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0:b(7035,1,\"Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035\",\"Try `npm i --save-dev @types/{1}` if it exists or add a new declaration (.d.ts) file containing `declare module '{0}';`\"),Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0:b(7036,1,\"Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036\",\"Dynamic import's specifier must be of type 'string', but here has type '{0}'.\"),Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports:b(7037,3,\"Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037\",\"Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'.\"),Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead:b(7038,3,\"Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038\",\"Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.\"),Mapped_object_type_implicitly_has_an_any_template_type:b(7039,1,\"Mapped_object_type_implicitly_has_an_any_template_type_7039\",\"Mapped object type implicitly has an 'any' template type.\"),If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_Slash_Slashgithub_com_SlashDefinitelyTyped_SlashDefinitelyTyped_Slashtree_Slashmaster_Slashtypes_Slash_1:b(7040,1,\"If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040\",\"If the '{0}' package actually exposes this module, consider sending a pull request to amend 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'\"),The_containing_arrow_function_captures_the_global_value_of_this:b(7041,1,\"The_containing_arrow_function_captures_the_global_value_of_this_7041\",\"The containing arrow function captures the global value of 'this'.\"),Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used:b(7042,1,\"Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042\",\"Module '{0}' was resolved to '{1}', but '--resolveJsonModule' is not used.\"),Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage:b(7043,2,\"Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043\",\"Variable '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage.\"),Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage:b(7044,2,\"Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044\",\"Parameter '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage.\"),Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage:b(7045,2,\"Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045\",\"Member '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage.\"),Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage:b(7046,2,\"Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046\",\"Variable '{0}' implicitly has type '{1}' in some locations, but a better type may be inferred from usage.\"),Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage:b(7047,2,\"Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047\",\"Rest parameter '{0}' implicitly has an 'any[]' type, but a better type may be inferred from usage.\"),Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage:b(7048,2,\"Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048\",\"Property '{0}' implicitly has type 'any', but a better type for its get accessor may be inferred from usage.\"),Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage:b(7049,2,\"Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049\",\"Property '{0}' implicitly has type 'any', but a better type for its set accessor may be inferred from usage.\"),_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage:b(7050,2,\"_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050\",\"'{0}' implicitly has an '{1}' return type, but a better type may be inferred from usage.\"),Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1:b(7051,1,\"Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051\",\"Parameter has a name but no type. Did you mean '{0}: {1}'?\"),Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1:b(7052,1,\"Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052\",\"Element implicitly has an 'any' type because type '{0}' has no index signature. Did you mean to call '{1}'?\"),Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1:b(7053,1,\"Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053\",\"Element implicitly has an 'any' type because expression of type '{0}' can't be used to index type '{1}'.\"),No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1:b(7054,1,\"No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054\",\"No index signature with a parameter of type '{0}' was found on type '{1}'.\"),_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type:b(7055,1,\"_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055\",\"'{0}', which lacks return-type annotation, implicitly has an '{1}' yield type.\"),The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_type_annotation_is_needed:b(7056,1,\"The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056\",\"The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed.\"),yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation:b(7057,1,\"yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057\",\"'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation.\"),If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_declare_module_1:b(7058,1,\"If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058\",\"If the '{0}' package actually exposes this module, try adding a new declaration (.d.ts) file containing `declare module '{1}';`\"),This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead:b(7059,1,\"This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059\",\"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\"),This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_constraint:b(7060,1,\"This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060\",\"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma or explicit constraint.\"),A_mapped_type_may_not_declare_properties_or_methods:b(7061,1,\"A_mapped_type_may_not_declare_properties_or_methods_7061\",\"A mapped type may not declare properties or methods.\"),You_cannot_rename_this_element:b(8e3,1,\"You_cannot_rename_this_element_8000\",\"You cannot rename this element.\"),You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library:b(8001,1,\"You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001\",\"You cannot rename elements that are defined in the standard TypeScript library.\"),import_can_only_be_used_in_TypeScript_files:b(8002,1,\"import_can_only_be_used_in_TypeScript_files_8002\",\"'import ... =' can only be used in TypeScript files.\"),export_can_only_be_used_in_TypeScript_files:b(8003,1,\"export_can_only_be_used_in_TypeScript_files_8003\",\"'export =' can only be used in TypeScript files.\"),Type_parameter_declarations_can_only_be_used_in_TypeScript_files:b(8004,1,\"Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004\",\"Type parameter declarations can only be used in TypeScript files.\"),implements_clauses_can_only_be_used_in_TypeScript_files:b(8005,1,\"implements_clauses_can_only_be_used_in_TypeScript_files_8005\",\"'implements' clauses can only be used in TypeScript files.\"),_0_declarations_can_only_be_used_in_TypeScript_files:b(8006,1,\"_0_declarations_can_only_be_used_in_TypeScript_files_8006\",\"'{0}' declarations can only be used in TypeScript files.\"),Type_aliases_can_only_be_used_in_TypeScript_files:b(8008,1,\"Type_aliases_can_only_be_used_in_TypeScript_files_8008\",\"Type aliases can only be used in TypeScript files.\"),The_0_modifier_can_only_be_used_in_TypeScript_files:b(8009,1,\"The_0_modifier_can_only_be_used_in_TypeScript_files_8009\",\"The '{0}' modifier can only be used in TypeScript files.\"),Type_annotations_can_only_be_used_in_TypeScript_files:b(8010,1,\"Type_annotations_can_only_be_used_in_TypeScript_files_8010\",\"Type annotations can only be used in TypeScript files.\"),Type_arguments_can_only_be_used_in_TypeScript_files:b(8011,1,\"Type_arguments_can_only_be_used_in_TypeScript_files_8011\",\"Type arguments can only be used in TypeScript files.\"),Parameter_modifiers_can_only_be_used_in_TypeScript_files:b(8012,1,\"Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012\",\"Parameter modifiers can only be used in TypeScript files.\"),Non_null_assertions_can_only_be_used_in_TypeScript_files:b(8013,1,\"Non_null_assertions_can_only_be_used_in_TypeScript_files_8013\",\"Non-null assertions can only be used in TypeScript files.\"),Type_assertion_expressions_can_only_be_used_in_TypeScript_files:b(8016,1,\"Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016\",\"Type assertion expressions can only be used in TypeScript files.\"),Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0:b(8017,1,\"Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017\",\"Octal literal types must use ES2015 syntax. Use the syntax '{0}'.\"),Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0:b(8018,1,\"Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018\",\"Octal literals are not allowed in enums members initializer. Use the syntax '{0}'.\"),Report_errors_in_js_files:b(8019,3,\"Report_errors_in_js_files_8019\",\"Report errors in .js files.\"),JSDoc_types_can_only_be_used_inside_documentation_comments:b(8020,1,\"JSDoc_types_can_only_be_used_inside_documentation_comments_8020\",\"JSDoc types can only be used inside documentation comments.\"),JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags:b(8021,1,\"JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021\",\"JSDoc '@typedef' tag should either have a type annotation or be followed by '@property' or '@member' tags.\"),JSDoc_0_is_not_attached_to_a_class:b(8022,1,\"JSDoc_0_is_not_attached_to_a_class_8022\",\"JSDoc '@{0}' is not attached to a class.\"),JSDoc_0_1_does_not_match_the_extends_2_clause:b(8023,1,\"JSDoc_0_1_does_not_match_the_extends_2_clause_8023\",\"JSDoc '@{0} {1}' does not match the 'extends {2}' clause.\"),JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name:b(8024,1,\"JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024\",\"JSDoc '@param' tag has name '{0}', but there is no parameter with that name.\"),Class_declarations_cannot_have_more_than_one_augments_or_extends_tag:b(8025,1,\"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025\",\"Class declarations cannot have more than one '@augments' or '@extends' tag.\"),Expected_0_type_arguments_provide_these_with_an_extends_tag:b(8026,1,\"Expected_0_type_arguments_provide_these_with_an_extends_tag_8026\",\"Expected {0} type arguments; provide these with an '@extends' tag.\"),Expected_0_1_type_arguments_provide_these_with_an_extends_tag:b(8027,1,\"Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027\",\"Expected {0}-{1} type arguments; provide these with an '@extends' tag.\"),JSDoc_may_only_appear_in_the_last_parameter_of_a_signature:b(8028,1,\"JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028\",\"JSDoc '...' may only appear in the last parameter of a signature.\"),JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type:b(8029,1,\"JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029\",\"JSDoc '@param' tag has name '{0}', but there is no parameter with that name. It would match 'arguments' if it had an array type.\"),The_type_of_a_function_declaration_must_match_the_function_s_signature:b(8030,1,\"The_type_of_a_function_declaration_must_match_the_function_s_signature_8030\",\"The type of a function declaration must match the function's signature.\"),You_cannot_rename_a_module_via_a_global_import:b(8031,1,\"You_cannot_rename_a_module_via_a_global_import_8031\",\"You cannot rename a module via a global import.\"),Qualified_name_0_is_not_allowed_without_a_leading_param_object_1:b(8032,1,\"Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032\",\"Qualified name '{0}' is not allowed without a leading '@param {object} {1}'.\"),A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags:b(8033,1,\"A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033\",\"A JSDoc '@typedef' comment may not contain multiple '@type' tags.\"),The_tag_was_first_specified_here:b(8034,1,\"The_tag_was_first_specified_here_8034\",\"The tag was first specified here.\"),You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder:b(8035,1,\"You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035\",\"You cannot rename elements that are defined in a 'node_modules' folder.\"),You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder:b(8036,1,\"You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036\",\"You cannot rename elements that are defined in another 'node_modules' folder.\"),Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files:b(8037,1,\"Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037\",\"Type satisfaction expressions can only be used in TypeScript files.\"),Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export:b(8038,1,\"Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038\",\"Decorators may not appear after 'export' or 'export default' if they also appear before 'export'.\"),Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit:b(9005,1,\"Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005\",\"Declaration emit for this file requires using private name '{0}'. An explicit type annotation may unblock declaration emit.\"),Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit:b(9006,1,\"Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006\",\"Declaration emit for this file requires using private name '{0}' from module '{1}'. An explicit type annotation may unblock declaration emit.\"),JSX_attributes_must_only_be_assigned_a_non_empty_expression:b(17e3,1,\"JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000\",\"JSX attributes must only be assigned a non-empty 'expression'.\"),JSX_elements_cannot_have_multiple_attributes_with_the_same_name:b(17001,1,\"JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001\",\"JSX elements cannot have multiple attributes with the same name.\"),Expected_corresponding_JSX_closing_tag_for_0:b(17002,1,\"Expected_corresponding_JSX_closing_tag_for_0_17002\",\"Expected corresponding JSX closing tag for '{0}'.\"),Cannot_use_JSX_unless_the_jsx_flag_is_provided:b(17004,1,\"Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004\",\"Cannot use JSX unless the '--jsx' flag is provided.\"),A_constructor_cannot_contain_a_super_call_when_its_class_extends_null:b(17005,1,\"A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005\",\"A constructor cannot contain a 'super' call when its class extends 'null'.\"),An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses:b(17006,1,\"An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006\",\"An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.\"),A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses:b(17007,1,\"A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007\",\"A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.\"),JSX_element_0_has_no_corresponding_closing_tag:b(17008,1,\"JSX_element_0_has_no_corresponding_closing_tag_17008\",\"JSX element '{0}' has no corresponding closing tag.\"),super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class:b(17009,1,\"super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009\",\"'super' must be called before accessing 'this' in the constructor of a derived class.\"),Unknown_type_acquisition_option_0:b(17010,1,\"Unknown_type_acquisition_option_0_17010\",\"Unknown type acquisition option '{0}'.\"),super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class:b(17011,1,\"super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011\",\"'super' must be called before accessing a property of 'super' in the constructor of a derived class.\"),_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2:b(17012,1,\"_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012\",\"'{0}' is not a valid meta-property for keyword '{1}'. Did you mean '{2}'?\"),Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor:b(17013,1,\"Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013\",\"Meta-property '{0}' is only allowed in the body of a function declaration, function expression, or constructor.\"),JSX_fragment_has_no_corresponding_closing_tag:b(17014,1,\"JSX_fragment_has_no_corresponding_closing_tag_17014\",\"JSX fragment has no corresponding closing tag.\"),Expected_corresponding_closing_tag_for_JSX_fragment:b(17015,1,\"Expected_corresponding_closing_tag_for_JSX_fragment_17015\",\"Expected corresponding closing tag for JSX fragment.\"),The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option:b(17016,1,\"The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016\",\"The 'jsxFragmentFactory' compiler option must be provided to use JSX fragments with the 'jsxFactory' compiler option.\"),An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments:b(17017,1,\"An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017\",\"An @jsxFrag pragma is required when using an @jsx pragma with JSX fragments.\"),Unknown_type_acquisition_option_0_Did_you_mean_1:b(17018,1,\"Unknown_type_acquisition_option_0_Did_you_mean_1_17018\",\"Unknown type acquisition option '{0}'. Did you mean '{1}'?\"),_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1:b(17019,1,\"_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019\",\"'{0}' at the end of a type is not valid TypeScript syntax. Did you mean to write '{1}'?\"),_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1:b(17020,1,\"_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020\",\"'{0}' at the start of a type is not valid TypeScript syntax. Did you mean to write '{1}'?\"),Circularity_detected_while_resolving_configuration_Colon_0:b(18e3,1,\"Circularity_detected_while_resolving_configuration_Colon_0_18000\",\"Circularity detected while resolving configuration: {0}\"),The_files_list_in_config_file_0_is_empty:b(18002,1,\"The_files_list_in_config_file_0_is_empty_18002\",\"The 'files' list in config file '{0}' is empty.\"),No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2:b(18003,1,\"No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003\",\"No inputs were found in config file '{0}'. Specified 'include' paths were '{1}' and 'exclude' paths were '{2}'.\"),File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module:b(80001,2,\"File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001\",\"File is a CommonJS module; it may be converted to an ES module.\"),This_constructor_function_may_be_converted_to_a_class_declaration:b(80002,2,\"This_constructor_function_may_be_converted_to_a_class_declaration_80002\",\"This constructor function may be converted to a class declaration.\"),Import_may_be_converted_to_a_default_import:b(80003,2,\"Import_may_be_converted_to_a_default_import_80003\",\"Import may be converted to a default import.\"),JSDoc_types_may_be_moved_to_TypeScript_types:b(80004,2,\"JSDoc_types_may_be_moved_to_TypeScript_types_80004\",\"JSDoc types may be moved to TypeScript types.\"),require_call_may_be_converted_to_an_import:b(80005,2,\"require_call_may_be_converted_to_an_import_80005\",\"'require' call may be converted to an import.\"),This_may_be_converted_to_an_async_function:b(80006,2,\"This_may_be_converted_to_an_async_function_80006\",\"This may be converted to an async function.\"),await_has_no_effect_on_the_type_of_this_expression:b(80007,2,\"await_has_no_effect_on_the_type_of_this_expression_80007\",\"'await' has no effect on the type of this expression.\"),Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers:b(80008,2,\"Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008\",\"Numeric literals with absolute values equal to 2^53 or greater are too large to be represented accurately as integers.\"),Add_missing_super_call:b(90001,3,\"Add_missing_super_call_90001\",\"Add missing 'super()' call\"),Make_super_call_the_first_statement_in_the_constructor:b(90002,3,\"Make_super_call_the_first_statement_in_the_constructor_90002\",\"Make 'super()' call the first statement in the constructor\"),Change_extends_to_implements:b(90003,3,\"Change_extends_to_implements_90003\",\"Change 'extends' to 'implements'\"),Remove_unused_declaration_for_Colon_0:b(90004,3,\"Remove_unused_declaration_for_Colon_0_90004\",\"Remove unused declaration for: '{0}'\"),Remove_import_from_0:b(90005,3,\"Remove_import_from_0_90005\",\"Remove import from '{0}'\"),Implement_interface_0:b(90006,3,\"Implement_interface_0_90006\",\"Implement interface '{0}'\"),Implement_inherited_abstract_class:b(90007,3,\"Implement_inherited_abstract_class_90007\",\"Implement inherited abstract class\"),Add_0_to_unresolved_variable:b(90008,3,\"Add_0_to_unresolved_variable_90008\",\"Add '{0}.' to unresolved variable\"),Remove_variable_statement:b(90010,3,\"Remove_variable_statement_90010\",\"Remove variable statement\"),Remove_template_tag:b(90011,3,\"Remove_template_tag_90011\",\"Remove template tag\"),Remove_type_parameters:b(90012,3,\"Remove_type_parameters_90012\",\"Remove type parameters\"),Import_0_from_1:b(90013,3,\"Import_0_from_1_90013\",`Import '{0}' from \"{1}\"`),Change_0_to_1:b(90014,3,\"Change_0_to_1_90014\",\"Change '{0}' to '{1}'\"),Declare_property_0:b(90016,3,\"Declare_property_0_90016\",\"Declare property '{0}'\"),Add_index_signature_for_property_0:b(90017,3,\"Add_index_signature_for_property_0_90017\",\"Add index signature for property '{0}'\"),Disable_checking_for_this_file:b(90018,3,\"Disable_checking_for_this_file_90018\",\"Disable checking for this file\"),Ignore_this_error_message:b(90019,3,\"Ignore_this_error_message_90019\",\"Ignore this error message\"),Initialize_property_0_in_the_constructor:b(90020,3,\"Initialize_property_0_in_the_constructor_90020\",\"Initialize property '{0}' in the constructor\"),Initialize_static_property_0:b(90021,3,\"Initialize_static_property_0_90021\",\"Initialize static property '{0}'\"),Change_spelling_to_0:b(90022,3,\"Change_spelling_to_0_90022\",\"Change spelling to '{0}'\"),Declare_method_0:b(90023,3,\"Declare_method_0_90023\",\"Declare method '{0}'\"),Declare_static_method_0:b(90024,3,\"Declare_static_method_0_90024\",\"Declare static method '{0}'\"),Prefix_0_with_an_underscore:b(90025,3,\"Prefix_0_with_an_underscore_90025\",\"Prefix '{0}' with an underscore\"),Rewrite_as_the_indexed_access_type_0:b(90026,3,\"Rewrite_as_the_indexed_access_type_0_90026\",\"Rewrite as the indexed access type '{0}'\"),Declare_static_property_0:b(90027,3,\"Declare_static_property_0_90027\",\"Declare static property '{0}'\"),Call_decorator_expression:b(90028,3,\"Call_decorator_expression_90028\",\"Call decorator expression\"),Add_async_modifier_to_containing_function:b(90029,3,\"Add_async_modifier_to_containing_function_90029\",\"Add async modifier to containing function\"),Replace_infer_0_with_unknown:b(90030,3,\"Replace_infer_0_with_unknown_90030\",\"Replace 'infer {0}' with 'unknown'\"),Replace_all_unused_infer_with_unknown:b(90031,3,\"Replace_all_unused_infer_with_unknown_90031\",\"Replace all unused 'infer' with 'unknown'\"),Add_parameter_name:b(90034,3,\"Add_parameter_name_90034\",\"Add parameter name\"),Declare_private_property_0:b(90035,3,\"Declare_private_property_0_90035\",\"Declare private property '{0}'\"),Replace_0_with_Promise_1:b(90036,3,\"Replace_0_with_Promise_1_90036\",\"Replace '{0}' with 'Promise<{1}>'\"),Fix_all_incorrect_return_type_of_an_async_functions:b(90037,3,\"Fix_all_incorrect_return_type_of_an_async_functions_90037\",\"Fix all incorrect return type of an async functions\"),Declare_private_method_0:b(90038,3,\"Declare_private_method_0_90038\",\"Declare private method '{0}'\"),Remove_unused_destructuring_declaration:b(90039,3,\"Remove_unused_destructuring_declaration_90039\",\"Remove unused destructuring declaration\"),Remove_unused_declarations_for_Colon_0:b(90041,3,\"Remove_unused_declarations_for_Colon_0_90041\",\"Remove unused declarations for: '{0}'\"),Declare_a_private_field_named_0:b(90053,3,\"Declare_a_private_field_named_0_90053\",\"Declare a private field named '{0}'.\"),Includes_imports_of_types_referenced_by_0:b(90054,3,\"Includes_imports_of_types_referenced_by_0_90054\",\"Includes imports of types referenced by '{0}'\"),Remove_type_from_import_declaration_from_0:b(90055,3,\"Remove_type_from_import_declaration_from_0_90055\",`Remove 'type' from import declaration from \"{0}\"`),Remove_type_from_import_of_0_from_1:b(90056,3,\"Remove_type_from_import_of_0_from_1_90056\",`Remove 'type' from import of '{0}' from \"{1}\"`),Add_import_from_0:b(90057,3,\"Add_import_from_0_90057\",'Add import from \"{0}\"'),Update_import_from_0:b(90058,3,\"Update_import_from_0_90058\",'Update import from \"{0}\"'),Export_0_from_module_1:b(90059,3,\"Export_0_from_module_1_90059\",\"Export '{0}' from module '{1}'\"),Export_all_referenced_locals:b(90060,3,\"Export_all_referenced_locals_90060\",\"Export all referenced locals\"),Convert_function_to_an_ES2015_class:b(95001,3,\"Convert_function_to_an_ES2015_class_95001\",\"Convert function to an ES2015 class\"),Convert_0_to_1_in_0:b(95003,3,\"Convert_0_to_1_in_0_95003\",\"Convert '{0}' to '{1} in {0}'\"),Extract_to_0_in_1:b(95004,3,\"Extract_to_0_in_1_95004\",\"Extract to {0} in {1}\"),Extract_function:b(95005,3,\"Extract_function_95005\",\"Extract function\"),Extract_constant:b(95006,3,\"Extract_constant_95006\",\"Extract constant\"),Extract_to_0_in_enclosing_scope:b(95007,3,\"Extract_to_0_in_enclosing_scope_95007\",\"Extract to {0} in enclosing scope\"),Extract_to_0_in_1_scope:b(95008,3,\"Extract_to_0_in_1_scope_95008\",\"Extract to {0} in {1} scope\"),Annotate_with_type_from_JSDoc:b(95009,3,\"Annotate_with_type_from_JSDoc_95009\",\"Annotate with type from JSDoc\"),Infer_type_of_0_from_usage:b(95011,3,\"Infer_type_of_0_from_usage_95011\",\"Infer type of '{0}' from usage\"),Infer_parameter_types_from_usage:b(95012,3,\"Infer_parameter_types_from_usage_95012\",\"Infer parameter types from usage\"),Convert_to_default_import:b(95013,3,\"Convert_to_default_import_95013\",\"Convert to default import\"),Install_0:b(95014,3,\"Install_0_95014\",\"Install '{0}'\"),Replace_import_with_0:b(95015,3,\"Replace_import_with_0_95015\",\"Replace import with '{0}'.\"),Use_synthetic_default_member:b(95016,3,\"Use_synthetic_default_member_95016\",\"Use synthetic 'default' member.\"),Convert_to_ES_module:b(95017,3,\"Convert_to_ES_module_95017\",\"Convert to ES module\"),Add_undefined_type_to_property_0:b(95018,3,\"Add_undefined_type_to_property_0_95018\",\"Add 'undefined' type to property '{0}'\"),Add_initializer_to_property_0:b(95019,3,\"Add_initializer_to_property_0_95019\",\"Add initializer to property '{0}'\"),Add_definite_assignment_assertion_to_property_0:b(95020,3,\"Add_definite_assignment_assertion_to_property_0_95020\",\"Add definite assignment assertion to property '{0}'\"),Convert_all_type_literals_to_mapped_type:b(95021,3,\"Convert_all_type_literals_to_mapped_type_95021\",\"Convert all type literals to mapped type\"),Add_all_missing_members:b(95022,3,\"Add_all_missing_members_95022\",\"Add all missing members\"),Infer_all_types_from_usage:b(95023,3,\"Infer_all_types_from_usage_95023\",\"Infer all types from usage\"),Delete_all_unused_declarations:b(95024,3,\"Delete_all_unused_declarations_95024\",\"Delete all unused declarations\"),Prefix_all_unused_declarations_with_where_possible:b(95025,3,\"Prefix_all_unused_declarations_with_where_possible_95025\",\"Prefix all unused declarations with '_' where possible\"),Fix_all_detected_spelling_errors:b(95026,3,\"Fix_all_detected_spelling_errors_95026\",\"Fix all detected spelling errors\"),Add_initializers_to_all_uninitialized_properties:b(95027,3,\"Add_initializers_to_all_uninitialized_properties_95027\",\"Add initializers to all uninitialized properties\"),Add_definite_assignment_assertions_to_all_uninitialized_properties:b(95028,3,\"Add_definite_assignment_assertions_to_all_uninitialized_properties_95028\",\"Add definite assignment assertions to all uninitialized properties\"),Add_undefined_type_to_all_uninitialized_properties:b(95029,3,\"Add_undefined_type_to_all_uninitialized_properties_95029\",\"Add undefined type to all uninitialized properties\"),Change_all_jsdoc_style_types_to_TypeScript:b(95030,3,\"Change_all_jsdoc_style_types_to_TypeScript_95030\",\"Change all jsdoc-style types to TypeScript\"),Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types:b(95031,3,\"Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031\",\"Change all jsdoc-style types to TypeScript (and add '| undefined' to nullable types)\"),Implement_all_unimplemented_interfaces:b(95032,3,\"Implement_all_unimplemented_interfaces_95032\",\"Implement all unimplemented interfaces\"),Install_all_missing_types_packages:b(95033,3,\"Install_all_missing_types_packages_95033\",\"Install all missing types packages\"),Rewrite_all_as_indexed_access_types:b(95034,3,\"Rewrite_all_as_indexed_access_types_95034\",\"Rewrite all as indexed access types\"),Convert_all_to_default_imports:b(95035,3,\"Convert_all_to_default_imports_95035\",\"Convert all to default imports\"),Make_all_super_calls_the_first_statement_in_their_constructor:b(95036,3,\"Make_all_super_calls_the_first_statement_in_their_constructor_95036\",\"Make all 'super()' calls the first statement in their constructor\"),Add_qualifier_to_all_unresolved_variables_matching_a_member_name:b(95037,3,\"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037\",\"Add qualifier to all unresolved variables matching a member name\"),Change_all_extended_interfaces_to_implements:b(95038,3,\"Change_all_extended_interfaces_to_implements_95038\",\"Change all extended interfaces to 'implements'\"),Add_all_missing_super_calls:b(95039,3,\"Add_all_missing_super_calls_95039\",\"Add all missing super calls\"),Implement_all_inherited_abstract_classes:b(95040,3,\"Implement_all_inherited_abstract_classes_95040\",\"Implement all inherited abstract classes\"),Add_all_missing_async_modifiers:b(95041,3,\"Add_all_missing_async_modifiers_95041\",\"Add all missing 'async' modifiers\"),Add_ts_ignore_to_all_error_messages:b(95042,3,\"Add_ts_ignore_to_all_error_messages_95042\",\"Add '@ts-ignore' to all error messages\"),Annotate_everything_with_types_from_JSDoc:b(95043,3,\"Annotate_everything_with_types_from_JSDoc_95043\",\"Annotate everything with types from JSDoc\"),Add_to_all_uncalled_decorators:b(95044,3,\"Add_to_all_uncalled_decorators_95044\",\"Add '()' to all uncalled decorators\"),Convert_all_constructor_functions_to_classes:b(95045,3,\"Convert_all_constructor_functions_to_classes_95045\",\"Convert all constructor functions to classes\"),Generate_get_and_set_accessors:b(95046,3,\"Generate_get_and_set_accessors_95046\",\"Generate 'get' and 'set' accessors\"),Convert_require_to_import:b(95047,3,\"Convert_require_to_import_95047\",\"Convert 'require' to 'import'\"),Convert_all_require_to_import:b(95048,3,\"Convert_all_require_to_import_95048\",\"Convert all 'require' to 'import'\"),Move_to_a_new_file:b(95049,3,\"Move_to_a_new_file_95049\",\"Move to a new file\"),Remove_unreachable_code:b(95050,3,\"Remove_unreachable_code_95050\",\"Remove unreachable code\"),Remove_all_unreachable_code:b(95051,3,\"Remove_all_unreachable_code_95051\",\"Remove all unreachable code\"),Add_missing_typeof:b(95052,3,\"Add_missing_typeof_95052\",\"Add missing 'typeof'\"),Remove_unused_label:b(95053,3,\"Remove_unused_label_95053\",\"Remove unused label\"),Remove_all_unused_labels:b(95054,3,\"Remove_all_unused_labels_95054\",\"Remove all unused labels\"),Convert_0_to_mapped_object_type:b(95055,3,\"Convert_0_to_mapped_object_type_95055\",\"Convert '{0}' to mapped object type\"),Convert_namespace_import_to_named_imports:b(95056,3,\"Convert_namespace_import_to_named_imports_95056\",\"Convert namespace import to named imports\"),Convert_named_imports_to_namespace_import:b(95057,3,\"Convert_named_imports_to_namespace_import_95057\",\"Convert named imports to namespace import\"),Add_or_remove_braces_in_an_arrow_function:b(95058,3,\"Add_or_remove_braces_in_an_arrow_function_95058\",\"Add or remove braces in an arrow function\"),Add_braces_to_arrow_function:b(95059,3,\"Add_braces_to_arrow_function_95059\",\"Add braces to arrow function\"),Remove_braces_from_arrow_function:b(95060,3,\"Remove_braces_from_arrow_function_95060\",\"Remove braces from arrow function\"),Convert_default_export_to_named_export:b(95061,3,\"Convert_default_export_to_named_export_95061\",\"Convert default export to named export\"),Convert_named_export_to_default_export:b(95062,3,\"Convert_named_export_to_default_export_95062\",\"Convert named export to default export\"),Add_missing_enum_member_0:b(95063,3,\"Add_missing_enum_member_0_95063\",\"Add missing enum member '{0}'\"),Add_all_missing_imports:b(95064,3,\"Add_all_missing_imports_95064\",\"Add all missing imports\"),Convert_to_async_function:b(95065,3,\"Convert_to_async_function_95065\",\"Convert to async function\"),Convert_all_to_async_functions:b(95066,3,\"Convert_all_to_async_functions_95066\",\"Convert all to async functions\"),Add_missing_call_parentheses:b(95067,3,\"Add_missing_call_parentheses_95067\",\"Add missing call parentheses\"),Add_all_missing_call_parentheses:b(95068,3,\"Add_all_missing_call_parentheses_95068\",\"Add all missing call parentheses\"),Add_unknown_conversion_for_non_overlapping_types:b(95069,3,\"Add_unknown_conversion_for_non_overlapping_types_95069\",\"Add 'unknown' conversion for non-overlapping types\"),Add_unknown_to_all_conversions_of_non_overlapping_types:b(95070,3,\"Add_unknown_to_all_conversions_of_non_overlapping_types_95070\",\"Add 'unknown' to all conversions of non-overlapping types\"),Add_missing_new_operator_to_call:b(95071,3,\"Add_missing_new_operator_to_call_95071\",\"Add missing 'new' operator to call\"),Add_missing_new_operator_to_all_calls:b(95072,3,\"Add_missing_new_operator_to_all_calls_95072\",\"Add missing 'new' operator to all calls\"),Add_names_to_all_parameters_without_names:b(95073,3,\"Add_names_to_all_parameters_without_names_95073\",\"Add names to all parameters without names\"),Enable_the_experimentalDecorators_option_in_your_configuration_file:b(95074,3,\"Enable_the_experimentalDecorators_option_in_your_configuration_file_95074\",\"Enable the 'experimentalDecorators' option in your configuration file\"),Convert_parameters_to_destructured_object:b(95075,3,\"Convert_parameters_to_destructured_object_95075\",\"Convert parameters to destructured object\"),Extract_type:b(95077,3,\"Extract_type_95077\",\"Extract type\"),Extract_to_type_alias:b(95078,3,\"Extract_to_type_alias_95078\",\"Extract to type alias\"),Extract_to_typedef:b(95079,3,\"Extract_to_typedef_95079\",\"Extract to typedef\"),Infer_this_type_of_0_from_usage:b(95080,3,\"Infer_this_type_of_0_from_usage_95080\",\"Infer 'this' type of '{0}' from usage\"),Add_const_to_unresolved_variable:b(95081,3,\"Add_const_to_unresolved_variable_95081\",\"Add 'const' to unresolved variable\"),Add_const_to_all_unresolved_variables:b(95082,3,\"Add_const_to_all_unresolved_variables_95082\",\"Add 'const' to all unresolved variables\"),Add_await:b(95083,3,\"Add_await_95083\",\"Add 'await'\"),Add_await_to_initializer_for_0:b(95084,3,\"Add_await_to_initializer_for_0_95084\",\"Add 'await' to initializer for '{0}'\"),Fix_all_expressions_possibly_missing_await:b(95085,3,\"Fix_all_expressions_possibly_missing_await_95085\",\"Fix all expressions possibly missing 'await'\"),Remove_unnecessary_await:b(95086,3,\"Remove_unnecessary_await_95086\",\"Remove unnecessary 'await'\"),Remove_all_unnecessary_uses_of_await:b(95087,3,\"Remove_all_unnecessary_uses_of_await_95087\",\"Remove all unnecessary uses of 'await'\"),Enable_the_jsx_flag_in_your_configuration_file:b(95088,3,\"Enable_the_jsx_flag_in_your_configuration_file_95088\",\"Enable the '--jsx' flag in your configuration file\"),Add_await_to_initializers:b(95089,3,\"Add_await_to_initializers_95089\",\"Add 'await' to initializers\"),Extract_to_interface:b(95090,3,\"Extract_to_interface_95090\",\"Extract to interface\"),Convert_to_a_bigint_numeric_literal:b(95091,3,\"Convert_to_a_bigint_numeric_literal_95091\",\"Convert to a bigint numeric literal\"),Convert_all_to_bigint_numeric_literals:b(95092,3,\"Convert_all_to_bigint_numeric_literals_95092\",\"Convert all to bigint numeric literals\"),Convert_const_to_let:b(95093,3,\"Convert_const_to_let_95093\",\"Convert 'const' to 'let'\"),Prefix_with_declare:b(95094,3,\"Prefix_with_declare_95094\",\"Prefix with 'declare'\"),Prefix_all_incorrect_property_declarations_with_declare:b(95095,3,\"Prefix_all_incorrect_property_declarations_with_declare_95095\",\"Prefix all incorrect property declarations with 'declare'\"),Convert_to_template_string:b(95096,3,\"Convert_to_template_string_95096\",\"Convert to template string\"),Add_export_to_make_this_file_into_a_module:b(95097,3,\"Add_export_to_make_this_file_into_a_module_95097\",\"Add 'export {}' to make this file into a module\"),Set_the_target_option_in_your_configuration_file_to_0:b(95098,3,\"Set_the_target_option_in_your_configuration_file_to_0_95098\",\"Set the 'target' option in your configuration file to '{0}'\"),Set_the_module_option_in_your_configuration_file_to_0:b(95099,3,\"Set_the_module_option_in_your_configuration_file_to_0_95099\",\"Set the 'module' option in your configuration file to '{0}'\"),Convert_invalid_character_to_its_html_entity_code:b(95100,3,\"Convert_invalid_character_to_its_html_entity_code_95100\",\"Convert invalid character to its html entity code\"),Convert_all_invalid_characters_to_HTML_entity_code:b(95101,3,\"Convert_all_invalid_characters_to_HTML_entity_code_95101\",\"Convert all invalid characters to HTML entity code\"),Convert_all_const_to_let:b(95102,3,\"Convert_all_const_to_let_95102\",\"Convert all 'const' to 'let'\"),Convert_function_expression_0_to_arrow_function:b(95105,3,\"Convert_function_expression_0_to_arrow_function_95105\",\"Convert function expression '{0}' to arrow function\"),Convert_function_declaration_0_to_arrow_function:b(95106,3,\"Convert_function_declaration_0_to_arrow_function_95106\",\"Convert function declaration '{0}' to arrow function\"),Fix_all_implicit_this_errors:b(95107,3,\"Fix_all_implicit_this_errors_95107\",\"Fix all implicit-'this' errors\"),Wrap_invalid_character_in_an_expression_container:b(95108,3,\"Wrap_invalid_character_in_an_expression_container_95108\",\"Wrap invalid character in an expression container\"),Wrap_all_invalid_characters_in_an_expression_container:b(95109,3,\"Wrap_all_invalid_characters_in_an_expression_container_95109\",\"Wrap all invalid characters in an expression container\"),Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file:b(95110,3,\"Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110\",\"Visit https://aka.ms/tsconfig to read more about this file\"),Add_a_return_statement:b(95111,3,\"Add_a_return_statement_95111\",\"Add a return statement\"),Remove_braces_from_arrow_function_body:b(95112,3,\"Remove_braces_from_arrow_function_body_95112\",\"Remove braces from arrow function body\"),Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal:b(95113,3,\"Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113\",\"Wrap the following body with parentheses which should be an object literal\"),Add_all_missing_return_statement:b(95114,3,\"Add_all_missing_return_statement_95114\",\"Add all missing return statement\"),Remove_braces_from_all_arrow_function_bodies_with_relevant_issues:b(95115,3,\"Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115\",\"Remove braces from all arrow function bodies with relevant issues\"),Wrap_all_object_literal_with_parentheses:b(95116,3,\"Wrap_all_object_literal_with_parentheses_95116\",\"Wrap all object literal with parentheses\"),Move_labeled_tuple_element_modifiers_to_labels:b(95117,3,\"Move_labeled_tuple_element_modifiers_to_labels_95117\",\"Move labeled tuple element modifiers to labels\"),Convert_overload_list_to_single_signature:b(95118,3,\"Convert_overload_list_to_single_signature_95118\",\"Convert overload list to single signature\"),Generate_get_and_set_accessors_for_all_overriding_properties:b(95119,3,\"Generate_get_and_set_accessors_for_all_overriding_properties_95119\",\"Generate 'get' and 'set' accessors for all overriding properties\"),Wrap_in_JSX_fragment:b(95120,3,\"Wrap_in_JSX_fragment_95120\",\"Wrap in JSX fragment\"),Wrap_all_unparented_JSX_in_JSX_fragment:b(95121,3,\"Wrap_all_unparented_JSX_in_JSX_fragment_95121\",\"Wrap all unparented JSX in JSX fragment\"),Convert_arrow_function_or_function_expression:b(95122,3,\"Convert_arrow_function_or_function_expression_95122\",\"Convert arrow function or function expression\"),Convert_to_anonymous_function:b(95123,3,\"Convert_to_anonymous_function_95123\",\"Convert to anonymous function\"),Convert_to_named_function:b(95124,3,\"Convert_to_named_function_95124\",\"Convert to named function\"),Convert_to_arrow_function:b(95125,3,\"Convert_to_arrow_function_95125\",\"Convert to arrow function\"),Remove_parentheses:b(95126,3,\"Remove_parentheses_95126\",\"Remove parentheses\"),Could_not_find_a_containing_arrow_function:b(95127,3,\"Could_not_find_a_containing_arrow_function_95127\",\"Could not find a containing arrow function\"),Containing_function_is_not_an_arrow_function:b(95128,3,\"Containing_function_is_not_an_arrow_function_95128\",\"Containing function is not an arrow function\"),Could_not_find_export_statement:b(95129,3,\"Could_not_find_export_statement_95129\",\"Could not find export statement\"),This_file_already_has_a_default_export:b(95130,3,\"This_file_already_has_a_default_export_95130\",\"This file already has a default export\"),Could_not_find_import_clause:b(95131,3,\"Could_not_find_import_clause_95131\",\"Could not find import clause\"),Could_not_find_namespace_import_or_named_imports:b(95132,3,\"Could_not_find_namespace_import_or_named_imports_95132\",\"Could not find namespace import or named imports\"),Selection_is_not_a_valid_type_node:b(95133,3,\"Selection_is_not_a_valid_type_node_95133\",\"Selection is not a valid type node\"),No_type_could_be_extracted_from_this_type_node:b(95134,3,\"No_type_could_be_extracted_from_this_type_node_95134\",\"No type could be extracted from this type node\"),Could_not_find_property_for_which_to_generate_accessor:b(95135,3,\"Could_not_find_property_for_which_to_generate_accessor_95135\",\"Could not find property for which to generate accessor\"),Name_is_not_valid:b(95136,3,\"Name_is_not_valid_95136\",\"Name is not valid\"),Can_only_convert_property_with_modifier:b(95137,3,\"Can_only_convert_property_with_modifier_95137\",\"Can only convert property with modifier\"),Switch_each_misused_0_to_1:b(95138,3,\"Switch_each_misused_0_to_1_95138\",\"Switch each misused '{0}' to '{1}'\"),Convert_to_optional_chain_expression:b(95139,3,\"Convert_to_optional_chain_expression_95139\",\"Convert to optional chain expression\"),Could_not_find_convertible_access_expression:b(95140,3,\"Could_not_find_convertible_access_expression_95140\",\"Could not find convertible access expression\"),Could_not_find_matching_access_expressions:b(95141,3,\"Could_not_find_matching_access_expressions_95141\",\"Could not find matching access expressions\"),Can_only_convert_logical_AND_access_chains:b(95142,3,\"Can_only_convert_logical_AND_access_chains_95142\",\"Can only convert logical AND access chains\"),Add_void_to_Promise_resolved_without_a_value:b(95143,3,\"Add_void_to_Promise_resolved_without_a_value_95143\",\"Add 'void' to Promise resolved without a value\"),Add_void_to_all_Promises_resolved_without_a_value:b(95144,3,\"Add_void_to_all_Promises_resolved_without_a_value_95144\",\"Add 'void' to all Promises resolved without a value\"),Use_element_access_for_0:b(95145,3,\"Use_element_access_for_0_95145\",\"Use element access for '{0}'\"),Use_element_access_for_all_undeclared_properties:b(95146,3,\"Use_element_access_for_all_undeclared_properties_95146\",\"Use element access for all undeclared properties.\"),Delete_all_unused_imports:b(95147,3,\"Delete_all_unused_imports_95147\",\"Delete all unused imports\"),Infer_function_return_type:b(95148,3,\"Infer_function_return_type_95148\",\"Infer function return type\"),Return_type_must_be_inferred_from_a_function:b(95149,3,\"Return_type_must_be_inferred_from_a_function_95149\",\"Return type must be inferred from a function\"),Could_not_determine_function_return_type:b(95150,3,\"Could_not_determine_function_return_type_95150\",\"Could not determine function return type\"),Could_not_convert_to_arrow_function:b(95151,3,\"Could_not_convert_to_arrow_function_95151\",\"Could not convert to arrow function\"),Could_not_convert_to_named_function:b(95152,3,\"Could_not_convert_to_named_function_95152\",\"Could not convert to named function\"),Could_not_convert_to_anonymous_function:b(95153,3,\"Could_not_convert_to_anonymous_function_95153\",\"Could not convert to anonymous function\"),Can_only_convert_string_concatenation:b(95154,3,\"Can_only_convert_string_concatenation_95154\",\"Can only convert string concatenation\"),Selection_is_not_a_valid_statement_or_statements:b(95155,3,\"Selection_is_not_a_valid_statement_or_statements_95155\",\"Selection is not a valid statement or statements\"),Add_missing_function_declaration_0:b(95156,3,\"Add_missing_function_declaration_0_95156\",\"Add missing function declaration '{0}'\"),Add_all_missing_function_declarations:b(95157,3,\"Add_all_missing_function_declarations_95157\",\"Add all missing function declarations\"),Method_not_implemented:b(95158,3,\"Method_not_implemented_95158\",\"Method not implemented.\"),Function_not_implemented:b(95159,3,\"Function_not_implemented_95159\",\"Function not implemented.\"),Add_override_modifier:b(95160,3,\"Add_override_modifier_95160\",\"Add 'override' modifier\"),Remove_override_modifier:b(95161,3,\"Remove_override_modifier_95161\",\"Remove 'override' modifier\"),Add_all_missing_override_modifiers:b(95162,3,\"Add_all_missing_override_modifiers_95162\",\"Add all missing 'override' modifiers\"),Remove_all_unnecessary_override_modifiers:b(95163,3,\"Remove_all_unnecessary_override_modifiers_95163\",\"Remove all unnecessary 'override' modifiers\"),Can_only_convert_named_export:b(95164,3,\"Can_only_convert_named_export_95164\",\"Can only convert named export\"),Add_missing_properties:b(95165,3,\"Add_missing_properties_95165\",\"Add missing properties\"),Add_all_missing_properties:b(95166,3,\"Add_all_missing_properties_95166\",\"Add all missing properties\"),Add_missing_attributes:b(95167,3,\"Add_missing_attributes_95167\",\"Add missing attributes\"),Add_all_missing_attributes:b(95168,3,\"Add_all_missing_attributes_95168\",\"Add all missing attributes\"),Add_undefined_to_optional_property_type:b(95169,3,\"Add_undefined_to_optional_property_type_95169\",\"Add 'undefined' to optional property type\"),Convert_named_imports_to_default_import:b(95170,3,\"Convert_named_imports_to_default_import_95170\",\"Convert named imports to default import\"),Delete_unused_param_tag_0:b(95171,3,\"Delete_unused_param_tag_0_95171\",\"Delete unused '@param' tag '{0}'\"),Delete_all_unused_param_tags:b(95172,3,\"Delete_all_unused_param_tags_95172\",\"Delete all unused '@param' tags\"),Rename_param_tag_name_0_to_1:b(95173,3,\"Rename_param_tag_name_0_to_1_95173\",\"Rename '@param' tag name '{0}' to '{1}'\"),Use_0:b(95174,3,\"Use_0_95174\",\"Use `{0}`.\"),Use_Number_isNaN_in_all_conditions:b(95175,3,\"Use_Number_isNaN_in_all_conditions_95175\",\"Use `Number.isNaN` in all conditions.\"),No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer:b(18004,1,\"No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004\",\"No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer.\"),Classes_may_not_have_a_field_named_constructor:b(18006,1,\"Classes_may_not_have_a_field_named_constructor_18006\",\"Classes may not have a field named 'constructor'.\"),JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array:b(18007,1,\"JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007\",\"JSX expressions may not use the comma operator. Did you mean to write an array?\"),Private_identifiers_cannot_be_used_as_parameters:b(18009,1,\"Private_identifiers_cannot_be_used_as_parameters_18009\",\"Private identifiers cannot be used as parameters.\"),An_accessibility_modifier_cannot_be_used_with_a_private_identifier:b(18010,1,\"An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010\",\"An accessibility modifier cannot be used with a private identifier.\"),The_operand_of_a_delete_operator_cannot_be_a_private_identifier:b(18011,1,\"The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011\",\"The operand of a 'delete' operator cannot be a private identifier.\"),constructor_is_a_reserved_word:b(18012,1,\"constructor_is_a_reserved_word_18012\",\"'#constructor' is a reserved word.\"),Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier:b(18013,1,\"Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013\",\"Property '{0}' is not accessible outside class '{1}' because it has a private identifier.\"),The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_private_identifier_with_the_same_spelling:b(18014,1,\"The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014\",\"The property '{0}' cannot be accessed on type '{1}' within this class because it is shadowed by another private identifier with the same spelling.\"),Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2:b(18015,1,\"Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015\",\"Property '{0}' in type '{1}' refers to a different member that cannot be accessed from within type '{2}'.\"),Private_identifiers_are_not_allowed_outside_class_bodies:b(18016,1,\"Private_identifiers_are_not_allowed_outside_class_bodies_18016\",\"Private identifiers are not allowed outside class bodies.\"),The_shadowing_declaration_of_0_is_defined_here:b(18017,1,\"The_shadowing_declaration_of_0_is_defined_here_18017\",\"The shadowing declaration of '{0}' is defined here\"),The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here:b(18018,1,\"The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018\",\"The declaration of '{0}' that you probably intended to use is defined here\"),_0_modifier_cannot_be_used_with_a_private_identifier:b(18019,1,\"_0_modifier_cannot_be_used_with_a_private_identifier_18019\",\"'{0}' modifier cannot be used with a private identifier.\"),An_enum_member_cannot_be_named_with_a_private_identifier:b(18024,1,\"An_enum_member_cannot_be_named_with_a_private_identifier_18024\",\"An enum member cannot be named with a private identifier.\"),can_only_be_used_at_the_start_of_a_file:b(18026,1,\"can_only_be_used_at_the_start_of_a_file_18026\",\"'#!' can only be used at the start of a file.\"),Compiler_reserves_name_0_when_emitting_private_identifier_downlevel:b(18027,1,\"Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027\",\"Compiler reserves name '{0}' when emitting private identifier downlevel.\"),Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher:b(18028,1,\"Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028\",\"Private identifiers are only available when targeting ECMAScript 2015 and higher.\"),Private_identifiers_are_not_allowed_in_variable_declarations:b(18029,1,\"Private_identifiers_are_not_allowed_in_variable_declarations_18029\",\"Private identifiers are not allowed in variable declarations.\"),An_optional_chain_cannot_contain_private_identifiers:b(18030,1,\"An_optional_chain_cannot_contain_private_identifiers_18030\",\"An optional chain cannot contain private identifiers.\"),The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents:b(18031,1,\"The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031\",\"The intersection '{0}' was reduced to 'never' because property '{1}' has conflicting types in some constituents.\"),The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_private_in_some:b(18032,1,\"The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032\",\"The intersection '{0}' was reduced to 'never' because property '{1}' exists in multiple constituents and is private in some.\"),Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values:b(18033,1,\"Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033\",\"Type '{0}' is not assignable to type '{1}' as required for computed enum member values.\"),Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment:b(18034,3,\"Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034\",\"Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'.\"),Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name:b(18035,1,\"Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035\",\"Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name.\"),Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator:b(18036,1,\"Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036\",\"Class decorators can't be used with static private identifier. Consider removing the experimental decorator.\"),Await_expression_cannot_be_used_inside_a_class_static_block:b(18037,1,\"Await_expression_cannot_be_used_inside_a_class_static_block_18037\",\"Await expression cannot be used inside a class static block.\"),For_await_loops_cannot_be_used_inside_a_class_static_block:b(18038,1,\"For_await_loops_cannot_be_used_inside_a_class_static_block_18038\",\"'For await' loops cannot be used inside a class static block.\"),Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block:b(18039,1,\"Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039\",\"Invalid use of '{0}'. It cannot be used inside a class static block.\"),A_return_statement_cannot_be_used_inside_a_class_static_block:b(18041,1,\"A_return_statement_cannot_be_used_inside_a_class_static_block_18041\",\"A 'return' statement cannot be used inside a class static block.\"),_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation:b(18042,1,\"_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042\",\"'{0}' is a type and cannot be imported in JavaScript files. Use '{1}' in a JSDoc type annotation.\"),Types_cannot_appear_in_export_declarations_in_JavaScript_files:b(18043,1,\"Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043\",\"Types cannot appear in export declarations in JavaScript files.\"),_0_is_automatically_exported_here:b(18044,3,\"_0_is_automatically_exported_here_18044\",\"'{0}' is automatically exported here.\"),Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher:b(18045,1,\"Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045\",\"Properties with the 'accessor' modifier are only available when targeting ECMAScript 2015 and higher.\"),_0_is_of_type_unknown:b(18046,1,\"_0_is_of_type_unknown_18046\",\"'{0}' is of type 'unknown'.\"),_0_is_possibly_null:b(18047,1,\"_0_is_possibly_null_18047\",\"'{0}' is possibly 'null'.\"),_0_is_possibly_undefined:b(18048,1,\"_0_is_possibly_undefined_18048\",\"'{0}' is possibly 'undefined'.\"),_0_is_possibly_null_or_undefined:b(18049,1,\"_0_is_possibly_null_or_undefined_18049\",\"'{0}' is possibly 'null' or 'undefined'.\"),The_value_0_cannot_be_used_here:b(18050,1,\"The_value_0_cannot_be_used_here_18050\",\"The value '{0}' cannot be used here.\"),Compiler_option_0_cannot_be_given_an_empty_string:b(18051,1,\"Compiler_option_0_cannot_be_given_an_empty_string_18051\",\"Compiler option '{0}' cannot be given an empty string.\")}}});function Su(e){return e>=79}function moe(e){return e===31||Su(e)}function iI(e,t){if(e<t[0])return!1;let r=0,i=t.length,o;for(;r+1<i;){if(o=r+(i-r)/2,o-=o%2,t[o]<=e&&e<=t[o+1])return!0;e<t[o]?i=o:r=o+2}return!1}function W8(e,t){return t>=2?iI(e,Aoe):t===1?iI(e,Soe):iI(e,Eoe)}function wDe(e,t){return t>=2?iI(e,Coe):t===1?iI(e,xoe):iI(e,Toe)}function RDe(e){let t=[];return e.forEach((r,i)=>{t[r]=i}),t}function Xa(e){return koe[e]}function lT(e){return vj.get(e)}function hw(e){let t=[],r=0,i=0;for(;r<e.length;){let o=e.charCodeAt(r);switch(r++,o){case 13:e.charCodeAt(r)===10&&r++;case 10:t.push(i),i=r;break;default:o>127&&Wl(o)&&(t.push(i),i=r);break}}return t.push(i),t}function gw(e,t,r,i){return e.getPositionOfLineAndCharacter?e.getPositionOfLineAndCharacter(t,r,i):mj(Sh(e),t,r,e.text,i)}function mj(e,t,r,i,o){(t<0||t>=e.length)&&(o?t=t<0?0:t>=e.length?e.length-1:t:L.fail(`Bad line number. Line: ${t}, lineStarts.length: ${e.length} , line map is correct? ${i!==void 0?GD(e,hw(i)):\"unknown\"}`));let s=e[t]+r;return o?s>e[t+1]?e[t+1]:typeof i==\"string\"&&s>i.length?i.length:s:(t<e.length-1?L.assert(s<e[t+1]):i!==void 0&&L.assert(s<=i.length),s)}function Sh(e){return e.lineMap||(e.lineMap=hw(e.text))}function yw(e,t){let r=aI(e,t);return{line:r,character:t-e[r]}}function aI(e,t,r){let i=Py(e,t,Ks,Es,r);return i<0&&(i=~i-1,L.assert(i!==-1,\"position cannot precede the beginning of the file\")),i}function oI(e,t,r){if(t===r)return 0;let i=Sh(e),o=Math.min(t,r),s=o===r,l=s?t:r,f=aI(i,o),d=aI(i,l,f);return s?f-d:d-f}function Gs(e,t){return yw(Sh(e),t)}function xh(e){return Yp(e)||Wl(e)}function Yp(e){return e===32||e===9||e===11||e===12||e===160||e===133||e===5760||e>=8192&&e<=8203||e===8239||e===8287||e===12288||e===65279}function Wl(e){return e===10||e===13||e===8232||e===8233}function sI(e){return e>=48&&e<=57}function z8(e){return sI(e)||e>=65&&e<=70||e>=97&&e<=102}function ODe(e){return e<=1114111}function hj(e){return e>=48&&e<=55}function hoe(e,t){let r=e.charCodeAt(t);switch(r){case 13:case 10:case 9:case 11:case 12:case 32:case 47:case 60:case 124:case 61:case 62:return!0;case 35:return t===0;default:return r>127}}function xo(e,t,r,i,o){if(vp(t))return t;let s=!1;for(;;){let l=e.charCodeAt(t);switch(l){case 13:e.charCodeAt(t+1)===10&&t++;case 10:if(t++,r)return t;s=!!o;continue;case 9:case 11:case 12:case 32:t++;continue;case 47:if(i)break;if(e.charCodeAt(t+1)===47){for(t+=2;t<e.length&&!Wl(e.charCodeAt(t));)t++;s=!1;continue}if(e.charCodeAt(t+1)===42){for(t+=2;t<e.length;){if(e.charCodeAt(t)===42&&e.charCodeAt(t+1)===47){t+=2;break}t++}s=!1;continue}break;case 60:case 124:case 61:case 62:if(yA(e,t)){t=cI(e,t),s=!1;continue}break;case 35:if(t===0&&gj(e,t)){t=yj(e,t),s=!1;continue}break;case 42:if(s){t++,s=!1;continue}break;default:if(l>127&&xh(l)){t++;continue}break}return t}}function yA(e,t){if(L.assert(t>=0),t===0||Wl(e.charCodeAt(t-1))){let r=e.charCodeAt(t);if(t+Tw<e.length){for(let i=0;i<Tw;i++)if(e.charCodeAt(t+i)!==r)return!1;return r===61||e.charCodeAt(t+Tw)===32}}return!1}function cI(e,t,r){r&&r(_.Merge_conflict_marker_encountered,t,Tw);let i=e.charCodeAt(t),o=e.length;if(i===60||i===62)for(;t<o&&!Wl(e.charCodeAt(t));)t++;else for(L.assert(i===124||i===61);t<o;){let s=e.charCodeAt(t);if((s===61||s===62)&&s!==i&&yA(e,t))break;t++}return t}function gj(e,t){return L.assert(t===0),q8.test(e)}function yj(e,t){let r=q8.exec(e)[0];return t=t+r.length,t}function J8(e,t,r,i,o,s,l){let f,d,g,m,v=!1,S=i,x=l;if(r===0){S=!0;let A=K8(t);A&&(r=A.length)}e:for(;r>=0&&r<t.length;){let A=t.charCodeAt(r);switch(A){case 13:t.charCodeAt(r+1)===10&&r++;case 10:if(r++,i)break e;S=!0,v&&(m=!0);continue;case 9:case 11:case 12:case 32:r++;continue;case 47:let w=t.charCodeAt(r+1),C=!1;if(w===47||w===42){let P=w===47?2:3,F=r;if(r+=2,w===47)for(;r<t.length;){if(Wl(t.charCodeAt(r))){C=!0;break}r++}else for(;r<t.length;){if(t.charCodeAt(r)===42&&t.charCodeAt(r+1)===47){r+=2;break}r++}if(S){if(v&&(x=o(f,d,g,m,s,x),!e&&x))return x;f=F,d=r,g=P,m=C,v=!0}continue}break e;default:if(A>127&&xh(A)){v&&Wl(A)&&(m=!0),r++;continue}break e}}return v&&(x=o(f,d,g,m,s,x)),x}function vw(e,t,r,i){return J8(!1,e,t,!1,r,i)}function bw(e,t,r,i){return J8(!1,e,t,!0,r,i)}function goe(e,t,r,i,o){return J8(!0,e,t,!1,r,i,o)}function yoe(e,t,r,i,o){return J8(!0,e,t,!0,r,i,o)}function voe(e,t,r,i,o,s=[]){return s.push({kind:r,pos:e,end:t,hasTrailingNewLine:i}),s}function Nm(e,t){return goe(e,t,voe,void 0,void 0)}function eb(e,t){return yoe(e,t,voe,void 0,void 0)}function K8(e){let t=q8.exec(e);if(t)return t[0]}function Pm(e,t){return e>=65&&e<=90||e>=97&&e<=122||e===36||e===95||e>127&&W8(e,t)}function tb(e,t,r){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||e===36||e===95||(r===1?e===45||e===58:!1)||e>127&&wDe(e,t)}function i_(e,t,r){let i=Dg(e,0);if(!Pm(i,t))return!1;for(let o=By(i);o<e.length;o+=By(i))if(!tb(i=Dg(e,o),t,r))return!1;return!0}function kg(e,t,r=0,i,o,s,l){var f=i,d,g,m,v,S,x,A,w,C=0;Dt(f,s,l);var P={getStartPos:()=>m,getTextPos:()=>d,getToken:()=>S,getTokenPos:()=>v,getTokenText:()=>f.substring(v,d),getTokenValue:()=>x,hasUnicodeEscape:()=>(A&1024)!==0,hasExtendedUnicodeEscape:()=>(A&8)!==0,hasPrecedingLineBreak:()=>(A&1)!==0,hasPrecedingJSDocComment:()=>(A&2)!==0,isIdentifier:()=>S===79||S>116,isReservedWord:()=>S>=81&&S<=116,isUnterminated:()=>(A&4)!==0,getCommentDirectives:()=>w,getNumericLiteralFlags:()=>A&1008,getTokenFlags:()=>A,reScanGreaterToken:Be,reScanAsteriskEqualsToken:Ne,reScanSlashToken:Le,reScanTemplateToken:ct,reScanTemplateHeadOrNoSubstitutionTemplate:Rt,scanJsxIdentifier:kn,scanJsxAttributeValue:_n,reScanJsxAttributeValue:Gt,reScanJsxToken:We,reScanLessThanToken:qe,reScanHashToken:zt,reScanQuestionToken:Qt,reScanInvalidIdentifier:Ce,scanJsxToken:tn,scanJsDocToken:$n,scan:Pe,getText:pt,clearCommentDirectives:nn,setText:Dt,setScriptTarget:An,setLanguageVariant:Kn,setOnError:pn,setTextPos:hi,setInJSDocType:ri,tryScan:gr,lookAhead:Pi,scanRange:Ni};return L.isDebugging&&Object.defineProperty(P,\"__debugShowCurrentPositionInText\",{get:()=>{let vn=P.getText();return vn.slice(0,P.getStartPos())+\"\\u2551\"+vn.slice(P.getStartPos())}}),P;function F(vn,Ht=d,En){if(o){let dr=d;d=Ht,o(vn,En||0),d=dr}}function B(){let vn=d,Ht=!1,En=!1,dr=\"\";for(;;){let Cr=f.charCodeAt(d);if(Cr===95){A|=512,Ht?(Ht=!1,En=!0,dr+=f.substring(vn,d)):F(En?_.Multiple_consecutive_numeric_separators_are_not_permitted:_.Numeric_separators_are_not_allowed_here,d,1),d++,vn=d;continue}if(sI(Cr)){Ht=!0,En=!1,d++;continue}break}return f.charCodeAt(d-1)===95&&F(_.Numeric_separators_are_not_allowed_here,d-1,1),dr+f.substring(vn,d)}function q(){let vn=d,Ht=B(),En,dr;f.charCodeAt(d)===46&&(d++,En=B());let Cr=d;if(f.charCodeAt(d)===69||f.charCodeAt(d)===101){d++,A|=16,(f.charCodeAt(d)===43||f.charCodeAt(d)===45)&&d++;let at=d,Tt=B();Tt?(dr=f.substring(Cr,at)+Tt,Cr=d):F(_.Digit_expected)}let Se;if(A&512?(Se=Ht,En&&(Se+=\".\"+En),dr&&(Se+=dr)):Se=f.substring(vn,Cr),En!==void 0||A&16)return W(vn,En===void 0&&!!(A&16)),{type:8,value:\"\"+ +Se};{x=Se;let at=ke();return W(vn),{type:at,value:x}}}function W(vn,Ht){if(!Pm(Dg(f,d),e))return;let En=d,{length:dr}=X();dr===1&&f[En]===\"n\"?F(Ht?_.A_bigint_literal_cannot_use_exponential_notation:_.A_bigint_literal_must_be_an_integer,vn,En-vn+1):(F(_.An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal,En,dr),d=En)}function Y(){let vn=d;for(;hj(f.charCodeAt(d));)d++;return+f.substring(vn,d)}function R(vn,Ht){let En=$(vn,!1,Ht);return En?parseInt(En,16):-1}function ie(vn,Ht){return $(vn,!0,Ht)}function $(vn,Ht,En){let dr=[],Cr=!1,Se=!1;for(;dr.length<vn||Ht;){let at=f.charCodeAt(d);if(En&&at===95){A|=512,Cr?(Cr=!1,Se=!0):F(Se?_.Multiple_consecutive_numeric_separators_are_not_permitted:_.Numeric_separators_are_not_allowed_here,d,1),d++;continue}if(Cr=En,at>=65&&at<=70)at+=32;else if(!(at>=48&&at<=57||at>=97&&at<=102))break;dr.push(at),d++,Se=!1}return dr.length<vn&&(dr=[]),f.charCodeAt(d-1)===95&&F(_.Numeric_separators_are_not_allowed_here,d-1,1),String.fromCharCode(...dr)}function fe(vn=!1){let Ht=f.charCodeAt(d);d++;let En=\"\",dr=d;for(;;){if(d>=g){En+=f.substring(dr,d),A|=4,F(_.Unterminated_string_literal);break}let Cr=f.charCodeAt(d);if(Cr===Ht){En+=f.substring(dr,d),d++;break}if(Cr===92&&!vn){En+=f.substring(dr,d),En+=U(),dr=d;continue}if(Wl(Cr)&&!vn){En+=f.substring(dr,d),A|=4,F(_.Unterminated_string_literal);break}d++}return En}function Z(vn){let Ht=f.charCodeAt(d)===96;d++;let En=d,dr=\"\",Cr;for(;;){if(d>=g){dr+=f.substring(En,d),A|=4,F(_.Unterminated_template_literal),Cr=Ht?14:17;break}let Se=f.charCodeAt(d);if(Se===96){dr+=f.substring(En,d),d++,Cr=Ht?14:17;break}if(Se===36&&d+1<g&&f.charCodeAt(d+1)===123){dr+=f.substring(En,d),d+=2,Cr=Ht?15:16;break}if(Se===92){dr+=f.substring(En,d),dr+=U(vn),En=d;continue}if(Se===13){dr+=f.substring(En,d),d++,d<g&&f.charCodeAt(d)===10&&d++,dr+=`\n`,En=d;continue}d++}return L.assert(Cr!==void 0),x=dr,Cr}function U(vn){let Ht=d;if(d++,d>=g)return F(_.Unexpected_end_of_text),\"\";let En=f.charCodeAt(d);switch(d++,En){case 48:return vn&&d<g&&sI(f.charCodeAt(d))?(d++,A|=2048,f.substring(Ht,d)):\"\\0\";case 98:return\"\\b\";case 116:return\"\t\";case 110:return`\n`;case 118:return\"\\v\";case 102:return\"\\f\";case 114:return\"\\r\";case 39:return\"'\";case 34:return'\"';case 117:if(vn){for(let dr=d;dr<d+4;dr++)if(dr<g&&!z8(f.charCodeAt(dr))&&f.charCodeAt(dr)!==123)return d=dr,A|=2048,f.substring(Ht,d)}if(d<g&&f.charCodeAt(d)===123){if(d++,vn&&!z8(f.charCodeAt(d)))return A|=2048,f.substring(Ht,d);if(vn){let dr=d,Cr=ie(1,!1),Se=Cr?parseInt(Cr,16):-1;if(!ODe(Se)||f.charCodeAt(d)!==125)return A|=2048,f.substring(Ht,d);d=dr}return A|=8,le()}return A|=1024,re(4);case 120:if(vn)if(z8(f.charCodeAt(d))){if(!z8(f.charCodeAt(d+1)))return d++,A|=2048,f.substring(Ht,d)}else return A|=2048,f.substring(Ht,d);return re(2);case 13:d<g&&f.charCodeAt(d)===10&&d++;case 10:case 8232:case 8233:return\"\";default:return String.fromCharCode(En)}}function re(vn){let Ht=R(vn,!1);return Ht>=0?String.fromCharCode(Ht):(F(_.Hexadecimal_digit_expected),\"\")}function le(){let vn=ie(1,!1),Ht=vn?parseInt(vn,16):-1,En=!1;return Ht<0?(F(_.Hexadecimal_digit_expected),En=!0):Ht>1114111&&(F(_.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive),En=!0),d>=g?(F(_.Unexpected_end_of_text),En=!0):f.charCodeAt(d)===125?d++:(F(_.Unterminated_Unicode_escape_sequence),En=!0),En?\"\":lI(Ht)}function _e(){if(d+5<g&&f.charCodeAt(d+1)===117){let vn=d;d+=2;let Ht=R(4,!1);return d=vn,Ht}return-1}function ge(){if(Dg(f,d+1)===117&&Dg(f,d+2)===123){let vn=d;d+=3;let Ht=ie(1,!1),En=Ht?parseInt(Ht,16):-1;return d=vn,En}return-1}function X(){let vn=\"\",Ht=d;for(;d<g;){let En=Dg(f,d);if(tb(En,e))d+=By(En);else if(En===92){if(En=ge(),En>=0&&tb(En,e)){d+=3,A|=8,vn+=le(),Ht=d;continue}if(En=_e(),!(En>=0&&tb(En,e)))break;A|=1024,vn+=f.substring(Ht,d),vn+=lI(En),d+=6,Ht=d}else break}return vn+=f.substring(Ht,d),vn}function Ve(){let vn=x.length;if(vn>=2&&vn<=12){let Ht=x.charCodeAt(0);if(Ht>=97&&Ht<=122){let En=boe.get(x);if(En!==void 0)return S=En}}return S=79}function we(vn){let Ht=\"\",En=!1,dr=!1;for(;;){let Cr=f.charCodeAt(d);if(Cr===95){A|=512,En?(En=!1,dr=!0):F(dr?_.Multiple_consecutive_numeric_separators_are_not_permitted:_.Numeric_separators_are_not_allowed_here,d,1),d++;continue}if(En=!0,!sI(Cr)||Cr-48>=vn)break;Ht+=f[d],d++,dr=!1}return f.charCodeAt(d-1)===95&&F(_.Numeric_separators_are_not_allowed_here,d-1,1),Ht}function ke(){return f.charCodeAt(d)===110?(x+=\"n\",A&384&&(x=iL(x)+\"n\"),d++,9):(x=\"\"+(A&128?parseInt(x.slice(2),2):A&256?parseInt(x.slice(2),8):+x),8)}function Pe(){m=d,A=0;let vn=!1;for(;;){if(v=d,d>=g)return S=1;let Ht=Dg(f,d);if(Ht===35&&d===0&&gj(f,d)){if(d=yj(f,d),t)continue;return S=6}switch(Ht){case 10:case 13:if(A|=1,t){d++;continue}else return Ht===13&&d+1<g&&f.charCodeAt(d+1)===10?d+=2:d++,S=4;case 9:case 11:case 12:case 32:case 160:case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8203:case 8239:case 8287:case 12288:case 65279:if(t){d++;continue}else{for(;d<g&&Yp(f.charCodeAt(d));)d++;return S=5}case 33:return f.charCodeAt(d+1)===61?f.charCodeAt(d+2)===61?(d+=3,S=37):(d+=2,S=35):(d++,S=53);case 34:case 39:return x=fe(),S=10;case 96:return S=Z(!1);case 37:return f.charCodeAt(d+1)===61?(d+=2,S=69):(d++,S=44);case 38:return f.charCodeAt(d+1)===38?f.charCodeAt(d+2)===61?(d+=3,S=76):(d+=2,S=55):f.charCodeAt(d+1)===61?(d+=2,S=73):(d++,S=50);case 40:return d++,S=20;case 41:return d++,S=21;case 42:if(f.charCodeAt(d+1)===61)return d+=2,S=66;if(f.charCodeAt(d+1)===42)return f.charCodeAt(d+2)===61?(d+=3,S=67):(d+=2,S=42);if(d++,C&&!vn&&A&1){vn=!0;continue}return S=41;case 43:return f.charCodeAt(d+1)===43?(d+=2,S=45):f.charCodeAt(d+1)===61?(d+=2,S=64):(d++,S=39);case 44:return d++,S=27;case 45:return f.charCodeAt(d+1)===45?(d+=2,S=46):f.charCodeAt(d+1)===61?(d+=2,S=65):(d++,S=40);case 46:return sI(f.charCodeAt(d+1))?(x=q().value,S=8):f.charCodeAt(d+1)===46&&f.charCodeAt(d+2)===46?(d+=3,S=25):(d++,S=24);case 47:if(f.charCodeAt(d+1)===47){for(d+=2;d<g&&!Wl(f.charCodeAt(d));)d++;if(w=Ye(w,f.slice(v,d),Ioe,v),t)continue;return S=2}if(f.charCodeAt(d+1)===42){d+=2,f.charCodeAt(d)===42&&f.charCodeAt(d+1)!==47&&(A|=2);let Tt=!1,ve=v;for(;d<g;){let nt=f.charCodeAt(d);if(nt===42&&f.charCodeAt(d+1)===47){d+=2,Tt=!0;break}d++,Wl(nt)&&(ve=d,A|=1)}if(w=Ye(w,f.slice(ve,d),Loe,ve),Tt||F(_.Asterisk_Slash_expected),t)continue;return Tt||(A|=4),S=3}return f.charCodeAt(d+1)===61?(d+=2,S=68):(d++,S=43);case 48:if(d+2<g&&(f.charCodeAt(d+1)===88||f.charCodeAt(d+1)===120))return d+=2,x=ie(1,!0),x||(F(_.Hexadecimal_digit_expected),x=\"0\"),x=\"0x\"+x,A|=64,S=ke();if(d+2<g&&(f.charCodeAt(d+1)===66||f.charCodeAt(d+1)===98))return d+=2,x=we(2),x||(F(_.Binary_digit_expected),x=\"0\"),x=\"0b\"+x,A|=128,S=ke();if(d+2<g&&(f.charCodeAt(d+1)===79||f.charCodeAt(d+1)===111))return d+=2,x=we(8),x||(F(_.Octal_digit_expected),x=\"0\"),x=\"0o\"+x,A|=256,S=ke();if(d+1<g&&hj(f.charCodeAt(d+1)))return x=\"\"+Y(),A|=32,S=8;case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return{type:S,value:x}=q(),S;case 58:return d++,S=58;case 59:return d++,S=26;case 60:if(yA(f,d)){if(d=cI(f,d,F),t)continue;return S=7}return f.charCodeAt(d+1)===60?f.charCodeAt(d+2)===61?(d+=3,S=70):(d+=2,S=47):f.charCodeAt(d+1)===61?(d+=2,S=32):r===1&&f.charCodeAt(d+1)===47&&f.charCodeAt(d+2)!==42?(d+=2,S=30):(d++,S=29);case 61:if(yA(f,d)){if(d=cI(f,d,F),t)continue;return S=7}return f.charCodeAt(d+1)===61?f.charCodeAt(d+2)===61?(d+=3,S=36):(d+=2,S=34):f.charCodeAt(d+1)===62?(d+=2,S=38):(d++,S=63);case 62:if(yA(f,d)){if(d=cI(f,d,F),t)continue;return S=7}return d++,S=31;case 63:return f.charCodeAt(d+1)===46&&!sI(f.charCodeAt(d+2))?(d+=2,S=28):f.charCodeAt(d+1)===63?f.charCodeAt(d+2)===61?(d+=3,S=77):(d+=2,S=60):(d++,S=57);case 91:return d++,S=22;case 93:return d++,S=23;case 94:return f.charCodeAt(d+1)===61?(d+=2,S=78):(d++,S=52);case 123:return d++,S=18;case 124:if(yA(f,d)){if(d=cI(f,d,F),t)continue;return S=7}return f.charCodeAt(d+1)===124?f.charCodeAt(d+2)===61?(d+=3,S=75):(d+=2,S=56):f.charCodeAt(d+1)===61?(d+=2,S=74):(d++,S=51);case 125:return d++,S=19;case 126:return d++,S=54;case 64:return d++,S=59;case 92:let En=ge();if(En>=0&&Pm(En,e))return d+=3,A|=8,x=le()+X(),S=Ve();let dr=_e();return dr>=0&&Pm(dr,e)?(d+=6,A|=1024,x=String.fromCharCode(dr)+X(),S=Ve()):(F(_.Invalid_character),d++,S=0);case 35:if(d!==0&&f[d+1]===\"!\")return F(_.can_only_be_used_at_the_start_of_a_file),d++,S=0;let Cr=Dg(f,d+1);if(Cr===92){d++;let Tt=ge();if(Tt>=0&&Pm(Tt,e))return d+=3,A|=8,x=\"#\"+le()+X(),S=80;let ve=_e();if(ve>=0&&Pm(ve,e))return d+=6,A|=1024,x=\"#\"+String.fromCharCode(ve)+X(),S=80;d--}return Pm(Cr,e)?(d++,Ie(Cr,e)):(x=\"#\",F(_.Invalid_character,d++,By(Ht))),S=80;default:let Se=Ie(Ht,e);if(Se)return S=Se;if(Yp(Ht)){d+=By(Ht);continue}else if(Wl(Ht)){A|=1,d+=By(Ht);continue}let at=By(Ht);return F(_.Invalid_character,d,at),d+=at,S=0}}}function Ce(){L.assert(S===0,\"'reScanInvalidIdentifier' should only be called when the current token is 'SyntaxKind.Unknown'.\"),d=v=m,A=0;let vn=Dg(f,d),Ht=Ie(vn,99);return Ht?S=Ht:(d+=By(vn),S)}function Ie(vn,Ht){let En=vn;if(Pm(En,Ht)){for(d+=By(En);d<g&&tb(En=Dg(f,d),Ht);)d+=By(En);return x=f.substring(v,d),En===92&&(x+=X()),Ve()}}function Be(){if(S===31){if(f.charCodeAt(d)===62)return f.charCodeAt(d+1)===62?f.charCodeAt(d+2)===61?(d+=3,S=72):(d+=2,S=49):f.charCodeAt(d+1)===61?(d+=2,S=71):(d++,S=48);if(f.charCodeAt(d)===61)return d++,S=33}return S}function Ne(){return L.assert(S===66,\"'reScanAsteriskEqualsToken' should only be called on a '*='\"),d=v+1,S=63}function Le(){if(S===43||S===68){let vn=v+1,Ht=!1,En=!1;for(;;){if(vn>=g){A|=4,F(_.Unterminated_regular_expression_literal);break}let dr=f.charCodeAt(vn);if(Wl(dr)){A|=4,F(_.Unterminated_regular_expression_literal);break}if(Ht)Ht=!1;else if(dr===47&&!En){vn++;break}else dr===91?En=!0:dr===92?Ht=!0:dr===93&&(En=!1);vn++}for(;vn<g&&tb(f.charCodeAt(vn),e);)vn++;d=vn,x=f.substring(v,d),S=13}return S}function Ye(vn,Ht,En,dr){let Cr=_t(ZC(Ht),En);return Cr===void 0?vn:Sn(vn,{range:{pos:dr,end:d},type:Cr})}function _t(vn,Ht){let En=Ht.exec(vn);if(En)switch(En[1]){case\"ts-expect-error\":return 0;case\"ts-ignore\":return 1}}function ct(vn){return L.assert(S===19,\"'reScanTemplateToken' should only be called on a '}'\"),d=v,S=Z(vn)}function Rt(){return d=v,S=Z(!0)}function We(vn=!0){return d=v=m,S=tn(vn)}function qe(){return S===47?(d=v+1,S=29):S}function zt(){return S===80?(d=v+1,S=62):S}function Qt(){return L.assert(S===60,\"'reScanQuestionToken' should only be called on a '??'\"),d=v+1,S=57}function tn(vn=!0){if(m=v=d,d>=g)return S=1;let Ht=f.charCodeAt(d);if(Ht===60)return f.charCodeAt(d+1)===47?(d+=2,S=30):(d++,S=29);if(Ht===123)return d++,S=18;let En=0;for(;d<g&&(Ht=f.charCodeAt(d),Ht!==123);){if(Ht===60){if(yA(f,d))return d=cI(f,d,F),S=7;break}if(Ht===62&&F(_.Unexpected_token_Did_you_mean_or_gt,d,1),Ht===125&&F(_.Unexpected_token_Did_you_mean_or_rbrace,d,1),Wl(Ht)&&En===0)En=-1;else{if(!vn&&Wl(Ht)&&En>0)break;xh(Ht)||(En=d)}d++}return x=f.substring(m,d),En===-1?12:11}function kn(){if(Su(S)){let vn=!1;for(;d<g;){let Ht=f.charCodeAt(d);if(Ht===45){x+=\"-\",d++;continue}else if(Ht===58&&!vn){x+=\":\",d++,vn=!0,S=79;continue}let En=d;if(x+=X(),d===En)break}return x.slice(-1)===\":\"&&(x=x.slice(0,-1),d--),Ve()}return S}function _n(){switch(m=d,f.charCodeAt(d)){case 34:case 39:return x=fe(!0),S=10;default:return Pe()}}function Gt(){return d=v=m,_n()}function $n(){if(m=v=d,A=0,d>=g)return S=1;let vn=Dg(f,d);switch(d+=By(vn),vn){case 9:case 11:case 12:case 32:for(;d<g&&Yp(f.charCodeAt(d));)d++;return S=5;case 64:return S=59;case 13:f.charCodeAt(d)===10&&d++;case 10:return A|=1,S=4;case 42:return S=41;case 123:return S=18;case 125:return S=19;case 91:return S=22;case 93:return S=23;case 60:return S=29;case 62:return S=31;case 61:return S=63;case 44:return S=27;case 46:return S=24;case 96:return S=61;case 35:return S=62;case 92:d--;let Ht=ge();if(Ht>=0&&Pm(Ht,e))return d+=3,A|=8,x=le()+X(),S=Ve();let En=_e();return En>=0&&Pm(En,e)?(d+=6,A|=1024,x=String.fromCharCode(En)+X(),S=Ve()):(d++,S=0)}if(Pm(vn,e)){let Ht=vn;for(;d<g&&tb(Ht=Dg(f,d),e)||f.charCodeAt(d)===45;)d+=By(Ht);return x=f.substring(v,d),Ht===92&&(x+=X()),S=Ve()}else return S=0}function ui(vn,Ht){let En=d,dr=m,Cr=v,Se=S,at=x,Tt=A,ve=vn();return(!ve||Ht)&&(d=En,m=dr,v=Cr,S=Se,x=at,A=Tt),ve}function Ni(vn,Ht,En){let dr=g,Cr=d,Se=m,at=v,Tt=S,ve=x,nt=A,ce=w;Dt(f,vn,Ht);let Q=En();return g=dr,d=Cr,m=Se,v=at,S=Tt,x=ve,A=nt,w=ce,Q}function Pi(vn){return ui(vn,!0)}function gr(vn){return ui(vn,!1)}function pt(){return f}function nn(){w=void 0}function Dt(vn,Ht,En){f=vn||\"\",g=En===void 0?f.length:Ht+En,hi(Ht||0)}function pn(vn){o=vn}function An(vn){e=vn}function Kn(vn){r=vn}function hi(vn){L.assert(vn>=0),d=vn,m=vn,v=vn,S=0,x=void 0,A=0}function ri(vn){C+=vn?1:-1}}function By(e){return e>=65536?2:1}function NDe(e){if(L.assert(0<=e&&e<=1114111),e<=65535)return String.fromCharCode(e);let t=Math.floor((e-65536)/1024)+55296,r=(e-65536)%1024+56320;return String.fromCharCode(t,r)}function lI(e){return Doe(e)}var Ew,boe,vj,Eoe,Toe,Soe,xoe,Aoe,Coe,Ioe,Loe,koe,Tw,q8,Dg,Doe,PDe=gt({\"src/compiler/scanner.ts\"(){\"use strict\";fa(),Ew={abstract:126,accessor:127,any:131,as:128,asserts:129,assert:130,bigint:160,boolean:134,break:81,case:82,catch:83,class:84,continue:86,const:85,constructor:135,debugger:87,declare:136,default:88,delete:89,do:90,else:91,enum:92,export:93,extends:94,false:95,finally:96,for:97,from:158,function:98,get:137,if:99,implements:117,import:100,in:101,infer:138,instanceof:102,interface:118,intrinsic:139,is:140,keyof:141,let:119,module:142,namespace:143,never:144,new:103,null:104,number:148,object:149,package:120,private:121,protected:122,public:123,override:161,out:145,readonly:146,require:147,global:159,return:105,satisfies:150,set:151,static:124,string:152,super:106,switch:107,symbol:153,this:108,throw:109,true:110,try:111,type:154,typeof:112,undefined:155,unique:156,unknown:157,var:113,void:114,while:115,with:116,yield:125,async:132,await:133,of:162},boe=new Map(Object.entries(Ew)),vj=new Map(Object.entries({...Ew,\"{\":18,\"}\":19,\"(\":20,\")\":21,\"[\":22,\"]\":23,\".\":24,\"...\":25,\";\":26,\",\":27,\"<\":29,\">\":31,\"<=\":32,\">=\":33,\"==\":34,\"!=\":35,\"===\":36,\"!==\":37,\"=>\":38,\"+\":39,\"-\":40,\"**\":42,\"*\":41,\"/\":43,\"%\":44,\"++\":45,\"--\":46,\"<<\":47,\"</\":30,\">>\":48,\">>>\":49,\"&\":50,\"|\":51,\"^\":52,\"!\":53,\"~\":54,\"&&\":55,\"||\":56,\"?\":57,\"??\":60,\"?.\":28,\":\":58,\"=\":63,\"+=\":64,\"-=\":65,\"*=\":66,\"**=\":67,\"/=\":68,\"%=\":69,\"<<=\":70,\">>=\":71,\">>>=\":72,\"&=\":73,\"|=\":74,\"^=\":78,\"||=\":75,\"&&=\":76,\"??=\":77,\"@\":59,\"#\":62,\"`\":61})),Eoe=[170,170,181,181,186,186,192,214,216,246,248,543,546,563,592,685,688,696,699,705,720,721,736,740,750,750,890,890,902,902,904,906,908,908,910,929,931,974,976,983,986,1011,1024,1153,1164,1220,1223,1224,1227,1228,1232,1269,1272,1273,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1569,1594,1600,1610,1649,1747,1749,1749,1765,1766,1786,1788,1808,1808,1810,1836,1920,1957,2309,2361,2365,2365,2384,2384,2392,2401,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2699,2701,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2784,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2870,2873,2877,2877,2908,2909,2911,2913,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,2997,2999,3001,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3294,3294,3296,3297,3333,3340,3342,3344,3346,3368,3370,3385,3424,3425,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3805,3840,3840,3904,3911,3913,3946,3976,3979,4096,4129,4131,4135,4137,4138,4176,4181,4256,4293,4304,4342,4352,4441,4447,4514,4520,4601,4608,4614,4616,4678,4680,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4742,4744,4744,4746,4749,4752,4782,4784,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4814,4816,4822,4824,4846,4848,4878,4880,4880,4882,4885,4888,4894,4896,4934,4936,4954,5024,5108,5121,5740,5743,5750,5761,5786,5792,5866,6016,6067,6176,6263,6272,6312,7680,7835,7840,7929,7936,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8319,8319,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8497,8499,8505,8544,8579,12293,12295,12321,12329,12337,12341,12344,12346,12353,12436,12445,12446,12449,12538,12540,12542,12549,12588,12593,12686,12704,12727,13312,19893,19968,40869,40960,42124,44032,55203,63744,64045,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65138,65140,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],Toe=[170,170,181,181,186,186,192,214,216,246,248,543,546,563,592,685,688,696,699,705,720,721,736,740,750,750,768,846,864,866,890,890,902,902,904,906,908,908,910,929,931,974,976,983,986,1011,1024,1153,1155,1158,1164,1220,1223,1224,1227,1228,1232,1269,1272,1273,1329,1366,1369,1369,1377,1415,1425,1441,1443,1465,1467,1469,1471,1471,1473,1474,1476,1476,1488,1514,1520,1522,1569,1594,1600,1621,1632,1641,1648,1747,1749,1756,1759,1768,1770,1773,1776,1788,1808,1836,1840,1866,1920,1968,2305,2307,2309,2361,2364,2381,2384,2388,2392,2403,2406,2415,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2492,2494,2500,2503,2504,2507,2509,2519,2519,2524,2525,2527,2531,2534,2545,2562,2562,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2649,2652,2654,2654,2662,2676,2689,2691,2693,2699,2701,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2784,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2870,2873,2876,2883,2887,2888,2891,2893,2902,2903,2908,2909,2911,2913,2918,2927,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,2997,2999,3001,3006,3010,3014,3016,3018,3021,3031,3031,3047,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3134,3140,3142,3144,3146,3149,3157,3158,3168,3169,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3262,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3297,3302,3311,3330,3331,3333,3340,3342,3344,3346,3368,3370,3385,3390,3395,3398,3400,3402,3405,3415,3415,3424,3425,3430,3439,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3805,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3946,3953,3972,3974,3979,3984,3991,3993,4028,4038,4038,4096,4129,4131,4135,4137,4138,4140,4146,4150,4153,4160,4169,4176,4185,4256,4293,4304,4342,4352,4441,4447,4514,4520,4601,4608,4614,4616,4678,4680,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4742,4744,4744,4746,4749,4752,4782,4784,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4814,4816,4822,4824,4846,4848,4878,4880,4880,4882,4885,4888,4894,4896,4934,4936,4954,4969,4977,5024,5108,5121,5740,5743,5750,5761,5786,5792,5866,6016,6099,6112,6121,6160,6169,6176,6263,6272,6313,7680,7835,7840,7929,7936,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8255,8256,8319,8319,8400,8412,8417,8417,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8497,8499,8505,8544,8579,12293,12295,12321,12335,12337,12341,12344,12346,12353,12436,12441,12442,12445,12446,12449,12542,12549,12588,12593,12686,12704,12727,13312,19893,19968,40869,40960,42124,44032,55203,63744,64045,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65056,65059,65075,65076,65101,65103,65136,65138,65140,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65381,65470,65474,65479,65482,65487,65490,65495,65498,65500],Soe=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],xoe=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],Aoe=[65,90,97,122,170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,895,895,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1327,1329,1366,1369,1369,1376,1416,1488,1514,1519,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2144,2154,2208,2228,2230,2237,2308,2361,2365,2365,2384,2384,2392,2401,2417,2432,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2556,2556,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2809,2809,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3129,3133,3133,3160,3162,3168,3169,3200,3200,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3412,3414,3423,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3718,3722,3724,3747,3749,3749,3751,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5109,5112,5117,5121,5740,5743,5759,5761,5786,5792,5866,5870,5880,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6264,6272,6312,6314,6314,6320,6389,6400,6430,6480,6509,6512,6516,6528,6571,6576,6601,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7296,7304,7312,7354,7357,7359,7401,7404,7406,7411,7413,7414,7418,7418,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8472,8477,8484,8484,8486,8486,8488,8488,8490,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12443,12447,12449,12538,12540,12543,12549,12591,12593,12686,12704,12730,12784,12799,13312,19893,19968,40943,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42653,42656,42735,42775,42783,42786,42888,42891,42943,42946,42950,42999,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43261,43262,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43488,43492,43494,43503,43514,43518,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43646,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43824,43866,43868,43879,43888,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500,65536,65547,65549,65574,65576,65594,65596,65597,65599,65613,65616,65629,65664,65786,65856,65908,66176,66204,66208,66256,66304,66335,66349,66378,66384,66421,66432,66461,66464,66499,66504,66511,66513,66517,66560,66717,66736,66771,66776,66811,66816,66855,66864,66915,67072,67382,67392,67413,67424,67431,67584,67589,67592,67592,67594,67637,67639,67640,67644,67644,67647,67669,67680,67702,67712,67742,67808,67826,67828,67829,67840,67861,67872,67897,67968,68023,68030,68031,68096,68096,68112,68115,68117,68119,68121,68149,68192,68220,68224,68252,68288,68295,68297,68324,68352,68405,68416,68437,68448,68466,68480,68497,68608,68680,68736,68786,68800,68850,68864,68899,69376,69404,69415,69415,69424,69445,69600,69622,69635,69687,69763,69807,69840,69864,69891,69926,69956,69956,69968,70002,70006,70006,70019,70066,70081,70084,70106,70106,70108,70108,70144,70161,70163,70187,70272,70278,70280,70280,70282,70285,70287,70301,70303,70312,70320,70366,70405,70412,70415,70416,70419,70440,70442,70448,70450,70451,70453,70457,70461,70461,70480,70480,70493,70497,70656,70708,70727,70730,70751,70751,70784,70831,70852,70853,70855,70855,71040,71086,71128,71131,71168,71215,71236,71236,71296,71338,71352,71352,71424,71450,71680,71723,71840,71903,71935,71935,72096,72103,72106,72144,72161,72161,72163,72163,72192,72192,72203,72242,72250,72250,72272,72272,72284,72329,72349,72349,72384,72440,72704,72712,72714,72750,72768,72768,72818,72847,72960,72966,72968,72969,72971,73008,73030,73030,73056,73061,73063,73064,73066,73097,73112,73112,73440,73458,73728,74649,74752,74862,74880,75075,77824,78894,82944,83526,92160,92728,92736,92766,92880,92909,92928,92975,92992,92995,93027,93047,93053,93071,93760,93823,93952,94026,94032,94032,94099,94111,94176,94177,94179,94179,94208,100343,100352,101106,110592,110878,110928,110930,110948,110951,110960,111355,113664,113770,113776,113788,113792,113800,113808,113817,119808,119892,119894,119964,119966,119967,119970,119970,119973,119974,119977,119980,119982,119993,119995,119995,119997,120003,120005,120069,120071,120074,120077,120084,120086,120092,120094,120121,120123,120126,120128,120132,120134,120134,120138,120144,120146,120485,120488,120512,120514,120538,120540,120570,120572,120596,120598,120628,120630,120654,120656,120686,120688,120712,120714,120744,120746,120770,120772,120779,123136,123180,123191,123197,123214,123214,123584,123627,124928,125124,125184,125251,125259,125259,126464,126467,126469,126495,126497,126498,126500,126500,126503,126503,126505,126514,126516,126519,126521,126521,126523,126523,126530,126530,126535,126535,126537,126537,126539,126539,126541,126543,126545,126546,126548,126548,126551,126551,126553,126553,126555,126555,126557,126557,126559,126559,126561,126562,126564,126564,126567,126570,126572,126578,126580,126583,126585,126588,126590,126590,126592,126601,126603,126619,126625,126627,126629,126633,126635,126651,131072,173782,173824,177972,177984,178205,178208,183969,183984,191456,194560,195101],Coe=[48,57,65,90,95,95,97,122,170,170,181,181,183,183,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,895,895,902,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1327,1329,1366,1369,1369,1376,1416,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1519,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2045,2045,2048,2093,2112,2139,2144,2154,2208,2228,2230,2237,2259,2273,2275,2403,2406,2415,2417,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2556,2556,2558,2558,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2809,2815,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3072,3084,3086,3088,3090,3112,3114,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3162,3168,3171,3174,3183,3200,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3328,3331,3333,3340,3342,3344,3346,3396,3398,3400,3402,3406,3412,3415,3423,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3558,3567,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3718,3722,3724,3747,3749,3749,3751,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4969,4977,4992,5007,5024,5109,5112,5117,5121,5740,5743,5759,5761,5786,5792,5866,5870,5880,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6264,6272,6314,6320,6389,6400,6430,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6618,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6832,6845,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7296,7304,7312,7354,7357,7359,7376,7378,7380,7418,7424,7673,7675,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8472,8477,8484,8484,8486,8486,8488,8488,8490,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12447,12449,12538,12540,12543,12549,12591,12593,12686,12704,12730,12784,12799,13312,19893,19968,40943,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42737,42775,42783,42786,42888,42891,42943,42946,42950,42999,43047,43072,43123,43136,43205,43216,43225,43232,43255,43259,43259,43261,43309,43312,43347,43360,43388,43392,43456,43471,43481,43488,43518,43520,43574,43584,43597,43600,43609,43616,43638,43642,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43824,43866,43868,43879,43888,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65071,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500,65536,65547,65549,65574,65576,65594,65596,65597,65599,65613,65616,65629,65664,65786,65856,65908,66045,66045,66176,66204,66208,66256,66272,66272,66304,66335,66349,66378,66384,66426,66432,66461,66464,66499,66504,66511,66513,66517,66560,66717,66720,66729,66736,66771,66776,66811,66816,66855,66864,66915,67072,67382,67392,67413,67424,67431,67584,67589,67592,67592,67594,67637,67639,67640,67644,67644,67647,67669,67680,67702,67712,67742,67808,67826,67828,67829,67840,67861,67872,67897,67968,68023,68030,68031,68096,68099,68101,68102,68108,68115,68117,68119,68121,68149,68152,68154,68159,68159,68192,68220,68224,68252,68288,68295,68297,68326,68352,68405,68416,68437,68448,68466,68480,68497,68608,68680,68736,68786,68800,68850,68864,68903,68912,68921,69376,69404,69415,69415,69424,69456,69600,69622,69632,69702,69734,69743,69759,69818,69840,69864,69872,69881,69888,69940,69942,69951,69956,69958,69968,70003,70006,70006,70016,70084,70089,70092,70096,70106,70108,70108,70144,70161,70163,70199,70206,70206,70272,70278,70280,70280,70282,70285,70287,70301,70303,70312,70320,70378,70384,70393,70400,70403,70405,70412,70415,70416,70419,70440,70442,70448,70450,70451,70453,70457,70459,70468,70471,70472,70475,70477,70480,70480,70487,70487,70493,70499,70502,70508,70512,70516,70656,70730,70736,70745,70750,70751,70784,70853,70855,70855,70864,70873,71040,71093,71096,71104,71128,71133,71168,71232,71236,71236,71248,71257,71296,71352,71360,71369,71424,71450,71453,71467,71472,71481,71680,71738,71840,71913,71935,71935,72096,72103,72106,72151,72154,72161,72163,72164,72192,72254,72263,72263,72272,72345,72349,72349,72384,72440,72704,72712,72714,72758,72760,72768,72784,72793,72818,72847,72850,72871,72873,72886,72960,72966,72968,72969,72971,73014,73018,73018,73020,73021,73023,73031,73040,73049,73056,73061,73063,73064,73066,73102,73104,73105,73107,73112,73120,73129,73440,73462,73728,74649,74752,74862,74880,75075,77824,78894,82944,83526,92160,92728,92736,92766,92768,92777,92880,92909,92912,92916,92928,92982,92992,92995,93008,93017,93027,93047,93053,93071,93760,93823,93952,94026,94031,94087,94095,94111,94176,94177,94179,94179,94208,100343,100352,101106,110592,110878,110928,110930,110948,110951,110960,111355,113664,113770,113776,113788,113792,113800,113808,113817,113821,113822,119141,119145,119149,119154,119163,119170,119173,119179,119210,119213,119362,119364,119808,119892,119894,119964,119966,119967,119970,119970,119973,119974,119977,119980,119982,119993,119995,119995,119997,120003,120005,120069,120071,120074,120077,120084,120086,120092,120094,120121,120123,120126,120128,120132,120134,120134,120138,120144,120146,120485,120488,120512,120514,120538,120540,120570,120572,120596,120598,120628,120630,120654,120656,120686,120688,120712,120714,120744,120746,120770,120772,120779,120782,120831,121344,121398,121403,121452,121461,121461,121476,121476,121499,121503,121505,121519,122880,122886,122888,122904,122907,122913,122915,122916,122918,122922,123136,123180,123184,123197,123200,123209,123214,123214,123584,123641,124928,125124,125136,125142,125184,125259,125264,125273,126464,126467,126469,126495,126497,126498,126500,126500,126503,126503,126505,126514,126516,126519,126521,126521,126523,126523,126530,126530,126535,126535,126537,126537,126539,126539,126541,126543,126545,126546,126548,126548,126551,126551,126553,126553,126555,126555,126557,126557,126559,126559,126561,126562,126564,126564,126567,126570,126572,126578,126580,126583,126585,126588,126590,126590,126592,126601,126603,126619,126625,126627,126629,126633,126635,126651,131072,173782,173824,177972,177984,178205,178208,183969,183984,191456,194560,195101,917760,917999],Ioe=/^\\/\\/\\/?\\s*@(ts-expect-error|ts-ignore)/,Loe=/^(?:\\/|\\*)*\\s*@(ts-expect-error|ts-ignore)/,koe=RDe(vj),Tw=7,q8=/^#!.*/,Dg=String.prototype.codePointAt?(e,t)=>e.codePointAt(t):function(t,r){let i=t.length;if(r<0||r>=i)return;let o=t.charCodeAt(r);if(o>=55296&&o<=56319&&i>r+1){let s=t.charCodeAt(r+1);if(s>=56320&&s<=57343)return(o-55296)*1024+s-56320+65536}return o},Doe=String.fromCodePoint?e=>String.fromCodePoint(e):NDe}});function fl(e){return Jd(e)||qp(e)}function vA(e){return HD(e,ZI)}function X8(e){switch(Do(e)){case 99:return\"lib.esnext.full.d.ts\";case 9:return\"lib.es2022.full.d.ts\";case 8:return\"lib.es2021.full.d.ts\";case 7:return\"lib.es2020.full.d.ts\";case 6:return\"lib.es2019.full.d.ts\";case 5:return\"lib.es2018.full.d.ts\";case 4:return\"lib.es2017.full.d.ts\";case 3:return\"lib.es2016.full.d.ts\";case 2:return\"lib.es6.d.ts\";default:return\"lib.d.ts\"}}function wl(e){return e.start+e.length}function woe(e){return e.length===0}function bj(e,t){return t>=e.start&&t<wl(e)}function Y8(e,t){return t>=e.pos&&t<=e.end}function Roe(e,t){return t.start>=e.start&&wl(t)<=wl(e)}function MDe(e,t){return Ooe(e,t)!==void 0}function Ooe(e,t){let r=Poe(e,t);return r&&r.length===0?void 0:r}function FDe(e,t){return Q8(e.start,e.length,t.start,t.length)}function $8(e,t,r){return Q8(e.start,e.length,t,r)}function Q8(e,t,r,i){let o=e+t,s=r+i;return r<=o&&s>=e}function Noe(e,t){return t<=wl(e)&&t>=e.start}function Poe(e,t){let r=Math.max(e.start,t.start),i=Math.min(wl(e),wl(t));return r<=i?Wc(r,i):void 0}function il(e,t){if(e<0)throw new Error(\"start < 0\");if(t<0)throw new Error(\"length < 0\");return{start:e,length:t}}function Wc(e,t){return il(e,t-e)}function uI(e){return il(e.span.start,e.newLength)}function Moe(e){return woe(e.span)&&e.newLength===0}function Sw(e,t){if(t<0)throw new Error(\"newLength < 0\");return{span:e,newLength:t}}function GDe(e){if(e.length===0)return $j;if(e.length===1)return e[0];let t=e[0],r=t.span.start,i=wl(t.span),o=r+t.newLength;for(let s=1;s<e.length;s++){let l=e[s],f=r,d=i,g=o,m=l.span.start,v=wl(l.span),S=m+l.newLength;r=Math.min(f,m),i=Math.max(d,d+(v-g)),o=Math.max(S,S+(g-v))}return Sw(Wc(r,i),o-r)}function BDe(e){if(e&&e.kind===165){for(let t=e;t;t=t.parent)if(Ia(t)||Yr(t)||t.kind===261)return t}}function Ad(e,t){return ha(e)&&Mr(e,16476)&&t.kind===173}function Foe(e){return La(e)?Ji(e.elements,Goe):!1}function Goe(e){return ol(e)?!0:Foe(e.name)}function bA(e){let t=e.parent;for(;Wo(t.parent);)t=t.parent.parent;return t.parent}function Ej(e,t){Wo(e)&&(e=bA(e));let r=t(e);return e.kind===257&&(e=e.parent),e&&e.kind===258&&(r|=t(e),e=e.parent),e&&e.kind===240&&(r|=t(e)),r}function wg(e){return Ej(e,uu)}function Tj(e){return Ej(e,Jce)}function G_(e){return Ej(e,t=>t.flags)}function UDe(e,t,r){let i=e.toLowerCase(),o=/^([a-z]+)([_\\-]([a-z]+))?$/.exec(i);if(!o){r&&r.push(ps(_.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1,\"en\",\"ja-jp\"));return}let s=o[1],l=o[3];ya(Qj,i)&&!f(s,l,r)&&f(s,void 0,r),Aae(e);function f(d,g,m){let v=So(t.getExecutingFilePath()),S=ni(v),x=vi(S,d);if(g&&(x=x+\"-\"+g),x=t.resolvePath(vi(x,\"diagnosticMessages.generated.json\")),!t.fileExists(x))return!1;let A=\"\";try{A=t.readFile(x)}catch{return m&&m.push(ps(_.Unable_to_open_file_0,x)),!1}try{ple(JSON.parse(A))}catch{return m&&m.push(ps(_.Corrupted_locale_file_0,x)),!1}return!0}}function ec(e,t){if(e)for(;e.original!==void 0;)e=e.original;return!e||!t||t(e)?e:void 0}function jn(e,t){for(;e;){let r=t(e);if(r===\"quit\")return;if(r)return e;e=e.parent}}function dI(e){return(e.flags&8)===0}function ea(e,t){if(e===void 0||dI(e))return e;for(e=e.original;e;){if(dI(e))return!t||t(e)?e:void 0;e=e.original}}function Bs(e){return e.length>=2&&e.charCodeAt(0)===95&&e.charCodeAt(1)===95?\"_\"+e:e}function Gi(e){let t=e;return t.length>=3&&t.charCodeAt(0)===95&&t.charCodeAt(1)===95&&t.charCodeAt(2)===95?t.substr(1):t}function vr(e){return Gi(e.escapedText)}function nb(e){let t=lT(e.escapedText);return t?zr(t,Xu):void 0}function fc(e){return e.valueDeclaration&&xu(e.valueDeclaration)?vr(e.valueDeclaration.name):Gi(e.escapedName)}function Boe(e){let t=e.parent.parent;if(t){if(Kl(t))return Z8(t);switch(t.kind){case 240:if(t.declarationList&&t.declarationList.declarations[0])return Z8(t.declarationList.declarations[0]);break;case 241:let r=t.expression;switch(r.kind===223&&r.operatorToken.kind===63&&(r=r.left),r.kind){case 208:return r.name;case 209:let i=r.argumentExpression;if(Re(i))return i}break;case 214:return Z8(t.expression);case 253:{if(Kl(t.statement)||ot(t.statement))return Z8(t.statement);break}}}}function Z8(e){let t=sa(e);return t&&Re(t)?t:void 0}function xw(e,t){return!!(zl(e)&&Re(e.name)&&vr(e.name)===vr(t)||Bc(e)&&vt(e.declarationList.declarations,r=>xw(r,t)))}function Uoe(e){return e.name||Boe(e)}function zl(e){return!!e.name}function Sj(e){switch(e.kind){case 79:return e;case 351:case 344:{let{name:r}=e;if(r.kind===163)return r.right;break}case 210:case 223:{let r=e;switch(ic(r)){case 1:case 4:case 5:case 3:return W6(r.left);case 7:case 8:case 9:return r.arguments[1];default:return}}case 349:return Uoe(e);case 343:return Boe(e);case 274:{let{expression:r}=e;return Re(r)?r:void 0}case 209:let t=e;if(H6(t))return t.argumentExpression}return e.name}function sa(e){if(e!==void 0)return Sj(e)||(ms(e)||xs(e)||_u(e)?xj(e):void 0)}function xj(e){if(e.parent){if(yl(e.parent)||Wo(e.parent))return e.parent.name;if(ar(e.parent)&&e===e.parent.right){if(Re(e.parent.left))return e.parent.left;if(Us(e.parent.left))return W6(e.parent.left)}else if(wi(e.parent)&&Re(e.parent.name))return e.parent.name}else return}function Uy(e){if(bf(e))return Pr(e.modifiers,du)}function uT(e){if(Mr(e,126975))return Pr(e.modifiers,Ha)}function Voe(e,t){if(e.name)if(Re(e.name)){let r=e.name.escapedText;return _I(e.parent,t).filter(i=>xp(i)&&Re(i.name)&&i.name.escapedText===r)}else{let r=e.parent.parameters.indexOf(e);L.assert(r>-1,\"Parameters should always be in their parents' parameter list\");let i=_I(e.parent,t).filter(xp);if(r<i.length)return[i[r]]}return Je}function fI(e){return Voe(e,!1)}function joe(e){return Voe(e,!0)}function Hoe(e,t){let r=e.name.escapedText;return _I(e.parent,t).filter(i=>H_(i)&&i.typeParameters.some(o=>o.name.escapedText===r))}function Woe(e){return Hoe(e,!1)}function zoe(e){return Hoe(e,!0)}function Joe(e){return!!gf(e,xp)}function Koe(e){return gf(e,x2)}function qoe(e){return kj(e,qz)}function Aj(e){return gf(e,Xue)}function VDe(e){return gf(e,jz)}function Xoe(e){return gf(e,jz,!0)}function jDe(e){return gf(e,Hz)}function Yoe(e){return gf(e,Hz,!0)}function HDe(e){return gf(e,Wz)}function $oe(e){return gf(e,Wz,!0)}function WDe(e){return gf(e,zz)}function Qoe(e){return gf(e,zz,!0)}function Zoe(e){return gf(e,g3,!0)}function Cj(e){return gf(e,Jz)}function ese(e){return gf(e,Jz,!0)}function Ij(e){return gf(e,vO)}function e6(e){return gf(e,Yue)}function tse(e){return gf(e,y3)}function zDe(e){return gf(e,H_)}function Lj(e){return gf(e,v3)}function x0(e){let t=gf(e,DL);if(t&&t.typeExpression&&t.typeExpression.type)return t}function Vy(e){let t=gf(e,DL);return!t&&ha(e)&&(t=wr(fI(e),r=>!!r.typeExpression)),t&&t.typeExpression&&t.typeExpression.type}function Aw(e){let t=tse(e);if(t&&t.typeExpression)return t.typeExpression.type;let r=x0(e);if(r&&r.typeExpression){let i=r.typeExpression.type;if(Rd(i)){let o=wr(i.members,_2);return o&&o.type}if(Jm(i)||S2(i))return i.type}}function _I(e,t){var r,i;if(!lR(e))return Je;let o=(r=e.jsDoc)==null?void 0:r.jsDocCache;if(o===void 0||t){let s=PH(e,t);L.assert(s.length<2||s[0]!==s[1]),o=Uo(s,l=>dm(l)?l.tags:l),t||((i=e.jsDoc)!=null||(e.jsDoc=[]),e.jsDoc.jsDocCache=o)}return o}function A0(e){return _I(e,!1)}function JDe(e){return _I(e,!0)}function gf(e,t,r){return wr(_I(e,r),t)}function kj(e,t){return A0(e).filter(t)}function KDe(e,t){return A0(e).filter(r=>r.kind===t)}function Cw(e){return typeof e==\"string\"?e:e?.map(t=>t.kind===324?t.text:qDe(t)).join(\"\")}function qDe(e){let t=e.kind===327?\"link\":e.kind===328?\"linkcode\":\"linkplain\",r=e.name?qd(e.name):\"\",i=e.name&&e.text.startsWith(\"://\")?\"\":\" \";return`{@${t} ${r}${i}${e.text}}`}function jy(e){if(X0(e)){if(kL(e.parent)){let t=OI(e.parent);if(t&&Fn(t.tags))return Uo(t.tags,r=>H_(r)?r.typeParameters:void 0)}return Je}if(Ff(e))return L.assert(e.parent.kind===323),Uo(e.parent.tags,t=>H_(t)?t.typeParameters:void 0);if(e.typeParameters||sde(e)&&e.typeParameters)return e.typeParameters;if(Yn(e)){let t=t4(e);if(t.length)return t;let r=Vy(e);if(r&&Jm(r)&&r.typeParameters)return r.typeParameters}return Je}function EA(e){return e.constraint?e.constraint:H_(e.parent)&&e===e.parent.typeParameters[0]?e.parent.constraint:void 0}function Ah(e){return e.kind===79||e.kind===80}function t6(e){return e.kind===175||e.kind===174}function n6(e){return br(e)&&!!(e.flags&32)}function Dj(e){return Vs(e)&&!!(e.flags&32)}function dT(e){return Pa(e)&&!!(e.flags&32)}function Jl(e){let t=e.kind;return!!(e.flags&32)&&(t===208||t===209||t===210||t===232)}function pI(e){return Jl(e)&&!PS(e)&&!!e.questionDotToken}function r6(e){return pI(e.parent)&&e.parent.expression===e}function mI(e){return!Jl(e.parent)||pI(e.parent)||e!==e.parent.expression}function wj(e){return e.kind===223&&e.operatorToken.kind===60}function Ch(e){return m_(e)&&Re(e.typeName)&&e.typeName.escapedText===\"const\"&&!e.typeArguments}function a_(e){return ql(e,8)}function i6(e){return PS(e)&&!!(e.flags&32)}function hI(e){return e.kind===249||e.kind===248}function Rj(e){return e.kind===277||e.kind===276}function nse(e){switch(e.kind){case 305:case 306:return!0;default:return!1}}function Oj(e){return nse(e)||e.kind===303||e.kind===307}function a6(e){return e.kind===351||e.kind===344}function XDe(e){return Iw(e.kind)}function Iw(e){return e>=163}function Nj(e){return e>=0&&e<=162}function Z1(e){return Nj(e.kind)}function C0(e){return fs(e,\"pos\")&&fs(e,\"end\")}function gI(e){return 8<=e&&e<=14}function fT(e){return gI(e.kind)}function Pj(e){switch(e.kind){case 207:case 206:case 13:case 215:case 228:return!0}return!1}function Hy(e){return 14<=e&&e<=17}function rse(e){return Hy(e.kind)}function o6(e){let t=e.kind;return t===16||t===17}function eS(e){return $u(e)||Mu(e)}function Mj(e){switch(e.kind){case 273:return e.isTypeOnly||e.parent.parent.isTypeOnly;case 271:return e.parent.isTypeOnly;case 270:case 268:return e.isTypeOnly}return!1}function ise(e){switch(e.kind){case 278:return e.isTypeOnly||e.parent.parent.isTypeOnly;case 275:return e.isTypeOnly&&!!e.moduleSpecifier&&!e.exportClause;case 277:return e.parent.isTypeOnly}return!1}function I0(e){return Mj(e)||ise(e)}function ase(e){return yo(e)||Re(e)}function Fj(e){return e.kind===10||Hy(e.kind)}function tc(e){var t;return Re(e)&&((t=e.emitNode)==null?void 0:t.autoGenerate)!==void 0}function tS(e){var t;return pi(e)&&((t=e.emitNode)==null?void 0:t.autoGenerate)!==void 0}function xu(e){return(Na(e)||xA(e))&&pi(e.name)}function TA(e){return br(e)&&pi(e.name)}function Rg(e){switch(e){case 126:case 127:case 132:case 85:case 136:case 88:case 93:case 101:case 123:case 121:case 122:case 146:case 124:case 145:case 161:return!0}return!1}function yI(e){return!!(gS(e)&16476)}function Gj(e){return yI(e)||e===124||e===161||e===127}function Ha(e){return Rg(e.kind)}function Cd(e){let t=e.kind;return t===163||t===79}function Ys(e){let t=e.kind;return t===79||t===80||t===10||t===8||t===164}function Mm(e){let t=e.kind;return t===79||t===203||t===204}function Ia(e){return!!e&&nS(e.kind)}function SA(e){return!!e&&(nS(e.kind)||oc(e))}function Ds(e){return e&&sse(e.kind)}function ose(e){return e.kind===110||e.kind===95}function sse(e){switch(e){case 259:case 171:case 173:case 174:case 175:case 215:case 216:return!0;default:return!1}}function nS(e){switch(e){case 170:case 176:case 326:case 177:case 178:case 181:case 320:case 182:return!0;default:return sse(e)}}function Bj(e){return Li(e)||Tp(e)||Va(e)&&Ia(e.parent)}function _l(e){let t=e.kind;return t===173||t===169||t===171||t===174||t===175||t===178||t===172||t===237}function Yr(e){return e&&(e.kind===260||e.kind===228)}function rb(e){return e&&(e.kind===174||e.kind===175)}function Id(e){return Na(e)&&rm(e)}function xA(e){switch(e.kind){case 171:case 174:case 175:return!0;default:return!1}}function cse(e){switch(e.kind){case 171:case 174:case 175:case 169:return!0;default:return!1}}function Ns(e){return Ha(e)||du(e)}function _T(e){let t=e.kind;return t===177||t===176||t===168||t===170||t===178||t===174||t===175}function s6(e){return _T(e)||_l(e)}function Og(e){let t=e.kind;return t===299||t===300||t===301||t===171||t===174||t===175}function bi(e){return vW(e.kind)}function lse(e){switch(e.kind){case 181:case 182:return!0}return!1}function La(e){if(e){let t=e.kind;return t===204||t===203}return!1}function vI(e){let t=e.kind;return t===206||t===207}function c6(e){let t=e.kind;return t===205||t===229}function Lw(e){switch(e.kind){case 257:case 166:case 205:return!0}return!1}function use(e){return wi(e)||ha(e)||Dw(e)||ww(e)}function kw(e){return Uj(e)||Vj(e)}function Uj(e){switch(e.kind){case 203:case 207:return!0}return!1}function Dw(e){switch(e.kind){case 205:case 299:case 300:case 301:return!0}return!1}function Vj(e){switch(e.kind){case 204:case 206:return!0}return!1}function ww(e){switch(e.kind){case 205:case 229:case 227:case 206:case 207:case 79:case 208:case 209:return!0}return Iu(e,!0)}function dse(e){let t=e.kind;return t===208||t===163||t===202}function fse(e){let t=e.kind;return t===208||t===163}function rS(e){switch(e.kind){case 283:case 282:case 210:case 211:case 212:case 167:return!0;default:return!1}}function Ih(e){return e.kind===210||e.kind===211}function AA(e){let t=e.kind;return t===225||t===14}function Ju(e){return _se(a_(e).kind)}function _se(e){switch(e){case 208:case 209:case 211:case 210:case 281:case 282:case 285:case 212:case 206:case 214:case 207:case 228:case 215:case 79:case 80:case 13:case 8:case 9:case 10:case 14:case 225:case 95:case 104:case 108:case 110:case 106:case 232:case 230:case 233:case 100:case 279:return!0;default:return!1}}function jj(e){return pse(a_(e).kind)}function pse(e){switch(e){case 221:case 222:case 217:case 218:case 219:case 220:case 213:return!0;default:return _se(e)}}function mse(e){switch(e.kind){case 222:return!0;case 221:return e.operator===45||e.operator===46;default:return!1}}function hse(e){switch(e.kind){case 104:case 110:case 95:case 221:return!0;default:return fT(e)}}function ot(e){return YDe(a_(e).kind)}function YDe(e){switch(e){case 224:case 226:case 216:case 223:case 227:case 231:case 229:case 357:case 356:case 235:return!0;default:return pse(e)}}function pT(e){let t=e.kind;return t===213||t===231}function $De(e){return Gz(e)||_3(e)}function Wy(e,t){switch(e.kind){case 245:case 246:case 247:case 243:case 244:return!0;case 253:return t&&Wy(e.statement,t)}return!1}function gse(e){return pc(e)||Il(e)}function yse(e){return vt(e,gse)}function l6(e){return!Uw(e)&&!pc(e)&&!Mr(e,1)&&!lu(e)}function Rw(e){return Uw(e)||pc(e)||Mr(e,1)}function CA(e){return e.kind===246||e.kind===247}function u6(e){return Va(e)||ot(e)}function Hj(e){return Va(e)}function pp(e){return pu(e)||ot(e)}function vse(e){let t=e.kind;return t===265||t===264||t===79}function QDe(e){let t=e.kind;return t===265||t===264}function ZDe(e){let t=e.kind;return t===79||t===264}function Wj(e){let t=e.kind;return t===272||t===271}function Ow(e){return e.kind===264||e.kind===263}function $p(e){switch(e.kind){case 216:case 223:case 205:case 210:case 176:case 260:case 228:case 172:case 173:case 182:case 177:case 209:case 263:case 302:case 274:case 275:case 278:case 259:case 215:case 181:case 174:case 79:case 270:case 268:case 273:case 178:case 261:case 341:case 343:case 320:case 344:case 351:case 326:case 349:case 325:case 288:case 289:case 290:case 197:case 171:case 170:case 264:case 199:case 277:case 267:case 271:case 211:case 14:case 8:case 207:case 166:case 208:case 299:case 169:case 168:case 175:case 300:case 308:case 301:case 10:case 262:case 184:case 165:case 257:return!0;default:return!1}}function Qp(e){switch(e.kind){case 216:case 238:case 176:case 266:case 295:case 172:case 191:case 173:case 182:case 177:case 245:case 246:case 247:case 259:case 215:case 181:case 174:case 178:case 341:case 343:case 320:case 326:case 349:case 197:case 171:case 170:case 264:case 175:case 308:case 262:return!0;default:return!1}}function ewe(e){return e===216||e===205||e===260||e===228||e===172||e===173||e===263||e===302||e===278||e===259||e===215||e===174||e===270||e===268||e===273||e===261||e===288||e===171||e===170||e===264||e===267||e===271||e===277||e===166||e===299||e===169||e===168||e===175||e===300||e===262||e===165||e===257||e===349||e===341||e===351}function zj(e){return e===259||e===279||e===260||e===261||e===262||e===263||e===264||e===269||e===268||e===275||e===274||e===267}function Jj(e){return e===249||e===248||e===256||e===243||e===241||e===239||e===246||e===247||e===245||e===242||e===253||e===250||e===252||e===254||e===255||e===240||e===244||e===251||e===355||e===359||e===358}function Kl(e){return e.kind===165?e.parent&&e.parent.kind!==348||Yn(e):ewe(e.kind)}function bse(e){return zj(e.kind)}function Nw(e){return Jj(e.kind)}function ca(e){let t=e.kind;return Jj(t)||zj(t)||twe(e)}function twe(e){return e.kind!==238||e.parent!==void 0&&(e.parent.kind===255||e.parent.kind===295)?!1:!bT(e)}function Ese(e){let t=e.kind;return Jj(t)||zj(t)||t===238}function Tse(e){let t=e.kind;return t===280||t===163||t===79}function bI(e){let t=e.kind;return t===108||t===79||t===208}function Pw(e){let t=e.kind;return t===281||t===291||t===282||t===11||t===285}function d6(e){let t=e.kind;return t===288||t===290}function Sse(e){let t=e.kind;return t===10||t===291}function Au(e){let t=e.kind;return t===283||t===282}function Kj(e){let t=e.kind;return t===292||t===293}function IA(e){return e.kind>=312&&e.kind<=353}function qj(e){return e.kind===323||e.kind===322||e.kind===324||iS(e)||EI(e)||LL(e)||X0(e)}function EI(e){return e.kind>=330&&e.kind<=353}function Ng(e){return e.kind===175}function zy(e){return e.kind===174}function Kd(e){if(!lR(e))return!1;let{jsDoc:t}=e;return!!t&&t.length>0}function f6(e){return!!e.type}function Jy(e){return!!e.initializer}function mT(e){switch(e.kind){case 257:case 166:case 205:case 169:case 299:case 302:return!0;default:return!1}}function Xj(e){return e.kind===288||e.kind===290||Og(e)}function _6(e){return e.kind===180||e.kind===230}function xse(e){let t=Zj;for(let r of e){if(!r.length)continue;let i=0;for(;i<r.length&&i<t&&xh(r.charCodeAt(i));i++);if(i<t&&(t=i),t===0)return 0}return t===Zj?void 0:t}function es(e){return e.kind===10||e.kind===14}function iS(e){return e.kind===327||e.kind===328||e.kind===329}function Yj(e){let t=Os(e.parameters);return!!t&&Fm(t)}function Fm(e){let t=xp(e)?e.typeExpression&&e.typeExpression.type:e.type;return e.dotDotDotToken!==void 0||!!t&&t.kind===321}var $j,Qj,Zj,nwe=gt({\"src/compiler/utilitiesPublic.ts\"(){\"use strict\";fa(),$j=Sw(il(0,0),0),Qj=[\"cs\",\"de\",\"es\",\"fr\",\"it\",\"ja\",\"ko\",\"pl\",\"pt-br\",\"ru\",\"tr\",\"zh-cn\",\"zh-tw\"],Zj=1073741823}});function nc(e,t){let r=e.declarations;if(r){for(let i of r)if(i.kind===t)return i}}function Ase(e,t){return Pr(e.declarations||Je,r=>r.kind===t)}function Ua(e){let t=new Map;if(e)for(let r of e)t.set(r.escapedName,r);return t}function Zp(e){return(e.flags&33554432)!==0}function rwe(){var e=\"\";let t=r=>e+=r;return{getText:()=>e,write:t,rawWrite:t,writeKeyword:t,writeOperator:t,writePunctuation:t,writeSpace:t,writeStringLiteral:t,writeLiteral:t,writeParameter:t,writeProperty:t,writeSymbol:(r,i)=>t(r),writeTrailingSemicolon:t,writeComment:t,getTextPos:()=>e.length,getLine:()=>0,getColumn:()=>0,getIndent:()=>0,isAtStartOfLine:()=>!1,hasTrailingComment:()=>!1,hasTrailingWhitespace:()=>!!e.length&&xh(e.charCodeAt(e.length-1)),writeLine:()=>e+=\" \",increaseIndent:Ba,decreaseIndent:Ba,clear:()=>e=\"\"}}function eH(e,t){return e.configFilePath!==t.configFilePath||Cse(e,t)}function Cse(e,t){return LA(e,t,U3)}function Ise(e,t){return LA(e,t,GJ)}function LA(e,t,r){return e!==t&&r.some(i=>!GW(f4(e,i),f4(t,i)))}function Lse(e,t){for(;;){let r=t(e);if(r===\"quit\")return;if(r!==void 0)return r;if(Li(e))return;e=e.parent}}function Ld(e,t){let r=e.entries();for(let[i,o]of r){let s=t(o,i);if(s)return s}}function TI(e,t){let r=e.keys();for(let i of r){let o=t(i);if(o)return o}}function Mw(e,t){e.forEach((r,i)=>{t.set(i,r)})}function SI(e){let t=uL.getText();try{return e(uL),uL.getText()}finally{uL.clear(),uL.writeKeyword(t)}}function Fw(e){return e.end-e.pos}function kA(e,t,r){var i,o;return(o=(i=e?.resolvedModules)==null?void 0:i.get(t,r))==null?void 0:o.resolvedModule}function kse(e,t,r,i){e.resolvedModules||(e.resolvedModules=WT()),e.resolvedModules.set(t,i,r)}function Dse(e,t,r,i){e.resolvedTypeReferenceDirectiveNames||(e.resolvedTypeReferenceDirectiveNames=WT()),e.resolvedTypeReferenceDirectiveNames.set(t,i,r)}function iwe(e,t,r){var i,o;return(o=(i=e?.resolvedTypeReferenceDirectiveNames)==null?void 0:i.get(t,r))==null?void 0:o.resolvedTypeReferenceDirective}function tH(e,t){return e.path===t.path&&!e.prepend==!t.prepend&&!e.circular==!t.circular}function wse(e,t){return e===t||e.resolvedModule===t.resolvedModule||!!e.resolvedModule&&!!t.resolvedModule&&e.resolvedModule.isExternalLibraryImport===t.resolvedModule.isExternalLibraryImport&&e.resolvedModule.extension===t.resolvedModule.extension&&e.resolvedModule.resolvedFileName===t.resolvedModule.resolvedFileName&&e.resolvedModule.originalPath===t.resolvedModule.originalPath&&awe(e.resolvedModule.packageId,t.resolvedModule.packageId)}function awe(e,t){return e===t||!!e&&!!t&&e.name===t.name&&e.subModuleName===t.subModuleName&&e.version===t.version}function p6({name:e,subModuleName:t}){return t?`${e}/${t}`:e}function hT(e){return`${p6(e)}@${e.version}`}function Rse(e,t){return e===t||e.resolvedTypeReferenceDirective===t.resolvedTypeReferenceDirective||!!e.resolvedTypeReferenceDirective&&!!t.resolvedTypeReferenceDirective&&e.resolvedTypeReferenceDirective.resolvedFileName===t.resolvedTypeReferenceDirective.resolvedFileName&&!!e.resolvedTypeReferenceDirective.primary==!!t.resolvedTypeReferenceDirective.primary&&e.resolvedTypeReferenceDirective.originalPath===t.resolvedTypeReferenceDirective.originalPath}function nH(e,t,r,i,o,s){L.assert(e.length===r.length);for(let l=0;l<e.length;l++){let f=r[l],d=e[l],g=s.getName(d),m=s.getMode(d,t),v=i&&i.get(g,m);if(v?!f||!o(v,f):f)return!0}return!1}function Gw(e){return owe(e),(e.flags&524288)!==0}function owe(e){e.flags&1048576||((e.flags&131072||pa(e,Gw))&&(e.flags|=524288),e.flags|=1048576)}function Gn(e){for(;e&&e.kind!==308;)e=e.parent;return e}function m6(e){return Gn(e.valueDeclaration||dH(e))}function h6(e,t){return!!e&&(e.scriptKind===1||e.scriptKind===2)&&!e.checkJsDirective&&t===void 0}function Ose(e){switch(e.kind){case 238:case 266:case 245:case 246:case 247:return!0}return!1}function Ky(e,t){return L.assert(e>=0),Sh(t)[e]}function swe(e){let t=Gn(e),r=Gs(t,e.pos);return`${t.fileName}(${r.line+1},${r.character+1})`}function Bw(e,t){L.assert(e>=0);let r=Sh(t),i=e,o=t.text;if(i+1===r.length)return o.length-1;{let s=r[i],l=r[i+1]-1;for(L.assert(Wl(o.charCodeAt(l)));s<=l&&Wl(o.charCodeAt(l));)l--;return l}}function g6(e,t,r){return!(r&&r(t))&&!e.identifiers.has(t)}function rc(e){return e===void 0?!0:e.pos===e.end&&e.pos>=0&&e.kind!==1}function Pf(e){return!rc(e)}function Nse(e,t){return _c(e)?t===e.expression:oc(e)?t===e.modifiers:$d(e)?t===e.initializer:Na(e)?t===e.questionToken&&Id(e):yl(e)?t===e.modifiers||t===e.questionToken||t===e.exclamationToken||xI(e.modifiers,t,Ns):xf(e)?t===e.equalsToken||t===e.modifiers||t===e.questionToken||t===e.exclamationToken||xI(e.modifiers,t,Ns):Nc(e)?t===e.exclamationToken:Ec(e)?t===e.typeParameters||t===e.type||xI(e.typeParameters,t,_c):p_(e)?t===e.typeParameters||xI(e.typeParameters,t,_c):Sf(e)?t===e.typeParameters||t===e.type||xI(e.typeParameters,t,_c):gO(e)?t===e.modifiers||xI(e.modifiers,t,Ns):!1}function xI(e,t,r){return!e||ba(t)||!r(t)?!1:ya(e,t)}function Pse(e,t,r){if(t===void 0||t.length===0)return e;let i=0;for(;i<e.length&&r(e[i]);++i);return e.splice(i,0,...t),e}function Mse(e,t,r){if(t===void 0)return e;let i=0;for(;i<e.length&&r(e[i]);++i);return e.splice(i,0,t),e}function Fse(e){return B_(e)||!!(Ya(e)&2097152)}function em(e,t){return Pse(e,t,B_)}function rH(e,t){return Pse(e,t,Fse)}function cwe(e,t){return Mse(e,t,B_)}function L0(e,t){return Mse(e,t,Fse)}function iH(e,t,r){if(e.charCodeAt(t+1)===47&&t+2<r&&e.charCodeAt(t+2)===47){let i=e.substring(t,r);return!!(qW.test(i)||XW.test(i)||Wle.test(i)||zle.test(i))}return!1}function y6(e,t){return e.charCodeAt(t+1)===42&&e.charCodeAt(t+2)===33}function Gse(e,t){let r=new Map(t.map(l=>[`${Gs(e,l.range.end).line}`,l])),i=new Map;return{getUnusedExpectations:o,markUsed:s};function o(){return lo(r.entries()).filter(([l,f])=>f.type===0&&!i.get(l)).map(([l,f])=>f)}function s(l){return r.has(`${l}`)?(i.set(`${l}`,!0),!0):!1}}function gT(e,t,r){return rc(e)?e.pos:IA(e)||e.kind===11?xo((t||Gn(e)).text,e.pos,!1,!0):r&&Kd(e)?gT(e.jsDoc[0],t):e.kind===354&&e._children.length>0?gT(e._children[0],t,r):xo((t||Gn(e)).text,e.pos,!1,!1,qw(e))}function aH(e,t){let r=!rc(e)&&g_(e)?dA(e.modifiers,du):void 0;return r?xo((t||Gn(e)).text,r.end):gT(e,t)}function k0(e,t,r=!1){return AI(e.text,t,r)}function lwe(e){return!!jn(e,UT)}function v6(e){return!!(Il(e)&&e.exportClause&&qm(e.exportClause)&&e.exportClause.name.escapedText===\"default\")}function AI(e,t,r=!1){if(rc(t))return\"\";let i=e.substring(r?t.pos:xo(e,t.pos),t.end);return lwe(t)&&(i=i.split(/\\r\\n|\\n|\\r/).map(o=>ZC(o.replace(/^\\s*\\*/,\"\"))).join(`\n`)),i}function Qc(e,t=!1){return k0(Gn(e),e,t)}function uwe(e){return e.pos}function DA(e,t){return Py(e,t,uwe,Es)}function Ya(e){let t=e.emitNode;return t&&t.flags||0}function o_(e){let t=e.emitNode;return t&&t.internalFlags||0}function oH(){return new Map(Object.entries({Array:new Map(Object.entries({es2015:[\"find\",\"findIndex\",\"fill\",\"copyWithin\",\"entries\",\"keys\",\"values\"],es2016:[\"includes\"],es2019:[\"flat\",\"flatMap\"],es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Iterator:new Map(Object.entries({es2015:Je})),AsyncIterator:new Map(Object.entries({es2015:Je})),Atomics:new Map(Object.entries({es2017:Je})),SharedArrayBuffer:new Map(Object.entries({es2017:Je})),AsyncIterable:new Map(Object.entries({es2018:Je})),AsyncIterableIterator:new Map(Object.entries({es2018:Je})),AsyncGenerator:new Map(Object.entries({es2018:Je})),AsyncGeneratorFunction:new Map(Object.entries({es2018:Je})),RegExp:new Map(Object.entries({es2015:[\"flags\",\"sticky\",\"unicode\"],es2018:[\"dotAll\"]})),Reflect:new Map(Object.entries({es2015:[\"apply\",\"construct\",\"defineProperty\",\"deleteProperty\",\"get\",\" getOwnPropertyDescriptor\",\"getPrototypeOf\",\"has\",\"isExtensible\",\"ownKeys\",\"preventExtensions\",\"set\",\"setPrototypeOf\"]})),ArrayConstructor:new Map(Object.entries({es2015:[\"from\",\"of\"]})),ObjectConstructor:new Map(Object.entries({es2015:[\"assign\",\"getOwnPropertySymbols\",\"keys\",\"is\",\"setPrototypeOf\"],es2017:[\"values\",\"entries\",\"getOwnPropertyDescriptors\"],es2019:[\"fromEntries\"],es2022:[\"hasOwn\"]})),NumberConstructor:new Map(Object.entries({es2015:[\"isFinite\",\"isInteger\",\"isNaN\",\"isSafeInteger\",\"parseFloat\",\"parseInt\"]})),Math:new Map(Object.entries({es2015:[\"clz32\",\"imul\",\"sign\",\"log10\",\"log2\",\"log1p\",\"expm1\",\"cosh\",\"sinh\",\"tanh\",\"acosh\",\"asinh\",\"atanh\",\"hypot\",\"trunc\",\"fround\",\"cbrt\"]})),Map:new Map(Object.entries({es2015:[\"entries\",\"keys\",\"values\"]})),Set:new Map(Object.entries({es2015:[\"entries\",\"keys\",\"values\"]})),PromiseConstructor:new Map(Object.entries({es2015:[\"all\",\"race\",\"reject\",\"resolve\"],es2020:[\"allSettled\"],es2021:[\"any\"]})),Symbol:new Map(Object.entries({es2015:[\"for\",\"keyFor\"],es2019:[\"description\"]})),WeakMap:new Map(Object.entries({es2015:[\"entries\",\"keys\",\"values\"]})),WeakSet:new Map(Object.entries({es2015:[\"entries\",\"keys\",\"values\"]})),String:new Map(Object.entries({es2015:[\"codePointAt\",\"includes\",\"endsWith\",\"normalize\",\"repeat\",\"startsWith\",\"anchor\",\"big\",\"blink\",\"bold\",\"fixed\",\"fontcolor\",\"fontsize\",\"italics\",\"link\",\"small\",\"strike\",\"sub\",\"sup\"],es2017:[\"padStart\",\"padEnd\"],es2019:[\"trimStart\",\"trimEnd\",\"trimLeft\",\"trimRight\"],es2020:[\"matchAll\"],es2021:[\"replaceAll\"],es2022:[\"at\"]})),StringConstructor:new Map(Object.entries({es2015:[\"fromCodePoint\",\"raw\"]})),DateTimeFormat:new Map(Object.entries({es2017:[\"formatToParts\"]})),Promise:new Map(Object.entries({es2015:Je,es2018:[\"finally\"]})),RegExpMatchArray:new Map(Object.entries({es2018:[\"groups\"]})),RegExpExecArray:new Map(Object.entries({es2018:[\"groups\"]})),Intl:new Map(Object.entries({es2018:[\"PluralRules\"]})),NumberFormat:new Map(Object.entries({es2018:[\"formatToParts\"]})),SymbolConstructor:new Map(Object.entries({es2020:[\"matchAll\"]})),DataView:new Map(Object.entries({es2020:[\"setBigInt64\",\"setBigUint64\",\"getBigInt64\",\"getBigUint64\"]})),BigInt:new Map(Object.entries({es2020:Je})),RelativeTimeFormat:new Map(Object.entries({es2020:[\"format\",\"formatToParts\",\"resolvedOptions\"]})),Int8Array:new Map(Object.entries({es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Uint8Array:new Map(Object.entries({es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Uint8ClampedArray:new Map(Object.entries({es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Int16Array:new Map(Object.entries({es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Uint16Array:new Map(Object.entries({es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Int32Array:new Map(Object.entries({es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Uint32Array:new Map(Object.entries({es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Float32Array:new Map(Object.entries({es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Float64Array:new Map(Object.entries({es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),BigInt64Array:new Map(Object.entries({es2020:Je,es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),BigUint64Array:new Map(Object.entries({es2020:Je,es2022:[\"at\"],es2023:[\"findLastIndex\",\"findLast\"]})),Error:new Map(Object.entries({es2022:[\"cause\"]}))}))}function Bse(e,t,r){var i;if(t&&dwe(e,r))return k0(t,e);switch(e.kind){case 10:{let o=r&2?qH:r&1||Ya(e)&33554432?_S:ER;return e.singleQuote?\"'\"+o(e.text,39)+\"'\":'\"'+o(e.text,34)+'\"'}case 14:case 15:case 16:case 17:{let o=r&1||Ya(e)&33554432?_S:ER,s=(i=e.rawText)!=null?i:Rwe(o(e.text,96));switch(e.kind){case 14:return\"`\"+s+\"`\";case 15:return\"`\"+s+\"${\";case 16:return\"}\"+s+\"${\";case 17:return\"}\"+s+\"`\"}break}case 8:case 9:return e.text;case 13:return r&4&&e.isUnterminated?e.text+(e.text.charCodeAt(e.text.length-1)===92?\" /\":\"/\"):e.text}return L.fail(`Literal kind '${e.kind}' not accounted for.`)}function dwe(e,t){return ws(e)||!e.parent||t&4&&e.isUnterminated?!1:Vf(e)&&e.numericLiteralFlags&512?!!(t&8):!a3(e)}function Use(e){return Ta(e)?'\"'+ER(e)+'\"':\"\"+e}function Vse(e){return Hl(e).replace(/^(\\d)/,\"_$1\").replace(/\\W/g,\"_\")}function sH(e){return(G_(e)&3)!==0||cH(e)}function cH(e){let t=nm(e);return t.kind===257&&t.parent.kind===295}function lu(e){return Tc(e)&&(e.name.kind===10||mp(e))}function b6(e){return Tc(e)&&e.name.kind===10}function lH(e){return Tc(e)&&yo(e.name)}function jse(e){return Tc(e)||Re(e)}function CI(e){return fwe(e.valueDeclaration)}function fwe(e){return!!e&&e.kind===264&&!e.body}function Hse(e){return e.kind===308||e.kind===264||SA(e)}function mp(e){return!!(e.flags&1024)}function D0(e){return lu(e)&&uH(e)}function uH(e){switch(e.parent.kind){case 308:return Lc(e.parent);case 265:return lu(e.parent.parent)&&Li(e.parent.parent.parent)&&!Lc(e.parent.parent.parent)}return!1}function dH(e){var t;return(t=e.declarations)==null?void 0:t.find(r=>!D0(r)&&!(Tc(r)&&mp(r)))}function _we(e){return e===1||e===100||e===199}function aS(e,t){return Lc(e)||d_(t)||_we(Rl(t))&&!!e.commonJsModuleIndicator}function fH(e,t){switch(e.scriptKind){case 1:case 3:case 2:case 4:break;default:return!1}return e.isDeclarationFile?!1:Uf(t,\"alwaysStrict\")||nde(e.statements)?!0:Lc(e)||d_(t)?Rl(t)>=5?!0:!t.noImplicitUseStrict:!1}function _H(e){return!!(e.flags&16777216)||Mr(e,2)}function pH(e,t){switch(e.kind){case 308:case 266:case 295:case 264:case 245:case 246:case 247:case 173:case 171:case 174:case 175:case 259:case 215:case 216:case 169:case 172:return!0;case 238:return!SA(t)}return!1}function mH(e){switch(L.type(e),e.kind){case 341:case 349:case 326:return!0;default:return hH(e)}}function hH(e){switch(L.type(e),e.kind){case 176:case 177:case 170:case 178:case 181:case 182:case 320:case 260:case 228:case 261:case 262:case 348:case 259:case 171:case 173:case 174:case 175:case 215:case 216:return!0;default:return!1}}function yT(e){switch(e.kind){case 269:case 268:return!0;default:return!1}}function Wse(e){return yT(e)||N0(e)}function E6(e){switch(e.kind){case 269:case 268:case 240:case 260:case 259:case 264:case 262:case 261:case 263:return!0;default:return!1}}function zse(e){return Uw(e)||Tc(e)||Mh(e)||Dd(e)}function Uw(e){return yT(e)||Il(e)}function tm(e){return jn(e.parent,t=>pH(t,t.parent))}function Jse(e,t){let r=tm(e);for(;r;)t(r),r=tm(r)}function os(e){return!e||Fw(e)===0?\"(Missing)\":Qc(e)}function Kse(e){return e.declaration?os(e.declaration.parameters[0].name):void 0}function Vw(e){return e.kind===164&&!yf(e.expression)}function T6(e){var t;switch(e.kind){case 79:case 80:return(t=e.emitNode)!=null&&t.autoGenerate?void 0:e.escapedText;case 10:case 8:case 14:return Bs(e.text);case 164:return yf(e.expression)?Bs(e.expression.text):void 0;default:return L.assertNever(e)}}function wA(e){return L.checkDefined(T6(e))}function qd(e){switch(e.kind){case 108:return\"this\";case 80:case 79:return Fw(e)===0?vr(e):Qc(e);case 163:return qd(e.left)+\".\"+qd(e.right);case 208:return Re(e.name)||pi(e.name)?qd(e.expression)+\".\"+qd(e.name):L.assertNever(e.name);case 314:return qd(e.left)+qd(e.right);default:return L.assertNever(e)}}function hr(e,t,r,i,o,s){let l=Gn(e);return Nu(l,e,t,r,i,o,s)}function RA(e,t,r,i,o,s,l){let f=xo(e.text,t.pos);return al(e,f,t.end-f,r,i,o,s,l)}function Nu(e,t,r,i,o,s,l){let f=w0(e,t);return al(e,f.start,f.length,r,i,o,s,l)}function Lh(e,t,r,i){let o=w0(e,t);return S6(e,o.start,o.length,r,i)}function jw(e,t,r,i){let o=xo(e.text,t.pos);return S6(e,o,t.end-o,r,i)}function gH(e,t,r){L.assertGreaterThanOrEqual(t,0),L.assertGreaterThanOrEqual(r,0),e&&(L.assertLessThanOrEqual(t,e.text.length),L.assertLessThanOrEqual(t+r,e.text.length))}function S6(e,t,r,i,o){return gH(e,t,r),{file:e,start:t,length:r,code:i.code,category:i.category,messageText:i.next?i:i.messageText,relatedInformation:o}}function yH(e,t,r){return{file:e,start:0,length:0,code:t.code,category:t.category,messageText:t.next?t:t.messageText,relatedInformation:r}}function qse(e){return typeof e.messageText==\"string\"?{code:e.code,category:e.category,messageText:e.messageText,next:e.next}:e.messageText}function vH(e,t,r){return{file:e,start:t.pos,length:t.end-t.pos,code:r.code,category:r.category,messageText:r.message}}function Pg(e,t){let r=kg(e.languageVersion,!0,e.languageVariant,e.text,void 0,t);r.scan();let i=r.getTokenPos();return Wc(i,r.getTextPos())}function Xse(e,t){let r=kg(e.languageVersion,!0,e.languageVariant,e.text,void 0,t);return r.scan(),r.getToken()}function pwe(e,t){let r=xo(e.text,t.pos);if(t.body&&t.body.kind===238){let{line:i}=Gs(e,t.body.pos),{line:o}=Gs(e,t.body.end);if(i<o)return il(r,Bw(i,e)-r+1)}return Wc(r,t.end)}function w0(e,t){let r=t;switch(t.kind){case 308:let s=xo(e.text,0,!1);return s===e.text.length?il(0,0):Pg(e,s);case 257:case 205:case 260:case 228:case 261:case 264:case 263:case 302:case 259:case 215:case 171:case 174:case 175:case 262:case 169:case 168:case 271:r=t.name;break;case 216:return pwe(e,t);case 292:case 293:let l=xo(e.text,t.pos),f=t.statements.length>0?t.statements[0].pos:t.end;return Wc(l,f)}if(r===void 0)return Pg(e,t.pos);L.assert(!dm(r));let i=rc(r),o=i||CS(t)?r.pos:xo(e.text,r.pos);return i?(L.assert(o===r.pos,\"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809\"),L.assert(o===r.end,\"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809\")):(L.assert(o>=r.pos,\"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809\"),L.assert(o<=r.end,\"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809\")),Wc(o,r.end)}function kd(e){return(e.externalModuleIndicator||e.commonJsModuleIndicator)!==void 0}function Mf(e){return e.scriptKind===6}function R0(e){return!!(wg(e)&2048)}function x6(e){return!!(wg(e)&64&&!Ad(e,e.parent))}function kh(e){return!!(G_(e)&2)}function II(e){return!!(G_(e)&1)}function OA(e){return e.kind===210&&e.expression.kind===106}function Dd(e){return e.kind===210&&e.expression.kind===100}function NA(e){return TL(e)&&e.keywordToken===100&&e.name.escapedText===\"meta\"}function ib(e){return Mh(e)&&mb(e.argument)&&yo(e.argument.literal)}function B_(e){return e.kind===241&&e.expression.kind===10}function A6(e){return!!(Ya(e)&2097152)}function C6(e){return A6(e)&&Jc(e)}function mwe(e){return Re(e.name)&&!e.initializer}function I6(e){return A6(e)&&Bc(e)&&Ji(e.declarationList.declarations,mwe)}function bH(e,t){return e.kind!==11?Nm(t.text,e.pos):void 0}function EH(e,t){let r=e.kind===166||e.kind===165||e.kind===215||e.kind===216||e.kind===214||e.kind===257||e.kind===278?Qi(eb(t,e.pos),Nm(t,e.pos)):Nm(t,e.pos);return Pr(r,i=>t.charCodeAt(i.pos+1)===42&&t.charCodeAt(i.pos+2)===42&&t.charCodeAt(i.pos+3)!==47)}function Gm(e){if(179<=e.kind&&e.kind<=202)return!0;switch(e.kind){case 131:case 157:case 148:case 160:case 152:case 134:case 153:case 149:case 155:case 144:return!0;case 114:return e.parent.kind!==219;case 230:return dd(e.parent)&&!IR(e);case 165:return e.parent.kind===197||e.parent.kind===192;case 79:(e.parent.kind===163&&e.parent.right===e||e.parent.kind===208&&e.parent.name===e)&&(e=e.parent),L.assert(e.kind===79||e.kind===163||e.kind===208,\"'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.\");case 163:case 208:case 108:{let{parent:t}=e;if(t.kind===183)return!1;if(t.kind===202)return!t.isTypeOf;if(179<=t.kind&&t.kind<=202)return!0;switch(t.kind){case 230:return dd(t.parent)&&!IR(t);case 165:return e===t.constraint;case 348:return e===t.constraint;case 169:case 168:case 166:case 257:return e===t.type;case 259:case 215:case 216:case 173:case 171:case 170:case 174:case 175:return e===t.type;case 176:case 177:case 178:return e===t.type;case 213:return e===t.type;case 210:case 211:return ya(t.typeArguments,e);case 212:return!1}}}return!1}function TH(e,t){for(;e;){if(e.kind===t)return!0;e=e.parent}return!1}function vT(e,t){return r(e);function r(i){switch(i.kind){case 250:return t(i);case 266:case 238:case 242:case 243:case 244:case 245:case 246:case 247:case 251:case 252:case 292:case 293:case 253:case 255:case 295:return pa(i,r)}}}function Yse(e,t){return r(e);function r(i){switch(i.kind){case 226:t(i);let o=i.expression;o&&r(o);return;case 263:case 261:case 264:case 262:return;default:if(Ia(i)){if(i.name&&i.name.kind===164){r(i.name.expression);return}}else Gm(i)||pa(i,r)}}}function SH(e){return e&&e.kind===185?e.elementType:e&&e.kind===180?Wp(e.typeArguments):void 0}function $se(e){switch(e.kind){case 261:case 260:case 228:case 184:return e.members;case 207:return e.properties}}function PA(e){if(e)switch(e.kind){case 205:case 302:case 166:case 299:case 169:case 168:case 300:case 257:return!0}return!1}function Qse(e){return PA(e)||rb(e)}function L6(e){return e.parent.kind===258&&e.parent.parent.kind===240}function Zse(e){return Yn(e)?rs(e.parent)&&ar(e.parent.parent)&&ic(e.parent.parent)===2||k6(e.parent):!1}function k6(e){return Yn(e)?ar(e)&&ic(e)===1:!1}function ece(e){return(wi(e)?kh(e)&&Re(e.name)&&L6(e):Na(e)?jI(e)&&zc(e):$d(e)&&jI(e))||k6(e)}function tce(e){switch(e.kind){case 171:case 170:case 173:case 174:case 175:case 259:case 215:return!0}return!1}function xH(e,t){for(;;){if(t&&t(e),e.statement.kind!==253)return e.statement;e=e.statement}}function bT(e){return e&&e.kind===238&&Ia(e.parent)}function s_(e){return e&&e.kind===171&&e.parent.kind===207}function D6(e){return(e.kind===171||e.kind===174||e.kind===175)&&(e.parent.kind===207||e.parent.kind===228)}function nce(e){return e&&e.kind===1}function hwe(e){return e&&e.kind===0}function MA(e,t,r){return e.properties.filter(i=>{if(i.kind===299){let o=T6(i.name);return t===o||!!r&&r===o}return!1})}function rce(e,t,r){return ks(MA(e,t),i=>fu(i.initializer)?wr(i.initializer.elements,o=>yo(o)&&o.text===r):void 0)}function LI(e){if(e&&e.statements.length){let t=e.statements[0].expression;return zr(t,rs)}}function w6(e,t,r){return ks(Hw(e,t),i=>fu(i.initializer)?wr(i.initializer.elements,o=>yo(o)&&o.text===r):void 0)}function Hw(e,t){let r=LI(e);return r?MA(r,t):Je}function Xd(e){return jn(e.parent,Ia)}function ice(e){return jn(e.parent,Ds)}function Zc(e){return jn(e.parent,Yr)}function gwe(e){return jn(e.parent,t=>Yr(t)||Ia(t)?\"quit\":oc(t))}function R6(e){return jn(e.parent,SA)}function Ku(e,t,r){for(L.assert(e.kind!==308);;){if(e=e.parent,!e)return L.fail();switch(e.kind){case 164:if(r&&Yr(e.parent.parent))return e;e=e.parent.parent;break;case 167:e.parent.kind===166&&_l(e.parent.parent)?e=e.parent.parent:_l(e.parent)&&(e=e.parent);break;case 216:if(!t)continue;case 259:case 215:case 264:case 172:case 169:case 168:case 171:case 170:case 173:case 174:case 175:case 176:case 177:case 178:case 263:case 308:return e}}}function ace(e){switch(e.kind){case 216:case 259:case 215:case 169:return!0;case 238:switch(e.parent.kind){case 173:case 171:case 174:case 175:return!0;default:return!1}default:return!1}}function O6(e){Re(e)&&(sl(e.parent)||Jc(e.parent))&&e.parent.name===e&&(e=e.parent);let t=Ku(e,!0,!1);return Li(t)}function oce(e){let t=Ku(e,!1,!1);if(t)switch(t.kind){case 173:case 259:case 215:return t}}function Ww(e,t){for(;;){if(e=e.parent,!e)return;switch(e.kind){case 164:e=e.parent;break;case 259:case 215:case 216:if(!t)continue;case 169:case 168:case 171:case 170:case 173:case 174:case 175:case 172:return e;case 167:e.parent.kind===166&&_l(e.parent.parent)?e=e.parent.parent:_l(e.parent)&&(e=e.parent);break}}}function ET(e){if(e.kind===215||e.kind===216){let t=e,r=e.parent;for(;r.kind===214;)t=r,r=r.parent;if(r.kind===210&&r.expression===t)return r}}function ywe(e){return e.kind===106||Pu(e)}function Pu(e){let t=e.kind;return(t===208||t===209)&&e.expression.kind===106}function zw(e){let t=e.kind;return(t===208||t===209)&&e.expression.kind===108}function N6(e){var t;return!!e&&wi(e)&&((t=e.initializer)==null?void 0:t.kind)===108}function sce(e){return!!e&&(xf(e)||yl(e))&&ar(e.parent.parent)&&e.parent.parent.operatorToken.kind===63&&e.parent.parent.right.kind===108}function Jw(e){switch(e.kind){case 180:return e.typeName;case 230:return bc(e.expression)?e.expression:void 0;case 79:case 163:return e}}function P6(e){switch(e.kind){case 212:return e.tag;case 283:case 282:return e.tagName;default:return e.expression}}function M6(e,t,r,i){if(e&&zl(t)&&pi(t.name))return!1;switch(t.kind){case 260:return!0;case 228:return!e;case 169:return r!==void 0&&(e?sl(r):Yr(r)&&!B0(t)&&!aW(t));case 174:case 175:case 171:return t.body!==void 0&&r!==void 0&&(e?sl(r):Yr(r));case 166:return e?r!==void 0&&r.body!==void 0&&(r.kind===173||r.kind===171||r.kind===175)&&F0(r)!==t&&i!==void 0&&i.kind===260:!1}return!1}function FA(e,t,r,i){return bf(t)&&M6(e,t,r,i)}function Kw(e,t,r,i){return FA(e,t,r,i)||kI(e,t,r)}function kI(e,t,r){switch(t.kind){case 260:return vt(t.members,i=>Kw(e,i,t,r));case 228:return!e&&vt(t.members,i=>Kw(e,i,t,r));case 171:case 175:case 173:return vt(t.parameters,i=>FA(e,i,t,r));default:return!1}}function O0(e,t){if(FA(e,t))return!0;let r=Vm(t);return!!r&&kI(e,r,t)}function AH(e,t,r){let i;if(rb(t)){let{firstAccessor:o,secondAccessor:s,setAccessor:l}=kT(r.members,t),f=bf(o)?o:s&&bf(s)?s:void 0;if(!f||t!==f)return!1;i=l?.parameters}else Nc(t)&&(i=t.parameters);if(FA(e,t,r))return!0;if(i){for(let o of i)if(!G0(o)&&FA(e,o,t,r))return!0}return!1}function CH(e){if(e.textSourceNode){switch(e.textSourceNode.kind){case 10:return CH(e.textSourceNode);case 14:return e.text===\"\"}return!1}return e.text===\"\"}function DI(e){let{parent:t}=e;return t.kind===283||t.kind===282||t.kind===284?t.tagName===e:!1}function Dh(e){switch(e.kind){case 106:case 104:case 110:case 95:case 13:case 206:case 207:case 208:case 209:case 210:case 211:case 212:case 231:case 213:case 235:case 232:case 214:case 215:case 228:case 216:case 219:case 217:case 218:case 221:case 222:case 223:case 224:case 227:case 225:case 229:case 281:case 282:case 285:case 226:case 220:case 233:return!0;case 230:return!dd(e.parent)&&!x2(e.parent);case 163:for(;e.parent.kind===163;)e=e.parent;return e.parent.kind===183||iS(e.parent)||IL(e.parent)||gb(e.parent)||DI(e);case 314:for(;gb(e.parent);)e=e.parent;return e.parent.kind===183||iS(e.parent)||IL(e.parent)||gb(e.parent)||DI(e);case 80:return ar(e.parent)&&e.parent.left===e&&e.parent.operatorToken.kind===101;case 79:if(e.parent.kind===183||iS(e.parent)||IL(e.parent)||gb(e.parent)||DI(e))return!0;case 8:case 9:case 10:case 14:case 108:return F6(e);default:return!1}}function F6(e){let{parent:t}=e;switch(t.kind){case 257:case 166:case 169:case 168:case 302:case 299:case 205:return t.initializer===e;case 241:case 242:case 243:case 244:case 250:case 251:case 252:case 292:case 254:return t.expression===e;case 245:let r=t;return r.initializer===e&&r.initializer.kind!==258||r.condition===e||r.incrementor===e;case 246:case 247:let i=t;return i.initializer===e&&i.initializer.kind!==258||i.expression===e;case 213:case 231:return e===t.expression;case 236:return e===t.expression;case 164:return e===t.expression;case 167:case 291:case 290:case 301:return!0;case 230:return t.expression===e&&!Gm(t);case 300:return t.objectAssignmentInitializer===e;case 235:return e===t.expression;default:return Dh(t)}}function G6(e){for(;e.kind===163||e.kind===79;)e=e.parent;return e.kind===183}function cce(e){return qm(e)&&!!e.parent.moduleSpecifier}function ab(e){return e.kind===268&&e.moduleReference.kind===280}function wI(e){return L.assert(ab(e)),e.moduleReference.expression}function IH(e){return N0(e)&&$I(e.initializer).arguments[0]}function GA(e){return e.kind===268&&e.moduleReference.kind!==280}function Cu(e){return Yn(e)}function vwe(e){return!Yn(e)}function Yn(e){return!!e&&!!(e.flags&262144)}function B6(e){return!!e&&!!(e.flags&67108864)}function LH(e){return!Mf(e)}function qw(e){return!!e&&!!(e.flags&8388608)}function U6(e){return m_(e)&&Re(e.typeName)&&e.typeName.escapedText===\"Object\"&&e.typeArguments&&e.typeArguments.length===2&&(e.typeArguments[0].kind===152||e.typeArguments[0].kind===148)}function qu(e,t){if(e.kind!==210)return!1;let{expression:r,arguments:i}=e;if(r.kind!==79||r.escapedText!==\"require\"||i.length!==1)return!1;let o=i[0];return!t||es(o)}function kH(e){return uce(e,!1)}function N0(e){return uce(e,!0)}function lce(e){return Wo(e)&&N0(e.parent.parent)}function uce(e,t){return wi(e)&&!!e.initializer&&qu(t?$I(e.initializer):e.initializer,!0)}function DH(e){return Bc(e)&&e.declarationList.declarations.length>0&&Ji(e.declarationList.declarations,t=>kH(t))}function Xw(e){return e===39||e===34}function V6(e,t){return k0(t,e).charCodeAt(0)===34}function RI(e){return ar(e)||Us(e)||Re(e)||Pa(e)}function Yw(e){return Yn(e)&&e.initializer&&ar(e.initializer)&&(e.initializer.operatorToken.kind===56||e.initializer.operatorToken.kind===60)&&e.name&&bc(e.name)&&BA(e.name,e.initializer.left)?e.initializer.right:e.initializer}function $w(e){let t=Yw(e);return t&&ob(t,ub(e.name))}function bwe(e,t){return mn(e.properties,r=>yl(r)&&Re(r.name)&&r.name.escapedText===\"value\"&&r.initializer&&ob(r.initializer,t))}function oS(e){if(e&&e.parent&&ar(e.parent)&&e.parent.operatorToken.kind===63){let t=ub(e.parent.left);return ob(e.parent.right,t)||Ewe(e.parent.left,e.parent.right,t)}if(e&&Pa(e)&&sS(e)){let t=bwe(e.arguments[2],e.arguments[1].text===\"prototype\");if(t)return t}}function ob(e,t){if(Pa(e)){let r=vs(e.expression);return r.kind===215||r.kind===216?e:void 0}if(e.kind===215||e.kind===228||e.kind===216||rs(e)&&(e.properties.length===0||t))return e}function Ewe(e,t,r){let i=ar(t)&&(t.operatorToken.kind===56||t.operatorToken.kind===60)&&ob(t.right,r);if(i&&BA(e,t.left))return i}function dce(e){let t=wi(e.parent)?e.parent.name:ar(e.parent)&&e.parent.operatorToken.kind===63?e.parent.left:void 0;return t&&ob(e.right,ub(t))&&bc(t)&&BA(t,e.left)}function wH(e){if(ar(e.parent)){let t=(e.parent.operatorToken.kind===56||e.parent.operatorToken.kind===60)&&ar(e.parent.parent)?e.parent.parent:e.parent;if(t.operatorToken.kind===63&&Re(t.left))return t.left}else if(wi(e.parent))return e.parent.name}function BA(e,t){return c_(e)&&c_(t)?l_(e)===l_(t):Ah(e)&&j6(t)&&(t.expression.kind===108||Re(t.expression)&&(t.expression.escapedText===\"window\"||t.expression.escapedText===\"self\"||t.expression.escapedText===\"global\"))?BA(e,eR(t)):j6(e)&&j6(t)?wh(e)===wh(t)&&BA(e.expression,t.expression):!1}function Qw(e){for(;Iu(e,!0);)e=e.right;return e}function TT(e){return Re(e)&&e.escapedText===\"exports\"}function RH(e){return Re(e)&&e.escapedText===\"module\"}function Bm(e){return(br(e)||Zw(e))&&RH(e.expression)&&wh(e)===\"exports\"}function ic(e){let t=Twe(e);return t===5||Yn(e)?t:0}function sS(e){return Fn(e.arguments)===3&&br(e.expression)&&Re(e.expression.expression)&&vr(e.expression.expression)===\"Object\"&&vr(e.expression.name)===\"defineProperty\"&&yf(e.arguments[1])&&cS(e.arguments[0],!0)}function j6(e){return br(e)||Zw(e)}function Zw(e){return Vs(e)&&yf(e.argumentExpression)}function ST(e,t){return br(e)&&(!t&&e.expression.kind===108||Re(e.name)&&cS(e.expression,!0))||H6(e,t)}function H6(e,t){return Zw(e)&&(!t&&e.expression.kind===108||bc(e.expression)||ST(e.expression,!0))}function cS(e,t){return bc(e)||ST(e,t)}function eR(e){return br(e)?e.name:e.argumentExpression}function Twe(e){if(Pa(e)){if(!sS(e))return 0;let t=e.arguments[0];return TT(t)||Bm(t)?8:ST(t)&&wh(t)===\"prototype\"?9:7}return e.operatorToken.kind!==63||!Us(e.left)||Swe(Qw(e))?0:cS(e.left.expression,!0)&&wh(e.left)===\"prototype\"&&rs(OH(e))?6:tR(e.left)}function Swe(e){return NS(e)&&Vf(e.expression)&&e.expression.text===\"0\"}function W6(e){if(br(e))return e.name;let t=vs(e.argumentExpression);return Vf(t)||es(t)?t:e}function wh(e){let t=W6(e);if(t){if(Re(t))return t.escapedText;if(es(t)||Vf(t))return Bs(t.text)}}function tR(e){if(e.expression.kind===108)return 4;if(Bm(e))return 2;if(cS(e.expression,!0)){if(ub(e.expression))return 3;let t=e;for(;!Re(t.expression);)t=t.expression;let r=t.expression;if((r.escapedText===\"exports\"||r.escapedText===\"module\"&&wh(t)===\"exports\")&&ST(e))return 1;if(cS(e,!0)||Vs(e)&&Y6(e))return 5}return 0}function OH(e){for(;ar(e.right);)e=e.right;return e.right}function nR(e){return ar(e)&&ic(e)===3}function fce(e){return Yn(e)&&e.parent&&e.parent.kind===241&&(!Vs(e)||Zw(e))&&!!x0(e.parent)}function rR(e,t){let{valueDeclaration:r}=e;(!r||!(t.flags&16777216&&!Yn(t)&&!(r.flags&16777216))&&RI(r)&&!RI(t)||r.kind!==t.kind&&jse(r))&&(e.valueDeclaration=t)}function _ce(e){if(!e||!e.valueDeclaration)return!1;let t=e.valueDeclaration;return t.kind===259||wi(t)&&t.initializer&&Ia(t.initializer)}function iR(e){var t,r;switch(e.kind){case 257:case 205:return(t=jn(e.initializer,i=>qu(i,!0)))==null?void 0:t.arguments[0];case 269:return zr(e.moduleSpecifier,es);case 268:return zr((r=zr(e.moduleReference,um))==null?void 0:r.expression,es);case 270:case 277:return zr(e.parent.moduleSpecifier,es);case 271:case 278:return zr(e.parent.parent.moduleSpecifier,es);case 273:return zr(e.parent.parent.parent.moduleSpecifier,es);default:L.assertNever(e)}}function aR(e){return oR(e)||L.failBadSyntaxKind(e.parent)}function oR(e){switch(e.parent.kind){case 269:case 275:return e.parent;case 280:return e.parent.parent;case 210:return Dd(e.parent)||qu(e.parent,!1)?e.parent:void 0;case 198:return L.assert(yo(e)),zr(e.parent.parent,Mh);default:return}}function UA(e){switch(e.kind){case 269:case 275:return e.moduleSpecifier;case 268:return e.moduleReference.kind===280?e.moduleReference.expression:void 0;case 202:return ib(e)?e.argument.literal:void 0;case 210:return e.arguments[0];case 264:return e.name.kind===10?e.name:void 0;default:return L.assertNever(e)}}function VA(e){switch(e.kind){case 269:return e.importClause&&zr(e.importClause.namedBindings,nv);case 268:return e;case 275:return e.exportClause&&zr(e.exportClause,qm);default:return L.assertNever(e)}}function lS(e){return e.kind===269&&!!e.importClause&&!!e.importClause.name}function z6(e,t){if(e.name){let r=t(e);if(r)return r}if(e.namedBindings){let r=nv(e.namedBindings)?t(e.namedBindings):mn(e.namedBindings.elements,t);if(r)return r}}function uS(e){if(e)switch(e.kind){case 166:case 171:case 170:case 300:case 299:case 169:case 168:return e.questionToken!==void 0}return!1}function jA(e){let t=S2(e)?Sl(e.parameters):void 0,r=zr(t&&t.name,Re);return!!r&&r.escapedText===\"new\"}function Ff(e){return e.kind===349||e.kind===341||e.kind===343}function sR(e){return Ff(e)||Ep(e)}function xwe(e){return Ol(e)&&ar(e.expression)&&e.expression.operatorToken.kind===63?Qw(e.expression):void 0}function pce(e){return Ol(e)&&ar(e.expression)&&ic(e.expression)!==0&&ar(e.expression.right)&&(e.expression.right.operatorToken.kind===56||e.expression.right.operatorToken.kind===60)?e.expression.right.right:void 0}function NH(e){switch(e.kind){case 240:let t=HA(e);return t&&t.initializer;case 169:return e.initializer;case 299:return e.initializer}}function HA(e){return Bc(e)?Sl(e.declarationList.declarations):void 0}function mce(e){return Tc(e)&&e.body&&e.body.kind===264?e.body:void 0}function cR(e){if(e.kind>=240&&e.kind<=256)return!0;switch(e.kind){case 79:case 108:case 106:case 163:case 233:case 209:case 208:case 205:case 215:case 216:case 171:case 174:case 175:return!0;default:return!1}}function lR(e){switch(e.kind){case 216:case 223:case 238:case 249:case 176:case 292:case 260:case 228:case 172:case 173:case 182:case 177:case 248:case 256:case 243:case 209:case 239:case 1:case 263:case 302:case 274:case 275:case 278:case 241:case 246:case 247:case 245:case 259:case 215:case 181:case 174:case 79:case 242:case 269:case 268:case 178:case 261:case 320:case 326:case 253:case 171:case 170:case 264:case 199:case 267:case 207:case 166:case 214:case 208:case 299:case 169:case 168:case 250:case 175:case 300:case 301:case 252:case 254:case 255:case 262:case 165:case 257:case 240:case 244:case 251:return!0;default:return!1}}function PH(e,t){let r;PA(e)&&Jy(e)&&Kd(e.initializer)&&(r=si(r,hce(e,To(e.initializer.jsDoc))));let i=e;for(;i&&i.parent;){if(Kd(i)&&(r=si(r,hce(e,To(i.jsDoc)))),i.kind===166){r=si(r,(t?joe:fI)(i));break}if(i.kind===165){r=si(r,(t?zoe:Woe)(i));break}i=MH(i)}return r||Je}function hce(e,t){if(dm(t)){let r=Pr(t.tags,i=>gce(e,i));return t.tags===r?[t]:r}return gce(e,t)?[t]:void 0}function gce(e,t){return!(DL(t)||v3(t))||!t.parent||!dm(t.parent)||!ud(t.parent.parent)||t.parent.parent===e}function MH(e){let t=e.parent;if(t.kind===299||t.kind===274||t.kind===169||t.kind===241&&e.kind===208||t.kind===250||mce(t)||ar(e)&&e.operatorToken.kind===63)return t;if(t.parent&&(HA(t.parent)===e||ar(t)&&t.operatorToken.kind===63))return t.parent;if(t.parent&&t.parent.parent&&(HA(t.parent.parent)||NH(t.parent.parent)===e||pce(t.parent.parent)))return t.parent.parent}function uR(e){if(e.symbol)return e.symbol;if(!Re(e.name))return;let t=e.name.escapedText,r=sb(e);if(!r)return;let i=wr(r.parameters,o=>o.name.kind===79&&o.name.escapedText===t);return i&&i.symbol}function J6(e){if(dm(e.parent)&&e.parent.tags){let t=wr(e.parent.tags,Ff);if(t)return t}return sb(e)}function sb(e){let t=WA(e);if(t)return $d(t)&&t.type&&Ia(t.type)?t.type:Ia(t)?t:void 0}function WA(e){let t=dS(e);if(t)return pce(t)||xwe(t)||NH(t)||HA(t)||mce(t)||t}function dS(e){let t=OI(e);if(!t)return;let r=t.parent;if(r&&r.jsDoc&&t===Os(r.jsDoc))return r}function OI(e){return jn(e.parent,dm)}function yce(e){let t=e.name.escapedText,{typeParameters:r}=e.parent.parent.parent;return r&&wr(r,i=>i.name.escapedText===t)}function Awe(e){return!!e.typeArguments}function xT(e){let t=e.parent;for(;;){switch(t.kind){case 223:let r=t.operatorToken.kind;return Mg(r)&&t.left===e?r===63||HI(r)?1:2:0;case 221:case 222:let i=t.operator;return i===45||i===46?2:0;case 246:case 247:return t.initializer===e?1:0;case 214:case 206:case 227:case 232:e=t;break;case 301:e=t.parent;break;case 300:if(t.name!==e)return 0;e=t.parent;break;case 299:if(t.name===e)return 0;e=t.parent;break;default:return 0}t=e.parent}}function Um(e){return xT(e)!==0}function vce(e){switch(e.kind){case 238:case 240:case 251:case 242:case 252:case 266:case 292:case 293:case 253:case 245:case 246:case 247:case 243:case 244:case 255:case 295:return!0}return!1}function bce(e){return ms(e)||xs(e)||xA(e)||Jc(e)||Ec(e)}function Ece(e,t){for(;e&&e.kind===t;)e=e.parent;return e}function dR(e){return Ece(e,193)}function qy(e){return Ece(e,214)}function Tce(e){let t;for(;e&&e.kind===193;)t=e,e=e.parent;return[t,e]}function FH(e){for(;wS(e);)e=e.type;return e}function vs(e,t){return ql(e,t?17:1)}function GH(e){return e.kind!==208&&e.kind!==209?!1:(e=qy(e.parent),e&&e.kind===217)}function AT(e,t){for(;e;){if(e===t)return!0;e=e.parent}return!1}function Rh(e){return!Li(e)&&!La(e)&&Kl(e.parent)&&e.parent.name===e}function fR(e){let t=e.parent;switch(e.kind){case 10:case 14:case 8:if(ts(t))return t.parent;case 79:if(Kl(t))return t.name===e?t:void 0;if(Yu(t)){let r=t.parent;return xp(r)&&r.name===t?r:void 0}else{let r=t.parent;return ar(r)&&ic(r)!==0&&(r.left.symbol||r.symbol)&&sa(r)===e?r:void 0}case 80:return Kl(t)&&t.name===e?t:void 0;default:return}}function _R(e){return yf(e)&&e.parent.kind===164&&Kl(e.parent.parent)}function Sce(e){let t=e.parent;switch(t.kind){case 169:case 168:case 171:case 170:case 174:case 175:case 302:case 299:case 208:return t.name===e;case 163:return t.right===e;case 205:case 273:return t.propertyName===e;case 278:case 288:case 282:case 283:case 284:return!0}return!1}function Cwe(e){return e.kind===268||e.kind===267||e.kind===270&&e.name||e.kind===271||e.kind===277||e.kind===273||e.kind===278||e.kind===274&&zA(e)?!0:Yn(e)&&(ar(e)&&ic(e)===2&&zA(e)||br(e)&&ar(e.parent)&&e.parent.left===e&&e.parent.operatorToken.kind===63&&pR(e.parent.right))}function BH(e){switch(e.parent.kind){case 270:case 273:case 271:case 278:case 274:case 268:case 277:return e.parent;case 163:do e=e.parent;while(e.parent.kind===163);return BH(e)}}function pR(e){return bc(e)||_u(e)}function zA(e){let t=UH(e);return pR(t)}function UH(e){return pc(e)?e.expression:e.right}function xce(e){return e.kind===300?e.name:e.kind===299?e.initializer:e.parent.right}function hp(e){let t=P0(e);if(t&&Yn(e)){let r=Koe(e);if(r)return r.class}return t}function P0(e){let t=mR(e.heritageClauses,94);return t&&t.types.length>0?t.types[0]:void 0}function JA(e){if(Yn(e))return qoe(e).map(t=>t.class);{let t=mR(e.heritageClauses,117);return t?.types}}function NI(e){return ku(e)?PI(e)||Je:Yr(e)&&Qi(aT(hp(e)),JA(e))||Je}function PI(e){let t=mR(e.heritageClauses,94);return t?t.types:void 0}function mR(e,t){if(e){for(let r of e)if(r.token===t)return r}}function cb(e,t){for(;e;){if(e.kind===t)return e;e=e.parent}}function Xu(e){return 81<=e&&e<=162}function K6(e){return 126<=e&&e<=162}function Ace(e){return Xu(e)&&!K6(e)}function Iwe(e){return 117<=e&&e<=125}function fS(e){let t=lT(e);return t!==void 0&&Ace(t)}function Lwe(e){let t=lT(e);return t!==void 0&&Xu(t)}function q6(e){let t=nb(e);return!!t&&!K6(t)}function KA(e){return 2<=e&&e<=7}function pl(e){if(!e)return 4;let t=0;switch(e.kind){case 259:case 215:case 171:e.asteriskToken&&(t|=1);case 216:Mr(e,512)&&(t|=2);break}return e.body||(t|=4),t}function qA(e){switch(e.kind){case 259:case 215:case 216:case 171:return e.body!==void 0&&e.asteriskToken===void 0&&Mr(e,512)}return!1}function yf(e){return es(e)||Vf(e)}function X6(e){return tv(e)&&(e.operator===39||e.operator===40)&&Vf(e.operand)}function Xy(e){let t=sa(e);return!!t&&Y6(t)}function Y6(e){if(!(e.kind===164||e.kind===209))return!1;let t=Vs(e)?vs(e.argumentExpression):e.expression;return!yf(t)&&!X6(t)}function M0(e){switch(e.kind){case 79:case 80:return e.escapedText;case 10:case 8:return Bs(e.text);case 164:let t=e.expression;return yf(t)?Bs(t.text):X6(t)?t.operator===40?Xa(t.operator)+t.operand.text:t.operand.text:void 0;default:return L.assertNever(e)}}function c_(e){switch(e.kind){case 79:case 10:case 14:case 8:return!0;default:return!1}}function l_(e){return Ah(e)?vr(e):e.text}function MI(e){return Ah(e)?e.escapedText:Bs(e.text)}function kwe(e){return`__@${$a(e)}@${e.escapedName}`}function hR(e,t){return`__#${$a(e)}@${t}`}function gR(e){return na(e.escapedName,\"__@\")}function Cce(e){return na(e.escapedName,\"__#\")}function Dwe(e){return e.kind===79&&e.escapedText===\"Symbol\"}function Ice(e){return Re(e)?vr(e)===\"__proto__\":yo(e)&&e.text===\"__proto__\"}function FI(e,t){switch(e=ql(e),e.kind){case 228:case 215:if(e.name)return!1;break;case 216:break;default:return!1}return typeof t==\"function\"?t(e):!0}function VH(e){switch(e.kind){case 299:return!Ice(e.name);case 300:return!!e.objectAssignmentInitializer;case 257:return Re(e.name)&&!!e.initializer;case 166:return Re(e.name)&&!!e.initializer&&!e.dotDotDotToken;case 205:return Re(e.name)&&!!e.initializer&&!e.dotDotDotToken;case 169:return!!e.initializer;case 223:switch(e.operatorToken.kind){case 63:case 76:case 75:case 77:return Re(e.left)}break;case 274:return!0}return!1}function vf(e,t){if(!VH(e))return!1;switch(e.kind){case 299:return FI(e.initializer,t);case 300:return FI(e.objectAssignmentInitializer,t);case 257:case 166:case 205:case 169:return FI(e.initializer,t);case 223:return FI(e.right,t);case 274:return FI(e.expression,t)}}function jH(e){return e.escapedText===\"push\"||e.escapedText===\"unshift\"}function CT(e){return nm(e).kind===166}function nm(e){for(;e.kind===205;)e=e.parent.parent;return e}function HH(e){let t=e.kind;return t===173||t===215||t===259||t===216||t===171||t===174||t===175||t===264||t===308}function ws(e){return vp(e.pos)||vp(e.end)}function wwe(e){return ea(e,Li)||e}function WH(e){let t=JH(e),r=e.kind===211&&e.arguments!==void 0;return zH(e.kind,t,r)}function zH(e,t,r){switch(e){case 211:return r?0:1;case 221:case 218:case 219:case 217:case 220:case 224:case 226:return 1;case 223:switch(t){case 42:case 63:case 64:case 65:case 67:case 66:case 68:case 69:case 70:case 71:case 72:case 73:case 78:case 74:case 75:case 76:case 77:return 1}}return 0}function $6(e){let t=JH(e),r=e.kind===211&&e.arguments!==void 0;return yR(e.kind,t,r)}function JH(e){return e.kind===223?e.operatorToken.kind:e.kind===221||e.kind===222?e.operator:e.kind}function yR(e,t,r){switch(e){case 357:return 0;case 227:return 1;case 226:return 2;case 224:return 4;case 223:switch(t){case 27:return 0;case 63:case 64:case 65:case 67:case 66:case 68:case 69:case 70:case 71:case 72:case 73:case 78:case 74:case 75:case 76:case 77:return 3;default:return vR(t)}case 213:case 232:case 221:case 218:case 219:case 217:case 220:return 16;case 222:return 17;case 210:return 18;case 211:return r?19:18;case 212:case 208:case 209:case 233:return 19;case 231:case 235:return 11;case 108:case 106:case 79:case 80:case 104:case 110:case 95:case 8:case 9:case 10:case 206:case 207:case 215:case 216:case 228:case 13:case 14:case 225:case 214:case 229:case 281:case 282:case 285:return 20;default:return-1}}function vR(e){switch(e){case 60:return 4;case 56:return 5;case 55:return 6;case 51:return 7;case 52:return 8;case 50:return 9;case 34:case 35:case 36:case 37:return 10;case 29:case 31:case 32:case 33:case 102:case 101:case 128:case 150:return 11;case 47:case 48:case 49:return 12;case 39:case 40:return 13;case 41:case 43:case 44:return 14;case 42:return 15}return-1}function bR(e){return Pr(e,t=>{switch(t.kind){case 291:return!!t.expression;case 11:return!t.containsOnlyTriviaWhiteSpaces;default:return!0}})}function XA(){let e=[],t=[],r=new Map,i=!1;return{add:s,lookup:o,getGlobalDiagnostics:l,getDiagnostics:f};function o(d){let g;if(d.file?g=r.get(d.file.fileName):g=e,!g)return;let m=Py(g,d,Ks,c4);if(m>=0)return g[m]}function s(d){let g;d.file?(g=r.get(d.file.fileName),g||(g=[],r.set(d.file.fileName,g),Ny(t,d.file.fileName,su))):(i&&(i=!1,e=e.slice()),g=e),Ny(g,d,c4)}function l(){return i=!0,e}function f(d){if(d)return r.get(d)||[];let g=BD(t,m=>r.get(m));return e.length&&g.unshift(...e),g}}function Rwe(e){return e.replace(Jle,\"\\\\${\")}function KH(e){return e&&!!(IS(e)?e.templateFlags:e.head.templateFlags||vt(e.templateSpans,t=>!!t.literal.templateFlags))}function Lce(e){return\"\\\\u\"+(\"0000\"+e.toString(16).toUpperCase()).slice(-4)}function Owe(e,t,r){if(e.charCodeAt(0)===0){let i=r.charCodeAt(t+e.length);return i>=48&&i<=57?\"\\\\x00\":\"\\\\0\"}return Yle.get(e)||Lce(e.charCodeAt(0))}function _S(e,t){let r=t===96?Xle:t===39?qle:Kle;return e.replace(r,Owe)}function ER(e,t){return e=_S(e,t),ez.test(e)?e.replace(ez,r=>Lce(r.charCodeAt(0))):e}function Nwe(e){return\"&#x\"+e.toString(16).toUpperCase()+\";\"}function Pwe(e){return e.charCodeAt(0)===0?\"&#0;\":Zle.get(e)||Nwe(e.charCodeAt(0))}function qH(e,t){let r=t===39?Qle:$le;return e.replace(r,Pwe)}function u_(e){let t=e.length;return t>=2&&e.charCodeAt(0)===e.charCodeAt(t-1)&&Mwe(e.charCodeAt(0))?e.substring(1,t-1):e}function Mwe(e){return e===39||e===34||e===96}function GI(e){let t=e.charCodeAt(0);return t>=97&&t<=122||jl(e,\"-\")||jl(e,\":\")}function Q6(e){let t=s2[1];for(let r=s2.length;r<=e;r++)s2.push(s2[r-1]+t);return s2[e]}function YA(){return s2[1].length}function TR(){return jl(Rf,\"-dev\")||jl(Rf,\"-insiders\")}function SR(e){var t,r,i,o,s,l=!1;function f(C){let P=hw(C);P.length>1?(o=o+P.length-1,s=t.length-C.length+To(P),i=s-t.length===0):i=!1}function d(C){C&&C.length&&(i&&(C=Q6(r)+C,i=!1),t+=C,f(C))}function g(C){C&&(l=!1),d(C)}function m(C){C&&(l=!0),d(C)}function v(){t=\"\",r=0,i=!0,o=0,s=0,l=!1}function S(C){C!==void 0&&(t+=C,f(C),l=!1)}function x(C){C&&C.length&&g(C)}function A(C){(!i||C)&&(t+=e,o++,s=t.length,i=!0,l=!1)}function w(){return i?t.length:t.length+e.length}return v(),{write:g,rawWrite:S,writeLiteral:x,writeLine:A,increaseIndent:()=>{r++},decreaseIndent:()=>{r--},getIndent:()=>r,getTextPos:()=>t.length,getLine:()=>o,getColumn:()=>i?r*YA():t.length-s,getText:()=>t,isAtStartOfLine:()=>i,hasTrailingComment:()=>l,hasTrailingWhitespace:()=>!!t.length&&xh(t.charCodeAt(t.length-1)),clear:v,writeKeyword:g,writeOperator:g,writeParameter:g,writeProperty:g,writePunctuation:g,writeSpace:g,writeStringLiteral:g,writeSymbol:(C,P)=>g(C),writeTrailingSemicolon:g,writeComment:m,getTextPosWithWriteLine:w}}function XH(e){let t=!1;function r(){t&&(e.writeTrailingSemicolon(\";\"),t=!1)}return{...e,writeTrailingSemicolon(){t=!0},writeLiteral(i){r(),e.writeLiteral(i)},writeStringLiteral(i){r(),e.writeStringLiteral(i)},writeSymbol(i,o){r(),e.writeSymbol(i,o)},writePunctuation(i){r(),e.writePunctuation(i)},writeKeyword(i){r(),e.writeKeyword(i)},writeOperator(i){r(),e.writeOperator(i)},writeParameter(i){r(),e.writeParameter(i)},writeSpace(i){r(),e.writeSpace(i)},writeProperty(i){r(),e.writeProperty(i)},writeComment(i){r(),e.writeComment(i)},writeLine(){r(),e.writeLine()},increaseIndent(){r(),e.increaseIndent()},decreaseIndent(){r(),e.decreaseIndent()}}}function xR(e){return e.useCaseSensitiveFileNames?e.useCaseSensitiveFileNames():!1}function lb(e){return Dl(xR(e))}function Z6(e,t,r){return t.moduleName||YH(e,t.fileName,r&&r.fileName)}function kce(e,t){return e.getCanonicalFileName(_a(t,e.getCurrentDirectory()))}function Dce(e,t,r){let i=t.getExternalModuleFileFromDeclaration(r);if(!i||i.isDeclarationFile)return;let o=UA(r);if(!(o&&es(o)&&!Jd(o.text)&&kce(e,i.path).indexOf(kce(e,cu(e.getCommonSourceDirectory())))===-1))return Z6(e,i)}function YH(e,t,r){let i=d=>e.getCanonicalFileName(d),o=Ts(r?ni(r):e.getCommonSourceDirectory(),e.getCurrentDirectory(),i),s=_a(t,e.getCurrentDirectory()),l=Q1(o,s,o,i,!1),f=ld(l);return r?S0(f):f}function wce(e,t,r){let i=t.getCompilerOptions(),o;return i.outDir?o=ld(e4(e,t,i.outDir)):o=ld(e),o+r}function Rce(e,t){return $H(e,t.getCompilerOptions(),t.getCurrentDirectory(),t.getCommonSourceDirectory(),r=>t.getCanonicalFileName(r))}function $H(e,t,r,i,o){let s=t.declarationDir||t.outDir,l=s?tW(e,s,r,i,o):e,f=QH(l);return ld(l)+f}function QH(e){return $c(e,[\".mjs\",\".mts\"])?\".d.mts\":$c(e,[\".cjs\",\".cts\"])?\".d.cts\":$c(e,[\".json\"])?\".d.json.ts\":\".d.ts\"}function Oce(e){return $c(e,[\".d.mts\",\".mjs\",\".mts\"])?[\".mts\",\".mjs\"]:$c(e,[\".d.cts\",\".cjs\",\".cts\"])?[\".cts\",\".cjs\"]:$c(e,[\".d.json.ts\"])?[\".json\"]:[\".tsx\",\".ts\",\".jsx\",\".js\"]}function Ss(e){return e.outFile||e.out}function ZH(e,t){var r,i;if(e.paths)return(i=e.baseUrl)!=null?i:L.checkDefined(e.pathsBasePath||((r=t.getCurrentDirectory)==null?void 0:r.call(t)),\"Encountered 'paths' without a 'baseUrl', config file, or host 'getCurrentDirectory'.\")}function eW(e,t,r){let i=e.getCompilerOptions();if(Ss(i)){let o=Rl(i),s=i.emitDeclarationOnly||o===2||o===4;return Pr(e.getSourceFiles(),l=>(s||!Lc(l))&&pS(l,e,r))}else{let o=t===void 0?e.getSourceFiles():[t];return Pr(o,s=>pS(s,e,r))}}function pS(e,t,r){return!(t.getCompilerOptions().noEmitForJsFiles&&Cu(e))&&!e.isDeclarationFile&&!t.isSourceFileFromExternalLibrary(e)&&(r||!(Mf(e)&&t.getResolvedProjectReferenceToRedirect(e.fileName))&&!t.isSourceOfProjectReferenceRedirect(e.fileName))}function e4(e,t,r){return tW(e,r,t.getCurrentDirectory(),t.getCommonSourceDirectory(),i=>t.getCanonicalFileName(i))}function tW(e,t,r,i,o){let s=_a(e,r);return s=o(s).indexOf(o(i))===0?s.substring(i.length):s,vi(t,s)}function BI(e,t,r,i,o,s,l){e.writeFile(r,i,o,f=>{t.add(ps(_.Could_not_write_file_0_Colon_1,r,f))},s,l)}function Nce(e,t,r){if(e.length>_p(e)&&!r(e)){let i=ni(e);Nce(i,t,r),t(e)}}function nW(e,t,r,i,o,s){try{i(e,t,r)}catch{Nce(ni(So(e)),o,s),i(e,t,r)}}function UI(e,t){let r=Sh(e);return aI(r,t)}function IT(e,t){return aI(e,t)}function Vm(e){return wr(e.members,t=>Ec(t)&&Pf(t.body))}function VI(e){if(e&&e.parameters.length>0){let t=e.parameters.length===2&&G0(e.parameters[0]);return e.parameters[t?1:0]}}function Pce(e){let t=VI(e);return t&&t.type}function F0(e){if(e.parameters.length&&!X0(e)){let t=e.parameters[0];if(G0(t))return t}}function G0(e){return LT(e.name)}function LT(e){return!!e&&e.kind===79&&rW(e)}function mS(e){if(!LT(e))return!1;for(;Yu(e.parent)&&e.parent.left===e;)e=e.parent;return e.parent.kind===183}function rW(e){return e.escapedText===\"this\"}function kT(e,t){let r,i,o,s;return Xy(t)?(r=t,t.kind===174?o=t:t.kind===175?s=t:L.fail(\"Accessor has wrong kind\")):mn(e,l=>{if(rb(l)&&Ca(l)===Ca(t)){let f=M0(l.name),d=M0(t.name);f===d&&(r?i||(i=l):r=l,l.kind===174&&!o&&(o=l),l.kind===175&&!s&&(s=l))}}),{firstAccessor:r,secondAccessor:i,getAccessor:o,setAccessor:s}}function Cl(e){if(!Yn(e)&&Jc(e))return;let t=e.type;return t||!Yn(e)?t:a6(e)?e.typeExpression&&e.typeExpression.type:Vy(e)}function Mce(e){return e.type}function U_(e){return X0(e)?e.type&&e.type.typeExpression&&e.type.typeExpression.type:e.type||(Yn(e)?Aw(e):void 0)}function t4(e){return Uo(A0(e),t=>Fwe(t)?t.typeParameters:void 0)}function Fwe(e){return H_(e)&&!(e.parent.kind===323&&(e.parent.tags.some(Ff)||e.parent.tags.some(kL)))}function Fce(e){let t=VI(e);return t&&Cl(t)}function Gce(e,t,r,i){Bce(e,t,r.pos,i)}function Bce(e,t,r,i){i&&i.length&&r!==i[0].pos&&IT(e,r)!==IT(e,i[0].pos)&&t.writeLine()}function Uce(e,t,r,i){r!==i&&IT(e,r)!==IT(e,i)&&t.writeLine()}function Vce(e,t,r,i,o,s,l,f){if(i&&i.length>0){o&&r.writeSpace(\" \");let d=!1;for(let g of i)d&&(r.writeSpace(\" \"),d=!1),f(e,t,r,g.pos,g.end,l),g.hasTrailingNewLine?r.writeLine():d=!0;d&&s&&r.writeSpace(\" \")}}function jce(e,t,r,i,o,s,l){let f,d;if(l?o.pos===0&&(f=Pr(Nm(e,o.pos),g)):f=Nm(e,o.pos),f){let m=[],v;for(let S of f){if(v){let x=IT(t,v.end);if(IT(t,S.pos)>=x+2)break}m.push(S),v=S}if(m.length){let S=IT(t,To(m).end);IT(t,xo(e,o.pos))>=S+2&&(Gce(t,r,o,f),Vce(e,t,r,m,!1,!0,s,i),d={nodePos:o.pos,detachedCommentEndPos:To(m).end})}}return d;function g(m){return y6(e,m.pos)}}function $A(e,t,r,i,o,s){if(e.charCodeAt(i+1)===42){let l=yw(t,i),f=t.length,d;for(let g=i,m=l.line;g<o;m++){let v=m+1===f?e.length+1:t[m+1];if(g!==i){d===void 0&&(d=Hce(e,t[l.line],i));let x=r.getIndent()*YA()-d+Hce(e,g,v);if(x>0){let A=x%YA(),w=Q6((x-A)/YA());for(r.rawWrite(w);A;)r.rawWrite(\" \"),A--}else r.rawWrite(\"\")}Gwe(e,o,r,s,g,v),g=v}}else r.writeComment(e.substring(i,o))}function Gwe(e,t,r,i,o,s){let l=Math.min(t,s-1),f=v0(e.substring(o,l));f?(r.writeComment(f),l!==t&&r.writeLine()):r.rawWrite(i)}function Hce(e,t,r){let i=0;for(;t<r&&Yp(e.charCodeAt(t));t++)e.charCodeAt(t)===9?i+=YA()-i%YA():i++;return i}function n4(e){return uu(e)!==0}function Wce(e){return Yy(e)!==0}function cd(e,t){return!!hS(e,t)}function Mr(e,t){return!!zce(e,t)}function Ca(e){return _l(e)&&zc(e)||oc(e)}function zc(e){return Mr(e,32)}function iW(e){return cd(e,16384)}function B0(e){return Mr(e,256)}function aW(e){return Mr(e,2)}function rm(e){return Mr(e,128)}function jI(e){return cd(e,64)}function bf(e){return Mr(e,131072)}function hS(e,t){return uu(e)&t}function zce(e,t){return Yy(e)&t}function oW(e,t,r){return e.kind>=0&&e.kind<=162?0:(e.modifierFlagsCache&536870912||(e.modifierFlagsCache=sW(e)|536870912),t&&!(e.modifierFlagsCache&4096)&&(r||Yn(e))&&e.parent&&(e.modifierFlagsCache|=Kce(e)|4096),e.modifierFlagsCache&-536875009)}function uu(e){return oW(e,!0)}function Jce(e){return oW(e,!0,!0)}function Yy(e){return oW(e,!1)}function Kce(e){let t=0;return e.parent&&!ha(e)&&(Yn(e)&&(Xoe(e)&&(t|=4),Yoe(e)&&(t|=8),$oe(e)&&(t|=16),Qoe(e)&&(t|=64),Zoe(e)&&(t|=16384)),ese(e)&&(t|=8192)),t}function qce(e){return sW(e)|Kce(e)}function sW(e){let t=g_(e)?im(e.modifiers):0;return(e.flags&4||e.kind===79&&e.flags&2048)&&(t|=1),t}function im(e){let t=0;if(e)for(let r of e)t|=gS(r.kind);return t}function gS(e){switch(e){case 124:return 32;case 123:return 4;case 122:return 16;case 121:return 8;case 126:return 256;case 127:return 128;case 93:return 1;case 136:return 2;case 85:return 2048;case 88:return 1024;case 132:return 512;case 146:return 64;case 161:return 16384;case 101:return 32768;case 145:return 65536;case 167:return 131072}return 0}function Xce(e){return e===56||e===55}function Yce(e){return Xce(e)||e===53}function HI(e){return e===75||e===76||e===77}function cW(e){return ar(e)&&HI(e.operatorToken.kind)}function AR(e){return Xce(e)||e===60}function CR(e){return ar(e)&&AR(e.operatorToken.kind)}function Mg(e){return e>=63&&e<=78}function lW(e){let t=uW(e);return t&&!t.isImplements?t.class:void 0}function uW(e){if(Vg(e)){if(dd(e.parent)&&Yr(e.parent.parent))return{class:e.parent.parent,isImplements:e.parent.token===117};if(x2(e.parent)){let t=WA(e.parent);if(t&&Yr(t))return{class:t,isImplements:!1}}}}function Iu(e,t){return ar(e)&&(t?e.operatorToken.kind===63:Mg(e.operatorToken.kind))&&Ju(e.left)}function Bwe(e){return Iu(e.parent)&&e.parent.left===e}function Fg(e){if(Iu(e,!0)){let t=e.left.kind;return t===207||t===206}return!1}function IR(e){return lW(e)!==void 0}function bc(e){return e.kind===79||LR(e)}function Yd(e){switch(e.kind){case 79:return e;case 163:do e=e.left;while(e.kind!==79);return e;case 208:do e=e.expression;while(e.kind!==79);return e}}function WI(e){return e.kind===79||e.kind===108||e.kind===106||e.kind===233||e.kind===208&&WI(e.expression)||e.kind===214&&WI(e.expression)}function LR(e){return br(e)&&Re(e.name)&&bc(e.expression)}function kR(e){if(br(e)){let t=kR(e.expression);if(t!==void 0)return t+\".\"+qd(e.name)}else if(Vs(e)){let t=kR(e.expression);if(t!==void 0&&Ys(e.argumentExpression))return t+\".\"+M0(e.argumentExpression)}else if(Re(e))return Gi(e.escapedText)}function ub(e){return ST(e)&&wh(e)===\"prototype\"}function zI(e){return e.parent.kind===163&&e.parent.right===e||e.parent.kind===208&&e.parent.name===e}function $ce(e){return br(e.parent)&&e.parent.name===e||Vs(e.parent)&&e.parent.argumentExpression===e}function Qce(e){return Yu(e.parent)&&e.parent.right===e||br(e.parent)&&e.parent.name===e||gb(e.parent)&&e.parent.right===e}function dW(e){return e.kind===207&&e.properties.length===0}function Zce(e){return e.kind===206&&e.elements.length===0}function QA(e){if(!(!Uwe(e)||!e.declarations)){for(let t of e.declarations)if(t.localSymbol)return t.localSymbol}}function Uwe(e){return e&&Fn(e.declarations)>0&&Mr(e.declarations[0],1024)}function r4(e){return wr(iue,t=>Gc(e,t))}function Vwe(e){let t=[],r=e.length;for(let i=0;i<r;i++){let o=e.charCodeAt(i);o<128?t.push(o):o<2048?(t.push(o>>6|192),t.push(o&63|128)):o<65536?(t.push(o>>12|224),t.push(o>>6&63|128),t.push(o&63|128)):o<131072?(t.push(o>>18|240),t.push(o>>12&63|128),t.push(o>>6&63|128),t.push(o&63|128)):L.assert(!1,\"Unexpected code point\")}return t}function ele(e){let t=\"\",r=Vwe(e),i=0,o=r.length,s,l,f,d;for(;i<o;)s=r[i]>>2,l=(r[i]&3)<<4|r[i+1]>>4,f=(r[i+1]&15)<<2|r[i+2]>>6,d=r[i+2]&63,i+1>=o?f=d=64:i+2>=o&&(d=64),t+=H0.charAt(s)+H0.charAt(l)+H0.charAt(f)+H0.charAt(d),i+=3;return t}function jwe(e){let t=\"\",r=0,i=e.length;for(;r<i;){let o=e[r];if(o<128)t+=String.fromCharCode(o),r++;else if((o&192)===192){let s=o&63;r++;let l=e[r];for(;(l&192)===128;)s=s<<6|l&63,r++,l=e[r];t+=String.fromCharCode(s)}else t+=String.fromCharCode(o),r++}return t}function tle(e,t){return e&&e.base64encode?e.base64encode(t):ele(t)}function nle(e,t){if(e&&e.base64decode)return e.base64decode(t);let r=t.length,i=[],o=0;for(;o<r&&t.charCodeAt(o)!==H0.charCodeAt(64);){let s=H0.indexOf(t[o]),l=H0.indexOf(t[o+1]),f=H0.indexOf(t[o+2]),d=H0.indexOf(t[o+3]),g=(s&63)<<2|l>>4&3,m=(l&15)<<4|f>>2&15,v=(f&3)<<6|d&63;m===0&&f!==0?i.push(g):v===0&&d!==0?i.push(g,m):i.push(g,m,v),o+=4}return jwe(i)}function fW(e,t){let r=Ta(t)?t:t.readFile(e);if(!r)return;let i=vJ(e,r);return i.error?void 0:i.config}function JI(e,t){return fW(e,t)||{}}function gp(e,t){return!t.directoryExists||t.directoryExists(e)}function db(e){switch(e.newLine){case 0:return eue;case 1:case void 0:return tue}}function Gf(e,t=e){return L.assert(t>=e||t===-1),{pos:e,end:t}}function i4(e,t){return Gf(e.pos,t)}function fb(e,t){return Gf(t,e.end)}function $y(e){let t=g_(e)?dA(e.modifiers,du):void 0;return t&&!vp(t.end)?fb(e,t.end):e}function yp(e){if(Na(e)||Nc(e))return fb(e,e.name.pos);let t=g_(e)?Os(e.modifiers):void 0;return t&&!vp(t.end)?fb(e,t.end):$y(e)}function Hwe(e){return e.pos===e.end}function _W(e,t){return Gf(e,e+Xa(t).length)}function DT(e,t){return ile(e,e,t)}function a4(e,t,r){return Bf(KI(e,r,!1),KI(t,r,!1),r)}function rle(e,t,r){return Bf(e.end,t.end,r)}function ile(e,t,r){return Bf(KI(e,r,!1),t.end,r)}function DR(e,t,r){return Bf(e.end,KI(t,r,!1),r)}function pW(e,t,r,i){let o=KI(t,r,i);return oI(r,e.end,o)}function Wwe(e,t,r){return oI(r,e.end,t.end)}function ale(e,t){return!Bf(e.pos,e.end,t)}function Bf(e,t,r){return oI(r,e,t)===0}function KI(e,t,r){return vp(e.pos)?-1:xo(t.text,e.pos,!1,r)}function ole(e,t,r,i){let o=xo(r.text,e,!1,i),s=zwe(o,t,r);return oI(r,s??t,o)}function sle(e,t,r,i){let o=xo(r.text,e,!1,i);return oI(r,e,Math.min(t,o))}function zwe(e,t=0,r){for(;e-- >t;)if(!xh(r.text.charCodeAt(e)))return e}function wR(e){let t=ea(e);if(t)switch(t.parent.kind){case 263:case 264:return t===t.parent.name}return!1}function qI(e){return Pr(e.declarations,mW)}function mW(e){return wi(e)&&e.initializer!==void 0}function Jwe(e){return e.watch&&fs(e,\"watch\")}function am(e){e.close()}function ac(e){return e.flags&33554432?e.links.checkFlags:0}function Ef(e,t=!1){if(e.valueDeclaration){let r=t&&e.declarations&&wr(e.declarations,Sf)||e.flags&32768&&wr(e.declarations,p_)||e.valueDeclaration,i=wg(r);return e.parent&&e.parent.flags&32?i:i&-29}if(ac(e)&6){let r=e.links.checkFlags,i=r&1024?8:r&256?4:16,o=r&2048?32:0;return i|o}return e.flags&4194304?36:0}function wd(e,t){return e.flags&2097152?t.getAliasedSymbol(e):e}function XI(e){return e.exportSymbol?e.exportSymbol.flags|e.flags:e.flags}function hW(e){return ZA(e)===1}function YI(e){return ZA(e)!==0}function ZA(e){let{parent:t}=e;if(!t)return 0;switch(t.kind){case 214:return ZA(t);case 222:case 221:let{operator:i}=t;return i===45||i===46?r():0;case 223:let{left:o,operatorToken:s}=t;return o===e&&Mg(s.kind)?s.kind===63?1:r():0;case 208:return t.name!==e?0:ZA(t);case 299:{let l=ZA(t.parent);return e===t.name?Kwe(l):l}case 300:return e===t.objectAssignmentInitializer?0:ZA(t.parent);case 206:return ZA(t);default:return 0}function r(){return t.parent&&qy(t.parent).kind===241?1:2}}function Kwe(e){switch(e){case 0:return 1;case 1:return 0;case 2:return 2;default:return L.assertNever(e)}}function gW(e,t){if(!e||!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(let r in e)if(typeof e[r]==\"object\"){if(!gW(e[r],t[r]))return!1}else if(typeof e[r]!=\"function\"&&e[r]!==t[r])return!1;return!0}function Tf(e,t){e.forEach(t),e.clear()}function Oh(e,t,r){let{onDeleteValue:i,onExistingValue:o}=r;e.forEach((s,l)=>{let f=t.get(l);f===void 0?(e.delete(l),i(s,l)):o&&o(s,f,l)})}function e2(e,t,r){Oh(e,t,r);let{createNewValue:i}=r;t.forEach((o,s)=>{e.has(s)||e.set(s,i(s,o))})}function cle(e){if(e.flags&32){let t=Nh(e);return!!t&&Mr(t,256)}return!1}function Nh(e){var t;return(t=e.declarations)==null?void 0:t.find(Yr)}function Ur(e){return e.flags&3899393?e.objectFlags:0}function qwe(e,t){return!!Th(e,r=>t(r)?!0:void 0)}function o4(e){return!!e&&!!e.declarations&&!!e.declarations[0]&&gO(e.declarations[0])}function lle({moduleSpecifier:e}){return yo(e)?e.text:Qc(e)}function yW(e){let t;return pa(e,r=>{Pf(r)&&(t=r)},r=>{for(let i=r.length-1;i>=0;i--)if(Pf(r[i])){t=r[i];break}}),t}function V_(e,t,r=!0){return e.has(t)?!1:(e.set(t,r),!0)}function yS(e){return Yr(e)||ku(e)||Rd(e)}function vW(e){return e>=179&&e<=202||e===131||e===157||e===148||e===160||e===149||e===134||e===152||e===153||e===114||e===155||e===144||e===139||e===230||e===315||e===316||e===317||e===318||e===319||e===320||e===321}function Us(e){return e.kind===208||e.kind===209}function ule(e){return e.kind===208?e.name:(L.assert(e.kind===209),e.argumentExpression)}function dle(e){switch(e.kind){case\"text\":case\"internal\":return!0;default:return!1}}function bW(e){return e.kind===272||e.kind===276}function $I(e){for(;Us(e);)e=e.expression;return e}function Xwe(e,t){if(Us(e.parent)&&$ce(e))return r(e.parent);function r(i){if(i.kind===208){let o=t(i.name);if(o!==void 0)return o}else if(i.kind===209)if(Re(i.argumentExpression)||es(i.argumentExpression)){let o=t(i.argumentExpression);if(o!==void 0)return o}else return;if(Us(i.expression))return r(i.expression);if(Re(i.expression))return t(i.expression)}}function QI(e,t){for(;;){switch(e.kind){case 222:e=e.operand;continue;case 223:e=e.left;continue;case 224:e=e.condition;continue;case 212:e=e.tag;continue;case 210:if(t)return e;case 231:case 209:case 208:case 232:case 356:case 235:e=e.expression;continue}return e}}function Ywe(e,t){this.flags=e,this.escapedName=t,this.declarations=void 0,this.valueDeclaration=void 0,this.id=0,this.mergeId=0,this.parent=void 0,this.members=void 0,this.exports=void 0,this.exportSymbol=void 0,this.constEnumOnlyModule=void 0,this.isReferenced=void 0,this.isAssigned=void 0,this.links=void 0}function $we(e,t){this.flags=t,(L.isDebugging||ai)&&(this.checker=e)}function Qwe(e,t){this.flags=t,L.isDebugging&&(this.checker=e)}function EW(e,t,r){this.pos=t,this.end=r,this.kind=e,this.id=0,this.flags=0,this.modifierFlagsCache=0,this.transformFlags=0,this.parent=void 0,this.original=void 0,this.emitNode=void 0}function Zwe(e,t,r){this.pos=t,this.end=r,this.kind=e,this.id=0,this.flags=0,this.transformFlags=0,this.parent=void 0,this.emitNode=void 0}function eRe(e,t,r){this.pos=t,this.end=r,this.kind=e,this.id=0,this.flags=0,this.transformFlags=0,this.parent=void 0,this.original=void 0,this.emitNode=void 0}function tRe(e,t,r){this.fileName=e,this.text=t,this.skipTrivia=r||(i=>i)}function fle(e){tz.push(e),e(ml)}function _le(e){Object.assign(ml,e),mn(tz,t=>t(ml))}function jm(e,t,r=0){return e.replace(/{(\\d+)}/g,(i,o)=>\"\"+L.checkDefined(t[+o+r]))}function ple(e){qR=e}function mle(e){!qR&&e&&(qR=e())}function uo(e){return qR&&qR[e.key]||e.message}function t2(e,t,r,i){gH(void 0,t,r);let o=uo(i);return arguments.length>4&&(o=jm(o,arguments,4)),{file:void 0,start:t,length:r,messageText:o,category:i.category,code:i.code,reportsUnnecessary:i.reportsUnnecessary,fileName:e}}function nRe(e){return e.file===void 0&&e.start!==void 0&&e.length!==void 0&&typeof e.fileName==\"string\"}function hle(e,t){let r=t.fileName||\"\",i=t.text.length;L.assertEqual(e.fileName,r),L.assertLessThanOrEqual(e.start,i),L.assertLessThanOrEqual(e.start+e.length,i);let o={file:t,start:e.start,length:e.length,messageText:e.messageText,category:e.category,code:e.code,reportsUnnecessary:e.reportsUnnecessary};if(e.relatedInformation){o.relatedInformation=[];for(let s of e.relatedInformation)nRe(s)&&s.fileName===r?(L.assertLessThanOrEqual(s.start,i),L.assertLessThanOrEqual(s.start+s.length,i),o.relatedInformation.push(hle(s,t))):o.relatedInformation.push(s)}return o}function vS(e,t){let r=[];for(let i of e)r.push(hle(i,t));return r}function al(e,t,r,i){gH(e,t,r);let o=uo(i);return arguments.length>4&&(o=jm(o,arguments,4)),{file:e,start:t,length:r,messageText:o,category:i.category,code:i.code,reportsUnnecessary:i.reportsUnnecessary,reportsDeprecated:i.reportsDeprecated}}function TW(e,t){let r=uo(t);return arguments.length>2&&(r=jm(r,arguments,2)),r}function ps(e){let t=uo(e);return arguments.length>1&&(t=jm(t,arguments,1)),{file:void 0,start:void 0,length:void 0,messageText:t,category:e.category,code:e.code,reportsUnnecessary:e.reportsUnnecessary,reportsDeprecated:e.reportsDeprecated}}function s4(e,t){return{file:void 0,start:void 0,length:void 0,code:e.code,category:e.category,messageText:e.next?e:e.messageText,relatedInformation:t}}function da(e,t){let r=uo(t);return arguments.length>2&&(r=jm(r,arguments,2)),{messageText:r,category:t.category,code:t.code,next:e===void 0||Array.isArray(e)?e:[e]}}function gle(e,t){let r=e;for(;r.next;)r=r.next[0];r.next=[t]}function yle(e){return e.file?e.file.path:void 0}function ZI(e,t){return c4(e,t)||rRe(e,t)||0}function c4(e,t){return su(yle(e),yle(t))||Es(e.start,t.start)||Es(e.length,t.length)||Es(e.code,t.code)||vle(e.messageText,t.messageText)||0}function rRe(e,t){return!e.relatedInformation&&!t.relatedInformation?0:e.relatedInformation&&t.relatedInformation?Es(e.relatedInformation.length,t.relatedInformation.length)||mn(e.relatedInformation,(r,i)=>{let o=t.relatedInformation[i];return ZI(r,o)})||0:e.relatedInformation?-1:1}function vle(e,t){if(typeof e==\"string\"&&typeof t==\"string\")return su(e,t);if(typeof e==\"string\")return-1;if(typeof t==\"string\")return 1;let r=su(e.messageText,t.messageText);if(r)return r;if(!e.next&&!t.next)return 0;if(!e.next)return-1;if(!t.next)return 1;let i=Math.min(e.next.length,t.next.length);for(let o=0;o<i;o++)if(r=vle(e.next[o],t.next[o]),r)return r;return e.next.length<t.next.length?-1:e.next.length>t.next.length?1:0}function RR(e){return e===4||e===2||e===1||e===6?1:0}function ble(e){if(e.transformFlags&2)return Au(e)||BS(e)?e:pa(e,ble)}function iRe(e){return e.isDeclarationFile?void 0:ble(e)}function aRe(e){return(e.impliedNodeFormat===99||$c(e.fileName,[\".cjs\",\".cts\",\".mjs\",\".mts\"]))&&!e.isDeclarationFile?!0:void 0}function OR(e){switch(Ele(e)){case 3:return o=>{o.externalModuleIndicator=LO(o)||!o.isDeclarationFile||void 0};case 1:return o=>{o.externalModuleIndicator=LO(o)};case 2:let t=[LO];(e.jsx===4||e.jsx===5)&&t.push(iRe),t.push(aRe);let r=Kp(...t);return o=>void(o.externalModuleIndicator=r(o))}}function Do(e){var t;return(t=e.target)!=null?t:e.module===100&&9||e.module===199&&99||1}function Rl(e){return typeof e.module==\"number\"?e.module:Do(e)>=2?5:1}function SW(e){return e>=5&&e<=99}function $s(e){let t=e.moduleResolution;if(t===void 0)switch(Rl(e)){case 1:t=2;break;case 100:t=3;break;case 199:t=99;break;default:t=1;break}return t}function Ele(e){return e.moduleDetection||(Rl(e)===100||Rl(e)===199?3:2)}function l4(e){switch(Rl(e)){case 1:case 2:case 5:case 6:case 7:case 99:case 100:case 199:return!0;default:return!1}}function d_(e){return!!(e.isolatedModules||e.verbatimModuleSyntax)}function u4(e){return e.verbatimModuleSyntax||e.isolatedModules&&e.preserveValueImports}function Tle(e){return e.allowUnreachableCode===!1}function Sle(e){return e.allowUnusedLabels===!1}function d4(e){return!!(__(e)&&e.declarationMap)}function f_(e){if(e.esModuleInterop!==void 0)return e.esModuleInterop;switch(Rl(e)){case 100:case 199:return!0}}function wT(e){return e.allowSyntheticDefaultImports!==void 0?e.allowSyntheticDefaultImports:f_(e)||Rl(e)===4||$s(e)===100}function bS(e){return e>=3&&e<=99||e===100}function xW(e){let t=$s(e);if(!bS(t))return!1;if(e.resolvePackageJsonExports!==void 0)return e.resolvePackageJsonExports;switch(t){case 3:case 99:case 100:return!0}return!1}function oRe(e){let t=$s(e);if(!bS(t))return!1;if(e.resolvePackageJsonExports!==void 0)return e.resolvePackageJsonExports;switch(t){case 3:case 99:case 100:return!0}return!1}function RT(e){return e.resolveJsonModule!==void 0?e.resolveJsonModule:$s(e)===100}function __(e){return!!(e.declaration||e.composite)}function U0(e){return!!(e.preserveConstEnums||d_(e))}function NR(e){return!!(e.incremental||e.composite)}function Uf(e,t){return e[t]===void 0?!!e.strict:!!e[t]}function PR(e){return e.allowJs===void 0?!!e.checkJs:e.allowJs}function MR(e){return e.useDefineForClassFields===void 0?Do(e)>=9:e.useDefineForClassFields}function xle(e,t){return LA(t,e,PJ)}function Ale(e,t){return LA(t,e,MJ)}function Cle(e,t){return LA(t,e,FJ)}function f4(e,t){return t.strictFlag?Uf(e,t.name):e[t.name]}function AW(e){let t=e.jsx;return t===2||t===4||t===5}function _4(e,t){let r=t?.pragmas.get(\"jsximportsource\"),i=ba(r)?r[r.length-1]:r;return e.jsx===4||e.jsx===5||e.jsxImportSource||i?i?.arguments.factory||e.jsxImportSource||\"react\":void 0}function p4(e,t){return e?`${e}/${t.jsx===5?\"jsx-dev-runtime\":\"jsx-runtime\"}`:void 0}function CW(e){let t=!1;for(let r=0;r<e.length;r++)if(e.charCodeAt(r)===42)if(!t)t=!0;else return!1;return!0}function Ile(e,t){let r,i,o,s=!1;return{getSymlinkedFiles:()=>o,getSymlinkedDirectories:()=>r,getSymlinkedDirectoriesByRealpath:()=>i,setSymlinkedFile:(f,d)=>(o||(o=new Map)).set(f,d),setSymlinkedDirectory:(f,d)=>{let g=Ts(f,e,t);sL(g)||(g=cu(g),d!==!1&&!r?.has(g)&&(i||(i=Nf())).add(cu(d.realPath),f),(r||(r=new Map)).set(g,d))},setSymlinksFromResolutions(f,d){var g,m;L.assert(!s),s=!0;for(let v of f)(g=v.resolvedModules)==null||g.forEach(S=>l(this,S.resolvedModule)),(m=v.resolvedTypeReferenceDirectiveNames)==null||m.forEach(S=>l(this,S.resolvedTypeReferenceDirective));d.forEach(v=>l(this,v.resolvedTypeReferenceDirective))},hasProcessedResolutions:()=>s};function l(f,d){if(!d||!d.originalPath||!d.resolvedFileName)return;let{resolvedFileName:g,originalPath:m}=d;f.setSymlinkedFile(Ts(m,e,t),g);let[v,S]=sRe(g,m,e,t)||Je;v&&S&&f.setSymlinkedDirectory(S,{real:v,realPath:Ts(v,e,t)})}}function sRe(e,t,r,i){let o=Ou(_a(e,r)),s=Ou(_a(t,r)),l=!1;for(;o.length>=2&&s.length>=2&&!Lle(o[o.length-2],i)&&!Lle(s[s.length-2],i)&&i(o[o.length-1])===i(s[s.length-1]);)o.pop(),s.pop(),l=!0;return l?[T0(o),T0(s)]:void 0}function Lle(e,t){return e!==void 0&&(t(e)===\"node_modules\"||na(e,\"@\"))}function cRe(e){return sj(e.charCodeAt(0))?e.slice(1):void 0}function IW(e,t,r){let i=KU(e,t,r);return i===void 0?void 0:cRe(i)}function lRe(e){return e.replace(A4,uRe)}function uRe(e){return\"\\\\\"+e}function eL(e,t,r){let i=m4(e,t,r);return!i||!i.length?void 0:`^(${i.map(l=>`(${l})`).join(\"|\")})${r===\"exclude\"?\"($|/)\":\"$\"}`}function m4(e,t,r){if(!(e===void 0||e.length===0))return Uo(e,i=>i&&kle(i,t,r,oz[r]))}function LW(e){return!/[.*?]/.test(e)}function kW(e,t,r){let i=e&&kle(e,t,r,oz[r]);return i&&`^(${i})${r===\"exclude\"?\"($|/)\":\"$\"}`}function kle(e,t,r,{singleAsteriskRegexFragment:i,doubleAsteriskRegexFragment:o,replaceWildcardCharacter:s}){let l=\"\",f=!1,d=fw(e,t),g=To(d);if(r!==\"exclude\"&&g===\"**\")return;d[0]=sT(d[0]),LW(g)&&d.push(\"**\",\"*\");let m=0;for(let v of d){if(v===\"**\")l+=o;else if(r===\"directories\"&&(l+=\"(\",m++),f&&(l+=_s),r!==\"exclude\"){let S=\"\";v.charCodeAt(0)===42?(S+=\"([^./]\"+i+\")?\",v=v.substr(1)):v.charCodeAt(0)===63&&(S+=\"[^./]\",v=v.substr(1)),S+=v.replace(A4,s),S!==v&&(l+=C4),l+=S}else l+=v.replace(A4,s);f=!0}for(;m>0;)l+=\")?\",m--;return l}function DW(e,t){return e===\"*\"?t:e===\"?\"?\"[^/]\":\"\\\\\"+e}function tL(e,t,r,i,o){e=So(e),o=So(o);let s=vi(o,e);return{includeFilePatterns:on(m4(r,s,\"files\"),l=>`^${l}$`),includeFilePattern:eL(r,s,\"files\"),includeDirectoryPattern:eL(r,s,\"directories\"),excludePattern:eL(t,s,\"exclude\"),basePaths:dRe(e,r,i)}}function Qy(e,t){return new RegExp(e,t?\"\":\"i\")}function wW(e,t,r,i,o,s,l,f,d){e=So(e),s=So(s);let g=tL(e,r,i,o,s),m=g.includeFilePatterns&&g.includeFilePatterns.map(P=>Qy(P,o)),v=g.includeDirectoryPattern&&Qy(g.includeDirectoryPattern,o),S=g.excludePattern&&Qy(g.excludePattern,o),x=m?m.map(()=>[]):[[]],A=new Map,w=Dl(o);for(let P of g.basePaths)C(P,vi(s,P),l);return t_(x);function C(P,F,B){let q=w(d(F));if(A.has(q))return;A.set(q,!0);let{files:W,directories:Y}=f(P);for(let R of XC(W,su)){let ie=vi(P,R),$=vi(F,R);if(!(t&&!$c(ie,t))&&!(S&&S.test($)))if(!m)x[0].push(ie);else{let fe=Yc(m,Z=>Z.test($));fe!==-1&&x[fe].push(ie)}}if(!(B!==void 0&&(B--,B===0)))for(let R of XC(Y,su)){let ie=vi(P,R),$=vi(F,R);(!v||v.test($))&&(!S||!S.test($))&&C(ie,$,B)}}}function dRe(e,t,r){let i=[e];if(t){let o=[];for(let s of t){let l=qp(s)?s:So(vi(e,s));o.push(fRe(l))}o.sort(p8(!r));for(let s of o)Ji(i,l=>!Gy(l,s,e,!r))&&i.push(s)}return i}function fRe(e){let t=cae(e,nue);return t<0?gA(e)?sT(ni(e)):e:e.substring(0,e.lastIndexOf(_s,t))}function h4(e,t){return t||RW(e)||3}function RW(e){switch(e.substr(e.lastIndexOf(\".\")).toLowerCase()){case\".js\":case\".cjs\":case\".mjs\":return 1;case\".jsx\":return 2;case\".ts\":case\".cts\":case\".mts\":return 3;case\".tsx\":return 4;case\".json\":return 6;default:return 0}}function nL(e,t){let r=e&&PR(e);if(!t||t.length===0)return r?XR:c2;let i=r?XR:c2,o=t_(i);return[...i,...Zi(t,l=>l.scriptKind===7||r&&_Re(l.scriptKind)&&o.indexOf(l.extension)===-1?[l.extension]:void 0)]}function FR(e,t){return!e||!RT(e)?t:t===XR?aue:t===c2?rue:[...t,[\".json\"]]}function _Re(e){return e===1||e===2}function ES(e){return vt(dL,t=>Gc(e,t))}function GR(e){return vt(sz,t=>Gc(e,t))}function Dle({imports:e},t=Kp(ES,GR)){return ks(e,({text:r})=>Jd(r)?t(r):void 0)||!1}function OW(e,t,r,i){if(e===\"js\"||t===99)return VL(r)&&o()!==2?3:2;if(e===\"minimal\")return 0;if(e===\"index\")return 1;if(!VL(r))return Dle(i)?2:0;return o();function o(){let s=!1,l=i.imports.length?i.imports.map(f=>f.text):Cu(i)?pRe(i).map(f=>f.arguments[0].text):Je;for(let f of l)if(Jd(f)){if(GR(f))return 3;ES(f)&&(s=!0)}return s?2:0}}function pRe(e){let t=0,r;for(let i of e.statements){if(t>3)break;DH(i)?r=Qi(r,i.declarationList.declarations.map(o=>o.initializer)):Ol(i)&&qu(i.expression,!0)?r=Sn(r,i.expression):t++}return r||Je}function wle(e,t,r){if(!e)return!1;let i=nL(t,r);for(let o of t_(FR(t,i)))if(Gc(e,o))return!0;return!1}function Rle(e){let t=e.match(/\\//g);return t?t.length:0}function BR(e,t){return Es(Rle(e),Rle(t))}function ld(e){for(let t of k4){let r=Ole(e,t);if(r!==void 0)return r}return e}function Ole(e,t){return Gc(e,t)?UR(e,t):void 0}function UR(e,t){return e.substring(0,e.length-t.length)}function V0(e,t){return uj(e,t,k4,!1)}function n2(e){let t=e.indexOf(\"*\");return t===-1?e:e.indexOf(\"*\",t+1)!==-1?void 0:{prefix:e.substr(0,t),suffix:e.substr(t+1)}}function g4(e){return Zi(bh(e),t=>n2(t))}function vp(e){return!(e>=0)}function y4(e){return e===\".ts\"||e===\".tsx\"||e===\".d.ts\"||e===\".cts\"||e===\".mts\"||e===\".d.mts\"||e===\".d.cts\"||na(e,\".d.\")&&Oc(e,\".ts\")}function VR(e){return y4(e)||e===\".json\"}function jR(e){let t=Hm(e);return t!==void 0?t:L.fail(`File ${e} has unknown extension.`)}function mRe(e){return Hm(e)!==void 0}function Hm(e){return wr(k4,t=>Gc(e,t))}function HR(e,t){return e.checkJsDirective?e.checkJsDirective.enabled:t.checkJs}function NW(e,t){let r=[];for(let i of e){if(i===t)return t;Ta(i)||r.push(i)}return JU(r,i=>i,t)}function PW(e,t){let r=e.indexOf(t);return L.assert(r!==-1),e.slice(r)}function Ao(e,...t){return t.length&&(e.relatedInformation||(e.relatedInformation=[]),L.assert(e.relatedInformation!==Je,\"Diagnostic had empty array singleton for related info, but is still being constructed!\"),e.relatedInformation.push(...t)),e}function Nle(e,t){L.assert(e.length!==0);let r=t(e[0]),i=r;for(let o=1;o<e.length;o++){let s=t(e[o]);s<r?r=s:s>i&&(i=s)}return{min:r,max:i}}function MW(e){return{pos:gT(e),end:e.end}}function FW(e,t){let r=t.pos-1,i=Math.min(e.text.length,xo(e.text,t.end)+1);return{pos:r,end:i}}function rL(e,t,r){return t.skipLibCheck&&e.isDeclarationFile||t.skipDefaultLibCheck&&e.hasNoDefaultLib||r.isSourceOfProjectReferenceRedirect(e.fileName)}function GW(e,t){return e===t||typeof e==\"object\"&&e!==null&&typeof t==\"object\"&&t!==null&&hae(e,t,GW)}function iL(e){let t;switch(e.charCodeAt(1)){case 98:case 66:t=1;break;case 111:case 79:t=3;break;case 120:case 88:t=4;break;default:let g=e.length-1,m=0;for(;e.charCodeAt(m)===48;)m++;return e.slice(m,g)||\"0\"}let r=2,i=e.length-1,o=(i-r)*t,s=new Uint16Array((o>>>4)+(o&15?1:0));for(let g=i-1,m=0;g>=r;g--,m+=t){let v=m>>>4,S=e.charCodeAt(g),A=(S<=57?S-48:10+S-(S<=70?65:97))<<(m&15);s[v]|=A;let w=A>>>16;w&&(s[v+1]|=w)}let l=\"\",f=s.length-1,d=!0;for(;d;){let g=0;d=!1;for(let m=f;m>=0;m--){let v=g<<16|s[m],S=v/10|0;s[m]=S,g=v-S*10,S&&!d&&(f=m,d=!0)}l=g+l}return l}function j0({negative:e,base10Value:t}){return(e&&t!==\"0\"?\"-\":\"\")+t}function Ple(e){if(v4(e,!1))return BW(e)}function BW(e){let t=e.startsWith(\"-\"),r=iL(`${t?e.slice(1):e}n`);return{negative:t,base10Value:r}}function v4(e,t){if(e===\"\")return!1;let r=kg(99,!1),i=!0;r.setOnError(()=>i=!1),r.setText(e+\"n\");let o=r.scan(),s=o===40;s&&(o=r.scan());let l=r.getTokenFlags();return i&&o===9&&r.getTextPos()===e.length+1&&!(l&512)&&(!t||e===j0({negative:s,base10Value:iL(r.getTokenValue())}))}function TS(e){return!!(e.flags&16777216)||G6(e)||yRe(e)||gRe(e)||!(Dh(e)||hRe(e))}function hRe(e){return Re(e)&&xf(e.parent)&&e.parent.name===e}function gRe(e){for(;e.kind===79||e.kind===208;)e=e.parent;if(e.kind!==164)return!1;if(Mr(e.parent,256))return!0;let t=e.parent.parent.kind;return t===261||t===184}function yRe(e){if(e.kind!==79)return!1;let t=jn(e.parent,r=>{switch(r.kind){case 294:return!0;case 208:case 230:return!1;default:return\"quit\"}});return t?.token===117||t?.parent.kind===261}function Mle(e){return m_(e)&&Re(e.typeName)}function Fle(e,t=Zv){if(e.length<2)return!0;let r=e[0];for(let i=1,o=e.length;i<o;i++){let s=e[i];if(!t(r,s))return!1}return!0}function aL(e,t){return e.pos=t,e}function r2(e,t){return e.end=t,e}function om(e,t,r){return r2(aL(e,t),r)}function oL(e,t,r){return om(e,t,t+r)}function Gle(e,t){return e&&(e.flags=t),e}function go(e,t){return e&&t&&(e.parent=t),e}function i2(e,t){if(e)for(let r of e)go(r,t);return e}function Zy(e,t){if(!e)return e;return kO(e,IA(e)?r:o),e;function r(s,l){if(t&&s.parent===l)return\"skip\";go(s,l)}function i(s){if(Kd(s))for(let l of s.jsDoc)r(l,s),kO(l,r)}function o(s,l){return r(s,l)||i(s)}}function vRe(e){return!ol(e)}function UW(e){return fu(e)&&Ji(e.elements,vRe)}function Ble(e){for(L.assertIsDefined(e.parent);;){let t=e.parent;if(ud(t)){e=t;continue}if(Ol(t)||NS(t)||FT(t)&&(t.initializer===e||t.incrementor===e))return!0;if(SL(t)){if(e!==To(t.elements))return!0;e=t;continue}if(ar(t)&&t.operatorToken.kind===27){if(e===t.left)return!0;e=t;continue}return!1}}function sL(e){return vt(uw,t=>jl(e,t))}function Ule(e){if(!e.parent)return;switch(e.kind){case 165:let{parent:r}=e;return r.kind===192?void 0:r.typeParameters;case 166:return e.parent.parameters;case 201:return e.parent.templateSpans;case 236:return e.parent.templateSpans;case 167:{let{parent:i}=e;return HS(i)?i.modifiers:void 0}case 294:return e.parent.heritageClauses}let{parent:t}=e;if(EI(e))return LL(e.parent)?void 0:e.parent.tags;switch(t.kind){case 184:case 261:return _T(e)?t.members:void 0;case 189:case 190:return t.types;case 186:case 206:case 357:case 272:case 276:return t.elements;case 207:case 289:return t.properties;case 210:case 211:return bi(e)?t.typeArguments:t.expression===e?void 0:t.arguments;case 281:case 285:return Pw(e)?t.children:void 0;case 283:case 282:return bi(e)?t.typeArguments:void 0;case 238:case 292:case 293:case 265:return t.statements;case 266:return t.clauses;case 260:case 228:return _l(e)?t.members:void 0;case 263:return q0(e)?t.members:void 0;case 308:return t.statements}}function b4(e){if(!e.typeParameters){if(vt(e.parameters,t=>!Cl(t)))return!0;if(e.kind!==216){let t=Sl(e.parameters);if(!(t&&G0(t)))return!0}}return!1}function cL(e){return e===\"Infinity\"||e===\"-Infinity\"||e===\"NaN\"}function Vle(e){return e.kind===257&&e.parent.kind===295}function VW(e){let t=e.valueDeclaration&&nm(e.valueDeclaration);return!!t&&(ha(t)||Vle(t))}function a2(e){return e.kind===215||e.kind===216}function OT(e){return e.replace(/\\$/gm,()=>\"\\\\$\")}function Wm(e){return(+e).toString()===e}function E4(e,t,r,i){return i_(e,t)?D.createIdentifier(e):!i&&Wm(e)&&+e>=0?D.createNumericLiteral(+e):D.createStringLiteral(e,!!r)}function lL(e){return!!(e.flags&262144&&e.isThisType)}function jW(e){let t=0,r=0,i=0,o=0,s;(g=>{g[g.BeforeNodeModules=0]=\"BeforeNodeModules\",g[g.NodeModules=1]=\"NodeModules\",g[g.Scope=2]=\"Scope\",g[g.PackageContent=3]=\"PackageContent\"})(s||(s={}));let l=0,f=0,d=0;for(;f>=0;)switch(l=f,f=e.indexOf(\"/\",l+1),d){case 0:e.indexOf(Wg,l)===l&&(t=l,r=f,d=1);break;case 1:case 2:d===1&&e.charAt(l+1)===\"@\"?d=2:(i=f,d=3);break;case 3:e.indexOf(Wg,l)===l?d=1:d=3;break}return o=l,d>1?{topLevelNodeModulesIndex:t,topLevelPackageNameIndex:r,packageRootIndex:i,fileNameIndex:o}:void 0}function bRe(e){var t;return e.kind===344?(t=e.typeExpression)==null?void 0:t.type:e.type}function o2(e){switch(e.kind){case 165:case 260:case 261:case 262:case 263:case 349:case 341:case 343:return!0;case 270:return e.isTypeOnly;case 273:case 278:return e.parent.parent.isTypeOnly;default:return!1}}function WR(e){return hb(e)||Bc(e)||Jc(e)||sl(e)||ku(e)||o2(e)||Tc(e)&&!D0(e)&&!mp(e)}function zR(e){if(!a6(e))return!1;let{isBracketed:t,typeExpression:r}=e;return t||!!r&&r.type.kind===319}function HW(e,t){if(e.length===0)return!1;let r=e.charCodeAt(0);return r===35?e.length>1&&Pm(e.charCodeAt(1),t):Pm(r,t)}function jle(e){var t;return((t=bz(e))==null?void 0:t.kind)===0}function JR(e){return Yn(e)&&(e.type&&e.type.kind===319||fI(e).some(({isBracketed:t,typeExpression:r})=>t||!!r&&r.type.kind===319))}function WW(e){switch(e.kind){case 169:case 168:return!!e.questionToken;case 166:return!!e.questionToken||JR(e);case 351:case 344:return zR(e);default:return!1}}function Hle(e){let t=e.kind;return(t===208||t===209)&&PS(e.expression)}function zW(e){return Yn(e)&&ud(e)&&Kd(e)&&!!Lj(e)}function JW(e){return L.checkDefined(T4(e))}function T4(e){let t=Lj(e);return t&&t.typeExpression&&t.typeExpression.type}var S4,_b,KR,x4,uL,KW,qW,Wle,XW,zle,YW,$W,QW,ZW,Jle,Kle,qle,Xle,Yle,ez,$le,Qle,Zle,s2,H0,eue,tue,ml,tz,qR,A4,nue,nz,C4,rz,iz,az,oz,c2,sz,rue,iue,cz,dL,XR,aue,I4,L4,lz,k4,D4,ERe=gt({\"src/compiler/utilities.ts\"(){\"use strict\";fa(),S4=[],_b=\"tslib\",KR=160,x4=1e6,uL=rwe(),KW=(e=>(e[e.None=0]=\"None\",e[e.NeverAsciiEscape=1]=\"NeverAsciiEscape\",e[e.JsxAttributeEscape=2]=\"JsxAttributeEscape\",e[e.TerminateUnterminatedLiterals=4]=\"TerminateUnterminatedLiterals\",e[e.AllowNumericSeparator=8]=\"AllowNumericSeparator\",e))(KW||{}),qW=/^(\\/\\/\\/\\s*<reference\\s+path\\s*=\\s*)(('[^']*')|(\"[^\"]*\")).*?\\/>/,Wle=/^(\\/\\/\\/\\s*<reference\\s+types\\s*=\\s*)(('[^']*')|(\"[^\"]*\")).*?\\/>/,XW=/^(\\/\\/\\/\\s*<amd-dependency\\s+path\\s*=\\s*)(('[^']*')|(\"[^\"]*\")).*?\\/>/,zle=/^(\\/\\/\\/\\s*<reference\\s+no-default-lib\\s*=\\s*)(('[^']*')|(\"[^\"]*\"))\\s*\\/>/,YW=(e=>(e[e.None=0]=\"None\",e[e.Definite=1]=\"Definite\",e[e.Compound=2]=\"Compound\",e))(YW||{}),$W=(e=>(e[e.Normal=0]=\"Normal\",e[e.Generator=1]=\"Generator\",e[e.Async=2]=\"Async\",e[e.Invalid=4]=\"Invalid\",e[e.AsyncGenerator=3]=\"AsyncGenerator\",e))($W||{}),QW=(e=>(e[e.Left=0]=\"Left\",e[e.Right=1]=\"Right\",e))(QW||{}),ZW=(e=>(e[e.Comma=0]=\"Comma\",e[e.Spread=1]=\"Spread\",e[e.Yield=2]=\"Yield\",e[e.Assignment=3]=\"Assignment\",e[e.Conditional=4]=\"Conditional\",e[e.Coalesce=4]=\"Coalesce\",e[e.LogicalOR=5]=\"LogicalOR\",e[e.LogicalAND=6]=\"LogicalAND\",e[e.BitwiseOR=7]=\"BitwiseOR\",e[e.BitwiseXOR=8]=\"BitwiseXOR\",e[e.BitwiseAND=9]=\"BitwiseAND\",e[e.Equality=10]=\"Equality\",e[e.Relational=11]=\"Relational\",e[e.Shift=12]=\"Shift\",e[e.Additive=13]=\"Additive\",e[e.Multiplicative=14]=\"Multiplicative\",e[e.Exponentiation=15]=\"Exponentiation\",e[e.Unary=16]=\"Unary\",e[e.Update=17]=\"Update\",e[e.LeftHandSide=18]=\"LeftHandSide\",e[e.Member=19]=\"Member\",e[e.Primary=20]=\"Primary\",e[e.Highest=20]=\"Highest\",e[e.Lowest=0]=\"Lowest\",e[e.Invalid=-1]=\"Invalid\",e))(ZW||{}),Jle=/\\$\\{/g,Kle=/[\\\\\\\"\\u0000-\\u001f\\t\\v\\f\\b\\r\\n\\u2028\\u2029\\u0085]/g,qle=/[\\\\\\'\\u0000-\\u001f\\t\\v\\f\\b\\r\\n\\u2028\\u2029\\u0085]/g,Xle=/\\r\\n|[\\\\\\`\\u0000-\\u001f\\t\\v\\f\\b\\r\\u2028\\u2029\\u0085]/g,Yle=new Map(Object.entries({\"\t\":\"\\\\t\",\"\\v\":\"\\\\v\",\"\\f\":\"\\\\f\",\"\\b\":\"\\\\b\",\"\\r\":\"\\\\r\",\"\\n\":\"\\\\n\",\"\\\\\":\"\\\\\\\\\",'\"':'\\\\\"',\"'\":\"\\\\'\",\"`\":\"\\\\`\",\"\\u2028\":\"\\\\u2028\",\"\\u2029\":\"\\\\u2029\",\"\\x85\":\"\\\\u0085\",\"\\r\\n\":\"\\\\r\\\\n\"})),ez=/[^\\u0000-\\u007F]/g,$le=/[\\\"\\u0000-\\u001f\\u2028\\u2029\\u0085]/g,Qle=/[\\'\\u0000-\\u001f\\u2028\\u2029\\u0085]/g,Zle=new Map(Object.entries({'\"':\"&quot;\",\"'\":\"&apos;\"})),s2=[\"\",\"    \"],H0=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",eue=`\\r\n`,tue=`\n`,ml={getNodeConstructor:()=>EW,getTokenConstructor:()=>Zwe,getIdentifierConstructor:()=>eRe,getPrivateIdentifierConstructor:()=>EW,getSourceFileConstructor:()=>EW,getSymbolConstructor:()=>Ywe,getTypeConstructor:()=>$we,getSignatureConstructor:()=>Qwe,getSourceMapSourceConstructor:()=>tRe},tz=[],A4=/[^\\w\\s\\/]/g,nue=[42,63],nz=[\"node_modules\",\"bower_components\",\"jspm_packages\"],C4=`(?!(${nz.join(\"|\")})(/|$))`,rz={singleAsteriskRegexFragment:\"([^./]|(\\\\.(?!min\\\\.js$))?)*\",doubleAsteriskRegexFragment:`(/${C4}[^/.][^/]*)*?`,replaceWildcardCharacter:e=>DW(e,rz.singleAsteriskRegexFragment)},iz={singleAsteriskRegexFragment:\"[^/]*\",doubleAsteriskRegexFragment:`(/${C4}[^/.][^/]*)*?`,replaceWildcardCharacter:e=>DW(e,iz.singleAsteriskRegexFragment)},az={singleAsteriskRegexFragment:\"[^/]*\",doubleAsteriskRegexFragment:\"(/.+?)?\",replaceWildcardCharacter:e=>DW(e,az.singleAsteriskRegexFragment)},oz={files:rz,directories:iz,exclude:az},c2=[[\".ts\",\".tsx\",\".d.ts\"],[\".cts\",\".d.cts\"],[\".mts\",\".d.mts\"]],sz=t_(c2),rue=[...c2,[\".json\"]],iue=[\".d.ts\",\".d.cts\",\".d.mts\",\".cts\",\".mts\",\".ts\",\".tsx\",\".cts\",\".mts\"],cz=[[\".js\",\".jsx\"],[\".mjs\"],[\".cjs\"]],dL=t_(cz),XR=[[\".ts\",\".tsx\",\".d.ts\",\".js\",\".jsx\"],[\".cts\",\".d.cts\",\".cjs\"],[\".mts\",\".d.mts\",\".mjs\"]],aue=[...XR,[\".json\"]],I4=[\".d.ts\",\".d.cts\",\".d.mts\"],L4=[\".ts\",\".cts\",\".mts\",\".tsx\"],lz=(e=>(e[e.Minimal=0]=\"Minimal\",e[e.Index=1]=\"Index\",e[e.JsExtension=2]=\"JsExtension\",e[e.TsExtension=3]=\"TsExtension\",e))(lz||{}),k4=[\".d.ts\",\".d.mts\",\".d.cts\",\".mjs\",\".mts\",\".cjs\",\".cts\",\".ts\",\".js\",\".tsx\",\".jsx\",\".json\"],D4={files:Je,directories:Je}}});function oue(){let e,t,r,i,o;return{createBaseSourceFileNode:s,createBaseIdentifierNode:l,createBasePrivateIdentifierNode:f,createBaseTokenNode:d,createBaseNode:g};function s(m){return new(o||(o=ml.getSourceFileConstructor()))(m,-1,-1)}function l(m){return new(r||(r=ml.getIdentifierConstructor()))(m,-1,-1)}function f(m){return new(i||(i=ml.getPrivateIdentifierConstructor()))(m,-1,-1)}function d(m){return new(t||(t=ml.getTokenConstructor()))(m,-1,-1)}function g(m){return new(e||(e=ml.getNodeConstructor()))(m,-1,-1)}}var TRe=gt({\"src/compiler/factory/baseNodeFactory.ts\"(){\"use strict\";fa()}});function sue(e){let t,r;return{getParenthesizeLeftSideOfBinaryForOperator:i,getParenthesizeRightSideOfBinaryForOperator:o,parenthesizeLeftSideOfBinary:g,parenthesizeRightSideOfBinary:m,parenthesizeExpressionOfComputedPropertyName:v,parenthesizeConditionOfConditionalExpression:S,parenthesizeBranchOfConditionalExpression:x,parenthesizeExpressionOfExportDefault:A,parenthesizeExpressionOfNew:w,parenthesizeLeftSideOfAccess:C,parenthesizeOperandOfPostfixUnary:P,parenthesizeOperandOfPrefixUnary:F,parenthesizeExpressionsOfCommaDelimitedList:B,parenthesizeExpressionForDisallowedComma:q,parenthesizeExpressionOfExpressionStatement:W,parenthesizeConciseBodyOfArrowFunction:Y,parenthesizeCheckTypeOfConditionalType:R,parenthesizeExtendsTypeOfConditionalType:ie,parenthesizeConstituentTypesOfUnionType:fe,parenthesizeConstituentTypeOfUnionType:$,parenthesizeConstituentTypesOfIntersectionType:U,parenthesizeConstituentTypeOfIntersectionType:Z,parenthesizeOperandOfTypeOperator:re,parenthesizeOperandOfReadonlyTypeOperator:le,parenthesizeNonArrayTypeOfPostfixType:_e,parenthesizeElementTypesOfTupleType:ge,parenthesizeElementTypeOfTupleType:X,parenthesizeTypeOfOptionalType:we,parenthesizeTypeArguments:Ce,parenthesizeLeadingTypeArgument:ke};function i(Ie){t||(t=new Map);let Be=t.get(Ie);return Be||(Be=Ne=>g(Ie,Ne),t.set(Ie,Be)),Be}function o(Ie){r||(r=new Map);let Be=r.get(Ie);return Be||(Be=Ne=>m(Ie,void 0,Ne),r.set(Ie,Be)),Be}function s(Ie,Be,Ne,Le){let Ye=yR(223,Ie),_t=zH(223,Ie),ct=a_(Be);if(!Ne&&Be.kind===216&&Ye>3)return!0;let Rt=$6(ct);switch(Es(Rt,Ye)){case-1:return!(!Ne&&_t===1&&Be.kind===226);case 1:return!1;case 0:if(Ne)return _t===1;if(ar(ct)&&ct.operatorToken.kind===Ie){if(l(Ie))return!1;if(Ie===39){let qe=Le?f(Le):0;if(gI(qe)&&qe===f(ct))return!1}}return WH(ct)===0}}function l(Ie){return Ie===41||Ie===51||Ie===50||Ie===52||Ie===27}function f(Ie){if(Ie=a_(Ie),gI(Ie.kind))return Ie.kind;if(Ie.kind===223&&Ie.operatorToken.kind===39){if(Ie.cachedLiteralKind!==void 0)return Ie.cachedLiteralKind;let Be=f(Ie.left),Ne=gI(Be)&&Be===f(Ie.right)?Be:0;return Ie.cachedLiteralKind=Ne,Ne}return 0}function d(Ie,Be,Ne,Le){return a_(Be).kind===214?Be:s(Ie,Be,Ne,Le)?e.createParenthesizedExpression(Be):Be}function g(Ie,Be){return d(Ie,Be,!0)}function m(Ie,Be,Ne){return d(Ie,Ne,!1,Be)}function v(Ie){return wL(Ie)?e.createParenthesizedExpression(Ie):Ie}function S(Ie){let Be=yR(224,57),Ne=a_(Ie),Le=$6(Ne);return Es(Le,Be)!==1?e.createParenthesizedExpression(Ie):Ie}function x(Ie){let Be=a_(Ie);return wL(Be)?e.createParenthesizedExpression(Ie):Ie}function A(Ie){let Be=a_(Ie),Ne=wL(Be);if(!Ne)switch(QI(Be,!1).kind){case 228:case 215:Ne=!0}return Ne?e.createParenthesizedExpression(Ie):Ie}function w(Ie){let Be=QI(Ie,!0);switch(Be.kind){case 210:return e.createParenthesizedExpression(Ie);case 211:return Be.arguments?Ie:e.createParenthesizedExpression(Ie)}return C(Ie)}function C(Ie,Be){let Ne=a_(Ie);return Ju(Ne)&&(Ne.kind!==211||Ne.arguments)&&(Be||!Jl(Ne))?Ie:it(e.createParenthesizedExpression(Ie),Ie)}function P(Ie){return Ju(Ie)?Ie:it(e.createParenthesizedExpression(Ie),Ie)}function F(Ie){return jj(Ie)?Ie:it(e.createParenthesizedExpression(Ie),Ie)}function B(Ie){let Be=Tl(Ie,q);return it(e.createNodeArray(Be,Ie.hasTrailingComma),Ie)}function q(Ie){let Be=a_(Ie),Ne=$6(Be),Le=yR(223,27);return Ne>Le?Ie:it(e.createParenthesizedExpression(Ie),Ie)}function W(Ie){let Be=a_(Ie);if(Pa(Be)){let Le=Be.expression,Ye=a_(Le).kind;if(Ye===215||Ye===216){let _t=e.updateCallExpression(Be,it(e.createParenthesizedExpression(Le),Le),Be.typeArguments,Be.arguments);return e.restoreOuterExpressions(Ie,_t,8)}}let Ne=QI(Be,!1).kind;return Ne===207||Ne===215?it(e.createParenthesizedExpression(Ie),Ie):Ie}function Y(Ie){return!Va(Ie)&&(wL(Ie)||QI(Ie,!1).kind===207)?it(e.createParenthesizedExpression(Ie),Ie):Ie}function R(Ie){switch(Ie.kind){case 181:case 182:case 191:return e.createParenthesizedType(Ie)}return Ie}function ie(Ie){switch(Ie.kind){case 191:return e.createParenthesizedType(Ie)}return Ie}function $(Ie){switch(Ie.kind){case 189:case 190:return e.createParenthesizedType(Ie)}return R(Ie)}function fe(Ie){return e.createNodeArray(Tl(Ie,$))}function Z(Ie){switch(Ie.kind){case 189:case 190:return e.createParenthesizedType(Ie)}return $(Ie)}function U(Ie){return e.createNodeArray(Tl(Ie,Z))}function re(Ie){switch(Ie.kind){case 190:return e.createParenthesizedType(Ie)}return Z(Ie)}function le(Ie){switch(Ie.kind){case 195:return e.createParenthesizedType(Ie)}return re(Ie)}function _e(Ie){switch(Ie.kind){case 192:case 195:case 183:return e.createParenthesizedType(Ie)}return re(Ie)}function ge(Ie){return e.createNodeArray(Tl(Ie,X))}function X(Ie){return Ve(Ie)?e.createParenthesizedType(Ie):Ie}function Ve(Ie){return T2(Ie)?Ie.postfix:bL(Ie)||Jm(Ie)||yL(Ie)||RS(Ie)?Ve(Ie.type):m2(Ie)?Ve(Ie.falseType):DS(Ie)||dO(Ie)?Ve(To(Ie.types)):h2(Ie)?!!Ie.typeParameter.constraint&&Ve(Ie.typeParameter.constraint):!1}function we(Ie){return Ve(Ie)?e.createParenthesizedType(Ie):_e(Ie)}function ke(Ie){return lse(Ie)&&Ie.typeParameters?e.createParenthesizedType(Ie):Ie}function Pe(Ie,Be){return Be===0?ke(Ie):Ie}function Ce(Ie){if(vt(Ie))return e.createNodeArray(Tl(Ie,Pe))}}var uz,SRe=gt({\"src/compiler/factory/parenthesizerRules.ts\"(){\"use strict\";fa(),uz={getParenthesizeLeftSideOfBinaryForOperator:e=>Ks,getParenthesizeRightSideOfBinaryForOperator:e=>Ks,parenthesizeLeftSideOfBinary:(e,t)=>t,parenthesizeRightSideOfBinary:(e,t,r)=>r,parenthesizeExpressionOfComputedPropertyName:Ks,parenthesizeConditionOfConditionalExpression:Ks,parenthesizeBranchOfConditionalExpression:Ks,parenthesizeExpressionOfExportDefault:Ks,parenthesizeExpressionOfNew:e=>Ga(e,Ju),parenthesizeLeftSideOfAccess:e=>Ga(e,Ju),parenthesizeOperandOfPostfixUnary:e=>Ga(e,Ju),parenthesizeOperandOfPrefixUnary:e=>Ga(e,jj),parenthesizeExpressionsOfCommaDelimitedList:e=>Ga(e,C0),parenthesizeExpressionForDisallowedComma:Ks,parenthesizeExpressionOfExpressionStatement:Ks,parenthesizeConciseBodyOfArrowFunction:Ks,parenthesizeCheckTypeOfConditionalType:Ks,parenthesizeExtendsTypeOfConditionalType:Ks,parenthesizeConstituentTypesOfUnionType:e=>Ga(e,C0),parenthesizeConstituentTypeOfUnionType:Ks,parenthesizeConstituentTypesOfIntersectionType:e=>Ga(e,C0),parenthesizeConstituentTypeOfIntersectionType:Ks,parenthesizeOperandOfTypeOperator:Ks,parenthesizeOperandOfReadonlyTypeOperator:Ks,parenthesizeNonArrayTypeOfPostfixType:Ks,parenthesizeElementTypesOfTupleType:e=>Ga(e,C0),parenthesizeElementTypeOfTupleType:Ks,parenthesizeTypeOfOptionalType:Ks,parenthesizeTypeArguments:e=>e&&Ga(e,C0),parenthesizeLeadingTypeArgument:Ks}}});function cue(e){return{convertToFunctionBlock:t,convertToFunctionExpression:r,convertToArrayAssignmentElement:i,convertToObjectAssignmentElement:o,convertToAssignmentPattern:s,convertToObjectAssignmentPattern:l,convertToArrayAssignmentPattern:f,convertToAssignmentElementTarget:d};function t(g,m){if(Va(g))return g;let v=e.createReturnStatement(g);it(v,g);let S=e.createBlock([v],m);return it(S,g),S}function r(g){if(!g.body)return L.fail(\"Cannot convert a FunctionDeclaration without a body\");let m=e.createFunctionExpression(uT(g),g.asteriskToken,g.name,g.typeParameters,g.parameters,g.type,g.body);return Ir(m,g),it(m,g),tO(g)&&vz(m,!0),m}function i(g){if(Wo(g)){if(g.dotDotDotToken)return L.assertNode(g.name,Re),Ir(it(e.createSpreadElement(g.name),g),g);let m=d(g.name);return g.initializer?Ir(it(e.createAssignment(m,g.initializer),g),g):m}return Ga(g,ot)}function o(g){if(Wo(g)){if(g.dotDotDotToken)return L.assertNode(g.name,Re),Ir(it(e.createSpreadAssignment(g.name),g),g);if(g.propertyName){let m=d(g.name);return Ir(it(e.createPropertyAssignment(g.propertyName,g.initializer?e.createAssignment(m,g.initializer):m),g),g)}return L.assertNode(g.name,Re),Ir(it(e.createShorthandPropertyAssignment(g.name,g.initializer),g),g)}return Ga(g,Og)}function s(g){switch(g.kind){case 204:case 206:return f(g);case 203:case 207:return l(g)}}function l(g){return cm(g)?Ir(it(e.createObjectLiteralExpression(on(g.elements,o)),g),g):Ga(g,rs)}function f(g){return g2(g)?Ir(it(e.createArrayLiteralExpression(on(g.elements,i)),g),g):Ga(g,fu)}function d(g){return La(g)?s(g):Ga(g,ot)}}var dz,xRe=gt({\"src/compiler/factory/nodeConverters.ts\"(){\"use strict\";fa(),dz={convertToFunctionBlock:Sa,convertToFunctionExpression:Sa,convertToArrayAssignmentElement:Sa,convertToObjectAssignmentElement:Sa,convertToAssignmentPattern:Sa,convertToObjectAssignmentPattern:Sa,convertToArrayAssignmentPattern:Sa,convertToAssignmentElementTarget:Sa}}});function ARe(e){hz.push(e)}function YR(e,t){let r=e&8?CRe:IRe,i=zu(()=>e&1?uz:sue(P)),o=zu(()=>e&2?dz:cue(P)),s=Jp(y=>(I,N)=>M(I,y,N)),l=Jp(y=>I=>Jf(y,I)),f=Jp(y=>I=>E_(I,y)),d=Jp(y=>()=>vE(y)),g=Jp(y=>I=>ty(y,I)),m=Jp(y=>(I,N)=>cs(y,I,N)),v=Jp(y=>(I,N)=>A1(y,I,N)),S=Jp(y=>(I,N)=>bE(y,I,N)),x=Jp(y=>(I,N)=>ih(y,I,N)),A=Jp(y=>(I,N,te)=>Cv(y,I,N,te)),w=Jp(y=>(I,N,te)=>Iv(y,I,N,te)),C=Jp(y=>(I,N,te,Me)=>Gl(y,I,N,te,Me)),P={get parenthesizer(){return i()},get converters(){return o()},baseFactory:t,flags:e,createNodeArray:F,createNumericLiteral:Y,createBigIntLiteral:R,createStringLiteral:$,createStringLiteralFromNode:fe,createRegularExpressionLiteral:Z,createLiteralLikeNode:U,createIdentifier:_e,createTempVariable:ge,createLoopVariable:X,createUniqueName:Ve,getGeneratedNameForNode:we,createPrivateIdentifier:Pe,createUniquePrivateName:Ie,getGeneratedPrivateNameForNode:Be,createToken:Le,createSuper:Ye,createThis:_t,createNull:ct,createTrue:Rt,createFalse:We,createModifier:qe,createModifiersFromModifierFlags:zt,createQualifiedName:Qt,updateQualifiedName:tn,createComputedPropertyName:kn,updateComputedPropertyName:_n,createTypeParameterDeclaration:Gt,updateTypeParameterDeclaration:$n,createParameterDeclaration:ui,updateParameterDeclaration:Ni,createDecorator:Pi,updateDecorator:gr,createPropertySignature:pt,updatePropertySignature:nn,createPropertyDeclaration:pn,updatePropertyDeclaration:An,createMethodSignature:Kn,updateMethodSignature:hi,createMethodDeclaration:ri,updateMethodDeclaration:vn,createConstructorDeclaration:Se,updateConstructorDeclaration:at,createGetAccessorDeclaration:ve,updateGetAccessorDeclaration:nt,createSetAccessorDeclaration:Q,updateSetAccessorDeclaration:ue,createCallSignature:Oe,updateCallSignature:je,createConstructSignature:Ge,updateConstructSignature:kt,createIndexSignature:Kt,updateIndexSignature:ln,createClassStaticBlockDeclaration:En,updateClassStaticBlockDeclaration:dr,createTemplateLiteralTypeSpan:ir,updateTemplateLiteralTypeSpan:ae,createKeywordTypeNode:rt,createTypePredicateNode:Ot,updateTypePredicateNode:Ke,createTypeReferenceNode:oe,updateTypeReferenceNode:pe,createFunctionTypeNode:z,updateFunctionTypeNode:Te,createConstructorTypeNode:yt,updateConstructorTypeNode:Vt,createTypeQueryNode:ei,updateTypeQueryNode:Kr,createTypeLiteralNode:Si,updateTypeLiteralNode:Ja,createArrayTypeNode:Za,updateArrayTypeNode:Fa,createTupleTypeNode:Hi,updateTupleTypeNode:xi,createNamedTupleMember:Nr,updateNamedTupleMember:Fo,createOptionalTypeNode:Qr,updateOptionalTypeNode:Wi,createRestTypeNode:gn,updateRestTypeNode:Ki,createUnionTypeNode:mc,updateUnionTypeNode:xc,createIntersectionTypeNode:hc,updateIntersectionTypeNode:ro,createConditionalTypeNode:aa,updateConditionalTypeNode:Co,createInferTypeNode:gc,updateInferTypeNode:Ll,createImportTypeNode:bl,updateImportTypeNode:ss,createParenthesizedType:qs,updateParenthesizedType:Rs,createThisTypeNode:As,createTypeOperatorNode:jt,updateTypeOperatorNode:yc,createIndexedAccessTypeNode:Ql,updateIndexedAccessTypeNode:yu,createMappedTypeNode:se,updateMappedTypeNode:ht,createLiteralTypeNode:wt,updateLiteralTypeNode:K,createTemplateLiteralType:md,updateTemplateLiteralType:Pc,createObjectBindingPattern:Xe,updateObjectBindingPattern:ft,createArrayBindingPattern:Yt,updateArrayBindingPattern:pr,createBindingElement:yr,updateBindingElement:ta,createArrayLiteralExpression:Go,updateArrayLiteralExpression:Ka,createObjectLiteralExpression:vo,updateObjectLiteralExpression:ka,createPropertyAccessExpression:e&4?(y,I)=>Jn(Uc(y,I),262144):Uc,updatePropertyAccessExpression:Gu,createPropertyAccessChain:e&4?(y,I,N)=>Jn($o(y,I,N),262144):$o,updatePropertyAccessChain:jo,createElementAccessExpression:hd,updateElementAccessExpression:vc,createElementAccessChain:nf,updateElementAccessChain:ye,createCallExpression:bn,updateCallExpression:Ri,createCallChain:io,updateCallChain:ee,createNewExpression:Ze,updateNewExpression:At,createTaggedTemplateExpression:xt,updateTaggedTemplateExpression:qt,createTypeAssertion:Ln,updateTypeAssertion:mr,createParenthesizedExpression:Vr,updateParenthesizedExpression:gi,createFunctionExpression:Ea,updateFunctionExpression:bo,createArrowFunction:Qo,updateArrowFunction:Cs,createDeleteExpression:Bu,updateDeleteExpression:Pd,createTypeOfExpression:Dc,updateTypeOfExpression:gd,createVoidExpression:Zl,updateVoidExpression:Md,createAwaitExpression:zf,updateAwaitExpression:Io,createPrefixUnaryExpression:Jf,updatePrefixUnaryExpression:Fd,createPostfixUnaryExpression:E_,updatePostfixUnaryExpression:Y_,createBinaryExpression:M,updateBinaryExpression:Nt,createConditionalExpression:Pn,updateConditionalExpression:la,createTemplateExpression:oa,updateTemplateExpression:be,createTemplateHead:sn,createTemplateMiddle:Dn,createTemplateTail:kr,createNoSubstitutionTemplateLiteral:ki,createTemplateLiteralLikeNode:rn,createYieldExpression:Vn,updateYieldExpression:$t,createSpreadElement:Xn,updateSpreadElement:ra,createClassExpression:Is,updateClassExpression:Mc,createOmittedExpression:mm,createExpressionWithTypeArguments:Hh,updateExpressionWithTypeArguments:T_,createAsExpression:Cb,updateAsExpression:mv,createNonNullExpression:gx,updateNonNullExpression:_1,createSatisfiesExpression:yx,updateSatisfiesExpression:Wh,createNonNullChain:S_,updateNonNullChain:hv,createMetaProperty:eh,updateMetaProperty:$_,createTemplateSpan:gv,updateTemplateSpan:lE,createSemicolonClassElement:Ib,createBlock:zh,updateBlock:p1,createVariableStatement:uE,updateVariableStatement:dE,createEmptyStatement:fE,createExpressionStatement:yv,updateExpressionStatement:vx,createIfStatement:_E,updateIfStatement:pE,createDoStatement:vv,updateDoStatement:Lb,createWhileStatement:bv,updateWhileStatement:m1,createForStatement:Jh,updateForStatement:Lo,createForInStatement:mE,updateForInStatement:sC,createForOfStatement:Zg,updateForOfStatement:Kh,createContinueStatement:hm,updateContinueStatement:x_,createBreakStatement:Zu,updateBreakStatement:ed,createReturnStatement:td,updateReturnStatement:kb,createWithStatement:Db,updateWithStatement:bx,createSwitchStatement:wb,updateSwitchStatement:qh,createLabeledStatement:Rb,updateLabeledStatement:h1,createThrowStatement:Ob,updateThrowStatement:cC,createTryStatement:Ex,updateTryStatement:Ev,createDebuggerStatement:hE,createVariableDeclaration:Fe,updateVariableDeclaration:ey,createVariableDeclarationList:Ip,updateVariableDeclarationList:Tv,createFunctionDeclaration:Nb,updateFunctionDeclaration:Sv,createClassDeclaration:g1,updateClassDeclaration:wo,createInterfaceDeclaration:A_,updateInterfaceDeclaration:gE,createTypeAliasDeclaration:Kc,updateTypeAliasDeclaration:th,createEnumDeclaration:Pb,updateEnumDeclaration:C_,createModuleDeclaration:Mb,updateModuleDeclaration:Ml,createModuleBlock:Yh,updateModuleBlock:ll,createCaseBlock:y1,updateCaseBlock:lC,createNamespaceExportDeclaration:Ai,updateNamespaceExportDeclaration:Rr,createImportEqualsDeclaration:yd,updateImportEqualsDeclaration:yE,createImportDeclaration:$h,updateImportDeclaration:nh,createImportClause:ym,updateImportClause:zs,createAssertClause:Fb,updateAssertClause:v1,createAssertEntry:Gb,updateAssertEntry:b1,createImportTypeAssertionContainer:Cf,updateImportTypeAssertionContainer:Tx,createNamespaceImport:Sx,updateNamespaceImport:xv,createNamespaceExport:E1,updateNamespaceExport:T1,createNamedImports:xx,updateNamedImports:Bb,createImportSpecifier:S1,updateImportSpecifier:rf,createExportAssignment:Qh,updateExportAssignment:Q_,createExportDeclaration:I_,updateExportDeclaration:Ax,createNamedExports:Lp,updateNamedExports:x1,createExportSpecifier:Uu,updateExportSpecifier:Zh,createMissingDeclaration:kp,createExternalModuleReference:Dp,updateExternalModuleReference:eg,get createJSDocAllType(){return d(315)},get createJSDocUnknownType(){return d(316)},get createJSDocNonNullableType(){return v(318)},get updateJSDocNonNullableType(){return S(318)},get createJSDocNullableType(){return v(317)},get updateJSDocNullableType(){return S(317)},get createJSDocOptionalType(){return g(319)},get updateJSDocOptionalType(){return m(319)},get createJSDocVariadicType(){return g(321)},get updateJSDocVariadicType(){return m(321)},get createJSDocNamepathType(){return g(322)},get updateJSDocNamepathType(){return m(322)},createJSDocFunctionType:ny,updateJSDocFunctionType:Cx,createJSDocTypeLiteral:Vb,updateJSDocTypeLiteral:jb,createJSDocTypeExpression:Ix,updateJSDocTypeExpression:uC,createJSDocSignature:Lx,updateJSDocSignature:Qn,createJSDocTemplateTag:Av,updateJSDocTemplateTag:vm,createJSDocTypedefTag:Wn,updateJSDocTypedefTag:kx,createJSDocParameterTag:ry,updateJSDocParameterTag:nl,createJSDocPropertyTag:Kf,updateJSDocPropertyTag:Z_,createJSDocCallbackTag:iy,updateJSDocCallbackTag:EE,createJSDocOverloadTag:L_,updateJSDocOverloadTag:ay,createJSDocAugmentsTag:Ac,updateJSDocAugmentsTag:wc,createJSDocImplementsTag:tg,updateJSDocImplementsTag:ng,createJSDocSeeTag:Fl,updateJSDocSeeTag:qf,createJSDocNameReference:bm,updateJSDocNameReference:nd,createJSDocMemberName:TE,updateJSDocMemberName:Hb,createJSDocLink:Wb,updateJSDocLink:ep,createJSDocLinkCode:rh,updateJSDocLinkCode:SE,createJSDocLinkPlain:oy,updateJSDocLinkPlain:uc,get createJSDocTypeTag(){return w(347)},get updateJSDocTypeTag(){return C(347)},get createJSDocReturnTag(){return w(345)},get updateJSDocReturnTag(){return C(345)},get createJSDocThisTag(){return w(346)},get updateJSDocThisTag(){return C(346)},get createJSDocAuthorTag(){return x(333)},get updateJSDocAuthorTag(){return A(333)},get createJSDocClassTag(){return x(335)},get updateJSDocClassTag(){return A(335)},get createJSDocPublicTag(){return x(336)},get updateJSDocPublicTag(){return A(336)},get createJSDocPrivateTag(){return x(337)},get updateJSDocPrivateTag(){return A(337)},get createJSDocProtectedTag(){return x(338)},get updateJSDocProtectedTag(){return A(338)},get createJSDocReadonlyTag(){return x(339)},get updateJSDocReadonlyTag(){return A(339)},get createJSDocOverrideTag(){return x(340)},get updateJSDocOverrideTag(){return A(340)},get createJSDocDeprecatedTag(){return x(334)},get updateJSDocDeprecatedTag(){return A(334)},get createJSDocThrowsTag(){return w(352)},get updateJSDocThrowsTag(){return C(352)},get createJSDocSatisfiesTag(){return w(353)},get updateJSDocSatisfiesTag(){return C(353)},createJSDocEnumTag:xE,updateJSDocEnumTag:oh,createJSDocUnknownTag:ah,updateJSDocUnknownTag:qc,createJSDocText:zb,updateJSDocText:Vu,createJSDocComment:Em,updateJSDocComment:Jb,createJsxElement:Lv,updateJsxElement:AE,createJsxSelfClosingElement:sy,updateJsxSelfClosingElement:C1,createJsxOpeningElement:kv,updateJsxOpeningElement:rg,createJsxClosingElement:of,updateJsxClosingElement:CE,createJsxFragment:Gd,createJsxText:Dv,updateJsxText:Dx,createJsxOpeningFragment:No,createJsxJsxClosingFragment:fr,updateJsxFragment:sh,createJsxAttribute:vd,updateJsxAttribute:ju,createJsxAttributes:I1,updateJsxAttributes:IE,createJsxSpreadAttribute:cy,updateJsxSpreadAttribute:wx,createJsxExpression:ly,updateJsxExpression:wp,createCaseClause:tp,updateCaseClause:ig,createDefaultClause:wv,updateDefaultClause:ch,createHeritageClause:Rp,updateHeritageClause:L1,createCatchClause:Cc,updateCatchClause:Bd,createPropertyAssignment:Tm,updatePropertyAssignment:rd,createShorthandPropertyAssignment:uy,updateShorthandPropertyAssignment:ag,createSpreadAssignment:sf,updateSpreadAssignment:ls,createEnumMember:kE,updateEnumMember:DE,createSourceFile:og,updateSourceFile:NE,createRedirectedSourceFile:Rv,createBundle:PE,updateBundle:dy,createUnparsedSource:bd,createUnparsedPrologue:dC,createUnparsedPrepend:sg,createUnparsedTextLike:Ox,createUnparsedSyntheticReference:Nx,createInputFiles:E,createSyntheticExpression:ne,createSyntaxList:Ee,createNotEmittedStatement:Wt,createPartiallyEmittedExpression:lr,updatePartiallyEmittedExpression:ci,createCommaListExpression:Ti,updateCommaListExpression:Wa,createEndOfDeclarationMarker:kl,createMergeDeclarationMarker:Ed,createSyntheticReferenceExpression:Ud,updateSyntheticReferenceExpression:fy,cloneNode:Xf,get createComma(){return s(27)},get createAssignment(){return s(63)},get createLogicalOr(){return s(56)},get createLogicalAnd(){return s(55)},get createBitwiseOr(){return s(51)},get createBitwiseXor(){return s(52)},get createBitwiseAnd(){return s(50)},get createStrictEquality(){return s(36)},get createStrictInequality(){return s(37)},get createEquality(){return s(34)},get createInequality(){return s(35)},get createLessThan(){return s(29)},get createLessThanEquals(){return s(32)},get createGreaterThan(){return s(31)},get createGreaterThanEquals(){return s(33)},get createLeftShift(){return s(47)},get createRightShift(){return s(48)},get createUnsignedRightShift(){return s(49)},get createAdd(){return s(39)},get createSubtract(){return s(40)},get createMultiply(){return s(41)},get createDivide(){return s(43)},get createModulo(){return s(44)},get createExponent(){return s(42)},get createPrefixPlus(){return l(39)},get createPrefixMinus(){return l(40)},get createPrefixIncrement(){return l(45)},get createPrefixDecrement(){return l(46)},get createBitwiseNot(){return l(54)},get createLogicalNot(){return l(53)},get createPostfixIncrement(){return f(45)},get createPostfixDecrement(){return f(46)},createImmediatelyInvokedFunctionExpression:ME,createImmediatelyInvokedArrowFunction:cf,createVoidZero:Sm,createExportDefault:py,createExternalModuleExport:If,createTypeCheck:FE,createMethodCall:Pv,createGlobalMethodCall:Ro,createFunctionBindCall:Vc,createFunctionCallCall:KP,createFunctionApplyCall:Zo,createArraySliceCall:Px,createArrayConcatCall:Mx,createObjectDefinePropertyCall:V,createObjectGetOwnPropertyDescriptorCall:me,createReflectGetCall:Ue,createReflectSetCall:ut,createPropertyDescriptor:dn,createCallBinding:is,createAssignmentTargetWrapper:ao,inlineExpressions:Oo,getInternalName:np,getLocalName:Op,getExportName:cg,getDeclarationName:Yf,getNamespaceMemberName:my,getExternalModuleOrNamespaceExportName:Fx,restoreOuterExpressions:li,restoreEnclosingLabel:di,createUseStrictPrologue:k_,copyPrologue:GE,copyStandardPrologue:Mv,copyCustomPrologue:_C,ensureUseStrict:lf,liftToBlock:Gx,mergeLexicalEnvironment:jk,updateModifiers:Hk};return mn(hz,y=>y(P)),P;function F(y,I){if(y===void 0||y===Je)y=[];else if(C0(y)){if(I===void 0||y.hasTrailingComma===I)return y.transformFlags===void 0&&lue(y),L.attachNodeArrayDebugInfo(y),y;let Me=y.slice();return Me.pos=y.pos,Me.end=y.end,Me.hasTrailingComma=I,Me.transformFlags=y.transformFlags,L.attachNodeArrayDebugInfo(Me),Me}let N=y.length,te=N>=1&&N<=4?y.slice():y;return te.pos=-1,te.end=-1,te.hasTrailingComma=!!I,te.transformFlags=0,lue(te),L.attachNodeArrayDebugInfo(te),te}function B(y){return t.createBaseNode(y)}function q(y){let I=B(y);return I.symbol=void 0,I.localSymbol=void 0,I}function W(y,I){return y!==I&&(y.typeArguments=I.typeArguments),r(y,I)}function Y(y,I=0){let N=q(8);return N.text=typeof y==\"number\"?y+\"\":y,N.numericLiteralFlags=I,I&384&&(N.transformFlags|=1024),N}function R(y){let I=Ne(9);return I.text=typeof y==\"string\"?y:j0(y)+\"n\",I.transformFlags|=4,I}function ie(y,I){let N=q(10);return N.text=y,N.singleQuote=I,N}function $(y,I,N){let te=ie(y,I);return te.hasExtendedUnicodeEscape=N,N&&(te.transformFlags|=1024),te}function fe(y){let I=ie(l_(y),void 0);return I.textSourceNode=y,I}function Z(y){let I=Ne(13);return I.text=y,I}function U(y,I){switch(y){case 8:return Y(I,0);case 9:return R(I);case 10:return $(I,void 0);case 11:return Dv(I,!1);case 12:return Dv(I,!0);case 13:return Z(I);case 14:return rn(y,I,void 0,0)}}function re(y){let I=t.createBaseIdentifierNode(79);return I.escapedText=y,I.jsDoc=void 0,I.flowNode=void 0,I.symbol=void 0,I}function le(y,I,N,te){let Me=re(Bs(y));return iO(Me,{flags:I,id:QR,prefix:N,suffix:te}),QR++,Me}function _e(y,I,N){I===void 0&&y&&(I=lT(y)),I===79&&(I=void 0);let te=re(Bs(y));return N&&(te.flags|=128),te.escapedText===\"await\"&&(te.transformFlags|=67108864),te.flags&128&&(te.transformFlags|=1024),te}function ge(y,I,N,te){let Me=1;I&&(Me|=8);let Pt=le(\"\",Me,N,te);return y&&y(Pt),Pt}function X(y){let I=2;return y&&(I|=8),le(\"\",I,void 0,void 0)}function Ve(y,I=0,N,te){return L.assert(!(I&7),\"Argument out of range: flags\"),L.assert((I&48)!==32,\"GeneratedIdentifierFlags.FileLevel cannot be set without also setting GeneratedIdentifierFlags.Optimistic\"),le(y,3|I,N,te)}function we(y,I=0,N,te){L.assert(!(I&7),\"Argument out of range: flags\");let Me=y?Ah(y)?jT(!1,N,y,te,vr):`generated@${zo(y)}`:\"\";(N||te)&&(I|=16);let Pt=le(Me,4|I,N,te);return Pt.original=y,Pt}function ke(y){let I=t.createBasePrivateIdentifierNode(80);return I.escapedText=y,I.transformFlags|=16777216,I}function Pe(y){return na(y,\"#\")||L.fail(\"First character of private identifier must be #: \"+y),ke(Bs(y))}function Ce(y,I,N,te){let Me=ke(Bs(y));return iO(Me,{flags:I,id:QR,prefix:N,suffix:te}),QR++,Me}function Ie(y,I,N){y&&!na(y,\"#\")&&L.fail(\"First character of private identifier must be #: \"+y);let te=8|(y?3:1);return Ce(y??\"\",te,I,N)}function Be(y,I,N){let te=Ah(y)?jT(!0,I,y,N,vr):`#generated@${zo(y)}`,Pt=Ce(te,4|(I||N?16:0),I,N);return Pt.original=y,Pt}function Ne(y){return t.createBaseTokenNode(y)}function Le(y){L.assert(y>=0&&y<=162,\"Invalid token\"),L.assert(y<=14||y>=17,\"Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals.\"),L.assert(y<=8||y>=14,\"Invalid token. Use 'createLiteralLikeNode' to create literals.\"),L.assert(y!==79,\"Invalid token. Use 'createIdentifier' to create identifiers\");let I=Ne(y),N=0;switch(y){case 132:N=384;break;case 123:case 121:case 122:case 146:case 126:case 136:case 85:case 131:case 148:case 160:case 144:case 149:case 101:case 145:case 161:case 152:case 134:case 153:case 114:case 157:case 155:N=1;break;case 106:N=134218752,I.flowNode=void 0;break;case 124:N=1024;break;case 127:N=16777216;break;case 108:N=16384,I.flowNode=void 0;break}return N&&(I.transformFlags|=N),I}function Ye(){return Le(106)}function _t(){return Le(108)}function ct(){return Le(104)}function Rt(){return Le(110)}function We(){return Le(95)}function qe(y){return Le(y)}function zt(y){let I=[];return y&1&&I.push(qe(93)),y&2&&I.push(qe(136)),y&1024&&I.push(qe(88)),y&2048&&I.push(qe(85)),y&4&&I.push(qe(123)),y&8&&I.push(qe(121)),y&16&&I.push(qe(122)),y&256&&I.push(qe(126)),y&32&&I.push(qe(124)),y&16384&&I.push(qe(161)),y&64&&I.push(qe(146)),y&128&&I.push(qe(127)),y&512&&I.push(qe(132)),y&32768&&I.push(qe(101)),y&65536&&I.push(qe(145)),I.length?I:void 0}function Qt(y,I){let N=B(163);return N.left=y,N.right=Zs(I),N.transformFlags|=tr(N.left)|fL(N.right),N.flowNode=void 0,N}function tn(y,I,N){return y.left!==I||y.right!==N?r(Qt(I,N),y):y}function kn(y){let I=B(164);return I.expression=i().parenthesizeExpressionOfComputedPropertyName(y),I.transformFlags|=tr(I.expression)|1024|131072,I}function _n(y,I){return y.expression!==I?r(kn(I),y):y}function Gt(y,I,N,te){let Me=q(165);return Me.modifiers=oo(y),Me.name=Zs(I),Me.constraint=N,Me.default=te,Me.transformFlags=1,Me.expression=void 0,Me.jsDoc=void 0,Me}function $n(y,I,N,te,Me){return y.modifiers!==I||y.name!==N||y.constraint!==te||y.default!==Me?r(Gt(I,N,te,Me),y):y}function ui(y,I,N,te,Me,Pt){var Tr,Fi;let Da=q(166);return Da.modifiers=oo(y),Da.dotDotDotToken=I,Da.name=Zs(N),Da.questionToken=te,Da.type=Me,Da.initializer=gy(Pt),LT(Da.name)?Da.transformFlags=1:Da.transformFlags=fo(Da.modifiers)|tr(Da.dotDotDotToken)|Gg(Da.name)|tr(Da.questionToken)|tr(Da.initializer)|(((Tr=Da.questionToken)!=null?Tr:Da.type)?1:0)|(((Fi=Da.dotDotDotToken)!=null?Fi:Da.initializer)?1024:0)|(im(Da.modifiers)&16476?8192:0),Da.jsDoc=void 0,Da}function Ni(y,I,N,te,Me,Pt,Tr){return y.modifiers!==I||y.dotDotDotToken!==N||y.name!==te||y.questionToken!==Me||y.type!==Pt||y.initializer!==Tr?r(ui(I,N,te,Me,Pt,Tr),y):y}function Pi(y){let I=B(167);return I.expression=i().parenthesizeLeftSideOfAccess(y,!1),I.transformFlags|=tr(I.expression)|1|8192|33554432,I}function gr(y,I){return y.expression!==I?r(Pi(I),y):y}function pt(y,I,N,te){let Me=q(168);return Me.modifiers=oo(y),Me.name=Zs(I),Me.type=te,Me.questionToken=N,Me.transformFlags=1,Me.initializer=void 0,Me.jsDoc=void 0,Me}function nn(y,I,N,te,Me){return y.modifiers!==I||y.name!==N||y.questionToken!==te||y.type!==Me?Dt(pt(I,N,te,Me),y):y}function Dt(y,I){return y!==I&&(y.initializer=I.initializer),r(y,I)}function pn(y,I,N,te,Me){let Pt=q(169);Pt.modifiers=oo(y),Pt.name=Zs(I),Pt.questionToken=N&&ev(N)?N:void 0,Pt.exclamationToken=N&&lO(N)?N:void 0,Pt.type=te,Pt.initializer=gy(Me);let Tr=Pt.flags&16777216||im(Pt.modifiers)&2;return Pt.transformFlags=fo(Pt.modifiers)|Gg(Pt.name)|tr(Pt.initializer)|(Tr||Pt.questionToken||Pt.exclamationToken||Pt.type?1:0)|(ts(Pt.name)||im(Pt.modifiers)&32&&Pt.initializer?8192:0)|16777216,Pt.jsDoc=void 0,Pt}function An(y,I,N,te,Me,Pt){return y.modifiers!==I||y.name!==N||y.questionToken!==(te!==void 0&&ev(te)?te:void 0)||y.exclamationToken!==(te!==void 0&&lO(te)?te:void 0)||y.type!==Me||y.initializer!==Pt?r(pn(I,N,te,Me,Pt),y):y}function Kn(y,I,N,te,Me,Pt){let Tr=q(170);return Tr.modifiers=oo(y),Tr.name=Zs(I),Tr.questionToken=N,Tr.typeParameters=oo(te),Tr.parameters=oo(Me),Tr.type=Pt,Tr.transformFlags=1,Tr.jsDoc=void 0,Tr.locals=void 0,Tr.nextContainer=void 0,Tr.typeArguments=void 0,Tr}function hi(y,I,N,te,Me,Pt,Tr){return y.modifiers!==I||y.name!==N||y.questionToken!==te||y.typeParameters!==Me||y.parameters!==Pt||y.type!==Tr?W(Kn(I,N,te,Me,Pt,Tr),y):y}function ri(y,I,N,te,Me,Pt,Tr,Fi){let Da=q(171);if(Da.modifiers=oo(y),Da.asteriskToken=I,Da.name=Zs(N),Da.questionToken=te,Da.exclamationToken=void 0,Da.typeParameters=oo(Me),Da.parameters=F(Pt),Da.type=Tr,Da.body=Fi,!Da.body)Da.transformFlags=1;else{let Vd=im(Da.modifiers)&512,lg=!!Da.asteriskToken,ug=Vd&&lg;Da.transformFlags=fo(Da.modifiers)|tr(Da.asteriskToken)|Gg(Da.name)|tr(Da.questionToken)|fo(Da.typeParameters)|fo(Da.parameters)|tr(Da.type)|tr(Da.body)&-67108865|(ug?128:Vd?256:lg?2048:0)|(Da.questionToken||Da.typeParameters||Da.type?1:0)|1024}return Da.typeArguments=void 0,Da.jsDoc=void 0,Da.locals=void 0,Da.nextContainer=void 0,Da.flowNode=void 0,Da.endFlowNode=void 0,Da.returnFlowNode=void 0,Da}function vn(y,I,N,te,Me,Pt,Tr,Fi,Da){return y.modifiers!==I||y.asteriskToken!==N||y.name!==te||y.questionToken!==Me||y.typeParameters!==Pt||y.parameters!==Tr||y.type!==Fi||y.body!==Da?Ht(ri(I,N,te,Me,Pt,Tr,Fi,Da),y):y}function Ht(y,I){return y!==I&&(y.exclamationToken=I.exclamationToken),r(y,I)}function En(y){let I=q(172);return I.body=y,I.transformFlags=tr(y)|16777216,I.modifiers=void 0,I.jsDoc=void 0,I.locals=void 0,I.nextContainer=void 0,I.endFlowNode=void 0,I.returnFlowNode=void 0,I}function dr(y,I){return y.body!==I?Cr(En(I),y):y}function Cr(y,I){return y!==I&&(y.modifiers=I.modifiers),r(y,I)}function Se(y,I,N){let te=q(173);return te.modifiers=oo(y),te.parameters=F(I),te.body=N,te.transformFlags=fo(te.modifiers)|fo(te.parameters)|tr(te.body)&-67108865|1024,te.typeParameters=void 0,te.type=void 0,te.typeArguments=void 0,te.jsDoc=void 0,te.locals=void 0,te.nextContainer=void 0,te.endFlowNode=void 0,te.returnFlowNode=void 0,te}function at(y,I,N,te){return y.modifiers!==I||y.parameters!==N||y.body!==te?Tt(Se(I,N,te),y):y}function Tt(y,I){return y!==I&&(y.typeParameters=I.typeParameters,y.type=I.type),W(y,I)}function ve(y,I,N,te,Me){let Pt=q(174);return Pt.modifiers=oo(y),Pt.name=Zs(I),Pt.parameters=F(N),Pt.type=te,Pt.body=Me,Pt.body?Pt.transformFlags=fo(Pt.modifiers)|Gg(Pt.name)|fo(Pt.parameters)|tr(Pt.type)|tr(Pt.body)&-67108865|(Pt.type?1:0):Pt.transformFlags=1,Pt.typeArguments=void 0,Pt.typeParameters=void 0,Pt.jsDoc=void 0,Pt.locals=void 0,Pt.nextContainer=void 0,Pt.flowNode=void 0,Pt.endFlowNode=void 0,Pt.returnFlowNode=void 0,Pt}function nt(y,I,N,te,Me,Pt){return y.modifiers!==I||y.name!==N||y.parameters!==te||y.type!==Me||y.body!==Pt?ce(ve(I,N,te,Me,Pt),y):y}function ce(y,I){return y!==I&&(y.typeParameters=I.typeParameters),W(y,I)}function Q(y,I,N,te){let Me=q(175);return Me.modifiers=oo(y),Me.name=Zs(I),Me.parameters=F(N),Me.body=te,Me.body?Me.transformFlags=fo(Me.modifiers)|Gg(Me.name)|fo(Me.parameters)|tr(Me.body)&-67108865|(Me.type?1:0):Me.transformFlags=1,Me.typeArguments=void 0,Me.typeParameters=void 0,Me.type=void 0,Me.jsDoc=void 0,Me.locals=void 0,Me.nextContainer=void 0,Me.flowNode=void 0,Me.endFlowNode=void 0,Me.returnFlowNode=void 0,Me}function ue(y,I,N,te,Me){return y.modifiers!==I||y.name!==N||y.parameters!==te||y.body!==Me?G(Q(I,N,te,Me),y):y}function G(y,I){return y!==I&&(y.typeParameters=I.typeParameters,y.type=I.type),W(y,I)}function Oe(y,I,N){let te=q(176);return te.typeParameters=oo(y),te.parameters=oo(I),te.type=N,te.transformFlags=1,te.jsDoc=void 0,te.locals=void 0,te.nextContainer=void 0,te.typeArguments=void 0,te}function je(y,I,N,te){return y.typeParameters!==I||y.parameters!==N||y.type!==te?W(Oe(I,N,te),y):y}function Ge(y,I,N){let te=q(177);return te.typeParameters=oo(y),te.parameters=oo(I),te.type=N,te.transformFlags=1,te.jsDoc=void 0,te.locals=void 0,te.nextContainer=void 0,te.typeArguments=void 0,te}function kt(y,I,N,te){return y.typeParameters!==I||y.parameters!==N||y.type!==te?W(Ge(I,N,te),y):y}function Kt(y,I,N){let te=q(178);return te.modifiers=oo(y),te.parameters=oo(I),te.type=N,te.transformFlags=1,te.jsDoc=void 0,te.locals=void 0,te.nextContainer=void 0,te.typeArguments=void 0,te}function ln(y,I,N,te){return y.parameters!==N||y.type!==te||y.modifiers!==I?W(Kt(I,N,te),y):y}function ir(y,I){let N=B(201);return N.type=y,N.literal=I,N.transformFlags=1,N}function ae(y,I,N){return y.type!==I||y.literal!==N?r(ir(I,N),y):y}function rt(y){return Le(y)}function Ot(y,I,N){let te=B(179);return te.assertsModifier=y,te.parameterName=Zs(I),te.type=N,te.transformFlags=1,te}function Ke(y,I,N,te){return y.assertsModifier!==I||y.parameterName!==N||y.type!==te?r(Ot(I,N,te),y):y}function oe(y,I){let N=B(180);return N.typeName=Zs(y),N.typeArguments=I&&i().parenthesizeTypeArguments(F(I)),N.transformFlags=1,N}function pe(y,I,N){return y.typeName!==I||y.typeArguments!==N?r(oe(I,N),y):y}function z(y,I,N){let te=q(181);return te.typeParameters=oo(y),te.parameters=oo(I),te.type=N,te.transformFlags=1,te.modifiers=void 0,te.jsDoc=void 0,te.locals=void 0,te.nextContainer=void 0,te.typeArguments=void 0,te}function Te(y,I,N,te){return y.typeParameters!==I||y.parameters!==N||y.type!==te?j(z(I,N,te),y):y}function j(y,I){return y!==I&&(y.modifiers=I.modifiers),W(y,I)}function yt(...y){return y.length===4?lt(...y):y.length===3?Qe(...y):L.fail(\"Incorrect number of arguments specified.\")}function lt(y,I,N,te){let Me=q(182);return Me.modifiers=oo(y),Me.typeParameters=oo(I),Me.parameters=oo(N),Me.type=te,Me.transformFlags=1,Me.jsDoc=void 0,Me.locals=void 0,Me.nextContainer=void 0,Me.typeArguments=void 0,Me}function Qe(y,I,N){return lt(void 0,y,I,N)}function Vt(...y){return y.length===5?Hn(...y):y.length===4?jr(...y):L.fail(\"Incorrect number of arguments specified.\")}function Hn(y,I,N,te,Me){return y.modifiers!==I||y.typeParameters!==N||y.parameters!==te||y.type!==Me?W(yt(I,N,te,Me),y):y}function jr(y,I,N,te){return Hn(y,y.modifiers,I,N,te)}function ei(y,I){let N=B(183);return N.exprName=y,N.typeArguments=I&&i().parenthesizeTypeArguments(I),N.transformFlags=1,N}function Kr(y,I,N){return y.exprName!==I||y.typeArguments!==N?r(ei(I,N),y):y}function Si(y){let I=q(184);return I.members=F(y),I.transformFlags=1,I}function Ja(y,I){return y.members!==I?r(Si(I),y):y}function Za(y){let I=B(185);return I.elementType=i().parenthesizeNonArrayTypeOfPostfixType(y),I.transformFlags=1,I}function Fa(y,I){return y.elementType!==I?r(Za(I),y):y}function Hi(y){let I=B(186);return I.elements=F(i().parenthesizeElementTypesOfTupleType(y)),I.transformFlags=1,I}function xi(y,I){return y.elements!==I?r(Hi(I),y):y}function Nr(y,I,N,te){let Me=q(199);return Me.dotDotDotToken=y,Me.name=I,Me.questionToken=N,Me.type=te,Me.transformFlags=1,Me.jsDoc=void 0,Me}function Fo(y,I,N,te,Me){return y.dotDotDotToken!==I||y.name!==N||y.questionToken!==te||y.type!==Me?r(Nr(I,N,te,Me),y):y}function Qr(y){let I=B(187);return I.type=i().parenthesizeTypeOfOptionalType(y),I.transformFlags=1,I}function Wi(y,I){return y.type!==I?r(Qr(I),y):y}function gn(y){let I=B(188);return I.type=y,I.transformFlags=1,I}function Ki(y,I){return y.type!==I?r(gn(I),y):y}function kc(y,I,N){let te=B(y);return te.types=P.createNodeArray(N(I)),te.transformFlags=1,te}function Ps(y,I,N){return y.types!==I?r(kc(y.kind,I,N),y):y}function mc(y){return kc(189,y,i().parenthesizeConstituentTypesOfUnionType)}function xc(y,I){return Ps(y,I,i().parenthesizeConstituentTypesOfUnionType)}function hc(y){return kc(190,y,i().parenthesizeConstituentTypesOfIntersectionType)}function ro(y,I){return Ps(y,I,i().parenthesizeConstituentTypesOfIntersectionType)}function aa(y,I,N,te){let Me=B(191);return Me.checkType=i().parenthesizeCheckTypeOfConditionalType(y),Me.extendsType=i().parenthesizeExtendsTypeOfConditionalType(I),Me.trueType=N,Me.falseType=te,Me.transformFlags=1,Me.locals=void 0,Me.nextContainer=void 0,Me}function Co(y,I,N,te,Me){return y.checkType!==I||y.extendsType!==N||y.trueType!==te||y.falseType!==Me?r(aa(I,N,te,Me),y):y}function gc(y){let I=B(192);return I.typeParameter=y,I.transformFlags=1,I}function Ll(y,I){return y.typeParameter!==I?r(gc(I),y):y}function md(y,I){let N=B(200);return N.head=y,N.templateSpans=F(I),N.transformFlags=1,N}function Pc(y,I,N){return y.head!==I||y.templateSpans!==N?r(md(I,N),y):y}function bl(y,I,N,te,Me=!1){let Pt=B(202);return Pt.argument=y,Pt.assertions=I,Pt.qualifier=N,Pt.typeArguments=te&&i().parenthesizeTypeArguments(te),Pt.isTypeOf=Me,Pt.transformFlags=1,Pt}function ss(y,I,N,te,Me,Pt=y.isTypeOf){return y.argument!==I||y.assertions!==N||y.qualifier!==te||y.typeArguments!==Me||y.isTypeOf!==Pt?r(bl(I,N,te,Me,Pt),y):y}function qs(y){let I=B(193);return I.type=y,I.transformFlags=1,I}function Rs(y,I){return y.type!==I?r(qs(I),y):y}function As(){let y=B(194);return y.transformFlags=1,y}function jt(y,I){let N=B(195);return N.operator=y,N.type=y===146?i().parenthesizeOperandOfReadonlyTypeOperator(I):i().parenthesizeOperandOfTypeOperator(I),N.transformFlags=1,N}function yc(y,I){return y.type!==I?r(jt(y.operator,I),y):y}function Ql(y,I){let N=B(196);return N.objectType=i().parenthesizeNonArrayTypeOfPostfixType(y),N.indexType=I,N.transformFlags=1,N}function yu(y,I,N){return y.objectType!==I||y.indexType!==N?r(Ql(I,N),y):y}function se(y,I,N,te,Me,Pt){let Tr=q(197);return Tr.readonlyToken=y,Tr.typeParameter=I,Tr.nameType=N,Tr.questionToken=te,Tr.type=Me,Tr.members=Pt&&F(Pt),Tr.transformFlags=1,Tr.locals=void 0,Tr.nextContainer=void 0,Tr}function ht(y,I,N,te,Me,Pt,Tr){return y.readonlyToken!==I||y.typeParameter!==N||y.nameType!==te||y.questionToken!==Me||y.type!==Pt||y.members!==Tr?r(se(I,N,te,Me,Pt,Tr),y):y}function wt(y){let I=B(198);return I.literal=y,I.transformFlags=1,I}function K(y,I){return y.literal!==I?r(wt(I),y):y}function Xe(y){let I=B(203);return I.elements=F(y),I.transformFlags|=fo(I.elements)|1024|524288,I.transformFlags&32768&&(I.transformFlags|=65664),I}function ft(y,I){return y.elements!==I?r(Xe(I),y):y}function Yt(y){let I=B(204);return I.elements=F(y),I.transformFlags|=fo(I.elements)|1024|524288,I}function pr(y,I){return y.elements!==I?r(Yt(I),y):y}function yr(y,I,N,te){let Me=q(205);return Me.dotDotDotToken=y,Me.propertyName=Zs(I),Me.name=Zs(N),Me.initializer=gy(te),Me.transformFlags|=tr(Me.dotDotDotToken)|Gg(Me.propertyName)|Gg(Me.name)|tr(Me.initializer)|(Me.dotDotDotToken?32768:0)|1024,Me.flowNode=void 0,Me}function ta(y,I,N,te,Me){return y.propertyName!==N||y.dotDotDotToken!==I||y.name!==te||y.initializer!==Me?r(yr(I,N,te,Me),y):y}function Go(y,I){let N=B(206),te=y&&Os(y),Me=F(y,te&&ol(te)?!0:void 0);return N.elements=i().parenthesizeExpressionsOfCommaDelimitedList(Me),N.multiLine=I,N.transformFlags|=fo(N.elements),N}function Ka(y,I){return y.elements!==I?r(Go(I,y.multiLine),y):y}function vo(y,I){let N=q(207);return N.properties=F(y),N.multiLine=I,N.transformFlags|=fo(N.properties),N.jsDoc=void 0,N}function ka(y,I){return y.properties!==I?r(vo(I,y.multiLine),y):y}function Hs(y,I,N){let te=q(208);return te.expression=y,te.questionDotToken=I,te.name=N,te.transformFlags=tr(te.expression)|tr(te.questionDotToken)|(Re(te.name)?fL(te.name):tr(te.name)|536870912),te.jsDoc=void 0,te.flowNode=void 0,te}function Uc(y,I){let N=Hs(i().parenthesizeLeftSideOfAccess(y,!1),void 0,Zs(I));return hL(y)&&(N.transformFlags|=384),N}function Gu(y,I,N){return n6(y)?jo(y,I,y.questionDotToken,Ga(N,Re)):y.expression!==I||y.name!==N?r(Uc(I,N),y):y}function $o(y,I,N){let te=Hs(i().parenthesizeLeftSideOfAccess(y,!0),I,Zs(N));return te.flags|=32,te.transformFlags|=32,te}function jo(y,I,N,te){return L.assert(!!(y.flags&32),\"Cannot update a PropertyAccessExpression using updatePropertyAccessChain. Use updatePropertyAccess instead.\"),y.expression!==I||y.questionDotToken!==N||y.name!==te?r($o(I,N,te),y):y}function Ws(y,I,N){let te=q(209);return te.expression=y,te.questionDotToken=I,te.argumentExpression=N,te.transformFlags|=tr(te.expression)|tr(te.questionDotToken)|tr(te.argumentExpression),te.jsDoc=void 0,te.flowNode=void 0,te}function hd(y,I){let N=Ws(i().parenthesizeLeftSideOfAccess(y,!1),void 0,Fv(I));return hL(y)&&(N.transformFlags|=384),N}function vc(y,I,N){return Dj(y)?ye(y,I,y.questionDotToken,N):y.expression!==I||y.argumentExpression!==N?r(hd(I,N),y):y}function nf(y,I,N){let te=Ws(i().parenthesizeLeftSideOfAccess(y,!0),I,Fv(N));return te.flags|=32,te.transformFlags|=32,te}function ye(y,I,N,te){return L.assert(!!(y.flags&32),\"Cannot update a ElementAccessExpression using updateElementAccessChain. Use updateElementAccess instead.\"),y.expression!==I||y.questionDotToken!==N||y.argumentExpression!==te?r(nf(I,N,te),y):y}function Et(y,I,N,te){let Me=q(210);return Me.expression=y,Me.questionDotToken=I,Me.typeArguments=N,Me.arguments=te,Me.transformFlags|=tr(Me.expression)|tr(Me.questionDotToken)|fo(Me.typeArguments)|fo(Me.arguments),Me.typeArguments&&(Me.transformFlags|=1),Pu(Me.expression)&&(Me.transformFlags|=16384),Me}function bn(y,I,N){let te=Et(i().parenthesizeLeftSideOfAccess(y,!1),void 0,oo(I),i().parenthesizeExpressionsOfCommaDelimitedList(F(N)));return gL(te.expression)&&(te.transformFlags|=8388608),te}function Ri(y,I,N,te){return dT(y)?ee(y,I,y.questionDotToken,N,te):y.expression!==I||y.typeArguments!==N||y.arguments!==te?r(bn(I,N,te),y):y}function io(y,I,N,te){let Me=Et(i().parenthesizeLeftSideOfAccess(y,!0),I,oo(N),i().parenthesizeExpressionsOfCommaDelimitedList(F(te)));return Me.flags|=32,Me.transformFlags|=32,Me}function ee(y,I,N,te,Me){return L.assert(!!(y.flags&32),\"Cannot update a CallExpression using updateCallChain. Use updateCall instead.\"),y.expression!==I||y.questionDotToken!==N||y.typeArguments!==te||y.arguments!==Me?r(io(I,N,te,Me),y):y}function Ze(y,I,N){let te=q(211);return te.expression=i().parenthesizeExpressionOfNew(y),te.typeArguments=oo(I),te.arguments=N?i().parenthesizeExpressionsOfCommaDelimitedList(N):void 0,te.transformFlags|=tr(te.expression)|fo(te.typeArguments)|fo(te.arguments)|32,te.typeArguments&&(te.transformFlags|=1),te}function At(y,I,N,te){return y.expression!==I||y.typeArguments!==N||y.arguments!==te?r(Ze(I,N,te),y):y}function xt(y,I,N){let te=B(212);return te.tag=i().parenthesizeLeftSideOfAccess(y,!1),te.typeArguments=oo(I),te.template=N,te.transformFlags|=tr(te.tag)|fo(te.typeArguments)|tr(te.template)|1024,te.typeArguments&&(te.transformFlags|=1),KH(te.template)&&(te.transformFlags|=128),te}function qt(y,I,N,te){return y.tag!==I||y.typeArguments!==N||y.template!==te?r(xt(I,N,te),y):y}function Ln(y,I){let N=B(213);return N.expression=i().parenthesizeOperandOfPrefixUnary(I),N.type=y,N.transformFlags|=tr(N.expression)|tr(N.type)|1,N}function mr(y,I,N){return y.type!==I||y.expression!==N?r(Ln(I,N),y):y}function Vr(y){let I=B(214);return I.expression=y,I.transformFlags=tr(I.expression),I.jsDoc=void 0,I}function gi(y,I){return y.expression!==I?r(Vr(I),y):y}function Ea(y,I,N,te,Me,Pt,Tr){let Fi=q(215);Fi.modifiers=oo(y),Fi.asteriskToken=I,Fi.name=Zs(N),Fi.typeParameters=oo(te),Fi.parameters=F(Me),Fi.type=Pt,Fi.body=Tr;let Da=im(Fi.modifiers)&512,Vd=!!Fi.asteriskToken,lg=Da&&Vd;return Fi.transformFlags=fo(Fi.modifiers)|tr(Fi.asteriskToken)|Gg(Fi.name)|fo(Fi.typeParameters)|fo(Fi.parameters)|tr(Fi.type)|tr(Fi.body)&-67108865|(lg?128:Da?256:Vd?2048:0)|(Fi.typeParameters||Fi.type?1:0)|4194304,Fi.typeArguments=void 0,Fi.jsDoc=void 0,Fi.locals=void 0,Fi.nextContainer=void 0,Fi.flowNode=void 0,Fi.endFlowNode=void 0,Fi.returnFlowNode=void 0,Fi}function bo(y,I,N,te,Me,Pt,Tr,Fi){return y.name!==te||y.modifiers!==I||y.asteriskToken!==N||y.typeParameters!==Me||y.parameters!==Pt||y.type!==Tr||y.body!==Fi?W(Ea(I,N,te,Me,Pt,Tr,Fi),y):y}function Qo(y,I,N,te,Me,Pt){let Tr=q(216);Tr.modifiers=oo(y),Tr.typeParameters=oo(I),Tr.parameters=F(N),Tr.type=te,Tr.equalsGreaterThanToken=Me??Le(38),Tr.body=i().parenthesizeConciseBodyOfArrowFunction(Pt);let Fi=im(Tr.modifiers)&512;return Tr.transformFlags=fo(Tr.modifiers)|fo(Tr.typeParameters)|fo(Tr.parameters)|tr(Tr.type)|tr(Tr.equalsGreaterThanToken)|tr(Tr.body)&-67108865|(Tr.typeParameters||Tr.type?1:0)|(Fi?16640:0)|1024,Tr.typeArguments=void 0,Tr.jsDoc=void 0,Tr.locals=void 0,Tr.nextContainer=void 0,Tr.flowNode=void 0,Tr.endFlowNode=void 0,Tr.returnFlowNode=void 0,Tr}function Cs(y,I,N,te,Me,Pt,Tr){return y.modifiers!==I||y.typeParameters!==N||y.parameters!==te||y.type!==Me||y.equalsGreaterThanToken!==Pt||y.body!==Tr?W(Qo(I,N,te,Me,Pt,Tr),y):y}function Bu(y){let I=B(217);return I.expression=i().parenthesizeOperandOfPrefixUnary(y),I.transformFlags|=tr(I.expression),I}function Pd(y,I){return y.expression!==I?r(Bu(I),y):y}function Dc(y){let I=B(218);return I.expression=i().parenthesizeOperandOfPrefixUnary(y),I.transformFlags|=tr(I.expression),I}function gd(y,I){return y.expression!==I?r(Dc(I),y):y}function Zl(y){let I=B(219);return I.expression=i().parenthesizeOperandOfPrefixUnary(y),I.transformFlags|=tr(I.expression),I}function Md(y,I){return y.expression!==I?r(Zl(I),y):y}function zf(y){let I=B(220);return I.expression=i().parenthesizeOperandOfPrefixUnary(y),I.transformFlags|=tr(I.expression)|256|128|2097152,I}function Io(y,I){return y.expression!==I?r(zf(I),y):y}function Jf(y,I){let N=B(221);return N.operator=y,N.operand=i().parenthesizeOperandOfPrefixUnary(I),N.transformFlags|=tr(N.operand),(y===45||y===46)&&Re(N.operand)&&!tc(N.operand)&&!rv(N.operand)&&(N.transformFlags|=268435456),N}function Fd(y,I){return y.operand!==I?r(Jf(y.operator,I),y):y}function E_(y,I){let N=B(222);return N.operator=I,N.operand=i().parenthesizeOperandOfPostfixUnary(y),N.transformFlags|=tr(N.operand),Re(N.operand)&&!tc(N.operand)&&!rv(N.operand)&&(N.transformFlags|=268435456),N}function Y_(y,I){return y.operand!==I?r(E_(I,y.operator),y):y}function M(y,I,N){let te=q(223),Me=Wk(I),Pt=Me.kind;return te.left=i().parenthesizeLeftSideOfBinary(Pt,y),te.operatorToken=Me,te.right=i().parenthesizeRightSideOfBinary(Pt,te.left,N),te.transformFlags|=tr(te.left)|tr(te.operatorToken)|tr(te.right),Pt===60?te.transformFlags|=32:Pt===63?rs(te.left)?te.transformFlags|=5248|He(te.left):fu(te.left)&&(te.transformFlags|=5120|He(te.left)):Pt===42||Pt===67?te.transformFlags|=512:HI(Pt)&&(te.transformFlags|=16),Pt===101&&pi(te.left)&&(te.transformFlags|=536870912),te.jsDoc=void 0,te}function He(y){return IO(y)?65536:0}function Nt(y,I,N,te){return y.left!==I||y.operatorToken!==N||y.right!==te?r(M(I,N,te),y):y}function Pn(y,I,N,te,Me){let Pt=B(224);return Pt.condition=i().parenthesizeConditionOfConditionalExpression(y),Pt.questionToken=I??Le(57),Pt.whenTrue=i().parenthesizeBranchOfConditionalExpression(N),Pt.colonToken=te??Le(58),Pt.whenFalse=i().parenthesizeBranchOfConditionalExpression(Me),Pt.transformFlags|=tr(Pt.condition)|tr(Pt.questionToken)|tr(Pt.whenTrue)|tr(Pt.colonToken)|tr(Pt.whenFalse),Pt}function la(y,I,N,te,Me,Pt){return y.condition!==I||y.questionToken!==N||y.whenTrue!==te||y.colonToken!==Me||y.whenFalse!==Pt?r(Pn(I,N,te,Me,Pt),y):y}function oa(y,I){let N=B(225);return N.head=y,N.templateSpans=F(I),N.transformFlags|=tr(N.head)|fo(N.templateSpans)|1024,N}function be(y,I,N){return y.head!==I||y.templateSpans!==N?r(oa(I,N),y):y}function De(y,I,N,te=0){L.assert(!(te&-2049),\"Unsupported template flags.\");let Me;if(N!==void 0&&N!==I&&(Me=LRe(y,N),typeof Me==\"object\"))return L.fail(\"Invalid raw text\");if(I===void 0){if(Me===void 0)return L.fail(\"Arguments 'text' and 'rawText' may not both be undefined.\");I=Me}else Me!==void 0&&L.assert(I===Me,\"Expected argument 'text' to be the normalized (i.e. 'cooked') version of argument 'rawText'.\");return I}function mt(y){let I=1024;return y&&(I|=128),I}function St(y,I,N,te){let Me=Ne(y);return Me.text=I,Me.rawText=N,Me.templateFlags=te&2048,Me.transformFlags=mt(Me.templateFlags),Me}function Zt(y,I,N,te){let Me=q(y);return Me.text=I,Me.rawText=N,Me.templateFlags=te&2048,Me.transformFlags=mt(Me.templateFlags),Me}function rn(y,I,N,te){return y===14?Zt(y,I,N,te):St(y,I,N,te)}function sn(y,I,N){return y=De(15,y,I,N),rn(15,y,I,N)}function Dn(y,I,N){return y=De(15,y,I,N),rn(16,y,I,N)}function kr(y,I,N){return y=De(15,y,I,N),rn(17,y,I,N)}function ki(y,I,N){return y=De(15,y,I,N),Zt(14,y,I,N)}function Vn(y,I){L.assert(!y||!!I,\"A `YieldExpression` with an asteriskToken must have an expression.\");let N=B(226);return N.expression=I&&i().parenthesizeExpressionForDisallowedComma(I),N.asteriskToken=y,N.transformFlags|=tr(N.expression)|tr(N.asteriskToken)|1024|128|1048576,N}function $t(y,I,N){return y.expression!==N||y.asteriskToken!==I?r(Vn(I,N),y):y}function Xn(y){let I=B(227);return I.expression=i().parenthesizeExpressionForDisallowedComma(y),I.transformFlags|=tr(I.expression)|1024|32768,I}function ra(y,I){return y.expression!==I?r(Xn(I),y):y}function Is(y,I,N,te,Me){let Pt=q(228);return Pt.modifiers=oo(y),Pt.name=Zs(I),Pt.typeParameters=oo(N),Pt.heritageClauses=oo(te),Pt.members=F(Me),Pt.transformFlags|=fo(Pt.modifiers)|Gg(Pt.name)|fo(Pt.typeParameters)|fo(Pt.heritageClauses)|fo(Pt.members)|(Pt.typeParameters?1:0)|1024,Pt.jsDoc=void 0,Pt}function Mc(y,I,N,te,Me,Pt){return y.modifiers!==I||y.name!==N||y.typeParameters!==te||y.heritageClauses!==Me||y.members!==Pt?r(Is(I,N,te,Me,Pt),y):y}function mm(){return B(229)}function Hh(y,I){let N=B(230);return N.expression=i().parenthesizeLeftSideOfAccess(y,!1),N.typeArguments=I&&i().parenthesizeTypeArguments(I),N.transformFlags|=tr(N.expression)|fo(N.typeArguments)|1024,N}function T_(y,I,N){return y.expression!==I||y.typeArguments!==N?r(Hh(I,N),y):y}function Cb(y,I){let N=B(231);return N.expression=y,N.type=I,N.transformFlags|=tr(N.expression)|tr(N.type)|1,N}function mv(y,I,N){return y.expression!==I||y.type!==N?r(Cb(I,N),y):y}function gx(y){let I=B(232);return I.expression=i().parenthesizeLeftSideOfAccess(y,!1),I.transformFlags|=tr(I.expression)|1,I}function _1(y,I){return i6(y)?hv(y,I):y.expression!==I?r(gx(I),y):y}function yx(y,I){let N=B(235);return N.expression=y,N.type=I,N.transformFlags|=tr(N.expression)|tr(N.type)|1,N}function Wh(y,I,N){return y.expression!==I||y.type!==N?r(yx(I,N),y):y}function S_(y){let I=B(232);return I.flags|=32,I.expression=i().parenthesizeLeftSideOfAccess(y,!0),I.transformFlags|=tr(I.expression)|1,I}function hv(y,I){return L.assert(!!(y.flags&32),\"Cannot update a NonNullExpression using updateNonNullChain. Use updateNonNullExpression instead.\"),y.expression!==I?r(S_(I),y):y}function eh(y,I){let N=B(233);switch(N.keywordToken=y,N.name=I,N.transformFlags|=tr(N.name),y){case 103:N.transformFlags|=1024;break;case 100:N.transformFlags|=4;break;default:return L.assertNever(y)}return N.flowNode=void 0,N}function $_(y,I){return y.name!==I?r(eh(y.keywordToken,I),y):y}function gv(y,I){let N=B(236);return N.expression=y,N.literal=I,N.transformFlags|=tr(N.expression)|tr(N.literal)|1024,N}function lE(y,I,N){return y.expression!==I||y.literal!==N?r(gv(I,N),y):y}function Ib(){let y=B(237);return y.transformFlags|=1024,y}function zh(y,I){let N=B(238);return N.statements=F(y),N.multiLine=I,N.transformFlags|=fo(N.statements),N.jsDoc=void 0,N.locals=void 0,N.nextContainer=void 0,N}function p1(y,I){return y.statements!==I?r(zh(I,y.multiLine),y):y}function uE(y,I){let N=B(240);return N.modifiers=oo(y),N.declarationList=ba(I)?Ip(I):I,N.transformFlags|=fo(N.modifiers)|tr(N.declarationList),im(N.modifiers)&2&&(N.transformFlags=1),N.jsDoc=void 0,N.flowNode=void 0,N}function dE(y,I,N){return y.modifiers!==I||y.declarationList!==N?r(uE(I,N),y):y}function fE(){let y=B(239);return y.jsDoc=void 0,y}function yv(y){let I=B(241);return I.expression=i().parenthesizeExpressionOfExpressionStatement(y),I.transformFlags|=tr(I.expression),I.jsDoc=void 0,I.flowNode=void 0,I}function vx(y,I){return y.expression!==I?r(yv(I),y):y}function _E(y,I,N){let te=B(242);return te.expression=y,te.thenStatement=ad(I),te.elseStatement=ad(N),te.transformFlags|=tr(te.expression)|tr(te.thenStatement)|tr(te.elseStatement),te.jsDoc=void 0,te.flowNode=void 0,te}function pE(y,I,N,te){return y.expression!==I||y.thenStatement!==N||y.elseStatement!==te?r(_E(I,N,te),y):y}function vv(y,I){let N=B(243);return N.statement=ad(y),N.expression=I,N.transformFlags|=tr(N.statement)|tr(N.expression),N.jsDoc=void 0,N.flowNode=void 0,N}function Lb(y,I,N){return y.statement!==I||y.expression!==N?r(vv(I,N),y):y}function bv(y,I){let N=B(244);return N.expression=y,N.statement=ad(I),N.transformFlags|=tr(N.expression)|tr(N.statement),N.jsDoc=void 0,N.flowNode=void 0,N}function m1(y,I,N){return y.expression!==I||y.statement!==N?r(bv(I,N),y):y}function Jh(y,I,N,te){let Me=B(245);return Me.initializer=y,Me.condition=I,Me.incrementor=N,Me.statement=ad(te),Me.transformFlags|=tr(Me.initializer)|tr(Me.condition)|tr(Me.incrementor)|tr(Me.statement),Me.jsDoc=void 0,Me.locals=void 0,Me.nextContainer=void 0,Me.flowNode=void 0,Me}function Lo(y,I,N,te,Me){return y.initializer!==I||y.condition!==N||y.incrementor!==te||y.statement!==Me?r(Jh(I,N,te,Me),y):y}function mE(y,I,N){let te=B(246);return te.initializer=y,te.expression=I,te.statement=ad(N),te.transformFlags|=tr(te.initializer)|tr(te.expression)|tr(te.statement),te.jsDoc=void 0,te.locals=void 0,te.nextContainer=void 0,te.flowNode=void 0,te}function sC(y,I,N,te){return y.initializer!==I||y.expression!==N||y.statement!==te?r(mE(I,N,te),y):y}function Zg(y,I,N,te){let Me=B(247);return Me.awaitModifier=y,Me.initializer=I,Me.expression=i().parenthesizeExpressionForDisallowedComma(N),Me.statement=ad(te),Me.transformFlags|=tr(Me.awaitModifier)|tr(Me.initializer)|tr(Me.expression)|tr(Me.statement)|1024,y&&(Me.transformFlags|=128),Me.jsDoc=void 0,Me.locals=void 0,Me.nextContainer=void 0,Me.flowNode=void 0,Me}function Kh(y,I,N,te,Me){return y.awaitModifier!==I||y.initializer!==N||y.expression!==te||y.statement!==Me?r(Zg(I,N,te,Me),y):y}function hm(y){let I=B(248);return I.label=Zs(y),I.transformFlags|=tr(I.label)|4194304,I.jsDoc=void 0,I.flowNode=void 0,I}function x_(y,I){return y.label!==I?r(hm(I),y):y}function Zu(y){let I=B(249);return I.label=Zs(y),I.transformFlags|=tr(I.label)|4194304,I.jsDoc=void 0,I.flowNode=void 0,I}function ed(y,I){return y.label!==I?r(Zu(I),y):y}function td(y){let I=B(250);return I.expression=y,I.transformFlags|=tr(I.expression)|128|4194304,I.jsDoc=void 0,I.flowNode=void 0,I}function kb(y,I){return y.expression!==I?r(td(I),y):y}function Db(y,I){let N=B(251);return N.expression=y,N.statement=ad(I),N.transformFlags|=tr(N.expression)|tr(N.statement),N.jsDoc=void 0,N.flowNode=void 0,N}function bx(y,I,N){return y.expression!==I||y.statement!==N?r(Db(I,N),y):y}function wb(y,I){let N=B(252);return N.expression=i().parenthesizeExpressionForDisallowedComma(y),N.caseBlock=I,N.transformFlags|=tr(N.expression)|tr(N.caseBlock),N.jsDoc=void 0,N.flowNode=void 0,N.possiblyExhaustive=!1,N}function qh(y,I,N){return y.expression!==I||y.caseBlock!==N?r(wb(I,N),y):y}function Rb(y,I){let N=B(253);return N.label=Zs(y),N.statement=ad(I),N.transformFlags|=tr(N.label)|tr(N.statement),N.jsDoc=void 0,N.flowNode=void 0,N}function h1(y,I,N){return y.label!==I||y.statement!==N?r(Rb(I,N),y):y}function Ob(y){let I=B(254);return I.expression=y,I.transformFlags|=tr(I.expression),I.jsDoc=void 0,I.flowNode=void 0,I}function cC(y,I){return y.expression!==I?r(Ob(I),y):y}function Ex(y,I,N){let te=B(255);return te.tryBlock=y,te.catchClause=I,te.finallyBlock=N,te.transformFlags|=tr(te.tryBlock)|tr(te.catchClause)|tr(te.finallyBlock),te.jsDoc=void 0,te.flowNode=void 0,te}function Ev(y,I,N,te){return y.tryBlock!==I||y.catchClause!==N||y.finallyBlock!==te?r(Ex(I,N,te),y):y}function hE(){let y=B(256);return y.jsDoc=void 0,y.flowNode=void 0,y}function Fe(y,I,N,te){var Me;let Pt=q(257);return Pt.name=Zs(y),Pt.exclamationToken=I,Pt.type=N,Pt.initializer=gy(te),Pt.transformFlags|=Gg(Pt.name)|tr(Pt.initializer)|(((Me=Pt.exclamationToken)!=null?Me:Pt.type)?1:0),Pt.jsDoc=void 0,Pt}function ey(y,I,N,te,Me){return y.name!==I||y.type!==te||y.exclamationToken!==N||y.initializer!==Me?r(Fe(I,N,te,Me),y):y}function Ip(y,I=0){let N=B(258);return N.flags|=I&3,N.declarations=F(y),N.transformFlags|=fo(N.declarations)|4194304,I&3&&(N.transformFlags|=263168),N}function Tv(y,I){return y.declarations!==I?r(Ip(I,y.flags),y):y}function Nb(y,I,N,te,Me,Pt,Tr){let Fi=q(259);if(Fi.modifiers=oo(y),Fi.asteriskToken=I,Fi.name=Zs(N),Fi.typeParameters=oo(te),Fi.parameters=F(Me),Fi.type=Pt,Fi.body=Tr,!Fi.body||im(Fi.modifiers)&2)Fi.transformFlags=1;else{let Da=im(Fi.modifiers)&512,Vd=!!Fi.asteriskToken,lg=Da&&Vd;Fi.transformFlags=fo(Fi.modifiers)|tr(Fi.asteriskToken)|Gg(Fi.name)|fo(Fi.typeParameters)|fo(Fi.parameters)|tr(Fi.type)|tr(Fi.body)&-67108865|(lg?128:Da?256:Vd?2048:0)|(Fi.typeParameters||Fi.type?1:0)|4194304}return Fi.typeArguments=void 0,Fi.jsDoc=void 0,Fi.locals=void 0,Fi.nextContainer=void 0,Fi.endFlowNode=void 0,Fi.returnFlowNode=void 0,Fi}function Sv(y,I,N,te,Me,Pt,Tr,Fi){return y.modifiers!==I||y.asteriskToken!==N||y.name!==te||y.typeParameters!==Me||y.parameters!==Pt||y.type!==Tr||y.body!==Fi?Xh(Nb(I,N,te,Me,Pt,Tr,Fi),y):y}function Xh(y,I){return y!==I&&y.modifiers===I.modifiers&&(y.modifiers=I.modifiers),W(y,I)}function g1(y,I,N,te,Me){let Pt=q(260);return Pt.modifiers=oo(y),Pt.name=Zs(I),Pt.typeParameters=oo(N),Pt.heritageClauses=oo(te),Pt.members=F(Me),im(Pt.modifiers)&2?Pt.transformFlags=1:(Pt.transformFlags|=fo(Pt.modifiers)|Gg(Pt.name)|fo(Pt.typeParameters)|fo(Pt.heritageClauses)|fo(Pt.members)|(Pt.typeParameters?1:0)|1024,Pt.transformFlags&8192&&(Pt.transformFlags|=1)),Pt.jsDoc=void 0,Pt}function wo(y,I,N,te,Me,Pt){return y.modifiers!==I||y.name!==N||y.typeParameters!==te||y.heritageClauses!==Me||y.members!==Pt?r(g1(I,N,te,Me,Pt),y):y}function A_(y,I,N,te,Me){let Pt=q(261);return Pt.modifiers=oo(y),Pt.name=Zs(I),Pt.typeParameters=oo(N),Pt.heritageClauses=oo(te),Pt.members=F(Me),Pt.transformFlags=1,Pt.jsDoc=void 0,Pt}function gE(y,I,N,te,Me,Pt){return y.modifiers!==I||y.name!==N||y.typeParameters!==te||y.heritageClauses!==Me||y.members!==Pt?r(A_(I,N,te,Me,Pt),y):y}function Kc(y,I,N,te){let Me=q(262);return Me.modifiers=oo(y),Me.name=Zs(I),Me.typeParameters=oo(N),Me.type=te,Me.transformFlags=1,Me.jsDoc=void 0,Me.locals=void 0,Me.nextContainer=void 0,Me}function th(y,I,N,te,Me){return y.modifiers!==I||y.name!==N||y.typeParameters!==te||y.type!==Me?r(Kc(I,N,te,Me),y):y}function Pb(y,I,N){let te=q(263);return te.modifiers=oo(y),te.name=Zs(I),te.members=F(N),te.transformFlags|=fo(te.modifiers)|tr(te.name)|fo(te.members)|1,te.transformFlags&=-67108865,te.jsDoc=void 0,te}function C_(y,I,N,te){return y.modifiers!==I||y.name!==N||y.members!==te?r(Pb(I,N,te),y):y}function Mb(y,I,N,te=0){let Me=q(264);return Me.modifiers=oo(y),Me.flags|=te&1044,Me.name=I,Me.body=N,im(Me.modifiers)&2?Me.transformFlags=1:Me.transformFlags|=fo(Me.modifiers)|tr(Me.name)|tr(Me.body)|1,Me.transformFlags&=-67108865,Me.jsDoc=void 0,Me.locals=void 0,Me.nextContainer=void 0,Me}function Ml(y,I,N,te){return y.modifiers!==I||y.name!==N||y.body!==te?r(Mb(I,N,te,y.flags),y):y}function Yh(y){let I=B(265);return I.statements=F(y),I.transformFlags|=fo(I.statements),I.jsDoc=void 0,I}function ll(y,I){return y.statements!==I?r(Yh(I),y):y}function y1(y){let I=B(266);return I.clauses=F(y),I.transformFlags|=fo(I.clauses),I.locals=void 0,I.nextContainer=void 0,I}function lC(y,I){return y.clauses!==I?r(y1(I),y):y}function Ai(y){let I=q(267);return I.name=Zs(y),I.transformFlags|=fL(I.name)|1,I.modifiers=void 0,I.jsDoc=void 0,I}function Rr(y,I){return y.name!==I?gm(Ai(I),y):y}function gm(y,I){return y!==I&&(y.modifiers=I.modifiers),r(y,I)}function yd(y,I,N,te){let Me=q(268);return Me.modifiers=oo(y),Me.name=Zs(N),Me.isTypeOnly=I,Me.moduleReference=te,Me.transformFlags|=fo(Me.modifiers)|fL(Me.name)|tr(Me.moduleReference),um(Me.moduleReference)||(Me.transformFlags|=1),Me.transformFlags&=-67108865,Me.jsDoc=void 0,Me}function yE(y,I,N,te,Me){return y.modifiers!==I||y.isTypeOnly!==N||y.name!==te||y.moduleReference!==Me?r(yd(I,N,te,Me),y):y}function $h(y,I,N,te){let Me=B(269);return Me.modifiers=oo(y),Me.importClause=I,Me.moduleSpecifier=N,Me.assertClause=te,Me.transformFlags|=tr(Me.importClause)|tr(Me.moduleSpecifier),Me.transformFlags&=-67108865,Me.jsDoc=void 0,Me}function nh(y,I,N,te,Me){return y.modifiers!==I||y.importClause!==N||y.moduleSpecifier!==te||y.assertClause!==Me?r($h(I,N,te,Me),y):y}function ym(y,I,N){let te=q(270);return te.isTypeOnly=y,te.name=I,te.namedBindings=N,te.transformFlags|=tr(te.name)|tr(te.namedBindings),y&&(te.transformFlags|=1),te.transformFlags&=-67108865,te}function zs(y,I,N,te){return y.isTypeOnly!==I||y.name!==N||y.namedBindings!==te?r(ym(I,N,te),y):y}function Fb(y,I){let N=B(296);return N.elements=F(y),N.multiLine=I,N.transformFlags|=4,N}function v1(y,I,N){return y.elements!==I||y.multiLine!==N?r(Fb(I,N),y):y}function Gb(y,I){let N=B(297);return N.name=y,N.value=I,N.transformFlags|=4,N}function b1(y,I,N){return y.name!==I||y.value!==N?r(Gb(I,N),y):y}function Cf(y,I){let N=B(298);return N.assertClause=y,N.multiLine=I,N}function Tx(y,I,N){return y.assertClause!==I||y.multiLine!==N?r(Cf(I,N),y):y}function Sx(y){let I=q(271);return I.name=y,I.transformFlags|=tr(I.name),I.transformFlags&=-67108865,I}function xv(y,I){return y.name!==I?r(Sx(I),y):y}function E1(y){let I=q(277);return I.name=y,I.transformFlags|=tr(I.name)|4,I.transformFlags&=-67108865,I}function T1(y,I){return y.name!==I?r(E1(I),y):y}function xx(y){let I=B(272);return I.elements=F(y),I.transformFlags|=fo(I.elements),I.transformFlags&=-67108865,I}function Bb(y,I){return y.elements!==I?r(xx(I),y):y}function S1(y,I,N){let te=q(273);return te.isTypeOnly=y,te.propertyName=I,te.name=N,te.transformFlags|=tr(te.propertyName)|tr(te.name),te.transformFlags&=-67108865,te}function rf(y,I,N,te){return y.isTypeOnly!==I||y.propertyName!==N||y.name!==te?r(S1(I,N,te),y):y}function Qh(y,I,N){let te=q(274);return te.modifiers=oo(y),te.isExportEquals=I,te.expression=I?i().parenthesizeRightSideOfBinary(63,void 0,N):i().parenthesizeExpressionOfExportDefault(N),te.transformFlags|=fo(te.modifiers)|tr(te.expression),te.transformFlags&=-67108865,te.jsDoc=void 0,te}function Q_(y,I,N){return y.modifiers!==I||y.expression!==N?r(Qh(I,y.isExportEquals,N),y):y}function I_(y,I,N,te,Me){let Pt=q(275);return Pt.modifiers=oo(y),Pt.isTypeOnly=I,Pt.exportClause=N,Pt.moduleSpecifier=te,Pt.assertClause=Me,Pt.transformFlags|=fo(Pt.modifiers)|tr(Pt.exportClause)|tr(Pt.moduleSpecifier),Pt.transformFlags&=-67108865,Pt.jsDoc=void 0,Pt}function Ax(y,I,N,te,Me,Pt){return y.modifiers!==I||y.isTypeOnly!==N||y.exportClause!==te||y.moduleSpecifier!==Me||y.assertClause!==Pt?Ub(I_(I,N,te,Me,Pt),y):y}function Ub(y,I){return y!==I&&y.modifiers===I.modifiers&&(y.modifiers=I.modifiers),r(y,I)}function Lp(y){let I=B(276);return I.elements=F(y),I.transformFlags|=fo(I.elements),I.transformFlags&=-67108865,I}function x1(y,I){return y.elements!==I?r(Lp(I),y):y}function Uu(y,I,N){let te=B(278);return te.isTypeOnly=y,te.propertyName=Zs(I),te.name=Zs(N),te.transformFlags|=tr(te.propertyName)|tr(te.name),te.transformFlags&=-67108865,te.jsDoc=void 0,te}function Zh(y,I,N,te){return y.isTypeOnly!==I||y.propertyName!==N||y.name!==te?r(Uu(I,N,te),y):y}function kp(){let y=q(279);return y.jsDoc=void 0,y}function Dp(y){let I=B(280);return I.expression=y,I.transformFlags|=tr(I.expression),I.transformFlags&=-67108865,I}function eg(y,I){return y.expression!==I?r(Dp(I),y):y}function vE(y){return B(y)}function A1(y,I,N=!1){let te=ty(y,N?I&&i().parenthesizeNonArrayTypeOfPostfixType(I):I);return te.postfix=N,te}function ty(y,I){let N=B(y);return N.type=I,N}function bE(y,I,N){return I.type!==N?r(A1(y,N,I.postfix),I):I}function cs(y,I,N){return I.type!==N?r(ty(y,N),I):I}function ny(y,I){let N=q(320);return N.parameters=oo(y),N.type=I,N.transformFlags=fo(N.parameters)|(N.type?1:0),N.jsDoc=void 0,N.locals=void 0,N.nextContainer=void 0,N.typeArguments=void 0,N}function Cx(y,I,N){return y.parameters!==I||y.type!==N?r(ny(I,N),y):y}function Vb(y,I=!1){let N=q(325);return N.jsDocPropertyTags=oo(y),N.isArrayType=I,N}function jb(y,I,N){return y.jsDocPropertyTags!==I||y.isArrayType!==N?r(Vb(I,N),y):y}function Ix(y){let I=B(312);return I.type=y,I}function uC(y,I){return y.type!==I?r(Ix(I),y):y}function Lx(y,I,N){let te=q(326);return te.typeParameters=oo(y),te.parameters=F(I),te.type=N,te.jsDoc=void 0,te.locals=void 0,te.nextContainer=void 0,te}function Qn(y,I,N,te){return y.typeParameters!==I||y.parameters!==N||y.type!==te?r(Lx(I,N,te),y):y}function lc(y){let I=w4(y.kind);return y.tagName.escapedText===Bs(I)?y.tagName:_e(I)}function zi(y,I,N){let te=B(y);return te.tagName=I,te.comment=N,te}function af(y,I,N){let te=q(y);return te.tagName=I,te.comment=N,te}function Av(y,I,N,te){let Me=zi(348,y??_e(\"template\"),te);return Me.constraint=I,Me.typeParameters=F(N),Me}function vm(y,I=lc(y),N,te,Me){return y.tagName!==I||y.constraint!==N||y.typeParameters!==te||y.comment!==Me?r(Av(I,N,te,Me),y):y}function Wn(y,I,N,te){let Me=af(349,y??_e(\"typedef\"),te);return Me.typeExpression=I,Me.fullName=N,Me.name=iJ(N),Me.locals=void 0,Me.nextContainer=void 0,Me}function kx(y,I=lc(y),N,te,Me){return y.tagName!==I||y.typeExpression!==N||y.fullName!==te||y.comment!==Me?r(Wn(I,N,te,Me),y):y}function ry(y,I,N,te,Me,Pt){let Tr=af(344,y??_e(\"param\"),Pt);return Tr.typeExpression=te,Tr.name=I,Tr.isNameFirst=!!Me,Tr.isBracketed=N,Tr}function nl(y,I=lc(y),N,te,Me,Pt,Tr){return y.tagName!==I||y.name!==N||y.isBracketed!==te||y.typeExpression!==Me||y.isNameFirst!==Pt||y.comment!==Tr?r(ry(I,N,te,Me,Pt,Tr),y):y}function Kf(y,I,N,te,Me,Pt){let Tr=af(351,y??_e(\"prop\"),Pt);return Tr.typeExpression=te,Tr.name=I,Tr.isNameFirst=!!Me,Tr.isBracketed=N,Tr}function Z_(y,I=lc(y),N,te,Me,Pt,Tr){return y.tagName!==I||y.name!==N||y.isBracketed!==te||y.typeExpression!==Me||y.isNameFirst!==Pt||y.comment!==Tr?r(Kf(I,N,te,Me,Pt,Tr),y):y}function iy(y,I,N,te){let Me=af(341,y??_e(\"callback\"),te);return Me.typeExpression=I,Me.fullName=N,Me.name=iJ(N),Me.locals=void 0,Me.nextContainer=void 0,Me}function EE(y,I=lc(y),N,te,Me){return y.tagName!==I||y.typeExpression!==N||y.fullName!==te||y.comment!==Me?r(iy(I,N,te,Me),y):y}function L_(y,I,N){let te=zi(342,y??_e(\"overload\"),N);return te.typeExpression=I,te}function ay(y,I=lc(y),N,te){return y.tagName!==I||y.typeExpression!==N||y.comment!==te?r(L_(I,N,te),y):y}function Ac(y,I,N){let te=zi(331,y??_e(\"augments\"),N);return te.class=I,te}function wc(y,I=lc(y),N,te){return y.tagName!==I||y.class!==N||y.comment!==te?r(Ac(I,N,te),y):y}function tg(y,I,N){let te=zi(332,y??_e(\"implements\"),N);return te.class=I,te}function Fl(y,I,N){let te=zi(350,y??_e(\"see\"),N);return te.name=I,te}function qf(y,I,N,te){return y.tagName!==I||y.name!==N||y.comment!==te?r(Fl(I,N,te),y):y}function bm(y){let I=B(313);return I.name=y,I}function nd(y,I){return y.name!==I?r(bm(I),y):y}function TE(y,I){let N=B(314);return N.left=y,N.right=I,N.transformFlags|=tr(N.left)|tr(N.right),N}function Hb(y,I,N){return y.left!==I||y.right!==N?r(TE(I,N),y):y}function Wb(y,I){let N=B(327);return N.name=y,N.text=I,N}function ep(y,I,N){return y.name!==I?r(Wb(I,N),y):y}function rh(y,I){let N=B(328);return N.name=y,N.text=I,N}function SE(y,I,N){return y.name!==I?r(rh(I,N),y):y}function oy(y,I){let N=B(329);return N.name=y,N.text=I,N}function uc(y,I,N){return y.name!==I?r(oy(I,N),y):y}function ng(y,I=lc(y),N,te){return y.tagName!==I||y.class!==N||y.comment!==te?r(tg(I,N,te),y):y}function ih(y,I,N){return zi(y,I??_e(w4(y)),N)}function Cv(y,I,N=lc(I),te){return I.tagName!==N||I.comment!==te?r(ih(y,N,te),I):I}function Iv(y,I,N,te){let Me=zi(y,I??_e(w4(y)),te);return Me.typeExpression=N,Me}function Gl(y,I,N=lc(I),te,Me){return I.tagName!==N||I.typeExpression!==te||I.comment!==Me?r(Iv(y,N,te,Me),I):I}function ah(y,I){return zi(330,y,I)}function qc(y,I,N){return y.tagName!==I||y.comment!==N?r(ah(I,N),y):y}function xE(y,I,N){let te=af(343,y??_e(w4(343)),N);return te.typeExpression=I,te.locals=void 0,te.nextContainer=void 0,te}function oh(y,I=lc(y),N,te){return y.tagName!==I||y.typeExpression!==N||y.comment!==te?r(xE(I,N,te),y):y}function zb(y){let I=B(324);return I.text=y,I}function Vu(y,I){return y.text!==I?r(zb(I),y):y}function Em(y,I){let N=B(323);return N.comment=y,N.tags=oo(I),N}function Jb(y,I,N){return y.comment!==I||y.tags!==N?r(Em(I,N),y):y}function Lv(y,I,N){let te=B(281);return te.openingElement=y,te.children=F(I),te.closingElement=N,te.transformFlags|=tr(te.openingElement)|fo(te.children)|tr(te.closingElement)|2,te}function AE(y,I,N,te){return y.openingElement!==I||y.children!==N||y.closingElement!==te?r(Lv(I,N,te),y):y}function sy(y,I,N){let te=B(282);return te.tagName=y,te.typeArguments=oo(I),te.attributes=N,te.transformFlags|=tr(te.tagName)|fo(te.typeArguments)|tr(te.attributes)|2,te.typeArguments&&(te.transformFlags|=1),te}function C1(y,I,N,te){return y.tagName!==I||y.typeArguments!==N||y.attributes!==te?r(sy(I,N,te),y):y}function kv(y,I,N){let te=B(283);return te.tagName=y,te.typeArguments=oo(I),te.attributes=N,te.transformFlags|=tr(te.tagName)|fo(te.typeArguments)|tr(te.attributes)|2,I&&(te.transformFlags|=1),te}function rg(y,I,N,te){return y.tagName!==I||y.typeArguments!==N||y.attributes!==te?r(kv(I,N,te),y):y}function of(y){let I=B(284);return I.tagName=y,I.transformFlags|=tr(I.tagName)|2,I}function CE(y,I){return y.tagName!==I?r(of(I),y):y}function Gd(y,I,N){let te=B(285);return te.openingFragment=y,te.children=F(I),te.closingFragment=N,te.transformFlags|=tr(te.openingFragment)|fo(te.children)|tr(te.closingFragment)|2,te}function sh(y,I,N,te){return y.openingFragment!==I||y.children!==N||y.closingFragment!==te?r(Gd(I,N,te),y):y}function Dv(y,I){let N=B(11);return N.text=y,N.containsOnlyTriviaWhiteSpaces=!!I,N.transformFlags|=2,N}function Dx(y,I,N){return y.text!==I||y.containsOnlyTriviaWhiteSpaces!==N?r(Dv(I,N),y):y}function No(){let y=B(286);return y.transformFlags|=2,y}function fr(){let y=B(287);return y.transformFlags|=2,y}function vd(y,I){let N=q(288);return N.name=y,N.initializer=I,N.transformFlags|=tr(N.name)|tr(N.initializer)|2,N}function ju(y,I,N){return y.name!==I||y.initializer!==N?r(vd(I,N),y):y}function I1(y){let I=q(289);return I.properties=F(y),I.transformFlags|=fo(I.properties)|2,I}function IE(y,I){return y.properties!==I?r(I1(I),y):y}function cy(y){let I=B(290);return I.expression=y,I.transformFlags|=tr(I.expression)|2,I}function wx(y,I){return y.expression!==I?r(cy(I),y):y}function ly(y,I){let N=B(291);return N.dotDotDotToken=y,N.expression=I,N.transformFlags|=tr(N.dotDotDotToken)|tr(N.expression)|2,N}function wp(y,I){return y.expression!==I?r(ly(y.dotDotDotToken,I),y):y}function tp(y,I){let N=B(292);return N.expression=i().parenthesizeExpressionForDisallowedComma(y),N.statements=F(I),N.transformFlags|=tr(N.expression)|fo(N.statements),N.jsDoc=void 0,N}function ig(y,I,N){return y.expression!==I||y.statements!==N?r(tp(I,N),y):y}function wv(y){let I=B(293);return I.statements=F(y),I.transformFlags=fo(I.statements),I}function ch(y,I){return y.statements!==I?r(wv(I),y):y}function Rp(y,I){let N=B(294);switch(N.token=y,N.types=F(I),N.transformFlags|=fo(N.types),y){case 94:N.transformFlags|=1024;break;case 117:N.transformFlags|=1;break;default:return L.assertNever(y)}return N}function L1(y,I){return y.types!==I?r(Rp(y.token,I),y):y}function Cc(y,I){let N=B(295);return N.variableDeclaration=zk(y),N.block=I,N.transformFlags|=tr(N.variableDeclaration)|tr(N.block)|(y?0:64),N.locals=void 0,N.nextContainer=void 0,N}function Bd(y,I,N){return y.variableDeclaration!==I||y.block!==N?r(Cc(I,N),y):y}function Tm(y,I){let N=q(299);return N.name=Zs(y),N.initializer=i().parenthesizeExpressionForDisallowedComma(I),N.transformFlags|=Gg(N.name)|tr(N.initializer),N.modifiers=void 0,N.questionToken=void 0,N.exclamationToken=void 0,N.jsDoc=void 0,N}function rd(y,I,N){return y.name!==I||y.initializer!==N?LE(Tm(I,N),y):y}function LE(y,I){return y!==I&&(y.modifiers=I.modifiers,y.questionToken=I.questionToken,y.exclamationToken=I.exclamationToken),r(y,I)}function uy(y,I){let N=q(300);return N.name=Zs(y),N.objectAssignmentInitializer=I&&i().parenthesizeExpressionForDisallowedComma(I),N.transformFlags|=fL(N.name)|tr(N.objectAssignmentInitializer)|1024,N.equalsToken=void 0,N.modifiers=void 0,N.questionToken=void 0,N.exclamationToken=void 0,N.jsDoc=void 0,N}function ag(y,I,N){return y.name!==I||y.objectAssignmentInitializer!==N?Rx(uy(I,N),y):y}function Rx(y,I){return y!==I&&(y.modifiers=I.modifiers,y.questionToken=I.questionToken,y.exclamationToken=I.exclamationToken,y.equalsToken=I.equalsToken),r(y,I)}function sf(y){let I=q(301);return I.expression=i().parenthesizeExpressionForDisallowedComma(y),I.transformFlags|=tr(I.expression)|128|65536,I.jsDoc=void 0,I}function ls(y,I){return y.expression!==I?r(sf(I),y):y}function kE(y,I){let N=q(302);return N.name=Zs(y),N.initializer=I&&i().parenthesizeExpressionForDisallowedComma(I),N.transformFlags|=tr(N.name)|tr(N.initializer)|1,N.jsDoc=void 0,N}function DE(y,I,N){return y.name!==I||y.initializer!==N?r(kE(I,N),y):y}function og(y,I,N){let te=t.createBaseSourceFileNode(308);return te.statements=F(y),te.endOfFileToken=I,te.flags|=N,te.text=\"\",te.fileName=\"\",te.path=\"\",te.resolvedPath=\"\",te.originalFileName=\"\",te.languageVersion=0,te.languageVariant=0,te.scriptKind=0,te.isDeclarationFile=!1,te.hasNoDefaultLib=!1,te.transformFlags|=fo(te.statements)|tr(te.endOfFileToken),te.locals=void 0,te.nextContainer=void 0,te.endFlowNode=void 0,te.nodeCount=0,te.identifierCount=0,te.symbolCount=0,te.parseDiagnostics=void 0,te.bindDiagnostics=void 0,te.bindSuggestionDiagnostics=void 0,te.lineMap=void 0,te.externalModuleIndicator=void 0,te.setExternalModuleIndicator=void 0,te.pragmas=void 0,te.checkJsDirective=void 0,te.referencedFiles=void 0,te.typeReferenceDirectives=void 0,te.libReferenceDirectives=void 0,te.amdDependencies=void 0,te.commentDirectives=void 0,te.identifiers=void 0,te.packageJsonLocations=void 0,te.packageJsonScope=void 0,te.imports=void 0,te.moduleAugmentations=void 0,te.ambientModuleNames=void 0,te.resolvedModules=void 0,te.classifiableNames=void 0,te.impliedNodeFormat=void 0,te}function Rv(y){let I=Object.create(y.redirectTarget);return Object.defineProperties(I,{id:{get(){return this.redirectInfo.redirectTarget.id},set(N){this.redirectInfo.redirectTarget.id=N}},symbol:{get(){return this.redirectInfo.redirectTarget.symbol},set(N){this.redirectInfo.redirectTarget.symbol=N}}}),I.redirectInfo=y,I}function k1(y){let I=Rv(y.redirectInfo);return I.flags|=y.flags&-9,I.fileName=y.fileName,I.path=y.path,I.resolvedPath=y.resolvedPath,I.originalFileName=y.originalFileName,I.packageJsonLocations=y.packageJsonLocations,I.packageJsonScope=y.packageJsonScope,I.emitNode=void 0,I}function wE(y){let I=t.createBaseSourceFileNode(308);I.flags|=y.flags&-9;for(let N in y)if(!(fs(I,N)||!fs(y,N))){if(N===\"emitNode\"){I.emitNode=void 0;continue}I[N]=y[N]}return I}function RE(y){let I=y.redirectInfo?k1(y):wE(y);return Ir(I,y),I}function OE(y,I,N,te,Me,Pt,Tr){let Fi=RE(y);return Fi.statements=F(I),Fi.isDeclarationFile=N,Fi.referencedFiles=te,Fi.typeReferenceDirectives=Me,Fi.hasNoDefaultLib=Pt,Fi.libReferenceDirectives=Tr,Fi.transformFlags=fo(Fi.statements)|tr(Fi.endOfFileToken),Fi}function NE(y,I,N=y.isDeclarationFile,te=y.referencedFiles,Me=y.typeReferenceDirectives,Pt=y.hasNoDefaultLib,Tr=y.libReferenceDirectives){return y.statements!==I||y.isDeclarationFile!==N||y.referencedFiles!==te||y.typeReferenceDirectives!==Me||y.hasNoDefaultLib!==Pt||y.libReferenceDirectives!==Tr?r(OE(y,I,N,te,Me,Pt,Tr),y):y}function PE(y,I=Je){let N=B(309);return N.prepends=I,N.sourceFiles=y,N.syntheticFileReferences=void 0,N.syntheticTypeReferences=void 0,N.syntheticLibReferences=void 0,N.hasNoDefaultLib=void 0,N}function dy(y,I,N=Je){return y.sourceFiles!==I||y.prepends!==N?r(PE(I,N),y):y}function bd(y,I,N){let te=B(310);return te.prologues=y,te.syntheticReferences=I,te.texts=N,te.fileName=\"\",te.text=\"\",te.referencedFiles=Je,te.libReferenceDirectives=Je,te.getLineAndCharacterOfPosition=Me=>Gs(te,Me),te}function lh(y,I){let N=B(y);return N.data=I,N}function dC(y){return lh(303,y)}function sg(y,I){let N=lh(304,y);return N.texts=I,N}function Ox(y,I){return lh(I?306:305,y)}function Nx(y){let I=B(307);return I.data=y.data,I.section=y,I}function E(){let y=B(311);return y.javascriptText=\"\",y.declarationText=\"\",y}function ne(y,I=!1,N){let te=B(234);return te.type=y,te.isSpread=I,te.tupleNameSource=N,te}function Ee(y){let I=B(354);return I._children=y,I}function Wt(y){let I=B(355);return I.original=y,it(I,y),I}function lr(y,I){let N=B(356);return N.expression=y,N.original=I,N.transformFlags|=tr(N.expression)|1,it(N,I),N}function ci(y,I){return y.expression!==I?r(lr(I,y.original),y):y}function qr(y){if(ws(y)&&!dI(y)&&!y.original&&!y.emitNode&&!y.id){if(SL(y))return y.elements;if(ar(y)&&Cue(y.operatorToken))return[y.left,y.right]}return y}function Ti(y){let I=B(357);return I.elements=F(lae(y,qr)),I.transformFlags|=fo(I.elements),I}function Wa(y,I){return y.elements!==I?r(Ti(I),y):y}function kl(y){let I=B(359);return I.emitNode={},I.original=y,I}function Ed(y){let I=B(358);return I.emitNode={},I.original=y,I}function Ud(y,I){let N=B(360);return N.expression=y,N.thisArg=I,N.transformFlags|=tr(N.expression)|tr(N.thisArg),N}function fy(y,I,N){return y.expression!==I||y.thisArg!==N?r(Ud(I,N),y):y}function Td(y){let I=re(y.escapedText);return I.flags|=y.flags&-9,I.transformFlags=y.transformFlags,Ir(I,y),iO(I,{...y.emitNode.autoGenerate}),I}function Ov(y){let I=re(y.escapedText);I.flags|=y.flags&-9,I.jsDoc=y.jsDoc,I.flowNode=y.flowNode,I.symbol=y.symbol,I.transformFlags=y.transformFlags,Ir(I,y);let N=NT(y);return N&&Ug(I,N),I}function Nv(y){let I=ke(y.escapedText);return I.flags|=y.flags&-9,I.transformFlags=y.transformFlags,Ir(I,y),iO(I,{...y.emitNode.autoGenerate}),I}function _y(y){let I=ke(y.escapedText);return I.flags|=y.flags&-9,I.transformFlags=y.transformFlags,Ir(I,y),I}function Xf(y){if(y===void 0)return y;if(Li(y))return RE(y);if(tc(y))return Td(y);if(Re(y))return Ov(y);if(tS(y))return Nv(y);if(pi(y))return _y(y);let I=Iw(y.kind)?t.createBaseNode(y.kind):t.createBaseTokenNode(y.kind);I.flags|=y.flags&-9,I.transformFlags=y.transformFlags,Ir(I,y);for(let N in y)fs(I,N)||!fs(y,N)||(I[N]=y[N]);return I}function ME(y,I,N){return bn(Ea(void 0,void 0,void 0,void 0,I?[I]:[],void 0,zh(y,!0)),void 0,N?[N]:[])}function cf(y,I,N){return bn(Qo(void 0,void 0,I?[I]:[],void 0,void 0,zh(y,!0)),void 0,N?[N]:[])}function Sm(){return Zl(Y(\"0\"))}function py(y){return Qh(void 0,!1,y)}function If(y){return I_(void 0,!1,Lp([Uu(!1,void 0,y)]))}function FE(y,I){return I===\"undefined\"?P.createStrictEquality(y,Sm()):P.createStrictEquality(Dc(y),$(I))}function Pv(y,I,N){return dT(y)?io($o(y,void 0,I),void 0,void 0,N):bn(Uc(y,I),void 0,N)}function Vc(y,I,N){return Pv(y,\"bind\",[I,...N])}function KP(y,I,N){return Pv(y,\"call\",[I,...N])}function Zo(y,I,N){return Pv(y,\"apply\",[I,N])}function Ro(y,I,N){return Pv(_e(y),I,N)}function Px(y,I){return Pv(y,\"slice\",I===void 0?[]:[Fv(I)])}function Mx(y,I){return Pv(y,\"concat\",I)}function V(y,I,N){return Ro(\"Object\",\"defineProperty\",[y,Fv(I),N])}function me(y,I){return Ro(\"Object\",\"getOwnPropertyDescriptor\",[y,Fv(I)])}function Ue(y,I,N){return Ro(\"Reflect\",\"get\",N?[y,I,N]:[y,I])}function ut(y,I,N,te){return Ro(\"Reflect\",\"set\",te?[y,I,N,te]:[y,I,N])}function Lt(y,I,N){return N?(y.push(Tm(I,N)),!0):!1}function dn(y,I){let N=[];Lt(N,\"enumerable\",Fv(y.enumerable)),Lt(N,\"configurable\",Fv(y.configurable));let te=Lt(N,\"writable\",Fv(y.writable));te=Lt(N,\"value\",y.value)||te;let Me=Lt(N,\"get\",y.get);return Me=Lt(N,\"set\",y.set)||Me,L.assert(!(te&&Me),\"A PropertyDescriptor may not be both an accessor descriptor and a data descriptor.\"),vo(N,!I)}function Er(y,I){switch(y.kind){case 214:return gi(y,I);case 213:return mr(y,y.type,I);case 231:return mv(y,I,y.type);case 235:return Wh(y,I,y.type);case 232:return _1(y,I);case 356:return ci(y,I)}}function ii(y){return ud(y)&&ws(y)&&ws(pb(y))&&ws(sm(y))&&!vt(l2(y))&&!vt(rO(y))}function li(y,I,N=15){return y&&S3(y,N)&&!ii(y)?Er(y,li(y.expression,I)):I}function di(y,I,N){if(!I)return y;let te=h1(I,I.label,J0(I.statement)?di(y,I.statement):y);return N&&N(I),te}function ma(y,I){let N=vs(y);switch(N.kind){case 79:return I;case 108:case 8:case 9:case 10:return!1;case 206:return N.elements.length!==0;case 207:return N.properties.length>0;default:return!0}}function is(y,I,N,te=!1){let Me=ql(y,15),Pt,Tr;return Pu(Me)?(Pt=_t(),Tr=Me):hL(Me)?(Pt=_t(),Tr=N!==void 0&&N<2?it(_e(\"_super\"),Me):Me):Ya(Me)&8192?(Pt=Sm(),Tr=i().parenthesizeLeftSideOfAccess(Me,!1)):br(Me)?ma(Me.expression,te)?(Pt=ge(I),Tr=Uc(it(P.createAssignment(Pt,Me.expression),Me.expression),Me.name),it(Tr,Me)):(Pt=Me.expression,Tr=Me):Vs(Me)?ma(Me.expression,te)?(Pt=ge(I),Tr=hd(it(P.createAssignment(Pt,Me.expression),Me.expression),Me.argumentExpression),it(Tr,Me)):(Pt=Me.expression,Tr=Me):(Pt=Sm(),Tr=i().parenthesizeLeftSideOfAccess(y,!1)),{target:Tr,thisArg:Pt}}function ao(y,I){return Uc(Vr(vo([Q(void 0,\"value\",[ui(void 0,void 0,y,void 0,void 0,void 0)],zh([yv(I)]))])),\"value\")}function Oo(y){return y.length>10?Ti(y):ou(y,P.createComma)}function id(y,I,N,te=0){let Me=sa(y);if(Me&&Re(Me)&&!tc(Me)){let Pt=go(it(Xf(Me),Me),Me.parent);return te|=Ya(Me),N||(te|=96),I||(te|=3072),te&&Jn(Pt,te),Pt}return we(y)}function np(y,I,N){return id(y,I,N,98304)}function Op(y,I,N){return id(y,I,N,32768)}function cg(y,I,N){return id(y,I,N,16384)}function Yf(y,I,N){return id(y,I,N)}function my(y,I,N,te){let Me=Uc(y,ws(I)?I:Xf(I));it(Me,I);let Pt=0;return te||(Pt|=96),N||(Pt|=3072),Pt&&Jn(Me,Pt),Me}function Fx(y,I,N,te){return y&&Mr(I,1)?my(y,id(I),N,te):cg(I,N,te)}function GE(y,I,N,te){let Me=Mv(y,I,0,N);return _C(y,I,Me,te)}function fC(y){return yo(y.expression)&&y.expression.text===\"use strict\"}function k_(){return mu(yv($(\"use strict\")))}function Mv(y,I,N=0,te){L.assert(I.length===0,\"Prologue directives should be at the first statement in the target statements array\");let Me=!1,Pt=y.length;for(;N<Pt;){let Tr=y[N];if(B_(Tr))fC(Tr)&&(Me=!0),I.push(Tr);else break;N++}return te&&!Me&&I.push(k_()),N}function _C(y,I,N,te,Me=h0){let Pt=y.length;for(;N!==void 0&&N<Pt;){let Tr=y[N];if(Ya(Tr)&2097152&&Me(Tr))Sn(I,te?$e(Tr,te,ca):Tr);else break;N++}return N}function lf(y){return tJ(y)?y:it(F([k_(),...y]),y)}function Gx(y){return L.assert(Ji(y,Ese),\"Cannot lift nodes to a Block.\"),Wp(y)||zh(y)}function hy(y,I,N){let te=N;for(;te<y.length&&I(y[te]);)te++;return te}function jk(y,I){if(!vt(I))return y;let N=hy(y,B_,0),te=hy(y,C6,N),Me=hy(y,I6,te),Pt=hy(I,B_,0),Tr=hy(I,C6,Pt),Fi=hy(I,I6,Tr),Da=hy(I,A6,Fi);L.assert(Da===I.length,\"Expected declarations to be valid standard or custom prologues\");let Vd=C0(y)?y.slice():y;if(Da>Fi&&Vd.splice(Me,0,...I.slice(Fi,Da)),Fi>Tr&&Vd.splice(te,0,...I.slice(Tr,Fi)),Tr>Pt&&Vd.splice(N,0,...I.slice(Pt,Tr)),Pt>0)if(N===0)Vd.splice(0,0,...I.slice(0,Pt));else{let lg=new Map;for(let ug=0;ug<N;ug++){let dg=y[ug];lg.set(dg.expression.text,!0)}for(let ug=Pt-1;ug>=0;ug--){let dg=I[ug];lg.has(dg.expression.text)||Vd.unshift(dg)}}return C0(y)?it(F(Vd,y.hasTrailingComma),y):y}function Hk(y,I){var N;let te;return typeof I==\"number\"?te=zt(I):te=I,_c(y)?$n(y,te,y.name,y.constraint,y.default):ha(y)?Ni(y,te,y.dotDotDotToken,y.name,y.questionToken,y.type,y.initializer):yL(y)?Hn(y,te,y.typeParameters,y.parameters,y.type):$d(y)?nn(y,te,y.name,y.questionToken,y.type):Na(y)?An(y,te,y.name,(N=y.questionToken)!=null?N:y.exclamationToken,y.type,y.initializer):zm(y)?hi(y,te,y.name,y.questionToken,y.typeParameters,y.parameters,y.type):Nc(y)?vn(y,te,y.asteriskToken,y.name,y.questionToken,y.typeParameters,y.parameters,y.type,y.body):Ec(y)?at(y,te,y.parameters,y.body):p_(y)?nt(y,te,y.name,y.parameters,y.type,y.body):Sf(y)?ue(y,te,y.name,y.parameters,y.body):kS(y)?ln(y,te,y.parameters,y.type):ms(y)?bo(y,te,y.asteriskToken,y.name,y.typeParameters,y.parameters,y.type,y.body):xs(y)?Cs(y,te,y.typeParameters,y.parameters,y.type,y.equalsGreaterThanToken,y.body):_u(y)?Mc(y,te,y.name,y.typeParameters,y.heritageClauses,y.members):Bc(y)?dE(y,te,y.declarationList):Jc(y)?Sv(y,te,y.asteriskToken,y.name,y.typeParameters,y.parameters,y.type,y.body):sl(y)?wo(y,te,y.name,y.typeParameters,y.heritageClauses,y.members):ku(y)?gE(y,te,y.name,y.typeParameters,y.heritageClauses,y.members):Ep(y)?th(y,te,y.name,y.typeParameters,y.type):hb(y)?C_(y,te,y.name,y.members):Tc(y)?Ml(y,te,y.name,y.body):Nl(y)?yE(y,te,y.isTypeOnly,y.name,y.moduleReference):gl(y)?nh(y,te,y.importClause,y.moduleSpecifier,y.assertClause):pc(y)?Q_(y,te,y.expression):Il(y)?Ax(y,te,y.isTypeOnly,y.exportClause,y.moduleSpecifier,y.assertClause):L.assertNever(y)}function oo(y){return y?F(y):void 0}function Zs(y){return typeof y==\"string\"?_e(y):y}function Fv(y){return typeof y==\"string\"?$(y):typeof y==\"number\"?Y(y):typeof y==\"boolean\"?y?Rt():We():y}function gy(y){return y&&i().parenthesizeExpressionForDisallowedComma(y)}function Wk(y){return typeof y==\"number\"?Le(y):y}function ad(y){return y&&Gz(y)?it(Ir(fE(),y),y):y}function zk(y){return typeof y==\"string\"||y&&!wi(y)?Fe(y,void 0,void 0,void 0):y}}function CRe(e,t){return e!==t&&it(e,t),e}function IRe(e,t){return e!==t&&(Ir(e,t),it(e,t)),e}function w4(e){switch(e){case 347:return\"type\";case 345:return\"returns\";case 346:return\"this\";case 343:return\"enum\";case 333:return\"author\";case 335:return\"class\";case 336:return\"public\";case 337:return\"private\";case 338:return\"protected\";case 339:return\"readonly\";case 340:return\"override\";case 348:return\"template\";case 349:return\"typedef\";case 344:return\"param\";case 351:return\"prop\";case 341:return\"callback\";case 342:return\"overload\";case 331:return\"augments\";case 332:return\"implements\";default:return L.fail(`Unsupported kind: ${L.formatSyntaxKind(e)}`)}}function LRe(e,t){switch(Ph||(Ph=kg(99,!1,0)),e){case 14:Ph.setText(\"`\"+t+\"`\");break;case 15:Ph.setText(\"`\"+t+\"${\");break;case 16:Ph.setText(\"}\"+t+\"${\");break;case 17:Ph.setText(\"}\"+t+\"`\");break}let r=Ph.scan();if(r===19&&(r=Ph.reScanTemplateToken(!1)),Ph.isUnterminated())return Ph.setText(void 0),gz;let i;switch(r){case 14:case 15:case 16:case 17:i=Ph.getTokenValue();break}return i===void 0||Ph.scan()!==1?(Ph.setText(void 0),gz):(Ph.setText(void 0),i)}function Gg(e){return e&&Re(e)?fL(e):tr(e)}function fL(e){return tr(e)&-67108865}function kRe(e,t){return t|e.transformFlags&134234112}function tr(e){if(!e)return 0;let t=e.transformFlags&~uue(e.kind);return zl(e)&&Ys(e.name)?kRe(e.name,t):t}function fo(e){return e?e.transformFlags:0}function lue(e){let t=0;for(let r of e)t|=tr(r);e.transformFlags=t}function uue(e){if(e>=179&&e<=202)return-2;switch(e){case 210:case 211:case 206:return-2147450880;case 264:return-1941676032;case 166:return-2147483648;case 216:return-2072174592;case 215:case 259:return-1937940480;case 258:return-2146893824;case 260:case 228:return-2147344384;case 173:return-1937948672;case 169:return-2013249536;case 171:case 174:case 175:return-2005057536;case 131:case 148:case 160:case 144:case 152:case 149:case 134:case 153:case 114:case 165:case 168:case 170:case 176:case 177:case 178:case 261:case 262:return-2;case 207:return-2147278848;case 295:return-2147418112;case 203:case 204:return-2147450880;case 213:case 235:case 231:case 356:case 214:case 106:return-2147483648;case 208:case 209:return-2147483648;default:return-2147483648}}function $R(e){return e.flags|=8,e}function fz(e,t,r){let i,o,s,l,f,d,g,m,v,S;Ta(e)?(s=\"\",l=e,f=e.length,d=t,g=r):(L.assert(t===\"js\"||t===\"dts\"),s=(t===\"js\"?e.javascriptPath:e.declarationPath)||\"\",d=t===\"js\"?e.javascriptMapPath:e.declarationMapPath,m=()=>t===\"js\"?e.javascriptText:e.declarationText,v=()=>t===\"js\"?e.javascriptMapText:e.declarationMapText,f=()=>m().length,e.buildInfo&&e.buildInfo.bundle&&(L.assert(r===void 0||typeof r==\"boolean\"),i=r,o=t===\"js\"?e.buildInfo.bundle.js:e.buildInfo.bundle.dts,S=e.oldFileOfCurrentEmit));let x=S?wRe(L.checkDefined(o)):DRe(o,i,f);return x.fileName=s,x.sourceMapPath=d,x.oldFileOfCurrentEmit=S,m&&v?(Object.defineProperty(x,\"text\",{get:m}),Object.defineProperty(x,\"sourceMapText\",{get:v})):(L.assert(!S),x.text=l??\"\",x.sourceMapText=g),x}function DRe(e,t,r){let i,o,s,l,f,d,g,m;for(let S of e?e.sections:Je)switch(S.kind){case\"prologue\":i=Sn(i,it(D.createUnparsedPrologue(S.data),S));break;case\"emitHelpers\":o=Sn(o,xz().get(S.data));break;case\"no-default-lib\":m=!0;break;case\"reference\":s=Sn(s,{pos:-1,end:-1,fileName:S.data});break;case\"type\":l=Sn(l,{pos:-1,end:-1,fileName:S.data});break;case\"type-import\":l=Sn(l,{pos:-1,end:-1,fileName:S.data,resolutionMode:99});break;case\"type-require\":l=Sn(l,{pos:-1,end:-1,fileName:S.data,resolutionMode:1});break;case\"lib\":f=Sn(f,{pos:-1,end:-1,fileName:S.data});break;case\"prepend\":let x;for(let A of S.texts)(!t||A.kind!==\"internal\")&&(x=Sn(x,it(D.createUnparsedTextLike(A.data,A.kind===\"internal\"),A)));d=si(d,x),g=Sn(g,D.createUnparsedPrepend(S.data,x??Je));break;case\"internal\":if(t){g||(g=[]);break}case\"text\":g=Sn(g,it(D.createUnparsedTextLike(S.data,S.kind===\"internal\"),S));break;default:L.assertNever(S)}if(!g){let S=D.createUnparsedTextLike(void 0,!1);oL(S,0,typeof r==\"function\"?r():r),g=[S]}let v=fm.createUnparsedSource(i??Je,void 0,g);return i2(i,v),i2(g,v),i2(d,v),v.hasNoDefaultLib=m,v.helpers=o,v.referencedFiles=s||Je,v.typeReferenceDirectives=l,v.libReferenceDirectives=f||Je,v}function wRe(e){let t,r;for(let o of e.sections)switch(o.kind){case\"internal\":case\"text\":t=Sn(t,it(D.createUnparsedTextLike(o.data,o.kind===\"internal\"),o));break;case\"no-default-lib\":case\"reference\":case\"type\":case\"type-import\":case\"type-require\":case\"lib\":r=Sn(r,it(D.createUnparsedSyntheticReference(o),o));break;case\"prologue\":case\"emitHelpers\":case\"prepend\":break;default:L.assertNever(o)}let i=D.createUnparsedSource(Je,r,t??Je);return i2(r,i),i2(t,i),i.helpers=on(e.sources&&e.sources.helpers,o=>xz().get(o)),i}function RRe(e,t,r,i,o,s){return Ta(e)?pz(void 0,e,r,i,void 0,t,o,s):_z(e,t,r,i,o,s)}function _z(e,t,r,i,o,s,l,f){let d=fm.createInputFiles();d.javascriptPath=t,d.javascriptMapPath=r,d.declarationPath=i,d.declarationMapPath=o,d.buildInfoPath=s;let g=new Map,m=A=>{if(A===void 0)return;let w=g.get(A);return w===void 0&&(w=e(A),g.set(A,w!==void 0?w:!1)),w!==!1?w:void 0},v=A=>{let w=m(A);return w!==void 0?w:`/* Input file ${A} was missing */\\r\n`},S;return Object.defineProperties(d,{javascriptText:{get:()=>v(t)},javascriptMapText:{get:()=>m(r)},declarationText:{get:()=>v(L.checkDefined(i))},declarationMapText:{get:()=>m(o)},buildInfo:{get:()=>{var A,w;if(S===void 0&&s)if(l?.getBuildInfo)S=(A=l.getBuildInfo(s,f.configFilePath))!=null?A:!1;else{let C=m(s);S=C!==void 0&&(w=IF(s,C))!=null?w:!1}return S||void 0}}}),d}function pz(e,t,r,i,o,s,l,f,d,g,m){let v=fm.createInputFiles();return v.javascriptPath=e,v.javascriptText=t,v.javascriptMapPath=r,v.javascriptMapText=i,v.declarationPath=o,v.declarationText=s,v.declarationMapPath=l,v.declarationMapText=f,v.buildInfoPath=d,v.buildInfo=g,v.oldFileOfCurrentEmit=m,v}function ORe(e,t,r){return new(fue||(fue=ml.getSourceMapSourceConstructor()))(e,t,r)}function Ir(e,t){if(e.original=t,t){let r=t.emitNode;r&&(e.emitNode=NRe(r,e.emitNode))}return e}function NRe(e,t){let{flags:r,internalFlags:i,leadingComments:o,trailingComments:s,commentRange:l,sourceMapRange:f,tokenSourceMapRanges:d,constantValue:g,helpers:m,startsOnNewLine:v,snippetElement:S}=e;if(t||(t={}),o&&(t.leadingComments=si(o.slice(),t.leadingComments)),s&&(t.trailingComments=si(s.slice(),t.trailingComments)),r&&(t.flags=r),i&&(t.internalFlags=i&-9),l&&(t.commentRange=l),f&&(t.sourceMapRange=f),d&&(t.tokenSourceMapRanges=PRe(d,t.tokenSourceMapRanges)),g!==void 0&&(t.constantValue=g),m)for(let x of m)t.helpers=xg(t.helpers,x);return v!==void 0&&(t.startsOnNewLine=v),S!==void 0&&(t.snippetElement=S),t}function PRe(e,t){t||(t=[]);for(let r in e)t[r]=e[r];return t}var QR,mz,hz,Ph,gz,_L,due,D,fue,MRe=gt({\"src/compiler/factory/nodeFactory.ts\"(){\"use strict\";fa(),QR=0,mz=(e=>(e[e.None=0]=\"None\",e[e.NoParenthesizerRules=1]=\"NoParenthesizerRules\",e[e.NoNodeConverters=2]=\"NoNodeConverters\",e[e.NoIndentationOnFreshPropertyAccess=4]=\"NoIndentationOnFreshPropertyAccess\",e[e.NoOriginalNode=8]=\"NoOriginalNode\",e))(mz||{}),hz=[],gz={},_L=oue(),due={createBaseSourceFileNode:e=>$R(_L.createBaseSourceFileNode(e)),createBaseIdentifierNode:e=>$R(_L.createBaseIdentifierNode(e)),createBasePrivateIdentifierNode:e=>$R(_L.createBasePrivateIdentifierNode(e)),createBaseTokenNode:e=>$R(_L.createBaseTokenNode(e)),createBaseNode:e=>$R(_L.createBaseNode(e))},D=YR(4,due)}});function Lu(e){var t;if(e.emitNode)L.assert(!(e.emitNode.internalFlags&8),\"Invalid attempt to mutate an immutable node.\");else{if(dI(e)){if(e.kind===308)return e.emitNode={annotatedNodes:[e]};let r=(t=Gn(ea(Gn(e))))!=null?t:L.fail(\"Could not determine parsed source file.\");Lu(r).annotatedNodes.push(e)}e.emitNode={}}return e.emitNode}function yz(e){var t,r;let i=(r=(t=Gn(ea(e)))==null?void 0:t.emitNode)==null?void 0:r.annotatedNodes;if(i)for(let o of i)o.emitNode=void 0}function ZR(e){let t=Lu(e);return t.flags|=3072,t.leadingComments=void 0,t.trailingComments=void 0,e}function Jn(e,t){return Lu(e).flags=t,e}function bp(e,t){let r=Lu(e);return r.flags=r.flags|t,e}function eO(e,t){return Lu(e).internalFlags=t,e}function SS(e,t){let r=Lu(e);return r.internalFlags=r.internalFlags|t,e}function pb(e){var t,r;return(r=(t=e.emitNode)==null?void 0:t.sourceMapRange)!=null?r:e}function Ho(e,t){return Lu(e).sourceMapRange=t,e}function FRe(e,t){var r,i;return(i=(r=e.emitNode)==null?void 0:r.tokenSourceMapRanges)==null?void 0:i[t]}function _ue(e,t,r){var i;let o=Lu(e),s=(i=o.tokenSourceMapRanges)!=null?i:o.tokenSourceMapRanges=[];return s[t]=r,e}function tO(e){var t;return(t=e.emitNode)==null?void 0:t.startsOnNewLine}function vz(e,t){return Lu(e).startsOnNewLine=t,e}function sm(e){var t,r;return(r=(t=e.emitNode)==null?void 0:t.commentRange)!=null?r:e}function hl(e,t){return Lu(e).commentRange=t,e}function l2(e){var t;return(t=e.emitNode)==null?void 0:t.leadingComments}function W0(e,t){return Lu(e).leadingComments=t,e}function nO(e,t,r,i){return W0(e,Sn(l2(e),{kind:t,pos:-1,end:-1,hasTrailingNewLine:i,text:r}))}function rO(e){var t;return(t=e.emitNode)==null?void 0:t.trailingComments}function u2(e,t){return Lu(e).trailingComments=t,e}function R4(e,t,r,i){return u2(e,Sn(rO(e),{kind:t,pos:-1,end:-1,hasTrailingNewLine:i,text:r}))}function pue(e,t){W0(e,l2(t)),u2(e,rO(t));let r=Lu(t);return r.leadingComments=void 0,r.trailingComments=void 0,e}function mue(e){var t;return(t=e.emitNode)==null?void 0:t.constantValue}function hue(e,t){let r=Lu(e);return r.constantValue=t,e}function xS(e,t){let r=Lu(e);return r.helpers=Sn(r.helpers,t),e}function Bg(e,t){if(vt(t)){let r=Lu(e);for(let i of t)r.helpers=xg(r.helpers,i)}return e}function GRe(e,t){var r;let i=(r=e.emitNode)==null?void 0:r.helpers;return i?m8(i,t):!1}function O4(e){var t;return(t=e.emitNode)==null?void 0:t.helpers}function gue(e,t,r){let i=e.emitNode,o=i&&i.helpers;if(!vt(o))return;let s=Lu(t),l=0;for(let f=0;f<o.length;f++){let d=o[f];r(d)?(l++,s.helpers=xg(s.helpers,d)):l>0&&(o[f-l]=d)}l>0&&(o.length-=l)}function bz(e){var t;return(t=e.emitNode)==null?void 0:t.snippetElement}function Ez(e,t){let r=Lu(e);return r.snippetElement=t,e}function Tz(e){return Lu(e).internalFlags|=4,e}function yue(e,t){let r=Lu(e);return r.typeNode=t,e}function vue(e){var t;return(t=e.emitNode)==null?void 0:t.typeNode}function Ug(e,t){return Lu(e).identifierTypeArguments=t,e}function NT(e){var t;return(t=e.emitNode)==null?void 0:t.identifierTypeArguments}function iO(e,t){return Lu(e).autoGenerate=t,e}function BRe(e){var t;return(t=e.emitNode)==null?void 0:t.autoGenerate}function bue(e,t){return Lu(e).generatedImportReference=t,e}function Eue(e){var t;return(t=e.emitNode)==null?void 0:t.generatedImportReference}var URe=gt({\"src/compiler/factory/emitNode.ts\"(){\"use strict\";fa()}});function Tue(e){let t=e.factory,r=zu(()=>eO(t.createTrue(),8)),i=zu(()=>eO(t.createFalse(),8));return{getUnscopedHelperName:o,createDecorateHelper:s,createMetadataHelper:l,createParamHelper:f,createESDecorateHelper:w,createRunInitializersHelper:C,createAssignHelper:P,createAwaitHelper:F,createAsyncGeneratorHelper:B,createAsyncDelegatorHelper:q,createAsyncValuesHelper:W,createRestHelper:Y,createAwaiterHelper:R,createExtendsHelper:ie,createTemplateObjectHelper:$,createSpreadArrayHelper:fe,createPropKeyHelper:Z,createSetFunctionNameHelper:U,createValuesHelper:re,createReadHelper:le,createGeneratorHelper:_e,createCreateBindingHelper:ge,createImportStarHelper:X,createImportStarCallbackHelper:Ve,createImportDefaultHelper:we,createExportStarHelper:ke,createClassPrivateFieldGetHelper:Pe,createClassPrivateFieldSetHelper:Ce,createClassPrivateFieldInHelper:Ie};function o(Be){return Jn(t.createIdentifier(Be),8196)}function s(Be,Ne,Le,Ye){e.requestEmitHelper(N4);let _t=[];return _t.push(t.createArrayLiteralExpression(Be,!0)),_t.push(Ne),Le&&(_t.push(Le),Ye&&_t.push(Ye)),t.createCallExpression(o(\"__decorate\"),void 0,_t)}function l(Be,Ne){return e.requestEmitHelper(P4),t.createCallExpression(o(\"__metadata\"),void 0,[t.createStringLiteral(Be),Ne])}function f(Be,Ne,Le){return e.requestEmitHelper(M4),it(t.createCallExpression(o(\"__param\"),void 0,[t.createNumericLiteral(Ne+\"\"),Be]),Le)}function d(Be){return t.createObjectLiteralExpression([t.createPropertyAssignment(t.createIdentifier(\"kind\"),t.createStringLiteral(\"class\")),t.createPropertyAssignment(t.createIdentifier(\"name\"),Be.name)])}function g(Be){let Ne=Be.computed?t.createElementAccessExpression(t.createIdentifier(\"obj\"),Be.name):t.createPropertyAccessExpression(t.createIdentifier(\"obj\"),Be.name);return t.createPropertyAssignment(\"get\",t.createArrowFunction(void 0,void 0,[t.createParameterDeclaration(void 0,void 0,t.createIdentifier(\"obj\"))],void 0,void 0,Ne))}function m(Be){let Ne=Be.computed?t.createElementAccessExpression(t.createIdentifier(\"obj\"),Be.name):t.createPropertyAccessExpression(t.createIdentifier(\"obj\"),Be.name);return t.createPropertyAssignment(\"set\",t.createArrowFunction(void 0,void 0,[t.createParameterDeclaration(void 0,void 0,t.createIdentifier(\"obj\")),t.createParameterDeclaration(void 0,void 0,t.createIdentifier(\"value\"))],void 0,void 0,t.createBlock([t.createExpressionStatement(t.createAssignment(Ne,t.createIdentifier(\"value\")))])))}function v(Be){let Ne=Be.computed?Be.name:Re(Be.name)?t.createStringLiteralFromNode(Be.name):Be.name;return t.createPropertyAssignment(\"has\",t.createArrowFunction(void 0,void 0,[t.createParameterDeclaration(void 0,void 0,t.createIdentifier(\"obj\"))],void 0,void 0,t.createBinaryExpression(Ne,101,t.createIdentifier(\"obj\"))))}function S(Be,Ne){let Le=[];return Le.push(v(Be)),Ne.get&&Le.push(g(Be)),Ne.set&&Le.push(m(Be)),t.createObjectLiteralExpression(Le)}function x(Be){return t.createObjectLiteralExpression([t.createPropertyAssignment(t.createIdentifier(\"kind\"),t.createStringLiteral(Be.kind)),t.createPropertyAssignment(t.createIdentifier(\"name\"),Be.name.computed?Be.name.name:t.createStringLiteralFromNode(Be.name.name)),t.createPropertyAssignment(t.createIdentifier(\"static\"),Be.static?t.createTrue():t.createFalse()),t.createPropertyAssignment(t.createIdentifier(\"private\"),Be.private?t.createTrue():t.createFalse()),t.createPropertyAssignment(t.createIdentifier(\"access\"),S(Be.name,Be.access))])}function A(Be){return Be.kind===\"class\"?d(Be):x(Be)}function w(Be,Ne,Le,Ye,_t,ct){return e.requestEmitHelper(F4),t.createCallExpression(o(\"__esDecorate\"),void 0,[Be??t.createNull(),Ne??t.createNull(),Le,A(Ye),_t,ct])}function C(Be,Ne,Le){return e.requestEmitHelper(G4),t.createCallExpression(o(\"__runInitializers\"),void 0,Le?[Be,Ne,Le]:[Be,Ne])}function P(Be){return Do(e.getCompilerOptions())>=2?t.createCallExpression(t.createPropertyAccessExpression(t.createIdentifier(\"Object\"),\"assign\"),void 0,Be):(e.requestEmitHelper(B4),t.createCallExpression(o(\"__assign\"),void 0,Be))}function F(Be){return e.requestEmitHelper(AS),t.createCallExpression(o(\"__await\"),void 0,[Be])}function B(Be,Ne){return e.requestEmitHelper(AS),e.requestEmitHelper(U4),(Be.emitNode||(Be.emitNode={})).flags|=1572864,t.createCallExpression(o(\"__asyncGenerator\"),void 0,[Ne?t.createThis():t.createVoidZero(),t.createIdentifier(\"arguments\"),Be])}function q(Be){return e.requestEmitHelper(AS),e.requestEmitHelper(V4),t.createCallExpression(o(\"__asyncDelegator\"),void 0,[Be])}function W(Be){return e.requestEmitHelper(j4),t.createCallExpression(o(\"__asyncValues\"),void 0,[Be])}function Y(Be,Ne,Le,Ye){e.requestEmitHelper(H4);let _t=[],ct=0;for(let Rt=0;Rt<Ne.length-1;Rt++){let We=rJ(Ne[Rt]);if(We)if(ts(We)){L.assertIsDefined(Le,\"Encountered computed property name but 'computedTempVariables' argument was not provided.\");let qe=Le[ct];ct++,_t.push(t.createConditionalExpression(t.createTypeCheck(qe,\"symbol\"),void 0,qe,void 0,t.createAdd(qe,t.createStringLiteral(\"\"))))}else _t.push(t.createStringLiteralFromNode(We))}return t.createCallExpression(o(\"__rest\"),void 0,[Be,it(t.createArrayLiteralExpression(_t),Ye)])}function R(Be,Ne,Le,Ye){e.requestEmitHelper(W4);let _t=t.createFunctionExpression(void 0,t.createToken(41),void 0,void 0,[],void 0,Ye);return(_t.emitNode||(_t.emitNode={})).flags|=1572864,t.createCallExpression(o(\"__awaiter\"),void 0,[Be?t.createThis():t.createVoidZero(),Ne?t.createIdentifier(\"arguments\"):t.createVoidZero(),Le?EO(t,Le):t.createVoidZero(),_t])}function ie(Be){return e.requestEmitHelper(z4),t.createCallExpression(o(\"__extends\"),void 0,[Be,t.createUniqueName(\"_super\",48)])}function $(Be,Ne){return e.requestEmitHelper(J4),t.createCallExpression(o(\"__makeTemplateObject\"),void 0,[Be,Ne])}function fe(Be,Ne,Le){return e.requestEmitHelper(q4),t.createCallExpression(o(\"__spreadArray\"),void 0,[Be,Ne,Le?r():i()])}function Z(Be){return e.requestEmitHelper(X4),t.createCallExpression(o(\"__propKey\"),void 0,[Be])}function U(Be,Ne,Le){return e.requestEmitHelper(Y4),e.factory.createCallExpression(o(\"__setFunctionName\"),void 0,Le?[Be,Ne,e.factory.createStringLiteral(Le)]:[Be,Ne])}function re(Be){return e.requestEmitHelper($4),t.createCallExpression(o(\"__values\"),void 0,[Be])}function le(Be,Ne){return e.requestEmitHelper(K4),t.createCallExpression(o(\"__read\"),void 0,Ne!==void 0?[Be,t.createNumericLiteral(Ne+\"\")]:[Be])}function _e(Be){return e.requestEmitHelper(Q4),t.createCallExpression(o(\"__generator\"),void 0,[t.createThis(),Be])}function ge(Be,Ne,Le){return e.requestEmitHelper(d2),t.createCallExpression(o(\"__createBinding\"),void 0,[t.createIdentifier(\"exports\"),Be,Ne,...Le?[Le]:[]])}function X(Be){return e.requestEmitHelper(aO),t.createCallExpression(o(\"__importStar\"),void 0,[Be])}function Ve(){return e.requestEmitHelper(aO),o(\"__importStar\")}function we(Be){return e.requestEmitHelper(e3),t.createCallExpression(o(\"__importDefault\"),void 0,[Be])}function ke(Be,Ne=t.createIdentifier(\"exports\")){return e.requestEmitHelper(t3),e.requestEmitHelper(d2),t.createCallExpression(o(\"__exportStar\"),void 0,[Be,Ne])}function Pe(Be,Ne,Le,Ye){e.requestEmitHelper(n3);let _t;return Ye?_t=[Be,Ne,t.createStringLiteral(Le),Ye]:_t=[Be,Ne,t.createStringLiteral(Le)],t.createCallExpression(o(\"__classPrivateFieldGet\"),void 0,_t)}function Ce(Be,Ne,Le,Ye,_t){e.requestEmitHelper(r3);let ct;return _t?ct=[Be,Ne,Le,t.createStringLiteral(Ye),_t]:ct=[Be,Ne,Le,t.createStringLiteral(Ye)],t.createCallExpression(o(\"__classPrivateFieldSet\"),void 0,ct)}function Ie(Be,Ne){return e.requestEmitHelper(i3),t.createCallExpression(o(\"__classPrivateFieldIn\"),void 0,[Be,Ne])}}function Sue(e,t){return e===t||e.priority===t.priority?0:e.priority===void 0?1:t.priority===void 0?-1:Es(e.priority,t.priority)}function Sz(e,...t){return r=>{let i=\"\";for(let o=0;o<t.length;o++)i+=e[o],i+=r(t[o]);return i+=e[e.length-1],i}}function xz(){return xue||(xue=p0([N4,P4,M4,F4,G4,B4,AS,U4,V4,j4,H4,W4,z4,J4,q4,$4,K4,X4,Y4,Q4,aO,e3,t3,n3,r3,i3,d2,Z4],e=>e.name))}function pL(e,t){return Pa(e)&&Re(e.expression)&&(Ya(e.expression)&8192)!==0&&e.expression.escapedText===t}var Az,N4,P4,M4,F4,G4,B4,AS,U4,V4,j4,H4,W4,z4,J4,K4,q4,X4,Y4,$4,Q4,d2,Z4,aO,e3,t3,n3,r3,i3,xue,oO,sO,VRe=gt({\"src/compiler/factory/emitHelpers.ts\"(){\"use strict\";fa(),Az=(e=>(e.Field=\"f\",e.Method=\"m\",e.Accessor=\"a\",e))(Az||{}),N4={name:\"typescript:decorate\",importName:\"__decorate\",scoped:!1,priority:2,text:`\n            var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n                var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n                if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n                else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };`},P4={name:\"typescript:metadata\",importName:\"__metadata\",scoped:!1,priority:3,text:`\n            var __metadata = (this && this.__metadata) || function (k, v) {\n                if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n            };`},M4={name:\"typescript:param\",importName:\"__param\",scoped:!1,priority:4,text:`\n            var __param = (this && this.__param) || function (paramIndex, decorator) {\n                return function (target, key) { decorator(target, key, paramIndex); }\n            };`},F4={name:\"typescript:esDecorate\",importName:\"__esDecorate\",scoped:!1,priority:2,text:`\n        var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n            function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n            var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n            var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n            var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n            var _, done = false;\n            for (var i = decorators.length - 1; i >= 0; i--) {\n                var context = {};\n                for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n                for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n                context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n                var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n                if (kind === \"accessor\") {\n                    if (result === void 0) continue;\n                    if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n                    if (_ = accept(result.get)) descriptor.get = _;\n                    if (_ = accept(result.set)) descriptor.set = _;\n                    if (_ = accept(result.init)) initializers.push(_);\n                }\n                else if (_ = accept(result)) {\n                    if (kind === \"field\") initializers.push(_);\n                    else descriptor[key] = _;\n                }\n            }\n            if (target) Object.defineProperty(target, contextIn.name, descriptor);\n            done = true;\n        };`},G4={name:\"typescript:runInitializers\",importName:\"__runInitializers\",scoped:!1,priority:2,text:`\n        var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {\n            var useValue = arguments.length > 2;\n            for (var i = 0; i < initializers.length; i++) {\n                value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n            }\n            return useValue ? value : void 0;\n        };`},B4={name:\"typescript:assign\",importName:\"__assign\",scoped:!1,priority:1,text:`\n            var __assign = (this && this.__assign) || function () {\n                __assign = Object.assign || function(t) {\n                    for (var s, i = 1, n = arguments.length; i < n; i++) {\n                        s = arguments[i];\n                        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                            t[p] = s[p];\n                    }\n                    return t;\n                };\n                return __assign.apply(this, arguments);\n            };`},AS={name:\"typescript:await\",importName:\"__await\",scoped:!1,text:`\n            var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }`},U4={name:\"typescript:asyncGenerator\",importName:\"__asyncGenerator\",scoped:!1,dependencies:[AS],text:`\n            var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n                if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n                var g = generator.apply(thisArg, _arguments || []), i, q = [];\n                return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n                function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n                function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n                function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n                function fulfill(value) { resume(\"next\", value); }\n                function reject(value) { resume(\"throw\", value); }\n                function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n            };`},V4={name:\"typescript:asyncDelegator\",importName:\"__asyncDelegator\",scoped:!1,dependencies:[AS],text:`\n            var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {\n                var i, p;\n                return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n                function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n            };`},j4={name:\"typescript:asyncValues\",importName:\"__asyncValues\",scoped:!1,text:`\n            var __asyncValues = (this && this.__asyncValues) || function (o) {\n                if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n                var m = o[Symbol.asyncIterator], i;\n                return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n                function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n                function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n            };`},H4={name:\"typescript:rest\",importName:\"__rest\",scoped:!1,text:`\n            var __rest = (this && this.__rest) || function (s, e) {\n                var t = {};\n                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n                    t[p] = s[p];\n                if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n                    for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n                        if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                            t[p[i]] = s[p[i]];\n                    }\n                return t;\n            };`},W4={name:\"typescript:awaiter\",importName:\"__awaiter\",scoped:!1,priority:5,text:`\n            var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n                function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n                return new (P || (P = Promise))(function (resolve, reject) {\n                    function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n                    function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n                    function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n                    step((generator = generator.apply(thisArg, _arguments || [])).next());\n                });\n            };`},z4={name:\"typescript:extends\",importName:\"__extends\",scoped:!1,priority:0,text:`\n            var __extends = (this && this.__extends) || (function () {\n                var extendStatics = function (d, b) {\n                    extendStatics = Object.setPrototypeOf ||\n                        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n                    return extendStatics(d, b);\n                };\n\n                return function (d, b) {\n                    if (typeof b !== \"function\" && b !== null)\n                        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n                    extendStatics(d, b);\n                    function __() { this.constructor = d; }\n                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n                };\n            })();`},J4={name:\"typescript:makeTemplateObject\",importName:\"__makeTemplateObject\",scoped:!1,priority:0,text:`\n            var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n                if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n                return cooked;\n            };`},K4={name:\"typescript:read\",importName:\"__read\",scoped:!1,text:`\n            var __read = (this && this.__read) || function (o, n) {\n                var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n                if (!m) return o;\n                var i = m.call(o), r, ar = [], e;\n                try {\n                    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n                }\n                catch (error) { e = { error: error }; }\n                finally {\n                    try {\n                        if (r && !r.done && (m = i[\"return\"])) m.call(i);\n                    }\n                    finally { if (e) throw e.error; }\n                }\n                return ar;\n            };`},q4={name:\"typescript:spreadArray\",importName:\"__spreadArray\",scoped:!1,text:`\n            var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n                if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n                    if (ar || !(i in from)) {\n                        if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                        ar[i] = from[i];\n                    }\n                }\n                return to.concat(ar || Array.prototype.slice.call(from));\n            };`},X4={name:\"typescript:propKey\",importName:\"__propKey\",scoped:!1,text:`\n        var __propKey = (this && this.__propKey) || function (x) {\n            return typeof x === \"symbol\" ? x : \"\".concat(x);\n        };`},Y4={name:\"typescript:setFunctionName\",importName:\"__setFunctionName\",scoped:!1,text:`\n        var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {\n            if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n            return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n        };`},$4={name:\"typescript:values\",importName:\"__values\",scoped:!1,text:`\n            var __values = (this && this.__values) || function(o) {\n                var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n                if (m) return m.call(o);\n                if (o && typeof o.length === \"number\") return {\n                    next: function () {\n                        if (o && i >= o.length) o = void 0;\n                        return { value: o && o[i++], done: !o };\n                    }\n                };\n                throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n            };`},Q4={name:\"typescript:generator\",importName:\"__generator\",scoped:!1,priority:6,text:`\n            var __generator = (this && this.__generator) || function (thisArg, body) {\n                var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n                return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n                function verb(n) { return function (v) { return step([n, v]); }; }\n                function step(op) {\n                    if (f) throw new TypeError(\"Generator is already executing.\");\n                    while (g && (g = 0, op[0] && (_ = 0)), _) try {\n                        if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n                        if (y = 0, t) op = [op[0] & 2, t.value];\n                        switch (op[0]) {\n                            case 0: case 1: t = op; break;\n                            case 4: _.label++; return { value: op[1], done: false };\n                            case 5: _.label++; y = op[1]; op = [0]; continue;\n                            case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                            default:\n                                if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                                if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                                if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                                if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                                if (t[2]) _.ops.pop();\n                                _.trys.pop(); continue;\n                        }\n                        op = body.call(thisArg, _);\n                    } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n                    if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n                }\n            };`},d2={name:\"typescript:commonjscreatebinding\",importName:\"__createBinding\",scoped:!1,priority:1,text:`\n            var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n                if (k2 === undefined) k2 = k;\n                var desc = Object.getOwnPropertyDescriptor(m, k);\n                if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n                  desc = { enumerable: true, get: function() { return m[k]; } };\n                }\n                Object.defineProperty(o, k2, desc);\n            }) : (function(o, m, k, k2) {\n                if (k2 === undefined) k2 = k;\n                o[k2] = m[k];\n            }));`},Z4={name:\"typescript:commonjscreatevalue\",importName:\"__setModuleDefault\",scoped:!1,priority:1,text:`\n            var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n                Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n            }) : function(o, v) {\n                o[\"default\"] = v;\n            });`},aO={name:\"typescript:commonjsimportstar\",importName:\"__importStar\",scoped:!1,dependencies:[d2,Z4],priority:2,text:`\n            var __importStar = (this && this.__importStar) || function (mod) {\n                if (mod && mod.__esModule) return mod;\n                var result = {};\n                if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n                __setModuleDefault(result, mod);\n                return result;\n            };`},e3={name:\"typescript:commonjsimportdefault\",importName:\"__importDefault\",scoped:!1,text:`\n            var __importDefault = (this && this.__importDefault) || function (mod) {\n                return (mod && mod.__esModule) ? mod : { \"default\": mod };\n            };`},t3={name:\"typescript:export-star\",importName:\"__exportStar\",scoped:!1,dependencies:[d2],priority:2,text:`\n            var __exportStar = (this && this.__exportStar) || function(m, exports) {\n                for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n            };`},n3={name:\"typescript:classPrivateFieldGet\",importName:\"__classPrivateFieldGet\",scoped:!1,text:`\n            var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n                if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n                if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n                return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n            };`},r3={name:\"typescript:classPrivateFieldSet\",importName:\"__classPrivateFieldSet\",scoped:!1,text:`\n            var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n                if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n                if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n                if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n                return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n            };`},i3={name:\"typescript:classPrivateFieldIn\",importName:\"__classPrivateFieldIn\",scoped:!1,text:`\n            var __classPrivateFieldIn = (this && this.__classPrivateFieldIn) || function(state, receiver) {\n                if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n                return typeof state === \"function\" ? receiver === state : state.has(receiver);\n            };`},oO={name:\"typescript:async-super\",scoped:!0,text:Sz`\n            const ${\"_superIndex\"} = name => super[name];`},sO={name:\"typescript:advanced-async-super\",scoped:!0,text:Sz`\n            const ${\"_superIndex\"} = (function (geti, seti) {\n                const cache = Object.create(null);\n                return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });\n            })(name => super[name], (name, value) => super[name] = value);`}}});function Vf(e){return e.kind===8}function a3(e){return e.kind===9}function yo(e){return e.kind===10}function CS(e){return e.kind===11}function Cz(e){return e.kind===13}function IS(e){return e.kind===14}function f2(e){return e.kind===15}function Aue(e){return e.kind===16}function Iz(e){return e.kind===17}function o3(e){return e.kind===25}function Cue(e){return e.kind===27}function Lz(e){return e.kind===39}function kz(e){return e.kind===40}function cO(e){return e.kind===41}function lO(e){return e.kind===53}function ev(e){return e.kind===57}function Iue(e){return e.kind===58}function s3(e){return e.kind===28}function Lue(e){return e.kind===38}function Re(e){return e.kind===79}function pi(e){return e.kind===80}function c3(e){return e.kind===93}function kue(e){return e.kind===88}function mL(e){return e.kind===132}function Due(e){return e.kind===129}function Dz(e){return e.kind===133}function wue(e){return e.kind===146}function LS(e){return e.kind===124}function Rue(e){return e.kind===126}function Oue(e){return e.kind===161}function Nue(e){return e.kind===127}function hL(e){return e.kind===106}function gL(e){return e.kind===100}function Pue(e){return e.kind===82}function Yu(e){return e.kind===163}function ts(e){return e.kind===164}function _c(e){return e.kind===165}function ha(e){return e.kind===166}function du(e){return e.kind===167}function $d(e){return e.kind===168}function Na(e){return e.kind===169}function zm(e){return e.kind===170}function Nc(e){return e.kind===171}function oc(e){return e.kind===172}function Ec(e){return e.kind===173}function p_(e){return e.kind===174}function Sf(e){return e.kind===175}function _2(e){return e.kind===176}function uO(e){return e.kind===177}function kS(e){return e.kind===178}function l3(e){return e.kind===179}function m_(e){return e.kind===180}function Jm(e){return e.kind===181}function yL(e){return e.kind===182}function vL(e){return e.kind===183}function Rd(e){return e.kind===184}function wz(e){return e.kind===185}function p2(e){return e.kind===186}function bL(e){return e.kind===199}function Rz(e){return e.kind===187}function Oz(e){return e.kind===188}function DS(e){return e.kind===189}function dO(e){return e.kind===190}function m2(e){return e.kind===191}function h2(e){return e.kind===192}function wS(e){return e.kind===193}function u3(e){return e.kind===194}function RS(e){return e.kind===195}function OS(e){return e.kind===196}function EL(e){return e.kind===197}function mb(e){return e.kind===198}function Mh(e){return e.kind===202}function Mue(e){return e.kind===201}function jRe(e){return e.kind===200}function cm(e){return e.kind===203}function g2(e){return e.kind===204}function Wo(e){return e.kind===205}function fu(e){return e.kind===206}function rs(e){return e.kind===207}function br(e){return e.kind===208}function Vs(e){return e.kind===209}function Pa(e){return e.kind===210}function z0(e){return e.kind===211}function PT(e){return e.kind===212}function Fue(e){return e.kind===213}function ud(e){return e.kind===214}function ms(e){return e.kind===215}function xs(e){return e.kind===216}function Gue(e){return e.kind===217}function y2(e){return e.kind===218}function NS(e){return e.kind===219}function v2(e){return e.kind===220}function tv(e){return e.kind===221}function Nz(e){return e.kind===222}function ar(e){return e.kind===223}function b2(e){return e.kind===224}function d3(e){return e.kind===225}function f3(e){return e.kind===226}function Km(e){return e.kind===227}function _u(e){return e.kind===228}function ol(e){return e.kind===229}function Vg(e){return e.kind===230}function fO(e){return e.kind===231}function HRe(e){return e.kind===235}function PS(e){return e.kind===232}function TL(e){return e.kind===233}function WRe(e){return e.kind===234}function _3(e){return e.kind===356}function SL(e){return e.kind===357}function xL(e){return e.kind===236}function Bue(e){return e.kind===237}function Va(e){return e.kind===238}function Bc(e){return e.kind===240}function Pz(e){return e.kind===239}function Ol(e){return e.kind===241}function MT(e){return e.kind===242}function zRe(e){return e.kind===243}function JRe(e){return e.kind===244}function FT(e){return e.kind===245}function Mz(e){return e.kind===246}function _O(e){return e.kind===247}function KRe(e){return e.kind===248}function qRe(e){return e.kind===249}function j_(e){return e.kind===250}function Uue(e){return e.kind===251}function pO(e){return e.kind===252}function J0(e){return e.kind===253}function Fz(e){return e.kind===254}function mO(e){return e.kind===255}function XRe(e){return e.kind===256}function wi(e){return e.kind===257}function pu(e){return e.kind===258}function Jc(e){return e.kind===259}function sl(e){return e.kind===260}function ku(e){return e.kind===261}function Ep(e){return e.kind===262}function hb(e){return e.kind===263}function Tc(e){return e.kind===264}function Tp(e){return e.kind===265}function hO(e){return e.kind===266}function gO(e){return e.kind===267}function Nl(e){return e.kind===268}function gl(e){return e.kind===269}function lm(e){return e.kind===270}function Vue(e){return e.kind===298}function p3(e){return e.kind===296}function jue(e){return e.kind===297}function nv(e){return e.kind===271}function qm(e){return e.kind===277}function jg(e){return e.kind===272}function $u(e){return e.kind===273}function pc(e){return e.kind===274}function Il(e){return e.kind===275}function h_(e){return e.kind===276}function Mu(e){return e.kind===278}function YRe(e){return e.kind===279}function Gz(e){return e.kind===355}function MS(e){return e.kind===360}function $Re(e){return e.kind===358}function QRe(e){return e.kind===359}function um(e){return e.kind===280}function Hg(e){return e.kind===281}function FS(e){return e.kind===282}function Xm(e){return e.kind===283}function GS(e){return e.kind===284}function BS(e){return e.kind===285}function US(e){return e.kind===286}function Hue(e){return e.kind===287}function Sp(e){return e.kind===288}function K0(e){return e.kind===289}function GT(e){return e.kind===290}function AL(e){return e.kind===291}function CL(e){return e.kind===292}function yO(e){return e.kind===293}function dd(e){return e.kind===294}function E2(e){return e.kind===295}function yl(e){return e.kind===299}function xf(e){return e.kind===300}function VS(e){return e.kind===301}function q0(e){return e.kind===302}function Wue(e){return e.kind===304}function Li(e){return e.kind===308}function Bz(e){return e.kind===309}function BT(e){return e.kind===310}function UT(e){return e.kind===312}function IL(e){return e.kind===313}function gb(e){return e.kind===314}function zue(e){return e.kind===327}function Jue(e){return e.kind===328}function ZRe(e){return e.kind===329}function Kue(e){return e.kind===315}function que(e){return e.kind===316}function T2(e){return e.kind===317}function m3(e){return e.kind===318}function Uz(e){return e.kind===319}function S2(e){return e.kind===320}function h3(e){return e.kind===321}function eOe(e){return e.kind===322}function dm(e){return e.kind===323}function LL(e){return e.kind===325}function X0(e){return e.kind===326}function x2(e){return e.kind===331}function tOe(e){return e.kind===333}function Xue(e){return e.kind===335}function Vz(e){return e.kind===341}function jz(e){return e.kind===336}function Hz(e){return e.kind===337}function Wz(e){return e.kind===338}function zz(e){return e.kind===339}function g3(e){return e.kind===340}function kL(e){return e.kind===342}function Jz(e){return e.kind===334}function nOe(e){return e.kind===350}function vO(e){return e.kind===343}function xp(e){return e.kind===344}function y3(e){return e.kind===345}function Yue(e){return e.kind===346}function DL(e){return e.kind===347}function H_(e){return e.kind===348}function Kz(e){return e.kind===349}function rOe(e){return e.kind===330}function $ue(e){return e.kind===351}function qz(e){return e.kind===332}function v3(e){return e.kind===353}function iOe(e){return e.kind===352}function A2(e){return e.kind===354}var aOe=gt({\"src/compiler/factory/nodeTests.ts\"(){\"use strict\";fa()}});function bO(e){return e.createExportDeclaration(void 0,!1,e.createNamedExports([]),void 0)}function VT(e,t,r,i){if(ts(r))return it(e.createElementAccessExpression(t,r.expression),i);{let o=it(Ah(r)?e.createPropertyAccessExpression(t,r):e.createElementAccessExpression(t,r),r);return bp(o,128),o}}function Xz(e,t){let r=fm.createIdentifier(e||\"React\");return go(r,ea(t)),r}function Yz(e,t,r){if(Yu(t)){let i=Yz(e,t.left,r),o=e.createIdentifier(vr(t.right));return o.escapedText=t.right.escapedText,e.createPropertyAccessExpression(i,o)}else return Xz(vr(t),r)}function $z(e,t,r,i){return t?Yz(e,t,i):e.createPropertyAccessExpression(Xz(r,i),\"createElement\")}function oOe(e,t,r,i){return t?Yz(e,t,i):e.createPropertyAccessExpression(Xz(r,i),\"Fragment\")}function Que(e,t,r,i,o,s){let l=[r];if(i&&l.push(i),o&&o.length>0)if(i||l.push(e.createNull()),o.length>1)for(let f of o)mu(f),l.push(f);else l.push(o[0]);return it(e.createCallExpression(t,void 0,l),s)}function Zue(e,t,r,i,o,s,l){let d=[oOe(e,r,i,s),e.createNull()];if(o&&o.length>0)if(o.length>1)for(let g of o)mu(g),d.push(g);else d.push(o[0]);return it(e.createCallExpression($z(e,t,i,s),void 0,d),l)}function Qz(e,t,r){if(pu(t)){let i=Vo(t.declarations),o=e.updateVariableDeclaration(i,i.name,void 0,void 0,r);return it(e.createVariableStatement(void 0,e.updateVariableDeclarationList(t,[o])),t)}else{let i=it(e.createAssignment(t,r),t);return it(e.createExpressionStatement(i),t)}}function sOe(e,t,r){return Va(t)?e.updateBlock(t,it(e.createNodeArray([r,...t.statements]),t.statements)):e.createBlock(e.createNodeArray([t,r]),!0)}function EO(e,t){if(Yu(t)){let r=EO(e,t.left),i=go(it(e.cloneNode(t.right),t.right),t.right.parent);return it(e.createPropertyAccessExpression(r,i),t)}else return go(it(e.cloneNode(t),t),t.parent)}function Zz(e,t){return Re(t)?e.createStringLiteralFromNode(t):ts(t)?go(it(e.cloneNode(t.expression),t.expression),t.expression.parent):go(it(e.cloneNode(t),t),t.parent)}function cOe(e,t,r,i,o){let{firstAccessor:s,getAccessor:l,setAccessor:f}=kT(t,r);if(r===s)return it(e.createObjectDefinePropertyCall(i,Zz(e,r.name),e.createPropertyDescriptor({enumerable:e.createFalse(),configurable:!0,get:l&&it(Ir(e.createFunctionExpression(uT(l),void 0,void 0,void 0,l.parameters,void 0,l.body),l),l),set:f&&it(Ir(e.createFunctionExpression(uT(f),void 0,void 0,void 0,f.parameters,void 0,f.body),f),f)},!o)),s)}function lOe(e,t,r){return Ir(it(e.createAssignment(VT(e,r,t.name,t.name),t.initializer),t),t)}function uOe(e,t,r){return Ir(it(e.createAssignment(VT(e,r,t.name,t.name),e.cloneNode(t.name)),t),t)}function dOe(e,t,r){return Ir(it(e.createAssignment(VT(e,r,t.name,t.name),Ir(it(e.createFunctionExpression(uT(t),t.asteriskToken,void 0,void 0,t.parameters,void 0,t.body),t),t)),t),t)}function ede(e,t,r,i){switch(r.name&&pi(r.name)&&L.failBadSyntaxKind(r.name,\"Private identifiers are not allowed in object literals.\"),r.kind){case 174:case 175:return cOe(e,t.properties,r,i,!!t.multiLine);case 299:return lOe(e,r,i);case 300:return uOe(e,r,i);case 171:return dOe(e,r,i)}}function b3(e,t,r,i,o){let s=t.operator;L.assert(s===45||s===46,\"Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression\");let l=e.createTempVariable(i);r=e.createAssignment(l,r),it(r,t.operand);let f=tv(t)?e.createPrefixUnaryExpression(s,l):e.createPostfixUnaryExpression(l,s);return it(f,t),o&&(f=e.createAssignment(o,f),it(f,t)),r=e.createComma(r,f),it(r,t),Nz(t)&&(r=e.createComma(r,l),it(r,t)),r}function eJ(e){return(Ya(e)&65536)!==0}function rv(e){return(Ya(e)&32768)!==0}function E3(e){return(Ya(e)&16384)!==0}function tde(e){return yo(e.expression)&&e.expression.text===\"use strict\"}function tJ(e){for(let t of e)if(B_(t)){if(tde(t))return t}else break}function nde(e){let t=Sl(e);return t!==void 0&&B_(t)&&tde(t)}function TO(e){return e.kind===223&&e.operatorToken.kind===27}function wL(e){return TO(e)||SL(e)}function RL(e){return ud(e)&&Yn(e)&&!!x0(e)}function T3(e){let t=Vy(e);return L.assertIsDefined(t),t}function S3(e,t=15){switch(e.kind){case 214:return t&16&&RL(e)?!1:(t&1)!==0;case 213:case 231:case 230:case 235:return(t&2)!==0;case 232:return(t&4)!==0;case 356:return(t&8)!==0}return!1}function ql(e,t=15){for(;S3(e,t);)e=e.expression;return e}function rde(e,t=15){let r=e.parent;for(;S3(r,t);)r=r.parent,L.assert(r);return r}function fOe(e){return ql(e,6)}function mu(e){return vz(e,!0)}function SO(e){let t=ec(e,Li),r=t&&t.emitNode;return r&&r.externalHelpersModuleName}function ide(e){let t=ec(e,Li),r=t&&t.emitNode;return!!r&&(!!r.externalHelpersModuleName||!!r.externalHelpers)}function nJ(e,t,r,i,o,s,l){if(i.importHelpers&&aS(r,i)){let f,d=Rl(i);if(d>=5&&d<=99||r.impliedNodeFormat===99){let g=O4(r);if(g){let m=[];for(let v of g)if(!v.scoped){let S=v.importName;S&&Of(m,S)}if(vt(m)){m.sort(su),f=e.createNamedImports(on(m,x=>g6(r,x)?e.createImportSpecifier(!1,void 0,e.createIdentifier(x)):e.createImportSpecifier(!1,e.createIdentifier(x),t.getUnscopedHelperName(x))));let v=ec(r,Li),S=Lu(v);S.externalHelpers=!0}}}else{let g=ade(e,r,i,o,s||l);g&&(f=e.createNamespaceImport(g))}if(f){let g=e.createImportDeclaration(void 0,e.createImportClause(!1,void 0,f),e.createStringLiteral(_b),void 0);return SS(g,2),g}}}function ade(e,t,r,i,o){if(r.importHelpers&&aS(t,r)){let s=SO(t);if(s)return s;let l=Rl(r),f=(i||f_(r)&&o)&&l!==4&&(l<5||t.impliedNodeFormat===1);if(!f){let d=O4(t);if(d){for(let g of d)if(!g.scoped){f=!0;break}}}if(f){let d=ec(t,Li),g=Lu(d);return g.externalHelpersModuleName||(g.externalHelpersModuleName=e.createUniqueName(_b))}}}function C2(e,t,r){let i=VA(t);if(i&&!lS(t)&&!v6(t)){let o=i.name;return tc(o)?o:e.createIdentifier(k0(r,o)||vr(o))}if(t.kind===269&&t.importClause||t.kind===275&&t.moduleSpecifier)return e.getGeneratedNameForNode(t)}function jS(e,t,r,i,o,s){let l=UA(t);if(l&&yo(l))return pOe(t,i,e,o,s)||_Oe(e,l,r)||e.cloneNode(l)}function _Oe(e,t,r){let i=r.renamedDependencies&&r.renamedDependencies.get(t.text);return i?e.createStringLiteral(i):void 0}function xO(e,t,r,i){if(t){if(t.moduleName)return e.createStringLiteral(t.moduleName);if(!t.isDeclarationFile&&Ss(i))return e.createStringLiteral(YH(r,t.fileName))}}function pOe(e,t,r,i,o){return xO(r,i.getExternalModuleFileFromDeclaration(e),t,o)}function AO(e){if(Lw(e))return e.initializer;if(yl(e)){let t=e.initializer;return Iu(t,!0)?t.right:void 0}if(xf(e))return e.objectAssignmentInitializer;if(Iu(e,!0))return e.right;if(Km(e))return AO(e.expression)}function iv(e){if(Lw(e))return e.name;if(Og(e)){switch(e.kind){case 299:return iv(e.initializer);case 300:return e.name;case 301:return iv(e.expression)}return}return Iu(e,!0)?iv(e.left):Km(e)?iv(e.expression):e}function x3(e){switch(e.kind){case 166:case 205:return e.dotDotDotToken;case 227:case 301:return e}}function rJ(e){let t=A3(e);return L.assert(!!t||VS(e),\"Invalid property name for binding element.\"),t}function A3(e){switch(e.kind){case 205:if(e.propertyName){let r=e.propertyName;return pi(r)?L.failBadSyntaxKind(r):ts(r)&&ode(r.expression)?r.expression:r}break;case 299:if(e.name){let r=e.name;return pi(r)?L.failBadSyntaxKind(r):ts(r)&&ode(r.expression)?r.expression:r}break;case 301:return e.name&&pi(e.name)?L.failBadSyntaxKind(e.name):e.name}let t=iv(e);if(t&&Ys(t))return t}function ode(e){let t=e.kind;return t===10||t===8}function I2(e){switch(e.kind){case 203:case 204:case 206:return e.elements;case 207:return e.properties}}function iJ(e){if(e){let t=e;for(;;){if(Re(t)||!t.body)return Re(t)?t:t.name;t=t.body}}}function mOe(e){let t=e.kind;return t===173||t===175}function sde(e){let t=e.kind;return t===173||t===174||t===175}function aJ(e){let t=e.kind;return t===299||t===300||t===259||t===173||t===178||t===172||t===279||t===240||t===261||t===262||t===263||t===264||t===268||t===269||t===267||t===275||t===274}function cde(e){let t=e.kind;return t===172||t===299||t===300||t===279||t===267}function lde(e){return ev(e)||lO(e)}function ude(e){return Re(e)||u3(e)}function dde(e){return wue(e)||Lz(e)||kz(e)}function fde(e){return ev(e)||Lz(e)||kz(e)}function _de(e){return Re(e)||yo(e)}function hOe(e){let t=e.kind;return t===104||t===110||t===95||fT(e)||tv(e)}function gOe(e){return e===42}function yOe(e){return e===41||e===43||e===44}function vOe(e){return gOe(e)||yOe(e)}function bOe(e){return e===39||e===40}function EOe(e){return bOe(e)||vOe(e)}function TOe(e){return e===47||e===48||e===49}function SOe(e){return TOe(e)||EOe(e)}function xOe(e){return e===29||e===32||e===31||e===33||e===102||e===101}function AOe(e){return xOe(e)||SOe(e)}function COe(e){return e===34||e===36||e===35||e===37}function IOe(e){return COe(e)||AOe(e)}function LOe(e){return e===50||e===51||e===52}function kOe(e){return LOe(e)||IOe(e)}function DOe(e){return e===55||e===56}function wOe(e){return DOe(e)||kOe(e)}function ROe(e){return e===60||wOe(e)||Mg(e)}function OOe(e){return ROe(e)||e===27}function pde(e){return OOe(e.kind)}function C3(e,t,r,i,o,s){let l=new bde(e,t,r,i,o,s);return f;function f(d,g){let m={value:void 0},v=[k3.enter],S=[d],x=[void 0],A=0;for(;v[A]!==k3.done;)A=v[A](l,A,v,S,x,m,g);return L.assertEqual(A,0),m.value}}function mde(e){return e===93||e===88}function oJ(e){let t=e.kind;return mde(t)}function NOe(e){let t=e.kind;return Rg(t)&&!mde(t)}function hde(e,t){if(t!==void 0)return t.length===0?t:it(e.createNodeArray([],t.hasTrailingComma),t)}function I3(e){var t;let r=e.emitNode.autoGenerate;if(r.flags&4){let i=r.id,o=e,s=o.original;for(;s;){o=s;let l=(t=o.emitNode)==null?void 0:t.autoGenerate;if(Ah(o)&&(l===void 0||l.flags&4&&l.id!==i))break;s=o.original}return o}return e}function L2(e,t){return typeof e==\"object\"?jT(!1,e.prefix,e.node,e.suffix,t):typeof e==\"string\"?e.length>0&&e.charCodeAt(0)===35?e.slice(1):e:\"\"}function POe(e,t){return typeof e==\"string\"?e:MOe(e,L.checkDefined(t))}function MOe(e,t){return tS(e)?t(e).slice(1):tc(e)?t(e):pi(e)?e.escapedText.slice(1):vr(e)}function jT(e,t,r,i,o){return t=L2(t,o),i=L2(i,o),r=POe(r,o),`${e?\"#\":\"\"}${t}${r}${i}`}function sJ(e,t,r,i){return e.updatePropertyDeclaration(t,r,e.getGeneratedPrivateNameForNode(t.name,void 0,\"_accessor_storage\"),void 0,void 0,i)}function gde(e,t,r,i){return e.createGetAccessorDeclaration(r,i,[],void 0,e.createBlock([e.createReturnStatement(e.createPropertyAccessExpression(e.createThis(),e.getGeneratedPrivateNameForNode(t.name,void 0,\"_accessor_storage\")))]))}function yde(e,t,r,i){return e.createSetAccessorDeclaration(r,i,[e.createParameterDeclaration(void 0,void 0,\"value\")],e.createBlock([e.createExpressionStatement(e.createAssignment(e.createPropertyAccessExpression(e.createThis(),e.getGeneratedPrivateNameForNode(t.name,void 0,\"_accessor_storage\")),e.createIdentifier(\"value\")))]))}function L3(e){let t=e.expression;for(;;){if(t=ql(t),SL(t)){t=To(t.elements);continue}if(TO(t)){t=t.right;continue}if(Iu(t,!0)&&tc(t.left))return t;break}}function FOe(e){return ud(e)&&ws(e)&&!e.emitNode}function CO(e,t){if(FOe(e))CO(e.expression,t);else if(TO(e))CO(e.left,t),CO(e.right,t);else if(SL(e))for(let r of e.elements)CO(r,t);else t.push(e)}function vde(e){let t=[];return CO(e,t),t}function IO(e){if(e.transformFlags&65536)return!0;if(e.transformFlags&128)for(let t of I2(e)){let r=iv(t);if(r&&vI(r)&&(r.transformFlags&65536||r.transformFlags&128&&IO(r)))return!0}return!1}var k3,bde,GOe=gt({\"src/compiler/factory/utilities.ts\"(){\"use strict\";fa(),(e=>{function t(m,v,S,x,A,w,C){let P=v>0?A[v-1]:void 0;return L.assertEqual(S[v],t),A[v]=m.onEnter(x[v],P,C),S[v]=f(m,t),v}e.enter=t;function r(m,v,S,x,A,w,C){L.assertEqual(S[v],r),L.assertIsDefined(m.onLeft),S[v]=f(m,r);let P=m.onLeft(x[v].left,A[v],x[v]);return P?(g(v,x,P),d(v,S,x,A,P)):v}e.left=r;function i(m,v,S,x,A,w,C){return L.assertEqual(S[v],i),L.assertIsDefined(m.onOperator),S[v]=f(m,i),m.onOperator(x[v].operatorToken,A[v],x[v]),v}e.operator=i;function o(m,v,S,x,A,w,C){L.assertEqual(S[v],o),L.assertIsDefined(m.onRight),S[v]=f(m,o);let P=m.onRight(x[v].right,A[v],x[v]);return P?(g(v,x,P),d(v,S,x,A,P)):v}e.right=o;function s(m,v,S,x,A,w,C){L.assertEqual(S[v],s),S[v]=f(m,s);let P=m.onExit(x[v],A[v]);if(v>0){if(v--,m.foldState){let F=S[v]===s?\"right\":\"left\";A[v]=m.foldState(A[v],P,F)}}else w.value=P;return v}e.exit=s;function l(m,v,S,x,A,w,C){return L.assertEqual(S[v],l),v}e.done=l;function f(m,v){switch(v){case t:if(m.onLeft)return r;case r:if(m.onOperator)return i;case i:if(m.onRight)return o;case o:return s;case s:return l;case l:return l;default:L.fail(\"Invalid state\")}}e.nextState=f;function d(m,v,S,x,A){return m++,v[m]=t,S[m]=A,x[m]=void 0,m}function g(m,v,S){if(L.shouldAssert(2))for(;m>=0;)L.assert(v[m]!==S,\"Circular traversal detected.\"),m--}})(k3||(k3={})),bde=class{constructor(e,t,r,i,o,s){this.onEnter=e,this.onLeft=t,this.onOperator=r,this.onRight=i,this.onExit=o,this.foldState=s}}}});function it(e,t){return t?om(e,t.pos,t.end):e}function g_(e){let t=e.kind;return t===165||t===166||t===168||t===169||t===170||t===171||t===173||t===174||t===175||t===178||t===182||t===215||t===216||t===228||t===240||t===259||t===260||t===261||t===262||t===263||t===264||t===268||t===269||t===274||t===275}function HS(e){let t=e.kind;return t===166||t===169||t===171||t===174||t===175||t===228||t===260}var BOe=gt({\"src/compiler/factory/utilitiesPublic.ts\"(){\"use strict\";fa()}});function Mt(e,t){return t&&e(t)}function fi(e,t,r){if(r){if(t)return t(r);for(let i of r){let o=e(i);if(o)return o}}}function cJ(e,t){return e.charCodeAt(t+1)===42&&e.charCodeAt(t+2)===42&&e.charCodeAt(t+3)!==47}function LO(e){return mn(e.statements,UOe)||VOe(e)}function UOe(e){return g_(e)&&jOe(e,93)||Nl(e)&&um(e.moduleReference)||gl(e)||pc(e)||Il(e)?e:void 0}function VOe(e){return e.flags&4194304?Ede(e):void 0}function Ede(e){return HOe(e)?e:pa(e,Ede)}function jOe(e,t){return vt(e.modifiers,r=>r.kind===t)}function HOe(e){return TL(e)&&e.keywordToken===100&&e.name.escapedText===\"meta\"}function Tde(e,t,r){return fi(t,r,e.typeParameters)||fi(t,r,e.parameters)||Mt(t,e.type)}function Sde(e,t,r){return fi(t,r,e.types)}function xde(e,t,r){return Mt(t,e.type)}function Ade(e,t,r){return fi(t,r,e.elements)}function Cde(e,t,r){return Mt(t,e.expression)||Mt(t,e.questionDotToken)||fi(t,r,e.typeArguments)||fi(t,r,e.arguments)}function Ide(e,t,r){return fi(t,r,e.statements)}function Lde(e,t,r){return Mt(t,e.label)}function kde(e,t,r){return fi(t,r,e.modifiers)||Mt(t,e.name)||fi(t,r,e.typeParameters)||fi(t,r,e.heritageClauses)||fi(t,r,e.members)}function Dde(e,t,r){return fi(t,r,e.elements)}function wde(e,t,r){return Mt(t,e.propertyName)||Mt(t,e.name)}function Rde(e,t,r){return Mt(t,e.tagName)||fi(t,r,e.typeArguments)||Mt(t,e.attributes)}function k2(e,t,r){return Mt(t,e.type)}function Ode(e,t,r){return Mt(t,e.tagName)||(e.isNameFirst?Mt(t,e.name)||Mt(t,e.typeExpression):Mt(t,e.typeExpression)||Mt(t,e.name))||(typeof e.comment==\"string\"?void 0:fi(t,r,e.comment))}function D2(e,t,r){return Mt(t,e.tagName)||Mt(t,e.typeExpression)||(typeof e.comment==\"string\"?void 0:fi(t,r,e.comment))}function lJ(e,t,r){return Mt(t,e.name)}function WS(e,t,r){return Mt(t,e.tagName)||(typeof e.comment==\"string\"?void 0:fi(t,r,e.comment))}function WOe(e,t,r){return Mt(t,e.expression)}function pa(e,t,r){if(e===void 0||e.kind<=162)return;let i=Hde[e.kind];return i===void 0?void 0:i(e,t,r)}function kO(e,t,r){let i=Nde(e),o=[];for(;o.length<i.length;)o.push(e);for(;i.length!==0;){let s=i.pop(),l=o.pop();if(ba(s)){if(r){let f=r(s,l);if(f){if(f===\"skip\")continue;return f}}for(let f=s.length-1;f>=0;--f)i.push(s[f]),o.push(l)}else{let f=t(s,l);if(f){if(f===\"skip\")continue;return f}if(s.kind>=163)for(let d of Nde(s))i.push(d),o.push(s)}}}function Nde(e){let t=[];return pa(e,r,r),t;function r(i){t.unshift(i)}}function Pde(e){e.externalModuleIndicator=LO(e)}function DO(e,t,r,i=!1,o){var s,l;(s=ai)==null||s.push(ai.Phase.Parse,\"createSourceFile\",{path:e},!0),Fs(\"beforeParse\");let f;fp.logStartParseSourceFile(e);let{languageVersion:d,setExternalModuleIndicator:g,impliedNodeFormat:m}=typeof r==\"object\"?r:{languageVersion:r};if(d===100)f=av.parseSourceFile(e,t,d,void 0,i,6,Ba);else{let v=m===void 0?g:S=>(S.impliedNodeFormat=m,(g||Pde)(S));f=av.parseSourceFile(e,t,d,void 0,i,o,v)}return fp.logStopParseSourceFile(),Fs(\"afterParse\"),hf(\"Parse\",\"beforeParse\",\"afterParse\"),(l=ai)==null||l.pop(),f}function zS(e,t){return av.parseIsolatedEntityName(e,t)}function wO(e,t){return av.parseJsonText(e,t)}function Lc(e){return e.externalModuleIndicator!==void 0}function uJ(e,t,r,i=!1){let o=D3.updateSourceFile(e,t,r,i);return o.flags|=e.flags&6291456,o}function Mde(e,t,r){let i=av.JSDocParser.parseIsolatedJSDocComment(e,t,r);return i&&i.jsDoc&&av.fixupParentReferences(i.jsDoc),i}function zOe(e,t,r){return av.JSDocParser.parseJSDocTypeExpressionForTests(e,t,r)}function Fu(e){return $c(e,I4)||Gc(e,\".ts\")&&jl(Hl(e),\".d.\")}function JOe(e,t,r,i){if(e){if(e===\"import\")return 99;if(e===\"require\")return 1;i(t,r-t,_.resolution_mode_should_be_either_require_or_import)}}function dJ(e,t){let r=[];for(let i of Nm(t,0)||Je){let o=t.substring(i.pos,i.end);qOe(r,i,o)}e.pragmas=new Map;for(let i of r){if(e.pragmas.has(i.name)){let o=e.pragmas.get(i.name);o instanceof Array?o.push(i.args):e.pragmas.set(i.name,[o,i.args]);continue}e.pragmas.set(i.name,i.args)}}function fJ(e,t){e.checkJsDirective=void 0,e.referencedFiles=[],e.typeReferenceDirectives=[],e.libReferenceDirectives=[],e.amdDependencies=[],e.hasNoDefaultLib=!1,e.pragmas.forEach((r,i)=>{switch(i){case\"reference\":{let o=e.referencedFiles,s=e.typeReferenceDirectives,l=e.libReferenceDirectives;mn(qD(r),f=>{let{types:d,lib:g,path:m,[\"resolution-mode\"]:v}=f.arguments;if(f.arguments[\"no-default-lib\"])e.hasNoDefaultLib=!0;else if(d){let S=JOe(v,d.pos,d.end,t);s.push({pos:d.pos,end:d.end,fileName:d.value,...S?{resolutionMode:S}:{}})}else g?l.push({pos:g.pos,end:g.end,fileName:g.value}):m?o.push({pos:m.pos,end:m.end,fileName:m.value}):t(f.range.pos,f.range.end-f.range.pos,_.Invalid_reference_directive_syntax)});break}case\"amd-dependency\":{e.amdDependencies=on(qD(r),o=>({name:o.arguments.name,path:o.arguments.path}));break}case\"amd-module\":{if(r instanceof Array)for(let o of r)e.moduleName&&t(o.range.pos,o.range.end-o.range.pos,_.An_AMD_module_cannot_have_multiple_name_assignments),e.moduleName=o.arguments.name;else e.moduleName=r.arguments.name;break}case\"ts-nocheck\":case\"ts-check\":{mn(qD(r),o=>{(!e.checkJsDirective||o.range.pos>e.checkJsDirective.pos)&&(e.checkJsDirective={enabled:i===\"ts-check\",end:o.range.end,pos:o.range.pos})});break}case\"jsx\":case\"jsxfrag\":case\"jsximportsource\":case\"jsxruntime\":return;default:L.fail(\"Unhandled pragma kind\")}})}function KOe(e){if(w3.has(e))return w3.get(e);let t=new RegExp(`(\\\\s${e}\\\\s*=\\\\s*)(?:(?:'([^']*)')|(?:\"([^\"]*)\"))`,\"im\");return w3.set(e,t),t}function qOe(e,t,r){let i=t.kind===2&&Wde.exec(r);if(i){let s=i[1].toLowerCase(),l=iw[s];if(!l||!(l.kind&1))return;if(l.args){let f={};for(let d of l.args){let m=KOe(d.name).exec(r);if(!m&&!d.optional)return;if(m){let v=m[2]||m[3];if(d.captureSpan){let S=t.pos+m.index+m[1].length+1;f[d.name]={value:v,pos:S,end:S+v.length}}else f[d.name]=v}}e.push({name:s,args:{arguments:f,range:t}})}else e.push({name:s,args:{arguments:{},range:t}});return}let o=t.kind===2&&zde.exec(r);if(o)return Fde(e,t,2,o);if(t.kind===3){let s=/@(\\S+)(\\s+.*)?$/gim,l;for(;l=s.exec(r);)Fde(e,t,4,l)}}function Fde(e,t,r,i){if(!i)return;let o=i[1].toLowerCase(),s=iw[o];if(!s||!(s.kind&r))return;let l=i[2],f=XOe(s,l);f!==\"fail\"&&e.push({name:o,args:{arguments:f,range:t}})}function XOe(e,t){if(!t)return{};if(!e.args)return{};let r=v0(t).split(/\\s+/),i={};for(let o=0;o<e.args.length;o++){let s=e.args[o];if(!r[o]&&!s.optional)return\"fail\";if(s.captureSpan)return L.fail(\"Capture spans not yet implemented for non-xml pragmas\");i[s.name]=r[o]}return i}function yb(e,t){return e.kind!==t.kind?!1:e.kind===79?e.escapedText===t.escapedText:e.kind===108?!0:e.name.escapedText===t.name.escapedText&&yb(e.expression,t.expression)}var Gde,Bde,Ude,Vde,jde,_J,fm,Hde,av,D3,w3,Wde,zde,YOe=gt({\"src/compiler/parser.ts\"(){\"use strict\";fa(),fa(),E0(),_J={createBaseSourceFileNode:e=>new(jde||(jde=ml.getSourceFileConstructor()))(e,-1,-1),createBaseIdentifierNode:e=>new(Ude||(Ude=ml.getIdentifierConstructor()))(e,-1,-1),createBasePrivateIdentifierNode:e=>new(Vde||(Vde=ml.getPrivateIdentifierConstructor()))(e,-1,-1),createBaseTokenNode:e=>new(Bde||(Bde=ml.getTokenConstructor()))(e,-1,-1),createBaseNode:e=>new(Gde||(Gde=ml.getNodeConstructor()))(e,-1,-1)},fm=YR(1,_J),Hde={163:function(t,r,i){return Mt(r,t.left)||Mt(r,t.right)},165:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||Mt(r,t.constraint)||Mt(r,t.default)||Mt(r,t.expression)},300:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||Mt(r,t.questionToken)||Mt(r,t.exclamationToken)||Mt(r,t.equalsToken)||Mt(r,t.objectAssignmentInitializer)},301:function(t,r,i){return Mt(r,t.expression)},166:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.dotDotDotToken)||Mt(r,t.name)||Mt(r,t.questionToken)||Mt(r,t.type)||Mt(r,t.initializer)},169:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||Mt(r,t.questionToken)||Mt(r,t.exclamationToken)||Mt(r,t.type)||Mt(r,t.initializer)},168:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||Mt(r,t.questionToken)||Mt(r,t.type)||Mt(r,t.initializer)},299:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||Mt(r,t.questionToken)||Mt(r,t.exclamationToken)||Mt(r,t.initializer)},257:function(t,r,i){return Mt(r,t.name)||Mt(r,t.exclamationToken)||Mt(r,t.type)||Mt(r,t.initializer)},205:function(t,r,i){return Mt(r,t.dotDotDotToken)||Mt(r,t.propertyName)||Mt(r,t.name)||Mt(r,t.initializer)},178:function(t,r,i){return fi(r,i,t.modifiers)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)},182:function(t,r,i){return fi(r,i,t.modifiers)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)},181:function(t,r,i){return fi(r,i,t.modifiers)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)},176:Tde,177:Tde,171:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.asteriskToken)||Mt(r,t.name)||Mt(r,t.questionToken)||Mt(r,t.exclamationToken)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)||Mt(r,t.body)},170:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||Mt(r,t.questionToken)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)},173:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)||Mt(r,t.body)},174:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)||Mt(r,t.body)},175:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)||Mt(r,t.body)},259:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.asteriskToken)||Mt(r,t.name)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)||Mt(r,t.body)},215:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.asteriskToken)||Mt(r,t.name)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)||Mt(r,t.body)},216:function(t,r,i){return fi(r,i,t.modifiers)||fi(r,i,t.typeParameters)||fi(r,i,t.parameters)||Mt(r,t.type)||Mt(r,t.equalsGreaterThanToken)||Mt(r,t.body)},172:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.body)},180:function(t,r,i){return Mt(r,t.typeName)||fi(r,i,t.typeArguments)},179:function(t,r,i){return Mt(r,t.assertsModifier)||Mt(r,t.parameterName)||Mt(r,t.type)},183:function(t,r,i){return Mt(r,t.exprName)||fi(r,i,t.typeArguments)},184:function(t,r,i){return fi(r,i,t.members)},185:function(t,r,i){return Mt(r,t.elementType)},186:function(t,r,i){return fi(r,i,t.elements)},189:Sde,190:Sde,191:function(t,r,i){return Mt(r,t.checkType)||Mt(r,t.extendsType)||Mt(r,t.trueType)||Mt(r,t.falseType)},192:function(t,r,i){return Mt(r,t.typeParameter)},202:function(t,r,i){return Mt(r,t.argument)||Mt(r,t.assertions)||Mt(r,t.qualifier)||fi(r,i,t.typeArguments)},298:function(t,r,i){return Mt(r,t.assertClause)},193:xde,195:xde,196:function(t,r,i){return Mt(r,t.objectType)||Mt(r,t.indexType)},197:function(t,r,i){return Mt(r,t.readonlyToken)||Mt(r,t.typeParameter)||Mt(r,t.nameType)||Mt(r,t.questionToken)||Mt(r,t.type)||fi(r,i,t.members)},198:function(t,r,i){return Mt(r,t.literal)},199:function(t,r,i){return Mt(r,t.dotDotDotToken)||Mt(r,t.name)||Mt(r,t.questionToken)||Mt(r,t.type)},203:Ade,204:Ade,206:function(t,r,i){return fi(r,i,t.elements)},207:function(t,r,i){return fi(r,i,t.properties)},208:function(t,r,i){return Mt(r,t.expression)||Mt(r,t.questionDotToken)||Mt(r,t.name)},209:function(t,r,i){return Mt(r,t.expression)||Mt(r,t.questionDotToken)||Mt(r,t.argumentExpression)},210:Cde,211:Cde,212:function(t,r,i){return Mt(r,t.tag)||Mt(r,t.questionDotToken)||fi(r,i,t.typeArguments)||Mt(r,t.template)},213:function(t,r,i){return Mt(r,t.type)||Mt(r,t.expression)},214:function(t,r,i){return Mt(r,t.expression)},217:function(t,r,i){return Mt(r,t.expression)},218:function(t,r,i){return Mt(r,t.expression)},219:function(t,r,i){return Mt(r,t.expression)},221:function(t,r,i){return Mt(r,t.operand)},226:function(t,r,i){return Mt(r,t.asteriskToken)||Mt(r,t.expression)},220:function(t,r,i){return Mt(r,t.expression)},222:function(t,r,i){return Mt(r,t.operand)},223:function(t,r,i){return Mt(r,t.left)||Mt(r,t.operatorToken)||Mt(r,t.right)},231:function(t,r,i){return Mt(r,t.expression)||Mt(r,t.type)},232:function(t,r,i){return Mt(r,t.expression)},235:function(t,r,i){return Mt(r,t.expression)||Mt(r,t.type)},233:function(t,r,i){return Mt(r,t.name)},224:function(t,r,i){return Mt(r,t.condition)||Mt(r,t.questionToken)||Mt(r,t.whenTrue)||Mt(r,t.colonToken)||Mt(r,t.whenFalse)},227:function(t,r,i){return Mt(r,t.expression)},238:Ide,265:Ide,308:function(t,r,i){return fi(r,i,t.statements)||Mt(r,t.endOfFileToken)},240:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.declarationList)},258:function(t,r,i){return fi(r,i,t.declarations)},241:function(t,r,i){return Mt(r,t.expression)},242:function(t,r,i){return Mt(r,t.expression)||Mt(r,t.thenStatement)||Mt(r,t.elseStatement)},243:function(t,r,i){return Mt(r,t.statement)||Mt(r,t.expression)},244:function(t,r,i){return Mt(r,t.expression)||Mt(r,t.statement)},245:function(t,r,i){return Mt(r,t.initializer)||Mt(r,t.condition)||Mt(r,t.incrementor)||Mt(r,t.statement)},246:function(t,r,i){return Mt(r,t.initializer)||Mt(r,t.expression)||Mt(r,t.statement)},247:function(t,r,i){return Mt(r,t.awaitModifier)||Mt(r,t.initializer)||Mt(r,t.expression)||Mt(r,t.statement)},248:Lde,249:Lde,250:function(t,r,i){return Mt(r,t.expression)},251:function(t,r,i){return Mt(r,t.expression)||Mt(r,t.statement)},252:function(t,r,i){return Mt(r,t.expression)||Mt(r,t.caseBlock)},266:function(t,r,i){return fi(r,i,t.clauses)},292:function(t,r,i){return Mt(r,t.expression)||fi(r,i,t.statements)},293:function(t,r,i){return fi(r,i,t.statements)},253:function(t,r,i){return Mt(r,t.label)||Mt(r,t.statement)},254:function(t,r,i){return Mt(r,t.expression)},255:function(t,r,i){return Mt(r,t.tryBlock)||Mt(r,t.catchClause)||Mt(r,t.finallyBlock)},295:function(t,r,i){return Mt(r,t.variableDeclaration)||Mt(r,t.block)},167:function(t,r,i){return Mt(r,t.expression)},260:kde,228:kde,261:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||fi(r,i,t.typeParameters)||fi(r,i,t.heritageClauses)||fi(r,i,t.members)},262:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||fi(r,i,t.typeParameters)||Mt(r,t.type)},263:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||fi(r,i,t.members)},302:function(t,r,i){return Mt(r,t.name)||Mt(r,t.initializer)},264:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||Mt(r,t.body)},268:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)||Mt(r,t.moduleReference)},269:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.importClause)||Mt(r,t.moduleSpecifier)||Mt(r,t.assertClause)},270:function(t,r,i){return Mt(r,t.name)||Mt(r,t.namedBindings)},296:function(t,r,i){return fi(r,i,t.elements)},297:function(t,r,i){return Mt(r,t.name)||Mt(r,t.value)},267:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.name)},271:function(t,r,i){return Mt(r,t.name)},277:function(t,r,i){return Mt(r,t.name)},272:Dde,276:Dde,275:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.exportClause)||Mt(r,t.moduleSpecifier)||Mt(r,t.assertClause)},273:wde,278:wde,274:function(t,r,i){return fi(r,i,t.modifiers)||Mt(r,t.expression)},225:function(t,r,i){return Mt(r,t.head)||fi(r,i,t.templateSpans)},236:function(t,r,i){return Mt(r,t.expression)||Mt(r,t.literal)},200:function(t,r,i){return Mt(r,t.head)||fi(r,i,t.templateSpans)},201:function(t,r,i){return Mt(r,t.type)||Mt(r,t.literal)},164:function(t,r,i){return Mt(r,t.expression)},294:function(t,r,i){return fi(r,i,t.types)},230:function(t,r,i){return Mt(r,t.expression)||fi(r,i,t.typeArguments)},280:function(t,r,i){return Mt(r,t.expression)},279:function(t,r,i){return fi(r,i,t.modifiers)},357:function(t,r,i){return fi(r,i,t.elements)},281:function(t,r,i){return Mt(r,t.openingElement)||fi(r,i,t.children)||Mt(r,t.closingElement)},285:function(t,r,i){return Mt(r,t.openingFragment)||fi(r,i,t.children)||Mt(r,t.closingFragment)},282:Rde,283:Rde,289:function(t,r,i){return fi(r,i,t.properties)},288:function(t,r,i){return Mt(r,t.name)||Mt(r,t.initializer)},290:function(t,r,i){return Mt(r,t.expression)},291:function(t,r,i){return Mt(r,t.dotDotDotToken)||Mt(r,t.expression)},284:function(t,r,i){return Mt(r,t.tagName)},187:k2,188:k2,312:k2,318:k2,317:k2,319:k2,321:k2,320:function(t,r,i){return fi(r,i,t.parameters)||Mt(r,t.type)},323:function(t,r,i){return(typeof t.comment==\"string\"?void 0:fi(r,i,t.comment))||fi(r,i,t.tags)},350:function(t,r,i){return Mt(r,t.tagName)||Mt(r,t.name)||(typeof t.comment==\"string\"?void 0:fi(r,i,t.comment))},313:function(t,r,i){return Mt(r,t.name)},314:function(t,r,i){return Mt(r,t.left)||Mt(r,t.right)},344:Ode,351:Ode,333:function(t,r,i){return Mt(r,t.tagName)||(typeof t.comment==\"string\"?void 0:fi(r,i,t.comment))},332:function(t,r,i){return Mt(r,t.tagName)||Mt(r,t.class)||(typeof t.comment==\"string\"?void 0:fi(r,i,t.comment))},331:function(t,r,i){return Mt(r,t.tagName)||Mt(r,t.class)||(typeof t.comment==\"string\"?void 0:fi(r,i,t.comment))},348:function(t,r,i){return Mt(r,t.tagName)||Mt(r,t.constraint)||fi(r,i,t.typeParameters)||(typeof t.comment==\"string\"?void 0:fi(r,i,t.comment))},349:function(t,r,i){return Mt(r,t.tagName)||(t.typeExpression&&t.typeExpression.kind===312?Mt(r,t.typeExpression)||Mt(r,t.fullName)||(typeof t.comment==\"string\"?void 0:fi(r,i,t.comment)):Mt(r,t.fullName)||Mt(r,t.typeExpression)||(typeof t.comment==\"string\"?void 0:fi(r,i,t.comment)))},341:function(t,r,i){return Mt(r,t.tagName)||Mt(r,t.fullName)||Mt(r,t.typeExpression)||(typeof t.comment==\"string\"?void 0:fi(r,i,t.comment))},345:D2,347:D2,346:D2,343:D2,353:D2,352:D2,342:D2,326:function(t,r,i){return mn(t.typeParameters,r)||mn(t.parameters,r)||Mt(r,t.type)},327:lJ,328:lJ,329:lJ,325:function(t,r,i){return mn(t.jsDocPropertyTags,r)},330:WS,335:WS,336:WS,337:WS,338:WS,339:WS,334:WS,340:WS,356:WOe},(e=>{var t=kg(99,!0),r=20480,i,o,s,l,f;function d(V){return We++,V}var g={createBaseSourceFileNode:V=>d(new f(V,0,0)),createBaseIdentifierNode:V=>d(new s(V,0,0)),createBasePrivateIdentifierNode:V=>d(new l(V,0,0)),createBaseTokenNode:V=>d(new o(V,0,0)),createBaseNode:V=>d(new i(V,0,0))},m=YR(11,g),{createNodeArray:v,createNumericLiteral:S,createStringLiteral:x,createLiteralLikeNode:A,createIdentifier:w,createPrivateIdentifier:C,createToken:P,createArrayLiteralExpression:F,createObjectLiteralExpression:B,createPropertyAccessExpression:q,createPropertyAccessChain:W,createElementAccessExpression:Y,createElementAccessChain:R,createCallExpression:ie,createCallChain:$,createNewExpression:fe,createParenthesizedExpression:Z,createBlock:U,createVariableStatement:re,createExpressionStatement:le,createIfStatement:_e,createWhileStatement:ge,createForStatement:X,createForOfStatement:Ve,createVariableDeclaration:we,createVariableDeclarationList:ke}=m,Pe,Ce,Ie,Be,Ne,Le,Ye,_t,ct,Rt,We,qe,zt,Qt,tn,kn,_n=!0,Gt=!1;function $n(V,me,Ue,ut,Lt=!1,dn,Er){var ii;if(dn=h4(V,dn),dn===6){let di=Ni(V,me,Ue,ut,Lt);return PO(di,(ii=di.statements[0])==null?void 0:ii.expression,di.parseDiagnostics,!1,void 0,void 0),di.referencedFiles=Je,di.typeReferenceDirectives=Je,di.libReferenceDirectives=Je,di.amdDependencies=Je,di.hasNoDefaultLib=!1,di.pragmas=b8,di}Pi(V,me,Ue,ut,dn);let li=pt(Ue,Lt,dn,Er||Pde);return gr(),li}e.parseSourceFile=$n;function ui(V,me){Pi(\"\",V,me,void 0,1),Qe();let Ue=Io(!0),ut=j()===1&&!Ye.length;return gr(),ut?Ue:void 0}e.parseIsolatedEntityName=ui;function Ni(V,me,Ue=2,ut,Lt=!1){Pi(V,me,Ue,ut,6),Ce=kn,Qe();let dn=z(),Er,ii;if(j()===1)Er=As([],dn,dn),ii=Pc();else{let ma;for(;j()!==1;){let Oo;switch(j()){case 22:Oo=ay();break;case 110:case 95:case 104:Oo=Pc();break;case 40:Nr(()=>Qe()===8&&Qe()!==58)?Oo=T1():Oo=wc();break;case 8:case 10:if(Nr(()=>Qe()!==58)){Oo=oa();break}default:Oo=wc();break}ma&&ba(ma)?ma.push(Oo):ma?ma=[ma,Oo]:(ma=Oo,j()!==1&&rt(_.Unexpected_token))}let is=ba(ma)?jt(F(ma),dn):L.checkDefined(ma),ao=le(is);jt(ao,dn),Er=As([ao],dn),ii=Ll(1,_.Unexpected_token)}let li=hi(V,2,6,!1,Er,ii,Ce,Ba);Lt&&Kn(li),li.nodeCount=We,li.identifierCount=zt,li.identifiers=qe,li.parseDiagnostics=vS(Ye,li),_t&&(li.jsDocDiagnostics=vS(_t,li));let di=li;return gr(),di}e.parseJsonText=Ni;function Pi(V,me,Ue,ut,Lt){switch(i=ml.getNodeConstructor(),o=ml.getTokenConstructor(),s=ml.getIdentifierConstructor(),l=ml.getPrivateIdentifierConstructor(),f=ml.getSourceFileConstructor(),Pe=So(V),Ie=me,Be=Ue,ct=ut,Ne=Lt,Le=RR(Lt),Ye=[],Qt=0,qe=new Map,zt=0,We=0,Ce=0,_n=!0,Ne){case 1:case 2:kn=262144;break;case 6:kn=67371008;break;default:kn=0;break}Gt=!1,t.setText(Ie),t.setOnError(pe),t.setScriptTarget(Be),t.setLanguageVariant(Le)}function gr(){t.clearCommentDirectives(),t.setText(\"\"),t.setOnError(void 0),Ie=void 0,Be=void 0,ct=void 0,Ne=void 0,Le=void 0,Ce=0,Ye=void 0,_t=void 0,Qt=0,qe=void 0,tn=void 0,_n=!0}function pt(V,me,Ue,ut){let Lt=Fu(Pe);Lt&&(kn|=16777216),Ce=kn,Qe();let dn=ee(0,of);L.assert(j()===1);let Er=pn(Pc()),ii=hi(Pe,V,Ue,Lt,dn,Er,Ce,ut);return dJ(ii,Ie),fJ(ii,li),ii.commentDirectives=t.getCommentDirectives(),ii.nodeCount=We,ii.identifierCount=zt,ii.identifiers=qe,ii.parseDiagnostics=vS(Ye,ii),_t&&(ii.jsDocDiagnostics=vS(_t,ii)),me&&Kn(ii),ii;function li(di,ma,is){Ye.push(t2(Pe,di,ma,is))}}function nn(V,me){return me?pn(V):V}let Dt=!1;function pn(V){L.assert(!V.jsDoc);let me=Zi(EH(V,Ie),Ue=>Mx.parseJSDocComment(V,Ue.pos,Ue.end-Ue.pos));return me.length&&(V.jsDoc=me),Dt&&(Dt=!1,V.flags|=268435456),V}function An(V){let me=ct,Ue=D3.createSyntaxCursor(V);ct={currentNode:ma};let ut=[],Lt=Ye;Ye=[];let dn=0,Er=li(V.statements,0);for(;Er!==-1;){let is=V.statements[dn],ao=V.statements[Er];si(ut,V.statements,dn,Er),dn=di(V.statements,Er);let Oo=Yc(Lt,np=>np.start>=is.pos),id=Oo>=0?Yc(Lt,np=>np.start>=ao.pos,Oo):-1;Oo>=0&&si(Ye,Lt,Oo,id>=0?id:void 0),xi(()=>{let np=kn;for(kn|=32768,t.setTextPos(ao.pos),Qe();j()!==1;){let Op=t.getStartPos(),cg=Ze(0,of);if(ut.push(cg),Op===t.getStartPos()&&Qe(),dn>=0){let Yf=V.statements[dn];if(cg.end===Yf.pos)break;cg.end>Yf.pos&&(dn=di(V.statements,dn+1))}}kn=np},2),Er=dn>=0?li(V.statements,dn):-1}if(dn>=0){let is=V.statements[dn];si(ut,V.statements,dn);let ao=Yc(Lt,Oo=>Oo.start>=is.pos);ao>=0&&si(Ye,Lt,ao)}return ct=me,m.updateSourceFile(V,it(v(ut),V.statements));function ii(is){return!(is.flags&32768)&&!!(is.transformFlags&67108864)}function li(is,ao){for(let Oo=ao;Oo<is.length;Oo++)if(ii(is[Oo]))return Oo;return-1}function di(is,ao){for(let Oo=ao;Oo<is.length;Oo++)if(!ii(is[Oo]))return Oo;return-1}function ma(is){let ao=Ue.currentNode(is);return _n&&ao&&ii(ao)&&(ao.intersectsChange=!0),ao}}function Kn(V){Zy(V,!0)}e.fixupParentReferences=Kn;function hi(V,me,Ue,ut,Lt,dn,Er,ii){let li=m.createSourceFile(Lt,dn,Er);return oL(li,0,Ie.length),di(li),!ut&&Lc(li)&&li.transformFlags&67108864&&(li=An(li),di(li)),li;function di(ma){ma.text=Ie,ma.bindDiagnostics=[],ma.bindSuggestionDiagnostics=void 0,ma.languageVersion=me,ma.fileName=V,ma.languageVariant=RR(Ue),ma.isDeclarationFile=ut,ma.scriptKind=Ue,ii(ma),ma.setExternalModuleIndicator=ii}}function ri(V,me){V?kn|=me:kn&=~me}function vn(V){ri(V,4096)}function Ht(V){ri(V,8192)}function En(V){ri(V,16384)}function dr(V){ri(V,32768)}function Cr(V,me){let Ue=V&kn;if(Ue){ri(!1,Ue);let ut=me();return ri(!0,Ue),ut}return me()}function Se(V,me){let Ue=V&~kn;if(Ue){ri(!0,Ue);let ut=me();return ri(!1,Ue),ut}return me()}function at(V){return Cr(4096,V)}function Tt(V){return Se(4096,V)}function ve(V){return Cr(65536,V)}function nt(V){return Se(65536,V)}function ce(V){return Se(8192,V)}function Q(V){return Se(16384,V)}function ue(V){return Se(32768,V)}function G(V){return Cr(32768,V)}function Oe(V){return Se(40960,V)}function je(V){return Cr(40960,V)}function Ge(V){return(kn&V)!==0}function kt(){return Ge(8192)}function Kt(){return Ge(4096)}function ln(){return Ge(65536)}function ir(){return Ge(16384)}function ae(){return Ge(32768)}function rt(V,me){return Ke(t.getTokenPos(),t.getTextPos(),V,me)}function Ot(V,me,Ue,ut){let Lt=Os(Ye),dn;return(!Lt||V!==Lt.start)&&(dn=t2(Pe,V,me,Ue,ut),Ye.push(dn)),Gt=!0,dn}function Ke(V,me,Ue,ut){return Ot(V,me-V,Ue,ut)}function oe(V,me,Ue){Ke(V.pos,V.end,me,Ue)}function pe(V,me){Ot(t.getTextPos(),me,V)}function z(){return t.getStartPos()}function Te(){return t.hasPrecedingJSDocComment()}function j(){return Rt}function yt(){return Rt=t.scan()}function lt(V){return Qe(),V()}function Qe(){return Xu(Rt)&&(t.hasUnicodeEscape()||t.hasExtendedUnicodeEscape())&&Ke(t.getTokenPos(),t.getTextPos(),_.Keywords_cannot_contain_escape_characters),yt()}function Vt(){return Rt=t.scanJsDocToken()}function Hn(){return Rt=t.reScanGreaterToken()}function jr(){return Rt=t.reScanSlashToken()}function ei(V){return Rt=t.reScanTemplateToken(V)}function Kr(){return Rt=t.reScanTemplateHeadOrNoSubstitutionTemplate()}function Si(){return Rt=t.reScanLessThanToken()}function Ja(){return Rt=t.reScanHashToken()}function Za(){return Rt=t.scanJsxIdentifier()}function Fa(){return Rt=t.scanJsxToken()}function Hi(){return Rt=t.scanJsxAttributeValue()}function xi(V,me){let Ue=Rt,ut=Ye.length,Lt=Gt,dn=kn,Er=me!==0?t.lookAhead(V):t.tryScan(V);return L.assert(dn===kn),(!Er||me!==0)&&(Rt=Ue,me!==2&&(Ye.length=ut),Gt=Lt),Er}function Nr(V){return xi(V,1)}function Fo(V){return xi(V,0)}function Qr(){return j()===79?!0:j()>116}function Wi(){return j()===79?!0:j()===125&&kt()||j()===133&&ae()?!1:j()>116}function gn(V,me,Ue=!0){return j()===V?(Ue&&Qe(),!0):(me?rt(me):rt(_._0_expected,Xa(V)),!1)}let Ki=Object.keys(Ew).filter(V=>V.length>2);function kc(V){var me;if(PT(V)){Ke(xo(Ie,V.template.pos),V.template.end,_.Module_declaration_names_may_only_use_or_quoted_strings);return}let Ue=Re(V)?vr(V):void 0;if(!Ue||!i_(Ue,Be)){rt(_._0_expected,Xa(26));return}let ut=xo(Ie,V.pos);switch(Ue){case\"const\":case\"let\":case\"var\":Ke(ut,V.end,_.Variable_declaration_not_allowed_at_this_location);return;case\"declare\":return;case\"interface\":Ps(_.Interface_name_cannot_be_0,_.Interface_must_be_given_a_name,18);return;case\"is\":Ke(ut,t.getTextPos(),_.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);return;case\"module\":case\"namespace\":Ps(_.Namespace_name_cannot_be_0,_.Namespace_must_be_given_a_name,18);return;case\"type\":Ps(_.Type_alias_name_cannot_be_0,_.Type_alias_must_be_given_a_name,63);return}let Lt=(me=$C(Ue,Ki,dn=>dn))!=null?me:mc(Ue);if(Lt){Ke(ut,V.end,_.Unknown_keyword_or_identifier_Did_you_mean_0,Lt);return}j()!==0&&Ke(ut,V.end,_.Unexpected_keyword_or_identifier)}function Ps(V,me,Ue){j()===Ue?rt(me):rt(V,t.getTokenValue())}function mc(V){for(let me of Ki)if(V.length>me.length+2&&na(V,me))return`${me} ${V.slice(me.length)}`}function xc(V,me,Ue){if(j()===59&&!t.hasPrecedingLineBreak()){rt(_.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations);return}if(j()===20){rt(_.Cannot_start_a_function_call_in_a_type_annotation),Qe();return}if(me&&!ss()){Ue?rt(_._0_expected,Xa(26)):rt(_.Expected_for_property_initializer);return}if(!qs()){if(Ue){rt(_._0_expected,Xa(26));return}kc(V)}}function hc(V){return j()===V?(Vt(),!0):(rt(_._0_expected,Xa(V)),!1)}function ro(V,me,Ue,ut){if(j()===me){Qe();return}let Lt=rt(_._0_expected,Xa(me));Ue&&Lt&&Ao(Lt,t2(Pe,ut,1,_.The_parser_expected_to_find_a_1_to_match_the_0_token_here,Xa(V),Xa(me)))}function aa(V){return j()===V?(Qe(),!0):!1}function Co(V){if(j()===V)return Pc()}function gc(V){if(j()===V)return bl()}function Ll(V,me,Ue){return Co(V)||yc(V,!1,me||_._0_expected,Ue||Xa(V))}function md(V){return gc(V)||yc(V,!1,_._0_expected,Xa(V))}function Pc(){let V=z(),me=j();return Qe(),jt(P(me),V)}function bl(){let V=z(),me=j();return Vt(),jt(P(me),V)}function ss(){return j()===26?!0:j()===19||j()===1||t.hasPrecedingLineBreak()}function qs(){return ss()?(j()===26&&Qe(),!0):!1}function Rs(){return qs()||gn(26)}function As(V,me,Ue,ut){let Lt=v(V,ut);return om(Lt,me,Ue??t.getStartPos()),Lt}function jt(V,me,Ue){return om(V,me,Ue??t.getStartPos()),kn&&(V.flags|=kn),Gt&&(Gt=!1,V.flags|=131072),V}function yc(V,me,Ue,ut){me?Ot(t.getStartPos(),0,Ue,ut):Ue&&rt(Ue,ut);let Lt=z(),dn=V===79?w(\"\",void 0):Hy(V)?m.createTemplateLiteralLikeNode(V,\"\",\"\",void 0):V===8?S(\"\",void 0):V===10?x(\"\",void 0):V===279?m.createMissingDeclaration():P(V);return jt(dn,Lt)}function Ql(V){let me=qe.get(V);return me===void 0&&qe.set(V,me=V),me}function yu(V,me,Ue){if(V){zt++;let ii=z(),li=j(),di=Ql(t.getTokenValue()),ma=t.hasExtendedUnicodeEscape();return yt(),jt(w(di,li,ma),ii)}if(j()===80)return rt(Ue||_.Private_identifiers_are_not_allowed_outside_class_bodies),yu(!0);if(j()===0&&t.tryScan(()=>t.reScanInvalidIdentifier()===79))return yu(!0);zt++;let ut=j()===1,Lt=t.isReservedWord(),dn=t.getTokenText(),Er=Lt?_.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here:_.Identifier_expected;return yc(79,ut,me||Er,dn)}function se(V){return yu(Qr(),void 0,V)}function ht(V,me){return yu(Wi(),V,me)}function wt(V){return yu(Su(j()),V)}function K(){return Su(j())||j()===10||j()===8}function Xe(){return Su(j())||j()===10}function ft(V){if(j()===10||j()===8){let me=oa();return me.text=Ql(me.text),me}return V&&j()===22?pr():j()===80?yr():wt()}function Yt(){return ft(!0)}function pr(){let V=z();gn(22);let me=at(Ml);return gn(23),jt(m.createComputedPropertyName(me),V)}function yr(){let V=z(),me=C(Ql(t.getTokenValue()));return Qe(),jt(me,V)}function ta(V){return j()===V&&Fo(Ka)}function Go(){return Qe(),t.hasPrecedingLineBreak()?!1:Uc()}function Ka(){switch(j()){case 85:return Qe()===92;case 93:return Qe(),j()===88?Nr(Gu):j()===154?Nr(ka):vo();case 88:return Gu();case 124:case 137:case 151:return Qe(),Uc();default:return Go()}}function vo(){return j()===59||j()!==41&&j()!==128&&j()!==18&&Uc()}function ka(){return Qe(),vo()}function Hs(){return Rg(j())&&Fo(Ka)}function Uc(){return j()===22||j()===18||j()===41||j()===25||K()}function Gu(){return Qe(),j()===84||j()===98||j()===118||j()===59||j()===126&&Nr(Em)||j()===132&&Nr(Jb)}function $o(V,me){if(At(V))return!0;switch(V){case 0:case 1:case 3:return!(j()===26&&me)&&C1();case 2:return j()===82||j()===88;case 4:return Nr(dE);case 5:return Nr(rd)||j()===26&&!me;case 6:return j()===22||K();case 12:switch(j()){case 22:case 41:case 25:case 24:return!0;default:return K()}case 18:return K();case 9:return j()===22||j()===25||K();case 24:return Xe();case 7:return j()===18?Nr(jo):me?Wi()&&!nf():Pb()&&!nf();case 8:return IE();case 10:return j()===27||j()===25||IE();case 19:return j()===101||j()===85||Wi();case 15:switch(j()){case 27:case 24:return!0}case 11:return j()===25||C_();case 16:return Cb(!1);case 17:return Cb(!0);case 20:case 21:return j()===27||qh();case 22:return lh();case 23:return Su(j());case 13:return Su(j())||j()===18;case 14:return!0}return L.fail(\"Non-exhaustive case in 'isListElement'.\")}function jo(){if(L.assert(j()===18),Qe()===19){let V=Qe();return V===27||V===18||V===94||V===117}return!0}function Ws(){return Qe(),Wi()}function hd(){return Qe(),Su(j())}function vc(){return Qe(),moe(j())}function nf(){return j()===117||j()===94?Nr(ye):!1}function ye(){return Qe(),C_()}function Et(){return Qe(),qh()}function bn(V){if(j()===1)return!0;switch(V){case 1:case 2:case 4:case 5:case 6:case 12:case 9:case 23:case 24:return j()===19;case 3:return j()===19||j()===82||j()===88;case 7:return j()===18||j()===94||j()===117;case 8:return Ri();case 19:return j()===31||j()===20||j()===18||j()===94||j()===117;case 11:return j()===21||j()===26;case 15:case 21:case 10:return j()===23;case 17:case 16:case 18:return j()===21||j()===23;case 20:return j()!==27;case 22:return j()===18||j()===19;case 13:return j()===31||j()===43;case 14:return j()===29&&Nr(Wa);default:return!1}}function Ri(){return!!(ss()||b1(j())||j()===38)}function io(){for(let V=0;V<25;V++)if(Qt&1<<V&&($o(V,!0)||bn(V)))return!0;return!1}function ee(V,me){let Ue=Qt;Qt|=1<<V;let ut=[],Lt=z();for(;!bn(V);){if($o(V,!1)){ut.push(Ze(V,me));continue}if(Bu(V))break}return Qt=Ue,As(ut,Lt)}function Ze(V,me){let Ue=At(V);return Ue?xt(Ue):me()}function At(V,me){var Ue;if(!ct||!qt(V)||Gt)return;let ut=ct.currentNode(me??t.getStartPos());if(!(rc(ut)||ut.intersectsChange||Gw(ut)||(ut.flags&50720768)!==kn)&&Ln(ut,V))return lR(ut)&&((Ue=ut.jsDoc)!=null&&Ue.jsDocCache)&&(ut.jsDoc.jsDocCache=void 0),ut}function xt(V){return t.setTextPos(V.end),Qe(),V}function qt(V){switch(V){case 5:case 2:case 0:case 1:case 3:case 6:case 4:case 8:case 17:case 16:return!0}return!1}function Ln(V,me){switch(me){case 5:return mr(V);case 2:return Vr(V);case 0:case 1:case 3:return gi(V);case 6:return Ea(V);case 4:return bo(V);case 8:return Qo(V);case 17:case 16:return Cs(V)}return!1}function mr(V){if(V)switch(V.kind){case 173:case 178:case 174:case 175:case 169:case 237:return!0;case 171:let me=V;return!(me.name.kind===79&&me.name.escapedText===\"constructor\")}return!1}function Vr(V){if(V)switch(V.kind){case 292:case 293:return!0}return!1}function gi(V){if(V)switch(V.kind){case 259:case 240:case 238:case 242:case 241:case 254:case 250:case 252:case 249:case 248:case 246:case 247:case 245:case 244:case 251:case 239:case 255:case 253:case 243:case 256:case 269:case 268:case 275:case 274:case 264:case 260:case 261:case 263:case 262:return!0}return!1}function Ea(V){return V.kind===302}function bo(V){if(V)switch(V.kind){case 177:case 170:case 178:case 168:case 176:return!0}return!1}function Qo(V){return V.kind!==257?!1:V.initializer===void 0}function Cs(V){return V.kind!==166?!1:V.initializer===void 0}function Bu(V){return Pd(V),io()?!0:(Qe(),!1)}function Pd(V){switch(V){case 0:return j()===88?rt(_._0_expected,Xa(93)):rt(_.Declaration_or_statement_expected);case 1:return rt(_.Declaration_or_statement_expected);case 2:return rt(_.case_or_default_expected);case 3:return rt(_.Statement_expected);case 18:case 4:return rt(_.Property_or_signature_expected);case 5:return rt(_.Unexpected_token_A_constructor_method_accessor_or_property_was_expected);case 6:return rt(_.Enum_member_expected);case 7:return rt(_.Expression_expected);case 8:return Xu(j())?rt(_._0_is_not_allowed_as_a_variable_declaration_name,Xa(j())):rt(_.Variable_declaration_expected);case 9:return rt(_.Property_destructuring_pattern_expected);case 10:return rt(_.Array_element_destructuring_pattern_expected);case 11:return rt(_.Argument_expression_expected);case 12:return rt(_.Property_assignment_expected);case 15:return rt(_.Expression_or_comma_expected);case 17:return rt(_.Parameter_declaration_expected);case 16:return Xu(j())?rt(_._0_is_not_allowed_as_a_parameter_name,Xa(j())):rt(_.Parameter_declaration_expected);case 19:return rt(_.Type_parameter_declaration_expected);case 20:return rt(_.Type_argument_expected);case 21:return rt(_.Type_expected);case 22:return rt(_.Unexpected_token_expected);case 23:return rt(_.Identifier_expected);case 13:return rt(_.Identifier_expected);case 14:return rt(_.Identifier_expected);case 24:return rt(_.Identifier_or_string_literal_expected);case 25:return L.fail(\"ParsingContext.Count used as a context\");default:L.assertNever(V)}}function Dc(V,me,Ue){let ut=Qt;Qt|=1<<V;let Lt=[],dn=z(),Er=-1;for(;;){if($o(V,!1)){let ii=t.getStartPos(),li=Ze(V,me);if(!li){Qt=ut;return}if(Lt.push(li),Er=t.getTokenPos(),aa(27))continue;if(Er=-1,bn(V))break;gn(27,gd(V)),Ue&&j()===26&&!t.hasPrecedingLineBreak()&&Qe(),ii===t.getStartPos()&&Qe();continue}if(bn(V)||Bu(V))break}return Qt=ut,As(Lt,dn,void 0,Er>=0)}function gd(V){return V===6?_.An_enum_member_name_must_be_followed_by_a_or:void 0}function Zl(){let V=As([],z());return V.isMissingList=!0,V}function Md(V){return!!V.isMissingList}function zf(V,me,Ue,ut){if(gn(Ue)){let Lt=Dc(V,me);return gn(ut),Lt}return Zl()}function Io(V,me){let Ue=z(),ut=V?wt(me):ht(me);for(;aa(24)&&j()!==29;)ut=jt(m.createQualifiedName(ut,Fd(V,!1)),Ue);return ut}function Jf(V,me){return jt(m.createQualifiedName(V,me),V.pos)}function Fd(V,me){if(t.hasPrecedingLineBreak()&&Su(j())&&Nr(Vu))return yc(79,!0,_.Identifier_expected);if(j()===80){let Ue=yr();return me?Ue:yc(79,!0,_.Identifier_expected)}return V?wt():ht()}function E_(V){let me=z(),Ue=[],ut;do ut=la(V),Ue.push(ut);while(ut.literal.kind===16);return As(Ue,me)}function Y_(V){let me=z();return jt(m.createTemplateExpression(be(V),E_(V)),me)}function M(){let V=z();return jt(m.createTemplateLiteralType(be(!1),He()),V)}function He(){let V=z(),me=[],Ue;do Ue=Nt(),me.push(Ue);while(Ue.literal.kind===16);return As(me,V)}function Nt(){let V=z();return jt(m.createTemplateLiteralTypeSpan(Kc(),Pn(!1)),V)}function Pn(V){return j()===19?(ei(V),De()):Ll(17,_._0_expected,Xa(19))}function la(V){let me=z();return jt(m.createTemplateSpan(at(Ml),Pn(V)),me)}function oa(){return St(j())}function be(V){V&&Kr();let me=St(j());return L.assert(me.kind===15,\"Template head has wrong token kind\"),me}function De(){let V=St(j());return L.assert(V.kind===16||V.kind===17,\"Template fragment has wrong token kind\"),V}function mt(V){let me=V===14||V===17,Ue=t.getTokenText();return Ue.substring(1,Ue.length-(t.isUnterminated()?0:me?1:2))}function St(V){let me=z(),Ue=Hy(V)?m.createTemplateLiteralLikeNode(V,t.getTokenValue(),mt(V),t.getTokenFlags()&2048):V===8?S(t.getTokenValue(),t.getNumericLiteralFlags()):V===10?x(t.getTokenValue(),void 0,t.hasExtendedUnicodeEscape()):gI(V)?A(V,t.getTokenValue()):L.fail();return t.hasExtendedUnicodeEscape()&&(Ue.hasExtendedUnicodeEscape=!0),t.isUnterminated()&&(Ue.isUnterminated=!0),Qe(),jt(Ue,me)}function Zt(){return Io(!0,_.Type_expected)}function rn(){if(!t.hasPrecedingLineBreak()&&Si()===29)return zf(20,Kc,29,31)}function sn(){let V=z();return jt(m.createTypeReferenceNode(Zt(),rn()),V)}function Dn(V){switch(V.kind){case 180:return rc(V.typeName);case 181:case 182:{let{parameters:me,type:Ue}=V;return Md(me)||Dn(Ue)}case 193:return Dn(V.type);default:return!1}}function kr(V){return Qe(),jt(m.createTypePredicateNode(void 0,V,Kc()),V.pos)}function ki(){let V=z();return Qe(),jt(m.createThisTypeNode(),V)}function Vn(){let V=z();return Qe(),jt(m.createJSDocAllType(),V)}function $t(){let V=z();return Qe(),jt(m.createJSDocNonNullableType(wb(),!1),V)}function Xn(){let V=z();return Qe(),j()===27||j()===19||j()===21||j()===31||j()===63||j()===51?jt(m.createJSDocUnknownType(),V):jt(m.createJSDocNullableType(Kc(),!1),V)}function ra(){let V=z(),me=Te();if(Nr(qr)){Qe();let Ue=$_(36),ut=S_(58,!1);return nn(jt(m.createJSDocFunctionType(Ue,ut),V),me)}return jt(m.createTypeReferenceNode(wt(),void 0),V)}function Is(){let V=z(),me;return(j()===108||j()===103)&&(me=wt(),gn(58)),jt(m.createParameterDeclaration(void 0,void 0,me,void 0,Mc(),void 0),V)}function Mc(){t.setInJSDocType(!0);let V=z();if(aa(142)){let ut=m.createJSDocNamepathType(void 0);e:for(;;)switch(j()){case 19:case 1:case 27:case 5:break e;default:Vt()}return t.setInJSDocType(!1),jt(ut,V)}let me=aa(25),Ue=wo();return t.setInJSDocType(!1),me&&(Ue=jt(m.createJSDocVariadicType(Ue),V)),j()===63?(Qe(),jt(m.createJSDocOptionalType(Ue),V)):Ue}function mm(){let V=z();gn(112);let me=Io(!0),Ue=t.hasPrecedingLineBreak()?void 0:bd();return jt(m.createTypeQueryNode(me,Ue),V)}function Hh(){let V=z(),me=ls(!1,!0),Ue=ht(),ut,Lt;aa(94)&&(qh()||!C_()?ut=Kc():Lt=Q_());let dn=aa(63)?Kc():void 0,Er=m.createTypeParameterDeclaration(me,Ue,ut,dn);return Er.expression=Lt,jt(Er,V)}function T_(){if(j()===29)return zf(19,Hh,29,31)}function Cb(V){return j()===25||IE()||Rg(j())||j()===59||qh(!V)}function mv(V){let me=cy(_.Private_identifiers_cannot_be_used_as_parameters);return Fw(me)===0&&!vt(V)&&Rg(j())&&Qe(),me}function gx(){return Qr()||j()===22||j()===18}function _1(V){return Wh(V)}function yx(V){return Wh(V,!1)}function Wh(V,me=!0){let Ue=z(),ut=Te(),Lt=V?ue(()=>ls(!0)):G(()=>ls(!0));if(j()===108){let li=m.createParameterDeclaration(Lt,void 0,yu(!0),void 0,th(),void 0),di=Sl(Lt);return di&&oe(di,_.Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters),nn(jt(li,Ue),ut)}let dn=_n;_n=!1;let Er=Co(25);if(!me&&!gx())return;let ii=nn(jt(m.createParameterDeclaration(Lt,Er,mv(Lt),Co(57),th(),Yh()),Ue),ut);return _n=dn,ii}function S_(V,me){if(hv(V,me))return ve(wo)}function hv(V,me){return V===38?(gn(V),!0):aa(58)?!0:me&&j()===38?(rt(_._0_expected,Xa(58)),Qe(),!0):!1}function eh(V,me){let Ue=kt(),ut=ae();Ht(!!(V&1)),dr(!!(V&2));let Lt=V&32?Dc(17,Is):Dc(16,()=>me?_1(ut):yx(ut));return Ht(Ue),dr(ut),Lt}function $_(V){if(!gn(20))return Zl();let me=eh(V,!0);return gn(21),me}function gv(){aa(27)||Rs()}function lE(V){let me=z(),Ue=Te();V===177&&gn(103);let ut=T_(),Lt=$_(4),dn=S_(58,!0);gv();let Er=V===176?m.createCallSignature(ut,Lt,dn):m.createConstructSignature(ut,Lt,dn);return nn(jt(Er,me),Ue)}function Ib(){return j()===22&&Nr(zh)}function zh(){if(Qe(),j()===25||j()===23)return!0;if(Rg(j())){if(Qe(),Wi())return!0}else if(Wi())Qe();else return!1;return j()===58||j()===27?!0:j()!==57?!1:(Qe(),j()===58||j()===27||j()===23)}function p1(V,me,Ue){let ut=zf(16,()=>_1(!1),22,23),Lt=th();gv();let dn=m.createIndexSignature(Ue,ut,Lt);return nn(jt(dn,V),me)}function uE(V,me,Ue){let ut=Yt(),Lt=Co(57),dn;if(j()===20||j()===29){let Er=T_(),ii=$_(4),li=S_(58,!0);dn=m.createMethodSignature(Ue,ut,Lt,Er,ii,li)}else{let Er=th();dn=m.createPropertySignature(Ue,ut,Lt,Er),j()===63&&(dn.initializer=Yh())}return gv(),nn(jt(dn,V),me)}function dE(){if(j()===20||j()===29||j()===137||j()===151)return!0;let V=!1;for(;Rg(j());)V=!0,Qe();return j()===22?!0:(K()&&(V=!0,Qe()),V?j()===20||j()===29||j()===57||j()===58||j()===27||ss():!1)}function fE(){if(j()===20||j()===29)return lE(176);if(j()===103&&Nr(yv))return lE(177);let V=z(),me=Te(),Ue=ls(!1);return ta(137)?Tm(V,me,Ue,174,4):ta(151)?Tm(V,me,Ue,175,4):Ib()?p1(V,me,Ue):uE(V,me,Ue)}function yv(){return Qe(),j()===20||j()===29}function vx(){return Qe()===24}function _E(){switch(Qe()){case 20:case 29:case 24:return!0}return!1}function pE(){let V=z();return jt(m.createTypeLiteralNode(vv()),V)}function vv(){let V;return gn(18)?(V=ee(4,fE),gn(19)):V=Zl(),V}function Lb(){return Qe(),j()===39||j()===40?Qe()===146:(j()===146&&Qe(),j()===22&&Ws()&&Qe()===101)}function bv(){let V=z(),me=wt();gn(101);let Ue=Kc();return jt(m.createTypeParameterDeclaration(void 0,me,Ue,void 0),V)}function m1(){let V=z();gn(18);let me;(j()===146||j()===39||j()===40)&&(me=Pc(),me.kind!==146&&gn(146)),gn(22);let Ue=bv(),ut=aa(128)?Kc():void 0;gn(23);let Lt;(j()===57||j()===39||j()===40)&&(Lt=Pc(),Lt.kind!==57&&gn(57));let dn=th();Rs();let Er=ee(4,fE);return gn(19),jt(m.createMappedTypeNode(me,Ue,ut,Lt,dn,Er),V)}function Jh(){let V=z();if(aa(25))return jt(m.createRestTypeNode(Kc()),V);let me=Kc();if(T2(me)&&me.pos===me.type.pos){let Ue=m.createOptionalTypeNode(me.type);return it(Ue,me),Ue.flags=me.flags,Ue}return me}function Lo(){return Qe()===58||j()===57&&Qe()===58}function mE(){return j()===25?Su(Qe())&&Lo():Su(j())&&Lo()}function sC(){if(Nr(mE)){let V=z(),me=Te(),Ue=Co(25),ut=wt(),Lt=Co(57);gn(58);let dn=Jh(),Er=m.createNamedTupleMember(Ue,ut,Lt,dn);return nn(jt(Er,V),me)}return Jh()}function Zg(){let V=z();return jt(m.createTupleTypeNode(zf(21,sC,22,23)),V)}function Kh(){let V=z();gn(20);let me=Kc();return gn(21),jt(m.createParenthesizedType(me),V)}function hm(){let V;if(j()===126){let me=z();Qe();let Ue=jt(P(126),me);V=As([Ue],me)}return V}function x_(){let V=z(),me=Te(),Ue=hm(),ut=aa(103);L.assert(!Ue||ut,\"Per isStartOfFunctionOrConstructorType, a function type cannot have modifiers.\");let Lt=T_(),dn=$_(4),Er=S_(38,!1),ii=ut?m.createConstructorTypeNode(Ue,Lt,dn,Er):m.createFunctionTypeNode(Lt,dn,Er);return nn(jt(ii,V),me)}function Zu(){let V=Pc();return j()===24?void 0:V}function ed(V){let me=z();V&&Qe();let Ue=j()===110||j()===95||j()===104?Pc():St(j());return V&&(Ue=jt(m.createPrefixUnaryExpression(40,Ue),me)),jt(m.createLiteralTypeNode(Ue),me)}function td(){return Qe(),j()===100}function kb(){let V=z(),me=t.getTokenPos();gn(18);let Ue=t.hasPrecedingLineBreak();gn(130),gn(58);let ut=fy(!0);if(!gn(19)){let Lt=Os(Ye);Lt&&Lt.code===_._0_expected.code&&Ao(Lt,t2(Pe,me,1,_.The_parser_expected_to_find_a_1_to_match_the_0_token_here,\"{\",\"}\"))}return jt(m.createImportTypeAssertionContainer(ut,Ue),V)}function Db(){Ce|=2097152;let V=z(),me=aa(112);gn(100),gn(20);let Ue=Kc(),ut;aa(27)&&(ut=kb()),gn(21);let Lt=aa(24)?Zt():void 0,dn=rn();return jt(m.createImportTypeNode(Ue,ut,Lt,dn,me),V)}function bx(){return Qe(),j()===8||j()===9}function wb(){switch(j()){case 131:case 157:case 152:case 148:case 160:case 153:case 134:case 155:case 144:case 149:return Fo(Zu)||sn();case 66:t.reScanAsteriskEqualsToken();case 41:return Vn();case 60:t.reScanQuestionToken();case 57:return Xn();case 98:return ra();case 53:return $t();case 14:case 10:case 8:case 9:case 110:case 95:case 104:return ed();case 40:return Nr(bx)?ed(!0):sn();case 114:return Pc();case 108:{let V=ki();return j()===140&&!t.hasPrecedingLineBreak()?kr(V):V}case 112:return Nr(td)?Db():mm();case 18:return Nr(Lb)?m1():pE();case 22:return Zg();case 20:return Kh();case 100:return Db();case 129:return Nr(Vu)?gE():sn();case 15:return M();default:return sn()}}function qh(V){switch(j()){case 131:case 157:case 152:case 148:case 160:case 134:case 146:case 153:case 156:case 114:case 155:case 104:case 108:case 112:case 144:case 18:case 22:case 29:case 51:case 50:case 103:case 10:case 8:case 9:case 110:case 95:case 149:case 41:case 57:case 53:case 25:case 138:case 100:case 129:case 14:case 15:return!0;case 98:return!V;case 40:return!V&&Nr(bx);case 20:return!V&&Nr(Rb);default:return Wi()}}function Rb(){return Qe(),j()===21||Cb(!1)||qh()}function h1(){let V=z(),me=wb();for(;!t.hasPrecedingLineBreak();)switch(j()){case 53:Qe(),me=jt(m.createJSDocNonNullableType(me,!0),V);break;case 57:if(Nr(Et))return me;Qe(),me=jt(m.createJSDocNullableType(me,!0),V);break;case 22:if(gn(22),qh()){let Ue=Kc();gn(23),me=jt(m.createIndexedAccessTypeNode(me,Ue),V)}else gn(23),me=jt(m.createArrayTypeNode(me),V);break;default:return me}return me}function Ob(V){let me=z();return gn(V),jt(m.createTypeOperatorNode(V,hE()),me)}function cC(){if(aa(94)){let V=nt(Kc);if(ln()||j()!==57)return V}}function Ex(){let V=z(),me=ht(),Ue=Fo(cC),ut=m.createTypeParameterDeclaration(void 0,me,Ue);return jt(ut,V)}function Ev(){let V=z();return gn(138),jt(m.createInferTypeNode(Ex()),V)}function hE(){let V=j();switch(V){case 141:case 156:case 146:return Ob(V);case 138:return Ev()}return ve(h1)}function Fe(V){if(Sv()){let me=x_(),Ue;return Jm(me)?Ue=V?_.Function_type_notation_must_be_parenthesized_when_used_in_a_union_type:_.Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type:Ue=V?_.Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type:_.Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type,oe(me,Ue),me}}function ey(V,me,Ue){let ut=z(),Lt=V===51,dn=aa(V),Er=dn&&Fe(Lt)||me();if(j()===V||dn){let ii=[Er];for(;aa(V);)ii.push(Fe(Lt)||me());Er=jt(Ue(As(ii,ut)),ut)}return Er}function Ip(){return ey(50,hE,m.createIntersectionTypeNode)}function Tv(){return ey(51,Ip,m.createUnionTypeNode)}function Nb(){return Qe(),j()===103}function Sv(){return j()===29||j()===20&&Nr(g1)?!0:j()===103||j()===126&&Nr(Nb)}function Xh(){if(Rg(j())&&ls(!1),Wi()||j()===108)return Qe(),!0;if(j()===22||j()===18){let V=Ye.length;return cy(),V===Ye.length}return!1}function g1(){return Qe(),!!(j()===21||j()===25||Xh()&&(j()===58||j()===27||j()===57||j()===63||j()===21&&(Qe(),j()===38)))}function wo(){let V=z(),me=Wi()&&Fo(A_),Ue=Kc();return me?jt(m.createTypePredicateNode(void 0,me,Ue),V):Ue}function A_(){let V=ht();if(j()===140&&!t.hasPrecedingLineBreak())return Qe(),V}function gE(){let V=z(),me=Ll(129),Ue=j()===108?ki():ht(),ut=aa(140)?Kc():void 0;return jt(m.createTypePredicateNode(me,Ue,ut),V)}function Kc(){if(kn&40960)return Cr(40960,Kc);if(Sv())return x_();let V=z(),me=Tv();if(!ln()&&!t.hasPrecedingLineBreak()&&aa(94)){let Ue=nt(Kc);gn(57);let ut=ve(Kc);gn(58);let Lt=ve(Kc);return jt(m.createConditionalTypeNode(me,Ue,ut,Lt),V)}return me}function th(){return aa(58)?Kc():void 0}function Pb(){switch(j()){case 108:case 106:case 104:case 110:case 95:case 8:case 9:case 10:case 14:case 15:case 20:case 22:case 18:case 98:case 84:case 103:case 43:case 68:case 79:return!0;case 100:return Nr(_E);default:return Wi()}}function C_(){if(Pb())return!0;switch(j()){case 39:case 40:case 54:case 53:case 89:case 112:case 114:case 45:case 46:case 29:case 133:case 125:case 80:case 59:return!0;default:return Tx()?!0:Wi()}}function Mb(){return j()!==18&&j()!==98&&j()!==84&&j()!==59&&C_()}function Ml(){let V=ir();V&&En(!1);let me=z(),Ue=ll(!0),ut;for(;ut=Co(27);)Ue=xv(Ue,ut,ll(!0),me);return V&&En(!0),Ue}function Yh(){return aa(63)?ll(!0):void 0}function ll(V){if(y1())return Ai();let me=gm(V)||nh(V);if(me)return me;let Ue=z(),ut=Gb(0);return ut.kind===79&&j()===38?Rr(Ue,ut,V,void 0):Ju(ut)&&Mg(Hn())?xv(ut,Pc(),ll(V),Ue):v1(ut,Ue,V)}function y1(){return j()===125?kt()?!0:Nr(Lv):!1}function lC(){return Qe(),!t.hasPrecedingLineBreak()&&Wi()}function Ai(){let V=z();return Qe(),!t.hasPrecedingLineBreak()&&(j()===41||C_())?jt(m.createYieldExpression(Co(41),ll(!0)),V):jt(m.createYieldExpression(void 0,void 0),V)}function Rr(V,me,Ue,ut){L.assert(j()===38,\"parseSimpleArrowFunctionExpression should only have been called if we had a =>\");let Lt=m.createParameterDeclaration(void 0,void 0,me,void 0,void 0,void 0);jt(Lt,me.pos);let dn=As([Lt],Lt.pos,Lt.end),Er=Ll(38),ii=Fb(!!ut,Ue),li=m.createArrowFunction(ut,void 0,dn,void 0,Er,ii);return pn(jt(li,V))}function gm(V){let me=yd();if(me!==0)return me===1?zs(!0,!0):Fo(()=>$h(V))}function yd(){return j()===20||j()===29||j()===132?Nr(yE):j()===38?1:0}function yE(){if(j()===132&&(Qe(),t.hasPrecedingLineBreak()||j()!==20&&j()!==29))return 0;let V=j(),me=Qe();if(V===20){if(me===21)switch(Qe()){case 38:case 58:case 18:return 1;default:return 0}if(me===22||me===18)return 2;if(me===25)return 1;if(Rg(me)&&me!==132&&Nr(Ws))return Qe()===128?0:1;if(!Wi()&&me!==108)return 0;switch(Qe()){case 58:return 1;case 57:return Qe(),j()===58||j()===27||j()===63||j()===21?1:0;case 27:case 63:case 21:return 2}return 0}else return L.assert(V===29),!Wi()&&j()!==85?0:Le===1?Nr(()=>{aa(85);let ut=Qe();if(ut===94)switch(Qe()){case 63:case 31:case 43:return!1;default:return!0}else if(ut===27||ut===63)return!0;return!1})?1:0:2}function $h(V){let me=t.getTokenPos();if(tn?.has(me))return;let Ue=zs(!1,V);return Ue||(tn||(tn=new Set)).add(me),Ue}function nh(V){if(j()===132&&Nr(ym)===1){let me=z(),Ue=kE(),ut=Gb(0);return Rr(me,ut,V,Ue)}}function ym(){if(j()===132){if(Qe(),t.hasPrecedingLineBreak()||j()===38)return 0;let V=Gb(0);if(!t.hasPrecedingLineBreak()&&V.kind===79&&j()===38)return 1}return 0}function zs(V,me){let Ue=z(),ut=Te(),Lt=kE(),dn=vt(Lt,mL)?2:0,Er=T_(),ii;if(gn(20)){if(V)ii=eh(dn,V);else{let Op=eh(dn,V);if(!Op)return;ii=Op}if(!gn(21)&&!V)return}else{if(!V)return;ii=Zl()}let li=j()===58,di=S_(58,!1);if(di&&!V&&Dn(di))return;let ma=di;for(;ma?.kind===193;)ma=ma.type;let is=ma&&S2(ma);if(!V&&j()!==38&&(is||j()!==18))return;let ao=j(),Oo=Ll(38),id=ao===38||ao===18?Fb(vt(Lt,mL),me):ht();if(!me&&li&&j()!==58)return;let np=m.createArrowFunction(Lt,Er,ii,di,Oo,id);return nn(jt(np,Ue),ut)}function Fb(V,me){if(j()===18)return nd(V?2:0);if(j()!==26&&j()!==98&&j()!==84&&C1()&&!Mb())return nd(16|(V?2:0));let Ue=_n;_n=!1;let ut=V?ue(()=>ll(me)):G(()=>ll(me));return _n=Ue,ut}function v1(V,me,Ue){let ut=Co(57);if(!ut)return V;let Lt;return jt(m.createConditionalExpression(V,ut,Cr(r,()=>ll(!1)),Lt=Ll(58),Pf(Lt)?ll(Ue):yc(79,!1,_._0_expected,Xa(58))),me)}function Gb(V){let me=z(),Ue=Q_();return Cf(V,Ue,me)}function b1(V){return V===101||V===162}function Cf(V,me,Ue){for(;;){Hn();let ut=vR(j());if(!(j()===42?ut>=V:ut>V)||j()===101&&Kt())break;if(j()===128||j()===150){if(t.hasPrecedingLineBreak())break;{let dn=j();Qe(),me=dn===150?Sx(me,Kc()):E1(me,Kc())}}else me=xv(me,Pc(),Gb(ut),Ue)}return me}function Tx(){return Kt()&&j()===101?!1:vR(j())>0}function Sx(V,me){return jt(m.createSatisfiesExpression(V,me),V.pos)}function xv(V,me,Ue,ut){return jt(m.createBinaryExpression(V,me,Ue),ut)}function E1(V,me){return jt(m.createAsExpression(V,me),V.pos)}function T1(){let V=z();return jt(m.createPrefixUnaryExpression(j(),lt(I_)),V)}function xx(){let V=z();return jt(m.createDeleteExpression(lt(I_)),V)}function Bb(){let V=z();return jt(m.createTypeOfExpression(lt(I_)),V)}function S1(){let V=z();return jt(m.createVoidExpression(lt(I_)),V)}function rf(){return j()===133?ae()?!0:Nr(Lv):!1}function Qh(){let V=z();return jt(m.createAwaitExpression(lt(I_)),V)}function Q_(){if(Ax()){let Ue=z(),ut=Ub();return j()===42?Cf(vR(j()),ut,Ue):ut}let V=j(),me=I_();if(j()===42){let Ue=xo(Ie,me.pos),{end:ut}=me;me.kind===213?Ke(Ue,ut,_.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses):Ke(Ue,ut,_.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses,Xa(V))}return me}function I_(){switch(j()){case 39:case 40:case 54:case 53:return T1();case 89:return xx();case 112:return Bb();case 114:return S1();case 29:return Le===1?Zh(!0):Ix();case 133:if(rf())return Qh();default:return Ub()}}function Ax(){switch(j()){case 39:case 40:case 54:case 53:case 89:case 112:case 114:case 133:return!1;case 29:if(Le!==1)return!1;default:return!0}}function Ub(){if(j()===45||j()===46){let me=z();return jt(m.createPrefixUnaryExpression(j(),lt(Lp)),me)}else if(Le===1&&j()===29&&Nr(vc))return Zh(!0);let V=Lp();if(L.assert(Ju(V)),(j()===45||j()===46)&&!t.hasPrecedingLineBreak()){let me=j();return Qe(),jt(m.createPostfixUnaryExpression(V,me),V.pos)}return V}function Lp(){let V=z(),me;return j()===100?Nr(yv)?(Ce|=2097152,me=Pc()):Nr(vx)?(Qe(),Qe(),me=jt(m.createMetaProperty(100,wt()),V),Ce|=4194304):me=x1():me=j()===106?Uu():x1(),Wn(V,me)}function x1(){let V=z(),me=Kf();return af(V,me,!0)}function Uu(){let V=z(),me=Pc();if(j()===29){let Ue=z(),ut=Fo(ry);ut!==void 0&&(Ke(Ue,z(),_.super_may_not_use_type_arguments),Av()||(me=m.createExpressionWithTypeArguments(me,ut)))}return j()===20||j()===24||j()===22?me:(Ll(24,_.super_must_be_followed_by_an_argument_list_or_member_access),jt(q(me,Fd(!0,!0)),V))}function Zh(V,me,Ue){let ut=z(),Lt=A1(V),dn;if(Lt.kind===283){let Er=eg(Lt),ii,li=Er[Er.length-1];if(li?.kind===281&&!yb(li.openingElement.tagName,li.closingElement.tagName)&&yb(Lt.tagName,li.closingElement.tagName)){let di=li.children.end,ma=jt(m.createJsxElement(li.openingElement,li.children,jt(m.createJsxClosingElement(jt(w(\"\"),di,di)),di,di)),li.openingElement.pos,di);Er=As([...Er.slice(0,Er.length-1),ma],Er.pos,di),ii=li.closingElement}else ii=Vb(Lt,V),yb(Lt.tagName,ii.tagName)||(Ue&&Xm(Ue)&&yb(ii.tagName,Ue.tagName)?oe(Lt.tagName,_.JSX_element_0_has_no_corresponding_closing_tag,AI(Ie,Lt.tagName)):oe(ii.tagName,_.Expected_corresponding_JSX_closing_tag_for_0,AI(Ie,Lt.tagName)));dn=jt(m.createJsxElement(Lt,Er,ii),ut)}else Lt.kind===286?dn=jt(m.createJsxFragment(Lt,eg(Lt),jb(V)),ut):(L.assert(Lt.kind===282),dn=Lt);if(V&&j()===29){let Er=typeof me>\"u\"?dn.pos:me,ii=Fo(()=>Zh(!0,Er));if(ii){let li=yc(27,!1);return oL(li,ii.pos,0),Ke(xo(Ie,Er),ii.end,_.JSX_expressions_must_have_one_parent_element),jt(m.createBinaryExpression(dn,li,ii),ut)}}return dn}function kp(){let V=z(),me=m.createJsxText(t.getTokenValue(),Rt===12);return Rt=t.scanJsxToken(),jt(me,V)}function Dp(V,me){switch(me){case 1:if(US(V))oe(V,_.JSX_fragment_has_no_corresponding_closing_tag);else{let Ue=V.tagName,ut=xo(Ie,Ue.pos);Ke(ut,Ue.end,_.JSX_element_0_has_no_corresponding_closing_tag,AI(Ie,V.tagName))}return;case 30:case 7:return;case 11:case 12:return kp();case 18:return bE(!1);case 29:return Zh(!1,void 0,V);default:return L.assertNever(me)}}function eg(V){let me=[],Ue=z(),ut=Qt;for(Qt|=16384;;){let Lt=Dp(V,Rt=t.reScanJsxToken());if(!Lt||(me.push(Lt),Xm(V)&&Lt?.kind===281&&!yb(Lt.openingElement.tagName,Lt.closingElement.tagName)&&yb(V.tagName,Lt.closingElement.tagName)))break}return Qt=ut,As(me,Ue)}function vE(){let V=z();return jt(m.createJsxAttributes(ee(13,cs)),V)}function A1(V){let me=z();if(gn(29),j()===31)return Fa(),jt(m.createJsxOpeningFragment(),me);let Ue=ty(),ut=kn&262144?void 0:bd(),Lt=vE(),dn;return j()===31?(Fa(),dn=m.createJsxOpeningElement(Ue,ut,Lt)):(gn(43),gn(31,void 0,!1)&&(V?Qe():Fa()),dn=m.createJsxSelfClosingElement(Ue,ut,Lt)),jt(dn,me)}function ty(){let V=z();Za();let me=j()===108?Pc():wt();for(;aa(24);)me=jt(q(me,Fd(!0,!1)),V);return me}function bE(V){let me=z();if(!gn(18))return;let Ue,ut;return j()!==19&&(Ue=Co(25),ut=Ml()),V?gn(19):gn(19,void 0,!1)&&Fa(),jt(m.createJsxExpression(Ue,ut),me)}function cs(){if(j()===18)return Cx();Za();let V=z();return jt(m.createJsxAttribute(wt(),ny()),V)}function ny(){if(j()===63){if(Hi()===10)return oa();if(j()===18)return bE(!0);if(j()===29)return Zh(!0);rt(_.or_JSX_element_expected)}}function Cx(){let V=z();gn(18),gn(25);let me=Ml();return gn(19),jt(m.createJsxSpreadAttribute(me),V)}function Vb(V,me){let Ue=z();gn(30);let ut=ty();return gn(31,void 0,!1)&&(me||!yb(V.tagName,ut)?Qe():Fa()),jt(m.createJsxClosingElement(ut),Ue)}function jb(V){let me=z();return gn(30),gn(31,_.Expected_corresponding_closing_tag_for_JSX_fragment,!1)&&(V?Qe():Fa()),jt(m.createJsxJsxClosingFragment(),me)}function Ix(){L.assert(Le!==1,\"Type assertions should never be parsed in JSX; they should be parsed as comparisons or JSX elements/fragments.\");let V=z();gn(29);let me=Kc();gn(31);let Ue=I_();return jt(m.createTypeAssertion(me,Ue),V)}function uC(){return Qe(),Su(j())||j()===22||Av()}function Lx(){return j()===28&&Nr(uC)}function Qn(V){if(V.flags&32)return!0;if(PS(V)){let me=V.expression;for(;PS(me)&&!(me.flags&32);)me=me.expression;if(me.flags&32){for(;PS(V);)V.flags|=32,V=V.expression;return!0}}return!1}function lc(V,me,Ue){let ut=Fd(!0,!0),Lt=Ue||Qn(me),dn=Lt?W(me,Ue,ut):q(me,ut);if(Lt&&pi(dn.name)&&oe(dn.name,_.An_optional_chain_cannot_contain_private_identifiers),Vg(me)&&me.typeArguments){let Er=me.typeArguments.pos-1,ii=xo(Ie,me.typeArguments.end)+1;Ke(Er,ii,_.An_instantiation_expression_cannot_be_followed_by_a_property_access)}return jt(dn,V)}function zi(V,me,Ue){let ut;if(j()===23)ut=yc(79,!0,_.An_element_access_expression_should_take_an_argument);else{let dn=at(Ml);yf(dn)&&(dn.text=Ql(dn.text)),ut=dn}gn(23);let Lt=Ue||Qn(me)?R(me,Ue,ut):Y(me,ut);return jt(Lt,V)}function af(V,me,Ue){for(;;){let ut,Lt=!1;if(Ue&&Lx()?(ut=Ll(28),Lt=Su(j())):Lt=aa(24),Lt){me=lc(V,me,ut);continue}if((ut||!ir())&&aa(22)){me=zi(V,me,ut);continue}if(Av()){me=!ut&&me.kind===230?vm(V,me.expression,ut,me.typeArguments):vm(V,me,ut,void 0);continue}if(!ut){if(j()===53&&!t.hasPrecedingLineBreak()){Qe(),me=jt(m.createNonNullExpression(me),V);continue}let dn=Fo(ry);if(dn){me=jt(m.createExpressionWithTypeArguments(me,dn),V);continue}}return me}}function Av(){return j()===14||j()===15}function vm(V,me,Ue,ut){let Lt=m.createTaggedTemplateExpression(me,ut,j()===14?(Kr(),oa()):Y_(!0));return(Ue||me.flags&32)&&(Lt.flags|=32),Lt.questionDotToken=Ue,jt(Lt,V)}function Wn(V,me){for(;;){me=af(V,me,!0);let Ue,ut=Co(28);if(ut&&(Ue=Fo(ry),Av())){me=vm(V,me,ut,Ue);continue}if(Ue||j()===20){!ut&&me.kind===230&&(Ue=me.typeArguments,me=me.expression);let Lt=kx(),dn=ut||Qn(me)?$(me,ut,Ue,Lt):ie(me,Ue,Lt);me=jt(dn,V);continue}if(ut){let Lt=yc(79,!1,_.Identifier_expected);me=jt(W(me,ut,Lt),V)}break}return me}function kx(){gn(20);let V=Dc(11,L_);return gn(21),V}function ry(){if(kn&262144||Si()!==29)return;Qe();let V=Dc(20,Kc);if(Hn()===31)return Qe(),V&&nl()?V:void 0}function nl(){switch(j()){case 20:case 14:case 15:return!0;case 29:case 31:case 39:case 40:return!1}return t.hasPrecedingLineBreak()||Tx()||!C_()}function Kf(){switch(j()){case 8:case 9:case 10:case 14:return oa();case 108:case 106:case 104:case 110:case 95:return Pc();case 20:return Z_();case 22:return ay();case 18:return wc();case 132:if(!Nr(Jb))break;return tg();case 59:return og();case 84:return Rv();case 98:return tg();case 103:return qf();case 43:case 68:if(jr()===13)return oa();break;case 15:return Y_(!1);case 80:return yr()}return ht(_.Expression_expected)}function Z_(){let V=z(),me=Te();gn(20);let Ue=at(Ml);return gn(21),nn(jt(Z(Ue),V),me)}function iy(){let V=z();gn(25);let me=ll(!0);return jt(m.createSpreadElement(me),V)}function EE(){return j()===25?iy():j()===27?jt(m.createOmittedExpression(),z()):ll(!0)}function L_(){return Cr(r,EE)}function ay(){let V=z(),me=t.getTokenPos(),Ue=gn(22),ut=t.hasPrecedingLineBreak(),Lt=Dc(15,EE);return ro(22,23,Ue,me),jt(F(Lt,ut),V)}function Ac(){let V=z(),me=Te();if(Co(25)){let ma=ll(!0);return nn(jt(m.createSpreadAssignment(ma),V),me)}let Ue=ls(!0);if(ta(137))return Tm(V,me,Ue,174,0);if(ta(151))return Tm(V,me,Ue,175,0);let ut=Co(41),Lt=Wi(),dn=Yt(),Er=Co(57),ii=Co(53);if(ut||j()===20||j()===29)return L1(V,me,Ue,ut,dn,Er,ii);let li;if(Lt&&j()!==58){let ma=Co(63),is=ma?at(()=>ll(!0)):void 0;li=m.createShorthandPropertyAssignment(dn,is),li.equalsToken=ma}else{gn(58);let ma=at(()=>ll(!0));li=m.createPropertyAssignment(dn,ma)}return li.modifiers=Ue,li.questionToken=Er,li.exclamationToken=ii,nn(jt(li,V),me)}function wc(){let V=z(),me=t.getTokenPos(),Ue=gn(18),ut=t.hasPrecedingLineBreak(),Lt=Dc(12,Ac,!0);return ro(18,19,Ue,me),jt(B(Lt,ut),V)}function tg(){let V=ir();En(!1);let me=z(),Ue=Te(),ut=ls(!1);gn(98);let Lt=Co(41),dn=Lt?1:0,Er=vt(ut,mL)?2:0,ii=dn&&Er?Oe(Fl):dn?ce(Fl):Er?ue(Fl):Fl(),li=T_(),di=$_(dn|Er),ma=S_(58,!1),is=nd(dn|Er);En(V);let ao=m.createFunctionExpression(ut,Lt,ii,li,di,ma,is);return nn(jt(ao,me),Ue)}function Fl(){return Qr()?se():void 0}function qf(){let V=z();if(gn(103),aa(24)){let dn=wt();return jt(m.createMetaProperty(103,dn),V)}let me=z(),Ue=af(me,Kf(),!1),ut;Ue.kind===230&&(ut=Ue.typeArguments,Ue=Ue.expression),j()===28&&rt(_.Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0,AI(Ie,Ue));let Lt=j()===20?kx():void 0;return jt(fe(Ue,ut,Lt),V)}function bm(V,me){let Ue=z(),ut=Te(),Lt=t.getTokenPos(),dn=gn(18,me);if(dn||V){let Er=t.hasPrecedingLineBreak(),ii=ee(1,of);ro(18,19,dn,Lt);let li=nn(jt(U(ii,Er),Ue),ut);return j()===63&&(rt(_.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_whole_assignment_in_parentheses),Qe()),li}else{let Er=Zl();return nn(jt(U(Er,void 0),Ue),ut)}}function nd(V,me){let Ue=kt();Ht(!!(V&1));let ut=ae();dr(!!(V&2));let Lt=_n;_n=!1;let dn=ir();dn&&En(!1);let Er=bm(!!(V&16),me);return dn&&En(!0),_n=Lt,Ht(Ue),dr(ut),Er}function TE(){let V=z(),me=Te();return gn(26),nn(jt(m.createEmptyStatement(),V),me)}function Hb(){let V=z(),me=Te();gn(99);let Ue=t.getTokenPos(),ut=gn(20),Lt=at(Ml);ro(20,21,ut,Ue);let dn=of(),Er=aa(91)?of():void 0;return nn(jt(_e(Lt,dn,Er),V),me)}function Wb(){let V=z(),me=Te();gn(90);let Ue=of();gn(115);let ut=t.getTokenPos(),Lt=gn(20),dn=at(Ml);return ro(20,21,Lt,ut),aa(26),nn(jt(m.createDoStatement(Ue,dn),V),me)}function ep(){let V=z(),me=Te();gn(115);let Ue=t.getTokenPos(),ut=gn(20),Lt=at(Ml);ro(20,21,ut,Ue);let dn=of();return nn(jt(ge(Lt,dn),V),me)}function rh(){let V=z(),me=Te();gn(97);let Ue=Co(133);gn(20);let ut;j()!==26&&(j()===113||j()===119||j()===85?ut=wp(!0):ut=Tt(Ml));let Lt;if(Ue?gn(162):aa(162)){let dn=at(()=>ll(!0));gn(21),Lt=Ve(Ue,ut,dn,of())}else if(aa(101)){let dn=at(Ml);gn(21),Lt=m.createForInStatement(ut,dn,of())}else{gn(26);let dn=j()!==26&&j()!==21?at(Ml):void 0;gn(26);let Er=j()!==21?at(Ml):void 0;gn(21),Lt=X(ut,dn,Er,of())}return nn(jt(Lt,V),me)}function SE(V){let me=z(),Ue=Te();gn(V===249?81:86);let ut=ss()?void 0:ht();Rs();let Lt=V===249?m.createBreakStatement(ut):m.createContinueStatement(ut);return nn(jt(Lt,me),Ue)}function oy(){let V=z(),me=Te();gn(105);let Ue=ss()?void 0:at(Ml);return Rs(),nn(jt(m.createReturnStatement(Ue),V),me)}function uc(){let V=z(),me=Te();gn(116);let Ue=t.getTokenPos(),ut=gn(20),Lt=at(Ml);ro(20,21,ut,Ue);let dn=Se(33554432,of);return nn(jt(m.createWithStatement(Lt,dn),V),me)}function ng(){let V=z(),me=Te();gn(82);let Ue=at(Ml);gn(58);let ut=ee(3,of);return nn(jt(m.createCaseClause(Ue,ut),V),me)}function ih(){let V=z();gn(88),gn(58);let me=ee(3,of);return jt(m.createDefaultClause(me),V)}function Cv(){return j()===82?ng():ih()}function Iv(){let V=z();gn(18);let me=ee(2,Cv);return gn(19),jt(m.createCaseBlock(me),V)}function Gl(){let V=z(),me=Te();gn(107),gn(20);let Ue=at(Ml);gn(21);let ut=Iv();return nn(jt(m.createSwitchStatement(Ue,ut),V),me)}function ah(){let V=z(),me=Te();gn(109);let Ue=t.hasPrecedingLineBreak()?void 0:at(Ml);return Ue===void 0&&(zt++,Ue=jt(w(\"\"),z())),qs()||kc(Ue),nn(jt(m.createThrowStatement(Ue),V),me)}function qc(){let V=z(),me=Te();gn(111);let Ue=bm(!1),ut=j()===83?xE():void 0,Lt;return(!ut||j()===96)&&(gn(96,_.catch_or_finally_expected),Lt=bm(!1)),nn(jt(m.createTryStatement(Ue,ut,Lt),V),me)}function xE(){let V=z();gn(83);let me;aa(20)?(me=ly(),gn(21)):me=void 0;let Ue=bm(!1);return jt(m.createCatchClause(me,Ue),V)}function oh(){let V=z(),me=Te();return gn(87),Rs(),nn(jt(m.createDebuggerStatement(),V),me)}function zb(){let V=z(),me=Te(),Ue,ut=j()===20,Lt=at(Ml);return Re(Lt)&&aa(58)?Ue=m.createLabeledStatement(Lt,of()):(qs()||kc(Lt),Ue=le(Lt),ut&&(me=!1)),nn(jt(Ue,V),me)}function Vu(){return Qe(),Su(j())&&!t.hasPrecedingLineBreak()}function Em(){return Qe(),j()===84&&!t.hasPrecedingLineBreak()}function Jb(){return Qe(),j()===98&&!t.hasPrecedingLineBreak()}function Lv(){return Qe(),(Su(j())||j()===8||j()===9||j()===10)&&!t.hasPrecedingLineBreak()}function AE(){for(;;)switch(j()){case 113:case 119:case 85:case 98:case 84:case 92:return!0;case 118:case 154:return lC();case 142:case 143:return Dx();case 126:case 127:case 132:case 136:case 121:case 122:case 123:case 146:if(Qe(),t.hasPrecedingLineBreak())return!1;continue;case 159:return Qe(),j()===18||j()===79||j()===93;case 100:return Qe(),j()===10||j()===41||j()===18||Su(j());case 93:let V=Qe();if(V===154&&(V=Nr(Qe)),V===63||V===41||V===18||V===88||V===128||V===59)return!0;continue;case 124:Qe();continue;default:return!1}}function sy(){return Nr(AE)}function C1(){switch(j()){case 59:case 26:case 18:case 113:case 119:case 98:case 84:case 92:case 99:case 90:case 115:case 97:case 86:case 81:case 105:case 116:case 107:case 109:case 111:case 87:case 83:case 96:return!0;case 100:return sy()||Nr(_E);case 85:case 93:return sy();case 132:case 136:case 118:case 142:case 143:case 154:case 159:return!0;case 127:case 123:case 121:case 122:case 124:case 146:return sy()||!Nr(Vu);default:return C_()}}function kv(){return Qe(),Qr()||j()===18||j()===22}function rg(){return Nr(kv)}function of(){switch(j()){case 26:return TE();case 18:return bm(!1);case 113:return ig(z(),Te(),void 0);case 119:if(rg())return ig(z(),Te(),void 0);break;case 98:return wv(z(),Te(),void 0);case 84:return k1(z(),Te(),void 0);case 99:return Hb();case 90:return Wb();case 115:return ep();case 97:return rh();case 86:return SE(248);case 81:return SE(249);case 105:return oy();case 116:return uc();case 107:return Gl();case 109:return ah();case 111:case 83:case 96:return qc();case 87:return oh();case 59:return Gd();case 132:case 118:case 154:case 142:case 143:case 136:case 85:case 92:case 93:case 100:case 121:case 122:case 123:case 126:case 127:case 124:case 146:case 159:if(sy())return Gd();break}return zb()}function CE(V){return V.kind===136}function Gd(){let V=z(),me=Te(),Ue=ls(!0);if(vt(Ue,CE)){let Lt=sh(V);if(Lt)return Lt;for(let dn of Ue)dn.flags|=16777216;return Se(16777216,()=>Dv(V,me,Ue))}else return Dv(V,me,Ue)}function sh(V){return Se(16777216,()=>{let me=At(Qt,V);if(me)return xt(me)})}function Dv(V,me,Ue){switch(j()){case 113:case 119:case 85:return ig(V,me,Ue);case 98:return wv(V,me,Ue);case 84:return k1(V,me,Ue);case 118:return sg(V,me,Ue);case 154:return Ox(V,me,Ue);case 92:return E(V,me,Ue);case 159:case 142:case 143:return lr(V,me,Ue);case 100:return Ed(V,me,Ue);case 93:switch(Qe(),j()){case 88:case 63:return Zo(V,me,Ue);case 128:return kl(V,me,Ue);default:return KP(V,me,Ue)}default:if(Ue){let ut=yc(279,!0,_.Declaration_expected);return aL(ut,V),ut.modifiers=Ue,ut}return}}function Dx(){return Qe(),!t.hasPrecedingLineBreak()&&(Wi()||j()===10)}function No(V,me){if(j()!==18){if(V&4){gv();return}if(ss()){Rs();return}}return nd(V,me)}function fr(){let V=z();if(j()===27)return jt(m.createOmittedExpression(),V);let me=Co(25),Ue=cy(),ut=Yh();return jt(m.createBindingElement(me,void 0,Ue,ut),V)}function vd(){let V=z(),me=Co(25),Ue=Qr(),ut=Yt(),Lt;Ue&&j()!==58?(Lt=ut,ut=void 0):(gn(58),Lt=cy());let dn=Yh();return jt(m.createBindingElement(me,ut,Lt,dn),V)}function ju(){let V=z();gn(18);let me=Dc(9,vd);return gn(19),jt(m.createObjectBindingPattern(me),V)}function I1(){let V=z();gn(22);let me=Dc(10,fr);return gn(23),jt(m.createArrayBindingPattern(me),V)}function IE(){return j()===18||j()===22||j()===80||Qr()}function cy(V){return j()===22?I1():j()===18?ju():se(V)}function wx(){return ly(!0)}function ly(V){let me=z(),Ue=Te(),ut=cy(_.Private_identifiers_are_not_allowed_in_variable_declarations),Lt;V&&ut.kind===79&&j()===53&&!t.hasPrecedingLineBreak()&&(Lt=Pc());let dn=th(),Er=b1(j())?void 0:Yh(),ii=we(ut,Lt,dn,Er);return nn(jt(ii,me),Ue)}function wp(V){let me=z(),Ue=0;switch(j()){case 113:break;case 119:Ue|=1;break;case 85:Ue|=2;break;default:L.fail()}Qe();let ut;if(j()===162&&Nr(tp))ut=Zl();else{let Lt=Kt();vn(V),ut=Dc(8,V?ly:wx),vn(Lt)}return jt(ke(ut,Ue),me)}function tp(){return Ws()&&Qe()===21}function ig(V,me,Ue){let ut=wp(!1);Rs();let Lt=re(Ue,ut);return nn(jt(Lt,V),me)}function wv(V,me,Ue){let ut=ae(),Lt=im(Ue);gn(98);let dn=Co(41),Er=Lt&1024?Fl():se(),ii=dn?1:0,li=Lt&512?2:0,di=T_();Lt&1&&dr(!0);let ma=$_(ii|li),is=S_(58,!1),ao=No(ii|li,_.or_expected);dr(ut);let Oo=m.createFunctionDeclaration(Ue,dn,Er,di,ma,is,ao);return nn(jt(Oo,V),me)}function ch(){if(j()===135)return gn(135);if(j()===10&&Nr(Qe)===20)return Fo(()=>{let V=oa();return V.text===\"constructor\"?V:void 0})}function Rp(V,me,Ue){return Fo(()=>{if(ch()){let ut=T_(),Lt=$_(0),dn=S_(58,!1),Er=No(0,_.or_expected),ii=m.createConstructorDeclaration(Ue,Lt,Er);return ii.typeParameters=ut,ii.type=dn,nn(jt(ii,V),me)}})}function L1(V,me,Ue,ut,Lt,dn,Er,ii){let li=ut?1:0,di=vt(Ue,mL)?2:0,ma=T_(),is=$_(li|di),ao=S_(58,!1),Oo=No(li|di,ii),id=m.createMethodDeclaration(Ue,ut,Lt,dn,ma,is,ao,Oo);return id.exclamationToken=Er,nn(jt(id,V),me)}function Cc(V,me,Ue,ut,Lt){let dn=!Lt&&!t.hasPrecedingLineBreak()?Co(53):void 0,Er=th(),ii=Cr(45056,Yh);xc(ut,Er,ii);let li=m.createPropertyDeclaration(Ue,ut,Lt||dn,Er,ii);return nn(jt(li,V),me)}function Bd(V,me,Ue){let ut=Co(41),Lt=Yt(),dn=Co(57);return ut||j()===20||j()===29?L1(V,me,Ue,ut,Lt,dn,void 0,_.or_expected):Cc(V,me,Ue,Lt,dn)}function Tm(V,me,Ue,ut,Lt){let dn=Yt(),Er=T_(),ii=$_(0),li=S_(58,!1),di=No(Lt),ma=ut===174?m.createGetAccessorDeclaration(Ue,dn,ii,li,di):m.createSetAccessorDeclaration(Ue,dn,ii,di);return ma.typeParameters=Er,Sf(ma)&&(ma.type=li),nn(jt(ma,V),me)}function rd(){let V;if(j()===59)return!0;for(;Rg(j());){if(V=j(),Gj(V))return!0;Qe()}if(j()===41||(K()&&(V=j(),Qe()),j()===22))return!0;if(V!==void 0){if(!Xu(V)||V===151||V===137)return!0;switch(j()){case 20:case 29:case 53:case 58:case 63:case 57:return!0;default:return ss()}}return!1}function LE(V,me,Ue){Ll(124);let ut=uy(),Lt=nn(jt(m.createClassStaticBlockDeclaration(ut),V),me);return Lt.modifiers=Ue,Lt}function uy(){let V=kt(),me=ae();Ht(!1),dr(!0);let Ue=bm(!1);return Ht(V),dr(me),Ue}function ag(){if(ae()&&j()===133){let V=z(),me=ht(_.Expression_expected);Qe();let Ue=af(V,me,!0);return Wn(V,Ue)}return Lp()}function Rx(){let V=z();if(!aa(59))return;let me=Q(ag);return jt(m.createDecorator(me),V)}function sf(V,me,Ue){let ut=z(),Lt=j();if(j()===85&&me){if(!Fo(Go))return}else{if(Ue&&j()===124&&Nr(Ti))return;if(V&&j()===124)return;if(!Hs())return}return jt(P(Lt),ut)}function ls(V,me,Ue){let ut=z(),Lt,dn,Er,ii=!1,li=!1,di=!1;if(V&&j()===59)for(;dn=Rx();)Lt=Sn(Lt,dn);for(;Er=sf(ii,me,Ue);)Er.kind===124&&(ii=!0),Lt=Sn(Lt,Er),li=!0;if(li&&V&&j()===59)for(;dn=Rx();)Lt=Sn(Lt,dn),di=!0;if(di)for(;Er=sf(ii,me,Ue);)Er.kind===124&&(ii=!0),Lt=Sn(Lt,Er);return Lt&&As(Lt,ut)}function kE(){let V;if(j()===132){let me=z();Qe();let Ue=jt(P(132),me);V=As([Ue],me)}return V}function DE(){let V=z();if(j()===26)return Qe(),jt(m.createSemicolonClassElement(),V);let me=Te(),Ue=ls(!0,!0,!0);if(j()===124&&Nr(Ti))return LE(V,me,Ue);if(ta(137))return Tm(V,me,Ue,174,0);if(ta(151))return Tm(V,me,Ue,175,0);if(j()===135||j()===10){let ut=Rp(V,me,Ue);if(ut)return ut}if(Ib())return p1(V,me,Ue);if(Su(j())||j()===10||j()===8||j()===41||j()===22)if(vt(Ue,CE)){for(let Lt of Ue)Lt.flags|=16777216;return Se(16777216,()=>Bd(V,me,Ue))}else return Bd(V,me,Ue);if(Ue){let ut=yc(79,!0,_.Declaration_expected);return Cc(V,me,Ue,ut,void 0)}return L.fail(\"Should not have attempted to parse class member declaration.\")}function og(){let V=z(),me=Te(),Ue=ls(!0);if(j()===84)return wE(V,me,Ue,228);let ut=yc(279,!0,_.Expression_expected);return aL(ut,V),ut.modifiers=Ue,ut}function Rv(){return wE(z(),Te(),void 0,228)}function k1(V,me,Ue){return wE(V,me,Ue,260)}function wE(V,me,Ue,ut){let Lt=ae();gn(84);let dn=RE(),Er=T_();vt(Ue,c3)&&dr(!0);let ii=NE(),li;gn(18)?(li=dC(),gn(19)):li=Zl(),dr(Lt);let di=ut===260?m.createClassDeclaration(Ue,dn,Er,ii,li):m.createClassExpression(Ue,dn,Er,ii,li);return nn(jt(di,V),me)}function RE(){return Qr()&&!OE()?yu(Qr()):void 0}function OE(){return j()===117&&Nr(hd)}function NE(){if(lh())return ee(22,PE)}function PE(){let V=z(),me=j();L.assert(me===94||me===117),Qe();let Ue=Dc(7,dy);return jt(m.createHeritageClause(me,Ue),V)}function dy(){let V=z(),me=Lp();if(me.kind===230)return me;let Ue=bd();return jt(m.createExpressionWithTypeArguments(me,Ue),V)}function bd(){return j()===29?zf(20,Kc,29,31):void 0}function lh(){return j()===94||j()===117}function dC(){return ee(5,DE)}function sg(V,me,Ue){gn(118);let ut=ht(),Lt=T_(),dn=NE(),Er=vv(),ii=m.createInterfaceDeclaration(Ue,ut,Lt,dn,Er);return nn(jt(ii,V),me)}function Ox(V,me,Ue){gn(154);let ut=ht(),Lt=T_();gn(63);let dn=j()===139&&Fo(Zu)||Kc();Rs();let Er=m.createTypeAliasDeclaration(Ue,ut,Lt,dn);return nn(jt(Er,V),me)}function Nx(){let V=z(),me=Te(),Ue=Yt(),ut=at(Yh);return nn(jt(m.createEnumMember(Ue,ut),V),me)}function E(V,me,Ue){gn(92);let ut=ht(),Lt;gn(18)?(Lt=je(()=>Dc(6,Nx)),gn(19)):Lt=Zl();let dn=m.createEnumDeclaration(Ue,ut,Lt);return nn(jt(dn,V),me)}function ne(){let V=z(),me;return gn(18)?(me=ee(1,of),gn(19)):me=Zl(),jt(m.createModuleBlock(me),V)}function Ee(V,me,Ue,ut){let Lt=ut&16,dn=ht(),Er=aa(24)?Ee(z(),!1,void 0,4|Lt):ne(),ii=m.createModuleDeclaration(Ue,dn,Er,ut);return nn(jt(ii,V),me)}function Wt(V,me,Ue){let ut=0,Lt;j()===159?(Lt=ht(),ut|=1024):(Lt=oa(),Lt.text=Ql(Lt.text));let dn;j()===18?dn=ne():Rs();let Er=m.createModuleDeclaration(Ue,Lt,dn,ut);return nn(jt(Er,V),me)}function lr(V,me,Ue){let ut=0;if(j()===159)return Wt(V,me,Ue);if(aa(143))ut|=16;else if(gn(142),j()===10)return Wt(V,me,Ue);return Ee(V,me,Ue,ut)}function ci(){return j()===147&&Nr(qr)}function qr(){return Qe()===20}function Ti(){return Qe()===18}function Wa(){return Qe()===43}function kl(V,me,Ue){gn(128),gn(143);let ut=ht();Rs();let Lt=m.createNamespaceExportDeclaration(ut);return Lt.modifiers=Ue,nn(jt(Lt,V),me)}function Ed(V,me,Ue){gn(100);let ut=t.getStartPos(),Lt;Wi()&&(Lt=ht());let dn=!1;if(j()!==158&&Lt?.escapedText===\"type\"&&(Wi()||Td())&&(dn=!0,Lt=Wi()?ht():void 0),Lt&&!Ov())return Nv(V,me,Ue,Lt,dn);let Er;(Lt||j()===41||j()===18)&&(Er=_y(Lt,ut,dn),gn(158));let ii=cf(),li;j()===130&&!t.hasPrecedingLineBreak()&&(li=fy()),Rs();let di=m.createImportDeclaration(Ue,Er,ii,li);return nn(jt(di,V),me)}function Ud(){let V=z(),me=Su(j())?wt():St(10);gn(58);let Ue=ll(!0);return jt(m.createAssertEntry(me,Ue),V)}function fy(V){let me=z();V||gn(130);let Ue=t.getTokenPos();if(gn(18)){let ut=t.hasPrecedingLineBreak(),Lt=Dc(24,Ud,!0);if(!gn(19)){let dn=Os(Ye);dn&&dn.code===_._0_expected.code&&Ao(dn,t2(Pe,Ue,1,_.The_parser_expected_to_find_a_1_to_match_the_0_token_here,\"{\",\"}\"))}return jt(m.createAssertClause(Lt,ut),me)}else{let ut=As([],z(),void 0,!1);return jt(m.createAssertClause(ut,!1),me)}}function Td(){return j()===41||j()===18}function Ov(){return j()===27||j()===158}function Nv(V,me,Ue,ut,Lt){gn(63);let dn=Xf();Rs();let Er=m.createImportEqualsDeclaration(Ue,Lt,ut,dn);return nn(jt(Er,V),me)}function _y(V,me,Ue){let ut;return(!V||aa(27))&&(ut=j()===41?Sm():py(272)),jt(m.createImportClause(Ue,V,ut),me)}function Xf(){return ci()?ME():Io(!1)}function ME(){let V=z();gn(147),gn(20);let me=cf();return gn(21),jt(m.createExternalModuleReference(me),V)}function cf(){if(j()===10){let V=oa();return V.text=Ql(V.text),V}else return Ml()}function Sm(){let V=z();gn(41),gn(128);let me=ht();return jt(m.createNamespaceImport(me),V)}function py(V){let me=z(),Ue=V===272?m.createNamedImports(zf(23,FE,18,19)):m.createNamedExports(zf(23,If,18,19));return jt(Ue,me)}function If(){let V=Te();return nn(Pv(278),V)}function FE(){return Pv(273)}function Pv(V){let me=z(),Ue=Xu(j())&&!Wi(),ut=t.getTokenPos(),Lt=t.getTextPos(),dn=!1,Er,ii=!0,li=wt();if(li.escapedText===\"type\")if(j()===128){let is=wt();if(j()===128){let ao=wt();Su(j())?(dn=!0,Er=is,li=ma(),ii=!1):(Er=li,li=ao,ii=!1)}else Su(j())?(Er=li,ii=!1,li=ma()):(dn=!0,li=is)}else Su(j())&&(dn=!0,li=ma());ii&&j()===128&&(Er=li,gn(128),li=ma()),V===273&&Ue&&Ke(ut,Lt,_.Identifier_expected);let di=V===273?m.createImportSpecifier(dn,Er,li):m.createExportSpecifier(dn,Er,li);return jt(di,me);function ma(){return Ue=Xu(j())&&!Wi(),ut=t.getTokenPos(),Lt=t.getTextPos(),wt()}}function Vc(V){return jt(m.createNamespaceExport(wt()),V)}function KP(V,me,Ue){let ut=ae();dr(!0);let Lt,dn,Er,ii=aa(154),li=z();aa(41)?(aa(128)&&(Lt=Vc(li)),gn(158),dn=cf()):(Lt=py(276),(j()===158||j()===10&&!t.hasPrecedingLineBreak())&&(gn(158),dn=cf())),dn&&j()===130&&!t.hasPrecedingLineBreak()&&(Er=fy()),Rs(),dr(ut);let di=m.createExportDeclaration(Ue,ii,Lt,dn,Er);return nn(jt(di,V),me)}function Zo(V,me,Ue){let ut=ae();dr(!0);let Lt;aa(63)?Lt=!0:gn(88);let dn=ll(!0);Rs(),dr(ut);let Er=m.createExportAssignment(Ue,Lt,dn);return nn(jt(Er,V),me)}let Ro;(V=>{V[V.SourceElements=0]=\"SourceElements\",V[V.BlockStatements=1]=\"BlockStatements\",V[V.SwitchClauses=2]=\"SwitchClauses\",V[V.SwitchClauseStatements=3]=\"SwitchClauseStatements\",V[V.TypeMembers=4]=\"TypeMembers\",V[V.ClassMembers=5]=\"ClassMembers\",V[V.EnumMembers=6]=\"EnumMembers\",V[V.HeritageClauseElement=7]=\"HeritageClauseElement\",V[V.VariableDeclarations=8]=\"VariableDeclarations\",V[V.ObjectBindingElements=9]=\"ObjectBindingElements\",V[V.ArrayBindingElements=10]=\"ArrayBindingElements\",V[V.ArgumentExpressions=11]=\"ArgumentExpressions\",V[V.ObjectLiteralMembers=12]=\"ObjectLiteralMembers\",V[V.JsxAttributes=13]=\"JsxAttributes\",V[V.JsxChildren=14]=\"JsxChildren\",V[V.ArrayLiteralMembers=15]=\"ArrayLiteralMembers\",V[V.Parameters=16]=\"Parameters\",V[V.JSDocParameters=17]=\"JSDocParameters\",V[V.RestProperties=18]=\"RestProperties\",V[V.TypeParameters=19]=\"TypeParameters\",V[V.TypeArguments=20]=\"TypeArguments\",V[V.TupleElementTypes=21]=\"TupleElementTypes\",V[V.HeritageClauses=22]=\"HeritageClauses\",V[V.ImportOrExportSpecifiers=23]=\"ImportOrExportSpecifiers\",V[V.AssertEntries=24]=\"AssertEntries\",V[V.Count=25]=\"Count\"})(Ro||(Ro={}));let Px;(V=>{V[V.False=0]=\"False\",V[V.True=1]=\"True\",V[V.Unknown=2]=\"Unknown\"})(Px||(Px={}));let Mx;(V=>{function me(di,ma,is){Pi(\"file.js\",di,99,void 0,1),t.setText(di,ma,is),Rt=t.scan();let ao=Ue(),Oo=hi(\"file.js\",99,1,!1,[],P(1),0,Ba),id=vS(Ye,Oo);return _t&&(Oo.jsDocDiagnostics=vS(_t,Oo)),gr(),ao?{jsDocTypeExpression:ao,diagnostics:id}:void 0}V.parseJSDocTypeExpressionForTests=me;function Ue(di){let ma=z(),is=(di?aa:gn)(18),ao=Se(8388608,Mc);(!di||is)&&hc(19);let Oo=m.createJSDocTypeExpression(ao);return Kn(Oo),jt(Oo,ma)}V.parseJSDocTypeExpression=Ue;function ut(){let di=z(),ma=aa(18),is=z(),ao=Io(!1);for(;j()===80;)Ja(),Vt(),ao=jt(m.createJSDocMemberName(ao,ht()),is);ma&&hc(19);let Oo=m.createJSDocNameReference(ao);return Kn(Oo),jt(Oo,di)}V.parseJSDocNameReference=ut;function Lt(di,ma,is){Pi(\"\",di,99,void 0,1);let ao=Se(8388608,()=>li(ma,is)),id=vS(Ye,{languageVariant:0,text:di});return gr(),ao?{jsDoc:ao,diagnostics:id}:void 0}V.parseIsolatedJSDocComment=Lt;function dn(di,ma,is){let ao=Rt,Oo=Ye.length,id=Gt,np=Se(8388608,()=>li(ma,is));return go(np,di),kn&262144&&(_t||(_t=[]),_t.push(...Ye)),Rt=ao,Ye.length=Oo,Gt=id,np}V.parseJSDocComment=dn;let Er;(di=>{di[di.BeginningOfLine=0]=\"BeginningOfLine\",di[di.SawAsterisk=1]=\"SawAsterisk\",di[di.SavingComments=2]=\"SavingComments\",di[di.SavingBackticks=3]=\"SavingBackticks\"})(Er||(Er={}));let ii;(di=>{di[di.Property=1]=\"Property\",di[di.Parameter=2]=\"Parameter\",di[di.CallbackParameter=4]=\"CallbackParameter\"})(ii||(ii={}));function li(di=0,ma){let is=Ie,ao=ma===void 0?is.length:di+ma;if(ma=ao-di,L.assert(di>=0),L.assert(di<=ao),L.assert(ao<=is.length),!cJ(is,di))return;let Oo,id,np,Op,cg,Yf=[],my=[];return t.scanRange(di+3,ma-5,()=>{let yn=1,Or,xr=di-(is.lastIndexOf(`\n`,di)+1)+4;function Wr(eo){Or||(Or=xr),Yf.push(eo),xr+=eo.length}for(Vt();D1(5););D1(4)&&(yn=0,xr=0);e:for(;;){switch(j()){case 59:yn===0||yn===1?(GE(Yf),cg||(cg=z()),Fv(_C(xr)),yn=0,Or=void 0):Wr(t.getTokenText());break;case 4:Yf.push(t.getTokenText()),yn=0,xr=0;break;case 41:let eo=t.getTokenText();yn===1||yn===2?(yn=2,Wr(eo)):(yn=1,xr+=eo.length);break;case 5:let _o=t.getTokenText();yn===2?Yf.push(_o):Or!==void 0&&xr+_o.length>Or&&Yf.push(_o.slice(Or-xr)),xr+=_o.length;break;case 1:break e;case 18:yn=2;let jd=t.getStartPos(),D_=t.getTextPos()-1,uh=jk(D_);if(uh){Op||Fx(Yf),my.push(jt(m.createJSDocText(Yf.join(\"\")),Op??di,jd)),my.push(uh),Yf=[],Op=t.getTextPos();break}default:yn=2,Wr(t.getTokenText());break}Vt()}GE(Yf),my.length&&Yf.length&&my.push(jt(m.createJSDocText(Yf.join(\"\")),Op??di,cg)),my.length&&Oo&&L.assertIsDefined(cg,\"having parsed tags implies that the end of the comment span should be set\");let Ci=Oo&&As(Oo,id,np);return jt(m.createJSDocComment(my.length?As(my,di,cg):Yf.length?Yf.join(\"\"):void 0,Ci),di,ao)});function Fx(yn){for(;yn.length&&(yn[0]===`\n`||yn[0]===\"\\r\");)yn.shift()}function GE(yn){for(;yn.length&&yn[yn.length-1].trim()===\"\";)yn.pop()}function fC(){for(;;){if(Vt(),j()===1)return!0;if(!(j()===5||j()===4))return!1}}function k_(){if(!((j()===5||j()===4)&&Nr(fC)))for(;j()===5||j()===4;)Vt()}function Mv(){if((j()===5||j()===4)&&Nr(fC))return\"\";let yn=t.hasPrecedingLineBreak(),Or=!1,xr=\"\";for(;yn&&j()===41||j()===5||j()===4;)xr+=t.getTokenText(),j()===4?(yn=!0,Or=!0,xr=\"\"):j()===41&&(yn=!1),Vt();return Or?xr:\"\"}function _C(yn){L.assert(j()===59);let Or=t.getTokenPos();Vt();let xr=Uv(void 0),Wr=Mv(),Ci;switch(xr.escapedText){case\"author\":Ci=Pt(Or,xr,yn,Wr);break;case\"implements\":Ci=Fi(Or,xr,yn,Wr);break;case\"augments\":case\"extends\":Ci=Da(Or,xr,yn,Wr);break;case\"class\":case\"constructor\":Ci=dg(Or,m.createJSDocClassTag,xr,yn,Wr);break;case\"public\":Ci=dg(Or,m.createJSDocPublicTag,xr,yn,Wr);break;case\"private\":Ci=dg(Or,m.createJSDocPrivateTag,xr,yn,Wr);break;case\"protected\":Ci=dg(Or,m.createJSDocProtectedTag,xr,yn,Wr);break;case\"readonly\":Ci=dg(Or,m.createJSDocReadonlyTag,xr,yn,Wr);break;case\"override\":Ci=dg(Or,m.createJSDocOverrideTag,xr,yn,Wr);break;case\"deprecated\":Dt=!0,Ci=dg(Or,m.createJSDocDeprecatedTag,xr,yn,Wr);break;case\"this\":Ci=wte(Or,xr,yn,Wr);break;case\"enum\":Ci=Rte(Or,xr,yn,Wr);break;case\"arg\":case\"argument\":case\"param\":return zk(Or,xr,2,yn);case\"return\":case\"returns\":Ci=I(Or,xr,yn,Wr);break;case\"template\":Ci=yy(Or,xr,yn,Wr);break;case\"type\":Ci=N(Or,xr,yn,Wr);break;case\"typedef\":Ci=pC(Or,xr,yn,Wr);break;case\"callback\":Ci=zn(Or,xr,yn,Wr);break;case\"overload\":Ci=Gv(Or,xr,yn,Wr);break;case\"satisfies\":Ci=Vd(Or,xr,yn,Wr);break;case\"see\":Ci=te(Or,xr,yn,Wr);break;case\"exception\":case\"throws\":Ci=Me(Or,xr,yn,Wr);break;default:Ci=Zs(Or,xr,yn,Wr);break}return Ci}function lf(yn,Or,xr,Wr){return Wr||(xr+=Or-yn),Gx(xr,Wr.slice(xr))}function Gx(yn,Or){let xr=z(),Wr=[],Ci=[],eo,_o=0,jd=!0,D_;function uh(dh){D_||(D_=yn),Wr.push(dh),yn+=dh.length}Or!==void 0&&(Or!==\"\"&&uh(Or),_o=1);let xm=j();e:for(;;){switch(xm){case 4:_o=0,Wr.push(t.getTokenText()),yn=0;break;case 59:if(_o===3||_o===2&&(!jd||Nr(hy))){Wr.push(t.getTokenText());break}t.setTextPos(t.getTextPos()-1);case 1:break e;case 5:if(_o===2||_o===3)uh(t.getTokenText());else{let Kb=t.getTokenText();D_!==void 0&&yn+Kb.length>D_&&Wr.push(Kb.slice(D_-yn)),yn+=Kb.length}break;case 18:_o=2;let dh=t.getStartPos(),gC=t.getTextPos()-1,vu=jk(gC);vu?(Ci.push(jt(m.createJSDocText(Wr.join(\"\")),eo??xr,dh)),Ci.push(vu),Wr=[],eo=t.getTextPos()):uh(t.getTokenText());break;case 61:_o===3?_o=2:_o=3,uh(t.getTokenText());break;case 41:if(_o===0){_o=1,yn+=1;break}default:_o!==3&&(_o=2),uh(t.getTokenText());break}jd=j()===5,xm=Vt()}if(Fx(Wr),GE(Wr),Ci.length)return Wr.length&&Ci.push(jt(m.createJSDocText(Wr.join(\"\")),eo??xr)),As(Ci,xr,t.getTextPos());if(Wr.length)return Wr.join(\"\")}function hy(){let yn=Vt();return yn===5||yn===4}function jk(yn){let Or=Fo(Hk);if(!Or)return;Vt(),k_();let xr=z(),Wr=Su(j())?Io(!0):void 0;if(Wr)for(;j()===80;)Ja(),Vt(),Wr=jt(m.createJSDocMemberName(Wr,ht()),xr);let Ci=[];for(;j()!==19&&j()!==4&&j()!==1;)Ci.push(t.getTokenText()),Vt();let eo=Or===\"link\"?m.createJSDocLink:Or===\"linkcode\"?m.createJSDocLinkCode:m.createJSDocLinkPlain;return jt(eo(Wr,Ci.join(\"\")),yn,t.getTextPos())}function Hk(){if(Mv(),j()===18&&Vt()===59&&Su(Vt())){let yn=t.getTokenValue();if(oo(yn))return yn}}function oo(yn){return yn===\"link\"||yn===\"linkcode\"||yn===\"linkplain\"}function Zs(yn,Or,xr,Wr){return jt(m.createJSDocUnknownTag(Or,lf(yn,z(),xr,Wr)),yn)}function Fv(yn){yn&&(Oo?Oo.push(yn):(Oo=[yn],id=yn.pos),np=yn.end)}function gy(){return Mv(),j()===18?Ue():void 0}function Wk(){let yn=D1(22);yn&&k_();let Or=D1(61),xr=XP();return Or&&md(61),yn&&(k_(),Co(63)&&Ml(),gn(23)),{name:xr,isBracketed:yn}}function ad(yn){switch(yn.kind){case 149:return!0;case 185:return ad(yn.elementType);default:return m_(yn)&&Re(yn.typeName)&&yn.typeName.escapedText===\"Object\"&&!yn.typeArguments}}function zk(yn,Or,xr,Wr){let Ci=gy(),eo=!Ci;Mv();let{name:_o,isBracketed:jd}=Wk(),D_=Mv();eo&&!Nr(Hk)&&(Ci=gy());let uh=lf(yn,z(),Wr,D_),xm=xr!==4&&y(Ci,_o,xr,Wr);xm&&(Ci=xm,eo=!0);let dh=xr===1?m.createJSDocPropertyTag(Or,_o,jd,Ci,eo,uh):m.createJSDocParameterTag(Or,_o,jd,Ci,eo,uh);return jt(dh,yn)}function y(yn,Or,xr,Wr){if(yn&&ad(yn.type)){let Ci=z(),eo,_o;for(;eo=Fo(()=>BE(xr,Wr,Or));)(eo.kind===344||eo.kind===351)&&(_o=Sn(_o,eo));if(_o){let jd=jt(m.createJSDocTypeLiteral(_o,yn.type.kind===185),Ci);return jt(m.createJSDocTypeExpression(jd),Ci)}}}function I(yn,Or,xr,Wr){vt(Oo,y3)&&Ke(Or.pos,t.getTokenPos(),_._0_tag_already_specified,Or.escapedText);let Ci=gy();return jt(m.createJSDocReturnTag(Or,Ci,lf(yn,z(),xr,Wr)),yn)}function N(yn,Or,xr,Wr){vt(Oo,DL)&&Ke(Or.pos,t.getTokenPos(),_._0_tag_already_specified,Or.escapedText);let Ci=Ue(!0),eo=xr!==void 0&&Wr!==void 0?lf(yn,z(),xr,Wr):void 0;return jt(m.createJSDocTypeTag(Or,Ci,eo),yn)}function te(yn,Or,xr,Wr){let eo=j()===22||Nr(()=>Vt()===59&&Su(Vt())&&oo(t.getTokenValue()))?void 0:ut(),_o=xr!==void 0&&Wr!==void 0?lf(yn,z(),xr,Wr):void 0;return jt(m.createJSDocSeeTag(Or,eo,_o),yn)}function Me(yn,Or,xr,Wr){let Ci=gy(),eo=lf(yn,z(),xr,Wr);return jt(m.createJSDocThrowsTag(Or,Ci,eo),yn)}function Pt(yn,Or,xr,Wr){let Ci=z(),eo=Tr(),_o=t.getStartPos(),jd=lf(yn,_o,xr,Wr);jd||(_o=t.getStartPos());let D_=typeof jd!=\"string\"?As(Qi([jt(eo,Ci,_o)],jd),Ci):eo.text+jd;return jt(m.createJSDocAuthorTag(Or,D_),yn)}function Tr(){let yn=[],Or=!1,xr=t.getToken();for(;xr!==1&&xr!==4;){if(xr===29)Or=!0;else{if(xr===59&&!Or)break;if(xr===31&&Or){yn.push(t.getTokenText()),t.setTextPos(t.getTokenPos()+1);break}}yn.push(t.getTokenText()),xr=Vt()}return m.createJSDocText(yn.join(\"\"))}function Fi(yn,Or,xr,Wr){let Ci=lg();return jt(m.createJSDocImplementsTag(Or,Ci,lf(yn,z(),xr,Wr)),yn)}function Da(yn,Or,xr,Wr){let Ci=lg();return jt(m.createJSDocAugmentsTag(Or,Ci,lf(yn,z(),xr,Wr)),yn)}function Vd(yn,Or,xr,Wr){let Ci=Ue(!1),eo=xr!==void 0&&Wr!==void 0?lf(yn,z(),xr,Wr):void 0;return jt(m.createJSDocSatisfiesTag(Or,Ci,eo),yn)}function lg(){let yn=aa(18),Or=z(),xr=ug(),Wr=bd(),Ci=m.createExpressionWithTypeArguments(xr,Wr),eo=jt(Ci,Or);return yn&&gn(19),eo}function ug(){let yn=z(),Or=Uv();for(;aa(24);){let xr=Uv();Or=jt(q(Or,xr),yn)}return Or}function dg(yn,Or,xr,Wr,Ci){return jt(Or(xr,lf(yn,z(),Wr,Ci)),yn)}function wte(yn,Or,xr,Wr){let Ci=Ue(!0);return k_(),jt(m.createJSDocThisTag(Or,Ci,lf(yn,z(),xr,Wr)),yn)}function Rte(yn,Or,xr,Wr){let Ci=Ue(!0);return k_(),jt(m.createJSDocEnumTag(Or,Ci,lf(yn,z(),xr,Wr)),yn)}function pC(yn,Or,xr,Wr){var Ci;let eo=gy();Mv();let _o=Jk();k_();let jd=Gx(xr),D_;if(!eo||ad(eo.type)){let xm,dh,gC,vu=!1;for(;xm=Fo(()=>Bx(xr));)if(vu=!0,xm.kind===347)if(dh){let Kb=rt(_.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags);Kb&&Ao(Kb,t2(Pe,0,0,_.The_tag_was_first_specified_here));break}else dh=xm;else gC=Sn(gC,xm);if(vu){let Kb=eo&&eo.type.kind===185,Kk=m.createJSDocTypeLiteral(gC,Kb);eo=dh&&dh.typeExpression&&!ad(dh.typeExpression.type)?dh.typeExpression:jt(Kk,yn),D_=eo.end}}D_=D_||jd!==void 0?z():((Ci=_o??eo)!=null?Ci:Or).end,jd||(jd=lf(yn,D_,xr,Wr));let uh=m.createJSDocTypedefTag(Or,eo,_o,jd);return jt(uh,yn,D_)}function Jk(yn){let Or=t.getTokenPos();if(!Su(j()))return;let xr=Uv();if(aa(24)){let Wr=Jk(!0),Ci=m.createModuleDeclaration(void 0,xr,Wr,yn?4:void 0);return jt(Ci,Or)}return yn&&(xr.flags|=2048),xr}function Ote(yn){let Or=z(),xr,Wr;for(;xr=Fo(()=>BE(4,yn));)Wr=Sn(Wr,xr);return As(Wr||[],Or)}function mC(yn,Or){let xr=Ote(Or),Wr=Fo(()=>{if(D1(59)){let Ci=_C(Or);if(Ci&&Ci.kind===345)return Ci}});return jt(m.createJSDocSignature(void 0,xr,Wr),yn)}function zn(yn,Or,xr,Wr){let Ci=Jk();k_();let eo=Gx(xr),_o=mC(yn,xr);eo||(eo=lf(yn,z(),xr,Wr));let jd=eo!==void 0?z():_o.end;return jt(m.createJSDocCallbackTag(Or,_o,Ci,eo),yn,jd)}function Gv(yn,Or,xr,Wr){k_();let Ci=Gx(xr),eo=mC(yn,xr);Ci||(Ci=lf(yn,z(),xr,Wr));let _o=Ci!==void 0?z():eo.end;return jt(m.createJSDocOverloadTag(Or,eo,Ci),yn,_o)}function Bv(yn,Or){for(;!Re(yn)||!Re(Or);)if(!Re(yn)&&!Re(Or)&&yn.right.escapedText===Or.right.escapedText)yn=yn.left,Or=Or.left;else return!1;return yn.escapedText===Or.escapedText}function Bx(yn){return BE(1,yn)}function BE(yn,Or,xr){let Wr=!0,Ci=!1;for(;;)switch(Vt()){case 59:if(Wr){let eo=qP(yn,Or);return eo&&(eo.kind===344||eo.kind===351)&&yn!==4&&xr&&(Re(eo.name)||!Bv(xr,eo.name.left))?!1:eo}Ci=!1;break;case 4:Wr=!0,Ci=!1;break;case 41:Ci&&(Wr=!1),Ci=!0;break;case 79:Wr=!1;break;case 1:return!1}}function qP(yn,Or){L.assert(j()===59);let xr=t.getStartPos();Vt();let Wr=Uv();k_();let Ci;switch(Wr.escapedText){case\"type\":return yn===1&&N(xr,Wr);case\"prop\":case\"property\":Ci=1;break;case\"arg\":case\"argument\":case\"param\":Ci=6;break;default:return!1}return yn&Ci?zk(xr,Wr,yn,Or):!1}function hC(){let yn=z(),Or=D1(22);Or&&k_();let xr=Uv(_.Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces),Wr;if(Or&&(k_(),gn(63),Wr=Se(8388608,Mc),gn(23)),!rc(xr))return jt(m.createTypeParameterDeclaration(void 0,xr,void 0,Wr),yn)}function WG(){let yn=z(),Or=[];do{k_();let xr=hC();xr!==void 0&&Or.push(xr),Mv()}while(D1(27));return As(Or,yn)}function yy(yn,Or,xr,Wr){let Ci=j()===18?Ue():void 0,eo=WG();return jt(m.createJSDocTemplateTag(Or,Ci,eo,lf(yn,z(),xr,Wr)),yn)}function D1(yn){return j()===yn?(Vt(),!0):!1}function XP(){let yn=Uv();for(aa(22)&&gn(23);aa(24);){let Or=Uv();aa(22)&&gn(23),yn=Jf(yn,Or)}return yn}function Uv(yn){if(!Su(j()))return yc(79,!yn,yn||_.Identifier_expected);zt++;let Or=t.getTokenPos(),xr=t.getTextPos(),Wr=j(),Ci=Ql(t.getTokenValue()),eo=jt(w(Ci,Wr),Or,xr);return Vt(),eo}}})(Mx=e.JSDocParser||(e.JSDocParser={}))})(av||(av={})),(e=>{function t(x,A,w,C){if(C=C||L.shouldAssert(2),m(x,A,w,C),Moe(w))return x;if(x.statements.length===0)return av.parseSourceFile(x.fileName,A,x.languageVersion,void 0,!0,x.scriptKind,x.setExternalModuleIndicator);let P=x;L.assert(!P.hasBeenIncrementallyParsed),P.hasBeenIncrementallyParsed=!0,av.fixupParentReferences(P);let F=x.text,B=v(x),q=d(x,w);m(x,A,q,C),L.assert(q.span.start<=w.span.start),L.assert(wl(q.span)===wl(w.span)),L.assert(wl(uI(q))===wl(uI(w)));let W=uI(q).length-q.span.length;f(P,q.span.start,wl(q.span),wl(uI(q)),W,F,A,C);let Y=av.parseSourceFile(x.fileName,A,x.languageVersion,B,!0,x.scriptKind,x.setExternalModuleIndicator);return Y.commentDirectives=r(x.commentDirectives,Y.commentDirectives,q.span.start,wl(q.span),W,F,A,C),Y.impliedNodeFormat=x.impliedNodeFormat,Y}e.updateSourceFile=t;function r(x,A,w,C,P,F,B,q){if(!x)return A;let W,Y=!1;for(let ie of x){let{range:$,type:fe}=ie;if($.end<w)W=Sn(W,ie);else if($.pos>C){R();let Z={range:{pos:$.pos+P,end:$.end+P},type:fe};W=Sn(W,Z),q&&L.assert(F.substring($.pos,$.end)===B.substring(Z.range.pos,Z.range.end))}}return R(),W;function R(){Y||(Y=!0,W?A&&W.push(...A):W=A)}}function i(x,A,w,C,P,F){A?q(x):B(x);return;function B(W){let Y=\"\";if(F&&o(W)&&(Y=C.substring(W.pos,W.end)),W._children&&(W._children=void 0),om(W,W.pos+w,W.end+w),F&&o(W)&&L.assert(Y===P.substring(W.pos,W.end)),pa(W,B,q),Kd(W))for(let R of W.jsDoc)B(R);l(W,F)}function q(W){W._children=void 0,om(W,W.pos+w,W.end+w);for(let Y of W)B(Y)}}function o(x){switch(x.kind){case 10:case 8:case 79:return!0}return!1}function s(x,A,w,C,P){L.assert(x.end>=A,\"Adjusting an element that was entirely before the change range\"),L.assert(x.pos<=w,\"Adjusting an element that was entirely after the change range\"),L.assert(x.pos<=x.end);let F=Math.min(x.pos,C),B=x.end>=w?x.end+P:Math.min(x.end,C);L.assert(F<=B),x.parent&&(L.assertGreaterThanOrEqual(F,x.parent.pos),L.assertLessThanOrEqual(B,x.parent.end)),om(x,F,B)}function l(x,A){if(A){let w=x.pos,C=P=>{L.assert(P.pos>=w),w=P.end};if(Kd(x))for(let P of x.jsDoc)C(P);pa(x,C),L.assert(w<=x.end)}}function f(x,A,w,C,P,F,B,q){W(x);return;function W(R){if(L.assert(R.pos<=R.end),R.pos>w){i(R,!1,P,F,B,q);return}let ie=R.end;if(ie>=A){if(R.intersectsChange=!0,R._children=void 0,s(R,A,w,C,P),pa(R,W,Y),Kd(R))for(let $ of R.jsDoc)W($);l(R,q);return}L.assert(ie<A)}function Y(R){if(L.assert(R.pos<=R.end),R.pos>w){i(R,!0,P,F,B,q);return}let ie=R.end;if(ie>=A){R.intersectsChange=!0,R._children=void 0,s(R,A,w,C,P);for(let $ of R)W($);return}L.assert(ie<A)}}function d(x,A){let C=A.span.start;for(let B=0;C>0&&B<=1;B++){let q=g(x,C);L.assert(q.pos<=C);let W=q.pos;C=Math.max(0,W-1)}let P=Wc(C,wl(A.span)),F=A.newLength+(A.span.start-C);return Sw(P,F)}function g(x,A){let w=x,C;if(pa(x,F),C){let B=P(C);B.pos>w.pos&&(w=B)}return w;function P(B){for(;;){let q=yW(B);if(q)B=q;else return B}}function F(B){if(!rc(B))if(B.pos<=A){if(B.pos>=w.pos&&(w=B),A<B.end)return pa(B,F),!0;L.assert(B.end<=A),C=B}else return L.assert(B.pos>A),!0}}function m(x,A,w,C){let P=x.text;if(w&&(L.assert(P.length-w.span.length+w.newLength===A.length),C||L.shouldAssert(3))){let F=P.substr(0,w.span.start),B=A.substr(0,w.span.start);L.assert(F===B);let q=P.substring(wl(w.span),P.length),W=A.substring(wl(uI(w)),A.length);L.assert(q===W)}}function v(x){let A=x.statements,w=0;L.assert(w<A.length);let C=A[w],P=-1;return{currentNode(B){return B!==P&&(C&&C.end===B&&w<A.length-1&&(w++,C=A[w]),(!C||C.pos!==B)&&F(B)),P=B,L.assert(!C||C.pos===B),C}};function F(B){A=void 0,w=-1,C=void 0,pa(x,q,W);return;function q(Y){return B>=Y.pos&&B<Y.end?(pa(Y,q,W),!0):!1}function W(Y){if(B>=Y.pos&&B<Y.end)for(let R=0;R<Y.length;R++){let ie=Y[R];if(ie){if(ie.pos===B)return A=Y,w=R,C=ie,!0;if(ie.pos<B&&B<ie.end)return pa(ie,q,W),!0}}return!1}}}e.createSyntaxCursor=v;let S;(x=>{x[x.Value=-1]=\"Value\"})(S||(S={}))})(D3||(D3={})),w3=new Map,Wde=/^\\/\\/\\/\\s*<(\\S+)\\s.*?\\/>/im,zde=/^\\/\\/\\/?\\s*@(\\S+)\\s*(.*)\\s*$/im}});function R3(e){let t=new Map,r=new Map;return mn(e,i=>{t.set(i.name.toLowerCase(),i),i.shortName&&r.set(i.shortName,i.name)}),{optionsNameMap:t,shortOptionNames:r}}function w2(){return Efe||(Efe=R3(Fh))}function pJ(e){return Jde(e,ps)}function Jde(e,t){let r=lo(e.type.keys()),i=(e.deprecatedKeys?r.filter(o=>!e.deprecatedKeys.has(o)):r).map(o=>`'${o}'`).join(\", \");return t(_.Argument_for_0_option_must_be_Colon_1,`--${e.name}`,i)}function O3(e,t,r){return mfe(e,v0(t||\"\"),r)}function Kde(e,t=\"\",r){if(t=v0(t),na(t,\"-\"))return;if(e.type===\"listOrElement\"&&!jl(t,\",\"))return HT(e,t,r);if(t===\"\")return[];let i=t.split(\",\");switch(e.element.type){case\"number\":return Zi(i,o=>HT(e.element,parseInt(o),r));case\"string\":return Zi(i,o=>HT(e.element,o||\"\",r));case\"boolean\":case\"object\":return L.fail(`List of ${e.element.type} is not yet supported.`);default:return Zi(i,o=>O3(e.element,o,r))}}function qde(e){return e.name}function mJ(e,t,r,i){var o;if((o=t.alternateMode)!=null&&o.getOptionsNameMap().optionsNameMap.has(e.toLowerCase()))return r(t.alternateMode.diagnostic,e);let s=$C(e,t.optionDeclarations,qde);return s?r(t.unknownDidYouMeanDiagnostic,i||e,s.name):r(t.unknownOptionDiagnostic,i||e)}function hJ(e,t,r){let i={},o,s=[],l=[];return f(t),{options:i,watchOptions:o,fileNames:s,errors:l};function f(g){let m=0;for(;m<g.length;){let v=g[m];if(m++,v.charCodeAt(0)===64)d(v.slice(1));else if(v.charCodeAt(0)===45){let S=v.slice(v.charCodeAt(1)===45?2:1),x=yJ(e.getOptionsNameMap,S,!0);if(x)m=Xde(g,m,e,x,i,l);else{let A=yJ(KO.getOptionsNameMap,S,!0);A?m=Xde(g,m,KO,A,o||(o={}),l):l.push(mJ(S,e,ps,v))}}else s.push(v)}}function d(g){let m=NO(g,r||(x=>xl.readFile(x)));if(!Ta(m)){l.push(m);return}let v=[],S=0;for(;;){for(;S<m.length&&m.charCodeAt(S)<=32;)S++;if(S>=m.length)break;let x=S;if(m.charCodeAt(x)===34){for(S++;S<m.length&&m.charCodeAt(S)!==34;)S++;S<m.length?(v.push(m.substring(x+1,S)),S++):l.push(ps(_.Unterminated_quoted_string_in_response_file_0,g))}else{for(;m.charCodeAt(S)>32;)S++;v.push(m.substring(x,S))}}f(v)}}function Xde(e,t,r,i,o,s){if(i.isTSConfigOnly){let l=e[t];l===\"null\"?(o[i.name]=void 0,t++):i.type===\"boolean\"?l===\"false\"?(o[i.name]=HT(i,!1,s),t++):(l===\"true\"&&t++,s.push(ps(_.Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line,i.name))):(s.push(ps(_.Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line,i.name)),l&&!na(l,\"-\")&&t++)}else if(!e[t]&&i.type!==\"boolean\"&&s.push(ps(r.optionTypeMismatchDiagnostic,i.name,OL(i))),e[t]!==\"null\")switch(i.type){case\"number\":o[i.name]=HT(i,parseInt(e[t]),s),t++;break;case\"boolean\":let l=e[t];o[i.name]=HT(i,l!==\"false\",s),(l===\"false\"||l===\"true\")&&t++;break;case\"string\":o[i.name]=HT(i,e[t]||\"\",s),t++;break;case\"list\":let f=Kde(i,e[t],s);o[i.name]=f||[],f&&t++;break;case\"listOrElement\":L.fail(\"listOrElement not supported here\");break;default:o[i.name]=O3(i,e[t],s),t++;break}else o[i.name]=void 0,t++;return t}function $Oe(e,t){return hJ(JO,e,t)}function gJ(e,t){return yJ(w2,e,t)}function yJ(e,t,r=!1){t=t.toLowerCase();let{optionsNameMap:i,shortOptionNames:o}=e();if(r){let s=o.get(t);s!==void 0&&(t=s)}return i.get(t)}function Yde(){return Sfe||(Sfe=R3(j3))}function QOe(e){let{options:t,watchOptions:r,fileNames:i,errors:o}=hJ(Afe,e),s=t;return i.length===0&&i.push(\".\"),s.clean&&s.force&&o.push(ps(_.Options_0_and_1_cannot_be_combined,\"clean\",\"force\")),s.clean&&s.verbose&&o.push(ps(_.Options_0_and_1_cannot_be_combined,\"clean\",\"verbose\")),s.clean&&s.watch&&o.push(ps(_.Options_0_and_1_cannot_be_combined,\"clean\",\"watch\")),s.watch&&s.dry&&o.push(ps(_.Options_0_and_1_cannot_be_combined,\"watch\",\"dry\")),{buildOptions:s,watchOptions:r,projects:i,errors:o}}function ZOe(e,...t){return ps.apply(void 0,arguments).messageText}function RO(e,t,r,i,o,s){let l=NO(e,g=>r.readFile(g));if(!Ta(l)){r.onUnRecoverableConfigFileDiagnostic(l);return}let f=wO(e,l),d=r.getCurrentDirectory();return f.path=Ts(e,d,Dl(r.useCaseSensitiveFileNames)),f.resolvedPath=f.path,f.originalFileName=f.fileName,MO(f,r,_a(ni(e),d),t,_a(e,d),void 0,s,i,o)}function OO(e,t){let r=NO(e,t);return Ta(r)?vJ(e,r):{config:{},error:r}}function vJ(e,t){let r=wO(e,t);return{config:nfe(r,r.parseDiagnostics,!1,void 0),error:r.parseDiagnostics.length?r.parseDiagnostics[0]:void 0}}function $de(e,t){let r=NO(e,t);return Ta(r)?wO(e,r):{fileName:e,parseDiagnostics:[r]}}function NO(e,t){let r;try{r=t(e)}catch(i){return ps(_.Cannot_read_file_0_Colon_1,e,i.message)}return r===void 0?ps(_.Cannot_read_file_0,e):r}function N3(e){return p0(e,qde)}function Qde(){return Cfe||(Cfe=R3(HO))}function Zde(){return Ife||(Ife=N3(Fh))}function efe(){return Lfe||(Lfe=N3(HO))}function tfe(){return kfe||(kfe=N3(H3))}function eNe(){return jJ===void 0&&(jJ={name:void 0,type:\"object\",elementOptions:N3([{name:\"compilerOptions\",type:\"object\",elementOptions:Zde(),extraKeyDiagnostics:JO},{name:\"watchOptions\",type:\"object\",elementOptions:efe(),extraKeyDiagnostics:KO},{name:\"typeAcquisition\",type:\"object\",elementOptions:tfe(),extraKeyDiagnostics:VJ},qO,{name:\"references\",type:\"list\",element:{name:\"references\",type:\"object\"},category:_.Projects},{name:\"files\",type:\"list\",element:{name:\"files\",type:\"string\"},category:_.File_Management},{name:\"include\",type:\"list\",element:{name:\"include\",type:\"string\"},category:_.File_Management,defaultValueDescription:_.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk},{name:\"exclude\",type:\"list\",element:{name:\"exclude\",type:\"string\"},category:_.File_Management,defaultValueDescription:_.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified},UO])}),jJ}function nfe(e,t,r,i){var o;let s=(o=e.statements[0])==null?void 0:o.expression,l=r?eNe():void 0;if(s&&s.kind!==207){if(t.push(Nu(e,s,_.The_root_value_of_a_0_file_must_be_an_object,Hl(e.fileName)===\"jsconfig.json\"?\"jsconfig.json\":\"tsconfig.json\")),fu(s)){let f=wr(s.elements,rs);if(f)return PO(e,f,t,!0,l,i)}return{}}return PO(e,s,t,!0,l,i)}function rfe(e,t){var r;return PO(e,(r=e.statements[0])==null?void 0:r.expression,t,!0,void 0,void 0)}function PO(e,t,r,i,o,s){if(!t)return i?{}:void 0;return g(t,o);function l(v){return o&&o.elementOptions===v}function f(v,S,x,A){let w=i?{}:void 0;for(let C of v.properties){if(C.kind!==299){r.push(Nu(e,C,_.Property_assignment_expected));continue}C.questionToken&&r.push(Nu(e,C.questionToken,_.The_0_modifier_can_only_be_used_in_TypeScript_files,\"?\")),m(C.name)||r.push(Nu(e,C.name,_.String_literal_with_double_quotes_expected));let P=Vw(C.name)?void 0:wA(C.name),F=P&&Gi(P),B=F&&S?S.get(F):void 0;F&&x&&!B&&(S?r.push(mJ(F,x,(W,Y,R)=>Nu(e,C.name,W,Y,R))):r.push(Nu(e,C.name,x.unknownOptionDiagnostic,F)));let q=g(C.initializer,B);if(typeof F<\"u\"&&(i&&(w[F]=q),s&&(A||l(S)))){let W=P3(B,q);A?W&&s.onSetValidOptionKeyValueInParent(A,B,q):l(S)&&(W?s.onSetValidOptionKeyValueInRoot(F,C.name,q,C.initializer):B||s.onSetUnknownOptionKeyValueInRoot(F,C.name,q,C.initializer))}}return w}function d(v,S){if(!i){v.forEach(x=>g(x,S));return}return Pr(v.map(x=>g(x,S)),x=>x!==void 0)}function g(v,S){let x;switch(v.kind){case 110:return w(S&&S.type!==\"boolean\"&&(S.type!==\"listOrElement\"||S.element.type!==\"boolean\")),A(!0);case 95:return w(S&&S.type!==\"boolean\"&&(S.type!==\"listOrElement\"||S.element.type!==\"boolean\")),A(!1);case 104:return w(S&&S.name===\"extends\"),A(null);case 10:m(v)||r.push(Nu(e,v,_.String_literal_with_double_quotes_expected)),w(S&&Ta(S.type)&&S.type!==\"string\"&&(S.type!==\"listOrElement\"||Ta(S.element.type)&&S.element.type!==\"string\"));let C=v.text;if(S&&L.assert(S.type!==\"listOrElement\"||S.element.type===\"string\",\"Only string or array of string is handled for now\"),S&&!Ta(S.type)){let F=S;F.type.has(C.toLowerCase())||(r.push(Jde(F,(B,q,W)=>Nu(e,v,B,q,W))),x=!0)}return A(C);case 8:return w(S&&S.type!==\"number\"&&(S.type!==\"listOrElement\"||S.element.type!==\"number\")),A(Number(v.text));case 221:if(v.operator!==40||v.operand.kind!==8)break;return w(S&&S.type!==\"number\"&&(S.type!==\"listOrElement\"||S.element.type!==\"number\")),A(-Number(v.operand.text));case 207:w(S&&S.type!==\"object\"&&(S.type!==\"listOrElement\"||S.element.type!==\"object\"));let P=v;if(S){let{elementOptions:F,extraKeyDiagnostics:B,name:q}=S;return A(f(P,F,B,q))}else return A(f(P,void 0,void 0,void 0));case 206:return w(S&&S.type!==\"list\"&&S.type!==\"listOrElement\"),A(d(v.elements,S&&S.element))}S?w(!0):r.push(Nu(e,v,_.Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal));return;function A(C){var P;if(!x){let F=(P=S?.extraValidation)==null?void 0:P.call(S,C);if(F){r.push(Nu(e,v,...F));return}}return C}function w(C){C&&(r.push(Nu(e,v,_.Compiler_option_0_requires_a_value_of_type_1,S.name,OL(S))),x=!0)}}function m(v){return yo(v)&&V6(v,e)}}function OL(e){return e.type===\"listOrElement\"?`${OL(e.element)} or Array`:e.type===\"list\"?\"Array\":Ta(e.type)?e.type:\"string\"}function P3(e,t){if(e){if(R2(t))return!0;if(e.type===\"list\")return ba(t);if(e.type===\"listOrElement\")return ba(t)||P3(e.element,t);let r=Ta(e.type)?e.type:\"string\";return typeof t===r}return!1}function tNe(e,t,r){var i,o,s;let l=Dl(r.useCaseSensitiveFileNames),f=on(Pr(e.fileNames,(o=(i=e.options.configFile)==null?void 0:i.configFileSpecs)!=null&&o.validatedIncludeSpecs?rNe(t,e.options.configFile.configFileSpecs.validatedIncludeSpecs,e.options.configFile.configFileSpecs.validatedExcludeSpecs,r):h0),v=>_w(_a(t,r.getCurrentDirectory()),_a(v,r.getCurrentDirectory()),l)),d=TJ(e.options,{configFilePath:_a(t,r.getCurrentDirectory()),useCaseSensitiveFileNames:r.useCaseSensitiveFileNames}),g=e.watchOptions&&iNe(e.watchOptions);return{compilerOptions:{...bJ(d),showConfig:void 0,configFile:void 0,configFilePath:void 0,help:void 0,init:void 0,listFiles:void 0,listEmittedFiles:void 0,project:void 0,build:void 0,version:void 0},watchOptions:g&&bJ(g),references:on(e.projectReferences,v=>({...v,path:v.originalPath?v.originalPath:\"\",originalPath:void 0})),files:Fn(f)?f:void 0,...(s=e.options.configFile)!=null&&s.configFileSpecs?{include:nNe(e.options.configFile.configFileSpecs.validatedIncludeSpecs),exclude:e.options.configFile.configFileSpecs.validatedExcludeSpecs}:{},compileOnSave:e.compileOnSave?!0:void 0}}function bJ(e){return{...lo(e.entries()).reduce((t,r)=>({...t,[r[0]]:r[1]}),{})}}function nNe(e){if(Fn(e)){if(Fn(e)!==1)return e;if(e[0]!==z3)return e}}function rNe(e,t,r,i){if(!t)return h0;let o=tL(e,r,t,i.useCaseSensitiveFileNames,i.getCurrentDirectory()),s=o.excludePattern&&Qy(o.excludePattern,i.useCaseSensitiveFileNames),l=o.includeFilePattern&&Qy(o.includeFilePattern,i.useCaseSensitiveFileNames);return l?s?f=>!(l.test(f)&&!s.test(f)):f=>!l.test(f):s?f=>s.test(f):h0}function ife(e){switch(e.type){case\"string\":case\"number\":case\"boolean\":case\"object\":return;case\"list\":case\"listOrElement\":return ife(e.element);default:return e.type}}function EJ(e,t){return Ld(t,(r,i)=>{if(r===e)return i})}function TJ(e,t){return afe(e,w2(),t)}function iNe(e){return afe(e,Qde())}function afe(e,{optionsNameMap:t},r){let i=new Map,o=r&&Dl(r.useCaseSensitiveFileNames);for(let s in e)if(fs(e,s)){if(t.has(s)&&(t.get(s).category===_.Command_line_Options||t.get(s).category===_.Output_Formatting))continue;let l=e[s],f=t.get(s.toLowerCase());if(f){L.assert(f.type!==\"listOrElement\");let d=ife(f);d?f.type===\"list\"?i.set(s,l.map(g=>EJ(g,d))):i.set(s,EJ(l,d)):r&&f.isFilePath?i.set(s,_w(r.configFilePath,_a(l,ni(r.configFilePath)),o)):i.set(s,l)}}return i}function aNe(e,t){let r=ofe(e);return o();function i(s){return Array(s+1).join(\" \")}function o(){let s=[],l=i(2);return B3.forEach(f=>{if(!r.has(f.name))return;let d=r.get(f.name),g=wJ(f);d!==g?s.push(`${l}${f.name}: ${d}`):fs(W3,f.name)&&s.push(`${l}${f.name}: ${g}`)}),s.join(t)+t}}function ofe(e){let t=d8(e,W3);return TJ(t)}function oNe(e,t,r){let i=ofe(e);return l();function o(f){return Array(f+1).join(\" \")}function s({category:f,name:d,isCommandLineOnly:g}){let m=[_.Command_line_Options,_.Editor_Support,_.Compiler_Diagnostics,_.Backwards_Compatibility,_.Watch_and_Build_Modes,_.Output_Formatting];return!g&&f!==void 0&&(!m.includes(f)||i.has(d))}function l(){let f=new Map;f.set(_.Projects,[]),f.set(_.Language_and_Environment,[]),f.set(_.Modules,[]),f.set(_.JavaScript_Support,[]),f.set(_.Emit,[]),f.set(_.Interop_Constraints,[]),f.set(_.Type_Checking,[]),f.set(_.Completeness,[]);for(let x of Fh)if(s(x)){let A=f.get(x.category);A||f.set(x.category,A=[]),A.push(x)}let d=0,g=0,m=[];f.forEach((x,A)=>{m.length!==0&&m.push({value:\"\"}),m.push({value:`/* ${uo(A)} */`});for(let w of x){let C;i.has(w.name)?C=`\"${w.name}\": ${JSON.stringify(i.get(w.name))}${(g+=1)===i.size?\"\":\",\"}`:C=`// \"${w.name}\": ${JSON.stringify(wJ(w))},`,m.push({value:C,description:`/* ${w.description&&uo(w.description)||w.name} */`}),d=Math.max(C.length,d)}});let v=o(2),S=[];S.push(\"{\"),S.push(`${v}\"compilerOptions\": {`),S.push(`${v}${v}/* ${uo(_.Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file)} */`),S.push(\"\");for(let x of m){let{value:A,description:w=\"\"}=x;S.push(A&&`${v}${v}${A}${w&&o(d-A.length+2)+w}`)}if(t.length){S.push(`${v}},`),S.push(`${v}\"files\": [`);for(let x=0;x<t.length;x++)S.push(`${v}${v}${JSON.stringify(t[x])}${x===t.length-1?\"\":\",\"}`);S.push(`${v}]`)}else S.push(`${v}}`);return S.push(\"}\"),S.join(r)+r}}function SJ(e,t){let r={},i=w2().optionsNameMap;for(let o in e)fs(e,o)&&(r[o]=sNe(i.get(o.toLowerCase()),e[o],t));return r.configFilePath&&(r.configFilePath=t(r.configFilePath)),r}function sNe(e,t,r){if(e&&!R2(t)){if(e.type===\"list\"){let i=t;if(e.element.isFilePath&&i.length)return i.map(r)}else if(e.isFilePath)return r(t);L.assert(e.type!==\"listOrElement\")}return t}function cNe(e,t,r,i,o,s,l,f,d){return sfe(e,void 0,t,r,i,d,o,s,l,f)}function MO(e,t,r,i,o,s,l,f,d){var g,m;(g=ai)==null||g.push(ai.Phase.Parse,\"parseJsonSourceFileConfigFileContent\",{path:e.fileName});let v=sfe(void 0,e,t,r,i,d,o,s,l,f);return(m=ai)==null||m.pop(),v}function xJ(e,t){t&&Object.defineProperty(e,\"configFile\",{enumerable:!1,writable:!1,value:t})}function R2(e){return e==null}function AJ(e,t){return ni(_a(e,t))}function sfe(e,t,r,i,o={},s,l,f=[],d=[],g){L.assert(e===void 0&&t!==void 0||e!==void 0&&t===void 0);let m=[],v=ufe(e,t,r,i,l,f,m,g),{raw:S}=v,x=d8(o,v.options||{}),A=s&&v.watchOptions?d8(s,v.watchOptions):v.watchOptions||s;x.configFilePath=l&&Al(l);let w=P();t&&(t.configFileSpecs=w),xJ(x,t);let C=So(l?AJ(l,i):i);return{options:x,watchOptions:A,fileNames:F(C),projectReferences:B(C),typeAcquisition:v.typeAcquisition||F3(),raw:S,errors:m,wildcardDirectories:yNe(w,C,r.useCaseSensitiveFileNames),compileOnSave:!!S.compileOnSave};function P(){let ie=Y(\"references\",ge=>typeof ge==\"object\",\"object\"),$=q(W(\"files\"));if($){let ge=ie===\"no-prop\"||ba(ie)&&ie.length===0,X=fs(S,\"extends\");if($.length===0&&ge&&!X)if(t){let Ve=l||\"tsconfig.json\",we=_.The_files_list_in_config_file_0_is_empty,ke=ks(Hw(t,\"files\"),Ce=>Ce.initializer),Pe=ke?Nu(t,ke,we,Ve):ps(we,Ve);m.push(Pe)}else R(_.The_files_list_in_config_file_0_is_empty,l||\"tsconfig.json\")}let fe=q(W(\"include\")),Z=W(\"exclude\"),U=!1,re=q(Z);if(Z===\"no-prop\"&&S.compilerOptions){let ge=S.compilerOptions.outDir,X=S.compilerOptions.declarationDir;(ge||X)&&(re=[ge,X].filter(Ve=>!!Ve))}$===void 0&&fe===void 0&&(fe=[z3],U=!0);let le,_e;return fe&&(le=bfe(fe,m,!0,t,\"include\")),re&&(_e=bfe(re,m,!1,t,\"exclude\")),{filesSpecs:$,includeSpecs:fe,excludeSpecs:re,validatedFilesSpec:Pr($,Ta),validatedIncludeSpecs:le,validatedExcludeSpecs:_e,pathPatterns:void 0,isDefaultIncludeSpec:U}}function F(ie){let $=BO(w,ie,x,r,d);return lfe($,FO(S),f)&&m.push(cfe(w,l)),$}function B(ie){let $,fe=Y(\"references\",Z=>typeof Z==\"object\",\"object\");if(ba(fe))for(let Z of fe)typeof Z.path!=\"string\"?R(_.Compiler_option_0_requires_a_value_of_type_1,\"reference.path\",\"string\"):($||($=[])).push({path:_a(Z.path,ie),originalPath:Z.path,prepend:Z.prepend,circular:Z.circular});return $}function q(ie){return ba(ie)?ie:void 0}function W(ie){return Y(ie,Ta,\"string\")}function Y(ie,$,fe){if(fs(S,ie)&&!R2(S[ie]))if(ba(S[ie])){let Z=S[ie];return!t&&!Ji(Z,$)&&m.push(ps(_.Compiler_option_0_requires_a_value_of_type_1,ie,fe)),Z}else return R(_.Compiler_option_0_requires_a_value_of_type_1,ie,\"Array\"),\"not-array\";return\"no-prop\"}function R(ie,$,fe){t||m.push(ps(ie,$,fe))}}function lNe(e){return e.code===_.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2.code}function cfe({includeSpecs:e,excludeSpecs:t},r){return ps(_.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2,r||\"tsconfig.json\",JSON.stringify(e||[]),JSON.stringify(t||[]))}function lfe(e,t,r){return e.length===0&&t&&(!r||r.length===0)}function FO(e){return!fs(e,\"files\")&&!fs(e,\"references\")}function CJ(e,t,r,i,o){let s=i.length;return lfe(e,o)?i.push(cfe(r,t)):wU(i,l=>!lNe(l)),s!==i.length}function uNe(e){return!!e.options}function ufe(e,t,r,i,o,s,l,f){var d;i=Al(i);let g=_a(o||\"\",i);if(s.indexOf(g)>=0)return l.push(ps(_.Circularity_detected_while_resolving_configuration_Colon_0,[...s,g].join(\" -> \"))),{raw:e||rfe(t,l)};let m=e?dNe(e,r,i,o,l):fNe(t,r,i,o,l);if((d=m.options)!=null&&d.paths&&(m.options.pathsBasePath=i),m.extendedConfigPath){s=s.concat([g]);let S={options:{}};Ta(m.extendedConfigPath)?v(S,m.extendedConfigPath):m.extendedConfigPath.forEach(x=>v(S,x)),!m.raw.include&&S.include&&(m.raw.include=S.include),!m.raw.exclude&&S.exclude&&(m.raw.exclude=S.exclude),!m.raw.files&&S.files&&(m.raw.files=S.files),m.raw.compileOnSave===void 0&&S.compileOnSave&&(m.raw.compileOnSave=S.compileOnSave),t&&S.extendedSourceFiles&&(t.extendedSourceFiles=lo(S.extendedSourceFiles.keys())),m.options=JD(S.options,m.options),m.watchOptions=m.watchOptions&&S.watchOptions?JD(S.watchOptions,m.watchOptions):m.watchOptions||S.watchOptions}return m;function v(S,x){let A=_Ne(t,x,r,s,l,f,S);if(A&&uNe(A)){let w=A.raw,C,P=F=>{w[F]&&(S[F]=on(w[F],B=>qp(B)?B:vi(C||(C=rI(ni(x),i,Dl(r.useCaseSensitiveFileNames))),B)))};P(\"include\"),P(\"exclude\"),P(\"files\"),w.compileOnSave!==void 0&&(S.compileOnSave=w.compileOnSave),JD(S.options,A.options),S.watchOptions=S.watchOptions&&A.watchOptions?JD({},S.watchOptions,A.watchOptions):S.watchOptions||A.watchOptions}}}function dNe(e,t,r,i,o){fs(e,\"excludes\")&&o.push(ps(_.Unknown_option_excludes_Did_you_mean_exclude));let s=ffe(e.compilerOptions,r,o,i),l=_fe(e.typeAcquisition,r,o,i),f=gNe(e.watchOptions,r,o);e.compileOnSave=pNe(e,r,o);let d;if(e.extends||e.extends===\"\")if(!P3(qO,e.extends))o.push(ps(_.Compiler_option_0_requires_a_value_of_type_1,\"extends\",OL(qO)));else{let g=i?AJ(i,r):r;if(Ta(e.extends))d=M3(e.extends,t,g,o,ps);else{d=[];for(let m of e.extends)Ta(m)?d=Sn(d,M3(m,t,g,o,ps)):o.push(ps(_.Compiler_option_0_requires_a_value_of_type_1,\"extends\",OL(qO.element)))}}return{raw:e,options:s,watchOptions:f,typeAcquisition:l,extendedConfigPath:d}}function fNe(e,t,r,i,o){let s=dfe(i),l,f,d,g,v=nfe(e,o,!0,{onSetValidOptionKeyValueInParent(S,x,A){let w;switch(S){case\"compilerOptions\":w=s;break;case\"watchOptions\":w=f||(f={});break;case\"typeAcquisition\":w=l||(l=F3(i));break;default:L.fail(\"Unknown option\")}w[x.name]=LJ(x,r,A)},onSetValidOptionKeyValueInRoot(S,x,A,w){switch(S){case\"extends\":let C=i?AJ(i,r):r;if(Ta(A))d=M3(A,t,C,o,(P,F)=>Nu(e,w,P,F));else{d=[];for(let P=0;P<A.length;P++){let F=A[P];Ta(F)&&(d=Sn(d,M3(F,t,C,o,(B,q)=>Nu(e,w.elements[P],B,q))))}}return}},onSetUnknownOptionKeyValueInRoot(S,x,A,w){S===\"excludes\"&&o.push(Nu(e,x,_.Unknown_option_excludes_Did_you_mean_exclude)),wr(B3,C=>C.name===S)&&(g=Sn(g,x))}});return l||(l=F3(i)),g&&v&&v.compilerOptions===void 0&&o.push(Nu(e,g[0],_._0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file,wA(g[0]))),{raw:v,options:s,watchOptions:f,typeAcquisition:l,extendedConfigPath:d}}function M3(e,t,r,i,o){if(e=Al(e),qp(e)||na(e,\"./\")||na(e,\"../\")){let l=_a(e,r);if(!t.fileExists(l)&&!Oc(l,\".json\")&&(l=`${l}.json`,!t.fileExists(l))){i.push(o(_.File_0_not_found,e));return}return l}let s=Jfe(e,vi(r,\"tsconfig.json\"),t);if(s.resolvedModule)return s.resolvedModule.resolvedFileName;e===\"\"?i.push(o(_.Compiler_option_0_cannot_be_given_an_empty_string,\"extends\")):i.push(o(_.File_0_not_found,e))}function _Ne(e,t,r,i,o,s,l){var f;let d=r.useCaseSensitiveFileNames?t:n_(t),g,m,v;if(s&&(g=s.get(d))?{extendedResult:m,extendedConfig:v}=g:(m=$de(t,S=>r.readFile(S)),m.parseDiagnostics.length||(v=ufe(void 0,m,r,ni(t),Hl(t),i,o,s)),s&&s.set(d,{extendedResult:m,extendedConfig:v})),e&&(((f=l.extendedSourceFiles)!=null?f:l.extendedSourceFiles=new Set).add(m.fileName),m.extendedSourceFiles))for(let S of m.extendedSourceFiles)l.extendedSourceFiles.add(S);if(m.parseDiagnostics.length){o.push(...m.parseDiagnostics);return}return v}function pNe(e,t,r){if(!fs(e,UO.name))return!1;let i=GO(UO,e.compileOnSave,t,r);return typeof i==\"boolean\"&&i}function mNe(e,t,r){let i=[];return{options:ffe(e,t,i,r),errors:i}}function hNe(e,t,r){let i=[];return{options:_fe(e,t,i,r),errors:i}}function dfe(e){return e&&Hl(e)===\"jsconfig.json\"?{allowJs:!0,maxNodeModuleJsDepth:2,allowSyntheticDefaultImports:!0,skipLibCheck:!0,noEmit:!0}:{}}function ffe(e,t,r,i){let o=dfe(i);return IJ(Zde(),e,t,o,JO,r),i&&(o.configFilePath=Al(i)),o}function F3(e){return{enable:!!e&&Hl(e)===\"jsconfig.json\",include:[],exclude:[]}}function _fe(e,t,r,i){let o=F3(i);return IJ(tfe(),e,t,o,VJ,r),o}function gNe(e,t,r){return IJ(efe(),e,t,void 0,KO,r)}function IJ(e,t,r,i,o,s){if(t){for(let l in t){let f=e.get(l);f?(i||(i={}))[f.name]=GO(f,t[l],r,s):s.push(mJ(l,o,ps))}return i}}function GO(e,t,r,i){if(P3(e,t)){let o=e.type;if(o===\"list\"&&ba(t))return hfe(e,t,r,i);if(o===\"listOrElement\")return ba(t)?hfe(e,t,r,i):GO(e.element,t,r,i);if(!Ta(e.type))return mfe(e,t,i);let s=HT(e,t,i);return R2(s)?s:pfe(e,r,s)}else i.push(ps(_.Compiler_option_0_requires_a_value_of_type_1,e.name,OL(e)))}function LJ(e,t,r){if(!R2(r)){if(e.type===\"listOrElement\"&&!ba(r))return LJ(e.element,t,r);if(e.type===\"list\"||e.type===\"listOrElement\"){let i=e;return i.element.isFilePath||!Ta(i.element.type)?Pr(on(r,o=>LJ(i.element,t,o)),o=>i.listPreserveFalsyValues?!0:!!o):r}else if(!Ta(e.type))return e.type.get(Ta(r)?r.toLowerCase():r);return pfe(e,t,r)}}function pfe(e,t,r){return e.isFilePath&&(r=_a(r,t),r===\"\"&&(r=\".\")),r}function HT(e,t,r){var i;if(R2(t))return;let o=(i=e.extraValidation)==null?void 0:i.call(e,t);if(!o)return t;r.push(ps(...o))}function mfe(e,t,r){if(R2(t))return;let i=t.toLowerCase(),o=e.type.get(i);if(o!==void 0)return HT(e,o,r);r.push(pJ(e))}function hfe(e,t,r,i){return Pr(on(t,o=>GO(e.element,o,r,i)),o=>e.listPreserveFalsyValues?!0:!!o)}function BO(e,t,r,i,o=Je){t=So(t);let s=Dl(i.useCaseSensitiveFileNames),l=new Map,f=new Map,d=new Map,{validatedFilesSpec:g,validatedIncludeSpecs:m,validatedExcludeSpecs:v}=e,S=nL(r,o),x=FR(r,S);if(g)for(let P of g){let F=_a(P,t);l.set(s(F),F)}let A;if(m&&m.length>0)for(let P of i.readDirectory(t,t_(x),v,m,void 0)){if(Gc(P,\".json\")){if(!A){let q=m.filter(Y=>Oc(Y,\".json\")),W=on(m4(q,t,\"files\"),Y=>`^${Y}$`);A=W?W.map(Y=>Qy(Y,i.useCaseSensitiveFileNames)):Je}if(Yc(A,q=>q.test(P))!==-1){let q=s(P);!l.has(q)&&!d.has(q)&&d.set(q,P)}continue}if(bNe(P,l,f,S,s))continue;ENe(P,f,S,s);let F=s(P);!l.has(F)&&!f.has(F)&&f.set(F,P)}let w=lo(l.values()),C=lo(f.values());return w.concat(C,lo(d.values()))}function gfe(e,t,r,i,o){let{validatedFilesSpec:s,validatedIncludeSpecs:l,validatedExcludeSpecs:f}=t;if(!Fn(l)||!Fn(f))return!1;r=So(r);let d=Dl(i);if(s){for(let g of s)if(d(_a(g,r))===e)return!1}return vfe(e,f,i,o,r)}function yfe(e){let t=na(e,\"**/\")?0:e.indexOf(\"/**/\");return t===-1?!1:(Oc(e,\"/..\")?e.length:e.lastIndexOf(\"/../\"))>t}function G3(e,t,r,i){return vfe(e,Pr(t,o=>!yfe(o)),r,i)}function vfe(e,t,r,i,o){let s=eL(t,vi(So(i),o),\"exclude\"),l=s&&Qy(s,r);return l?l.test(e)?!0:!gA(e)&&l.test(cu(e)):!1}function bfe(e,t,r,i,o){return e.filter(l=>{if(!Ta(l))return!1;let f=kJ(l,r);return f!==void 0&&t.push(s(...f)),f===void 0});function s(l,f){let d=w6(i,o,f);return d?Nu(i,d,l,f):ps(l,f)}}function kJ(e,t){if(L.assert(typeof e==\"string\"),t&&Dfe.test(e))return[_.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0,e];if(yfe(e))return[_.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0,e]}function yNe({validatedIncludeSpecs:e,validatedExcludeSpecs:t},r,i){let o=eL(t,r,\"exclude\"),s=o&&new RegExp(o,i?\"\":\"i\"),l={};if(e!==void 0){let f=[];for(let d of e){let g=So(vi(r,d));if(s&&s.test(g))continue;let m=vNe(g,i);if(m){let{key:v,flags:S}=m,x=l[v];(x===void 0||x<S)&&(l[v]=S,S===1&&f.push(v))}}for(let d in l)if(fs(l,d))for(let g of f)d!==g&&Gy(g,d,r,!i)&&delete l[d]}return l}function vNe(e,t){let r=wfe.exec(e);if(r){let i=e.indexOf(\"?\"),o=e.indexOf(\"*\"),s=e.lastIndexOf(_s);return{key:t?r[0]:n_(r[0]),flags:i!==-1&&i<s||o!==-1&&o<s?1:0}}if(LW(e.substring(e.lastIndexOf(_s)+1)))return{key:sT(t?e:n_(e)),flags:1}}function bNe(e,t,r,i,o){let s=mn(i,l=>$c(e,l)?l:void 0);if(!s)return!1;for(let l of s){if(Gc(e,l))return!1;let f=o(V0(e,l));if(t.has(f)||r.has(f)){if(l===\".d.ts\"&&(Gc(e,\".js\")||Gc(e,\".jsx\")))continue;return!0}}return!1}function ENe(e,t,r,i){let o=mn(r,s=>$c(e,s)?s:void 0);if(o)for(let s=o.length-1;s>=0;s--){let l=o[s];if(Gc(e,l))return;let f=i(V0(e,l));t.delete(f)}}function TNe(e){let t={};for(let r in e)if(fs(e,r)){let i=gJ(r);i!==void 0&&(t[r]=DJ(e[r],i))}return t}function DJ(e,t){switch(t.type){case\"object\":return\"\";case\"string\":return\"\";case\"number\":return typeof e==\"number\"?e:\"\";case\"boolean\":return typeof e==\"boolean\"?e:\"\";case\"listOrElement\":if(!ba(e))return DJ(e,t.element);case\"list\":let r=t.element;return ba(e)?e.map(i=>DJ(i,r)):\"\";default:return Ld(t.type,(i,o)=>{if(i===e)return o})}}function wJ(e){switch(e.type){case\"number\":return 1;case\"boolean\":return!0;case\"string\":let t=e.defaultValueDescription;return e.isFilePath?`./${t&&typeof t==\"string\"?t:\"\"}`:\"\";case\"list\":return[];case\"listOrElement\":return wJ(e.element);case\"object\":return{};default:let r=u8(e.type.keys());return r!==void 0?r:L.fail(\"Expected 'option.type' to have entries.\")}}var UO,RJ,NL,OJ,VO,jO,HO,WO,zO,NJ,B3,Fh,PJ,MJ,FJ,U3,V3,GJ,BJ,UJ,j3,H3,Efe,Tfe,W3,JO,Sfe,xfe,Afe,VJ,Cfe,KO,Ife,Lfe,kfe,qO,jJ,z3,Dfe,wfe,SNe=gt({\"src/compiler/commandLineParser.ts\"(){\"use strict\";fa(),UO={name:\"compileOnSave\",type:\"boolean\",defaultValueDescription:!1},RJ=new Map(Object.entries({preserve:1,\"react-native\":3,react:2,\"react-jsx\":4,\"react-jsxdev\":5})),NL=new Map(RU(RJ.entries(),([e,t])=>[\"\"+t,e])),OJ=[[\"es5\",\"lib.es5.d.ts\"],[\"es6\",\"lib.es2015.d.ts\"],[\"es2015\",\"lib.es2015.d.ts\"],[\"es7\",\"lib.es2016.d.ts\"],[\"es2016\",\"lib.es2016.d.ts\"],[\"es2017\",\"lib.es2017.d.ts\"],[\"es2018\",\"lib.es2018.d.ts\"],[\"es2019\",\"lib.es2019.d.ts\"],[\"es2020\",\"lib.es2020.d.ts\"],[\"es2021\",\"lib.es2021.d.ts\"],[\"es2022\",\"lib.es2022.d.ts\"],[\"es2023\",\"lib.es2023.d.ts\"],[\"esnext\",\"lib.esnext.d.ts\"],[\"dom\",\"lib.dom.d.ts\"],[\"dom.iterable\",\"lib.dom.iterable.d.ts\"],[\"webworker\",\"lib.webworker.d.ts\"],[\"webworker.importscripts\",\"lib.webworker.importscripts.d.ts\"],[\"webworker.iterable\",\"lib.webworker.iterable.d.ts\"],[\"scripthost\",\"lib.scripthost.d.ts\"],[\"es2015.core\",\"lib.es2015.core.d.ts\"],[\"es2015.collection\",\"lib.es2015.collection.d.ts\"],[\"es2015.generator\",\"lib.es2015.generator.d.ts\"],[\"es2015.iterable\",\"lib.es2015.iterable.d.ts\"],[\"es2015.promise\",\"lib.es2015.promise.d.ts\"],[\"es2015.proxy\",\"lib.es2015.proxy.d.ts\"],[\"es2015.reflect\",\"lib.es2015.reflect.d.ts\"],[\"es2015.symbol\",\"lib.es2015.symbol.d.ts\"],[\"es2015.symbol.wellknown\",\"lib.es2015.symbol.wellknown.d.ts\"],[\"es2016.array.include\",\"lib.es2016.array.include.d.ts\"],[\"es2017.object\",\"lib.es2017.object.d.ts\"],[\"es2017.sharedmemory\",\"lib.es2017.sharedmemory.d.ts\"],[\"es2017.string\",\"lib.es2017.string.d.ts\"],[\"es2017.intl\",\"lib.es2017.intl.d.ts\"],[\"es2017.typedarrays\",\"lib.es2017.typedarrays.d.ts\"],[\"es2018.asyncgenerator\",\"lib.es2018.asyncgenerator.d.ts\"],[\"es2018.asynciterable\",\"lib.es2018.asynciterable.d.ts\"],[\"es2018.intl\",\"lib.es2018.intl.d.ts\"],[\"es2018.promise\",\"lib.es2018.promise.d.ts\"],[\"es2018.regexp\",\"lib.es2018.regexp.d.ts\"],[\"es2019.array\",\"lib.es2019.array.d.ts\"],[\"es2019.object\",\"lib.es2019.object.d.ts\"],[\"es2019.string\",\"lib.es2019.string.d.ts\"],[\"es2019.symbol\",\"lib.es2019.symbol.d.ts\"],[\"es2019.intl\",\"lib.es2019.intl.d.ts\"],[\"es2020.bigint\",\"lib.es2020.bigint.d.ts\"],[\"es2020.date\",\"lib.es2020.date.d.ts\"],[\"es2020.promise\",\"lib.es2020.promise.d.ts\"],[\"es2020.sharedmemory\",\"lib.es2020.sharedmemory.d.ts\"],[\"es2020.string\",\"lib.es2020.string.d.ts\"],[\"es2020.symbol.wellknown\",\"lib.es2020.symbol.wellknown.d.ts\"],[\"es2020.intl\",\"lib.es2020.intl.d.ts\"],[\"es2020.number\",\"lib.es2020.number.d.ts\"],[\"es2021.promise\",\"lib.es2021.promise.d.ts\"],[\"es2021.string\",\"lib.es2021.string.d.ts\"],[\"es2021.weakref\",\"lib.es2021.weakref.d.ts\"],[\"es2021.intl\",\"lib.es2021.intl.d.ts\"],[\"es2022.array\",\"lib.es2022.array.d.ts\"],[\"es2022.error\",\"lib.es2022.error.d.ts\"],[\"es2022.intl\",\"lib.es2022.intl.d.ts\"],[\"es2022.object\",\"lib.es2022.object.d.ts\"],[\"es2022.sharedmemory\",\"lib.es2022.sharedmemory.d.ts\"],[\"es2022.string\",\"lib.es2022.string.d.ts\"],[\"es2022.regexp\",\"lib.es2022.regexp.d.ts\"],[\"es2023.array\",\"lib.es2023.array.d.ts\"],[\"esnext.array\",\"lib.es2023.array.d.ts\"],[\"esnext.symbol\",\"lib.es2019.symbol.d.ts\"],[\"esnext.asynciterable\",\"lib.es2018.asynciterable.d.ts\"],[\"esnext.intl\",\"lib.esnext.intl.d.ts\"],[\"esnext.bigint\",\"lib.es2020.bigint.d.ts\"],[\"esnext.string\",\"lib.es2022.string.d.ts\"],[\"esnext.promise\",\"lib.es2021.promise.d.ts\"],[\"esnext.weakref\",\"lib.es2021.weakref.d.ts\"],[\"decorators\",\"lib.decorators.d.ts\"],[\"decorators.legacy\",\"lib.decorators.legacy.d.ts\"]],VO=OJ.map(e=>e[0]),jO=new Map(OJ),HO=[{name:\"watchFile\",type:new Map(Object.entries({fixedpollinginterval:0,prioritypollinginterval:1,dynamicprioritypolling:2,fixedchunksizepolling:3,usefsevents:4,usefseventsonparentdirectory:5})),category:_.Watch_and_Build_Modes,description:_.Specify_how_the_TypeScript_watch_mode_works,defaultValueDescription:4},{name:\"watchDirectory\",type:new Map(Object.entries({usefsevents:0,fixedpollinginterval:1,dynamicprioritypolling:2,fixedchunksizepolling:3})),category:_.Watch_and_Build_Modes,description:_.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality,defaultValueDescription:0},{name:\"fallbackPolling\",type:new Map(Object.entries({fixedinterval:0,priorityinterval:1,dynamicpriority:2,fixedchunksize:3})),category:_.Watch_and_Build_Modes,description:_.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers,defaultValueDescription:1},{name:\"synchronousWatchDirectory\",type:\"boolean\",category:_.Watch_and_Build_Modes,description:_.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,defaultValueDescription:!1},{name:\"excludeDirectories\",type:\"list\",element:{name:\"excludeDirectory\",type:\"string\",isFilePath:!0,extraValidation:kJ},category:_.Watch_and_Build_Modes,description:_.Remove_a_list_of_directories_from_the_watch_process},{name:\"excludeFiles\",type:\"list\",element:{name:\"excludeFile\",type:\"string\",isFilePath:!0,extraValidation:kJ},category:_.Watch_and_Build_Modes,description:_.Remove_a_list_of_files_from_the_watch_mode_s_processing}],WO=[{name:\"help\",shortName:\"h\",type:\"boolean\",showInSimplifiedHelpView:!0,isCommandLineOnly:!0,category:_.Command_line_Options,description:_.Print_this_message,defaultValueDescription:!1},{name:\"help\",shortName:\"?\",type:\"boolean\",isCommandLineOnly:!0,category:_.Command_line_Options,defaultValueDescription:!1},{name:\"watch\",shortName:\"w\",type:\"boolean\",showInSimplifiedHelpView:!0,isCommandLineOnly:!0,category:_.Command_line_Options,description:_.Watch_input_files,defaultValueDescription:!1},{name:\"preserveWatchOutput\",type:\"boolean\",showInSimplifiedHelpView:!1,category:_.Output_Formatting,description:_.Disable_wiping_the_console_in_watch_mode,defaultValueDescription:!1},{name:\"listFiles\",type:\"boolean\",category:_.Compiler_Diagnostics,description:_.Print_all_of_the_files_read_during_the_compilation,defaultValueDescription:!1},{name:\"explainFiles\",type:\"boolean\",category:_.Compiler_Diagnostics,description:_.Print_files_read_during_the_compilation_including_why_it_was_included,defaultValueDescription:!1},{name:\"listEmittedFiles\",type:\"boolean\",category:_.Compiler_Diagnostics,description:_.Print_the_names_of_emitted_files_after_a_compilation,defaultValueDescription:!1},{name:\"pretty\",type:\"boolean\",showInSimplifiedHelpView:!0,category:_.Output_Formatting,description:_.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,defaultValueDescription:!0},{name:\"traceResolution\",type:\"boolean\",category:_.Compiler_Diagnostics,description:_.Log_paths_used_during_the_moduleResolution_process,defaultValueDescription:!1},{name:\"diagnostics\",type:\"boolean\",category:_.Compiler_Diagnostics,description:_.Output_compiler_performance_information_after_building,defaultValueDescription:!1},{name:\"extendedDiagnostics\",type:\"boolean\",category:_.Compiler_Diagnostics,description:_.Output_more_detailed_compiler_performance_information_after_building,defaultValueDescription:!1},{name:\"generateCpuProfile\",type:\"string\",isFilePath:!0,paramType:_.FILE_OR_DIRECTORY,category:_.Compiler_Diagnostics,description:_.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,defaultValueDescription:\"profile.cpuprofile\"},{name:\"generateTrace\",type:\"string\",isFilePath:!0,isCommandLineOnly:!0,paramType:_.DIRECTORY,category:_.Compiler_Diagnostics,description:_.Generates_an_event_trace_and_a_list_of_types},{name:\"incremental\",shortName:\"i\",type:\"boolean\",category:_.Projects,description:_.Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects,transpileOptionValue:void 0,defaultValueDescription:_.false_unless_composite_is_set},{name:\"declaration\",shortName:\"d\",type:\"boolean\",affectsBuildInfo:!0,showInSimplifiedHelpView:!0,category:_.Emit,transpileOptionValue:void 0,description:_.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,defaultValueDescription:_.false_unless_composite_is_set},{name:\"declarationMap\",type:\"boolean\",affectsBuildInfo:!0,showInSimplifiedHelpView:!0,category:_.Emit,transpileOptionValue:void 0,defaultValueDescription:!1,description:_.Create_sourcemaps_for_d_ts_files},{name:\"emitDeclarationOnly\",type:\"boolean\",affectsBuildInfo:!0,showInSimplifiedHelpView:!0,category:_.Emit,description:_.Only_output_d_ts_files_and_not_JavaScript_files,transpileOptionValue:void 0,defaultValueDescription:!1},{name:\"sourceMap\",type:\"boolean\",affectsBuildInfo:!0,showInSimplifiedHelpView:!0,category:_.Emit,defaultValueDescription:!1,description:_.Create_source_map_files_for_emitted_JavaScript_files},{name:\"inlineSourceMap\",type:\"boolean\",affectsBuildInfo:!0,category:_.Emit,description:_.Include_sourcemap_files_inside_the_emitted_JavaScript,defaultValueDescription:!1},{name:\"assumeChangesOnlyAffectDirectDependencies\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsBuildInfo:!0,category:_.Watch_and_Build_Modes,description:_.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it,defaultValueDescription:!1},{name:\"locale\",type:\"string\",category:_.Command_line_Options,isCommandLineOnly:!0,description:_.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,defaultValueDescription:_.Platform_specific}],zO={name:\"target\",shortName:\"t\",type:new Map(Object.entries({es3:0,es5:1,es6:2,es2015:2,es2016:3,es2017:4,es2018:5,es2019:6,es2020:7,es2021:8,es2022:9,esnext:99})),affectsSourceFile:!0,affectsModuleResolution:!0,affectsEmit:!0,affectsBuildInfo:!0,paramType:_.VERSION,showInSimplifiedHelpView:!0,category:_.Language_and_Environment,description:_.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,defaultValueDescription:1},NJ={name:\"module\",shortName:\"m\",type:new Map(Object.entries({none:0,commonjs:1,amd:2,system:4,umd:3,es6:5,es2015:5,es2020:6,es2022:7,esnext:99,node16:100,nodenext:199})),affectsModuleResolution:!0,affectsEmit:!0,affectsBuildInfo:!0,paramType:_.KIND,showInSimplifiedHelpView:!0,category:_.Modules,description:_.Specify_what_module_code_is_generated,defaultValueDescription:void 0},B3=[{name:\"all\",type:\"boolean\",showInSimplifiedHelpView:!0,category:_.Command_line_Options,description:_.Show_all_compiler_options,defaultValueDescription:!1},{name:\"version\",shortName:\"v\",type:\"boolean\",showInSimplifiedHelpView:!0,category:_.Command_line_Options,description:_.Print_the_compiler_s_version,defaultValueDescription:!1},{name:\"init\",type:\"boolean\",showInSimplifiedHelpView:!0,category:_.Command_line_Options,description:_.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file,defaultValueDescription:!1},{name:\"project\",shortName:\"p\",type:\"string\",isFilePath:!0,showInSimplifiedHelpView:!0,category:_.Command_line_Options,paramType:_.FILE_OR_DIRECTORY,description:_.Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json},{name:\"build\",type:\"boolean\",shortName:\"b\",showInSimplifiedHelpView:!0,category:_.Command_line_Options,description:_.Build_one_or_more_projects_and_their_dependencies_if_out_of_date,defaultValueDescription:!1},{name:\"showConfig\",type:\"boolean\",showInSimplifiedHelpView:!0,category:_.Command_line_Options,isCommandLineOnly:!0,description:_.Print_the_final_configuration_instead_of_building,defaultValueDescription:!1},{name:\"listFilesOnly\",type:\"boolean\",category:_.Command_line_Options,isCommandLineOnly:!0,description:_.Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing,defaultValueDescription:!1},zO,NJ,{name:\"lib\",type:\"list\",element:{name:\"lib\",type:jO,defaultValueDescription:void 0},affectsProgramStructure:!0,showInSimplifiedHelpView:!0,category:_.Language_and_Environment,description:_.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,transpileOptionValue:void 0},{name:\"allowJs\",type:\"boolean\",affectsModuleResolution:!0,showInSimplifiedHelpView:!0,category:_.JavaScript_Support,description:_.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,defaultValueDescription:!1},{name:\"checkJs\",type:\"boolean\",showInSimplifiedHelpView:!0,category:_.JavaScript_Support,description:_.Enable_error_reporting_in_type_checked_JavaScript_files,defaultValueDescription:!1},{name:\"jsx\",type:RJ,affectsSourceFile:!0,affectsEmit:!0,affectsBuildInfo:!0,affectsModuleResolution:!0,paramType:_.KIND,showInSimplifiedHelpView:!0,category:_.Language_and_Environment,description:_.Specify_what_JSX_code_is_generated,defaultValueDescription:void 0},{name:\"outFile\",type:\"string\",affectsEmit:!0,affectsBuildInfo:!0,affectsDeclarationPath:!0,isFilePath:!0,paramType:_.FILE,showInSimplifiedHelpView:!0,category:_.Emit,description:_.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,transpileOptionValue:void 0},{name:\"outDir\",type:\"string\",affectsEmit:!0,affectsBuildInfo:!0,affectsDeclarationPath:!0,isFilePath:!0,paramType:_.DIRECTORY,showInSimplifiedHelpView:!0,category:_.Emit,description:_.Specify_an_output_folder_for_all_emitted_files},{name:\"rootDir\",type:\"string\",affectsEmit:!0,affectsBuildInfo:!0,affectsDeclarationPath:!0,isFilePath:!0,paramType:_.LOCATION,category:_.Modules,description:_.Specify_the_root_folder_within_your_source_files,defaultValueDescription:_.Computed_from_the_list_of_input_files},{name:\"composite\",type:\"boolean\",affectsBuildInfo:!0,isTSConfigOnly:!0,category:_.Projects,transpileOptionValue:void 0,defaultValueDescription:!1,description:_.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references},{name:\"tsBuildInfoFile\",type:\"string\",affectsEmit:!0,affectsBuildInfo:!0,isFilePath:!0,paramType:_.FILE,category:_.Projects,transpileOptionValue:void 0,defaultValueDescription:\".tsbuildinfo\",description:_.Specify_the_path_to_tsbuildinfo_incremental_compilation_file},{name:\"removeComments\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,showInSimplifiedHelpView:!0,category:_.Emit,defaultValueDescription:!1,description:_.Disable_emitting_comments},{name:\"noEmit\",type:\"boolean\",showInSimplifiedHelpView:!0,category:_.Emit,description:_.Disable_emitting_files_from_a_compilation,transpileOptionValue:void 0,defaultValueDescription:!1},{name:\"importHelpers\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Emit,description:_.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,defaultValueDescription:!1},{name:\"importsNotUsedAsValues\",type:new Map(Object.entries({remove:0,preserve:1,error:2})),affectsEmit:!0,affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Emit,description:_.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types,defaultValueDescription:0},{name:\"downlevelIteration\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Emit,description:_.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,defaultValueDescription:!1},{name:\"isolatedModules\",type:\"boolean\",category:_.Interop_Constraints,description:_.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,transpileOptionValue:!0,defaultValueDescription:!1},{name:\"verbatimModuleSyntax\",type:\"boolean\",category:_.Interop_Constraints,description:_.Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting,defaultValueDescription:!1},{name:\"strict\",type:\"boolean\",affectsBuildInfo:!0,showInSimplifiedHelpView:!0,category:_.Type_Checking,description:_.Enable_all_strict_type_checking_options,defaultValueDescription:!1},{name:\"noImplicitAny\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,strictFlag:!0,category:_.Type_Checking,description:_.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,defaultValueDescription:_.false_unless_strict_is_set},{name:\"strictNullChecks\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,strictFlag:!0,category:_.Type_Checking,description:_.When_type_checking_take_into_account_null_and_undefined,defaultValueDescription:_.false_unless_strict_is_set},{name:\"strictFunctionTypes\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,strictFlag:!0,category:_.Type_Checking,description:_.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,defaultValueDescription:_.false_unless_strict_is_set},{name:\"strictBindCallApply\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,strictFlag:!0,category:_.Type_Checking,description:_.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,defaultValueDescription:_.false_unless_strict_is_set},{name:\"strictPropertyInitialization\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,strictFlag:!0,category:_.Type_Checking,description:_.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,defaultValueDescription:_.false_unless_strict_is_set},{name:\"noImplicitThis\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,strictFlag:!0,category:_.Type_Checking,description:_.Enable_error_reporting_when_this_is_given_the_type_any,defaultValueDescription:_.false_unless_strict_is_set},{name:\"useUnknownInCatchVariables\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,strictFlag:!0,category:_.Type_Checking,description:_.Default_catch_clause_variables_as_unknown_instead_of_any,defaultValueDescription:!1},{name:\"alwaysStrict\",type:\"boolean\",affectsSourceFile:!0,affectsEmit:!0,affectsBuildInfo:!0,strictFlag:!0,category:_.Type_Checking,description:_.Ensure_use_strict_is_always_emitted,defaultValueDescription:_.false_unless_strict_is_set},{name:\"noUnusedLocals\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Type_Checking,description:_.Enable_error_reporting_when_local_variables_aren_t_read,defaultValueDescription:!1},{name:\"noUnusedParameters\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Type_Checking,description:_.Raise_an_error_when_a_function_parameter_isn_t_read,defaultValueDescription:!1},{name:\"exactOptionalPropertyTypes\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Type_Checking,description:_.Interpret_optional_property_types_as_written_rather_than_adding_undefined,defaultValueDescription:!1},{name:\"noImplicitReturns\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Type_Checking,description:_.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,defaultValueDescription:!1},{name:\"noFallthroughCasesInSwitch\",type:\"boolean\",affectsBindDiagnostics:!0,affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Type_Checking,description:_.Enable_error_reporting_for_fallthrough_cases_in_switch_statements,defaultValueDescription:!1},{name:\"noUncheckedIndexedAccess\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Type_Checking,description:_.Add_undefined_to_a_type_when_accessed_using_an_index,defaultValueDescription:!1},{name:\"noImplicitOverride\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Type_Checking,description:_.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier,defaultValueDescription:!1},{name:\"noPropertyAccessFromIndexSignature\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,showInSimplifiedHelpView:!1,category:_.Type_Checking,description:_.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,defaultValueDescription:!1},{name:\"moduleResolution\",type:new Map(Object.entries({node10:2,node:2,classic:1,node16:3,nodenext:99,bundler:100})),deprecatedKeys:new Set([\"node\"]),affectsModuleResolution:!0,paramType:_.STRATEGY,category:_.Modules,description:_.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,defaultValueDescription:_.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node},{name:\"baseUrl\",type:\"string\",affectsModuleResolution:!0,isFilePath:!0,category:_.Modules,description:_.Specify_the_base_directory_to_resolve_non_relative_module_names},{name:\"paths\",type:\"object\",affectsModuleResolution:!0,isTSConfigOnly:!0,category:_.Modules,description:_.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,transpileOptionValue:void 0},{name:\"rootDirs\",type:\"list\",isTSConfigOnly:!0,element:{name:\"rootDirs\",type:\"string\",isFilePath:!0},affectsModuleResolution:!0,category:_.Modules,description:_.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,transpileOptionValue:void 0,defaultValueDescription:_.Computed_from_the_list_of_input_files},{name:\"typeRoots\",type:\"list\",element:{name:\"typeRoots\",type:\"string\",isFilePath:!0},affectsModuleResolution:!0,category:_.Modules,description:_.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types},{name:\"types\",type:\"list\",element:{name:\"types\",type:\"string\"},affectsProgramStructure:!0,showInSimplifiedHelpView:!0,category:_.Modules,description:_.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,transpileOptionValue:void 0},{name:\"allowSyntheticDefaultImports\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Interop_Constraints,description:_.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,defaultValueDescription:_.module_system_or_esModuleInterop},{name:\"esModuleInterop\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsBuildInfo:!0,showInSimplifiedHelpView:!0,category:_.Interop_Constraints,description:_.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,defaultValueDescription:!1},{name:\"preserveSymlinks\",type:\"boolean\",category:_.Interop_Constraints,description:_.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,defaultValueDescription:!1},{name:\"allowUmdGlobalAccess\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Modules,description:_.Allow_accessing_UMD_globals_from_modules,defaultValueDescription:!1},{name:\"moduleSuffixes\",type:\"list\",element:{name:\"suffix\",type:\"string\"},listPreserveFalsyValues:!0,affectsModuleResolution:!0,category:_.Modules,description:_.List_of_file_name_suffixes_to_search_when_resolving_a_module},{name:\"allowImportingTsExtensions\",type:\"boolean\",affectsSemanticDiagnostics:!0,category:_.Modules,description:_.Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noEmit_or_emitDeclarationOnly_to_be_set,defaultValueDescription:!1},{name:\"resolvePackageJsonExports\",type:\"boolean\",affectsModuleResolution:!0,category:_.Modules,description:_.Use_the_package_json_exports_field_when_resolving_package_imports,defaultValueDescription:_.true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false},{name:\"resolvePackageJsonImports\",type:\"boolean\",affectsModuleResolution:!0,category:_.Modules,description:_.Use_the_package_json_imports_field_when_resolving_imports,defaultValueDescription:_.true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false},{name:\"customConditions\",type:\"list\",element:{name:\"condition\",type:\"string\"},affectsModuleResolution:!0,category:_.Modules,description:_.Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports},{name:\"sourceRoot\",type:\"string\",affectsEmit:!0,affectsBuildInfo:!0,paramType:_.LOCATION,category:_.Emit,description:_.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code},{name:\"mapRoot\",type:\"string\",affectsEmit:!0,affectsBuildInfo:!0,paramType:_.LOCATION,category:_.Emit,description:_.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations},{name:\"inlineSources\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Emit,description:_.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,defaultValueDescription:!1},{name:\"experimentalDecorators\",type:\"boolean\",affectsEmit:!0,affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Language_and_Environment,description:_.Enable_experimental_support_for_legacy_experimental_decorators,defaultValueDescription:!1},{name:\"emitDecoratorMetadata\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsBuildInfo:!0,category:_.Language_and_Environment,description:_.Emit_design_type_metadata_for_decorated_declarations_in_source_files,defaultValueDescription:!1},{name:\"jsxFactory\",type:\"string\",category:_.Language_and_Environment,description:_.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,defaultValueDescription:\"`React.createElement`\"},{name:\"jsxFragmentFactory\",type:\"string\",category:_.Language_and_Environment,description:_.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment,defaultValueDescription:\"React.Fragment\"},{name:\"jsxImportSource\",type:\"string\",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsBuildInfo:!0,affectsModuleResolution:!0,category:_.Language_and_Environment,description:_.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,defaultValueDescription:\"react\"},{name:\"resolveJsonModule\",type:\"boolean\",affectsModuleResolution:!0,category:_.Modules,description:_.Enable_importing_json_files,defaultValueDescription:!1},{name:\"allowArbitraryExtensions\",type:\"boolean\",affectsProgramStructure:!0,category:_.Modules,description:_.Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present,defaultValueDescription:!1},{name:\"out\",type:\"string\",affectsEmit:!0,affectsBuildInfo:!0,affectsDeclarationPath:!0,isFilePath:!1,category:_.Backwards_Compatibility,paramType:_.FILE,transpileOptionValue:void 0,description:_.Deprecated_setting_Use_outFile_instead},{name:\"reactNamespace\",type:\"string\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Language_and_Environment,description:_.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,defaultValueDescription:\"`React`\"},{name:\"skipDefaultLibCheck\",type:\"boolean\",affectsBuildInfo:!0,category:_.Completeness,description:_.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,defaultValueDescription:!1},{name:\"charset\",type:\"string\",category:_.Backwards_Compatibility,description:_.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,defaultValueDescription:\"utf8\"},{name:\"emitBOM\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Emit,description:_.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,defaultValueDescription:!1},{name:\"newLine\",type:new Map(Object.entries({crlf:0,lf:1})),affectsEmit:!0,affectsBuildInfo:!0,paramType:_.NEWLINE,category:_.Emit,description:_.Set_the_newline_character_for_emitting_files,defaultValueDescription:\"lf\"},{name:\"noErrorTruncation\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Output_Formatting,description:_.Disable_truncating_types_in_error_messages,defaultValueDescription:!1},{name:\"noLib\",type:\"boolean\",category:_.Language_and_Environment,affectsProgramStructure:!0,description:_.Disable_including_any_library_files_including_the_default_lib_d_ts,transpileOptionValue:!0,defaultValueDescription:!1},{name:\"noResolve\",type:\"boolean\",affectsModuleResolution:!0,category:_.Modules,description:_.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,transpileOptionValue:!0,defaultValueDescription:!1},{name:\"stripInternal\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Emit,description:_.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,defaultValueDescription:!1},{name:\"disableSizeLimit\",type:\"boolean\",affectsProgramStructure:!0,category:_.Editor_Support,description:_.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,defaultValueDescription:!1},{name:\"disableSourceOfProjectReferenceRedirect\",type:\"boolean\",isTSConfigOnly:!0,category:_.Projects,description:_.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects,defaultValueDescription:!1},{name:\"disableSolutionSearching\",type:\"boolean\",isTSConfigOnly:!0,category:_.Projects,description:_.Opt_a_project_out_of_multi_project_reference_checking_when_editing,defaultValueDescription:!1},{name:\"disableReferencedProjectLoad\",type:\"boolean\",isTSConfigOnly:!0,category:_.Projects,description:_.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript,defaultValueDescription:!1},{name:\"noImplicitUseStrict\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Backwards_Compatibility,description:_.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,defaultValueDescription:!1},{name:\"noEmitHelpers\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Emit,description:_.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,defaultValueDescription:!1},{name:\"noEmitOnError\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Emit,transpileOptionValue:void 0,description:_.Disable_emitting_files_if_any_type_checking_errors_are_reported,defaultValueDescription:!1},{name:\"preserveConstEnums\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Emit,description:_.Disable_erasing_const_enum_declarations_in_generated_code,defaultValueDescription:!1},{name:\"declarationDir\",type:\"string\",affectsEmit:!0,affectsBuildInfo:!0,affectsDeclarationPath:!0,isFilePath:!0,paramType:_.DIRECTORY,category:_.Emit,transpileOptionValue:void 0,description:_.Specify_the_output_directory_for_generated_declaration_files},{name:\"skipLibCheck\",type:\"boolean\",affectsBuildInfo:!0,category:_.Completeness,description:_.Skip_type_checking_all_d_ts_files,defaultValueDescription:!1},{name:\"allowUnusedLabels\",type:\"boolean\",affectsBindDiagnostics:!0,affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Type_Checking,description:_.Disable_error_reporting_for_unused_labels,defaultValueDescription:void 0},{name:\"allowUnreachableCode\",type:\"boolean\",affectsBindDiagnostics:!0,affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Type_Checking,description:_.Disable_error_reporting_for_unreachable_code,defaultValueDescription:void 0},{name:\"suppressExcessPropertyErrors\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Backwards_Compatibility,description:_.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,defaultValueDescription:!1},{name:\"suppressImplicitAnyIndexErrors\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Backwards_Compatibility,description:_.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,defaultValueDescription:!1},{name:\"forceConsistentCasingInFileNames\",type:\"boolean\",affectsModuleResolution:!0,category:_.Interop_Constraints,description:_.Ensure_that_casing_is_correct_in_imports,defaultValueDescription:!0},{name:\"maxNodeModuleJsDepth\",type:\"number\",affectsModuleResolution:!0,category:_.JavaScript_Support,description:_.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,defaultValueDescription:0},{name:\"noStrictGenericChecks\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsBuildInfo:!0,category:_.Backwards_Compatibility,description:_.Disable_strict_checking_of_generic_signatures_in_function_types,defaultValueDescription:!1},{name:\"useDefineForClassFields\",type:\"boolean\",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsBuildInfo:!0,category:_.Language_and_Environment,description:_.Emit_ECMAScript_standard_compliant_class_fields,defaultValueDescription:_.true_for_ES2022_and_above_including_ESNext},{name:\"preserveValueImports\",type:\"boolean\",affectsEmit:!0,affectsBuildInfo:!0,category:_.Emit,description:_.Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed,defaultValueDescription:!1},{name:\"keyofStringsOnly\",type:\"boolean\",category:_.Backwards_Compatibility,description:_.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,defaultValueDescription:!1},{name:\"plugins\",type:\"list\",isTSConfigOnly:!0,element:{name:\"plugin\",type:\"object\"},description:_.Specify_a_list_of_language_service_plugins_to_include,category:_.Editor_Support},{name:\"moduleDetection\",type:new Map(Object.entries({auto:2,legacy:1,force:3})),affectsModuleResolution:!0,description:_.Control_what_method_is_used_to_detect_module_format_JS_files,category:_.Language_and_Environment,defaultValueDescription:_.auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules},{name:\"ignoreDeprecations\",type:\"string\",defaultValueDescription:void 0}],Fh=[...WO,...B3],PJ=Fh.filter(e=>!!e.affectsSemanticDiagnostics),MJ=Fh.filter(e=>!!e.affectsEmit),FJ=Fh.filter(e=>!!e.affectsDeclarationPath),U3=Fh.filter(e=>!!e.affectsModuleResolution),V3=Fh.filter(e=>!!e.affectsSourceFile||!!e.affectsModuleResolution||!!e.affectsBindDiagnostics),GJ=Fh.filter(e=>!!e.affectsProgramStructure),BJ=Fh.filter(e=>fs(e,\"transpileOptionValue\")),UJ=[{name:\"verbose\",shortName:\"v\",category:_.Command_line_Options,description:_.Enable_verbose_logging,type:\"boolean\",defaultValueDescription:!1},{name:\"dry\",shortName:\"d\",category:_.Command_line_Options,description:_.Show_what_would_be_built_or_deleted_if_specified_with_clean,type:\"boolean\",defaultValueDescription:!1},{name:\"force\",shortName:\"f\",category:_.Command_line_Options,description:_.Build_all_projects_including_those_that_appear_to_be_up_to_date,type:\"boolean\",defaultValueDescription:!1},{name:\"clean\",category:_.Command_line_Options,description:_.Delete_the_outputs_of_all_projects,type:\"boolean\",defaultValueDescription:!1}],j3=[...WO,...UJ],H3=[{name:\"enable\",type:\"boolean\",defaultValueDescription:!1},{name:\"include\",type:\"list\",element:{name:\"include\",type:\"string\"}},{name:\"exclude\",type:\"list\",element:{name:\"exclude\",type:\"string\"}},{name:\"disableFilenameBasedTypeAcquisition\",type:\"boolean\",defaultValueDescription:!1}],Tfe={diagnostic:_.Compiler_option_0_may_only_be_used_with_build,getOptionsNameMap:Yde},W3={module:1,target:3,strict:!0,esModuleInterop:!0,forceConsistentCasingInFileNames:!0,skipLibCheck:!0},JO={alternateMode:Tfe,getOptionsNameMap:w2,optionDeclarations:Fh,unknownOptionDiagnostic:_.Unknown_compiler_option_0,unknownDidYouMeanDiagnostic:_.Unknown_compiler_option_0_Did_you_mean_1,optionTypeMismatchDiagnostic:_.Compiler_option_0_expects_an_argument},xfe={diagnostic:_.Compiler_option_0_may_not_be_used_with_build,getOptionsNameMap:w2},Afe={alternateMode:xfe,getOptionsNameMap:Yde,optionDeclarations:j3,unknownOptionDiagnostic:_.Unknown_build_option_0,unknownDidYouMeanDiagnostic:_.Unknown_build_option_0_Did_you_mean_1,optionTypeMismatchDiagnostic:_.Build_option_0_requires_a_value_of_type_1},VJ={optionDeclarations:H3,unknownOptionDiagnostic:_.Unknown_type_acquisition_option_0,unknownDidYouMeanDiagnostic:_.Unknown_type_acquisition_option_0_Did_you_mean_1},KO={getOptionsNameMap:Qde,optionDeclarations:HO,unknownOptionDiagnostic:_.Unknown_watch_option_0,unknownDidYouMeanDiagnostic:_.Unknown_watch_option_0_Did_you_mean_1,optionTypeMismatchDiagnostic:_.Watch_option_0_requires_a_value_of_type_1},qO={name:\"extends\",type:\"listOrElement\",element:{name:\"extends\",type:\"string\"},category:_.File_Management},z3=\"**/*\",Dfe=/(^|\\/)\\*\\*\\/?$/,wfe=/^[^*?]*(?=\\/[^/]*[*?])/}});function Xi(e){e.trace(TW.apply(void 0,arguments))}function ov(e,t){return!!e.traceResolution&&t.trace!==void 0}function O2(e,t){let r;if(t&&e){let i=e.contents.packageJsonContent;typeof i.name==\"string\"&&typeof i.version==\"string\"&&(r={name:i.name,subModuleName:t.path.slice(e.packageDirectory.length+_s.length),version:i.version})}return t&&{path:t.path,extension:t.ext,packageId:r,resolvedUsingTsExtension:t.resolvedUsingTsExtension}}function J3(e){return O2(void 0,e)}function Rfe(e){if(e)return L.assert(e.packageId===void 0),{path:e.path,ext:e.extension,resolvedUsingTsExtension:e.resolvedUsingTsExtension}}function Ofe(e){let t=[];return e&1&&t.push(\"TypeScript\"),e&2&&t.push(\"JavaScript\"),e&4&&t.push(\"Declaration\"),e&8&&t.push(\"JSON\"),t.join(\", \")}function Nfe(e){if(e)return L.assert(y4(e.extension)),{fileName:e.path,packageId:e.packageId}}function Pfe(e,t,r,i,o,s,l,f){if(!l.resultFromCache&&!l.compilerOptions.preserveSymlinks&&t&&r&&!t.originalPath&&!fl(e)){let{resolvedFileName:d,originalPath:g}=Gfe(t.path,l.host,l.traceEnabled);g&&(t={...t,path:d,originalPath:g})}return Mfe(t,r,i,o,s,l.resultFromCache,f)}function Mfe(e,t,r,i,o,s,l){return s?(s.failedLookupLocations=N2(s.failedLookupLocations,r),s.affectingLocations=N2(s.affectingLocations,i),s.resolutionDiagnostics=N2(s.resolutionDiagnostics,o),s):{resolvedModule:e&&{resolvedFileName:e.path,originalPath:e.originalPath===!0?void 0:e.originalPath,extension:e.extension,isExternalLibraryImport:t,packageId:e.packageId,resolvedUsingTsExtension:!!e.resolvedUsingTsExtension},failedLookupLocations:PL(r),affectingLocations:PL(i),resolutionDiagnostics:PL(o),node10Result:l}}function PL(e){return e.length?e:void 0}function N2(e,t){return t?.length?e?.length?(e.push(...t),e):t:e}function Ffe(e,t,r,i){if(!fs(e,t)){i.traceEnabled&&Xi(i.host,_.package_json_does_not_have_a_0_field,t);return}let o=e[t];if(typeof o!==r||o===null){i.traceEnabled&&Xi(i.host,_.Expected_type_of_0_field_in_package_json_to_be_1_got_2,t,r,o===null?\"null\":typeof o);return}return o}function K3(e,t,r,i){let o=Ffe(e,t,\"string\",i);if(o===void 0)return;if(!o){i.traceEnabled&&Xi(i.host,_.package_json_had_a_falsy_0_field,t);return}let s=So(vi(r,o));return i.traceEnabled&&Xi(i.host,_.package_json_has_0_field_1_that_references_2,t,o,s),s}function xNe(e,t,r){return K3(e,\"typings\",t,r)||K3(e,\"types\",t,r)}function ANe(e,t,r){return K3(e,\"tsconfig\",t,r)}function CNe(e,t,r){return K3(e,\"main\",t,r)}function INe(e,t){let r=Ffe(e,\"typesVersions\",\"object\",t);if(r!==void 0)return t.traceEnabled&&Xi(t.host,_.package_json_has_a_typesVersions_field_with_version_specific_path_mappings),r}function LNe(e,t){let r=INe(e,t);if(r===void 0)return;if(t.traceEnabled)for(let l in r)fs(r,l)&&!mA.tryParse(l)&&Xi(t.host,_.package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range,l);let i=q3(r);if(!i){t.traceEnabled&&Xi(t.host,_.package_json_does_not_have_a_typesVersions_entry_that_matches_version_0,Sg);return}let{version:o,paths:s}=i;if(typeof s!=\"object\"){t.traceEnabled&&Xi(t.host,_.Expected_type_of_0_field_in_package_json_to_be_1_got_2,`typesVersions['${o}']`,\"object\",typeof s);return}return i}function q3(e){rK||(rK=new r_(Rf));for(let t in e){if(!fs(e,t))continue;let r=mA.tryParse(t);if(r!==void 0&&r.test(rK))return{version:t,paths:e[t]}}}function XO(e,t){if(e.typeRoots)return e.typeRoots;let r;if(e.configFilePath?r=ni(e.configFilePath):t.getCurrentDirectory&&(r=t.getCurrentDirectory()),r!==void 0)return kNe(r,t)}function kNe(e,t){if(!t.directoryExists)return[vi(e,iK)];let r;return Th(So(e),i=>{let o=vi(i,iK);t.directoryExists(o)&&(r||(r=[])).push(o)}),r}function DNe(e,t,r){let i=typeof r.useCaseSensitiveFileNames==\"function\"?r.useCaseSensitiveFileNames():r.useCaseSensitiveFileNames;return cT(e,t,!i)===0}function Gfe(e,t,r){let i=WNe(e,t,r),o=DNe(e,i,t);return{resolvedFileName:o?e:i,originalPath:o?void 0:e}}function HJ(e,t,r,i,o,s,l){L.assert(typeof e==\"string\",\"Non-string value passed to `ts.resolveTypeReferenceDirective`, likely by a wrapping package working with an outdated `resolveTypeReferenceDirectives` signature. This is probably not a problem in TS itself.\");let f=ov(r,i);o&&(r=o.commandLine.options);let d=t?ni(t):void 0,g=d?s?.getFromDirectoryCache(e,l,d,o):void 0;if(!g&&d&&!fl(e)&&(g=s?.getFromNonRelativeNameCache(e,l,d,o)),g)return f&&(Xi(i,_.Resolving_type_reference_directive_0_containing_file_1,e,t),o&&Xi(i,_.Using_compiler_options_of_project_reference_redirect_0,o.sourceFile.fileName),Xi(i,_.Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1,e,d),q(g)),g;let m=XO(r,i);f&&(t===void 0?m===void 0?Xi(i,_.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set,e):Xi(i,_.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1,e,m):m===void 0?Xi(i,_.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set,e,t):Xi(i,_.Resolving_type_reference_directive_0_containing_file_1_root_directory_2,e,t,m),o&&Xi(i,_.Using_compiler_options_of_project_reference_redirect_0,o.sourceFile.fileName));let v=[],S=[],x=WJ(r);l===99&&($s(r)===3||$s(r)===99)&&(x|=32);let A=x&8?P2(r,!!(x&32)):[],w=[],C={compilerOptions:r,host:i,traceEnabled:f,failedLookupLocations:v,affectingLocations:S,packageJsonInfoCache:s,features:x,conditions:A,requestContainingDirectory:d,reportDiagnostic:R=>void w.push(R),isConfigLookup:!1,candidateIsFromPackageJsonField:!1},P=W(),F=!0;P||(P=Y(),F=!1);let B;if(P){let{fileName:R,packageId:ie}=P,$=R,fe;r.preserveSymlinks||({resolvedFileName:$,originalPath:fe}=Gfe(R,i,f)),B={primary:F,resolvedFileName:$,originalPath:fe,packageId:ie,isExternalLibraryImport:JS(R)}}return g={resolvedTypeReferenceDirective:B,failedLookupLocations:PL(v),affectingLocations:PL(S),resolutionDiagnostics:PL(w)},d&&(s?.getOrCreateCacheForDirectory(d,o).set(e,l,g),fl(e)||s?.getOrCreateCacheForNonRelativeName(e,l,o).set(d,g)),f&&q(g),g;function q(R){var ie;(ie=R.resolvedTypeReferenceDirective)!=null&&ie.resolvedFileName?R.resolvedTypeReferenceDirective.packageId?Xi(i,_.Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3,e,R.resolvedTypeReferenceDirective.resolvedFileName,hT(R.resolvedTypeReferenceDirective.packageId),R.resolvedTypeReferenceDirective.primary):Xi(i,_.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2,e,R.resolvedTypeReferenceDirective.resolvedFileName,R.resolvedTypeReferenceDirective.primary):Xi(i,_.Type_reference_directive_0_was_not_resolved,e)}function W(){if(m&&m.length)return f&&Xi(i,_.Resolving_with_primary_search_path_0,m.join(\", \")),ks(m,R=>{let ie=vi(R,e),$=ni(ie),fe=gp($,i);return!fe&&f&&Xi(i,_.Directory_0_does_not_exist_skipping_all_lookups_in_it,$),Nfe(Qfe(4,ie,!fe,C))});f&&Xi(i,_.Root_directory_cannot_be_determined_skipping_primary_search_paths)}function Y(){let R=t&&ni(t);if(R!==void 0){f&&Xi(i,_.Looking_up_in_node_modules_folder_initial_location_0,R);let ie;if(fl(e)){let{path:$}=Kfe(R,e);ie=Q3(4,$,!1,C,!0)}else{let $=t_e(4,e,R,C,void 0,void 0);ie=$&&$.value}return Nfe(ie)}else f&&Xi(i,_.Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder)}}function WJ(e){let t=0;switch($s(e)){case 3:t=30;break;case 99:t=30;break;case 100:t=30;break}return e.resolvePackageJsonExports?t|=8:e.resolvePackageJsonExports===!1&&(t&=-9),e.resolvePackageJsonImports?t|=2:e.resolvePackageJsonImports===!1&&(t&=-3),t}function P2(e,t){let r=t||$s(e)===100?[\"import\"]:[\"require\"];return e.noDtsResolution||r.push(\"types\"),$s(e)!==100&&r.push(\"node\"),Qi(r,e.customConditions)}function wNe(e,t,r,i,o){let s=Z3(o?.getPackageJsonInfoCache(),i,r);return Th(t,l=>{if(Hl(l)!==\"node_modules\"){let f=vi(l,\"node_modules\"),d=vi(f,e);return KS(d,!1,s)}})}function X3(e,t){if(e.types)return e.types;let r=[];if(t.directoryExists&&t.getDirectories){let i=XO(e,t);if(i){for(let o of i)if(t.directoryExists(o))for(let s of t.getDirectories(o)){let l=So(s),f=vi(o,l,\"package.json\");if(!(t.fileExists(f)&&JI(f,t).typings===null)){let g=Hl(l);g.charCodeAt(0)!==46&&r.push(g)}}}}return r}function zJ(e){var t;if(e===null||typeof e!=\"object\")return\"\"+e;if(ba(e))return`[${(t=e.map(i=>zJ(i)))==null?void 0:t.join(\",\")}]`;let r=\"{\";for(let i in e)fs(e,i)&&(r+=`${i}: ${zJ(e[i])}`);return r+\"}\"}function JJ(e,t){return t.map(r=>zJ(f4(e,r))).join(\"|\")+(e.pathsBasePath?`|${e.pathsBasePath}`:void 0)}function KJ(e){let t=new Map,r=new Map,i=new Map,o=new Map;return e&&t.set(e,o),{getMapOfCacheRedirects:s,getOrCreateMapOfCacheRedirects:l,update:f,clear:g};function s(v){return v?d(v.commandLine.options,!1):o}function l(v){return v?d(v.commandLine.options,!0):o}function f(v){e!==v&&(e?o=d(v,!0):t.set(v,o),e=v)}function d(v,S){let x=t.get(v);if(x)return x;let A=m(v);if(x=i.get(A),!x){if(e){let w=m(e);w===A?x=o:i.has(w)||i.set(w,o)}S&&(x??(x=new Map)),x&&i.set(A,x)}return x&&t.set(v,x),x}function g(){let v=e&&r.get(e);o.clear(),t.clear(),r.clear(),i.clear(),e&&(v&&r.set(e,v),t.set(e,o))}function m(v){let S=r.get(v);return S||r.set(v,S=JJ(v,U3)),S}}function RNe(e,t){let r;return{getPackageJsonInfo:i,setPackageJsonInfo:o,clear:s,entries:l,getInternalMap:f};function i(d){return r?.get(Ts(d,e,t))}function o(d,g){(r||(r=new Map)).set(Ts(d,e,t),g)}function s(){r=void 0}function l(){let d=r?.entries();return d?lo(d):[]}function f(){return r}}function Bfe(e,t,r,i){let o=e.getOrCreateMapOfCacheRedirects(t),s=o.get(r);return s||(s=i(),o.set(r,s)),s}function ONe(e,t,r){let i=KJ(r);return{getFromDirectoryCache:f,getOrCreateCacheForDirectory:l,clear:o,update:s};function o(){i.clear()}function s(d){i.update(d)}function l(d,g){let m=Ts(d,e,t);return Bfe(i,g,m,()=>WT())}function f(d,g,m,v){var S,x;let A=Ts(m,e,t);return(x=(S=i.getMapOfCacheRedirects(v))==null?void 0:S.get(A))==null?void 0:x.get(d,g)}}function ML(e,t){return t===void 0?e:`${t}|${e}`}function WT(){let e=new Map,t=new Map,r={get(o,s){return e.get(i(o,s))},set(o,s,l){return e.set(i(o,s),l),r},delete(o,s){return e.delete(i(o,s)),r},has(o,s){return e.has(i(o,s))},forEach(o){return e.forEach((s,l)=>{let[f,d]=t.get(l);return o(s,f,d)})},size(){return e.size}};return r;function i(o,s){let l=ML(o,s);return t.set(l,[o,s]),l}}function qJ(e,t,r,i){L.assert(t.length===r.length);let o=WT();for(let s=0;s<t.length;++s){let l=t[s];o.set(i.getName(l),i.getMode(l,e),r[s])}return o}function NNe(e){return e.resolvedModule&&(e.resolvedModule.originalPath||e.resolvedModule.resolvedFileName)}function PNe(e){return e.resolvedTypeReferenceDirective&&(e.resolvedTypeReferenceDirective.originalPath||e.resolvedTypeReferenceDirective.resolvedFileName)}function MNe(e,t,r,i){let o=KJ(r);return{getFromNonRelativeNameCache:f,getOrCreateCacheForNonRelativeName:d,clear:s,update:l};function s(){o.clear()}function l(m){o.update(m)}function f(m,v,S,x){var A,w;return L.assert(!fl(m)),(w=(A=o.getMapOfCacheRedirects(x))==null?void 0:A.get(ML(m,v)))==null?void 0:w.get(S)}function d(m,v,S){return L.assert(!fl(m)),Bfe(o,S,ML(m,v),g)}function g(){let m=new Map;return{get:v,set:S};function v(A){return m.get(Ts(A,e,t))}function S(A,w){let C=Ts(A,e,t);if(m.has(C))return;m.set(C,w);let P=i(w),F=P&&x(C,P),B=C;for(;B!==F;){let q=ni(B);if(q===B||m.has(q))break;m.set(q,w),B=q}}function x(A,w){let C=Ts(ni(w),e,t),P=0,F=Math.min(A.length,C.length);for(;P<F&&A.charCodeAt(P)===C.charCodeAt(P);)P++;if(P===A.length&&(C.length===P||C[P]===_s))return A;let B=_p(A);if(P<B)return;let q=A.lastIndexOf(_s,P-1);if(q!==-1)return A.substr(0,Math.max(q,B))}}}function Ufe(e,t,r,i,o){let s=ONe(e,t,r),l=MNe(e,t,r,o);return i??(i=RNe(e,t)),{...i,...s,...l,clear:f,update:g,getPackageJsonInfoCache:()=>i,clearAllExceptPackageJsonInfoCache:d};function f(){d(),i.clear()}function d(){s.clear(),l.clear()}function g(m){s.update(m),l.update(m)}}function Y3(e,t,r){let i=Ufe(e,t,r,void 0,NNe);return i.getOrCreateCacheForModuleName=(o,s,l)=>i.getOrCreateCacheForNonRelativeName(o,s,l),i}function $3(e,t,r,i){return Ufe(e,t,r,i,PNe)}function FNe(e,t,r,i){let o=ni(t);return r.getFromDirectoryCache(e,i,o,void 0)}function FL(e,t,r,i,o,s,l){let f=ov(r,i);s&&(r=s.commandLine.options),f&&(Xi(i,_.Resolving_module_0_from_1,e,t),s&&Xi(i,_.Using_compiler_options_of_project_reference_redirect_0,s.sourceFile.fileName));let d=ni(t),g=o?.getFromDirectoryCache(e,l,d,s);if(g)f&&Xi(i,_.Resolution_for_module_0_was_found_in_cache_from_location_1,e,d);else{let m=r.moduleResolution;if(m===void 0){switch(Rl(r)){case 1:m=2;break;case 100:m=3;break;case 199:m=99;break;default:m=1;break}f&&Xi(i,_.Module_resolution_kind_is_not_specified_using_0,rw[m])}else f&&Xi(i,_.Explicitly_specified_module_resolution_kind_Colon_0,rw[m]);switch(fp.logStartResolveModule(e),m){case 3:g=VNe(e,t,r,i,o,s,l);break;case 99:g=jNe(e,t,r,i,o,s,l);break;case 2:g=zfe(e,t,r,i,o,s);break;case 1:g=o_e(e,t,r,i,o,s);break;case 100:g=Wfe(e,t,r,i,o,s);break;default:return L.fail(`Unexpected moduleResolution: ${m}`)}g&&g.resolvedModule&&fp.logInfoEvent(`Module \"${e}\" resolved to \"${g.resolvedModule.resolvedFileName}\"`),fp.logStopResolveModule(g&&g.resolvedModule?\"\"+g.resolvedModule.resolvedFileName:\"null\"),o?.getOrCreateCacheForDirectory(d,s).set(e,l,g),fl(e)||o?.getOrCreateCacheForNonRelativeName(e,l,s).set(d,g)}return f&&(g.resolvedModule?g.resolvedModule.packageId?Xi(i,_.Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2,e,g.resolvedModule.resolvedFileName,hT(g.resolvedModule.packageId)):Xi(i,_.Module_name_0_was_successfully_resolved_to_1,e,g.resolvedModule.resolvedFileName):Xi(i,_.Module_name_0_was_not_resolved,e)),g}function Vfe(e,t,r,i,o){let s=GNe(e,t,i,o);return s?s.value:fl(t)?BNe(e,t,r,i,o):UNe(e,t,i,o)}function GNe(e,t,r,i){var o;let{baseUrl:s,paths:l,configFile:f}=i.compilerOptions;if(l&&!Jd(t)){i.traceEnabled&&(s&&Xi(i.host,_.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1,s,t),Xi(i.host,_.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0,t));let d=ZH(i.compilerOptions,i.host),g=f?.configFileSpecs?(o=f.configFileSpecs).pathPatterns||(o.pathPatterns=g4(l)):void 0;return nK(e,t,d,l,g,r,!1,i)}}function BNe(e,t,r,i,o){if(!o.compilerOptions.rootDirs)return;o.traceEnabled&&Xi(o.host,_.rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0,t);let s=So(vi(r,t)),l,f;for(let d of o.compilerOptions.rootDirs){let g=So(d);Oc(g,_s)||(g+=_s);let m=na(s,g)&&(f===void 0||f.length<g.length);o.traceEnabled&&Xi(o.host,_.Checking_if_0_is_the_longest_matching_prefix_for_1_2,g,s,m),m&&(f=g,l=d)}if(f){o.traceEnabled&&Xi(o.host,_.Longest_matching_prefix_for_0_is_1,s,f);let d=s.substr(f.length);o.traceEnabled&&Xi(o.host,_.Loading_0_from_the_root_dir_1_candidate_location_2,d,f,s);let g=i(e,s,!gp(r,o.host),o);if(g)return g;o.traceEnabled&&Xi(o.host,_.Trying_other_entries_in_rootDirs);for(let m of o.compilerOptions.rootDirs){if(m===l)continue;let v=vi(So(m),d);o.traceEnabled&&Xi(o.host,_.Loading_0_from_the_root_dir_1_candidate_location_2,d,m,v);let S=ni(v),x=i(e,v,!gp(S,o.host),o);if(x)return x}o.traceEnabled&&Xi(o.host,_.Module_resolution_using_rootDirs_has_failed)}}function UNe(e,t,r,i){let{baseUrl:o}=i.compilerOptions;if(!o)return;i.traceEnabled&&Xi(i.host,_.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1,o,t);let s=So(vi(o,t));return i.traceEnabled&&Xi(i.host,_.Resolving_module_name_0_relative_to_base_url_1_2,t,o,s),r(e,s,!gp(ni(s),i.host),i)}function jfe(e,t,r){let{resolvedModule:i,failedLookupLocations:o}=HNe(e,t,r);if(!i)throw new Error(`Could not resolve JS module '${e}' starting at '${t}'. Looked in: ${o?.join(\", \")}`);return i.resolvedFileName}function VNe(e,t,r,i,o,s,l){return Hfe(30,e,t,r,i,o,s,l)}function jNe(e,t,r,i,o,s,l){return Hfe(30,e,t,r,i,o,s,l)}function Hfe(e,t,r,i,o,s,l,f){let d=ni(r),g=f===99?32:0,m=i.noDtsResolution?3:7;return RT(i)&&(m|=8),GL(e|g,t,d,i,o,s,m,!1,l)}function HNe(e,t,r){return GL(0,e,t,{moduleResolution:2,allowJs:!0},r,void 0,2,!1,void 0)}function Wfe(e,t,r,i,o,s){let l=ni(t),f=r.noDtsResolution?3:7;return RT(r)&&(f|=8),GL(WJ(r),e,l,r,i,o,f,!1,s)}function zfe(e,t,r,i,o,s,l){let f;return l?f=8:r.noDtsResolution?(f=3,RT(r)&&(f|=8)):f=RT(r)?15:7,GL(0,e,ni(t),r,i,o,f,!!l,s)}function Jfe(e,t,r){return GL(8,e,ni(t),{moduleResolution:99},r,void 0,8,!0,void 0)}function GL(e,t,r,i,o,s,l,f,d){var g,m,v,S;let x=ov(i,o),A=[],w=[],C=P2(i,!!(e&32)),P=[],F={compilerOptions:i,host:o,traceEnabled:x,failedLookupLocations:A,affectingLocations:w,packageJsonInfoCache:s,features:e,conditions:C,requestContainingDirectory:r,reportDiagnostic:Y=>void P.push(Y),isConfigLookup:f,candidateIsFromPackageJsonField:!1};x&&bS($s(i))&&Xi(o,_.Resolving_in_0_mode_with_conditions_1,e&32?\"ESM\":\"CJS\",C.map(Y=>`'${Y}'`).join(\", \"));let B;if($s(i)===2){let Y=l&5,R=l&-6;B=Y&&W(Y,F)||R&&W(R,F)||void 0}else B=W(l,F);let q;if((g=B?.value)!=null&&g.isExternalLibraryImport&&!f&&l&5&&e&8&&!fl(t)&&!QJ(5,B.value.resolved.extension)&&C.indexOf(\"import\")>-1){Y0(F,_.Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_if_npm_library_needs_configuration_update);let Y={...F,features:F.features&-9,failedLookupLocations:[],affectingLocations:[],reportDiagnostic:Ba},R=W(l&5,Y);(m=R?.value)!=null&&m.isExternalLibraryImport&&(q=R.value.resolved.path)}return Pfe(t,(v=B?.value)==null?void 0:v.resolved,(S=B?.value)==null?void 0:S.isExternalLibraryImport,A,w,P,F,q);function W(Y,R){let $=Vfe(Y,t,r,(fe,Z,U,re)=>Q3(fe,Z,U,re,!0),R);if($)return Af({resolved:$,isExternalLibraryImport:JS($.path)});if(fl(t)){let{path:fe,parts:Z}=Kfe(r,t),U=Q3(Y,fe,!1,R,!0);return U&&Af({resolved:U,isExternalLibraryImport:ya(Z,\"node_modules\")})}else{let fe;return e&2&&na(t,\"#\")&&(fe=YNe(Y,t,r,R,s,d)),!fe&&e&4&&(fe=XNe(Y,t,r,R,s,d)),fe||(x&&Xi(o,_.Loading_module_0_from_node_modules_folder_target_file_types_Colon_1,t,Ofe(Y)),fe=t_e(Y,t,r,R,s,d)),fe&&{value:fe.value&&{resolved:fe.value,isExternalLibraryImport:!0}}}}}function Kfe(e,t){let r=vi(e,t),i=Ou(r),o=Os(i);return{path:o===\".\"||o===\"..\"?cu(So(r)):So(r),parts:i}}function WNe(e,t,r){if(!t.realpath)return e;let i=So(t.realpath(e));return r&&Xi(t,_.Resolving_real_path_for_0_result_1,e,i),L.assert(t.fileExists(i),`${e} linked to nonexistent file ${i}`),i}function Q3(e,t,r,i,o){if(i.traceEnabled&&Xi(i.host,_.Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1,t,Ofe(e)),!My(t)){if(!r){let l=ni(t);gp(l,i.host)||(i.traceEnabled&&Xi(i.host,_.Directory_0_does_not_exist_skipping_all_lookups_in_it,l),r=!0)}let s=BL(e,t,r,i);if(s){let l=o?XJ(s.path):void 0,f=l?KS(l,!1,i):void 0;return O2(f,s)}}if(r||gp(t,i.host)||(i.traceEnabled&&Xi(i.host,_.Directory_0_does_not_exist_skipping_all_lookups_in_it,t),r=!0),!(i.features&32))return Qfe(e,t,r,i,o)}function JS(e){return jl(e,Wg)}function XJ(e){let t=So(e),r=t.lastIndexOf(Wg);if(r===-1)return;let i=r+Wg.length,o=qfe(t,i);return t.charCodeAt(i)===64&&(o=qfe(t,o)),t.slice(0,o)}function qfe(e,t){let r=e.indexOf(_s,t+1);return r===-1?t:r}function YJ(e,t,r,i){return J3(BL(e,t,r,i))}function BL(e,t,r,i){let o=Xfe(e,t,r,i);if(o)return o;if(!(i.features&32)){let s=Yfe(t,e,\"\",r,i);if(s)return s}}function Xfe(e,t,r,i){if(Hl(t).indexOf(\".\")===-1)return;let s=ld(t);s===t&&(s=t.substring(0,t.lastIndexOf(\".\")));let l=t.substring(s.length);return i.traceEnabled&&Xi(i.host,_.File_name_0_has_a_1_extension_stripping_it,t,l),Yfe(s,e,l,r,i)}function $J(e,t,r,i){return e&1&&$c(t,L4)||e&4&&$c(t,I4)?YO(t,r,i)!==void 0?{path:t,ext:r4(t),resolvedUsingTsExtension:void 0}:void 0:i.isConfigLookup&&e===8&&Gc(t,\".json\")?YO(t,r,i)!==void 0?{path:t,ext:\".json\",resolvedUsingTsExtension:void 0}:void 0:Xfe(e,t,r,i)}function Yfe(e,t,r,i,o){if(!i){let l=ni(e);l&&(i=!gp(l,o.host))}switch(r){case\".mjs\":case\".mts\":case\".d.mts\":return t&1&&s(\".mts\",r===\".mts\"||r===\".d.mts\")||t&4&&s(\".d.mts\",r===\".mts\"||r===\".d.mts\")||t&2&&s(\".mjs\")||void 0;case\".cjs\":case\".cts\":case\".d.cts\":return t&1&&s(\".cts\",r===\".cts\"||r===\".d.cts\")||t&4&&s(\".d.cts\",r===\".cts\"||r===\".d.cts\")||t&2&&s(\".cjs\")||void 0;case\".json\":return t&4&&s(\".d.json.ts\")||t&8&&s(\".json\")||void 0;case\".tsx\":case\".jsx\":return t&1&&(s(\".tsx\",r===\".tsx\")||s(\".ts\",r===\".tsx\"))||t&4&&s(\".d.ts\",r===\".tsx\")||t&2&&(s(\".jsx\")||s(\".js\"))||void 0;case\".ts\":case\".d.ts\":case\".js\":case\"\":return t&1&&(s(\".ts\",r===\".ts\"||r===\".d.ts\")||s(\".tsx\",r===\".ts\"||r===\".d.ts\"))||t&4&&s(\".d.ts\",r===\".ts\"||r===\".d.ts\")||t&2&&(s(\".js\")||s(\".jsx\"))||o.isConfigLookup&&s(\".json\")||void 0;default:return t&4&&!Fu(e+r)&&s(`.d${r}.ts`)||void 0}function s(l,f){let d=YO(e+l,i,o);return d===void 0?void 0:{path:d,ext:l,resolvedUsingTsExtension:!o.candidateIsFromPackageJsonField&&f}}}function YO(e,t,r){var i,o;if(!((i=r.compilerOptions.moduleSuffixes)!=null&&i.length))return $fe(e,t,r);let s=(o=Hm(e))!=null?o:\"\",l=s?UR(e,s):e;return mn(r.compilerOptions.moduleSuffixes,f=>$fe(l+f+s,t,r))}function $fe(e,t,r){if(!t){if(r.host.fileExists(e))return r.traceEnabled&&Xi(r.host,_.File_0_exists_use_it_as_a_name_resolution_result,e),e;r.traceEnabled&&Xi(r.host,_.File_0_does_not_exist,e)}r.failedLookupLocations.push(e)}function Qfe(e,t,r,i,o=!0){let s=o?KS(t,r,i):void 0,l=s&&s.contents.packageJsonContent,f=s&&$O(s,i);return O2(s,tF(e,t,r,i,l,f))}function zNe(e,t,r,i,o){if(!o&&e.contents.resolvedEntrypoints!==void 0)return e.contents.resolvedEntrypoints;let s,l=5|(o?2:0),f=WJ(t),d=Z3(i?.getPackageJsonInfoCache(),r,t);d.conditions=P2(t),d.requestContainingDirectory=e.packageDirectory;let g=tF(l,e.packageDirectory,!1,d,e.contents.packageJsonContent,$O(e,d));if(s=Sn(s,g?.path),f&8&&e.contents.packageJsonContent.exports){let m=fA([P2(t,!0),P2(t,!1)],up);for(let v of m){let S={...d,failedLookupLocations:[],conditions:v},x=JNe(e,e.contents.packageJsonContent.exports,S,l);if(x)for(let A of x)s=xg(s,A.path)}}return e.contents.resolvedEntrypoints=s||!1}function JNe(e,t,r,i){let o;if(ba(t))for(let l of t)s(l);else if(typeof t==\"object\"&&t!==null&&nF(t))for(let l in t)s(t[l]);else s(t);return o;function s(l){var f,d;if(typeof l==\"string\"&&na(l,\"./\")&&l.indexOf(\"*\")===-1){let g=Ou(l).slice(2);if(g.indexOf(\"..\")>=0||g.indexOf(\".\")>=0||g.indexOf(\"node_modules\")>=0)return!1;let m=vi(e.packageDirectory,l),v=_a(m,(d=(f=r.host).getCurrentDirectory)==null?void 0:d.call(f)),S=$J(i,v,!1,r);if(S)return o=xg(o,S,(x,A)=>x.path===A.path),!0}else if(Array.isArray(l)){for(let g of l)if(s(g))return!0}else if(typeof l==\"object\"&&l!==null)return mn(bh(l),g=>{if(g===\"default\"||ya(r.conditions,g)||QO(r.conditions,g))return s(l[g]),!0})}}function Z3(e,t,r){return{host:t,compilerOptions:r,traceEnabled:ov(r,t),failedLookupLocations:E8,affectingLocations:E8,packageJsonInfoCache:e,features:0,conditions:Je,requestContainingDirectory:void 0,reportDiagnostic:Ba,isConfigLookup:!1,candidateIsFromPackageJsonField:!1}}function eF(e,t){let r=Ou(e);for(r.pop();r.length>0;){let i=KS(T0(r),!1,t);if(i)return i;r.pop()}}function $O(e,t){return e.contents.versionPaths===void 0&&(e.contents.versionPaths=LNe(e.contents.packageJsonContent,t)||!1),e.contents.versionPaths||void 0}function KS(e,t,r){var i,o,s;let{host:l,traceEnabled:f}=r,d=vi(e,\"package.json\");if(t){r.failedLookupLocations.push(d);return}let g=(i=r.packageJsonInfoCache)==null?void 0:i.getPackageJsonInfo(d);if(g!==void 0){if(typeof g!=\"boolean\")return f&&Xi(l,_.File_0_exists_according_to_earlier_cached_lookups,d),r.affectingLocations.push(d),g.packageDirectory===e?g:{packageDirectory:e,contents:g.contents};g&&f&&Xi(l,_.File_0_does_not_exist_according_to_earlier_cached_lookups,d),r.failedLookupLocations.push(d);return}let m=gp(e,l);if(m&&l.fileExists(d)){let v=JI(d,l);f&&Xi(l,_.Found_package_json_at_0,d);let S={packageDirectory:e,contents:{packageJsonContent:v,versionPaths:void 0,resolvedEntrypoints:void 0}};return(o=r.packageJsonInfoCache)==null||o.setPackageJsonInfo(d,S),r.affectingLocations.push(d),S}else m&&f&&Xi(l,_.File_0_does_not_exist,d),(s=r.packageJsonInfoCache)==null||s.setPackageJsonInfo(d,m),r.failedLookupLocations.push(d)}function tF(e,t,r,i,o,s){let l;o&&(i.isConfigLookup?l=ANe(o,t,i):l=e&4&&xNe(o,t,i)||e&7&&CNe(o,t,i)||void 0);let f=(S,x,A,w)=>{let C=YO(x,A,w);if(C){let W=KNe(S,C);if(W)return J3(W);w.traceEnabled&&Xi(w.host,_.File_0_has_an_unsupported_extension_so_skipping_it,C)}let P=S===4?5:S,F=w.features,B=w.candidateIsFromPackageJsonField;w.candidateIsFromPackageJsonField=!0,o?.type!==\"module\"&&(w.features&=-33);let q=Q3(P,x,A,w,!1);return w.features=F,w.candidateIsFromPackageJsonField=B,q},d=l?!gp(ni(l),i.host):void 0,g=r||!gp(t,i.host),m=vi(t,i.isConfigLookup?\"tsconfig\":\"index\");if(s&&(!l||Gy(t,l))){let S=Xp(t,l||m,!1);i.traceEnabled&&Xi(i.host,_.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2,s.version,Rf,S);let x=nK(e,S,t,s.paths,void 0,f,d||g,i);if(x)return Rfe(x.value)}let v=l&&Rfe(f(e,l,d,i));if(v)return v;if(!(i.features&32))return BL(e,m,g,i)}function KNe(e,t,r){let i=Hm(t);return i!==void 0&&QJ(e,i)?{path:t,ext:i,resolvedUsingTsExtension:r}:void 0}function QJ(e,t){return e&2&&(t===\".js\"||t===\".jsx\"||t===\".mjs\"||t===\".cjs\")||e&1&&(t===\".ts\"||t===\".tsx\"||t===\".mts\"||t===\".cts\")||e&4&&(t===\".d.ts\"||t===\".d.mts\"||t===\".d.cts\")||e&8&&t===\".json\"||!1}function ZJ(e){let t=e.indexOf(_s);return e[0]===\"@\"&&(t=e.indexOf(_s,t+1)),t===-1?{packageName:e,rest:\"\"}:{packageName:e.slice(0,t),rest:e.slice(t+1)}}function nF(e){return Ji(bh(e),t=>na(t,\".\"))}function qNe(e){return!vt(bh(e),t=>na(t,\".\"))}function XNe(e,t,r,i,o,s){var l,f;let d=_a(vi(r,\"dummy\"),(f=(l=i.host).getCurrentDirectory)==null?void 0:f.call(l)),g=eF(d,i);if(!g||!g.contents.packageJsonContent.exports||typeof g.contents.packageJsonContent.name!=\"string\")return;let m=Ou(t),v=Ou(g.contents.packageJsonContent.name);if(!Ji(v,(C,P)=>m[P]===C))return;let S=m.slice(v.length),x=Fn(S)?`.${_s}${S.join(_s)}`:\".\",A=e&5,w=e&-6;return eK(g,A,x,i,o,s)||eK(g,w,x,i,o,s)}function eK(e,t,r,i,o,s){if(e.contents.packageJsonContent.exports){if(r===\".\"){let l;if(typeof e.contents.packageJsonContent.exports==\"string\"||Array.isArray(e.contents.packageJsonContent.exports)||typeof e.contents.packageJsonContent.exports==\"object\"&&qNe(e.contents.packageJsonContent.exports)?l=e.contents.packageJsonContent.exports:fs(e.contents.packageJsonContent.exports,\".\")&&(l=e.contents.packageJsonContent.exports[\".\"]),l)return e_e(t,i,o,s,r,e,!1)(l,\"\",!1,\".\")}else if(nF(e.contents.packageJsonContent.exports)){if(typeof e.contents.packageJsonContent.exports!=\"object\")return i.traceEnabled&&Xi(i.host,_.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1,r,e.packageDirectory),Af(void 0);let l=Zfe(t,i,o,s,r,e.contents.packageJsonContent.exports,e,!1);if(l)return l}return i.traceEnabled&&Xi(i.host,_.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1,r,e.packageDirectory),Af(void 0)}}function YNe(e,t,r,i,o,s){var l,f;if(t===\"#\"||na(t,\"#/\"))return i.traceEnabled&&Xi(i.host,_.Invalid_import_specifier_0_has_no_possible_resolutions,t),Af(void 0);let d=_a(vi(r,\"dummy\"),(f=(l=i.host).getCurrentDirectory)==null?void 0:f.call(l)),g=eF(d,i);if(!g)return i.traceEnabled&&Xi(i.host,_.Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve,d),Af(void 0);if(!g.contents.packageJsonContent.imports)return i.traceEnabled&&Xi(i.host,_.package_json_scope_0_has_no_imports_defined,g.packageDirectory),Af(void 0);let m=Zfe(e,i,o,s,t,g.contents.packageJsonContent.imports,g,!0);return m||(i.traceEnabled&&Xi(i.host,_.Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1,t,g.packageDirectory),Af(void 0))}function tK(e,t){let r=e.indexOf(\"*\"),i=t.indexOf(\"*\"),o=r===-1?e.length:r+1,s=i===-1?t.length:i+1;return o>s?-1:s>o||r===-1?1:i===-1||e.length>t.length?-1:t.length>e.length?1:0}function Zfe(e,t,r,i,o,s,l,f){let d=e_e(e,t,r,i,o,l,f);if(!Oc(o,_s)&&o.indexOf(\"*\")===-1&&fs(s,o)){let v=s[o];return d(v,\"\",!1,o)}let g=XC(Pr(bh(s),v=>v.indexOf(\"*\")!==-1||Oc(v,\"/\")),tK);for(let v of g)if(t.features&16&&m(v,o)){let S=s[v],x=v.indexOf(\"*\"),A=o.substring(v.substring(0,x).length,o.length-(v.length-1-x));return d(S,A,!0,v)}else if(Oc(v,\"*\")&&na(o,v.substring(0,v.length-1))){let S=s[v],x=o.substring(v.length-1);return d(S,x,!0,v)}else if(na(o,v)){let S=s[v],x=o.substring(v.length);return d(S,x,!1,v)}function m(v,S){if(Oc(v,\"*\"))return!1;let x=v.indexOf(\"*\");return x===-1?!1:na(S,v.substring(0,x))&&Oc(S,v.substring(x+1))}}function e_e(e,t,r,i,o,s,l){return f;function f(d,g,m,v){if(typeof d==\"string\"){if(!m&&g.length>0&&!Oc(d,\"/\"))return t.traceEnabled&&Xi(t.host,_.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,s.packageDirectory,o),Af(void 0);if(!na(d,\"./\")){if(l&&!na(d,\"../\")&&!na(d,\"/\")&&!qp(d)){let Y=m?d.replace(/\\*/g,g):d+g;Y0(t,_.Using_0_subpath_1_with_target_2,\"imports\",v,Y),Y0(t,_.Resolving_module_0_from_1,Y,s.packageDirectory+\"/\");let R=GL(t.features,Y,s.packageDirectory+\"/\",t.compilerOptions,t.host,r,e,!1,i);return Af(R.resolvedModule?{path:R.resolvedModule.resolvedFileName,extension:R.resolvedModule.extension,packageId:R.resolvedModule.packageId,originalPath:R.resolvedModule.originalPath,resolvedUsingTsExtension:R.resolvedModule.resolvedUsingTsExtension}:void 0)}return t.traceEnabled&&Xi(t.host,_.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,s.packageDirectory,o),Af(void 0)}let P=(Jd(d)?Ou(d).slice(1):Ou(d)).slice(1);if(P.indexOf(\"..\")>=0||P.indexOf(\".\")>=0||P.indexOf(\"node_modules\")>=0)return t.traceEnabled&&Xi(t.host,_.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,s.packageDirectory,o),Af(void 0);let F=vi(s.packageDirectory,d),B=Ou(g);if(B.indexOf(\"..\")>=0||B.indexOf(\".\")>=0||B.indexOf(\"node_modules\")>=0)return t.traceEnabled&&Xi(t.host,_.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,s.packageDirectory,o),Af(void 0);t.traceEnabled&&Xi(t.host,_.Using_0_subpath_1_with_target_2,l?\"imports\":\"exports\",v,m?d.replace(/\\*/g,g):d+g);let q=S(m?F.replace(/\\*/g,g):F+g),W=w(q,g,vi(s.packageDirectory,\"package.json\"),l);return W||Af(O2(s,$J(e,q,!1,t)))}else if(typeof d==\"object\"&&d!==null)if(Array.isArray(d)){if(!Fn(d))return t.traceEnabled&&Xi(t.host,_.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,s.packageDirectory,o),Af(void 0);for(let C of d){let P=f(C,g,m,v);if(P)return P}}else{Y0(t,_.Entering_conditional_exports);for(let C of bh(d))if(C===\"default\"||t.conditions.indexOf(C)>=0||QO(t.conditions,C)){Y0(t,_.Matched_0_condition_1,l?\"imports\":\"exports\",C);let P=d[C],F=f(P,g,m,v);if(F)return Y0(t,_.Resolved_under_condition_0,C),Y0(t,_.Exiting_conditional_exports),F;Y0(t,_.Failed_to_resolve_under_condition_0,C)}else Y0(t,_.Saw_non_matching_condition_0,C);Y0(t,_.Exiting_conditional_exports);return}else if(d===null)return t.traceEnabled&&Xi(t.host,_.package_json_scope_0_explicitly_maps_specifier_1_to_null,s.packageDirectory,o),Af(void 0);return t.traceEnabled&&Xi(t.host,_.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,s.packageDirectory,o),Af(void 0);function S(C){var P,F;return C===void 0?C:_a(C,(F=(P=t.host).getCurrentDirectory)==null?void 0:F.call(P))}function x(C,P){return cu(vi(C,P))}function A(){return t.host.useCaseSensitiveFileNames?typeof t.host.useCaseSensitiveFileNames==\"boolean\"?t.host.useCaseSensitiveFileNames:t.host.useCaseSensitiveFileNames():!0}function w(C,P,F,B){var q,W,Y,R;if(!t.isConfigLookup&&(t.compilerOptions.declarationDir||t.compilerOptions.outDir)&&C.indexOf(\"/node_modules/\")===-1&&(!t.compilerOptions.configFile||Gy(s.packageDirectory,S(t.compilerOptions.configFile.fileName),!A()))){let $=lb({useCaseSensitiveFileNames:A}),fe=[];if(t.compilerOptions.rootDir||t.compilerOptions.composite&&t.compilerOptions.configFilePath){let Z=S(uN(t.compilerOptions,()=>[],((W=(q=t.host).getCurrentDirectory)==null?void 0:W.call(q))||\"\",$));fe.push(Z)}else if(t.requestContainingDirectory){let Z=S(vi(t.requestContainingDirectory,\"index.ts\")),U=S(uN(t.compilerOptions,()=>[Z,S(F)],((R=(Y=t.host).getCurrentDirectory)==null?void 0:R.call(Y))||\"\",$));fe.push(U);let re=cu(U);for(;re&&re.length>1;){let le=Ou(re);le.pop();let _e=T0(le);fe.unshift(_e),re=cu(_e)}}fe.length>1&&t.reportDiagnostic(ps(B?_.The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate:_.The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate,P===\"\"?\".\":P,F));for(let Z of fe){let U=ie(Z);for(let re of U)if(Gy(re,C,!A())){let le=C.slice(re.length+1),_e=vi(Z,le),ge=[\".mjs\",\".cjs\",\".js\",\".json\",\".d.mts\",\".d.cts\",\".d.ts\"];for(let X of ge)if(Gc(_e,X)){let Ve=Oce(_e);for(let we of Ve){if(!QJ(e,we))continue;let ke=uj(_e,we,X,!A());if(t.host.fileExists(ke))return Af(O2(s,$J(e,ke,!1,t)))}}}}}return;function ie($){var fe,Z;let U=t.compilerOptions.configFile?((Z=(fe=t.host).getCurrentDirectory)==null?void 0:Z.call(fe))||\"\":$,re=[];return t.compilerOptions.declarationDir&&re.push(S(x(U,t.compilerOptions.declarationDir))),t.compilerOptions.outDir&&t.compilerOptions.outDir!==t.compilerOptions.declarationDir&&re.push(S(x(U,t.compilerOptions.outDir))),re}}}}function QO(e,t){if(e.indexOf(\"types\")===-1||!na(t,\"types@\"))return!1;let r=mA.tryParse(t.substring(6));return r?r.test(Rf):!1}function t_e(e,t,r,i,o,s){return n_e(e,t,r,i,!1,o,s)}function $Ne(e,t,r){return n_e(4,e,t,r,!0,void 0,void 0)}function n_e(e,t,r,i,o,s,l){let f=i.features===0?void 0:i.features&32?99:1,d=e&5,g=e&-6;if(d){let v=m(d);if(v)return v}if(g&&!o)return m(g);function m(v){return Th(Al(r),S=>{if(Hl(S)!==\"node_modules\"){let x=a_e(s,t,f,S,l,i);return x||Af(r_e(v,t,S,i,o,s,l))}})}}function r_e(e,t,r,i,o,s,l){let f=vi(r,\"node_modules\"),d=gp(f,i.host);if(!d&&i.traceEnabled&&Xi(i.host,_.Directory_0_does_not_exist_skipping_all_lookups_in_it,f),!o){let g=i_e(e,t,f,d,i,s,l);if(g)return g}if(e&4){let g=vi(f,\"@types\"),m=d;return d&&!gp(g,i.host)&&(i.traceEnabled&&Xi(i.host,_.Directory_0_does_not_exist_skipping_all_lookups_in_it,g),m=!1),i_e(4,QNe(t,i),g,m,i,s,l)}}function i_e(e,t,r,i,o,s,l){var f,d,g;let m=So(vi(r,t)),{packageName:v,rest:S}=ZJ(t),x=vi(r,v),A,w=KS(m,!i,o);if(S!==\"\"&&w&&(!(o.features&8)||!fs((d=(f=A=KS(x,!i,o))==null?void 0:f.contents.packageJsonContent)!=null?d:Je,\"exports\"))){let F=BL(e,m,!i,o);if(F)return J3(F);let B=tF(e,m,!i,o,w.contents.packageJsonContent,$O(w,o));return O2(w,B)}let C=(F,B,q,W)=>{let Y=BL(F,B,q,W)||tF(F,B,q,W,w&&w.contents.packageJsonContent,w&&$O(w,W));return!Y&&w&&(w.contents.packageJsonContent.exports===void 0||w.contents.packageJsonContent.exports===null)&&W.features&32&&(Y=BL(F,vi(B,\"index.js\"),q,W)),O2(w,Y)};if(S!==\"\"&&(w=A??KS(x,!i,o)),w&&w.contents.packageJsonContent.exports&&o.features&8)return(g=eK(w,e,vi(\".\",S),o,s,l))==null?void 0:g.value;let P=S!==\"\"&&w?$O(w,o):void 0;if(P){o.traceEnabled&&Xi(o.host,_.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2,P.version,Rf,S);let F=i&&gp(x,o.host),B=nK(e,S,x,P.paths,void 0,C,!F,o);if(B)return B.value}return C(e,m,!i,o)}function nK(e,t,r,i,o,s,l,f){o||(o=g4(i));let d=NW(o,t);if(d){let g=Ta(d)?void 0:Dae(d,t),m=Ta(d)?d:kae(d);return f.traceEnabled&&Xi(f.host,_.Module_name_0_matched_pattern_1,t,m),{value:mn(i[m],S=>{let x=g?S.replace(\"*\",g):S,A=So(vi(r,x));f.traceEnabled&&Xi(f.host,_.Trying_substitution_0_candidate_module_location_Colon_1,S,x);let w=Hm(S);if(w!==void 0){let C=YO(A,l,f);if(C!==void 0)return J3({path:C,ext:w,resolvedUsingTsExtension:void 0})}return s(e,A,l||!gp(ni(A),f.host),f)})}}}function QNe(e,t){let r=UL(e);return t.traceEnabled&&r!==e&&Xi(t.host,_.Scoped_package_detected_looking_in_0,r),r}function rF(e){return`@types/${UL(e)}`}function UL(e){if(na(e,\"@\")){let t=e.replace(_s,aF);if(t!==e)return t.slice(1)}return e}function ZO(e){let t=QC(e,\"@types/\");return t!==e?iF(t):e}function iF(e){return jl(e,aF)?\"@\"+e.replace(aF,_s):e}function a_e(e,t,r,i,o,s){let l=e&&e.getFromNonRelativeNameCache(t,r,i,o);if(l)return s.traceEnabled&&Xi(s.host,_.Resolution_for_module_0_was_found_in_cache_from_location_1,t,i),s.resultFromCache=l,{value:l.resolvedModule&&{path:l.resolvedModule.resolvedFileName,originalPath:l.resolvedModule.originalPath||!0,extension:l.resolvedModule.extension,packageId:l.resolvedModule.packageId,resolvedUsingTsExtension:l.resolvedModule.resolvedUsingTsExtension}}}function o_e(e,t,r,i,o,s){let l=ov(r,i),f=[],d=[],g=ni(t),m=[],v={compilerOptions:r,host:i,traceEnabled:l,failedLookupLocations:f,affectingLocations:d,packageJsonInfoCache:o,features:0,conditions:[],requestContainingDirectory:g,reportDiagnostic:A=>void m.push(A),isConfigLookup:!1,candidateIsFromPackageJsonField:!1},S=x(5)||x(2|(r.resolveJsonModule?8:0));return Pfe(e,S&&S.value,S?.value&&JS(S.value.path),f,d,m,v);function x(A){let w=Vfe(A,e,g,YJ,v);if(w)return{value:w};if(fl(e)){let C=So(vi(g,e));return Af(YJ(A,C,!1,v))}else{let C=Th(g,P=>{let F=a_e(o,e,void 0,P,s,v);if(F)return F;let B=So(vi(P,e));return Af(YJ(A,B,!1,v))});if(C)return C;if(A&5)return $Ne(e,g,v)}}}function VL(e,t){return!!e.allowImportingTsExtensions||t&&Fu(t)}function s_e(e,t,r,i,o,s){let l=ov(r,i);l&&Xi(i,_.Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2,t,e,o);let f=[],d=[],g=[],m={compilerOptions:r,host:i,traceEnabled:l,failedLookupLocations:f,affectingLocations:d,packageJsonInfoCache:s,features:0,conditions:[],requestContainingDirectory:void 0,reportDiagnostic:S=>void g.push(S),isConfigLookup:!1,candidateIsFromPackageJsonField:!1},v=r_e(4,e,o,m,!1,void 0,void 0);return Mfe(v,!0,f,d,g,m.resultFromCache)}function Af(e){return e!==void 0?{value:e}:void 0}function Y0(e,t,...r){e.traceEnabled&&Xi(e.host,t,...r)}var rK,iK,aK,Wg,aF,ZNe=gt({\"src/compiler/moduleNameResolver.ts\"(){\"use strict\";fa(),iK=vi(\"node_modules\",\"@types\"),aK=(e=>(e[e.None=0]=\"None\",e[e.Imports=2]=\"Imports\",e[e.SelfName=4]=\"SelfName\",e[e.Exports=8]=\"Exports\",e[e.ExportsPatternTrailers=16]=\"ExportsPatternTrailers\",e[e.AllFeatures=30]=\"AllFeatures\",e[e.Node16Default=30]=\"Node16Default\",e[e.NodeNextDefault=30]=\"NodeNextDefault\",e[e.BundlerDefault=30]=\"BundlerDefault\",e[e.EsmMode=32]=\"EsmMode\",e))(aK||{}),Wg=\"/node_modules/\",aF=\"__\"}});function Gh(e,t){return e.body&&!e.body.parent&&(go(e.body,e),Zy(e.body,!1)),e.body?oK(e.body,t):1}function oK(e,t=new Map){let r=zo(e);if(t.has(r))return t.get(r)||0;t.set(r,void 0);let i=ePe(e,t);return t.set(r,i),i}function ePe(e,t){switch(e.kind){case 261:case 262:return 0;case 263:if(R0(e))return 2;break;case 269:case 268:if(!Mr(e,1))return 0;break;case 275:let r=e;if(!r.moduleSpecifier&&r.exportClause&&r.exportClause.kind===276){let i=0;for(let o of r.exportClause.elements){let s=tPe(o,t);if(s>i&&(i=s),i===1)return i}return i}break;case 265:{let i=0;return pa(e,o=>{let s=oK(o,t);switch(s){case 0:return;case 2:i=2;return;case 1:return i=1,!0;default:L.assertNever(s)}}),i}case 264:return Gh(e,t);case 79:if(e.flags&2048)return 0}return 1}function tPe(e,t){let r=e.propertyName||e.name,i=e.parent;for(;i;){if(Va(i)||Tp(i)||Li(i)){let o=i.statements,s;for(let l of o)if(xw(l,r)){l.parent||(go(l,i),Zy(l,!1));let f=oK(l,t);if((s===void 0||f>s)&&(s=f),s===1)return s}if(s!==void 0)return s}i=i.parent}return 1}function zT(e){return L.attachFlowNodeDebugInfo(e),e}function c_e(e,t){Fs(\"beforeBind\"),fp.logStartBindFile(\"\"+e.fileName),d_e(e,t),fp.logStopBindFile(),Fs(\"afterBind\"),hf(\"Bind\",\"beforeBind\",\"afterBind\")}function nPe(){var e,t,r,i,o,s,l,f,d,g,m,v,S,x,A,w,C,P,F,B,q,W,Y=!1,R=0,ie,$,fe={flags:1},Z={flags:1},U=Ot();return le;function re(M,He,Nt,Pn,la){return Nu(Gn(M)||e,M,He,Nt,Pn,la)}function le(M,He){var Nt,Pn;e=M,t=He,r=Do(t),W=_e(e,He),$=new Set,R=0,ie=ml.getSymbolConstructor(),L.attachFlowNodeDebugInfo(fe),L.attachFlowNodeDebugInfo(Z),e.locals||((Nt=ai)==null||Nt.push(ai.Phase.Bind,\"bindSourceFile\",{path:e.path},!0),ft(e),(Pn=ai)==null||Pn.pop(),e.symbolCount=R,e.classifiableNames=$,hc()),e=void 0,t=void 0,r=void 0,i=void 0,o=void 0,s=void 0,l=void 0,f=void 0,d=void 0,g=!1,m=void 0,v=void 0,S=void 0,x=void 0,A=void 0,w=void 0,C=void 0,F=void 0,B=!1,Y=!1,q=0}function _e(M,He){return Uf(He,\"alwaysStrict\")&&!M.isDeclarationFile?!0:!!M.externalModuleIndicator}function ge(M,He){return R++,new ie(M,He)}function X(M,He,Nt){M.flags|=Nt,He.symbol=M,M.declarations=xg(M.declarations,He),Nt&1955&&!M.exports&&(M.exports=Ua()),Nt&6240&&!M.members&&(M.members=Ua()),M.constEnumOnlyModule&&M.flags&304&&(M.constEnumOnlyModule=!1),Nt&111551&&rR(M,He)}function Ve(M){if(M.kind===274)return M.isExportEquals?\"export=\":\"default\";let He=sa(M);if(He){if(lu(M)){let Nt=l_(He);return mp(M)?\"__global\":`\"${Nt}\"`}if(He.kind===164){let Nt=He.expression;if(yf(Nt))return Bs(Nt.text);if(X6(Nt))return Xa(Nt.operator)+Nt.operand.text;L.fail(\"Only computed properties with literal names have declaration names\")}if(pi(He)){let Nt=Zc(M);if(!Nt)return;let Pn=Nt.symbol;return hR(Pn,He.escapedText)}return c_(He)?MI(He):void 0}switch(M.kind){case 173:return\"__constructor\";case 181:case 176:case 326:return\"__call\";case 182:case 177:return\"__new\";case 178:return\"__index\";case 275:return\"__export\";case 308:return\"export=\";case 223:if(ic(M)===2)return\"export=\";L.fail(\"Unknown binary declaration kind\");break;case 320:return jA(M)?\"__new\":\"__call\";case 166:return L.assert(M.parent.kind===320,\"Impossible parameter parent kind\",()=>`parent is: ${L.formatSyntaxKind(M.parent.kind)}, expected JSDocFunctionType`),\"arg\"+M.parent.parameters.indexOf(M)}}function we(M){return zl(M)?os(M.name):Gi(L.checkDefined(Ve(M)))}function ke(M,He,Nt,Pn,la,oa,be){L.assert(be||!Xy(Nt));let De=Mr(Nt,1024)||Mu(Nt)&&Nt.name.escapedText===\"default\",mt=be?\"__computed\":De&&He?\"default\":Ve(Nt),St;if(mt===void 0)St=ge(0,\"__missing\");else if(St=M.get(mt),Pn&2885600&&$.add(mt),!St)M.set(mt,St=ge(0,mt)),oa&&(St.isReplaceableByMethod=!0);else{if(oa&&!St.isReplaceableByMethod)return St;if(St.flags&la){if(St.isReplaceableByMethod)M.set(mt,St=ge(0,mt));else if(!(Pn&3&&St.flags&67108864)){zl(Nt)&&go(Nt.name,Nt);let Zt=St.flags&2?_.Cannot_redeclare_block_scoped_variable_0:_.Duplicate_identifier_0,rn=!0;(St.flags&384||Pn&384)&&(Zt=_.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations,rn=!1);let sn=!1;Fn(St.declarations)&&(De||St.declarations&&St.declarations.length&&Nt.kind===274&&!Nt.isExportEquals)&&(Zt=_.A_module_cannot_have_multiple_default_exports,rn=!1,sn=!0);let Dn=[];Ep(Nt)&&rc(Nt.type)&&Mr(Nt,1)&&St.flags&2887656&&Dn.push(re(Nt,_.Did_you_mean_0,`export type { ${Gi(Nt.name.escapedText)} }`));let kr=sa(Nt)||Nt;mn(St.declarations,(Vn,$t)=>{let Xn=sa(Vn)||Vn,ra=re(Xn,Zt,rn?we(Vn):void 0);e.bindDiagnostics.push(sn?Ao(ra,re(kr,$t===0?_.Another_export_default_is_here:_.and_here)):ra),sn&&Dn.push(re(Xn,_.The_first_export_default_is_here))});let ki=re(kr,Zt,rn?we(Nt):void 0);e.bindDiagnostics.push(Ao(ki,...Dn)),St=ge(0,mt)}}}return X(St,Nt,Pn),St.parent?L.assert(St.parent===He,\"Existing symbol parent should match new one\"):St.parent=He,St}function Pe(M,He,Nt){let Pn=!!(wg(M)&1)||Ce(M);if(He&2097152)return M.kind===278||M.kind===268&&Pn?ke(o.symbol.exports,o.symbol,M,He,Nt):(L.assertNode(o,Qp),ke(o.locals,void 0,M,He,Nt));if(Ff(M)&&L.assert(Yn(M)),!lu(M)&&(Pn||o.flags&64)){if(!Qp(o)||!o.locals||Mr(M,1024)&&!Ve(M))return ke(o.symbol.exports,o.symbol,M,He,Nt);let la=He&111551?1048576:0,oa=ke(o.locals,void 0,M,la,Nt);return oa.exportSymbol=ke(o.symbol.exports,o.symbol,M,He,Nt),M.localSymbol=oa,oa}else return L.assertNode(o,Qp),ke(o.locals,void 0,M,He,Nt)}function Ce(M){if(M.parent&&Tc(M)&&(M=M.parent),!Ff(M))return!1;if(!vO(M)&&M.fullName)return!0;let He=sa(M);return He?!!(LR(He.parent)&&Vr(He.parent)||Kl(He.parent)&&wg(He.parent)&1):!1}function Ie(M,He){let Nt=o,Pn=s,la=l;if(He&1?(M.kind!==216&&(s=o),o=l=M,He&32&&(o.locals=Ua(),Za(o))):He&2&&(l=M,He&32&&(l.locals=void 0)),He&4){let oa=m,be=v,De=S,mt=x,St=C,Zt=F,rn=B,sn=He&16&&!Mr(M,512)&&!M.asteriskToken&&!!ET(M)||M.kind===172;sn||(m=zT({flags:2}),He&144&&(m.node=M)),x=sn||M.kind===173||Yn(M)&&(M.kind===259||M.kind===215)?tn():void 0,C=void 0,v=void 0,S=void 0,F=void 0,B=!1,Ye(M),M.flags&=-2817,!(m.flags&1)&&He&8&&Pf(M.body)&&(M.flags|=256,B&&(M.flags|=512),M.endFlowNode=m),M.kind===308&&(M.flags|=q,M.endFlowNode=m),x&&($n(x,m),m=pt(x),(M.kind===173||M.kind===172||Yn(M)&&(M.kind===259||M.kind===215))&&(M.returnFlowNode=m)),sn||(m=oa),v=be,S=De,x=mt,C=St,F=Zt,B=rn}else He&64?(g=!1,Ye(M),L.assertNotNode(M,Re),M.flags=g?M.flags|128:M.flags&-129):Ye(M);o=Nt,s=Pn,l=la}function Be(M){Ne(M,He=>He.kind===259?ft(He):void 0),Ne(M,He=>He.kind!==259?ft(He):void 0)}function Ne(M,He=ft){M!==void 0&&mn(M,He)}function Le(M){pa(M,ft,Ne)}function Ye(M){let He=Y;if(Y=!1,Y_(M)){Le(M),Yt(M),Y=He;return}switch(M.kind>=240&&M.kind<=256&&!t.allowUnreachableCode&&(M.flowNode=m),M.kind){case 244:Ht(M);break;case 243:En(M);break;case 245:dr(M);break;case 246:case 247:Cr(M);break;case 242:Se(M);break;case 250:case 254:at(M);break;case 249:case 248:nt(M);break;case 255:ce(M);break;case 252:Q(M);break;case 266:ue(M);break;case 292:G(M);break;case 241:Oe(M);break;case 253:Ge(M);break;case 221:ir(M);break;case 222:ae(M);break;case 223:if(Fg(M)){Y=He,rt(M);return}U(M);break;case 217:Ke(M);break;case 224:oe(M);break;case 257:z(M);break;case 208:case 209:Si(M);break;case 210:Ja(M);break;case 232:Kr(M);break;case 349:case 341:case 343:lt(M);break;case 308:{Be(M.statements),ft(M.endOfFileToken);break}case 238:case 265:Be(M.statements);break;case 205:Te(M);break;case 166:j(M);break;case 207:case 206:case 299:case 227:Y=He;default:Le(M);break}Yt(M),Y=He}function _t(M){switch(M.kind){case 79:case 80:case 108:case 208:case 209:return Rt(M);case 210:return We(M);case 214:case 232:return _t(M.expression);case 223:return zt(M);case 221:return M.operator===53&&_t(M.operand);case 218:return _t(M.expression)}return!1}function ct(M){return WI(M)||(br(M)||PS(M)||ud(M))&&ct(M.expression)||ar(M)&&M.operatorToken.kind===27&&ct(M.right)||Vs(M)&&(yf(M.argumentExpression)||bc(M.argumentExpression))&&ct(M.expression)||Iu(M)&&ct(M.left)}function Rt(M){return ct(M)||Jl(M)&&Rt(M.expression)}function We(M){if(M.arguments){for(let He of M.arguments)if(Rt(He))return!0}return!!(M.expression.kind===208&&Rt(M.expression.expression))}function qe(M,He){return y2(M)&&Qt(M.expression)&&es(He)}function zt(M){switch(M.operatorToken.kind){case 63:case 75:case 76:case 77:return Rt(M.left);case 34:case 35:case 36:case 37:return Qt(M.left)||Qt(M.right)||qe(M.right,M.left)||qe(M.left,M.right);case 102:return Qt(M.left);case 101:return _t(M.right);case 27:return _t(M.right)}return!1}function Qt(M){switch(M.kind){case 214:return Qt(M.expression);case 223:switch(M.operatorToken.kind){case 63:return Qt(M.left);case 27:return Qt(M.right)}}return Rt(M)}function tn(){return zT({flags:4,antecedents:void 0})}function kn(){return zT({flags:8,antecedents:void 0})}function _n(M,He,Nt){return zT({flags:1024,target:M,antecedents:He,antecedent:Nt})}function Gt(M){M.flags|=M.flags&2048?4096:2048}function $n(M,He){!(He.flags&1)&&!ya(M.antecedents,He)&&((M.antecedents||(M.antecedents=[])).push(He),Gt(He))}function ui(M,He,Nt){return He.flags&1?He:Nt?(Nt.kind===110&&M&64||Nt.kind===95&&M&32)&&!r6(Nt)&&!wj(Nt.parent)?fe:_t(Nt)?(Gt(He),zT({flags:M,antecedent:He,node:Nt})):He:M&32?He:fe}function Ni(M,He,Nt,Pn){return Gt(M),zT({flags:128,antecedent:M,switchStatement:He,clauseStart:Nt,clauseEnd:Pn})}function Pi(M,He,Nt){Gt(He);let Pn=zT({flags:M,antecedent:He,node:Nt});return C&&$n(C,Pn),Pn}function gr(M,He){return Gt(M),zT({flags:512,antecedent:M,node:He})}function pt(M){let He=M.antecedents;return He?He.length===1?He[0]:M:fe}function nn(M){let He=M.parent;switch(He.kind){case 242:case 244:case 243:return He.expression===M;case 245:case 224:return He.condition===M}return!1}function Dt(M){for(;;)if(M.kind===214)M=M.expression;else if(M.kind===221&&M.operator===53)M=M.operand;else return CR(M)}function pn(M){return cW(vs(M))}function An(M){for(;ud(M.parent)||tv(M.parent)&&M.parent.operator===53;)M=M.parent;return!nn(M)&&!Dt(M.parent)&&!(Jl(M.parent)&&M.parent.expression===M)}function Kn(M,He,Nt,Pn){let la=A,oa=w;A=Nt,w=Pn,M(He),A=la,w=oa}function hi(M,He,Nt){Kn(ft,M,He,Nt),(!M||!pn(M)&&!Dt(M)&&!(Jl(M)&&mI(M)))&&($n(He,ui(32,m,M)),$n(Nt,ui(64,m,M)))}function ri(M,He,Nt){let Pn=v,la=S;v=He,S=Nt,ft(M),v=Pn,S=la}function vn(M,He){let Nt=F;for(;Nt&&M.parent.kind===253;)Nt.continueTarget=He,Nt=Nt.next,M=M.parent;return He}function Ht(M){let He=vn(M,kn()),Nt=tn(),Pn=tn();$n(He,m),m=He,hi(M.expression,Nt,Pn),m=pt(Nt),ri(M.statement,Pn,He),$n(He,m),m=pt(Pn)}function En(M){let He=kn(),Nt=vn(M,tn()),Pn=tn();$n(He,m),m=He,ri(M.statement,Pn,Nt),$n(Nt,m),m=pt(Nt),hi(M.expression,He,Pn),m=pt(Pn)}function dr(M){let He=vn(M,kn()),Nt=tn(),Pn=tn();ft(M.initializer),$n(He,m),m=He,hi(M.condition,Nt,Pn),m=pt(Nt),ri(M.statement,Pn,He),ft(M.incrementor),$n(He,m),m=pt(Pn)}function Cr(M){let He=vn(M,kn()),Nt=tn();ft(M.expression),$n(He,m),m=He,M.kind===247&&ft(M.awaitModifier),$n(Nt,m),ft(M.initializer),M.initializer.kind!==258&&Kt(M.initializer),ri(M.statement,Nt,He),$n(He,m),m=pt(Nt)}function Se(M){let He=tn(),Nt=tn(),Pn=tn();hi(M.expression,He,Nt),m=pt(He),ft(M.thenStatement),$n(Pn,m),m=pt(Nt),ft(M.elseStatement),$n(Pn,m),m=pt(Pn)}function at(M){ft(M.expression),M.kind===250&&(B=!0,x&&$n(x,m)),m=fe}function Tt(M){for(let He=F;He;He=He.next)if(He.name===M)return He}function ve(M,He,Nt){let Pn=M.kind===249?He:Nt;Pn&&($n(Pn,m),m=fe)}function nt(M){if(ft(M.label),M.label){let He=Tt(M.label.escapedText);He&&(He.referenced=!0,ve(M,He.breakTarget,He.continueTarget))}else ve(M,v,S)}function ce(M){let He=x,Nt=C,Pn=tn(),la=tn(),oa=tn();if(M.finallyBlock&&(x=la),$n(oa,m),C=oa,ft(M.tryBlock),$n(Pn,m),M.catchClause&&(m=pt(oa),oa=tn(),$n(oa,m),C=oa,ft(M.catchClause),$n(Pn,m)),x=He,C=Nt,M.finallyBlock){let be=tn();be.antecedents=Qi(Qi(Pn.antecedents,oa.antecedents),la.antecedents),m=be,ft(M.finallyBlock),m.flags&1?m=fe:(x&&la.antecedents&&$n(x,_n(be,la.antecedents,m)),C&&oa.antecedents&&$n(C,_n(be,oa.antecedents,m)),m=Pn.antecedents?_n(be,Pn.antecedents,m):fe)}else m=pt(Pn)}function Q(M){let He=tn();ft(M.expression);let Nt=v,Pn=P;v=He,P=m,ft(M.caseBlock),$n(He,m);let la=mn(M.caseBlock.clauses,oa=>oa.kind===293);M.possiblyExhaustive=!la&&!He.antecedents,la||$n(He,Ni(P,M,0,0)),v=Nt,P=Pn,m=pt(He)}function ue(M){let He=M.clauses,Nt=_t(M.parent.expression),Pn=fe;for(let la=0;la<He.length;la++){let oa=la;for(;!He[la].statements.length&&la+1<He.length;)ft(He[la]),la++;let be=tn();$n(be,Nt?Ni(P,M.parent,oa,la+1):P),$n(be,Pn),m=pt(be);let De=He[la];ft(De),Pn=m,!(m.flags&1)&&la!==He.length-1&&t.noFallthroughCasesInSwitch&&(De.fallthroughFlowNode=m)}}function G(M){let He=m;m=P,ft(M.expression),m=He,Ne(M.statements)}function Oe(M){ft(M.expression),je(M.expression)}function je(M){if(M.kind===210){let He=M;He.expression.kind!==106&&WI(He.expression)&&(m=gr(m,He))}}function Ge(M){let He=tn();F={next:F,name:M.label.escapedText,breakTarget:He,continueTarget:void 0,referenced:!1},ft(M.label),ft(M.statement),!F.referenced&&!t.allowUnusedLabels&&wt(Sle(t),M.label,_.Unused_label),F=F.next,$n(He,m),m=pt(He)}function kt(M){M.kind===223&&M.operatorToken.kind===63?Kt(M.left):Kt(M)}function Kt(M){if(ct(M))m=Pi(16,m,M);else if(M.kind===206)for(let He of M.elements)He.kind===227?Kt(He.expression):kt(He);else if(M.kind===207)for(let He of M.properties)He.kind===299?kt(He.initializer):He.kind===300?Kt(He.name):He.kind===301&&Kt(He.expression)}function ln(M,He,Nt){let Pn=tn();M.operatorToken.kind===55||M.operatorToken.kind===76?hi(M.left,Pn,Nt):hi(M.left,He,Pn),m=pt(Pn),ft(M.operatorToken),HI(M.operatorToken.kind)?(Kn(ft,M.right,He,Nt),Kt(M.left),$n(He,ui(32,m,M)),$n(Nt,ui(64,m,M))):hi(M.right,He,Nt)}function ir(M){if(M.operator===53){let He=A;A=w,w=He,Le(M),w=A,A=He}else Le(M),(M.operator===45||M.operator===46)&&Kt(M.operand)}function ae(M){Le(M),(M.operator===45||M.operator===46)&&Kt(M.operand)}function rt(M){Y?(Y=!1,ft(M.operatorToken),ft(M.right),Y=!0,ft(M.left)):(Y=!0,ft(M.left),Y=!1,ft(M.operatorToken),ft(M.right)),Kt(M.left)}function Ot(){return C3(M,He,Nt,Pn,la,void 0);function M(be,De){if(De){De.stackIndex++,go(be,i);let St=W;ta(be);let Zt=i;i=be,De.skip=!1,De.inStrictModeStack[De.stackIndex]=St,De.parentStack[De.stackIndex]=Zt}else De={stackIndex:0,skip:!1,inStrictModeStack:[void 0],parentStack:[void 0]};let mt=be.operatorToken.kind;if(AR(mt)||HI(mt)){if(An(be)){let St=tn();ln(be,St,St),m=pt(St)}else ln(be,A,w);De.skip=!0}return De}function He(be,De,mt){if(!De.skip){let St=oa(be);return mt.operatorToken.kind===27&&je(be),St}}function Nt(be,De,mt){De.skip||ft(be)}function Pn(be,De,mt){if(!De.skip){let St=oa(be);return mt.operatorToken.kind===27&&je(be),St}}function la(be,De){if(!De.skip){let Zt=be.operatorToken.kind;if(Mg(Zt)&&!Um(be)&&(Kt(be.left),Zt===63&&be.left.kind===209)){let rn=be.left;Qt(rn.expression)&&(m=Pi(256,m,be))}}let mt=De.inStrictModeStack[De.stackIndex],St=De.parentStack[De.stackIndex];mt!==void 0&&(W=mt),St!==void 0&&(i=St),De.skip=!1,De.stackIndex--}function oa(be){if(be&&ar(be)&&!Fg(be))return be;ft(be)}}function Ke(M){Le(M),M.expression.kind===208&&Kt(M.expression)}function oe(M){let He=tn(),Nt=tn(),Pn=tn();hi(M.condition,He,Nt),m=pt(He),ft(M.questionToken),ft(M.whenTrue),$n(Pn,m),m=pt(Nt),ft(M.colonToken),ft(M.whenFalse),$n(Pn,m),m=pt(Pn)}function pe(M){let He=ol(M)?void 0:M.name;if(La(He))for(let Nt of He.elements)pe(Nt);else m=Pi(16,m,M)}function z(M){Le(M),(M.initializer||CA(M.parent.parent))&&pe(M)}function Te(M){ft(M.dotDotDotToken),ft(M.propertyName),yt(M.initializer),ft(M.name)}function j(M){Ne(M.modifiers),ft(M.dotDotDotToken),ft(M.questionToken),ft(M.type),yt(M.initializer),ft(M.name)}function yt(M){if(!M)return;let He=m;if(ft(M),He===fe||He===m)return;let Nt=tn();$n(Nt,He),$n(Nt,m),m=pt(Nt)}function lt(M){ft(M.tagName),M.kind!==343&&M.fullName&&(go(M.fullName,M),Zy(M.fullName,!1)),typeof M.comment!=\"string\"&&Ne(M.comment)}function Qe(M){Le(M);let He=sb(M);He&&He.kind!==171&&X(He.symbol,He,32)}function Vt(M,He,Nt){Kn(ft,M,He,Nt),(!Jl(M)||mI(M))&&($n(He,ui(32,m,M)),$n(Nt,ui(64,m,M)))}function Hn(M){switch(M.kind){case 208:ft(M.questionDotToken),ft(M.name);break;case 209:ft(M.questionDotToken),ft(M.argumentExpression);break;case 210:ft(M.questionDotToken),Ne(M.typeArguments),Ne(M.arguments);break}}function jr(M,He,Nt){let Pn=pI(M)?tn():void 0;Vt(M.expression,Pn||He,Nt),Pn&&(m=pt(Pn)),Kn(Hn,M,He,Nt),mI(M)&&($n(He,ui(32,m,M)),$n(Nt,ui(64,m,M)))}function ei(M){if(An(M)){let He=tn();jr(M,He,He),m=pt(He)}else jr(M,A,w)}function Kr(M){Jl(M)?ei(M):Le(M)}function Si(M){Jl(M)?ei(M):Le(M)}function Ja(M){if(Jl(M))ei(M);else{let He=vs(M.expression);He.kind===215||He.kind===216?(Ne(M.typeArguments),Ne(M.arguments),ft(M.expression)):(Le(M),M.expression.kind===106&&(m=gr(m,M)))}if(M.expression.kind===208){let He=M.expression;Re(He.name)&&Qt(He.expression)&&jH(He.name)&&(m=Pi(256,m,M))}}function Za(M){f&&(f.nextContainer=M),f=M}function Fa(M,He,Nt){switch(o.kind){case 264:return Pe(M,He,Nt);case 308:return xi(M,He,Nt);case 228:case 260:return Hi(M,He,Nt);case 263:return ke(o.symbol.exports,o.symbol,M,He,Nt);case 184:case 325:case 207:case 261:case 289:return ke(o.symbol.members,o.symbol,M,He,Nt);case 181:case 182:case 176:case 177:case 326:case 178:case 171:case 170:case 173:case 174:case 175:case 259:case 215:case 216:case 320:case 172:case 262:case 197:return o.locals&&L.assertNode(o,Qp),ke(o.locals,void 0,M,He,Nt)}}function Hi(M,He,Nt){return Ca(M)?ke(o.symbol.exports,o.symbol,M,He,Nt):ke(o.symbol.members,o.symbol,M,He,Nt)}function xi(M,He,Nt){return Lc(e)?Pe(M,He,Nt):ke(e.locals,void 0,M,He,Nt)}function Nr(M){let He=Li(M)?M:zr(M.body,Tp);return!!He&&He.statements.some(Nt=>Il(Nt)||pc(Nt))}function Fo(M){M.flags&16777216&&!Nr(M)?M.flags|=64:M.flags&=-65}function Qr(M){if(Fo(M),lu(M))if(Mr(M,1)&&ht(M,_.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible),uH(M))Wi(M);else{let He;if(M.name.kind===10){let{text:Pn}=M.name;He=n2(Pn),He===void 0&&ht(M.name,_.Pattern_0_can_have_at_most_one_Asterisk_character,Pn)}let Nt=Fa(M,512,110735);e.patternAmbientModules=Sn(e.patternAmbientModules,He&&!Ta(He)?{pattern:He,symbol:Nt}:void 0)}else{let He=Wi(M);if(He!==0){let{symbol:Nt}=M;Nt.constEnumOnlyModule=!(Nt.flags&304)&&He===2&&Nt.constEnumOnlyModule!==!1}}}function Wi(M){let He=Gh(M),Nt=He!==0;return Fa(M,Nt?512:1024,Nt?110735:0),He}function gn(M){let He=ge(131072,Ve(M));X(He,M,131072);let Nt=ge(2048,\"__type\");X(Nt,M,2048),Nt.members=Ua(),Nt.members.set(He.escapedName,He)}function Ki(M){return mc(M,4096,\"__object\")}function kc(M){return mc(M,4096,\"__jsxAttributes\")}function Ps(M,He,Nt){return Fa(M,He,Nt)}function mc(M,He,Nt){let Pn=ge(He,Nt);return He&106508&&(Pn.parent=o.symbol),X(Pn,M,He),Pn}function xc(M,He,Nt){switch(l.kind){case 264:Pe(M,He,Nt);break;case 308:if(kd(o)){Pe(M,He,Nt);break}default:L.assertNode(l,Qp),l.locals||(l.locals=Ua(),Za(l)),ke(l.locals,void 0,M,He,Nt)}}function hc(){if(!d)return;let M=o,He=f,Nt=l,Pn=i,la=m;for(let oa of d){let be=oa.parent.parent;o=jn(be.parent,mt=>!!(u_e(mt)&1))||e,l=tm(be)||e,m=zT({flags:2}),i=oa,ft(oa.typeExpression);let De=sa(oa);if((vO(oa)||!oa.fullName)&&De&&LR(De.parent)){let mt=Vr(De.parent);if(mt){Ln(e.symbol,De.parent,mt,!!jn(De,Zt=>br(Zt)&&Zt.name.escapedText===\"prototype\"),!1);let St=o;switch(tR(De.parent)){case 1:case 2:kd(e)?o=e:o=void 0;break;case 4:o=De.parent.expression;break;case 3:o=De.parent.expression.name;break;case 5:o=$0(e,De.parent.expression)?e:br(De.parent.expression)?De.parent.expression.name:De.parent.expression;break;case 0:return L.fail(\"Shouldn't have detected typedef or enum on non-assignment declaration\")}o&&Pe(oa,524288,788968),o=St}}else vO(oa)||!oa.fullName||oa.fullName.kind===79?(i=oa.parent,xc(oa,524288,788968)):ft(oa.fullName)}o=M,f=He,l=Nt,i=Pn,m=la}function ro(M){if(!e.parseDiagnostics.length&&!(M.flags&16777216)&&!(M.flags&8388608)&&!Sce(M)){let He=nb(M);if(He===void 0)return;W&&He>=117&&He<=125?e.bindDiagnostics.push(re(M,aa(M),os(M))):He===133?Lc(e)&&O6(M)?e.bindDiagnostics.push(re(M,_.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module,os(M))):M.flags&32768&&e.bindDiagnostics.push(re(M,_.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here,os(M))):He===125&&M.flags&8192&&e.bindDiagnostics.push(re(M,_.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here,os(M)))}}function aa(M){return Zc(M)?_.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode:e.externalModuleIndicator?_.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode:_.Identifier_expected_0_is_a_reserved_word_in_strict_mode}function Co(M){M.escapedText===\"#constructor\"&&(e.parseDiagnostics.length||e.bindDiagnostics.push(re(M,_.constructor_is_a_reserved_word,os(M))))}function gc(M){W&&Ju(M.left)&&Mg(M.operatorToken.kind)&&bl(M,M.left)}function Ll(M){W&&M.variableDeclaration&&bl(M,M.variableDeclaration.name)}function md(M){if(W&&M.expression.kind===79){let He=w0(e,M.expression);e.bindDiagnostics.push(al(e,He.start,He.length,_.delete_cannot_be_called_on_an_identifier_in_strict_mode))}}function Pc(M){return Re(M)&&(M.escapedText===\"eval\"||M.escapedText===\"arguments\")}function bl(M,He){if(He&&He.kind===79){let Nt=He;if(Pc(Nt)){let Pn=w0(e,He);e.bindDiagnostics.push(al(e,Pn.start,Pn.length,ss(M),vr(Nt)))}}}function ss(M){return Zc(M)?_.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode:e.externalModuleIndicator?_.Invalid_use_of_0_Modules_are_automatically_in_strict_mode:_.Invalid_use_of_0_in_strict_mode}function qs(M){W&&bl(M,M.name)}function Rs(M){return Zc(M)?_.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode:e.externalModuleIndicator?_.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode:_.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5}function As(M){if(r<2&&l.kind!==308&&l.kind!==264&&!SA(l)){let He=w0(e,M);e.bindDiagnostics.push(al(e,He.start,He.length,Rs(M)))}}function jt(M){r<1&&W&&M.numericLiteralFlags&32&&e.bindDiagnostics.push(re(M,_.Octal_literals_are_not_allowed_in_strict_mode))}function yc(M){W&&bl(M,M.operand)}function Ql(M){W&&(M.operator===45||M.operator===46)&&bl(M,M.operand)}function yu(M){W&&ht(M,_.with_statements_are_not_allowed_in_strict_mode)}function se(M){W&&Do(t)>=2&&(bse(M.statement)||Bc(M.statement))&&ht(M.label,_.A_label_is_not_allowed_here)}function ht(M,He,Nt,Pn,la){let oa=Pg(e,M.pos);e.bindDiagnostics.push(al(e,oa.start,oa.length,He,Nt,Pn,la))}function wt(M,He,Nt){K(M,He,He,Nt)}function K(M,He,Nt,Pn){Xe(M,{pos:gT(He,e),end:Nt.end},Pn)}function Xe(M,He,Nt){let Pn=al(e,He.pos,He.end-He.pos,Nt);M?e.bindDiagnostics.push(Pn):e.bindSuggestionDiagnostics=Sn(e.bindSuggestionDiagnostics,{...Pn,category:2})}function ft(M){if(!M)return;go(M,i),ai&&(M.tracingPath=e.path);let He=W;if(ta(M),M.kind>162){let Nt=i;i=M;let Pn=u_e(M);Pn===0?Ye(M):Ie(M,Pn),i=Nt}else{let Nt=i;M.kind===1&&(i=M),Yt(M),i=Nt}W=He}function Yt(M){if(Kd(M))if(Yn(M))for(let He of M.jsDoc)ft(He);else for(let He of M.jsDoc)go(He,M),Zy(He,!1)}function pr(M){if(!W)for(let He of M){if(!B_(He))return;if(yr(He)){W=!0;return}}}function yr(M){let He=k0(e,M.expression);return He==='\"use strict\"'||He===\"'use strict'\"}function ta(M){switch(M.kind){case 79:if(M.flags&2048){let be=M.parent;for(;be&&!Ff(be);)be=be.parent;xc(be,524288,788968);break}case 108:return m&&(ot(M)||i.kind===300)&&(M.flowNode=m),ro(M);case 163:m&&G6(M)&&(M.flowNode=m);break;case 233:case 106:M.flowNode=m;break;case 80:return Co(M);case 208:case 209:let He=M;m&&ct(He)&&(He.flowNode=m),fce(He)&&Ri(He),Yn(He)&&e.commonJsModuleIndicator&&Bm(He)&&!eN(l,\"module\")&&ke(e.locals,void 0,He.expression,134217729,111550);break;case 223:switch(ic(M)){case 1:hd(M);break;case 2:vc(M);break;case 3:Ze(M.left,M);break;case 6:io(M);break;case 4:ye(M);break;case 5:let be=M.left.expression;if(Yn(M)&&Re(be)){let De=eN(l,be.escapedText);if(N6(De?.valueDeclaration)){ye(M);break}}xt(M);break;case 0:break;default:L.fail(\"Unknown binary expression special property assignment kind\")}return gc(M);case 295:return Ll(M);case 217:return md(M);case 8:return jt(M);case 222:return yc(M);case 221:return Ql(M);case 251:return yu(M);case 253:return se(M);case 194:g=!0;return;case 179:break;case 165:return Fd(M);case 166:return Zl(M);case 257:return gd(M);case 205:return M.flowNode=m,gd(M);case 169:case 168:return Go(M);case 299:case 300:return Io(M,4,0);case 302:return Io(M,8,900095);case 176:case 177:case 178:return Fa(M,131072,0);case 171:case 170:return Io(M,8192|(M.questionToken?16777216:0),s_(M)?0:103359);case 259:return Md(M);case 173:return Fa(M,16384,0);case 174:return Io(M,32768,46015);case 175:return Io(M,65536,78783);case 181:case 320:case 326:case 182:return gn(M);case 184:case 325:case 197:return Ka(M);case 335:return Qe(M);case 207:return Ki(M);case 215:case 216:return zf(M);case 210:switch(ic(M)){case 7:return At(M);case 8:return Ws(M);case 9:return ee(M);case 0:break;default:return L.fail(\"Unknown call expression assignment declaration kind\")}Yn(M)&&Bu(M);break;case 228:case 260:return W=!0,Pd(M);case 261:return xc(M,64,788872);case 262:return xc(M,524288,788968);case 263:return Dc(M);case 264:return Qr(M);case 289:return kc(M);case 288:return Ps(M,4,0);case 268:case 271:case 273:case 278:return Fa(M,2097152,2097152);case 267:return Uc(M);case 270:return $o(M);case 275:return Gu(M);case 274:return Hs(M);case 308:return pr(M.statements),vo();case 238:if(!SA(M.parent))return;case 265:return pr(M.statements);case 344:if(M.parent.kind===326)return Zl(M);if(M.parent.kind!==325)break;case 351:let la=M,oa=la.isBracketed||la.typeExpression&&la.typeExpression.type.kind===319?16777220:4;return Fa(la,oa,0);case 349:case 341:case 343:return(d||(d=[])).push(M);case 342:return ft(M.typeExpression)}}function Go(M){let He=Id(M),Nt=He?98304:4,Pn=He?13247:0;return Io(M,Nt|(M.questionToken?16777216:0),Pn)}function Ka(M){return mc(M,2048,\"__type\")}function vo(){if(Fo(e),Lc(e))ka();else if(Mf(e)){ka();let M=e.symbol;ke(e.symbol.exports,e.symbol,e,4,67108863),e.symbol=M}}function ka(){mc(e,512,`\"${ld(e.fileName)}\"`)}function Hs(M){if(!o.symbol||!o.symbol.exports)mc(M,111551,Ve(M));else{let He=zA(M)?2097152:4,Nt=ke(o.symbol.exports,o.symbol,M,He,67108863);M.isExportEquals&&rR(Nt,M)}}function Uc(M){vt(M.modifiers)&&e.bindDiagnostics.push(re(M,_.Modifiers_cannot_appear_here));let He=Li(M.parent)?Lc(M.parent)?M.parent.isDeclarationFile?void 0:_.Global_module_exports_may_only_appear_in_declaration_files:_.Global_module_exports_may_only_appear_in_module_files:_.Global_module_exports_may_only_appear_at_top_level;He?e.bindDiagnostics.push(re(M,He)):(e.symbol.globalExports=e.symbol.globalExports||Ua(),ke(e.symbol.globalExports,e.symbol,M,2097152,2097152))}function Gu(M){!o.symbol||!o.symbol.exports?mc(M,8388608,Ve(M)):M.exportClause?qm(M.exportClause)&&(go(M.exportClause,M),ke(o.symbol.exports,o.symbol,M.exportClause,2097152,2097152)):ke(o.symbol.exports,o.symbol,M,8388608,0)}function $o(M){M.name&&Fa(M,2097152,2097152)}function jo(M){return e.externalModuleIndicator&&e.externalModuleIndicator!==!0?!1:(e.commonJsModuleIndicator||(e.commonJsModuleIndicator=M,e.externalModuleIndicator||ka()),!0)}function Ws(M){if(!jo(M))return;let He=Cs(M.arguments[0],void 0,(Nt,Pn)=>(Pn&&X(Pn,Nt,67110400),Pn));He&&ke(He.exports,He,M,1048580,0)}function hd(M){if(!jo(M))return;let He=Cs(M.left.expression,void 0,(Nt,Pn)=>(Pn&&X(Pn,Nt,67110400),Pn));if(He){let Pn=pR(M.right)&&(TT(M.left.expression)||Bm(M.left.expression))?2097152:1048580;go(M.left,M),ke(He.exports,He,M.left,Pn,0)}}function vc(M){if(!jo(M))return;let He=Qw(M.right);if(dW(He)||o===e&&$0(e,He))return;if(rs(He)&&Ji(He.properties,xf)){mn(He.properties,nf);return}let Nt=zA(M)?2097152:1049092,Pn=ke(e.symbol.exports,e.symbol,M,Nt|67108864,0);rR(Pn,M)}function nf(M){ke(e.symbol.exports,e.symbol,M,69206016,0)}function ye(M){if(L.assert(Yn(M)),ar(M)&&br(M.left)&&pi(M.left.name)||br(M)&&pi(M.name))return;let Nt=Ku(M,!1,!1);switch(Nt.kind){case 259:case 215:let Pn=Nt.symbol;if(ar(Nt.parent)&&Nt.parent.operatorToken.kind===63){let be=Nt.parent.left;ST(be)&&ub(be.expression)&&(Pn=Qo(be.expression.expression,s))}Pn&&Pn.valueDeclaration&&(Pn.members=Pn.members||Ua(),Xy(M)?Et(M,Pn,Pn.members):ke(Pn.members,Pn,M,67108868,0),X(Pn,Pn.valueDeclaration,32));break;case 173:case 169:case 171:case 174:case 175:case 172:let la=Nt.parent,oa=Ca(Nt)?la.symbol.exports:la.symbol.members;Xy(M)?Et(M,la.symbol,oa):ke(oa,la.symbol,M,67108868,0,!0);break;case 308:if(Xy(M))break;Nt.commonJsModuleIndicator?ke(Nt.symbol.exports,Nt.symbol,M,1048580,0):Fa(M,1,111550);break;default:L.failBadSyntaxKind(Nt)}}function Et(M,He,Nt){ke(Nt,He,M,4,0,!0,!0),bn(M,He)}function bn(M,He){He&&(He.assignmentDeclarationMembers||(He.assignmentDeclarationMembers=new Map)).set(zo(M),M)}function Ri(M){M.expression.kind===108?ye(M):ST(M)&&M.parent.parent.kind===308&&(ub(M.expression)?Ze(M,M.parent):qt(M))}function io(M){go(M.left,M),go(M.right,M),gi(M.left.expression,M.left,!1,!0)}function ee(M){let He=Qo(M.arguments[0].expression);He&&He.valueDeclaration&&X(He,He.valueDeclaration,32),mr(M,He,!0)}function Ze(M,He){let Nt=M.expression,Pn=Nt.expression;go(Pn,Nt),go(Nt,M),go(M,He),gi(Pn,M,!0,!0)}function At(M){let He=Qo(M.arguments[0]),Nt=M.parent.parent.kind===308;He=Ln(He,M.arguments[0],Nt,!1,!1),mr(M,He,!1)}function xt(M){var He;let Nt=Qo(M.left.expression,o)||Qo(M.left.expression,l);if(!Yn(M)&&!_ce(Nt))return;let Pn=$I(M.left);if(!(Re(Pn)&&((He=eN(o,Pn.escapedText))==null?void 0:He.flags)&2097152))if(go(M.left,M),go(M.right,M),Re(M.left.expression)&&o===e&&$0(e,M.left.expression))hd(M);else if(Xy(M)){mc(M,67108868,\"__computed\");let la=Ln(Nt,M.left.expression,Vr(M.left),!1,!1);bn(M,la)}else qt(Ga(M.left,cS))}function qt(M){L.assert(!Re(M)),go(M.expression,M),gi(M.expression,M,!1,!1)}function Ln(M,He,Nt,Pn,la){return M?.flags&2097152||(Nt&&!Pn&&(M=Cs(He,M,(De,mt,St)=>{if(mt)return X(mt,De,67110400),mt;{let Zt=St?St.exports:e.jsGlobalAugmentations||(e.jsGlobalAugmentations=Ua());return ke(Zt,St,De,67110400,110735)}})),la&&M&&M.valueDeclaration&&X(M,M.valueDeclaration,32)),M}function mr(M,He,Nt){if(!He||!Ea(He))return;let Pn=Nt?He.members||(He.members=Ua()):He.exports||(He.exports=Ua()),la=0,oa=0;Ds(oS(M))?(la=8192,oa=103359):Pa(M)&&sS(M)&&(vt(M.arguments[2].properties,be=>{let De=sa(be);return!!De&&Re(De)&&vr(De)===\"set\"})&&(la|=65540,oa|=78783),vt(M.arguments[2].properties,be=>{let De=sa(be);return!!De&&Re(De)&&vr(De)===\"get\"})&&(la|=32772,oa|=46015)),la===0&&(la=4,oa=0),ke(Pn,He,M,la|67108864,oa&-67108865)}function Vr(M){return ar(M.parent)?bo(M.parent).parent.kind===308:M.parent.parent.kind===308}function gi(M,He,Nt,Pn){let la=Qo(M,o)||Qo(M,l),oa=Vr(He);la=Ln(la,He.expression,oa,Nt,Pn),mr(He,la,Nt)}function Ea(M){if(M.flags&1072)return!0;let He=M.valueDeclaration;if(He&&Pa(He))return!!oS(He);let Nt=He?wi(He)?He.initializer:ar(He)?He.right:br(He)&&ar(He.parent)?He.parent.right:void 0:void 0;if(Nt=Nt&&Qw(Nt),Nt){let Pn=ub(wi(He)?He.name:ar(He)?He.left:He);return!!ob(ar(Nt)&&(Nt.operatorToken.kind===56||Nt.operatorToken.kind===60)?Nt.right:Nt,Pn)}return!1}function bo(M){for(;ar(M.parent);)M=M.parent;return M.parent}function Qo(M,He=o){if(Re(M))return eN(He,M.escapedText);{let Nt=Qo(M.expression);return Nt&&Nt.exports&&Nt.exports.get(wh(M))}}function Cs(M,He,Nt){if($0(e,M))return e.symbol;if(Re(M))return Nt(M,Qo(M),He);{let Pn=Cs(M.expression,He,Nt),la=eR(M);return pi(la)&&L.fail(\"unexpected PrivateIdentifier\"),Nt(la,Pn&&Pn.exports&&Pn.exports.get(wh(M)),Pn)}}function Bu(M){!e.commonJsModuleIndicator&&qu(M,!1)&&jo(M)}function Pd(M){if(M.kind===260)xc(M,32,899503);else{let la=M.name?M.name.escapedText:\"__class\";mc(M,32,la),M.name&&$.add(M.name.escapedText)}let{symbol:He}=M,Nt=ge(4194308,\"prototype\"),Pn=He.exports.get(Nt.escapedName);Pn&&(M.name&&go(M.name,M),e.bindDiagnostics.push(re(Pn.declarations[0],_.Duplicate_identifier_0,fc(Nt)))),He.exports.set(Nt.escapedName,Nt),Nt.parent=He}function Dc(M){return R0(M)?xc(M,128,899967):xc(M,256,899327)}function gd(M){if(W&&bl(M,M.name),!La(M.name)){let He=M.kind===257?M:M.parent.parent;Yn(M)&&$s(t)!==100&&N0(He)&&!x0(M)&&!(wg(M)&1)?Fa(M,2097152,2097152):sH(M)?xc(M,2,111551):CT(M)?Fa(M,1,111551):Fa(M,1,111550)}}function Zl(M){if(!(M.kind===344&&o.kind!==326)&&(W&&!(M.flags&16777216)&&bl(M,M.name),La(M.name)?mc(M,1,\"__\"+M.parent.parameters.indexOf(M)):Fa(M,1,111551),Ad(M,M.parent))){let He=M.parent.parent;ke(He.symbol.members,He.symbol,M,4|(M.questionToken?16777216:0),0)}}function Md(M){!e.isDeclarationFile&&!(M.flags&16777216)&&qA(M)&&(q|=2048),qs(M),W?(As(M),xc(M,16,110991)):Fa(M,16,110991)}function zf(M){!e.isDeclarationFile&&!(M.flags&16777216)&&qA(M)&&(q|=2048),m&&(M.flowNode=m),qs(M);let He=M.name?M.name.escapedText:\"__function\";return mc(M,16,He)}function Io(M,He,Nt){return!e.isDeclarationFile&&!(M.flags&16777216)&&qA(M)&&(q|=2048),m&&D6(M)&&(M.flowNode=m),Xy(M)?mc(M,He,\"__computed\"):Fa(M,He,Nt)}function Jf(M){let He=jn(M,Nt=>Nt.parent&&m2(Nt.parent)&&Nt.parent.extendsType===Nt);return He&&He.parent}function Fd(M){var He,Nt;if(H_(M.parent)){let Pn=J6(M.parent);Pn?(L.assertNode(Pn,Qp),(He=Pn.locals)!=null||(Pn.locals=Ua()),ke(Pn.locals,void 0,M,262144,526824)):Fa(M,262144,526824)}else if(M.parent.kind===192){let Pn=Jf(M.parent);Pn?(L.assertNode(Pn,Qp),(Nt=Pn.locals)!=null||(Pn.locals=Ua()),ke(Pn.locals,void 0,M,262144,526824)):mc(M,262144,Ve(M))}else Fa(M,262144,526824)}function E_(M){let He=Gh(M);return He===1||He===2&&U0(t)}function Y_(M){if(!(m.flags&1))return!1;if(m===fe&&(Nw(M)&&M.kind!==239||M.kind===260||M.kind===264&&E_(M))&&(m=Z,!t.allowUnreachableCode)){let Nt=Tle(t)&&!(M.flags&16777216)&&(!Bc(M)||!!(G_(M.declarationList)&3)||M.declarationList.declarations.some(Pn=>!!Pn.initializer));rPe(M,(Pn,la)=>K(Nt,Pn,la,_.Unreachable_code_detected))}return!0}}function rPe(e,t){if(ca(e)&&l_e(e)&&Va(e.parent)){let{statements:r}=e.parent,i=PW(r,e);PU(i,l_e,(o,s)=>t(i[o],i[s-1]))}else t(e,e)}function l_e(e){return!Jc(e)&&!iPe(e)&&!hb(e)&&!(Bc(e)&&!(G_(e)&3)&&e.declarationList.declarations.some(t=>!t.initializer))}function iPe(e){switch(e.kind){case 261:case 262:return!0;case 264:return Gh(e)!==1;case 263:return Mr(e,2048);default:return!1}}function $0(e,t){let r=0,i=HU();for(i.enqueue(t);!i.isEmpty()&&r<100;){if(r++,t=i.dequeue(),TT(t)||Bm(t))return!0;if(Re(t)){let o=eN(e,t.escapedText);if(o&&o.valueDeclaration&&wi(o.valueDeclaration)&&o.valueDeclaration.initializer){let s=o.valueDeclaration.initializer;i.enqueue(s),Iu(s,!0)&&(i.enqueue(s.left),i.enqueue(s.right))}}}return!1}function u_e(e){switch(e.kind){case 228:case 260:case 263:case 207:case 184:case 325:case 289:return 1;case 261:return 65;case 264:case 262:case 197:case 178:return 33;case 308:return 37;case 174:case 175:case 171:if(D6(e))return 173;case 173:case 259:case 170:case 176:case 326:case 320:case 181:case 177:case 182:case 172:return 45;case 215:case 216:return 61;case 265:return 4;case 169:return e.initializer?4:0;case 295:case 245:case 246:case 247:case 266:return 34;case 238:return Ia(e.parent)||oc(e.parent)?0:34}return 0}function eN(e,t){var r,i,o,s,l;let f=(i=(r=zr(e,Qp))==null?void 0:r.locals)==null?void 0:i.get(t);if(f)return(o=f.exportSymbol)!=null?o:f;if(Li(e)&&e.jsGlobalAugmentations&&e.jsGlobalAugmentations.has(t))return e.jsGlobalAugmentations.get(t);if($p(e))return(l=(s=e.symbol)==null?void 0:s.exports)==null?void 0:l.get(t)}var sK,d_e,aPe=gt({\"src/compiler/binder.ts\"(){\"use strict\";fa(),E0(),sK=(e=>(e[e.NonInstantiated=0]=\"NonInstantiated\",e[e.Instantiated=1]=\"Instantiated\",e[e.ConstEnumOnly=2]=\"ConstEnumOnly\",e))(sK||{}),d_e=nPe()}});function f_e(e,t,r,i,o,s,l,f,d,g){return m;function m(v=()=>!0){let S=[],x=[];return{walkType:$=>{try{return A($),{visitedTypes:H1(S),visitedSymbols:H1(x)}}finally{Om(S),Om(x)}},walkSymbol:$=>{try{return ie($),{visitedTypes:H1(S),visitedSymbols:H1(x)}}finally{Om(S),Om(x)}}};function A($){if(!(!$||S[$.id]||(S[$.id]=$,ie($.symbol)))){if($.flags&524288){let Z=$,U=Z.objectFlags;U&4&&w($),U&32&&q($),U&3&&Y($),U&24&&R(Z)}$.flags&262144&&C($),$.flags&3145728&&P($),$.flags&4194304&&F($),$.flags&8388608&&B($)}}function w($){A($.target),mn(g($),A)}function C($){A(f($))}function P($){mn($.types,A)}function F($){A($.type)}function B($){A($.objectType),A($.indexType),A($.constraint)}function q($){A($.typeParameter),A($.constraintType),A($.templateType),A($.modifiersType)}function W($){let fe=t($);fe&&A(fe.type),mn($.typeParameters,A);for(let Z of $.parameters)ie(Z);A(e($)),A(r($))}function Y($){R($),mn($.typeParameters,A),mn(i($),A),A($.thisType)}function R($){let fe=o($);for(let Z of fe.indexInfos)A(Z.keyType),A(Z.type);for(let Z of fe.callSignatures)W(Z);for(let Z of fe.constructSignatures)W(Z);for(let Z of fe.properties)ie(Z)}function ie($){if(!$)return!1;let fe=$a($);if(x[fe])return!1;if(x[fe]=$,!v($))return!0;let Z=s($);return A(Z),$.exports&&$.exports.forEach(ie),mn($.declarations,U=>{if(U.type&&U.type.kind===183){let re=U.type,le=l(d(re.exprName));ie(le)}}),!1}}}var oPe=gt({\"src/compiler/symbolWalker.ts\"(){\"use strict\";fa()}});function oF({importModuleSpecifierPreference:e,importModuleSpecifierEnding:t},r,i,o){let s=l();return{relativePreference:o!==void 0?fl(o)?0:1:e===\"relative\"?0:e===\"non-relative\"?1:e===\"project-relative\"?3:2,getAllowedEndingsInPreferredOrder:f=>{if((f??i.impliedNodeFormat)===99)return VL(r,i.fileName)?[3,2]:[2];if($s(r)===1)return[1,2];switch(s){case 2:return[2,0,1];case 3:return[3,0,2,1];case 1:return[1,0,2];case 0:return[0,1,2];default:L.assertNever(s)}}};function l(){if(o!==void 0){if(ES(o))return 2;if(Oc(o,\"/index\"))return 1}return OW(t,i.impliedNodeFormat,r,i)}}function sPe(e,t,r,i,o,s,l={}){let f=__e(e,t,r,i,o,oF({},e,t,s),{},l);if(f!==s)return f}function sF(e,t,r,i,o,s={}){return __e(e,t,r,i,o,oF({},e,t),{},s)}function cPe(e,t,r,i,o,s={}){let l=cK(t.path,i),f=E_e(t.path,r,i,o,s);return ks(f,d=>lK(d,l,t,i,e,o,!0,s.overrideImportMode))}function __e(e,t,r,i,o,s,l,f={}){let d=cK(r,o),g=E_e(r,i,o,l,f);return ks(g,m=>lK(m,d,t,o,e,l,void 0,f.overrideImportMode))||g_e(i,d,e,o,f.overrideImportMode||t.impliedNodeFormat,s)}function lPe(e,t,r,i,o={}){return p_e(e,t,r,i,o)[0]}function p_e(e,t,r,i,o={}){var s;let l=m6(e);if(!l)return Je;let f=(s=r.getModuleSpecifierCache)==null?void 0:s.call(r),d=f?.get(t.path,l.path,i,o);return[d?.moduleSpecifiers,l,d?.modulePaths,f]}function m_e(e,t,r,i,o,s,l={}){return h_e(e,t,r,i,o,s,l).moduleSpecifiers}function h_e(e,t,r,i,o,s,l={}){let f=!1,d=dPe(e,t);if(d)return{moduleSpecifiers:[d],computedWithoutCache:f};let[g,m,v,S]=p_e(e,i,o,s,l);if(g)return{moduleSpecifiers:g,computedWithoutCache:f};if(!m)return{moduleSpecifiers:Je,computedWithoutCache:f};f=!0,v||(v=T_e(i.path,m.originalFileName,o));let x=uPe(v,r,i,o,s,l);return S?.set(i.path,m.path,s,l,v,x),{moduleSpecifiers:x,computedWithoutCache:f}}function uPe(e,t,r,i,o,s={}){let l=cK(r.path,i),f=oF(o,t,r),d=mn(e,A=>mn(i.getFileIncludeReasons().get(Ts(A.path,i.getCurrentDirectory(),l.getCanonicalFileName)),w=>{if(w.kind!==3||w.file!==r.path||r.impliedNodeFormat&&r.impliedNodeFormat!==aq(r,w.index))return;let C=GF(r,w.index).text;return f.relativePreference!==1||!Jd(C)?C:void 0}));if(d)return[d];let g=vt(e,A=>A.isInNodeModules),m,v,S,x;for(let A of e){let w=A.isInNodeModules?lK(A,l,r,i,t,o,void 0,s.overrideImportMode):void 0;if(m=Sn(m,w),w&&A.isRedirect)return m;if(!w){let C=g_e(A.path,l,t,i,s.overrideImportMode||r.impliedNodeFormat,f,A.isRedirect);if(!C)continue;A.isRedirect?S=Sn(S,C):cj(C)?v=Sn(v,C):(!g||A.isInNodeModules)&&(x=Sn(x,C))}}return v?.length?v:S?.length?S:m?.length?m:L.checkDefined(x)}function cK(e,t){let r=Dl(t.useCaseSensitiveFileNames?t.useCaseSensitiveFileNames():!0),i=ni(e);return{getCanonicalFileName:r,importingSourceFileName:e,sourceDirectory:i}}function g_e(e,t,r,i,o,{getAllowedEndingsInPreferredOrder:s,relativePreference:l},f){let{baseUrl:d,paths:g,rootDirs:m}=r;if(f&&!g)return;let{sourceDirectory:v,getCanonicalFileName:S}=t,x=s(o),A=m&&fPe(m,e,v,S,x,r)||jL(S0(Xp(v,e,S)),x,r);if(!d&&!g||l===0)return f?void 0:A;let w=_a(ZH(r,i)||d,i.getCurrentDirectory()),C=C_e(e,w,S);if(!C)return f?void 0:A;let P=g&&S_e(C,g,x,i,r);if(f)return P;let F=P===void 0&&d!==void 0?jL(C,x,r):P;if(!F)return A;if(l===1&&!Jd(F))return F;if(l===3&&!Jd(F)){let B=r.configFilePath?Ts(ni(r.configFilePath),i.getCurrentDirectory(),t.getCanonicalFileName):t.getCanonicalFileName(i.getCurrentDirectory()),q=Ts(e,B,S),W=na(v,B),Y=na(q,B);if(W&&!Y||!W&&Y)return F;let R=v_e(i,ni(q));return v_e(i,v)!==R?F:A}return I_e(F)||tN(A)<tN(F)?A:F}function tN(e){let t=0;for(let r=na(e,\"./\")?2:0;r<e.length;r++)e.charCodeAt(r)===47&&t++;return t}function y_e(e,t){return g0(t.isRedirect,e.isRedirect)||BR(e.path,t.path)}function v_e(e,t){return e.getNearestAncestorDirectoryWithPackageJson?e.getNearestAncestorDirectoryWithPackageJson(t):!!Th(t,r=>e.fileExists(vi(r,\"package.json\"))?!0:void 0)}function b_e(e,t,r,i,o){var s;let l=lb(r),f=r.getCurrentDirectory(),d=r.isSourceOfProjectReferenceRedirect(t)?r.getProjectReferenceRedirect(t):void 0,g=Ts(t,f,l),m=r.redirectTargetsMap.get(g)||Je,S=[...d?[d]:Je,t,...m].map(P=>_a(P,f)),x=!Ji(S,sL);if(!i){let P=mn(S,F=>!(x&&sL(F))&&o(F,d===F));if(P)return P}let A=(s=r.getSymlinkCache)==null?void 0:s.call(r).getSymlinkedDirectoriesByRealpath(),w=_a(t,f);return A&&Th(ni(w),P=>{let F=A.get(cu(Ts(P,f,l)));if(F)return fj(e,P,l)?!1:mn(S,B=>{if(!fj(B,P,l))return;let q=Xp(P,B,l);for(let W of F){let Y=Fy(W,q),R=o(Y,B===d);if(x=!0,R)return R}})})||(i?mn(S,P=>x&&sL(P)?void 0:o(P,P===d)):void 0)}function E_e(e,t,r,i,o={}){var s;let l=Ts(t,r.getCurrentDirectory(),lb(r)),f=(s=r.getModuleSpecifierCache)==null?void 0:s.call(r);if(f){let g=f.get(e,l,i,o);if(g?.modulePaths)return g.modulePaths}let d=T_e(e,t,r);return f&&f.setModulePaths(e,l,i,o,d),d}function T_e(e,t,r){let i=lb(r),o=new Map,s=!1;b_e(e,t,r,!0,(f,d)=>{let g=JS(f);o.set(f,{path:i(f),isRedirect:d,isInNodeModules:g}),s=s||g});let l=[];for(let f=ni(e);o.size!==0;){let d=cu(f),g;o.forEach(({path:v,isRedirect:S,isInNodeModules:x},A)=>{na(v,d)&&((g||(g=[])).push({path:A,isRedirect:S,isInNodeModules:x}),o.delete(A))}),g&&(g.length>1&&g.sort(y_e),l.push(...g));let m=ni(f);if(m===f)break;f=m}if(o.size){let f=lo(o.values());f.length>1&&f.sort(y_e),l.push(...f)}return l}function dPe(e,t){var r;let i=(r=e.declarations)==null?void 0:r.find(l=>lH(l)&&(!D0(l)||!fl(l_(l.name))));if(i)return i.name.text;let s=Zi(e.declarations,l=>{var f,d,g,m;if(!Tc(l))return;let v=w(l);if(!((f=v?.parent)!=null&&f.parent&&Tp(v.parent)&&lu(v.parent.parent)&&Li(v.parent.parent.parent)))return;let S=(m=(g=(d=v.parent.parent.symbol.exports)==null?void 0:d.get(\"export=\"))==null?void 0:g.valueDeclaration)==null?void 0:m.expression;if(!S)return;let x=t.getSymbolAtLocation(S);if(!x)return;if((x?.flags&2097152?t.getAliasedSymbol(x):x)===l.symbol)return v.parent.parent;function w(C){for(;C.flags&4;)C=C.parent;return C}})[0];if(s)return s.name.text}function S_e(e,t,r,i,o){for(let l in t)for(let f of t[l]){let d=So(f),g=d.indexOf(\"*\"),m=r.map(v=>({ending:v,value:jL(e,[v],o)}));if(Hm(d)&&m.push({ending:void 0,value:e}),g!==-1){let v=d.substring(0,g),S=d.substring(g+1);for(let{ending:x,value:A}of m)if(A.length>=v.length+S.length&&na(A,v)&&Oc(A,S)&&s({ending:x,value:A})){let w=A.substring(v.length,A.length-S.length);return l.replace(\"*\",w)}}else if(vt(m,v=>v.ending!==0&&d===v.value)||vt(m,v=>v.ending===0&&d===v.value&&s(v)))return l}function s({ending:l,value:f}){return l!==0||f===jL(e,[l],o,i)}}function cF(e,t,r,i,o,s,l=0){if(typeof o==\"string\"){let f=_a(vi(r,o),void 0),d=GR(t)?ld(t)+lF(t,e):void 0;switch(l){case 0:if(cT(t,f)===0||d&&cT(d,f)===0)return{moduleFileToTry:i};break;case 1:if(Gy(f,t)){let S=Xp(f,t,!1);return{moduleFileToTry:_a(vi(vi(i,o),S),void 0)}}break;case 2:let g=f.indexOf(\"*\"),m=f.slice(0,g),v=f.slice(g+1);if(na(t,m)&&Oc(t,v)){let S=t.slice(m.length,t.length-v.length);return{moduleFileToTry:i.replace(\"*\",S)}}if(d&&na(d,m)&&Oc(d,v)){let S=d.slice(m.length,d.length-v.length);return{moduleFileToTry:i.replace(\"*\",S)}}break}}else{if(Array.isArray(o))return mn(o,f=>cF(e,t,r,i,f,s));if(typeof o==\"object\"&&o!==null){if(nF(o))return mn(bh(o),f=>{let d=_a(vi(i,f),void 0),g=Oc(f,\"/\")?1:jl(f,\"*\")?2:0;return cF(e,t,r,d,o[f],s,g)});for(let f of bh(o))if(f===\"default\"||s.indexOf(f)>=0||QO(s,f)){let d=o[f],g=cF(e,t,r,i,d,s);if(g)return g}}}}function fPe(e,t,r,i,o,s){let l=x_e(t,e,i);if(l===void 0)return;let f=x_e(r,e,i),d=Uo(f,m=>on(l,v=>S0(Xp(m,v,i)))),g=WU(d,BR);if(g)return jL(g,o,s)}function lK({path:e,isRedirect:t},{getCanonicalFileName:r,sourceDirectory:i},o,s,l,f,d,g){if(!s.fileExists||!s.readFile)return;let m=jW(e);if(!m)return;let S=oF(f,l,o).getAllowedEndingsInPreferredOrder(),x=e,A=!1;if(!d){let q=m.packageRootIndex,W;for(;;){let{moduleFileToTry:Y,packageRootPath:R,blockedByExports:ie,verbatimFromExports:$}=B(q);if($s(l)!==1){if(ie)return;if($)return Y}if(R){x=R,A=!0;break}if(W||(W=Y),q=e.indexOf(_s,q+1),q===-1){x=jL(W,S,l,s);break}}}if(t&&!A)return;let w=s.getGlobalTypingsCacheLocation&&s.getGlobalTypingsCacheLocation(),C=r(x.substring(0,m.topLevelNodeModulesIndex));if(!(na(i,C)||w&&na(r(w),C)))return;let P=x.substring(m.topLevelPackageNameIndex+1),F=ZO(P);return $s(l)===1&&F===P?void 0:F;function B(q){var W,Y;let R=e.substring(0,q),ie=vi(R,\"package.json\"),$=e,fe=!1,Z=(Y=(W=s.getPackageJsonInfoCache)==null?void 0:W.call(s))==null?void 0:Y.getPackageJsonInfo(ie);if(typeof Z==\"object\"||Z===void 0&&s.fileExists(ie)){let U=Z?.contents.packageJsonContent||JSON.parse(s.readFile(ie)),re=g||o.impliedNodeFormat;if(xW(l)){let ge=R.substring(m.topLevelPackageNameIndex+1),X=ZO(ge),Ve=P2(l,re===99),we=U.exports?cF(l,e,R,X,U.exports,Ve):void 0;if(we)return{...GR(we.moduleFileToTry)?{moduleFileToTry:ld(we.moduleFileToTry)+lF(we.moduleFileToTry,l)}:we,verbatimFromExports:!0};if(U.exports)return{moduleFileToTry:e,blockedByExports:!0}}let le=U.typesVersions?q3(U.typesVersions):void 0;if(le){let ge=e.slice(R.length+1),X=S_e(ge,le.paths,S,s,l);X===void 0?fe=!0:$=vi(R,X)}let _e=U.typings||U.types||U.main||\"index.js\";if(Ta(_e)&&!(fe&&NW(g4(le.paths),_e))){let ge=Ts(_e,R,r);if(ld(ge)===ld(r($)))return{packageRootPath:R,moduleFileToTry:$}}}else{let U=r($.substring(m.packageRootIndex+1));if(U===\"index.d.ts\"||U===\"index.js\"||U===\"index.ts\"||U===\"index.tsx\")return{moduleFileToTry:$,packageRootPath:R}}return{moduleFileToTry:$}}}function _Pe(e,t){if(!e.fileExists)return;let r=t_(nL({allowJs:!0},[{extension:\"node\",isMixedContent:!1},{extension:\"json\",isMixedContent:!1,scriptKind:6}]));for(let i of r){let o=t+i;if(e.fileExists(o))return o}}function x_e(e,t,r){return Zi(t,i=>{let o=C_e(e,i,r);return o!==void 0&&I_e(o)?void 0:o})}function jL(e,t,r,i){if($c(e,[\".json\",\".mjs\",\".cjs\"]))return e;let o=ld(e);if(e===o)return e;if($c(e,[\".d.mts\",\".mts\",\".d.cts\",\".cts\"]))return o+uK(e,r);if(!$c(e,[\".d.ts\"])&&$c(e,[\".ts\"])&&jl(e,\".d.\"))return A_e(e);switch(t[0]){case 0:let s=pA(o,\"/index\");return i&&s!==o&&_Pe(i,s)?o:s;case 1:return o;case 2:return o+uK(e,r);case 3:if(Fu(e)){let l=t.findIndex(d=>d===0||d===1),f=t.indexOf(2);return l!==-1&&l<f?o:o+uK(e,r)}return e;default:return L.assertNever(t[0])}}function A_e(e){let t=Hl(e);if(!Oc(e,\".ts\")||!jl(t,\".d.\")||$c(t,[\".d.ts\"]))return;let r=UR(e,\".ts\"),i=r.substring(r.lastIndexOf(\".\"));return r.substring(0,r.indexOf(\".d.\"))+i}function uK(e,t){var r;return(r=lF(e,t))!=null?r:L.fail(`Extension ${jR(e)} is unsupported:: FileName:: ${e}`)}function lF(e,t){let r=Hm(e);switch(r){case\".ts\":case\".d.ts\":return\".js\";case\".tsx\":return t.jsx===1?\".jsx\":\".js\";case\".js\":case\".jsx\":case\".json\":return r;case\".d.mts\":case\".mts\":case\".mjs\":return\".mjs\";case\".d.cts\":case\".cts\":case\".cjs\":return\".cjs\";default:return}}function C_e(e,t,r){let i=Q1(t,e,t,r,!1);return qp(i)?void 0:i}function I_e(e){return na(e,\"..\")}var L_e=gt({\"src/compiler/moduleSpecifiers.ts\"(){\"use strict\";fa()}}),Q0={};Mo(Q0,{countPathComponents:()=>tN,forEachFileNameOfModule:()=>b_e,getModuleSpecifier:()=>sF,getModuleSpecifiers:()=>m_e,getModuleSpecifiersWithCacheInfo:()=>h_e,getNodeModulesPackageName:()=>cPe,tryGetJSExtensionForFile:()=>lF,tryGetModuleSpecifiersFromCache:()=>lPe,tryGetRealFileNameForNonJsDeclarationFileName:()=>A_e,updateModuleSpecifier:()=>sPe});var dK=gt({\"src/compiler/_namespaces/ts.moduleSpecifiers.ts\"(){\"use strict\";L_e()}});function pPe(){this.flags=0}function zo(e){return e.id||(e.id=mK,mK++),e.id}function $a(e){return e.id||(e.id=pK,pK++),e.id}function fK(e,t){let r=Gh(e);return r===1||t&&r===2}function k_e(e){var t=zu(()=>{var n=new Map;return e.getSourceFiles().forEach(a=>{a.resolvedModules&&a.resolvedModules.forEach(({resolvedModule:c})=>{c?.packageId&&n.set(c.packageId.name,c.extension===\".d.ts\"||!!n.get(c.packageId.name))})}),n}),r=[],i=n=>{r.push(n)},o,s=new Set,l,f,d=ml.getSymbolConstructor(),g=ml.getTypeConstructor(),m=ml.getSignatureConstructor(),v=0,S=0,x=0,A=0,w=0,C=0,P,F,B=!1,q=Ua(),W=[1],Y=e.getCompilerOptions(),R=Do(Y),ie=Rl(Y),$=!!Y.experimentalDecorators,fe=MR(Y),Z=wT(Y),U=Uf(Y,\"strictNullChecks\"),re=Uf(Y,\"strictFunctionTypes\"),le=Uf(Y,\"strictBindCallApply\"),_e=Uf(Y,\"strictPropertyInitialization\"),ge=Uf(Y,\"noImplicitAny\"),X=Uf(Y,\"noImplicitThis\"),Ve=Uf(Y,\"useUnknownInCatchVariables\"),we=!!Y.keyofStringsOnly,ke=Y.suppressExcessPropertyErrors?0:8192,Pe=Y.exactOptionalPropertyTypes,Ce=FZe(),Ie=hrt(),Be=Wa(),Ne=Ua(),Le=wo(4,\"undefined\");Le.declarations=[];var Ye=wo(1536,\"globalThis\",8);Ye.exports=Ne,Ye.declarations=[],Ne.set(Ye.escapedName,Ye);var _t=wo(4,\"arguments\"),ct=wo(4,\"require\"),Rt=Y.verbatimModuleSyntax?\"verbatimModuleSyntax\":\"isolatedModules\",We;let qe={getNodeCount:()=>ou(e.getSourceFiles(),(n,a)=>n+a.nodeCount,0),getIdentifierCount:()=>ou(e.getSourceFiles(),(n,a)=>n+a.identifierCount,0),getSymbolCount:()=>ou(e.getSourceFiles(),(n,a)=>n+a.symbolCount,S),getTypeCount:()=>v,getInstantiationCount:()=>x,getRelationCacheSizes:()=>({assignable:Zu.size,identity:td.size,subtype:hm.size,strictSubtype:x_.size}),isUndefinedSymbol:n=>n===Le,isArgumentsSymbol:n=>n===_t,isUnknownSymbol:n=>n===Ht,getMergedSymbol:No,getDiagnostics:HLe,getGlobalDiagnostics:Nnt,getRecursionIdentity:AC,getUnmatchedProperties:lre,getTypeOfSymbolAtLocation:(n,a)=>{let c=ea(a);return c?RYe(n,c):ve},getTypeOfSymbol:zn,getSymbolsOfParameterPropertyDeclaration:(n,a)=>{let c=ea(n,ha);return c===void 0?L.fail(\"Cannot get symbols of a synthetic parameter that cannot be resolved to a parse-tree node.\"):(L.assert(Ad(c,c.parent)),yE(c,Bs(a)))},getDeclaredTypeOfSymbol:gs,getPropertiesOfType:Jo,getPropertyOfType:(n,a)=>ja(n,Bs(a)),getPrivateIdentifierPropertyOfType:(n,a,c)=>{let u=ea(c);if(!u)return;let p=Bs(a),h=JB(p,u);return h?zre(n,h):void 0},getTypeOfPropertyOfType:(n,a)=>Vc(n,Bs(a)),getIndexInfoOfType:(n,a)=>Cm(n,a===0?ae:rt),getIndexInfosOfType:tu,getIndexInfosOfIndexSymbol:one,getSignaturesOfType:xa,getIndexTypeOfType:(n,a)=>fg(n,a===0?ae:rt),getIndexType:n=>Gp(n),getBaseTypes:_o,getBaseTypeOfLiteralType:ky,getWidenedType:Sd,getTypeFromTypeNode:n=>{let a=ea(n,bi);return a?$r(a):ve},getParameterType:P_,getParameterIdentifierNameAtPosition:ZQe,getPromisedTypeOfPromise:wD,getAwaitedType:n=>rT(n),getReturnTypeOfSignature:qo,isNullableType:zB,getNullableType:TB,getNonNullableType:yg,getNonOptionalType:ere,getTypeArguments:Ko,typeToTypeNode:Be.typeToTypeNode,indexInfoToIndexSignatureDeclaration:Be.indexInfoToIndexSignatureDeclaration,signatureToSignatureDeclaration:Be.signatureToSignatureDeclaration,symbolToEntityName:Be.symbolToEntityName,symbolToExpression:Be.symbolToExpression,symbolToNode:Be.symbolToNode,symbolToTypeParameterDeclarations:Be.symbolToTypeParameterDeclarations,symbolToParameterDeclaration:Be.symbolToParameterDeclaration,typeParameterToDeclaration:Be.typeParameterToDeclaration,getSymbolsInScope:(n,a)=>{let c=ea(n);return c?Pnt(c,a):[]},getSymbolAtLocation:n=>{let a=ea(n);return a?Zf(a,!0):void 0},getIndexInfosAtLocation:n=>{let a=ea(n);return a?jnt(a):void 0},getShorthandAssignmentValueSymbol:n=>{let a=ea(n);return a?Hnt(a):void 0},getExportSpecifierLocalTargetSymbol:n=>{let a=ea(n,Mu);return a?Wnt(a):void 0},getExportSymbolOfSymbol(n){return No(n.exportSymbol||n)},getTypeAtLocation:n=>{let a=ea(n);return a?G1(a):ve},getTypeOfAssignmentPattern:n=>{let a=ea(n,vI);return a&&bU(a)||ve},getPropertySymbolOfDestructuringAssignment:n=>{let a=ea(n,Re);return a?znt(a):void 0},signatureToString:(n,a,c,u)=>ne(n,ea(a),c,u),typeToString:(n,a,c)=>Ee(n,ea(a),c),symbolToString:(n,a,c,u)=>E(n,ea(a),c,u),typePredicateToString:(n,a,c)=>kl(n,ea(a),c),writeSignature:(n,a,c,u,p)=>ne(n,ea(a),c,u,p),writeType:(n,a,c,u)=>Ee(n,ea(a),c,u),writeSymbol:(n,a,c,u,p)=>E(n,ea(a),c,u,p),writeTypePredicate:(n,a,c,u)=>kl(n,ea(a),c,u),getAugmentedPropertiesOfType:Wie,getRootSymbols:YLe,getSymbolOfExpando:eU,getContextualType:(n,a)=>{let c=ea(n,ot);if(c)return a&4?Qt(c,()=>Ru(c,a)):Ru(c,a)},getContextualTypeForObjectLiteralElement:n=>{let a=ea(n,Og);return a?Rre(a,void 0):void 0},getContextualTypeForArgumentAtIndex:(n,a)=>{let c=ea(n,rS);return c&&wre(c,a)},getContextualTypeForJsxAttribute:n=>{let a=ea(n,d6);return a&&_Ce(a,void 0)},isContextSensitive:$f,getTypeOfPropertyOfContextualType:eT,getFullyQualifiedName:rh,getResolvedSignature:(n,a,c)=>tn(n,a,c,0),getResolvedSignatureForStringLiteralCompletions:(n,a,c)=>Qt(a,()=>tn(n,c,void 0,32)),getResolvedSignatureForSignatureHelp:(n,a,c)=>zt(n,()=>tn(n,a,c,16)),getExpandedParameters:Txe,hasEffectiveRestParameter:jp,containsArgumentsReference:nne,getConstantValue:n=>{let a=ea(n,tke);return a?zie(a):void 0},isValidPropertyAccess:(n,a)=>{let c=ea(n,dse);return!!c&&dQe(c,Bs(a))},isValidPropertyAccessForCompletions:(n,a,c)=>{let u=ea(n,br);return!!u&&HCe(u,a,c)},getSignatureFromDeclaration:n=>{let a=ea(n,Ia);return a?ip(a):void 0},isImplementationOfOverload:n=>{let a=ea(n,Ia);return a?ZLe(a):void 0},getImmediateAliasedSymbol:Mre,getAliasedSymbol:wc,getEmitResolver:cC,getExportsOfModule:sy,getExportsAndPropertiesOfModule:C1,forEachExportAndPropertyOfModule:kv,getSymbolWalker:f_e(tKe,Lf,qo,_o,R_,zn,Qf,eu,Yd,Ko),getAmbientModules:oit,getJsxIntrinsicTagNamesAt:W$e,isOptionalParameter:n=>{let a=ea(n,ha);return a?Qk(a):!1},tryGetMemberInModuleExports:(n,a)=>rg(Bs(n),a),tryGetMemberInModuleExportsAndProperties:(n,a)=>of(Bs(n),a),tryFindAmbientModule:n=>tne(n,!0),tryFindAmbientModuleWithoutAugmentations:n=>tne(n,!1),getApparentType:Eu,getUnionType:Gr,isTypeAssignableTo:to,createAnonymousType:ls,createSignature:Am,createSymbol:wo,createIndexInfo:Fp,getAnyType:()=>Se,getStringType:()=>ae,getNumberType:()=>rt,createPromiseType:jM,createArrayType:nu,getElementTypeOfArrayType:Xne,getBooleanType:()=>Te,getFalseType:n=>n?Ke:oe,getTrueType:n=>n?pe:z,getVoidType:()=>yt,getUndefinedType:()=>Oe,getNullType:()=>ln,getESSymbolType:()=>j,getNeverType:()=>lt,getOptionalType:()=>Kt,getPromiseType:()=>oM(!1),getPromiseLikeType:()=>aAe(!1),getAsyncIterableType:()=>{let n=ZG(!1);if(n!==ro)return n},isSymbolAccessible:dy,isArrayType:_f,isTupleType:po,isArrayLikeType:Kv,isEmptyAnonymousObjectType:hh,isTypeInvalidDueToUnionDiscriminant:FJe,getExactOptionalProperties:cXe,getAllPossiblePropertiesOfTypes:GJe,getSuggestedSymbolForNonexistentProperty:qre,getSuggestionForNonexistentProperty:Xre,getSuggestedSymbolForNonexistentJSXAttribute:VCe,getSuggestedSymbolForNonexistentSymbol:(n,a,c)=>Yre(n,Bs(a),c),getSuggestionForNonexistentSymbol:(n,a,c)=>sQe(n,Bs(a),c),getSuggestedSymbolForNonexistentModule:qB,getSuggestionForNonexistentExport:cQe,getSuggestedSymbolForNonexistentClassMember:UCe,getBaseConstraintOfType:bu,getDefaultFromTypeParameter:n=>n&&n.flags&262144?jE(n):void 0,resolveName(n,a,c,u){return zs(a,Bs(n),c,void 0,void 0,!1,u)},getJsxNamespace:n=>Gi(Rb(n)),getJsxFragmentFactory:n=>{let a=Kie(n);return a&&Gi(Yd(a).escapedText)},getAccessibleSymbolChain:Rv,getTypePredicateOfSignature:Lf,resolveExternalModuleName:n=>{let a=ea(n,ot);return a&&Gl(a,a,!0)},resolveExternalModuleSymbol:Vu,tryGetThisTypeAt:(n,a,c)=>{let u=ea(n);return u&&Cre(u,a,c)},getTypeArgumentConstraint:n=>{let a=ea(n,bi);return a&&get(a)},getSuggestionDiagnostics:(n,a)=>{let c=ea(n,Li)||L.fail(\"Could not determine parsed source file.\");if(rL(c,Y,e))return Je;let u;try{return o=a,jie(c),L.assert(!!(Rr(c).flags&1)),u=si(u,mE.getDiagnostics(c.fileName)),rLe(jLe(c),(p,h,T)=>{!Gw(p)&&!VLe(h,!!(p.flags&16777216))&&(u||(u=[])).push({...T,category:2})}),u||Je}finally{o=void 0}},runWithCancellationToken:(n,a)=>{try{return o=n,a(qe)}finally{o=void 0}},getLocalTypeParametersOfClassOrInterfaceOrTypeAlias:yy,isDeclarationVisible:Xf,isPropertyAccessible:Qre,getTypeOnlyAliasDeclaration:nd,getMemberOverrideModifierStatus:Xtt,isTypeParameterPossiblyReferenced:fM,typeHasCallOrConstructSignatures:EU};function zt(n,a){let c=jn(n,rS),u=c&&Rr(c).resolvedSignature;c&&(Rr(c).resolvedSignature=void 0);let p=a();return c&&(Rr(c).resolvedSignature=u),p}function Qt(n,a){let c=jn(n,rS);if(c){let p=n;do Rr(p).skipDirectInference=!0,p=p.parent;while(p&&p!==c)}B=!0;let u=zt(n,a);if(B=!1,c){let p=n;do Rr(p).skipDirectInference=void 0,p=p.parent;while(p&&p!==c)}return u}function tn(n,a,c,u){let p=ea(n,rS);We=c;let h=p?MC(p,a,u):void 0;return We=void 0,h}var kn=new Map,_n=new Map,Gt=new Map,$n=new Map,ui=new Map,Ni=new Map,Pi=new Map,gr=new Map,pt=new Map,nn=new Map,Dt=new Map,pn=new Map,An=new Map,Kn=new Map,hi=[],ri=new Map,vn=new Set,Ht=wo(4,\"unknown\"),En=wo(0,\"__resolving__\"),dr=new Map,Cr=new Map,Se=Cc(1,\"any\"),at=Cc(1,\"any\",262144),Tt=Cc(1,\"any\"),ve=Cc(1,\"error\"),nt=Cc(1,\"unresolved\"),ce=Cc(1,\"any\",65536),Q=Cc(1,\"intrinsic\"),ue=Cc(2,\"unknown\"),G=Cc(2,\"unknown\"),Oe=Cc(32768,\"undefined\"),je=U?Oe:Cc(32768,\"undefined\",65536),Ge=Cc(32768,\"undefined\"),kt=Pe?Ge:Oe,Kt=Cc(32768,\"undefined\"),ln=Cc(65536,\"null\"),ir=U?ln:Cc(65536,\"null\",65536),ae=Cc(4,\"string\"),rt=Cc(8,\"number\"),Ot=Cc(64,\"bigint\"),Ke=Cc(512,\"false\"),oe=Cc(512,\"false\"),pe=Cc(512,\"true\"),z=Cc(512,\"true\");pe.regularType=z,pe.freshType=pe,z.regularType=z,z.freshType=pe,Ke.regularType=oe,Ke.freshType=Ke,oe.regularType=oe,oe.freshType=Ke;var Te=Gr([oe,z]),j=Cc(4096,\"symbol\"),yt=Cc(16384,\"void\"),lt=Cc(131072,\"never\"),Qe=Cc(131072,\"never\",262144),Vt=Cc(131072,\"never\"),Hn=Cc(131072,\"never\"),jr=Cc(67108864,\"object\"),ei=Gr([ae,rt]),Kr=Gr([ae,rt,j]),Si=we?ae:Kr,Ja=Gr([rt,Ot]),Za=Gr([ae,rt,Te,Ot,ln,Oe]),Fa=WE([\"\",\"\"],[rt]),Hi=dM(n=>n.flags&262144?Pqe(n):n,()=>\"(restrictive mapper)\"),xi=dM(n=>n.flags&262144?Tt:n,()=>\"(permissive mapper)\"),Nr=Cc(131072,\"never\"),Fo=dM(n=>n.flags&262144?Nr:n,()=>\"(unique literal mapper)\"),Qr,Wi=dM(n=>(Qr&&(n===md||n===Pc||n===bl)&&Qr(!0),n),()=>\"(unmeasurable reporter)\"),gn=dM(n=>(Qr&&(n===md||n===Pc||n===bl)&&Qr(!1),n),()=>\"(unreliable reporter)\"),Ki=ls(void 0,q,Je,Je,Je),kc=ls(void 0,q,Je,Je,Je);kc.objectFlags|=2048;var Ps=wo(2048,\"__type\");Ps.members=Ua();var mc=ls(Ps,q,Je,Je,Je),xc=ls(void 0,q,Je,Je,Je),hc=U?Gr([Oe,ln,xc]):ue,ro=ls(void 0,q,Je,Je,Je);ro.instantiations=new Map;var aa=ls(void 0,q,Je,Je,Je);aa.objectFlags|=262144;var Co=ls(void 0,q,Je,Je,Je),gc=ls(void 0,q,Je,Je,Je),Ll=ls(void 0,q,Je,Je,Je),md=rd(),Pc=rd();Pc.constraint=md;var bl=rd(),ss=rd(),qs=rd();qs.constraint=ss;var Rs=iM(1,\"<<unresolved>>\",0,Se),As=Am(void 0,void 0,void 0,Je,Se,void 0,0,0),jt=Am(void 0,void 0,void 0,Je,ve,void 0,0,0),yc=Am(void 0,void 0,void 0,Je,Se,void 0,0,0),Ql=Am(void 0,void 0,void 0,Je,Qe,void 0,0,0),yu=Fp(rt,ae,!0),se=new Map,ht={get yieldType(){return L.fail(\"Not supported\")},get returnType(){return L.fail(\"Not supported\")},get nextType(){return L.fail(\"Not supported\")}},wt=Eg(Se,Se,Se),K=Eg(Se,Se,ue),Xe=Eg(lt,Se,Oe),ft={iterableCacheKey:\"iterationTypesOfAsyncIterable\",iteratorCacheKey:\"iterationTypesOfAsyncIterator\",iteratorSymbolName:\"asyncIterator\",getGlobalIteratorType:hKe,getGlobalIterableType:ZG,getGlobalIterableIteratorType:gKe,getGlobalGeneratorType:yKe,resolveIterationType:rT,mustHaveANextMethodDiagnostic:_.An_async_iterator_must_have_a_next_method,mustBeAMethodDiagnostic:_.The_0_property_of_an_async_iterator_must_be_a_method,mustHaveAValueDiagnostic:_.The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property},Yt={iterableCacheKey:\"iterationTypesOfIterable\",iteratorCacheKey:\"iterationTypesOfIterator\",iteratorSymbolName:\"iterator\",getGlobalIteratorType:vKe,getGlobalIterableType:pne,getGlobalIterableIteratorType:bKe,getGlobalGeneratorType:EKe,resolveIterationType:(n,a)=>n,mustHaveANextMethodDiagnostic:_.An_iterator_must_have_a_next_method,mustBeAMethodDiagnostic:_.The_0_property_of_an_iterator_must_be_a_method,mustHaveAValueDiagnostic:_.The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property},pr,yr=new Map,ta=!1,Go,Ka,vo,ka,Hs,Uc,Gu,$o,jo,Ws,hd,vc,nf,ye,Et,bn,Ri,io,ee,Ze,At,xt,qt,Ln,mr,Vr,gi,Ea,bo,Qo,Cs,Bu,Pd,Dc,gd,Zl,Md,zf,Io,Jf,Fd,E_,Y_,M,He,Nt,Pn,la,oa,be,De,mt,St,Zt,rn=new Map,sn=0,Dn=0,kr=0,ki=!1,Vn=0,$t,Xn,ra,Is=[],Mc=[],mm=[],Hh=0,T_=[],Cb=[],mv=0,gx=ff(\"\"),_1=op(0),yx=aB({negative:!1,base10Value:\"0\"}),Wh=[],S_=[],hv=[],eh=0,$_=10,gv=[],lE=[],Ib=[],zh=[],p1=[],uE=[],dE=[],fE=[],yv=[],vx=[],_E=[],pE=[],vv=[],Lb=[],bv=[],m1=[],Jh=[],Lo=XA(),mE=XA(),sC=Tm(),Zg,Kh,hm=new Map,x_=new Map,Zu=new Map,ed=new Map,td=new Map,kb=new Map,Db=Ua();Db.set(Le.escapedName,Le);var bx=[[\".mts\",\".mjs\"],[\".ts\",\".js\"],[\".cts\",\".cjs\"],[\".mjs\",\".mjs\"],[\".js\",\".js\"],[\".cjs\",\".cjs\"],[\".tsx\",Y.jsx===1?\".jsx\":\".js\"],[\".jsx\",\".jsx\"],[\".json\",\".json\"]];return grt(),qe;function wb(n){return n?Kn.get(n):void 0}function qh(n,a){return n&&Kn.set(n,a),a}function Rb(n){if(n){let a=Gn(n);if(a)if(US(n)){if(a.localJsxFragmentNamespace)return a.localJsxFragmentNamespace;let c=a.pragmas.get(\"jsxfrag\");if(c){let p=ba(c)?c[0]:c;if(a.localJsxFragmentFactory=zS(p.arguments.factory,R),$e(a.localJsxFragmentFactory,Ob,Cd),a.localJsxFragmentFactory)return a.localJsxFragmentNamespace=Yd(a.localJsxFragmentFactory).escapedText}let u=Kie(n);if(u)return a.localJsxFragmentFactory=u,a.localJsxFragmentNamespace=Yd(u).escapedText}else{let c=h1(a);if(c)return a.localJsxNamespace=c}}return Zg||(Zg=\"React\",Y.jsxFactory?(Kh=zS(Y.jsxFactory,R),$e(Kh,Ob),Kh&&(Zg=Yd(Kh).escapedText)):Y.reactNamespace&&(Zg=Bs(Y.reactNamespace))),Kh||(Kh=D.createQualifiedName(D.createIdentifier(Gi(Zg)),\"createElement\")),Zg}function h1(n){if(n.localJsxNamespace)return n.localJsxNamespace;let a=n.pragmas.get(\"jsx\");if(a){let c=ba(a)?a[0]:a;if(n.localJsxFactory=zS(c.arguments.factory,R),$e(n.localJsxFactory,Ob,Cd),n.localJsxFactory)return n.localJsxNamespace=Yd(n.localJsxFactory).escapedText}}function Ob(n){return om(n,-1,-1),xn(n,Ob,Bh)}function cC(n,a){return HLe(n,a),Ie}function Ex(n,a,c,u,p,h){let T=n?hr(n,a,c,u,p,h):ps(a,c,u,p,h),k=Lo.lookup(T);return k||(Lo.add(T),T)}function Ev(n,a,c,u,p,h,T){let k=Fe(a,c,u,p,h,T);return k.skippedOn=n,k}function hE(n,a,c,u,p,h){return n?hr(n,a,c,u,p,h):ps(a,c,u,p,h)}function Fe(n,a,c,u,p,h){let T=hE(n,a,c,u,p,h);return Lo.add(T),T}function ey(n,a){n?Lo.add(a):mE.add({...a,category:2})}function Ip(n,a,c,u,p,h,T){if(a.pos<0||a.end<0){if(!n)return;let k=Gn(a);ey(n,\"message\"in c?al(k,0,0,c,u,p,h,T):yH(k,c));return}ey(n,\"message\"in c?hr(a,c,u,p,h,T):Lh(Gn(a),a,c))}function Tv(n,a,c,u,p,h,T){let k=Fe(n,c,u,p,h,T);if(a){let O=hr(n,_.Did_you_forget_to_use_await);Ao(k,O)}return k}function Nb(n,a){let c=Array.isArray(n)?mn(n,Cj):Cj(n);return c&&Ao(a,hr(c,_.The_declaration_was_marked_as_deprecated_here)),mE.add(a),a}function Sv(n){if(Fn(n.declarations)>1){let a=ju(n);if(a&&a.flags&64)return vt(n.declarations,c=>!!(G_(c)&268435456))}return!!(WB(n)&268435456)}function Xh(n,a,c){let u=hr(n,_._0_is_deprecated,c);return Nb(a,u)}function g1(n,a,c,u){let p=c?hr(n,_.The_signature_0_of_1_is_deprecated,u,c):hr(n,_._0_is_deprecated,u);return Nb(a,p)}function wo(n,a,c){S++;let u=new d(n|33554432,a);return u.links=new yK,u.links.checkFlags=c||0,u}function A_(n,a){let c=wo(1,n);return c.links.type=a,c}function gE(n,a){let c=wo(4,n);return c.links.type=a,c}function Kc(n){let a=0;return n&2&&(a|=111551),n&1&&(a|=111550),n&4&&(a|=0),n&8&&(a|=900095),n&16&&(a|=110991),n&32&&(a|=899503),n&64&&(a|=788872),n&256&&(a|=899327),n&128&&(a|=899967),n&512&&(a|=110735),n&8192&&(a|=103359),n&32768&&(a|=46015),n&65536&&(a|=78783),n&262144&&(a|=526824),n&524288&&(a|=788968),n&2097152&&(a|=2097152),a}function th(n,a){a.mergeId||(a.mergeId=hK,hK++),gv[a.mergeId]=n}function Pb(n){let a=wo(n.flags,n.escapedName);return a.declarations=n.declarations?n.declarations.slice():[],a.parent=n.parent,n.valueDeclaration&&(a.valueDeclaration=n.valueDeclaration),n.constEnumOnlyModule&&(a.constEnumOnlyModule=!0),n.members&&(a.members=new Map(n.members)),n.exports&&(a.exports=new Map(n.exports)),th(a,n),a}function C_(n,a,c=!1){if(!(n.flags&Kc(a.flags))||(a.flags|n.flags)&67108864){if(a===n)return n;if(!(n.flags&33554432)){let p=Ac(n);if(p===Ht)return a;n=Pb(p)}a.flags&512&&n.flags&512&&n.constEnumOnlyModule&&!a.constEnumOnlyModule&&(n.constEnumOnlyModule=!1),n.flags|=a.flags,a.valueDeclaration&&rR(n,a.valueDeclaration),si(n.declarations,a.declarations),a.members&&(n.members||(n.members=Ua()),ll(n.members,a.members,c)),a.exports&&(n.exports||(n.exports=Ua()),ll(n.exports,a.exports,c)),c||th(n,a)}else if(n.flags&1024)n!==Ye&&Fe(a.declarations&&sa(a.declarations[0]),_.Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity,E(n));else{let p=!!(n.flags&384||a.flags&384),h=!!(n.flags&2||a.flags&2),T=p?_.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations:h?_.Cannot_redeclare_block_scoped_variable_0:_.Duplicate_identifier_0,k=a.declarations&&Gn(a.declarations[0]),O=n.declarations&&Gn(n.declarations[0]),H=h6(k,Y.checkJs),J=h6(O,Y.checkJs),de=E(a);if(k&&O&&pr&&!p&&k!==O){let Ae=cT(k.path,O.path)===-1?k:O,xe=Ae===k?O:k,tt=VD(pr,`${Ae.path}|${xe.path}`,()=>({firstFile:Ae,secondFile:xe,conflictingSymbols:new Map})),It=VD(tt.conflictingSymbols,de,()=>({isBlockScoped:h,firstFileLocations:[],secondFileLocations:[]}));H||u(It.firstFileLocations,a),J||u(It.secondFileLocations,n)}else H||Mb(a,T,de,n),J||Mb(n,T,de,a)}return n;function u(p,h){if(h.declarations)for(let T of h.declarations)Of(p,T)}}function Mb(n,a,c,u){mn(n.declarations,p=>{Ml(p,a,c,u.declarations)})}function Ml(n,a,c,u){let p=(ob(n,!1)?wH(n):sa(n))||n,h=Ex(p,a,c);for(let T of u||Je){let k=(ob(T,!1)?wH(T):sa(T))||T;if(k===p)continue;h.relatedInformation=h.relatedInformation||[];let O=hr(k,_._0_was_also_declared_here,c),H=hr(k,_.and_here);Fn(h.relatedInformation)>=5||vt(h.relatedInformation,J=>ZI(J,H)===0||ZI(J,O)===0)||Ao(h,Fn(h.relatedInformation)?H:O)}}function Yh(n,a){if(!n?.size)return a;if(!a?.size)return n;let c=Ua();return ll(c,n),ll(c,a),c}function ll(n,a,c=!1){a.forEach((u,p)=>{let h=n.get(p);n.set(p,h?C_(h,u,c):No(u))})}function y1(n){var a,c,u;let p=n.parent;if(((a=p.symbol.declarations)==null?void 0:a[0])!==p){L.assert(p.symbol.declarations.length>1);return}if(mp(p))ll(Ne,p.symbol.exports);else{let h=n.parent.parent.flags&16777216?void 0:_.Invalid_module_name_in_augmentation_module_0_cannot_be_found,T=ah(n,n,h,!0);if(!T)return;if(T=Vu(T),T.flags&1920)if(vt(Ka,k=>T===k.symbol)){let k=C_(p.symbol,T,!0);vo||(vo=new Map),vo.set(n.text,k)}else{if((c=T.exports)!=null&&c.get(\"__export\")&&((u=p.symbol.exports)!=null&&u.size)){let k=Mte(T,\"resolvedExports\");for(let[O,H]of lo(p.symbol.exports.entries()))k.has(O)&&!T.exports.has(O)&&C_(k.get(O),H)}C_(T,p.symbol)}else Fe(n,_.Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity,n.text)}}function lC(n,a,c){a.forEach((p,h)=>{let T=n.get(h);T?mn(T.declarations,u(Gi(h),c)):n.set(h,p)});function u(p,h){return T=>Lo.add(hr(T,h,p))}}function Ai(n){var a;if(n.flags&33554432)return n.links;let c=$a(n);return(a=lE[c])!=null?a:lE[c]=new yK}function Rr(n){let a=zo(n);return Ib[a]||(Ib[a]=new pPe)}function gm(n){return n.kind===308&&!kd(n)}function yd(n,a,c){if(c){let u=No(n.get(a));if(u&&(L.assert((ac(u)&1)===0,\"Should never get an instantiated symbol here.\"),u.flags&c||u.flags&2097152&&Fl(u)&c))return u}}function yE(n,a){let c=n.parent,u=n.parent.parent,p=yd(c.locals,a,111551),h=yd(vy(u.symbol),a,111551);return p&&h?[p,h]:L.fail(\"There should exist two symbols, one as property declaration and one as parameter declaration\")}function $h(n,a){let c=Gn(n),u=Gn(a),p=tm(n);if(c!==u){if(ie&&(c.externalModuleIndicator||u.externalModuleIndicator)||!Ss(Y)||kC(a)||n.flags&16777216||T(a,n))return!0;let O=e.getSourceFiles();return O.indexOf(c)<=O.indexOf(u)}if(n.pos<=a.pos&&!(Na(n)&&zw(a.parent)&&!n.initializer&&!n.exclamationToken)){if(n.kind===205){let O=cb(a,205);return O?jn(O,Wo)!==jn(n,Wo)||n.pos<O.pos:$h(cb(n,257),a)}else{if(n.kind===257)return!h(n,a);if(sl(n))return!jn(a,O=>ts(O)&&O.parent.parent===n);if(Na(n))return!k(n,a,!1);if(Ad(n,n.parent))return!(Do(Y)===99&&fe&&Zc(n)===Zc(a)&&T(a,n))}return!0}if(a.parent.kind===278||a.parent.kind===274&&a.parent.isExportEquals||a.kind===274&&a.isExportEquals||a.flags&8388608||kC(a)||k2e(a))return!0;if(T(a,n))return Do(Y)===99&&fe&&Zc(n)&&(Na(n)||Ad(n,n.parent))?!k(n,a,!0):!0;return!1;function h(O,H){switch(O.parent.parent.kind){case 240:case 245:case 247:if(Lp(H,O,p))return!0;break}let J=O.parent.parent;return CA(J)&&Lp(H,J.expression,p)}function T(O,H){return!!jn(O,J=>{if(J===p)return\"quit\";if(Ia(J))return!0;if(oc(J))return H.pos<O.pos;let de=zr(J.parent,Na);if(de&&de.initializer===J){if(Ca(J.parent)){if(H.kind===171)return!0;if(Na(H)&&Zc(O)===Zc(H)){let xe=H.name;if(Re(xe)||pi(xe)){let tt=zn(fr(H)),It=Pr(H.parent.members,oc);if(tnt(xe,tt,It,H.parent.pos,J.pos))return!0}}}else if(!(H.kind===169&&!Ca(H))||Zc(O)!==Zc(H))return!0}return!1})}function k(O,H,J){return H.end>O.end?!1:jn(H,Ae=>{if(Ae===O)return\"quit\";switch(Ae.kind){case 216:return!0;case 169:return J&&(Na(O)&&Ae.parent===O.parent||Ad(O,O.parent)&&Ae.parent===O.parent.parent)?\"quit\":!0;case 238:switch(Ae.parent.kind){case 174:case 171:case 175:return!0;default:return!1}default:return!1}})===void 0}}function nh(n,a,c){let u=Do(Y),p=a;if(ha(c)&&p.body&&n.valueDeclaration&&n.valueDeclaration.pos>=p.body.pos&&n.valueDeclaration.end<=p.body.end&&u>=2){let k=Rr(p);return k.declarationRequiresScopeChange===void 0&&(k.declarationRequiresScopeChange=mn(p.parameters,h)||!1),!k.declarationRequiresScopeChange}return!1;function h(k){return T(k.name)||!!k.initializer&&T(k.initializer)}function T(k){switch(k.kind){case 216:case 215:case 259:case 173:return!1;case 171:case 174:case 175:case 299:return T(k.name);case 169:return zc(k)?u<99||!fe:T(k.name);default:return wj(k)||Jl(k)?u<7:Wo(k)&&k.dotDotDotToken&&cm(k.parent)?u<4:bi(k)?!1:pa(k,T)||!1}}}function ym(n){return pT(n)&&Ch(n.type)||DL(n)&&Ch(n.typeExpression)}function zs(n,a,c,u,p,h,T=!1,k=!0){return Fb(n,a,c,u,p,h,T,k,yd)}function Fb(n,a,c,u,p,h,T,k,O){var H,J,de;let Ae=n,xe,tt,It,Tn,un,Nn=!1,en=n,cn,rr=!1;e:for(;n;){if(a===\"const\"&&ym(n))return;if(Qp(n)&&n.locals&&!gm(n)&&(xe=O(n.locals,a,c))){let Cn=!0;if(Ia(n)&&tt&&tt!==n.body?(c&xe.flags&788968&&tt.kind!==323&&(Cn=xe.flags&262144?tt===n.type||tt.kind===166||tt.kind===344||tt.kind===345||tt.kind===165:!1),c&xe.flags&3&&(nh(xe,n,tt)?Cn=!1:xe.flags&1&&(Cn=tt.kind===166||tt===n.type&&!!jn(xe.valueDeclaration,ha)))):n.kind===191&&(Cn=tt===n.trueType),Cn)break e;xe=void 0}switch(Nn=Nn||Gb(n,tt),n.kind){case 308:if(!kd(n))break;rr=!0;case 264:let Cn=((H=fr(n))==null?void 0:H.exports)||q;if(n.kind===308||Tc(n)&&n.flags&16777216&&!mp(n)){if(xe=Cn.get(\"default\")){let Hr=QA(xe);if(Hr&&xe.flags&c&&Hr.escapedName===a)break e;xe=void 0}let Br=Cn.get(a);if(Br&&Br.flags===2097152&&(nc(Br,278)||nc(Br,277)))break}if(a!==\"default\"&&(xe=O(Cn,a,c&2623475)))if(Li(n)&&n.commonJsModuleIndicator&&!((J=xe.declarations)!=null&&J.some(Ff)))xe=void 0;else break e;break;case 263:if(xe=O(((de=fr(n))==null?void 0:de.exports)||q,a,c&8)){u&&d_(Y)&&!(n.flags&16777216)&&Gn(n)!==Gn(xe.valueDeclaration)&&Fe(en,_.Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead,Gi(a),Rt,`${Gi(vd(n).escapedName)}.${Gi(a)}`);break e}break;case 169:if(!Ca(n)){let Br=wv(n.parent);Br&&Br.locals&&O(Br.locals,a,c&111551)&&(L.assertNode(n,Na),Tn=n)}break;case 260:case 228:case 261:if(xe=O(fr(n).members||q,a,c&788968)){if(!Tx(xe,n)){xe=void 0;break}if(tt&&Ca(tt)){u&&Fe(en,_.Static_members_cannot_reference_class_type_parameters);return}break e}if(_u(n)&&c&32){let Br=n.name;if(Br&&a===Br.escapedText){xe=n.symbol;break e}}break;case 230:if(tt===n.expression&&n.parent.token===94){let Br=n.parent.parent;if(Yr(Br)&&(xe=O(fr(Br).members,a,c&788968))){u&&Fe(en,_.Base_class_expressions_cannot_reference_class_type_parameters);return}}break;case 164:if(cn=n.parent.parent,(Yr(cn)||cn.kind===261)&&(xe=O(fr(cn).members,a,c&788968))){u&&Fe(en,_.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);return}break;case 216:if(Do(Y)>=2)break;case 171:case 173:case 174:case 175:case 259:if(c&3&&a===\"arguments\"){xe=_t;break e}break;case 215:if(c&3&&a===\"arguments\"){xe=_t;break e}if(c&16){let Br=n.name;if(Br&&a===Br.escapedText){xe=n.symbol;break e}}break;case 167:n.parent&&n.parent.kind===166&&(n=n.parent),n.parent&&(_l(n.parent)||n.parent.kind===260)&&(n=n.parent);break;case 349:case 341:case 343:let Rn=OI(n);Rn&&(n=Rn.parent);break;case 166:tt&&(tt===n.initializer||tt===n.name&&La(tt))&&(un||(un=n));break;case 205:tt&&(tt===n.initializer||tt===n.name&&La(tt))&&CT(n)&&!un&&(un=n);break;case 192:if(c&262144){let Br=n.typeParameter.name;if(Br&&a===Br.escapedText){xe=n.typeParameter.symbol;break e}}break}b1(n)&&(It=n),tt=n,n=H_(n)?J6(n)||n.parent:(xp(n)||y3(n))&&sb(n)||n.parent}if(h&&xe&&(!It||xe!==It.symbol)&&(xe.isReferenced|=c),!xe){if(tt&&(L.assertNode(tt,Li),tt.commonJsModuleIndicator&&a===\"exports\"&&c&tt.symbol.flags))return tt.symbol;T||(xe=O(Ne,a,c))}if(!xe&&Ae&&Yn(Ae)&&Ae.parent&&qu(Ae.parent,!1))return ct;function Jt(){return Tn&&!(fe&&Do(Y)>=9)?(Fe(en,en&&Tn.type&&Y8(Tn.type,en.pos)?_.Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor:_.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor,os(Tn.name),Cf(p)),!0):!1}if(xe){if(u&&Jt())return}else{u&&i(()=>{if(!en||!Sx(en,a,p)&&!Jt()&&!xv(en)&&!T1(en,a,c)&&!S1(en,a)&&!Ax(en,a,c)&&!rf(en,a,c)&&!xx(en,a,c)){let Cn,Rn;if(p&&(Rn=aQe(p),Rn&&Fe(en,u,Cf(p),Rn)),!Rn&&k&&eh<$_&&(Cn=Yre(Ae,a,c),Cn?.valueDeclaration&&lu(Cn.valueDeclaration)&&mp(Cn.valueDeclaration)&&(Cn=void 0),Cn)){let Hr=E(Cn),qi=Kre(Ae,Cn,!1),wa=c===1920||p&&typeof p!=\"string\"&&ws(p)?_.Cannot_find_namespace_0_Did_you_mean_1:qi?_.Could_not_find_name_0_Did_you_mean_1:_.Cannot_find_name_0_Did_you_mean_1,Xc=hE(en,wa,Cf(p),Hr);ey(!qi,Xc),Cn.valueDeclaration&&Ao(Xc,hr(Cn.valueDeclaration,_._0_is_declared_here,Hr))}!Cn&&!Rn&&p&&Fe(en,u,Cf(p)),eh++}});return}return u&&i(()=>{if(en&&(c&2||(c&32||c&384)&&(c&111551)===111551)){let Cn=tp(xe);(Cn.flags&2||Cn.flags&32||Cn.flags&384)&&Ub(Cn,en)}if(xe&&rr&&(c&111551)===111551&&!(Ae.flags&8388608)){let Cn=No(xe);Fn(Cn.declarations)&&Ji(Cn.declarations,Rn=>gO(Rn)||Li(Rn)&&!!Rn.symbol.globalExports)&&Ip(!Y.allowUmdGlobalAccess,en,_._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead,Gi(a))}if(xe&&un&&!Nn&&(c&111551)===111551){let Cn=No(zG(xe)),Rn=nm(un);Cn===fr(un)?Fe(en,_.Parameter_0_cannot_reference_itself,os(un.name)):Cn.valueDeclaration&&Cn.valueDeclaration.pos>un.pos&&Rn.parent.locals&&O(Rn.parent.locals,Cn.escapedName,c)===Cn&&Fe(en,_.Parameter_0_cannot_reference_identifier_1_declared_after_it,os(un.name),os(en))}if(xe&&en&&c&111551&&xe.flags&2097152&&!(xe.flags&111551)&&!TS(en)){let Cn=nd(xe,111551);if(Cn){let Rn=Cn.kind===278||Cn.kind===275||Cn.kind===277?_._0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type:_._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type,Br=Gi(a);v1(Fe(en,Rn,Br),Cn,Br)}}}),xe}function v1(n,a,c){return a?Ao(n,hr(a,a.kind===278||a.kind===275||a.kind===277?_._0_was_exported_here:_._0_was_imported_here,c)):n}function Gb(n,a){return n.kind!==216&&n.kind!==215?vL(n)||(Ds(n)||n.kind===169&&!Ca(n))&&(!a||a!==n.name):a&&a===n.name?!1:n.asteriskToken||Mr(n,512)?!0:!ET(n)}function b1(n){switch(n.kind){case 259:case 260:case 261:case 263:case 262:case 264:return!0;default:return!1}}function Cf(n){return Ta(n)?Gi(n):os(n)}function Tx(n,a){if(n.declarations){for(let c of n.declarations)if(c.kind===165&&(H_(c.parent)?dS(c.parent):c.parent)===a)return!(H_(c.parent)&&wr(c.parent.parent.tags,Ff))}return!1}function Sx(n,a,c){if(!Re(n)||n.escapedText!==a||WLe(n)||kC(n))return!1;let u=Ku(n,!1,!1),p=u;for(;p;){if(Yr(p.parent)){let h=fr(p.parent);if(!h)break;let T=zn(h);if(ja(T,a))return Fe(n,_.Cannot_find_name_0_Did_you_mean_the_static_member_1_0,Cf(c),E(h)),!0;if(p===u&&!Ca(p)){let k=gs(h).thisType;if(ja(k,a))return Fe(n,_.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0,Cf(c)),!0}}p=p.parent}return!1}function xv(n){let a=E1(n);return a&&uc(a,64,!0)?(Fe(n,_.Cannot_extend_an_interface_0_Did_you_mean_implements,Qc(a)),!0):!1}function E1(n){switch(n.kind){case 79:case 208:return n.parent?E1(n.parent):void 0;case 230:if(bc(n.expression))return n.expression;default:return}}function T1(n,a,c){let u=1920|(Yn(n)?111551:0);if(c===u){let p=Ac(zs(n,a,788968&~u,void 0,void 0,!1)),h=n.parent;if(p){if(Yu(h)){L.assert(h.left===n,\"Should only be resolving left side of qualified name as a namespace\");let T=h.right.escapedText;if(ja(gs(p),T))return Fe(h,_.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1,Gi(a),Gi(T)),!0}return Fe(n,_._0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here,Gi(a)),!0}}return!1}function xx(n,a,c){if(c&788584){let u=Ac(zs(n,a,111127,void 0,void 0,!1));if(u&&!(u.flags&1920))return Fe(n,_._0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0,Gi(a)),!0}return!1}function Bb(n){return n===\"any\"||n===\"string\"||n===\"number\"||n===\"boolean\"||n===\"never\"||n===\"unknown\"}function S1(n,a){return Bb(a)&&n.parent.kind===278?(Fe(n,_.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module,a),!0):!1}function rf(n,a,c){if(c&111551){if(Bb(a))return Qh(n)?Fe(n,_.An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_classes,Gi(a)):Fe(n,_._0_only_refers_to_a_type_but_is_being_used_as_a_value_here,Gi(a)),!0;let u=Ac(zs(n,a,788544,void 0,void 0,!1)),p=u&&Fl(u);if(u&&p!==void 0&&!(p&111551)){let h=Gi(a);return I_(a)?Fe(n,_._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_es2015_or_later,h):Q_(n,u)?Fe(n,_._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0,h,h===\"K\"?\"P\":\"K\"):Fe(n,_._0_only_refers_to_a_type_but_is_being_used_as_a_value_here,h),!0}}return!1}function Qh(n){let a=n.parent.parent,c=a.parent;if(a&&c){let u=dd(a)&&a.token===94,p=ku(c);return u&&p}return!1}function Q_(n,a){let c=jn(n.parent,u=>ts(u)||$d(u)?!1:Rd(u)||\"quit\");if(c&&c.members.length===1){let u=gs(a);return!!(u.flags&1048576)&&zM(u,384,!0)}return!1}function I_(n){switch(n){case\"Promise\":case\"Symbol\":case\"Map\":case\"WeakMap\":case\"Set\":case\"WeakSet\":return!0}return!1}function Ax(n,a,c){if(c&111127){if(Ac(zs(n,a,1024,void 0,void 0,!1)))return Fe(n,_.Cannot_use_namespace_0_as_a_value,Gi(a)),!0}else if(c&788544&&Ac(zs(n,a,1536,void 0,void 0,!1)))return Fe(n,_.Cannot_use_namespace_0_as_a_type,Gi(a)),!0;return!1}function Ub(n,a){var c;if(L.assert(!!(n.flags&2||n.flags&32||n.flags&384)),n.flags&67108881&&n.flags&32)return;let u=(c=n.declarations)==null?void 0:c.find(p=>sH(p)||Yr(p)||p.kind===263);if(u===void 0)return L.fail(\"checkResolvedBlockScopedVariable could not find block-scoped declaration\");if(!(u.flags&16777216)&&!$h(u,a)){let p,h=os(sa(u));n.flags&2?p=Fe(a,_.Block_scoped_variable_0_used_before_its_declaration,h):n.flags&32?p=Fe(a,_.Class_0_used_before_its_declaration,h):n.flags&256?p=Fe(a,_.Enum_0_used_before_its_declaration,h):(L.assert(!!(n.flags&128)),U0(Y)&&(p=Fe(a,_.Enum_0_used_before_its_declaration,h))),p&&Ao(p,hr(u,_._0_is_declared_here,h))}}function Lp(n,a,c){return!!a&&!!jn(n,u=>u===a||(u===c||Ia(u)&&(!ET(u)||qA(u))?\"quit\":!1))}function x1(n){switch(n.kind){case 268:return n;case 270:return n.parent;case 271:return n.parent.parent;case 273:return n.parent.parent.parent;default:return}}function Uu(n){return n.declarations&&dA(n.declarations,Zh)}function Zh(n){return n.kind===268||n.kind===267||n.kind===270&&!!n.name||n.kind===271||n.kind===277||n.kind===273||n.kind===278||n.kind===274&&zA(n)||ar(n)&&ic(n)===2&&zA(n)||Us(n)&&ar(n.parent)&&n.parent.left===n&&n.parent.operatorToken.kind===63&&kp(n.parent.right)||n.kind===300||n.kind===299&&kp(n.initializer)||n.kind===257&&N0(n)||n.kind===205&&N0(n.parent.parent)}function kp(n){return pR(n)||ms(n)&&cp(n)}function Dp(n,a){let c=ry(n);if(c){let p=$I(c.expression).arguments[0];return Re(c.name)?Ac(ja(Fxe(p),c.name.escapedText)):void 0}if(wi(n)||n.moduleReference.kind===280){let p=Gl(n,IH(n)||wI(n)),h=Vu(p);return qf(n,p,h,!1),h}let u=ep(n.moduleReference,a);return eg(n,u),u}function eg(n,a){if(qf(n,void 0,a,!1)&&!n.isTypeOnly){let c=nd(fr(n)),u=c.kind===278||c.kind===275,p=u?_.An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type:_.An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type,h=u?_._0_was_exported_here:_._0_was_imported_here,T=c.kind===275?\"*\":Gi(c.name.escapedText);Ao(Fe(n.moduleReference,p),hr(c,h,T))}}function vE(n,a,c,u){let p=n.exports.get(\"export=\"),h=p?ja(zn(p),a,!0):n.exports.get(a),T=Ac(h,u);return qf(c,h,T,!1),T}function A1(n){return pc(n)&&!n.isExportEquals||Mr(n,1024)||Mu(n)}function ty(n){return es(n)?W_(Gn(n),n):void 0}function bE(n,a){return n===99&&a===1}function cs(n){return ty(n)===99&&Oc(n.text,\".json\")}function ny(n,a,c,u){let p=n&&ty(u);if(n&&p!==void 0){let h=bE(p,n.impliedNodeFormat);if(p===99||h)return h}if(!Z)return!1;if(!n||n.isDeclarationFile){let h=vE(a,\"default\",void 0,!0);return!(h&&vt(h.declarations,A1)||vE(a,Bs(\"__esModule\"),void 0,c))}return Cu(n)?typeof n.externalModuleIndicator!=\"object\"&&!vE(a,Bs(\"__esModule\"),void 0,c):AE(a)}function Cx(n,a){let c=Gl(n,n.parent.moduleSpecifier);if(c)return Vb(c,n,a)}function Vb(n,a,c){var u;let p;CI(n)?p=n:p=vE(n,\"default\",a,c);let h=(u=n.declarations)==null?void 0:u.find(Li),T=jb(a);if(!T)return p;let k=cs(T),O=ny(h,n,c,T);if(!p&&!O&&!k)if(AE(n)&&!(wT(Y)||f_(Y))){let H=ie>=5?\"allowSyntheticDefaultImports\":\"esModuleInterop\",de=n.exports.get(\"export=\").valueDeclaration,Ae=Fe(a.name,_.Module_0_can_only_be_default_imported_using_the_1_flag,E(n),H);de&&Ao(Ae,hr(de,_.This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag,H))}else lm(a)?Ix(n,a):Av(n,n,a,eS(a)&&a.propertyName||a.name);else if(O||k){let H=Vu(n,c)||Ac(n,c);return qf(a,n,H,!1),H}return qf(a,p,void 0,!1),p}function jb(n){switch(n.kind){case 270:return n.parent.moduleSpecifier;case 268:return um(n.moduleReference)?n.moduleReference.expression:void 0;case 271:return n.parent.parent.moduleSpecifier;case 273:return n.parent.parent.parent.moduleSpecifier;case 278:return n.parent.parent.moduleSpecifier;default:return L.assertNever(n)}}function Ix(n,a){var c,u,p;if((c=n.exports)!=null&&c.has(a.symbol.escapedName))Fe(a.name,_.Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead,E(n),E(a.symbol));else{let h=Fe(a.name,_.Module_0_has_no_default_export,E(n)),T=(u=n.exports)==null?void 0:u.get(\"__export\");if(T){let k=(p=T.declarations)==null?void 0:p.find(O=>{var H,J;return!!(Il(O)&&O.moduleSpecifier&&((J=(H=Gl(O,O.moduleSpecifier))==null?void 0:H.exports)!=null&&J.has(\"default\")))});k&&Ao(h,hr(k,_.export_Asterisk_does_not_re_export_a_default))}}}function uC(n,a){let c=n.parent.parent.moduleSpecifier,u=Gl(n,c),p=Jb(u,c,a,!1);return qf(n,u,p,!1),p}function Lx(n,a){let c=n.parent.moduleSpecifier,u=c&&Gl(n,c),p=c&&Jb(u,c,a,!1);return qf(n,u,p,!1),p}function Qn(n,a){if(n===Ht&&a===Ht)return Ht;if(n.flags&790504)return n;let c=wo(n.flags|a.flags,n.escapedName);return L.assert(n.declarations||a.declarations),c.declarations=fA(Qi(n.declarations,a.declarations),Zv),c.parent=n.parent||a.parent,n.valueDeclaration&&(c.valueDeclaration=n.valueDeclaration),a.members&&(c.members=new Map(a.members)),n.exports&&(c.exports=new Map(n.exports)),c}function lc(n,a,c,u){var p;if(n.flags&1536){let h=Gd(n).get(a.escapedText),T=Ac(h,u),k=(p=Ai(n).typeOnlyExportStarMap)==null?void 0:p.get(a.escapedText);return qf(c,h,T,!1,k,a.escapedText),T}}function zi(n,a){if(n.flags&3){let c=n.valueDeclaration.type;if(c)return Ac(ja($r(c),a))}}function af(n,a,c=!1){var u;let p=IH(n)||n.moduleSpecifier,h=Gl(n,p),T=!br(a)&&a.propertyName||a.name;if(!Re(T))return;let k=T.escapedText===\"default\"&&!!(Y.allowSyntheticDefaultImports||f_(Y)),O=Jb(h,p,!1,k);if(O&&T.escapedText){if(CI(h))return h;let H;h&&h.exports&&h.exports.get(\"export=\")?H=ja(zn(O),T.escapedText,!0):H=zi(O,T.escapedText),H=Ac(H,c);let J=lc(O,T,a,c);if(J===void 0&&T.escapedText===\"default\"){let Ae=(u=h.declarations)==null?void 0:u.find(Li);(cs(p)||ny(Ae,h,c,p))&&(J=Vu(h,c)||Ac(h,c))}let de=J&&H&&J!==H?Qn(H,J):J||H;return de||Av(h,O,n,T),de}}function Av(n,a,c,u){var p;let h=rh(n,c),T=os(u),k=qB(u,a);if(k!==void 0){let O=E(k),H=Fe(u,_._0_has_no_exported_member_named_1_Did_you_mean_2,h,T,O);k.valueDeclaration&&Ao(H,hr(k.valueDeclaration,_._0_is_declared_here,O))}else(p=n.exports)!=null&&p.has(\"default\")?Fe(u,_.Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead,h,T):vm(c,u,T,n,h)}function vm(n,a,c,u,p){var h,T;let k=(T=(h=zr(u.valueDeclaration,Qp))==null?void 0:h.locals)==null?void 0:T.get(a.escapedText),O=u.exports;if(k){let H=O?.get(\"export=\");if(H)wp(H,k)?Wn(n,a,c,p):Fe(a,_.Module_0_has_no_exported_member_1,p,c);else{let J=O?wr(ene(O),Ae=>!!wp(Ae,k)):void 0,de=J?Fe(a,_.Module_0_declares_1_locally_but_it_is_exported_as_2,p,c,E(J)):Fe(a,_.Module_0_declares_1_locally_but_it_is_not_exported,p,c);k.declarations&&Ao(de,...on(k.declarations,(Ae,xe)=>hr(Ae,xe===0?_._0_is_declared_here:_.and_here,c)))}}else Fe(a,_.Module_0_has_no_exported_member_1,p,c)}function Wn(n,a,c,u){if(ie>=5){let p=f_(Y)?_._0_can_only_be_imported_by_using_a_default_import:_._0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import;Fe(a,p,c)}else if(Yn(n)){let p=f_(Y)?_._0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import:_._0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import;Fe(a,p,c)}else{let p=f_(Y)?_._0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import:_._0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import;Fe(a,p,c,c,u)}}function kx(n,a){if($u(n)&&vr(n.propertyName||n.name)===\"default\"){let T=jb(n),k=T&&Gl(n,T);if(k)return Vb(k,n,a)}let c=Wo(n)?nm(n):n.parent.parent.parent,u=ry(c),p=af(c,u||n,a),h=n.propertyName||n.name;return u&&p&&Re(h)?Ac(ja(zn(p),h.escapedText),a):(qf(n,void 0,p,!1),p)}function ry(n){if(wi(n)&&n.initializer&&br(n.initializer))return n.initializer}function nl(n,a){if($p(n.parent)){let c=Vu(n.parent.symbol,a);return qf(n,void 0,c,!1),c}}function Kf(n,a,c){if(vr(n.propertyName||n.name)===\"default\"){let p=jb(n),h=p&&Gl(n,p);if(h)return Vb(h,n,!!c)}let u=n.parent.parent.moduleSpecifier?af(n.parent.parent,n,c):uc(n.propertyName||n.name,a,!1,c);return qf(n,void 0,u,!1),u}function Z_(n,a){let c=pc(n)?n.expression:n.right,u=iy(c,a);return qf(n,void 0,u,!1),u}function iy(n,a){if(_u(n))return Ic(n).symbol;if(!Cd(n)&&!bc(n))return;let c=uc(n,901119,!0,a);return c||(Ic(n),Rr(n).resolvedSymbol)}function EE(n,a){if(ar(n.parent)&&n.parent.left===n&&n.parent.operatorToken.kind===63)return iy(n.parent.right,a)}function L_(n,a=!1){switch(n.kind){case 268:case 257:return Dp(n,a);case 270:return Cx(n,a);case 271:return uC(n,a);case 277:return Lx(n,a);case 273:case 205:return kx(n,a);case 278:return Kf(n,901119,a);case 274:case 223:return Z_(n,a);case 267:return nl(n,a);case 300:return uc(n.name,901119,!0,a);case 299:return iy(n.initializer,a);case 209:case 208:return EE(n,a);default:return L.fail()}}function ay(n,a=901119){return n?(n.flags&(2097152|a))===2097152||!!(n.flags&2097152&&n.flags&67108864):!1}function Ac(n,a){return!a&&ay(n)?wc(n):n}function wc(n){L.assert((n.flags&2097152)!==0,\"Should only get Alias here.\");let a=Ai(n);if(a.aliasTarget)a.aliasTarget===En&&(a.aliasTarget=Ht);else{a.aliasTarget=En;let c=Uu(n);if(!c)return L.fail();let u=L_(c);a.aliasTarget===En?a.aliasTarget=u||Ht:Fe(c,_.Circular_definition_of_import_alias_0,E(n))}return a.aliasTarget}function tg(n){if(Ai(n).aliasTarget!==En)return wc(n)}function Fl(n){let a=n.flags,c;for(;n.flags&2097152;){let u=wc(n);if(u===Ht)return 67108863;if(u===n||c?.has(u))break;u.flags&2097152&&(c?c.add(u):c=new Set([n,u])),a|=u.flags,n=u}return a}function qf(n,a,c,u,p,h){if(!n||br(n))return!1;let T=fr(n);if(I0(n)){let O=Ai(T);return O.typeOnlyDeclaration=n,!0}if(p){let O=Ai(T);return O.typeOnlyDeclaration=p,T.escapedName!==h&&(O.typeOnlyExportStarName=h),!0}let k=Ai(T);return bm(k,a,u)||bm(k,c,u)}function bm(n,a,c){var u,p,h;if(a&&(n.typeOnlyDeclaration===void 0||c&&n.typeOnlyDeclaration===!1)){let T=(p=(u=a.exports)==null?void 0:u.get(\"export=\"))!=null?p:a,k=T.declarations&&wr(T.declarations,I0);n.typeOnlyDeclaration=(h=k??Ai(T).typeOnlyDeclaration)!=null?h:!1}return!!n.typeOnlyDeclaration}function nd(n,a){if(!(n.flags&2097152))return;let c=Ai(n);if(a===void 0)return c.typeOnlyDeclaration||void 0;if(c.typeOnlyDeclaration){let u=c.typeOnlyDeclaration.kind===275?Ac(sh(c.typeOnlyDeclaration.symbol.parent).get(c.typeOnlyExportStarName||n.escapedName)):wc(c.typeOnlyDeclaration.symbol);return Fl(u)&a?c.typeOnlyDeclaration:void 0}}function TE(n){if(Y.verbatimModuleSyntax)return;let a=fr(n),c=wc(a);c&&(c===Ht||Fl(c)&111551&&!MD(c)&&!nd(a,111551))&&Hb(a)}function Hb(n){L.assert(!Y.verbatimModuleSyntax);let a=Ai(n);if(!a.referenced){a.referenced=!0;let c=Uu(n);if(!c)return L.fail();GA(c)&&Fl(Ac(n))&111551&&Ic(c.moduleReference)}}function Wb(n){let a=Ai(n);a.constEnumReferenced||(a.constEnumReferenced=!0)}function ep(n,a){return n.kind===79&&zI(n)&&(n=n.parent),n.kind===79||n.parent.kind===163?uc(n,1920,!1,a):(L.assert(n.parent.kind===268),uc(n,901119,!1,a))}function rh(n,a){return n.parent?rh(n.parent,a)+\".\"+E(n):E(n,a,void 0,36)}function SE(n){for(;Yu(n.parent);)n=n.parent;return n}function oy(n){let a=Yd(n),c=zs(a,a.escapedText,111551,void 0,a,!0);if(c){for(;Yu(a.parent);){let u=zn(c);if(c=ja(u,a.parent.right.escapedText),!c)return;a=a.parent}return c}}function uc(n,a,c,u,p){if(rc(n))return;let h=1920|(Yn(n)?a&111551:0),T;if(n.kind===79){let k=a===h||ws(n)?_.Cannot_find_namespace_0:L2e(Yd(n)),O=Yn(n)&&!ws(n)?ng(n,a):void 0;if(T=No(zs(p||n,n.escapedText,a,c||O?void 0:k,n,!0,!1)),!T)return No(O)}else if(n.kind===163||n.kind===208){let k=n.kind===163?n.left:n.expression,O=n.kind===163?n.right:n.name,H=uc(k,h,c,!1,p);if(!H||rc(O))return;if(H===Ht)return H;if(H.valueDeclaration&&Yn(H.valueDeclaration)&&$s(Y)!==100&&wi(H.valueDeclaration)&&H.valueDeclaration.initializer&&dIe(H.valueDeclaration.initializer)){let J=H.valueDeclaration.initializer.arguments[0],de=Gl(J,J);if(de){let Ae=Vu(de);Ae&&(H=Ae)}}if(T=No(yd(Gd(H),O.escapedText,a)),!T){if(!c){let J=rh(H),de=os(O),Ae=qB(O,H);if(Ae){Fe(O,_._0_has_no_exported_member_named_1_Did_you_mean_2,J,de,E(Ae));return}let xe=Yu(n)&&SE(n);if(ka&&a&788968&&xe&&!y2(xe.parent)&&oy(xe)){Fe(xe,_._0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0,qd(xe));return}if(a&1920&&Yu(n.parent)){let It=No(yd(Gd(H),O.escapedText,788968));if(It){Fe(n.parent.right,_.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1,E(It),Gi(n.parent.right.escapedText));return}}Fe(O,_.Namespace_0_has_no_exported_member_1,J,de)}return}}else throw L.assertNever(n,\"Unknown entity name kind.\");return L.assert((ac(T)&1)===0,\"Should never get an instantiated symbol here.\"),!ws(n)&&Cd(n)&&(T.flags&2097152||n.parent.kind===274)&&qf(BH(n),T,void 0,!0),T.flags&a||u?T:wc(T)}function ng(n,a){if($G(n.parent)){let c=ih(n.parent);if(c)return zs(c,n.escapedText,a,void 0,n,!0)}}function ih(n){if(jn(n,p=>IA(p)||p.flags&8388608?Ff(p):\"quit\"))return;let c=dS(n);if(c&&Ol(c)&&nR(c.expression)){let p=fr(c.expression.left);if(p)return Cv(p)}if(c&&ms(c)&&nR(c.parent)&&Ol(c.parent.parent)){let p=fr(c.parent.left);if(p)return Cv(p)}if(c&&(s_(c)||yl(c))&&ar(c.parent.parent)&&ic(c.parent.parent)===6){let p=fr(c.parent.parent.left);if(p)return Cv(p)}let u=WA(n);if(u&&Ia(u)){let p=fr(u);return p&&p.valueDeclaration}}function Cv(n){let a=n.parent.valueDeclaration;return a?(RI(a)?oS(a):mT(a)?$w(a):void 0)||a:void 0}function Iv(n){let a=n.valueDeclaration;if(!a||!Yn(a)||n.flags&524288||ob(a,!1))return;let c=wi(a)?$w(a):oS(a);if(c){let u=vd(c);if(u)return oie(u,n)}}function Gl(n,a,c){let p=$s(Y)===1?_.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option:_.Cannot_find_module_0_or_its_corresponding_type_declarations;return ah(n,a,c?void 0:p)}function ah(n,a,c,u=!1){return es(a)?qc(n,a.text,c,a,u):void 0}function qc(n,a,c,u,p=!1){var h,T,k,O,H,J,de,Ae,xe;if(na(a,\"@types/\")){let Cn=_.Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1,Rn=QC(a,\"@types/\");Fe(u,Cn,Rn,a)}let tt=tne(a,!0);if(tt)return tt;let It=Gn(n),Tn=es(n)?n:((h=jn(n,Dd))==null?void 0:h.arguments[0])||((T=jn(n,gl))==null?void 0:T.moduleSpecifier)||((k=jn(n,ab))==null?void 0:k.moduleReference.expression)||((O=jn(n,Il))==null?void 0:O.moduleSpecifier)||((H=Tc(n)?n:n.parent&&Tc(n.parent)&&n.parent.name===n?n.parent:void 0)==null?void 0:H.name)||((J=ib(n)?n:void 0)==null?void 0:J.argument.literal),un=Tn&&es(Tn)?W_(It,Tn):It.impliedNodeFormat,Nn=$s(Y),en=kA(It,a,un),cn=en&&_q(Y,en,It),rr=en&&(!cn||cn===_.Module_0_was_resolved_to_1_but_jsx_is_not_set)&&e.getSourceFile(en.resolvedFileName);if(rr){if(cn&&Fe(u,cn,a,en.resolvedFileName),en.resolvedUsingTsExtension&&Fu(a)){let Cn=((de=jn(n,gl))==null?void 0:de.importClause)||jn(n,Kp(Nl,Il));(Cn&&!Cn.isTypeOnly||jn(n,Dd))&&Fe(u,_.A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_file_0_instead,Jt(L.checkDefined(r4(a))))}else if(en.resolvedUsingTsExtension&&!VL(Y,It.fileName)){let Cn=L.checkDefined(r4(a));Fe(u,_.An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled,Cn)}if(rr.symbol){if(en.isExternalLibraryImport&&!VR(en.extension)&&xE(!1,u,It,un,en,a),Nn===3||Nn===99){let Cn=It.impliedNodeFormat===1&&!jn(n,Dd)||!!jn(n,Nl),Rn=jn(n,Hr=>Mh(Hr)||Il(Hr)||gl(Hr)),Br=Rn&&Mh(Rn)?(Ae=Rn.assertions)==null?void 0:Ae.assertClause:Rn?.assertClause;if(Cn&&rr.impliedNodeFormat===99&&!qS(Br))if(jn(n,Nl))Fe(u,_.Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_cannot_be_imported_with_require_Use_an_ECMAScript_import_instead,a);else{let Hr,qi=Hm(It.fileName);if(qi===\".ts\"||qi===\".js\"||qi===\".tsx\"||qi===\".jsx\"){let wa=It.packageJsonScope,Xc=qi===\".ts\"?\".mts\":qi===\".js\"?\".mjs\":void 0;wa&&!wa.contents.packageJsonContent.type?Xc?Hr=da(void 0,_.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1,Xc,vi(wa.packageDirectory,\"package.json\")):Hr=da(void 0,_.To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0,vi(wa.packageDirectory,\"package.json\")):Xc?Hr=da(void 0,_.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module,Xc):Hr=da(void 0,_.To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module)}Lo.add(Lh(Gn(u),u,da(Hr,_.The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_referenced_file_is_an_ECMAScript_module_and_cannot_be_imported_with_require_Consider_writing_a_dynamic_import_0_call_instead,a)))}}return No(rr.symbol)}c&&Fe(u,_.File_0_is_not_a_module,rr.fileName);return}if(Ka){let Cn=JU(Ka,Rn=>Rn.pattern,a);if(Cn){let Rn=vo&&vo.get(a);return No(Rn||Cn.symbol)}}if(en&&!VR(en.extension)&&cn===void 0||cn===_.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type){if(p){let Cn=_.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented;Fe(u,Cn,a,en.resolvedFileName)}else xE(ge&&!!c,u,It,un,en,a);return}if(c){if(en){let Cn=e.getProjectReferenceRedirect(en.resolvedFileName);if(Cn){Fe(u,_.Output_file_0_has_not_been_built_from_source_file_1,Cn,en.resolvedFileName);return}}if(cn)Fe(u,cn,a,en.resolvedFileName);else{let Cn=Jd(a)&&!gA(a),Rn=Nn===3||Nn===99;if(!RT(Y)&&Gc(a,\".json\")&&Nn!==1&&l4(Y))Fe(u,_.Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension,a);else if(un===99&&Rn&&Cn){let Br=_a(a,ni(It.path)),Hr=(xe=bx.find(([qi,wa])=>e.fileExists(Br+qi)))==null?void 0:xe[1];Hr?Fe(u,_.Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0,a+Hr):Fe(u,_.Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path)}else Fe(u,c,a)}}return;function Jt(Cn){let Rn=UR(a,Cn);if(SW(ie)||un===99){let Br=Fu(a)&&VL(Y);return Rn+(Cn===\".mts\"||Cn===\".d.mts\"?Br?\".mts\":\".mjs\":Cn===\".cts\"||Cn===\".d.mts\"?Br?\".cts\":\".cjs\":Br?\".ts\":\".js\")}return Rn}}function xE(n,a,c,u,{packageId:p,resolvedFileName:h},T){var k,O;let H;if(!fl(T)&&p){let J=(O=(k=c.resolvedModules)==null?void 0:k.get(T,u))==null?void 0:O.node10Result;H=J?da(void 0,_.There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The_1_library_may_need_to_update_its_package_json_or_typings,J,J.indexOf(Wg+\"@types/\")>-1?`@types/${UL(p.name)}`:p.name):oh(p.name)?da(void 0,_.If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_Slash_Slashgithub_com_SlashDefinitelyTyped_SlashDefinitelyTyped_Slashtree_Slashmaster_Slashtypes_Slash_1,p.name,UL(p.name)):zb(p.name)?da(void 0,_.If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_declare_module_1,p.name,T):da(void 0,_.Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0,T,UL(p.name))}Ip(n,a,da(H,_.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type,T,h))}function oh(n){return t().has(rF(n))}function zb(n){return!!t().get(n)}function Vu(n,a){if(n?.exports){let c=Ac(n.exports.get(\"export=\"),a),u=Em(No(c),No(n));return No(u)||n}}function Em(n,a){if(!n||n===Ht||n===a||a.exports.size===1||n.flags&2097152)return n;let c=Ai(n);if(c.cjsExportMerged)return c.cjsExportMerged;let u=n.flags&33554432?n:Pb(n);return u.flags=u.flags|512,u.exports===void 0&&(u.exports=Ua()),a.exports.forEach((p,h)=>{h!==\"export=\"&&u.exports.set(h,u.exports.has(h)?C_(u.exports.get(h),p):p)}),Ai(u).cjsExportMerged=u,c.cjsExportMerged=u}function Jb(n,a,c,u){var p;let h=Vu(n,c);if(!c&&h){if(!u&&!(h.flags&1539)&&!nc(h,308)){let k=ie>=5?\"allowSyntheticDefaultImports\":\"esModuleInterop\";return Fe(a,_.This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export,k),h}let T=a.parent;if(gl(T)&&VA(T)||Dd(T)){let k=Dd(T)?T.arguments[0]:T.moduleSpecifier,O=zn(h),H=lIe(O,h,n,k);if(H)return Lv(h,H,T);let J=(p=n?.declarations)==null?void 0:p.find(Li),de=J&&bE(ty(k),J.impliedNodeFormat);if(f_(Y)||de){let Ae=nM(O,0);if((!Ae||!Ae.length)&&(Ae=nM(O,1)),Ae&&Ae.length||ja(O,\"default\",!0)||de){let xe=uIe(O,h,n,k);return Lv(h,xe,T)}}}}return h}function Lv(n,a,c){let u=wo(n.flags,n.escapedName);u.declarations=n.declarations?n.declarations.slice():[],u.parent=n.parent,u.links.target=n,u.links.originatingImport=c,n.valueDeclaration&&(u.valueDeclaration=n.valueDeclaration),n.constEnumOnlyModule&&(u.constEnumOnlyModule=!0),n.members&&(u.members=new Map(n.members)),n.exports&&(u.exports=new Map(n.exports));let p=R_(a);return u.links.type=ls(u,p.members,Je,Je,p.indexInfos),u}function AE(n){return n.exports.get(\"export=\")!==void 0}function sy(n){return ene(sh(n))}function C1(n){let a=sy(n),c=Vu(n);if(c!==n){let u=zn(c);CE(u)&&si(a,Jo(u))}return a}function kv(n,a){sh(n).forEach((p,h)=>{LE(h)||a(p,h)});let u=Vu(n);if(u!==n){let p=zn(u);CE(p)&&MJe(p,(h,T)=>{a(h,T)})}}function rg(n,a){let c=sh(a);if(c)return c.get(n)}function of(n,a){let c=rg(n,a);if(c)return c;let u=Vu(a);if(u===a)return;let p=zn(u);return CE(p)?ja(p,n):void 0}function CE(n){return!(n.flags&134348796||Ur(n)&1||_f(n)||po(n))}function Gd(n){return n.flags&6256?Mte(n,\"resolvedExports\"):n.flags&1536?sh(n):n.exports||q}function sh(n){let a=Ai(n);if(!a.resolvedExports){let{exports:c,typeOnlyExportStarMap:u}=Dx(n);a.resolvedExports=c,a.typeOnlyExportStarMap=u}return a.resolvedExports}function Dv(n,a,c,u){a&&a.forEach((p,h)=>{if(h===\"default\")return;let T=n.get(h);if(!T)n.set(h,p),c&&u&&c.set(h,{specifierText:Qc(u.moduleSpecifier)});else if(c&&u&&T&&Ac(T)!==Ac(p)){let k=c.get(h);k.exportsWithDuplicate?k.exportsWithDuplicate.push(u):k.exportsWithDuplicate=[u]}})}function Dx(n){let a=[],c,u=new Set;n=Vu(n);let p=h(n)||q;return c&&u.forEach(T=>c.delete(T)),{exports:p,typeOnlyExportStarMap:c};function h(T,k,O){if(!O&&T?.exports&&T.exports.forEach((de,Ae)=>u.add(Ae)),!(T&&T.exports&&Of(a,T)))return;let H=new Map(T.exports),J=T.exports.get(\"__export\");if(J){let de=Ua(),Ae=new Map;if(J.declarations)for(let xe of J.declarations){let tt=Gl(xe,xe.moduleSpecifier),It=h(tt,xe,O||xe.isTypeOnly);Dv(de,It,Ae,xe)}Ae.forEach(({exportsWithDuplicate:xe},tt)=>{if(!(tt===\"export=\"||!(xe&&xe.length)||H.has(tt)))for(let It of xe)Lo.add(hr(It,_.Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity,Ae.get(tt).specifierText,Gi(tt)))}),Dv(H,de)}return k?.isTypeOnly&&(c??(c=new Map),H.forEach((de,Ae)=>c.set(Ae,k))),H}}function No(n){let a;return n&&n.mergeId&&(a=gv[n.mergeId])?a:n}function fr(n){return No(n.symbol&&zG(n.symbol))}function vd(n){return $p(n)?fr(n):void 0}function ju(n){return No(n.parent&&zG(n.parent))}function I1(n,a){let c=Gn(a),u=zo(c),p=Ai(n),h;if(p.extendedContainersByFile&&(h=p.extendedContainersByFile.get(u)))return h;if(c&&c.imports){for(let k of c.imports){if(ws(k))continue;let O=Gl(a,k,!0);!O||!ly(O,n)||(h=Sn(h,O))}if(Fn(h))return(p.extendedContainersByFile||(p.extendedContainersByFile=new Map)).set(u,h),h}if(p.extendedContainers)return p.extendedContainers;let T=e.getSourceFiles();for(let k of T){if(!Lc(k))continue;let O=fr(k);ly(O,n)&&(h=Sn(h,O))}return p.extendedContainers=h||Je}function IE(n,a,c){let u=ju(n);if(u&&!(n.flags&262144)){let T=Zi(u.declarations,h),k=a&&I1(n,a),O=cy(u,c);if(a&&u.flags&og(c)&&Rv(u,a,1920,!1))return Sn(Qi(Qi([u],T),k),O);let H=!(u.flags&og(c))&&u.flags&788968&&gs(u).flags&524288&&c===111551?DE(a,de=>Ld(de,Ae=>{if(Ae.flags&og(c)&&zn(Ae)===gs(u))return Ae})):void 0,J=H?[H,...T,u]:[...T,u];return J=Sn(J,O),J=si(J,k),J}let p=Zi(n.declarations,T=>{if(!lu(T)&&T.parent){if(sg(T.parent))return fr(T.parent);if(Tp(T.parent)&&T.parent.parent&&Vu(fr(T.parent.parent))===n)return fr(T.parent.parent)}if(_u(T)&&ar(T.parent)&&T.parent.operatorToken.kind===63&&Us(T.parent.left)&&bc(T.parent.left.expression))return Bm(T.parent.left)||TT(T.parent.left.expression)?fr(Gn(T)):(Ic(T.parent.left.expression),Rr(T.parent.left.expression).resolvedSymbol)});if(!Fn(p))return;return Zi(p,T=>ly(T,n)?T:void 0);function h(T){return u&&wx(T,u)}}function cy(n,a){let c=!!Fn(n.declarations)&&Vo(n.declarations);if(a&111551&&c&&c.parent&&wi(c.parent)&&(rs(c)&&c===c.parent.initializer||Rd(c)&&c===c.parent.type))return fr(c.parent)}function wx(n,a){let c=lh(n),u=c&&c.exports&&c.exports.get(\"export=\");return u&&wp(u,a)?c:void 0}function ly(n,a){if(n===ju(a))return a;let c=n.exports&&n.exports.get(\"export=\");if(c&&wp(c,a))return n;let u=Gd(n),p=u.get(a.escapedName);return p&&wp(p,a)?p:Ld(u,h=>{if(wp(h,a))return h})}function wp(n,a){if(No(Ac(No(n)))===No(Ac(No(a))))return n}function tp(n){return No(n&&(n.flags&1048576)!==0&&n.exportSymbol||n)}function ig(n,a){return!!(n.flags&111551||n.flags&2097152&&Fl(n)&111551&&(a||!nd(n)))}function wv(n){let a=n.members;for(let c of a)if(c.kind===173&&Pf(c.body))return c}function ch(n){var a;let c=new g(qe,n);return v++,c.id=v,(a=ai)==null||a.recordType(c),c}function Rp(n,a){let c=ch(n);return c.symbol=a,c}function L1(n){return new g(qe,n)}function Cc(n,a,c=0){let u=ch(n);return u.intrinsicName=a,u.objectFlags=c,u}function Bd(n,a){let c=Rp(524288,a);return c.objectFlags=n,c.members=void 0,c.properties=void 0,c.callSignatures=void 0,c.constructSignatures=void 0,c.indexInfos=void 0,c}function Tm(){return Gr(lo(fF.keys(),ff))}function rd(n){return Rp(262144,n)}function LE(n){return n.charCodeAt(0)===95&&n.charCodeAt(1)===95&&n.charCodeAt(2)!==95&&n.charCodeAt(2)!==64&&n.charCodeAt(2)!==35}function uy(n){let a;return n.forEach((c,u)=>{ag(c,u)&&(a||(a=[])).push(c)}),a||Je}function ag(n,a){return!LE(a)&&ig(n)}function Rx(n){let a=uy(n),c=ane(n);return c?Qi(a,[c]):a}function sf(n,a,c,u,p){let h=n;return h.members=a,h.properties=Je,h.callSignatures=c,h.constructSignatures=u,h.indexInfos=p,a!==q&&(h.properties=uy(a)),h}function ls(n,a,c,u,p){return sf(Bd(16,n),a,c,u,p)}function kE(n){if(n.constructSignatures.length===0)return n;if(n.objectTypeWithoutAbstractConstructSignatures)return n.objectTypeWithoutAbstractConstructSignatures;let a=Pr(n.constructSignatures,u=>!(u.flags&4));if(n.constructSignatures===a)return n;let c=ls(n.symbol,n.members,n.callSignatures,vt(a)?a:Je,n.indexInfos);return n.objectTypeWithoutAbstractConstructSignatures=c,c.objectTypeWithoutAbstractConstructSignatures=c,c}function DE(n,a){let c;for(let u=n;u;u=u.parent){if(Qp(u)&&u.locals&&!gm(u)&&(c=a(u.locals,void 0,!0,u)))return c;switch(u.kind){case 308:if(!kd(u))break;case 264:let p=fr(u);if(c=a(p?.exports||q,void 0,!0,u))return c;break;case 260:case 228:case 261:let h;if((fr(u).members||q).forEach((T,k)=>{T.flags&788968&&(h||(h=Ua())).set(k,T)}),h&&(c=a(h,void 0,!1,u)))return c;break}}return a(Ne,void 0,!0)}function og(n){return n===111551?111551:1920}function Rv(n,a,c,u,p=new Map){if(!(n&&!wE(n)))return;let h=Ai(n),T=h.accessibleChainCache||(h.accessibleChainCache=new Map),k=DE(a,(un,Nn,en,cn)=>cn),O=`${u?0:1}|${k&&zo(k)}|${c}`;if(T.has(O))return T.get(O);let H=$a(n),J=p.get(H);J||p.set(H,J=[]);let de=DE(a,Ae);return T.set(O,de),de;function Ae(un,Nn,en){if(!Of(J,un))return;let cn=It(un,Nn,en);return J.pop(),cn}function xe(un,Nn){return!k1(un,a,Nn)||!!Rv(un.parent,a,og(Nn),u,p)}function tt(un,Nn,en){return(n===(Nn||un)||No(n)===No(Nn||un))&&!vt(un.declarations,sg)&&(en||xe(No(un),c))}function It(un,Nn,en){return tt(un.get(n.escapedName),void 0,Nn)?[n]:Ld(un,rr=>{if(rr.flags&2097152&&rr.escapedName!==\"export=\"&&rr.escapedName!==\"default\"&&!(o4(rr)&&a&&Lc(Gn(a)))&&(!u||vt(rr.declarations,ab))&&(!en||!vt(rr.declarations,cce))&&(Nn||!nc(rr,278))){let Jt=wc(rr),Cn=Tn(rr,Jt,Nn);if(Cn)return Cn}if(rr.escapedName===n.escapedName&&rr.exportSymbol&&tt(No(rr.exportSymbol),void 0,Nn))return[n]})||(un===Ne?Tn(Ye,Ye,Nn):void 0)}function Tn(un,Nn,en){if(tt(un,Nn,en))return[un];let cn=Gd(Nn),rr=cn&&Ae(cn,!0);if(rr&&xe(un,og(c)))return[un].concat(rr)}}function k1(n,a,c){let u=!1;return DE(a,p=>{let h=No(p.get(n.escapedName));if(!h)return!1;if(h===n)return!0;let T=h.flags&2097152&&!nc(h,278);return h=T?wc(h):h,(T?Fl(h):h.flags)&c?(u=!0,!0):!1}),u}function wE(n){if(n.declarations&&n.declarations.length){for(let a of n.declarations)switch(a.kind){case 169:case 171:case 174:case 175:continue;default:return!1}return!0}return!1}function RE(n,a){return bd(n,a,788968,!1,!0).accessibility===0}function OE(n,a){return bd(n,a,111551,!1,!0).accessibility===0}function NE(n,a,c){return bd(n,a,c,!1,!1).accessibility===0}function PE(n,a,c,u,p,h){if(!Fn(n))return;let T,k=!1;for(let O of n){let H=Rv(O,a,u,!1);if(H){T=O;let Ae=Ox(H[0],p);if(Ae)return Ae}if(h&&vt(O.declarations,sg)){if(p){k=!0;continue}return{accessibility:0}}let J=IE(O,a,u),de=PE(J,a,c,c===O?og(u):u,p,h);if(de)return de}if(k)return{accessibility:0};if(T)return{accessibility:1,errorSymbolName:E(c,a,u),errorModuleName:T!==c?E(T,a,1920):void 0}}function dy(n,a,c,u){return bd(n,a,c,u,!0)}function bd(n,a,c,u,p){if(n&&a){let h=PE([n],a,n,c,u,p);if(h)return h;let T=mn(n.declarations,lh);if(T){let k=lh(a);if(T!==k)return{accessibility:2,errorSymbolName:E(n,a,c),errorModuleName:E(T),errorNode:Yn(a)?a:void 0}}return{accessibility:1,errorSymbolName:E(n,a,c)}}return{accessibility:0}}function lh(n){let a=jn(n,dC);return a&&fr(a)}function dC(n){return lu(n)||n.kind===308&&kd(n)}function sg(n){return b6(n)||n.kind===308&&kd(n)}function Ox(n,a){let c;if(!Ji(Pr(n.declarations,h=>h.kind!==79),u))return;return{accessibility:0,aliasesToMakeVisible:c};function u(h){var T,k;if(!Xf(h)){let O=x1(h);if(O&&!Mr(O,1)&&Xf(O.parent))return p(h,O);if(wi(h)&&Bc(h.parent.parent)&&!Mr(h.parent.parent,1)&&Xf(h.parent.parent.parent))return p(h,h.parent.parent);if(E6(h)&&!Mr(h,1)&&Xf(h.parent))return p(h,h);if(Wo(h)){if(n.flags&2097152&&Yn(h)&&((T=h.parent)!=null&&T.parent)&&wi(h.parent.parent)&&((k=h.parent.parent.parent)!=null&&k.parent)&&Bc(h.parent.parent.parent.parent)&&!Mr(h.parent.parent.parent.parent,1)&&h.parent.parent.parent.parent.parent&&Xf(h.parent.parent.parent.parent.parent))return p(h,h.parent.parent.parent.parent);if(n.flags&2){let H=jn(h,Bc);return Mr(H,1)?!0:Xf(H.parent)?p(h,H):!1}}return!1}return!0}function p(h,T){return a&&(Rr(h).isVisible=!0,c=xg(c,T)),!0}}function Nx(n,a){let c;n.parent.kind===183||n.parent.kind===230&&!Gm(n.parent)||n.parent.kind===164?c=1160127:n.kind===163||n.kind===208||n.parent.kind===268?c=1920:c=788968;let u=Yd(n),p=zs(a,u.escapedText,c,void 0,void 0,!1);return p&&p.flags&262144&&c&788968?{accessibility:0}:!p&&LT(u)&&dy(fr(Ku(u,!1,!1)),u,c,!1).accessibility===0?{accessibility:0}:p&&Ox(p,!0)||{accessibility:1,errorSymbolName:Qc(u),errorNode:u}}function E(n,a,c,u=4,p){let h=70221824;u&2&&(h|=128),u&1&&(h|=512),u&8&&(h|=16384),u&32&&(h|=134217728),u&16&&(h|=1073741824);let T=u&4?Be.symbolToNode:Be.symbolToEntityName;return p?k(p).getText():SI(k);function k(O){let H=T(n,c,a,h),J=a?.kind===308?XK():rE(),de=a&&Gn(a);return J.writeNode(4,H,de,O),O}}function ne(n,a,c=0,u,p){return p?h(p).getText():SI(h);function h(T){let k;c&262144?k=u===1?182:181:k=u===1?177:176;let O=Be.signatureToSignatureDeclaration(n,k,a,qr(c)|70221824|512),H=fN(),J=a&&Gn(a);return H.writeNode(4,O,J,XH(T)),T}}function Ee(n,a,c=1064960,u=SR(\"\")){let p=Y.noErrorTruncation||c&1,h=Be.typeToTypeNode(n,a,qr(c)|70221824|(p?1:0));if(h===void 0)return L.fail(\"should always get typenode\");let T=n!==nt?rE():qK(),k=a&&Gn(a);T.writeNode(4,h,k,u);let O=u.getText(),H=p?x4*2:KR*2;return H&&O&&O.length>=H?O.substr(0,H-3)+\"...\":O}function Wt(n,a){let c=ci(n.symbol)?Ee(n,n.symbol.valueDeclaration):Ee(n),u=ci(a.symbol)?Ee(a,a.symbol.valueDeclaration):Ee(a);return c===u&&(c=lr(n),u=lr(a)),[c,u]}function lr(n){return Ee(n,void 0,64)}function ci(n){return n&&!!n.valueDeclaration&&ot(n.valueDeclaration)&&!$f(n.valueDeclaration)}function qr(n=0){return n&848330091}function Ti(n){return!!n.symbol&&!!(n.symbol.flags&32)&&(n===vu(n.symbol)||!!(n.flags&524288)&&!!(Ur(n)&16777216))}function Wa(){return{typeToTypeNode:(et,he,Bn,Mn)=>a(he,Bn,Mn,or=>u(et,or)),indexInfoToIndexSignatureDeclaration:(et,he,Bn,Mn)=>a(he,Bn,Mn,or=>J(et,or,void 0)),signatureToSignatureDeclaration:(et,he,Bn,Mn,or)=>a(Bn,Mn,or,_r=>de(et,he,_r)),symbolToEntityName:(et,he,Bn,Mn,or)=>a(Bn,Mn,or,_r=>qi(et,_r,he,!1)),symbolToExpression:(et,he,Bn,Mn,or)=>a(Bn,Mn,or,_r=>wa(et,_r,he)),symbolToTypeParameterDeclarations:(et,he,Bn,Mn)=>a(he,Bn,Mn,or=>en(et,or)),symbolToParameterDeclaration:(et,he,Bn,Mn)=>a(he,Bn,Mn,or=>It(et,or)),typeParameterToDeclaration:(et,he,Bn,Mn)=>a(he,Bn,Mn,or=>tt(et,or)),symbolTableToDeclarationStatements:(et,he,Bn,Mn,or)=>a(he,Bn,Mn,_r=>Tu(et,_r,or)),symbolToNode:(et,he,Bn,Mn,or)=>a(Bn,Mn,or,_r=>n(et,_r,he))};function n(et,he,Bn){if(he.flags&1073741824){if(et.valueDeclaration){let or=sa(et.valueDeclaration);if(or&&ts(or))return or}let Mn=Ai(et).nameType;if(Mn&&Mn.flags&9216)return he.enclosingDeclaration=Mn.symbol.valueDeclaration,D.createComputedPropertyName(wa(Mn.symbol,he,Bn))}return wa(et,he,Bn)}function a(et,he,Bn,Mn){L.assert(et===void 0||(et.flags&8)===0);let or=Bn?.trackSymbol?Bn.moduleResolverHost:he&134217728?hPe(e):void 0,_r={enclosingDeclaration:et,flags:he||0,tracker:void 0,encounteredError:!1,reportedDiagnostic:!1,visitedTypes:void 0,symbolDepth:void 0,inferTypeParameters:void 0,approximateLength:0};_r.tracker=new iN(_r,Bn,or);let ua=Mn(_r);return _r.truncating&&_r.flags&1&&_r.tracker.reportTruncationError(),_r.encounteredError?void 0:ua}function c(et){return et.truncating?et.truncating:et.truncating=et.approximateLength>(et.flags&1?x4:KR)}function u(et,he){let Bn=he.flags,Mn=p(et,he);return he.flags=Bn,Mn}function p(et,he){var Bn,Mn;o&&o.throwIfCancellationRequested&&o.throwIfCancellationRequested();let or=he.flags&8388608;if(he.flags&=-8388609,!et){if(!(he.flags&262144)){he.encounteredError=!0;return}return he.approximateLength+=3,D.createKeywordTypeNode(131)}if(he.flags&536870912||(et=O_(et)),et.flags&1)return et.aliasSymbol?D.createTypeReferenceNode(Cn(et.aliasSymbol),O(et.aliasTypeArguments,he)):et===nt?nO(D.createKeywordTypeNode(131),3,\"unresolved\"):(he.approximateLength+=3,D.createKeywordTypeNode(et===Q?139:131));if(et.flags&2)return D.createKeywordTypeNode(157);if(et.flags&4)return he.approximateLength+=6,D.createKeywordTypeNode(152);if(et.flags&8)return he.approximateLength+=6,D.createKeywordTypeNode(148);if(et.flags&64)return he.approximateLength+=6,D.createKeywordTypeNode(160);if(et.flags&16&&!et.aliasSymbol)return he.approximateLength+=7,D.createKeywordTypeNode(134);if(et.flags&1056){if(et.symbol.flags&8){let Xt=ju(et.symbol),er=Rn(Xt,he,788968);if(gs(Xt)===et)return er;let Sr=fc(et.symbol);return i_(Sr,0)?Un(er,D.createTypeReferenceNode(Sr,void 0)):Mh(er)?(er.isTypeOf=!0,D.createIndexedAccessTypeNode(er,D.createLiteralTypeNode(D.createStringLiteral(Sr)))):m_(er)?D.createIndexedAccessTypeNode(D.createTypeQueryNode(er.typeName),D.createLiteralTypeNode(D.createStringLiteral(Sr))):L.fail(\"Unhandled type node kind returned from `symbolToTypeNode`.\")}return Rn(et.symbol,he,788968)}if(et.flags&128)return he.approximateLength+=et.value.length+2,D.createLiteralTypeNode(Jn(D.createStringLiteral(et.value,!!(he.flags&268435456)),33554432));if(et.flags&256){let Xt=et.value;return he.approximateLength+=(\"\"+Xt).length,D.createLiteralTypeNode(Xt<0?D.createPrefixUnaryExpression(40,D.createNumericLiteral(-Xt)):D.createNumericLiteral(Xt))}if(et.flags&2048)return he.approximateLength+=j0(et.value).length+1,D.createLiteralTypeNode(D.createBigIntLiteral(et.value));if(et.flags&512)return he.approximateLength+=et.intrinsicName.length,D.createLiteralTypeNode(et.intrinsicName===\"true\"?D.createTrue():D.createFalse());if(et.flags&8192){if(!(he.flags&1048576)){if(OE(et.symbol,he.enclosingDeclaration))return he.approximateLength+=6,Rn(et.symbol,he,111551);he.tracker.reportInaccessibleUniqueSymbolError&&he.tracker.reportInaccessibleUniqueSymbolError()}return he.approximateLength+=13,D.createTypeOperatorNode(156,D.createKeywordTypeNode(153))}if(et.flags&16384)return he.approximateLength+=4,D.createKeywordTypeNode(114);if(et.flags&32768)return he.approximateLength+=9,D.createKeywordTypeNode(155);if(et.flags&65536)return he.approximateLength+=4,D.createLiteralTypeNode(D.createNull());if(et.flags&131072)return he.approximateLength+=5,D.createKeywordTypeNode(144);if(et.flags&4096)return he.approximateLength+=6,D.createKeywordTypeNode(153);if(et.flags&67108864)return he.approximateLength+=6,D.createKeywordTypeNode(149);if(lL(et))return he.flags&4194304&&(!he.encounteredError&&!(he.flags&32768)&&(he.encounteredError=!0),(Mn=(Bn=he.tracker).reportInaccessibleThisError)==null||Mn.call(Bn)),he.approximateLength+=4,D.createThisTypeNode();if(!or&&et.aliasSymbol&&(he.flags&16384||RE(et.aliasSymbol,he.enclosingDeclaration))){let Xt=O(et.aliasTypeArguments,he);return LE(et.aliasSymbol.escapedName)&&!(et.aliasSymbol.flags&32)?D.createTypeReferenceNode(D.createIdentifier(\"\"),Xt):Fn(Xt)===1&&et.aliasSymbol===$o.symbol?D.createArrayTypeNode(Xt[0]):Rn(et.aliasSymbol,he,788968,Xt)}let _r=Ur(et);if(_r&4)return L.assert(!!(et.flags&524288)),et.node?Bt(et,hn):hn(et);if(et.flags&262144||_r&3){if(et.flags&262144&&ya(he.inferTypeParameters,et)){he.approximateLength+=fc(et.symbol).length+6;let er,Sr=eu(et);if(Sr){let Dr=jxe(et,!0);Dr&&ph(Sr,Dr)||(he.approximateLength+=9,er=Sr&&u(Sr,he))}return D.createInferTypeNode(xe(et,he,er))}if(he.flags&4&&et.flags&262144&&!RE(et.symbol,he.enclosingDeclaration)){let er=Hr(et,he);return he.approximateLength+=vr(er).length,D.createTypeReferenceNode(D.createIdentifier(vr(er)),void 0)}if(et.symbol)return Rn(et.symbol,he,788968);let Xt=(et===ss||et===qs)&&F&&F.symbol?(et===qs?\"sub-\":\"super-\")+fc(F.symbol):\"?\";return D.createTypeReferenceNode(D.createIdentifier(Xt),void 0)}if(et.flags&1048576&&et.origin&&(et=et.origin),et.flags&3145728){let Xt=et.flags&1048576?Ed(et.types):et.types;if(Fn(Xt)===1)return u(Xt[0],he);let er=O(Xt,he,!0);if(er&&er.length>0)return et.flags&1048576?D.createUnionTypeNode(er):D.createIntersectionTypeNode(er);!he.encounteredError&&!(he.flags&262144)&&(he.encounteredError=!0);return}if(_r&48)return L.assert(!!(et.flags&524288)),Ct(et);if(et.flags&4194304){let Xt=et.type;he.approximateLength+=6;let er=u(Xt,he);return D.createTypeOperatorNode(141,er)}if(et.flags&134217728){let Xt=et.texts,er=et.types,Sr=D.createTemplateHead(Xt[0]),Dr=D.createNodeArray(on(er,(Ii,Bo)=>D.createTemplateLiteralTypeSpan(u(Ii,he),(Bo<er.length-1?D.createTemplateMiddle:D.createTemplateTail)(Xt[Bo+1]))));return he.approximateLength+=2,D.createTemplateLiteralType(Sr,Dr)}if(et.flags&268435456){let Xt=u(et.type,he);return Rn(et.symbol,he,788968,[Xt])}if(et.flags&8388608){let Xt=u(et.objectType,he),er=u(et.indexType,he);return he.approximateLength+=2,D.createIndexedAccessTypeNode(Xt,er)}if(et.flags&16777216)return Bt(et,Xt=>ua(Xt));if(et.flags&33554432)return u(et.baseType,he);return L.fail(\"Should be unreachable.\");function ua(Xt){let er=u(Xt.checkType,he);if(he.approximateLength+=15,he.flags&4&&Xt.root.isDistributive&&!(Xt.checkType.flags&262144)){let ys=rd(wo(262144,\"T\")),ds=Hr(ys,he),Bl=D.createTypeReferenceNode(ds);he.approximateLength+=37;let ze=O1(Xt.root.checkType,ys,Xt.mapper),dt=he.inferTypeParameters;he.inferTypeParameters=Xt.root.inferTypeParameters;let Ut=u(Oi(Xt.root.extendsType,ze),he);he.inferTypeParameters=dt;let wn=_i(Oi($r(Xt.root.node.trueType),ze)),Zn=_i(Oi($r(Xt.root.node.falseType),ze));return D.createConditionalTypeNode(er,D.createInferTypeNode(D.createTypeParameterDeclaration(void 0,D.cloneNode(Bl.typeName))),D.createConditionalTypeNode(D.createTypeReferenceNode(D.cloneNode(ds)),u(Xt.checkType,he),D.createConditionalTypeNode(Bl,Ut,wn,Zn),D.createKeywordTypeNode(144)),D.createKeywordTypeNode(144))}let Sr=he.inferTypeParameters;he.inferTypeParameters=Xt.root.inferTypeParameters;let Dr=u(Xt.extendsType,he);he.inferTypeParameters=Sr;let Ii=_i(Hv(Xt)),Bo=_i(Wv(Xt));return D.createConditionalTypeNode(er,Dr,Ii,Bo)}function _i(Xt){var er,Sr,Dr;return Xt.flags&1048576?(er=he.visitedTypes)!=null&&er.has(ru(Xt))?(he.flags&131072||(he.encounteredError=!0,(Dr=(Sr=he.tracker)==null?void 0:Sr.reportCyclicStructureError)==null||Dr.call(Sr)),h(he)):Bt(Xt,Ii=>u(Ii,he)):u(Xt,he)}function ur(Xt){return Yk(Xt)&&!(yC(Xt).flags&262144)}function st(Xt){L.assert(!!(Xt.flags&524288));let er=Xt.declaration.readonlyToken?D.createToken(Xt.declaration.readonlyToken.kind):void 0,Sr=Xt.declaration.questionToken?D.createToken(Xt.declaration.questionToken.kind):void 0,Dr,Ii;if(Yk(Xt)){if(ur(Xt)&&he.flags&4){let dt=rd(wo(262144,\"T\")),Ut=Hr(dt,he);Ii=D.createTypeReferenceNode(Ut)}Dr=D.createTypeOperatorNode(141,Ii||u(yC(Xt),he))}else Dr=u(rp(Xt),he);let Bo=xe(w_(Xt),he,Dr),ys=Xt.declaration.nameType?u(by(Xt),he):void 0,ds=u(KE(_h(Xt),!!(Pp(Xt)&4)),he),Bl=D.createMappedTypeNode(er,Bo,ys,Sr,ds,void 0);he.approximateLength+=10;let ze=Jn(Bl,1);if(ur(Xt)&&he.flags&4){let dt=Oi(eu($r(Xt.declaration.typeParameter.constraint.type))||ue,Xt.mapper);return D.createConditionalTypeNode(u(yC(Xt),he),D.createInferTypeNode(D.createTypeParameterDeclaration(void 0,D.cloneNode(Ii.typeName),dt.flags&2?void 0:u(dt,he))),ze,D.createKeywordTypeNode(144))}return ze}function Ct(Xt){var er,Sr;let Dr=Xt.id,Ii=Xt.symbol;if(Ii){let ys=Ti(Xt)?788968:111551;if(cp(Ii.valueDeclaration))return Rn(Ii,he,ys);if(Ii.flags&32&&!Da(Ii)&&!(Ii.valueDeclaration&&Yr(Ii.valueDeclaration)&&he.flags&2048&&(!sl(Ii.valueDeclaration)||dy(Ii,he.enclosingDeclaration,ys,!1).accessibility!==0))||Ii.flags&896||Bo())return Rn(Ii,he,ys);if((er=he.visitedTypes)!=null&&er.has(Dr)){let ds=fy(Xt);return ds?Rn(ds,he,788968):h(he)}else return Bt(Xt,Ft)}else{if(!!(Ur(Xt)&8388608)){let ds=Xt;if(vL(ds.node)){let Bl=no(he,ds.node);if(Bl)return Bl}return(Sr=he.visitedTypes)!=null&&Sr.has(Dr)?h(he):Bt(Xt,Ft)}return Ft(Xt)}function Bo(){var ys;let ds=!!(Ii.flags&8192)&&vt(Ii.declarations,ze=>Ca(ze)),Bl=!!(Ii.flags&16)&&(Ii.parent||mn(Ii.declarations,ze=>ze.parent.kind===308||ze.parent.kind===265));if(ds||Bl)return(!!(he.flags&4096)||((ys=he.visitedTypes)==null?void 0:ys.has(Dr)))&&(!(he.flags&8)||OE(Ii,he.enclosingDeclaration))}}function Bt(Xt,er){var Sr,Dr;let Ii=Xt.id,Bo=Ur(Xt)&16&&Xt.symbol&&Xt.symbol.flags&32,ys=Ur(Xt)&4&&Xt.node?\"N\"+zo(Xt.node):Xt.flags&16777216?\"N\"+zo(Xt.root.node):Xt.symbol?(Bo?\"+\":\"\")+$a(Xt.symbol):void 0;he.visitedTypes||(he.visitedTypes=new Set),ys&&!he.symbolDepth&&(he.symbolDepth=new Map);let ds=he.enclosingDeclaration&&Rr(he.enclosingDeclaration),Bl=`${ru(Xt)}|${he.flags}`;ds&&(ds.serializedTypes||(ds.serializedTypes=new Map));let ze=(Sr=ds?.serializedTypes)==null?void 0:Sr.get(Bl);if(ze)return ze.truncating&&(he.truncating=!0),he.approximateLength+=ze.addedLength,fn(ze.node);let dt;if(ys){if(dt=he.symbolDepth.get(ys)||0,dt>10)return h(he);he.symbolDepth.set(ys,dt+1)}he.visitedTypes.add(Ii);let Ut=he.approximateLength,wn=er(Xt),Zn=he.approximateLength-Ut;return!he.reportedDiagnostic&&!he.encounteredError&&((Dr=ds?.serializedTypes)==null||Dr.set(Bl,{node:wn,truncating:he.truncating,addedLength:Zn})),he.visitedTypes.delete(Ii),ys&&he.symbolDepth.set(ys,dt),wn;function fn(Ar){return!ws(Ar)&&ea(Ar)===Ar?Ar:it(D.cloneNode(xn(Ar,fn,Bh,sr)),Ar)}function sr(Ar,Ei,ia,Aa,Ra){return Ar&&Ar.length===0?it(D.createNodeArray(void 0,Ar.hasTrailingComma),Ar):On(Ar,Ei,ia,Aa,Ra)}}function Ft(Xt){if(df(Xt)||Xt.containsError)return st(Xt);let er=R_(Xt);if(!er.properties.length&&!er.indexInfos.length){if(!er.callSignatures.length&&!er.constructSignatures.length)return he.approximateLength+=2,Jn(D.createTypeLiteralNode(void 0),1);if(er.callSignatures.length===1&&!er.constructSignatures.length){let ys=er.callSignatures[0];return de(ys,181,he)}if(er.constructSignatures.length===1&&!er.callSignatures.length){let ys=er.constructSignatures[0];return de(ys,182,he)}}let Sr=Pr(er.constructSignatures,ys=>!!(ys.flags&4));if(vt(Sr)){let ys=on(Sr,HE);return er.callSignatures.length+(er.constructSignatures.length-Sr.length)+er.indexInfos.length+(he.flags&2048?Oy(er.properties,Bl=>!(Bl.flags&4194304)):Fn(er.properties))&&ys.push(kE(er)),u(so(ys),he)}let Dr=he.flags;he.flags|=4194304;let Ii=Di(er);he.flags=Dr;let Bo=D.createTypeLiteralNode(Ii);return he.approximateLength+=2,Jn(Bo,he.flags&1024?0:1),Bo}function hn(Xt){let er=Ko(Xt);if(Xt.target===$o||Xt.target===jo){if(he.flags&2){let Ii=u(er[0],he);return D.createTypeReferenceNode(Xt.target===$o?\"Array\":\"ReadonlyArray\",[Ii])}let Sr=u(er[0],he),Dr=D.createArrayTypeNode(Sr);return Xt.target===$o?Dr:D.createTypeOperatorNode(146,Dr)}else if(Xt.target.objectFlags&8){if(er=Tl(er,(Sr,Dr)=>KE(Sr,!!(Xt.target.elementFlags[Dr]&2))),er.length>0){let Sr=Vv(Xt),Dr=O(er.slice(0,Sr),he);if(Dr){if(Xt.target.labeledElementDeclarations)for(let Bo=0;Bo<Dr.length;Bo++){let ys=Xt.target.elementFlags[Bo];Dr[Bo]=D.createNamedTupleMember(ys&12?D.createToken(25):void 0,D.createIdentifier(Gi(nU(Xt.target.labeledElementDeclarations[Bo]))),ys&2?D.createToken(57):void 0,ys&4?D.createArrayTypeNode(Dr[Bo]):Dr[Bo])}else for(let Bo=0;Bo<Math.min(Sr,Dr.length);Bo++){let ys=Xt.target.elementFlags[Bo];Dr[Bo]=ys&12?D.createRestTypeNode(ys&4?D.createArrayTypeNode(Dr[Bo]):Dr[Bo]):ys&2?D.createOptionalTypeNode(Dr[Bo]):Dr[Bo]}let Ii=Jn(D.createTupleTypeNode(Dr),1);return Xt.target.readonly?D.createTypeOperatorNode(146,Ii):Ii}}if(he.encounteredError||he.flags&524288){let Sr=Jn(D.createTupleTypeNode([]),1);return Xt.target.readonly?D.createTypeOperatorNode(146,Sr):Sr}he.encounteredError=!0;return}else{if(he.flags&2048&&Xt.symbol.valueDeclaration&&Yr(Xt.symbol.valueDeclaration)&&!OE(Xt.symbol,he.enclosingDeclaration))return Ct(Xt);{let Sr=Xt.target.outerTypeParameters,Dr=0,Ii;if(Sr){let Bl=Sr.length;for(;Dr<Bl;){let ze=Dr,dt=Hxe(Sr[Dr]);do Dr++;while(Dr<Bl&&Hxe(Sr[Dr])===dt);if(!GU(Sr,er,ze,Dr)){let Ut=O(er.slice(ze,Dr),he),wn=he.flags;he.flags|=16;let Zn=Rn(dt,he,788968,Ut);he.flags=wn,Ii=Ii?Un(Ii,Zn):Zn}}}let Bo;if(er.length>0){let Bl=(Xt.target.typeParameters||Je).length;Bo=O(er.slice(Dr,Bl),he)}let ys=he.flags;he.flags|=16;let ds=Rn(Xt.symbol,he,788968,Bo);return he.flags=ys,Ii?Un(Ii,ds):ds}}}function Un(Xt,er){if(Mh(Xt)){let Sr=Xt.typeArguments,Dr=Xt.qualifier;Dr&&(Re(Dr)?Sr!==NT(Dr)&&(Dr=Ug(D.cloneNode(Dr),Sr)):Sr!==NT(Dr.right)&&(Dr=D.updateQualifiedName(Dr,Dr.left,Ug(D.cloneNode(Dr.right),Sr)))),Sr=er.typeArguments;let Ii=yi(er);for(let Bo of Ii)Dr=Dr?D.createQualifiedName(Dr,Bo):Bo;return D.updateImportTypeNode(Xt,Xt.argument,Xt.assertions,Dr,Sr,Xt.isTypeOf)}else{let Sr=Xt.typeArguments,Dr=Xt.typeName;Re(Dr)?Sr!==NT(Dr)&&(Dr=Ug(D.cloneNode(Dr),Sr)):Sr!==NT(Dr.right)&&(Dr=D.updateQualifiedName(Dr,Dr.left,Ug(D.cloneNode(Dr.right),Sr))),Sr=er.typeArguments;let Ii=yi(er);for(let Bo of Ii)Dr=D.createQualifiedName(Dr,Bo);return D.updateTypeReferenceNode(Xt,Dr,Sr)}}function yi(Xt){let er=Xt.typeName,Sr=[];for(;!Re(er);)Sr.unshift(er.right),er=er.left;return Sr.unshift(er),Sr}function Di(Xt){if(c(he))return[D.createPropertySignature(void 0,\"...\",void 0,void 0)];let er=[];for(let Ii of Xt.callSignatures)er.push(de(Ii,176,he));for(let Ii of Xt.constructSignatures)Ii.flags&4||er.push(de(Ii,177,he));for(let Ii of Xt.indexInfos)er.push(J(Ii,he,Xt.objectFlags&1024?h(he):void 0));let Sr=Xt.properties;if(!Sr)return er;let Dr=0;for(let Ii of Sr){if(Dr++,he.flags&2048){if(Ii.flags&4194304)continue;Ef(Ii)&24&&he.tracker.reportPrivateInBaseOfClassExpression&&he.tracker.reportPrivateInBaseOfClassExpression(Gi(Ii.escapedName))}if(c(he)&&Dr+2<Sr.length-1){er.push(D.createPropertySignature(void 0,`... ${Sr.length-Dr} more ...`,void 0,void 0)),k(Sr[Sr.length-1],he,er);break}k(Ii,he,er)}return er.length?er:void 0}}function h(et){return et.approximateLength+=3,et.flags&1?D.createKeywordTypeNode(131):D.createTypeReferenceNode(D.createIdentifier(\"...\"),void 0)}function T(et,he){var Bn;return!!(ac(et)&8192)&&(ya(he.reverseMappedStack,et)||((Bn=he.reverseMappedStack)==null?void 0:Bn[0])&&!(Ur(To(he.reverseMappedStack).links.propertyType)&16))}function k(et,he,Bn){var Mn;let or=!!(ac(et)&8192),_r=T(et,he)?Se:Gv(et),ua=he.enclosingDeclaration;if(he.enclosingDeclaration=void 0,he.tracker.canTrackSymbol&&qk(et.escapedName))if(et.declarations){let Ct=Vo(et.declarations);if($P(Ct))if(ar(Ct)){let Bt=sa(Ct);Bt&&Vs(Bt)&&LR(Bt.argumentExpression)&&Tn(Bt.argumentExpression,ua,he)}else Tn(Ct.name.expression,ua,he)}else he.tracker.reportNonSerializableProperty(E(et));he.enclosingDeclaration=et.valueDeclaration||((Mn=et.declarations)==null?void 0:Mn[0])||ua;let _i=Hd(et,he);he.enclosingDeclaration=ua,he.approximateLength+=fc(et).length+1;let ur=et.flags&16777216?D.createToken(57):void 0;if(et.flags&8208&&!Ey(_r).length&&!M_(et)){let Ct=xa(jc(_r,Bt=>!(Bt.flags&32768)),0);for(let Bt of Ct){let Ft=de(Bt,170,he,{name:_i,questionToken:ur});Bn.push(st(Ft))}}else{let Ct;T(et,he)?Ct=h(he):(or&&(he.reverseMappedStack||(he.reverseMappedStack=[]),he.reverseMappedStack.push(et)),Ct=_r?Bi(he,_r,et,ua):D.createKeywordTypeNode(131),or&&he.reverseMappedStack.pop());let Bt=M_(et)?[D.createToken(146)]:void 0;Bt&&(he.approximateLength+=9);let Ft=D.createPropertySignature(Bt,_i,ur,Ct);Bn.push(st(Ft))}function st(Ct){var Bt;if(vt(et.declarations,Ft=>Ft.kind===351)){let Ft=(Bt=et.declarations)==null?void 0:Bt.find(Un=>Un.kind===351),hn=Cw(Ft.comment);hn&&W0(Ct,[{kind:3,text:`*\n * `+hn.replace(/\\n/g,`\n * `)+`\n `,pos:-1,end:-1,hasTrailingNewLine:!0}])}else et.valueDeclaration&&hl(Ct,et.valueDeclaration);return Ct}}function O(et,he,Bn){if(vt(et)){if(c(he))if(Bn){if(et.length>2)return[u(et[0],he),D.createTypeReferenceNode(`... ${et.length-2} more ...`,void 0),u(et[et.length-1],he)]}else return[D.createTypeReferenceNode(\"...\",void 0)];let or=!(he.flags&64)?vae():void 0,_r=[],ua=0;for(let _i of et){if(ua++,c(he)&&ua+2<et.length-1){_r.push(D.createTypeReferenceNode(`... ${et.length-ua} more ...`,void 0));let st=u(et[et.length-1],he);st&&_r.push(st);break}he.approximateLength+=2;let ur=u(_i,he);ur&&(_r.push(ur),or&&Mle(ur)&&or.add(ur.typeName.escapedText,[_i,_r.length-1]))}if(or){let _i=he.flags;he.flags|=64,or.forEach(ur=>{if(!Fle(ur,([st],[Ct])=>H(st,Ct)))for(let[st,Ct]of ur)_r[Ct]=u(st,he)}),he.flags=_i}return _r}}function H(et,he){return et===he||!!et.symbol&&et.symbol===he.symbol||!!et.aliasSymbol&&et.aliasSymbol===he.aliasSymbol}function J(et,he,Bn){let Mn=Kse(et)||\"x\",or=u(et.keyType,he),_r=D.createParameterDeclaration(void 0,void 0,Mn,void 0,or,void 0);return Bn||(Bn=u(et.type||Se,he)),!et.type&&!(he.flags&2097152)&&(he.encounteredError=!0),he.approximateLength+=Mn.length+4,D.createIndexSignature(et.isReadonly?[D.createToken(146)]:void 0,[_r],Bn)}function de(et,he,Bn,Mn){var or,_r,ua,_i,ur;let st=Bn.flags&256;st&&(Bn.flags&=-257),Bn.approximateLength+=3;let Ct,Bt;Bn.flags&32&&et.target&&et.mapper&&et.target.typeParameters?Bt=et.target.typeParameters.map(Ii=>u(Oi(Ii,et.mapper),Bn)):Ct=et.typeParameters&&et.typeParameters.map(Ii=>tt(Ii,Bn));let Ft=Txe(et,!0)[0],hn;if(Bn.enclosingDeclaration&&et.declaration&&et.declaration!==Bn.enclosingDeclaration&&!Yn(et.declaration)&&vt(Ft)){let Ii=Rr(Bn.enclosingDeclaration).fakeScopeForSignatureDeclaration?Bn.enclosingDeclaration:void 0;L.assertOptionalNode(Ii,Va);let Bo=(or=Ii?.locals)!=null?or:Ua(),ys;for(let ds of Ft)Bo.has(ds.escapedName)||(ys=Sn(ys,ds.escapedName),Bo.set(ds.escapedName,ds));if(ys){let ds=function(){mn(ys,Bl=>Bo.delete(Bl))};var Un=ds;if(Ii)hn=ds;else{let Bl=fm.createBlock(Je);Rr(Bl).fakeScopeForSignatureDeclaration=!0,Bl.locals=Bo;let ze=Bn.enclosingDeclaration;go(Bl,ze),Bn.enclosingDeclaration=Bl,hn=()=>{Bn.enclosingDeclaration=ze,ds()}}}}let yi=(vt(Ft,Ii=>Ii!==Ft[Ft.length-1]&&!!(ac(Ii)&32768))?et.parameters:Ft).map(Ii=>It(Ii,Bn,he===173,Mn?.privateSymbolVisitor,Mn?.bundledImports)),Di=Bn.flags&33554432?void 0:Ae(et,Bn);Di&&yi.unshift(Di);let Xt,er=Lf(et);if(er){let Ii=er.kind===2||er.kind===3?D.createToken(129):void 0,Bo=er.kind===1||er.kind===3?Jn(D.createIdentifier(er.parameterName),33554432):D.createThisTypeNode(),ys=er.type&&u(er.type,Bn);Xt=D.createTypePredicateNode(Ii,Bo,ys)}else{let Ii=qo(et);Ii&&!(st&&Zo(Ii))?Xt=us(Bn,Ii,et,Mn?.privateSymbolVisitor,Mn?.bundledImports):st||(Xt=D.createKeywordTypeNode(131))}let Sr=Mn?.modifiers;if(he===182&&et.flags&4){let Ii=im(Sr);Sr=D.createModifiersFromModifierFlags(Ii|256)}let Dr=he===176?D.createCallSignature(Ct,yi,Xt):he===177?D.createConstructSignature(Ct,yi,Xt):he===170?D.createMethodSignature(Sr,(_r=Mn?.name)!=null?_r:D.createIdentifier(\"\"),Mn?.questionToken,Ct,yi,Xt):he===171?D.createMethodDeclaration(Sr,void 0,(ua=Mn?.name)!=null?ua:D.createIdentifier(\"\"),void 0,Ct,yi,Xt,void 0):he===173?D.createConstructorDeclaration(Sr,yi,void 0):he===174?D.createGetAccessorDeclaration(Sr,(_i=Mn?.name)!=null?_i:D.createIdentifier(\"\"),yi,Xt,void 0):he===175?D.createSetAccessorDeclaration(Sr,(ur=Mn?.name)!=null?ur:D.createIdentifier(\"\"),yi,void 0):he===178?D.createIndexSignature(Sr,yi,Xt):he===320?D.createJSDocFunctionType(yi,Xt):he===181?D.createFunctionTypeNode(Ct,yi,Xt??D.createTypeReferenceNode(D.createIdentifier(\"\"))):he===182?D.createConstructorTypeNode(Sr,Ct,yi,Xt??D.createTypeReferenceNode(D.createIdentifier(\"\"))):he===259?D.createFunctionDeclaration(Sr,void 0,Mn?.name?Ga(Mn.name,Re):D.createIdentifier(\"\"),Ct,yi,Xt,void 0):he===215?D.createFunctionExpression(Sr,void 0,Mn?.name?Ga(Mn.name,Re):D.createIdentifier(\"\"),Ct,yi,Xt,D.createBlock([])):he===216?D.createArrowFunction(Sr,Ct,yi,Xt,void 0,D.createBlock([])):L.assertNever(he);return Bt&&(Dr.typeArguments=D.createNodeArray(Bt)),hn?.(),Dr}function Ae(et,he){if(et.thisParameter)return It(et.thisParameter,he);if(et.declaration&&Yn(et.declaration)){let Bn=e6(et.declaration);if(Bn&&Bn.typeExpression)return D.createParameterDeclaration(void 0,void 0,\"this\",void 0,u($r(Bn.typeExpression),he))}}function xe(et,he,Bn){let Mn=he.flags;he.flags&=-513;let or=D.createModifiersFromModifierFlags(Jne(et)),_r=Hr(et,he),ua=jE(et),_i=ua&&u(ua,he);return he.flags=Mn,D.createTypeParameterDeclaration(or,_r,Bn,_i)}function tt(et,he,Bn=eu(et)){let Mn=Bn&&u(Bn,he);return xe(et,he,Mn)}function It(et,he,Bn,Mn,or){let _r=nc(et,166);!_r&&!Zp(et)&&(_r=nc(et,344));let ua=zn(et);_r&&eke(_r)&&(ua=gg(ua));let _i=Bi(he,ua,et,he.enclosingDeclaration,Mn,or),ur=!(he.flags&8192)&&Bn&&_r&&g_(_r)?on(uT(_r),D.cloneNode):void 0,Ct=_r&&Fm(_r)||ac(et)&32768?D.createToken(25):void 0,Bt=_r&&_r.name?_r.name.kind===79?Jn(D.cloneNode(_r.name),33554432):_r.name.kind===163?Jn(D.cloneNode(_r.name.right),33554432):yi(_r.name):fc(et),hn=_r&&Qk(_r)||ac(et)&16384?D.createToken(57):void 0,Un=D.createParameterDeclaration(ur,Ct,Bt,hn,_i,void 0);return he.approximateLength+=fc(et).length+3,Un;function yi(Di){return Xt(Di);function Xt(er){he.tracker.canTrackSymbol&&ts(er)&&Pte(er)&&Tn(er.expression,he.enclosingDeclaration,he);let Sr=xn(er,Xt,Bh,void 0,Xt);return Wo(Sr)&&(Sr=D.updateBindingElement(Sr,Sr.dotDotDotToken,Sr.propertyName,Sr.name,void 0)),ws(Sr)||(Sr=D.cloneNode(Sr)),Jn(Sr,33554433)}}}function Tn(et,he,Bn){if(!Bn.tracker.canTrackSymbol)return;let Mn=Yd(et),or=zs(Mn,Mn.escapedText,1160127,void 0,void 0,!0);or&&Bn.tracker.trackSymbol(or,he,111551)}function un(et,he,Bn,Mn){return he.tracker.trackSymbol(et,he.enclosingDeclaration,Bn),Nn(et,he,Bn,Mn)}function Nn(et,he,Bn,Mn){let or;return!(et.flags&262144)&&(he.enclosingDeclaration||he.flags&64)&&!(he.flags&134217728)?(or=L.checkDefined(ua(et,Bn,!0)),L.assert(or&&or.length>0)):or=[et],or;function ua(_i,ur,st){let Ct=Rv(_i,he.enclosingDeclaration,ur,!!(he.flags&128)),Bt;if(!Ct||k1(Ct[0],he.enclosingDeclaration,Ct.length===1?ur:og(ur))){let hn=IE(Ct?Ct[0]:_i,he.enclosingDeclaration,ur);if(Fn(hn)){Bt=hn.map(Di=>vt(Di.declarations,sg)?Jt(Di,he):void 0);let Un=hn.map((Di,Xt)=>Xt);Un.sort(Ft);let yi=Un.map(Di=>hn[Di]);for(let Di of yi){let Xt=ua(Di,og(ur),!1);if(Xt){if(Di.exports&&Di.exports.get(\"export=\")&&wp(Di.exports.get(\"export=\"),_i)){Ct=Xt;break}Ct=Xt.concat(Ct||[ly(Di,_i)||_i]);break}}}}if(Ct)return Ct;if(st||!(_i.flags&6144))return!st&&!Mn&&mn(_i.declarations,sg)?void 0:[_i];function Ft(hn,Un){let yi=Bt[hn],Di=Bt[Un];if(yi&&Di){let Xt=Jd(Di);return Jd(yi)===Xt?tN(yi)-tN(Di):Xt?-1:1}return 0}}}function en(et,he){let Bn;return oA(et).flags&524384&&(Bn=D.createNodeArray(on(yy(et),or=>tt(or,he)))),Bn}function cn(et,he,Bn){var Mn;L.assert(et&&0<=he&&he<et.length);let or=et[he],_r=$a(or);if((Mn=Bn.typeParameterSymbolList)!=null&&Mn.has(_r))return;(Bn.typeParameterSymbolList||(Bn.typeParameterSymbolList=new Set)).add(_r);let ua;if(Bn.flags&512&&he<et.length-1){let _i=or,ur=et[he+1];if(ac(ur)&1){let st=D1(_i.flags&2097152?wc(_i):_i);ua=O(on(st,Ct=>zv(Ct,ur.links.mapper)),Bn)}else ua=en(or,Bn)}return ua}function rr(et){return OS(et.objectType)?rr(et.objectType):et}function Jt(et,he,Bn){var Mn;let or=nc(et,308);if(!or){let Ct=ks(et.declarations,Bt=>wx(Bt,et));Ct&&(or=nc(Ct,308))}if(or&&or.moduleName!==void 0)return or.moduleName;if(!or){if(he.tracker.trackReferencedAmbientModule){let Ct=Pr(et.declarations,lu);if(Fn(Ct))for(let Bt of Ct)he.tracker.trackReferencedAmbientModule(Bt,et)}if(uF.test(et.escapedName))return et.escapedName.substring(1,et.escapedName.length-1)}if(!he.enclosingDeclaration||!he.tracker.moduleResolverHost)return uF.test(et.escapedName)?et.escapedName.substring(1,et.escapedName.length-1):Gn(dH(et)).fileName;let _r=Gn(ec(he.enclosingDeclaration)),ua=Bn||_r?.impliedNodeFormat,_i=ML(_r.path,ua),ur=Ai(et),st=ur.specifierCache&&ur.specifierCache.get(_i);if(!st){let Ct=!!Ss(Y),{moduleResolverHost:Bt}=he.tracker,Ft=Ct?{...Y,baseUrl:Bt.getCommonSourceDirectory()}:Y;st=Vo(m_e(et,qe,Ft,_r,Bt,{importModuleSpecifierPreference:Ct?\"non-relative\":\"project-relative\",importModuleSpecifierEnding:Ct?\"minimal\":ua===99?\"js\":void 0},{overrideImportMode:Bn})),(Mn=ur.specifierCache)!=null||(ur.specifierCache=new Map),ur.specifierCache.set(_i,st)}return st}function Cn(et){let he=D.createIdentifier(Gi(et.escapedName));return et.parent?D.createQualifiedName(Cn(et.parent),he):he}function Rn(et,he,Bn,Mn){var or,_r,ua,_i;let ur=un(et,he,Bn,!(he.flags&16384)),st=Bn===111551;if(vt(ur[0].declarations,sg)){let Ft=ur.length>1?Bt(ur,ur.length-1,1):void 0,hn=Mn||cn(ur,0,he),Un=Gn(ec(he.enclosingDeclaration)),yi=m6(ur[0]),Di,Xt;if(($s(Y)===3||$s(Y)===99)&&yi?.impliedNodeFormat===99&&yi.impliedNodeFormat!==Un?.impliedNodeFormat&&(Di=Jt(ur[0],he,99),Xt=D.createImportTypeAssertionContainer(D.createAssertClause(D.createNodeArray([D.createAssertEntry(D.createStringLiteral(\"resolution-mode\"),D.createStringLiteral(\"import\"))]))),(_r=(or=he.tracker).reportImportTypeNodeResolutionModeOverride)==null||_r.call(or)),Di||(Di=Jt(ur[0],he)),!(he.flags&67108864)&&$s(Y)!==1&&Di.indexOf(\"/node_modules/\")>=0){let Sr=Di;if($s(Y)===3||$s(Y)===99){let Dr=Un?.impliedNodeFormat===99?1:99;Di=Jt(ur[0],he,Dr),Di.indexOf(\"/node_modules/\")>=0?Di=Sr:(Xt=D.createImportTypeAssertionContainer(D.createAssertClause(D.createNodeArray([D.createAssertEntry(D.createStringLiteral(\"resolution-mode\"),D.createStringLiteral(Dr===99?\"import\":\"require\"))]))),(_i=(ua=he.tracker).reportImportTypeNodeResolutionModeOverride)==null||_i.call(ua))}Xt||(he.encounteredError=!0,he.tracker.reportLikelyUnsafeImportRequiredError&&he.tracker.reportLikelyUnsafeImportRequiredError(Sr))}let er=D.createLiteralTypeNode(D.createStringLiteral(Di));if(he.tracker.trackExternalModuleSymbolOfImportTypeNode&&he.tracker.trackExternalModuleSymbolOfImportTypeNode(ur[0]),he.approximateLength+=Di.length+10,!Ft||Cd(Ft)){if(Ft){let Sr=Re(Ft)?Ft:Ft.right;Ug(Sr,void 0)}return D.createImportTypeNode(er,Xt,Ft,hn,st)}else{let Sr=rr(Ft),Dr=Sr.objectType.typeName;return D.createIndexedAccessTypeNode(D.createImportTypeNode(er,Xt,Dr,hn,st),Sr.indexType)}}let Ct=Bt(ur,ur.length-1,0);if(OS(Ct))return Ct;if(st)return D.createTypeQueryNode(Ct);{let Ft=Re(Ct)?Ct:Ct.right,hn=NT(Ft);return Ug(Ft,void 0),D.createTypeReferenceNode(Ct,hn)}function Bt(Ft,hn,Un){let yi=hn===Ft.length-1?Mn:cn(Ft,hn,he),Di=Ft[hn],Xt=Ft[hn-1],er;if(hn===0)he.flags|=16777216,er=_y(Di,he),he.approximateLength+=(er?er.length:0)+1,he.flags^=16777216;else if(Xt&&Gd(Xt)){let Dr=Gd(Xt);Ld(Dr,(Ii,Bo)=>{if(wp(Ii,Di)&&!qk(Bo)&&Bo!==\"export=\")return er=Gi(Bo),!0})}if(er===void 0){let Dr=ks(Di.declarations,sa);if(Dr&&ts(Dr)&&Cd(Dr.expression)){let Ii=Bt(Ft,hn-1,Un);return Cd(Ii)?D.createIndexedAccessTypeNode(D.createParenthesizedType(D.createTypeQueryNode(Ii)),D.createTypeQueryNode(Dr.expression)):Ii}er=_y(Di,he)}if(he.approximateLength+=er.length+1,!(he.flags&16)&&Xt&&vy(Xt)&&vy(Xt).get(Di.escapedName)&&wp(vy(Xt).get(Di.escapedName),Di)){let Dr=Bt(Ft,hn-1,Un);return OS(Dr)?D.createIndexedAccessTypeNode(Dr,D.createLiteralTypeNode(D.createStringLiteral(er))):D.createIndexedAccessTypeNode(D.createTypeReferenceNode(Dr,yi),D.createLiteralTypeNode(D.createStringLiteral(er)))}let Sr=Jn(D.createIdentifier(er),33554432);if(yi&&Ug(Sr,D.createNodeArray(yi)),Sr.symbol=Di,hn>Un){let Dr=Bt(Ft,hn-1,Un);return Cd(Dr)?D.createQualifiedName(Dr,Sr):L.fail(\"Impossible construct - an export of an indexed access cannot be reachable\")}return Sr}}function Br(et,he,Bn){let Mn=zs(he.enclosingDeclaration,et,788968,void 0,et,!1);return Mn?!(Mn.flags&262144&&Mn===Bn.symbol):!1}function Hr(et,he){var Bn,Mn;if(he.flags&4&&he.typeParameterNames){let _r=he.typeParameterNames.get(ru(et));if(_r)return _r}let or=qi(et.symbol,he,788968,!0);if(!(or.kind&79))return D.createIdentifier(\"(Missing type parameter)\");if(he.flags&4){let _r=or.escapedText,ua=((Bn=he.typeParameterNamesByTextNextNameCount)==null?void 0:Bn.get(_r))||0,_i=_r;for(;(Mn=he.typeParameterNamesByText)!=null&&Mn.has(_i)||Br(_i,he,et);)ua++,_i=`${_r}_${ua}`;if(_i!==_r){let ur=NT(or);or=D.createIdentifier(_i),Ug(or,ur)}(he.typeParameterNamesByTextNextNameCount||(he.typeParameterNamesByTextNextNameCount=new Map)).set(_r,ua),(he.typeParameterNames||(he.typeParameterNames=new Map)).set(ru(et),or),(he.typeParameterNamesByText||(he.typeParameterNamesByText=new Set)).add(_r)}return or}function qi(et,he,Bn,Mn){let or=un(et,he,Bn);return Mn&&or.length!==1&&!he.encounteredError&&!(he.flags&65536)&&(he.encounteredError=!0),_r(or,or.length-1);function _r(ua,_i){let ur=cn(ua,_i,he),st=ua[_i];_i===0&&(he.flags|=16777216);let Ct=_y(st,he);_i===0&&(he.flags^=16777216);let Bt=Jn(D.createIdentifier(Ct),33554432);return ur&&Ug(Bt,D.createNodeArray(ur)),Bt.symbol=st,_i>0?D.createQualifiedName(_r(ua,_i-1),Bt):Bt}}function wa(et,he,Bn){let Mn=un(et,he,Bn);return or(Mn,Mn.length-1);function or(_r,ua){let _i=cn(_r,ua,he),ur=_r[ua];ua===0&&(he.flags|=16777216);let st=_y(ur,he);ua===0&&(he.flags^=16777216);let Ct=st.charCodeAt(0);if(Xw(Ct)&&vt(ur.declarations,sg))return D.createStringLiteral(Jt(ur,he));if(ua===0||HW(st,R)){let Bt=Jn(D.createIdentifier(st),33554432);return _i&&Ug(Bt,D.createNodeArray(_i)),Bt.symbol=ur,ua>0?D.createPropertyAccessExpression(or(_r,ua-1),Bt):Bt}else{Ct===91&&(st=st.substring(1,st.length-1),Ct=st.charCodeAt(0));let Bt;if(Xw(Ct)&&!(ur.flags&8)?Bt=D.createStringLiteral(u_(st).replace(/\\\\./g,Ft=>Ft.substring(1)),Ct===39):\"\"+ +st===st&&(Bt=D.createNumericLiteral(+st)),!Bt){let Ft=Jn(D.createIdentifier(st),33554432);_i&&Ug(Ft,D.createNodeArray(_i)),Ft.symbol=ur,Bt=Ft}return D.createElementAccessExpression(or(_r,ua-1),Bt)}}}function Xc(et){let he=sa(et);return!!he&&yo(he)}function pf(et){let he=sa(et);return!!(he&&yo(he)&&(he.singleQuote||!ws(he)&&na(Qc(he,!1),\"'\")))}function Hd(et,he){let Bn=!!Fn(et.declarations)&&Ji(et.declarations,Xc),Mn=!!Fn(et.declarations)&&Ji(et.declarations,pf),or=ji(et,he,Mn,Bn);if(or)return or;let _r=Gi(et.escapedName);return E4(_r,Do(Y),Mn,Bn)}function ji(et,he,Bn,Mn){let or=Ai(et).nameType;if(or){if(or.flags&384){let _r=\"\"+or.value;return!i_(_r,Do(Y))&&(Mn||!Wm(_r))?D.createStringLiteral(_r,!!Bn):Wm(_r)&&na(_r,\"-\")?D.createComputedPropertyName(D.createNumericLiteral(+_r)):E4(_r,Do(Y))}if(or.flags&8192)return D.createComputedPropertyName(wa(or.symbol,he,111551))}}function In(et){let he={...et};return he.typeParameterNames&&(he.typeParameterNames=new Map(he.typeParameterNames)),he.typeParameterNamesByText&&(he.typeParameterNamesByText=new Set(he.typeParameterNamesByText)),he.typeParameterSymbolList&&(he.typeParameterSymbolList=new Set(he.typeParameterSymbolList)),he.tracker=new iN(he,he.tracker.inner,he.tracker.moduleResolverHost),he}function qn(et,he){return et.declarations&&wr(et.declarations,Bn=>!!Cl(Bn)&&(!he||!!jn(Bn,Mn=>Mn===he)))}function Mi(et,he){return!(Ur(he)&4)||!m_(et)||Fn(et.typeArguments)>=Mp(he.target.typeParameters)}function ga(et){return Rr(et).fakeScopeForSignatureDeclaration?et.parent:et}function Bi(et,he,Bn,Mn,or,_r){if(!Ro(he)&&Mn){let ur=qn(Bn,ga(Mn));if(ur&&!Ds(ur)&&!p_(ur)){let st=Cl(ur);if(ko(st,ur,he)&&Mi(st,he)){let Ct=no(et,st,or,_r);if(Ct)return Ct}}}let ua=et.flags;he.flags&8192&&he.symbol===Bn&&(!et.enclosingDeclaration||vt(Bn.declarations,ur=>Gn(ur)===Gn(et.enclosingDeclaration)))&&(et.flags|=1048576);let _i=u(he,et);return et.flags=ua,_i}function ko(et,he,Bn){let Mn=$r(et);return Mn===Bn?!0:ha(he)&&he.questionToken?wf(Bn,524288)===Mn:!1}function us(et,he,Bn,Mn,or){if(!Ro(he)&&et.enclosingDeclaration){let _r=Bn.declaration&&U_(Bn.declaration),ua=ga(et.enclosingDeclaration);if(jn(_r,_i=>_i===ua)&&_r){let _i=$r(_r);if((_i.flags&262144&&_i.isThisType?Oi(_i,Bn.mapper):_i)===he&&Mi(_r,he)){let st=no(et,_r,Mn,or);if(st)return st}}}return u(he,et)}function Xs(et,he,Bn){let Mn=!1,or=Yd(et);if(Yn(et)&&(TT(or)||Bm(or.parent)||Yu(or.parent)&&RH(or.parent.left)&&TT(or.parent.right)))return Mn=!0,{introducesError:Mn,node:et};let _r=uc(or,67108863,!0,!0);if(_r&&(dy(_r,he.enclosingDeclaration,67108863,!1).accessibility!==0?Mn=!0:(he.tracker.trackSymbol(_r,he.enclosingDeclaration,67108863),Bn?.(_r)),Re(et))){let ua=gs(_r),_i=_r.flags&262144&&!RE(ua.symbol,he.enclosingDeclaration)?Hr(ua,he):D.cloneNode(et);return _i.symbol=_r,{introducesError:Mn,node:Jn(Ir(_i,et),33554432)}}return{introducesError:Mn,node:et}}function no(et,he,Bn,Mn){o&&o.throwIfCancellationRequested&&o.throwIfCancellationRequested();let or=!1,_r=Gn(he),ua=$e(he,_i,bi);if(or)return;return ua===he?it(D.cloneNode(he),he):ua;function _i(ur){if(Kue(ur)||ur.kind===322)return D.createKeywordTypeNode(131);if(que(ur))return D.createKeywordTypeNode(157);if(T2(ur))return D.createUnionTypeNode([$e(ur.type,_i,bi),D.createLiteralTypeNode(D.createNull())]);if(Uz(ur))return D.createUnionTypeNode([$e(ur.type,_i,bi),D.createKeywordTypeNode(155)]);if(m3(ur))return $e(ur.type,_i);if(h3(ur))return D.createArrayTypeNode($e(ur.type,_i,bi));if(LL(ur))return D.createTypeLiteralNode(on(ur.jsDocPropertyTags,Ft=>{let hn=Re(Ft.name)?Ft.name:Ft.name.right,Un=Vc($r(ur),hn.escapedText),yi=Un&&Ft.typeExpression&&$r(Ft.typeExpression.type)!==Un?u(Un,et):void 0;return D.createPropertySignature(void 0,hn,Ft.isBracketed||Ft.typeExpression&&Uz(Ft.typeExpression.type)?D.createToken(57):void 0,yi||Ft.typeExpression&&$e(Ft.typeExpression.type,_i,bi)||D.createKeywordTypeNode(131))}));if(m_(ur)&&Re(ur.typeName)&&ur.typeName.escapedText===\"\")return Ir(D.createKeywordTypeNode(131),ur);if((Vg(ur)||m_(ur))&&U6(ur))return D.createTypeLiteralNode([D.createIndexSignature(void 0,[D.createParameterDeclaration(void 0,void 0,\"x\",void 0,$e(ur.typeArguments[0],_i,bi))],$e(ur.typeArguments[1],_i,bi))]);if(S2(ur))if(jA(ur)){let Ft;return D.createConstructorTypeNode(void 0,On(ur.typeParameters,_i,_c),Zi(ur.parameters,(hn,Un)=>hn.name&&Re(hn.name)&&hn.name.escapedText===\"new\"?(Ft=hn.type,void 0):D.createParameterDeclaration(void 0,st(hn),Ct(hn,Un),hn.questionToken,$e(hn.type,_i,bi),void 0)),$e(Ft||ur.type,_i,bi)||D.createKeywordTypeNode(131))}else return D.createFunctionTypeNode(On(ur.typeParameters,_i,_c),on(ur.parameters,(Ft,hn)=>D.createParameterDeclaration(void 0,st(Ft),Ct(Ft,hn),Ft.questionToken,$e(Ft.type,_i,bi),void 0)),$e(ur.type,_i,bi)||D.createKeywordTypeNode(131));if(m_(ur)&&qw(ur)&&(!Mi(ur,$r(ur))||Yxe(ur)||Ht===Kx(ur,788968,!0)))return Ir(u($r(ur),et),ur);if(ib(ur)){let Ft=Rr(ur).resolvedSymbol;return qw(ur)&&Ft&&(!ur.isTypeOf&&!(Ft.flags&788968)||!(Fn(ur.typeArguments)>=Mp(yy(Ft))))?Ir(u($r(ur),et),ur):D.updateImportTypeNode(ur,D.updateLiteralTypeNode(ur.argument,Bt(ur,ur.argument.literal)),ur.assertions,ur.qualifier,On(ur.typeArguments,_i,bi),ur.isTypeOf)}if(Cd(ur)||bc(ur)){let{introducesError:Ft,node:hn}=Xs(ur,et,Bn);if(or=or||Ft,hn!==ur)return hn}return _r&&p2(ur)&&Gs(_r,ur.pos).line===Gs(_r,ur.end).line&&Jn(ur,1),xn(ur,_i,Bh);function st(Ft){return Ft.dotDotDotToken||(Ft.type&&h3(Ft.type)?D.createToken(25):void 0)}function Ct(Ft,hn){return Ft.name&&Re(Ft.name)&&Ft.name.escapedText===\"this\"?\"this\":st(Ft)?\"args\":`arg${hn}`}function Bt(Ft,hn){if(Mn){if(et.tracker&&et.tracker.moduleResolverHost){let Un=qie(Ft);if(Un){let Di={getCanonicalFileName:Dl(!!e.useCaseSensitiveFileNames),getCurrentDirectory:()=>et.tracker.moduleResolverHost.getCurrentDirectory(),getCommonSourceDirectory:()=>et.tracker.moduleResolverHost.getCommonSourceDirectory()},Xt=Z6(Di,Un);return D.createStringLiteral(Xt)}}}else if(et.tracker&&et.tracker.trackExternalModuleSymbolOfImportTypeNode){let Un=ah(hn,hn,void 0);Un&&et.tracker.trackExternalModuleSymbolOfImportTypeNode(Un)}return hn}}}function Tu(et,he,Bn){let Mn=F_(D.createPropertyDeclaration,171,!0),or=F_((bt,cr,oi,Jr)=>D.createPropertySignature(bt,cr,oi,Jr),170,!1),_r=he.enclosingDeclaration,ua=[],_i=new Set,ur=[],st=he;he={...st,usedSymbolNames:new Set(st.usedSymbolNames),remappedSymbolNames:new Map,tracker:void 0};let Ct={...st.tracker.inner,trackSymbol:(bt,cr,oi)=>{var Jr;if(dy(bt,cr,oi,!1).accessibility===0){let Po=Nn(bt,he,oi);bt.flags&4||ds(Po[0])}else if((Jr=st.tracker.inner)!=null&&Jr.trackSymbol)return st.tracker.inner.trackSymbol(bt,cr,oi);return!1}};he.tracker=new iN(he,Ct,st.tracker.moduleResolverHost),Ld(et,(bt,cr)=>{let oi=Gi(cr);sd(bt,oi)});let Bt=!Bn,Ft=et.get(\"export=\");return Ft&&et.size>1&&Ft.flags&2097152&&(et=Ua(),et.set(\"export=\",Ft)),Ii(et),er(ua);function hn(bt){return!!bt&&bt.kind===79}function Un(bt){return Bc(bt)?Pr(on(bt.declarationList.declarations,sa),hn):Pr([sa(bt)],hn)}function yi(bt){let cr=wr(bt,pc),oi=Yc(bt,Tc),Jr=oi!==-1?bt[oi]:void 0;if(Jr&&cr&&cr.isExportEquals&&Re(cr.expression)&&Re(Jr.name)&&vr(Jr.name)===vr(cr.expression)&&Jr.body&&Tp(Jr.body)){let Xr=Pr(bt,Ui=>!!(uu(Ui)&1)),Po=Jr.name,va=Jr.body;if(Fn(Xr)&&(Jr=D.updateModuleDeclaration(Jr,Jr.modifiers,Jr.name,va=D.updateModuleBlock(va,D.createNodeArray([...Jr.body.statements,D.createExportDeclaration(void 0,!1,D.createNamedExports(on(Uo(Xr,Ui=>Un(Ui)),Ui=>D.createExportSpecifier(!1,void 0,Ui))),void 0)]))),bt=[...bt.slice(0,oi),Jr,...bt.slice(oi+1)]),!wr(bt,Ui=>Ui!==Jr&&xw(Ui,Po))){ua=[];let Ui=!vt(va.statements,Eo=>Mr(Eo,1)||pc(Eo)||Il(Eo));mn(va.statements,Eo=>{ze(Eo,Ui?1:0)}),bt=[...Pr(bt,Eo=>Eo!==Jr&&Eo!==cr),...ua]}}return bt}function Di(bt){let cr=Pr(bt,Jr=>Il(Jr)&&!Jr.moduleSpecifier&&!!Jr.exportClause&&h_(Jr.exportClause));Fn(cr)>1&&(bt=[...Pr(bt,Xr=>!Il(Xr)||!!Xr.moduleSpecifier||!Xr.exportClause),D.createExportDeclaration(void 0,!1,D.createNamedExports(Uo(cr,Xr=>Ga(Xr.exportClause,h_).elements)),void 0)]);let oi=Pr(bt,Jr=>Il(Jr)&&!!Jr.moduleSpecifier&&!!Jr.exportClause&&h_(Jr.exportClause));if(Fn(oi)>1){let Jr=YC(oi,Xr=>yo(Xr.moduleSpecifier)?\">\"+Xr.moduleSpecifier.text:\">\");if(Jr.length!==oi.length)for(let Xr of Jr)Xr.length>1&&(bt=[...Pr(bt,Po=>Xr.indexOf(Po)===-1),D.createExportDeclaration(void 0,!1,D.createNamedExports(Uo(Xr,Po=>Ga(Po.exportClause,h_).elements)),Xr[0].moduleSpecifier)])}return bt}function Xt(bt){let cr=Yc(bt,oi=>Il(oi)&&!oi.moduleSpecifier&&!oi.assertClause&&!!oi.exportClause&&h_(oi.exportClause));if(cr>=0){let oi=bt[cr],Jr=Zi(oi.exportClause.elements,Xr=>{if(!Xr.propertyName){let Po=jD(bt),va=Pr(Po,Ui=>xw(bt[Ui],Xr.name));if(Fn(va)&&Ji(va,Ui=>WR(bt[Ui]))){for(let Ui of va)bt[Ui]=Sr(bt[Ui]);return}}return Xr});Fn(Jr)?bt[cr]=D.updateExportDeclaration(oi,oi.modifiers,oi.isTypeOnly,D.updateNamedExports(oi.exportClause,Jr),oi.moduleSpecifier,oi.assertClause):y0(bt,cr)}return bt}function er(bt){return bt=yi(bt),bt=Di(bt),bt=Xt(bt),_r&&(Li(_r)&&kd(_r)||Tc(_r))&&(!vt(bt,Rw)||!yse(bt)&&vt(bt,l6))&&bt.push(bO(D)),bt}function Sr(bt){let cr=(uu(bt)|1)&-3;return D.updateModifiers(bt,cr)}function Dr(bt){let cr=uu(bt)&-2;return D.updateModifiers(bt,cr)}function Ii(bt,cr,oi){cr||ur.push(new Map),bt.forEach(Jr=>{Bo(Jr,!1,!!oi)}),cr||(ur[ur.length-1].forEach(Jr=>{Bo(Jr,!0,!!oi)}),ur.pop())}function Bo(bt,cr,oi){let Jr=No(bt);if(_i.has($a(Jr)))return;if(_i.add($a(Jr)),!cr||Fn(bt.declarations)&&vt(bt.declarations,Po=>!!jn(Po,va=>va===_r))){let Po=he;he=In(he),ys(bt,cr,oi),he.reportedDiagnostic&&(st.reportedDiagnostic=he.reportedDiagnostic),he=Po}}function ys(bt,cr,oi){var Jr,Xr,Po,va;let Ui=Gi(bt.escapedName),Eo=bt.escapedName===\"default\";if(cr&&!(he.flags&131072)&&fS(Ui)&&!Eo){he.encounteredError=!0;return}let Xo=Eo&&!!(bt.flags&-113||bt.flags&16&&Fn(Jo(zn(bt))))&&!(bt.flags&2097152),Rc=!Xo&&!cr&&fS(Ui)&&!Eo;(Xo||Rc)&&(cr=!0);let rl=(cr?0:1)|(Eo&&!Xo?1024:0),Wd=bt.flags&1536&&bt.flags&7&&bt.escapedName!==\"export=\",Vl=Wd&&Ul(zn(bt),bt);if((bt.flags&8208||Vl)&&Ar(zn(bt),bt,sd(bt,Ui),rl),bt.flags&524288&&dt(bt,Ui,rl),bt.flags&7&&bt.escapedName!==\"export=\"&&!(bt.flags&4194304)&&!(bt.flags&32)&&!(bt.flags&8192)&&!Vl)if(oi)as(bt)&&(Rc=!1,Xo=!1);else{let bs=zn(bt),dc=sd(bt,Ui);if(!(bt.flags&16)&&Ul(bs,bt))Ar(bs,bt,dc,rl);else{let Tg=bt.flags&2?wC(bt)?2:1:(Jr=bt.parent)!=null&&Jr.valueDeclaration&&Li((Xr=bt.parent)==null?void 0:Xr.valueDeclaration)?2:void 0,wm=Xo||!(bt.flags&4)?dc:lA(dc,bt),Rm=bt.declarations&&wr(bt.declarations,Ry=>wi(Ry));Rm&&pu(Rm.parent)&&Rm.parent.declarations.length===1&&(Rm=Rm.parent.parent);let V1=(Po=bt.declarations)==null?void 0:Po.find(br);if(V1&&ar(V1.parent)&&Re(V1.parent.right)&&((va=bs.symbol)!=null&&va.valueDeclaration)&&Li(bs.symbol.valueDeclaration)){let Ry=dc===V1.parent.right.escapedText?void 0:V1.parent.right;ze(D.createExportDeclaration(void 0,!1,D.createNamedExports([D.createExportSpecifier(!1,Ry,dc)])),0),he.tracker.trackSymbol(bs.symbol,he.enclosingDeclaration,111551)}else{let Ry=it(D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(wm,void 0,Bi(he,bs,bt,_r,ds,Bn))],Tg)),Rm);ze(Ry,wm!==dc?rl&-2:rl),wm!==dc&&!cr&&(ze(D.createExportDeclaration(void 0,!1,D.createNamedExports([D.createExportSpecifier(!1,wm,dc)])),0),Rc=!1,Xo=!1)}}}if(bt.flags&384&&sr(bt,Ui,rl),bt.flags&32&&(bt.flags&4&&bt.valueDeclaration&&ar(bt.valueDeclaration.parent)&&_u(bt.valueDeclaration.parent.right)?mo(bt,sd(bt,Ui),rl):Zr(bt,sd(bt,Ui),rl)),(bt.flags&1536&&(!Wd||Zn(bt))||Vl)&&fn(bt,Ui,rl),bt.flags&64&&!(bt.flags&32)&&Ut(bt,Ui,rl),bt.flags&2097152&&mo(bt,sd(bt,Ui),rl),bt.flags&4&&bt.escapedName===\"export=\"&&as(bt),bt.flags&8388608&&bt.declarations)for(let bs of bt.declarations){let dc=Gl(bs,bs.moduleSpecifier);dc&&ze(D.createExportDeclaration(void 0,bs.isTypeOnly,void 0,D.createStringLiteral(Jt(dc,he))),0)}Xo?ze(D.createExportAssignment(void 0,!1,D.createIdentifier(sd(bt,Ui))),0):Rc&&ze(D.createExportDeclaration(void 0,!1,D.createNamedExports([D.createExportSpecifier(!1,sd(bt,Ui),Ui)])),0)}function ds(bt){if(vt(bt.declarations,CT))return;L.assertIsDefined(ur[ur.length-1]),lA(Gi(bt.escapedName),bt);let cr=!!(bt.flags&2097152)&&!vt(bt.declarations,oi=>!!jn(oi,Il)||qm(oi)||Nl(oi)&&!um(oi.moduleReference));ur[cr?0:ur.length-1].set($a(bt),bt)}function Bl(bt){return Li(bt)&&(kd(bt)||Mf(bt))||lu(bt)&&!mp(bt)}function ze(bt,cr){if(g_(bt)){let oi=0,Jr=he.enclosingDeclaration&&(Ff(he.enclosingDeclaration)?Gn(he.enclosingDeclaration):he.enclosingDeclaration);cr&1&&Jr&&(Bl(Jr)||Tc(Jr))&&WR(bt)&&(oi|=1),Bt&&!(oi&1)&&(!Jr||!(Jr.flags&16777216))&&(hb(bt)||Bc(bt)||Jc(bt)||sl(bt)||Tc(bt))&&(oi|=2),cr&1024&&(sl(bt)||ku(bt)||Jc(bt))&&(oi|=1024),oi&&(bt=D.updateModifiers(bt,oi|uu(bt)))}ua.push(bt)}function dt(bt,cr,oi){var Jr;let Xr=Kb(bt),Po=Ai(bt).typeParameters,va=on(Po,Wd=>tt(Wd,he)),Ui=(Jr=bt.declarations)==null?void 0:Jr.find(Ff),Eo=Cw(Ui?Ui.comment||Ui.parent.comment:void 0),Xo=he.flags;he.flags|=8388608;let Rc=he.enclosingDeclaration;he.enclosingDeclaration=Ui;let rl=Ui&&Ui.typeExpression&&UT(Ui.typeExpression)&&no(he,Ui.typeExpression.type,ds,Bn)||u(Xr,he);ze(W0(D.createTypeAliasDeclaration(void 0,sd(bt,cr),va,rl),Eo?[{kind:3,text:`*\n * `+Eo.replace(/\\n/g,`\n * `)+`\n `,pos:-1,end:-1,hasTrailingNewLine:!0}]:[]),oi),he.flags=Xo,he.enclosingDeclaration=Rc}function Ut(bt,cr,oi){let Jr=vu(bt),Xr=yy(bt),Po=on(Xr,Vl=>tt(Vl,he)),va=_o(Jr),Ui=Fn(va)?so(va):void 0,Eo=Uo(Jo(Jr),Vl=>Dm(Vl,Ui)),Xo=$v(0,Jr,Ui,176),Rc=$v(1,Jr,Ui,177),rl=U1(Jr,Ui),Wd=Fn(va)?[D.createHeritageClause(94,Zi(va,Vl=>Hp(Vl,111551)))]:void 0;ze(D.createInterfaceDeclaration(void 0,sd(bt,cr),Po,Wd,[...rl,...Rc,...Xo,...Eo]),oi)}function wn(bt){return bt.exports?Pr(lo(bt.exports.values()),Aa):[]}function Zn(bt){return Ji(wn(bt),cr=>!(Fl(Ac(cr))&111551))}function fn(bt,cr,oi){let Jr=wn(bt),Xr=KD(Jr,Ui=>Ui.parent&&Ui.parent===bt?\"real\":\"merged\"),Po=Xr.get(\"real\")||Je,va=Xr.get(\"merged\")||Je;if(Fn(Po)){let Ui=sd(bt,cr);ia(Po,Ui,oi,!!(bt.flags&67108880))}if(Fn(va)){let Ui=Gn(he.enclosingDeclaration),Eo=sd(bt,cr),Xo=D.createModuleBlock([D.createExportDeclaration(void 0,!1,D.createNamedExports(Zi(Pr(va,Rc=>Rc.escapedName!==\"export=\"),Rc=>{var rl,Wd;let Vl=Gi(Rc.escapedName),bs=sd(Rc,Vl),dc=Rc.declarations&&Uu(Rc);if(Ui&&(dc?Ui!==Gn(dc):!vt(Rc.declarations,Rm=>Gn(Rm)===Ui))){(Wd=(rl=he.tracker)==null?void 0:rl.reportNonlocalAugmentation)==null||Wd.call(rl,Ui,bt,Rc);return}let Tg=dc&&L_(dc,!0);ds(Tg||Rc);let wm=Tg?sd(Tg,Gi(Tg.escapedName)):bs;return D.createExportSpecifier(!1,Vl===wm?void 0:wm,Vl)})))]);ze(D.createModuleDeclaration(void 0,D.createIdentifier(Eo),Xo,16),0)}}function sr(bt,cr,oi){ze(D.createEnumDeclaration(D.createModifiersFromModifierFlags(gie(bt)?2048:0),sd(bt,cr),on(Pr(Jo(zn(bt)),Jr=>!!(Jr.flags&8)),Jr=>{let Xr=Jr.declarations&&Jr.declarations[0]&&q0(Jr.declarations[0])?zie(Jr.declarations[0]):void 0;return D.createEnumMember(Gi(Jr.escapedName),Xr===void 0?void 0:typeof Xr==\"string\"?D.createStringLiteral(Xr):D.createNumericLiteral(Xr))})),oi)}function Ar(bt,cr,oi,Jr){let Xr=xa(bt,0);for(let Po of Xr){let va=de(Po,259,he,{name:D.createIdentifier(oi),privateSymbolVisitor:ds,bundledImports:Bn});ze(it(va,Ei(Po)),Jr)}if(!(cr.flags&1536&&cr.exports&&cr.exports.size)){let Po=Pr(Jo(bt),Aa);ia(Po,oi,Jr,!0)}}function Ei(bt){if(bt.declaration&&bt.declaration.parent){if(ar(bt.declaration.parent)&&ic(bt.declaration.parent)===5)return bt.declaration.parent;if(wi(bt.declaration.parent)&&bt.declaration.parent.parent)return bt.declaration.parent.parent}return bt.declaration}function ia(bt,cr,oi,Jr){if(Fn(bt)){let Po=KD(bt,bs=>!Fn(bs.declarations)||vt(bs.declarations,dc=>Gn(dc)===Gn(he.enclosingDeclaration))?\"local\":\"remote\").get(\"local\")||Je,va=fm.createModuleDeclaration(void 0,D.createIdentifier(cr),D.createModuleBlock([]),16);go(va,_r),va.locals=Ua(bt),va.symbol=bt[0].parent;let Ui=ua;ua=[];let Eo=Bt;Bt=!1;let Xo={...he,enclosingDeclaration:va},Rc=he;he=Xo,Ii(Ua(Po),Jr,!0),he=Rc,Bt=Eo;let rl=ua;ua=Ui;let Wd=on(rl,bs=>pc(bs)&&!bs.isExportEquals&&Re(bs.expression)?D.createExportDeclaration(void 0,!1,D.createNamedExports([D.createExportSpecifier(!1,bs.expression,D.createIdentifier(\"default\"))])):bs),Vl=Ji(Wd,bs=>Mr(bs,1))?on(Wd,Dr):Wd;va=D.updateModuleDeclaration(va,va.modifiers,va.name,D.createModuleBlock(Vl)),ze(va,oi)}}function Aa(bt){return!!(bt.flags&2887656)||!(bt.flags&4194304||bt.escapedName===\"prototype\"||bt.valueDeclaration&&Ca(bt.valueDeclaration)&&Yr(bt.valueDeclaration.parent))}function Ra(bt){let cr=Zi(bt,oi=>{let Jr=he.enclosingDeclaration;he.enclosingDeclaration=oi;let Xr=oi.expression;if(bc(Xr)){if(Re(Xr)&&vr(Xr)===\"\")return Po(void 0);let va;if({introducesError:va,node:Xr}=Xs(Xr,he,ds),va)return Po(void 0)}return Po(D.createExpressionWithTypeArguments(Xr,on(oi.typeArguments,va=>no(he,va,ds,Bn)||u($r(va),he))));function Po(va){return he.enclosingDeclaration=Jr,va}});if(cr.length===bt.length)return cr}function Zr(bt,cr,oi){var Jr,Xr;let Po=(Jr=bt.declarations)==null?void 0:Jr.find(Yr),va=he.enclosingDeclaration;he.enclosingDeclaration=Po||va;let Ui=yy(bt),Eo=on(Ui,lp=>tt(lp,he)),Xo=vu(bt),Rc=_o(Xo),rl=Po&&JA(Po),Wd=rl&&Ra(rl)||Zi(Ci(Xo),cA),Vl=zn(bt),bs=!!((Xr=Vl.symbol)!=null&&Xr.valueDeclaration)&&Yr(Vl.symbol.valueDeclaration),dc=bs?Wr(Vl):Se,Tg=[...Fn(Rc)?[D.createHeritageClause(94,on(Rc,lp=>KC(lp,dc,cr)))]:[],...Fn(Wd)?[D.createHeritageClause(117,Wd)]:[]],wm=Qtt(Xo,Rc,Jo(Xo)),Rm=Pr(wm,lp=>{let qC=lp.valueDeclaration;return!!qC&&!(zl(qC)&&pi(qC.name))}),Ry=vt(wm,lp=>{let qC=lp.valueDeclaration;return!!qC&&zl(qC)&&pi(qC.name)})?[D.createPropertyDeclaration(void 0,D.createPrivateIdentifier(\"#private\"),void 0,void 0,void 0)]:Je,tae=Uo(Rm,lp=>Mn(lp,!1,Rc[0])),nae=Uo(Pr(Jo(Vl),lp=>!(lp.flags&4194304)&&lp.escapedName!==\"prototype\"&&!Aa(lp)),lp=>Mn(lp,!0,dc)),pit=!bs&&!!bt.valueDeclaration&&Yn(bt.valueDeclaration)&&!vt(xa(Vl,1))?[D.createConstructorDeclaration(D.createModifiersFromModifierFlags(8),[],void 0)]:$v(1,Vl,dc,173),mit=U1(Xo,Rc[0]);he.enclosingDeclaration=va,ze(it(D.createClassDeclaration(void 0,cr,Eo,Tg,[...mit,...nae,...pit,...tae,...Ry]),bt.declarations&&Pr(bt.declarations,lp=>sl(lp)||_u(lp))[0]),oi)}function Oa(bt){return ks(bt,cr=>{if($u(cr)||Mu(cr))return vr(cr.propertyName||cr.name);if(ar(cr)||pc(cr)){let oi=pc(cr)?cr.expression:cr.right;if(br(oi))return vr(oi.name)}if(Zh(cr)){let oi=sa(cr);if(oi&&Re(oi))return vr(oi)}})}function mo(bt,cr,oi){var Jr,Xr,Po,va,Ui;let Eo=Uu(bt);if(!Eo)return L.fail();let Xo=No(L_(Eo,!0));if(!Xo)return;let Rc=CI(Xo)&&Oa(bt.declarations)||Gi(Xo.escapedName);Rc===\"export=\"&&(f_(Y)||Y.allowSyntheticDefaultImports)&&(Rc=\"default\");let rl=sd(Xo,Rc);switch(ds(Xo),Eo.kind){case 205:if(((Xr=(Jr=Eo.parent)==null?void 0:Jr.parent)==null?void 0:Xr.kind)===257){let bs=Jt(Xo.parent||Xo,he),{propertyName:dc}=Eo;ze(D.createImportDeclaration(void 0,D.createImportClause(!1,void 0,D.createNamedImports([D.createImportSpecifier(!1,dc&&Re(dc)?D.createIdentifier(vr(dc)):void 0,D.createIdentifier(cr))])),D.createStringLiteral(bs),void 0),0);break}L.failBadSyntaxKind(((Po=Eo.parent)==null?void 0:Po.parent)||Eo,\"Unhandled binding element grandparent kind in declaration serialization\");break;case 300:((Ui=(va=Eo.parent)==null?void 0:va.parent)==null?void 0:Ui.kind)===223&&co(Gi(bt.escapedName),rl);break;case 257:if(br(Eo.initializer)){let bs=Eo.initializer,dc=D.createUniqueName(cr),Tg=Jt(Xo.parent||Xo,he);ze(D.createImportEqualsDeclaration(void 0,!1,dc,D.createExternalModuleReference(D.createStringLiteral(Tg))),0),ze(D.createImportEqualsDeclaration(void 0,!1,D.createIdentifier(cr),D.createQualifiedName(dc,bs.name)),oi);break}case 268:if(Xo.escapedName===\"export=\"&&vt(Xo.declarations,bs=>Li(bs)&&Mf(bs))){as(bt);break}let Wd=!(Xo.flags&512)&&!wi(Eo);ze(D.createImportEqualsDeclaration(void 0,!1,D.createIdentifier(cr),Wd?qi(Xo,he,67108863,!1):D.createExternalModuleReference(D.createStringLiteral(Jt(Xo,he)))),Wd?oi:0);break;case 267:ze(D.createNamespaceExportDeclaration(vr(Eo.name)),0);break;case 270:{let bs=Jt(Xo.parent||Xo,he),dc=Bn?D.createStringLiteral(bs):Eo.parent.moduleSpecifier;ze(D.createImportDeclaration(void 0,D.createImportClause(!1,D.createIdentifier(cr),void 0),dc,Eo.parent.assertClause),0);break}case 271:{let bs=Jt(Xo.parent||Xo,he),dc=Bn?D.createStringLiteral(bs):Eo.parent.parent.moduleSpecifier;ze(D.createImportDeclaration(void 0,D.createImportClause(!1,void 0,D.createNamespaceImport(D.createIdentifier(cr))),dc,Eo.parent.parent.assertClause),0);break}case 277:ze(D.createExportDeclaration(void 0,!1,D.createNamespaceExport(D.createIdentifier(cr)),D.createStringLiteral(Jt(Xo,he))),0);break;case 273:{let bs=Jt(Xo.parent||Xo,he),dc=Bn?D.createStringLiteral(bs):Eo.parent.parent.parent.moduleSpecifier;ze(D.createImportDeclaration(void 0,D.createImportClause(!1,void 0,D.createNamedImports([D.createImportSpecifier(!1,cr!==Rc?D.createIdentifier(Rc):void 0,D.createIdentifier(cr))])),dc,Eo.parent.parent.parent.assertClause),0);break}case 278:let Vl=Eo.parent.parent.moduleSpecifier;co(Gi(bt.escapedName),Vl?Rc:rl,Vl&&es(Vl)?D.createStringLiteral(Vl.text):void 0);break;case 274:as(bt);break;case 223:case 208:case 209:bt.escapedName===\"default\"||bt.escapedName===\"export=\"?as(bt):co(cr,rl);break;default:return L.failBadSyntaxKind(Eo,\"Unhandled alias declaration kind in symbol serializer!\")}}function co(bt,cr,oi){ze(D.createExportDeclaration(void 0,!1,D.createNamedExports([D.createExportSpecifier(!1,bt!==cr?cr:void 0,bt)]),oi),0)}function as(bt){if(bt.flags&4194304)return!1;let cr=Gi(bt.escapedName),oi=cr===\"export=\",Xr=oi||cr===\"default\",Po=bt.declarations&&Uu(bt),va=Po&&L_(Po,!0);if(va&&Fn(va.declarations)&&vt(va.declarations,Ui=>Gn(Ui)===Gn(_r))){let Ui=Po&&(pc(Po)||ar(Po)?UH(Po):xce(Po)),Eo=Ui&&bc(Ui)?_nt(Ui):void 0,Xo=Eo&&uc(Eo,67108863,!0,!0,_r);(Xo||va)&&ds(Xo||va);let Rc=he.tracker.disableTrackSymbol;if(he.tracker.disableTrackSymbol=!0,Xr)ua.push(D.createExportAssignment(void 0,oi,wa(va,he,67108863)));else if(Eo===Ui&&Eo)co(cr,vr(Eo));else if(Ui&&_u(Ui))co(cr,sd(va,fc(va)));else{let rl=lA(cr,bt);ze(D.createImportEqualsDeclaration(void 0,!1,D.createIdentifier(rl),qi(va,he,67108863,!1)),0),co(cr,rl)}return he.tracker.disableTrackSymbol=Rc,!0}else{let Ui=lA(cr,bt),Eo=Sd(zn(No(bt)));if(Ul(Eo,bt))Ar(Eo,bt,Ui,Xr?0:1);else{let Xo=D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(Ui,void 0,Bi(he,Eo,bt,_r,ds,Bn))],2));ze(Xo,va&&va.flags&4&&va.escapedName===\"export=\"?2:cr===Ui?1:0)}return Xr?(ua.push(D.createExportAssignment(void 0,oi,D.createIdentifier(Ui))),!0):cr!==Ui?(co(cr,Ui),!0):!1}}function Ul(bt,cr){let oi=Gn(he.enclosingDeclaration);return Ur(bt)&48&&!Fn(tu(bt))&&!Ti(bt)&&!!(Fn(Pr(Jo(bt),Aa))||Fn(xa(bt,0)))&&!Fn(xa(bt,1))&&!qn(cr,_r)&&!(bt.symbol&&vt(bt.symbol.declarations,Jr=>Gn(Jr)!==oi))&&!vt(Jo(bt),Jr=>qk(Jr.escapedName))&&!vt(Jo(bt),Jr=>vt(Jr.declarations,Xr=>Gn(Xr)!==oi))&&Ji(Jo(bt),Jr=>i_(fc(Jr),R))}function F_(bt,cr,oi){return function(Xr,Po,va){var Ui,Eo,Xo,Rc,rl;let Wd=Ef(Xr),Vl=!!(Wd&8);if(Po&&Xr.flags&2887656)return[];if(Xr.flags&4194304||va&&ja(va,Xr.escapedName)&&M_(ja(va,Xr.escapedName))===M_(Xr)&&(Xr.flags&16777216)===(ja(va,Xr.escapedName).flags&16777216)&&ph(zn(Xr),Vc(va,Xr.escapedName)))return[];let bs=Wd&-513|(Po?32:0),dc=Hd(Xr,he),Tg=(Ui=Xr.declarations)==null?void 0:Ui.find(Kp(Na,rb,wi,$d,ar,br));if(Xr.flags&98304&&oi){let wm=[];if(Xr.flags&65536&&wm.push(it(D.createSetAccessorDeclaration(D.createModifiersFromModifierFlags(bs),dc,[D.createParameterDeclaration(void 0,void 0,\"arg\",void 0,Vl?void 0:Bi(he,zn(Xr),Xr,_r,ds,Bn))],void 0),((Eo=Xr.declarations)==null?void 0:Eo.find(Ng))||Tg)),Xr.flags&32768){let Rm=Wd&8;wm.push(it(D.createGetAccessorDeclaration(D.createModifiersFromModifierFlags(bs),dc,[],Rm?void 0:Bi(he,zn(Xr),Xr,_r,ds,Bn),void 0),((Xo=Xr.declarations)==null?void 0:Xo.find(zy))||Tg))}return wm}else if(Xr.flags&98311)return it(bt(D.createModifiersFromModifierFlags((M_(Xr)?64:0)|bs),dc,Xr.flags&16777216?D.createToken(57):void 0,Vl?void 0:Bi(he,mC(Xr),Xr,_r,ds,Bn),void 0),((Rc=Xr.declarations)==null?void 0:Rc.find(Kp(Na,wi)))||Tg);if(Xr.flags&8208){let wm=zn(Xr),Rm=xa(wm,0);if(bs&8)return it(bt(D.createModifiersFromModifierFlags((M_(Xr)?64:0)|bs),dc,Xr.flags&16777216?D.createToken(57):void 0,void 0,void 0),((rl=Xr.declarations)==null?void 0:rl.find(Ds))||Rm[0]&&Rm[0].declaration||Xr.declarations&&Xr.declarations[0]);let V1=[];for(let Ry of Rm){let tae=de(Ry,cr,he,{name:dc,questionToken:Xr.flags&16777216?D.createToken(57):void 0,modifiers:bs?D.createModifiersFromModifierFlags(bs):void 0}),nae=Ry.declaration&&nR(Ry.declaration.parent)?Ry.declaration.parent:Ry.declaration;V1.push(it(tae,nae))}return V1}return L.fail(`Unhandled class member kind! ${Xr.__debugFlags||Xr.flags}`)}}function Dm(bt,cr){return or(bt,!1,cr)}function $v(bt,cr,oi,Jr){let Xr=xa(cr,bt);if(bt===1){if(!oi&&Ji(Xr,Ui=>Fn(Ui.parameters)===0))return[];if(oi){let Ui=xa(oi,1);if(!Fn(Ui)&&Ji(Xr,Eo=>Fn(Eo.parameters)===0))return[];if(Ui.length===Xr.length){let Eo=!1;for(let Xo=0;Xo<Ui.length;Xo++)if(!vM(Xr[Xo],Ui[Xo],!1,!1,!0,sD)){Eo=!0;break}if(!Eo)return[]}}let va=0;for(let Ui of Xr)Ui.declaration&&(va|=hS(Ui.declaration,24));if(va)return[it(D.createConstructorDeclaration(D.createModifiersFromModifierFlags(va),[],void 0),Xr[0].declaration)]}let Po=[];for(let va of Xr){let Ui=de(va,Jr,he);Po.push(it(Ui,va.declaration))}return Po}function U1(bt,cr){let oi=[];for(let Jr of tu(bt)){if(cr){let Xr=Cm(cr,Jr.keyType);if(Xr&&ph(Jr.type,Xr.type))continue}oi.push(J(Jr,he,void 0))}return oi}function KC(bt,cr,oi){let Jr=Hp(bt,111551);if(Jr)return Jr;let Xr=lA(`${oi}_base`),Po=D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(Xr,void 0,u(cr,he))],2));return ze(Po,0),D.createExpressionWithTypeArguments(D.createIdentifier(Xr),void 0)}function Hp(bt,cr){let oi,Jr;if(bt.target&&NE(bt.target.symbol,_r,cr)?(oi=on(Ko(bt),Xr=>u(Xr,he)),Jr=wa(bt.target.symbol,he,788968)):bt.symbol&&NE(bt.symbol,_r,cr)&&(Jr=wa(bt.symbol,he,788968)),Jr)return D.createExpressionWithTypeArguments(Jr,oi)}function cA(bt){let cr=Hp(bt,788968);if(cr)return cr;if(bt.symbol)return D.createExpressionWithTypeArguments(wa(bt.symbol,he,788968),void 0)}function lA(bt,cr){var oi,Jr;let Xr=cr?$a(cr):void 0;if(Xr&&he.remappedSymbolNames.has(Xr))return he.remappedSymbolNames.get(Xr);cr&&(bt=iT(cr,bt));let Po=0,va=bt;for(;(oi=he.usedSymbolNames)!=null&&oi.has(bt);)Po++,bt=`${va}_${Po}`;return(Jr=he.usedSymbolNames)==null||Jr.add(bt),Xr&&he.remappedSymbolNames.set(Xr,bt),bt}function iT(bt,cr){if(cr===\"default\"||cr===\"__class\"||cr===\"__function\"){let oi=he.flags;he.flags|=16777216;let Jr=_y(bt,he);he.flags=oi,cr=Jr.length>0&&Xw(Jr.charCodeAt(0))?u_(Jr):Jr}return cr===\"default\"?cr=\"_default\":cr===\"export=\"&&(cr=\"_exports\"),cr=i_(cr,R)&&!fS(cr)?cr:\"_\"+cr.replace(/[^a-zA-Z0-9]/g,\"_\"),cr}function sd(bt,cr){let oi=$a(bt);return he.remappedSymbolNames.has(oi)?he.remappedSymbolNames.get(oi):(cr=iT(bt,cr),he.remappedSymbolNames.set(oi,cr),cr)}}}function kl(n,a,c=16384,u){return u?p(u).getText():SI(p);function p(h){let T=D.createTypePredicateNode(n.kind===2||n.kind===3?D.createToken(129):void 0,n.kind===1||n.kind===3?D.createIdentifier(n.parameterName):D.createThisTypeNode(),n.type&&Be.typeToTypeNode(n.type,a,qr(c)|70221824|512)),k=rE(),O=a&&Gn(a);return k.writeNode(4,T,O,h),h}}function Ed(n){let a=[],c=0;for(let u=0;u<n.length;u++){let p=n[u];if(c|=p.flags,!(p.flags&98304)){if(p.flags&1568){let h=p.flags&512?Te:Kk(p);if(h.flags&1048576){let T=h.types.length;if(u+T<=n.length&&Hu(n[u+T-1])===Hu(h.types[T-1])){a.push(h),u+=T-1;continue}}}a.push(p)}}return c&65536&&a.push(ln),c&32768&&a.push(Oe),a||n}function Ud(n){return n===8?\"private\":n===16?\"protected\":\"public\"}function fy(n){if(n.symbol&&n.symbol.flags&2048&&n.symbol.declarations){let a=dR(n.symbol.declarations[0].parent);if(Ep(a))return fr(a)}}function Td(n){return n&&n.parent&&n.parent.kind===265&&D0(n.parent.parent)}function Ov(n){return n.kind===308||lu(n)}function Nv(n,a){let c=Ai(n).nameType;if(c){if(c.flags&384){let u=\"\"+c.value;return!i_(u,Do(Y))&&!Wm(u)?`\"${_S(u,34)}\"`:Wm(u)&&na(u,\"-\")?`[${u}]`:u}if(c.flags&8192)return`[${_y(c.symbol,a)}]`}}function _y(n,a){if(a&&n.escapedName===\"default\"&&!(a.flags&16384)&&(!(a.flags&16777216)||!n.declarations||a.enclosingDeclaration&&jn(n.declarations[0],Ov)!==jn(a.enclosingDeclaration,Ov)))return\"default\";if(n.declarations&&n.declarations.length){let u=ks(n.declarations,h=>sa(h)?h:void 0),p=u&&sa(u);if(u&&p){if(Pa(u)&&sS(u))return fc(n);if(ts(p)&&!(ac(n)&4096)){let h=Ai(n).nameType;if(h&&h.flags&384){let T=Nv(n,a);if(T!==void 0)return T}}return os(p)}if(u||(u=n.declarations[0]),u.parent&&u.parent.kind===257)return os(u.parent.name);switch(u.kind){case 228:case 215:case 216:return a&&!a.encounteredError&&!(a.flags&131072)&&(a.encounteredError=!0),u.kind===228?\"(Anonymous class)\":\"(Anonymous function)\"}}let c=Nv(n,a);return c!==void 0?c:fc(n)}function Xf(n){if(n){let c=Rr(n);return c.isVisible===void 0&&(c.isVisible=!!a()),c.isVisible}return!1;function a(){switch(n.kind){case 341:case 349:case 343:return!!(n.parent&&n.parent.parent&&n.parent.parent.parent&&Li(n.parent.parent.parent));case 205:return Xf(n.parent.parent);case 257:if(La(n.name)&&!n.name.elements.length)return!1;case 264:case 260:case 261:case 262:case 259:case 263:case 268:if(D0(n))return!0;let c=FE(n);return!(wg(n)&1)&&!(n.kind!==268&&c.kind!==308&&c.flags&16777216)?gm(c):Xf(c);case 169:case 168:case 174:case 175:case 171:case 170:if(cd(n,24))return!1;case 173:case 177:case 176:case 178:case 166:case 265:case 181:case 182:case 184:case 180:case 185:case 186:case 189:case 190:case 193:case 199:return Xf(n.parent);case 270:case 271:case 273:return!1;case 165:case 308:case 267:return!0;case 274:return!1;default:return!1}}}function ME(n,a){let c;n.parent&&n.parent.kind===274?c=zs(n,n.escapedText,2998271,void 0,n,!1):n.parent.kind===278&&(c=Kf(n.parent,2998271));let u,p;return c&&(p=new Set,p.add($a(c)),h(c.declarations)),u;function h(T){mn(T,k=>{let O=x1(k)||k;if(a?Rr(k).isVisible=!0:(u=u||[],Of(u,O)),GA(k)){let H=k.moduleReference,J=Yd(H),de=zs(k,J.escapedText,901119,void 0,void 0,!1);de&&p&&_0(p,$a(de))&&h(de.declarations)}})}}function cf(n,a){let c=Sm(n,a);if(c>=0){let{length:u}=Wh;for(let p=c;p<u;p++)S_[p]=!1;return!1}return Wh.push(n),S_.push(!0),hv.push(a),!0}function Sm(n,a){for(let c=Wh.length-1;c>=0;c--){if(py(Wh[c],hv[c]))return-1;if(Wh[c]===n&&hv[c]===a)return c}return-1}function py(n,a){switch(a){case 0:return!!Ai(n).type;case 5:return!!Rr(n).resolvedEnumType;case 2:return!!Ai(n).declaredType;case 1:return!!n.resolvedBaseConstructorType;case 3:return!!n.resolvedReturnType;case 4:return!!n.immediateBaseConstraint;case 6:return!!n.resolvedTypeArguments;case 7:return!!n.baseTypesResolved;case 8:return!!Ai(n).writeType;case 9:return Rr(n).parameterInitializerContainsUndefined!==void 0}return L.assertNever(a)}function If(){return Wh.pop(),hv.pop(),S_.pop()}function FE(n){return jn(nm(n),a=>{switch(a.kind){case 257:case 258:case 273:case 272:case 271:case 270:return!1;default:return!0}}).parent}function Pv(n){let a=gs(ju(n));return a.typeParameters?_g(a,on(a.typeParameters,c=>Se)):a}function Vc(n,a){let c=ja(n,a);return c?zn(c):void 0}function KP(n,a){var c;return Vc(n,a)||((c=jx(n,a))==null?void 0:c.type)||ue}function Zo(n){return n&&(n.flags&1)!==0}function Ro(n){return n===ve||!!(n.flags&1&&n.aliasSymbol)}function Px(n,a){if(a!==0)return Oo(n,!1,a);let c=fr(n);return c&&Ai(c).type||Oo(n,!1,a)}function Mx(n,a,c){if(n=jc(n,O=>!(O.flags&98304)),n.flags&131072)return Ki;if(n.flags&1048576)return Ls(n,O=>Mx(O,a,c));let u=Gr(on(a,pg)),p=[],h=[];for(let O of Jo(n)){let H=TC(O,8576);!to(H,u)&&!(Ef(O)&24)&&iB(O)?p.push(O):h.push(H)}if(Zb(n)||jv(u)){if(h.length&&(u=Gr([u,...h])),u.flags&131072)return n;let O=AKe();return O?Jx(O,[n,u]):ve}let T=Ua();for(let O of p)T.set(O.escapedName,Dne(O,!1));let k=ls(c,T,Je,Je,tu(n));return k.objectFlags|=4194304,k}function V(n){return!!(n.flags&465829888)&&Js(bu(n)||ue,32768)}function me(n){let a=yh(n,V)?Ls(n,c=>c.flags&465829888?Ty(c):c):n;return wf(a,524288)}function Ue(n,a){let c=ut(n);return c?Yv(c,a):a}function ut(n){let a=Lt(n);if(a&&cR(a)&&a.flowNode){let c=dn(n);if(c){let u=it(fm.createStringLiteral(c),n),p=Ju(a)?a:fm.createParenthesizedExpression(a),h=it(fm.createElementAccessExpression(p,u),n);return go(u,h),go(h,n),p!==a&&go(p,h),h.flowNode=a.flowNode,h}}}function Lt(n){let a=n.parent.parent;switch(a.kind){case 205:case 299:return ut(a);case 206:return ut(n.parent);case 257:return a.initializer;case 223:return a.right}}function dn(n){let a=n.parent;return n.kind===205&&a.kind===203?Er(n.propertyName||n.name):n.kind===299||n.kind===300?Er(n.name):\"\"+a.elements.indexOf(n)}function Er(n){let a=pg(n);return a.flags&384?\"\"+a.value:void 0}function ii(n){let a=n.dotDotDotToken?64:0,c=Px(n.parent.parent,a);return c&&li(n,c)}function li(n,a){if(Zo(a))return a;let c=n.parent;U&&n.flags&16777216&&CT(n)?a=yg(a):U&&c.parent.initializer&&!(iu(V2e(c.parent.initializer))&65536)&&(a=wf(a,524288));let u;if(c.kind===203)if(n.dotDotDotToken){if(a=O_(a),a.flags&2||!RM(a))return Fe(n,_.Rest_types_may_only_be_created_from_object_types),ve;let p=[];for(let h of c.elements)h.dotDotDotToken||p.push(h.propertyName||h.name);u=Mx(a,p,n.symbol)}else{let p=n.propertyName||n.name,h=pg(p),T=od(a,h,32,p);u=Ue(n,T)}else{let p=wy(65|(n.dotDotDotToken?0:128),a,Oe,c),h=c.elements.indexOf(n);if(n.dotDotDotToken){let T=Ty(a);u=Im(T,po)?Ls(T,k=>EC(k,h)):nu(p)}else if(Kv(a)){let T=op(h),k=32|(RC(n)?16:0),O=Ay(a,T,k,n.name)||ve;u=Ue(n,O)}else u=p}return n.initializer?Cl(bA(n))?U&&!(iu(ID(n,0))&16777216)?me(u):u:vie(n,Gr([me(u),ID(n,0)],2)):u}function di(n){let a=Vy(n);if(a)return $r(a)}function ma(n){let a=vs(n,!0);return a.kind===104||a.kind===79&&Qf(a)===Le}function is(n){let a=vs(n,!0);return a.kind===206&&a.elements.length===0}function ao(n,a=!1,c=!0){return U&&c?gg(n,a):n}function Oo(n,a,c){if(wi(n)&&n.parent.parent.kind===246){let T=Gp(Wre(Yi(n.parent.parent.expression,c)));return T.flags&4456448?AAe(T):ae}if(wi(n)&&n.parent.parent.kind===247){let T=n.parent.parent;return e8(T)||Se}if(La(n.parent))return ii(n);let u=Na(n)&&!rm(n)||$d(n)||$ue(n),p=a&&WW(n),h=ad(n);if(cH(n))return h?Zo(h)||h===ue?h:ve:Ve?ue:Se;if(h)return ao(h,u,p);if((ge||Yn(n))&&wi(n)&&!La(n.name)&&!(wg(n)&1)&&!(n.flags&16777216)){if(!(G_(n)&2)&&(!n.initializer||ma(n.initializer)))return at;if(n.initializer&&is(n.initializer))return bn}if(ha(n)){let T=n.parent;if(T.kind===175&&Ux(T)){let H=nc(fr(n.parent),174);if(H){let J=ip(H),de=Qie(T);return de&&n===de?(L.assert(!de.type),zn(J.thisParameter)):qo(J)}}let k=QJe(T,n);if(k)return k;let O=n.symbol.escapedName===\"this\"?oCe(T):sCe(n);if(O)return ao(O,!1,p)}if(mT(n)&&n.initializer){if(Yn(n)&&!ha(n)){let k=fC(n,fr(n),$w(n));if(k)return k}let T=vie(n,ID(n,c));return ao(T,u,p)}if(Na(n)&&(ge||Yn(n)))if(zc(n)){let T=Pr(n.parent.members,oc),k=T.length?Yf(n.symbol,T):uu(n)&2?yB(n.symbol):void 0;return k&&ao(k,!0,p)}else{let T=wv(n.parent),k=T?my(n.symbol,T):uu(n)&2?yB(n.symbol):void 0;return k&&ao(k,!0,p)}if(Sp(n))return pe;if(La(n.name))return oo(n.name,!1,!0)}function id(n){if(n.valueDeclaration&&ar(n.valueDeclaration)){let a=Ai(n);return a.isConstructorDeclaredProperty===void 0&&(a.isConstructorDeclaredProperty=!1,a.isConstructorDeclaredProperty=!!Op(n)&&Ji(n.declarations,c=>ar(c)&&GB(c)&&(c.left.kind!==209||yf(c.left.argumentExpression))&&!k_(void 0,c,n,c))),a.isConstructorDeclaredProperty}return!1}function np(n){let a=n.valueDeclaration;return a&&Na(a)&&!Cl(a)&&!a.initializer&&(ge||Yn(a))}function Op(n){if(n.declarations)for(let a of n.declarations){let c=Ku(a,!1,!1);if(c&&(c.kind===173||cp(c)))return c}}function cg(n){let a=Gn(n.declarations[0]),c=Gi(n.escapedName),u=n.declarations.every(h=>Yn(h)&&Us(h)&&Bm(h.expression)),p=u?D.createPropertyAccessExpression(D.createPropertyAccessExpression(D.createIdentifier(\"module\"),D.createIdentifier(\"exports\")),c):D.createPropertyAccessExpression(D.createIdentifier(\"exports\"),c);return u&&go(p.expression.expression,p.expression),go(p.expression,p),go(p,a),p.flowNode=a.endFlowNode,Yv(p,at,Oe)}function Yf(n,a){let c=na(n.escapedName,\"__#\")?D.createPrivateIdentifier(n.escapedName.split(\"@\")[1]):Gi(n.escapedName);for(let u of a){let p=D.createPropertyAccessExpression(D.createThis(),c);go(p.expression,p),go(p,u),p.flowNode=u.returnFlowNode;let h=Fx(p,n);if(ge&&(h===at||h===bn)&&Fe(n.valueDeclaration,_.Member_0_implicitly_has_an_1_type,E(n),Ee(h)),!Im(h,zB))return PD(h)}}function my(n,a){let c=na(n.escapedName,\"__#\")?D.createPrivateIdentifier(n.escapedName.split(\"@\")[1]):Gi(n.escapedName),u=D.createPropertyAccessExpression(D.createThis(),c);go(u.expression,u),go(u,a),u.flowNode=a.returnFlowNode;let p=Fx(u,n);return ge&&(p===at||p===bn)&&Fe(n.valueDeclaration,_.Member_0_implicitly_has_an_1_type,E(n),Ee(p)),Im(p,zB)?void 0:PD(p)}function Fx(n,a){let c=a?.valueDeclaration&&(!np(a)||uu(a.valueDeclaration)&2)&&yB(a)||Oe;return Yv(n,at,c)}function GE(n,a){let c=oS(n.valueDeclaration);if(c){let k=Yn(c)?x0(c):void 0;return k&&k.typeExpression?$r(k.typeExpression):n.valueDeclaration&&fC(n.valueDeclaration,n,c)||i0(Ic(c))}let u,p=!1,h=!1;if(id(n)&&(u=my(n,Op(n))),!u){let k;if(n.declarations){let O;for(let H of n.declarations){let J=ar(H)||Pa(H)?H:Us(H)?ar(H.parent)?H.parent:H:void 0;if(!J)continue;let de=Us(J)?tR(J):ic(J);(de===4||ar(J)&&GB(J,de))&&(lf(J)?p=!0:h=!0),Pa(J)||(O=k_(O,J,n,H)),O||(k||(k=[])).push(ar(J)||Pa(J)?Mv(n,a,J,de):lt)}u=O}if(!u){if(!Fn(k))return ve;let O=p&&n.declarations?Gx(k,n.declarations):void 0;if(h){let J=yB(n);J&&((O||(O=[])).push(J),p=!0)}let H=vt(O,J=>!!(J.flags&-98305))?O:k;u=Gr(H)}}let T=Sd(ao(u,!1,h&&!p));return n.valueDeclaration&&jc(T,k=>!!(k.flags&-98305))===lt?(qv(n.valueDeclaration,Se),Se):T}function fC(n,a,c){var u,p;if(!Yn(n)||!c||!rs(c)||c.properties.length)return;let h=Ua();for(;ar(n)||br(n);){let O=vd(n);(u=O?.exports)!=null&&u.size&&ll(h,O.exports),n=ar(n)?n.parent:n.parent.parent}let T=vd(n);(p=T?.exports)!=null&&p.size&&ll(h,T.exports);let k=ls(a,h,Je,Je,Je);return k.objectFlags|=4096,k}function k_(n,a,c,u){var p;let h=Cl(a.parent);if(h){let T=Sd($r(h));if(n)!Ro(n)&&!Ro(T)&&!ph(n,T)&&cLe(void 0,n,u,T);else return T}if((p=c.parent)!=null&&p.valueDeclaration){let T=Cl(c.parent.valueDeclaration);if(T){let k=ja($r(T),c.escapedName);if(k)return Gv(k)}}return n}function Mv(n,a,c,u){if(Pa(c)){if(a)return zn(a);let T=Ic(c.arguments[2]),k=Vc(T,\"value\");if(k)return k;let O=Vc(T,\"get\");if(O){let J=F1(O);if(J)return qo(J)}let H=Vc(T,\"set\");if(H){let J=F1(H);if(J)return uie(J)}return Se}if(_C(c.left,c.right))return Se;let p=u===1&&(br(c.left)||Vs(c.left))&&(Bm(c.left.expression)||Re(c.left.expression)&&TT(c.left.expression)),h=a?zn(a):p?Hu(Ic(c.right)):i0(Ic(c.right));if(h.flags&524288&&u===2&&n.escapedName===\"export=\"){let T=R_(h),k=Ua();Mw(T.members,k);let O=k.size;a&&!a.exports&&(a.exports=Ua()),(a||n).exports.forEach((J,de)=>{var Ae;let xe=k.get(de);if(xe&&xe!==J&&!(J.flags&2097152))if(J.flags&111551&&xe.flags&111551){if(J.valueDeclaration&&xe.valueDeclaration&&Gn(J.valueDeclaration)!==Gn(xe.valueDeclaration)){let It=Gi(J.escapedName),Tn=((Ae=zr(xe.valueDeclaration,zl))==null?void 0:Ae.name)||xe.valueDeclaration;Ao(Fe(J.valueDeclaration,_.Duplicate_identifier_0,It),hr(Tn,_._0_was_also_declared_here,It)),Ao(Fe(Tn,_.Duplicate_identifier_0,It),hr(J.valueDeclaration,_._0_was_also_declared_here,It))}let tt=wo(J.flags|xe.flags,de);tt.links.type=Gr([zn(J),zn(xe)]),tt.valueDeclaration=xe.valueDeclaration,tt.declarations=Qi(xe.declarations,J.declarations),k.set(de,tt)}else k.set(de,C_(J,xe));else k.set(de,J)});let H=ls(O!==k.size?void 0:T.symbol,k,T.callSignatures,T.constructSignatures,T.indexInfos);if(O===k.size&&(h.aliasSymbol&&(H.aliasSymbol=h.aliasSymbol,H.aliasTypeArguments=h.aliasTypeArguments),Ur(h)&4)){H.aliasSymbol=h.symbol;let J=Ko(h);H.aliasTypeArguments=Fn(J)?J:void 0}return H.objectFlags|=Ur(h)&4096,H.symbol&&H.symbol.flags&32&&h===vu(H.symbol)&&(H.objectFlags|=16777216),H}return bB(h)?(qv(c,Et),Et):h}function _C(n,a){return br(n)&&n.expression.kind===108&&kO(a,c=>El(n,c))}function lf(n){let a=Ku(n,!1,!1);return a.kind===173||a.kind===259||a.kind===215&&!nR(a.parent)}function Gx(n,a){return L.assert(n.length===a.length),n.filter((c,u)=>{let p=a[u],h=ar(p)?p:ar(p.parent)?p.parent:void 0;return h&&lf(h)})}function hy(n,a,c){if(n.initializer){let u=La(n.name)?oo(n.name,!0,!1):ue;return ao(vie(n,ID(n,0,u)))}return La(n.name)?oo(n.name,a,c):(c&&!Wk(n)&&qv(n,Se),a?ce:Se)}function jk(n,a,c){let u=Ua(),p,h=131200;mn(n.elements,k=>{let O=k.propertyName||k.name;if(k.dotDotDotToken){p=Fp(ae,Se,!1);return}let H=pg(O);if(!fh(H)){h|=512;return}let J=Np(H),de=4|(k.initializer?16777216:0),Ae=wo(de,J);Ae.links.type=hy(k,a,c),Ae.links.bindingElement=k,u.set(Ae.escapedName,Ae)});let T=ls(void 0,u,Je,Je,p?[p]:Je);return T.objectFlags|=h,a&&(T.pattern=n,T.objectFlags|=131072),T}function Hk(n,a,c){let u=n.elements,p=Os(u),h=p&&p.kind===205&&p.dotDotDotToken?p:void 0;if(u.length===0||u.length===1&&h)return R>=2?cAe(Se):Et;let T=on(u,J=>ol(J)?Se:hy(J,a,c)),k=s8(u,J=>!(J===h||ol(J)||RC(J)),u.length-1)+1,O=on(u,(J,de)=>J===h?4:de>=k?2:1),H=ap(T,O);return a&&(H=Wxe(H),H.pattern=n,H.objectFlags|=131072),H}function oo(n,a=!1,c=!1){return n.kind===203?jk(n,a,c):Hk(n,a,c)}function Zs(n,a){return gy(Oo(n,!0,0),n,a)}function Fv(n){let a=vd(n),c=pKe(!1);return c&&a&&a===c}function gy(n,a,c){return n?(n.flags&4096&&Fv(a.parent)&&(n=wne(a)),c&&CB(a,n),n.flags&8192&&(Wo(a)||!a.type)&&n.symbol!==fr(a)&&(n=j),Sd(n)):(n=ha(a)&&a.dotDotDotToken?Et:Se,c&&(Wk(a)||qv(a,n)),n)}function Wk(n){let a=nm(n),c=a.kind===166?a.parent:a;return qM(c)}function ad(n){let a=Cl(n);if(a)return $r(a)}function zk(n){let a=n.valueDeclaration;return a?(Wo(a)&&(a=bA(a)),ha(a)?fB(a.parent):!1):!1}function y(n){let a=Ai(n);if(!a.type){let c=I(n);return!a.type&&!zk(n)&&(a.type=c),c}return a.type}function I(n){if(n.flags&4194304)return Pv(n);if(n===ct)return Se;if(n.flags&134217728&&n.valueDeclaration){let u=fr(Gn(n.valueDeclaration)),p=wo(u.flags,\"exports\");p.declarations=u.declarations?u.declarations.slice():[],p.parent=n,p.links.target=u,u.valueDeclaration&&(p.valueDeclaration=u.valueDeclaration),u.members&&(p.members=new Map(u.members)),u.exports&&(p.exports=new Map(u.exports));let h=Ua();return h.set(\"exports\",p),ls(n,h,Je,Je,Je)}L.assertIsDefined(n.valueDeclaration);let a=n.valueDeclaration;if(Li(a)&&Mf(a))return a.statements.length?Sd(i0(Yi(a.statements[0].expression))):Ki;if(rb(a))return Tr(n);if(!cf(n,0))return n.flags&512&&!(n.flags&67108864)?Vd(n):pC(n);let c;if(a.kind===274)c=gy(ad(a)||Ic(a.expression),a);else if(ar(a)||Yn(a)&&(Pa(a)||(br(a)||H6(a))&&ar(a.parent)))c=GE(n);else if(br(a)||Vs(a)||Re(a)||es(a)||Vf(a)||sl(a)||Jc(a)||Nc(a)&&!s_(a)||zm(a)||Li(a)){if(n.flags&9136)return Vd(n);c=ar(a.parent)?GE(n):ad(a)||Se}else if(yl(a))c=ad(a)||NIe(a);else if(Sp(a))c=ad(a)||bCe(a);else if(xf(a))c=ad(a)||BC(a.name,0);else if(s_(a))c=ad(a)||PIe(a,0);else if(ha(a)||Na(a)||$d(a)||wi(a)||Wo(a)||a6(a))c=Zs(a,!0);else if(hb(a))c=Vd(n);else if(q0(a))c=ug(n);else return L.fail(\"Unhandled declaration kind! \"+L.formatSyntaxKind(a.kind)+\" for \"+L.formatSymbol(n));return If()?c:n.flags&512&&!(n.flags&67108864)?Vd(n):pC(n)}function N(n){if(n)switch(n.kind){case 174:return U_(n);case 175:return Fce(n);case 169:return L.assert(rm(n)),Cl(n)}}function te(n){let a=N(n);return a&&$r(a)}function Me(n){let a=Qie(n);return a&&a.symbol}function Pt(n){return Yb(ip(n))}function Tr(n){let a=Ai(n);if(!a.type){if(!cf(n,0))return ve;let c=nc(n,174),u=nc(n,175),p=zr(nc(n,169),Id),h=c&&Yn(c)&&di(c)||te(c)||te(u)||te(p)||c&&c.body&&rU(c)||p&&p.initializer&&Zs(p,!0);h||(u&&!qM(u)?Ip(ge,u,_.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation,E(n)):c&&!qM(c)?Ip(ge,c,_.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation,E(n)):p&&!qM(p)&&Ip(ge,p,_.Member_0_implicitly_has_an_1_type,E(n),\"any\"),h=Se),If()||(N(c)?Fe(c,_._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,E(n)):N(u)||N(p)?Fe(u,_._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,E(n)):c&&ge&&Fe(c,_._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions,E(n)),h=Se),a.type=h}return a.type}function Fi(n){var a;let c=Ai(n);if(!c.writeType){if(!cf(n,8))return ve;let u=(a=nc(n,175))!=null?a:zr(nc(n,169),Id),p=te(u);If()||(N(u)&&Fe(u,_._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,E(n)),p=Se),c.writeType=p||Tr(n)}return c.writeType}function Da(n){let a=Wr(vu(n));return a.flags&8650752?a:a.flags&2097152?wr(a.types,c=>!!(c.flags&8650752)):void 0}function Vd(n){let a=Ai(n),c=a;if(!a.type){let u=n.valueDeclaration&&eU(n.valueDeclaration,!1);if(u){let p=oie(n,u);p&&(n=p,a=p.links)}c.type=a.type=lg(n)}return a.type}function lg(n){let a=n.valueDeclaration;if(n.flags&1536&&CI(n))return Se;if(a&&(a.kind===223||Us(a)&&a.parent.kind===223))return GE(n);if(n.flags&512&&a&&Li(a)&&a.commonJsModuleIndicator){let u=Vu(n);if(u!==n){if(!cf(n,0))return ve;let p=No(n.exports.get(\"export=\")),h=GE(p,p===u?void 0:u);return If()?h:pC(n)}}let c=Bd(16,n);if(n.flags&32){let u=Da(n);return u?so([c,u]):c}else return U&&n.flags&16777216?gg(c):c}function ug(n){let a=Ai(n);return a.type||(a.type=_xe(n))}function dg(n){let a=Ai(n);if(!a.type){let c=wc(n),u=n.declarations&&L_(Uu(n),!0),p=ks(u?.declarations,h=>pc(h)?ad(h):void 0);a.type=u?.declarations&&yU(u.declarations)&&n.declarations.length?cg(u):yU(n.declarations)?at:p||(Fl(c)&111551?zn(c):ve)}return a.type}function wte(n){let a=Ai(n);return a.type||(a.type=Oi(zn(a.target),a.mapper))}function Rte(n){let a=Ai(n);return a.writeType||(a.writeType=Oi(mC(a.target),a.mapper))}function pC(n){let a=n.valueDeclaration;return Cl(a)?(Fe(n.valueDeclaration,_._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,E(n)),ve):(ge&&(a.kind!==166||a.initializer)&&Fe(n.valueDeclaration,_._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer,E(n)),Se)}function Jk(n){let a=Ai(n);return a.type||(L.assertIsDefined(a.deferralParent),L.assertIsDefined(a.deferralConstituents),a.type=a.deferralParent.flags&1048576?Gr(a.deferralConstituents):so(a.deferralConstituents)),a.type}function Ote(n){let a=Ai(n);return!a.writeType&&a.deferralWriteConstituents&&(L.assertIsDefined(a.deferralParent),L.assertIsDefined(a.deferralConstituents),a.writeType=a.deferralParent.flags&1048576?Gr(a.deferralWriteConstituents):so(a.deferralWriteConstituents)),a.writeType}function mC(n){let a=ac(n);return n.flags&4?a&2?a&65536?Ote(n)||Jk(n):n.links.writeType||n.links.type:zn(n):n.flags&98304?a&1?Rte(n):Fi(n):zn(n)}function zn(n){let a=ac(n);return a&65536?Jk(n):a&1?wte(n):a&262144?NJe(n):a&8192?JXe(n):n.flags&7?y(n):n.flags&9136?Vd(n):n.flags&8?ug(n):n.flags&98304?Tr(n):n.flags&2097152?dg(n):ve}function Gv(n){return KE(zn(n),!!(n.flags&16777216))}function Bv(n,a){return n!==void 0&&a!==void 0&&(Ur(n)&4)!==0&&n.target===a}function Bx(n){return Ur(n)&4?n.target:n}function BE(n,a){return c(n);function c(u){if(Ur(u)&7){let p=Bx(u);return p===a||vt(_o(p),c)}else if(u.flags&2097152)return vt(u.types,c);return!1}}function qP(n,a){for(let c of a)n=xg(n,UE(fr(c)));return n}function hC(n,a){for(;;){if(n=n.parent,n&&ar(n)){let c=ic(n);if(c===6||c===3){let u=fr(n.left);u&&u.parent&&!jn(u.parent.valueDeclaration,p=>n===p)&&(n=u.parent.valueDeclaration)}}if(!n)return;switch(n.kind){case 260:case 228:case 261:case 176:case 177:case 170:case 181:case 182:case 320:case 259:case 171:case 215:case 216:case 262:case 348:case 349:case 343:case 341:case 197:case 191:{let u=hC(n,a);if(n.kind===197)return Sn(u,UE(fr(n.typeParameter)));if(n.kind===191)return Qi(u,PAe(n));let p=qP(u,jy(n)),h=a&&(n.kind===260||n.kind===228||n.kind===261||cp(n))&&vu(fr(n)).thisType;return h?Sn(p,h):p}case 344:let c=uR(n);c&&(n=c.valueDeclaration);break;case 323:{let u=hC(n,a);return n.tags?qP(u,Uo(n.tags,p=>H_(p)?p.typeParameters:void 0)):u}}}}function WG(n){var a;let c=n.flags&32||n.flags&16?n.valueDeclaration:(a=n.declarations)==null?void 0:a.find(u=>{if(u.kind===261)return!0;if(u.kind!==257)return!1;let p=u.initializer;return!!p&&(p.kind===215||p.kind===216)});return L.assert(!!c,\"Class was missing valueDeclaration -OR- non-class had no interface declarations\"),hC(c)}function yy(n){if(!n.declarations)return;let a;for(let c of n.declarations)(c.kind===261||c.kind===260||c.kind===228||cp(c)||sR(c))&&(a=qP(a,jy(c)));return a}function D1(n){return Qi(WG(n),yy(n))}function XP(n){let a=xa(n,1);if(a.length===1){let c=a[0];if(!c.typeParameters&&c.parameters.length===1&&Xl(c)){let u=UM(c.parameters[0]);return Zo(u)||Xne(u)===Se}}return!1}function Uv(n){if(xa(n,1).length>0)return!0;if(n.flags&8650752){let a=bu(n);return!!a&&XP(a)}return!1}function yn(n){let a=Nh(n.symbol);return a&&hp(a)}function Or(n,a,c){let u=Fn(a),p=Yn(c);return Pr(xa(n,1),h=>(p||u>=Mp(h.typeParameters))&&u<=Fn(h.typeParameters))}function xr(n,a,c){let u=Or(n,a,c),p=on(a,$r);return Tl(u,h=>vt(h.typeParameters)?eD(h,p,Yn(c)):h)}function Wr(n){if(!n.resolvedBaseConstructorType){let a=Nh(n.symbol),c=a&&hp(a),u=yn(n);if(!u)return n.resolvedBaseConstructorType=Oe;if(!cf(n,1))return ve;let p=Yi(u.expression);if(c&&u!==c&&(L.assert(!c.typeArguments),Yi(c.expression)),p.flags&2621440&&R_(p),!If())return Fe(n.symbol.valueDeclaration,_._0_is_referenced_directly_or_indirectly_in_its_own_base_expression,E(n.symbol)),n.resolvedBaseConstructorType=ve;if(!(p.flags&1)&&p!==ir&&!Uv(p)){let h=Fe(u.expression,_.Type_0_is_not_a_constructor_function_type,Ee(p));if(p.flags&262144){let T=bC(p),k=ue;if(T){let O=xa(T,1);O[0]&&(k=qo(O[0]))}p.symbol.declarations&&Ao(h,hr(p.symbol.declarations[0],_.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1,E(p.symbol),Ee(k)))}return n.resolvedBaseConstructorType=ve}n.resolvedBaseConstructorType=p}return n.resolvedBaseConstructorType}function Ci(n){let a=Je;if(n.symbol.declarations)for(let c of n.symbol.declarations){let u=JA(c);if(u)for(let p of u){let h=$r(p);Ro(h)||(a===Je?a=[h]:a.push(h))}}return a}function eo(n,a){Fe(n,_.Type_0_recursively_references_itself_as_a_base_type,Ee(a,void 0,2))}function _o(n){if(!n.baseTypesResolved){if(cf(n,7)&&(n.objectFlags&8?n.resolvedBaseTypes=[jd(n)]:n.symbol.flags&96?(n.symbol.flags&32&&D_(n),n.symbol.flags&64&&dh(n)):L.fail(\"type must be class or interface\"),!If()&&n.symbol.declarations))for(let a of n.symbol.declarations)(a.kind===260||a.kind===261)&&eo(a,n);n.baseTypesResolved=!0}return n.resolvedBaseTypes}function jd(n){let a=Tl(n.typeParameters,(c,u)=>n.elementFlags[u]&8?od(c,rt):c);return nu(Gr(a||Je),n.readonly)}function D_(n){n.resolvedBaseTypes=S4;let a=Eu(Wr(n));if(!(a.flags&2621441))return n.resolvedBaseTypes=Je;let c=yn(n),u,p=a.symbol?gs(a.symbol):void 0;if(a.symbol&&a.symbol.flags&32&&uh(p))u=zxe(c,a.symbol);else if(a.flags&1)u=a;else{let T=xr(a,c.typeArguments,c);if(!T.length)return Fe(c.expression,_.No_base_constructor_has_the_specified_number_of_type_arguments),n.resolvedBaseTypes=Je;u=qo(T[0])}if(Ro(u))return n.resolvedBaseTypes=Je;let h=O_(u);if(!xm(h)){let T=Xte(void 0,u),k=da(T,_.Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members,Ee(h));return Lo.add(Lh(Gn(c.expression),c.expression,k)),n.resolvedBaseTypes=Je}return n===h||BE(h,n)?(Fe(n.symbol.valueDeclaration,_.Type_0_recursively_references_itself_as_a_base_type,Ee(n,void 0,2)),n.resolvedBaseTypes=Je):(n.resolvedBaseTypes===S4&&(n.members=void 0),n.resolvedBaseTypes=[h])}function uh(n){let a=n.outerTypeParameters;if(a){let c=a.length-1,u=Ko(n);return a[c].symbol!==u[c].symbol}return!0}function xm(n){if(n.flags&262144){let a=bu(n);if(a)return xm(a)}return!!(n.flags&67633153&&!df(n)||n.flags&2097152&&Ji(n.types,xm))}function dh(n){if(n.resolvedBaseTypes=n.resolvedBaseTypes||Je,n.symbol.declarations){for(let a of n.symbol.declarations)if(a.kind===261&&PI(a))for(let c of PI(a)){let u=O_($r(c));Ro(u)||(xm(u)?n!==u&&!BE(u,n)?n.resolvedBaseTypes===Je?n.resolvedBaseTypes=[u]:n.resolvedBaseTypes.push(u):eo(a,n):Fe(c,_.An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members))}}}function gC(n){if(!n.declarations)return!0;for(let a of n.declarations)if(a.kind===261){if(a.flags&128)return!1;let c=PI(a);if(c){for(let u of c)if(bc(u.expression)){let p=uc(u.expression,788968,!0);if(!p||!(p.flags&64)||vu(p).thisType)return!1}}}return!0}function vu(n){let a=Ai(n),c=a;if(!a.declaredType){let u=n.flags&32?1:2,p=oie(n,n.valueDeclaration&&jQe(n.valueDeclaration));p&&(n=p,a=p.links);let h=c.declaredType=a.declaredType=Bd(u,n),T=WG(n),k=yy(n);(T||k||u===1||!gC(n))&&(h.objectFlags|=4,h.typeParameters=Qi(T,k),h.outerTypeParameters=T,h.localTypeParameters=k,h.instantiations=new Map,h.instantiations.set(kf(h.typeParameters),h),h.target=h,h.resolvedTypeArguments=h.typeParameters,h.thisType=rd(n),h.thisType.isThisType=!0,h.thisType.constraint=h)}return a.declaredType}function Kb(n){var a;let c=Ai(n);if(!c.declaredType){if(!cf(n,2))return ve;let u=L.checkDefined((a=n.declarations)==null?void 0:a.find(sR),\"Type alias symbol with no valid declaration found\"),p=Ff(u)?u.typeExpression:u.type,h=p?$r(p):ve;if(If()){let T=yy(n);T&&(c.typeParameters=T,c.instantiations=new Map,c.instantiations.set(kf(T),h))}else h=ve,u.kind===343?Fe(u.typeExpression.type,_.Type_alias_0_circularly_references_itself,E(n)):Fe(zl(u)&&u.name||u,_.Type_alias_0_circularly_references_itself,E(n));c.declaredType=h}return c.declaredType}function Kk(n){return n.flags&1056&&n.symbol.flags&8?gs(ju(n.symbol)):n}function dxe(n){let a=Ai(n);if(!a.declaredType){let c=[];if(n.declarations){for(let p of n.declarations)if(p.kind===263){for(let h of p.members)if(Ux(h)){let T=fr(h),k=xU(h),O=Yx(k!==void 0?Iqe(k,$a(n),T):fxe(T));Ai(T).declaredType=O,c.push(Hu(O))}}}let u=c.length?Gr(c,1,n,void 0):fxe(n);u.flags&1048576&&(u.flags|=1024,u.symbol=n),a.declaredType=u}return a.declaredType}function fxe(n){let a=Rp(32,n),c=Rp(32,n);return a.regularType=a,a.freshType=c,c.regularType=a,c.freshType=c,a}function _xe(n){let a=Ai(n);if(!a.declaredType){let c=dxe(ju(n));a.declaredType||(a.declaredType=c)}return a.declaredType}function UE(n){let a=Ai(n);return a.declaredType||(a.declaredType=rd(n))}function fJe(n){let a=Ai(n);return a.declaredType||(a.declaredType=gs(wc(n)))}function gs(n){return pxe(n)||ve}function pxe(n){if(n.flags&96)return vu(n);if(n.flags&524288)return Kb(n);if(n.flags&262144)return UE(n);if(n.flags&384)return dxe(n);if(n.flags&8)return _xe(n);if(n.flags&2097152)return fJe(n)}function YP(n){switch(n.kind){case 131:case 157:case 152:case 148:case 160:case 134:case 153:case 149:case 114:case 155:case 144:case 198:return!0;case 185:return YP(n.elementType);case 180:return!n.typeArguments||n.typeArguments.every(YP)}return!1}function _Je(n){let a=EA(n);return!a||YP(a)}function mxe(n){let a=Cl(n);return a?YP(a):!Jy(n)}function pJe(n){let a=U_(n),c=jy(n);return(n.kind===173||!!a&&YP(a))&&n.parameters.every(mxe)&&c.every(_Je)}function mJe(n){if(n.declarations&&n.declarations.length===1){let a=n.declarations[0];if(a)switch(a.kind){case 169:case 168:return mxe(a);case 171:case 170:case 173:case 174:case 175:return pJe(a)}}return!1}function hxe(n,a,c){let u=Ua();for(let p of n)u.set(p.escapedName,c&&mJe(p)?p:One(p,a));return u}function gxe(n,a){for(let c of a)!n.has(c.escapedName)&&!yxe(c)&&n.set(c.escapedName,c)}function yxe(n){return!!n.valueDeclaration&&xu(n.valueDeclaration)&&Ca(n.valueDeclaration)}function Nte(n){if(!n.declaredProperties){let a=n.symbol,c=vy(a);n.declaredProperties=uy(c),n.declaredCallSignatures=Je,n.declaredConstructSignatures=Je,n.declaredIndexInfos=Je,n.declaredCallSignatures=Xb(c.get(\"__call\")),n.declaredConstructSignatures=Xb(c.get(\"__new\")),n.declaredIndexInfos=Vxe(a)}return n}function fh(n){return!!(n.flags&8576)}function Pte(n){if(!ts(n)&&!Vs(n))return!1;let a=ts(n)?n.expression:n.argumentExpression;return bc(a)&&fh(ts(n)?vg(n):Ic(a))}function qk(n){return n.charCodeAt(0)===95&&n.charCodeAt(1)===95&&n.charCodeAt(2)===64}function $P(n){let a=sa(n);return!!a&&Pte(a)}function Ux(n){return!Xy(n)||$P(n)}function hJe(n){return Y6(n)&&!Pte(n)}function Np(n){return n.flags&8192?n.escapedName:n.flags&384?Bs(\"\"+n.value):L.fail()}function gJe(n,a,c){L.assert(!!(ac(n)&4096),\"Expected a late-bound symbol.\"),n.flags|=c,Ai(a.symbol).lateSymbol=n,n.declarations?a.symbol.isReplaceableByMethod||n.declarations.push(a):n.declarations=[a],c&111551&&(!n.valueDeclaration||n.valueDeclaration.kind!==a.kind)&&(n.valueDeclaration=a)}function vxe(n,a,c,u){L.assert(!!u.symbol,\"The member is expected to have a symbol.\");let p=Rr(u);if(!p.resolvedSymbol){p.resolvedSymbol=u.symbol;let h=ar(u)?u.left:u.name,T=Vs(h)?Ic(h.argumentExpression):vg(h);if(fh(T)){let k=Np(T),O=u.symbol.flags,H=c.get(k);H||c.set(k,H=wo(0,k,4096));let J=a&&a.get(k);if(H.flags&Kc(O)||J){let de=J?Qi(J.declarations,H.declarations):H.declarations,Ae=!(T.flags&8192)&&Gi(k)||os(h);mn(de,xe=>Fe(sa(xe)||xe,_.Property_0_was_also_declared_here,Ae)),Fe(h||u,_.Duplicate_property_0,Ae),H=wo(0,k,4096)}return H.links.nameType=T,gJe(H,u,O),H.parent?L.assert(H.parent===n,\"Existing symbol parent should match new one\"):H.parent=n,p.resolvedSymbol=H}}return p.resolvedSymbol}function Mte(n,a){let c=Ai(n);if(!c[a]){let u=a===\"resolvedExports\",p=u?n.flags&1536?Dx(n).exports:n.exports:n.members;c[a]=p||q;let h=Ua();for(let k of n.declarations||Je){let O=$se(k);if(O)for(let H of O)u===zc(H)&&$P(H)&&vxe(n,p,h,H)}let T=n.assignmentDeclarationMembers;if(T){let k=lo(T.values());for(let O of k){let H=ic(O),J=H===3||ar(O)&&GB(O,H)||H===9||H===6;u===!J&&$P(O)&&vxe(n,p,h,O)}}c[a]=Yh(p,h)||q}return c[a]}function vy(n){return n.flags&6256?Mte(n,\"resolvedMembers\"):n.members||q}function zG(n){if(n.flags&106500&&n.escapedName===\"__computed\"){let a=Ai(n);if(!a.lateSymbol&&vt(n.declarations,$P)){let c=No(n.parent);vt(n.declarations,zc)?Gd(c):vy(c)}return a.lateSymbol||(a.lateSymbol=n)}return n}function uf(n,a,c){if(Ur(n)&4){let u=n.target,p=Ko(n);if(Fn(u.typeParameters)===Fn(p)){let h=_g(u,Qi(p,[a||u.thisType]));return c?Eu(h):h}}else if(n.flags&2097152){let u=Tl(n.types,p=>uf(p,a,c));return u!==n.types?so(u):n}return c?Eu(n):n}function bxe(n,a,c,u){let p,h,T,k,O;GU(c,u,0,c.length)?(h=a.symbol?vy(a.symbol):Ua(a.declaredProperties),T=a.declaredCallSignatures,k=a.declaredConstructSignatures,O=a.declaredIndexInfos):(p=Wu(c,u),h=hxe(a.declaredProperties,p,c.length===1),T=cB(a.declaredCallSignatures,p),k=cB(a.declaredConstructSignatures,p),O=VAe(a.declaredIndexInfos,p));let H=_o(a);if(H.length){a.symbol&&h===vy(a.symbol)&&(h=Ua(a.declaredProperties)),sf(n,h,T,k,O);let J=Os(u);for(let de of H){let Ae=J?uf(Oi(de,p),J):de;gxe(h,Jo(Ae)),T=Qi(T,xa(Ae,0)),k=Qi(k,xa(Ae,1));let xe=Ae!==Se?tu(Ae):[Fp(ae,Se,!1)];O=Qi(O,Pr(xe,tt=>!Yte(O,tt.keyType)))}}sf(n,h,T,k,O)}function yJe(n){bxe(n,Nte(n),Je,Je)}function vJe(n){let a=Nte(n.target),c=Qi(a.typeParameters,[a.thisType]),u=Ko(n),p=u.length===c.length?u:Qi(u,[n]);bxe(n,a,c,p)}function Am(n,a,c,u,p,h,T,k){let O=new m(qe,k);return O.declaration=n,O.typeParameters=a,O.parameters=u,O.thisParameter=c,O.resolvedReturnType=p,O.resolvedTypePredicate=h,O.minArgumentCount=T,O.resolvedMinArgumentCount=void 0,O.target=void 0,O.mapper=void 0,O.compositeSignatures=void 0,O.compositeKind=void 0,O}function Xk(n){let a=Am(n.declaration,n.typeParameters,n.thisParameter,n.parameters,void 0,void 0,n.minArgumentCount,n.flags&39);return a.target=n.target,a.mapper=n.mapper,a.compositeSignatures=n.compositeSignatures,a.compositeKind=n.compositeKind,a}function Exe(n,a){let c=Xk(n);return c.compositeSignatures=a,c.compositeKind=1048576,c.target=void 0,c.mapper=void 0,c}function bJe(n,a){if((n.flags&24)===a)return n;n.optionalCallSignatureCache||(n.optionalCallSignatureCache={});let c=a===8?\"inner\":\"outer\";return n.optionalCallSignatureCache[c]||(n.optionalCallSignatureCache[c]=EJe(n,a))}function EJe(n,a){L.assert(a===8||a===16,\"An optional call signature can either be for an inner call chain or an outer call chain, but not both.\");let c=Xk(n);return c.flags|=a,c}function Txe(n,a){if(Xl(n)){let u=n.parameters.length-1,p=zn(n.parameters[u]);if(po(p))return[c(p,u)];if(!a&&p.flags&1048576&&Ji(p.types,po))return on(p.types,h=>c(h,u))}return[n.parameters];function c(u,p){let h=Ko(u),T=u.target.labeledElementDeclarations,k=on(h,(O,H)=>{let de=!!T&&nU(T[H])||FC(n,p+H,u),Ae=u.target.elementFlags[H],xe=Ae&12?32768:Ae&2?16384:0,tt=wo(1,de,xe);return tt.links.type=Ae&4?nu(O):O,tt});return Qi(n.parameters.slice(0,p),k)}}function TJe(n){let a=Wr(n),c=xa(a,1),u=Nh(n.symbol),p=!!u&&Mr(u,256);if(c.length===0)return[Am(void 0,n.localTypeParameters,void 0,Je,n,void 0,0,p?4:0)];let h=yn(n),T=Yn(h),k=aM(h),O=Fn(k),H=[];for(let J of c){let de=Mp(J.typeParameters),Ae=Fn(J.typeParameters);if(T||O>=de&&O<=Ae){let xe=Ae?JG(J,Sy(k,J.typeParameters,de,T)):Xk(J);xe.typeParameters=n.localTypeParameters,xe.resolvedReturnType=n,xe.flags=p?xe.flags|4:xe.flags&-5,H.push(xe)}}return H}function Fte(n,a,c,u,p){for(let h of n)if(vM(h,a,c,u,p,c?Kqe:sD))return h}function SJe(n,a,c){if(a.typeParameters){if(c>0)return;for(let p=1;p<n.length;p++)if(!Fte(n[p],a,!1,!1,!1))return;return[a]}let u;for(let p=0;p<n.length;p++){let h=p===c?a:Fte(n[p],a,!0,!1,!0);if(!h)return;u=xg(u,h)}return u}function Gte(n){let a,c;for(let u=0;u<n.length;u++){if(n[u].length===0)return Je;n[u].length>1&&(c=c===void 0?u:-1);for(let p of n[u])if(!a||!Fte(a,p,!1,!1,!0)){let h=SJe(n,p,u);if(h){let T=p;if(h.length>1){let k=p.thisParameter,O=mn(h,H=>H.thisParameter);if(O){let H=so(Zi(h,J=>J.thisParameter&&zn(J.thisParameter)));k=qE(O,H)}T=Exe(p,h),T.thisParameter=k}(a||(a=[])).push(T)}}}if(!Fn(a)&&c!==-1){let u=n[c!==void 0?c:0],p=u.slice();for(let h of n)if(h!==u){let T=h[0];if(L.assert(!!T,\"getUnionSignatures bails early on empty signature lists and should not have empty lists on second pass\"),p=T.typeParameters&&vt(p,k=>!!k.typeParameters&&!Sxe(T.typeParameters,k.typeParameters))?void 0:on(p,k=>CJe(k,T)),!p)break}a=p}return a||Je}function Sxe(n,a){if(Fn(n)!==Fn(a))return!1;if(!n||!a)return!0;let c=Wu(a,n);for(let u=0;u<n.length;u++){let p=n[u],h=a[u];if(p!==h&&!ph(bC(p)||ue,Oi(bC(h)||ue,c)))return!1}return!0}function xJe(n,a,c){if(!n||!a)return n||a;let u=so([zn(n),Oi(zn(a),c)]);return qE(n,u)}function AJe(n,a,c){let u=xd(n),p=xd(a),h=u>=p?n:a,T=h===n?a:n,k=h===n?u:p,O=jp(n)||jp(a),H=O&&!jp(h),J=new Array(k+(H?1:0));for(let de=0;de<k;de++){let Ae=tT(h,de);h===a&&(Ae=Oi(Ae,c));let xe=tT(T,de)||ue;T===a&&(xe=Oi(xe,c));let tt=so([Ae,xe]),It=O&&!H&&de===k-1,Tn=de>=Vp(h)&&de>=Vp(T),un=de>=u?void 0:FC(n,de),Nn=de>=p?void 0:FC(a,de),en=un===Nn?un:un?Nn?void 0:un:Nn,cn=wo(1|(Tn&&!It?16777216:0),en||`arg${de}`);cn.links.type=It?nu(tt):tt,J[de]=cn}if(H){let de=wo(1,\"args\");de.links.type=nu(P_(T,k)),T===a&&(de.links.type=Oi(de.links.type,c)),J[k]=de}return J}function CJe(n,a){let c=n.typeParameters||a.typeParameters,u;n.typeParameters&&a.typeParameters&&(u=Wu(a.typeParameters,n.typeParameters));let p=n.declaration,h=AJe(n,a,u),T=xJe(n.thisParameter,a.thisParameter,u),k=Math.max(n.minArgumentCount,a.minArgumentCount),O=Am(p,c,T,h,void 0,void 0,k,(n.flags|a.flags)&39);return O.compositeKind=1048576,O.compositeSignatures=Qi(n.compositeKind!==2097152&&n.compositeSignatures||[n],[a]),u&&(O.mapper=n.compositeKind!==2097152&&n.mapper&&n.compositeSignatures?Jv(n.mapper,u):u),O}function xxe(n){let a=tu(n[0]);if(a){let c=[];for(let u of a){let p=u.keyType;Ji(n,h=>!!Cm(h,p))&&c.push(Fp(p,Gr(on(n,h=>fg(h,p))),vt(n,h=>Cm(h,p).isReadonly)))}return c}return Je}function IJe(n){let a=Gte(on(n.types,p=>p===Hs?[jt]:xa(p,0))),c=Gte(on(n.types,p=>xa(p,1))),u=xxe(n.types);sf(n,q,a,c,u)}function QP(n,a){return n?a?so([n,a]):n:a}function Axe(n){let a=Oy(n,u=>xa(u,1).length>0),c=on(n,XP);if(a>0&&a===Oy(c,u=>u)){let u=c.indexOf(!0);c[u]=!1}return c}function LJe(n,a,c,u){let p=[];for(let h=0;h<a.length;h++)h===u?p.push(n):c[h]&&p.push(qo(xa(a[h],1)[0]));return so(p)}function kJe(n){let a,c,u,p=n.types,h=Axe(p),T=Oy(h,k=>k);for(let k=0;k<p.length;k++){let O=n.types[k];if(!h[k]){let H=xa(O,1);H.length&&T>0&&(H=on(H,J=>{let de=Xk(J);return de.resolvedReturnType=LJe(qo(J),p,h,k),de})),c=Cxe(c,H)}a=Cxe(a,xa(O,0)),u=ou(tu(O),(H,J)=>Ixe(H,J,!1),u)}sf(n,q,a||Je,c||Je,u||Je)}function Cxe(n,a){for(let c of a)(!n||Ji(n,u=>!vM(u,c,!1,!1,!1,sD)))&&(n=Sn(n,c));return n}function Ixe(n,a,c){if(n)for(let u=0;u<n.length;u++){let p=n[u];if(p.keyType===a.keyType)return n[u]=Fp(p.keyType,c?Gr([p.type,a.type]):so([p.type,a.type]),c?p.isReadonly||a.isReadonly:p.isReadonly&&a.isReadonly),n}return Sn(n,a)}function DJe(n){if(n.target){sf(n,q,Je,Je,Je);let T=hxe(Ey(n.target),n.mapper,!1),k=cB(xa(n.target,0),n.mapper),O=cB(xa(n.target,1),n.mapper),H=VAe(tu(n.target),n.mapper);sf(n,T,k,O,H);return}let a=No(n.symbol);if(a.flags&2048){sf(n,q,Je,Je,Je);let T=vy(a),k=Xb(T.get(\"__call\")),O=Xb(T.get(\"__new\")),H=Vxe(a);sf(n,T,k,O,H);return}let c=q,u;if(a.exports&&(c=Gd(a),a===Ye)){let T=new Map;c.forEach(k=>{var O;!(k.flags&418)&&!(k.flags&512&&((O=k.declarations)!=null&&O.length)&&Ji(k.declarations,lu))&&T.set(k.escapedName,k)}),c=T}let p;if(sf(n,c,Je,Je,Je),a.flags&32){let T=vu(a),k=Wr(T);k.flags&11272192?(c=Ua(Rx(c)),gxe(c,Jo(k))):k===Se&&(p=Fp(ae,Se,!1))}let h=ane(c);if(h?u=one(h):(p&&(u=Sn(u,p)),a.flags&384&&(gs(a).flags&32||vt(n.properties,T=>!!(zn(T).flags&296)))&&(u=Sn(u,yu))),sf(n,c,Je,Je,u||Je),a.flags&8208&&(n.callSignatures=Xb(a)),a.flags&32){let T=vu(a),k=a.members?Xb(a.members.get(\"__constructor\")):Je;a.flags&16&&(k=si(k.slice(),Zi(n.callSignatures,O=>cp(O.declaration)?Am(O.declaration,O.typeParameters,O.thisParameter,O.parameters,T,void 0,O.minArgumentCount,O.flags&39):void 0))),k.length||(k=TJe(T)),n.constructSignatures=k}}function wJe(n,a,c){return Oi(n,Wu([a.indexType,a.objectType],[op(0),ap([c])]))}function RJe(n){let a=Cm(n.source,ae),c=Pp(n.mappedType),u=!(c&1),p=c&4?0:16777216,h=a?[Fp(ae,LB(a.type,n.mappedType,n.constraintType),u&&a.isReadonly)]:Je,T=Ua();for(let k of Jo(n.source)){let O=8192|(u&&M_(k)?8:0),H=wo(4|k.flags&p,k.escapedName,O);if(H.declarations=k.declarations,H.links.nameType=Ai(k).nameType,H.links.propertyType=zn(k),n.constraintType.type.flags&8388608&&n.constraintType.type.objectType.flags&262144&&n.constraintType.type.indexType.flags&262144){let J=n.constraintType.type.objectType,de=wJe(n.mappedType,n.constraintType.type,J);H.links.mappedType=de,H.links.constraintType=Gp(J)}else H.links.mappedType=n.mappedType,H.links.constraintType=n.constraintType;T.set(k.escapedName,H)}sf(n,T,Je,Je,h)}function ZP(n){if(n.flags&4194304){let a=Eu(n.type);return Qx(a)?_Ae(a):Gp(a)}if(n.flags&16777216){if(n.root.isDistributive){let a=n.checkType,c=ZP(a);if(c!==a)return Fne(n,O1(n.root.checkType,c,n.mapper))}return n}if(n.flags&1048576)return Ls(n,ZP,!0);if(n.flags&2097152){let a=n.types;return a.length===2&&a[0].flags&76&&a[1]===mc?n:so(Tl(n.types,ZP))}return n}function Bte(n){return ac(n)&4096}function Ute(n,a,c,u){for(let p of Jo(n))u(TC(p,a));if(n.flags&1)u(ae);else for(let p of tu(n))(!c||p.keyType.flags&134217732)&&u(p.keyType)}function OJe(n){let a=Ua(),c;sf(n,q,Je,Je,Je);let u=w_(n),p=rp(n),h=by(n.target||n),T=h&&to(h,u),k=_h(n.target||n),O=Eu(yC(n)),H=Pp(n),J=we?128:8576;Yk(n)?Ute(O,J,we,de):QE(ZP(p),de),sf(n,a,Je,Je,c||Je);function de(xe){let tt=h?Oi(h,oD(n.mapper,u,xe)):xe;QE(tt,It=>Ae(xe,It))}function Ae(xe,tt){if(fh(tt)){let It=Np(tt),Tn=a.get(It);if(Tn)Tn.links.nameType=Gr([Tn.links.nameType,tt]),Tn.links.keyType=Gr([Tn.links.keyType,xe]);else{let un=fh(xe)?ja(O,Np(xe)):void 0,Nn=!!(H&4||!(H&8)&&un&&un.flags&16777216),en=!!(H&1||!(H&2)&&un&&M_(un)),cn=U&&!Nn&&un&&un.flags&16777216,rr=un?Bte(un):0,Jt=wo(4|(Nn?16777216:0),It,rr|262144|(en?8:0)|(cn?524288:0));Jt.links.mappedType=n,Jt.links.nameType=tt,Jt.links.keyType=xe,un&&(Jt.links.syntheticOrigin=un,Jt.declarations=!h||T?un.declarations:void 0),a.set(It,Jt)}}else if(KG(tt)||tt.flags&33){let It=tt.flags&5?ae:tt.flags&40?rt:tt,Tn=Oi(k,oD(n.mapper,u,xe)),un=Fp(It,Tn,!!(H&1));c=Ixe(c,un,!0)}}}function NJe(n){if(!n.links.type){let a=n.links.mappedType;if(!cf(n,0))return a.containsError=!0,ve;let c=_h(a.target||a),u=oD(a.mapper,w_(a),n.links.keyType),p=Oi(c,u),h=U&&n.flags&16777216&&!Js(p,49152)?gg(p,!0):n.links.checkFlags&524288?tre(p):p;If()||(Fe(P,_.Type_of_property_0_circularly_references_itself_in_mapped_type_1,E(n),Ee(a)),h=ve),n.links.type=h}return n.links.type}function w_(n){return n.typeParameter||(n.typeParameter=UE(fr(n.declaration.typeParameter)))}function rp(n){return n.constraintType||(n.constraintType=eu(w_(n))||ve)}function by(n){return n.declaration.nameType?n.nameType||(n.nameType=Oi($r(n.declaration.nameType),n.mapper)):void 0}function _h(n){return n.templateType||(n.templateType=n.declaration.type?Oi(ao($r(n.declaration.type),!0,!!(Pp(n)&4)),n.mapper):ve)}function Lxe(n){return EA(n.declaration.typeParameter)}function Yk(n){let a=Lxe(n);return a.kind===195&&a.operator===141}function yC(n){if(!n.modifiersType)if(Yk(n))n.modifiersType=Oi($r(Lxe(n).type),n.mapper);else{let a=Cne(n.declaration),c=rp(a),u=c&&c.flags&262144?eu(c):c;n.modifiersType=u&&u.flags&4194304?Oi(u.type,n.mapper):ue}return n.modifiersType}function Pp(n){let a=n.declaration;return(a.readonlyToken?a.readonlyToken.kind===40?2:1:0)|(a.questionToken?a.questionToken.kind===40?8:4:0)}function kxe(n){let a=Pp(n);return a&8?-1:a&4?1:0}function Vte(n){let a=kxe(n),c=yC(n);return a||(df(c)?kxe(c):0)}function PJe(n){return!!(Ur(n)&32&&Pp(n)&4)}function df(n){if(Ur(n)&32){let a=rp(n);if(jv(a))return!0;let c=by(n);if(c&&jv(Oi(c,n0(w_(n),a))))return!0}return!1}function R_(n){return n.members||(n.flags&524288?n.objectFlags&4?vJe(n):n.objectFlags&3?yJe(n):n.objectFlags&1024?RJe(n):n.objectFlags&16?DJe(n):n.objectFlags&32?OJe(n):L.fail(\"Unhandled object type \"+L.formatObjectFlags(n.objectFlags)):n.flags&1048576?IJe(n):n.flags&2097152?kJe(n):L.fail(\"Unhandled type \"+L.formatTypeFlags(n.flags))),n}function Ey(n){return n.flags&524288?R_(n).properties:Je}function qb(n,a){if(n.flags&524288){let u=R_(n).members.get(a);if(u&&ig(u))return u}}function eM(n){if(!n.resolvedProperties){let a=Ua();for(let c of n.types){for(let u of Jo(c))if(!a.has(u.escapedName)){let p=qte(n,u.escapedName);p&&a.set(u.escapedName,p)}if(n.flags&1048576&&tu(c).length===0)break}n.resolvedProperties=uy(a)}return n.resolvedProperties}function Jo(n){return n=vC(n),n.flags&3145728?eM(n):Ey(n)}function MJe(n,a){n=vC(n),n.flags&3670016&&R_(n).members.forEach((c,u)=>{ag(c,u)&&a(c,u)})}function FJe(n,a){return a.properties.some(u=>{let p=u.name&&pg(u.name),h=p&&fh(p)?Np(p):void 0,T=h===void 0?void 0:Vc(n,h);return!!T&&uD(T)&&!to(G1(u),T)})}function GJe(n){let a=Gr(n);if(!(a.flags&1048576))return Wie(a);let c=Ua();for(let u of n)for(let{escapedName:p}of Wie(u))if(!c.has(p)){let h=Oxe(a,p);h&&c.set(p,h)}return lo(c.values())}function VE(n){return n.flags&262144?eu(n):n.flags&8388608?BJe(n):n.flags&16777216?VJe(n):bu(n)}function eu(n){return $k(n)?bC(n):void 0}function tM(n){var a;return!!(n.flags&262144&&vt((a=n.symbol)==null?void 0:a.declarations,c=>Mr(c,2048))||Qx(n)&&Yc(Ko(n),(c,u)=>!!(n.target.elementFlags[u]&8)&&tM(c))>=0||n.flags&8388608&&tM(n.objectType))}function BJe(n){return $k(n)?UJe(n):void 0}function jte(n){let a=mg(n,!1);return a!==n?a:VE(n)}function UJe(n){if(Jte(n))return nB(n.objectType,n.indexType);let a=jte(n.indexType);if(a&&a!==n.indexType){let u=Ay(n.objectType,a,n.accessFlags);if(u)return u}let c=jte(n.objectType);if(c&&c!==n.objectType)return Ay(c,n.indexType,n.accessFlags)}function Hte(n){if(!n.resolvedDefaultConstraint){let a=Eqe(n),c=Wv(n);n.resolvedDefaultConstraint=Zo(a)?c:Zo(c)?a:Gr([a,c])}return n.resolvedDefaultConstraint}function Dxe(n){if(n.root.isDistributive&&n.restrictiveInstantiation!==n){let a=mg(n.checkType,!1),c=a===n.checkType?VE(a):a;if(c&&c!==n.checkType){let u=Fne(n,O1(n.root.checkType,c,n.mapper));if(!(u.flags&131072))return u}}}function wxe(n){return Dxe(n)||Hte(n)}function VJe(n){return $k(n)?wxe(n):void 0}function jJe(n,a){let c,u=!1;for(let p of n)if(p.flags&465829888){let h=VE(p);for(;h&&h.flags&21233664;)h=VE(h);h&&(c=Sn(c,h),a&&(c=Sn(c,p)))}else(p.flags&469892092||hh(p))&&(u=!0);if(c&&(a||u)){if(u)for(let p of n)(p.flags&469892092||hh(p))&&(c=Sn(c,p));return mM(so(c),!1)}}function bu(n){if(n.flags&464781312){let a=Wte(n);return a!==Co&&a!==gc?a:void 0}return n.flags&4194304?Si:void 0}function Ty(n){return bu(n)||n}function $k(n){return Wte(n)!==gc}function Wte(n){if(n.resolvedBaseConstraint)return n.resolvedBaseConstraint;let a=[];return n.resolvedBaseConstraint=uf(c(n),n);function c(h){if(!h.immediateBaseConstraint){if(!cf(h,4))return gc;let T,k=AC(h);if((a.length<10||a.length<50&&!ya(a,k))&&(a.push(k),T=p(mg(h,!1)),a.pop()),!If()){if(h.flags&262144){let O=sne(h);if(O){let H=Fe(O,_.Type_parameter_0_has_a_circular_constraint,Ee(h));P&&!AT(O,P)&&!AT(P,O)&&Ao(H,hr(P,_.Circularity_originates_in_type_at_this_location))}}T=gc}h.immediateBaseConstraint=T||Co}return h.immediateBaseConstraint}function u(h){let T=c(h);return T!==Co&&T!==gc?T:void 0}function p(h){if(h.flags&262144){let T=bC(h);return h.isThisType||!T?T:u(T)}if(h.flags&3145728){let T=h.types,k=[],O=!1;for(let H of T){let J=u(H);J?(J!==H&&(O=!0),k.push(J)):O=!0}return O?h.flags&1048576&&k.length===T.length?Gr(k):h.flags&2097152&&k.length?so(k):void 0:h}if(h.flags&4194304)return Si;if(h.flags&134217728){let T=h.types,k=Zi(T,u);return k.length===T.length?WE(h.texts,k):ae}if(h.flags&268435456){let T=u(h.type);return T&&T!==h.type?w1(h.symbol,T):ae}if(h.flags&8388608){if(Jte(h))return u(nB(h.objectType,h.indexType));let T=u(h.objectType),k=u(h.indexType),O=T&&k&&Ay(T,k,h.accessFlags);return O&&u(O)}if(h.flags&16777216){let T=wxe(h);return T&&u(T)}return h.flags&33554432?u(une(h)):h}}function HJe(n){return n.resolvedApparentType||(n.resolvedApparentType=uf(n,n,!0))}function zte(n){if(n.default)n.default===Ll&&(n.default=gc);else if(n.target){let a=zte(n.target);n.default=a?Oi(a,n.mapper):Co}else{n.default=Ll;let a=n.symbol&&mn(n.symbol.declarations,u=>_c(u)&&u.default),c=a?$r(a):Co;n.default===Ll&&(n.default=c)}return n.default}function jE(n){let a=zte(n);return a!==Co&&a!==gc?a:void 0}function WJe(n){return zte(n)!==gc}function Rxe(n){return!!(n.symbol&&mn(n.symbol.declarations,a=>_c(a)&&a.default))}function zJe(n){return n.resolvedApparentType||(n.resolvedApparentType=JJe(n))}function JJe(n){let a=Nne(n);if(a&&!n.declaration.nameType){let c=eu(a);if(c&&JE(c))return Oi(n,O1(a,c,n.mapper))}return n}function Jte(n){let a;return!!(n.flags&8388608&&Ur(a=n.objectType)&32&&!df(a)&&jv(n.indexType)&&!(Pp(a)&8)&&!a.declaration.nameType)}function Eu(n){let a=n.flags&465829888?bu(n)||ue:n;return Ur(a)&32?zJe(a):a.flags&2097152?HJe(a):a.flags&402653316?Ws:a.flags&296?hd:a.flags&2112?CKe():a.flags&528?vc:a.flags&12288?iAe():a.flags&67108864?Ki:a.flags&4194304?Si:a.flags&2&&!U?Ki:a}function vC(n){return O_(Eu(O_(n)))}function Oxe(n,a,c){var u,p,h;let T,k,O,H=n.flags&1048576,J,de=4,Ae=H?0:8,xe=!1;for(let Cn of n.types){let Rn=Eu(Cn);if(!(Ro(Rn)||Rn.flags&131072)){let Br=ja(Rn,a,c),Hr=Br?Ef(Br):0;if(Br){if(Br.flags&106500&&(J??(J=H?0:16777216),H?J|=Br.flags&16777216:J&=Br.flags),!T)T=Br;else if(Br!==T)if((oA(Br)||Br)===(oA(T)||T)&&qne(T,Br,(wa,Xc)=>wa===Xc?-1:0)===-1)xe=!!T.parent&&!!Fn(yy(T.parent));else{k||(k=new Map,k.set($a(T),T));let wa=$a(Br);k.has(wa)||k.set(wa,Br)}H&&M_(Br)?Ae|=8:!H&&!M_(Br)&&(Ae&=-9),Ae|=(Hr&24?0:256)|(Hr&16?512:0)|(Hr&8?1024:0)|(Hr&32?2048:0),jre(Br)||(de=2)}else if(H){let qi=!qk(a)&&jx(Rn,a);qi?(Ae|=32|(qi.isReadonly?8:0),O=Sn(O,po(Rn)?bM(Rn)||Oe:qi.type)):Xv(Rn)&&!(Ur(Rn)&2097152)?(Ae|=32,O=Sn(O,Oe)):Ae|=16}}}if(!T||H&&(k||Ae&48)&&Ae&1536&&!(k&&KJe(k.values())))return;if(!k&&!(Ae&16)&&!O)if(xe){let Cn=(u=zr(T,Zp))==null?void 0:u.links,Rn=qE(T,Cn?.type);return Rn.parent=(h=(p=T.valueDeclaration)==null?void 0:p.symbol)==null?void 0:h.parent,Rn.links.containingType=n,Rn.links.mapper=Cn?.mapper,Rn}else return T;let tt=k?lo(k.values()):[T],It,Tn,un,Nn=[],en,cn,rr=!1;for(let Cn of tt){cn?Cn.valueDeclaration&&Cn.valueDeclaration!==cn&&(rr=!0):cn=Cn.valueDeclaration,It=si(It,Cn.declarations);let Rn=zn(Cn);Tn||(Tn=Rn,un=Ai(Cn).nameType);let Br=mC(Cn);en||Br!==Rn?en=Sn(en||Nn.slice(),Br):Rn!==Tn&&(Ae|=64),(uD(Rn)||qx(Rn)||Rn===Nr)&&(Ae|=128),Rn.flags&131072&&Rn!==Nr&&(Ae|=131072),Nn.push(Rn)}si(Nn,O);let Jt=wo(4|(J??0),a,de|Ae);return Jt.links.containingType=n,!rr&&cn&&(Jt.valueDeclaration=cn,cn.symbol.parent&&(Jt.parent=cn.symbol.parent)),Jt.declarations=It,Jt.links.nameType=un,Nn.length>2?(Jt.links.checkFlags|=65536,Jt.links.deferralParent=n,Jt.links.deferralConstituents=Nn,Jt.links.deferralWriteConstituents=en):(Jt.links.type=H?Gr(Nn):so(Nn),en&&(Jt.links.writeType=H?Gr(en):so(en))),Jt}function Kte(n,a,c){var u,p;let h=(u=n.propertyCacheWithoutObjectFunctionPropertyAugment)!=null&&u.get(a)||!c?(p=n.propertyCache)==null?void 0:p.get(a):void 0;return h||(h=Oxe(n,a,c),h&&(c?n.propertyCacheWithoutObjectFunctionPropertyAugment||(n.propertyCacheWithoutObjectFunctionPropertyAugment=Ua()):n.propertyCache||(n.propertyCache=Ua())).set(a,h)),h}function KJe(n){let a;for(let c of n){if(!c.declarations)return;if(!a){a=new Set(c.declarations);continue}if(a.forEach(u=>{ya(c.declarations,u)||a.delete(u)}),a.size===0)return}return a}function qte(n,a,c){let u=Kte(n,a,c);return u&&!(ac(u)&16)?u:void 0}function O_(n){return n.flags&1048576&&n.objectFlags&16777216?n.resolvedReducedType||(n.resolvedReducedType=qJe(n)):n.flags&2097152?(n.objectFlags&16777216||(n.objectFlags|=16777216|(vt(eM(n),XJe)?33554432:0)),n.objectFlags&33554432?lt:n):n}function qJe(n){let a=Tl(n.types,O_);if(a===n.types)return n;let c=Gr(a);return c.flags&1048576&&(c.resolvedReducedType=c),c}function XJe(n){return Nxe(n)||Pxe(n)}function Nxe(n){return!(n.flags&16777216)&&(ac(n)&131264)===192&&!!(zn(n).flags&131072)}function Pxe(n){return!n.valueDeclaration&&!!(ac(n)&1024)}function Xte(n,a){if(a.flags&2097152&&Ur(a)&33554432){let c=wr(eM(a),Nxe);if(c)return da(n,_.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents,Ee(a,void 0,536870912),E(c));let u=wr(eM(a),Pxe);if(u)return da(n,_.The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_private_in_some,Ee(a,void 0,536870912),E(u))}return n}function ja(n,a,c,u){if(n=vC(n),n.flags&524288){let p=R_(n),h=p.members.get(a);if(h&&ig(h,u))return h;if(c)return;let T=p===aa?Hs:p.callSignatures.length?Uc:p.constructSignatures.length?Gu:void 0;if(T){let k=qb(T,a);if(k)return k}return qb(ka,a)}if(n.flags&3145728)return qte(n,a,c)}function nM(n,a){if(n.flags&3670016){let c=R_(n);return a===0?c.callSignatures:c.constructSignatures}return Je}function xa(n,a){return nM(vC(n),a)}function Yte(n,a){return wr(n,c=>c.keyType===a)}function $te(n,a){let c,u,p;for(let h of n)h.keyType===ae?c=h:Vx(a,h.keyType)&&(u?(p||(p=[u])).push(h):u=h);return p?Fp(ue,so(on(p,h=>h.type)),ou(p,(h,T)=>h&&T.isReadonly,!0)):u||(c&&Vx(a,ae)?c:void 0)}function Vx(n,a){return to(n,a)||a===ae&&to(n,rt)||a===rt&&(n===Fa||!!(n.flags&128)&&Wm(n.value))}function Qte(n){return n.flags&3670016?R_(n).indexInfos:Je}function tu(n){return Qte(vC(n))}function Cm(n,a){return Yte(tu(n),a)}function fg(n,a){var c;return(c=Cm(n,a))==null?void 0:c.type}function Zte(n,a){return tu(n).filter(c=>Vx(a,c.keyType))}function rM(n,a){return $te(tu(n),a)}function jx(n,a){return rM(n,qk(a)?j:ff(Gi(a)))}function Mxe(n){var a;let c;for(let u of jy(n))c=xg(c,UE(u.symbol));return c?.length?c:Jc(n)?(a=Zk(n))==null?void 0:a.typeParameters:void 0}function ene(n){let a=[];return n.forEach((c,u)=>{LE(u)||a.push(c)}),a}function tne(n,a){if(fl(n))return;let c=yd(Ne,'\"'+n+'\"',512);return c&&a?No(c):c}function Qk(n){if(uS(n)||zR(n)||JR(n))return!0;if(n.initializer){let c=ip(n.parent),u=n.parent.parameters.indexOf(n);return L.assert(u>=0),u>=Vp(c,3)}let a=ET(n.parent);return a?!n.type&&!n.dotDotDotToken&&n.parent.parameters.indexOf(n)>=a.arguments.length:!1}function YJe(n){return Na(n)&&!rm(n)&&n.questionToken}function iM(n,a,c,u){return{kind:n,parameterName:a,parameterIndex:c,type:u}}function Mp(n){let a=0;if(n)for(let c=0;c<n.length;c++)Rxe(n[c])||(a=c+1);return a}function Sy(n,a,c,u){let p=Fn(a);if(!p)return[];let h=Fn(n);if(u||h>=c&&h<=p){let T=n?n.slice():[];for(let O=h;O<p;O++)T[O]=ve;let k=hre(u);for(let O=h;O<p;O++){let H=jE(a[O]);u&&H&&(ph(H,ue)||ph(H,Ki))&&(H=Se),T[O]=H?Oi(H,Wu(a,T)):k}return T.length=a.length,T}return n&&n.slice()}function ip(n){let a=Rr(n);if(!a.resolvedSignature){let c=[],u=0,p=0,h,T=!1,k=ET(n),O=jA(n);!k&&Yn(n)&&bce(n)&&!Joe(n)&&!Vy(n)&&(u|=32);for(let Ae=O?1:0;Ae<n.parameters.length;Ae++){let xe=n.parameters[Ae],tt=xe.symbol,It=xp(xe)?xe.typeExpression&&xe.typeExpression.type:xe.type;tt&&tt.flags&4&&!La(xe.name)&&(tt=zs(xe,tt.escapedName,111551,void 0,void 0,!1)),Ae===0&&tt.escapedName===\"this\"?(T=!0,h=xe.symbol):c.push(tt),It&&It.kind===198&&(u|=2),zR(xe)||xe.initializer||xe.questionToken||Fm(xe)||k&&c.length>k.arguments.length&&!It||JR(xe)||(p=c.length)}if((n.kind===174||n.kind===175)&&Ux(n)&&(!T||!h)){let Ae=n.kind===174?175:174,xe=nc(fr(n),Ae);xe&&(h=Me(xe))}if(Yn(n)){let Ae=e6(n);Ae&&Ae.typeExpression&&(h=qE(wo(1,\"this\"),$r(Ae.typeExpression)))}let J=n.kind===173?vu(No(n.parent.symbol)):void 0,de=J?J.localTypeParameters:Mxe(n);(Yj(n)||Yn(n)&&$Je(n,c))&&(u|=1),(yL(n)&&Mr(n,256)||Ec(n)&&Mr(n.parent,256))&&(u|=4),a.resolvedSignature=Am(n,de,h,c,void 0,void 0,p,u)}return a.resolvedSignature}function $Je(n,a){if(X0(n)||!nne(n))return!1;let c=Os(n.parameters),u=c?fI(c):A0(n).filter(xp),p=ks(u,T=>T.typeExpression&&h3(T.typeExpression.type)?T.typeExpression.type:void 0),h=wo(3,\"args\",32768);return p?h.links.type=nu($r(p.type)):(h.links.checkFlags|=65536,h.links.deferralParent=lt,h.links.deferralConstituents=[Et],h.links.deferralWriteConstituents=[Et]),p&&a.pop(),a.push(h),!0}function Zk(n){if(!(Yn(n)&&Ds(n)))return;let a=x0(n);return a?.typeExpression&&F1($r(a.typeExpression))}function QJe(n,a){let c=Zk(n);if(!c)return;let u=n.parameters.indexOf(a);return a.dotDotDotToken?SD(c,u):P_(c,u)}function ZJe(n){let a=Zk(n);return a&&qo(a)}function nne(n){let a=Rr(n);return a.containsArgumentsReference===void 0&&(a.flags&512?a.containsArgumentsReference=!0:a.containsArgumentsReference=c(n.body)),a.containsArgumentsReference;function c(u){if(!u)return!1;switch(u.kind){case 79:return u.escapedText===_t.escapedName&&i8(u)===_t;case 169:case 171:case 174:case 175:return u.name.kind===164&&c(u.name);case 208:case 209:return c(u.expression);case 299:return c(u.initializer);default:return!HH(u)&&!Gm(u)&&!!pa(u,c)}}}function Xb(n){if(!n||!n.declarations)return Je;let a=[];for(let c=0;c<n.declarations.length;c++){let u=n.declarations[c];if(Ia(u)){if(c>0&&u.body){let p=n.declarations[c-1];if(u.parent===p.parent&&u.kind===p.kind&&u.pos===p.end)continue}if(Yn(u)&&u.jsDoc){let p=!1;for(let h of u.jsDoc)if(h.tags){for(let T of h.tags)if(kL(T)){let k=T.typeExpression;k.type===void 0&&!Ec(u)&&qv(k,Se),a.push(ip(k)),p=!0}}if(p)continue}a.push(!a2(u)&&!s_(u)&&Zk(u)||ip(u))}}return a}function Fxe(n){let a=Gl(n,n);if(a){let c=Vu(a);if(c)return zn(c)}return Se}function Yb(n){if(n.thisParameter)return zn(n.thisParameter)}function Lf(n){if(!n.resolvedTypePredicate){if(n.target){let a=Lf(n.target);n.resolvedTypePredicate=a?Mqe(a,n.mapper):Rs}else if(n.compositeSignatures)n.resolvedTypePredicate=qKe(n.compositeSignatures,n.compositeKind)||Rs;else{let a=n.declaration&&U_(n.declaration),c;if(!a){let u=Zk(n.declaration);u&&n!==u&&(c=Lf(u))}n.resolvedTypePredicate=a&&l3(a)?eKe(a,n):c||Rs}L.assert(!!n.resolvedTypePredicate)}return n.resolvedTypePredicate===Rs?void 0:n.resolvedTypePredicate}function eKe(n,a){let c=n.parameterName,u=n.type&&$r(n.type);return c.kind===194?iM(n.assertsModifier?2:0,void 0,void 0,u):iM(n.assertsModifier?3:1,c.escapedText,Yc(a.parameters,p=>p.escapedName===c.escapedText),u)}function Gxe(n,a,c){return a!==2097152?Gr(n,c):so(n)}function qo(n){if(!n.resolvedReturnType){if(!cf(n,3))return ve;let a=n.target?Oi(qo(n.target),n.mapper):n.compositeSignatures?Oi(Gxe(on(n.compositeSignatures,qo),n.compositeKind,2),n.mapper):Hx(n.declaration)||(rc(n.declaration.body)?Se:rU(n.declaration));if(n.flags&8?a=h2e(a):n.flags&16&&(a=gg(a)),!If()){if(n.declaration){let c=U_(n.declaration);if(c)Fe(c,_.Return_type_annotation_circularly_references_itself);else if(ge){let u=n.declaration,p=sa(u);p?Fe(p,_._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions,os(p)):Fe(u,_.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions)}}a=Se}n.resolvedReturnType=a}return n.resolvedReturnType}function Hx(n){if(n.kind===173)return vu(No(n.parent.symbol));if(X0(n)){let c=OI(n);if(c&&Ec(c.parent))return vu(No(c.parent.parent.symbol))}if(jA(n))return $r(n.parameters[0].type);let a=U_(n);if(a)return $r(a);if(n.kind===174&&Ux(n)){let c=Yn(n)&&di(n);if(c)return c;let u=nc(fr(n),175),p=te(u);if(p)return p}return ZJe(n)}function rne(n){return!n.resolvedReturnType&&Sm(n,3)>=0}function tKe(n){return Bxe(n)||Se}function Bxe(n){if(Xl(n)){let a=zn(n.parameters[n.parameters.length-1]),c=po(a)?bM(a):a;return c&&fg(c,rt)}}function eD(n,a,c,u){let p=ine(n,Sy(a,n.typeParameters,Mp(n.typeParameters),c));if(u){let h=KCe(qo(p));if(h){let T=Xk(h);T.typeParameters=u;let k=Xk(p);return k.resolvedReturnType=HE(T),k}}return p}function ine(n,a){let c=n.instantiations||(n.instantiations=new Map),u=kf(a),p=c.get(u);return p||c.set(u,p=JG(n,a)),p}function JG(n,a){return $x(n,nKe(n,a),!0)}function nKe(n,a){return Wu(n.typeParameters,a)}function tD(n){return n.typeParameters?n.erasedSignatureCache||(n.erasedSignatureCache=rKe(n)):n}function rKe(n){return $x(n,jAe(n.typeParameters),!0)}function iKe(n){return n.typeParameters?n.canonicalSignatureCache||(n.canonicalSignatureCache=aKe(n)):n}function aKe(n){return eD(n,on(n.typeParameters,a=>a.target&&!eu(a.target)?a.target:a),Yn(n.declaration))}function oKe(n){let a=n.typeParameters;if(a){if(n.baseSignatureCache)return n.baseSignatureCache;let c=jAe(a),u=Wu(a,on(a,h=>eu(h)||ue)),p=on(a,h=>Oi(h,u)||ue);for(let h=0;h<a.length-1;h++)p=hg(p,u);return p=hg(p,c),n.baseSignatureCache=$x(n,Wu(a,p),!0)}return n}function HE(n){var a;if(!n.isolatedSignatureType){let c=(a=n.declaration)==null?void 0:a.kind,u=c===void 0||c===173||c===177||c===182,p=Bd(16);p.members=q,p.properties=Je,p.callSignatures=u?Je:[n],p.constructSignatures=u?[n]:Je,p.indexInfos=Je,n.isolatedSignatureType=p}return n.isolatedSignatureType}function Uxe(n){return n.members?ane(n.members):void 0}function ane(n){return n.get(\"__index\")}function Fp(n,a,c,u){return{keyType:n,type:a,isReadonly:c,declaration:u}}function Vxe(n){let a=Uxe(n);return a?one(a):Je}function one(n){if(n.declarations){let a=[];for(let c of n.declarations)if(c.parameters.length===1){let u=c.parameters[0];u.type&&QE($r(u.type),p=>{KG(p)&&!Yte(a,p)&&a.push(Fp(p,c.type?$r(c.type):Se,cd(c,64),c))})}return a}return Je}function KG(n){return!!(n.flags&4108)||qx(n)||!!(n.flags&2097152)&&!SC(n)&&vt(n.types,KG)}function sne(n){return Zi(Pr(n.symbol&&n.symbol.declarations,_c),EA)[0]}function jxe(n,a){var c;let u;if((c=n.symbol)!=null&&c.declarations){for(let p of n.symbol.declarations)if(p.parent.kind===192){let[h=p.parent,T]=Tce(p.parent.parent);if(T.kind===180&&!a){let k=T,O=xie(k);if(O){let H=k.typeArguments.indexOf(h);if(H<O.length){let J=eu(O[H]);if(J){let de=Rne(O,O.map((xe,tt)=>()=>met(k,O,tt))),Ae=Oi(J,de);Ae!==n&&(u=Sn(u,Ae))}}}}else if(T.kind===166&&T.dotDotDotToken||T.kind===188||T.kind===199&&T.dotDotDotToken)u=Sn(u,nu(ue));else if(T.kind===201)u=Sn(u,ae);else if(T.kind===165&&T.parent.kind===197)u=Sn(u,Si);else if(T.kind===197&&T.type&&vs(T.type)===p.parent&&T.parent.kind===191&&T.parent.extendsType===T&&T.parent.checkType.kind===197&&T.parent.checkType.type){let k=T.parent.checkType,O=$r(k.type);u=Sn(u,Oi(O,n0(UE(fr(k.typeParameter)),k.typeParameter.constraint?$r(k.typeParameter.constraint):Si)))}}}return u&&so(u)}function bC(n){if(!n.constraint)if(n.target){let a=eu(n.target);n.constraint=a?Oi(a,n.mapper):Co}else{let a=sne(n);if(!a)n.constraint=jxe(n)||Co;else{let c=$r(a);c.flags&1&&!Ro(c)&&(c=a.parent.parent.kind===197?Si:ue),n.constraint=c}}return n.constraint===Co?void 0:n.constraint}function Hxe(n){let a=nc(n.symbol,165),c=H_(a.parent)?J6(a.parent):a.parent;return c&&vd(c)}function kf(n){let a=\"\";if(n){let c=n.length,u=0;for(;u<c;){let p=n[u].id,h=1;for(;u+h<c&&n[u+h].id===p+h;)h++;a.length&&(a+=\",\"),a+=p,h>1&&(a+=\":\"+h),u+=h}}return a}function Wx(n,a){return n?`@${$a(n)}`+(a?`:${kf(a)}`:\"\"):\"\"}function qG(n,a){let c=0;for(let u of n)(a===void 0||!(u.flags&a))&&(c|=Ur(u));return c&458752}function zx(n,a){return vt(a)&&n===ro?ue:_g(n,a)}function _g(n,a){let c=kf(a),u=n.instantiations.get(c);return u||(u=Bd(4,n.symbol),n.instantiations.set(c,u),u.objectFlags|=a?qG(a):0,u.target=n,u.resolvedTypeArguments=a),u}function Wxe(n){let a=Rp(n.flags,n.symbol);return a.objectFlags=n.objectFlags,a.target=n.target,a.resolvedTypeArguments=n.resolvedTypeArguments,a}function cne(n,a,c,u,p){if(!u){u=R1(a);let T=Xx(u);p=c?hg(T,c):T}let h=Bd(4,n.symbol);return h.target=n,h.node=a,h.mapper=c,h.aliasSymbol=u,h.aliasTypeArguments=p,h}function Ko(n){var a,c;if(!n.resolvedTypeArguments){if(!cf(n,6))return((a=n.target.localTypeParameters)==null?void 0:a.map(()=>ve))||Je;let u=n.node,p=u?u.kind===180?Qi(n.target.outerTypeParameters,oU(u,n.target.localTypeParameters)):u.kind===185?[$r(u.elementType)]:on(u.elements,$r):Je;If()?n.resolvedTypeArguments=n.mapper?hg(p,n.mapper):p:(n.resolvedTypeArguments=((c=n.target.localTypeParameters)==null?void 0:c.map(()=>ve))||Je,Fe(n.node||P,n.target.symbol?_.Type_arguments_for_0_circularly_reference_themselves:_.Tuple_type_arguments_circularly_reference_themselves,n.target.symbol&&E(n.target.symbol)))}return n.resolvedTypeArguments}function Vv(n){return Fn(n.target.typeParameters)}function zxe(n,a){let c=gs(No(a)),u=c.localTypeParameters;if(u){let p=Fn(n.typeArguments),h=Mp(u),T=Yn(n);if(!(!ge&&T)&&(p<h||p>u.length)){let H=T&&Vg(n)&&!x2(n.parent),J=h===u.length?H?_.Expected_0_type_arguments_provide_these_with_an_extends_tag:_.Generic_type_0_requires_1_type_argument_s:H?_.Expected_0_1_type_arguments_provide_these_with_an_extends_tag:_.Generic_type_0_requires_between_1_and_2_type_arguments,de=Ee(c,void 0,2);if(Fe(n,J,de,h,u.length),!T)return ve}if(n.kind===180&&uAe(n,Fn(n.typeArguments)!==u.length))return cne(c,n,void 0);let O=Qi(c.outerTypeParameters,Sy(aM(n),u,h,T));return _g(c,O)}return $b(n,a)?c:ve}function Jx(n,a,c,u){let p=gs(n);if(p===Q&&rN.has(n.escapedName)&&a&&a.length===1)return w1(n,a[0]);let h=Ai(n),T=h.typeParameters,k=kf(a)+Wx(c,u),O=h.instantiations.get(k);return O||h.instantiations.set(k,O=zAe(p,Wu(T,Sy(a,T,Mp(T),Yn(n.valueDeclaration))),c,u)),O}function sKe(n,a){if(ac(a)&1048576){let p=aM(n),h=Wx(a,p),T=Cr.get(h);return T||(T=Cc(1,\"error\"),T.aliasSymbol=a,T.aliasTypeArguments=p,Cr.set(h,T)),T}let c=gs(a),u=Ai(a).typeParameters;if(u){let p=Fn(n.typeArguments),h=Mp(u);if(p<h||p>u.length)return Fe(n,h===u.length?_.Generic_type_0_requires_1_type_argument_s:_.Generic_type_0_requires_between_1_and_2_type_arguments,E(a),h,u.length),ve;let T=R1(n),k=T&&(Jxe(a)||!Jxe(T))?T:void 0,O;if(k)O=Xx(k);else if(_6(n)){let H=Kx(n,2097152,!0);if(H&&H!==Ht){let J=wc(H);J&&J.flags&524288&&(k=J,O=aM(n)||(u?[]:void 0))}}return Jx(a,aM(n),k,O)}return $b(n,a)?c:ve}function Jxe(n){var a;let c=(a=n.declarations)==null?void 0:a.find(sR);return!!(c&&Xd(c))}function cKe(n){switch(n.kind){case 180:return n.typeName;case 230:let a=n.expression;if(bc(a))return a}}function Kxe(n){return n.parent?`${Kxe(n.parent)}.${n.escapedName}`:n.escapedName}function XG(n){let c=(n.kind===163?n.right:n.kind===208?n.name:n).escapedText;if(c){let u=n.kind===163?XG(n.left):n.kind===208?XG(n.expression):void 0,p=u?`${Kxe(u)}.${c}`:c,h=dr.get(p);return h||(dr.set(p,h=wo(524288,c,1048576)),h.parent=u,h.links.declaredType=nt),h}return Ht}function Kx(n,a,c){let u=cKe(n);if(!u)return Ht;let p=uc(u,a,c);return p&&p!==Ht?p:c?Ht:XG(u)}function YG(n,a){if(a===Ht)return ve;if(a=Iv(a)||a,a.flags&96)return zxe(n,a);if(a.flags&524288)return sKe(n,a);let c=pxe(a);if(c)return $b(n,a)?Hu(c):ve;if(a.flags&111551&&$G(n)){let u=lKe(n,a);return u||(Kx(n,788968),zn(a))}return ve}function lKe(n,a){let c=Rr(n);if(!c.resolvedJSDocType){let u=zn(a),p=u;if(a.valueDeclaration){let h=n.kind===202&&n.qualifier;u.symbol&&u.symbol!==a&&h&&(p=YG(n,u.symbol))}c.resolvedJSDocType=p}return c.resolvedJSDocType}function lne(n,a){if(a.flags&3||a===n||n.flags&1)return n;let c=`${ru(n)}>${ru(a)}`,u=Dt.get(c);if(u)return u;let p=ch(33554432);return p.baseType=n,p.constraint=a,Dt.set(c,p),p}function une(n){return so([n.constraint,n.baseType])}function qxe(n){return n.kind===186&&n.elements.length===1}function Xxe(n,a,c){return qxe(a)&&qxe(c)?Xxe(n,a.elements[0],c.elements[0]):Cy($r(a))===Cy(n)?$r(c):void 0}function uKe(n,a){let c,u=!0;for(;a&&!ca(a)&&a.kind!==323;){let p=a.parent;if(p.kind===166&&(u=!u),(u||n.flags&8650752)&&p.kind===191&&a===p.trueType){let h=Xxe(n,p.checkType,p.extendsType);h&&(c=Sn(c,h))}else if(n.flags&262144&&p.kind===197&&a===p.type){let h=$r(p);if(w_(h)===Cy(n)){let T=Nne(h);if(T){let k=eu(T);k&&Im(k,JE)&&(c=Sn(c,Gr([rt,Fa])))}}}a=p}return c?lne(n,so(c)):n}function $G(n){return!!(n.flags&8388608)&&(n.kind===180||n.kind===202)}function $b(n,a){return n.typeArguments?(Fe(n,_.Type_0_is_not_generic,a?E(a):n.typeName?os(n.typeName):nN),!1):!0}function Yxe(n){if(Re(n.typeName)){let a=n.typeArguments;switch(n.typeName.escapedText){case\"String\":return $b(n),ae;case\"Number\":return $b(n),rt;case\"Boolean\":return $b(n),Te;case\"Void\":return $b(n),yt;case\"Undefined\":return $b(n),Oe;case\"Null\":return $b(n),ln;case\"Function\":case\"function\":return $b(n),Hs;case\"array\":return(!a||!a.length)&&!ge?Et:void 0;case\"promise\":return(!a||!a.length)&&!ge?jM(Se):void 0;case\"Object\":if(a&&a.length===2){if(U6(n)){let c=$r(a[0]),u=$r(a[1]),p=c===ae||c===rt?[Fp(c,u,!1)]:Je;return ls(void 0,q,Je,Je,p)}return Se}return $b(n),ge?void 0:Se}}}function dKe(n){let a=$r(n.type);return U?TB(a,65536):a}function dne(n){let a=Rr(n);if(!a.resolvedType){if(Ch(n)&&pT(n.parent))return a.resolvedSymbol=Ht,a.resolvedType=Ic(n.parent.expression);let c,u,p=788968;$G(n)&&(u=Yxe(n),u||(c=Kx(n,p,!0),c===Ht?c=Kx(n,p|111551):Kx(n,p),u=YG(n,c))),u||(c=Kx(n,p),u=YG(n,c)),a.resolvedSymbol=c,a.resolvedType=u}return a.resolvedType}function aM(n){return on(n.typeArguments,$r)}function $xe(n){let a=Rr(n);if(!a.resolvedType){let c=_Ie(n);a.resolvedType=Hu(Sd(c))}return a.resolvedType}function Qxe(n,a){function c(p){let h=p.declarations;if(h)for(let T of h)switch(T.kind){case 260:case 261:case 263:return T}}if(!n)return a?ro:Ki;let u=gs(n);return u.flags&524288?Fn(u.typeParameters)!==a?(Fe(c(n),_.Global_type_0_must_have_1_type_parameter_s,fc(n),a),a?ro:Ki):u:(Fe(c(n),_.Global_type_0_must_be_a_class_or_interface_type,fc(n)),a?ro:Ki)}function fne(n,a){return nD(n,111551,a?_.Cannot_find_global_value_0:void 0)}function Zxe(n,a){return nD(n,788968,a?_.Cannot_find_global_type_0:void 0)}function QG(n,a,c){let u=nD(n,788968,c?_.Cannot_find_global_type_0:void 0);if(u&&(gs(u),Fn(Ai(u).typeParameters)!==a)){let p=u.declarations&&wr(u.declarations,Ep);Fe(p,_.Global_type_0_must_have_1_type_parameter_s,fc(u),a);return}return u}function nD(n,a,c){return zs(void 0,n,a,c,n,!1,!1,!1)}function Fc(n,a,c){let u=Zxe(n,c);return u||c?Qxe(u,a):void 0}function fKe(){return xt||(xt=Fc(\"TypedPropertyDescriptor\",1,!0)||ro)}function _Ke(){return Md||(Md=Fc(\"TemplateStringsArray\",0,!0)||Ki)}function eAe(){return zf||(zf=Fc(\"ImportMeta\",0,!0)||Ki)}function tAe(){if(!Io){let n=wo(0,\"ImportMetaExpression\"),a=eAe(),c=wo(4,\"meta\",8);c.parent=n,c.links.type=a;let u=Ua([c]);n.members=u,Io=ls(n,u,Je,Je,Je)}return Io}function nAe(n){return Jf||(Jf=Fc(\"ImportCallOptions\",0,n))||Ki}function rAe(n){return ee||(ee=fne(\"Symbol\",n))}function pKe(n){return Ze||(Ze=Zxe(\"SymbolConstructor\",n))}function iAe(){return At||(At=Fc(\"Symbol\",0,!1))||Ki}function oM(n){return qt||(qt=Fc(\"Promise\",1,n))||ro}function aAe(n){return Ln||(Ln=Fc(\"PromiseLike\",1,n))||ro}function _ne(n){return mr||(mr=fne(\"Promise\",n))}function mKe(n){return Vr||(Vr=Fc(\"PromiseConstructorLike\",0,n))||Ki}function ZG(n){return Pd||(Pd=Fc(\"AsyncIterable\",1,n))||ro}function hKe(n){return Dc||(Dc=Fc(\"AsyncIterator\",3,n))||ro}function gKe(n){return gd||(gd=Fc(\"AsyncIterableIterator\",1,n))||ro}function yKe(n){return Zl||(Zl=Fc(\"AsyncGenerator\",3,n))||ro}function pne(n){return gi||(gi=Fc(\"Iterable\",1,n))||ro}function vKe(n){return Ea||(Ea=Fc(\"Iterator\",3,n))||ro}function bKe(n){return bo||(bo=Fc(\"IterableIterator\",1,n))||ro}function EKe(n){return Qo||(Qo=Fc(\"Generator\",3,n))||ro}function TKe(n){return Cs||(Cs=Fc(\"IteratorYieldResult\",1,n))||ro}function SKe(n){return Bu||(Bu=Fc(\"IteratorReturnResult\",1,n))||ro}function oAe(n,a=0){let c=nD(n,788968,void 0);return c&&Qxe(c,a)}function xKe(){return Fd||(Fd=QG(\"Extract\",2,!0)||Ht),Fd===Ht?void 0:Fd}function AKe(){return E_||(E_=QG(\"Omit\",2,!0)||Ht),E_===Ht?void 0:E_}function mne(n){return Y_||(Y_=QG(\"Awaited\",1,n)||(n?Ht:void 0)),Y_===Ht?void 0:Y_}function CKe(){return M||(M=Fc(\"BigInt\",0,!1))||Ki}function IKe(n){var a;return(a=Pn??(Pn=Fc(\"ClassDecoratorContext\",1,n)))!=null?a:ro}function LKe(n){var a;return(a=la??(la=Fc(\"ClassMethodDecoratorContext\",2,n)))!=null?a:ro}function kKe(n){var a;return(a=oa??(oa=Fc(\"ClassGetterDecoratorContext\",2,n)))!=null?a:ro}function DKe(n){var a;return(a=be??(be=Fc(\"ClassSetterDecoratorContext\",2,n)))!=null?a:ro}function wKe(n){var a;return(a=De??(De=Fc(\"ClassAccessorDecoratorContext\",2,n)))!=null?a:ro}function RKe(n){var a;return(a=mt??(mt=Fc(\"ClassAccessorDecoratorTarget\",2,n)))!=null?a:ro}function OKe(n){var a;return(a=St??(St=Fc(\"ClassAccessorDecoratorResult\",2,n)))!=null?a:ro}function NKe(n){var a;return(a=Zt??(Zt=Fc(\"ClassFieldDecoratorContext\",2,n)))!=null?a:ro}function PKe(){return He||(He=fne(\"NaN\",!1))}function MKe(){return Nt||(Nt=QG(\"Record\",2,!0)||Ht),Nt===Ht?void 0:Nt}function rD(n,a){return n!==ro?_g(n,a):Ki}function sAe(n){return rD(fKe(),[n])}function cAe(n){return rD(pne(!0),[n])}function nu(n,a){return rD(a?jo:$o,[n])}function hne(n){switch(n.kind){case 187:return 2;case 188:return lAe(n);case 199:return n.questionToken?2:n.dotDotDotToken?lAe(n):1;default:return 1}}function lAe(n){return uM(n.type)?4:8}function FKe(n){let a=BKe(n.parent);if(uM(n))return a?jo:$o;let u=on(n.elements,hne),p=vt(n.elements,h=>h.kind!==199);return gne(u,a,p?void 0:n.elements)}function uAe(n,a){return!!R1(n)||dAe(n)&&(n.kind===185?xy(n.elementType):n.kind===186?vt(n.elements,xy):a||vt(n.typeArguments,xy))}function dAe(n){let a=n.parent;switch(a.kind){case 193:case 199:case 180:case 189:case 190:case 196:case 191:case 195:case 185:case 186:return dAe(a);case 262:return!0}return!1}function xy(n){switch(n.kind){case 180:return $G(n)||!!(Kx(n,788968).flags&524288);case 183:return!0;case 195:return n.operator!==156&&xy(n.type);case 193:case 187:case 199:case 319:case 317:case 318:case 312:return xy(n.type);case 188:return n.type.kind!==185||xy(n.type.elementType);case 189:case 190:return vt(n.types,xy);case 196:return xy(n.objectType)||xy(n.indexType);case 191:return xy(n.checkType)||xy(n.extendsType)||xy(n.trueType)||xy(n.falseType)}return!1}function GKe(n){let a=Rr(n);if(!a.resolvedType){let c=FKe(n);if(c===ro)a.resolvedType=Ki;else if(!(n.kind===186&&vt(n.elements,u=>!!(hne(u)&8)))&&uAe(n))a.resolvedType=n.kind===186&&n.elements.length===0?c:cne(c,n,void 0);else{let u=n.kind===185?[$r(n.elementType)]:on(n.elements,$r);a.resolvedType=yne(c,u)}}return a.resolvedType}function BKe(n){return RS(n)&&n.operator===146}function ap(n,a,c=!1,u){let p=gne(a||on(n,h=>1),c,u);return p===ro?Ki:n.length?yne(p,n):p}function gne(n,a,c){if(n.length===1&&n[0]&4)return a?jo:$o;let u=on(n,h=>h&1?\"#\":h&2?\"?\":h&4?\".\":\"*\").join()+(a?\"R\":\"\")+(c&&c.length?\",\"+on(c,zo).join(\",\"):\"\"),p=kn.get(u);return p||kn.set(u,p=UKe(n,a,c)),p}function UKe(n,a,c){let u=n.length,p=Oy(n,de=>!!(de&9)),h,T=[],k=0;if(u){h=new Array(u);for(let de=0;de<u;de++){let Ae=h[de]=rd(),xe=n[de];if(k|=xe,!(k&12)){let tt=wo(4|(xe&2?16777216:0),\"\"+de,a?8:0);tt.links.tupleLabelDeclaration=c?.[de],tt.links.type=Ae,T.push(tt)}}}let O=T.length,H=wo(4,\"length\",a?8:0);if(k&12)H.links.type=rt;else{let de=[];for(let Ae=p;Ae<=u;Ae++)de.push(op(Ae));H.links.type=Gr(de)}T.push(H);let J=Bd(12);return J.typeParameters=h,J.outerTypeParameters=void 0,J.localTypeParameters=h,J.instantiations=new Map,J.instantiations.set(kf(J.typeParameters),J),J.target=J,J.resolvedTypeArguments=J.typeParameters,J.thisType=rd(),J.thisType.isThisType=!0,J.thisType.constraint=J,J.declaredProperties=T,J.declaredCallSignatures=Je,J.declaredConstructSignatures=Je,J.declaredIndexInfos=Je,J.elementFlags=n,J.minLength=p,J.fixedLength=O,J.hasRestElement=!!(k&12),J.combinedFlags=k,J.readonly=a,J.labeledElementDeclarations=c,J}function yne(n,a){return n.objectFlags&8?fAe(n,a):_g(n,a)}function fAe(n,a){var c,u,p;if(!(n.combinedFlags&14))return _g(n,a);if(n.combinedFlags&8){let xe=Yc(a,(tt,It)=>!!(n.elementFlags[It]&8&&tt.flags&1179648));if(xe>=0)return cM(on(a,(tt,It)=>n.elementFlags[It]&8?tt:ue))?Ls(a[xe],tt=>fAe(n,UU(a,xe,tt))):ve}let h=[],T=[],k=[],O=-1,H=-1,J=-1;for(let xe=0;xe<a.length;xe++){let tt=a[xe],It=n.elementFlags[xe];if(It&8)if(tt.flags&58982400||df(tt))Ae(tt,8,(c=n.labeledElementDeclarations)==null?void 0:c[xe]);else if(po(tt)){let Tn=Ko(tt);if(Tn.length+h.length>=1e4)return Fe(P,Gm(P)?_.Type_produces_a_tuple_type_that_is_too_large_to_represent:_.Expression_produces_a_tuple_type_that_is_too_large_to_represent),ve;mn(Tn,(un,Nn)=>{var en;return Ae(un,tt.target.elementFlags[Nn],(en=tt.target.labeledElementDeclarations)==null?void 0:en[Nn])})}else Ae(Kv(tt)&&fg(tt,rt)||ve,4,(u=n.labeledElementDeclarations)==null?void 0:u[xe]);else Ae(tt,It,(p=n.labeledElementDeclarations)==null?void 0:p[xe])}for(let xe=0;xe<O;xe++)T[xe]&2&&(T[xe]=1);H>=0&&H<J&&(h[H]=Gr(Tl(h.slice(H,J+1),(xe,tt)=>T[H+tt]&8?od(xe,rt):xe)),h.splice(H+1,J-H),T.splice(H+1,J-H),k?.splice(H+1,J-H));let de=gne(T,n.readonly,k);return de===ro?Ki:T.length?_g(de,h):de;function Ae(xe,tt,It){tt&1&&(O=T.length),tt&4&&H<0&&(H=T.length),tt&6&&(J=T.length),h.push(tt&2?ao(xe,!0):xe),T.push(tt),k&&It?k.push(It):k=void 0}}function EC(n,a,c=0){let u=n.target,p=Vv(n)-c;return a>u.fixedLength?IXe(n)||ap(Je):ap(Ko(n).slice(a,p),u.elementFlags.slice(a,p),!1,u.labeledElementDeclarations&&u.labeledElementDeclarations.slice(a,p))}function _Ae(n){return Gr(Sn(mae(n.target.fixedLength,a=>ff(\"\"+a)),Gp(n.target.readonly?jo:$o)))}function VKe(n,a){let c=Yc(n.elementFlags,u=>!(u&a));return c>=0?c:n.elementFlags.length}function sM(n,a){return n.elementFlags.length-s8(n.elementFlags,c=>!(c&a))-1}function jKe(n){return ao($r(n.type),!0)}function ru(n){return n.id}function Qb(n,a){return Py(n,a,ru,Es)>=0}function vne(n,a){let c=Py(n,a,ru,Es);return c<0?(n.splice(~c,0,a),!0):!1}function HKe(n,a,c){let u=c.flags;if(u&1048576)return pAe(n,a|(KKe(c)?1048576:0),c.types);if(!(u&131072))if(a|=u&205258751,u&465829888&&(a|=33554432),c===Tt&&(a|=8388608),!U&&u&98304)Ur(c)&65536||(a|=4194304);else{let p=n.length,h=p&&c.id>n[p-1].id?~p:Py(n,c,ru,Es);h<0&&n.splice(~h,0,c)}return a}function pAe(n,a,c){for(let u of c)a=HKe(n,a,u);return a}function WKe(n,a){var c;if(n.length<2)return n;let u=kf(n),p=pn.get(u);if(p)return p;let h=a&&vt(n,H=>!!(H.flags&524288)&&!df(H)&&Vne(R_(H))),T=n.length,k=T,O=0;for(;k>0;){k--;let H=n[k];if(h||H.flags&469499904){let J=H.flags&61603840?wr(Jo(H),Ae=>N_(zn(Ae))):void 0,de=J&&Hu(zn(J));for(let Ae of n)if(H!==Ae){if(O===1e5&&O/(T-k)*T>1e6){(c=ai)==null||c.instant(ai.Phase.CheckTypes,\"removeSubtypes_DepthLimit\",{typeIds:n.map(tt=>tt.id)}),Fe(P,_.Expression_produces_a_union_type_that_is_too_complex_to_represent);return}if(O++,J&&Ae.flags&61603840){let xe=Vc(Ae,J.escapedName);if(xe&&N_(xe)&&Hu(xe)!==de)continue}if(Bp(H,Ae,x_)&&(!(Ur(Bx(H))&1)||!(Ur(Bx(Ae))&1)||r0(H,Ae))){y0(n,k);break}}}}return pn.set(u,n),n}function zKe(n,a,c){let u=n.length;for(;u>0;){u--;let p=n[u],h=p.flags;(h&402653312&&a&4||h&256&&a&8||h&2048&&a&64||h&8192&&a&4096||c&&h&32768&&a&16384||t0(p)&&Qb(n,p.regularType))&&y0(n,u)}}function JKe(n){let a=Pr(n,c=>!!(c.flags&134217728)&&qx(c));if(a.length){let c=n.length;for(;c>0;){c--;let u=n[c];u.flags&128&&vt(a,p=>_re(u,p))&&y0(n,c)}}}function KKe(n){return!!(n.flags&1048576&&(n.aliasSymbol||n.origin))}function mAe(n,a){for(let c of a)if(c.flags&1048576){let u=c.origin;c.aliasSymbol||u&&!(u.flags&1048576)?Of(n,c):u&&u.flags&1048576&&mAe(n,u.types)}}function bne(n,a){let c=L1(n);return c.types=a,c}function Gr(n,a=1,c,u,p){if(n.length===0)return lt;if(n.length===1)return n[0];let h=[],T=pAe(h,0,n);if(a!==0){if(T&3)return T&1?T&8388608?Tt:Se:T&65536||Qb(h,ue)?ue:G;if(T&32768&&h.length>=2&&h[0]===Oe&&h[1]===Ge&&y0(h,1),(T&402664352||T&16384&&T&32768)&&zKe(h,T,!!(a&2)),T&128&&T&134217728&&JKe(h),a===2&&(h=WKe(h,!!(T&524288)),!h))return ve;if(h.length===0)return T&65536?T&4194304?ln:ir:T&32768?T&4194304?Oe:je:lt}if(!p&&T&1048576){let O=[];mAe(O,n);let H=[];for(let de of h)vt(O,Ae=>Qb(Ae.types,de))||H.push(de);if(!c&&O.length===1&&H.length===0)return O[0];if(ou(O,(de,Ae)=>de+Ae.types.length,0)+H.length===h.length){for(let de of O)vne(H,de);p=bne(1048576,H)}}let k=(T&36323363?0:32768)|(T&2097152?16777216:0);return Tne(h,k,c,u,p)}function qKe(n,a){let c,u=[];for(let h of n){let T=Lf(h);if(!T||T.kind===2||T.kind===3){if(a!==2097152)continue;return}if(c){if(!Ene(c,T))return}else c=T;u.push(T.type)}if(!c)return;let p=Gxe(u,a);return iM(c.kind,c.parameterName,c.parameterIndex,p)}function Ene(n,a){return n.kind===a.kind&&n.parameterIndex===a.parameterIndex}function Tne(n,a,c,u,p){if(n.length===0)return lt;if(n.length===1)return n[0];let T=(p?p.flags&1048576?`|${kf(p.types)}`:p.flags&2097152?`&${kf(p.types)}`:`#${p.type.id}|${kf(n)}`:kf(n))+Wx(c,u),k=_n.get(T);return k||(k=ch(1048576),k.objectFlags=a|qG(n,98304),k.types=n,k.origin=p,k.aliasSymbol=c,k.aliasTypeArguments=u,n.length===2&&n[0].flags&512&&n[1].flags&512&&(k.flags|=16,k.intrinsicName=\"boolean\"),_n.set(T,k)),k}function XKe(n){let a=Rr(n);if(!a.resolvedType){let c=R1(n);a.resolvedType=Gr(on(n.types,$r),1,c,Xx(c))}return a.resolvedType}function YKe(n,a,c){let u=c.flags;return u&2097152?hAe(n,a,c.types):(hh(c)?a&16777216||(a|=16777216,n.set(c.id.toString(),c)):(u&3?c===Tt&&(a|=8388608):(U||!(u&98304))&&(c===Ge&&(a|=262144,c=Oe),n.has(c.id.toString())||(c.flags&109472&&a&109472&&(a|=67108864),n.set(c.id.toString(),c))),a|=u&205258751),a)}function hAe(n,a,c){for(let u of c)a=YKe(n,a,Hu(u));return a}function $Ke(n,a){let c=n.length;for(;c>0;){c--;let u=n[c];(u.flags&4&&a&402653312||u.flags&8&&a&256||u.flags&64&&a&2048||u.flags&4096&&a&8192||u.flags&16384&&a&32768||hh(u)&&a&470302716)&&y0(n,c)}}function QKe(n,a){for(let c of n)if(!Qb(c.types,a)){let u=a.flags&128?ae:a.flags&256?rt:a.flags&2048?Ot:a.flags&8192?j:void 0;if(!u||!Qb(c.types,u))return!1}return!0}function ZKe(n){let a=n.length,c=Pr(n,u=>!!(u.flags&128));for(;a>0;){a--;let u=n[a];if(u.flags&134217728){for(let p of c)if(Iy(p,u)){y0(n,a);break}else if(qx(u))return!0}}return!1}function gAe(n,a){return Ji(n,c=>!!(c.flags&1048576)&&vt(c.types,u=>!!(u.flags&a)))}function yAe(n,a){for(let c=0;c<n.length;c++)n[c]=jc(n[c],u=>!(u.flags&a))}function eqe(n){let a,c=Yc(n,T=>!!(Ur(T)&32768));if(c<0)return!1;let u=c+1;for(;u<n.length;){let T=n[u];Ur(T)&32768?((a||(a=[n[c]])).push(T),y0(n,u)):u++}if(!a)return!1;let p=[],h=[];for(let T of a)for(let k of T.types)vne(p,k)&&QKe(a,k)&&vne(h,k);return n[c]=Tne(h,32768),!0}function tqe(n,a,c){let u=ch(2097152);return u.objectFlags=qG(n,98304),u.types=n,u.aliasSymbol=a,u.aliasTypeArguments=c,u}function so(n,a,c,u){let p=new Map,h=hAe(p,0,n),T=lo(p.values());if(h&131072)return ya(T,Qe)?Qe:lt;if(U&&h&98304&&h&84410368||h&67108864&&h&402783228||h&402653316&&h&67238776||h&296&&h&469891796||h&2112&&h&469889980||h&12288&&h&469879804||h&49152&&h&469842940||h&134217728&&h&128&&ZKe(T))return lt;if(h&1)return h&8388608?Tt:Se;if(!U&&h&98304)return h&16777216?lt:h&32768?Oe:ln;if((h&4&&h&402653312||h&8&&h&256||h&64&&h&2048||h&4096&&h&8192||h&16384&&h&32768||h&16777216&&h&470302716)&&(u||$Ke(T,h)),h&262144&&(T[T.indexOf(Oe)]=Ge),T.length===0)return ue;if(T.length===1)return T[0];let k=kf(T)+Wx(a,c),O=Gt.get(k);if(!O){if(h&1048576)if(eqe(T))O=so(T,a,c);else if(gAe(T,32768)){let H=vt(T,fD)?Ge:Oe;yAe(T,32768),O=Gr([so(T),H],1,a,c)}else if(gAe(T,65536))yAe(T,65536),O=Gr([so(T),ln],1,a,c);else{if(!cM(T))return ve;let H=nqe(T),J=vt(H,de=>!!(de.flags&2097152))&&Sne(H)>Sne(T)?bne(2097152,T):void 0;O=Gr(H,1,a,c,J)}else O=tqe(T,a,c);Gt.set(k,O)}return O}function vAe(n){return ou(n,(a,c)=>c.flags&1048576?a*c.types.length:c.flags&131072?0:a,1)}function cM(n){var a;let c=vAe(n);return c>=1e5?((a=ai)==null||a.instant(ai.Phase.CheckTypes,\"checkCrossProductUnion_DepthLimit\",{typeIds:n.map(u=>u.id),size:c}),Fe(P,_.Expression_produces_a_union_type_that_is_too_complex_to_represent),!1):!0}function nqe(n){let a=vAe(n),c=[];for(let u=0;u<a;u++){let p=n.slice(),h=u;for(let k=n.length-1;k>=0;k--)if(n[k].flags&1048576){let O=n[k].types,H=O.length;p[k]=O[h%H],h=Math.floor(h/H)}let T=so(p);T.flags&131072||c.push(T)}return c}function bAe(n){return!(n.flags&3145728)||n.aliasSymbol?1:n.flags&1048576&&n.origin?bAe(n.origin):Sne(n.types)}function Sne(n){return ou(n,(a,c)=>a+bAe(c),0)}function rqe(n){let a=Rr(n);if(!a.resolvedType){let c=R1(n),u=on(n.types,$r),p=u.length===2&&!!(u[0].flags&76)&&u[1]===mc;a.resolvedType=so(u,c,Xx(c),p)}return a.resolvedType}function EAe(n,a){let c=ch(4194304);return c.type=n,c.stringsOnly=a,c}function iqe(n){let a=L1(4194304);return a.type=n,a}function TAe(n,a){return a?n.resolvedStringIndexType||(n.resolvedStringIndexType=EAe(n,!0)):n.resolvedIndexType||(n.resolvedIndexType=EAe(n,!1))}function aqe(n,a,c){let u=w_(n),p=rp(n),h=by(n.target||n);if(!h&&!c)return p;let T=[];if(Yk(n)){if(jv(p))return TAe(n,a);{let H=Eu(yC(n));Ute(H,8576,a,O)}}else QE(ZP(p),O);jv(p)&&QE(p,O);let k=c?jc(Gr(T),H=>!(H.flags&5)):Gr(T);if(k.flags&1048576&&p.flags&1048576&&kf(k.types)===kf(p.types))return p;return k;function O(H){let J=h?Oi(h,oD(n.mapper,u,H)):H;T.push(J===ae?ei:J)}}function oqe(n){let a=w_(n);return c(by(n)||a);function c(u){return u.flags&202375167?!0:u.flags&16777216?u.root.isDistributive&&u.checkType===a:u.flags&137363456?Ji(u.types,c):u.flags&8388608?c(u.objectType)&&c(u.indexType):u.flags&33554432?c(u.baseType)&&c(u.constraint):u.flags&268435456?c(u.type):!1}}function pg(n){return pi(n)?lt:Re(n)?ff(Gi(n.escapedText)):Hu(ts(n)?vg(n):Yi(n))}function TC(n,a,c){if(c||!(Ef(n)&24)){let u=Ai(zG(n)).nameType;if(!u){let p=sa(n.valueDeclaration);u=n.escapedName===\"default\"?ff(\"default\"):p&&pg(p)||(gR(n)?void 0:ff(fc(n)))}if(u&&u.flags&a)return u}return lt}function SAe(n,a){return!!(n.flags&a||n.flags&2097152&&vt(n.types,c=>SAe(c,a)))}function sqe(n,a,c){let u=c&&(Ur(n)&7||n.aliasSymbol)?iqe(n):void 0,p=on(Jo(n),T=>TC(T,a)),h=on(tu(n),T=>T!==yu&&SAe(T.keyType,a)?T.keyType===ae&&a&8?ei:T.keyType:lt);return Gr(Qi(p,h),1,void 0,void 0,u)}function cqe(n){let a=Wqe(n);return O_(a)!==a}function xAe(n){return!!(n.flags&58982400||Qx(n)||df(n)&&!oqe(n)||n.flags&1048576&&vt(n.types,cqe)||n.flags&2097152&&Js(n,465829888)&&vt(n.types,hh))}function Gp(n,a=we,c){return n=O_(n),xAe(n)?TAe(n,a):n.flags&1048576?so(on(n.types,u=>Gp(u,a,c))):n.flags&2097152?Gr(on(n.types,u=>Gp(u,a,c))):Ur(n)&32?aqe(n,a,c):n===Tt?Tt:n.flags&2?lt:n.flags&131073?Si:sqe(n,(c?128:402653316)|(a?0:12584),a===we&&!c)}function AAe(n){if(we)return n;let a=xKe();return a?Jx(a,[n,ae]):ae}function lqe(n){let a=AAe(Gp(n));return a.flags&131072?ae:a}function uqe(n){let a=Rr(n);if(!a.resolvedType)switch(n.operator){case 141:a.resolvedType=Gp($r(n.type));break;case 156:a.resolvedType=n.type.kind===153?wne(dR(n.parent)):ve;break;case 146:a.resolvedType=$r(n.type);break;default:throw L.assertNever(n.operator)}return a.resolvedType}function dqe(n){let a=Rr(n);return a.resolvedType||(a.resolvedType=WE([n.head.text,...on(n.templateSpans,c=>c.literal.text)],on(n.templateSpans,c=>$r(c.type)))),a.resolvedType}function WE(n,a){let c=Yc(a,H=>!!(H.flags&1179648));if(c>=0)return cM(a)?Ls(a[c],H=>WE(n,UU(a,c,H))):ve;if(ya(a,Tt))return Tt;let u=[],p=[],h=n[0];if(!O(n,a))return ae;if(u.length===0)return ff(h);if(p.push(h),Ji(p,H=>H===\"\")){if(Ji(u,H=>!!(H.flags&4)))return ae;if(u.length===1&&qx(u[0]))return u[0]}let T=`${kf(u)}|${on(p,H=>H.length).join(\",\")}|${p.join(\"\")}`,k=pt.get(T);return k||pt.set(T,k=_qe(p,u)),k;function O(H,J){let de=ba(H);for(let Ae=0;Ae<J.length;Ae++){let xe=J[Ae],tt=de?H[Ae+1]:H;if(xe.flags&101248){if(h+=fqe(xe)||\"\",h+=tt,!de)return!0}else if(xe.flags&134217728){if(h+=xe.texts[0],!O(xe.texts,xe.types))return!1;if(h+=tt,!de)return!0}else if(jv(xe)||tB(xe))u.push(xe),p.push(h),h=tt;else if(xe.flags&2097152){if(!O(H[Ae+1],xe.types))return!1}else if(de)return!1}return!0}}function fqe(n){return n.flags&128?n.value:n.flags&256?\"\"+n.value:n.flags&2048?j0(n.value):n.flags&98816?n.intrinsicName:void 0}function _qe(n,a){let c=ch(134217728);return c.texts=n,c.types=a,c}function w1(n,a){return a.flags&1179648?Ls(a,c=>w1(n,c)):a.flags&128?ff(CAe(n,a.value)):a.flags&134217728?WE(...pqe(n,a.texts,a.types)):a.flags&268435456&&n===a.symbol?a:a.flags&268435461||jv(a)?IAe(n,a):tB(a)?IAe(n,WE([\"\",\"\"],[a])):a}function CAe(n,a){switch(rN.get(n.escapedName)){case 0:return a.toUpperCase();case 1:return a.toLowerCase();case 2:return a.charAt(0).toUpperCase()+a.slice(1);case 3:return a.charAt(0).toLowerCase()+a.slice(1)}return a}function pqe(n,a,c){switch(rN.get(n.escapedName)){case 0:return[a.map(u=>u.toUpperCase()),c.map(u=>w1(n,u))];case 1:return[a.map(u=>u.toLowerCase()),c.map(u=>w1(n,u))];case 2:return[a[0]===\"\"?a:[a[0].charAt(0).toUpperCase()+a[0].slice(1),...a.slice(1)],a[0]===\"\"?[w1(n,c[0]),...c.slice(1)]:c];case 3:return[a[0]===\"\"?a:[a[0].charAt(0).toLowerCase()+a[0].slice(1),...a.slice(1)],a[0]===\"\"?[w1(n,c[0]),...c.slice(1)]:c]}return[a,c]}function IAe(n,a){let c=`${$a(n)},${ru(a)}`,u=nn.get(c);return u||nn.set(c,u=mqe(n,a)),u}function mqe(n,a){let c=Rp(268435456,n);return c.type=a,c}function hqe(n,a,c,u,p){let h=ch(8388608);return h.objectType=n,h.indexType=a,h.accessFlags=c,h.aliasSymbol=u,h.aliasTypeArguments=p,h}function iD(n){if(ge)return!1;if(Ur(n)&4096)return!0;if(n.flags&1048576)return Ji(n.types,iD);if(n.flags&2097152)return vt(n.types,iD);if(n.flags&465829888){let a=Wte(n);return a!==n&&iD(a)}return!1}function eB(n,a){return fh(n)?Np(n):a&&Ys(a)?M0(a):void 0}function xne(n,a){if(a.flags&8208){let c=jn(n.parent,u=>!Us(u))||n.parent;return rS(c)?Ih(c)&&Re(n)&&P2e(c,n):Ji(a.declarations,u=>!Ia(u)||!!(G_(u)&268435456))}return!0}function LAe(n,a,c,u,p,h){var T;let k=p&&p.kind===209?p:void 0,O=p&&pi(p)?void 0:eB(c,p);if(O!==void 0){if(h&256)return eT(a,O)||Se;let J=ja(a,O);if(J){if(h&64&&p&&J.declarations&&Sv(J)&&xne(p,J)){let Ae=(T=k?.argumentExpression)!=null?T:OS(p)?p.indexType:p;Xh(Ae,J.declarations,O)}if(k){if(MM(J,k,jCe(k.expression,a.symbol)),LIe(k,J,xT(k))){Fe(k.argumentExpression,_.Cannot_assign_to_0_because_it_is_a_read_only_property,E(J));return}if(h&8&&(Rr(p).resolvedSymbol=J),PCe(k,J))return at}let de=zn(J);return k&&xT(k)!==1?Yv(k,de):p&&OS(p)&&fD(de)?Gr([de,Oe]):de}if(Im(a,po)&&Wm(O)){let de=+O;if(p&&Im(a,Ae=>!Ae.target.hasRestElement)&&!(h&16)){let Ae=Ane(p);if(po(a)){if(de<0)return Fe(Ae,_.A_tuple_type_cannot_be_indexed_with_a_negative_value),Oe;Fe(Ae,_.Tuple_type_0_of_length_1_has_no_element_at_index_2,Ee(a),Vv(a),Gi(O))}else Fe(Ae,_.Property_0_does_not_exist_on_type_1,Gi(O),Ee(a))}if(de>=0)return H(Cm(a,rt)),Ls(a,Ae=>{let xe=bM(Ae)||Oe;return h&1?Gr([xe,Ge]):xe})}}if(!(c.flags&98304)&&ul(c,402665900)){if(a.flags&131073)return a;let J=rM(a,c)||Cm(a,ae);if(J){if(h&2&&J.keyType!==rt){k&&Fe(k,_.Type_0_cannot_be_used_to_index_type_1,Ee(c),Ee(n));return}if(p&&J.keyType===ae&&!ul(c,12)){let de=Ane(p);return Fe(de,_.Type_0_cannot_be_used_as_an_index_type,Ee(c)),h&1?Gr([J.type,Ge]):J.type}return H(J),h&1&&!(a.symbol&&a.symbol.flags&384&&c.symbol&&c.flags&1024&&ju(c.symbol)===a.symbol)?Gr([J.type,Ge]):J.type}if(c.flags&131072)return lt;if(iD(a))return Se;if(k&&!hie(a)){if(Xv(a)){if(ge&&c.flags&384)return Lo.add(hr(k,_.Property_0_does_not_exist_on_type_1,c.value,Ee(a))),Oe;if(c.flags&12){let de=on(a.properties,Ae=>zn(Ae));return Gr(Sn(de,Oe))}}if(a.symbol===Ye&&O!==void 0&&Ye.exports.has(O)&&Ye.exports.get(O).flags&418)Fe(k,_.Property_0_does_not_exist_on_type_1,Gi(O),Ee(a));else if(ge&&!Y.suppressImplicitAnyIndexErrors&&!(h&128))if(O!==void 0&&BCe(O,a)){let de=Ee(a);Fe(k,_.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead,O,de,de+\"[\"+Qc(k.argumentExpression)+\"]\")}else if(fg(a,rt))Fe(k.argumentExpression,_.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);else{let de;if(O!==void 0&&(de=Xre(O,a)))de!==void 0&&Fe(k.argumentExpression,_.Property_0_does_not_exist_on_type_1_Did_you_mean_2,O,Ee(a),de);else{let Ae=lQe(a,k,c);if(Ae!==void 0)Fe(k,_.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1,Ee(a),Ae);else{let xe;if(c.flags&1024)xe=da(void 0,_.Property_0_does_not_exist_on_type_1,\"[\"+Ee(c)+\"]\",Ee(a));else if(c.flags&8192){let tt=rh(c.symbol,k);xe=da(void 0,_.Property_0_does_not_exist_on_type_1,\"[\"+tt+\"]\",Ee(a))}else c.flags&128||c.flags&256?xe=da(void 0,_.Property_0_does_not_exist_on_type_1,c.value,Ee(a)):c.flags&12&&(xe=da(void 0,_.No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1,Ee(c),Ee(a)));xe=da(xe,_.Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1,Ee(u),Ee(a)),Lo.add(Lh(Gn(k),k,xe))}}}return}}if(iD(a))return Se;if(p){let J=Ane(p);c.flags&384?Fe(J,_.Property_0_does_not_exist_on_type_1,\"\"+c.value,Ee(a)):c.flags&12?Fe(J,_.Type_0_has_no_matching_index_signature_for_type_1,Ee(a),Ee(c)):Fe(J,_.Type_0_cannot_be_used_as_an_index_type,Ee(c))}if(Zo(c))return c;return;function H(J){J&&J.isReadonly&&k&&(Um(k)||GH(k))&&Fe(k,_.Index_signature_in_type_0_only_permits_reading,Ee(a))}}function Ane(n){return n.kind===209?n.argumentExpression:n.kind===196?n.indexType:n.kind===164?n.expression:n}function tB(n){return!!(n.flags&77)||qx(n)}function qx(n){return!!(n.flags&134217728)&&Ji(n.types,tB)||!!(n.flags&268435456)&&tB(n.type)}function SC(n){return!!aD(n)}function Zb(n){return!!(aD(n)&4194304)}function jv(n){return!!(aD(n)&8388608)}function aD(n){return n.flags&3145728?(n.objectFlags&2097152||(n.objectFlags|=2097152|ou(n.types,(a,c)=>a|aD(c),0)),n.objectFlags&12582912):n.flags&33554432?(n.objectFlags&2097152||(n.objectFlags|=2097152|aD(n.baseType)|aD(n.constraint)),n.objectFlags&12582912):(n.flags&58982400||df(n)||Qx(n)?4194304:0)|(n.flags&465829888&&!qx(n)?8388608:0)}function mg(n,a){return n.flags&8388608?yqe(n,a):n.flags&16777216?vqe(n,a):n}function kAe(n,a,c){if(n.flags&1048576||n.flags&2097152&&!xAe(n)){let u=on(n.types,p=>mg(od(p,a),c));return n.flags&2097152||c?so(u):Gr(u)}}function gqe(n,a,c){if(a.flags&1048576){let u=on(a.types,p=>mg(od(n,p),c));return c?so(u):Gr(u)}}function yqe(n,a){let c=a?\"simplifiedForWriting\":\"simplifiedForReading\";if(n[c])return n[c]===gc?n:n[c];n[c]=gc;let u=mg(n.objectType,a),p=mg(n.indexType,a),h=gqe(u,p,a);if(h)return n[c]=h;if(!(p.flags&465829888)){let T=kAe(u,p,a);if(T)return n[c]=T}if(Qx(u)&&p.flags&296){let T=LC(u,p.flags&8?0:u.target.fixedLength,0,a);if(T)return n[c]=T}if(df(u)){let T=by(u);if(!T||to(T,w_(u)))return n[c]=Ls(nB(u,n.indexType),k=>mg(k,a))}return n[c]=n}function vqe(n,a){let c=n.checkType,u=n.extendsType,p=Hv(n),h=Wv(n);if(h.flags&131072&&Cy(p)===Cy(c)){if(c.flags&1||to(zE(c),zE(u)))return mg(p,a);if(DAe(c,u))return lt}else if(p.flags&131072&&Cy(h)===Cy(c)){if(!(c.flags&1)&&to(zE(c),zE(u)))return lt;if(c.flags&1||DAe(c,u))return mg(h,a)}return n}function DAe(n,a){return!!(Gr([QP(n,a),lt]).flags&131072)}function nB(n,a){let c=Wu([w_(n)],[a]),u=Jv(n.mapper,c);return Oi(_h(n.target||n),u)}function od(n,a,c=0,u,p,h){return Ay(n,a,c,u,p,h)||(u?ve:ue)}function wAe(n,a){return Im(n,c=>{if(c.flags&384){let u=Np(c);if(Wm(u)){let p=+u;return p>=0&&p<a}}return!1})}function Ay(n,a,c=0,u,p,h){if(n===Tt||a===Tt)return Tt;if(t2e(n)&&!(a.flags&98304)&&ul(a,12)&&(a=ae),Y.noUncheckedIndexedAccess&&c&32&&(c|=1),jv(a)||(u&&u.kind!==196?Qx(n)&&!wAe(a,n.target.fixedLength):Zb(n)&&!(po(n)&&wAe(a,n.target.fixedLength)))){if(n.flags&3)return n;let k=c&1,O=n.id+\",\"+a.id+\",\"+k+Wx(p,h),H=gr.get(O);return H||gr.set(O,H=hqe(n,a,k,p,h)),H}let T=vC(n);if(a.flags&1048576&&!(a.flags&16)){let k=[],O=!1;for(let H of a.types){let J=LAe(n,T,H,a,u,c|(O?128:0));if(J)k.push(J);else if(u)O=!0;else return}return O?void 0:c&4?so(k,p,h):Gr(k,1,p,h)}return LAe(n,T,a,a,u,c|8|64)}function RAe(n){let a=Rr(n);if(!a.resolvedType){let c=$r(n.objectType),u=$r(n.indexType),p=R1(n);a.resolvedType=od(c,u,0,n,p,Xx(p))}return a.resolvedType}function Cne(n){let a=Rr(n);if(!a.resolvedType){let c=Bd(32,n.symbol);c.declaration=n,c.aliasSymbol=R1(n),c.aliasTypeArguments=Xx(c.aliasSymbol),a.resolvedType=c,rp(c)}return a.resolvedType}function Cy(n){return n.flags&33554432?Cy(n.baseType):n.flags&8388608&&(n.objectType.flags&33554432||n.indexType.flags&33554432)?od(Cy(n.objectType),Cy(n.indexType)):n}function bqe(n){let a=eu(n);return a&&(Zb(a)||jv(a))?uB(n):n}function OAe(n){return p2(n)&&Fn(n.elements)>0&&!vt(n.elements,a=>Rz(a)||Oz(a)||bL(a)&&!!(a.questionToken||a.dotDotDotToken))}function NAe(n,a){return SC(n)||a&&po(n)&&vt(Ko(n),SC)}function Ine(n,a,c,u){let p,h,T=0;for(;;){if(T===1e3){Fe(P,_.Type_instantiation_is_excessively_deep_and_possibly_infinite),p=ve;break}let O=OAe(n.node.checkType)&&OAe(n.node.extendsType)&&Fn(n.node.checkType.elements)===Fn(n.node.extendsType.elements),H=Oi(Cy(n.checkType),a),J=NAe(H,O),de=Oi(n.extendsType,a);if(H===Tt||de===Tt)return Tt;let Ae;if(n.inferTypeParameters){let tt=Tl(n.inferTypeParameters,bqe),It=tt!==n.inferTypeParameters?Wu(n.inferTypeParameters,tt):void 0,Tn=_D(tt,void 0,0);if(It){let Nn=Jv(a,It);for(let en of tt)n.inferTypeParameters.indexOf(en)===-1&&(en.mapper=Nn)}J||gh(Tn.inferences,H,Oi(de,It),1536);let un=Jv(It,Tn.mapper);Ae=a?Jv(un,a):un}let xe=Ae?Oi(n.extendsType,Ae):de;if(!J&&!NAe(xe,O)){if(!(xe.flags&3)&&(H.flags&1||!to(dB(H),dB(xe)))){H.flags&1&&(h||(h=[])).push(Oi($r(n.node.trueType),Ae||a));let tt=$r(n.node.falseType);if(tt.flags&16777216){let It=tt.root;if(It.node.parent===n.node&&(!It.isDistributive||It.checkType===n.checkType)){n=It;continue}if(k(tt,a))continue}p=Oi(tt,a);break}if(xe.flags&3||to(zE(H),zE(xe))){let tt=$r(n.node.trueType),It=Ae||a;if(k(tt,It))continue;p=Oi(tt,It);break}}p=ch(16777216),p.root=n,p.checkType=Oi(n.checkType,a),p.extendsType=Oi(n.extendsType,a),p.mapper=a,p.combinedMapper=Ae,p.aliasSymbol=c||n.aliasSymbol,p.aliasTypeArguments=c?u:hg(n.aliasTypeArguments,a);break}return h?Gr(Sn(h,p)):p;function k(O,H){if(O.flags&16777216&&H){let J=O.root;if(J.outerTypeParameters){let de=Jv(O.mapper,H),Ae=on(J.outerTypeParameters,It=>zv(It,de)),xe=Wu(J.outerTypeParameters,Ae),tt=J.isDistributive?zv(J.checkType,xe):void 0;if(!tt||tt===J.checkType||!(tt.flags&1179648))return n=J,a=xe,c=void 0,u=void 0,J.aliasSymbol&&T++,!0}}return!1}}function Hv(n){return n.resolvedTrueType||(n.resolvedTrueType=Oi($r(n.root.node.trueType),n.mapper))}function Wv(n){return n.resolvedFalseType||(n.resolvedFalseType=Oi($r(n.root.node.falseType),n.mapper))}function Eqe(n){return n.resolvedInferredTrueType||(n.resolvedInferredTrueType=n.combinedMapper?Oi($r(n.root.node.trueType),n.combinedMapper):Hv(n))}function PAe(n){let a;return n.locals&&n.locals.forEach(c=>{c.flags&262144&&(a=Sn(a,gs(c)))}),a}function Tqe(n){return n.isDistributive&&(fM(n.checkType,n.node.trueType)||fM(n.checkType,n.node.falseType))}function Sqe(n){let a=Rr(n);if(!a.resolvedType){let c=$r(n.checkType),u=R1(n),p=Xx(u),h=hC(n,!0),T=p?h:Pr(h,O=>fM(O,n)),k={node:n,checkType:c,extendsType:$r(n.extendsType),isDistributive:!!(c.flags&262144),inferTypeParameters:PAe(n),outerTypeParameters:T,instantiations:void 0,aliasSymbol:u,aliasTypeArguments:p};a.resolvedType=Ine(k,void 0),T&&(k.instantiations=new Map,k.instantiations.set(kf(T),a.resolvedType))}return a.resolvedType}function xqe(n){let a=Rr(n);return a.resolvedType||(a.resolvedType=UE(fr(n.typeParameter))),a.resolvedType}function MAe(n){return Re(n)?[n]:Sn(MAe(n.left),n.right)}function Aqe(n){var a;let c=Rr(n);if(!c.resolvedType){if(!ib(n))return Fe(n.argument,_.String_literal_expected),c.resolvedSymbol=Ht,c.resolvedType=ve;let u=n.isTypeOf?111551:n.flags&8388608?900095:788968,p=Gl(n,n.argument.literal);if(!p)return c.resolvedSymbol=Ht,c.resolvedType=ve;let h=!!((a=p.exports)!=null&&a.get(\"export=\")),T=Vu(p,!1);if(rc(n.qualifier))if(T.flags&u)c.resolvedType=FAe(n,c,T,u);else{let k=u===111551?_.Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here:_.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0;Fe(n,k,n.argument.literal.text),c.resolvedSymbol=Ht,c.resolvedType=ve}else{let k=MAe(n.qualifier),O=T,H;for(;H=k.shift();){let J=k.length?1920:u,de=No(Ac(O)),Ae=n.isTypeOf||Yn(n)&&h?ja(zn(de),H.escapedText,!1,!0):void 0,xe=n.isTypeOf?void 0:yd(Gd(de),H.escapedText,J),tt=xe??Ae;if(!tt)return Fe(H,_.Namespace_0_has_no_exported_member_1,rh(O),os(H)),c.resolvedType=ve;Rr(H).resolvedSymbol=tt,Rr(H.parent).resolvedSymbol=tt,O=tt}c.resolvedType=FAe(n,c,O,u)}}return c.resolvedType}function FAe(n,a,c,u){let p=Ac(c);return a.resolvedSymbol=p,u===111551?pIe(zn(c),n):YG(n,p)}function GAe(n){let a=Rr(n);if(!a.resolvedType){let c=R1(n);if(vy(n.symbol).size===0&&!c)a.resolvedType=mc;else{let u=Bd(16,n.symbol);u.aliasSymbol=c,u.aliasTypeArguments=Xx(c),LL(n)&&n.isArrayType&&(u=nu(u)),a.resolvedType=u}}return a.resolvedType}function R1(n){let a=n.parent;for(;wS(a)||UT(a)||RS(a)&&a.operator===146;)a=a.parent;return sR(a)?fr(a):void 0}function Xx(n){return n?yy(n):void 0}function rB(n){return!!(n.flags&524288)&&!df(n)}function Lne(n){return mh(n)||!!(n.flags&474058748)}function kne(n,a){if(!(n.flags&1048576))return n;if(Ji(n.types,Lne))return wr(n.types,mh)||Ki;let c=wr(n.types,h=>!Lne(h));if(!c||wr(n.types,h=>h!==c&&!Lne(h)))return n;return p(c);function p(h){let T=Ua();for(let O of Jo(h))if(!(Ef(O)&24)){if(iB(O)){let H=O.flags&65536&&!(O.flags&32768),de=wo(16777220,O.escapedName,Bte(O)|(a?8:0));de.links.type=H?Oe:ao(zn(O),!0),de.declarations=O.declarations,de.links.nameType=Ai(O).nameType,de.links.syntheticOrigin=O,T.set(O.escapedName,de)}}let k=ls(h.symbol,T,Je,Je,tu(h));return k.objectFlags|=131200,k}}function e0(n,a,c,u,p){if(n.flags&1||a.flags&1)return Se;if(n.flags&2||a.flags&2)return ue;if(n.flags&131072)return a;if(a.flags&131072)return n;if(n=kne(n,p),n.flags&1048576)return cM([n,a])?Ls(n,H=>e0(H,a,c,u,p)):ve;if(a=kne(a,p),a.flags&1048576)return cM([n,a])?Ls(a,H=>e0(n,H,c,u,p)):ve;if(a.flags&473960444)return n;if(Zb(n)||Zb(a)){if(mh(n))return a;if(n.flags&2097152){let H=n.types,J=H[H.length-1];if(rB(J)&&rB(a))return so(Qi(H.slice(0,H.length-1),[e0(J,a,c,u,p)]))}return so([n,a])}let h=Ua(),T=new Set,k=n===Ki?tu(a):xxe([n,a]);for(let H of Jo(a))Ef(H)&24?T.add(H.escapedName):iB(H)&&h.set(H.escapedName,Dne(H,p));for(let H of Jo(n))if(!(T.has(H.escapedName)||!iB(H)))if(h.has(H.escapedName)){let J=h.get(H.escapedName),de=zn(J);if(J.flags&16777216){let Ae=Qi(H.declarations,J.declarations),xe=4|H.flags&16777216,tt=wo(xe,H.escapedName);tt.links.type=Gr([zn(H),tre(de)],2),tt.links.leftSpread=H,tt.links.rightSpread=J,tt.declarations=Ae,tt.links.nameType=Ai(H).nameType,h.set(H.escapedName,tt)}}else h.set(H.escapedName,Dne(H,p));let O=ls(c,h,Je,Je,Tl(k,H=>Cqe(H,p)));return O.objectFlags|=2228352|u,O}function iB(n){var a;return!vt(n.declarations,xu)&&(!(n.flags&106496)||!((a=n.declarations)!=null&&a.some(c=>Yr(c.parent))))}function Dne(n,a){let c=n.flags&65536&&!(n.flags&32768);if(!c&&a===M_(n))return n;let u=4|n.flags&16777216,p=wo(u,n.escapedName,Bte(n)|(a?8:0));return p.links.type=c?Oe:zn(n),p.declarations=n.declarations,p.links.nameType=Ai(n).nameType,p.links.syntheticOrigin=n,p}function Cqe(n,a){return n.isReadonly!==a?Fp(n.keyType,n.type,a,n.declaration):n}function lM(n,a,c,u){let p=Rp(n,c);return p.value=a,p.regularType=u||p,p}function Yx(n){if(n.flags&2976){if(!n.freshType){let a=lM(n.flags,n.value,n.symbol,n);a.freshType=a,n.freshType=a}return n.freshType}return n}function Hu(n){return n.flags&2976?n.regularType:n.flags&1048576?n.regularType||(n.regularType=Ls(n,Hu)):n}function t0(n){return!!(n.flags&2976)&&n.freshType===n}function ff(n){let a;return $n.get(n)||($n.set(n,a=lM(128,n)),a)}function op(n){let a;return ui.get(n)||(ui.set(n,a=lM(256,n)),a)}function aB(n){let a,c=j0(n);return Ni.get(c)||(Ni.set(c,a=lM(2048,n)),a)}function Iqe(n,a,c){let u,p=`${a}${typeof n==\"string\"?\"@\":\"#\"}${n}`,h=1024|(typeof n==\"string\"?128:256);return Pi.get(p)||(Pi.set(p,u=lM(h,n,c)),u)}function Lqe(n){if(n.literal.kind===104)return ln;let a=Rr(n);return a.resolvedType||(a.resolvedType=Hu(Yi(n.literal))),a.resolvedType}function kqe(n){let a=Rp(8192,n);return a.escapedName=`__@${a.symbol.escapedName}@${$a(a.symbol)}`,a}function wne(n){if(ece(n)){let a=k6(n)?vd(n.left):vd(n);if(a){let c=Ai(a);return c.uniqueESSymbolType||(c.uniqueESSymbolType=kqe(a))}}return j}function Dqe(n){let a=Ku(n,!1,!1),c=a&&a.parent;if(c&&(Yr(c)||c.kind===261)&&!Ca(a)&&(!Ec(a)||AT(n,a.body)))return vu(fr(c)).thisType;if(c&&rs(c)&&ar(c.parent)&&ic(c.parent)===6)return vu(vd(c.parent.left).parent).thisType;let u=n.flags&8388608?sb(n):void 0;return u&&ms(u)&&ar(u.parent)&&ic(u.parent)===3?vu(vd(u.parent.left).parent).thisType:cp(a)&&AT(n,a.body)?vu(fr(a)).thisType:(Fe(n,_.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface),ve)}function oB(n){let a=Rr(n);return a.resolvedType||(a.resolvedType=Dqe(n)),a.resolvedType}function BAe(n){return $r(uM(n.type)||n.type)}function uM(n){switch(n.kind){case 193:return uM(n.type);case 186:if(n.elements.length===1&&(n=n.elements[0],n.kind===188||n.kind===199&&n.dotDotDotToken))return uM(n.type);break;case 185:return n.elementType}}function wqe(n){let a=Rr(n);return a.resolvedType||(a.resolvedType=n.dotDotDotToken?BAe(n):ao($r(n.type),!0,!!n.questionToken))}function $r(n){return uKe(UAe(n),n)}function UAe(n){switch(n.kind){case 131:case 315:case 316:return Se;case 157:return ue;case 152:return ae;case 148:return rt;case 160:return Ot;case 134:return Te;case 153:return j;case 114:return yt;case 155:return Oe;case 104:return ln;case 144:return lt;case 149:return n.flags&262144&&!ge?Se:jr;case 139:return Q;case 194:case 108:return oB(n);case 198:return Lqe(n);case 180:return dne(n);case 179:return n.assertsModifier?yt:Te;case 230:return dne(n);case 183:return $xe(n);case 185:case 186:return GKe(n);case 187:return jKe(n);case 189:return XKe(n);case 190:return rqe(n);case 317:return dKe(n);case 319:return ao($r(n.type));case 199:return wqe(n);case 193:case 318:case 312:return $r(n.type);case 188:return BAe(n);case 321:return Lnt(n);case 181:case 182:case 184:case 325:case 320:case 326:return GAe(n);case 195:return uqe(n);case 196:return RAe(n);case 197:return Cne(n);case 191:return Sqe(n);case 192:return xqe(n);case 200:return dqe(n);case 202:return Aqe(n);case 79:case 163:case 208:let a=Zf(n);return a?gs(a):ve;default:return ve}}function sB(n,a,c){if(n&&n.length)for(let u=0;u<n.length;u++){let p=n[u],h=c(p,a);if(p!==h){let T=u===0?[]:n.slice(0,u);for(T.push(h),u++;u<n.length;u++)T.push(c(n[u],a));return T}}return n}function hg(n,a){return sB(n,a,Oi)}function cB(n,a){return sB(n,a,$x)}function VAe(n,a){return sB(n,a,zqe)}function Wu(n,a){return n.length===1?n0(n[0],a?a[0]:Se):Rqe(n,a)}function zv(n,a){switch(a.kind){case 0:return n===a.source?a.target:n;case 1:{let u=a.sources,p=a.targets;for(let h=0;h<u.length;h++)if(n===u[h])return p?p[h]:Se;return n}case 2:{let u=a.sources,p=a.targets;for(let h=0;h<u.length;h++)if(n===u[h])return p[h]();return n}case 3:return a.func(n);case 4:case 5:let c=zv(n,a.mapper1);return c!==n&&a.kind===4?Oi(c,a.mapper2):zv(c,a.mapper2)}}function n0(n,a){return L.attachDebugPrototypeIfDebug({kind:0,source:n,target:a})}function Rqe(n,a){return L.attachDebugPrototypeIfDebug({kind:1,sources:n,targets:a})}function dM(n,a){return L.attachDebugPrototypeIfDebug({kind:3,func:n,debugInfo:L.isDebugging?a:void 0})}function Rne(n,a){return L.attachDebugPrototypeIfDebug({kind:2,sources:n,targets:a})}function lB(n,a,c){return L.attachDebugPrototypeIfDebug({kind:n,mapper1:a,mapper2:c})}function jAe(n){return Wu(n,void 0)}function Oqe(n,a){let c=n.inferences.slice(a);return Wu(on(c,u=>u.typeParameter),on(c,()=>ue))}function Jv(n,a){return n?lB(4,n,a):a}function Nqe(n,a){return n?lB(5,n,a):a}function O1(n,a,c){return c?lB(5,n0(n,a),c):n0(n,a)}function oD(n,a,c){return n?lB(5,n,n0(a,c)):n0(a,c)}function Pqe(n){return!n.constraint&&!sne(n)||n.constraint===Co?n:n.restrictiveInstantiation||(n.restrictiveInstantiation=rd(n.symbol),n.restrictiveInstantiation.constraint=Co,n.restrictiveInstantiation)}function uB(n){let a=rd(n.symbol);return a.target=n,a}function Mqe(n,a){return iM(n.kind,n.parameterName,n.parameterIndex,Oi(n.type,a))}function $x(n,a,c){let u;if(n.typeParameters&&!c){u=on(n.typeParameters,uB),a=Jv(Wu(n.typeParameters,u),a);for(let h of u)h.mapper=a}let p=Am(n.declaration,u,n.thisParameter&&One(n.thisParameter,a),sB(n.parameters,a,One),void 0,void 0,n.minArgumentCount,n.flags&39);return p.target=n,p.mapper=a,p}function One(n,a){let c=Ai(n);if(c.type&&!XE(c.type))return n;ac(n)&1&&(n=c.target,a=Jv(c.mapper,a));let u=wo(n.flags,n.escapedName,1|ac(n)&53256);return u.declarations=n.declarations,u.parent=n.parent,u.links.target=n,u.links.mapper=a,n.valueDeclaration&&(u.valueDeclaration=n.valueDeclaration),c.nameType&&(u.links.nameType=c.nameType),u}function Fqe(n,a,c,u){let p=n.objectFlags&4||n.objectFlags&8388608?n.node:n.symbol.declarations[0],h=Rr(p),T=n.objectFlags&4?h.resolvedType:n.objectFlags&64?n.target:n,k=h.outerTypeParameters;if(!k){let O=hC(p,!0);if(cp(p)){let J=Mxe(p);O=si(O,J)}k=O||Je;let H=n.objectFlags&8388612?[p]:n.symbol.declarations;k=(T.objectFlags&8388612||T.symbol.flags&8192||T.symbol.flags&2048)&&!T.aliasTypeArguments?Pr(k,J=>vt(H,de=>fM(J,de))):k,h.outerTypeParameters=k}if(k.length){let O=Jv(n.mapper,a),H=on(k,tt=>zv(tt,O)),J=c||n.aliasSymbol,de=c?u:hg(n.aliasTypeArguments,a),Ae=kf(H)+Wx(J,de);T.instantiations||(T.instantiations=new Map,T.instantiations.set(kf(k)+Wx(T.aliasSymbol,T.aliasTypeArguments),T));let xe=T.instantiations.get(Ae);if(!xe){let tt=Wu(k,H);xe=T.objectFlags&4?cne(n.target,n.node,tt,J,de):T.objectFlags&32?HAe(T,tt,J,de):Mne(T,tt,J,de),T.instantiations.set(Ae,xe)}return xe}return n}function Gqe(n){return!(n.parent.kind===180&&n.parent.typeArguments&&n===n.parent.typeName||n.parent.kind===202&&n.parent.typeArguments&&n===n.parent.qualifier)}function fM(n,a){if(n.symbol&&n.symbol.declarations&&n.symbol.declarations.length===1){let u=n.symbol.declarations[0].parent;for(let p=a;p!==u;p=p.parent)if(!p||p.kind===238||p.kind===191&&pa(p.extendsType,c))return!0;return c(a)}return!0;function c(u){switch(u.kind){case 194:return!!n.isThisType;case 79:return!n.isThisType&&Gm(u)&&Gqe(u)&&UAe(u)===n;case 183:let p=u.exprName,h=Yd(p),T=Qf(h),k=n.symbol.declarations[0],O;if(k.kind===165)O=k.parent;else if(n.isThisType)O=k;else return!0;return T.declarations?vt(T.declarations,H=>AT(H,O))||vt(u.typeArguments,c):!0;case 171:case 170:return!u.type&&!!u.body||vt(u.typeParameters,c)||vt(u.parameters,c)||!!u.type&&c(u.type)}return!!pa(u,c)}}function Nne(n){let a=rp(n);if(a.flags&4194304){let c=Cy(a.type);if(c.flags&262144)return c}}function HAe(n,a,c,u){let p=Nne(n);if(p){let h=Oi(p,a);if(p!==h)return z2e(O_(h),T=>{if(T.flags&61603843&&T!==Tt&&!Ro(T)){if(!n.declaration.nameType){let k;if(_f(T)||T.flags&1&&Sm(p,4)<0&&(k=eu(p))&&Im(k,JE))return Uqe(T,n,O1(p,T,a));if(Qx(T))return Bqe(T,n,p,a);if(po(T))return Vqe(T,n,O1(p,T,a))}return Mne(n,O1(p,T,a))}return T},c,u)}return Oi(rp(n),a)===Tt?Tt:Mne(n,a,c,u)}function Pne(n,a){return a&1?!0:a&2?!1:n}function Bqe(n,a,c,u){let p=n.target.elementFlags,h=on(Ko(n),(k,O)=>{let H=p[O]&8?k:p[O]&4?nu(k):ap([k],[p[O]]);return HAe(a,O1(c,H,u))}),T=Pne(n.target.readonly,Pp(a));return ap(h,on(h,k=>8),T)}function Uqe(n,a,c){let u=WAe(a,rt,!0,c);return Ro(u)?ve:nu(u,Pne(CC(n),Pp(a)))}function Vqe(n,a,c){let u=n.target.elementFlags,p=on(Ko(n),(O,H)=>WAe(a,ff(\"\"+H),!!(u[H]&2),c)),h=Pp(a),T=h&4?on(u,O=>O&1?2:O):h&8?on(u,O=>O&2?1:O):u,k=Pne(n.target.readonly,h);return ya(p,ve)?ve:ap(p,T,k,n.target.labeledElementDeclarations)}function WAe(n,a,c,u){let p=oD(u,w_(n),a),h=Oi(_h(n.target||n),p),T=Pp(n);return U&&T&4&&!Js(h,49152)?gg(h,!0):U&&T&8&&c?wf(h,524288):h}function Mne(n,a,c,u){let p=Bd(n.objectFlags|64,n.symbol);if(n.objectFlags&32){p.declaration=n.declaration;let h=w_(n),T=uB(h);p.typeParameter=T,a=Jv(n0(h,T),a),T.mapper=a}return n.objectFlags&8388608&&(p.node=n.node),p.target=n,p.mapper=a,p.aliasSymbol=c||n.aliasSymbol,p.aliasTypeArguments=c?u:hg(n.aliasTypeArguments,a),p.objectFlags|=p.aliasTypeArguments?qG(p.aliasTypeArguments):0,p}function Fne(n,a,c,u){let p=n.root;if(p.outerTypeParameters){let h=on(p.outerTypeParameters,O=>zv(O,a)),T=kf(h)+Wx(c,u),k=p.instantiations.get(T);if(!k){let O=Wu(p.outerTypeParameters,h),H=p.checkType,J=p.isDistributive?zv(H,O):void 0;k=J&&H!==J&&J.flags&1179648?z2e(O_(J),de=>Ine(p,O1(H,de,O)),c,u):Ine(p,O,c,u),p.instantiations.set(T,k)}return k}return n}function Oi(n,a){return n&&a?zAe(n,a,void 0,void 0):n}function zAe(n,a,c,u){var p;if(!XE(n))return n;if(w===100||A>=5e6)return(p=ai)==null||p.instant(ai.Phase.CheckTypes,\"instantiateType_DepthLimit\",{typeId:n.id,instantiationDepth:w,instantiationCount:A}),Fe(P,_.Type_instantiation_is_excessively_deep_and_possibly_infinite),ve;x++,A++,w++;let h=jqe(n,a,c,u);return w--,h}function jqe(n,a,c,u){let p=n.flags;if(p&262144)return zv(n,a);if(p&524288){let h=n.objectFlags;if(h&52){if(h&4&&!n.node){let T=n.resolvedTypeArguments,k=hg(T,a);return k!==T?yne(n.target,k):n}return h&1024?Hqe(n,a):Fqe(n,a,c,u)}return n}if(p&3145728){let h=n.flags&1048576?n.origin:void 0,T=h&&h.flags&3145728?h.types:n.types,k=hg(T,a);if(k===T&&c===n.aliasSymbol)return n;let O=c||n.aliasSymbol,H=c?u:hg(n.aliasTypeArguments,a);return p&2097152||h&&h.flags&2097152?so(k,O,H):Gr(k,1,O,H)}if(p&4194304)return Gp(Oi(n.type,a));if(p&134217728)return WE(n.texts,hg(n.types,a));if(p&268435456)return w1(n.symbol,Oi(n.type,a));if(p&8388608){let h=c||n.aliasSymbol,T=c?u:hg(n.aliasTypeArguments,a);return od(Oi(n.objectType,a),Oi(n.indexType,a),n.accessFlags,void 0,h,T)}if(p&16777216)return Fne(n,Jv(n.mapper,a),c,u);if(p&33554432){let h=Oi(n.baseType,a),T=Oi(n.constraint,a);return h.flags&8650752&&SC(T)?lne(h,T):T.flags&3||to(zE(h),zE(T))?h:h.flags&8650752?lne(h,T):so([T,h])}return n}function Hqe(n,a){let c=Oi(n.mappedType,a);if(!(Ur(c)&32))return n;let u=Oi(n.constraintType,a);if(!(u.flags&4194304))return n;let p=T2e(Oi(n.source,a),c,u);return p||n}function Wqe(n){return n.flags&134479871?n:n.uniqueLiteralFilledInstantiation||(n.uniqueLiteralFilledInstantiation=Oi(n,Fo))}function dB(n){return n.flags&134479871?n:n.permissiveInstantiation||(n.permissiveInstantiation=Oi(n,xi))}function zE(n){return n.flags&134479871?n:(n.restrictiveInstantiation||(n.restrictiveInstantiation=Oi(n,Hi),n.restrictiveInstantiation.restrictiveInstantiation=n.restrictiveInstantiation),n.restrictiveInstantiation)}function zqe(n,a){return Fp(n.keyType,Oi(n.type,a),n.isReadonly,n.declaration)}function $f(n){switch(L.assert(n.kind!==171||s_(n)),n.kind){case 215:case 216:case 171:case 259:return JAe(n);case 207:return vt(n.properties,$f);case 206:return vt(n.elements,$f);case 224:return $f(n.whenTrue)||$f(n.whenFalse);case 223:return(n.operatorToken.kind===56||n.operatorToken.kind===60)&&($f(n.left)||$f(n.right));case 299:return $f(n.initializer);case 214:return $f(n.expression);case 289:return vt(n.properties,$f)||Xm(n.parent)&&vt(n.parent.parent.children,$f);case 288:{let{initializer:a}=n;return!!a&&$f(a)}case 291:{let{expression:a}=n;return!!a&&$f(a)}}return!1}function JAe(n){return b4(n)||Jqe(n)}function Jqe(n){return!n.typeParameters&&!U_(n)&&!!n.body&&n.body.kind!==238&&$f(n.body)}function fB(n){return(a2(n)||s_(n))&&JAe(n)}function KAe(n){if(n.flags&524288){let a=R_(n);if(a.constructSignatures.length||a.callSignatures.length){let c=Bd(16,n.symbol);return c.members=a.members,c.properties=a.properties,c.callSignatures=Je,c.constructSignatures=Je,c.indexInfos=Je,c}}else if(n.flags&2097152)return so(on(n.types,KAe));return n}function ph(n,a){return Bp(n,a,td)}function sD(n,a){return Bp(n,a,td)?-1:0}function Gne(n,a){return Bp(n,a,Zu)?-1:0}function Kqe(n,a){return Bp(n,a,hm)?-1:0}function Iy(n,a){return Bp(n,a,hm)}function qAe(n,a){return Bp(n,a,x_)}function to(n,a){return Bp(n,a,Zu)}function r0(n,a){return n.flags&1048576?Ji(n.types,c=>r0(c,a)):a.flags&1048576?vt(a.types,c=>r0(n,c)):n.flags&2097152?vt(n.types,c=>r0(c,a)):n.flags&58982400?r0(bu(n)||ue,a):hh(a)?!!(n.flags&67633152):a===ka?!!(n.flags&67633152)&&!hh(n):a===Hs?!!(n.flags&524288)&&vre(n):BE(n,Bx(a))||_f(a)&&!CC(a)&&r0(n,jo)}function _B(n,a){return Bp(n,a,ed)}function _M(n,a){return _B(n,a)||_B(a,n)}function wu(n,a,c,u,p,h){return Df(n,a,Zu,c,u,p,h)}function Ly(n,a,c,u,p,h){return Bne(n,a,Zu,c,u,p,h,void 0)}function Bne(n,a,c,u,p,h,T,k){return Bp(n,a,c)?!0:!u||!cD(p,n,a,c,h,T,k)?Df(n,a,c,u,h,T,k):!1}function XAe(n){return!!(n.flags&16777216||n.flags&2097152&&vt(n.types,XAe))}function cD(n,a,c,u,p,h,T){if(!n||XAe(c))return!1;if(!Df(a,c,u,void 0)&&qqe(n,a,c,u,p,h,T))return!0;switch(n.kind){case 291:case 214:return cD(n.expression,a,c,u,p,h,T);case 223:switch(n.operatorToken.kind){case 63:case 27:return cD(n.right,a,c,u,p,h,T)}break;case 207:return nXe(n,a,c,u,h,T);case 206:return eXe(n,a,c,u,h,T);case 289:return Zqe(n,a,c,u,h,T);case 216:return Xqe(n,a,c,u,h,T)}return!1}function qqe(n,a,c,u,p,h,T){let k=xa(a,0),O=xa(a,1);for(let H of[O,k])if(vt(H,J=>{let de=qo(J);return!(de.flags&131073)&&Df(de,c,u,void 0)})){let J=T||{};wu(a,c,n,p,h,J);let de=J.errors[J.errors.length-1];return Ao(de,hr(n,H===O?_.Did_you_mean_to_use_new_with_this_expression:_.Did_you_mean_to_call_this_expression)),!0}return!1}function Xqe(n,a,c,u,p,h){if(Va(n.body)||vt(n.parameters,f6))return!1;let T=F1(a);if(!T)return!1;let k=xa(c,0);if(!Fn(k))return!1;let O=n.body,H=qo(T),J=Gr(on(k,qo));if(!Df(H,J,u,void 0)){let de=O&&cD(O,H,J,u,void 0,p,h);if(de)return de;let Ae=h||{};if(Df(H,J,u,O,void 0,p,Ae),Ae.errors)return c.symbol&&Fn(c.symbol.declarations)&&Ao(Ae.errors[Ae.errors.length-1],hr(c.symbol.declarations[0],_.The_expected_type_comes_from_the_return_type_of_this_signature)),!(pl(n)&2)&&!Vc(H,\"then\")&&Df(jM(H),J,u,void 0)&&Ao(Ae.errors[Ae.errors.length-1],hr(n,_.Did_you_mean_to_mark_this_function_as_async)),!0}return!1}function YAe(n,a,c){let u=Ay(a,c);if(u)return u;if(a.flags&1048576){let p=i2e(n,a);if(p)return Ay(p,c)}}function $Ae(n,a){wM(n,a,!1);let c=BC(n,1);return vD(),c}function pM(n,a,c,u,p,h){let T=!1;for(let k of n){let{errorNode:O,innerExpression:H,nameType:J,errorMessage:de}=k,Ae=YAe(a,c,J);if(!Ae||Ae.flags&8388608)continue;let xe=Ay(a,J);if(!xe)continue;let tt=eB(J,void 0);if(!Df(xe,Ae,u,void 0)){let It=H&&cD(H,xe,Ae,u,void 0,p,h);if(T=!0,!It){let Tn=h||{},un=H?$Ae(H,xe):xe;if(Pe&&mB(un,Ae)){let Nn=hr(O,_.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target,Ee(un),Ee(Ae));Lo.add(Nn),Tn.errors=[Nn]}else{let Nn=!!(tt&&(ja(c,tt)||Ht).flags&16777216),en=!!(tt&&(ja(a,tt)||Ht).flags&16777216);Ae=KE(Ae,Nn),xe=KE(xe,Nn&&en),Df(un,Ae,u,O,de,p,Tn)&&un!==xe&&Df(xe,Ae,u,O,de,p,Tn)}if(Tn.errors){let Nn=Tn.errors[Tn.errors.length-1],en=fh(J)?Np(J):void 0,cn=en!==void 0?ja(c,en):void 0,rr=!1;if(!cn){let Jt=rM(c,J);Jt&&Jt.declaration&&!Gn(Jt.declaration).hasNoDefaultLib&&(rr=!0,Ao(Nn,hr(Jt.declaration,_.The_expected_type_comes_from_this_index_signature)))}if(!rr&&(cn&&Fn(cn.declarations)||c.symbol&&Fn(c.symbol.declarations))){let Jt=cn&&Fn(cn.declarations)?cn.declarations[0]:c.symbol.declarations[0];Gn(Jt).hasNoDefaultLib||Ao(Nn,hr(Jt,_.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1,en&&!(J.flags&8192)?Gi(en):Ee(J),Ee(c)))}}}}}return T}function Yqe(n,a,c,u,p,h){let T=jc(c,EB),k=jc(c,J=>!EB(J)),O=k!==lt?Oie(13,0,k,void 0):void 0,H=!1;for(let J=n.next();!J.done;J=n.next()){let{errorNode:de,innerExpression:Ae,nameType:xe,errorMessage:tt}=J.value,It=O,Tn=T!==lt?YAe(a,T,xe):void 0;if(Tn&&!(Tn.flags&8388608)&&(It=O?Gr([O,Tn]):Tn),!It)continue;let un=Ay(a,xe);if(!un)continue;let Nn=eB(xe,void 0);if(!Df(un,It,u,void 0)){let en=Ae&&cD(Ae,un,It,u,void 0,p,h);if(H=!0,!en){let cn=h||{},rr=Ae?$Ae(Ae,un):un;if(Pe&&mB(rr,It)){let Jt=hr(de,_.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target,Ee(rr),Ee(It));Lo.add(Jt),cn.errors=[Jt]}else{let Jt=!!(Nn&&(ja(T,Nn)||Ht).flags&16777216),Cn=!!(Nn&&(ja(a,Nn)||Ht).flags&16777216);It=KE(It,Jt),un=KE(un,Jt&&Cn),Df(rr,It,u,de,tt,p,cn)&&rr!==un&&Df(un,It,u,de,tt,p,cn)}}}}return H}function*$qe(n){if(Fn(n.properties))for(let a of n.properties)GT(a)||Fre(vr(a.name))||(yield{errorNode:a.name,innerExpression:a.initializer,nameType:ff(vr(a.name))})}function*Qqe(n,a){if(!Fn(n.children))return;let c=0;for(let u=0;u<n.children.length;u++){let p=n.children[u],h=op(u-c),T=QAe(p,h,a);T?yield T:c++}}function QAe(n,a,c){switch(n.kind){case 291:return{errorNode:n,innerExpression:n.expression,nameType:a};case 11:if(n.containsOnlyTriviaWhiteSpaces)break;return{errorNode:n,innerExpression:void 0,nameType:a,errorMessage:c()};case 281:case 282:case 285:return{errorNode:n,innerExpression:n,nameType:a};default:return L.assertNever(n,\"Found invalid jsx child\")}}function Zqe(n,a,c,u,p,h){let T=pM($qe(n),a,c,u,p,h),k;if(Xm(n.parent)&&Hg(n.parent.parent)){let H=n.parent.parent,J=HB(tA(n)),de=J===void 0?\"children\":Gi(J),Ae=ff(de),xe=od(c,Ae),tt=bR(H.children);if(!Fn(tt))return T;let It=Fn(tt)>1,Tn,un;if(pne(!1)!==ro){let en=cAe(Se);Tn=jc(xe,cn=>to(cn,en)),un=jc(xe,cn=>!to(cn,en))}else Tn=jc(xe,EB),un=jc(xe,en=>!EB(en));if(It){if(Tn!==lt){let en=ap(jB(H,0)),cn=Qqe(H,O);T=Yqe(cn,en,Tn,u,p,h)||T}else if(!Bp(od(a,Ae),xe,u)){T=!0;let en=Fe(H.openingElement.tagName,_.This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided,de,Ee(xe));h&&h.skipLogging&&(h.errors||(h.errors=[])).push(en)}}else if(un!==lt){let en=tt[0],cn=QAe(en,Ae,O);cn&&(T=pM(function*(){yield cn}(),a,c,u,p,h)||T)}else if(!Bp(od(a,Ae),xe,u)){T=!0;let en=Fe(H.openingElement.tagName,_.This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided,de,Ee(xe));h&&h.skipLogging&&(h.errors||(h.errors=[])).push(en)}}return T;function O(){if(!k){let H=Qc(n.parent.tagName),J=HB(tA(n)),de=J===void 0?\"children\":Gi(J),Ae=od(c,ff(de)),xe=_._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2;k={...xe,key:\"!!ALREADY FORMATTED!!\",message:TW(void 0,xe,H,de,Ee(Ae))}}return k}}function*ZAe(n,a){let c=Fn(n.elements);if(c)for(let u=0;u<c;u++){if(IC(a)&&!ja(a,\"\"+u))continue;let p=n.elements[u];if(ol(p))continue;let h=op(u);yield{errorNode:p,innerExpression:p,nameType:h}}}function eXe(n,a,c,u,p,h){if(c.flags&134479868)return!1;if(IC(a))return pM(ZAe(n,c),a,c,u,p,h);wM(n,c,!1);let T=gCe(n,1,!0);return vD(),IC(T)?pM(ZAe(n,c),T,c,u,p,h):!1}function*tXe(n){if(Fn(n.properties))for(let a of n.properties){if(VS(a))continue;let c=TC(fr(a),8576);if(!(!c||c.flags&131072))switch(a.kind){case 175:case 174:case 171:case 300:yield{errorNode:a.name,innerExpression:void 0,nameType:c};break;case 299:yield{errorNode:a.name,innerExpression:a.initializer,nameType:c,errorMessage:Vw(a.name)?_.Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1:void 0};break;default:L.assertNever(a)}}}function nXe(n,a,c,u,p,h){return c.flags&134479868?!1:pM(tXe(n),a,c,u,p,h)}function e2e(n,a,c,u,p){return Df(n,a,ed,c,u,p)}function rXe(n,a,c){return Une(n,a,c?4:0,!1,void 0,void 0,Gne,void 0)!==0}function pB(n){if(!n.typeParameters&&(!n.thisParameter||Zo(UM(n.thisParameter)))&&n.parameters.length===1&&Xl(n)){let a=UM(n.parameters[0]);return!!((_f(a)?Ko(a)[0]:a).flags&131073&&qo(n).flags&3)}return!1}function Une(n,a,c,u,p,h,T,k){if(n===a||!(c&16&&pB(n))&&pB(a))return-1;if(c&16&&pB(n)&&!pB(a))return 0;let O=xd(a);if(!jp(a)&&(c&8?jp(n)||xd(n)>O:Vp(n)>O))return 0;n.typeParameters&&n.typeParameters!==a.typeParameters&&(a=iKe(a),n=qCe(n,a,void 0,T));let J=xd(n),de=AD(n),Ae=AD(a);(de||Ae)&&Oi(de||Ae,k);let xe=a.declaration?a.declaration.kind:0,tt=!(c&3)&&re&&xe!==171&&xe!==170&&xe!==173,It=-1,Tn=Yb(n);if(Tn&&Tn!==yt){let en=Yb(a);if(en){let cn=!tt&&T(Tn,en,!1)||T(en,Tn,u);if(!cn)return u&&p(_.The_this_types_of_each_signature_are_incompatible),0;It&=cn}}let un=de||Ae?Math.min(J,O):Math.max(J,O),Nn=de||Ae?un-1:-1;for(let en=0;en<un;en++){let cn=en===Nn?SD(n,en):tT(n,en),rr=en===Nn?SD(a,en):tT(a,en);if(cn&&rr){let Jt=c&3?void 0:F1(yg(cn)),Cn=c&3?void 0:F1(yg(rr)),Br=Jt&&Cn&&!Lf(Jt)&&!Lf(Cn)&&(iu(cn)&50331648)===(iu(rr)&50331648)?Une(Cn,Jt,c&8|(tt?2:1),u,p,h,T,k):!(c&3)&&!tt&&T(cn,rr,!1)||T(rr,cn,u);if(Br&&c&8&&en>=Vp(n)&&en<Vp(a)&&T(cn,rr,!1)&&(Br=0),!Br)return u&&p(_.Types_of_parameters_0_and_1_are_incompatible,Gi(FC(n,en)),Gi(FC(a,en))),0;It&=Br}}if(!(c&4)){let en=rne(a)?Se:a.declaration&&cp(a.declaration)?vu(No(a.declaration.symbol)):qo(a);if(en===yt||en===Se)return It;let cn=rne(n)?Se:n.declaration&&cp(n.declaration)?vu(No(n.declaration.symbol)):qo(n),rr=Lf(a);if(rr){let Jt=Lf(n);if(Jt)It&=iXe(Jt,rr,u,p,T);else if(nce(rr))return u&&p(_.Signature_0_must_be_a_type_predicate,ne(n)),0}else It&=c&1&&T(en,cn,!1)||T(cn,en,u),!It&&u&&h&&h(cn,en)}return It}function iXe(n,a,c,u,p){if(n.kind!==a.kind)return c&&(u(_.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard),u(_.Type_predicate_0_is_not_assignable_to_1,kl(n),kl(a))),0;if((n.kind===1||n.kind===3)&&n.parameterIndex!==a.parameterIndex)return c&&(u(_.Parameter_0_is_not_in_the_same_position_as_parameter_1,n.parameterName,a.parameterName),u(_.Type_predicate_0_is_not_assignable_to_1,kl(n),kl(a))),0;let h=n.type===a.type?-1:n.type&&a.type?p(n.type,a.type,c):0;return h===0&&c&&u(_.Type_predicate_0_is_not_assignable_to_1,kl(n),kl(a)),h}function aXe(n,a){let c=tD(n),u=tD(a),p=qo(c),h=qo(u);return h===yt||Bp(h,p,Zu)||Bp(p,h,Zu)?rXe(c,u,!0):!1}function Vne(n){return n!==aa&&n.properties.length===0&&n.callSignatures.length===0&&n.constructSignatures.length===0&&n.indexInfos.length===0}function mh(n){return n.flags&524288?!df(n)&&Vne(R_(n)):n.flags&67108864?!0:n.flags&1048576?vt(n.types,mh):n.flags&2097152?Ji(n.types,mh):!1}function hh(n){return!!(Ur(n)&16&&(n.members&&Vne(n)||n.symbol&&n.symbol.flags&2048&&vy(n.symbol).size===0))}function oXe(n){if(U&&n.flags&1048576){if(!(n.objectFlags&33554432)){let a=n.types;n.objectFlags|=33554432|(a.length>=3&&a[0].flags&32768&&a[1].flags&65536&&vt(a,hh)?67108864:0)}return!!(n.objectFlags&67108864)}return!1}function xC(n){return!!((n.flags&1048576?n.types[0]:n).flags&32768)}function t2e(n){return n.flags&524288&&!df(n)&&Jo(n).length===0&&tu(n).length===1&&!!Cm(n,ae)||n.flags&3145728&&Ji(n.types,t2e)||!1}function jne(n,a,c){let u=n.flags&8?ju(n):n,p=a.flags&8?ju(a):a;if(u===p)return!0;if(u.escapedName!==p.escapedName||!(u.flags&256)||!(p.flags&256))return!1;let h=$a(u)+\",\"+$a(p),T=kb.get(h);if(T!==void 0&&!(!(T&4)&&T&2&&c))return!!(T&1);let k=zn(p);for(let O of Jo(zn(u)))if(O.flags&8){let H=ja(k,O.escapedName);if(!H||!(H.flags&8))return c?(c(_.Property_0_is_missing_in_type_1,fc(O),Ee(gs(p),void 0,64)),kb.set(h,6)):kb.set(h,2),!1}return kb.set(h,1),!0}function lD(n,a,c,u){let p=n.flags,h=a.flags;return h&1||p&131072||n===Tt||h&2&&!(c===x_&&p&1)?!0:h&131072?!1:!!(p&402653316&&h&4||p&128&&p&1024&&h&128&&!(h&1024)&&n.value===a.value||p&296&&h&8||p&256&&p&1024&&h&256&&!(h&1024)&&n.value===a.value||p&2112&&h&64||p&528&&h&16||p&12288&&h&4096||p&32&&h&32&&n.symbol.escapedName===a.symbol.escapedName&&jne(n.symbol,a.symbol,u)||p&1024&&h&1024&&(p&1048576&&h&1048576&&jne(n.symbol,a.symbol,u)||p&2944&&h&2944&&n.value===a.value&&jne(n.symbol,a.symbol,u))||p&32768&&(!U&&!(h&3145728)||h&49152)||p&65536&&(!U&&!(h&3145728)||h&65536)||p&524288&&h&67108864&&!(c===x_&&hh(n)&&!(Ur(n)&8192))||(c===Zu||c===ed)&&(p&1||p&8&&(h&32||h&256&&h&1024)||p&256&&!(p&1024)&&(h&32||h&256&&h&1024&&n.value===a.value)||oXe(a)))}function Bp(n,a,c){if(t0(n)&&(n=n.regularType),t0(a)&&(a=a.regularType),n===a)return!0;if(c!==td){if(c===ed&&!(a.flags&131072)&&lD(a,n,c)||lD(n,a,c))return!0}else if(!((n.flags|a.flags)&61865984)){if(n.flags!==a.flags)return!1;if(n.flags&67358815)return!0}if(n.flags&524288&&a.flags&524288){let u=c.get(Kne(n,a,0,c,!1));if(u!==void 0)return!!(u&1)}return n.flags&469499904||a.flags&469499904?Df(n,a,c,void 0):!1}function n2e(n,a){return Ur(n)&2048&&Fre(a.escapedName)}function mM(n,a){for(;;){let c=t0(n)?n.regularType:Ur(n)&4?n.node?_g(n.target,Ko(n)):Yne(n)||n:n.flags&3145728?sXe(n,a):n.flags&33554432?a?n.baseType:une(n):n.flags&25165824?mg(n,a):n;if(c===n)return c;n=c}}function sXe(n,a){let c=O_(n);if(c!==n)return c;if(n.flags&2097152&&vt(n.types,hh)){let u=Tl(n.types,p=>mM(p,a));if(u!==n.types)return so(u)}return n}function Df(n,a,c,u,p,h,T){var k;let O,H,J,de,Ae,xe=0,tt=0,It=0,Tn=0,un=!1,Nn=0,en,cn;L.assert(c!==td||!u,\"no error reporting in identity checking\");let rr=ji(n,a,3,!!u,p);if(cn&&Br(),un){(k=ai)==null||k.instant(ai.Phase.CheckTypes,\"checkTypeRelatedTo_DepthLimit\",{sourceId:n.id,targetId:a.id,depth:tt,targetDepth:It});let ze=Fe(u||P,_.Excessive_stack_depth_comparing_types_0_and_1,Ee(n),Ee(a));T&&(T.errors||(T.errors=[])).push(ze)}else if(O){if(h){let Ut=h();Ut&&(gle(Ut,O),O=Ut)}let ze;if(p&&u&&!rr&&n.symbol){let Ut=Ai(n.symbol);if(Ut.originatingImport&&!Dd(Ut.originatingImport)&&Df(zn(Ut.target),a,c,void 0)){let Zn=hr(Ut.originatingImport,_.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead);ze=Sn(ze,Zn)}}let dt=Lh(Gn(u),u,O,ze);H&&Ao(dt,...H),T&&(T.errors||(T.errors=[])).push(dt),(!T||!T.skipLogging)&&Lo.add(dt)}return u&&T&&T.skipLogging&&rr===0&&L.assert(!!T.errors,\"missed opportunity to interact with error.\"),rr!==0;function Jt(ze){O=ze.errorInfo,en=ze.lastSkippedInfo,cn=ze.incompatibleStack,Nn=ze.overrideNextErrorInfo,H=ze.relatedInfo}function Cn(){return{errorInfo:O,lastSkippedInfo:en,incompatibleStack:cn?.slice(),overrideNextErrorInfo:Nn,relatedInfo:H?.slice()}}function Rn(ze,dt,Ut,wn,Zn){Nn++,en=void 0,(cn||(cn=[])).push([ze,dt,Ut,wn,Zn])}function Br(){let ze=cn||[];cn=void 0;let dt=en;if(en=void 0,ze.length===1){Hr(...ze[0]),dt&&wa(void 0,...dt);return}let Ut=\"\",wn=[];for(;ze.length;){let[Zn,...fn]=ze.pop();switch(Zn.code){case _.Types_of_property_0_are_incompatible.code:{Ut.indexOf(\"new \")===0&&(Ut=`(${Ut})`);let sr=\"\"+fn[0];Ut.length===0?Ut=`${sr}`:i_(sr,Do(Y))?Ut=`${Ut}.${sr}`:sr[0]===\"[\"&&sr[sr.length-1]===\"]\"?Ut=`${Ut}${sr}`:Ut=`${Ut}[${sr}]`;break}case _.Call_signature_return_types_0_and_1_are_incompatible.code:case _.Construct_signature_return_types_0_and_1_are_incompatible.code:case _.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code:case _.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code:{if(Ut.length===0){let sr=Zn;Zn.code===_.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code?sr=_.Call_signature_return_types_0_and_1_are_incompatible:Zn.code===_.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code&&(sr=_.Construct_signature_return_types_0_and_1_are_incompatible),wn.unshift([sr,fn[0],fn[1]])}else{let sr=Zn.code===_.Construct_signature_return_types_0_and_1_are_incompatible.code||Zn.code===_.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code?\"new \":\"\",Ar=Zn.code===_.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code||Zn.code===_.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code?\"\":\"...\";Ut=`${sr}${Ut}(${Ar})`}break}case _.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target.code:{wn.unshift([_.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target,fn[0],fn[1]]);break}case _.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target.code:{wn.unshift([_.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target,fn[0],fn[1],fn[2]]);break}default:return L.fail(`Unhandled Diagnostic: ${Zn.code}`)}}Ut?Hr(Ut[Ut.length-1]===\")\"?_.The_types_returned_by_0_are_incompatible_between_these_types:_.The_types_of_0_are_incompatible_between_these_types,Ut):wn.shift();for(let[Zn,...fn]of wn){let sr=Zn.elidedInCompatabilityPyramid;Zn.elidedInCompatabilityPyramid=!1,Hr(Zn,...fn),Zn.elidedInCompatabilityPyramid=sr}dt&&wa(void 0,...dt)}function Hr(ze,dt,Ut,wn,Zn){L.assert(!!u),cn&&Br(),!ze.elidedInCompatabilityPyramid&&(O=da(O,ze,dt,Ut,wn,Zn))}function qi(ze){L.assert(!!O),H?H.push(ze):H=[ze]}function wa(ze,dt,Ut){cn&&Br();let[wn,Zn]=Wt(dt,Ut),fn=dt,sr=wn;if(uD(dt)&&!Hne(Ut)&&(fn=ky(dt),L.assert(!to(fn,Ut),\"generalized source shouldn't be assignable\"),sr=lr(fn)),(Ut.flags&8388608&&!(dt.flags&8388608)?Ut.objectType.flags:Ut.flags)&262144&&Ut!==ss&&Ut!==qs){let Ei=bu(Ut),ia;Ei&&(to(fn,Ei)||(ia=to(dt,Ei)))?Hr(_._0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2,ia?wn:sr,Zn,Ee(Ei)):(O=void 0,Hr(_._0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1,Zn,sr))}if(ze)ze===_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1&&Pe&&r2e(dt,Ut).length&&(ze=_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties);else if(c===ed)ze=_.Type_0_is_not_comparable_to_type_1;else if(wn===Zn)ze=_.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated;else if(Pe&&r2e(dt,Ut).length)ze=_.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties;else{if(dt.flags&128&&Ut.flags&1048576){let Ei=uQe(dt,Ut);if(Ei){Hr(_.Type_0_is_not_assignable_to_type_1_Did_you_mean_2,sr,Zn,Ee(Ei));return}}ze=_.Type_0_is_not_assignable_to_type_1}Hr(ze,sr,Zn)}function Xc(ze,dt){let Ut=ci(ze.symbol)?Ee(ze,ze.symbol.valueDeclaration):Ee(ze),wn=ci(dt.symbol)?Ee(dt,dt.symbol.valueDeclaration):Ee(dt);(Ws===ze&&ae===dt||hd===ze&&rt===dt||vc===ze&&Te===dt||iAe()===ze&&j===dt)&&Hr(_._0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible,wn,Ut)}function pf(ze,dt,Ut){return po(ze)?ze.target.readonly&&vB(dt)?(Ut&&Hr(_.The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1,Ee(ze),Ee(dt)),!1):JE(dt):CC(ze)&&vB(dt)?(Ut&&Hr(_.The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1,Ee(ze),Ee(dt)),!1):po(dt)?_f(ze):!0}function Hd(ze,dt,Ut){return ji(ze,dt,3,Ut)}function ji(ze,dt,Ut=3,wn=!1,Zn,fn=0){if(ze.flags&524288&&dt.flags&134348796)return c===ed&&!(dt.flags&131072)&&lD(dt,ze,c)||lD(ze,dt,c,wn?Hr:void 0)?-1:(wn&&In(ze,dt,ze,dt,Zn),0);let sr=mM(ze,!1),Ar=mM(dt,!0);if(sr===Ar)return-1;if(c===td)return sr.flags!==Ar.flags?0:sr.flags&67358815?-1:(qn(sr,Ar),Mn(sr,Ar,!1,0,Ut));if(sr.flags&262144&&VE(sr)===Ar)return-1;if(sr.flags&470302716&&Ar.flags&1048576){let Ei=Ar.types,ia=Ei.length===2&&Ei[0].flags&98304?Ei[1]:Ei.length===3&&Ei[0].flags&98304&&Ei[1].flags&98304?Ei[2]:void 0;if(ia&&!(ia.flags&98304)&&(Ar=mM(ia,!0),sr===Ar))return-1}if(c===ed&&!(Ar.flags&131072)&&lD(Ar,sr,c)||lD(sr,Ar,c,wn?Hr:void 0))return-1;if(sr.flags&469499904||Ar.flags&469499904){if(!(fn&2)&&Xv(sr)&&Ur(sr)&8192&&ga(sr,Ar,wn))return wn&&wa(Zn,sr,dt.aliasSymbol?dt:Ar),0;let ia=(c!==ed||N_(sr))&&!(fn&2)&&sr.flags&136970236&&sr!==ka&&Ar.flags&2621440&&a2e(Ar)&&(Jo(sr).length>0||EU(sr)),Aa=!!(Ur(sr)&2048);if(ia&&!lXe(sr,Ar,Aa)){if(wn){let Oa=Ee(ze.aliasSymbol?ze:sr),mo=Ee(dt.aliasSymbol?dt:Ar),co=xa(sr,0),as=xa(sr,1);co.length>0&&ji(qo(co[0]),Ar,1,!1)||as.length>0&&ji(qo(as[0]),Ar,1,!1)?Hr(_.Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it,Oa,mo):Hr(_.Type_0_has_no_properties_in_common_with_type_1,Oa,mo)}return 0}qn(sr,Ar);let Zr=sr.flags&1048576&&sr.types.length<4&&!(Ar.flags&1048576)||Ar.flags&1048576&&Ar.types.length<4&&!(sr.flags&469499904)?ko(sr,Ar,wn,fn):Mn(sr,Ar,wn,fn,Ut);if(Zr)return Zr}return wn&&In(ze,dt,sr,Ar,Zn),0}function In(ze,dt,Ut,wn,Zn){var fn,sr;let Ar=!!Yne(ze),Ei=!!Yne(dt);Ut=ze.aliasSymbol||Ar?ze:Ut,wn=dt.aliasSymbol||Ei?dt:wn;let ia=Nn>0;if(ia&&Nn--,Ut.flags&524288&&wn.flags&524288){let Aa=O;pf(Ut,wn,!0),O!==Aa&&(ia=!!O)}if(Ut.flags&524288&&wn.flags&134348796)Xc(Ut,wn);else if(Ut.symbol&&Ut.flags&524288&&ka===Ut)Hr(_.The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead);else if(Ur(Ut)&2048&&wn.flags&2097152){let Aa=wn.types,Ra=s0(Qd.IntrinsicAttributes,u),Zr=s0(Qd.IntrinsicClassAttributes,u);if(!Ro(Ra)&&!Ro(Zr)&&(ya(Aa,Ra)||ya(Aa,Zr)))return}else O=Xte(O,dt);if(!Zn&&ia){en=[Ut,wn];return}if(wa(Zn,Ut,wn),Ut.flags&262144&&((sr=(fn=Ut.symbol)==null?void 0:fn.declarations)!=null&&sr[0])&&!VE(Ut)){let Aa=uB(Ut);if(Aa.constraint=Oi(wn,n0(Ut,Aa)),$k(Aa)){let Ra=Ee(wn,Ut.symbol.declarations[0]);qi(hr(Ut.symbol.declarations[0],_.This_type_parameter_might_need_an_extends_0_constraint,Ra))}}}function qn(ze,dt){if(ai&&ze.flags&3145728&&dt.flags&3145728){let Ut=ze,wn=dt;if(Ut.objectFlags&wn.objectFlags&32768)return;let Zn=Ut.types.length,fn=wn.types.length;Zn*fn>1e6&&ai.instant(ai.Phase.CheckTypes,\"traceUnionsOrIntersectionsTooLarge_DepthLimit\",{sourceId:ze.id,sourceSize:Zn,targetId:dt.id,targetSize:fn,pos:u?.pos,end:u?.end})}}function Mi(ze,dt){return Gr(ou(ze,(wn,Zn)=>{var fn;Zn=Eu(Zn);let sr=Zn.flags&3145728?qte(Zn,dt):qb(Zn,dt),Ar=sr&&zn(sr)||((fn=jx(Zn,dt))==null?void 0:fn.type)||Oe;return Sn(wn,Ar)},void 0)||Je)}function ga(ze,dt,Ut){var wn;if(!NM(dt)||!ge&&Ur(dt)&4096)return!1;let Zn=!!(Ur(ze)&2048);if((c===Zu||c===ed)&&(gD(ka,dt)||!Zn&&mh(dt)))return!1;let fn=dt,sr;dt.flags&1048576&&(fn=mke(ze,dt,ji)||_it(dt),sr=fn.flags&1048576?fn.types:[fn]);for(let Ar of Jo(ze))if(Bi(Ar,ze.symbol)&&!n2e(ze,Ar)){if(!Vre(fn,Ar.escapedName,Zn)){if(Ut){let Ei=jc(fn,NM);if(!u)return L.fail();if(K0(u)||Au(u)||Au(u.parent)){Ar.valueDeclaration&&Sp(Ar.valueDeclaration)&&Gn(u)===Gn(Ar.valueDeclaration.name)&&(u=Ar.valueDeclaration.name);let ia=E(Ar),Aa=VCe(ia,Ei),Ra=Aa?E(Aa):void 0;Ra?Hr(_.Property_0_does_not_exist_on_type_1_Did_you_mean_2,ia,Ee(Ei),Ra):Hr(_.Property_0_does_not_exist_on_type_1,ia,Ee(Ei))}else{let ia=((wn=ze.symbol)==null?void 0:wn.declarations)&&Sl(ze.symbol.declarations),Aa;if(Ar.valueDeclaration&&jn(Ar.valueDeclaration,Ra=>Ra===ia)&&Gn(ia)===Gn(u)){let Ra=Ar.valueDeclaration;L.assertNode(Ra,Og),u=Ra;let Zr=Ra.name;Re(Zr)&&(Aa=Xre(Zr,Ei))}Aa!==void 0?Hr(_.Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2,E(Ar),Ee(Ei),Aa):Hr(_.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1,E(Ar),Ee(Ei))}}return!0}if(sr&&!ji(zn(Ar),Mi(sr,Ar.escapedName),3,Ut))return Ut&&Rn(_.Types_of_property_0_are_incompatible,E(Ar)),!0}return!1}function Bi(ze,dt){return ze.valueDeclaration&&dt.valueDeclaration&&ze.valueDeclaration.parent===dt.valueDeclaration}function ko(ze,dt,Ut,wn){if(ze.flags&1048576)return c===ed?Tu(ze,dt,Ut&&!(ze.flags&134348796),wn):he(ze,dt,Ut&&!(ze.flags&134348796),wn);if(dt.flags&1048576)return Xs(EM(ze),dt,Ut&&!(ze.flags&134348796)&&!(dt.flags&134348796));if(dt.flags&2097152)return no(ze,dt,Ut,2);if(c===ed&&dt.flags&134348796){let Zn=Tl(ze.types,fn=>fn.flags&465829888?bu(fn)||ue:fn);if(Zn!==ze.types){if(ze=so(Zn),ze.flags&131072)return 0;if(!(ze.flags&2097152))return ji(ze,dt,1,!1)||ji(dt,ze,1,!1)}}return Tu(ze,dt,!1,1)}function us(ze,dt){let Ut=-1,wn=ze.types;for(let Zn of wn){let fn=Xs(Zn,dt,!1);if(!fn)return 0;Ut&=fn}return Ut}function Xs(ze,dt,Ut){let wn=dt.types;if(dt.flags&1048576){if(Qb(wn,ze))return-1;let Zn=O2e(dt,ze);if(Zn){let fn=ji(ze,Zn,2,!1);if(fn)return fn}}for(let Zn of wn){let fn=ji(ze,Zn,2,!1);if(fn)return fn}if(Ut){let Zn=i2e(ze,dt,ji);Zn&&ji(ze,Zn,2,!0)}return 0}function no(ze,dt,Ut,wn){let Zn=-1,fn=dt.types;for(let sr of fn){let Ar=ji(ze,sr,2,Ut,void 0,wn);if(!Ar)return 0;Zn&=Ar}return Zn}function Tu(ze,dt,Ut,wn){let Zn=ze.types;if(ze.flags&1048576&&Qb(Zn,dt))return-1;let fn=Zn.length;for(let sr=0;sr<fn;sr++){let Ar=ji(Zn[sr],dt,1,Ut&&sr===fn-1,void 0,wn);if(Ar)return Ar}return 0}function et(ze,dt){return ze.flags&1048576&&dt.flags&1048576&&!(ze.types[0].flags&32768)&&dt.types[0].flags&32768?DC(dt,-32769):dt}function he(ze,dt,Ut,wn){let Zn=-1,fn=ze.types,sr=et(ze,dt);for(let Ar=0;Ar<fn.length;Ar++){let Ei=fn[Ar];if(sr.flags&1048576&&fn.length>=sr.types.length&&fn.length%sr.types.length===0){let Aa=ji(Ei,sr.types[Ar%sr.types.length],3,!1,void 0,wn);if(Aa){Zn&=Aa;continue}}let ia=ji(Ei,dt,1,Ut,void 0,wn);if(!ia)return 0;Zn&=ia}return Zn}function Bn(ze=Je,dt=Je,Ut=Je,wn,Zn){if(ze.length!==dt.length&&c===td)return 0;let fn=ze.length<=dt.length?ze.length:dt.length,sr=-1;for(let Ar=0;Ar<fn;Ar++){let Ei=Ar<Ut.length?Ut[Ar]:1,ia=Ei&7;if(ia!==4){let Aa=ze[Ar],Ra=dt[Ar],Zr=-1;if(Ei&8?Zr=c===td?ji(Aa,Ra,3,!1):sD(Aa,Ra):ia===1?Zr=ji(Aa,Ra,3,wn,void 0,Zn):ia===2?Zr=ji(Ra,Aa,3,wn,void 0,Zn):ia===3?(Zr=ji(Ra,Aa,3,!1),Zr||(Zr=ji(Aa,Ra,3,wn,void 0,Zn))):(Zr=ji(Aa,Ra,3,wn,void 0,Zn),Zr&&(Zr&=ji(Ra,Aa,3,wn,void 0,Zn))),!Zr)return 0;sr&=Zr}}return sr}function Mn(ze,dt,Ut,wn,Zn){var fn,sr,Ar;if(un)return 0;let Ei=Kne(ze,dt,wn,c,!1),ia=c.get(Ei);if(ia!==void 0&&!(Ut&&ia&2&&!(ia&4))){if(Qr){let co=ia&24;co&8&&Oi(ze,gn),co&16&&Oi(ze,Wi)}return ia&1?-1:0}if(!J)J=[],de=[],Ae=[];else{let co=Ei.startsWith(\"*\")?Kne(ze,dt,wn,c,!0):void 0;for(let as=0;as<xe;as++)if(Ei===J[as]||co&&co===J[as])return 3;if(tt===100||It===100)return un=!0,0}let Aa=xe;J[xe]=Ei,xe++;let Ra=Tn;Zn&1&&(de[tt]=ze,tt++,!(Tn&1)&&yM(ze,de,tt)&&(Tn|=1)),Zn&2&&(Ae[It]=dt,It++,!(Tn&2)&&yM(dt,Ae,It)&&(Tn|=2));let Zr,Oa=0;Qr&&(Zr=Qr,Qr=co=>(Oa|=co?16:8,Zr(co)));let mo;if(Tn===3?((fn=ai)==null||fn.instant(ai.Phase.CheckTypes,\"recursiveTypeRelatedTo_DepthLimit\",{sourceId:ze.id,sourceIdStack:de.map(co=>co.id),targetId:dt.id,targetIdStack:Ae.map(co=>co.id),depth:tt,targetDepth:It}),mo=3):((sr=ai)==null||sr.push(ai.Phase.CheckTypes,\"structuredTypeRelatedTo\",{sourceId:ze.id,targetId:dt.id}),mo=or(ze,dt,Ut,wn),(Ar=ai)==null||Ar.pop()),Qr&&(Qr=Zr),Zn&1&&tt--,Zn&2&&It--,Tn=Ra,mo){if(mo===-1||tt===0&&It===0){if(mo===-1||mo===3)for(let co=Aa;co<xe;co++)c.set(J[co],1|Oa);xe=Aa}}else c.set(Ei,(Ut?4:0)|2|Oa),xe=Aa;return mo}function or(ze,dt,Ut,wn){let Zn=Cn(),fn=_r(ze,dt,Ut,wn,Zn);if(c!==td){if(!fn&&(ze.flags&2097152||ze.flags&262144&&dt.flags&1048576)){let sr=jJe(ze.flags&2097152?ze.types:[ze],!!(dt.flags&1048576));sr&&Im(sr,Ar=>Ar!==ze)&&(fn=ji(sr,dt,1,!1,void 0,wn))}fn&&!(wn&2)&&dt.flags&2097152&&!Zb(dt)&&ze.flags&2621440?(fn&=Ft(ze,dt,Ut,void 0,!1,0),fn&&Xv(ze)&&Ur(ze)&8192&&(fn&=Bo(ze,dt,!1,Ut,0))):fn&&rB(dt)&&!JE(dt)&&ze.flags&2097152&&Eu(ze).flags&3670016&&!vt(ze.types,sr=>sr===dt||!!(Ur(sr)&262144))&&(fn&=Ft(ze,dt,Ut,void 0,!0,wn))}return fn&&Jt(Zn),fn}function _r(ze,dt,Ut,wn,Zn){let fn,sr,Ar=!1,Ei=ze.flags,ia=dt.flags;if(c===td){if(Ei&3145728){let Zr=us(ze,dt);return Zr&&(Zr&=us(dt,ze)),Zr}if(Ei&4194304)return ji(ze.type,dt.type,3,!1);if(Ei&8388608&&(fn=ji(ze.objectType,dt.objectType,3,!1))&&(fn&=ji(ze.indexType,dt.indexType,3,!1))||Ei&16777216&&ze.root.isDistributive===dt.root.isDistributive&&(fn=ji(ze.checkType,dt.checkType,3,!1))&&(fn&=ji(ze.extendsType,dt.extendsType,3,!1))&&(fn&=ji(Hv(ze),Hv(dt),3,!1))&&(fn&=ji(Wv(ze),Wv(dt),3,!1))||Ei&33554432&&(fn=ji(ze.baseType,dt.baseType,3,!1))&&(fn&=ji(ze.constraint,dt.constraint,3,!1)))return fn;if(!(Ei&524288))return 0}else if(Ei&3145728||ia&3145728){if(fn=ko(ze,dt,Ut,wn))return fn;if(!(Ei&465829888||Ei&524288&&ia&1048576||Ei&2097152&&ia&467402752))return 0}if(Ei&17301504&&ze.aliasSymbol&&ze.aliasTypeArguments&&ze.aliasSymbol===dt.aliasSymbol&&!(hB(ze)||hB(dt))){let Zr=o2e(ze.aliasSymbol);if(Zr===Je)return 1;let Oa=Ai(ze.aliasSymbol).typeParameters,mo=Mp(Oa),co=Sy(ze.aliasTypeArguments,Oa,mo,Yn(ze.aliasSymbol.valueDeclaration)),as=Sy(dt.aliasTypeArguments,Oa,mo,Yn(ze.aliasSymbol.valueDeclaration)),Ul=Ra(co,as,Zr,wn);if(Ul!==void 0)return Ul}if(_2e(ze)&&!ze.target.readonly&&(fn=ji(Ko(ze)[0],dt,1))||_2e(dt)&&(dt.target.readonly||vB(bu(ze)||ze))&&(fn=ji(ze,Ko(dt)[0],2)))return fn;if(ia&262144){if(Ur(ze)&32&&!ze.declaration.nameType&&ji(Gp(dt),rp(ze),3)&&!(Pp(ze)&4)){let Zr=_h(ze),Oa=od(dt,w_(ze));if(fn=ji(Zr,Oa,3,Ut))return fn}if(c===ed&&Ei&262144){let Zr=eu(ze);if(Zr&&$k(ze))for(;Zr&&yh(Zr,Oa=>!!(Oa.flags&262144));){if(fn=ji(Zr,dt,1,!1))return fn;Zr=eu(Zr)}return 0}}else if(ia&4194304){let Zr=dt.type;if(Ei&4194304&&(fn=ji(Zr,ze.type,3,!1)))return fn;if(po(Zr)){if(fn=ji(ze,_Ae(Zr),2,Ut))return fn}else{let Oa=jte(Zr);if(Oa){if(ji(ze,Gp(Oa,dt.stringsOnly),2,Ut)===-1)return-1}else if(df(Zr)){let mo=by(Zr),co=rp(Zr),as;if(mo&&Yk(Zr)){let Ul=Eu(yC(Zr)),F_=[];Ute(Ul,8576,!1,Dm=>void F_.push(Oi(mo,oD(Zr.mapper,w_(Zr),Dm)))),as=Gr([...F_,mo])}else as=mo||co;if(ji(ze,as,2,Ut)===-1)return-1}}}else if(ia&8388608){if(Ei&8388608){if((fn=ji(ze.objectType,dt.objectType,3,Ut))&&(fn&=ji(ze.indexType,dt.indexType,3,Ut)),fn)return fn;Ut&&(sr=O)}if(c===Zu||c===ed){let Zr=dt.objectType,Oa=dt.indexType,mo=bu(Zr)||Zr,co=bu(Oa)||Oa;if(!Zb(mo)&&!jv(co)){let as=4|(mo!==Zr?2:0),Ul=Ay(mo,co,as);if(Ul){if(Ut&&sr&&Jt(Zn),fn=ji(ze,Ul,2,Ut,void 0,wn))return fn;Ut&&sr&&O&&(O=Aa([sr])<=Aa([O])?sr:O)}}}Ut&&(sr=void 0)}else if(df(dt)&&c!==td){let Zr=!!dt.declaration.nameType,Oa=_h(dt),mo=Pp(dt);if(!(mo&8)){if(!Zr&&Oa.flags&8388608&&Oa.objectType===ze&&Oa.indexType===w_(dt))return-1;if(!df(ze)){let co=Zr?by(dt):rp(dt),as=Gp(ze,void 0,!0),Ul=mo&4,F_=Ul?QP(co,as):void 0;if(Ul?!(F_.flags&131072):ji(co,as,3)){let Dm=_h(dt),$v=w_(dt),U1=DC(Dm,-98305);if(!Zr&&U1.flags&8388608&&U1.indexType===$v){if(fn=ji(ze,U1.objectType,2,Ut))return fn}else{let KC=Zr?F_||co:F_?so([F_,$v]):$v,Hp=od(ze,KC);if(fn=ji(Hp,Dm,3,Ut))return fn}}sr=O,Jt(Zn)}}}else if(ia&16777216){if(yM(dt,Ae,It,10))return 3;let Zr=dt;if(!Zr.root.inferTypeParameters&&!Tqe(Zr.root)){let Oa=!to(dB(Zr.checkType),dB(Zr.extendsType)),mo=!Oa&&to(zE(Zr.checkType),zE(Zr.extendsType));if((fn=Oa?-1:ji(ze,Hv(Zr),2,!1,void 0,wn))&&(fn&=mo?-1:ji(ze,Wv(Zr),2,!1,void 0,wn),fn))return fn}}else if(ia&134217728){if(Ei&134217728){if(c===ed)return XXe(ze,dt)?0:-1;Oi(ze,Wi)}if(_re(ze,dt))return-1}else if(dt.flags&268435456&&!(ze.flags&268435456)&&fre(ze,dt))return-1;if(Ei&8650752){if(!(Ei&8388608&&ia&8388608)){let Zr=VE(ze)||ue;if(fn=ji(Zr,dt,1,!1,void 0,wn))return fn;if(fn=ji(uf(Zr,ze),dt,1,Ut&&Zr!==ue&&!(ia&Ei&262144),void 0,wn))return fn;if(Jte(ze)){let Oa=VE(ze.indexType);if(Oa&&(fn=ji(od(ze.objectType,Oa),dt,1,Ut)))return fn}}}else if(Ei&4194304){if(fn=ji(Si,dt,1,Ut))return fn}else if(Ei&134217728&&!(ia&524288)){if(!(ia&134217728)){let Zr=bu(ze);if(Zr&&Zr!==ze&&(fn=ji(Zr,dt,1,Ut)))return fn}}else if(Ei&268435456)if(ia&268435456){if(ze.symbol!==dt.symbol)return 0;if(fn=ji(ze.type,dt.type,3,Ut))return fn}else{let Zr=bu(ze);if(Zr&&(fn=ji(Zr,dt,1,Ut)))return fn}else if(Ei&16777216){if(yM(ze,de,tt,10))return 3;if(ia&16777216){let Oa=ze.root.inferTypeParameters,mo=ze.extendsType,co;if(Oa){let as=_D(Oa,void 0,0,Hd);gh(as.inferences,dt.extendsType,mo,1536),mo=Oi(mo,as.mapper),co=as.mapper}if(ph(mo,dt.extendsType)&&(ji(ze.checkType,dt.checkType,3)||ji(dt.checkType,ze.checkType,3))&&((fn=ji(Oi(Hv(ze),co),Hv(dt),3,Ut))&&(fn&=ji(Wv(ze),Wv(dt),3,Ut)),fn))return fn}else{let Oa=$k(ze)?Dxe(ze):void 0;if(Oa&&(fn=ji(Oa,dt,1,Ut)))return fn}let Zr=Hte(ze);if(Zr&&(fn=ji(Zr,dt,1,Ut)))return fn}else{if(c!==hm&&c!==x_&&PJe(dt)&&mh(ze))return-1;if(df(dt))return df(ze)&&(fn=ua(ze,dt,Ut))?fn:0;let Zr=!!(Ei&134348796);if(c!==td)ze=Eu(ze),Ei=ze.flags;else if(df(ze))return 0;if(Ur(ze)&4&&Ur(dt)&4&&ze.target===dt.target&&!po(ze)&&!(hB(ze)||hB(dt))){if(bB(ze))return-1;let Oa=zne(ze.target);if(Oa===Je)return 1;let mo=Ra(Ko(ze),Ko(dt),Oa,wn);if(mo!==void 0)return mo}else{if(CC(dt)?JE(ze):_f(dt)&&po(ze)&&!ze.target.readonly)return c!==td?ji(fg(ze,rt)||Se,fg(dt,rt)||Se,3,Ut):0;if((c===hm||c===x_)&&mh(dt)&&Ur(dt)&8192&&!mh(ze))return 0}if(Ei&2621440&&ia&524288){let Oa=Ut&&O===Zn.errorInfo&&!Zr;if(fn=Ft(ze,dt,Oa,void 0,!1,wn),fn&&(fn&=Un(ze,dt,0,Oa,wn),fn&&(fn&=Un(ze,dt,1,Oa,wn),fn&&(fn&=Bo(ze,dt,Zr,Oa,wn)))),Ar&&fn)O=sr||O||Zn.errorInfo;else if(fn)return fn}if(Ei&2621440&&ia&1048576){let Oa=DC(dt,36175872);if(Oa.flags&1048576){let mo=_i(ze,Oa);if(mo)return mo}}}return 0;function Aa(Zr){return Zr?ou(Zr,(Oa,mo)=>Oa+1+Aa(mo.next),0):0}function Ra(Zr,Oa,mo,co){if(fn=Bn(Zr,Oa,mo,Ut,co))return fn;if(vt(mo,Ul=>!!(Ul&24))){sr=void 0,Jt(Zn);return}let as=Oa&&uXe(Oa,mo);if(Ar=!as,mo!==Je&&!as){if(Ar&&!(Ut&&vt(mo,Ul=>(Ul&7)===0)))return 0;sr=O,Jt(Zn)}}}function ua(ze,dt,Ut){if(c===ed||(c===td?Pp(ze)===Pp(dt):Vte(ze)<=Vte(dt))){let Zn,fn=rp(dt),sr=Oi(rp(ze),Vte(ze)<0?gn:Wi);if(Zn=ji(fn,sr,3,Ut)){let Ar=Wu([w_(ze)],[w_(dt)]);if(Oi(by(ze),Ar)===Oi(by(dt),Ar))return Zn&ji(Oi(_h(ze),Ar),_h(dt),3,Ut)}}return 0}function _i(ze,dt){var Ut;let wn=Jo(ze),Zn=R2e(wn,dt);if(!Zn)return 0;let fn=1;for(let Ra of Zn)if(fn*=SYe(Gv(Ra)),fn>25)return(Ut=ai)==null||Ut.instant(ai.Phase.CheckTypes,\"typeRelatedToDiscriminatedType_DepthLimit\",{sourceId:ze.id,targetId:dt.id,numCombinations:fn}),0;let sr=new Array(Zn.length),Ar=new Set;for(let Ra=0;Ra<Zn.length;Ra++){let Zr=Zn[Ra],Oa=Gv(Zr);sr[Ra]=Oa.flags&1048576?Oa.types:[Oa],Ar.add(Zr.escapedName)}let Ei=Rae(sr),ia=[];for(let Ra of Ei){let Zr=!1;e:for(let Oa of dt.types){for(let mo=0;mo<Zn.length;mo++){let co=Zn[mo],as=ja(Oa,co.escapedName);if(!as)continue e;if(co===as)continue;if(!Ct(ze,dt,co,as,F_=>Ra[mo],!1,0,U||c===ed))continue e}Of(ia,Oa,Zv),Zr=!0}if(!Zr)return 0}let Aa=-1;for(let Ra of ia)if(Aa&=Ft(ze,Ra,!1,Ar,!1,0),Aa&&(Aa&=Un(ze,Ra,0,!1,0),Aa&&(Aa&=Un(ze,Ra,1,!1,0),Aa&&!(po(ze)&&po(Ra))&&(Aa&=Bo(ze,Ra,!1,!1,0)))),!Aa)return Aa;return Aa}function ur(ze,dt){if(!dt||ze.length===0)return ze;let Ut;for(let wn=0;wn<ze.length;wn++)dt.has(ze[wn].escapedName)?Ut||(Ut=ze.slice(0,wn)):Ut&&Ut.push(ze[wn]);return Ut||ze}function st(ze,dt,Ut,wn,Zn){let fn=U&&!!(ac(dt)&48),sr=ao(Gv(dt),!1,fn),Ar=Ut(ze);return ji(Ar,sr,3,wn,void 0,Zn)}function Ct(ze,dt,Ut,wn,Zn,fn,sr,Ar){let Ei=Ef(Ut),ia=Ef(wn);if(Ei&8||ia&8){if(Ut.valueDeclaration!==wn.valueDeclaration)return fn&&(Ei&8&&ia&8?Hr(_.Types_have_separate_declarations_of_a_private_property_0,E(wn)):Hr(_.Property_0_is_private_in_type_1_but_not_in_type_2,E(wn),Ee(Ei&8?ze:dt),Ee(Ei&8?dt:ze))),0}else if(ia&16){if(!mXe(Ut,wn))return fn&&Hr(_.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2,E(wn),Ee(N1(Ut)||ze),Ee(N1(wn)||dt)),0}else if(Ei&16)return fn&&Hr(_.Property_0_is_protected_in_type_1_but_public_in_type_2,E(wn),Ee(ze),Ee(dt)),0;if(c===x_&&M_(Ut)&&!M_(wn))return 0;let Aa=st(Ut,wn,Zn,fn,sr);return Aa?!Ar&&Ut.flags&16777216&&wn.flags&106500&&!(wn.flags&16777216)?(fn&&Hr(_.Property_0_is_optional_in_type_1_but_required_in_type_2,E(wn),Ee(ze),Ee(dt)),0):Aa:(fn&&Rn(_.Types_of_property_0_are_incompatible,E(wn)),0)}function Bt(ze,dt,Ut,wn){let Zn=!1;if(Ut.valueDeclaration&&zl(Ut.valueDeclaration)&&pi(Ut.valueDeclaration.name)&&ze.symbol&&ze.symbol.flags&32){let sr=Ut.valueDeclaration.name.escapedText,Ar=hR(ze.symbol,sr);if(Ar&&ja(ze,Ar)){let Ei=D.getDeclarationName(ze.symbol.valueDeclaration),ia=D.getDeclarationName(dt.symbol.valueDeclaration);Hr(_.Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2,Cf(sr),Cf(Ei.escapedText===\"\"?nN:Ei),Cf(ia.escapedText===\"\"?nN:ia));return}}let fn=lo(lre(ze,dt,wn,!1));if((!p||p.code!==_.Class_0_incorrectly_implements_interface_1.code&&p.code!==_.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass.code)&&(Zn=!0),fn.length===1){let sr=E(Ut,void 0,0,20);Hr(_.Property_0_is_missing_in_type_1_but_required_in_type_2,sr,...Wt(ze,dt)),Fn(Ut.declarations)&&qi(hr(Ut.declarations[0],_._0_is_declared_here,sr)),Zn&&O&&Nn++}else pf(ze,dt,!1)&&(fn.length>5?Hr(_.Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more,Ee(ze),Ee(dt),on(fn.slice(0,4),sr=>E(sr)).join(\", \"),fn.length-4):Hr(_.Type_0_is_missing_the_following_properties_from_type_1_Colon_2,Ee(ze),Ee(dt),on(fn,sr=>E(sr)).join(\", \")),Zn&&O&&Nn++)}function Ft(ze,dt,Ut,wn,Zn,fn){if(c===td)return hn(ze,dt,wn);let sr=-1;if(po(dt)){if(JE(ze)){if(!dt.target.readonly&&(CC(ze)||po(ze)&&ze.target.readonly))return 0;let Ra=Vv(ze),Zr=Vv(dt),Oa=po(ze)?ze.target.combinedFlags&4:4,mo=dt.target.combinedFlags&4,co=po(ze)?ze.target.minLength:0,as=dt.target.minLength;if(!Oa&&Ra<as)return Ut&&Hr(_.Source_has_0_element_s_but_target_requires_1,Ra,as),0;if(!mo&&Zr<co)return Ut&&Hr(_.Source_has_0_element_s_but_target_allows_only_1,co,Zr),0;if(!mo&&(Oa||Zr<Ra))return Ut&&(co<as?Hr(_.Target_requires_0_element_s_but_source_may_have_fewer,as):Hr(_.Target_allows_only_0_element_s_but_source_may_have_more,Zr)),0;let Ul=Ko(ze),F_=Ko(dt),Dm=VKe(dt.target,11),$v=sM(dt.target,11),U1=dt.target.hasRestElement,KC=!!wn;for(let Hp=0;Hp<Ra;Hp++){let cA=po(ze)?ze.target.elementFlags[Hp]:4,lA=Ra-1-Hp,iT=U1&&Hp>=Dm?Zr-1-Math.min(lA,$v):Hp,sd=dt.target.elementFlags[iT];if(sd&8&&!(cA&8))return Ut&&Hr(_.Source_provides_no_match_for_variadic_element_at_position_0_in_target,iT),0;if(cA&8&&!(sd&12))return Ut&&Hr(_.Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target,Hp,iT),0;if(sd&1&&!(cA&1))return Ut&&Hr(_.Source_provides_no_match_for_required_element_at_position_0_in_target,iT),0;if(KC&&((cA&12||sd&12)&&(KC=!1),KC&&wn?.has(\"\"+Hp)))continue;let bt=KE(Ul[Hp],!!(cA&sd&2)),cr=F_[iT],oi=cA&8&&sd&4?nu(cr):KE(cr,!!(sd&2)),Jr=ji(bt,oi,3,Ut,void 0,fn);if(!Jr)return Ut&&(Zr>1||Ra>1)&&(U1&&Hp>=Dm&&lA>=$v&&Dm!==Ra-$v-1?Rn(_.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target,Dm,Ra-$v-1,iT):Rn(_.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target,Hp,iT)),0;sr&=Jr}return sr}if(dt.target.combinedFlags&12)return 0}let Ar=(c===hm||c===x_)&&!Xv(ze)&&!bB(ze)&&!po(ze),Ei=ure(ze,dt,Ar,!1);if(Ei)return Ut&&yi(ze,dt)&&Bt(ze,dt,Ei,Ar),0;if(Xv(dt)){for(let Ra of ur(Jo(ze),wn))if(!qb(dt,Ra.escapedName)&&!(zn(Ra).flags&32768))return Ut&&Hr(_.Property_0_does_not_exist_on_type_1,E(Ra),Ee(dt)),0}let ia=Jo(dt),Aa=po(ze)&&po(dt);for(let Ra of ur(ia,wn)){let Zr=Ra.escapedName;if(!(Ra.flags&4194304)&&(!Aa||Wm(Zr)||Zr===\"length\")&&(!Zn||Ra.flags&16777216)){let Oa=ja(ze,Zr);if(Oa&&Oa!==Ra){let mo=Ct(ze,dt,Oa,Ra,Gv,Ut,fn,c===ed);if(!mo)return 0;sr&=mo}}}return sr}function hn(ze,dt,Ut){if(!(ze.flags&524288&&dt.flags&524288))return 0;let wn=ur(Ey(ze),Ut),Zn=ur(Ey(dt),Ut);if(wn.length!==Zn.length)return 0;let fn=-1;for(let sr of wn){let Ar=qb(dt,sr.escapedName);if(!Ar)return 0;let Ei=qne(sr,Ar,ji);if(!Ei)return 0;fn&=Ei}return fn}function Un(ze,dt,Ut,wn,Zn){var fn,sr;if(c===td)return Sr(ze,dt,Ut);if(dt===aa||ze===aa)return-1;let Ar=ze.symbol&&cp(ze.symbol.valueDeclaration),Ei=dt.symbol&&cp(dt.symbol.valueDeclaration),ia=xa(ze,Ar&&Ut===1?0:Ut),Aa=xa(dt,Ei&&Ut===1?0:Ut);if(Ut===1&&ia.length&&Aa.length){let co=!!(ia[0].flags&4),as=!!(Aa[0].flags&4);if(co&&!as)return wn&&Hr(_.Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type),0;if(!Bl(ia[0],Aa[0],wn))return 0}let Ra=-1,Zr=Ut===1?Xt:Di,Oa=Ur(ze),mo=Ur(dt);if(Oa&64&&mo&64&&ze.symbol===dt.symbol||Oa&4&&mo&4&&ze.target===dt.target)for(let co=0;co<Aa.length;co++){let as=er(ia[co],Aa[co],!0,wn,Zn,Zr(ia[co],Aa[co]));if(!as)return 0;Ra&=as}else if(ia.length===1&&Aa.length===1){let co=c===ed||!!Y.noStrictGenericChecks,as=Vo(ia),Ul=Vo(Aa);if(Ra=er(as,Ul,co,wn,Zn,Zr(as,Ul)),!Ra&&wn&&Ut===1&&Oa&mo&&(((fn=Ul.declaration)==null?void 0:fn.kind)===173||((sr=as.declaration)==null?void 0:sr.kind)===173)){let F_=Dm=>ne(Dm,void 0,262144,Ut);return Hr(_.Type_0_is_not_assignable_to_type_1,F_(as),F_(Ul)),Hr(_.Types_of_construct_signatures_are_incompatible),Ra}}else e:for(let co of Aa){let as=Cn(),Ul=wn;for(let F_ of ia){let Dm=er(F_,co,!0,Ul,Zn,Zr(F_,co));if(Dm){Ra&=Dm,Jt(as);continue e}Ul=!1}return Ul&&Hr(_.Type_0_provides_no_match_for_the_signature_1,Ee(ze),ne(co,void 0,void 0,Ut)),0}return Ra}function yi(ze,dt){let Ut=nM(ze,0),wn=nM(ze,1),Zn=Ey(ze);return(Ut.length||wn.length)&&!Zn.length?!!(xa(dt,0).length&&Ut.length||xa(dt,1).length&&wn.length):!0}function Di(ze,dt){return ze.parameters.length===0&&dt.parameters.length===0?(Ut,wn)=>Rn(_.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1,Ee(Ut),Ee(wn)):(Ut,wn)=>Rn(_.Call_signature_return_types_0_and_1_are_incompatible,Ee(Ut),Ee(wn))}function Xt(ze,dt){return ze.parameters.length===0&&dt.parameters.length===0?(Ut,wn)=>Rn(_.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1,Ee(Ut),Ee(wn)):(Ut,wn)=>Rn(_.Construct_signature_return_types_0_and_1_are_incompatible,Ee(Ut),Ee(wn))}function er(ze,dt,Ut,wn,Zn,fn){let sr=c===hm?16:c===x_?24:0;return Une(Ut?tD(ze):ze,Ut?tD(dt):dt,sr,wn,Hr,fn,Ar,Wi);function Ar(Ei,ia,Aa){return ji(Ei,ia,3,Aa,void 0,Zn)}}function Sr(ze,dt,Ut){let wn=xa(ze,Ut),Zn=xa(dt,Ut);if(wn.length!==Zn.length)return 0;let fn=-1;for(let sr=0;sr<wn.length;sr++){let Ar=vM(wn[sr],Zn[sr],!1,!1,!1,ji);if(!Ar)return 0;fn&=Ar}return fn}function Dr(ze,dt,Ut,wn){let Zn=-1,fn=dt.keyType,sr=ze.flags&2097152?eM(ze):Ey(ze);for(let Ar of sr)if(!n2e(ze,Ar)&&Vx(TC(Ar,8576),fn)){let Ei=Gv(Ar),ia=Pe||Ei.flags&32768||fn===rt||!(Ar.flags&16777216)?Ei:wf(Ei,524288),Aa=ji(ia,dt.type,3,Ut,void 0,wn);if(!Aa)return Ut&&Hr(_.Property_0_is_incompatible_with_index_signature,E(Ar)),0;Zn&=Aa}for(let Ar of tu(ze))if(Vx(Ar.keyType,fn)){let Ei=Ii(Ar,dt,Ut,wn);if(!Ei)return 0;Zn&=Ei}return Zn}function Ii(ze,dt,Ut,wn){let Zn=ji(ze.type,dt.type,3,Ut,void 0,wn);return!Zn&&Ut&&(ze.keyType===dt.keyType?Hr(_._0_index_signatures_are_incompatible,Ee(ze.keyType)):Hr(_._0_and_1_index_signatures_are_incompatible,Ee(ze.keyType),Ee(dt.keyType))),Zn}function Bo(ze,dt,Ut,wn,Zn){if(c===td)return ds(ze,dt);let fn=tu(dt),sr=vt(fn,Ei=>Ei.keyType===ae),Ar=-1;for(let Ei of fn){let ia=!Ut&&sr&&Ei.type.flags&1?-1:df(ze)&&sr?ji(_h(ze),Ei.type,3,wn):ys(ze,Ei,wn,Zn);if(!ia)return 0;Ar&=ia}return Ar}function ys(ze,dt,Ut,wn){let Zn=rM(ze,dt.keyType);return Zn?Ii(Zn,dt,Ut,wn):!(wn&1)&&(c!==x_||Ur(ze)&8192)&&xB(ze)?Dr(ze,dt,Ut,wn):(Ut&&Hr(_.Index_signature_for_type_0_is_missing_in_type_1,Ee(dt.keyType),Ee(ze)),0)}function ds(ze,dt){let Ut=tu(ze),wn=tu(dt);if(Ut.length!==wn.length)return 0;for(let Zn of wn){let fn=Cm(ze,Zn.keyType);if(!(fn&&ji(fn.type,Zn.type,3)&&fn.isReadonly===Zn.isReadonly))return 0}return-1}function Bl(ze,dt,Ut){if(!ze.declaration||!dt.declaration)return!0;let wn=hS(ze.declaration,24),Zn=hS(dt.declaration,24);return Zn===8||Zn===16&&wn!==8||Zn!==16&&!wn?!0:(Ut&&Hr(_.Cannot_assign_a_0_constructor_type_to_a_1_constructor_type,Ud(wn),Ud(Zn)),!1)}}function Hne(n){if(n.flags&16)return!1;if(n.flags&3145728)return!!mn(n.types,Hne);if(n.flags&465829888){let a=VE(n);if(a&&a!==n)return Hne(a)}return N_(n)||!!(n.flags&134217728)||!!(n.flags&268435456)}function r2e(n,a){return po(n)&&po(a)?Je:Jo(a).filter(c=>mB(Vc(n,c.escapedName),zn(c)))}function mB(n,a){return!!n&&!!a&&Js(n,32768)&&!!fD(a)}function cXe(n){return Jo(n).filter(a=>fD(zn(a)))}function i2e(n,a,c=Gne){return mke(n,a,c,!0)||lit(n,a)||uit(n,a)||dit(n,a)||fit(n,a)}function Wne(n,a,c,u,p){let h=n.types.map(O=>{});for(let[O,H]of a){let J=Kte(n,H);if(p&&J&&ac(J)&16)continue;let de=0;for(let Ae of n.types){let xe=Vc(Ae,H);xe&&c(O(),xe)?h[de]=h[de]===void 0?!0:h[de]:h[de]=!1,de++}}let T=h.indexOf(!0);if(T===-1)return u;let k=h.indexOf(!0,T+1);for(;k!==-1;){if(!ph(n.types[T],n.types[k]))return u;k=h.indexOf(!0,k+1)}return n.types[T]}function a2e(n){if(n.flags&524288){let a=R_(n);return a.callSignatures.length===0&&a.constructSignatures.length===0&&a.indexInfos.length===0&&a.properties.length>0&&Ji(a.properties,c=>!!(c.flags&16777216))}return n.flags&2097152?Ji(n.types,a2e):!1}function lXe(n,a,c){for(let u of Jo(n))if(Vre(a,u.escapedName,c))return!0;return!1}function zne(n){return n===$o||n===jo||n.objectFlags&8?W:s2e(n.symbol,n.typeParameters)}function o2e(n){return s2e(n,Ai(n).typeParameters)}function s2e(n,a=Je){var c,u;let p=Ai(n);if(!p.variances){(c=ai)==null||c.push(ai.Phase.CheckTypes,\"getVariancesWorker\",{arity:a.length,id:ru(gs(n))}),p.variances=Je;let h=[];for(let T of a){let k=Jne(T),O=k&65536?k&32768?0:1:k&32768?2:void 0;if(O===void 0){let H=!1,J=!1,de=Qr;Qr=tt=>tt?J=!0:H=!0;let Ae=hM(n,T,md),xe=hM(n,T,Pc);O=(to(xe,Ae)?1:0)|(to(Ae,xe)?2:0),O===3&&to(hM(n,T,bl),Ae)&&(O=4),Qr=de,(H||J)&&(H&&(O|=8),J&&(O|=16))}h.push(O)}p.variances=h,(u=ai)==null||u.pop({variances:h.map(L.formatVariance)})}return p.variances}function hM(n,a,c){let u=n0(a,c),p=gs(n);if(Ro(p))return p;let h=n.flags&524288?Jx(n,hg(Ai(n).typeParameters,u)):_g(p,hg(p.typeParameters,u));return vn.add(ru(h)),h}function hB(n){return vn.has(ru(n))}function Jne(n){var a;return ou((a=n.symbol)==null?void 0:a.declarations,(c,u)=>c|uu(u),0)&100352}function uXe(n,a){for(let c=0;c<a.length;c++)if((a[c]&7)===1&&n[c].flags&16384)return!0;return!1}function dXe(n){return n.flags&262144&&!eu(n)}function fXe(n){return!!(Ur(n)&4)&&!n.node}function gB(n){return fXe(n)&&vt(Ko(n),a=>!!(a.flags&262144)||gB(a))}function _Xe(n,a,c,u){let p=[],h=\"\",T=O(n,0),k=O(a,0);return`${h}${T},${k}${c}`;function O(H,J=0){let de=\"\"+H.target.id;for(let Ae of Ko(H)){if(Ae.flags&262144){if(u||dXe(Ae)){let xe=p.indexOf(Ae);xe<0&&(xe=p.length,p.push(Ae)),de+=\"=\"+xe;continue}h=\"*\"}else if(J<4&&gB(Ae)){de+=\"<\"+O(Ae,J+1)+\">\";continue}de+=\"-\"+Ae.id}return de}}function Kne(n,a,c,u,p){if(u===td&&n.id>a.id){let T=n;n=a,a=T}let h=c?\":\"+c:\"\";return gB(n)&&gB(a)?_Xe(n,a,h,p):`${n.id},${a.id}${h}`}function gM(n,a){if(ac(n)&6){for(let c of n.links.containingType.types){let u=ja(c,n.escapedName),p=u&&gM(u,a);if(p)return p}return}return a(n)}function N1(n){return n.parent&&n.parent.flags&32?gs(ju(n)):void 0}function yB(n){let a=N1(n),c=a&&_o(a)[0];return c&&Vc(c,n.escapedName)}function pXe(n,a){return gM(n,c=>{let u=N1(c);return u?BE(u,a):!1})}function mXe(n,a){return!gM(a,c=>Ef(c)&16?!pXe(n,N1(c)):!1)}function c2e(n,a,c){return gM(a,u=>Ef(u,c)&16?!BE(n,N1(u)):!1)?void 0:n}function yM(n,a,c,u=3){if(c>=u){if(n.flags&2097152)return vt(n.types,k=>yM(k,a,c,u));let p=AC(n),h=0,T=0;for(let k=0;k<c;k++){let O=a[k];if(O.flags&2097152?vt(O.types,H=>AC(H)===p):AC(O)===p){if(O.id>=T&&(h++,h>=u))return!0;T=O.id}}}return!1}function AC(n){if(n.flags&524288&&!pre(n)){if(Ur(n)&&n.node)return n.node;if(n.symbol&&!(Ur(n)&16&&n.symbol.flags&32))return n.symbol;if(po(n))return n.target}if(n.flags&262144)return n.symbol;if(n.flags&8388608){do n=n.objectType;while(n.flags&8388608);return n}return n.flags&16777216?n.root:n}function hXe(n,a){return qne(n,a,sD)!==0}function qne(n,a,c){if(n===a)return-1;let u=Ef(n)&24,p=Ef(a)&24;if(u!==p)return 0;if(u){if(oA(n)!==oA(a))return 0}else if((n.flags&16777216)!==(a.flags&16777216))return 0;return M_(n)!==M_(a)?0:c(zn(n),zn(a))}function gXe(n,a,c){let u=xd(n),p=xd(a),h=Vp(n),T=Vp(a),k=jp(n),O=jp(a);return!!(u===p&&h===T&&k===O||c&&h<=T)}function vM(n,a,c,u,p,h){if(n===a)return-1;if(!gXe(n,a,c)||Fn(n.typeParameters)!==Fn(a.typeParameters))return 0;if(a.typeParameters){let O=Wu(n.typeParameters,a.typeParameters);for(let H=0;H<a.typeParameters.length;H++){let J=n.typeParameters[H],de=a.typeParameters[H];if(!(J===de||h(Oi(bC(J),O)||ue,bC(de)||ue)&&h(Oi(jE(J),O)||ue,jE(de)||ue)))return 0}n=$x(n,O,!0)}let T=-1;if(!u){let O=Yb(n);if(O){let H=Yb(a);if(H){let J=h(O,H);if(!J)return 0;T&=J}}}let k=xd(a);for(let O=0;O<k;O++){let H=P_(n,O),J=P_(a,O),de=h(J,H);if(!de)return 0;T&=de}if(!p){let O=Lf(n),H=Lf(a);T&=O||H?yXe(O,H,h):h(qo(n),qo(a))}return T}function yXe(n,a,c){return n&&a&&Ene(n,a)?n.type===a.type?-1:n.type&&a.type?c(n.type,a.type):0:0}function vXe(n){let a;for(let c of n)if(!(c.flags&131072)){let u=ky(c);if(a??(a=u),u===c||u!==a)return!1}return!0}function l2e(n){return ou(n,(a,c)=>a|(c.flags&1048576?l2e(c.types):c.flags),0)}function bXe(n){if(n.length===1)return n[0];let a=U?Tl(n,u=>jc(u,p=>!(p.flags&98304))):n,c=vXe(a)?Gr(a):ou(a,(u,p)=>Iy(u,p)?p:u);return a===n?c:TB(c,l2e(n)&98304)}function EXe(n){return ou(n,(a,c)=>Iy(c,a)?c:a)}function _f(n){return!!(Ur(n)&4)&&(n.target===$o||n.target===jo)}function CC(n){return!!(Ur(n)&4)&&n.target===jo}function JE(n){return _f(n)||po(n)}function vB(n){return _f(n)&&!CC(n)||po(n)&&!n.target.readonly}function Xne(n){return _f(n)?Ko(n)[0]:void 0}function Kv(n){return _f(n)||!(n.flags&98304)&&to(n,Ri)}function Yne(n){if(!(Ur(n)&4)||!(Ur(n.target)&3))return;if(Ur(n)&33554432)return Ur(n)&67108864?n.cachedEquivalentBaseType:void 0;n.objectFlags|=33554432;let a=n.target;if(Ur(a)&1){let p=yn(a);if(p&&p.expression.kind!==79&&p.expression.kind!==208)return}let c=_o(a);if(c.length!==1||vy(n.symbol).size)return;let u=Fn(a.typeParameters)?Oi(c[0],Wu(a.typeParameters,Ko(n).slice(0,a.typeParameters.length))):c[0];return Fn(Ko(n))>Fn(a.typeParameters)&&(u=uf(u,To(Ko(n)))),n.objectFlags|=67108864,n.cachedEquivalentBaseType=u}function u2e(n){return U?n===Vt:n===je}function bB(n){let a=Xne(n);return!!a&&u2e(a)}function IC(n){return po(n)||!!ja(n,\"0\")}function EB(n){return Kv(n)||IC(n)}function TXe(n,a){let c=Vc(n,\"\"+a);if(c)return c;if(Im(n,po))return Ls(n,u=>{let p=u,h=bM(p);return h?Y.noUncheckedIndexedAccess&&a>=p.target.fixedLength+sM(p.target,3)?Gr([h,Oe]):h:Oe})}function SXe(n){return!(n.flags&240544)}function N_(n){return!!(n.flags&109472)}function d2e(n){let a=Ty(n);return a.flags&2097152?vt(a.types,N_):N_(a)}function xXe(n){return n.flags&2097152&&wr(n.types,N_)||n}function uD(n){return n.flags&16?!0:n.flags&1048576?n.flags&1024?!0:Ji(n.types,N_):N_(n)}function ky(n){return n.flags&1056?Kk(n):n.flags&402653312?ae:n.flags&256?rt:n.flags&2048?Ot:n.flags&512?Te:n.flags&1048576?AXe(n):n}function AXe(n){var a;let c=`B${ru(n)}`;return(a=wb(c))!=null?a:qh(c,Ls(n,ky))}function $ne(n){return n.flags&402653312?ae:n.flags&288?rt:n.flags&2048?Ot:n.flags&512?Te:n.flags&1048576?Ls(n,$ne):n}function i0(n){return n.flags&1056&&t0(n)?Kk(n):n.flags&128&&t0(n)?ae:n.flags&256&&t0(n)?rt:n.flags&2048&&t0(n)?Ot:n.flags&512&&t0(n)?Te:n.flags&1048576?Ls(n,i0):n}function f2e(n){return n.flags&8192?j:n.flags&1048576?Ls(n,f2e):n}function Qne(n,a){return aU(n,a)||(n=f2e(i0(n))),Hu(n)}function CXe(n,a,c){if(n&&N_(n)){let u=a?c?wD(a):a:void 0;n=Qne(n,u)}return n}function Zne(n,a,c,u){if(n&&N_(n)){let p=a?c0(c,a,u):void 0;n=Qne(n,p)}return n}function po(n){return!!(Ur(n)&4&&n.target.objectFlags&8)}function Qx(n){return po(n)&&!!(n.target.combinedFlags&8)}function _2e(n){return Qx(n)&&n.target.elementFlags.length===1}function bM(n){return LC(n,n.target.fixedLength)}function IXe(n){let a=bM(n);return a&&nu(a)}function LC(n,a,c=0,u=!1,p=!1){let h=Vv(n)-c;if(a<h){let T=Ko(n),k=[];for(let O=a;O<h;O++){let H=T[O];k.push(n.target.elementFlags[O]&8?od(H,rt):H)}return u?so(k):Gr(k,p?0:1)}}function LXe(n,a){return Vv(n)===Vv(a)&&Ji(n.target.elementFlags,(c,u)=>(c&12)===(a.target.elementFlags[u]&12))}function p2e({value:n}){return n.base10Value===\"0\"}function m2e(n){return jc(n,a=>!!(iu(a)&4194304))}function kXe(n){return Ls(n,DXe)}function DXe(n){return n.flags&4?gx:n.flags&8?_1:n.flags&64?yx:n===oe||n===Ke||n.flags&114691||n.flags&128&&n.value===\"\"||n.flags&256&&n.value===0||n.flags&2048&&p2e(n)?n:lt}function TB(n,a){let c=a&~n.flags&98304;return c===0?n:Gr(c===32768?[n,Oe]:c===65536?[n,ln]:[n,Oe,ln])}function gg(n,a=!1){L.assert(U);let c=a?kt:Oe;return n===c||n.flags&1048576&&n.types[0]===c?n:Gr([n,c])}function wXe(n){return io||(io=nD(\"NonNullable\",524288,void 0)||Ht),io!==Ht?Jx(io,[n]):so([n,Ki])}function yg(n){return U?$E(n,2097152):n}function h2e(n){return U?Gr([n,Kt]):n}function ere(n){return U?wB(n,Kt):n}function SB(n,a,c){return c?mI(a)?gg(n):h2e(n):n}function dD(n,a){return r6(a)?yg(n):Jl(a)?ere(n):n}function KE(n,a){return Pe&&a?wB(n,Ge):n}function fD(n){return n===Ge||!!(n.flags&1048576)&&n.types[0]===Ge}function tre(n){return Pe?wB(n,Ge):wf(n,524288)}function RXe(n,a){return(n.flags&524)!==0&&(a.flags&28)!==0}function xB(n){let a=Ur(n);return n.flags&2097152?Ji(n.types,xB):!!(n.symbol&&n.symbol.flags&7040&&!(n.symbol.flags&32)&&!EU(n))||!!(a&4194304)||!!(a&1024&&xB(n.source))}function qE(n,a){let c=wo(n.flags,n.escapedName,ac(n)&8);c.declarations=n.declarations,c.parent=n.parent,c.links.type=a,c.links.target=n,n.valueDeclaration&&(c.valueDeclaration=n.valueDeclaration);let u=Ai(n).nameType;return u&&(c.links.nameType=u),c}function OXe(n,a){let c=Ua();for(let u of Ey(n)){let p=zn(u),h=a(p);c.set(u.escapedName,h===p?u:qE(u,h))}return c}function EM(n){if(!(Xv(n)&&Ur(n)&8192))return n;let a=n.regularType;if(a)return a;let c=n,u=OXe(n,EM),p=ls(c.symbol,u,c.callSignatures,c.constructSignatures,c.indexInfos);return p.flags=c.flags,p.objectFlags|=c.objectFlags&-8193,n.regularType=p,p}function g2e(n,a,c){return{parent:n,propertyName:a,siblings:c,resolvedProperties:void 0}}function y2e(n){if(!n.siblings){let a=[];for(let c of y2e(n.parent))if(Xv(c)){let u=qb(c,n.propertyName);u&&QE(zn(u),p=>{a.push(p)})}n.siblings=a}return n.siblings}function NXe(n){if(!n.resolvedProperties){let a=new Map;for(let c of y2e(n))if(Xv(c)&&!(Ur(c)&2097152))for(let u of Jo(c))a.set(u.escapedName,u);n.resolvedProperties=lo(a.values())}return n.resolvedProperties}function PXe(n,a){if(!(n.flags&4))return n;let c=zn(n),u=a&&g2e(a,n.escapedName,void 0),p=nre(c,u);return p===c?n:qE(n,p)}function MXe(n){let a=ri.get(n.escapedName);if(a)return a;let c=qE(n,kt);return c.flags|=16777216,ri.set(n.escapedName,c),c}function FXe(n,a){let c=Ua();for(let p of Ey(n))c.set(p.escapedName,PXe(p,a));if(a)for(let p of NXe(a))c.has(p.escapedName)||c.set(p.escapedName,MXe(p));let u=ls(n.symbol,c,Je,Je,Tl(tu(n),p=>Fp(p.keyType,Sd(p.type),p.isReadonly)));return u.objectFlags|=Ur(n)&266240,u}function Sd(n){return nre(n,void 0)}function nre(n,a){if(Ur(n)&196608){if(a===void 0&&n.widened)return n.widened;let c;if(n.flags&98305)c=Se;else if(Xv(n))c=FXe(n,a);else if(n.flags&1048576){let u=a||g2e(void 0,void 0,n.types),p=Tl(n.types,h=>h.flags&98304?h:nre(h,u));c=Gr(p,vt(p,mh)?2:1)}else n.flags&2097152?c=so(Tl(n.types,Sd)):JE(n)&&(c=_g(n.target,Tl(Ko(n),Sd)));return c&&a===void 0&&(n.widened=c),c||n}return n}function AB(n){let a=!1;if(Ur(n)&65536){if(n.flags&1048576)if(vt(n.types,mh))a=!0;else for(let c of n.types)AB(c)&&(a=!0);if(JE(n))for(let c of Ko(n))AB(c)&&(a=!0);if(Xv(n))for(let c of Ey(n)){let u=zn(c);Ur(u)&65536&&(AB(u)||Fe(c.valueDeclaration,_.Object_literal_s_property_0_implicitly_has_an_1_type,E(c),Ee(Sd(u))),a=!0)}}return a}function qv(n,a,c){let u=Ee(Sd(a));if(Yn(n)&&!HR(Gn(n),Y))return;let p;switch(n.kind){case 223:case 169:case 168:p=ge?_.Member_0_implicitly_has_an_1_type:_.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;break;case 166:let h=n;if(Re(h.name)){let T=nb(h.name);if((_2(h.parent)||zm(h.parent)||Jm(h.parent))&&h.parent.parameters.indexOf(h)>-1&&(zs(h,h.name.escapedText,788968,void 0,h.name.escapedText,!0)||T&&vW(T))){let k=\"arg\"+h.parent.parameters.indexOf(h),O=os(h.name)+(h.dotDotDotToken?\"[]\":\"\");Ip(ge,n,_.Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1,k,O);return}}p=n.dotDotDotToken?ge?_.Rest_parameter_0_implicitly_has_an_any_type:_.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage:ge?_.Parameter_0_implicitly_has_an_1_type:_.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;break;case 205:if(p=_.Binding_element_0_implicitly_has_an_1_type,!ge)return;break;case 320:Fe(n,_.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type,u);return;case 326:ge&&kL(n.parent)&&Fe(n.parent.tagName,_.This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation,u);return;case 259:case 171:case 170:case 174:case 175:case 215:case 216:if(ge&&!n.name){c===3?Fe(n,_.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation,u):Fe(n,_.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type,u);return}p=ge?c===3?_._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type:_._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type:_._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage;break;case 197:ge&&Fe(n,_.Mapped_object_type_implicitly_has_an_any_template_type);return;default:p=ge?_.Variable_0_implicitly_has_an_1_type:_.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage}Ip(ge,n,p,os(sa(n)),u)}function CB(n,a,c){i(()=>{ge&&Ur(a)&65536&&(!c||!Nre(n))&&(AB(a)||qv(n,a,c))})}function rre(n,a,c){let u=xd(n),p=xd(a),h=xD(n),T=xD(a),k=T?p-1:p,O=h?k:Math.min(u,k),H=Yb(n);if(H){let J=Yb(a);J&&c(H,J)}for(let J=0;J<O;J++)c(P_(n,J),P_(a,J));T&&c(SD(n,O),T)}function ire(n,a,c){let u=Lf(n),p=Lf(a);u&&p&&Ene(u,p)&&u.type&&p.type?c(u.type,p.type):c(qo(n),qo(a))}function _D(n,a,c,u){return are(n.map(ore),a,c,u||Gne)}function GXe(n,a=0){return n&&are(on(n.inferences,b2e),n.signature,n.flags|a,n.compareTypes)}function are(n,a,c,u){let p={inferences:n,signature:a,flags:c,compareTypes:u,mapper:gn,nonFixingMapper:gn};return p.mapper=BXe(p),p.nonFixingMapper=UXe(p),p}function BXe(n){return Rne(on(n.inferences,a=>a.typeParameter),on(n.inferences,(a,c)=>()=>(a.isFixed||(VXe(n),IB(n.inferences),a.isFixed=!0),mre(n,c))))}function UXe(n){return Rne(on(n.inferences,a=>a.typeParameter),on(n.inferences,(a,c)=>()=>mre(n,c)))}function IB(n){for(let a of n)a.isFixed||(a.inferredType=void 0)}function v2e(n,a,c){var u;((u=n.intraExpressionInferenceSites)!=null?u:n.intraExpressionInferenceSites=[]).push({node:a,type:c})}function VXe(n){if(n.intraExpressionInferenceSites){for(let{node:a,type:c}of n.intraExpressionInferenceSites){let u=a.kind===171?dCe(a,2):Ru(a,2);u&&gh(n.inferences,c,u)}n.intraExpressionInferenceSites=void 0}}function ore(n){return{typeParameter:n,candidates:void 0,contraCandidates:void 0,inferredType:void 0,priority:void 0,topLevel:!0,isFixed:!1,impliedArity:void 0}}function b2e(n){return{typeParameter:n.typeParameter,candidates:n.candidates&&n.candidates.slice(),contraCandidates:n.contraCandidates&&n.contraCandidates.slice(),inferredType:n.inferredType,priority:n.priority,topLevel:n.topLevel,isFixed:n.isFixed,impliedArity:n.impliedArity}}function jXe(n){let a=Pr(n.inferences,iA);return a.length?are(on(a,b2e),n.signature,n.flags,n.compareTypes):void 0}function sre(n){return n&&n.mapper}function XE(n){let a=Ur(n);if(a&524288)return!!(a&1048576);let c=!!(n.flags&465829888||n.flags&524288&&!E2e(n)&&(a&4&&(n.node||mn(Ko(n),XE))||a&16&&n.symbol&&n.symbol.flags&14384&&n.symbol.declarations||a&12583968)||n.flags&3145728&&!(n.flags&1024)&&!E2e(n)&&vt(n.types,XE));return n.flags&3899393&&(n.objectFlags|=524288|(c?1048576:0)),c}function E2e(n){if(n.aliasSymbol&&!n.aliasTypeArguments){let a=nc(n.aliasSymbol,262);return!!(a&&jn(a.parent,c=>c.kind===308?!0:c.kind===264?!1:\"quit\"))}return!1}function pD(n,a,c=0){return!!(n===a||n.flags&3145728&&vt(n.types,u=>pD(u,a,c))||c<3&&n.flags&16777216&&(pD(Hv(n),a,c+1)||pD(Wv(n),a,c+1)))}function HXe(n,a){let c=Lf(n);return c?!!c.type&&pD(c.type,a):pD(qo(n),a)}function WXe(n){let a=Ua();QE(n,u=>{if(!(u.flags&128))return;let p=Bs(u.value),h=wo(4,p);h.links.type=Se,u.symbol&&(h.declarations=u.symbol.declarations,h.valueDeclaration=u.symbol.valueDeclaration),a.set(p,h)});let c=n.flags&4?[Fp(ae,Ki,!1)]:Je;return ls(void 0,a,Je,Je,c)}function T2e(n,a,c){if(ta)return;let u=n.id+\",\"+a.id+\",\"+c.id;if(yr.has(u))return yr.get(u);ta=!0;let p=zXe(n,a,c);return ta=!1,yr.set(u,p),p}function cre(n){return!(Ur(n)&262144)||Xv(n)&&vt(Jo(n),a=>cre(zn(a)))||po(n)&&vt(Ko(n),cre)}function zXe(n,a,c){if(!(Cm(n,ae)||Jo(n).length!==0&&cre(n)))return;if(_f(n))return nu(LB(Ko(n)[0],a,c),CC(n));if(po(n)){let p=on(Ko(n),T=>LB(T,a,c)),h=Pp(a)&4?Tl(n.target.elementFlags,T=>T&2?1:T):n.target.elementFlags;return ap(p,h,n.target.readonly,n.target.labeledElementDeclarations)}let u=Bd(1040,void 0);return u.source=n,u.mappedType=a,u.constraintType=c,u}function JXe(n){let a=Ai(n);return a.type||(a.type=LB(n.links.propertyType,n.links.mappedType,n.links.constraintType)),a.type}function LB(n,a,c){let u=od(c.type,w_(a)),p=_h(a),h=ore(u);return gh([h],n,p),S2e(h)||ue}function*lre(n,a,c,u){let p=Jo(a);for(let h of p)if(!yxe(h)&&(c||!(h.flags&16777216||ac(h)&48))){let T=ja(n,h.escapedName);if(!T)yield h;else if(u){let k=zn(h);if(k.flags&109472){let O=zn(T);O.flags&1||Hu(O)===Hu(k)||(yield h)}}}}function ure(n,a,c,u){return u8(lre(n,a,c,u))}function KXe(n,a){return!(a.target.combinedFlags&8)&&a.target.minLength>n.target.minLength||!a.target.hasRestElement&&(n.target.hasRestElement||a.target.fixedLength<n.target.fixedLength)}function qXe(n,a){return po(n)&&po(a)?KXe(n,a):!!ure(n,a,!1,!0)&&!!ure(a,n,!1,!1)}function S2e(n){return n.candidates?Gr(n.candidates,2):n.contraCandidates?so(n.contraCandidates):void 0}function dre(n){return!!Rr(n).skipDirectInference}function x2e(n){return!!(n.symbol&&vt(n.symbol.declarations,dre))}function XXe(n,a){let c=n.texts[0],u=a.texts[0],p=n.texts[n.texts.length-1],h=a.texts[a.texts.length-1],T=Math.min(c.length,u.length),k=Math.min(p.length,h.length);return c.slice(0,T)!==u.slice(0,T)||p.slice(p.length-k)!==h.slice(h.length-k)}function A2e(n,a){if(n===\"\")return!1;let c=+n;return isFinite(c)&&(!a||\"\"+c===n)}function YXe(n){return aB(BW(n))}function fre(n,a){if(a.flags&1)return!0;if(a.flags&134217732)return to(n,a);if(a.flags&268435456){let c=[];for(;a.flags&268435456;)c.unshift(a.symbol),a=a.type;return ou(c,(p,h)=>w1(h,p),n)===n&&fre(n,a)}return!1}function $Xe(n,a){if(n===a||a.flags&5)return!0;if(n.flags&128){let c=n.value;return!!(a.flags&8&&A2e(c,!1)||a.flags&64&&v4(c,!1)||a.flags&98816&&c===a.intrinsicName||a.flags&268435456&&fre(ff(c),a))}if(n.flags&134217728){let c=n.texts;return c.length===2&&c[0]===\"\"&&c[1]===\"\"&&to(n.types[0],a)}return to(n,a)}function C2e(n,a){return n.flags&128?I2e([n.value],Je,a):n.flags&134217728?GD(n.texts,a.texts)?on(n.types,QXe):I2e(n.texts,n.types,a):void 0}function _re(n,a){let c=C2e(n,a);return!!c&&Ji(c,(u,p)=>$Xe(u,a.types[p]))}function QXe(n){return n.flags&402653317?n:WE([\"\",\"\"],[n])}function I2e(n,a,c){let u=n.length-1,p=n[0],h=n[u],T=c.texts,k=T.length-1,O=T[0],H=T[k];if(u===0&&p.length<O.length+H.length||!p.startsWith(O)||!h.endsWith(H))return;let J=h.slice(0,h.length-H.length),de=[],Ae=0,xe=O.length;for(let Tn=1;Tn<k;Tn++){let un=T[Tn];if(un.length>0){let Nn=Ae,en=xe;for(;en=tt(Nn).indexOf(un,en),!(en>=0);){if(Nn++,Nn===n.length)return;en=0}It(Nn,en),xe+=un.length}else if(xe<tt(Ae).length)It(Ae,xe+1);else if(Ae<u)It(Ae+1,0);else return}return It(u,tt(u).length),de;function tt(Tn){return Tn<u?n[Tn]:J}function It(Tn,un){let Nn=Tn===Ae?ff(tt(Tn).slice(xe,un)):WE([n[Ae].slice(xe),...n.slice(Ae+1,Tn),tt(Tn).slice(0,un)],a.slice(Ae,Tn));de.push(Nn),Ae=Tn,xe=un}}function gh(n,a,c,u=0,p=!1){let h=!1,T,k=2048,O=!0,H,J,de,Ae=0;xe(a,c);function xe(In,qn){if(XE(qn)){if(In===Tt){let Mi=T;T=In,xe(qn,qn),T=Mi;return}if(In.aliasSymbol&&In.aliasSymbol===qn.aliasSymbol){if(In.aliasTypeArguments){let Mi=Ai(In.aliasSymbol).typeParameters,ga=Mp(Mi),Bi=Sy(In.aliasTypeArguments,Mi,ga,Yn(In.aliasSymbol.valueDeclaration)),ko=Sy(qn.aliasTypeArguments,Mi,ga,Yn(In.aliasSymbol.valueDeclaration));en(Bi,ko,o2e(In.aliasSymbol))}return}if(In===qn&&In.flags&3145728){for(let Mi of In.types)xe(Mi,Mi);return}if(qn.flags&1048576){let[Mi,ga]=Nn(In.flags&1048576?In.types:[In],qn.types,ZXe),[Bi,ko]=Nn(Mi,ga,eYe);if(ko.length===0)return;if(qn=Gr(ko),Bi.length===0){tt(In,qn,1);return}In=Gr(Bi)}else if(qn.flags&2097152&&!Ji(qn.types,rB)){if(!(In.flags&1048576)){let[Mi,ga]=Nn(In.flags&2097152?In.types:[In],qn.types,ph);if(Mi.length===0||ga.length===0)return;In=so(Mi),qn=so(ga)}}else qn.flags&41943040&&(qn=Cy(qn));if(qn.flags&8650752){if(x2e(In))return;let Mi=Jt(qn);if(Mi){if(Ur(In)&262144||In===ce)return;if(!Mi.isFixed){if((Mi.priority===void 0||u<Mi.priority)&&(Mi.candidates=void 0,Mi.contraCandidates=void 0,Mi.topLevel=!0,Mi.priority=u),u===Mi.priority){let Bi=T||In;p&&!h?ya(Mi.contraCandidates,Bi)||(Mi.contraCandidates=Sn(Mi.contraCandidates,Bi),IB(n)):ya(Mi.candidates,Bi)||(Mi.candidates=Sn(Mi.candidates,Bi),IB(n))}!(u&128)&&qn.flags&262144&&Mi.topLevel&&!pD(c,qn)&&(Mi.topLevel=!1,IB(n))}k=Math.min(k,u);return}let ga=mg(qn,!1);if(ga!==qn)xe(In,ga);else if(qn.flags&8388608){let Bi=mg(qn.indexType,!1);if(Bi.flags&465829888){let ko=kAe(mg(qn.objectType,!1),Bi,!1);ko&&ko!==qn&&xe(In,ko)}}}if(Ur(In)&4&&Ur(qn)&4&&(In.target===qn.target||_f(In)&&_f(qn))&&!(In.node&&qn.node))en(Ko(In),Ko(qn),zne(In.target));else if(In.flags&4194304&&qn.flags&4194304)cn(In.type,qn.type);else if((uD(In)||In.flags&4)&&qn.flags&4194304){let Mi=WXe(In);It(Mi,qn.type,256)}else if(In.flags&8388608&&qn.flags&8388608)xe(In.objectType,qn.objectType),xe(In.indexType,qn.indexType);else if(In.flags&268435456&&qn.flags&268435456)In.symbol===qn.symbol&&xe(In.type,qn.type);else if(In.flags&33554432)xe(In.baseType,qn),tt(une(In),qn,4);else if(qn.flags&16777216)un(In,qn,Hr);else if(qn.flags&3145728)Rn(In,qn.types,qn.flags);else if(In.flags&1048576){let Mi=In.types;for(let ga of Mi)xe(ga,qn)}else if(qn.flags&134217728)qi(In,qn);else{if(In=O_(In),!(u&512&&In.flags&467927040)){let Mi=Eu(In);if(Mi!==In&&O&&!(Mi.flags&2621440))return O=!1,xe(Mi,qn);In=Mi}In.flags&2621440&&un(In,qn,wa)}}}function tt(In,qn,Mi){let ga=u;u|=Mi,xe(In,qn),u=ga}function It(In,qn,Mi){let ga=u;u|=Mi,cn(In,qn),u=ga}function Tn(In,qn,Mi,ga){let Bi=u;u|=ga,Rn(In,qn,Mi),u=Bi}function un(In,qn,Mi){let ga=In.id+\",\"+qn.id,Bi=H&&H.get(ga);if(Bi!==void 0){k=Math.min(k,Bi);return}(H||(H=new Map)).set(ga,-1);let ko=k;k=2048;let us=Ae,Xs=AC(In),no=AC(qn);ya(J,Xs)&&(Ae|=1),ya(de,no)&&(Ae|=2),Ae!==3?((J||(J=[])).push(Xs),(de||(de=[])).push(no),Mi(In,qn),de.pop(),J.pop()):k=-1,Ae=us,H.set(ga,k),k=Math.min(k,ko)}function Nn(In,qn,Mi){let ga,Bi;for(let ko of qn)for(let us of In)Mi(us,ko)&&(xe(us,ko),ga=xg(ga,us),Bi=xg(Bi,ko));return[ga?Pr(In,ko=>!ya(ga,ko)):In,Bi?Pr(qn,ko=>!ya(Bi,ko)):qn]}function en(In,qn,Mi){let ga=In.length<qn.length?In.length:qn.length;for(let Bi=0;Bi<ga;Bi++)Bi<Mi.length&&(Mi[Bi]&7)===2?cn(In[Bi],qn[Bi]):xe(In[Bi],qn[Bi])}function cn(In,qn){p=!p,xe(In,qn),p=!p}function rr(In,qn){re||u&1024?cn(In,qn):xe(In,qn)}function Jt(In){if(In.flags&8650752){for(let qn of n)if(In===qn.typeParameter)return qn}}function Cn(In){let qn;for(let Mi of In){let ga=Mi.flags&2097152&&wr(Mi.types,Bi=>!!Jt(Bi));if(!ga||qn&&ga!==qn)return;qn=ga}return qn}function Rn(In,qn,Mi){let ga=0;if(Mi&1048576){let Bi,ko=In.flags&1048576?In.types:[In],us=new Array(ko.length),Xs=!1;for(let no of qn)if(Jt(no))Bi=no,ga++;else for(let Tu=0;Tu<ko.length;Tu++){let et=k;k=2048,xe(ko[Tu],no),k===u&&(us[Tu]=!0),Xs=Xs||k===-1,k=Math.min(k,et)}if(ga===0){let no=Cn(qn);no&&tt(In,no,1);return}if(ga===1&&!Xs){let no=Uo(ko,(Tu,et)=>us[et]?void 0:Tu);if(no.length){xe(Gr(no),Bi);return}}}else for(let Bi of qn)Jt(Bi)?ga++:xe(In,Bi);if(Mi&2097152?ga===1:ga>0)for(let Bi of qn)Jt(Bi)&&tt(In,Bi,1)}function Br(In,qn,Mi){if(Mi.flags&1048576){let ga=!1;for(let Bi of Mi.types)ga=Br(In,qn,Bi)||ga;return ga}if(Mi.flags&4194304){let ga=Jt(Mi.type);if(ga&&!ga.isFixed&&!x2e(In)){let Bi=T2e(In,qn,Mi);Bi&&tt(Bi,ga.typeParameter,Ur(In)&262144?16:8)}return!0}if(Mi.flags&262144){tt(Gp(In),Mi,32);let ga=VE(Mi);if(ga&&Br(In,qn,ga))return!0;let Bi=on(Jo(In),zn),ko=on(tu(In),us=>us!==yu?us.type:lt);return xe(Gr(Qi(Bi,ko)),_h(qn)),!0}return!1}function Hr(In,qn){if(In.flags&16777216)xe(In.checkType,qn.checkType),xe(In.extendsType,qn.extendsType),xe(Hv(In),Hv(qn)),xe(Wv(In),Wv(qn));else{let Mi=[Hv(qn),Wv(qn)];Tn(In,Mi,qn.flags,p?64:0)}}function qi(In,qn){let Mi=C2e(In,qn),ga=qn.types;if(Mi||Ji(qn.texts,Bi=>Bi.length===0))for(let Bi=0;Bi<ga.length;Bi++){let ko=Mi?Mi[Bi]:lt,us=ga[Bi];if(ko.flags&128&&us.flags&8650752){let Xs=Jt(us),no=Xs?bu(Xs.typeParameter):void 0;if(no&&!Zo(no)){let Tu=no.flags&1048576?no.types:[no],et=ou(Tu,(he,Bn)=>he|Bn.flags,0);if(!(et&4)){let he=ko.value;et&296&&!A2e(he,!0)&&(et&=-297),et&2112&&!v4(he,!0)&&(et&=-2113);let Bn=ou(Tu,(Mn,or)=>or.flags&et?Mn.flags&4?Mn:or.flags&4?ko:Mn.flags&134217728?Mn:or.flags&134217728&&_re(ko,or)?ko:Mn.flags&268435456?Mn:or.flags&268435456&&he===CAe(or.symbol,he)?ko:Mn.flags&128?Mn:or.flags&128&&or.value===he?or:Mn.flags&8?Mn:or.flags&8?op(+he):Mn.flags&32?Mn:or.flags&32?op(+he):Mn.flags&256?Mn:or.flags&256&&or.value===+he?or:Mn.flags&64?Mn:or.flags&64?YXe(he):Mn.flags&2048?Mn:or.flags&2048&&j0(or.value)===he?or:Mn.flags&16?Mn:or.flags&16?he===\"true\"?pe:he===\"false\"?Ke:Te:Mn.flags&512?Mn:or.flags&512&&or.intrinsicName===he?or:Mn.flags&32768?Mn:or.flags&32768&&or.intrinsicName===he?or:Mn.flags&65536?Mn:or.flags&65536&&or.intrinsicName===he?or:Mn:Mn,lt);if(!(Bn.flags&131072)){xe(Bn,us);continue}}}}xe(ko,us)}}function wa(In,qn){var Mi,ga;if(Ur(In)&4&&Ur(qn)&4&&(In.target===qn.target||_f(In)&&_f(qn))){en(Ko(In),Ko(qn),zne(In.target));return}if(df(In)&&df(qn)){xe(rp(In),rp(qn)),xe(_h(In),_h(qn));let Bi=by(In),ko=by(qn);Bi&&ko&&xe(Bi,ko)}if(Ur(qn)&32&&!qn.declaration.nameType){let Bi=rp(qn);if(Br(In,qn,Bi))return}if(!qXe(In,qn)){if(JE(In)){if(po(qn)){let Bi=Vv(In),ko=Vv(qn),us=Ko(qn),Xs=qn.target.elementFlags;if(po(In)&&LXe(In,qn)){for(let et=0;et<ko;et++)xe(Ko(In)[et],us[et]);return}let no=po(In)?Math.min(In.target.fixedLength,qn.target.fixedLength):0,Tu=Math.min(po(In)?sM(In.target,3):0,qn.target.hasRestElement?sM(qn.target,3):0);for(let et=0;et<no;et++)xe(Ko(In)[et],us[et]);if(!po(In)||Bi-no-Tu===1&&In.target.elementFlags[no]&4){let et=Ko(In)[no];for(let he=no;he<ko-Tu;he++)xe(Xs[he]&8?nu(et):et,us[he])}else{let et=ko-no-Tu;if(et===2){if(Xs[no]&Xs[no+1]&8){let he=Jt(us[no]);he&&he.impliedArity!==void 0&&(xe(EC(In,no,Tu+Bi-he.impliedArity),us[no]),xe(EC(In,no+he.impliedArity,Tu),us[no+1]))}else if(Xs[no]&8&&Xs[no+1]&4){let he=(Mi=Jt(us[no]))==null?void 0:Mi.typeParameter,Bn=he&&bu(he);if(Bn&&po(Bn)&&!Bn.target.hasRestElement){let Mn=Bn.target.fixedLength;xe(EC(In,no,Bi-(no+Mn)),us[no]),xe(LC(In,no+Mn,Tu),us[no+1])}}else if(Xs[no]&4&&Xs[no+1]&8){let he=(ga=Jt(us[no+1]))==null?void 0:ga.typeParameter,Bn=he&&bu(he);if(Bn&&po(Bn)&&!Bn.target.hasRestElement){let Mn=Bn.target.fixedLength,or=Bi-sM(qn.target,3),_r=or-Mn,ua=ap(Ko(In).slice(_r,or),In.target.elementFlags.slice(_r,or),!1,In.target.labeledElementDeclarations&&In.target.labeledElementDeclarations.slice(_r,or));xe(LC(In,no,Tu+Mn),us[no]),xe(ua,us[no+1])}}}else if(et===1&&Xs[no]&8){let he=qn.target.elementFlags[ko-1]&2,Bn=EC(In,no,Tu);tt(Bn,us[no],he?2:0)}else if(et===1&&Xs[no]&4){let he=LC(In,no,Tu);he&&xe(he,us[no])}}for(let et=0;et<Tu;et++)xe(Ko(In)[Bi-et-1],us[ko-et-1]);return}if(_f(qn)){ji(In,qn);return}}Xc(In,qn),pf(In,qn,0),pf(In,qn,1),ji(In,qn)}}function Xc(In,qn){let Mi=Ey(qn);for(let ga of Mi){let Bi=ja(In,ga.escapedName);Bi&&!vt(Bi.declarations,dre)&&xe(zn(Bi),zn(ga))}}function pf(In,qn,Mi){let ga=xa(In,Mi),Bi=xa(qn,Mi),ko=ga.length,us=Bi.length,Xs=ko<us?ko:us;for(let no=0;no<Xs;no++)Hd(oKe(ga[ko-Xs+no]),tD(Bi[us-Xs+no]))}function Hd(In,qn){let Mi=h,ga=qn.declaration?qn.declaration.kind:0;h=h||ga===171||ga===170||ga===173,rre(In,qn,rr),h=Mi,ire(In,qn,xe)}function ji(In,qn){let Mi=Ur(In)&Ur(qn)&32?8:0,ga=tu(qn);if(xB(In))for(let Bi of ga){let ko=[];for(let us of Jo(In))if(Vx(TC(us,8576),Bi.keyType)){let Xs=zn(us);ko.push(us.flags&16777216?tre(Xs):Xs)}for(let us of tu(In))Vx(us.keyType,Bi.keyType)&&ko.push(us.type);ko.length&&tt(Gr(ko),Bi.type,Mi)}for(let Bi of ga){let ko=rM(In,Bi.keyType);ko&&tt(ko.type,Bi.type,Mi)}}}function ZXe(n,a){return a===Ge?n===a:ph(n,a)||!!(a.flags&4&&n.flags&128||a.flags&8&&n.flags&256)}function eYe(n,a){return!!(n.flags&524288&&a.flags&524288&&n.symbol&&n.symbol===a.symbol||n.aliasSymbol&&n.aliasTypeArguments&&n.aliasSymbol===a.aliasSymbol)}function tYe(n){let a=eu(n);return!!a&&Js(a.flags&16777216?Hte(a):a,406978556)}function Xv(n){return!!(Ur(n)&128)}function pre(n){return!!(Ur(n)&16512)}function nYe(n){if(n.length>1){let a=Pr(n,pre);if(a.length){let c=Gr(a,2);return Qi(Pr(n,u=>!pre(u)),[c])}}return n}function rYe(n){return n.priority&416?so(n.contraCandidates):EXe(n.contraCandidates)}function iYe(n,a){let c=nYe(n.candidates),u=tYe(n.typeParameter)||tM(n.typeParameter),p=!u&&n.topLevel&&(n.isFixed||!HXe(a,n.typeParameter)),h=u?Tl(c,Hu):p?Tl(c,i0):c,T=n.priority&416?Gr(h,2):bXe(h);return Sd(T)}function mre(n,a){let c=n.inferences[a];if(!c.inferredType){let u,p=n.signature;if(p){let T=c.candidates?iYe(c,p):void 0;if(c.contraCandidates)u=T&&!(T.flags&131072)&&vt(c.contraCandidates,O=>Iy(T,O))&&Ji(n.inferences,O=>O!==c&&eu(O.typeParameter)!==c.typeParameter||Ji(O.candidates,H=>Iy(H,T)))?T:rYe(c);else if(T)u=T;else if(n.flags&1)u=Qe;else{let k=jE(c.typeParameter);k&&(u=Oi(k,Nqe(Oqe(n,a),n.nonFixingMapper)))}}else u=S2e(c);c.inferredType=u||hre(!!(n.flags&2));let h=eu(c.typeParameter);if(h){let T=Oi(h,n.nonFixingMapper);(!u||!n.compareTypes(u,uf(T,u)))&&(c.inferredType=u=T)}}return c.inferredType}function hre(n){return n?Se:ue}function gre(n){let a=[];for(let c=0;c<n.inferences.length;c++)a.push(mre(n,c));return a}function L2e(n){switch(n.escapedText){case\"document\":case\"console\":return _.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom;case\"$\":return Y.types?_.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig:_.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery;case\"describe\":case\"suite\":case\"it\":case\"test\":return Y.types?_.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig:_.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha;case\"process\":case\"require\":case\"Buffer\":case\"module\":return Y.types?_.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig:_.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode;case\"Map\":case\"Set\":case\"Promise\":case\"Symbol\":case\"WeakMap\":case\"WeakSet\":case\"Iterator\":case\"AsyncIterator\":case\"SharedArrayBuffer\":case\"Atomics\":case\"AsyncIterable\":case\"AsyncIterableIterator\":case\"AsyncGenerator\":case\"AsyncGeneratorFunction\":case\"BigInt\":case\"Reflect\":case\"BigInt64Array\":case\"BigUint64Array\":return _.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later;case\"await\":if(Pa(n.parent))return _.Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function;default:return n.parent.kind===300?_.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer:_.Cannot_find_name_0}}function Qf(n){let a=Rr(n);return a.resolvedSymbol||(a.resolvedSymbol=!rc(n)&&zs(n,n.escapedText,1160127,L2e(n),n,!hW(n),!1)||Ht),a.resolvedSymbol}function kC(n){return!!jn(n,a=>a.kind===183?!0:a.kind===79||a.kind===163?!1:\"quit\")}function k2e(n){return!!(n.flags&16777216||jn(n,a=>ku(a)||Rd(a)))}function kB(n,a,c,u){switch(n.kind){case 79:if(!mS(n)){let T=Qf(n);return T!==Ht?`${u?zo(u):\"-1\"}|${ru(a)}|${ru(c)}|${$a(T)}`:void 0}case 108:return`0|${u?zo(u):\"-1\"}|${ru(a)}|${ru(c)}`;case 232:case 214:return kB(n.expression,a,c,u);case 163:let p=kB(n.left,a,c,u);return p&&p+\".\"+n.right.escapedText;case 208:case 209:let h=YE(n);if(h!==void 0){let T=kB(n.expression,a,c,u);return T&&T+\".\"+h}break;case 203:case 204:case 259:case 215:case 216:case 171:return`${zo(n)}#${ru(a)}`}}function El(n,a){switch(a.kind){case 214:case 232:return El(n,a.expression);case 223:return Iu(a)&&El(n,a.left)||ar(a)&&a.operatorToken.kind===27&&El(n,a.right)}switch(n.kind){case 233:return a.kind===233&&n.keywordToken===a.keywordToken&&n.name.escapedText===a.name.escapedText;case 79:case 80:return mS(n)?a.kind===108:a.kind===79&&Qf(n)===Qf(a)||(wi(a)||Wo(a))&&tp(Qf(n))===fr(a);case 108:return a.kind===108;case 106:return a.kind===106;case 232:case 214:return El(n.expression,a);case 208:case 209:let c=YE(n),u=Us(a)?YE(a):void 0;return c!==void 0&&u!==void 0&&u===c&&El(n.expression,a.expression);case 163:return Us(a)&&n.right.escapedText===YE(a)&&El(n.left,a.expression);case 223:return ar(n)&&n.operatorToken.kind===27&&El(n.right,a)}return!1}function YE(n){if(br(n))return n.name.escapedText;if(Vs(n))return aYe(n);if(Wo(n)){let a=dn(n);return a?Bs(a):void 0}if(ha(n))return\"\"+n.parent.parameters.indexOf(n)}function D2e(n){return n.flags&8192?n.escapedName:n.flags&384?Bs(\"\"+n.value):void 0}function aYe(n){if(yf(n.argumentExpression))return Bs(n.argumentExpression.text);if(bc(n.argumentExpression)){let a=uc(n.argumentExpression,111551,!0);if(!a||!(wC(a)||a.flags&8))return;let c=a.valueDeclaration;if(c===void 0)return;let u=ad(c);if(u){let p=D2e(u);if(p!==void 0)return p}if(mT(c)&&$h(c,n.argumentExpression)){let p=Yw(c);if(p)return D2e(au(p));if(q0(c))return wA(c.name)}}}function w2e(n,a){for(;Us(n);)if(n=n.expression,El(n,a))return!0;return!1}function P1(n,a){for(;Jl(n);)if(n=n.expression,El(n,a))return!0;return!1}function mD(n,a){if(n&&n.flags&1048576){let c=Kte(n,a);if(c&&ac(c)&2)return c.links.isDiscriminantProperty===void 0&&(c.links.isDiscriminantProperty=(c.links.checkFlags&192)===192&&!SC(zn(c))),!!c.links.isDiscriminantProperty}return!1}function R2e(n,a){let c;for(let u of n)if(mD(a,u.escapedName)){if(c){c.push(u);continue}c=[u]}return c}function oYe(n,a){let c=new Map,u=0;for(let p of n)if(p.flags&61603840){let h=Vc(p,a);if(h){if(!uD(h))return;let T=!1;QE(h,k=>{let O=ru(Hu(k)),H=c.get(O);H?H!==ue&&(c.set(O,ue),T=!0):c.set(O,p)}),T||u++}}return u>=10&&u*2>=n.length?c:void 0}function TM(n){let a=n.types;if(!(a.length<10||Ur(n)&32768||Oy(a,c=>!!(c.flags&59506688))<10)){if(n.keyPropertyName===void 0){let c=mn(a,p=>p.flags&59506688?mn(Jo(p),h=>N_(zn(h))?h.escapedName:void 0):void 0),u=c&&oYe(a,c);n.keyPropertyName=u?c:\"\",n.constituentMap=u}return n.keyPropertyName.length?n.keyPropertyName:void 0}}function SM(n,a){var c;let u=(c=n.constituentMap)==null?void 0:c.get(ru(Hu(a)));return u!==ue?u:void 0}function O2e(n,a){let c=TM(n),u=c&&Vc(a,c);return u&&SM(n,u)}function sYe(n,a){let c=TM(n),u=c&&wr(a.properties,h=>h.symbol&&h.kind===299&&h.symbol.escapedName===c&&DM(h.initializer)),p=u&&KM(u.initializer);return p&&SM(n,p)}function N2e(n,a){return El(n,a)||w2e(n,a)}function P2e(n,a){if(n.arguments){for(let c of n.arguments)if(N2e(a,c))return!0}return!!(n.expression.kind===208&&N2e(a,n.expression.expression))}function yre(n){return(!n.id||n.id<0)&&(n.id=gK,gK++),n.id}function cYe(n,a){if(!(n.flags&1048576))return to(n,a);for(let c of n.types)if(to(c,a))return!0;return!1}function lYe(n,a){var c;if(n===a)return n;if(a.flags&131072)return a;let u=`A${ru(n)},${ru(a)}`;return(c=wb(u))!=null?c:qh(u,uYe(n,a))}function uYe(n,a){let c=jc(n,p=>cYe(a,p)),u=a.flags&512&&t0(a)?Ls(c,Yx):c;return to(a,u)?u:n}function vre(n){let a=R_(n);return!!(a.callSignatures.length||a.constructSignatures.length||a.members.get(\"bind\")&&Iy(n,Hs))}function iu(n){n.flags&467927040&&(n=bu(n)||ue);let a=n.flags;if(a&268435460)return U?16317953:16776705;if(a&134217856){let c=a&128&&n.value===\"\";return U?c?12123649:7929345:c?12582401:16776705}if(a&40)return U?16317698:16776450;if(a&256){let c=n.value===0;return U?c?12123394:7929090:c?12582146:16776450}if(a&64)return U?16317188:16775940;if(a&2048){let c=p2e(n);return U?c?12122884:7928580:c?12581636:16775940}return a&16?U?16316168:16774920:a&528?U?n===Ke||n===oe?12121864:7927560:n===Ke||n===oe?12580616:16774920:a&524288?Ur(n)&16&&mh(n)?U?83427327:83886079:vre(n)?U?7880640:16728e3:U?7888800:16736160:a&16384?9830144:a&32768?26607360:a&65536?42917664:a&12288?U?7925520:16772880:a&67108864?U?7888800:16736160:a&131072?0:a&1048576?ou(n.types,(c,u)=>c|iu(u),0):a&2097152?dYe(n):83886079}function dYe(n){let a=Js(n,134348796),c=0,u=134217727;for(let p of n.types)if(!(a&&p.flags&524288)){let h=iu(p);c|=h,u&=h}return c&8256|u&134209471}function wf(n,a){return jc(n,c=>(iu(c)&a)!==0)}function $E(n,a){let c=M2e(wf(U&&n.flags&2?hc:n,a));if(U)switch(a){case 524288:return Ls(c,u=>iu(u)&65536?so([u,iu(u)&131072&&!Js(c,65536)?Gr([Ki,ln]):Ki]):u);case 1048576:return Ls(c,u=>iu(u)&131072?so([u,iu(u)&65536&&!Js(c,32768)?Gr([Ki,Oe]):Ki]):u);case 2097152:case 4194304:return Ls(c,u=>iu(u)&262144?wXe(u):u)}return c}function M2e(n){return n===hc?ue:n}function bre(n,a){return a?Gr([me(n),au(a)]):n}function F2e(n,a){var c;let u=pg(a);if(!fh(u))return ve;let p=Np(u);return Vc(n,p)||hD((c=jx(n,p))==null?void 0:c.type)||ve}function G2e(n,a){return Im(n,IC)&&TXe(n,a)||hD(wy(65,n,Oe,void 0))||ve}function hD(n){return n&&(Y.noUncheckedIndexedAccess?Gr([n,Ge]):n)}function B2e(n){return nu(wy(65,n,Oe,void 0)||ve)}function fYe(n){return n.parent.kind===206&&Ere(n.parent)||n.parent.kind===299&&Ere(n.parent.parent)?bre(xM(n),n.right):au(n.right)}function Ere(n){return n.parent.kind===223&&n.parent.left===n||n.parent.kind===247&&n.parent.initializer===n}function _Ye(n,a){return G2e(xM(n),n.elements.indexOf(a))}function pYe(n){return B2e(xM(n.parent))}function U2e(n){return F2e(xM(n.parent),n.name)}function mYe(n){return bre(U2e(n),n.objectAssignmentInitializer)}function xM(n){let{parent:a}=n;switch(a.kind){case 246:return ae;case 247:return e8(a)||ve;case 223:return fYe(a);case 217:return Oe;case 206:return _Ye(a,n);case 227:return pYe(a);case 299:return U2e(a);case 300:return mYe(a)}return ve}function hYe(n){let a=n.parent,c=j2e(a.parent),u=a.kind===203?F2e(c,n.propertyName||n.name):n.dotDotDotToken?B2e(c):G2e(c,a.elements.indexOf(n));return bre(u,n.initializer)}function V2e(n){return Rr(n).resolvedType||au(n)}function gYe(n){return n.initializer?V2e(n.initializer):n.parent.parent.kind===246?ae:n.parent.parent.kind===247&&e8(n.parent.parent)||ve}function j2e(n){return n.kind===257?gYe(n):hYe(n)}function yYe(n){return n.kind===257&&n.initializer&&is(n.initializer)||n.kind!==205&&n.parent.kind===223&&is(n.parent.right)}function a0(n){switch(n.kind){case 214:return a0(n.expression);case 223:switch(n.operatorToken.kind){case 63:case 75:case 76:case 77:return a0(n.left);case 27:return a0(n.right)}}return n}function H2e(n){let{parent:a}=n;return a.kind===214||a.kind===223&&a.operatorToken.kind===63&&a.left===n||a.kind===223&&a.operatorToken.kind===27&&a.right===n?H2e(a):n}function vYe(n){return n.kind===292?Hu(au(n.expression)):lt}function DB(n){let a=Rr(n);if(!a.switchTypes){a.switchTypes=[];for(let c of n.caseBlock.clauses)a.switchTypes.push(vYe(c))}return a.switchTypes}function W2e(n){if(vt(n.caseBlock.clauses,c=>c.kind===292&&!es(c.expression)))return;let a=[];for(let c of n.caseBlock.clauses){let u=c.kind===292?c.expression.text:void 0;a.push(u&&!ya(a,u)?u:void 0)}return a}function bYe(n,a){return n.flags&1048576?!mn(n.types,c=>!ya(a,c)):ya(a,n)}function gD(n,a){return n===a||a.flags&1048576&&EYe(n,a)}function EYe(n,a){if(n.flags&1048576){for(let c of n.types)if(!Qb(a.types,c))return!1;return!0}return n.flags&1056&&Kk(n)===a?!0:Qb(a.types,n)}function QE(n,a){return n.flags&1048576?mn(n.types,a):a(n)}function yh(n,a){return n.flags&1048576?vt(n.types,a):a(n)}function Im(n,a){return n.flags&1048576?Ji(n.types,a):a(n)}function TYe(n,a){return n.flags&3145728?Ji(n.types,a):a(n)}function jc(n,a){if(n.flags&1048576){let c=n.types,u=Pr(c,a);if(u===c)return n;let p=n.origin,h;if(p&&p.flags&1048576){let T=p.types,k=Pr(T,O=>!!(O.flags&1048576)||a(O));if(T.length-k.length===c.length-u.length){if(k.length===1)return k[0];h=bne(1048576,k)}}return Tne(u,n.objectFlags&16809984,void 0,void 0,h)}return n.flags&131072||a(n)?n:lt}function wB(n,a){return jc(n,c=>c!==a)}function SYe(n){return n.flags&1048576?n.types.length:1}function Ls(n,a,c){if(n.flags&131072)return n;if(!(n.flags&1048576))return a(n);let u=n.origin,p=u&&u.flags&1048576?u.types:n.types,h,T=!1;for(let k of p){let O=k.flags&1048576?Ls(k,a,c):a(k);T||(T=k!==O),O&&(h?h.push(O):h=[O])}return T?h&&Gr(h,c?0:1):n}function z2e(n,a,c,u){return n.flags&1048576&&c?Gr(on(n.types,a),1,c,u):Ls(n,a)}function DC(n,a){return jc(n,c=>(c.flags&a)!==0)}function J2e(n,a){return Js(n,134217804)&&Js(a,402655616)?Ls(n,c=>c.flags&4?DC(a,402653316):qx(c)&&!Js(a,402653188)?DC(a,128):c.flags&8?DC(a,264):c.flags&64?DC(a,2112):c):n}function Zx(n){return n.flags===0}function ZE(n){return n.flags===0?n.type:n}function eA(n,a){return a?{flags:0,type:n.flags&131072?Qe:n}:n}function xYe(n){let a=Bd(256);return a.elementType=n,a}function Tre(n){return hi[n.id]||(hi[n.id]=xYe(n))}function K2e(n,a){let c=EM(ky(KM(a)));return gD(c,n.elementType)?n:Tre(Gr([n.elementType,c]))}function AYe(n){return n.flags&131072?bn:nu(n.flags&1048576?Gr(n.types,2):n)}function CYe(n){return n.finalArrayType||(n.finalArrayType=AYe(n.elementType))}function AM(n){return Ur(n)&256?CYe(n):n}function IYe(n){return Ur(n)&256?n.elementType:lt}function LYe(n){let a=!1;for(let c of n)if(!(c.flags&131072)){if(!(Ur(c)&256))return!1;a=!0}return a}function q2e(n){let a=H2e(n),c=a.parent,u=br(c)&&(c.name.escapedText===\"length\"||c.parent.kind===210&&Re(c.name)&&jH(c.name)),p=c.kind===209&&c.expression===a&&c.parent.kind===223&&c.parent.operatorToken.kind===63&&c.parent.left===c&&!Um(c.parent)&&ul(au(c.argumentExpression),296);return u||p}function kYe(n){return(wi(n)||Na(n)||$d(n)||ha(n))&&!!(Cl(n)||Yn(n)&&Jy(n)&&n.initializer&&a2(n.initializer)&&U_(n.initializer))}function RB(n,a){if(n=Ac(n),n.flags&8752)return zn(n);if(n.flags&7){if(ac(n)&262144){let u=n.links.syntheticOrigin;if(u&&RB(u))return zn(n)}let c=n.valueDeclaration;if(c){if(kYe(c))return zn(n);if(wi(c)&&c.parent.parent.kind===247){let u=c.parent.parent,p=CM(u.expression,void 0);if(p){let h=u.awaitModifier?15:13;return wy(h,p,Oe,void 0)}}a&&Ao(a,hr(c,_._0_needs_an_explicit_type_annotation,E(n)))}}}function CM(n,a){if(!(n.flags&33554432))switch(n.kind){case 79:let c=tp(Qf(n));return RB(c,a);case 108:return qYe(n);case 106:return Ire(n);case 208:{let u=CM(n.expression,a);if(u){let p=n.name,h;if(pi(p)){if(!u.symbol)return;h=ja(u,hR(u.symbol,p.escapedText))}else h=ja(u,p.escapedText);return h&&RB(h,a)}return}case 214:return CM(n.expression,a)}}function OB(n){let a=Rr(n),c=a.effectsSignature;if(c===void 0){let u;n.parent.kind===241?u=CM(n.expression,void 0):n.expression.kind!==106&&(Jl(n)?u=sp(dD(Yi(n.expression),n.expression),n.expression):u=NC(n.expression));let p=xa(u&&Eu(u)||ue,0),h=p.length===1&&!p[0].typeParameters?p[0]:vt(p,X2e)?MC(n):void 0;c=a.effectsSignature=h&&X2e(h)?h:jt}return c===jt?void 0:c}function X2e(n){return!!(Lf(n)||n.declaration&&(Hx(n.declaration)||ue).flags&131072)}function DYe(n,a){if(n.kind===1||n.kind===3)return a.arguments[n.parameterIndex];let c=vs(a.expression);return Us(c)?vs(c.expression):void 0}function wYe(n){let a=jn(n,Bj),c=Gn(n),u=Pg(c,a.statements.pos);Lo.add(al(c,u.start,u.length,_.The_containing_function_or_module_body_is_too_large_for_control_flow_analysis))}function IM(n){let a=NB(n,!1);return $t=n,Xn=a,a}function LM(n){let a=vs(n,!0);return a.kind===95||a.kind===223&&(a.operatorToken.kind===55&&(LM(a.left)||LM(a.right))||a.operatorToken.kind===56&&LM(a.left)&&LM(a.right))}function NB(n,a){for(;;){if(n===$t)return Xn;let c=n.flags;if(c&4096){if(!a){let u=yre(n),p=vx[u];return p!==void 0?p:vx[u]=NB(n,!0)}a=!1}if(c&368)n=n.antecedent;else if(c&512){let u=OB(n.node);if(u){let p=Lf(u);if(p&&p.kind===3&&!p.type){let h=n.node.arguments[p.parameterIndex];if(h&&LM(h))return!1}if(qo(u).flags&131072)return!1}n=n.antecedent}else{if(c&4)return vt(n.antecedents,u=>NB(u,!1));if(c&8){let u=n.antecedents;if(u===void 0||u.length===0)return!1;n=u[0]}else if(c&128){if(n.clauseStart===n.clauseEnd&&xIe(n.switchStatement))return!1;n=n.antecedent}else if(c&1024){$t=void 0;let u=n.target,p=u.antecedents;u.antecedents=n.antecedents;let h=NB(n.antecedent,!1);return u.antecedents=p,h}else return!(c&1)}}}function PB(n,a){for(;;){let c=n.flags;if(c&4096){if(!a){let u=yre(n),p=_E[u];return p!==void 0?p:_E[u]=PB(n,!0)}a=!1}if(c&496)n=n.antecedent;else if(c&512){if(n.node.expression.kind===106)return!0;n=n.antecedent}else{if(c&4)return Ji(n.antecedents,u=>PB(u,!1));if(c&8)n=n.antecedents[0];else if(c&1024){let u=n.target,p=u.antecedents;u.antecedents=n.antecedents;let h=PB(n.antecedent,!1);return u.antecedents=p,h}else return!!(c&1)}}}function Y2e(n){switch(n.kind){case 79:if(!mS(n)){let a=Qf(n);return wC(a)||VW(a)&&!MB(a)}break;case 208:case 209:return Y2e(n.expression)&&M_(Rr(n).resolvedSymbol||Ht)}return!1}function Yv(n,a,c=a,u,p=(h=>(h=zr(n,cR))==null?void 0:h.flowNode)()){let h,T=!1,k=0;if(ki)return ve;if(!p)return a;Vn++;let O=kr,H=ZE(Ae(p));kr=O;let J=Ur(H)&256&&q2e(n)?bn:AM(H);if(J===Hn||n.parent&&n.parent.kind===232&&!(J.flags&131072)&&wf(J,2097152).flags&131072)return a;return J===G?ue:J;function de(){return T?h:(T=!0,h=kB(n,a,c,u))}function Ae(st){var Ct;if(k===2e3)return(Ct=ai)==null||Ct.instant(ai.Phase.CheckTypes,\"getTypeAtFlowNode_DepthLimit\",{flowId:st.id}),ki=!0,wYe(n),ve;k++;let Bt;for(;;){let Ft=st.flags;if(Ft&4096){for(let Un=O;Un<kr;Un++)if(fE[Un]===st)return k--,yv[Un];Bt=st}let hn;if(Ft&16){if(hn=tt(st),!hn){st=st.antecedent;continue}}else if(Ft&512){if(hn=Tn(st),!hn){st=st.antecedent;continue}}else if(Ft&96)hn=Nn(st);else if(Ft&128)hn=en(st);else if(Ft&12){if(st.antecedents.length===1){st=st.antecedents[0];continue}hn=Ft&4?cn(st):rr(st)}else if(Ft&256){if(hn=un(st),!hn){st=st.antecedent;continue}}else if(Ft&1024){let Un=st.target,yi=Un.antecedents;Un.antecedents=st.antecedents,hn=Ae(st.antecedent),Un.antecedents=yi}else if(Ft&2){let Un=st.node;if(Un&&Un!==u&&n.kind!==208&&n.kind!==209&&n.kind!==108){st=Un.flowNode;continue}hn=c}else hn=PD(a);return Bt&&(fE[kr]=Bt,yv[kr]=hn,kr++),k--,hn}}function xe(st){let Ct=st.node;return Sre(Ct.kind===257||Ct.kind===205?j2e(Ct):xM(Ct),n)}function tt(st){let Ct=st.node;if(El(n,Ct)){if(!IM(st))return Hn;if(xT(Ct)===2){let Bt=Ae(st.antecedent);return eA(ky(ZE(Bt)),Zx(Bt))}if(a===at||a===bn){if(yYe(Ct))return Tre(lt);let Bt=i0(xe(st));return to(Bt,a)?Bt:Et}return a.flags&1048576?lYe(a,xe(st)):a}if(w2e(n,Ct)){if(!IM(st))return Hn;if(wi(Ct)&&(Yn(Ct)||kh(Ct))){let Bt=$w(Ct);if(Bt&&(Bt.kind===215||Bt.kind===216))return Ae(st.antecedent)}return a}if(wi(Ct)&&Ct.parent.parent.kind===246&&(El(n,Ct.parent.parent.expression)||P1(Ct.parent.parent.expression,n)))return Wre(AM(ZE(Ae(st.antecedent))))}function It(st,Ct){let Bt=vs(Ct,!0);if(Bt.kind===95)return Hn;if(Bt.kind===223){if(Bt.operatorToken.kind===55)return It(It(st,Bt.left),Bt.right);if(Bt.operatorToken.kind===56)return Gr([It(st,Bt.left),It(st,Bt.right)])}return _i(st,Bt,!0)}function Tn(st){let Ct=OB(st.node);if(Ct){let Bt=Lf(Ct);if(Bt&&(Bt.kind===2||Bt.kind===3)){let Ft=Ae(st.antecedent),hn=AM(ZE(Ft)),Un=Bt.type?ua(hn,Bt,st.node,!0):Bt.kind===3&&Bt.parameterIndex>=0&&Bt.parameterIndex<st.node.arguments.length?It(hn,st.node.arguments[Bt.parameterIndex]):hn;return Un===hn?Ft:eA(Un,Zx(Ft))}if(qo(Ct).flags&131072)return Hn}}function un(st){if(a===at||a===bn){let Ct=st.node,Bt=Ct.kind===210?Ct.expression.expression:Ct.left.expression;if(El(n,a0(Bt))){let Ft=Ae(st.antecedent),hn=ZE(Ft);if(Ur(hn)&256){let Un=hn;if(Ct.kind===210)for(let yi of Ct.arguments)Un=K2e(Un,yi);else{let yi=KM(Ct.left.argumentExpression);ul(yi,296)&&(Un=K2e(Un,Ct.right))}return Un===hn?Ft:eA(Un,Zx(Ft))}return Ft}}}function Nn(st){let Ct=Ae(st.antecedent),Bt=ZE(Ct);if(Bt.flags&131072)return Ct;let Ft=(st.flags&32)!==0,hn=AM(Bt),Un=_i(hn,st.node,Ft);return Un===hn?Ct:eA(Un,Zx(Ct))}function en(st){let Ct=st.switchStatement.expression,Bt=Ae(st.antecedent),Ft=ZE(Bt);if(El(n,Ct))Ft=ko(Ft,st.switchStatement,st.clauseStart,st.clauseEnd);else if(Ct.kind===218&&El(n,Ct.expression))Ft=no(Ft,st.switchStatement,st.clauseStart,st.clauseEnd);else{U&&(P1(Ct,n)?Ft=Bi(Ft,st.switchStatement,st.clauseStart,st.clauseEnd,Un=>!(Un.flags&163840)):Ct.kind===218&&P1(Ct.expression,n)&&(Ft=Bi(Ft,st.switchStatement,st.clauseStart,st.clauseEnd,Un=>!(Un.flags&131072||Un.flags&128&&Un.value===\"undefined\"))));let hn=Rn(Ct,Ft);hn&&(Ft=qi(Ft,hn,st.switchStatement,st.clauseStart,st.clauseEnd))}return eA(Ft,Zx(Bt))}function cn(st){let Ct=[],Bt=!1,Ft=!1,hn;for(let Un of st.antecedents){if(!hn&&Un.flags&128&&Un.clauseStart===Un.clauseEnd){hn=Un;continue}let yi=Ae(Un),Di=ZE(yi);if(Di===a&&a===c)return Di;Of(Ct,Di),gD(Di,a)||(Bt=!0),Zx(yi)&&(Ft=!0)}if(hn){let Un=Ae(hn),yi=ZE(Un);if(!(yi.flags&131072)&&!ya(Ct,yi)&&!xIe(hn.switchStatement)){if(yi===a&&a===c)return yi;Ct.push(yi),gD(yi,a)||(Bt=!0),Zx(Un)&&(Ft=!0)}}return eA(Jt(Ct,Bt?2:1),Ft)}function rr(st){let Ct=yre(st),Bt=zh[Ct]||(zh[Ct]=new Map),Ft=de();if(!Ft)return a;let hn=Bt.get(Ft);if(hn)return hn;for(let er=sn;er<Dn;er++)if(p1[er]===st&&uE[er]===Ft&&dE[er].length)return eA(Jt(dE[er],1),!0);let Un=[],yi=!1,Di;for(let er of st.antecedents){let Sr;if(!Di)Sr=Di=Ae(er);else{p1[Dn]=st,uE[Dn]=Ft,dE[Dn]=Un,Dn++;let Ii=ra;ra=void 0,Sr=Ae(er),ra=Ii,Dn--;let Bo=Bt.get(Ft);if(Bo)return Bo}let Dr=ZE(Sr);if(Of(Un,Dr),gD(Dr,a)||(yi=!0),Dr===a)break}let Xt=Jt(Un,yi?2:1);return Zx(Di)?eA(Xt,!0):(Bt.set(Ft,Xt),Xt)}function Jt(st,Ct){if(LYe(st))return Tre(Gr(on(st,IYe)));let Bt=M2e(Gr(Tl(st,AM),Ct));return Bt!==a&&Bt.flags&a.flags&1048576&&GD(Bt.types,a.types)?a:Bt}function Cn(st){if(La(n)||a2(n)||s_(n)){if(Re(st)){let Bt=Qf(st).valueDeclaration;if(Bt&&(Wo(Bt)||ha(Bt))&&n===Bt.parent&&!Bt.initializer&&!Bt.dotDotDotToken)return Bt}}else if(Us(st)){if(El(n,st.expression))return st}else if(Re(st)){let Ct=Qf(st);if(wC(Ct)){let Bt=Ct.valueDeclaration;if(wi(Bt)&&!Bt.type&&Bt.initializer&&Us(Bt.initializer)&&El(n,Bt.initializer.expression))return Bt.initializer;if(Wo(Bt)&&!Bt.initializer){let Ft=Bt.parent.parent;if(wi(Ft)&&!Ft.type&&Ft.initializer&&(Re(Ft.initializer)||Us(Ft.initializer))&&El(n,Ft.initializer))return Bt}}}}function Rn(st,Ct){let Bt=a.flags&1048576?a:Ct;if(Bt.flags&1048576){let Ft=Cn(st);if(Ft){let hn=YE(Ft);if(hn&&mD(Bt,hn))return Ft}}}function Br(st,Ct,Bt){let Ft=YE(Ct);if(Ft===void 0)return st;let hn=Jl(Ct),Un=U&&(hn||Hle(Ct))&&Js(st,98304),yi=Vc(Un?wf(st,2097152):st,Ft);if(!yi)return st;yi=Un&&hn?gg(yi):yi;let Di=Bt(yi);return jc(st,Xt=>{let er=KP(Xt,Ft);return!(er.flags&131072)&&!(Di.flags&131072)&&_M(Di,er)})}function Hr(st,Ct,Bt,Ft,hn){if((Bt===36||Bt===37)&&st.flags&1048576){let Un=TM(st);if(Un&&Un===YE(Ct)){let yi=SM(st,au(Ft));if(yi)return Bt===(hn?36:37)?yi:N_(Vc(yi,Un)||ue)?wB(st,yi):st}}return Br(st,Ct,Un=>qn(Un,Bt,Ft,hn))}function qi(st,Ct,Bt,Ft,hn){if(Ft<hn&&st.flags&1048576&&TM(st)===YE(Ct)){let Un=DB(Bt).slice(Ft,hn),yi=Gr(on(Un,Di=>SM(st,Di)||ue));if(yi!==ue)return yi}return Br(st,Ct,Un=>ko(Un,Bt,Ft,hn))}function wa(st,Ct,Bt){if(El(n,Ct))return $E(st,Bt?4194304:8388608);U&&Bt&&P1(Ct,n)&&(st=$E(st,2097152));let Ft=Rn(Ct,st);return Ft?Br(st,Ft,hn=>wf(hn,Bt?4194304:8388608)):st}function Xc(st,Ct,Bt){let Ft=ja(st,Ct);return Ft?!!(Ft.flags&16777216)||Bt:!!jx(st,Ct)||!Bt}function pf(st,Ct,Bt){let Ft=Np(Ct);if(yh(st,Un=>Xc(Un,Ft,!0)))return jc(st,Un=>Xc(Un,Ft,Bt));if(Bt){let Un=MKe();if(Un)return so([st,Jx(Un,[Ct,ue])])}return st}function Hd(st,Ct,Bt){switch(Ct.operatorToken.kind){case 63:case 75:case 76:case 77:return wa(_i(st,Ct.right,Bt),Ct.left,Bt);case 34:case 35:case 36:case 37:let Ft=Ct.operatorToken.kind,hn=a0(Ct.left),Un=a0(Ct.right);if(hn.kind===218&&es(Un))return Mi(st,hn,Ft,Un,Bt);if(Un.kind===218&&es(hn))return Mi(st,Un,Ft,hn,Bt);if(El(n,hn))return qn(st,Ft,Un,Bt);if(El(n,Un))return qn(st,Ft,hn,Bt);U&&(P1(hn,n)?st=In(st,Ft,Un,Bt):P1(Un,n)&&(st=In(st,Ft,hn,Bt)));let yi=Rn(hn,st);if(yi)return Hr(st,yi,Ft,Un,Bt);let Di=Rn(Un,st);if(Di)return Hr(st,Di,Ft,hn,Bt);if(Tu(hn))return et(st,Ft,Un,Bt);if(Tu(Un))return et(st,Ft,hn,Bt);break;case 102:return he(st,Ct,Bt);case 101:if(pi(Ct.left))return ji(st,Ct,Bt);let Xt=a0(Ct.right),er=au(Ct.left);if(er.flags&8576){if(fD(st)&&Us(n)&&El(n.expression,Xt)&&YE(n)===Np(er))return wf(st,Bt?524288:65536);if(El(n,Xt))return pf(st,er,Bt)}break;case 27:return _i(st,Ct.right,Bt);case 55:return Bt?_i(_i(st,Ct.left,!0),Ct.right,!0):Gr([_i(st,Ct.left,!1),_i(st,Ct.right,!1)]);case 56:return Bt?Gr([_i(st,Ct.left,!0),_i(st,Ct.right,!0)]):_i(_i(st,Ct.left,!1),Ct.right,!1)}return st}function ji(st,Ct,Bt){let Ft=a0(Ct.right);if(!El(n,Ft))return st;L.assertNode(Ct.left,pi);let hn=KB(Ct.left);if(hn===void 0)return st;let Un=hn.parent,yi=zc(L.checkDefined(hn.valueDeclaration,\"should always have a declaration\"))?zn(Un):gs(Un);return Mn(st,yi,Bt,!0)}function In(st,Ct,Bt,Ft){let hn=Ct===34||Ct===36,Un=Ct===34||Ct===35?98304:32768,yi=au(Bt);return hn!==Ft&&Im(yi,Xt=>!!(Xt.flags&Un))||hn===Ft&&Im(yi,Xt=>!(Xt.flags&(3|Un)))?$E(st,2097152):st}function qn(st,Ct,Bt,Ft){if(st.flags&1)return st;(Ct===35||Ct===37)&&(Ft=!Ft);let hn=au(Bt),Un=Ct===34||Ct===35;if(hn.flags&98304){if(!U)return st;let yi=Un?Ft?262144:2097152:hn.flags&65536?Ft?131072:1048576:Ft?65536:524288;return $E(st,yi)}if(Ft){if(!Un&&(st.flags&2||yh(st,hh))){if(hn.flags&201457660||hh(hn))return hn;if(hn.flags&524288)return jr}let yi=jc(st,Di=>_M(Di,hn)||Un&&RXe(Di,hn));return J2e(yi,hn)}return N_(hn)?jc(st,yi=>!(d2e(yi)&&_M(yi,hn))):st}function Mi(st,Ct,Bt,Ft,hn){(Bt===35||Bt===37)&&(hn=!hn);let Un=a0(Ct.expression);if(!El(n,Un)){U&&P1(Un,n)&&hn===(Ft.text!==\"undefined\")&&(st=$E(st,2097152));let yi=Rn(Un,st);return yi?Br(st,yi,Di=>ga(Di,Ft,hn)):st}return ga(st,Ft,hn)}function ga(st,Ct,Bt){return Bt?us(st,Ct.text):$E(st,fF.get(Ct.text)||32768)}function Bi(st,Ct,Bt,Ft,hn){return Bt!==Ft&&Ji(DB(Ct).slice(Bt,Ft),hn)?wf(st,2097152):st}function ko(st,Ct,Bt,Ft){let hn=DB(Ct);if(!hn.length)return st;let Un=hn.slice(Bt,Ft),yi=Bt===Ft||ya(Un,lt);if(st.flags&2&&!yi){let Sr;for(let Dr=0;Dr<Un.length;Dr+=1){let Ii=Un[Dr];if(Ii.flags&201457660)Sr!==void 0&&Sr.push(Ii);else if(Ii.flags&524288)Sr===void 0&&(Sr=Un.slice(0,Dr)),Sr.push(jr);else return st}return Gr(Sr===void 0?Un:Sr)}let Di=Gr(Un),Xt=Di.flags&131072?lt:J2e(jc(st,Sr=>_M(Di,Sr)),Di);if(!yi)return Xt;let er=jc(st,Sr=>!(d2e(Sr)&&ya(hn,Hu(xXe(Sr)))));return Xt.flags&131072?er:Gr([Xt,er])}function us(st,Ct){switch(Ct){case\"string\":return Xs(st,ae,1);case\"number\":return Xs(st,rt,2);case\"bigint\":return Xs(st,Ot,4);case\"boolean\":return Xs(st,Te,8);case\"symbol\":return Xs(st,j,16);case\"object\":return st.flags&1?st:Gr([Xs(st,jr,32),Xs(st,ln,131072)]);case\"function\":return st.flags&1?st:Xs(st,Hs,64);case\"undefined\":return Xs(st,Oe,65536)}return Xs(st,jr,128)}function Xs(st,Ct,Bt){return Ls(st,Ft=>Bp(Ft,Ct,x_)?iu(Ft)&Bt?Ft:lt:Iy(Ct,Ft)?Ct:iu(Ft)&Bt?so([Ft,Ct]):lt)}function no(st,Ct,Bt,Ft){let hn=W2e(Ct);if(!hn)return st;let Un=Yc(Ct.caseBlock.clauses,Xt=>Xt.kind===293);if(Bt===Ft||Un>=Bt&&Un<Ft){let Xt=SIe(Bt,Ft,hn);return jc(st,er=>(iu(er)&Xt)===Xt)}let Di=hn.slice(Bt,Ft);return Gr(on(Di,Xt=>Xt?us(st,Xt):lt))}function Tu(st){return(br(st)&&vr(st.name)===\"constructor\"||Vs(st)&&es(st.argumentExpression)&&st.argumentExpression.text===\"constructor\")&&El(n,st.expression)}function et(st,Ct,Bt,Ft){if(Ft?Ct!==34&&Ct!==36:Ct!==35&&Ct!==37)return st;let hn=au(Bt);if(!Jie(hn)&&!Uv(hn))return st;let Un=ja(hn,\"prototype\");if(!Un)return st;let yi=zn(Un),Di=Zo(yi)?void 0:yi;if(!Di||Di===ka||Di===Hs)return st;if(Zo(st))return Di;return jc(st,er=>Xt(er,Di));function Xt(er,Sr){return er.flags&524288&&Ur(er)&1||Sr.flags&524288&&Ur(Sr)&1?er.symbol===Sr.symbol:Iy(er,Sr)}}function he(st,Ct,Bt){let Ft=a0(Ct.left);if(!El(n,Ft))return Bt&&U&&P1(Ft,n)?$E(st,2097152):st;let hn=au(Ct.right);if(!r0(hn,Hs))return st;let Un=Ls(hn,Bn);return Zo(st)&&(Un===ka||Un===Hs)||!Bt&&!(Un.flags&524288&&!hh(Un))?st:Mn(st,Un,Bt,!0)}function Bn(st){let Ct=Vc(st,\"prototype\");if(Ct&&!Zo(Ct))return Ct;let Bt=xa(st,1);return Bt.length?Gr(on(Bt,Ft=>qo(tD(Ft)))):Ki}function Mn(st,Ct,Bt,Ft){var hn;let Un=st.flags&1048576?`N${ru(st)},${ru(Ct)},${(Bt?1:0)|(Ft?2:0)}`:void 0;return(hn=wb(Un))!=null?hn:qh(Un,or(st,Ct,Bt,Ft))}function or(st,Ct,Bt,Ft){if(!Bt){if(Ft)return jc(st,Xt=>!r0(Xt,Ct));let Di=Mn(st,Ct,!0,!1);return jc(st,Xt=>!gD(Xt,Di))}if(st.flags&3)return Ct;let hn=Ft?r0:Iy,Un=st.flags&1048576?TM(st):void 0,yi=Ls(Ct,Di=>{let Xt=Un&&Vc(Di,Un),er=Xt&&SM(st,Xt),Sr=Ls(er||st,Ft?Dr=>r0(Dr,Di)?Dr:r0(Di,Dr)?Di:lt:Dr=>qAe(Dr,Di)?Dr:qAe(Di,Dr)?Di:Iy(Dr,Di)?Dr:Iy(Di,Dr)?Di:lt);return Sr.flags&131072?Ls(st,Dr=>Js(Dr,465829888)&&hn(Di,bu(Dr)||ue)?so([Dr,Di]):lt):Sr});return yi.flags&131072?Iy(Ct,st)?Ct:to(st,Ct)?st:to(Ct,st)?Ct:so([st,Ct]):yi}function _r(st,Ct,Bt){if(P2e(Ct,n)){let Ft=Bt||!dT(Ct)?OB(Ct):void 0,hn=Ft&&Lf(Ft);if(hn&&(hn.kind===0||hn.kind===1))return ua(st,hn,Ct,Bt)}if(fD(st)&&Us(n)&&br(Ct.expression)){let Ft=Ct.expression;if(El(n.expression,a0(Ft.expression))&&Re(Ft.name)&&Ft.name.escapedText===\"hasOwnProperty\"&&Ct.arguments.length===1){let hn=Ct.arguments[0];if(es(hn)&&YE(n)===Bs(hn.text))return wf(st,Bt?524288:65536)}}return st}function ua(st,Ct,Bt,Ft){if(Ct.type&&!(Zo(st)&&(Ct.type===ka||Ct.type===Hs))){let hn=DYe(Ct,Bt);if(hn){if(El(n,hn))return Mn(st,Ct.type,Ft,!1);U&&Ft&&P1(hn,n)&&!(iu(Ct.type)&65536)&&(st=$E(st,2097152));let Un=Rn(hn,st);if(Un)return Br(st,Un,yi=>Mn(yi,Ct.type,Ft,!1))}}return st}function _i(st,Ct,Bt){if(r6(Ct)||ar(Ct.parent)&&(Ct.parent.operatorToken.kind===60||Ct.parent.operatorToken.kind===77)&&Ct.parent.left===Ct)return ur(st,Ct,Bt);switch(Ct.kind){case 79:if(!El(n,Ct)&&C<5){let Ft=Qf(Ct);if(wC(Ft)){let hn=Ft.valueDeclaration;if(hn&&wi(hn)&&!hn.type&&hn.initializer&&Y2e(n)){C++;let Un=_i(st,hn.initializer,Bt);return C--,Un}}}case 108:case 106:case 208:case 209:return wa(st,Ct,Bt);case 210:return _r(st,Ct,Bt);case 214:case 232:return _i(st,Ct.expression,Bt);case 223:return Hd(st,Ct,Bt);case 221:if(Ct.operator===53)return _i(st,Ct.operand,!Bt);break}return st}function ur(st,Ct,Bt){if(El(n,Ct))return $E(st,Bt?2097152:262144);let Ft=Rn(Ct,st);return Ft?Br(st,Ft,hn=>wf(hn,Bt?2097152:262144)):st}}function RYe(n,a){if(n=tp(n),(a.kind===79||a.kind===80)&&(zI(a)&&(a=a.parent),Dh(a)&&(!Um(a)||YI(a)))){let c=au(a);if(tp(Rr(a).resolvedSymbol)===n)return c}return Rh(a)&&Ng(a.parent)&&N(a.parent)?Fi(a.parent.symbol):Gv(n)}function yD(n){return jn(n.parent,a=>Ia(a)&&!ET(a)||a.kind===265||a.kind===308||a.kind===169)}function MB(n){if(!n.valueDeclaration)return!1;let a=nm(n.valueDeclaration).parent,c=Rr(a);return c.flags&524288||(c.flags|=524288,OYe(a)||$2e(a)),n.isAssigned||!1}function OYe(n){return!!jn(n.parent,a=>(Ia(a)||E2(a))&&!!(Rr(a).flags&524288))}function $2e(n){if(n.kind===79){if(Um(n)){let a=Qf(n);VW(a)&&(a.isAssigned=!0)}}else pa(n,$2e)}function wC(n){return n.flags&3&&(WB(n)&2)!==0}function NYe(n){let a=Rr(n);if(a.parameterInitializerContainsUndefined===void 0){if(!cf(n,9))return pC(n.symbol),!0;let c=!!(iu(ID(n,0))&16777216);if(!If())return pC(n.symbol),!0;a.parameterInitializerContainsUndefined=c}return a.parameterInitializerContainsUndefined}function PYe(n,a){return U&&a.kind===166&&a.initializer&&iu(n)&16777216&&!NYe(a)?wf(n,524288):n}function MYe(n,a){let c=a.parent;return c.kind===208||c.kind===163||c.kind===210&&c.expression===a||c.kind===209&&c.expression===a&&!(yh(n,Z2e)&&jv(au(c.argumentExpression)))}function Q2e(n){return n.flags&2097152?vt(n.types,Q2e):!!(n.flags&465829888&&Ty(n).flags&1146880)}function Z2e(n){return n.flags&2097152?vt(n.types,Z2e):!!(n.flags&465829888&&!Js(Ty(n),98304))}function FYe(n,a){let c=(Re(n)||br(n)||Vs(n))&&!((Xm(n.parent)||FS(n.parent))&&n.parent.tagName===n)&&(a&&a&64?Ru(n,8):Ru(n,void 0));return c&&!SC(c)}function Sre(n,a,c){return!(c&&c&2)&&yh(n,Q2e)&&(MYe(n,a)||FYe(a,c))?Ls(n,Ty):n}function eCe(n){return!!jn(n,a=>{let c=a.parent;return c===void 0?\"quit\":pc(c)?c.expression===a&&bc(a):Mu(c)?c.name===a||c.propertyName===a:!1})}function FB(n,a){if(!Y.verbatimModuleSyntax&&ay(n,111551)&&!kC(a)&&!nd(n,111551)){let c=wc(n);Fl(c)&1160127&&(d_(Y)||U0(Y)&&eCe(a)||!MD(tp(c))?Hb(n):Wb(n))}}function GYe(n,a){var c;let u=zn(n),p=n.valueDeclaration;if(p){if(Wo(p)&&!p.initializer&&!p.dotDotDotToken&&p.parent.elements.length>=2){let h=p.parent.parent;if(h.kind===257&&G_(p)&2||h.kind===166){let T=Rr(h);if(!(T.flags&16777216)){T.flags|=16777216;let k=Px(h,0),O=k&&Ls(k,Ty);if(T.flags&=-16777217,O&&O.flags&1048576&&!(h.kind===166&&MB(n))){let H=p.parent,J=Yv(H,O,O,void 0,a.flowNode);return J.flags&131072?lt:li(p,J)}}}}if(ha(p)&&!p.type&&!p.initializer&&!p.dotDotDotToken){let h=p.parent;if(h.parameters.length>=2&&fB(h)){let T=bD(h);if(T&&T.parameters.length===1&&Xl(T)){let k=vC(Oi(zn(T.parameters[0]),(c=M1(h))==null?void 0:c.nonFixingMapper));if(k.flags&1048576&&Im(k,po)&&!MB(n)){let O=Yv(h,k,k,void 0,a.flowNode),H=h.parameters.indexOf(p)-(F0(h)?1:0);return od(O,op(H))}}}}}return u}function BYe(n,a){if(mS(n))return kM(n);let c=Qf(n);if(c===Ht)return ve;if(c===_t){if(FCe(n))return Fe(n,_.arguments_cannot_be_referenced_in_property_initializers),ve;let Nn=Xd(n);return R<2&&(Nn.kind===216?Fe(n,_.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression):Mr(Nn,512)&&Fe(n,_.The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method)),Rr(Nn).flags|=512,zn(c)}VYe(n)&&FB(c,n);let u=tp(c),p=MLe(u,n);Sv(p)&&xne(n,p)&&p.declarations&&Xh(n,p.declarations,n.escapedText);let h=u.valueDeclaration;if(h&&u.flags&32){if(h.kind===260&&FA($,h)){let Nn=Zc(n);for(;Nn!==void 0;){if(Nn===h&&Nn.name!==n){Rr(h).flags|=1048576,Rr(n).flags|=2097152;break}Nn=Zc(Nn)}}else if(h.kind===228){let Nn=Ku(n,!1,!1);for(;Nn.kind!==308;){if(Nn.parent===h){(Na(Nn)&&Ca(Nn)||oc(Nn))&&(Rr(h).flags|=1048576,Rr(n).flags|=2097152);break}Nn=Ku(Nn,!1,!1)}}}WYe(n,c);let T=GYe(u,n),k=xT(n);if(k){if(!(u.flags&3)&&!(Yn(n)&&u.flags&512)){let Nn=u.flags&384?_.Cannot_assign_to_0_because_it_is_an_enum:u.flags&32?_.Cannot_assign_to_0_because_it_is_a_class:u.flags&1536?_.Cannot_assign_to_0_because_it_is_a_namespace:u.flags&16?_.Cannot_assign_to_0_because_it_is_a_function:u.flags&2097152?_.Cannot_assign_to_0_because_it_is_an_import:_.Cannot_assign_to_0_because_it_is_not_a_variable;return Fe(n,Nn,E(c)),ve}if(M_(u))return u.flags&3?Fe(n,_.Cannot_assign_to_0_because_it_is_a_constant,E(c)):Fe(n,_.Cannot_assign_to_0_because_it_is_a_read_only_property,E(c)),ve}let O=u.flags&2097152;if(u.flags&3){if(k===1)return T}else if(O)h=Uu(c);else return T;if(!h)return T;T=Sre(T,n,a);let H=nm(h).kind===166,J=yD(h),de=yD(n),Ae=de!==J,xe=n.parent&&n.parent.parent&&VS(n.parent)&&Ere(n.parent.parent),tt=c.flags&134217728;for(;de!==J&&(de.kind===215||de.kind===216||D6(de))&&(wC(u)&&T!==bn||H&&!MB(u));)de=yD(de);let It=H||O||Ae||xe||tt||UYe(n,h)||T!==at&&T!==bn&&(!U||(T.flags&16387)!==0||kC(n)||k2e(n)||n.parent.kind===278)||n.parent.kind===232||h.kind===257&&h.exclamationToken||h.flags&16777216,Tn=It?H?PYe(T,h):T:T===at||T===bn?Oe:gg(T),un=Yv(n,T,Tn,de);if(!q2e(n)&&(T===at||T===bn)){if(un===at||un===bn)return ge&&(Fe(sa(h),_.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined,E(c),Ee(un)),Fe(n,_.Variable_0_implicitly_has_an_1_type,E(c),Ee(un))),PD(un)}else if(!It&&!xC(T)&&xC(un))return Fe(n,_.Variable_0_is_used_before_being_assigned,E(c)),T;return k?ky(un):un}function UYe(n,a){if(Wo(a)){let c=jn(n,Wo);return c&&nm(c)===nm(a)}}function VYe(n){var a;let c=n.parent;if(c){if(br(c)&&c.expression===n||Mu(c)&&c.isTypeOnly)return!1;let u=(a=c.parent)==null?void 0:a.parent;if(u&&Il(u)&&u.isTypeOnly)return!1}return!0}function jYe(n,a){return!!jn(n,c=>c===a?\"quit\":Ia(c)||c.parent&&Na(c.parent)&&!zc(c.parent)&&c.parent.initializer===c)}function HYe(n,a){return jn(n,c=>c===a?\"quit\":c===a.initializer||c===a.condition||c===a.incrementor||c===a.statement)}function xre(n){return jn(n,a=>!a||HH(a)?\"quit\":Wy(a,!1))}function WYe(n,a){if(R>=2||!(a.flags&34)||!a.valueDeclaration||Li(a.valueDeclaration)||a.valueDeclaration.parent.kind===295)return;let c=tm(a.valueDeclaration),u=jYe(n,c),p=xre(c);if(p){if(u){let h=!0;if(FT(c)){let T=cb(a.valueDeclaration,258);if(T&&T.parent===c){let k=HYe(n.parent,c);if(k){let O=Rr(k);O.flags|=8192;let H=O.capturedBlockScopeBindings||(O.capturedBlockScopeBindings=[]);Of(H,a),k===c.initializer&&(h=!1)}}}h&&(Rr(p).flags|=4096)}if(FT(c)){let h=cb(a.valueDeclaration,258);h&&h.parent===c&&JYe(n,c)&&(Rr(a.valueDeclaration).flags|=262144)}Rr(a.valueDeclaration).flags|=32768}u&&(Rr(a.valueDeclaration).flags|=16384)}function zYe(n,a){let c=Rr(n);return!!c&&ya(c.capturedBlockScopeBindings,fr(a))}function JYe(n,a){let c=n;for(;c.parent.kind===214;)c=c.parent;let u=!1;if(Um(c))u=!0;else if(c.parent.kind===221||c.parent.kind===222){let p=c.parent;u=p.operator===45||p.operator===46}return u?!!jn(c,p=>p===a?\"quit\":p===a.statement):!1}function Are(n,a){if(Rr(n).flags|=2,a.kind===169||a.kind===173){let c=a.parent;Rr(c).flags|=4}else Rr(a).flags|=4}function tCe(n){return OA(n)?n:Ia(n)?void 0:pa(n,tCe)}function nCe(n){let a=fr(n),c=gs(a);return Wr(c)===ir}function rCe(n,a,c){let u=a.parent;P0(u)&&!nCe(u)&&cR(n)&&n.flowNode&&!PB(n.flowNode,!1)&&Fe(n,c)}function KYe(n,a){Na(a)&&zc(a)&&$&&a.initializer&&Y8(a.initializer,n.pos)&&bf(a.parent)&&Fe(n,_.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class)}function kM(n){let a=kC(n),c=Ku(n,!0,!0),u=!1,p=!1;for(c.kind===173&&rCe(n,c,_.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);;){if(c.kind===216&&(c=Ku(c,!1,!p),u=!0),c.kind===164){c=Ku(c,!u,!1),p=!0;continue}break}if(KYe(n,c),p)Fe(n,_.this_cannot_be_referenced_in_a_computed_property_name);else switch(c.kind){case 264:Fe(n,_.this_cannot_be_referenced_in_a_module_or_namespace_body);break;case 263:Fe(n,_.this_cannot_be_referenced_in_current_location);break;case 173:iCe(n,c)&&Fe(n,_.this_cannot_be_referenced_in_constructor_arguments);break}!a&&u&&R<2&&Are(n,c);let h=Cre(n,!0,c);if(X){let T=zn(Ye);if(h===T&&u)Fe(n,_.The_containing_arrow_function_captures_the_global_value_of_this);else if(!h){let k=Fe(n,_.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation);if(!Li(c)){let O=Cre(c);O&&O!==T&&Ao(k,hr(c,_.An_outer_value_of_this_is_shadowed_by_this_container))}}}return h||Se}function Cre(n,a=!0,c=Ku(n,!1,!1)){let u=Yn(n);if(Ia(c)&&(!kre(n)||F0(c))){let p=Pt(c)||u&&YYe(c);if(!p){let h=XYe(c);if(u&&h){let T=Yi(h).symbol;T&&T.members&&T.flags&16&&(p=gs(T).thisType)}else cp(c)&&(p=gs(No(c.symbol)).thisType);p||(p=oCe(c))}if(p)return Yv(n,p)}if(Yr(c.parent)){let p=fr(c.parent),h=Ca(c)?zn(p):gs(p).thisType;return Yv(n,h)}if(Li(c))if(c.commonJsModuleIndicator){let p=fr(c);return p&&zn(p)}else{if(c.externalModuleIndicator)return Oe;if(a)return zn(Ye)}}function qYe(n){let a=Ku(n,!1,!1);if(Ia(a)){let c=ip(a);if(c.thisParameter)return RB(c.thisParameter)}if(Yr(a.parent)){let c=fr(a.parent);return Ca(a)?zn(c):gs(c).thisType}}function XYe(n){if(n.kind===215&&ar(n.parent)&&ic(n.parent)===3)return n.parent.left.expression.expression;if(n.kind===171&&n.parent.kind===207&&ar(n.parent.parent)&&ic(n.parent.parent)===6)return n.parent.parent.left.expression;if(n.kind===215&&n.parent.kind===299&&n.parent.parent.kind===207&&ar(n.parent.parent.parent)&&ic(n.parent.parent.parent)===6)return n.parent.parent.parent.left.expression;if(n.kind===215&&yl(n.parent)&&Re(n.parent.name)&&(n.parent.name.escapedText===\"value\"||n.parent.name.escapedText===\"get\"||n.parent.name.escapedText===\"set\")&&rs(n.parent.parent)&&Pa(n.parent.parent.parent)&&n.parent.parent.parent.arguments[2]===n.parent.parent&&ic(n.parent.parent.parent)===9)return n.parent.parent.parent.arguments[0].expression;if(Nc(n)&&Re(n.name)&&(n.name.escapedText===\"value\"||n.name.escapedText===\"get\"||n.name.escapedText===\"set\")&&rs(n.parent)&&Pa(n.parent.parent)&&n.parent.parent.arguments[2]===n.parent&&ic(n.parent.parent)===9)return n.parent.parent.arguments[0].expression}function YYe(n){let a=Vy(n);if(a&&a.kind===320){let u=a;if(u.parameters.length>0&&u.parameters[0].name&&u.parameters[0].name.escapedText===\"this\")return $r(u.parameters[0].type)}let c=e6(n);if(c&&c.typeExpression)return $r(c.typeExpression)}function iCe(n,a){return!!jn(n,c=>Ds(c)?\"quit\":c.kind===166&&c.parent===a)}function Ire(n){let a=n.parent.kind===210&&n.parent.expression===n,c=Ww(n,!0),u=c,p=!1,h=!1;if(!a){for(;u&&u.kind===216;)Mr(u,512)&&(h=!0),u=Ww(u,!0),p=R<2;u&&Mr(u,512)&&(h=!0)}let T=0;if(!u||!J(u)){let de=jn(n,Ae=>Ae===u?\"quit\":Ae.kind===164);return de&&de.kind===164?Fe(n,_.super_cannot_be_referenced_in_a_computed_property_name):a?Fe(n,_.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors):!u||!u.parent||!(Yr(u.parent)||u.parent.kind===207)?Fe(n,_.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions):Fe(n,_.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class),ve}if(!a&&c.kind===173&&rCe(n,u,_.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class),Ca(u)||a?(T=32,!a&&R>=2&&R<=8&&(Na(u)||oc(u))&&Jse(n.parent,de=>{(!Li(de)||kd(de))&&(Rr(de).flags|=8388608)})):T=16,Rr(n).flags|=T,u.kind===171&&h&&(Pu(n.parent)&&Um(n.parent)?Rr(u).flags|=256:Rr(u).flags|=128),p&&Are(n.parent,u),u.parent.kind===207)return R<2?(Fe(n,_.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher),ve):Se;let k=u.parent;if(!P0(k))return Fe(n,_.super_can_only_be_referenced_in_a_derived_class),ve;let O=gs(fr(k)),H=O&&_o(O)[0];if(!H)return ve;if(u.kind===173&&iCe(n,u))return Fe(n,_.super_cannot_be_referenced_in_constructor_arguments),ve;return T===32?Wr(O):uf(H,O.thisType);function J(de){return a?de.kind===173:Yr(de.parent)||de.parent.kind===207?Ca(de)?de.kind===171||de.kind===170||de.kind===174||de.kind===175||de.kind===169||de.kind===172:de.kind===171||de.kind===170||de.kind===174||de.kind===175||de.kind===169||de.kind===168||de.kind===173:!1}}function $Ye(n){return(n.kind===171||n.kind===174||n.kind===175)&&n.parent.kind===207?n.parent:n.kind===215&&n.parent.kind===299?n.parent.parent:void 0}function aCe(n){return Ur(n)&4&&n.target===ye?Ko(n)[0]:void 0}function QYe(n){return Ls(n,a=>a.flags&2097152?mn(a.types,aCe):aCe(a))}function oCe(n){if(n.kind===216)return;if(fB(n)){let c=bD(n);if(c){let u=c.thisParameter;if(u)return zn(u)}}let a=Yn(n);if(X||a){let c=$Ye(n);if(c){let p=o0(c,void 0),h=c,T=p;for(;T;){let k=QYe(T);if(k)return Oi(k,sre(M1(c)));if(h.parent.kind!==299)break;h=h.parent.parent,T=o0(h,void 0)}return Sd(p?yg(p):Ic(c))}let u=qy(n.parent);if(u.kind===223&&u.operatorToken.kind===63){let p=u.left;if(Us(p)){let{expression:h}=p;if(a&&Re(h)){let T=Gn(u);if(T.commonJsModuleIndicator&&Qf(h)===T.symbol)return}return Sd(Ic(h))}}}}function sCe(n){let a=n.parent;if(!fB(a))return;let c=ET(a);if(c&&c.arguments){let p=rie(c),h=a.parameters.indexOf(n);if(n.dotDotDotToken)return tie(p,h,p.length,Se,void 0,0);let T=Rr(c),k=T.resolvedSignature;T.resolvedSignature=As;let O=h<p.length?i0(Yi(p[h])):n.initializer?void 0:je;return T.resolvedSignature=k,O}let u=bD(a);if(u){let p=a.parameters.indexOf(n)-(F0(a)?1:0);return n.dotDotDotToken&&Os(a.parameters)===n?SD(u,p):tT(u,p)}}function Lre(n,a){let c=Cl(n)||(Yn(n)?T4(n):void 0);if(c)return $r(c);switch(n.kind){case 166:return sCe(n);case 205:return ZYe(n,a);case 169:if(Ca(n))return e$e(n,a)}}function ZYe(n,a){let c=n.parent.parent,u=n.propertyName||n.name,p=Lre(c,a)||c.kind!==205&&c.initializer&&ID(c,n.dotDotDotToken?64:0);if(!p||La(u)||Vw(u))return;if(c.name.kind===204){let T=DA(n.parent.elements,n);return T<0?void 0:fCe(p,T)}let h=pg(u);if(fh(h)){let T=Np(h);return Vc(p,T)}}function e$e(n,a){let c=ot(n.parent)&&Ru(n.parent,a);if(c)return eT(c,fr(n).escapedName)}function t$e(n,a){let c=n.parent;if(Jy(c)&&n===c.initializer){let u=Lre(c,a);if(u)return u;if(!(a&8)&&La(c.name)&&c.name.elements.length>0)return oo(c.name,!0,!1)}}function n$e(n,a){let c=Xd(n);if(c){let u=Dre(c,a);if(u){let p=pl(c);if(p&1){let h=(p&2)!==0;u.flags&1048576&&(u=jc(u,k=>!!c0(1,k,h)));let T=c0(1,u,(p&2)!==0);if(!T)return;u=T}if(p&2){let h=Ls(u,bg);return h&&Gr([h,bIe(h)])}return u}}}function r$e(n,a){let c=Ru(n,a);if(c){let u=bg(c);return u&&Gr([u,bIe(u)])}}function i$e(n,a){let c=Xd(n);if(c){let u=pl(c),p=Dre(c,a);if(p){let h=(u&2)!==0;return!n.asteriskToken&&p.flags&1048576&&(p=jc(p,T=>!!c0(1,T,h))),n.asteriskToken?p:c0(0,p,h)}}}function kre(n){let a=!1;for(;n.parent&&!Ia(n.parent);){if(ha(n.parent)&&(a||n.parent.initializer===n))return!0;Wo(n.parent)&&n.parent.initializer===n&&(a=!0),n=n.parent}return!1}function cCe(n,a){let c=!!(pl(a)&2),u=Dre(a,void 0);if(u)return c0(n,u,c)||void 0}function Dre(n,a){let c=Hx(n);if(c)return c;let u=Nre(n);if(u&&!rne(u))return qo(u);let p=ET(n);if(p)return Ru(p,a)}function lCe(n,a){let u=rie(n).indexOf(a);return u===-1?void 0:wre(n,u)}function wre(n,a){if(Dd(n))return a===0?ae:a===1?nAe(!1):Se;let c=Rr(n).resolvedSignature===yc?yc:MC(n);if(Au(n)&&a===0)return VB(c,n);let u=c.parameters.length-1;return Xl(c)&&a>=u?od(zn(c.parameters[u]),op(a-u),256):P_(c,a)}function a$e(n){let a=_ie(n);return a?HE(a):void 0}function o$e(n,a){if(n.parent.kind===212)return lCe(n.parent,a)}function s$e(n,a){let c=n.parent,{left:u,operatorToken:p,right:h}=c;switch(p.kind){case 63:case 76:case 75:case 77:return n===h?l$e(c):void 0;case 56:case 60:let T=Ru(c,a);return n===h&&(T&&T.pattern||!T&&!dce(c))?au(u):T;case 55:case 27:return n===h?Ru(c,a):void 0;default:return}}function c$e(n){if($p(n)&&n.symbol)return n.symbol;if(Re(n))return Qf(n);if(br(n)){let c=au(n.expression);return pi(n.name)?a(c,n.name):ja(c,n.name.escapedText)}if(Vs(n)){let c=Ic(n.argumentExpression);if(!fh(c))return;let u=au(n.expression);return ja(u,Np(c))}return;function a(c,u){let p=JB(u.escapedText,u);return p&&zre(c,p)}}function l$e(n){var a,c;let u=ic(n);switch(u){case 0:case 4:let p=c$e(n.left),h=p&&p.valueDeclaration;if(h&&(Na(h)||$d(h))){let O=Cl(h);return O&&Oi($r(O),Ai(p).mapper)||(Na(h)?h.initializer&&au(n.left):void 0)}return u===0?au(n.left):uCe(n);case 5:if(GB(n,u))return uCe(n);if(!$p(n.left)||!n.left.symbol)return au(n.left);{let O=n.left.symbol.valueDeclaration;if(!O)return;let H=Ga(n.left,Us),J=Cl(O);if(J)return $r(J);if(Re(H.expression)){let de=H.expression,Ae=zs(de,de.escapedText,111551,void 0,de.escapedText,!0);if(Ae){let xe=Ae.valueDeclaration&&Cl(Ae.valueDeclaration);if(xe){let tt=wh(H);if(tt!==void 0)return eT($r(xe),tt)}return}}return Yn(O)?void 0:au(n.left)}case 1:case 6:case 3:case 2:let T;u!==2&&(T=$p(n.left)?(a=n.left.symbol)==null?void 0:a.valueDeclaration:void 0),T||(T=(c=n.symbol)==null?void 0:c.valueDeclaration);let k=T&&Cl(T);return k?$r(k):void 0;case 7:case 8:case 9:return L.fail(\"Does not apply\");default:return L.assertNever(u)}}function GB(n,a=ic(n)){if(a===4)return!0;if(!Yn(n)||a!==5||!Re(n.left.expression))return!1;let c=n.left.expression.escapedText,u=zs(n.left,c,111551,void 0,void 0,!0,!0);return N6(u?.valueDeclaration)}function uCe(n){if(!n.symbol)return au(n.left);if(n.symbol.valueDeclaration){let p=Cl(n.symbol.valueDeclaration);if(p){let h=$r(p);if(h)return h}}let a=Ga(n.left,Us);if(!s_(Ku(a.expression,!1,!1)))return;let c=kM(a.expression),u=wh(a);return u!==void 0&&eT(c,u)||void 0}function u$e(n){return!!(ac(n)&262144&&!n.links.type&&Sm(n,0)>=0)}function eT(n,a,c){return Ls(n,u=>{var p;if(df(u)&&!u.declaration.nameType){let h=rp(u),T=bu(h)||h,k=c||ff(Gi(a));if(to(k,T))return nB(u,k)}else if(u.flags&3670016){let h=ja(u,a);if(h)return u$e(h)?void 0:zn(h);if(po(u)&&Wm(a)&&+a>=0){let T=LC(u,u.target.fixedLength,0,!1,!0);if(T)return T}return(p=$te(Qte(u),c||ff(Gi(a))))==null?void 0:p.type}},!0)}function dCe(n,a){if(L.assert(s_(n)),!(n.flags&33554432))return Rre(n,a)}function Rre(n,a){let c=n.parent,u=yl(n)&&Lre(n,a);if(u)return u;let p=o0(c,a);if(p){if(Ux(n)){let h=fr(n);return eT(p,h.escapedName,Ai(h).nameType)}if(n.name){let h=pg(n.name);return Ls(p,T=>{var k;return(k=$te(Qte(T),h))==null?void 0:k.type},!0)}}}function fCe(n,a){return n&&(a>=0&&eT(n,\"\"+a)||Ls(n,c=>po(c)?LC(c,0,0,!1,!0):Rie(1,c,Oe,void 0,!1),!0))}function d$e(n,a){let c=n.parent;return n===c.whenTrue||n===c.whenFalse?Ru(c,a):void 0}function f$e(n,a,c){let u=o0(n.openingElement.tagName,c),p=HB(tA(n));if(!(u&&!Zo(u)&&p&&p!==\"\"))return;let h=bR(n.children),T=h.indexOf(a),k=eT(u,p);return k&&(h.length===1?k:Ls(k,O=>Kv(O)?od(O,op(T)):O,!0))}function _$e(n,a){let c=n.parent;return d6(c)?Ru(n,a):Hg(c)?f$e(c,n,a):void 0}function _Ce(n,a){if(Sp(n)){let c=o0(n.parent,a);return!c||Zo(c)?void 0:eT(c,n.name.escapedText)}else return Ru(n.parent,a)}function DM(n){switch(n.kind){case 10:case 8:case 9:case 14:case 110:case 95:case 104:case 79:case 155:return!0;case 208:case 214:return DM(n.expression);case 291:return!n.expression||DM(n.expression)}return!1}function p$e(n,a){return sYe(a,n)||Wne(a,Qi(on(Pr(n.properties,c=>!!c.symbol&&c.kind===299&&DM(c.initializer)&&mD(a,c.symbol.escapedName)),c=>[()=>KM(c.initializer),c.symbol.escapedName]),on(Pr(Jo(a),c=>{var u;return!!(c.flags&16777216)&&!!((u=n?.symbol)!=null&&u.members)&&!n.symbol.members.has(c.escapedName)&&mD(a,c.escapedName)}),c=>[()=>Oe,c.escapedName])),to,a)}function m$e(n,a){return Wne(a,Qi(on(Pr(n.properties,c=>!!c.symbol&&c.kind===288&&mD(a,c.symbol.escapedName)&&(!c.initializer||DM(c.initializer))),c=>[c.initializer?()=>KM(c.initializer):()=>pe,c.symbol.escapedName]),on(Pr(Jo(a),c=>{var u;return!!(c.flags&16777216)&&!!((u=n?.symbol)!=null&&u.members)&&!n.symbol.members.has(c.escapedName)&&mD(a,c.escapedName)}),c=>[()=>Oe,c.escapedName])),to,a)}function o0(n,a){let c=s_(n)?dCe(n,a):Ru(n,a),u=BB(c,n,a);if(u&&!(a&&a&2&&u.flags&8650752)){let p=Ls(u,Eu,!0);return p.flags&1048576&&rs(n)?p$e(n,p):p.flags&1048576&&K0(n)?m$e(n,p):p}}function BB(n,a,c){if(n&&Js(n,465829888)){let u=M1(a);if(u&&c&1&&vt(u.inferences,qZe))return UB(n,u.nonFixingMapper);if(u?.returnMapper){let p=UB(n,u.returnMapper);return p.flags&1048576&&Qb(p.types,oe)&&Qb(p.types,z)?jc(p,h=>h!==oe&&h!==z):p}}return n}function UB(n,a){return n.flags&465829888?Oi(n,a):n.flags&1048576?Gr(on(n.types,c=>UB(c,a)),0):n.flags&2097152?so(on(n.types,c=>UB(c,a))):n}function Ru(n,a){var c,u;if(n.flags&33554432)return;let p=mCe(n,!a);if(p>=0)return Mc[p];let{parent:h}=n;switch(h.kind){case 257:case 166:case 169:case 168:case 205:return t$e(n,a);case 216:case 250:return n$e(n,a);case 226:return i$e(h,a);case 220:return r$e(h,a);case 210:case 211:return lCe(h,n);case 167:return a$e(h);case 213:case 231:return Ch(h.type)?Ru(h,a):$r(h.type);case 223:return s$e(n,a);case 299:case 300:return Rre(h,a);case 301:return Ru(h.parent,a);case 206:{let T=h,k=o0(T,a),O=(u=(c=Rr(T)).firstSpreadIndex)!=null?u:c.firstSpreadIndex=Yc(T.elements,Km),H=DA(T.elements,n);return fCe(k,O<0||H<O?H:-1)}case 224:return d$e(n,a);case 236:return L.assert(h.parent.kind===225),o$e(h.parent,n);case 214:{if(Yn(h)){if(zW(h))return $r(JW(h));let T=x0(h);if(T&&!Ch(T.typeExpression.type))return $r(T.typeExpression.type)}return Ru(h,a)}case 232:return Ru(h,a);case 235:return $r(h.type);case 274:return ad(h);case 291:return _$e(h,a);case 288:case 290:return _Ce(h,a);case 283:case 282:return y$e(h,a)}}function pCe(n){wM(n,Ru(n,void 0),!0)}function wM(n,a,c){Is[Hh]=n,Mc[Hh]=a,mm[Hh]=c,Hh++}function vD(){Hh--}function mCe(n,a){for(let c=Hh-1;c>=0;c--)if(n===Is[c]&&(a||!mm[c]))return c;return-1}function h$e(n,a){T_[mv]=n,Cb[mv]=a,mv++}function g$e(){mv--}function M1(n){for(let a=mv-1;a>=0;a--)if(AT(n,T_[a]))return Cb[a]}function y$e(n,a){if(Xm(n)&&a!==4){let c=mCe(n.parent,!a);if(c>=0)return Mc[c]}return wre(n,0)}function VB(n,a){return $Ce(a)!==0?v$e(n,a):T$e(n,a)}function v$e(n,a){let c=die(n,ue);c=hCe(a,tA(a),c);let u=s0(Qd.IntrinsicAttributes,a);return Ro(u)||(c=QP(u,c)),c}function b$e(n,a){if(n.compositeSignatures){let u=[];for(let p of n.compositeSignatures){let h=qo(p);if(Zo(h))return h;let T=Vc(h,a);if(!T)return;u.push(T)}return so(u)}let c=qo(n);return Zo(c)?c:Vc(c,a)}function E$e(n){if(OC(n.tagName)){let c=ACe(n),u=ZB(n,c);return HE(u)}let a=Ic(n.tagName);if(a.flags&128){let c=xCe(a,n);if(!c)return ve;let u=ZB(n,c);return HE(u)}return a}function hCe(n,a,c){let u=V$e(a);if(u){let p=gs(u),h=E$e(n);if(u.flags&524288){let T=Ai(u).typeParameters;if(Fn(T)>=2){let k=Sy([h,c],T,2,Yn(n));return Jx(u,k)}}if(Fn(p.typeParameters)>=2){let T=Sy([h,c],p.typeParameters,2,Yn(n));return _g(p,T)}}return c}function T$e(n,a){let c=tA(a),u=j$e(c),p=u===void 0?die(n,ue):u===\"\"?qo(n):b$e(n,u);if(!p)return u&&Fn(a.attributes.properties)&&Fe(a,_.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property,Gi(u)),ue;if(p=hCe(a,c,p),Zo(p))return p;{let h=p,T=s0(Qd.IntrinsicClassAttributes,a);if(!Ro(T)){let O=yy(T.symbol),H=qo(n),J;if(O){let de=Sy([H],O,Mp(O),Yn(a));J=Oi(T,Wu(O,de))}else J=T;h=QP(J,h)}let k=s0(Qd.IntrinsicAttributes,a);return Ro(k)||(h=QP(k,h)),h}}function S$e(n){return Uf(Y,\"noImplicitAny\")?ou(n,(a,c)=>a===c||!a?a:Sxe(a.typeParameters,c.typeParameters)?C$e(a,c):void 0):void 0}function x$e(n,a,c){if(!n||!a)return n||a;let u=Gr([zn(n),Oi(zn(a),c)]);return qE(n,u)}function A$e(n,a,c){let u=xd(n),p=xd(a),h=u>=p?n:a,T=h===n?a:n,k=h===n?u:p,O=jp(n)||jp(a),H=O&&!jp(h),J=new Array(k+(H?1:0));for(let de=0;de<k;de++){let Ae=tT(h,de);h===a&&(Ae=Oi(Ae,c));let xe=tT(T,de)||ue;T===a&&(xe=Oi(xe,c));let tt=Gr([Ae,xe]),It=O&&!H&&de===k-1,Tn=de>=Vp(h)&&de>=Vp(T),un=de>=u?void 0:FC(n,de),Nn=de>=p?void 0:FC(a,de),en=un===Nn?un:un?Nn?void 0:un:Nn,cn=wo(1|(Tn&&!It?16777216:0),en||`arg${de}`);cn.links.type=It?nu(tt):tt,J[de]=cn}if(H){let de=wo(1,\"args\");de.links.type=nu(P_(T,k)),T===a&&(de.links.type=Oi(de.links.type,c)),J[k]=de}return J}function C$e(n,a){let c=n.typeParameters||a.typeParameters,u;n.typeParameters&&a.typeParameters&&(u=Wu(a.typeParameters,n.typeParameters));let p=n.declaration,h=A$e(n,a,u),T=x$e(n.thisParameter,a.thisParameter,u),k=Math.max(n.minArgumentCount,a.minArgumentCount),O=Am(p,c,T,h,void 0,void 0,k,(n.flags|a.flags)&39);return O.compositeKind=2097152,O.compositeSignatures=Qi(n.compositeKind===2097152&&n.compositeSignatures||[n],[a]),u&&(O.mapper=n.compositeKind===2097152&&n.mapper&&n.compositeSignatures?Jv(n.mapper,u):u),O}function Ore(n,a){let c=xa(n,0),u=Pr(c,p=>!I$e(p,a));return u.length===1?u[0]:S$e(u)}function I$e(n,a){let c=0;for(;c<a.parameters.length;c++){let u=a.parameters[c];if(u.initializer||u.questionToken||u.dotDotDotToken||JR(u))break}return a.parameters.length&&G0(a.parameters[0])&&c--,!jp(n)&&xd(n)<c}function Nre(n){return a2(n)||s_(n)?bD(n):void 0}function bD(n){L.assert(n.kind!==171||s_(n));let a=Zk(n);if(a)return a;let c=o0(n,1);if(!c)return;if(!(c.flags&1048576))return Ore(c,n);let u,p=c.types;for(let h of p){let T=Ore(h,n);if(T)if(!u)u=[T];else if(vM(u[0],T,!1,!0,!0,sD))u.push(T);else return}if(u)return u.length===1?u[0]:Exe(u[0],u)}function L$e(n,a){R<2&&Hc(n,Y.downlevelIteration?1536:1024);let c=Yi(n.expression,a);return wy(33,c,Oe,n.expression)}function k$e(n){return n.isSpread?od(n.type,rt):n.type}function RC(n){return n.kind===205&&!!n.initializer||n.kind===223&&n.operatorToken.kind===63}function gCe(n,a,c){let u=n.elements,p=u.length,h=[],T=[];pCe(n);let k=Um(n),O=GC(n),H=o0(n,void 0),J=!!H&&yh(H,IC),de=!1;for(let Ae=0;Ae<p;Ae++){let xe=u[Ae];if(xe.kind===227){R<2&&Hc(xe,Y.downlevelIteration?1536:1024);let tt=Yi(xe.expression,a,c);if(Kv(tt))h.push(tt),T.push(8);else if(k){let It=fg(tt,rt)||Rie(65,tt,Oe,void 0,!1)||ue;h.push(It),T.push(4)}else h.push(wy(33,tt,Oe,xe.expression)),T.push(4)}else if(Pe&&xe.kind===229)de=!0,h.push(kt),T.push(2);else{let tt=BC(xe,a,c);if(h.push(ao(tt,!0,de)),T.push(de?2:1),J&&a&&a&2&&!(a&4)&&$f(xe)){let It=M1(n);L.assert(It),v2e(It,xe,tt)}}}return vD(),k?ap(h,T):yCe(c||O||J?ap(h,T,O):nu(h.length?Gr(Tl(h,(Ae,xe)=>T[xe]&8?Ay(Ae,rt)||Se:Ae),2):U?Vt:je,O))}function yCe(n){if(!(Ur(n)&4))return n;let a=n.literalType;return a||(a=n.literalType=Wxe(n),a.objectFlags|=147456),a}function D$e(n){switch(n.kind){case 164:return w$e(n);case 79:return Wm(n.escapedText);case 8:case 10:return Wm(n.text);default:return!1}}function w$e(n){return ul(vg(n),296)}function vg(n){let a=Rr(n.expression);if(!a.resolvedType){if((Rd(n.parent.parent)||Yr(n.parent.parent)||ku(n.parent.parent))&&ar(n.expression)&&n.expression.operatorToken.kind===101&&n.parent.kind!==174&&n.parent.kind!==175)return a.resolvedType=ve;if(a.resolvedType=Yi(n.expression),Na(n.parent)&&!zc(n.parent)&&_u(n.parent.parent)){let c=tm(n.parent.parent),u=xre(c);u&&(Rr(u).flags|=4096,Rr(n).flags|=32768,Rr(n.parent.parent).flags|=32768)}(a.resolvedType.flags&98304||!ul(a.resolvedType,402665900)&&!to(a.resolvedType,Kr))&&Fe(n,_.A_computed_property_name_must_be_of_type_string_number_symbol_or_any)}return a.resolvedType}function R$e(n){var a;let c=(a=n.declarations)==null?void 0:a[0];return Wm(n.escapedName)||c&&zl(c)&&D$e(c.name)}function vCe(n){var a;let c=(a=n.declarations)==null?void 0:a[0];return gR(n)||c&&zl(c)&&ts(c.name)&&ul(vg(c.name),4096)}function Pre(n,a,c,u){let p=[];for(let T=a;T<c.length;T++){let k=c[T];(u===ae&&!vCe(k)||u===rt&&R$e(k)||u===j&&vCe(k))&&p.push(zn(c[T]))}let h=p.length?Gr(p,2):Oe;return Fp(u,h,GC(n))}function Mre(n){L.assert((n.flags&2097152)!==0,\"Should only get Alias here.\");let a=Ai(n);if(!a.immediateTarget){let c=Uu(n);if(!c)return L.fail();a.immediateTarget=L_(c,!0)}return a.immediateTarget}function O$e(n,a){var c;let u=Um(n);Mrt(n,u);let p=U?Ua():void 0,h=Ua(),T=[],k=Ki;pCe(n);let O=o0(n,void 0),H=O&&O.pattern&&(O.pattern.kind===203||O.pattern.kind===207),J=GC(n),de=J?8:0,Ae=Yn(n)&&!B6(n),xe=Ij(n),tt=!O&&Ae&&!xe,It=ke,Tn=!1,un=!1,Nn=!1,en=!1;for(let Jt of n.properties)Jt.name&&ts(Jt.name)&&vg(Jt.name);let cn=0;for(let Jt of n.properties){let Cn=fr(Jt),Rn=Jt.name&&Jt.name.kind===164?vg(Jt.name):void 0;if(Jt.kind===299||Jt.kind===300||s_(Jt)){let Br=Jt.kind===299?NIe(Jt,a):Jt.kind===300?BC(!u&&Jt.objectAssignmentInitializer?Jt.objectAssignmentInitializer:Jt.name,a):PIe(Jt,a);if(Ae){let wa=di(Jt);wa?(wu(Br,wa,Jt),Br=wa):xe&&xe.typeExpression&&wu(Br,$r(xe.typeExpression),Jt)}It|=Ur(Br)&458752;let Hr=Rn&&fh(Rn)?Rn:void 0,qi=Hr?wo(4|Cn.flags,Np(Hr),de|4096):wo(4|Cn.flags,Cn.escapedName,de);if(Hr&&(qi.links.nameType=Hr),u)(Jt.kind===299&&RC(Jt.initializer)||Jt.kind===300&&Jt.objectAssignmentInitializer)&&(qi.flags|=16777216);else if(H&&!(Ur(O)&512)){let wa=ja(O,Cn.escapedName);wa?qi.flags|=wa.flags&16777216:!Y.suppressExcessPropertyErrors&&!Cm(O,ae)&&Fe(Jt.name,_.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1,E(Cn),Ee(O))}if(qi.declarations=Cn.declarations,qi.parent=Cn.parent,Cn.valueDeclaration&&(qi.valueDeclaration=Cn.valueDeclaration),qi.links.type=Br,qi.links.target=Cn,Cn=qi,p?.set(qi.escapedName,qi),O&&a&&a&2&&!(a&4)&&(Jt.kind===299||Jt.kind===171)&&$f(Jt)){let wa=M1(n);L.assert(wa);let Xc=Jt.kind===299?Jt.initializer:Jt;v2e(wa,Xc,Br)}}else if(Jt.kind===301){R<2&&Hc(Jt,2),T.length>0&&(k=e0(k,rr(),n.symbol,It,J),T=[],h=Ua(),un=!1,Nn=!1,en=!1);let Br=O_(Yi(Jt.expression));if(RM(Br)){let Hr=kne(Br,J);if(p&&ECe(Hr,p,Jt),cn=T.length,Ro(k))continue;k=e0(k,Hr,n.symbol,It,J)}else Fe(Jt,_.Spread_types_may_only_be_created_from_object_types),k=ve;continue}else L.assert(Jt.kind===174||Jt.kind===175),zC(Jt);Rn&&!(Rn.flags&8576)?to(Rn,Kr)&&(to(Rn,rt)?Nn=!0:to(Rn,j)?en=!0:un=!0,u&&(Tn=!0)):h.set(Cn.escapedName,Cn),T.push(Cn)}if(vD(),H){let Jt=jn(O.pattern.parent,Rn=>Rn.kind===257||Rn.kind===223||Rn.kind===166);if(jn(n,Rn=>Rn===Jt||Rn.kind===301).kind!==301)for(let Rn of Jo(O))!h.get(Rn.escapedName)&&!ja(k,Rn.escapedName)&&(Rn.flags&16777216||Fe(Rn.valueDeclaration||((c=zr(Rn,Zp))==null?void 0:c.links.bindingElement),_.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value),h.set(Rn.escapedName,Rn),T.push(Rn))}if(Ro(k))return ve;if(k!==Ki)return T.length>0&&(k=e0(k,rr(),n.symbol,It,J),T=[],h=Ua(),un=!1,Nn=!1),Ls(k,Jt=>Jt===Ki?rr():Jt);return rr();function rr(){let Jt=[];un&&Jt.push(Pre(n,cn,T,ae)),Nn&&Jt.push(Pre(n,cn,T,rt)),en&&Jt.push(Pre(n,cn,T,j));let Cn=ls(n.symbol,h,Je,Je,Jt);return Cn.objectFlags|=It|128|131072,tt&&(Cn.objectFlags|=4096),Tn&&(Cn.objectFlags|=512),u&&(Cn.pattern=n),Cn}}function RM(n){let a=m2e(Ls(n,Ty));return!!(a.flags&126615553||a.flags&3145728&&Ji(a.types,RM))}function N$e(n){Ure(n)}function P$e(n,a){return zC(n),OM(n)||Se}function M$e(n){Ure(n.openingElement),OC(n.closingElement.tagName)?Gre(n.closingElement):Yi(n.closingElement.tagName),jB(n)}function F$e(n,a){return zC(n),OM(n)||Se}function G$e(n){Ure(n.openingFragment);let a=Gn(n);return AW(Y)&&(Y.jsxFactory||a.pragmas.has(\"jsx\"))&&!Y.jsxFragmentFactory&&!a.pragmas.has(\"jsxfrag\")&&Fe(n,Y.jsxFactory?_.The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option:_.An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments),jB(n),OM(n)||Se}function Fre(n){return jl(n,\"-\")}function OC(n){return n.kind===79&&GI(n.escapedText)}function bCe(n,a){return n.initializer?BC(n.initializer,a):pe}function B$e(n,a){let c=n.attributes,u=Ru(c,0),p=U?Ua():void 0,h=Ua(),T=kc,k=!1,O,H=!1,J=2048,de=HB(tA(n));for(let tt of c.properties){let It=tt.symbol;if(Sp(tt)){let Tn=bCe(tt,a);J|=Ur(Tn)&458752;let un=wo(4|It.flags,It.escapedName);if(un.declarations=It.declarations,un.parent=It.parent,It.valueDeclaration&&(un.valueDeclaration=It.valueDeclaration),un.links.type=Tn,un.links.target=It,h.set(un.escapedName,un),p?.set(un.escapedName,un),tt.name.escapedText===de&&(H=!0),u){let Nn=ja(u,It.escapedName);Nn&&Nn.declarations&&Sv(Nn)&&Xh(tt.name,Nn.declarations,tt.name.escapedText)}}else{L.assert(tt.kind===290),h.size>0&&(T=e0(T,xe(),c.symbol,J,!1),h=Ua());let Tn=O_(Ic(tt.expression,a));Zo(Tn)&&(k=!0),RM(Tn)?(T=e0(T,Tn,c.symbol,J,!1),p&&ECe(Tn,p,tt)):(Fe(tt.expression,_.Spread_types_may_only_be_created_from_object_types),O=O?so([O,Tn]):Tn)}}k||h.size>0&&(T=e0(T,xe(),c.symbol,J,!1));let Ae=n.parent.kind===281?n.parent:void 0;if(Ae&&Ae.openingElement===n&&Ae.children.length>0){let tt=jB(Ae,a);if(!k&&de&&de!==\"\"){H&&Fe(c,_._0_are_specified_twice_The_attribute_named_0_will_be_overwritten,Gi(de));let It=o0(n.attributes,void 0),Tn=It&&eT(It,de),un=wo(4,de);un.links.type=tt.length===1?tt[0]:Tn&&yh(Tn,IC)?ap(tt):nu(Gr(tt)),un.valueDeclaration=D.createPropertySignature(void 0,Gi(de),void 0,void 0),go(un.valueDeclaration,c),un.valueDeclaration.symbol=un;let Nn=Ua();Nn.set(de,un),T=e0(T,ls(c.symbol,Nn,Je,Je,Je),c.symbol,J,!1)}}if(k)return Se;if(O&&T!==kc)return so([O,T]);return O||(T===kc?xe():T);function xe(){J|=ke;let tt=ls(c.symbol,h,Je,Je,Je);return tt.objectFlags|=J|128|131072,tt}}function jB(n,a){let c=[];for(let u of n.children)if(u.kind===11)u.containsOnlyTriviaWhiteSpaces||c.push(ae);else{if(u.kind===291&&!u.expression)continue;c.push(BC(u,a))}return c}function ECe(n,a,c){for(let u of Jo(n))if(!(u.flags&16777216)){let p=a.get(u.escapedName);if(p){let h=Fe(p.valueDeclaration,_._0_is_specified_more_than_once_so_this_usage_will_be_overwritten,Gi(p.escapedName));Ao(h,hr(c,_.This_spread_always_overwrites_this_property))}}}function U$e(n,a){return B$e(n.parent,a)}function s0(n,a){let c=tA(a),u=c&&Gd(c),p=u&&yd(u,n,788968);return p?gs(p):ve}function Gre(n){let a=Rr(n);if(!a.resolvedSymbol){let c=s0(Qd.IntrinsicElements,n);if(Ro(c))return ge&&Fe(n,_.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists,Gi(Qd.IntrinsicElements)),a.resolvedSymbol=Ht;{if(!Re(n.tagName))return L.fail();let u=ja(c,n.tagName.escapedText);return u?(a.jsxFlags|=1,a.resolvedSymbol=u):fg(c,ae)?(a.jsxFlags|=2,a.resolvedSymbol=c.symbol):(Fe(n,_.Property_0_does_not_exist_on_type_1,vr(n.tagName),\"JSX.\"+Qd.IntrinsicElements),a.resolvedSymbol=Ht)}}return a.resolvedSymbol}function Bre(n){let a=n&&Gn(n),c=a&&Rr(a);if(c&&c.jsxImplicitImportContainer===!1)return;if(c&&c.jsxImplicitImportContainer)return c.jsxImplicitImportContainer;let u=p4(_4(Y,a),Y);if(!u)return;let h=$s(Y)===1?_.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option:_.Cannot_find_module_0_or_its_corresponding_type_declarations,T=qc(n,u,h,n),k=T&&T!==Ht?No(Ac(T)):void 0;return c&&(c.jsxImplicitImportContainer=k||!1),k}function tA(n){let a=n&&Rr(n);if(a&&a.jsxNamespace)return a.jsxNamespace;if(!a||a.jsxNamespace!==!1){let u=Bre(n);if(!u||u===Ht){let p=Rb(n);u=zs(n,p,1920,void 0,p,!1)}if(u){let p=Ac(yd(Gd(Ac(u)),Qd.JSX,1920));if(p&&p!==Ht)return a&&(a.jsxNamespace=p),p}a&&(a.jsxNamespace=!1)}let c=Ac(nD(Qd.JSX,1920,void 0));if(c!==Ht)return c}function TCe(n,a){let c=a&&yd(a.exports,n,788968),u=c&&gs(c),p=u&&Jo(u);if(p){if(p.length===0)return\"\";if(p.length===1)return p[0].escapedName;p.length>1&&c.declarations&&Fe(c.declarations[0],_.The_global_type_JSX_0_may_not_have_more_than_one_property,Gi(n))}}function V$e(n){return n&&yd(n.exports,Qd.LibraryManagedAttributes,788968)}function j$e(n){return TCe(Qd.ElementAttributesPropertyNameContainer,n)}function HB(n){return TCe(Qd.ElementChildrenAttributeNameContainer,n)}function SCe(n,a){if(n.flags&4)return[As];if(n.flags&128){let p=xCe(n,a);return p?[ZB(a,p)]:(Fe(a,_.Property_0_does_not_exist_on_type_1,n.value,\"JSX.\"+Qd.IntrinsicElements),Je)}let c=Eu(n),u=xa(c,1);return u.length===0&&(u=xa(c,0)),u.length===0&&c.flags&1048576&&(u=Gte(on(c.types,p=>SCe(p,a)))),u}function xCe(n,a){let c=s0(Qd.IntrinsicElements,a);if(!Ro(c)){let u=n.value,p=ja(c,Bs(u));if(p)return zn(p);let h=fg(c,ae);return h||void 0}return Se}function H$e(n,a,c){if(n===1){let p=ICe(c);p&&Df(a,p,Zu,c.tagName,_.Its_return_type_0_is_not_a_valid_JSX_element,u)}else if(n===0){let p=CCe(c);p&&Df(a,p,Zu,c.tagName,_.Its_instance_type_0_is_not_a_valid_JSX_element,u)}else{let p=ICe(c),h=CCe(c);if(!p||!h)return;let T=Gr([p,h]);Df(a,T,Zu,c.tagName,_.Its_element_type_0_is_not_a_valid_JSX_element,u)}function u(){let p=Qc(c.tagName);return da(void 0,_._0_cannot_be_used_as_a_JSX_component,p)}}function ACe(n){L.assert(OC(n.tagName));let a=Rr(n);if(!a.resolvedJsxElementAttributesType){let c=Gre(n);return a.jsxFlags&1?a.resolvedJsxElementAttributesType=zn(c)||ve:a.jsxFlags&2?a.resolvedJsxElementAttributesType=fg(s0(Qd.IntrinsicElements,n),ae)||ve:a.resolvedJsxElementAttributesType=ve}return a.resolvedJsxElementAttributesType}function CCe(n){let a=s0(Qd.ElementClass,n);if(!Ro(a))return a}function OM(n){return s0(Qd.Element,n)}function ICe(n){let a=OM(n);if(a)return Gr([a,ln])}function W$e(n){let a=s0(Qd.IntrinsicElements,n);return a?Jo(a):Je}function z$e(n){(Y.jsx||0)===0&&Fe(n,_.Cannot_use_JSX_unless_the_jsx_flag_is_provided),OM(n)===void 0&&ge&&Fe(n,_.JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist)}function Ure(n){let a=Au(n);if(a&&Frt(n),z$e(n),!Bre(n)){let c=Lo&&Y.jsx===2?_.Cannot_find_name_0:void 0,u=Rb(n),p=a?n.tagName:n,h;if(US(n)&&u===\"null\"||(h=zs(p,u,111551,c,u,!0)),h&&(h.isReferenced=67108863,!Y.verbatimModuleSyntax&&h.flags&2097152&&!nd(h)&&Hb(h)),US(n)){let T=Gn(n),k=h1(T);k&&zs(p,k,111551,c,k,!0)}}if(a){let c=n,u=MC(c);tU(u,n),H$e($Ce(c),qo(u),c)}}function Vre(n,a,c){if(n.flags&524288){if(qb(n,a)||jx(n,a)||qk(a)&&Cm(n,ae)||c&&Fre(a))return!0}else if(n.flags&3145728&&NM(n)){for(let u of n.types)if(Vre(u,a,c))return!0}return!1}function NM(n){return!!(n.flags&524288&&!(Ur(n)&512)||n.flags&67108864||n.flags&1048576&&vt(n.types,NM)||n.flags&2097152&&Ji(n.types,NM))}function J$e(n,a){if(Brt(n),n.expression){let c=Yi(n.expression,a);return n.dotDotDotToken&&c!==Se&&!_f(c)&&Fe(n,_.JSX_spread_child_must_be_an_array_type),c}else return ve}function WB(n){return n.valueDeclaration?G_(n.valueDeclaration):0}function jre(n){if(n.flags&8192||ac(n)&4)return!0;if(Yn(n.valueDeclaration)){let a=n.valueDeclaration.parent;return a&&ar(a)&&ic(a)===3}}function Hre(n,a,c,u,p,h=!0){let T=h?n.kind===163?n.right:n.kind===202?n:n.kind===205&&n.propertyName?n.propertyName:n.name:void 0;return LCe(n,a,c,u,p,T)}function LCe(n,a,c,u,p,h){let T=Ef(p,c);if(a){if(R<2&&kCe(p))return h&&Fe(h,_.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword),!1;if(T&256)return h&&Fe(h,_.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression,E(p),Ee(N1(p))),!1}if(T&256&&kCe(p)&&(zw(n)||sce(n)||cm(n.parent)&&N6(n.parent.parent))){let O=Nh(ju(p));if(O&&Gnt(n))return h&&Fe(h,_.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor,E(p),l_(O.name)),!1}if(!(T&24))return!0;if(T&8){let O=Nh(ju(p));return Hie(n,O)?!0:(h&&Fe(h,_.Property_0_is_private_and_only_accessible_within_class_1,E(p),Ee(N1(p))),!1)}if(a)return!0;let k=zLe(n,O=>{let H=gs(fr(O));return c2e(H,p,c)});return!k&&(k=K$e(n),k=k&&c2e(k,p,c),T&32||!k)?(h&&Fe(h,_.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses,E(p),Ee(N1(p)||u)),!1):T&32?!0:(u.flags&262144&&(u=u.isThisType?eu(u):bu(u)),!u||!BE(u,k)?(h&&Fe(h,_.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_class_2,E(p),Ee(k),Ee(u)),!1):!0)}function K$e(n){let a=q$e(n),c=a?.type&&$r(a.type);if(c&&c.flags&262144&&(c=eu(c)),c&&Ur(c)&7)return Bx(c)}function q$e(n){let a=Ku(n,!1,!1);return a&&Ia(a)?F0(a):void 0}function kCe(n){return!!gM(n,a=>!(a.flags&8192))}function NC(n){return sp(Yi(n),n)}function zB(n){return!!(iu(n)&50331648)}function Wre(n){return zB(n)?yg(n):n}function X$e(n,a){let c=bc(n)?qd(n):void 0;if(n.kind===104){Fe(n,_.The_value_0_cannot_be_used_here,\"null\");return}if(c!==void 0&&c.length<100){if(Re(n)&&c===\"undefined\"){Fe(n,_.The_value_0_cannot_be_used_here,\"undefined\");return}Fe(n,a&16777216?a&33554432?_._0_is_possibly_null_or_undefined:_._0_is_possibly_undefined:_._0_is_possibly_null,c)}else Fe(n,a&16777216?a&33554432?_.Object_is_possibly_null_or_undefined:_.Object_is_possibly_undefined:_.Object_is_possibly_null)}function Y$e(n,a){Fe(n,a&16777216?a&33554432?_.Cannot_invoke_an_object_which_is_possibly_null_or_undefined:_.Cannot_invoke_an_object_which_is_possibly_undefined:_.Cannot_invoke_an_object_which_is_possibly_null)}function DCe(n,a,c){if(U&&n.flags&2){if(bc(a)){let p=qd(a);if(p.length<100)return Fe(a,_._0_is_of_type_unknown,p),ve}return Fe(a,_.Object_is_of_type_unknown),ve}let u=iu(n);if(u&50331648){c(a,u);let p=yg(n);return p.flags&229376?ve:p}return n}function sp(n,a){return DCe(n,a,X$e)}function wCe(n,a){let c=sp(n,a);if(c.flags&16384){if(bc(a)){let u=qd(a);if(Re(a)&&u===\"undefined\")return Fe(a,_.The_value_0_cannot_be_used_here,u),c;if(u.length<100)return Fe(a,_._0_is_possibly_undefined,u),c}Fe(a,_.Object_is_possibly_undefined)}return c}function RCe(n,a){return n.flags&32?$$e(n,a):Jre(n,n.expression,NC(n.expression),n.name,a)}function $$e(n,a){let c=Yi(n.expression),u=dD(c,n.expression);return SB(Jre(n,n.expression,sp(u,n.expression),n.name,a),n,u!==c)}function OCe(n,a){let c=G6(n)&&LT(n.left)?sp(kM(n.left),n.left):NC(n.left);return Jre(n,n.left,c,n.right,a)}function NCe(n){for(;n.parent.kind===214;)n=n.parent;return Ih(n.parent)&&n.parent.expression===n}function JB(n,a){for(let c=Zc(a);c;c=Zc(c)){let{symbol:u}=c,p=hR(u,n),h=u.members&&u.members.get(p)||u.exports&&u.exports.get(p);if(h)return h}}function Q$e(n){if(!Zc(n))return an(n,_.Private_identifiers_are_not_allowed_outside_class_bodies);if(!Mz(n.parent)){if(!Dh(n))return an(n,_.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression);let a=ar(n.parent)&&n.parent.operatorToken.kind===101;if(!KB(n)&&!a)return an(n,_.Cannot_find_name_0,vr(n))}return!1}function Z$e(n){Q$e(n);let a=KB(n);return a&&MM(a,void 0,!1),Se}function KB(n){if(!Dh(n))return;let a=Rr(n);return a.resolvedSymbol===void 0&&(a.resolvedSymbol=JB(n.escapedText,n)),a.resolvedSymbol}function zre(n,a){return ja(n,a.escapedName)}function eQe(n,a,c){let u,p=Jo(n);p&&mn(p,T=>{let k=T.valueDeclaration;if(k&&zl(k)&&pi(k.name)&&k.name.escapedText===a.escapedText)return u=T,!0});let h=Cf(a);if(u){let T=L.checkDefined(u.valueDeclaration),k=L.checkDefined(Zc(T));if(c?.valueDeclaration){let O=c.valueDeclaration,H=Zc(O);if(L.assert(!!H),jn(H,J=>k===J)){let J=Fe(a,_.The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_private_identifier_with_the_same_spelling,h,Ee(n));return Ao(J,hr(O,_.The_shadowing_declaration_of_0_is_defined_here,h),hr(T,_.The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here,h)),!0}}return Fe(a,_.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier,h,Cf(k.name||nN)),!0}return!1}function PCe(n,a){return(id(a)||zw(n)&&np(a))&&Ku(n,!0,!1)===Op(a)}function Jre(n,a,c,u,p){let h=Rr(a).resolvedSymbol,T=xT(n),k=Eu(T!==0||NCe(n)?Sd(c):c),O=Zo(k)||k===Qe,H;if(pi(u)){R<99&&(T!==0&&Hc(n,1048576),T!==1&&Hc(n,524288));let de=JB(u.escapedText,u);if(T&&de&&de.valueDeclaration&&Nc(de.valueDeclaration)&&an(u,_.Cannot_assign_to_private_method_0_Private_methods_are_not_writable,vr(u)),O){if(de)return Ro(k)?ve:k;if(!Zc(u))return an(u,_.Private_identifiers_are_not_allowed_outside_class_bodies),Se}if(H=de?zre(c,de):void 0,!H&&eQe(c,u,de))return ve;H&&H.flags&65536&&!(H.flags&32768)&&T!==1&&Fe(n,_.Private_accessor_was_defined_without_a_getter)}else{if(O)return Re(a)&&h&&FB(h,n),Ro(k)?ve:k;H=ja(k,u.escapedText,!1,n.kind===163)}Re(a)&&h&&(d_(Y)||!(H&&(MD(H)||H.flags&8&&n.parent.kind===302))||U0(Y)&&eCe(n))&&FB(h,n);let J;if(H){Sv(H)&&xne(n,H)&&H.declarations&&Xh(u,H.declarations,u.escapedText),tQe(H,n,u),MM(H,n,jCe(a,h)),Rr(n).resolvedSymbol=H;let de=YI(n);if(Hre(n,a.kind===106,de,k,H),LIe(n,H,T))return Fe(u,_.Cannot_assign_to_0_because_it_is_a_read_only_property,vr(u)),ve;J=PCe(n,H)?at:de?mC(H):zn(H)}else{let de=!pi(u)&&(T===0||!Zb(c)||lL(c))?jx(k,u.escapedText):void 0;if(!(de&&de.type)){let Ae=Kre(n,c.symbol,!0);return!Ae&&iD(c)?Se:c.symbol===Ye?(Ye.exports.has(u.escapedText)&&Ye.exports.get(u.escapedText).flags&418?Fe(u,_.Property_0_does_not_exist_on_type_1,Gi(u.escapedText),Ee(c)):ge&&Fe(u,_.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature,Ee(c)),Se):(u.escapedText&&!xv(n)&&GCe(u,lL(c)?k:c,Ae),ve)}de.isReadonly&&(Um(n)||GH(n))&&Fe(n,_.Index_signature_in_type_0_only_permits_reading,Ee(k)),J=Y.noUncheckedIndexedAccess&&!Um(n)?Gr([de.type,Ge]):de.type,Y.noPropertyAccessFromIndexSignature&&br(n)&&Fe(u,_.Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0,Gi(u.escapedText)),de.declaration&&G_(de.declaration)&268435456&&Xh(u,[de.declaration],u.escapedText)}return MCe(n,H,J,u,p)}function Kre(n,a,c){let u=Gn(n);if(u&&Y.checkJs===void 0&&u.checkJsDirective===void 0&&(u.scriptKind===1||u.scriptKind===2)){let p=mn(a?.declarations,Gn);return!(u!==p&&p&&gm(p))&&!(c&&a&&a.flags&32)&&!(n&&c&&br(n)&&n.expression.kind===108)}return!1}function MCe(n,a,c,u,p){let h=xT(n);if(h===1)return KE(c,!!(a&&a.flags&16777216));if(a&&!(a.flags&98311)&&!(a.flags&8192&&c.flags&1048576)&&!yU(a.declarations))return c;if(c===at)return Fx(n,a);c=Sre(c,n,p);let T=!1;if(U&&_e&&Us(n)&&n.expression.kind===108){let O=a&&a.valueDeclaration;if(O&&wLe(O)&&!Ca(O)){let H=yD(n);H.kind===173&&H.parent===O.parent&&!(O.flags&16777216)&&(T=!0)}}else U&&a&&a.valueDeclaration&&br(a.valueDeclaration)&&tR(a.valueDeclaration)&&yD(n)===yD(a.valueDeclaration)&&(T=!0);let k=Yv(n,c,T?gg(c):c);return T&&!xC(c)&&xC(k)?(Fe(u,_.Property_0_is_used_before_being_assigned,E(a)),c):h?ky(k):k}function tQe(n,a,c){let{valueDeclaration:u}=n;if(!u||Gn(a).isDeclarationFile)return;let p,h=vr(c);FCe(a)&&!YJe(u)&&!(Us(a)&&Us(a.expression))&&!$h(u,c)&&!(Nc(u)&&wg(u)&32)&&(Y.useDefineForClassFields||!nQe(n))?p=Fe(c,_.Property_0_is_used_before_its_initialization,h):u.kind===260&&a.parent.kind!==180&&!(u.flags&16777216)&&!$h(u,c)&&(p=Fe(c,_.Class_0_used_before_its_declaration,h)),p&&Ao(p,hr(u,_._0_is_declared_here,h))}function FCe(n){return!!jn(n,a=>{switch(a.kind){case 169:return!0;case 299:case 171:case 174:case 175:case 301:case 164:case 236:case 291:case 288:case 289:case 290:case 283:case 230:case 294:return!1;case 216:case 241:return Va(a.parent)&&oc(a.parent.parent)?!0:\"quit\";default:return Dh(a)?!1:\"quit\"}})}function nQe(n){if(!(n.parent.flags&32))return!1;let a=zn(n.parent);for(;;){if(a=a.symbol&&rQe(a),!a)return!1;let c=ja(a,n.escapedName);if(c&&c.valueDeclaration)return!0}}function rQe(n){let a=_o(n);if(a.length!==0)return so(a)}function GCe(n,a,c){let u,p;if(!pi(n)&&a.flags&1048576&&!(a.flags&134348796)){for(let T of a.types)if(!ja(T,n.escapedText)&&!jx(T,n.escapedText)){u=da(u,_.Property_0_does_not_exist_on_type_1,os(n),Ee(T));break}}if(BCe(n.escapedText,a)){let T=os(n),k=Ee(a);u=da(u,_.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead,T,k,k+\".\"+T)}else{let T=wD(a);if(T&&ja(T,n.escapedText))u=da(u,_.Property_0_does_not_exist_on_type_1,os(n),Ee(a)),p=hr(n,_.Did_you_forget_to_use_await);else{let k=os(n),O=Ee(a),H=oQe(k,a);if(H!==void 0)u=da(u,_.Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2_or_later,k,O,H);else{let J=qre(n,a);if(J!==void 0){let de=fc(J),Ae=c?_.Property_0_may_not_exist_on_type_1_Did_you_mean_2:_.Property_0_does_not_exist_on_type_1_Did_you_mean_2;u=da(u,Ae,k,O,de),p=J.valueDeclaration&&hr(J.valueDeclaration,_._0_is_declared_here,de)}else{let de=iQe(a)?_.Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom:_.Property_0_does_not_exist_on_type_1;u=da(Xte(u,a),de,k,O)}}}}let h=Lh(Gn(n),n,u);p&&Ao(h,p),ey(!c||u.code!==_.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code,h)}function iQe(n){return Y.lib&&!Y.lib.includes(\"dom\")&&TYe(n,a=>a.symbol&&/^(EventTarget|Node|((HTML[a-zA-Z]*)?Element))$/.test(Gi(a.symbol.escapedName)))&&mh(n)}function BCe(n,a){let c=a.symbol&&ja(zn(a.symbol),n);return c!==void 0&&!!c.valueDeclaration&&Ca(c.valueDeclaration)}function aQe(n){let a=Cf(n),u=oH().get(a);return u&&pae(u.keys())}function oQe(n,a){let c=Eu(a).symbol;if(!c)return;let u=fc(c),h=oH().get(u);if(h){for(let[T,k]of h)if(ya(k,n))return T}}function UCe(n,a){return PM(n,Jo(a),106500)}function qre(n,a){let c=Jo(a);if(typeof n!=\"string\"){let u=n.parent;br(u)&&(c=Pr(c,p=>HCe(u,a,p))),n=vr(n)}return PM(n,c,111551)}function VCe(n,a){let c=Ta(n)?n:vr(n),u=Jo(a),p=c===\"for\"?wr(u,h=>fc(h)===\"htmlFor\"):c===\"class\"?wr(u,h=>fc(h)===\"className\"):void 0;return p??PM(c,u,111551)}function Xre(n,a){let c=qre(n,a);return c&&fc(c)}function Yre(n,a,c){return L.assert(a!==void 0,\"outername should always be defined\"),Fb(n,a,c,void 0,a,!1,!1,!0,(p,h,T)=>{L.assertEqual(a,h,\"name should equal outerName\");let k=yd(p,h,T);if(k)return k;let O;return p===Ne?O=Zi([\"string\",\"number\",\"boolean\",\"object\",\"bigint\",\"symbol\"],J=>p.has(J.charAt(0).toUpperCase()+J.slice(1))?wo(524288,J):void 0).concat(lo(p.values())):O=lo(p.values()),PM(Gi(h),O,T)})}function sQe(n,a,c){let u=Yre(n,a,c);return u&&fc(u)}function qB(n,a){return a.exports&&PM(vr(n),sy(a),2623475)}function cQe(n,a){let c=qB(n,a);return c&&fc(c)}function lQe(n,a,c){function u(T){let k=qb(n,T);if(k){let O=F1(zn(k));return!!O&&Vp(O)>=1&&to(c,P_(O,0))}return!1}let p=Um(a)?\"set\":\"get\";if(!u(p))return;let h=kR(a.expression);return h===void 0?h=p:h+=\".\"+p,h}function uQe(n,a){let c=a.types.filter(u=>!!(u.flags&128));return $C(n.value,c,u=>u.value)}function PM(n,a,c){return $C(n,a,u);function u(p){let h=fc(p);if(!na(h,'\"')){if(p.flags&c)return h;if(p.flags&2097152){let T=tg(p);if(T&&T.flags&c)return h}}}}function MM(n,a,c){let u=n&&n.flags&106500&&n.valueDeclaration;if(!u)return;let p=cd(u,8),h=n.valueDeclaration&&zl(n.valueDeclaration)&&pi(n.valueDeclaration.name);if(!(!p&&!h)&&!(a&&hW(a)&&!(n.flags&65536))){if(c){let T=jn(a,Ds);if(T&&T.symbol===n)return}(ac(n)&1?Ai(n).target:n).isReferenced=67108863}}function jCe(n,a){return n.kind===108||!!a&&bc(n)&&a===Qf(Yd(n))}function dQe(n,a){switch(n.kind){case 208:return $re(n,n.expression.kind===106,a,Sd(Yi(n.expression)));case 163:return $re(n,!1,a,Sd(Yi(n.left)));case 202:return $re(n,!1,a,$r(n))}}function HCe(n,a,c){return Qre(n,n.kind===208&&n.expression.kind===106,!1,a,c)}function $re(n,a,c,u){if(Zo(u))return!0;let p=ja(u,c);return!!p&&Qre(n,a,!1,u,p)}function Qre(n,a,c,u,p){if(Zo(u))return!0;if(p.valueDeclaration&&xu(p.valueDeclaration)){let h=Zc(p.valueDeclaration);return!Jl(n)&&!!jn(n,T=>T===h)}return LCe(n,a,c,u,p)}function fQe(n){let a=n.initializer;if(a.kind===258){let c=a.declarations[0];if(c&&!La(c.name))return fr(c)}else if(a.kind===79)return Qf(a)}function _Qe(n){return tu(n).length===1&&!!Cm(n,rt)}function pQe(n){let a=vs(n);if(a.kind===79){let c=Qf(a);if(c.flags&3){let u=n,p=n.parent;for(;p;){if(p.kind===246&&u===p.statement&&fQe(p)===c&&_Qe(au(p.expression)))return!0;u=p,p=p.parent}}}return!1}function mQe(n,a){return n.flags&32?hQe(n,a):WCe(n,NC(n.expression),a)}function hQe(n,a){let c=Yi(n.expression),u=dD(c,n.expression);return SB(WCe(n,sp(u,n.expression),a),n,u!==c)}function WCe(n,a,c){let u=xT(n)!==0||NCe(n)?Sd(a):a,p=n.argumentExpression,h=Yi(p);if(Ro(u)||u===Qe)return u;if(hie(u)&&!es(p))return Fe(p,_.A_const_enum_member_can_only_be_accessed_using_a_string_literal),ve;let T=pQe(p)?rt:h,k=Um(n)?4|(Zb(u)&&!lL(u)?2:0):32,O=Ay(u,T,k,n)||ve;return qIe(MCe(n,Rr(n).resolvedSymbol,O,p,c),n)}function zCe(n){return Ih(n)||PT(n)||Au(n)}function nA(n){return zCe(n)&&mn(n.typeArguments,qa),n.kind===212?Yi(n.template):Au(n)?Yi(n.attributes):n.kind!==167&&mn(n.arguments,a=>{Yi(a)}),As}function Up(n){return nA(n),jt}function gQe(n,a,c){let u,p,h=0,T,k=-1,O;L.assert(!a.length);for(let H of n){let J=H.declaration&&fr(H.declaration),de=H.declaration&&H.declaration.parent;!p||J===p?u&&de===u?T=T+1:(u=de,T=h):(T=h=a.length,u=de),p=J,_K(H)?(k++,O=k,h++):O=T,a.splice(O,0,c?bJe(H,c):H)}}function XB(n){return!!n&&(n.kind===227||n.kind===234&&n.isSpread)}function YB(n){return Yc(n,XB)}function JCe(n){return!!(n.flags&16384)}function yQe(n){return!!(n.flags&49155)}function $B(n,a,c,u=!1){let p,h=!1,T=xd(c),k=Vp(c);if(n.kind===212)if(p=a.length,n.template.kind===225){let O=To(n.template.templateSpans);h=rc(O.literal)||!!O.literal.isUnterminated}else{let O=n.template;L.assert(O.kind===14),h=!!O.isUnterminated}else if(n.kind===167)p=ZCe(n,c);else if(Au(n)){if(h=n.attributes.end===n.end,h)return!0;p=k===0?a.length:1,T=a.length===0?T:1,k=Math.min(k,1)}else if(n.arguments){p=u?a.length+1:a.length,h=n.arguments.end===n.end;let O=YB(a);if(O>=0)return O>=Vp(c)&&(jp(c)||O<xd(c))}else return L.assert(n.kind===211),Vp(c)===0;if(!jp(c)&&p>T)return!1;if(h||p>=k)return!0;for(let O=p;O<k;O++){let H=P_(c,O);if(jc(H,Yn(n)&&!U?yQe:JCe).flags&131072)return!1}return!0}function Zre(n,a){let c=Fn(n.typeParameters),u=Mp(n.typeParameters);return!vt(a)||a.length>=u&&a.length<=c}function F1(n){return ED(n,0,!1)}function KCe(n){return ED(n,0,!1)||ED(n,1,!1)}function ED(n,a,c){if(n.flags&524288){let u=R_(n);if(c||u.properties.length===0&&u.indexInfos.length===0){if(a===0&&u.callSignatures.length===1&&u.constructSignatures.length===0)return u.callSignatures[0];if(a===1&&u.constructSignatures.length===1&&u.callSignatures.length===0)return u.constructSignatures[0]}}}function qCe(n,a,c,u){let p=_D(n.typeParameters,n,0,u),h=xD(a),T=c&&(h&&h.flags&262144?c.nonFixingMapper:c.mapper),k=T?$x(a,T):a;return rre(k,n,(O,H)=>{gh(p.inferences,O,H)}),c||ire(a,n,(O,H)=>{gh(p.inferences,O,H,128)}),eD(n,gre(p),Yn(a.declaration))}function vQe(n,a,c,u){let p=VB(a,n),h=rA(n.attributes,p,u,c);return gh(u.inferences,h,p),gre(u)}function XCe(n){if(!n)return yt;let a=Yi(n);return pI(n.parent)?yg(a):Jl(n.parent)?ere(a):a}function eie(n,a,c,u,p){if(Au(n))return vQe(n,a,u,p);if(n.kind!==167){let O=Ji(a.typeParameters,J=>!!jE(J)),H=Ru(n,O?8:0);if(H){let J=qo(a);if(XE(J)){let de=M1(n);if(!(!O&&Ru(n,8)!==H)){let It=sre(GXe(de,1)),Tn=Oi(H,It),un=F1(Tn),Nn=un&&un.typeParameters?HE(ine(un,un.typeParameters)):Tn;gh(p.inferences,Nn,J,128)}let xe=_D(a.typeParameters,a,p.flags),tt=Oi(H,de&&de.returnMapper);gh(xe.inferences,tt,J),p.returnMapper=vt(xe.inferences,iA)?sre(jXe(xe)):void 0}}}let h=AD(a),T=h?Math.min(xd(a)-1,c.length):c.length;if(h&&h.flags&262144){let O=wr(p.inferences,H=>H.typeParameter===h);O&&(O.impliedArity=Yc(c,XB,T)<0?c.length-T:void 0)}let k=Yb(a);if(k&&XE(k)){let O=QCe(n);gh(p.inferences,XCe(O),k)}for(let O=0;O<T;O++){let H=c[O];if(H.kind!==229&&!(u&32&&dre(H))){let J=P_(a,O);if(XE(J)){let de=rA(H,J,p,u);gh(p.inferences,de,J)}}}if(h&&XE(h)){let O=tie(c,T,c.length,h,p,u);gh(p.inferences,O,h)}return gre(p)}function YCe(n){return n.flags&1048576?Ls(n,YCe):n.flags&1||vB(bu(n)||n)?n:po(n)?ap(Ko(n),n.target.elementFlags,!1,n.target.labeledElementDeclarations):ap([n],[8])}function tie(n,a,c,u,p,h){if(a>=c-1){let J=n[c-1];if(XB(J))return YCe(J.kind===234?J.type:rA(J.expression,u,p,h))}let T=[],k=[],O=[],H=tM(u);for(let J=a;J<c;J++){let de=n[J];if(XB(de)){let Ae=de.kind===234?de.type:Yi(de.expression);Kv(Ae)?(T.push(Ae),k.push(8)):(T.push(wy(33,Ae,Oe,de.kind===227?de.expression:de)),k.push(4))}else{let Ae=od(u,op(J-a),256),xe=rA(de,Ae,p,h),tt=H||Js(Ae,406978556);T.push(tt?Hu(xe):i0(xe)),k.push(1)}de.kind===234&&de.tupleNameSource&&O.push(de.tupleNameSource)}return ap(T,k,H,Fn(O)===Fn(T)?O:void 0)}function nie(n,a,c,u){let p=Yn(n.declaration),h=n.typeParameters,T=Sy(on(a,$r),h,Mp(h),p),k;for(let O=0;O<a.length;O++){L.assert(h[O]!==void 0,\"Should not call checkTypeArguments with too many type arguments\");let H=eu(h[O]);if(H){let J=c&&u?()=>da(void 0,_.Type_0_does_not_satisfy_the_constraint_1):void 0,de=u||_.Type_0_does_not_satisfy_the_constraint_1;k||(k=Wu(h,T));let Ae=T[O];if(!wu(Ae,uf(Oi(H,k),Ae),c?a[O]:void 0,de,J))return}}return T}function $Ce(n){if(OC(n.tagName))return 2;let a=Eu(Yi(n.tagName));return Fn(xa(a,1))?0:Fn(xa(a,0))?1:2}function bQe(n,a,c,u,p,h,T){let k=VB(a,n),O=rA(n.attributes,k,void 0,u);return H()&&Bne(O,k,c,p?n.tagName:void 0,n.attributes,void 0,h,T);function H(){var J;if(Bre(n))return!0;let de=Xm(n)||FS(n)&&!OC(n.tagName)?Yi(n.tagName):void 0;if(!de)return!0;let Ae=xa(de,0);if(!Fn(Ae))return!0;let xe=nke(n);if(!xe)return!0;let tt=uc(xe,111551,!0,!1,n);if(!tt)return!0;let It=zn(tt),Tn=xa(It,0);if(!Fn(Tn))return!0;let un=!1,Nn=0;for(let cn of Tn){let rr=P_(cn,0),Jt=xa(rr,0);if(Fn(Jt))for(let Cn of Jt){if(un=!0,jp(Cn))return!0;let Rn=xd(Cn);Rn>Nn&&(Nn=Rn)}}if(!un)return!0;let en=1/0;for(let cn of Ae){let rr=Vp(cn);rr<en&&(en=rr)}if(en<=Nn)return!0;if(p){let cn=hr(n.tagName,_.Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3,qd(n.tagName),en,qd(xe),Nn),rr=(J=Zf(n.tagName))==null?void 0:J.valueDeclaration;rr&&Ao(cn,hr(rr,_._0_is_declared_here,qd(n.tagName))),T&&T.skipLogging&&(T.errors||(T.errors=[])).push(cn),T.skipLogging||Lo.add(cn)}return!1}}function FM(n,a,c,u,p,h,T){let k={errors:void 0,skipLogging:!0};if(Au(n))return bQe(n,c,u,p,h,T,k)?void 0:(L.assert(!h||!!k.errors,\"jsx should have errors when reporting errors\"),k.errors||Je);let O=Yb(c);if(O&&O!==yt&&!(z0(n)||Pa(n)&&Pu(n.expression))){let xe=QCe(n),tt=XCe(xe),It=h?xe||n:void 0,Tn=_.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1;if(!Df(tt,O,u,It,Tn,T,k))return L.assert(!h||!!k.errors,\"this parameter should have errors when reporting errors\"),k.errors||Je}let H=_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1,J=AD(c),de=J?Math.min(xd(c)-1,a.length):a.length;for(let xe=0;xe<de;xe++){let tt=a[xe];if(tt.kind!==229){let It=P_(c,xe),Tn=rA(tt,It,void 0,p),un=p&4?EM(Tn):Tn;if(!Bne(un,It,u,h?tt:void 0,tt,H,T,k))return L.assert(!h||!!k.errors,\"parameter should have errors when reporting errors\"),Ae(tt,un,It),k.errors||Je}}if(J){let xe=tie(a,de,a.length,J,void 0,p),tt=a.length-de,It=h?tt===0?n:tt===1?a[de]:om(GM(n,xe),a[de].pos,a[a.length-1].end):void 0;if(!Df(xe,J,u,It,H,void 0,k))return L.assert(!h||!!k.errors,\"rest parameter should have errors when reporting errors\"),Ae(It,xe,J),k.errors||Je}return;function Ae(xe,tt,It){if(xe&&h&&k.errors&&k.errors.length){if(DD(It))return;let Tn=DD(tt);Tn&&Bp(Tn,It,u)&&Ao(k.errors[0],hr(xe,_.Did_you_forget_to_use_await))}}}function QCe(n){let a=n.kind===210?n.expression:n.kind===212?n.tag:void 0;if(a){let c=ql(a);if(Us(c))return c.expression}}function GM(n,a,c,u){let p=fm.createSyntheticExpression(a,c,u);return it(p,n),go(p,n),p}function rie(n){if(n.kind===212){let u=n.template,p=[GM(u,_Ke())];return u.kind===225&&mn(u.templateSpans,h=>{p.push(h.expression)}),p}if(n.kind===167)return EQe(n);if(Au(n))return n.attributes.properties.length>0||Xm(n)&&n.parent.children.length>0?[n.attributes]:Je;let a=n.arguments||Je,c=YB(a);if(c>=0){let u=a.slice(0,c);for(let p=c;p<a.length;p++){let h=a[p],T=h.kind===227&&(Dn?Yi(h.expression):Ic(h.expression));T&&po(T)?mn(Ko(T),(k,O)=>{var H;let J=T.target.elementFlags[O],de=GM(h,J&4?nu(k):k,!!(J&12),(H=T.target.labeledElementDeclarations)==null?void 0:H[O]);u.push(de)}):u.push(h)}return u}return a}function EQe(n){let a=n.expression,c=_ie(n);if(c){let u=[];for(let p of c.parameters){let h=zn(p);u.push(GM(a,h))}return u}return L.fail()}function ZCe(n,a){return Y.experimentalDecorators?TQe(n,a):2}function TQe(n,a){switch(n.parent.kind){case 260:case 228:return 1;case 169:return rm(n.parent)?3:2;case 171:case 174:case 175:return R===0||a.parameters.length<=2?2:3;case 166:return 3;default:return L.fail()}}function eIe(n,a){let c,u,p=Gn(n);if(br(n.expression)){let h=w0(p,n.expression.name);c=h.start,u=a?h.length:n.end-c}else{let h=w0(p,n.expression);c=h.start,u=a?h.length:n.end-c}return{start:c,length:u,sourceFile:p}}function TD(n,a,c,u,p,h){if(Pa(n)){let{sourceFile:T,start:k,length:O}=eIe(n);return\"message\"in a?al(T,k,O,a,c,u,p,h):yH(T,a)}else return\"message\"in a?hr(n,a,c,u,p,h):Lh(Gn(n),n,a)}function SQe(n){if(!Pa(n)||!Re(n.expression))return!1;let a=zs(n.expression,n.expression.escapedText,111551,void 0,void 0,!1),c=a?.valueDeclaration;if(!c||!ha(c)||!a2(c.parent)||!z0(c.parent.parent)||!Re(c.parent.parent.expression))return!1;let u=_ne(!1);return u?Zf(c.parent.parent.expression,!0)===u:!1}function tIe(n,a,c,u){var p;let h=YB(c);if(h>-1)return hr(c[h],_.A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter);let T=Number.POSITIVE_INFINITY,k=Number.NEGATIVE_INFINITY,O=Number.NEGATIVE_INFINITY,H=Number.POSITIVE_INFINITY,J;for(let It of a){let Tn=Vp(It),un=xd(It);Tn<T&&(T=Tn,J=It),k=Math.max(k,un),Tn<c.length&&Tn>O&&(O=Tn),c.length<un&&un<H&&(H=un)}let de=vt(a,jp),Ae=de?T:T<k?T+\"-\"+k:T,xe=!de&&Ae===1&&c.length===0&&SQe(n);if(xe&&Yn(n))return TD(n,_.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments);let tt=du(n)?de?_.The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0:_.The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0:de?_.Expected_at_least_0_arguments_but_got_1:xe?_.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise:_.Expected_0_arguments_but_got_1;if(T<c.length&&c.length<k){if(u){let It=da(void 0,_.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments,c.length,O,H);return It=da(It,u),TD(n,It)}return TD(n,_.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments,c.length,O,H)}else if(c.length<T){let It;if(u){let un=da(void 0,tt,Ae,c.length);un=da(un,u),It=TD(n,un)}else It=TD(n,tt,Ae,c.length);let Tn=(p=J?.declaration)==null?void 0:p.parameters[J.thisParameter?c.length+1:c.length];if(Tn){let un=hr(Tn,La(Tn.name)?_.An_argument_matching_this_binding_pattern_was_not_provided:Fm(Tn)?_.Arguments_for_the_rest_parameter_0_were_not_provided:_.An_argument_for_0_was_not_provided,Tn.name?La(Tn.name)?void 0:vr(Yd(Tn.name)):c.length);return Ao(It,un)}return It}else{let It=D.createNodeArray(c.slice(k)),Tn=Vo(It).pos,un=To(It).end;if(un===Tn&&un++,om(It,Tn,un),u){let Nn=da(void 0,tt,Ae,c.length);return Nn=da(Nn,u),jw(Gn(n),It,Nn)}return RA(Gn(n),It,tt,Ae,c.length)}}function xQe(n,a,c,u){let p=c.length;if(a.length===1){let k=a[0],O=Mp(k.typeParameters),H=Fn(k.typeParameters);if(u){let J=da(void 0,_.Expected_0_type_arguments_but_got_1,O<H?O+\"-\"+H:O,p);return J=da(J,u),jw(Gn(n),c,J)}return RA(Gn(n),c,_.Expected_0_type_arguments_but_got_1,O<H?O+\"-\"+H:O,p)}let h=-1/0,T=1/0;for(let k of a){let O=Mp(k.typeParameters),H=Fn(k.typeParameters);O>p?T=Math.min(T,O):H<p&&(h=Math.max(h,H))}if(h!==-1/0&&T!==1/0){if(u){let k=da(void 0,_.No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments,p,h,T);return k=da(k,u),jw(Gn(n),c,k)}return RA(Gn(n),c,_.No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments,p,h,T)}if(u){let k=da(void 0,_.Expected_0_type_arguments_but_got_1,h===-1/0?T:h,p);return k=da(k,u),jw(Gn(n),c,k)}return RA(Gn(n),c,_.Expected_0_type_arguments_but_got_1,h===-1/0?T:h,p)}function PC(n,a,c,u,p,h){let T=n.kind===212,k=n.kind===167,O=Au(n),H=!B&&!c,J;!k&&!OA(n)&&(J=n.typeArguments,(T||O||n.expression.kind!==106)&&mn(J,qa));let de=c||[];if(gQe(a,de,p),!de.length)return H&&Lo.add(TD(n,_.Call_target_does_not_contain_any_signatures)),Up(n);let Ae=rie(n),xe=de.length===1&&!de[0].typeParameters,tt=!k&&!xe&&vt(Ae,$f)?4:0;tt|=u&32;let It,Tn,un,Nn,en=!!(u&16)&&n.kind===210&&n.arguments.hasTrailingComma;if(de.length>1&&(Nn=rr(de,hm,xe,en)),Nn||(Nn=rr(de,Zu,xe,en)),Nn)return Nn;if(Nn=AQe(n,de,Ae,!!c,u),Rr(n).resolvedSignature=Nn,H)if(It)if(It.length===1||It.length>3){let Jt=It[It.length-1],Cn;It.length>3&&(Cn=da(Cn,_.The_last_overload_gave_the_following_error),Cn=da(Cn,_.No_overload_matches_this_call)),h&&(Cn=da(Cn,h));let Rn=FM(n,Ae,Jt,Zu,0,!0,()=>Cn);if(Rn)for(let Br of Rn)Jt.declaration&&It.length>3&&Ao(Br,hr(Jt.declaration,_.The_last_overload_is_declared_here)),cn(Jt,Br),Lo.add(Br);else L.fail(\"No error for last overload signature\")}else{let Jt=[],Cn=0,Rn=Number.MAX_VALUE,Br=0,Hr=0;for(let Hd of It){let In=FM(n,Ae,Hd,Zu,0,!0,()=>da(void 0,_.Overload_0_of_1_2_gave_the_following_error,Hr+1,de.length,ne(Hd)));In?(In.length<=Rn&&(Rn=In.length,Br=Hr),Cn=Math.max(Cn,In.length),Jt.push(In)):L.fail(\"No error for 3 or fewer overload signatures\"),Hr++}let qi=Cn>1?Jt[Br]:t_(Jt);L.assert(qi.length>0,\"No errors reported for 3 or fewer overload signatures\");let wa=da(on(qi,qse),_.No_overload_matches_this_call);h&&(wa=da(wa,h));let Xc=[...Uo(qi,Hd=>Hd.relatedInformation)],pf;if(Ji(qi,Hd=>Hd.start===qi[0].start&&Hd.length===qi[0].length&&Hd.file===qi[0].file)){let{file:Hd,start:ji,length:In}=qi[0];pf={file:Hd,start:ji,length:In,code:wa.code,category:wa.category,messageText:wa,relatedInformation:Xc}}else pf=Lh(Gn(n),n,wa,Xc);cn(It[0],pf),Lo.add(pf)}else if(Tn)Lo.add(tIe(n,[Tn],Ae,h));else if(un)nie(un,n.typeArguments,!0,h);else{let Jt=Pr(a,Cn=>Zre(Cn,J));Jt.length===0?Lo.add(xQe(n,a,J,h)):Lo.add(tIe(n,Jt,Ae,h))}return Nn;function cn(Jt,Cn){var Rn,Br;let Hr=It,qi=Tn,wa=un,Xc=((Br=(Rn=Jt.declaration)==null?void 0:Rn.symbol)==null?void 0:Br.declarations)||Je,Hd=Xc.length>1?wr(Xc,ji=>Ds(ji)&&Pf(ji.body)):void 0;if(Hd){let ji=ip(Hd),In=!ji.typeParameters;rr([ji],Zu,In)&&Ao(Cn,hr(Hd,_.The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_are_not_externally_visible))}It=Hr,Tn=qi,un=wa}function rr(Jt,Cn,Rn,Br=!1){if(It=void 0,Tn=void 0,un=void 0,Rn){let Hr=Jt[0];if(vt(J)||!$B(n,Ae,Hr,Br))return;if(FM(n,Ae,Hr,Cn,0,!1,void 0)){It=[Hr];return}return Hr}for(let Hr=0;Hr<Jt.length;Hr++){let qi=Jt[Hr];if(!Zre(qi,J)||!$B(n,Ae,qi,Br))continue;let wa,Xc;if(qi.typeParameters){let pf;if(vt(J)){if(pf=nie(qi,J,!1),!pf){un=qi;continue}}else Xc=_D(qi.typeParameters,qi,Yn(n)?2:0),pf=eie(n,qi,Ae,tt|8,Xc),tt|=Xc.flags&4?8:0;if(wa=eD(qi,pf,Yn(qi.declaration),Xc&&Xc.inferredTypeParameters),AD(qi)&&!$B(n,Ae,wa,Br)){Tn=wa;continue}}else wa=qi;if(FM(n,Ae,wa,Cn,tt,!1,void 0)){(It||(It=[])).push(wa);continue}if(tt){if(tt=u&32,Xc){let pf=eie(n,qi,Ae,tt,Xc);if(wa=eD(qi,pf,Yn(qi.declaration),Xc.inferredTypeParameters),AD(qi)&&!$B(n,Ae,wa,Br)){Tn=wa;continue}}if(FM(n,Ae,wa,Cn,tt,!1,void 0)){(It||(It=[])).push(wa);continue}}return Jt[Hr]=wa,wa}}}function AQe(n,a,c,u,p){return L.assert(a.length>0),zC(n),u||a.length===1||a.some(h=>!!h.typeParameters)?LQe(n,a,c,p):CQe(a)}function CQe(n){let a=Zi(n,O=>O.thisParameter),c;a.length&&(c=nIe(a,a.map(UM)));let{min:u,max:p}=Nle(n,IQe),h=[];for(let O=0;O<p;O++){let H=Zi(n,J=>Xl(J)?O<J.parameters.length-1?J.parameters[O]:To(J.parameters):O<J.parameters.length?J.parameters[O]:void 0);L.assert(H.length!==0),h.push(nIe(H,Zi(n,J=>tT(J,O))))}let T=Zi(n,O=>Xl(O)?To(O.parameters):void 0),k=0;if(T.length!==0){let O=nu(Gr(Zi(n,Bxe),2));h.push(rIe(T,O)),k|=1}return n.some(_K)&&(k|=2),Am(n[0].declaration,void 0,c,h,so(n.map(qo)),void 0,u,k)}function IQe(n){let a=n.parameters.length;return Xl(n)?a-1:a}function nIe(n,a){return rIe(n,Gr(a,2))}function rIe(n,a){return qE(Vo(n),a)}function LQe(n,a,c,u){let p=wQe(a,We===void 0?c.length:We),h=a[p],{typeParameters:T}=h;if(!T)return h;let k=zCe(n)?n.typeArguments:void 0,O=k?JG(h,kQe(k,T,Yn(n))):DQe(n,T,h,c,u);return a[p]=O,O}function kQe(n,a,c){let u=n.map(G1);for(;u.length>a.length;)u.pop();for(;u.length<a.length;)u.push(jE(a[u.length])||eu(a[u.length])||hre(c));return u}function DQe(n,a,c,u,p){let h=_D(a,c,Yn(n)?2:0),T=eie(n,c,u,p|4|8,h);return JG(c,T)}function wQe(n,a){let c=-1,u=-1;for(let p=0;p<n.length;p++){let h=n[p],T=xd(h);if(jp(h)||T>=a)return p;T>u&&(u=T,c=p)}return c}function RQe(n,a,c){if(n.expression.kind===106){let O=Ire(n.expression);if(Zo(O)){for(let H of n.arguments)Yi(H);return As}if(!Ro(O)){let H=hp(Zc(n));if(H){let J=xr(O,H.typeArguments,H);return PC(n,J,a,c,0)}}return nA(n)}let u,p=Yi(n.expression);if(dT(n)){let O=dD(p,n.expression);u=O===p?0:mI(n)?16:8,p=O}else u=0;if(p=DCe(p,n.expression,Y$e),p===Qe)return Ql;let h=Eu(p);if(Ro(h))return Up(n);let T=xa(h,0),k=xa(h,1).length;if(QB(p,h,T.length,k))return!Ro(p)&&n.typeArguments&&Fe(n,_.Untyped_function_calls_may_not_accept_type_arguments),nA(n);if(!T.length){if(k)Fe(n,_.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new,Ee(p));else{let O;if(n.arguments.length===1){let H=Gn(n).text;Wl(H.charCodeAt(xo(H,n.expression.end,!0)-1))&&(O=hr(n.expression,_.Are_you_missing_a_semicolon))}aie(n.expression,h,0,O)}return Up(n)}return c&8&&!n.typeArguments&&T.some(OQe)?(FIe(n,c),yc):T.some(O=>Yn(O.declaration)&&!!Aj(O.declaration))?(Fe(n,_.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new,Ee(p)),Up(n)):PC(n,T,a,c,u)}function OQe(n){return!!(n.typeParameters&&Jie(qo(n)))}function QB(n,a,c,u){return Zo(n)||Zo(a)&&!!(n.flags&262144)||!c&&!u&&!(a.flags&1048576)&&!(O_(a).flags&131072)&&to(n,Hs)}function NQe(n,a,c){if(n.arguments&&R<1){let T=YB(n.arguments);T>=0&&Fe(n.arguments[T],_.Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher)}let u=NC(n.expression);if(u===Qe)return Ql;if(u=Eu(u),Ro(u))return Up(n);if(Zo(u))return n.typeArguments&&Fe(n,_.Untyped_function_calls_may_not_accept_type_arguments),nA(n);let p=xa(u,1);if(p.length){if(!PQe(n,p[0]))return Up(n);if(iIe(p,k=>!!(k.flags&4)))return Fe(n,_.Cannot_create_an_instance_of_an_abstract_class),Up(n);let T=u.symbol&&Nh(u.symbol);return T&&Mr(T,256)?(Fe(n,_.Cannot_create_an_instance_of_an_abstract_class),Up(n)):PC(n,p,a,c,0)}let h=xa(u,0);if(h.length){let T=PC(n,h,a,c,0);return ge||(T.declaration&&!cp(T.declaration)&&qo(T)!==yt&&Fe(n,_.Only_a_void_function_can_be_called_with_the_new_keyword),Yb(T)===yt&&Fe(n,_.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void)),T}return aie(n.expression,u,1),Up(n)}function iIe(n,a){return ba(n)?vt(n,c=>iIe(c,a)):n.compositeKind===1048576?vt(n.compositeSignatures,a):a(n)}function iie(n,a){let c=_o(a);if(!Fn(c))return!1;let u=c[0];if(u.flags&2097152){let p=u.types,h=Axe(p),T=0;for(let k of u.types){if(!h[T]&&Ur(k)&3&&(k.symbol===n||iie(n,k)))return!0;T++}return!1}return u.symbol===n?!0:iie(n,u)}function PQe(n,a){if(!a||!a.declaration)return!0;let c=a.declaration,u=hS(c,24);if(!u||c.kind!==173)return!0;let p=Nh(c.parent.symbol),h=gs(c.parent.symbol);if(!Hie(n,p)){let T=Zc(n);if(T&&u&16){let k=G1(T);if(iie(c.parent.symbol,k))return!0}return u&8&&Fe(n,_.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,Ee(h)),u&16&&Fe(n,_.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,Ee(h)),!1}return!0}function aIe(n,a,c){let u,p=c===0,h=rT(a),T=h&&xa(h,c).length>0;if(a.flags&1048576){let O=a.types,H=!1;for(let J of O)if(xa(J,c).length!==0){if(H=!0,u)break}else if(u||(u=da(u,p?_.Type_0_has_no_call_signatures:_.Type_0_has_no_construct_signatures,Ee(J)),u=da(u,p?_.Not_all_constituents_of_type_0_are_callable:_.Not_all_constituents_of_type_0_are_constructable,Ee(a))),H)break;H||(u=da(void 0,p?_.No_constituent_of_type_0_is_callable:_.No_constituent_of_type_0_is_constructable,Ee(a))),u||(u=da(u,p?_.Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_other:_.Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_with_each_other,Ee(a)))}else u=da(u,p?_.Type_0_has_no_call_signatures:_.Type_0_has_no_construct_signatures,Ee(a));let k=p?_.This_expression_is_not_callable:_.This_expression_is_not_constructable;if(Pa(n.parent)&&n.parent.arguments.length===0){let{resolvedSymbol:O}=Rr(n);O&&O.flags&32768&&(k=_.This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without)}return{messageChain:da(u,k),relatedMessage:T?_.Did_you_forget_to_use_await:void 0}}function aie(n,a,c,u){let{messageChain:p,relatedMessage:h}=aIe(n,a,c),T=Lh(Gn(n),n,p);if(h&&Ao(T,hr(n,h)),Pa(n.parent)){let{start:k,length:O}=eIe(n.parent,!0);T.start=k,T.length=O}Lo.add(T),oIe(a,c,u?Ao(T,u):T)}function oIe(n,a,c){if(!n.symbol)return;let u=Ai(n.symbol).originatingImport;if(u&&!Dd(u)){let p=xa(zn(Ai(n.symbol).target),a);if(!p||!p.length)return;Ao(c,hr(u,_.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead))}}function MQe(n,a,c){let u=Yi(n.tag),p=Eu(u);if(Ro(p))return Up(n);let h=xa(p,0),T=xa(p,1).length;if(QB(u,p,h.length,T))return nA(n);if(!h.length){if(fu(n.parent)){let k=hr(n.tag,_.It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tagged_template_expression_which_cannot_be_invoked);return Lo.add(k),Up(n)}return aie(n.tag,p,0),Up(n)}return PC(n,h,a,c,0)}function FQe(n){switch(n.parent.kind){case 260:case 228:return _.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;case 166:return _.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;case 169:return _.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;case 171:case 174:case 175:return _.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;default:return L.fail()}}function GQe(n,a,c){let u=Yi(n.expression),p=Eu(u);if(Ro(p))return Up(n);let h=xa(p,0),T=xa(p,1).length;if(QB(u,p,h.length,T))return nA(n);if(UQe(n,h)&&!ud(n.expression)){let O=Qc(n.expression,!1);return Fe(n,_._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0,O),Up(n)}let k=FQe(n);if(!h.length){let O=aIe(n.expression,p,0),H=da(O.messageChain,k),J=Lh(Gn(n.expression),n.expression,H);return O.relatedMessage&&Ao(J,hr(n.expression,O.relatedMessage)),Lo.add(J),oIe(p,0,J),Up(n)}return PC(n,h,a,c,0,k)}function ZB(n,a){let c=tA(n),u=c&&Gd(c),p=u&&yd(u,Qd.Element,788968),h=p&&Be.symbolToEntityName(p,788968,n),T=D.createFunctionTypeNode(void 0,[D.createParameterDeclaration(void 0,void 0,\"props\",void 0,Be.typeToTypeNode(a,n))],h?D.createTypeReferenceNode(h,void 0):D.createKeywordTypeNode(131)),k=wo(1,\"props\");return k.links.type=a,Am(T,void 0,void 0,[k],p?gs(p):ve,void 0,1,0)}function BQe(n,a,c){if(OC(n.tagName)){let T=ACe(n),k=ZB(n,T);return Ly(rA(n.attributes,VB(k,n),void 0,0),T,n.tagName,n.attributes),Fn(n.typeArguments)&&(mn(n.typeArguments,qa),Lo.add(RA(Gn(n),n.typeArguments,_.Expected_0_type_arguments_but_got_1,0,Fn(n.typeArguments)))),k}let u=Yi(n.tagName),p=Eu(u);if(Ro(p))return Up(n);let h=SCe(u,n);return QB(u,p,h.length,0)?nA(n):h.length===0?(Fe(n.tagName,_.JSX_element_type_0_does_not_have_any_construct_or_call_signatures,Qc(n.tagName)),Up(n)):PC(n,h,a,c,0)}function UQe(n,a){return a.length&&Ji(a,c=>c.minArgumentCount===0&&!Xl(c)&&c.parameters.length<ZCe(n,c))}function VQe(n,a,c){switch(n.kind){case 210:return RQe(n,a,c);case 211:return NQe(n,a,c);case 212:return MQe(n,a,c);case 167:return GQe(n,a,c);case 283:case 282:return BQe(n,a,c)}throw L.assertNever(n,\"Branch in 'resolveSignature' should be unreachable.\")}function MC(n,a,c){let u=Rr(n),p=u.resolvedSignature;if(p&&p!==yc&&!a)return p;u.resolvedSignature=yc;let h=VQe(n,a,c||0);return h!==yc&&(u.resolvedSignature=sn===Dn?h:p),h}function cp(n){var a;if(!n||!Yn(n))return!1;let c=Jc(n)||ms(n)?n:(wi(n)||yl(n))&&n.initializer&&ms(n.initializer)?n.initializer:void 0;if(c){if(Aj(n))return!0;if(yl(qy(c.parent)))return!1;let u=fr(c);return!!((a=u?.members)!=null&&a.size)}return!1}function oie(n,a){var c,u;if(a){let p=Ai(a);if(!p.inferredClassSymbol||!p.inferredClassSymbol.has($a(n))){let h=Zp(n)?n:Pb(n);return h.exports=h.exports||Ua(),h.members=h.members||Ua(),h.flags|=a.flags&32,(c=a.exports)!=null&&c.size&&ll(h.exports,a.exports),(u=a.members)!=null&&u.size&&ll(h.members,a.members),(p.inferredClassSymbol||(p.inferredClassSymbol=new Map)).set($a(h),h),h}return p.inferredClassSymbol.get($a(n))}}function jQe(n){var a;let c=n&&eU(n,!0),u=(a=c?.exports)==null?void 0:a.get(\"prototype\"),p=u?.valueDeclaration&&HQe(u.valueDeclaration);return p?fr(p):void 0}function eU(n,a){if(!n.parent)return;let c,u;if(wi(n.parent)&&n.parent.initializer===n){if(!Yn(n)&&!(kh(n.parent)&&Ds(n)))return;c=n.parent.name,u=n.parent}else if(ar(n.parent)){let p=n.parent,h=n.parent.operatorToken.kind;if(h===63&&(a||p.right===n))c=p.left,u=c;else if((h===56||h===60)&&(wi(p.parent)&&p.parent.initializer===p?(c=p.parent.name,u=p.parent):ar(p.parent)&&p.parent.operatorToken.kind===63&&(a||p.parent.right===p)&&(c=p.parent.left,u=c),!c||!cS(c)||!BA(c,p.left)))return}else a&&Jc(n)&&(c=n.name,u=n);if(!(!u||!c||!a&&!ob(n,ub(c))))return vd(u)}function HQe(n){if(!n.parent)return!1;let a=n.parent;for(;a&&a.kind===208;)a=a.parent;if(a&&ar(a)&&ub(a.left)&&a.operatorToken.kind===63){let c=OH(a);return rs(c)&&c}}function WQe(n,a){var c,u,p;a8(n,n.typeArguments);let h=MC(n,void 0,a);if(h===yc)return Qe;if(tU(h,n),n.expression.kind===106)return yt;if(n.kind===211){let k=h.declaration;if(k&&k.kind!==173&&k.kind!==177&&k.kind!==182&&!(X0(k)&&((u=(c=OI(k))==null?void 0:c.parent)==null?void 0:u.kind)===173)&&!jA(k)&&!cp(k))return ge&&Fe(n,_.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type),Se}if(Yn(n)&&$s(Y)!==100&&dIe(n))return Fxe(n.arguments[0]);let T=qo(h);if(T.flags&12288&&sIe(n))return wne(qy(n.parent));if(n.kind===210&&!n.questionDotToken&&n.parent.kind===241&&T.flags&16384&&Lf(h)){if(!WI(n.expression))Fe(n.expression,_.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name);else if(!OB(n)){let k=Fe(n.expression,_.Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation);CM(n.expression,k)}}if(Yn(n)){let k=eU(n,!1);if((p=k?.exports)!=null&&p.size){let O=ls(k,k.exports,Je,Je,Je);return O.objectFlags|=4096,so([T,O])}}return T}function tU(n,a){if(n.declaration&&n.declaration.flags&268435456){let c=BM(a),u=kR(P6(a));g1(c,n.declaration,u,ne(n))}}function BM(n){switch(n=vs(n),n.kind){case 210:case 167:case 211:return BM(n.expression);case 212:return BM(n.tag);case 283:case 282:return BM(n.tagName);case 209:return n.argumentExpression;case 208:return n.name;case 180:let a=n;return Yu(a.typeName)?a.typeName.right:a;default:return n}}function sIe(n){if(!Pa(n))return!1;let a=n.expression;if(br(a)&&a.name.escapedText===\"for\"&&(a=a.expression),!Re(a)||a.escapedText!==\"Symbol\")return!1;let c=rAe(!1);return c?c===zs(a,\"Symbol\",111551,void 0,void 0,!1):!1}function zQe(n){if(cit(n),n.arguments.length===0)return HM(n,Se);let a=n.arguments[0],c=Ic(a),u=n.arguments.length>1?Ic(n.arguments[1]):void 0;for(let h=2;h<n.arguments.length;++h)Ic(n.arguments[h]);if((c.flags&32768||c.flags&65536||!to(c,ae))&&Fe(a,_.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0,Ee(c)),u){let h=nAe(!0);h!==Ki&&wu(u,TB(h,32768),n.arguments[1])}let p=Gl(n,a);if(p){let h=Jb(p,a,!0,!1);if(h)return HM(n,lIe(zn(h),h,p,a)||uIe(zn(h),h,p,a))}return HM(n,Se)}function cIe(n,a,c){let u=Ua(),p=wo(2097152,\"default\");return p.parent=a,p.links.nameType=ff(\"default\"),p.links.aliasTarget=Ac(n),u.set(\"default\",p),ls(c,u,Je,Je,Je)}function lIe(n,a,c,u){if(cs(u)&&n&&!Ro(n)){let h=n;if(!h.defaultOnlyType){let T=cIe(a,c);h.defaultOnlyType=T}return h.defaultOnlyType}}function uIe(n,a,c,u){var p;if(Z&&n&&!Ro(n)){let h=n;if(!h.syntheticType){let T=(p=c.declarations)==null?void 0:p.find(Li);if(ny(T,c,!1,u)){let O=wo(2048,\"__type\"),H=cIe(a,c,O);O.links.type=H,h.syntheticType=RM(n)?e0(n,H,O,0,!1):H}else h.syntheticType=n}return h.syntheticType}return n}function dIe(n){if(!qu(n,!0))return!1;if(!Re(n.expression))return L.fail();let a=zs(n.expression,n.expression.escapedText,111551,void 0,void 0,!0);if(a===ct)return!0;if(a.flags&2097152)return!1;let c=a.flags&16?259:a.flags&3?257:0;if(c!==0){let u=nc(a,c);return!!u&&!!(u.flags&16777216)}return!1}function JQe(n){Ort(n)||a8(n,n.typeArguments),R<2&&Hc(n,262144);let a=MC(n);return tU(a,n),qo(a)}function KQe(n){if(n.kind===213){let a=Gn(n);a&&$c(a.fileName,[\".cts\",\".mts\"])&&an(n,_.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead)}return fIe(n,n.type,n.expression)}function sie(n){switch(n.kind){case 10:case 14:case 8:case 9:case 110:case 95:case 206:case 207:case 225:return!0;case 214:return sie(n.expression);case 221:let a=n.operator,c=n.operand;return a===40&&(c.kind===8||c.kind===9)||a===39&&c.kind===8;case 208:case 209:let u=vs(n.expression),p=bc(u)?uc(u,111551,!0):void 0;return!!(p&&p.flags&384)}return!1}function fIe(n,a,c,u){let p=Yi(c,u);if(Ch(a))return sie(c)||Fe(c,_.A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals),Hu(p);qa(a),p=EM(ky(p));let h=$r(a);return Ro(h)||i(()=>{let T=Sd(p);_B(h,T)||e2e(p,h,n,_.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first)}),h}function qQe(n){let a=Yi(n.expression),c=dD(a,n.expression);return SB(yg(c),n,c!==a)}function XQe(n){return n.flags&32?qQe(n):yg(Yi(n.expression))}function _Ie(n){ake(n),mn(n.typeArguments,qa);let a=n.kind===230?Yi(n.expression):LT(n.exprName)?kM(n.exprName):Yi(n.exprName);return pIe(a,n)}function pIe(n,a){let c=a.typeArguments;if(n===Qe||Ro(n)||!vt(c))return n;let u=!1,p,h=k(n),T=u?p:n;return T&&Lo.add(RA(Gn(a),c,_.Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable,Ee(T))),h;function k(H){let J=!1,de=!1,Ae=xe(H);return u||(u=de),J&&!de&&(p??(p=H)),Ae;function xe(tt){if(tt.flags&524288){let It=R_(tt),Tn=O(It.callSignatures),un=O(It.constructSignatures);if(J||(J=It.callSignatures.length!==0||It.constructSignatures.length!==0),de||(de=Tn.length!==0||un.length!==0),Tn!==It.callSignatures||un!==It.constructSignatures){let Nn=ls(void 0,It.members,Tn,un,It.indexInfos);return Nn.objectFlags|=8388608,Nn.node=a,Nn}}else if(tt.flags&58982400){let It=bu(tt);if(It){let Tn=xe(It);if(Tn!==It)return Tn}}else{if(tt.flags&1048576)return Ls(tt,k);if(tt.flags&2097152)return so(Tl(tt.types,xe))}return tt}}function O(H){let J=Pr(H,de=>!!de.typeParameters&&Zre(de,c));return Tl(J,de=>{let Ae=nie(de,c,!0);return Ae?eD(de,Ae,Yn(de.declaration)):de})}}function YQe(n){return qa(n.type),cie(n.expression,n.type)}function cie(n,a,c){let u=Yi(n,c),p=$r(a);return Ro(p)?p:(Ly(u,p,a,n,_.Type_0_does_not_satisfy_the_expected_type_1),u)}function $Qe(n){return Xrt(n),n.keywordToken===103?lie(n):n.keywordToken===100?QQe(n):L.assertNever(n.keywordToken)}function mIe(n){switch(n.keywordToken){case 100:return tAe();case 103:let a=lie(n);return Ro(a)?ve:hZe(a);default:L.assertNever(n.keywordToken)}}function lie(n){let a=oce(n);if(a)if(a.kind===173){let c=fr(a.parent);return zn(c)}else{let c=fr(a);return zn(c)}else return Fe(n,_.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor,\"new.target\"),ve}function QQe(n){ie===100||ie===199?Gn(n).impliedNodeFormat!==99&&Fe(n,_.The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output):ie<6&&ie!==4&&Fe(n,_.The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_or_nodenext);let a=Gn(n);return L.assert(!!(a.flags&4194304),\"Containing file is missing import meta node flag.\"),n.name.escapedText===\"meta\"?eAe():ve}function UM(n){let a=zn(n);if(U){let c=n.valueDeclaration;if(c&&Jy(c))return gg(a)}return a}function nU(n){return L.assert(Re(n.name)),n.name.escapedText}function FC(n,a,c){let u=n.parameters.length-(Xl(n)?1:0);if(a<u)return n.parameters[a].escapedName;let p=n.parameters[u]||Ht,h=c||zn(p);if(po(h)){let T=h.target.labeledElementDeclarations,k=a-u;return T&&nU(T[k])||p.escapedName+\"_\"+k}return p.escapedName}function ZQe(n,a){var c;if(((c=n.declaration)==null?void 0:c.kind)===320)return;let u=n.parameters.length-(Xl(n)?1:0);if(a<u){let T=n.parameters[a];return hIe(T)?[T.escapedName,!1]:void 0}let p=n.parameters[u]||Ht;if(!hIe(p))return;let h=zn(p);if(po(h)){let T=h.target.labeledElementDeclarations,k=a-u,O=T?.[k],H=!!O?.dotDotDotToken;return O?[nU(O),H]:void 0}if(a===u)return[p.escapedName,!0]}function hIe(n){return n.valueDeclaration&&ha(n.valueDeclaration)&&Re(n.valueDeclaration.name)}function gIe(n){return n.kind===199||ha(n)&&n.name&&Re(n.name)}function eZe(n,a){let c=n.parameters.length-(Xl(n)?1:0);if(a<c){let h=n.parameters[a].valueDeclaration;return h&&gIe(h)?h:void 0}let u=n.parameters[c]||Ht,p=zn(u);if(po(p)){let h=p.target.labeledElementDeclarations,T=a-c;return h&&h[T]}return u.valueDeclaration&&gIe(u.valueDeclaration)?u.valueDeclaration:void 0}function P_(n,a){return tT(n,a)||Se}function tT(n,a){let c=n.parameters.length-(Xl(n)?1:0);if(a<c)return UM(n.parameters[a]);if(Xl(n)){let u=zn(n.parameters[c]),p=a-c;if(!po(u)||u.target.hasRestElement||p<u.target.fixedLength)return od(u,op(p))}}function SD(n,a){let c=xd(n),u=Vp(n),p=xD(n);if(p&&a>=c-1)return a===c-1?p:nu(od(p,rt));let h=[],T=[],k=[];for(let O=a;O<c;O++){!p||O<c-1?(h.push(P_(n,O)),T.push(O<u?1:2)):(h.push(p),T.push(8));let H=eZe(n,O);H&&k.push(H)}return ap(h,T,!1,Fn(k)===Fn(h)?k:void 0)}function xd(n){let a=n.parameters.length;if(Xl(n)){let c=zn(n.parameters[a-1]);if(po(c))return a+c.target.fixedLength-(c.target.hasRestElement?0:1)}return a}function Vp(n,a){let c=a&1,u=a&2;if(u||n.resolvedMinArgumentCount===void 0){let p;if(Xl(n)){let h=zn(n.parameters[n.parameters.length-1]);if(po(h)){let T=Yc(h.target.elementFlags,O=>!(O&1)),k=T<0?h.target.fixedLength:T;k>0&&(p=n.parameters.length-1+k)}}if(p===void 0){if(!c&&n.flags&32)return 0;p=n.minArgumentCount}if(u)return p;for(let h=p-1;h>=0;h--){let T=P_(n,h);if(jc(T,JCe).flags&131072)break;p=h}n.resolvedMinArgumentCount=p}return n.resolvedMinArgumentCount}function jp(n){if(Xl(n)){let a=zn(n.parameters[n.parameters.length-1]);return!po(a)||a.target.hasRestElement}return!1}function xD(n){if(Xl(n)){let a=zn(n.parameters[n.parameters.length-1]);if(!po(a))return a;if(a.target.hasRestElement)return EC(a,a.target.fixedLength)}}function AD(n){let a=xD(n);return a&&!_f(a)&&!Zo(a)&&!(O_(a).flags&131072)?a:void 0}function uie(n){return die(n,lt)}function die(n,a){return n.parameters.length>0?P_(n,0):a}function tZe(n,a,c){let u=n.parameters.length-(Xl(n)?1:0);for(let p=0;p<u;p++){let h=n.parameters[p].valueDeclaration;if(h.type){let T=Cl(h);T&&gh(c.inferences,$r(T),P_(a,p))}}}function nZe(n,a){if(a.typeParameters)if(!n.typeParameters)n.typeParameters=a.typeParameters;else return;if(a.thisParameter){let u=n.thisParameter;(!u||u.valueDeclaration&&!u.valueDeclaration.type)&&(u||(n.thisParameter=qE(a.thisParameter,void 0)),VM(n.thisParameter,zn(a.thisParameter)))}let c=n.parameters.length-(Xl(n)?1:0);for(let u=0;u<c;u++){let p=n.parameters[u];if(!Cl(p.valueDeclaration)){let h=tT(a,u);VM(p,h)}}if(Xl(n)){let u=To(n.parameters);if(u.valueDeclaration?!Cl(u.valueDeclaration):ac(u)&65536){let p=SD(a,c);VM(u,p)}}}function rZe(n){n.thisParameter&&VM(n.thisParameter);for(let a of n.parameters)VM(a)}function VM(n,a){let c=Ai(n);if(c.type)a&&L.assertEqual(c.type,a,\"Parameter symbol already has a cached type which differs from newly assigned type\");else{let u=n.valueDeclaration;c.type=a||(u?Zs(u,!0):zn(n)),u&&u.name.kind!==79&&(c.type===ue&&(c.type=oo(u.name)),yIe(u.name,c.type))}}function yIe(n,a){for(let c of n.elements)if(!ol(c)){let u=li(c,a);c.name.kind===79?Ai(fr(c)).type=u:yIe(c.name,u)}}function iZe(n){return zx(IKe(!0),[n])}function aZe(n,a){return zx(LKe(!0),[n,a])}function oZe(n,a){return zx(kKe(!0),[n,a])}function sZe(n,a){return zx(DKe(!0),[n,a])}function cZe(n,a){return zx(wKe(!0),[n,a])}function lZe(n,a){return zx(NKe(!0),[n,a])}function uZe(n,a,c){let u=`${a?\"p\":\"P\"}${c?\"s\":\"S\"}${n.id}`,p=An.get(u);if(!p){let h=Ua();h.set(\"name\",gE(\"name\",n)),h.set(\"private\",gE(\"private\",a?pe:Ke)),h.set(\"static\",gE(\"static\",c?pe:Ke)),p=ls(void 0,h,Je,Je,Je),An.set(u,p)}return p}function vIe(n,a,c){let u=zc(n),p=pi(n.name),h=p?ff(vr(n.name)):pg(n.name),T=Nc(n)?aZe(a,c):p_(n)?oZe(a,c):Sf(n)?sZe(a,c):Id(n)?cZe(a,c):Na(n)?lZe(a,c):L.failBadSyntaxKind(n),k=uZe(h,p,u);return so([T,k])}function dZe(n,a){return zx(RKe(!0),[n,a])}function fZe(n,a){return zx(OKe(!0),[n,a])}function _Ze(n,a){let c=A_(\"this\",n),u=A_(\"value\",a);return Cie(void 0,c,[u],a,void 0,1)}function fie(n,a,c){let u=A_(\"target\",n),p=A_(\"context\",a),h=Gr([c,yt]);return OD(void 0,void 0,[u,p],h)}function pZe(n){let{parent:a}=n,c=Rr(a);if(!c.decoratorSignature)switch(c.decoratorSignature=As,a.kind){case 260:case 228:{let p=zn(fr(a)),h=iZe(p);c.decoratorSignature=fie(p,h,p);break}case 171:case 174:case 175:{let u=a;if(!Yr(u.parent))break;let p=Nc(u)?HE(ip(u)):G1(u),h=zc(u)?zn(fr(u.parent)):vu(fr(u.parent)),T=p_(u)?$Ie(p):Sf(u)?QIe(p):p,k=vIe(u,h,p),O=p_(u)?$Ie(p):Sf(u)?QIe(p):p;c.decoratorSignature=fie(T,k,O);break}case 169:{let u=a;if(!Yr(u.parent))break;let p=G1(u),h=zc(u)?zn(fr(u.parent)):vu(fr(u.parent)),T=rm(u)?dZe(h,p):Oe,k=vIe(u,h,p),O=rm(u)?fZe(h,p):_Ze(h,p);c.decoratorSignature=fie(T,k,O);break}}return c.decoratorSignature===As?void 0:c.decoratorSignature}function mZe(n){let{parent:a}=n,c=Rr(a);if(!c.decoratorSignature)switch(c.decoratorSignature=As,a.kind){case 260:case 228:{let p=zn(fr(a)),h=A_(\"target\",p);c.decoratorSignature=OD(void 0,void 0,[h],Gr([p,yt]));break}case 166:{let u=a;if(!Ec(u.parent)&&!(Nc(u.parent)||Sf(u.parent)&&Yr(u.parent.parent))||F0(u.parent)===u)break;let p=F0(u.parent)?u.parent.parameters.indexOf(u)-1:u.parent.parameters.indexOf(u);L.assert(p>=0);let h=Ec(u.parent)?zn(fr(u.parent.parent)):qLe(u.parent),T=Ec(u.parent)?Oe:XLe(u.parent),k=op(p),O=A_(\"target\",h),H=A_(\"propertyKey\",T),J=A_(\"parameterIndex\",k);c.decoratorSignature=OD(void 0,void 0,[O,H,J],yt);break}case 171:case 174:case 175:case 169:{let u=a;if(!Yr(u.parent))break;let p=qLe(u),h=A_(\"target\",p),T=XLe(u),k=A_(\"propertyKey\",T),O=Na(u)?yt:sAe(G1(u));if(R!==0&&(!Na(a)||rm(a))){let J=sAe(G1(u)),de=A_(\"descriptor\",J);c.decoratorSignature=OD(void 0,void 0,[h,k,de],Gr([O,yt]))}else c.decoratorSignature=OD(void 0,void 0,[h,k],Gr([O,yt]));break}}return c.decoratorSignature===As?void 0:c.decoratorSignature}function _ie(n){return $?mZe(n):pZe(n)}function jM(n){let a=oM(!0);return a!==ro?(n=bg(UC(n))||ue,_g(a,[n])):ue}function bIe(n){let a=aAe(!0);return a!==ro?(n=bg(UC(n))||ue,_g(a,[n])):ue}function HM(n,a){let c=jM(a);return c===ue?(Fe(n,Dd(n)?_.A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option:_.An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option),ve):(_ne(!0)||Fe(n,Dd(n)?_.A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option:_.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option),c)}function hZe(n){let a=wo(0,\"NewTargetExpression\"),c=wo(4,\"target\",8);c.parent=a,c.links.type=n;let u=Ua([c]);return a.members=u,ls(a,u,Je,Je,Je)}function rU(n,a){if(!n.body)return ve;let c=pl(n),u=(c&2)!==0,p=(c&1)!==0,h,T,k,O=yt;if(n.body.kind!==238)h=Ic(n.body,a&&a&-9),u&&(h=UC(RD(h,!1,n,_.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)));else if(p){let H=CIe(n,a);H?H.length>0&&(h=Gr(H,2)):O=lt;let{yieldTypes:J,nextTypes:de}=gZe(n,a);T=vt(J)?Gr(J,2):void 0,k=vt(de)?so(de):void 0}else{let H=CIe(n,a);if(!H)return c&2?HM(n,lt):lt;if(H.length===0)return c&2?HM(n,yt):yt;h=Gr(H,2)}if(h||T||k){if(T&&CB(n,T,3),h&&CB(n,h,1),k&&CB(n,k,2),h&&N_(h)||T&&N_(T)||k&&N_(k)){let H=Nre(n),J=H?H===ip(n)?p?void 0:h:BB(qo(H),n,void 0):void 0;p?(T=Zne(T,J,0,u),h=Zne(h,J,1,u),k=Zne(k,J,2,u)):h=CXe(h,J,u)}T&&(T=Sd(T)),h&&(h=Sd(h)),k&&(k=Sd(k))}return p?EIe(T||lt,h||O,k||cCe(2,n)||ue,u):u?jM(h||O):h||O}function EIe(n,a,c,u){let p=u?ft:Yt,h=p.getGlobalGeneratorType(!1);if(n=p.resolveIterationType(n,void 0)||ue,a=p.resolveIterationType(a,void 0)||ue,c=p.resolveIterationType(c,void 0)||ue,h===ro){let T=p.getGlobalIterableIteratorType(!1),k=T!==ro?pLe(T,p):void 0,O=k?k.returnType:Se,H=k?k.nextType:Oe;return to(a,O)&&to(H,c)?T!==ro?rD(T,[n]):(p.getGlobalIterableIteratorType(!0),Ki):(p.getGlobalGeneratorType(!0),Ki)}return rD(h,[n,a,c])}function gZe(n,a){let c=[],u=[],p=(pl(n)&2)!==0;return Yse(n.body,h=>{let T=h.expression?Yi(h.expression,a):je;Of(c,TIe(h,T,Se,p));let k;if(h.asteriskToken){let O=_U(T,p?19:17,h.expression);k=O&&O.nextType}else k=Ru(h,void 0);k&&Of(u,k)}),{yieldTypes:c,nextTypes:u}}function TIe(n,a,c,u){let p=n.expression||n,h=n.asteriskToken?wy(u?19:17,a,c,p):a;return u?rT(h,p,n.asteriskToken?_.Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:_.Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member):h}function SIe(n,a,c){let u=0;for(let p=0;p<c.length;p++){let h=p<n||p>=a?c[p]:void 0;u|=h!==void 0?fF.get(h)||32768:0}return u}function xIe(n){let a=Rr(n);if(a.isExhaustive===void 0){a.isExhaustive=0;let c=yZe(n);a.isExhaustive===0&&(a.isExhaustive=c)}else a.isExhaustive===0&&(a.isExhaustive=!1);return a.isExhaustive}function yZe(n){if(n.expression.kind===218){let u=W2e(n);if(!u)return!1;let p=Ty(Ic(n.expression.expression)),h=SIe(0,0,u);return p.flags&3?(556800&h)===556800:!yh(p,T=>(iu(T)&h)===h)}let a=Ic(n.expression);if(!uD(a))return!1;let c=DB(n);return!c.length||vt(c,SXe)?!1:bYe(Ls(a,Hu),c)}function AIe(n){return n.endFlowNode&&IM(n.endFlowNode)}function CIe(n,a){let c=pl(n),u=[],p=AIe(n),h=!1;if(vT(n.body,T=>{let k=T.expression;if(k){let O=Ic(k,a&&a&-9);c&2&&(O=UC(RD(O,!1,n,_.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member))),O.flags&131072&&(h=!0),Of(u,O)}else p=!0}),!(u.length===0&&!p&&(h||vZe(n))))return U&&u.length&&p&&!(cp(n)&&u.some(T=>T.symbol===n.symbol))&&Of(u,Oe),u}function vZe(n){switch(n.kind){case 215:case 216:return!0;case 171:return n.parent.kind===207;default:return!1}}function pie(n,a){i(c);return;function c(){let u=pl(n),p=a&&pU(a,u);if(p&&Js(p,16385)||n.kind===170||rc(n.body)||n.body.kind!==238||!AIe(n))return;let h=n.flags&512,T=U_(n)||n;if(p&&p.flags&131072)Fe(T,_.A_function_returning_never_cannot_have_a_reachable_end_point);else if(p&&!h)Fe(T,_.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value);else if(p&&U&&!to(Oe,p))Fe(T,_.Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined);else if(Y.noImplicitReturns){if(!p){if(!h)return;let k=qo(ip(n));if(ELe(n,k))return}Fe(T,_.Not_all_code_paths_return_a_value)}}}function IIe(n,a){if(L.assert(n.kind!==171||s_(n)),zC(n),ms(n)&&jC(n,n.name),a&&a&4&&$f(n)){if(!U_(n)&&!b4(n)){let u=bD(n);if(u&&XE(qo(u))){let p=Rr(n);if(p.contextFreeType)return p.contextFreeType;let h=rU(n,a),T=Am(void 0,void 0,void 0,Je,h,void 0,0,0),k=ls(n.symbol,q,[T],Je,Je);return k.objectFlags|=262144,p.contextFreeType=k}}return aa}return!AU(n)&&n.kind===215&&Yie(n),bZe(n,a),zn(fr(n))}function bZe(n,a){let c=Rr(n);if(!(c.flags&64)){let u=bD(n);if(!(c.flags&64)){c.flags|=64;let p=Sl(xa(zn(fr(n)),0));if(!p)return;if($f(n))if(u){let h=M1(n),T;if(a&&a&2){tZe(p,u,h);let k=xD(u);k&&k.flags&262144&&(T=$x(u,h.nonFixingMapper))}T||(T=h?$x(u,h.mapper):u),nZe(p,T)}else rZe(p);if(u&&!Hx(n)&&!p.resolvedReturnType){let h=rU(n,a);p.resolvedReturnType||(p.resolvedReturnType=h)}LD(n)}}}function EZe(n){L.assert(n.kind!==171||s_(n));let a=pl(n),c=Hx(n);if(pie(n,c),n.body)if(U_(n)||qo(ip(n)),n.body.kind===238)qa(n.body);else{let u=Yi(n.body),p=c&&pU(c,a);if(p)if((a&3)===2){let h=RD(u,!1,n.body,_.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);Ly(h,p,n.body,n.body)}else Ly(u,p,n.body,n.body)}}function iU(n,a,c,u=!1){if(!to(a,Ja)){let p=u&&DD(a);return Tv(n,!!p&&to(p,Ja),c),!1}return!0}function TZe(n){if(!Pa(n)||!sS(n))return!1;let a=Ic(n.arguments[2]);if(Vc(a,\"value\")){let p=ja(a,\"writable\"),h=p&&zn(p);if(!h||h===Ke||h===oe)return!0;if(p&&p.valueDeclaration&&yl(p.valueDeclaration)){let T=p.valueDeclaration.initializer,k=Yi(T);if(k===Ke||k===oe)return!0}return!1}return!ja(a,\"set\")}function M_(n){return!!(ac(n)&8||n.flags&4&&Ef(n)&64||n.flags&3&&WB(n)&2||n.flags&98304&&!(n.flags&65536)||n.flags&8||vt(n.declarations,TZe))}function LIe(n,a,c){var u,p;if(c===0)return!1;if(M_(a)){if(a.flags&4&&Us(n)&&n.expression.kind===108){let h=Xd(n);if(!(h&&(h.kind===173||cp(h))))return!0;if(a.valueDeclaration){let T=ar(a.valueDeclaration),k=h.parent===a.valueDeclaration.parent,O=h===a.valueDeclaration.parent,H=T&&((u=a.parent)==null?void 0:u.valueDeclaration)===h.parent,J=T&&((p=a.parent)==null?void 0:p.valueDeclaration)===h;return!(k||O||H||J)}}return!0}if(Us(n)){let h=vs(n.expression);if(h.kind===79){let T=Rr(h).resolvedSymbol;if(T.flags&2097152){let k=Uu(T);return!!k&&k.kind===271}}}return!1}function CD(n,a,c){let u=ql(n,7);return u.kind!==79&&!Us(u)?(Fe(n,a),!1):u.flags&32?(Fe(n,c),!1):!0}function SZe(n){Yi(n.expression);let a=vs(n.expression);if(!Us(a))return Fe(a,_.The_operand_of_a_delete_operator_must_be_a_property_reference),Te;br(a)&&pi(a.name)&&Fe(a,_.The_operand_of_a_delete_operator_cannot_be_a_private_identifier);let c=Rr(a),u=tp(c.resolvedSymbol);return u&&(M_(u)&&Fe(a,_.The_operand_of_a_delete_operator_cannot_be_a_read_only_property),xZe(a,u)),Te}function xZe(n,a){let c=zn(a);U&&!(c.flags&131075)&&!(Pe?a.flags&16777216:iu(c)&16777216)&&Fe(n,_.The_operand_of_a_delete_operator_must_be_optional)}function AZe(n){return Yi(n.expression),sC}function CZe(n){return Yi(n.expression),je}function IZe(n){let a=R6(n);if(a&&oc(a))Fe(n,_.Await_expression_cannot_be_used_inside_a_class_static_block);else if(!(n.flags&32768))if(O6(n)){let c=Gn(n);if(!l0(c)){let u;if(!aS(c,Y)){u??(u=Pg(c,n.pos));let p=al(c,u.start,u.length,_.await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module);Lo.add(p)}switch(ie){case 100:case 199:if(c.impliedNodeFormat===1){u??(u=Pg(c,n.pos)),Lo.add(al(c,u.start,u.length,_.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level));break}case 7:case 99:case 4:if(R>=4)break;default:u??(u=Pg(c,n.pos)),Lo.add(al(c,u.start,u.length,_.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher));break}}}else{let c=Gn(n);if(!l0(c)){let u=Pg(c,n.pos),p=al(c,u.start,u.length,_.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules);if(a&&a.kind!==173&&!(pl(a)&2)){let h=hr(a,_.Did_you_mean_to_mark_this_function_as_async);Ao(p,h)}Lo.add(p)}}kre(n)&&Fe(n,_.await_expressions_cannot_be_used_in_a_parameter_initializer)}function LZe(n){i(()=>IZe(n));let a=Yi(n.expression),c=RD(a,!0,n,_.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);return c===a&&!Ro(c)&&!(a.flags&3)&&ey(!1,hr(n,_.await_has_no_effect_on_the_type_of_this_expression)),c}function kZe(n){let a=Yi(n.operand);if(a===Qe)return Qe;switch(n.operand.kind){case 8:switch(n.operator){case 40:return Yx(op(-n.operand.text));case 39:return Yx(op(+n.operand.text))}break;case 9:if(n.operator===40)return Yx(aB({negative:!0,base10Value:iL(n.operand.text)}))}switch(n.operator){case 39:case 40:case 54:return sp(a,n.operand),WM(a,12288)&&Fe(n.operand,_.The_0_operator_cannot_be_applied_to_type_symbol,Xa(n.operator)),n.operator===39?(WM(a,2112)&&Fe(n.operand,_.Operator_0_cannot_be_applied_to_type_1,Xa(n.operator),Ee(ky(a))),rt):mie(a);case 53:aA(n.operand);let c=iu(a)&12582912;return c===4194304?Ke:c===8388608?pe:Te;case 45:case 46:return iU(n.operand,sp(a,n.operand),_.An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type)&&CD(n.operand,_.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,_.The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access),mie(a)}return ve}function DZe(n){let a=Yi(n.operand);return a===Qe?Qe:(iU(n.operand,sp(a,n.operand),_.An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type)&&CD(n.operand,_.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,_.The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access),mie(a))}function mie(n){return Js(n,2112)?ul(n,3)||Js(n,296)?Ja:Ot:rt}function WM(n,a){if(Js(n,a))return!0;let c=Ty(n);return!!c&&Js(c,a)}function Js(n,a){if(n.flags&a)return!0;if(n.flags&3145728){let c=n.types;for(let u of c)if(Js(u,a))return!0}return!1}function ul(n,a,c){return n.flags&a?!0:c&&n.flags&114691?!1:!!(a&296)&&to(n,rt)||!!(a&2112)&&to(n,Ot)||!!(a&402653316)&&to(n,ae)||!!(a&528)&&to(n,Te)||!!(a&16384)&&to(n,yt)||!!(a&131072)&&to(n,lt)||!!(a&65536)&&to(n,ln)||!!(a&32768)&&to(n,Oe)||!!(a&4096)&&to(n,j)||!!(a&67108864)&&to(n,jr)}function zM(n,a,c){return n.flags&1048576?Ji(n.types,u=>zM(u,a,c)):ul(n,a,c)}function hie(n){return!!(Ur(n)&16)&&!!n.symbol&&gie(n.symbol)}function gie(n){return(n.flags&128)!==0}function wZe(n,a,c,u){return c===Qe||u===Qe?Qe:(!Zo(c)&&zM(c,134348796)&&Fe(n,_.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter),Zo(u)||EU(u)||Iy(u,Hs)||Fe(a,_.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type),Te)}function RZe(n){return yh(n,a=>a===xc||!!(a.flags&2097152)&&hh(Ty(a)))}function OZe(n,a,c,u){if(c===Qe||u===Qe)return Qe;if(pi(n)){if(R<99&&Hc(n,2097152),!Rr(n).resolvedSymbol&&Zc(n)){let p=Kre(n,u.symbol,!0);GCe(n,u,p)}}else wu(sp(c,n),Kr,n);return wu(sp(u,a),jr,a)&&RZe(u)&&Fe(a,_.Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operator,Ee(u)),Te}function NZe(n,a,c){let u=n.properties;if(U&&u.length===0)return sp(a,n);for(let p=0;p<u.length;p++)kIe(n,a,p,u,c);return a}function kIe(n,a,c,u,p=!1){let h=n.properties,T=h[c];if(T.kind===299||T.kind===300){let k=T.name,O=pg(k);if(fh(O)){let de=Np(O),Ae=ja(a,de);Ae&&(MM(Ae,T,p),Hre(T,!1,!0,a,Ae))}let H=od(a,O,32,k),J=Ue(T,H);return nT(T.kind===300?T:T.initializer,J)}else if(T.kind===301)if(c<h.length-1)Fe(T,_.A_rest_element_must_be_last_in_a_destructuring_pattern);else{R<99&&Hc(T,4);let k=[];if(u)for(let H of u)VS(H)||k.push(H.name);let O=Mx(a,k,a.symbol);return B1(u,_.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma),nT(T.expression,O)}else Fe(T,_.Property_assignment_expected)}function PZe(n,a,c){let u=n.elements;R<2&&Y.downlevelIteration&&Hc(n,512);let p=wy(193,a,Oe,n)||ve,h=Y.noUncheckedIndexedAccess?void 0:p;for(let T=0;T<u.length;T++){let k=p;n.elements[T].kind===227&&(k=h=h??(wy(65,a,Oe,n)||ve)),DIe(n,a,T,k,c)}return a}function DIe(n,a,c,u,p){let h=n.elements,T=h[c];if(T.kind!==229){if(T.kind!==227){let k=op(c);if(Kv(a)){let O=32|(RC(T)?16:0),H=Ay(a,k,O,GM(T,k))||ve,J=RC(T)?wf(H,524288):H,de=Ue(T,J);return nT(T,de,p)}return nT(T,u,p)}if(c<h.length-1)Fe(T,_.A_rest_element_must_be_last_in_a_destructuring_pattern);else{let k=T.expression;if(k.kind===223&&k.operatorToken.kind===63)Fe(k.operatorToken,_.A_rest_element_cannot_have_an_initializer);else{B1(n.elements,_.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma);let O=Im(a,po)?Ls(a,H=>EC(H,c)):nu(u);return nT(k,O,p)}}}}function nT(n,a,c,u){let p;if(n.kind===300){let h=n;h.objectAssignmentInitializer&&(U&&!(iu(Yi(h.objectAssignmentInitializer))&16777216)&&(a=wf(a,524288)),BZe(h.name,h.equalsToken,h.objectAssignmentInitializer,c)),p=n.name}else p=n;return p.kind===223&&p.operatorToken.kind===63&&(Ce(p,c),p=p.left,U&&(a=wf(a,524288))),p.kind===207?NZe(p,a,u):p.kind===206?PZe(p,a,c):MZe(p,a,c)}function MZe(n,a,c){let u=Yi(n,c),p=n.parent.kind===301?_.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access:_.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access,h=n.parent.kind===301?_.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access:_.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access;return CD(n,p,h)&&Ly(a,u,n,n),TA(n)&&Hc(n.parent,1048576),a}function JM(n){switch(n=vs(n),n.kind){case 79:case 10:case 13:case 212:case 225:case 14:case 8:case 9:case 110:case 95:case 104:case 155:case 215:case 228:case 216:case 206:case 207:case 218:case 232:case 282:case 281:return!0;case 224:return JM(n.whenTrue)&&JM(n.whenFalse);case 223:return Mg(n.operatorToken.kind)?!1:JM(n.left)&&JM(n.right);case 221:case 222:switch(n.operator){case 53:case 39:case 40:case 54:return!0}return!1;case 219:case 213:case 231:default:return!1}}function yie(n,a){return(a.flags&98304)!==0||_B(n,a)}function FZe(){let n=C3(a,c,u,p,h,T);return(Ae,xe)=>{let tt=n(Ae,xe);return L.assertIsDefined(tt),tt};function a(Ae,xe,tt){return xe?(xe.stackIndex++,xe.skip=!1,H(xe,void 0),de(xe,void 0)):xe={checkMode:tt,skip:!1,stackIndex:0,typeStack:[void 0,void 0]},Yn(Ae)&&oS(Ae)?(xe.skip=!0,de(xe,Yi(Ae.right,tt)),xe):(GZe(Ae),Ae.operatorToken.kind===63&&(Ae.left.kind===207||Ae.left.kind===206)&&(xe.skip=!0,de(xe,nT(Ae.left,Yi(Ae.right,tt),tt,Ae.right.kind===108))),xe)}function c(Ae,xe,tt){if(!xe.skip)return k(xe,Ae)}function u(Ae,xe,tt){if(!xe.skip){let It=J(xe);L.assertIsDefined(It),H(xe,It),de(xe,void 0);let Tn=Ae.kind;if(AR(Tn)){let un=tt.parent;for(;un.kind===214||CR(un);)un=un.parent;(Tn===55||MT(un))&&wie(tt.left,It,MT(un)?un.thenStatement:void 0),uLe(It,tt.left)}}}function p(Ae,xe,tt){if(!xe.skip)return k(xe,Ae)}function h(Ae,xe){let tt;if(xe.skip)tt=J(xe);else{let It=O(xe);L.assertIsDefined(It);let Tn=J(xe);L.assertIsDefined(Tn),tt=wIe(Ae.left,Ae.operatorToken,Ae.right,It,Tn,Ae)}return xe.skip=!1,H(xe,void 0),de(xe,void 0),xe.stackIndex--,tt}function T(Ae,xe,tt){return de(Ae,xe),Ae}function k(Ae,xe){if(ar(xe))return xe;de(Ae,Yi(xe,Ae.checkMode))}function O(Ae){return Ae.typeStack[Ae.stackIndex]}function H(Ae,xe){Ae.typeStack[Ae.stackIndex]=xe}function J(Ae){return Ae.typeStack[Ae.stackIndex+1]}function de(Ae,xe){Ae.typeStack[Ae.stackIndex+1]=xe}}function GZe(n){let{left:a,operatorToken:c,right:u}=n;c.kind===60&&(ar(a)&&(a.operatorToken.kind===56||a.operatorToken.kind===55)&&an(a,_._0_and_1_operations_cannot_be_mixed_without_parentheses,Xa(a.operatorToken.kind),Xa(c.kind)),ar(u)&&(u.operatorToken.kind===56||u.operatorToken.kind===55)&&an(u,_._0_and_1_operations_cannot_be_mixed_without_parentheses,Xa(u.operatorToken.kind),Xa(c.kind)))}function BZe(n,a,c,u,p){let h=a.kind;if(h===63&&(n.kind===207||n.kind===206))return nT(n,Yi(c,u),u,c.kind===108);let T;AR(h)?T=aA(n,u):T=Yi(n,u);let k=Yi(c,u);return wIe(n,a,c,T,k,p)}function wIe(n,a,c,u,p,h){let T=a.kind;switch(T){case 41:case 42:case 66:case 67:case 43:case 68:case 44:case 69:case 40:case 65:case 47:case 70:case 48:case 71:case 49:case 72:case 51:case 74:case 52:case 78:case 50:case 73:if(u===Qe||p===Qe)return Qe;u=sp(u,n),p=sp(p,c);let en;if(u.flags&528&&p.flags&528&&(en=de(a.kind))!==void 0)return Fe(h||a,_.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead,Xa(a.kind),Xa(en)),rt;{let Jt=iU(n,u,_.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type,!0),Cn=iU(c,p,_.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type,!0),Rn;if(ul(u,3)&&ul(p,3)||!(Js(u,2112)||Js(p,2112)))Rn=rt;else if(k(u,p)){switch(T){case 49:case 72:It();break;case 42:case 67:R<3&&Fe(h,_.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later)}Rn=Ot}else It(k),Rn=ve;return Jt&&Cn&&Ae(Rn),Rn}case 39:case 64:if(u===Qe||p===Qe)return Qe;!ul(u,402653316)&&!ul(p,402653316)&&(u=sp(u,n),p=sp(p,c));let cn;return ul(u,296,!0)&&ul(p,296,!0)?cn=rt:ul(u,2112,!0)&&ul(p,2112,!0)?cn=Ot:ul(u,402653316,!0)||ul(p,402653316,!0)?cn=ae:(Zo(u)||Zo(p))&&(cn=Ro(u)||Ro(p)?ve:Se),cn&&!J(T)?cn:cn?(T===64&&Ae(cn),cn):(It((Cn,Rn)=>ul(Cn,402655727)&&ul(Rn,402655727)),Se);case 29:case 31:case 32:case 33:return J(T)&&(u=$ne(sp(u,n)),p=$ne(sp(p,c)),tt((Jt,Cn)=>{if(Zo(Jt)||Zo(Cn))return!0;let Rn=to(Jt,Ja),Br=to(Cn,Ja);return Rn&&Br||!Rn&&!Br&&_M(Jt,Cn)})),Te;case 34:case 35:case 36:case 37:if(Pj(n)||Pj(c)){let Jt=T===34||T===36;Fe(h,_.This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value,Jt?\"false\":\"true\")}return un(h,T,n,c),tt((Jt,Cn)=>yie(Jt,Cn)||yie(Cn,Jt)),Te;case 102:return wZe(n,c,u,p);case 101:return OZe(n,c,u,p);case 55:case 76:{let Jt=iu(u)&4194304?Gr([kXe(U?u:ky(p)),p]):u;return T===76&&Ae(p),Jt}case 56:case 75:{let Jt=iu(u)&8388608?Gr([yg(m2e(u)),p],2):u;return T===75&&Ae(p),Jt}case 60:case 77:{let Jt=iu(u)&262144?Gr([yg(u),p],2):u;return T===77&&Ae(p),Jt}case 63:let rr=ar(n.parent)?ic(n.parent):0;return O(rr,p),xe(rr)?((!(p.flags&524288)||rr!==2&&rr!==6&&!mh(p)&&!vre(p)&&!(Ur(p)&1))&&Ae(p),u):(Ae(p),p);case 27:if(!Y.allowUnreachableCode&&JM(n)&&!H(n.parent)){let Jt=Gn(n),Cn=Jt.text,Rn=xo(Cn,n.pos);Jt.parseDiagnostics.some(Hr=>Hr.code!==_.JSX_expressions_must_have_one_parent_element.code?!1:bj(Hr,Rn))||Fe(n,_.Left_side_of_comma_operator_is_unused_and_has_no_side_effects)}return p;default:return L.fail()}function k(en,cn){return ul(en,2112)&&ul(cn,2112)}function O(en,cn){if(en===2)for(let rr of Ey(cn)){let Jt=zn(rr);if(Jt.symbol&&Jt.symbol.flags&32){let Cn=rr.escapedName,Rn=zs(rr.valueDeclaration,Cn,788968,void 0,Cn,!1);Rn?.declarations&&Rn.declarations.some(Kz)&&(Mb(Rn,_.Duplicate_identifier_0,Gi(Cn),rr),Mb(rr,_.Duplicate_identifier_0,Gi(Cn),Rn))}}}function H(en){return en.parent.kind===214&&Vf(en.left)&&en.left.text===\"0\"&&(Pa(en.parent.parent)&&en.parent.parent.expression===en.parent||en.parent.parent.kind===212)&&(Us(en.right)||Re(en.right)&&en.right.escapedText===\"eval\")}function J(en){let cn=WM(u,12288)?n:WM(p,12288)?c:void 0;return cn?(Fe(cn,_.The_0_operator_cannot_be_applied_to_type_symbol,Xa(en)),!1):!0}function de(en){switch(en){case 51:case 74:return 56;case 52:case 78:return 37;case 50:case 73:return 55;default:return}}function Ae(en){Mg(T)&&i(cn);function cn(){if(CD(n,_.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access,_.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access)){let rr;if(Pe&&br(n)&&Js(en,32768)){let Jt=Vc(au(n.expression),n.name.escapedText);mB(en,Jt)&&(rr=_.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target)}Ly(en,u,n,c,rr)}}}function xe(en){var cn;switch(en){case 2:return!0;case 1:case 5:case 6:case 3:case 4:let rr=vd(n),Jt=oS(c);return!!Jt&&rs(Jt)&&!!((cn=rr?.exports)!=null&&cn.size);default:return!1}}function tt(en){return en(u,p)?!1:(It(en),!0)}function It(en){let cn=!1,rr=h||a;if(en){let Hr=bg(u),qi=bg(p);cn=!(Hr===u&&qi===p)&&!!(Hr&&qi)&&en(Hr,qi)}let Jt=u,Cn=p;!cn&&en&&([Jt,Cn]=UZe(u,p,en));let[Rn,Br]=Wt(Jt,Cn);Tn(rr,cn,Rn,Br)||Tv(rr,cn,_.Operator_0_cannot_be_applied_to_types_1_and_2,Xa(a.kind),Rn,Br)}function Tn(en,cn,rr,Jt){switch(a.kind){case 36:case 34:case 37:case 35:return Tv(en,cn,_.This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap,rr,Jt);default:return}}function un(en,cn,rr,Jt){let Cn=Nn(vs(rr)),Rn=Nn(vs(Jt));if(Cn||Rn){let Br=Fe(en,_.This_condition_will_always_return_0,Xa(cn===36||cn===34?95:110));if(Cn&&Rn)return;let Hr=cn===37||cn===35?Xa(53):\"\",qi=Cn?Jt:rr,wa=vs(qi);Ao(Br,hr(qi,_.Did_you_mean_0,`${Hr}Number.isNaN(${bc(wa)?qd(wa):\"...\"})`))}}function Nn(en){if(Re(en)&&en.escapedText===\"NaN\"){let cn=PKe();return!!cn&&cn===Qf(en)}return!1}}function UZe(n,a,c){let u=n,p=a,h=ky(n),T=ky(a);return c(h,T)||(u=h,p=T),[u,p]}function VZe(n){i(Ae);let a=Xd(n);if(!a)return Se;let c=pl(a);if(!(c&1))return Se;let u=(c&2)!==0;n.asteriskToken&&(u&&R<99&&Hc(n,26624),!u&&R<2&&Y.downlevelIteration&&Hc(n,256));let p=Hx(a),h=p&&bLe(p,u),T=h&&h.yieldType||Se,k=h&&h.nextType||Se,O=u?rT(k)||Se:k,H=n.expression?Yi(n.expression):je,J=TIe(n,H,O,u);if(p&&J&&Ly(J,T,n.expression||n,n.expression),n.asteriskToken)return Oie(u?19:17,1,H,n.expression)||Se;if(p)return c0(2,p,u)||Se;let de=cCe(2,a);return de||(de=Se,i(()=>{if(ge&&!Ble(n)){let xe=Ru(n,void 0);(!xe||Zo(xe))&&Fe(n,_.yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation)}})),de;function Ae(){n.flags&8192||dl(n,_.A_yield_expression_is_only_allowed_in_a_generator_body),kre(n)&&Fe(n,_.yield_expressions_cannot_be_used_in_a_parameter_initializer)}}function jZe(n,a){let c=aA(n.condition);wie(n.condition,c,n.whenTrue);let u=Yi(n.whenTrue,a),p=Yi(n.whenFalse,a);return Gr([u,p],2)}function RIe(n){let a=n.parent;return ud(a)&&RIe(a)||Vs(a)&&a.argumentExpression===n}function HZe(n){let a=[n.head.text],c=[];for(let u of n.templateSpans){let p=Yi(u.expression);WM(p,12288)&&Fe(u.expression,_.Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String),a.push(u.literal.text),c.push(to(p,Za)?p:ae)}return GC(n)||RIe(n)||yh(Ru(n,void 0)||ue,WZe)?WE(a,c):ae}function WZe(n){return!!(n.flags&134217856||n.flags&58982400&&Js(bu(n)||ue,402653316))}function zZe(n){return K0(n)&&!FS(n.parent)?n.parent.parent:n}function rA(n,a,c,u){let p=zZe(n);wM(p,a,!1),h$e(p,c);let h=Yi(n,u|1|(c?2:0));c&&c.intraExpressionInferenceSites&&(c.intraExpressionInferenceSites=void 0);let T=Js(h,2944)&&aU(h,BB(a,n,void 0))?Hu(h):h;return g$e(),vD(),T}function Ic(n,a){if(a)return Yi(n,a);let c=Rr(n);if(!c.resolvedType){let u=sn,p=ra;sn=Dn,ra=void 0,c.resolvedType=Yi(n,a),ra=p,sn=u}return c.resolvedType}function OIe(n){return n=vs(n,!0),n.kind===213||n.kind===231||RL(n)}function ID(n,a,c){let u=Yw(n);if(Yn(n)){let h=T4(n);if(h)return cie(u,h,a)}let p=Eie(u)||(c?rA(u,c,void 0,a||0):Ic(u,a));return ha(n)&&n.name.kind===204&&po(p)&&!p.target.hasRestElement&&Vv(p)<n.name.elements.length?JZe(p,n.name):p}function JZe(n,a){let c=a.elements,u=Ko(n).slice(),p=n.target.elementFlags.slice();for(let h=Vv(n);h<c.length;h++){let T=c[h];(h<c.length-1||!(T.kind===205&&T.dotDotDotToken))&&(u.push(!ol(T)&&RC(T)?hy(T,!1,!1):Se),p.push(2),!ol(T)&&!RC(T)&&qv(T,Se))}return ap(u,p,n.target.readonly)}function vie(n,a){let c=G_(n)&2||x6(n)?a:i0(a);if(Yn(n)){if(u2e(c))return qv(n,Se),Se;if(bB(c))return qv(n,Et),Et}return c}function aU(n,a){if(a){if(a.flags&3145728){let c=a.types;return vt(c,u=>aU(n,u))}if(a.flags&58982400){let c=bu(a)||ue;return Js(c,4)&&Js(n,128)||Js(c,8)&&Js(n,256)||Js(c,64)&&Js(n,2048)||Js(c,4096)&&Js(n,8192)||aU(n,c)}return!!(a.flags&406847616&&Js(n,128)||a.flags&256&&Js(n,256)||a.flags&2048&&Js(n,2048)||a.flags&512&&Js(n,512)||a.flags&8192&&Js(n,8192))}return!1}function GC(n){let a=n.parent;return pT(a)&&Ch(a.type)||RL(a)&&Ch(T3(a))||sie(n)&&KZe(n)||(ud(a)||fu(a)||Km(a))&&GC(a)||(yl(a)||xf(a)||xL(a))&&GC(a.parent)}function KZe(n){let a=Ru(n,0);return!!a&&yh(a,tM)}function BC(n,a,c){let u=Yi(n,a,c);return GC(n)||Zse(n)?Hu(u):OIe(n)?u:Qne(u,BB(Ru(n,void 0),n,void 0))}function NIe(n,a){return n.name.kind===164&&vg(n.name),BC(n.initializer,a)}function PIe(n,a){cke(n),n.name.kind===164&&vg(n.name);let c=IIe(n,a);return MIe(n,c,a)}function MIe(n,a,c){if(c&&c&10){let u=ED(a,0,!0),p=ED(a,1,!0),h=u||p;if(h&&h.typeParameters){let T=o0(n,2);if(T){let k=ED(yg(T),u?0:1,!1);if(k&&!k.typeParameters){if(c&8)return FIe(n,c),aa;let O=M1(n),H=O.signature&&qo(O.signature),J=H&&KCe(H);if(J&&!J.typeParameters&&!Ji(O.inferences,iA)){let de=$Ze(O,h.typeParameters),Ae=ine(h,de),xe=on(O.inferences,tt=>ore(tt.typeParameter));if(rre(Ae,k,(tt,It)=>{gh(xe,tt,It,0,!0)}),vt(xe,iA)&&(ire(Ae,k,(tt,It)=>{gh(xe,tt,It)}),!XZe(O.inferences,xe)))return YZe(O.inferences,xe),O.inferredTypeParameters=Qi(O.inferredTypeParameters,de),HE(Ae)}return HE(qCe(h,k,O))}}}}return a}function FIe(n,a){if(a&2){let c=M1(n);c.flags|=4}}function iA(n){return!!(n.candidates||n.contraCandidates)}function qZe(n){return!!(n.candidates||n.contraCandidates||Rxe(n.typeParameter))}function XZe(n,a){for(let c=0;c<n.length;c++)if(iA(n[c])&&iA(a[c]))return!0;return!1}function YZe(n,a){for(let c=0;c<n.length;c++)!iA(n[c])&&iA(a[c])&&(n[c]=a[c])}function $Ze(n,a){let c=[],u,p;for(let h of a){let T=h.symbol.escapedName;if(bie(n.inferredTypeParameters,T)||bie(c,T)){let k=QZe(Qi(n.inferredTypeParameters,c),T),O=wo(262144,k),H=rd(O);H.target=h,u=Sn(u,h),p=Sn(p,H),c.push(H)}else c.push(h)}if(p){let h=Wu(u,p);for(let T of p)T.mapper=h}return c}function bie(n,a){return vt(n,c=>c.symbol.escapedName===a)}function QZe(n,a){let c=a.length;for(;c>1&&a.charCodeAt(c-1)>=48&&a.charCodeAt(c-1)<=57;)c--;let u=a.slice(0,c);for(let p=1;;p++){let h=u+p;if(!bie(n,h))return h}}function GIe(n){let a=F1(n);if(a&&!a.typeParameters)return qo(a)}function ZZe(n){let a=Yi(n.expression),c=dD(a,n.expression),u=GIe(a);return u&&SB(u,n,c!==a)}function au(n){let a=Eie(n);if(a)return a;if(n.flags&134217728&&ra){let p=ra[zo(n)];if(p)return p}let c=Vn,u=Yi(n);if(Vn!==c){let p=ra||(ra=[]);p[zo(n)]=u,Gle(n,n.flags|134217728)}return u}function Eie(n){let a=vs(n,!0);if(RL(a)){let c=T3(a);if(!Ch(c))return $r(c)}if(a=vs(n),v2(a)){let c=Eie(a.expression);return c?rT(c):void 0}if(Pa(a)&&a.expression.kind!==106&&!qu(a,!0)&&!sIe(a))return dT(a)?ZZe(a):GIe(NC(a.expression));if(pT(a)&&!Ch(a.type))return $r(a.type);if(fT(n)||ose(n))return Yi(n)}function KM(n){let a=Rr(n);if(a.contextFreeType)return a.contextFreeType;wM(n,Se,!1);let c=a.contextFreeType=Yi(n,4);return vD(),c}function Yi(n,a,c){var u,p;(u=ai)==null||u.push(ai.Phase.Check,\"checkExpression\",{kind:n.kind,pos:n.pos,end:n.end,path:n.tracingPath});let h=P;P=n,A=0;let T=net(n,a,c),k=MIe(n,T,a);return hie(k)&&eet(n,k),P=h,(p=ai)==null||p.pop(),k}function eet(n,a){n.parent.kind===208&&n.parent.expression===n||n.parent.kind===209&&n.parent.expression===n||(n.kind===79||n.kind===163)&&vU(n)||n.parent.kind===183&&n.parent.exprName===n||n.parent.kind===278||Fe(n,_.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query),d_(Y)&&(L.assert(!!(a.symbol.flags&128)),a.symbol.valueDeclaration.flags&16777216&&Fe(n,_.Cannot_access_ambient_const_enums_when_0_is_enabled,Rt))}function tet(n,a){if(Kd(n)){if(zW(n))return cie(n.expression,JW(n),a);if(RL(n)){let c=T3(n);return fIe(c,c,n.expression,a)}}return Yi(n.expression,a)}function net(n,a,c){let u=n.kind;if(o)switch(u){case 228:case 215:case 216:o.throwIfCancellationRequested()}switch(u){case 79:return BYe(n,a);case 80:return Z$e(n);case 108:return kM(n);case 106:return Ire(n);case 104:return ir;case 14:case 10:return Yx(ff(n.text));case 8:return eae(n),Yx(op(+n.text));case 9:return iit(n),Yx(aB({negative:!1,base10Value:iL(n.text)}));case 110:return pe;case 95:return Ke;case 225:return HZe(n);case 13:return nf;case 206:return gCe(n,a,c);case 207:return O$e(n,a);case 208:return RCe(n,a);case 163:return OCe(n,a);case 209:return mQe(n,a);case 210:if(n.expression.kind===100)return zQe(n);case 211:return WQe(n,a);case 212:return JQe(n);case 214:return tet(n,a);case 228:return Wtt(n);case 215:case 216:return IIe(n,a);case 218:return AZe(n);case 213:case 231:return KQe(n);case 232:return XQe(n);case 230:return _Ie(n);case 235:return YQe(n);case 233:return $Qe(n);case 217:return SZe(n);case 219:return CZe(n);case 220:return LZe(n);case 221:return kZe(n);case 222:return DZe(n);case 223:return Ce(n,a);case 224:return jZe(n,a);case 227:return L$e(n,a);case 229:return je;case 226:return VZe(n);case 234:return k$e(n);case 291:return J$e(n,a);case 281:return F$e(n,a);case 282:return P$e(n,a);case 285:return G$e(n);case 289:return U$e(n,a);case 283:L.fail(\"Shouldn't ever directly check a JsxOpeningElement\")}return ve}function BIe(n){km(n),n.expression&&dl(n.expression,_.Type_expected),qa(n.constraint),qa(n.default);let a=UE(fr(n));bu(a),WJe(a)||Fe(n.default,_.Type_parameter_0_has_a_circular_default,Ee(a));let c=eu(a),u=jE(a);c&&u&&wu(u,uf(Oi(c,n0(a,u)),u),n.default,_.Type_0_does_not_satisfy_the_constraint_1),zC(n),i(()=>HC(n.name,_.Type_parameter_name_cannot_be_0))}function ret(n){var a,c;if(ku(n.parent)||Yr(n.parent)||Ep(n.parent)){let u=UE(fr(n)),p=Jne(u)&98304;if(p){let h=fr(n.parent);if(Ep(n.parent)&&!(Ur(gs(h))&48))Fe(n,_.Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_types);else if(p===32768||p===65536){(a=ai)==null||a.push(ai.Phase.CheckTypes,\"checkTypeParameterDeferred\",{parent:ru(gs(h)),id:ru(u)});let T=hM(h,u,p===65536?qs:ss),k=hM(h,u,p===65536?ss:qs),O=u;F=u,wu(T,k,n,_.Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation),F=O,(c=ai)==null||c.pop()}}}}function UIe(n){km(n),ZM(n);let a=Xd(n);Mr(n,16476)&&(a.kind===173&&Pf(a.body)||Fe(n,_.A_parameter_property_is_only_allowed_in_a_constructor_implementation),a.kind===173&&Re(n.name)&&n.name.escapedText===\"constructor\"&&Fe(n.name,_.constructor_cannot_be_used_as_a_parameter_property_name)),!n.initializer&&WW(n)&&La(n.name)&&a.body&&Fe(n,_.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature),n.name&&Re(n.name)&&(n.name.escapedText===\"this\"||n.name.escapedText===\"new\")&&(a.parameters.indexOf(n)!==0&&Fe(n,_.A_0_parameter_must_be_the_first_parameter,n.name.escapedText),(a.kind===173||a.kind===177||a.kind===182)&&Fe(n,_.A_constructor_cannot_have_a_this_parameter),a.kind===216&&Fe(n,_.An_arrow_function_cannot_have_a_this_parameter),(a.kind===174||a.kind===175)&&Fe(n,_.get_and_set_accessors_cannot_declare_this_parameters)),n.dotDotDotToken&&!La(n.name)&&!to(O_(zn(n.symbol)),Ri)&&Fe(n,_.A_rest_parameter_must_be_of_an_array_type)}function iet(n){let a=aet(n);if(!a){Fe(n,_.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);return}let c=ip(a),u=Lf(c);if(!u)return;qa(n.type);let{parameterName:p}=n;if(u.kind===0||u.kind===2)oB(p);else if(u.parameterIndex>=0){if(Xl(c)&&u.parameterIndex===c.parameters.length-1)Fe(p,_.A_type_predicate_cannot_reference_a_rest_parameter);else if(u.type){let h=()=>da(void 0,_.A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type);wu(u.type,zn(c.parameters[u.parameterIndex]),n.type,void 0,h)}}else if(p){let h=!1;for(let{name:T}of a.parameters)if(La(T)&&VIe(T,p,u.parameterName)){h=!0;break}h||Fe(n.parameterName,_.Cannot_find_parameter_0,u.parameterName)}}function aet(n){switch(n.parent.kind){case 216:case 176:case 259:case 215:case 181:case 171:case 170:let a=n.parent;if(n===a.type)return a}}function VIe(n,a,c){for(let u of n.elements){if(ol(u))continue;let p=u.name;if(p.kind===79&&p.escapedText===c)return Fe(a,_.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern,c),!0;if((p.kind===204||p.kind===203)&&VIe(p,a,c))return!0}}function LD(n){n.kind===178?wrt(n):(n.kind===181||n.kind===259||n.kind===182||n.kind===176||n.kind===173||n.kind===177)&&AU(n);let a=pl(n);a&4||((a&3)===3&&R<99&&Hc(n,6144),(a&3)===2&&R<4&&Hc(n,64),a&3&&R<2&&Hc(n,128)),t8(jy(n)),Vtt(n),mn(n.parameters,UIe),n.type&&qa(n.type),i(c);function c(){itt(n);let u=U_(n);if(ge&&!u)switch(n.kind){case 177:Fe(n,_.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);break;case 176:Fe(n,_.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);break}if(u){let p=pl(n);if((p&5)===1){let h=$r(u);if(h===yt)Fe(u,_.A_generator_cannot_have_a_void_type_annotation);else{let T=c0(0,h,(p&2)!==0)||Se,k=c0(1,h,(p&2)!==0)||T,O=c0(2,h,(p&2)!==0)||ue,H=EIe(T,k,O,!!(p&2));wu(H,h,u)}}else(p&3)===2&&Get(n,u)}n.kind!==178&&n.kind!==320&&Dy(n)}}function oet(n){let a=new Map,c=new Map,u=new Map;for(let h of n.members)if(h.kind===173)for(let T of h.parameters)Ad(T,h)&&!La(T.name)&&p(a,T.name,T.name.escapedText,3);else{let T=Ca(h),k=h.name;if(!k)continue;let O=pi(k),H=O&&T?16:0,J=O?u:T?c:a,de=k&&M0(k);if(de)switch(h.kind){case 174:p(J,k,de,1|H);break;case 175:p(J,k,de,2|H);break;case 169:p(J,k,de,3|H);break;case 171:p(J,k,de,8|H);break}}function p(h,T,k,O){let H=h.get(k);if(H)if((H&16)!==(O&16))Fe(T,_.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name,Qc(T));else{let J=!!(H&8),de=!!(O&8);J||de?J!==de&&Fe(T,_.Duplicate_identifier_0,Qc(T)):H&O&-17?Fe(T,_.Duplicate_identifier_0,Qc(T)):h.set(k,H|O)}else h.set(k,O)}}function set(n){for(let a of n.members){let c=a.name;if(Ca(a)&&c){let p=M0(c);switch(p){case\"name\":case\"length\":case\"caller\":case\"arguments\":case\"prototype\":let h=_.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1,T=_y(fr(n));Fe(c,h,p,T);break}}}}function jIe(n){let a=new Map;for(let c of n.members)if(c.kind===168){let u,p=c.name;switch(p.kind){case 10:case 8:u=p.text;break;case 79:u=vr(p);break;default:continue}a.get(u)?(Fe(sa(c.symbol.valueDeclaration),_.Duplicate_identifier_0,u),Fe(c.name,_.Duplicate_identifier_0,u)):a.set(u,!0)}}function Tie(n){if(n.kind===261){let c=fr(n);if(c.declarations&&c.declarations.length>0&&c.declarations[0]!==n)return}let a=Uxe(fr(n));if(a?.declarations){let c=new Map;for(let u of a.declarations)u.parameters.length===1&&u.parameters[0].type&&QE($r(u.parameters[0].type),p=>{let h=c.get(ru(p));h?h.declarations.push(u):c.set(ru(p),{type:p,declarations:[u]})});c.forEach(u=>{if(u.declarations.length>1)for(let p of u.declarations)Fe(p,_.Duplicate_index_signature_for_type_0,Ee(u.type))})}}function HIe(n){!km(n)&&!Zrt(n)&&CU(n.name),ZM(n),Sie(n),Mr(n,256)&&n.kind===169&&n.initializer&&Fe(n,_.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract,os(n.name))}function cet(n){return pi(n.name)&&Fe(n,_.Private_identifiers_are_not_allowed_outside_class_bodies),HIe(n)}function uet(n){cke(n)||CU(n.name),Nc(n)&&n.asteriskToken&&Re(n.name)&&vr(n.name)===\"constructor\"&&Fe(n.name,_.Class_constructor_may_not_be_a_generator),nLe(n),Mr(n,256)&&n.kind===171&&n.body&&Fe(n,_.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,os(n.name)),pi(n.name)&&!Zc(n)&&Fe(n,_.Private_identifiers_are_not_allowed_outside_class_bodies),Sie(n)}function Sie(n){if(pi(n.name)&&R<99){for(let a=tm(n);a;a=tm(a))Rr(a).flags|=4194304;if(_u(n.parent)){let a=xre(n.parent);a&&(Rr(n.name).flags|=32768,Rr(a).flags|=4096)}}}function det(n){km(n),pa(n,qa)}function fet(n){LD(n),$rt(n)||Qrt(n),qa(n.body);let a=fr(n),c=nc(a,n.kind);if(n===c&&cU(a),rc(n.body))return;i(p);return;function u(h){return xu(h)?!0:h.kind===169&&!Ca(h)&&!!h.initializer}function p(){let h=n.parent;if(P0(h)){Are(n.parent,h);let T=nCe(h),k=tCe(n.body);if(k){if(T&&Fe(k,_.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null),(Do(Y)!==99||!fe)&&(vt(n.parent.members,u)||vt(n.parameters,H=>Mr(H,16476))))if(!_et(k,n.body))Fe(k,_.A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers);else{let H;for(let J of n.body.statements){if(Ol(J)&&OA(ql(J.expression))){H=J;break}if(WIe(J))break}H===void 0&&Fe(n,_.A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers)}}else T||Fe(n,_.Constructors_for_derived_classes_must_contain_a_super_call)}}}function _et(n,a){let c=qy(n.parent);return Ol(c)&&c.parent===a}function WIe(n){return n.kind===106||n.kind===108?!0:ace(n)?!1:!!pa(n,WIe)}function zIe(n){Re(n.name)&&vr(n.name)===\"constructor\"&&Fe(n.name,_.Class_constructor_may_not_be_an_accessor),i(a),qa(n.body),Sie(n);function a(){if(!AU(n)&&!Urt(n)&&CU(n.name),XM(n),LD(n),n.kind===174&&!(n.flags&16777216)&&Pf(n.body)&&n.flags&256&&(n.flags&512||Fe(n.name,_.A_get_accessor_must_return_a_value)),n.name.kind===164&&vg(n.name),Ux(n)){let u=fr(n),p=nc(u,174),h=nc(u,175);if(p&&h&&!(sA(p)&1)){Rr(p).flags|=1;let T=uu(p),k=uu(h);(T&256)!==(k&256)&&(Fe(p.name,_.Accessors_must_both_be_abstract_or_non_abstract),Fe(h.name,_.Accessors_must_both_be_abstract_or_non_abstract)),(T&16&&!(k&24)||T&8&&!(k&8))&&(Fe(p.name,_.A_get_accessor_must_be_at_least_as_accessible_as_the_setter),Fe(h.name,_.A_get_accessor_must_be_at_least_as_accessible_as_the_setter));let O=te(p),H=te(h);O&&H&&wu(O,H,p,_.The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type)}}let c=Tr(fr(n));n.kind===174&&pie(n,c)}}function pet(n){XM(n)}function met(n,a,c){return n.typeArguments&&c<n.typeArguments.length?$r(n.typeArguments[c]):oU(n,a)[c]}function oU(n,a){return Sy(on(n.typeArguments,$r),a,Mp(a),Yn(n))}function JIe(n,a){let c,u,p=!0;for(let h=0;h<a.length;h++){let T=eu(a[h]);T&&(c||(c=oU(n,a),u=Wu(a,c)),p=p&&wu(c[h],Oi(T,u),n.typeArguments[h],_.Type_0_does_not_satisfy_the_constraint_1))}return p}function het(n,a){if(!Ro(n))return a.flags&524288&&Ai(a).typeParameters||(Ur(n)&4?n.target.localTypeParameters:void 0)}function xie(n){let a=$r(n);if(!Ro(a)){let c=Rr(n).resolvedSymbol;if(c)return het(a,c)}}function Aie(n){if(a8(n,n.typeArguments),n.kind===180&&!Yn(n)&&!qw(n)&&n.typeArguments&&n.typeName.end!==n.typeArguments.pos){let a=Gn(n);Xse(a,n.typeName.end)===24&&u0(n,xo(a.text,n.typeName.end),1,_.JSDoc_types_can_only_be_used_inside_documentation_comments)}mn(n.typeArguments,qa),KIe(n)}function KIe(n){let a=$r(n);if(!Ro(a)){n.typeArguments&&i(()=>{let u=xie(n);u&&JIe(n,u)});let c=Rr(n).resolvedSymbol;c&&vt(c.declarations,u=>o2(u)&&!!(u.flags&268435456))&&Xh(BM(n),c.declarations,c.escapedName)}}function get(n){let a=zr(n.parent,_6);if(!a)return;let c=xie(a);if(!c)return;let u=eu(c[a.typeArguments.indexOf(n)]);return u&&Oi(u,Wu(c,oU(a,c)))}function yet(n){$xe(n)}function vet(n){mn(n.members,qa),i(a);function a(){let c=GAe(n);mU(c,c.symbol),Tie(n),jIe(n)}}function bet(n){qa(n.elementType)}function Eet(n){let a=n.elements,c=!1,u=!1,p=vt(a,bL);for(let h of a){if(h.kind!==199&&p){an(h,_.Tuple_members_must_all_have_names_or_all_not_have_names);break}let T=hne(h);if(T&8){let k=$r(h.type);if(!Kv(k)){Fe(h,_.A_rest_element_type_must_be_an_array_type);break}(_f(k)||po(k)&&k.target.combinedFlags&4)&&(u=!0)}else if(T&4){if(u){an(h,_.A_rest_element_cannot_follow_another_rest_element);break}u=!0}else if(T&2){if(u){an(h,_.An_optional_element_cannot_follow_a_rest_element);break}c=!0}else if(c){an(h,_.A_required_element_cannot_follow_an_optional_element);break}}mn(n.elements,qa),$r(n)}function Tet(n){mn(n.types,qa),$r(n)}function qIe(n,a){if(!(n.flags&8388608))return n;let c=n.objectType,u=n.indexType;if(to(u,Gp(c,!1)))return a.kind===209&&Um(a)&&Ur(c)&32&&Pp(c)&1&&Fe(a,_.Index_signature_in_type_0_only_permits_reading,Ee(c)),n;let p=Eu(c);if(Cm(p,rt)&&ul(u,296))return n;if(Zb(c)){let h=eB(u,a);if(h){let T=QE(p,k=>ja(k,h));if(T&&Ef(T)&24)return Fe(a,_.Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter,Gi(h)),ve}}return Fe(a,_.Type_0_cannot_be_used_to_index_type_1,Ee(u),Ee(c)),ve}function xet(n){qa(n.objectType),qa(n.indexType),qIe(RAe(n),n)}function Aet(n){Cet(n),qa(n.typeParameter),qa(n.nameType),qa(n.type),n.type||qv(n,Se);let a=Cne(n),c=by(a);if(c)wu(c,Si,n.nameType);else{let u=rp(a);wu(u,Si,EA(n.typeParameter))}}function Cet(n){var a;if((a=n.members)!=null&&a.length)return an(n.members[0],_.A_mapped_type_may_not_declare_properties_or_methods)}function Iet(n){oB(n)}function Let(n){jrt(n),qa(n.type)}function ket(n){pa(n,qa)}function Det(n){jn(n,c=>c.parent&&c.parent.kind===191&&c.parent.extendsType===c)||an(n,_.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type),qa(n.typeParameter);let a=fr(n.typeParameter);if(a.declarations&&a.declarations.length>1){let c=Ai(a);if(!c.typeParametersChecked){c.typeParametersChecked=!0;let u=UE(a),p=Ase(a,165);if(!xLe(p,[u],h=>[h])){let h=E(a);for(let T of p)Fe(T.name,_.All_declarations_of_0_must_have_identical_constraints,h)}}}Dy(n)}function wet(n){for(let a of n.templateSpans){qa(a.type);let c=$r(a.type);wu(c,Za,a.type)}$r(n)}function Ret(n){qa(n.argument),n.assertions&&qS(n.assertions.assertClause,an)&&(TR()||an(n.assertions.assertClause,_.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next),$s(Y)!==3&&$s(Y)!==99&&an(n.assertions.assertClause,_.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext)),KIe(n)}function Oet(n){n.dotDotDotToken&&n.questionToken&&an(n,_.A_tuple_member_cannot_be_both_optional_and_rest),n.type.kind===187&&an(n.type,_.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type),n.type.kind===188&&an(n.type,_.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type),qa(n.type),$r(n)}function qM(n){return(cd(n,8)||xu(n))&&!!(n.flags&16777216)}function sU(n,a){let c=wg(n);return n.parent.kind!==261&&n.parent.kind!==260&&n.parent.kind!==228&&n.flags&16777216&&(!(c&2)&&!(Tp(n.parent)&&Tc(n.parent.parent)&&mp(n.parent.parent))&&(c|=1),c|=2),c&a}function cU(n){i(()=>Net(n))}function Net(n){function a(cn,rr){return rr!==void 0&&rr.parent===cn[0].parent?rr:cn[0]}function c(cn,rr,Jt,Cn,Rn){if((Cn^Rn)!==0){let Hr=sU(a(cn,rr),Jt);mn(cn,qi=>{let wa=sU(qi,Jt)^Hr;wa&1?Fe(sa(qi),_.Overload_signatures_must_all_be_exported_or_non_exported):wa&2?Fe(sa(qi),_.Overload_signatures_must_all_be_ambient_or_non_ambient):wa&24?Fe(sa(qi)||qi,_.Overload_signatures_must_all_be_public_private_or_protected):wa&256&&Fe(sa(qi),_.Overload_signatures_must_all_be_abstract_or_non_abstract)})}}function u(cn,rr,Jt,Cn){if(Jt!==Cn){let Rn=uS(a(cn,rr));mn(cn,Br=>{uS(Br)!==Rn&&Fe(sa(Br),_.Overload_signatures_must_all_be_optional_or_required)})}}let p=283,h=0,T=p,k=!1,O=!0,H=!1,J,de,Ae,xe=n.declarations,tt=(n.flags&16384)!==0;function It(cn){if(cn.name&&rc(cn.name))return;let rr=!1,Jt=pa(cn.parent,Rn=>{if(rr)return Rn;rr=Rn===cn});if(Jt&&Jt.pos===cn.end&&Jt.kind===cn.kind){let Rn=Jt.name||Jt,Br=Jt.name;if(cn.name&&Br&&(pi(cn.name)&&pi(Br)&&cn.name.escapedText===Br.escapedText||ts(cn.name)&&ts(Br)||c_(cn.name)&&c_(Br)&&MI(cn.name)===MI(Br))){if((cn.kind===171||cn.kind===170)&&Ca(cn)!==Ca(Jt)){let qi=Ca(cn)?_.Function_overload_must_be_static:_.Function_overload_must_not_be_static;Fe(Rn,qi)}return}if(Pf(Jt.body)){Fe(Rn,_.Function_implementation_name_must_be_0,os(cn.name));return}}let Cn=cn.name||cn;tt?Fe(Cn,_.Constructor_implementation_is_missing):Mr(cn,256)?Fe(Cn,_.All_declarations_of_an_abstract_method_must_be_consecutive):Fe(Cn,_.Function_implementation_is_missing_or_not_immediately_following_the_declaration)}let Tn=!1,un=!1,Nn=!1,en=[];if(xe)for(let cn of xe){let rr=cn,Jt=rr.flags&16777216,Cn=rr.parent&&(rr.parent.kind===261||rr.parent.kind===184)||Jt;if(Cn&&(Ae=void 0),(rr.kind===260||rr.kind===228)&&!Jt&&(Nn=!0),rr.kind===259||rr.kind===171||rr.kind===170||rr.kind===173){en.push(rr);let Rn=sU(rr,p);h|=Rn,T&=Rn,k=k||uS(rr),O=O&&uS(rr);let Br=Pf(rr.body);Br&&J?tt?un=!0:Tn=!0:Ae?.parent===rr.parent&&Ae.end!==rr.pos&&It(Ae),Br?J||(J=rr):H=!0,Ae=rr,Cn||(de=rr)}if(Yn(cn)&&Ia(cn)&&cn.jsDoc){for(let Rn of cn.jsDoc)if(Rn.tags)for(let Br of Rn.tags)kL(Br)&&(H=!0)}}if(un&&mn(en,cn=>{Fe(cn,_.Multiple_constructor_implementations_are_not_allowed)}),Tn&&mn(en,cn=>{Fe(sa(cn)||cn,_.Duplicate_function_implementation)}),Nn&&!tt&&n.flags&16&&xe){let cn=Pr(xe,rr=>rr.kind===260).map(rr=>hr(rr,_.Consider_adding_a_declare_modifier_to_this_class));mn(xe,rr=>{let Jt=rr.kind===260?_.Class_declaration_cannot_implement_overload_list_for_0:rr.kind===259?_.Function_with_bodies_can_only_merge_with_classes_that_are_ambient:void 0;Jt&&Ao(Fe(sa(rr)||rr,Jt,fc(n)),...cn)})}if(de&&!de.body&&!Mr(de,256)&&!de.questionToken&&It(de),H&&(xe&&(c(xe,J,p,h,T),u(xe,J,k,O)),J)){let cn=Xb(n),rr=ip(J);for(let Jt of cn)if(!aXe(rr,Jt)){let Cn=Jt.declaration&&X0(Jt.declaration)?Jt.declaration.parent.tagName:Jt.declaration;Ao(Fe(Cn,_.This_overload_signature_is_not_compatible_with_its_implementation_signature),hr(J,_.The_implementation_signature_is_declared_here));break}}}function kD(n){i(()=>Pet(n))}function Pet(n){let a=n.localSymbol;if(!a&&(a=fr(n),!a.exportSymbol)||nc(a,n.kind)!==n)return;let c=0,u=0,p=0;for(let H of a.declarations){let J=O(H),de=sU(H,1025);de&1?de&1024?p|=J:c|=J:u|=J}let h=c|u,T=c&u,k=p&h;if(T||k)for(let H of a.declarations){let J=O(H),de=sa(H);J&k?Fe(de,_.Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead,os(de)):J&T&&Fe(de,_.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,os(de))}function O(H){let J=H;switch(J.kind){case 261:case 262:case 349:case 341:case 343:return 2;case 264:return lu(J)||Gh(J)!==0?5:4;case 260:case 263:case 302:return 3;case 308:return 7;case 274:case 223:let de=J,Ae=pc(de)?de.expression:de.right;if(!bc(Ae))return 1;J=Ae;case 268:case 271:case 270:let xe=0,tt=wc(fr(J));return mn(tt.declarations,It=>{xe|=O(It)}),xe;case 257:case 205:case 259:case 273:case 79:return 1;case 170:case 168:return 2;default:return L.failBadSyntaxKind(J)}}}function DD(n,a,c,u){let p=wD(n,a);return p&&rT(p,a,c,u)}function wD(n,a,c){if(Zo(n))return;let u=n;if(u.promisedTypeOfPromise)return u.promisedTypeOfPromise;if(Bv(n,oM(!1)))return u.promisedTypeOfPromise=Ko(n)[0];if(zM(Ty(n),134479868))return;let p=Vc(n,\"then\");if(Zo(p))return;let h=p?xa(p,0):Je;if(h.length===0){a&&Fe(a,_.A_promise_must_have_a_then_method);return}let T,k;for(let J of h){let de=Yb(J);de&&de!==yt&&!Bp(n,de,hm)?T=de:k=Sn(k,J)}if(!k){L.assertIsDefined(T),c&&(c.value=T),a&&Fe(a,_.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1,Ee(n),Ee(T));return}let O=wf(Gr(on(k,uie)),2097152);if(Zo(O))return;let H=xa(O,0);if(H.length===0){a&&Fe(a,_.The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback);return}return u.promisedTypeOfPromise=Gr(on(H,uie),2)}function RD(n,a,c,u,p){return(a?rT(n,c,u,p):bg(n,c,u,p))||ve}function XIe(n){if(zM(Ty(n),134479868))return!1;let a=Vc(n,\"then\");return!!a&&xa(wf(a,2097152),0).length>0}function lU(n){var a;if(n.flags&16777216){let c=mne(!1);return!!c&&n.aliasSymbol===c&&((a=n.aliasTypeArguments)==null?void 0:a.length)===1}return!1}function UC(n){return n.flags&1048576?Ls(n,UC):lU(n)?n.aliasTypeArguments[0]:n}function YIe(n){if(Zo(n)||lU(n))return!1;if(Zb(n)){let a=bu(n);if(a?a.flags&3||mh(a)||yh(a,XIe):Js(n,8650752))return!0}return!1}function Met(n){let a=mne(!0);if(a)return Jx(a,[UC(n)])}function Fet(n){if(YIe(n)){let a=Met(n);if(a)return a}return L.assert(lU(n)||wD(n)===void 0,\"type provided should not be a non-generic 'promise'-like.\"),n}function rT(n,a,c,u){let p=bg(n,a,c,u);return p&&Fet(p)}function bg(n,a,c,u){if(Zo(n)||lU(n))return n;let p=n;if(p.awaitedTypeOfType)return p.awaitedTypeOfType;if(n.flags&1048576){if(Jh.lastIndexOf(n.id)>=0){a&&Fe(a,_.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method);return}let k=a?H=>bg(H,a,c,u):bg;Jh.push(n.id);let O=Ls(n,k);return Jh.pop(),p.awaitedTypeOfType=O}if(YIe(n))return p.awaitedTypeOfType=n;let h={value:void 0},T=wD(n,void 0,h);if(T){if(n.id===T.id||Jh.lastIndexOf(T.id)>=0){a&&Fe(a,_.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method);return}Jh.push(n.id);let k=bg(T,a,c,u);return Jh.pop(),k?p.awaitedTypeOfType=k:void 0}if(XIe(n)){if(a){L.assertIsDefined(c);let k;h.value&&(k=da(k,_.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1,Ee(n),Ee(h.value))),k=da(k,c,u),Lo.add(Lh(Gn(a),a,k))}return}return p.awaitedTypeOfType=n}function Get(n,a){let c=$r(a);if(R>=2){if(Ro(c))return;let u=oM(!0);if(u!==ro&&!Bv(c,u)){Fe(a,_.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0,Ee(bg(c)||yt));return}}else{if(Uet(a),Ro(c))return;let u=Jw(a);if(u===void 0){Fe(a,_.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value,Ee(c));return}let p=uc(u,111551,!0),h=p?zn(p):ve;if(Ro(h)){u.kind===79&&u.escapedText===\"Promise\"&&Bx(c)===oM(!1)?Fe(a,_.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option):Fe(a,_.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value,qd(u));return}let T=mKe(!0);if(T===Ki){Fe(a,_.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value,qd(u));return}if(!wu(h,T,a,_.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value))return;let k=u&&Yd(u),O=yd(n.locals,k.escapedText,111551);if(O){Fe(O.valueDeclaration,_.Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions,vr(k),qd(u));return}}RD(c,!1,n,_.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)}function Bet(n){let a=MC(n);tU(a,n);let c=qo(a);if(c.flags&1)return;let u=_ie(n);if(!u?.resolvedReturnType)return;let p,h=u.resolvedReturnType;switch(n.parent.kind){case 260:case 228:p=_.Decorator_function_return_type_0_is_not_assignable_to_type_1;break;case 169:if(!$){p=_.Decorator_function_return_type_0_is_not_assignable_to_type_1;break}case 166:p=_.Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any;break;case 171:case 174:case 175:p=_.Decorator_function_return_type_0_is_not_assignable_to_type_1;break;default:return L.failBadSyntaxKind(n.parent)}wu(c,h,n.expression,p)}function OD(n,a,c,u,p,h=c.length,T=0){let k=D.createFunctionTypeNode(void 0,Je,D.createKeywordTypeNode(131));return Am(k,n,a,c,u,p,h,T)}function Cie(n,a,c,u,p,h,T){let k=OD(n,a,c,u,p,h,T);return HE(k)}function $Ie(n){return Cie(void 0,void 0,Je,n)}function QIe(n){let a=A_(\"value\",n);return Cie(void 0,void 0,[a],yt)}function Uet(n){ZIe(n&&Jw(n),!1)}function ZIe(n,a){if(!n)return;let c=Yd(n),u=(n.kind===79?788968:1920)|2097152,p=zs(c,c.escapedText,u,void 0,void 0,!0);if(p&&p.flags&2097152){if(!Y.verbatimModuleSyntax&&ig(p)&&!MD(wc(p))&&!nd(p))Hb(p);else if(a&&d_(Y)&&Rl(Y)>=5&&!ig(p)&&!vt(p.declarations,I0)){let h=Fe(n,_.A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled),T=wr(p.declarations||Je,Zh);T&&Ao(h,hr(T,_._0_was_imported_here,vr(c)))}}}function VC(n){let a=Iie(n);a&&Cd(a)&&ZIe(a,!0)}function Iie(n){if(n)switch(n.kind){case 190:case 189:return eLe(n.types);case 191:return eLe([n.trueType,n.falseType]);case 193:case 199:return Iie(n.type);case 180:return n.typeName}}function eLe(n){let a;for(let c of n){for(;c.kind===193||c.kind===199;)c=c.type;if(c.kind===144||!U&&(c.kind===198&&c.literal.kind===104||c.kind===155))continue;let u=Iie(c);if(!u)return;if(a){if(!Re(a)||!Re(u)||a.escapedText!==u.escapedText)return}else a=u}return a}function uU(n){let a=Cl(n);return Fm(n)?SH(a):a}function XM(n){if(!HS(n)||!bf(n)||!n.modifiers||!M6($,n,n.parent,n.parent.parent))return;let a=wr(n.modifiers,du);if(a){if($?(Hc(a,8),n.kind===166&&Hc(a,32)):R<99&&(Hc(a,8),sl(n)?n.name?ALe(n)&&Hc(a,8388608):Hc(a,8388608):_u(n)||(pi(n.name)&&(Nc(n)||rb(n)||Id(n))&&Hc(a,8388608),ts(n.name)&&Hc(a,16777216))),Y.emitDecoratorMetadata)switch(Hc(a,16),n.kind){case 260:let c=Vm(n);if(c)for(let T of c.parameters)VC(uU(T));break;case 174:case 175:let u=n.kind===174?175:174,p=nc(fr(n),u);VC(N(n)||p&&N(p));break;case 171:for(let T of n.parameters)VC(uU(T));VC(U_(n));break;case 169:VC(Cl(n));break;case 166:VC(uU(n));let h=n.parent;for(let T of h.parameters)VC(uU(T));break}for(let c of n.modifiers)du(c)&&Bet(c)}}function Vet(n){i(a);function a(){nLe(n),Yie(n),jC(n,n.name)}}function jet(n){n.typeExpression||Fe(n.name,_.JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags),n.name&&HC(n.name,_.Type_alias_name_cannot_be_0),qa(n.typeExpression),t8(jy(n))}function Het(n){qa(n.constraint);for(let a of n.typeParameters)qa(a)}function Wet(n){qa(n.typeExpression)}function zet(n){qa(n.typeExpression);let a=WA(n);if(a){let c=kj(a,v3);if(Fn(c)>1)for(let u=1;u<Fn(c);u++){let p=c[u].tagName;Fe(p,_._0_tag_already_specified,vr(p))}}}function Jet(n){n.name&&r8(n.name,!0)}function Ket(n){qa(n.typeExpression)}function qet(n){qa(n.typeExpression)}function Xet(n){i(a),LD(n);function a(){!n.type&&!jA(n)&&qv(n,Se)}}function Yet(n){let a=WA(n);(!a||!sl(a)&&!_u(a))&&Fe(a,_.JSDoc_0_is_not_attached_to_a_class,vr(n.tagName))}function $et(n){let a=WA(n);if(!a||!sl(a)&&!_u(a)){Fe(a,_.JSDoc_0_is_not_attached_to_a_class,vr(n.tagName));return}let c=A0(a).filter(x2);L.assert(c.length>0),c.length>1&&Fe(c[1],_.Class_declarations_cannot_have_more_than_one_augments_or_extends_tag);let u=tLe(n.class.expression),p=P0(a);if(p){let h=tLe(p.expression);h&&u.escapedText!==h.escapedText&&Fe(u,_.JSDoc_0_1_does_not_match_the_extends_2_clause,vr(n.tagName),vr(u),vr(h))}}function Qet(n){let a=dS(n);a&&xu(a)&&Fe(n,_.An_accessibility_modifier_cannot_be_used_with_a_private_identifier)}function tLe(n){switch(n.kind){case 79:return n;case 208:return n.name;default:return}}function nLe(n){var a;XM(n),LD(n);let c=pl(n);if(n.name&&n.name.kind===164&&vg(n.name),Ux(n)){let h=fr(n),T=n.localSymbol||h,k=(a=T.declarations)==null?void 0:a.find(O=>O.kind===n.kind&&!(O.flags&262144));n===k&&cU(T),h.parent&&cU(h)}let u=n.kind===170?void 0:n.body;if(qa(u),pie(n,Hx(n)),i(p),Yn(n)){let h=x0(n);h&&h.typeExpression&&!Ore($r(h.typeExpression),n)&&Fe(h.typeExpression.type,_.The_type_of_a_function_declaration_must_match_the_function_s_signature)}function p(){U_(n)||(rc(u)&&!qM(n)&&qv(n,Se),c&1&&Pf(u)&&qo(ip(n)))}}function Dy(n){i(a);function a(){let c=Gn(n),u=rn.get(c.path);u||(u=[],rn.set(c.path,u)),u.push(n)}}function rLe(n,a){for(let c of n)switch(c.kind){case 260:case 228:Zet(c,a),Lie(c,a);break;case 308:case 264:case 238:case 266:case 245:case 246:case 247:oLe(c,a);break;case 173:case 215:case 259:case 216:case 171:case 174:case 175:c.body&&oLe(c,a),Lie(c,a);break;case 170:case 176:case 177:case 181:case 182:case 262:case 261:Lie(c,a);break;case 192:ett(c,a);break;default:L.assertNever(c,\"Node should not have been registered for unused identifiers check\")}}function iLe(n,a,c){let u=sa(n)||n,p=o2(n)?_._0_is_declared_but_never_used:_._0_is_declared_but_its_value_is_never_read;c(n,0,hr(u,p,a))}function YM(n){return Re(n)&&vr(n).charCodeAt(0)===95}function Zet(n,a){for(let c of n.members)switch(c.kind){case 171:case 169:case 174:case 175:if(c.kind===175&&c.symbol.flags&32768)break;let u=fr(c);!u.isReferenced&&(cd(c,8)||zl(c)&&pi(c.name))&&!(c.flags&16777216)&&a(c,0,hr(c.name,_._0_is_declared_but_its_value_is_never_read,E(u)));break;case 173:for(let p of c.parameters)!p.symbol.isReferenced&&Mr(p,8)&&a(p,0,hr(p.name,_.Property_0_is_declared_but_its_value_is_never_read,fc(p.symbol)));break;case 178:case 237:case 172:break;default:L.fail(\"Unexpected class member\")}}function ett(n,a){let{typeParameter:c}=n;kie(c)&&a(n,1,hr(n,_._0_is_declared_but_its_value_is_never_read,vr(c.name)))}function Lie(n,a){let c=fr(n).declarations;if(!c||To(c)!==n)return;let u=jy(n),p=new Set;for(let h of u){if(!kie(h))continue;let T=vr(h.name),{parent:k}=h;if(k.kind!==192&&k.typeParameters.every(kie)){if(_0(p,k)){let O=Gn(k),H=H_(k)?MW(k):FW(O,k.typeParameters),J=k.typeParameters.length===1,de=J?_._0_is_declared_but_its_value_is_never_read:_.All_type_parameters_are_unused,Ae=J?T:void 0;a(h,1,al(O,H.pos,H.end-H.pos,de,Ae))}}else a(h,1,hr(h,_._0_is_declared_but_its_value_is_never_read,T))}}function kie(n){return!(No(n.symbol).isReferenced&262144)&&!YM(n.name)}function $M(n,a,c,u){let p=String(u(a)),h=n.get(p);h?h[1].push(c):n.set(p,[a,[c]])}function aLe(n){return zr(nm(n),ha)}function ttt(n){return Wo(n)?cm(n.parent)?!!(n.propertyName&&YM(n.name)):YM(n.name):lu(n)||(wi(n)&&CA(n.parent.parent)||sLe(n))&&YM(n.name)}function oLe(n,a){let c=new Map,u=new Map,p=new Map;n.locals.forEach(h=>{if(!(h.flags&262144?!(h.flags&3&&!(h.isReferenced&3)):h.isReferenced||h.exportSymbol)&&h.declarations){for(let T of h.declarations)if(!ttt(T))if(sLe(T))$M(c,rtt(T),T,zo);else if(Wo(T)&&cm(T.parent)){let k=To(T.parent.elements);(T===k||!To(T.parent.elements).dotDotDotToken)&&$M(u,T.parent,T,zo)}else if(wi(T))$M(p,T.parent,T,zo);else{let k=h.valueDeclaration&&aLe(h.valueDeclaration),O=h.valueDeclaration&&sa(h.valueDeclaration);k&&O?!Ad(k,k.parent)&&!G0(k)&&!YM(O)&&(Wo(T)&&g2(T.parent)?$M(u,T.parent,T,zo):a(k,1,hr(O,_._0_is_declared_but_its_value_is_never_read,fc(h)))):iLe(T,fc(h),a)}}}),c.forEach(([h,T])=>{let k=h.parent;if((h.name?1:0)+(h.namedBindings?h.namedBindings.kind===271?1:h.namedBindings.elements.length:0)===T.length)a(k,0,T.length===1?hr(k,_._0_is_declared_but_its_value_is_never_read,vr(Vo(T).name)):hr(k,_.All_imports_in_import_declaration_are_unused));else for(let H of T)iLe(H,vr(H.name),a)}),u.forEach(([h,T])=>{let k=aLe(h.parent)?1:0;if(h.elements.length===T.length)T.length===1&&h.parent.kind===257&&h.parent.parent.kind===258?$M(p,h.parent.parent,h.parent,zo):a(h,k,T.length===1?hr(h,_._0_is_declared_but_its_value_is_never_read,QM(Vo(T).name)):hr(h,_.All_destructured_elements_are_unused));else for(let O of T)a(O,k,hr(O,_._0_is_declared_but_its_value_is_never_read,QM(O.name)))}),p.forEach(([h,T])=>{if(h.declarations.length===T.length)a(h,0,T.length===1?hr(Vo(T).name,_._0_is_declared_but_its_value_is_never_read,QM(Vo(T).name)):hr(h.parent.kind===240?h.parent:h,_.All_variables_are_unused));else for(let k of T)a(k,0,hr(k,_._0_is_declared_but_its_value_is_never_read,QM(k.name)))})}function ntt(){var n;for(let a of m1)if(!((n=fr(a))!=null&&n.isReferenced)){let c=bA(a);L.assert(CT(c),\"Only parameter declaration should be checked here\");let u=hr(a.name,_._0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation,os(a.name),os(a.propertyName));c.type||Ao(u,al(Gn(c),c.end,1,_.We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here,os(a.propertyName))),Lo.add(u)}}function QM(n){switch(n.kind){case 79:return vr(n);case 204:case 203:return QM(Ga(Vo(n.elements),Wo).name);default:return L.assertNever(n)}}function sLe(n){return n.kind===270||n.kind===273||n.kind===271}function rtt(n){return n.kind===270?n:n.kind===271?n.parent:n.parent.parent}function dU(n){if(n.kind===238&&vh(n),Bj(n)){let a=ki;mn(n.statements,qa),ki=a}else mn(n.statements,qa);n.locals&&Dy(n)}function itt(n){R>=2||!Yj(n)||n.flags&16777216||rc(n.body)||mn(n.parameters,a=>{a.name&&!La(a.name)&&a.name.escapedText===_t.escapedName&&Ev(\"noEmit\",a,_.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters)})}function ND(n,a,c){if(a?.escapedText!==c||n.kind===169||n.kind===168||n.kind===171||n.kind===170||n.kind===174||n.kind===175||n.kind===299||n.flags&16777216||(lm(n)||Nl(n)||$u(n))&&I0(n))return!1;let u=nm(n);return!(ha(u)&&rc(u.parent.body))}function att(n){jn(n,a=>sA(a)&4?(n.kind!==79?Fe(sa(n),_.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference):Fe(n,_.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference),!0):!1)}function ott(n){jn(n,a=>sA(a)&8?(n.kind!==79?Fe(sa(n),_.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference):Fe(n,_.Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference),!0):!1)}function stt(n,a){if(ie>=5&&!(ie>=100&&Gn(n).impliedNodeFormat===1)||!a||!ND(n,a,\"require\")&&!ND(n,a,\"exports\")||Tc(n)&&Gh(n)!==1)return;let c=FE(n);c.kind===308&&kd(c)&&Ev(\"noEmit\",a,_.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module,os(a),os(a))}function ctt(n,a){if(!a||R>=4||!ND(n,a,\"Promise\")||Tc(n)&&Gh(n)!==1)return;let c=FE(n);c.kind===308&&kd(c)&&c.flags&2048&&Ev(\"noEmit\",a,_.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions,os(a),os(a))}function ltt(n,a){R<=8&&(ND(n,a,\"WeakMap\")||ND(n,a,\"WeakSet\"))&&Lb.push(n)}function utt(n){let a=tm(n);sA(a)&4194304&&(L.assert(zl(n)&&Re(n.name)&&typeof n.name.escapedText==\"string\",\"The target of a WeakMap/WeakSet collision check should be an identifier\"),Ev(\"noEmit\",n,_.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel,n.name.escapedText))}function dtt(n,a){a&&R>=2&&R<=8&&ND(n,a,\"Reflect\")&&bv.push(n)}function ftt(n){let a=!1;if(_u(n)){for(let c of n.members)if(sA(c)&8388608){a=!0;break}}else if(ms(n))sA(n)&8388608&&(a=!0);else{let c=tm(n);c&&sA(c)&8388608&&(a=!0)}a&&(L.assert(zl(n)&&Re(n.name),\"The target of a Reflect collision check should be an identifier\"),Ev(\"noEmit\",n,_.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers,os(n.name),\"Reflect\"))}function jC(n,a){a&&(stt(n,a),ctt(n,a),ltt(n,a),dtt(n,a),Yr(n)?(HC(a,_.Class_name_cannot_be_0),n.flags&16777216||Utt(a)):hb(n)&&HC(a,_.Enum_name_cannot_be_0))}function _tt(n){if(G_(n)&3||CT(n)||n.kind===257&&!n.initializer)return;let a=fr(n);if(a.flags&1){if(!Re(n.name))return L.fail();let c=zs(n,n.name.escapedText,3,void 0,void 0,!1);if(c&&c!==a&&c.flags&2&&WB(c)&3){let u=cb(c.valueDeclaration,258),p=u.parent.kind===240&&u.parent.parent?u.parent.parent:void 0;if(!(p&&(p.kind===238&&Ia(p.parent)||p.kind===265||p.kind===264||p.kind===308))){let T=E(c);Fe(n,_.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1,T,T)}}}}function PD(n){return n===at?Se:n===bn?Et:n}function ZM(n){var a;if(XM(n),Wo(n)||qa(n.type),!n.name)return;if(n.name.kind===164&&(vg(n.name),mT(n)&&n.initializer&&Ic(n.initializer)),Wo(n)){if(n.propertyName&&Re(n.name)&&CT(n)&&rc(Xd(n).body)){m1.push(n);return}cm(n.parent)&&n.dotDotDotToken&&R<5&&Hc(n,4),n.propertyName&&n.propertyName.kind===164&&vg(n.propertyName);let p=n.parent.parent,h=n.dotDotDotToken?64:0,T=Px(p,h),k=n.propertyName||n.name;if(T&&!La(k)){let O=pg(k);if(fh(O)){let H=Np(O),J=ja(T,H);J&&(MM(J,void 0,!1),Hre(n,!!p.initializer&&p.initializer.kind===106,!1,T,J))}}}if(La(n.name)&&(n.name.kind===204&&R<2&&Y.downlevelIteration&&Hc(n,512),mn(n.name.elements,qa)),ha(n)&&n.initializer&&rc(Xd(n).body)){Fe(n,_.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation);return}if(La(n.name)){let p=mT(n)&&n.initializer&&n.parent.parent.kind!==246,h=!vt(n.name.elements,y8(ol));if(p||h){let T=Zs(n);if(p){let k=Ic(n.initializer);U&&h?wCe(k,n):Ly(k,Zs(n),n,n.initializer)}h&&(g2(n.name)?wy(65,T,Oe,n):U&&wCe(T,n))}return}let c=fr(n);if(c.flags&2097152&&(N0(n)||lce(n))){hU(n);return}let u=PD(zn(c));if(n===c.valueDeclaration){let p=mT(n)&&Yw(n);p&&!(Yn(n)&&rs(p)&&(p.properties.length===0||ub(n.name))&&((a=c.exports)!=null&&a.size))&&n.parent.parent.kind!==246&&Ly(Ic(p),u,n,p,void 0),c.declarations&&c.declarations.length>1&&vt(c.declarations,h=>h!==n&&PA(h)&&!lLe(h,n))&&Fe(n.name,_.All_declarations_of_0_must_have_identical_modifiers,os(n.name))}else{let p=PD(Zs(n));!Ro(u)&&!Ro(p)&&!ph(u,p)&&!(c.flags&67108864)&&cLe(c.valueDeclaration,u,n,p),mT(n)&&n.initializer&&Ly(Ic(n.initializer),p,n,n.initializer,void 0),c.valueDeclaration&&!lLe(n,c.valueDeclaration)&&Fe(n.name,_.All_declarations_of_0_must_have_identical_modifiers,os(n.name))}n.kind!==169&&n.kind!==168&&(kD(n),(n.kind===257||n.kind===205)&&_tt(n),jC(n,n.name))}function cLe(n,a,c,u){let p=sa(c),h=c.kind===169||c.kind===168?_.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2:_.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2,T=os(p),k=Fe(p,h,T,Ee(a),Ee(u));n&&Ao(k,hr(n,_._0_was_also_declared_here,T))}function lLe(n,a){if(n.kind===166&&a.kind===257||n.kind===257&&a.kind===166)return!0;if(uS(n)!==uS(a))return!1;let c=888;return hS(n,c)===hS(a,c)}function Die(n){var a,c;(a=ai)==null||a.push(ai.Phase.Check,\"checkVariableDeclaration\",{kind:n.kind,pos:n.pos,end:n.end,path:n.tracingPath}),Krt(n),ZM(n),(c=ai)==null||c.pop()}function ptt(n){return Wrt(n),ZM(n)}function mtt(n){!km(n)&&!Zie(n.declarationList)&&qrt(n),mn(n.declarationList.declarations,qa)}function htt(n){vh(n),Yi(n.expression)}function gtt(n){vh(n);let a=aA(n.expression);wie(n.expression,a,n.thenStatement),qa(n.thenStatement),n.thenStatement.kind===239&&Fe(n.thenStatement,_.The_body_of_an_if_statement_cannot_be_the_empty_statement),qa(n.elseStatement)}function wie(n,a,c){if(!U)return;u(n,c);function u(h,T){for(h=vs(h),p(h,T);ar(h)&&(h.operatorToken.kind===56||h.operatorToken.kind===60);)h=vs(h.left),p(h,T)}function p(h,T){let k=CR(h)?vs(h.right):h;if(Bm(k))return;if(CR(k)){u(k,T);return}let O=k===h?a:aA(k),H=br(k)&&OIe(k.expression);if(!(iu(O)&4194304)||H)return;let J=xa(O,0),de=!!DD(O);if(J.length===0&&!de)return;let Ae=Re(k)?k:br(k)?k.name:void 0,xe=Ae&&Zf(Ae);if(!xe&&!de)return;xe&&ar(h.parent)&&vtt(h.parent,xe)||xe&&T&&ytt(h,T,Ae,xe)||(de?Tv(k,!0,_.This_condition_will_always_return_true_since_this_0_is_always_defined,lr(O)):Fe(k,_.This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead))}}function ytt(n,a,c,u){return!!pa(a,function p(h){if(Re(h)){let T=Zf(h);if(T&&T===u){if(Re(n)||Re(c)&&ar(c.parent))return!0;let k=c.parent,O=h.parent;for(;k&&O;){if(Re(k)&&Re(O)||k.kind===108&&O.kind===108)return Zf(k)===Zf(O);if(br(k)&&br(O)){if(Zf(k.name)!==Zf(O.name))return!1;O=O.expression,k=k.expression}else if(Pa(k)&&Pa(O))O=O.expression,k=k.expression;else return!1}}}return pa(h,p)})}function vtt(n,a){for(;ar(n)&&n.operatorToken.kind===55;){if(pa(n.right,function u(p){if(Re(p)){let h=Zf(p);if(h&&h===a)return!0}return pa(p,u)}))return!0;n=n.parent}return!1}function btt(n){vh(n),qa(n.statement),aA(n.expression)}function Ett(n){vh(n),aA(n.expression),qa(n.statement)}function uLe(n,a){return n.flags&16384&&Fe(a,_.An_expression_of_type_void_cannot_be_tested_for_truthiness),n}function aA(n,a){return uLe(Yi(n,a),n)}function Ttt(n){vh(n)||n.initializer&&n.initializer.kind===258&&Zie(n.initializer),n.initializer&&(n.initializer.kind===258?mn(n.initializer.declarations,Die):Yi(n.initializer)),n.condition&&aA(n.condition),n.incrementor&&Yi(n.incrementor),qa(n.statement),n.locals&&Dy(n)}function Stt(n){ske(n);let a=R6(n);if(n.awaitModifier?a&&oc(a)?an(n.awaitModifier,_.For_await_loops_cannot_be_used_inside_a_class_static_block):(pl(a)&6)===2&&R<99&&Hc(n,16384):Y.downlevelIteration&&R<2&&Hc(n,256),n.initializer.kind===258)dLe(n);else{let c=n.initializer,u=e8(n);if(c.kind===206||c.kind===207)nT(c,u||ve);else{let p=Yi(c);CD(c,_.The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access,_.The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access),u&&Ly(u,p,c,n.expression)}}qa(n.statement),n.locals&&Dy(n)}function xtt(n){ske(n);let a=Wre(Yi(n.expression));if(n.initializer.kind===258){let c=n.initializer.declarations[0];c&&La(c.name)&&Fe(c.name,_.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern),dLe(n)}else{let c=n.initializer,u=Yi(c);c.kind===206||c.kind===207?Fe(c,_.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern):to(lqe(a),u)?CD(c,_.The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access,_.The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access):Fe(c,_.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any)}(a===lt||!ul(a,126091264))&&Fe(n.expression,_.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_here_has_type_0,Ee(a)),qa(n.statement),n.locals&&Dy(n)}function dLe(n){let a=n.initializer;if(a.declarations.length>=1){let c=a.declarations[0];Die(c)}}function e8(n){let a=n.awaitModifier?15:13;return wy(a,NC(n.expression),Oe,n.expression)}function wy(n,a,c,u){return Zo(a)?a:Rie(n,a,c,u,!0)||Se}function Rie(n,a,c,u,p){let h=(n&2)!==0;if(a===lt){Fie(u,a,h);return}let T=R>=2,k=!T&&Y.downlevelIteration,O=Y.noUncheckedIndexedAccess&&!!(n&128);if(T||k||h){let tt=_U(a,n,T?u:void 0);if(p&&tt){let It=n&8?_.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0:n&32?_.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0:n&64?_.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0:n&16?_.Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0:void 0;It&&wu(c,tt.nextType,u,It)}if(tt||T)return O?hD(tt&&tt.yieldType):tt&&tt.yieldType}let H=a,J=!1,de=!1;if(n&4){if(H.flags&1048576){let tt=a.types,It=Pr(tt,Tn=>!(Tn.flags&402653316));It!==tt&&(H=Gr(It,2))}else H.flags&402653316&&(H=lt);if(de=H!==a,de&&(R<1&&u&&(Fe(u,_.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher),J=!0),H.flags&131072))return O?hD(ae):ae}if(!Kv(H)){if(u&&!J){let tt=!!(n&4)&&!de,[It,Tn]=xe(tt,k);Tv(u,Tn&&!!DD(H),It,Ee(H))}return de?O?hD(ae):ae:void 0}let Ae=fg(H,rt);if(de&&Ae)return Ae.flags&402653316&&!Y.noUncheckedIndexedAccess?ae:Gr(O?[Ae,ae,Oe]:[Ae,ae],2);return n&128?hD(Ae):Ae;function xe(tt,It){var Tn;return It?tt?[_.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator,!0]:[_.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator,!0]:Oie(n,0,a,void 0)?[_.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher,!1]:Att((Tn=a.symbol)==null?void 0:Tn.escapedName)?[_.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher,!0]:tt?[_.Type_0_is_not_an_array_type_or_a_string_type,!0]:[_.Type_0_is_not_an_array_type,!0]}}function Att(n){switch(n){case\"Float32Array\":case\"Float64Array\":case\"Int16Array\":case\"Int32Array\":case\"Int8Array\":case\"NodeList\":case\"Uint16Array\":case\"Uint32Array\":case\"Uint8Array\":case\"Uint8ClampedArray\":return!0}return!1}function Oie(n,a,c,u){if(Zo(c))return;let p=_U(c,n,u);return p&&p[R_e(a)]}function Eg(n=lt,a=lt,c=ue){if(n.flags&67359327&&a.flags&180227&&c.flags&180227){let u=kf([n,a,c]),p=se.get(u);return p||(p={yieldType:n,returnType:a,nextType:c},se.set(u,p)),p}return{yieldType:n,returnType:a,nextType:c}}function fLe(n){let a,c,u;for(let p of n)if(!(p===void 0||p===ht)){if(p===wt)return wt;a=Sn(a,p.yieldType),c=Sn(c,p.returnType),u=Sn(u,p.nextType)}return a||c||u?Eg(a&&Gr(a),c&&Gr(c),u&&so(u)):ht}function fU(n,a){return n[a]}function Lm(n,a,c){return n[a]=c}function _U(n,a,c){var u,p;if(Zo(n))return wt;if(!(n.flags&1048576)){let H=c?{errors:void 0}:void 0,J=_Le(n,a,c,H);if(J===ht){if(c){let de=Fie(c,n,!!(a&2));H?.errors&&Ao(de,...H.errors)}return}else if((u=H?.errors)!=null&&u.length)for(let de of H.errors)Lo.add(de);return J}let h=a&2?\"iterationTypesOfAsyncIterable\":\"iterationTypesOfIterable\",T=fU(n,h);if(T)return T===ht?void 0:T;let k;for(let H of n.types){let J=c?{errors:void 0}:void 0,de=_Le(H,a,c,J);if(de===ht){if(c){let Ae=Fie(c,n,!!(a&2));J?.errors&&Ao(Ae,...J.errors)}Lm(n,h,ht);return}else if((p=J?.errors)!=null&&p.length)for(let Ae of J.errors)Lo.add(Ae);k=Sn(k,de)}let O=k?fLe(k):ht;return Lm(n,h,O),O===ht?void 0:O}function Nie(n,a){if(n===ht)return ht;if(n===wt)return wt;let{yieldType:c,returnType:u,nextType:p}=n;return a&&mne(!0),Eg(rT(c,a)||Se,rT(u,a)||Se,p)}function _Le(n,a,c,u){if(Zo(n))return wt;let p=!1;if(a&2){let h=Pie(n,ft)||mLe(n,ft);if(h)if(h===ht&&c)p=!0;else return a&8?Nie(h,c):h}if(a&1){let h=Pie(n,Yt)||mLe(n,Yt);if(h)if(h===ht&&c)p=!0;else if(a&2){if(h!==ht)return h=Nie(h,c),p?h:Lm(n,\"iterationTypesOfAsyncIterable\",h)}else return h}if(a&2){let h=Mie(n,ft,c,u,p);if(h!==ht)return h}if(a&1){let h=Mie(n,Yt,c,u,p);if(h!==ht)return a&2?(h=Nie(h,c),p?h:Lm(n,\"iterationTypesOfAsyncIterable\",h)):h}return ht}function Pie(n,a){return fU(n,a.iterableCacheKey)}function pLe(n,a){let c=Pie(n,a)||Mie(n,a,void 0,void 0,!1);return c===ht?Xe:c}function mLe(n,a){let c;if(Bv(n,c=a.getGlobalIterableType(!1))||Bv(n,c=a.getGlobalIterableIteratorType(!1))){let[u]=Ko(n),{returnType:p,nextType:h}=pLe(c,a);return Lm(n,a.iterableCacheKey,Eg(a.resolveIterationType(u,void 0)||u,a.resolveIterationType(p,void 0)||p,h))}if(Bv(n,a.getGlobalGeneratorType(!1))){let[u,p,h]=Ko(n);return Lm(n,a.iterableCacheKey,Eg(a.resolveIterationType(u,void 0)||u,a.resolveIterationType(p,void 0)||p,h))}}function Ctt(n){let a=rAe(!1),c=a&&Vc(zn(a),Bs(n));return c&&fh(c)?Np(c):`__@${n}`}function Mie(n,a,c,u,p){var h;let T=ja(n,Ctt(a.iteratorSymbolName)),k=T&&!(T.flags&16777216)?zn(T):void 0;if(Zo(k))return p?wt:Lm(n,a.iterableCacheKey,wt);let O=k?xa(k,0):void 0;if(!vt(O))return p?ht:Lm(n,a.iterableCacheKey,ht);let H=so(on(O,qo)),J=(h=hLe(H,a,c,u,p))!=null?h:ht;return p?J:Lm(n,a.iterableCacheKey,J)}function Fie(n,a,c){let u=c?_.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator:_.Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator,p=!!DD(a)||!c&&_O(n.parent)&&n.parent.expression===n&&ZG(!1)!==ro&&to(a,ZG(!1));return Tv(n,p,u,Ee(a))}function Itt(n,a,c,u){return hLe(n,a,c,u,!1)}function hLe(n,a,c,u,p){if(Zo(n))return wt;let h=gLe(n,a)||Ltt(n,a);return h===ht&&c&&(h=void 0,p=!0),h??(h=vLe(n,a,c,u,p)),h===ht?void 0:h}function gLe(n,a){return fU(n,a.iteratorCacheKey)}function Ltt(n,a){let c=a.getGlobalIterableIteratorType(!1);if(Bv(n,c)){let[u]=Ko(n),p=gLe(c,a)||vLe(c,a,void 0,void 0,!1),{returnType:h,nextType:T}=p===ht?Xe:p;return Lm(n,a.iteratorCacheKey,Eg(u,h,T))}if(Bv(n,a.getGlobalIteratorType(!1))||Bv(n,a.getGlobalGeneratorType(!1))){let[u,p,h]=Ko(n);return Lm(n,a.iteratorCacheKey,Eg(u,p,h))}}function yLe(n,a){let c=Vc(n,\"done\")||Ke;return to(a===0?Ke:pe,c)}function ktt(n){return yLe(n,0)}function Dtt(n){return yLe(n,1)}function wtt(n){if(Zo(n))return wt;let a=fU(n,\"iterationTypesOfIteratorResult\");if(a)return a;if(Bv(n,TKe(!1))){let T=Ko(n)[0];return Lm(n,\"iterationTypesOfIteratorResult\",Eg(T,void 0,void 0))}if(Bv(n,SKe(!1))){let T=Ko(n)[0];return Lm(n,\"iterationTypesOfIteratorResult\",Eg(void 0,T,void 0))}let c=jc(n,ktt),u=c!==lt?Vc(c,\"value\"):void 0,p=jc(n,Dtt),h=p!==lt?Vc(p,\"value\"):void 0;return!u&&!h?Lm(n,\"iterationTypesOfIteratorResult\",ht):Lm(n,\"iterationTypesOfIteratorResult\",Eg(u,h||yt,void 0))}function Gie(n,a,c,u,p){var h,T,k,O,H,J;let de=ja(n,c);if(!de&&c!==\"next\")return;let Ae=de&&!(c===\"next\"&&de.flags&16777216)?c===\"next\"?zn(de):wf(zn(de),2097152):void 0;if(Zo(Ae))return c===\"next\"?wt:K;let xe=Ae?xa(Ae,0):Je;if(xe.length===0){if(u){let Jt=c===\"next\"?a.mustHaveANextMethodDiagnostic:a.mustBeAMethodDiagnostic;p?((h=p.errors)!=null||(p.errors=[]),p.errors.push(hr(u,Jt,c))):Fe(u,Jt,c)}return c===\"next\"?ht:void 0}if(Ae?.symbol&&xe.length===1){let Jt=a.getGlobalGeneratorType(!1),Cn=a.getGlobalIteratorType(!1),Rn=((k=(T=Jt.symbol)==null?void 0:T.members)==null?void 0:k.get(c))===Ae.symbol,Br=!Rn&&((H=(O=Cn.symbol)==null?void 0:O.members)==null?void 0:H.get(c))===Ae.symbol;if(Rn||Br){let Hr=Rn?Jt:Cn,{mapper:qi}=Ae;return Eg(zv(Hr.typeParameters[0],qi),zv(Hr.typeParameters[1],qi),c===\"next\"?zv(Hr.typeParameters[2],qi):void 0)}}let tt,It;for(let Jt of xe)c!==\"throw\"&&vt(Jt.parameters)&&(tt=Sn(tt,P_(Jt,0))),It=Sn(It,qo(Jt));let Tn,un;if(c!==\"throw\"){let Jt=tt?Gr(tt):ue;if(c===\"next\")un=Jt;else if(c===\"return\"){let Cn=a.resolveIterationType(Jt,u)||Se;Tn=Sn(Tn,Cn)}}let Nn,en=It?so(It):lt,cn=a.resolveIterationType(en,u)||Se,rr=wtt(cn);return rr===ht?(u&&(p?((J=p.errors)!=null||(p.errors=[]),p.errors.push(hr(u,a.mustHaveAValueDiagnostic,c))):Fe(u,a.mustHaveAValueDiagnostic,c)),Nn=Se,Tn=Sn(Tn,Se)):(Nn=rr.yieldType,Tn=Sn(Tn,rr.returnType)),Eg(Nn,Gr(Tn),un)}function vLe(n,a,c,u,p){let h=fLe([Gie(n,a,\"next\",c,u),Gie(n,a,\"return\",c,u),Gie(n,a,\"throw\",c,u)]);return p?h:Lm(n,a.iteratorCacheKey,h)}function c0(n,a,c){if(Zo(a))return;let u=bLe(a,c);return u&&u[R_e(n)]}function bLe(n,a){if(Zo(n))return wt;let c=a?2:1,u=a?ft:Yt;return _U(n,c,void 0)||Itt(n,u,void 0,void 0)}function Rtt(n){vh(n)||Hrt(n)}function pU(n,a){let c=!!(a&1),u=!!(a&2);if(c){let p=c0(1,n,u);return p?u?bg(UC(p)):p:ve}return u?bg(n)||ve:n}function ELe(n,a){let c=pU(a,pl(n));return!!c&&Js(c,16387)}function Ott(n){var a;if(vh(n))return;let c=R6(n);if(c&&oc(c)){dl(n,_.A_return_statement_cannot_be_used_inside_a_class_static_block);return}if(!c){dl(n,_.A_return_statement_can_only_be_used_within_a_function_body);return}let u=ip(c),p=qo(u),h=pl(c);if(U||n.expression||p.flags&131072){let T=n.expression?Ic(n.expression):Oe;if(c.kind===175)n.expression&&Fe(n,_.Setters_cannot_return_a_value);else if(c.kind===173)n.expression&&!Ly(T,p,n,n.expression)&&Fe(n,_.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);else if(Hx(c)){let k=(a=pU(p,h))!=null?a:p,O=h&2?RD(T,!1,n,_.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member):T;k&&Ly(O,k,n,n.expression)}}else c.kind!==173&&Y.noImplicitReturns&&!ELe(c,p)&&Fe(n,_.Not_all_code_paths_return_a_value)}function Ntt(n){vh(n)||n.flags&32768&&dl(n,_.with_statements_are_not_allowed_in_an_async_function_block),Yi(n.expression);let a=Gn(n);if(!l0(a)){let c=Pg(a,n.pos).start,u=n.statement.pos;u0(a,c,u-c,_.The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any)}}function Ptt(n){vh(n);let a,c=!1,u=Yi(n.expression);mn(n.caseBlock.clauses,p=>{p.kind===293&&!c&&(a===void 0?a=p:(an(p,_.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement),c=!0)),p.kind===292&&i(h(p)),mn(p.statements,qa),Y.noFallthroughCasesInSwitch&&p.fallthroughFlowNode&&IM(p.fallthroughFlowNode)&&Fe(p,_.Fallthrough_case_in_switch);function h(T){return()=>{let k=Yi(T.expression);yie(u,k)||e2e(k,u,T.expression,void 0)}}}),n.caseBlock.locals&&Dy(n.caseBlock)}function Mtt(n){vh(n)||jn(n.parent,a=>Ia(a)?\"quit\":a.kind===253&&a.label.escapedText===n.label.escapedText?(an(n.label,_.Duplicate_label_0,Qc(n.label)),!0):!1),qa(n.statement)}function Ftt(n){vh(n)||Re(n.expression)&&!n.expression.escapedText&&ait(n,_.Line_break_not_permitted_here),n.expression&&Yi(n.expression)}function Gtt(n){vh(n),dU(n.tryBlock);let a=n.catchClause;if(a){if(a.variableDeclaration){let c=a.variableDeclaration;ZM(c);let u=Cl(c);if(u){let p=$r(u);p&&!(p.flags&3)&&dl(u,_.Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified)}else if(c.initializer)dl(c.initializer,_.Catch_clause_variable_cannot_have_an_initializer);else{let p=a.block.locals;p&&TI(a.locals,h=>{let T=p.get(h);T?.valueDeclaration&&T.flags&2&&an(T.valueDeclaration,_.Cannot_redeclare_identifier_0_in_catch_clause,h)})}}dU(a.block)}n.finallyBlock&&dU(n.finallyBlock)}function mU(n,a,c){let u=tu(n);if(u.length===0)return;for(let h of Ey(n))c&&h.flags&4194304||TLe(n,h,TC(h,8576,!0),Gv(h));let p=a.valueDeclaration;if(p&&Yr(p)){for(let h of p.members)if(!Ca(h)&&!Ux(h)){let T=fr(h);TLe(n,T,au(h.name.expression),Gv(T))}}if(u.length>1)for(let h of u)Btt(n,h)}function TLe(n,a,c,u){let p=a.valueDeclaration,h=sa(p);if(h&&pi(h))return;let T=Zte(n,c),k=Ur(n)&2?nc(n.symbol,261):void 0,O=p&&p.kind===223||h&&h.kind===164?p:void 0,H=ju(a)===n.symbol?p:void 0;for(let J of T){let de=J.declaration&&ju(fr(J.declaration))===n.symbol?J.declaration:void 0,Ae=H||de||(k&&!vt(_o(n),xe=>!!qb(xe,a.escapedName)&&!!fg(xe,J.keyType))?k:void 0);if(Ae&&!to(u,J.type)){let xe=hE(Ae,_.Property_0_of_type_1_is_not_assignable_to_2_index_type_3,E(a),Ee(u),Ee(J.keyType),Ee(J.type));O&&Ae!==O&&Ao(xe,hr(O,_._0_is_declared_here,E(a))),Lo.add(xe)}}}function Btt(n,a){let c=a.declaration,u=Zte(n,a.keyType),p=Ur(n)&2?nc(n.symbol,261):void 0,h=c&&ju(fr(c))===n.symbol?c:void 0;for(let T of u){if(T===a)continue;let k=T.declaration&&ju(fr(T.declaration))===n.symbol?T.declaration:void 0,O=h||k||(p&&!vt(_o(n),H=>!!Cm(H,a.keyType)&&!!fg(H,T.keyType))?p:void 0);O&&!to(a.type,T.type)&&Fe(O,_._0_index_type_1_is_not_assignable_to_2_index_type_3,Ee(a.keyType),Ee(a.type),Ee(T.keyType),Ee(T.type))}}function HC(n,a){switch(n.escapedText){case\"any\":case\"unknown\":case\"never\":case\"number\":case\"bigint\":case\"boolean\":case\"string\":case\"symbol\":case\"void\":case\"object\":Fe(n,a,n.escapedText)}}function Utt(n){R>=1&&n.escapedText===\"Object\"&&(ie<5||Gn(n).impliedNodeFormat===1)&&Fe(n,_.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0,F8[ie])}function Vtt(n){let a=Pr(A0(n),xp);if(!Fn(a))return;let c=Yn(n),u=new Set,p=new Set;if(mn(n.parameters,({name:T},k)=>{Re(T)&&u.add(T.escapedText),La(T)&&p.add(k)}),nne(n)){let T=a.length-1,k=a[T];c&&k&&Re(k.name)&&k.typeExpression&&k.typeExpression.type&&!u.has(k.name.escapedText)&&!p.has(T)&&!_f($r(k.typeExpression.type))&&Fe(k.name,_.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type,vr(k.name))}else mn(a,({name:T,isNameFirst:k},O)=>{p.has(O)||Re(T)&&u.has(T.escapedText)||(Yu(T)?c&&Fe(T,_.Qualified_name_0_is_not_allowed_without_a_leading_param_object_1,qd(T),qd(T.left)):k||Ip(c,T,_.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name,vr(T)))})}function t8(n){let a=!1;if(n)for(let u=0;u<n.length;u++){let p=n[u];BIe(p),i(c(p,u))}function c(u,p){return()=>{u.default?(a=!0,jtt(u.default,n,p)):a&&Fe(u,_.Required_type_parameters_may_not_follow_optional_type_parameters);for(let h=0;h<p;h++)n[h].symbol===u.symbol&&Fe(u.name,_.Duplicate_identifier_0,os(u.name))}}}function jtt(n,a,c){u(n);function u(p){if(p.kind===180){let h=dne(p);if(h.flags&262144)for(let T=c;T<a.length;T++)h.symbol===fr(a[T])&&Fe(p,_.Type_parameter_defaults_can_only_reference_previously_declared_type_parameters)}pa(p,u)}}function SLe(n){if(n.declarations&&n.declarations.length===1)return;let a=Ai(n);if(!a.typeParametersChecked){a.typeParametersChecked=!0;let c=Ytt(n);if(!c||c.length<=1)return;let u=gs(n);if(!xLe(c,u.localTypeParameters,jy)){let p=E(n);for(let h of c)Fe(h.name,_.All_declarations_of_0_must_have_identical_type_parameters,p)}}}function xLe(n,a,c){let u=Fn(a),p=Mp(a);for(let h of n){let T=c(h),k=T.length;if(k<p||k>u)return!1;for(let O=0;O<k;O++){let H=T[O],J=a[O];if(H.name.escapedText!==J.symbol.escapedName)return!1;let de=EA(H),Ae=de&&$r(de),xe=eu(J);if(Ae&&xe&&!ph(Ae,xe))return!1;let tt=H.default&&$r(H.default),It=jE(J);if(tt&&It&&!ph(tt,It))return!1}}return!0}function ALe(n){var a;let c=!$&&R<99&&O0(!1,n),u=R<=9,p=!fe||R<9;if(c||u)for(let h of n.members){if(c&&AH(!1,h,n))return(a=Sl(Uy(n)))!=null?a:n;if(u){if(oc(h))return h;if(Ca(h)&&(xu(h)||p&&sN(h)))return h}}}function Htt(n){var a;if(n.name)return;let c=rde(n);if(!VH(c))return;let u=!$&&R<99,p;u&&O0(!1,n)?p=(a=Sl(Uy(n)))!=null?a:n:p=ALe(n),p&&(Hc(p,8388608),(yl(c)||Na(c)||Wo(c))&&ts(c.name)&&Hc(p,16777216))}function Wtt(n){return CLe(n),zC(n),Htt(n),zn(fr(n))}function ztt(n){mn(n.members,qa),Dy(n)}function Jtt(n){let a=wr(n.modifiers,du);$&&a&&vt(n.members,c=>zc(c)&&xu(c))&&an(a,_.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator),!n.name&&!Mr(n,1024)&&dl(n,_.A_class_declaration_without_the_default_modifier_must_have_a_name),CLe(n),mn(n.members,qa),Dy(n)}function CLe(n){Lrt(n),XM(n),jC(n,n.name),t8(jy(n)),kD(n);let a=fr(n),c=gs(a),u=uf(c),p=zn(a);SLe(a),cU(a),oet(n),!!(n.flags&16777216)||set(n);let T=hp(n);if(T){mn(T.typeArguments,qa),R<2&&Hc(T.parent,1);let H=P0(n);H&&H!==T&&Yi(H.expression);let J=_o(c);J.length&&i(()=>{let de=J[0],Ae=Wr(c),xe=Eu(Ae);if(qtt(xe,T),qa(T.expression),vt(T.typeArguments)){mn(T.typeArguments,qa);for(let It of Or(xe,T.typeArguments,T))if(!JIe(T,It.typeParameters))break}let tt=uf(de,c.thisType);if(wu(u,tt,void 0)?wu(p,KAe(xe),n.name||n,_.Class_static_side_0_incorrectly_extends_base_class_static_side_1):kLe(n,u,tt,_.Class_0_incorrectly_extends_base_class_1),Ae.flags&8650752&&(XP(p)?xa(Ae,1).some(Tn=>Tn.flags&4)&&!Mr(n,256)&&Fe(n.name||n,_.A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract):Fe(n.name||n,_.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any)),!(xe.symbol&&xe.symbol.flags&32)&&!(Ae.flags&8650752)){let It=xr(xe,T.typeArguments,T);mn(It,Tn=>!cp(Tn.declaration)&&!ph(qo(Tn),de))&&Fe(T.expression,_.Base_constructors_must_all_have_the_same_return_type)}$tt(c,de)})}Ktt(n,c,u,p);let k=JA(n);if(k)for(let H of k)(!bc(H.expression)||Jl(H.expression))&&Fe(H.expression,_.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments),Aie(H),i(O(H));i(()=>{mU(c,a),mU(p,a,!0),Tie(n),ent(n)});function O(H){return()=>{let J=O_($r(H));if(!Ro(J))if(xm(J)){let de=J.symbol&&J.symbol.flags&32?_.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass:_.Class_0_incorrectly_implements_interface_1,Ae=uf(J,c.thisType);wu(u,Ae,void 0)||kLe(n,u,Ae,de)}else Fe(H,_.A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members)}}}function Ktt(n,a,c,u){let h=hp(n)&&_o(a),T=h?.length?uf(Vo(h),a.thisType):void 0,k=Wr(a);for(let O of n.members)aW(O)||(Ec(O)&&mn(O.parameters,H=>{Ad(H,O)&&ILe(n,u,k,T,a,c,H,!0)}),ILe(n,u,k,T,a,c,O,!1))}function ILe(n,a,c,u,p,h,T,k,O=!0){let H=T.name&&Zf(T.name)||Zf(T);return H?LLe(n,a,c,u,p,h,iW(T),B0(T),Ca(T),k,fc(H),O?T:void 0):0}function LLe(n,a,c,u,p,h,T,k,O,H,J,de){let Ae=Yn(n),xe=!!(n.flags&16777216);if(u&&(T||Y.noImplicitOverride)){let tt=Bs(J),It=O?a:h,Tn=O?c:u,un=ja(It,tt),Nn=ja(Tn,tt),en=Ee(u);if(un&&!Nn&&T){if(de){let cn=UCe(J,Tn);cn?Fe(de,Ae?_.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1:_.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1,en,E(cn)):Fe(de,Ae?_.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0:_.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0,en)}return 2}else if(un&&Nn?.declarations&&Y.noImplicitOverride&&!xe){let cn=vt(Nn.declarations,B0);if(T)return 0;if(cn){if(k&&cn)return de&&Fe(de,_.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0,en),1}else{if(de){let rr=H?Ae?_.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0:_.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0:Ae?_.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0:_.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0;Fe(de,rr,en)}return 1}}}else if(T){if(de){let tt=Ee(p);Fe(de,Ae?_.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class:_.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class,tt)}return 2}return 0}function kLe(n,a,c,u){let p=!1;for(let h of n.members){if(Ca(h))continue;let T=h.name&&Zf(h.name)||Zf(h);if(T){let k=ja(a,T.escapedName),O=ja(c,T.escapedName);if(k&&O){let H=()=>da(void 0,_.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2,E(T),Ee(a),Ee(c));wu(zn(k),zn(O),h.name||h,void 0,H)||(p=!0)}}}p||wu(a,c,n.name||n,u)}function qtt(n,a){let c=xa(n,1);if(c.length){let u=c[0].declaration;if(u&&cd(u,8)){let p=Nh(n.symbol);Hie(a,p)||Fe(a,_.Cannot_extend_a_class_0_Class_constructor_is_marked_as_private,rh(n.symbol))}}}function Xtt(n,a,c){if(!a.name)return 0;let u=fr(n),p=gs(u),h=uf(p),T=zn(u),O=hp(n)&&_o(p),H=O?.length?uf(Vo(O),p.thisType):void 0,J=Wr(p),de=a.parent?iW(a):Mr(a,16384);return LLe(n,T,J,H,p,h,de,B0(a),Ca(a),!1,fc(c))}function oA(n){return ac(n)&1?n.links.target:n}function Ytt(n){return Pr(n.declarations,a=>a.kind===260||a.kind===261)}function $tt(n,a){var c,u,p,h;let T=Jo(a);e:for(let k of T){let O=oA(k);if(O.flags&4194304)continue;let H=qb(n,O.escapedName);if(!H)continue;let J=oA(H),de=Ef(O);if(L.assert(!!J,\"derived should point to something, even if it is the base class' declaration.\"),J===O){let Ae=Nh(n.symbol);if(de&256&&(!Ae||!Mr(Ae,256))){for(let xe of _o(n)){if(xe===a)continue;let tt=qb(xe,O.escapedName),It=tt&&oA(tt);if(It&&It!==O)continue e}Ae.kind===228?Fe(Ae,_.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1,E(k),Ee(a)):Fe(Ae,_.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2,Ee(n),E(k),Ee(a))}}else{let Ae=Ef(J);if(de&8||Ae&8)continue;let xe,tt=O.flags&98308,It=J.flags&98308;if(tt&&It){if((ac(O)&6?(c=O.declarations)!=null&&c.some(Nn=>DLe(Nn,de)):(u=O.declarations)!=null&&u.every(Nn=>DLe(Nn,de)))||ac(O)&262144||J.valueDeclaration&&ar(J.valueDeclaration))continue;let Tn=tt!==4&&It===4;if(Tn||tt===4&&It!==4){let Nn=Tn?_._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property:_._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor;Fe(sa(J.valueDeclaration)||J.valueDeclaration,Nn,E(O),Ee(a),Ee(n))}else if(fe){let Nn=(p=J.declarations)==null?void 0:p.find(en=>en.kind===169&&!en.initializer);if(Nn&&!(J.flags&33554432)&&!(de&256)&&!(Ae&256)&&!((h=J.declarations)!=null&&h.some(en=>!!(en.flags&16777216)))){let en=wv(Nh(n.symbol)),cn=Nn.name;if(Nn.exclamationToken||!en||!Re(cn)||!U||!RLe(cn,n,en)){let rr=_.Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration;Fe(sa(J.valueDeclaration)||J.valueDeclaration,rr,E(O),Ee(a))}}}continue}else if(jre(O)){if(jre(J)||J.flags&4)continue;L.assert(!!(J.flags&98304)),xe=_.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor}else O.flags&98304?xe=_.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function:xe=_.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function;Fe(sa(J.valueDeclaration)||J.valueDeclaration,xe,Ee(a),E(O),Ee(n))}}}function DLe(n,a){return a&256&&(!Na(n)||!n.initializer)||ku(n.parent)}function Qtt(n,a,c){if(!Fn(a))return c;let u=new Map;mn(c,p=>{u.set(p.escapedName,p)});for(let p of a){let h=Jo(uf(p,n.thisType));for(let T of h){let k=u.get(T.escapedName);k&&T.parent===k.parent&&u.delete(T.escapedName)}}return lo(u.values())}function Ztt(n,a){let c=_o(n);if(c.length<2)return!0;let u=new Map;mn(Nte(n).declaredProperties,h=>{u.set(h.escapedName,{prop:h,containingType:n})});let p=!0;for(let h of c){let T=Jo(uf(h,n.thisType));for(let k of T){let O=u.get(k.escapedName);if(!O)u.set(k.escapedName,{prop:k,containingType:h});else if(O.containingType!==n&&!hXe(O.prop,k)){p=!1;let J=Ee(O.containingType),de=Ee(h),Ae=da(void 0,_.Named_property_0_of_types_1_and_2_are_not_identical,E(k),J,de);Ae=da(Ae,_.Interface_0_cannot_simultaneously_extend_types_1_and_2,Ee(n),J,de),Lo.add(Lh(Gn(a),a,Ae))}}}return p}function ent(n){if(!U||!_e||n.flags&16777216)return;let a=wv(n);for(let c of n.members)if(!(uu(c)&2)&&!Ca(c)&&wLe(c)){let u=c.name;if(Re(u)||pi(u)||ts(u)){let p=zn(fr(c));p.flags&3||xC(p)||(!a||!RLe(u,p,a))&&Fe(c.name,_.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor,os(u))}}}function wLe(n){return n.kind===169&&!B0(n)&&!n.exclamationToken&&!n.initializer}function tnt(n,a,c,u,p){for(let h of c)if(h.pos>=u&&h.pos<=p){let T=D.createPropertyAccessExpression(D.createThis(),n);go(T.expression,T),go(T,h),T.flowNode=h.returnFlowNode;let k=Yv(T,a,gg(a));if(!xC(k))return!0}return!1}function RLe(n,a,c){let u=ts(n)?D.createElementAccessExpression(D.createThis(),n.expression):D.createPropertyAccessExpression(D.createThis(),n);go(u.expression,u),go(u,c),u.flowNode=c.returnFlowNode;let p=Yv(u,a,gg(a));return!xC(p)}function nnt(n){km(n)||Prt(n),t8(n.typeParameters),i(()=>{HC(n.name,_.Interface_name_cannot_be_0),kD(n);let a=fr(n);SLe(a);let c=nc(a,261);if(n===c){let u=gs(a),p=uf(u);if(Ztt(u,n.name)){for(let h of _o(u))wu(p,uf(h,u.thisType),n.name,_.Interface_0_incorrectly_extends_interface_1);mU(u,a)}}jIe(n)}),mn(PI(n),a=>{(!bc(a.expression)||Jl(a.expression))&&Fe(a.expression,_.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments),Aie(a)}),mn(n.members,qa),i(()=>{Tie(n),Dy(n)})}function rnt(n){km(n),HC(n.name,_.Type_alias_name_cannot_be_0),kD(n),t8(n.typeParameters),n.type.kind===139?(!rN.has(n.name.escapedText)||Fn(n.typeParameters)!==1)&&Fe(n.type,_.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types):(qa(n.type),Dy(n))}function OLe(n){let a=Rr(n);if(!(a.flags&1024)){a.flags|=1024;let c=0;for(let u of n.members){let p=int(u,c);Rr(u).enumMemberValue=p,c=typeof p==\"number\"?p+1:void 0}}}function int(n,a){if(Vw(n.name))Fe(n.name,_.Computed_property_names_are_not_allowed_in_enums);else{let c=wA(n.name);Wm(c)&&!cL(c)&&Fe(n.name,_.An_enum_member_cannot_have_a_numeric_name)}if(n.initializer)return ant(n);if(!(n.parent.flags&16777216&&!R0(n.parent))){if(a!==void 0)return a;Fe(n.name,_.Enum_member_must_have_initializer)}}function ant(n){let a=R0(n.parent),c=n.initializer,u=WC(c,n);return u!==void 0?a&&typeof u==\"number\"&&!isFinite(u)&&Fe(c,isNaN(u)?_.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN:_.const_enum_member_initializer_was_evaluated_to_a_non_finite_value):a?Fe(c,_.const_enum_member_initializers_must_be_constant_expressions):n.parent.flags&16777216?Fe(c,_.In_ambient_enum_declarations_member_initializer_must_be_constant_expression):wu(Yi(c),rt,c,_.Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values),u}function WC(n,a){switch(n.kind){case 221:let c=WC(n.operand,a);if(typeof c==\"number\")switch(n.operator){case 39:return c;case 40:return-c;case 54:return~c}break;case 223:let u=WC(n.left,a),p=WC(n.right,a);if(typeof u==\"number\"&&typeof p==\"number\")switch(n.operatorToken.kind){case 51:return u|p;case 50:return u&p;case 48:return u>>p;case 49:return u>>>p;case 47:return u<<p;case 52:return u^p;case 41:return u*p;case 43:return u/p;case 39:return u+p;case 40:return u-p;case 44:return u%p;case 42:return u**p}else if((typeof u==\"string\"||typeof u==\"number\")&&(typeof p==\"string\"||typeof p==\"number\")&&n.operatorToken.kind===39)return\"\"+u+p;break;case 10:case 14:return n.text;case 225:return ont(n,a);case 8:return eae(n),+n.text;case 214:return WC(n.expression,a);case 79:if(cL(n.escapedText))return+n.escapedText;case 208:if(bc(n)){let T=uc(n,111551,!0);if(T){if(T.flags&8)return NLe(n,T,a);if(wC(T)){let k=T.valueDeclaration;if(k&&!k.type&&k.initializer&&k!==a&&$h(k,a))return WC(k.initializer,k)}}}break;case 209:let h=n.expression;if(bc(h)&&es(n.argumentExpression)){let T=uc(h,111551,!0);if(T&&T.flags&384){let k=Bs(n.argumentExpression.text),O=T.exports.get(k);if(O)return NLe(n,O,a)}}break}}function NLe(n,a,c){let u=a.valueDeclaration;if(!u||u===c){Fe(n,_.Property_0_is_used_before_being_assigned,E(a));return}return $h(u,c)?xU(u):(Fe(n,_.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums),0)}function ont(n,a){let c=n.head.text;for(let u of n.templateSpans){let p=WC(u.expression,a);if(p===void 0)return;c+=p,c+=u.literal.text}return c}function snt(n){i(()=>cnt(n))}function cnt(n){km(n),jC(n,n.name),kD(n),n.members.forEach(lnt),OLe(n);let a=fr(n),c=nc(a,n.kind);if(n===c){if(a.declarations&&a.declarations.length>1){let p=R0(n);mn(a.declarations,h=>{hb(h)&&R0(h)!==p&&Fe(sa(h),_.Enum_declarations_must_all_be_const_or_non_const)})}let u=!1;mn(a.declarations,p=>{if(p.kind!==263)return!1;let h=p;if(!h.members.length)return!1;let T=h.members[0];T.initializer||(u?Fe(T.name,_.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element):u=!0)})}}function lnt(n){pi(n.name)&&Fe(n,_.An_enum_member_cannot_be_named_with_a_private_identifier),n.initializer&&Yi(n.initializer)}function unt(n){let a=n.declarations;if(a){for(let c of a)if((c.kind===260||c.kind===259&&Pf(c.body))&&!(c.flags&16777216))return c}}function dnt(n,a){let c=tm(n),u=tm(a);return gm(c)?gm(u):gm(u)?!1:c===u}function fnt(n){n.body&&(qa(n.body),mp(n)||Dy(n)),i(a);function a(){var c,u;let p=mp(n),h=n.flags&16777216;p&&!h&&Fe(n.name,_.Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context);let T=lu(n),k=T?_.An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file:_.A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module;if(n8(n,k))return;km(n)||!h&&n.name.kind===10&&an(n.name,_.Only_ambient_modules_can_use_quoted_names),Re(n.name)&&jC(n,n.name),kD(n);let O=fr(n);if(O.flags&512&&!h&&fK(n,U0(Y))){if(d_(Y)&&!Gn(n).externalModuleIndicator&&Fe(n.name,_.Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to_be_a_global_script_set_moduleDetection_to_force_or_add_an_empty_export_statement,Rt),((c=O.declarations)==null?void 0:c.length)>1){let H=unt(O);H&&(Gn(n)!==Gn(H)?Fe(n.name,_.A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged):n.pos<H.pos&&Fe(n.name,_.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged));let J=nc(O,260);J&&dnt(n,J)&&(Rr(n).flags|=2048)}if(Y.verbatimModuleSyntax&&n.parent.kind===308&&(ie===1||n.parent.impliedNodeFormat===1)){let H=(u=n.modifiers)==null?void 0:u.find(J=>J.kind===93);H&&Fe(H,_.A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled)}}if(T)if(D0(n)){if((p||fr(n).flags&33554432)&&n.body)for(let J of n.body.statements)Bie(J,p)}else gm(n.parent)?p?Fe(n.name,_.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations):fl(l_(n.name))&&Fe(n.name,_.Ambient_module_declaration_cannot_specify_relative_module_name):p?Fe(n.name,_.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations):Fe(n.name,_.Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces)}}function Bie(n,a){switch(n.kind){case 240:for(let u of n.declarationList.declarations)Bie(u,a);break;case 274:case 275:dl(n,_.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);break;case 268:case 269:dl(n,_.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);break;case 205:case 257:let c=n.name;if(La(c)){for(let u of c.elements)Bie(u,a);break}case 260:case 263:case 259:case 261:case 264:case 262:if(a)return;break}}function _nt(n){switch(n.kind){case 79:return n;case 163:do n=n.left;while(n.kind!==79);return n;case 208:do{if(Bm(n.expression)&&!pi(n.name))return n.name;n=n.expression}while(n.kind!==79);return n}}function Uie(n){let a=UA(n);if(!a||rc(a))return!1;if(!yo(a))return Fe(a,_.String_literal_expected),!1;let c=n.parent.kind===265&&lu(n.parent.parent);if(n.parent.kind!==308&&!c)return Fe(a,n.kind===275?_.Export_declarations_are_not_permitted_in_a_namespace:_.Import_declarations_in_a_namespace_cannot_reference_a_module),!1;if(c&&fl(a.text)&&!Td(n))return Fe(n,_.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name),!1;if(!Nl(n)&&n.assertClause){let u=!1;for(let p of n.assertClause.elements)yo(p.value)||(u=!0,Fe(p.value,_.Import_assertion_values_must_be_string_literal_expressions));return!u}return!0}function hU(n){var a,c,u,p,h;let T=fr(n),k=wc(T);if(k!==Ht){if(T=No(T.exportSymbol||T),Yn(n)&&!(k.flags&111551)&&!I0(n)){let J=eS(n)?n.propertyName||n.name:zl(n)?n.name:n;if(L.assert(n.kind!==277),n.kind===278){let de=Fe(J,_.Types_cannot_appear_in_export_declarations_in_JavaScript_files),Ae=(c=(a=Gn(n).symbol)==null?void 0:a.exports)==null?void 0:c.get((n.propertyName||n.name).escapedText);if(Ae===k){let xe=(u=Ae.declarations)==null?void 0:u.find(IA);xe&&Ao(de,hr(xe,_._0_is_automatically_exported_here,Gi(Ae.escapedName)))}}else{L.assert(n.kind!==257);let de=jn(n,Kp(gl,Nl)),Ae=(h=de&&((p=iR(de))==null?void 0:p.text))!=null?h:\"...\",xe=Gi(Re(J)?J.escapedText:T.escapedName);Fe(J,_._0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation,xe,`import(\"${Ae}\").${xe}`)}return}let O=Fl(k),H=(T.flags&1160127?111551:0)|(T.flags&788968?788968:0)|(T.flags&1920?1920:0);if(O&H){let J=n.kind===278?_.Export_declaration_conflicts_with_exported_declaration_of_0:_.Import_declaration_conflicts_with_local_declaration_of_0;Fe(n,J,E(T))}if(d_(Y)&&!I0(n)&&!(n.flags&16777216)){let J=nd(T),de=!(O&111551);if(de||J)switch(n.kind){case 270:case 273:case 268:{if(Y.preserveValueImports||Y.verbatimModuleSyntax){L.assertIsDefined(n.name,\"An ImportClause with a symbol should have a name\");let Ae=Y.verbatimModuleSyntax&&GA(n)?_.An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabled:de?Y.verbatimModuleSyntax?_._0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled:_._0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled:Y.verbatimModuleSyntax?_._0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled:_._0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled,xe=vr(n.kind===273&&n.propertyName||n.name);v1(Fe(n,Ae,xe),de?void 0:J,xe)}de&&n.kind===268&&cd(n,1)&&Fe(n,_.Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled,Rt);break}case 278:if(Y.verbatimModuleSyntax||Gn(J)!==Gn(n)){let Ae=vr(n.propertyName||n.name),xe=de?Fe(n,_.Re_exporting_a_type_when_0_is_enabled_requires_using_export_type,Rt):Fe(n,_._0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_enabled,Ae,Rt);v1(xe,de?void 0:J,Ae);break}}Y.verbatimModuleSyntax&&n.kind!==268&&!Yn(n)&&(ie===1||Gn(n).impliedNodeFormat===1)&&Fe(n,_.ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled)}if($u(n)){let J=MLe(T,n);PLe(J)&&J.declarations&&Xh(n,J.declarations,J.escapedName)}}}function PLe(n){return!!n.declarations&&Ji(n.declarations,a=>!!(G_(a)&268435456))}function MLe(n,a){if(!(n.flags&2097152))return n;let c=wc(n);if(c===Ht)return c;for(;n.flags&2097152;){let u=Mre(n);if(u){if(u===c)break;if(u.declarations&&Fn(u.declarations))if(PLe(u)){Xh(a,u.declarations,u.escapedName);break}else{if(n===c)break;n=u}}else break}return c}function gU(n){jC(n,n.name),hU(n),n.kind===273&&vr(n.propertyName||n.name)===\"default\"&&f_(Y)&&ie!==4&&(ie<5||Gn(n).impliedNodeFormat===1)&&Hc(n,131072)}function FLe(n){var a;if(n.assertClause){let c=oq(n),u=qS(n.assertClause,c?an:void 0);if(c&&u)return TR()||an(n.assertClause,_.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next),$s(Y)!==3&&$s(Y)!==99?an(n.assertClause,_.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext):void 0;if((ie===199&&n.moduleSpecifier&&ty(n.moduleSpecifier))!==99&&ie!==99)return an(n.assertClause,ie===199?_.Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls:_.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext);if(gl(n)?(a=n.importClause)!=null&&a.isTypeOnly:n.isTypeOnly)return an(n.assertClause,_.Import_assertions_cannot_be_used_with_type_only_imports_or_exports);if(u)return an(n.assertClause,_.resolution_mode_can_only_be_set_for_type_only_imports)}}function pnt(n){if(!n8(n,Yn(n)?_.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module:_.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)){if(!km(n)&&n4(n)&&dl(n,_.An_import_declaration_cannot_have_modifiers),Uie(n)){let a=n.importClause;a&&!sit(a)&&(a.name&&gU(a),a.namedBindings&&(a.namedBindings.kind===271?(gU(a.namedBindings),ie!==4&&(ie<5||Gn(n).impliedNodeFormat===1)&&f_(Y)&&Hc(n,65536)):Gl(n,n.moduleSpecifier)&&mn(a.namedBindings.elements,gU)))}FLe(n)}}function mnt(n){if(!n8(n,Yn(n)?_.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module:_.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)&&(km(n),GA(n)||Uie(n)))if(gU(n),Mr(n,1)&&TE(n),n.moduleReference.kind!==280){let a=wc(fr(n));if(a!==Ht){let c=Fl(a);if(c&111551){let u=Yd(n.moduleReference);uc(u,112575).flags&1920||Fe(u,_.Module_0_is_hidden_by_a_local_declaration_with_the_same_name,os(u))}c&788968&&HC(n.name,_.Import_name_cannot_be_0)}n.isTypeOnly&&an(n,_.An_import_alias_cannot_use_import_type)}else ie>=5&&Gn(n).impliedNodeFormat===void 0&&!n.isTypeOnly&&!(n.flags&16777216)&&an(n,_.Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead)}function hnt(n){if(!n8(n,Yn(n)?_.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module:_.An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)){if(!km(n)&&Wce(n)&&dl(n,_.An_export_declaration_cannot_have_modifiers),n.moduleSpecifier&&n.exportClause&&h_(n.exportClause)&&Fn(n.exportClause.elements)&&R===0&&Hc(n,4194304),gnt(n),!n.moduleSpecifier||Uie(n))if(n.exportClause&&!qm(n.exportClause)){mn(n.exportClause.elements,Snt);let a=n.parent.kind===265&&lu(n.parent.parent),c=!a&&n.parent.kind===265&&!n.moduleSpecifier&&n.flags&16777216;n.parent.kind!==308&&!a&&!c&&Fe(n,_.Export_declarations_are_not_permitted_in_a_namespace)}else{let a=Gl(n,n.moduleSpecifier);a&&AE(a)?Fe(n.moduleSpecifier,_.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk,E(a)):n.exportClause&&hU(n.exportClause),ie!==4&&(ie<5||Gn(n).impliedNodeFormat===1)&&(n.exportClause?f_(Y)&&Hc(n,65536):Hc(n,32768))}FLe(n)}}function gnt(n){var a;return n.isTypeOnly&&((a=n.exportClause)==null?void 0:a.kind)===276?pke(n.exportClause):!1}function n8(n,a){let c=n.parent.kind===308||n.parent.kind===265||n.parent.kind===264;return c||dl(n,a),!c}function ynt(n){return z6(n,a=>!!fr(a).isReferenced)}function vnt(n){return z6(n,a=>!!Ai(fr(a)).constEnumReferenced)}function bnt(n){return gl(n)&&n.importClause&&!n.importClause.isTypeOnly&&ynt(n.importClause)&&!SU(n.importClause,!0)&&!vnt(n.importClause)}function Ent(n){return Nl(n)&&um(n.moduleReference)&&!n.isTypeOnly&&fr(n).isReferenced&&!SU(n,!1)&&!Ai(fr(n)).constEnumReferenced}function Tnt(n){for(let a of n.statements)(bnt(a)||Ent(a))&&Fe(a,_.This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error)}function Snt(n){if(hU(n),__(Y)&&ME(n.propertyName||n.name,!0),n.parent.parent.moduleSpecifier)f_(Y)&&ie!==4&&(ie<5||Gn(n).impliedNodeFormat===1)&&vr(n.propertyName||n.name)===\"default\"&&Hc(n,131072);else{let a=n.propertyName||n.name,c=zs(a,a.escapedText,2998271,void 0,void 0,!0);if(c&&(c===Le||c===Ye||c.declarations&&gm(FE(c.declarations[0]))))Fe(a,_.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module,vr(a));else{!n.isTypeOnly&&!n.parent.parent.isTypeOnly&&TE(n);let u=c&&(c.flags&2097152?wc(c):c);(!u||Fl(u)&111551)&&Ic(n.propertyName||n.name)}}}function xnt(n){let a=n.isExportEquals?_.An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration:_.A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration;if(n8(n,a))return;let c=n.parent.kind===308?n.parent:n.parent.parent;if(c.kind===264&&!lu(c)){n.isExportEquals?Fe(n,_.An_export_assignment_cannot_be_used_in_a_namespace):Fe(n,_.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);return}!km(n)&&n4(n)&&dl(n,_.An_export_assignment_cannot_have_modifiers);let u=Cl(n);u&&wu(Ic(n.expression),$r(u),n.expression);let p=!n.isExportEquals&&!(n.flags&16777216)&&Y.verbatimModuleSyntax&&(ie===1||Gn(n).impliedNodeFormat===1);if(n.expression.kind===79){let h=n.expression,T=tp(uc(h,67108863,!0,!0,n));T?(FB(T,h),Fl(T)&111551?(Ic(h),!p&&Y.verbatimModuleSyntax&&nd(T,111551)&&Fe(h,n.isExportEquals?_.An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration:_.An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration,vr(h))):!p&&Y.verbatimModuleSyntax&&Fe(h,n.isExportEquals?_.An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type:_.An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type,vr(h))):Ic(h),__(Y)&&ME(h,!0)}else Ic(n.expression);p&&Fe(n,_.ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled),GLe(c),n.flags&16777216&&!bc(n.expression)&&an(n.expression,_.The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context),n.isExportEquals&&(ie>=5&&(n.flags&16777216&&Gn(n).impliedNodeFormat===99||!(n.flags&16777216)&&Gn(n).impliedNodeFormat!==1)?an(n,_.Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead):ie===4&&!(n.flags&16777216)&&an(n,_.Export_assignment_is_not_supported_when_module_flag_is_system))}function Ant(n){return Ld(n.exports,(a,c)=>c!==\"export=\")}function GLe(n){let a=fr(n),c=Ai(a);if(!c.exportsChecked){let u=a.exports.get(\"export=\");if(u&&Ant(a)){let h=Uu(u)||u.valueDeclaration;h&&!Td(h)&&!Yn(h)&&Fe(h,_.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements)}let p=sh(a);p&&p.forEach(({declarations:h,flags:T},k)=>{if(k===\"__export\"||T&1920)return;let O=Oy(h,g8(O_e,y8(ku)));if(!(T&524288&&O<=2)&&O>1&&!yU(h))for(let H of h)D_e(H)&&Lo.add(hr(H,_.Cannot_redeclare_exported_variable_0,Gi(k)))}),c.exportsChecked=!0}}function yU(n){return n&&n.length>1&&n.every(a=>Yn(a)&&Us(a)&&(TT(a.expression)||Bm(a.expression)))}function qa(n){if(n){let a=P;P=n,A=0,Cnt(n),P=a}}function Cnt(n){lR(n)&&mn(n.jsDoc,({comment:c,tags:u})=>{BLe(c),mn(u,p=>{BLe(p.comment),Yn(n)&&qa(p)})});let a=n.kind;if(o)switch(a){case 264:case 260:case 261:case 259:o.throwIfCancellationRequested()}switch(a>=240&&a<=256&&cR(n)&&n.flowNode&&!IM(n.flowNode)&&Ip(Y.allowUnreachableCode===!1,n,_.Unreachable_code_detected),a){case 165:return BIe(n);case 166:return UIe(n);case 169:return HIe(n);case 168:return cet(n);case 182:case 181:case 176:case 177:case 178:return LD(n);case 171:case 170:return uet(n);case 172:return det(n);case 173:return fet(n);case 174:case 175:return zIe(n);case 180:return Aie(n);case 179:return iet(n);case 183:return yet(n);case 184:return vet(n);case 185:return bet(n);case 186:return Eet(n);case 189:case 190:return Tet(n);case 193:case 187:case 188:return qa(n.type);case 194:return Iet(n);case 195:return Let(n);case 191:return ket(n);case 192:return Det(n);case 200:return wet(n);case 202:return Ret(n);case 199:return Oet(n);case 331:return $et(n);case 332:return Yet(n);case 349:case 341:case 343:return jet(n);case 348:return Het(n);case 347:return Wet(n);case 327:case 328:case 329:return Jet(n);case 344:return Ket(n);case 351:return qet(n);case 320:Xet(n);case 318:case 317:case 315:case 316:case 325:ULe(n),pa(n,qa);return;case 321:Int(n);return;case 312:return qa(n.type);case 336:case 338:case 337:return Qet(n);case 353:return zet(n);case 196:return xet(n);case 197:return Aet(n);case 259:return Vet(n);case 238:case 265:return dU(n);case 240:return mtt(n);case 241:return htt(n);case 242:return gtt(n);case 243:return btt(n);case 244:return Ett(n);case 245:return Ttt(n);case 246:return xtt(n);case 247:return Stt(n);case 248:case 249:return Rtt(n);case 250:return Ott(n);case 251:return Ntt(n);case 252:return Ptt(n);case 253:return Mtt(n);case 254:return Ftt(n);case 255:return Gtt(n);case 257:return Die(n);case 205:return ptt(n);case 260:return Jtt(n);case 261:return nnt(n);case 262:return rnt(n);case 263:return snt(n);case 264:return fnt(n);case 269:return pnt(n);case 268:return mnt(n);case 275:return hnt(n);case 274:return xnt(n);case 239:case 256:vh(n);return;case 279:return pet(n)}}function BLe(n){ba(n)&&mn(n,a=>{iS(a)&&qa(a)})}function ULe(n){if(!Yn(n))if(m3(n)||T2(n)){let a=Xa(m3(n)?53:57),c=n.postfix?_._0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1:_._0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1,u=n.type,p=$r(u);an(n,c,a,Ee(T2(n)&&!(p===lt||p===yt)?Gr(Sn([p,Oe],n.postfix?void 0:ln)):p))}else an(n,_.JSDoc_types_can_only_be_used_inside_documentation_comments)}function Int(n){ULe(n),qa(n.type);let{parent:a}=n;if(ha(a)&&S2(a.parent)){To(a.parent.parameters)!==a&&Fe(n,_.A_rest_parameter_must_be_last_in_a_parameter_list);return}UT(a)||Fe(n,_.JSDoc_may_only_appear_in_the_last_parameter_of_a_signature);let c=n.parent.parent;if(!xp(c)){Fe(n,_.JSDoc_may_only_appear_in_the_last_parameter_of_a_signature);return}let u=uR(c);if(!u)return;let p=sb(c);(!p||To(p.parameters).symbol!==u)&&Fe(n,_.A_rest_parameter_must_be_last_in_a_parameter_list)}function Lnt(n){let a=$r(n.type),{parent:c}=n,u=n.parent.parent;if(UT(n.parent)&&xp(u)){let p=sb(u),h=Vz(u.parent.parent);if(p||h){let T=Os(h?u.parent.parent.typeExpression.parameters:p.parameters),k=uR(u);if(!T||k&&T.symbol===k&&Fm(T))return nu(a)}}return ha(c)&&S2(c.parent)?nu(a):ao(a)}function zC(n){let a=Gn(n),c=Rr(a);c.flags&1?L.assert(!c.deferredNodes,\"A type-checked file should have no deferred nodes.\"):(c.deferredNodes||(c.deferredNodes=new Set),c.deferredNodes.add(n))}function knt(n){let a=Rr(n);a.deferredNodes&&a.deferredNodes.forEach(Dnt),a.deferredNodes=void 0}function Dnt(n){var a,c;(a=ai)==null||a.push(ai.Phase.Check,\"checkDeferredNode\",{kind:n.kind,pos:n.pos,end:n.end,path:n.tracingPath});let u=P;switch(P=n,A=0,n.kind){case 210:case 211:case 212:case 167:case 283:nA(n);break;case 215:case 216:case 171:case 170:EZe(n);break;case 174:case 175:zIe(n);break;case 228:ztt(n);break;case 165:ret(n);break;case 282:N$e(n);break;case 281:M$e(n);break}P=u,(c=ai)==null||c.pop()}function wnt(n){var a,c;(a=ai)==null||a.push(ai.Phase.Check,\"checkSourceFile\",{path:n.path},!0),Fs(\"beforeCheck\"),Rnt(n),Fs(\"afterCheck\"),hf(\"Check\",\"beforeCheck\",\"afterCheck\"),(c=ai)==null||c.pop()}function VLe(n,a){if(a)return!1;switch(n){case 0:return!!Y.noUnusedLocals;case 1:return!!Y.noUnusedParameters;default:return L.assertNever(n)}}function jLe(n){return rn.get(n.path)||Je}function Rnt(n){let a=Rr(n);if(!(a.flags&1)){if(rL(n,Y,e))return;nit(n),Om(pE),Om(vv),Om(Lb),Om(bv),Om(m1),mn(n.statements,qa),qa(n.endOfFileToken),knt(n),kd(n)&&Dy(n),i(()=>{!n.isDeclarationFile&&(Y.noUnusedLocals||Y.noUnusedParameters)&&rLe(jLe(n),(c,u,p)=>{!Gw(c)&&VLe(u,!!(c.flags&16777216))&&Lo.add(p)}),n.isDeclarationFile||ntt()}),Y.importsNotUsedAsValues===2&&!n.isDeclarationFile&&Lc(n)&&Tnt(n),kd(n)&&GLe(n),pE.length&&(mn(pE,att),Om(pE)),vv.length&&(mn(vv,ott),Om(vv)),Lb.length&&(mn(Lb,utt),Om(Lb)),bv.length&&(mn(bv,ftt),Om(bv)),a.flags|=1}}function HLe(n,a){try{return o=a,Ont(n)}finally{o=void 0}}function Vie(){for(let n of r)n();r=[]}function jie(n){Vie();let a=i;i=c=>c(),wnt(n),i=a}function Ont(n){if(n){Vie();let a=Lo.getGlobalDiagnostics(),c=a.length;jie(n);let u=Lo.getDiagnostics(n.fileName),p=Lo.getGlobalDiagnostics();if(p!==a){let h=fae(a,p,ZI);return Qi(h,u)}else if(c===0&&p.length>0)return Qi(p,u);return u}return mn(e.getSourceFiles(),jie),Lo.getDiagnostics()}function Nnt(){return Vie(),Lo.getGlobalDiagnostics()}function Pnt(n,a){if(n.flags&33554432)return[];let c=Ua(),u=!1;return p(),c.delete(\"this\"),ene(c);function p(){for(;n;){switch(Qp(n)&&n.locals&&!gm(n)&&T(n.locals,a),n.kind){case 308:if(!Lc(n))break;case 264:k(fr(n).exports,a&2623475);break;case 263:T(fr(n).exports,a&8);break;case 228:n.name&&h(n.symbol,a);case 260:case 261:u||T(vy(fr(n)),a&788968);break;case 215:n.name&&h(n.symbol,a);break}tce(n)&&h(_t,a),u=Ca(n),n=n.parent}T(Ne,a)}function h(O,H){if(XI(O)&H){let J=O.escapedName;c.has(J)||c.set(J,O)}}function T(O,H){H&&O.forEach(J=>{h(J,H)})}function k(O,H){H&&O.forEach(J=>{!nc(J,278)&&!nc(J,277)&&h(J,H)})}}function Mnt(n){return n.kind===79&&o2(n.parent)&&sa(n.parent)===n}function WLe(n){for(;n.parent.kind===163;)n=n.parent;return n.parent.kind===180}function Fnt(n){for(;n.parent.kind===208;)n=n.parent;return n.parent.kind===230}function zLe(n,a){let c,u=Zc(n);for(;u&&!(c=a(u));)u=Zc(u);return c}function Gnt(n){return!!jn(n,a=>Ec(a)&&Pf(a.body)||Na(a)?!0:Yr(a)||Ds(a)?\"quit\":!1)}function Hie(n,a){return!!zLe(n,c=>c===a)}function Bnt(n){for(;n.parent.kind===163;)n=n.parent;if(n.parent.kind===268)return n.parent.moduleReference===n?n.parent:void 0;if(n.parent.kind===274)return n.parent.expression===n?n.parent:void 0}function vU(n){return Bnt(n)!==void 0}function Unt(n){switch(ic(n.parent.parent)){case 1:case 3:return vd(n.parent);case 4:case 2:case 5:return fr(n.parent.parent)}}function Vnt(n){let a=n.parent;for(;Yu(a);)n=a,a=a.parent;if(a&&a.kind===202&&a.qualifier===n)return a}function JLe(n){if(Rh(n))return vd(n.parent);if(Yn(n)&&n.parent.kind===208&&n.parent===n.parent.parent.left&&!pi(n)&&!gb(n)){let a=Unt(n);if(a)return a}if(n.parent.kind===274&&bc(n)){let a=uc(n,2998271,!0);if(a&&a!==Ht)return a}else if(Cd(n)&&vU(n)){let a=cb(n,268);return L.assert(a!==void 0),ep(n,!0)}if(Cd(n)){let a=Vnt(n);if(a){$r(a);let c=Rr(n).resolvedSymbol;return c===Ht?void 0:c}}for(;Qce(n);)n=n.parent;if(Fnt(n)){let a=0;n.parent.kind===230?(a=Gm(n)?788968:111551,IR(n.parent)&&(a|=111551)):a=1920,a|=2097152;let c=bc(n)?uc(n,a):void 0;if(c)return c}if(n.parent.kind===344)return uR(n.parent);if(n.parent.kind===165&&n.parent.parent.kind===348){L.assert(!Yn(n));let a=yce(n.parent);return a&&a.symbol}if(Dh(n)){if(rc(n))return;let a=jn(n,Kp(iS,IL,gb)),c=a?901119:111551;if(n.kind===79){if(DI(n)&&OC(n)){let p=Gre(n.parent);return p===Ht?void 0:p}let u=uc(n,c,!1,!0,sb(n));if(!u&&a){let p=jn(n,Kp(Yr,ku));if(p)return r8(n,!1,fr(p))}if(u&&a){let p=dS(n);if(p&&q0(p)&&p===u.valueDeclaration)return uc(n,c,!0,!0,Gn(p))||u}return u}else{if(pi(n))return KB(n);if(n.kind===208||n.kind===163){let u=Rr(n);if(u.resolvedSymbol)return u.resolvedSymbol;if(n.kind===208){if(RCe(n,0),!u.resolvedSymbol){let p=Ic(n.expression),h=Zte(p,pg(n.name));if(h.length&&p.members){let k=R_(p).members.get(\"__index\");if(h===tu(p))u.resolvedSymbol=k;else if(k){let O=Ai(k),H=Zi(h,de=>de.declaration),J=on(H,zo).join(\",\");if(O.filteredIndexSymbolCache||(O.filteredIndexSymbolCache=new Map),O.filteredIndexSymbolCache.has(J))u.resolvedSymbol=O.filteredIndexSymbolCache.get(J);else{let de=wo(131072,\"__index\");de.declarations=Zi(h,Ae=>Ae.declaration),de.parent=p.aliasSymbol?p.aliasSymbol:p.symbol?p.symbol:Zf(de.declarations[0].parent),O.filteredIndexSymbolCache.set(J,de),u.resolvedSymbol=O.filteredIndexSymbolCache.get(J)}}}}}else OCe(n,0);return!u.resolvedSymbol&&a&&Yu(n)?r8(n):u.resolvedSymbol}else if(gb(n))return r8(n)}}else if(WLe(n)){let a=n.parent.kind===180?788968:1920,c=uc(n,a,!1,!0);return c&&c!==Ht?c:XG(n)}if(n.parent.kind===179)return uc(n,1)}function r8(n,a,c){if(Cd(n)){let T=uc(n,901119,a,!0,sb(n));if(!T&&Re(n)&&c&&(T=No(yd(Gd(c),n.escapedText,901119))),T)return T}let u=Re(n)?c:r8(n.left,a,c),p=Re(n)?n.escapedText:n.right.escapedText;if(u){let h=u.flags&111551&&ja(zn(u),\"prototype\"),T=h?zn(h):gs(u);return ja(T,p)}}function Zf(n,a){if(Li(n))return Lc(n)?No(n.symbol):void 0;let{parent:c}=n,u=c.parent;if(!(n.flags&33554432)){if(w_e(n)){let p=fr(c);return eS(n.parent)&&n.parent.propertyName===n?Mre(p):p}else if(_R(n))return fr(c.parent);if(n.kind===79){if(vU(n))return JLe(n);if(c.kind===205&&u.kind===203&&n===c.propertyName){let p=G1(u),h=ja(p,n.escapedText);if(h)return h}else if(TL(c)&&c.name===n)return c.keywordToken===103&&vr(n)===\"target\"?lie(c).symbol:c.keywordToken===100&&vr(n)===\"meta\"?tAe().members.get(\"meta\"):void 0}switch(n.kind){case 79:case 80:case 208:case 163:if(!mS(n))return JLe(n);case 108:let p=Ku(n,!1,!1);if(Ia(p)){let k=ip(p);if(k.thisParameter)return k.thisParameter}if(F6(n))return Yi(n).symbol;case 194:return oB(n).symbol;case 106:return Yi(n).symbol;case 135:let h=n.parent;return h&&h.kind===173?h.parent.symbol:void 0;case 10:case 14:if(ab(n.parent.parent)&&wI(n.parent.parent)===n||(n.parent.kind===269||n.parent.kind===275)&&n.parent.moduleSpecifier===n||Yn(n)&&$s(Y)!==100&&qu(n.parent,!1)||Dd(n.parent)||mb(n.parent)&&ib(n.parent.parent)&&n.parent.parent.argument===n.parent)return Gl(n,n,a);if(Pa(c)&&sS(c)&&c.arguments[1]===n)return fr(c);case 8:let T=Vs(c)?c.argumentExpression===n?au(c.expression):void 0:mb(c)&&OS(u)?$r(u.objectType):void 0;return T&&ja(T,Bs(n.text));case 88:case 98:case 38:case 84:return vd(n.parent);case 202:return ib(n)?Zf(n.argument.literal,a):void 0;case 93:return pc(n.parent)?L.checkDefined(n.parent.symbol):void 0;case 100:case 103:return TL(n.parent)?mIe(n.parent).symbol:void 0;case 233:return Yi(n).symbol;default:return}}}function jnt(n){if(Re(n)&&br(n.parent)&&n.parent.name===n){let a=pg(n),c=au(n.parent.expression),u=c.flags&1048576?c.types:[c];return Uo(u,p=>Pr(tu(p),h=>Vx(a,h.keyType)))}}function Hnt(n){if(n&&n.kind===300)return uc(n.name,2208703)}function Wnt(n){return Mu(n)?n.parent.parent.moduleSpecifier?af(n.parent.parent,n):uc(n.propertyName||n.name,2998271):uc(n,2998271)}function G1(n){if(Li(n)&&!Lc(n)||n.flags&33554432)return ve;let a=uW(n),c=a&&vu(fr(a.class));if(Gm(n)){let u=$r(n);return c?uf(u,c.thisType):u}if(Dh(n))return KLe(n);if(c&&!a.isImplements){let u=Sl(_o(c));return u?uf(u,c.thisType):ve}if(o2(n)){let u=fr(n);return gs(u)}if(Mnt(n)){let u=Zf(n);return u?gs(u):ve}if(Kl(n)){let u=fr(n);return u?zn(u):ve}if(w_e(n)){let u=Zf(n);return u?zn(u):ve}if(La(n))return Oo(n.parent,!0,0)||ve;if(vU(n)){let u=Zf(n);if(u){let p=gs(u);return Ro(p)?zn(u):p}}return TL(n.parent)&&n.parent.keywordToken===n.kind?mIe(n.parent):ve}function bU(n){if(L.assert(n.kind===207||n.kind===206),n.parent.kind===247){let p=e8(n.parent);return nT(n,p||ve)}if(n.parent.kind===223){let p=au(n.parent.right);return nT(n,p||ve)}if(n.parent.kind===299){let p=Ga(n.parent.parent,rs),h=bU(p)||ve,T=DA(p.properties,n.parent);return kIe(p,h,T)}let a=Ga(n.parent,fu),c=bU(a)||ve,u=wy(65,c,Oe,n.parent)||ve;return DIe(a,c,a.elements.indexOf(n),u)}function znt(n){let a=bU(Ga(n.parent.parent,vI));return a&&ja(a,n.escapedText)}function KLe(n){return zI(n)&&(n=n.parent),Hu(au(n))}function qLe(n){let a=vd(n.parent);return Ca(n)?zn(a):gs(a)}function XLe(n){let a=n.name;switch(a.kind){case 79:return ff(vr(a));case 8:case 10:return ff(a.text);case 164:let c=vg(a);return ul(c,12288)?c:ae;default:return L.fail(\"Unsupported property name.\")}}function Wie(n){n=Eu(n);let a=Ua(Jo(n)),c=xa(n,0).length?Uc:xa(n,1).length?Gu:void 0;return c&&mn(Jo(c),u=>{a.has(u.escapedName)||a.set(u.escapedName,u)}),uy(a)}function EU(n){return xa(n,0).length!==0||xa(n,1).length!==0}function YLe(n){let a=Jnt(n);return a?Uo(a,YLe):[n]}function Jnt(n){if(ac(n)&6)return Zi(Ai(n).containingType.types,a=>ja(a,n.escapedName));if(n.flags&33554432){let{links:{leftSpread:a,rightSpread:c,syntheticOrigin:u}}=n;return a?[a,c]:u?[u]:aT(Knt(n))}}function Knt(n){let a,c=n;for(;c=Ai(c).target;)a=c;return a}function qnt(n){if(tc(n))return!1;let a=ea(n,Re);if(!a)return!1;let c=a.parent;return c?!((br(c)||yl(c))&&c.name===a)&&i8(a)===_t:!1}function Xnt(n){let a=Gl(n.parent,n);if(!a||CI(a))return!0;let c=AE(a);a=Vu(a);let u=Ai(a);return u.exportsSomeValue===void 0&&(u.exportsSomeValue=c?!!(a.flags&111551):Ld(sh(a),p)),u.exportsSomeValue;function p(h){return h=Ac(h),h&&!!(Fl(h)&111551)}}function Ynt(n){return Ow(n.parent)&&n===n.parent.name}function $nt(n,a){var c;let u=ea(n,Re);if(u){let p=i8(u,Ynt(u));if(p){if(p.flags&1048576){let T=No(p.exportSymbol);if(!a&&T.flags&944&&!(T.flags&3))return;p=T}let h=ju(p);if(h){if(h.flags&512&&((c=h.valueDeclaration)==null?void 0:c.kind)===308){let T=h.valueDeclaration,k=Gn(u);return T!==k?void 0:T}return jn(u.parent,T=>Ow(T)&&fr(T)===h)}}}}function Qnt(n){let a=Eue(n);if(a)return a;let c=ea(n,Re);if(c){let u=drt(c);if(ay(u,111551)&&!nd(u,111551))return Uu(u)}}function Znt(n){return n.valueDeclaration&&Wo(n.valueDeclaration)&&bA(n.valueDeclaration).parent.kind===295}function $Le(n){if(n.flags&418&&n.valueDeclaration&&!Li(n.valueDeclaration)){let a=Ai(n);if(a.isDeclarationWithCollidingName===void 0){let c=tm(n.valueDeclaration);if(Ose(c)||Znt(n)){let u=Rr(n.valueDeclaration);if(zs(c.parent,n.escapedName,111551,void 0,void 0,!1))a.isDeclarationWithCollidingName=!0;else if(u.flags&16384){let p=u.flags&32768,h=Wy(c,!1),T=c.kind===238&&Wy(c.parent,!1);a.isDeclarationWithCollidingName=!Hse(c)&&(!p||!h&&!T)}else a.isDeclarationWithCollidingName=!1}}return a.isDeclarationWithCollidingName}return!1}function ert(n){if(!tc(n)){let a=ea(n,Re);if(a){let c=i8(a);if(c&&$Le(c))return c.valueDeclaration}}}function trt(n){let a=ea(n,Kl);if(a){let c=fr(a);if(c)return $Le(c)}return!1}function QLe(n){switch(L.assert(!Y.verbatimModuleSyntax),n.kind){case 268:return TU(fr(n));case 270:case 271:case 273:case 278:let a=fr(n);return!!a&&TU(a)&&!nd(a,111551);case 275:let c=n.exportClause;return!!c&&(qm(c)||vt(c.elements,QLe));case 274:return n.expression&&n.expression.kind===79?TU(fr(n)):!0}return!1}function nrt(n){let a=ea(n,Nl);return a===void 0||a.parent.kind!==308||!GA(a)?!1:TU(fr(a))&&a.moduleReference&&!rc(a.moduleReference)}function TU(n){var a;if(!n)return!1;let c=tp(wc(n));return c===Ht?!0:!!(((a=Fl(c))!=null?a:-1)&111551)&&(U0(Y)||!MD(c))}function MD(n){return gie(n)||!!n.constEnumOnlyModule}function SU(n,a){if(L.assert(!Y.verbatimModuleSyntax),Zh(n)){let c=fr(n),u=c&&Ai(c);if(u?.referenced)return!0;let p=Ai(c).aliasTarget;if(p&&uu(n)&1&&Fl(p)&111551&&(U0(Y)||!MD(p)))return!0}return a?!!pa(n,c=>SU(c,a)):!1}function ZLe(n){if(Pf(n.body)){if(zy(n)||Ng(n))return!1;let a=fr(n),c=Xb(a);return c.length>1||c.length===1&&c[0].declaration!==n}return!1}function eke(n){return!!U&&!Qk(n)&&!xp(n)&&!!n.initializer&&!Mr(n,16476)}function rrt(n){return U&&Qk(n)&&!n.initializer&&Mr(n,16476)}function irt(n){let a=ea(n,Jc);if(!a)return!1;let c=fr(a);return!c||!(c.flags&16)?!1:!!Ld(Gd(c),u=>u.flags&111551&&u.valueDeclaration&&br(u.valueDeclaration))}function art(n){let a=ea(n,Jc);if(!a)return Je;let c=fr(a);return c&&Jo(zn(c))||Je}function sA(n){var a;let c=n.id||0;return c<0||c>=Ib.length?0:((a=Ib[c])==null?void 0:a.flags)||0}function xU(n){return OLe(n.parent),Rr(n).enumMemberValue}function tke(n){switch(n.kind){case 302:case 208:case 209:return!0}return!1}function zie(n){if(n.kind===302)return xU(n);let a=Rr(n).resolvedSymbol;if(a&&a.flags&8){let c=a.valueDeclaration;if(R0(c.parent))return xU(c)}}function Jie(n){return!!(n.flags&524288)&&xa(n,0).length>0}function ort(n,a){var c;let u=ea(n,Cd);if(!u||a&&(a=ea(a),!a))return 0;let p=!1;if(Yu(u)){let H=uc(Yd(u),111551,!0,!0,a);p=!!((c=H?.declarations)!=null&&c.every(I0))}let h=uc(u,111551,!0,!0,a),T=h&&h.flags&2097152?wc(h):h;p||(p=!!(h&&nd(h,111551)));let k=uc(u,788968,!0,!1,a);if(T&&T===k){let H=_ne(!1);if(H&&T===H)return 9;let J=zn(T);if(J&&Uv(J))return p?10:1}if(!k)return p?11:0;let O=gs(k);return Ro(O)?p?11:0:O.flags&3?11:ul(O,245760)?2:ul(O,528)?6:ul(O,296)?3:ul(O,2112)?4:ul(O,402653316)?5:po(O)?7:ul(O,12288)?8:Jie(O)?10:_f(O)?7:11}function srt(n,a,c,u,p){let h=ea(n,Qse);if(!h)return D.createToken(131);let T=fr(h),k=T&&!(T.flags&133120)?i0(zn(T)):ve;return k.flags&8192&&k.symbol===T&&(c|=1048576),p&&(k=gg(k)),Be.typeToTypeNode(k,a,c|1024,u)}function crt(n,a,c,u){let p=ea(n,Ia);if(!p)return D.createToken(131);let h=ip(p);return Be.typeToTypeNode(qo(h),a,c|1024,u)}function lrt(n,a,c,u){let p=ea(n,ot);if(!p)return D.createToken(131);let h=Sd(KLe(p));return Be.typeToTypeNode(h,a,c|1024,u)}function urt(n){return Ne.has(Bs(n))}function i8(n,a){let c=Rr(n).resolvedSymbol;if(c)return c;let u=n;if(a){let p=n.parent;Kl(p)&&n===p.name&&(u=FE(p))}return zs(u,n.escapedText,3257279,void 0,void 0,!0)}function drt(n){let a=Rr(n).resolvedSymbol;return a&&a!==Ht?a:zs(n,n.escapedText,3257279,void 0,void 0,!0,void 0,void 0)}function frt(n){if(!tc(n)){let a=ea(n,Re);if(a){let c=i8(a);if(c)return tp(c).valueDeclaration}}}function _rt(n){return x6(n)||wi(n)&&kh(n)?t0(zn(fr(n))):!1}function prt(n,a,c){let u=n.flags&1056?Be.symbolToExpression(n.symbol,111551,a,void 0,c):n===pe?D.createTrue():n===Ke&&D.createFalse();if(u)return u;let p=n.value;return typeof p==\"object\"?D.createBigIntLiteral(p):typeof p==\"number\"?D.createNumericLiteral(p):D.createStringLiteral(p)}function mrt(n,a){let c=zn(fr(n));return prt(c,n,a)}function nke(n){return n?(Rb(n),Gn(n).localJsxFactory||Kh):Kh}function Kie(n){if(n){let a=Gn(n);if(a){if(a.localJsxFragmentFactory)return a.localJsxFragmentFactory;let c=a.pragmas.get(\"jsxfrag\"),u=ba(c)?c[0]:c;if(u)return a.localJsxFragmentFactory=zS(u.arguments.factory,R),a.localJsxFragmentFactory}}if(Y.jsxFragmentFactory)return zS(Y.jsxFragmentFactory,R)}function hrt(){let n=e.getResolvedTypeReferenceDirectives(),a;return n&&(a=new Map,n.forEach(({resolvedTypeReferenceDirective:O},H,J)=>{if(!O?.resolvedFileName)return;let de=e.getSourceFile(O.resolvedFileName);de&&k(de,H,J)})),{getReferencedExportContainer:$nt,getReferencedImportDeclaration:Qnt,getReferencedDeclarationWithCollidingName:ert,isDeclarationWithCollidingName:trt,isValueAliasDeclaration:O=>{let H=ea(O);return H?QLe(H):!0},hasGlobalName:urt,isReferencedAliasDeclaration:(O,H)=>{let J=ea(O);return J?SU(J,H):!0},getNodeCheckFlags:O=>{let H=ea(O);return H?sA(H):0},isTopLevelValueImportEqualsWithEntityName:nrt,isDeclarationVisible:Xf,isImplementationOfOverload:ZLe,isRequiredInitializedParameter:eke,isOptionalUninitializedParameterProperty:rrt,isExpandoFunctionDeclaration:irt,getPropertiesOfContainerFunction:art,createTypeOfDeclaration:srt,createReturnTypeOfSignatureDeclaration:crt,createTypeOfExpression:lrt,createLiteralConstValue:mrt,isSymbolAccessible:dy,isEntityNameVisible:Nx,getConstantValue:O=>{let H=ea(O,tke);return H?zie(H):void 0},collectLinkedAliases:ME,getReferencedValueDeclaration:frt,getTypeReferenceSerializationKind:ort,isOptionalParameter:Qk,moduleExportsSomeValue:Xnt,isArgumentsLocalBinding:qnt,getExternalModuleFileFromDeclaration:O=>{let H=ea(O,zse);return H&&qie(H)},getTypeReferenceDirectivesForEntityName:p,getTypeReferenceDirectivesForSymbol:h,isLiteralConstDeclaration:_rt,isLateBound:O=>{let H=ea(O,Kl),J=H&&fr(H);return!!(J&&ac(J)&4096)},getJsxFactoryEntity:nke,getJsxFragmentFactoryEntity:Kie,getAllAccessorDeclarations(O){O=ea(O,t6);let H=O.kind===175?174:175,J=nc(fr(O),H),de=J&&J.pos<O.pos?J:O,Ae=J&&J.pos<O.pos?O:J,xe=O.kind===175?O:J,tt=O.kind===174?O:J;return{firstAccessor:de,secondAccessor:Ae,setAccessor:xe,getAccessor:tt}},getSymbolOfExternalModuleSpecifier:O=>ah(O,O,void 0),isBindingCapturedByNode:(O,H)=>{let J=ea(O),de=ea(H);return!!J&&!!de&&(wi(de)||Wo(de))&&zYe(J,de)},getDeclarationStatementsForSourceFile:(O,H,J,de)=>{let Ae=ea(O);L.assert(Ae&&Ae.kind===308,\"Non-sourcefile node passed into getDeclarationsForSourceFile\");let xe=fr(O);return xe?xe.exports?Be.symbolTableToDeclarationStatements(xe.exports,O,H,J,de):[]:O.locals?Be.symbolTableToDeclarationStatements(O.locals,O,H,J,de):[]},isImportRequiredByAugmentation:c};function c(O){let H=Gn(O);if(!H.symbol)return!1;let J=qie(O);if(!J||J===H)return!1;let de=sh(H.symbol);for(let Ae of lo(de.values()))if(Ae.mergeId){let xe=No(Ae);if(xe.declarations){for(let tt of xe.declarations)if(Gn(tt)===J)return!0}}return!1}function u(O){return O.parent&&O.parent.kind===230&&O.parent.parent&&O.parent.parent.kind===294}function p(O){if(!a)return;let H;O.parent.kind===164?H=1160127:(H=790504,(O.kind===79&&kC(O)||O.kind===208&&!u(O))&&(H=1160127));let J=uc(O,H,!0);return J&&J!==Ht?h(J,H):void 0}function h(O,H){if(!a||!T(O))return;let J;for(let de of O.declarations)if(de.symbol&&de.symbol.flags&H){let Ae=Gn(de),xe=a.get(Ae.path);if(xe)(J||(J=[])).push(xe);else return}return J}function T(O){if(!O.declarations)return!1;let H=O;for(;;){let J=ju(H);if(J)H=J;else break}if(H.valueDeclaration&&H.valueDeclaration.kind===308&&H.flags&512)return!1;for(let J of O.declarations){let de=Gn(J);if(a.has(de.path))return!0}return!1}function k(O,H,J){if(!a.has(O.path)){a.set(O.path,[H,J]);for(let{fileName:de,resolutionMode:Ae}of O.referencedFiles){let xe=wF(de,O.fileName),tt=e.getSourceFile(xe);tt&&k(tt,H,Ae||O.impliedNodeFormat)}}}}function qie(n){let a=n.kind===264?zr(n.name,yo):UA(n),c=ah(a,a,void 0);if(c)return nc(c,308)}function grt(){for(let a of e.getSourceFiles())c_e(a,Y);pr=new Map;let n;for(let a of e.getSourceFiles())if(!a.redirectInfo){if(!kd(a)){let c=a.locals.get(\"globalThis\");if(c?.declarations)for(let u of c.declarations)Lo.add(hr(u,_.Declaration_name_conflicts_with_built_in_global_identifier_0,\"globalThis\"));ll(Ne,a.locals)}a.jsGlobalAugmentations&&ll(Ne,a.jsGlobalAugmentations),a.patternAmbientModules&&a.patternAmbientModules.length&&(Ka=Qi(Ka,a.patternAmbientModules)),a.moduleAugmentations.length&&(n||(n=[])).push(a.moduleAugmentations),a.symbol&&a.symbol.globalExports&&a.symbol.globalExports.forEach((u,p)=>{Ne.has(p)||Ne.set(p,u)})}if(n)for(let a of n)for(let c of a)mp(c.parent)&&y1(c);if(lC(Ne,Db,_.Declaration_name_conflicts_with_built_in_global_identifier_0),Ai(Le).type=je,Ai(_t).type=Fc(\"IArguments\",0,!0),Ai(Ht).type=ve,Ai(Ye).type=Bd(16,Ye),$o=Fc(\"Array\",1,!0),ka=Fc(\"Object\",0,!0),Hs=Fc(\"Function\",0,!0),Uc=le&&Fc(\"CallableFunction\",0,!0)||Hs,Gu=le&&Fc(\"NewableFunction\",0,!0)||Hs,Ws=Fc(\"String\",0,!0),hd=Fc(\"Number\",0,!0),vc=Fc(\"Boolean\",0,!0),nf=Fc(\"RegExp\",0,!0),Et=nu(Se),bn=nu(at),bn===Ki&&(bn=ls(void 0,q,Je,Je,Je)),jo=oAe(\"ReadonlyArray\",1)||$o,Ri=jo?rD(jo,[Se]):Et,ye=oAe(\"ThisType\",1),n)for(let a of n)for(let c of a)mp(c.parent)||y1(c);pr.forEach(({firstFile:a,secondFile:c,conflictingSymbols:u})=>{if(u.size<8)u.forEach(({isBlockScoped:p,firstFileLocations:h,secondFileLocations:T},k)=>{let O=p?_.Cannot_redeclare_block_scoped_variable_0:_.Duplicate_identifier_0;for(let H of h)Ml(H,O,k,T);for(let H of T)Ml(H,O,k,h)});else{let p=lo(u.keys()).join(\", \");Lo.add(Ao(hr(a,_.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0,p),hr(c,_.Conflicts_are_in_this_file))),Lo.add(Ao(hr(c,_.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0,p),hr(a,_.Conflicts_are_in_this_file)))}}),pr=void 0}function Hc(n,a){if((l&a)!==a&&Y.importHelpers){let c=Gn(n);if(aS(c,Y)&&!(n.flags&16777216)){let u=vrt(c,n);if(u!==Ht){let p=a&~l;for(let h=1;h<=16777216;h<<=1)if(p&h)for(let T of yrt(h)){if(s.has(T))continue;s.add(T);let k=yd(u.exports,Bs(T),111551);k?h&524288?vt(Xb(k),O=>xd(O)>3)||Fe(n,_.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0,_b,T,4):h&1048576?vt(Xb(k),O=>xd(O)>4)||Fe(n,_.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0,_b,T,5):h&1024&&(vt(Xb(k),O=>xd(O)>2)||Fe(n,_.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0,_b,T,3)):Fe(n,_.This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0,_b,T)}}l|=a}}}function yrt(n){switch(n){case 1:return[\"__extends\"];case 2:return[\"__assign\"];case 4:return[\"__rest\"];case 8:return $?[\"__decorate\"]:[\"__esDecorate\",\"__runInitializers\"];case 16:return[\"__metadata\"];case 32:return[\"__param\"];case 64:return[\"__awaiter\"];case 128:return[\"__generator\"];case 256:return[\"__values\"];case 512:return[\"__read\"];case 1024:return[\"__spreadArray\"];case 2048:return[\"__await\"];case 4096:return[\"__asyncGenerator\"];case 8192:return[\"__asyncDelegator\"];case 16384:return[\"__asyncValues\"];case 32768:return[\"__exportStar\"];case 65536:return[\"__importStar\"];case 131072:return[\"__importDefault\"];case 262144:return[\"__makeTemplateObject\"];case 524288:return[\"__classPrivateFieldGet\"];case 1048576:return[\"__classPrivateFieldSet\"];case 2097152:return[\"__classPrivateFieldIn\"];case 4194304:return[\"__createBinding\"];case 8388608:return[\"__setFunctionName\"];case 16777216:return[\"__propKey\"];default:return L.fail(\"Unrecognized helper\")}}function vrt(n,a){return f||(f=qc(n,_b,_.This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found,a)||Ht),f}function km(n){let a=Trt(n)||brt(n);if(a!==void 0)return a;if(ha(n)&&G0(n))return dl(n,_.Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters);let c,u,p,h,T,k=0,O=!1,H=!1;for(let J of n.modifiers)if(du(J)){if(M6($,n,n.parent,n.parent.parent)){if($&&(n.kind===174||n.kind===175)){let de=kT(n.parent.members,n);if(bf(de.firstAccessor)&&n===de.secondAccessor)return dl(n,_.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name)}}else return n.kind===171&&!Pf(n.body)?dl(n,_.A_decorator_can_only_decorate_a_method_implementation_not_an_overload):dl(n,_.Decorators_are_not_valid_here);if(k&-132098)return an(J,_.Decorators_are_not_valid_here);if(H&&k&126975){L.assertIsDefined(T);let de=Gn(J);return l0(de)?!1:(Ao(Fe(J,_.Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export),hr(T,_.Decorator_used_before_export_here)),!0)}k|=131072,k&126975?k&1&&(O=!0):H=!0,T??(T=J)}else{if(J.kind!==146){if(n.kind===168||n.kind===170)return an(J,_._0_modifier_cannot_appear_on_a_type_member,Xa(J.kind));if(n.kind===178&&(J.kind!==124||!Yr(n.parent)))return an(J,_._0_modifier_cannot_appear_on_an_index_signature,Xa(J.kind))}if(J.kind!==101&&J.kind!==145&&J.kind!==85&&n.kind===165)return an(J,_._0_modifier_cannot_appear_on_a_type_parameter,Xa(J.kind));switch(J.kind){case 85:if(n.kind!==263&&n.kind!==165)return an(n,_.A_class_member_cannot_have_the_0_keyword,Xa(85));let de=n.parent;if(n.kind===165&&!(Ds(de)||Yr(de)||Jm(de)||yL(de)||_2(de)||uO(de)||zm(de)))return an(J,_._0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class,Xa(J.kind));break;case 161:if(k&16384)return an(J,_._0_modifier_already_seen,\"override\");if(k&2)return an(J,_._0_modifier_cannot_be_used_with_1_modifier,\"override\",\"declare\");if(k&64)return an(J,_._0_modifier_must_precede_1_modifier,\"override\",\"readonly\");if(k&128)return an(J,_._0_modifier_must_precede_1_modifier,\"override\",\"accessor\");if(k&512)return an(J,_._0_modifier_must_precede_1_modifier,\"override\",\"async\");k|=16384,h=J;break;case 123:case 122:case 121:let Ae=Ud(gS(J.kind));if(k&28)return an(J,_.Accessibility_modifier_already_seen);if(k&16384)return an(J,_._0_modifier_must_precede_1_modifier,Ae,\"override\");if(k&32)return an(J,_._0_modifier_must_precede_1_modifier,Ae,\"static\");if(k&128)return an(J,_._0_modifier_must_precede_1_modifier,Ae,\"accessor\");if(k&64)return an(J,_._0_modifier_must_precede_1_modifier,Ae,\"readonly\");if(k&512)return an(J,_._0_modifier_must_precede_1_modifier,Ae,\"async\");if(n.parent.kind===265||n.parent.kind===308)return an(J,_._0_modifier_cannot_appear_on_a_module_or_namespace_element,Ae);if(k&256)return J.kind===121?an(J,_._0_modifier_cannot_be_used_with_1_modifier,Ae,\"abstract\"):an(J,_._0_modifier_must_precede_1_modifier,Ae,\"abstract\");if(xu(n))return an(J,_.An_accessibility_modifier_cannot_be_used_with_a_private_identifier);k|=gS(J.kind);break;case 124:if(k&32)return an(J,_._0_modifier_already_seen,\"static\");if(k&64)return an(J,_._0_modifier_must_precede_1_modifier,\"static\",\"readonly\");if(k&512)return an(J,_._0_modifier_must_precede_1_modifier,\"static\",\"async\");if(k&128)return an(J,_._0_modifier_must_precede_1_modifier,\"static\",\"accessor\");if(n.parent.kind===265||n.parent.kind===308)return an(J,_._0_modifier_cannot_appear_on_a_module_or_namespace_element,\"static\");if(n.kind===166)return an(J,_._0_modifier_cannot_appear_on_a_parameter,\"static\");if(k&256)return an(J,_._0_modifier_cannot_be_used_with_1_modifier,\"static\",\"abstract\");if(k&16384)return an(J,_._0_modifier_must_precede_1_modifier,\"static\",\"override\");k|=32,c=J;break;case 127:if(k&128)return an(J,_._0_modifier_already_seen,\"accessor\");if(k&64)return an(J,_._0_modifier_cannot_be_used_with_1_modifier,\"accessor\",\"readonly\");if(k&2)return an(J,_._0_modifier_cannot_be_used_with_1_modifier,\"accessor\",\"declare\");if(n.kind!==169)return an(J,_.accessor_modifier_can_only_appear_on_a_property_declaration);k|=128;break;case 146:if(k&64)return an(J,_._0_modifier_already_seen,\"readonly\");if(n.kind!==169&&n.kind!==168&&n.kind!==178&&n.kind!==166)return an(J,_.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);if(k&128)return an(J,_._0_modifier_cannot_be_used_with_1_modifier,\"readonly\",\"accessor\");k|=64;break;case 93:if(Y.verbatimModuleSyntax&&!(n.flags&16777216)&&n.kind!==262&&n.kind!==261&&n.kind!==264&&n.parent.kind===308&&(ie===1||Gn(n).impliedNodeFormat===1))return an(J,_.A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled);if(k&1)return an(J,_._0_modifier_already_seen,\"export\");if(k&2)return an(J,_._0_modifier_must_precede_1_modifier,\"export\",\"declare\");if(k&256)return an(J,_._0_modifier_must_precede_1_modifier,\"export\",\"abstract\");if(k&512)return an(J,_._0_modifier_must_precede_1_modifier,\"export\",\"async\");if(Yr(n.parent))return an(J,_._0_modifier_cannot_appear_on_class_elements_of_this_kind,\"export\");if(n.kind===166)return an(J,_._0_modifier_cannot_appear_on_a_parameter,\"export\");k|=1;break;case 88:let xe=n.parent.kind===308?n.parent:n.parent.parent;if(xe.kind===264&&!lu(xe))return an(J,_.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);if(k&1){if(O)return an(T,_.Decorators_are_not_valid_here)}else return an(J,_._0_modifier_must_precede_1_modifier,\"export\",\"default\");k|=1024;break;case 136:if(k&2)return an(J,_._0_modifier_already_seen,\"declare\");if(k&512)return an(J,_._0_modifier_cannot_be_used_in_an_ambient_context,\"async\");if(k&16384)return an(J,_._0_modifier_cannot_be_used_in_an_ambient_context,\"override\");if(Yr(n.parent)&&!Na(n))return an(J,_._0_modifier_cannot_appear_on_class_elements_of_this_kind,\"declare\");if(n.kind===166)return an(J,_._0_modifier_cannot_appear_on_a_parameter,\"declare\");if(n.parent.flags&16777216&&n.parent.kind===265)return an(J,_.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);if(xu(n))return an(J,_._0_modifier_cannot_be_used_with_a_private_identifier,\"declare\");if(k&128)return an(J,_._0_modifier_cannot_be_used_with_1_modifier,\"declare\",\"accessor\");k|=2,u=J;break;case 126:if(k&256)return an(J,_._0_modifier_already_seen,\"abstract\");if(n.kind!==260&&n.kind!==182){if(n.kind!==171&&n.kind!==169&&n.kind!==174&&n.kind!==175)return an(J,_.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);if(!(n.parent.kind===260&&Mr(n.parent,256)))return an(J,_.Abstract_methods_can_only_appear_within_an_abstract_class);if(k&32)return an(J,_._0_modifier_cannot_be_used_with_1_modifier,\"static\",\"abstract\");if(k&8)return an(J,_._0_modifier_cannot_be_used_with_1_modifier,\"private\",\"abstract\");if(k&512&&p)return an(p,_._0_modifier_cannot_be_used_with_1_modifier,\"async\",\"abstract\");if(k&16384)return an(J,_._0_modifier_must_precede_1_modifier,\"abstract\",\"override\");if(k&128)return an(J,_._0_modifier_must_precede_1_modifier,\"abstract\",\"accessor\")}if(zl(n)&&n.name.kind===80)return an(J,_._0_modifier_cannot_be_used_with_a_private_identifier,\"abstract\");k|=256;break;case 132:if(k&512)return an(J,_._0_modifier_already_seen,\"async\");if(k&2||n.parent.flags&16777216)return an(J,_._0_modifier_cannot_be_used_in_an_ambient_context,\"async\");if(n.kind===166)return an(J,_._0_modifier_cannot_appear_on_a_parameter,\"async\");if(k&256)return an(J,_._0_modifier_cannot_be_used_with_1_modifier,\"async\",\"abstract\");k|=512,p=J;break;case 101:case 145:let tt=J.kind===101?32768:65536,It=J.kind===101?\"in\":\"out\";if(n.kind!==165||!(ku(n.parent)||Yr(n.parent)||Ep(n.parent)))return an(J,_._0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias,It);if(k&tt)return an(J,_._0_modifier_already_seen,It);if(tt&32768&&k&65536)return an(J,_._0_modifier_must_precede_1_modifier,\"in\",\"out\");k|=tt;break}}return n.kind===173?k&32?an(c,_._0_modifier_cannot_appear_on_a_constructor_declaration,\"static\"):k&16384?an(h,_._0_modifier_cannot_appear_on_a_constructor_declaration,\"override\"):k&512?an(p,_._0_modifier_cannot_appear_on_a_constructor_declaration,\"async\"):!1:(n.kind===269||n.kind===268)&&k&2?an(u,_.A_0_modifier_cannot_be_used_with_an_import_declaration,\"declare\"):n.kind===166&&k&16476&&La(n.name)?an(n,_.A_parameter_property_may_not_be_declared_using_a_binding_pattern):n.kind===166&&k&16476&&n.dotDotDotToken?an(n,_.A_parameter_property_cannot_be_declared_using_a_rest_parameter):k&512?xrt(n,p):!1}function brt(n){if(!n.modifiers)return!1;let a=Ert(n);return a&&dl(a,_.Modifiers_cannot_appear_here)}function Xie(n,a){let c=wr(n.modifiers,Ha);return c&&c.kind!==a?c:void 0}function Ert(n){switch(n.kind){case 174:case 175:case 173:case 169:case 168:case 171:case 170:case 178:case 264:case 269:case 268:case 275:case 274:case 215:case 216:case 166:case 165:return;case 172:case 299:case 300:case 267:case 279:return wr(n.modifiers,Ha);default:if(n.parent.kind===265||n.parent.kind===308)return;switch(n.kind){case 259:return Xie(n,132);case 260:case 182:return Xie(n,126);case 228:case 261:case 240:case 262:return wr(n.modifiers,Ha);case 263:return Xie(n,85);default:L.assertNever(n)}}}function Trt(n){let a=Srt(n);return a&&dl(a,_.Decorators_are_not_valid_here)}function Srt(n){return aJ(n)?wr(n.modifiers,du):void 0}function xrt(n,a){switch(n.kind){case 171:case 259:case 215:case 216:return!1}return an(a,_._0_modifier_cannot_be_used_here,\"async\")}function B1(n,a=_.Trailing_comma_not_allowed){return n&&n.hasTrailingComma?u0(n[0],n.end-1,1,a):!1}function rke(n,a){if(n&&n.length===0){let c=n.pos-1,u=xo(a.text,n.end)+1;return u0(a,c,u-c,_.Type_parameter_list_cannot_be_empty)}return!1}function Art(n){let a=!1,c=n.length;for(let u=0;u<c;u++){let p=n[u];if(p.dotDotDotToken){if(u!==c-1)return an(p.dotDotDotToken,_.A_rest_parameter_must_be_last_in_a_parameter_list);if(p.flags&16777216||B1(n,_.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma),p.questionToken)return an(p.questionToken,_.A_rest_parameter_cannot_be_optional);if(p.initializer)return an(p.name,_.A_rest_parameter_cannot_have_an_initializer)}else if(Qk(p)){if(a=!0,p.questionToken&&p.initializer)return an(p.name,_.Parameter_cannot_have_question_mark_and_initializer)}else if(a&&!p.initializer)return an(p.name,_.A_required_parameter_cannot_follow_an_optional_parameter)}}function Crt(n){return Pr(n,a=>!!a.initializer||La(a.name)||Fm(a))}function Irt(n){if(R>=3){let a=n.body&&Va(n.body)&&tJ(n.body.statements);if(a){let c=Crt(n.parameters);if(Fn(c)){mn(c,p=>{Ao(Fe(p,_.This_parameter_is_not_allowed_with_use_strict_directive),hr(a,_.use_strict_directive_used_here))});let u=c.map((p,h)=>h===0?hr(p,_.Non_simple_parameter_declared_here):hr(p,_.and_here));return Ao(Fe(a,_.use_strict_directive_cannot_be_used_with_non_simple_parameter_list),...u),!0}}}return!1}function AU(n){let a=Gn(n);return km(n)||rke(n.typeParameters,a)||Art(n.parameters)||krt(n,a)||Ds(n)&&Irt(n)}function Lrt(n){let a=Gn(n);return Nrt(n)||rke(n.typeParameters,a)}function krt(n,a){if(!xs(n))return!1;n.typeParameters&&!(Fn(n.typeParameters)>1||n.typeParameters.hasTrailingComma||n.typeParameters[0].constraint)&&a&&$c(a.fileName,[\".mts\",\".cts\"])&&an(n.typeParameters[0],_.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_constraint);let{equalsGreaterThanToken:c}=n,u=Gs(a,c.pos).line,p=Gs(a,c.end).line;return u!==p&&an(c,_.Line_terminator_not_permitted_before_arrow)}function Drt(n){let a=n.parameters[0];if(n.parameters.length!==1)return an(a?a.name:n,_.An_index_signature_must_have_exactly_one_parameter);if(B1(n.parameters,_.An_index_signature_cannot_have_a_trailing_comma),a.dotDotDotToken)return an(a.dotDotDotToken,_.An_index_signature_cannot_have_a_rest_parameter);if(n4(a))return an(a.name,_.An_index_signature_parameter_cannot_have_an_accessibility_modifier);if(a.questionToken)return an(a.questionToken,_.An_index_signature_parameter_cannot_have_a_question_mark);if(a.initializer)return an(a.name,_.An_index_signature_parameter_cannot_have_an_initializer);if(!a.type)return an(a.name,_.An_index_signature_parameter_must_have_a_type_annotation);let c=$r(a.type);return yh(c,u=>!!(u.flags&8576))||SC(c)?an(a.name,_.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead):Im(c,KG)?n.type?!1:an(n,_.An_index_signature_must_have_a_type_annotation):an(a.name,_.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type)}function wrt(n){return km(n)||Drt(n)}function Rrt(n,a){if(a&&a.length===0){let c=Gn(n),u=a.pos-1,p=xo(c.text,a.end)+1;return u0(c,u,p-u,_.Type_argument_list_cannot_be_empty)}return!1}function a8(n,a){return B1(a)||Rrt(n,a)}function Ort(n){return n.questionDotToken||n.flags&32?an(n.template,_.Tagged_template_expressions_are_not_permitted_in_an_optional_chain):!1}function ike(n){let a=n.types;if(B1(a))return!0;if(a&&a.length===0){let c=Xa(n.token);return u0(n,a.pos,0,_._0_list_cannot_be_empty,c)}return vt(a,ake)}function ake(n){return Vg(n)&&gL(n.expression)&&n.typeArguments?an(n,_.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments):a8(n,n.typeArguments)}function Nrt(n){let a=!1,c=!1;if(!km(n)&&n.heritageClauses)for(let u of n.heritageClauses){if(u.token===94){if(a)return dl(u,_.extends_clause_already_seen);if(c)return dl(u,_.extends_clause_must_precede_implements_clause);if(u.types.length>1)return dl(u.types[1],_.Classes_can_only_extend_a_single_class);a=!0}else{if(L.assert(u.token===117),c)return dl(u,_.implements_clause_already_seen);c=!0}ike(u)}}function Prt(n){let a=!1;if(n.heritageClauses)for(let c of n.heritageClauses){if(c.token===94){if(a)return dl(c,_.extends_clause_already_seen);a=!0}else return L.assert(c.token===117),dl(c,_.Interface_declaration_cannot_have_implements_clause);ike(c)}return!1}function CU(n){if(n.kind!==164)return!1;let a=n;return a.expression.kind===223&&a.expression.operatorToken.kind===27?an(a.expression,_.A_comma_expression_is_not_allowed_in_a_computed_property_name):!1}function Yie(n){if(n.asteriskToken){if(L.assert(n.kind===259||n.kind===215||n.kind===171),n.flags&16777216)return an(n.asteriskToken,_.Generators_are_not_allowed_in_an_ambient_context);if(!n.body)return an(n.asteriskToken,_.An_overload_signature_cannot_be_declared_as_a_generator)}}function $ie(n,a){return!!n&&an(n,a)}function oke(n,a){return!!n&&an(n,a)}function Mrt(n,a){let c=new Map;for(let u of n.properties){if(u.kind===301){if(a){let T=vs(u.expression);if(fu(T)||rs(T))return an(u.expression,_.A_rest_element_cannot_contain_a_binding_pattern)}continue}let p=u.name;if(p.kind===164&&CU(p),u.kind===300&&!a&&u.objectAssignmentInitializer&&an(u.equalsToken,_.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern),p.kind===80&&an(p,_.Private_identifiers_are_not_allowed_outside_class_bodies),g_(u)&&u.modifiers)for(let T of u.modifiers)Ha(T)&&(T.kind!==132||u.kind!==171)&&an(T,_._0_modifier_cannot_be_used_here,Qc(T));else if(cde(u)&&u.modifiers)for(let T of u.modifiers)Ha(T)&&an(T,_._0_modifier_cannot_be_used_here,Qc(T));let h;switch(u.kind){case 300:case 299:oke(u.exclamationToken,_.A_definite_assignment_assertion_is_not_permitted_in_this_context),$ie(u.questionToken,_.An_object_member_cannot_be_declared_optional),p.kind===8&&eae(p),h=4;break;case 171:h=8;break;case 174:h=1;break;case 175:h=2;break;default:throw L.assertNever(u,\"Unexpected syntax kind:\"+u.kind)}if(!a){let T=M0(p);if(T===void 0)continue;let k=c.get(T);if(!k)c.set(T,h);else if(h&8&&k&8)an(p,_.Duplicate_identifier_0,Qc(p));else if(h&4&&k&4)an(p,_.An_object_literal_cannot_have_multiple_properties_with_the_same_name,Qc(p));else if(h&3&&k&3)if(k!==3&&h!==k)c.set(T,h|k);else return an(p,_.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);else return an(p,_.An_object_literal_cannot_have_property_and_accessor_with_the_same_name)}}}function Frt(n){Grt(n.tagName),a8(n,n.typeArguments);let a=new Map;for(let c of n.attributes.properties){if(c.kind===290)continue;let{name:u,initializer:p}=c;if(!a.get(u.escapedText))a.set(u.escapedText,!0);else return an(u,_.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);if(p&&p.kind===291&&!p.expression)return an(p,_.JSX_attributes_must_only_be_assigned_a_non_empty_expression)}}function Grt(n){if(br(n)){let c=n;do{let p=a(c.name);if(p)return p;c=c.expression}while(br(c));let u=a(c);if(u)return u}function a(c){if(Re(c)&&vr(c).indexOf(\":\")!==-1)return an(c,_.JSX_property_access_expressions_cannot_include_JSX_namespace_names)}}function Brt(n){if(n.expression&&wL(n.expression))return an(n.expression,_.JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array)}function ske(n){if(vh(n))return!0;if(n.kind===247&&n.awaitModifier&&!(n.flags&32768)){let a=Gn(n);if(O6(n)){if(!l0(a))switch(aS(a,Y)||Lo.add(hr(n.awaitModifier,_.for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module)),ie){case 100:case 199:if(a.impliedNodeFormat===1){Lo.add(hr(n.awaitModifier,_.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level));break}case 7:case 99:case 4:if(R>=4)break;default:Lo.add(hr(n.awaitModifier,_.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher));break}}else if(!l0(a)){let c=hr(n.awaitModifier,_.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules),u=Xd(n);if(u&&u.kind!==173){L.assert((pl(u)&2)===0,\"Enclosing function should never be an async function.\");let p=hr(u,_.Did_you_mean_to_mark_this_function_as_async);Ao(c,p)}return Lo.add(c),!0}return!1}if(_O(n)&&!(n.flags&32768)&&Re(n.initializer)&&n.initializer.escapedText===\"async\")return an(n.initializer,_.The_left_hand_side_of_a_for_of_statement_may_not_be_async),!1;if(n.initializer.kind===258){let a=n.initializer;if(!Zie(a)){let c=a.declarations;if(!c.length)return!1;if(c.length>1){let p=n.kind===246?_.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement:_.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;return dl(a.declarations[1],p)}let u=c[0];if(u.initializer){let p=n.kind===246?_.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer:_.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;return an(u.name,p)}if(u.type){let p=n.kind===246?_.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation:_.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;return an(u,p)}}}return!1}function Urt(n){if(!(n.flags&16777216)&&n.parent.kind!==184&&n.parent.kind!==261){if(R<1)return an(n.name,_.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);if(R<2&&pi(n.name))return an(n.name,_.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);if(n.body===void 0&&!Mr(n,256))return u0(n,n.end-1,1,_._0_expected,\"{\")}if(n.body){if(Mr(n,256))return an(n,_.An_abstract_accessor_cannot_have_an_implementation);if(n.parent.kind===184||n.parent.kind===261)return an(n.body,_.An_implementation_cannot_be_declared_in_ambient_contexts)}if(n.typeParameters)return an(n.name,_.An_accessor_cannot_have_type_parameters);if(!Vrt(n))return an(n.name,n.kind===174?_.A_get_accessor_cannot_have_parameters:_.A_set_accessor_must_have_exactly_one_parameter);if(n.kind===175){if(n.type)return an(n.name,_.A_set_accessor_cannot_have_a_return_type_annotation);let a=L.checkDefined(VI(n),\"Return value does not match parameter count assertion.\");if(a.dotDotDotToken)return an(a.dotDotDotToken,_.A_set_accessor_cannot_have_rest_parameter);if(a.questionToken)return an(a.questionToken,_.A_set_accessor_cannot_have_an_optional_parameter);if(a.initializer)return an(n.name,_.A_set_accessor_parameter_cannot_have_an_initializer)}return!1}function Vrt(n){return Qie(n)||n.parameters.length===(n.kind===174?0:1)}function Qie(n){if(n.parameters.length===(n.kind===174?1:2))return F0(n)}function jrt(n){if(n.operator===156){if(n.type.kind!==153)return an(n.type,_._0_expected,Xa(153));let a=dR(n.parent);if(Yn(a)&&UT(a)){let c=dS(a);c&&(a=HA(c)||c)}switch(a.kind){case 257:let c=a;if(c.name.kind!==79)return an(n,_.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name);if(!L6(c))return an(n,_.unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement);if(!(c.parent.flags&2))return an(a.name,_.A_variable_whose_type_is_a_unique_symbol_type_must_be_const);break;case 169:if(!Ca(a)||!jI(a))return an(a.name,_.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly);break;case 168:if(!Mr(a,64))return an(a.name,_.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly);break;default:return an(n,_.unique_symbol_types_are_not_allowed_here)}}else if(n.operator===146&&n.type.kind!==185&&n.type.kind!==186)return dl(n,_.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types,Xa(153))}function JC(n,a){if(hJe(n))return an(n,a)}function cke(n){if(AU(n))return!0;if(n.kind===171){if(n.parent.kind===207){if(n.modifiers&&!(n.modifiers.length===1&&Vo(n.modifiers).kind===132))return dl(n,_.Modifiers_cannot_appear_here);if($ie(n.questionToken,_.An_object_member_cannot_be_declared_optional))return!0;if(oke(n.exclamationToken,_.A_definite_assignment_assertion_is_not_permitted_in_this_context))return!0;if(n.body===void 0)return u0(n,n.end-1,1,_._0_expected,\"{\")}if(Yie(n))return!0}if(Yr(n.parent)){if(R<2&&pi(n.name))return an(n.name,_.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);if(n.flags&16777216)return JC(n.name,_.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);if(n.kind===171&&!n.body)return JC(n.name,_.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)}else{if(n.parent.kind===261)return JC(n.name,_.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);if(n.parent.kind===184)return JC(n.name,_.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)}}function Hrt(n){let a=n;for(;a;){if(SA(a))return an(n,_.Jump_target_cannot_cross_function_boundary);switch(a.kind){case 253:if(n.label&&a.label.escapedText===n.label.escapedText)return n.kind===248&&!Wy(a.statement,!0)?an(n,_.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement):!1;break;case 252:if(n.kind===249&&!n.label)return!1;break;default:if(Wy(a,!1)&&!n.label)return!1;break}a=a.parent}if(n.label){let c=n.kind===249?_.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement:_.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;return an(n,c)}else{let c=n.kind===249?_.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement:_.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;return an(n,c)}}function Wrt(n){if(n.dotDotDotToken){let a=n.parent.elements;if(n!==To(a))return an(n,_.A_rest_element_must_be_last_in_a_destructuring_pattern);if(B1(a,_.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma),n.propertyName)return an(n.name,_.A_rest_element_cannot_have_a_property_name)}if(n.dotDotDotToken&&n.initializer)return u0(n,n.initializer.pos-1,1,_.A_rest_element_cannot_have_an_initializer)}function lke(n){return yf(n)||n.kind===221&&n.operator===40&&n.operand.kind===8}function zrt(n){return n.kind===9||n.kind===221&&n.operator===40&&n.operand.kind===9}function Jrt(n){if((br(n)||Vs(n)&&lke(n.argumentExpression))&&bc(n.expression))return!!(Ic(n).flags&1056)}function uke(n){let a=n.initializer;if(a){let c=!(lke(a)||Jrt(a)||a.kind===110||a.kind===95||zrt(a));if((x6(n)||wi(n)&&kh(n))&&!n.type){if(c)return an(a,_.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference)}else return an(a,_.Initializers_are_not_allowed_in_ambient_contexts)}}function Krt(n){if(n.parent.parent.kind!==246&&n.parent.parent.kind!==247){if(n.flags&16777216)uke(n);else if(!n.initializer){if(La(n.name)&&!La(n.parent))return an(n,_.A_destructuring_declaration_must_have_an_initializer);if(kh(n))return an(n,_.const_declarations_must_be_initialized)}}if(n.exclamationToken&&(n.parent.parent.kind!==240||!n.type||n.initializer||n.flags&16777216)){let c=n.initializer?_.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions:n.type?_.A_definite_assignment_assertion_is_not_permitted_in_this_context:_.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations;return an(n.exclamationToken,c)}return(ie<5||Gn(n).impliedNodeFormat===1)&&ie!==4&&!(n.parent.parent.flags&16777216)&&Mr(n.parent.parent,1)&&dke(n.name),(II(n)||kh(n))&&fke(n.name)}function dke(n){if(n.kind===79){if(vr(n)===\"__esModule\")return Yrt(\"noEmit\",n,_.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules)}else{let a=n.elements;for(let c of a)if(!ol(c))return dke(c.name)}return!1}function fke(n){if(n.kind===79){if(n.escapedText===\"let\")return an(n,_.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations)}else{let a=n.elements;for(let c of a)ol(c)||fke(c.name)}return!1}function Zie(n){let a=n.declarations;return B1(n.declarations)?!0:n.declarations.length?!1:u0(n,a.pos,a.end-a.pos,_.Variable_declaration_list_cannot_be_empty)}function _ke(n){switch(n.kind){case 242:case 243:case 244:case 251:case 245:case 246:case 247:return!1;case 253:return _ke(n.parent)}return!0}function qrt(n){if(!_ke(n.parent)){if(II(n.declarationList))return an(n,_.let_declarations_can_only_be_declared_inside_a_block);if(kh(n.declarationList))return an(n,_.const_declarations_can_only_be_declared_inside_a_block)}}function Xrt(n){let a=n.name.escapedText;switch(n.keywordToken){case 103:if(a!==\"target\")return an(n.name,_._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2,n.name.escapedText,Xa(n.keywordToken),\"target\");break;case 100:if(a!==\"meta\")return an(n.name,_._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2,n.name.escapedText,Xa(n.keywordToken),\"meta\");break}}function l0(n){return n.parseDiagnostics.length>0}function dl(n,a,c,u,p){let h=Gn(n);if(!l0(h)){let T=Pg(h,n.pos);return Lo.add(al(h,T.start,T.length,a,c,u,p)),!0}return!1}function u0(n,a,c,u,p,h,T){let k=Gn(n);return l0(k)?!1:(Lo.add(al(k,a,c,u,p,h,T)),!0)}function Yrt(n,a,c,u,p,h){let T=Gn(a);return l0(T)?!1:(Ev(n,a,c,u,p,h),!0)}function an(n,a,c,u,p){let h=Gn(n);return l0(h)?!1:(Lo.add(hr(n,a,c,u,p)),!0)}function $rt(n){let a=Yn(n)?t4(n):void 0,c=n.typeParameters||a&&Sl(a);if(c){let u=c.pos===c.end?c.pos:xo(Gn(n).text,c.pos);return u0(n,u,c.end-u,_.Type_parameters_cannot_appear_on_a_constructor_declaration)}}function Qrt(n){let a=n.type||U_(n);if(a)return an(a,_.Type_annotation_cannot_appear_on_a_constructor_declaration)}function Zrt(n){if(ts(n.name)&&ar(n.name.expression)&&n.name.expression.operatorToken.kind===101)return an(n.parent.members[0],_.A_mapped_type_may_not_declare_properties_or_methods);if(Yr(n.parent)){if(yo(n.name)&&n.name.text===\"constructor\")return an(n.name,_.Classes_may_not_have_a_field_named_constructor);if(JC(n.name,_.A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_symbol_type))return!0;if(R<2&&pi(n.name))return an(n.name,_.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);if(R<2&&Id(n))return an(n.name,_.Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher);if(Id(n)&&$ie(n.questionToken,_.An_accessor_property_cannot_be_declared_optional))return!0}else if(n.parent.kind===261){if(JC(n.name,_.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type))return!0;if(L.assertNode(n,$d),n.initializer)return an(n.initializer,_.An_interface_property_cannot_have_an_initializer)}else if(Rd(n.parent)){if(JC(n.name,_.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type))return!0;if(L.assertNode(n,$d),n.initializer)return an(n.initializer,_.A_type_literal_property_cannot_have_an_initializer)}if(n.flags&16777216&&uke(n),Na(n)&&n.exclamationToken&&(!Yr(n.parent)||!n.type||n.initializer||n.flags&16777216||Ca(n)||B0(n))){let a=n.initializer?_.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions:n.type?_.A_definite_assignment_assertion_is_not_permitted_in_this_context:_.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations;return an(n.exclamationToken,a)}}function eit(n){return n.kind===261||n.kind===262||n.kind===269||n.kind===268||n.kind===275||n.kind===274||n.kind===267||Mr(n,1027)?!1:dl(n,_.Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier)}function tit(n){for(let a of n.statements)if((Kl(a)||a.kind===240)&&eit(a))return!0;return!1}function nit(n){return!!(n.flags&16777216)&&tit(n)}function vh(n){if(n.flags&16777216){if(!Rr(n).hasReportedStatementInAmbientContext&&(Ia(n.parent)||rb(n.parent)))return Rr(n).hasReportedStatementInAmbientContext=dl(n,_.An_implementation_cannot_be_declared_in_ambient_contexts);if(n.parent.kind===238||n.parent.kind===265||n.parent.kind===308){let c=Rr(n.parent);if(!c.hasReportedStatementInAmbientContext)return c.hasReportedStatementInAmbientContext=dl(n,_.Statements_are_not_allowed_in_ambient_contexts)}}return!1}function eae(n){if(n.numericLiteralFlags&32){let a;if(R>=1?a=_.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0:TH(n,198)?a=_.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0:TH(n,302)&&(a=_.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0),a){let c=tv(n.parent)&&n.parent.operator===40,u=(c?\"-\":\"\")+\"0o\"+n.text;return an(c?n.parent:n,a,u)}}return rit(n),!1}function rit(n){let a=Qc(n).indexOf(\".\")!==-1,c=n.numericLiteralFlags&16;a||c||+n.text<=2**53-1||ey(!1,hr(n,_.Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers))}function iit(n){return!!(!(mb(n.parent)||tv(n.parent)&&mb(n.parent.parent))&&R<7&&an(n,_.BigInt_literals_are_not_available_when_targeting_lower_than_ES2020))}function ait(n,a,c,u,p){let h=Gn(n);if(!l0(h)){let T=Pg(h,n.pos);return Lo.add(al(h,wl(T),0,a,c,u,p)),!0}return!1}function oit(){return Go||(Go=[],Ne.forEach((n,a)=>{uF.test(a)&&Go.push(n)})),Go}function sit(n){var a;return n.isTypeOnly&&n.name&&n.namedBindings?an(n,_.A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both):n.isTypeOnly&&((a=n.namedBindings)==null?void 0:a.kind)===272?pke(n.namedBindings):!1}function pke(n){return!!mn(n.elements,a=>{if(a.isTypeOnly)return dl(a,a.kind===273?_.The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement:_.The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement)})}function cit(n){if(Y.verbatimModuleSyntax&&ie===1)return an(n,_.ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled);if(ie===5)return an(n,_.Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext);if(n.typeArguments)return an(n,_.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments);let a=n.arguments;if(ie!==99&&ie!==199&&ie!==100&&(B1(a),a.length>1)){let u=a[1];return an(u,_.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext)}if(a.length===0||a.length>2)return an(n,_.Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments);let c=wr(a,Km);return c?an(c,_.Argument_of_dynamic_import_cannot_be_spread_element):!1}function lit(n,a){let c=Ur(n);if(c&20&&a.flags&1048576)return wr(a.types,u=>{if(u.flags&524288){let p=c&Ur(u);if(p&4)return n.target===u.target;if(p&16)return!!n.aliasSymbol&&n.aliasSymbol===u.aliasSymbol}return!1})}function uit(n,a){if(Ur(n)&128&&yh(a,Kv))return wr(a.types,c=>!Kv(c))}function dit(n,a){let c=0;if(xa(n,c).length>0||(c=1,xa(n,c).length>0))return wr(a.types,p=>xa(p,c).length>0)}function fit(n,a){let c;if(!(n.flags&406978556)){let u=0;for(let p of a.types)if(!(p.flags&406978556)){let h=so([Gp(n),Gp(p)]);if(h.flags&4194304)return p;if(N_(h)||h.flags&1048576){let T=h.flags&1048576?Oy(h.types,N_):1;T>=u&&(c=p,u=T)}}}return c}function _it(n){if(Js(n,67108864)){let a=jc(n,c=>!(c.flags&134348796));if(!(a.flags&131072))return a}return n}function mke(n,a,c,u){if(a.flags&1048576&&n.flags&2621440){let p=O2e(a,n);if(p)return p;let h=Jo(n);if(h){let T=R2e(h,a);if(T)return Wne(a,on(T,k=>[()=>zn(k),k.escapedName]),c,void 0,u)}}}}function mPe(e){return!rb(e)}function D_e(e){return e.kind!==259&&e.kind!==171||!!e.body}function w_e(e){switch(e.parent.kind){case 273:case 278:return Re(e);default:return Rh(e)}}function R_e(e){switch(e){case 0:return\"yieldType\";case 1:return\"returnType\";case 2:return\"nextType\"}}function Xl(e){return!!(e.flags&1)}function _K(e){return!!(e.flags&2)}function hPe(e){return{getCommonSourceDirectory:e.getCommonSourceDirectory?()=>e.getCommonSourceDirectory():()=>\"\",getCurrentDirectory:()=>e.getCurrentDirectory(),getSymlinkCache:ho(e,e.getSymlinkCache),getPackageJsonInfoCache:()=>{var t;return(t=e.getPackageJsonInfoCache)==null?void 0:t.call(e)},useCaseSensitiveFileNames:ho(e,e.useCaseSensitiveFileNames),redirectTargetsMap:e.redirectTargetsMap,getProjectReferenceRedirect:t=>e.getProjectReferenceRedirect(t),isSourceOfProjectReferenceRedirect:t=>e.isSourceOfProjectReferenceRedirect(t),fileExists:t=>e.fileExists(t),getFileIncludeReasons:()=>e.getFileIncludeReasons(),readFile:e.readFile?t=>e.readFile(t):void 0}}var uF,nN,pK,mK,hK,gK,dF,fF,_F,pF,O_e,rN,yK,Qd,iN,gPe=gt({\"src/compiler/checker.ts\"(){\"use strict\";fa(),dK(),E0(),uF=/^\".+\"$/,nN=\"(anonymous)\",pK=1,mK=1,hK=1,gK=1,dF=(e=>(e[e.None=0]=\"None\",e[e.TypeofEQString=1]=\"TypeofEQString\",e[e.TypeofEQNumber=2]=\"TypeofEQNumber\",e[e.TypeofEQBigInt=4]=\"TypeofEQBigInt\",e[e.TypeofEQBoolean=8]=\"TypeofEQBoolean\",e[e.TypeofEQSymbol=16]=\"TypeofEQSymbol\",e[e.TypeofEQObject=32]=\"TypeofEQObject\",e[e.TypeofEQFunction=64]=\"TypeofEQFunction\",e[e.TypeofEQHostObject=128]=\"TypeofEQHostObject\",e[e.TypeofNEString=256]=\"TypeofNEString\",e[e.TypeofNENumber=512]=\"TypeofNENumber\",e[e.TypeofNEBigInt=1024]=\"TypeofNEBigInt\",e[e.TypeofNEBoolean=2048]=\"TypeofNEBoolean\",e[e.TypeofNESymbol=4096]=\"TypeofNESymbol\",e[e.TypeofNEObject=8192]=\"TypeofNEObject\",e[e.TypeofNEFunction=16384]=\"TypeofNEFunction\",e[e.TypeofNEHostObject=32768]=\"TypeofNEHostObject\",e[e.EQUndefined=65536]=\"EQUndefined\",e[e.EQNull=131072]=\"EQNull\",e[e.EQUndefinedOrNull=262144]=\"EQUndefinedOrNull\",e[e.NEUndefined=524288]=\"NEUndefined\",e[e.NENull=1048576]=\"NENull\",e[e.NEUndefinedOrNull=2097152]=\"NEUndefinedOrNull\",e[e.Truthy=4194304]=\"Truthy\",e[e.Falsy=8388608]=\"Falsy\",e[e.IsUndefined=16777216]=\"IsUndefined\",e[e.IsNull=33554432]=\"IsNull\",e[e.IsUndefinedOrNull=50331648]=\"IsUndefinedOrNull\",e[e.All=134217727]=\"All\",e[e.BaseStringStrictFacts=3735041]=\"BaseStringStrictFacts\",e[e.BaseStringFacts=12582401]=\"BaseStringFacts\",e[e.StringStrictFacts=16317953]=\"StringStrictFacts\",e[e.StringFacts=16776705]=\"StringFacts\",e[e.EmptyStringStrictFacts=12123649]=\"EmptyStringStrictFacts\",e[e.EmptyStringFacts=12582401]=\"EmptyStringFacts\",e[e.NonEmptyStringStrictFacts=7929345]=\"NonEmptyStringStrictFacts\",e[e.NonEmptyStringFacts=16776705]=\"NonEmptyStringFacts\",e[e.BaseNumberStrictFacts=3734786]=\"BaseNumberStrictFacts\",e[e.BaseNumberFacts=12582146]=\"BaseNumberFacts\",e[e.NumberStrictFacts=16317698]=\"NumberStrictFacts\",e[e.NumberFacts=16776450]=\"NumberFacts\",e[e.ZeroNumberStrictFacts=12123394]=\"ZeroNumberStrictFacts\",e[e.ZeroNumberFacts=12582146]=\"ZeroNumberFacts\",e[e.NonZeroNumberStrictFacts=7929090]=\"NonZeroNumberStrictFacts\",e[e.NonZeroNumberFacts=16776450]=\"NonZeroNumberFacts\",e[e.BaseBigIntStrictFacts=3734276]=\"BaseBigIntStrictFacts\",e[e.BaseBigIntFacts=12581636]=\"BaseBigIntFacts\",e[e.BigIntStrictFacts=16317188]=\"BigIntStrictFacts\",e[e.BigIntFacts=16775940]=\"BigIntFacts\",e[e.ZeroBigIntStrictFacts=12122884]=\"ZeroBigIntStrictFacts\",e[e.ZeroBigIntFacts=12581636]=\"ZeroBigIntFacts\",e[e.NonZeroBigIntStrictFacts=7928580]=\"NonZeroBigIntStrictFacts\",e[e.NonZeroBigIntFacts=16775940]=\"NonZeroBigIntFacts\",e[e.BaseBooleanStrictFacts=3733256]=\"BaseBooleanStrictFacts\",e[e.BaseBooleanFacts=12580616]=\"BaseBooleanFacts\",e[e.BooleanStrictFacts=16316168]=\"BooleanStrictFacts\",e[e.BooleanFacts=16774920]=\"BooleanFacts\",e[e.FalseStrictFacts=12121864]=\"FalseStrictFacts\",e[e.FalseFacts=12580616]=\"FalseFacts\",e[e.TrueStrictFacts=7927560]=\"TrueStrictFacts\",e[e.TrueFacts=16774920]=\"TrueFacts\",e[e.SymbolStrictFacts=7925520]=\"SymbolStrictFacts\",e[e.SymbolFacts=16772880]=\"SymbolFacts\",e[e.ObjectStrictFacts=7888800]=\"ObjectStrictFacts\",e[e.ObjectFacts=16736160]=\"ObjectFacts\",e[e.FunctionStrictFacts=7880640]=\"FunctionStrictFacts\",e[e.FunctionFacts=16728e3]=\"FunctionFacts\",e[e.VoidFacts=9830144]=\"VoidFacts\",e[e.UndefinedFacts=26607360]=\"UndefinedFacts\",e[e.NullFacts=42917664]=\"NullFacts\",e[e.EmptyObjectStrictFacts=83427327]=\"EmptyObjectStrictFacts\",e[e.EmptyObjectFacts=83886079]=\"EmptyObjectFacts\",e[e.UnknownFacts=83886079]=\"UnknownFacts\",e[e.AllTypeofNE=556800]=\"AllTypeofNE\",e[e.OrFactsMask=8256]=\"OrFactsMask\",e[e.AndFactsMask=134209471]=\"AndFactsMask\",e))(dF||{}),fF=new Map(Object.entries({string:256,number:512,bigint:1024,boolean:2048,symbol:4096,undefined:524288,object:8192,function:16384})),_F=(e=>(e[e.Normal=0]=\"Normal\",e[e.Contextual=1]=\"Contextual\",e[e.Inferential=2]=\"Inferential\",e[e.SkipContextSensitive=4]=\"SkipContextSensitive\",e[e.SkipGenericFunctions=8]=\"SkipGenericFunctions\",e[e.IsForSignatureHelp=16]=\"IsForSignatureHelp\",e[e.IsForStringLiteralArgumentCompletions=32]=\"IsForStringLiteralArgumentCompletions\",e[e.RestBindingElement=64]=\"RestBindingElement\",e))(_F||{}),pF=(e=>(e[e.None=0]=\"None\",e[e.BivariantCallback=1]=\"BivariantCallback\",e[e.StrictCallback=2]=\"StrictCallback\",e[e.IgnoreReturnTypes=4]=\"IgnoreReturnTypes\",e[e.StrictArity=8]=\"StrictArity\",e[e.StrictTopSignature=16]=\"StrictTopSignature\",e[e.Callback=3]=\"Callback\",e))(pF||{}),O_e=g8(D_e,mPe),rN=new Map(Object.entries({Uppercase:0,Lowercase:1,Capitalize:2,Uncapitalize:3})),yK=class{},(e=>{e.JSX=\"JSX\",e.IntrinsicElements=\"IntrinsicElements\",e.ElementClass=\"ElementClass\",e.ElementAttributesPropertyNameContainer=\"ElementAttributesProperty\",e.ElementChildrenAttributeNameContainer=\"ElementChildrenAttribute\",e.Element=\"Element\",e.IntrinsicAttributes=\"IntrinsicAttributes\",e.IntrinsicClassAttributes=\"IntrinsicClassAttributes\",e.LibraryManagedAttributes=\"LibraryManagedAttributes\"})(Qd||(Qd={})),iN=class{constructor(e,t,r){this.moduleResolverHost=void 0,this.inner=void 0,this.disableTrackSymbol=!1;for(var i;t instanceof iN;)t=t.inner;this.inner=t,this.moduleResolverHost=r,this.context=e,this.canTrackSymbol=!!((i=this.inner)!=null&&i.trackSymbol)}trackSymbol(e,t,r){var i;return(i=this.inner)!=null&&i.trackSymbol&&!this.disableTrackSymbol&&this.inner.trackSymbol(e,t,r)?(this.onDiagnosticReported(),!0):!1}reportInaccessibleThisError(){var e;(e=this.inner)!=null&&e.reportInaccessibleThisError&&(this.onDiagnosticReported(),this.inner.reportInaccessibleThisError())}reportPrivateInBaseOfClassExpression(e){var t;(t=this.inner)!=null&&t.reportPrivateInBaseOfClassExpression&&(this.onDiagnosticReported(),this.inner.reportPrivateInBaseOfClassExpression(e))}reportInaccessibleUniqueSymbolError(){var e;(e=this.inner)!=null&&e.reportInaccessibleUniqueSymbolError&&(this.onDiagnosticReported(),this.inner.reportInaccessibleUniqueSymbolError())}reportCyclicStructureError(){var e;(e=this.inner)!=null&&e.reportCyclicStructureError&&(this.onDiagnosticReported(),this.inner.reportCyclicStructureError())}reportLikelyUnsafeImportRequiredError(e){var t;(t=this.inner)!=null&&t.reportLikelyUnsafeImportRequiredError&&(this.onDiagnosticReported(),this.inner.reportLikelyUnsafeImportRequiredError(e))}reportTruncationError(){var e;(e=this.inner)!=null&&e.reportTruncationError&&(this.onDiagnosticReported(),this.inner.reportTruncationError())}trackReferencedAmbientModule(e,t){var r;(r=this.inner)!=null&&r.trackReferencedAmbientModule&&(this.onDiagnosticReported(),this.inner.trackReferencedAmbientModule(e,t))}trackExternalModuleSymbolOfImportTypeNode(e){var t;(t=this.inner)!=null&&t.trackExternalModuleSymbolOfImportTypeNode&&(this.onDiagnosticReported(),this.inner.trackExternalModuleSymbolOfImportTypeNode(e))}reportNonlocalAugmentation(e,t,r){var i;(i=this.inner)!=null&&i.reportNonlocalAugmentation&&(this.onDiagnosticReported(),this.inner.reportNonlocalAugmentation(e,t,r))}reportNonSerializableProperty(e){var t;(t=this.inner)!=null&&t.reportNonSerializableProperty&&(this.onDiagnosticReported(),this.inner.reportNonSerializableProperty(e))}reportImportTypeNodeResolutionModeOverride(){var e;(e=this.inner)!=null&&e.reportImportTypeNodeResolutionModeOverride&&(this.onDiagnosticReported(),this.inner.reportImportTypeNodeResolutionModeOverride())}onDiagnosticReported(){this.context.reportedDiagnostic=!0}}}});function $e(e,t,r,i){if(e===void 0)return e;let o=t(e),s;if(o!==void 0)return ba(o)?s=(i||TPe)(o):s=o,L.assertNode(s,r),s}function On(e,t,r,i,o){if(e===void 0)return e;let s=e.length;(i===void 0||i<0)&&(i=0),(o===void 0||o>s-i)&&(o=s-i);let l,f=-1,d=-1;i>0||o<s?l=e.hasTrailingComma&&i+o===s:(f=e.pos,d=e.end,l=e.hasTrailingComma);let g=N_e(e,t,r,i,o);if(g!==e){let m=D.createNodeArray(g,l);return om(m,f,d),m}return e}function vK(e,t,r,i,o){if(e===void 0)return e;let s=e.length;return(i===void 0||i<0)&&(i=0),(o===void 0||o>s-i)&&(o=s-i),N_e(e,t,r,i,o)}function N_e(e,t,r,i,o){let s,l=e.length;(i>0||o<l)&&(s=[]);for(let f=0;f<o;f++){let d=e[f+i],g=d!==void 0?t?t(d):d:void 0;if((s!==void 0||g===void 0||g!==d)&&(s===void 0&&(s=e.slice(0,f),L.assertEachNode(s,r)),g))if(ba(g))for(let m of g)L.assertNode(m,r),s.push(m);else L.assertNode(g,r),s.push(g)}return s||(L.assertEachNode(e,r),e)}function mF(e,t,r,i,o,s=On){return r.startLexicalEnvironment(),e=s(e,t,ca,i),o&&(e=r.factory.ensureUseStrict(e)),D.mergeLexicalEnvironment(e,r.endLexicalEnvironment())}function Sc(e,t,r,i=On){let o;return r.startLexicalEnvironment(),e&&(r.setLexicalEnvironmentFlags(1,!0),o=i(e,t,ha),r.getLexicalEnvironmentFlags()&2&&Do(r.getCompilerOptions())>=2&&(o=yPe(o,r)),r.setLexicalEnvironmentFlags(1,!1)),r.suspendLexicalEnvironment(),o}function yPe(e,t){let r;for(let i=0;i<e.length;i++){let o=e[i],s=vPe(o,t);(r||s!==o)&&(r||(r=e.slice(0,i)),r[i]=s)}return r?it(t.factory.createNodeArray(r,e.hasTrailingComma),e):e}function vPe(e,t){return e.dotDotDotToken?e:La(e.name)?bPe(e,t):e.initializer?EPe(e,e.name,e.initializer,t):e}function bPe(e,t){let{factory:r}=t;return t.addInitializationStatement(r.createVariableStatement(void 0,r.createVariableDeclarationList([r.createVariableDeclaration(e.name,void 0,e.type,e.initializer?r.createConditionalExpression(r.createStrictEquality(r.getGeneratedNameForNode(e),r.createVoidZero()),void 0,e.initializer,void 0,r.getGeneratedNameForNode(e)):r.getGeneratedNameForNode(e))]))),r.updateParameterDeclaration(e,e.modifiers,e.dotDotDotToken,r.getGeneratedNameForNode(e),e.questionToken,e.type,void 0)}function EPe(e,t,r,i){let o=i.factory;return i.addInitializationStatement(o.createIfStatement(o.createTypeCheck(o.cloneNode(t),\"undefined\"),Jn(it(o.createBlock([o.createExpressionStatement(Jn(it(o.createAssignment(Jn(o.cloneNode(t),96),Jn(r,96|Ya(r)|3072)),e),3072))]),e),3905))),o.updateParameterDeclaration(e,e.modifiers,e.dotDotDotToken,e.name,e.questionToken,e.type,void 0)}function Zd(e,t,r,i=$e){r.resumeLexicalEnvironment();let o=i(e,t,u6),s=r.endLexicalEnvironment();if(vt(s)){if(!o)return r.factory.createBlock(s);let l=r.factory.converters.convertToFunctionBlock(o),f=D.mergeLexicalEnvironment(l.statements,s);return r.factory.updateBlock(l,f)}return o}function jf(e,t,r,i=$e){r.startBlockScope();let o=i(e,t,ca,r.factory.liftToBlock);L.assert(o);let s=r.endBlockScope();return vt(s)?Va(o)?(s.push(...o.statements),r.factory.updateBlock(o,s)):(s.push(o),r.factory.createBlock(s)):o}function aN(e,t,r=t){if(r===t||e.length<=1)return On(e,t,ot);let i=0,o=e.length;return On(e,s=>{let l=i<o-1;return i++,l?r(s):t(s)},ot)}function xn(e,t,r,i=On,o,s=$e){if(e===void 0)return;let l=P_e[e.kind];return l===void 0?e:l(e,t,r,i,s,o)}function TPe(e){return L.assert(e.length<=1,\"Too many nodes written to output.\"),Wp(e)}var P_e,SPe=gt({\"src/compiler/visitorPublic.ts\"(){\"use strict\";fa(),P_e={163:function(t,r,i,o,s,l){return i.factory.updateQualifiedName(t,L.checkDefined(s(t.left,r,Cd)),L.checkDefined(s(t.right,r,Re)))},164:function(t,r,i,o,s,l){return i.factory.updateComputedPropertyName(t,L.checkDefined(s(t.expression,r,ot)))},165:function(t,r,i,o,s,l){return i.factory.updateTypeParameterDeclaration(t,o(t.modifiers,r,Ha),L.checkDefined(s(t.name,r,Re)),s(t.constraint,r,bi),s(t.default,r,bi))},166:function(t,r,i,o,s,l){return i.factory.updateParameterDeclaration(t,o(t.modifiers,r,Ns),l?s(t.dotDotDotToken,l,o3):t.dotDotDotToken,L.checkDefined(s(t.name,r,Mm)),l?s(t.questionToken,l,ev):t.questionToken,s(t.type,r,bi),s(t.initializer,r,ot))},167:function(t,r,i,o,s,l){return i.factory.updateDecorator(t,L.checkDefined(s(t.expression,r,ot)))},168:function(t,r,i,o,s,l){return i.factory.updatePropertySignature(t,o(t.modifiers,r,Ha),L.checkDefined(s(t.name,r,Ys)),l?s(t.questionToken,l,ev):t.questionToken,s(t.type,r,bi))},169:function(t,r,i,o,s,l){var f,d;return i.factory.updatePropertyDeclaration(t,o(t.modifiers,r,Ns),L.checkDefined(s(t.name,r,Ys)),l?s((f=t.questionToken)!=null?f:t.exclamationToken,l,lde):(d=t.questionToken)!=null?d:t.exclamationToken,s(t.type,r,bi),s(t.initializer,r,ot))},170:function(t,r,i,o,s,l){return i.factory.updateMethodSignature(t,o(t.modifiers,r,Ha),L.checkDefined(s(t.name,r,Ys)),l?s(t.questionToken,l,ev):t.questionToken,o(t.typeParameters,r,_c),o(t.parameters,r,ha),s(t.type,r,bi))},171:function(t,r,i,o,s,l){return i.factory.updateMethodDeclaration(t,o(t.modifiers,r,Ns),l?s(t.asteriskToken,l,cO):t.asteriskToken,L.checkDefined(s(t.name,r,Ys)),l?s(t.questionToken,l,ev):t.questionToken,o(t.typeParameters,r,_c),Sc(t.parameters,r,i,o),s(t.type,r,bi),Zd(t.body,r,i,s))},173:function(t,r,i,o,s,l){return i.factory.updateConstructorDeclaration(t,o(t.modifiers,r,Ns),Sc(t.parameters,r,i,o),Zd(t.body,r,i,s))},174:function(t,r,i,o,s,l){return i.factory.updateGetAccessorDeclaration(t,o(t.modifiers,r,Ns),L.checkDefined(s(t.name,r,Ys)),Sc(t.parameters,r,i,o),s(t.type,r,bi),Zd(t.body,r,i,s))},175:function(t,r,i,o,s,l){return i.factory.updateSetAccessorDeclaration(t,o(t.modifiers,r,Ns),L.checkDefined(s(t.name,r,Ys)),Sc(t.parameters,r,i,o),Zd(t.body,r,i,s))},172:function(t,r,i,o,s,l){return i.startLexicalEnvironment(),i.suspendLexicalEnvironment(),i.factory.updateClassStaticBlockDeclaration(t,Zd(t.body,r,i,s))},176:function(t,r,i,o,s,l){return i.factory.updateCallSignature(t,o(t.typeParameters,r,_c),o(t.parameters,r,ha),s(t.type,r,bi))},177:function(t,r,i,o,s,l){return i.factory.updateConstructSignature(t,o(t.typeParameters,r,_c),o(t.parameters,r,ha),s(t.type,r,bi))},178:function(t,r,i,o,s,l){return i.factory.updateIndexSignature(t,o(t.modifiers,r,Ns),o(t.parameters,r,ha),L.checkDefined(s(t.type,r,bi)))},179:function(t,r,i,o,s,l){return i.factory.updateTypePredicateNode(t,s(t.assertsModifier,r,Due),L.checkDefined(s(t.parameterName,r,ude)),s(t.type,r,bi))},180:function(t,r,i,o,s,l){return i.factory.updateTypeReferenceNode(t,L.checkDefined(s(t.typeName,r,Cd)),o(t.typeArguments,r,bi))},181:function(t,r,i,o,s,l){return i.factory.updateFunctionTypeNode(t,o(t.typeParameters,r,_c),o(t.parameters,r,ha),L.checkDefined(s(t.type,r,bi)))},182:function(t,r,i,o,s,l){return i.factory.updateConstructorTypeNode(t,o(t.modifiers,r,Ha),o(t.typeParameters,r,_c),o(t.parameters,r,ha),L.checkDefined(s(t.type,r,bi)))},183:function(t,r,i,o,s,l){return i.factory.updateTypeQueryNode(t,L.checkDefined(s(t.exprName,r,Cd)),o(t.typeArguments,r,bi))},184:function(t,r,i,o,s,l){return i.factory.updateTypeLiteralNode(t,o(t.members,r,_T))},185:function(t,r,i,o,s,l){return i.factory.updateArrayTypeNode(t,L.checkDefined(s(t.elementType,r,bi)))},186:function(t,r,i,o,s,l){return i.factory.updateTupleTypeNode(t,o(t.elements,r,bi))},187:function(t,r,i,o,s,l){return i.factory.updateOptionalTypeNode(t,L.checkDefined(s(t.type,r,bi)))},188:function(t,r,i,o,s,l){return i.factory.updateRestTypeNode(t,L.checkDefined(s(t.type,r,bi)))},189:function(t,r,i,o,s,l){return i.factory.updateUnionTypeNode(t,o(t.types,r,bi))},190:function(t,r,i,o,s,l){return i.factory.updateIntersectionTypeNode(t,o(t.types,r,bi))},191:function(t,r,i,o,s,l){return i.factory.updateConditionalTypeNode(t,L.checkDefined(s(t.checkType,r,bi)),L.checkDefined(s(t.extendsType,r,bi)),L.checkDefined(s(t.trueType,r,bi)),L.checkDefined(s(t.falseType,r,bi)))},192:function(t,r,i,o,s,l){return i.factory.updateInferTypeNode(t,L.checkDefined(s(t.typeParameter,r,_c)))},202:function(t,r,i,o,s,l){return i.factory.updateImportTypeNode(t,L.checkDefined(s(t.argument,r,bi)),s(t.assertions,r,Vue),s(t.qualifier,r,Cd),o(t.typeArguments,r,bi),t.isTypeOf)},298:function(t,r,i,o,s,l){return i.factory.updateImportTypeAssertionContainer(t,L.checkDefined(s(t.assertClause,r,p3)),t.multiLine)},199:function(t,r,i,o,s,l){return i.factory.updateNamedTupleMember(t,l?s(t.dotDotDotToken,l,o3):t.dotDotDotToken,L.checkDefined(s(t.name,r,Re)),l?s(t.questionToken,l,ev):t.questionToken,L.checkDefined(s(t.type,r,bi)))},193:function(t,r,i,o,s,l){return i.factory.updateParenthesizedType(t,L.checkDefined(s(t.type,r,bi)))},195:function(t,r,i,o,s,l){return i.factory.updateTypeOperatorNode(t,L.checkDefined(s(t.type,r,bi)))},196:function(t,r,i,o,s,l){return i.factory.updateIndexedAccessTypeNode(t,L.checkDefined(s(t.objectType,r,bi)),L.checkDefined(s(t.indexType,r,bi)))},197:function(t,r,i,o,s,l){return i.factory.updateMappedTypeNode(t,l?s(t.readonlyToken,l,dde):t.readonlyToken,L.checkDefined(s(t.typeParameter,r,_c)),s(t.nameType,r,bi),l?s(t.questionToken,l,fde):t.questionToken,s(t.type,r,bi),o(t.members,r,_T))},198:function(t,r,i,o,s,l){return i.factory.updateLiteralTypeNode(t,L.checkDefined(s(t.literal,r,hse)))},200:function(t,r,i,o,s,l){return i.factory.updateTemplateLiteralType(t,L.checkDefined(s(t.head,r,f2)),o(t.templateSpans,r,Mue))},201:function(t,r,i,o,s,l){return i.factory.updateTemplateLiteralTypeSpan(t,L.checkDefined(s(t.type,r,bi)),L.checkDefined(s(t.literal,r,o6)))},203:function(t,r,i,o,s,l){return i.factory.updateObjectBindingPattern(t,o(t.elements,r,Wo))},204:function(t,r,i,o,s,l){return i.factory.updateArrayBindingPattern(t,o(t.elements,r,c6))},205:function(t,r,i,o,s,l){return i.factory.updateBindingElement(t,l?s(t.dotDotDotToken,l,o3):t.dotDotDotToken,s(t.propertyName,r,Ys),L.checkDefined(s(t.name,r,Mm)),s(t.initializer,r,ot))},206:function(t,r,i,o,s,l){return i.factory.updateArrayLiteralExpression(t,o(t.elements,r,ot))},207:function(t,r,i,o,s,l){return i.factory.updateObjectLiteralExpression(t,o(t.properties,r,Og))},208:function(t,r,i,o,s,l){return n6(t)?i.factory.updatePropertyAccessChain(t,L.checkDefined(s(t.expression,r,ot)),l?s(t.questionDotToken,l,s3):t.questionDotToken,L.checkDefined(s(t.name,r,Ah))):i.factory.updatePropertyAccessExpression(t,L.checkDefined(s(t.expression,r,ot)),L.checkDefined(s(t.name,r,Ah)))},209:function(t,r,i,o,s,l){return Dj(t)?i.factory.updateElementAccessChain(t,L.checkDefined(s(t.expression,r,ot)),l?s(t.questionDotToken,l,s3):t.questionDotToken,L.checkDefined(s(t.argumentExpression,r,ot))):i.factory.updateElementAccessExpression(t,L.checkDefined(s(t.expression,r,ot)),L.checkDefined(s(t.argumentExpression,r,ot)))},210:function(t,r,i,o,s,l){return dT(t)?i.factory.updateCallChain(t,L.checkDefined(s(t.expression,r,ot)),l?s(t.questionDotToken,l,s3):t.questionDotToken,o(t.typeArguments,r,bi),o(t.arguments,r,ot)):i.factory.updateCallExpression(t,L.checkDefined(s(t.expression,r,ot)),o(t.typeArguments,r,bi),o(t.arguments,r,ot))},211:function(t,r,i,o,s,l){return i.factory.updateNewExpression(t,L.checkDefined(s(t.expression,r,ot)),o(t.typeArguments,r,bi),o(t.arguments,r,ot))},212:function(t,r,i,o,s,l){return i.factory.updateTaggedTemplateExpression(t,L.checkDefined(s(t.tag,r,ot)),o(t.typeArguments,r,bi),L.checkDefined(s(t.template,r,AA)))},213:function(t,r,i,o,s,l){return i.factory.updateTypeAssertion(t,L.checkDefined(s(t.type,r,bi)),L.checkDefined(s(t.expression,r,ot)))},214:function(t,r,i,o,s,l){return i.factory.updateParenthesizedExpression(t,L.checkDefined(s(t.expression,r,ot)))},215:function(t,r,i,o,s,l){return i.factory.updateFunctionExpression(t,o(t.modifiers,r,Ha),l?s(t.asteriskToken,l,cO):t.asteriskToken,s(t.name,r,Re),o(t.typeParameters,r,_c),Sc(t.parameters,r,i,o),s(t.type,r,bi),Zd(t.body,r,i,s))},216:function(t,r,i,o,s,l){return i.factory.updateArrowFunction(t,o(t.modifiers,r,Ha),o(t.typeParameters,r,_c),Sc(t.parameters,r,i,o),s(t.type,r,bi),l?L.checkDefined(s(t.equalsGreaterThanToken,l,Lue)):t.equalsGreaterThanToken,Zd(t.body,r,i,s))},217:function(t,r,i,o,s,l){return i.factory.updateDeleteExpression(t,L.checkDefined(s(t.expression,r,ot)))},218:function(t,r,i,o,s,l){return i.factory.updateTypeOfExpression(t,L.checkDefined(s(t.expression,r,ot)))},219:function(t,r,i,o,s,l){return i.factory.updateVoidExpression(t,L.checkDefined(s(t.expression,r,ot)))},220:function(t,r,i,o,s,l){return i.factory.updateAwaitExpression(t,L.checkDefined(s(t.expression,r,ot)))},221:function(t,r,i,o,s,l){return i.factory.updatePrefixUnaryExpression(t,L.checkDefined(s(t.operand,r,ot)))},222:function(t,r,i,o,s,l){return i.factory.updatePostfixUnaryExpression(t,L.checkDefined(s(t.operand,r,ot)))},223:function(t,r,i,o,s,l){return i.factory.updateBinaryExpression(t,L.checkDefined(s(t.left,r,ot)),l?L.checkDefined(s(t.operatorToken,l,pde)):t.operatorToken,L.checkDefined(s(t.right,r,ot)))},224:function(t,r,i,o,s,l){return i.factory.updateConditionalExpression(t,L.checkDefined(s(t.condition,r,ot)),l?L.checkDefined(s(t.questionToken,l,ev)):t.questionToken,L.checkDefined(s(t.whenTrue,r,ot)),l?L.checkDefined(s(t.colonToken,l,Iue)):t.colonToken,L.checkDefined(s(t.whenFalse,r,ot)))},225:function(t,r,i,o,s,l){return i.factory.updateTemplateExpression(t,L.checkDefined(s(t.head,r,f2)),o(t.templateSpans,r,xL))},226:function(t,r,i,o,s,l){return i.factory.updateYieldExpression(t,l?s(t.asteriskToken,l,cO):t.asteriskToken,s(t.expression,r,ot))},227:function(t,r,i,o,s,l){return i.factory.updateSpreadElement(t,L.checkDefined(s(t.expression,r,ot)))},228:function(t,r,i,o,s,l){return i.factory.updateClassExpression(t,o(t.modifiers,r,Ns),s(t.name,r,Re),o(t.typeParameters,r,_c),o(t.heritageClauses,r,dd),o(t.members,r,_l))},230:function(t,r,i,o,s,l){return i.factory.updateExpressionWithTypeArguments(t,L.checkDefined(s(t.expression,r,ot)),o(t.typeArguments,r,bi))},231:function(t,r,i,o,s,l){return i.factory.updateAsExpression(t,L.checkDefined(s(t.expression,r,ot)),L.checkDefined(s(t.type,r,bi)))},235:function(t,r,i,o,s,l){return i.factory.updateSatisfiesExpression(t,L.checkDefined(s(t.expression,r,ot)),L.checkDefined(s(t.type,r,bi)))},232:function(t,r,i,o,s,l){return Jl(t)?i.factory.updateNonNullChain(t,L.checkDefined(s(t.expression,r,ot))):i.factory.updateNonNullExpression(t,L.checkDefined(s(t.expression,r,ot)))},233:function(t,r,i,o,s,l){return i.factory.updateMetaProperty(t,L.checkDefined(s(t.name,r,Re)))},236:function(t,r,i,o,s,l){return i.factory.updateTemplateSpan(t,L.checkDefined(s(t.expression,r,ot)),L.checkDefined(s(t.literal,r,o6)))},238:function(t,r,i,o,s,l){return i.factory.updateBlock(t,o(t.statements,r,ca))},240:function(t,r,i,o,s,l){return i.factory.updateVariableStatement(t,o(t.modifiers,r,Ns),L.checkDefined(s(t.declarationList,r,pu)))},241:function(t,r,i,o,s,l){return i.factory.updateExpressionStatement(t,L.checkDefined(s(t.expression,r,ot)))},242:function(t,r,i,o,s,l){return i.factory.updateIfStatement(t,L.checkDefined(s(t.expression,r,ot)),L.checkDefined(s(t.thenStatement,r,ca,i.factory.liftToBlock)),s(t.elseStatement,r,ca,i.factory.liftToBlock))},243:function(t,r,i,o,s,l){return i.factory.updateDoStatement(t,jf(t.statement,r,i,s),L.checkDefined(s(t.expression,r,ot)))},244:function(t,r,i,o,s,l){return i.factory.updateWhileStatement(t,L.checkDefined(s(t.expression,r,ot)),jf(t.statement,r,i,s))},245:function(t,r,i,o,s,l){return i.factory.updateForStatement(t,s(t.initializer,r,pp),s(t.condition,r,ot),s(t.incrementor,r,ot),jf(t.statement,r,i,s))},246:function(t,r,i,o,s,l){return i.factory.updateForInStatement(t,L.checkDefined(s(t.initializer,r,pp)),L.checkDefined(s(t.expression,r,ot)),jf(t.statement,r,i,s))},247:function(t,r,i,o,s,l){return i.factory.updateForOfStatement(t,l?s(t.awaitModifier,l,Dz):t.awaitModifier,L.checkDefined(s(t.initializer,r,pp)),L.checkDefined(s(t.expression,r,ot)),jf(t.statement,r,i,s))},248:function(t,r,i,o,s,l){return i.factory.updateContinueStatement(t,s(t.label,r,Re))},249:function(t,r,i,o,s,l){return i.factory.updateBreakStatement(t,s(t.label,r,Re))},250:function(t,r,i,o,s,l){return i.factory.updateReturnStatement(t,s(t.expression,r,ot))},251:function(t,r,i,o,s,l){return i.factory.updateWithStatement(t,L.checkDefined(s(t.expression,r,ot)),L.checkDefined(s(t.statement,r,ca,i.factory.liftToBlock)))},252:function(t,r,i,o,s,l){return i.factory.updateSwitchStatement(t,L.checkDefined(s(t.expression,r,ot)),L.checkDefined(s(t.caseBlock,r,hO)))},253:function(t,r,i,o,s,l){return i.factory.updateLabeledStatement(t,L.checkDefined(s(t.label,r,Re)),L.checkDefined(s(t.statement,r,ca,i.factory.liftToBlock)))},254:function(t,r,i,o,s,l){return i.factory.updateThrowStatement(t,L.checkDefined(s(t.expression,r,ot)))},255:function(t,r,i,o,s,l){return i.factory.updateTryStatement(t,L.checkDefined(s(t.tryBlock,r,Va)),s(t.catchClause,r,E2),s(t.finallyBlock,r,Va))},257:function(t,r,i,o,s,l){return i.factory.updateVariableDeclaration(t,L.checkDefined(s(t.name,r,Mm)),l?s(t.exclamationToken,l,lO):t.exclamationToken,s(t.type,r,bi),s(t.initializer,r,ot))},258:function(t,r,i,o,s,l){return i.factory.updateVariableDeclarationList(t,o(t.declarations,r,wi))},259:function(t,r,i,o,s,l){return i.factory.updateFunctionDeclaration(t,o(t.modifiers,r,Ha),l?s(t.asteriskToken,l,cO):t.asteriskToken,s(t.name,r,Re),o(t.typeParameters,r,_c),Sc(t.parameters,r,i,o),s(t.type,r,bi),Zd(t.body,r,i,s))},260:function(t,r,i,o,s,l){return i.factory.updateClassDeclaration(t,o(t.modifiers,r,Ns),s(t.name,r,Re),o(t.typeParameters,r,_c),o(t.heritageClauses,r,dd),o(t.members,r,_l))},261:function(t,r,i,o,s,l){return i.factory.updateInterfaceDeclaration(t,o(t.modifiers,r,Ns),L.checkDefined(s(t.name,r,Re)),o(t.typeParameters,r,_c),o(t.heritageClauses,r,dd),o(t.members,r,_T))},262:function(t,r,i,o,s,l){return i.factory.updateTypeAliasDeclaration(t,o(t.modifiers,r,Ns),L.checkDefined(s(t.name,r,Re)),o(t.typeParameters,r,_c),L.checkDefined(s(t.type,r,bi)))},263:function(t,r,i,o,s,l){return i.factory.updateEnumDeclaration(t,o(t.modifiers,r,Ns),L.checkDefined(s(t.name,r,Re)),o(t.members,r,q0))},264:function(t,r,i,o,s,l){return i.factory.updateModuleDeclaration(t,o(t.modifiers,r,Ns),L.checkDefined(s(t.name,r,_de)),s(t.body,r,vse))},265:function(t,r,i,o,s,l){return i.factory.updateModuleBlock(t,o(t.statements,r,ca))},266:function(t,r,i,o,s,l){return i.factory.updateCaseBlock(t,o(t.clauses,r,Kj))},267:function(t,r,i,o,s,l){return i.factory.updateNamespaceExportDeclaration(t,L.checkDefined(s(t.name,r,Re)))},268:function(t,r,i,o,s,l){return i.factory.updateImportEqualsDeclaration(t,o(t.modifiers,r,Ns),t.isTypeOnly,L.checkDefined(s(t.name,r,Re)),L.checkDefined(s(t.moduleReference,r,Tse)))},269:function(t,r,i,o,s,l){return i.factory.updateImportDeclaration(t,o(t.modifiers,r,Ns),s(t.importClause,r,lm),L.checkDefined(s(t.moduleSpecifier,r,ot)),s(t.assertClause,r,p3))},296:function(t,r,i,o,s,l){return i.factory.updateAssertClause(t,o(t.elements,r,jue),t.multiLine)},297:function(t,r,i,o,s,l){return i.factory.updateAssertEntry(t,L.checkDefined(s(t.name,r,ase)),L.checkDefined(s(t.value,r,ot)))},270:function(t,r,i,o,s,l){return i.factory.updateImportClause(t,t.isTypeOnly,s(t.name,r,Re),s(t.namedBindings,r,Wj))},271:function(t,r,i,o,s,l){return i.factory.updateNamespaceImport(t,L.checkDefined(s(t.name,r,Re)))},277:function(t,r,i,o,s,l){return i.factory.updateNamespaceExport(t,L.checkDefined(s(t.name,r,Re)))},272:function(t,r,i,o,s,l){return i.factory.updateNamedImports(t,o(t.elements,r,$u))},273:function(t,r,i,o,s,l){return i.factory.updateImportSpecifier(t,t.isTypeOnly,s(t.propertyName,r,Re),L.checkDefined(s(t.name,r,Re)))},274:function(t,r,i,o,s,l){return i.factory.updateExportAssignment(t,o(t.modifiers,r,Ns),L.checkDefined(s(t.expression,r,ot)))},275:function(t,r,i,o,s,l){return i.factory.updateExportDeclaration(t,o(t.modifiers,r,Ns),t.isTypeOnly,s(t.exportClause,r,Rj),s(t.moduleSpecifier,r,ot),s(t.assertClause,r,p3))},276:function(t,r,i,o,s,l){return i.factory.updateNamedExports(t,o(t.elements,r,Mu))},278:function(t,r,i,o,s,l){return i.factory.updateExportSpecifier(t,t.isTypeOnly,s(t.propertyName,r,Re),L.checkDefined(s(t.name,r,Re)))},280:function(t,r,i,o,s,l){return i.factory.updateExternalModuleReference(t,L.checkDefined(s(t.expression,r,ot)))},281:function(t,r,i,o,s,l){return i.factory.updateJsxElement(t,L.checkDefined(s(t.openingElement,r,Xm)),o(t.children,r,Pw),L.checkDefined(s(t.closingElement,r,GS)))},282:function(t,r,i,o,s,l){return i.factory.updateJsxSelfClosingElement(t,L.checkDefined(s(t.tagName,r,bI)),o(t.typeArguments,r,bi),L.checkDefined(s(t.attributes,r,K0)))},283:function(t,r,i,o,s,l){return i.factory.updateJsxOpeningElement(t,L.checkDefined(s(t.tagName,r,bI)),o(t.typeArguments,r,bi),L.checkDefined(s(t.attributes,r,K0)))},284:function(t,r,i,o,s,l){return i.factory.updateJsxClosingElement(t,L.checkDefined(s(t.tagName,r,bI)))},285:function(t,r,i,o,s,l){return i.factory.updateJsxFragment(t,L.checkDefined(s(t.openingFragment,r,US)),o(t.children,r,Pw),L.checkDefined(s(t.closingFragment,r,Hue)))},288:function(t,r,i,o,s,l){return i.factory.updateJsxAttribute(t,L.checkDefined(s(t.name,r,Re)),s(t.initializer,r,Sse))},289:function(t,r,i,o,s,l){return i.factory.updateJsxAttributes(t,o(t.properties,r,d6))},290:function(t,r,i,o,s,l){return i.factory.updateJsxSpreadAttribute(t,L.checkDefined(s(t.expression,r,ot)))},291:function(t,r,i,o,s,l){return i.factory.updateJsxExpression(t,s(t.expression,r,ot))},292:function(t,r,i,o,s,l){return i.factory.updateCaseClause(t,L.checkDefined(s(t.expression,r,ot)),o(t.statements,r,ca))},293:function(t,r,i,o,s,l){return i.factory.updateDefaultClause(t,o(t.statements,r,ca))},294:function(t,r,i,o,s,l){return i.factory.updateHeritageClause(t,o(t.types,r,Vg))},295:function(t,r,i,o,s,l){return i.factory.updateCatchClause(t,s(t.variableDeclaration,r,wi),L.checkDefined(s(t.block,r,Va)))},299:function(t,r,i,o,s,l){return i.factory.updatePropertyAssignment(t,L.checkDefined(s(t.name,r,Ys)),L.checkDefined(s(t.initializer,r,ot)))},300:function(t,r,i,o,s,l){return i.factory.updateShorthandPropertyAssignment(t,L.checkDefined(s(t.name,r,Re)),s(t.objectAssignmentInitializer,r,ot))},301:function(t,r,i,o,s,l){return i.factory.updateSpreadAssignment(t,L.checkDefined(s(t.expression,r,ot)))},302:function(t,r,i,o,s,l){return i.factory.updateEnumMember(t,L.checkDefined(s(t.name,r,Ys)),s(t.initializer,r,ot))},308:function(t,r,i,o,s,l){return i.factory.updateSourceFile(t,mF(t.statements,r,i))},356:function(t,r,i,o,s,l){return i.factory.updatePartiallyEmittedExpression(t,L.checkDefined(s(t.expression,r,ot)))},357:function(t,r,i,o,s,l){return i.factory.updateCommaListExpression(t,o(t.elements,r,ot))}}}});function M_e(e,t,r,i,o){var{enter:s,exit:l}=o.extendedDiagnostics?x8(\"Source Map\",\"beforeSourcemap\",\"afterSourcemap\"):A8,f=[],d=[],g=new Map,m,v=[],S,x=[],A=\"\",w=0,C=0,P=0,F=0,B=0,q=0,W=!1,Y=0,R=0,ie=0,$=0,fe=0,Z=0,U=!1,re=!1,le=!1;return{getSources:()=>f,addSource:_e,setSourceContent:ge,addName:X,addMapping:ke,appendSourceMap:Pe,toJSON:Le,toString:()=>JSON.stringify(Le())};function _e(_t){s();let ct=Q1(i,_t,e.getCurrentDirectory(),e.getCanonicalFileName,!0),Rt=g.get(ct);return Rt===void 0&&(Rt=d.length,d.push(ct),f.push(_t),g.set(ct,Rt)),l(),Rt}function ge(_t,ct){if(s(),ct!==null){for(m||(m=[]);m.length<_t;)m.push(null);m[_t]=ct}l()}function X(_t){s(),S||(S=new Map);let ct=S.get(_t);return ct===void 0&&(ct=v.length,v.push(_t),S.set(_t,ct)),l(),ct}function Ve(_t,ct){return!U||Y!==_t||R!==ct}function we(_t,ct,Rt){return _t!==void 0&&ct!==void 0&&Rt!==void 0&&ie===_t&&($>ct||$===ct&&fe>Rt)}function ke(_t,ct,Rt,We,qe,zt){L.assert(_t>=Y,\"generatedLine cannot backtrack\"),L.assert(ct>=0,\"generatedCharacter cannot be negative\"),L.assert(Rt===void 0||Rt>=0,\"sourceIndex cannot be negative\"),L.assert(We===void 0||We>=0,\"sourceLine cannot be negative\"),L.assert(qe===void 0||qe>=0,\"sourceCharacter cannot be negative\"),s(),(Ve(_t,ct)||we(Rt,We,qe))&&(Be(),Y=_t,R=ct,re=!1,le=!1,U=!0),Rt!==void 0&&We!==void 0&&qe!==void 0&&(ie=Rt,$=We,fe=qe,re=!0,zt!==void 0&&(Z=zt,le=!0)),l()}function Pe(_t,ct,Rt,We,qe,zt){L.assert(_t>=Y,\"generatedLine cannot backtrack\"),L.assert(ct>=0,\"generatedCharacter cannot be negative\"),s();let Qt=[],tn,kn=EK(Rt.mappings);for(let _n of kn){if(zt&&(_n.generatedLine>zt.line||_n.generatedLine===zt.line&&_n.generatedCharacter>zt.character))break;if(qe&&(_n.generatedLine<qe.line||qe.line===_n.generatedLine&&_n.generatedCharacter<qe.character))continue;let Gt,$n,ui,Ni;if(_n.sourceIndex!==void 0){if(Gt=Qt[_n.sourceIndex],Gt===void 0){let Dt=Rt.sources[_n.sourceIndex],pn=Rt.sourceRoot?vi(Rt.sourceRoot,Dt):Dt,An=vi(ni(We),pn);Qt[_n.sourceIndex]=Gt=_e(An),Rt.sourcesContent&&typeof Rt.sourcesContent[_n.sourceIndex]==\"string\"&&ge(Gt,Rt.sourcesContent[_n.sourceIndex])}$n=_n.sourceLine,ui=_n.sourceCharacter,Rt.names&&_n.nameIndex!==void 0&&(tn||(tn=[]),Ni=tn[_n.nameIndex],Ni===void 0&&(tn[_n.nameIndex]=Ni=X(Rt.names[_n.nameIndex])))}let Pi=_n.generatedLine-(qe?qe.line:0),gr=Pi+_t,pt=qe&&qe.line===_n.generatedLine?_n.generatedCharacter-qe.character:_n.generatedCharacter,nn=Pi===0?pt+ct:pt;ke(gr,nn,Gt,$n,ui,Ni)}l()}function Ce(){return!W||w!==Y||C!==R||P!==ie||F!==$||B!==fe||q!==Z}function Ie(_t){x.push(_t),x.length>=1024&&Ne()}function Be(){if(!(!U||!Ce())){if(s(),w<Y){do Ie(59),w++;while(w<Y);C=0}else L.assertEqual(w,Y,\"generatedLine cannot backtrack\"),W&&Ie(44);Ye(R-C),C=R,re&&(Ye(ie-P),P=ie,Ye($-F),F=$,Ye(fe-B),B=fe,le&&(Ye(Z-q),q=Z)),W=!0,l()}}function Ne(){x.length>0&&(A+=String.fromCharCode.apply(void 0,x),x.length=0)}function Le(){return Be(),Ne(),{version:3,file:t,sourceRoot:r,sources:d,names:v,mappings:A,sourcesContent:m}}function Ye(_t){_t<0?_t=(-_t<<1)+1:_t=_t<<1;do{let ct=_t&31;_t=_t>>5,_t>0&&(ct=ct|32),Ie(CPe(ct))}while(_t>0)}}function F_e(e,t){return{getLineCount:()=>t.length,getLineText:r=>e.substring(t[r],t[r+1])}}function G_e(e){for(let t=e.getLineCount()-1;t>=0;t--){let r=e.getLineText(t),i=hF.exec(r);if(i)return $D(i[1]);if(!r.match(gF))break}}function xPe(e){return typeof e==\"string\"||e===null}function B_e(e){return e!==null&&typeof e==\"object\"&&e.version===3&&typeof e.file==\"string\"&&typeof e.mappings==\"string\"&&ba(e.sources)&&Ji(e.sources,Ta)&&(e.sourceRoot===void 0||e.sourceRoot===null||typeof e.sourceRoot==\"string\")&&(e.sourcesContent===void 0||e.sourcesContent===null||ba(e.sourcesContent)&&Ji(e.sourcesContent,xPe))&&(e.names===void 0||e.names===null||ba(e.names)&&Ji(e.names,Ta))}function bK(e){try{let t=JSON.parse(e);if(B_e(t))return t}catch{}}function EK(e){let t=!1,r=0,i=0,o=0,s=0,l=0,f=0,d=0,g;return{get pos(){return r},get error(){return g},get state(){return m(!0,!0)},next(){for(;!t&&r<e.length;){let P=e.charCodeAt(r);if(P===59){i++,o=0,r++;continue}if(P===44){r++;continue}let F=!1,B=!1;if(o+=C(),A())return v();if(o<0)return x(\"Invalid generatedCharacter found\");if(!w()){if(F=!0,s+=C(),A())return v();if(s<0)return x(\"Invalid sourceIndex found\");if(w())return x(\"Unsupported Format: No entries after sourceIndex\");if(l+=C(),A())return v();if(l<0)return x(\"Invalid sourceLine found\");if(w())return x(\"Unsupported Format: No entries after sourceLine\");if(f+=C(),A())return v();if(f<0)return x(\"Invalid sourceCharacter found\");if(!w()){if(B=!0,d+=C(),A())return v();if(d<0)return x(\"Invalid nameIndex found\");if(!w())return x(\"Unsupported Error Format: Entries after nameIndex\")}}return{value:m(F,B),done:t}}return v()},[Symbol.iterator](){return this}};function m(P,F){return{generatedLine:i,generatedCharacter:o,sourceIndex:P?s:void 0,sourceLine:P?l:void 0,sourceCharacter:P?f:void 0,nameIndex:F?d:void 0}}function v(){return t=!0,{value:void 0,done:!0}}function S(P){g===void 0&&(g=P)}function x(P){return S(P),v()}function A(){return g!==void 0}function w(){return r===e.length||e.charCodeAt(r)===44||e.charCodeAt(r)===59}function C(){let P=!0,F=0,B=0;for(;P;r++){if(r>=e.length)return S(\"Error in decoding base64VLQFormatDecode, past the mapping string\"),-1;let q=IPe(e.charCodeAt(r));if(q===-1)return S(\"Invalid character in VLQ\"),-1;P=(q&32)!==0,B=B|(q&31)<<F,F+=5}return B&1?(B=B>>1,B=-B):B=B>>1,B}}function APe(e,t){return e===t||e.generatedLine===t.generatedLine&&e.generatedCharacter===t.generatedCharacter&&e.sourceIndex===t.sourceIndex&&e.sourceLine===t.sourceLine&&e.sourceCharacter===t.sourceCharacter&&e.nameIndex===t.nameIndex}function U_e(e){return e.sourceIndex!==void 0&&e.sourceLine!==void 0&&e.sourceCharacter!==void 0}function CPe(e){return e>=0&&e<26?65+e:e>=26&&e<52?97+e-26:e>=52&&e<62?48+e-52:e===62?43:e===63?47:L.fail(`${e}: not a base64 value`)}function IPe(e){return e>=65&&e<=90?e-65:e>=97&&e<=122?e-97+26:e>=48&&e<=57?e-48+52:e===43?62:e===47?63:-1}function V_e(e){return e.sourceIndex!==void 0&&e.sourcePosition!==void 0}function j_e(e,t){return e.generatedPosition===t.generatedPosition&&e.sourceIndex===t.sourceIndex&&e.sourcePosition===t.sourcePosition}function LPe(e,t){return L.assert(e.sourceIndex===t.sourceIndex),Es(e.sourcePosition,t.sourcePosition)}function kPe(e,t){return Es(e.generatedPosition,t.generatedPosition)}function DPe(e){return e.sourcePosition}function wPe(e){return e.generatedPosition}function H_e(e,t,r){let i=ni(r),o=t.sourceRoot?_a(t.sourceRoot,i):i,s=_a(t.file,i),l=e.getSourceFileLike(s),f=t.sources.map(F=>_a(F,o)),d=new Map(f.map((F,B)=>[e.getCanonicalFileName(F),B])),g,m,v;return{getSourcePosition:P,getGeneratedPosition:C};function S(F){let B=l!==void 0?gw(l,F.generatedLine,F.generatedCharacter,!0):-1,q,W;if(U_e(F)){let Y=e.getSourceFileLike(f[F.sourceIndex]);q=t.sources[F.sourceIndex],W=Y!==void 0?gw(Y,F.sourceLine,F.sourceCharacter,!0):-1}return{generatedPosition:B,source:q,sourceIndex:F.sourceIndex,sourcePosition:W,nameIndex:F.nameIndex}}function x(){if(g===void 0){let F=EK(t.mappings),B=lo(F,S);F.error!==void 0?(e.log&&e.log(`Encountered error while decoding sourcemap: ${F.error}`),g=Je):g=B}return g}function A(F){if(v===void 0){let B=[];for(let q of x()){if(!V_e(q))continue;let W=B[q.sourceIndex];W||(B[q.sourceIndex]=W=[]),W.push(q)}v=B.map(q=>HD(q,LPe,j_e))}return v[F]}function w(){if(m===void 0){let F=[];for(let B of x())F.push(B);m=HD(F,kPe,j_e)}return m}function C(F){let B=d.get(e.getCanonicalFileName(F.fileName));if(B===void 0)return F;let q=A(B);if(!vt(q))return F;let W=j1(q,F.pos,DPe,Es);W<0&&(W=~W);let Y=q[W];return Y===void 0||Y.sourceIndex!==B?F:{fileName:s,pos:Y.generatedPosition}}function P(F){let B=w();if(!vt(B))return F;let q=j1(B,F.pos,wPe,Es);q<0&&(q=~q);let W=B[q];return W===void 0||!V_e(W)?F:{fileName:f[W.sourceIndex],pos:W.sourcePosition}}}var TK,hF,gF,yF,RPe=gt({\"src/compiler/sourcemap.ts\"(){\"use strict\";fa(),E0(),TK=/\\/\\/[@#] source[M]appingURL=(.+)\\r?\\n?$/,hF=/^\\/\\/[@#] source[M]appingURL=(.+)\\r?\\n?$/,gF=/^\\s*(\\/\\/[@#] .*)?$/,yF={getSourcePosition:Ks,getGeneratedPosition:Ks}}});function sc(e){return e=ec(e),e?zo(e):0}function OPe(e){return!e||!jg(e)?!1:vt(e.elements,W_e)}function W_e(e){return e.propertyName!==void 0&&e.propertyName.escapedText===\"default\"}function y_(e,t){return r;function r(o){return o.kind===308?t(o):i(o)}function i(o){return e.factory.createBundle(on(o.sourceFiles,t),o.prepends)}}function z_e(e){return!!VA(e)}function vF(e){if(VA(e))return!0;let t=e.importClause&&e.importClause.namedBindings;if(!t||!jg(t))return!1;let r=0;for(let i of t.elements)W_e(i)&&r++;return r>0&&r!==t.elements.length||!!(t.elements.length-r)&&lS(e)}function SK(e){return!vF(e)&&(lS(e)||!!e.importClause&&jg(e.importClause.namedBindings)&&OPe(e.importClause.namedBindings))}function xK(e,t,r,i){let o=[],s=Nf(),l=[],f=new Map,d,g=!1,m,v=!1,S=!1,x=!1;for(let C of t.statements)switch(C.kind){case 269:o.push(C),!S&&vF(C)&&(S=!0),!x&&SK(C)&&(x=!0);break;case 268:C.moduleReference.kind===280&&o.push(C);break;case 275:if(C.moduleSpecifier)if(!C.exportClause)o.push(C),v=!0;else if(o.push(C),h_(C.exportClause))w(C);else{let P=C.exportClause.name;f.get(vr(P))||(HL(l,sc(C),P),f.set(vr(P),!0),d=Sn(d,P)),S=!0}else w(C);break;case 274:C.isExportEquals&&!m&&(m=C);break;case 240:if(Mr(C,1))for(let P of C.declarationList.declarations)d=J_e(P,f,d);break;case 259:if(Mr(C,1))if(Mr(C,1024))g||(HL(l,sc(C),e.factory.getDeclarationName(C)),g=!0);else{let P=C.name;f.get(vr(P))||(HL(l,sc(C),P),f.set(vr(P),!0),d=Sn(d,P))}break;case 260:if(Mr(C,1))if(Mr(C,1024))g||(HL(l,sc(C),e.factory.getDeclarationName(C)),g=!0);else{let P=C.name;P&&!f.get(vr(P))&&(HL(l,sc(C),P),f.set(vr(P),!0),d=Sn(d,P))}break}let A=nJ(e.factory,e.getEmitHelperFactory(),t,i,v,S,x);return A&&o.unshift(A),{externalImports:o,exportSpecifiers:s,exportEquals:m,hasExportStarsToExportValues:v,exportedBindings:l,exportedNames:d,externalHelpersImportDeclaration:A};function w(C){for(let P of Ga(C.exportClause,h_).elements)if(!f.get(vr(P.name))){let F=P.propertyName||P.name;C.moduleSpecifier||s.add(vr(F),P);let B=r.getReferencedImportDeclaration(F)||r.getReferencedValueDeclaration(F);B&&HL(l,sc(B),P.name),f.set(vr(P.name),!0),d=Sn(d,P.name)}}}function J_e(e,t,r){if(La(e.name))for(let i of e.name.elements)ol(i)||(r=J_e(i,t,r));else if(!tc(e.name)){let i=vr(e.name);t.get(i)||(t.set(i,!0),r=Sn(r,e.name))}return r}function HL(e,t,r){let i=e[t];return i?i.push(r):e[t]=i=[r],i}function Z0(e){return es(e)||e.kind===8||Xu(e.kind)||Re(e)}function Ap(e){return!Re(e)&&Z0(e)}function oN(e){return e>=64&&e<=78}function WL(e){switch(e){case 64:return 39;case 65:return 40;case 66:return 41;case 67:return 42;case 68:return 43;case 69:return 44;case 70:return 47;case 71:return 48;case 72:return 49;case 73:return 50;case 74:return 51;case 78:return 52;case 75:return 56;case 76:return 55;case 77:return 60}}function AK(e){if(!Ol(e))return;let t=vs(e.expression);return OA(t)?t:void 0}function bF(e,t){for(let r=t;r<e.length;r+=1){let i=e[r];if(AK(i))return r}return-1}function CK(e,t,r){return Pr(e.members,i=>PPe(i,t,r))}function NPe(e){return MPe(e)||oc(e)}function EF(e){return Pr(e.members,NPe)}function PPe(e,t,r){return Na(e)&&(!!e.initializer||!t)&&zc(e)===r}function MPe(e){return Na(e)&&zc(e)}function sN(e){return e.kind===169&&e.initializer!==void 0}function K_e(e){return!Ca(e)&&(xA(e)||Id(e))&&pi(e.name)}function IK(e){let t;if(e){let r=e.parameters,i=r.length>0&&G0(r[0]),o=i?1:0,s=i?r.length-1:r.length;for(let l=0;l<s;l++){let f=r[l+o];(t||bf(f))&&(t||(t=new Array(s)),t[l]=Uy(f))}}return t}function LK(e){let t=Uy(e),r=IK(Vm(e));if(!(!vt(t)&&!vt(r)))return{decorators:t,parameters:r}}function TF(e,t,r){switch(e.kind){case 174:case 175:return r?FPe(e,t):q_e(e);case 171:return q_e(e);case 169:return GPe(e);default:return}}function FPe(e,t){if(!e.body)return;let{firstAccessor:r,secondAccessor:i,getAccessor:o,setAccessor:s}=kT(t.members,e),l=bf(r)?r:i&&bf(i)?i:void 0;if(!l||e!==l)return;let f=Uy(l),d=IK(s);if(!(!vt(f)&&!vt(d)))return{decorators:f,parameters:d,getDecorators:o&&Uy(o),setDecorators:s&&Uy(s)}}function q_e(e){if(!e.body)return;let t=Uy(e),r=IK(e);if(!(!vt(t)&&!vt(r)))return{decorators:t,parameters:r}}function GPe(e){let t=Uy(e);if(vt(t))return{decorators:t}}function X_e(e,t){for(;e;){let r=t(e);if(r!==void 0)return r;e=e.previous}}function Y_e(e){return{data:e}}function kK(e,t){var r,i;return tS(t)?(r=e?.generatedIdentifiers)==null?void 0:r.get(I3(t)):(i=e?.identifiers)==null?void 0:i.get(t.escapedText)}function JT(e,t,r){var i,o;tS(t)?((i=e.generatedIdentifiers)!=null||(e.generatedIdentifiers=new Map),e.generatedIdentifiers.set(I3(t),r)):((o=e.identifiers)!=null||(e.identifiers=new Map),e.identifiers.set(t.escapedText,r))}function $_e(e,t){return X_e(e,r=>kK(r.privateEnv,t))}var BPe=gt({\"src/compiler/transformers/utilities.ts\"(){\"use strict\";fa()}});function KT(e,t,r,i,o,s){let l=e,f;if(Fg(e))for(f=e.right;Zce(e.left)||dW(e.left);)if(Fg(f))l=e=f,f=e.right;else return L.checkDefined($e(f,t,ot));let d,g={context:r,level:i,downlevelIteration:!!r.getCompilerOptions().downlevelIteration,hoistTempVariables:!0,emitExpression:m,emitBindingOrAssignment:v,createArrayBindingOrAssignmentPattern:S=>KPe(r.factory,S),createObjectBindingOrAssignmentPattern:S=>XPe(r.factory,S),createArrayBindingOrAssignmentElement:$Pe,visitor:t};if(f&&(f=$e(f,t,ot),L.assert(f),Re(f)&&DK(e,f.escapedText)||wK(e)?f=qT(g,f,!1,l):o?f=qT(g,f,!0,l):ws(e)&&(l=f)),M2(g,e,f,l,Fg(e)),f&&o){if(!vt(d))return f;d.push(f)}return r.factory.inlineExpressions(d)||r.factory.createOmittedExpression();function m(S){d=Sn(d,S)}function v(S,x,A,w){L.assertNode(S,s?Re:ot);let C=s?s(S,x,A):it(r.factory.createAssignment(L.checkDefined($e(S,t,ot)),x),A);C.original=w,m(C)}}function DK(e,t){let r=iv(e);return kw(r)?UPe(r,t):Re(r)?r.escapedText===t:!1}function UPe(e,t){let r=I2(e);for(let i of r)if(DK(i,t))return!0;return!1}function wK(e){let t=A3(e);if(t&&ts(t)&&!fT(t.expression))return!0;let r=iv(e);return!!r&&kw(r)&&VPe(r)}function VPe(e){return!!mn(I2(e),wK)}function eE(e,t,r,i,o,s=!1,l){let f,d=[],g=[],m={context:r,level:i,downlevelIteration:!!r.getCompilerOptions().downlevelIteration,hoistTempVariables:s,emitExpression:v,emitBindingOrAssignment:S,createArrayBindingOrAssignmentPattern:x=>JPe(r.factory,x),createObjectBindingOrAssignmentPattern:x=>qPe(r.factory,x),createArrayBindingOrAssignmentElement:x=>YPe(r.factory,x),visitor:t};if(wi(e)){let x=AO(e);x&&(Re(x)&&DK(e,x.escapedText)||wK(e))&&(x=qT(m,L.checkDefined($e(x,m.visitor,ot)),!1,x),e=r.factory.updateVariableDeclaration(e,e.name,void 0,void 0,x))}if(M2(m,e,o,e,l),f){let x=r.factory.createTempVariable(void 0);if(s){let A=r.factory.inlineExpressions(f);f=void 0,S(x,A,void 0,void 0)}else{r.hoistVariableDeclaration(x);let A=To(d);A.pendingExpressions=Sn(A.pendingExpressions,r.factory.createAssignment(x,A.value)),si(A.pendingExpressions,f),A.value=x}}for(let{pendingExpressions:x,name:A,value:w,location:C,original:P}of d){let F=r.factory.createVariableDeclaration(A,void 0,void 0,x?r.factory.inlineExpressions(Sn(x,w)):w);F.original=P,it(F,C),g.push(F)}return g;function v(x){f=Sn(f,x)}function S(x,A,w,C){L.assertNode(x,Mm),f&&(A=r.factory.inlineExpressions(Sn(f,A)),f=void 0),d.push({pendingExpressions:f,name:x,value:A,location:w,original:C})}}function M2(e,t,r,i,o){let s=iv(t);if(!o){let l=$e(AO(t),e.visitor,ot);l?r?(r=WPe(e,r,l,i),!Ap(l)&&kw(s)&&(r=qT(e,r,!0,i))):r=l:r||(r=e.context.factory.createVoidZero())}Uj(s)?jPe(e,t,s,r,i):Vj(s)?HPe(e,t,s,r,i):e.emitBindingOrAssignment(s,r,i,t)}function jPe(e,t,r,i,o){let s=I2(r),l=s.length;if(l!==1){let g=!Lw(t)||l!==0;i=qT(e,i,g,o)}let f,d;for(let g=0;g<l;g++){let m=s[g];if(x3(m)){if(g===l-1){f&&(e.emitBindingOrAssignment(e.createObjectBindingOrAssignmentPattern(f),i,o,r),f=void 0);let v=e.context.getEmitHelperFactory().createRestHelper(i,s,d,r);M2(e,m,v,m)}}else{let v=rJ(m);if(e.level>=1&&!(m.transformFlags&98304)&&!(iv(m).transformFlags&98304)&&!ts(v))f=Sn(f,$e(m,e.visitor,use));else{f&&(e.emitBindingOrAssignment(e.createObjectBindingOrAssignmentPattern(f),i,o,r),f=void 0);let S=zPe(e,i,v);ts(v)&&(d=Sn(d,S.argumentExpression)),M2(e,m,S,m)}}}f&&e.emitBindingOrAssignment(e.createObjectBindingOrAssignmentPattern(f),i,o,r)}function HPe(e,t,r,i,o){let s=I2(r),l=s.length;if(e.level<1&&e.downlevelIteration)i=qT(e,it(e.context.getEmitHelperFactory().createReadHelper(i,l>0&&x3(s[l-1])?void 0:l),o),!1,o);else if(l!==1&&(e.level<1||l===0)||Ji(s,ol)){let g=!Lw(t)||l!==0;i=qT(e,i,g,o)}let f,d;for(let g=0;g<l;g++){let m=s[g];if(e.level>=1)if(m.transformFlags&65536||e.hasTransformedPriorElement&&!Q_e(m)){e.hasTransformedPriorElement=!0;let v=e.context.factory.createTempVariable(void 0);e.hoistTempVariables&&e.context.hoistVariableDeclaration(v),d=Sn(d,[v,m]),f=Sn(f,e.createArrayBindingOrAssignmentElement(v))}else f=Sn(f,m);else{if(ol(m))continue;if(x3(m)){if(g===l-1){let v=e.context.factory.createArraySliceCall(i,g);M2(e,m,v,m)}}else{let v=e.context.factory.createElementAccessExpression(i,g);M2(e,m,v,m)}}}if(f&&e.emitBindingOrAssignment(e.createArrayBindingOrAssignmentPattern(f),i,o,r),d)for(let[g,m]of d)M2(e,m,g,m)}function Q_e(e){let t=iv(e);if(!t||ol(t))return!0;let r=A3(e);if(r&&!c_(r))return!1;let i=AO(e);return i&&!Ap(i)?!1:kw(t)?Ji(I2(t),Q_e):Re(t)}function WPe(e,t,r,i){return t=qT(e,t,!0,i),e.context.factory.createConditionalExpression(e.context.factory.createTypeCheck(t,\"undefined\"),void 0,r,void 0,t)}function zPe(e,t,r){if(ts(r)){let i=qT(e,L.checkDefined($e(r.expression,e.visitor,ot)),!1,r);return e.context.factory.createElementAccessExpression(t,i)}else if(yf(r)){let i=D.cloneNode(r);return e.context.factory.createElementAccessExpression(t,i)}else{let i=e.context.factory.createIdentifier(vr(r));return e.context.factory.createPropertyAccessExpression(t,i)}}function qT(e,t,r,i){if(Re(t)&&r)return t;{let o=e.context.factory.createTempVariable(void 0);return e.hoistTempVariables?(e.context.hoistVariableDeclaration(o),e.emitExpression(it(e.context.factory.createAssignment(o,t),i))):e.emitBindingOrAssignment(o,t,i,void 0),o}}function JPe(e,t){return L.assertEachNode(t,c6),e.createArrayBindingPattern(t)}function KPe(e,t){return L.assertEachNode(t,ww),e.createArrayLiteralExpression(on(t,e.converters.convertToArrayAssignmentElement))}function qPe(e,t){return L.assertEachNode(t,Wo),e.createObjectBindingPattern(t)}function XPe(e,t){return L.assertEachNode(t,Dw),e.createObjectLiteralExpression(on(t,e.converters.convertToObjectAssignmentElement))}function YPe(e,t){return e.createBindingElement(void 0,void 0,t)}function $Pe(e){return e}var RK,QPe=gt({\"src/compiler/transformers/destructuring.ts\"(){\"use strict\";fa(),RK=(e=>(e[e.All=0]=\"All\",e[e.ObjectRest=1]=\"ObjectRest\",e))(RK||{})}});function OK(e,t,r,i,o,s){let l=$e(t.tag,r,ot);L.assert(l);let f=[void 0],d=[],g=[],m=t.template;if(s===0&&!KH(m))return xn(t,r,e);if(IS(m))d.push(NK(m)),g.push(PK(m,i));else{d.push(NK(m.head)),g.push(PK(m.head,i));for(let S of m.templateSpans)d.push(NK(S.literal)),g.push(PK(S.literal,i)),f.push(L.checkDefined($e(S.expression,r,ot)))}let v=e.getEmitHelperFactory().createTemplateObjectHelper(D.createArrayLiteralExpression(d),D.createArrayLiteralExpression(g));if(Lc(i)){let S=D.createUniqueName(\"templateObject\");o(S),f[0]=D.createLogicalOr(S,D.createAssignment(S,v))}else f[0]=v;return D.createCallExpression(l,void 0,f)}function NK(e){return e.templateFlags?D.createVoidZero():D.createStringLiteral(e.text)}function PK(e,t){let r=e.rawText;if(r===void 0){L.assertIsDefined(t,\"Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform.\"),r=k0(t,e);let i=e.kind===14||e.kind===17;r=r.substring(1,r.length-(i?1:2))}return r=r.replace(/\\r\\n?/g,`\n`),it(D.createStringLiteral(r),e)}var MK,ZPe=gt({\"src/compiler/transformers/taggedTemplate.ts\"(){\"use strict\";fa(),MK=(e=>(e[e.LiftRestriction=0]=\"LiftRestriction\",e[e.All=1]=\"All\",e))(MK||{})}});function Z_e(e){let{factory:t,getEmitHelperFactory:r,startLexicalEnvironment:i,resumeLexicalEnvironment:o,endLexicalEnvironment:s,hoistVariableDeclaration:l}=e,f=e.getEmitResolver(),d=e.getCompilerOptions(),g=Do(d),m=Rl(d),v=!!d.experimentalDecorators,S=d.emitDecoratorMetadata?npe(e):void 0,x=e.onEmitNode,A=e.onSubstituteNode;e.onEmitNode=bl,e.onSubstituteNode=ss,e.enableSubstitution(208),e.enableSubstitution(209);let w,C,P,F,B,q,W,Y;return R;function R(K){return K.kind===309?ie(K):$(K)}function ie(K){return t.createBundle(K.sourceFiles.map($),Zi(K.prepends,Xe=>Xe.kind===311?fz(Xe,\"js\"):Xe))}function $(K){if(K.isDeclarationFile)return K;w=K;let Xe=fe(K,Ye);return Bg(Xe,e.readEmitHelpers()),w=void 0,Xe}function fe(K,Xe){let ft=F,Yt=B,pr=q;Z(K);let yr=Xe(K);return F!==ft&&(B=Yt),F=ft,q=pr,yr}function Z(K){switch(K.kind){case 308:case 266:case 265:case 238:F=K,B=void 0;break;case 260:case 259:if(Mr(K,2))break;K.name?Te(K):L.assert(K.kind===260||Mr(K,1024));break}}function U(K){return fe(K,re)}function re(K){return K.transformFlags&1?Le(K):K}function le(K){return fe(K,_e)}function _e(K){switch(K.kind){case 269:case 268:case 274:case 275:return ge(K);default:return re(K)}}function ge(K){if(ea(K)!==K)return K.transformFlags&1?xn(K,U,e):K;switch(K.kind){case 269:return jr(K);case 268:return Qr(K);case 274:return Ja(K);case 275:return Za(K);default:L.fail(\"Unhandled ellided statement\")}}function X(K){return fe(K,Ve)}function Ve(K){if(!(K.kind===275||K.kind===269||K.kind===270||K.kind===268&&K.moduleReference.kind===280))return K.transformFlags&1||Mr(K,1)?Le(K):K}function we(K){return Xe=>fe(Xe,ft=>ke(ft,K))}function ke(K,Xe){switch(K.kind){case 173:return hi(K);case 169:return Kn(K,Xe);case 174:return dr(K,Xe);case 175:return Cr(K,Xe);case 171:return Ht(K,Xe);case 172:return xn(K,U,e);case 237:return K;case 178:return;default:return L.failBadSyntaxKind(K)}}function Pe(K){return Xe=>fe(Xe,ft=>Ce(ft,K))}function Ce(K,Xe){switch(K.kind){case 299:case 300:case 301:return U(K);case 174:return dr(K,Xe);case 175:return Cr(K,Xe);case 171:return Ht(K,Xe);default:return L.failBadSyntaxKind(K)}}function Ie(K){return du(K)?void 0:U(K)}function Be(K){return Ha(K)?void 0:U(K)}function Ne(K){if(!du(K)&&!(gS(K.kind)&117086)&&!(C&&K.kind===93))return K}function Le(K){if(ca(K)&&Mr(K,2))return t.createNotEmittedStatement(K);switch(K.kind){case 93:case 88:return C?void 0:K;case 123:case 121:case 122:case 126:case 161:case 85:case 136:case 146:case 101:case 145:case 185:case 186:case 187:case 188:case 184:case 179:case 165:case 131:case 157:case 134:case 152:case 148:case 144:case 114:case 153:case 182:case 181:case 183:case 180:case 189:case 190:case 191:case 193:case 194:case 195:case 196:case 197:case 198:case 178:return;case 262:return t.createNotEmittedStatement(K);case 267:return;case 261:return t.createNotEmittedStatement(K);case 260:return qe(K);case 228:return Qt(K);case 294:return Dt(K);case 230:return pn(K);case 207:return _t(K);case 173:case 169:case 171:case 174:case 175:case 172:return L.fail(\"Class and object literal elements must be visited with their respective visitors\");case 259:return Se(K);case 215:return at(K);case 216:return Tt(K);case 166:return ve(K);case 214:return ue(K);case 213:case 231:return G(K);case 235:return je(K);case 210:return Ge(K);case 211:return kt(K);case 212:return Kt(K);case 232:return Oe(K);case 263:return rt(K);case 240:return nt(K);case 257:return Q(K);case 264:return Qe(K);case 268:return Qr(K);case 282:return ln(K);case 283:return ir(K);default:return xn(K,U,e)}}function Ye(K){let Xe=Uf(d,\"alwaysStrict\")&&!(Lc(K)&&m>=5)&&!Mf(K);return t.updateSourceFile(K,mF(K.statements,le,e,0,Xe))}function _t(K){return t.updateObjectLiteralExpression(K,On(K.properties,Pe(K),Og))}function ct(K){let Xe=0;vt(CK(K,!0,!0))&&(Xe|=1);let ft=hp(K);return ft&&ql(ft.expression).kind!==104&&(Xe|=64),O0(v,K)&&(Xe|=2),kI(v,K)&&(Xe|=4),Wi(K)?Xe|=8:kc(K)?Xe|=32:Ki(K)&&(Xe|=16),Xe}function Rt(K){return!!(K.transformFlags&8192)}function We(K){return bf(K)||vt(K.typeParameters)||vt(K.heritageClauses,Rt)||vt(K.members,Rt)}function qe(K){var Xe;let ft=ct(K),Yt=g<=1&&!!(ft&7);if(!We(K)&&!O0(v,K)&&!Wi(K))return t.updateClassDeclaration(K,On(K.modifiers,Ne,Ha),K.name,void 0,On(K.heritageClauses,U,dd),On(K.members,we(K),_l));Yt&&e.startLexicalEnvironment();let pr=Yt||ft&8||ft&2&&v||ft&1,yr=pr?On(K.modifiers,Be,Ns):On(K.modifiers,U,Ns);ft&2&&(yr=kn(yr,K));let Go=pr&&!K.name||ft&4||ft&1?(Xe=K.name)!=null?Xe:t.getGeneratedNameForNode(K):K.name,Ka=t.updateClassDeclaration(K,yr,Go,void 0,On(K.heritageClauses,U,dd),tn(K)),vo=Ya(K);ft&1&&(vo|=64),Jn(Ka,vo);let ka;if(Yt){let Hs=[Ka],Uc=_W(xo(w.text,K.members.end),19),Gu=t.getInternalName(K),$o=t.createPartiallyEmittedExpression(Gu);r2($o,Uc.end),Jn($o,3072);let jo=t.createReturnStatement($o);aL(jo,Uc.pos),Jn(jo,3840),Hs.push(jo),em(Hs,e.endLexicalEnvironment());let Ws=t.createImmediatelyInvokedArrowFunction(Hs);eO(Ws,1);let hd=ft&16?t.createModifiersFromModifierFlags(1):void 0,vc=t.createVariableStatement(hd,t.createVariableDeclarationList([t.createVariableDeclaration(t.getLocalName(K,!1,!1),void 0,void 0,Ws)],1));Ir(vc,K),hl(vc,K),Ho(vc,$y(K)),mu(vc),ka=vc}else ka=Ka;if(pr){if(ft&8)return zt(ka,Ps(K));if(ft&32)return zt(ka,t.createExportDefault(t.getLocalName(K,!1,!0)));if(ft&16&&!Yt)return zt(ka,t.createExternalModuleExport(t.getLocalName(K,!1,!0)))}return ka}function zt(K,Xe){return bp(K,8388608),[K,Xe,t.createEndOfDeclarationMarker(K)]}function Qt(K){let Xe=On(K.modifiers,Be,Ns);return O0(v,K)&&(Xe=kn(Xe,K)),t.updateClassExpression(K,Xe,K.name,void 0,On(K.heritageClauses,U,dd),tn(K))}function tn(K){let Xe=On(K.members,we(K),_l),ft,Yt=Vm(K),pr=Yt&&Pr(Yt.parameters,yr=>Ad(yr,Yt));if(pr)for(let yr of pr){let ta=t.createPropertyDeclaration(void 0,yr.name,void 0,void 0,void 0);Ir(ta,yr),ft=Sn(ft,ta)}return ft?(ft=si(ft,Xe),it(t.createNodeArray(ft),K.members)):Xe}function kn(K,Xe){let ft=Gt(Xe,Xe);if(vt(ft)){let Yt=[];si(Yt,v8(K,oJ)),si(Yt,Pr(K,du)),si(Yt,ft),si(Yt,Pr(Nae(K,oJ),Ha)),K=it(t.createNodeArray(Yt),K)}return K}function _n(K,Xe,ft){if(Yr(ft)&&AH(v,Xe,ft)){let Yt=Gt(Xe,ft);if(vt(Yt)){let pr=[];si(pr,Pr(K,du)),si(pr,Yt),si(pr,Pr(K,Ha)),K=it(t.createNodeArray(pr),K)}}return K}function Gt(K,Xe){if(v)return epe?ui(K,Xe):$n(K,Xe)}function $n(K,Xe){if(S){let ft;if(Ni(K)){let Yt=r().createMetadataHelper(\"design:type\",S.serializeTypeOfNode({currentLexicalScope:F,currentNameScope:Xe},K));ft=Sn(ft,t.createDecorator(Yt))}if(gr(K)){let Yt=r().createMetadataHelper(\"design:paramtypes\",S.serializeParameterTypesOfNode({currentLexicalScope:F,currentNameScope:Xe},K,Xe));ft=Sn(ft,t.createDecorator(Yt))}if(Pi(K)){let Yt=r().createMetadataHelper(\"design:returntype\",S.serializeReturnTypeOfNode({currentLexicalScope:F,currentNameScope:Xe},K));ft=Sn(ft,t.createDecorator(Yt))}return ft}}function ui(K,Xe){if(S){let ft;if(Ni(K)){let Yt=t.createPropertyAssignment(\"type\",t.createArrowFunction(void 0,void 0,[],void 0,t.createToken(38),S.serializeTypeOfNode({currentLexicalScope:F,currentNameScope:Xe},K)));ft=Sn(ft,Yt)}if(gr(K)){let Yt=t.createPropertyAssignment(\"paramTypes\",t.createArrowFunction(void 0,void 0,[],void 0,t.createToken(38),S.serializeParameterTypesOfNode({currentLexicalScope:F,currentNameScope:Xe},K,Xe)));ft=Sn(ft,Yt)}if(Pi(K)){let Yt=t.createPropertyAssignment(\"returnType\",t.createArrowFunction(void 0,void 0,[],void 0,t.createToken(38),S.serializeReturnTypeOfNode({currentLexicalScope:F,currentNameScope:Xe},K)));ft=Sn(ft,Yt)}if(ft){let Yt=r().createMetadataHelper(\"design:typeinfo\",t.createObjectLiteralExpression(ft,!0));return[t.createDecorator(Yt)]}}}function Ni(K){let Xe=K.kind;return Xe===171||Xe===174||Xe===175||Xe===169}function Pi(K){return K.kind===171}function gr(K){switch(K.kind){case 260:case 228:return Vm(K)!==void 0;case 171:case 174:case 175:return!0}return!1}function pt(K,Xe){let ft=K.name;return pi(ft)?t.createIdentifier(\"\"):ts(ft)?Xe&&!Ap(ft.expression)?t.getGeneratedNameForNode(ft):ft.expression:Re(ft)?t.createStringLiteral(vr(ft)):t.cloneNode(ft)}function nn(K){let Xe=K.name;if(ts(Xe)&&(!zc(K)&&q||bf(K)&&v)){let ft=$e(Xe.expression,U,ot);L.assert(ft);let Yt=a_(ft);if(!Ap(Yt)){let pr=t.getGeneratedNameForNode(Xe);return l(pr),t.updateComputedPropertyName(Xe,t.createAssignment(pr,ft))}}return L.checkDefined($e(Xe,U,Ys))}function Dt(K){if(K.token!==117)return xn(K,U,e)}function pn(K){return t.updateExpressionWithTypeArguments(K,L.checkDefined($e(K.expression,U,Ju)),void 0)}function An(K){return!rc(K.body)}function Kn(K,Xe){let ft=K.flags&16777216||Mr(K,256);if(ft&&!(v&&bf(K)))return;let Yt=Yr(Xe)?ft?On(K.modifiers,Be,Ns):On(K.modifiers,U,Ns):On(K.modifiers,Ie,Ns);return Yt=_n(Yt,K,Xe),ft?t.updatePropertyDeclaration(K,Qi(Yt,t.createModifiersFromModifierFlags(2)),L.checkDefined($e(K.name,U,Ys)),void 0,void 0,void 0):t.updatePropertyDeclaration(K,Yt,nn(K),void 0,void 0,$e(K.initializer,U,ot))}function hi(K){if(An(K))return t.updateConstructorDeclaration(K,void 0,Sc(K.parameters,U,e),ri(K.body,K))}function ri(K,Xe){let ft=Xe&&Pr(Xe.parameters,vo=>Ad(vo,Xe));if(!vt(ft))return Zd(K,U,e);let Yt=[];o();let pr=t.copyPrologue(K.statements,Yt,!1,U),yr=bF(K.statements,pr);yr>=0&&si(Yt,On(K.statements,U,ca,pr,yr+1-pr));let ta=Zi(ft,vn);yr>=0?si(Yt,ta):Yt=[...Yt.slice(0,pr),...ta,...Yt.slice(pr)];let Go=yr>=0?yr+1:pr;si(Yt,On(K.statements,U,ca,Go)),Yt=t.mergeLexicalEnvironment(Yt,s());let Ka=t.createBlock(it(t.createNodeArray(Yt),K.statements),!0);return it(Ka,K),Ir(Ka,K),Ka}function vn(K){let Xe=K.name;if(!Re(Xe))return;let ft=go(it(t.cloneNode(Xe),Xe),Xe.parent);Jn(ft,3168);let Yt=go(it(t.cloneNode(Xe),Xe),Xe.parent);return Jn(Yt,3072),mu(ZR(it(Ir(t.createExpressionStatement(t.createAssignment(it(t.createPropertyAccessExpression(t.createThis(),ft),K.name),Yt)),K),fb(K,-1))))}function Ht(K,Xe){if(!(K.transformFlags&1))return K;if(!An(K))return;let ft=Yr(Xe)?On(K.modifiers,U,Ns):On(K.modifiers,Ie,Ns);return ft=_n(ft,K,Xe),t.updateMethodDeclaration(K,ft,K.asteriskToken,nn(K),void 0,void 0,Sc(K.parameters,U,e),void 0,Zd(K.body,U,e))}function En(K){return!(rc(K.body)&&Mr(K,256))}function dr(K,Xe){if(!(K.transformFlags&1))return K;if(!En(K))return;let ft=Yr(Xe)?On(K.modifiers,U,Ns):On(K.modifiers,Ie,Ns);return ft=_n(ft,K,Xe),t.updateGetAccessorDeclaration(K,ft,nn(K),Sc(K.parameters,U,e),void 0,Zd(K.body,U,e)||t.createBlock([]))}function Cr(K,Xe){if(!(K.transformFlags&1))return K;if(!En(K))return;let ft=Yr(Xe)?On(K.modifiers,U,Ns):On(K.modifiers,Ie,Ns);return ft=_n(ft,K,Xe),t.updateSetAccessorDeclaration(K,ft,nn(K),Sc(K.parameters,U,e),Zd(K.body,U,e)||t.createBlock([]))}function Se(K){if(!An(K))return t.createNotEmittedStatement(K);let Xe=t.updateFunctionDeclaration(K,On(K.modifiers,Ne,Ha),K.asteriskToken,K.name,void 0,Sc(K.parameters,U,e),void 0,Zd(K.body,U,e)||t.createBlock([]));if(Wi(K)){let ft=[Xe];return mc(ft,K),ft}return Xe}function at(K){return An(K)?t.updateFunctionExpression(K,On(K.modifiers,Ne,Ha),K.asteriskToken,K.name,void 0,Sc(K.parameters,U,e),void 0,Zd(K.body,U,e)||t.createBlock([])):t.createOmittedExpression()}function Tt(K){return t.updateArrowFunction(K,On(K.modifiers,Ne,Ha),void 0,Sc(K.parameters,U,e),void 0,K.equalsGreaterThanToken,Zd(K.body,U,e))}function ve(K){if(G0(K))return;let Xe=t.updateParameterDeclaration(K,On(K.modifiers,ft=>du(ft)?U(ft):void 0,Ns),K.dotDotDotToken,L.checkDefined($e(K.name,U,Mm)),void 0,void 0,$e(K.initializer,U,ot));return Xe!==K&&(hl(Xe,K),it(Xe,yp(K)),Ho(Xe,yp(K)),Jn(Xe.name,64)),Xe}function nt(K){if(Wi(K)){let Xe=qI(K.declarationList);return Xe.length===0?void 0:it(t.createExpressionStatement(t.inlineExpressions(on(Xe,ce))),K)}else return xn(K,U,e)}function ce(K){let Xe=K.name;return La(Xe)?KT(K,U,e,0,!1,hc):it(t.createAssignment(ro(Xe),L.checkDefined($e(K.initializer,U,ot))),K)}function Q(K){let Xe=t.updateVariableDeclaration(K,L.checkDefined($e(K.name,U,Mm)),void 0,void 0,$e(K.initializer,U,ot));return K.type&&yue(Xe.name,K.type),Xe}function ue(K){let Xe=ql(K.expression,-7);if(pT(Xe)){let ft=$e(K.expression,U,ot);return L.assert(ft),t.createPartiallyEmittedExpression(ft,K)}return xn(K,U,e)}function G(K){let Xe=$e(K.expression,U,ot);return L.assert(Xe),t.createPartiallyEmittedExpression(Xe,K)}function Oe(K){let Xe=$e(K.expression,U,Ju);return L.assert(Xe),t.createPartiallyEmittedExpression(Xe,K)}function je(K){let Xe=$e(K.expression,U,ot);return L.assert(Xe),t.createPartiallyEmittedExpression(Xe,K)}function Ge(K){return t.updateCallExpression(K,L.checkDefined($e(K.expression,U,ot)),void 0,On(K.arguments,U,ot))}function kt(K){return t.updateNewExpression(K,L.checkDefined($e(K.expression,U,ot)),void 0,On(K.arguments,U,ot))}function Kt(K){return t.updateTaggedTemplateExpression(K,L.checkDefined($e(K.tag,U,ot)),void 0,L.checkDefined($e(K.template,U,AA)))}function ln(K){return t.updateJsxSelfClosingElement(K,L.checkDefined($e(K.tagName,U,bI)),void 0,L.checkDefined($e(K.attributes,U,K0)))}function ir(K){return t.updateJsxOpeningElement(K,L.checkDefined($e(K.tagName,U,bI)),void 0,L.checkDefined($e(K.attributes,U,K0)))}function ae(K){return!R0(K)||U0(d)}function rt(K){if(!ae(K))return t.createNotEmittedStatement(K);let Xe=[],ft=4,Yt=lt(Xe,K);Yt&&(m!==4||F!==w)&&(ft|=1024);let pr=aa(K),yr=Co(K),ta=Mr(K,1)?t.getExternalModuleOrNamespaceExportName(P,K,!1,!0):t.getLocalName(K,!1,!0),Go=t.createLogicalOr(ta,t.createAssignment(ta,t.createObjectLiteralExpression()));if(z(K)){let vo=t.getLocalName(K,!1,!0);Go=t.createAssignment(vo,Go)}let Ka=t.createExpressionStatement(t.createCallExpression(t.createFunctionExpression(void 0,void 0,void 0,void 0,[t.createParameterDeclaration(void 0,void 0,pr)],void 0,Ot(K,yr)),void 0,[Go]));return Ir(Ka,K),Yt&&(W0(Ka,void 0),u2(Ka,void 0)),it(Ka,K),bp(Ka,ft),Xe.push(Ka),Xe.push(t.createEndOfDeclarationMarker(K)),Xe}function Ot(K,Xe){let ft=P;P=Xe;let Yt=[];i();let pr=on(K.members,Ke);return em(Yt,s()),si(Yt,pr),P=ft,t.createBlock(it(t.createNodeArray(Yt),K.members),!0)}function Ke(K){let Xe=pt(K,!1),ft=oe(K),Yt=t.createAssignment(t.createElementAccessExpression(P,Xe),ft),pr=ft.kind===10?Yt:t.createAssignment(t.createElementAccessExpression(P,Yt),Xe);return it(t.createExpressionStatement(it(pr,K)),K)}function oe(K){let Xe=f.getConstantValue(K);return Xe!==void 0?typeof Xe==\"string\"?t.createStringLiteral(Xe):t.createNumericLiteral(Xe):(gc(),K.initializer?L.checkDefined($e(K.initializer,U,ot)):t.createVoidZero())}function pe(K){let Xe=ea(K,Tc);return Xe?fK(Xe,U0(d)):!0}function z(K){return Wi(K)||gn(K)&&m!==5&&m!==6&&m!==7&&m!==99&&m!==4}function Te(K){B||(B=new Map);let Xe=yt(K);B.has(Xe)||B.set(Xe,K)}function j(K){if(B){let Xe=yt(K);return B.get(Xe)===K}return!0}function yt(K){return L.assertNode(K.name,Re),K.name.escapedText}function lt(K,Xe){let ft=t.createVariableStatement(On(Xe.modifiers,Ne,Ha),t.createVariableDeclarationList([t.createVariableDeclaration(t.getLocalName(Xe,!1,!0))],F.kind===308?0:1));if(Ir(ft,Xe),Te(Xe),j(Xe))return Xe.kind===263?Ho(ft.declarationList,Xe):Ho(ft,Xe),hl(ft,Xe),bp(ft,8390656),K.push(ft),!0;{let Yt=t.createMergeDeclarationMarker(ft);return Jn(Yt,8391680),K.push(Yt),!1}}function Qe(K){if(!pe(K))return t.createNotEmittedStatement(K);L.assertNode(K.name,Re,\"A TypeScript namespace should have an Identifier name.\"),Ll();let Xe=[],ft=4,Yt=lt(Xe,K);Yt&&(m!==4||F!==w)&&(ft|=1024);let pr=aa(K),yr=Co(K),ta=Mr(K,1)?t.getExternalModuleOrNamespaceExportName(P,K,!1,!0):t.getLocalName(K,!1,!0),Go=t.createLogicalOr(ta,t.createAssignment(ta,t.createObjectLiteralExpression()));if(z(K)){let vo=t.getLocalName(K,!1,!0);Go=t.createAssignment(vo,Go)}let Ka=t.createExpressionStatement(t.createCallExpression(t.createFunctionExpression(void 0,void 0,void 0,void 0,[t.createParameterDeclaration(void 0,void 0,pr)],void 0,Vt(K,yr)),void 0,[Go]));return Ir(Ka,K),Yt&&(W0(Ka,void 0),u2(Ka,void 0)),it(Ka,K),bp(Ka,ft),Xe.push(Ka),Xe.push(t.createEndOfDeclarationMarker(K)),Xe}function Vt(K,Xe){let ft=P,Yt=C,pr=B;P=Xe,C=K,B=void 0;let yr=[];i();let ta,Go;if(K.body)if(K.body.kind===265)fe(K.body,vo=>si(yr,On(vo.statements,X,ca))),ta=K.body.statements,Go=K.body;else{let vo=Qe(K.body);vo&&(ba(vo)?si(yr,vo):yr.push(vo));let ka=Hn(K).body;ta=fb(ka.statements,-1)}em(yr,s()),P=ft,C=Yt,B=pr;let Ka=t.createBlock(it(t.createNodeArray(yr),ta),!0);return it(Ka,Go),(!K.body||K.body.kind!==265)&&Jn(Ka,Ya(Ka)|3072),Ka}function Hn(K){if(K.body.kind===264)return Hn(K.body)||K.body}function jr(K){if(!K.importClause)return K;if(K.importClause.isTypeOnly)return;let Xe=$e(K.importClause,ei,lm);return Xe||d.importsNotUsedAsValues===1||d.importsNotUsedAsValues===2?t.updateImportDeclaration(K,void 0,Xe,K.moduleSpecifier,K.assertClause):void 0}function ei(K){L.assert(!K.isTypeOnly);let Xe=wt(K)?K.name:void 0,ft=$e(K.namedBindings,Kr,Wj);return Xe||ft?t.updateImportClause(K,!1,Xe,ft):void 0}function Kr(K){if(K.kind===271)return wt(K)?K:void 0;{let Xe=d.verbatimModuleSyntax||d.preserveValueImports&&(d.importsNotUsedAsValues===1||d.importsNotUsedAsValues===2),ft=On(K.elements,Si,$u);return Xe||vt(ft)?t.updateNamedImports(K,ft):void 0}}function Si(K){return!K.isTypeOnly&&wt(K)?K:void 0}function Ja(K){return d.verbatimModuleSyntax||f.isValueAliasDeclaration(K)?xn(K,U,e):void 0}function Za(K){if(K.isTypeOnly)return;if(!K.exportClause||qm(K.exportClause))return K;let Xe=d.verbatimModuleSyntax||!!K.moduleSpecifier&&(d.importsNotUsedAsValues===1||d.importsNotUsedAsValues===2),ft=$e(K.exportClause,Yt=>xi(Yt,Xe),Rj);return ft?t.updateExportDeclaration(K,void 0,K.isTypeOnly,ft,K.moduleSpecifier,K.assertClause):void 0}function Fa(K,Xe){let ft=On(K.elements,Nr,Mu);return Xe||vt(ft)?t.updateNamedExports(K,ft):void 0}function Hi(K){return t.updateNamespaceExport(K,L.checkDefined($e(K.name,U,Re)))}function xi(K,Xe){return qm(K)?Hi(K):Fa(K,Xe)}function Nr(K){return!K.isTypeOnly&&(d.verbatimModuleSyntax||f.isValueAliasDeclaration(K))?K:void 0}function Fo(K){return wt(K)||!Lc(w)&&f.isTopLevelValueImportEqualsWithEntityName(K)}function Qr(K){if(K.isTypeOnly)return;if(ab(K)){let ft=wt(K);return!ft&&d.importsNotUsedAsValues===1?Ir(it(t.createImportDeclaration(void 0,void 0,K.moduleReference.expression,void 0),K),K):ft?xn(K,U,e):void 0}if(!Fo(K))return;let Xe=EO(t,K.moduleReference);return Jn(Xe,7168),Ki(K)||!Wi(K)?Ir(it(t.createVariableStatement(On(K.modifiers,Ne,Ha),t.createVariableDeclarationList([Ir(t.createVariableDeclaration(K.name,void 0,void 0,Xe),K)])),K),K):Ir(xc(K.name,Xe,K),K)}function Wi(K){return C!==void 0&&Mr(K,1)}function gn(K){return C===void 0&&Mr(K,1)}function Ki(K){return gn(K)&&!Mr(K,1024)}function kc(K){return gn(K)&&Mr(K,1024)}function Ps(K){let Xe=t.createAssignment(t.getExternalModuleOrNamespaceExportName(P,K,!1,!0),t.getLocalName(K));Ho(Xe,Gf(K.name?K.name.pos:K.pos,K.end));let ft=t.createExpressionStatement(Xe);return Ho(ft,Gf(-1,K.end)),ft}function mc(K,Xe){K.push(Ps(Xe))}function xc(K,Xe,ft){return it(t.createExpressionStatement(t.createAssignment(t.getNamespaceMemberName(P,K,!1,!0),Xe)),ft)}function hc(K,Xe,ft){return it(t.createAssignment(ro(K),Xe),ft)}function ro(K){return t.getNamespaceMemberName(P,K,!1,!0)}function aa(K){let Xe=t.getGeneratedNameForNode(K);return Ho(Xe,K.name),Xe}function Co(K){return t.getGeneratedNameForNode(K)}function gc(){W&8||(W|=8,e.enableSubstitution(79))}function Ll(){W&2||(W|=2,e.enableSubstitution(79),e.enableSubstitution(300),e.enableEmitNotification(264))}function md(K){return ec(K).kind===264}function Pc(K){return ec(K).kind===263}function bl(K,Xe,ft){let Yt=Y,pr=w;Li(Xe)&&(w=Xe),W&2&&md(Xe)&&(Y|=2),W&8&&Pc(Xe)&&(Y|=8),x(K,Xe,ft),Y=Yt,w=pr}function ss(K,Xe){return Xe=A(K,Xe),K===1?Rs(Xe):xf(Xe)?qs(Xe):Xe}function qs(K){if(W&2){let Xe=K.name,ft=jt(Xe);if(ft){if(K.objectAssignmentInitializer){let Yt=t.createAssignment(ft,K.objectAssignmentInitializer);return it(t.createPropertyAssignment(Xe,Yt),K)}return it(t.createPropertyAssignment(Xe,ft),K)}}return K}function Rs(K){switch(K.kind){case 79:return As(K);case 208:return yc(K);case 209:return Ql(K)}return K}function As(K){return jt(K)||K}function jt(K){if(W&Y&&!tc(K)&&!rv(K)){let Xe=f.getReferencedExportContainer(K,!1);if(Xe&&Xe.kind!==308&&(Y&2&&Xe.kind===264||Y&8&&Xe.kind===263))return it(t.createPropertyAccessExpression(t.getGeneratedNameForNode(Xe),K),K)}}function yc(K){return se(K)}function Ql(K){return se(K)}function yu(K){return K.replace(/\\*\\//g,\"*_/\")}function se(K){let Xe=ht(K);if(Xe!==void 0){hue(K,Xe);let ft=typeof Xe==\"string\"?t.createStringLiteral(Xe):t.createNumericLiteral(Xe);if(!d.removeComments){let Yt=ec(K,Us);R4(ft,3,` ${yu(Qc(Yt))} `)}return ft}return K}function ht(K){if(!d_(d))return br(K)||Vs(K)?f.getConstantValue(K):void 0}function wt(K){return d.verbatimModuleSyntax||Yn(K)||(d.preserveValueImports?f.isValueAliasDeclaration(K):f.isReferencedAliasDeclaration(K))}}var epe,eMe=gt({\"src/compiler/transformers/ts.ts\"(){\"use strict\";fa(),epe=!1}});function tpe(e){let{factory:t,getEmitHelperFactory:r,hoistVariableDeclaration:i,endLexicalEnvironment:o,startLexicalEnvironment:s,resumeLexicalEnvironment:l,addBlockScopedVariable:f}=e,d=e.getEmitResolver(),g=e.getCompilerOptions(),m=Do(g),v=MR(g),S=!!g.experimentalDecorators,x=!v,A=v&&m<9,w=x||A,C=m<9,P=m<99?-1:v?0:3,F=m<9,B=F&&m>=2,q=w||C||P===-1,W=e.onSubstituteNode;e.onSubstituteNode=As;let Y=e.onEmitNode;e.onEmitNode=Rs;let R=!1,ie,$,fe,Z,U,re=new Map,le,_e,ge=!1,X=!1;return y_(e,Ve);function Ve(se){if(se.isDeclarationFile||(U=void 0,R=!!(o_(se)&32),!q&&!R))return se;let ht=xn(se,ke,e);return Bg(ht,e.readEmitHelpers()),ht}function we(se){switch(se.kind){case 127:return Kn()?void 0:se;default:return zr(se,Ha)}}function ke(se){if(!(se.transformFlags&16777216)&&!(se.transformFlags&134234112))return se;switch(se.kind){case 127:return L.fail(\"Use `modifierVisitor` instead.\");case 260:return ae(se);case 228:return Ot(se,void 0);case 172:case 169:return L.fail(\"Use `classElementVisitor` instead.\");case 299:return We(se);case 240:return qe(se);case 257:return Qt(se);case 166:return tn(se);case 205:return kn(se);case 274:return _n(se);case 80:return ct(se);case 208:return Ht(se);case 209:return En(se);case 221:case 222:return dr(se,!1);case 223:return Q(se,!1);case 214:return G(se,!1,void 0);case 210:return Tt(se);case 241:return Se(se);case 212:return ve(se);case 245:return Cr(se);case 259:case 215:case 173:case 171:case 174:case 175:return gr(void 0,Pe,se);default:return Pe(se)}}function Pe(se){return xn(se,ke,e)}function Ce(se,ht){switch(se.kind){case 356:return Oe(se,!1,ht);case 214:return G(se,!1,ht);case 228:return Ot(se,ht);default:return ke(se)}}function Ie(se){switch(se.kind){case 221:case 222:return dr(se,!0);case 223:return Q(se,!0);case 357:return ue(se,!0);case 214:return G(se,!0,void 0);default:return ke(se)}}function Be(se){switch(se.kind){case 294:return xn(se,Be,e);case 230:return ln(se);default:return ke(se)}}function Ne(se){switch(se.kind){case 207:case 206:return qs(se);default:return ke(se)}}function Le(se){switch(se.kind){case 173:return ui(se);case 174:case 175:case 171:return gr(void 0,Pi,se);case 169:return gr(void 0,hi,se);case 172:return oe(se);case 164:return $n(se);case 237:return se;default:return Ns(se)?we(se):ke(se)}}function Ye(se){switch(se.kind){case 164:return $n(se);default:return ke(se)}}function _t(se){switch(se.kind){case 169:return An(se);case 174:case 175:return Le(se);default:L.assertMissingNode(se,\"Expected node to either be a PropertyDeclaration, GetAccessorDeclaration, or SetAccessorDeclaration\");break}}function ct(se){return!C||ca(se.parent)?se:Ir(t.createIdentifier(\"\"),se)}function Rt(se){let ht=hc(se.left);if(ht){let wt=$e(se.right,ke,ot);return Ir(r().createClassPrivateFieldInHelper(ht.brandCheckIdentifier,wt),se)}return xn(se,ke,e)}function We(se){if(vf(se,ce)){let{referencedName:ht,name:wt}=je(se.name),K=$e(se.initializer,Xe=>Ce(Xe,ht),ot);return t.updatePropertyAssignment(se,wt,K)}return xn(se,ke,e)}function qe(se){let ht=Z;Z=[];let wt=xn(se,ke,e),K=vt(Z)?[wt,...Z]:wt;return Z=ht,K}function zt(se,ht){let wt=ec(ht,Yr);return wt&&!wt.name&&Mr(wt,1024)?t.createStringLiteral(\"default\"):t.createStringLiteralFromNode(se)}function Qt(se){if(vf(se,ce)){let ht=zt(se.name,se.initializer),wt=$e(se.name,ke,Mm),K=$e(se.initializer,Xe=>Ce(Xe,ht),ot);return t.updateVariableDeclaration(se,wt,void 0,void 0,K)}return xn(se,ke,e)}function tn(se){if(vf(se,ce)){let ht=zt(se.name,se.initializer),wt=$e(se.name,ke,Mm),K=$e(se.initializer,Xe=>Ce(Xe,ht),ot);return t.updateParameterDeclaration(se,void 0,void 0,wt,void 0,void 0,K)}return xn(se,ke,e)}function kn(se){if(vf(se,ce)){let ht=zt(se.name,se.initializer),wt=$e(se.propertyName,ke,Ys),K=$e(se.name,ke,Mm),Xe=$e(se.initializer,ft=>Ce(ft,ht),ot);return t.updateBindingElement(se,void 0,wt,K,Xe)}return xn(se,ke,e)}function _n(se){if(vf(se,ce)){let ht=t.createStringLiteral(se.isExportEquals?\"\":\"default\"),wt=On(se.modifiers,we,Ha),K=$e(se.expression,Xe=>Ce(Xe,ht),ot);return t.updateExportAssignment(se,wt,K)}return xn(se,ke,e)}function Gt(se){return vt(fe)&&(ud(se)?(fe.push(se.expression),se=t.updateParenthesizedExpression(se,t.inlineExpressions(fe))):(fe.push(se),se=t.inlineExpressions(fe)),fe=void 0),se}function $n(se){let ht=$e(se.expression,ke,ot);return t.updateComputedPropertyName(se,Gt(ht))}function ui(se){return le?Te(se,le):Pe(se)}function Ni(se){return!!(C||zc(se)&&o_(se)&32)}function Pi(se){if(L.assert(!bf(se)),!xu(se)||!Ni(se))return xn(se,Le,e);let ht=hc(se.name);if(L.assert(ht,\"Undeclared private name for property declaration.\"),!ht.isValid)return se;let wt=pt(se);wt&&Nr().push(t.createAssignment(wt,t.createFunctionExpression(Pr(se.modifiers,K=>Ha(K)&&!LS(K)&&!Nue(K)),se.asteriskToken,wt,void 0,Sc(se.parameters,ke,e),void 0,Zd(se.body,ke,e))))}function gr(se,ht,wt){let K=_e;_e=se;let Xe=ht(wt);return _e=K,Xe}function pt(se){L.assert(pi(se.name));let ht=hc(se.name);if(L.assert(ht,\"Undeclared private name for property declaration.\"),ht.kind===\"m\")return ht.methodName;if(ht.kind===\"a\"){if(zy(se))return ht.getterName;if(Ng(se))return ht.setterName}}function nn(se){let ht=sm(se),wt=pb(se),K=se.name,Xe=K,ft=K;if(ts(K)&&!Ap(K.expression)){let Go=L3(K);if(Go)Xe=t.updateComputedPropertyName(K,$e(K.expression,ke,ot)),ft=t.updateComputedPropertyName(K,Go.left);else{let Ka=t.createTempVariable(i);Ho(Ka,K.expression);let vo=$e(K.expression,ke,ot),ka=t.createAssignment(Ka,vo);Ho(ka,K.expression),Xe=t.updateComputedPropertyName(K,ka),ft=t.updateComputedPropertyName(K,Ka)}}let Yt=On(se.modifiers,we,Ha),pr=sJ(t,se,Yt,se.initializer);Ir(pr,se),Jn(pr,3072),Ho(pr,wt);let yr=gde(t,se,Yt,Xe);Ir(yr,se),hl(yr,ht),Ho(yr,wt);let ta=yde(t,se,Yt,ft);return Ir(ta,se),Jn(ta,3072),Ho(ta,wt),vK([pr,yr,ta],_t,_l)}function Dt(se){if(Ni(se)){let ht=hc(se.name);if(L.assert(ht,\"Undeclared private name for property declaration.\"),!ht.isValid)return se;if(ht.isStatic&&!C){let wt=lt(se,t.createThis());if(wt)return t.createClassStaticBlockDeclaration(t.createBlock([wt],!0))}return}if(x&&!Ca(se)&&U?.data&&U.data.facts&16)return t.updatePropertyDeclaration(se,On(se.modifiers,ke,Ns),se.name,void 0,void 0,void 0);if(vf(se,ce)){let{referencedName:ht,name:wt}=je(se.name);return t.updatePropertyDeclaration(se,On(se.modifiers,we,Ha),wt,void 0,void 0,$e(se.initializer,K=>Ce(K,ht),ot))}return t.updatePropertyDeclaration(se,On(se.modifiers,we,Ha),$e(se.name,Ye,Ys),void 0,void 0,$e(se.initializer,ke,ot))}function pn(se){if(w&&!Id(se)){let ht=Ja(se.name,!!se.initializer||v,vf(se,ce));if(ht&&Nr().push(...vde(ht)),Ca(se)&&!C){let wt=lt(se,t.createThis());if(wt){let K=t.createClassStaticBlockDeclaration(t.createBlock([wt]));return Ir(K,se),hl(K,se),hl(wt,{pos:-1,end:-1}),W0(wt,void 0),u2(wt,void 0),K}}return}return t.updatePropertyDeclaration(se,On(se.modifiers,we,Ha),$e(se.name,Ye,Ys),void 0,void 0,$e(se.initializer,ke,ot))}function An(se){return L.assert(!bf(se),\"Decorators should already have been transformed and elided.\"),xu(se)?Dt(se):pn(se)}function Kn(){return P===-1||P===3&&!!U?.data&&!!(U.data.facts&16)}function hi(se){return Id(se)&&(Kn()||zc(se)&&o_(se)&32)?nn(se):An(se)}function ri(se,ht){return vn(se,$e(ht,ke,ot))}function vn(se,ht){switch(hl(ht,fb(ht,-1)),se.kind){case\"a\":return r().createClassPrivateFieldGetHelper(ht,se.brandCheckIdentifier,se.kind,se.getterName);case\"m\":return r().createClassPrivateFieldGetHelper(ht,se.brandCheckIdentifier,se.kind,se.methodName);case\"f\":return r().createClassPrivateFieldGetHelper(ht,se.brandCheckIdentifier,se.kind,se.isStatic?se.variableName:void 0);case\"untransformed\":return L.fail(\"Access helpers should not be created for untransformed private elements\");default:L.assertNever(se,\"Unknown private element type\")}}function Ht(se){if(pi(se.name)){let ht=hc(se.name);if(ht)return it(Ir(ri(ht,se.expression),se),se)}if(B&&Pu(se)&&Re(se.name)&&_e&&U?.data){let{classConstructor:ht,superClassReference:wt,facts:K}=U.data;if(K&1)return Si(se);if(ht&&wt){let Xe=t.createReflectGetCall(wt,t.createStringLiteralFromNode(se.name),ht);return Ir(Xe,se.expression),it(Xe,se.expression),Xe}}return xn(se,ke,e)}function En(se){if(B&&Pu(se)&&_e&&U?.data){let{classConstructor:ht,superClassReference:wt,facts:K}=U.data;if(K&1)return Si(se);if(ht&&wt){let Xe=t.createReflectGetCall(wt,$e(se.argumentExpression,ke,ot),ht);return Ir(Xe,se.expression),it(Xe,se.expression),Xe}}return xn(se,ke,e)}function dr(se,ht){if(se.operator===45||se.operator===46){let wt=vs(se.operand);if(TA(wt)){let K;if(K=hc(wt.name)){let Xe=$e(wt.expression,ke,ot),{readExpression:ft,initializeExpression:Yt}=at(Xe),pr=ri(K,ft),yr=tv(se)||ht?void 0:t.createTempVariable(i);return pr=b3(t,se,pr,i,yr),pr=Ge(K,Yt||ft,pr,63),Ir(pr,se),it(pr,se),yr&&(pr=t.createComma(pr,yr),it(pr,se)),pr}}else if(B&&Pu(wt)&&_e&&U?.data){let{classConstructor:K,superClassReference:Xe,facts:ft}=U.data;if(ft&1){let Yt=Si(wt);return tv(se)?t.updatePrefixUnaryExpression(se,Yt):t.updatePostfixUnaryExpression(se,Yt)}if(K&&Xe){let Yt,pr;if(br(wt)?Re(wt.name)&&(pr=Yt=t.createStringLiteralFromNode(wt.name)):Ap(wt.argumentExpression)?pr=Yt=wt.argumentExpression:(pr=t.createTempVariable(i),Yt=t.createAssignment(pr,$e(wt.argumentExpression,ke,ot))),Yt&&pr){let yr=t.createReflectGetCall(Xe,pr,K);it(yr,wt);let ta=ht?void 0:t.createTempVariable(i);return yr=b3(t,se,yr,i,ta),yr=t.createReflectSetCall(Xe,Yt,yr,K),Ir(yr,se),it(yr,se),ta&&(yr=t.createComma(yr,ta),it(yr,se)),yr}}}}return xn(se,ke,e)}function Cr(se){return t.updateForStatement(se,$e(se.initializer,Ie,pp),$e(se.condition,ke,ot),$e(se.incrementor,Ie,ot),jf(se.statement,ke,e))}function Se(se){return t.updateExpressionStatement(se,$e(se.expression,Ie,ot))}function at(se){let ht=ws(se)?se:t.cloneNode(se);if(Ap(se))return{readExpression:ht,initializeExpression:void 0};let wt=t.createTempVariable(i),K=t.createAssignment(wt,ht);return{readExpression:wt,initializeExpression:K}}function Tt(se){var ht;if(TA(se.expression)&&hc(se.expression.name)){let{thisArg:wt,target:K}=t.createCallBinding(se.expression,i,m);return dT(se)?t.updateCallChain(se,t.createPropertyAccessChain($e(K,ke,ot),se.questionDotToken,\"call\"),void 0,void 0,[$e(wt,ke,ot),...On(se.arguments,ke,ot)]):t.updateCallExpression(se,t.createPropertyAccessExpression($e(K,ke,ot),\"call\"),void 0,[$e(wt,ke,ot),...On(se.arguments,ke,ot)])}if(B&&Pu(se.expression)&&_e&&((ht=U?.data)!=null&&ht.classConstructor)){let wt=t.createFunctionCallCall($e(se.expression,ke,ot),U.data.classConstructor,On(se.arguments,ke,ot));return Ir(wt,se),it(wt,se),wt}return xn(se,ke,e)}function ve(se){var ht;if(TA(se.tag)&&hc(se.tag.name)){let{thisArg:wt,target:K}=t.createCallBinding(se.tag,i,m);return t.updateTaggedTemplateExpression(se,t.createCallExpression(t.createPropertyAccessExpression($e(K,ke,ot),\"bind\"),void 0,[$e(wt,ke,ot)]),void 0,$e(se.template,ke,AA))}if(B&&Pu(se.tag)&&_e&&((ht=U?.data)!=null&&ht.classConstructor)){let wt=t.createFunctionBindCall($e(se.tag,ke,ot),U.data.classConstructor,[]);return Ir(wt,se),it(wt,se),t.updateTaggedTemplateExpression(se,wt,void 0,$e(se.template,ke,AA))}return xn(se,ke,e)}function nt(se){if(U&&re.set(ec(se),U),C){s();let ht=gr(se,K=>On(K,ke,ca),se.body.statements);ht=t.mergeLexicalEnvironment(ht,o());let wt=t.createImmediatelyInvokedArrowFunction(ht);return Ir(wt,se),it(wt,se),bp(wt,4),wt}}function ce(se){if(_u(se)&&!se.name){let ht=EF(se),wt=wr(ht,oc);if(wt){for(let Xe of wt.body.statements)if(Ol(Xe)&&pL(Xe.expression,\"___setFunctionName\"))return!1}return(C||!!o_(se))&&vt(ht,Xe=>oc(Xe)||xu(Xe)||w&&sN(Xe))}return!1}function Q(se,ht){if(Fg(se)){let wt=fe;fe=void 0,se=t.updateBinaryExpression(se,$e(se.left,Ne,ot),se.operatorToken,$e(se.right,ke,ot));let K=vt(fe)?t.inlineExpressions(WD([...fe,se])):se;return fe=wt,K}if(Iu(se)){if(vf(se,ce)){let wt=zt(se.left,se.right),K=$e(se.left,ke,ot),Xe=$e(se.right,ft=>Ce(ft,wt),ot);return t.updateBinaryExpression(se,K,se.operatorToken,Xe)}if(TA(se.left)){let wt=hc(se.left.name);if(wt)return it(Ir(Ge(wt,se.left.expression,se.right,se.operatorToken.kind),se),se)}else if(B&&Pu(se.left)&&_e&&U?.data){let{classConstructor:wt,superClassReference:K,facts:Xe}=U.data;if(Xe&1)return t.updateBinaryExpression(se,Si(se.left),se.operatorToken,$e(se.right,ke,ot));if(wt&&K){let ft=Vs(se.left)?$e(se.left.argumentExpression,ke,ot):Re(se.left.name)?t.createStringLiteralFromNode(se.left.name):void 0;if(ft){let Yt=$e(se.right,ke,ot);if(oN(se.operatorToken.kind)){let yr=ft;Ap(ft)||(yr=t.createTempVariable(i),ft=t.createAssignment(yr,ft));let ta=t.createReflectGetCall(K,yr,wt);Ir(ta,se.left),it(ta,se.left),Yt=t.createBinaryExpression(ta,WL(se.operatorToken.kind),Yt),it(Yt,se)}let pr=ht?void 0:t.createTempVariable(i);return pr&&(Yt=t.createAssignment(pr,Yt),it(pr,se)),Yt=t.createReflectSetCall(K,ft,Yt,wt),Ir(Yt,se),it(Yt,se),pr&&(Yt=t.createComma(Yt,pr),it(Yt,se)),Yt}}}}return aMe(se)?Rt(se):xn(se,ke,e)}function ue(se,ht){let wt=ht?aN(se.elements,Ie):aN(se.elements,ke,Ie);return t.updateCommaListExpression(se,wt)}function G(se,ht,wt){let K=ht?Ie:wt?ft=>Ce(ft,wt):ke,Xe=$e(se.expression,K,ot);return t.updateParenthesizedExpression(se,Xe)}function Oe(se,ht,wt){let K=ht?Ie:wt?ft=>Ce(ft,wt):ke,Xe=$e(se.expression,K,ot);return t.updatePartiallyEmittedExpression(se,Xe)}function je(se){if(c_(se)||pi(se)){let ft=t.createStringLiteralFromNode(se),Yt=$e(se,ke,Ys);return{referencedName:ft,name:Yt}}if(c_(se.expression)&&!Re(se.expression)){let ft=t.createStringLiteralFromNode(se.expression),Yt=$e(se,ke,Ys);return{referencedName:ft,name:Yt}}let ht=t.createTempVariable(i),wt=r().createPropKeyHelper($e(se.expression,ke,ot)),K=t.createAssignment(ht,wt),Xe=t.updateComputedPropertyName(se,Gt(K));return{referencedName:ht,name:Xe}}function Ge(se,ht,wt,K){if(ht=$e(ht,ke,ot),wt=$e(wt,ke,ot),oN(K)){let{readExpression:Xe,initializeExpression:ft}=at(ht);ht=ft||Xe,wt=t.createBinaryExpression(vn(se,Xe),WL(K),wt)}switch(hl(ht,fb(ht,-1)),se.kind){case\"a\":return r().createClassPrivateFieldSetHelper(ht,se.brandCheckIdentifier,wt,se.kind,se.setterName);case\"m\":return r().createClassPrivateFieldSetHelper(ht,se.brandCheckIdentifier,wt,se.kind,void 0);case\"f\":return r().createClassPrivateFieldSetHelper(ht,se.brandCheckIdentifier,wt,se.kind,se.isStatic?se.variableName:void 0);case\"untransformed\":return L.fail(\"Access helpers should not be created for untransformed private elements\");default:L.assertNever(se,\"Unknown private element type\")}}function kt(se){return Pr(se.members,K_e)}function Kt(se){let ht=0,wt=ec(se);sl(wt)&&O0(S,wt)&&(ht|=1);let K=!1,Xe=!1,ft=!1,Yt=!1;for(let yr of se.members)Ca(yr)?(yr.name&&(pi(yr.name)||Id(yr))&&C&&(ht|=2),(Na(yr)||oc(yr))&&(F&&yr.transformFlags&16384&&(ht|=8,ht&1||(ht|=2)),B&&yr.transformFlags&134217728&&(ht&1||(ht|=6)))):B0(ec(yr))||(Id(yr)?(Yt=!0,ft||(ft=xu(yr))):xu(yr)?ft=!0:Na(yr)&&(K=!0,Xe||(Xe=!!yr.initializer)));return(A&&K||x&&Xe||C&&ft||C&&Yt&&P===-1)&&(ht|=16),ht}function ln(se){var ht;if((((ht=U?.data)==null?void 0:ht.facts)||0)&4){let K=t.createTempVariable(i,!0);return Hi().superClassReference=K,t.updateExpressionWithTypeArguments(se,t.createAssignment(K,$e(se.expression,ke,ot)),void 0)}return xn(se,ke,e)}function ir(se,ht,wt){let K=le,Xe=fe,ft=U;le=se,fe=void 0,Za();let Yt=o_(se)&32;if(C||Yt){let ta=sa(se);ta&&Re(ta)&&(xi().data.className=ta)}if(C){let ta=kt(se);vt(ta)&&(xi().data.weakSetName=mc(\"instances\",ta[0].name))}let pr=Kt(se);pr&&(Hi().facts=pr),pr&8&&ei();let yr=wt(se,pr,ht);return Fa(),L.assert(U===ft),le=K,fe=Xe,yr}function ae(se){return ir(se,void 0,rt)}function rt(se,ht){var wt,K;let Xe;if(ht&2){if(C&&((wt=se.emitNode)!=null&&wt.classThis))Hi().classConstructor=se.emitNode.classThis,Xe=t.createAssignment(se.emitNode.classThis,t.getInternalName(se));else{let Ka=t.createTempVariable(i,!0);Hi().classConstructor=t.cloneNode(Ka),Xe=t.createAssignment(Ka,t.getInternalName(se))}(K=se.emitNode)!=null&&K.classThis&&(Hi().classThis=se.emitNode.classThis)}let ft=On(se.modifiers,we,Ha),Yt=On(se.heritageClauses,Be,dd),{members:pr,prologue:yr}=pe(se),ta=t.updateClassDeclaration(se,ft,se.name,void 0,Yt,pr),Go=[];if(yr&&Go.push(t.createExpressionStatement(yr)),Go.push(ta),Xe&&Nr().unshift(Xe),vt(fe)&&Go.push(t.createExpressionStatement(t.inlineExpressions(fe))),x||C||o_(se)&32){let Ka=EF(se);vt(Ka)&&yt(Go,Ka,t.getInternalName(se))}return Go}function Ot(se,ht){return ir(se,ht,Ke)}function Ke(se,ht,wt){var K,Xe,ft,Yt,pr,yr;let ta=!!(ht&1),Go=EF(se),Ka=d.getNodeCheckFlags(se)&1048576,vo;function ka(){var vc;if(C&&((vc=se.emitNode)!=null&&vc.classThis))return Hi().classConstructor=se.emitNode.classThis;let nf=d.getNodeCheckFlags(se),ye=nf&1048576,Et=nf&32768,bn=t.createTempVariable(Et?f:i,!!ye);return Hi().classConstructor=t.cloneNode(bn),bn}(K=se.emitNode)!=null&&K.classThis&&(Hi().classThis=se.emitNode.classThis),ht&2&&(vo??(vo=ka()));let Hs=On(se.modifiers,we,Ha),Uc=On(se.heritageClauses,Be,dd),{members:Gu,prologue:$o}=pe(se),jo=t.updateClassExpression(se,Hs,se.name,void 0,Uc,Gu),Ws=[];if($o&&Ws.push($o),(C||o_(se)&32)&&vt(Go,vc=>oc(vc)||xu(vc)||w&&sN(vc))||vt(fe)||wt)if(ta){if(L.assertIsDefined(Z,\"Decorated classes transformed by TypeScript are expected to be within a variable declaration.\"),vt(fe)&&si(Z,on(fe,t.createExpressionStatement)),wt)if(C){let vc=r().createSetFunctionNameHelper((ft=vo??((Xe=se.emitNode)==null?void 0:Xe.classThis))!=null?ft:t.getInternalName(se),wt);Z.push(t.createExpressionStatement(vc))}else{let vc=r().createSetFunctionNameHelper(t.createThis(),wt);jo=t.updateClassExpression(jo,jo.modifiers,jo.name,jo.typeParameters,jo.heritageClauses,[t.createClassStaticBlockDeclaration(t.createBlock([t.createExpressionStatement(vc)])),...jo.members])}vt(Go)&&yt(Z,Go,(pr=(Yt=se.emitNode)==null?void 0:Yt.classThis)!=null?pr:t.getInternalName(se)),vo?Ws.push(t.createAssignment(vo,jo)):C&&((yr=se.emitNode)!=null&&yr.classThis)?Ws.push(t.createAssignment(se.emitNode.classThis,jo)):Ws.push(jo)}else{if(vo??(vo=ka()),Ka){jr();let vc=t.cloneNode(vo);vc.emitNode.autoGenerate.flags&=-9,$[sc(se)]=vc}Ws.push(t.createAssignment(vo,jo)),si(Ws,fe),wt&&Ws.push(r().createSetFunctionNameHelper(vo,wt)),si(Ws,Qe(Go,vo)),Ws.push(t.cloneNode(vo))}else Ws.push(jo);return Ws.length>1&&(bp(jo,131072),Ws.forEach(mu)),t.inlineExpressions(Ws)}function oe(se){if(!C)return xn(se,ke,e)}function pe(se){let ht=!!(o_(se)&32);if(C||R){for(let Yt of se.members)if(xu(Yt))if(Ni(Yt))Ps(Yt,Yt.name,Fo);else{let pr=xi();JT(pr,Yt.name,{kind:\"untransformed\"})}if(C&&vt(kt(se))&&z(),Kn()){for(let Yt of se.members)if(Id(Yt)){let pr=t.getGeneratedPrivateNameForNode(Yt.name,void 0,\"_accessor_storage\");if(C||ht&&zc(Yt))Ps(Yt,pr,Qr);else{let yr=xi();JT(yr,pr,{kind:\"untransformed\"})}}}}let wt=On(se.members,Le,_l),K;vt(wt,Ec)||(K=Te(void 0,se));let Xe,ft;if(!C&&vt(fe)){let Yt=t.createExpressionStatement(t.inlineExpressions(fe));if(Yt.transformFlags&134234112){let yr=t.createTempVariable(i),ta=t.createArrowFunction(void 0,void 0,[],void 0,void 0,t.createBlock([Yt]));Xe=t.createAssignment(yr,ta),Yt=t.createExpressionStatement(t.createCallExpression(yr,void 0,[]))}let pr=t.createBlock([Yt]);ft=t.createClassStaticBlockDeclaration(pr),fe=void 0}if(K||ft){let Yt;Yt=Sn(Yt,K),Yt=Sn(Yt,ft),Yt=si(Yt,wt),wt=it(t.createNodeArray(Yt),se.members)}return{members:wt,prologue:Xe}}function z(){let{weakSetName:se}=xi().data;L.assert(se,\"weakSetName should be set in private identifier environment\"),Nr().push(t.createAssignment(se,t.createNewExpression(t.createIdentifier(\"WeakSet\"),void 0,[])))}function Te(se,ht){if(se=$e(se,ke,Ec),!U?.data||!(U.data.facts&16))return se;let wt=hp(ht),K=!!(wt&&ql(wt.expression).kind!==104),Xe=Sc(se?se.parameters:void 0,ke,e),ft=j(ht,se,K);return ft?se?(L.assert(Xe),t.updateConstructorDeclaration(se,void 0,Xe,ft)):mu(Ir(it(t.createConstructorDeclaration(void 0,Xe??[],ft),se||ht),se)):se}function j(se,ht,wt){var K,Xe;let ft=CK(se,!1,!1),Yt=ft;v||(Yt=Pr(Yt,$o=>!!$o.initializer||pi($o.name)||rm($o)));let pr=kt(se),yr=vt(Yt)||vt(pr);if(!ht&&!yr)return Zd(void 0,ke,e);l();let ta=!ht&&wt,Go=0,Ka=0,vo=-1,ka=[];(K=ht?.body)!=null&&K.statements&&(Ka=t.copyPrologue(ht.body.statements,ka,!1,ke),vo=bF(ht.body.statements,Ka),vo>=0?(Go=vo+1,ka=[...ka.slice(0,Ka),...On(ht.body.statements,ke,ca,Ka,Go-Ka),...ka.slice(Ka)]):Ka>=0&&(Go=Ka)),ta&&ka.push(t.createExpressionStatement(t.createCallExpression(t.createSuper(),void 0,[t.createSpreadElement(t.createIdentifier(\"arguments\"))])));let Hs=0;if(ht?.body){for(let $o=Go;$o<ht.body.statements.length;$o++){let jo=ht.body.statements[$o];if(Ad(ec(jo),ht))Hs++;else break}Hs>0&&(Go+=Hs)}let Uc=t.createThis();if(Kr(ka,pr,Uc),ht){let $o=Pr(ft,Ws=>Ad(ec(Ws),ht)),jo=Pr(Yt,Ws=>!Ad(ec(Ws),ht));yt(ka,$o,Uc),yt(ka,jo,Uc)}else yt(ka,Yt,Uc);if(ht&&si(ka,On(ht.body.statements,ke,ca,Go)),ka=t.mergeLexicalEnvironment(ka,o()),ka.length===0&&!ht)return;let Gu=ht?.body&&ht.body.statements.length>=ka.length&&(Xe=ht.body.multiLine)!=null?Xe:ka.length>0;return it(t.createBlock(it(t.createNodeArray(ka),ht?ht.body.statements:se.members),Gu),ht?ht.body:void 0)}function yt(se,ht,wt){for(let K of ht){if(Ca(K)&&!C)continue;let Xe=lt(K,wt);Xe&&se.push(Xe)}}function lt(se,ht){let wt=oc(se)?nt(se):Vt(se,ht);if(!wt)return;let K=t.createExpressionStatement(wt);Ir(K,se),bp(K,Ya(se)&3072),hl(K,se);let Xe=ec(se);return ha(Xe)?(Ho(K,Xe),ZR(K)):Ho(K,yp(se)),W0(wt,void 0),u2(wt,void 0),rm(Xe)&&bp(K,3072),K}function Qe(se,ht){let wt=[];for(let K of se){let Xe=oc(K)?nt(K):Vt(K,ht);Xe&&(mu(Xe),Ir(Xe,K),bp(Xe,Ya(K)&3072),Ho(Xe,yp(K)),hl(Xe,K),wt.push(Xe))}return wt}function Vt(se,ht){var wt;let K=_e,Xe=Hn(se,ht);return Xe&&zc(se)&&((wt=U?.data)!=null&&wt.facts)&&(Ir(Xe,se),bp(Xe,4),Ho(Xe,pb(se.name)),re.set(ec(se),U)),_e=K,Xe}function Hn(se,ht){let wt=!v,K;vf(se,ce)&&(c_(se.name)||pi(se.name)?K=t.createStringLiteralFromNode(se.name):c_(se.name.expression)&&!Re(se.name.expression)?K=t.createStringLiteralFromNode(se.name.expression):K=t.getGeneratedNameForNode(se.name));let Xe=rm(se)?t.getGeneratedPrivateNameForNode(se.name):ts(se.name)&&!Ap(se.name.expression)?t.updateComputedPropertyName(se.name,t.getGeneratedNameForNode(se.name)):se.name;zc(se)&&(_e=se);let ft=K?yr=>Ce(yr,K):ke;if(pi(Xe)&&Ni(se)){let yr=hc(Xe);if(yr)return yr.kind===\"f\"?yr.isStatic?tMe(yr.variableName,$e(se.initializer,ft,ot)):nMe(ht,$e(se.initializer,ft,ot),yr.brandCheckIdentifier):void 0;L.fail(\"Undeclared private name for property declaration.\")}if((pi(Xe)||zc(se))&&!se.initializer)return;let Yt=ec(se);if(Mr(Yt,256))return;let pr=$e(se.initializer,ft,ot);if(Ad(Yt,Yt.parent)&&Re(Xe)){let yr=t.cloneNode(Xe);pr?(ud(pr)&&TO(pr.expression)&&pL(pr.expression.left,\"___runInitializers\")&&NS(pr.expression.right)&&Vf(pr.expression.right.expression)&&(pr=pr.expression.left),pr=t.inlineExpressions([pr,yr])):pr=yr,Jn(Xe,3168),Ho(yr,Yt.name),Jn(yr,3072)}else pr??(pr=t.createVoidZero());if(wt||pi(Xe)){let yr=VT(t,ht,Xe,Xe);return bp(yr,1024),t.createAssignment(yr,pr)}else{let yr=ts(Xe)?Xe.expression:Re(Xe)?t.createStringLiteral(Gi(Xe.escapedText)):Xe,ta=t.createPropertyDescriptor({value:pr,configurable:!0,writable:!0,enumerable:!0});return t.createObjectDefinePropertyCall(ht,yr,ta)}}function jr(){ie&1||(ie|=1,e.enableSubstitution(79),$=[])}function ei(){ie&2||(ie|=2,e.enableSubstitution(108),e.enableEmitNotification(259),e.enableEmitNotification(215),e.enableEmitNotification(173),e.enableEmitNotification(174),e.enableEmitNotification(175),e.enableEmitNotification(171),e.enableEmitNotification(169),e.enableEmitNotification(164))}function Kr(se,ht,wt){if(!C||!vt(ht))return;let{weakSetName:K}=xi().data;L.assert(K,\"weakSetName should be set in private identifier environment\"),se.push(t.createExpressionStatement(rMe(wt,K)))}function Si(se){return br(se)?t.updatePropertyAccessExpression(se,t.createVoidZero(),se.name):t.updateElementAccessExpression(se,t.createVoidZero(),$e(se.argumentExpression,ke,ot))}function Ja(se,ht,wt){if(ts(se)){let K=L3(se),Xe=$e(se.expression,ke,ot),ft=a_(Xe),Yt=Ap(ft);if(!(!!K||Iu(ft)&&tc(ft.left))&&!Yt&&ht){let yr=t.getGeneratedNameForNode(se);return d.getNodeCheckFlags(se)&32768?f(yr):i(yr),wt&&(Xe=r().createPropKeyHelper(Xe)),t.createAssignment(yr,Xe)}return Yt||Re(ft)?void 0:Xe}}function Za(){U={previous:U,data:void 0}}function Fa(){U=U?.previous}function Hi(){var se;return L.assert(U),(se=U.data)!=null?se:U.data={facts:0,classConstructor:void 0,classThis:void 0,superClassReference:void 0}}function xi(){var se;return L.assert(U),(se=U.privateEnv)!=null?se:U.privateEnv=Y_e({className:void 0,weakSetName:void 0})}function Nr(){return fe??(fe=[])}function Fo(se,ht,wt,K,Xe,ft,Yt){Id(se)?kc(se,ht,wt,K,Xe,ft,Yt):Na(se)?Qr(se,ht,wt,K,Xe,ft,Yt):Nc(se)?Wi(se,ht,wt,K,Xe,ft,Yt):p_(se)?gn(se,ht,wt,K,Xe,ft,Yt):Sf(se)&&Ki(se,ht,wt,K,Xe,ft,Yt)}function Qr(se,ht,wt,K,Xe,ft,Yt){var pr;if(Xe){let yr=L.checkDefined((pr=wt.classThis)!=null?pr:wt.classConstructor,\"classConstructor should be set in private identifier environment\"),ta=xc(ht);JT(K,ht,{kind:\"f\",isStatic:!0,brandCheckIdentifier:yr,variableName:ta,isValid:ft})}else{let yr=xc(ht);JT(K,ht,{kind:\"f\",isStatic:!1,brandCheckIdentifier:yr,isValid:ft}),Nr().push(t.createAssignment(yr,t.createNewExpression(t.createIdentifier(\"WeakMap\"),void 0,[])))}}function Wi(se,ht,wt,K,Xe,ft,Yt){var pr;let yr=xc(ht),ta=Xe?L.checkDefined((pr=wt.classThis)!=null?pr:wt.classConstructor,\"classConstructor should be set in private identifier environment\"):L.checkDefined(K.data.weakSetName,\"weakSetName should be set in private identifier environment\");JT(K,ht,{kind:\"m\",methodName:yr,brandCheckIdentifier:ta,isStatic:Xe,isValid:ft})}function gn(se,ht,wt,K,Xe,ft,Yt){var pr;let yr=xc(ht,\"_get\"),ta=Xe?L.checkDefined((pr=wt.classThis)!=null?pr:wt.classConstructor,\"classConstructor should be set in private identifier environment\"):L.checkDefined(K.data.weakSetName,\"weakSetName should be set in private identifier environment\");Yt?.kind===\"a\"&&Yt.isStatic===Xe&&!Yt.getterName?Yt.getterName=yr:JT(K,ht,{kind:\"a\",getterName:yr,setterName:void 0,brandCheckIdentifier:ta,isStatic:Xe,isValid:ft})}function Ki(se,ht,wt,K,Xe,ft,Yt){var pr;let yr=xc(ht,\"_set\"),ta=Xe?L.checkDefined((pr=wt.classThis)!=null?pr:wt.classConstructor,\"classConstructor should be set in private identifier environment\"):L.checkDefined(K.data.weakSetName,\"weakSetName should be set in private identifier environment\");Yt?.kind===\"a\"&&Yt.isStatic===Xe&&!Yt.setterName?Yt.setterName=yr:JT(K,ht,{kind:\"a\",getterName:void 0,setterName:yr,brandCheckIdentifier:ta,isStatic:Xe,isValid:ft})}function kc(se,ht,wt,K,Xe,ft,Yt){var pr;let yr=xc(ht,\"_get\"),ta=xc(ht,\"_set\"),Go=Xe?L.checkDefined((pr=wt.classThis)!=null?pr:wt.classConstructor,\"classConstructor should be set in private identifier environment\"):L.checkDefined(K.data.weakSetName,\"weakSetName should be set in private identifier environment\");JT(K,ht,{kind:\"a\",getterName:yr,setterName:ta,brandCheckIdentifier:Go,isStatic:Xe,isValid:ft})}function Ps(se,ht,wt){let K=Hi(),Xe=xi(),ft=kK(Xe,ht),Yt=zc(se),pr=!iMe(ht)&&ft===void 0;wt(se,ht,K,Xe,Yt,pr,ft)}function mc(se,ht,wt){let{className:K}=xi().data,Xe=K?{prefix:\"_\",node:K,suffix:\"_\"}:\"_\",ft=typeof se==\"object\"?t.getGeneratedNameForNode(se,24,Xe,wt):typeof se==\"string\"?t.createUniqueName(se,16,Xe,wt):t.createTempVariable(void 0,!0,Xe,wt);return d.getNodeCheckFlags(ht)&32768?f(ft):i(ft),ft}function xc(se,ht){var wt;let K=T6(se);return mc((wt=K?.substring(1))!=null?wt:se,se,ht)}function hc(se){let ht=$_e(U,se);return ht?.kind===\"untransformed\"?void 0:ht}function ro(se){let ht=t.getGeneratedNameForNode(se),wt=hc(se.name);if(!wt)return xn(se,ke,e);let K=se.expression;return(zw(se)||Pu(se)||!Z0(se.expression))&&(K=t.createTempVariable(i,!0),Nr().push(t.createBinaryExpression(K,63,$e(se.expression,ke,ot)))),t.createAssignmentTargetWrapper(ht,Ge(wt,K,ht,63))}function aa(se){if(rs(se)||fu(se))return qs(se);if(TA(se))return ro(se);if(B&&Pu(se)&&_e&&U?.data){let{classConstructor:ht,superClassReference:wt,facts:K}=U.data;if(K&1)return Si(se);if(ht&&wt){let Xe=Vs(se)?$e(se.argumentExpression,ke,ot):Re(se.name)?t.createStringLiteralFromNode(se.name):void 0;if(Xe){let ft=t.createTempVariable(void 0);return t.createAssignmentTargetWrapper(ft,t.createReflectSetCall(wt,Xe,ft,ht))}}}return xn(se,ke,e)}function Co(se){if(vf(se,ce)){let ht=aa(se.left),wt=zt(se.left,se.right),K=$e(se.right,Xe=>Ce(Xe,wt),ot);return t.updateBinaryExpression(se,ht,se.operatorToken,K)}if(Iu(se,!0)){let ht=aa(se.left),wt=$e(se.right,ke,ot);return t.updateBinaryExpression(se,ht,se.operatorToken,wt)}return aa(se)}function gc(se){if(Ju(se.expression)){let ht=aa(se.expression);return t.updateSpreadElement(se,ht)}return xn(se,ke,e)}function Ll(se){return L.assertNode(se,ww),Km(se)?gc(se):ol(se)?xn(se,ke,e):Co(se)}function md(se){let ht=$e(se.name,ke,Ys);if(Iu(se.initializer,!0)){let wt=Co(se.initializer);return t.updatePropertyAssignment(se,ht,wt)}if(Ju(se.initializer)){let wt=aa(se.initializer);return t.updatePropertyAssignment(se,ht,wt)}return xn(se,ke,e)}function Pc(se){if(vf(se,ce)){let ht=zt(se.name,se.objectAssignmentInitializer),wt=$e(se.objectAssignmentInitializer,K=>Ce(K,ht),ot);return t.updateShorthandPropertyAssignment(se,se.name,wt)}return xn(se,ke,e)}function bl(se){if(Ju(se.expression)){let ht=aa(se.expression);return t.updateSpreadAssignment(se,ht)}return xn(se,ke,e)}function ss(se){return L.assertNode(se,Dw),VS(se)?bl(se):xf(se)?Pc(se):yl(se)?md(se):xn(se,ke,e)}function qs(se){return fu(se)?t.updateArrayLiteralExpression(se,On(se.elements,Ll,ot)):t.updateObjectLiteralExpression(se,On(se.properties,ss,Og))}function Rs(se,ht,wt){let K=ec(ht),Xe=re.get(K);if(Xe){let ft=U,Yt=X;U=Xe,X=ge,ge=!oc(K)||!(o_(K)&32),Y(se,ht,wt),ge=X,X=Yt,U=ft;return}switch(ht.kind){case 215:if(xs(K)||Ya(ht)&524288)break;case 259:case 173:case 174:case 175:case 171:case 169:{let ft=U,Yt=X;U=void 0,X=ge,ge=!1,Y(se,ht,wt),ge=X,X=Yt,U=ft;return}case 164:{let ft=U,Yt=ge;U=U?.previous,ge=X,Y(se,ht,wt),ge=Yt,U=ft;return}}Y(se,ht,wt)}function As(se,ht){return ht=W(se,ht),se===1?jt(ht):ht}function jt(se){switch(se.kind){case 79:return Ql(se);case 108:return yc(se)}return se}function yc(se){if(ie&2&&U?.data){let{facts:ht,classConstructor:wt,classThis:K}=U.data;if(ht&1&&S)return t.createParenthesizedExpression(t.createVoidZero());let Xe=ge?K??wt:wt;if(Xe)return it(Ir(t.cloneNode(Xe),se),se)}return se}function Ql(se){return yu(se)||se}function yu(se){if(ie&1&&d.getNodeCheckFlags(se)&2097152){let ht=d.getReferencedValueDeclaration(se);if(ht){let wt=$[ht.id];if(wt){let K=t.cloneNode(wt);return Ho(K,se),hl(K,se),K}}}}}function tMe(e,t){return D.createAssignment(e,D.createObjectLiteralExpression([D.createPropertyAssignment(\"value\",t||D.createVoidZero())]))}function nMe(e,t,r){return D.createCallExpression(D.createPropertyAccessExpression(r,\"set\"),void 0,[e,t||D.createVoidZero()])}function rMe(e,t){return D.createCallExpression(D.createPropertyAccessExpression(t,\"add\"),void 0,[e])}function iMe(e){return!tS(e)&&e.escapedText===\"#constructor\"}function aMe(e){return pi(e.left)&&e.operatorToken.kind===101}var oMe=gt({\"src/compiler/transformers/classFields.ts\"(){\"use strict\";fa()}});function npe(e){let{hoistVariableDeclaration:t}=e,r=e.getEmitResolver(),i=e.getCompilerOptions(),o=Do(i),s=Uf(i,\"strictNullChecks\"),l,f;return{serializeTypeNode:($,fe)=>d($,A,fe),serializeTypeOfNode:($,fe)=>d($,m,fe),serializeParameterTypesOfNode:($,fe,Z)=>d($,v,fe,Z),serializeReturnTypeOfNode:($,fe)=>d($,x,fe)};function d($,fe,Z,U){let re=l,le=f;l=$.currentLexicalScope,f=$.currentNameScope;let _e=U===void 0?fe(Z):fe(Z,U);return l=re,f=le,_e}function g($){let fe=r.getAllAccessorDeclarations($);return fe.setAccessor&&Pce(fe.setAccessor)||fe.getAccessor&&U_(fe.getAccessor)}function m($){switch($.kind){case 169:case 166:return A($.type);case 175:case 174:return A(g($));case 260:case 228:case 171:return D.createIdentifier(\"Function\");default:return D.createVoidZero()}}function v($,fe){let Z=Yr($)?Vm($):Ia($)&&Pf($.body)?$:void 0,U=[];if(Z){let re=S(Z,fe),le=re.length;for(let _e=0;_e<le;_e++){let ge=re[_e];_e===0&&Re(ge.name)&&ge.name.escapedText===\"this\"||(ge.dotDotDotToken?U.push(A(SH(ge.type))):U.push(m(ge)))}}return D.createArrayLiteralExpression(U)}function S($,fe){if(fe&&$.kind===174){let{setAccessor:Z}=kT(fe.members,$);if(Z)return Z.parameters}return $.parameters}function x($){return Ia($)&&$.type?A($.type):qA($)?D.createIdentifier(\"Promise\"):D.createVoidZero()}function A($){if($===void 0)return D.createIdentifier(\"Object\");switch($=FH($),$.kind){case 114:case 155:case 144:return D.createVoidZero();case 181:case 182:return D.createIdentifier(\"Function\");case 185:case 186:return D.createIdentifier(\"Array\");case 179:return $.assertsModifier?D.createVoidZero():D.createIdentifier(\"Boolean\");case 134:return D.createIdentifier(\"Boolean\");case 200:case 152:return D.createIdentifier(\"String\");case 149:return D.createIdentifier(\"Object\");case 198:return w($.literal);case 148:return D.createIdentifier(\"Number\");case 160:return ie(\"BigInt\",7);case 153:return ie(\"Symbol\",2);case 180:return F($);case 190:return C($.types,!0);case 189:return C($.types,!1);case 191:return C([$.trueType,$.falseType],!1);case 195:if($.operator===146)return A($.type);break;case 183:case 196:case 197:case 184:case 131:case 157:case 194:case 202:break;case 315:case 316:case 320:case 321:case 322:break;case 317:case 318:case 319:return A($.type);default:return L.failBadSyntaxKind($)}return D.createIdentifier(\"Object\")}function w($){switch($.kind){case 10:case 14:return D.createIdentifier(\"String\");case 221:{let fe=$.operand;switch(fe.kind){case 8:case 9:return w(fe);default:return L.failBadSyntaxKind(fe)}}case 8:return D.createIdentifier(\"Number\");case 9:return ie(\"BigInt\",7);case 110:case 95:return D.createIdentifier(\"Boolean\");case 104:return D.createVoidZero();default:return L.failBadSyntaxKind($)}}function C($,fe){let Z;for(let U of $){if(U=FH(U),U.kind===144){if(fe)return D.createVoidZero();continue}if(U.kind===157){if(!fe)return D.createIdentifier(\"Object\");continue}if(U.kind===131)return D.createIdentifier(\"Object\");if(!s&&(mb(U)&&U.literal.kind===104||U.kind===155))continue;let re=A(U);if(Re(re)&&re.escapedText===\"Object\")return re;if(Z){if(!P(Z,re))return D.createIdentifier(\"Object\")}else Z=re}return Z??D.createVoidZero()}function P($,fe){return tc($)?tc(fe):Re($)?Re(fe)&&$.escapedText===fe.escapedText:br($)?br(fe)&&P($.expression,fe.expression)&&P($.name,fe.name):NS($)?NS(fe)&&Vf($.expression)&&$.expression.text===\"0\"&&Vf(fe.expression)&&fe.expression.text===\"0\":yo($)?yo(fe)&&$.text===fe.text:y2($)?y2(fe)&&P($.expression,fe.expression):ud($)?ud(fe)&&P($.expression,fe.expression):b2($)?b2(fe)&&P($.condition,fe.condition)&&P($.whenTrue,fe.whenTrue)&&P($.whenFalse,fe.whenFalse):ar($)?ar(fe)&&$.operatorToken.kind===fe.operatorToken.kind&&P($.left,fe.left)&&P($.right,fe.right):!1}function F($){let fe=r.getTypeReferenceSerializationKind($.typeName,f??l);switch(fe){case 0:if(jn($,re=>re.parent&&m2(re.parent)&&(re.parent.trueType===re||re.parent.falseType===re)))return D.createIdentifier(\"Object\");let Z=q($.typeName),U=D.createTempVariable(t);return D.createConditionalExpression(D.createTypeCheck(D.createAssignment(U,Z),\"function\"),void 0,U,void 0,D.createIdentifier(\"Object\"));case 1:return W($.typeName);case 2:return D.createVoidZero();case 4:return ie(\"BigInt\",7);case 6:return D.createIdentifier(\"Boolean\");case 3:return D.createIdentifier(\"Number\");case 5:return D.createIdentifier(\"String\");case 7:return D.createIdentifier(\"Array\");case 8:return ie(\"Symbol\",2);case 10:return D.createIdentifier(\"Function\");case 9:return D.createIdentifier(\"Promise\");case 11:return D.createIdentifier(\"Object\");default:return L.assertNever(fe)}}function B($,fe){return D.createLogicalAnd(D.createStrictInequality(D.createTypeOfExpression($),D.createStringLiteral(\"undefined\")),fe)}function q($){if($.kind===79){let U=W($);return B(U,U)}if($.left.kind===79)return B(W($.left),W($));let fe=q($.left),Z=D.createTempVariable(t);return D.createLogicalAnd(D.createLogicalAnd(fe.left,D.createStrictInequality(D.createAssignment(Z,fe.right),D.createVoidZero())),D.createPropertyAccessExpression(Z,$.right))}function W($){switch($.kind){case 79:let fe=go(it(fm.cloneNode($),$),$.parent);return fe.original=void 0,go(fe,ea(l)),fe;case 163:return Y($)}}function Y($){return D.createPropertyAccessExpression(W($.left),$.right)}function R($){return D.createConditionalExpression(D.createTypeCheck(D.createIdentifier($),\"function\"),void 0,D.createIdentifier($),void 0,D.createIdentifier(\"Object\"))}function ie($,fe){return o<fe?R($):D.createIdentifier($)}}var sMe=gt({\"src/compiler/transformers/typeSerializer.ts\"(){\"use strict\";fa()}});function rpe(e){let{factory:t,getEmitHelperFactory:r,hoistVariableDeclaration:i}=e,o=e.getEmitResolver(),s=e.getCompilerOptions(),l=Do(s),f=e.onSubstituteNode;e.onSubstituteNode=Ye;let d;return y_(e,g);function g(We){let qe=xn(We,v,e);return Bg(qe,e.readEmitHelpers()),qe}function m(We){return du(We)?void 0:We}function v(We){if(!(We.transformFlags&33554432))return We;switch(We.kind){case 167:return;case 260:return S(We);case 228:return B(We);case 173:return q(We);case 171:return Y(We);case 175:return ie(We);case 174:return R(We);case 169:return $(We);case 166:return fe(We);default:return xn(We,v,e)}}function S(We){if(!(O0(!0,We)||kI(!0,We)))return xn(We,v,e);let qe=O0(!0,We)?F(We,We.name):P(We,We.name);return qe.length>1&&(qe.push(t.createEndOfDeclarationMarker(We)),Jn(qe[0],Ya(qe[0])|8388608)),zp(qe)}function x(We){return!!(We.transformFlags&536870912)}function A(We){return vt(We,x)}function w(We){for(let qe of We.members){if(!HS(qe))continue;let zt=TF(qe,We,!0);if(vt(zt?.decorators,x)||vt(zt?.parameters,A))return!0}return!1}function C(We,qe){let zt=[];return re(zt,We,!1),re(zt,We,!0),w(We)&&(qe=it(t.createNodeArray([...qe,t.createClassStaticBlockDeclaration(t.createBlock(zt,!0))]),qe),zt=void 0),{decorationStatements:zt,members:qe}}function P(We,qe){let zt=On(We.modifiers,m,Ha),Qt=On(We.heritageClauses,v,dd),tn=On(We.members,v,_l),kn=[];({members:tn,decorationStatements:kn}=C(We,tn));let _n=t.updateClassDeclaration(We,zt,qe,void 0,Qt,tn);return si([_n],kn)}function F(We,qe){let zt=yp(We),Qt=Be(We),tn=l<=2?t.getInternalName(We,!1,!0):t.getLocalName(We,!1,!0),kn=On(We.heritageClauses,v,dd),_n=On(We.members,v,_l),Gt=[];({members:_n,decorationStatements:Gt}=C(We,_n));let $n=t.createClassExpression(void 0,qe&&tc(qe)?void 0:qe,void 0,kn,_n);Ir($n,We),it($n,zt);let ui=t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(tn,void 0,void 0,Qt?t.createAssignment(Qt,$n):$n)],1));Ir(ui,We),it(ui,zt),hl(ui,We);let Ni=[ui];return si(Ni,Gt),Ve(Ni,We),Ni}function B(We){return t.updateClassExpression(We,On(We.modifiers,m,Ha),We.name,void 0,On(We.heritageClauses,v,dd),On(We.members,v,_l))}function q(We){return t.updateConstructorDeclaration(We,On(We.modifiers,m,Ha),On(We.parameters,v,ha),$e(We.body,v,Va))}function W(We,qe){return We!==qe&&(hl(We,qe),Ho(We,yp(qe))),We}function Y(We){return W(t.updateMethodDeclaration(We,On(We.modifiers,m,Ha),We.asteriskToken,L.checkDefined($e(We.name,v,Ys)),void 0,void 0,On(We.parameters,v,ha),void 0,$e(We.body,v,Va)),We)}function R(We){return W(t.updateGetAccessorDeclaration(We,On(We.modifiers,m,Ha),L.checkDefined($e(We.name,v,Ys)),On(We.parameters,v,ha),void 0,$e(We.body,v,Va)),We)}function ie(We){return W(t.updateSetAccessorDeclaration(We,On(We.modifiers,m,Ha),L.checkDefined($e(We.name,v,Ys)),On(We.parameters,v,ha),$e(We.body,v,Va)),We)}function $(We){if(!(We.flags&16777216||Mr(We,2)))return W(t.updatePropertyDeclaration(We,On(We.modifiers,m,Ha),L.checkDefined($e(We.name,v,Ys)),void 0,void 0,$e(We.initializer,v,ot)),We)}function fe(We){let qe=t.updateParameterDeclaration(We,hde(t,We.modifiers),We.dotDotDotToken,L.checkDefined($e(We.name,v,Mm)),void 0,void 0,$e(We.initializer,v,ot));return qe!==We&&(hl(qe,We),it(qe,yp(We)),Ho(qe,yp(We)),Jn(qe.name,64)),qe}function Z(We){return pL(We.expression,\"___metadata\")}function U(We){if(!We)return;let{false:qe,true:zt}=yae(We.decorators,Z),Qt=[];return si(Qt,on(qe,ke)),si(Qt,Uo(We.parameters,Pe)),si(Qt,on(zt,ke)),Qt}function re(We,qe,zt){si(We,on(ge(qe,zt),Qt=>t.createExpressionStatement(Qt)))}function le(We,qe,zt){return Kw(!0,We,zt)&&qe===Ca(We)}function _e(We,qe){return Pr(We.members,zt=>le(zt,qe,We))}function ge(We,qe){let zt=_e(We,qe),Qt;for(let tn of zt)Qt=Sn(Qt,X(We,tn));return Qt}function X(We,qe){let zt=TF(qe,We,!0),Qt=U(zt);if(!Qt)return;let tn=Le(We,qe),kn=Ce(qe,!Mr(qe,2)),_n=l>0?Na(qe)&&!rm(qe)?t.createVoidZero():t.createNull():void 0,Gt=r().createDecorateHelper(Qt,tn,kn,_n);return Jn(Gt,3072),Ho(Gt,yp(qe)),Gt}function Ve(We,qe){let zt=we(qe);zt&&We.push(Ir(t.createExpressionStatement(zt),qe))}function we(We){let qe=LK(We),zt=U(qe);if(!zt)return;let Qt=d&&d[sc(We)],tn=l<=2?t.getInternalName(We,!1,!0):t.getLocalName(We,!1,!0),kn=r().createDecorateHelper(zt,tn),_n=t.createAssignment(tn,Qt?t.createAssignment(Qt,kn):kn);return Jn(_n,3072),Ho(_n,yp(We)),_n}function ke(We){return L.checkDefined($e(We.expression,v,ot))}function Pe(We,qe){let zt;if(We){zt=[];for(let Qt of We){let tn=r().createParamHelper(ke(Qt),qe);it(tn,Qt.expression),Jn(tn,3072),zt.push(tn)}}return zt}function Ce(We,qe){let zt=We.name;return pi(zt)?t.createIdentifier(\"\"):ts(zt)?qe&&!Ap(zt.expression)?t.getGeneratedNameForNode(zt):zt.expression:Re(zt)?t.createStringLiteral(vr(zt)):t.cloneNode(zt)}function Ie(){d||(e.enableSubstitution(79),d=[])}function Be(We){if(o.getNodeCheckFlags(We)&1048576){Ie();let qe=t.createUniqueName(We.name&&!tc(We.name)?vr(We.name):\"default\");return d[sc(We)]=qe,i(qe),qe}}function Ne(We){return t.createPropertyAccessExpression(t.getDeclarationName(We),\"prototype\")}function Le(We,qe){return Ca(qe)?t.getDeclarationName(We):Ne(We)}function Ye(We,qe){return qe=f(We,qe),We===1?_t(qe):qe}function _t(We){switch(We.kind){case 79:return ct(We)}return We}function ct(We){var qe;return(qe=Rt(We))!=null?qe:We}function Rt(We){if(d&&o.getNodeCheckFlags(We)&2097152){let qe=o.getReferencedValueDeclaration(We);if(qe){let zt=d[qe.id];if(zt){let Qt=t.cloneNode(zt);return Ho(Qt,We),hl(Qt,We),Qt}}}}}var cMe=gt({\"src/compiler/transformers/legacyDecorators.ts\"(){\"use strict\";fa()}});function ipe(e){let{factory:t,getEmitHelperFactory:r,startLexicalEnvironment:i,endLexicalEnvironment:o,hoistVariableDeclaration:s}=e,l,f,d,g,m,v;return y_(e,S);function S(ae){l=void 0,v=!1;let rt=xn(ae,R,e);return Bg(rt,e.readEmitHelpers()),v&&(SS(rt,32),v=!1),rt}function x(){switch(f=void 0,d=void 0,g=void 0,l?.kind){case\"class\":f=l.classInfo;break;case\"class-element\":f=l.next.classInfo,d=l.classThis,g=l.classSuper;break;case\"name\":let ae=l.next.next.next;ae?.kind===\"class-element\"&&(f=ae.next.classInfo,d=ae.classThis,g=ae.classSuper);break}}function A(ae){l={kind:\"class\",next:l,classInfo:ae,savedPendingExpressions:m},m=void 0,x()}function w(){L.assert(l?.kind===\"class\",\"Incorrect value for top.kind.\",()=>`Expected top.kind to be 'class' but got '${l?.kind}' instead.`),m=l.savedPendingExpressions,l=l.next,x()}function C(ae){var rt,Ot;L.assert(l?.kind===\"class\",\"Incorrect value for top.kind.\",()=>`Expected top.kind to be 'class' but got '${l?.kind}' instead.`),l={kind:\"class-element\",next:l},(oc(ae)||Na(ae)&&zc(ae))&&(l.classThis=(rt=l.next.classInfo)==null?void 0:rt.classThis,l.classSuper=(Ot=l.next.classInfo)==null?void 0:Ot.classSuper),x()}function P(){var ae;L.assert(l?.kind===\"class-element\",\"Incorrect value for top.kind.\",()=>`Expected top.kind to be 'class-element' but got '${l?.kind}' instead.`),L.assert(((ae=l.next)==null?void 0:ae.kind)===\"class\",\"Incorrect value for top.next.kind.\",()=>{var rt;return`Expected top.next.kind to be 'class' but got '${(rt=l.next)==null?void 0:rt.kind}' instead.`}),l=l.next,x()}function F(){L.assert(l?.kind===\"class-element\",\"Incorrect value for top.kind.\",()=>`Expected top.kind to be 'class-element' but got '${l?.kind}' instead.`),l={kind:\"name\",next:l},x()}function B(){L.assert(l?.kind===\"name\",\"Incorrect value for top.kind.\",()=>`Expected top.kind to be 'name' but got '${l?.kind}' instead.`),l=l.next,x()}function q(){l?.kind===\"other\"?(L.assert(!m),l.depth++):(l={kind:\"other\",next:l,depth:0,savedPendingExpressions:m},m=void 0,x())}function W(){L.assert(l?.kind===\"other\",\"Incorrect value for top.kind.\",()=>`Expected top.kind to be 'other' but got '${l?.kind}' instead.`),l.depth>0?(L.assert(!m),l.depth--):(m=l.savedPendingExpressions,l=l.next,x())}function Y(ae){return!!(ae.transformFlags&33554432)||!!d&&!!(ae.transformFlags&16384)||!!d&&!!g&&!!(ae.transformFlags&134217728)}function R(ae){if(!Y(ae))return ae;switch(ae.kind){case 167:return L.fail(\"Use `modifierVisitor` instead.\");case 260:return ke(ae);case 228:return Pe(ae,void 0);case 173:case 169:case 172:return L.fail(\"Not supported outside of a class. Use 'classElementVisitor' instead.\");case 166:return kn(ae);case 223:return ui(ae,!1);case 299:return Dt(ae);case 257:return pn(ae);case 205:return An(ae);case 274:return at(ae);case 108:return We(ae);case 245:return Gt(ae);case 241:return $n(ae);case 357:return Pi(ae,!1);case 214:return Tt(ae,!1,void 0);case 356:return ve(ae,!1,void 0);case 210:return qe(ae);case 212:return zt(ae);case 221:case 222:return Ni(ae,!1);case 208:return Qt(ae);case 209:return tn(ae);case 164:return nn(ae);case 171:case 175:case 174:case 215:case 259:{q();let rt=xn(ae,ie,e);return W(),rt}default:return xn(ae,ie,e)}}function ie(ae){switch(ae.kind){case 167:return;default:return R(ae)}}function $(ae){switch(ae.kind){case 167:return;default:return ae}}function fe(ae){switch(ae.kind){case 173:return Ie(ae);case 171:return Le(ae);case 174:return Ye(ae);case 175:return _t(ae);case 169:return Rt(ae);case 172:return ct(ae);default:return R(ae)}}function Z(ae,rt){switch(ae.kind){case 356:return ve(ae,!1,rt);case 214:return Tt(ae,!1,rt);case 228:return Pe(ae,rt);default:return R(ae)}}function U(ae){switch(ae.kind){case 221:case 222:return Ni(ae,!0);case 223:return ui(ae,!0);case 357:return Pi(ae,!0);case 214:return Tt(ae,!0,void 0);default:return R(ae)}}function re(ae){let rt=ae.name&&Re(ae.name)&&!tc(ae.name)?vr(ae.name):ae.name&&pi(ae.name)&&!tc(ae.name)?vr(ae.name).slice(1):ae.name&&yo(ae.name)&&i_(ae.name.text,99)?ae.name.text:Yr(ae)?\"class\":\"member\";return zy(ae)&&(rt=`get_${rt}`),Ng(ae)&&(rt=`set_${rt}`),ae.name&&pi(ae.name)&&(rt=`private_${rt}`),Ca(ae)&&(rt=`static_${rt}`),\"_\"+rt}function le(ae,rt){return t.createUniqueName(`${re(ae)}_${rt}`,24)}function _e(ae,rt){return t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(ae,void 0,void 0,rt)],1))}function ge(ae){let rt,Ot,Ke=!1,oe=!1,pe=!1;for(let z of ae.members)if(cse(z)&&Kw(!1,z,ae)&&(zc(z)?Ot??(Ot=t.createUniqueName(\"_staticExtraInitializers\",16)):rt??(rt=t.createUniqueName(\"_instanceExtraInitializers\",16))),oc(z)?Ke=!0:Na(z)&&(zc(z)?Ke||(Ke=!!z.initializer||bf(z)):oe||(oe=!_H(z))),(xu(z)||Id(z))&&zc(z)&&(pe=!0),Ot&&rt&&Ke&&oe&&pe)break;return{class:ae,instanceExtraInitializersName:rt,staticExtraInitializersName:Ot,hasStaticInitializers:Ke,hasNonAmbientInstanceFields:oe,hasStaticPrivateClassElements:pe}}function X(ae){for(let rt of ae.members)if((oc(rt)||Na(rt)&&zc(rt))&&rt.transformFlags&134217728)return!0;return!1}function Ve(ae,rt){var Ot,Ke,oe,pe,z;i();let Te=(Ot=ae.name)!=null?Ot:t.getGeneratedNameForNode(ae),j=ge(ae),yt=[],lt,Qe,Vt,Hn,jr=!1,ei=ce(LK(ae));if(ei&&(j.classDecoratorsName=t.createUniqueName(\"_classDecorators\",16),j.classDescriptorName=t.createUniqueName(\"_classDescriptor\",16),j.classExtraInitializersName=t.createUniqueName(\"_classExtraInitializers\",16),j.classThis=t.createUniqueName(\"_classThis\",16),yt.push(_e(j.classDecoratorsName,t.createArrayLiteralExpression(ei)),_e(j.classDescriptorName),_e(j.classExtraInitializersName,t.createArrayLiteralExpression()),_e(j.classThis)),j.hasStaticPrivateClassElements&&(jr=!0,v=!0)),ei&&X(ae)){let xi=mR(ae.heritageClauses,94),Nr=xi&&Sl(xi.types),Fo=Nr&&$e(Nr.expression,R,ot);if(Fo){j.classSuper=t.createUniqueName(\"_classSuper\",16);let Qr=ql(Fo),Wi=_u(Qr)&&!Qr.name||ms(Qr)&&!Qr.name||xs(Qr)?t.createComma(t.createNumericLiteral(0),Fo):Fo;yt.push(_e(j.classSuper,Wi));let gn=t.updateExpressionWithTypeArguments(Nr,j.classSuper,void 0),Ki=t.updateHeritageClause(xi,[gn]);Hn=t.createNodeArray([Ki])}}else Hn=On(ae.heritageClauses,R,dd);let Kr=(Ke=j.classThis)!=null?Ke:t.createThis();if(!((oe=ec(ae,Yr))!=null&&oe.name)&&(ei||!yo(rt)||!CH(rt))){let xi=r().createSetFunctionNameHelper(t.createThis(),rt);lt=Sn(lt,t.createExpressionStatement(xi))}A(j);let Ja=On(ae.members,fe,_l);if(m){let xi;for(let Nr of m){Nr=$e(Nr,function Qr(Wi){if(!(Wi.transformFlags&16384))return Wi;switch(Wi.kind){case 108:return xi||(xi=t.createUniqueName(\"_outerThis\",16),yt.unshift(_e(xi,t.createThis()))),xi;default:return xn(Wi,Qr,e)}},ot);let Fo=t.createExpressionStatement(Nr);lt=Sn(lt,Fo)}m=void 0}if(w(),j.instanceExtraInitializersName&&!Vm(ae)){let xi=Ce(ae,j);if(xi){let Nr=hp(ae),Fo=!!(Nr&&ql(Nr.expression).kind!==104),Qr=[];if(Fo){let gn=t.createSpreadElement(t.createIdentifier(\"arguments\")),Ki=t.createCallExpression(t.createSuper(),void 0,[gn]);Qr.push(t.createExpressionStatement(Ki))}si(Qr,xi);let Wi=t.createBlock(Qr,!0);Vt=t.createConstructorDeclaration(void 0,[],Wi)}}if(j.staticExtraInitializersName&&yt.push(_e(j.staticExtraInitializersName,t.createArrayLiteralExpression())),j.instanceExtraInitializersName&&yt.push(_e(j.instanceExtraInitializersName,t.createArrayLiteralExpression())),j.memberInfos&&Ld(j.memberInfos,(xi,Nr)=>{Ca(Nr)&&(yt.push(_e(xi.memberDecoratorsName)),xi.memberInitializersName&&yt.push(_e(xi.memberInitializersName,t.createArrayLiteralExpression())),xi.memberDescriptorName&&yt.push(_e(xi.memberDescriptorName)))}),j.memberInfos&&Ld(j.memberInfos,(xi,Nr)=>{Ca(Nr)||(yt.push(_e(xi.memberDecoratorsName)),xi.memberInitializersName&&yt.push(_e(xi.memberInitializersName,t.createArrayLiteralExpression())),xi.memberDescriptorName&&yt.push(_e(xi.memberDescriptorName)))}),lt=si(lt,j.staticNonFieldDecorationStatements),lt=si(lt,j.nonStaticNonFieldDecorationStatements),lt=si(lt,j.staticFieldDecorationStatements),lt=si(lt,j.nonStaticFieldDecorationStatements),j.classDescriptorName&&j.classDecoratorsName&&j.classExtraInitializersName&&j.classThis){lt??(lt=[]);let xi=t.createPropertyAssignment(\"value\",t.createThis()),Nr=t.createObjectLiteralExpression([xi]),Fo=t.createAssignment(j.classDescriptorName,Nr),Qr=t.createPropertyAccessExpression(t.createThis(),\"name\"),Wi=r().createESDecorateHelper(t.createNull(),Fo,j.classDecoratorsName,{kind:\"class\",name:Qr},t.createNull(),j.classExtraInitializersName),gn=t.createExpressionStatement(Wi);Ho(gn,$y(ae)),lt.push(gn);let Ki=t.createPropertyAccessExpression(j.classDescriptorName,\"value\"),kc=t.createAssignment(j.classThis,Ki),Ps=t.createAssignment(Te,kc);lt.push(t.createExpressionStatement(Ps))}if(j.staticExtraInitializersName){let xi=r().createRunInitializersHelper(Kr,j.staticExtraInitializersName),Nr=t.createExpressionStatement(xi);Ho(Nr,(pe=ae.name)!=null?pe:$y(ae)),lt=Sn(lt,Nr)}if(j.classExtraInitializersName){let xi=r().createRunInitializersHelper(Kr,j.classExtraInitializersName),Nr=t.createExpressionStatement(xi);Ho(Nr,(z=ae.name)!=null?z:$y(ae)),Qe=Sn(Qe,Nr)}lt&&Qe&&!j.hasStaticInitializers&&(si(lt,Qe),Qe=void 0);let Za=Ja;if(lt){let xi=t.createBlock(lt,!0),Nr=t.createClassStaticBlockDeclaration(xi);jr&&eO(Nr,32),Za=[Nr,...Za]}if(Vt&&(Za=[...Za,Vt]),Qe){let xi=t.createBlock(Qe,!0),Nr=t.createClassStaticBlockDeclaration(xi);Za=[...Za,Nr]}Za!==Ja&&(Ja=it(t.createNodeArray(Za),Ja));let Fa=o(),Hi;if(ei){Hi=t.createClassExpression(void 0,void 0,void 0,Hn,Ja);let xi=t.createVariableDeclaration(Te,void 0,void 0,Hi),Nr=t.createVariableDeclarationList([xi]),Fo=j.classThis?t.createAssignment(Te,j.classThis):Te;yt.push(t.createVariableStatement(void 0,Nr),t.createReturnStatement(Fo))}else Hi=t.createClassExpression(void 0,ae.name,void 0,Hn,Ja),yt.push(t.createReturnStatement(Hi));if(jr){SS(Hi,32);for(let xi of Hi.members)(xu(xi)||Id(xi))&&zc(xi)&&SS(xi,32)}return Ir(Hi,ae),Lu(Hi).classThis=j.classThis,t.createImmediatelyInvokedArrowFunction(t.mergeLexicalEnvironment(yt,Fa))}function we(ae){return O0(!1,ae)||kI(!1,ae)}function ke(ae){var rt;if(we(ae))if(Mr(ae,1)&&Mr(ae,1024)){let Ot=(rt=ec(ae,Yr))!=null?rt:ae,Ke=Ot.name?t.createStringLiteralFromNode(Ot.name):t.createStringLiteral(\"default\"),oe=Ve(ae,Ke),pe=t.createExportDefault(oe);return Ir(pe,ae),hl(pe,sm(ae)),Ho(pe,$y(ae)),pe}else{L.assertIsDefined(ae.name,\"A class declaration that is not a default export must have a name.\");let Ot=Ve(ae,t.createStringLiteralFromNode(ae.name)),Ke=On(ae.modifiers,$,Ha),oe=t.createVariableDeclaration(ae.name,void 0,void 0,Ot),pe=t.createVariableDeclarationList([oe],1),z=t.createVariableStatement(Ke,pe);return Ir(z,ae),hl(z,sm(ae)),z}else{let Ot=On(ae.modifiers,$,Ha),Ke=On(ae.heritageClauses,R,dd);A(void 0);let oe=On(ae.members,fe,_l);return w(),t.updateClassDeclaration(ae,Ot,ae.name,void 0,Ke,oe)}}function Pe(ae,rt){if(we(ae)){let Ot=ae.name?t.createStringLiteralFromNode(ae.name):rt??t.createStringLiteral(\"\"),Ke=Ve(ae,Ot);return Ir(Ke,ae),Ke}else{let Ot=On(ae.modifiers,$,Ha),Ke=On(ae.heritageClauses,R,dd);A(void 0);let oe=On(ae.members,fe,_l);return w(),t.updateClassExpression(ae,Ot,ae.name,void 0,Ke,oe)}}function Ce(ae,rt){if(rt.instanceExtraInitializersName&&!rt.hasNonAmbientInstanceFields){let Ot=[];return Ot.push(t.createExpressionStatement(r().createRunInitializersHelper(t.createThis(),rt.instanceExtraInitializersName))),Ot}}function Ie(ae){C(ae);let rt=On(ae.modifiers,$,Ha),Ot=On(ae.parameters,R,ha),Ke;if(ae.body&&f){let oe=Ce(f.class,f);if(oe){let pe=[],z=t.copyPrologue(ae.body.statements,pe,!1,R),Te=bF(ae.body.statements,z),j=Te>=0?Te+1:void 0;si(pe,On(ae.body.statements,R,ca,z,j?j-z:void 0)),si(pe,oe),si(pe,On(ae.body.statements,R,ca,j)),Ke=t.createBlock(pe,!0),Ir(Ke,ae.body),it(Ke,ae.body)}}return Ke??(Ke=$e(ae.body,R,Va)),P(),t.updateConstructorDeclaration(ae,rt,Ot,Ke)}function Be(ae,rt){return ae!==rt&&(hl(ae,rt),Ho(ae,$y(rt))),ae}function Ne(ae,rt,Ot,Ke){var oe,pe,z,Te,j,yt,lt,Qe;let Vt,Hn,jr,ei,Kr;if(!Ot){let Za=On(ae.modifiers,$,Ha);return F(),rt?{referencedName:Vt,name:Hn}=gr(ae.name):Hn=pt(ae.name),B(),{modifiers:Za,referencedName:Vt,name:Hn,initializersName:jr,descriptorName:Kr,thisArg:ei}}let Si=ce(TF(ae,Ot.class,!1)),Ja=On(ae.modifiers,$,Ha);if(Si){let Za=le(ae,\"decorators\"),Fa=t.createArrayLiteralExpression(Si),Hi=t.createAssignment(Za,Fa),xi={memberDecoratorsName:Za};(oe=Ot.memberInfos)!=null||(Ot.memberInfos=new Map),Ot.memberInfos.set(ae,xi),m??(m=[]),m.push(Hi);let Nr=xA(ae)||Id(ae)?Ca(ae)?(pe=Ot.staticNonFieldDecorationStatements)!=null?pe:Ot.staticNonFieldDecorationStatements=[]:(z=Ot.nonStaticNonFieldDecorationStatements)!=null?z:Ot.nonStaticNonFieldDecorationStatements=[]:Na(ae)&&!Id(ae)?Ca(ae)?(Te=Ot.staticFieldDecorationStatements)!=null?Te:Ot.staticFieldDecorationStatements=[]:(j=Ot.nonStaticFieldDecorationStatements)!=null?j:Ot.nonStaticFieldDecorationStatements=[]:L.fail(),Fo=p_(ae)?\"getter\":Sf(ae)?\"setter\":Nc(ae)?\"method\":Id(ae)?\"accessor\":Na(ae)?\"field\":L.fail(),Qr;if(Re(ae.name)||pi(ae.name))Qr={computed:!1,name:ae.name};else if(c_(ae.name))Qr={computed:!0,name:t.createStringLiteralFromNode(ae.name)};else{let Ki=ae.name.expression;c_(Ki)&&!Re(Ki)?Qr={computed:!0,name:t.createStringLiteralFromNode(Ki)}:(F(),{referencedName:Vt,name:Hn}=gr(ae.name),Qr={computed:!0,name:Vt},B())}let Wi={kind:Fo,name:Qr,static:Ca(ae),private:pi(ae.name),access:{get:Na(ae)||p_(ae)||Nc(ae),set:Na(ae)||Sf(ae)}},gn=Ca(ae)?(yt=Ot.staticExtraInitializersName)!=null?yt:Ot.staticExtraInitializersName=t.createUniqueName(\"_staticExtraInitializers\",16):(lt=Ot.instanceExtraInitializersName)!=null?lt:Ot.instanceExtraInitializersName=t.createUniqueName(\"_instanceExtraInitializers\",16);if(xA(ae)){let Ki;xu(ae)&&Ke&&(Ki=Ke(ae,On(Ja,mc=>zr(mc,mL),Ha)),xi.memberDescriptorName=Kr=le(ae,\"descriptor\"),Ki=t.createAssignment(Kr,Ki));let kc=r().createESDecorateHelper(t.createThis(),Ki??t.createNull(),Za,Wi,t.createNull(),gn),Ps=t.createExpressionStatement(kc);Ho(Ps,$y(ae)),Nr.push(Ps)}else if(Na(ae)){jr=(Qe=xi.memberInitializersName)!=null?Qe:xi.memberInitializersName=le(ae,\"initializers\"),Ca(ae)&&(ei=Ot.classThis);let Ki;xu(ae)&&rm(ae)&&Ke&&(Ki=Ke(ae,void 0),xi.memberDescriptorName=Kr=le(ae,\"descriptor\"),Ki=t.createAssignment(Kr,Ki));let kc=r().createESDecorateHelper(Id(ae)?t.createThis():t.createNull(),Ki??t.createNull(),Za,Wi,jr,gn),Ps=t.createExpressionStatement(kc);Ho(Ps,$y(ae)),Nr.push(Ps)}}return Hn===void 0&&(F(),rt?{referencedName:Vt,name:Hn}=gr(ae.name):Hn=pt(ae.name),B()),!vt(Ja)&&(Nc(ae)||Na(ae))&&Jn(Hn,1024),{modifiers:Ja,referencedName:Vt,name:Hn,initializersName:jr,descriptorName:Kr,thisArg:ei}}function Le(ae){C(ae);let{modifiers:rt,name:Ot,descriptorName:Ke}=Ne(ae,!1,f,G);if(Ke)return P(),Be(kt(rt,Ot,Ke),ae);{let oe=On(ae.parameters,R,ha),pe=$e(ae.body,R,Va);return P(),Be(t.updateMethodDeclaration(ae,rt,ae.asteriskToken,Ot,void 0,void 0,oe,void 0,pe),ae)}}function Ye(ae){C(ae);let{modifiers:rt,name:Ot,descriptorName:Ke}=Ne(ae,!1,f,Oe);if(Ke)return P(),Be(Kt(rt,Ot,Ke),ae);{let oe=On(ae.parameters,R,ha),pe=$e(ae.body,R,Va);return P(),Be(t.updateGetAccessorDeclaration(ae,rt,Ot,oe,void 0,pe),ae)}}function _t(ae){C(ae);let{modifiers:rt,name:Ot,descriptorName:Ke}=Ne(ae,!1,f,je);if(Ke)return P(),Be(ln(rt,Ot,Ke),ae);{let oe=On(ae.parameters,R,ha),pe=$e(ae.body,R,Va);return P(),Be(t.updateSetAccessorDeclaration(ae,rt,Ot,oe,pe),ae)}}function ct(ae){C(ae),f&&(f.hasStaticInitializers=!0);let rt=xn(ae,R,e);return P(),rt}function Rt(ae){C(ae),L.assert(!_H(ae),\"Not yet implemented.\");let rt=vf(ae,_n),{modifiers:Ot,name:Ke,referencedName:oe,initializersName:pe,descriptorName:z,thisArg:Te}=Ne(ae,rt,f,rm(ae)?Ge:void 0);i();let j=oe?$e(ae.initializer,lt=>Z(lt,oe),ot):$e(ae.initializer,R,ot);pe&&(j=r().createRunInitializersHelper(Te??t.createThis(),pe,j??t.createVoidZero())),!Ca(ae)&&f?.instanceExtraInitializersName&&!f?.hasInjectedInstanceInitializers&&(f.hasInjectedInstanceInitializers=!0,j??(j=t.createVoidZero()),j=t.createParenthesizedExpression(t.createComma(r().createRunInitializersHelper(t.createThis(),f.instanceExtraInitializersName),j))),Ca(ae)&&f&&j&&(f.hasStaticInitializers=!0);let yt=o();if(vt(yt)&&(j=t.createImmediatelyInvokedArrowFunction([...yt,t.createReturnStatement(j)])),P(),rm(ae)&&z){let lt=sm(ae),Qe=pb(ae),Vt=ae.name,Hn=Vt,jr=Vt;if(ts(Vt)&&!Ap(Vt.expression)){let Za=L3(Vt);if(Za)Hn=t.updateComputedPropertyName(Vt,$e(Vt.expression,R,ot)),jr=t.updateComputedPropertyName(Vt,Za.left);else{let Fa=t.createTempVariable(s);Ho(Fa,Vt.expression);let Hi=$e(Vt.expression,R,ot),xi=t.createAssignment(Fa,Hi);Ho(xi,Vt.expression),Hn=t.updateComputedPropertyName(Vt,xi),jr=t.updateComputedPropertyName(Vt,Fa)}}let ei=On(Ot,Za=>Za.kind!==127?Za:void 0,Ha),Kr=sJ(t,ae,ei,j);Ir(Kr,ae),Jn(Kr,3072),Ho(Kr,Qe),Ho(Kr.name,ae.name);let Si=Kt(ei,Hn,z);Ir(Si,ae),hl(Si,lt),Ho(Si,Qe);let Ja=ln(ei,jr,z);return Ir(Ja,ae),Jn(Ja,3072),Ho(Ja,Qe),[Kr,Si,Ja]}return Be(t.updatePropertyDeclaration(ae,Ot,Ke,void 0,void 0,j),ae)}function We(ae){return d??ae}function qe(ae){if(Pu(ae.expression)&&d){let rt=$e(ae.expression,R,ot),Ot=On(ae.arguments,R,ot),Ke=t.createFunctionCallCall(rt,d,Ot);return Ir(Ke,ae),it(Ke,ae),Ke}return xn(ae,R,e)}function zt(ae){if(Pu(ae.tag)&&d){let rt=$e(ae.tag,R,ot),Ot=t.createFunctionBindCall(rt,d,[]);Ir(Ot,ae),it(Ot,ae);let Ke=$e(ae.template,R,AA);return t.updateTaggedTemplateExpression(ae,Ot,void 0,Ke)}return xn(ae,R,e)}function Qt(ae){if(Pu(ae)&&Re(ae.name)&&d&&g){let rt=t.createStringLiteralFromNode(ae.name),Ot=t.createReflectGetCall(g,rt,d);return Ir(Ot,ae.expression),it(Ot,ae.expression),Ot}return xn(ae,R,e)}function tn(ae){if(Pu(ae)&&d&&g){let rt=$e(ae.argumentExpression,R,ot),Ot=t.createReflectGetCall(g,rt,d);return Ir(Ot,ae.expression),it(Ot,ae.expression),Ot}return xn(ae,R,e)}function kn(ae){let rt;if(vf(ae,_n)){let Ot=ir(ae.name,ae.initializer),Ke=$e(ae.name,R,Mm),oe=$e(ae.initializer,pe=>Z(pe,Ot),ot);rt=t.updateParameterDeclaration(ae,void 0,void 0,Ke,void 0,void 0,oe)}else rt=t.updateParameterDeclaration(ae,void 0,ae.dotDotDotToken,$e(ae.name,R,Mm),void 0,void 0,$e(ae.initializer,R,ot));return rt!==ae&&(hl(rt,ae),it(rt,yp(ae)),Ho(rt,yp(ae)),Jn(rt.name,64)),rt}function _n(ae){return _u(ae)&&!ae.name&&we(ae)}function Gt(ae){return t.updateForStatement(ae,$e(ae.initializer,U,pp),$e(ae.condition,R,ot),$e(ae.incrementor,U,ot),jf(ae.statement,R,e))}function $n(ae){return xn(ae,U,e)}function ui(ae,rt){if(Fg(ae)){let Ot=Se(ae.left),Ke=$e(ae.right,R,ot);return t.updateBinaryExpression(ae,Ot,ae.operatorToken,Ke)}if(Iu(ae)){if(vf(ae,_n)){let Ot=ir(ae.left,ae.right),Ke=$e(ae.left,R,ot),oe=$e(ae.right,pe=>Z(pe,Ot),ot);return t.updateBinaryExpression(ae,Ke,ae.operatorToken,oe)}if(Pu(ae.left)&&d&&g){let Ot=Vs(ae.left)?$e(ae.left.argumentExpression,R,ot):Re(ae.left.name)?t.createStringLiteralFromNode(ae.left.name):void 0;if(Ot){let Ke=$e(ae.right,R,ot);if(oN(ae.operatorToken.kind)){let pe=Ot;Ap(Ot)||(pe=t.createTempVariable(s),Ot=t.createAssignment(pe,Ot));let z=t.createReflectGetCall(g,pe,d);Ir(z,ae.left),it(z,ae.left),Ke=t.createBinaryExpression(z,WL(ae.operatorToken.kind),Ke),it(Ke,ae)}let oe=rt?void 0:t.createTempVariable(s);return oe&&(Ke=t.createAssignment(oe,Ke),it(oe,ae)),Ke=t.createReflectSetCall(g,Ot,Ke,d),Ir(Ke,ae),it(Ke,ae),oe&&(Ke=t.createComma(Ke,oe),it(Ke,ae)),Ke}}}if(ae.operatorToken.kind===27){let Ot=$e(ae.left,U,ot),Ke=$e(ae.right,rt?U:R,ot);return t.updateBinaryExpression(ae,Ot,ae.operatorToken,Ke)}return xn(ae,R,e)}function Ni(ae,rt){if(ae.operator===45||ae.operator===46){let Ot=vs(ae.operand);if(Pu(Ot)&&d&&g){let Ke=Vs(Ot)?$e(Ot.argumentExpression,R,ot):Re(Ot.name)?t.createStringLiteralFromNode(Ot.name):void 0;if(Ke){let oe=Ke;Ap(Ke)||(oe=t.createTempVariable(s),Ke=t.createAssignment(oe,Ke));let pe=t.createReflectGetCall(g,oe,d);Ir(pe,ae),it(pe,ae);let z=rt?void 0:t.createTempVariable(s);return pe=b3(t,ae,pe,s,z),pe=t.createReflectSetCall(g,Ke,pe,d),Ir(pe,ae),it(pe,ae),z&&(pe=t.createComma(pe,z),it(pe,ae)),pe}}}return xn(ae,R,e)}function Pi(ae,rt){let Ot=rt?aN(ae.elements,U):aN(ae.elements,R,U);return t.updateCommaListExpression(ae,Ot)}function gr(ae){if(c_(ae)||pi(ae)){let pe=t.createStringLiteralFromNode(ae),z=$e(ae,R,Ys);return{referencedName:pe,name:z}}if(c_(ae.expression)&&!Re(ae.expression)){let pe=t.createStringLiteralFromNode(ae.expression),z=$e(ae,R,Ys);return{referencedName:pe,name:z}}let rt=t.getGeneratedNameForNode(ae);s(rt);let Ot=r().createPropKeyHelper($e(ae.expression,R,ot)),Ke=t.createAssignment(rt,Ot),oe=t.updateComputedPropertyName(ae,nt(Ke));return{referencedName:rt,name:oe}}function pt(ae){return ts(ae)?nn(ae):$e(ae,R,Ys)}function nn(ae){let rt=$e(ae.expression,R,ot);return Ap(rt)||(rt=nt(rt)),t.updateComputedPropertyName(ae,rt)}function Dt(ae){if(vf(ae,_n)){let{referencedName:rt,name:Ot}=gr(ae.name),Ke=$e(ae.initializer,oe=>Z(oe,rt),ot);return t.updatePropertyAssignment(ae,Ot,Ke)}return xn(ae,R,e)}function pn(ae){if(vf(ae,_n)){let rt=ir(ae.name,ae.initializer),Ot=$e(ae.name,R,Mm),Ke=$e(ae.initializer,oe=>Z(oe,rt),ot);return t.updateVariableDeclaration(ae,Ot,void 0,void 0,Ke)}return xn(ae,R,e)}function An(ae){if(vf(ae,_n)){let rt=ir(ae.name,ae.initializer),Ot=$e(ae.propertyName,R,Ys),Ke=$e(ae.name,R,Mm),oe=$e(ae.initializer,pe=>Z(pe,rt),ot);return t.updateBindingElement(ae,void 0,Ot,Ke,oe)}return xn(ae,R,e)}function Kn(ae){if(rs(ae)||fu(ae))return Se(ae);if(Pu(ae)&&d&&g){let rt=Vs(ae)?$e(ae.argumentExpression,R,ot):Re(ae.name)?t.createStringLiteralFromNode(ae.name):void 0;if(rt){let Ot=t.createTempVariable(void 0),Ke=t.createAssignmentTargetWrapper(Ot,t.createReflectSetCall(g,rt,Ot,d));return Ir(Ke,ae),it(Ke,ae),Ke}}return xn(ae,R,e)}function hi(ae){if(Iu(ae,!0)){let rt=Kn(ae.left),Ot;if(vf(ae,_n)){let Ke=ir(ae.left,ae.right);Ot=$e(ae.right,oe=>Z(oe,Ke),ot)}else Ot=$e(ae.right,R,ot);return t.updateBinaryExpression(ae,rt,ae.operatorToken,Ot)}else return Kn(ae)}function ri(ae){if(Ju(ae.expression)){let rt=Kn(ae.expression);return t.updateSpreadElement(ae,rt)}return xn(ae,R,e)}function vn(ae){return L.assertNode(ae,ww),Km(ae)?ri(ae):ol(ae)?xn(ae,R,e):hi(ae)}function Ht(ae){let rt=$e(ae.name,R,Ys);if(Iu(ae.initializer,!0)){let Ot=hi(ae.initializer);return t.updatePropertyAssignment(ae,rt,Ot)}if(Ju(ae.initializer)){let Ot=Kn(ae.initializer);return t.updatePropertyAssignment(ae,rt,Ot)}return xn(ae,R,e)}function En(ae){if(vf(ae,_n)){let rt=ir(ae.name,ae.objectAssignmentInitializer),Ot=$e(ae.name,R,Re),Ke=$e(ae.objectAssignmentInitializer,oe=>Z(oe,rt),ot);return t.updateShorthandPropertyAssignment(ae,Ot,Ke)}return xn(ae,R,e)}function dr(ae){if(Ju(ae.expression)){let rt=Kn(ae.expression);return t.updateSpreadAssignment(ae,rt)}return xn(ae,R,e)}function Cr(ae){return L.assertNode(ae,Dw),VS(ae)?dr(ae):xf(ae)?En(ae):yl(ae)?Ht(ae):xn(ae,R,e)}function Se(ae){if(fu(ae)){let rt=On(ae.elements,vn,ot);return t.updateArrayLiteralExpression(ae,rt)}else{let rt=On(ae.properties,Cr,Og);return t.updateObjectLiteralExpression(ae,rt)}}function at(ae){if(vf(ae,_n)){let rt=t.createStringLiteral(ae.isExportEquals?\"\":\"default\"),Ot=On(ae.modifiers,$,Ha),Ke=$e(ae.expression,oe=>Z(oe,rt),ot);return t.updateExportAssignment(ae,Ot,Ke)}return xn(ae,R,e)}function Tt(ae,rt,Ot){let Ke=rt?U:Ot?pe=>Z(pe,Ot):R,oe=$e(ae.expression,Ke,ot);return t.updateParenthesizedExpression(ae,oe)}function ve(ae,rt,Ot){let Ke=rt?U:Ot?pe=>Z(pe,Ot):R,oe=$e(ae.expression,Ke,ot);return t.updatePartiallyEmittedExpression(ae,oe)}function nt(ae){return vt(m)&&(ud(ae)?(m.push(ae.expression),ae=t.updateParenthesizedExpression(ae,t.inlineExpressions(m))):(m.push(ae),ae=t.inlineExpressions(m)),m=void 0),ae}function ce(ae){if(!ae)return;let rt=[];return si(rt,on(ae.decorators,Q)),rt}function Q(ae){let rt=$e(ae.expression,R,ot);return Jn(rt,3072),rt}function ue(ae,rt,Ot,Ke,oe,pe,z){let Te=t.createFunctionExpression(Ot,Ke,void 0,void 0,pe,void 0,z??t.createBlock([]));Ir(Te,ae),Ho(Te,$y(ae)),Jn(Te,3072);let j=oe===\"get\"||oe===\"set\"?oe:void 0,yt=t.createStringLiteralFromNode(rt,void 0),lt=r().createSetFunctionNameHelper(Te,yt,j),Qe=t.createPropertyAssignment(t.createIdentifier(oe),lt);return Ir(Qe,ae),Ho(Qe,$y(ae)),Jn(Qe,3072),Qe}function G(ae,rt){return t.createObjectLiteralExpression([ue(ae,ae.name,rt,ae.asteriskToken,\"value\",On(ae.parameters,R,ha),$e(ae.body,R,Va))])}function Oe(ae,rt){return t.createObjectLiteralExpression([ue(ae,ae.name,rt,void 0,\"get\",[],$e(ae.body,R,Va))])}function je(ae,rt){return t.createObjectLiteralExpression([ue(ae,ae.name,rt,void 0,\"set\",On(ae.parameters,R,ha),$e(ae.body,R,Va))])}function Ge(ae,rt){return t.createObjectLiteralExpression([ue(ae,ae.name,rt,void 0,\"get\",[],t.createBlock([t.createReturnStatement(t.createPropertyAccessExpression(t.createThis(),t.getGeneratedPrivateNameForNode(ae.name)))])),ue(ae,ae.name,rt,void 0,\"set\",[t.createParameterDeclaration(void 0,void 0,\"value\")],t.createBlock([t.createExpressionStatement(t.createAssignment(t.createPropertyAccessExpression(t.createThis(),t.getGeneratedPrivateNameForNode(ae.name)),t.createIdentifier(\"value\")))]))])}function kt(ae,rt,Ot){return ae=On(ae,Ke=>LS(Ke)?Ke:void 0,Ha),t.createGetAccessorDeclaration(ae,rt,[],void 0,t.createBlock([t.createReturnStatement(t.createPropertyAccessExpression(Ot,t.createIdentifier(\"value\")))]))}function Kt(ae,rt,Ot){return ae=On(ae,Ke=>LS(Ke)?Ke:void 0,Ha),t.createGetAccessorDeclaration(ae,rt,[],void 0,t.createBlock([t.createReturnStatement(t.createFunctionCallCall(t.createPropertyAccessExpression(Ot,t.createIdentifier(\"get\")),t.createThis(),[]))]))}function ln(ae,rt,Ot){return ae=On(ae,Ke=>LS(Ke)?Ke:void 0,Ha),t.createSetAccessorDeclaration(ae,rt,[t.createParameterDeclaration(void 0,void 0,\"value\")],t.createBlock([t.createReturnStatement(t.createFunctionCallCall(t.createPropertyAccessExpression(Ot,t.createIdentifier(\"set\")),t.createThis(),[t.createIdentifier(\"value\")]))]))}function ir(ae,rt){let Ot=ec(rt,Yr);return Ot&&!Ot.name&&Mr(Ot,1024)?t.createStringLiteral(\"default\"):t.createStringLiteralFromNode(ae)}}var lMe=gt({\"src/compiler/transformers/esDecorators.ts\"(){\"use strict\";fa()}});function ape(e){let{factory:t,getEmitHelperFactory:r,resumeLexicalEnvironment:i,endLexicalEnvironment:o,hoistVariableDeclaration:s}=e,l=e.getEmitResolver(),f=e.getCompilerOptions(),d=Do(f),g,m=0,v,S,x,A=[],w=0,C=e.onEmitNode,P=e.onSubstituteNode;return e.onEmitNode=kn,e.onSubstituteNode=_n,y_(e,F);function F(pt){if(pt.isDeclarationFile)return pt;B(1,!1),B(2,!fH(pt,f));let nn=xn(pt,$,e);return Bg(nn,e.readEmitHelpers()),nn}function B(pt,nn){w=nn?w|pt:w&~pt}function q(pt){return(w&pt)!==0}function W(){return!q(1)}function Y(){return q(2)}function R(pt,nn,Dt){let pn=pt&~w;if(pn){B(pn,!0);let An=nn(Dt);return B(pn,!1),An}return nn(Dt)}function ie(pt){return xn(pt,$,e)}function $(pt){if(!(pt.transformFlags&256))return pt;switch(pt.kind){case 132:return;case 220:return ge(pt);case 171:return R(3,Ve,pt);case 259:return R(3,Pe,pt);case 215:return R(3,Ce,pt);case 216:return R(1,Ie,pt);case 208:return S&&br(pt)&&pt.expression.kind===106&&S.add(pt.name.escapedText),xn(pt,$,e);case 209:return S&&pt.expression.kind===106&&(x=!0),xn(pt,$,e);case 174:return R(3,we,pt);case 175:return R(3,ke,pt);case 173:return R(3,X,pt);case 260:case 228:return R(3,ie,pt);default:return xn(pt,$,e)}}function fe(pt){if(vce(pt))switch(pt.kind){case 240:return U(pt);case 245:return _e(pt);case 246:return re(pt);case 247:return le(pt);case 295:return Z(pt);case 238:case 252:case 266:case 292:case 293:case 255:case 243:case 244:case 242:case 251:case 253:return xn(pt,fe,e);default:return L.assertNever(pt,\"Unhandled node.\")}return $(pt)}function Z(pt){let nn=new Set;Be(pt.variableDeclaration,nn);let Dt;if(nn.forEach((pn,An)=>{v.has(An)&&(Dt||(Dt=new Set(v)),Dt.delete(An))}),Dt){let pn=v;v=Dt;let An=xn(pt,fe,e);return v=pn,An}else return xn(pt,fe,e)}function U(pt){if(Ne(pt.declarationList)){let nn=Le(pt.declarationList,!1);return nn?t.createExpressionStatement(nn):void 0}return xn(pt,$,e)}function re(pt){return t.updateForInStatement(pt,Ne(pt.initializer)?Le(pt.initializer,!0):L.checkDefined($e(pt.initializer,$,pp)),L.checkDefined($e(pt.expression,$,ot)),jf(pt.statement,fe,e))}function le(pt){return t.updateForOfStatement(pt,$e(pt.awaitModifier,$,Dz),Ne(pt.initializer)?Le(pt.initializer,!0):L.checkDefined($e(pt.initializer,$,pp)),L.checkDefined($e(pt.expression,$,ot)),jf(pt.statement,fe,e))}function _e(pt){let nn=pt.initializer;return t.updateForStatement(pt,Ne(nn)?Le(nn,!1):$e(pt.initializer,$,pp),$e(pt.condition,$,ot),$e(pt.incrementor,$,ot),jf(pt.statement,fe,e))}function ge(pt){return W()?xn(pt,$,e):Ir(it(t.createYieldExpression(void 0,$e(pt.expression,$,ot)),pt),pt)}function X(pt){return t.updateConstructorDeclaration(pt,On(pt.modifiers,$,Ha),Sc(pt.parameters,$,e),We(pt))}function Ve(pt){return t.updateMethodDeclaration(pt,On(pt.modifiers,$,Ns),pt.asteriskToken,pt.name,void 0,void 0,Sc(pt.parameters,$,e),void 0,pl(pt)&2?qe(pt):We(pt))}function we(pt){return t.updateGetAccessorDeclaration(pt,On(pt.modifiers,$,Ns),pt.name,Sc(pt.parameters,$,e),void 0,We(pt))}function ke(pt){return t.updateSetAccessorDeclaration(pt,On(pt.modifiers,$,Ns),pt.name,Sc(pt.parameters,$,e),We(pt))}function Pe(pt){return t.updateFunctionDeclaration(pt,On(pt.modifiers,$,Ns),pt.asteriskToken,pt.name,void 0,Sc(pt.parameters,$,e),void 0,pl(pt)&2?qe(pt):Zd(pt.body,$,e))}function Ce(pt){return t.updateFunctionExpression(pt,On(pt.modifiers,$,Ha),pt.asteriskToken,pt.name,void 0,Sc(pt.parameters,$,e),void 0,pl(pt)&2?qe(pt):Zd(pt.body,$,e))}function Ie(pt){return t.updateArrowFunction(pt,On(pt.modifiers,$,Ha),void 0,Sc(pt.parameters,$,e),void 0,pt.equalsGreaterThanToken,pl(pt)&2?qe(pt):Zd(pt.body,$,e))}function Be({name:pt},nn){if(Re(pt))nn.add(pt.escapedText);else for(let Dt of pt.elements)ol(Dt)||Be(Dt,nn)}function Ne(pt){return!!pt&&pu(pt)&&!(pt.flags&3)&&pt.declarations.some(Rt)}function Le(pt,nn){Ye(pt);let Dt=qI(pt);return Dt.length===0?nn?$e(t.converters.convertToAssignmentElementTarget(pt.declarations[0].name),$,ot):void 0:t.inlineExpressions(on(Dt,ct))}function Ye(pt){mn(pt.declarations,_t)}function _t({name:pt}){if(Re(pt))s(pt);else for(let nn of pt.elements)ol(nn)||_t(nn)}function ct(pt){let nn=Ho(t.createAssignment(t.converters.convertToAssignmentElementTarget(pt.name),pt.initializer),pt);return L.checkDefined($e(nn,$,ot))}function Rt({name:pt}){if(Re(pt))return v.has(pt.escapedText);for(let nn of pt.elements)if(!ol(nn)&&Rt(nn))return!0;return!1}function We(pt){L.assertIsDefined(pt.body);let nn=S,Dt=x;S=new Set,x=!1;let pn=Zd(pt.body,$,e),An=ec(pt,Ds);if(d>=2&&l.getNodeCheckFlags(pt)&384&&(pl(An)&3)!==3){if(tn(),S.size){let hi=SF(t,l,pt,S);A[zo(hi)]=!0;let ri=pn.statements.slice();em(ri,[hi]),pn=t.updateBlock(pn,ri)}x&&(l.getNodeCheckFlags(pt)&256?xS(pn,sO):l.getNodeCheckFlags(pt)&128&&xS(pn,oO))}return S=nn,x=Dt,pn}function qe(pt){i();let Dt=ec(pt,Ia).type,pn=d<2?Qt(Dt):void 0,An=pt.kind===216,Kn=(l.getNodeCheckFlags(pt)&512)!==0,hi=v;v=new Set;for(let En of pt.parameters)Be(En,v);let ri=S,vn=x;An||(S=new Set,x=!1);let Ht;if(An){let En=r().createAwaiterHelper(Y(),Kn,pn,zt(pt.body)),dr=o();if(vt(dr)){let Cr=t.converters.convertToFunctionBlock(En);Ht=t.updateBlock(Cr,it(t.createNodeArray(Qi(dr,Cr.statements)),Cr.statements))}else Ht=En}else{let En=[],dr=t.copyPrologue(pt.body.statements,En,!1,$);En.push(t.createReturnStatement(r().createAwaiterHelper(Y(),Kn,pn,zt(pt.body,dr)))),em(En,o());let Cr=d>=2&&l.getNodeCheckFlags(pt)&384;if(Cr&&(tn(),S.size)){let at=SF(t,l,pt,S);A[zo(at)]=!0,em(En,[at])}let Se=t.createBlock(En,!0);it(Se,pt.body),Cr&&x&&(l.getNodeCheckFlags(pt)&256?xS(Se,sO):l.getNodeCheckFlags(pt)&128&&xS(Se,oO)),Ht=Se}return v=hi,An||(S=ri,x=vn),Ht}function zt(pt,nn){return Va(pt)?t.updateBlock(pt,On(pt.statements,fe,ca,nn)):t.converters.convertToFunctionBlock(L.checkDefined($e(pt,fe,u6)))}function Qt(pt){let nn=pt&&Jw(pt);if(nn&&Cd(nn)){let Dt=l.getTypeReferenceSerializationKind(nn);if(Dt===1||Dt===0)return nn}}function tn(){g&1||(g|=1,e.enableSubstitution(210),e.enableSubstitution(208),e.enableSubstitution(209),e.enableEmitNotification(260),e.enableEmitNotification(171),e.enableEmitNotification(174),e.enableEmitNotification(175),e.enableEmitNotification(173),e.enableEmitNotification(240))}function kn(pt,nn,Dt){if(g&1&&Pi(nn)){let pn=l.getNodeCheckFlags(nn)&384;if(pn!==m){let An=m;m=pn,C(pt,nn,Dt),m=An;return}}else if(g&&A[zo(nn)]){let pn=m;m=0,C(pt,nn,Dt),m=pn;return}C(pt,nn,Dt)}function _n(pt,nn){return nn=P(pt,nn),pt===1&&m?Gt(nn):nn}function Gt(pt){switch(pt.kind){case 208:return $n(pt);case 209:return ui(pt);case 210:return Ni(pt)}return pt}function $n(pt){return pt.expression.kind===106?it(t.createPropertyAccessExpression(t.createUniqueName(\"_super\",48),pt.name),pt):pt}function ui(pt){return pt.expression.kind===106?gr(pt.argumentExpression,pt):pt}function Ni(pt){let nn=pt.expression;if(Pu(nn)){let Dt=br(nn)?$n(nn):ui(nn);return t.createCallExpression(t.createPropertyAccessExpression(Dt,\"call\"),void 0,[t.createThis(),...pt.arguments])}return pt}function Pi(pt){let nn=pt.kind;return nn===260||nn===173||nn===171||nn===174||nn===175}function gr(pt,nn){return m&256?it(t.createPropertyAccessExpression(t.createCallExpression(t.createUniqueName(\"_superIndex\",48),void 0,[pt]),\"value\"),nn):it(t.createCallExpression(t.createUniqueName(\"_superIndex\",48),void 0,[pt]),nn)}}function SF(e,t,r,i){let o=(t.getNodeCheckFlags(r)&256)!==0,s=[];return i.forEach((l,f)=>{let d=Gi(f),g=[];g.push(e.createPropertyAssignment(\"get\",e.createArrowFunction(void 0,void 0,[],void 0,void 0,Jn(e.createPropertyAccessExpression(Jn(e.createSuper(),8),d),8)))),o&&g.push(e.createPropertyAssignment(\"set\",e.createArrowFunction(void 0,void 0,[e.createParameterDeclaration(void 0,void 0,\"v\",void 0,void 0,void 0)],void 0,void 0,e.createAssignment(Jn(e.createPropertyAccessExpression(Jn(e.createSuper(),8),d),8),e.createIdentifier(\"v\"))))),s.push(e.createPropertyAssignment(d,e.createObjectLiteralExpression(g)))}),e.createVariableStatement(void 0,e.createVariableDeclarationList([e.createVariableDeclaration(e.createUniqueName(\"_super\",48),void 0,void 0,e.createCallExpression(e.createPropertyAccessExpression(e.createIdentifier(\"Object\"),\"create\"),void 0,[e.createNull(),e.createObjectLiteralExpression(s,!0)]))],2))}var uMe=gt({\"src/compiler/transformers/es2017.ts\"(){\"use strict\";fa()}});function ope(e){let{factory:t,getEmitHelperFactory:r,resumeLexicalEnvironment:i,endLexicalEnvironment:o,hoistVariableDeclaration:s}=e,l=e.getEmitResolver(),f=e.getCompilerOptions(),d=Do(f),g=e.onEmitNode;e.onEmitNode=En;let m=e.onSubstituteNode;e.onSubstituteNode=dr;let v=!1,S,x,A,w=0,C=0,P,F,B,q,W=[];return y_(e,fe);function Y(ce,Q){return C!==(C&~ce|Q)}function R(ce,Q){let ue=C;return C=(C&~ce|Q)&3,ue}function ie(ce){C=ce}function $(ce){F=Sn(F,t.createVariableDeclaration(ce))}function fe(ce){if(ce.isDeclarationFile)return ce;P=ce;let Q=Ne(ce);return Bg(Q,e.readEmitHelpers()),P=void 0,F=void 0,Q}function Z(ce){return ge(ce,!1)}function U(ce){return ge(ce,!0)}function re(ce){if(ce.kind!==132)return ce}function le(ce,Q,ue,G){if(Y(ue,G)){let Oe=R(ue,G),je=ce(Q);return ie(Oe),je}return ce(Q)}function _e(ce){return xn(ce,Z,e)}function ge(ce,Q){if(!(ce.transformFlags&128))return ce;switch(ce.kind){case 220:return X(ce);case 226:return Ve(ce);case 250:return we(ce);case 253:return ke(ce);case 207:return Ce(ce);case 223:return Ye(ce,Q);case 357:return _t(ce,Q);case 295:return ct(ce);case 240:return Rt(ce);case 257:return We(ce);case 243:case 244:case 246:return le(_e,ce,0,2);case 247:return tn(ce,void 0);case 245:return le(zt,ce,0,2);case 219:return Qt(ce);case 173:return le(gr,ce,2,1);case 171:return le(Dt,ce,2,1);case 174:return le(pt,ce,2,1);case 175:return le(nn,ce,2,1);case 259:return le(pn,ce,2,1);case 215:return le(Kn,ce,2,1);case 216:return le(An,ce,2,0);case 166:return Ni(ce);case 241:return Ie(ce);case 214:return Be(ce,Q);case 212:return Le(ce);case 208:return B&&br(ce)&&ce.expression.kind===106&&B.add(ce.name.escapedText),xn(ce,Z,e);case 209:return B&&ce.expression.kind===106&&(q=!0),xn(ce,Z,e);case 260:case 228:return le(_e,ce,2,1);default:return xn(ce,Z,e)}}function X(ce){return x&2&&x&1?Ir(it(t.createYieldExpression(void 0,r().createAwaitHelper($e(ce.expression,Z,ot))),ce),ce):xn(ce,Z,e)}function Ve(ce){if(x&2&&x&1){if(ce.asteriskToken){let Q=$e(L.checkDefined(ce.expression),Z,ot);return Ir(it(t.createYieldExpression(void 0,r().createAwaitHelper(t.updateYieldExpression(ce,ce.asteriskToken,it(r().createAsyncDelegatorHelper(it(r().createAsyncValuesHelper(Q),Q)),Q)))),ce),ce)}return Ir(it(t.createYieldExpression(void 0,Gt(ce.expression?$e(ce.expression,Z,ot):t.createVoidZero())),ce),ce)}return xn(ce,Z,e)}function we(ce){return x&2&&x&1?t.updateReturnStatement(ce,Gt(ce.expression?$e(ce.expression,Z,ot):t.createVoidZero())):xn(ce,Z,e)}function ke(ce){if(x&2){let Q=xH(ce);return Q.kind===247&&Q.awaitModifier?tn(Q,ce):t.restoreEnclosingLabel($e(Q,Z,ca,t.liftToBlock),ce)}return xn(ce,Z,e)}function Pe(ce){let Q,ue=[];for(let G of ce)if(G.kind===301){Q&&(ue.push(t.createObjectLiteralExpression(Q)),Q=void 0);let Oe=G.expression;ue.push($e(Oe,Z,ot))}else Q=Sn(Q,G.kind===299?t.createPropertyAssignment(G.name,$e(G.initializer,Z,ot)):$e(G,Z,Og));return Q&&ue.push(t.createObjectLiteralExpression(Q)),ue}function Ce(ce){if(ce.transformFlags&65536){let Q=Pe(ce.properties);Q.length&&Q[0].kind!==207&&Q.unshift(t.createObjectLiteralExpression());let ue=Q[0];if(Q.length>1){for(let G=1;G<Q.length;G++)ue=r().createAssignHelper([ue,Q[G]]);return ue}else return r().createAssignHelper(Q)}return xn(ce,Z,e)}function Ie(ce){return xn(ce,U,e)}function Be(ce,Q){return xn(ce,Q?U:Z,e)}function Ne(ce){let Q=R(2,fH(ce,f)?0:1);v=!1;let ue=xn(ce,Z,e),G=Qi(ue.statements,F&&[t.createVariableStatement(void 0,t.createVariableDeclarationList(F))]),Oe=t.updateSourceFile(ue,it(t.createNodeArray(G),ce.statements));return ie(Q),Oe}function Le(ce){return OK(e,ce,Z,P,$,0)}function Ye(ce,Q){return Fg(ce)&&IO(ce.left)?KT(ce,Z,e,1,!Q):ce.operatorToken.kind===27?t.updateBinaryExpression(ce,$e(ce.left,U,ot),ce.operatorToken,$e(ce.right,Q?U:Z,ot)):xn(ce,Z,e)}function _t(ce,Q){if(Q)return xn(ce,U,e);let ue;for(let Oe=0;Oe<ce.elements.length;Oe++){let je=ce.elements[Oe],Ge=$e(je,Oe<ce.elements.length-1?U:Z,ot);(ue||Ge!==je)&&(ue||(ue=ce.elements.slice(0,Oe)),ue.push(Ge))}let G=ue?it(t.createNodeArray(ue),ce.elements):ce.elements;return t.updateCommaListExpression(ce,G)}function ct(ce){if(ce.variableDeclaration&&La(ce.variableDeclaration.name)&&ce.variableDeclaration.name.transformFlags&65536){let Q=t.getGeneratedNameForNode(ce.variableDeclaration.name),ue=t.updateVariableDeclaration(ce.variableDeclaration,ce.variableDeclaration.name,void 0,void 0,Q),G=eE(ue,Z,e,1),Oe=$e(ce.block,Z,Va);return vt(G)&&(Oe=t.updateBlock(Oe,[t.createVariableStatement(void 0,G),...Oe.statements])),t.updateCatchClause(ce,t.updateVariableDeclaration(ce.variableDeclaration,Q,void 0,void 0,void 0),Oe)}return xn(ce,Z,e)}function Rt(ce){if(Mr(ce,1)){let Q=v;v=!0;let ue=xn(ce,Z,e);return v=Q,ue}return xn(ce,Z,e)}function We(ce){if(v){let Q=v;v=!1;let ue=qe(ce,!0);return v=Q,ue}return qe(ce,!1)}function qe(ce,Q){return La(ce.name)&&ce.name.transformFlags&65536?eE(ce,Z,e,1,void 0,Q):xn(ce,Z,e)}function zt(ce){return t.updateForStatement(ce,$e(ce.initializer,U,pp),$e(ce.condition,Z,ot),$e(ce.incrementor,U,ot),jf(ce.statement,Z,e))}function Qt(ce){return xn(ce,U,e)}function tn(ce,Q){let ue=R(0,2);(ce.initializer.transformFlags&65536||vI(ce.initializer)&&IO(ce.initializer))&&(ce=kn(ce));let G=ce.awaitModifier?$n(ce,Q,ue):t.restoreEnclosingLabel(xn(ce,Z,e),Q);return ie(ue),G}function kn(ce){let Q=vs(ce.initializer);if(pu(Q)||vI(Q)){let ue,G,Oe=t.createTempVariable(void 0),je=[Qz(t,Q,Oe)];return Va(ce.statement)?(si(je,ce.statement.statements),ue=ce.statement,G=ce.statement.statements):ce.statement&&(Sn(je,ce.statement),ue=ce.statement,G=ce.statement),t.updateForOfStatement(ce,ce.awaitModifier,it(t.createVariableDeclarationList([it(t.createVariableDeclaration(Oe),ce.initializer)],1),ce.initializer),ce.expression,it(t.createBlock(it(t.createNodeArray(je),G),!0),ue))}return ce}function _n(ce,Q,ue){let G=t.createTempVariable(s),Oe=t.createAssignment(G,Q),je=t.createExpressionStatement(Oe);Ho(je,ce.expression);let Ge=t.createAssignment(ue,t.createFalse()),kt=t.createExpressionStatement(Ge);Ho(kt,ce.expression);let Kt=t.createAssignment(ue,t.createTrue()),ln=t.createExpressionStatement(Kt);Ho(kt,ce.expression);let ir=[],ae=Qz(t,ce.initializer,G);ir.push($e(ae,Z,ca));let rt,Ot,Ke=jf(ce.statement,Z,e);Va(Ke)?(si(ir,Ke.statements),rt=Ke,Ot=Ke.statements):ir.push(Ke);let oe=Jn(it(t.createBlock(it(t.createNodeArray(ir),Ot),!0),rt),864);return t.createBlock([je,kt,t.createTryStatement(oe,void 0,t.createBlock([ln]))])}function Gt(ce){return x&1?t.createYieldExpression(void 0,r().createAwaitHelper(ce)):t.createAwaitExpression(ce)}function $n(ce,Q,ue){let G=$e(ce.expression,Z,ot),Oe=Re(G)?t.getGeneratedNameForNode(G):t.createTempVariable(void 0),je=Re(G)?t.getGeneratedNameForNode(Oe):t.createTempVariable(void 0),Ge=t.createTempVariable(void 0),kt=t.createTempVariable(s),Kt=t.createUniqueName(\"e\"),ln=t.getGeneratedNameForNode(Kt),ir=t.createTempVariable(void 0),ae=it(r().createAsyncValuesHelper(G),ce.expression),rt=t.createCallExpression(t.createPropertyAccessExpression(Oe,\"next\"),void 0,[]),Ot=t.createPropertyAccessExpression(je,\"done\"),Ke=t.createPropertyAccessExpression(je,\"value\"),oe=t.createFunctionCallCall(ir,Oe,[]);s(Kt),s(ir);let pe=ue&2?t.inlineExpressions([t.createAssignment(Kt,t.createVoidZero()),ae]):ae,z=Jn(it(t.createForStatement(Jn(it(t.createVariableDeclarationList([t.createVariableDeclaration(Ge,void 0,void 0,t.createTrue()),it(t.createVariableDeclaration(Oe,void 0,void 0,pe),ce.expression),t.createVariableDeclaration(je)]),ce.expression),4194304),t.inlineExpressions([t.createAssignment(je,Gt(rt)),t.createAssignment(kt,Ot),t.createLogicalNot(kt)]),void 0,_n(ce,Ke,Ge)),ce),512);return Ir(z,ce),t.createTryStatement(t.createBlock([t.restoreEnclosingLabel(z,Q)]),t.createCatchClause(t.createVariableDeclaration(ln),Jn(t.createBlock([t.createExpressionStatement(t.createAssignment(Kt,t.createObjectLiteralExpression([t.createPropertyAssignment(\"error\",ln)])))]),1)),t.createBlock([t.createTryStatement(t.createBlock([Jn(t.createIfStatement(t.createLogicalAnd(t.createLogicalAnd(t.createLogicalNot(Ge),t.createLogicalNot(kt)),t.createAssignment(ir,t.createPropertyAccessExpression(Oe,\"return\"))),t.createExpressionStatement(Gt(oe))),1)]),void 0,Jn(t.createBlock([Jn(t.createIfStatement(Kt,t.createThrowStatement(t.createPropertyAccessExpression(Kt,\"error\"))),1)]),1))]))}function ui(ce){return L.assertNode(ce,ha),Ni(ce)}function Ni(ce){return A?.has(ce)?t.updateParameterDeclaration(ce,void 0,ce.dotDotDotToken,La(ce.name)?t.getGeneratedNameForNode(ce):ce.name,void 0,void 0,void 0):ce.transformFlags&65536?t.updateParameterDeclaration(ce,void 0,ce.dotDotDotToken,t.getGeneratedNameForNode(ce),void 0,void 0,$e(ce.initializer,Z,ot)):xn(ce,Z,e)}function Pi(ce){let Q;for(let ue of ce.parameters)Q?Q.add(ue):ue.transformFlags&65536&&(Q=new Set);return Q}function gr(ce){let Q=x,ue=A;x=pl(ce),A=Pi(ce);let G=t.updateConstructorDeclaration(ce,ce.modifiers,Sc(ce.parameters,ui,e),ri(ce));return x=Q,A=ue,G}function pt(ce){let Q=x,ue=A;x=pl(ce),A=Pi(ce);let G=t.updateGetAccessorDeclaration(ce,ce.modifiers,$e(ce.name,Z,Ys),Sc(ce.parameters,ui,e),void 0,ri(ce));return x=Q,A=ue,G}function nn(ce){let Q=x,ue=A;x=pl(ce),A=Pi(ce);let G=t.updateSetAccessorDeclaration(ce,ce.modifiers,$e(ce.name,Z,Ys),Sc(ce.parameters,ui,e),ri(ce));return x=Q,A=ue,G}function Dt(ce){let Q=x,ue=A;x=pl(ce),A=Pi(ce);let G=t.updateMethodDeclaration(ce,x&1?On(ce.modifiers,re,Ns):ce.modifiers,x&2?void 0:ce.asteriskToken,$e(ce.name,Z,Ys),$e(void 0,Z,ev),void 0,Sc(ce.parameters,ui,e),void 0,x&2&&x&1?hi(ce):ri(ce));return x=Q,A=ue,G}function pn(ce){let Q=x,ue=A;x=pl(ce),A=Pi(ce);let G=t.updateFunctionDeclaration(ce,x&1?On(ce.modifiers,re,Ha):ce.modifiers,x&2?void 0:ce.asteriskToken,ce.name,void 0,Sc(ce.parameters,ui,e),void 0,x&2&&x&1?hi(ce):ri(ce));return x=Q,A=ue,G}function An(ce){let Q=x,ue=A;x=pl(ce),A=Pi(ce);let G=t.updateArrowFunction(ce,ce.modifiers,void 0,Sc(ce.parameters,ui,e),void 0,ce.equalsGreaterThanToken,ri(ce));return x=Q,A=ue,G}function Kn(ce){let Q=x,ue=A;x=pl(ce),A=Pi(ce);let G=t.updateFunctionExpression(ce,x&1?On(ce.modifiers,re,Ha):ce.modifiers,x&2?void 0:ce.asteriskToken,ce.name,void 0,Sc(ce.parameters,ui,e),void 0,x&2&&x&1?hi(ce):ri(ce));return x=Q,A=ue,G}function hi(ce){i();let Q=[],ue=t.copyPrologue(ce.body.statements,Q,!1,Z);vn(Q,ce);let G=B,Oe=q;B=new Set,q=!1;let je=t.createReturnStatement(r().createAsyncGeneratorHelper(t.createFunctionExpression(void 0,t.createToken(41),ce.name&&t.getGeneratedNameForNode(ce.name),void 0,[],void 0,t.updateBlock(ce.body,mF(ce.body.statements,Z,e,ue))),!!(C&1))),Ge=d>=2&&l.getNodeCheckFlags(ce)&384;if(Ge){Ht();let Kt=SF(t,l,ce,B);W[zo(Kt)]=!0,em(Q,[Kt])}Q.push(je),em(Q,o());let kt=t.updateBlock(ce.body,Q);return Ge&&q&&(l.getNodeCheckFlags(ce)&256?xS(kt,sO):l.getNodeCheckFlags(ce)&128&&xS(kt,oO)),B=G,q=Oe,kt}function ri(ce){var Q;i();let ue=0,G=[],Oe=(Q=$e(ce.body,Z,u6))!=null?Q:t.createBlock([]);Va(Oe)&&(ue=t.copyPrologue(Oe.statements,G,!1,Z)),si(G,vn(void 0,ce));let je=o();if(ue>0||vt(G)||vt(je)){let Ge=t.converters.convertToFunctionBlock(Oe,!0);return em(G,je),si(G,Ge.statements.slice(ue)),t.updateBlock(Ge,it(t.createNodeArray(G),Ge.statements))}return Oe}function vn(ce,Q){let ue=!1;for(let G of Q.parameters)if(ue){if(La(G.name)){if(G.name.elements.length>0){let Oe=eE(G,Z,e,0,t.getGeneratedNameForNode(G));if(vt(Oe)){let je=t.createVariableDeclarationList(Oe),Ge=t.createVariableStatement(void 0,je);Jn(Ge,2097152),ce=Sn(ce,Ge)}}else if(G.initializer){let Oe=t.getGeneratedNameForNode(G),je=$e(G.initializer,Z,ot),Ge=t.createAssignment(Oe,je),kt=t.createExpressionStatement(Ge);Jn(kt,2097152),ce=Sn(ce,kt)}}else if(G.initializer){let Oe=t.cloneNode(G.name);it(Oe,G.name),Jn(Oe,96);let je=$e(G.initializer,Z,ot);bp(je,3168);let Ge=t.createAssignment(Oe,je);it(Ge,G),Jn(Ge,3072);let kt=t.createBlock([t.createExpressionStatement(Ge)]);it(kt,G),Jn(kt,3905);let Kt=t.createTypeCheck(t.cloneNode(G.name),\"undefined\"),ln=t.createIfStatement(Kt,kt);mu(ln),it(ln,G),Jn(ln,2101056),ce=Sn(ce,ln)}}else if(G.transformFlags&65536){ue=!0;let Oe=eE(G,Z,e,1,t.getGeneratedNameForNode(G),!1,!0);if(vt(Oe)){let je=t.createVariableDeclarationList(Oe),Ge=t.createVariableStatement(void 0,je);Jn(Ge,2097152),ce=Sn(ce,Ge)}}return ce}function Ht(){S&1||(S|=1,e.enableSubstitution(210),e.enableSubstitution(208),e.enableSubstitution(209),e.enableEmitNotification(260),e.enableEmitNotification(171),e.enableEmitNotification(174),e.enableEmitNotification(175),e.enableEmitNotification(173),e.enableEmitNotification(240))}function En(ce,Q,ue){if(S&1&&ve(Q)){let G=l.getNodeCheckFlags(Q)&384;if(G!==w){let Oe=w;w=G,g(ce,Q,ue),w=Oe;return}}else if(S&&W[zo(Q)]){let G=w;w=0,g(ce,Q,ue),w=G;return}g(ce,Q,ue)}function dr(ce,Q){return Q=m(ce,Q),ce===1&&w?Cr(Q):Q}function Cr(ce){switch(ce.kind){case 208:return Se(ce);case 209:return at(ce);case 210:return Tt(ce)}return ce}function Se(ce){return ce.expression.kind===106?it(t.createPropertyAccessExpression(t.createUniqueName(\"_super\",48),ce.name),ce):ce}function at(ce){return ce.expression.kind===106?nt(ce.argumentExpression,ce):ce}function Tt(ce){let Q=ce.expression;if(Pu(Q)){let ue=br(Q)?Se(Q):at(Q);return t.createCallExpression(t.createPropertyAccessExpression(ue,\"call\"),void 0,[t.createThis(),...ce.arguments])}return ce}function ve(ce){let Q=ce.kind;return Q===260||Q===173||Q===171||Q===174||Q===175}function nt(ce,Q){return w&256?it(t.createPropertyAccessExpression(t.createCallExpression(t.createIdentifier(\"_superIndex\"),void 0,[ce]),\"value\"),Q):it(t.createCallExpression(t.createIdentifier(\"_superIndex\"),void 0,[ce]),Q)}}var dMe=gt({\"src/compiler/transformers/es2018.ts\"(){\"use strict\";fa()}});function spe(e){let t=e.factory;return y_(e,r);function r(s){return s.isDeclarationFile?s:xn(s,i,e)}function i(s){if(!(s.transformFlags&64))return s;switch(s.kind){case 295:return o(s);default:return xn(s,i,e)}}function o(s){return s.variableDeclaration?xn(s,i,e):t.updateCatchClause(s,t.createVariableDeclaration(t.createTempVariable(void 0)),$e(s.block,i,Va))}}var fMe=gt({\"src/compiler/transformers/es2019.ts\"(){\"use strict\";fa()}});function cpe(e){let{factory:t,hoistVariableDeclaration:r}=e;return y_(e,i);function i(A){return A.isDeclarationFile?A:xn(A,o,e)}function o(A){if(!(A.transformFlags&32))return A;switch(A.kind){case 210:{let w=d(A,!1);return L.assertNotNode(w,MS),w}case 208:case 209:if(Jl(A)){let w=m(A,!1,!1);return L.assertNotNode(w,MS),w}return xn(A,o,e);case 223:return A.operatorToken.kind===60?S(A):xn(A,o,e);case 217:return x(A);default:return xn(A,o,e)}}function s(A){L.assertNotNode(A,i6);let w=[A];for(;!A.questionDotToken&&!PT(A);)A=Ga(a_(A.expression),Jl),L.assertNotNode(A,i6),w.unshift(A);return{expression:A.expression,chain:w}}function l(A,w,C){let P=g(A.expression,w,C);return MS(P)?t.createSyntheticReferenceExpression(t.updateParenthesizedExpression(A,P.expression),P.thisArg):t.updateParenthesizedExpression(A,P)}function f(A,w,C){if(Jl(A))return m(A,w,C);let P=$e(A.expression,o,ot);L.assertNotNode(P,MS);let F;return w&&(Z0(P)?F=P:(F=t.createTempVariable(r),P=t.createAssignment(F,P))),P=A.kind===208?t.updatePropertyAccessExpression(A,P,$e(A.name,o,Re)):t.updateElementAccessExpression(A,P,$e(A.argumentExpression,o,ot)),F?t.createSyntheticReferenceExpression(P,F):P}function d(A,w){if(Jl(A))return m(A,w,!1);if(ud(A.expression)&&Jl(vs(A.expression))){let C=l(A.expression,!0,!1),P=On(A.arguments,o,ot);return MS(C)?it(t.createFunctionCallCall(C.expression,C.thisArg,P),A):t.updateCallExpression(A,C,void 0,P)}return xn(A,o,e)}function g(A,w,C){switch(A.kind){case 214:return l(A,w,C);case 208:case 209:return f(A,w,C);case 210:return d(A,w);default:return $e(A,o,ot)}}function m(A,w,C){let{expression:P,chain:F}=s(A),B=g(a_(P),dT(F[0]),!1),q=MS(B)?B.thisArg:void 0,W=MS(B)?B.expression:B,Y=t.restoreOuterExpressions(P,W,8);Z0(W)||(W=t.createTempVariable(r),Y=t.createAssignment(W,Y));let R=W,ie;for(let fe=0;fe<F.length;fe++){let Z=F[fe];switch(Z.kind){case 208:case 209:fe===F.length-1&&w&&(Z0(R)?ie=R:(ie=t.createTempVariable(r),R=t.createAssignment(ie,R))),R=Z.kind===208?t.createPropertyAccessExpression(R,$e(Z.name,o,Re)):t.createElementAccessExpression(R,$e(Z.argumentExpression,o,ot));break;case 210:fe===0&&q?(tc(q)||(q=t.cloneNode(q),bp(q,3072)),R=t.createFunctionCallCall(R,q.kind===106?t.createThis():q,On(Z.arguments,o,ot))):R=t.createCallExpression(R,void 0,On(Z.arguments,o,ot));break}Ir(R,Z)}let $=C?t.createConditionalExpression(v(Y,W,!0),void 0,t.createTrue(),void 0,t.createDeleteExpression(R)):t.createConditionalExpression(v(Y,W,!0),void 0,t.createVoidZero(),void 0,R);return it($,A),ie?t.createSyntheticReferenceExpression($,ie):$}function v(A,w,C){return t.createBinaryExpression(t.createBinaryExpression(A,t.createToken(C?36:37),t.createNull()),t.createToken(C?56:55),t.createBinaryExpression(w,t.createToken(C?36:37),t.createVoidZero()))}function S(A){let w=$e(A.left,o,ot),C=w;return Z0(w)||(C=t.createTempVariable(r),w=t.createAssignment(C,w)),it(t.createConditionalExpression(v(w,C),void 0,C,void 0,$e(A.right,o,ot)),A)}function x(A){return Jl(vs(A.expression))?Ir(g(A.expression,!1,!0),A):t.updateDeleteExpression(A,$e(A.expression,o,ot))}}var _Me=gt({\"src/compiler/transformers/es2020.ts\"(){\"use strict\";fa()}});function lpe(e){let{hoistVariableDeclaration:t,factory:r}=e;return y_(e,i);function i(l){return l.isDeclarationFile?l:xn(l,o,e)}function o(l){return l.transformFlags&16?cW(l)?s(l):xn(l,o,e):l}function s(l){let f=l.operatorToken,d=WL(f.kind),g=vs($e(l.left,o,Ju)),m=g,v=vs($e(l.right,o,ot));if(Us(g)){let S=Z0(g.expression),x=S?g.expression:r.createTempVariable(t),A=S?g.expression:r.createAssignment(x,g.expression);if(br(g))m=r.createPropertyAccessExpression(x,g.name),g=r.createPropertyAccessExpression(A,g.name);else{let w=Z0(g.argumentExpression),C=w?g.argumentExpression:r.createTempVariable(t);m=r.createElementAccessExpression(x,C),g=r.createElementAccessExpression(A,w?g.argumentExpression:r.createAssignment(C,g.argumentExpression))}}return r.createBinaryExpression(g,d,r.createParenthesizedExpression(r.createAssignment(m,v)))}}var pMe=gt({\"src/compiler/transformers/es2021.ts\"(){\"use strict\";fa()}});function upe(e){return y_(e,t);function t(i){return i.isDeclarationFile?i:xn(i,r,e)}function r(i){if(!(i.transformFlags&4))return i;switch(i.kind){default:return xn(i,r,e)}}}var mMe=gt({\"src/compiler/transformers/esnext.ts\"(){\"use strict\";fa()}});function dpe(e){let{factory:t,getEmitHelperFactory:r}=e,i=e.getCompilerOptions(),o,s;return y_(e,v);function l(){if(s.filenameDeclaration)return s.filenameDeclaration.name;let Le=t.createVariableDeclaration(t.createUniqueName(\"_jsxFileName\",48),void 0,void 0,t.createStringLiteral(o.fileName));return s.filenameDeclaration=Le,s.filenameDeclaration.name}function f(Le){return i.jsx===5?\"jsxDEV\":Le?\"jsxs\":\"jsx\"}function d(Le){let Ye=f(Le);return m(Ye)}function g(){return m(\"Fragment\")}function m(Le){var Ye,_t;let ct=Le===\"createElement\"?s.importSpecifier:p4(s.importSpecifier,i),Rt=(_t=(Ye=s.utilizedImplicitRuntimeImports)==null?void 0:Ye.get(ct))==null?void 0:_t.get(Le);if(Rt)return Rt.name;s.utilizedImplicitRuntimeImports||(s.utilizedImplicitRuntimeImports=new Map);let We=s.utilizedImplicitRuntimeImports.get(ct);We||(We=new Map,s.utilizedImplicitRuntimeImports.set(ct,We));let qe=t.createUniqueName(`_${Le}`,112),zt=t.createImportSpecifier(!1,t.createIdentifier(Le),qe);return bue(qe,zt),We.set(Le,zt),qe}function v(Le){if(Le.isDeclarationFile)return Le;o=Le,s={},s.importSpecifier=_4(i,Le);let Ye=xn(Le,S,e);Bg(Ye,e.readEmitHelpers());let _t=Ye.statements;if(s.filenameDeclaration&&(_t=L0(_t.slice(),t.createVariableStatement(void 0,t.createVariableDeclarationList([s.filenameDeclaration],2)))),s.utilizedImplicitRuntimeImports){for(let[ct,Rt]of lo(s.utilizedImplicitRuntimeImports.entries()))if(Lc(Le)){let We=t.createImportDeclaration(void 0,t.createImportClause(!1,void 0,t.createNamedImports(lo(Rt.values()))),t.createStringLiteral(ct),void 0);Zy(We,!1),_t=L0(_t.slice(),We)}else if(kd(Le)){let We=t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(t.createObjectBindingPattern(lo(Rt.values(),qe=>t.createBindingElement(void 0,qe.propertyName,qe.name))),void 0,void 0,t.createCallExpression(t.createIdentifier(\"require\"),void 0,[t.createStringLiteral(ct)]))],2));Zy(We,!1),_t=L0(_t.slice(),We)}}return _t!==Ye.statements&&(Ye=t.updateSourceFile(Ye,_t)),s=void 0,Ye}function S(Le){return Le.transformFlags&2?x(Le):Le}function x(Le){switch(Le.kind){case 281:return P(Le,!1);case 282:return F(Le,!1);case 285:return B(Le,!1);case 291:return Ne(Le);default:return xn(Le,S,e)}}function A(Le){switch(Le.kind){case 11:return Ve(Le);case 291:return Ne(Le);case 281:return P(Le,!0);case 282:return F(Le,!0);case 285:return B(Le,!0);default:return L.failBadSyntaxKind(Le)}}function w(Le){let Ye=!1;for(let _t of Le.attributes.properties)if(GT(_t))Ye=!0;else if(Ye&&Sp(_t)&&_t.name.escapedText===\"key\")return!0;return!1}function C(Le){return s.importSpecifier===void 0||w(Le)}function P(Le,Ye){return(C(Le.openingElement)?ie:Y)(Le.openingElement,Le.children,Ye,Le)}function F(Le,Ye){return(C(Le)?ie:Y)(Le,void 0,Ye,Le)}function B(Le,Ye){return(s.importSpecifier===void 0?fe:$)(Le.openingFragment,Le.children,Ye,Le)}function q(Le){let Ye=W(Le);return Ye&&t.createObjectLiteralExpression([Ye])}function W(Le){let Ye=bR(Le);if(Fn(Ye)===1&&!Ye[0].dotDotDotToken){let ct=A(Ye[0]);return ct&&t.createPropertyAssignment(\"children\",ct)}let _t=Zi(Le,A);return Fn(_t)?t.createPropertyAssignment(\"children\",t.createArrayLiteralExpression(_t)):void 0}function Y(Le,Ye,_t,ct){let Rt=Ie(Le),We=Ye&&Ye.length?W(Ye):void 0,qe=wr(Le.attributes.properties,tn=>!!tn.name&&Re(tn.name)&&tn.name.escapedText===\"key\"),zt=qe?Pr(Le.attributes.properties,tn=>tn!==qe):Le.attributes.properties,Qt=Fn(zt)?U(zt,We):t.createObjectLiteralExpression(We?[We]:Je);return R(Rt,Qt,qe,Ye||Je,_t,ct)}function R(Le,Ye,_t,ct,Rt,We){var qe;let zt=bR(ct),Qt=Fn(zt)>1||!!((qe=zt[0])!=null&&qe.dotDotDotToken),tn=[Le,Ye];if(_t&&tn.push(X(_t.initializer)),i.jsx===5){let _n=ec(o);if(_n&&Li(_n)){_t===void 0&&tn.push(t.createVoidZero()),tn.push(Qt?t.createTrue():t.createFalse());let Gt=Gs(_n,We.pos);tn.push(t.createObjectLiteralExpression([t.createPropertyAssignment(\"fileName\",l()),t.createPropertyAssignment(\"lineNumber\",t.createNumericLiteral(Gt.line+1)),t.createPropertyAssignment(\"columnNumber\",t.createNumericLiteral(Gt.character+1))])),tn.push(t.createThis())}}let kn=it(t.createCallExpression(d(Qt),void 0,tn),We);return Rt&&mu(kn),kn}function ie(Le,Ye,_t,ct){let Rt=Ie(Le),We=Le.attributes.properties,qe=Fn(We)?U(We):t.createNull(),zt=s.importSpecifier===void 0?$z(t,e.getEmitResolver().getJsxFactoryEntity(o),i.reactNamespace,Le):m(\"createElement\"),Qt=Que(t,zt,Rt,qe,Zi(Ye,A),ct);return _t&&mu(Qt),Qt}function $(Le,Ye,_t,ct){let Rt;if(Ye&&Ye.length){let We=q(Ye);We&&(Rt=We)}return R(g(),Rt||t.createObjectLiteralExpression([]),void 0,Ye,_t,ct)}function fe(Le,Ye,_t,ct){let Rt=Zue(t,e.getEmitResolver().getJsxFactoryEntity(o),e.getEmitResolver().getJsxFragmentFactoryEntity(o),i.reactNamespace,Zi(Ye,A),Le,ct);return _t&&mu(Rt),Rt}function Z(Le){return t.createSpreadAssignment(L.checkDefined($e(Le.expression,S,ot)))}function U(Le,Ye){let _t=Do(i);return _t&&_t>=5?t.createObjectLiteralExpression(re(Le,Ye)):le(Le,Ye)}function re(Le,Ye){let _t=t_(c8(Le,GT,(ct,Rt)=>on(ct,We=>Rt?Z(We):ge(We))));return Ye&&_t.push(Ye),_t}function le(Le,Ye){let _t=t_(c8(Le,GT,(ct,Rt)=>Rt?on(ct,_e):t.createObjectLiteralExpression(on(ct,ge))));return GT(Le[0])&&_t.unshift(t.createObjectLiteralExpression()),Ye&&_t.push(t.createObjectLiteralExpression([Ye])),Wp(_t)||r().createAssignHelper(_t)}function _e(Le){return L.checkDefined($e(Le.expression,S,ot))}function ge(Le){let Ye=Be(Le),_t=X(Le.initializer);return t.createPropertyAssignment(Ye,_t)}function X(Le){if(Le===void 0)return t.createTrue();if(Le.kind===10){let Ye=Le.singleQuote!==void 0?Le.singleQuote:!V6(Le,o),_t=t.createStringLiteral(Ce(Le.text)||Le.text,Ye);return it(_t,Le)}return Le.kind===291?Le.expression===void 0?t.createTrue():L.checkDefined($e(Le.expression,S,ot)):Hg(Le)?P(Le,!1):FS(Le)?F(Le,!1):BS(Le)?B(Le,!1):L.failBadSyntaxKind(Le)}function Ve(Le){let Ye=we(Le.text);return Ye===void 0?void 0:t.createStringLiteral(Ye)}function we(Le){let Ye,_t=0,ct=-1;for(let Rt=0;Rt<Le.length;Rt++){let We=Le.charCodeAt(Rt);Wl(We)?(_t!==-1&&ct!==-1&&(Ye=ke(Ye,Le.substr(_t,ct-_t+1))),_t=-1):Yp(We)||(ct=Rt,_t===-1&&(_t=Rt))}return _t!==-1?ke(Ye,Le.substr(_t)):Ye}function ke(Le,Ye){let _t=Pe(Ye);return Le===void 0?_t:Le+\" \"+_t}function Pe(Le){return Le.replace(/&((#((\\d+)|x([\\da-fA-F]+)))|(\\w+));/g,(Ye,_t,ct,Rt,We,qe,zt)=>{if(We)return lI(parseInt(We,10));if(qe)return lI(parseInt(qe,16));{let Qt=fpe.get(zt);return Qt?lI(Qt):Ye}})}function Ce(Le){let Ye=Pe(Le);return Ye===Le?void 0:Ye}function Ie(Le){if(Le.kind===281)return Ie(Le.openingElement);{let Ye=Le.tagName;return Re(Ye)&&GI(Ye.escapedText)?t.createStringLiteral(vr(Ye)):EO(t,Ye)}}function Be(Le){let Ye=Le.name,_t=vr(Ye);return/^[A-Za-z_]\\w*$/.test(_t)?Ye:t.createStringLiteral(_t)}function Ne(Le){let Ye=$e(Le.expression,S,ot);return Le.dotDotDotToken?t.createSpreadElement(Ye):Ye}}var fpe,hMe=gt({\"src/compiler/transformers/jsx.ts\"(){\"use strict\";fa(),fpe=new Map(Object.entries({quot:34,amp:38,apos:39,lt:60,gt:62,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,copy:169,ordf:170,laquo:171,not:172,shy:173,reg:174,macr:175,deg:176,plusmn:177,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,sup1:185,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,Agrave:192,Aacute:193,Acirc:194,Atilde:195,Auml:196,Aring:197,AElig:198,Ccedil:199,Egrave:200,Eacute:201,Ecirc:202,Euml:203,Igrave:204,Iacute:205,Icirc:206,Iuml:207,ETH:208,Ntilde:209,Ograve:210,Oacute:211,Ocirc:212,Otilde:213,Ouml:214,times:215,Oslash:216,Ugrave:217,Uacute:218,Ucirc:219,Uuml:220,Yacute:221,THORN:222,szlig:223,agrave:224,aacute:225,acirc:226,atilde:227,auml:228,aring:229,aelig:230,ccedil:231,egrave:232,eacute:233,ecirc:234,euml:235,igrave:236,iacute:237,icirc:238,iuml:239,eth:240,ntilde:241,ograve:242,oacute:243,ocirc:244,otilde:245,ouml:246,divide:247,oslash:248,ugrave:249,uacute:250,ucirc:251,uuml:252,yacute:253,thorn:254,yuml:255,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830}))}});function _pe(e){let{factory:t,hoistVariableDeclaration:r}=e;return y_(e,i);function i(d){return d.isDeclarationFile?d:xn(d,o,e)}function o(d){if(!(d.transformFlags&512))return d;switch(d.kind){case 223:return s(d);default:return xn(d,o,e)}}function s(d){switch(d.operatorToken.kind){case 67:return l(d);case 42:return f(d);default:return xn(d,o,e)}}function l(d){let g,m,v=$e(d.left,o,ot),S=$e(d.right,o,ot);if(Vs(v)){let x=t.createTempVariable(r),A=t.createTempVariable(r);g=it(t.createElementAccessExpression(it(t.createAssignment(x,v.expression),v.expression),it(t.createAssignment(A,v.argumentExpression),v.argumentExpression)),v),m=it(t.createElementAccessExpression(x,A),v)}else if(br(v)){let x=t.createTempVariable(r);g=it(t.createPropertyAccessExpression(it(t.createAssignment(x,v.expression),v.expression),v.name),v),m=it(t.createPropertyAccessExpression(x,v.name),v)}else g=v,m=v;return it(t.createAssignment(g,it(t.createGlobalMethodCall(\"Math\",\"pow\",[m,S]),d)),d)}function f(d){let g=$e(d.left,o,ot),m=$e(d.right,o,ot);return it(t.createGlobalMethodCall(\"Math\",\"pow\",[g,m]),d)}}var gMe=gt({\"src/compiler/transformers/es2016.ts\"(){\"use strict\";fa()}});function ppe(e,t){return{kind:e,expression:t}}function mpe(e){let{factory:t,getEmitHelperFactory:r,startLexicalEnvironment:i,resumeLexicalEnvironment:o,endLexicalEnvironment:s,hoistVariableDeclaration:l}=e,f=e.getCompilerOptions(),d=e.getEmitResolver(),g=e.onSubstituteNode,m=e.onEmitNode;e.onEmitNode=Gu,e.onSubstituteNode=Ws;let v,S,x,A;function w(ee){A=Sn(A,t.createVariableDeclaration(ee))}let C,P;return y_(e,F);function F(ee){if(ee.isDeclarationFile)return ee;v=ee,S=ee.text;let Ze=re(ee);return Bg(Ze,e.readEmitHelpers()),v=void 0,S=void 0,A=void 0,x=0,Ze}function B(ee,Ze){let At=x;return x=(x&~ee|Ze)&32767,At}function q(ee,Ze,At){x=(x&~Ze|At)&-32768|ee}function W(ee){return(x&8192)!==0&&ee.kind===250&&!ee.expression}function Y(ee){return ee.transformFlags&4194304&&(j_(ee)||MT(ee)||Uue(ee)||pO(ee)||hO(ee)||CL(ee)||yO(ee)||mO(ee)||E2(ee)||J0(ee)||Wy(ee,!1)||Va(ee))}function R(ee){return(ee.transformFlags&1024)!==0||C!==void 0||x&8192&&Y(ee)||Wy(ee,!1)&&jr(ee)||(o_(ee)&1)!==0}function ie(ee){return R(ee)?U(ee,!1):ee}function $(ee){return R(ee)?U(ee,!0):ee}function fe(ee){if(R(ee)){let Ze=ec(ee);if(Na(Ze)&&zc(Ze)){let At=B(32670,16449),xt=U(ee,!1);return q(At,98304,0),xt}return U(ee,!1)}return ee}function Z(ee){return ee.kind===106?Hs(!0):ie(ee)}function U(ee,Ze){switch(ee.kind){case 124:return;case 260:return Ce(ee);case 228:return Ie(ee);case 166:return tn(ee);case 259:return Ht(ee);case 216:return ri(ee);case 215:return vn(ee);case 257:return je(ee);case 79:return ke(ee);case 258:return Q(ee);case 252:return le(ee);case 266:return _e(ee);case 238:return Cr(ee,!1);case 249:case 248:return Pe(ee);case 253:return Kt(ee);case 243:case 244:return ae(ee,void 0);case 245:return rt(ee,void 0);case 246:return Ke(ee,void 0);case 247:return oe(ee,void 0);case 241:return Se(ee);case 207:return yt(ee);case 295:return Pc(ee);case 300:return Rs(ee);case 164:return As(ee);case 206:return yc(ee);case 210:return Ql(ee);case 211:return wt(ee);case 214:return at(ee,Ze);case 223:return Tt(ee,Ze);case 357:return ve(ee,Ze);case 14:case 15:case 16:case 17:return ta(ee);case 10:return Go(ee);case 8:return Ka(ee);case 212:return vo(ee);case 225:return ka(ee);case 226:return jt(ee);case 227:return yr(ee);case 106:return Hs(!1);case 108:return Ve(ee);case 233:return Uc(ee);case 171:return ss(ee);case 174:case 175:return qs(ee);case 240:return ce(ee);case 250:return X(ee);case 219:return we(ee);default:return xn(ee,ie,e)}}function re(ee){let Ze=B(8064,64),At=[],xt=[];i();let qt=t.copyPrologue(ee.statements,At,!1,ie);return si(xt,On(ee.statements,ie,ca,qt)),A&&xt.push(t.createVariableStatement(void 0,t.createVariableDeclarationList(A))),t.mergeLexicalEnvironment(At,s()),Pi(At,ee),q(Ze,0,0),t.updateSourceFile(ee,it(t.createNodeArray(Qi(At,xt)),ee.statements))}function le(ee){if(C!==void 0){let Ze=C.allowedNonLabeledJumps;C.allowedNonLabeledJumps|=2;let At=xn(ee,ie,e);return C.allowedNonLabeledJumps=Ze,At}return xn(ee,ie,e)}function _e(ee){let Ze=B(7104,0),At=xn(ee,ie,e);return q(Ze,0,0),At}function ge(ee){return Ir(t.createReturnStatement(t.createUniqueName(\"_this\",48)),ee)}function X(ee){return C?(C.nonLocalJumps|=8,W(ee)&&(ee=ge(ee)),t.createReturnStatement(t.createObjectLiteralExpression([t.createPropertyAssignment(t.createIdentifier(\"value\"),ee.expression?L.checkDefined($e(ee.expression,ie,ot)):t.createVoidZero())]))):W(ee)?ge(ee):xn(ee,ie,e)}function Ve(ee){return x&2&&!(x&16384)&&(x|=65536),C?x&2?(C.containsLexicalThis=!0,ee):C.thisName||(C.thisName=t.createUniqueName(\"this\")):ee}function we(ee){return xn(ee,$,e)}function ke(ee){return C&&d.isArgumentsLocalBinding(ee)?C.argumentsName||(C.argumentsName=t.createUniqueName(\"arguments\")):ee.flags&128?Ir(it(t.createIdentifier(Gi(ee.escapedText)),ee),ee):ee}function Pe(ee){if(C){let Ze=ee.kind===249?2:4;if(!(ee.label&&C.labels&&C.labels.get(vr(ee.label))||!ee.label&&C.allowedNonLabeledJumps&Ze)){let xt,qt=ee.label;qt?ee.kind===249?(xt=`break-${qt.escapedText}`,hc(C,!0,vr(qt),xt)):(xt=`continue-${qt.escapedText}`,hc(C,!1,vr(qt),xt)):ee.kind===249?(C.nonLocalJumps|=2,xt=\"break\"):(C.nonLocalJumps|=4,xt=\"continue\");let Ln=t.createStringLiteral(xt);if(C.loopOutParameters.length){let mr=C.loopOutParameters,Vr;for(let gi=0;gi<mr.length;gi++){let Ea=kc(mr[gi],1);gi===0?Vr=Ea:Vr=t.createBinaryExpression(Vr,27,Ea)}Ln=t.createBinaryExpression(Vr,27,Ln)}return t.createReturnStatement(Ln)}}return xn(ee,ie,e)}function Ce(ee){let Ze=t.createVariableDeclaration(t.getLocalName(ee,!0),void 0,void 0,Be(ee));Ir(Ze,ee);let At=[],xt=t.createVariableStatement(void 0,t.createVariableDeclarationList([Ze]));if(Ir(xt,ee),it(xt,ee),mu(xt),At.push(xt),Mr(ee,1)){let Ln=Mr(ee,1024)?t.createExportDefault(t.getLocalName(ee)):t.createExternalModuleExport(t.getLocalName(ee));Ir(Ln,xt),At.push(Ln)}let qt=Ya(ee);return qt&8388608||(At.push(t.createEndOfDeclarationMarker(ee)),Jn(xt,qt|8388608)),zp(At)}function Ie(ee){return Be(ee)}function Be(ee){ee.name&&$o();let Ze=P0(ee),At=t.createFunctionExpression(void 0,void 0,void 0,void 0,Ze?[t.createParameterDeclaration(void 0,void 0,t.createUniqueName(\"_super\",48))]:[],void 0,Ne(ee,Ze));Jn(At,Ya(ee)&131072|1048576);let xt=t.createPartiallyEmittedExpression(At);r2(xt,ee.end),Jn(xt,3072);let qt=t.createPartiallyEmittedExpression(xt);r2(qt,xo(S,ee.pos)),Jn(qt,3072);let Ln=t.createParenthesizedExpression(t.createCallExpression(qt,void 0,Ze?[L.checkDefined($e(Ze.expression,ie,ot))]:[]));return nO(Ln,3,\"* @class \"),Ln}function Ne(ee,Ze){let At=[],xt=t.getInternalName(ee),qt=q6(xt)?t.getGeneratedNameForNode(xt):xt;i(),Le(At,ee,Ze),Ye(At,ee,qt,Ze),Dt(At,ee);let Ln=_W(xo(S,ee.members.end),19),mr=t.createPartiallyEmittedExpression(qt);r2(mr,Ln.end),Jn(mr,3072);let Vr=t.createReturnStatement(mr);aL(Vr,Ln.pos),Jn(Vr,3840),At.push(Vr),em(At,s());let gi=t.createBlock(it(t.createNodeArray(At),ee.members),!0);return Jn(gi,3072),gi}function Le(ee,Ze,At){At&&ee.push(it(t.createExpressionStatement(r().createExtendsHelper(t.getInternalName(Ze))),At))}function Ye(ee,Ze,At,xt){let qt=C;C=void 0;let Ln=B(32662,73),mr=Vm(Ze),Vr=io(mr,xt!==void 0),gi=t.createFunctionDeclaration(void 0,void 0,At,void 0,_t(mr,Vr),void 0,Rt(mr,Ze,xt,Vr));it(gi,mr||Ze),xt&&Jn(gi,16),ee.push(gi),q(Ln,98304,0),C=qt}function _t(ee,Ze){return Sc(ee&&!Ze?ee.parameters:void 0,ie,e)||[]}function ct(ee,Ze){let At=[];o(),t.mergeLexicalEnvironment(At,s()),Ze&&At.push(t.createReturnStatement(Qt()));let xt=t.createNodeArray(At);it(xt,ee.members);let qt=t.createBlock(xt,!0);return it(qt,ee),Jn(qt,3072),qt}function Rt(ee,Ze,At,xt){let qt=!!At&&ql(At.expression).kind!==104;if(!ee)return ct(Ze,qt);let Ln=[],mr=[];o();let Vr=v8(ee.body.statements,B_),{superCall:gi,superStatementIndex:Ea}=We(ee.body.statements,Vr),bo=Ea===-1?Vr.length:Ea+1,Qo=bo;xt||(Qo=t.copyStandardPrologue(ee.body.statements,Ln,Qo,!1)),xt||(Qo=t.copyCustomPrologue(ee.body.statements,mr,Qo,ie,void 0));let Cs;if(xt?Cs=Qt():gi&&(Cs=se(gi)),Cs&&(x|=8192),_n(Ln,ee),Ni(Ln,ee,xt),si(mr,On(ee.body.statements,ie,ca,Qo)),t.mergeLexicalEnvironment(Ln,s()),nn(Ln,ee,!1),qt||Cs)if(Cs&&bo===ee.body.statements.length&&!(ee.body.transformFlags&16384)){let Pd=Ga(Ga(Cs,ar).left,Pa),Dc=t.createReturnStatement(Cs);hl(Dc,sm(Pd)),Jn(Pd,3072),mr.push(Dc)}else Ea<=Vr.length?pt(mr,ee,Cs||zt()):(pt(Ln,ee,zt()),Cs&&gr(mr,Cs)),qe(ee.body)||mr.push(t.createReturnStatement(t.createUniqueName(\"_this\",48)));else Pi(Ln,ee);let Bu=t.createBlock(it(t.createNodeArray([...Vr,...Ln,...Ea<=Vr.length?Je:On(ee.body.statements,ie,ca,Vr.length,Ea-Vr.length),...mr]),ee.body.statements),!0);return it(Bu,ee.body),Bu}function We(ee,Ze){for(let At=Ze.length;At<ee.length;At+=1){let xt=AK(ee[At]);if(xt)return{superCall:xt,superStatementIndex:At}}return{superStatementIndex:-1}}function qe(ee){if(ee.kind===250)return!0;if(ee.kind===242){let Ze=ee;if(Ze.elseStatement)return qe(Ze.thenStatement)&&qe(Ze.elseStatement)}else if(ee.kind===238){let Ze=Os(ee.statements);if(Ze&&qe(Ze))return!0}return!1}function zt(){return Jn(t.createThis(),8)}function Qt(){return t.createLogicalOr(t.createLogicalAnd(t.createStrictInequality(t.createUniqueName(\"_super\",48),t.createNull()),t.createFunctionApplyCall(t.createUniqueName(\"_super\",48),zt(),t.createIdentifier(\"arguments\"))),zt())}function tn(ee){if(!ee.dotDotDotToken)return La(ee.name)?Ir(it(t.createParameterDeclaration(void 0,void 0,t.getGeneratedNameForNode(ee),void 0,void 0,void 0),ee),ee):ee.initializer?Ir(it(t.createParameterDeclaration(void 0,void 0,ee.name,void 0,void 0,void 0),ee),ee):ee}function kn(ee){return ee.initializer!==void 0||La(ee.name)}function _n(ee,Ze){if(!vt(Ze.parameters,kn))return!1;let At=!1;for(let xt of Ze.parameters){let{name:qt,initializer:Ln,dotDotDotToken:mr}=xt;mr||(La(qt)?At=Gt(ee,xt,qt,Ln)||At:Ln&&($n(ee,xt,qt,Ln),At=!0))}return At}function Gt(ee,Ze,At,xt){return At.elements.length>0?(L0(ee,Jn(t.createVariableStatement(void 0,t.createVariableDeclarationList(eE(Ze,ie,e,0,t.getGeneratedNameForNode(Ze)))),2097152)),!0):xt?(L0(ee,Jn(t.createExpressionStatement(t.createAssignment(t.getGeneratedNameForNode(Ze),L.checkDefined($e(xt,ie,ot)))),2097152)),!0):!1}function $n(ee,Ze,At,xt){xt=L.checkDefined($e(xt,ie,ot));let qt=t.createIfStatement(t.createTypeCheck(t.cloneNode(At),\"undefined\"),Jn(it(t.createBlock([t.createExpressionStatement(Jn(it(t.createAssignment(Jn(go(it(t.cloneNode(At),At),At.parent),96),Jn(xt,96|Ya(xt)|3072)),Ze),3072))]),Ze),3905));mu(qt),it(qt,Ze),Jn(qt,2101056),L0(ee,qt)}function ui(ee,Ze){return!!(ee&&ee.dotDotDotToken&&!Ze)}function Ni(ee,Ze,At){let xt=[],qt=Os(Ze.parameters);if(!ui(qt,At))return!1;let Ln=qt.name.kind===79?go(it(t.cloneNode(qt.name),qt.name),qt.name.parent):t.createTempVariable(void 0);Jn(Ln,96);let mr=qt.name.kind===79?t.cloneNode(qt.name):Ln,Vr=Ze.parameters.length-1,gi=t.createLoopVariable();xt.push(Jn(it(t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(Ln,void 0,void 0,t.createArrayLiteralExpression([]))])),qt),2097152));let Ea=t.createForStatement(it(t.createVariableDeclarationList([t.createVariableDeclaration(gi,void 0,void 0,t.createNumericLiteral(Vr))]),qt),it(t.createLessThan(gi,t.createPropertyAccessExpression(t.createIdentifier(\"arguments\"),\"length\")),qt),it(t.createPostfixIncrement(gi),qt),t.createBlock([mu(it(t.createExpressionStatement(t.createAssignment(t.createElementAccessExpression(mr,Vr===0?gi:t.createSubtract(gi,t.createNumericLiteral(Vr))),t.createElementAccessExpression(t.createIdentifier(\"arguments\"),gi))),qt))]));return Jn(Ea,2097152),mu(Ea),xt.push(Ea),qt.name.kind!==79&&xt.push(Jn(it(t.createVariableStatement(void 0,t.createVariableDeclarationList(eE(qt,ie,e,0,mr))),qt),2097152)),rH(ee,xt),!0}function Pi(ee,Ze){return x&65536&&Ze.kind!==216?(pt(ee,Ze,t.createThis()),!0):!1}function gr(ee,Ze){jo();let At=t.createExpressionStatement(t.createBinaryExpression(t.createThis(),63,Ze));L0(ee,At),hl(At,ec(Ze).parent)}function pt(ee,Ze,At){jo();let xt=t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(t.createUniqueName(\"_this\",48),void 0,void 0,At)]));Jn(xt,2100224),Ho(xt,Ze),L0(ee,xt)}function nn(ee,Ze,At){if(x&32768){let xt;switch(Ze.kind){case 216:return ee;case 171:case 174:case 175:xt=t.createVoidZero();break;case 173:xt=t.createPropertyAccessExpression(Jn(t.createThis(),8),\"constructor\");break;case 259:case 215:xt=t.createConditionalExpression(t.createLogicalAnd(Jn(t.createThis(),8),t.createBinaryExpression(Jn(t.createThis(),8),102,t.getLocalName(Ze))),void 0,t.createPropertyAccessExpression(Jn(t.createThis(),8),\"constructor\"),void 0,t.createVoidZero());break;default:return L.failBadSyntaxKind(Ze)}let qt=t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(t.createUniqueName(\"_newTarget\",48),void 0,void 0,xt)]));Jn(qt,2100224),At&&(ee=ee.slice()),L0(ee,qt)}return ee}function Dt(ee,Ze){for(let At of Ze.members)switch(At.kind){case 237:ee.push(pn(At));break;case 171:ee.push(An(Ri(Ze,At),At,Ze));break;case 174:case 175:let xt=kT(Ze.members,At);At===xt.firstAccessor&&ee.push(Kn(Ri(Ze,At),xt,Ze));break;case 173:case 172:break;default:L.failBadSyntaxKind(At,v&&v.fileName);break}}function pn(ee){return it(t.createEmptyStatement(),ee)}function An(ee,Ze,At){let xt=sm(Ze),qt=pb(Ze),Ln=En(Ze,Ze,void 0,At),mr=$e(Ze.name,ie,Ys);L.assert(mr);let Vr;if(!pi(mr)&&MR(e.getCompilerOptions())){let Ea=ts(mr)?mr.expression:Re(mr)?t.createStringLiteral(Gi(mr.escapedText)):mr;Vr=t.createObjectDefinePropertyCall(ee,Ea,t.createPropertyDescriptor({value:Ln,enumerable:!1,writable:!0,configurable:!0}))}else{let Ea=VT(t,ee,mr,Ze.name);Vr=t.createAssignment(Ea,Ln)}Jn(Ln,3072),Ho(Ln,qt);let gi=it(t.createExpressionStatement(Vr),Ze);return Ir(gi,Ze),hl(gi,xt),Jn(gi,96),gi}function Kn(ee,Ze,At){let xt=t.createExpressionStatement(hi(ee,Ze,At,!1));return Jn(xt,3072),Ho(xt,pb(Ze.firstAccessor)),xt}function hi(ee,{firstAccessor:Ze,getAccessor:At,setAccessor:xt},qt,Ln){let mr=go(it(t.cloneNode(ee),ee),ee.parent);Jn(mr,3136),Ho(mr,Ze.name);let Vr=$e(Ze.name,ie,Ys);if(L.assert(Vr),pi(Vr))return L.failBadSyntaxKind(Vr,\"Encountered unhandled private identifier while transforming ES2015.\");let gi=Zz(t,Vr);Jn(gi,3104),Ho(gi,Ze.name);let Ea=[];if(At){let Qo=En(At,void 0,void 0,qt);Ho(Qo,pb(At)),Jn(Qo,1024);let Cs=t.createPropertyAssignment(\"get\",Qo);hl(Cs,sm(At)),Ea.push(Cs)}if(xt){let Qo=En(xt,void 0,void 0,qt);Ho(Qo,pb(xt)),Jn(Qo,1024);let Cs=t.createPropertyAssignment(\"set\",Qo);hl(Cs,sm(xt)),Ea.push(Cs)}Ea.push(t.createPropertyAssignment(\"enumerable\",At||xt?t.createFalse():t.createTrue()),t.createPropertyAssignment(\"configurable\",t.createTrue()));let bo=t.createCallExpression(t.createPropertyAccessExpression(t.createIdentifier(\"Object\"),\"defineProperty\"),void 0,[mr,gi,t.createObjectLiteralExpression(Ea,!0)]);return Ln&&mu(bo),bo}function ri(ee){ee.transformFlags&16384&&!(x&16384)&&(x|=65536);let Ze=C;C=void 0;let At=B(15232,66),xt=t.createFunctionExpression(void 0,void 0,void 0,void 0,Sc(ee.parameters,ie,e),void 0,dr(ee));return it(xt,ee),Ir(xt,ee),Jn(xt,16),q(At,0,0),C=Ze,xt}function vn(ee){let Ze=Ya(ee)&524288?B(32662,69):B(32670,65),At=C;C=void 0;let xt=Sc(ee.parameters,ie,e),qt=dr(ee),Ln=x&32768?t.getLocalName(ee):ee.name;return q(Ze,98304,0),C=At,t.updateFunctionExpression(ee,void 0,ee.asteriskToken,Ln,void 0,xt,void 0,qt)}function Ht(ee){let Ze=C;C=void 0;let At=B(32670,65),xt=Sc(ee.parameters,ie,e),qt=dr(ee),Ln=x&32768?t.getLocalName(ee):ee.name;return q(At,98304,0),C=Ze,t.updateFunctionDeclaration(ee,On(ee.modifiers,ie,Ha),ee.asteriskToken,Ln,void 0,xt,void 0,qt)}function En(ee,Ze,At,xt){let qt=C;C=void 0;let Ln=xt&&Yr(xt)&&!Ca(ee)?B(32670,73):B(32670,65),mr=Sc(ee.parameters,ie,e),Vr=dr(ee);return x&32768&&!At&&(ee.kind===259||ee.kind===215)&&(At=t.getGeneratedNameForNode(ee)),q(Ln,98304,0),C=qt,Ir(it(t.createFunctionExpression(void 0,ee.asteriskToken,At,void 0,mr,void 0,Vr),Ze),ee)}function dr(ee){let Ze=!1,At=!1,xt,qt,Ln=[],mr=[],Vr=ee.body,gi;if(o(),Va(Vr)&&(gi=t.copyStandardPrologue(Vr.statements,Ln,0,!1),gi=t.copyCustomPrologue(Vr.statements,mr,gi,ie,C6),gi=t.copyCustomPrologue(Vr.statements,mr,gi,ie,I6)),Ze=_n(mr,ee)||Ze,Ze=Ni(mr,ee,!1)||Ze,Va(Vr))gi=t.copyCustomPrologue(Vr.statements,mr,gi,ie),xt=Vr.statements,si(mr,On(Vr.statements,ie,ca,gi)),!Ze&&Vr.multiLine&&(Ze=!0);else{L.assert(ee.kind===216),xt=i4(Vr,-1);let bo=ee.equalsGreaterThanToken;!ws(bo)&&!ws(Vr)&&(DR(bo,Vr,v)?At=!0:Ze=!0);let Qo=$e(Vr,ie,ot),Cs=t.createReturnStatement(Qo);it(Cs,Vr),pue(Cs,Vr),Jn(Cs,2880),mr.push(Cs),qt=Vr}if(t.mergeLexicalEnvironment(Ln,s()),nn(Ln,ee,!1),Pi(Ln,ee),vt(Ln)&&(Ze=!0),mr.unshift(...Ln),Va(Vr)&&up(mr,Vr.statements))return Vr;let Ea=t.createBlock(it(t.createNodeArray(mr),xt),Ze);return it(Ea,ee.body),!Ze&&At&&Jn(Ea,1),qt&&_ue(Ea,19,qt),Ir(Ea,ee.body),Ea}function Cr(ee,Ze){if(Ze)return xn(ee,ie,e);let At=x&256?B(7104,512):B(6976,128),xt=xn(ee,ie,e);return q(At,0,0),xt}function Se(ee){return xn(ee,$,e)}function at(ee,Ze){return xn(ee,Ze?$:ie,e)}function Tt(ee,Ze){return Fg(ee)?KT(ee,ie,e,0,!Ze):ee.operatorToken.kind===27?t.updateBinaryExpression(ee,L.checkDefined($e(ee.left,$,ot)),ee.operatorToken,L.checkDefined($e(ee.right,Ze?$:ie,ot))):xn(ee,ie,e)}function ve(ee,Ze){if(Ze)return xn(ee,$,e);let At;for(let qt=0;qt<ee.elements.length;qt++){let Ln=ee.elements[qt],mr=$e(Ln,qt<ee.elements.length-1?$:ie,ot);(At||mr!==Ln)&&(At||(At=ee.elements.slice(0,qt)),L.assert(mr),At.push(mr))}let xt=At?it(t.createNodeArray(At),ee.elements):ee.elements;return t.updateCommaListExpression(ee,xt)}function nt(ee){return ee.declarationList.declarations.length===1&&!!ee.declarationList.declarations[0].initializer&&!!(o_(ee.declarationList.declarations[0].initializer)&1)}function ce(ee){let Ze=B(0,Mr(ee,1)?32:0),At;if(C&&!(ee.declarationList.flags&3)&&!nt(ee)){let xt;for(let qt of ee.declarationList.declarations)if(Kr(C,qt),qt.initializer){let Ln;La(qt.name)?Ln=KT(qt,ie,e,0):(Ln=t.createBinaryExpression(qt.name,63,L.checkDefined($e(qt.initializer,ie,ot))),it(Ln,qt)),xt=Sn(xt,Ln)}xt?At=it(t.createExpressionStatement(t.inlineExpressions(xt)),ee):At=void 0}else At=xn(ee,ie,e);return q(Ze,0,0),At}function Q(ee){if(ee.flags&3||ee.transformFlags&524288){ee.flags&3&&$o();let Ze=On(ee.declarations,ee.flags&1?Oe:je,wi),At=t.createVariableDeclarationList(Ze);return Ir(At,ee),it(At,ee),hl(At,ee),ee.transformFlags&524288&&(La(ee.declarations[0].name)||La(To(ee.declarations).name))&&Ho(At,ue(Ze)),At}return xn(ee,ie,e)}function ue(ee){let Ze=-1,At=-1;for(let xt of ee)Ze=Ze===-1?xt.pos:xt.pos===-1?Ze:Math.min(Ze,xt.pos),At=Math.max(At,xt.end);return Gf(Ze,At)}function G(ee){let Ze=d.getNodeCheckFlags(ee),At=Ze&16384,xt=Ze&32768;return!((x&64)!==0||At&&xt&&(x&512)!==0)&&(x&4096)===0&&(!d.isDeclarationWithCollidingName(ee)||xt&&!At&&(x&6144)===0)}function Oe(ee){let Ze=ee.name;return La(Ze)?je(ee):!ee.initializer&&G(ee)?t.updateVariableDeclaration(ee,ee.name,void 0,void 0,t.createVoidZero()):xn(ee,ie,e)}function je(ee){let Ze=B(32,0),At;return La(ee.name)?At=eE(ee,ie,e,0,void 0,(Ze&32)!==0):At=xn(ee,ie,e),q(Ze,0,0),At}function Ge(ee){C.labels.set(vr(ee.label),!0)}function kt(ee){C.labels.set(vr(ee.label),!1)}function Kt(ee){C&&!C.labels&&(C.labels=new Map);let Ze=xH(ee,C&&Ge);return Wy(Ze,!1)?ln(Ze,ee):t.restoreEnclosingLabel(L.checkDefined($e(Ze,ie,ca,t.liftToBlock)),ee,C&&kt)}function ln(ee,Ze){switch(ee.kind){case 243:case 244:return ae(ee,Ze);case 245:return rt(ee,Ze);case 246:return Ke(ee,Ze);case 247:return oe(ee,Ze)}}function ir(ee,Ze,At,xt,qt){let Ln=B(ee,Ze),mr=Si(At,xt,Ln,qt);return q(Ln,0,0),mr}function ae(ee,Ze){return ir(0,1280,ee,Ze)}function rt(ee,Ze){return ir(5056,3328,ee,Ze)}function Ot(ee){return t.updateForStatement(ee,$e(ee.initializer,$,pp),$e(ee.condition,ie,ot),$e(ee.incrementor,$,ot),L.checkDefined($e(ee.statement,ie,ca,t.liftToBlock)))}function Ke(ee,Ze){return ir(3008,5376,ee,Ze)}function oe(ee,Ze){return ir(3008,5376,ee,Ze,f.downlevelIteration?j:Te)}function pe(ee,Ze,At){let xt=[],qt=ee.initializer;if(pu(qt)){ee.initializer.flags&3&&$o();let Ln=Sl(qt.declarations);if(Ln&&La(Ln.name)){let mr=eE(Ln,ie,e,0,Ze),Vr=it(t.createVariableDeclarationList(mr),ee.initializer);Ir(Vr,ee.initializer),Ho(Vr,Gf(mr[0].pos,To(mr).end)),xt.push(t.createVariableStatement(void 0,Vr))}else xt.push(it(t.createVariableStatement(void 0,Ir(it(t.createVariableDeclarationList([t.createVariableDeclaration(Ln?Ln.name:t.createTempVariable(void 0),void 0,void 0,Ze)]),fb(qt,-1)),qt)),i4(qt,-1)))}else{let Ln=t.createAssignment(qt,Ze);Fg(Ln)?xt.push(t.createExpressionStatement(Tt(Ln,!0))):(r2(Ln,qt.end),xt.push(it(t.createExpressionStatement(L.checkDefined($e(Ln,ie,ot))),i4(qt,-1))))}if(At)return z(si(xt,At));{let Ln=$e(ee.statement,ie,ca,t.liftToBlock);return L.assert(Ln),Va(Ln)?t.updateBlock(Ln,it(t.createNodeArray(Qi(xt,Ln.statements)),Ln.statements)):(xt.push(Ln),z(xt))}}function z(ee){return Jn(t.createBlock(t.createNodeArray(ee),!0),864)}function Te(ee,Ze,At){let xt=$e(ee.expression,ie,ot);L.assert(xt);let qt=t.createLoopVariable(),Ln=Re(xt)?t.getGeneratedNameForNode(xt):t.createTempVariable(void 0);Jn(xt,96|Ya(xt));let mr=it(t.createForStatement(Jn(it(t.createVariableDeclarationList([it(t.createVariableDeclaration(qt,void 0,void 0,t.createNumericLiteral(0)),fb(ee.expression,-1)),it(t.createVariableDeclaration(Ln,void 0,void 0,xt),ee.expression)]),ee.expression),4194304),it(t.createLessThan(qt,t.createPropertyAccessExpression(Ln,\"length\")),ee.expression),it(t.createPostfixIncrement(qt),ee.expression),pe(ee,t.createElementAccessExpression(Ln,qt),At)),ee);return Jn(mr,512),it(mr,ee),t.restoreEnclosingLabel(mr,Ze,C&&kt)}function j(ee,Ze,At,xt){let qt=$e(ee.expression,ie,ot);L.assert(qt);let Ln=Re(qt)?t.getGeneratedNameForNode(qt):t.createTempVariable(void 0),mr=Re(qt)?t.getGeneratedNameForNode(Ln):t.createTempVariable(void 0),Vr=t.createUniqueName(\"e\"),gi=t.getGeneratedNameForNode(Vr),Ea=t.createTempVariable(void 0),bo=it(r().createValuesHelper(qt),ee.expression),Qo=t.createCallExpression(t.createPropertyAccessExpression(Ln,\"next\"),void 0,[]);l(Vr),l(Ea);let Cs=xt&1024?t.inlineExpressions([t.createAssignment(Vr,t.createVoidZero()),bo]):bo,Bu=Jn(it(t.createForStatement(Jn(it(t.createVariableDeclarationList([it(t.createVariableDeclaration(Ln,void 0,void 0,Cs),ee.expression),t.createVariableDeclaration(mr,void 0,void 0,Qo)]),ee.expression),4194304),t.createLogicalNot(t.createPropertyAccessExpression(mr,\"done\")),t.createAssignment(mr,Qo),pe(ee,t.createPropertyAccessExpression(mr,\"value\"),At)),ee),512);return t.createTryStatement(t.createBlock([t.restoreEnclosingLabel(Bu,Ze,C&&kt)]),t.createCatchClause(t.createVariableDeclaration(gi),Jn(t.createBlock([t.createExpressionStatement(t.createAssignment(Vr,t.createObjectLiteralExpression([t.createPropertyAssignment(\"error\",gi)])))]),1)),t.createBlock([t.createTryStatement(t.createBlock([Jn(t.createIfStatement(t.createLogicalAnd(t.createLogicalAnd(mr,t.createLogicalNot(t.createPropertyAccessExpression(mr,\"done\"))),t.createAssignment(Ea,t.createPropertyAccessExpression(Ln,\"return\"))),t.createExpressionStatement(t.createFunctionCallCall(Ea,Ln,[]))),1)]),void 0,Jn(t.createBlock([Jn(t.createIfStatement(Vr,t.createThrowStatement(t.createPropertyAccessExpression(Vr,\"error\"))),1)]),1))]))}function yt(ee){let Ze=ee.properties,At=-1,xt=!1;for(let Vr=0;Vr<Ze.length;Vr++){let gi=Ze[Vr];if(gi.transformFlags&1048576&&x&4||(xt=L.checkDefined(gi.name).kind===164)){At=Vr;break}}if(At<0)return xn(ee,ie,e);let qt=t.createTempVariable(l),Ln=[],mr=t.createAssignment(qt,Jn(t.createObjectLiteralExpression(On(Ze,ie,Og,0,At),ee.multiLine),xt?131072:0));return ee.multiLine&&mu(mr),Ln.push(mr),Co(Ln,ee,qt,At),Ln.push(ee.multiLine?mu(go(it(t.cloneNode(qt),qt),qt.parent)):qt),t.inlineExpressions(Ln)}function lt(ee){return(d.getNodeCheckFlags(ee)&8192)!==0}function Qe(ee){return FT(ee)&&!!ee.initializer&&lt(ee.initializer)}function Vt(ee){return FT(ee)&&!!ee.condition&&lt(ee.condition)}function Hn(ee){return FT(ee)&&!!ee.incrementor&&lt(ee.incrementor)}function jr(ee){return ei(ee)||Qe(ee)}function ei(ee){return(d.getNodeCheckFlags(ee)&4096)!==0}function Kr(ee,Ze){ee.hoistedLocalVariables||(ee.hoistedLocalVariables=[]),At(Ze.name);function At(xt){if(xt.kind===79)ee.hoistedLocalVariables.push(xt);else for(let qt of xt.elements)ol(qt)||At(qt.name)}}function Si(ee,Ze,At,xt){if(!jr(ee)){let bo;C&&(bo=C.allowedNonLabeledJumps,C.allowedNonLabeledJumps=6);let Qo=xt?xt(ee,Ze,void 0,At):t.restoreEnclosingLabel(FT(ee)?Ot(ee):xn(ee,ie,e),Ze,C&&kt);return C&&(C.allowedNonLabeledJumps=bo),Qo}let qt=Fo(ee),Ln=[],mr=C;C=qt;let Vr=Qe(ee)?gn(ee,qt):void 0,gi=ei(ee)?Ki(ee,qt,mr):void 0;C=mr,Vr&&Ln.push(Vr.functionDeclaration),gi&&Ln.push(gi.functionDeclaration),Qr(Ln,qt,mr),Vr&&Ln.push(mc(Vr.functionName,Vr.containsYield));let Ea;if(gi)if(xt)Ea=xt(ee,Ze,gi.part,At);else{let bo=Ja(ee,Vr,t.createBlock(gi.part,!0));Ea=t.restoreEnclosingLabel(bo,Ze,C&&kt)}else{let bo=Ja(ee,Vr,L.checkDefined($e(ee.statement,ie,ca,t.liftToBlock)));Ea=t.restoreEnclosingLabel(bo,Ze,C&&kt)}return Ln.push(Ea),Ln}function Ja(ee,Ze,At){switch(ee.kind){case 245:return Za(ee,Ze,At);case 246:return Hi(ee,At);case 247:return Fa(ee,At);case 243:return xi(ee,At);case 244:return Nr(ee,At);default:return L.failBadSyntaxKind(ee,\"IterationStatement expected\")}}function Za(ee,Ze,At){let xt=ee.condition&&lt(ee.condition),qt=xt||ee.incrementor&&lt(ee.incrementor);return t.updateForStatement(ee,$e(Ze?Ze.part:ee.initializer,$,pp),$e(xt?void 0:ee.condition,ie,ot),$e(qt?void 0:ee.incrementor,$,ot),At)}function Fa(ee,Ze){return t.updateForOfStatement(ee,void 0,L.checkDefined($e(ee.initializer,ie,pp)),L.checkDefined($e(ee.expression,ie,ot)),Ze)}function Hi(ee,Ze){return t.updateForInStatement(ee,L.checkDefined($e(ee.initializer,ie,pp)),L.checkDefined($e(ee.expression,ie,ot)),Ze)}function xi(ee,Ze){return t.updateDoStatement(ee,Ze,L.checkDefined($e(ee.expression,ie,ot)))}function Nr(ee,Ze){return t.updateWhileStatement(ee,L.checkDefined($e(ee.expression,ie,ot)),Ze)}function Fo(ee){let Ze;switch(ee.kind){case 245:case 246:case 247:let Ln=ee.initializer;Ln&&Ln.kind===258&&(Ze=Ln);break}let At=[],xt=[];if(Ze&&G_(Ze)&3){let Ln=Qe(ee)||Vt(ee)||Hn(ee);for(let mr of Ze.declarations)aa(ee,mr,At,xt,Ln)}let qt={loopParameters:At,loopOutParameters:xt};return C&&(C.argumentsName&&(qt.argumentsName=C.argumentsName),C.thisName&&(qt.thisName=C.thisName),C.hoistedLocalVariables&&(qt.hoistedLocalVariables=C.hoistedLocalVariables)),qt}function Qr(ee,Ze,At){let xt;if(Ze.argumentsName&&(At?At.argumentsName=Ze.argumentsName:(xt||(xt=[])).push(t.createVariableDeclaration(Ze.argumentsName,void 0,void 0,t.createIdentifier(\"arguments\")))),Ze.thisName&&(At?At.thisName=Ze.thisName:(xt||(xt=[])).push(t.createVariableDeclaration(Ze.thisName,void 0,void 0,t.createIdentifier(\"this\")))),Ze.hoistedLocalVariables)if(At)At.hoistedLocalVariables=Ze.hoistedLocalVariables;else{xt||(xt=[]);for(let qt of Ze.hoistedLocalVariables)xt.push(t.createVariableDeclaration(qt))}if(Ze.loopOutParameters.length){xt||(xt=[]);for(let qt of Ze.loopOutParameters)xt.push(t.createVariableDeclaration(qt.outParamName))}Ze.conditionVariable&&(xt||(xt=[]),xt.push(t.createVariableDeclaration(Ze.conditionVariable,void 0,void 0,t.createFalse()))),xt&&ee.push(t.createVariableStatement(void 0,t.createVariableDeclarationList(xt)))}function Wi(ee){return t.createVariableDeclaration(ee.originalName,void 0,void 0,ee.outParamName)}function gn(ee,Ze){let At=t.createUniqueName(\"_loop_init\"),xt=(ee.initializer.transformFlags&1048576)!==0,qt=0;Ze.containsLexicalThis&&(qt|=16),xt&&x&4&&(qt|=524288);let Ln=[];Ln.push(t.createVariableStatement(void 0,ee.initializer)),Ps(Ze.loopOutParameters,2,1,Ln);let mr=t.createVariableStatement(void 0,Jn(t.createVariableDeclarationList([t.createVariableDeclaration(At,void 0,void 0,Jn(t.createFunctionExpression(void 0,xt?t.createToken(41):void 0,void 0,void 0,void 0,void 0,L.checkDefined($e(t.createBlock(Ln,!0),ie,Va))),qt))]),4194304)),Vr=t.createVariableDeclarationList(on(Ze.loopOutParameters,Wi));return{functionName:At,containsYield:xt,functionDeclaration:mr,part:Vr}}function Ki(ee,Ze,At){let xt=t.createUniqueName(\"_loop\");i();let qt=$e(ee.statement,ie,ca,t.liftToBlock),Ln=s(),mr=[];(Vt(ee)||Hn(ee))&&(Ze.conditionVariable=t.createUniqueName(\"inc\"),ee.incrementor?mr.push(t.createIfStatement(Ze.conditionVariable,t.createExpressionStatement(L.checkDefined($e(ee.incrementor,ie,ot))),t.createExpressionStatement(t.createAssignment(Ze.conditionVariable,t.createTrue())))):mr.push(t.createIfStatement(t.createLogicalNot(Ze.conditionVariable),t.createExpressionStatement(t.createAssignment(Ze.conditionVariable,t.createTrue())))),Vt(ee)&&mr.push(t.createIfStatement(t.createPrefixUnaryExpression(53,L.checkDefined($e(ee.condition,ie,ot))),L.checkDefined($e(t.createBreakStatement(),ie,ca))))),L.assert(qt),Va(qt)?si(mr,qt.statements):mr.push(qt),Ps(Ze.loopOutParameters,1,1,mr),em(mr,Ln);let Vr=t.createBlock(mr,!0);Va(qt)&&Ir(Vr,qt);let gi=(ee.statement.transformFlags&1048576)!==0,Ea=1048576;Ze.containsLexicalThis&&(Ea|=16),gi&&x&4&&(Ea|=524288);let bo=t.createVariableStatement(void 0,Jn(t.createVariableDeclarationList([t.createVariableDeclaration(xt,void 0,void 0,Jn(t.createFunctionExpression(void 0,gi?t.createToken(41):void 0,void 0,void 0,Ze.loopParameters,void 0,Vr),Ea))]),4194304)),Qo=xc(xt,Ze,At,gi);return{functionName:xt,containsYield:gi,functionDeclaration:bo,part:Qo}}function kc(ee,Ze){let At=Ze===0?ee.outParamName:ee.originalName,xt=Ze===0?ee.originalName:ee.outParamName;return t.createBinaryExpression(xt,63,At)}function Ps(ee,Ze,At,xt){for(let qt of ee)qt.flags&Ze&&xt.push(t.createExpressionStatement(kc(qt,At)))}function mc(ee,Ze){let At=t.createCallExpression(ee,void 0,[]),xt=Ze?t.createYieldExpression(t.createToken(41),Jn(At,16777216)):At;return t.createExpressionStatement(xt)}function xc(ee,Ze,At,xt){let qt=[],Ln=!(Ze.nonLocalJumps&-5)&&!Ze.labeledNonLocalBreaks&&!Ze.labeledNonLocalContinues,mr=t.createCallExpression(ee,void 0,on(Ze.loopParameters,gi=>gi.name)),Vr=xt?t.createYieldExpression(t.createToken(41),Jn(mr,16777216)):mr;if(Ln)qt.push(t.createExpressionStatement(Vr)),Ps(Ze.loopOutParameters,1,0,qt);else{let gi=t.createUniqueName(\"state\"),Ea=t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(gi,void 0,void 0,Vr)]));if(qt.push(Ea),Ps(Ze.loopOutParameters,1,0,qt),Ze.nonLocalJumps&8){let bo;At?(At.nonLocalJumps|=8,bo=t.createReturnStatement(gi)):bo=t.createReturnStatement(t.createPropertyAccessExpression(gi,\"value\")),qt.push(t.createIfStatement(t.createTypeCheck(gi,\"object\"),bo))}if(Ze.nonLocalJumps&2&&qt.push(t.createIfStatement(t.createStrictEquality(gi,t.createStringLiteral(\"break\")),t.createBreakStatement())),Ze.labeledNonLocalBreaks||Ze.labeledNonLocalContinues){let bo=[];ro(Ze.labeledNonLocalBreaks,!0,gi,At,bo),ro(Ze.labeledNonLocalContinues,!1,gi,At,bo),qt.push(t.createSwitchStatement(gi,t.createCaseBlock(bo)))}}return qt}function hc(ee,Ze,At,xt){Ze?(ee.labeledNonLocalBreaks||(ee.labeledNonLocalBreaks=new Map),ee.labeledNonLocalBreaks.set(At,xt)):(ee.labeledNonLocalContinues||(ee.labeledNonLocalContinues=new Map),ee.labeledNonLocalContinues.set(At,xt))}function ro(ee,Ze,At,xt,qt){ee&&ee.forEach((Ln,mr)=>{let Vr=[];if(!xt||xt.labels&&xt.labels.get(mr)){let gi=t.createIdentifier(mr);Vr.push(Ze?t.createBreakStatement(gi):t.createContinueStatement(gi))}else hc(xt,Ze,mr,Ln),Vr.push(t.createReturnStatement(At));qt.push(t.createCaseClause(t.createStringLiteral(Ln),Vr))})}function aa(ee,Ze,At,xt,qt){let Ln=Ze.name;if(La(Ln))for(let mr of Ln.elements)ol(mr)||aa(ee,mr,At,xt,qt);else{At.push(t.createParameterDeclaration(void 0,void 0,Ln));let mr=d.getNodeCheckFlags(Ze);if(mr&262144||qt){let Vr=t.createUniqueName(\"out_\"+vr(Ln)),gi=0;mr&262144&&(gi|=1),FT(ee)&&(ee.initializer&&d.isBindingCapturedByNode(ee.initializer,Ze)&&(gi|=2),(ee.condition&&d.isBindingCapturedByNode(ee.condition,Ze)||ee.incrementor&&d.isBindingCapturedByNode(ee.incrementor,Ze))&&(gi|=1)),xt.push({flags:gi,originalName:Ln,outParamName:Vr})}}}function Co(ee,Ze,At,xt){let qt=Ze.properties,Ln=qt.length;for(let mr=xt;mr<Ln;mr++){let Vr=qt[mr];switch(Vr.kind){case 174:case 175:let gi=kT(Ze.properties,Vr);Vr===gi.firstAccessor&&ee.push(hi(At,gi,Ze,!!Ze.multiLine));break;case 171:ee.push(md(Vr,At,Ze,Ze.multiLine));break;case 299:ee.push(gc(Vr,At,Ze.multiLine));break;case 300:ee.push(Ll(Vr,At,Ze.multiLine));break;default:L.failBadSyntaxKind(Ze);break}}}function gc(ee,Ze,At){let xt=t.createAssignment(VT(t,Ze,L.checkDefined($e(ee.name,ie,Ys))),L.checkDefined($e(ee.initializer,ie,ot)));return it(xt,ee),At&&mu(xt),xt}function Ll(ee,Ze,At){let xt=t.createAssignment(VT(t,Ze,L.checkDefined($e(ee.name,ie,Ys))),t.cloneNode(ee.name));return it(xt,ee),At&&mu(xt),xt}function md(ee,Ze,At,xt){let qt=t.createAssignment(VT(t,Ze,L.checkDefined($e(ee.name,ie,Ys))),En(ee,ee,void 0,At));return it(qt,ee),xt&&mu(qt),qt}function Pc(ee){let Ze=B(7104,0),At;if(L.assert(!!ee.variableDeclaration,\"Catch clause variable should always be present when downleveling ES2015.\"),La(ee.variableDeclaration.name)){let xt=t.createTempVariable(void 0),qt=t.createVariableDeclaration(xt);it(qt,ee.variableDeclaration);let Ln=eE(ee.variableDeclaration,ie,e,0,xt),mr=t.createVariableDeclarationList(Ln);it(mr,ee.variableDeclaration);let Vr=t.createVariableStatement(void 0,mr);At=t.updateCatchClause(ee,qt,bl(ee.block,Vr))}else At=xn(ee,ie,e);return q(Ze,0,0),At}function bl(ee,Ze){let At=On(ee.statements,ie,ca);return t.updateBlock(ee,[Ze,...At])}function ss(ee){L.assert(!ts(ee.name));let Ze=En(ee,fb(ee,-1),void 0,void 0);return Jn(Ze,1024|Ya(Ze)),it(t.createPropertyAssignment(ee.name,Ze),ee)}function qs(ee){L.assert(!ts(ee.name));let Ze=C;C=void 0;let At=B(32670,65),xt,qt=Sc(ee.parameters,ie,e),Ln=dr(ee);return ee.kind===174?xt=t.updateGetAccessorDeclaration(ee,ee.modifiers,ee.name,qt,ee.type,Ln):xt=t.updateSetAccessorDeclaration(ee,ee.modifiers,ee.name,qt,Ln),q(At,98304,0),C=Ze,xt}function Rs(ee){return it(t.createPropertyAssignment(ee.name,ke(t.cloneNode(ee.name))),ee)}function As(ee){return xn(ee,ie,e)}function jt(ee){return xn(ee,ie,e)}function yc(ee){return vt(ee.elements,Km)?K(ee.elements,!1,!!ee.multiLine,!!ee.elements.hasTrailingComma):xn(ee,ie,e)}function Ql(ee){if(o_(ee)&1)return yu(ee);let Ze=ql(ee.expression);return Ze.kind===106||Pu(Ze)||vt(ee.arguments,Km)?ht(ee,!0):t.updateCallExpression(ee,L.checkDefined($e(ee.expression,Z,ot)),void 0,On(ee.arguments,ie,ot))}function yu(ee){let Ze=Ga(Ga(ql(ee.expression),xs).body,Va),At=Md=>Bc(Md)&&!!Vo(Md.declarationList.declarations).initializer,xt=C;C=void 0;let qt=On(Ze.statements,fe,ca);C=xt;let Ln=Pr(qt,At),mr=Pr(qt,Md=>!At(Md)),gi=Ga(Vo(Ln),Bc).declarationList.declarations[0],Ea=ql(gi.initializer),bo=zr(Ea,Iu);!bo&&ar(Ea)&&Ea.operatorToken.kind===27&&(bo=zr(Ea.left,Iu));let Qo=Ga(bo?ql(bo.right):Ea,Pa),Cs=Ga(ql(Qo.expression),ms),Bu=Cs.body.statements,Pd=0,Dc=-1,gd=[];if(bo){let Md=zr(Bu[Pd],Ol);Md&&(gd.push(Md),Pd++),gd.push(Bu[Pd]),Pd++,gd.push(t.createExpressionStatement(t.createAssignment(bo.left,Ga(gi.name,Re))))}for(;!j_(Ig(Bu,Dc));)Dc--;si(gd,Bu,Pd,Dc),Dc<-1&&si(gd,Bu,Dc+1);let Zl=zr(Ig(Bu,Dc),j_);for(let Md of mr)j_(Md)&&Zl?.expression&&!Re(Zl.expression)?gd.push(Zl):gd.push(Md);return si(gd,Ln,1),t.restoreOuterExpressions(ee.expression,t.restoreOuterExpressions(gi.initializer,t.restoreOuterExpressions(bo&&bo.right,t.updateCallExpression(Qo,t.restoreOuterExpressions(Qo.expression,t.updateFunctionExpression(Cs,void 0,void 0,void 0,void 0,Cs.parameters,void 0,t.updateBlock(Cs.body,gd))),void 0,Qo.arguments))))}function se(ee){return ht(ee,!1)}function ht(ee,Ze){if(ee.transformFlags&32768||ee.expression.kind===106||Pu(ql(ee.expression))){let{target:At,thisArg:xt}=t.createCallBinding(ee.expression,l);ee.expression.kind===106&&Jn(xt,8);let qt;if(ee.transformFlags&32768?qt=t.createFunctionApplyCall(L.checkDefined($e(At,Z,ot)),ee.expression.kind===106?xt:L.checkDefined($e(xt,ie,ot)),K(ee.arguments,!0,!1,!1)):qt=it(t.createFunctionCallCall(L.checkDefined($e(At,Z,ot)),ee.expression.kind===106?xt:L.checkDefined($e(xt,ie,ot)),On(ee.arguments,ie,ot)),ee),ee.expression.kind===106){let Ln=t.createLogicalOr(qt,zt());qt=Ze?t.createAssignment(t.createUniqueName(\"_this\",48),Ln):Ln}return Ir(qt,ee)}return xn(ee,ie,e)}function wt(ee){if(vt(ee.arguments,Km)){let{target:Ze,thisArg:At}=t.createCallBinding(t.createPropertyAccessExpression(ee.expression,\"bind\"),l);return t.createNewExpression(t.createFunctionApplyCall(L.checkDefined($e(Ze,ie,ot)),At,K(t.createNodeArray([t.createVoidZero(),...ee.arguments]),!0,!1,!1)),void 0,[])}return xn(ee,ie,e)}function K(ee,Ze,At,xt){let qt=ee.length,Ln=t_(c8(ee,Xe,(Ea,bo,Qo,Cs)=>bo(Ea,At,xt&&Cs===qt)));if(Ln.length===1){let Ea=Ln[0];if(Ze&&!f.downlevelIteration||UW(Ea.expression)||pL(Ea.expression,\"___spreadArray\"))return Ea.expression}let mr=r(),Vr=Ln[0].kind!==0,gi=Vr?t.createArrayLiteralExpression():Ln[0].expression;for(let Ea=Vr?0:1;Ea<Ln.length;Ea++){let bo=Ln[Ea];gi=mr.createSpreadArrayHelper(gi,bo.expression,bo.kind===1&&!Ze)}return gi}function Xe(ee){return Km(ee)?ft:pr}function ft(ee){return on(ee,Yt)}function Yt(ee){L.assertNode(ee,Km);let Ze=$e(ee.expression,ie,ot);L.assert(Ze);let At=pL(Ze,\"___read\"),xt=At||UW(Ze)?2:1;return f.downlevelIteration&&xt===1&&!fu(Ze)&&!At&&(Ze=r().createReadHelper(Ze,void 0),xt=2),ppe(xt,Ze)}function pr(ee,Ze,At){let xt=t.createArrayLiteralExpression(On(t.createNodeArray(ee,At),ie,ot),Ze);return ppe(0,xt)}function yr(ee){return $e(ee.expression,ie,ot)}function ta(ee){return it(t.createStringLiteral(ee.text),ee)}function Go(ee){return ee.hasExtendedUnicodeEscape?it(t.createStringLiteral(ee.text),ee):ee}function Ka(ee){return ee.numericLiteralFlags&384?it(t.createNumericLiteral(ee.text),ee):ee}function vo(ee){return OK(e,ee,ie,v,w,1)}function ka(ee){let Ze=t.createStringLiteral(ee.head.text);for(let At of ee.templateSpans){let xt=[L.checkDefined($e(At.expression,ie,ot))];At.literal.text.length>0&&xt.push(t.createStringLiteral(At.literal.text)),Ze=t.createCallExpression(t.createPropertyAccessExpression(Ze,\"concat\"),void 0,xt)}return it(Ze,ee)}function Hs(ee){return x&8&&!ee?t.createPropertyAccessExpression(t.createUniqueName(\"_super\",48),\"prototype\"):t.createUniqueName(\"_super\",48)}function Uc(ee){return ee.keywordToken===103&&ee.name.escapedText===\"target\"?(x|=32768,t.createUniqueName(\"_newTarget\",48)):ee}function Gu(ee,Ze,At){if(P&1&&Ia(Ze)){let xt=B(32670,Ya(Ze)&16?81:65);m(ee,Ze,At),q(xt,0,0);return}m(ee,Ze,At)}function $o(){P&2||(P|=2,e.enableSubstitution(79))}function jo(){P&1||(P|=1,e.enableSubstitution(108),e.enableEmitNotification(173),e.enableEmitNotification(171),e.enableEmitNotification(174),e.enableEmitNotification(175),e.enableEmitNotification(216),e.enableEmitNotification(215),e.enableEmitNotification(259))}function Ws(ee,Ze){return Ze=g(ee,Ze),ee===1?nf(Ze):Re(Ze)?hd(Ze):Ze}function hd(ee){if(P&2&&!eJ(ee)){let Ze=ea(ee,Re);if(Ze&&vc(Ze))return it(t.getGeneratedNameForNode(Ze),ee)}return ee}function vc(ee){switch(ee.parent.kind){case 205:case 260:case 263:case 257:return ee.parent.name===ee&&d.isDeclarationWithCollidingName(ee.parent)}return!1}function nf(ee){switch(ee.kind){case 79:return ye(ee);case 108:return bn(ee)}return ee}function ye(ee){if(P&2&&!eJ(ee)){let Ze=d.getReferencedDeclarationWithCollidingName(ee);if(Ze&&!(Yr(Ze)&&Et(Ze,ee)))return it(t.getGeneratedNameForNode(sa(Ze)),ee)}return ee}function Et(ee,Ze){let At=ea(Ze);if(!At||At===ee||At.end<=ee.pos||At.pos>=ee.end)return!1;let xt=tm(ee);for(;At;){if(At===xt||At===ee)return!1;if(_l(At)&&At.parent===ee)return!0;At=At.parent}return!1}function bn(ee){return P&1&&x&16?it(t.createUniqueName(\"_this\",48),ee):ee}function Ri(ee,Ze){return Ca(Ze)?t.getInternalName(ee):t.createPropertyAccessExpression(t.getInternalName(ee),\"prototype\")}function io(ee,Ze){if(!ee||!Ze||vt(ee.parameters))return!1;let At=Sl(ee.body.statements);if(!At||!ws(At)||At.kind!==241)return!1;let xt=At.expression;if(!ws(xt)||xt.kind!==210)return!1;let qt=xt.expression;if(!ws(qt)||qt.kind!==106)return!1;let Ln=Wp(xt.arguments);if(!Ln||!ws(Ln)||Ln.kind!==227)return!1;let mr=Ln.expression;return Re(mr)&&mr.escapedText===\"arguments\"}}var yMe=gt({\"src/compiler/transformers/es2015.ts\"(){\"use strict\";fa()}});function hpe(e){let{factory:t}=e,r=e.getCompilerOptions(),i,o;(r.jsx===1||r.jsx===3)&&(i=e.onEmitNode,e.onEmitNode=f,e.enableEmitNotification(283),e.enableEmitNotification(284),e.enableEmitNotification(282),o=[]);let s=e.onSubstituteNode;return e.onSubstituteNode=d,e.enableSubstitution(208),e.enableSubstitution(299),y_(e,l);function l(S){return S}function f(S,x,A){switch(x.kind){case 283:case 284:case 282:let w=x.tagName;o[sc(w)]=!0;break}i(S,x,A)}function d(S,x){return x.id&&o&&o[x.id]?s(S,x):(x=s(S,x),br(x)?g(x):yl(x)?m(x):x)}function g(S){if(pi(S.name))return S;let x=v(S.name);return x?it(t.createElementAccessExpression(S.expression,x),S):S}function m(S){let x=Re(S.name)&&v(S.name);return x?t.updatePropertyAssignment(S,x,S.initializer):S}function v(S){let x=nb(S);if(x!==void 0&&x>=81&&x<=116)return it(t.createStringLiteralFromNode(S),S)}}var vMe=gt({\"src/compiler/transformers/es5.ts\"(){\"use strict\";fa()}});function bMe(e){switch(e){case 2:return\"return\";case 3:return\"break\";case 4:return\"yield\";case 5:return\"yield*\";case 7:return\"endfinally\";default:return}}function gpe(e){let{factory:t,getEmitHelperFactory:r,resumeLexicalEnvironment:i,endLexicalEnvironment:o,hoistFunctionDeclaration:s,hoistVariableDeclaration:l}=e,f=e.getCompilerOptions(),d=Do(f),g=e.getEmitResolver(),m=e.onSubstituteNode;e.onSubstituteNode=oe;let v,S,x,A,w,C,P,F,B,q,W=1,Y,R,ie,$,fe=0,Z=0,U,re,le,_e,ge,X,Ve,we;return y_(e,ke);function ke(ye){if(ye.isDeclarationFile||!(ye.transformFlags&2048))return ye;let Et=xn(ye,Pe,e);return Bg(Et,e.readEmitHelpers()),Et}function Pe(ye){let Et=ye.transformFlags;return A?Ce(ye):x?Ie(ye):Ds(ye)&&ye.asteriskToken?Ne(ye):Et&2048?xn(ye,Pe,e):ye}function Ce(ye){switch(ye.kind){case 243:return dr(ye);case 244:return Se(ye);case 252:return Kt(ye);case 253:return ir(ye);default:return Ie(ye)}}function Ie(ye){switch(ye.kind){case 259:return Le(ye);case 215:return Ye(ye);case 174:case 175:return _t(ye);case 240:return Rt(ye);case 245:return Tt(ye);case 246:return nt(ye);case 249:return G(ye);case 248:return Q(ye);case 250:return je(ye);default:return ye.transformFlags&1048576?Be(ye):ye.transformFlags&4196352?xn(ye,Pe,e):ye}}function Be(ye){switch(ye.kind){case 223:return We(ye);case 357:return tn(ye);case 224:return _n(ye);case 226:return Gt(ye);case 206:return $n(ye);case 207:return Ni(ye);case 209:return Pi(ye);case 210:return gr(ye);case 211:return pt(ye);default:return xn(ye,Pe,e)}}function Ne(ye){switch(ye.kind){case 259:return Le(ye);case 215:return Ye(ye);default:return L.failBadSyntaxKind(ye)}}function Le(ye){if(ye.asteriskToken)ye=Ir(it(t.createFunctionDeclaration(ye.modifiers,void 0,ye.name,void 0,Sc(ye.parameters,Pe,e),void 0,ct(ye.body)),ye),ye);else{let Et=x,bn=A;x=!1,A=!1,ye=xn(ye,Pe,e),x=Et,A=bn}if(x){s(ye);return}else return ye}function Ye(ye){if(ye.asteriskToken)ye=Ir(it(t.createFunctionExpression(void 0,void 0,ye.name,void 0,Sc(ye.parameters,Pe,e),void 0,ct(ye.body)),ye),ye);else{let Et=x,bn=A;x=!1,A=!1,ye=xn(ye,Pe,e),x=Et,A=bn}return ye}function _t(ye){let Et=x,bn=A;return x=!1,A=!1,ye=xn(ye,Pe,e),x=Et,A=bn,ye}function ct(ye){let Et=[],bn=x,Ri=A,io=w,ee=C,Ze=P,At=F,xt=B,qt=q,Ln=W,mr=Y,Vr=R,gi=ie,Ea=$;x=!0,A=!1,w=void 0,C=void 0,P=void 0,F=void 0,B=void 0,q=void 0,W=1,Y=void 0,R=void 0,ie=void 0,$=t.createTempVariable(void 0),i();let bo=t.copyPrologue(ye.statements,Et,!1,Pe);nn(ye.statements,bo);let Qo=K();return em(Et,o()),Et.push(t.createReturnStatement(Qo)),x=bn,A=Ri,w=io,C=ee,P=Ze,F=At,B=xt,q=qt,W=Ln,Y=mr,R=Vr,ie=gi,$=Ea,it(t.createBlock(Et,ye.multiLine),ye)}function Rt(ye){if(ye.transformFlags&1048576){ri(ye.declarationList);return}else{if(Ya(ye)&2097152)return ye;for(let bn of ye.declarationList.declarations)l(bn.name);let Et=qI(ye.declarationList);return Et.length===0?void 0:Ho(t.createExpressionStatement(t.inlineExpressions(on(Et,vn))),ye)}}function We(ye){let Et=WH(ye);switch(Et){case 0:return zt(ye);case 1:return qe(ye);default:return L.assertNever(Et)}}function qe(ye){let{left:Et,right:bn}=ye;if(Ot(bn)){let Ri;switch(Et.kind){case 208:Ri=t.updatePropertyAccessExpression(Et,Te(L.checkDefined($e(Et.expression,Pe,Ju))),Et.name);break;case 209:Ri=t.updateElementAccessExpression(Et,Te(L.checkDefined($e(Et.expression,Pe,Ju))),Te(L.checkDefined($e(Et.argumentExpression,Pe,ot))));break;default:Ri=L.checkDefined($e(Et,Pe,ot));break}let io=ye.operatorToken.kind;return oN(io)?it(t.createAssignment(Ri,it(t.createBinaryExpression(Te(Ri),WL(io),L.checkDefined($e(bn,Pe,ot))),ye)),ye):t.updateBinaryExpression(ye,Ri,ye.operatorToken,L.checkDefined($e(bn,Pe,ot)))}return xn(ye,Pe,e)}function zt(ye){return Ot(ye.right)?Yce(ye.operatorToken.kind)?kn(ye):ye.operatorToken.kind===27?Qt(ye):t.updateBinaryExpression(ye,Te(L.checkDefined($e(ye.left,Pe,ot))),ye.operatorToken,L.checkDefined($e(ye.right,Pe,ot))):xn(ye,Pe,e)}function Qt(ye){let Et=[];return bn(ye.left),bn(ye.right),t.inlineExpressions(Et);function bn(Ri){ar(Ri)&&Ri.operatorToken.kind===27?(bn(Ri.left),bn(Ri.right)):(Ot(Ri)&&Et.length>0&&(wt(1,[t.createExpressionStatement(t.inlineExpressions(Et))]),Et=[]),Et.push(L.checkDefined($e(Ri,Pe,ot))))}}function tn(ye){let Et=[];for(let bn of ye.elements)ar(bn)&&bn.operatorToken.kind===27?Et.push(Qt(bn)):(Ot(bn)&&Et.length>0&&(wt(1,[t.createExpressionStatement(t.inlineExpressions(Et))]),Et=[]),Et.push(L.checkDefined($e(bn,Pe,ot))));return t.inlineExpressions(Et)}function kn(ye){let Et=yt(),bn=j();return qs(bn,L.checkDefined($e(ye.left,Pe,ot)),ye.left),ye.operatorToken.kind===55?jt(Et,bn,ye.left):As(Et,bn,ye.left),qs(bn,L.checkDefined($e(ye.right,Pe,ot)),ye.right),lt(Et),bn}function _n(ye){if(Ot(ye.whenTrue)||Ot(ye.whenFalse)){let Et=yt(),bn=yt(),Ri=j();return jt(Et,L.checkDefined($e(ye.condition,Pe,ot)),ye.condition),qs(Ri,L.checkDefined($e(ye.whenTrue,Pe,ot)),ye.whenTrue),Rs(bn),lt(Et),qs(Ri,L.checkDefined($e(ye.whenFalse,Pe,ot)),ye.whenFalse),lt(bn),Ri}return xn(ye,Pe,e)}function Gt(ye){let Et=yt(),bn=$e(ye.expression,Pe,ot);if(ye.asteriskToken){let Ri=Ya(ye.expression)&16777216?bn:it(r().createValuesHelper(bn),ye);yc(Ri,ye)}else Ql(bn,ye);return lt(Et),Pc(ye)}function $n(ye){return ui(ye.elements,void 0,void 0,ye.multiLine)}function ui(ye,Et,bn,Ri){let io=Ke(ye),ee;if(io>0){ee=j();let xt=On(ye,Pe,ot,0,io);qs(ee,t.createArrayLiteralExpression(Et?[Et,...xt]:xt)),Et=void 0}let Ze=ou(ye,At,[],io);return ee?t.createArrayConcatCall(ee,[t.createArrayLiteralExpression(Ze,Ri)]):it(t.createArrayLiteralExpression(Et?[Et,...Ze]:Ze,Ri),bn);function At(xt,qt){if(Ot(qt)&&xt.length>0){let Ln=ee!==void 0;ee||(ee=j()),qs(ee,Ln?t.createArrayConcatCall(ee,[t.createArrayLiteralExpression(xt,Ri)]):t.createArrayLiteralExpression(Et?[Et,...xt]:xt,Ri)),Et=void 0,xt=[]}return xt.push(L.checkDefined($e(qt,Pe,ot))),xt}}function Ni(ye){let Et=ye.properties,bn=ye.multiLine,Ri=Ke(Et),io=j();qs(io,t.createObjectLiteralExpression(On(Et,Pe,Og,0,Ri),bn));let ee=ou(Et,Ze,[],Ri);return ee.push(bn?mu(go(it(t.cloneNode(io),io),io.parent)):io),t.inlineExpressions(ee);function Ze(At,xt){Ot(xt)&&At.length>0&&(ss(t.createExpressionStatement(t.inlineExpressions(At))),At=[]);let qt=ede(t,ye,xt,io),Ln=$e(qt,Pe,ot);return Ln&&(bn&&mu(Ln),At.push(Ln)),At}}function Pi(ye){return Ot(ye.argumentExpression)?t.updateElementAccessExpression(ye,Te(L.checkDefined($e(ye.expression,Pe,Ju))),L.checkDefined($e(ye.argumentExpression,Pe,ot))):xn(ye,Pe,e)}function gr(ye){if(!Dd(ye)&&mn(ye.arguments,Ot)){let{target:Et,thisArg:bn}=t.createCallBinding(ye.expression,l,d,!0);return Ir(it(t.createFunctionApplyCall(Te(L.checkDefined($e(Et,Pe,Ju))),bn,ui(ye.arguments)),ye),ye)}return xn(ye,Pe,e)}function pt(ye){if(mn(ye.arguments,Ot)){let{target:Et,thisArg:bn}=t.createCallBinding(t.createPropertyAccessExpression(ye.expression,\"bind\"),l);return Ir(it(t.createNewExpression(t.createFunctionApplyCall(Te(L.checkDefined($e(Et,Pe,ot))),bn,ui(ye.arguments,t.createVoidZero())),void 0,[]),ye),ye)}return xn(ye,Pe,e)}function nn(ye,Et=0){let bn=ye.length;for(let Ri=Et;Ri<bn;Ri++)pn(ye[Ri])}function Dt(ye){Va(ye)?nn(ye.statements):pn(ye)}function pn(ye){let Et=A;A||(A=Ot(ye)),An(ye),A=Et}function An(ye){switch(ye.kind){case 238:return Kn(ye);case 241:return hi(ye);case 242:return Ht(ye);case 243:return En(ye);case 244:return Cr(ye);case 245:return at(ye);case 246:return ve(ye);case 248:return ce(ye);case 249:return ue(ye);case 250:return Oe(ye);case 251:return Ge(ye);case 252:return kt(ye);case 253:return ln(ye);case 254:return ae(ye);case 255:return rt(ye);default:return ss($e(ye,Pe,ca))}}function Kn(ye){Ot(ye)?nn(ye.statements):ss($e(ye,Pe,ca))}function hi(ye){ss($e(ye,Pe,ca))}function ri(ye){for(let ee of ye.declarations){let Ze=t.cloneNode(ee.name);hl(Ze,ee.name),l(Ze)}let Et=qI(ye),bn=Et.length,Ri=0,io=[];for(;Ri<bn;){for(let ee=Ri;ee<bn;ee++){let Ze=Et[ee];if(Ot(Ze.initializer)&&io.length>0)break;io.push(vn(Ze))}io.length&&(ss(t.createExpressionStatement(t.inlineExpressions(io))),Ri+=io.length,io=[])}}function vn(ye){return Ho(t.createAssignment(Ho(t.cloneNode(ye.name),ye.name),L.checkDefined($e(ye.initializer,Pe,ot))),ye)}function Ht(ye){if(Ot(ye))if(Ot(ye.thenStatement)||Ot(ye.elseStatement)){let Et=yt(),bn=ye.elseStatement?yt():void 0;jt(ye.elseStatement?bn:Et,L.checkDefined($e(ye.expression,Pe,ot)),ye.expression),Dt(ye.thenStatement),ye.elseStatement&&(Rs(Et),lt(bn),Dt(ye.elseStatement)),lt(Et)}else ss($e(ye,Pe,ca));else ss($e(ye,Pe,ca))}function En(ye){if(Ot(ye)){let Et=yt(),bn=yt();xi(Et),lt(bn),Dt(ye.statement),lt(Et),As(bn,L.checkDefined($e(ye.expression,Pe,ot))),Nr()}else ss($e(ye,Pe,ca))}function dr(ye){return A?(Hi(),ye=xn(ye,Pe,e),Nr(),ye):xn(ye,Pe,e)}function Cr(ye){if(Ot(ye)){let Et=yt(),bn=xi(Et);lt(Et),jt(bn,L.checkDefined($e(ye.expression,Pe,ot))),Dt(ye.statement),Rs(Et),Nr()}else ss($e(ye,Pe,ca))}function Se(ye){return A?(Hi(),ye=xn(ye,Pe,e),Nr(),ye):xn(ye,Pe,e)}function at(ye){if(Ot(ye)){let Et=yt(),bn=yt(),Ri=xi(bn);if(ye.initializer){let io=ye.initializer;pu(io)?ri(io):ss(it(t.createExpressionStatement(L.checkDefined($e(io,Pe,ot))),io))}lt(Et),ye.condition&&jt(Ri,L.checkDefined($e(ye.condition,Pe,ot))),Dt(ye.statement),lt(bn),ye.incrementor&&ss(it(t.createExpressionStatement(L.checkDefined($e(ye.incrementor,Pe,ot))),ye.incrementor)),Rs(Et),Nr()}else ss($e(ye,Pe,ca))}function Tt(ye){A&&Hi();let Et=ye.initializer;if(Et&&pu(Et)){for(let Ri of Et.declarations)l(Ri.name);let bn=qI(Et);ye=t.updateForStatement(ye,bn.length>0?t.inlineExpressions(on(bn,vn)):void 0,$e(ye.condition,Pe,ot),$e(ye.incrementor,Pe,ot),jf(ye.statement,Pe,e))}else ye=xn(ye,Pe,e);return A&&Nr(),ye}function ve(ye){if(Ot(ye)){let Et=j(),bn=j(),Ri=j(),io=t.createLoopVariable(),ee=ye.initializer;l(io),qs(Et,L.checkDefined($e(ye.expression,Pe,ot))),qs(bn,t.createArrayLiteralExpression()),ss(t.createForInStatement(Ri,Et,t.createExpressionStatement(t.createCallExpression(t.createPropertyAccessExpression(bn,\"push\"),void 0,[Ri])))),qs(io,t.createNumericLiteral(0));let Ze=yt(),At=yt(),xt=xi(At);lt(Ze),jt(xt,t.createLessThan(io,t.createPropertyAccessExpression(bn,\"length\"))),qs(Ri,t.createElementAccessExpression(bn,io)),jt(At,t.createBinaryExpression(Ri,101,Et));let qt;if(pu(ee)){for(let Ln of ee.declarations)l(Ln.name);qt=t.cloneNode(ee.declarations[0].name)}else qt=L.checkDefined($e(ee,Pe,ot)),L.assert(Ju(qt));qs(qt,Ri),Dt(ye.statement),lt(At),ss(t.createExpressionStatement(t.createPostfixIncrement(io))),Rs(Ze),Nr()}else ss($e(ye,Pe,ca))}function nt(ye){A&&Hi();let Et=ye.initializer;if(pu(Et)){for(let bn of Et.declarations)l(bn.name);ye=t.updateForInStatement(ye,Et.declarations[0].name,L.checkDefined($e(ye.expression,Pe,ot)),L.checkDefined($e(ye.statement,Pe,ca,t.liftToBlock)))}else ye=xn(ye,Pe,e);return A&&Nr(),ye}function ce(ye){let Et=aa(ye.label?vr(ye.label):void 0);Et>0?Rs(Et,ye):ss(ye)}function Q(ye){if(A){let Et=aa(ye.label&&vr(ye.label));if(Et>0)return Ll(Et,ye)}return xn(ye,Pe,e)}function ue(ye){let Et=ro(ye.label?vr(ye.label):void 0);Et>0?Rs(Et,ye):ss(ye)}function G(ye){if(A){let Et=ro(ye.label&&vr(ye.label));if(Et>0)return Ll(Et,ye)}return xn(ye,Pe,e)}function Oe(ye){yu($e(ye.expression,Pe,ot),ye)}function je(ye){return md($e(ye.expression,Pe,ot),ye)}function Ge(ye){Ot(ye)?(ei(Te(L.checkDefined($e(ye.expression,Pe,ot)))),Dt(ye.statement),Kr()):ss($e(ye,Pe,ca))}function kt(ye){if(Ot(ye.caseBlock)){let Et=ye.caseBlock,bn=Et.clauses.length,Ri=Qr(),io=Te(L.checkDefined($e(ye.expression,Pe,ot))),ee=[],Ze=-1;for(let qt=0;qt<bn;qt++){let Ln=Et.clauses[qt];ee.push(yt()),Ln.kind===293&&Ze===-1&&(Ze=qt)}let At=0,xt=[];for(;At<bn;){let qt=0;for(let Ln=At;Ln<bn;Ln++){let mr=Et.clauses[Ln];if(mr.kind===292){if(Ot(mr.expression)&&xt.length>0)break;xt.push(t.createCaseClause(L.checkDefined($e(mr.expression,Pe,ot)),[Ll(ee[Ln],mr.expression)]))}else qt++}xt.length&&(ss(t.createSwitchStatement(io,t.createCaseBlock(xt))),At+=xt.length,xt=[]),qt>0&&(At+=qt,qt=0)}Ze>=0?Rs(ee[Ze]):Rs(Ri);for(let qt=0;qt<bn;qt++)lt(ee[qt]),nn(Et.clauses[qt].statements);Wi()}else ss($e(ye,Pe,ca))}function Kt(ye){return A&&Fo(),ye=xn(ye,Pe,e),A&&Wi(),ye}function ln(ye){Ot(ye)?(Ki(vr(ye.label)),Dt(ye.statement),kc()):ss($e(ye,Pe,ca))}function ir(ye){return A&&gn(vr(ye.label)),ye=xn(ye,Pe,e),A&&kc(),ye}function ae(ye){var Et;se(L.checkDefined($e((Et=ye.expression)!=null?Et:t.createVoidZero(),Pe,ot)),ye)}function rt(ye){Ot(ye)?(Si(),Dt(ye.tryBlock),ye.catchClause&&(Ja(ye.catchClause.variableDeclaration),Dt(ye.catchClause.block)),ye.finallyBlock&&(Za(),Dt(ye.finallyBlock)),Fa()):ss(xn(ye,Pe,e))}function Ot(ye){return!!ye&&(ye.transformFlags&1048576)!==0}function Ke(ye){let Et=ye.length;for(let bn=0;bn<Et;bn++)if(Ot(ye[bn]))return bn;return-1}function oe(ye,Et){return Et=m(ye,Et),ye===1?pe(Et):Et}function pe(ye){return Re(ye)?z(ye):ye}function z(ye){if(!tc(ye)&&v&&v.has(vr(ye))){let Et=ec(ye);if(Re(Et)&&Et.parent){let bn=g.getReferencedValueDeclaration(Et);if(bn){let Ri=S[sc(bn)];if(Ri){let io=go(it(t.cloneNode(Ri),Ri),Ri.parent);return Ho(io,ye),hl(io,ye),io}}}}return ye}function Te(ye){if(tc(ye)||Ya(ye)&8192)return ye;let Et=t.createTempVariable(l);return qs(Et,ye,ye),Et}function j(ye){let Et=ye?t.createUniqueName(ye):t.createTempVariable(void 0);return l(Et),Et}function yt(){B||(B=[]);let ye=W;return W++,B[ye]=-1,ye}function lt(ye){L.assert(B!==void 0,\"No labels were defined.\"),B[ye]=Y?Y.length:0}function Qe(ye){w||(w=[],P=[],C=[],F=[]);let Et=P.length;return P[Et]=0,C[Et]=Y?Y.length:0,w[Et]=ye,F.push(ye),Et}function Vt(){let ye=Hn();if(ye===void 0)return L.fail(\"beginBlock was never called.\");let Et=P.length;return P[Et]=1,C[Et]=Y?Y.length:0,w[Et]=ye,F.pop(),ye}function Hn(){return Os(F)}function jr(){let ye=Hn();return ye&&ye.kind}function ei(ye){let Et=yt(),bn=yt();lt(Et),Qe({kind:1,expression:ye,startLabel:Et,endLabel:bn})}function Kr(){L.assert(jr()===1);let ye=Vt();lt(ye.endLabel)}function Si(){let ye=yt(),Et=yt();return lt(ye),Qe({kind:0,state:0,startLabel:ye,endLabel:Et}),bl(),Et}function Ja(ye){L.assert(jr()===0);let Et;if(tc(ye.name))Et=ye.name,l(ye.name);else{let ee=vr(ye.name);Et=j(ee),v||(v=new Map,S=[],e.enableSubstitution(79)),v.set(ee,!0),S[sc(ye)]=Et}let bn=Hn();L.assert(bn.state<1);let Ri=bn.endLabel;Rs(Ri);let io=yt();lt(io),bn.state=1,bn.catchVariable=Et,bn.catchLabel=io,qs(Et,t.createCallExpression(t.createPropertyAccessExpression($,\"sent\"),void 0,[])),bl()}function Za(){L.assert(jr()===0);let ye=Hn();L.assert(ye.state<2);let Et=ye.endLabel;Rs(Et);let bn=yt();lt(bn),ye.state=2,ye.finallyLabel=bn}function Fa(){L.assert(jr()===0);let ye=Vt();ye.state<2?Rs(ye.endLabel):ht(),lt(ye.endLabel),bl(),ye.state=3}function Hi(){Qe({kind:3,isScript:!0,breakLabel:-1,continueLabel:-1})}function xi(ye){let Et=yt();return Qe({kind:3,isScript:!1,breakLabel:Et,continueLabel:ye}),Et}function Nr(){L.assert(jr()===3);let ye=Vt(),Et=ye.breakLabel;ye.isScript||lt(Et)}function Fo(){Qe({kind:2,isScript:!0,breakLabel:-1})}function Qr(){let ye=yt();return Qe({kind:2,isScript:!1,breakLabel:ye}),ye}function Wi(){L.assert(jr()===2);let ye=Vt(),Et=ye.breakLabel;ye.isScript||lt(Et)}function gn(ye){Qe({kind:4,isScript:!0,labelText:ye,breakLabel:-1})}function Ki(ye){let Et=yt();Qe({kind:4,isScript:!1,labelText:ye,breakLabel:Et})}function kc(){L.assert(jr()===4);let ye=Vt();ye.isScript||lt(ye.breakLabel)}function Ps(ye){return ye.kind===2||ye.kind===3}function mc(ye){return ye.kind===4}function xc(ye){return ye.kind===3}function hc(ye,Et){for(let bn=Et;bn>=0;bn--){let Ri=F[bn];if(mc(Ri)){if(Ri.labelText===ye)return!0}else break}return!1}function ro(ye){if(F)if(ye)for(let Et=F.length-1;Et>=0;Et--){let bn=F[Et];if(mc(bn)&&bn.labelText===ye)return bn.breakLabel;if(Ps(bn)&&hc(ye,Et-1))return bn.breakLabel}else for(let Et=F.length-1;Et>=0;Et--){let bn=F[Et];if(Ps(bn))return bn.breakLabel}return 0}function aa(ye){if(F)if(ye)for(let Et=F.length-1;Et>=0;Et--){let bn=F[Et];if(xc(bn)&&hc(ye,Et-1))return bn.continueLabel}else for(let Et=F.length-1;Et>=0;Et--){let bn=F[Et];if(xc(bn))return bn.continueLabel}return 0}function Co(ye){if(ye!==void 0&&ye>0){q===void 0&&(q=[]);let Et=t.createNumericLiteral(-1);return q[ye]===void 0?q[ye]=[Et]:q[ye].push(Et),Et}return t.createOmittedExpression()}function gc(ye){let Et=t.createNumericLiteral(ye);return R4(Et,3,bMe(ye)),Et}function Ll(ye,Et){return L.assertLessThan(0,ye,\"Invalid label\"),it(t.createReturnStatement(t.createArrayLiteralExpression([gc(3),Co(ye)])),Et)}function md(ye,Et){return it(t.createReturnStatement(t.createArrayLiteralExpression(ye?[gc(2),ye]:[gc(2)])),Et)}function Pc(ye){return it(t.createCallExpression(t.createPropertyAccessExpression($,\"sent\"),void 0,[]),ye)}function bl(){wt(0)}function ss(ye){ye?wt(1,[ye]):bl()}function qs(ye,Et,bn){wt(2,[ye,Et],bn)}function Rs(ye,Et){wt(3,[ye],Et)}function As(ye,Et,bn){wt(4,[ye,Et],bn)}function jt(ye,Et,bn){wt(5,[ye,Et],bn)}function yc(ye,Et){wt(7,[ye],Et)}function Ql(ye,Et){wt(6,[ye],Et)}function yu(ye,Et){wt(8,[ye],Et)}function se(ye,Et){wt(9,[ye],Et)}function ht(){wt(10)}function wt(ye,Et,bn){Y===void 0&&(Y=[],R=[],ie=[]),B===void 0&&lt(yt());let Ri=Y.length;Y[Ri]=ye,R[Ri]=Et,ie[Ri]=bn}function K(){fe=0,Z=0,U=void 0,re=!1,le=!1,_e=void 0,ge=void 0,X=void 0,Ve=void 0,we=void 0;let ye=Xe();return r().createGeneratorHelper(Jn(t.createFunctionExpression(void 0,void 0,void 0,void 0,[t.createParameterDeclaration(void 0,void 0,$)],void 0,t.createBlock(ye,ye.length>0)),1048576))}function Xe(){if(Y){for(let ye=0;ye<Y.length;ye++)vo(ye);Yt(Y.length)}else Yt(0);if(_e){let ye=t.createPropertyAccessExpression($,\"label\"),Et=t.createSwitchStatement(ye,t.createCaseBlock(_e));return[mu(Et)]}return ge||[]}function ft(){ge&&(yr(!re),re=!1,le=!1,Z++)}function Yt(ye){pr(ye)&&(ta(ye),we=void 0,Gu(void 0,void 0)),ge&&_e&&yr(!1),Go()}function pr(ye){if(!le)return!0;if(!B||!q)return!1;for(let Et=0;Et<B.length;Et++)if(B[Et]===ye&&q[Et])return!0;return!1}function yr(ye){if(_e||(_e=[]),ge){if(we)for(let Et=we.length-1;Et>=0;Et--){let bn=we[Et];ge=[t.createWithStatement(bn.expression,t.createBlock(ge))]}if(Ve){let{startLabel:Et,catchLabel:bn,finallyLabel:Ri,endLabel:io}=Ve;ge.unshift(t.createExpressionStatement(t.createCallExpression(t.createPropertyAccessExpression(t.createPropertyAccessExpression($,\"trys\"),\"push\"),void 0,[t.createArrayLiteralExpression([Co(Et),Co(bn),Co(Ri),Co(io)])]))),Ve=void 0}ye&&ge.push(t.createExpressionStatement(t.createAssignment(t.createPropertyAccessExpression($,\"label\"),t.createNumericLiteral(Z+1))))}_e.push(t.createCaseClause(t.createNumericLiteral(Z),ge||[])),ge=void 0}function ta(ye){if(B)for(let Et=0;Et<B.length;Et++)B[Et]===ye&&(ft(),U===void 0&&(U=[]),U[Z]===void 0?U[Z]=[Et]:U[Z].push(Et))}function Go(){if(q!==void 0&&U!==void 0)for(let ye=0;ye<U.length;ye++){let Et=U[ye];if(Et!==void 0)for(let bn of Et){let Ri=q[bn];if(Ri!==void 0)for(let io of Ri)io.text=String(ye)}}}function Ka(ye){if(w)for(;fe<P.length&&C[fe]<=ye;fe++){let Et=w[fe],bn=P[fe];switch(Et.kind){case 0:bn===0?(X||(X=[]),ge||(ge=[]),X.push(Ve),Ve=Et):bn===1&&(Ve=X.pop());break;case 1:bn===0?(we||(we=[]),we.push(Et)):bn===1&&we.pop();break}}}function vo(ye){if(ta(ye),Ka(ye),re)return;re=!1,le=!1;let Et=Y[ye];if(Et===0)return;if(Et===10)return nf();let bn=R[ye];if(Et===1)return ka(bn[0]);let Ri=ie[ye];switch(Et){case 2:return Hs(bn[0],bn[1],Ri);case 3:return $o(bn[0],Ri);case 4:return jo(bn[0],bn[1],Ri);case 5:return Ws(bn[0],bn[1],Ri);case 6:return hd(bn[0],Ri);case 7:return vc(bn[0],Ri);case 8:return Gu(bn[0],Ri);case 9:return Uc(bn[0],Ri)}}function ka(ye){ye&&(ge?ge.push(ye):ge=[ye])}function Hs(ye,Et,bn){ka(it(t.createExpressionStatement(t.createAssignment(ye,Et)),bn))}function Uc(ye,Et){re=!0,le=!0,ka(it(t.createThrowStatement(ye),Et))}function Gu(ye,Et){re=!0,le=!0,ka(Jn(it(t.createReturnStatement(t.createArrayLiteralExpression(ye?[gc(2),ye]:[gc(2)])),Et),768))}function $o(ye,Et){re=!0,ka(Jn(it(t.createReturnStatement(t.createArrayLiteralExpression([gc(3),Co(ye)])),Et),768))}function jo(ye,Et,bn){ka(Jn(t.createIfStatement(Et,Jn(it(t.createReturnStatement(t.createArrayLiteralExpression([gc(3),Co(ye)])),bn),768)),1))}function Ws(ye,Et,bn){ka(Jn(t.createIfStatement(t.createLogicalNot(Et),Jn(it(t.createReturnStatement(t.createArrayLiteralExpression([gc(3),Co(ye)])),bn),768)),1))}function hd(ye,Et){re=!0,ka(Jn(it(t.createReturnStatement(t.createArrayLiteralExpression(ye?[gc(4),ye]:[gc(4)])),Et),768))}function vc(ye,Et){re=!0,ka(Jn(it(t.createReturnStatement(t.createArrayLiteralExpression([gc(5),ye])),Et),768))}function nf(){re=!0,ka(t.createReturnStatement(t.createArrayLiteralExpression([gc(7)])))}}var EMe=gt({\"src/compiler/transformers/generators.ts\"(){\"use strict\";fa()}});function FK(e){function t(Q){switch(Q){case 2:return R;case 3:return ie;default:return Y}}let{factory:r,getEmitHelperFactory:i,startLexicalEnvironment:o,endLexicalEnvironment:s,hoistVariableDeclaration:l}=e,f=e.getCompilerOptions(),d=e.getEmitResolver(),g=e.getEmitHost(),m=Do(f),v=Rl(f),S=e.onSubstituteNode,x=e.onEmitNode;e.onSubstituteNode=dr,e.onEmitNode=En,e.enableSubstitution(210),e.enableSubstitution(212),e.enableSubstitution(79),e.enableSubstitution(223),e.enableSubstitution(300),e.enableEmitNotification(308);let A=[],w=[],C,P,F=[],B;return y_(e,q);function q(Q){if(Q.isDeclarationFile||!(aS(Q,f)||Q.transformFlags&8388608||Mf(Q)&&l4(f)&&Ss(f)))return Q;C=Q,P=xK(e,Q,d,f),A[sc(Q)]=P;let G=t(v)(Q);return C=void 0,P=void 0,B=!1,G}function W(){return!!(!P.exportEquals&&Lc(C))}function Y(Q){o();let ue=[],G=Uf(f,\"alwaysStrict\")||!f.noImplicitUseStrict&&Lc(C),Oe=r.copyPrologue(Q.statements,ue,G&&!Mf(Q),re);if(W()&&Sn(ue,hi()),Fn(P.exportedNames))for(let kt=0;kt<P.exportedNames.length;kt+=50)Sn(ue,r.createExpressionStatement(ou(P.exportedNames.slice(kt,kt+50),(Kt,ln)=>r.createAssignment(r.createPropertyAccessExpression(r.createIdentifier(\"exports\"),r.createIdentifier(vr(ln))),Kt),r.createVoidZero())));Sn(ue,$e(P.externalHelpersImportDeclaration,re,ca)),si(ue,On(Q.statements,re,ca,Oe)),U(ue,!1),em(ue,s());let je=r.updateSourceFile(Q,it(r.createNodeArray(ue),Q.statements));return Bg(je,e.readEmitHelpers()),je}function R(Q){let ue=r.createIdentifier(\"define\"),G=xO(r,Q,g,f),Oe=Mf(Q)&&Q,{aliasedModuleNames:je,unaliasedModuleNames:Ge,importAliasNames:kt}=$(Q,!0),Kt=r.updateSourceFile(Q,it(r.createNodeArray([r.createExpressionStatement(r.createCallExpression(ue,void 0,[...G?[G]:[],r.createArrayLiteralExpression(Oe?Je:[r.createStringLiteral(\"require\"),r.createStringLiteral(\"exports\"),...je,...Ge]),Oe?Oe.statements.length?Oe.statements[0].expression:r.createObjectLiteralExpression():r.createFunctionExpression(void 0,void 0,void 0,void 0,[r.createParameterDeclaration(void 0,void 0,\"require\"),r.createParameterDeclaration(void 0,void 0,\"exports\"),...kt],void 0,Z(Q))]))]),Q.statements));return Bg(Kt,e.readEmitHelpers()),Kt}function ie(Q){let{aliasedModuleNames:ue,unaliasedModuleNames:G,importAliasNames:Oe}=$(Q,!1),je=xO(r,Q,g,f),Ge=r.createFunctionExpression(void 0,void 0,void 0,void 0,[r.createParameterDeclaration(void 0,void 0,\"factory\")],void 0,it(r.createBlock([r.createIfStatement(r.createLogicalAnd(r.createTypeCheck(r.createIdentifier(\"module\"),\"object\"),r.createTypeCheck(r.createPropertyAccessExpression(r.createIdentifier(\"module\"),\"exports\"),\"object\")),r.createBlock([r.createVariableStatement(void 0,[r.createVariableDeclaration(\"v\",void 0,void 0,r.createCallExpression(r.createIdentifier(\"factory\"),void 0,[r.createIdentifier(\"require\"),r.createIdentifier(\"exports\")]))]),Jn(r.createIfStatement(r.createStrictInequality(r.createIdentifier(\"v\"),r.createIdentifier(\"undefined\")),r.createExpressionStatement(r.createAssignment(r.createPropertyAccessExpression(r.createIdentifier(\"module\"),\"exports\"),r.createIdentifier(\"v\")))),1)]),r.createIfStatement(r.createLogicalAnd(r.createTypeCheck(r.createIdentifier(\"define\"),\"function\"),r.createPropertyAccessExpression(r.createIdentifier(\"define\"),\"amd\")),r.createBlock([r.createExpressionStatement(r.createCallExpression(r.createIdentifier(\"define\"),void 0,[...je?[je]:[],r.createArrayLiteralExpression([r.createStringLiteral(\"require\"),r.createStringLiteral(\"exports\"),...ue,...G]),r.createIdentifier(\"factory\")]))])))],!0),void 0)),kt=r.updateSourceFile(Q,it(r.createNodeArray([r.createExpressionStatement(r.createCallExpression(Ge,void 0,[r.createFunctionExpression(void 0,void 0,void 0,void 0,[r.createParameterDeclaration(void 0,void 0,\"require\"),r.createParameterDeclaration(void 0,void 0,\"exports\"),...Oe],void 0,Z(Q))]))]),Q.statements));return Bg(kt,e.readEmitHelpers()),kt}function $(Q,ue){let G=[],Oe=[],je=[];for(let Ge of Q.amdDependencies)Ge.name?(G.push(r.createStringLiteral(Ge.path)),je.push(r.createParameterDeclaration(void 0,void 0,Ge.name))):Oe.push(r.createStringLiteral(Ge.path));for(let Ge of P.externalImports){let kt=jS(r,Ge,C,g,d,f),Kt=C2(r,Ge,C);kt&&(ue&&Kt?(Jn(Kt,8),G.push(kt),je.push(r.createParameterDeclaration(void 0,void 0,Kt))):Oe.push(kt))}return{aliasedModuleNames:G,unaliasedModuleNames:Oe,importAliasNames:je}}function fe(Q){if(Nl(Q)||Il(Q)||!jS(r,Q,C,g,d,f))return;let ue=C2(r,Q,C),G=ct(Q,ue);if(G!==ue)return r.createExpressionStatement(r.createAssignment(ue,G))}function Z(Q){o();let ue=[],G=r.copyPrologue(Q.statements,ue,!f.noImplicitUseStrict,re);W()&&Sn(ue,hi()),Fn(P.exportedNames)&&Sn(ue,r.createExpressionStatement(ou(P.exportedNames,(je,Ge)=>r.createAssignment(r.createPropertyAccessExpression(r.createIdentifier(\"exports\"),r.createIdentifier(vr(Ge))),je),r.createVoidZero()))),Sn(ue,$e(P.externalHelpersImportDeclaration,re,ca)),v===2&&si(ue,Zi(P.externalImports,fe)),si(ue,On(Q.statements,re,ca,G)),U(ue,!0),em(ue,s());let Oe=r.createBlock(ue,!0);return B&&xS(Oe,ype),Oe}function U(Q,ue){if(P.exportEquals){let G=$e(P.exportEquals.expression,_e,ot);if(G)if(ue){let Oe=r.createReturnStatement(G);it(Oe,P.exportEquals),Jn(Oe,3840),Q.push(Oe)}else{let Oe=r.createExpressionStatement(r.createAssignment(r.createPropertyAccessExpression(r.createIdentifier(\"module\"),\"exports\"),G));it(Oe,P.exportEquals),Jn(Oe,3072),Q.push(Oe)}}}function re(Q){switch(Q.kind){case 269:return Rt(Q);case 268:return qe(Q);case 275:return zt(Q);case 274:return Qt(Q);case 240:return _n(Q);case 259:return tn(Q);case 260:return kn(Q);case 358:return ui(Q);case 359:return Pi(Q);default:return _e(Q)}}function le(Q,ue){if(!(Q.transformFlags&276828160))return Q;switch(Q.kind){case 245:return we(Q);case 241:return ke(Q);case 214:return Pe(Q,ue);case 356:return Ce(Q,ue);case 210:if(Dd(Q)&&C.impliedNodeFormat===void 0)return Be(Q);break;case 223:if(Fg(Q))return Ve(Q,ue);break;case 221:case 222:return Ie(Q,ue)}return xn(Q,_e,e)}function _e(Q){return le(Q,!1)}function ge(Q){return le(Q,!0)}function X(Q){if(rs(Q))for(let ue of Q.properties)switch(ue.kind){case 299:if(X(ue.initializer))return!0;break;case 300:if(X(ue.name))return!0;break;case 301:if(X(ue.expression))return!0;break;case 171:case 174:case 175:return!1;default:L.assertNever(ue,\"Unhandled object member kind\")}else if(fu(Q)){for(let ue of Q.elements)if(Km(ue)){if(X(ue.expression))return!0}else if(X(ue))return!0}else if(Re(Q))return Fn(ce(Q))>(E3(Q)?1:0);return!1}function Ve(Q,ue){return X(Q.left)?KT(Q,_e,e,0,!ue,Gt):xn(Q,_e,e)}function we(Q){return r.updateForStatement(Q,$e(Q.initializer,ge,pp),$e(Q.condition,_e,ot),$e(Q.incrementor,ge,ot),jf(Q.statement,_e,e))}function ke(Q){return r.updateExpressionStatement(Q,$e(Q.expression,ge,ot))}function Pe(Q,ue){return r.updateParenthesizedExpression(Q,$e(Q.expression,ue?ge:_e,ot))}function Ce(Q,ue){return r.updatePartiallyEmittedExpression(Q,$e(Q.expression,ue?ge:_e,ot))}function Ie(Q,ue){if((Q.operator===45||Q.operator===46)&&Re(Q.operand)&&!tc(Q.operand)&&!rv(Q.operand)&&!wR(Q.operand)){let G=ce(Q.operand);if(G){let Oe,je=$e(Q.operand,_e,ot);tv(Q)?je=r.updatePrefixUnaryExpression(Q,je):(je=r.updatePostfixUnaryExpression(Q,je),ue||(Oe=r.createTempVariable(l),je=r.createAssignment(Oe,je),it(je,Q)),je=r.createComma(je,r.cloneNode(Q.operand)),it(je,Q));for(let Ge of G)F[zo(je)]=!0,je=vn(Ge,je),it(je,Q);return Oe&&(F[zo(je)]=!0,je=r.createComma(je,Oe),it(je,Q)),je}}return xn(Q,_e,e)}function Be(Q){if(v===0&&m>=7)return xn(Q,_e,e);let ue=jS(r,Q,C,g,d,f),G=$e(Sl(Q.arguments),_e,ot),Oe=ue&&(!G||!yo(G)||G.text!==ue.text)?ue:G,je=!!(Q.transformFlags&16384);switch(f.module){case 2:return Le(Oe,je);case 3:return Ne(Oe??r.createVoidZero(),je);case 1:default:return Ye(Oe)}}function Ne(Q,ue){if(B=!0,Z0(Q)){let G=tc(Q)?Q:yo(Q)?r.createStringLiteralFromNode(Q):Jn(it(r.cloneNode(Q),Q),3072);return r.createConditionalExpression(r.createIdentifier(\"__syncRequire\"),void 0,Ye(Q),void 0,Le(G,ue))}else{let G=r.createTempVariable(l);return r.createComma(r.createAssignment(G,Q),r.createConditionalExpression(r.createIdentifier(\"__syncRequire\"),void 0,Ye(G,!0),void 0,Le(G,ue)))}}function Le(Q,ue){let G=r.createUniqueName(\"resolve\"),Oe=r.createUniqueName(\"reject\"),je=[r.createParameterDeclaration(void 0,void 0,G),r.createParameterDeclaration(void 0,void 0,Oe)],Ge=r.createBlock([r.createExpressionStatement(r.createCallExpression(r.createIdentifier(\"require\"),void 0,[r.createArrayLiteralExpression([Q||r.createOmittedExpression()]),G,Oe]))]),kt;m>=2?kt=r.createArrowFunction(void 0,void 0,je,void 0,void 0,Ge):(kt=r.createFunctionExpression(void 0,void 0,void 0,void 0,je,void 0,Ge),ue&&Jn(kt,16));let Kt=r.createNewExpression(r.createIdentifier(\"Promise\"),void 0,[kt]);return f_(f)?r.createCallExpression(r.createPropertyAccessExpression(Kt,r.createIdentifier(\"then\")),void 0,[i().createImportStarCallbackHelper()]):Kt}function Ye(Q,ue){let G=Q&&!Ap(Q)&&!ue,Oe=r.createCallExpression(r.createPropertyAccessExpression(r.createIdentifier(\"Promise\"),\"resolve\"),void 0,G?m>=2?[r.createTemplateExpression(r.createTemplateHead(\"\"),[r.createTemplateSpan(Q,r.createTemplateTail(\"\"))])]:[r.createCallExpression(r.createPropertyAccessExpression(r.createStringLiteral(\"\"),\"concat\"),void 0,[Q])]:[]),je=r.createCallExpression(r.createIdentifier(\"require\"),void 0,G?[r.createIdentifier(\"s\")]:Q?[Q]:[]);f_(f)&&(je=i().createImportStarHelper(je));let Ge=G?[r.createParameterDeclaration(void 0,void 0,\"s\")]:[],kt;return m>=2?kt=r.createArrowFunction(void 0,void 0,Ge,void 0,void 0,je):kt=r.createFunctionExpression(void 0,void 0,void 0,void 0,Ge,void 0,r.createBlock([r.createReturnStatement(je)])),r.createCallExpression(r.createPropertyAccessExpression(Oe,\"then\"),void 0,[kt])}function _t(Q,ue){return!f_(f)||o_(Q)&2?ue:z_e(Q)?i().createImportStarHelper(ue):ue}function ct(Q,ue){return!f_(f)||o_(Q)&2?ue:vF(Q)?i().createImportStarHelper(ue):SK(Q)?i().createImportDefaultHelper(ue):ue}function Rt(Q){let ue,G=VA(Q);if(v!==2)if(Q.importClause){let Oe=[];G&&!lS(Q)?Oe.push(r.createVariableDeclaration(r.cloneNode(G.name),void 0,void 0,ct(Q,We(Q)))):(Oe.push(r.createVariableDeclaration(r.getGeneratedNameForNode(Q),void 0,void 0,ct(Q,We(Q)))),G&&lS(Q)&&Oe.push(r.createVariableDeclaration(r.cloneNode(G.name),void 0,void 0,r.getGeneratedNameForNode(Q)))),ue=Sn(ue,Ir(it(r.createVariableStatement(void 0,r.createVariableDeclarationList(Oe,m>=2?2:0)),Q),Q))}else return Ir(it(r.createExpressionStatement(We(Q)),Q),Q);else G&&lS(Q)&&(ue=Sn(ue,r.createVariableStatement(void 0,r.createVariableDeclarationList([Ir(it(r.createVariableDeclaration(r.cloneNode(G.name),void 0,void 0,r.getGeneratedNameForNode(Q)),Q),Q)],m>=2?2:0))));if(Ni(Q)){let Oe=sc(Q);w[Oe]=gr(w[Oe],Q)}else ue=gr(ue,Q);return zp(ue)}function We(Q){let ue=jS(r,Q,C,g,d,f),G=[];return ue&&G.push(ue),r.createCallExpression(r.createIdentifier(\"require\"),void 0,G)}function qe(Q){L.assert(ab(Q),\"import= for internal module references should be handled in an earlier transformer.\");let ue;if(v!==2?Mr(Q,1)?ue=Sn(ue,Ir(it(r.createExpressionStatement(vn(Q.name,We(Q))),Q),Q)):ue=Sn(ue,Ir(it(r.createVariableStatement(void 0,r.createVariableDeclarationList([r.createVariableDeclaration(r.cloneNode(Q.name),void 0,void 0,We(Q))],m>=2?2:0)),Q),Q)):Mr(Q,1)&&(ue=Sn(ue,Ir(it(r.createExpressionStatement(vn(r.getExportName(Q),r.getLocalName(Q))),Q),Q))),Ni(Q)){let G=sc(Q);w[G]=pt(w[G],Q)}else ue=pt(ue,Q);return zp(ue)}function zt(Q){if(!Q.moduleSpecifier)return;let ue=r.getGeneratedNameForNode(Q);if(Q.exportClause&&h_(Q.exportClause)){let G=[];v!==2&&G.push(Ir(it(r.createVariableStatement(void 0,r.createVariableDeclarationList([r.createVariableDeclaration(ue,void 0,void 0,We(Q))])),Q),Q));for(let Oe of Q.exportClause.elements)if(m===0)G.push(Ir(it(r.createExpressionStatement(i().createCreateBindingHelper(ue,r.createStringLiteralFromNode(Oe.propertyName||Oe.name),Oe.propertyName?r.createStringLiteralFromNode(Oe.name):void 0)),Oe),Oe));else{let je=!!f_(f)&&!(o_(Q)&2)&&vr(Oe.propertyName||Oe.name)===\"default\",Ge=r.createPropertyAccessExpression(je?i().createImportDefaultHelper(ue):ue,Oe.propertyName||Oe.name);G.push(Ir(it(r.createExpressionStatement(vn(r.getExportName(Oe),Ge,void 0,!0)),Oe),Oe))}return zp(G)}else if(Q.exportClause){let G=[];return G.push(Ir(it(r.createExpressionStatement(vn(r.cloneNode(Q.exportClause.name),_t(Q,v!==2?We(Q):v6(Q)?ue:r.createIdentifier(vr(Q.exportClause.name))))),Q),Q)),zp(G)}else return Ir(it(r.createExpressionStatement(i().createExportStarHelper(v!==2?We(Q):ue)),Q),Q)}function Qt(Q){if(Q.isExportEquals)return;let ue,G=Q.original;if(G&&Ni(G)){let Oe=sc(Q);w[Oe]=Kn(w[Oe],r.createIdentifier(\"default\"),$e(Q.expression,_e,ot),Q,!0)}else ue=Kn(ue,r.createIdentifier(\"default\"),$e(Q.expression,_e,ot),Q,!0);return zp(ue)}function tn(Q){let ue;if(Mr(Q,1)?ue=Sn(ue,Ir(it(r.createFunctionDeclaration(On(Q.modifiers,Ht,Ha),Q.asteriskToken,r.getDeclarationName(Q,!0,!0),void 0,On(Q.parameters,_e,ha),void 0,xn(Q.body,_e,e)),Q),Q)):ue=Sn(ue,xn(Q,_e,e)),Ni(Q)){let G=sc(Q);w[G]=pn(w[G],Q)}else ue=pn(ue,Q);return zp(ue)}function kn(Q){let ue;if(Mr(Q,1)?ue=Sn(ue,Ir(it(r.createClassDeclaration(On(Q.modifiers,Ht,Ns),r.getDeclarationName(Q,!0,!0),void 0,On(Q.heritageClauses,_e,dd),On(Q.members,_e,_l)),Q),Q)):ue=Sn(ue,xn(Q,_e,e)),Ni(Q)){let G=sc(Q);w[G]=pn(w[G],Q)}else ue=pn(ue,Q);return zp(ue)}function _n(Q){let ue,G,Oe;if(Mr(Q,1)){let je,Ge=!1;for(let kt of Q.declarationList.declarations)if(Re(kt.name)&&rv(kt.name))if(je||(je=On(Q.modifiers,Ht,Ha)),kt.initializer){let Kt=r.updateVariableDeclaration(kt,kt.name,void 0,void 0,vn(kt.name,$e(kt.initializer,_e,ot)));G=Sn(G,Kt)}else G=Sn(G,kt);else if(kt.initializer)if(!La(kt.name)&&(xs(kt.initializer)||ms(kt.initializer)||_u(kt.initializer))){let Kt=r.createAssignment(it(r.createPropertyAccessExpression(r.createIdentifier(\"exports\"),kt.name),kt.name),r.createIdentifier(l_(kt.name))),ln=r.createVariableDeclaration(kt.name,kt.exclamationToken,kt.type,$e(kt.initializer,_e,ot));G=Sn(G,ln),Oe=Sn(Oe,Kt),Ge=!0}else Oe=Sn(Oe,$n(kt));if(G&&(ue=Sn(ue,r.updateVariableStatement(Q,je,r.updateVariableDeclarationList(Q.declarationList,G)))),Oe){let kt=Ir(it(r.createExpressionStatement(r.inlineExpressions(Oe)),Q),Q);Ge&&ZR(kt),ue=Sn(ue,kt)}}else ue=Sn(ue,xn(Q,_e,e));if(Ni(Q)){let je=sc(Q);w[je]=nn(w[je],Q)}else ue=nn(ue,Q);return zp(ue)}function Gt(Q,ue,G){let Oe=ce(Q);if(Oe){let je=E3(Q)?ue:r.createAssignment(Q,ue);for(let Ge of Oe)Jn(je,8),je=vn(Ge,je,G);return je}return r.createAssignment(Q,ue)}function $n(Q){return La(Q.name)?KT($e(Q,_e,mW),_e,e,0,!1,Gt):r.createAssignment(it(r.createPropertyAccessExpression(r.createIdentifier(\"exports\"),Q.name),Q.name),Q.initializer?$e(Q.initializer,_e,ot):r.createVoidZero())}function ui(Q){if(Ni(Q)&&Q.original.kind===240){let ue=sc(Q);w[ue]=nn(w[ue],Q.original)}return Q}function Ni(Q){return(Ya(Q)&8388608)!==0}function Pi(Q){let ue=sc(Q),G=w[ue];return G?(delete w[ue],Sn(G,Q)):Q}function gr(Q,ue){if(P.exportEquals)return Q;let G=ue.importClause;if(!G)return Q;G.name&&(Q=An(Q,G));let Oe=G.namedBindings;if(Oe)switch(Oe.kind){case 271:Q=An(Q,Oe);break;case 272:for(let je of Oe.elements)Q=An(Q,je,!0);break}return Q}function pt(Q,ue){return P.exportEquals?Q:An(Q,ue)}function nn(Q,ue){if(P.exportEquals)return Q;for(let G of ue.declarationList.declarations)Q=Dt(Q,G);return Q}function Dt(Q,ue){if(P.exportEquals)return Q;if(La(ue.name))for(let G of ue.name.elements)ol(G)||(Q=Dt(Q,G));else tc(ue.name)||(Q=An(Q,ue));return Q}function pn(Q,ue){if(P.exportEquals)return Q;if(Mr(ue,1)){let G=Mr(ue,1024)?r.createIdentifier(\"default\"):r.getDeclarationName(ue);Q=Kn(Q,G,r.getLocalName(ue),ue)}return ue.name&&(Q=An(Q,ue)),Q}function An(Q,ue,G){let Oe=r.getDeclarationName(ue),je=P.exportSpecifiers.get(vr(Oe));if(je)for(let Ge of je)Q=Kn(Q,Ge.name,Oe,Ge.name,void 0,G);return Q}function Kn(Q,ue,G,Oe,je,Ge){return Q=Sn(Q,ri(ue,G,Oe,je,Ge)),Q}function hi(){let Q;return m===0?Q=r.createExpressionStatement(vn(r.createIdentifier(\"__esModule\"),r.createTrue())):Q=r.createExpressionStatement(r.createCallExpression(r.createPropertyAccessExpression(r.createIdentifier(\"Object\"),\"defineProperty\"),void 0,[r.createIdentifier(\"exports\"),r.createStringLiteral(\"__esModule\"),r.createObjectLiteralExpression([r.createPropertyAssignment(\"value\",r.createTrue())])])),Jn(Q,2097152),Q}function ri(Q,ue,G,Oe,je){let Ge=it(r.createExpressionStatement(vn(Q,ue,void 0,je)),G);return mu(Ge),Oe||Jn(Ge,3072),Ge}function vn(Q,ue,G,Oe){return it(Oe&&m!==0?r.createCallExpression(r.createPropertyAccessExpression(r.createIdentifier(\"Object\"),\"defineProperty\"),void 0,[r.createIdentifier(\"exports\"),r.createStringLiteralFromNode(Q),r.createObjectLiteralExpression([r.createPropertyAssignment(\"enumerable\",r.createTrue()),r.createPropertyAssignment(\"get\",r.createFunctionExpression(void 0,void 0,void 0,void 0,[],void 0,r.createBlock([r.createReturnStatement(ue)])))])]):r.createAssignment(r.createPropertyAccessExpression(r.createIdentifier(\"exports\"),r.cloneNode(Q)),ue),G)}function Ht(Q){switch(Q.kind){case 93:case 88:return}return Q}function En(Q,ue,G){ue.kind===308?(C=ue,P=A[sc(C)],x(Q,ue,G),C=void 0,P=void 0):x(Q,ue,G)}function dr(Q,ue){return ue=S(Q,ue),ue.id&&F[ue.id]?ue:Q===1?Se(ue):xf(ue)?Cr(ue):ue}function Cr(Q){let ue=Q.name,G=ve(ue);if(G!==ue){if(Q.objectAssignmentInitializer){let Oe=r.createAssignment(G,Q.objectAssignmentInitializer);return it(r.createPropertyAssignment(ue,Oe),Q)}return it(r.createPropertyAssignment(ue,G),Q)}return Q}function Se(Q){switch(Q.kind){case 79:return ve(Q);case 210:return at(Q);case 212:return Tt(Q);case 223:return nt(Q)}return Q}function at(Q){if(Re(Q.expression)){let ue=ve(Q.expression);if(F[zo(ue)]=!0,!Re(ue)&&!(Ya(Q.expression)&8192))return SS(r.updateCallExpression(Q,ue,void 0,Q.arguments),16)}return Q}function Tt(Q){if(Re(Q.tag)){let ue=ve(Q.tag);if(F[zo(ue)]=!0,!Re(ue)&&!(Ya(Q.tag)&8192))return SS(r.updateTaggedTemplateExpression(Q,ue,void 0,Q.template),16)}return Q}function ve(Q){var ue,G;if(Ya(Q)&8192){let Oe=SO(C);return Oe?r.createPropertyAccessExpression(Oe,Q):Q}else if(!(tc(Q)&&!(Q.emitNode.autoGenerate.flags&64))&&!rv(Q)){let Oe=d.getReferencedExportContainer(Q,E3(Q));if(Oe&&Oe.kind===308)return it(r.createPropertyAccessExpression(r.createIdentifier(\"exports\"),r.cloneNode(Q)),Q);let je=d.getReferencedImportDeclaration(Q);if(je){if(lm(je))return it(r.createPropertyAccessExpression(r.getGeneratedNameForNode(je.parent),r.createIdentifier(\"default\")),Q);if($u(je)){let Ge=je.propertyName||je.name;return it(r.createPropertyAccessExpression(r.getGeneratedNameForNode(((G=(ue=je.parent)==null?void 0:ue.parent)==null?void 0:G.parent)||je),r.cloneNode(Ge)),Q)}}}return Q}function nt(Q){if(Mg(Q.operatorToken.kind)&&Re(Q.left)&&!tc(Q.left)&&!rv(Q.left)&&!wR(Q.left)){let ue=ce(Q.left);if(ue){let G=Q;for(let Oe of ue)F[zo(G)]=!0,G=vn(Oe,G,Q);return G}}return Q}function ce(Q){if(!tc(Q)){let ue=d.getReferencedImportDeclaration(Q)||d.getReferencedValueDeclaration(Q);if(ue)return P&&P.exportedBindings[sc(ue)]}}}var ype,TMe=gt({\"src/compiler/transformers/module/module.ts\"(){\"use strict\";fa(),ype={name:\"typescript:dynamicimport-sync-require\",scoped:!0,text:`\n            var __syncRequire = typeof module === \"object\" && typeof module.exports === \"object\";`}}});function vpe(e){let{factory:t,startLexicalEnvironment:r,endLexicalEnvironment:i,hoistVariableDeclaration:o}=e,s=e.getCompilerOptions(),l=e.getEmitResolver(),f=e.getEmitHost(),d=e.onSubstituteNode,g=e.onEmitNode;e.onSubstituteNode=je,e.onEmitNode=Oe,e.enableSubstitution(79),e.enableSubstitution(300),e.enableSubstitution(223),e.enableSubstitution(233),e.enableEmitNotification(308);let m=[],v=[],S=[],x=[],A=[],w,C,P,F,B,q,W;return y_(e,Y);function Y(oe){if(oe.isDeclarationFile||!(aS(oe,s)||oe.transformFlags&8388608))return oe;let pe=sc(oe);w=oe,q=oe,C=m[pe]=xK(e,oe,l,s),P=t.createUniqueName(\"exports\"),S[pe]=P,F=A[pe]=t.createUniqueName(\"context\");let z=R(C.externalImports),Te=ie(oe,z),j=t.createFunctionExpression(void 0,void 0,void 0,void 0,[t.createParameterDeclaration(void 0,void 0,P),t.createParameterDeclaration(void 0,void 0,F)],void 0,Te),yt=xO(t,oe,f,s),lt=t.createArrayLiteralExpression(on(z,Vt=>Vt.name)),Qe=Jn(t.updateSourceFile(oe,it(t.createNodeArray([t.createExpressionStatement(t.createCallExpression(t.createPropertyAccessExpression(t.createIdentifier(\"System\"),\"register\"),void 0,yt?[yt,lt,j]:[lt,j]))]),oe.statements)),2048);return Ss(s)||gue(Qe,Te,Vt=>!Vt.scoped),W&&(x[pe]=W,W=void 0),w=void 0,C=void 0,P=void 0,F=void 0,B=void 0,q=void 0,Qe}function R(oe){let pe=new Map,z=[];for(let Te of oe){let j=jS(t,Te,w,f,l,s);if(j){let yt=j.text,lt=pe.get(yt);lt!==void 0?z[lt].externalImports.push(Te):(pe.set(yt,z.length),z.push({name:j,externalImports:[Te]}))}}return z}function ie(oe,pe){let z=[];r();let Te=Uf(s,\"alwaysStrict\")||!s.noImplicitUseStrict&&Lc(w),j=t.copyPrologue(oe.statements,z,Te,U);z.push(t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(\"__moduleName\",void 0,void 0,t.createLogicalAnd(F,t.createPropertyAccessExpression(F,\"id\")))]))),$e(C.externalHelpersImportDeclaration,U,ca);let yt=On(oe.statements,U,ca,j);si(z,B),em(z,i());let lt=$(z),Qe=oe.transformFlags&2097152?t.createModifiersFromModifierFlags(512):void 0,Vt=t.createObjectLiteralExpression([t.createPropertyAssignment(\"setters\",Z(lt,pe)),t.createPropertyAssignment(\"execute\",t.createFunctionExpression(Qe,void 0,void 0,void 0,[],void 0,t.createBlock(yt,!0)))],!0);return z.push(t.createReturnStatement(Vt)),t.createBlock(z,!0)}function $(oe){if(!C.hasExportStarsToExportValues)return;if(!C.exportedNames&&C.exportSpecifiers.size===0){let j=!1;for(let yt of C.externalImports)if(yt.kind===275&&yt.exportClause){j=!0;break}if(!j){let yt=fe(void 0);return oe.push(yt),yt.name}}let pe=[];if(C.exportedNames)for(let j of C.exportedNames)j.escapedText!==\"default\"&&pe.push(t.createPropertyAssignment(t.createStringLiteralFromNode(j),t.createTrue()));let z=t.createUniqueName(\"exportedNames\");oe.push(t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(z,void 0,void 0,t.createObjectLiteralExpression(pe,!0))])));let Te=fe(z);return oe.push(Te),Te.name}function fe(oe){let pe=t.createUniqueName(\"exportStar\"),z=t.createIdentifier(\"m\"),Te=t.createIdentifier(\"n\"),j=t.createIdentifier(\"exports\"),yt=t.createStrictInequality(Te,t.createStringLiteral(\"default\"));return oe&&(yt=t.createLogicalAnd(yt,t.createLogicalNot(t.createCallExpression(t.createPropertyAccessExpression(oe,\"hasOwnProperty\"),void 0,[Te])))),t.createFunctionDeclaration(void 0,void 0,pe,void 0,[t.createParameterDeclaration(void 0,void 0,z)],void 0,t.createBlock([t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(j,void 0,void 0,t.createObjectLiteralExpression([]))])),t.createForInStatement(t.createVariableDeclarationList([t.createVariableDeclaration(Te)]),z,t.createBlock([Jn(t.createIfStatement(yt,t.createExpressionStatement(t.createAssignment(t.createElementAccessExpression(j,Te),t.createElementAccessExpression(z,Te)))),1)])),t.createExpressionStatement(t.createCallExpression(P,void 0,[j]))],!0))}function Z(oe,pe){let z=[];for(let Te of pe){let j=mn(Te.externalImports,Qe=>C2(t,Qe,w)),yt=j?t.getGeneratedNameForNode(j):t.createUniqueName(\"\"),lt=[];for(let Qe of Te.externalImports){let Vt=C2(t,Qe,w);switch(Qe.kind){case 269:if(!Qe.importClause)break;case 268:L.assert(Vt!==void 0),lt.push(t.createExpressionStatement(t.createAssignment(Vt,yt))),Mr(Qe,1)&&lt.push(t.createExpressionStatement(t.createCallExpression(P,void 0,[t.createStringLiteral(vr(Vt)),yt])));break;case 275:if(L.assert(Vt!==void 0),Qe.exportClause)if(h_(Qe.exportClause)){let Hn=[];for(let jr of Qe.exportClause.elements)Hn.push(t.createPropertyAssignment(t.createStringLiteral(vr(jr.name)),t.createElementAccessExpression(yt,t.createStringLiteral(vr(jr.propertyName||jr.name)))));lt.push(t.createExpressionStatement(t.createCallExpression(P,void 0,[t.createObjectLiteralExpression(Hn,!0)])))}else lt.push(t.createExpressionStatement(t.createCallExpression(P,void 0,[t.createStringLiteral(vr(Qe.exportClause.name)),yt])));else lt.push(t.createExpressionStatement(t.createCallExpression(oe,void 0,[yt])));break}}z.push(t.createFunctionExpression(void 0,void 0,void 0,void 0,[t.createParameterDeclaration(void 0,void 0,yt)],void 0,t.createBlock(lt,!0)))}return t.createArrayLiteralExpression(z,!0)}function U(oe){switch(oe.kind){case 269:return re(oe);case 268:return _e(oe);case 275:return le(oe);case 274:return ge(oe);default:return Gt(oe)}}function re(oe){let pe;if(oe.importClause&&o(C2(t,oe,w)),Ye(oe)){let z=sc(oe);v[z]=ct(v[z],oe)}else pe=ct(pe,oe);return zp(pe)}function le(oe){L.assertIsDefined(oe)}function _e(oe){L.assert(ab(oe),\"import= for internal module references should be handled in an earlier transformer.\");let pe;if(o(C2(t,oe,w)),Ye(oe)){let z=sc(oe);v[z]=Rt(v[z],oe)}else pe=Rt(pe,oe);return zp(pe)}function ge(oe){if(oe.isExportEquals)return;let pe=$e(oe.expression,Cr,ot),z=oe.original;if(z&&Ye(z)){let Te=sc(oe);v[Te]=tn(v[Te],t.createIdentifier(\"default\"),pe,!0)}else return kn(t.createIdentifier(\"default\"),pe,!0)}function X(oe){if(Mr(oe,1)?B=Sn(B,t.updateFunctionDeclaration(oe,On(oe.modifiers,G,Ns),oe.asteriskToken,t.getDeclarationName(oe,!0,!0),void 0,On(oe.parameters,Cr,ha),void 0,$e(oe.body,Cr,Va))):B=Sn(B,xn(oe,Cr,e)),Ye(oe)){let pe=sc(oe);v[pe]=zt(v[pe],oe)}else B=zt(B,oe)}function Ve(oe){let pe,z=t.getLocalName(oe);if(o(z),pe=Sn(pe,it(t.createExpressionStatement(t.createAssignment(z,it(t.createClassExpression(On(oe.modifiers,G,Ns),oe.name,void 0,On(oe.heritageClauses,Cr,dd),On(oe.members,Cr,_l)),oe))),oe)),Ye(oe)){let Te=sc(oe);v[Te]=zt(v[Te],oe)}else pe=zt(pe,oe);return zp(pe)}function we(oe){if(!Pe(oe.declarationList))return $e(oe,Cr,ca);let pe,z=Mr(oe,1),Te=Ye(oe);for(let yt of oe.declarationList.declarations)yt.initializer?pe=Sn(pe,Ce(yt,z&&!Te)):ke(yt);let j;if(pe&&(j=Sn(j,it(t.createExpressionStatement(t.inlineExpressions(pe)),oe))),Te){let yt=sc(oe);v[yt]=We(v[yt],oe,z)}else j=We(j,oe,!1);return zp(j)}function ke(oe){if(La(oe.name))for(let pe of oe.name.elements)ol(pe)||ke(pe);else o(t.cloneNode(oe.name))}function Pe(oe){return(Ya(oe)&4194304)===0&&(q.kind===308||(ec(oe).flags&3)===0)}function Ce(oe,pe){let z=pe?Ie:Be;return La(oe.name)?KT(oe,Cr,e,0,!1,z):oe.initializer?z(oe.name,$e(oe.initializer,Cr,ot)):oe.name}function Ie(oe,pe,z){return Ne(oe,pe,z,!0)}function Be(oe,pe,z){return Ne(oe,pe,z,!1)}function Ne(oe,pe,z,Te){return o(t.cloneNode(oe)),Te?_n(oe,Ot(it(t.createAssignment(oe,pe),z))):Ot(it(t.createAssignment(oe,pe),z))}function Le(oe){if(Ye(oe)&&oe.original.kind===240){let pe=sc(oe),z=Mr(oe.original,1);v[pe]=We(v[pe],oe.original,z)}return oe}function Ye(oe){return(Ya(oe)&8388608)!==0}function _t(oe){let pe=sc(oe),z=v[pe];if(z)return delete v[pe],Sn(z,oe);{let Te=ec(oe);if(Ow(Te))return Sn(Qt(z,Te),oe)}return oe}function ct(oe,pe){if(C.exportEquals)return oe;let z=pe.importClause;if(!z)return oe;z.name&&(oe=Qt(oe,z));let Te=z.namedBindings;if(Te)switch(Te.kind){case 271:oe=Qt(oe,Te);break;case 272:for(let j of Te.elements)oe=Qt(oe,j);break}return oe}function Rt(oe,pe){return C.exportEquals?oe:Qt(oe,pe)}function We(oe,pe,z){if(C.exportEquals)return oe;for(let Te of pe.declarationList.declarations)(Te.initializer||z)&&(oe=qe(oe,Te,z));return oe}function qe(oe,pe,z){if(C.exportEquals)return oe;if(La(pe.name))for(let Te of pe.name.elements)ol(Te)||(oe=qe(oe,Te,z));else if(!tc(pe.name)){let Te;z&&(oe=tn(oe,pe.name,t.getLocalName(pe)),Te=vr(pe.name)),oe=Qt(oe,pe,Te)}return oe}function zt(oe,pe){if(C.exportEquals)return oe;let z;if(Mr(pe,1)){let Te=Mr(pe,1024)?t.createStringLiteral(\"default\"):pe.name;oe=tn(oe,Te,t.getLocalName(pe)),z=l_(Te)}return pe.name&&(oe=Qt(oe,pe,z)),oe}function Qt(oe,pe,z){if(C.exportEquals)return oe;let Te=t.getDeclarationName(pe),j=C.exportSpecifiers.get(vr(Te));if(j)for(let yt of j)yt.name.escapedText!==z&&(oe=tn(oe,yt.name,Te));return oe}function tn(oe,pe,z,Te){return oe=Sn(oe,kn(pe,z,Te)),oe}function kn(oe,pe,z){let Te=t.createExpressionStatement(_n(oe,pe));return mu(Te),z||Jn(Te,3072),Te}function _n(oe,pe){let z=Re(oe)?t.createStringLiteralFromNode(oe):oe;return Jn(pe,Ya(pe)|3072),hl(t.createCallExpression(P,void 0,[z,pe]),pe)}function Gt(oe){switch(oe.kind){case 240:return we(oe);case 259:return X(oe);case 260:return Ve(oe);case 245:return $n(oe,!0);case 246:return ui(oe);case 247:return Ni(oe);case 243:return pt(oe);case 244:return nn(oe);case 253:return Dt(oe);case 251:return pn(oe);case 252:return An(oe);case 266:return Kn(oe);case 292:return hi(oe);case 293:return ri(oe);case 255:return vn(oe);case 295:return Ht(oe);case 238:return En(oe);case 358:return Le(oe);case 359:return _t(oe);default:return Cr(oe)}}function $n(oe,pe){let z=q;return q=oe,oe=t.updateForStatement(oe,$e(oe.initializer,pe?gr:Se,pp),$e(oe.condition,Cr,ot),$e(oe.incrementor,Se,ot),jf(oe.statement,pe?Gt:Cr,e)),q=z,oe}function ui(oe){let pe=q;return q=oe,oe=t.updateForInStatement(oe,gr(oe.initializer),$e(oe.expression,Cr,ot),jf(oe.statement,Gt,e)),q=pe,oe}function Ni(oe){let pe=q;return q=oe,oe=t.updateForOfStatement(oe,oe.awaitModifier,gr(oe.initializer),$e(oe.expression,Cr,ot),jf(oe.statement,Gt,e)),q=pe,oe}function Pi(oe){return pu(oe)&&Pe(oe)}function gr(oe){if(Pi(oe)){let pe;for(let z of oe.declarations)pe=Sn(pe,Ce(z,!1)),z.initializer||ke(z);return pe?t.inlineExpressions(pe):t.createOmittedExpression()}else return $e(oe,Se,pp)}function pt(oe){return t.updateDoStatement(oe,jf(oe.statement,Gt,e),$e(oe.expression,Cr,ot))}function nn(oe){return t.updateWhileStatement(oe,$e(oe.expression,Cr,ot),jf(oe.statement,Gt,e))}function Dt(oe){return t.updateLabeledStatement(oe,oe.label,L.checkDefined($e(oe.statement,Gt,ca,t.liftToBlock)))}function pn(oe){return t.updateWithStatement(oe,$e(oe.expression,Cr,ot),L.checkDefined($e(oe.statement,Gt,ca,t.liftToBlock)))}function An(oe){return t.updateSwitchStatement(oe,$e(oe.expression,Cr,ot),L.checkDefined($e(oe.caseBlock,Gt,hO)))}function Kn(oe){let pe=q;return q=oe,oe=t.updateCaseBlock(oe,On(oe.clauses,Gt,Kj)),q=pe,oe}function hi(oe){return t.updateCaseClause(oe,$e(oe.expression,Cr,ot),On(oe.statements,Gt,ca))}function ri(oe){return xn(oe,Gt,e)}function vn(oe){return xn(oe,Gt,e)}function Ht(oe){let pe=q;return q=oe,oe=t.updateCatchClause(oe,oe.variableDeclaration,L.checkDefined($e(oe.block,Gt,Va))),q=pe,oe}function En(oe){let pe=q;return q=oe,oe=xn(oe,Gt,e),q=pe,oe}function dr(oe,pe){if(!(oe.transformFlags&276828160))return oe;switch(oe.kind){case 245:return $n(oe,!1);case 241:return at(oe);case 214:return Tt(oe,pe);case 356:return ve(oe,pe);case 223:if(Fg(oe))return ce(oe,pe);break;case 210:if(Dd(oe))return nt(oe);break;case 221:case 222:return ue(oe,pe)}return xn(oe,Cr,e)}function Cr(oe){return dr(oe,!1)}function Se(oe){return dr(oe,!0)}function at(oe){return t.updateExpressionStatement(oe,$e(oe.expression,Se,ot))}function Tt(oe,pe){return t.updateParenthesizedExpression(oe,$e(oe.expression,pe?Se:Cr,ot))}function ve(oe,pe){return t.updatePartiallyEmittedExpression(oe,$e(oe.expression,pe?Se:Cr,ot))}function nt(oe){let pe=jS(t,oe,w,f,l,s),z=$e(Sl(oe.arguments),Cr,ot),Te=pe&&(!z||!yo(z)||z.text!==pe.text)?pe:z;return t.createCallExpression(t.createPropertyAccessExpression(F,t.createIdentifier(\"import\")),void 0,Te?[Te]:[])}function ce(oe,pe){return Q(oe.left)?KT(oe,Cr,e,0,!pe):xn(oe,Cr,e)}function Q(oe){if(Iu(oe,!0))return Q(oe.left);if(Km(oe))return Q(oe.expression);if(rs(oe))return vt(oe.properties,Q);if(fu(oe))return vt(oe.elements,Q);if(xf(oe))return Q(oe.name);if(yl(oe))return Q(oe.initializer);if(Re(oe)){let pe=l.getReferencedExportContainer(oe);return pe!==void 0&&pe.kind===308}else return!1}function ue(oe,pe){if((oe.operator===45||oe.operator===46)&&Re(oe.operand)&&!tc(oe.operand)&&!rv(oe.operand)&&!wR(oe.operand)){let z=rt(oe.operand);if(z){let Te,j=$e(oe.operand,Cr,ot);tv(oe)?j=t.updatePrefixUnaryExpression(oe,j):(j=t.updatePostfixUnaryExpression(oe,j),pe||(Te=t.createTempVariable(o),j=t.createAssignment(Te,j),it(j,oe)),j=t.createComma(j,t.cloneNode(oe.operand)),it(j,oe));for(let yt of z)j=_n(yt,Ot(j));return Te&&(j=t.createComma(j,Te),it(j,oe)),j}}return xn(oe,Cr,e)}function G(oe){switch(oe.kind){case 93:case 88:return}return oe}function Oe(oe,pe,z){if(pe.kind===308){let Te=sc(pe);w=pe,C=m[Te],P=S[Te],W=x[Te],F=A[Te],W&&delete x[Te],g(oe,pe,z),w=void 0,C=void 0,P=void 0,F=void 0,W=void 0}else g(oe,pe,z)}function je(oe,pe){return pe=d(oe,pe),Ke(pe)?pe:oe===1?Kt(pe):oe===4?Ge(pe):pe}function Ge(oe){switch(oe.kind){case 300:return kt(oe)}return oe}function kt(oe){var pe,z;let Te=oe.name;if(!tc(Te)&&!rv(Te)){let j=l.getReferencedImportDeclaration(Te);if(j){if(lm(j))return it(t.createPropertyAssignment(t.cloneNode(Te),t.createPropertyAccessExpression(t.getGeneratedNameForNode(j.parent),t.createIdentifier(\"default\"))),oe);if($u(j))return it(t.createPropertyAssignment(t.cloneNode(Te),t.createPropertyAccessExpression(t.getGeneratedNameForNode(((z=(pe=j.parent)==null?void 0:pe.parent)==null?void 0:z.parent)||j),t.cloneNode(j.propertyName||j.name))),oe)}}return oe}function Kt(oe){switch(oe.kind){case 79:return ln(oe);case 223:return ir(oe);case 233:return ae(oe)}return oe}function ln(oe){var pe,z;if(Ya(oe)&8192){let Te=SO(w);return Te?t.createPropertyAccessExpression(Te,oe):oe}if(!tc(oe)&&!rv(oe)){let Te=l.getReferencedImportDeclaration(oe);if(Te){if(lm(Te))return it(t.createPropertyAccessExpression(t.getGeneratedNameForNode(Te.parent),t.createIdentifier(\"default\")),oe);if($u(Te))return it(t.createPropertyAccessExpression(t.getGeneratedNameForNode(((z=(pe=Te.parent)==null?void 0:pe.parent)==null?void 0:z.parent)||Te),t.cloneNode(Te.propertyName||Te.name)),oe)}}return oe}function ir(oe){if(Mg(oe.operatorToken.kind)&&Re(oe.left)&&!tc(oe.left)&&!rv(oe.left)&&!wR(oe.left)){let pe=rt(oe.left);if(pe){let z=oe;for(let Te of pe)z=_n(Te,Ot(z));return z}}return oe}function ae(oe){return NA(oe)?t.createPropertyAccessExpression(F,t.createIdentifier(\"meta\")):oe}function rt(oe){let pe;if(!tc(oe)){let z=l.getReferencedImportDeclaration(oe)||l.getReferencedValueDeclaration(oe);if(z){let Te=l.getReferencedExportContainer(oe,!1);Te&&Te.kind===308&&(pe=Sn(pe,t.getDeclarationName(z))),pe=si(pe,C&&C.exportedBindings[sc(z)])}}return pe}function Ot(oe){return W===void 0&&(W=[]),W[zo(oe)]=!0,oe}function Ke(oe){return W&&oe.id&&W[oe.id]}}var SMe=gt({\"src/compiler/transformers/module/system.ts\"(){\"use strict\";fa()}});function GK(e){let{factory:t,getEmitHelperFactory:r}=e,i=e.getEmitHost(),o=e.getEmitResolver(),s=e.getCompilerOptions(),l=Do(s),f=e.onEmitNode,d=e.onSubstituteNode;e.onEmitNode=q,e.onSubstituteNode=W,e.enableEmitNotification(308),e.enableSubstitution(79);let g,m,v;return y_(e,S);function S(R){if(R.isDeclarationFile)return R;if(Lc(R)||d_(s)){m=R,v=void 0;let ie=x(R);return m=void 0,v&&(ie=t.updateSourceFile(ie,it(t.createNodeArray(rH(ie.statements.slice(),v)),ie.statements))),!Lc(R)||vt(ie.statements,Rw)?ie:t.updateSourceFile(ie,it(t.createNodeArray([...ie.statements,bO(t)]),ie.statements))}return R}function x(R){let ie=nJ(t,r(),R,s);if(ie){let $=[],fe=t.copyPrologue(R.statements,$);return Sn($,ie),si($,On(R.statements,A,ca,fe)),t.updateSourceFile(R,it(t.createNodeArray($),R.statements))}else return xn(R,A,e)}function A(R){switch(R.kind){case 268:return Rl(s)>=100?C(R):void 0;case 274:return F(R);case 275:return B(R)}return R}function w(R){let ie=jS(t,R,L.checkDefined(m),i,o,s),$=[];if(ie&&$.push(ie),!v){let Z=t.createUniqueName(\"_createRequire\",48),U=t.createImportDeclaration(void 0,t.createImportClause(!1,void 0,t.createNamedImports([t.createImportSpecifier(!1,t.createIdentifier(\"createRequire\"),Z)])),t.createStringLiteral(\"module\")),re=t.createUniqueName(\"__require\",48),le=t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(re,void 0,void 0,t.createCallExpression(t.cloneNode(Z),void 0,[t.createPropertyAccessExpression(t.createMetaProperty(100,t.createIdentifier(\"meta\")),t.createIdentifier(\"url\"))]))],l>=2?2:0));v=[U,le]}let fe=v[1].declarationList.declarations[0].name;return L.assertNode(fe,Re),t.createCallExpression(t.cloneNode(fe),void 0,$)}function C(R){L.assert(ab(R),\"import= for internal module references should be handled in an earlier transformer.\");let ie;return ie=Sn(ie,Ir(it(t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(t.cloneNode(R.name),void 0,void 0,w(R))],l>=2?2:0)),R),R)),ie=P(ie,R),zp(ie)}function P(R,ie){return Mr(ie,1)&&(R=Sn(R,t.createExportDeclaration(void 0,ie.isTypeOnly,t.createNamedExports([t.createExportSpecifier(!1,void 0,vr(ie.name))])))),R}function F(R){return R.isExportEquals?void 0:R}function B(R){if(s.module!==void 0&&s.module>5||!R.exportClause||!qm(R.exportClause)||!R.moduleSpecifier)return R;let ie=R.exportClause.name,$=t.getGeneratedNameForNode(ie),fe=t.createImportDeclaration(void 0,t.createImportClause(!1,void 0,t.createNamespaceImport($)),R.moduleSpecifier,R.assertClause);Ir(fe,R.exportClause);let Z=v6(R)?t.createExportDefault($):t.createExportDeclaration(void 0,!1,t.createNamedExports([t.createExportSpecifier(!1,$,ie)]));return Ir(Z,R),[fe,Z]}function q(R,ie,$){Li(ie)?((Lc(ie)||d_(s))&&s.importHelpers&&(g=new Map),f(R,ie,$),g=void 0):f(R,ie,$)}function W(R,ie){return ie=d(R,ie),g&&Re(ie)&&Ya(ie)&8192?Y(ie):ie}function Y(R){let ie=vr(R),$=g.get(ie);return $||g.set(ie,$=t.createUniqueName(ie,48)),$}}var xMe=gt({\"src/compiler/transformers/module/esnextAnd2015.ts\"(){\"use strict\";fa()}});function bpe(e){let t=e.onSubstituteNode,r=e.onEmitNode,i=GK(e),o=e.onSubstituteNode,s=e.onEmitNode;e.onSubstituteNode=t,e.onEmitNode=r;let l=FK(e),f=e.onSubstituteNode,d=e.onEmitNode;e.onSubstituteNode=m,e.onEmitNode=v,e.enableSubstitution(308),e.enableEmitNotification(308);let g;return A;function m(C,P){return Li(P)?(g=P,t(C,P)):g?g.impliedNodeFormat===99?o(C,P):f(C,P):t(C,P)}function v(C,P,F){return Li(P)&&(g=P),g?g.impliedNodeFormat===99?s(C,P,F):d(C,P,F):r(C,P,F)}function S(C){return C.impliedNodeFormat===99?i:l}function x(C){if(C.isDeclarationFile)return C;g=C;let P=S(C)(C);return g=void 0,L.assert(Li(P)),P}function A(C){return C.kind===308?x(C):w(C)}function w(C){return e.factory.createBundle(on(C.sourceFiles,x),C.prepends)}}var AMe=gt({\"src/compiler/transformers/module/node.ts\"(){\"use strict\";fa()}});function xF(e){return wi(e)||Na(e)||$d(e)||Wo(e)||Ng(e)||zy(e)||uO(e)||_2(e)||Nc(e)||zm(e)||Jc(e)||ha(e)||_c(e)||Vg(e)||Nl(e)||Ep(e)||Ec(e)||kS(e)||br(e)||Ff(e)}function Epe(e){if(Ng(e)||zy(e))return t;return zm(e)||Nc(e)?i:zg(e);function t(s){let l=r(s);return l!==void 0?{diagnosticMessage:l,errorNode:e,typeName:e.name}:void 0}function r(s){return Ca(e)?s.errorModuleName?s.accessibility===2?_.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:_.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1:e.parent.kind===260?s.errorModuleName?s.accessibility===2?_.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:_.Public_property_0_of_exported_class_has_or_is_using_private_name_1:s.errorModuleName?_.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:_.Property_0_of_exported_interface_has_or_is_using_private_name_1}function i(s){let l=o(s);return l!==void 0?{diagnosticMessage:l,errorNode:e,typeName:e.name}:void 0}function o(s){return Ca(e)?s.errorModuleName?s.accessibility===2?_.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:_.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1:e.parent.kind===260?s.errorModuleName?s.accessibility===2?_.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:_.Public_method_0_of_exported_class_has_or_is_using_private_name_1:s.errorModuleName?_.Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:_.Method_0_of_exported_interface_has_or_is_using_private_name_1}}function zg(e){if(wi(e)||Na(e)||$d(e)||br(e)||Wo(e)||Ec(e))return r;return Ng(e)||zy(e)?i:uO(e)||_2(e)||Nc(e)||zm(e)||Jc(e)||kS(e)?o:ha(e)?Ad(e,e.parent)&&Mr(e.parent,8)?r:s:_c(e)?f:Vg(e)?d:Nl(e)?g:Ep(e)||Ff(e)?m:L.assertNever(e,`Attempted to set a declaration diagnostic context for unhandled node kind: ${L.formatSyntaxKind(e.kind)}`);function t(v){if(e.kind===257||e.kind===205)return v.errorModuleName?v.accessibility===2?_.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Exported_variable_0_has_or_is_using_name_1_from_private_module_2:_.Exported_variable_0_has_or_is_using_private_name_1;if(e.kind===169||e.kind===208||e.kind===168||e.kind===166&&Mr(e.parent,8))return Ca(e)?v.errorModuleName?v.accessibility===2?_.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:_.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1:e.parent.kind===260||e.kind===166?v.errorModuleName?v.accessibility===2?_.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:_.Public_property_0_of_exported_class_has_or_is_using_private_name_1:v.errorModuleName?_.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:_.Property_0_of_exported_interface_has_or_is_using_private_name_1}function r(v){let S=t(v);return S!==void 0?{diagnosticMessage:S,errorNode:e,typeName:e.name}:void 0}function i(v){let S;return e.kind===175?Ca(e)?S=v.errorModuleName?_.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:_.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1:S=v.errorModuleName?_.Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:_.Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1:Ca(e)?S=v.errorModuleName?v.accessibility===2?_.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:_.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1:S=v.errorModuleName?v.accessibility===2?_.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:_.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1,{diagnosticMessage:S,errorNode:e.name,typeName:e.name}}function o(v){let S;switch(e.kind){case 177:S=v.errorModuleName?_.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:_.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;break;case 176:S=v.errorModuleName?_.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:_.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;break;case 178:S=v.errorModuleName?_.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:_.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;break;case 171:case 170:Ca(e)?S=v.errorModuleName?v.accessibility===2?_.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:_.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:_.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0:e.parent.kind===260?S=v.errorModuleName?v.accessibility===2?_.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:_.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:_.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0:S=v.errorModuleName?_.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1:_.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;break;case 259:S=v.errorModuleName?v.accessibility===2?_.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:_.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1:_.Return_type_of_exported_function_has_or_is_using_private_name_0;break;default:return L.fail(\"This is unknown kind for signature: \"+e.kind)}return{diagnosticMessage:S,errorNode:e.name||e}}function s(v){let S=l(v);return S!==void 0?{diagnosticMessage:S,errorNode:e,typeName:e.name}:void 0}function l(v){switch(e.parent.kind){case 173:return v.errorModuleName?v.accessibility===2?_.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2:_.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;case 177:case 182:return v.errorModuleName?_.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:_.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;case 176:return v.errorModuleName?_.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:_.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;case 178:return v.errorModuleName?_.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:_.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;case 171:case 170:return Ca(e.parent)?v.errorModuleName?v.accessibility===2?_.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:_.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:e.parent.parent.kind===260?v.errorModuleName?v.accessibility===2?_.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:_.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:v.errorModuleName?_.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2:_.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;case 259:case 181:return v.errorModuleName?v.accessibility===2?_.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2:_.Parameter_0_of_exported_function_has_or_is_using_private_name_1;case 175:case 174:return v.errorModuleName?v.accessibility===2?_.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:_.Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2:_.Parameter_0_of_accessor_has_or_is_using_private_name_1;default:return L.fail(`Unknown parent for parameter: ${L.formatSyntaxKind(e.parent.kind)}`)}}function f(){let v;switch(e.parent.kind){case 260:v=_.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;break;case 261:v=_.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;break;case 197:v=_.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1;break;case 182:case 177:v=_.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;break;case 176:v=_.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;break;case 171:case 170:Ca(e.parent)?v=_.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:e.parent.parent.kind===260?v=_.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:v=_.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;break;case 181:case 259:v=_.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;break;case 192:v=_.Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1;break;case 262:v=_.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;break;default:return L.fail(\"This is unknown parent for type parameter: \"+e.parent.kind)}return{diagnosticMessage:v,errorNode:e,typeName:e.name}}function d(){let v;return sl(e.parent.parent)?v=dd(e.parent)&&e.parent.token===117?_.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1:e.parent.parent.name?_.extends_clause_of_exported_class_0_has_or_is_using_private_name_1:_.extends_clause_of_exported_class_has_or_is_using_private_name_0:v=_.extends_clause_of_exported_interface_0_has_or_is_using_private_name_1,{diagnosticMessage:v,errorNode:e,typeName:sa(e.parent.parent)}}function g(){return{diagnosticMessage:_.Import_declaration_0_is_using_private_name_1,errorNode:e,typeName:e.name}}function m(v){return{diagnosticMessage:v.errorModuleName?_.Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2:_.Exported_type_alias_0_has_or_is_using_private_name_1,errorNode:Ff(e)?L.checkDefined(e.typeExpression):e.type,typeName:Ff(e)?sa(e):e.name}}}var CMe=gt({\"src/compiler/transformers/declarations/diagnostics.ts\"(){\"use strict\";fa()}});function Tpe(e,t,r){let i=e.getCompilerOptions();return lN(t,e,D,i,r?[r]:Pr(e.getSourceFiles(),LH),[UK],!1).diagnostics}function Spe(e,t){let r=t.text.substring(e.pos,e.end);return jl(r,\"@internal\")}function BK(e,t){let r=ea(e);if(r&&r.kind===166){let o=r.parent.parameters.indexOf(r),s=o>0?r.parent.parameters[o-1]:void 0,l=t.text,f=s?Qi(eb(l,xo(l,s.end+1,!1,!0)),Nm(l,e.pos)):eb(l,xo(l,e.pos,!1,!0));return f&&f.length&&Spe(To(f),t)}let i=r&&bH(r,t);return!!mn(i,o=>Spe(o,t))}function UK(e){let t=()=>L.fail(\"Diagnostic emitted without context\"),r=t,i=!0,o=!1,s=!1,l=!1,f=!1,d,g,m,v,S,x,{factory:A}=e,w=e.getEmitHost(),C={trackSymbol:_e,reportInaccessibleThisError:ke,reportInaccessibleUniqueSymbolError:Ve,reportCyclicStructureError:we,reportPrivateInBaseOfClassExpression:ge,reportLikelyUnsafeImportRequiredError:Pe,reportTruncationError:Ce,moduleResolverHost:w,trackReferencedAmbientModule:U,trackExternalModuleSymbolOfImportTypeNode:le,reportNonlocalAugmentation:Ie,reportNonSerializableProperty:Be,reportImportTypeNodeResolutionModeOverride:Ne},P,F,B,q,W,Y,R=e.getEmitResolver(),ie=e.getCompilerOptions(),{noResolve:$,stripInternal:fe}=ie;return Ye;function Z(G){if(G){g=g||new Set;for(let Oe of G)g.add(Oe)}}function U(G,Oe){let je=R.getTypeReferenceDirectivesForSymbol(Oe,67108863);if(Fn(je))return Z(je);let Ge=Gn(G);q.set(sc(Ge),Ge)}function re(G){if(G.accessibility===0){if(G&&G.aliasesToMakeVisible)if(!m)m=G.aliasesToMakeVisible;else for(let Oe of G.aliasesToMakeVisible)Of(m,Oe)}else{let Oe=r(G);if(Oe)return Oe.typeName?e.addDiagnostic(hr(G.errorNode||Oe.errorNode,Oe.diagnosticMessage,Qc(Oe.typeName),G.errorSymbolName,G.errorModuleName)):e.addDiagnostic(hr(G.errorNode||Oe.errorNode,Oe.diagnosticMessage,G.errorSymbolName,G.errorModuleName)),!0}return!1}function le(G){o||(x||(x=[])).push(G)}function _e(G,Oe,je){if(G.flags&262144)return!1;let Ge=re(R.isSymbolAccessible(G,Oe,je,!0));return Z(R.getTypeReferenceDirectivesForSymbol(G,je)),Ge}function ge(G){(P||F)&&e.addDiagnostic(hr(P||F,_.Property_0_of_exported_class_expression_may_not_be_private_or_protected,G))}function X(){return P?os(P):F&&sa(F)?os(sa(F)):F&&pc(F)?F.isExportEquals?\"export=\":\"default\":\"(Missing)\"}function Ve(){(P||F)&&e.addDiagnostic(hr(P||F,_.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary,X(),\"unique symbol\"))}function we(){(P||F)&&e.addDiagnostic(hr(P||F,_.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary,X()))}function ke(){(P||F)&&e.addDiagnostic(hr(P||F,_.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary,X(),\"this\"))}function Pe(G){(P||F)&&e.addDiagnostic(hr(P||F,_.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary,X(),G))}function Ce(){(P||F)&&e.addDiagnostic(hr(P||F,_.The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_type_annotation_is_needed))}function Ie(G,Oe,je){var Ge;let kt=(Ge=Oe.declarations)==null?void 0:Ge.find(ln=>Gn(ln)===G),Kt=Pr(je.declarations,ln=>Gn(ln)!==G);if(kt&&Kt)for(let ln of Kt)e.addDiagnostic(Ao(hr(ln,_.Declaration_augments_declaration_in_another_file_This_cannot_be_serialized),hr(kt,_.This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file)))}function Be(G){(P||F)&&e.addDiagnostic(hr(P||F,_.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized,G))}function Ne(){!TR()&&(P||F)&&e.addDiagnostic(hr(P||F,_.The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_feature_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next))}function Le(G,Oe){let je=r;r=kt=>kt.errorNode&&xF(kt.errorNode)?zg(kt.errorNode)(kt):{diagnosticMessage:kt.errorModuleName?_.Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit:_.Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit,errorNode:kt.errorNode||G};let Ge=R.getDeclarationStatementsForSourceFile(G,tE,C,Oe);return r=je,Ge}function Ye(G){if(G.kind===308&&G.isDeclarationFile)return G;if(G.kind===309){o=!0,q=new Map,W=new Map;let Ot=!1,Ke=A.createBundle(on(G.sourceFiles,z=>{if(z.isDeclarationFile)return;if(Ot=Ot||z.hasNoDefaultLib,B=z,d=z,m=void 0,S=!1,v=new Map,r=t,l=!1,f=!1,_t(z,q),ct(z,W),kd(z)||Mf(z)){s=!1,i=!1;let j=Cu(z)?A.createNodeArray(Le(z,!0)):On(z.statements,ri,ca);return A.updateSourceFile(z,[A.createModuleDeclaration([A.createModifier(136)],A.createStringLiteral(Z6(e.getEmitHost(),z)),A.createModuleBlock(it(A.createNodeArray(An(j)),z.statements)))],!0,[],[],!1,[])}i=!0;let Te=Cu(z)?A.createNodeArray(Le(z)):On(z.statements,ri,ca);return A.updateSourceFile(z,An(Te),!0,[],[],!1,[])}),Zi(G.prepends,z=>{if(z.kind===311){let Te=fz(z,\"dts\",fe);return Ot=Ot||!!Te.hasNoDefaultLib,_t(Te,q),Z(on(Te.typeReferenceDirectives,j=>[j.fileName,j.resolutionMode])),ct(Te,W),Te}return z}));Ke.syntheticFileReferences=[],Ke.syntheticTypeReferences=ir(),Ke.syntheticLibReferences=ln(),Ke.hasNoDefaultLib=Ot;let oe=ni(Al(KL(G,w,!0).declarationFilePath)),pe=rt(Ke.syntheticFileReferences,oe);return q.forEach(pe),Ke}i=!0,l=!1,f=!1,d=G,B=G,r=t,o=!1,s=!1,S=!1,m=void 0,v=new Map,g=void 0,q=_t(B,new Map),W=ct(B,new Map);let Oe=[],je=ni(Al(KL(G,w,!0).declarationFilePath)),Ge=rt(Oe,je),kt;if(Cu(B))kt=A.createNodeArray(Le(G)),q.forEach(Ge),Y=Pr(kt,yT);else{let Ot=On(G.statements,ri,ca);kt=it(A.createNodeArray(An(Ot)),G.statements),q.forEach(Ge),Y=Pr(kt,yT),Lc(G)&&(!s||l&&!f)&&(kt=it(A.createNodeArray([...kt,bO(A)]),kt))}let Kt=A.updateSourceFile(G,kt,!0,Oe,ir(),G.hasNoDefaultLib,ln());return Kt.exportedModulesFromDeclarationEmit=x,Kt;function ln(){return lo(W.keys(),Ot=>({fileName:Ot,pos:-1,end:-1}))}function ir(){return g?Zi(lo(g.keys()),ae):[]}function ae([Ot,Ke]){if(Y){for(let oe of Y)if(Nl(oe)&&um(oe.moduleReference)){let pe=oe.moduleReference.expression;if(es(pe)&&pe.text===Ot)return}else if(gl(oe)&&yo(oe.moduleSpecifier)&&oe.moduleSpecifier.text===Ot)return}return{fileName:Ot,pos:-1,end:-1,...Ke?{resolutionMode:Ke}:void 0}}function rt(Ot,Ke){return oe=>{let pe;if(oe.isDeclarationFile)pe=oe.fileName;else{if(o&&ya(G.sourceFiles,oe))return;let z=KL(oe,w,!0);pe=z.declarationFilePath||z.jsFilePath||oe.fileName}if(pe){let z=sF(ie,B,Ts(Ke,w.getCurrentDirectory(),w.getCanonicalFileName),Ts(pe,w.getCurrentDirectory(),w.getCanonicalFileName),w);if(!Jd(z)){Z([[z,void 0]]);return}let Te=Q1(Ke,pe,w.getCurrentDirectory(),w.getCanonicalFileName,!1);if(na(Te,\"./\")&&gA(Te)&&(Te=Te.substring(2)),na(Te,\"node_modules/\")||JS(Te))return;Ot.push({pos:-1,end:-1,fileName:Te})}}}}function _t(G,Oe){return $||!BT(G)&&Cu(G)||mn(G.referencedFiles,je=>{let Ge=w.getSourceFileFromReference(G,je);Ge&&Oe.set(sc(Ge),Ge)}),Oe}function ct(G,Oe){return mn(G.libReferenceDirectives,je=>{w.getLibFileFromReference(je)&&Oe.set(n_(je.fileName),!0)}),Oe}function Rt(G){if(G.kind===79)return G;return G.kind===204?A.updateArrayBindingPattern(G,On(G.elements,Oe,c6)):A.updateObjectBindingPattern(G,On(G.elements,Oe,Wo));function Oe(je){return je.kind===229?je:je.propertyName&&Re(je.propertyName)&&Re(je.name)&&!je.symbol.isReferenced&&!q6(je.propertyName)?A.updateBindingElement(je,je.dotDotDotToken,void 0,je.propertyName,qe(je)?je.initializer:void 0):A.updateBindingElement(je,je.dotDotDotToken,je.propertyName,Rt(je.name),qe(je)?je.initializer:void 0)}}function We(G,Oe,je){let Ge;S||(Ge=r,r=zg(G));let kt=A.updateParameterDeclaration(G,LMe(G,Oe),G.dotDotDotToken,Rt(G.name),R.isOptionalParameter(G)?G.questionToken||A.createToken(57):void 0,Qt(G,je||G.type,!0),zt(G));return S||(r=Ge),kt}function qe(G){return kMe(G)&&R.isLiteralConstDeclaration(ea(G))}function zt(G){if(qe(G))return R.createLiteralConstValue(ea(G),C)}function Qt(G,Oe,je){if(!je&&cd(G,8)||qe(G))return;let Ge=G.kind===166&&(R.isRequiredInitializedParameter(G)||R.isOptionalUninitializedParameterProperty(G));if(Oe&&!Ge)return $e(Oe,Kn,bi);if(!ea(G))return Oe?$e(Oe,Kn,bi):A.createKeywordTypeNode(131);if(G.kind===175)return A.createKeywordTypeNode(131);P=G.name;let kt;if(S||(kt=r,r=zg(G)),G.kind===257||G.kind===205)return Kt(R.createTypeOfDeclaration(G,d,tE,C));if(G.kind===166||G.kind===169||G.kind===168)return $d(G)||!G.initializer?Kt(R.createTypeOfDeclaration(G,d,tE,C,Ge)):Kt(R.createTypeOfDeclaration(G,d,tE,C,Ge)||R.createTypeOfExpression(G.initializer,d,tE,C));return Kt(R.createReturnTypeOfSignatureDeclaration(G,d,tE,C));function Kt(ln){return P=void 0,S||(r=kt),ln||A.createKeywordTypeNode(131)}}function tn(G){switch(G=ea(G),G.kind){case 259:case 264:case 261:case 260:case 262:case 263:return!R.isDeclarationVisible(G);case 257:return!_n(G);case 268:case 269:case 275:case 274:return!1;case 172:return!0}return!1}function kn(G){var Oe;if(G.body)return!0;let je=(Oe=G.symbol.declarations)==null?void 0:Oe.filter(Ge=>Jc(Ge)&&!Ge.body);return!je||je.indexOf(G)===je.length-1}function _n(G){return ol(G)?!1:La(G.name)?vt(G.name.elements,_n):R.isDeclarationVisible(G)}function Gt(G,Oe,je){if(cd(G,8))return A.createNodeArray();let Ge=on(Oe,kt=>We(kt,je));return Ge?A.createNodeArray(Ge,Oe.hasTrailingComma):A.createNodeArray()}function $n(G,Oe){let je;if(!Oe){let Ge=F0(G);Ge&&(je=[We(Ge)])}if(Sf(G)){let Ge;if(!Oe){let kt=VI(G);if(kt){let Kt=Q(G,R.getAllAccessorDeclarations(G));Ge=We(kt,void 0,Kt)}}Ge||(Ge=A.createParameterDeclaration(void 0,void 0,\"value\")),je=Sn(je,Ge)}return A.createNodeArray(je||Je)}function ui(G,Oe){return cd(G,8)?void 0:On(Oe,Kn,_c)}function Ni(G){return Li(G)||Ep(G)||Tc(G)||sl(G)||ku(G)||Ia(G)||kS(G)||EL(G)}function Pi(G,Oe){let je=R.isEntityNameVisible(G,Oe);re(je),Z(R.getTypeReferenceDirectivesForEntityName(G))}function gr(G,Oe){return Kd(G)&&Kd(Oe)&&(G.jsDoc=Oe.jsDoc),hl(G,sm(Oe))}function pt(G,Oe){if(Oe){if(s=s||G.kind!==264&&G.kind!==202,es(Oe))if(o){let je=Dce(e.getEmitHost(),R,G);if(je)return A.createStringLiteral(je)}else{let je=R.getSymbolOfExternalModuleSpecifier(Oe);je&&(x||(x=[])).push(je)}return Oe}}function nn(G){if(R.isDeclarationVisible(G))if(G.moduleReference.kind===280){let Oe=wI(G);return A.updateImportEqualsDeclaration(G,G.modifiers,G.isTypeOnly,G.name,A.updateExternalModuleReference(G.moduleReference,pt(G,Oe)))}else{let Oe=r;return r=zg(G),Pi(G.moduleReference,d),r=Oe,G}}function Dt(G){if(!G.importClause)return A.updateImportDeclaration(G,G.modifiers,G.importClause,pt(G,G.moduleSpecifier),pn(G.assertClause));let Oe=G.importClause&&G.importClause.name&&R.isDeclarationVisible(G.importClause)?G.importClause.name:void 0;if(!G.importClause.namedBindings)return Oe&&A.updateImportDeclaration(G,G.modifiers,A.updateImportClause(G.importClause,G.importClause.isTypeOnly,Oe,void 0),pt(G,G.moduleSpecifier),pn(G.assertClause));if(G.importClause.namedBindings.kind===271){let Ge=R.isDeclarationVisible(G.importClause.namedBindings)?G.importClause.namedBindings:void 0;return Oe||Ge?A.updateImportDeclaration(G,G.modifiers,A.updateImportClause(G.importClause,G.importClause.isTypeOnly,Oe,Ge),pt(G,G.moduleSpecifier),pn(G.assertClause)):void 0}let je=Zi(G.importClause.namedBindings.elements,Ge=>R.isDeclarationVisible(Ge)?Ge:void 0);if(je&&je.length||Oe)return A.updateImportDeclaration(G,G.modifiers,A.updateImportClause(G.importClause,G.importClause.isTypeOnly,Oe,je&&je.length?A.updateNamedImports(G.importClause.namedBindings,je):void 0),pt(G,G.moduleSpecifier),pn(G.assertClause));if(R.isImportRequiredByAugmentation(G))return A.updateImportDeclaration(G,G.modifiers,void 0,pt(G,G.moduleSpecifier),pn(G.assertClause))}function pn(G){if(qS(G)!==void 0)return TR()||e.addDiagnostic(hr(G,_.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next)),G}function An(G){for(;Fn(m);){let je=m.shift();if(!E6(je))return L.fail(`Late replaced statement was found which is not handled by the declaration transformer!: ${L.formatSyntaxKind(je.kind)}`);let Ge=i;i=je.parent&&Li(je.parent)&&!(Lc(je.parent)&&o);let kt=Ht(je);i=Ge,v.set(sc(je),kt)}return On(G,Oe,ca);function Oe(je){if(E6(je)){let Ge=sc(je);if(v.has(Ge)){let kt=v.get(Ge);return v.delete(Ge),kt&&((ba(kt)?vt(kt,l6):l6(kt))&&(l=!0),Li(je.parent)&&(ba(kt)?vt(kt,Rw):Rw(kt))&&(s=!0)),kt}}return je}}function Kn(G){if(at(G)||Kl(G)&&(tn(G)||Xy(G)&&!R.isLateBound(ea(G)))||Ia(G)&&R.isImplementationOfOverload(G)||Bue(G))return;let Oe;Ni(G)&&(Oe=d,d=G);let je=r,Ge=xF(G),kt=S,Kt=(G.kind===184||G.kind===197)&&G.parent.kind!==262;if((Nc(G)||zm(G))&&cd(G,8))return G.symbol&&G.symbol.declarations&&G.symbol.declarations[0]!==G?void 0:ln(A.createPropertyDeclaration(nt(G),G.name,void 0,void 0,void 0));if(Ge&&!S&&(r=zg(G)),vL(G)&&Pi(G.exprName,d),Kt&&(S=!0),wMe(G))switch(G.kind){case 230:{(Cd(G.expression)||bc(G.expression))&&Pi(G.expression,d);let ir=xn(G,Kn,e);return ln(A.updateExpressionWithTypeArguments(ir,ir.expression,ir.typeArguments))}case 180:{Pi(G.typeName,d);let ir=xn(G,Kn,e);return ln(A.updateTypeReferenceNode(ir,ir.typeName,ir.typeArguments))}case 177:return ln(A.updateConstructSignature(G,ui(G,G.typeParameters),Gt(G,G.parameters),Qt(G,G.type)));case 173:{let ir=A.createConstructorDeclaration(nt(G),Gt(G,G.parameters,0),void 0);return ln(ir)}case 171:{if(pi(G.name))return ln(void 0);let ir=A.createMethodDeclaration(nt(G),void 0,G.name,G.questionToken,ui(G,G.typeParameters),Gt(G,G.parameters),Qt(G,G.type),void 0);return ln(ir)}case 174:{if(pi(G.name))return ln(void 0);let ir=Q(G,R.getAllAccessorDeclarations(G));return ln(A.updateGetAccessorDeclaration(G,nt(G),G.name,$n(G,cd(G,8)),Qt(G,ir),void 0))}case 175:return pi(G.name)?ln(void 0):ln(A.updateSetAccessorDeclaration(G,nt(G),G.name,$n(G,cd(G,8)),void 0));case 169:return pi(G.name)?ln(void 0):ln(A.updatePropertyDeclaration(G,nt(G),G.name,G.questionToken,Qt(G,G.type),zt(G)));case 168:return pi(G.name)?ln(void 0):ln(A.updatePropertySignature(G,nt(G),G.name,G.questionToken,Qt(G,G.type)));case 170:return pi(G.name)?ln(void 0):ln(A.updateMethodSignature(G,nt(G),G.name,G.questionToken,ui(G,G.typeParameters),Gt(G,G.parameters),Qt(G,G.type)));case 176:return ln(A.updateCallSignature(G,ui(G,G.typeParameters),Gt(G,G.parameters),Qt(G,G.type)));case 178:return ln(A.updateIndexSignature(G,nt(G),Gt(G,G.parameters),$e(G.type,Kn,bi)||A.createKeywordTypeNode(131)));case 257:return La(G.name)?dr(G.name):(Kt=!0,S=!0,ln(A.updateVariableDeclaration(G,G.name,void 0,Qt(G,G.type),zt(G))));case 165:return hi(G)&&(G.default||G.constraint)?ln(A.updateTypeParameterDeclaration(G,G.modifiers,G.name,void 0,void 0)):ln(xn(G,Kn,e));case 191:{let ir=$e(G.checkType,Kn,bi),ae=$e(G.extendsType,Kn,bi),rt=d;d=G.trueType;let Ot=$e(G.trueType,Kn,bi);d=rt;let Ke=$e(G.falseType,Kn,bi);return L.assert(ir),L.assert(ae),L.assert(Ot),L.assert(Ke),ln(A.updateConditionalTypeNode(G,ir,ae,Ot,Ke))}case 181:return ln(A.updateFunctionTypeNode(G,On(G.typeParameters,Kn,_c),Gt(G,G.parameters),L.checkDefined($e(G.type,Kn,bi))));case 182:return ln(A.updateConstructorTypeNode(G,nt(G),On(G.typeParameters,Kn,_c),Gt(G,G.parameters),L.checkDefined($e(G.type,Kn,bi))));case 202:return ib(G)?ln(A.updateImportTypeNode(G,A.updateLiteralTypeNode(G.argument,pt(G,G.argument.literal)),G.assertions,G.qualifier,On(G.typeArguments,Kn,bi),G.isTypeOf)):ln(G);default:L.assertNever(G,`Attempted to process unhandled node kind: ${L.formatSyntaxKind(G.kind)}`)}return p2(G)&&Gs(B,G.pos).line===Gs(B,G.end).line&&Jn(G,1),ln(xn(G,Kn,e));function ln(ir){return ir&&Ge&&Xy(G)&&Se(G),Ni(G)&&(d=Oe),Ge&&!S&&(r=je),Kt&&(S=kt),ir===G?ir:ir&&Ir(gr(ir,G),G)}}function hi(G){return G.parent.kind===171&&cd(G.parent,8)}function ri(G){if(!DMe(G)||at(G))return;switch(G.kind){case 275:return Li(G.parent)&&(s=!0),f=!0,A.updateExportDeclaration(G,G.modifiers,G.isTypeOnly,G.exportClause,pt(G,G.moduleSpecifier),qS(G.assertClause)?G.assertClause:void 0);case 274:{if(Li(G.parent)&&(s=!0),f=!0,G.expression.kind===79)return G;{let je=A.createUniqueName(\"_default\",16);r=()=>({diagnosticMessage:_.Default_export_of_the_module_has_or_is_using_private_name_0,errorNode:G}),F=G;let Ge=A.createVariableDeclaration(je,void 0,R.createTypeOfExpression(G.expression,G,tE,C),void 0);F=void 0;let kt=A.createVariableStatement(i?[A.createModifier(136)]:[],A.createVariableDeclarationList([Ge],2));return gr(kt,G),ZR(G),[kt,A.updateExportAssignment(G,G.modifiers,je)]}}}let Oe=Ht(G);return v.set(sc(G),Oe),G}function vn(G){if(Nl(G)||cd(G,1024)||!g_(G))return G;let Oe=A.createModifiersFromModifierFlags(uu(G)&258046);return A.updateModifiers(G,Oe)}function Ht(G){if(m)for(;m8(m,G););if(at(G))return;switch(G.kind){case 268:return nn(G);case 269:return Dt(G)}if(Kl(G)&&tn(G)||Ia(G)&&R.isImplementationOfOverload(G))return;let Oe;Ni(G)&&(Oe=d,d=G);let je=xF(G),Ge=r;je&&(r=zg(G));let kt=i;switch(G.kind){case 262:{i=!1;let ln=Kt(A.updateTypeAliasDeclaration(G,nt(G),G.name,On(G.typeParameters,Kn,_c),L.checkDefined($e(G.type,Kn,bi))));return i=kt,ln}case 261:return Kt(A.updateInterfaceDeclaration(G,nt(G),G.name,ui(G,G.typeParameters),ue(G.heritageClauses),On(G.members,Kn,_T)));case 259:{let ln=Kt(A.updateFunctionDeclaration(G,nt(G),void 0,G.name,ui(G,G.typeParameters),Gt(G,G.parameters),Qt(G,G.type),void 0));if(ln&&R.isExpandoFunctionDeclaration(G)&&kn(G)){let ir=R.getPropertiesOfContainerFunction(G),ae=fm.createModuleDeclaration(void 0,ln.name||A.createIdentifier(\"_default\"),A.createModuleBlock([]),16);go(ae,d),ae.locals=Ua(ir),ae.symbol=ir[0].parent;let rt=[],Ot=Zi(ir,j=>{if(!j.valueDeclaration||!br(j.valueDeclaration))return;r=zg(j.valueDeclaration);let yt=R.createTypeOfDeclaration(j.valueDeclaration,ae,tE,C);r=Ge;let lt=Gi(j.escapedName),Qe=fS(lt),Vt=Qe?A.getGeneratedNameForNode(j.valueDeclaration):A.createIdentifier(lt);Qe&&rt.push([Vt,lt]);let Hn=A.createVariableDeclaration(Vt,void 0,yt,void 0);return A.createVariableStatement(Qe?void 0:[A.createToken(93)],A.createVariableDeclarationList([Hn]))});rt.length?Ot.push(A.createExportDeclaration(void 0,!1,A.createNamedExports(on(rt,([j,yt])=>A.createExportSpecifier(!1,j,yt))))):Ot=Zi(Ot,j=>A.updateModifiers(j,0));let Ke=A.createModuleDeclaration(nt(G),G.name,A.createModuleBlock(Ot),16);if(!cd(ln,1024))return[ln,Ke];let oe=A.createModifiersFromModifierFlags(uu(ln)&-1026|2),pe=A.updateFunctionDeclaration(ln,oe,void 0,ln.name,ln.typeParameters,ln.parameters,ln.type,void 0),z=A.updateModuleDeclaration(Ke,oe,Ke.name,Ke.body),Te=A.createExportAssignment(void 0,!1,Ke.name);return Li(G.parent)&&(s=!0),f=!0,[pe,z,Te]}else return ln}case 264:{i=!1;let ln=G.body;if(ln&&ln.kind===265){let ir=l,ae=f;f=!1,l=!1;let rt=On(ln.statements,ri,ca),Ot=An(rt);G.flags&16777216&&(l=!1),!mp(G)&&!ve(Ot)&&!f&&(l?Ot=A.createNodeArray([...Ot,bO(A)]):Ot=On(Ot,vn,ca));let Ke=A.updateModuleBlock(ln,Ot);i=kt,l=ir,f=ae;let oe=nt(G);return Kt(A.updateModuleDeclaration(G,oe,D0(G)?pt(G,G.name):G.name,Ke))}else{i=kt;let ir=nt(G);i=!1,$e(ln,ri);let ae=sc(ln),rt=v.get(ae);return v.delete(ae),Kt(A.updateModuleDeclaration(G,ir,G.name,rt))}}case 260:{P=G.name,F=G;let ln=A.createNodeArray(nt(G)),ir=ui(G,G.typeParameters),ae=Vm(G),rt;if(ae){let Te=r;rt=WD(Uo(ae.parameters,j=>{if(!Mr(j,16476)||at(j))return;if(r=zg(j),j.name.kind===79)return gr(A.createPropertyDeclaration(nt(j),j.name,j.questionToken,Qt(j,j.type),zt(j)),j);return yt(j.name);function yt(lt){let Qe;for(let Vt of lt.elements)ol(Vt)||(La(Vt.name)&&(Qe=Qi(Qe,yt(Vt.name))),Qe=Qe||[],Qe.push(A.createPropertyDeclaration(nt(j),Vt.name,void 0,Qt(Vt,void 0),void 0)));return Qe}})),r=Te}let Ke=vt(G.members,Te=>!!Te.name&&pi(Te.name))?[A.createPropertyDeclaration(void 0,A.createPrivateIdentifier(\"#private\"),void 0,void 0,void 0)]:void 0,oe=Qi(Qi(Ke,rt),On(G.members,Kn,_l)),pe=A.createNodeArray(oe),z=hp(G);if(z&&!bc(z.expression)&&z.expression.kind!==104){let Te=G.name?Gi(G.name.escapedText):\"default\",j=A.createUniqueName(`${Te}_base`,16);r=()=>({diagnosticMessage:_.extends_clause_of_exported_class_0_has_or_is_using_private_name_1,errorNode:z,typeName:G.name});let yt=A.createVariableDeclaration(j,void 0,R.createTypeOfExpression(z.expression,G,tE,C),void 0),lt=A.createVariableStatement(i?[A.createModifier(136)]:[],A.createVariableDeclarationList([yt],2)),Qe=A.createNodeArray(on(G.heritageClauses,Vt=>{if(Vt.token===94){let Hn=r;r=zg(Vt.types[0]);let jr=A.updateHeritageClause(Vt,on(Vt.types,ei=>A.updateExpressionWithTypeArguments(ei,j,On(ei.typeArguments,Kn,bi))));return r=Hn,jr}return A.updateHeritageClause(Vt,On(A.createNodeArray(Pr(Vt.types,Hn=>bc(Hn.expression)||Hn.expression.kind===104)),Kn,Vg))}));return[lt,Kt(A.updateClassDeclaration(G,ln,G.name,ir,Qe,pe))]}else{let Te=ue(G.heritageClauses);return Kt(A.updateClassDeclaration(G,ln,G.name,ir,Te,pe))}}case 240:return Kt(En(G));case 263:return Kt(A.updateEnumDeclaration(G,A.createNodeArray(nt(G)),G.name,A.createNodeArray(Zi(G.members,ln=>{if(at(ln))return;let ir=R.getConstantValue(ln);return gr(A.updateEnumMember(ln,ln.name,ir!==void 0?typeof ir==\"string\"?A.createStringLiteral(ir):A.createNumericLiteral(ir):void 0),ln)}))))}return L.assertNever(G,`Unhandled top-level node in declaration emit: ${L.formatSyntaxKind(G.kind)}`);function Kt(ln){return Ni(G)&&(d=Oe),je&&(r=Ge),G.kind===264&&(i=kt),ln===G?ln:(F=void 0,P=void 0,ln&&Ir(gr(ln,G),G))}}function En(G){if(!mn(G.declarationList.declarations,_n))return;let Oe=On(G.declarationList.declarations,Kn,wi);if(Fn(Oe))return A.updateVariableStatement(G,A.createNodeArray(nt(G)),A.updateVariableDeclarationList(G.declarationList,Oe))}function dr(G){return t_(Zi(G.elements,Oe=>Cr(Oe)))}function Cr(G){if(G.kind!==229&&G.name)return _n(G)?La(G.name)?dr(G.name):A.createVariableDeclaration(G.name,void 0,Qt(G,void 0),void 0):void 0}function Se(G){let Oe;S||(Oe=r,r=Epe(G)),P=G.name,L.assert(R.isLateBound(ea(G)));let Ge=G.name.expression;Pi(Ge,d),S||(r=Oe),P=void 0}function at(G){return!!fe&&!!G&&BK(G,B)}function Tt(G){return pc(G)||Il(G)}function ve(G){return vt(G,Tt)}function nt(G){let Oe=uu(G),je=ce(G);return Oe===je?vK(G.modifiers,Ge=>zr(Ge,Ha),Ha):A.createModifiersFromModifierFlags(je)}function ce(G){let Oe=241147,je=i&&!IMe(G)?2:0,Ge=G.parent.kind===308;return(!Ge||o&&Ge&&Lc(G.parent))&&(Oe^=2,je=0),xpe(G,Oe,je)}function Q(G,Oe){let je=VK(G);return!je&&G!==Oe.firstAccessor&&(je=VK(Oe.firstAccessor),r=zg(Oe.firstAccessor)),!je&&Oe.secondAccessor&&G!==Oe.secondAccessor&&(je=VK(Oe.secondAccessor),r=zg(Oe.secondAccessor)),je}function ue(G){return A.createNodeArray(Pr(on(G,Oe=>A.updateHeritageClause(Oe,On(A.createNodeArray(Pr(Oe.types,je=>bc(je.expression)||Oe.token===94&&je.expression.kind===104)),Kn,Vg))),Oe=>Oe.types&&!!Oe.types.length))}}function IMe(e){return e.kind===261}function LMe(e,t,r){return D.createModifiersFromModifierFlags(xpe(e,t,r))}function xpe(e,t=258043,r=0){let i=uu(e)&t|r;return i&1024&&!(i&1)&&(i^=1),i&1024&&i&2&&(i^=2),i}function VK(e){if(e)return e.kind===174?e.type:e.parameters.length>0?e.parameters[0].type:void 0}function kMe(e){switch(e.kind){case 169:case 168:return!cd(e,8);case 166:case 257:return!0}return!1}function DMe(e){switch(e.kind){case 259:case 264:case 268:case 261:case 260:case 262:case 263:case 240:case 269:case 275:case 274:return!0}return!1}function wMe(e){switch(e.kind){case 177:case 173:case 171:case 174:case 175:case 169:case 168:case 170:case 176:case 178:case 257:case 165:case 230:case 180:case 191:case 181:case 182:case 202:return!0}return!1}var tE,RMe=gt({\"src/compiler/transformers/declarations.ts\"(){\"use strict\";fa(),dK(),tE=531469}});function OMe(e){switch(e){case 99:case 7:case 6:case 5:return GK;case 4:return vpe;case 100:case 199:return bpe;default:return FK}}function jK(e,t,r){return{scriptTransformers:NMe(e,t,r),declarationTransformers:PMe(t)}}function NMe(e,t,r){if(r)return Je;let i=Do(e),o=Rl(e),s=MR(e),l=[];return si(l,t&&on(t.before,Cpe)),l.push(Z_e),e.experimentalDecorators?l.push(rpe):(i<99||!s)&&l.push(ipe),l.push(tpe),AW(e)&&l.push(dpe),i<99&&l.push(upe),i<8&&l.push(lpe),i<7&&l.push(cpe),i<6&&l.push(spe),i<5&&l.push(ope),i<4&&l.push(ape),i<3&&l.push(_pe),i<2&&(l.push(mpe),l.push(gpe)),l.push(OMe(o)),i<1&&l.push(hpe),si(l,t&&on(t.after,Cpe)),l}function PMe(e){let t=[];return t.push(UK),si(t,e&&on(e.afterDeclarations,FMe)),t}function MMe(e){return t=>Bz(t)?e.transformBundle(t):e.transformSourceFile(t)}function Ape(e,t){return r=>{let i=e(r);return typeof i==\"function\"?t(r,i):MMe(i)}}function Cpe(e){return Ape(e,y_)}function FMe(e){return Ape(e,(t,r)=>r)}function zL(e,t){return t}function cN(e,t,r){r(e,t)}function lN(e,t,r,i,o,s,l){var f,d;let g=new Array(361),m,v,S,x=0,A=[],w=[],C=[],P=[],F=0,B=!1,q=[],W=0,Y,R,ie=zL,$=cN,fe=0,Z=[],U={factory:r,getCompilerOptions:()=>i,getEmitResolver:()=>e,getEmitHost:()=>t,getEmitHelperFactory:zu(()=>Tue(U)),startLexicalEnvironment:Le,suspendLexicalEnvironment:Ye,resumeLexicalEnvironment:_t,endLexicalEnvironment:ct,setLexicalEnvironmentFlags:Rt,getLexicalEnvironmentFlags:We,hoistVariableDeclaration:Ie,hoistFunctionDeclaration:Be,addInitializationStatement:Ne,startBlockScope:qe,endBlockScope:zt,addBlockScopedVariable:Qt,requestEmitHelper:tn,readEmitHelpers:kn,enableSubstitution:X,enableEmitNotification:ke,isSubstitutionEnabled:Ve,isEmitNotificationEnabled:Pe,get onSubstituteNode(){return ie},set onSubstituteNode(Gt){L.assert(fe<1,\"Cannot modify transformation hooks after initialization has completed.\"),L.assert(Gt!==void 0,\"Value must not be 'undefined'\"),ie=Gt},get onEmitNode(){return $},set onEmitNode(Gt){L.assert(fe<1,\"Cannot modify transformation hooks after initialization has completed.\"),L.assert(Gt!==void 0,\"Value must not be 'undefined'\"),$=Gt},addDiagnostic(Gt){Z.push(Gt)}};for(let Gt of o)yz(Gn(ea(Gt)));Fs(\"beforeTransform\");let re=s.map(Gt=>Gt(U)),le=Gt=>{for(let $n of re)Gt=$n(Gt);return Gt};fe=1;let _e=[];for(let Gt of o)(f=ai)==null||f.push(ai.Phase.Emit,\"transformNodes\",Gt.kind===308?{path:Gt.path}:{kind:Gt.kind,pos:Gt.pos,end:Gt.end}),_e.push((l?le:ge)(Gt)),(d=ai)==null||d.pop();return fe=2,Fs(\"afterTransform\"),hf(\"transformTime\",\"beforeTransform\",\"afterTransform\"),{transformed:_e,substituteNode:we,emitNodeWithNotification:Ce,isEmitNotificationEnabled:Pe,dispose:_n,diagnostics:Z};function ge(Gt){return Gt&&(!Li(Gt)||!Gt.isDeclarationFile)?le(Gt):Gt}function X(Gt){L.assert(fe<2,\"Cannot modify the transformation context after transformation has completed.\"),g[Gt]|=1}function Ve(Gt){return(g[Gt.kind]&1)!==0&&(Ya(Gt)&8)===0}function we(Gt,$n){return L.assert(fe<3,\"Cannot substitute a node after the result is disposed.\"),$n&&Ve($n)&&ie(Gt,$n)||$n}function ke(Gt){L.assert(fe<2,\"Cannot modify the transformation context after transformation has completed.\"),g[Gt]|=2}function Pe(Gt){return(g[Gt.kind]&2)!==0||(Ya(Gt)&4)!==0}function Ce(Gt,$n,ui){L.assert(fe<3,\"Cannot invoke TransformationResult callbacks after the result is disposed.\"),$n&&(Pe($n)?$(Gt,$n,ui):ui(Gt,$n))}function Ie(Gt){L.assert(fe>0,\"Cannot modify the lexical environment during initialization.\"),L.assert(fe<2,\"Cannot modify the lexical environment after transformation has completed.\");let $n=Jn(r.createVariableDeclaration(Gt),128);m?m.push($n):m=[$n],x&1&&(x|=2)}function Be(Gt){L.assert(fe>0,\"Cannot modify the lexical environment during initialization.\"),L.assert(fe<2,\"Cannot modify the lexical environment after transformation has completed.\"),Jn(Gt,2097152),v?v.push(Gt):v=[Gt]}function Ne(Gt){L.assert(fe>0,\"Cannot modify the lexical environment during initialization.\"),L.assert(fe<2,\"Cannot modify the lexical environment after transformation has completed.\"),Jn(Gt,2097152),S?S.push(Gt):S=[Gt]}function Le(){L.assert(fe>0,\"Cannot modify the lexical environment during initialization.\"),L.assert(fe<2,\"Cannot modify the lexical environment after transformation has completed.\"),L.assert(!B,\"Lexical environment is suspended.\"),A[F]=m,w[F]=v,C[F]=S,P[F]=x,F++,m=void 0,v=void 0,S=void 0,x=0}function Ye(){L.assert(fe>0,\"Cannot modify the lexical environment during initialization.\"),L.assert(fe<2,\"Cannot modify the lexical environment after transformation has completed.\"),L.assert(!B,\"Lexical environment is already suspended.\"),B=!0}function _t(){L.assert(fe>0,\"Cannot modify the lexical environment during initialization.\"),L.assert(fe<2,\"Cannot modify the lexical environment after transformation has completed.\"),L.assert(B,\"Lexical environment is not suspended.\"),B=!1}function ct(){L.assert(fe>0,\"Cannot modify the lexical environment during initialization.\"),L.assert(fe<2,\"Cannot modify the lexical environment after transformation has completed.\"),L.assert(!B,\"Lexical environment is suspended.\");let Gt;if(m||v||S){if(v&&(Gt=[...v]),m){let $n=r.createVariableStatement(void 0,r.createVariableDeclarationList(m));Jn($n,2097152),Gt?Gt.push($n):Gt=[$n]}S&&(Gt?Gt=[...Gt,...S]:Gt=[...S])}return F--,m=A[F],v=w[F],S=C[F],x=P[F],F===0&&(A=[],w=[],C=[],P=[]),Gt}function Rt(Gt,$n){x=$n?x|Gt:x&~Gt}function We(){return x}function qe(){L.assert(fe>0,\"Cannot start a block scope during initialization.\"),L.assert(fe<2,\"Cannot start a block scope after transformation has completed.\"),q[W]=Y,W++,Y=void 0}function zt(){L.assert(fe>0,\"Cannot end a block scope during initialization.\"),L.assert(fe<2,\"Cannot end a block scope after transformation has completed.\");let Gt=vt(Y)?[r.createVariableStatement(void 0,r.createVariableDeclarationList(Y.map($n=>r.createVariableDeclaration($n)),1))]:void 0;return W--,Y=q[W],W===0&&(q=[]),Gt}function Qt(Gt){L.assert(W>0,\"Cannot add a block scoped variable outside of an iteration body.\"),(Y||(Y=[])).push(Gt)}function tn(Gt){if(L.assert(fe>0,\"Cannot modify the transformation context during initialization.\"),L.assert(fe<2,\"Cannot modify the transformation context after transformation has completed.\"),L.assert(!Gt.scoped,\"Cannot request a scoped emit helper.\"),Gt.dependencies)for(let $n of Gt.dependencies)tn($n);R=Sn(R,Gt)}function kn(){L.assert(fe>0,\"Cannot modify the transformation context during initialization.\"),L.assert(fe<2,\"Cannot modify the transformation context after transformation has completed.\");let Gt=R;return R=void 0,Gt}function _n(){if(fe<3){for(let Gt of o)yz(Gn(ea(Gt)));m=void 0,A=void 0,v=void 0,w=void 0,ie=void 0,$=void 0,R=void 0,fe=3}}}var HK,Bh,GMe=gt({\"src/compiler/transformer.ts\"(){\"use strict\";fa(),E0(),HK={scriptTransformers:Je,declarationTransformers:Je},Bh={factory:D,getCompilerOptions:()=>({}),getEmitResolver:Sa,getEmitHost:Sa,getEmitHelperFactory:Sa,startLexicalEnvironment:Ba,resumeLexicalEnvironment:Ba,suspendLexicalEnvironment:Ba,endLexicalEnvironment:Qv,setLexicalEnvironmentFlags:Ba,getLexicalEnvironmentFlags:()=>0,hoistVariableDeclaration:Ba,hoistFunctionDeclaration:Ba,addInitializationStatement:Ba,startBlockScope:Ba,endBlockScope:Qv,addBlockScopedVariable:Ba,requestEmitHelper:Ba,readEmitHelpers:Sa,enableSubstitution:Ba,enableEmitNotification:Ba,isSubstitutionEnabled:Sa,isEmitNotificationEnabled:Sa,onSubstituteNode:zL,onEmitNode:cN,addDiagnostic:Ba}}});function Ipe(e){return Gc(e,\".tsbuildinfo\")}function WK(e,t,r,i=!1,o,s){let l=ba(r)?r:eW(e,r,i),f=e.getCompilerOptions();if(Ss(f)){let d=e.getPrependNodes();if(l.length||d.length){let g=D.createBundle(l,d),m=t(KL(g,e,i),g);if(m)return m}}else{if(!o)for(let d of l){let g=t(KL(d,e,i),d);if(g)return g}if(s){let d=Jg(f);if(d)return t({buildInfoPath:d},void 0)}}}function Jg(e){let t=e.configFilePath;if(!NR(e))return;if(e.tsBuildInfoFile)return e.tsBuildInfoFile;let r=Ss(e),i;if(r)i=ld(r);else{if(!t)return;let o=ld(t);i=e.outDir?e.rootDir?Fy(e.outDir,Xp(e.rootDir,o,!0)):vi(e.outDir,Hl(o)):o}return i+\".tsbuildinfo\"}function JL(e,t){let r=Ss(e),i=e.emitDeclarationOnly?void 0:r,o=i&&Lpe(i,e),s=t||__(e)?ld(r)+\".d.ts\":void 0,l=s&&d4(e)?s+\".map\":void 0,f=Jg(e);return{jsFilePath:i,sourceMapFilePath:o,declarationFilePath:s,declarationMapPath:l,buildInfoPath:f}}function KL(e,t,r){let i=t.getCompilerOptions();if(e.kind===309)return JL(i,r);{let o=wce(e.fileName,t,zK(e.fileName,i)),s=Mf(e),l=s&&cT(e.fileName,o,t.getCurrentDirectory(),!t.useCaseSensitiveFileNames())===0,f=i.emitDeclarationOnly||l?void 0:o,d=!f||Mf(e)?void 0:Lpe(f,i),g=r||__(i)&&!s?Rce(e.fileName,t):void 0,m=g&&d4(i)?g+\".map\":void 0;return{jsFilePath:f,sourceMapFilePath:d,declarationFilePath:g,declarationMapPath:m,buildInfoPath:void 0}}}function Lpe(e,t){return t.sourceMap&&!t.inlineSourceMap?e+\".map\":void 0}function zK(e,t){return Gc(e,\".json\")?\".json\":t.jsx===1&&$c(e,[\".jsx\",\".tsx\"])?\".jsx\":$c(e,[\".mts\",\".mjs\"])?\".mjs\":$c(e,[\".cts\",\".cjs\"])?\".cjs\":\".js\"}function kpe(e,t,r,i,o){return i?Fy(i,Xp(o?o():XL(t,r),e,r)):e}function qL(e,t,r,i){return V0(kpe(e,t,r,t.options.declarationDir||t.options.outDir,i),QH(e))}function Dpe(e,t,r,i){if(t.options.emitDeclarationOnly)return;let o=Gc(e,\".json\"),s=V0(kpe(e,t,r,t.options.outDir,i),zK(e,t.options));return!o||cT(e,s,L.checkDefined(t.options.configFilePath),r)!==0?s:void 0}function wpe(){let e;return{addOutput:t,getOutputs:r};function t(i){i&&(e||(e=[])).push(i)}function r(){return e||Je}}function Rpe(e,t){let{jsFilePath:r,sourceMapFilePath:i,declarationFilePath:o,declarationMapPath:s,buildInfoPath:l}=JL(e.options,!1);t(r),t(i),t(o),t(s),t(l)}function Ope(e,t,r,i,o){if(Fu(t))return;let s=Dpe(t,e,r,o);if(i(s),!Gc(t,\".json\")&&(s&&e.options.sourceMap&&i(`${s}.map`),__(e.options))){let l=qL(t,e,r,o);i(l),e.options.declarationMap&&i(`${l}.map`)}}function uN(e,t,r,i,o){let s;return e.rootDir?(s=_a(e.rootDir,r),o?.(e.rootDir)):e.composite&&e.configFilePath?(s=ni(Al(e.configFilePath)),o?.(s)):s=jpe(t(),r,i),s&&s[s.length-1]!==_s&&(s+=_s),s}function XL({options:e,fileNames:t},r){return uN(e,()=>Pr(t,i=>!(e.noEmitForJsFiles&&$c(i,dL))&&!Fu(i)),ni(Al(L.checkDefined(e.configFilePath))),Dl(!r))}function AF(e,t){let{addOutput:r,getOutputs:i}=wpe();if(Ss(e.options))Rpe(e,r);else{let o=zu(()=>XL(e,t));for(let s of e.fileNames)Ope(e,s,t,r,o);r(Jg(e.options))}return i()}function BMe(e,t,r){t=So(t),L.assert(ya(e.fileNames,t),\"Expected fileName to be present in command line\");let{addOutput:i,getOutputs:o}=wpe();return Ss(e.options)?Rpe(e,i):Ope(e,t,r,i),o()}function JK(e,t){if(Ss(e.options)){let{jsFilePath:o,declarationFilePath:s}=JL(e.options,!1);return L.checkDefined(o||s,`project ${e.options.configFilePath} expected to have at least one output`)}let r=zu(()=>XL(e,t));for(let o of e.fileNames){if(Fu(o))continue;let s=Dpe(o,e,t,r);if(s)return s;if(!Gc(o,\".json\")&&__(e.options))return qL(o,e,t,r)}let i=Jg(e.options);return i||L.fail(`project ${e.options.configFilePath} expected to have at least one output`)}function CF(e,t,r,{scriptTransformers:i,declarationTransformers:o},s,l,f){var d=t.getCompilerOptions(),g=d.sourceMap||d.inlineSourceMap||d4(d)?[]:void 0,m=d.listEmittedFiles?[]:void 0,v=XA(),S=db(d),x=SR(S),{enter:A,exit:w}=x8(\"printTime\",\"beforePrint\",\"afterPrint\"),C,P=!1;return A(),WK(t,F,eW(t,r,f),f,l,!r),w(),{emitSkipped:P,diagnostics:v.getDiagnostics(),emittedFiles:m,sourceMaps:g};function F({jsFilePath:U,sourceMapFilePath:re,declarationFilePath:le,declarationMapPath:_e,buildInfoPath:ge},X){var Ve,we,ke,Pe,Ce,Ie;let Be;ge&&X&&Bz(X)&&(Be=ni(_a(ge,t.getCurrentDirectory())),C={commonSourceDirectory:Ne(t.getCommonSourceDirectory()),sourceFiles:X.sourceFiles.map(Le=>Ne(_a(Le.fileName,t.getCurrentDirectory())))}),(Ve=ai)==null||Ve.push(ai.Phase.Emit,\"emitJsFileOrBundle\",{jsFilePath:U}),q(X,U,re,Ne),(we=ai)==null||we.pop(),(ke=ai)==null||ke.push(ai.Phase.Emit,\"emitDeclarationFileOrBundle\",{declarationFilePath:le}),W(X,le,_e,Ne),(Pe=ai)==null||Pe.pop(),(Ce=ai)==null||Ce.push(ai.Phase.Emit,\"emitBuildInfo\",{buildInfoPath:ge}),B(C,ge),(Ie=ai)==null||Ie.pop(),!P&&m&&(s||(U&&m.push(U),re&&m.push(re),ge&&m.push(ge)),s!==0&&(le&&m.push(le),_e&&m.push(_e)));function Ne(Le){return S0(Xp(Be,Le,t.getCanonicalFileName))}}function B(U,re){if(!re||r||P)return;if(t.isEmitBlocked(re)){P=!0;return}let le=t.getBuildInfo(U)||dN(void 0,U);BI(t,v,re,Npe(le),!1,void 0,{buildInfo:le})}function q(U,re,le,_e){if(!U||s||!re)return;if(t.isEmitBlocked(re)||d.noEmit){P=!0;return}let ge=lN(e,t,D,d,[U],i,!1),X={removeComments:d.removeComments,newLine:d.newLine,noEmitHelpers:d.noEmitHelpers,module:d.module,target:d.target,sourceMap:d.sourceMap,inlineSourceMap:d.inlineSourceMap,inlineSources:d.inlineSources,extendedDiagnostics:d.extendedDiagnostics,writeBundleFileInfo:!!C,relativeToBuildInfo:_e},Ve=nE(X,{hasGlobalName:e.hasGlobalName,onEmitNode:ge.emitNodeWithNotification,isEmitNotificationEnabled:ge.isEmitNotificationEnabled,substituteNode:ge.substituteNode});L.assert(ge.transformed.length===1,\"Should only see one output from the transform\"),R(re,le,ge,Ve,d),ge.dispose(),C&&(C.js=Ve.bundleFileInfo)}function W(U,re,le,_e){if(!U||s===0)return;if(!re){(s||d.emitDeclarationOnly)&&(P=!0);return}let ge=Li(U)?[U]:U.sourceFiles,X=f?ge:Pr(ge,LH),Ve=Ss(d)?[D.createBundle(X,Li(U)?void 0:U.prepends)]:X;s&&!__(d)&&X.forEach(Y);let we=lN(e,t,D,d,Ve,o,!1);if(Fn(we.diagnostics))for(let Ie of we.diagnostics)v.add(Ie);let ke={removeComments:d.removeComments,newLine:d.newLine,noEmitHelpers:!0,module:d.module,target:d.target,sourceMap:!f&&d.declarationMap,inlineSourceMap:d.inlineSourceMap,extendedDiagnostics:d.extendedDiagnostics,onlyPrintJsDocStyle:!0,writeBundleFileInfo:!!C,recordInternalSection:!!C,relativeToBuildInfo:_e},Pe=nE(ke,{hasGlobalName:e.hasGlobalName,onEmitNode:we.emitNodeWithNotification,isEmitNotificationEnabled:we.isEmitNotificationEnabled,substituteNode:we.substituteNode}),Ce=!!we.diagnostics&&!!we.diagnostics.length||!!t.isEmitBlocked(re)||!!d.noEmit;P=P||Ce,(!Ce||f)&&(L.assert(we.transformed.length===1,\"Should only see one output from the decl transform\"),R(re,le,we,Pe,{sourceMap:ke.sourceMap,sourceRoot:d.sourceRoot,mapRoot:d.mapRoot,extendedDiagnostics:d.extendedDiagnostics})),we.dispose(),C&&(C.dts=Pe.bundleFileInfo)}function Y(U){if(pc(U)){U.expression.kind===79&&e.collectLinkedAliases(U.expression,!0);return}else if(Mu(U)){e.collectLinkedAliases(U.propertyName||U.name,!0);return}pa(U,Y)}function R(U,re,le,_e,ge){let X=le.transformed[0],Ve=X.kind===309?X:void 0,we=X.kind===308?X:void 0,ke=Ve?Ve.sourceFiles:[we],Pe;ie(ge,X)&&(Pe=M_e(t,Hl(Al(U)),$(ge),fe(ge,U,we),ge)),Ve?_e.writeBundle(Ve,x,Pe):_e.writeFile(we,x,Pe);let Ce;if(Pe){g&&g.push({inputSourceFileNames:Pe.getSources(),sourceMap:Pe.toJSON()});let Be=Z(ge,Pe,U,re,we);if(Be&&(x.isAtStartOfLine()||x.rawWrite(S),Ce=x.getTextPos(),x.writeComment(`//# sourceMappingURL=${Be}`)),re){let Ne=Pe.toString();BI(t,v,re,Ne,!1,ke),_e.bundleFileInfo&&(_e.bundleFileInfo.mapHash=YT(Ne,t))}}else x.writeLine();let Ie=x.getText();BI(t,v,U,Ie,!!d.emitBOM,ke,{sourceMapUrlPos:Ce,diagnostics:le.diagnostics}),_e.bundleFileInfo&&(_e.bundleFileInfo.hash=YT(Ie,t)),x.clear()}function ie(U,re){return(U.sourceMap||U.inlineSourceMap)&&(re.kind!==308||!Gc(re.fileName,\".json\"))}function $(U){let re=Al(U.sourceRoot||\"\");return re&&cu(re)}function fe(U,re,le){if(U.sourceRoot)return t.getCommonSourceDirectory();if(U.mapRoot){let _e=Al(U.mapRoot);return le&&(_e=ni(e4(le.fileName,t,_e))),_p(_e)===0&&(_e=vi(t.getCommonSourceDirectory(),_e)),_e}return ni(So(re))}function Z(U,re,le,_e,ge){if(U.inlineSourceMap){let Ve=re.toString();return`data:application/json;base64,${tle(xl,Ve)}`}let X=Hl(Al(L.checkDefined(_e)));if(U.mapRoot){let Ve=Al(U.mapRoot);return ge&&(Ve=ni(e4(ge.fileName,t,Ve))),_p(Ve)===0?(Ve=vi(t.getCommonSourceDirectory(),Ve),encodeURI(Q1(ni(So(le)),vi(Ve,X),t.getCurrentDirectory(),t.getCanonicalFileName,!0))):encodeURI(vi(Ve,X))}return encodeURI(X)}}function dN(e,t){return{bundle:t,program:e,version:Rf}}function Npe(e){return JSON.stringify(e)}function IF(e,t){return fW(e,t)}function UMe(e,t,r){var i;let o=L.checkDefined(e.js),s=((i=o.sources)==null?void 0:i.prologues)&&p0(o.sources.prologues,l=>l.file);return e.sourceFiles.map((l,f)=>{var d,g;let m=s?.get(f),v=m?.directives.map(A=>{let w=it(D.createStringLiteral(A.expression.text),A.expression),C=it(D.createExpressionStatement(w),A);return go(w,C),C}),S=D.createToken(1),x=D.createSourceFile(v??[],S,0);return x.fileName=Xp(r.getCurrentDirectory(),_a(l,t),!r.useCaseSensitiveFileNames()),x.text=(d=m?.text)!=null?d:\"\",oL(x,0,(g=m?.text.length)!=null?g:0),i2(x.statements,x),oL(S,x.end,0),go(S,x),x})}function Ppe(e,t,r,i){var o,s;(o=ai)==null||o.push(ai.Phase.Emit,\"emitUsingBuildInfo\",{},!0),ZD.mark(\"beforeEmit\");let l=VMe(e,t,r,i);return ZD.mark(\"afterEmit\"),ZD.measure(\"Emit\",\"beforeEmit\",\"afterEmit\"),(s=ai)==null||s.pop(),l}function VMe(e,t,r,i){let{buildInfoPath:o,jsFilePath:s,sourceMapFilePath:l,declarationFilePath:f,declarationMapPath:d}=JL(e.options,!1),g=t.getBuildInfo(o,e.options.configFilePath);if(!g||!g.bundle||!g.bundle.js||f&&!g.bundle.dts)return o;let m=t.readFile(L.checkDefined(s));if(!m||YT(m,t)!==g.bundle.js.hash)return s;let v=l&&t.readFile(l);if(l&&!v||e.options.inlineSourceMap)return l||\"inline sourcemap decoding\";if(l&&YT(v,t)!==g.bundle.js.mapHash)return l;let S=f&&t.readFile(f);if(f&&!S||f&&YT(S,t)!==g.bundle.dts.hash)return f;let x=d&&t.readFile(d);if(d&&!x||e.options.inlineSourceMap)return d||\"inline sourcemap decoding\";if(d&&YT(x,t)!==g.bundle.dts.mapHash)return d;let A=ni(_a(o,t.getCurrentDirectory())),w=pz(s,m,l,v,f,S,d,x,o,g,!0),C=[],P=fq(e.projectReferences,r,Y=>t.readFile(Y),t),F=UMe(g.bundle,A,t),B,q,W={getPrependNodes:zu(()=>[...P,w]),getCanonicalFileName:t.getCanonicalFileName,getCommonSourceDirectory:()=>_a(g.bundle.commonSourceDirectory,A),getCompilerOptions:()=>e.options,getCurrentDirectory:()=>t.getCurrentDirectory(),getSourceFile:Qv,getSourceFileByPath:Qv,getSourceFiles:()=>F,getLibFileFromReference:Sa,isSourceFileFromExternalLibrary:m0,getResolvedProjectReferenceToRedirect:Qv,getProjectReferenceRedirect:Qv,isSourceOfProjectReferenceRedirect:m0,writeFile:(Y,R,ie,$,fe,Z)=>{switch(Y){case s:if(m===R)return;break;case l:if(v===R)return;break;case o:break;case f:if(S===R)return;B=R,q=Z;break;case d:if(x===R)return;break;default:L.fail(`Unexpected path: ${Y}`)}C.push({name:Y,text:R,writeByteOrderMark:ie,data:Z})},isEmitBlocked:m0,readFile:Y=>t.readFile(Y),fileExists:Y=>t.fileExists(Y),useCaseSensitiveFileNames:()=>t.useCaseSensitiveFileNames(),getBuildInfo:Y=>{let R=g.program;R&&B!==void 0&&e.options.composite&&(R.outSignature=YT(B,t,q));let{js:ie,dts:$,sourceFiles:fe}=g.bundle;return Y.js.sources=ie.sources,$&&(Y.dts.sources=$.sources),Y.sourceFiles=fe,dN(R,Y)},getSourceFileFromReference:Qv,redirectTargetsMap:Nf(),getFileIncludeReasons:Sa,createHash:ho(t,t.createHash)};return CF(LF,W,void 0,jK(e.options,i)),C}function nE(e={},t={}){var{hasGlobalName:r,onEmitNode:i=cN,isEmitNotificationEnabled:o,substituteNode:s=zL,onBeforeEmitNode:l,onAfterEmitNode:f,onBeforeEmitNodeArray:d,onAfterEmitNodeArray:g,onBeforeEmitToken:m,onAfterEmitToken:v}=t,S=!!e.extendedDiagnostics,x=db(e),A=Rl(e),w=new Map,C,P,F,B,q,W,Y,R,ie,$,fe,Z,U,re,le,_e=e.preserveSourceNewlines,ge,X,Ve,we=uC,ke,Pe=e.writeBundleFileInfo?{sections:[]}:void 0,Ce=Pe?L.checkDefined(e.relativeToBuildInfo):void 0,Ie=e.recordInternalSection,Be=0,Ne=\"text\",Le=!0,Ye,_t,ct=-1,Rt,We=-1,qe=-1,zt=-1,Qt=-1,tn,kn,_n=!1,Gt=!!e.removeComments,$n,ui,{enter:Ni,exit:Pi}=Zae(S,\"commentTime\",\"beforeComment\",\"afterComment\"),gr=D.parenthesizer,pt={select:E=>E===0?gr.parenthesizeLeadingTypeArgument:void 0},nn=Dc();return Oe(),{printNode:Dt,printList:pn,printFile:Kn,printBundle:An,writeNode:ri,writeList:vn,writeFile:ve,writeBundle:at,bundleFileInfo:Pe};function Dt(E,ne,Ee){switch(E){case 0:L.assert(Li(ne),\"Expected a SourceFile node.\");break;case 2:L.assert(Re(ne),\"Expected an Identifier node.\");break;case 1:L.assert(ot(ne),\"Expected an Expression node.\");break}switch(ne.kind){case 308:return Kn(ne);case 309:return An(ne);case 310:return hi(ne)}return ri(E,ne,Ee,nt()),ce()}function pn(E,ne,Ee){return vn(E,ne,Ee,nt()),ce()}function An(E){return at(E,nt(),void 0),ce()}function Kn(E){return ve(E,nt(),void 0),ce()}function hi(E){return Tt(E,nt()),ce()}function ri(E,ne,Ee,Wt){let lr=X;G(Wt,void 0),Q(E,ne,Ee),Oe(),X=lr}function vn(E,ne,Ee,Wt){let lr=X;G(Wt,void 0),Ee&&ue(Ee),cs(void 0,ne,E),Oe(),X=lr}function Ht(){return X.getTextPosWithWriteLine?X.getTextPosWithWriteLine():X.getTextPos()}function En(E,ne,Ee){let Wt=Os(Pe.sections);Wt&&Wt.kind===Ee?Wt.end=ne:Pe.sections.push({pos:E,end:ne,kind:Ee})}function dr(E){if(Ie&&Pe&&C&&(Kl(E)||Bc(E))&&BK(E,C)&&Ne!==\"internal\"){let ne=Ne;return Se(X.getTextPos()),Be=Ht(),Ne=\"internal\",ne}}function Cr(E){E&&(Se(X.getTextPos()),Be=Ht(),Ne=E)}function Se(E){return Be<E?(En(Be,E,Ne),!0):!1}function at(E,ne,Ee){ke=!1;let Wt=X;G(ne,Ee),Bb(E),T1(E),Vt(E),v1(E);for(let lr of E.prepends){nl();let ci=X.getTextPos(),qr=Pe&&Pe.sections;if(qr&&(Pe.sections=[]),Q(4,lr,void 0),Pe){let Ti=Pe.sections;Pe.sections=qr,lr.oldFileOfCurrentEmit?Pe.sections.push(...Ti):(Ti.forEach(Wa=>L.assert(dle(Wa))),Pe.sections.push({pos:ci,end:X.getTextPos(),kind:\"prepend\",data:Ce(lr.fileName),texts:Ti}))}}Be=Ht();for(let lr of E.sourceFiles)Q(0,lr,lr);if(Pe&&E.sourceFiles.length){let lr=X.getTextPos();if(Se(lr)){let ci=xx(E);ci&&(Pe.sources||(Pe.sources={}),Pe.sources.prologues=ci);let qr=Qe(E);qr&&(Pe.sources||(Pe.sources={}),Pe.sources.helpers=qr)}}Oe(),X=Wt}function Tt(E,ne){let Ee=X;G(ne,void 0),Q(4,E,void 0),Oe(),X=Ee}function ve(E,ne,Ee){ke=!0;let Wt=X;G(ne,Ee),Bb(E),T1(E),Q(0,E,E),Oe(),X=Wt}function nt(){return Ve||(Ve=SR(x))}function ce(){let E=Ve.getText();return Ve.clear(),E}function Q(E,ne,Ee){Ee&&ue(Ee),rt(E,ne,void 0)}function ue(E){C=E,tn=void 0,kn=void 0,E&&sg(E)}function G(E,ne){E&&e.omitTrailingSemicolon&&(E=XH(E)),X=E,Ye=ne,Le=!X||!Ye}function Oe(){P=[],F=[],B=[],q=new Set,W=[],Y=new Map,R=[],ie=0,$=[],fe=0,Z=[],U=void 0,re=[],le=void 0,C=void 0,tn=void 0,kn=void 0,G(void 0,void 0)}function je(){return tn||(tn=Sh(L.checkDefined(C)))}function Ge(E,ne){if(E===void 0)return;let Ee=dr(E);rt(4,E,ne),Cr(Ee)}function kt(E){E!==void 0&&rt(2,E,void 0)}function Kt(E,ne){E!==void 0&&rt(1,E,ne)}function ln(E){rt(yo(E)?6:4,E)}function ir(E){_e&&o_(E)&4&&(_e=!1)}function ae(E){_e=E}function rt(E,ne,Ee){ui=Ee,oe(0,E,ne)(E,ne),ui=void 0}function Ot(E){return!Gt&&!Li(E)}function Ke(E){return!Le&&!Li(E)&&!B6(E)&&!BT(E)&&!Wue(E)}function oe(E,ne,Ee){switch(E){case 0:if(i!==cN&&(!o||o(Ee)))return z;case 1:if(s!==zL&&($n=s(ne,Ee)||Ee)!==Ee)return ui&&($n=ui($n)),lt;case 2:if(Ot(Ee))return vd;case 3:if(Ke(Ee))return OE;case 4:return Te;default:return L.assertNever(E)}}function pe(E,ne,Ee){return oe(E+1,ne,Ee)}function z(E,ne){let Ee=pe(0,E,ne);i(E,ne,Ee)}function Te(E,ne){if(l?.(ne),_e){let Ee=_e;ir(ne),j(E,ne),ae(Ee)}else j(E,ne);f?.(ne),ui=void 0}function j(E,ne,Ee=!0){if(Ee){let Wt=bz(ne);if(Wt)return Fa(E,ne,Wt)}if(E===0)return Fb(Ga(ne,Li));if(E===2)return Nr(Ga(ne,Re));if(E===6)return ei(Ga(ne,yo),!0);if(E===3)return yt(Ga(ne,_c));if(E===5)return L.assertNode(ne,Pz),oa(!0);if(E===4){switch(ne.kind){case 15:case 16:case 17:return ei(ne,!1);case 79:return Nr(ne);case 80:return Fo(ne);case 163:return Qr(ne);case 164:return gn(ne);case 165:return Ki(ne);case 166:return kc(ne);case 167:return Ps(ne);case 168:return mc(ne);case 169:return xc(ne);case 170:return hc(ne);case 171:return ro(ne);case 172:return aa(ne);case 173:return Co(ne);case 174:case 175:return gc(ne);case 176:return Ll(ne);case 177:return md(ne);case 178:return Pc(ne);case 179:return qs(ne);case 180:return Rs(ne);case 181:return As(ne);case 182:return se(ne);case 183:return ht(ne);case 184:return wt(ne);case 185:return K(ne);case 186:return ft(ne);case 187:return pr(ne);case 189:return yr(ne);case 190:return ta(ne);case 191:return Go(ne);case 192:return Ka(ne);case 193:return vo(ne);case 230:return Jf(ne);case 194:return ka();case 195:return Hs(ne);case 196:return Uc(ne);case 197:return Gu(ne);case 198:return $o(ne);case 199:return Yt(ne);case 200:return jo(ne);case 201:return bl(ne);case 202:return Ws(ne);case 203:return hd(ne);case 204:return vc(ne);case 205:return nf(ne);case 236:return He(ne);case 237:return ss();case 238:return Nt(ne);case 240:return la(ne);case 239:return oa(!1);case 241:return be(ne);case 242:return De(ne);case 243:return St(ne);case 244:return Zt(ne);case 245:return rn(ne);case 246:return sn(ne);case 247:return Dn(ne);case 248:return ki(ne);case 249:return Vn(ne);case 250:return mm(ne);case 251:return Hh(ne);case 252:return T_(ne);case 253:return Cb(ne);case 254:return mv(ne);case 255:return gx(ne);case 256:return _1(ne);case 257:return yx(ne);case 258:return Wh(ne);case 259:return S_(ne);case 260:return p1(ne);case 261:return dE(ne);case 262:return fE(ne);case 263:return yv(ne);case 264:return vx(ne);case 265:return _E(ne);case 266:return pE(ne);case 267:return x_(ne);case 268:return vv(ne);case 269:return bv(ne);case 270:return m1(ne);case 271:return Jh(ne);case 277:return Zu(ne);case 272:return Lo(ne);case 273:return mE(ne);case 274:return sC(ne);case 275:return Zg(ne);case 276:return ed(ne);case 278:return td(ne);case 296:return Kh(ne);case 297:return hm(ne);case 279:return;case 280:return bx(ne);case 11:return Ob(ne);case 283:case 286:return h1(ne);case 284:case 287:return cC(ne);case 288:return Ev(ne);case 289:return Ex(ne);case 290:return hE(ne);case 291:return Tv(ne);case 292:return Sv(ne);case 293:return Xh(ne);case 294:return wo(ne);case 295:return A_(ne);case 299:return gE(ne);case 300:return Kc(ne);case 301:return th(ne);case 302:return Pb(ne);case 303:return Si(ne);case 310:case 304:return Kr(ne);case 305:case 306:return Ja(ne);case 307:return Za(ne);case 308:return Fb(ne);case 309:return L.fail(\"Bundles should be printed using printBundle\");case 311:return L.fail(\"InputFiles should not be printed\");case 312:return zs(ne);case 313:return Yh(ne);case 315:return Qn(\"*\");case 316:return Qn(\"?\");case 317:return yc(ne);case 318:return Ql(ne);case 319:return yu(ne);case 320:return jt(ne);case 188:case 321:return Xe(ne);case 322:return;case 323:return C_(ne);case 325:return yd(ne);case 326:return yE(ne);case 330:case 335:case 340:return gm(ne);case 331:case 332:return ll(ne);case 333:case 334:return;case 336:case 337:case 338:case 339:return;case 341:return Ai(ne);case 342:return Rr(ne);case 344:case 351:return $h(ne);case 343:case 345:case 346:case 347:case 352:case 353:return Mb(ne);case 348:return y1(ne);case 349:return lC(ne);case 350:return Ml(ne);case 355:case 359:case 358:return}if(ot(ne)&&(E=1,s!==zL)){let Wt=s(E,ne)||ne;Wt!==ne&&(ne=Wt,ui&&(ne=ui(ne)))}}if(E===1)switch(ne.kind){case 8:case 9:return jr(ne);case 10:case 13:case 14:return ei(ne,!1);case 79:return Nr(ne);case 80:return Fo(ne);case 206:return ye(ne);case 207:return Et(ne);case 208:return bn(ne);case 209:return io(ne);case 210:return ee(ne);case 211:return Ze(ne);case 212:return At(ne);case 213:return xt(ne);case 214:return qt(ne);case 215:return Ln(ne);case 216:return mr(ne);case 217:return gi(ne);case 218:return Ea(ne);case 219:return bo(ne);case 220:return Qo(ne);case 221:return Cs(ne);case 222:return Pd(ne);case 223:return nn(ne);case 224:return gd(ne);case 225:return Zl(ne);case 226:return Md(ne);case 227:return zf(ne);case 228:return Io(ne);case 229:return;case 231:return Fd(ne);case 232:return E_(ne);case 230:return Jf(ne);case 235:return Y_(ne);case 233:return M(ne);case 234:return L.fail(\"SyntheticExpression should never be printed.\");case 279:return;case 281:return wb(ne);case 282:return qh(ne);case 285:return Rb(ne);case 354:return L.fail(\"SyntaxList should not be printed\");case 355:return;case 356:return Tx(ne);case 357:return Sx(ne);case 358:case 359:return;case 360:return L.fail(\"SyntheticReferenceExpression should not be printed\")}if(Xu(ne.kind))return EE(ne,zi);if(Nj(ne.kind))return EE(ne,Qn);L.fail(`Unhandled SyntaxKind: ${L.formatSyntaxKind(ne.kind)}.`)}function yt(E){Ge(E.name),Wn(),zi(\"in\"),Wn(),Ge(E.constraint)}function lt(E,ne){let Ee=pe(1,E,ne);L.assertIsDefined($n),ne=$n,$n=void 0,Ee(E,ne)}function Qe(E){let ne;if(A===0||e.noEmitHelpers)return;let Ee=new Map;for(let Wt of E.sourceFiles){let lr=SO(Wt)!==void 0,ci=Hn(Wt);if(ci)for(let qr of ci)!qr.scoped&&!lr&&!Ee.get(qr.name)&&(Ee.set(qr.name,!0),(ne||(ne=[])).push(qr.name))}return ne}function Vt(E){let ne=!1,Ee=E.kind===309?E:void 0;if(Ee&&A===0)return;let Wt=Ee?Ee.prepends.length:0,lr=Ee?Ee.sourceFiles.length+Wt:1;for(let ci=0;ci<lr;ci++){let qr=Ee?ci<Wt?Ee.prepends[ci]:Ee.sourceFiles[ci-Wt]:E,Ti=Li(qr)?qr:BT(qr)?void 0:C,Wa=e.noEmitHelpers||!!Ti&&ide(Ti),kl=(Li(qr)||BT(qr))&&!ke,Ed=BT(qr)?qr.helpers:Hn(qr);if(Ed)for(let Ud of Ed){if(Ud.scoped){if(Ee)continue}else{if(Wa)continue;if(kl){if(w.get(Ud.name))continue;w.set(Ud.name,!0)}}let fy=Ht();typeof Ud.text==\"string\"?Ac(Ud.text):Ac(Ud.text(of)),Pe&&Pe.sections.push({pos:fy,end:X.getTextPos(),kind:\"emitHelpers\",data:Ud.name}),ne=!0}}return ne}function Hn(E){let ne=O4(E);return ne&&Ag(ne,Sue)}function jr(E){ei(E,!1)}function ei(E,ne){let Ee=uc(E,e.neverAsciiEscape,ne);(e.sourceMap||e.inlineSourceMap)&&(E.kind===10||Hy(E.kind))?jb(Ee):Ix(Ee)}function Kr(E){for(let ne of E.texts)nl(),Ge(ne)}function Si(E){X.rawWrite(E.parent.text.substring(E.pos,E.end))}function Ja(E){let ne=Ht();Si(E),Pe&&En(ne,X.getTextPos(),E.kind===305?\"text\":\"internal\")}function Za(E){let ne=Ht();if(Si(E),Pe){let Ee=VU(E.section);Ee.pos=ne,Ee.end=X.getTextPos(),Pe.sections.push(Ee)}}function Fa(E,ne,Ee){switch(Ee.kind){case 1:Hi(E,ne,Ee);break;case 0:xi(E,ne,Ee);break}}function Hi(E,ne,Ee){ry(`\\${${Ee.order}:`),j(E,ne,!1),ry(\"}\")}function xi(E,ne,Ee){L.assert(ne.kind===239,`A tab stop cannot be attached to a node of kind ${L.formatSyntaxKind(ne.kind)}.`),L.assert(E!==5,\"A tab stop cannot be attached to an embedded statement.\"),ry(`$${Ee.order}`)}function Nr(E){(E.symbol?Lx:we)(oy(E,!1),E.symbol),cs(E,NT(E),53776)}function Fo(E){we(oy(E,!1))}function Qr(E){Wi(E.left),Qn(\".\"),Ge(E.right)}function Wi(E){E.kind===79?Kt(E):Ge(E)}function gn(E){let ne=ie,Ee=le;Gl(),Qn(\"[\"),Kt(E.expression,gr.parenthesizeExpressionOfComputedPropertyName),Qn(\"]\"),Iv(ne,Ee)}function Ki(E){Qh(E,E.modifiers),Ge(E.name),E.constraint&&(Wn(),zi(\"extends\"),Wn(),Ge(E.constraint)),E.default&&(Wn(),af(\"=\"),Wn(),Ge(E.default))}function kc(E){rf(E,E.modifiers,!0),Ge(E.dotDotDotToken),S1(E.name,Av),Ge(E.questionToken),E.parent&&E.parent.kind===320&&!E.name?Ge(E.type):Q_(E.type),I_(E.initializer,E.type?E.type.end:E.questionToken?E.questionToken.end:E.name?E.name.end:E.modifiers?E.modifiers.end:E.pos,E,gr.parenthesizeExpressionForDisallowedComma)}function Ps(E){Qn(\"@\"),Kt(E.expression,gr.parenthesizeLeftSideOfAccess)}function mc(E){Qh(E,E.modifiers),S1(E.name,kx),Ge(E.questionToken),Q_(E.type),lc()}function xc(E){rf(E,E.modifiers,!0),Ge(E.name),Ge(E.questionToken),Ge(E.exclamationToken),Q_(E.type),I_(E.initializer,E.type?E.type.end:E.questionToken?E.questionToken.end:E.name.end,E),lc()}function hc(E){ng(E),Qh(E,E.modifiers),Ge(E.name),Ge(E.questionToken),Dp(E,E.typeParameters),eg(E,E.parameters),Q_(E.type),lc(),ih(E)}function ro(E){rf(E,E.modifiers,!0),Ge(E.asteriskToken),Ge(E.name),Ge(E.questionToken),eh(E,$_)}function aa(E){zi(\"static\"),lE(E.body)}function Co(E){rf(E,E.modifiers,!1),zi(\"constructor\"),eh(E,$_)}function gc(E){let ne=rf(E,E.modifiers,!0),Ee=E.kind===174?137:151;$t(Ee,ne,zi,E),Wn(),Ge(E.name),eh(E,$_)}function Ll(E){ng(E),Dp(E,E.typeParameters),eg(E,E.parameters),Q_(E.type),lc(),ih(E)}function md(E){ng(E),zi(\"new\"),Wn(),Dp(E,E.typeParameters),eg(E,E.parameters),Q_(E.type),lc(),ih(E)}function Pc(E){rf(E,E.modifiers,!1),ty(E,E.parameters),Q_(E.type),lc()}function bl(E){Ge(E.type),Ge(E.literal)}function ss(){lc()}function qs(E){E.assertsModifier&&(Ge(E.assertsModifier),Wn()),Ge(E.parameterName),E.type&&(Wn(),zi(\"is\"),Wn(),Ge(E.type))}function Rs(E){Ge(E.typeName),kp(E,E.typeArguments)}function As(E){ng(E),Dp(E,E.typeParameters),A1(E,E.parameters),Wn(),Qn(\"=>\"),Wn(),Ge(E.type),ih(E)}function jt(E){zi(\"function\"),eg(E,E.parameters),Qn(\":\"),Ge(E.type)}function yc(E){Qn(\"?\"),Ge(E.type)}function Ql(E){Qn(\"!\"),Ge(E.type)}function yu(E){Ge(E.type),Qn(\"=\")}function se(E){ng(E),Qh(E,E.modifiers),zi(\"new\"),Wn(),Dp(E,E.typeParameters),eg(E,E.parameters),Wn(),Qn(\"=>\"),Wn(),Ge(E.type),ih(E)}function ht(E){zi(\"typeof\"),Wn(),Ge(E.exprName),kp(E,E.typeArguments)}function wt(E){Iv(0,void 0),Qn(\"{\");let ne=Ya(E)&1?768:32897;cs(E,E.members,ne|524288),Qn(\"}\"),Gl()}function K(E){Ge(E.elementType,gr.parenthesizeNonArrayTypeOfPostfixType),Qn(\"[\"),Qn(\"]\")}function Xe(E){Qn(\"...\"),Ge(E.type)}function ft(E){$t(22,E.pos,Qn,E);let ne=Ya(E)&1?528:657;cs(E,E.elements,ne|524288,gr.parenthesizeElementTypeOfTupleType),$t(23,E.elements.end,Qn,E)}function Yt(E){Ge(E.dotDotDotToken),Ge(E.name),Ge(E.questionToken),$t(58,E.name.end,Qn,E),Wn(),Ge(E.type)}function pr(E){Ge(E.type,gr.parenthesizeTypeOfOptionalType),Qn(\"?\")}function yr(E){cs(E,E.types,516,gr.parenthesizeConstituentTypeOfUnionType)}function ta(E){cs(E,E.types,520,gr.parenthesizeConstituentTypeOfIntersectionType)}function Go(E){Ge(E.checkType,gr.parenthesizeCheckTypeOfConditionalType),Wn(),zi(\"extends\"),Wn(),Ge(E.extendsType,gr.parenthesizeExtendsTypeOfConditionalType),Wn(),Qn(\"?\"),Wn(),Ge(E.trueType),Wn(),Qn(\":\"),Wn(),Ge(E.falseType)}function Ka(E){zi(\"infer\"),Wn(),Ge(E.typeParameter)}function vo(E){Qn(\"(\"),Ge(E.type),Qn(\")\")}function ka(){zi(\"this\")}function Hs(E){L_(E.operator,zi),Wn();let ne=E.operator===146?gr.parenthesizeOperandOfReadonlyTypeOperator:gr.parenthesizeOperandOfTypeOperator;Ge(E.type,ne)}function Uc(E){Ge(E.objectType,gr.parenthesizeNonArrayTypeOfPostfixType),Qn(\"[\"),Ge(E.indexType),Qn(\"]\")}function Gu(E){let ne=Ya(E);Qn(\"{\"),ne&1?Wn():(nl(),Kf()),E.readonlyToken&&(Ge(E.readonlyToken),E.readonlyToken.kind!==146&&zi(\"readonly\"),Wn()),Qn(\"[\"),rt(3,E.typeParameter),E.nameType&&(Wn(),zi(\"as\"),Wn(),Ge(E.nameType)),Qn(\"]\"),E.questionToken&&(Ge(E.questionToken),E.questionToken.kind!==57&&Qn(\"?\")),Qn(\":\"),Wn(),Ge(E.type),lc(),ne&1?Wn():(nl(),Z_()),cs(E,E.members,2),Qn(\"}\")}function $o(E){Kt(E.literal)}function jo(E){Ge(E.head),cs(E,E.templateSpans,262144)}function Ws(E){if(E.isTypeOf&&(zi(\"typeof\"),Wn()),zi(\"import\"),Qn(\"(\"),Ge(E.argument),E.assertions){Qn(\",\"),Wn(),Qn(\"{\"),Wn(),zi(\"assert\"),Qn(\":\"),Wn();let ne=E.assertions.assertClause.elements;cs(E.assertions.assertClause,ne,526226),Wn(),Qn(\"}\")}Qn(\")\"),E.qualifier&&(Qn(\".\"),Ge(E.qualifier)),kp(E,E.typeArguments)}function hd(E){Qn(\"{\"),cs(E,E.elements,525136),Qn(\"}\")}function vc(E){Qn(\"[\"),cs(E,E.elements,524880),Qn(\"]\")}function nf(E){Ge(E.dotDotDotToken),E.propertyName&&(Ge(E.propertyName),Qn(\":\"),Wn()),Ge(E.name),I_(E.initializer,E.name.end,E,gr.parenthesizeExpressionForDisallowedComma)}function ye(E){let ne=E.elements,Ee=E.multiLine?65536:0;ny(E,ne,8914|Ee,gr.parenthesizeExpressionForDisallowedComma)}function Et(E){Iv(0,void 0),mn(E.properties,xE);let ne=Ya(E)&131072;ne&&Kf();let Ee=E.multiLine?65536:0,Wt=C&&C.languageVersion>=1&&!Mf(C)?64:0;cs(E,E.properties,526226|Wt|Ee),ne&&Z_(),Gl()}function bn(E){Kt(E.expression,gr.parenthesizeLeftSideOfAccess);let ne=E.questionDotToken||om(D.createToken(24),E.expression.end,E.name.pos),Ee=ep(E,E.expression,ne),Wt=ep(E,ne,E.name);wc(Ee,!1),ne.kind!==28&&Ri(E.expression)&&!X.hasTrailingComment()&&!X.hasTrailingWhitespace()&&Qn(\".\"),E.questionDotToken?Ge(ne):$t(ne.kind,E.expression.end,Qn,E),wc(Wt,!1),Ge(E.name),tg(Ee,Wt)}function Ri(E){if(E=a_(E),Vf(E)){let ne=uc(E,!0,!1);return!E.numericLiteralFlags&&!jl(ne,Xa(24))}else if(Us(E)){let ne=mue(E);return typeof ne==\"number\"&&isFinite(ne)&&Math.floor(ne)===ne}}function io(E){Kt(E.expression,gr.parenthesizeLeftSideOfAccess),Ge(E.questionDotToken),$t(22,E.expression.end,Qn,E),Kt(E.argumentExpression),$t(23,E.argumentExpression.end,Qn,E)}function ee(E){let ne=o_(E)&16;ne&&(Qn(\"(\"),jb(\"0\"),Qn(\",\"),Wn()),Kt(E.expression,gr.parenthesizeLeftSideOfAccess),ne&&Qn(\")\"),Ge(E.questionDotToken),kp(E,E.typeArguments),ny(E,E.arguments,2576,gr.parenthesizeExpressionForDisallowedComma)}function Ze(E){$t(103,E.pos,zi,E),Wn(),Kt(E.expression,gr.parenthesizeExpressionOfNew),kp(E,E.typeArguments),ny(E,E.arguments,18960,gr.parenthesizeExpressionForDisallowedComma)}function At(E){let ne=o_(E)&16;ne&&(Qn(\"(\"),jb(\"0\"),Qn(\",\"),Wn()),Kt(E.tag,gr.parenthesizeLeftSideOfAccess),ne&&Qn(\")\"),kp(E,E.typeArguments),Wn(),Kt(E.template)}function xt(E){Qn(\"<\"),Ge(E.type),Qn(\">\"),Kt(E.expression,gr.parenthesizeOperandOfPrefixUnary)}function qt(E){let ne=$t(20,E.pos,Qn,E),Ee=TE(E.expression,E);Kt(E.expression,void 0),Hb(E.expression,E),tg(Ee),$t(21,E.expression?E.expression.end:ne,Qn,E)}function Ln(E){oh(E.name),hv(E)}function mr(E){Qh(E,E.modifiers),eh(E,Vr)}function Vr(E){Dp(E,E.typeParameters),A1(E,E.parameters),Q_(E.type),Wn(),Ge(E.equalsGreaterThanToken)}function gi(E){$t(89,E.pos,zi,E),Wn(),Kt(E.expression,gr.parenthesizeOperandOfPrefixUnary)}function Ea(E){$t(112,E.pos,zi,E),Wn(),Kt(E.expression,gr.parenthesizeOperandOfPrefixUnary)}function bo(E){$t(114,E.pos,zi,E),Wn(),Kt(E.expression,gr.parenthesizeOperandOfPrefixUnary)}function Qo(E){$t(133,E.pos,zi,E),Wn(),Kt(E.expression,gr.parenthesizeOperandOfPrefixUnary)}function Cs(E){L_(E.operator,af),Bu(E)&&Wn(),Kt(E.operand,gr.parenthesizeOperandOfPrefixUnary)}function Bu(E){let ne=E.operand;return ne.kind===221&&(E.operator===39&&(ne.operator===39||ne.operator===45)||E.operator===40&&(ne.operator===40||ne.operator===46))}function Pd(E){Kt(E.operand,gr.parenthesizeOperandOfPostfixUnary),L_(E.operator,af)}function Dc(){return C3(E,ne,Ee,Wt,lr,void 0);function E(qr,Ti){if(Ti){Ti.stackIndex++,Ti.preserveSourceNewlinesStack[Ti.stackIndex]=_e,Ti.containerPosStack[Ti.stackIndex]=qe,Ti.containerEndStack[Ti.stackIndex]=zt,Ti.declarationListContainerEndStack[Ti.stackIndex]=Qt;let Wa=Ti.shouldEmitCommentsStack[Ti.stackIndex]=Ot(qr),kl=Ti.shouldEmitSourceMapsStack[Ti.stackIndex]=Ke(qr);l?.(qr),Wa&&ju(qr),kl&&NE(qr),ir(qr)}else Ti={stackIndex:0,preserveSourceNewlinesStack:[void 0],containerPosStack:[-1],containerEndStack:[-1],declarationListContainerEndStack:[-1],shouldEmitCommentsStack:[!1],shouldEmitSourceMapsStack:[!1]};return Ti}function ne(qr,Ti,Wa){return ci(qr,Wa,\"left\")}function Ee(qr,Ti,Wa){let kl=qr.kind!==27,Ed=ep(Wa,Wa.left,qr),Ud=ep(Wa,qr,Wa.right);wc(Ed,kl),rd(qr.pos),EE(qr,qr.kind===101?zi:af),ag(qr.end,!0),wc(Ud,!0)}function Wt(qr,Ti,Wa){return ci(qr,Wa,\"right\")}function lr(qr,Ti){let Wa=ep(qr,qr.left,qr.operatorToken),kl=ep(qr,qr.operatorToken,qr.right);if(tg(Wa,kl),Ti.stackIndex>0){let Ed=Ti.preserveSourceNewlinesStack[Ti.stackIndex],Ud=Ti.containerPosStack[Ti.stackIndex],fy=Ti.containerEndStack[Ti.stackIndex],Td=Ti.declarationListContainerEndStack[Ti.stackIndex],Ov=Ti.shouldEmitCommentsStack[Ti.stackIndex],Nv=Ti.shouldEmitSourceMapsStack[Ti.stackIndex];ae(Ed),Nv&&PE(qr),Ov&&I1(qr,Ud,fy,Td),f?.(qr),Ti.stackIndex--}}function ci(qr,Ti,Wa){let kl=Wa===\"left\"?gr.getParenthesizeLeftSideOfBinaryForOperator(Ti.operatorToken.kind):gr.getParenthesizeRightSideOfBinaryForOperator(Ti.operatorToken.kind),Ed=oe(0,1,qr);if(Ed===lt&&(L.assertIsDefined($n),qr=kl(Ga($n,ot)),Ed=pe(1,1,qr),$n=void 0),(Ed===vd||Ed===OE||Ed===Te)&&ar(qr))return qr;ui=kl,Ed(1,qr)}}function gd(E){let ne=ep(E,E.condition,E.questionToken),Ee=ep(E,E.questionToken,E.whenTrue),Wt=ep(E,E.whenTrue,E.colonToken),lr=ep(E,E.colonToken,E.whenFalse);Kt(E.condition,gr.parenthesizeConditionOfConditionalExpression),wc(ne,!0),Ge(E.questionToken),wc(Ee,!0),Kt(E.whenTrue,gr.parenthesizeBranchOfConditionalExpression),tg(ne,Ee),wc(Wt,!0),Ge(E.colonToken),wc(lr,!0),Kt(E.whenFalse,gr.parenthesizeBranchOfConditionalExpression),tg(Wt,lr)}function Zl(E){Ge(E.head),cs(E,E.templateSpans,262144)}function Md(E){$t(125,E.pos,zi,E),Ge(E.asteriskToken),Lp(E.expression&&Is(E.expression),Mc)}function zf(E){$t(25,E.pos,Qn,E),Kt(E.expression,gr.parenthesizeExpressionForDisallowedComma)}function Io(E){oh(E.name),uE(E)}function Jf(E){Kt(E.expression,gr.parenthesizeLeftSideOfAccess),kp(E,E.typeArguments)}function Fd(E){Kt(E.expression,void 0),E.type&&(Wn(),zi(\"as\"),Wn(),Ge(E.type))}function E_(E){Kt(E.expression,gr.parenthesizeLeftSideOfAccess),af(\"!\")}function Y_(E){Kt(E.expression,void 0),E.type&&(Wn(),zi(\"satisfies\"),Wn(),Ge(E.type))}function M(E){iy(E.keywordToken,E.pos,Qn),Qn(\".\"),Ge(E.name)}function He(E){Kt(E.expression),Ge(E.literal)}function Nt(E){Pn(E,!E.multiLine&&rh(E))}function Pn(E,ne){$t(18,E.pos,Qn,E);let Ee=ne||Ya(E)&1?768:129;cs(E,E.statements,Ee),$t(19,E.statements.end,Qn,E,!!(Ee&1))}function la(E){rf(E,E.modifiers,!1),Ge(E.declarationList),lc()}function oa(E){E?Qn(\";\"):lc()}function be(E){Kt(E.expression,gr.parenthesizeExpressionOfExpressionStatement),(!C||!Mf(C)||ws(E.expression))&&lc()}function De(E){let ne=$t(99,E.pos,zi,E);Wn(),$t(20,ne,Qn,E),Kt(E.expression),$t(21,E.expression.end,Qn,E),Uu(E,E.thenStatement),E.elseStatement&&(ay(E,E.thenStatement,E.elseStatement),$t(91,E.thenStatement.end,zi,E),E.elseStatement.kind===242?(Wn(),Ge(E.elseStatement)):Uu(E,E.elseStatement))}function mt(E,ne){let Ee=$t(115,ne,zi,E);Wn(),$t(20,Ee,Qn,E),Kt(E.expression),$t(21,E.expression.end,Qn,E)}function St(E){$t(90,E.pos,zi,E),Uu(E,E.statement),Va(E.statement)&&!_e?Wn():ay(E,E.statement,E.expression),mt(E,E.statement.end),lc()}function Zt(E){mt(E,E.pos),Uu(E,E.statement)}function rn(E){let ne=$t(97,E.pos,zi,E);Wn();let Ee=$t(20,ne,Qn,E);kr(E.initializer),Ee=$t(26,E.initializer?E.initializer.end:Ee,Qn,E),Lp(E.condition),Ee=$t(26,E.condition?E.condition.end:Ee,Qn,E),Lp(E.incrementor),$t(21,E.incrementor?E.incrementor.end:Ee,Qn,E),Uu(E,E.statement)}function sn(E){let ne=$t(97,E.pos,zi,E);Wn(),$t(20,ne,Qn,E),kr(E.initializer),Wn(),$t(101,E.initializer.end,zi,E),Wn(),Kt(E.expression),$t(21,E.expression.end,Qn,E),Uu(E,E.statement)}function Dn(E){let ne=$t(97,E.pos,zi,E);Wn(),x1(E.awaitModifier),$t(20,ne,Qn,E),kr(E.initializer),Wn(),$t(162,E.initializer.end,zi,E),Wn(),Kt(E.expression),$t(21,E.expression.end,Qn,E),Uu(E,E.statement)}function kr(E){E!==void 0&&(E.kind===258?Ge(E):Kt(E))}function ki(E){$t(86,E.pos,zi,E),Ub(E.label),lc()}function Vn(E){$t(81,E.pos,zi,E),Ub(E.label),lc()}function $t(E,ne,Ee,Wt,lr){let ci=ea(Wt),qr=ci&&ci.kind===Wt.kind,Ti=ne;if(qr&&C&&(ne=xo(C.text,ne)),qr&&Wt.pos!==Ti){let Wa=lr&&C&&!Bf(Ti,ne,C);Wa&&Kf(),rd(Ti),Wa&&Z_()}if(ne=L_(E,Ee,ne),qr&&Wt.end!==ne){let Wa=Wt.kind===291;ag(ne,!Wa,Wa)}return ne}function Xn(E){return E.kind===2||!!E.hasTrailingNewLine}function ra(E){return C?vt(Nm(C.text,E.pos),Xn)||vt(l2(E),Xn)?!0:_3(E)?E.pos!==E.expression.pos&&vt(eb(C.text,E.expression.pos),Xn)?!0:ra(E.expression):!1:!1}function Is(E){if(!Gt&&_3(E)&&ra(E)){let ne=ea(E);if(ne&&ud(ne)){let Ee=D.createParenthesizedExpression(E.expression);return Ir(Ee,E),it(Ee,ne),Ee}return D.createParenthesizedExpression(E)}return E}function Mc(E){return Is(gr.parenthesizeExpressionForDisallowedComma(E))}function mm(E){$t(105,E.pos,zi,E),Lp(E.expression&&Is(E.expression),Is),lc()}function Hh(E){let ne=$t(116,E.pos,zi,E);Wn(),$t(20,ne,Qn,E),Kt(E.expression),$t(21,E.expression.end,Qn,E),Uu(E,E.statement)}function T_(E){let ne=$t(107,E.pos,zi,E);Wn(),$t(20,ne,Qn,E),Kt(E.expression),$t(21,E.expression.end,Qn,E),Wn(),Ge(E.caseBlock)}function Cb(E){Ge(E.label),$t(58,E.label.end,Qn,E),Wn(),Ge(E.statement)}function mv(E){$t(109,E.pos,zi,E),Lp(Is(E.expression),Is),lc()}function gx(E){$t(111,E.pos,zi,E),Wn(),Ge(E.tryBlock),E.catchClause&&(ay(E,E.tryBlock,E.catchClause),Ge(E.catchClause)),E.finallyBlock&&(ay(E,E.catchClause||E.tryBlock,E.finallyBlock),$t(96,(E.catchClause||E.tryBlock).end,zi,E),Wn(),Ge(E.finallyBlock))}function _1(E){iy(87,E.pos,zi),lc()}function yx(E){var ne,Ee,Wt,lr,ci;Ge(E.name),Ge(E.exclamationToken),Q_(E.type),I_(E.initializer,(ci=(lr=(ne=E.type)==null?void 0:ne.end)!=null?lr:(Wt=(Ee=E.name.emitNode)==null?void 0:Ee.typeNode)==null?void 0:Wt.end)!=null?ci:E.name.end,E,gr.parenthesizeExpressionForDisallowedComma)}function Wh(E){zi(II(E)?\"let\":kh(E)?\"const\":\"var\"),Wn(),cs(E,E.declarations,528)}function S_(E){hv(E)}function hv(E){rf(E,E.modifiers,!1),zi(\"function\"),Ge(E.asteriskToken),Wn(),kt(E.name),eh(E,$_)}function eh(E,ne){let Ee=E.body;if(Ee)if(Va(Ee)){let Wt=Ya(E)&131072;Wt&&Kf(),ng(E),mn(E.parameters,qc),qc(E.body),ne(E),lE(Ee),ih(E),Wt&&Z_()}else ne(E),Wn(),Kt(Ee,gr.parenthesizeConciseBodyOfArrowFunction);else ne(E),lc()}function $_(E){Dp(E,E.typeParameters),eg(E,E.parameters),Q_(E.type)}function gv(E){if(Ya(E)&1)return!0;if(E.multiLine||!ws(E)&&C&&!DT(E,C)||Fl(E,Sl(E.statements),2)||bm(E,Os(E.statements),2,E.statements))return!1;let ne;for(let Ee of E.statements){if(qf(ne,Ee,2)>0)return!1;ne=Ee}return!0}function lE(E){l?.(E),Wn(),Qn(\"{\"),Kf();let ne=gv(E)?Ib:zh;ig(E,E.statements,ne),Z_(),iy(19,E.statements.end,Qn,E),f?.(E)}function Ib(E){zh(E,!0)}function zh(E,ne){let Ee=xv(E.statements),Wt=X.getTextPos();Vt(E),Ee===0&&Wt===X.getTextPos()&&ne?(Z_(),cs(E,E.statements,768),Kf()):cs(E,E.statements,1,void 0,Ee)}function p1(E){uE(E)}function uE(E){Iv(0,void 0),mn(E.members,xE),rf(E,E.modifiers,!0),$t(84,yp(E).pos,zi,E),E.name&&(Wn(),kt(E.name));let ne=Ya(E)&131072;ne&&Kf(),Dp(E,E.typeParameters),cs(E,E.heritageClauses,0),Wn(),Qn(\"{\"),cs(E,E.members,129),Qn(\"}\"),ne&&Z_(),Gl()}function dE(E){Iv(0,void 0),rf(E,E.modifiers,!1),zi(\"interface\"),Wn(),Ge(E.name),Dp(E,E.typeParameters),cs(E,E.heritageClauses,512),Wn(),Qn(\"{\"),cs(E,E.members,129),Qn(\"}\"),Gl()}function fE(E){rf(E,E.modifiers,!1),zi(\"type\"),Wn(),Ge(E.name),Dp(E,E.typeParameters),Wn(),Qn(\"=\"),Wn(),Ge(E.type),lc()}function yv(E){rf(E,E.modifiers,!1),zi(\"enum\"),Wn(),Ge(E.name),Wn(),Qn(\"{\"),cs(E,E.members,145),Qn(\"}\")}function vx(E){rf(E,E.modifiers,!1),~E.flags&1024&&(zi(E.flags&16?\"namespace\":\"module\"),Wn()),Ge(E.name);let ne=E.body;if(!ne)return lc();for(;ne&&Tc(ne);)Qn(\".\"),Ge(ne.name),ne=ne.body;Wn(),Ge(ne)}function _E(E){ng(E),mn(E.statements,qc),Pn(E,rh(E)),ih(E)}function pE(E){$t(18,E.pos,Qn,E),cs(E,E.clauses,129),$t(19,E.clauses.end,Qn,E,!0)}function vv(E){rf(E,E.modifiers,!1),$t(100,E.modifiers?E.modifiers.end:E.pos,zi,E),Wn(),E.isTypeOnly&&($t(154,E.pos,zi,E),Wn()),Ge(E.name),Wn(),$t(63,E.name.end,Qn,E),Wn(),Lb(E.moduleReference),lc()}function Lb(E){E.kind===79?Kt(E):Ge(E)}function bv(E){rf(E,E.modifiers,!1),$t(100,E.modifiers?E.modifiers.end:E.pos,zi,E),Wn(),E.importClause&&(Ge(E.importClause),Wn(),$t(158,E.importClause.end,zi,E),Wn()),Kt(E.moduleSpecifier),E.assertClause&&Ub(E.assertClause),lc()}function m1(E){E.isTypeOnly&&($t(154,E.pos,zi,E),Wn()),Ge(E.name),E.name&&E.namedBindings&&($t(27,E.name.end,Qn,E),Wn()),Ge(E.namedBindings)}function Jh(E){let ne=$t(41,E.pos,Qn,E);Wn(),$t(128,ne,zi,E),Wn(),Ge(E.name)}function Lo(E){kb(E)}function mE(E){Db(E)}function sC(E){let ne=$t(93,E.pos,zi,E);Wn(),E.isExportEquals?$t(63,ne,af,E):$t(88,ne,zi,E),Wn(),Kt(E.expression,E.isExportEquals?gr.getParenthesizeRightSideOfBinaryForOperator(63):gr.parenthesizeExpressionOfExportDefault),lc()}function Zg(E){rf(E,E.modifiers,!1);let ne=$t(93,E.pos,zi,E);if(Wn(),E.isTypeOnly&&(ne=$t(154,ne,zi,E),Wn()),E.exportClause?Ge(E.exportClause):ne=$t(41,ne,Qn,E),E.moduleSpecifier){Wn();let Ee=E.exportClause?E.exportClause.end:ne;$t(158,Ee,zi,E),Wn(),Kt(E.moduleSpecifier)}E.assertClause&&Ub(E.assertClause),lc()}function Kh(E){$t(130,E.pos,zi,E),Wn();let ne=E.elements;cs(E,ne,526226)}function hm(E){Ge(E.name),Qn(\":\"),Wn();let ne=E.value;if(!(Ya(ne)&1024)){let Ee=sm(ne);ag(Ee.pos)}Ge(ne)}function x_(E){let ne=$t(93,E.pos,zi,E);Wn(),ne=$t(128,ne,zi,E),Wn(),ne=$t(143,ne,zi,E),Wn(),Ge(E.name),lc()}function Zu(E){let ne=$t(41,E.pos,Qn,E);Wn(),$t(128,ne,zi,E),Wn(),Ge(E.name)}function ed(E){kb(E)}function td(E){Db(E)}function kb(E){Qn(\"{\"),cs(E,E.elements,525136),Qn(\"}\")}function Db(E){E.isTypeOnly&&(zi(\"type\"),Wn()),E.propertyName&&(Ge(E.propertyName),Wn(),$t(128,E.propertyName.end,zi,E),Wn()),Ge(E.name)}function bx(E){zi(\"require\"),Qn(\"(\"),Kt(E.expression),Qn(\")\")}function wb(E){Ge(E.openingElement),cs(E,E.children,262144),Ge(E.closingElement)}function qh(E){Qn(\"<\"),Nb(E.tagName),kp(E,E.typeArguments),Wn(),Ge(E.attributes),Qn(\"/>\")}function Rb(E){Ge(E.openingFragment),cs(E,E.children,262144),Ge(E.closingFragment)}function h1(E){if(Qn(\"<\"),Xm(E)){let ne=TE(E.tagName,E);Nb(E.tagName),kp(E,E.typeArguments),E.attributes.properties&&E.attributes.properties.length>0&&Wn(),Ge(E.attributes),Hb(E.attributes,E),tg(ne)}Qn(\">\")}function Ob(E){X.writeLiteral(E.text)}function cC(E){Qn(\"</\"),GS(E)&&Nb(E.tagName),Qn(\">\")}function Ex(E){cs(E,E.properties,262656)}function Ev(E){Ge(E.name),Ax(\"=\",Qn,E.initializer,ln)}function hE(E){Qn(\"{...\"),Kt(E.expression),Qn(\"}\")}function Fe(E){let ne=!1;return bw(C?.text||\"\",E+1,()=>ne=!0),ne}function ey(E){let ne=!1;return vw(C?.text||\"\",E+1,()=>ne=!0),ne}function Ip(E){return Fe(E)||ey(E)}function Tv(E){var ne;if(E.expression||!Gt&&!ws(E)&&Ip(E.pos)){let Ee=C&&!ws(E)&&Gs(C,E.pos).line!==Gs(C,E.end).line;Ee&&X.increaseIndent();let Wt=$t(18,E.pos,Qn,E);Ge(E.dotDotDotToken),Kt(E.expression),$t(19,((ne=E.expression)==null?void 0:ne.end)||Wt,Qn,E),Ee&&X.decreaseIndent()}}function Nb(E){E.kind===79?Kt(E):Ge(E)}function Sv(E){$t(82,E.pos,zi,E),Wn(),Kt(E.expression,gr.parenthesizeExpressionForDisallowedComma),g1(E,E.statements,E.expression.end)}function Xh(E){let ne=$t(88,E.pos,zi,E);g1(E,E.statements,ne)}function g1(E,ne,Ee){let Wt=ne.length===1&&(!C||ws(E)||ws(ne[0])||a4(E,ne[0],C)),lr=163969;Wt?(iy(58,Ee,Qn,E),Wn(),lr&=-130):$t(58,Ee,Qn,E),cs(E,ne,lr)}function wo(E){Wn(),L_(E.token,zi),Wn(),cs(E,E.types,528)}function A_(E){let ne=$t(83,E.pos,zi,E);Wn(),E.variableDeclaration&&($t(20,ne,Qn,E),Ge(E.variableDeclaration),$t(21,E.variableDeclaration.end,Qn,E),Wn()),Ge(E.block)}function gE(E){Ge(E.name),Qn(\":\"),Wn();let ne=E.initializer;if(!(Ya(ne)&1024)){let Ee=sm(ne);ag(Ee.pos)}Kt(ne,gr.parenthesizeExpressionForDisallowedComma)}function Kc(E){Ge(E.name),E.objectAssignmentInitializer&&(Wn(),Qn(\"=\"),Wn(),Kt(E.objectAssignmentInitializer,gr.parenthesizeExpressionForDisallowedComma))}function th(E){E.expression&&($t(25,E.pos,Qn,E),Kt(E.expression,gr.parenthesizeExpressionForDisallowedComma))}function Pb(E){Ge(E.name),I_(E.initializer,E.name.end,E,gr.parenthesizeExpressionForDisallowedComma)}function C_(E){if(we(\"/**\"),E.comment){let ne=Cw(E.comment);if(ne){let Ee=ne.split(/\\r\\n?|\\n/g);for(let Wt of Ee)nl(),Wn(),Qn(\"*\"),Wn(),we(Wt)}}E.tags&&(E.tags.length===1&&E.tags[0].kind===347&&!E.comment?(Wn(),Ge(E.tags[0])):cs(E,E.tags,33)),Wn(),we(\"*/\")}function Mb(E){nh(E.tagName),zs(E.typeExpression),ym(E.comment)}function Ml(E){nh(E.tagName),Ge(E.name),ym(E.comment)}function Yh(E){Wn(),Qn(\"{\"),Ge(E.name),Qn(\"}\")}function ll(E){nh(E.tagName),Wn(),Qn(\"{\"),Ge(E.class),Qn(\"}\"),ym(E.comment)}function y1(E){nh(E.tagName),zs(E.constraint),Wn(),cs(E,E.typeParameters,528),ym(E.comment)}function lC(E){nh(E.tagName),E.typeExpression&&(E.typeExpression.kind===312?zs(E.typeExpression):(Wn(),Qn(\"{\"),we(\"Object\"),E.typeExpression.isArrayType&&(Qn(\"[\"),Qn(\"]\")),Qn(\"}\"))),E.fullName&&(Wn(),Ge(E.fullName)),ym(E.comment),E.typeExpression&&E.typeExpression.kind===325&&yd(E.typeExpression)}function Ai(E){nh(E.tagName),E.name&&(Wn(),Ge(E.name)),ym(E.comment),yE(E.typeExpression)}function Rr(E){ym(E.comment),yE(E.typeExpression)}function gm(E){nh(E.tagName),ym(E.comment)}function yd(E){cs(E,D.createNodeArray(E.jsDocPropertyTags),33)}function yE(E){E.typeParameters&&cs(E,D.createNodeArray(E.typeParameters),33),E.parameters&&cs(E,D.createNodeArray(E.parameters),33),E.type&&(nl(),Wn(),Qn(\"*\"),Wn(),Ge(E.type))}function $h(E){nh(E.tagName),zs(E.typeExpression),Wn(),E.isBracketed&&Qn(\"[\"),Ge(E.name),E.isBracketed&&Qn(\"]\"),ym(E.comment)}function nh(E){Qn(\"@\"),Ge(E)}function ym(E){let ne=Cw(E);ne&&(Wn(),we(ne))}function zs(E){E&&(Wn(),Qn(\"{\"),Ge(E.type),Qn(\"}\"))}function Fb(E){nl();let ne=E.statements;if(ne.length===0||!B_(ne[0])||ws(ne[0])){ig(E,ne,Cf);return}Cf(E)}function v1(E){b1(!!E.hasNoDefaultLib,E.syntheticFileReferences||[],E.syntheticTypeReferences||[],E.syntheticLibReferences||[]);for(let ne of E.prepends)if(BT(ne)&&ne.syntheticReferences)for(let Ee of ne.syntheticReferences)Ge(Ee),nl()}function Gb(E){E.isDeclarationFile&&b1(E.hasNoDefaultLib,E.referencedFiles,E.typeReferenceDirectives,E.libReferenceDirectives)}function b1(E,ne,Ee,Wt){if(E){let lr=X.getTextPos();vm('/// <reference no-default-lib=\"true\"/>'),Pe&&Pe.sections.push({pos:lr,end:X.getTextPos(),kind:\"no-default-lib\"}),nl()}if(C&&C.moduleName&&(vm(`/// <amd-module name=\"${C.moduleName}\" />`),nl()),C&&C.amdDependencies)for(let lr of C.amdDependencies)lr.name?vm(`/// <amd-dependency name=\"${lr.name}\" path=\"${lr.path}\" />`):vm(`/// <amd-dependency path=\"${lr.path}\" />`),nl();for(let lr of ne){let ci=X.getTextPos();vm(`/// <reference path=\"${lr.fileName}\" />`),Pe&&Pe.sections.push({pos:ci,end:X.getTextPos(),kind:\"reference\",data:lr.fileName}),nl()}for(let lr of Ee){let ci=X.getTextPos(),qr=lr.resolutionMode&&lr.resolutionMode!==C?.impliedNodeFormat?`resolution-mode=\"${lr.resolutionMode===99?\"import\":\"require\"}\"`:\"\";vm(`/// <reference types=\"${lr.fileName}\" ${qr}/>`),Pe&&Pe.sections.push({pos:ci,end:X.getTextPos(),kind:lr.resolutionMode?lr.resolutionMode===99?\"type-import\":\"type-require\":\"type\",data:lr.fileName}),nl()}for(let lr of Wt){let ci=X.getTextPos();vm(`/// <reference lib=\"${lr.fileName}\" />`),Pe&&Pe.sections.push({pos:ci,end:X.getTextPos(),kind:\"lib\",data:lr.fileName}),nl()}}function Cf(E){let ne=E.statements;ng(E),mn(E.statements,qc),Vt(E);let Ee=Yc(ne,Wt=>!B_(Wt));Gb(E),cs(E,ne,1,void 0,Ee===-1?ne.length:Ee),ih(E)}function Tx(E){let ne=Ya(E);!(ne&1024)&&E.pos!==E.expression.pos&&ag(E.expression.pos),Kt(E.expression),!(ne&2048)&&E.end!==E.expression.end&&rd(E.expression.end)}function Sx(E){ny(E,E.elements,528,void 0)}function xv(E,ne,Ee,Wt){let lr=!!ne;for(let ci=0;ci<E.length;ci++){let qr=E[ci];if(B_(qr)){if(Ee?!Ee.has(qr.expression.text):!0){lr&&(lr=!1,ue(ne)),nl();let Wa=X.getTextPos();Ge(qr),Wt&&Pe&&Pe.sections.push({pos:Wa,end:X.getTextPos(),kind:\"prologue\",data:qr.expression.text}),Ee&&Ee.add(qr.expression.text)}}else return ci}return E.length}function E1(E,ne){for(let Ee of E)if(!ne.has(Ee.data)){nl();let Wt=X.getTextPos();Ge(Ee),Pe&&Pe.sections.push({pos:Wt,end:X.getTextPos(),kind:\"prologue\",data:Ee.data}),ne&&ne.add(Ee.data)}}function T1(E){if(Li(E))xv(E.statements,E);else{let ne=new Set;for(let Ee of E.prepends)E1(Ee.prologues,ne);for(let Ee of E.sourceFiles)xv(Ee.statements,Ee,ne,!0);ue(void 0)}}function xx(E){let ne=new Set,Ee;for(let Wt=0;Wt<E.sourceFiles.length;Wt++){let lr=E.sourceFiles[Wt],ci,qr=0;for(let Ti of lr.statements){if(!B_(Ti))break;ne.has(Ti.expression.text)||(ne.add(Ti.expression.text),(ci||(ci=[])).push({pos:Ti.pos,end:Ti.end,expression:{pos:Ti.expression.pos,end:Ti.expression.end,text:Ti.expression.text}}),qr=qr<Ti.end?Ti.end:qr)}ci&&(Ee||(Ee=[])).push({file:Wt,text:lr.text.substring(0,qr),directives:ci})}return Ee}function Bb(E){if(Li(E)||BT(E)){let ne=K8(E.text);if(ne)return vm(ne),nl(),!0}else{for(let ne of E.prepends)if(L.assertNode(ne,BT),Bb(ne))return!0;for(let ne of E.sourceFiles)if(Bb(ne))return!0}}function S1(E,ne){if(!E)return;let Ee=we;we=ne,Ge(E),we=Ee}function rf(E,ne,Ee){if(ne?.length){if(Ji(ne,Ha))return Qh(E,ne);if(Ji(ne,du))return Ee?Zh(E,ne):E.pos;d?.(ne);let Wt,lr,ci=0,qr=0,Ti;for(;ci<ne.length;){for(;qr<ne.length;){if(Ti=ne[qr],lr=du(Ti)?\"decorators\":\"modifiers\",Wt===void 0)Wt=lr;else if(lr!==Wt)break;qr++}let Wa={pos:-1,end:-1};ci===0&&(Wa.pos=ne.pos),qr===ne.length-1&&(Wa.end=ne.end),(Wt===\"modifiers\"||Ee)&&Vb(Ge,E,ne,Wt===\"modifiers\"?2359808:2146305,void 0,ci,qr-ci,!1,Wa),ci=qr,Wt=lr,qr++}if(g?.(ne),Ti&&!vp(Ti.end))return Ti.end}return E.pos}function Qh(E,ne){cs(E,ne,2359808);let Ee=Os(ne);return Ee&&!vp(Ee.end)?Ee.end:E.pos}function Q_(E){E&&(Qn(\":\"),Wn(),Ge(E))}function I_(E,ne,Ee,Wt){E&&(Wn(),$t(63,ne,af,Ee),Wn(),Kt(E,Wt))}function Ax(E,ne,Ee,Wt){Ee&&(ne(E),Wt(Ee))}function Ub(E){E&&(Wn(),Ge(E))}function Lp(E,ne){E&&(Wn(),Kt(E,ne))}function x1(E){E&&(Ge(E),Wn())}function Uu(E,ne){Va(ne)||Ya(E)&1?(Wn(),Ge(ne)):(nl(),Kf(),Pz(ne)?rt(5,ne):Ge(ne),Z_())}function Zh(E,ne){cs(E,ne,2146305);let Ee=Os(ne);return Ee&&!vp(Ee.end)?Ee.end:E.pos}function kp(E,ne){cs(E,ne,53776,pt)}function Dp(E,ne){if(Ia(E)&&E.typeArguments)return kp(E,E.typeArguments);cs(E,ne,53776)}function eg(E,ne){cs(E,ne,2576)}function vE(E,ne){let Ee=Wp(ne);return Ee&&Ee.pos===E.pos&&xs(E)&&!E.type&&!vt(E.modifiers)&&!vt(E.typeParameters)&&!vt(Ee.modifiers)&&!Ee.dotDotDotToken&&!Ee.questionToken&&!Ee.type&&!Ee.initializer&&Re(Ee.name)}function A1(E,ne){vE(E,ne)?cs(E,ne,528):eg(E,ne)}function ty(E,ne){cs(E,ne,8848)}function bE(E){switch(E&60){case 0:break;case 16:Qn(\",\");break;case 4:Wn(),Qn(\"|\");break;case 32:Wn(),Qn(\"*\"),Wn();break;case 8:Wn(),Qn(\"&\");break}}function cs(E,ne,Ee,Wt,lr,ci){Cx(Ge,E,ne,Ee|(E&&Ya(E)&2?65536:0),Wt,lr,ci)}function ny(E,ne,Ee,Wt,lr,ci){Cx(Kt,E,ne,Ee,Wt,lr,ci)}function Cx(E,ne,Ee,Wt,lr,ci=0,qr=Ee?Ee.length-ci:0){if(Ee===void 0&&Wt&16384)return;let Wa=Ee===void 0||ci>=Ee.length||qr===0;if(Wa&&Wt&32768){d?.(Ee),g?.(Ee);return}Wt&15360&&(Qn(HMe(Wt)),Wa&&Ee&&ag(Ee.pos,!0)),d?.(Ee),Wa?Wt&1&&!(_e&&(!ne||C&&DT(ne,C)))?nl():Wt&256&&!(Wt&524288)&&Wn():Vb(E,ne,Ee,Wt,lr,ci,qr,Ee.hasTrailingComma,Ee),g?.(Ee),Wt&15360&&(Wa&&Ee&&rd(Ee.end),Qn(WMe(Wt)))}function Vb(E,ne,Ee,Wt,lr,ci,qr,Ti,Wa){let kl=(Wt&262144)===0,Ed=kl,Ud=Fl(ne,Ee[ci],Wt);Ud?(nl(Ud),Ed=!1):Wt&256&&Wn(),Wt&128&&Kf();let fy=qMe(E,lr),Td,Ov,Nv=!1;for(let Sm=0;Sm<qr;Sm++){let py=Ee[ci+Sm];if(Wt&32)nl(),bE(Wt);else if(Td){Wt&60&&Td.end!==(ne?ne.end:-1)&&(Ya(Td)&2048||rd(Td.end)),bE(Wt),Cr(Ov);let If=qf(Td,py,Wt);If>0?(Wt&131||(Kf(),Nv=!0),nl(If),Ed=!1):Td&&Wt&512&&Wn()}if(Ov=dr(py),Ed){let If=sm(py);ag(If.pos)}else Ed=kl;ge=py.pos,fy(py,E,lr,Sm),Nv&&(Z_(),Nv=!1),Td=py}let _y=Td?Ya(Td):0,Xf=Gt||!!(_y&2048),ME=Ti&&Wt&64&&Wt&16;ME&&(Td&&!Xf?$t(27,Td.end,Qn,Td):Qn(\",\")),Td&&(ne?ne.end:-1)!==Td.end&&Wt&60&&!Xf&&rd(ME&&Wa?.end?Wa.end:Td.end),Wt&128&&Z_(),Cr(Ov);let cf=bm(ne,Ee[ci+qr-1],Wt,Wa);cf?nl(cf):Wt&2097408&&Wn()}function jb(E){X.writeLiteral(E)}function Ix(E){X.writeStringLiteral(E)}function uC(E){X.write(E)}function Lx(E,ne){X.writeSymbol(E,ne)}function Qn(E){X.writePunctuation(E)}function lc(){X.writeTrailingSemicolon(\";\")}function zi(E){X.writeKeyword(E)}function af(E){X.writeOperator(E)}function Av(E){X.writeParameter(E)}function vm(E){X.writeComment(E)}function Wn(){X.writeSpace(\" \")}function kx(E){X.writeProperty(E)}function ry(E){X.nonEscapingWrite?X.nonEscapingWrite(E):X.write(E)}function nl(E=1){for(let ne=0;ne<E;ne++)X.writeLine(ne>0)}function Kf(){X.increaseIndent()}function Z_(){X.decreaseIndent()}function iy(E,ne,Ee,Wt){return Le?L_(E,Ee,ne):dC(Wt,E,Ee,ne,L_)}function EE(E,ne){m&&m(E),ne(Xa(E.kind)),v&&v(E)}function L_(E,ne,Ee){let Wt=Xa(E);return ne(Wt),Ee<0?Ee:Ee+Wt.length}function ay(E,ne,Ee){if(Ya(E)&1)Wn();else if(_e){let Wt=ep(E,ne,Ee);Wt?nl(Wt):Wn()}else nl()}function Ac(E){let ne=E.split(/\\r\\n?|\\n/g),Ee=xse(ne);for(let Wt of ne){let lr=Ee?Wt.slice(Ee):Wt;lr.length&&(nl(),we(lr))}}function wc(E,ne){E?(Kf(),nl(E)):ne&&Wn()}function tg(E,ne){E&&Z_(),ne&&Z_()}function Fl(E,ne,Ee){if(Ee&2||_e){if(Ee&65536)return 1;if(ne===void 0)return!E||C&&DT(E,C)?0:1;if(ne.pos===ge||ne.kind===11)return 0;if(C&&E&&!vp(E.pos)&&!ws(ne)&&(!ne.parent||ec(ne.parent)===ec(E)))return _e?nd(Wt=>ole(ne.pos,E.pos,C,Wt)):a4(E,ne,C)?0:1;if(Wb(ne,Ee))return 1}return Ee&1?1:0}function qf(E,ne,Ee){if(Ee&2||_e){if(E===void 0||ne===void 0||ne.kind===11)return 0;if(C&&!ws(E)&&!ws(ne))return _e&&ch(E,ne)?nd(Wt=>pW(E,ne,C,Wt)):!_e&&wv(E,ne)?DR(E,ne,C)?0:1:Ee&65536?1:0;if(Wb(E,Ee)||Wb(ne,Ee))return 1}else if(tO(ne))return 1;return Ee&1?1:0}function bm(E,ne,Ee,Wt){if(Ee&2||_e){if(Ee&65536)return 1;if(ne===void 0)return!E||C&&DT(E,C)?0:1;if(C&&E&&!vp(E.pos)&&!ws(ne)&&(!ne.parent||ne.parent===E)){if(_e){let lr=Wt&&!vp(Wt.end)?Wt.end:ne.end;return nd(ci=>sle(lr,E.end,C,ci))}return rle(E,ne,C)?0:1}if(Wb(ne,Ee))return 1}return Ee&1&&!(Ee&131072)?1:0}function nd(E){L.assert(!!_e);let ne=E(!0);return ne===0?E(!1):ne}function TE(E,ne){let Ee=_e&&Fl(ne,E,0);return Ee&&wc(Ee,!1),!!Ee}function Hb(E,ne){let Ee=_e&&bm(ne,E,0,void 0);Ee&&nl(Ee)}function Wb(E,ne){if(ws(E)){let Ee=tO(E);return Ee===void 0?(ne&65536)!==0:Ee}return(ne&65536)!==0}function ep(E,ne,Ee){return Ya(E)&262144?0:(E=SE(E),ne=SE(ne),Ee=SE(Ee),tO(Ee)?1:C&&!ws(E)&&!ws(ne)&&!ws(Ee)?_e?nd(Wt=>pW(ne,Ee,C,Wt)):DR(ne,Ee,C)?0:1:0)}function rh(E){return E.statements.length===0&&(!C||DR(E,E,C))}function SE(E){for(;E.kind===214&&ws(E);)E=E.expression;return E}function oy(E,ne){if(tc(E)||tS(E))return zb(E);if(yo(E)&&E.textSourceNode)return oy(E.textSourceNode,ne);let Ee=C,Wt=!!Ee&&!!E.parent&&!ws(E);if(Ah(E)){if(!Wt||Gn(E)!==ec(Ee))return vr(E)}else if(L.assertNode(E,fT),!Wt)return E.text;return k0(Ee,E,ne)}function uc(E,ne,Ee){if(E.kind===10&&E.textSourceNode){let lr=E.textSourceNode;if(Re(lr)||pi(lr)||Vf(lr)){let ci=Vf(lr)?lr.text:oy(lr);return Ee?`\"${qH(ci)}\"`:ne||Ya(E)&33554432?`\"${_S(ci)}\"`:`\"${ER(ci)}\"`}else return uc(lr,ne,Ee)}let Wt=(ne?1:0)|(Ee?2:0)|(e.terminateUnterminatedLiterals?4:0)|(e.target&&e.target===99?8:0);return Bse(E,C,Wt)}function ng(E){E&&Ya(E)&1048576||($.push(fe),fe=0,W.push(Y),Y=void 0,Z.push(U))}function ih(E){E&&Ya(E)&1048576||(fe=$.pop(),Y=W.pop(),U=Z.pop())}function Cv(E){(!U||U===Os(Z))&&(U=new Set),U.add(E)}function Iv(E,ne){R.push(ie),ie=E,re.push(U),le=ne}function Gl(){ie=R.pop(),le=re.pop()}function ah(E){(!le||le===Os(re))&&(le=new Set),le.add(E)}function qc(E){if(E)switch(E.kind){case 238:mn(E.statements,qc);break;case 253:case 251:case 243:case 244:qc(E.statement);break;case 242:qc(E.thenStatement),qc(E.elseStatement);break;case 245:case 247:case 246:qc(E.initializer),qc(E.statement);break;case 252:qc(E.caseBlock);break;case 266:mn(E.clauses,qc);break;case 292:case 293:mn(E.statements,qc);break;case 255:qc(E.tryBlock),qc(E.catchClause),qc(E.finallyBlock);break;case 295:qc(E.variableDeclaration),qc(E.block);break;case 240:qc(E.declarationList);break;case 258:mn(E.declarations,qc);break;case 257:case 166:case 205:case 260:oh(E.name);break;case 259:oh(E.name),Ya(E)&1048576&&(mn(E.parameters,qc),qc(E.body));break;case 203:case 204:mn(E.elements,qc);break;case 269:qc(E.importClause);break;case 270:oh(E.name),qc(E.namedBindings);break;case 271:oh(E.name);break;case 277:oh(E.name);break;case 272:mn(E.elements,qc);break;case 273:oh(E.propertyName||E.name);break}}function xE(E){if(E)switch(E.kind){case 299:case 300:case 169:case 171:case 174:case 175:oh(E.name);break}}function oh(E){E&&(tc(E)||tS(E)?zb(E):La(E)&&qc(E))}function zb(E){let ne=E.emitNode.autoGenerate;if((ne.flags&7)===4)return Vu(I3(E),pi(E),ne.flags,ne.prefix,ne.suffix);{let Ee=ne.id;return B[Ee]||(B[Ee]=fr(E))}}function Vu(E,ne,Ee,Wt,lr){let ci=zo(E),qr=ne?F:P;return qr[ci]||(qr[ci]=No(E,ne,Ee??0,L2(Wt,zb),L2(lr)))}function Em(E,ne){return Lv(E,ne)&&!Jb(E,ne)&&!q.has(E)}function Jb(E,ne){return ne?!!le?.has(E):!!U?.has(E)}function Lv(E,ne){return C?g6(C,E,r):!0}function AE(E,ne){for(let Ee=ne;Ee&&AT(Ee,ne);Ee=Ee.nextContainer)if(Qp(Ee)&&Ee.locals){let Wt=Ee.locals.get(Bs(E));if(Wt&&Wt.flags&3257279)return!1}return!0}function sy(E){var ne;switch(E){case\"\":return fe;case\"#\":return ie;default:return(ne=Y?.get(E))!=null?ne:0}}function C1(E,ne){switch(E){case\"\":fe=ne;break;case\"#\":ie=ne;break;default:Y??(Y=new Map),Y.set(E,ne);break}}function kv(E,ne,Ee,Wt,lr){Wt.length>0&&Wt.charCodeAt(0)===35&&(Wt=Wt.slice(1));let ci=jT(Ee,Wt,\"\",lr),qr=sy(ci);if(E&&!(qr&E)){let Wa=jT(Ee,Wt,E===268435456?\"_i\":\"_n\",lr);if(Em(Wa,Ee))return qr|=E,Ee?ah(Wa):ne&&Cv(Wa),C1(ci,qr),Wa}for(;;){let Ti=qr&268435455;if(qr++,Ti!==8&&Ti!==13){let Wa=Ti<26?\"_\"+String.fromCharCode(97+Ti):\"_\"+(Ti-26),kl=jT(Ee,Wt,Wa,lr);if(Em(kl,Ee))return Ee?ah(kl):ne&&Cv(kl),C1(ci,qr),kl}}}function rg(E,ne=Em,Ee,Wt,lr,ci,qr){if(E.length>0&&E.charCodeAt(0)===35&&(E=E.slice(1)),ci.length>0&&ci.charCodeAt(0)===35&&(ci=ci.slice(1)),Ee){let Wa=jT(lr,ci,E,qr);if(ne(Wa,lr))return lr?ah(Wa):Wt?Cv(Wa):q.add(Wa),Wa}E.charCodeAt(E.length-1)!==95&&(E+=\"_\");let Ti=1;for(;;){let Wa=jT(lr,ci,E+Ti,qr);if(ne(Wa,lr))return lr?ah(Wa):Wt?Cv(Wa):q.add(Wa),Wa;Ti++}}function of(E){return rg(E,Lv,!0,!1,!1,\"\",\"\")}function CE(E){let ne=oy(E.name);return AE(ne,zr(E,Qp))?ne:rg(ne,Em,!1,!1,!1,\"\",\"\")}function Gd(E){let ne=UA(E),Ee=yo(ne)?Vse(ne.text):\"module\";return rg(Ee,Em,!1,!1,!1,\"\",\"\")}function sh(){return rg(\"default\",Em,!1,!1,!1,\"\",\"\")}function Dv(){return rg(\"class\",Em,!1,!1,!1,\"\",\"\")}function Dx(E,ne,Ee,Wt){return Re(E.name)?Vu(E.name,ne):kv(0,!1,ne,Ee,Wt)}function No(E,ne,Ee,Wt,lr){switch(E.kind){case 79:case 80:return rg(oy(E),Em,!!(Ee&16),!!(Ee&8),ne,Wt,lr);case 264:case 263:return L.assert(!Wt&&!lr&&!ne),CE(E);case 269:case 275:return L.assert(!Wt&&!lr&&!ne),Gd(E);case 259:case 260:{L.assert(!Wt&&!lr&&!ne);let ci=E.name;return ci&&!tc(ci)?No(ci,!1,Ee,Wt,lr):sh()}case 274:return L.assert(!Wt&&!lr&&!ne),sh();case 228:return L.assert(!Wt&&!lr&&!ne),Dv();case 171:case 174:case 175:return Dx(E,ne,Wt,lr);case 164:return kv(0,!0,ne,Wt,lr);default:return kv(0,!1,ne,Wt,lr)}}function fr(E){let ne=E.emitNode.autoGenerate,Ee=L2(ne.prefix,zb),Wt=L2(ne.suffix);switch(ne.flags&7){case 1:return kv(0,!!(ne.flags&8),pi(E),Ee,Wt);case 2:return L.assertNode(E,Re),kv(268435456,!!(ne.flags&8),!1,Ee,Wt);case 3:return rg(vr(E),ne.flags&32?Lv:Em,!!(ne.flags&16),!!(ne.flags&8),pi(E),Ee,Wt)}return L.fail(`Unsupported GeneratedIdentifierKind: ${L.formatEnum(ne.flags&7,w8,!0)}.`)}function vd(E,ne){let Ee=pe(2,E,ne),Wt=qe,lr=zt,ci=Qt;ju(ne),Ee(E,ne),I1(ne,Wt,lr,ci)}function ju(E){let ne=Ya(E),Ee=sm(E);IE(E,ne,Ee.pos,Ee.end),ne&4096&&(Gt=!0)}function I1(E,ne,Ee,Wt){let lr=Ya(E),ci=sm(E);lr&4096&&(Gt=!1),cy(E,lr,ci.pos,ci.end,ne,Ee,Wt);let qr=vue(E);qr&&cy(E,lr,qr.pos,qr.end,ne,Ee,Wt)}function IE(E,ne,Ee,Wt){Ni(),_n=!1;let lr=Ee<0||(ne&1024)!==0||E.kind===11,ci=Wt<0||(ne&2048)!==0||E.kind===11;(Ee>0||Wt>0)&&Ee!==Wt&&(lr||Rp(Ee,E.kind!==355),(!lr||Ee>=0&&ne&1024)&&(qe=Ee),(!ci||Wt>=0&&ne&2048)&&(zt=Wt,E.kind===258&&(Qt=Wt))),mn(l2(E),wx),Pi()}function cy(E,ne,Ee,Wt,lr,ci,qr){Ni();let Ti=Wt<0||(ne&2048)!==0||E.kind===11;mn(rO(E),ly),(Ee>0||Wt>0)&&Ee!==Wt&&(qe=lr,zt=ci,Qt=qr,!Ti&&E.kind!==355&&LE(Wt)),Pi()}function wx(E){(E.hasLeadingNewline||E.kind===2)&&X.writeLine(),wp(E),E.hasTrailingNewLine||E.kind===2?X.writeLine():X.writeSpace(\" \")}function ly(E){X.isAtStartOfLine()||X.writeSpace(\" \"),wp(E),E.hasTrailingNewLine&&X.writeLine()}function wp(E){let ne=tp(E),Ee=E.kind===3?hw(ne):void 0;$A(ne,Ee,X,0,ne.length,x)}function tp(E){return E.kind===3?`/*${E.text}*/`:`//${E.text}`}function ig(E,ne,Ee){Ni();let{pos:Wt,end:lr}=ne,ci=Ya(E),qr=Wt<0||(ci&1024)!==0,Ti=Gt||lr<0||(ci&2048)!==0;qr||Rv(ne),Pi(),ci&4096&&!Gt?(Gt=!0,Ee(E),Gt=!1):Ee(E),Ni(),Ti||(Rp(ne.end,!0),_n&&!X.isAtStartOfLine()&&X.writeLine()),Pi()}function wv(E,ne){return E=ec(E),E.parent&&E.parent===ec(ne).parent}function ch(E,ne){if(ne.pos<E.end)return!1;E=ec(E),ne=ec(ne);let Ee=E.parent;if(!Ee||Ee!==ne.parent)return!1;let Wt=Ule(E),lr=Wt?.indexOf(E);return lr!==void 0&&lr>-1&&Wt.indexOf(ne)===lr+1}function Rp(E,ne){_n=!1,ne?E===0&&C?.isDeclarationFile?ls(E,Cc):ls(E,Tm):E===0&&ls(E,L1)}function L1(E,ne,Ee,Wt,lr){wE(E,ne)&&Tm(E,ne,Ee,Wt,lr)}function Cc(E,ne,Ee,Wt,lr){wE(E,ne)||Tm(E,ne,Ee,Wt,lr)}function Bd(E,ne){return e.onlyPrintJsDocStyle?cJ(E,ne)||y6(E,ne):!0}function Tm(E,ne,Ee,Wt,lr){!C||!Bd(C.text,E)||(_n||(Uce(je(),X,lr,E),_n=!0),bd(E),$A(C.text,je(),X,E,ne,x),bd(ne),Wt?X.writeLine():Ee===3&&X.writeSpace(\" \"))}function rd(E){Gt||E===-1||Rp(E,!0)}function LE(E){kE(E,uy)}function uy(E,ne,Ee,Wt){!C||!Bd(C.text,E)||(X.isAtStartOfLine()||X.writeSpace(\" \"),bd(E),$A(C.text,je(),X,E,ne,x),bd(ne),Wt&&X.writeLine())}function ag(E,ne,Ee){Gt||(Ni(),kE(E,ne?uy:Ee?Rx:sf),Pi())}function Rx(E,ne,Ee){C&&(bd(E),$A(C.text,je(),X,E,ne,x),bd(ne),Ee===2&&X.writeLine())}function sf(E,ne,Ee,Wt){C&&(bd(E),$A(C.text,je(),X,E,ne,x),bd(ne),Wt?X.writeLine():X.writeSpace(\" \"))}function ls(E,ne){C&&(qe===-1||E!==qe)&&(DE(E)?og(ne):vw(C.text,E,ne,E))}function kE(E,ne){C&&(zt===-1||E!==zt&&E!==Qt)&&bw(C.text,E,ne)}function DE(E){return kn!==void 0&&To(kn).nodePos===E}function og(E){if(!C)return;let ne=To(kn).detachedCommentEndPos;kn.length-1?kn.pop():kn=void 0,vw(C.text,ne,E,ne)}function Rv(E){let ne=C&&jce(C.text,je(),X,k1,E,x,Gt);ne&&(kn?kn.push(ne):kn=[ne])}function k1(E,ne,Ee,Wt,lr,ci){!C||!Bd(C.text,Wt)||(bd(Wt),$A(E,ne,Ee,Wt,lr,ci),bd(lr))}function wE(E,ne){return!!C&&iH(C.text,E,ne)}function RE(E){return E.parsedSourceMap===void 0&&E.sourceMapText!==void 0&&(E.parsedSourceMap=bK(E.sourceMapText)||!1),E.parsedSourceMap||void 0}function OE(E,ne){let Ee=pe(3,E,ne);NE(ne),Ee(E,ne),PE(ne)}function NE(E){let ne=Ya(E),Ee=pb(E);if(Oj(E)){L.assertIsDefined(E.parent,\"UnparsedNodes must have parent pointers\");let Wt=RE(E.parent);Wt&&Ye&&Ye.appendSourceMap(X.getLine(),X.getColumn(),Wt,E.parent.sourceMapPath,E.parent.getLineAndCharacterOfPosition(E.pos),E.parent.getLineAndCharacterOfPosition(E.end))}else{let Wt=Ee.source||_t;E.kind!==355&&!(ne&32)&&Ee.pos>=0&&lh(Ee.source||_t,dy(Wt,Ee.pos)),ne&128&&(Le=!0)}}function PE(E){let ne=Ya(E),Ee=pb(E);Oj(E)||(ne&128&&(Le=!1),E.kind!==355&&!(ne&64)&&Ee.end>=0&&lh(Ee.source||_t,Ee.end))}function dy(E,ne){return E.skipTrivia?E.skipTrivia(ne):xo(E.text,ne)}function bd(E){if(Le||vp(E)||Nx(_t))return;let{line:ne,character:Ee}=Gs(_t,E);Ye.addMapping(X.getLine(),X.getColumn(),ct,ne,Ee,void 0)}function lh(E,ne){if(E!==_t){let Ee=_t,Wt=ct;sg(E),bd(ne),Ox(Ee,Wt)}else bd(ne)}function dC(E,ne,Ee,Wt,lr){if(Le||E&&B6(E))return lr(ne,Ee,Wt);let ci=E&&E.emitNode,qr=ci&&ci.flags||0,Ti=ci&&ci.tokenSourceMapRanges&&ci.tokenSourceMapRanges[ne],Wa=Ti&&Ti.source||_t;return Wt=dy(Wa,Ti?Ti.pos:Wt),!(qr&256)&&Wt>=0&&lh(Wa,Wt),Wt=lr(ne,Ee,Wt),Ti&&(Wt=Ti.end),!(qr&512)&&Wt>=0&&lh(Wa,Wt),Wt}function sg(E){if(!Le){if(_t=E,E===Rt){ct=We;return}Nx(E)||(ct=Ye.addSource(E.fileName),e.inlineSources&&Ye.setSourceContent(ct,E.text),Rt=E,We=ct)}}function Ox(E,ne){_t=E,ct=ne}function Nx(E){return Gc(E.fileName,\".json\")}}function jMe(){let e=[];return e[1024]=[\"{\",\"}\"],e[2048]=[\"(\",\")\"],e[4096]=[\"<\",\">\"],e[8192]=[\"[\",\"]\"],e}function HMe(e){return KK[e&15360][0]}function WMe(e){return KK[e&15360][1]}function zMe(e,t,r,i){t(e)}function JMe(e,t,r,i){t(e,r.select(i))}function KMe(e,t,r,i){t(e,r)}function qMe(e,t){return e.length===1?zMe:typeof t==\"object\"?JMe:KMe}var KK,LF,qK,rE,XK,fN,XMe=gt({\"src/compiler/emitter.ts\"(){\"use strict\";fa(),fa(),E0(),KK=jMe(),LF={hasGlobalName:Sa,getReferencedExportContainer:Sa,getReferencedImportDeclaration:Sa,getReferencedDeclarationWithCollidingName:Sa,isDeclarationWithCollidingName:Sa,isValueAliasDeclaration:Sa,isReferencedAliasDeclaration:Sa,isTopLevelValueImportEqualsWithEntityName:Sa,getNodeCheckFlags:Sa,isDeclarationVisible:Sa,isLateBound:e=>!1,collectLinkedAliases:Sa,isImplementationOfOverload:Sa,isRequiredInitializedParameter:Sa,isOptionalUninitializedParameterProperty:Sa,isExpandoFunctionDeclaration:Sa,getPropertiesOfContainerFunction:Sa,createTypeOfDeclaration:Sa,createReturnTypeOfSignatureDeclaration:Sa,createTypeOfExpression:Sa,createLiteralConstValue:Sa,isSymbolAccessible:Sa,isEntityNameVisible:Sa,getConstantValue:Sa,getReferencedValueDeclaration:Sa,getTypeReferenceSerializationKind:Sa,isOptionalParameter:Sa,moduleExportsSomeValue:Sa,isArgumentsLocalBinding:Sa,getExternalModuleFileFromDeclaration:Sa,getTypeReferenceDirectivesForEntityName:Sa,getTypeReferenceDirectivesForSymbol:Sa,isLiteralConstDeclaration:Sa,getJsxFactoryEntity:Sa,getJsxFragmentFactoryEntity:Sa,getAllAccessorDeclarations:Sa,getSymbolOfExternalModuleSpecifier:Sa,isBindingCapturedByNode:Sa,getDeclarationStatementsForSourceFile:Sa,isImportRequiredByAugmentation:Sa},qK=zu(()=>nE({})),rE=zu(()=>nE({removeComments:!0})),XK=zu(()=>nE({removeComments:!0,neverAsciiEscape:!0})),fN=zu(()=>nE({removeComments:!0,omitTrailingSemicolon:!0}))}});function Mpe(e,t,r){if(!e.getDirectories||!e.readDirectory)return;let i=new Map,o=Dl(r);return{useCaseSensitiveFileNames:r,fileExists:x,readFile:(R,ie)=>e.readFile(R,ie),directoryExists:e.directoryExists&&A,getDirectories:C,readDirectory:P,createDirectory:e.createDirectory&&w,writeFile:e.writeFile&&S,addOrDeleteFileOrDirectory:B,addOrDeleteFile:q,clearCache:Y,realpath:e.realpath&&F};function s(R){return Ts(R,t,o)}function l(R){return i.get(cu(R))}function f(R){let ie=l(ni(R));return ie&&(ie.sortedAndCanonicalizedFiles||(ie.sortedAndCanonicalizedFiles=ie.files.map(o).sort(),ie.sortedAndCanonicalizedDirectories=ie.directories.map(o).sort()),ie)}function d(R){return Hl(So(R))}function g(R,ie){var $;if(!e.realpath||cu(s(e.realpath(R)))===ie){let fe={files:on(e.readDirectory(R,void 0,void 0,[\"*.*\"]),d)||[],directories:e.getDirectories(R)||[]};return i.set(cu(ie),fe),fe}if(($=e.directoryExists)!=null&&$.call(e,R))return i.set(ie,!1),!1}function m(R,ie){ie=cu(ie);let $=l(ie);if($)return $;try{return g(R,ie)}catch{L.assert(!i.has(cu(ie)));return}}function v(R,ie){return Py(R,ie,Ks,su)>=0}function S(R,ie,$){let fe=s(R),Z=f(fe);return Z&&W(Z,d(R),!0),e.writeFile(R,ie,$)}function x(R){let ie=s(R),$=f(ie);return $&&v($.sortedAndCanonicalizedFiles,o(d(R)))||e.fileExists(R)}function A(R){let ie=s(R);return i.has(cu(ie))||e.directoryExists(R)}function w(R){let ie=s(R),$=f(ie);if($){let fe=d(R),Z=o(fe),U=$.sortedAndCanonicalizedDirectories;Ny(U,Z,su)&&$.directories.push(fe)}e.createDirectory(R)}function C(R){let ie=s(R),$=m(R,ie);return $?$.directories.slice():e.getDirectories(R)}function P(R,ie,$,fe,Z){let U=s(R),re=m(R,U),le;if(re!==void 0)return wW(R,ie,$,fe,r,t,Z,_e,F);return e.readDirectory(R,ie,$,fe,Z);function _e(X){let Ve=s(X);if(Ve===U)return re||ge(X,Ve);let we=m(X,Ve);return we!==void 0?we||ge(X,Ve):D4}function ge(X,Ve){if(le&&Ve===U)return le;let we={files:on(e.readDirectory(X,void 0,void 0,[\"*.*\"]),d)||Je,directories:e.getDirectories(X)||Je};return Ve===U&&(le=we),we}}function F(R){return e.realpath?e.realpath(R):R}function B(R,ie){if(l(ie)!==void 0){Y();return}let fe=f(ie);if(!fe)return;if(!e.directoryExists){Y();return}let Z=d(R),U={fileExists:e.fileExists(ie),directoryExists:e.directoryExists(ie)};return U.directoryExists||v(fe.sortedAndCanonicalizedDirectories,o(Z))?Y():W(fe,Z,U.fileExists),U}function q(R,ie,$){if($===1)return;let fe=f(ie);fe&&W(fe,d(R),$===0)}function W(R,ie,$){let fe=R.sortedAndCanonicalizedFiles,Z=o(ie);if($)Ny(fe,Z,su)&&R.files.push(ie);else{let U=Py(fe,Z,Ks,su);if(U>=0){fe.splice(U,1);let re=R.files.findIndex(le=>o(le)===Z);R.files.splice(re,1)}}}function Y(){i.clear()}}function YK(e,t,r,i,o){var s;let l=p0(((s=t?.configFile)==null?void 0:s.extendedSourceFiles)||Je,o);r.forEach((f,d)=>{l.has(d)||(f.projects.delete(e),f.close())}),l.forEach((f,d)=>{let g=r.get(d);g?g.projects.add(e):r.set(d,{projects:new Set([e]),watcher:i(f,d),close:()=>{let m=r.get(d);!m||m.projects.size!==0||(m.watcher.close(),r.delete(d))}})})}function Fpe(e,t){t.forEach(r=>{r.projects.delete(e)&&r.close()})}function $K(e,t,r){e.delete(t)&&e.forEach(({extendedResult:i},o)=>{var s;(s=i.extendedSourceFiles)!=null&&s.some(l=>r(l)===t)&&$K(e,o,r)})}function YMe(e,t,r){let i=new Map(e);e2(t,i,{createNewValue:r,onDeleteValue:am})}function Gpe(e,t,r){let i=e.getMissingFilePaths(),o=p0(i,Ks,h0);e2(t,o,{createNewValue:r,onDeleteValue:am})}function kF(e,t,r){e2(e,t,{createNewValue:i,onDeleteValue:_m,onExistingValue:o});function i(s,l){return{watcher:r(s,l),flags:l}}function o(s,l,f){s.flags!==l&&(s.watcher.close(),e.set(f,i(f,l)))}}function DF({watchedDirPath:e,fileOrDirectory:t,fileOrDirectoryPath:r,configFileName:i,options:o,program:s,extraFileExtensions:l,currentDirectory:f,useCaseSensitiveFileNames:d,writeLog:g,toPath:m}){let v=Dq(r);if(!v)return g(`Project: ${i} Detected ignored path: ${t}`),!0;if(r=v,r===e)return!1;if(gA(r)&&!wle(t,o,l))return g(`Project: ${i} Detected file add/remove of non supported extension: ${t}`),!0;if(gfe(t,o.configFile.configFileSpecs,_a(ni(i),f),d,f))return g(`Project: ${i} Detected excluded file: ${t}`),!0;if(!s||Ss(o)||o.outDir)return!1;if(Fu(r)){if(o.declarationDir)return!1}else if(!$c(r,dL))return!1;let S=ld(r),x=ba(s)?void 0:$Me(s)?s.getProgramOrUndefined():s,A=!x&&!ba(s)?s:void 0;if(w(S+\".ts\")||w(S+\".tsx\"))return g(`Project: ${i} Detected output file: ${t}`),!0;return!1;function w(C){return x?!!x.getSourceFileByPath(C):A?A.getState().fileInfos.has(C):!!wr(s,P=>m(P)===C)}}function $Me(e){return!!e.getState}function Bpe(e,t){return e?e.isEmittedFile(t):!1}function Upe(e,t,r,i){ooe(t===2?r:Ba);let o={watchFile:(w,C,P,F)=>e.watchFile(w,C,P,F),watchDirectory:(w,C,P,F)=>e.watchDirectory(w,C,(P&1)!==0,F)},s=t!==0?{watchFile:x(\"watchFile\"),watchDirectory:x(\"watchDirectory\")}:void 0,l=t===2?{watchFile:v,watchDirectory:S}:s||o,f=t===2?m:TN;return{watchFile:d(\"watchFile\"),watchDirectory:d(\"watchDirectory\")};function d(w){return(C,P,F,B,q,W)=>{var Y;return G3(C,w===\"watchFile\"?B?.excludeFiles:B?.excludeDirectories,g(),((Y=e.getCurrentDirectory)==null?void 0:Y.call(e))||\"\")?f(C,F,B,q,W):l[w].call(void 0,C,P,F,B,q,W)}}function g(){return typeof e.useCaseSensitiveFileNames==\"boolean\"?e.useCaseSensitiveFileNames:e.useCaseSensitiveFileNames()}function m(w,C,P,F,B){return r(`ExcludeWatcher:: Added:: ${A(w,C,P,F,B,i)}`),{close:()=>r(`ExcludeWatcher:: Close:: ${A(w,C,P,F,B,i)}`)}}function v(w,C,P,F,B,q){r(`FileWatcher:: Added:: ${A(w,P,F,B,q,i)}`);let W=s.watchFile(w,C,P,F,B,q);return{close:()=>{r(`FileWatcher:: Close:: ${A(w,P,F,B,q,i)}`),W.close()}}}function S(w,C,P,F,B,q){let W=`DirectoryWatcher:: Added:: ${A(w,P,F,B,q,i)}`;r(W);let Y=Ms(),R=s.watchDirectory(w,C,P,F,B,q),ie=Ms()-Y;return r(`Elapsed:: ${ie}ms ${W}`),{close:()=>{let $=`DirectoryWatcher:: Close:: ${A(w,P,F,B,q,i)}`;r($);let fe=Ms();R.close();let Z=Ms()-fe;r(`Elapsed:: ${Z}ms ${$}`)}}}function x(w){return(C,P,F,B,q,W)=>o[w].call(void 0,C,(...Y)=>{let R=`${w===\"watchFile\"?\"FileWatcher\":\"DirectoryWatcher\"}:: Triggered with ${Y[0]} ${Y[1]!==void 0?Y[1]:\"\"}:: ${A(C,F,B,q,W,i)}`;r(R);let ie=Ms();P.call(void 0,...Y);let $=Ms()-ie;r(`Elapsed:: ${$}ms ${R}`)},F,B,q,W)}function A(w,C,P,F,B,q){return`WatchInfo: ${w} ${C} ${JSON.stringify(P)} ${q?q(F,B):B===void 0?F:`${F} ${B}`}`}}function _N(e){let t=e?.fallbackPolling;return{watchFile:t!==void 0?t:1}}function _m(e){e.watcher.close()}var QK,ZK,QMe=gt({\"src/compiler/watchUtilities.ts\"(){\"use strict\";fa(),fa(),QK=(e=>(e[e.None=0]=\"None\",e[e.Partial=1]=\"Partial\",e[e.Full=2]=\"Full\",e))(QK||{}),ZK=(e=>(e[e.None=0]=\"None\",e[e.TriggerOnly=1]=\"TriggerOnly\",e[e.Verbose=2]=\"Verbose\",e))(ZK||{})}});function Vpe(e,t,r=\"tsconfig.json\"){return Th(e,i=>{let o=vi(i,r);return t(o)?o:void 0})}function wF(e,t){let r=ni(t),i=qp(e)?e:vi(r,e);return So(i)}function jpe(e,t,r){let i;return mn(e,s=>{let l=fw(s,t);if(l.pop(),!i){i=l;return}let f=Math.min(i.length,l.length);for(let d=0;d<f;d++)if(r(i[d])!==r(l[d])){if(d===0)return!0;i.length=d;break}l.length<i.length&&(i.length=l.length)})?\"\":i?T0(i):t}function Hpe(e,t){return nq(e,t)}function eq(e,t,r){return(i,o,s)=>{let l;try{Fs(\"beforeIORead\"),l=e(i,t().charset),Fs(\"afterIORead\"),hf(\"I/O Read\",\"beforeIORead\",\"afterIORead\")}catch(f){s&&s(f.message),l=\"\"}return l!==void 0?DO(i,l,o,r):void 0}}function tq(e,t,r){return(i,o,s,l)=>{try{Fs(\"beforeIOWrite\"),nW(i,o,s,e,t,r),Fs(\"afterIOWrite\"),hf(\"I/O Write\",\"beforeIOWrite\",\"afterIOWrite\")}catch(f){l&&l(f.message)}}}function nq(e,t,r=xl){let i=new Map,o=Dl(r.useCaseSensitiveFileNames);function s(m){return i.has(m)?!0:(g.directoryExists||r.directoryExists)(m)?(i.set(m,!0),!0):!1}function l(){return ni(So(r.getExecutingFilePath()))}let f=db(e),d=r.realpath&&(m=>r.realpath(m)),g={getSourceFile:eq(m=>g.readFile(m),()=>e,t),getDefaultLibLocation:l,getDefaultLibFileName:m=>vi(l(),X8(m)),writeFile:tq((m,v,S)=>r.writeFile(m,v,S),m=>(g.createDirectory||r.createDirectory)(m),m=>s(m)),getCurrentDirectory:zu(()=>r.getCurrentDirectory()),useCaseSensitiveFileNames:()=>r.useCaseSensitiveFileNames,getCanonicalFileName:o,getNewLine:()=>f,fileExists:m=>r.fileExists(m),readFile:m=>r.readFile(m),trace:m=>r.write(m+f),directoryExists:m=>r.directoryExists(m),getEnvironmentVariable:m=>r.getEnvironmentVariable?r.getEnvironmentVariable(m):\"\",getDirectories:m=>r.getDirectories(m),realpath:d,readDirectory:(m,v,S,x,A)=>r.readDirectory(m,v,S,x,A),createDirectory:m=>r.createDirectory(m),createHash:ho(r,r.createHash)};return g}function pN(e,t,r){let i=e.readFile,o=e.fileExists,s=e.directoryExists,l=e.createDirectory,f=e.writeFile,d=new Map,g=new Map,m=new Map,v=new Map,S=w=>{let C=t(w),P=d.get(C);return P!==void 0?P!==!1?P:void 0:x(C,w)},x=(w,C)=>{let P=i.call(e,C);return d.set(w,P!==void 0?P:!1),P};e.readFile=w=>{let C=t(w),P=d.get(C);return P!==void 0?P!==!1?P:void 0:!Gc(w,\".json\")&&!Ipe(w)?i.call(e,w):x(C,w)};let A=r?(w,C,P,F)=>{let B=t(w),q=typeof C==\"object\"?C.impliedNodeFormat:void 0,W=v.get(q),Y=W?.get(B);if(Y)return Y;let R=r(w,C,P,F);return R&&(Fu(w)||Gc(w,\".json\"))&&v.set(q,(W||new Map).set(B,R)),R}:void 0;return e.fileExists=w=>{let C=t(w),P=g.get(C);if(P!==void 0)return P;let F=o.call(e,w);return g.set(C,!!F),F},f&&(e.writeFile=(w,C,...P)=>{let F=t(w);g.delete(F);let B=d.get(F);B!==void 0&&B!==C?(d.delete(F),v.forEach(q=>q.delete(F))):A&&v.forEach(q=>{let W=q.get(F);W&&W.text!==C&&q.delete(F)}),f.call(e,w,C,...P)}),s&&(e.directoryExists=w=>{let C=t(w),P=m.get(C);if(P!==void 0)return P;let F=s.call(e,w);return m.set(C,!!F),F},l&&(e.createDirectory=w=>{let C=t(w);m.delete(C),l.call(e,w)})),{originalReadFile:i,originalFileExists:o,originalDirectoryExists:s,originalCreateDirectory:l,originalWriteFile:f,getSourceFileWithCache:A,readFileWithCache:S}}function ZMe(e,t,r){let i;return i=si(i,e.getConfigFileParsingDiagnostics()),i=si(i,e.getOptionsDiagnostics(r)),i=si(i,e.getSyntacticDiagnostics(t,r)),i=si(i,e.getGlobalDiagnostics(r)),i=si(i,e.getSemanticDiagnostics(t,r)),__(e.getCompilerOptions())&&(i=si(i,e.getDeclarationDiagnostics(t,r))),vA(i||Je)}function e8e(e,t){let r=\"\";for(let i of e)r+=rq(i,t);return r}function rq(e,t){let r=`${C8(e)} TS${e.code}: ${sv(e.messageText,t.getNewLine())}${t.getNewLine()}`;if(e.file){let{line:i,character:o}=Gs(e.file,e.start),s=e.file.fileName;return`${rI(s,t.getCurrentDirectory(),f=>t.getCanonicalFileName(f))}(${i+1},${o+1}): `+r}return r}function Wpe(e){switch(e){case 1:return\"\\x1B[91m\";case 0:return\"\\x1B[93m\";case 2:return L.fail(\"Should never get an Info diagnostic on the command line.\");case 3:return\"\\x1B[94m\"}}function iE(e,t){return t+e+mq}function zpe(e,t,r,i,o,s){let{line:l,character:f}=Gs(e,t),{line:d,character:g}=Gs(e,t+r),m=Gs(e,e.text.length).line,v=d-l>=4,S=(d+1+\"\").length;v&&(S=Math.max(hq.length,S));let x=\"\";for(let A=l;A<=d;A++){x+=s.getNewLine(),v&&l+1<A&&A<d-1&&(x+=i+iE(J1(hq,S),BF)+UF+s.getNewLine(),A=d-1);let w=gw(e,A,0),C=A<m?gw(e,A+1,0):e.text.length,P=e.text.slice(w,C);if(P=$D(P),P=P.replace(/\\t/g,\" \"),x+=i+iE(J1(A+1+\"\",S),BF)+UF,x+=P+s.getNewLine(),x+=i+iE(J1(\"\",S),BF)+UF,x+=o,A===l){let F=A===d?g:void 0;x+=P.slice(0,f).replace(/\\S/g,\" \"),x+=P.slice(f,F).replace(/./g,\"~\")}else A===d?x+=P.slice(0,g).replace(/./g,\"~\"):x+=P.replace(/./g,\"~\");x+=mq}return x}function iq(e,t,r,i=iE){let{line:o,character:s}=Gs(e,t),l=r?rI(e.fileName,r.getCurrentDirectory(),d=>r.getCanonicalFileName(d)):e.fileName,f=\"\";return f+=i(l,\"\\x1B[96m\"),f+=\":\",f+=i(`${o+1}`,\"\\x1B[93m\"),f+=\":\",f+=i(`${s+1}`,\"\\x1B[93m\"),f}function Jpe(e,t){let r=\"\";for(let i of e){if(i.file){let{file:o,start:s}=i;r+=iq(o,s,t),r+=\" - \"}if(r+=iE(C8(i),Wpe(i.category)),r+=iE(` TS${i.code}: `,\"\\x1B[90m\"),r+=sv(i.messageText,t.getNewLine()),i.file&&(r+=t.getNewLine(),r+=zpe(i.file,i.start,i.length,\"\",Wpe(i.category),t)),i.relatedInformation){r+=t.getNewLine();for(let{file:o,start:s,length:l,messageText:f}of i.relatedInformation)o&&(r+=t.getNewLine(),r+=Xpe+iq(o,s,t),r+=zpe(o,s,l,gq,\"\\x1B[96m\",t)),r+=t.getNewLine(),r+=gq+sv(f,t.getNewLine())}r+=t.getNewLine()}return r}function sv(e,t,r=0){if(Ta(e))return e;if(e===void 0)return\"\";let i=\"\";if(r){i+=t;for(let o=0;o<r;o++)i+=\"  \"}if(i+=e.messageText,r++,e.next)for(let o of e.next)i+=sv(o,t,r);return i}function mN(e,t){return(Ta(e)?t:e.resolutionMode)||t}function aq(e,t){if(e.impliedNodeFormat!==void 0)return W_(e,GF(e,t))}function oq(e){var t;return Il(e)?e.isTypeOnly:!!((t=e.importClause)!=null&&t.isTypeOnly)}function W_(e,t){var r,i;if(e.impliedNodeFormat===void 0)return;if((gl(t.parent)||Il(t.parent))&&oq(t.parent)){let l=qS(t.parent.assertClause);if(l)return l}if(t.parent.parent&&Mh(t.parent.parent)){let s=qS((r=t.parent.parent.assertions)==null?void 0:r.assertClause);if(s)return s}if(e.impliedNodeFormat!==99)return Dd(qy(t.parent))?99:1;let o=(i=qy(t.parent))==null?void 0:i.parent;return o&&Nl(o)?1:99}function qS(e,t){if(!e)return;if(Fn(e.elements)!==1){t?.(e,_.Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require);return}let r=e.elements[0];if(es(r.name)){if(r.name.text!==\"resolution-mode\"){t?.(r.name,_.resolution_mode_is_the_only_valid_key_for_type_import_assertions);return}if(es(r.value)){if(r.value.text!==\"import\"&&r.value.text!==\"require\"){t?.(r.value,_.resolution_mode_should_be_either_require_or_import);return}return r.value.text===\"import\"?99:1}}}function sq(e){return e.text}function cq(e,t,r,i,o){return{nameAndMode:QL,resolve:(s,l)=>FL(s,e,r,i,o,t,l)}}function RF(e){return Ta(e)?e:n_(e.fileName)}function OF(e,t,r,i,o){return{nameAndMode:yN,resolve:(s,l)=>HJ(s,e,r,i,t,o,l)}}function hN(e,t,r,i,o,s,l,f){if(e.length===0)return Je;let d=[],g=new Map,m=f(t,r,i,s,l);for(let v of e){let S=m.nameAndMode.getName(v),x=m.nameAndMode.getMode(v,o),A=ML(S,x),w=g.get(A);w||g.set(A,w=m.resolve(S,x)),d.push(w)}return d}function Kpe(e,t){return gN(void 0,e,(r,i)=>r&&t(r,i))}function gN(e,t,r,i){let o;return s(e,t,void 0);function s(l,f,d){if(i){let g=i(l,d);if(g)return g}return mn(f,(g,m)=>{if(g&&o?.has(g.sourceFile.path))return;let v=r(g,d,m);return v||!g?v:((o||(o=new Set)).add(g.sourceFile.path),s(g.commandLine.projectReferences,g.references,g))})}}function vb(e){switch(e?.kind){case 3:case 4:case 5:case 7:return!0;default:return!1}}function F2(e){return e.pos!==void 0}function YL(e,t){var r,i,o,s,l,f;let d=L.checkDefined(e(t.file)),{kind:g,index:m}=t,v,S,x,A;switch(g){case 3:let w=GF(d,m);if(x=(o=(i=(r=d.resolvedModules)==null?void 0:r.get(w.text,aq(d,m)))==null?void 0:i.resolvedModule)==null?void 0:o.packageId,w.pos===-1)return{file:d,packageId:x,text:w.text};v=xo(d.text,w.pos),S=w.end;break;case 4:({pos:v,end:S}=d.referencedFiles[m]);break;case 5:({pos:v,end:S,resolutionMode:A}=d.typeReferenceDirectives[m]),x=(f=(l=(s=d.resolvedTypeReferenceDirectiveNames)==null?void 0:s.get(n_(d.typeReferenceDirectives[m].fileName),A||d.impliedNodeFormat))==null?void 0:l.resolvedTypeReferenceDirective)==null?void 0:f.packageId;break;case 7:({pos:v,end:S}=d.libReferenceDirectives[m]);break;default:return L.assertNever(g)}return{file:d,pos:v,end:S,packageId:x}}function lq(e,t,r,i,o,s,l,f,d){if(!e||l?.()||!up(e.getRootFileNames(),t))return!1;let g;if(!up(e.getProjectReferences(),d,x)||e.getSourceFiles().some(v)||e.getMissingFilePaths().some(o))return!1;let m=e.getCompilerOptions();if(!gW(m,r))return!1;if(m.configFile&&r.configFile)return m.configFile.text===r.configFile.text;return!0;function v(w){return!S(w)||s(w.path)}function S(w){return w.version===i(w.resolvedPath,w.fileName)}function x(w,C,P){return tH(w,C)&&A(e.getResolvedProjectReferences()[P],w)}function A(w,C){if(w){if(ya(g,w))return!0;let F=$L(C),B=f(F);return!B||w.commandLine.options.configFile!==B.options.configFile||!up(w.commandLine.fileNames,B.fileNames)?!1:((g||(g=[])).push(w),!mn(w.references,(q,W)=>!A(q,w.commandLine.projectReferences[W])))}let P=$L(C);return!f(P)}}function XT(e){return e.options.configFile?[...e.options.configFile.parseDiagnostics,...e.errors]:e.errors}function NF(e,t,r,i){let o=uq(e,t,r,i);return typeof o==\"object\"?o.impliedNodeFormat:o}function uq(e,t,r,i){switch($s(i)){case 3:case 99:return $c(e,[\".d.mts\",\".mts\",\".mjs\"])?99:$c(e,[\".d.cts\",\".cts\",\".cjs\"])?1:$c(e,[\".d.ts\",\".ts\",\".tsx\",\".js\",\".jsx\"])?o():void 0;default:return}function o(){let s=Z3(t,r,i),l=[];s.failedLookupLocations=l,s.affectingLocations=l;let f=eF(e,s);return{impliedNodeFormat:f?.contents.packageJsonContent.type===\"module\"?99:1,packageJsonLocations:l,packageJsonScope:f}}}function t8e(e,t){return e?LA(e.getCompilerOptions(),t,V3):!1}function n8e(e,t,r,i,o,s){return{rootNames:e,options:t,host:r,oldProgram:i,configFileParsingDiagnostics:o,typeScriptVersion:s}}function PF(e,t,r,i,o){var s,l,f,d,g,m,v,S,x,A,w,C,P,F,B,q;let W=ba(e)?n8e(e,t,r,i,o):e,{rootNames:Y,options:R,configFileParsingDiagnostics:ie,projectReferences:$,typeScriptVersion:fe}=W,{oldProgram:Z}=W,U=zu(()=>Jf(\"ignoreDeprecations\",_.Invalid_value_for_ignoreDeprecations)),re,le,_e,ge,X,Ve,we,ke=new Map,Pe=Nf(),Ce={},Ie={},Be=WT(),Ne,Le,Ye,_t=typeof R.maxNodeModuleJsDepth==\"number\"?R.maxNodeModuleJsDepth:0,ct=0,Rt=new Map,We=new Map;(s=ai)==null||s.push(ai.Phase.Program,\"createProgram\",{configFilePath:R.configFilePath,rootDir:R.rootDir},!0),Fs(\"beforeProgram\");let qe=W.host||Hpe(R),zt=FF(qe),Qt=R.noLib,tn=zu(()=>qe.getDefaultLibFileName(R)),kn=qe.getDefaultLibLocation?qe.getDefaultLibLocation():ni(tn()),_n=XA(),Gt=qe.getCurrentDirectory(),$n=nL(R),ui=FR(R,$n),Ni=new Map,Pi,gr,pt,nn=qe.hasInvalidatedResolutions||m0;qe.resolveModuleNameLiterals?(pt=qe.resolveModuleNameLiterals.bind(qe),gr=(l=qe.getModuleResolutionCache)==null?void 0:l.call(qe)):qe.resolveModuleNames?(pt=(be,De,mt,St,Zt,rn)=>qe.resolveModuleNames(be.map(sq),De,rn?.map(sq),mt,St,Zt).map(sn=>sn?sn.extension!==void 0?{resolvedModule:sn}:{resolvedModule:{...sn,extension:jR(sn.resolvedFileName)}}:yq),gr=(f=qe.getModuleResolutionCache)==null?void 0:f.call(qe)):(gr=Y3(Gt,ee,R),pt=(be,De,mt,St,Zt)=>hN(be,De,mt,St,Zt,qe,gr,cq));let Dt;if(qe.resolveTypeReferenceDirectiveReferences)Dt=qe.resolveTypeReferenceDirectiveReferences.bind(qe);else if(qe.resolveTypeReferenceDirectives)Dt=(be,De,mt,St,Zt)=>qe.resolveTypeReferenceDirectives(be.map(RF),De,mt,St,Zt?.impliedNodeFormat).map(rn=>({resolvedTypeReferenceDirective:rn}));else{let be=$3(Gt,ee,void 0,gr?.getPackageJsonInfoCache());Dt=(De,mt,St,Zt,rn)=>hN(De,mt,St,Zt,rn,qe,be,OF)}let pn=new Map,An=new Map,Kn=Nf(),hi=!1,ri=new Map,vn,Ht=qe.useCaseSensitiveFileNames()?new Map:void 0,En,dr,Cr,Se,at=!!((d=qe.useSourceOfProjectReferenceRedirect)!=null&&d.call(qe))&&!R.disableSourceOfProjectReferenceRedirect,{onProgramCreateComplete:Tt,fileExists:ve,directoryExists:nt}=r8e({compilerHost:qe,getSymlinkCache:oa,useSourceOfProjectReferenceRedirect:at,toPath:rt,getResolvedProjectReferences:Qe,getSourceOfProjectReferenceRedirect:Ws,forEachResolvedProjectReference:jo}),ce=qe.readFile.bind(qe);(g=ai)==null||g.push(ai.Phase.Program,\"shouldProgramCreateNewSourceFiles\",{hasOldProgram:!!Z});let Q=t8e(Z,R);(m=ai)==null||m.pop();let ue;if((v=ai)==null||v.push(ai.Phase.Program,\"tryReuseStructureFromOldProgram\",{}),ue=Te(),(S=ai)==null||S.pop(),ue!==2){if(re=[],le=[],$&&(En||(En=$.map(xt)),Y.length&&En?.forEach((be,De)=>{if(!be)return;let mt=Ss(be.commandLine.options);if(at){if(mt||Rl(be.commandLine.options)===0)for(let St of be.commandLine.fileNames)Yt(St,{kind:1,index:De})}else if(mt)Yt(V0(mt,\".d.ts\"),{kind:2,index:De});else if(Rl(be.commandLine.options)===0){let St=zu(()=>XL(be.commandLine,!qe.useCaseSensitiveFileNames()));for(let Zt of be.commandLine.fileNames)!Fu(Zt)&&!Gc(Zt,\".json\")&&Yt(qL(Zt,be.commandLine,!qe.useCaseSensitiveFileNames(),St),{kind:2,index:De})}})),(x=ai)==null||x.push(ai.Phase.Program,\"processRootFiles\",{count:Y.length}),mn(Y,(be,De)=>yc(be,!1,!1,{kind:0,index:De})),(A=ai)==null||A.pop(),Le??(Le=Y.length?X3(R,qe):Je),Ye=WT(),Le.length){(w=ai)==null||w.push(ai.Phase.Program,\"processTypeReferences\",{count:Le.length});let be=R.configFilePath?ni(R.configFilePath):qe.getCurrentDirectory(),De=vi(be,VF),mt=pe(Le,De);for(let St=0;St<Le.length;St++)Ye.set(Le[St],void 0,mt[St]),Et(Le[St],void 0,mt[St],{kind:8,typeReference:Le[St],packageId:(P=(C=mt[St])==null?void 0:C.resolvedTypeReferenceDirective)==null?void 0:P.packageId});(F=ai)==null||F.pop()}if(Y.length&&!Qt){let be=tn();!R.lib&&be?yc(be,!0,!1,{kind:6}):mn(R.lib,(De,mt)=>{yc(Ri(De),!0,!1,{kind:6,index:mt})})}vn=lo(UD(ri.entries(),([be,De])=>De===void 0?be:void 0)),_e=Ag(re,ir).concat(le),re=void 0,le=void 0}if(L.assert(!!vn),Z&&qe.onReleaseOldSourceFile){let be=Z.getSourceFiles();for(let De of be){let mt=Hi(De.resolvedPath);(Q||!mt||mt.impliedNodeFormat!==De.impliedNodeFormat||De.resolvedPath===De.path&&mt.resolvedPath!==De.path)&&qe.onReleaseOldSourceFile(De,Z.getCompilerOptions(),!!Hi(De.path))}qe.getParsedCommandLine||Z.forEachResolvedProjectReference(De=>{vc(De.sourceFile.path)||qe.onReleaseOldSourceFile(De.sourceFile,Z.getCompilerOptions(),!1)})}Z&&qe.onReleaseParsedCommandLine&&gN(Z.getProjectReferences(),Z.getResolvedProjectReferences(),(be,De,mt)=>{let St=De?.commandLine.projectReferences[mt]||Z.getProjectReferences()[mt],Zt=$L(St);dr?.has(rt(Zt))||qe.onReleaseParsedCommandLine(Zt,be,Z.getCompilerOptions())}),Z=void 0;let G={getRootFileNames:()=>Y,getSourceFile:Fa,getSourceFileByPath:Hi,getSourceFiles:()=>_e,getMissingFilePaths:()=>vn,getModuleResolutionCache:()=>gr,getFilesByNameMap:()=>ri,getCompilerOptions:()=>R,getSyntacticDiagnostics:Nr,getOptionsDiagnostics:qs,getGlobalDiagnostics:As,getSemanticDiagnostics:Fo,getCachedSemanticDiagnostics:Qr,getSuggestionDiagnostics:Co,getDeclarationDiagnostics:Ki,getBindAndCheckDiagnostics:Wi,getProgramDiagnostics:gn,getTypeChecker:Kr,getClassifiableNames:Ke,getCommonSourceDirectory:Ot,emit:Si,getCurrentDirectory:()=>Gt,getNodeCount:()=>Kr().getNodeCount(),getIdentifierCount:()=>Kr().getIdentifierCount(),getSymbolCount:()=>Kr().getSymbolCount(),getTypeCount:()=>Kr().getTypeCount(),getInstantiationCount:()=>Kr().getInstantiationCount(),getRelationCacheSizes:()=>Kr().getRelationCacheSizes(),getFileProcessingDiagnostics:()=>Ne,getResolvedTypeReferenceDirectives:()=>Be,getAutomaticTypeDirectiveNames:()=>Le,getAutomaticTypeDirectiveResolutions:()=>Ye,isSourceFileFromExternalLibrary:jr,isSourceFileDefaultLibrary:ei,getSourceFileFromReference:K,getLibFileFromReference:wt,sourceFileToPackageName:An,redirectTargetsMap:Kn,usesUriStyleNodeCoreModules:hi,isEmittedFile:Pn,getConfigFileParsingDiagnostics:jt,getProjectReferences:Vt,getResolvedProjectReferences:Qe,getProjectReferenceRedirect:Hs,getResolvedProjectReferenceToRedirect:$o,getResolvedProjectReferenceByPath:vc,forEachResolvedProjectReference:jo,isSourceOfProjectReferenceRedirect:hd,emitBuildInfo:lt,fileExists:ve,readFile:ce,directoryExists:nt,getSymlinkCache:oa,realpath:(B=qe.realpath)==null?void 0:B.bind(qe),useCaseSensitiveFileNames:()=>qe.useCaseSensitiveFileNames(),getCanonicalFileName:ee,getFileIncludeReasons:()=>Pe,structureIsReused:ue,writeFile:yt};return Tt(),Ne?.forEach(be=>{switch(be.kind){case 1:return _n.add(Ea(be.file&&Hi(be.file),be.fileProcessingReason,be.diagnostic,be.args||Je));case 0:let{file:De,pos:mt,end:St}=YL(Hi,be.reason);return _n.add(al(De,L.checkDefined(mt),L.checkDefined(St)-mt,be.diagnostic,...be.args||Je));case 2:return be.diagnostics.forEach(Zt=>_n.add(Zt));default:L.assertNever(be)}}),qt(),Fs(\"afterProgram\"),hf(\"Program\",\"beforeProgram\",\"afterProgram\"),(q=ai)==null||q.pop(),G;function Oe(be){var De;(De=be.resolutionDiagnostics)!=null&&De.length&&(Ne??(Ne=[])).push({kind:2,diagnostics:be.resolutionDiagnostics})}function je(be,De,mt,St){if(qe.resolveModuleNameLiterals||!qe.resolveModuleNames)return Oe(mt);if(!gr||fl(De))return;let Zt=_a(be.originalFileName,Gt),rn=ni(Zt),sn=Kt(be),Dn=gr.getFromNonRelativeNameCache(De,St,rn,sn);Dn&&Oe(Dn)}function Ge(be,De,mt){var St,Zt;if(!be.length)return Je;let rn=_a(De.originalFileName,Gt),sn=Kt(De);(St=ai)==null||St.push(ai.Phase.Program,\"resolveModuleNamesWorker\",{containingFileName:rn}),Fs(\"beforeResolveModule\");let Dn=pt(be,rn,sn,R,De,mt);return Fs(\"afterResolveModule\"),hf(\"ResolveModule\",\"beforeResolveModule\",\"afterResolveModule\"),(Zt=ai)==null||Zt.pop(),Dn}function kt(be,De,mt){var St,Zt;if(!be.length)return[];let rn=Ta(De)?void 0:De,sn=Ta(De)?De:_a(De.originalFileName,Gt),Dn=rn&&Kt(rn);(St=ai)==null||St.push(ai.Phase.Program,\"resolveTypeReferenceDirectiveNamesWorker\",{containingFileName:sn}),Fs(\"beforeResolveTypeReference\");let kr=Dt(be,sn,Dn,R,rn,mt);return Fs(\"afterResolveTypeReference\"),hf(\"ResolveTypeReference\",\"beforeResolveTypeReference\",\"afterResolveTypeReference\"),(Zt=ai)==null||Zt.pop(),kr}function Kt(be){let De=$o(be.originalFileName);if(De||!Fu(be.originalFileName))return De;let mt=ln(be.path);if(mt)return mt;if(!qe.realpath||!R.preserveSymlinks||!jl(be.originalFileName,Wg))return;let St=rt(qe.realpath(be.originalFileName));return St===be.path?void 0:ln(St)}function ln(be){let De=Ws(be);if(Ta(De))return $o(De);if(De)return jo(mt=>{let St=Ss(mt.commandLine.options);if(St)return rt(St)===be?mt:void 0})}function ir(be,De){return Es(ae(be),ae(De))}function ae(be){if(Gy(kn,be.fileName,!1)){let De=Hl(be.fileName);if(De===\"lib.d.ts\"||De===\"lib.es6.d.ts\")return 0;let mt=pA(QC(De,\"lib.\"),\".d.ts\"),St=VO.indexOf(mt);if(St!==-1)return St+1}return VO.length+2}function rt(be){return Ts(be,Gt,ee)}function Ot(){if(X===void 0){let be=Pr(_e,De=>pS(De,G));X=uN(R,()=>Zi(be,De=>De.isDeclarationFile?void 0:De.fileName),Gt,ee,De=>At(be,De))}return X}function Ke(){var be;if(!we){Kr(),we=new Set;for(let De of _e)(be=De.classifiableNames)==null||be.forEach(mt=>we.add(mt))}return we}function oe(be,De){var mt;if(ue===0&&!De.ambientModuleNames.length)return Ge(be,De,void 0);let St=Z&&Z.getSourceFile(De.fileName);if(St!==De&&De.resolvedModules){let $t=[];for(let Xn of be){let ra=De.resolvedModules.get(Xn.text,W_(De,Xn));$t.push(ra)}return $t}let Zt,rn,sn,Dn=yq;for(let $t=0;$t<be.length;$t++){let Xn=be[$t];if(De===St&&!nn(St.path)){let Is=W_(De,Xn),Mc=(mt=St.resolvedModules)==null?void 0:mt.get(Xn.text,Is);if(Mc?.resolvedModule){ov(R,qe)&&Xi(qe,Mc.resolvedModule.packageId?_.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:_.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2,Xn.text,_a(De.originalFileName,Gt),Mc.resolvedModule.resolvedFileName,Mc.resolvedModule.packageId&&hT(Mc.resolvedModule.packageId)),(rn??(rn=new Array(be.length)))[$t]=Mc,(sn??(sn=[])).push(Xn);continue}}let ra=!1;ya(De.ambientModuleNames,Xn.text)?(ra=!0,ov(R,qe)&&Xi(qe,_.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1,Xn.text,_a(De.originalFileName,Gt))):ra=Vn(Xn),ra?(rn||(rn=new Array(be.length)))[$t]=Dn:(Zt??(Zt=[])).push(Xn)}let kr=Zt&&Zt.length?Ge(Zt,De,sn):Je;if(!rn)return L.assert(kr.length===be.length),kr;let ki=0;for(let $t=0;$t<rn.length;$t++)rn[$t]||(rn[$t]=kr[ki],ki++);return L.assert(ki===kr.length),rn;function Vn($t){let Xn=kA(St,$t.text,W_(De,$t)),ra=Xn&&Z.getSourceFile(Xn.resolvedFileName);if(Xn&&ra)return!1;let Is=ke.get($t.text);return Is?(ov(R,qe)&&Xi(qe,_.Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified,$t.text,Is),!0):!1}}function pe(be,De){var mt;if(ue===0)return kt(be,De,void 0);let St=Ta(De)?void 0:Z&&Z.getSourceFile(De.fileName);if(!Ta(De)&&St!==De&&De.resolvedTypeReferenceDirectiveNames){let $t=[];for(let Xn of be){let ra=De.resolvedTypeReferenceDirectiveNames.get(RF(Xn),mN(Xn,De.impliedNodeFormat));$t.push(ra)}return $t}let Zt,rn,sn,Dn=Ta(De)?void 0:De,kr=Ta(De)?!nn(rt(De)):De===St&&!nn(St.path);for(let $t=0;$t<be.length;$t++){let Xn=be[$t];if(kr){let ra=RF(Xn),Is=mN(Xn,Dn?.impliedNodeFormat),Mc=(mt=Ta(De)?Z?.getAutomaticTypeDirectiveResolutions():St?.resolvedTypeReferenceDirectiveNames)==null?void 0:mt.get(ra,Is);if(Mc?.resolvedTypeReferenceDirective){ov(R,qe)&&Xi(qe,Mc.resolvedTypeReferenceDirective.packageId?_.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:_.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2,ra,Ta(De)?De:_a(De.originalFileName,Gt),Mc.resolvedTypeReferenceDirective.resolvedFileName,Mc.resolvedTypeReferenceDirective.packageId&&hT(Mc.resolvedTypeReferenceDirective.packageId)),(rn??(rn=new Array(be.length)))[$t]=Mc,(sn??(sn=[])).push(Xn);continue}}(Zt??(Zt=[])).push(Xn)}if(!Zt)return rn||Je;let ki=kt(Zt,De,sn);if(!rn)return L.assert(ki.length===be.length),ki;let Vn=0;for(let $t=0;$t<rn.length;$t++)rn[$t]||(rn[$t]=ki[Vn],Vn++);return L.assert(Vn===ki.length),rn}function z(){return!gN(Z.getProjectReferences(),Z.getResolvedProjectReferences(),(be,De,mt)=>{let St=(De?De.commandLine.projectReferences:$)[mt],Zt=xt(St);return be?!Zt||Zt.sourceFile!==be.sourceFile||!up(be.commandLine.fileNames,Zt.commandLine.fileNames):Zt!==void 0},(be,De)=>{let mt=De?vc(De.sourceFile.path).commandLine.projectReferences:$;return!up(be,mt,tH)})}function Te(){var be;if(!Z)return 0;let De=Z.getCompilerOptions();if(eH(De,R))return 0;let mt=Z.getRootFileNames();if(!up(mt,Y)||!z())return 0;$&&(En=$.map(xt));let St=[],Zt=[];if(ue=2,Z.getMissingFilePaths().some(Vn=>qe.fileExists(Vn)))return 0;let rn=Z.getSourceFiles(),sn;(Vn=>{Vn[Vn.Exists=0]=\"Exists\",Vn[Vn.Modified=1]=\"Modified\"})(sn||(sn={}));let Dn=new Map;for(let Vn of rn){let $t=Go(Vn.fileName,gr,qe,R),Xn=qe.getSourceFileByPath?qe.getSourceFileByPath(Vn.fileName,Vn.resolvedPath,$t,void 0,Q||$t.impliedNodeFormat!==Vn.impliedNodeFormat):qe.getSourceFile(Vn.fileName,$t,void 0,Q||$t.impliedNodeFormat!==Vn.impliedNodeFormat);if(!Xn)return 0;Xn.packageJsonLocations=(be=$t.packageJsonLocations)!=null&&be.length?$t.packageJsonLocations:void 0,Xn.packageJsonScope=$t.packageJsonScope,L.assert(!Xn.redirectInfo,\"Host should not return a redirect source file from `getSourceFile`\");let ra;if(Vn.redirectInfo){if(Xn!==Vn.redirectInfo.unredirected)return 0;ra=!1,Xn=Vn}else if(Z.redirectTargetsMap.has(Vn.path)){if(Xn!==Vn)return 0;ra=!1}else ra=Xn!==Vn;Xn.path=Vn.path,Xn.originalFileName=Vn.originalFileName,Xn.resolvedPath=Vn.resolvedPath,Xn.fileName=Vn.fileName;let Is=Z.sourceFileToPackageName.get(Vn.path);if(Is!==void 0){let Mc=Dn.get(Is),mm=ra?1:0;if(Mc!==void 0&&mm===1||Mc===1)return 0;Dn.set(Is,mm)}ra?(Vn.impliedNodeFormat!==Xn.impliedNodeFormat?ue=1:up(Vn.libReferenceDirectives,Xn.libReferenceDirectives,Ql)?Vn.hasNoDefaultLib!==Xn.hasNoDefaultLib?ue=1:up(Vn.referencedFiles,Xn.referencedFiles,Ql)?(ht(Xn),up(Vn.imports,Xn.imports,yu)&&up(Vn.moduleAugmentations,Xn.moduleAugmentations,yu)?(Vn.flags&6291456)!==(Xn.flags&6291456)?ue=1:up(Vn.typeReferenceDirectives,Xn.typeReferenceDirectives,Ql)||(ue=1):ue=1):ue=1:ue=1,Zt.push({oldFile:Vn,newFile:Xn})):nn(Vn.path)&&(ue=1,Zt.push({oldFile:Vn,newFile:Xn})),St.push(Xn)}if(ue!==2)return ue;let kr=Zt.map(Vn=>Vn.oldFile);for(let Vn of rn)if(!ya(kr,Vn))for(let $t of Vn.ambientModuleNames)ke.set($t,Vn.fileName);for(let{oldFile:Vn,newFile:$t}of Zt){let Xn=qpe($t),ra=oe(Xn,$t);nH(Xn,$t,ra,Vn.resolvedModules,wse,QL)?(ue=1,$t.resolvedModules=qJ($t,Xn,ra,QL)):$t.resolvedModules=Vn.resolvedModules;let Mc=$t.typeReferenceDirectives,mm=pe(Mc,$t);nH(Mc,$t,mm,Vn.resolvedTypeReferenceDirectiveNames,Rse,yN)?(ue=1,$t.resolvedTypeReferenceDirectiveNames=qJ($t,Mc,mm,yN)):$t.resolvedTypeReferenceDirectiveNames=Vn.resolvedTypeReferenceDirectiveNames}if(ue!==2)return ue;if(Ise(De,R))return 1;if(qe.hasChangedAutomaticTypeDirectiveNames){if(qe.hasChangedAutomaticTypeDirectiveNames())return 1}else if(Le=X3(R,qe),!up(Z.getAutomaticTypeDirectiveNames(),Le))return 1;vn=Z.getMissingFilePaths(),L.assert(St.length===Z.getSourceFiles().length);for(let Vn of St)ri.set(Vn.path,Vn);return Z.getFilesByNameMap().forEach((Vn,$t)=>{if(!Vn){ri.set($t,Vn);return}if(Vn.path===$t){Z.isSourceFileFromExternalLibrary(Vn)&&We.set(Vn.path,!0);return}ri.set($t,ri.get(Vn.path))}),_e=St,Pe=Z.getFileIncludeReasons(),Ne=Z.getFileProcessingDiagnostics(),Be=Z.getResolvedTypeReferenceDirectives(),Le=Z.getAutomaticTypeDirectiveNames(),Ye=Z.getAutomaticTypeDirectiveResolutions(),An=Z.sourceFileToPackageName,Kn=Z.redirectTargetsMap,hi=Z.usesUriStyleNodeCoreModules,2}function j(be){return{getPrependNodes:Hn,getCanonicalFileName:ee,getCommonSourceDirectory:G.getCommonSourceDirectory,getCompilerOptions:G.getCompilerOptions,getCurrentDirectory:()=>Gt,getSourceFile:G.getSourceFile,getSourceFileByPath:G.getSourceFileByPath,getSourceFiles:G.getSourceFiles,getLibFileFromReference:G.getLibFileFromReference,isSourceFileFromExternalLibrary:jr,getResolvedProjectReferenceToRedirect:$o,getProjectReferenceRedirect:Hs,isSourceOfProjectReferenceRedirect:hd,getSymlinkCache:oa,writeFile:be||yt,isEmitBlocked:Ja,readFile:De=>qe.readFile(De),fileExists:De=>{let mt=rt(De);return Hi(mt)?!0:ya(vn,mt)?!1:qe.fileExists(De)},useCaseSensitiveFileNames:()=>qe.useCaseSensitiveFileNames(),getBuildInfo:De=>{var mt;return(mt=G.getBuildInfo)==null?void 0:mt.call(G,De)},getSourceFileFromReference:(De,mt)=>G.getSourceFileFromReference(De,mt),redirectTargetsMap:Kn,getFileIncludeReasons:G.getFileIncludeReasons,createHash:ho(qe,qe.createHash)}}function yt(be,De,mt,St,Zt,rn){qe.writeFile(be,De,mt,St,Zt,rn)}function lt(be){var De,mt;L.assert(!Ss(R)),(De=ai)==null||De.push(ai.Phase.Emit,\"emitBuildInfo\",{},!0),Fs(\"beforeEmit\");let St=CF(LF,j(be),void 0,HK,!1,!0);return Fs(\"afterEmit\"),hf(\"Emit\",\"beforeEmit\",\"afterEmit\"),(mt=ai)==null||mt.pop(),St}function Qe(){return En}function Vt(){return $}function Hn(){return fq($,(be,De)=>{var mt;return(mt=En[De])==null?void 0:mt.commandLine},be=>{let De=rt(be),mt=Hi(De);return mt?mt.text:ri.has(De)?void 0:qe.readFile(De)},qe)}function jr(be){return!!We.get(be.path)}function ei(be){if(!be.isDeclarationFile)return!1;if(be.hasNoDefaultLib)return!0;if(!R.noLib)return!1;let De=qe.useCaseSensitiveFileNames()?z1:W1;return R.lib?vt(R.lib,mt=>De(be.fileName,Ri(mt))):De(be.fileName,tn())}function Kr(){return Ve||(Ve=k_e(G))}function Si(be,De,mt,St,Zt,rn){var sn,Dn;(sn=ai)==null||sn.push(ai.Phase.Emit,\"emit\",{path:be?.path},!0);let kr=Ps(()=>Za(G,be,De,mt,St,Zt,rn));return(Dn=ai)==null||Dn.pop(),kr}function Ja(be){return Ni.has(rt(be))}function Za(be,De,mt,St,Zt,rn,sn){if(!sn){let ki=dq(be,De,mt,St);if(ki)return ki}let Dn=Kr().getEmitResolver(Ss(R)?void 0:De,St);Fs(\"beforeEmit\");let kr=CF(Dn,j(mt),De,jK(R,rn,Zt),Zt,!1,sn);return Fs(\"afterEmit\"),hf(\"Emit\",\"beforeEmit\",\"afterEmit\"),kr}function Fa(be){return Hi(rt(be))}function Hi(be){return ri.get(be)||void 0}function xi(be,De,mt){return vA(be?De(be,mt):Uo(G.getSourceFiles(),St=>(mt&&mt.throwIfCancellationRequested(),De(St,mt))))}function Nr(be,De){return xi(be,kc,De)}function Fo(be,De){return xi(be,mc,De)}function Qr(be){var De;return be?(De=Ce.perFile)==null?void 0:De.get(be.path):Ce.allDiagnostics}function Wi(be,De){return xc(be,De)}function gn(be){var De;if(rL(be,R,G))return Je;let mt=_n.getDiagnostics(be.fileName);return(De=be.commentDirectives)!=null&&De.length?aa(be,be.commentDirectives,mt).diagnostics:mt}function Ki(be,De){let mt=G.getCompilerOptions();return!be||Ss(mt)?md(be,De):xi(be,ss,De)}function kc(be){return Cu(be)?(be.additionalSyntacticDiagnostics||(be.additionalSyntacticDiagnostics=Ll(be)),Qi(be.additionalSyntacticDiagnostics,be.parseDiagnostics)):be.parseDiagnostics}function Ps(be){try{return be()}catch(De){throw De instanceof tI&&(Ve=void 0),De}}function mc(be,De){return Qi(MF(xc(be,De),R),gn(be))}function xc(be,De){return bl(be,De,Ce,hc)}function hc(be,De){return Ps(()=>{if(rL(be,R,G))return Je;let mt=Kr();L.assert(!!be.bindDiagnostics);let Zt=(be.scriptKind===1||be.scriptKind===2)&&HR(be,R),rn=h6(be,R.checkJs),Dn=!(!!be.checkJsDirective&&be.checkJsDirective.enabled===!1)&&(be.scriptKind===3||be.scriptKind===4||be.scriptKind===5||rn||Zt||be.scriptKind===7),kr=Dn?be.bindDiagnostics:Je,ki=Dn?mt.getDiagnostics(be,De):Je;return rn&&(kr=Pr(kr,Vn=>jF.has(Vn.code)),ki=Pr(ki,Vn=>jF.has(Vn.code))),ro(be,Dn&&!rn,kr,ki,Zt?be.jsDocDiagnostics:void 0)})}function ro(be,De,...mt){var St;let Zt=t_(mt);if(!De||!((St=be.commentDirectives)!=null&&St.length))return Zt;let{diagnostics:rn,directives:sn}=aa(be,be.commentDirectives,Zt);for(let Dn of sn.getUnusedExpectations())rn.push(vH(be,Dn.range,_.Unused_ts_expect_error_directive));return rn}function aa(be,De,mt){let St=Gse(be,De);return{diagnostics:mt.filter(rn=>gc(rn,St)===-1),directives:St}}function Co(be,De){return Ps(()=>Kr().getSuggestionDiagnostics(be,De))}function gc(be,De){let{file:mt,start:St}=be;if(!mt)return-1;let Zt=Sh(mt),rn=yw(Zt,St).line-1;for(;rn>=0;){if(De.markUsed(rn))return rn;let sn=mt.text.slice(Zt[rn],Zt[rn+1]).trim();if(sn!==\"\"&&!/^(\\s*)\\/\\/(.*)$/.test(sn))return-1;rn--}return-1}function Ll(be){return Ps(()=>{let De=[];return mt(be,be),kO(be,mt,St),De;function mt(Dn,kr){switch(kr.kind){case 166:case 169:case 171:if(kr.questionToken===Dn)return De.push(sn(Dn,_.The_0_modifier_can_only_be_used_in_TypeScript_files,\"?\")),\"skip\";case 170:case 173:case 174:case 175:case 215:case 259:case 216:case 257:if(kr.type===Dn)return De.push(sn(Dn,_.Type_annotations_can_only_be_used_in_TypeScript_files)),\"skip\"}switch(Dn.kind){case 270:if(Dn.isTypeOnly)return De.push(sn(kr,_._0_declarations_can_only_be_used_in_TypeScript_files,\"import type\")),\"skip\";break;case 275:if(Dn.isTypeOnly)return De.push(sn(Dn,_._0_declarations_can_only_be_used_in_TypeScript_files,\"export type\")),\"skip\";break;case 273:case 278:if(Dn.isTypeOnly)return De.push(sn(Dn,_._0_declarations_can_only_be_used_in_TypeScript_files,$u(Dn)?\"import...type\":\"export...type\")),\"skip\";break;case 268:return De.push(sn(Dn,_.import_can_only_be_used_in_TypeScript_files)),\"skip\";case 274:if(Dn.isExportEquals)return De.push(sn(Dn,_.export_can_only_be_used_in_TypeScript_files)),\"skip\";break;case 294:if(Dn.token===117)return De.push(sn(Dn,_.implements_clauses_can_only_be_used_in_TypeScript_files)),\"skip\";break;case 261:let Vn=Xa(118);return L.assertIsDefined(Vn),De.push(sn(Dn,_._0_declarations_can_only_be_used_in_TypeScript_files,Vn)),\"skip\";case 264:let $t=Dn.flags&16?Xa(143):Xa(142);return L.assertIsDefined($t),De.push(sn(Dn,_._0_declarations_can_only_be_used_in_TypeScript_files,$t)),\"skip\";case 262:return De.push(sn(Dn,_.Type_aliases_can_only_be_used_in_TypeScript_files)),\"skip\";case 263:let Xn=L.checkDefined(Xa(92));return De.push(sn(Dn,_._0_declarations_can_only_be_used_in_TypeScript_files,Xn)),\"skip\";case 232:return De.push(sn(Dn,_.Non_null_assertions_can_only_be_used_in_TypeScript_files)),\"skip\";case 231:return De.push(sn(Dn.type,_.Type_assertion_expressions_can_only_be_used_in_TypeScript_files)),\"skip\";case 235:return De.push(sn(Dn.type,_.Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files)),\"skip\";case 213:L.fail()}}function St(Dn,kr){if(aJ(kr)){let ki=wr(kr.modifiers,du);ki&&De.push(sn(ki,_.Decorators_are_not_valid_here))}else if(HS(kr)&&kr.modifiers){let ki=Yc(kr.modifiers,du);if(ki>=0){if(ha(kr)&&!R.experimentalDecorators)De.push(sn(kr.modifiers[ki],_.Decorators_are_not_valid_here));else if(sl(kr)){let Vn=Yc(kr.modifiers,c3);if(Vn>=0){let $t=Yc(kr.modifiers,kue);if(ki>Vn&&$t>=0&&ki<$t)De.push(sn(kr.modifiers[ki],_.Decorators_are_not_valid_here));else if(Vn>=0&&ki<Vn){let Xn=Yc(kr.modifiers,du,Vn);Xn>=0&&De.push(Ao(sn(kr.modifiers[Xn],_.Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export),sn(kr.modifiers[ki],_.Decorator_used_before_export_here)))}}}}}switch(kr.kind){case 260:case 228:case 171:case 173:case 174:case 175:case 215:case 259:case 216:if(Dn===kr.typeParameters)return De.push(rn(Dn,_.Type_parameter_declarations_can_only_be_used_in_TypeScript_files)),\"skip\";case 240:if(Dn===kr.modifiers)return Zt(kr.modifiers,kr.kind===240),\"skip\";break;case 169:if(Dn===kr.modifiers){for(let ki of Dn)Ha(ki)&&ki.kind!==124&&ki.kind!==127&&De.push(sn(ki,_.The_0_modifier_can_only_be_used_in_TypeScript_files,Xa(ki.kind)));return\"skip\"}break;case 166:if(Dn===kr.modifiers&&vt(Dn,Ha))return De.push(rn(Dn,_.Parameter_modifiers_can_only_be_used_in_TypeScript_files)),\"skip\";break;case 210:case 211:case 230:case 282:case 283:case 212:if(Dn===kr.typeArguments)return De.push(rn(Dn,_.Type_arguments_can_only_be_used_in_TypeScript_files)),\"skip\";break}}function Zt(Dn,kr){for(let ki of Dn)switch(ki.kind){case 85:if(kr)continue;case 123:case 121:case 122:case 146:case 136:case 126:case 161:case 101:case 145:De.push(sn(ki,_.The_0_modifier_can_only_be_used_in_TypeScript_files,Xa(ki.kind)));break;case 124:case 93:case 88:case 127:}}function rn(Dn,kr,ki,Vn,$t){let Xn=Dn.pos;return al(be,Xn,Dn.end-Xn,kr,ki,Vn,$t)}function sn(Dn,kr,ki,Vn,$t){return Nu(be,Dn,kr,ki,Vn,$t)}})}function md(be,De){return bl(be,De,Ie,Pc)}function Pc(be,De){return Ps(()=>{let mt=Kr().getEmitResolver(be,De);return Tpe(j(Ba),mt,be)||Je})}function bl(be,De,mt,St){var Zt;let rn=be?(Zt=mt.perFile)==null?void 0:Zt.get(be.path):mt.allDiagnostics;if(rn)return rn;let sn=St(be,De);return be?(mt.perFile||(mt.perFile=new Map)).set(be.path,sn):mt.allDiagnostics=sn,sn}function ss(be,De){return be.isDeclarationFile?[]:md(be,De)}function qs(){return vA(Qi(_n.getGlobalDiagnostics(),Rs()))}function Rs(){if(!R.configFile)return Je;let be=_n.getDiagnostics(R.configFile.fileName);return jo(De=>{be=Qi(be,_n.getDiagnostics(De.sourceFile.fileName))}),be}function As(){return Y.length?vA(Kr().getGlobalDiagnostics().slice()):Je}function jt(){return ie||Je}function yc(be,De,mt,St){ft(So(be),De,mt,void 0,St)}function Ql(be,De){return be.fileName===De.fileName}function yu(be,De){return be.kind===79?De.kind===79&&be.escapedText===De.escapedText:De.kind===10&&be.text===De.text}function se(be,De){let mt=D.createStringLiteral(be),St=D.createImportDeclaration(void 0,void 0,mt,void 0);return SS(St,2),go(mt,St),go(St,De),mt.flags&=-9,St.flags&=-9,mt}function ht(be){if(be.imports)return;let De=Cu(be),mt=Lc(be),St,Zt,rn;if((d_(R)||mt)&&!be.isDeclarationFile){R.importHelpers&&(St=[se(_b,be)]);let Vn=p4(_4(R,be),R);Vn&&(St||(St=[])).push(se(Vn,be))}for(let Vn of be.statements)Dn(Vn,!1);let sn=De&&$s(R)!==100;(be.flags&2097152||sn)&&kr(be),be.imports=St||Je,be.moduleAugmentations=Zt||Je,be.ambientModuleNames=rn||Je;return;function Dn(Vn,$t){if(Uw(Vn)){let Xn=UA(Vn);Xn&&yo(Xn)&&Xn.text&&(!$t||!fl(Xn.text))&&(Zy(Vn,!1),St=Sn(St,Xn),!hi&&ct===0&&!be.isDeclarationFile&&(hi=na(Xn.text,\"node:\")))}else if(Tc(Vn)&&lu(Vn)&&($t||Mr(Vn,2)||be.isDeclarationFile)){Vn.name.parent=Vn;let Xn=l_(Vn.name);if(mt||$t&&!fl(Xn))(Zt||(Zt=[])).push(Vn.name);else if(!$t){be.isDeclarationFile&&(rn||(rn=[])).push(Xn);let ra=Vn.body;if(ra)for(let Is of ra.statements)Dn(Is,!0)}}}function kr(Vn){let $t=/import|require/g;for(;$t.exec(Vn.text)!==null;){let Xn=ki(Vn,$t.lastIndex);sn&&qu(Xn,!0)||Dd(Xn)&&Xn.arguments.length>=1&&es(Xn.arguments[0])?(Zy(Xn,!1),St=Sn(St,Xn.arguments[0])):ib(Xn)&&(Zy(Xn,!1),St=Sn(St,Xn.argument.literal))}}function ki(Vn,$t){let Xn=Vn,ra=Is=>{if(Is.pos<=$t&&($t<Is.end||$t===Is.end&&Is.kind===1))return Is};for(;;){let Is=De&&Kd(Xn)&&mn(Xn.jsDoc,ra)||pa(Xn,ra);if(!Is)return Xn;Xn=Is}}}function wt(be){let De=n_(be.fileName),mt=jO.get(De);if(mt)return Fa(Ri(mt))}function K(be,De){return Xe(wF(De.fileName,be.fileName),Fa)}function Xe(be,De,mt,St){if(gA(be)){let Zt=qe.getCanonicalFileName(be);if(!R.allowNonTsExtensions&&!mn(t_(ui),sn=>Gc(Zt,sn))){mt&&(ES(Zt)?mt(_.File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option,be):mt(_.File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1,be,\"'\"+t_($n).join(\"', '\")+\"'\"));return}let rn=De(be);if(mt)if(rn)vb(St)&&Zt===qe.getCanonicalFileName(Hi(St.file).fileName)&&mt(_.A_file_cannot_have_a_reference_to_itself);else{let sn=Hs(be);sn?mt(_.Output_file_0_has_not_been_built_from_source_file_1,sn,be):mt(_.File_0_not_found,be)}return rn}else{let Zt=R.allowNonTsExtensions&&De(be);if(Zt)return Zt;if(mt&&R.allowNonTsExtensions){mt(_.File_0_not_found,be);return}let rn=mn($n[0],sn=>De(be+sn));return mt&&!rn&&mt(_.Could_not_resolve_the_path_0_with_the_extensions_Colon_1,be,\"'\"+t_($n).join(\"', '\")+\"'\"),rn}}function ft(be,De,mt,St,Zt){Xe(be,rn=>ta(rn,De,mt,Zt,St),(rn,...sn)=>bo(void 0,Zt,rn,sn),Zt)}function Yt(be,De){return ft(be,!1,!1,void 0,De)}function pr(be,De,mt){!vb(mt)&&vt(Pe.get(De.path),vb)?bo(De,mt,_.Already_included_file_name_0_differs_from_file_name_1_only_in_casing,[De.fileName,be]):bo(De,mt,_.File_name_0_differs_from_already_included_file_name_1_only_in_casing,[be,De.fileName])}function yr(be,De,mt,St,Zt,rn,sn){var Dn;let kr=fm.createRedirectedSourceFile({redirectTarget:be,unredirected:De});return kr.fileName=mt,kr.path=St,kr.resolvedPath=Zt,kr.originalFileName=rn,kr.packageJsonLocations=(Dn=sn.packageJsonLocations)!=null&&Dn.length?sn.packageJsonLocations:void 0,kr.packageJsonScope=sn.packageJsonScope,We.set(St,ct>0),kr}function ta(be,De,mt,St,Zt){var rn,sn;(rn=ai)==null||rn.push(ai.Phase.Program,\"findSourceFile\",{fileName:be,isDefaultLib:De||void 0,fileIncludeKind:R8[St.kind]});let Dn=Ka(be,De,mt,St,Zt);return(sn=ai)==null||sn.pop(),Dn}function Go(be,De,mt,St){let Zt=uq(_a(be,Gt),De?.getPackageJsonInfoCache(),mt,St),rn=Do(St),sn=OR(St);return typeof Zt==\"object\"?{...Zt,languageVersion:rn,setExternalModuleIndicator:sn}:{languageVersion:rn,impliedNodeFormat:Zt,setExternalModuleIndicator:sn}}function Ka(be,De,mt,St,Zt){var rn,sn;let Dn=rt(be);if(at){let Xn=Ws(Dn);if(!Xn&&qe.realpath&&R.preserveSymlinks&&Fu(be)&&jl(be,Wg)){let ra=rt(qe.realpath(be));ra!==Dn&&(Xn=Ws(ra))}if(Xn){let ra=Ta(Xn)?ta(Xn,De,mt,St,Zt):void 0;return ra&&ka(ra,Dn,void 0),ra}}let kr=be;if(ri.has(Dn)){let Xn=ri.get(Dn);if(vo(Xn||void 0,St),Xn&&R.forceConsistentCasingInFileNames!==!1){let ra=Xn.fileName;rt(ra)!==rt(be)&&(be=Hs(be)||be);let Mc=lj(ra,Gt),mm=lj(be,Gt);Mc!==mm&&pr(be,Xn,St)}return Xn&&We.get(Xn.path)&&ct===0?(We.set(Xn.path,!1),R.noResolve||(nf(Xn,De),ye(Xn)),R.noLib||io(Xn),Rt.set(Xn.path,!1),Ze(Xn)):Xn&&Rt.get(Xn.path)&&ct<_t&&(Rt.set(Xn.path,!1),Ze(Xn)),Xn||void 0}let ki;if(vb(St)&&!at){let Xn=Uc(be);if(Xn){if(Ss(Xn.commandLine.options))return;let ra=Gu(Xn,be);be=ra,ki=rt(ra)}}let Vn=Go(be,gr,qe,R),$t=qe.getSourceFile(be,Vn,Xn=>bo(void 0,St,_.Cannot_read_file_0_Colon_1,[be,Xn]),Q||((rn=Z?.getSourceFileByPath(rt(be)))==null?void 0:rn.impliedNodeFormat)!==Vn.impliedNodeFormat);if(Zt){let Xn=hT(Zt),ra=pn.get(Xn);if(ra){let Is=yr(ra,$t,be,Dn,rt(be),kr,Vn);return Kn.add(ra.path,be),ka(Is,Dn,ki),vo(Is,St),An.set(Dn,p6(Zt)),le.push(Is),Is}else $t&&(pn.set(Xn,$t),An.set(Dn,p6(Zt)))}if(ka($t,Dn,ki),$t){if(We.set(Dn,ct>0),$t.fileName=be,$t.path=Dn,$t.resolvedPath=rt(be),$t.originalFileName=kr,$t.packageJsonLocations=(sn=Vn.packageJsonLocations)!=null&&sn.length?Vn.packageJsonLocations:void 0,$t.packageJsonScope=Vn.packageJsonScope,vo($t,St),qe.useCaseSensitiveFileNames()){let Xn=n_(Dn),ra=Ht.get(Xn);ra?pr(be,ra,St):Ht.set(Xn,$t)}Qt=Qt||$t.hasNoDefaultLib&&!mt,R.noResolve||(nf($t,De),ye($t)),R.noLib||io($t),Ze($t),De?re.push($t):le.push($t)}return $t}function vo(be,De){be&&Pe.add(be.path,De)}function ka(be,De,mt){mt?(ri.set(mt,be),ri.set(De,be||!1)):ri.set(De,be)}function Hs(be){let De=Uc(be);return De&&Gu(De,be)}function Uc(be){if(!(!En||!En.length||Fu(be)||Gc(be,\".json\")))return $o(be)}function Gu(be,De){let mt=Ss(be.commandLine.options);return mt?V0(mt,\".d.ts\"):qL(De,be.commandLine,!qe.useCaseSensitiveFileNames())}function $o(be){Cr===void 0&&(Cr=new Map,jo(mt=>{rt(R.configFilePath)!==mt.sourceFile.path&&mt.commandLine.fileNames.forEach(St=>Cr.set(rt(St),mt.sourceFile.path))}));let De=Cr.get(rt(be));return De&&vc(De)}function jo(be){return Kpe(En,be)}function Ws(be){if(Fu(be))return Se===void 0&&(Se=new Map,jo(De=>{let mt=Ss(De.commandLine.options);if(mt){let St=V0(mt,\".d.ts\");Se.set(rt(St),!0)}else{let St=zu(()=>XL(De.commandLine,!qe.useCaseSensitiveFileNames()));mn(De.commandLine.fileNames,Zt=>{if(!Fu(Zt)&&!Gc(Zt,\".json\")){let rn=qL(Zt,De.commandLine,!qe.useCaseSensitiveFileNames(),St);Se.set(rt(rn),Zt)}})}})),Se.get(be)}function hd(be){return at&&!!$o(be)}function vc(be){if(dr)return dr.get(be)||void 0}function nf(be,De){mn(be.referencedFiles,(mt,St)=>{ft(wF(mt.fileName,be.fileName),De,!1,void 0,{kind:4,file:be.path,index:St})})}function ye(be){let De=be.typeReferenceDirectives;if(!De.length){be.resolvedTypeReferenceDirectiveNames=void 0;return}let mt=pe(De,be);for(let St=0;St<De.length;St++){let Zt=be.typeReferenceDirectives[St],rn=mt[St],sn=n_(Zt.fileName);Dse(be,sn,rn,mN(Zt,be.impliedNodeFormat));let Dn=Zt.resolutionMode||be.impliedNodeFormat;Dn&&$s(R)!==3&&$s(R)!==99&&(Ne??(Ne=[])).push({kind:2,diagnostics:[vH(be,Zt,_.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext)]}),Et(sn,Dn,rn,{kind:5,file:be.path,index:St})}}function Et(be,De,mt,St){var Zt,rn;(Zt=ai)==null||Zt.push(ai.Phase.Program,\"processTypeReferenceDirective\",{directive:be,hasResolved:!!mt.resolvedTypeReferenceDirective,refKind:St.kind,refPath:vb(St)?St.file:void 0}),bn(be,De,mt,St),(rn=ai)==null||rn.pop()}function bn(be,De,mt,St){var Zt;Oe(mt);let rn=(Zt=Be.get(be,De))==null?void 0:Zt.resolvedTypeReferenceDirective;if(rn&&rn.primary)return;let sn=!0,{resolvedTypeReferenceDirective:Dn}=mt;if(Dn){if(Dn.isExternalLibraryImport&&ct++,Dn.primary)ft(Dn.resolvedFileName,!1,!1,Dn.packageId,St);else if(rn){if(Dn.resolvedFileName!==rn.resolvedFileName){let kr=qe.readFile(Dn.resolvedFileName),ki=Fa(rn.resolvedFileName);kr!==ki.text&&bo(ki,St,_.Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict,[be,Dn.resolvedFileName,rn.resolvedFileName])}sn=!1}else ft(Dn.resolvedFileName,!1,!1,Dn.packageId,St);Dn.isExternalLibraryImport&&ct--}else bo(void 0,St,_.Cannot_find_type_definition_file_for_0,[be]);sn&&Be.set(be,De,mt)}function Ri(be){let De=be.split(\".\"),mt=De[1],St=2;for(;De[St]&&De[St]!==\"d\";)mt+=(St===2?\"/\":\"-\")+De[St],St++;let Zt=vi(Gt,`__lib_node_modules_lookup_${be}__.ts`),rn=FL(\"@typescript/lib-\"+mt,Zt,{moduleResolution:2},qe,gr);return rn?.resolvedModule?rn.resolvedModule.resolvedFileName:vi(kn,be)}function io(be){mn(be.libReferenceDirectives,(De,mt)=>{let St=n_(De.fileName),Zt=jO.get(St);if(Zt)yc(Ri(Zt),!0,!0,{kind:7,file:be.path,index:mt});else{let rn=pA(QC(St,\"lib.\"),\".d.ts\"),sn=$C(rn,VO,Ks),Dn=sn?_.Cannot_find_lib_definition_for_0_Did_you_mean_1:_.Cannot_find_lib_definition_for_0;(Ne||(Ne=[])).push({kind:0,reason:{kind:7,file:be.path,index:mt},diagnostic:Dn,args:[St,sn]})}})}function ee(be){return qe.getCanonicalFileName(be)}function Ze(be){var De;if(ht(be),be.imports.length||be.moduleAugmentations.length){let mt=qpe(be),St=oe(mt,be);L.assert(St.length===mt.length);let Zt=(at?(De=Kt(be))==null?void 0:De.commandLine.options:void 0)||R;for(let rn=0;rn<mt.length;rn++){let sn=St[rn].resolvedModule,Dn=mt[rn].text,kr=W_(be,mt[rn]);if(kse(be,Dn,St[rn],kr),je(be,Dn,St[rn],kr),!sn)continue;let ki=sn.isExternalLibraryImport,Vn=!VR(sn.extension),$t=ki&&Vn,Xn=sn.resolvedFileName;ki&&ct++;let ra=$t&&ct>_t,Is=Xn&&!_q(Zt,sn,be)&&!Zt.noResolve&&rn<be.imports.length&&!ra&&!(Vn&&!PR(Zt))&&(Yn(be.imports[rn])||!(be.imports[rn].flags&8388608));ra?Rt.set(be.path,!0):Is&&ta(Xn,!1,!1,{kind:3,file:be.path,index:rn},sn.packageId),ki&&ct--}}else be.resolvedModules=void 0}function At(be,De){let mt=!0,St=qe.getCanonicalFileName(_a(De,Gt));for(let Zt of be)Zt.isDeclarationFile||qe.getCanonicalFileName(_a(Zt.fileName,Gt)).indexOf(St)!==0&&(Qo(Zt,_.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files,[Zt.fileName,De]),mt=!1);return mt}function xt(be){dr||(dr=new Map);let De=$L(be),mt=rt(De),St=dr.get(mt);if(St!==void 0)return St||void 0;let Zt,rn;if(qe.getParsedCommandLine){if(Zt=qe.getParsedCommandLine(De),!Zt){ka(void 0,mt,void 0),dr.set(mt,!1);return}rn=L.checkDefined(Zt.options.configFile),L.assert(!rn.path||rn.path===mt),ka(rn,mt,void 0)}else{let Dn=_a(ni(De),qe.getCurrentDirectory());if(rn=qe.getSourceFile(De,100),ka(rn,mt,void 0),rn===void 0){dr.set(mt,!1);return}Zt=MO(rn,zt,Dn,void 0,De)}rn.fileName=De,rn.path=mt,rn.resolvedPath=mt,rn.originalFileName=De;let sn={commandLine:Zt,sourceFile:rn};return dr.set(mt,sn),Zt.projectReferences&&(sn.references=Zt.projectReferences.map(xt)),sn}function qt(){R.strictPropertyInitialization&&!Uf(R,\"strictNullChecks\")&&Io(_.Option_0_cannot_be_specified_without_specifying_option_1,\"strictPropertyInitialization\",\"strictNullChecks\"),R.exactOptionalPropertyTypes&&!Uf(R,\"strictNullChecks\")&&Io(_.Option_0_cannot_be_specified_without_specifying_option_1,\"exactOptionalPropertyTypes\",\"strictNullChecks\"),(R.isolatedModules||R.verbatimModuleSyntax)&&(R.out&&Io(_.Option_0_cannot_be_specified_with_option_1,\"out\",R.verbatimModuleSyntax?\"verbatimModuleSyntax\":\"isolatedModules\"),R.outFile&&Io(_.Option_0_cannot_be_specified_with_option_1,\"outFile\",R.verbatimModuleSyntax?\"verbatimModuleSyntax\":\"isolatedModules\")),R.inlineSourceMap&&(R.sourceMap&&Io(_.Option_0_cannot_be_specified_with_option_1,\"sourceMap\",\"inlineSourceMap\"),R.mapRoot&&Io(_.Option_0_cannot_be_specified_with_option_1,\"mapRoot\",\"inlineSourceMap\")),R.composite&&(R.declaration===!1&&Io(_.Composite_projects_may_not_disable_declaration_emit,\"declaration\"),R.incremental===!1&&Io(_.Composite_projects_may_not_disable_incremental_compilation,\"declaration\"));let be=Ss(R);if(R.tsBuildInfoFile?NR(R)||Io(_.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,\"tsBuildInfoFile\",\"incremental\",\"composite\"):R.incremental&&!be&&!R.configFilePath&&_n.add(ps(_.Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified)),Vr(),Bu(),R.composite){let sn=new Set(Y.map(rt));for(let Dn of _e)pS(Dn,G)&&!sn.has(Dn.path)&&Qo(Dn,_.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern,[Dn.fileName,R.configFilePath||\"\"])}if(R.paths){for(let sn in R.paths)if(fs(R.paths,sn))if(CW(sn)||Dc(!0,sn,_.Pattern_0_can_have_at_most_one_Asterisk_character,sn),ba(R.paths[sn])){let Dn=R.paths[sn].length;Dn===0&&Dc(!1,sn,_.Substitutions_for_pattern_0_shouldn_t_be_an_empty_array,sn);for(let kr=0;kr<Dn;kr++){let ki=R.paths[sn][kr],Vn=typeof ki;Vn===\"string\"?(CW(ki)||Pd(sn,kr,_.Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character,ki,sn),!R.baseUrl&&!Jd(ki)&&!nI(ki)&&Pd(sn,kr,_.Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash)):Pd(sn,kr,_.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2,ki,sn,Vn)}}else Dc(!1,sn,_.Substitutions_for_pattern_0_should_be_an_array,sn)}!R.sourceMap&&!R.inlineSourceMap&&(R.inlineSources&&Io(_.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided,\"inlineSources\"),R.sourceRoot&&Io(_.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided,\"sourceRoot\")),R.out&&R.outFile&&Io(_.Option_0_cannot_be_specified_with_option_1,\"out\",\"outFile\"),R.mapRoot&&!(R.sourceMap||R.declarationMap)&&Io(_.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,\"mapRoot\",\"sourceMap\",\"declarationMap\"),R.declarationDir&&(__(R)||Io(_.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,\"declarationDir\",\"declaration\",\"composite\"),be&&Io(_.Option_0_cannot_be_specified_with_option_1,\"declarationDir\",R.out?\"out\":\"outFile\")),R.declarationMap&&!__(R)&&Io(_.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,\"declarationMap\",\"declaration\",\"composite\"),R.lib&&R.noLib&&Io(_.Option_0_cannot_be_specified_with_option_1,\"lib\",\"noLib\"),R.noImplicitUseStrict&&Uf(R,\"alwaysStrict\")&&Io(_.Option_0_cannot_be_specified_with_option_1,\"noImplicitUseStrict\",\"alwaysStrict\");let De=Do(R),mt=wr(_e,sn=>Lc(sn)&&!sn.isDeclarationFile);if(R.isolatedModules||R.verbatimModuleSyntax)R.module===0&&De<2&&R.isolatedModules&&Io(_.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher,\"isolatedModules\",\"target\"),R.preserveConstEnums===!1&&Io(_.Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled,R.verbatimModuleSyntax?\"verbatimModuleSyntax\":\"isolatedModules\",\"preserveConstEnums\");else if(mt&&De<2&&R.module===0){let sn=w0(mt,typeof mt.externalModuleIndicator==\"boolean\"?mt:mt.externalModuleIndicator);_n.add(al(mt,sn.start,sn.length,_.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none))}if(be&&!R.emitDeclarationOnly){if(R.module&&!(R.module===2||R.module===4))Io(_.Only_amd_and_system_modules_are_supported_alongside_0,R.out?\"out\":\"outFile\",\"module\");else if(R.module===void 0&&mt){let sn=w0(mt,typeof mt.externalModuleIndicator==\"boolean\"?mt:mt.externalModuleIndicator);_n.add(al(mt,sn.start,sn.length,_.Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system,R.out?\"out\":\"outFile\"))}}if(RT(R)&&($s(R)===1?Io(_.Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic,\"resolveJsonModule\"):l4(R)||Io(_.Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_esNext,\"resolveJsonModule\",\"module\")),R.outDir||R.rootDir||R.sourceRoot||R.mapRoot){let sn=Ot();R.outDir&&sn===\"\"&&_e.some(Dn=>_p(Dn.fileName)>1)&&Io(_.Cannot_find_the_common_subdirectory_path_for_the_input_files,\"outDir\")}R.useDefineForClassFields&&De===0&&Io(_.Option_0_cannot_be_specified_when_option_target_is_ES3,\"useDefineForClassFields\"),R.checkJs&&!PR(R)&&_n.add(ps(_.Option_0_cannot_be_specified_without_specifying_option_1,\"checkJs\",\"allowJs\")),R.emitDeclarationOnly&&(__(R)||Io(_.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,\"emitDeclarationOnly\",\"declaration\",\"composite\"),R.noEmit&&Io(_.Option_0_cannot_be_specified_with_option_1,\"emitDeclarationOnly\",\"noEmit\")),R.emitDecoratorMetadata&&!R.experimentalDecorators&&Io(_.Option_0_cannot_be_specified_without_specifying_option_1,\"emitDecoratorMetadata\",\"experimentalDecorators\"),R.jsxFactory?(R.reactNamespace&&Io(_.Option_0_cannot_be_specified_with_option_1,\"reactNamespace\",\"jsxFactory\"),(R.jsx===4||R.jsx===5)&&Io(_.Option_0_cannot_be_specified_when_option_jsx_is_1,\"jsxFactory\",NL.get(\"\"+R.jsx)),zS(R.jsxFactory,De)||Jf(\"jsxFactory\",_.Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name,R.jsxFactory)):R.reactNamespace&&!i_(R.reactNamespace,De)&&Jf(\"reactNamespace\",_.Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier,R.reactNamespace),R.jsxFragmentFactory&&(R.jsxFactory||Io(_.Option_0_cannot_be_specified_without_specifying_option_1,\"jsxFragmentFactory\",\"jsxFactory\"),(R.jsx===4||R.jsx===5)&&Io(_.Option_0_cannot_be_specified_when_option_jsx_is_1,\"jsxFragmentFactory\",NL.get(\"\"+R.jsx)),zS(R.jsxFragmentFactory,De)||Jf(\"jsxFragmentFactory\",_.Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name,R.jsxFragmentFactory)),R.reactNamespace&&(R.jsx===4||R.jsx===5)&&Io(_.Option_0_cannot_be_specified_when_option_jsx_is_1,\"reactNamespace\",NL.get(\"\"+R.jsx)),R.jsxImportSource&&R.jsx===2&&Io(_.Option_0_cannot_be_specified_when_option_jsx_is_1,\"jsxImportSource\",NL.get(\"\"+R.jsx)),R.preserveValueImports&&Rl(R)<5&&Io(_.Option_0_can_only_be_used_when_module_is_set_to_es2015_or_later,\"preserveValueImports\");let St=Rl(R);R.verbatimModuleSyntax&&((St===2||St===3||St===4)&&Io(_.Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System,\"verbatimModuleSyntax\"),R.isolatedModules&&He(\"isolatedModules\",\"verbatimModuleSyntax\"),R.preserveValueImports&&He(\"preserveValueImports\",\"verbatimModuleSyntax\"),R.importsNotUsedAsValues&&He(\"importsNotUsedAsValues\",\"verbatimModuleSyntax\")),R.allowImportingTsExtensions&&!(R.noEmit||R.emitDeclarationOnly)&&Jf(\"allowImportingTsExtensions\",_.Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set);let Zt=$s(R);if(R.resolvePackageJsonExports&&!bS(Zt)&&Io(_.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler,\"resolvePackageJsonExports\"),R.resolvePackageJsonImports&&!bS(Zt)&&Io(_.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler,\"resolvePackageJsonImports\"),R.customConditions&&!bS(Zt)&&Io(_.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler,\"customConditions\"),Zt===100&&!SW(St)&&Jf(\"moduleResolution\",_.Option_0_can_only_be_used_when_module_is_set_to_es2015_or_later,\"bundler\"),!R.noEmit&&!R.suppressOutputPathCheck){let sn=j(),Dn=new Set;WK(sn,kr=>{R.emitDeclarationOnly||rn(kr.jsFilePath,Dn),rn(kr.declarationFilePath,Dn)})}function rn(sn,Dn){if(sn){let kr=rt(sn);if(ri.has(kr)){let Vn;R.configFilePath||(Vn=da(void 0,_.Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig)),Vn=da(Vn,_.Cannot_write_file_0_because_it_would_overwrite_input_file,sn),Nt(sn,s4(Vn))}let ki=qe.useCaseSensitiveFileNames()?kr:n_(kr);Dn.has(ki)?Nt(sn,ps(_.Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files,sn)):Dn.add(ki)}}}function Ln(){let be=R.ignoreDeprecations;if(be){if(be===\"5.0\")return new r_(be);U()}return r_.zero}function mr(be,De,mt,St){let Zt=new r_(be),rn=new r_(De),sn=new r_(fe||Sg),Dn=Ln(),kr=rn.compareTo(sn)!==1,ki=!kr&&Dn.compareTo(Zt)===-1;(kr||ki)&&St((Vn,$t,Xn)=>{kr?$t===void 0?mt(Vn,$t,Xn,_.Option_0_has_been_removed_Please_remove_it_from_your_configuration,Vn):mt(Vn,$t,Xn,_.Option_0_1_has_been_removed_Please_remove_it_from_your_configuration,Vn,$t):$t===void 0?mt(Vn,$t,Xn,_.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error,Vn,De,be):mt(Vn,$t,Xn,_.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error,Vn,$t,De,be)})}function Vr(){function be(De,mt,St,Zt,rn,sn,Dn,kr){if(St){let ki=da(void 0,_.Use_0_instead,St),Vn=da(ki,Zt,rn,sn,Dn,kr);E_(!mt,De,void 0,Vn)}else E_(!mt,De,void 0,Zt,rn,sn,Dn,kr)}mr(\"5.0\",\"5.5\",be,De=>{R.target===0&&De(\"target\",\"ES3\"),R.noImplicitUseStrict&&De(\"noImplicitUseStrict\"),R.keyofStringsOnly&&De(\"keyofStringsOnly\"),R.suppressExcessPropertyErrors&&De(\"suppressExcessPropertyErrors\"),R.suppressImplicitAnyIndexErrors&&De(\"suppressImplicitAnyIndexErrors\"),R.noStrictGenericChecks&&De(\"noStrictGenericChecks\"),R.charset&&De(\"charset\"),R.out&&De(\"out\",void 0,\"outFile\"),R.importsNotUsedAsValues&&De(\"importsNotUsedAsValues\",void 0,\"verbatimModuleSyntax\"),R.preserveValueImports&&De(\"preserveValueImports\",void 0,\"verbatimModuleSyntax\")})}function gi(be,De,mt){function St(Zt,rn,sn,Dn,kr,ki,Vn,$t){Fd(De,mt,Dn,kr,ki,Vn,$t)}mr(\"5.0\",\"5.5\",St,Zt=>{be.prepend&&Zt(\"prepend\")})}function Ea(be,De,mt,St){var Zt;let rn,sn,Dn=vb(De)?De:void 0;be&&((Zt=Pe.get(be.path))==null||Zt.forEach(Xn)),De&&Xn(De),Dn&&rn?.length===1&&(rn=void 0);let kr=Dn&&YL(Hi,Dn),ki=rn&&da(rn,_.The_file_is_in_the_program_because_Colon),Vn=be&&Oq(be),$t=da(Vn?ki?[ki,...Vn]:Vn:ki,mt,...St||Je);return kr&&F2(kr)?S6(kr.file,kr.pos,kr.end-kr.pos,$t,sn):s4($t,sn);function Xn(ra){(rn||(rn=[])).push(Mq(G,ra)),!Dn&&vb(ra)?Dn=ra:Dn!==ra&&(sn=Sn(sn,Cs(ra))),ra===De&&(De=void 0)}}function bo(be,De,mt,St){(Ne||(Ne=[])).push({kind:1,file:be&&be.path,fileProcessingReason:De,diagnostic:mt,args:St})}function Qo(be,De,mt){_n.add(Ea(be,void 0,De,mt))}function Cs(be){if(vb(be)){let St=YL(Hi,be),Zt;switch(be.kind){case 3:Zt=_.File_is_included_via_import_here;break;case 4:Zt=_.File_is_included_via_reference_here;break;case 5:Zt=_.File_is_included_via_type_library_reference_here;break;case 7:Zt=_.File_is_included_via_library_reference_here;break;default:L.assertNever(be)}return F2(St)?al(St.file,St.pos,St.end-St.pos,Zt):void 0}if(!R.configFile)return;let De,mt;switch(be.kind){case 0:if(!R.configFile.configFileSpecs)return;let St=_a(Y[be.index],Gt),Zt=Nq(G,St);if(Zt){De=w6(R.configFile,\"files\",Zt),mt=_.File_is_matched_by_files_list_specified_here;break}let rn=Pq(G,St);if(!rn||!Ta(rn))return;De=w6(R.configFile,\"include\",rn),mt=_.File_is_matched_by_include_pattern_specified_here;break;case 1:case 2:let sn=L.checkDefined(En?.[be.index]),Dn=gN($,En,(Xn,ra,Is)=>Xn===sn?{sourceFile:ra?.sourceFile||R.configFile,index:Is}:void 0);if(!Dn)return;let{sourceFile:kr,index:ki}=Dn,Vn=ks(Hw(kr,\"references\"),Xn=>fu(Xn.initializer)?Xn.initializer:void 0);return Vn&&Vn.elements.length>ki?Nu(kr,Vn.elements[ki],be.kind===2?_.File_is_output_from_referenced_project_specified_here:_.File_is_source_from_referenced_project_specified_here):void 0;case 8:if(!R.types)return;De=zf(\"types\",be.typeReference),mt=_.File_is_entry_point_of_type_library_specified_here;break;case 6:if(be.index!==void 0){De=zf(\"lib\",R.lib[be.index]),mt=_.File_is_library_specified_here;break}let $t=Ld(zO.type,(Xn,ra)=>Xn===Do(R)?ra:void 0);De=$t?Md(\"target\",$t):void 0,mt=_.File_is_default_library_for_target_specified_here;break;default:L.assertNever(be)}return De&&Nu(R.configFile,De,mt)}function Bu(){let be=R.suppressOutputPathCheck?void 0:Jg(R);gN($,En,(De,mt,St)=>{let Zt=(mt?mt.commandLine.projectReferences:$)[St],rn=mt&&mt.sourceFile;if(gi(Zt,rn,St),!De){Fd(rn,St,_.File_0_not_found,Zt.path);return}let sn=De.commandLine.options;if((!sn.composite||sn.noEmit)&&(mt?mt.commandLine.fileNames:Y).length&&(sn.composite||Fd(rn,St,_.Referenced_project_0_must_have_setting_composite_Colon_true,Zt.path),sn.noEmit&&Fd(rn,St,_.Referenced_project_0_may_not_disable_emit,Zt.path)),Zt.prepend){let Dn=Ss(sn);Dn?qe.fileExists(Dn)||Fd(rn,St,_.Output_file_0_from_project_1_does_not_exist,Dn,Zt.path):Fd(rn,St,_.Cannot_prepend_project_0_because_it_does_not_have_outFile_set,Zt.path)}!mt&&be&&be===Jg(sn)&&(Fd(rn,St,_.Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1,be,Zt.path),Ni.set(rt(be),!0))})}function Pd(be,De,mt,St,Zt,rn){let sn=!0,Dn=Zl();for(let kr of Dn)if(rs(kr.initializer))for(let ki of MA(kr.initializer,be)){let Vn=ki.initializer;fu(Vn)&&Vn.elements.length>De&&(_n.add(Nu(R.configFile,Vn.elements[De],mt,St,Zt,rn)),sn=!1)}sn&&_n.add(ps(mt,St,Zt,rn))}function Dc(be,De,mt,St){let Zt=!0,rn=Zl();for(let sn of rn)rs(sn.initializer)&&M(sn.initializer,be,De,void 0,mt,St)&&(Zt=!1);Zt&&_n.add(ps(mt,St))}function gd(be){let De=Y_();return De&&MA(De,be)}function Zl(){return gd(\"paths\")||Je}function Md(be,De){let mt=gd(be);return mt&&ks(mt,St=>yo(St.initializer)&&St.initializer.text===De?St.initializer:void 0)}function zf(be,De){let mt=Y_();return mt&&rce(mt,be,De)}function Io(be,De,mt,St){E_(!0,De,mt,be,De,mt,St)}function Jf(be,De,mt,St){E_(!1,be,void 0,De,mt,St)}function Fd(be,De,mt,St,Zt,rn,sn){let Dn=ks(Hw(be||R.configFile,\"references\"),kr=>fu(kr.initializer)?kr.initializer:void 0);Dn&&Dn.elements.length>De?_n.add(Nu(be||R.configFile,Dn.elements[De],mt,St,Zt,rn,sn)):_n.add(ps(mt,St,Zt,rn,sn))}function E_(be,De,mt,St,Zt,rn,sn,Dn){let kr=Y_();(!kr||!M(kr,be,De,mt,St,Zt,rn,sn,Dn))&&(\"messageText\"in St?_n.add(s4(St)):_n.add(ps(St,Zt,rn,sn,Dn)))}function Y_(){if(Pi===void 0){Pi=!1;let be=LI(R.configFile);if(be){for(let De of MA(be,\"compilerOptions\"))if(rs(De.initializer)){Pi=De.initializer;break}}}return Pi||void 0}function M(be,De,mt,St,Zt,rn,sn,Dn,kr){let ki=MA(be,mt,St);for(let Vn of ki)\"messageText\"in Zt?_n.add(Lh(R.configFile,De?Vn.name:Vn.initializer,Zt)):_n.add(Nu(R.configFile,De?Vn.name:Vn.initializer,Zt,rn,sn,Dn,kr));return!!ki.length}function He(be,De){let mt=Y_();mt?M(mt,!0,be,void 0,_.Option_0_is_redundant_and_cannot_be_specified_with_option_1,be,De):Io(_.Option_0_is_redundant_and_cannot_be_specified_with_option_1,be,De)}function Nt(be,De){Ni.set(rt(be),!0),_n.add(De)}function Pn(be){if(R.noEmit)return!1;let De=rt(be);if(Hi(De))return!1;let mt=Ss(R);if(mt)return la(De,mt)||la(De,ld(mt)+\".d.ts\");if(R.declarationDir&&Gy(R.declarationDir,De,Gt,!qe.useCaseSensitiveFileNames()))return!0;if(R.outDir)return Gy(R.outDir,De,Gt,!qe.useCaseSensitiveFileNames());if($c(De,dL)||Fu(De)){let St=ld(De);return!!Hi(St+\".ts\")||!!Hi(St+\".tsx\")}return!1}function la(be,De){return cT(be,De,Gt,!qe.useCaseSensitiveFileNames())===0}function oa(){return qe.getSymlinkCache?qe.getSymlinkCache():(ge||(ge=Ile(Gt,ee)),_e&&Ye&&!ge.hasProcessedResolutions()&&ge.setSymlinksFromResolutions(_e,Ye),ge)}}function r8e(e){let t,r=e.compilerHost.fileExists,i=e.compilerHost.directoryExists,o=e.compilerHost.getDirectories,s=e.compilerHost.realpath;if(!e.useSourceOfProjectReferenceRedirect)return{onProgramCreateComplete:Ba,fileExists:d};e.compilerHost.fileExists=d;let l;return i&&(l=e.compilerHost.directoryExists=x=>i.call(e.compilerHost,x)?(v(x),!0):e.getResolvedProjectReferences()?(t||(t=new Set,e.forEachResolvedProjectReference(A=>{let w=Ss(A.commandLine.options);if(w)t.add(ni(e.toPath(w)));else{let C=A.commandLine.options.declarationDir||A.commandLine.options.outDir;C&&t.add(e.toPath(C))}})),S(x,!1)):!1),o&&(e.compilerHost.getDirectories=x=>!e.getResolvedProjectReferences()||i&&i.call(e.compilerHost,x)?o.call(e.compilerHost,x):[]),s&&(e.compilerHost.realpath=x=>{var A;return((A=e.getSymlinkCache().getSymlinkedFiles())==null?void 0:A.get(e.toPath(x)))||s.call(e.compilerHost,x)}),{onProgramCreateComplete:f,fileExists:d,directoryExists:l};function f(){e.compilerHost.fileExists=r,e.compilerHost.directoryExists=i,e.compilerHost.getDirectories=o}function d(x){return r.call(e.compilerHost,x)?!0:!e.getResolvedProjectReferences()||!Fu(x)?!1:S(x,!0)}function g(x){let A=e.getSourceOfProjectReferenceRedirect(e.toPath(x));return A!==void 0?Ta(A)?r.call(e.compilerHost,A):!0:void 0}function m(x){let A=e.toPath(x),w=`${A}${_s}`;return TI(t,C=>A===C||na(C,w)||na(A,`${C}/`))}function v(x){var A;if(!e.getResolvedProjectReferences()||sL(x)||!s||!jl(x,Wg))return;let w=e.getSymlinkCache(),C=cu(e.toPath(x));if((A=w.getSymlinkedDirectories())!=null&&A.has(C))return;let P=So(s.call(e.compilerHost,x)),F;if(P===x||(F=cu(e.toPath(P)))===C){w.setSymlinkedDirectory(C,!1);return}w.setSymlinkedDirectory(x,{real:cu(P),realPath:F})}function S(x,A){var w;let C=A?W=>g(W):W=>m(W),P=C(x);if(P!==void 0)return P;let F=e.getSymlinkCache(),B=F.getSymlinkedDirectories();if(!B)return!1;let q=e.toPath(x);return jl(q,Wg)?A&&((w=F.getSymlinkedFiles())!=null&&w.has(q))?!0:FD(B.entries(),([W,Y])=>{if(!Y||!na(q,W))return;let R=C(q.replace(W,Y.realPath));if(A&&R){let ie=_a(x,e.compilerHost.getCurrentDirectory());F.setSymlinkedFile(q,`${Y.real}${ie.replace(new RegExp(W,\"i\"),\"\")}`)}return R})||!1:!1}}function dq(e,t,r,i){let o=e.getCompilerOptions();if(o.noEmit)return e.getSemanticDiagnostics(t,i),t||Ss(o)?HF:e.emitBuildInfo(r,i);if(!o.noEmitOnError)return;let s=[...e.getOptionsDiagnostics(i),...e.getSyntacticDiagnostics(t,i),...e.getGlobalDiagnostics(i),...e.getSemanticDiagnostics(t,i)];if(s.length===0&&__(e.getCompilerOptions())&&(s=e.getDeclarationDiagnostics(void 0,i)),!s.length)return;let l;if(!t&&!Ss(o)){let f=e.emitBuildInfo(r,i);f.diagnostics&&(s=[...s,...f.diagnostics]),l=f.emittedFiles}return{diagnostics:s,sourceMaps:void 0,emittedFiles:l,emitSkipped:!0}}function MF(e,t){return Pr(e,r=>!r.skippedOn||!t[r.skippedOn])}function FF(e,t=e){return{fileExists:r=>t.fileExists(r),readDirectory(r,i,o,s,l){return L.assertIsDefined(t.readDirectory,\"'CompilerHost.readDirectory' must be implemented to correctly process 'projectReferences'\"),t.readDirectory(r,i,o,s,l)},readFile:r=>t.readFile(r),useCaseSensitiveFileNames:e.useCaseSensitiveFileNames(),getCurrentDirectory:()=>e.getCurrentDirectory(),onUnRecoverableConfigFileDiagnostic:e.onUnRecoverableConfigFileDiagnostic||Qv,trace:e.trace?r=>e.trace(r):void 0}}function fq(e,t,r,i){if(!e)return Je;let o;for(let s=0;s<e.length;s++){let l=e[s],f=t(l,s);if(l.prepend&&f&&f.options){if(!Ss(f.options))continue;let{jsFilePath:g,sourceMapFilePath:m,declarationFilePath:v,declarationMapPath:S,buildInfoPath:x}=JL(f.options,!0),A=_z(r,g,m,v,S,x,i,f.options);(o||(o=[])).push(A)}}return o||Je}function $L(e){return Hq(e.path)}function _q(e,{extension:t},{isDeclarationFile:r}){switch(t){case\".ts\":case\".d.ts\":case\".mts\":case\".d.mts\":case\".cts\":case\".d.cts\":return;case\".tsx\":return i();case\".jsx\":return i()||o();case\".js\":case\".mjs\":case\".cjs\":return o();case\".json\":return s();default:return l()}function i(){return e.jsx?void 0:_.Module_0_was_resolved_to_1_but_jsx_is_not_set}function o(){return PR(e)||!Uf(e,\"noImplicitAny\")?void 0:_.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type}function s(){return RT(e)?void 0:_.Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used}function l(){return r||e.allowArbitraryExtensions?void 0:_.Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set}}function qpe({imports:e,moduleAugmentations:t}){let r=e.map(i=>i);for(let i of t)i.kind===10&&r.push(i);return r}function GF({imports:e,moduleAugmentations:t},r){if(r<e.length)return e[r];let i=e.length;for(let o of t)if(o.kind===10){if(r===i)return o;i++}L.fail(\"should never ask for module name at index higher than possible module name\")}var pq,BF,UF,mq,hq,Xpe,gq,yq,QL,yN,VF,jF,HF,i8e=gt({\"src/compiler/program.ts\"(){\"use strict\";fa(),fa(),E0(),pq=(e=>(e.Grey=\"\\x1B[90m\",e.Red=\"\\x1B[91m\",e.Yellow=\"\\x1B[93m\",e.Blue=\"\\x1B[94m\",e.Cyan=\"\\x1B[96m\",e))(pq||{}),BF=\"\\x1B[7m\",UF=\" \",mq=\"\\x1B[0m\",hq=\"...\",Xpe=\"  \",gq=\"    \",yq={resolvedModule:void 0,resolvedTypeReferenceDirective:void 0},QL={getName:sq,getMode:(e,t)=>W_(t,e)},yN={getName:RF,getMode:(e,t)=>mN(e,t?.impliedNodeFormat)},VF=\"__inferred type names__.ts\",jF=new Set([_.Cannot_redeclare_block_scoped_variable_0.code,_.A_module_cannot_have_multiple_default_exports.code,_.Another_export_default_is_here.code,_.The_first_export_default_is_here.code,_.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module.code,_.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode.code,_.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here.code,_.constructor_is_a_reserved_word.code,_.delete_cannot_be_called_on_an_identifier_in_strict_mode.code,_.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode.code,_.Invalid_use_of_0_Modules_are_automatically_in_strict_mode.code,_.Invalid_use_of_0_in_strict_mode.code,_.A_label_is_not_allowed_here.code,_.Octal_literals_are_not_allowed_in_strict_mode.code,_.with_statements_are_not_allowed_in_strict_mode.code,_.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement.code,_.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement.code,_.A_class_declaration_without_the_default_modifier_must_have_a_name.code,_.A_class_member_cannot_have_the_0_keyword.code,_.A_comma_expression_is_not_allowed_in_a_computed_property_name.code,_.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement.code,_.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code,_.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code,_.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement.code,_.A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration.code,_.A_definite_assignment_assertion_is_not_permitted_in_this_context.code,_.A_destructuring_declaration_must_have_an_initializer.code,_.A_get_accessor_cannot_have_parameters.code,_.A_rest_element_cannot_contain_a_binding_pattern.code,_.A_rest_element_cannot_have_a_property_name.code,_.A_rest_element_cannot_have_an_initializer.code,_.A_rest_element_must_be_last_in_a_destructuring_pattern.code,_.A_rest_parameter_cannot_have_an_initializer.code,_.A_rest_parameter_must_be_last_in_a_parameter_list.code,_.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma.code,_.A_return_statement_cannot_be_used_inside_a_class_static_block.code,_.A_set_accessor_cannot_have_rest_parameter.code,_.A_set_accessor_must_have_exactly_one_parameter.code,_.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module.code,_.An_export_declaration_cannot_have_modifiers.code,_.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module.code,_.An_import_declaration_cannot_have_modifiers.code,_.An_object_member_cannot_be_declared_optional.code,_.Argument_of_dynamic_import_cannot_be_spread_element.code,_.Cannot_assign_to_private_method_0_Private_methods_are_not_writable.code,_.Cannot_redeclare_identifier_0_in_catch_clause.code,_.Catch_clause_variable_cannot_have_an_initializer.code,_.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator.code,_.Classes_can_only_extend_a_single_class.code,_.Classes_may_not_have_a_field_named_constructor.code,_.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern.code,_.Duplicate_label_0.code,_.Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments.code,_.For_await_loops_cannot_be_used_inside_a_class_static_block.code,_.JSX_attributes_must_only_be_assigned_a_non_empty_expression.code,_.JSX_elements_cannot_have_multiple_attributes_with_the_same_name.code,_.JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array.code,_.JSX_property_access_expressions_cannot_include_JSX_namespace_names.code,_.Jump_target_cannot_cross_function_boundary.code,_.Line_terminator_not_permitted_before_arrow.code,_.Modifiers_cannot_appear_here.code,_.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement.code,_.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement.code,_.Private_identifiers_are_not_allowed_outside_class_bodies.code,_.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression.code,_.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier.code,_.Tagged_template_expressions_are_not_permitted_in_an_optional_chain.code,_.The_left_hand_side_of_a_for_of_statement_may_not_be_async.code,_.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer.code,_.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer.code,_.Trailing_comma_not_allowed.code,_.Variable_declaration_list_cannot_be_empty.code,_._0_and_1_operations_cannot_be_mixed_without_parentheses.code,_._0_expected.code,_._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2.code,_._0_list_cannot_be_empty.code,_._0_modifier_already_seen.code,_._0_modifier_cannot_appear_on_a_constructor_declaration.code,_._0_modifier_cannot_appear_on_a_module_or_namespace_element.code,_._0_modifier_cannot_appear_on_a_parameter.code,_._0_modifier_cannot_appear_on_class_elements_of_this_kind.code,_._0_modifier_cannot_be_used_here.code,_._0_modifier_must_precede_1_modifier.code,_.const_declarations_can_only_be_declared_inside_a_block.code,_.const_declarations_must_be_initialized.code,_.extends_clause_already_seen.code,_.let_declarations_can_only_be_declared_inside_a_block.code,_.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations.code,_.Class_constructor_may_not_be_a_generator.code,_.Class_constructor_may_not_be_an_accessor.code,_.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code]),HF={diagnostics:Je,sourceMaps:void 0,emittedFiles:void 0,emitSkipped:!0}}}),a8e=gt({\"src/compiler/builderStatePublic.ts\"(){\"use strict\"}});function Ype(e,t,r,i,o,s){let l=[],{emitSkipped:f,diagnostics:d}=e.emit(t,g,i,r,o,s);return{outputFiles:l,emitSkipped:f,diagnostics:d};function g(m,v,S){l.push({name:m,writeByteOrderMark:S,text:v})}}var pm,o8e=gt({\"src/compiler/builderState.ts\"(){\"use strict\";fa(),(e=>{function t(){function Z(U,re,le){let _e={getKeys:ge=>re.get(ge),getValues:ge=>U.get(ge),keys:()=>U.keys(),deleteKey:ge=>{(le||(le=new Set)).add(ge);let X=U.get(ge);return X?(X.forEach(Ve=>i(re,Ve,ge)),U.delete(ge),!0):!1},set:(ge,X)=>{le?.delete(ge);let Ve=U.get(ge);return U.set(ge,X),Ve?.forEach(we=>{X.has(we)||i(re,we,ge)}),X.forEach(we=>{Ve?.has(we)||r(re,we,ge)}),_e}};return _e}return Z(new Map,new Map,void 0)}e.createManyToManyPathMap=t;function r(Z,U,re){let le=Z.get(U);le||(le=new Set,Z.set(U,le)),le.add(re)}function i(Z,U,re){let le=Z.get(U);return le?.delete(re)?(le.size||Z.delete(U),!0):!1}function o(Z){return Zi(Z.declarations,U=>{var re;return(re=Gn(U))==null?void 0:re.resolvedPath})}function s(Z,U){let re=Z.getSymbolAtLocation(U);return re&&o(re)}function l(Z,U,re,le){return Ts(Z.getProjectReferenceRedirect(U)||U,re,le)}function f(Z,U,re){let le;if(U.imports&&U.imports.length>0){let Ve=Z.getTypeChecker();for(let we of U.imports){let ke=s(Ve,we);ke?.forEach(X)}}let _e=ni(U.resolvedPath);if(U.referencedFiles&&U.referencedFiles.length>0)for(let Ve of U.referencedFiles){let we=l(Z,Ve.fileName,_e,re);X(we)}if(U.resolvedTypeReferenceDirectiveNames&&U.resolvedTypeReferenceDirectiveNames.forEach(({resolvedTypeReferenceDirective:Ve})=>{if(!Ve)return;let we=Ve.resolvedFileName,ke=l(Z,we,_e,re);X(ke)}),U.moduleAugmentations.length){let Ve=Z.getTypeChecker();for(let we of U.moduleAugmentations){if(!yo(we))continue;let ke=Ve.getSymbolAtLocation(we);ke&&ge(ke)}}for(let Ve of Z.getTypeChecker().getAmbientModules())Ve.declarations&&Ve.declarations.length>1&&ge(Ve);return le;function ge(Ve){if(Ve.declarations)for(let we of Ve.declarations){let ke=Gn(we);ke&&ke!==U&&X(ke.resolvedPath)}}function X(Ve){(le||(le=new Set)).add(Ve)}}function d(Z,U){return U&&!U.referencedMap==!Z}e.canReuseOldState=d;function g(Z,U,re){var le,_e,ge;let X=new Map,Ve=Z.getCompilerOptions(),we=Ss(Ve),ke=Ve.module!==0&&!we?t():void 0,Pe=ke?t():void 0,Ce=d(ke,U);Z.getTypeChecker();for(let Ie of Z.getSourceFiles()){let Be=L.checkDefined(Ie.version,\"Program intended to be used with Builder should have source files with versions set\"),Ne=Ce?(le=U.oldSignatures)==null?void 0:le.get(Ie.resolvedPath):void 0,Le=Ne===void 0?Ce?(_e=U.fileInfos.get(Ie.resolvedPath))==null?void 0:_e.signature:void 0:Ne||void 0;if(ke){let Ye=f(Z,Ie,Z.getCanonicalFileName);if(Ye&&ke.set(Ie.resolvedPath,Ye),Ce){let _t=(ge=U.oldExportedModulesMap)==null?void 0:ge.get(Ie.resolvedPath),ct=_t===void 0?U.exportedModulesMap.getValues(Ie.resolvedPath):_t||void 0;ct&&Pe.set(Ie.resolvedPath,ct)}}X.set(Ie.resolvedPath,{version:Be,signature:Le,affectsGlobalScope:we?void 0:R(Ie)||void 0,impliedFormat:Ie.impliedNodeFormat})}return{fileInfos:X,referencedMap:ke,exportedModulesMap:Pe,useFileVersionAsSignature:!re&&!Ce}}e.create=g;function m(Z){Z.allFilesExcludingDefaultLibraryFile=void 0,Z.allFileNames=void 0}e.releaseCache=m;function v(Z,U,re,le,_e){var ge,X;let Ve=S(Z,U,re,le,_e);return(ge=Z.oldSignatures)==null||ge.clear(),(X=Z.oldExportedModulesMap)==null||X.clear(),Ve}e.getFilesAffectedBy=v;function S(Z,U,re,le,_e){let ge=U.getSourceFileByPath(re);return ge?w(Z,U,ge,le,_e)?(Z.referencedMap?fe:$)(Z,U,ge,le,_e):[ge]:Je}e.getFilesAffectedByWithOldState=S;function x(Z,U,re){Z.fileInfos.get(re).signature=U,(Z.hasCalledUpdateShapeSignature||(Z.hasCalledUpdateShapeSignature=new Set)).add(re)}e.updateSignatureOfFile=x;function A(Z,U,re,le,_e){Z.emit(U,(ge,X,Ve,we,ke,Pe)=>{L.assert(Fu(ge),`File extension for signature expected to be dts: Got:: ${ge}`),_e(Tq(Z,U,X,le,Pe),ke)},re,!0,void 0,!0)}e.computeDtsSignature=A;function w(Z,U,re,le,_e,ge=Z.useFileVersionAsSignature){var X;if((X=Z.hasCalledUpdateShapeSignature)!=null&&X.has(re.resolvedPath))return!1;let Ve=Z.fileInfos.get(re.resolvedPath),we=Ve.signature,ke;if(!re.isDeclarationFile&&!ge&&A(U,re,le,_e,(Pe,Ce)=>{ke=Pe,ke!==we&&C(Z,re,Ce[0].exportedModulesFromDeclarationEmit)}),ke===void 0&&(ke=re.version,Z.exportedModulesMap&&ke!==we)){(Z.oldExportedModulesMap||(Z.oldExportedModulesMap=new Map)).set(re.resolvedPath,Z.exportedModulesMap.getValues(re.resolvedPath)||!1);let Pe=Z.referencedMap?Z.referencedMap.getValues(re.resolvedPath):void 0;Pe?Z.exportedModulesMap.set(re.resolvedPath,Pe):Z.exportedModulesMap.deleteKey(re.resolvedPath)}return(Z.oldSignatures||(Z.oldSignatures=new Map)).set(re.resolvedPath,we||!1),(Z.hasCalledUpdateShapeSignature||(Z.hasCalledUpdateShapeSignature=new Set)).add(re.resolvedPath),Ve.signature=ke,ke!==we}e.updateShapeSignature=w;function C(Z,U,re){if(!Z.exportedModulesMap)return;(Z.oldExportedModulesMap||(Z.oldExportedModulesMap=new Map)).set(U.resolvedPath,Z.exportedModulesMap.getValues(U.resolvedPath)||!1);let le=P(re);le?Z.exportedModulesMap.set(U.resolvedPath,le):Z.exportedModulesMap.deleteKey(U.resolvedPath)}e.updateExportedModules=C;function P(Z){let U;return Z?.forEach(re=>o(re).forEach(le=>(U??(U=new Set)).add(le))),U}e.getExportedModules=P;function F(Z,U,re){let le=U.getCompilerOptions();if(Ss(le)||!Z.referencedMap||R(re))return B(Z,U);let _e=new Set,ge=[re.resolvedPath];for(;ge.length;){let X=ge.pop();if(!_e.has(X)){_e.add(X);let Ve=Z.referencedMap.getValues(X);if(Ve)for(let we of Ve.keys())ge.push(we)}}return lo(UD(_e.keys(),X=>{var Ve,we;return(we=(Ve=U.getSourceFileByPath(X))==null?void 0:Ve.fileName)!=null?we:X}))}e.getAllDependencies=F;function B(Z,U){if(!Z.allFileNames){let re=U.getSourceFiles();Z.allFileNames=re===Je?Je:re.map(le=>le.fileName)}return Z.allFileNames}function q(Z,U){let re=Z.referencedMap.getKeys(U);return re?lo(re.keys()):[]}e.getReferencedByPaths=q;function W(Z){for(let U of Z.statements)if(!b6(U))return!1;return!0}function Y(Z){return vt(Z.moduleAugmentations,U=>mp(U.parent))}function R(Z){return Y(Z)||!kd(Z)&&!Mf(Z)&&!W(Z)}function ie(Z,U,re){if(Z.allFilesExcludingDefaultLibraryFile)return Z.allFilesExcludingDefaultLibraryFile;let le;re&&_e(re);for(let ge of U.getSourceFiles())ge!==re&&_e(ge);return Z.allFilesExcludingDefaultLibraryFile=le||Je,Z.allFilesExcludingDefaultLibraryFile;function _e(ge){U.isSourceFileDefaultLibrary(ge)||(le||(le=[])).push(ge)}}e.getAllFilesExcludingDefaultLibraryFile=ie;function $(Z,U,re){let le=U.getCompilerOptions();return le&&Ss(le)?[re]:ie(Z,U,re)}function fe(Z,U,re,le,_e){if(R(re))return ie(Z,U,re);let ge=U.getCompilerOptions();if(ge&&(d_(ge)||Ss(ge)))return[re];let X=new Map;X.set(re.resolvedPath,re);let Ve=q(Z,re.resolvedPath);for(;Ve.length>0;){let we=Ve.pop();if(!X.has(we)){let ke=U.getSourceFileByPath(we);X.set(we,ke),ke&&w(Z,U,ke,le,_e)&&Ve.push(...q(Z,ke.resolvedPath))}}return lo(UD(X.values(),we=>we))}})(pm||(pm={}))}});function cv(e){let t=1;return e.sourceMap&&(t=t|2),e.inlineSourceMap&&(t=t|4),__(e)&&(t=t|8),e.declarationMap&&(t=t|16),e.emitDeclarationOnly&&(t=t&24),t}function G2(e,t){let r=t&&(Cg(t)?t:cv(t)),i=Cg(e)?e:cv(e);if(r===i)return 0;if(!r||!i)return i;let o=r^i,s=0;return o&7&&(s=i&7),o&24&&(s=s|i&24),s}function s8e(e,t){return e===t||e!==void 0&&t!==void 0&&e.size===t.size&&!TI(e,r=>!t.has(r))}function c8e(e,t){var r,i;let o=pm.create(e,t,!1);o.program=e;let s=e.getCompilerOptions();o.compilerOptions=s;let l=Ss(s);l?s.composite&&t?.outSignature&&l===Ss(t?.compilerOptions)&&(o.outSignature=t.outSignature&&Qpe(s,t.compilerOptions,t.outSignature)):o.semanticDiagnosticsPerFile=new Map,o.changedFilesSet=new Set,o.latestChangedDtsFile=s.composite?t?.latestChangedDtsFile:void 0;let f=pm.canReuseOldState(o.referencedMap,t),d=f?t.compilerOptions:void 0,g=f&&t.semanticDiagnosticsPerFile&&!!o.semanticDiagnosticsPerFile&&!xle(s,d),m=s.composite&&t?.emitSignatures&&!l&&!Cle(s,t.compilerOptions);f?((r=t.changedFilesSet)==null||r.forEach(w=>o.changedFilesSet.add(w)),!l&&((i=t.affectedFilesPendingEmit)!=null&&i.size)&&(o.affectedFilesPendingEmit=new Map(t.affectedFilesPendingEmit),o.seenAffectedFiles=new Set),o.programEmitPending=t.programEmitPending):o.buildInfoEmitPending=!0;let v=o.referencedMap,S=f?t.referencedMap:void 0,x=g&&!s.skipLibCheck==!d.skipLibCheck,A=x&&!s.skipDefaultLibCheck==!d.skipDefaultLibCheck;if(o.fileInfos.forEach((w,C)=>{var P;let F,B;if(!f||!(F=t.fileInfos.get(C))||F.version!==w.version||F.impliedFormat!==w.impliedFormat||!s8e(B=v&&v.getValues(C),S&&S.getValues(C))||B&&TI(B,q=>!o.fileInfos.has(q)&&t.fileInfos.has(q)))$pe(o,C);else if(g){let q=e.getSourceFileByPath(C);if(q.isDeclarationFile&&!x||q.hasNoDefaultLib&&!A)return;let W=t.semanticDiagnosticsPerFile.get(C);W&&(o.semanticDiagnosticsPerFile.set(C,t.hasReusableDiagnostic?l8e(W,e):W),o.semanticDiagnosticsFromOldState||(o.semanticDiagnosticsFromOldState=new Set),o.semanticDiagnosticsFromOldState.add(C))}if(m){let q=t.emitSignatures.get(C);q&&((P=o.emitSignatures)!=null?P:o.emitSignatures=new Map).set(C,Qpe(s,t.compilerOptions,q))}}),f&&Ld(t.fileInfos,(w,C)=>o.fileInfos.has(C)?!1:l||w.affectsGlobalScope?!0:(o.buildInfoEmitPending=!0,!1)))pm.getAllFilesExcludingDefaultLibraryFile(o,e,void 0).forEach(w=>$pe(o,w.resolvedPath));else if(d){let w=Ale(s,d)?cv(s):G2(s,d);w!==0&&(l?o.programEmitPending=o.programEmitPending?o.programEmitPending|w:w:(e.getSourceFiles().forEach(C=>{o.changedFilesSet.has(C.resolvedPath)||xq(o,C.resolvedPath,w)}),L.assert(!o.seenAffectedFiles||!o.seenAffectedFiles.size),o.seenAffectedFiles=o.seenAffectedFiles||new Set,o.buildInfoEmitPending=!0))}return l&&!o.changedFilesSet.size&&(f&&(o.bundle=t.bundle),vt(e.getProjectReferences(),w=>!!w.prepend)&&(o.programEmitPending=cv(s))),o}function $pe(e,t){e.changedFilesSet.add(t),e.buildInfoEmitPending=!0,e.programEmitPending=void 0}function Qpe(e,t,r){return!!e.declarationMap==!!t.declarationMap?r:Ta(r)?[r]:r[0]}function l8e(e,t){if(!e.length)return Je;let r;return e.map(o=>{let s=Zpe(o,t,i);s.reportsUnnecessary=o.reportsUnnecessary,s.reportsDeprecated=o.reportDeprecated,s.source=o.source,s.skippedOn=o.skippedOn;let{relatedInformation:l}=o;return s.relatedInformation=l?l.length?l.map(f=>Zpe(f,t,i)):[]:void 0,s});function i(o){return r??(r=ni(_a(Jg(t.getCompilerOptions()),t.getCurrentDirectory()))),Ts(o,r,t.getCanonicalFileName)}}function Zpe(e,t,r){let{file:i}=e;return{...e,file:i?t.getSourceFileByPath(r(i)):void 0}}function u8e(e){pm.releaseCache(e),e.program=void 0}function d8e(e){let t=Ss(e.compilerOptions);return L.assert(!e.changedFilesSet.size||t),{affectedFilesPendingEmit:e.affectedFilesPendingEmit&&new Map(e.affectedFilesPendingEmit),seenEmittedFiles:e.seenEmittedFiles&&new Map(e.seenEmittedFiles),programEmitPending:e.programEmitPending,emitSignatures:e.emitSignatures&&new Map(e.emitSignatures),outSignature:e.outSignature,latestChangedDtsFile:e.latestChangedDtsFile,hasChangedEmitSignature:e.hasChangedEmitSignature,changedFilesSet:t?new Set(e.changedFilesSet):void 0}}function f8e(e,t){e.affectedFilesPendingEmit=t.affectedFilesPendingEmit,e.seenEmittedFiles=t.seenEmittedFiles,e.programEmitPending=t.programEmitPending,e.emitSignatures=t.emitSignatures,e.outSignature=t.outSignature,e.latestChangedDtsFile=t.latestChangedDtsFile,e.hasChangedEmitSignature=t.hasChangedEmitSignature,t.changedFilesSet&&(e.changedFilesSet=t.changedFilesSet)}function eme(e,t){L.assert(!t||!e.affectedFiles||e.affectedFiles[e.affectedFilesIndex-1]!==t||!e.semanticDiagnosticsPerFile.has(t.resolvedPath))}function tme(e,t,r){for(var i,o;;){let{affectedFiles:s}=e;if(s){let g=e.seenAffectedFiles,m=e.affectedFilesIndex;for(;m<s.length;){let v=s[m];if(!g.has(v.resolvedPath))return e.affectedFilesIndex=m,xq(e,v.resolvedPath,cv(e.compilerOptions)),m8e(e,v,t,r),v;m++}e.changedFilesSet.delete(e.currentChangedFilePath),e.currentChangedFilePath=void 0,(i=e.oldSignatures)==null||i.clear(),(o=e.oldExportedModulesMap)==null||o.clear(),e.affectedFiles=void 0}let l=e.changedFilesSet.keys().next();if(l.done)return;let f=L.checkDefined(e.program),d=f.getCompilerOptions();if(Ss(d))return L.assert(!e.semanticDiagnosticsPerFile),f;e.affectedFiles=pm.getFilesAffectedByWithOldState(e,f,l.value,t,r),e.currentChangedFilePath=l.value,e.affectedFilesIndex=0,e.seenAffectedFiles||(e.seenAffectedFiles=new Set)}}function _8e(e,t){var r;if((r=e.affectedFilesPendingEmit)!=null&&r.size){if(!t)return e.affectedFilesPendingEmit=void 0;e.affectedFilesPendingEmit.forEach((i,o)=>{let s=i&7;s?e.affectedFilesPendingEmit.set(o,s):e.affectedFilesPendingEmit.delete(o)})}}function p8e(e,t){var r;if((r=e.affectedFilesPendingEmit)!=null&&r.size)return Ld(e.affectedFilesPendingEmit,(i,o)=>{var s;let l=e.program.getSourceFileByPath(o);if(!l||!pS(l,e.program)){e.affectedFilesPendingEmit.delete(o);return}let f=(s=e.seenEmittedFiles)==null?void 0:s.get(l.resolvedPath),d=G2(i,f);if(t&&(d=d&24),d)return{affectedFile:l,emitKind:d}})}function nme(e){if(!e.cleanedDiagnosticsOfLibFiles){e.cleanedDiagnosticsOfLibFiles=!0;let t=L.checkDefined(e.program),r=t.getCompilerOptions();mn(t.getSourceFiles(),i=>t.isSourceFileDefaultLibrary(i)&&!rL(i,r,t)&&vq(e,i.resolvedPath))}}function m8e(e,t,r,i){if(vq(e,t.resolvedPath),e.allFilesExcludingDefaultLibraryFile===e.affectedFiles){nme(e),pm.updateShapeSignature(e,L.checkDefined(e.program),t,r,i);return}e.compilerOptions.assumeChangesOnlyAffectDirectDependencies||h8e(e,t,r,i)}function WF(e,t,r,i){if(vq(e,t),!e.changedFilesSet.has(t)){let o=L.checkDefined(e.program),s=o.getSourceFileByPath(t);s&&(pm.updateShapeSignature(e,o,s,r,i,!0),__(e.compilerOptions)&&xq(e,t,e.compilerOptions.declarationMap?24:8))}}function vq(e,t){return e.semanticDiagnosticsFromOldState?(e.semanticDiagnosticsFromOldState.delete(t),e.semanticDiagnosticsPerFile.delete(t),!e.semanticDiagnosticsFromOldState.size):!0}function rme(e,t){let r=L.checkDefined(e.oldSignatures).get(t)||void 0;return L.checkDefined(e.fileInfos.get(t)).signature!==r}function bq(e,t,r,i){var o;return(o=e.fileInfos.get(t))!=null&&o.affectsGlobalScope?(pm.getAllFilesExcludingDefaultLibraryFile(e,e.program,void 0).forEach(s=>WF(e,s.resolvedPath,r,i)),nme(e),!0):!1}function h8e(e,t,r,i){var o;if(!e.exportedModulesMap||!e.changedFilesSet.has(t.resolvedPath)||!rme(e,t.resolvedPath))return;if(d_(e.compilerOptions)){let l=new Map;l.set(t.resolvedPath,!0);let f=pm.getReferencedByPaths(e,t.resolvedPath);for(;f.length>0;){let d=f.pop();if(!l.has(d)){if(l.set(d,!0),bq(e,d,r,i))return;if(WF(e,d,r,i),rme(e,d)){let g=L.checkDefined(e.program).getSourceFileByPath(d);f.push(...pm.getReferencedByPaths(e,g.resolvedPath))}}}}let s=new Set;(o=e.exportedModulesMap.getKeys(t.resolvedPath))==null||o.forEach(l=>{if(bq(e,l,r,i))return!0;let f=e.referencedMap.getKeys(l);return f&&TI(f,d=>ime(e,d,s,r,i))})}function ime(e,t,r,i,o){var s,l;if(_0(r,t)){if(bq(e,t,i,o))return!0;WF(e,t,i,o),(s=e.exportedModulesMap.getKeys(t))==null||s.forEach(f=>ime(e,f,r,i,o)),(l=e.referencedMap.getKeys(t))==null||l.forEach(f=>!r.has(f)&&WF(e,f,i,o))}}function Eq(e,t,r){return Qi(g8e(e,t,r),L.checkDefined(e.program).getProgramDiagnostics(t))}function g8e(e,t,r){let i=t.resolvedPath;if(e.semanticDiagnosticsPerFile){let s=e.semanticDiagnosticsPerFile.get(i);if(s)return MF(s,e.compilerOptions)}let o=L.checkDefined(e.program).getBindAndCheckDiagnostics(t,r);return e.semanticDiagnosticsPerFile&&e.semanticDiagnosticsPerFile.set(i,o),MF(o,e.compilerOptions)}function ame(e){return!!Ss(e.options||{})}function y8e(e,t){var r,i,o;let s=L.checkDefined(e.program).getCurrentDirectory(),l=ni(_a(Jg(e.compilerOptions),s)),f=e.latestChangedDtsFile?W(e.latestChangedDtsFile):void 0,d=[],g=new Map,m=[];if(Ss(e.compilerOptions)){let Z=lo(e.fileInfos.entries(),([X,Ve])=>{let we=R(X);return $(X,we),Ve.impliedFormat?{version:Ve.version,impliedFormat:Ve.impliedFormat,signature:void 0,affectsGlobalScope:void 0}:Ve.version}),U={fileNames:d,fileInfos:Z,root:m,options:fe(e.compilerOptions),outSignature:e.outSignature,latestChangedDtsFile:f,pendingEmit:e.programEmitPending?e.programEmitPending===cv(e.compilerOptions)?!1:e.programEmitPending:void 0},{js:re,dts:le,commonSourceDirectory:_e,sourceFiles:ge}=t;return e.bundle=t={commonSourceDirectory:_e,sourceFiles:ge,js:re||(e.compilerOptions.emitDeclarationOnly||(r=e.bundle)==null?void 0:r.js),dts:le||(__(e.compilerOptions)?(i=e.bundle)==null?void 0:i.dts:void 0)},dN(U,t)}let v,S,x,A=lo(e.fileInfos.entries(),([Z,U])=>{var re,le;let _e=R(Z);$(Z,_e),L.assert(d[_e-1]===Y(Z));let ge=(re=e.oldSignatures)==null?void 0:re.get(Z),X=ge!==void 0?ge||void 0:U.signature;if(e.compilerOptions.composite){let Ve=e.program.getSourceFileByPath(Z);if(!Mf(Ve)&&pS(Ve,e.program)){let we=(le=e.emitSignatures)==null?void 0:le.get(Z);we!==X&&(x||(x=[])).push(we===void 0?_e:[_e,!Ta(we)&&we[0]===X?Je:we])}}return U.version===X?U.affectsGlobalScope||U.impliedFormat?{version:U.version,signature:void 0,affectsGlobalScope:U.affectsGlobalScope,impliedFormat:U.impliedFormat}:U.version:X!==void 0?ge===void 0?U:{version:U.version,signature:X,affectsGlobalScope:U.affectsGlobalScope,impliedFormat:U.impliedFormat}:{version:U.version,signature:!1,affectsGlobalScope:U.affectsGlobalScope,impliedFormat:U.impliedFormat}}),w;e.referencedMap&&(w=lo(e.referencedMap.keys()).sort(su).map(Z=>[R(Z),ie(e.referencedMap.getValues(Z))]));let C;e.exportedModulesMap&&(C=Zi(lo(e.exportedModulesMap.keys()).sort(su),Z=>{var U;let re=(U=e.oldExportedModulesMap)==null?void 0:U.get(Z);if(re===void 0)return[R(Z),ie(e.exportedModulesMap.getValues(Z))];if(re)return[R(Z),ie(re)]}));let P;if(e.semanticDiagnosticsPerFile)for(let Z of lo(e.semanticDiagnosticsPerFile.keys()).sort(su)){let U=e.semanticDiagnosticsPerFile.get(Z);(P||(P=[])).push(U.length?[R(Z),b8e(U,Y)]:R(Z))}let F;if((o=e.affectedFilesPendingEmit)!=null&&o.size){let Z=cv(e.compilerOptions),U=new Set;for(let re of lo(e.affectedFilesPendingEmit.keys()).sort(su))if(_0(U,re)){let le=e.program.getSourceFileByPath(re);if(!le||!pS(le,e.program))continue;let _e=R(re),ge=e.affectedFilesPendingEmit.get(re);(F||(F=[])).push(ge===Z?_e:ge===8?[_e]:[_e,ge])}}let B;if(e.changedFilesSet.size)for(let Z of lo(e.changedFilesSet.keys()).sort(su))(B||(B=[])).push(R(Z));let q={fileNames:d,fileInfos:A,root:m,options:fe(e.compilerOptions),fileIdsList:v,referencedMap:w,exportedModulesMap:C,semanticDiagnosticsPerFile:P,affectedFilesPendingEmit:F,changeFileSet:B,emitSignatures:x,latestChangedDtsFile:f};return dN(q,t);function W(Z){return Y(_a(Z,s))}function Y(Z){return S0(Xp(l,Z,e.program.getCanonicalFileName))}function R(Z){let U=g.get(Z);return U===void 0&&(d.push(Y(Z)),g.set(Z,U=d.length)),U}function ie(Z){let U=lo(Z.keys(),R).sort(Es),re=U.join(),le=S?.get(re);return le===void 0&&((v||(v=[])).push(U),(S||(S=new Map)).set(re,le=v.length)),le}function $(Z,U){let re=e.program.getSourceFile(Z);if(!e.program.getFileIncludeReasons().get(re.path).some(X=>X.kind===0))return;if(!m.length)return m.push(U);let le=m[m.length-1],_e=ba(le);if(_e&&le[1]===U-1)return le[1]=U;if(_e||m.length===1||le!==U-1)return m.push(U);let ge=m[m.length-2];return!Cg(ge)||ge!==le-1?m.push(U):(m[m.length-2]=[ge,U],m.length=m.length-1)}function fe(Z){let U,{optionsNameMap:re}=w2();for(let le of bh(Z).sort(su)){let _e=re.get(le.toLowerCase());_e?.affectsBuildInfo&&((U||(U={}))[le]=v8e(_e,Z[le],W))}return U}}function v8e(e,t,r){if(e){if(L.assert(e.type!==\"listOrElement\"),e.type===\"list\"){let i=t;if(e.element.isFilePath&&i.length)return i.map(r)}else if(e.isFilePath)return r(t)}return t}function b8e(e,t){return L.assert(!!e.length),e.map(r=>{let i=ome(r,t);i.reportsUnnecessary=r.reportsUnnecessary,i.reportDeprecated=r.reportsDeprecated,i.source=r.source,i.skippedOn=r.skippedOn;let{relatedInformation:o}=r;return i.relatedInformation=o?o.length?o.map(s=>ome(s,t)):[]:void 0,i})}function ome(e,t){let{file:r}=e;return{...e,file:r?t(r.resolvedPath):void 0}}function zF(e,t,r,i,o,s){let l,f,d;return e===void 0?(L.assert(t===void 0),l=r,d=i,L.assert(!!d),f=d.getProgram()):ba(e)?(d=i,f=PF({rootNames:e,options:t,host:r,oldProgram:d&&d.getProgramOrUndefined(),configFileParsingDiagnostics:o,projectReferences:s}),l=r):(f=e,l=t,d=r,o=i),{host:l,newProgram:f,oldProgram:d,configFileParsingDiagnostics:o||Je}}function sme(e,t){return t?.sourceMapUrlPos!==void 0?e.substring(0,t.sourceMapUrlPos):e}function Tq(e,t,r,i,o){var s,l;r=sme(r,o);let f;return(s=o?.diagnostics)!=null&&s.length&&(r+=o.diagnostics.map(m=>`${g(m)}${nw[m.category]}${m.code}: ${d(m.messageText)}`).join(`\n`)),((l=i.createHash)!=null?l:aw)(r);function d(m){return Ta(m)?m:m===void 0?\"\":m.next?m.messageText+m.next.map(d).join(`\n`):m.messageText}function g(m){return m.file.resolvedPath===t.resolvedPath?`(${m.start},${m.length})`:(f===void 0&&(f=ni(t.resolvedPath)),`${S0(Xp(f,m.file.resolvedPath,e.getCanonicalFileName))}(${m.start},${m.length})`)}}function YT(e,t,r){var i;return((i=t.createHash)!=null?i:aw)(sme(e,r))}function Sq(e,{newProgram:t,host:r,oldProgram:i,configFileParsingDiagnostics:o}){let s=i&&i.getState();if(s&&t===s.program&&o===t.getConfigFileParsingDiagnostics())return t=void 0,s=void 0,i;let l=c8e(t,s);t.getBuildInfo=w=>y8e(l,w),t=void 0,i=void 0,s=void 0;let f=()=>l,d=Cq(f,o);return d.getState=f,d.saveEmitState=()=>d8e(l),d.restoreEmitState=w=>f8e(l,w),d.hasChangedEmitSignature=()=>!!l.hasChangedEmitSignature,d.getAllDependencies=w=>pm.getAllDependencies(l,L.checkDefined(l.program),w),d.getSemanticDiagnostics=A,d.emit=S,d.releaseProgram=()=>u8e(l),e===0?d.getSemanticDiagnosticsOfNextAffectedFile=x:e===1?(d.getSemanticDiagnosticsOfNextAffectedFile=x,d.emitNextAffectedFile=m,d.emitBuildInfo=g):Sa(),d;function g(w,C){if(l.buildInfoEmitPending){let P=L.checkDefined(l.program).emitBuildInfo(w||ho(r,r.writeFile),C);return l.buildInfoEmitPending=!1,P}return HF}function m(w,C,P,F){var B,q,W,Y,R;let ie=tme(l,C,r),$=cv(l.compilerOptions),fe=P?$&24:$;if(!ie)if(Ss(l.compilerOptions)){if(!l.programEmitPending||(fe=l.programEmitPending,P&&(fe=fe&24),!fe))return;ie=l.program}else{let re=p8e(l,P);if(!re){if(!l.buildInfoEmitPending)return;let le=l.program,_e=le.emitBuildInfo(w||ho(r,r.writeFile),C);return l.buildInfoEmitPending=!1,{result:_e,affected:le}}({affectedFile:ie,emitKind:fe}=re)}let Z;fe&7&&(Z=0),fe&24&&(Z=Z===void 0?1:void 0),ie===l.program&&(l.programEmitPending=l.changedFilesSet.size?G2($,fe):l.programEmitPending?G2(l.programEmitPending,fe):void 0);let U=l.program.emit(ie===l.program?void 0:ie,v(w,F),C,Z,F);if(ie!==l.program){let re=ie;l.seenAffectedFiles.add(re.resolvedPath),l.affectedFilesIndex!==void 0&&l.affectedFilesIndex++,l.buildInfoEmitPending=!0;let le=((B=l.seenEmittedFiles)==null?void 0:B.get(re.resolvedPath))||0;((q=l.seenEmittedFiles)!=null?q:l.seenEmittedFiles=new Map).set(re.resolvedPath,fe|le);let _e=((W=l.affectedFilesPendingEmit)==null?void 0:W.get(re.resolvedPath))||$,ge=G2(_e,fe|le);ge?((Y=l.affectedFilesPendingEmit)!=null?Y:l.affectedFilesPendingEmit=new Map).set(re.resolvedPath,ge):(R=l.affectedFilesPendingEmit)==null||R.delete(re.resolvedPath)}else l.changedFilesSet.clear();return{result:U,affected:ie}}function v(w,C){return __(l.compilerOptions)?(P,F,B,q,W,Y)=>{var R,ie,$,fe,Z,U,re;if(Fu(P))if(Ss(l.compilerOptions)){if(l.compilerOptions.composite){let _e=le(l.outSignature,void 0);if(!_e)return;l.outSignature=_e}}else{L.assert(W?.length===1);let _e;if(!C){let ge=W[0],X=l.fileInfos.get(ge.resolvedPath);if(X.signature===ge.version){let Ve=Tq(l.program,ge,F,r,Y);(R=Y?.diagnostics)!=null&&R.length||(_e=Ve),Ve!==ge.version&&(r.storeFilesChangingSignatureDuringEmit&&((ie=l.filesChangingSignature)!=null?ie:l.filesChangingSignature=new Set).add(ge.resolvedPath),l.exportedModulesMap&&pm.updateExportedModules(l,ge,ge.exportedModulesFromDeclarationEmit),l.affectedFiles?((($=l.oldSignatures)==null?void 0:$.get(ge.resolvedPath))===void 0&&((fe=l.oldSignatures)!=null?fe:l.oldSignatures=new Map).set(ge.resolvedPath,X.signature||!1),X.signature=Ve):(X.signature=Ve,(Z=l.oldExportedModulesMap)==null||Z.clear()))}}if(l.compilerOptions.composite){let ge=W[0].resolvedPath;if(_e=le((U=l.emitSignatures)==null?void 0:U.get(ge),_e),!_e)return;((re=l.emitSignatures)!=null?re:l.emitSignatures=new Map).set(ge,_e)}}w?w(P,F,B,q,W,Y):r.writeFile?r.writeFile(P,F,B,q,W,Y):l.program.writeFile(P,F,B,q,W,Y);function le(_e,ge){let X=!_e||Ta(_e)?_e:_e[0];if(ge??(ge=YT(F,r,Y)),ge===X){if(_e===X)return;Y?Y.differsOnlyInMap=!0:Y={differsOnlyInMap:!0}}else l.hasChangedEmitSignature=!0,l.latestChangedDtsFile=P;return ge}}:w||ho(r,r.writeFile)}function S(w,C,P,F,B){e===1&&eme(l,w);let q=dq(d,w,C,P);if(q)return q;if(!w)if(e===1){let W=[],Y=!1,R,ie=[],$;for(;$=m(C,P,F,B);)Y=Y||$.result.emitSkipped,R=si(R,$.result.diagnostics),ie=si(ie,$.result.emittedFiles),W=si(W,$.result.sourceMaps);return{emitSkipped:Y,diagnostics:R||Je,emittedFiles:ie,sourceMaps:W}}else _8e(l,F);return L.checkDefined(l.program).emit(w,v(C,B),P,F,B)}function x(w,C){for(;;){let P=tme(l,w,r),F;if(P)if(P!==l.program){let B=P;if((!C||!C(B))&&(F=Eq(l,B,w)),l.seenAffectedFiles.add(B.resolvedPath),l.affectedFilesIndex++,l.buildInfoEmitPending=!0,!F)continue}else F=l.program.getSemanticDiagnostics(void 0,w),l.changedFilesSet.clear(),l.programEmitPending=cv(l.compilerOptions);else return;return{result:F,affected:P}}}function A(w,C){eme(l,w);let P=L.checkDefined(l.program).getCompilerOptions();if(Ss(P))return L.assert(!l.semanticDiagnosticsPerFile),L.checkDefined(l.program).getSemanticDiagnostics(w,C);if(w)return Eq(l,w,C);for(;x(C););let F;for(let B of L.checkDefined(l.program).getSourceFiles())F=si(F,Eq(l,B,C));return F||Je}}function xq(e,t,r){var i,o;let s=((i=e.affectedFilesPendingEmit)==null?void 0:i.get(t))||0;((o=e.affectedFilesPendingEmit)!=null?o:e.affectedFilesPendingEmit=new Map).set(t,s|r)}function cme(e){return Ta(e)?{version:e,signature:e,affectsGlobalScope:void 0,impliedFormat:void 0}:Ta(e.signature)?e:{version:e.version,signature:e.signature===!1?void 0:e.version,affectsGlobalScope:e.affectsGlobalScope,impliedFormat:e.impliedFormat}}function lme(e,t){return Cg(e)?t:e[1]||8}function ume(e,t){return e||cv(t||{})}function dme(e,t,r){var i,o,s,l;let f=e.program,d=ni(_a(t,r.getCurrentDirectory())),g=Dl(r.useCaseSensitiveFileNames()),m,v=(i=f.fileNames)==null?void 0:i.map(A),S,x=f.latestChangedDtsFile?w(f.latestChangedDtsFile):void 0;if(ame(f)){let B=new Map;f.fileInfos.forEach((q,W)=>{let Y=C(W+1);B.set(Y,Ta(q)?{version:q,signature:void 0,affectsGlobalScope:void 0,impliedFormat:void 0}:q)}),m={fileInfos:B,compilerOptions:f.options?SJ(f.options,w):{},latestChangedDtsFile:x,outSignature:f.outSignature,programEmitPending:f.pendingEmit===void 0?void 0:ume(f.pendingEmit,f.options),bundle:e.bundle}}else{S=(o=f.fileIdsList)==null?void 0:o.map(Y=>new Set(Y.map(C)));let B=new Map,q=(s=f.options)!=null&&s.composite&&!Ss(f.options)?new Map:void 0;f.fileInfos.forEach((Y,R)=>{let ie=C(R+1),$=cme(Y);B.set(ie,$),q&&$.signature&&q.set(ie,$.signature)}),(l=f.emitSignatures)==null||l.forEach(Y=>{if(Cg(Y))q.delete(C(Y));else{let R=C(Y[0]);q.set(R,!Ta(Y[1])&&!Y[1].length?[q.get(R)]:Y[1])}});let W=f.affectedFilesPendingEmit?cv(f.options||{}):void 0;m={fileInfos:B,compilerOptions:f.options?SJ(f.options,w):{},referencedMap:F(f.referencedMap),exportedModulesMap:F(f.exportedModulesMap),semanticDiagnosticsPerFile:f.semanticDiagnosticsPerFile&&p0(f.semanticDiagnosticsPerFile,Y=>C(Cg(Y)?Y:Y[0]),Y=>Cg(Y)?Je:Y[1]),hasReusableDiagnostic:!0,affectedFilesPendingEmit:f.affectedFilesPendingEmit&&p0(f.affectedFilesPendingEmit,Y=>C(Cg(Y)?Y:Y[0]),Y=>lme(Y,W)),changedFilesSet:new Set(on(f.changeFileSet,C)),latestChangedDtsFile:x,emitSignatures:q?.size?q:void 0}}return{getState:()=>m,saveEmitState:Ba,restoreEmitState:Ba,getProgram:Sa,getProgramOrUndefined:Qv,releaseProgram:Ba,getCompilerOptions:()=>m.compilerOptions,getSourceFile:Sa,getSourceFiles:Sa,getOptionsDiagnostics:Sa,getGlobalDiagnostics:Sa,getConfigFileParsingDiagnostics:Sa,getSyntacticDiagnostics:Sa,getDeclarationDiagnostics:Sa,getSemanticDiagnostics:Sa,emit:Sa,getAllDependencies:Sa,getCurrentDirectory:Sa,emitNextAffectedFile:Sa,getSemanticDiagnosticsOfNextAffectedFile:Sa,emitBuildInfo:Sa,close:Ba,hasChangedEmitSignature:m0};function A(B){return Ts(B,d,g)}function w(B){return _a(B,d)}function C(B){return v[B-1]}function P(B){return S[B-1]}function F(B){if(!B)return;let q=pm.createManyToManyPathMap();return B.forEach(([W,Y])=>q.set(C(W),P(Y))),q}}function Aq(e,t,r){let i=ni(_a(t,r.getCurrentDirectory())),o=Dl(r.useCaseSensitiveFileNames()),s=new Map,l=0,f=[];return e.fileInfos.forEach((d,g)=>{let m=Ts(e.fileNames[g],i,o),v=Ta(d)?d:d.version;if(s.set(m,v),l<e.root.length){let S=e.root[l],x=g+1;ba(S)?S[0]<=x&&x<=S[1]&&(f.push(m),S[1]===x&&l++):S===x&&(f.push(m),l++)}}),{fileInfos:s,roots:f}}function Cq(e,t){return{getState:Sa,saveEmitState:Ba,restoreEmitState:Ba,getProgram:r,getProgramOrUndefined:()=>e().program,releaseProgram:()=>e().program=void 0,getCompilerOptions:()=>e().compilerOptions,getSourceFile:i=>r().getSourceFile(i),getSourceFiles:()=>r().getSourceFiles(),getOptionsDiagnostics:i=>r().getOptionsDiagnostics(i),getGlobalDiagnostics:i=>r().getGlobalDiagnostics(i),getConfigFileParsingDiagnostics:()=>t,getSyntacticDiagnostics:(i,o)=>r().getSyntacticDiagnostics(i,o),getDeclarationDiagnostics:(i,o)=>r().getDeclarationDiagnostics(i,o),getSemanticDiagnostics:(i,o)=>r().getSemanticDiagnostics(i,o),emit:(i,o,s,l,f)=>r().emit(i,o,s,l,f),emitBuildInfo:(i,o)=>r().emitBuildInfo(i,o),getAllDependencies:Sa,getCurrentDirectory:()=>r().getCurrentDirectory(),close:Ba};function r(){return L.checkDefined(e().program)}}var Iq,Lq,E8e=gt({\"src/compiler/builder.ts\"(){\"use strict\";fa(),fa(),Iq=(e=>(e[e.None=0]=\"None\",e[e.Js=1]=\"Js\",e[e.JsMap=2]=\"JsMap\",e[e.JsInlineMap=4]=\"JsInlineMap\",e[e.Dts=8]=\"Dts\",e[e.DtsMap=16]=\"DtsMap\",e[e.AllJs=7]=\"AllJs\",e[e.AllDts=24]=\"AllDts\",e[e.All=31]=\"All\",e))(Iq||{}),Lq=(e=>(e[e.SemanticDiagnosticsBuilderProgram=0]=\"SemanticDiagnosticsBuilderProgram\",e[e.EmitAndSemanticDiagnosticsBuilderProgram=1]=\"EmitAndSemanticDiagnosticsBuilderProgram\",e))(Lq||{})}});function T8e(e,t,r,i,o,s){return Sq(0,zF(e,t,r,i,o,s))}function kq(e,t,r,i,o,s){return Sq(1,zF(e,t,r,i,o,s))}function S8e(e,t,r,i,o,s){let{newProgram:l,configFileParsingDiagnostics:f}=zF(e,t,r,i,o,s);return Cq(()=>({program:l,compilerOptions:l.getCompilerOptions()}),f)}var x8e=gt({\"src/compiler/builderPublic.ts\"(){\"use strict\";fa()}});function Dq(e){return Oc(e,\"/node_modules/.staging\")?pA(e,\"/.staging\"):vt(uw,t=>jl(e,t))?void 0:e}function vN(e){let t=_p(e);if(e.length===t)return!1;let r=e.indexOf(_s,t);if(r===-1)return!1;let i=e.substring(t,r+1),o=t>1||e.charCodeAt(0)!==47;if(o&&e.search(/[a-zA-Z]:/)!==0&&i.search(/[a-zA-Z]\\$\\//)===0){if(r=e.indexOf(_s,r+1),r===-1)return!1;i=e.substring(t+i.length,r+1)}if(o&&i.search(/users\\//i)!==0)return!0;for(let s=r+1,l=2;l>0;l--)if(s=e.indexOf(_s,s)+1,s===0)return!1;return!0}function fme(e,t,r){let i,o,s,l=Nf(),f=new Set,d=new Set,g=new Map,m=new Map,v=!1,S,x,A,w,C,P=zu(()=>e.getCurrentDirectory()),F=e.getCachedDirectoryStructureHost(),B=new Map,q=Y3(P(),e.getCanonicalFileName,e.getCompilationSettings()),W=new Map,Y=$3(P(),e.getCanonicalFileName,e.getCompilationSettings(),q.getPackageJsonInfoCache()),R=[\".ts\",\".tsx\",\".js\",\".jsx\",\".json\"],ie=new Map,$=new Map,fe=new Map,Z=t&&sT(_a(t,P())),U=Z&&e.toPath(Z),re=U!==void 0?U.split(_s).length:0,le=new Map;return{getModuleResolutionCache:()=>q,startRecordingFilesWithChangedResolutions:we,finishRecordingFilesWithChangedResolutions:ke,startCachingPerDirectoryResolution:Ie,finishCachingPerDirectoryResolution:Be,resolveModuleNameLiterals:ct,resolveTypeReferenceDirectiveReferences:_t,resolveSingleModuleNameWithoutWatching:Rt,removeResolutionsFromProjectReferenceRedirects:nn,removeResolutionsOfFile:Dt,hasChangedAutomaticTypeDirectiveNames:()=>v,invalidateResolutionOfFile:An,invalidateResolutionsOfFailedLookupLocations:ri,setFilesWithInvalidatedNonRelativeUnresolvedImports:Kn,createHasInvalidatedResolutions:Ce,isFileWithInvalidatedNonRelativeUnresolvedImports:Pe,updateTypeRootsWatch:at,closeTypeRootsWatch:dr,clear:Ve};function _e(ve){return ve.resolvedModule}function ge(ve){return ve.resolvedTypeReferenceDirective}function X(ve,nt){return ve===void 0||nt.length<=ve.length?!1:na(nt,ve)&&nt[ve.length]===_s}function Ve(){Tf($,_m),Tf(fe,_m),ie.clear(),l.clear(),dr(),B.clear(),W.clear(),g.clear(),f.clear(),d.clear(),A=void 0,w=void 0,C=void 0,x=void 0,S=void 0,q.clear(),Y.clear(),q.update(e.getCompilationSettings()),Y.update(e.getCompilationSettings()),m.clear(),v=!1}function we(){i=[]}function ke(){let ve=i;return i=void 0,ve}function Pe(ve){if(!s)return!1;let nt=s.get(ve);return!!nt&&!!nt.length}function Ce(ve){ri();let nt=o;return o=void 0,ce=>ve(ce)||!!nt?.has(ce)||Pe(ce)}function Ie(){q.clearAllExceptPackageJsonInfoCache(),Y.clearAllExceptPackageJsonInfoCache(),l.forEach($n),l.clear()}function Be(ve,nt){s=void 0,l.forEach($n),l.clear(),ve!==nt&&(ve?.getSourceFiles().forEach(ce=>{var Q,ue,G;let Oe=kd(ce)&&(ue=(Q=ce.packageJsonLocations)==null?void 0:Q.length)!=null?ue:0,je=(G=m.get(ce.path))!=null?G:Je;for(let Ge=je.length;Ge<Oe;Ge++)Gt(ce.packageJsonLocations[Ge],!1);if(je.length>Oe)for(let Ge=Oe;Ge<je.length;Ge++)fe.get(je[Ge]).files--;Oe?m.set(ce.path,ce.packageJsonLocations):m.delete(ce.path)}),m.forEach((ce,Q)=>{ve?.getSourceFileByPath(Q)||(ce.forEach(ue=>fe.get(ue).files--),m.delete(Q))})),$.forEach((ce,Q)=>{ce.refCount===0&&($.delete(Q),ce.watcher.close())}),fe.forEach((ce,Q)=>{ce.files===0&&ce.resolutions===0&&(fe.delete(Q),ce.watcher.close())}),v=!1}function Ne(ve,nt,ce,Q,ue){var G;let Oe=((G=e.getCompilerHost)==null?void 0:G.call(e))||e,je=FL(ve,nt,ce,Oe,q,Q,ue);if(!e.getGlobalCache)return je;let Ge=e.getGlobalCache();if(Ge!==void 0&&!fl(ve)&&!(je.resolvedModule&&y4(je.resolvedModule.extension))){let{resolvedModule:kt,failedLookupLocations:Kt,affectingLocations:ln,resolutionDiagnostics:ir}=s_e(L.checkDefined(e.globalCacheResolutionModuleName)(ve),e.projectName,ce,Oe,Ge,q);if(kt)return je.resolvedModule=kt,je.failedLookupLocations=N2(je.failedLookupLocations,Kt),je.affectingLocations=N2(je.affectingLocations,ln),je.resolutionDiagnostics=N2(je.resolutionDiagnostics,ir),je}return je}function Le(ve,nt,ce){return{nameAndMode:QL,resolve:(Q,ue)=>Ne(Q,ve,ce,nt,ue)}}function Ye({entries:ve,containingFile:nt,containingSourceFile:ce,redirectedReference:Q,options:ue,perFileCache:G,reusedNames:Oe,loader:je,getResolutionWithResolvedFileName:Ge,shouldRetryResolution:kt,logChanges:Kt}){var ln;let ir=e.toPath(nt),ae=G.get(ir)||G.set(ir,WT()).get(ir),rt=[],Ot=Kt&&Pe(ir),Ke=e.getCurrentProgram(),oe=Ke&&Ke.getResolvedProjectReferenceToRedirect(nt),pe=oe?!Q||Q.sourceFile.path!==oe.sourceFile.path:!!Q,z=WT();for(let j of ve){let yt=je.nameAndMode.getName(j),lt=je.nameAndMode.getMode(j,ce),Qe=ae.get(yt,lt);if(!z.has(yt,lt)&&pe||!Qe||Qe.isInvalidated||Ot&&!fl(yt)&&kt(Qe)){let Vt=Qe;Qe=je.resolve(yt,lt),e.onDiscoveredSymlink&&A8e(Qe)&&e.onDiscoveredSymlink(),ae.set(yt,lt,Qe),tn(yt,Qe,ir,Ge),Vt&&Ni(Vt,ir,Ge),Kt&&i&&!Te(Vt,Qe)&&(i.push(ir),Kt=!1)}else{let Vt=((ln=e.getCompilerHost)==null?void 0:ln.call(e))||e;if(ov(ue,Vt)&&!z.has(yt,lt)){let Hn=Ge(Qe);Xi(Vt,G===B?Hn?.resolvedFileName?Hn.packageId?_.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:_.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2:_.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved:Hn?.resolvedFileName?Hn.packageId?_.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:_.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2:_.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved,yt,nt,Hn?.resolvedFileName,Hn?.packageId&&hT(Hn.packageId))}}L.assert(Qe!==void 0&&!Qe.isInvalidated),z.set(yt,lt,!0),rt.push(Qe)}return Oe?.forEach(j=>z.set(je.nameAndMode.getName(j),je.nameAndMode.getMode(j,ce),!0)),ae.size()!==z.size()&&ae.forEach((j,yt,lt)=>{z.has(yt,lt)||(Ni(j,ir,Ge),ae.delete(yt,lt))}),rt;function Te(j,yt){if(j===yt)return!0;if(!j||!yt)return!1;let lt=Ge(j),Qe=Ge(yt);return lt===Qe?!0:!lt||!Qe?!1:lt.resolvedFileName===Qe.resolvedFileName}}function _t(ve,nt,ce,Q,ue,G){var Oe;return Ye({entries:ve,containingFile:nt,containingSourceFile:ue,redirectedReference:ce,options:Q,reusedNames:G,perFileCache:W,loader:OF(nt,ce,Q,((Oe=e.getCompilerHost)==null?void 0:Oe.call(e))||e,Y),getResolutionWithResolvedFileName:ge,shouldRetryResolution:je=>je.resolvedTypeReferenceDirective===void 0})}function ct(ve,nt,ce,Q,ue,G){return Ye({entries:ve,containingFile:nt,containingSourceFile:ue,redirectedReference:ce,options:Q,reusedNames:G,perFileCache:B,loader:Le(nt,ce,Q),getResolutionWithResolvedFileName:_e,shouldRetryResolution:Oe=>!Oe.resolvedModule||!VR(Oe.resolvedModule.extension),logChanges:r})}function Rt(ve,nt){let ce=e.toPath(nt),Q=B.get(ce),ue=Q?.get(ve,void 0);return ue&&!ue.isInvalidated?ue:Ne(ve,nt,e.getCompilationSettings())}function We(ve){return Oc(ve,\"/node_modules/@types\")}function qe(ve,nt){if(X(U,nt)){ve=qp(ve)?So(ve):_a(ve,P());let ce=nt.split(_s),Q=ve.split(_s);return L.assert(Q.length===ce.length,`FailedLookup: ${ve} failedLookupLocationPath: ${nt}`),ce.length>re+1?{dir:Q.slice(0,re+1).join(_s),dirPath:ce.slice(0,re+1).join(_s)}:{dir:Z,dirPath:U,nonRecursive:!1}}return zt(ni(_a(ve,P())),ni(nt))}function zt(ve,nt){for(;JS(nt);)ve=ni(ve),nt=ni(nt);if(H8(nt))return vN(ni(nt))?{dir:ve,dirPath:nt}:void 0;let ce=!0,Q,ue;if(U!==void 0)for(;!X(nt,U);){let G=ni(nt);if(G===nt)break;ce=!1,Q=nt,ue=ve,nt=G,ve=ni(ve)}return vN(nt)?{dir:ue||ve,dirPath:Q||nt,nonRecursive:ce}:void 0}function Qt(ve){return $c(ve,R)}function tn(ve,nt,ce,Q){var ue,G;if(nt.refCount)nt.refCount++,L.assertIsDefined(nt.files);else{nt.refCount=1,L.assert(!((ue=nt.files)!=null&&ue.size)),fl(ve)?kn(nt):l.add(ve,nt);let Oe=Q(nt);if(Oe&&Oe.resolvedFileName){let je=e.toPath(Oe.resolvedFileName),Ge=g.get(je);Ge||g.set(je,Ge=new Set),Ge.add(nt)}}((G=nt.files)!=null?G:nt.files=new Set).add(ce)}function kn(ve){L.assert(!!ve.refCount);let{failedLookupLocations:nt,affectingLocations:ce}=ve;if(!nt?.length&&!ce?.length)return;nt?.length&&f.add(ve);let Q=!1;if(nt){for(let ue of nt){let G=e.toPath(ue),Oe=qe(ue,G);if(Oe){let{dir:je,dirPath:Ge,nonRecursive:kt}=Oe;if(!Qt(G)){let Kt=ie.get(G)||0;ie.set(G,Kt+1)}Ge===U?(L.assert(!kt),Q=!0):ui(je,Ge,kt)}}Q&&ui(Z,U,!0)}_n(ve,!nt?.length)}function _n(ve,nt){L.assert(!!ve.refCount);let{affectingLocations:ce}=ve;if(ce?.length){nt&&d.add(ve);for(let Q of ce)Gt(Q,!0)}}function Gt(ve,nt){let ce=fe.get(ve);if(ce){nt?ce.resolutions++:ce.files++;return}let Q=ve;if(e.realpath&&(Q=e.realpath(ve),ve!==Q)){let je=fe.get(Q);if(je){nt?je.resolutions++:je.files++,je.paths.add(ve),fe.set(ve,je);return}}let ue=new Set;ue.add(Q);let G=vN(e.toPath(Q))?e.watchAffectingFileLocation(Q,(je,Ge)=>{F?.addOrDeleteFile(je,e.toPath(Q),Ge);let kt=q.getPackageJsonInfoCache().getInternalMap();ue.forEach(Kt=>{Oe.resolutions&&(x??(x=new Set)).add(Kt),Oe.files&&(S??(S=new Set)).add(Kt),kt?.delete(e.toPath(Kt))}),e.scheduleInvalidateResolutionsOfFailedLookupLocations()}):B2,Oe={watcher:G!==B2?{close:()=>{G.close(),G=B2}}:G,resolutions:nt?1:0,files:nt?0:1,paths:ue};fe.set(Q,Oe),ve!==Q&&(fe.set(ve,Oe),ue.add(ve))}function $n(ve,nt){let ce=e.getCurrentProgram();!ce||!ce.getTypeChecker().tryFindAmbientModuleWithoutAugmentations(nt)?ve.forEach(kn):ve.forEach(Q=>_n(Q,!0))}function ui(ve,nt,ce){let Q=$.get(nt);Q?(L.assert(!!ce==!!Q.nonRecursive),Q.refCount++):$.set(nt,{watcher:gr(ve,nt,ce),refCount:1,nonRecursive:ce})}function Ni(ve,nt,ce){if(L.checkDefined(ve.files).delete(nt),ve.refCount--,ve.refCount)return;let Q=ce(ve);if(Q&&Q.resolvedFileName){let Oe=e.toPath(Q.resolvedFileName),je=g.get(Oe);je?.delete(ve)&&!je.size&&g.delete(Oe)}let{failedLookupLocations:ue,affectingLocations:G}=ve;if(f.delete(ve)){let Oe=!1;for(let je of ue){let Ge=e.toPath(je),kt=qe(je,Ge);if(kt){let{dirPath:Kt}=kt,ln=ie.get(Ge);ln&&(ln===1?ie.delete(Ge):(L.assert(ln>1),ie.set(Ge,ln-1))),Kt===U?Oe=!0:Pi(Kt)}}Oe&&Pi(U)}else G?.length&&d.delete(ve);if(G)for(let Oe of G){let je=fe.get(Oe);je.resolutions--}}function Pi(ve){let nt=$.get(ve);nt.refCount--}function gr(ve,nt,ce){return e.watchDirectoryOfFailedLookupLocation(ve,Q=>{let ue=e.toPath(Q);F&&F.addOrDeleteFileOrDirectory(Q,ue),hi(ue,nt===ue)},ce?0:1)}function pt(ve,nt,ce){let Q=ve.get(nt);Q&&(Q.forEach(ue=>Ni(ue,nt,ce)),ve.delete(nt))}function nn(ve){if(!Gc(ve,\".json\"))return;let nt=e.getCurrentProgram();if(!nt)return;let ce=nt.getResolvedProjectReferenceByPath(ve);ce&&ce.commandLine.fileNames.forEach(Q=>Dt(e.toPath(Q)))}function Dt(ve){pt(B,ve,_e),pt(W,ve,ge)}function pn(ve,nt){if(!ve)return!1;let ce=!1;return ve.forEach(Q=>{if(!(Q.isInvalidated||!nt(Q))){Q.isInvalidated=ce=!0;for(let ue of L.checkDefined(Q.files))(o??(o=new Set)).add(ue),v=v||Oc(ue,VF)}}),ce}function An(ve){Dt(ve);let nt=v;pn(g.get(ve),h0)&&v&&!nt&&e.onChangedAutomaticTypeDirectiveNames()}function Kn(ve){L.assert(s===ve||s===void 0),s=ve}function hi(ve,nt){if(nt)(C||(C=new Set)).add(ve);else{let ce=Dq(ve);if(!ce||(ve=ce,e.fileIsOpen(ve)))return!1;let Q=ni(ve);if(We(ve)||H8(ve)||We(Q)||H8(Q))(A||(A=new Set)).add(ve),(w||(w=new Set)).add(ve);else{if(!Qt(ve)&&!ie.has(ve)||Bpe(e.getCurrentProgram(),ve))return!1;(A||(A=new Set)).add(ve);let ue=XJ(ve);ue&&(w||(w=new Set)).add(ue)}}e.scheduleInvalidateResolutionsOfFailedLookupLocations()}function ri(){var ve;let nt=!1;if(S&&((ve=e.getCurrentProgram())==null||ve.getSourceFiles().forEach(Q=>{vt(Q.packageJsonLocations,ue=>S.has(ue))&&((o??(o=new Set)).add(Q.path),nt=!0)}),S=void 0),!A&&!w&&!C&&!x)return nt;nt=pn(f,vn)||nt;let ce=q.getPackageJsonInfoCache().getInternalMap();return ce&&(A||w||C)&&ce.forEach((Q,ue)=>Ht(ue)?ce.delete(ue):void 0),A=void 0,w=void 0,C=void 0,nt=pn(d,En)||nt,x=void 0,nt}function vn(ve){var nt;return En(ve)?!0:!A&&!w&&!C?!1:(nt=ve.failedLookupLocations)==null?void 0:nt.some(ce=>Ht(e.toPath(ce)))}function Ht(ve){return A?.has(ve)||FD(w?.keys()||[],nt=>na(ve,nt)?!0:void 0)||FD(C?.keys()||[],nt=>X(nt,ve)?!0:void 0)}function En(ve){var nt;return!!x&&((nt=ve.affectingLocations)==null?void 0:nt.some(ce=>x.has(ce)))}function dr(){Tf(le,am)}function Cr(ve,nt){if(X(U,nt))return U;let ce=zt(ve,nt);return ce&&$.has(ce.dirPath)?ce.dirPath:void 0}function Se(ve,nt){return e.watchTypeRootsDirectory(nt,ce=>{let Q=e.toPath(ce);F&&F.addOrDeleteFileOrDirectory(ce,Q),v=!0,e.onChangedAutomaticTypeDirectiveNames();let ue=Cr(nt,ve);ue&&hi(Q,ue===Q)},1)}function at(){let ve=e.getCompilationSettings();if(ve.types){dr();return}let nt=XO(ve,{directoryExists:Tt,getCurrentDirectory:P});nt?e2(le,p0(nt,ce=>e.toPath(ce)),{createNewValue:Se,onDeleteValue:am}):dr()}function Tt(ve){let nt=ni(ni(ve)),ce=e.toPath(nt);return ce===U||vN(ce)}}function A8e(e){var t,r;return!!((t=e.resolvedModule)!=null&&t.originalPath||(r=e.resolvedTypeReferenceDirective)!=null&&r.originalPath)}var C8e=gt({\"src/compiler/resolutionCache.ts\"(){\"use strict\";fa(),fa()}});function bN(e,t){let r=e===xl&&Vq?Vq:{getCurrentDirectory:()=>e.getCurrentDirectory(),getNewLine:()=>e.newLine,getCanonicalFileName:Dl(e.useCaseSensitiveFileNames)};if(!t)return o=>e.write(rq(o,r));let i=new Array(1);return o=>{i[0]=o,e.write(Jpe(i,r)+r.getNewLine()),i[0]=void 0}}function _me(e,t,r){return e.clearScreen&&!r.preserveWatchOutput&&!r.extendedDiagnostics&&!r.diagnostics&&ya($F,t.code)?(e.clearScreen(),!0):!1}function I8e(e,t){return ya($F,e.code)?t+t:t}function EN(e){return e.now?e.now().toLocaleTimeString(\"en-US\",{timeZone:\"UTC\"}).replace(\"\\u202F\",\" \"):new Date().toLocaleTimeString()}function pme(e,t){return t?(r,i,o)=>{_me(e,r,o);let s=`[${iE(EN(e),\"\\x1B[90m\")}] `;s+=`${sv(r.messageText,e.newLine)}${i+i}`,e.write(s)}:(r,i,o)=>{let s=\"\";_me(e,r,o)||(s+=i),s+=`${EN(e)} - `,s+=`${sv(r.messageText,e.newLine)}${I8e(r,i)}`,e.write(s)}}function L8e(e,t,r,i,o,s){let l=o;l.onUnRecoverableConfigFileDiagnostic=d=>Eme(o,s,d);let f=RO(e,t,l,r,i);return l.onUnRecoverableConfigFileDiagnostic=void 0,f}function JF(e){return Oy(e,t=>t.category===1)}function KF(e){return Pr(e,r=>r.category===1).map(r=>{if(r.file!==void 0)return`${r.file.fileName}`}).map(r=>{if(r===void 0)return;let i=wr(e,o=>o.file!==void 0&&o.file.fileName===r);if(i!==void 0){let{line:o}=Gs(i.file,i.start);return{fileName:r,line:o+1}}})}function wq(e){return e===1?_.Found_1_error_Watching_for_file_changes:_.Found_0_errors_Watching_for_file_changes}function mme(e,t){let r=iE(\":\"+e.line,\"\\x1B[90m\");return nI(e.fileName)&&nI(t)?Xp(t,e.fileName,!1)+r:e.fileName+r}function hme(e,t,r,i){if(e===0)return\"\";let o=t.filter(g=>g!==void 0),s=o.map(g=>`${g.fileName}:${g.line}`).filter((g,m,v)=>v.indexOf(g)===m),l=o[0]&&mme(o[0],i.getCurrentDirectory()),f=e===1?ps(t[0]!==void 0?_.Found_1_error_in_1:_.Found_1_error,e,l):ps(s.length===0?_.Found_0_errors:s.length===1?_.Found_0_errors_in_the_same_file_starting_at_Colon_1:_.Found_0_errors_in_1_files,e,s.length===1?l:s.length),d=s.length>1?k8e(o,i):\"\";return`${r}${sv(f.messageText,r)}${r}${r}${d}`}function k8e(e,t){let r=e.filter((v,S,x)=>S===x.findIndex(A=>A?.fileName===v?.fileName));if(r.length===0)return\"\";let i=v=>Math.log(v)*Math.LOG10E+1,o=r.map(v=>[v,Oy(e,S=>S.fileName===v.fileName)]),s=o.reduce((v,S)=>Math.max(v,S[1]||0),0),l=_.Errors_Files.message,f=l.split(\" \")[0].length,d=Math.max(f,i(s)),g=Math.max(i(s)-f,0),m=\"\";return m+=\" \".repeat(g)+l+`\n`,o.forEach(v=>{let[S,x]=v,A=Math.log(x)*Math.LOG10E+1|0,w=A<d?\" \".repeat(d-A):\"\",C=mme(S,t.getCurrentDirectory());m+=`${w}${x}  ${C}\n`}),m}function gme(e){return!!e.getState}function Rq(e,t){let r=e.getCompilerOptions();r.explainFiles?yme(gme(e)?e.getProgram():e,t):(r.listFiles||r.listFilesOnly)&&mn(e.getSourceFiles(),i=>{t(i.fileName)})}function yme(e,t){var r,i;let o=e.getFileIncludeReasons(),s=l=>rI(l,e.getCurrentDirectory(),e.getCanonicalFileName);for(let l of e.getSourceFiles())t(`${XS(l,s)}`),(r=o.get(l.path))==null||r.forEach(f=>t(`  ${Mq(e,f,s).messageText}`)),(i=Oq(l,s))==null||i.forEach(f=>t(`  ${f.messageText}`))}function Oq(e,t){var r;let i;if(e.path!==e.resolvedPath&&(i??(i=[])).push(da(void 0,_.File_is_output_of_project_reference_source_0,XS(e.originalFileName,t))),e.redirectInfo&&(i??(i=[])).push(da(void 0,_.File_redirects_to_file_0,XS(e.redirectInfo.redirectTarget,t))),kd(e))switch(e.impliedNodeFormat){case 99:e.packageJsonScope&&(i??(i=[])).push(da(void 0,_.File_is_ECMAScript_module_because_0_has_field_type_with_value_module,XS(To(e.packageJsonLocations),t)));break;case 1:e.packageJsonScope?(i??(i=[])).push(da(void 0,e.packageJsonScope.contents.packageJsonContent.type?_.File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module:_.File_is_CommonJS_module_because_0_does_not_have_field_type,XS(To(e.packageJsonLocations),t))):(r=e.packageJsonLocations)!=null&&r.length&&(i??(i=[])).push(da(void 0,_.File_is_CommonJS_module_because_package_json_was_not_found));break}return i}function Nq(e,t){var r;let i=e.getCompilerOptions().configFile;if(!((r=i?.configFileSpecs)!=null&&r.validatedFilesSpec))return;let o=e.getCanonicalFileName(t),s=ni(_a(i.fileName,e.getCurrentDirectory()));return wr(i.configFileSpecs.validatedFilesSpec,l=>e.getCanonicalFileName(_a(l,s))===o)}function Pq(e,t){var r,i;let o=e.getCompilerOptions().configFile;if(!((r=o?.configFileSpecs)!=null&&r.validatedIncludeSpecs))return;if(o.configFileSpecs.isDefaultIncludeSpec)return!0;let s=Gc(t,\".json\"),l=ni(_a(o.fileName,e.getCurrentDirectory())),f=e.useCaseSensitiveFileNames();return wr((i=o?.configFileSpecs)==null?void 0:i.validatedIncludeSpecs,d=>{if(s&&!Oc(d,\".json\"))return!1;let g=kW(d,l,\"files\");return!!g&&Qy(`(${g})$`,f).test(t)})}function Mq(e,t,r){var i,o;let s=e.getCompilerOptions();if(vb(t)){let l=YL(g=>e.getSourceFileByPath(g),t),f=F2(l)?l.file.text.substring(l.pos,l.end):`\"${l.text}\"`,d;switch(L.assert(F2(l)||t.kind===3,\"Only synthetic references are imports\"),t.kind){case 3:F2(l)?d=l.packageId?_.Imported_via_0_from_file_1_with_packageId_2:_.Imported_via_0_from_file_1:l.text===_b?d=l.packageId?_.Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions:_.Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions:d=l.packageId?_.Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions:_.Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions;break;case 4:L.assert(!l.packageId),d=_.Referenced_via_0_from_file_1;break;case 5:d=l.packageId?_.Type_library_referenced_via_0_from_file_1_with_packageId_2:_.Type_library_referenced_via_0_from_file_1;break;case 7:L.assert(!l.packageId),d=_.Library_referenced_via_0_from_file_1;break;default:L.assertNever(t)}return da(void 0,d,f,XS(l.file,r),l.packageId&&hT(l.packageId))}switch(t.kind){case 0:if(!((i=s.configFile)!=null&&i.configFileSpecs))return da(void 0,_.Root_file_specified_for_compilation);let l=_a(e.getRootFileNames()[t.index],e.getCurrentDirectory());if(Nq(e,l))return da(void 0,_.Part_of_files_list_in_tsconfig_json);let d=Pq(e,l);return Ta(d)?da(void 0,_.Matched_by_include_pattern_0_in_1,d,XS(s.configFile,r)):da(void 0,d?_.Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk:_.Root_file_specified_for_compilation);case 1:case 2:let g=t.kind===2,m=L.checkDefined((o=e.getResolvedProjectReferences())==null?void 0:o[t.index]);return da(void 0,Ss(s)?g?_.Output_from_referenced_project_0_included_because_1_specified:_.Source_from_referenced_project_0_included_because_1_specified:g?_.Output_from_referenced_project_0_included_because_module_is_specified_as_none:_.Source_from_referenced_project_0_included_because_module_is_specified_as_none,XS(m.sourceFile.fileName,r),s.outFile?\"--outFile\":\"--out\");case 8:return da(void 0,s.types?t.packageId?_.Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1:_.Entry_point_of_type_library_0_specified_in_compilerOptions:t.packageId?_.Entry_point_for_implicit_type_library_0_with_packageId_1:_.Entry_point_for_implicit_type_library_0,t.typeReference,t.packageId&&hT(t.packageId));case 6:if(t.index!==void 0)return da(void 0,_.Library_0_specified_in_compilerOptions,s.lib[t.index]);let v=Ld(zO.type,(S,x)=>S===Do(s)?x:void 0);return da(void 0,v?_.Default_library_for_target_0:_.Default_library,v);default:L.assertNever(t)}}function XS(e,t){let r=Ta(e)?e:e.fileName;return t?t(r):r}function qF(e,t,r,i,o,s,l,f){let d=!!e.getCompilerOptions().listFilesOnly,g=e.getConfigFileParsingDiagnostics().slice(),m=g.length;si(g,e.getSyntacticDiagnostics(void 0,s)),g.length===m&&(si(g,e.getOptionsDiagnostics(s)),d||(si(g,e.getGlobalDiagnostics(s)),g.length===m&&si(g,e.getSemanticDiagnostics(void 0,s))));let v=d?{emitSkipped:!0,diagnostics:Je}:e.emit(void 0,o,s,l,f),{emittedFiles:S,diagnostics:x}=v;si(g,x);let A=vA(g);if(A.forEach(t),r){let w=e.getCurrentDirectory();mn(S,C=>{let P=_a(C,w);r(`TSFILE: ${P}`)}),Rq(e,r)}return i&&i(JF(A),KF(A)),{emitResult:v,diagnostics:A}}function vme(e,t,r,i,o,s,l,f){let{emitResult:d,diagnostics:g}=qF(e,t,r,i,o,s,l,f);return d.emitSkipped&&g.length>0?1:g.length>0?2:0}function Fq(e=xl,t){return{onWatchStatusChange:t||pme(e),watchFile:ho(e,e.watchFile)||TN,watchDirectory:ho(e,e.watchDirectory)||TN,setTimeout:ho(e,e.setTimeout)||Ba,clearTimeout:ho(e,e.clearTimeout)||Ba}}function Gq(e,t){let r=e.trace?t.extendedDiagnostics?2:t.diagnostics?1:0:0,i=r!==0?s=>e.trace(s):Ba,o=Upe(e,r,i);return o.writeLog=i,o}function Bq(e,t,r=e){let i=e.useCaseSensitiveFileNames(),o={getSourceFile:eq((s,l)=>l?e.readFile(s,l):o.readFile(s),t,void 0),getDefaultLibLocation:ho(e,e.getDefaultLibLocation),getDefaultLibFileName:s=>e.getDefaultLibFileName(s),writeFile:tq((s,l,f)=>e.writeFile(s,l,f),s=>e.createDirectory(s),s=>e.directoryExists(s)),getCurrentDirectory:zu(()=>e.getCurrentDirectory()),useCaseSensitiveFileNames:()=>i,getCanonicalFileName:Dl(i),getNewLine:()=>db(t()),fileExists:s=>e.fileExists(s),readFile:s=>e.readFile(s),trace:ho(e,e.trace),directoryExists:ho(r,r.directoryExists),getDirectories:ho(r,r.getDirectories),realpath:ho(e,e.realpath),getEnvironmentVariable:ho(e,e.getEnvironmentVariable)||(()=>\"\"),createHash:ho(e,e.createHash),readDirectory:ho(e,e.readDirectory),storeFilesChangingSignatureDuringEmit:e.storeFilesChangingSignatureDuringEmit};return o}function XF(e,t){if(t.match(TK)){let r=t.length,i=r;for(let o=r-1;o>=0;o--){let s=t.charCodeAt(o);switch(s){case 10:o&&t.charCodeAt(o-1)===13&&o--;case 13:break;default:if(s<127||!Wl(s)){i=o;continue}break}let l=t.substring(i,r);if(l.match(hF)){t=t.substring(0,i);break}else if(!l.match(gF))break;r=i}}return(e.createHash||aw)(t)}function YF(e){let t=e.getSourceFile;e.getSourceFile=(...r)=>{let i=t.call(e,...r);return i&&(i.version=XF(e,i.text)),i}}function Uq(e,t){let r=zu(()=>ni(So(e.getExecutingFilePath())));return{useCaseSensitiveFileNames:()=>e.useCaseSensitiveFileNames,getNewLine:()=>e.newLine,getCurrentDirectory:zu(()=>e.getCurrentDirectory()),getDefaultLibLocation:r,getDefaultLibFileName:i=>vi(r(),X8(i)),fileExists:i=>e.fileExists(i),readFile:(i,o)=>e.readFile(i,o),directoryExists:i=>e.directoryExists(i),getDirectories:i=>e.getDirectories(i),readDirectory:(i,o,s,l,f)=>e.readDirectory(i,o,s,l,f),realpath:ho(e,e.realpath),getEnvironmentVariable:ho(e,e.getEnvironmentVariable),trace:i=>e.write(i+e.newLine),createDirectory:i=>e.createDirectory(i),writeFile:(i,o,s)=>e.writeFile(i,o,s),createHash:ho(e,e.createHash),createProgram:t||kq,storeFilesChangingSignatureDuringEmit:e.storeFilesChangingSignatureDuringEmit,now:ho(e,e.now)}}function bme(e=xl,t,r,i){let o=l=>e.write(l+e.newLine),s=Uq(e,t);return jU(s,Fq(e,i)),s.afterProgramCreate=l=>{let f=l.getCompilerOptions(),d=db(f);qF(l,r,o,g=>s.onWatchStatusChange(ps(wq(g),g),d,f,g))},s}function Eme(e,t,r){t(r),e.exit(1)}function Tme({configFileName:e,optionsToExtend:t,watchOptionsToExtend:r,extraFileExtensions:i,system:o,createProgram:s,reportDiagnostic:l,reportWatchStatus:f}){let d=l||bN(o),g=bme(o,s,d,f);return g.onUnRecoverableConfigFileDiagnostic=m=>Eme(o,d,m),g.configFileName=e,g.optionsToExtend=t,g.watchOptionsToExtend=r,g.extraFileExtensions=i,g}function Sme({rootFiles:e,options:t,watchOptions:r,projectReferences:i,system:o,createProgram:s,reportDiagnostic:l,reportWatchStatus:f}){let d=bme(o,s,l||bN(o),f);return d.rootFiles=e,d.options=t,d.watchOptions=r,d.projectReferences=i,d}function D8e(e){let t=e.system||xl,r=e.host||(e.host=jq(e.options,t)),i=xme(e),o=vme(i,e.reportDiagnostic||bN(t),s=>r.trace&&r.trace(s),e.reportErrorSummary||e.options.pretty?(s,l)=>t.write(hme(s,l,t.newLine,r)):void 0);return e.afterProgramEmitAndDiagnostics&&e.afterProgramEmitAndDiagnostics(i),o}var Vq,$F,B2,TN,Hf,w8e=gt({\"src/compiler/watch.ts\"(){\"use strict\";fa(),Vq=xl?{getCurrentDirectory:()=>xl.getCurrentDirectory(),getNewLine:()=>xl.newLine,getCanonicalFileName:Dl(xl.useCaseSensitiveFileNames)}:void 0,$F=[_.Starting_compilation_in_watch_mode.code,_.File_change_detected_Starting_incremental_compilation.code],B2={close:Ba},TN=()=>B2,Hf={ConfigFile:\"Config file\",ExtendedConfigFile:\"Extended config file\",SourceFile:\"Source file\",MissingFile:\"Missing file\",WildcardDirectory:\"Wild card directory\",FailedLookupLocations:\"Failed Lookup Locations\",AffectingFileLocation:\"File location affecting resolution\",TypeRoots:\"Type roots\",ConfigFileOfReferencedProject:\"Config file of referened project\",ExtendedConfigOfReferencedProject:\"Extended config file of referenced project\",WildcardDirectoryOfReferencedProject:\"Wild card directory of referenced project\",PackageJson:\"package.json file\",ClosedScriptInfo:\"Closed Script info\",ConfigFileForInferredRoot:\"Config file for the inferred project root\",NodeModules:\"node_modules for closed script infos and package.jsons affecting module specifier cache\",MissingSourceMapFile:\"Missing source map file\",NoopConfigFileForInferredRoot:\"Noop Config file for the inferred project root\",MissingGeneratedFile:\"Missing generated file\",NodeModulesForModuleSpecifierCache:\"node_modules for module specifier cache invalidation\"}}});function QF(e,t){let r=Jg(e);if(!r)return;let i;if(t.getBuildInfo)i=t.getBuildInfo(r,e.configFilePath);else{let o=t.readFile(r);if(!o)return;i=IF(r,o)}if(!(!i||i.version!==Rf||!i.program))return dme(i,r,t)}function jq(e,t=xl){let r=nq(e,void 0,t);return r.createHash=ho(t,t.createHash),r.storeFilesChangingSignatureDuringEmit=t.storeFilesChangingSignatureDuringEmit,YF(r),pN(r,i=>Ts(i,r.getCurrentDirectory(),r.getCanonicalFileName)),r}function xme({rootNames:e,options:t,configFileParsingDiagnostics:r,projectReferences:i,host:o,createProgram:s}){o=o||jq(t),s=s||kq;let l=QF(t,o);return s(e,t,o,l,r,i)}function R8e(e,t,r,i,o,s,l,f){return ba(e)?Sme({rootFiles:e,options:t,watchOptions:f,projectReferences:l,system:r,createProgram:i,reportDiagnostic:o,reportWatchStatus:s}):Tme({configFileName:e,optionsToExtend:t,watchOptionsToExtend:l,extraFileExtensions:f,system:r,createProgram:i,reportDiagnostic:o,reportWatchStatus:s})}function O8e(e){let t,r,i,o,s,l,f,d,g=e.extendedConfigCache,m=!1,v=new Map,S,x=!1,A=e.useCaseSensitiveFileNames(),w=e.getCurrentDirectory(),{configFileName:C,optionsToExtend:P={},watchOptionsToExtend:F,extraFileExtensions:B,createProgram:q}=e,{rootFiles:W,options:Y,watchOptions:R,projectReferences:ie}=e,$,fe,Z=!1,U=!1,re=C===void 0?void 0:Mpe(e,w,A),le=re||e,_e=FF(e,le),ge=zt();C&&e.configFileParsingResult&&(En(e.configFileParsingResult),ge=zt()),Pi(_.Starting_compilation_in_watch_mode),C&&!e.configFileParsingResult&&(ge=db(P),L.assert(!W),Ht(),ge=zt()),L.assert(Y),L.assert(W);let{watchFile:X,watchDirectory:Ve,writeLog:we}=Gq(e,Y),ke=Dl(A);we(`Current directory: ${w} CaseSensitiveFileNames: ${A}`);let Pe;C&&(Pe=X(C,An,2e3,R,Hf.ConfigFile));let Ce=Bq(e,()=>Y,le);YF(Ce);let Ie=Ce.getSourceFile;Ce.getSourceFile=(je,...Ge)=>Gt(je,Qt(je),...Ge),Ce.getSourceFileByPath=Gt,Ce.getNewLine=()=>ge,Ce.fileExists=_n,Ce.onReleaseOldSourceFile=Ni,Ce.onReleaseParsedCommandLine=Se,Ce.toPath=Qt,Ce.getCompilationSettings=()=>Y,Ce.useSourceOfProjectReferenceRedirect=ho(e,e.useSourceOfProjectReferenceRedirect),Ce.watchDirectoryOfFailedLookupLocation=(je,Ge,kt)=>Ve(je,Ge,kt,R,Hf.FailedLookupLocations),Ce.watchAffectingFileLocation=(je,Ge)=>X(je,Ge,2e3,R,Hf.AffectingFileLocation),Ce.watchTypeRootsDirectory=(je,Ge,kt)=>Ve(je,Ge,kt,R,Hf.TypeRoots),Ce.getCachedDirectoryStructureHost=()=>re,Ce.scheduleInvalidateResolutionsOfFailedLookupLocations=nn,Ce.onInvalidatedResolution=pn,Ce.onChangedAutomaticTypeDirectiveNames=pn,Ce.fileIsOpen=m0,Ce.getCurrentProgram=ct,Ce.writeLog=we,Ce.getParsedCommandLine=dr;let Be=fme(Ce,C?ni(_a(C,w)):w,!1);Ce.resolveModuleNameLiterals=ho(e,e.resolveModuleNameLiterals),Ce.resolveModuleNames=ho(e,e.resolveModuleNames),!Ce.resolveModuleNameLiterals&&!Ce.resolveModuleNames&&(Ce.resolveModuleNameLiterals=Be.resolveModuleNameLiterals.bind(Be)),Ce.resolveTypeReferenceDirectiveReferences=ho(e,e.resolveTypeReferenceDirectiveReferences),Ce.resolveTypeReferenceDirectives=ho(e,e.resolveTypeReferenceDirectives),!Ce.resolveTypeReferenceDirectiveReferences&&!Ce.resolveTypeReferenceDirectives&&(Ce.resolveTypeReferenceDirectiveReferences=Be.resolveTypeReferenceDirectiveReferences.bind(Be)),Ce.getModuleResolutionCache=e.resolveModuleNameLiterals||e.resolveModuleNames?ho(e,e.getModuleResolutionCache):()=>Be.getModuleResolutionCache();let Le=!!e.resolveModuleNameLiterals||!!e.resolveTypeReferenceDirectiveReferences||!!e.resolveModuleNames||!!e.resolveTypeReferenceDirectives?ho(e,e.hasInvalidatedResolutions)||h0:m0;return t=QF(Y,Ce),Rt(),Q(),C&&G(Qt(C),Y,R,Hf.ExtendedConfigFile),C?{getCurrentProgram:_t,getProgram:hi,close:Ye}:{getCurrentProgram:_t,getProgram:hi,updateRootFileNames:qe,close:Ye};function Ye(){pt(),Be.clear(),Tf(v,je=>{je&&je.fileWatcher&&(je.fileWatcher.close(),je.fileWatcher=void 0)}),Pe&&(Pe.close(),Pe=void 0),g?.clear(),g=void 0,d&&(Tf(d,_m),d=void 0),o&&(Tf(o,_m),o=void 0),i&&(Tf(i,am),i=void 0),f&&(Tf(f,je=>{var Ge;(Ge=je.watcher)==null||Ge.close(),je.watcher=void 0,je.watchedDirectories&&Tf(je.watchedDirectories,_m),je.watchedDirectories=void 0}),f=void 0)}function _t(){return t}function ct(){return t&&t.getProgramOrUndefined()}function Rt(){we(\"Synchronizing program\"),L.assert(Y),L.assert(W),pt();let je=_t();x&&(ge=zt(),je&&eH(je.getCompilerOptions(),Y)&&Be.clear());let Ge=Be.createHasInvalidatedResolutions(Le),{originalReadFile:kt,originalFileExists:Kt,originalDirectoryExists:ln,originalCreateDirectory:ir,originalWriteFile:ae,readFileWithCache:rt}=pN(Ce,Qt);return lq(ct(),W,Y,Ot=>ui(Ot,rt),Ot=>Ce.fileExists(Ot),Ge,gr,dr,ie)?U&&(m&&Pi(_.File_change_detected_Starting_incremental_compilation),t=q(void 0,void 0,Ce,t,fe,ie),U=!1):(m&&Pi(_.File_change_detected_Starting_incremental_compilation),We(Ge)),m=!1,e.afterProgramCreate&&je!==t&&e.afterProgramCreate(t),Ce.readFile=kt,Ce.fileExists=Kt,Ce.directoryExists=ln,Ce.createDirectory=ir,Ce.writeFile=ae,t}function We(je){we(\"CreatingProgramWith::\"),we(`  roots: ${JSON.stringify(W)}`),we(`  options: ${JSON.stringify(Y)}`),ie&&we(`  projectReferences: ${JSON.stringify(ie)}`);let Ge=x||!ct();x=!1,U=!1,Be.startCachingPerDirectoryResolution(),Ce.hasInvalidatedResolutions=je,Ce.hasChangedAutomaticTypeDirectiveNames=gr;let kt=ct();if(t=q(W,Y,Ce,t,fe,ie),Be.finishCachingPerDirectoryResolution(t.getProgram(),kt),Gpe(t.getProgram(),i||(i=new Map),nt),Ge&&Be.updateTypeRootsWatch(),S){for(let Kt of S)i.has(Kt)||v.delete(Kt);S=void 0}}function qe(je){L.assert(!C,\"Cannot update root file names with config file watch mode\"),W=je,pn()}function zt(){return db(Y||P)}function Qt(je){return Ts(je,w,ke)}function tn(je){return typeof je==\"boolean\"}function kn(je){return typeof je.version==\"boolean\"}function _n(je){let Ge=Qt(je);return tn(v.get(Ge))?!1:le.fileExists(je)}function Gt(je,Ge,kt,Kt,ln){let ir=v.get(Ge);if(!tn(ir)){if(ir===void 0||ln||kn(ir)){let ae=Ie(je,kt,Kt);if(ir)ae?(ir.sourceFile=ae,ir.version=ae.version,ir.fileWatcher||(ir.fileWatcher=at(Ge,je,Tt,250,R,Hf.SourceFile))):(ir.fileWatcher&&ir.fileWatcher.close(),v.set(Ge,!1));else if(ae){let rt=at(Ge,je,Tt,250,R,Hf.SourceFile);v.set(Ge,{sourceFile:ae,version:ae.version,fileWatcher:rt})}else v.set(Ge,!1);return ae}return ir.sourceFile}}function $n(je){let Ge=v.get(je);Ge!==void 0&&(tn(Ge)?v.set(je,{version:!1}):Ge.version=!1)}function ui(je,Ge){let kt=v.get(je);if(!kt)return;if(kt.version)return kt.version;let Kt=Ge(je);return Kt!==void 0?XF(Ce,Kt):void 0}function Ni(je,Ge,kt){let Kt=v.get(je.resolvedPath);Kt!==void 0&&(tn(Kt)?(S||(S=[])).push(je.path):Kt.sourceFile===je&&(Kt.fileWatcher&&Kt.fileWatcher.close(),v.delete(je.resolvedPath),kt||Be.removeResolutionsOfFile(je.path)))}function Pi(je){e.onWatchStatusChange&&e.onWatchStatusChange(ps(je),ge,Y||P)}function gr(){return Be.hasChangedAutomaticTypeDirectiveNames()}function pt(){return l?(e.clearTimeout(l),l=void 0,!0):!1}function nn(){if(!e.setTimeout||!e.clearTimeout)return Be.invalidateResolutionsOfFailedLookupLocations();let je=pt();we(`Scheduling invalidateFailedLookup${je?\", Cancelled earlier one\":\"\"}`),l=e.setTimeout(Dt,250)}function Dt(){l=void 0,Be.invalidateResolutionsOfFailedLookupLocations()&&pn()}function pn(){!e.setTimeout||!e.clearTimeout||(s&&e.clearTimeout(s),we(\"Scheduling update\"),s=e.setTimeout(Kn,250))}function An(){L.assert(!!C),r=2,pn()}function Kn(){s=void 0,m=!0,hi()}function hi(){switch(r){case 1:fp.logStartUpdateProgram(\"PartialConfigReload\"),ri();break;case 2:fp.logStartUpdateProgram(\"FullConfigReload\"),vn();break;default:fp.logStartUpdateProgram(\"SynchronizeProgram\"),Rt();break}return fp.logStopUpdateProgram(\"Done\"),_t()}function ri(){we(\"Reloading new file names and options\"),L.assert(Y),L.assert(C),r=0,W=BO(Y.configFile.configFileSpecs,_a(ni(C),w),Y,_e,B),CJ(W,_a(C,w),Y.configFile.configFileSpecs,fe,Z)&&(U=!0),Rt()}function vn(){L.assert(C),we(`Reloading config file: ${C}`),r=0,re&&re.clearCache(),Ht(),x=!0,Rt(),Q(),G(Qt(C),Y,R,Hf.ExtendedConfigFile)}function Ht(){L.assert(C),En(RO(C,P,_e,g||(g=new Map),F,B))}function En(je){W=je.fileNames,Y=je.options,R=je.watchOptions,ie=je.projectReferences,$=je.wildcardDirectories,fe=XT(je).slice(),Z=FO(je.raw),U=!0}function dr(je){let Ge=Qt(je),kt=f?.get(Ge);if(kt){if(!kt.reloadLevel)return kt.parsedCommandLine;if(kt.parsedCommandLine&&kt.reloadLevel===1&&!e.getParsedCommandLine){we(\"Reloading new file names and options\"),L.assert(Y);let ln=BO(kt.parsedCommandLine.options.configFile.configFileSpecs,_a(ni(je),w),Y,_e);return kt.parsedCommandLine={...kt.parsedCommandLine,fileNames:ln},kt.reloadLevel=void 0,kt.parsedCommandLine}}we(`Loading config file: ${je}`);let Kt=e.getParsedCommandLine?e.getParsedCommandLine(je):Cr(je);return kt?(kt.parsedCommandLine=Kt,kt.reloadLevel=void 0):(f||(f=new Map)).set(Ge,kt={parsedCommandLine:Kt}),Oe(je,Ge,kt),Kt}function Cr(je){let Ge=_e.onUnRecoverableConfigFileDiagnostic;_e.onUnRecoverableConfigFileDiagnostic=Ba;let kt=RO(je,void 0,_e,g||(g=new Map),F);return _e.onUnRecoverableConfigFileDiagnostic=Ge,kt}function Se(je){var Ge;let kt=Qt(je),Kt=f?.get(kt);Kt&&(f.delete(kt),Kt.watchedDirectories&&Tf(Kt.watchedDirectories,_m),(Ge=Kt.watcher)==null||Ge.close(),Fpe(kt,d))}function at(je,Ge,kt,Kt,ln,ir){return X(Ge,(ae,rt)=>kt(ae,rt,je),Kt,ln,ir)}function Tt(je,Ge,kt){ve(je,kt,Ge),Ge===2&&v.has(kt)&&Be.invalidateResolutionOfFile(kt),$n(kt),pn()}function ve(je,Ge,kt){re&&re.addOrDeleteFile(je,Ge,kt)}function nt(je){return f?.has(je)?B2:at(je,je,ce,500,R,Hf.MissingFile)}function ce(je,Ge,kt){ve(je,kt,Ge),Ge===0&&i.has(kt)&&(i.get(kt).close(),i.delete(kt),$n(kt),pn())}function Q(){$?kF(o||(o=new Map),new Map(Object.entries($)),ue):o&&Tf(o,_m)}function ue(je,Ge){return Ve(je,kt=>{L.assert(C),L.assert(Y);let Kt=Qt(kt);re&&re.addOrDeleteFileOrDirectory(kt,Kt),$n(Kt),!DF({watchedDirPath:Qt(je),fileOrDirectory:kt,fileOrDirectoryPath:Kt,configFileName:C,extraFileExtensions:B,options:Y,program:_t()||W,currentDirectory:w,useCaseSensitiveFileNames:A,writeLog:we,toPath:Qt})&&r!==2&&(r=1,pn())},Ge,R,Hf.WildcardDirectory)}function G(je,Ge,kt,Kt){L.assert(C),YK(je,Ge,d||(d=new Map),(ln,ir)=>X(ln,(ae,rt)=>{var Ot;ve(ln,ir,rt),g&&$K(g,ir,Qt);let Ke=(Ot=d.get(ir))==null?void 0:Ot.projects;Ke?.size&&Ke.forEach(oe=>{if(Qt(C)===oe)r=2;else{let pe=f?.get(oe);pe&&(pe.reloadLevel=2),Be.removeResolutionsFromProjectReferenceRedirects(oe)}pn()})},2e3,kt,Kt),Qt)}function Oe(je,Ge,kt){var Kt,ln,ir,ae,rt;kt.watcher||(kt.watcher=X(je,(Ot,Ke)=>{ve(je,Ge,Ke);let oe=f?.get(Ge);oe&&(oe.reloadLevel=2),Be.removeResolutionsFromProjectReferenceRedirects(Ge),pn()},2e3,((Kt=kt.parsedCommandLine)==null?void 0:Kt.watchOptions)||R,Hf.ConfigFileOfReferencedProject)),(ln=kt.parsedCommandLine)!=null&&ln.wildcardDirectories?kF(kt.watchedDirectories||(kt.watchedDirectories=new Map),new Map(Object.entries((ir=kt.parsedCommandLine)==null?void 0:ir.wildcardDirectories)),(Ot,Ke)=>{var oe;return Ve(Ot,pe=>{let z=Qt(pe);re&&re.addOrDeleteFileOrDirectory(pe,z),$n(z);let Te=f?.get(Ge);Te?.parsedCommandLine&&(DF({watchedDirPath:Qt(Ot),fileOrDirectory:pe,fileOrDirectoryPath:z,configFileName:je,options:Te.parsedCommandLine.options,program:Te.parsedCommandLine.fileNames,currentDirectory:w,useCaseSensitiveFileNames:A,writeLog:we,toPath:Qt})||Te.reloadLevel!==2&&(Te.reloadLevel=1,pn()))},Ke,((oe=kt.parsedCommandLine)==null?void 0:oe.watchOptions)||R,Hf.WildcardDirectoryOfReferencedProject)}):kt.watchedDirectories&&(Tf(kt.watchedDirectories,_m),kt.watchedDirectories=void 0),G(Ge,(ae=kt.parsedCommandLine)==null?void 0:ae.options,((rt=kt.parsedCommandLine)==null?void 0:rt.watchOptions)||R,Hf.ExtendedConfigOfReferencedProject)}}var N8e=gt({\"src/compiler/watchPublic.ts\"(){\"use strict\";fa(),fa()}});function Hq(e){return Gc(e,\".json\")?e:vi(e,\"tsconfig.json\")}var Wq,P8e=gt({\"src/compiler/tsbuild.ts\"(){\"use strict\";fa(),Wq=(e=>(e[e.Unbuildable=0]=\"Unbuildable\",e[e.UpToDate=1]=\"UpToDate\",e[e.UpToDateWithUpstreamTypes=2]=\"UpToDateWithUpstreamTypes\",e[e.OutOfDateWithPrepend=3]=\"OutOfDateWithPrepend\",e[e.OutputMissing=4]=\"OutputMissing\",e[e.ErrorReadingFile=5]=\"ErrorReadingFile\",e[e.OutOfDateWithSelf=6]=\"OutOfDateWithSelf\",e[e.OutOfDateWithUpstream=7]=\"OutOfDateWithUpstream\",e[e.OutOfDateBuildInfo=8]=\"OutOfDateBuildInfo\",e[e.OutOfDateOptions=9]=\"OutOfDateOptions\",e[e.OutOfDateRoots=10]=\"OutOfDateRoots\",e[e.UpstreamOutOfDate=11]=\"UpstreamOutOfDate\",e[e.UpstreamBlocked=12]=\"UpstreamBlocked\",e[e.ComputingUpstream=13]=\"ComputingUpstream\",e[e.TsVersionOutputOfDate=14]=\"TsVersionOutputOfDate\",e[e.UpToDateWithInputFileText=15]=\"UpToDateWithInputFileText\",e[e.ContainerOnly=16]=\"ContainerOnly\",e[e.ForceBuild=17]=\"ForceBuild\",e))(Wq||{})}});function M8e(e,t,r){let i=e.get(t),o;return i||(o=r(),e.set(t,o)),i||o}function zq(e,t){return M8e(e,t,()=>new Map)}function SN(e){return e.now?e.now():new Date}function YS(e){return!!e&&!!e.buildOrder}function ZF(e){return YS(e)?e.buildOrder:e}function Ame(e,t){return r=>{let i=t?`[${iE(EN(e),\"\\x1B[90m\")}] `:`${EN(e)} - `;i+=`${sv(r.messageText,e.newLine)}${e.newLine+e.newLine}`,e.write(i)}}function Cme(e,t,r,i){let o=Uq(e,t);return o.getModifiedTime=e.getModifiedTime?s=>e.getModifiedTime(s):Qv,o.setModifiedTime=e.setModifiedTime?(s,l)=>e.setModifiedTime(s,l):Ba,o.deleteFile=e.deleteFile?s=>e.deleteFile(s):Ba,o.reportDiagnostic=r||bN(e),o.reportSolutionBuilderStatus=i||Ame(e),o.now=ho(e,e.now),o}function F8e(e=xl,t,r,i,o){let s=Cme(e,t,r,i);return s.reportErrorSummary=o,s}function G8e(e=xl,t,r,i,o){let s=Cme(e,t,r,i),l=Fq(e,o);return jU(s,l),s}function B8e(e){let t={};return WO.forEach(r=>{fs(e,r.name)&&(t[r.name]=e[r.name])}),t}function U8e(e,t,r){return Xme(!1,e,t,r)}function V8e(e,t,r,i){return Xme(!0,e,t,r,i)}function j8e(e,t,r,i,o){let s=t,l=t,f=B8e(i),d=Bq(s,()=>A.projectCompilerOptions);YF(d),d.getParsedCommandLine=w=>$T(A,w,z_(A,w)),d.resolveModuleNameLiterals=ho(s,s.resolveModuleNameLiterals),d.resolveTypeReferenceDirectiveReferences=ho(s,s.resolveTypeReferenceDirectiveReferences),d.resolveModuleNames=ho(s,s.resolveModuleNames),d.resolveTypeReferenceDirectives=ho(s,s.resolveTypeReferenceDirectives),d.getModuleResolutionCache=ho(s,s.getModuleResolutionCache);let g,m;!d.resolveModuleNameLiterals&&!d.resolveModuleNames&&(g=Y3(d.getCurrentDirectory(),d.getCanonicalFileName),d.resolveModuleNameLiterals=(w,C,P,F,B)=>hN(w,C,P,F,B,s,g,cq),d.getModuleResolutionCache=()=>g),!d.resolveTypeReferenceDirectiveReferences&&!d.resolveTypeReferenceDirectives&&(m=$3(d.getCurrentDirectory(),d.getCanonicalFileName,void 0,g?.getPackageJsonInfoCache()),d.resolveTypeReferenceDirectiveReferences=(w,C,P,F,B)=>hN(w,C,P,F,B,s,m,OF)),d.getBuildInfo=(w,C)=>Ume(A,w,z_(A,C),void 0);let{watchFile:v,watchDirectory:S,writeLog:x}=Gq(l,i),A={host:s,hostWithWatch:l,parseConfigFileHost:FF(s),write:ho(s,s.trace),options:i,baseCompilerOptions:f,rootNames:r,baseWatchOptions:o,resolvedConfigFilePaths:new Map,configFileCache:new Map,projectStatus:new Map,extendedConfigCache:new Map,buildInfoCache:new Map,outputTimeStamps:new Map,builderPrograms:new Map,diagnostics:new Map,projectPendingBuild:new Map,projectErrorsReported:new Map,compilerHost:d,moduleResolutionCache:g,typeReferenceDirectiveResolutionCache:m,buildOrder:void 0,readFileWithCache:w=>s.readFile(w),projectCompilerOptions:f,cache:void 0,allProjectBuildPending:!0,needsSummary:!0,watchAllProjectsPending:e,watch:e,allWatchedWildcardDirectories:new Map,allWatchedInputFiles:new Map,allWatchedConfigFiles:new Map,allWatchedExtendedConfigFiles:new Map,allWatchedPackageJsonFiles:new Map,filesWatched:new Map,lastCachedPackageJsonLookups:new Map,timerToBuildInvalidatedProject:void 0,reportFileChangeDetected:!1,watchFile:v,watchDirectory:S,writeLog:x};return A}function fd(e,t){return Ts(t,e.compilerHost.getCurrentDirectory(),e.compilerHost.getCanonicalFileName)}function z_(e,t){let{resolvedConfigFilePaths:r}=e,i=r.get(t);if(i!==void 0)return i;let o=fd(e,t);return r.set(t,o),o}function Ime(e){return!!e.options}function H8e(e,t){let r=e.configFileCache.get(t);return r&&Ime(r)?r:void 0}function $T(e,t,r){let{configFileCache:i}=e,o=i.get(r);if(o)return Ime(o)?o:void 0;Fs(\"SolutionBuilder::beforeConfigFileParsing\");let s,{parseConfigFileHost:l,baseCompilerOptions:f,baseWatchOptions:d,extendedConfigCache:g,host:m}=e,v;return m.getParsedCommandLine?(v=m.getParsedCommandLine(t),v||(s=ps(_.File_0_not_found,t))):(l.onUnRecoverableConfigFileDiagnostic=S=>s=S,v=RO(t,f,l,g,d),l.onUnRecoverableConfigFileDiagnostic=Ba),i.set(r,v||s),Fs(\"SolutionBuilder::afterConfigFileParsing\"),hf(\"SolutionBuilder::Config file parsing\",\"SolutionBuilder::beforeConfigFileParsing\",\"SolutionBuilder::afterConfigFileParsing\"),v}function U2(e,t){return Hq(Fy(e.compilerHost.getCurrentDirectory(),t))}function Lme(e,t){let r=new Map,i=new Map,o=[],s,l;for(let d of t)f(d);return l?{buildOrder:s||Je,circularDiagnostics:l}:s||Je;function f(d,g){let m=z_(e,d);if(i.has(m))return;if(r.has(m)){g||(l||(l=[])).push(ps(_.Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0,o.join(`\\r\n`)));return}r.set(m,!0),o.push(d);let v=$T(e,d,m);if(v&&v.projectReferences)for(let S of v.projectReferences){let x=U2(e,S.path);f(x,g||S.circular)}o.pop(),i.set(m,!0),(s||(s=[])).push(d)}}function xN(e){return e.buildOrder||W8e(e)}function W8e(e){let t=Lme(e,e.rootNames.map(o=>U2(e,o)));e.resolvedConfigFilePaths.clear();let r=new Map(ZF(t).map(o=>[z_(e,o),!0])),i={onDeleteValue:Ba};return Oh(e.configFileCache,r,i),Oh(e.projectStatus,r,i),Oh(e.builderPrograms,r,i),Oh(e.diagnostics,r,i),Oh(e.projectPendingBuild,r,i),Oh(e.projectErrorsReported,r,i),Oh(e.buildInfoCache,r,i),Oh(e.outputTimeStamps,r,i),e.watch&&(Oh(e.allWatchedConfigFiles,r,{onDeleteValue:am}),e.allWatchedExtendedConfigFiles.forEach(o=>{o.projects.forEach(s=>{r.has(s)||o.projects.delete(s)}),o.close()}),Oh(e.allWatchedWildcardDirectories,r,{onDeleteValue:o=>o.forEach(_m)}),Oh(e.allWatchedInputFiles,r,{onDeleteValue:o=>o.forEach(am)}),Oh(e.allWatchedPackageJsonFiles,r,{onDeleteValue:o=>o.forEach(am)})),e.buildOrder=t}function kme(e,t,r){let i=t&&U2(e,t),o=xN(e);if(YS(o))return o;if(i){let l=z_(e,i);if(Yc(o,d=>z_(e,d)===l)===-1)return}let s=i?Lme(e,[i]):o;return L.assert(!YS(s)),L.assert(!r||i!==void 0),L.assert(!r||s[s.length-1]===i),r?s.slice(0,s.length-1):s}function Dme(e){e.cache&&Jq(e);let{compilerHost:t,host:r}=e,i=e.readFileWithCache,o=t.getSourceFile,{originalReadFile:s,originalFileExists:l,originalDirectoryExists:f,originalCreateDirectory:d,originalWriteFile:g,getSourceFileWithCache:m,readFileWithCache:v}=pN(r,S=>fd(e,S),(...S)=>o.call(t,...S));e.readFileWithCache=v,t.getSourceFile=m,e.cache={originalReadFile:s,originalFileExists:l,originalDirectoryExists:f,originalCreateDirectory:d,originalWriteFile:g,originalReadFileWithCache:i,originalGetSourceFile:o}}function Jq(e){if(!e.cache)return;let{cache:t,host:r,compilerHost:i,extendedConfigCache:o,moduleResolutionCache:s,typeReferenceDirectiveResolutionCache:l}=e;r.readFile=t.originalReadFile,r.fileExists=t.originalFileExists,r.directoryExists=t.originalDirectoryExists,r.createDirectory=t.originalCreateDirectory,r.writeFile=t.originalWriteFile,i.getSourceFile=t.originalGetSourceFile,e.readFileWithCache=t.originalReadFileWithCache,o.clear(),s?.clear(),l?.clear(),e.cache=void 0}function wme(e,t){e.projectStatus.delete(t),e.diagnostics.delete(t)}function Rme({projectPendingBuild:e},t,r){let i=e.get(t);(i===void 0||i<r)&&e.set(t,r)}function Ome(e,t){if(!e.allProjectBuildPending)return;e.allProjectBuildPending=!1,e.options.watch&&iX(e,_.Starting_compilation_in_watch_mode),Dme(e),ZF(xN(e)).forEach(i=>e.projectPendingBuild.set(z_(e,i),0)),t&&t.throwIfCancellationRequested()}function Nme(e,t){return e.projectPendingBuild.delete(t),e.diagnostics.has(t)?1:0}function z8e(e,t,r,i,o){let s=!0;return{kind:2,project:t,projectPath:r,buildOrder:o,getCompilerOptions:()=>i.options,getCurrentDirectory:()=>e.compilerHost.getCurrentDirectory(),updateOutputFileStatmps:()=>{jme(e,i,r),s=!1},done:()=>(s&&jme(e,i,r),Fs(\"SolutionBuilder::Timestamps only updates\"),Nme(e,r))}}function Pme(e,t,r,i,o,s,l){let f=e===0?0:4,d,g,m;return e===0?{kind:e,project:r,projectPath:i,buildOrder:l,getCompilerOptions:()=>s.options,getCurrentDirectory:()=>t.compilerHost.getCurrentDirectory(),getBuilderProgram:()=>S(Ks),getProgram:()=>S(R=>R.getProgramOrUndefined()),getSourceFile:R=>S(ie=>ie.getSourceFile(R)),getSourceFiles:()=>x(R=>R.getSourceFiles()),getOptionsDiagnostics:R=>x(ie=>ie.getOptionsDiagnostics(R)),getGlobalDiagnostics:R=>x(ie=>ie.getGlobalDiagnostics(R)),getConfigFileParsingDiagnostics:()=>x(R=>R.getConfigFileParsingDiagnostics()),getSyntacticDiagnostics:(R,ie)=>x($=>$.getSyntacticDiagnostics(R,ie)),getAllDependencies:R=>x(ie=>ie.getAllDependencies(R)),getSemanticDiagnostics:(R,ie)=>x($=>$.getSemanticDiagnostics(R,ie)),getSemanticDiagnosticsOfNextAffectedFile:(R,ie)=>S($=>$.getSemanticDiagnosticsOfNextAffectedFile&&$.getSemanticDiagnosticsOfNextAffectedFile(R,ie)),emit:(R,ie,$,fe,Z)=>{if(R||fe)return S(U=>{var re,le;return U.emit(R,ie,$,fe,Z||((le=(re=t.host).getCustomTransformers)==null?void 0:le.call(re,r)))});if(Y(2,$),f===5)return B(ie,$);if(f===3)return F(ie,$,Z)},done:v}:{kind:e,project:r,projectPath:i,buildOrder:l,getCompilerOptions:()=>s.options,getCurrentDirectory:()=>t.compilerHost.getCurrentDirectory(),emit:(R,ie)=>f!==4?m:W(R,ie),done:v};function v(R,ie,$){return Y(8,R,ie,$),Fs(e===0?\"SolutionBuilder::Projects built\":\"SolutionBuilder::Bundles updated\"),Nme(t,i)}function S(R){return Y(0),d&&R(d)}function x(R){return S(R)||Je}function A(){var R,ie;if(L.assert(d===void 0),t.options.dry){hu(t,_.A_non_dry_build_would_build_project_0,r),g=1,f=7;return}if(t.options.verbose&&hu(t,_.Building_project_0,r),s.fileNames.length===0){V2(t,i,XT(s)),g=0,f=7;return}let{host:$,compilerHost:fe}=t;t.projectCompilerOptions=s.options,(R=t.moduleResolutionCache)==null||R.update(s.options),(ie=t.typeReferenceDirectiveResolutionCache)==null||ie.update(s.options),d=$.createProgram(s.fileNames,s.options,fe,K8e(t,i,s),XT(s),s.projectReferences),t.watch&&(t.lastCachedPackageJsonLookups.set(i,t.moduleResolutionCache&&on(t.moduleResolutionCache.getPackageJsonInfoCache().entries(),([Z,U])=>[t.host.realpath&&U?fd(t,t.host.realpath(Z)):Z,U])),t.builderPrograms.set(i,d)),f++}function w(R,ie,$){R.length?{buildResult:g,step:f}=Xq(t,i,d,s,R,ie,$):f++}function C(R){L.assertIsDefined(d),w([...d.getConfigFileParsingDiagnostics(),...d.getOptionsDiagnostics(R),...d.getGlobalDiagnostics(R),...d.getSyntacticDiagnostics(void 0,R)],8,\"Syntactic\")}function P(R){w(L.checkDefined(d).getSemanticDiagnostics(void 0,R),16,\"Semantic\")}function F(R,ie,$){var fe,Z,U;L.assertIsDefined(d),L.assert(f===3);let re=d.saveEmitState(),le,_e=Ye=>(le||(le=[])).push(Ye),ge=[],{emitResult:X}=qF(d,_e,void 0,void 0,(Ye,_t,ct,Rt,We,qe)=>ge.push({name:Ye,text:_t,writeByteOrderMark:ct,data:qe}),ie,!1,$||((Z=(fe=t.host).getCustomTransformers)==null?void 0:Z.call(fe,r)));if(le)return d.restoreEmitState(re),{buildResult:g,step:f}=Xq(t,i,d,s,le,32,\"Declaration file\"),{emitSkipped:!0,diagnostics:X.diagnostics};let{host:Ve,compilerHost:we}=t,ke=(U=d.hasChangedEmitSignature)!=null&&U.call(d)?0:2,Pe=XA(),Ce=new Map,Ie=d.getCompilerOptions(),Be=NR(Ie),Ne,Le;return ge.forEach(({name:Ye,text:_t,writeByteOrderMark:ct,data:Rt})=>{let We=fd(t,Ye);Ce.set(fd(t,Ye),Ye),Rt?.buildInfo&&$q(t,Rt.buildInfo,i,Ie,ke);let qe=Rt?.differsOnlyInMap?$1(t.host,Ye):void 0;BI(R?{writeFile:R}:we,Pe,Ye,_t,ct),Rt?.differsOnlyInMap?t.host.setModifiedTime(Ye,qe):!Be&&t.watch&&(Ne||(Ne=Yq(t,i))).set(We,Le||(Le=SN(t.host)))}),q(Pe,Ce,ge.length?ge[0].name:JK(s,!Ve.useCaseSensitiveFileNames()),ke),X}function B(R,ie){L.assertIsDefined(d),L.assert(f===5);let $=d.emitBuildInfo((fe,Z,U,re,le,_e)=>{_e?.buildInfo&&$q(t,_e.buildInfo,i,d.getCompilerOptions(),2),R?R(fe,Z,U,re,le,_e):t.compilerHost.writeFile(fe,Z,U,re,le,_e)},ie);return $.diagnostics.length&&(CN(t,$.diagnostics),t.diagnostics.set(i,[...t.diagnostics.get(i),...$.diagnostics]),g=64&g),$.emittedFiles&&t.write&&$.emittedFiles.forEach(fe=>Gme(t,s,fe)),qq(t,d,s),f=7,$}function q(R,ie,$,fe){let Z=R.getDiagnostics();return Z.length?({buildResult:g,step:f}=Xq(t,i,d,s,Z,64,\"Emit\"),Z):(t.write&&ie.forEach(U=>Gme(t,s,U)),Vme(t,s,i,_.Updating_unchanged_output_timestamps_of_project_0,ie),t.diagnostics.delete(i),t.projectStatus.set(i,{type:1,oldestOutputFileName:$}),qq(t,d,s),f=7,g=fe,Z)}function W(R,ie){var $,fe,Z,U;if(L.assert(e===1),t.options.dry){hu(t,_.A_non_dry_build_would_update_output_of_project_0,r),g=1,f=7;return}t.options.verbose&&hu(t,_.Updating_output_of_project_0,r);let{compilerHost:re}=t;t.projectCompilerOptions=s.options,(fe=($=t.host).beforeEmitBundle)==null||fe.call($,s);let le=Ppe(s,re,ke=>{let Pe=U2(t,ke.path);return $T(t,Pe,z_(t,Pe))},ie||((U=(Z=t.host).getCustomTransformers)==null?void 0:U.call(Z,r)));if(Ta(le))return hu(t,_.Cannot_update_output_of_project_0_because_there_was_error_reading_file_1,r,cl(t,le)),f=6,m=Pme(0,t,r,i,o,s,l);L.assert(!!le.length);let _e=XA(),ge=new Map,X=2,Ve=t.buildInfoCache.get(i).buildInfo||void 0;return le.forEach(({name:ke,text:Pe,writeByteOrderMark:Ce,data:Ie})=>{var Be,Ne;ge.set(fd(t,ke),ke),Ie?.buildInfo&&(((Be=Ie.buildInfo.program)==null?void 0:Be.outSignature)!==((Ne=Ve?.program)==null?void 0:Ne.outSignature)&&(X&=-3),$q(t,Ie.buildInfo,i,s.options,X)),BI(R?{writeFile:R}:re,_e,ke,Pe,Ce)}),{emitSkipped:!1,diagnostics:q(_e,ge,le[0].name,X)}}function Y(R,ie,$,fe){for(;f<=R&&f<8;){let Z=f;switch(f){case 0:A();break;case 1:C(ie);break;case 2:P(ie);break;case 3:F($,ie,fe);break;case 5:B($,ie);break;case 4:W($,fe);break;case 6:L.checkDefined(m).done(ie,$,fe),f=8;break;case 7:$8e(t,r,i,o,s,l,L.checkDefined(g)),f++;break;case 8:default:}L.assert(f>Z)}}}function J8e({options:e},t,r){return t.type!==3||e.force?!0:r.fileNames.length===0||!!XT(r).length||!NR(r.options)}function Mme(e,t,r){if(!e.projectPendingBuild.size||YS(t))return;let{options:i,projectPendingBuild:o}=e;for(let s=0;s<t.length;s++){let l=t[s],f=z_(e,l),d=e.projectPendingBuild.get(f);if(d===void 0)continue;r&&(r=!1,Qme(e,t));let g=$T(e,l,f);if(!g){Yme(e,f),o.delete(f);continue}d===2?(Jme(e,l,f,g),Kme(e,f,g),qme(e,l,f,g),nX(e,l,f,g),rX(e,l,f,g)):d===1&&(g.fileNames=BO(g.options.configFile.configFileSpecs,ni(l),g.options,e.parseConfigFileHost),CJ(g.fileNames,l,g.options.configFile.configFileSpecs,g.errors,FO(g.raw)),nX(e,l,f,g),rX(e,l,f,g));let m=eX(e,g,f);if(!i.force){if(m.type===1){n7(e,l,m),V2(e,f,XT(g)),o.delete(f),i.dry&&hu(e,_.Project_0_is_up_to_date,l);continue}if(m.type===2||m.type===15)return V2(e,f,XT(g)),{kind:2,status:m,project:l,projectPath:f,projectIndex:s,config:g}}if(m.type===12){n7(e,l,m),V2(e,f,XT(g)),o.delete(f),i.verbose&&hu(e,m.upstreamProjectBlocked?_.Skipping_build_of_project_0_because_its_dependency_1_was_not_built:_.Skipping_build_of_project_0_because_its_dependency_1_has_errors,l,m.upstreamProjectName);continue}if(m.type===16){n7(e,l,m),V2(e,f,XT(g)),o.delete(f);continue}return{kind:J8e(e,m,g)?0:1,status:m,project:l,projectPath:f,projectIndex:s,config:g}}}function Fme(e,t,r){return n7(e,t.project,t.status),t.kind!==2?Pme(t.kind,e,t.project,t.projectPath,t.projectIndex,t.config,r):z8e(e,t.project,t.projectPath,t.config,r)}function Kq(e,t,r){let i=Mme(e,t,r);return i&&Fme(e,i,t)}function Gme({write:e},t,r){e&&t.options.listEmittedFiles&&e(`TSFILE: ${r}`)}function K8e({options:e,builderPrograms:t,compilerHost:r},i,o){if(e.force)return;let s=t.get(i);return s||QF(o.options,r)}function qq(e,t,r){t?(e.write&&Rq(t,e.write),e.host.afterProgramEmitAndDiagnostics&&e.host.afterProgramEmitAndDiagnostics(t),t.releaseProgram()):e.host.afterEmitBundle&&e.host.afterEmitBundle(r),e.projectCompilerOptions=e.baseCompilerOptions}function Xq(e,t,r,i,o,s,l){let f=r&&!Ss(r.getCompilerOptions());return V2(e,t,o),e.projectStatus.set(t,{type:0,reason:`${l} errors`}),f?{buildResult:s,step:5}:(qq(e,r,i),{buildResult:s,step:7})}function e7(e){return!!e.watcher}function Bme(e,t){let r=fd(e,t),i=e.filesWatched.get(r);if(e.watch&&i){if(!e7(i))return i;if(i.modifiedTime)return i.modifiedTime}let o=$1(e.host,t);return e.watch&&(i?i.modifiedTime=o:e.filesWatched.set(r,o)),o}function t7(e,t,r,i,o,s,l){let f=fd(e,t),d=e.filesWatched.get(f);if(d&&e7(d))d.callbacks.push(r);else{let g=e.watchFile(t,(m,v,S)=>{let x=L.checkDefined(e.filesWatched.get(f));L.assert(e7(x)),x.modifiedTime=S,x.callbacks.forEach(A=>A(m,v,S))},i,o,s,l);e.filesWatched.set(f,{callbacks:[r],watcher:g,modifiedTime:d})}return{close:()=>{let g=L.checkDefined(e.filesWatched.get(f));L.assert(e7(g)),g.callbacks.length===1?(e.filesWatched.delete(f),_m(g)):YD(g.callbacks,r)}}}function Yq(e,t){if(!e.watch)return;let r=e.outputTimeStamps.get(t);return r||e.outputTimeStamps.set(t,r=new Map),r}function $q(e,t,r,i,o){let s=Jg(i),l=Qq(e,s,r),f=SN(e.host);l?(l.buildInfo=t,l.modifiedTime=f,o&2||(l.latestChangedDtsTime=f)):e.buildInfoCache.set(r,{path:fd(e,s),buildInfo:t,modifiedTime:f,latestChangedDtsTime:o&2?void 0:f})}function Qq(e,t,r){let i=fd(e,t),o=e.buildInfoCache.get(r);return o?.path===i?o:void 0}function Ume(e,t,r,i){let o=fd(e,t),s=e.buildInfoCache.get(r);if(s!==void 0&&s.path===o)return s.buildInfo||void 0;let l=e.readFileWithCache(t),f=l?IF(t,l):void 0;return e.buildInfoCache.set(r,{path:o,buildInfo:f||!1,modifiedTime:i||Eh}),f}function Zq(e,t,r,i){let o=Bme(e,t);if(r<o)return{type:6,outOfDateOutputFileName:i,newerInputFileName:t}}function q8e(e,t,r){var i,o;if(!t.fileNames.length&&!FO(t.raw))return{type:16};let s,l=!!e.options.force;if(t.projectReferences){e.projectStatus.set(r,{type:13});for(let $ of t.projectReferences){let fe=$L($),Z=z_(e,fe),U=$T(e,fe,Z),re=eX(e,U,Z);if(!(re.type===13||re.type===16)){if(re.type===0||re.type===12)return{type:12,upstreamProjectName:$.path,upstreamProjectBlocked:re.type===12};if(re.type!==1)return{type:11,upstreamProjectName:$.path};l||(s||(s=[])).push({ref:$,refStatus:re,resolvedRefPath:Z,resolvedConfig:U})}}}if(l)return{type:17};let{host:f}=e,d=Jg(t.options),g,m=ehe,v,S,x;if(d){let $=Qq(e,d,r);if(v=$?.modifiedTime||$1(f,d),v===Eh)return $||e.buildInfoCache.set(r,{path:fd(e,d),buildInfo:!1,modifiedTime:v}),{type:4,missingOutputFileName:d};let fe=Ume(e,d,r,v);if(!fe)return{type:5,fileName:d};if((fe.bundle||fe.program)&&fe.version!==Rf)return{type:14,version:fe.version};if(fe.program){if((i=fe.program.changeFileSet)!=null&&i.length||(t.options.noEmit?vt(fe.program.semanticDiagnosticsPerFile,ba):(o=fe.program.affectedFilesPendingEmit)!=null&&o.length))return{type:8,buildInfoFile:d};if(!t.options.noEmit&&G2(t.options,fe.program.options||{}))return{type:9,buildInfoFile:d};S=fe.program}m=v,g=d}let A,w=Zme,C=!1,P=new Set;for(let $ of t.fileNames){let fe=Bme(e,$);if(fe===Eh)return{type:0,reason:`${$} does not exist`};if(v&&v<fe){let Z,U;if(S){x||(x=Aq(S,d,f)),Z=x.fileInfos.get(fd(e,$));let re=Z?e.readFileWithCache($):void 0;U=re!==void 0?XF(f,re):void 0,Z&&Z===U&&(C=!0)}if(!Z||Z!==U)return{type:6,outOfDateOutputFileName:d,newerInputFileName:$}}fe>w&&(A=$,w=fe),S&&P.add(fd(e,$))}if(S){x||(x=Aq(S,d,f));for(let $ of x.roots)if(!P.has($))return{type:10,buildInfoFile:d,inputFile:$}}if(!d){let $=AF(t,!f.useCaseSensitiveFileNames()),fe=Yq(e,r);for(let Z of $){let U=fd(e,Z),re=fe?.get(U);if(re||(re=$1(e.host,Z),fe?.set(U,re)),re===Eh)return{type:4,missingOutputFileName:Z};if(re<w)return{type:6,outOfDateOutputFileName:Z,newerInputFileName:A};re<m&&(m=re,g=Z)}}let F=e.buildInfoCache.get(r),B=!1,q=!1,W;if(s)for(let{ref:$,refStatus:fe,resolvedConfig:Z,resolvedRefPath:U}of s){if(q=q||!!$.prepend,fe.newestInputFileTime&&fe.newestInputFileTime<=m)continue;if(F&&X8e(e,F,U))return{type:7,outOfDateOutputFileName:d,newerProjectName:$.path};let re=Y8e(e,Z.options,U);if(re&&re<=m){B=!0,W=$.path;continue}return L.assert(g!==void 0,\"Should have an oldest output filename here\"),{type:7,outOfDateOutputFileName:g,newerProjectName:$.path}}let Y=Zq(e,t.options.configFilePath,m,g);if(Y)return Y;let R=mn(t.options.configFile.extendedSourceFiles||Je,$=>Zq(e,$,m,g));if(R)return R;let ie=mn(e.lastCachedPackageJsonLookups.get(r)||Je,([$])=>Zq(e,$,m,g));return ie||(q&&B?{type:3,outOfDateOutputFileName:g,newerProjectName:W}:{type:B?2:C?15:1,newestInputFileTime:w,newestInputFileName:A,oldestOutputFileName:g})}function X8e(e,t,r){return e.buildInfoCache.get(r).path===t.path}function eX(e,t,r){if(t===void 0)return{type:0,reason:\"File deleted mid-build\"};let i=e.projectStatus.get(r);if(i!==void 0)return i;Fs(\"SolutionBuilder::beforeUpToDateCheck\");let o=q8e(e,t,r);return Fs(\"SolutionBuilder::afterUpToDateCheck\"),hf(\"SolutionBuilder::Up-to-date check\",\"SolutionBuilder::beforeUpToDateCheck\",\"SolutionBuilder::afterUpToDateCheck\"),e.projectStatus.set(r,o),o}function Vme(e,t,r,i,o){if(t.options.noEmit)return;let s,l=Jg(t.options);if(l){o?.has(fd(e,l))||(e.options.verbose&&hu(e,i,t.options.configFilePath),e.host.setModifiedTime(l,s=SN(e.host)),Qq(e,l,r).modifiedTime=s),e.outputTimeStamps.delete(r);return}let{host:f}=e,d=AF(t,!f.useCaseSensitiveFileNames()),g=Yq(e,r),m=g?new Set:void 0;if(!o||d.length!==o.size){let v=!!e.options.verbose;for(let S of d){let x=fd(e,S);o?.has(x)||(v&&(v=!1,hu(e,i,t.options.configFilePath)),f.setModifiedTime(S,s||(s=SN(e.host))),g&&(g.set(x,s),m.add(x)))}}g?.forEach((v,S)=>{!o?.has(S)&&!m.has(S)&&g.delete(S)})}function Y8e(e,t,r){if(!t.composite)return;let i=L.checkDefined(e.buildInfoCache.get(r));if(i.latestChangedDtsTime!==void 0)return i.latestChangedDtsTime||void 0;let o=i.buildInfo&&i.buildInfo.program&&i.buildInfo.program.latestChangedDtsFile?e.host.getModifiedTime(_a(i.buildInfo.program.latestChangedDtsFile,ni(i.path))):void 0;return i.latestChangedDtsTime=o||!1,o}function jme(e,t,r){if(e.options.dry)return hu(e,_.A_non_dry_build_would_update_timestamps_for_output_of_project_0,t.options.configFilePath);Vme(e,t,r,_.Updating_output_timestamps_of_project_0),e.projectStatus.set(r,{type:1,oldestOutputFileName:JK(t,!e.host.useCaseSensitiveFileNames())})}function $8e(e,t,r,i,o,s,l){if(!(l&124)&&o.options.composite)for(let f=i+1;f<s.length;f++){let d=s[f],g=z_(e,d);if(e.projectPendingBuild.has(g))continue;let m=$T(e,d,g);if(!(!m||!m.projectReferences))for(let v of m.projectReferences){let S=U2(e,v.path);if(z_(e,S)!==r)continue;let x=e.projectStatus.get(g);if(x)switch(x.type){case 1:if(l&2){v.prepend?e.projectStatus.set(g,{type:3,outOfDateOutputFileName:x.oldestOutputFileName,newerProjectName:t}):x.type=2;break}case 15:case 2:case 3:l&2||e.projectStatus.set(g,{type:7,outOfDateOutputFileName:x.type===3?x.outOfDateOutputFileName:x.oldestOutputFileName,newerProjectName:t});break;case 12:z_(e,U2(e,x.upstreamProjectName))===r&&wme(e,g);break}Rme(e,g,0);break}}}function Hme(e,t,r,i,o,s){Fs(\"SolutionBuilder::beforeBuild\");let l=Q8e(e,t,r,i,o,s);return Fs(\"SolutionBuilder::afterBuild\"),hf(\"SolutionBuilder::Build\",\"SolutionBuilder::beforeBuild\",\"SolutionBuilder::afterBuild\"),l}function Q8e(e,t,r,i,o,s){let l=kme(e,t,s);if(!l)return 3;Ome(e,r);let f=!0,d=0;for(;;){let g=Kq(e,l,f);if(!g)break;f=!1,g.done(r,i,o?.(g.project)),e.diagnostics.has(g.projectPath)||d++}return Jq(e),$me(e,l),n6e(e,l),YS(l)?4:l.some(g=>e.diagnostics.has(z_(e,g)))?d?2:1:0}function Wme(e,t,r){Fs(\"SolutionBuilder::beforeClean\");let i=Z8e(e,t,r);return Fs(\"SolutionBuilder::afterClean\"),hf(\"SolutionBuilder::Clean\",\"SolutionBuilder::beforeClean\",\"SolutionBuilder::afterClean\"),i}function Z8e(e,t,r){let i=kme(e,t,r);if(!i)return 3;if(YS(i))return CN(e,i.circularDiagnostics),4;let{options:o,host:s}=e,l=o.dry?[]:void 0;for(let f of i){let d=z_(e,f),g=$T(e,f,d);if(g===void 0){Yme(e,d);continue}let m=AF(g,!s.useCaseSensitiveFileNames());if(!m.length)continue;let v=new Set(g.fileNames.map(S=>fd(e,S)));for(let S of m)v.has(fd(e,S))||s.fileExists(S)&&(l?l.push(S):(s.deleteFile(S),tX(e,d,0)))}return l&&hu(e,_.A_non_dry_build_would_delete_the_following_files_Colon_0,l.map(f=>`\\r\n * ${f}`).join(\"\")),0}function tX(e,t,r){e.host.getParsedCommandLine&&r===1&&(r=2),r===2&&(e.configFileCache.delete(t),e.buildOrder=void 0),e.needsSummary=!0,wme(e,t),Rme(e,t,r),Dme(e)}function AN(e,t,r){e.reportFileChangeDetected=!0,tX(e,t,r),zme(e,250,!0)}function zme(e,t,r){let{hostWithWatch:i}=e;!i.setTimeout||!i.clearTimeout||(e.timerToBuildInvalidatedProject&&i.clearTimeout(e.timerToBuildInvalidatedProject),e.timerToBuildInvalidatedProject=i.setTimeout(e6e,t,e,r))}function e6e(e,t){Fs(\"SolutionBuilder::beforeBuild\");let r=t6e(e,t);Fs(\"SolutionBuilder::afterBuild\"),hf(\"SolutionBuilder::Build\",\"SolutionBuilder::beforeBuild\",\"SolutionBuilder::afterBuild\"),r&&$me(e,r)}function t6e(e,t){e.timerToBuildInvalidatedProject=void 0,e.reportFileChangeDetected&&(e.reportFileChangeDetected=!1,e.projectErrorsReported.clear(),iX(e,_.File_change_detected_Starting_incremental_compilation));let r=0,i=xN(e),o=Kq(e,i,!1);if(o)for(o.done(),r++;e.projectPendingBuild.size;){if(e.timerToBuildInvalidatedProject)return;let s=Mme(e,i,!1);if(!s)break;if(s.kind!==2&&(t||r===5)){zme(e,100,!1);return}Fme(e,s,i).done(),s.kind!==2&&r++}return Jq(e),i}function Jme(e,t,r,i){!e.watch||e.allWatchedConfigFiles.has(r)||e.allWatchedConfigFiles.set(r,t7(e,t,()=>AN(e,r,2),2e3,i?.watchOptions,Hf.ConfigFile,t))}function Kme(e,t,r){YK(t,r?.options,e.allWatchedExtendedConfigFiles,(i,o)=>t7(e,i,()=>{var s;return(s=e.allWatchedExtendedConfigFiles.get(o))==null?void 0:s.projects.forEach(l=>AN(e,l,2))},2e3,r?.watchOptions,Hf.ExtendedConfigFile),i=>fd(e,i))}function qme(e,t,r,i){e.watch&&kF(zq(e.allWatchedWildcardDirectories,r),new Map(Object.entries(i.wildcardDirectories)),(o,s)=>e.watchDirectory(o,l=>{var f;DF({watchedDirPath:fd(e,o),fileOrDirectory:l,fileOrDirectoryPath:fd(e,l),configFileName:t,currentDirectory:e.compilerHost.getCurrentDirectory(),options:i.options,program:e.builderPrograms.get(r)||((f=H8e(e,r))==null?void 0:f.fileNames),useCaseSensitiveFileNames:e.parseConfigFileHost.useCaseSensitiveFileNames,writeLog:d=>e.writeLog(d),toPath:d=>fd(e,d)})||AN(e,r,1)},s,i?.watchOptions,Hf.WildcardDirectory,t))}function nX(e,t,r,i){e.watch&&e2(zq(e.allWatchedInputFiles,r),p0(i.fileNames,o=>fd(e,o)),{createNewValue:(o,s)=>t7(e,s,()=>AN(e,r,0),250,i?.watchOptions,Hf.SourceFile,t),onDeleteValue:am})}function rX(e,t,r,i){!e.watch||!e.lastCachedPackageJsonLookups||e2(zq(e.allWatchedPackageJsonFiles,r),new Map(e.lastCachedPackageJsonLookups.get(r)),{createNewValue:(o,s)=>t7(e,o,()=>AN(e,r,0),2e3,i?.watchOptions,Hf.PackageJson,t),onDeleteValue:am})}function n6e(e,t){if(e.watchAllProjectsPending){Fs(\"SolutionBuilder::beforeWatcherCreation\"),e.watchAllProjectsPending=!1;for(let r of ZF(t)){let i=z_(e,r),o=$T(e,r,i);Jme(e,r,i,o),Kme(e,i,o),o&&(qme(e,r,i,o),nX(e,r,i,o),rX(e,r,i,o))}Fs(\"SolutionBuilder::afterWatcherCreation\"),hf(\"SolutionBuilder::Watcher creation\",\"SolutionBuilder::beforeWatcherCreation\",\"SolutionBuilder::afterWatcherCreation\")}}function r6e(e){Tf(e.allWatchedConfigFiles,am),Tf(e.allWatchedExtendedConfigFiles,_m),Tf(e.allWatchedWildcardDirectories,t=>Tf(t,_m)),Tf(e.allWatchedInputFiles,t=>Tf(t,am)),Tf(e.allWatchedPackageJsonFiles,t=>Tf(t,am))}function Xme(e,t,r,i,o){let s=j8e(e,t,r,i,o);return{build:(l,f,d,g)=>Hme(s,l,f,d,g),clean:l=>Wme(s,l),buildReferences:(l,f,d,g)=>Hme(s,l,f,d,g,!0),cleanReferences:l=>Wme(s,l,!0),getNextInvalidatedProject:l=>(Ome(s,l),Kq(s,xN(s),!1)),getBuildOrder:()=>xN(s),getUpToDateStatusOfProject:l=>{let f=U2(s,l),d=z_(s,f);return eX(s,$T(s,f,d),d)},invalidateProject:(l,f)=>tX(s,l,f||0),close:()=>r6e(s)}}function cl(e,t){return rI(t,e.compilerHost.getCurrentDirectory(),e.compilerHost.getCanonicalFileName)}function hu(e,t,...r){e.host.reportSolutionBuilderStatus(ps(t,...r))}function iX(e,t,...r){var i,o;(o=(i=e.hostWithWatch).onWatchStatusChange)==null||o.call(i,ps(t,...r),e.host.getNewLine(),e.baseCompilerOptions)}function CN({host:e},t){t.forEach(r=>e.reportDiagnostic(r))}function V2(e,t,r){CN(e,r),e.projectErrorsReported.set(t,!0),r.length&&e.diagnostics.set(t,r)}function Yme(e,t){V2(e,t,[e.configFileCache.get(t)])}function $me(e,t){if(!e.needsSummary)return;e.needsSummary=!1;let r=e.watch||!!e.host.reportErrorSummary,{diagnostics:i}=e,o=0,s=[];YS(t)?(Qme(e,t.buildOrder),CN(e,t.circularDiagnostics),r&&(o+=JF(t.circularDiagnostics)),r&&(s=[...s,...KF(t.circularDiagnostics)])):(t.forEach(l=>{let f=z_(e,l);e.projectErrorsReported.has(f)||CN(e,i.get(f)||Je)}),r&&i.forEach(l=>o+=JF(l)),r&&i.forEach(l=>[...s,...KF(l)])),e.watch?iX(e,wq(o),o):e.host.reportErrorSummary&&e.host.reportErrorSummary(o,s)}function Qme(e,t){e.options.verbose&&hu(e,_.Projects_in_this_build_Colon_0,t.map(r=>`\\r\n    * `+cl(e,r)).join(\"\"))}function i6e(e,t,r){switch(r.type){case 6:return hu(e,_.Project_0_is_out_of_date_because_output_1_is_older_than_input_2,cl(e,t),cl(e,r.outOfDateOutputFileName),cl(e,r.newerInputFileName));case 7:return hu(e,_.Project_0_is_out_of_date_because_output_1_is_older_than_input_2,cl(e,t),cl(e,r.outOfDateOutputFileName),cl(e,r.newerProjectName));case 4:return hu(e,_.Project_0_is_out_of_date_because_output_file_1_does_not_exist,cl(e,t),cl(e,r.missingOutputFileName));case 5:return hu(e,_.Project_0_is_out_of_date_because_there_was_error_reading_file_1,cl(e,t),cl(e,r.fileName));case 8:return hu(e,_.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted,cl(e,t),cl(e,r.buildInfoFile));case 9:return hu(e,_.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions,cl(e,t),cl(e,r.buildInfoFile));case 10:return hu(e,_.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_but_not_any_more,cl(e,t),cl(e,r.buildInfoFile),cl(e,r.inputFile));case 1:if(r.newestInputFileTime!==void 0)return hu(e,_.Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2,cl(e,t),cl(e,r.newestInputFileName||\"\"),cl(e,r.oldestOutputFileName||\"\"));break;case 3:return hu(e,_.Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed,cl(e,t),cl(e,r.newerProjectName));case 2:return hu(e,_.Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies,cl(e,t));case 15:return hu(e,_.Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files,cl(e,t));case 11:return hu(e,_.Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date,cl(e,t),cl(e,r.upstreamProjectName));case 12:return hu(e,r.upstreamProjectBlocked?_.Project_0_can_t_be_built_because_its_dependency_1_was_not_built:_.Project_0_can_t_be_built_because_its_dependency_1_has_errors,cl(e,t),cl(e,r.upstreamProjectName));case 0:return hu(e,_.Failed_to_parse_file_0_Colon_1,cl(e,t),r.reason);case 14:return hu(e,_.Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2,cl(e,t),r.version,Rf);case 17:return hu(e,_.Project_0_is_being_forcibly_rebuilt,cl(e,t));case 16:case 13:break;default:}}function n7(e,t,r){e.options.verbose&&i6e(e,t,r)}var Zme,ehe,aX,a6e=gt({\"src/compiler/tsbuildPublic.ts\"(){\"use strict\";fa(),fa(),E0(),Zme=new Date(-864e13),ehe=new Date(864e13),aX=(e=>(e[e.Build=0]=\"Build\",e[e.UpdateBundle=1]=\"UpdateBundle\",e[e.UpdateOutputFileStamps=2]=\"UpdateOutputFileStamps\",e))(aX||{})}}),fa=gt({\"src/compiler/_namespaces/ts.ts\"(){\"use strict\";gke(),Gke(),Bke(),Xke(),Qke(),Zke(),uDe(),noe(),EDe(),kDe(),DDe(),PDe(),nwe(),ERe(),TRe(),SRe(),xRe(),MRe(),URe(),VRe(),aOe(),GOe(),BOe(),YOe(),SNe(),ZNe(),aPe(),oPe(),gPe(),SPe(),RPe(),BPe(),QPe(),ZPe(),eMe(),oMe(),sMe(),cMe(),lMe(),uMe(),dMe(),fMe(),_Me(),pMe(),mMe(),hMe(),gMe(),yMe(),vMe(),EMe(),TMe(),SMe(),xMe(),AMe(),CMe(),RMe(),GMe(),XMe(),QMe(),i8e(),a8e(),o8e(),E8e(),x8e(),C8e(),w8e(),N8e(),P8e(),a6e(),dK(),E0()}});function the(e,t){return new r_(zD(t,`ts${Sg}`)||zD(t,\"latest\")).compareTo(e.version)<=0}function nhe(e){return uX.has(e)?\"node\":e}function o6e(e,t){let r=OO(t,i=>e.readFile(i));return new Map(Object.entries(r.config))}function s6e(e,t){var r;let i=OO(t,o=>e.readFile(o));if((r=i.config)!=null&&r.simpleMap)return new Map(Object.entries(i.config.simpleMap))}function c6e(e,t,r,i,o,s,l,f,d,g){if(!l||!l.enable)return{cachedTypingPaths:[],newTypingNames:[],filesToWatch:[]};let m=new Map;r=Zi(r,q=>{let W=So(q);if(ES(W))return W});let v=[];l.include&&P(l.include,\"Explicitly included types\");let S=l.exclude||[];if(!g.types){let q=new Set(r.map(ni));q.add(i),q.forEach(W=>{F(W,\"bower.json\",\"bower_components\",v),F(W,\"package.json\",\"node_modules\",v)})}if(l.disableFilenameBasedTypeAcquisition||B(r),f){let q=fA(f.map(nhe),z1,su);P(q,\"Inferred typings from unresolved imports\")}s.forEach((q,W)=>{let Y=d.get(W);m.has(W)&&m.get(W)===void 0&&Y!==void 0&&the(q,Y)&&m.set(W,q.typingLocation)});for(let q of S)m.delete(q)&&t&&t(`Typing for ${q} is in exclude list, will be ignored.`);let x=[],A=[];m.forEach((q,W)=>{q!==void 0?A.push(q):x.push(W)});let w={cachedTypingPaths:A,newTypingNames:x,filesToWatch:v};return t&&t(`Result: ${JSON.stringify(w)}`),w;function C(q){m.has(q)||m.set(q,void 0)}function P(q,W){t&&t(`${W}: ${JSON.stringify(q)}`),mn(q,C)}function F(q,W,Y,R){let ie=vi(q,W),$,fe;e.fileExists(ie)&&(R.push(ie),$=OO(ie,le=>e.readFile(le)).config,fe=Uo([$.dependencies,$.devDependencies,$.optionalDependencies,$.peerDependencies],bh),P(fe,`Typing names in '${ie}' dependencies`));let Z=vi(q,Y);if(R.push(Z),!e.directoryExists(Z))return;let U=[],re=fe?fe.map(le=>vi(Z,le,W)):e.readDirectory(Z,[\".json\"],void 0,void 0,3).filter(le=>{if(Hl(le)!==W)return!1;let _e=Ou(So(le)),ge=_e[_e.length-3][0]===\"@\";return ge&&n_(_e[_e.length-4])===Y||!ge&&n_(_e[_e.length-3])===Y});t&&t(`Searching for typing names in ${Z}; all files: ${JSON.stringify(re)}`);for(let le of re){let _e=So(le),X=OO(_e,we=>e.readFile(we)).config;if(!X.name)continue;let Ve=X.types||X.typings;if(Ve){let we=_a(Ve,ni(_e));e.fileExists(we)?(t&&t(`    Package '${X.name}' provides its own types.`),m.set(X.name,we)):t&&t(`    Package '${X.name}' provides its own types but they are missing.`)}else U.push(X.name)}P(U,\"    Found package names\")}function B(q){let W=Zi(q,R=>{if(!ES(R))return;let ie=ld(n_(Hl(R))),$=Lae(ie);return o.get($)});W.length&&P(W,\"Inferred typings from file names\"),vt(q,R=>Gc(R,\".jsx\"))&&(t&&t(\"Inferred 'react' typings due to presence of '.jsx' extension\"),C(\"react\"))}}function l6e(e){return oX(e,!0)}function oX(e,t){if(!e)return 1;if(e.length>fX)return 2;if(e.charCodeAt(0)===46)return 3;if(e.charCodeAt(0)===95)return 4;if(t){let r=/^@([^/]+)\\/([^/]+)$/.exec(e);if(r){let i=oX(r[1],!1);if(i!==0)return{name:r[1],isScopeName:!0,result:i};let o=oX(r[2],!1);return o!==0?{name:r[2],isScopeName:!1,result:o}:0}}return encodeURIComponent(e)!==e?5:0}function u6e(e,t){return typeof e==\"object\"?rhe(t,e.result,e.name,e.isScopeName):rhe(t,e,t,!1)}function rhe(e,t,r,i){let o=i?\"Scope\":\"Package\";switch(t){case 1:return`'${e}':: ${o} name '${r}' cannot be empty`;case 2:return`'${e}':: ${o} name '${r}' should be less than ${fX} characters`;case 3:return`'${e}':: ${o} name '${r}' cannot start with '.'`;case 4:return`'${e}':: ${o} name '${r}' cannot start with '_'`;case 5:return`'${e}':: ${o} name '${r}' contains non URI safe characters`;case 0:return L.fail();default:throw L.assertNever(t)}}var sX,cX,lX,uX,dX,fX,d6e=gt({\"src/jsTyping/jsTyping.ts\"(){\"use strict\";r7(),sX=[\"assert\",\"assert/strict\",\"async_hooks\",\"buffer\",\"child_process\",\"cluster\",\"console\",\"constants\",\"crypto\",\"dgram\",\"diagnostics_channel\",\"dns\",\"dns/promises\",\"domain\",\"events\",\"fs\",\"fs/promises\",\"http\",\"https\",\"http2\",\"inspector\",\"module\",\"net\",\"os\",\"path\",\"perf_hooks\",\"process\",\"punycode\",\"querystring\",\"readline\",\"repl\",\"stream\",\"stream/promises\",\"string_decoder\",\"timers\",\"timers/promises\",\"tls\",\"trace_events\",\"tty\",\"url\",\"util\",\"util/types\",\"v8\",\"vm\",\"wasi\",\"worker_threads\",\"zlib\"],cX=sX.map(e=>`node:${e}`),lX=[...sX,...cX],uX=new Set(lX),dX=(e=>(e[e.Ok=0]=\"Ok\",e[e.EmptyName=1]=\"EmptyName\",e[e.NameTooLong=2]=\"NameTooLong\",e[e.NameStartsWithDot=3]=\"NameStartsWithDot\",e[e.NameStartsWithUnderscore=4]=\"NameStartsWithUnderscore\",e[e.NameContainsNonURISafeCharacters=5]=\"NameContainsNonURISafeCharacters\",e))(dX||{}),fX=214}}),QT={};Mo(QT,{NameValidationResult:()=>dX,discoverTypings:()=>c6e,isTypingUpToDate:()=>the,loadSafeList:()=>o6e,loadTypesMap:()=>s6e,nodeCoreModuleList:()=>lX,nodeCoreModules:()=>uX,nonRelativeModuleNameForTypingCache:()=>nhe,prefixedNodeCoreModuleList:()=>cX,renderPackageNameValidationFailure:()=>u6e,validatePackageName:()=>l6e});var f6e=gt({\"src/jsTyping/_namespaces/ts.JsTyping.ts\"(){\"use strict\";d6e()}});function _6e(e){return xl.args.indexOf(e)>=0}function p6e(e){let t=xl.args.indexOf(e);return t>=0&&t<xl.args.length-1?xl.args[t+1]:void 0}function m6e(){let e=new Date;return`${J1(e.getHours().toString(),2,\"0\")}:${J1(e.getMinutes().toString(),2,\"0\")}:${J1(e.getSeconds().toString(),2,\"0\")}.${J1(e.getMilliseconds().toString(),3,\"0\")}`}var ihe,ahe,ohe,she,che,lhe,uhe,_X,h6e=gt({\"src/jsTyping/shared.ts\"(){\"use strict\";r7(),ihe=\"action::set\",ahe=\"action::invalidate\",ohe=\"action::packageInstalled\",she=\"event::typesRegistry\",che=\"event::beginInstallTypes\",lhe=\"event::endInstallTypes\",uhe=\"event::initializationFailed\",(e=>{e.GlobalCacheLocation=\"--globalTypingsCacheLocation\",e.LogFile=\"--logFile\",e.EnableTelemetry=\"--enableTelemetry\",e.TypingSafeListLocation=\"--typingSafeListLocation\",e.TypesMapLocation=\"--typesMapLocation\",e.NpmLocation=\"--npmLocation\",e.ValidateDefaultNpmLocation=\"--validateDefaultNpmLocation\"})(_X||(_X={}))}}),g6e=gt({\"src/jsTyping/types.ts\"(){\"use strict\"}}),dhe={};Mo(dhe,{ActionInvalidate:()=>ahe,ActionPackageInstalled:()=>ohe,ActionSet:()=>ihe,Arguments:()=>_X,EventBeginInstallTypes:()=>che,EventEndInstallTypes:()=>lhe,EventInitializationFailed:()=>uhe,EventTypesRegistry:()=>she,findArgument:()=>p6e,hasArgument:()=>_6e,nowString:()=>m6e});var y6e=gt({\"src/jsTyping/_namespaces/ts.server.ts\"(){\"use strict\";h6e(),g6e()}}),r7=gt({\"src/jsTyping/_namespaces/ts.ts\"(){\"use strict\";fa(),f6e(),y6e()}});function fhe(e){return{indentSize:4,tabSize:4,newLineCharacter:e||`\n`,convertTabsToSpaces:!0,indentStyle:2,insertSpaceAfterConstructor:!1,insertSpaceAfterCommaDelimiter:!0,insertSpaceAfterSemicolonInForStatements:!0,insertSpaceBeforeAndAfterBinaryOperators:!0,insertSpaceAfterKeywordsInControlFlowStatements:!0,insertSpaceAfterFunctionKeywordForAnonymousFunctions:!1,insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis:!1,insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets:!1,insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces:!0,insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces:!1,insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces:!1,insertSpaceBeforeFunctionParenthesis:!1,placeOpenBraceOnNewLineForFunctions:!1,placeOpenBraceOnNewLineForControlBlocks:!1,semicolons:\"ignore\",trimTrailingWhitespace:!0}}var pX,mX,hX,gX,Cp,yX,vX,bX,EX,TX,SX,xX,_he,IN,AX,CX,IX,LX,kX,DX,wX,RX,OX,v6e=gt({\"src/services/types.ts\"(){\"use strict\";(e=>{class t{constructor(o){this.text=o}getText(o,s){return o===0&&s===this.text.length?this.text:this.text.substring(o,s)}getLength(){return this.text.length}getChangeRange(){}}function r(i){return new t(i)}e.fromString=r})(pX||(pX={})),mX=(e=>(e[e.Dependencies=1]=\"Dependencies\",e[e.DevDependencies=2]=\"DevDependencies\",e[e.PeerDependencies=4]=\"PeerDependencies\",e[e.OptionalDependencies=8]=\"OptionalDependencies\",e[e.All=15]=\"All\",e))(mX||{}),hX=(e=>(e[e.Off=0]=\"Off\",e[e.On=1]=\"On\",e[e.Auto=2]=\"Auto\",e))(hX||{}),gX=(e=>(e[e.Semantic=0]=\"Semantic\",e[e.PartialSemantic=1]=\"PartialSemantic\",e[e.Syntactic=2]=\"Syntactic\",e))(gX||{}),Cp={},yX=(e=>(e.Original=\"original\",e.TwentyTwenty=\"2020\",e))(yX||{}),vX=(e=>(e.All=\"All\",e.SortAndCombine=\"SortAndCombine\",e.RemoveUnused=\"RemoveUnused\",e))(vX||{}),bX=(e=>(e[e.Invoked=1]=\"Invoked\",e[e.TriggerCharacter=2]=\"TriggerCharacter\",e[e.TriggerForIncompleteCompletions=3]=\"TriggerForIncompleteCompletions\",e))(bX||{}),EX=(e=>(e.Type=\"Type\",e.Parameter=\"Parameter\",e.Enum=\"Enum\",e))(EX||{}),TX=(e=>(e.none=\"none\",e.definition=\"definition\",e.reference=\"reference\",e.writtenReference=\"writtenReference\",e))(TX||{}),SX=(e=>(e[e.None=0]=\"None\",e[e.Block=1]=\"Block\",e[e.Smart=2]=\"Smart\",e))(SX||{}),xX=(e=>(e.Ignore=\"ignore\",e.Insert=\"insert\",e.Remove=\"remove\",e))(xX||{}),_he=fhe(`\n`),IN=(e=>(e[e.aliasName=0]=\"aliasName\",e[e.className=1]=\"className\",e[e.enumName=2]=\"enumName\",e[e.fieldName=3]=\"fieldName\",e[e.interfaceName=4]=\"interfaceName\",e[e.keyword=5]=\"keyword\",e[e.lineBreak=6]=\"lineBreak\",e[e.numericLiteral=7]=\"numericLiteral\",e[e.stringLiteral=8]=\"stringLiteral\",e[e.localName=9]=\"localName\",e[e.methodName=10]=\"methodName\",e[e.moduleName=11]=\"moduleName\",e[e.operator=12]=\"operator\",e[e.parameterName=13]=\"parameterName\",e[e.propertyName=14]=\"propertyName\",e[e.punctuation=15]=\"punctuation\",e[e.space=16]=\"space\",e[e.text=17]=\"text\",e[e.typeParameterName=18]=\"typeParameterName\",e[e.enumMemberName=19]=\"enumMemberName\",e[e.functionName=20]=\"functionName\",e[e.regularExpressionLiteral=21]=\"regularExpressionLiteral\",e[e.link=22]=\"link\",e[e.linkName=23]=\"linkName\",e[e.linkText=24]=\"linkText\",e))(IN||{}),AX=(e=>(e[e.None=0]=\"None\",e[e.MayIncludeAutoImports=1]=\"MayIncludeAutoImports\",e[e.IsImportStatementCompletion=2]=\"IsImportStatementCompletion\",e[e.IsContinuation=4]=\"IsContinuation\",e[e.ResolvedModuleSpecifiers=8]=\"ResolvedModuleSpecifiers\",e[e.ResolvedModuleSpecifiersBeyondLimit=16]=\"ResolvedModuleSpecifiersBeyondLimit\",e[e.MayIncludeMethodSnippets=32]=\"MayIncludeMethodSnippets\",e))(AX||{}),CX=(e=>(e.Comment=\"comment\",e.Region=\"region\",e.Code=\"code\",e.Imports=\"imports\",e))(CX||{}),IX=(e=>(e[e.JavaScript=0]=\"JavaScript\",e[e.SourceMap=1]=\"SourceMap\",e[e.Declaration=2]=\"Declaration\",e))(IX||{}),LX=(e=>(e[e.None=0]=\"None\",e[e.InMultiLineCommentTrivia=1]=\"InMultiLineCommentTrivia\",e[e.InSingleQuoteStringLiteral=2]=\"InSingleQuoteStringLiteral\",e[e.InDoubleQuoteStringLiteral=3]=\"InDoubleQuoteStringLiteral\",e[e.InTemplateHeadOrNoSubstitutionTemplate=4]=\"InTemplateHeadOrNoSubstitutionTemplate\",e[e.InTemplateMiddleOrTail=5]=\"InTemplateMiddleOrTail\",e[e.InTemplateSubstitutionPosition=6]=\"InTemplateSubstitutionPosition\",e))(LX||{}),kX=(e=>(e[e.Punctuation=0]=\"Punctuation\",e[e.Keyword=1]=\"Keyword\",e[e.Operator=2]=\"Operator\",e[e.Comment=3]=\"Comment\",e[e.Whitespace=4]=\"Whitespace\",e[e.Identifier=5]=\"Identifier\",e[e.NumberLiteral=6]=\"NumberLiteral\",e[e.BigIntLiteral=7]=\"BigIntLiteral\",e[e.StringLiteral=8]=\"StringLiteral\",e[e.RegExpLiteral=9]=\"RegExpLiteral\",e))(kX||{}),DX=(e=>(e.unknown=\"\",e.warning=\"warning\",e.keyword=\"keyword\",e.scriptElement=\"script\",e.moduleElement=\"module\",e.classElement=\"class\",e.localClassElement=\"local class\",e.interfaceElement=\"interface\",e.typeElement=\"type\",e.enumElement=\"enum\",e.enumMemberElement=\"enum member\",e.variableElement=\"var\",e.localVariableElement=\"local var\",e.functionElement=\"function\",e.localFunctionElement=\"local function\",e.memberFunctionElement=\"method\",e.memberGetAccessorElement=\"getter\",e.memberSetAccessorElement=\"setter\",e.memberVariableElement=\"property\",e.memberAccessorVariableElement=\"accessor\",e.constructorImplementationElement=\"constructor\",e.callSignatureElement=\"call\",e.indexSignatureElement=\"index\",e.constructSignatureElement=\"construct\",e.parameterElement=\"parameter\",e.typeParameterElement=\"type parameter\",e.primitiveType=\"primitive type\",e.label=\"label\",e.alias=\"alias\",e.constElement=\"const\",e.letElement=\"let\",e.directory=\"directory\",e.externalModuleName=\"external module name\",e.jsxAttribute=\"JSX attribute\",e.string=\"string\",e.link=\"link\",e.linkName=\"link name\",e.linkText=\"link text\",e))(DX||{}),wX=(e=>(e.none=\"\",e.publicMemberModifier=\"public\",e.privateMemberModifier=\"private\",e.protectedMemberModifier=\"protected\",e.exportedModifier=\"export\",e.ambientModifier=\"declare\",e.staticModifier=\"static\",e.abstractModifier=\"abstract\",e.optionalModifier=\"optional\",e.deprecatedModifier=\"deprecated\",e.dtsModifier=\".d.ts\",e.tsModifier=\".ts\",e.tsxModifier=\".tsx\",e.jsModifier=\".js\",e.jsxModifier=\".jsx\",e.jsonModifier=\".json\",e.dmtsModifier=\".d.mts\",e.mtsModifier=\".mts\",e.mjsModifier=\".mjs\",e.dctsModifier=\".d.cts\",e.ctsModifier=\".cts\",e.cjsModifier=\".cjs\",e))(wX||{}),RX=(e=>(e.comment=\"comment\",e.identifier=\"identifier\",e.keyword=\"keyword\",e.numericLiteral=\"number\",e.bigintLiteral=\"bigint\",e.operator=\"operator\",e.stringLiteral=\"string\",e.whiteSpace=\"whitespace\",e.text=\"text\",e.punctuation=\"punctuation\",e.className=\"class name\",e.enumName=\"enum name\",e.interfaceName=\"interface name\",e.moduleName=\"module name\",e.typeParameterName=\"type parameter name\",e.typeAliasName=\"type alias name\",e.parameterName=\"parameter name\",e.docCommentTagName=\"doc comment tag name\",e.jsxOpenTagName=\"jsx open tag name\",e.jsxCloseTagName=\"jsx close tag name\",e.jsxSelfClosingTagName=\"jsx self closing tag name\",e.jsxAttribute=\"jsx attribute\",e.jsxText=\"jsx text\",e.jsxAttributeStringLiteralValue=\"jsx attribute string literal value\",e))(RX||{}),OX=(e=>(e[e.comment=1]=\"comment\",e[e.identifier=2]=\"identifier\",e[e.keyword=3]=\"keyword\",e[e.numericLiteral=4]=\"numericLiteral\",e[e.operator=5]=\"operator\",e[e.stringLiteral=6]=\"stringLiteral\",e[e.regularExpressionLiteral=7]=\"regularExpressionLiteral\",e[e.whiteSpace=8]=\"whiteSpace\",e[e.text=9]=\"text\",e[e.punctuation=10]=\"punctuation\",e[e.className=11]=\"className\",e[e.enumName=12]=\"enumName\",e[e.interfaceName=13]=\"interfaceName\",e[e.moduleName=14]=\"moduleName\",e[e.typeParameterName=15]=\"typeParameterName\",e[e.typeAliasName=16]=\"typeAliasName\",e[e.parameterName=17]=\"parameterName\",e[e.docCommentTagName=18]=\"docCommentTagName\",e[e.jsxOpenTagName=19]=\"jsxOpenTagName\",e[e.jsxCloseTagName=20]=\"jsxCloseTagName\",e[e.jsxSelfClosingTagName=21]=\"jsxSelfClosingTagName\",e[e.jsxAttribute=22]=\"jsxAttribute\",e[e.jsxText=23]=\"jsxText\",e[e.jsxAttributeStringLiteralValue=24]=\"jsxAttributeStringLiteralValue\",e[e.bigintLiteral=25]=\"bigintLiteral\",e))(OX||{})}});function LN(e){switch(e.kind){case 257:return Yn(e)&&Ij(e)?7:1;case 166:case 205:case 169:case 168:case 299:case 300:case 171:case 170:case 173:case 174:case 175:case 259:case 215:case 216:case 295:case 288:return 1;case 165:case 261:case 262:case 184:return 2;case 349:return e.name===void 0?3:2;case 302:case 260:return 3;case 264:return lu(e)||Gh(e)===1?5:4;case 263:case 272:case 273:case 268:case 269:case 274:case 275:return 7;case 308:return 5}return 7}function ZT(e){e=zX(e);let t=e.parent;return e.kind===308?1:pc(t)||Mu(t)||um(t)||$u(t)||lm(t)||Nl(t)&&e===t.name?7:i7(e)?b6e(e):Rh(e)?LN(t):Cd(e)&&jn(e,Kp(IL,iS,gb))?7:x6e(e)?2:E6e(e)?4:_c(t)?(L.assert(H_(t.parent)),2):mb(t)?3:1}function b6e(e){let t=e.kind===163?e:Yu(e.parent)&&e.parent.right===e?e.parent:void 0;return t&&t.parent.kind===268?7:4}function i7(e){for(;e.parent.kind===163;)e=e.parent;return GA(e.parent)&&e.parent.moduleReference===e}function E6e(e){return T6e(e)||S6e(e)}function T6e(e){let t=e,r=!0;if(t.parent.kind===163){for(;t.parent&&t.parent.kind===163;)t=t.parent;r=t.right===e}return t.parent.kind===180&&!r}function S6e(e){let t=e,r=!0;if(t.parent.kind===208){for(;t.parent&&t.parent.kind===208;)t=t.parent;r=t.name===e}if(!r&&t.parent.kind===230&&t.parent.parent.kind===294){let i=t.parent.parent.parent;return i.kind===260&&t.parent.parent.token===117||i.kind===261&&t.parent.parent.token===94}return!1}function x6e(e){switch(zI(e)&&(e=e.parent),e.kind){case 108:return!Dh(e);case 194:return!0}switch(e.parent.kind){case 180:return!0;case 202:return!e.parent.isTypeOf;case 230:return Gm(e.parent)}return!1}function NX(e,t=!1,r=!1){return ek(e,Pa,a7,t,r)}function ZL(e,t=!1,r=!1){return ek(e,z0,a7,t,r)}function PX(e,t=!1,r=!1){return ek(e,Ih,a7,t,r)}function phe(e,t=!1,r=!1){return ek(e,PT,A6e,t,r)}function mhe(e,t=!1,r=!1){return ek(e,du,a7,t,r)}function hhe(e,t=!1,r=!1){return ek(e,Au,C6e,t,r)}function a7(e){return e.expression}function A6e(e){return e.tag}function C6e(e){return e.tagName}function ek(e,t,r,i,o){let s=i?ghe(e):o7(e);return o&&(s=ql(s)),!!s&&!!s.parent&&t(s.parent)&&r(s.parent)===s}function o7(e){return j2(e)?e.parent:e}function ghe(e){return j2(e)||BX(e)?e.parent:e}function s7(e,t){for(;e;){if(e.kind===253&&e.label.escapedText===t)return e.label;e=e.parent}}function kN(e,t){return br(e.expression)?e.expression.name.text===t:!1}function DN(e){var t;return Re(e)&&((t=zr(e.parent,hI))==null?void 0:t.label)===e}function MX(e){var t;return Re(e)&&((t=zr(e.parent,J0))==null?void 0:t.label)===e}function FX(e){return MX(e)||DN(e)}function GX(e){var t;return((t=zr(e.parent,EI))==null?void 0:t.tagName)===e}function yhe(e){var t;return((t=zr(e.parent,Yu))==null?void 0:t.right)===e}function j2(e){var t;return((t=zr(e.parent,br))==null?void 0:t.name)===e}function BX(e){var t;return((t=zr(e.parent,Vs))==null?void 0:t.argumentExpression)===e}function UX(e){var t;return((t=zr(e.parent,Tc))==null?void 0:t.name)===e}function VX(e){var t;return Re(e)&&((t=zr(e.parent,Ia))==null?void 0:t.name)===e}function c7(e){switch(e.parent.kind){case 169:case 168:case 299:case 302:case 171:case 170:case 174:case 175:case 264:return sa(e.parent)===e;case 209:return e.parent.argumentExpression===e;case 164:return!0;case 198:return e.parent.parent.kind===196;default:return!1}}function vhe(e){return ab(e.parent.parent)&&wI(e.parent.parent)===e}function e1(e){for(Ff(e)&&(e=e.parent.parent);;){if(e=e.parent,!e)return;switch(e.kind){case 308:case 171:case 170:case 259:case 215:case 174:case 175:case 260:case 261:case 263:case 264:return e}}}function aE(e){switch(e.kind){case 308:return Lc(e)?\"module\":\"script\";case 264:return\"module\";case 260:case 228:return\"class\";case 261:return\"interface\";case 262:case 341:case 349:return\"type\";case 263:return\"enum\";case 257:return t(e);case 205:return t(nm(e));case 216:case 259:case 215:return\"function\";case 174:return\"getter\";case 175:return\"setter\";case 171:case 170:return\"method\";case 299:let{initializer:r}=e;return Ia(r)?\"method\":\"property\";case 169:case 168:case 300:case 301:return\"property\";case 178:return\"index\";case 177:return\"construct\";case 176:return\"call\";case 173:case 172:return\"constructor\";case 165:return\"type parameter\";case 302:return\"enum member\";case 166:return Mr(e,16476)?\"property\":\"parameter\";case 268:case 273:case 278:case 271:case 277:return\"alias\";case 223:let i=ic(e),{right:o}=e;switch(i){case 7:case 8:case 9:case 0:return\"\";case 1:case 2:let l=aE(o);return l===\"\"?\"const\":l;case 3:return ms(o)?\"method\":\"property\";case 4:return\"property\";case 5:return ms(o)?\"method\":\"property\";case 6:return\"local class\";default:return\"\"}case 79:return lm(e.parent)?\"alias\":\"\";case 274:let s=aE(e.expression);return s===\"\"?\"const\":s;default:return\"\"}function t(r){return kh(r)?\"const\":II(r)?\"let\":\"var\"}}function H2(e){switch(e.kind){case 108:return!0;case 79:return rW(e)&&e.parent.kind===166;default:return!1}}function Wf(e,t){let r=Sh(t),i=t.getLineAndCharacterOfPosition(e).line;return r[i]}function Od(e,t){return jX(e.pos,e.end,t)}function bhe(e,t){return RN(e,t.pos)&&RN(e,t.end)}function wN(e,t){return e.pos<=t&&t<=e.end}function RN(e,t){return e.pos<t&&t<e.end}function jX(e,t,r){return e<=r.pos&&t>=r.end}function ON(e,t,r){return e.pos<=t&&e.end>=r}function tk(e,t,r){return l7(e.pos,e.end,t,r)}function HX(e,t,r,i){return l7(e.getStart(t),e.end,r,i)}function l7(e,t,r,i){let o=Math.max(e,r),s=Math.min(t,i);return o<s}function WX(e,t,r){return L.assert(e.pos<=t),t<e.end||!v_(e,r)}function v_(e,t){if(e===void 0||rc(e))return!1;switch(e.kind){case 260:case 261:case 263:case 207:case 203:case 184:case 238:case 265:case 266:case 272:case 276:return u7(e,19,t);case 295:return v_(e.block,t);case 211:if(!e.arguments)return!0;case 210:case 214:case 193:return u7(e,21,t);case 181:case 182:return v_(e.type,t);case 173:case 174:case 175:case 259:case 215:case 171:case 170:case 177:case 176:case 216:return e.body?v_(e.body,t):e.type?v_(e.type,t):NN(e,21,t);case 264:return!!e.body&&v_(e.body,t);case 242:return e.elseStatement?v_(e.elseStatement,t):v_(e.thenStatement,t);case 241:return v_(e.expression,t)||NN(e,26,t);case 206:case 204:case 209:case 164:case 186:return u7(e,23,t);case 178:return e.type?v_(e.type,t):NN(e,23,t);case 292:case 293:return!1;case 245:case 246:case 247:case 244:return v_(e.statement,t);case 243:return NN(e,115,t)?u7(e,21,t):v_(e.statement,t);case 183:return v_(e.exprName,t);case 218:case 217:case 219:case 226:case 227:return v_(e.expression,t);case 212:return v_(e.template,t);case 225:let i=Os(e.templateSpans);return v_(i,t);case 236:return Pf(e.literal);case 275:case 269:return Pf(e.moduleSpecifier);case 221:return v_(e.operand,t);case 223:return v_(e.right,t);case 224:return v_(e.whenFalse,t);default:return!0}}function u7(e,t,r){let i=e.getChildren(r);if(i.length){let o=To(i);if(o.kind===t)return!0;if(o.kind===26&&i.length!==1)return i[i.length-2].kind===t}return!1}function Ehe(e){let t=d7(e);if(!t)return;let r=t.getChildren();return{listItemIndex:DA(r,e),list:t}}function NN(e,t,r){return!!Yo(e,t,r)}function Yo(e,t,r){return wr(e.getChildren(r),i=>i.kind===t)}function d7(e){let t=wr(e.parent.getChildren(),r=>A2(r)&&Od(r,e));return L.assert(!t||ya(t.getChildren(),e)),t}function The(e){return e.kind===88}function I6e(e){return e.kind===84}function L6e(e){return e.kind===98}function k6e(e){if(zl(e))return e.name;if(sl(e)){let t=e.modifiers&&wr(e.modifiers,The);if(t)return t}if(_u(e)){let t=wr(e.getChildren(),I6e);if(t)return t}}function D6e(e){if(zl(e))return e.name;if(Jc(e)){let t=wr(e.modifiers,The);if(t)return t}if(ms(e)){let t=wr(e.getChildren(),L6e);if(t)return t}}function w6e(e){let t;return jn(e,r=>(bi(r)&&(t=r),!Yu(r.parent)&&!bi(r.parent)&&!_T(r.parent))),t}function f7(e,t){if(e.flags&8388608)return;let r=w7(e,t);if(r)return r;let i=w6e(e);return i&&t.getTypeAtLocation(i)}function R6e(e,t){if(!t)switch(e.kind){case 260:case 228:return k6e(e);case 259:case 215:return D6e(e);case 173:return e}if(zl(e))return e.name}function She(e,t){if(e.importClause){if(e.importClause.name&&e.importClause.namedBindings)return;if(e.importClause.name)return e.importClause.name;if(e.importClause.namedBindings){if(jg(e.importClause.namedBindings)){let r=Wp(e.importClause.namedBindings.elements);return r?r.name:void 0}else if(nv(e.importClause.namedBindings))return e.importClause.namedBindings.name}}if(!t)return e.moduleSpecifier}function xhe(e,t){if(e.exportClause){if(h_(e.exportClause))return Wp(e.exportClause.elements)?e.exportClause.elements[0].name:void 0;if(qm(e.exportClause))return e.exportClause.name}if(!t)return e.moduleSpecifier}function O6e(e){if(e.types.length===1)return e.types[0].expression}function Ahe(e,t){let{parent:r}=e;if(Ha(e)&&(t||e.kind!==88)?g_(r)&&ya(r.modifiers,e):e.kind===84?sl(r)||_u(e):e.kind===98?Jc(r)||ms(e):e.kind===118?ku(r):e.kind===92?hb(r):e.kind===154?Ep(r):e.kind===143||e.kind===142?Tc(r):e.kind===100?Nl(r):e.kind===137?p_(r):e.kind===151&&Sf(r)){let i=R6e(r,t);if(i)return i}if((e.kind===113||e.kind===85||e.kind===119)&&pu(r)&&r.declarations.length===1){let i=r.declarations[0];if(Re(i.name))return i.name}if(e.kind===154){if(lm(r)&&r.isTypeOnly){let i=She(r.parent,t);if(i)return i}if(Il(r)&&r.isTypeOnly){let i=xhe(r,t);if(i)return i}}if(e.kind===128){if($u(r)&&r.propertyName||Mu(r)&&r.propertyName||nv(r)||qm(r))return r.name;if(Il(r)&&r.exportClause&&qm(r.exportClause))return r.exportClause.name}if(e.kind===100&&gl(r)){let i=She(r,t);if(i)return i}if(e.kind===93){if(Il(r)){let i=xhe(r,t);if(i)return i}if(pc(r))return ql(r.expression)}if(e.kind===147&&um(r))return r.expression;if(e.kind===158&&(gl(r)||Il(r))&&r.moduleSpecifier)return r.moduleSpecifier;if((e.kind===94||e.kind===117)&&dd(r)&&r.token===e.kind){let i=O6e(r);if(i)return i}if(e.kind===94){if(_c(r)&&r.constraint&&m_(r.constraint))return r.constraint.typeName;if(m2(r)&&m_(r.extendsType))return r.extendsType.typeName}if(e.kind===138&&h2(r))return r.typeParameter.name;if(e.kind===101&&_c(r)&&EL(r.parent))return r.name;if(e.kind===141&&RS(r)&&r.operator===141&&m_(r.type))return r.type.typeName;if(e.kind===146&&RS(r)&&r.operator===146&&wz(r.type)&&m_(r.type.elementType))return r.type.elementType.typeName;if(!t){if((e.kind===103&&z0(r)||e.kind===114&&NS(r)||e.kind===112&&y2(r)||e.kind===133&&v2(r)||e.kind===125&&f3(r)||e.kind===89&&Gue(r))&&r.expression)return ql(r.expression);if((e.kind===101||e.kind===102)&&ar(r)&&r.operatorToken===e)return ql(r.right);if(e.kind===128&&fO(r)&&m_(r.type))return r.type.typeName;if(e.kind===101&&Mz(r)||e.kind===162&&_O(r))return ql(r.expression)}return e}function zX(e){return Ahe(e,!1)}function _7(e){return Ahe(e,!0)}function ef(e,t){return nk(e,t,r=>c_(r)||Xu(r.kind)||pi(r))}function nk(e,t,r){return Che(e,t,!1,r,!1)}function Vi(e,t){return Che(e,t,!0,void 0,!1)}function Che(e,t,r,i,o){let s=e,l;e:for(;;){let d=s.getChildren(e),g=j1(d,t,(m,v)=>v,(m,v)=>{let S=d[m].getEnd();if(S<t)return-1;let x=r?d[m].getFullStart():d[m].getStart(e,!0);return x>t?1:f(d[m],x,S)?d[m-1]&&f(d[m-1])?1:0:i&&x===t&&d[m-1]&&d[m-1].getEnd()===t&&f(d[m-1])?1:-1});if(l)return l;if(g>=0&&d[g]){s=d[g];continue e}return s}function f(d,g,m){if(m??(m=d.getEnd()),m<t||(g??(g=r?d.getFullStart():d.getStart(e,!0)),g>t))return!1;if(t<m||t===m&&(d.kind===1||o))return!0;if(i&&m===t){let v=el(t,e,d);if(v&&i(v))return l=v,!0}return!1}}function Ihe(e,t){let r=Vi(e,t);for(;PN(r);){let i=t1(r,r.parent,e);if(!i)return;r=i}return r}function p7(e,t){let r=Vi(e,t);return Z1(r)&&t>r.getStart(e)&&t<r.getEnd()?r:el(t,e)}function t1(e,t,r){return i(t);function i(o){return Z1(o)&&o.pos===e.end?o:ks(o.getChildren(r),s=>(s.pos<=e.pos&&s.end>e.end||s.pos===e.end)&&$X(s,r)?i(s):void 0)}}function el(e,t,r,i){let o=s(r||t);return L.assert(!(o&&PN(o))),o;function s(l){if(Lhe(l)&&l.kind!==1)return l;let f=l.getChildren(t),d=j1(f,e,(m,v)=>v,(m,v)=>e<f[m].end?!f[m-1]||e>=f[m-1].end?0:1:-1);if(d>=0&&f[d]){let m=f[d];if(e<m.end)if(m.getStart(t,!i)>=e||!$X(m,t)||PN(m)){let x=KX(f,d,t,l.kind);return x&&JX(x,t)}else return s(m)}L.assert(r!==void 0||l.kind===308||l.kind===1||qj(l));let g=KX(f,f.length,t,l.kind);return g&&JX(g,t)}}function Lhe(e){return Z1(e)&&!PN(e)}function JX(e,t){if(Lhe(e))return e;let r=e.getChildren(t);if(r.length===0)return e;let i=KX(r,r.length,t,e.kind);return i&&JX(i,t)}function KX(e,t,r,i){for(let o=t-1;o>=0;o--){let s=e[o];if(PN(s))o===0&&(i===11||i===282)&&L.fail(\"`JsxText` tokens should not be the first child of `JsxElement | JsxSelfClosingElement`\");else if($X(e[o],r))return e[o]}}function n1(e,t,r=el(t,e)){if(r&&Fj(r)){let i=r.getStart(e),o=r.getEnd();if(i<t&&t<o)return!0;if(t===o)return!!r.isUnterminated}return!1}function khe(e,t){let r=Vi(e,t);return r?!!(r.kind===11||r.kind===29&&r.parent.kind===11||r.kind===29&&r.parent.kind===291||r&&r.kind===19&&r.parent.kind===291||r.kind===29&&r.parent.kind===284):!1}function PN(e){return CS(e)&&e.containsOnlyTriviaWhiteSpaces}function qX(e,t){let r=Vi(e,t);return Hy(r.kind)&&t>r.getStart(e)}function Dhe(e,t){let r=Vi(e,t);return!!(CS(r)||r.kind===18&&AL(r.parent)&&Hg(r.parent.parent)||r.kind===29&&Au(r.parent)&&Hg(r.parent.parent))}function m7(e,t){function r(i){for(;i;)if(i.kind>=282&&i.kind<=291||i.kind===11||i.kind===29||i.kind===31||i.kind===79||i.kind===19||i.kind===18||i.kind===43)i=i.parent;else if(i.kind===281){if(t>i.getStart(e))return!0;i=i.parent}else return!1;return!1}return r(Vi(e,t))}function h7(e,t,r){let i=Xa(e.kind),o=Xa(t),s=e.getFullStart(),l=r.text.lastIndexOf(o,s);if(l===-1)return;if(r.text.lastIndexOf(i,s-1)<l){let g=el(l+1,r);if(g&&g.kind===t)return g}let f=e.kind,d=0;for(;;){let g=el(e.getFullStart(),r);if(!g)return;if(e=g,e.kind===t){if(d===0)return e;d--}else e.kind===f&&d++}}function whe(e,t,r){return t?e.getNonNullableType():r?e.getNonOptionalType():e}function MN(e,t,r){let i=YX(e,t);return i!==void 0&&(Gm(i.called)||XX(i.called,i.nTypeArguments,r).length!==0||MN(i.called,t,r))}function XX(e,t,r){let i=r.getTypeAtLocation(e);return Jl(e.parent)&&(i=whe(i,pI(e.parent),!0)),(z0(e.parent)?i.getConstructSignatures():i.getCallSignatures()).filter(s=>!!s.typeParameters&&s.typeParameters.length>=t)}function YX(e,t){if(t.text.lastIndexOf(\"<\",e?e.pos:t.text.length)===-1)return;let r=e,i=0,o=0;for(;r;){switch(r.kind){case 29:if(r=el(r.getFullStart(),t),r&&r.kind===28&&(r=el(r.getFullStart(),t)),!r||!Re(r))return;if(!i)return Rh(r)?void 0:{called:r,nTypeArguments:o};i--;break;case 49:i=3;break;case 48:i=2;break;case 31:i++;break;case 19:if(r=h7(r,18,t),!r)return;break;case 21:if(r=h7(r,20,t),!r)return;break;case 23:if(r=h7(r,22,t),!r)return;break;case 27:o++;break;case 38:case 79:case 10:case 8:case 9:case 110:case 95:case 112:case 94:case 141:case 24:case 51:case 57:case 58:break;default:if(bi(r))break;return}r=el(r.getFullStart(),t)}}function Kg(e,t,r){return tl.getRangeOfEnclosingComment(e,t,void 0,r)}function Rhe(e,t){let r=Vi(e,t);return!!jn(r,dm)}function $X(e,t){return e.kind===1?!!e.jsDoc:e.getWidth(t)!==0}function rk(e,t=0){let r=[],i=Kl(e)?Tj(e)&~t:0;return i&8&&r.push(\"private\"),i&16&&r.push(\"protected\"),i&4&&r.push(\"public\"),(i&32||oc(e))&&r.push(\"static\"),i&256&&r.push(\"abstract\"),i&1&&r.push(\"export\"),i&8192&&r.push(\"deprecated\"),e.flags&16777216&&r.push(\"declare\"),e.kind===274&&r.push(\"export\"),r.length>0?r.join(\",\"):\"\"}function Ohe(e){if(e.kind===180||e.kind===210)return e.typeArguments;if(Ia(e)||e.kind===260||e.kind===261)return e.typeParameters}function g7(e){return e===2||e===3}function QX(e){return!!(e===10||e===13||Hy(e))}function Nhe(e){if(!e.isIntersection())return!1;let{types:t,checker:r}=e;return t.length===2&&t[0].flags&4&&r.isEmptyAnonymousObjectType(t[1])}function Phe(e){return 18<=e&&e<=78}function FN(e,t,r){return Hy(e.kind)&&e.getStart(r)<t&&t<e.end||!!e.isUnterminated&&t===e.end}function ZX(e){switch(e){case 123:case 121:case 122:return!0}return!1}function Mhe(e){let t=VU(e);return xJ(t,e&&e.configFile),t}function qg(e){return!!((e.kind===206||e.kind===207)&&(e.parent.kind===223&&e.parent.left===e&&e.parent.operatorToken.kind===63||e.parent.kind===247&&e.parent.initializer===e||qg(e.parent.kind===299?e.parent.parent:e.parent)))}function Fhe(e,t){return Bhe(e,t,!0)}function Ghe(e,t){return Bhe(e,t,!1)}function Bhe(e,t,r){let i=Kg(e,t,void 0);return!!i&&r===bge.test(e.text.substring(i.pos,i.end))}function eY(e){if(e)switch(e.kind){case 10:case 14:return tY(e);default:return Du(e)}}function Du(e,t,r){return Wc(e.getStart(t),(r||e).getEnd())}function tY(e){if(!e.isUnterminated)return Wc(e.getStart()+1,e.getEnd()-1)}function nY(e,t){return Gf(e.getStart(t),e.end)}function lv(e){return Wc(e.pos,e.end)}function y7(e){return Gf(e.start,e.start+e.length)}function v7(e,t,r){return GN(il(e,t),r)}function GN(e,t){return{span:e,newText:t}}function ik(e){return ya(K7,e)}function rY(e){return e.kind===154}function b7(e){return rY(e)||Re(e)&&e.text===\"type\"}function BN(e){return!!(e.flags&1536)&&e.name.charCodeAt(0)===34}function W2(){let e=[];return t=>{let r=zo(t);return!e[r]&&(e[r]=!0)}}function E7(e){return e.getText(0,e.getLength())}function UN(e,t){let r=\"\";for(let i=0;i<t;i++)r+=e;return r}function iY(e){return e.isTypeParameter()&&e.getConstraint()||e}function VN(e){return e.kind===164?yf(e.expression)?e.expression.text:void 0:pi(e)?vr(e):l_(e)}function Uhe(e){return e.getSourceFiles().some(t=>!t.isDeclarationFile&&!e.isSourceFileFromExternalLibrary(t)&&!!(t.externalModuleIndicator||t.commonJsModuleIndicator))}function Vhe(e){return e.getSourceFiles().some(t=>!t.isDeclarationFile&&!e.isSourceFileFromExternalLibrary(t)&&!!t.externalModuleIndicator)}function aY(e){return!!e.module||Do(e)>=2||!!e.noEmit}function $S(e,t){return{fileExists:r=>e.fileExists(r),getCurrentDirectory:()=>t.getCurrentDirectory(),readFile:ho(t,t.readFile),useCaseSensitiveFileNames:ho(t,t.useCaseSensitiveFileNames),getSymlinkCache:ho(t,t.getSymlinkCache)||e.getSymlinkCache,getModuleSpecifierCache:ho(t,t.getModuleSpecifierCache),getPackageJsonInfoCache:()=>{var r;return(r=e.getModuleResolutionCache())==null?void 0:r.getPackageJsonInfoCache()},getGlobalTypingsCacheLocation:ho(t,t.getGlobalTypingsCacheLocation),redirectTargetsMap:e.redirectTargetsMap,getProjectReferenceRedirect:r=>e.getProjectReferenceRedirect(r),isSourceOfProjectReferenceRedirect:r=>e.isSourceOfProjectReferenceRedirect(r),getNearestAncestorDirectoryWithPackageJson:ho(t,t.getNearestAncestorDirectoryWithPackageJson),getFileIncludeReasons:()=>e.getFileIncludeReasons()}}function oY(e,t){return{...$S(e,t),getCommonSourceDirectory:()=>e.getCommonSourceDirectory()}}function T7(e){return e===2||e>=3&&e<=99||e===100}function jhe(e,t,r,i){return e||t&&t.length?Xg(e,t,r,i):void 0}function Xg(e,t,r,i,o){return D.createImportDeclaration(void 0,e||t?D.createImportClause(!!o,e,t&&t.length?D.createNamedImports(t):void 0):void 0,typeof r==\"string\"?S7(r,i):r,void 0)}function S7(e,t){return D.createStringLiteral(e,t===0)}function sY(e,t){return V6(e,t)?1:0}function J_(e,t){if(t.quotePreference&&t.quotePreference!==\"auto\")return t.quotePreference===\"single\"?0:1;{let r=e.imports&&wr(e.imports,i=>yo(i)&&!ws(i.parent));return r?sY(r,e):1}}function Hhe(e){switch(e){case 0:return\"'\";case 1:return'\"';default:return L.assertNever(e)}}function x7(e){let t=A7(e);return t===void 0?void 0:Gi(t)}function A7(e){return e.escapedName!==\"default\"?e.escapedName:ks(e.declarations,t=>{let r=sa(t);return r&&r.kind===79?r.escapedText:void 0})}function C7(e){return es(e)&&(um(e.parent)||gl(e.parent)||qu(e.parent,!1)&&e.parent.arguments[0]===e||Dd(e.parent)&&e.parent.arguments[0]===e)}function jN(e){return Wo(e)&&cm(e.parent)&&Re(e.name)&&!e.propertyName}function I7(e,t){let r=e.getTypeAtLocation(t.parent);return r&&e.getPropertyOfType(r,t.name.text)}function HN(e,t,r){if(e)for(;e.parent;){if(Li(e.parent)||!N6e(r,e.parent,t))return e;e=e.parent}}function N6e(e,t,r){return bj(e,t.getStart(r))&&t.getEnd()<=wl(e)}function z2(e,t){return g_(e)?wr(e.modifiers,r=>r.kind===t):void 0}function L7(e,t,r,i,o){let l=(ba(r)?r[0]:r).kind===240?DH:yT,f=Pr(t.statements,l),d=ba(r)?b_.detectImportDeclarationSorting(r,o):3,g=b_.getOrganizeImportsComparer(o,d===2),m=ba(r)?Ag(r,(v,S)=>b_.compareImportsOrRequireStatements(v,S,g)):[r];if(!f.length)e.insertNodesAtTopOfFile(t,m,i);else if(f&&(d=b_.detectImportDeclarationSorting(f,o))){let v=b_.getOrganizeImportsComparer(o,d===2);for(let S of m){let x=b_.getImportDeclarationInsertionIndex(f,S,v);if(x===0){let A=f[0]===t.statements[0]?{leadingTriviaOption:nr.LeadingTriviaOption.Exclude}:{};e.insertNodeBefore(t,f[0],S,!1,A)}else{let A=f[x-1];e.insertNodeAfter(t,A,S)}}}else{let v=Os(f);v?e.insertNodesAfter(t,v,m):e.insertNodesAtTopOfFile(t,m,i)}}function cY(e,t){return L.assert(e.isTypeOnly),Ga(e.getChildAt(0,t),rY)}function J2(e,t){return!!e&&!!t&&e.start===t.start&&e.length===t.length}function P6e(e,t){return e.fileName===t.fileName&&J2(e.textSpan,t.textSpan)}function lY(e,t){if(e){for(let r=0;r<e.length;r++)if(e.indexOf(e[r])===r){let i=t(e[r],r);if(i)return i}}}function Whe(e,t,r){for(let i=t;i<r;i++)if(!xh(e.charCodeAt(i)))return!1;return!0}function WN(e,t,r){let i=t.tryGetSourcePosition(e);return i&&(!r||r(So(i.fileName))?i:void 0)}function uY(e,t,r){let{fileName:i,textSpan:o}=e,s=WN({fileName:i,pos:o.start},t,r);if(!s)return;let l=WN({fileName:i,pos:o.start+o.length},t,r),f=l?l.pos-s.pos:o.length;return{fileName:s.fileName,textSpan:{start:s.pos,length:f},originalFileName:e.fileName,originalTextSpan:e.textSpan,contextSpan:zhe(e,t,r),originalContextSpan:e.contextSpan}}function zhe(e,t,r){let i=e.contextSpan&&WN({fileName:e.fileName,pos:e.contextSpan.start},t,r),o=e.contextSpan&&WN({fileName:e.fileName,pos:e.contextSpan.start+e.contextSpan.length},t,r);return i&&o?{start:i.pos,length:o.pos-i.pos}:void 0}function dY(e){let t=e.declarations?Sl(e.declarations):void 0;return!!jn(t,r=>ha(r)?!0:Wo(r)||cm(r)||g2(r)?!1:\"quit\")}function M6e(){let e=KR*10,t,r,i,o;m();let s=v=>f(v,17);return{displayParts:()=>{let v=t.length&&t[t.length-1].text;return o>e&&v&&v!==\"...\"&&(xh(v.charCodeAt(v.length-1))||t.push(Qu(\" \",16)),t.push(Qu(\"...\",15))),t},writeKeyword:v=>f(v,5),writeOperator:v=>f(v,12),writePunctuation:v=>f(v,15),writeTrailingSemicolon:v=>f(v,15),writeSpace:v=>f(v,16),writeStringLiteral:v=>f(v,8),writeParameter:v=>f(v,13),writeProperty:v=>f(v,14),writeLiteral:v=>f(v,8),writeSymbol:d,writeLine:g,write:s,writeComment:s,getText:()=>\"\",getTextPos:()=>0,getColumn:()=>0,getLine:()=>0,isAtStartOfLine:()=>!1,hasTrailingWhitespace:()=>!1,hasTrailingComment:()=>!1,rawWrite:Sa,getIndent:()=>i,increaseIndent:()=>{i++},decreaseIndent:()=>{i--},clear:m};function l(){if(!(o>e)&&r){let v=Q6(i);v&&(o+=v.length,t.push(Qu(v,16))),r=!1}}function f(v,S){o>e||(l(),o+=v.length,t.push(Qu(v,S)))}function d(v,S){o>e||(l(),o+=v.length,t.push(Jhe(v,S)))}function g(){o>e||(o+=1,t.push(K2()),r=!0)}function m(){t=[],r=!0,i=0,o=0}}function Jhe(e,t){return Qu(e,r(t));function r(i){let o=i.flags;return o&3?dY(i)?13:9:o&4||o&32768||o&65536?14:o&8?19:o&16?20:o&32?1:o&64?4:o&384?2:o&1536?11:o&8192?10:o&262144?18:o&524288||o&2097152?0:17}}function Qu(e,t){return{text:e,kind:IN[t]}}function Qs(){return Qu(\" \",16)}function _d(e){return Qu(Xa(e),5)}function Yl(e){return Qu(Xa(e),15)}function ak(e){return Qu(Xa(e),12)}function Khe(e){return Qu(e,13)}function qhe(e){return Qu(e,14)}function fY(e){let t=lT(e);return t===void 0?tf(e):_d(t)}function tf(e){return Qu(e,17)}function Xhe(e){return Qu(e,0)}function Yhe(e){return Qu(e,18)}function k7(e){return Qu(e,24)}function $he(e,t){return{text:e,kind:IN[23],target:{fileName:Gn(t).fileName,textSpan:Du(t)}}}function _Y(e){return Qu(e,22)}function Qhe(e,t){var r;let i=zue(e)?\"link\":Jue(e)?\"linkcode\":\"linkplain\",o=[_Y(`{@${i} `)];if(!e.name)e.text&&o.push(k7(e.text));else{let s=t?.getSymbolAtLocation(e.name),l=G6e(e.text),f=Qc(e.name)+e.text.slice(0,l),d=F6e(e.text.slice(l)),g=s?.valueDeclaration||((r=s?.declarations)==null?void 0:r[0]);g?(o.push($he(f,g)),d&&o.push(k7(d))):o.push(k7(f+(l?\"\":\" \")+d))}return o.push(_Y(\"}\")),o}function F6e(e){let t=0;if(e.charCodeAt(t++)===124){for(;t<e.length&&e.charCodeAt(t)===32;)t++;return e.slice(t)}return e}function G6e(e){let t=e.indexOf(\"://\");if(t===0){for(;t<e.length&&e.charCodeAt(t)!==124;)t++;return t}if(e.indexOf(\"()\")===0)return 2;if(e.charAt(0)===\"<\"){let r=0,i=0;for(;i<e.length;)if(e[i]===\"<\"&&r++,e[i]===\">\"&&r--,i++,!r)return i}return 0}function bb(e,t){var r;return t?.newLineCharacter||((r=e.getNewLine)==null?void 0:r.call(e))||Ege}function K2(){return Qu(`\n`,6)}function uv(e){try{return e(q7),q7.displayParts()}finally{q7.clear()}}function zN(e,t,r,i=0){return uv(o=>{e.writeType(t,r,i|1024|16384,o)})}function ok(e,t,r,i,o=0){return uv(s=>{e.writeSymbol(t,r,i,o|8,s)})}function pY(e,t,r,i=0){return i|=25632,uv(o=>{e.writeSignature(t,r,i,void 0,o)})}function B6e(e,t){let r=t.getSourceFile();return uv(i=>{fN().writeNode(4,e,r,i)})}function Zhe(e){return!!e.parent&&eS(e.parent)&&e.parent.propertyName===e}function mY(e,t){return h4(e,t.getScriptKind&&t.getScriptKind(e))}function ege(e,t){let r=e;for(;U6e(r)||Zp(r)&&r.links.target;)Zp(r)&&r.links.target?r=r.links.target:r=wd(r,t);return r}function U6e(e){return(e.flags&2097152)!==0}function tge(e,t){return $a(wd(e,t))}function nge(e,t){for(;xh(e.charCodeAt(t));)t+=1;return t}function hY(e,t){for(;t>-1&&Yp(e.charCodeAt(t));)t-=1;return t+1}function cc(e,t=!0){let r=e&&rge(e);return r&&!t&&pd(r),r}function JN(e,t,r){let i=r(e);return i?Ir(i,e):i=rge(e,r),i&&!t&&pd(i),i}function rge(e,t){let r=t?s=>JN(s,!0,t):cc,o=xn(e,r,Bh,t?s=>s&&gY(s,!0,t):s=>s&&oE(s),r);if(o===e){let s=yo(e)?Ir(D.createStringLiteralFromNode(e),e):Vf(e)?Ir(D.createNumericLiteral(e.text,e.numericLiteralFlags),e):D.cloneNode(e);return it(s,e)}return o.parent=void 0,o}function oE(e,t=!0){return e&&D.createNodeArray(e.map(r=>cc(r,t)),e.hasTrailingComma)}function gY(e,t,r){return D.createNodeArray(e.map(i=>JN(i,t,r)),e.hasTrailingComma)}function pd(e){D7(e),ige(e)}function D7(e){yY(e,1024,j6e)}function ige(e){yY(e,2048,yW)}function r1(e,t){let r=e.getSourceFile(),i=r.text;V6e(e,i)?q2(e,t,r):qN(e,t,r),sk(e,t,r)}function V6e(e,t){let r=e.getFullStart(),i=e.getStart();for(let o=r;o<i;o++)if(t.charCodeAt(o)===10)return!0;return!1}function yY(e,t,r){bp(e,t);let i=r(e);i&&yY(i,t,r)}function j6e(e){return e.forEachChild(t=>t)}function i1(e,t){let r=e;for(let i=1;!g6(t,r);i++)r=`${e}_${i}`;return r}function KN(e,t,r,i){let o=0,s=-1;for(let{fileName:l,textChanges:f}of e){L.assert(l===t);for(let d of f){let{span:g,newText:m}=d,v=H6e(m,_S(r));if(v!==-1&&(s=g.start+o+v,!i))return s;o+=m.length-g.length}}return L.assert(i),L.assert(s>=0),s}function q2(e,t,r,i,o){vw(r.text,e.pos,vY(t,r,i,o,nO))}function sk(e,t,r,i,o){bw(r.text,e.end,vY(t,r,i,o,R4))}function qN(e,t,r,i,o){bw(r.text,e.pos,vY(t,r,i,o,nO))}function vY(e,t,r,i,o){return(s,l,f,d)=>{f===3?(s+=2,l-=2):s+=2,o(e,r||f,t.text.slice(s,l),i!==void 0?i:d)}}function H6e(e,t){if(na(e,t))return 0;let r=e.indexOf(\" \"+t);return r===-1&&(r=e.indexOf(\".\"+t)),r===-1&&(r=e.indexOf('\"'+t)),r===-1?-1:r+1}function bY(e){return ar(e)&&e.operatorToken.kind===27||rs(e)||fO(e)&&rs(e.expression)}function w7(e,t,r){let i=qy(e.parent);switch(i.kind){case 211:return t.getContextualType(i,r);case 223:{let{left:o,operatorToken:s,right:l}=i;return R7(s.kind)?t.getTypeAtLocation(e===l?o:l):t.getContextualType(e,r)}case 292:return TY(i,t);default:return t.getContextualType(e,r)}}function ck(e,t,r){let i=J_(e,t),o=JSON.stringify(r);return i===0?`'${u_(o).replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')}'`:o}function R7(e){switch(e){case 36:case 34:case 37:case 35:return!0;default:return!1}}function age(e){switch(e.kind){case 10:case 14:case 225:case 212:return!0;default:return!1}}function EY(e){return!!e.getStringIndexType()||!!e.getNumberIndexType()}function TY(e,t){return t.getTypeAtLocation(e.parent.parent.expression)}function lk(e,t,r,i){let o=r.getTypeChecker(),s=!0,l=()=>s=!1,f=o.typeToTypeNode(e,t,1,{trackSymbol:(d,g,m)=>(s=s&&o.isSymbolAccessible(d,g,m,!1).accessibility===0,!s),reportInaccessibleThisError:l,reportPrivateInBaseOfClassExpression:l,reportInaccessibleUniqueSymbolError:l,moduleResolverHost:oY(r,i)});return s?f:void 0}function SY(e){return e===176||e===177||e===178||e===168||e===170}function oge(e){return e===259||e===173||e===171||e===174||e===175}function sge(e){return e===264}function O7(e){return e===240||e===241||e===243||e===248||e===249||e===250||e===254||e===256||e===169||e===262||e===269||e===268||e===275||e===267||e===274}function W6e(e,t){let r=e.getLastToken(t);if(r&&r.kind===26)return!1;if(SY(e.kind)){if(r&&r.kind===27)return!1}else if(sge(e.kind)){let f=To(e.getChildren(t));if(f&&Tp(f))return!1}else if(oge(e.kind)){let f=To(e.getChildren(t));if(f&&bT(f))return!1}else if(!O7(e.kind))return!1;if(e.kind===243)return!0;let i=jn(e,f=>!f.parent),o=t1(e,i,t);if(!o||o.kind===19)return!0;let s=t.getLineAndCharacterOfPosition(e.getEnd()).line,l=t.getLineAndCharacterOfPosition(o.getStart(t)).line;return s!==l}function N7(e,t,r){let i=jn(t,o=>o.end!==e?\"quit\":NY(o.kind));return!!i&&W6e(i,r)}function P7(e){let t=0,r=0,i=5;return pa(e,function o(s){if(O7(s.kind)){let l=s.getLastToken(e);l?.kind===26?t++:r++}else if(SY(s.kind)){let l=s.getLastToken(e);if(l?.kind===26)t++;else if(l&&l.kind!==27){let f=Gs(e,l.getStart(e)).line,d=Gs(e,Pg(e,l.end).start).line;f!==d&&r++}}return t+r>=i?!0:pa(s,o)}),t===0&&r<=1?!0:t/r>1/i}function M7(e,t){return U7(e,e.getDirectories,t)||[]}function xY(e,t,r,i,o){return U7(e,e.readDirectory,t,r,i,o)||Je}function F7(e,t){return U7(e,e.fileExists,t)}function G7(e,t){return B7(()=>gp(t,e))||!1}function B7(e){try{return e()}catch{return}}function U7(e,t,...r){return B7(()=>t&&t.apply(e,r))}function AY(e,t,r){let i=[];return Th(e,o=>{if(o===r)return!0;let s=vi(o,\"package.json\");F7(t,s)&&i.push(s)}),i}function cge(e,t){let r;return Th(e,i=>{if(i===\"node_modules\"||(r=Vpe(i,o=>F7(t,o),\"package.json\"),r))return!0}),r}function lge(e,t){if(!t.fileExists)return[];let r=[];return Th(ni(e),i=>{let o=vi(i,\"package.json\");if(t.fileExists(o)){let s=uge(o,t);s&&r.push(s)}}),r}function uge(e,t){if(!t.readFile)return;let r=[\"dependencies\",\"devDependencies\",\"optionalDependencies\",\"peerDependencies\"],i=t.readFile(e)||\"\",o=z6e(i),s={};if(o)for(let d of r){let g=o[d];if(!g)continue;let m=new Map;for(let v in g)m.set(v,g[v]);s[d]=m}let l=[[1,s.dependencies],[2,s.devDependencies],[8,s.optionalDependencies],[4,s.peerDependencies]];return{...s,parseable:!!o,fileName:e,get:f,has(d,g){return!!f(d,g)}};function f(d,g=15){for(let[m,v]of l)if(v&&g&m){let S=v.get(d);if(S!==void 0)return S}}}function uk(e,t,r){let i=(r.getPackageJsonsVisibleToFile&&r.getPackageJsonsVisibleToFile(e.fileName)||lge(e.fileName,r)).filter(A=>A.parseable),o,s,l;return{allowsImportingAmbientModule:d,allowsImportingSourceFile:g,allowsImportingSpecifier:m};function f(A){let w=x(A);for(let C of i)if(C.has(w)||C.has(rF(w)))return!0;return!1}function d(A,w){if(!i.length||!A.valueDeclaration)return!0;if(!s)s=new Map;else{let q=s.get(A);if(q!==void 0)return q}let C=u_(A.getName());if(v(C))return s.set(A,!0),!0;let P=A.valueDeclaration.getSourceFile(),F=S(P.fileName,w);if(typeof F>\"u\")return s.set(A,!0),!0;let B=f(F)||f(C);return s.set(A,B),B}function g(A,w){if(!i.length)return!0;if(!l)l=new Map;else{let F=l.get(A);if(F!==void 0)return F}let C=S(A.fileName,w);if(!C)return l.set(A,!0),!0;let P=f(C);return l.set(A,P),P}function m(A){return!i.length||v(A)||Jd(A)||qp(A)?!0:f(A)}function v(A){return!!(Cu(e)&&QT.nodeCoreModules.has(A)&&(o===void 0&&(o=V7(e)),o))}function S(A,w){if(!jl(A,\"node_modules\"))return;let C=Q0.getNodeModulesPackageName(r.getCompilationSettings(),e,A,w,t);if(C&&!Jd(C)&&!qp(C))return x(C)}function x(A){let w=Ou(ZO(A)).slice(1);return na(w[0],\"@\")?`${w[0]}/${w[1]}`:w[0]}}function z6e(e){try{return JSON.parse(e)}catch{return}}function V7(e){return vt(e.imports,({text:t})=>QT.nodeCoreModules.has(t))}function dge(e){return ya(Ou(e),\"node_modules\")}function CY(e){return e.file!==void 0&&e.start!==void 0&&e.length!==void 0}function fge(e,t){let r=Du(e),i=j1(t,r,Ks,f8);if(i>=0){let o=t[i];return L.assertEqual(o.file,e.getSourceFile(),\"Diagnostics proided to 'findDiagnosticForNode' must be from a single SourceFile\"),Ga(o,CY)}}function _ge(e,t){var r;let i=j1(t,e.start,l=>l.start,Es);for(i<0&&(i=~i);((r=t[i-1])==null?void 0:r.start)===e.start;)i--;let o=[],s=wl(e);for(;;){let l=zr(t[i],CY);if(!l||l.start>s)break;Roe(e,l)&&o.push(l),i++}return o}function QS({startPosition:e,endPosition:t}){return Wc(e,t===void 0?e:t)}function IY(e,t){let r=Vi(e,t.start);return jn(r,o=>o.getStart(e)<t.start||o.getEnd()>wl(t)?\"quit\":ot(o)&&J2(t,Du(o,e)))}function pge(e,t,r=Ks){return e?ba(e)?r(on(e,t)):t(e,0):void 0}function LY(e){return ba(e)?Vo(e):e}function mge(e,t){if(hge(e)){let r=gge(e);if(r)return r;let i=gu.moduleSymbolToValidIdentifier(kY(e),t,!1),o=gu.moduleSymbolToValidIdentifier(kY(e),t,!0);return i===o?i:[i,o]}return e.name}function j7(e,t,r){return hge(e)?gge(e)||gu.moduleSymbolToValidIdentifier(kY(e),t,!!r):e.name}function hge(e){return!(e.flags&33554432)&&(e.escapedName===\"export=\"||e.escapedName===\"default\")}function gge(e){return ks(e.declarations,t=>{var r,i;return pc(t)?(r=zr(ql(t.expression),Re))==null?void 0:r.text:(i=zr(sa(t),Re))==null?void 0:i.text})}function kY(e){var t;return L.checkDefined(e.parent,`Symbol parent was undefined. Flags: ${L.formatSymbolFlags(e.flags)}. Declarations: ${(t=e.declarations)==null?void 0:t.map(r=>{let i=L.formatSyntaxKind(r.kind),o=Yn(r),{expression:s}=r;return(o?\"[JS]\":\"\")+i+(s?` (expression: ${L.formatSyntaxKind(s.kind)})`:\"\")}).join(\", \")}.`)}function yge(e,t,r){let i=t.length;if(i+r>e.length)return!1;for(let o=0;o<i;o++)if(t.charCodeAt(o)!==e.charCodeAt(o+r))return!1;return!0}function DY(e){return e.charCodeAt(0)===95}function J6e(e){return!vge(e)}function vge(e){let t=e.getSourceFile();return!t.externalModuleIndicator&&!t.commonJsModuleIndicator?!1:Yn(e)||!jn(e,r=>Tc(r)&&mp(r))}function H7(e){return!!(Tj(e)&8192)}function W7(e,t){let r=ks(e.imports,i=>{if(QT.nodeCoreModules.has(i.text))return na(i.text,\"node:\")});return r??t.usesUriStyleNodeCoreModules}function XN(e){return e===`\n`?1:0}function ZS(e){return ba(e)?jm(uo(e[0]),e.slice(1)):uo(e)}function z7({options:e},t){let r=!e.semicolons||e.semicolons===\"ignore\",i=e.semicolons===\"remove\"||r&&!P7(t);return{...e,semicolons:i?\"remove\":\"ignore\"}}function wY(e){return e===2||e===3}function dk(e,t){return e.isSourceFileFromExternalLibrary(t)||e.isSourceFileDefaultLibrary(t)}function J7(e,t){let r=new Set,i=new Set,o=new Set;for(let f of t)if(!yO(f)){let d=vs(f.expression);if(fT(d))switch(d.kind){case 14:case 10:r.add(d.text);break;case 8:i.add(parseInt(d.text));break;case 9:let g=Ple(Oc(d.text,\"n\")?d.text.slice(0,-1):d.text);g&&o.add(j0(g));break}else{let g=e.getSymbolAtLocation(f.expression);if(g&&g.valueDeclaration&&q0(g.valueDeclaration)){let m=e.getConstantValue(g.valueDeclaration);m!==void 0&&s(m)}}}return{addValue:s,hasValue:l};function s(f){switch(typeof f){case\"string\":r.add(f);break;case\"number\":i.add(f)}}function l(f){switch(typeof f){case\"string\":return r.has(f);case\"number\":return i.has(f);case\"object\":return o.has(j0(f))}}}var $l,RY,bge,K7,OY,q7,Ege,X7,NY,K6e=gt({\"src/services/utilities.ts\"(){\"use strict\";Fr(),$l=kg(99,!0),RY=(e=>(e[e.None=0]=\"None\",e[e.Value=1]=\"Value\",e[e.Type=2]=\"Type\",e[e.Namespace=4]=\"Namespace\",e[e.All=7]=\"All\",e))(RY||{}),bge=/^\\/\\/\\/\\s*</,K7=[131,129,160,134,95,138,141,144,104,148,149,146,152,153,110,114,155,156,157],OY=(e=>(e[e.Single=0]=\"Single\",e[e.Double=1]=\"Double\",e))(OY||{}),q7=M6e(),Ege=`\n`,X7=\"anonymous function\",NY=Kp(SY,oge,sge,O7)}});function Tge(e){let t=1,r=Nf(),i=new Map,o=new Map,s,l={isUsableByFile:x=>x===s,isEmpty:()=>!r.size,clear:()=>{r.clear(),i.clear(),s=void 0},add:(x,A,w,C,P,F,B,q)=>{x!==s&&(l.clear(),s=x);let W;if(P){let ge=jW(P.fileName);if(ge){let{topLevelNodeModulesIndex:X,topLevelPackageNameIndex:Ve,packageRootIndex:we}=ge;if(W=iF(ZO(P.fileName.substring(Ve+1,we))),na(x,P.path.substring(0,X))){let ke=o.get(W),Pe=P.fileName.substring(0,Ve+1);if(ke){let Ce=ke.indexOf(Wg);X>Ce&&o.set(W,Pe)}else o.set(W,Pe)}}}let R=F===1&&QA(A)||A,ie=F===0||BN(R)?Gi(w):mge(R,void 0),$=typeof ie==\"string\"?ie:ie[0],fe=typeof ie==\"string\"?void 0:ie[1],Z=u_(C.name),U=t++,re=wd(A,q),le=A.flags&33554432?void 0:A,_e=C.flags&33554432?void 0:C;(!le||!_e)&&i.set(U,[A,C]),r.add(d($,A,fl(Z)?void 0:Z,q),{id:U,symbolTableKey:w,symbolName:$,capitalizedSymbolName:fe,moduleName:Z,moduleFile:P,moduleFileName:P?.fileName,packageName:W,exportKind:F,targetFlags:re.flags,isFromPackageJson:B,symbol:le,moduleSymbol:_e})},get:(x,A)=>{if(x!==s)return;let w=r.get(A);return w?.map(f)},search:(x,A,w,C)=>{if(x===s)return Ld(r,(P,F)=>{let{symbolName:B,ambientModuleName:q}=g(F),W=A&&P[0].capitalizedSymbolName||B;if(w(W,P[0].targetFlags)){let R=P.map(f).filter((ie,$)=>S(ie,P[$].packageName));if(R.length){let ie=C(R,W,!!q,F);if(ie!==void 0)return ie}}})},releaseSymbols:()=>{i.clear()},onFileChanged:(x,A,w)=>m(x)&&m(A)?!1:s&&s!==A.path||w&&V7(x)!==V7(A)||!up(x.moduleAugmentations,A.moduleAugmentations)||!v(x,A)?(l.clear(),!0):(s=A.path,!1)};return L.isDebugging&&Object.defineProperty(l,\"__cache\",{get:()=>r}),l;function f(x){if(x.symbol&&x.moduleSymbol)return x;let{id:A,exportKind:w,targetFlags:C,isFromPackageJson:P,moduleFileName:F}=x,[B,q]=i.get(A)||Je;if(B&&q)return{symbol:B,moduleSymbol:q,moduleFileName:F,exportKind:w,targetFlags:C,isFromPackageJson:P};let W=(P?e.getPackageJsonAutoImportProvider():e.getCurrentProgram()).getTypeChecker(),Y=x.moduleSymbol||q||L.checkDefined(x.moduleFile?W.getMergedSymbol(x.moduleFile.symbol):W.tryFindAmbientModule(x.moduleName)),R=x.symbol||B||L.checkDefined(w===2?W.resolveExternalModuleSymbol(Y):W.tryGetMemberInModuleExportsAndProperties(Gi(x.symbolTableKey),Y),`Could not find symbol '${x.symbolName}' by key '${x.symbolTableKey}' in module ${Y.name}`);return i.set(A,[R,Y]),{symbol:R,moduleSymbol:Y,moduleFileName:F,exportKind:w,targetFlags:C,isFromPackageJson:P}}function d(x,A,w,C){let P=w||\"\";return`${x}|${$a(wd(A,C))}|${P}`}function g(x){let A=x.substring(0,x.indexOf(\"|\")),w=x.substring(x.lastIndexOf(\"|\")+1);return{symbolName:A,ambientModuleName:w===\"\"?void 0:w}}function m(x){return!x.commonJsModuleIndicator&&!x.externalModuleIndicator&&!x.moduleAugmentations&&!x.ambientModuleNames}function v(x,A){if(!up(x.ambientModuleNames,A.ambientModuleNames))return!1;let w=-1,C=-1;for(let P of A.ambientModuleNames){let F=B=>lH(B)&&B.name.text===P;if(w=Yc(x.statements,F,w+1),C=Yc(A.statements,F,C+1),x.statements[w]!==A.statements[C])return!1}return!0}function S(x,A){if(!A||!x.moduleFileName)return!0;let w=e.getGlobalTypingsCacheLocation();if(w&&na(x.moduleFileName,w))return!0;let C=o.get(A);return!C||na(x.moduleFileName,C)}}function PY(e,t,r,i,o,s,l){var f;if(t===r)return!1;let d=l?.get(t.path,r.path,i,{});if(d?.isBlockedByPackageJsonDependencies!==void 0)return!d.isBlockedByPackageJsonDependencies;let g=lb(s),m=(f=s.getGlobalTypingsCacheLocation)==null?void 0:f.call(s),v=!!Q0.forEachFileNameOfModule(t.fileName,r.fileName,s,!1,S=>{let x=e.getSourceFile(S);return(x===r||!x)&&q6e(t.fileName,S,g,m)});if(o){let S=v&&o.allowsImportingSourceFile(r,s);return l?.setBlockedByPackageJsonDependencies(t.path,r.path,i,{},!S),S}return v}function q6e(e,t,r,i){let o=Th(t,l=>Hl(l)===\"node_modules\"?l:void 0),s=o&&ni(r(o));return s===void 0||na(r(e),s)||!!i&&na(r(i),s)}function MY(e,t,r,i,o){var s,l;let f=xR(t),d=r.autoImportFileExcludePatterns&&Zi(r.autoImportFileExcludePatterns,m=>{let v=kW(m,\"\",\"exclude\");return v?Qy(v,f):void 0});Sge(e.getTypeChecker(),e.getSourceFiles(),d,(m,v)=>o(m,v,e,!1));let g=i&&((s=t.getPackageJsonAutoImportProvider)==null?void 0:s.call(t));if(g){let m=Ms(),v=e.getTypeChecker();Sge(g.getTypeChecker(),g.getSourceFiles(),d,(S,x)=>{(x&&!e.getSourceFile(x.fileName)||!x&&!v.resolveName(S.name,void 0,1536,!1))&&o(S,x,g,!0)}),(l=t.log)==null||l.call(t,`forEachExternalModuleToImportFrom autoImportProvider: ${Ms()-m}`)}}function Sge(e,t,r,i){var o;let s=r&&(l=>r.some(f=>f.test(l)));for(let l of e.getAmbientModules())!jl(l.name,\"*\")&&!(r&&((o=l.declarations)!=null&&o.every(f=>s(f.getSourceFile().fileName))))&&i(l,void 0);for(let l of t)kd(l)&&!s?.(l.fileName)&&i(e.getMergedSymbol(l.symbol),l)}function YN(e,t,r,i,o){var s,l,f,d,g;let m=Ms();(s=t.getPackageJsonAutoImportProvider)==null||s.call(t);let v=((l=t.getCachedExportInfoMap)==null?void 0:l.call(t))||Tge({getCurrentProgram:()=>r,getPackageJsonAutoImportProvider:()=>{var A;return(A=t.getPackageJsonAutoImportProvider)==null?void 0:A.call(t)},getGlobalTypingsCacheLocation:()=>{var A;return(A=t.getGlobalTypingsCacheLocation)==null?void 0:A.call(t)}});if(v.isUsableByFile(e.path))return(f=t.log)==null||f.call(t,\"getExportInfoMap: cache hit\"),v;(d=t.log)==null||d.call(t,\"getExportInfoMap: cache miss or empty; calculating new results\");let S=r.getCompilerOptions(),x=0;try{MY(r,t,i,!0,(A,w,C,P)=>{++x%100===0&&o?.throwIfCancellationRequested();let F=new Map,B=C.getTypeChecker(),q=Y7(A,B,S);q&&xge(q.symbol,B)&&v.add(e.path,q.symbol,q.exportKind===1?\"default\":\"export=\",A,w,q.exportKind,P,B),B.forEachExportAndPropertyOfModule(A,(W,Y)=>{W!==q?.symbol&&xge(W,B)&&V_(F,Y)&&v.add(e.path,W,Y,A,w,0,P,B)})})}catch(A){throw v.clear(),A}return(g=t.log)==null||g.call(t,`getExportInfoMap: done in ${Ms()-m} ms`),v}function Y7(e,t,r){let i=X6e(e,t);if(!i)return;let{symbol:o,exportKind:s}=i,l=$7(o,t,r);return l&&{symbol:o,exportKind:s,...l}}function xge(e,t){return!t.isUndefinedSymbol(e)&&!t.isUnknownSymbol(e)&&!gR(e)&&!Cce(e)}function X6e(e,t){let r=t.resolveExternalModuleSymbol(e);if(r!==e)return{symbol:r,exportKind:2};let i=t.tryGetMemberInModuleExports(\"default\",e);if(i)return{symbol:i,exportKind:1}}function $7(e,t,r){let i=QA(e);if(i)return{resolvedSymbol:i,name:i.name};let o=Y6e(e);if(o!==void 0)return{resolvedSymbol:e,name:o};if(e.flags&2097152){let s=t.getImmediateAliasedSymbol(e);if(s&&s.parent)return $7(s,t,r)}return e.escapedName!==\"default\"&&e.escapedName!==\"export=\"?{resolvedSymbol:e,name:e.getName()}:{resolvedSymbol:e,name:j7(e,r.target)}}function Y6e(e){return e.declarations&&ks(e.declarations,t=>{var r;if(pc(t))return(r=zr(ql(t.expression),Re))==null?void 0:r.text;if(Mu(t))return L.assert(t.name.text===\"default\",\"Expected the specifier to be a default export\"),t.propertyName&&t.propertyName.text})}var FY,GY,$6e=gt({\"src/services/exportInfoMap.ts\"(){\"use strict\";Fr(),FY=(e=>(e[e.Named=0]=\"Named\",e[e.Default=1]=\"Default\",e[e.Namespace=2]=\"Namespace\",e[e.CommonJS=3]=\"CommonJS\",e))(FY||{}),GY=(e=>(e[e.Named=0]=\"Named\",e[e.Default=1]=\"Default\",e[e.ExportEquals=2]=\"ExportEquals\",e[e.UMD=3]=\"UMD\",e))(GY||{})}});function Age(){let e=kg(99,!1);function t(i,o,s){return e4e(r(i,o,s),i)}function r(i,o,s){let l=0,f=0,d=[],{prefix:g,pushTemplate:m}=r4e(o);i=g+i;let v=g.length;m&&d.push(15),e.setText(i);let S=0,x=[],A=0;do{l=e.scan(),KA(l)||(w(),f=l);let C=e.getTextPos();if(Z6e(e.getTokenPos(),C,v,o4e(l),x),C>=i.length){let P=Q6e(e,l,Os(d));P!==void 0&&(S=P)}}while(l!==1);function w(){switch(l){case 43:case 68:!wge[f]&&e.reScanSlashToken()===13&&(l=13);break;case 29:f===79&&A++;break;case 31:A>0&&A--;break;case 131:case 152:case 148:case 134:case 153:A>0&&!s&&(l=79);break;case 15:d.push(l);break;case 18:d.length>0&&d.push(l);break;case 19:if(d.length>0){let C=Os(d);C===15?(l=e.reScanTemplateToken(!1),l===17?d.pop():L.assertEqual(l,16,\"Should have been a template middle.\")):(L.assertEqual(C,18,\"Should have been an open brace\"),d.pop())}break;default:if(!Xu(l))break;(f===24||Xu(f)&&Xu(l)&&!n4e(f,l))&&(l=79)}}return{endOfLineState:S,spans:x}}return{getClassificationsForLine:t,getEncodedLexicalClassifications:r}}function Q6e(e,t,r){switch(t){case 10:{if(!e.isUnterminated())return;let i=e.getTokenText(),o=i.length-1,s=0;for(;i.charCodeAt(o-s)===92;)s++;return s&1?i.charCodeAt(0)===34?3:2:void 0}case 3:return e.isUnterminated()?1:void 0;default:if(Hy(t)){if(!e.isUnterminated())return;switch(t){case 17:return 5;case 14:return 4;default:return L.fail(\"Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #\"+t)}}return r===15?6:void 0}}function Z6e(e,t,r,i,o){if(i===8)return;e===0&&r>0&&(e+=r);let s=t-e;s>0&&o.push(e-r,s,i)}function e4e(e,t){let r=[],i=e.spans,o=0;for(let l=0;l<i.length;l+=3){let f=i[l],d=i[l+1],g=i[l+2];if(o>=0){let m=f-o;m>0&&r.push({length:m,classification:4})}r.push({length:d,classification:t4e(g)}),o=f+d}let s=t.length-o;return s>0&&r.push({length:s,classification:4}),{entries:r,finalLexState:e.endOfLineState}}function t4e(e){switch(e){case 1:return 3;case 3:return 1;case 4:return 6;case 25:return 7;case 5:return 2;case 6:return 8;case 8:return 4;case 10:return 0;case 2:case 11:case 12:case 13:case 14:case 15:case 16:case 9:case 17:return 5;default:return}}function n4e(e,t){if(!ZX(e))return!0;switch(t){case 137:case 151:case 135:case 124:case 127:return!0;default:return!1}}function r4e(e){switch(e){case 3:return{prefix:`\"\\\\\n`};case 2:return{prefix:`'\\\\\n`};case 1:return{prefix:`/*\n`};case 4:return{prefix:\"`\\n\"};case 5:return{prefix:`}\n`,pushTemplate:!0};case 6:return{prefix:\"\",pushTemplate:!0};case 0:return{prefix:\"\"};default:return L.assertNever(e)}}function i4e(e){switch(e){case 41:case 43:case 44:case 39:case 40:case 47:case 48:case 49:case 29:case 31:case 32:case 33:case 102:case 101:case 128:case 150:case 34:case 35:case 36:case 37:case 50:case 52:case 51:case 55:case 56:case 74:case 73:case 78:case 70:case 71:case 72:case 64:case 65:case 66:case 68:case 69:case 63:case 27:case 60:case 75:case 76:case 77:return!0;default:return!1}}function a4e(e){switch(e){case 39:case 40:case 54:case 53:case 45:case 46:return!0;default:return!1}}function o4e(e){if(Xu(e))return 3;if(i4e(e)||a4e(e))return 5;if(e>=18&&e<=78)return 10;switch(e){case 8:return 4;case 9:return 25;case 10:return 6;case 13:return 7;case 7:case 3:case 2:return 1;case 5:case 4:return 8;case 79:default:return Hy(e)?6:2}}function Cge(e,t,r,i,o){return kge(BY(e,t,r,i,o))}function Ige(e,t){switch(t){case 264:case 260:case 261:case 259:case 228:case 215:case 216:e.throwIfCancellationRequested()}}function BY(e,t,r,i,o){let s=[];return r.forEachChild(function f(d){if(!(!d||!$8(o,d.pos,d.getFullWidth()))){if(Ige(t,d.kind),Re(d)&&!rc(d)&&i.has(d.escapedText)){let g=e.getSymbolAtLocation(d),m=g&&Lge(g,ZT(d),e);m&&l(d.getStart(r),d.getEnd(),m)}d.forEachChild(f)}}),{spans:s,endOfLineState:0};function l(f,d,g){let m=d-f;L.assert(m>0,`Classification had non-positive length of ${m}`),s.push(f),s.push(m),s.push(g)}}function Lge(e,t,r){let i=e.getFlags();if(i&2885600)return i&32?11:i&384?12:i&524288?16:i&1536?t&4||t&1&&s4e(e)?14:void 0:i&2097152?Lge(r.getAliasedSymbol(e),t,r):t&2?i&64?13:i&262144?15:void 0:void 0}function s4e(e){return vt(e.declarations,t=>Tc(t)&&Gh(t)===1)}function c4e(e){switch(e){case 1:return\"comment\";case 2:return\"identifier\";case 3:return\"keyword\";case 4:return\"number\";case 25:return\"bigint\";case 5:return\"operator\";case 6:return\"string\";case 8:return\"whitespace\";case 9:return\"text\";case 10:return\"punctuation\";case 11:return\"class name\";case 12:return\"enum name\";case 13:return\"interface name\";case 14:return\"module name\";case 15:return\"type parameter name\";case 16:return\"type alias name\";case 17:return\"parameter name\";case 18:return\"doc comment tag name\";case 19:return\"jsx open tag name\";case 20:return\"jsx close tag name\";case 21:return\"jsx self closing tag name\";case 22:return\"jsx attribute\";case 23:return\"jsx text\";case 24:return\"jsx attribute string literal value\";default:return}}function kge(e){L.assert(e.spans.length%3===0);let t=e.spans,r=[];for(let i=0;i<t.length;i+=3)r.push({textSpan:il(t[i],t[i+1]),classificationType:c4e(t[i+2])});return r}function Dge(e,t,r){return kge(UY(e,t,r))}function UY(e,t,r){let i=r.start,o=r.length,s=kg(99,!1,t.languageVariant,t.text),l=kg(99,!1,t.languageVariant,t.text),f=[];return q(t),{spans:f,endOfLineState:0};function d(W,Y,R){f.push(W),f.push(Y),f.push(R)}function g(W){for(s.setTextPos(W.pos);;){let Y=s.getTextPos();if(!hoe(t.text,Y))return Y;let R=s.scan(),ie=s.getTextPos(),$=ie-Y;if(!KA(R))return Y;switch(R){case 4:case 5:continue;case 2:case 3:m(W,R,Y,$),s.setTextPos(ie);continue;case 7:let fe=t.text,Z=fe.charCodeAt(Y);if(Z===60||Z===62){d(Y,$,1);continue}L.assert(Z===124||Z===61),w(fe,Y,ie);break;case 6:break;default:L.assertNever(R)}}}function m(W,Y,R,ie){if(Y===3){let $=Mde(t.text,R,ie);if($&&$.jsDoc){go($.jsDoc,W),S($.jsDoc);return}}else if(Y===2&&x(R,ie))return;v(R,ie)}function v(W,Y){d(W,Y,1)}function S(W){var Y,R,ie,$,fe,Z,U,re;let le=W.pos;if(W.tags)for(let ge of W.tags){ge.pos!==le&&v(le,ge.pos-le),d(ge.pos,1,10),d(ge.tagName.pos,ge.tagName.end-ge.tagName.pos,18),le=ge.tagName.end;let X=ge.tagName.end;switch(ge.kind){case 344:let Ve=ge;_e(Ve),X=Ve.isNameFirst&&((Y=Ve.typeExpression)==null?void 0:Y.end)||Ve.name.end;break;case 351:let we=ge;X=we.isNameFirst&&((R=we.typeExpression)==null?void 0:R.end)||we.name.end;break;case 348:A(ge),le=ge.end,X=ge.typeParameters.end;break;case 349:let ke=ge;X=((ie=ke.typeExpression)==null?void 0:ie.kind)===312&&(($=ke.fullName)==null?void 0:$.end)||((fe=ke.typeExpression)==null?void 0:fe.end)||X;break;case 341:X=ge.typeExpression.end;break;case 347:q(ge.typeExpression),le=ge.end,X=ge.typeExpression.end;break;case 346:case 343:X=ge.typeExpression.end;break;case 345:q(ge.typeExpression),le=ge.end,X=((Z=ge.typeExpression)==null?void 0:Z.end)||X;break;case 350:X=((U=ge.name)==null?void 0:U.end)||X;break;case 331:case 332:X=ge.class.end;break;case 352:q(ge.typeExpression),le=ge.end,X=((re=ge.typeExpression)==null?void 0:re.end)||X;break}typeof ge.comment==\"object\"?v(ge.comment.pos,ge.comment.end-ge.comment.pos):typeof ge.comment==\"string\"&&v(X,ge.end-X)}le!==W.end&&v(le,W.end-le);return;function _e(ge){ge.isNameFirst&&(v(le,ge.name.pos-le),d(ge.name.pos,ge.name.end-ge.name.pos,17),le=ge.name.end),ge.typeExpression&&(v(le,ge.typeExpression.pos-le),q(ge.typeExpression),le=ge.typeExpression.end),ge.isNameFirst||(v(le,ge.name.pos-le),d(ge.name.pos,ge.name.end-ge.name.pos,17),le=ge.name.end)}}function x(W,Y){let R=/^(\\/\\/\\/\\s*)(<)(?:(\\S+)((?:[^/]|\\/[^>])*)(\\/>)?)?/im,ie=/(\\s)(\\S+)(\\s*)(=)(\\s*)('[^']+'|\"[^\"]+\")/img,$=t.text.substr(W,Y),fe=R.exec($);if(!fe||!fe[3]||!(fe[3]in iw))return!1;let Z=W;v(Z,fe[1].length),Z+=fe[1].length,d(Z,fe[2].length,10),Z+=fe[2].length,d(Z,fe[3].length,21),Z+=fe[3].length;let U=fe[4],re=Z;for(;;){let _e=ie.exec(U);if(!_e)break;let ge=Z+_e.index+_e[1].length;ge>re&&(v(re,ge-re),re=ge),d(re,_e[2].length,22),re+=_e[2].length,_e[3].length&&(v(re,_e[3].length),re+=_e[3].length),d(re,_e[4].length,5),re+=_e[4].length,_e[5].length&&(v(re,_e[5].length),re+=_e[5].length),d(re,_e[6].length,24),re+=_e[6].length}Z+=fe[4].length,Z>re&&v(re,Z-re),fe[5]&&(d(Z,fe[5].length,10),Z+=fe[5].length);let le=W+Y;return Z<le&&v(Z,le-Z),!0}function A(W){for(let Y of W.getChildren())q(Y)}function w(W,Y,R){let ie;for(ie=Y;ie<R&&!Wl(W.charCodeAt(ie));ie++);for(d(Y,ie-Y,1),l.setTextPos(ie);l.getTextPos()<R;)C()}function C(){let W=l.getTextPos(),Y=l.scan(),R=l.getTextPos(),ie=B(Y);ie&&d(W,R-W,ie)}function P(W){if(dm(W)||rc(W))return!0;let Y=F(W);if(!Z1(W)&&W.kind!==11&&Y===void 0)return!1;let R=W.kind===11?W.pos:g(W),ie=W.end-R;if(L.assert(ie>=0),ie>0){let $=Y||B(W.kind,W);$&&d(R,ie,$)}return!0}function F(W){switch(W.parent&&W.parent.kind){case 283:if(W.parent.tagName===W)return 19;break;case 284:if(W.parent.tagName===W)return 20;break;case 282:if(W.parent.tagName===W)return 21;break;case 288:if(W.parent.name===W)return 22;break}}function B(W,Y){if(Xu(W))return 3;if((W===29||W===31)&&Y&&Ohe(Y.parent))return 10;if(Phe(W)){if(Y){let R=Y.parent;if(W===63&&(R.kind===257||R.kind===169||R.kind===166||R.kind===288)||R.kind===223||R.kind===221||R.kind===222||R.kind===224)return 5}return 10}else{if(W===8)return 4;if(W===9)return 25;if(W===10)return Y&&Y.parent.kind===288?24:6;if(W===13)return 6;if(Hy(W))return 6;if(W===11)return 23;if(W===79){if(Y){switch(Y.parent.kind){case 260:return Y.parent.name===Y?11:void 0;case 165:return Y.parent.name===Y?15:void 0;case 261:return Y.parent.name===Y?13:void 0;case 263:return Y.parent.name===Y?12:void 0;case 264:return Y.parent.name===Y?14:void 0;case 166:return Y.parent.name===Y?LT(Y)?3:17:void 0}if(Ch(Y.parent))return 3}return 2}}}function q(W){if(W&&Q8(i,o,W.pos,W.getFullWidth())){Ige(e,W.kind);for(let Y of W.getChildren(t))P(Y)||q(Y)}}}var wge,l4e=gt({\"src/services/classifier.ts\"(){\"use strict\";Fr(),wge=gae([79,10,8,9,13,108,45,46,21,23,19,110,95],e=>e,()=>!0)}}),Q7,u4e=gt({\"src/services/documentHighlights.ts\"(){\"use strict\";Fr(),(e=>{function t(Z,U,re,le,_e){let ge=ef(re,le);if(ge.parent&&(Xm(ge.parent)&&ge.parent.tagName===ge||GS(ge.parent))){let{openingElement:X,closingElement:Ve}=ge.parent.parent,we=[X,Ve].map(({tagName:ke})=>r(ke,re));return[{fileName:re.fileName,highlightSpans:we}]}return i(le,ge,Z,U,_e)||o(ge,re)}e.getDocumentHighlights=t;function r(Z,U){return{fileName:U.fileName,textSpan:Du(Z,U),kind:\"none\"}}function i(Z,U,re,le,_e){let ge=new Set(_e.map(ke=>ke.fileName)),X=js.getReferenceEntriesForNode(Z,U,re,_e,le,void 0,ge);if(!X)return;let Ve=KD(X.map(js.toHighlightSpan),ke=>ke.fileName,ke=>ke.span),we=Dl(re.useCaseSensitiveFileNames());return lo(UD(Ve.entries(),([ke,Pe])=>{if(!ge.has(ke)){if(!re.redirectTargetsMap.has(Ts(ke,re.getCurrentDirectory(),we)))return;let Ce=re.getSourceFile(ke);ke=wr(_e,Be=>!!Be.redirectInfo&&Be.redirectInfo.redirectTarget===Ce).fileName,L.assert(ge.has(ke))}return{fileName:ke,highlightSpans:Pe}}))}function o(Z,U){let re=s(Z,U);return re&&[{fileName:U.fileName,highlightSpans:re}]}function s(Z,U){switch(Z.kind){case 99:case 91:return MT(Z.parent)?ie(Z.parent,U):void 0;case 105:return le(Z.parent,j_,q);case 109:return le(Z.parent,Fz,B);case 111:case 83:case 96:let ge=Z.kind===83?Z.parent.parent:Z.parent;return le(ge,mO,F);case 107:return le(Z.parent,pO,P);case 82:case 88:return yO(Z.parent)||CL(Z.parent)?le(Z.parent.parent.parent,pO,P):void 0;case 81:case 86:return le(Z.parent,hI,C);case 97:case 115:case 90:return le(Z.parent,X=>Wy(X,!0),w);case 135:return re(Ec,[135]);case 137:case 151:return re(rb,[137,151]);case 133:return le(Z.parent,v2,W);case 132:return _e(W(Z));case 125:return _e(Y(Z));case 101:return;default:return Rg(Z.kind)&&(Kl(Z.parent)||Bc(Z.parent))?_e(S(Z.kind,Z.parent)):void 0}function re(ge,X){return le(Z.parent,ge,Ve=>{var we;return Zi((we=zr(Ve,$p))==null?void 0:we.symbol.declarations,ke=>ge(ke)?wr(ke.getChildren(U),Pe=>ya(X,Pe.kind)):void 0)})}function le(ge,X,Ve){return X(ge)?_e(Ve(ge,U)):void 0}function _e(ge){return ge&&ge.map(X=>r(X,U))}}function l(Z){return Fz(Z)?[Z]:mO(Z)?Qi(Z.catchClause?l(Z.catchClause):Z.tryBlock&&l(Z.tryBlock),Z.finallyBlock&&l(Z.finallyBlock)):Ia(Z)?void 0:g(Z,l)}function f(Z){let U=Z;for(;U.parent;){let re=U.parent;if(bT(re)||re.kind===308)return re;if(mO(re)&&re.tryBlock===U&&re.catchClause)return U;U=re}}function d(Z){return hI(Z)?[Z]:Ia(Z)?void 0:g(Z,d)}function g(Z,U){let re=[];return Z.forEachChild(le=>{let _e=U(le);_e!==void 0&&re.push(...qD(_e))}),re}function m(Z,U){let re=v(U);return!!re&&re===Z}function v(Z){return jn(Z,U=>{switch(U.kind){case 252:if(Z.kind===248)return!1;case 245:case 246:case 247:case 244:case 243:return!Z.label||fe(U,Z.label.escapedText);default:return Ia(U)&&\"quit\"}})}function S(Z,U){return Zi(x(U,gS(Z)),re=>z2(re,Z))}function x(Z,U){let re=Z.parent;switch(re.kind){case 265:case 308:case 238:case 292:case 293:return U&256&&sl(Z)?[...Z.members,Z]:re.statements;case 173:case 171:case 259:return[...re.parameters,...Yr(re.parent)?re.parent.members:[]];case 260:case 228:case 261:case 184:let le=re.members;if(U&92){let _e=wr(re.members,Ec);if(_e)return[...le,..._e.parameters]}else if(U&256)return[...le,re];return le;case 207:return;default:L.assertNever(re,\"Invalid container kind.\")}}function A(Z,U,...re){return U&&ya(re,U.kind)?(Z.push(U),!0):!1}function w(Z){let U=[];if(A(U,Z.getFirstToken(),97,115,90)&&Z.kind===243){let re=Z.getChildren();for(let le=re.length-1;le>=0&&!A(U,re[le],115);le--);}return mn(d(Z.statement),re=>{m(Z,re)&&A(U,re.getFirstToken(),81,86)}),U}function C(Z){let U=v(Z);if(U)switch(U.kind){case 245:case 246:case 247:case 243:case 244:return w(U);case 252:return P(U)}}function P(Z){let U=[];return A(U,Z.getFirstToken(),107),mn(Z.caseBlock.clauses,re=>{A(U,re.getFirstToken(),82,88),mn(d(re),le=>{m(Z,le)&&A(U,le.getFirstToken(),81)})}),U}function F(Z,U){let re=[];if(A(re,Z.getFirstToken(),111),Z.catchClause&&A(re,Z.catchClause.getFirstToken(),83),Z.finallyBlock){let le=Yo(Z,96,U);A(re,le,96)}return re}function B(Z,U){let re=f(Z);if(!re)return;let le=[];return mn(l(re),_e=>{le.push(Yo(_e,109,U))}),bT(re)&&vT(re,_e=>{le.push(Yo(_e,105,U))}),le}function q(Z,U){let re=Xd(Z);if(!re)return;let le=[];return vT(Ga(re.body,Va),_e=>{le.push(Yo(_e,105,U))}),mn(l(re.body),_e=>{le.push(Yo(_e,109,U))}),le}function W(Z){let U=Xd(Z);if(!U)return;let re=[];return U.modifiers&&U.modifiers.forEach(le=>{A(re,le,132)}),pa(U,le=>{R(le,_e=>{v2(_e)&&A(re,_e.getFirstToken(),133)})}),re}function Y(Z){let U=Xd(Z);if(!U)return;let re=[];return pa(U,le=>{R(le,_e=>{f3(_e)&&A(re,_e.getFirstToken(),125)})}),re}function R(Z,U){U(Z),!Ia(Z)&&!Yr(Z)&&!ku(Z)&&!Tc(Z)&&!Ep(Z)&&!bi(Z)&&pa(Z,re=>R(re,U))}function ie(Z,U){let re=$(Z,U),le=[];for(let _e=0;_e<re.length;_e++){if(re[_e].kind===91&&_e<re.length-1){let ge=re[_e],X=re[_e+1],Ve=!0;for(let we=X.getStart(U)-1;we>=ge.end;we--)if(!Yp(U.text.charCodeAt(we))){Ve=!1;break}if(Ve){le.push({fileName:U.fileName,textSpan:Wc(ge.getStart(),X.end),kind:\"reference\"}),_e++;continue}}le.push(r(re[_e],U))}return le}function $(Z,U){let re=[];for(;MT(Z.parent)&&Z.parent.elseStatement===Z;)Z=Z.parent;for(;;){let le=Z.getChildren(U);A(re,le[0],99);for(let _e=le.length-1;_e>=0&&!A(re,le[_e],91);_e--);if(!Z.elseStatement||!MT(Z.elseStatement))break;Z=Z.elseStatement}return re}function fe(Z,U){return!!jn(Z.parent,re=>J0(re)?re.label.escapedText===U:\"quit\")}})(Q7||(Q7={}))}});function Z7(e){return!!e.sourceFile}function VY(e,t){return Rge(e,t)}function Rge(e,t=\"\",r){let i=new Map,o=Dl(!!e);function s(){let C=lo(i.keys()).filter(P=>P&&P.charAt(0)===\"_\").map(P=>{let F=i.get(P),B=[];return F.forEach((q,W)=>{Z7(q)?B.push({name:W,scriptKind:q.sourceFile.scriptKind,refCount:q.languageServiceRefCount}):q.forEach((Y,R)=>B.push({name:W,scriptKind:R,refCount:Y.languageServiceRefCount}))}),B.sort((q,W)=>W.refCount-q.refCount),{bucket:P,sourceFiles:B}});return JSON.stringify(C,void 0,2)}function l(C){return typeof C.getCompilationSettings==\"function\"?C.getCompilationSettings():C}function f(C,P,F,B,q,W){let Y=Ts(C,t,o),R=e5(l(P));return d(C,Y,P,R,F,B,q,W)}function d(C,P,F,B,q,W,Y,R){return S(C,P,F,B,q,W,!0,Y,R)}function g(C,P,F,B,q,W){let Y=Ts(C,t,o),R=e5(l(P));return m(C,Y,P,R,F,B,q,W)}function m(C,P,F,B,q,W,Y,R){return S(C,P,l(F),B,q,W,!1,Y,R)}function v(C,P){let F=Z7(C)?C:C.get(L.checkDefined(P,\"If there are more than one scriptKind's for same document the scriptKind should be provided\"));return L.assert(P===void 0||!F||F.sourceFile.scriptKind===P,`Script kind should match provided ScriptKind:${P} and sourceFile.scriptKind: ${F?.sourceFile.scriptKind}, !entry: ${!F}`),F}function S(C,P,F,B,q,W,Y,R,ie){var $,fe,Z,U;R=h4(C,R);let re=l(F),le=F===re?void 0:F,_e=R===6?100:Do(re),ge=typeof ie==\"object\"?ie:{languageVersion:_e,impliedNodeFormat:le&&NF(P,(U=(Z=(fe=($=le.getCompilerHost)==null?void 0:$.call(le))==null?void 0:fe.getModuleResolutionCache)==null?void 0:Z.call(fe))==null?void 0:U.getPackageJsonInfoCache(),le,re),setExternalModuleIndicator:OR(re)};ge.languageVersion=_e;let X=i.size,Ve=Oge(B,ge.impliedNodeFormat),we=VD(i,Ve,()=>new Map);if(ai){i.size>X&&ai.instant(ai.Phase.Session,\"createdDocumentRegistryBucket\",{configFilePath:re.configFilePath,key:Ve});let Ie=!Fu(P)&&Ld(i,(Be,Ne)=>Ne!==Ve&&Be.has(P)&&Ne);Ie&&ai.instant(ai.Phase.Session,\"documentRegistryBucketOverlap\",{path:P,key1:Ie,key2:Ve})}let ke=we.get(P),Pe=ke&&v(ke,R);if(!Pe&&r){let Ie=r.getDocument(Ve,P);Ie&&(L.assert(Y),Pe={sourceFile:Ie,languageServiceRefCount:0},Ce())}if(Pe)Pe.sourceFile.version!==W&&(Pe.sourceFile=_$(Pe.sourceFile,q,W,q.getChangeRange(Pe.sourceFile.scriptSnapshot)),r&&r.setDocument(Ve,P,Pe.sourceFile)),Y&&Pe.languageServiceRefCount++;else{let Ie=f5(C,q,ge,W,!1,R);r&&r.setDocument(Ve,P,Ie),Pe={sourceFile:Ie,languageServiceRefCount:1},Ce()}return L.assert(Pe.languageServiceRefCount!==0),Pe.sourceFile;function Ce(){if(!ke)we.set(P,Pe);else if(Z7(ke)){let Ie=new Map;Ie.set(ke.sourceFile.scriptKind,ke),Ie.set(R,Pe),we.set(P,Ie)}else ke.set(R,Pe)}}function x(C,P,F,B){let q=Ts(C,t,o),W=e5(P);return A(q,W,F,B)}function A(C,P,F,B){let q=L.checkDefined(i.get(Oge(P,B))),W=q.get(C),Y=v(W,F);Y.languageServiceRefCount--,L.assert(Y.languageServiceRefCount>=0),Y.languageServiceRefCount===0&&(Z7(W)?q.delete(C):(W.delete(F),W.size===1&&q.set(C,FD(W.values(),Ks))))}function w(C,P){return lo(i.entries(),([F,B])=>{let q=B.get(C),W=q&&v(q,P);return[F,W&&W.languageServiceRefCount]})}return{acquireDocument:f,acquireDocumentWithKey:d,updateDocument:g,updateDocumentWithKey:m,releaseDocument:x,releaseDocumentWithKey:A,getLanguageServiceRefCounts:w,reportStats:s,getKeyForCompilationSettings:e5}}function e5(e){return JJ(e,V3)}function Oge(e,t){return t?`${e}|${t}`:e}var d4e=gt({\"src/services/documentRegistry.ts\"(){\"use strict\";Fr()}});function Nge(e,t,r,i,o,s,l){let f=xR(i),d=Dl(f),g=jY(t,r,d,l),m=jY(r,t,d,l);return nr.ChangeTracker.with({host:i,formatContext:o,preferences:s},v=>{_4e(e,v,g,t,r,i.getCurrentDirectory(),f),p4e(e,v,g,m,i,d)})}function jY(e,t,r,i){let o=r(e);return l=>{let f=i&&i.tryGetSourcePosition({fileName:l,pos:0}),d=s(f?f.fileName:l);return f?d===void 0?void 0:f4e(f.fileName,d,l,r):d};function s(l){if(r(l)===o)return t;let f=IW(l,o,r);return f===void 0?void 0:t+\"/\"+f}}function f4e(e,t,r,i){let o=_w(e,t,i);return HY(ni(r),o)}function _4e(e,t,r,i,o,s,l){let{configFile:f}=e.getCompilerOptions();if(!f)return;let d=ni(f.fileName),g=LI(f);if(!g)return;WY(g,(x,A)=>{switch(A){case\"files\":case\"include\":case\"exclude\":{if(m(x)||A!==\"include\"||!fu(x.initializer))return;let C=Zi(x.initializer.elements,F=>yo(F)?F.text:void 0);if(C.length===0)return;let P=tL(d,[],C,l,s);Qy(L.checkDefined(P.includeFilePattern),l).test(i)&&!Qy(L.checkDefined(P.includeFilePattern),l).test(o)&&t.insertNodeAfter(f,To(x.initializer.elements),D.createStringLiteral(S(o)));return}case\"compilerOptions\":WY(x.initializer,(w,C)=>{let P=gJ(C);L.assert(P?.type!==\"listOrElement\"),P&&(P.isFilePath||P.type===\"list\"&&P.element.isFilePath)?m(w):C===\"paths\"&&WY(w.initializer,F=>{if(fu(F.initializer))for(let B of F.initializer.elements)v(B)})});return}});function m(x){let A=fu(x.initializer)?x.initializer.elements:[x.initializer],w=!1;for(let C of A)w=v(C)||w;return w}function v(x){if(!yo(x))return!1;let A=HY(d,x.text),w=r(A);return w!==void 0?(t.replaceRangeWithText(f,Mge(x,f),S(w)),!0):!1}function S(x){return Xp(d,x,!l)}}function p4e(e,t,r,i,o,s){let l=e.getSourceFiles();for(let f of l){let d=r(f.fileName),g=d??f.fileName,m=ni(g),v=i(f.fileName),S=v||f.fileName,x=ni(S),A=d!==void 0||v!==void 0;g4e(f,t,w=>{if(!Jd(w))return;let C=HY(x,w),P=r(C);return P===void 0?void 0:S0(Xp(m,P,s))},w=>{let C=e.getTypeChecker().getSymbolAtLocation(w);if(C?.declarations&&C.declarations.some(F=>lu(F)))return;let P=v!==void 0?Pge(w,FL(w.text,S,e.getCompilerOptions(),o),r,l):h4e(C,w,f,e,o,r);return P!==void 0&&(P.updated||A&&Jd(w.text))?Q0.updateModuleSpecifier(e.getCompilerOptions(),f,s(g),P.newFileName,$S(e,o),w.text):void 0})}}function m4e(e,t){return So(vi(e,t))}function HY(e,t){return S0(m4e(e,t))}function h4e(e,t,r,i,o,s){var l;if(e){let f=wr(e.declarations,Li).fileName,d=s(f);return d===void 0?{newFileName:f,updated:!1}:{newFileName:d,updated:!0}}else{let f=W_(r,t),d=o.resolveModuleNameLiterals||!o.resolveModuleNames?(l=r.resolvedModules)==null?void 0:l.get(t.text,f):o.getResolvedModuleWithFailedLookupLocationsFromCache&&o.getResolvedModuleWithFailedLookupLocationsFromCache(t.text,r.fileName,f);return Pge(t,d,s,i.getSourceFiles())}}function Pge(e,t,r,i){if(!t)return;if(t.resolvedModule){let d=f(t.resolvedModule.resolvedFileName);if(d)return d}let o=mn(t.failedLookupLocations,s)||Jd(e.text)&&mn(t.failedLookupLocations,l);if(o)return o;return t.resolvedModule&&{newFileName:t.resolvedModule.resolvedFileName,updated:!1};function s(d){let g=r(d);return g&&wr(i,m=>m.fileName===g)?l(d):void 0}function l(d){return Oc(d,\"/package.json\")?void 0:f(d)}function f(d){let g=r(d);return g&&{newFileName:g,updated:!0}}}function g4e(e,t,r,i){for(let o of e.referencedFiles||Je){let s=r(o.fileName);s!==void 0&&s!==e.text.slice(o.pos,o.end)&&t.replaceRangeWithText(e,o,s)}for(let o of e.imports){let s=i(o);s!==void 0&&s!==o.text&&t.replaceRangeWithText(e,Mge(o,e),s)}}function Mge(e,t){return Gf(e.getStart(t)+1,e.end-1)}function WY(e,t){if(rs(e))for(let r of e.properties)yl(r)&&yo(r.name)&&t(r,r.name.text)}var y4e=gt({\"src/services/getEditsForFileRename.ts\"(){\"use strict\";Fr()}});function $N(e,t){return{kind:e,isCaseSensitive:t}}function Fge(e){let t=new Map,r=e.trim().split(\".\").map(i=>T4e(i.trim()));if(!r.some(i=>!i.subWordTextChunks.length))return{getFullMatch:(i,o)=>v4e(i,o,r,t),getMatchForLastSegmentOfPattern:i=>zY(i,To(r),t),patternContainsDots:r.length>1}}function v4e(e,t,r,i){if(!zY(t,To(r),i)||r.length-1>e.length)return;let s;for(let l=r.length-2,f=e.length-1;l>=0;l-=1,f-=1)s=Uge(s,zY(e[f],r[l],i));return s}function Gge(e,t){let r=t.get(e);return r||t.set(e,r=Wge(e)),r}function Bge(e,t,r){let i=S4e(e,t.textLowerCase);if(i===0)return $N(t.text.length===e.length?0:1,na(e,t.text));if(t.isLowerCase){if(i===-1)return;let o=Gge(e,r);for(let s of o)if(JY(e,s,t.text,!0))return $N(2,JY(e,s,t.text,!1));if(t.text.length<e.length&&ex(e.charCodeAt(i)))return $N(2,!1)}else{if(e.indexOf(t.text)>0)return $N(2,!0);if(t.characterSpans.length>0){let o=Gge(e,r),s=Vge(e,o,t,!1)?!0:Vge(e,o,t,!0)?!1:void 0;if(s!==void 0)return $N(3,s)}}}function zY(e,t,r){if(t5(t.totalTextChunk.text,s=>s!==32&&s!==42)){let s=Bge(e,t.totalTextChunk,r);if(s)return s}let i=t.subWordTextChunks,o;for(let s of i)o=Uge(o,Bge(e,s,r));return o}function Uge(e,t){return WU([e,t],b4e)}function b4e(e,t){return e===void 0?1:t===void 0?-1:Es(e.kind,t.kind)||g0(!e.isCaseSensitive,!t.isCaseSensitive)}function JY(e,t,r,i,o={start:0,length:r.length}){return o.length<=t.length&&Kge(0,o.length,s=>E4e(r.charCodeAt(o.start+s),e.charCodeAt(t.start+s),i))}function E4e(e,t,r){return r?KY(e)===KY(t):e===t}function Vge(e,t,r,i){let o=r.characterSpans,s=0,l=0,f,d;for(;;){if(l===o.length)return!0;if(s===t.length)return!1;let g=t[s],m=!1;for(;l<o.length;l++){let v=o[l];if(m&&(!ex(r.text.charCodeAt(o[l-1].start))||!ex(r.text.charCodeAt(o[l].start)))||!JY(e,g,r.text,i,v))break;m=!0,f=f===void 0?s:f,d=d===void 0?!0:d,g=il(g.start+v.length,g.length-v.length)}!m&&d!==void 0&&(d=!1),s++}}function T4e(e){return{totalTextChunk:XY(e),subWordTextChunks:A4e(e)}}function ex(e){if(e>=65&&e<=90)return!0;if(e<127||!W8(e,99))return!1;let t=String.fromCharCode(e);return t===t.toUpperCase()}function jge(e){if(e>=97&&e<=122)return!0;if(e<127||!W8(e,99))return!1;let t=String.fromCharCode(e);return t===t.toLowerCase()}function S4e(e,t){let r=e.length-t.length;for(let i=0;i<=r;i++)if(t5(t,(o,s)=>KY(e.charCodeAt(s+i))===o))return i;return-1}function KY(e){return e>=65&&e<=90?97+(e-65):e<127?e:String.fromCharCode(e).toLowerCase().charCodeAt(0)}function qY(e){return e>=48&&e<=57}function x4e(e){return ex(e)||jge(e)||qY(e)||e===95||e===36}function A4e(e){let t=[],r=0,i=0;for(let o=0;o<e.length;o++){let s=e.charCodeAt(o);x4e(s)?(i===0&&(r=o),i++):i>0&&(t.push(XY(e.substr(r,i))),i=0)}return i>0&&t.push(XY(e.substr(r,i))),t}function XY(e){let t=e.toLowerCase();return{text:e,textLowerCase:t,isLowerCase:e===t,characterSpans:Hge(e)}}function Hge(e){return zge(e,!1)}function Wge(e){return zge(e,!0)}function zge(e,t){let r=[],i=0;for(let o=1;o<e.length;o++){let s=qY(e.charCodeAt(o-1)),l=qY(e.charCodeAt(o)),f=I4e(e,t,o),d=t&&C4e(e,o,i);(YY(e.charCodeAt(o-1))||YY(e.charCodeAt(o))||s!==l||f||d)&&(Jge(e,i,o)||r.push(il(i,o-i)),i=o)}return Jge(e,i,e.length)||r.push(il(i,e.length-i)),r}function YY(e){switch(e){case 33:case 34:case 35:case 37:case 38:case 39:case 40:case 41:case 42:case 44:case 45:case 46:case 47:case 58:case 59:case 63:case 64:case 91:case 92:case 93:case 95:case 123:case 125:return!0}return!1}function Jge(e,t,r){return t5(e,i=>YY(i)&&i!==95,t,r)}function C4e(e,t,r){return t!==r&&t+1<e.length&&ex(e.charCodeAt(t))&&jge(e.charCodeAt(t+1))&&t5(e,ex,r,t)}function I4e(e,t,r){let i=ex(e.charCodeAt(r-1));return ex(e.charCodeAt(r))&&(!t||!i)}function Kge(e,t,r){for(let i=e;i<t;i++)if(!r(i))return!1;return!0}function t5(e,t,r=0,i=e.length){return Kge(r,i,o=>t(e.charCodeAt(o),o))}var n5,L4e=gt({\"src/services/patternMatcher.ts\"(){\"use strict\";Fr(),n5=(e=>(e[e.exact=0]=\"exact\",e[e.prefix=1]=\"prefix\",e[e.substring=2]=\"substring\",e[e.camelCase=3]=\"camelCase\",e))(n5||{})}});function qge(e,t=!0,r=!1){let i={languageVersion:1,pragmas:void 0,checkJsDirective:void 0,referencedFiles:[],typeReferenceDirectives:[],libReferenceDirectives:[],amdDependencies:[],hasNoDefaultLib:void 0,moduleName:void 0},o=[],s,l,f,d=0,g=!1;function m(){return l=f,f=$l.scan(),f===18?d++:f===19&&d--,f}function v(){let W=$l.getTokenValue(),Y=$l.getTokenPos();return{fileName:W,pos:Y,end:Y+W.length}}function S(){s||(s=[]),s.push({ref:v(),depth:d})}function x(){o.push(v()),A()}function A(){d===0&&(g=!0)}function w(){let W=$l.getToken();return W===136?(W=m(),W===142&&(W=m(),W===10&&S()),!0):!1}function C(){if(l===24)return!1;let W=$l.getToken();if(W===100){if(W=m(),W===20){if(W=m(),W===10||W===14)return x(),!0}else{if(W===10)return x(),!0;if(W===154&&$l.lookAhead(()=>{let R=$l.scan();return R!==158&&(R===41||R===18||R===79||Xu(R))})&&(W=m()),W===79||Xu(W))if(W=m(),W===158){if(W=m(),W===10)return x(),!0}else if(W===63){if(F(!0))return!0}else if(W===27)W=m();else return!0;if(W===18){for(W=m();W!==19&&W!==1;)W=m();W===19&&(W=m(),W===158&&(W=m(),W===10&&x()))}else W===41&&(W=m(),W===128&&(W=m(),(W===79||Xu(W))&&(W=m(),W===158&&(W=m(),W===10&&x()))))}return!0}return!1}function P(){let W=$l.getToken();if(W===93){if(A(),W=m(),W===154&&$l.lookAhead(()=>{let R=$l.scan();return R===41||R===18})&&(W=m()),W===18){for(W=m();W!==19&&W!==1;)W=m();W===19&&(W=m(),W===158&&(W=m(),W===10&&x()))}else if(W===41)W=m(),W===158&&(W=m(),W===10&&x());else if(W===100&&(W=m(),W===154&&$l.lookAhead(()=>{let R=$l.scan();return R===79||Xu(R)})&&(W=m()),(W===79||Xu(W))&&(W=m(),W===63&&F(!0))))return!0;return!0}return!1}function F(W,Y=!1){let R=W?m():$l.getToken();return R===147?(R=m(),R===20&&(R=m(),(R===10||Y&&R===14)&&x()),!0):!1}function B(){let W=$l.getToken();if(W===79&&$l.getTokenValue()===\"define\"){if(W=m(),W!==20)return!0;if(W=m(),W===10||W===14)if(W=m(),W===27)W=m();else return!0;if(W!==22)return!0;for(W=m();W!==23&&W!==1;)(W===10||W===14)&&x(),W=m();return!0}return!1}function q(){for($l.setText(e),m();$l.getToken()!==1;){if($l.getToken()===15){let W=[$l.getToken()];e:for(;Fn(W);){let Y=$l.scan();switch(Y){case 1:break e;case 100:C();break;case 15:W.push(Y);break;case 18:Fn(W)&&W.push(Y);break;case 19:Fn(W)&&(Os(W)===15?$l.reScanTemplateToken(!1)===17&&W.pop():W.pop());break}}m()}w()||C()||P()||r&&(F(!1,!0)||B())||m()}$l.setText(void 0)}if(t&&q(),dJ(i,e),fJ(i,Ba),g){if(s)for(let W of s)o.push(W.ref);return{referencedFiles:i.referencedFiles,typeReferenceDirectives:i.typeReferenceDirectives,libReferenceDirectives:i.libReferenceDirectives,importedFiles:o,isLibFile:!!i.hasNoDefaultLib,ambientExternalModules:void 0}}else{let W;if(s)for(let Y of s)Y.depth===0?(W||(W=[]),W.push(Y.ref.fileName)):o.push(Y.ref);return{referencedFiles:i.referencedFiles,typeReferenceDirectives:i.typeReferenceDirectives,libReferenceDirectives:i.libReferenceDirectives,importedFiles:o,isLibFile:!!i.hasNoDefaultLib,ambientExternalModules:W}}}var k4e=gt({\"src/services/preProcess.ts\"(){\"use strict\";Fr()}});function Xge(e){let t=Dl(e.useCaseSensitiveFileNames()),r=e.getCurrentDirectory(),i=new Map,o=new Map;return{tryGetSourcePosition:f,tryGetGeneratedPosition:d,toLineColumnOffset:S,clearCache:x};function s(A){return Ts(A,r,t)}function l(A,w){let C=s(A),P=o.get(C);if(P)return P;let F;if(e.getDocumentPositionMapper)F=e.getDocumentPositionMapper(A,w);else if(e.readFile){let B=v(A);F=B&&Yge({getSourceFileLike:v,getCanonicalFileName:t,log:q=>e.log(q)},A,F_e(B.text,Sh(B)),q=>!e.fileExists||e.fileExists(q)?e.readFile(q):void 0)}return o.set(C,F||yF),F||yF}function f(A){if(!Fu(A.fileName)||!g(A.fileName))return;let C=l(A.fileName).getSourcePosition(A);return!C||C===A?void 0:f(C)||C}function d(A){if(Fu(A.fileName))return;let w=g(A.fileName);if(!w)return;let C=e.getProgram();if(C.isSourceOfProjectReferenceRedirect(w.fileName))return;let P=C.getCompilerOptions(),F=Ss(P),B=F?ld(F)+\".d.ts\":$H(A.fileName,C.getCompilerOptions(),r,C.getCommonSourceDirectory(),t);if(B===void 0)return;let q=l(B,A.fileName).getGeneratedPosition(A);return q===A?void 0:q}function g(A){let w=e.getProgram();if(!w)return;let C=s(A),P=w.getSourceFileByPath(C);return P&&P.resolvedPath===C?P:void 0}function m(A){let w=s(A),C=i.get(w);if(C!==void 0)return C||void 0;if(!e.readFile||e.fileExists&&!e.fileExists(w)){i.set(w,!1);return}let P=e.readFile(w),F=P?D4e(P):!1;return i.set(w,F),F||void 0}function v(A){return e.getSourceFileLike?e.getSourceFileLike(A):g(A)||m(A)}function S(A,w){return v(A).getLineAndCharacterOfPosition(w)}function x(){i.clear(),o.clear()}}function Yge(e,t,r,i){let o=G_e(r);if(o){let f=Qge.exec(o);if(f){if(f[1]){let d=f[1];return $ge(e,nle(xl,d),t)}o=void 0}}let s=[];o&&s.push(o),s.push(t+\".map\");let l=o&&_a(o,ni(t));for(let f of s){let d=_a(f,ni(t)),g=i(d,l);if(Ta(g))return $ge(e,g,d);if(g!==void 0)return g||void 0}}function $ge(e,t,r){let i=bK(t);if(!(!i||!i.sources||!i.file||!i.mappings)&&!(i.sourcesContent&&i.sourcesContent.some(Ta)))return H_e(e,i,r)}function D4e(e,t){return{text:e,lineMap:t,getLineAndCharacterOfPosition(r){return yw(Sh(this),r)}}}var Qge,w4e=gt({\"src/services/sourcemaps.ts\"(){\"use strict\";Fr(),Fr(),Qge=/^data:(?:application\\/json(?:;charset=[uU][tT][fF]-8);base64,([A-Za-z0-9+\\/=]+)$)?/}});function $Y(e,t,r){t.getSemanticDiagnostics(e,r);let i=[],o=t.getTypeChecker();!(e.impliedNodeFormat===1||$c(e.fileName,[\".cts\",\".cjs\"]))&&e.commonJsModuleIndicator&&(Vhe(t)||aY(t.getCompilerOptions()))&&R4e(e)&&i.push(hr(M4e(e.commonJsModuleIndicator),_.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module));let l=Cu(e);if(i5.clear(),f(e),wT(t.getCompilerOptions()))for(let d of e.imports){let g=aR(d),m=O4e(g);if(!m)continue;let v=kA(e,d.text,W_(e,d)),S=v&&t.getSourceFile(v.resolvedFileName);S&&S.externalModuleIndicator&&S.externalModuleIndicator!==!0&&pc(S.externalModuleIndicator)&&S.externalModuleIndicator.isExportEquals&&i.push(hr(m,_.Import_may_be_converted_to_a_default_import))}return si(i,e.bindSuggestionDiagnostics),si(i,t.getSuggestionDiagnostics(e,r)),i.sort((d,g)=>d.start-g.start);function f(d){if(l)G4e(d,o)&&i.push(hr(wi(d.parent)?d.parent.name:d,_.This_constructor_function_may_be_converted_to_a_class_declaration));else{if(Bc(d)&&d.parent===e&&d.declarationList.flags&2&&d.declarationList.declarations.length===1){let g=d.declarationList.declarations[0].initializer;g&&qu(g,!0)&&i.push(hr(g,_.require_call_may_be_converted_to_an_import))}gu.parameterShouldGetTypeFromJSDoc(d)&&i.push(hr(d.name||d,_.JSDoc_types_may_be_moved_to_TypeScript_types))}e$(d)&&N4e(d,o,i),d.forEachChild(f)}}function R4e(e){return e.statements.some(t=>{switch(t.kind){case 240:return t.declarationList.declarations.some(r=>!!r.initializer&&qu(Zge(r.initializer),!0));case 241:{let{expression:r}=t;if(!ar(r))return qu(r,!0);let i=ic(r);return i===1||i===2}default:return!1}})}function Zge(e){return br(e)?Zge(e.expression):e}function O4e(e){switch(e.kind){case 269:let{importClause:t,moduleSpecifier:r}=e;return t&&!t.name&&t.namedBindings&&t.namedBindings.kind===271&&yo(r)?t.namedBindings.name:void 0;case 268:return e.name;default:return}}function N4e(e,t,r){P4e(e,t)&&!i5.has(rye(e))&&r.push(hr(!e.name&&wi(e.parent)&&Re(e.parent.name)?e.parent.name:e,_.This_may_be_converted_to_an_async_function))}function P4e(e,t){return!qA(e)&&e.body&&Va(e.body)&&F4e(e.body,t)&&QY(e,t)}function QY(e,t){let r=t.getSignatureFromDeclaration(e),i=r?t.getReturnTypeOfSignature(r):void 0;return!!i&&!!t.getPromisedTypeOfPromise(i)}function M4e(e){return ar(e)?e.left:e}function F4e(e,t){return!!vT(e,r=>r5(r,t))}function r5(e,t){return j_(e)&&!!e.expression&&ZY(e.expression,t)}function ZY(e,t){if(!eye(e)||!tye(e)||!e.arguments.every(i=>nye(i,t)))return!1;let r=e.expression.expression;for(;eye(r)||br(r);)if(Pa(r)){if(!tye(r)||!r.arguments.every(i=>nye(i,t)))return!1;r=r.expression.expression}else r=r.expression;return!0}function eye(e){return Pa(e)&&(kN(e,\"then\")||kN(e,\"catch\")||kN(e,\"finally\"))}function tye(e){let t=e.expression.name.text,r=t===\"then\"?2:t===\"catch\"||t===\"finally\"?1:0;return e.arguments.length>r?!1:e.arguments.length<r?!0:r===1||vt(e.arguments,i=>i.kind===104||Re(i)&&i.text===\"undefined\")}function nye(e,t){switch(e.kind){case 259:case 215:if(pl(e)&1)return!1;case 216:i5.set(rye(e),!0);case 104:return!0;case 79:case 208:{let i=t.getSymbolAtLocation(e);return i?t.isUndefinedSymbol(i)||vt(wd(i,t).declarations,o=>Ia(o)||Jy(o)&&!!o.initializer&&Ia(o.initializer)):!1}default:return!1}}function rye(e){return`${e.pos.toString()}:${e.end.toString()}`}function G4e(e,t){var r,i,o,s;if(ms(e)){if(wi(e.parent)&&((r=e.symbol.members)!=null&&r.size))return!0;let l=t.getSymbolOfExpando(e,!1);return!!(l&&((i=l.exports)!=null&&i.size||(o=l.members)!=null&&o.size))}return Jc(e)?!!((s=e.symbol.members)!=null&&s.size):!1}function e$(e){switch(e.kind){case 259:case 171:case 215:case 216:return!0;default:return!1}}var i5,B4e=gt({\"src/services/suggestionDiagnostics.ts\"(){\"use strict\";Fr(),i5=new Map}});function iye(e,t){let r=[],i=t.compilerOptions?t$(t.compilerOptions,r):{},o=d5();for(let S in o)fs(o,S)&&i[S]===void 0&&(i[S]=o[S]);for(let S of BJ)i.verbatimModuleSyntax&&aye.has(S.name)||(i[S.name]=S.transpileOptionValue);i.suppressOutputPathCheck=!0,i.allowNonTsExtensions=!0;let s=db(i),l={getSourceFile:S=>S===So(f)?d:void 0,writeFile:(S,x)=>{Gc(S,\".map\")?(L.assertEqual(m,void 0,\"Unexpected multiple source map outputs, file:\",S),m=x):(L.assertEqual(g,void 0,\"Unexpected multiple outputs, file:\",S),g=x)},getDefaultLibFileName:()=>\"lib.d.ts\",useCaseSensitiveFileNames:()=>!1,getCanonicalFileName:S=>S,getCurrentDirectory:()=>\"\",getNewLine:()=>s,fileExists:S=>S===f,readFile:()=>\"\",directoryExists:()=>!0,getDirectories:()=>[]},f=t.fileName||(t.compilerOptions&&t.compilerOptions.jsx?\"module.tsx\":\"module.ts\"),d=DO(f,e,{languageVersion:Do(i),impliedNodeFormat:NF(Ts(f,\"\",l.getCanonicalFileName),void 0,l,i),setExternalModuleIndicator:OR(i)});t.moduleName&&(d.moduleName=t.moduleName),t.renamedDependencies&&(d.renamedDependencies=new Map(Object.entries(t.renamedDependencies)));let g,m,v=PF([f],i,l);return t.reportDiagnostics&&(si(r,v.getSyntacticDiagnostics(d)),si(r,v.getOptionsDiagnostics())),v.emit(void 0,void 0,void 0,void 0,t.transformers),g===void 0?L.fail(\"Output generation failed\"):{outputText:g,diagnostics:r,sourceMapText:m}}function U4e(e,t,r,i,o){let s=iye(e,{compilerOptions:t,fileName:r,reportDiagnostics:!!i,moduleName:o});return si(i,s.diagnostics),s.outputText}function t$(e,t){n$=n$||Pr(Fh,r=>typeof r.type==\"object\"&&!Ld(r.type,i=>typeof i!=\"number\")),e=Mhe(e);for(let r of n$){if(!fs(e,r.name))continue;let i=e[r.name];Ta(i)?e[r.name]=O3(r,i,t):Ld(r.type,o=>o===i)||t.push(pJ(r))}return e}var aye,n$,V4e=gt({\"src/services/transpile.ts\"(){\"use strict\";Fr(),aye=new Set([\"isolatedModules\",\"preserveValueImports\",\"importsNotUsedAsValues\"])}});function oye(e,t,r,i,o,s){let l=Fge(i);if(!l)return Je;let f=[];for(let d of e)r.throwIfCancellationRequested(),!(s&&d.isDeclarationFile)&&d.getNamedDeclarations().forEach((g,m)=>{j4e(l,m,g,t,d.fileName,f)});return f.sort(J4e),(o===void 0?f:f.slice(0,o)).map(K4e)}function j4e(e,t,r,i,o,s){let l=e.getMatchForLastSegmentOfPattern(t);if(l){for(let f of r)if(H4e(f,i))if(e.patternContainsDots){let d=e.getFullMatch(z4e(f),t);d&&s.push({name:t,fileName:o,matchKind:d.kind,isCaseSensitive:d.isCaseSensitive,declaration:f})}else s.push({name:t,fileName:o,matchKind:l.kind,isCaseSensitive:l.isCaseSensitive,declaration:f})}}function H4e(e,t){switch(e.kind){case 270:case 273:case 268:let r=t.getSymbolAtLocation(e.name),i=t.getAliasedSymbol(r);return r.escapedName!==i.escapedName;default:return!0}}function W4e(e,t){let r=sa(e);return!!r&&(sye(r,t)||r.kind===164&&r$(r.expression,t))}function r$(e,t){return sye(e,t)||br(e)&&(t.push(e.name.text),!0)&&r$(e.expression,t)}function sye(e,t){return c_(e)&&(t.push(l_(e)),!0)}function z4e(e){let t=[],r=sa(e);if(r&&r.kind===164&&!r$(r.expression,t))return Je;t.shift();let i=e1(e);for(;i;){if(!W4e(i,t))return Je;i=e1(i)}return t.reverse()}function J4e(e,t){return Es(e.matchKind,t.matchKind)||XD(e.name,t.name)}function K4e(e){let t=e.declaration,r=e1(t),i=r&&sa(r);return{name:e.name,kind:aE(t),kindModifiers:rk(t),matchKind:n5[e.matchKind],isCaseSensitive:e.isCaseSensitive,fileName:e.fileName,textSpan:Du(t),containerName:i?i.text:\"\",containerKind:i?aE(r):\"\"}}var q4e=gt({\"src/services/navigateTo.ts\"(){\"use strict\";Fr()}}),cye={};Mo(cye,{getNavigateToItems:()=>oye});var lye=gt({\"src/services/_namespaces/ts.NavigateTo.ts\"(){\"use strict\";q4e()}});function uye(e,t){c5=t,fk=e;try{return on(Z4e(pye(e)),e3e)}finally{fye()}}function dye(e,t){c5=t,fk=e;try{return Sye(pye(e))}finally{fye()}}function fye(){fk=void 0,c5=void 0,_k=[],Uh=void 0,l5=[]}function QN(e){return X2(e.getText(fk))}function a5(e){return e.node.kind}function _ye(e,t){e.children?e.children.push(t):e.children=[t]}function pye(e){L.assert(!_k.length);let t={node:e,name:void 0,additionalNodes:void 0,parent:void 0,children:void 0,indent:0};Uh=t;for(let r of e.statements)a1(r);return dv(),L.assert(!Uh&&!_k.length),t}function Eb(e,t){_ye(Uh,i$(e,t))}function i$(e,t){return{node:e,name:t||(Kl(e)||ot(e)?sa(e):void 0),additionalNodes:void 0,parent:Uh,children:void 0,indent:Uh.indent+1}}function mye(e){tx||(tx=new Map),tx.set(e,!0)}function hye(e){for(let t=0;t<e;t++)dv()}function gye(e,t){let r=[];for(;!c_(t);){let i=eR(t),o=wh(t);t=t.expression,!(o===\"prototype\"||pi(i))&&r.push(i)}r.push(t);for(let i=r.length-1;i>0;i--){let o=r[i];Tb(e,o)}return[r.length-1,r[0]]}function Tb(e,t){let r=i$(e,t);_ye(Uh,r),_k.push(Uh),f$.push(tx),tx=void 0,Uh=r}function dv(){Uh.children&&(o5(Uh.children,Uh),s$(Uh.children)),Uh=_k.pop(),tx=f$.pop()}function fv(e,t,r){Tb(e,r),a1(t),dv()}function yye(e){e.initializer&&n3e(e.initializer)?(Tb(e),pa(e.initializer,a1),dv()):fv(e,e.initializer)}function a$(e){return!Xy(e)||e.kind!==223&&br(e.name.expression)&&Re(e.name.expression.expression)&&vr(e.name.expression.expression)===\"Symbol\"}function a1(e){if(c5.throwIfCancellationRequested(),!(!e||Z1(e)))switch(e.kind){case 173:let t=e;fv(t,t.body);for(let l of t.parameters)Ad(l,t)&&Eb(l);break;case 171:case 174:case 175:case 170:a$(e)&&fv(e,e.body);break;case 169:a$(e)&&yye(e);break;case 168:a$(e)&&Eb(e);break;case 270:let r=e;r.name&&Eb(r.name);let{namedBindings:i}=r;if(i)if(i.kind===271)Eb(i);else for(let l of i.elements)Eb(l);break;case 300:fv(e,e.name);break;case 301:let{expression:o}=e;Re(o)?Eb(e,o):Eb(e);break;case 205:case 299:case 257:{let l=e;La(l.name)?a1(l.name):yye(l);break}case 259:let s=e.name;s&&Re(s)&&mye(s.text),fv(e,e.body);break;case 216:case 215:fv(e,e.body);break;case 263:Tb(e);for(let l of e.members)t3e(l)||Eb(l);dv();break;case 260:case 228:case 261:Tb(e);for(let l of e.members)a1(l);dv();break;case 264:fv(e,Aye(e).body);break;case 274:{let l=e.expression,f=rs(l)||Pa(l)?l:xs(l)||ms(l)?l.body:void 0;f?(Tb(e),a1(f),dv()):Eb(e);break}case 278:case 268:case 178:case 176:case 177:case 262:Eb(e);break;case 210:case 223:{let l=ic(e);switch(l){case 1:case 2:fv(e,e.right);return;case 6:case 3:{let f=e,d=f.left,g=l===3?d.expression:d,m=0,v;Re(g.expression)?(mye(g.expression.text),v=g.expression):[m,v]=gye(f,g.expression),l===6?rs(f.right)&&f.right.properties.length>0&&(Tb(f,v),pa(f.right,a1),dv()):ms(f.right)||xs(f.right)?fv(e,f.right,v):(Tb(f,v),fv(e,f.right,d.name),dv()),hye(m);return}case 7:case 9:{let f=e,d=l===7?f.arguments[0]:f.arguments[0].expression,g=f.arguments[1],[m,v]=gye(e,d);Tb(e,v),Tb(e,it(D.createIdentifier(g.text),g)),a1(e.arguments[2]),dv(),dv(),hye(m);return}case 5:{let f=e,d=f.left,g=d.expression;if(Re(g)&&wh(d)!==\"prototype\"&&tx&&tx.has(g.text)){ms(f.right)||xs(f.right)?fv(e,f.right,g):ST(d)&&(Tb(f,g),fv(f.left,f.right,eR(d)),dv());return}break}case 4:case 0:case 8:break;default:L.assertNever(l)}}default:Kd(e)&&mn(e.jsDoc,l=>{mn(l.tags,f=>{Ff(f)&&Eb(f)})}),pa(e,a1)}}function o5(e,t){let r=new Map;wU(e,(i,o)=>{let s=i.name||sa(i.node),l=s&&QN(s);if(!l)return!0;let f=r.get(l);if(!f)return r.set(l,i),!0;if(f instanceof Array){for(let d of f)if(vye(d,i,o,t))return!1;return f.push(i),!0}else{let d=f;return vye(d,i,o,t)?!1:(r.set(l,[d,i]),!0)}})}function X4e(e,t,r,i){function o(f){return ms(f)||Jc(f)||wi(f)}let s=ar(t.node)||Pa(t.node)?ic(t.node):0,l=ar(e.node)||Pa(e.node)?ic(e.node):0;if(Y2[s]&&Y2[l]||o(e.node)&&Y2[s]||o(t.node)&&Y2[l]||sl(e.node)&&o$(e.node)&&Y2[s]||sl(t.node)&&Y2[l]||sl(e.node)&&o$(e.node)&&o(t.node)||sl(t.node)&&o(e.node)&&o$(e.node)){let f=e.additionalNodes&&Os(e.additionalNodes)||e.node;if(!sl(e.node)&&!sl(t.node)||o(e.node)||o(t.node)){let g=o(e.node)?e.node:o(t.node)?t.node:void 0;if(g!==void 0){let m=it(D.createConstructorDeclaration(void 0,[],void 0),g),v=i$(m);v.indent=e.indent+1,v.children=e.node===g?e.children:t.children,e.children=e.node===g?Qi([v],t.children||[t]):Qi(e.children||[{...e}],[v])}else(e.children||t.children)&&(e.children=Qi(e.children||[{...e}],t.children||[t]),e.children&&(o5(e.children,e),s$(e.children)));f=e.node=it(D.createClassDeclaration(void 0,e.name||D.createIdentifier(\"__class__\"),void 0,void 0,[]),e.node)}else e.children=Qi(e.children,t.children),e.children&&o5(e.children,e);let d=t.node;return i.children[r-1].node.end===f.end?it(f,{pos:f.pos,end:d.end}):(e.additionalNodes||(e.additionalNodes=[]),e.additionalNodes.push(it(D.createClassDeclaration(void 0,e.name||D.createIdentifier(\"__class__\"),void 0,void 0,[]),t.node))),!0}return s!==0}function vye(e,t,r,i){return X4e(e,t,r,i)?!0:Y4e(e.node,t.node,i)?($4e(e,t),!0):!1}function Y4e(e,t,r){if(e.kind!==t.kind||e.parent!==t.parent&&!(bye(e,r)&&bye(t,r)))return!1;switch(e.kind){case 169:case 171:case 174:case 175:return Ca(e)===Ca(t);case 264:return Eye(e,t)&&u$(e)===u$(t);default:return!0}}function o$(e){return!!(e.flags&8)}function bye(e,t){let r=Tp(e.parent)?e.parent.parent:e.parent;return r===t.node||ya(t.additionalNodes,r)}function Eye(e,t){return!e.body||!t.body?e.body===t.body:e.body.kind===t.body.kind&&(e.body.kind!==264||Eye(e.body,t.body))}function $4e(e,t){e.additionalNodes=e.additionalNodes||[],e.additionalNodes.push(t.node),t.additionalNodes&&e.additionalNodes.push(...t.additionalNodes),e.children=Qi(e.children,t.children),e.children&&(o5(e.children,e),s$(e.children))}function s$(e){e.sort(Q4e)}function Q4e(e,t){return XD(Tye(e.node),Tye(t.node))||Es(a5(e),a5(t))}function Tye(e){if(e.kind===264)return xye(e);let t=sa(e);if(t&&Ys(t)){let r=M0(t);return r&&Gi(r)}switch(e.kind){case 215:case 216:case 228:return Iye(e);default:return}}function c$(e,t){if(e.kind===264)return X2(xye(e));if(t){let r=Re(t)?t.text:Vs(t)?`[${QN(t.argumentExpression)}]`:QN(t);if(r.length>0)return X2(r)}switch(e.kind){case 308:let r=e;return Lc(r)?`\"${_S(Hl(ld(So(r.fileName))))}\"`:\"<global>\";case 274:return pc(e)&&e.isExportEquals?\"export=\":\"default\";case 216:case 259:case 215:case 260:case 228:return Yy(e)&1024?\"default\":Iye(e);case 173:return\"constructor\";case 177:return\"new()\";case 176:return\"()\";case 178:return\"[]\";default:return\"<unknown>\"}}function Z4e(e){let t=[];function r(o){if(i(o)&&(t.push(o),o.children))for(let s of o.children)r(s)}return r(e),t;function i(o){if(o.children)return!0;switch(a5(o)){case 260:case 228:case 263:case 261:case 264:case 308:case 262:case 349:case 341:return!0;case 216:case 259:case 215:return s(o);default:return!1}function s(l){if(!l.node.body)return!1;switch(a5(l.parent)){case 265:case 308:case 171:case 173:return!0;default:return!1}}}}function Sye(e){return{text:c$(e.node,e.name),kind:aE(e.node),kindModifiers:Cye(e.node),spans:l$(e),nameSpan:e.name&&d$(e.name),childItems:on(e.children,Sye)}}function e3e(e){return{text:c$(e.node,e.name),kind:aE(e.node),kindModifiers:Cye(e.node),spans:l$(e),childItems:on(e.children,t)||l5,indent:e.indent,bolded:!1,grayed:!1};function t(r){return{text:c$(r.node,r.name),kind:aE(r.node),kindModifiers:rk(r.node),spans:l$(r),childItems:l5,indent:0,bolded:!1,grayed:!1}}}function l$(e){let t=[d$(e.node)];if(e.additionalNodes)for(let r of e.additionalNodes)t.push(d$(r));return t}function xye(e){return lu(e)?Qc(e.name):u$(e)}function u$(e){let t=[l_(e.name)];for(;e.body&&e.body.kind===264;)e=e.body,t.push(l_(e.name));return t.join(\".\")}function Aye(e){return e.body&&Tc(e.body)?Aye(e.body):e}function t3e(e){return!e.name||e.name.kind===164}function d$(e){return e.kind===308?lv(e):Du(e,fk)}function Cye(e){return e.parent&&e.parent.kind===257&&(e=e.parent),rk(e)}function Iye(e){let{parent:t}=e;if(e.name&&Fw(e.name)>0)return X2(os(e.name));if(wi(t))return X2(os(t.name));if(ar(t)&&t.operatorToken.kind===63)return QN(t.left).replace(kye,\"\");if(yl(t))return QN(t.name);if(Yy(e)&1024)return\"default\";if(Yr(e))return\"<class>\";if(Pa(t)){let r=Lye(t.expression);if(r!==void 0){if(r=X2(r),r.length>s5)return`${r} callback`;let i=X2(Zi(t.arguments,o=>es(o)?o.getText(fk):void 0).join(\", \"));return`${r}(${i}) callback`}}return\"<function>\"}function Lye(e){if(Re(e))return e.text;if(br(e)){let t=Lye(e.expression),r=e.name.text;return t===void 0?r:`${t}.${r}`}else return}function n3e(e){switch(e.kind){case 216:case 215:case 228:return!0;default:return!1}}function X2(e){return e=e.length>s5?e.substring(0,s5)+\"...\":e,e.replace(/\\\\?(\\r?\\n|\\r|\\u2028|\\u2029)/g,\"\")}var kye,s5,c5,fk,_k,Uh,f$,tx,l5,Y2,r3e=gt({\"src/services/navigationBar.ts\"(){\"use strict\";Fr(),kye=/\\s+/g,s5=150,_k=[],f$=[],l5=[],Y2={5:!0,3:!0,7:!0,9:!0,0:!1,1:!1,2:!1,8:!1,6:!0,4:!1}}}),Dye={};Mo(Dye,{getNavigationBarItems:()=>uye,getNavigationTree:()=>dye});var wye=gt({\"src/services/_namespaces/ts.NavigationBar.ts\"(){\"use strict\";r3e()}});function Rye(e,t,r,i){let o=Iw(e)?new p5(e,t,r):e===79?new h5(79,t,r):e===80?new g5(80,t,r):new h$(e,t,r);return o.parent=i,o.flags=i.flags&50720768,o}function i3e(e,t){if(!Iw(e.kind))return Je;let r=[];if(qj(e))return e.forEachChild(l=>{r.push(l)}),r;$l.setText((t||e.getSourceFile()).text);let i=e.pos,o=l=>{ZN(r,i,l.pos,e),r.push(l),i=l.end},s=l=>{ZN(r,i,l.pos,e),r.push(a3e(l,e)),i=l.end};return mn(e.jsDoc,o),i=e.pos,e.forEachChild(o,s),ZN(r,i,e.end,e),$l.setText(void 0),r}function ZN(e,t,r,i){for($l.setTextPos(t);t<r;){let o=$l.scan(),s=$l.getTextPos();if(s<=r){if(o===79){if(jle(i))continue;L.fail(`Did not expect ${L.formatSyntaxKind(i.kind)} to have an Identifier in its trivia`)}e.push(Rye(o,t,s,i))}if(t=s,o===1)break}}function a3e(e,t){let r=Rye(354,e.pos,e.end,t);r._children=[];let i=e.pos;for(let o of e)ZN(r._children,i,o.pos,t),r._children.push(o),i=o.end;return ZN(r._children,i,e.end,t),r}function Oye(e){return A0(e).some(t=>t.tagName.text===\"inheritDoc\"||t.tagName.text===\"inheritdoc\")}function u5(e,t){if(!e)return Je;let r=xb.getJsDocTagsFromDeclarations(e,t);if(t&&(r.length===0||e.some(Oye))){let i=new Set;for(let o of e){let s=Nye(t,o,l=>{var f;if(!i.has(l))return i.add(l),o.kind===174||o.kind===175?l.getContextualJsDocTags(o,t):((f=l.declarations)==null?void 0:f.length)===1?l.getJsDocTags():void 0});s&&(r=[...s,...r])}}return r}function eP(e,t){if(!e)return Je;let r=xb.getJsDocCommentsFromDeclarations(e,t);if(t&&(r.length===0||e.some(Oye))){let i=new Set;for(let o of e){let s=Nye(t,o,l=>{if(!i.has(l))return i.add(l),o.kind===174||o.kind===175?l.getContextualDocumentationComment(o,t):l.getDocumentationComment(t)});s&&(r=r.length===0?s.slice():s.concat(K2(),r))}}return r}function Nye(e,t,r){var i;let o=((i=t.parent)==null?void 0:i.kind)===173?t.parent.parent:t.parent;if(!o)return;let s=zc(t);return ks(NI(o),l=>{let f=e.getTypeAtLocation(l),d=s&&f.symbol?e.getTypeOfSymbol(f.symbol):f,g=e.getPropertyOfType(d,t.symbol.name);return g?r(g):void 0})}function o3e(){return{getNodeConstructor:()=>p5,getTokenConstructor:()=>h$,getIdentifierConstructor:()=>h5,getPrivateIdentifierConstructor:()=>g5,getSourceFileConstructor:()=>Hye,getSymbolConstructor:()=>Uye,getTypeConstructor:()=>Vye,getSignatureConstructor:()=>jye,getSourceMapSourceConstructor:()=>Wye}}function tP(e){let t=!0;for(let i in e)if(fs(e,i)&&!Pye(i)){t=!1;break}if(t)return e;let r={};for(let i in e)if(fs(e,i)){let o=Pye(i)?i:i.charAt(0).toLowerCase()+i.substr(1);r[o]=e[i]}return r}function Pye(e){return!e.length||e.charAt(0)===e.charAt(0).toLowerCase()}function Mye(e){return e?on(e,t=>t.text).join(\"\"):\"\"}function d5(){return{target:1,jsx:1}}function Fye(){return gu.getSupportedErrorCodes()}function Gye(e,t,r){e.version=r,e.scriptSnapshot=t}function f5(e,t,r,i,o,s){let l=DO(e,E7(t),r,o,s);return Gye(l,t,i),l}function _$(e,t,r,i,o){if(i&&r!==e.version){let l,f=i.span.start!==0?e.text.substr(0,i.span.start):\"\",d=wl(i.span)!==e.text.length?e.text.substr(wl(i.span)):\"\";if(i.newLength===0)l=f&&d?f+d:f||d;else{let m=t.getText(i.span.start,i.span.start+i.newLength);l=f&&d?f+m+d:f?f+m:m+d}let g=uJ(e,l,i,o);return Gye(g,t,r),g.nameTable=void 0,e!==g&&e.scriptSnapshot&&(e.scriptSnapshot.dispose&&e.scriptSnapshot.dispose(),e.scriptSnapshot=void 0),g}let s={languageVersion:e.languageVersion,impliedNodeFormat:e.impliedNodeFormat,setExternalModuleIndicator:e.setExternalModuleIndicator};return f5(e.fileName,t,s,r,!0,e.scriptKind)}function Bye(e,t=VY(e.useCaseSensitiveFileNames&&e.useCaseSensitiveFileNames(),e.getCurrentDirectory()),r){var i;let o;r===void 0?o=0:typeof r==\"boolean\"?o=r?2:0:o=r;let s=new zye(e),l,f,d=0,g=e.getCancellationToken?new Kye(e.getCancellationToken()):Jye,m=e.getCurrentDirectory();mle((i=e.getLocalizedDiagnosticMessages)==null?void 0:i.bind(e));function v(Ke){e.log&&e.log(Ke)}let S=xR(e),x=Dl(S),A=Xge({useCaseSensitiveFileNames:()=>S,getCurrentDirectory:()=>m,getProgram:P,fileExists:ho(e,e.fileExists),readFile:ho(e,e.readFile),getDocumentPositionMapper:ho(e,e.getDocumentPositionMapper),getSourceFileLike:ho(e,e.getSourceFileLike),log:v});function w(Ke){let oe=l.getSourceFile(Ke);if(!oe){let pe=new Error(`Could not find source file: '${Ke}'.`);throw pe.ProgramFiles=l.getSourceFiles().map(z=>z.fileName),pe}return oe}function C(){var Ke,oe,pe;if(L.assert(o!==2),e.getProjectVersion){let Qr=e.getProjectVersion();if(Qr){if(f===Qr&&!((Ke=e.hasChangedAutomaticTypeDirectiveNames)!=null&&Ke.call(e)))return;f=Qr}}let z=e.getTypeRootsVersion?e.getTypeRootsVersion():0;d!==z&&(v(\"TypeRoots version has changed; provide new program\"),l=void 0,d=z);let Te=e.getScriptFileNames().slice(),j=e.getCompilationSettings()||d5(),yt=e.hasInvalidatedResolutions||m0,lt=ho(e,e.hasChangedAutomaticTypeDirectiveNames),Qe=(oe=e.getProjectReferences)==null?void 0:oe.call(e),Vt,Hn={getSourceFile:Nr,getSourceFileByPath:Fo,getCancellationToken:()=>g,getCanonicalFileName:x,useCaseSensitiveFileNames:()=>S,getNewLine:()=>db(j),getDefaultLibFileName:Qr=>e.getDefaultLibFileName(Qr),writeFile:Ba,getCurrentDirectory:()=>m,fileExists:Qr=>e.fileExists(Qr),readFile:Qr=>e.readFile&&e.readFile(Qr),getSymlinkCache:ho(e,e.getSymlinkCache),realpath:ho(e,e.realpath),directoryExists:Qr=>gp(Qr,e),getDirectories:Qr=>e.getDirectories?e.getDirectories(Qr):[],readDirectory:(Qr,Wi,gn,Ki,kc)=>(L.checkDefined(e.readDirectory,\"'LanguageServiceHost.readDirectory' must be implemented to correctly process 'projectReferences'\"),e.readDirectory(Qr,Wi,gn,Ki,kc)),onReleaseOldSourceFile:xi,onReleaseParsedCommandLine:Hi,hasInvalidatedResolutions:yt,hasChangedAutomaticTypeDirectiveNames:lt,trace:ho(e,e.trace),resolveModuleNames:ho(e,e.resolveModuleNames),getModuleResolutionCache:ho(e,e.getModuleResolutionCache),createHash:ho(e,e.createHash),resolveTypeReferenceDirectives:ho(e,e.resolveTypeReferenceDirectives),resolveModuleNameLiterals:ho(e,e.resolveModuleNameLiterals),resolveTypeReferenceDirectiveReferences:ho(e,e.resolveTypeReferenceDirectiveReferences),useSourceOfProjectReferenceRedirect:ho(e,e.useSourceOfProjectReferenceRedirect),getParsedCommandLine:Za},jr=Hn.getSourceFile,{getSourceFileWithCache:ei}=pN(Hn,Qr=>Ts(Qr,m,x),(...Qr)=>jr.call(Hn,...Qr));Hn.getSourceFile=ei,(pe=e.setCompilerHost)==null||pe.call(e,Hn);let Kr={useCaseSensitiveFileNames:S,fileExists:Qr=>Hn.fileExists(Qr),readFile:Qr=>Hn.readFile(Qr),readDirectory:(...Qr)=>Hn.readDirectory(...Qr),trace:Hn.trace,getCurrentDirectory:Hn.getCurrentDirectory,onUnRecoverableConfigFileDiagnostic:Ba},Si=t.getKeyForCompilationSettings(j);if(lq(l,Te,j,(Qr,Wi)=>e.getScriptVersion(Wi),Qr=>Hn.fileExists(Qr),yt,lt,Za,Qe))return;l=PF({rootNames:Te,options:j,host:Hn,oldProgram:l,projectReferences:Qe}),Hn=void 0,Vt=void 0,A.clearCache(),l.getTypeChecker();return;function Za(Qr){let Wi=Ts(Qr,m,x),gn=Vt?.get(Wi);if(gn!==void 0)return gn||void 0;let Ki=e.getParsedCommandLine?e.getParsedCommandLine(Qr):Fa(Qr);return(Vt||(Vt=new Map)).set(Wi,Ki||!1),Ki}function Fa(Qr){let Wi=Nr(Qr,100);if(Wi)return Wi.path=Ts(Qr,m,x),Wi.resolvedPath=Wi.path,Wi.originalFileName=Wi.fileName,MO(Wi,Kr,_a(ni(Qr),m),void 0,_a(Qr,m))}function Hi(Qr,Wi,gn){var Ki;e.getParsedCommandLine?(Ki=e.onReleaseParsedCommandLine)==null||Ki.call(e,Qr,Wi,gn):Wi&&xi(Wi.sourceFile,gn)}function xi(Qr,Wi){let gn=t.getKeyForCompilationSettings(Wi);t.releaseDocumentWithKey(Qr.resolvedPath,gn,Qr.scriptKind,Qr.impliedNodeFormat)}function Nr(Qr,Wi,gn,Ki){return Fo(Qr,Ts(Qr,m,x),Wi,gn,Ki)}function Fo(Qr,Wi,gn,Ki,kc){L.assert(Hn,\"getOrCreateSourceFileByPath called after typical CompilerHost lifetime, check the callstack something with a reference to an old host.\");let Ps=e.getScriptSnapshot(Qr);if(!Ps)return;let mc=mY(Qr,e),xc=e.getScriptVersion(Qr);if(!kc){let hc=l&&l.getSourceFileByPath(Wi);if(hc){if(mc===hc.scriptKind)return t.updateDocumentWithKey(Qr,Wi,e,Si,Ps,xc,mc,gn);t.releaseDocumentWithKey(hc.resolvedPath,t.getKeyForCompilationSettings(l.getCompilerOptions()),hc.scriptKind,hc.impliedNodeFormat)}}return t.acquireDocumentWithKey(Qr,Wi,e,Si,Ps,xc,mc,gn)}}function P(){if(o===2){L.assert(l===void 0);return}return C(),l}function F(){var Ke;return(Ke=e.getPackageJsonAutoImportProvider)==null?void 0:Ke.call(e)}function B(Ke,oe){let pe=l.getTypeChecker(),z=Te();if(!z)return!1;for(let yt of Ke)for(let lt of yt.references){let Qe=j(lt);if(L.assertIsDefined(Qe),oe.has(lt)||js.isDeclarationOfSymbol(Qe,z)){oe.add(lt),lt.isDefinition=!0;let Vt=uY(lt,A,ho(e,e.fileExists));Vt&&oe.add(Vt)}else lt.isDefinition=!1}return!0;function Te(){for(let yt of Ke)for(let lt of yt.references){if(oe.has(lt)){let Vt=j(lt);return L.assertIsDefined(Vt),pe.getSymbolAtLocation(Vt)}let Qe=uY(lt,A,ho(e,e.fileExists));if(Qe&&oe.has(Qe)){let Vt=j(Qe);if(Vt)return pe.getSymbolAtLocation(Vt)}}}function j(yt){let lt=l.getSourceFile(yt.fileName);if(!lt)return;let Qe=ef(lt,yt.textSpan.start);return js.Core.getAdjustedNode(Qe,{use:js.FindReferencesUse.References})}}function q(){l=void 0}function W(){if(l){let Ke=t.getKeyForCompilationSettings(l.getCompilerOptions());mn(l.getSourceFiles(),oe=>t.releaseDocumentWithKey(oe.resolvedPath,Ke,oe.scriptKind,oe.impliedNodeFormat)),l=void 0}e=void 0}function Y(Ke){return C(),l.getSyntacticDiagnostics(w(Ke),g).slice()}function R(Ke){C();let oe=w(Ke),pe=l.getSemanticDiagnostics(oe,g);if(!__(l.getCompilerOptions()))return pe.slice();let z=l.getDeclarationDiagnostics(oe,g);return[...pe,...z]}function ie(Ke){return C(),$Y(w(Ke),l,g)}function $(){return C(),[...l.getOptionsDiagnostics(g),...l.getGlobalDiagnostics(g)]}function fe(Ke,oe,pe=Cp,z){let Te={...pe,includeCompletionsForModuleExports:pe.includeCompletionsForModuleExports||pe.includeExternalModuleExports,includeCompletionsWithInsertText:pe.includeCompletionsWithInsertText||pe.includeInsertTextCompletions};return C(),lx.getCompletionsAtPosition(e,l,v,w(Ke),oe,Te,pe.triggerCharacter,pe.triggerKind,g,z&&tl.getFormatContext(z,e),pe.includeSymbol)}function Z(Ke,oe,pe,z,Te,j=Cp,yt){return C(),lx.getCompletionEntryDetails(l,v,w(Ke),oe,{name:pe,source:Te,data:yt},e,z&&tl.getFormatContext(z,e),j,g)}function U(Ke,oe,pe,z,Te=Cp){return C(),lx.getCompletionEntrySymbol(l,v,w(Ke),oe,{name:pe,source:z},e,Te)}function re(Ke,oe){C();let pe=w(Ke),z=ef(pe,oe);if(z===pe)return;let Te=l.getTypeChecker(),j=le(z),yt=u3e(j,Te);if(!yt||Te.isUnknownSymbol(yt)){let jr=_e(pe,j,oe)?Te.getTypeAtLocation(j):void 0;return jr&&{kind:\"\",kindModifiers:\"\",textSpan:Du(j,pe),displayParts:Te.runWithCancellationToken(g,ei=>zN(ei,jr,e1(j))),documentation:jr.symbol?jr.symbol.getDocumentationComment(Te):void 0,tags:jr.symbol?jr.symbol.getJsDocTags(Te):void 0}}let{symbolKind:lt,displayParts:Qe,documentation:Vt,tags:Hn}=Te.runWithCancellationToken(g,jr=>$g.getSymbolDisplayPartsDocumentationAndSymbolKind(jr,yt,pe,e1(j),j));return{kind:lt,kindModifiers:$g.getSymbolModifiers(Te,yt),textSpan:Du(j,pe),displayParts:Qe,documentation:Vt,tags:Hn}}function le(Ke){return z0(Ke.parent)&&Ke.pos===Ke.parent.pos?Ke.parent.expression:bL(Ke.parent)&&Ke.pos===Ke.parent.pos||NA(Ke.parent)&&Ke.parent.name===Ke?Ke.parent:Ke}function _e(Ke,oe,pe){switch(oe.kind){case 79:return!FX(oe)&&!GX(oe)&&!Ch(oe.parent);case 208:case 163:return!Kg(Ke,pe);case 108:case 194:case 106:case 199:return!0;case 233:return NA(oe);default:return!1}}function ge(Ke,oe,pe,z){return C(),xk.getDefinitionAtPosition(l,w(Ke),oe,pe,z)}function X(Ke,oe){return C(),xk.getDefinitionAndBoundSpan(l,w(Ke),oe)}function Ve(Ke,oe){return C(),xk.getTypeDefinitionAtPosition(l.getTypeChecker(),w(Ke),oe)}function we(Ke,oe){return C(),js.getImplementationsAtPosition(l,g,l.getSourceFiles(),w(Ke),oe)}function ke(Ke,oe){return Uo(Pe(Ke,oe,[Ke]),pe=>pe.highlightSpans.map(z=>({fileName:pe.fileName,textSpan:z.textSpan,isWriteAccess:z.kind===\"writtenReference\",...z.isInString&&{isInString:!0},...z.contextSpan&&{contextSpan:z.contextSpan}})))}function Pe(Ke,oe,pe){let z=So(Ke);L.assert(pe.some(yt=>So(yt)===z)),C();let Te=Zi(pe,yt=>l.getSourceFile(yt)),j=w(Ke);return Q7.getDocumentHighlights(l,g,j,oe,Te)}function Ce(Ke,oe,pe,z,Te){C();let j=w(Ke),yt=_7(ef(j,oe));if(RG.nodeIsEligibleForRename(yt))if(Re(yt)&&(Xm(yt.parent)||GS(yt.parent))&&GI(yt.escapedText)){let{openingElement:lt,closingElement:Qe}=yt.parent.parent;return[lt,Qe].map(Vt=>{let Hn=Du(Vt.tagName,j);return{fileName:j.fileName,textSpan:Hn,...js.toContextSpan(Hn,j,Vt.parent)}})}else return Be(yt,oe,{findInStrings:pe,findInComments:z,providePrefixAndSuffixTextForRename:Te,use:js.FindReferencesUse.Rename},(lt,Qe,Vt)=>js.toRenameLocation(lt,Qe,Vt,Te||!1))}function Ie(Ke,oe){return C(),Be(ef(w(Ke),oe),oe,{use:js.FindReferencesUse.References},js.toReferenceEntry)}function Be(Ke,oe,pe,z){C();let Te=pe&&pe.use===js.FindReferencesUse.Rename?l.getSourceFiles().filter(j=>!l.isSourceFileDefaultLibrary(j)):l.getSourceFiles();return js.findReferenceOrRenameEntries(l,g,Te,Ke,oe,pe,z)}function Ne(Ke,oe){return C(),js.findReferencedSymbols(l,g,l.getSourceFiles(),w(Ke),oe)}function Le(Ke){return C(),js.Core.getReferencesForFileName(Ke,l,l.getSourceFiles()).map(js.toReferenceEntry)}function Ye(Ke,oe,pe,z=!1){C();let Te=pe?[w(pe)]:l.getSourceFiles();return oye(Te,l.getTypeChecker(),g,Ke,oe,z)}function _t(Ke,oe,pe){C();let z=w(Ke),Te=e.getCustomTransformers&&e.getCustomTransformers();return Ype(l,z,!!oe,g,Te,pe)}function ct(Ke,oe,{triggerReason:pe}=Cp){C();let z=w(Ke);return BP.getSignatureHelpItems(l,z,oe,pe,g)}function Rt(Ke){return s.getCurrentSourceFile(Ke)}function We(Ke,oe,pe){let z=s.getCurrentSourceFile(Ke),Te=ef(z,oe);if(Te===z)return;switch(Te.kind){case 208:case 163:case 10:case 95:case 110:case 104:case 106:case 108:case 194:case 79:break;default:return}let j=Te;for(;;)if(j2(j)||yhe(j))j=j.parent;else if(UX(j))if(j.parent.parent.kind===264&&j.parent.parent.body===j.parent)j=j.parent.parent.name;else break;else break;return Wc(j.getStart(),Te.getEnd())}function qe(Ke,oe){let pe=s.getCurrentSourceFile(Ke);return x$.spanInSourceFileAtLocation(pe,oe)}function zt(Ke){return uye(s.getCurrentSourceFile(Ke),g)}function Qt(Ke){return dye(s.getCurrentSourceFile(Ke),g)}function tn(Ke,oe,pe){return C(),(pe||\"original\")===\"2020\"?T5.v2020.getSemanticClassifications(l,g,w(Ke),oe):Cge(l.getTypeChecker(),g,w(Ke),l.getClassifiableNames(),oe)}function kn(Ke,oe,pe){return C(),(pe||\"original\")===\"original\"?BY(l.getTypeChecker(),g,w(Ke),l.getClassifiableNames(),oe):T5.v2020.getEncodedSemanticClassifications(l,g,w(Ke),oe)}function _n(Ke,oe){return Dge(g,s.getCurrentSourceFile(Ke),oe)}function Gt(Ke,oe){return UY(g,s.getCurrentSourceFile(Ke),oe)}function $n(Ke){let oe=s.getCurrentSourceFile(Ke);return See.collectElements(oe,g)}let ui=new Map(Object.entries({18:19,20:21,22:23,31:29}));ui.forEach((Ke,oe)=>ui.set(Ke.toString(),Number(oe)));function Ni(Ke,oe){let pe=s.getCurrentSourceFile(Ke),z=nk(pe,oe),Te=z.getStart(pe)===oe?ui.get(z.kind.toString()):void 0,j=Te&&Yo(z.parent,Te,pe);return j?[Du(z,pe),Du(j,pe)].sort((yt,lt)=>yt.start-lt.start):Je}function Pi(Ke,oe,pe){let z=Ms(),Te=tP(pe),j=s.getCurrentSourceFile(Ke);v(\"getIndentationAtPosition: getCurrentSourceFile: \"+(Ms()-z)),z=Ms();let yt=tl.SmartIndenter.getIndentation(oe,j,Te);return v(\"getIndentationAtPosition: computeIndentation  : \"+(Ms()-z)),yt}function gr(Ke,oe,pe,z){let Te=s.getCurrentSourceFile(Ke);return tl.formatSelection(oe,pe,Te,tl.getFormatContext(tP(z),e))}function pt(Ke,oe){return tl.formatDocument(s.getCurrentSourceFile(Ke),tl.getFormatContext(tP(oe),e))}function nn(Ke,oe,pe,z){let Te=s.getCurrentSourceFile(Ke),j=tl.getFormatContext(tP(z),e);if(!Kg(Te,oe))switch(pe){case\"{\":return tl.formatOnOpeningCurly(oe,Te,j);case\"}\":return tl.formatOnClosingCurly(oe,Te,j);case\";\":return tl.formatOnSemicolon(oe,Te,j);case`\n`:return tl.formatOnEnter(oe,Te,j)}return[]}function Dt(Ke,oe,pe,z,Te,j=Cp){C();let yt=w(Ke),lt=Wc(oe,pe),Qe=tl.getFormatContext(Te,e);return Uo(fA(z,Zv,Es),Vt=>(g.throwIfCancellationRequested(),gu.getFixes({errorCode:Vt,sourceFile:yt,span:lt,program:l,host:e,cancellationToken:g,formatContext:Qe,preferences:j})))}function pn(Ke,oe,pe,z=Cp){C(),L.assert(Ke.type===\"file\");let Te=w(Ke.fileName),j=tl.getFormatContext(pe,e);return gu.getAllFixes({fixId:oe,sourceFile:Te,program:l,host:e,cancellationToken:g,formatContext:j,preferences:z})}function An(Ke,oe,pe=Cp){var z;C(),L.assert(Ke.type===\"file\");let Te=w(Ke.fileName),j=tl.getFormatContext(oe,e),yt=(z=Ke.mode)!=null?z:Ke.skipDestructiveCodeActions?\"SortAndCombine\":\"All\";return b_.organizeImports(Te,j,e,l,pe,yt)}function Kn(Ke,oe,pe,z=Cp){return Nge(P(),Ke,oe,e,tl.getFormatContext(pe,e),z,A)}function hi(Ke,oe){let pe=typeof Ke==\"string\"?oe:Ke;return ba(pe)?Promise.all(pe.map(z=>ri(z))):ri(pe)}function ri(Ke){let oe=pe=>Ts(pe,m,x);return L.assertEqual(Ke.type,\"install package\"),e.installPackage?e.installPackage({fileName:oe(Ke.file),packageName:Ke.packageName}):Promise.reject(\"Host does not implement `installPackage`\")}function vn(Ke,oe,pe,z){let Te=z?tl.getFormatContext(z,e).options:void 0;return xb.getDocCommentTemplateAtPosition(bb(e,Te),s.getCurrentSourceFile(Ke),oe,pe)}function Ht(Ke,oe,pe){if(pe===60)return!1;let z=s.getCurrentSourceFile(Ke);if(n1(z,oe))return!1;if(khe(z,oe))return pe===123;if(qX(z,oe))return!1;switch(pe){case 39:case 34:case 96:return!Kg(z,oe)}return!0}function En(Ke,oe){let pe=s.getCurrentSourceFile(Ke),z=el(oe,pe);if(!z)return;let Te=z.kind===31&&Xm(z.parent)?z.parent.parent:CS(z)&&Hg(z.parent)?z.parent:void 0;if(Te&&ve(Te))return{newText:`</${Te.openingElement.tagName.getText(pe)}>`};let j=z.kind===31&&US(z.parent)?z.parent.parent:CS(z)&&BS(z.parent)?z.parent:void 0;if(j&&nt(j))return{newText:\"</>\"}}function dr(Ke,oe){return{lineStarts:Ke.getLineStarts(),firstLine:Ke.getLineAndCharacterOfPosition(oe.pos).line,lastLine:Ke.getLineAndCharacterOfPosition(oe.end).line}}function Cr(Ke,oe,pe){let z=s.getCurrentSourceFile(Ke),Te=[],{lineStarts:j,firstLine:yt,lastLine:lt}=dr(z,oe),Qe=pe||!1,Vt=Number.MAX_VALUE,Hn=new Map,jr=new RegExp(/\\S/),ei=m7(z,j[yt]),Kr=ei?\"{/*\":\"//\";for(let Si=yt;Si<=lt;Si++){let Ja=z.text.substring(j[Si],z.getLineEndOfPosition(j[Si])),Za=jr.exec(Ja);Za&&(Vt=Math.min(Vt,Za.index),Hn.set(Si.toString(),Za.index),Ja.substr(Za.index,Kr.length)!==Kr&&(Qe=pe===void 0||pe))}for(let Si=yt;Si<=lt;Si++){if(yt!==lt&&j[Si]===oe.end)continue;let Ja=Hn.get(Si.toString());Ja!==void 0&&(ei?Te.push.apply(Te,Se(Ke,{pos:j[Si]+Vt,end:z.getLineEndOfPosition(j[Si])},Qe,ei)):Qe?Te.push({newText:Kr,span:{length:0,start:j[Si]+Vt}}):z.text.substr(j[Si]+Ja,Kr.length)===Kr&&Te.push({newText:\"\",span:{length:Kr.length,start:j[Si]+Ja}}))}return Te}function Se(Ke,oe,pe,z){var Te;let j=s.getCurrentSourceFile(Ke),yt=[],{text:lt}=j,Qe=!1,Vt=pe||!1,Hn=[],{pos:jr}=oe,ei=z!==void 0?z:m7(j,jr),Kr=ei?\"{/*\":\"/*\",Si=ei?\"*/}\":\"*/\",Ja=ei?\"\\\\{\\\\/\\\\*\":\"\\\\/\\\\*\",Za=ei?\"\\\\*\\\\/\\\\}\":\"\\\\*\\\\/\";for(;jr<=oe.end;){let Fa=lt.substr(jr,Kr.length)===Kr?Kr.length:0,Hi=Kg(j,jr+Fa);if(Hi)ei&&(Hi.pos--,Hi.end++),Hn.push(Hi.pos),Hi.kind===3&&Hn.push(Hi.end),Qe=!0,jr=Hi.end+1;else{let xi=lt.substring(jr,oe.end).search(`(${Ja})|(${Za})`);Vt=pe!==void 0?pe:Vt||!Whe(lt,jr,xi===-1?oe.end:jr+xi),jr=xi===-1?oe.end+1:jr+xi+Si.length}}if(Vt||!Qe){((Te=Kg(j,oe.pos))==null?void 0:Te.kind)!==2&&Ny(Hn,oe.pos,Es),Ny(Hn,oe.end,Es);let Fa=Hn[0];lt.substr(Fa,Kr.length)!==Kr&&yt.push({newText:Kr,span:{length:0,start:Fa}});for(let Hi=1;Hi<Hn.length-1;Hi++)lt.substr(Hn[Hi]-Si.length,Si.length)!==Si&&yt.push({newText:Si,span:{length:0,start:Hn[Hi]}}),lt.substr(Hn[Hi],Kr.length)!==Kr&&yt.push({newText:Kr,span:{length:0,start:Hn[Hi]}});yt.length%2!==0&&yt.push({newText:Si,span:{length:0,start:Hn[Hn.length-1]}})}else for(let Fa of Hn){let Hi=Fa-Si.length>0?Fa-Si.length:0,xi=lt.substr(Hi,Si.length)===Si?Si.length:0;yt.push({newText:\"\",span:{length:Kr.length,start:Fa-xi}})}return yt}function at(Ke,oe){let pe=s.getCurrentSourceFile(Ke),{firstLine:z,lastLine:Te}=dr(pe,oe);return z===Te&&oe.pos!==oe.end?Se(Ke,oe,!0):Cr(Ke,oe,!0)}function Tt(Ke,oe){let pe=s.getCurrentSourceFile(Ke),z=[],{pos:Te}=oe,{end:j}=oe;Te===j&&(j+=m7(pe,Te)?2:1);for(let yt=Te;yt<=j;yt++){let lt=Kg(pe,yt);if(lt){switch(lt.kind){case 2:z.push.apply(z,Cr(Ke,{end:lt.end,pos:lt.pos+1},!1));break;case 3:z.push.apply(z,Se(Ke,{end:lt.end,pos:lt.pos+1},!1))}yt=lt.end+1}}return z}function ve({openingElement:Ke,closingElement:oe,parent:pe}){return!yb(Ke.tagName,oe.tagName)||Hg(pe)&&yb(Ke.tagName,pe.openingElement.tagName)&&ve(pe)}function nt({closingFragment:Ke,parent:oe}){return!!(Ke.flags&131072)||BS(oe)&&nt(oe)}function ce(Ke,oe,pe){let z=s.getCurrentSourceFile(Ke),Te=tl.getRangeOfEnclosingComment(z,oe);return Te&&(!pe||Te.kind===3)?lv(Te):void 0}function Q(Ke,oe){C();let pe=w(Ke);g.throwIfCancellationRequested();let z=pe.text,Te=[];if(oe.length>0&&!Qe(pe.fileName)){let Vt=yt(),Hn;for(;Hn=Vt.exec(z);){g.throwIfCancellationRequested();let jr=3;L.assert(Hn.length===oe.length+jr);let ei=Hn[1],Kr=Hn.index+ei.length;if(!Kg(pe,Kr))continue;let Si;for(let Za=0;Za<oe.length;Za++)Hn[Za+jr]&&(Si=oe[Za]);if(Si===void 0)return L.fail();if(lt(z.charCodeAt(Kr+Si.text.length)))continue;let Ja=Hn[2];Te.push({descriptor:Si,message:Ja,position:Kr})}}return Te;function j(Vt){return Vt.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\")}function yt(){let Vt=/(?:\\/\\/+\\s*)/.source,Hn=/(?:\\/\\*+\\s*)/.source,ei=\"(\"+/(?:^(?:\\s|\\*)*)/.source+\"|\"+Vt+\"|\"+Hn+\")\",Kr=\"(?:\"+on(oe,Hi=>\"(\"+j(Hi.text)+\")\").join(\"|\")+\")\",Si=/(?:$|\\*\\/)/.source,Ja=/(?:.*?)/.source,Za=\"(\"+Kr+Ja+\")\",Fa=ei+Za+Si;return new RegExp(Fa,\"gim\")}function lt(Vt){return Vt>=97&&Vt<=122||Vt>=65&&Vt<=90||Vt>=48&&Vt<=57}function Qe(Vt){return jl(Vt,\"/node_modules/\")}}function ue(Ke,oe,pe){return C(),RG.getRenameInfo(l,w(Ke),oe,pe||{})}function G(Ke,oe,pe,z,Te,j){let[yt,lt]=typeof oe==\"number\"?[oe,void 0]:[oe.pos,oe.end];return{file:Ke,startPosition:yt,endPosition:lt,program:P(),host:e,formatContext:tl.getFormatContext(z,e),cancellationToken:g,preferences:pe,triggerReason:Te,kind:j}}function Oe(Ke,oe,pe){return{file:Ke,program:P(),host:e,span:oe,preferences:pe,cancellationToken:g}}function je(Ke,oe){return ete.getSmartSelectionRange(oe,s.getCurrentSourceFile(Ke))}function Ge(Ke,oe,pe=Cp,z,Te){C();let j=w(Ke);return Ok.getApplicableRefactors(G(j,oe,pe,Cp,z,Te))}function kt(Ke,oe,pe,z,Te,j=Cp){C();let yt=w(Ke);return Ok.getEditsForRefactor(G(yt,pe,j,oe),z,Te)}function Kt(Ke,oe){return oe===0?{line:0,character:0}:A.toLineColumnOffset(Ke,oe)}function ln(Ke,oe){C();let pe=rx.resolveCallHierarchyDeclaration(l,ef(w(Ke),oe));return pe&&pge(pe,z=>rx.createCallHierarchyItem(l,z))}function ir(Ke,oe){C();let pe=w(Ke),z=LY(rx.resolveCallHierarchyDeclaration(l,oe===0?pe:ef(pe,oe)));return z?rx.getIncomingCalls(l,z,g):[]}function ae(Ke,oe){C();let pe=w(Ke),z=LY(rx.resolveCallHierarchyDeclaration(l,oe===0?pe:ef(pe,oe)));return z?rx.getOutgoingCalls(l,z):[]}function rt(Ke,oe,pe=Cp){C();let z=w(Ke);return fee.provideInlayHints(Oe(z,oe,pe))}let Ot={dispose:W,cleanupSemanticCache:q,getSyntacticDiagnostics:Y,getSemanticDiagnostics:R,getSuggestionDiagnostics:ie,getCompilerOptionsDiagnostics:$,getSyntacticClassifications:_n,getSemanticClassifications:tn,getEncodedSyntacticClassifications:Gt,getEncodedSemanticClassifications:kn,getCompletionsAtPosition:fe,getCompletionEntryDetails:Z,getCompletionEntrySymbol:U,getSignatureHelpItems:ct,getQuickInfoAtPosition:re,getDefinitionAtPosition:ge,getDefinitionAndBoundSpan:X,getImplementationAtPosition:we,getTypeDefinitionAtPosition:Ve,getReferencesAtPosition:Ie,findReferences:Ne,getFileReferences:Le,getOccurrencesAtPosition:ke,getDocumentHighlights:Pe,getNameOrDottedNameSpan:We,getBreakpointStatementAtPosition:qe,getNavigateToItems:Ye,getRenameInfo:ue,getSmartSelectionRange:je,findRenameLocations:Ce,getNavigationBarItems:zt,getNavigationTree:Qt,getOutliningSpans:$n,getTodoComments:Q,getBraceMatchingAtPosition:Ni,getIndentationAtPosition:Pi,getFormattingEditsForRange:gr,getFormattingEditsForDocument:pt,getFormattingEditsAfterKeystroke:nn,getDocCommentTemplateAtPosition:vn,isValidBraceCompletionAtPosition:Ht,getJsxClosingTagAtPosition:En,getSpanOfEnclosingComment:ce,getCodeFixesAtPosition:Dt,getCombinedCodeFix:pn,applyCodeActionCommand:hi,organizeImports:An,getEditsForFileRename:Kn,getEmitOutput:_t,getNonBoundSourceFile:Rt,getProgram:P,getCurrentProgram:()=>l,getAutoImportProvider:F,updateIsDefinitionOfReferencedSymbols:B,getApplicableRefactors:Ge,getEditsForRefactor:kt,toLineColumnOffset:Kt,getSourceMapper:()=>A,clearSourceMapperCache:()=>A.clearCache(),prepareCallHierarchy:ln,provideCallHierarchyIncomingCalls:ir,provideCallHierarchyOutgoingCalls:ae,toggleLineComment:Cr,toggleMultilineComment:Se,commentSelection:at,uncommentSelection:Tt,provideInlayHints:rt,getSupportedCodeFixes:Fye};switch(o){case 0:break;case 1:y$.forEach(Ke=>Ot[Ke]=()=>{throw new Error(`LanguageService Operation: ${Ke} not allowed in LanguageServiceMode.PartialSemantic`)});break;case 2:qye.forEach(Ke=>Ot[Ke]=()=>{throw new Error(`LanguageService Operation: ${Ke} not allowed in LanguageServiceMode.Syntactic`)});break;default:L.assertNever(o)}return Ot}function p$(e){return e.nameTable||s3e(e),e.nameTable}function s3e(e){let t=e.nameTable=new Map;e.forEachChild(function r(i){if(Re(i)&&!GX(i)&&i.escapedText||yf(i)&&c3e(i)){let o=MI(i);t.set(o,t.get(o)===void 0?i.pos:-1)}else if(pi(i)){let o=i.escapedText;t.set(o,t.get(o)===void 0?i.pos:-1)}if(pa(i,r),Kd(i))for(let o of i.jsDoc)pa(o,r)})}function c3e(e){return Rh(e)||e.parent.kind===280||d3e(e)||_R(e)}function nP(e){let t=l3e(e);return t&&(rs(t.parent)||K0(t.parent))?t:void 0}function l3e(e){switch(e.kind){case 10:case 14:case 8:if(e.parent.kind===164)return Xj(e.parent.parent)?e.parent.parent:void 0;case 79:return Xj(e.parent)&&(e.parent.parent.kind===207||e.parent.parent.kind===289)&&e.parent.name===e?e.parent:void 0}}function u3e(e,t){let r=nP(e);if(r){let i=t.getContextualType(r.parent),o=i&&_5(r,t,i,!1);if(o&&o.length===1)return Vo(o)}return t.getSymbolAtLocation(e)}function _5(e,t,r,i){let o=VN(e.name);if(!o)return Je;if(!r.isUnion()){let l=r.getProperty(o);return l?[l]:Je}let s=Zi(r.types,l=>(rs(e.parent)||K0(e.parent))&&t.isTypeInvalidDueToUnionDiscriminant(l,e.parent)?void 0:l.getProperty(o));if(i&&(s.length===0||s.length===r.types.length)){let l=r.getProperty(o);if(l)return[l]}return s.length===0?Zi(r.types,l=>l.getProperty(o)):s}function d3e(e){return e&&e.parent&&e.parent.kind===209&&e.parent.argumentExpression===e}function f3e(e){if(xl)return vi(ni(So(xl.getExecutingFilePath())),X8(e));throw new Error(\"getDefaultLibFilePath is only supported when consumed as a node module. \")}var m$,p5,m5,Uye,h$,h5,g5,Vye,jye,Hye,Wye,zye,Jye,Kye,g$,y$,qye,_3e=gt({\"src/services/services.ts\"(){\"use strict\";Fr(),Fr(),lye(),wye(),m$=\"0.8\",p5=class{constructor(e,t,r){this.pos=t,this.end=r,this.flags=0,this.modifierFlagsCache=0,this.transformFlags=0,this.parent=void 0,this.kind=e}assertHasRealPosition(e){L.assert(!vp(this.pos)&&!vp(this.end),e||\"Node must have a real position for this operation\")}getSourceFile(){return Gn(this)}getStart(e,t){return this.assertHasRealPosition(),gT(this,e,t)}getFullStart(){return this.assertHasRealPosition(),this.pos}getEnd(){return this.assertHasRealPosition(),this.end}getWidth(e){return this.assertHasRealPosition(),this.getEnd()-this.getStart(e)}getFullWidth(){return this.assertHasRealPosition(),this.end-this.pos}getLeadingTriviaWidth(e){return this.assertHasRealPosition(),this.getStart(e)-this.pos}getFullText(e){return this.assertHasRealPosition(),(e||this.getSourceFile()).text.substring(this.pos,this.end)}getText(e){return this.assertHasRealPosition(),e||(e=this.getSourceFile()),e.text.substring(this.getStart(e),this.getEnd())}getChildCount(e){return this.getChildren(e).length}getChildAt(e,t){return this.getChildren(t)[e]}getChildren(e){return this.assertHasRealPosition(\"Node without a real position cannot be scanned and thus has no token nodes - use forEachChild and collect the result if that's fine\"),this._children||(this._children=i3e(this,e))}getFirstToken(e){this.assertHasRealPosition();let t=this.getChildren(e);if(!t.length)return;let r=wr(t,i=>i.kind<312||i.kind>353);return r.kind<163?r:r.getFirstToken(e)}getLastToken(e){this.assertHasRealPosition();let t=this.getChildren(e),r=Os(t);if(r)return r.kind<163?r:r.getLastToken(e)}forEachChild(e,t){return pa(this,e,t)}},m5=class{constructor(e,t){this.pos=e,this.end=t,this.flags=0,this.modifierFlagsCache=0,this.transformFlags=0,this.parent=void 0}getSourceFile(){return Gn(this)}getStart(e,t){return gT(this,e,t)}getFullStart(){return this.pos}getEnd(){return this.end}getWidth(e){return this.getEnd()-this.getStart(e)}getFullWidth(){return this.end-this.pos}getLeadingTriviaWidth(e){return this.getStart(e)-this.pos}getFullText(e){return(e||this.getSourceFile()).text.substring(this.pos,this.end)}getText(e){return e||(e=this.getSourceFile()),e.text.substring(this.getStart(e),this.getEnd())}getChildCount(){return this.getChildren().length}getChildAt(e){return this.getChildren()[e]}getChildren(){return this.kind===1&&this.jsDoc||Je}getFirstToken(){}getLastToken(){}forEachChild(){}},Uye=class{constructor(e,t){this.id=0,this.mergeId=0,this.flags=e,this.escapedName=t}getFlags(){return this.flags}get name(){return fc(this)}getEscapedName(){return this.escapedName}getName(){return this.name}getDeclarations(){return this.declarations}getDocumentationComment(e){if(!this.documentationComment)if(this.documentationComment=Je,!this.declarations&&Zp(this)&&this.links.target&&Zp(this.links.target)&&this.links.target.links.tupleLabelDeclaration){let t=this.links.target.links.tupleLabelDeclaration;this.documentationComment=eP([t],e)}else this.documentationComment=eP(this.declarations,e);return this.documentationComment}getContextualDocumentationComment(e,t){if(e){if(zy(e)&&(this.contextualGetAccessorDocumentationComment||(this.contextualGetAccessorDocumentationComment=eP(Pr(this.declarations,zy),t)),Fn(this.contextualGetAccessorDocumentationComment)))return this.contextualGetAccessorDocumentationComment;if(Ng(e)&&(this.contextualSetAccessorDocumentationComment||(this.contextualSetAccessorDocumentationComment=eP(Pr(this.declarations,Ng),t)),Fn(this.contextualSetAccessorDocumentationComment)))return this.contextualSetAccessorDocumentationComment}return this.getDocumentationComment(t)}getJsDocTags(e){return this.tags===void 0&&(this.tags=u5(this.declarations,e)),this.tags}getContextualJsDocTags(e,t){if(e){if(zy(e)&&(this.contextualGetAccessorTags||(this.contextualGetAccessorTags=u5(Pr(this.declarations,zy),t)),Fn(this.contextualGetAccessorTags)))return this.contextualGetAccessorTags;if(Ng(e)&&(this.contextualSetAccessorTags||(this.contextualSetAccessorTags=u5(Pr(this.declarations,Ng),t)),Fn(this.contextualSetAccessorTags)))return this.contextualSetAccessorTags}return this.getJsDocTags(t)}},h$=class extends m5{constructor(e,t,r){super(t,r),this.kind=e}},h5=class extends m5{constructor(e,t,r){super(t,r),this.kind=79}get text(){return vr(this)}},h5.prototype.kind=79,g5=class extends m5{constructor(e,t,r){super(t,r),this.kind=80}get text(){return vr(this)}},g5.prototype.kind=80,Vye=class{constructor(e,t){this.checker=e,this.flags=t}getFlags(){return this.flags}getSymbol(){return this.symbol}getProperties(){return this.checker.getPropertiesOfType(this)}getProperty(e){return this.checker.getPropertyOfType(this,e)}getApparentProperties(){return this.checker.getAugmentedPropertiesOfType(this)}getCallSignatures(){return this.checker.getSignaturesOfType(this,0)}getConstructSignatures(){return this.checker.getSignaturesOfType(this,1)}getStringIndexType(){return this.checker.getIndexTypeOfType(this,0)}getNumberIndexType(){return this.checker.getIndexTypeOfType(this,1)}getBaseTypes(){return this.isClassOrInterface()?this.checker.getBaseTypes(this):void 0}isNullableType(){return this.checker.isNullableType(this)}getNonNullableType(){return this.checker.getNonNullableType(this)}getNonOptionalType(){return this.checker.getNonOptionalType(this)}getConstraint(){return this.checker.getBaseConstraintOfType(this)}getDefault(){return this.checker.getDefaultFromTypeParameter(this)}isUnion(){return!!(this.flags&1048576)}isIntersection(){return!!(this.flags&2097152)}isUnionOrIntersection(){return!!(this.flags&3145728)}isLiteral(){return!!(this.flags&2432)}isStringLiteral(){return!!(this.flags&128)}isNumberLiteral(){return!!(this.flags&256)}isTypeParameter(){return!!(this.flags&262144)}isClassOrInterface(){return!!(Ur(this)&3)}isClass(){return!!(Ur(this)&1)}isIndexType(){return!!(this.flags&4194304)}get typeArguments(){if(Ur(this)&4)return this.checker.getTypeArguments(this)}},jye=class{constructor(e,t){this.checker=e,this.flags=t}getDeclaration(){return this.declaration}getTypeParameters(){return this.typeParameters}getParameters(){return this.parameters}getReturnType(){return this.checker.getReturnTypeOfSignature(this)}getTypeParameterAtPosition(e){let t=this.checker.getParameterType(this,e);if(t.isIndexType()&&lL(t.type)){let r=t.type.getConstraint();if(r)return this.checker.getIndexType(r)}return t}getDocumentationComment(){return this.documentationComment||(this.documentationComment=eP(aT(this.declaration),this.checker))}getJsDocTags(){return this.jsDocTags||(this.jsDocTags=u5(aT(this.declaration),this.checker))}},Hye=class extends p5{constructor(e,t,r){super(e,t,r),this.kind=308}update(e,t){return uJ(this,e,t)}getLineAndCharacterOfPosition(e){return Gs(this,e)}getLineStarts(){return Sh(this)}getPositionOfLineAndCharacter(e,t,r){return mj(Sh(this),e,t,this.text,r)}getLineEndOfPosition(e){let{line:t}=this.getLineAndCharacterOfPosition(e),r=this.getLineStarts(),i;t+1>=r.length&&(i=this.getEnd()),i||(i=r[t+1]-1);let o=this.getFullText();return o[i]===`\n`&&o[i-1]===\"\\r\"?i-1:i}getNamedDeclarations(){return this.namedDeclarations||(this.namedDeclarations=this.computeNamedDeclarations()),this.namedDeclarations}computeNamedDeclarations(){let e=Nf();return this.forEachChild(o),e;function t(s){let l=i(s);l&&e.add(l,s)}function r(s){let l=e.get(s);return l||e.set(s,l=[]),l}function i(s){let l=Sj(s);return l&&(ts(l)&&br(l.expression)?l.expression.name.text:Ys(l)?VN(l):void 0)}function o(s){switch(s.kind){case 259:case 215:case 171:case 170:let l=s,f=i(l);if(f){let m=r(f),v=Os(m);v&&l.parent===v.parent&&l.symbol===v.symbol?l.body&&!v.body&&(m[m.length-1]=l):m.push(l)}pa(s,o);break;case 260:case 228:case 261:case 262:case 263:case 264:case 268:case 278:case 273:case 270:case 271:case 174:case 175:case 184:t(s),pa(s,o);break;case 166:if(!Mr(s,16476))break;case 257:case 205:{let m=s;if(La(m.name)){pa(m.name,o);break}m.initializer&&o(m.initializer)}case 302:case 169:case 168:t(s);break;case 275:let d=s;d.exportClause&&(h_(d.exportClause)?mn(d.exportClause.elements,o):o(d.exportClause.name));break;case 269:let g=s.importClause;g&&(g.name&&t(g.name),g.namedBindings&&(g.namedBindings.kind===271?t(g.namedBindings):mn(g.namedBindings.elements,o)));break;case 223:ic(s)!==0&&t(s);default:pa(s,o)}}}},Wye=class{constructor(e,t,r){this.fileName=e,this.text=t,this.skipTrivia=r}getLineAndCharacterOfPosition(e){return Gs(this,e)}},zye=class{constructor(e){this.host=e}getCurrentSourceFile(e){var t,r,i,o,s,l,f,d;let g=this.host.getScriptSnapshot(e);if(!g)throw new Error(\"Could not find file: '\"+e+\"'.\");let m=mY(e,this.host),v=this.host.getScriptVersion(e),S;if(this.currentFileName!==e){let x={languageVersion:99,impliedNodeFormat:NF(Ts(e,this.host.getCurrentDirectory(),((i=(r=(t=this.host).getCompilerHost)==null?void 0:r.call(t))==null?void 0:i.getCanonicalFileName)||lb(this.host)),(d=(f=(l=(s=(o=this.host).getCompilerHost)==null?void 0:s.call(o))==null?void 0:l.getModuleResolutionCache)==null?void 0:f.call(l))==null?void 0:d.getPackageJsonInfoCache(),this.host,this.host.getCompilationSettings()),setExternalModuleIndicator:OR(this.host.getCompilationSettings())};S=f5(e,g,x,v,!0,m)}else if(this.currentFileVersion!==v){let x=g.getChangeRange(this.currentFileScriptSnapshot);S=_$(this.currentSourceFile,g,v,x)}return S&&(this.currentFileVersion=v,this.currentFileName=e,this.currentFileScriptSnapshot=g,this.currentSourceFile=S),this.currentSourceFile}},Jye={isCancellationRequested:m0,throwIfCancellationRequested:Ba},Kye=class{constructor(e){this.cancellationToken=e}isCancellationRequested(){return this.cancellationToken.isCancellationRequested()}throwIfCancellationRequested(){var e;if(this.isCancellationRequested())throw(e=ai)==null||e.instant(ai.Phase.Session,\"cancellationThrown\",{kind:\"CancellationTokenObject\"}),new tI}},g$=class{constructor(e,t=20){this.hostCancellationToken=e,this.throttleWaitMilliseconds=t,this.lastCancellationCheckTime=0}isCancellationRequested(){let e=Ms();return Math.abs(e-this.lastCancellationCheckTime)>=this.throttleWaitMilliseconds?(this.lastCancellationCheckTime=e,this.hostCancellationToken.isCancellationRequested()):!1}throwIfCancellationRequested(){var e;if(this.isCancellationRequested())throw(e=ai)==null||e.instant(ai.Phase.Session,\"cancellationThrown\",{kind:\"ThrottledCancellationToken\"}),new tI}},y$=[\"getSemanticDiagnostics\",\"getSuggestionDiagnostics\",\"getCompilerOptionsDiagnostics\",\"getSemanticClassifications\",\"getEncodedSemanticClassifications\",\"getCodeFixesAtPosition\",\"getCombinedCodeFix\",\"applyCodeActionCommand\",\"organizeImports\",\"getEditsForFileRename\",\"getEmitOutput\",\"getApplicableRefactors\",\"getEditsForRefactor\",\"prepareCallHierarchy\",\"provideCallHierarchyIncomingCalls\",\"provideCallHierarchyOutgoingCalls\",\"provideInlayHints\",\"getSupportedCodeFixes\"],qye=[...y$,\"getCompletionsAtPosition\",\"getCompletionEntryDetails\",\"getCompletionEntrySymbol\",\"getSignatureHelpItems\",\"getQuickInfoAtPosition\",\"getDefinitionAtPosition\",\"getDefinitionAndBoundSpan\",\"getImplementationAtPosition\",\"getTypeDefinitionAtPosition\",\"getReferencesAtPosition\",\"findReferences\",\"getOccurrencesAtPosition\",\"getDocumentHighlights\",\"getNavigateToItems\",\"getRenameInfo\",\"findRenameLocations\",\"getApplicableRefactors\"],_le(o3e())}});function p3e(e,t,r){let i=[];r=t$(r,i);let o=ba(e)?e:[e],s=lN(void 0,void 0,D,r,o,t,!0);return s.diagnostics=Qi(s.diagnostics,i),s}var m3e=gt({\"src/services/transform.ts\"(){\"use strict\";Fr()}});function y5(e,t){e&&e.log(\"*INTERNAL ERROR* - Exception in typescript services: \"+t.message)}function h3e(e,t,r,i){let o;i&&(e.log(t),o=Ms());let s=r();if(i){let l=Ms();if(e.log(`${t} completed in ${l-o} msec`),Ta(s)){let f=s;f.length>128&&(f=f.substring(0,128)+\"...\"),e.log(`  result.length=${f.length}, result='${JSON.stringify(f)}'`)}}return s}function v$(e,t,r,i){return Xye(e,t,!0,r,i)}function Xye(e,t,r,i,o){try{let s=h3e(e,t,i,o);return r?JSON.stringify({result:s}):s}catch(s){return s instanceof tI?JSON.stringify({canceled:!0}):(y5(e,s),s.description=t,JSON.stringify({error:s}))}}function b$(e,t){return e.map(r=>g3e(r,t))}function g3e(e,t){return{message:sv(e.messageText,t),start:e.start,length:e.length,category:C8(e),code:e.code,reportsUnnecessary:e.reportsUnnecessary,reportsDeprecated:e.reportsDeprecated}}function E$(e){return{spans:e.spans.join(\",\"),endOfLineState:e.endOfLineState}}var v5,Yye,T$,S$,b5,$ye,Qye,Zye,eve,y3e=gt({\"src/services/shims.ts\"(){\"use strict\";Fr(),v5=function(){return this}(),Yye=class{constructor(e){this.scriptSnapshotShim=e}getText(e,t){return this.scriptSnapshotShim.getText(e,t)}getLength(){return this.scriptSnapshotShim.getLength()}getChangeRange(e){let t=e,r=this.scriptSnapshotShim.getChangeRange(t.scriptSnapshotShim);if(r===null)return null;let i=JSON.parse(r);return Sw(il(i.span.start,i.span.length),i.newLength)}dispose(){\"dispose\"in this.scriptSnapshotShim&&this.scriptSnapshotShim.dispose()}},T$=class{constructor(e){this.shimHost=e,this.loggingEnabled=!1,this.tracingEnabled=!1,\"getModuleResolutionsForFile\"in this.shimHost&&(this.resolveModuleNames=(t,r)=>{let i=JSON.parse(this.shimHost.getModuleResolutionsForFile(r));return on(t,o=>{let s=zD(i,o);return s?{resolvedFileName:s,extension:jR(s),isExternalLibraryImport:!1}:void 0})}),\"directoryExists\"in this.shimHost&&(this.directoryExists=t=>this.shimHost.directoryExists(t)),\"getTypeReferenceDirectiveResolutionsForFile\"in this.shimHost&&(this.resolveTypeReferenceDirectives=(t,r)=>{let i=JSON.parse(this.shimHost.getTypeReferenceDirectiveResolutionsForFile(r));return on(t,o=>zD(i,Ta(o)?o:n_(o.fileName)))})}log(e){this.loggingEnabled&&this.shimHost.log(e)}trace(e){this.tracingEnabled&&this.shimHost.trace(e)}error(e){this.shimHost.error(e)}getProjectVersion(){if(this.shimHost.getProjectVersion)return this.shimHost.getProjectVersion()}getTypeRootsVersion(){return this.shimHost.getTypeRootsVersion?this.shimHost.getTypeRootsVersion():0}useCaseSensitiveFileNames(){return this.shimHost.useCaseSensitiveFileNames?this.shimHost.useCaseSensitiveFileNames():!1}getCompilationSettings(){let e=this.shimHost.getCompilationSettings();if(e===null||e===\"\")throw Error(\"LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings\");let t=JSON.parse(e);return t.allowNonTsExtensions=!0,t}getScriptFileNames(){let e=this.shimHost.getScriptFileNames();return JSON.parse(e)}getScriptSnapshot(e){let t=this.shimHost.getScriptSnapshot(e);return t&&new Yye(t)}getScriptKind(e){return\"getScriptKind\"in this.shimHost?this.shimHost.getScriptKind(e):0}getScriptVersion(e){return this.shimHost.getScriptVersion(e)}getLocalizedDiagnosticMessages(){let e=this.shimHost.getLocalizedDiagnosticMessages();if(e===null||e===\"\")return null;try{return JSON.parse(e)}catch(t){return this.log(t.description||\"diagnosticMessages.generated.json has invalid JSON format\"),null}}getCancellationToken(){let e=this.shimHost.getCancellationToken();return new g$(e)}getCurrentDirectory(){return this.shimHost.getCurrentDirectory()}getDirectories(e){return JSON.parse(this.shimHost.getDirectories(e))}getDefaultLibFileName(e){return this.shimHost.getDefaultLibFileName(JSON.stringify(e))}readDirectory(e,t,r,i,o){let s=tL(e,r,i,this.shimHost.useCaseSensitiveFileNames(),this.shimHost.getCurrentDirectory());return JSON.parse(this.shimHost.readDirectory(e,JSON.stringify(t),JSON.stringify(s.basePaths),s.excludePattern,s.includeFilePattern,s.includeDirectoryPattern,o))}readFile(e,t){return this.shimHost.readFile(e,t)}fileExists(e){return this.shimHost.fileExists(e)}},S$=class{constructor(e){this.shimHost=e,this.useCaseSensitiveFileNames=this.shimHost.useCaseSensitiveFileNames?this.shimHost.useCaseSensitiveFileNames():!1,\"directoryExists\"in this.shimHost?this.directoryExists=t=>this.shimHost.directoryExists(t):this.directoryExists=void 0,\"realpath\"in this.shimHost?this.realpath=t=>this.shimHost.realpath(t):this.realpath=void 0}readDirectory(e,t,r,i,o){let s=tL(e,r,i,this.shimHost.useCaseSensitiveFileNames(),this.shimHost.getCurrentDirectory());return JSON.parse(this.shimHost.readDirectory(e,JSON.stringify(t),JSON.stringify(s.basePaths),s.excludePattern,s.includeFilePattern,s.includeDirectoryPattern,o))}fileExists(e){return this.shimHost.fileExists(e)}readFile(e){return this.shimHost.readFile(e)}getDirectories(e){return JSON.parse(this.shimHost.getDirectories(e))}},b5=class{constructor(e){this.factory=e,e.registerShim(this)}dispose(e){this.factory.unregisterShim(this)}},$ye=class extends b5{constructor(e,t,r){super(e),this.host=t,this.languageService=r,this.logPerformance=!1,this.logger=this.host}forwardJSONCall(e,t){return v$(this.logger,e,t,this.logPerformance)}dispose(e){this.logger.log(\"dispose()\"),this.languageService.dispose(),this.languageService=null,v5&&v5.CollectGarbage&&(v5.CollectGarbage(),this.logger.log(\"CollectGarbage()\")),this.logger=null,super.dispose(e)}refresh(e){this.forwardJSONCall(`refresh(${e})`,()=>null)}cleanupSemanticCache(){this.forwardJSONCall(\"cleanupSemanticCache()\",()=>(this.languageService.cleanupSemanticCache(),null))}realizeDiagnostics(e){let t=bb(this.host,void 0);return b$(e,t)}getSyntacticClassifications(e,t,r){return this.forwardJSONCall(`getSyntacticClassifications('${e}', ${t}, ${r})`,()=>this.languageService.getSyntacticClassifications(e,il(t,r)))}getSemanticClassifications(e,t,r){return this.forwardJSONCall(`getSemanticClassifications('${e}', ${t}, ${r})`,()=>this.languageService.getSemanticClassifications(e,il(t,r)))}getEncodedSyntacticClassifications(e,t,r){return this.forwardJSONCall(`getEncodedSyntacticClassifications('${e}', ${t}, ${r})`,()=>E$(this.languageService.getEncodedSyntacticClassifications(e,il(t,r))))}getEncodedSemanticClassifications(e,t,r){return this.forwardJSONCall(`getEncodedSemanticClassifications('${e}', ${t}, ${r})`,()=>E$(this.languageService.getEncodedSemanticClassifications(e,il(t,r))))}getSyntacticDiagnostics(e){return this.forwardJSONCall(`getSyntacticDiagnostics('${e}')`,()=>{let t=this.languageService.getSyntacticDiagnostics(e);return this.realizeDiagnostics(t)})}getSemanticDiagnostics(e){return this.forwardJSONCall(`getSemanticDiagnostics('${e}')`,()=>{let t=this.languageService.getSemanticDiagnostics(e);return this.realizeDiagnostics(t)})}getSuggestionDiagnostics(e){return this.forwardJSONCall(`getSuggestionDiagnostics('${e}')`,()=>this.realizeDiagnostics(this.languageService.getSuggestionDiagnostics(e)))}getCompilerOptionsDiagnostics(){return this.forwardJSONCall(\"getCompilerOptionsDiagnostics()\",()=>{let e=this.languageService.getCompilerOptionsDiagnostics();return this.realizeDiagnostics(e)})}getQuickInfoAtPosition(e,t){return this.forwardJSONCall(`getQuickInfoAtPosition('${e}', ${t})`,()=>this.languageService.getQuickInfoAtPosition(e,t))}getNameOrDottedNameSpan(e,t,r){return this.forwardJSONCall(`getNameOrDottedNameSpan('${e}', ${t}, ${r})`,()=>this.languageService.getNameOrDottedNameSpan(e,t,r))}getBreakpointStatementAtPosition(e,t){return this.forwardJSONCall(`getBreakpointStatementAtPosition('${e}', ${t})`,()=>this.languageService.getBreakpointStatementAtPosition(e,t))}getSignatureHelpItems(e,t,r){return this.forwardJSONCall(`getSignatureHelpItems('${e}', ${t})`,()=>this.languageService.getSignatureHelpItems(e,t,r))}getDefinitionAtPosition(e,t){return this.forwardJSONCall(`getDefinitionAtPosition('${e}', ${t})`,()=>this.languageService.getDefinitionAtPosition(e,t))}getDefinitionAndBoundSpan(e,t){return this.forwardJSONCall(`getDefinitionAndBoundSpan('${e}', ${t})`,()=>this.languageService.getDefinitionAndBoundSpan(e,t))}getTypeDefinitionAtPosition(e,t){return this.forwardJSONCall(`getTypeDefinitionAtPosition('${e}', ${t})`,()=>this.languageService.getTypeDefinitionAtPosition(e,t))}getImplementationAtPosition(e,t){return this.forwardJSONCall(`getImplementationAtPosition('${e}', ${t})`,()=>this.languageService.getImplementationAtPosition(e,t))}getRenameInfo(e,t,r){return this.forwardJSONCall(`getRenameInfo('${e}', ${t})`,()=>this.languageService.getRenameInfo(e,t,r))}getSmartSelectionRange(e,t){return this.forwardJSONCall(`getSmartSelectionRange('${e}', ${t})`,()=>this.languageService.getSmartSelectionRange(e,t))}findRenameLocations(e,t,r,i,o){return this.forwardJSONCall(`findRenameLocations('${e}', ${t}, ${r}, ${i}, ${o})`,()=>this.languageService.findRenameLocations(e,t,r,i,o))}getBraceMatchingAtPosition(e,t){return this.forwardJSONCall(`getBraceMatchingAtPosition('${e}', ${t})`,()=>this.languageService.getBraceMatchingAtPosition(e,t))}isValidBraceCompletionAtPosition(e,t,r){return this.forwardJSONCall(`isValidBraceCompletionAtPosition('${e}', ${t}, ${r})`,()=>this.languageService.isValidBraceCompletionAtPosition(e,t,r))}getSpanOfEnclosingComment(e,t,r){return this.forwardJSONCall(`getSpanOfEnclosingComment('${e}', ${t})`,()=>this.languageService.getSpanOfEnclosingComment(e,t,r))}getIndentationAtPosition(e,t,r){return this.forwardJSONCall(`getIndentationAtPosition('${e}', ${t})`,()=>{let i=JSON.parse(r);return this.languageService.getIndentationAtPosition(e,t,i)})}getReferencesAtPosition(e,t){return this.forwardJSONCall(`getReferencesAtPosition('${e}', ${t})`,()=>this.languageService.getReferencesAtPosition(e,t))}findReferences(e,t){return this.forwardJSONCall(`findReferences('${e}', ${t})`,()=>this.languageService.findReferences(e,t))}getFileReferences(e){return this.forwardJSONCall(`getFileReferences('${e})`,()=>this.languageService.getFileReferences(e))}getOccurrencesAtPosition(e,t){return this.forwardJSONCall(`getOccurrencesAtPosition('${e}', ${t})`,()=>this.languageService.getOccurrencesAtPosition(e,t))}getDocumentHighlights(e,t,r){return this.forwardJSONCall(`getDocumentHighlights('${e}', ${t})`,()=>{let i=this.languageService.getDocumentHighlights(e,t,JSON.parse(r)),o=n_(Al(e));return Pr(i,s=>n_(Al(s.fileName))===o)})}getCompletionsAtPosition(e,t,r,i){return this.forwardJSONCall(`getCompletionsAtPosition('${e}', ${t}, ${r}, ${i})`,()=>this.languageService.getCompletionsAtPosition(e,t,r,i))}getCompletionEntryDetails(e,t,r,i,o,s,l){return this.forwardJSONCall(`getCompletionEntryDetails('${e}', ${t}, '${r}')`,()=>{let f=i===void 0?void 0:JSON.parse(i);return this.languageService.getCompletionEntryDetails(e,t,r,f,o,s,l)})}getFormattingEditsForRange(e,t,r,i){return this.forwardJSONCall(`getFormattingEditsForRange('${e}', ${t}, ${r})`,()=>{let o=JSON.parse(i);return this.languageService.getFormattingEditsForRange(e,t,r,o)})}getFormattingEditsForDocument(e,t){return this.forwardJSONCall(`getFormattingEditsForDocument('${e}')`,()=>{let r=JSON.parse(t);return this.languageService.getFormattingEditsForDocument(e,r)})}getFormattingEditsAfterKeystroke(e,t,r,i){return this.forwardJSONCall(`getFormattingEditsAfterKeystroke('${e}', ${t}, '${r}')`,()=>{let o=JSON.parse(i);return this.languageService.getFormattingEditsAfterKeystroke(e,t,r,o)})}getDocCommentTemplateAtPosition(e,t,r,i){return this.forwardJSONCall(`getDocCommentTemplateAtPosition('${e}', ${t})`,()=>this.languageService.getDocCommentTemplateAtPosition(e,t,r,i))}getNavigateToItems(e,t,r){return this.forwardJSONCall(`getNavigateToItems('${e}', ${t}, ${r})`,()=>this.languageService.getNavigateToItems(e,t,r))}getNavigationBarItems(e){return this.forwardJSONCall(`getNavigationBarItems('${e}')`,()=>this.languageService.getNavigationBarItems(e))}getNavigationTree(e){return this.forwardJSONCall(`getNavigationTree('${e}')`,()=>this.languageService.getNavigationTree(e))}getOutliningSpans(e){return this.forwardJSONCall(`getOutliningSpans('${e}')`,()=>this.languageService.getOutliningSpans(e))}getTodoComments(e,t){return this.forwardJSONCall(`getTodoComments('${e}')`,()=>this.languageService.getTodoComments(e,JSON.parse(t)))}prepareCallHierarchy(e,t){return this.forwardJSONCall(`prepareCallHierarchy('${e}', ${t})`,()=>this.languageService.prepareCallHierarchy(e,t))}provideCallHierarchyIncomingCalls(e,t){return this.forwardJSONCall(`provideCallHierarchyIncomingCalls('${e}', ${t})`,()=>this.languageService.provideCallHierarchyIncomingCalls(e,t))}provideCallHierarchyOutgoingCalls(e,t){return this.forwardJSONCall(`provideCallHierarchyOutgoingCalls('${e}', ${t})`,()=>this.languageService.provideCallHierarchyOutgoingCalls(e,t))}provideInlayHints(e,t,r){return this.forwardJSONCall(`provideInlayHints('${e}', '${JSON.stringify(t)}', ${JSON.stringify(r)})`,()=>this.languageService.provideInlayHints(e,t,r))}getEmitOutput(e){return this.forwardJSONCall(`getEmitOutput('${e}')`,()=>{let{diagnostics:t,...r}=this.languageService.getEmitOutput(e);return{...r,diagnostics:this.realizeDiagnostics(t)}})}getEmitOutputObject(e){return Xye(this.logger,`getEmitOutput('${e}')`,!1,()=>this.languageService.getEmitOutput(e),this.logPerformance)}toggleLineComment(e,t){return this.forwardJSONCall(`toggleLineComment('${e}', '${JSON.stringify(t)}')`,()=>this.languageService.toggleLineComment(e,t))}toggleMultilineComment(e,t){return this.forwardJSONCall(`toggleMultilineComment('${e}', '${JSON.stringify(t)}')`,()=>this.languageService.toggleMultilineComment(e,t))}commentSelection(e,t){return this.forwardJSONCall(`commentSelection('${e}', '${JSON.stringify(t)}')`,()=>this.languageService.commentSelection(e,t))}uncommentSelection(e,t){return this.forwardJSONCall(`uncommentSelection('${e}', '${JSON.stringify(t)}')`,()=>this.languageService.uncommentSelection(e,t))}},Qye=class extends b5{constructor(e,t){super(e),this.logger=t,this.logPerformance=!1,this.classifier=Age()}getEncodedLexicalClassifications(e,t,r=!1){return v$(this.logger,\"getEncodedLexicalClassifications\",()=>E$(this.classifier.getEncodedLexicalClassifications(e,t,r)),this.logPerformance)}getClassificationsForLine(e,t,r=!1){let i=this.classifier.getClassificationsForLine(e,t,r),o=\"\";for(let s of i.entries)o+=s.length+`\n`,o+=s.classification+`\n`;return o+=i.finalLexState,o}},Zye=class extends b5{constructor(e,t,r){super(e),this.logger=t,this.host=r,this.logPerformance=!1}forwardJSONCall(e,t){return v$(this.logger,e,t,this.logPerformance)}resolveModuleName(e,t,r){return this.forwardJSONCall(`resolveModuleName('${e}')`,()=>{let i=JSON.parse(r),o=FL(t,Al(e),i,this.host),s=o.resolvedModule?o.resolvedModule.resolvedFileName:void 0;return o.resolvedModule&&o.resolvedModule.extension!==\".ts\"&&o.resolvedModule.extension!==\".tsx\"&&o.resolvedModule.extension!==\".d.ts\"&&(s=void 0),{resolvedFileName:s,failedLookupLocations:o.failedLookupLocations,affectingLocations:o.affectingLocations}})}resolveTypeReferenceDirective(e,t,r){return this.forwardJSONCall(`resolveTypeReferenceDirective(${e})`,()=>{let i=JSON.parse(r),o=HJ(t,Al(e),i,this.host);return{resolvedFileName:o.resolvedTypeReferenceDirective?o.resolvedTypeReferenceDirective.resolvedFileName:void 0,primary:o.resolvedTypeReferenceDirective?o.resolvedTypeReferenceDirective.primary:!0,failedLookupLocations:o.failedLookupLocations}})}getPreProcessedFileInfo(e,t){return this.forwardJSONCall(`getPreProcessedFileInfo('${e}')`,()=>{let r=qge(E7(t),!0,!0);return{referencedFiles:this.convertFileReferences(r.referencedFiles),importedFiles:this.convertFileReferences(r.importedFiles),ambientExternalModules:r.ambientExternalModules,isLibFile:r.isLibFile,typeReferenceDirectives:this.convertFileReferences(r.typeReferenceDirectives),libReferenceDirectives:this.convertFileReferences(r.libReferenceDirectives)}})}getAutomaticTypeDirectiveNames(e){return this.forwardJSONCall(`getAutomaticTypeDirectiveNames('${e}')`,()=>{let t=JSON.parse(e);return X3(t,this.host)})}convertFileReferences(e){if(!e)return;let t=[];for(let r of e)t.push({path:Al(r.fileName),position:r.pos,length:r.end-r.pos});return t}getTSConfigFileInfo(e,t){return this.forwardJSONCall(`getTSConfigFileInfo('${e}')`,()=>{let r=wO(e,E7(t)),i=Al(e),o=MO(r,this.host,ni(i),{},i);return{options:o.options,typeAcquisition:o.typeAcquisition,files:o.fileNames,raw:o.raw,errors:b$([...r.parseDiagnostics,...o.errors],`\\r\n`)}})}getDefaultCompilationSettings(){return this.forwardJSONCall(\"getDefaultCompilationSettings()\",()=>d5())}discoverTypings(e){let t=Dl(!1);return this.forwardJSONCall(\"discoverTypings()\",()=>{let r=JSON.parse(e);return this.safeList===void 0&&(this.safeList=QT.loadSafeList(this.host,Ts(r.safeListPath,r.safeListPath,t))),QT.discoverTypings(this.host,i=>this.logger.log(i),r.fileNames,Ts(r.projectRootPath,r.projectRootPath,t),this.safeList,r.packageNameToTypingLocation,r.typeAcquisition,r.unresolvedImports,r.typesRegistry,Cp)})}},eve=class{constructor(){this._shims=[]}getServicesVersion(){return m$}createLanguageServiceShim(e){try{this.documentRegistry===void 0&&(this.documentRegistry=VY(e.useCaseSensitiveFileNames&&e.useCaseSensitiveFileNames(),e.getCurrentDirectory()));let t=new T$(e),r=Bye(t,this.documentRegistry,!1);return new $ye(this,e,r)}catch(t){throw y5(e,t),t}}createClassifierShim(e){try{return new Qye(this,e)}catch(t){throw y5(e,t),t}}createCoreServicesShim(e){try{let t=new S$(e);return new Zye(this,e,t)}catch(t){throw y5(e,t),t}}close(){Om(this._shims),this.documentRegistry=void 0}registerShim(e){this._shims.push(e)}unregisterShim(e){for(let t=0;t<this._shims.length;t++)if(this._shims[t]===e){delete this._shims[t];return}throw new Error(\"Invalid operation\")}}}});function v3e(e,t){if(e.isDeclarationFile)return;let r=Vi(e,t),i=e.getLineAndCharacterOfPosition(t).line;if(e.getLineAndCharacterOfPosition(r.getStart(e)).line>i){let v=el(r.pos,e);if(!v||e.getLineAndCharacterOfPosition(v.getEnd()).line!==i)return;r=v}if(r.flags&16777216)return;return m(r);function o(v,S){let x=HS(v)?dA(v.modifiers,du):void 0,A=x?xo(e.text,x.end):v.getStart(e);return Wc(A,(S||v).getEnd())}function s(v,S){return o(v,t1(S,S.parent,e))}function l(v,S){return v&&i===e.getLineAndCharacterOfPosition(v.getStart(e)).line?m(v):m(S)}function f(v,S,x){if(v){let A=v.indexOf(S);if(A>=0){let w=A,C=A+1;for(;w>0&&x(v[w-1]);)w--;for(;C<v.length&&x(v[C]);)C++;return Wc(xo(e.text,v[w].pos),v[C-1].end)}}return o(S)}function d(v){return m(el(v.pos,e))}function g(v){return m(t1(v,v.parent,e))}function m(v){if(v){let{parent:X}=v;switch(v.kind){case 240:return x(v.declarationList.declarations[0]);case 257:case 169:case 168:return x(v);case 166:return w(v);case 259:case 171:case 170:case 174:case 175:case 173:case 215:case 216:return P(v);case 238:if(bT(v))return F(v);case 265:return B(v);case 295:return B(v.block);case 241:return o(v.expression);case 250:return o(v.getChildAt(0),v.expression);case 244:return s(v,v.expression);case 243:return m(v.statement);case 256:return o(v.getChildAt(0));case 242:return s(v,v.expression);case 253:return m(v.statement);case 249:case 248:return o(v.getChildAt(0),v.label);case 245:return W(v);case 246:return s(v,v.expression);case 247:return q(v);case 252:return s(v,v.expression);case 292:case 293:return m(v.statements[0]);case 255:return B(v.tryBlock);case 254:return o(v,v.expression);case 274:return o(v,v.expression);case 268:return o(v,v.moduleReference);case 269:return o(v,v.moduleSpecifier);case 275:return o(v,v.moduleSpecifier);case 264:if(Gh(v)!==1)return;case 260:case 263:case 302:case 205:return o(v);case 251:return m(v.statement);case 167:return f(X.modifiers,v,du);case 203:case 204:return Y(v);case 261:case 262:return;case 26:case 1:return l(el(v.pos,e));case 27:return d(v);case 18:return ie(v);case 19:return $(v);case 23:return fe(v);case 20:return Z(v);case 21:return U(v);case 58:return re(v);case 31:case 29:return le(v);case 115:return _e(v);case 91:case 83:case 96:return g(v);case 162:return ge(v);default:if(qg(v))return R(v);if((v.kind===79||v.kind===227||v.kind===299||v.kind===300)&&qg(X))return o(v);if(v.kind===223){let{left:Ve,operatorToken:we}=v;if(qg(Ve))return R(Ve);if(we.kind===63&&qg(v.parent))return o(v);if(we.kind===27)return m(Ve)}if(Dh(v))switch(X.kind){case 243:return d(v);case 167:return m(v.parent);case 245:case 247:return o(v);case 223:if(v.parent.operatorToken.kind===27)return o(v);break;case 216:if(v.parent.body===v)return o(v);break}switch(v.parent.kind){case 299:if(v.parent.name===v&&!qg(v.parent.parent))return m(v.parent.initializer);break;case 213:if(v.parent.type===v)return g(v.parent.type);break;case 257:case 166:{let{initializer:Ve,type:we}=v.parent;if(Ve===v||we===v||Mg(v.kind))return d(v);break}case 223:{let{left:Ve}=v.parent;if(qg(Ve)&&v!==Ve)return d(v);break}default:if(Ia(v.parent)&&v.parent.type===v)return d(v)}return m(v.parent)}}function S(X){return pu(X.parent)&&X.parent.declarations[0]===X?o(el(X.pos,e,X.parent),X):o(X)}function x(X){if(X.parent.parent.kind===246)return m(X.parent.parent);let Ve=X.parent;if(La(X.name))return Y(X.name);if(mT(X)&&X.initializer||Mr(X,1)||Ve.parent.kind===247)return S(X);if(pu(X.parent)&&X.parent.declarations[0]!==X)return m(el(X.pos,e,X.parent))}function A(X){return!!X.initializer||X.dotDotDotToken!==void 0||Mr(X,12)}function w(X){if(La(X.name))return Y(X.name);if(A(X))return o(X);{let Ve=X.parent,we=Ve.parameters.indexOf(X);return L.assert(we!==-1),we!==0?w(Ve.parameters[we-1]):m(Ve.body)}}function C(X){return Mr(X,1)||X.parent.kind===260&&X.kind!==173}function P(X){if(X.body)return C(X)?o(X):m(X.body)}function F(X){let Ve=X.statements.length?X.statements[0]:X.getLastToken();return C(X.parent)?l(X.parent,Ve):m(Ve)}function B(X){switch(X.parent.kind){case 264:if(Gh(X.parent)!==1)return;case 244:case 242:case 246:return l(X.parent,X.statements[0]);case 245:case 247:return l(el(X.pos,e,X.parent),X.statements[0])}return m(X.statements[0])}function q(X){if(X.initializer.kind===258){let Ve=X.initializer;if(Ve.declarations.length>0)return m(Ve.declarations[0])}else return m(X.initializer)}function W(X){if(X.initializer)return q(X);if(X.condition)return o(X.condition);if(X.incrementor)return o(X.incrementor)}function Y(X){let Ve=mn(X.elements,we=>we.kind!==229?we:void 0);return Ve?m(Ve):X.parent.kind===205?o(X.parent):S(X.parent)}function R(X){L.assert(X.kind!==204&&X.kind!==203);let Ve=X.kind===206?X.elements:X.properties,we=mn(Ve,ke=>ke.kind!==229?ke:void 0);return we?m(we):o(X.parent.kind===223?X.parent:X)}function ie(X){switch(X.parent.kind){case 263:let Ve=X.parent;return l(el(X.pos,e,X.parent),Ve.members.length?Ve.members[0]:Ve.getLastToken(e));case 260:let we=X.parent;return l(el(X.pos,e,X.parent),we.members.length?we.members[0]:we.getLastToken(e));case 266:return l(X.parent.parent,X.parent.clauses[0])}return m(X.parent)}function $(X){switch(X.parent.kind){case 265:if(Gh(X.parent.parent)!==1)return;case 263:case 260:return o(X);case 238:if(bT(X.parent))return o(X);case 295:return m(Os(X.parent.statements));case 266:let Ve=X.parent,we=Os(Ve.clauses);return we?m(Os(we.statements)):void 0;case 203:let ke=X.parent;return m(Os(ke.elements)||ke);default:if(qg(X.parent)){let Pe=X.parent;return o(Os(Pe.properties)||Pe)}return m(X.parent)}}function fe(X){switch(X.parent.kind){case 204:let Ve=X.parent;return o(Os(Ve.elements)||Ve);default:if(qg(X.parent)){let we=X.parent;return o(Os(we.elements)||we)}return m(X.parent)}}function Z(X){return X.parent.kind===243||X.parent.kind===210||X.parent.kind===211?d(X):X.parent.kind===214?g(X):m(X.parent)}function U(X){switch(X.parent.kind){case 215:case 259:case 216:case 171:case 170:case 174:case 175:case 173:case 244:case 243:case 245:case 247:case 210:case 211:case 214:return d(X);default:return m(X.parent)}}function re(X){return Ia(X.parent)||X.parent.kind===299||X.parent.kind===166?d(X):m(X.parent)}function le(X){return X.parent.kind===213?g(X):m(X.parent)}function _e(X){return X.parent.kind===243?s(X,X.parent.expression):m(X.parent)}function ge(X){return X.parent.kind===247?g(X):m(X.parent)}}}var b3e=gt({\"src/services/breakpoints.ts\"(){\"use strict\";Fr()}}),x$={};Mo(x$,{spanInSourceFileAtLocation:()=>v3e});var E3e=gt({\"src/services/_namespaces/ts.BreakpointResolver.ts\"(){\"use strict\";b3e()}});function T3e(e){return(ms(e)||_u(e))&&zl(e)}function pk(e){return(ms(e)||xs(e)||_u(e))&&wi(e.parent)&&e===e.parent.initializer&&Re(e.parent.name)&&!!(G_(e.parent)&2)}function tve(e){return Li(e)||Tc(e)||Jc(e)||ms(e)||sl(e)||_u(e)||oc(e)||Nc(e)||zm(e)||p_(e)||Sf(e)}function nx(e){return Li(e)||Tc(e)&&Re(e.name)||Jc(e)||sl(e)||oc(e)||Nc(e)||zm(e)||p_(e)||Sf(e)||T3e(e)||pk(e)}function nve(e){return Li(e)?e:zl(e)?e.name:pk(e)?e.parent.name:L.checkDefined(e.modifiers&&wr(e.modifiers,rve))}function rve(e){return e.kind===88}function ive(e,t){let r=nve(t);return r&&e.getSymbolAtLocation(r)}function S3e(e,t){if(Li(t))return{text:t.fileName,pos:0,end:0};if((Jc(t)||sl(t))&&!zl(t)){let o=t.modifiers&&wr(t.modifiers,rve);if(o)return{text:\"default\",pos:o.getStart(),end:o.getEnd()}}if(oc(t)){let o=t.getSourceFile(),s=xo(o.text,yp(t).pos),l=s+6,f=e.getTypeChecker(),d=f.getSymbolAtLocation(t.parent);return{text:`${d?`${f.symbolToString(d,t.parent)} `:\"\"}static {}`,pos:s,end:l}}let r=pk(t)?t.parent.name:L.checkDefined(sa(t),\"Expected call hierarchy item to have a name\"),i=Re(r)?vr(r):yf(r)?r.text:ts(r)&&yf(r.expression)?r.expression.text:void 0;if(i===void 0){let o=e.getTypeChecker(),s=o.getSymbolAtLocation(r);s&&(i=o.symbolToString(s,t))}if(i===void 0){let o=fN();i=SI(s=>o.writeNode(4,t,t.getSourceFile(),s))}return{text:i,pos:r.getStart(),end:r.getEnd()}}function x3e(e){var t,r;if(pk(e))return Tp(e.parent.parent.parent.parent)&&Re(e.parent.parent.parent.parent.parent.name)?e.parent.parent.parent.parent.parent.name.getText():void 0;switch(e.kind){case 174:case 175:case 171:return e.parent.kind===207?(t=xj(e.parent))==null?void 0:t.getText():(r=sa(e.parent))==null?void 0:r.getText();case 259:case 260:case 264:if(Tp(e.parent)&&Re(e.parent.parent.name))return e.parent.parent.name.getText()}}function ave(e,t){if(t.body)return t;if(Ec(t))return Vm(t.parent);if(Jc(t)||Nc(t)){let r=ive(e,t);return r&&r.valueDeclaration&&Ds(r.valueDeclaration)&&r.valueDeclaration.body?r.valueDeclaration:void 0}return t}function ove(e,t){let r=ive(e,t),i;if(r&&r.declarations){let o=jD(r.declarations),s=on(r.declarations,d=>({file:d.getSourceFile().fileName,pos:d.pos}));o.sort((d,g)=>su(s[d].file,s[g].file)||s[d].pos-s[g].pos);let l=on(o,d=>r.declarations[d]),f;for(let d of l)nx(d)&&((!f||f.parent!==d.parent||f.end!==d.pos)&&(i=Sn(i,d)),f=d)}return i}function E5(e,t){var r,i,o;return oc(t)?t:Ds(t)?(i=(r=ave(e,t))!=null?r:ove(e,t))!=null?i:t:(o=ove(e,t))!=null?o:t}function sve(e,t){let r=e.getTypeChecker(),i=!1;for(;;){if(nx(t))return E5(r,t);if(tve(t)){let o=jn(t,nx);return o&&E5(r,o)}if(Rh(t)){if(nx(t.parent))return E5(r,t.parent);if(tve(t.parent)){let o=jn(t.parent,nx);return o&&E5(r,o)}return wi(t.parent)&&t.parent.initializer&&pk(t.parent.initializer)?t.parent.initializer:void 0}if(Ec(t))return nx(t.parent)?t.parent:void 0;if(t.kind===124&&oc(t.parent)){t=t.parent;continue}if(wi(t)&&t.initializer&&pk(t.initializer))return t.initializer;if(!i){let o=r.getSymbolAtLocation(t);if(o&&(o.flags&2097152&&(o=r.getAliasedSymbol(o)),o.valueDeclaration)){i=!0,t=o.valueDeclaration;continue}}return}}function A$(e,t){let r=t.getSourceFile(),i=S3e(e,t),o=x3e(t),s=aE(t),l=rk(t),f=Wc(xo(r.text,t.getFullStart(),!1,!0),t.getEnd()),d=Wc(i.pos,i.end);return{file:r.fileName,kind:s,kindModifiers:l,name:i.text,containerName:o,span:f,selectionSpan:d}}function A3e(e){return e!==void 0}function C3e(e){if(e.kind===js.EntryKind.Node){let{node:t}=e;if(PX(t,!0,!0)||phe(t,!0,!0)||mhe(t,!0,!0)||hhe(t,!0,!0)||j2(t)||BX(t)){let r=t.getSourceFile();return{declaration:jn(t,nx)||r,range:nY(t,r)}}}}function cve(e){return zo(e.declaration)}function I3e(e,t){return{from:e,fromSpans:t}}function L3e(e,t){return I3e(A$(e,t[0].declaration),on(t,r=>lv(r.range)))}function k3e(e,t,r){if(Li(t)||Tc(t)||oc(t))return[];let i=nve(t),o=Pr(js.findReferenceOrRenameEntries(e,r,e.getSourceFiles(),i,0,{use:js.FindReferencesUse.References},C3e),A3e);return o?YC(o,cve,s=>L3e(e,s)):[]}function D3e(e,t){function r(o){let s=PT(o)?o.tag:Au(o)?o.tagName:Us(o)||oc(o)?o:o.expression,l=sve(e,s);if(l){let f=nY(s,o.getSourceFile());if(ba(l))for(let d of l)t.push({declaration:d,range:f});else t.push({declaration:l,range:f})}}function i(o){if(o&&!(o.flags&16777216)){if(nx(o)){if(Yr(o))for(let s of o.members)s.name&&ts(s.name)&&i(s.name.expression);return}switch(o.kind){case 79:case 268:case 269:case 275:case 261:case 262:return;case 172:r(o);return;case 213:case 231:i(o.expression);return;case 257:case 166:i(o.name),i(o.initializer);return;case 210:r(o),i(o.expression),mn(o.arguments,i);return;case 211:r(o),i(o.expression),mn(o.arguments,i);return;case 212:r(o),i(o.tag),i(o.template);return;case 283:case 282:r(o),i(o.tagName),i(o.attributes);return;case 167:r(o),i(o.expression);return;case 208:case 209:r(o),pa(o,i);break;case 235:i(o.expression);return}Gm(o)||pa(o,i)}}return i}function w3e(e,t){mn(e.statements,t)}function R3e(e,t){!Mr(e,2)&&e.body&&Tp(e.body)&&mn(e.body.statements,t)}function O3e(e,t,r){let i=ave(e,t);i&&(mn(i.parameters,r),r(i.body))}function N3e(e,t){t(e.body)}function P3e(e,t){mn(e.modifiers,t);let r=P0(e);r&&t(r.expression);for(let i of e.members)g_(i)&&mn(i.modifiers,t),Na(i)?t(i.initializer):Ec(i)&&i.body?(mn(i.parameters,t),t(i.body)):oc(i)&&t(i)}function M3e(e,t){let r=[],i=D3e(e,r);switch(t.kind){case 308:w3e(t,i);break;case 264:R3e(t,i);break;case 259:case 215:case 216:case 171:case 174:case 175:O3e(e.getTypeChecker(),t,i);break;case 260:case 228:P3e(t,i);break;case 172:N3e(t,i);break;default:L.assertNever(t)}return r}function F3e(e,t){return{to:e,fromSpans:t}}function G3e(e,t){return F3e(A$(e,t[0].declaration),on(t,r=>lv(r.range)))}function B3e(e,t){return t.flags&16777216||zm(t)?[]:YC(M3e(e,t),cve,r=>G3e(e,r))}var U3e=gt({\"src/services/callHierarchy.ts\"(){\"use strict\";Fr()}}),rx={};Mo(rx,{createCallHierarchyItem:()=>A$,getIncomingCalls:()=>k3e,getOutgoingCalls:()=>B3e,resolveCallHierarchyDeclaration:()=>sve});var V3e=gt({\"src/services/_namespaces/ts.CallHierarchy.ts\"(){\"use strict\";U3e()}});function j3e(e,t,r,i){let o=lve(e,t,r,i);L.assert(o.spans.length%3===0);let s=o.spans,l=[];for(let f=0;f<s.length;f+=3)l.push({textSpan:il(s[f],s[f+1]),classificationType:s[f+2]});return l}function lve(e,t,r,i){return{spans:H3e(e,r,i,t),endOfLineState:0}}function H3e(e,t,r,i){let o=[];return e&&t&&W3e(e,t,r,(l,f,d)=>{o.push(l.getStart(t),l.getWidth(t),(f+1<<8)+d)},i),o}function W3e(e,t,r,i,o){let s=e.getTypeChecker(),l=!1;function f(d){switch(d.kind){case 264:case 260:case 261:case 259:case 228:case 215:case 216:o.throwIfCancellationRequested()}if(!d||!$8(r,d.pos,d.getFullWidth())||d.getFullWidth()===0)return;let g=l;if((Hg(d)||FS(d))&&(l=!0),AL(d)&&(l=!1),Re(d)&&!l&&!q3e(d)&&!cL(d.escapedText)){let m=s.getSymbolAtLocation(d);if(m){m.flags&2097152&&(m=s.getAliasedSymbol(m));let v=z3e(m,ZT(d));if(v!==void 0){let S=0;d.parent&&(Wo(d.parent)||k$.get(d.parent.kind)===v)&&d.parent.name===d&&(S=1),v===6&&dve(d)&&(v=9),v=J3e(s,d,v);let x=m.valueDeclaration;if(x){let A=wg(x),w=G_(x);A&32&&(S|=2),A&512&&(S|=4),v!==0&&v!==2&&(A&64||w&2||m.getFlags()&8)&&(S|=8),(v===7||v===10)&&K3e(x,t)&&(S|=32),e.isSourceFileDefaultLibrary(x.getSourceFile())&&(S|=16)}else m.declarations&&m.declarations.some(A=>e.isSourceFileDefaultLibrary(A.getSourceFile()))&&(S|=16);i(d,v,S)}}}pa(d,f),l=g}f(t)}function z3e(e,t){let r=e.getFlags();if(r&32)return 0;if(r&384)return 1;if(r&524288)return 5;if(r&64){if(t&2)return 2}else if(r&262144)return 4;let i=e.valueDeclaration||e.declarations&&e.declarations[0];return i&&Wo(i)&&(i=uve(i)),i&&k$.get(i.kind)}function J3e(e,t,r){if(r===7||r===9||r===6){let i=e.getTypeAtLocation(t);if(i){let o=s=>s(i)||i.isUnion()&&i.types.some(s);if(r!==6&&o(s=>s.getConstructSignatures().length>0))return 0;if(o(s=>s.getCallSignatures().length>0)&&!o(s=>s.getProperties().length>0)||X3e(t))return r===9?11:10}}return r}function K3e(e,t){return Wo(e)&&(e=uve(e)),wi(e)?(!Li(e.parent.parent.parent)||E2(e.parent))&&e.getSourceFile()===t:Jc(e)?!Li(e.parent)&&e.getSourceFile()===t:!1}function uve(e){for(;;)if(Wo(e.parent.parent))e=e.parent.parent;else return e.parent.parent}function q3e(e){let t=e.parent;return t&&(lm(t)||$u(t)||nv(t))}function X3e(e){for(;dve(e);)e=e.parent;return Pa(e.parent)&&e.parent.expression===e}function dve(e){return Yu(e.parent)&&e.parent.right===e||br(e.parent)&&e.parent.name===e}var C$,I$,L$,k$,Y3e=gt({\"src/services/classifier2020.ts\"(){\"use strict\";Fr(),C$=(e=>(e[e.typeOffset=8]=\"typeOffset\",e[e.modifierMask=255]=\"modifierMask\",e))(C$||{}),I$=(e=>(e[e.class=0]=\"class\",e[e.enum=1]=\"enum\",e[e.interface=2]=\"interface\",e[e.namespace=3]=\"namespace\",e[e.typeParameter=4]=\"typeParameter\",e[e.type=5]=\"type\",e[e.parameter=6]=\"parameter\",e[e.variable=7]=\"variable\",e[e.enumMember=8]=\"enumMember\",e[e.property=9]=\"property\",e[e.function=10]=\"function\",e[e.member=11]=\"member\",e))(I$||{}),L$=(e=>(e[e.declaration=0]=\"declaration\",e[e.static=1]=\"static\",e[e.async=2]=\"async\",e[e.readonly=3]=\"readonly\",e[e.defaultLibrary=4]=\"defaultLibrary\",e[e.local=5]=\"local\",e))(L$||{}),k$=new Map([[257,7],[166,6],[169,9],[264,3],[263,1],[302,8],[260,0],[171,11],[259,10],[215,10],[170,11],[174,9],[175,9],[168,9],[261,2],[262,5],[165,4],[299,9],[300,9]])}}),fve={};Mo(fve,{TokenEncodingConsts:()=>C$,TokenModifier:()=>L$,TokenType:()=>I$,getEncodedSemanticClassifications:()=>lve,getSemanticClassifications:()=>j3e});var $3e=gt({\"src/services/_namespaces/ts.classifier.v2020.ts\"(){\"use strict\";Y3e()}}),T5={};Mo(T5,{v2020:()=>fve});var Q3e=gt({\"src/services/_namespaces/ts.classifier.ts\"(){\"use strict\";$3e()}});function K_(e,t,r){return w$(e,ZS(r),t,void 0,void 0)}function Ma(e,t,r,i,o,s){return w$(e,ZS(r),t,i,ZS(o),s)}function D$(e,t,r,i,o,s){return w$(e,ZS(r),t,i,o&&ZS(o),s)}function w$(e,t,r,i,o,s){return{fixName:e,description:t,changes:r,fixId:i,fixAllDescription:o,commands:s?[s]:void 0}}function za(e){for(let t of e.errorCodes)S5.add(String(t),e);if(e.fixIds)for(let t of e.fixIds)L.assert(!x5.has(t)),x5.set(t,e)}function Z3e(){return lo(S5.keys())}function eFe(e,t){let{errorCodes:r}=e,i=0;for(let s of t)if(ya(r,s.code)&&i++,i>1)break;let o=i<2;return({fixId:s,fixAllDescription:l,...f})=>o?f:{...f,fixId:s,fixAllDescription:l}}function tFe(e){let t=pve(e),r=S5.get(String(e.errorCode));return Uo(r,i=>on(i.getCodeActions(e),eFe(i,t)))}function nFe(e){return x5.get(Ga(e.fixId,Ta)).getAllCodeActions(e)}function ix(e,t){return{changes:e,commands:t}}function _ve(e,t){return{fileName:e,textChanges:t}}function ns(e,t,r){let i=[],o=nr.ChangeTracker.with(e,s=>ax(e,t,l=>r(s,l,i)));return ix(o,i.length===0?void 0:i)}function ax(e,t,r){for(let i of pve(e))ya(t,i.code)&&r(i)}function pve({program:e,sourceFile:t,cancellationToken:r}){return[...e.getSemanticDiagnostics(t,r),...e.getSyntacticDiagnostics(t,r),...$Y(t,e,r)]}var S5,x5,rFe=gt({\"src/services/codeFixProvider.ts\"(){\"use strict\";Fr(),S5=Nf(),x5=new Map}});function mve(e,t,r){let i=fO(r)?D.createAsExpression(r.expression,D.createKeywordTypeNode(157)):D.createTypeAssertion(D.createKeywordTypeNode(157),r.expression);e.replaceNode(t,r.expression,i)}function hve(e,t){if(!Yn(e))return jn(Vi(e,t),r=>fO(r)||Fue(r))}var A5,R$,iFe=gt({\"src/services/codefixes/addConvertToUnknownForNonOverlappingTypes.ts\"(){\"use strict\";Fr(),Qa(),A5=\"addConvertToUnknownForNonOverlappingTypes\",R$=[_.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first.code],za({errorCodes:R$,getCodeActions:function(t){let r=hve(t.sourceFile,t.span.start);if(r===void 0)return;let i=nr.ChangeTracker.with(t,o=>mve(o,t.sourceFile,r));return[Ma(A5,i,_.Add_unknown_conversion_for_non_overlapping_types,A5,_.Add_unknown_to_all_conversions_of_non_overlapping_types)]},fixIds:[A5],getAllCodeActions:e=>ns(e,R$,(t,r)=>{let i=hve(r.file,r.start);i&&mve(t,r.file,i)})})}}),aFe=gt({\"src/services/codefixes/addEmptyExportDeclaration.ts\"(){\"use strict\";Fr(),Qa(),za({errorCodes:[_.await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module.code,_.for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module.code],getCodeActions:function(t){let{sourceFile:r}=t,i=nr.ChangeTracker.with(t,o=>{let s=D.createExportDeclaration(void 0,!1,D.createNamedExports([]),void 0);o.insertNodeAtEndOfScope(r,r,s)});return[K_(\"addEmptyExportDeclaration\",i,_.Add_export_to_make_this_file_into_a_module)]}})}});function gve(e,t,r,i){let o=r(s=>oFe(s,e.sourceFile,t,i));return Ma(C5,o,_.Add_async_modifier_to_containing_function,C5,_.Add_all_missing_async_modifiers)}function oFe(e,t,r,i){if(i&&i.has(zo(r)))return;i?.add(zo(r));let o=D.updateModifiers(cc(r,!0),D.createNodeArray(D.createModifiersFromModifierFlags(Yy(r)|512)));e.replaceNode(t,r,o)}function yve(e,t){if(!t)return;let r=Vi(e,t.start);return jn(r,o=>o.getStart(e)<t.start||o.getEnd()>wl(t)?\"quit\":(xs(o)||Nc(o)||ms(o)||Jc(o))&&J2(t,Du(o,e)))}function sFe(e,t){return({start:r,length:i,relatedInformation:o,code:s})=>Cg(r)&&Cg(i)&&J2({start:r,length:i},e)&&s===t&&!!o&&vt(o,l=>l.code===_.Did_you_mean_to_mark_this_function_as_async.code)}var C5,O$,cFe=gt({\"src/services/codefixes/addMissingAsync.ts\"(){\"use strict\";Fr(),Qa(),C5=\"addMissingAsync\",O$=[_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,_.Type_0_is_not_assignable_to_type_1.code,_.Type_0_is_not_comparable_to_type_1.code],za({fixIds:[C5],errorCodes:O$,getCodeActions:function(t){let{sourceFile:r,errorCode:i,cancellationToken:o,program:s,span:l}=t,f=wr(s.getTypeChecker().getDiagnostics(r,o),sFe(l,i)),d=f&&f.relatedInformation&&wr(f.relatedInformation,v=>v.code===_.Did_you_mean_to_mark_this_function_as_async.code),g=yve(r,d);return g?[gve(t,g,v=>nr.ChangeTracker.with(t,v))]:void 0},getAllCodeActions:e=>{let{sourceFile:t}=e,r=new Set;return ns(e,O$,(i,o)=>{let s=o.relatedInformation&&wr(o.relatedInformation,d=>d.code===_.Did_you_mean_to_mark_this_function_as_async.code),l=yve(t,s);return l?gve(e,l,d=>(d(i),[]),r):void 0})}})}});function vve(e,t,r,i,o){let s=IY(e,r);return s&&lFe(e,t,r,i,o)&&Tve(s)?s:void 0}function bve(e,t,r,i,o,s){let{sourceFile:l,program:f,cancellationToken:d}=e,g=uFe(t,l,d,f,i);if(g){let m=o(v=>{mn(g.initializers,({expression:S})=>N$(v,r,l,i,S,s)),s&&g.needsSecondPassForFixAll&&N$(v,r,l,i,t,s)});return K_(\"addMissingAwaitToInitializer\",m,g.initializers.length===1?[_.Add_await_to_initializer_for_0,g.initializers[0].declarationSymbol.name]:_.Add_await_to_initializers)}}function Eve(e,t,r,i,o,s){let l=o(f=>N$(f,r,e.sourceFile,i,t,s));return Ma(I5,l,_.Add_await,I5,_.Fix_all_expressions_possibly_missing_await)}function lFe(e,t,r,i,o){let l=o.getTypeChecker().getDiagnostics(e,i);return vt(l,({start:f,length:d,relatedInformation:g,code:m})=>Cg(f)&&Cg(d)&&J2({start:f,length:d},r)&&m===t&&!!g&&vt(g,v=>v.code===_.Did_you_forget_to_use_await.code))}function uFe(e,t,r,i,o){let s=dFe(e,o);if(!s)return;let l=s.isCompleteFix,f;for(let d of s.identifiers){let g=o.getSymbolAtLocation(d);if(!g)continue;let m=zr(g.valueDeclaration,wi),v=m&&zr(m.name,Re),S=cb(m,240);if(!m||!S||m.type||!m.initializer||S.getSourceFile()!==t||Mr(S,1)||!v||!Tve(m.initializer)){l=!1;continue}let x=i.getSemanticDiagnostics(t,r);if(js.Core.eachSymbolReferenceInFile(v,o,t,w=>d!==w&&!fFe(w,x,t,o))){l=!1;continue}(f||(f=[])).push({expression:m.initializer,declarationSymbol:g})}return f&&{initializers:f,needsSecondPassForFixAll:!l}}function dFe(e,t){if(br(e.parent)&&Re(e.parent.expression))return{identifiers:[e.parent.expression],isCompleteFix:!0};if(Re(e))return{identifiers:[e],isCompleteFix:!0};if(ar(e)){let r,i=!0;for(let o of[e.left,e.right]){let s=t.getTypeAtLocation(o);if(t.getPromisedTypeOfPromise(s)){if(!Re(o)){i=!1;continue}(r||(r=[])).push(o)}}return r&&{identifiers:r,isCompleteFix:i}}}function fFe(e,t,r,i){let o=br(e.parent)?e.parent.name:ar(e.parent)?e.parent:e,s=wr(t,l=>l.start===o.getStart(r)&&l.start+l.length===o.getEnd());return s&&ya(L5,s.code)||i.getTypeAtLocation(o).flags&1}function Tve(e){return e.kind&32768||!!jn(e,t=>t.parent&&xs(t.parent)&&t.parent.body===t||Va(t)&&(t.parent.kind===259||t.parent.kind===215||t.parent.kind===216||t.parent.kind===171))}function N$(e,t,r,i,o,s){if(_O(o.parent)&&!o.parent.awaitModifier){let l=i.getTypeAtLocation(o),f=i.getAsyncIterableType();if(f&&i.isTypeAssignableTo(l,f)){let d=o.parent;e.replaceNode(r,d,D.updateForOfStatement(d,D.createToken(133),d.initializer,d.expression,d.statement));return}}if(ar(o))for(let l of[o.left,o.right]){if(s&&Re(l)){let g=i.getSymbolAtLocation(l);if(g&&s.has($a(g)))continue}let f=i.getTypeAtLocation(l),d=i.getPromisedTypeOfPromise(f)?D.createAwaitExpression(l):l;e.replaceNode(r,l,d)}else if(t===P$&&br(o.parent)){if(s&&Re(o.parent.expression)){let l=i.getSymbolAtLocation(o.parent.expression);if(l&&s.has($a(l)))return}e.replaceNode(r,o.parent.expression,D.createParenthesizedExpression(D.createAwaitExpression(o.parent.expression))),Sve(e,o.parent.expression,r)}else if(ya(M$,t)&&Ih(o.parent)){if(s&&Re(o)){let l=i.getSymbolAtLocation(o);if(l&&s.has($a(l)))return}e.replaceNode(r,o,D.createParenthesizedExpression(D.createAwaitExpression(o))),Sve(e,o,r)}else{if(s&&wi(o.parent)&&Re(o.parent.name)){let l=i.getSymbolAtLocation(o.parent.name);if(l&&!_0(s,$a(l)))return}e.replaceNode(r,o,D.createAwaitExpression(o))}}function Sve(e,t,r){let i=el(t.pos,r);i&&N7(i.end,i.parent,r)&&e.insertText(r,t.getStart(r),\";\")}var I5,P$,M$,L5,_Fe=gt({\"src/services/codefixes/addMissingAwait.ts\"(){\"use strict\";Fr(),Qa(),I5=\"addMissingAwait\",P$=_.Property_0_does_not_exist_on_type_1.code,M$=[_.This_expression_is_not_callable.code,_.This_expression_is_not_constructable.code],L5=[_.An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type.code,_.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type.code,_.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type.code,_.Operator_0_cannot_be_applied_to_type_1.code,_.Operator_0_cannot_be_applied_to_types_1_and_2.code,_.This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap.code,_.This_condition_will_always_return_true_since_this_0_is_always_defined.code,_.Type_0_is_not_an_array_type.code,_.Type_0_is_not_an_array_type_or_a_string_type.code,_.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher.code,_.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator.code,_.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator.code,_.Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator.code,_.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator.code,_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,P$,...M$],za({fixIds:[I5],errorCodes:L5,getCodeActions:function(t){let{sourceFile:r,errorCode:i,span:o,cancellationToken:s,program:l}=t,f=vve(r,i,o,s,l);if(!f)return;let d=t.program.getTypeChecker(),g=m=>nr.ChangeTracker.with(t,m);return WD([bve(t,f,i,d,g),Eve(t,f,i,d,g)])},getAllCodeActions:e=>{let{sourceFile:t,program:r,cancellationToken:i}=e,o=e.program.getTypeChecker(),s=new Set;return ns(e,L5,(l,f)=>{let d=vve(t,f.code,f,i,r);if(!d)return;let g=m=>(m(l),[]);return bve(e,d,f.code,o,g,s)||Eve(e,d,f.code,o,g,s)})}})}});function xve(e,t,r,i,o){let s=Vi(t,r),l=jn(s,g=>CA(g.parent)?g.parent.initializer===g:pFe(g)?!1:\"quit\");if(l)return k5(e,l,t,o);let f=s.parent;if(ar(f)&&f.operatorToken.kind===63&&Ol(f.parent))return k5(e,s,t,o);if(fu(f)){let g=i.getTypeChecker();return Ji(f.elements,m=>mFe(m,g))?k5(e,f,t,o):void 0}let d=jn(s,g=>Ol(g.parent)?!0:hFe(g)?!1:\"quit\");if(d){let g=i.getTypeChecker();return Ave(d,g)?k5(e,d,t,o):void 0}}function k5(e,t,r,i){(!i||_0(i,t))&&e.insertModifierBefore(r,85,t)}function pFe(e){switch(e.kind){case 79:case 206:case 207:case 299:case 300:return!0;default:return!1}}function mFe(e,t){let r=Re(e)?e:Iu(e,!0)&&Re(e.left)?e.left:void 0;return!!r&&!t.getSymbolAtLocation(r)}function hFe(e){switch(e.kind){case 79:case 223:case 27:return!0;default:return!1}}function Ave(e,t){return ar(e)?e.operatorToken.kind===27?Ji([e.left,e.right],r=>Ave(r,t)):e.operatorToken.kind===63&&Re(e.left)&&!t.getSymbolAtLocation(e.left):!1}var D5,F$,gFe=gt({\"src/services/codefixes/addMissingConst.ts\"(){\"use strict\";Fr(),Qa(),D5=\"addMissingConst\",F$=[_.Cannot_find_name_0.code,_.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code],za({errorCodes:F$,getCodeActions:function(t){let r=nr.ChangeTracker.with(t,i=>xve(i,t.sourceFile,t.span.start,t.program));if(r.length>0)return[Ma(D5,r,_.Add_const_to_unresolved_variable,D5,_.Add_const_to_all_unresolved_variables)]},fixIds:[D5],getAllCodeActions:e=>{let t=new Set;return ns(e,F$,(r,i)=>xve(r,i.file,i.start,e.program,t))}})}});function Cve(e,t,r,i){let o=Vi(t,r);if(!Re(o))return;let s=o.parent;s.kind===169&&(!i||_0(i,s))&&e.insertModifierBefore(t,136,s)}var w5,G$,yFe=gt({\"src/services/codefixes/addMissingDeclareProperty.ts\"(){\"use strict\";Fr(),Qa(),w5=\"addMissingDeclareProperty\",G$=[_.Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration.code],za({errorCodes:G$,getCodeActions:function(t){let r=nr.ChangeTracker.with(t,i=>Cve(i,t.sourceFile,t.span.start));if(r.length>0)return[Ma(w5,r,_.Prefix_with_declare,w5,_.Prefix_all_incorrect_property_declarations_with_declare)]},fixIds:[w5],getAllCodeActions:e=>{let t=new Set;return ns(e,G$,(r,i)=>Cve(r,i.file,i.start,t))}})}});function Ive(e,t,r){let i=Vi(t,r),o=jn(i,du);L.assert(!!o,\"Expected position to be owned by a decorator.\");let s=D.createCallExpression(o.expression,void 0,void 0);e.replaceNode(t,o.expression,s)}var R5,B$,vFe=gt({\"src/services/codefixes/addMissingInvocationForDecorator.ts\"(){\"use strict\";Fr(),Qa(),R5=\"addMissingInvocationForDecorator\",B$=[_._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0.code],za({errorCodes:B$,getCodeActions:function(t){let r=nr.ChangeTracker.with(t,i=>Ive(i,t.sourceFile,t.span.start));return[Ma(R5,r,_.Call_decorator_expression,R5,_.Add_to_all_uncalled_decorators)]},fixIds:[R5],getAllCodeActions:e=>ns(e,B$,(t,r)=>Ive(t,r.file,r.start))})}});function Lve(e,t,r){let i=Vi(t,r),o=i.parent;if(!ha(o))return L.fail(\"Tried to add a parameter name to a non-parameter: \"+L.formatSyntaxKind(i.kind));let s=o.parent.parameters.indexOf(o);L.assert(!o.type,\"Tried to add a parameter name to a parameter that already had one.\"),L.assert(s>-1,\"Parameter not found in parent parameter list.\");let l=D.createTypeReferenceNode(o.name,void 0),f=D.createParameterDeclaration(o.modifiers,o.dotDotDotToken,\"arg\"+s,o.questionToken,o.dotDotDotToken?D.createArrayTypeNode(l):l,o.initializer);e.replaceNode(t,o,f)}var O5,U$,bFe=gt({\"src/services/codefixes/addNameToNamelessParameter.ts\"(){\"use strict\";Fr(),Qa(),O5=\"addNameToNamelessParameter\",U$=[_.Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1.code],za({errorCodes:U$,getCodeActions:function(t){let r=nr.ChangeTracker.with(t,i=>Lve(i,t.sourceFile,t.span.start));return[Ma(O5,r,_.Add_parameter_name,O5,_.Add_names_to_all_parameters_without_names)]},fixIds:[O5],getAllCodeActions:e=>ns(e,U$,(t,r)=>Lve(t,r.file,r.start))})}});function EFe(e,t,r){var i,o;let s=kve(IY(e,t),r);if(!s)return Je;let{source:l,target:f}=s,d=TFe(l,f,r)?r.getTypeAtLocation(f.expression):r.getTypeAtLocation(f);return(o=(i=d.symbol)==null?void 0:i.declarations)!=null&&o.some(g=>Gn(g).fileName.match(/\\.d\\.ts$/))?Je:r.getExactOptionalProperties(d)}function TFe(e,t,r){return br(t)&&!!r.getExactOptionalProperties(r.getTypeAtLocation(t.expression)).length&&r.getTypeAtLocation(e)===r.getUndefinedType()}function kve(e,t){var r;if(e){if(ar(e.parent)&&e.parent.operatorToken.kind===63)return{source:e.parent.right,target:e.parent.left};if(wi(e.parent)&&e.parent.initializer)return{source:e.parent.initializer,target:e.parent.name};if(Pa(e.parent)){let i=t.getSymbolAtLocation(e.parent.expression);if(!i?.valueDeclaration||!nS(i.valueDeclaration.kind)||!ot(e))return;let o=e.parent.arguments.indexOf(e);if(o===-1)return;let s=i.valueDeclaration.parameters[o].name;if(Re(s))return{source:e,target:s}}else if(yl(e.parent)&&Re(e.parent.name)||xf(e.parent)){let i=kve(e.parent.parent,t);if(!i)return;let o=t.getPropertyOfType(t.getTypeAtLocation(i.target),e.parent.name.text),s=(r=o?.declarations)==null?void 0:r[0];return s?{source:yl(e.parent)?e.parent.initializer:e.parent.name,target:s}:void 0}}else return}function SFe(e,t){for(let r of t){let i=r.valueDeclaration;if(i&&($d(i)||Na(i))&&i.type){let o=D.createUnionTypeNode([...i.type.kind===189?i.type.types:[i.type],D.createTypeReferenceNode(\"undefined\")]);e.replaceNode(i.getSourceFile(),i.type,o)}}}var V$,Dve,xFe=gt({\"src/services/codefixes/addOptionalPropertyUndefined.ts\"(){\"use strict\";Fr(),Qa(),V$=\"addOptionalPropertyUndefined\",Dve=[_.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target.code,_.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code,_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code],za({errorCodes:Dve,getCodeActions(e){let t=e.program.getTypeChecker(),r=EFe(e.sourceFile,e.span,t);if(!r.length)return;let i=nr.ChangeTracker.with(e,o=>SFe(o,r));return[K_(V$,i,_.Add_undefined_to_optional_property_type)]},fixIds:[V$]})}});function wve(e,t){let r=Vi(e,t);return zr(ha(r.parent)?r.parent.parent:r.parent,Rve)}function Rve(e){return AFe(e)&&Ove(e)}function Ove(e){return Ds(e)?e.parameters.some(Ove)||!e.type&&!!Aw(e):!e.type&&!!Vy(e)}function Nve(e,t,r){if(Ds(r)&&(Aw(r)||r.parameters.some(i=>!!Vy(i)))){if(!r.typeParameters){let o=t4(r);o.length&&e.insertTypeParameters(t,r,o)}let i=xs(r)&&!Yo(r,20,t);i&&e.insertNodeBefore(t,Vo(r.parameters),D.createToken(20));for(let o of r.parameters)if(!o.type){let s=Vy(o);s&&e.tryInsertTypeAnnotation(t,o,$e(s,Sb,bi))}if(i&&e.insertNodeAfter(t,To(r.parameters),D.createToken(21)),!r.type){let o=Aw(r);o&&e.tryInsertTypeAnnotation(t,r,$e(o,Sb,bi))}}else{let i=L.checkDefined(Vy(r),\"A JSDocType for this declaration should exist\");L.assert(!r.type,\"The JSDocType decl should have a type\"),e.tryInsertTypeAnnotation(t,r,$e(i,Sb,bi))}}function AFe(e){return Ds(e)||e.kind===257||e.kind===168||e.kind===169}function Sb(e){switch(e.kind){case 315:case 316:return D.createTypeReferenceNode(\"any\",Je);case 319:return IFe(e);case 318:return Sb(e.type);case 317:return LFe(e);case 321:return kFe(e);case 320:return DFe(e);case 180:return RFe(e);case 325:return CFe(e);default:let t=xn(e,Sb,Bh);return Jn(t,1),t}}function CFe(e){let t=D.createTypeLiteralNode(on(e.jsDocPropertyTags,r=>D.createPropertySignature(void 0,Re(r.name)?r.name:r.name.right,zR(r)?D.createToken(57):void 0,r.typeExpression&&$e(r.typeExpression.type,Sb,bi)||D.createKeywordTypeNode(131))));return Jn(t,1),t}function IFe(e){return D.createUnionTypeNode([$e(e.type,Sb,bi),D.createTypeReferenceNode(\"undefined\",Je)])}function LFe(e){return D.createUnionTypeNode([$e(e.type,Sb,bi),D.createTypeReferenceNode(\"null\",Je)])}function kFe(e){return D.createArrayTypeNode($e(e.type,Sb,bi))}function DFe(e){var t;return D.createFunctionTypeNode(Je,e.parameters.map(wFe),(t=e.type)!=null?t:D.createKeywordTypeNode(131))}function wFe(e){let t=e.parent.parameters.indexOf(e),r=e.type.kind===321&&t===e.parent.parameters.length-1,i=e.name||(r?\"rest\":\"arg\"+t),o=r?D.createToken(25):e.dotDotDotToken;return D.createParameterDeclaration(e.modifiers,o,i,e.questionToken,$e(e.type,Sb,bi),e.initializer)}function RFe(e){let t=e.typeName,r=e.typeArguments;if(Re(e.typeName)){if(U6(e))return OFe(e);let i=e.typeName.text;switch(e.typeName.text){case\"String\":case\"Boolean\":case\"Object\":case\"Number\":i=i.toLowerCase();break;case\"array\":case\"date\":case\"promise\":i=i[0].toUpperCase()+i.slice(1);break}t=D.createIdentifier(i),(i===\"Array\"||i===\"Promise\")&&!e.typeArguments?r=D.createNodeArray([D.createTypeReferenceNode(\"any\",Je)]):r=On(e.typeArguments,Sb,bi)}return D.createTypeReferenceNode(t,r)}function OFe(e){let t=D.createParameterDeclaration(void 0,void 0,e.typeArguments[0].kind===148?\"n\":\"s\",void 0,D.createTypeReferenceNode(e.typeArguments[0].kind===148?\"number\":\"string\",[]),void 0),r=D.createTypeLiteralNode([D.createIndexSignature(void 0,[t],e.typeArguments[1])]);return Jn(r,1),r}var N5,j$,NFe=gt({\"src/services/codefixes/annotateWithTypeFromJSDoc.ts\"(){\"use strict\";Fr(),Qa(),N5=\"annotateWithTypeFromJSDoc\",j$=[_.JSDoc_types_may_be_moved_to_TypeScript_types.code],za({errorCodes:j$,getCodeActions(e){let t=wve(e.sourceFile,e.span.start);if(!t)return;let r=nr.ChangeTracker.with(e,i=>Nve(i,e.sourceFile,t));return[Ma(N5,r,_.Annotate_with_type_from_JSDoc,N5,_.Annotate_everything_with_types_from_JSDoc)]},fixIds:[N5],getAllCodeActions:e=>ns(e,j$,(t,r)=>{let i=wve(r.file,r.start);i&&Nve(t,r.file,i)})})}});function Pve(e,t,r,i,o,s){let l=i.getSymbolAtLocation(Vi(t,r));if(!l||!l.valueDeclaration||!(l.flags&19))return;let f=l.valueDeclaration;if(Jc(f)||ms(f))e.replaceNode(t,f,m(f));else if(wi(f)){let v=g(f);if(!v)return;let S=f.parent.parent;pu(f.parent)&&f.parent.declarations.length>1?(e.delete(t,f),e.insertNodeAfter(t,S,v)):e.replaceNode(t,S,v)}function d(v){let S=[];return v.exports&&v.exports.forEach(w=>{if(w.name===\"prototype\"&&w.declarations){let C=w.declarations[0];if(w.declarations.length===1&&br(C)&&ar(C.parent)&&C.parent.operatorToken.kind===63&&rs(C.parent.right)){let P=C.parent.right;A(P.symbol,void 0,S)}}else A(w,[D.createToken(124)],S)}),v.members&&v.members.forEach((w,C)=>{var P,F,B,q;if(C===\"constructor\"&&w.valueDeclaration){let W=(q=(B=(F=(P=v.exports)==null?void 0:P.get(\"prototype\"))==null?void 0:F.declarations)==null?void 0:B[0])==null?void 0:q.parent;W&&ar(W)&&rs(W.right)&&vt(W.right.properties,M5)||e.delete(t,w.valueDeclaration.parent);return}A(w,void 0,S)}),S;function x(w,C){return Us(w)?br(w)&&M5(w)?!0:Ia(C):Ji(w.properties,P=>!!(Nc(P)||t6(P)||yl(P)&&ms(P.initializer)&&P.name||M5(P)))}function A(w,C,P){if(!(w.flags&8192)&&!(w.flags&4096))return;let F=w.valueDeclaration,B=F.parent,q=B.right;if(!x(F,q)||vt(P,$=>{let fe=sa($);return!!(fe&&Re(fe)&&vr(fe)===fc(w))}))return;let W=B.parent&&B.parent.kind===241?B.parent:B;if(e.delete(t,W),!q){P.push(D.createPropertyDeclaration(C,w.name,void 0,void 0,void 0));return}if(Us(F)&&(ms(q)||xs(q))){let $=J_(t,o),fe=PFe(F,s,$);fe&&Y(P,q,fe);return}else if(rs(q)){mn(q.properties,$=>{(Nc($)||t6($))&&P.push($),yl($)&&ms($.initializer)&&Y(P,$.initializer,$.name),M5($)});return}else{if(Cu(t)||!br(F))return;let $=D.createPropertyDeclaration(C,F.name,void 0,void 0,q);q2(B.parent,$,t),P.push($);return}function Y($,fe,Z){return ms(fe)?R($,fe,Z):ie($,fe,Z)}function R($,fe,Z){let U=Qi(C,P5(fe,132)),re=D.createMethodDeclaration(U,void 0,Z,void 0,void 0,fe.parameters,void 0,fe.body);q2(B,re,t),$.push(re)}function ie($,fe,Z){let U=fe.body,re;U.kind===238?re=U:re=D.createBlock([D.createReturnStatement(U)]);let le=Qi(C,P5(fe,132)),_e=D.createMethodDeclaration(le,void 0,Z,void 0,void 0,fe.parameters,void 0,re);q2(B,_e,t),$.push(_e)}}}function g(v){let S=v.initializer;if(!S||!ms(S)||!Re(v.name))return;let x=d(v.symbol);S.body&&x.unshift(D.createConstructorDeclaration(void 0,S.parameters,S.body));let A=P5(v.parent.parent,93);return D.createClassDeclaration(A,v.name,void 0,void 0,x)}function m(v){let S=d(l);v.body&&S.unshift(D.createConstructorDeclaration(void 0,v.parameters,v.body));let x=P5(v,93);return D.createClassDeclaration(x,v.name,void 0,void 0,S)}}function P5(e,t){return g_(e)?Pr(e.modifiers,r=>r.kind===t):void 0}function M5(e){return e.name?!!(Re(e.name)&&e.name.text===\"constructor\"):!1}function PFe(e,t,r){if(br(e))return e.name;let i=e.argumentExpression;if(Vf(i))return i;if(es(i))return i_(i.text,Do(t))?D.createIdentifier(i.text):IS(i)?D.createStringLiteral(i.text,r===0):i}var F5,H$,MFe=gt({\"src/services/codefixes/convertFunctionToEs6Class.ts\"(){\"use strict\";Fr(),Qa(),F5=\"convertFunctionToEs6Class\",H$=[_.This_constructor_function_may_be_converted_to_a_class_declaration.code],za({errorCodes:H$,getCodeActions(e){let t=nr.ChangeTracker.with(e,r=>Pve(r,e.sourceFile,e.span.start,e.program.getTypeChecker(),e.preferences,e.program.getCompilerOptions()));return[Ma(F5,t,_.Convert_function_to_an_ES2015_class,F5,_.Convert_all_constructor_functions_to_classes)]},fixIds:[F5],getAllCodeActions:e=>ns(e,H$,(t,r)=>Pve(t,r.file,r.start,e.program.getTypeChecker(),e.preferences,e.program.getCompilerOptions()))})}});function Mve(e,t,r,i){let o=Vi(t,r),s;if(Re(o)&&wi(o.parent)&&o.parent.initializer&&Ds(o.parent.initializer)?s=o.parent.initializer:s=zr(Xd(Vi(t,r)),e$),!s)return;let l=new Map,f=Yn(s),d=GFe(s,i),g=BFe(s,i,l);if(!QY(g,i))return;let m=g.body&&Va(g.body)?FFe(g.body,i):Je,v={checker:i,synthNamesMap:l,setOfExpressionsToReturn:d,isInJSFile:f};if(!m.length)return;let S=xo(t.text,yp(s).pos);e.insertModifierAt(t,S,132,{suffix:\" \"});for(let x of m)if(pa(x,function A(w){if(Pa(w)){let C=ox(w,w,v,!1);if(o1())return!0;e.replaceNodeWithNodes(t,x,C)}else if(!Ia(w)&&(pa(w,A),o1()))return!0}),o1())return}function FFe(e,t){let r=[];return vT(e,i=>{r5(i,t)&&r.push(i)}),r}function GFe(e,t){if(!e.body)return new Set;let r=new Set;return pa(e.body,function i(o){mk(o,t,\"then\")?(r.add(zo(o)),mn(o.arguments,i)):mk(o,t,\"catch\")||mk(o,t,\"finally\")?(r.add(zo(o)),pa(o,i)):Gve(o,t)?r.add(zo(o)):pa(o,i)}),r}function mk(e,t,r){if(!Pa(e))return!1;let o=kN(e,r)&&t.getTypeAtLocation(e);return!!(o&&t.getPromisedTypeOfPromise(o))}function Fve(e,t){return(Ur(e)&4)!==0&&e.target===t}function G5(e,t,r){if(e.expression.name.escapedText===\"finally\")return;let i=r.getTypeAtLocation(e.expression.expression);if(Fve(i,r.getPromiseType())||Fve(i,r.getPromiseLikeType()))if(e.expression.name.escapedText===\"then\"){if(t===Ig(e.arguments,0))return Ig(e.typeArguments,0);if(t===Ig(e.arguments,1))return Ig(e.typeArguments,1)}else return Ig(e.typeArguments,0)}function Gve(e,t){return ot(e)?!!t.getPromisedTypeOfPromise(t.getTypeAtLocation(e)):!1}function BFe(e,t,r){let i=new Map,o=Nf();return pa(e,function s(l){if(!Re(l)){pa(l,s);return}let f=t.getSymbolAtLocation(l);if(f){let d=t.getTypeAtLocation(l),g=Wve(d,t),m=$a(f).toString();if(g&&!ha(l.parent)&&!Ds(l.parent)&&!r.has(m)){let v=Sl(g.parameters),S=v?.valueDeclaration&&ha(v.valueDeclaration)&&zr(v.valueDeclaration.name,Re)||D.createUniqueName(\"result\",16),x=Bve(S,o);r.set(m,x),o.add(S.text,f)}else if(l.parent&&(ha(l.parent)||wi(l.parent)||Wo(l.parent))){let v=l.text,S=o.get(v);if(S&&S.some(x=>x!==f)){let x=Bve(l,o);i.set(m,x.identifier),r.set(m,x),o.add(v,f)}else{let x=cc(l);r.set(m,$2(x)),o.add(v,f)}}}}),JN(e,!0,s=>{if(Wo(s)&&Re(s.name)&&cm(s.parent)){let l=t.getSymbolAtLocation(s.name),f=l&&i.get(String($a(l)));if(f&&f.text!==(s.name||s.propertyName).getText())return D.createBindingElement(s.dotDotDotToken,s.propertyName||s.name,f,s.initializer)}else if(Re(s)){let l=t.getSymbolAtLocation(s),f=l&&i.get(String($a(l)));if(f)return D.createIdentifier(f.text)}})}function Bve(e,t){let r=(t.get(e.text)||Je).length,i=r===0?e:D.createIdentifier(e.text+\"_\"+r);return $2(i)}function o1(){return!iP}function _v(){return iP=!1,Je}function ox(e,t,r,i,o){if(mk(t,r.checker,\"then\"))return jFe(t,Ig(t.arguments,0),Ig(t.arguments,1),r,i,o);if(mk(t,r.checker,\"catch\"))return jve(t,Ig(t.arguments,0),r,i,o);if(mk(t,r.checker,\"finally\"))return VFe(t,Ig(t.arguments,0),r,i,o);if(br(t))return ox(e,t.expression,r,i,o);let s=r.checker.getTypeAtLocation(t);return s&&r.checker.getPromisedTypeOfPromise(s)?(L.assertNode(ec(t).parent,br),HFe(e,t,r,i,o)):_v()}function B5({checker:e},t){if(t.kind===104)return!0;if(Re(t)&&!tc(t)&&vr(t)===\"undefined\"){let r=e.getSymbolAtLocation(t);return!r||e.isUndefinedSymbol(r)}return!1}function UFe(e){let t=D.createUniqueName(e.identifier.text,16);return $2(t)}function Uve(e,t,r){let i;return r&&!gk(e,t)&&(hk(r)?(i=r,t.synthNamesMap.forEach((o,s)=>{if(o.identifier.text===r.identifier.text){let l=UFe(r);t.synthNamesMap.set(s,l)}})):i=$2(D.createUniqueName(\"result\",16),r.types),K$(i)),i}function Vve(e,t,r,i,o){let s=[],l;if(i&&!gk(e,t)){l=cc(K$(i));let f=i.types,d=t.checker.getUnionType(f,2),g=t.isInJSFile?void 0:t.checker.typeToTypeNode(d,void 0,void 0),m=[D.createVariableDeclaration(l,void 0,g)],v=D.createVariableStatement(void 0,D.createVariableDeclarationList(m,1));s.push(v)}return s.push(r),o&&l&&JFe(o)&&s.push(D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(cc(qve(o)),void 0,void 0,l)],2))),s}function VFe(e,t,r,i,o){if(!t||B5(r,t))return ox(e,e.expression.expression,r,i,o);let s=Uve(e,r,o),l=ox(e,e.expression.expression,r,!0,s);if(o1())return _v();let f=z$(t,i,void 0,void 0,e,r);if(o1())return _v();let d=D.createBlock(l),g=D.createBlock(f),m=D.createTryStatement(d,void 0,g);return Vve(e,r,m,s,o)}function jve(e,t,r,i,o){if(!t||B5(r,t))return ox(e,e.expression.expression,r,i,o);let s=Jve(t,r),l=Uve(e,r,o),f=ox(e,e.expression.expression,r,!0,l);if(o1())return _v();let d=z$(t,i,l,s,e,r);if(o1())return _v();let g=D.createBlock(f),m=D.createCatchClause(s&&cc(rP(s)),D.createBlock(d)),v=D.createTryStatement(g,m,void 0);return Vve(e,r,v,l,o)}function jFe(e,t,r,i,o,s){if(!t||B5(i,t))return jve(e,r,i,o,s);if(r&&!B5(i,r))return _v();let l=Jve(t,i),f=ox(e.expression.expression,e.expression.expression,i,!0,l);if(o1())return _v();let d=z$(t,o,s,l,e,i);return o1()?_v():Qi(f,d)}function HFe(e,t,r,i,o){if(gk(e,r)){let s=cc(t);return i&&(s=D.createAwaitExpression(s)),[D.createReturnStatement(s)]}return U5(o,D.createAwaitExpression(t),void 0)}function U5(e,t,r){return!e||Kve(e)?[D.createExpressionStatement(t)]:hk(e)&&e.hasBeenDeclared?[D.createExpressionStatement(D.createAssignment(cc(J$(e)),t))]:[D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(cc(rP(e)),void 0,r,t)],2))]}function W$(e,t){if(t&&e){let r=D.createUniqueName(\"result\",16);return[...U5($2(r),e,t),D.createReturnStatement(r)]}return[D.createReturnStatement(e)]}function z$(e,t,r,i,o,s){var l;switch(e.kind){case 104:break;case 208:case 79:if(!i)break;let f=D.createCallExpression(cc(e),void 0,hk(i)?[J$(i)]:[]);if(gk(o,s))return W$(f,G5(o,e,s.checker));let d=s.checker.getTypeAtLocation(e),g=s.checker.getSignaturesOfType(d,0);if(!g.length)return _v();let m=g[0].getReturnType(),v=U5(r,D.createAwaitExpression(f),G5(o,e,s.checker));return r&&r.types.push(s.checker.getAwaitedType(m)||m),v;case 215:case 216:{let S=e.body,x=(l=Wve(s.checker.getTypeAtLocation(e),s.checker))==null?void 0:l.getReturnType();if(Va(S)){let A=[],w=!1;for(let C of S.statements)if(j_(C))if(w=!0,r5(C,s.checker))A=A.concat(zve(s,C,t,r));else{let P=x&&C.expression?Hve(s.checker,x,C.expression):C.expression;A.push(...W$(P,G5(o,e,s.checker)))}else{if(t&&vT(C,h0))return _v();A.push(C)}return gk(o,s)?A.map(C=>cc(C)):WFe(A,r,s,w)}else{let A=ZY(S,s.checker)?zve(s,D.createReturnStatement(S),t,r):Je;if(A.length>0)return A;if(x){let w=Hve(s.checker,x,S);if(gk(o,s))return W$(w,G5(o,e,s.checker));{let C=U5(r,w,void 0);return r&&r.types.push(s.checker.getAwaitedType(x)||x),C}}else return _v()}}default:return _v()}return Je}function Hve(e,t,r){let i=cc(r);return e.getPromisedTypeOfPromise(t)?D.createAwaitExpression(i):i}function Wve(e,t){let r=t.getSignaturesOfType(e,0);return Os(r)}function WFe(e,t,r,i){let o=[];for(let s of e)if(j_(s)){if(s.expression){let l=Gve(s.expression,r.checker)?D.createAwaitExpression(s.expression):s.expression;t===void 0?o.push(D.createExpressionStatement(l)):hk(t)&&t.hasBeenDeclared?o.push(D.createExpressionStatement(D.createAssignment(J$(t),l))):o.push(D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(rP(t),void 0,void 0,l)],2)))}}else o.push(cc(s));return!i&&t!==void 0&&o.push(D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(rP(t),void 0,void 0,D.createIdentifier(\"undefined\"))],2))),o}function zve(e,t,r,i){let o=[];return pa(t,function s(l){if(Pa(l)){let f=ox(l,l,e,r,i);if(o=o.concat(f),o.length>0)return}else Ia(l)||pa(l,s)}),o}function Jve(e,t){let r=[],i;if(Ds(e)){if(e.parameters.length>0){let d=e.parameters[0].name;i=o(d)}}else Re(e)?i=s(e):br(e)&&Re(e.name)&&(i=s(e.name));if(!i||\"identifier\"in i&&i.identifier.text===\"undefined\")return;return i;function o(d){if(Re(d))return s(d);let g=Uo(d.elements,m=>ol(m)?[]:[o(m.name)]);return zFe(d,g)}function s(d){let g=f(d),m=l(g);return m&&t.synthNamesMap.get($a(m).toString())||$2(d,r)}function l(d){var g,m;return(m=(g=zr(d,$p))==null?void 0:g.symbol)!=null?m:t.checker.getSymbolAtLocation(d)}function f(d){return d.original?d.original:d}}function Kve(e){return e?hk(e)?!e.identifier.text:Ji(e.elements,Kve):!0}function $2(e,t=[]){return{kind:0,identifier:e,types:t,hasBeenDeclared:!1,hasBeenReferenced:!1}}function zFe(e,t=Je,r=[]){return{kind:1,bindingPattern:e,elements:t,types:r}}function J$(e){return e.hasBeenReferenced=!0,e.identifier}function rP(e){return hk(e)?K$(e):qve(e)}function qve(e){for(let t of e.elements)rP(t);return e.bindingPattern}function K$(e){return e.hasBeenDeclared=!0,e.identifier}function hk(e){return e.kind===0}function JFe(e){return e.kind===1}function gk(e,t){return!!e.original&&t.setOfExpressionsToReturn.has(zo(e.original))}var V5,q$,iP,KFe=gt({\"src/services/codefixes/convertToAsyncFunction.ts\"(){\"use strict\";Fr(),Qa(),V5=\"convertToAsyncFunction\",q$=[_.This_may_be_converted_to_an_async_function.code],iP=!0,za({errorCodes:q$,getCodeActions(e){iP=!0;let t=nr.ChangeTracker.with(e,r=>Mve(r,e.sourceFile,e.span.start,e.program.getTypeChecker()));return iP?[Ma(V5,t,_.Convert_to_async_function,V5,_.Convert_all_to_async_functions)]:[]},fixIds:[V5],getAllCodeActions:e=>ns(e,q$,(t,r)=>Mve(t,r.file,r.start,e.program.getTypeChecker()))})}});function qFe(e,t,r,i){for(let o of e.imports){let s=kA(e,o.text,W_(e,o));if(!s||s.resolvedFileName!==t.fileName)continue;let l=aR(o);switch(l.kind){case 268:r.replaceNode(e,l,Xg(l.name,void 0,o,i));break;case 210:qu(l,!1)&&r.replaceNode(e,l,D.createPropertyAccessExpression(cc(l),\"default\"));break}}}function XFe(e,t,r,i,o){let s={original:c7e(e),additional:new Set},l=YFe(e,t,s);$Fe(e,l,r);let f=!1,d;for(let g of Pr(e.statements,Bc)){let m=Yve(e,g,r,t,s,i,o);m&&Mw(m,d??(d=new Map))}for(let g of Pr(e.statements,m=>!Bc(m))){let m=QFe(e,g,t,r,s,i,l,d,o);f=f||m}return d?.forEach((g,m)=>{r.replaceNode(e,m,g)}),f}function YFe(e,t,r){let i=new Map;return Xve(e,o=>{let{text:s}=o.name;!i.has(s)&&(q6(o.name)||t.resolveName(s,o,111551,!0))&&i.set(s,j5(`_${s}`,r))}),i}function $Fe(e,t,r){Xve(e,(i,o)=>{if(o)return;let{text:s}=i.name;r.replaceNode(e,i,D.createIdentifier(t.get(s)||s))})}function Xve(e,t){e.forEachChild(function r(i){if(br(i)&&$0(e,i.expression)&&Re(i.name)){let{parent:o}=i;t(i,ar(o)&&o.left===i&&o.operatorToken.kind===63)}i.forEachChild(r)})}function QFe(e,t,r,i,o,s,l,f,d){switch(t.kind){case 240:return Yve(e,t,i,r,o,s,d),!1;case 241:{let{expression:g}=t;switch(g.kind){case 210:return qu(g,!0)&&i.replaceNode(e,t,Xg(void 0,void 0,g.arguments[0],d)),!1;case 223:{let{operatorToken:m}=g;return m.kind===63&&e7e(e,r,g,i,l,f)}}}default:return!1}}function Yve(e,t,r,i,o,s,l){let{declarationList:f}=t,d=!1,g=on(f.declarations,m=>{let{name:v,initializer:S}=m;if(S){if($0(e,S))return d=!0,Q2([]);if(qu(S,!0))return d=!0,o7e(v,S.arguments[0],i,o,s,l);if(br(S)&&qu(S.expression,!0))return d=!0,ZFe(v,S.name.text,S.expression.arguments[0],o,l)}return Q2([D.createVariableStatement(void 0,D.createVariableDeclarationList([m],f.flags))])});if(d){r.replaceNodeWithNodes(e,t,Uo(g,v=>v.newImports));let m;return mn(g,v=>{v.useSitesToUnqualify&&Mw(v.useSitesToUnqualify,m??(m=new Map))}),m}}function ZFe(e,t,r,i,o){switch(e.kind){case 203:case 204:{let s=j5(t,i);return Q2([ebe(s,t,r,o),H5(void 0,e,D.createIdentifier(s))])}case 79:return Q2([ebe(e.text,t,r,o)]);default:return L.assertNever(e,`Convert to ES module got invalid syntax form ${e.kind}`)}}function e7e(e,t,r,i,o,s){let{left:l,right:f}=r;if(!br(l))return!1;if($0(e,l))if($0(e,f))i.delete(e,r.parent);else{let d=rs(f)?t7e(f,s):qu(f,!0)?r7e(f.arguments[0],t):void 0;return d?(i.replaceNodeWithNodes(e,r.parent,d[0]),d[1]):(i.replaceRangeWithText(e,Gf(l.getStart(e),f.pos),\"export default\"),!0)}else $0(e,l.expression)&&n7e(e,r,i,o);return!1}function t7e(e,t){let r=NU(e.properties,i=>{switch(i.kind){case 174:case 175:case 300:case 301:return;case 299:return Re(i.name)?a7e(i.name.text,i.initializer,t):void 0;case 171:return Re(i.name)?Zve(i.name.text,[D.createToken(93)],i,t):void 0;default:L.assertNever(i,`Convert to ES6 got invalid prop kind ${i.kind}`)}});return r&&[r,!1]}function n7e(e,t,r,i){let{text:o}=t.left.name,s=i.get(o);if(s!==void 0){let l=[H5(void 0,s,t.right),$$([D.createExportSpecifier(!1,s,o)])];r.replaceNodeWithNodes(e,t.parent,l)}else i7e(t,e,r)}function r7e(e,t){let r=e.text,i=t.getSymbolAtLocation(e),o=i?i.exports:b8;return o.has(\"export=\")?[[X$(r)],!0]:o.has(\"default\")?o.size>1?[[$ve(r),X$(r)],!0]:[[X$(r)],!0]:[[$ve(r)],!1]}function $ve(e){return $$(void 0,e)}function X$(e){return $$([D.createExportSpecifier(!1,void 0,\"default\")],e)}function i7e({left:e,right:t,parent:r},i,o){let s=e.name.text;if((ms(t)||xs(t)||_u(t))&&(!t.name||t.name.text===s)){o.replaceRange(i,{pos:e.getStart(i),end:t.getStart(i)},D.createToken(93),{suffix:\" \"}),t.name||o.insertName(i,t,s);let l=Yo(r,26,i);l&&o.delete(i,l)}else o.replaceNodeRangeWithNodes(i,e.expression,Yo(e,24,i),[D.createToken(93),D.createToken(85)],{joiner:\" \",suffix:\" \"})}function a7e(e,t,r){let i=[D.createToken(93)];switch(t.kind){case 215:{let{name:s}=t;if(s&&s.text!==e)return o()}case 216:return Zve(e,i,t,r);case 228:return u7e(e,i,t,r);default:return o()}function o(){return H5(i,D.createIdentifier(e),Y$(t,r))}}function Y$(e,t){if(!t||!vt(lo(t.keys()),i=>Od(e,i)))return e;return ba(e)?gY(e,!0,r):JN(e,!0,r);function r(i){if(i.kind===208){let o=t.get(i);return t.delete(i),o}}}function o7e(e,t,r,i,o,s){switch(e.kind){case 203:{let l=NU(e.elements,f=>f.dotDotDotToken||f.initializer||f.propertyName&&!Re(f.propertyName)||!Re(f.name)?void 0:tbe(f.propertyName&&f.propertyName.text,f.name.text));if(l)return Q2([Xg(void 0,l,t,s)])}case 204:{let l=j5(cQ(t.text,o),i);return Q2([Xg(D.createIdentifier(l),void 0,t,s),H5(void 0,cc(e),D.createIdentifier(l))])}case 79:return s7e(e,t,r,i,s);default:return L.assertNever(e,`Convert to ES module got invalid name kind ${e.kind}`)}}function s7e(e,t,r,i,o){let s=r.getSymbolAtLocation(e),l=new Map,f=!1,d;for(let m of i.original.get(e.text)){if(r.getSymbolAtLocation(m)!==s||m===e)continue;let{parent:v}=m;if(br(v)){let{name:{text:S}}=v;if(S===\"default\"){f=!0;let x=m.getText();(d??(d=new Map)).set(v,D.createIdentifier(x))}else{L.assert(v.expression===m,\"Didn't expect expression === use\");let x=l.get(S);x===void 0&&(x=j5(S,i),l.set(S,x)),(d??(d=new Map)).set(v,D.createIdentifier(x))}}else f=!0}let g=l.size===0?void 0:lo(RU(l.entries(),([m,v])=>D.createImportSpecifier(!1,m===v?void 0:D.createIdentifier(m),D.createIdentifier(v))));return g||(f=!0),Q2([Xg(f?cc(e):void 0,g,t,o)],d)}function j5(e,t){for(;t.original.has(e)||t.additional.has(e);)e=`_${e}`;return t.additional.add(e),e}function c7e(e){let t=Nf();return Qve(e,r=>t.add(r.text,r)),t}function Qve(e,t){Re(e)&&l7e(e)&&t(e),e.forEachChild(r=>Qve(r,t))}function l7e(e){let{parent:t}=e;switch(t.kind){case 208:return t.name!==e;case 205:return t.propertyName!==e;case 273:return t.propertyName!==e;default:return!0}}function Zve(e,t,r,i){return D.createFunctionDeclaration(Qi(t,oE(r.modifiers)),cc(r.asteriskToken),e,oE(r.typeParameters),oE(r.parameters),cc(r.type),D.converters.convertToFunctionBlock(Y$(r.body,i)))}function u7e(e,t,r,i){return D.createClassDeclaration(Qi(t,oE(r.modifiers)),e,oE(r.typeParameters),oE(r.heritageClauses),Y$(r.members,i))}function ebe(e,t,r,i){return t===\"default\"?Xg(D.createIdentifier(e),void 0,r,i):Xg(void 0,[tbe(t,e)],r,i)}function tbe(e,t){return D.createImportSpecifier(!1,e!==void 0&&e!==t?D.createIdentifier(e):void 0,D.createIdentifier(t))}function H5(e,t,r){return D.createVariableStatement(e,D.createVariableDeclarationList([D.createVariableDeclaration(t,void 0,void 0,r)],2))}function $$(e,t){return D.createExportDeclaration(void 0,!1,e&&D.createNamedExports(e),t===void 0?void 0:D.createStringLiteral(t))}function Q2(e,t){return{newImports:e,useSitesToUnqualify:t}}var d7e=gt({\"src/services/codefixes/convertToEsModule.ts\"(){\"use strict\";Fr(),Qa(),za({errorCodes:[_.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module.code],getCodeActions(e){let{sourceFile:t,program:r,preferences:i}=e,o=nr.ChangeTracker.with(e,s=>{if(XFe(t,r.getTypeChecker(),s,Do(r.getCompilerOptions()),J_(t,i)))for(let f of r.getSourceFiles())qFe(f,t,s,J_(f,i))});return[K_(\"convertToEsModule\",o,_.Convert_to_ES_module)]}})}});function nbe(e,t){let r=jn(Vi(e,t),Yu);return L.assert(!!r,\"Expected position to be owned by a qualified name.\"),Re(r.left)?r:void 0}function rbe(e,t,r){let i=r.right.text,o=D.createIndexedAccessTypeNode(D.createTypeReferenceNode(r.left,void 0),D.createLiteralTypeNode(D.createStringLiteral(i)));e.replaceNode(t,r,o)}var W5,Q$,f7e=gt({\"src/services/codefixes/correctQualifiedNameToIndexedAccessType.ts\"(){\"use strict\";Fr(),Qa(),W5=\"correctQualifiedNameToIndexedAccessType\",Q$=[_.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1.code],za({errorCodes:Q$,getCodeActions(e){let t=nbe(e.sourceFile,e.span.start);if(!t)return;let r=nr.ChangeTracker.with(e,o=>rbe(o,e.sourceFile,t)),i=`${t.left.text}[\"${t.right.text}\"]`;return[Ma(W5,r,[_.Rewrite_as_the_indexed_access_type_0,i],W5,_.Rewrite_all_as_indexed_access_types)]},fixIds:[W5],getAllCodeActions:e=>ns(e,Q$,(t,r)=>{let i=nbe(r.file,r.start);i&&rbe(t,r.file,i)})})}});function ibe(e,t){return zr(Vi(t,e.start).parent,Mu)}function abe(e,t,r){if(!t)return;let i=t.parent,o=i.parent,s=_7e(t,r);if(s.length===i.elements.length)e.insertModifierBefore(r.sourceFile,154,i);else{let l=D.updateExportDeclaration(o,o.modifiers,!1,D.updateNamedExports(i,Pr(i.elements,d=>!ya(s,d))),o.moduleSpecifier,void 0),f=D.createExportDeclaration(void 0,!0,D.createNamedExports(s),o.moduleSpecifier,void 0);e.replaceNode(r.sourceFile,o,l,{leadingTriviaOption:nr.LeadingTriviaOption.IncludeAll,trailingTriviaOption:nr.TrailingTriviaOption.Exclude}),e.insertNodeAfter(r.sourceFile,o,f)}}function _7e(e,t){let r=e.parent;if(r.elements.length===1)return r.elements;let i=_ge(Du(r),t.program.getSemanticDiagnostics(t.sourceFile,t.cancellationToken));return Pr(r.elements,o=>{var s;return o===e||((s=fge(o,i))==null?void 0:s.code)===z5[0]})}var z5,J5,p7e=gt({\"src/services/codefixes/convertToTypeOnlyExport.ts\"(){\"use strict\";Fr(),Qa(),z5=[_.Re_exporting_a_type_when_0_is_enabled_requires_using_export_type.code],J5=\"convertToTypeOnlyExport\",za({errorCodes:z5,getCodeActions:function(t){let r=nr.ChangeTracker.with(t,i=>abe(i,ibe(t.span,t.sourceFile),t));if(r.length)return[Ma(J5,r,_.Convert_to_type_only_export,J5,_.Convert_all_re_exported_types_to_type_only_exports)]},fixIds:[J5],getAllCodeActions:function(t){let r=new Map;return ns(t,z5,(i,o)=>{let s=ibe(o,t.sourceFile);s&&V_(r,zo(s.parent.parent))&&abe(i,s,t)})}})}});function obe(e,t){let{parent:r}=Vi(e,t);return $u(r)||gl(r)&&r.importClause?r:void 0}function sbe(e,t,r){if($u(r))e.replaceNode(t,r,D.updateImportSpecifier(r,!0,r.propertyName,r.name));else{let i=r.importClause;if(i.name&&i.namedBindings)e.replaceNodeWithNodes(t,r,[D.createImportDeclaration(oE(r.modifiers,!0),D.createImportClause(!0,cc(i.name,!0),void 0),cc(r.moduleSpecifier,!0),cc(r.assertClause,!0)),D.createImportDeclaration(oE(r.modifiers,!0),D.createImportClause(!0,void 0,cc(i.namedBindings,!0)),cc(r.moduleSpecifier,!0),cc(r.assertClause,!0))]);else{let o=D.updateImportDeclaration(r,r.modifiers,D.updateImportClause(i,!0,i.name,i.namedBindings),r.moduleSpecifier,r.assertClause);e.replaceNode(t,r,o)}}}var Z$,K5,m7e=gt({\"src/services/codefixes/convertToTypeOnlyImport.ts\"(){\"use strict\";Fr(),Qa(),Z$=[_.This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error.code,_._0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled.code],K5=\"convertToTypeOnlyImport\",za({errorCodes:Z$,getCodeActions:function(t){let r=obe(t.sourceFile,t.span.start);if(r){let i=nr.ChangeTracker.with(t,o=>sbe(o,t.sourceFile,r));return[Ma(K5,i,_.Convert_to_type_only_import,K5,_.Convert_all_imports_not_used_as_a_value_to_type_only_imports)]}},fixIds:[K5],getAllCodeActions:function(t){return ns(t,Z$,(r,i)=>{let o=obe(i.file,i.start);o&&sbe(r,i.file,o)})}})}});function cbe(e,t){let r=Vi(e,t);if(Re(r)){let i=Ga(r.parent.parent,$d),o=r.getText(e);return{container:Ga(i.parent,Rd),typeNode:i.type,constraint:o,name:o===\"K\"?\"P\":\"K\"}}}function lbe(e,t,{container:r,typeNode:i,constraint:o,name:s}){e.replaceNode(t,r,D.createMappedTypeNode(void 0,D.createTypeParameterDeclaration(void 0,s,D.createTypeReferenceNode(o)),void 0,void 0,i,void 0))}var q5,eQ,h7e=gt({\"src/services/codefixes/convertLiteralTypeToMappedType.ts\"(){\"use strict\";Fr(),Qa(),q5=\"convertLiteralTypeToMappedType\",eQ=[_._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0.code],za({errorCodes:eQ,getCodeActions:function(t){let{sourceFile:r,span:i}=t,o=cbe(r,i.start);if(!o)return;let{name:s,constraint:l}=o,f=nr.ChangeTracker.with(t,d=>lbe(d,r,o));return[Ma(q5,f,[_.Convert_0_to_1_in_0,l,s],q5,_.Convert_all_type_literals_to_mapped_type)]},fixIds:[q5],getAllCodeActions:e=>ns(e,eQ,(t,r)=>{let i=cbe(r.file,r.start);i&&lbe(t,r.file,i)})})}});function ube(e,t){return L.checkDefined(Zc(Vi(e,t)),\"There should be a containing class\")}function dbe(e){return!e.valueDeclaration||!(uu(e.valueDeclaration)&8)}function fbe(e,t,r,i,o,s){let l=e.program.getTypeChecker(),f=g7e(i,l),d=l.getTypeAtLocation(t),m=l.getPropertiesOfType(d).filter(g8(dbe,C=>!f.has(C.escapedName))),v=l.getTypeAtLocation(i),S=wr(i.members,C=>Ec(C));v.getNumberIndexType()||A(d,1),v.getStringIndexType()||A(d,0);let x=s1(r,e.program,s,e.host);oZ(i,m,r,e,s,x,C=>w(r,i,C)),x.writeFixes(o);function A(C,P){let F=l.getIndexInfoOfType(C,P);F&&w(r,i,l.indexInfoToIndexSignatureDeclaration(F,i,void 0,sx(e)))}function w(C,P,F){S?o.insertNodeAfter(C,S,F):o.insertMemberAtStart(C,P,F)}}function g7e(e,t){let r=hp(e);if(!r)return Ua();let i=t.getTypeAtLocation(r),o=t.getPropertiesOfType(i);return Ua(o.filter(dbe))}var tQ,X5,y7e=gt({\"src/services/codefixes/fixClassIncorrectlyImplementsInterface.ts\"(){\"use strict\";Fr(),Qa(),tQ=[_.Class_0_incorrectly_implements_interface_1.code,_.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass.code],X5=\"fixClassIncorrectlyImplementsInterface\",za({errorCodes:tQ,getCodeActions(e){let{sourceFile:t,span:r}=e,i=ube(t,r.start);return Zi(JA(i),o=>{let s=nr.ChangeTracker.with(e,l=>fbe(e,o,t,i,l,e.preferences));return s.length===0?void 0:Ma(X5,s,[_.Implement_interface_0,o.getText(t)],X5,_.Implement_all_unimplemented_interfaces)})},fixIds:[X5],getAllCodeActions(e){let t=new Map;return ns(e,tQ,(r,i)=>{let o=ube(i.file,i.start);if(V_(t,zo(o)))for(let s of JA(o))fbe(e,s,i.file,o,r,e.preferences)})}})}});function s1(e,t,r,i,o){return _be(e,t,!1,r,i,o)}function _be(e,t,r,i,o,s){let l=t.getCompilerOptions(),f=[],d=[],g=new Map,m=new Map;return{addImportFromDiagnostic:v,addImportFromExportedSymbol:S,writeFixes:A,hasFixes:w};function v(C,P){let F=vbe(P,C.code,C.start,r);!F||!F.length||x(Vo(F))}function S(C,P){let F=L.checkDefined(C.parent),B=j7(C,Do(l)),q=t.getTypeChecker(),W=q.getMergedSymbol(wd(C,q)),Y=hbe(e,W,B,F,!1,t,o,i,s),R=$5(e,t),ie=pbe(e,L.checkDefined(Y),t,void 0,!!P,R,o,i);ie&&x({fix:ie,symbolName:B,errorIdentifierText:void 0})}function x(C){var P,F;let{fix:B,symbolName:q}=C;switch(B.kind){case 0:f.push(B);break;case 1:d.push(B);break;case 2:{let{importClauseOrBindingPattern:ie,importKind:$,addAsTypeOnly:fe}=B,Z=String(zo(ie)),U=g.get(Z);if(U||g.set(Z,U={importClauseOrBindingPattern:ie,defaultImport:void 0,namedImports:new Map}),$===0){let re=U?.namedImports.get(q);U.namedImports.set(q,W(re,fe))}else L.assert(U.defaultImport===void 0||U.defaultImport.name===q,\"(Add to Existing) Default import should be missing or match symbolName\"),U.defaultImport={name:q,addAsTypeOnly:W((P=U.defaultImport)==null?void 0:P.addAsTypeOnly,fe)};break}case 3:{let{moduleSpecifier:ie,importKind:$,useRequire:fe,addAsTypeOnly:Z}=B,U=Y(ie,$,fe,Z);switch(L.assert(U.useRequire===fe,\"(Add new) Tried to add an `import` and a `require` for the same module\"),$){case 1:L.assert(U.defaultImport===void 0||U.defaultImport.name===q,\"(Add new) Default import should be missing or match symbolName\"),U.defaultImport={name:q,addAsTypeOnly:W((F=U.defaultImport)==null?void 0:F.addAsTypeOnly,Z)};break;case 0:let re=(U.namedImports||(U.namedImports=new Map)).get(q);U.namedImports.set(q,W(re,Z));break;case 3:case 2:L.assert(U.namespaceLikeImport===void 0||U.namespaceLikeImport.name===q,\"Namespacelike import shoudl be missing or match symbolName\"),U.namespaceLikeImport={importKind:$,name:q,addAsTypeOnly:Z};break}break}case 4:break;default:L.assertNever(B,`fix wasn't never - got kind ${B.kind}`)}function W(ie,$){return Math.max(ie??0,$)}function Y(ie,$,fe,Z){let U=R(ie,!0),re=R(ie,!1),le=m.get(U),_e=m.get(re),ge={defaultImport:void 0,namedImports:void 0,namespaceLikeImport:void 0,useRequire:fe};return $===1&&Z===2?le||(m.set(U,ge),ge):Z===1&&(le||_e)?le||_e:_e||(m.set(re,ge),ge)}function R(ie,$){return`${$?1:0}|${ie}`}}function A(C){let P=J_(e,i);for(let B of f)oQ(C,e,B);for(let B of d)Cbe(C,e,B,P);g.forEach(({importClauseOrBindingPattern:B,defaultImport:q,namedImports:W})=>{Abe(C,e,B,q,lo(W.entries(),([Y,R])=>({addAsTypeOnly:R,name:Y})),l,i)});let F;m.forEach(({useRequire:B,defaultImport:q,namedImports:W,namespaceLikeImport:Y},R)=>{let ie=R.slice(2),fe=(B?kbe:Lbe)(ie,P,q,W&&lo(W.entries(),([Z,U])=>({addAsTypeOnly:U,name:Z})),Y,l);F=_A(F,fe)}),F&&L7(C,e,F,!0,i)}function w(){return f.length>0||d.length>0||g.size>0||m.size>0}}function v7e(e,t,r,i){let o=uk(e,i,r),s=gbe(t.getTypeChecker(),e,t.getCompilerOptions());return{getModuleSpecifierForBestExportInfo:l};function l(f,d,g,m){let{fixes:v,computedWithoutCacheCount:S}=Y5(f,d,g,!1,t,e,r,i,s,m),x=bbe(v,e,t,o,r);return x&&{...x,computedWithoutCacheCount:S}}}function b7e(e,t,r,i,o,s,l,f,d,g,m,v){let S=f.getCompilerOptions(),x;r?(x=YN(i,l,f,m,v).get(i.path,r),L.assertIsDefined(x,\"Some exportInfo should match the specified exportMapKey\")):(x=cj(u_(t.name))?[T7e(e,o,t,f,l)]:hbe(i,e,o,t,s,f,l,m,v),L.assertIsDefined(x,\"Some exportInfo should match the specified symbol / moduleSymbol\"));let A=$5(i,f),w=TS(Vi(i,g)),C=L.checkDefined(pbe(i,x,f,g,w,A,l,m));return{moduleSpecifier:C.moduleSpecifier,codeAction:mbe(aQ({host:l,formatContext:d,preferences:m},i,o,C,!1,S,m))}}function E7e(e,t,r,i,o,s){let l=r.getCompilerOptions(),f=BU(iQ(e,r.getTypeChecker(),t,l)),d=Sbe(e,t,f,r),g=f!==t.text;return d&&mbe(aQ({host:i,formatContext:o,preferences:s},e,f,d,g,l,s))}function pbe(e,t,r,i,o,s,l,f){let d=uk(e,f,l);return bbe(Y5(t,i,o,s,r,e,l,f).fixes,e,r,d,l)}function mbe({description:e,changes:t,commands:r}){return{description:e,changes:t,commands:r}}function hbe(e,t,r,i,o,s,l,f,d){let g=ybe(s,l);return YN(e,l,s,f,d).search(e.path,o,m=>m===r,m=>{if(wd(m[0].symbol,g(m[0].isFromPackageJson))===t&&m.some(v=>v.moduleSymbol===i||v.symbol.parent===i))return m})}function T7e(e,t,r,i,o){var s,l;let f=i.getCompilerOptions(),d=m(i.getTypeChecker(),!1);if(d)return d;let g=(l=(s=o.getPackageJsonAutoImportProvider)==null?void 0:s.call(o))==null?void 0:l.getTypeChecker();return L.checkDefined(g&&m(g,!0),\"Could not find symbol in specified module for code actions\");function m(v,S){let x=Y7(r,v,f);if(x&&wd(x.symbol,v)===e)return{symbol:x.symbol,moduleSymbol:r,moduleFileName:void 0,exportKind:x.exportKind,targetFlags:wd(e,v).flags,isFromPackageJson:S};let A=v.tryGetMemberInModuleExportsAndProperties(t,r);if(A&&wd(A,v)===e)return{symbol:A,moduleSymbol:r,moduleFileName:void 0,exportKind:0,targetFlags:wd(e,v).flags,isFromPackageJson:S}}}function Y5(e,t,r,i,o,s,l,f,d=gbe(o.getTypeChecker(),s,o.getCompilerOptions()),g){let m=o.getTypeChecker(),v=Uo(e,d.getImportsForExportInfo),S=t!==void 0&&S7e(v,t),x=A7e(v,r,m,o.getCompilerOptions());if(x)return{computedWithoutCacheCount:0,fixes:[...S?[S]:Je,x]};let{fixes:A,computedWithoutCacheCount:w=0}=I7e(e,v,o,s,t,r,i,l,f,g);return{computedWithoutCacheCount:w,fixes:[...S?[S]:Je,...A]}}function S7e(e,t){return ks(e,({declaration:r,importKind:i})=>{var o;if(i!==0)return;let s=x7e(r),l=s&&((o=iR(r))==null?void 0:o.text);if(l)return{kind:0,namespacePrefix:s,usagePosition:t,moduleSpecifier:l}})}function x7e(e){var t,r,i;switch(e.kind){case 257:return(t=zr(e.name,Re))==null?void 0:t.text;case 268:return e.name.text;case 269:return(i=zr((r=e.importClause)==null?void 0:r.namedBindings,nv))==null?void 0:i.name.text;default:return L.assertNever(e)}}function nQ(e,t,r,i,o,s){return e?t&&s.importsNotUsedAsValues===2||u4(s)&&(!(i&111551)||o.getTypeOnlyAliasDeclaration(r))?2:1:4}function A7e(e,t,r,i){return ks(e,({declaration:o,importKind:s,symbol:l,targetFlags:f})=>{if(s===3||s===2||o.kind===268)return;if(o.kind===257)return(s===0||s===1)&&o.name.kind===203?{kind:2,importClauseOrBindingPattern:o.name,importKind:s,moduleSpecifier:o.initializer.arguments[0].text,addAsTypeOnly:4}:void 0;let{importClause:d}=o;if(!d||!es(o.moduleSpecifier))return;let{name:g,namedBindings:m}=d;if(d.isTypeOnly&&!(s===0&&m))return;let v=nQ(t,!1,l,f,r,i);if(!(s===1&&(g||v===2&&m))&&!(s===0&&m?.kind===271))return{kind:2,importClauseOrBindingPattern:d,importKind:s,moduleSpecifier:o.moduleSpecifier.text,addAsTypeOnly:v}})}function gbe(e,t,r){let i;for(let o of t.imports){let s=aR(o);if(kH(s.parent)){let l=e.resolveExternalModuleName(o);l&&(i||(i=Nf())).add($a(l),s.parent)}else if(s.kind===269||s.kind===268){let l=e.getSymbolAtLocation(o);l&&(i||(i=Nf())).add($a(l),s)}}return{getImportsForExportInfo:({moduleSymbol:o,exportKind:s,targetFlags:l,symbol:f})=>{if(!(l&111551)&&Cu(t))return Je;let d=i?.get($a(o));if(!d)return Je;let g=rQ(t,s,r);return d.map(m=>({declaration:m,importKind:g,symbol:f,targetFlags:l}))}}}function $5(e,t){if(!Cu(e))return!1;if(e.commonJsModuleIndicator&&!e.externalModuleIndicator)return!0;if(e.externalModuleIndicator&&!e.commonJsModuleIndicator)return!1;let r=t.getCompilerOptions();if(r.configFile)return Rl(r)<5;for(let i of t.getSourceFiles())if(!(i===e||!Cu(i)||t.isSourceFileFromExternalLibrary(i))){if(i.commonJsModuleIndicator&&!i.externalModuleIndicator)return!0;if(i.externalModuleIndicator&&!i.commonJsModuleIndicator)return!1}return!0}function ybe(e,t){return Jp(r=>r?t.getPackageJsonAutoImportProvider().getTypeChecker():e.getTypeChecker())}function C7e(e,t,r,i,o,s,l,f,d){let g=Cu(t),m=e.getCompilerOptions(),v=$S(e,l),S=ybe(e,l),x=$s(m),A=T7(x),w=d?F=>({moduleSpecifiers:Q0.tryGetModuleSpecifiersFromCache(F,t,v,f),computedWithoutCache:!1}):(F,B)=>Q0.getModuleSpecifiersWithCacheInfo(F,B,m,t,v,f),C=0,P=Uo(s,(F,B)=>{let q=S(F.isFromPackageJson),{computedWithoutCache:W,moduleSpecifiers:Y}=w(F.moduleSymbol,q),R=!!(F.targetFlags&111551),ie=nQ(i,!0,F.symbol,F.targetFlags,q,m);return C+=W?1:0,Zi(Y,$=>{var fe;if(A&&JS($))return;if(!R&&g&&r!==void 0)return{kind:1,moduleSpecifier:$,usagePosition:r,exportInfo:F,isReExport:B>0};let Z=rQ(t,F.exportKind,m),U;if(r!==void 0&&Z===3&&F.exportKind===0){let re=q.resolveExternalModuleSymbol(F.moduleSymbol),le;re!==F.moduleSymbol&&(le=(fe=$7(re,q,m))==null?void 0:fe.name),le||(le=sQ(F.moduleSymbol,Do(m),!1)),U={namespacePrefix:le,usagePosition:r}}return{kind:3,moduleSpecifier:$,importKind:Z,useRequire:o,addAsTypeOnly:ie,exportInfo:F,isReExport:B>0,qualification:U}})});return{computedWithoutCacheCount:C,fixes:P}}function I7e(e,t,r,i,o,s,l,f,d,g){let m=ks(t,v=>L7e(v,s,l,r.getTypeChecker(),r.getCompilerOptions()));return m?{fixes:[m]}:C7e(r,i,o,s,l,e,f,d,g)}function L7e({declaration:e,importKind:t,symbol:r,targetFlags:i},o,s,l,f){var d;let g=(d=iR(e))==null?void 0:d.text;if(g){let m=s?4:nQ(o,!0,r,i,l,f);return{kind:3,moduleSpecifier:g,importKind:t,addAsTypeOnly:m,useRequire:s}}}function vbe(e,t,r,i){let o=Vi(e.sourceFile,r),s;if(t===_._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code)s=R7e(e,o);else if(Re(o))if(t===_._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type.code){let f=BU(iQ(e.sourceFile,e.program.getTypeChecker(),o,e.program.getCompilerOptions())),d=Sbe(e.sourceFile,o,f,e.program);return d&&[{fix:d,symbolName:f,errorIdentifierText:o.text}]}else s=P7e(e,o,i);else return;let l=uk(e.sourceFile,e.preferences,e.host);return s&&k7e(s,e.sourceFile,e.program,l,e.host)}function k7e(e,t,r,i,o){let s=l=>Ts(l,o.getCurrentDirectory(),lb(o));return XC(e,(l,f)=>g0(!!l.isJsxNamespaceFix,!!f.isJsxNamespaceFix)||Es(l.fix.kind,f.fix.kind)||Ebe(l.fix,f.fix,t,r,i.allowsImportingSpecifier,s))}function bbe(e,t,r,i,o){if(vt(e))return e[0].kind===0||e[0].kind===2?e[0]:e.reduce((s,l)=>Ebe(l,s,t,r,i.allowsImportingSpecifier,f=>Ts(f,o.getCurrentDirectory(),lb(o)))===-1?l:s)}function Ebe(e,t,r,i,o,s){return e.kind!==0&&t.kind!==0?g0(o(t.moduleSpecifier),o(e.moduleSpecifier))||w7e(e.moduleSpecifier,t.moduleSpecifier,r,i)||g0(Tbe(e,r,i.getCompilerOptions(),s),Tbe(t,r,i.getCompilerOptions(),s))||BR(e.moduleSpecifier,t.moduleSpecifier):0}function Tbe(e,t,r,i){var o;if(e.isReExport&&((o=e.exportInfo)!=null&&o.moduleFileName)&&$s(r)===2&&D7e(e.exportInfo.moduleFileName)){let s=i(ni(e.exportInfo.moduleFileName));return na(t.path,s)}return!1}function D7e(e){return Hl(e,[\".js\",\".jsx\",\".d.ts\",\".ts\",\".tsx\"],!0)===\"index\"}function w7e(e,t,r,i){return na(e,\"node:\")&&!na(t,\"node:\")?W7(r,i)?-1:1:na(t,\"node:\")&&!na(e,\"node:\")?W7(r,i)?1:-1:0}function R7e({sourceFile:e,program:t,host:r,preferences:i},o){let s=t.getTypeChecker(),l=O7e(o,s);if(!l)return;let f=s.getAliasedSymbol(l),d=l.name,g=[{symbol:l,moduleSymbol:f,moduleFileName:void 0,exportKind:3,targetFlags:f.flags,isFromPackageJson:!1}],m=$5(e,t);return Y5(g,void 0,!1,m,t,e,r,i).fixes.map(S=>{var x;return{fix:S,symbolName:d,errorIdentifierText:(x=zr(o,Re))==null?void 0:x.text}})}function O7e(e,t){let r=Re(e)?t.getSymbolAtLocation(e):void 0;if(o4(r))return r;let{parent:i}=e;if(Au(i)&&i.tagName===e||US(i)){let o=t.resolveName(t.getJsxNamespace(i),Au(i)?e:i,111551,!1);if(o4(o))return o}}function rQ(e,t,r,i){if(r.verbatimModuleSyntax&&(Rl(r)===1||e.impliedNodeFormat===1))return 3;switch(t){case 0:return 0;case 1:return 1;case 2:return G7e(e,r,!!i);case 3:return N7e(e,r,!!i);default:return L.assertNever(t)}}function N7e(e,t,r){if(wT(t))return 1;let i=Rl(t);switch(i){case 2:case 1:case 3:return Yn(e)&&(Lc(e)||r)?2:3;case 4:case 5:case 6:case 7:case 99:case 0:return 2;case 100:case 199:return e.impliedNodeFormat===99?2:3;default:return L.assertNever(i,`Unexpected moduleKind ${i}`)}}function P7e({sourceFile:e,program:t,cancellationToken:r,host:i,preferences:o},s,l){let f=t.getTypeChecker(),d=t.getCompilerOptions();return Uo(iQ(e,f,s,d),g=>{if(g===\"default\")return;let m=TS(s),v=$5(e,t),S=F7e(g,DI(s),ZT(s),r,e,t,l,i,o);return lo(OU(S.values(),x=>Y5(x,s.getStart(e),m,v,t,e,i,o).fixes),x=>({fix:x,symbolName:g,errorIdentifierText:s.text,isJsxNamespaceFix:g!==s.text}))})}function Sbe(e,t,r,i){let o=i.getTypeChecker(),s=o.resolveName(r,t,111551,!0);if(!s)return;let l=o.getTypeOnlyAliasDeclaration(s);if(!(!l||Gn(l)!==e))return{kind:4,typeOnlyAliasDeclaration:l}}function iQ(e,t,r,i){let o=r.parent;if((Au(o)||GS(o))&&o.tagName===r&&wY(i.jsx)){let s=t.getJsxNamespace(e);if(M7e(s,r,t))return!GI(r.text)&&!t.resolveName(r.text,r,111551,!1)?[r.text,s]:[s]}return[r.text]}function M7e(e,t,r){if(GI(t.text))return!0;let i=r.resolveName(e,t,111551,!0);return!i||vt(i.declarations,I0)&&!(i.flags&111551)}function F7e(e,t,r,i,o,s,l,f,d){var g;let m=Nf(),v=uk(o,d,f),S=(g=f.getModuleSpecifierCache)==null?void 0:g.call(f),x=Jp(w=>$S(w?f.getPackageJsonAutoImportProvider():s,f));function A(w,C,P,F,B,q){let W=x(q);if(C&&PY(B,o,C,d,v,W,S)||!C&&v.allowsImportingAmbientModule(w,W)){let Y=B.getTypeChecker();m.add(tge(P,Y).toString(),{symbol:P,moduleSymbol:w,moduleFileName:C?.fileName,exportKind:F,targetFlags:wd(P,Y).flags,isFromPackageJson:q})}}return MY(s,f,d,l,(w,C,P,F)=>{let B=P.getTypeChecker();i.throwIfCancellationRequested();let q=P.getCompilerOptions(),W=Y7(w,B,q);W&&(W.name===e||sQ(w,Do(q),t)===e)&&wbe(W.resolvedSymbol,r)&&A(w,C,W.symbol,W.exportKind,P,F);let Y=B.tryGetMemberInModuleExportsAndProperties(e,w);Y&&wbe(Y,r)&&A(w,C,Y,0,P,F)}),m}function G7e(e,t,r){let i=wT(t),o=Yn(e);if(!o&&Rl(t)>=5)return i?1:2;if(o)return Lc(e)||r?i?1:2:3;for(let s of e.statements)if(Nl(s)&&!rc(s.moduleReference))return 3;return i?1:3}function aQ(e,t,r,i,o,s,l){let f,d=nr.ChangeTracker.with(e,g=>{f=B7e(g,t,r,i,o,s,l)});return Ma(lQ,d,f,uQ,_.Add_all_missing_imports)}function B7e(e,t,r,i,o,s,l){let f=J_(t,l);switch(i.kind){case 0:return oQ(e,t,i),[_.Change_0_to_1,r,`${i.namespacePrefix}.${r}`];case 1:return Cbe(e,t,i,f),[_.Change_0_to_1,r,Ibe(i.moduleSpecifier,f)+r];case 2:{let{importClauseOrBindingPattern:d,importKind:g,addAsTypeOnly:m,moduleSpecifier:v}=i;Abe(e,t,d,g===1?{name:r,addAsTypeOnly:m}:void 0,g===0?[{name:r,addAsTypeOnly:m}]:Je,s,l);let S=u_(v);return o?[_.Import_0_from_1,r,S]:[_.Update_import_from_0,S]}case 3:{let{importKind:d,moduleSpecifier:g,addAsTypeOnly:m,useRequire:v,qualification:S}=i,x=v?kbe:Lbe,A=d===1?{name:r,addAsTypeOnly:m}:void 0,w=d===0?[{name:r,addAsTypeOnly:m}]:void 0,C=d===2||d===3?{importKind:d,name:S?.namespacePrefix||r,addAsTypeOnly:m}:void 0;return L7(e,t,x(g,f,A,w,C,s),!0,l),S&&oQ(e,t,S),o?[_.Import_0_from_1,r,g]:[_.Add_import_from_0,g]}case 4:{let{typeOnlyAliasDeclaration:d}=i,g=U7e(e,d,s,t,l);return g.kind===273?[_.Remove_type_from_import_of_0_from_1,r,xbe(g.parent.parent)]:[_.Remove_type_from_import_declaration_from_0,xbe(g)]}default:return L.assertNever(i,`Unexpected fix kind ${i.kind}`)}}function xbe(e){var t,r;return e.kind===268?((r=zr((t=zr(e.moduleReference,um))==null?void 0:t.expression,es))==null?void 0:r.text)||e.moduleReference.getText():Ga(e.parent.moduleSpecifier,yo).text}function U7e(e,t,r,i,o){let s=u4(r);switch(t.kind){case 273:if(t.isTypeOnly){let f=b_.detectImportSpecifierSorting(t.parent.elements,o);if(t.parent.elements.length>1&&f){e.delete(i,t);let d=D.updateImportSpecifier(t,!1,t.propertyName,t.name),g=b_.getOrganizeImportsComparer(o,f===2),m=b_.getImportSpecifierInsertionIndex(t.parent.elements,d,g);e.insertImportSpecifierAtIndex(i,d,t.parent,m)}else e.deleteRange(i,t.getFirstToken());return t}else return L.assert(t.parent.parent.isTypeOnly),l(t.parent.parent),t.parent.parent;case 270:return l(t),t;case 271:return l(t.parent),t.parent;case 268:return e.deleteRange(i,t.getChildAt(1)),t;default:L.failBadSyntaxKind(t)}function l(f){if(e.delete(i,cY(f,i)),s){let d=zr(f.namedBindings,jg);if(d&&d.elements.length>1){b_.detectImportSpecifierSorting(d.elements,o)&&t.kind===273&&d.elements.indexOf(t)!==0&&(e.delete(i,t),e.insertImportSpecifierAtIndex(i,t,d,0));for(let g of d.elements)g!==t&&!g.isTypeOnly&&e.insertModifierBefore(i,154,g)}}}}function Abe(e,t,r,i,o,s,l){var f;if(r.kind===203){i&&v(r,i.name,\"default\");for(let S of o)v(r,S.name,void 0);return}let d=r.isTypeOnly&&vt([i,...o],S=>S?.addAsTypeOnly===4),g=r.namedBindings&&((f=zr(r.namedBindings,jg))==null?void 0:f.elements),m=d&&u4(s);if(i&&(L.assert(!r.name,\"Cannot add a default import to an import clause that already has one\"),e.insertNodeAt(t,r.getStart(t),D.createIdentifier(i.name),{suffix:\", \"})),o.length){let S;if(typeof l.organizeImportsIgnoreCase==\"boolean\")S=l.organizeImportsIgnoreCase;else if(g){let C=b_.detectImportSpecifierSorting(g,l);C!==3&&(S=C===2)}S===void 0&&(S=b_.detectSorting(t,l)===2);let x=b_.getOrganizeImportsComparer(l,S),A=Ag(o.map(C=>D.createImportSpecifier((!r.isTypeOnly||d)&&aP(C),void 0,D.createIdentifier(C.name))),(C,P)=>b_.compareImportOrExportSpecifiers(C,P,x)),w=g?.length&&b_.detectImportSpecifierSorting(g,l);if(w&&!(S&&w===1))for(let C of A){let P=m&&!C.isTypeOnly?0:b_.getImportSpecifierInsertionIndex(g,C,x);e.insertImportSpecifierAtIndex(t,C,r.namedBindings,P)}else if(g?.length)for(let C of A)e.insertNodeInListAfter(t,To(g),C,g);else if(A.length){let C=D.createNamedImports(A);r.namedBindings?e.replaceNode(t,r.namedBindings,C):e.insertNodeAfter(t,L.checkDefined(r.name,\"Import clause must have either named imports or a default import\"),C)}}if(d&&(e.delete(t,cY(r,t)),m&&g))for(let S of g)e.insertModifierBefore(t,154,S);function v(S,x,A){let w=D.createBindingElement(void 0,A,x);S.elements.length?e.insertNodeInListAfter(t,To(S.elements),w):e.replaceNode(t,S,D.createObjectBindingPattern([w]))}}function oQ(e,t,{namespacePrefix:r,usagePosition:i}){e.insertText(t,i,r+\".\")}function Cbe(e,t,{moduleSpecifier:r,usagePosition:i},o){e.insertText(t,i,Ibe(r,o))}function Ibe(e,t){let r=Hhe(t);return`import(${r}${e}${r}).`}function aP({addAsTypeOnly:e}){return e===2}function Lbe(e,t,r,i,o,s){let l=S7(e,t),f;if(r!==void 0||i?.length){let d=(!r||aP(r))&&Ji(i,aP)||s.verbatimModuleSyntax&&r?.addAsTypeOnly!==4&&!vt(i,g=>g.addAsTypeOnly===4);f=_A(f,Xg(r&&D.createIdentifier(r.name),i?.map(({addAsTypeOnly:g,name:m})=>D.createImportSpecifier(!d&&g===2,void 0,D.createIdentifier(m))),e,t,d))}if(o){let d=o.importKind===3?D.createImportEqualsDeclaration(void 0,aP(o),D.createIdentifier(o.name),D.createExternalModuleReference(l)):D.createImportDeclaration(void 0,D.createImportClause(aP(o),void 0,D.createNamespaceImport(D.createIdentifier(o.name))),l,void 0);f=_A(f,d)}return L.checkDefined(f)}function kbe(e,t,r,i,o){let s=S7(e,t),l;if(r||i?.length){let f=i?.map(({name:g})=>D.createBindingElement(void 0,void 0,g))||[];r&&f.unshift(D.createBindingElement(void 0,\"default\",r.name));let d=Dbe(D.createObjectBindingPattern(f),s);l=_A(l,d)}if(o){let f=Dbe(o.name,s);l=_A(l,f)}return L.checkDefined(l)}function Dbe(e,t){return D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(typeof e==\"string\"?D.createIdentifier(e):e,void 0,void 0,D.createCallExpression(D.createIdentifier(\"require\"),void 0,[t]))],2))}function wbe({declarations:e},t){return vt(e,r=>!!(LN(r)&t))}function sQ(e,t,r){return cQ(ld(u_(e.name)),t,r)}function cQ(e,t,r){let i=Hl(pA(e,\"/index\")),o=\"\",s=!0,l=i.charCodeAt(0);Pm(l,t)?(o+=String.fromCharCode(l),r&&(o=o.toUpperCase())):s=!1;for(let f=1;f<i.length;f++){let d=i.charCodeAt(f),g=tb(d,t);if(g){let m=String.fromCharCode(d);s||(m=m.toUpperCase()),o+=m}s=g}return fS(o)?`_${o}`:o||\"_\"}var lQ,uQ,dQ,V7e=gt({\"src/services/codefixes/importFixes.ts\"(){\"use strict\";Fr(),Qa(),lQ=\"import\",uQ=\"fixMissingImport\",dQ=[_.Cannot_find_name_0.code,_.Cannot_find_name_0_Did_you_mean_1.code,_.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,_.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,_.Cannot_find_namespace_0.code,_._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code,_._0_only_refers_to_a_type_but_is_being_used_as_a_value_here.code,_.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code,_._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type.code],za({errorCodes:dQ,getCodeActions(e){let{errorCode:t,preferences:r,sourceFile:i,span:o,program:s}=e,l=vbe(e,t,o.start,!0);if(l)return l.map(({fix:f,symbolName:d,errorIdentifierText:g})=>aQ(e,i,d,f,d!==g,s.getCompilerOptions(),r))},fixIds:[uQ],getAllCodeActions:e=>{let{sourceFile:t,program:r,preferences:i,host:o,cancellationToken:s}=e,l=_be(t,r,!0,i,o,s);return ax(e,dQ,f=>l.addImportFromDiagnostic(f,e)),ix(nr.ChangeTracker.with(e,l.writeFixes))}})}});function Rbe(e,t,r){let i=wr(e.getSemanticDiagnostics(t),l=>l.start===r.start&&l.length===r.length);if(i===void 0||i.relatedInformation===void 0)return;let o=wr(i.relatedInformation,l=>l.code===_.This_type_parameter_might_need_an_extends_0_constraint.code);if(o===void 0||o.file===void 0||o.start===void 0||o.length===void 0)return;let s=_Z(o.file,il(o.start,o.length));if(s!==void 0&&(Re(s)&&_c(s.parent)&&(s=s.parent),_c(s))){if(EL(s.parent))return;let l=Vi(t,r.start),f=e.getTypeChecker();return{constraint:H7e(f,l)||j7e(o.messageText),declaration:s,token:l}}}function Obe(e,t,r,i,o,s){let{declaration:l,constraint:f}=s,d=t.getTypeChecker();if(Ta(f))e.insertText(o,l.name.end,` extends ${f}`);else{let g=Do(t.getCompilerOptions()),m=sx({program:t,host:i}),v=s1(o,t,r,i),S=N9(d,v,f,void 0,g,void 0,m);S&&(e.replaceNode(o,l,D.updateTypeParameterDeclaration(l,void 0,l.name,S,l.default)),v.writeFixes(e))}}function j7e(e){let[t,r]=sv(e,`\n`,0).match(/`extends (.*)`/)||[];return r}function H7e(e,t){return bi(t.parent)?e.getTypeArgumentConstraint(t.parent):(ot(t)?e.getContextualType(t):void 0)||e.getTypeAtLocation(t)}var Q5,fQ,W7e=gt({\"src/services/codefixes/fixAddMissingConstraint.ts\"(){\"use strict\";Fr(),Qa(),Q5=\"addMissingConstraint\",fQ=[_.Type_0_is_not_comparable_to_type_1.code,_.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code,_.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code,_.Type_0_is_not_assignable_to_type_1.code,_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code,_.Property_0_is_incompatible_with_index_signature.code,_.Property_0_in_type_1_is_not_assignable_to_type_2.code,_.Type_0_does_not_satisfy_the_constraint_1.code],za({errorCodes:fQ,getCodeActions(e){let{sourceFile:t,span:r,program:i,preferences:o,host:s}=e,l=Rbe(i,t,r);if(l===void 0)return;let f=nr.ChangeTracker.with(e,d=>Obe(d,i,o,s,t,l));return[Ma(Q5,f,_.Add_extends_constraint,Q5,_.Add_extends_constraint_to_all_type_parameters)]},fixIds:[Q5],getAllCodeActions:e=>{let{program:t,preferences:r,host:i}=e,o=new Map;return ix(nr.ChangeTracker.with(e,s=>{ax(e,fQ,l=>{let f=Rbe(t,l.file,il(l.start,l.length));if(f&&V_(o,zo(f.declaration)))return Obe(s,t,r,i,l.file,f)})}))}})}});function Nbe(e,t,r,i){switch(r){case _.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code:case _.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code:case _.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code:case _.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code:case _.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code:return z7e(e,t.sourceFile,i);case _.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code:case _.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code:case _.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code:case _.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code:return J7e(e,t.sourceFile,i);default:L.fail(\"Unexpected error code: \"+r)}}function z7e(e,t,r){let i=Mbe(t,r);if(Cu(t)){e.addJSDocTags(t,i,[D.createJSDocOverrideTag(D.createIdentifier(\"override\"))]);return}let o=i.modifiers||Je,s=wr(o,LS),l=wr(o,Rue),f=wr(o,v=>ZX(v.kind)),d=dA(o,du),g=l?l.end:s?s.end:f?f.end:d?xo(t.text,d.end):i.getStart(t),m=f||s||l?{prefix:\" \"}:{suffix:\" \"};e.insertModifierAt(t,g,161,m)}function J7e(e,t,r){let i=Mbe(t,r);if(Cu(t)){e.filterJSDocTags(t,i,y8(g3));return}let o=wr(i.modifiers,Oue);L.assertIsDefined(o),e.deleteModifier(t,o)}function Pbe(e){switch(e.kind){case 173:case 169:case 171:case 174:case 175:return!0;case 166:return Ad(e,e.parent);default:return!1}}function Mbe(e,t){let r=Vi(e,t),i=jn(r,o=>Yr(o)?\"quit\":Pbe(o));return L.assert(i&&Pbe(i)),i}var _Q,Z2,yk,pQ,mQ,K7e=gt({\"src/services/codefixes/fixOverrideModifier.ts\"(){\"use strict\";Fr(),Qa(),_Q=\"fixOverrideModifier\",Z2=\"fixAddOverrideModifier\",yk=\"fixRemoveOverrideModifier\",pQ=[_.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code,_.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code,_.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code,_.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code,_.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code,_.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code,_.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code,_.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code,_.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code],mQ={[_.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code]:{descriptions:_.Add_override_modifier,fixId:Z2,fixAllDescriptions:_.Add_all_missing_override_modifiers},[_.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]:{descriptions:_.Add_override_modifier,fixId:Z2,fixAllDescriptions:_.Add_all_missing_override_modifiers},[_.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code]:{descriptions:_.Remove_override_modifier,fixId:yk,fixAllDescriptions:_.Remove_all_unnecessary_override_modifiers},[_.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code]:{descriptions:_.Remove_override_modifier,fixId:yk,fixAllDescriptions:_.Remove_override_modifier},[_.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code]:{descriptions:_.Add_override_modifier,fixId:Z2,fixAllDescriptions:_.Add_all_missing_override_modifiers},[_.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]:{descriptions:_.Add_override_modifier,fixId:Z2,fixAllDescriptions:_.Add_all_missing_override_modifiers},[_.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code]:{descriptions:_.Add_override_modifier,fixId:Z2,fixAllDescriptions:_.Remove_all_unnecessary_override_modifiers},[_.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code]:{descriptions:_.Remove_override_modifier,fixId:yk,fixAllDescriptions:_.Remove_all_unnecessary_override_modifiers},[_.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code]:{descriptions:_.Remove_override_modifier,fixId:yk,fixAllDescriptions:_.Remove_all_unnecessary_override_modifiers}},za({errorCodes:pQ,getCodeActions:function(t){let{errorCode:r,span:i}=t,o=mQ[r];if(!o)return Je;let{descriptions:s,fixId:l,fixAllDescriptions:f}=o,d=nr.ChangeTracker.with(t,g=>Nbe(g,t,r,i.start));return[D$(_Q,d,s,l,f)]},fixIds:[_Q,Z2,yk],getAllCodeActions:e=>ns(e,pQ,(t,r)=>{let{code:i,start:o}=r,s=mQ[i];!s||s.fixId!==e.fixId||Nbe(t,e,i,o)})})}});function Fbe(e,t,r,i){let o=J_(t,i),s=D.createStringLiteral(r.name.text,o===0);e.replaceNode(t,r,n6(r)?D.createElementAccessChain(r.expression,r.questionDotToken,s):D.createElementAccessExpression(r.expression,s))}function Gbe(e,t){return Ga(Vi(e,t).parent,br)}var Z5,hQ,q7e=gt({\"src/services/codefixes/fixNoPropertyAccessFromIndexSignature.ts\"(){\"use strict\";Fr(),Qa(),Z5=\"fixNoPropertyAccessFromIndexSignature\",hQ=[_.Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0.code],za({errorCodes:hQ,fixIds:[Z5],getCodeActions(e){let{sourceFile:t,span:r,preferences:i}=e,o=Gbe(t,r.start),s=nr.ChangeTracker.with(e,l=>Fbe(l,e.sourceFile,o,i));return[Ma(Z5,s,[_.Use_element_access_for_0,o.name.text],Z5,_.Use_element_access_for_all_undeclared_properties)]},getAllCodeActions:e=>ns(e,hQ,(t,r)=>Fbe(t,r.file,Gbe(r.file,r.start),e.preferences))})}});function Bbe(e,t,r,i){let o=Vi(t,r);if(!H2(o))return;let s=Ku(o,!1,!1);if(!(!Jc(s)&&!ms(s))&&!Li(Ku(s,!1,!1))){let l=L.checkDefined(Yo(s,98,t)),{name:f}=s,d=L.checkDefined(s.body);return ms(s)?f&&js.Core.isSymbolReferencedInFile(f,i,t,d)?void 0:(e.delete(t,l),f&&e.delete(t,f),e.insertText(t,d.pos,\" =>\"),[_.Convert_function_expression_0_to_arrow_function,f?f.text:X7]):(e.replaceNode(t,l,D.createToken(85)),e.insertText(t,f.end,\" = \"),e.insertText(t,d.pos,\" =>\"),[_.Convert_function_declaration_0_to_arrow_function,f.text])}}var e9,gQ,X7e=gt({\"src/services/codefixes/fixImplicitThis.ts\"(){\"use strict\";Fr(),Qa(),e9=\"fixImplicitThis\",gQ=[_.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code],za({errorCodes:gQ,getCodeActions:function(t){let{sourceFile:r,program:i,span:o}=t,s,l=nr.ChangeTracker.with(t,f=>{s=Bbe(f,r,o.start,i.getTypeChecker())});return s?[Ma(e9,l,s,e9,_.Fix_all_implicit_this_errors)]:Je},fixIds:[e9],getAllCodeActions:e=>ns(e,gQ,(t,r)=>{Bbe(t,r.file,r.start,e.program.getTypeChecker())})})}});function Ube(e,t,r){var i;let o=Vi(e,t);if(Re(o)){let s=jn(o,gl);if(s===void 0)return;let l=yo(s.moduleSpecifier)?s.moduleSpecifier.text:void 0;if(l===void 0)return;let f=kA(e,l,void 0);if(f===void 0)return;let d=r.getSourceFile(f.resolvedFileName);if(d===void 0||dk(r,d))return;let g=d.symbol,m=(i=zr(g.valueDeclaration,Qp))==null?void 0:i.locals;if(m===void 0)return;let v=m.get(o.escapedText);if(v===void 0)return;let S=$7e(v);return S===void 0?void 0:{exportName:{node:o,isTypeOnly:o2(S)},node:S,moduleSourceFile:d,moduleSpecifier:l}}}function Y7e(e,t,{exportName:r,node:i,moduleSourceFile:o}){let s=t9(o,r.isTypeOnly);s?Vbe(e,t,o,s,[r]):WR(i)?e.insertExportModifier(o,i):jbe(e,t,o,[r])}function yQ(e,t,r,i,o){Fn(i)&&(o?Vbe(e,t,r,o,i):jbe(e,t,r,i))}function t9(e,t){let r=i=>Il(i)&&(t&&i.isTypeOnly||!i.isTypeOnly);return dA(e.statements,r)}function Vbe(e,t,r,i,o){let s=i.exportClause&&h_(i.exportClause)?i.exportClause.elements:D.createNodeArray([]),l=!i.isTypeOnly&&!!(d_(t.getCompilerOptions())||wr(s,f=>f.isTypeOnly));e.replaceNode(r,i,D.updateExportDeclaration(i,i.modifiers,i.isTypeOnly,D.createNamedExports(D.createNodeArray([...s,...Hbe(o,l)],s.hasTrailingComma)),i.moduleSpecifier,i.assertClause))}function jbe(e,t,r,i){e.insertNodeAtEndOfScope(r,r,D.createExportDeclaration(void 0,!1,D.createNamedExports(Hbe(i,d_(t.getCompilerOptions()))),void 0,void 0))}function Hbe(e,t){return D.createNodeArray(on(e,r=>D.createExportSpecifier(t&&r.isTypeOnly,void 0,r.node)))}function $7e(e){if(e.valueDeclaration===void 0)return Sl(e.declarations);let t=e.valueDeclaration,r=wi(t)?zr(t.parent.parent,Bc):void 0;return r&&Fn(r.declarationList.declarations)===1?r:t}var n9,vQ,Q7e=gt({\"src/services/codefixes/fixImportNonExportedMember.ts\"(){\"use strict\";Fr(),Qa(),n9=\"fixImportNonExportedMember\",vQ=[_.Module_0_declares_1_locally_but_it_is_not_exported.code],za({errorCodes:vQ,fixIds:[n9],getCodeActions(e){let{sourceFile:t,span:r,program:i}=e,o=Ube(t,r.start,i);if(o===void 0)return;let s=nr.ChangeTracker.with(e,l=>Y7e(l,i,o));return[Ma(n9,s,[_.Export_0_from_module_1,o.exportName.node.text,o.moduleSpecifier],n9,_.Export_all_referenced_locals)]},getAllCodeActions(e){let{program:t}=e;return ix(nr.ChangeTracker.with(e,r=>{let i=new Map;ax(e,vQ,o=>{let s=Ube(o.file,o.start,t);if(s===void 0)return;let{exportName:l,node:f,moduleSourceFile:d}=s;if(t9(d,l.isTypeOnly)===void 0&&WR(f))r.insertExportModifier(d,f);else{let g=i.get(d)||{typeOnlyExports:[],exports:[]};l.isTypeOnly?g.typeOnlyExports.push(l):g.exports.push(l),i.set(d,g)}}),i.forEach((o,s)=>{let l=t9(s,!0);l&&l.isTypeOnly?(yQ(r,t,s,o.typeOnlyExports,l),yQ(r,t,s,o.exports,t9(s,!1))):yQ(r,t,s,[...o.exports,...o.typeOnlyExports],l)})}))}})}});function Z7e(e,t){let r=Vi(e,t);return jn(r,i=>i.kind===199)}function e5e(e,t,r){if(!r)return;let i=r.type,o=!1,s=!1;for(;i.kind===187||i.kind===188||i.kind===193;)i.kind===187?o=!0:i.kind===188&&(s=!0),i=i.type;let l=D.updateNamedTupleMember(r,r.dotDotDotToken||(s?D.createToken(25):void 0),r.name,r.questionToken||(o?D.createToken(57):void 0),i);l!==r&&e.replaceNode(t,r,l)}var r9,Wbe,t5e=gt({\"src/services/codefixes/fixIncorrectNamedTupleSyntax.ts\"(){\"use strict\";Fr(),Qa(),r9=\"fixIncorrectNamedTupleSyntax\",Wbe=[_.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type.code,_.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type.code],za({errorCodes:Wbe,getCodeActions:function(t){let{sourceFile:r,span:i}=t,o=Z7e(r,i.start),s=nr.ChangeTracker.with(t,l=>e5e(l,r,o));return[Ma(r9,s,_.Move_labeled_tuple_element_modifiers_to_labels,r9,_.Move_labeled_tuple_element_modifiers_to_labels)]},fixIds:[r9]})}});function zbe(e,t,r,i){let o=Vi(e,t),s=o.parent;if((i===_.No_overload_matches_this_call.code||i===_.Type_0_is_not_assignable_to_type_1.code)&&!Sp(s))return;let l=r.program.getTypeChecker(),f;if(br(s)&&s.name===o){L.assert(Ah(o),\"Expected an identifier for spelling (property access)\");let d=l.getTypeAtLocation(s.expression);s.flags&32&&(d=l.getNonNullableType(d)),f=l.getSuggestedSymbolForNonexistentProperty(o,d)}else if(ar(s)&&s.operatorToken.kind===101&&s.left===o&&pi(o)){let d=l.getTypeAtLocation(s.right);f=l.getSuggestedSymbolForNonexistentProperty(o,d)}else if(Yu(s)&&s.right===o){let d=l.getSymbolAtLocation(s.left);d&&d.flags&1536&&(f=l.getSuggestedSymbolForNonexistentModule(s.right,d))}else if($u(s)&&s.name===o){L.assertNode(o,Re,\"Expected an identifier for spelling (import)\");let d=jn(o,gl),g=r5e(e,r,d);g&&g.symbol&&(f=l.getSuggestedSymbolForNonexistentModule(o,g.symbol))}else if(Sp(s)&&s.name===o){L.assertNode(o,Re,\"Expected an identifier for JSX attribute\");let d=jn(o,Au),g=l.getContextualTypeForArgumentAtIndex(d,0);f=l.getSuggestedSymbolForNonexistentJSXAttribute(o,g)}else if(Mr(s,16384)&&_l(s)&&s.name===o){let d=jn(o,Yr),g=d?hp(d):void 0,m=g?l.getTypeAtLocation(g):void 0;m&&(f=l.getSuggestedSymbolForNonexistentClassMember(Qc(o),m))}else{let d=ZT(o),g=Qc(o);L.assert(g!==void 0,\"name should be defined\"),f=l.getSuggestedSymbolForNonexistentSymbol(o,g,n5e(d))}return f===void 0?void 0:{node:o,suggestedSymbol:f}}function Jbe(e,t,r,i,o){let s=fc(i);if(!i_(s,o)&&br(r.parent)){let l=i.valueDeclaration;l&&zl(l)&&pi(l.name)?e.replaceNode(t,r,D.createIdentifier(s)):e.replaceNode(t,r.parent,D.createElementAccessExpression(r.parent.expression,D.createStringLiteral(s)))}else e.replaceNode(t,r,D.createIdentifier(s))}function n5e(e){let t=0;return e&4&&(t|=1920),e&2&&(t|=788968),e&1&&(t|=111551),t}function r5e(e,t,r){if(!r||!es(r.moduleSpecifier))return;let i=kA(e,r.moduleSpecifier.text,W_(e,r.moduleSpecifier));if(i)return t.program.getSourceFile(i.resolvedFileName)}var bQ,EQ,i5e=gt({\"src/services/codefixes/fixSpelling.ts\"(){\"use strict\";Fr(),Qa(),bQ=\"fixSpelling\",EQ=[_.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code,_.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code,_.Cannot_find_name_0_Did_you_mean_1.code,_.Could_not_find_name_0_Did_you_mean_1.code,_.Cannot_find_namespace_0_Did_you_mean_1.code,_.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,_.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,_._0_has_no_exported_member_named_1_Did_you_mean_2.code,_.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code,_.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code,_.No_overload_matches_this_call.code,_.Type_0_is_not_assignable_to_type_1.code],za({errorCodes:EQ,getCodeActions(e){let{sourceFile:t,errorCode:r}=e,i=zbe(t,e.span.start,e,r);if(!i)return;let{node:o,suggestedSymbol:s}=i,l=Do(e.host.getCompilationSettings()),f=nr.ChangeTracker.with(e,d=>Jbe(d,t,o,s,l));return[Ma(\"spelling\",f,[_.Change_spelling_to_0,fc(s)],bQ,_.Fix_all_detected_spelling_errors)]},fixIds:[bQ],getAllCodeActions:e=>ns(e,EQ,(t,r)=>{let i=zbe(r.file,r.start,e,r.code),o=Do(e.host.getCompilationSettings());i&&Jbe(t,e.sourceFile,i.node,i.suggestedSymbol,o)})})}});function Kbe(e,t,r){let i=e.createSymbol(4,t.escapedText);i.links.type=e.getTypeAtLocation(r);let o=Ua([i]);return e.createAnonymousType(void 0,o,[],[],[])}function TQ(e,t,r,i){if(!t.body||!Va(t.body)||Fn(t.body.statements)!==1)return;let o=Vo(t.body.statements);if(Ol(o)&&SQ(e,t,e.getTypeAtLocation(o.expression),r,i))return{declaration:t,kind:0,expression:o.expression,statement:o,commentSource:o.expression};if(J0(o)&&Ol(o.statement)){let s=D.createObjectLiteralExpression([D.createPropertyAssignment(o.label,o.statement.expression)]),l=Kbe(e,o.label,o.statement.expression);if(SQ(e,t,l,r,i))return xs(t)?{declaration:t,kind:1,expression:s,statement:o,commentSource:o.statement.expression}:{declaration:t,kind:0,expression:s,statement:o,commentSource:o.statement.expression}}else if(Va(o)&&Fn(o.statements)===1){let s=Vo(o.statements);if(J0(s)&&Ol(s.statement)){let l=D.createObjectLiteralExpression([D.createPropertyAssignment(s.label,s.statement.expression)]),f=Kbe(e,s.label,s.statement.expression);if(SQ(e,t,f,r,i))return{declaration:t,kind:0,expression:l,statement:o,commentSource:s}}}}function SQ(e,t,r,i,o){if(o){let s=e.getSignatureFromDeclaration(t);if(s){Mr(t,512)&&(r=e.createPromiseType(r));let l=e.createSignature(t,s.typeParameters,s.thisParameter,s.parameters,r,void 0,s.minArgumentCount,s.flags);r=e.createAnonymousType(void 0,Ua(),[l],[],[])}else r=e.getAnyType()}return e.isTypeAssignableTo(r,i)}function qbe(e,t,r,i){let o=Vi(t,r);if(!o.parent)return;let s=jn(o.parent,Ds);switch(i){case _.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value.code:return!s||!s.body||!s.type||!Od(s.type,o)?void 0:TQ(e,s,e.getTypeFromTypeNode(s.type),!1);case _.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code:if(!s||!Pa(s.parent)||!s.body)return;let l=s.parent.arguments.indexOf(s),f=e.getContextualTypeForArgumentAtIndex(s.parent,l);return f?TQ(e,s,f,!0):void 0;case _.Type_0_is_not_assignable_to_type_1.code:if(!Rh(o)||!PA(o.parent)&&!Sp(o.parent))return;let d=a5e(o.parent);return!d||!Ds(d)||!d.body?void 0:TQ(e,d,e.getTypeAtLocation(o.parent),!0)}}function a5e(e){switch(e.kind){case 257:case 166:case 205:case 169:case 299:return e.initializer;case 288:return e.initializer&&(AL(e.initializer)?e.initializer.expression:void 0);case 300:case 168:case 302:case 351:case 344:return}}function Xbe(e,t,r,i){pd(r);let o=P7(t);e.replaceNode(t,i,D.createReturnStatement(r),{leadingTriviaOption:nr.LeadingTriviaOption.Exclude,trailingTriviaOption:nr.TrailingTriviaOption.Exclude,suffix:o?\";\":void 0})}function Ybe(e,t,r,i,o,s){let l=s||bY(i)?D.createParenthesizedExpression(i):i;pd(o),r1(o,l),e.replaceNode(t,r.body,l)}function $be(e,t,r,i){e.replaceNode(t,r.body,D.createParenthesizedExpression(i))}function o5e(e,t,r){let i=nr.ChangeTracker.with(e,o=>Xbe(o,e.sourceFile,t,r));return Ma(i9,i,_.Add_a_return_statement,a9,_.Add_all_missing_return_statement)}function s5e(e,t,r,i){let o=nr.ChangeTracker.with(e,s=>Ybe(s,e.sourceFile,t,r,i,!1));return Ma(i9,o,_.Remove_braces_from_arrow_function_body,o9,_.Remove_braces_from_all_arrow_function_bodies_with_relevant_issues)}function c5e(e,t,r){let i=nr.ChangeTracker.with(e,o=>$be(o,e.sourceFile,t,r));return Ma(i9,i,_.Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal,s9,_.Wrap_all_object_literal_with_parentheses)}var i9,a9,o9,s9,xQ,l5e=gt({\"src/services/codefixes/returnValueCorrect.ts\"(){\"use strict\";Fr(),Qa(),i9=\"returnValueCorrect\",a9=\"fixAddReturnStatement\",o9=\"fixRemoveBracesFromArrowFunctionBody\",s9=\"fixWrapTheBlockWithParen\",xQ=[_.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value.code,_.Type_0_is_not_assignable_to_type_1.code,_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code],za({errorCodes:xQ,fixIds:[a9,o9,s9],getCodeActions:function(t){let{program:r,sourceFile:i,span:{start:o},errorCode:s}=t,l=qbe(r.getTypeChecker(),i,o,s);if(l)return l.kind===0?Sn([o5e(t,l.expression,l.statement)],xs(l.declaration)?s5e(t,l.declaration,l.expression,l.commentSource):void 0):[c5e(t,l.declaration,l.expression)]},getAllCodeActions:e=>ns(e,xQ,(t,r)=>{let i=qbe(e.program.getTypeChecker(),r.file,r.start,r.code);if(i)switch(e.fixId){case a9:Xbe(t,r.file,i.expression,i.statement);break;case o9:if(!xs(i.declaration))return;Ybe(t,r.file,i.declaration,i.expression,i.commentSource,!1);break;case s9:if(!xs(i.declaration))return;$be(t,r.file,i.declaration,i.expression);break;default:L.fail(JSON.stringify(e.fixId))}})})}});function Qbe(e,t,r,i,o){var s;let l=Vi(e,t),f=l.parent;if(r===_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code){if(!(l.kind===18&&rs(f)&&Pa(f.parent)))return;let x=Yc(f.parent.arguments,P=>P===f);if(x<0)return;let A=i.getResolvedSignature(f.parent);if(!(A&&A.declaration&&A.parameters[x]))return;let w=A.parameters[x].valueDeclaration;if(!(w&&ha(w)&&Re(w.name)))return;let C=lo(i.getUnmatchedProperties(i.getTypeAtLocation(f),i.getParameterType(A,x),!1,!1));return Fn(C)?{kind:3,token:w.name,properties:C,parentDeclaration:f}:void 0}if(!Ah(l))return;if(Re(l)&&Jy(f)&&f.initializer&&rs(f.initializer)){let x=lo(i.getUnmatchedProperties(i.getTypeAtLocation(f.initializer),i.getTypeAtLocation(l),!1,!1));return Fn(x)?{kind:3,token:l,properties:x,parentDeclaration:f.initializer}:void 0}if(Re(l)&&Au(l.parent)){let x=Do(o.getCompilerOptions()),A=h5e(i,x,l.parent);return Fn(A)?{kind:4,token:l,attributes:A,parentDeclaration:l.parent}:void 0}if(Re(l)){let x=(s=i.getContextualType(l))==null?void 0:s.getNonNullableType();if(x&&Ur(x)&16){let A=Sl(i.getSignaturesOfType(x,0));return A===void 0?void 0:{kind:5,token:l,signature:A,sourceFile:e,parentDeclaration:l0e(l)}}if(Pa(f)&&f.expression===l)return{kind:2,token:l,call:f,sourceFile:e,modifierFlags:0,parentDeclaration:l0e(l)}}if(!br(f))return;let d=iY(i.getTypeAtLocation(f.expression)),g=d.symbol;if(!g||!g.declarations)return;if(Re(l)&&Pa(f.parent)){let x=wr(g.declarations,Tc),A=x?.getSourceFile();if(x&&A&&!dk(o,A))return{kind:2,token:l,call:f.parent,sourceFile:e,modifierFlags:1,parentDeclaration:x};let w=wr(g.declarations,Li);if(e.commonJsModuleIndicator)return;if(w&&!dk(o,w))return{kind:2,token:l,call:f.parent,sourceFile:w,modifierFlags:1,parentDeclaration:w}}let m=wr(g.declarations,Yr);if(!m&&pi(l))return;let v=m||wr(g.declarations,x=>ku(x)||Rd(x));if(v&&!dk(o,v.getSourceFile())){let x=!Rd(v)&&(d.target||d)!==i.getDeclaredTypeOfSymbol(g);if(x&&(pi(l)||ku(v)))return;let A=v.getSourceFile(),w=Rd(v)?0:(x?32:0)|(DY(l.text)?8:0),C=Cu(A),P=zr(f.parent,Pa);return{kind:0,token:l,call:P,modifierFlags:w,parentDeclaration:v,declSourceFile:A,isJSFile:C}}let S=wr(g.declarations,hb);if(S&&!(d.flags&1056)&&!pi(l)&&!dk(o,S.getSourceFile()))return{kind:1,token:l,parentDeclaration:S}}function u5e(e,t){return t.isJSFile?aT(d5e(e,t)):f5e(e,t)}function d5e(e,{parentDeclaration:t,declSourceFile:r,modifierFlags:i,token:o}){if(ku(t)||Rd(t))return;let s=nr.ChangeTracker.with(e,f=>Zbe(f,r,t,o,!!(i&32)));if(s.length===0)return;let l=i&32?_.Initialize_static_property_0:pi(o)?_.Declare_a_private_field_named_0:_.Initialize_property_0_in_the_constructor;return Ma(Yg,s,[l,o.text],Yg,_.Add_all_missing_members)}function Zbe(e,t,r,i,o){let s=i.text;if(o){if(r.kind===228)return;let l=r.name.getText(),f=e0e(D.createIdentifier(l),s);e.insertNodeAfter(t,r,f)}else if(pi(i)){let l=D.createPropertyDeclaration(void 0,s,void 0,void 0,void 0),f=r0e(r);f?e.insertNodeAfter(t,f,l):e.insertMemberAtStart(t,r,l)}else{let l=Vm(r);if(!l)return;let f=e0e(D.createThis(),s);e.insertNodeAtConstructorEnd(t,l,f)}}function e0e(e,t){return D.createExpressionStatement(D.createAssignment(D.createPropertyAccessExpression(e,t),c1()))}function f5e(e,{parentDeclaration:t,declSourceFile:r,modifierFlags:i,token:o}){let s=o.text,l=i&32,f=t0e(e.program.getTypeChecker(),t,o),d=m=>nr.ChangeTracker.with(e,v=>n0e(v,r,t,s,f,m)),g=[Ma(Yg,d(i&32),[l?_.Declare_static_property_0:_.Declare_property_0,s],Yg,_.Add_all_missing_members)];return l||pi(o)||(i&8&&g.unshift(K_(Yg,d(8),[_.Declare_private_property_0,s])),g.push(_5e(e,r,t,o.text,f))),g}function t0e(e,t,r){let i;if(r.parent.parent.kind===223){let o=r.parent.parent,s=r.parent===o.left?o.right:o.left,l=e.getWidenedType(e.getBaseTypeOfLiteralType(e.getTypeAtLocation(s)));i=e.typeToTypeNode(l,t,1)}else{let o=e.getContextualType(r.parent);i=o?e.typeToTypeNode(o,void 0,1):void 0}return i||D.createKeywordTypeNode(131)}function n0e(e,t,r,i,o,s){let l=s?D.createNodeArray(D.createModifiersFromModifierFlags(s)):void 0,f=Yr(r)?D.createPropertyDeclaration(l,i,void 0,o,void 0):D.createPropertySignature(void 0,i,void 0,o),d=r0e(r);d?e.insertNodeAfter(t,d,f):e.insertMemberAtStart(t,r,f)}function r0e(e){let t;for(let r of e.members){if(!Na(r))break;t=r}return t}function _5e(e,t,r,i,o){let s=D.createKeywordTypeNode(152),l=D.createParameterDeclaration(void 0,void 0,\"x\",void 0,s,void 0),f=D.createIndexSignature(void 0,[l],o),d=nr.ChangeTracker.with(e,g=>g.insertMemberAtStart(t,r,f));return K_(Yg,d,[_.Add_index_signature_for_property_0,i])}function p5e(e,t){let{parentDeclaration:r,declSourceFile:i,modifierFlags:o,token:s,call:l}=t;if(l===void 0||pi(s))return;let f=s.text,d=m=>nr.ChangeTracker.with(e,v=>i0e(e,v,l,s,m,r,i)),g=[Ma(Yg,d(o&32),[o&32?_.Declare_static_method_0:_.Declare_method_0,f],Yg,_.Add_all_missing_members)];return o&8&&g.unshift(K_(Yg,d(8),[_.Declare_private_method_0,f])),g}function i0e(e,t,r,i,o,s,l){let f=s1(l,e.program,e.preferences,e.host),d=Yr(s)?171:170,g=sZ(d,e,f,r,i,o,s),m=g5e(s,r);m?t.insertNodeAfter(l,m,g):t.insertMemberAtStart(l,s,g),f.writeFixes(t)}function a0e(e,t,{token:r,parentDeclaration:i}){let o=vt(i.members,l=>{let f=t.getTypeAtLocation(l);return!!(f&&f.flags&402653316)}),s=D.createEnumMember(r,o?D.createStringLiteral(r.text):void 0);e.replaceNode(i.getSourceFile(),i,D.updateEnumDeclaration(i,i.modifiers,i.name,Qi(i.members,aT(s))),{leadingTriviaOption:nr.LeadingTriviaOption.IncludeAll,trailingTriviaOption:nr.TrailingTriviaOption.Exclude})}function o0e(e,t,r){let i=J_(t.sourceFile,t.preferences),o=s1(t.sourceFile,t.program,t.preferences,t.host),s=r.kind===2?sZ(259,t,o,r.call,vr(r.token),r.modifierFlags,r.parentDeclaration):O9(259,t,i,r.signature,fP(_.Function_not_implemented.message,i),r.token,void 0,void 0,void 0,o);s===void 0&&L.fail(\"fixMissingFunctionDeclaration codefix got unexpected error.\"),j_(r.parentDeclaration)?e.insertNodeBefore(r.sourceFile,r.parentDeclaration,s,!0):e.insertNodeAtEndOfScope(r.sourceFile,r.parentDeclaration,s),o.writeFixes(e)}function s0e(e,t,r){let i=s1(t.sourceFile,t.program,t.preferences,t.host),o=J_(t.sourceFile,t.preferences),s=t.program.getTypeChecker(),l=r.parentDeclaration.attributes,f=vt(l.properties,GT),d=on(r.attributes,v=>{let S=c9(t,s,i,o,s.getTypeOfSymbol(v),r.parentDeclaration),x=D.createIdentifier(v.name),A=D.createJsxAttribute(x,D.createJsxExpression(void 0,S));return go(x,A),A}),g=D.createJsxAttributes(f?[...d,...l.properties]:[...l.properties,...d]),m={prefix:l.pos===l.end?\" \":void 0};e.replaceNode(t.sourceFile,l,g,m),i.writeFixes(e)}function c0e(e,t,r){let i=s1(t.sourceFile,t.program,t.preferences,t.host),o=J_(t.sourceFile,t.preferences),s=Do(t.program.getCompilerOptions()),l=t.program.getTypeChecker(),f=on(r.properties,g=>{let m=c9(t,l,i,o,l.getTypeOfSymbol(g),r.parentDeclaration);return D.createPropertyAssignment(y5e(g,s,o,l),m)}),d={leadingTriviaOption:nr.LeadingTriviaOption.Exclude,trailingTriviaOption:nr.TrailingTriviaOption.Exclude,indentation:r.indentation};e.replaceNode(t.sourceFile,r.parentDeclaration,D.createObjectLiteralExpression([...r.parentDeclaration.properties,...f],!0),d),i.writeFixes(e)}function c9(e,t,r,i,o,s){if(o.flags&3)return c1();if(o.flags&134217732)return D.createStringLiteral(\"\",i===0);if(o.flags&8)return D.createNumericLiteral(0);if(o.flags&64)return D.createBigIntLiteral(\"0n\");if(o.flags&16)return D.createFalse();if(o.flags&1056){let l=o.symbol.exports?u8(o.symbol.exports.values()):o.symbol,f=t.symbolToExpression(o.symbol.parent?o.symbol.parent:o.symbol,111551,void 0,void 0);return l===void 0||f===void 0?D.createNumericLiteral(0):D.createPropertyAccessExpression(f,t.symbolToString(l))}if(o.flags&256)return D.createNumericLiteral(o.value);if(o.flags&2048)return D.createBigIntLiteral(o.value);if(o.flags&128)return D.createStringLiteral(o.value,i===0);if(o.flags&512)return o===t.getFalseType()||o===t.getFalseType(!0)?D.createFalse():D.createTrue();if(o.flags&65536)return D.createNull();if(o.flags&1048576){let l=ks(o.types,f=>c9(e,t,r,i,f,s));return l??c1()}if(t.isArrayLikeType(o))return D.createArrayLiteralExpression();if(m5e(o)){let l=on(t.getPropertiesOfType(o),f=>{let d=c9(e,t,r,i,t.getTypeOfSymbol(f),s);return D.createPropertyAssignment(f.name,d)});return D.createObjectLiteralExpression(l,!0)}if(Ur(o)&16){if(wr(o.symbol.declarations||Je,Kp(Jm,zm,Nc))===void 0)return c1();let f=t.getSignaturesOfType(o,0);if(f===void 0)return c1();let d=O9(215,e,i,f[0],fP(_.Function_not_implemented.message,i),void 0,void 0,void 0,s,r);return d??c1()}if(Ur(o)&1){let l=Nh(o.symbol);if(l===void 0||B0(l))return c1();let f=Vm(l);return f&&Fn(f.parameters)?c1():D.createNewExpression(D.createIdentifier(o.symbol.name),void 0,void 0)}return c1()}function c1(){return D.createIdentifier(\"undefined\")}function m5e(e){return e.flags&524288&&(Ur(e)&128||e.symbol&&zr(Wp(e.symbol.declarations),Rd))}function h5e(e,t,r){let i=e.getContextualType(r.attributes);if(i===void 0)return Je;let o=i.getProperties();if(!Fn(o))return Je;let s=new Set;for(let l of r.attributes.properties)if(Sp(l)&&s.add(l.name.escapedText),GT(l)){let f=e.getTypeAtLocation(l.expression);for(let d of f.getProperties())s.add(d.escapedName)}return Pr(o,l=>i_(l.name,t,1)&&!(l.flags&16777216||ac(l)&48||s.has(l.escapedName)))}function g5e(e,t){if(Rd(e))return;let r=jn(t,i=>Nc(i)||Ec(i));return r&&r.parent===e?r:void 0}function y5e(e,t,r,i){if(Zp(e)){let o=i.symbolToNode(e,111551,void 0,1073741824);if(o&&ts(o))return o}return E4(e.name,t,r===0)}function l0e(e){if(jn(e,AL)){let t=jn(e.parent,j_);if(t)return t}return Gn(e)}var Yg,oP,sP,cP,AQ,v5e=gt({\"src/services/codefixes/fixAddMissingMember.ts\"(){\"use strict\";Fr(),Qa(),Yg=\"fixMissingMember\",oP=\"fixMissingProperties\",sP=\"fixMissingAttributes\",cP=\"fixMissingFunctionDeclaration\",AQ=[_.Property_0_does_not_exist_on_type_1.code,_.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code,_.Property_0_is_missing_in_type_1_but_required_in_type_2.code,_.Type_0_is_missing_the_following_properties_from_type_1_Colon_2.code,_.Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more.code,_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,_.Cannot_find_name_0.code],za({errorCodes:AQ,getCodeActions(e){let t=e.program.getTypeChecker(),r=Qbe(e.sourceFile,e.span.start,e.errorCode,t,e.program);if(r){if(r.kind===3){let i=nr.ChangeTracker.with(e,o=>c0e(o,e,r));return[Ma(oP,i,_.Add_missing_properties,oP,_.Add_all_missing_properties)]}if(r.kind===4){let i=nr.ChangeTracker.with(e,o=>s0e(o,e,r));return[Ma(sP,i,_.Add_missing_attributes,sP,_.Add_all_missing_attributes)]}if(r.kind===2||r.kind===5){let i=nr.ChangeTracker.with(e,o=>o0e(o,e,r));return[Ma(cP,i,[_.Add_missing_function_declaration_0,r.token.text],cP,_.Add_all_missing_function_declarations)]}if(r.kind===1){let i=nr.ChangeTracker.with(e,o=>a0e(o,e.program.getTypeChecker(),r));return[Ma(Yg,i,[_.Add_missing_enum_member_0,r.token.text],Yg,_.Add_all_missing_members)]}return Qi(p5e(e,r),u5e(e,r))}},fixIds:[Yg,cP,oP,sP],getAllCodeActions:e=>{let{program:t,fixId:r}=e,i=t.getTypeChecker(),o=new Map,s=new Map;return ix(nr.ChangeTracker.with(e,l=>{ax(e,AQ,f=>{let d=Qbe(f.file,f.start,f.code,i,e.program);if(!(!d||!V_(o,zo(d.parentDeclaration)+\"#\"+d.token.text))){if(r===cP&&(d.kind===2||d.kind===5))o0e(l,e,d);else if(r===oP&&d.kind===3)c0e(l,e,d);else if(r===sP&&d.kind===4)s0e(l,e,d);else if(d.kind===1&&a0e(l,i,d),d.kind===0){let{parentDeclaration:g,token:m}=d,v=VD(s,g,()=>[]);v.some(S=>S.token.text===m.text)||v.push(d)}}}),s.forEach((f,d)=>{let g=Rd(d)?void 0:mZ(d,i);for(let m of f){if(g?.some(P=>{let F=s.get(P);return!!F&&F.some(({token:B})=>B.text===m.token.text)}))continue;let{parentDeclaration:v,declSourceFile:S,modifierFlags:x,token:A,call:w,isJSFile:C}=m;if(w&&!pi(A))i0e(e,l,w,A,x&32,v,S);else if(C&&!ku(v)&&!Rd(v))Zbe(l,S,v,A,!!(x&32));else{let P=t0e(i,v,A);n0e(l,S,v,A.text,P,x&32)}}})}))}})}});function u0e(e,t,r){let i=Ga(b5e(t,r),Pa),o=D.createNewExpression(i.expression,i.typeArguments,i.arguments);e.replaceNode(t,i,o)}function b5e(e,t){let r=Vi(e,t.start),i=wl(t);for(;r.end<i;)r=r.parent;return r}var l9,CQ,E5e=gt({\"src/services/codefixes/fixAddMissingNewOperator.ts\"(){\"use strict\";Fr(),Qa(),l9=\"addMissingNewOperator\",CQ=[_.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new.code],za({errorCodes:CQ,getCodeActions(e){let{sourceFile:t,span:r}=e,i=nr.ChangeTracker.with(e,o=>u0e(o,t,r));return[Ma(l9,i,_.Add_missing_new_operator_to_call,l9,_.Add_missing_new_operator_to_all_calls)]},fixIds:[l9],getAllCodeActions:e=>ns(e,CQ,(t,r)=>u0e(t,e.sourceFile,r))})}});function d0e(e,t){return{type:\"install package\",file:e,packageName:t}}function f0e(e,t){let r=zr(Vi(e,t),yo);if(!r)return;let i=r.text,{packageName:o}=ZJ(i);return fl(o)?void 0:o}function _0e(e,t,r){var i;return r===IQ?QT.nodeCoreModules.has(e)?\"@types/node\":void 0:(i=t.isKnownTypesPackageName)!=null&&i.call(t,e)?rF(e):void 0}var p0e,u9,IQ,LQ,T5e=gt({\"src/services/codefixes/fixCannotFindModule.ts\"(){\"use strict\";Fr(),Qa(),p0e=\"fixCannotFindModule\",u9=\"installTypesPackage\",IQ=_.Cannot_find_module_0_or_its_corresponding_type_declarations.code,LQ=[IQ,_.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type.code],za({errorCodes:LQ,getCodeActions:function(t){let{host:r,sourceFile:i,span:{start:o}}=t,s=f0e(i,o);if(s===void 0)return;let l=_0e(s,r,t.errorCode);return l===void 0?[]:[Ma(p0e,[],[_.Install_0,l],u9,_.Install_all_missing_types_packages,d0e(i.fileName,l))]},fixIds:[u9],getAllCodeActions:e=>ns(e,LQ,(t,r,i)=>{let o=f0e(r.file,r.start);if(o!==void 0)switch(e.fixId){case u9:{let s=_0e(o,e.host,r.code);s&&i.push(d0e(r.file.fileName,s));break}default:L.fail(`Bad fixId: ${e.fixId}`)}})})}});function m0e(e,t){let r=Vi(e,t);return Ga(r.parent,Yr)}function h0e(e,t,r,i,o){let s=hp(e),l=r.program.getTypeChecker(),f=l.getTypeAtLocation(s),d=l.getPropertiesOfType(f).filter(S5e),g=s1(t,r.program,o,r.host);oZ(e,d,t,r,o,g,m=>i.insertMemberAtStart(t,e,m)),g.writeFixes(i)}function S5e(e){let t=Yy(Vo(e.getDeclarations()));return!(t&8)&&!!(t&256)}var kQ,d9,x5e=gt({\"src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts\"(){\"use strict\";Fr(),Qa(),kQ=[_.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2.code,_.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1.code],d9=\"fixClassDoesntImplementInheritedAbstractMember\",za({errorCodes:kQ,getCodeActions:function(t){let{sourceFile:r,span:i}=t,o=nr.ChangeTracker.with(t,s=>h0e(m0e(r,i.start),r,t,s,t.preferences));return o.length===0?void 0:[Ma(d9,o,_.Implement_inherited_abstract_class,d9,_.Implement_all_inherited_abstract_classes)]},fixIds:[d9],getAllCodeActions:function(t){let r=new Map;return ns(t,kQ,(i,o)=>{let s=m0e(o.file,o.start);V_(r,zo(s))&&h0e(s,t.sourceFile,t,i,t.preferences)})}})}});function g0e(e,t,r,i){e.insertNodeAtConstructorStart(t,r,i),e.delete(t,i)}function y0e(e,t){let r=Vi(e,t);if(r.kind!==108)return;let i=Xd(r),o=v0e(i.body);return o&&!o.expression.arguments.some(s=>br(s)&&s.expression===r)?{constructor:i,superCall:o}:void 0}function v0e(e){return Ol(e)&&OA(e.expression)?e:Ia(e)?void 0:pa(e,v0e)}var f9,DQ,A5e=gt({\"src/services/codefixes/fixClassSuperMustPrecedeThisAccess.ts\"(){\"use strict\";Fr(),Qa(),f9=\"classSuperMustPrecedeThisAccess\",DQ=[_.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class.code],za({errorCodes:DQ,getCodeActions(e){let{sourceFile:t,span:r}=e,i=y0e(t,r.start);if(!i)return;let{constructor:o,superCall:s}=i,l=nr.ChangeTracker.with(e,f=>g0e(f,t,o,s));return[Ma(f9,l,_.Make_super_call_the_first_statement_in_the_constructor,f9,_.Make_all_super_calls_the_first_statement_in_their_constructor)]},fixIds:[f9],getAllCodeActions(e){let{sourceFile:t}=e,r=new Map;return ns(e,DQ,(i,o)=>{let s=y0e(o.file,o.start);if(!s)return;let{constructor:l,superCall:f}=s;V_(r,zo(l.parent))&&g0e(i,t,l,f)})}})}});function b0e(e,t){let r=Vi(e,t);return L.assert(Ec(r.parent),\"token should be at the constructor declaration\"),r.parent}function E0e(e,t,r){let i=D.createExpressionStatement(D.createCallExpression(D.createSuper(),void 0,Je));e.insertNodeAtConstructorStart(t,r,i)}var _9,wQ,C5e=gt({\"src/services/codefixes/fixConstructorForDerivedNeedSuperCall.ts\"(){\"use strict\";Fr(),Qa(),_9=\"constructorForDerivedNeedSuperCall\",wQ=[_.Constructors_for_derived_classes_must_contain_a_super_call.code],za({errorCodes:wQ,getCodeActions(e){let{sourceFile:t,span:r}=e,i=b0e(t,r.start),o=nr.ChangeTracker.with(e,s=>E0e(s,t,i));return[Ma(_9,o,_.Add_missing_super_call,_9,_.Add_all_missing_super_calls)]},fixIds:[_9],getAllCodeActions:e=>ns(e,wQ,(t,r)=>E0e(t,e.sourceFile,b0e(r.file,r.start)))})}});function T0e(e,t){dZ(e,t,\"jsx\",D.createStringLiteral(\"react\"))}var RQ,OQ,I5e=gt({\"src/services/codefixes/fixEnableJsxFlag.ts\"(){\"use strict\";Fr(),Qa(),RQ=\"fixEnableJsxFlag\",OQ=[_.Cannot_use_JSX_unless_the_jsx_flag_is_provided.code],za({errorCodes:OQ,getCodeActions:function(t){let{configFile:r}=t.program.getCompilerOptions();if(r===void 0)return;let i=nr.ChangeTracker.with(t,o=>T0e(o,r));return[K_(RQ,i,_.Enable_the_jsx_flag_in_your_configuration_file)]},fixIds:[RQ],getAllCodeActions:e=>ns(e,OQ,t=>{let{configFile:r}=e.program.getCompilerOptions();r!==void 0&&T0e(t,r)})})}});function S0e(e,t,r){let i=wr(e.getSemanticDiagnostics(t),l=>l.start===r.start&&l.length===r.length);if(i===void 0||i.relatedInformation===void 0)return;let o=wr(i.relatedInformation,l=>l.code===_.Did_you_mean_0.code);if(o===void 0||o.file===void 0||o.start===void 0||o.length===void 0)return;let s=_Z(o.file,il(o.start,o.length));if(s!==void 0&&ot(s)&&ar(s.parent))return{suggestion:L5e(o.messageText),expression:s.parent,arg:s}}function x0e(e,t,r,i){let o=D.createCallExpression(D.createPropertyAccessExpression(D.createIdentifier(\"Number\"),D.createIdentifier(\"isNaN\")),void 0,[r]),s=i.operatorToken.kind;e.replaceNode(t,i,s===37||s===35?D.createPrefixUnaryExpression(53,o):o)}function L5e(e){let[t,r]=sv(e,`\n`,0).match(/\\'(.*)\\'/)||[];return r}var p9,NQ,k5e=gt({\"src/services/codefixes/fixNaNEquality.ts\"(){\"use strict\";Fr(),Qa(),p9=\"fixNaNEquality\",NQ=[_.This_condition_will_always_return_0.code],za({errorCodes:NQ,getCodeActions(e){let{sourceFile:t,span:r,program:i}=e,o=S0e(i,t,r);if(o===void 0)return;let{suggestion:s,expression:l,arg:f}=o,d=nr.ChangeTracker.with(e,g=>x0e(g,t,f,l));return[Ma(p9,d,[_.Use_0,s],p9,_.Use_Number_isNaN_in_all_conditions)]},fixIds:[p9],getAllCodeActions:e=>ns(e,NQ,(t,r)=>{let i=S0e(e.program,r.file,il(r.start,r.length));i&&x0e(t,r.file,i.arg,i.expression)})})}}),D5e=gt({\"src/services/codefixes/fixModuleAndTargetOptions.ts\"(){\"use strict\";Fr(),Qa(),za({errorCodes:[_.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher.code,_.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher.code],getCodeActions:function(t){let r=t.program.getCompilerOptions(),{configFile:i}=r;if(i===void 0)return;let o=[],s=Rl(r);if(s>=5&&s<99){let g=nr.ChangeTracker.with(t,m=>{dZ(m,i,\"module\",D.createStringLiteral(\"esnext\"))});o.push(K_(\"fixModuleOption\",g,[_.Set_the_module_option_in_your_configuration_file_to_0,\"esnext\"]))}let f=Do(r);if(f<4||f>99){let g=nr.ChangeTracker.with(t,m=>{if(!LI(i))return;let S=[[\"target\",D.createStringLiteral(\"es2017\")]];s===1&&S.push([\"module\",D.createStringLiteral(\"commonjs\")]),uZ(m,i,S)});o.push(K_(\"fixTargetOption\",g,[_.Set_the_target_option_in_your_configuration_file_to_0,\"es2017\"]))}return o.length?o:void 0}})}});function A0e(e,t,r){e.replaceNode(t,r,D.createPropertyAssignment(r.name,r.objectAssignmentInitializer))}function C0e(e,t){return Ga(Vi(e,t).parent,xf)}var m9,PQ,w5e=gt({\"src/services/codefixes/fixPropertyAssignment.ts\"(){\"use strict\";Fr(),Qa(),m9=\"fixPropertyAssignment\",PQ=[_.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern.code],za({errorCodes:PQ,fixIds:[m9],getCodeActions(e){let{sourceFile:t,span:r}=e,i=C0e(t,r.start),o=nr.ChangeTracker.with(e,s=>A0e(s,e.sourceFile,i));return[Ma(m9,o,[_.Change_0_to_1,\"=\",\":\"],m9,[_.Switch_each_misused_0_to_1,\"=\",\":\"])]},getAllCodeActions:e=>ns(e,PQ,(t,r)=>A0e(t,r.file,C0e(r.file,r.start)))})}});function I0e(e,t){let r=Vi(e,t),i=Zc(r).heritageClauses,o=i[0].getFirstToken();return o.kind===94?{extendsToken:o,heritageClauses:i}:void 0}function L0e(e,t,r,i){if(e.replaceNode(t,r,D.createToken(117)),i.length===2&&i[0].token===94&&i[1].token===117){let o=i[1].getFirstToken(),s=o.getFullStart();e.replaceRange(t,{pos:s,end:s},D.createToken(27));let l=t.text,f=o.end;for(;f<l.length&&Yp(l.charCodeAt(f));)f++;e.deleteRange(t,{pos:o.getStart(),end:f})}}var h9,MQ,R5e=gt({\"src/services/codefixes/fixExtendsInterfaceBecomesImplements.ts\"(){\"use strict\";Fr(),Qa(),h9=\"extendsInterfaceBecomesImplements\",MQ=[_.Cannot_extend_an_interface_0_Did_you_mean_implements.code],za({errorCodes:MQ,getCodeActions(e){let{sourceFile:t}=e,r=I0e(t,e.span.start);if(!r)return;let{extendsToken:i,heritageClauses:o}=r,s=nr.ChangeTracker.with(e,l=>L0e(l,t,i,o));return[Ma(h9,s,_.Change_extends_to_implements,h9,_.Change_all_extended_interfaces_to_implements)]},fixIds:[h9],getAllCodeActions:e=>ns(e,MQ,(t,r)=>{let i=I0e(r.file,r.start);i&&L0e(t,r.file,i.extendsToken,i.heritageClauses)})})}});function k0e(e,t,r){let i=Vi(e,t);if(Re(i)||pi(i))return{node:i,className:r===FQ?Zc(i).name.text:void 0}}function D0e(e,t,{node:r,className:i}){pd(r),e.replaceNode(t,r,D.createPropertyAccessExpression(i?D.createIdentifier(i):D.createThis(),r))}var g9,FQ,GQ,O5e=gt({\"src/services/codefixes/fixForgottenThisPropertyAccess.ts\"(){\"use strict\";Fr(),Qa(),g9=\"forgottenThisPropertyAccess\",FQ=_.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,GQ=[_.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,_.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression.code,FQ],za({errorCodes:GQ,getCodeActions(e){let{sourceFile:t}=e,r=k0e(t,e.span.start,e.errorCode);if(!r)return;let i=nr.ChangeTracker.with(e,o=>D0e(o,t,r));return[Ma(g9,i,[_.Add_0_to_unresolved_variable,r.className||\"this\"],g9,_.Add_qualifier_to_all_unresolved_variables_matching_a_member_name)]},fixIds:[g9],getAllCodeActions:e=>ns(e,GQ,(t,r)=>{let i=k0e(r.file,r.start,r.code);i&&D0e(t,e.sourceFile,i)})})}});function N5e(e){return fs(VQ,e)}function BQ(e,t,r,i,o){let s=r.getText()[i];if(!N5e(s))return;let l=o?VQ[s]:`{${ck(r,t,s)}}`;e.replaceRangeWithText(r,{pos:i,end:i+1},l)}var y9,lP,UQ,VQ,P5e=gt({\"src/services/codefixes/fixInvalidJsxCharacters.ts\"(){\"use strict\";Fr(),Qa(),y9=\"fixInvalidJsxCharacters_expression\",lP=\"fixInvalidJsxCharacters_htmlEntity\",UQ=[_.Unexpected_token_Did_you_mean_or_gt.code,_.Unexpected_token_Did_you_mean_or_rbrace.code],za({errorCodes:UQ,fixIds:[y9,lP],getCodeActions(e){let{sourceFile:t,preferences:r,span:i}=e,o=nr.ChangeTracker.with(e,l=>BQ(l,r,t,i.start,!1)),s=nr.ChangeTracker.with(e,l=>BQ(l,r,t,i.start,!0));return[Ma(y9,o,_.Wrap_invalid_character_in_an_expression_container,y9,_.Wrap_all_invalid_characters_in_an_expression_container),Ma(lP,s,_.Convert_invalid_character_to_its_html_entity_code,lP,_.Convert_all_invalid_characters_to_HTML_entity_code)]},getAllCodeActions(e){return ns(e,UQ,(t,r)=>BQ(t,e.preferences,r.file,r.start,e.fixId===lP))}}),VQ={\">\":\"&gt;\",\"}\":\"&rbrace;\"}}});function M5e(e,{name:t,jsDocHost:r,jsDocParameterTag:i}){let o=nr.ChangeTracker.with(e,s=>s.filterJSDocTags(e.sourceFile,r,l=>l!==i));return Ma(uP,o,[_.Delete_unused_param_tag_0,t.getText(e.sourceFile)],uP,_.Delete_all_unused_param_tags)}function F5e(e,{name:t,jsDocHost:r,signature:i,jsDocParameterTag:o}){if(!Fn(i.parameters))return;let s=e.sourceFile,l=A0(i),f=new Set;for(let v of l)xp(v)&&Re(v.name)&&f.add(v.name.escapedText);let d=ks(i.parameters,v=>Re(v.name)&&!f.has(v.name.escapedText)?v.name.getText(s):void 0);if(d===void 0)return;let g=D.updateJSDocParameterTag(o,o.tagName,D.createIdentifier(d),o.isBracketed,o.typeExpression,o.isNameFirst,o.comment),m=nr.ChangeTracker.with(e,v=>v.replaceJSDocComment(s,r,on(l,S=>S===o?g:S)));return K_(jQ,m,[_.Rename_param_tag_name_0_to_1,t.getText(s),d])}function w0e(e,t){let r=Vi(e,t);if(r.parent&&xp(r.parent)&&Re(r.parent.name)){let i=r.parent,o=dS(i),s=sb(i);if(o&&s)return{jsDocHost:o,signature:s,name:r.parent.name,jsDocParameterTag:i}}}var uP,jQ,HQ,G5e=gt({\"src/services/codefixes/fixUnmatchedParameter.ts\"(){\"use strict\";Fr(),Qa(),uP=\"deleteUnmatchedParameter\",jQ=\"renameUnmatchedParameter\",HQ=[_.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name.code],za({fixIds:[uP,jQ],errorCodes:HQ,getCodeActions:function(t){let{sourceFile:r,span:i}=t,o=[],s=w0e(r,i.start);if(s)return Sn(o,M5e(t,s)),Sn(o,F5e(t,s)),o},getAllCodeActions:function(t){let r=new Map;return ix(nr.ChangeTracker.with(t,i=>{ax(t,HQ,({file:o,start:s})=>{let l=w0e(o,s);l&&r.set(l.signature,Sn(r.get(l.signature),l.jsDocParameterTag))}),r.forEach((o,s)=>{if(t.fixId===uP){let l=new Set(o);i.filterJSDocTags(s.getSourceFile(),s,f=>!l.has(f))}})}))}})}});function B5e(e,t,r){let i=zr(Vi(e,r),Re);if(!i||i.parent.kind!==180)return;let s=t.getTypeChecker().getSymbolAtLocation(i);return wr(s?.declarations||Je,Kp(lm,$u,Nl))}function U5e(e,t,r,i){if(r.kind===268){e.insertModifierBefore(t,154,r.name);return}let o=r.kind===270?r:r.parent.parent;if(o.name&&o.namedBindings)return;let s=i.getTypeChecker();z6(o,f=>{if(wd(f.symbol,s).flags&111551)return!0})||e.insertModifierBefore(t,154,o)}function V5e(e,t,r,i){Ok.doChangeNamedToNamespaceOrDefault(t,i,e,r.parent)}var v9,R0e,j5e=gt({\"src/services/codefixes/fixUnreferenceableDecoratorMetadata.ts\"(){\"use strict\";Fr(),Qa(),v9=\"fixUnreferenceableDecoratorMetadata\",R0e=[_.A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled.code],za({errorCodes:R0e,getCodeActions:e=>{let t=B5e(e.sourceFile,e.program,e.span.start);if(!t)return;let r=nr.ChangeTracker.with(e,s=>t.kind===273&&V5e(s,e.sourceFile,t,e.program)),i=nr.ChangeTracker.with(e,s=>U5e(s,e.sourceFile,t,e.program)),o;return r.length&&(o=Sn(o,K_(v9,r,_.Convert_named_imports_to_namespace_import))),i.length&&(o=Sn(o,K_(v9,i,_.Convert_to_type_only_import))),o},fixIds:[v9]})}});function O0e(e,t,r){e.replaceNode(t,r.parent,D.createKeywordTypeNode(157))}function vk(e,t){return Ma(bk,e,t,T9,_.Delete_all_unused_declarations)}function N0e(e,t,r){e.delete(t,L.checkDefined(Ga(r.parent,hH).typeParameters,\"The type parameter to delete should exist\"))}function WQ(e){return e.kind===100||e.kind===79&&(e.parent.kind===273||e.parent.kind===270)}function P0e(e){return e.kind===100?zr(e.parent,gl):void 0}function M0e(e,t){return pu(t.parent)&&Vo(t.parent.getChildren(e))===t}function F0e(e,t,r){e.delete(t,r.parent.kind===240?r.parent:r)}function H5e(e,t,r){mn(r.elements,i=>e.delete(t,i))}function G0e(e,t,r,i){t!==_.Property_0_is_declared_but_its_value_is_never_read.code&&(i.kind===138&&(i=Ga(i.parent,h2).typeParameter.name),Re(i)&&W5e(i)&&(e.replaceNode(r,i,D.createIdentifier(`_${i.text}`)),ha(i.parent)&&fI(i.parent).forEach(o=>{Re(o.name)&&e.replaceNode(r,o.name,D.createIdentifier(`_${o.name.text}`))})))}function W5e(e){switch(e.parent.kind){case 166:case 165:return!0;case 257:switch(e.parent.parent.parent.kind){case 247:case 246:return!0}}return!1}function b9(e,t,r,i,o,s,l,f){z5e(t,r,e,i,o,s,l,f),Re(t)&&js.Core.eachSymbolReferenceInFile(t,i,e,d=>{br(d.parent)&&d.parent.name===d&&(d=d.parent),!f&&X5e(d)&&r.delete(e,d.parent.parent)})}function z5e(e,t,r,i,o,s,l,f){let{parent:d}=e;if(ha(d))J5e(t,r,d,i,o,s,l,f);else if(!(f&&Re(e)&&js.Core.isSymbolReferencedInFile(e,i,r))){let g=lm(d)?e:ts(d)?d.parent:d;L.assert(g!==r,\"should not delete whole source file\"),t.delete(r,g)}}function J5e(e,t,r,i,o,s,l,f=!1){if(K5e(i,t,r,o,s,l,f))if(r.modifiers&&r.modifiers.length>0&&(!Re(r.name)||js.Core.isSymbolReferencedInFile(r.name,i,t)))for(let d of r.modifiers)Ha(d)&&e.deleteModifier(t,d);else!r.initializer&&B0e(r,i,o)&&e.delete(t,r)}function B0e(e,t,r){let i=e.parent.parameters.indexOf(e);return!js.Core.someSignatureUsage(e.parent,r,t,(o,s)=>!s||s.arguments.length>i)}function K5e(e,t,r,i,o,s,l){let{parent:f}=r;switch(f.kind){case 171:case 173:let d=f.parameters.indexOf(r),g=Nc(f)?f.name:f,m=js.Core.getReferencedSymbolsForNode(f.pos,g,o,i,s);if(m){for(let v of m)for(let S of v.references)if(S.kind===js.EntryKind.Node){let x=hL(S.node)&&Pa(S.node.parent)&&S.node.parent.arguments.length>d,A=br(S.node.parent)&&hL(S.node.parent.expression)&&Pa(S.node.parent.parent)&&S.node.parent.parent.arguments.length>d,w=(Nc(S.node.parent)||zm(S.node.parent))&&S.node.parent!==r.parent&&S.node.parent.parameters.length>d;if(x||A||w)return!1}}return!0;case 259:return f.name&&q5e(e,t,f.name)?U0e(f,r,l):!0;case 215:case 216:return U0e(f,r,l);case 175:return!1;case 174:return!0;default:return L.failBadSyntaxKind(f)}}function q5e(e,t,r){return!!js.Core.eachSymbolReferenceInFile(r,e,t,i=>Re(i)&&Pa(i.parent)&&i.parent.arguments.indexOf(i)>=0)}function U0e(e,t,r){let i=e.parameters,o=i.indexOf(t);return L.assert(o!==-1,\"The parameter should already be in the list\"),r?i.slice(o+1).every(s=>Re(s.name)&&!s.symbol.isReferenced):o===i.length-1}function X5e(e){return(ar(e.parent)&&e.parent.left===e||(Nz(e.parent)||tv(e.parent))&&e.parent.operand===e)&&Ol(e.parent.parent)}var bk,E9,T9,dP,S9,zQ,Y5e=gt({\"src/services/codefixes/fixUnusedIdentifier.ts\"(){\"use strict\";Fr(),Qa(),bk=\"unusedIdentifier\",E9=\"unusedIdentifier_prefix\",T9=\"unusedIdentifier_delete\",dP=\"unusedIdentifier_deleteImports\",S9=\"unusedIdentifier_infer\",zQ=[_._0_is_declared_but_its_value_is_never_read.code,_._0_is_declared_but_never_used.code,_.Property_0_is_declared_but_its_value_is_never_read.code,_.All_imports_in_import_declaration_are_unused.code,_.All_destructured_elements_are_unused.code,_.All_variables_are_unused.code,_.All_type_parameters_are_unused.code],za({errorCodes:zQ,getCodeActions(e){let{errorCode:t,sourceFile:r,program:i,cancellationToken:o}=e,s=i.getTypeChecker(),l=i.getSourceFiles(),f=Vi(r,e.span.start);if(H_(f))return[vk(nr.ChangeTracker.with(e,v=>v.delete(r,f)),_.Remove_template_tag)];if(f.kind===29){let v=nr.ChangeTracker.with(e,S=>N0e(S,r,f));return[vk(v,_.Remove_type_parameters)]}let d=P0e(f);if(d){let v=nr.ChangeTracker.with(e,S=>S.delete(r,d));return[Ma(bk,v,[_.Remove_import_from_0,lle(d)],dP,_.Delete_all_unused_imports)]}else if(WQ(f)){let v=nr.ChangeTracker.with(e,S=>b9(r,f,S,s,l,i,o,!1));if(v.length)return[Ma(bk,v,[_.Remove_unused_declaration_for_Colon_0,f.getText(r)],dP,_.Delete_all_unused_imports)]}if(cm(f.parent)||g2(f.parent)){if(ha(f.parent.parent)){let v=f.parent.elements,S=[v.length>1?_.Remove_unused_declarations_for_Colon_0:_.Remove_unused_declaration_for_Colon_0,on(v,x=>x.getText(r)).join(\", \")];return[vk(nr.ChangeTracker.with(e,x=>H5e(x,r,f.parent)),S)]}return[vk(nr.ChangeTracker.with(e,v=>v.delete(r,f.parent.parent)),_.Remove_unused_destructuring_declaration)]}if(M0e(r,f))return[vk(nr.ChangeTracker.with(e,v=>F0e(v,r,f.parent)),_.Remove_variable_statement)];let g=[];if(f.kind===138){let v=nr.ChangeTracker.with(e,x=>O0e(x,r,f)),S=Ga(f.parent,h2).typeParameter.name.text;g.push(Ma(bk,v,[_.Replace_infer_0_with_unknown,S],S9,_.Replace_all_unused_infer_with_unknown))}else{let v=nr.ChangeTracker.with(e,S=>b9(r,f,S,s,l,i,o,!1));if(v.length){let S=ts(f.parent)?f.parent:f;g.push(vk(v,[_.Remove_unused_declaration_for_Colon_0,S.getText(r)]))}}let m=nr.ChangeTracker.with(e,v=>G0e(v,t,r,f));return m.length&&g.push(Ma(bk,m,[_.Prefix_0_with_an_underscore,f.getText(r)],E9,_.Prefix_all_unused_declarations_with_where_possible)),g},fixIds:[E9,T9,dP,S9],getAllCodeActions:e=>{let{sourceFile:t,program:r,cancellationToken:i}=e,o=r.getTypeChecker(),s=r.getSourceFiles();return ns(e,zQ,(l,f)=>{let d=Vi(t,f.start);switch(e.fixId){case E9:G0e(l,f.code,t,d);break;case dP:{let g=P0e(d);g?l.delete(t,g):WQ(d)&&b9(t,d,l,o,s,r,i,!0);break}case T9:{if(d.kind===138||WQ(d))break;if(H_(d))l.delete(t,d);else if(d.kind===29)N0e(l,t,d);else if(cm(d.parent)){if(d.parent.parent.initializer)break;(!ha(d.parent.parent)||B0e(d.parent.parent,o,s))&&l.delete(t,d.parent.parent)}else{if(g2(d.parent.parent)&&d.parent.parent.parent.initializer)break;M0e(t,d)?F0e(l,t,d.parent):b9(t,d,l,o,s,r,i,!0)}break}case S9:d.kind===138&&O0e(l,t,d);break;default:L.fail(JSON.stringify(e.fixId))}})}})}});function V0e(e,t,r,i,o){let s=Vi(t,r),l=jn(s,ca);if(l.getStart(t)!==s.getStart(t)){let d=JSON.stringify({statementKind:L.formatSyntaxKind(l.kind),tokenKind:L.formatSyntaxKind(s.kind),errorCode:o,start:r,length:i});L.fail(\"Token and statement should start at the same point. \"+d)}let f=(Va(l.parent)?l.parent:l).parent;if(!Va(l.parent)||l===Vo(l.parent.statements))switch(f.kind){case 242:if(f.elseStatement){if(Va(l.parent))break;e.replaceNode(t,l,D.createBlock(Je));return}case 244:case 245:e.delete(t,f);return}if(Va(l.parent)){let d=r+i,g=L.checkDefined($5e(PW(l.parent.statements,l),m=>m.pos<d),\"Some statement should be last\");e.deleteNodeRange(t,l,g)}else e.delete(t,l)}function $5e(e,t){let r;for(let i of e){if(!t(i))break;r=i}return r}var x9,JQ,Q5e=gt({\"src/services/codefixes/fixUnreachableCode.ts\"(){\"use strict\";Fr(),Qa(),x9=\"fixUnreachableCode\",JQ=[_.Unreachable_code_detected.code],za({errorCodes:JQ,getCodeActions(e){if(e.program.getSyntacticDiagnostics(e.sourceFile,e.cancellationToken).length)return;let r=nr.ChangeTracker.with(e,i=>V0e(i,e.sourceFile,e.span.start,e.span.length,e.errorCode));return[Ma(x9,r,_.Remove_unreachable_code,x9,_.Remove_all_unreachable_code)]},fixIds:[x9],getAllCodeActions:e=>ns(e,JQ,(t,r)=>V0e(t,r.file,r.start,r.length,r.code))})}});function j0e(e,t,r){let i=Vi(t,r),o=Ga(i.parent,J0),s=i.getStart(t),l=o.statement.getStart(t),f=Bf(s,l,t)?l:xo(t.text,Yo(o,58,t).end,!0);e.deleteRange(t,{pos:s,end:f})}var A9,KQ,Z5e=gt({\"src/services/codefixes/fixUnusedLabel.ts\"(){\"use strict\";Fr(),Qa(),A9=\"fixUnusedLabel\",KQ=[_.Unused_label.code],za({errorCodes:KQ,getCodeActions(e){let t=nr.ChangeTracker.with(e,r=>j0e(r,e.sourceFile,e.span.start));return[Ma(A9,t,_.Remove_unused_label,A9,_.Remove_all_unused_labels)]},fixIds:[A9],getAllCodeActions:e=>ns(e,KQ,(t,r)=>j0e(t,r.file,r.start))})}});function H0e(e,t,r,i,o){e.replaceNode(t,r,o.typeToTypeNode(i,r,void 0))}function W0e(e,t,r){let i=jn(Vi(e,t),e9e),o=i&&i.type;return o&&{typeNode:o,type:t9e(r,o)}}function e9e(e){switch(e.kind){case 231:case 176:case 177:case 259:case 174:case 178:case 197:case 171:case 170:case 166:case 169:case 168:case 175:case 262:case 213:case 257:return!0;default:return!1}}function t9e(e,t){if(T2(t)){let r=e.getTypeFromTypeNode(t.type);return r===e.getNeverType()||r===e.getVoidType()?r:e.getUnionType(Sn([r,e.getUndefinedType()],t.postfix?void 0:e.getNullType()))}return e.getTypeFromTypeNode(t)}var qQ,C9,XQ,n9e=gt({\"src/services/codefixes/fixJSDocTypes.ts\"(){\"use strict\";Fr(),Qa(),qQ=\"fixJSDocTypes_plain\",C9=\"fixJSDocTypes_nullable\",XQ=[_.JSDoc_types_can_only_be_used_inside_documentation_comments.code,_._0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1.code,_._0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1.code],za({errorCodes:XQ,getCodeActions(e){let{sourceFile:t}=e,r=e.program.getTypeChecker(),i=W0e(t,e.span.start,r);if(!i)return;let{typeNode:o,type:s}=i,l=o.getText(t),f=[d(s,qQ,_.Change_all_jsdoc_style_types_to_TypeScript)];return o.kind===317&&f.push(d(s,C9,_.Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types)),f;function d(g,m,v){let S=nr.ChangeTracker.with(e,x=>H0e(x,t,o,g,r));return Ma(\"jdocTypes\",S,[_.Change_0_to_1,l,r.typeToString(g)],m,v)}},fixIds:[qQ,C9],getAllCodeActions(e){let{fixId:t,program:r,sourceFile:i}=e,o=r.getTypeChecker();return ns(e,XQ,(s,l)=>{let f=W0e(l.file,l.start,o);if(!f)return;let{typeNode:d,type:g}=f,m=d.kind===317&&t===C9?o.getNullableType(g,32768):g;H0e(s,i,d,m,o)})}})}});function z0e(e,t,r){e.replaceNodeWithText(t,r,`${r.text}()`)}function J0e(e,t){let r=Vi(e,t);if(br(r.parent)){let i=r.parent;for(;br(i.parent);)i=i.parent;return i.name}if(Re(r))return r}var I9,YQ,r9e=gt({\"src/services/codefixes/fixMissingCallParentheses.ts\"(){\"use strict\";Fr(),Qa(),I9=\"fixMissingCallParentheses\",YQ=[_.This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead.code],za({errorCodes:YQ,fixIds:[I9],getCodeActions(e){let{sourceFile:t,span:r}=e,i=J0e(t,r.start);if(!i)return;let o=nr.ChangeTracker.with(e,s=>z0e(s,e.sourceFile,i));return[Ma(I9,o,_.Add_missing_call_parentheses,I9,_.Add_all_missing_call_parentheses)]},getAllCodeActions:e=>ns(e,YQ,(t,r)=>{let i=J0e(r.file,r.start);i&&z0e(t,r.file,i)})})}});function i9e(e){if(e.type)return e.type;if(wi(e.parent)&&e.parent.type&&Jm(e.parent.type))return e.parent.type.type}function K0e(e,t){let r=Vi(e,t),i=Xd(r);if(!i)return;let o;switch(i.kind){case 171:o=i.name;break;case 259:case 215:o=Yo(i,98,e);break;case 216:let s=i.typeParameters?29:20;o=Yo(i,s,e)||Vo(i.parameters);break;default:return}return o&&{insertBefore:o,returnType:i9e(i)}}function q0e(e,t,{insertBefore:r,returnType:i}){if(i){let o=Jw(i);(!o||o.kind!==79||o.text!==\"Promise\")&&e.replaceNode(t,i,D.createTypeReferenceNode(\"Promise\",D.createNodeArray([i])))}e.insertModifierBefore(t,132,r)}var L9,$Q,a9e=gt({\"src/services/codefixes/fixAwaitInSyncFunction.ts\"(){\"use strict\";Fr(),Qa(),L9=\"fixAwaitInSyncFunction\",$Q=[_.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code,_.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code,_.Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function.code],za({errorCodes:$Q,getCodeActions(e){let{sourceFile:t,span:r}=e,i=K0e(t,r.start);if(!i)return;let o=nr.ChangeTracker.with(e,s=>q0e(s,t,i));return[Ma(L9,o,_.Add_async_modifier_to_containing_function,L9,_.Add_all_missing_async_modifiers)]},fixIds:[L9],getAllCodeActions:function(t){let r=new Map;return ns(t,$Q,(i,o)=>{let s=K0e(o.file,o.start);!s||!V_(r,zo(s.insertBefore))||q0e(i,t.sourceFile,s)})}})}});function X0e(e,t,r,i,o){let s,l;if(i===_._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property.code)s=t,l=t+r;else if(i===_._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor.code){let f=o.program.getTypeChecker(),d=Vi(e,t).parent;L.assert(rb(d),\"error span of fixPropertyOverrideAccessor should only be on an accessor\");let g=d.parent;L.assert(Yr(g),\"erroneous accessors should only be inside classes\");let m=Wp(mZ(g,f));if(!m)return[];let v=Gi(wA(d.name)),S=f.getPropertyOfType(f.getTypeAtLocation(m),v);if(!S||!S.valueDeclaration)return[];s=S.valueDeclaration.pos,l=S.valueDeclaration.end,e=Gn(S.valueDeclaration)}else L.fail(\"fixPropertyOverrideAccessor codefix got unexpected error code \"+i);return uEe(e,o.program,s,l,o,_.Generate_get_and_set_accessors.message)}var QQ,k9,o9e=gt({\"src/services/codefixes/fixPropertyOverrideAccessor.ts\"(){\"use strict\";Fr(),Qa(),QQ=[_._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property.code,_._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor.code],k9=\"fixPropertyOverrideAccessor\",za({errorCodes:QQ,getCodeActions(e){let t=X0e(e.sourceFile,e.span.start,e.span.length,e.errorCode,e);if(t)return[Ma(k9,t,_.Generate_get_and_set_accessors,k9,_.Generate_get_and_set_accessors_for_all_overriding_properties)]},fixIds:[k9],getAllCodeActions:e=>ns(e,QQ,(t,r)=>{let i=X0e(r.file,r.start,r.length,r.code,e);if(i)for(let o of i)t.pushRaw(e.sourceFile,o)})})}});function s9e(e,t){switch(e){case _.Parameter_0_implicitly_has_an_1_type.code:case _.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code:return Sf(Xd(t))?_.Infer_type_of_0_from_usage:_.Infer_parameter_types_from_usage;case _.Rest_parameter_0_implicitly_has_an_any_type.code:case _.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage.code:return _.Infer_parameter_types_from_usage;case _.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code:return _.Infer_this_type_of_0_from_usage;default:return _.Infer_type_of_0_from_usage}}function c9e(e){switch(e){case _.Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage.code:return _.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code;case _.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code:return _.Variable_0_implicitly_has_an_1_type.code;case _.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code:return _.Parameter_0_implicitly_has_an_1_type.code;case _.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage.code:return _.Rest_parameter_0_implicitly_has_an_any_type.code;case _.Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage.code:return _.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code;case _._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage.code:return _._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code;case _.Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage.code:return _.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code;case _.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code:return _.Member_0_implicitly_has_an_1_type.code}return e}function Y0e(e,t,r,i,o,s,l,f,d){if(!yI(r.kind)&&r.kind!==79&&r.kind!==25&&r.kind!==108)return;let{parent:g}=r,m=s1(t,o,d,f);switch(i=c9e(i),i){case _.Member_0_implicitly_has_an_1_type.code:case _.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code:if(wi(g)&&l(g)||Na(g)||$d(g))return $0e(e,m,t,g,o,f,s),m.writeFixes(e),g;if(br(g)){let x=Ek(g.name,o,s),A=lk(x,g,o,f);if(A){let w=D.createJSDocTypeTag(void 0,D.createJSDocTypeExpression(A),void 0);e.addJSDocTags(t,Ga(g.parent.parent,Ol),[w])}return m.writeFixes(e),g}return;case _.Variable_0_implicitly_has_an_1_type.code:{let x=o.getTypeChecker().getSymbolAtLocation(r);return x&&x.valueDeclaration&&wi(x.valueDeclaration)&&l(x.valueDeclaration)?($0e(e,m,Gn(x.valueDeclaration),x.valueDeclaration,o,f,s),m.writeFixes(e),x.valueDeclaration):void 0}}let v=Xd(r);if(v===void 0)return;let S;switch(i){case _.Parameter_0_implicitly_has_an_1_type.code:if(Sf(v)){Q0e(e,m,t,v,o,f,s),S=v;break}case _.Rest_parameter_0_implicitly_has_an_any_type.code:if(l(v)){let x=Ga(g,ha);l9e(e,m,t,x,v,o,f,s),S=x}break;case _.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code:case _._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code:p_(v)&&Re(v.name)&&(D9(e,m,t,v,Ek(v.name,o,s),o,f),S=v);break;case _.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code:Sf(v)&&(Q0e(e,m,t,v,o,f,s),S=v);break;case _.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code:nr.isThisTypeAnnotatable(v)&&l(v)&&(u9e(e,t,v,o,f,s),S=v);break;default:return L.fail(String(i))}return m.writeFixes(e),S}function $0e(e,t,r,i,o,s,l){Re(i.name)&&D9(e,t,r,i,Ek(i.name,o,l),o,s)}function l9e(e,t,r,i,o,s,l,f){if(!Re(i.name))return;let d=_9e(o,r,s,f);if(L.assert(o.parameters.length===d.length,\"Parameter count and inference count should match\"),Yn(o))Z0e(e,r,d,s,l);else{let g=xs(o)&&!Yo(o,20,r);g&&e.insertNodeBefore(r,Vo(o.parameters),D.createToken(20));for(let{declaration:m,type:v}of d)m&&!m.type&&!m.initializer&&D9(e,t,r,m,v,s,l);g&&e.insertNodeAfter(r,To(o.parameters),D.createToken(21))}}function u9e(e,t,r,i,o,s){let l=eEe(r,t,i,s);if(!l||!l.length)return;let f=eZ(i,l,s).thisParameter(),d=lk(f,r,i,o);d&&(Yn(r)?d9e(e,t,r,d):e.tryInsertThisTypeAnnotation(t,r,d))}function d9e(e,t,r,i){e.addJSDocTags(t,r,[D.createJSDocThisTag(void 0,D.createJSDocTypeExpression(i))])}function Q0e(e,t,r,i,o,s,l){let f=Sl(i.parameters);if(f&&Re(i.name)&&Re(f.name)){let d=Ek(i.name,o,l);d===o.getTypeChecker().getAnyType()&&(d=Ek(f.name,o,l)),Yn(i)?Z0e(e,r,[{declaration:f,type:d}],o,s):D9(e,t,r,f,d,o,s)}}function D9(e,t,r,i,o,s,l){let f=lk(o,i,s,l);if(f)if(Yn(r)&&i.kind!==168){let d=wi(i)?zr(i.parent.parent,Bc):i;if(!d)return;let g=D.createJSDocTypeExpression(f),m=p_(i)?D.createJSDocReturnTag(void 0,g,void 0):D.createJSDocTypeTag(void 0,g,void 0);e.addJSDocTags(r,d,[m])}else f9e(f,i,r,e,t,Do(s.getCompilerOptions()))||e.tryInsertTypeAnnotation(r,i,f)}function f9e(e,t,r,i,o,s){let l=l1(e,s);return l&&i.tryInsertTypeAnnotation(r,t,l.typeNode)?(mn(l.symbols,f=>o.addImportFromExportedSymbol(f,!0)),!0):!1}function Z0e(e,t,r,i,o){let s=r.length&&r[0].declaration.parent;if(!s)return;let l=Zi(r,f=>{let d=f.declaration;if(d.initializer||Vy(d)||!Re(d.name))return;let g=f.type&&lk(f.type,d,i,o);if(g){let m=D.cloneNode(d.name);return Jn(m,7168),{name:D.cloneNode(d.name),param:d,isOptional:!!f.isOptional,typeNode:g}}});if(l.length)if(xs(s)||ms(s)){let f=xs(s)&&!Yo(s,20,t);f&&e.insertNodeBefore(t,Vo(s.parameters),D.createToken(20)),mn(l,({typeNode:d,param:g})=>{let m=D.createJSDocTypeTag(void 0,D.createJSDocTypeExpression(d)),v=D.createJSDocComment(void 0,[m]);e.insertNodeAt(t,g.getStart(t),v,{suffix:\" \"})}),f&&e.insertNodeAfter(t,To(s.parameters),D.createToken(21))}else{let f=on(l,({name:d,typeNode:g,isOptional:m})=>D.createJSDocParameterTag(void 0,d,!!m,D.createJSDocTypeExpression(g),!1,void 0));e.addJSDocTags(t,s,f)}}function ZQ(e,t,r){return Zi(js.getReferenceEntriesForNode(-1,e,t,t.getSourceFiles(),r),i=>i.kind!==js.EntryKind.Span?zr(i.node,Re):void 0)}function Ek(e,t,r){let i=ZQ(e,t,r);return eZ(t,i,r).single()}function _9e(e,t,r,i){let o=eEe(e,t,r,i);return o&&eZ(r,o,i).parameters(e)||e.parameters.map(s=>({declaration:s,type:Re(s.name)?Ek(s.name,r,i):r.getTypeChecker().getAnyType()}))}function eEe(e,t,r,i){let o;switch(e.kind){case 173:o=Yo(e,135,t);break;case 216:case 215:let s=e.parent;o=(wi(s)||Na(s))&&Re(s.name)?s.name:e.name;break;case 259:case 171:case 170:o=e.name;break}if(o)return ZQ(o,r,i)}function eZ(e,t,r){let i=e.getTypeChecker(),o={string:()=>i.getStringType(),number:()=>i.getNumberType(),Array:Ce=>i.createArrayType(Ce),Promise:Ce=>i.createPromiseType(Ce)},s=[i.getStringType(),i.getNumberType(),i.createArrayType(i.getAnyType()),i.createPromiseType(i.getAnyType())];return{single:d,parameters:g,thisParameter:m};function l(){return{isNumber:void 0,isString:void 0,isNumberOrString:void 0,candidateTypes:void 0,properties:void 0,calls:void 0,constructs:void 0,numberIndex:void 0,stringIndex:void 0,candidateThisTypes:void 0,inferredTypes:void 0}}function f(Ce){let Ie=new Map;for(let Ne of Ce)Ne.properties&&Ne.properties.forEach((Le,Ye)=>{Ie.has(Ye)||Ie.set(Ye,[]),Ie.get(Ye).push(Le)});let Be=new Map;return Ie.forEach((Ne,Le)=>{Be.set(Le,f(Ne))}),{isNumber:Ce.some(Ne=>Ne.isNumber),isString:Ce.some(Ne=>Ne.isString),isNumberOrString:Ce.some(Ne=>Ne.isNumberOrString),candidateTypes:Uo(Ce,Ne=>Ne.candidateTypes),properties:Be,calls:Uo(Ce,Ne=>Ne.calls),constructs:Uo(Ce,Ne=>Ne.constructs),numberIndex:mn(Ce,Ne=>Ne.numberIndex),stringIndex:mn(Ce,Ne=>Ne.stringIndex),candidateThisTypes:Uo(Ce,Ne=>Ne.candidateThisTypes),inferredTypes:void 0}}function d(){return $(v(t))}function g(Ce){if(t.length===0||!Ce.parameters)return;let Ie=l();for(let Ne of t)r.throwIfCancellationRequested(),S(Ne,Ie);let Be=[...Ie.constructs||[],...Ie.calls||[]];return Ce.parameters.map((Ne,Le)=>{let Ye=[],_t=Fm(Ne),ct=!1;for(let We of Be)if(We.argumentTypes.length<=Le)ct=Yn(Ce),Ye.push(i.getUndefinedType());else if(_t)for(let qe=Le;qe<We.argumentTypes.length;qe++)Ye.push(i.getBaseTypeOfLiteralType(We.argumentTypes[qe]));else Ye.push(i.getBaseTypeOfLiteralType(We.argumentTypes[Le]));if(Re(Ne.name)){let We=v(ZQ(Ne.name,e,r));Ye.push(..._t?Zi(We,i.getElementTypeOfArrayType):We)}let Rt=$(Ye);return{type:_t?i.createArrayType(Rt):Rt,isOptional:ct&&!_t,declaration:Ne}})}function m(){let Ce=l();for(let Ie of t)r.throwIfCancellationRequested(),S(Ie,Ce);return $(Ce.candidateThisTypes||Je)}function v(Ce){let Ie=l();for(let Be of Ce)r.throwIfCancellationRequested(),S(Be,Ie);return Z(Ie)}function S(Ce,Ie){for(;zI(Ce);)Ce=Ce.parent;switch(Ce.parent.kind){case 241:A(Ce,Ie);break;case 222:Ie.isNumber=!0;break;case 221:w(Ce.parent,Ie);break;case 223:C(Ce,Ce.parent,Ie);break;case 292:case 293:P(Ce.parent,Ie);break;case 210:case 211:Ce.parent.expression===Ce?F(Ce.parent,Ie):x(Ce,Ie);break;case 208:B(Ce.parent,Ie);break;case 209:q(Ce.parent,Ce,Ie);break;case 299:case 300:W(Ce.parent,Ie);break;case 169:Y(Ce.parent,Ie);break;case 257:{let{name:Be,initializer:Ne}=Ce.parent;if(Ce===Be){Ne&&ke(Ie,i.getTypeAtLocation(Ne));break}}default:return x(Ce,Ie)}}function x(Ce,Ie){Dh(Ce)&&ke(Ie,i.getContextualType(Ce))}function A(Ce,Ie){ke(Ie,Pa(Ce)?i.getVoidType():i.getAnyType())}function w(Ce,Ie){switch(Ce.operator){case 45:case 46:case 40:case 54:Ie.isNumber=!0;break;case 39:Ie.isNumberOrString=!0;break}}function C(Ce,Ie,Be){switch(Ie.operatorToken.kind){case 42:case 41:case 43:case 44:case 47:case 48:case 49:case 50:case 51:case 52:case 65:case 67:case 66:case 68:case 69:case 73:case 74:case 78:case 70:case 72:case 71:case 40:case 29:case 32:case 31:case 33:let Ne=i.getTypeAtLocation(Ie.left===Ce?Ie.right:Ie.left);Ne.flags&1056?ke(Be,Ne):Be.isNumber=!0;break;case 64:case 39:let Le=i.getTypeAtLocation(Ie.left===Ce?Ie.right:Ie.left);Le.flags&1056?ke(Be,Le):Le.flags&296?Be.isNumber=!0:Le.flags&402653316?Be.isString=!0:Le.flags&1||(Be.isNumberOrString=!0);break;case 63:case 34:case 36:case 37:case 35:ke(Be,i.getTypeAtLocation(Ie.left===Ce?Ie.right:Ie.left));break;case 101:Ce===Ie.left&&(Be.isString=!0);break;case 56:case 60:Ce===Ie.left&&(Ce.parent.parent.kind===257||Iu(Ce.parent.parent,!0))&&ke(Be,i.getTypeAtLocation(Ie.right));break;case 55:case 27:case 102:break}}function P(Ce,Ie){ke(Ie,i.getTypeAtLocation(Ce.parent.parent.expression))}function F(Ce,Ie){let Be={argumentTypes:[],return_:l()};if(Ce.arguments)for(let Ne of Ce.arguments)Be.argumentTypes.push(i.getTypeAtLocation(Ne));S(Ce,Be.return_),Ce.kind===210?(Ie.calls||(Ie.calls=[])).push(Be):(Ie.constructs||(Ie.constructs=[])).push(Be)}function B(Ce,Ie){let Be=Bs(Ce.name.text);Ie.properties||(Ie.properties=new Map);let Ne=Ie.properties.get(Be)||l();S(Ce,Ne),Ie.properties.set(Be,Ne)}function q(Ce,Ie,Be){if(Ie===Ce.argumentExpression){Be.isNumberOrString=!0;return}else{let Ne=i.getTypeAtLocation(Ce.argumentExpression),Le=l();S(Ce,Le),Ne.flags&296?Be.numberIndex=Le:Be.stringIndex=Le}}function W(Ce,Ie){let Be=wi(Ce.parent.parent)?Ce.parent.parent:Ce.parent;Pe(Ie,i.getTypeAtLocation(Be))}function Y(Ce,Ie){Pe(Ie,i.getTypeAtLocation(Ce.parent))}function R(Ce,Ie){let Be=[];for(let Ne of Ce)for(let{high:Le,low:Ye}of Ie)Le(Ne)&&(L.assert(!Ye(Ne),\"Priority can't have both low and high\"),Be.push(Ye));return Ce.filter(Ne=>Be.every(Le=>!Le(Ne)))}function ie(Ce){return $(Z(Ce))}function $(Ce){if(!Ce.length)return i.getAnyType();let Ie=i.getUnionType([i.getStringType(),i.getNumberType()]),Ne=R(Ce,[{high:Ye=>Ye===i.getStringType()||Ye===i.getNumberType(),low:Ye=>Ye===Ie},{high:Ye=>!(Ye.flags&16385),low:Ye=>!!(Ye.flags&16385)},{high:Ye=>!(Ye.flags&114689)&&!(Ur(Ye)&16),low:Ye=>!!(Ur(Ye)&16)}]),Le=Ne.filter(Ye=>Ur(Ye)&16);return Le.length&&(Ne=Ne.filter(Ye=>!(Ur(Ye)&16)),Ne.push(fe(Le))),i.getWidenedType(i.getUnionType(Ne.map(i.getBaseTypeOfLiteralType),2))}function fe(Ce){if(Ce.length===1)return Ce[0];let Ie=[],Be=[],Ne=[],Le=[],Ye=!1,_t=!1,ct=Nf();for(let qe of Ce){for(let tn of i.getPropertiesOfType(qe))ct.add(tn.name,tn.valueDeclaration?i.getTypeOfSymbolAtLocation(tn,tn.valueDeclaration):i.getAnyType());Ie.push(...i.getSignaturesOfType(qe,0)),Be.push(...i.getSignaturesOfType(qe,1));let zt=i.getIndexInfoOfType(qe,0);zt&&(Ne.push(zt.type),Ye=Ye||zt.isReadonly);let Qt=i.getIndexInfoOfType(qe,1);Qt&&(Le.push(Qt.type),_t=_t||Qt.isReadonly)}let Rt=uae(ct,(qe,zt)=>{let Qt=zt.length<Ce.length?16777216:0,tn=i.createSymbol(4|Qt,qe);return tn.links.type=i.getUnionType(zt),[qe,tn]}),We=[];return Ne.length&&We.push(i.createIndexInfo(i.getStringType(),i.getUnionType(Ne),Ye)),Le.length&&We.push(i.createIndexInfo(i.getNumberType(),i.getUnionType(Le),_t)),i.createAnonymousType(Ce[0].symbol,Rt,Ie,Be,We)}function Z(Ce){var Ie,Be,Ne;let Le=[];Ce.isNumber&&Le.push(i.getNumberType()),Ce.isString&&Le.push(i.getStringType()),Ce.isNumberOrString&&Le.push(i.getUnionType([i.getStringType(),i.getNumberType()])),Ce.numberIndex&&Le.push(i.createArrayType(ie(Ce.numberIndex))),((Ie=Ce.properties)!=null&&Ie.size||(Be=Ce.constructs)!=null&&Be.length||Ce.stringIndex)&&Le.push(U(Ce));let Ye=(Ce.candidateTypes||[]).map(ct=>i.getBaseTypeOfLiteralType(ct)),_t=(Ne=Ce.calls)!=null&&Ne.length?U(Ce):void 0;return _t&&Ye?Le.push(i.getUnionType([_t,...Ye],2)):(_t&&Le.push(_t),Fn(Ye)&&Le.push(...Ye)),Le.push(...re(Ce)),Le}function U(Ce){let Ie=new Map;Ce.properties&&Ce.properties.forEach((Ye,_t)=>{let ct=i.createSymbol(4,_t);ct.links.type=ie(Ye),Ie.set(_t,ct)});let Be=Ce.calls?[we(Ce.calls)]:[],Ne=Ce.constructs?[we(Ce.constructs)]:[],Le=Ce.stringIndex?[i.createIndexInfo(i.getStringType(),ie(Ce.stringIndex),!1)]:[];return i.createAnonymousType(void 0,Ie,Be,Ne,Le)}function re(Ce){if(!Ce.properties||!Ce.properties.size)return[];let Ie=s.filter(Be=>le(Be,Ce));return 0<Ie.length&&Ie.length<3?Ie.map(Be=>_e(Be,Ce)):[]}function le(Ce,Ie){return Ie.properties?!Ld(Ie.properties,(Be,Ne)=>{let Le=i.getTypeOfPropertyOfType(Ce,Ne);return Le?Be.calls?!i.getSignaturesOfType(Le,0).length||!i.isTypeAssignableTo(Le,Ve(Be.calls)):!i.isTypeAssignableTo(Le,ie(Be)):!0}):!1}function _e(Ce,Ie){if(!(Ur(Ce)&4)||!Ie.properties)return Ce;let Be=Ce.target,Ne=Wp(Be.typeParameters);if(!Ne)return Ce;let Le=[];return Ie.properties.forEach((Ye,_t)=>{let ct=i.getTypeOfPropertyOfType(Be,_t);L.assert(!!ct,\"generic should have all the properties of its reference.\"),Le.push(...ge(ct,ie(Ye),Ne))}),o[Ce.symbol.escapedName]($(Le))}function ge(Ce,Ie,Be){if(Ce===Be)return[Ie];if(Ce.flags&3145728)return Uo(Ce.types,Ye=>ge(Ye,Ie,Be));if(Ur(Ce)&4&&Ur(Ie)&4){let Ye=i.getTypeArguments(Ce),_t=i.getTypeArguments(Ie),ct=[];if(Ye&&_t)for(let Rt=0;Rt<Ye.length;Rt++)_t[Rt]&&ct.push(...ge(Ye[Rt],_t[Rt],Be));return ct}let Ne=i.getSignaturesOfType(Ce,0),Le=i.getSignaturesOfType(Ie,0);return Ne.length===1&&Le.length===1?X(Ne[0],Le[0],Be):[]}function X(Ce,Ie,Be){var Ne;let Le=[];for(let ct=0;ct<Ce.parameters.length;ct++){let Rt=Ce.parameters[ct],We=Ie.parameters[ct],qe=Ce.declaration&&Fm(Ce.declaration.parameters[ct]);if(!We)break;let zt=Rt.valueDeclaration?i.getTypeOfSymbolAtLocation(Rt,Rt.valueDeclaration):i.getAnyType(),Qt=qe&&i.getElementTypeOfArrayType(zt);Qt&&(zt=Qt);let tn=((Ne=zr(We,Zp))==null?void 0:Ne.links.type)||(We.valueDeclaration?i.getTypeOfSymbolAtLocation(We,We.valueDeclaration):i.getAnyType());Le.push(...ge(zt,tn,Be))}let Ye=i.getReturnTypeOfSignature(Ce),_t=i.getReturnTypeOfSignature(Ie);return Le.push(...ge(Ye,_t,Be)),Le}function Ve(Ce){return i.createAnonymousType(void 0,Ua(),[we(Ce)],Je,Je)}function we(Ce){let Ie=[],Be=Math.max(...Ce.map(Le=>Le.argumentTypes.length));for(let Le=0;Le<Be;Le++){let Ye=i.createSymbol(1,Bs(`arg${Le}`));Ye.links.type=$(Ce.map(_t=>_t.argumentTypes[Le]||i.getUndefinedType())),Ce.some(_t=>_t.argumentTypes[Le]===void 0)&&(Ye.flags|=16777216),Ie.push(Ye)}let Ne=ie(f(Ce.map(Le=>Le.return_)));return i.createSignature(void 0,void 0,void 0,Ie,Ne,void 0,Be,0)}function ke(Ce,Ie){Ie&&!(Ie.flags&1)&&!(Ie.flags&131072)&&(Ce.candidateTypes||(Ce.candidateTypes=[])).push(Ie)}function Pe(Ce,Ie){Ie&&!(Ie.flags&1)&&!(Ie.flags&131072)&&(Ce.candidateThisTypes||(Ce.candidateThisTypes=[])).push(Ie)}}var w9,tZ,p9e=gt({\"src/services/codefixes/inferFromUsage.ts\"(){\"use strict\";Fr(),Qa(),w9=\"inferFromUsage\",tZ=[_.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code,_.Variable_0_implicitly_has_an_1_type.code,_.Parameter_0_implicitly_has_an_1_type.code,_.Rest_parameter_0_implicitly_has_an_any_type.code,_.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code,_._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code,_.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code,_.Member_0_implicitly_has_an_1_type.code,_.Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage.code,_.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code,_.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code,_.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage.code,_.Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage.code,_._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage.code,_.Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage.code,_.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code,_.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code],za({errorCodes:tZ,getCodeActions(e){let{sourceFile:t,program:r,span:{start:i},errorCode:o,cancellationToken:s,host:l,preferences:f}=e,d=Vi(t,i),g,m=nr.ChangeTracker.with(e,S=>{g=Y0e(S,t,d,o,r,s,h0,l,f)}),v=g&&sa(g);return!v||m.length===0?void 0:[Ma(w9,m,[s9e(o,d),Qc(v)],w9,_.Infer_all_types_from_usage)]},fixIds:[w9],getAllCodeActions(e){let{sourceFile:t,program:r,cancellationToken:i,host:o,preferences:s}=e,l=W2();return ns(e,tZ,(f,d)=>{Y0e(f,t,Vi(d.file,d.start),d.code,r,i,l,o,s)})}})}});function tEe(e,t,r){if(Yn(e))return;let i=Vi(e,r),o=jn(i,Ds),s=o?.type;if(!s)return;let l=t.getTypeFromTypeNode(s),f=t.getAwaitedType(l)||t.getVoidType(),d=t.typeToTypeNode(f,s,void 0);if(d)return{returnTypeNode:s,returnType:l,promisedTypeNode:d,promisedType:f}}function nEe(e,t,r,i){e.replaceNode(t,r,D.createTypeReferenceNode(\"Promise\",[i]))}var R9,nZ,m9e=gt({\"src/services/codefixes/fixReturnTypeInAsyncFunction.ts\"(){\"use strict\";Fr(),Qa(),R9=\"fixReturnTypeInAsyncFunction\",nZ=[_.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0.code],za({errorCodes:nZ,fixIds:[R9],getCodeActions:function(t){let{sourceFile:r,program:i,span:o}=t,s=i.getTypeChecker(),l=tEe(r,i.getTypeChecker(),o.start);if(!l)return;let{returnTypeNode:f,returnType:d,promisedTypeNode:g,promisedType:m}=l,v=nr.ChangeTracker.with(t,S=>nEe(S,r,f,g));return[Ma(R9,v,[_.Replace_0_with_Promise_1,s.typeToString(d),s.typeToString(m)],R9,_.Fix_all_incorrect_return_type_of_an_async_functions)]},getAllCodeActions:e=>ns(e,nZ,(t,r)=>{let i=tEe(r.file,e.program.getTypeChecker(),r.start);i&&nEe(t,r.file,i.returnTypeNode,i.promisedTypeNode)})})}});function rEe(e,t,r,i){let{line:o}=Gs(t,r);(!i||_0(i,o))&&e.insertCommentBeforeLine(t,o,r,\" @ts-ignore\")}var rZ,iZ,aZ,h9e=gt({\"src/services/codefixes/disableJsDiagnostics.ts\"(){\"use strict\";Fr(),Qa(),rZ=\"disableJsDiagnostics\",iZ=\"disableJsDiagnostics\",aZ=Zi(Object.keys(_),e=>{let t=_[e];return t.category===1?t.code:void 0}),za({errorCodes:aZ,getCodeActions:function(t){let{sourceFile:r,program:i,span:o,host:s,formatContext:l}=t;if(!Yn(r)||!HR(r,i.getCompilerOptions()))return;let f=r.checkJsDirective?\"\":bb(s,l.options),d=[K_(rZ,[_ve(r.fileName,[GN(r.checkJsDirective?Wc(r.checkJsDirective.pos,r.checkJsDirective.end):il(0,0),`// @ts-nocheck${f}`)])],_.Disable_checking_for_this_file)];return nr.isValidLocationToAddComment(r,o.start)&&d.unshift(Ma(rZ,nr.ChangeTracker.with(t,g=>rEe(g,r,o.start)),_.Ignore_this_error_message,iZ,_.Add_ts_ignore_to_all_error_messages)),d},fixIds:[iZ],getAllCodeActions:e=>{let t=new Set;return ns(e,aZ,(r,i)=>{nr.isValidLocationToAddComment(i.file,i.start)&&rEe(r,i.file,i.start,t)})}})}});function oZ(e,t,r,i,o,s,l){let f=e.symbol.members;for(let d of t)f.has(d.escapedName)||iEe(d,e,r,i,o,s,l,void 0)}function sx(e){return{trackSymbol:()=>!1,moduleResolverHost:oY(e.program,e.host)}}function iEe(e,t,r,i,o,s,l,f,d=3,g=!1){var m;let v=e.getDeclarations(),S=v?.[0],x=i.program.getTypeChecker(),A=Do(i.program.getCompilerOptions()),w=(m=S?.kind)!=null?m:168,C=cc(sa(S),!1),P=S?uu(S):0,F=P&4?4:P&16?16:0;S&&Id(S)&&(F|=128);let B=$(),q=x.getWidenedType(x.getTypeOfSymbolAtLocation(e,t)),W=!!(e.flags&16777216),Y=!!(t.flags&16777216)||g,R=J_(r,o);switch(w){case 168:case 169:let le=R===0?268435456:void 0,_e=x.typeToTypeNode(q,t,le,sx(i));if(s){let X=l1(_e,A);X&&(_e=X.typeNode,cx(s,X.symbols))}l(D.createPropertyDeclaration(B,S?Z(C):e.getName(),W&&d&2?D.createToken(57):void 0,_e,void 0));break;case 174:case 175:{L.assertIsDefined(v);let X=x.typeToTypeNode(q,t,void 0,sx(i)),Ve=kT(v,S),we=Ve.secondAccessor?[Ve.firstAccessor,Ve.secondAccessor]:[Ve.firstAccessor];if(s){let ke=l1(X,A);ke&&(X=ke.typeNode,cx(s,ke.symbols))}for(let ke of we)if(p_(ke))l(D.createGetAccessorDeclaration(B,Z(C),Je,re(X),U(f,R,Y)));else{L.assertNode(ke,Sf,\"The counterpart to a getter should be a setter\");let Pe=VI(ke),Ce=Pe&&Re(Pe.name)?vr(Pe.name):void 0;l(D.createSetAccessorDeclaration(B,Z(C),cZ(1,[Ce],[re(X)],1,!1),U(f,R,Y)))}break}case 170:case 171:L.assertIsDefined(v);let ge=q.isUnion()?Uo(q.types,X=>X.getCallSignatures()):q.getCallSignatures();if(!vt(ge))break;if(v.length===1){L.assert(ge.length===1,\"One declaration implies one signature\");let X=ge[0];ie(R,X,B,Z(C),U(f,R,Y));break}for(let X of ge)ie(R,X,B,Z(C));if(!Y)if(v.length>ge.length){let X=x.getSignatureFromDeclaration(v[v.length-1]);ie(R,X,B,Z(C),U(f,R))}else L.assert(v.length===ge.length,\"Declarations and signatures should match count\"),l(v9e(x,i,t,ge,Z(C),W&&!!(d&1),B,R,f));break}function ie(le,_e,ge,X,Ve){let we=O9(171,i,le,_e,Ve,X,ge,W&&!!(d&1),t,s);we&&l(we)}function $(){let le;return F&&(le=_A(le,D.createModifiersFromModifierFlags(F))),fe()&&(le=Sn(le,D.createToken(161))),le&&D.createNodeArray(le)}function fe(){return!!(i.program.getCompilerOptions().noImplicitOverride&&S&&B0(S))}function Z(le){return Re(le)&&le.escapedText===\"constructor\"?D.createComputedPropertyName(D.createStringLiteral(vr(le),R===0)):cc(le,!1)}function U(le,_e,ge){return ge?void 0:cc(le,!1)||lZ(_e)}function re(le){return cc(le,!1)}}function O9(e,t,r,i,o,s,l,f,d,g){let m=t.program,v=m.getTypeChecker(),S=Do(m.getCompilerOptions()),x=Yn(d),A=524545|(r===0?268435456:0),w=v.signatureToSignatureDeclaration(i,e,d,A,sx(t));if(!w)return;let C=x?void 0:w.typeParameters,P=w.parameters,F=x?void 0:w.type;if(g){if(C){let Y=Tl(C,R=>{let ie=R.constraint,$=R.default;if(ie){let fe=l1(ie,S);fe&&(ie=fe.typeNode,cx(g,fe.symbols))}if($){let fe=l1($,S);fe&&($=fe.typeNode,cx(g,fe.symbols))}return D.updateTypeParameterDeclaration(R,R.modifiers,R.name,ie,$)});C!==Y&&(C=it(D.createNodeArray(Y,C.hasTrailingComma),C))}let W=Tl(P,Y=>{let R=x?void 0:Y.type;if(R){let ie=l1(R,S);ie&&(R=ie.typeNode,cx(g,ie.symbols))}return D.updateParameterDeclaration(Y,Y.modifiers,Y.dotDotDotToken,Y.name,x?void 0:Y.questionToken,R,Y.initializer)});if(P!==W&&(P=it(D.createNodeArray(W,P.hasTrailingComma),P)),F){let Y=l1(F,S);Y&&(F=Y.typeNode,cx(g,Y.symbols))}}let B=f?D.createToken(57):void 0,q=w.asteriskToken;if(ms(w))return D.updateFunctionExpression(w,l,w.asteriskToken,zr(s,Re),C,P,F,o??w.body);if(xs(w))return D.updateArrowFunction(w,l,C,P,F,w.equalsGreaterThanToken,o??w.body);if(Nc(w))return D.updateMethodDeclaration(w,l,q,s??D.createIdentifier(\"\"),B,C,P,F,o);if(Jc(w))return D.updateFunctionDeclaration(w,l,w.asteriskToken,zr(s,Re),C,P,F,o??w.body)}function sZ(e,t,r,i,o,s,l){let f=J_(t.sourceFile,t.preferences),d=Do(t.program.getCompilerOptions()),g=sx(t),m=t.program.getTypeChecker(),v=Yn(l),{typeArguments:S,arguments:x,parent:A}=i,w=v?void 0:m.getContextualType(i),C=on(x,$=>Re($)?$.text:br($)&&Re($.name)?$.name.text:void 0),P=v?[]:on(x,$=>m.getTypeAtLocation($)),{argumentTypeNodes:F,argumentTypeParameters:B}=sEe(m,r,P,l,d,void 0,g),q=s?D.createNodeArray(D.createModifiersFromModifierFlags(s)):void 0,W=f3(A)?D.createToken(41):void 0,Y=v?void 0:g9e(m,B,S),R=cZ(x.length,C,F,void 0,v),ie=v||w===void 0?void 0:m.typeToTypeNode(w,l,void 0,g);switch(e){case 171:return D.createMethodDeclaration(q,W,o,void 0,Y,R,ie,lZ(f));case 170:return D.createMethodSignature(q,o,void 0,Y,R,ie===void 0?D.createKeywordTypeNode(157):ie);case 259:return D.createFunctionDeclaration(q,W,o,Y,R,ie,fP(_.Function_not_implemented.message,f));default:L.fail(\"Unexpected kind\")}}function g9e(e,t,r){let i=new Set(t.map(s=>s[0])),o=new Map(t);if(r){let s=r.filter(f=>!t.some(d=>{var g;return e.getTypeAtLocation(f)===((g=d[1])==null?void 0:g.argumentType)})),l=i.size+s.length;for(let f=0;i.size<l;f+=1)i.add(aEe(f))}return lo(i.values(),s=>{var l;return D.createTypeParameterDeclaration(void 0,s,(l=o.get(s))==null?void 0:l.constraint)})}function aEe(e){return 84+e<=90?String.fromCharCode(84+e):`T${e}`}function N9(e,t,r,i,o,s,l){let f=e.typeToTypeNode(r,i,s,l);if(f&&Mh(f)){let d=l1(f,o);d&&(cx(t,d.symbols),f=d.typeNode)}return cc(f)}function oEe(e){return e.isUnionOrIntersection()?e.types.some(oEe):e.flags&262144}function sEe(e,t,r,i,o,s,l){let f=[],d=new Map;for(let g=0;g<r.length;g+=1){let m=r[g];if(m.isUnionOrIntersection()&&m.types.some(oEe)){let w=aEe(g);f.push(D.createTypeReferenceNode(w)),d.set(w,void 0);continue}let v=e.getBaseTypeOfLiteralType(m),S=N9(e,t,v,i,o,s,l);if(!S)continue;f.push(S);let x=cEe(m),A=m.isTypeParameter()&&m.constraint&&!y9e(m.constraint)?N9(e,t,m.constraint,i,o,s,l):void 0;x&&d.set(x,{argumentType:m,constraint:A})}return{argumentTypeNodes:f,argumentTypeParameters:lo(d.entries())}}function y9e(e){return e.flags&524288&&e.objectFlags===16}function cEe(e){var t;if(e.flags&3145728)for(let r of e.types){let i=cEe(r);if(i)return i}return e.flags&262144?(t=e.getSymbol())==null?void 0:t.getName():void 0}function cZ(e,t,r,i,o){let s=[],l=new Map;for(let f=0;f<e;f++){let d=t?.[f]||`arg${f}`,g=l.get(d);l.set(d,(g||0)+1);let m=D.createParameterDeclaration(void 0,void 0,d+(g||\"\"),i!==void 0&&f>=i?D.createToken(57):void 0,o?void 0:r?.[f]||D.createKeywordTypeNode(157),void 0);s.push(m)}return s}function v9e(e,t,r,i,o,s,l,f,d){let g=i[0],m=i[0].minArgumentCount,v=!1;for(let w of i)m=Math.min(w.minArgumentCount,m),Xl(w)&&(v=!0),w.parameters.length>=g.parameters.length&&(!Xl(w)||Xl(g))&&(g=w);let S=g.parameters.length-(Xl(g)?1:0),x=g.parameters.map(w=>w.name),A=cZ(S,x,void 0,m,!1);if(v){let w=D.createParameterDeclaration(void 0,D.createToken(25),x[S]||\"rest\",S>=m?D.createToken(57):void 0,D.createArrayTypeNode(D.createKeywordTypeNode(157)),void 0);A.push(w)}return E9e(l,o,s,void 0,A,b9e(i,e,t,r),f,d)}function b9e(e,t,r,i){if(Fn(e)){let o=t.getUnionType(on(e,t.getReturnTypeOfSignature));return t.typeToTypeNode(o,i,1,sx(r))}}function E9e(e,t,r,i,o,s,l,f){return D.createMethodDeclaration(e,void 0,t,r?D.createToken(57):void 0,i,o,s,f||lZ(l))}function lZ(e){return fP(_.Method_not_implemented.message,e)}function fP(e,t){return D.createBlock([D.createThrowStatement(D.createNewExpression(D.createIdentifier(\"Error\"),void 0,[D.createStringLiteral(e,t===0)]))],!0)}function uZ(e,t,r){let i=LI(t);if(!i)return;let o=fZ(i,\"compilerOptions\");if(o===void 0){e.insertNodeAtObjectStart(t,i,P9(\"compilerOptions\",D.createObjectLiteralExpression(r.map(([l,f])=>P9(l,f)),!0)));return}let s=o.initializer;if(rs(s))for(let[l,f]of r){let d=fZ(s,l);d===void 0?e.insertNodeAtObjectStart(t,s,P9(l,f)):e.replaceNode(t,d.initializer,f)}}function dZ(e,t,r,i){uZ(e,t,[[r,i]])}function P9(e,t){return D.createPropertyAssignment(D.createStringLiteral(e),t)}function fZ(e,t){return wr(e.properties,r=>yl(r)&&!!r.name&&yo(r.name)&&r.name.text===t)}function l1(e,t){let r,i=$e(e,o,bi);if(r&&i)return{typeNode:i,symbols:r};function o(s){if(ib(s)&&s.qualifier){let l=Yd(s.qualifier),f=j7(l.symbol,t),d=f!==l.text?lEe(s.qualifier,D.createIdentifier(f)):s.qualifier;r=Sn(r,l.symbol);let g=On(s.typeArguments,o,bi);return D.createTypeReferenceNode(d,g)}return xn(s,o,Bh)}}function lEe(e,t){return e.kind===79?t:D.createQualifiedName(lEe(e.left,t),e.right)}function cx(e,t){t.forEach(r=>e.addImportFromExportedSymbol(r,!0))}function _Z(e,t){let r=wl(t),i=Vi(e,t.start);for(;i.end<r;)i=i.parent;return i}var pZ,T9e=gt({\"src/services/codefixes/helpers.ts\"(){\"use strict\";Fr(),pZ=(e=>(e[e.Method=1]=\"Method\",e[e.Property=2]=\"Property\",e[e.All=3]=\"All\",e))(pZ||{})}});function uEe(e,t,r,i,o,s){let l=_Ee(e,t,r,i);if(!l||Ok.isRefactorErrorInfo(l))return;let f=nr.ChangeTracker.fromContext(o),{isStatic:d,isReadonly:g,fieldName:m,accessorName:v,originalName:S,type:x,container:A,declaration:w}=l;pd(m),pd(v),pd(w),pd(A);let C,P;if(Yr(A)){let B=uu(w);if(Cu(e)){let q=D.createModifiersFromModifierFlags(B);C=q,P=q}else C=D.createModifiersFromModifierFlags(A9e(B)),P=D.createModifiersFromModifierFlags(C9e(B));HS(w)&&(P=Qi(Uy(w),P))}w9e(f,e,w,x,m,P);let F=I9e(m,v,x,C,d,A);if(pd(F),pEe(f,e,F,w,A),g){let B=Vm(A);B&&R9e(f,e,B,m.text,S)}else{let B=L9e(m,v,x,C,d,A);pd(B),pEe(f,e,B,w,A)}return f.getChanges()}function S9e(e){return Re(e)||yo(e)}function x9e(e){return Ad(e,e.parent)||Na(e)||yl(e)}function dEe(e,t){return Re(t)?D.createIdentifier(e):D.createStringLiteral(e)}function fEe(e,t,r){let i=t?r.name:D.createThis();return Re(e)?D.createPropertyAccessExpression(i,e):D.createElementAccessExpression(i,D.createStringLiteralFromNode(e))}function A9e(e){return e&=-65,e&=-9,e&16||(e|=4),e}function C9e(e){return e&=-5,e&=-17,e|=8,e}function _Ee(e,t,r,i,o=!0){let s=Vi(e,r),l=r===i&&o,f=jn(s.parent,x9e),d=124;if(!f||!(HX(f.name,e,r,i)||l))return{error:uo(_.Could_not_find_property_for_which_to_generate_accessor)};if(!S9e(f.name))return{error:uo(_.Name_is_not_valid)};if((uu(f)&126975|d)!==d)return{error:uo(_.Can_only_convert_property_with_modifier)};let g=f.name.text,m=DY(g),v=dEe(m?g:i1(`_${g}`,e),f.name),S=dEe(m?i1(g.substring(1),e):g,f.name);return{isStatic:zc(f),isReadonly:jI(f),type:O9e(f,t),container:f.kind===166?f.parent.parent:f.parent,originalName:f.name.text,declaration:f,fieldName:v,accessorName:S,renameAccessor:m}}function I9e(e,t,r,i,o,s){return D.createGetAccessorDeclaration(i,t,[],r,D.createBlock([D.createReturnStatement(fEe(e,o,s))],!0))}function L9e(e,t,r,i,o,s){return D.createSetAccessorDeclaration(i,t,[D.createParameterDeclaration(void 0,void 0,D.createIdentifier(\"value\"),void 0,r)],D.createBlock([D.createExpressionStatement(D.createAssignment(fEe(e,o,s),D.createIdentifier(\"value\")))],!0))}function k9e(e,t,r,i,o,s){let l=D.updatePropertyDeclaration(r,s,o,r.questionToken||r.exclamationToken,i,r.initializer);e.replaceNode(t,r,l)}function D9e(e,t,r,i){let o=D.updatePropertyAssignment(r,i,r.initializer);(o.modifiers||o.questionToken||o.exclamationToken)&&(o===r&&(o=D.cloneNode(o)),o.modifiers=void 0,o.questionToken=void 0,o.exclamationToken=void 0),e.replacePropertyAssignment(t,r,o)}function w9e(e,t,r,i,o,s){Na(r)?k9e(e,t,r,i,o,s):yl(r)?D9e(e,t,r,o):e.replaceNode(t,r,D.updateParameterDeclaration(r,s,r.dotDotDotToken,Ga(o,Re),r.questionToken,r.type,r.initializer))}function pEe(e,t,r,i,o){Ad(i,i.parent)?e.insertMemberAtStart(t,o,r):yl(i)?e.insertNodeAfterComma(t,i,r):e.insertNodeAfter(t,i,r)}function R9e(e,t,r,i,o){r.body&&r.body.forEachChild(function s(l){Vs(l)&&l.expression.kind===108&&yo(l.argumentExpression)&&l.argumentExpression.text===o&&YI(l)&&e.replaceNode(t,l.argumentExpression,D.createStringLiteral(i)),br(l)&&l.expression.kind===108&&l.name.text===o&&YI(l)&&e.replaceNode(t,l.name,D.createIdentifier(i)),!Ia(l)&&!Yr(l)&&l.forEachChild(s)})}function O9e(e,t){let r=Mce(e);if(Na(e)&&r&&e.questionToken){let i=t.getTypeChecker(),o=i.getTypeFromTypeNode(r);if(!i.isTypeAssignableTo(i.getUndefinedType(),o)){let s=DS(r)?r.types:[r];return D.createUnionTypeNode([...s,D.createKeywordTypeNode(155)])}}return r}function mZ(e,t){let r=[];for(;e;){let i=P0(e),o=i&&t.getSymbolAtLocation(i.expression);if(!o)break;let s=o.flags&2097152?t.getAliasedSymbol(o):o,l=s.declarations&&wr(s.declarations,Yr);if(!l)break;r.push(l),e=l}return r}var N9e=gt({\"src/services/codefixes/generateAccessors.ts\"(){\"use strict\";Fr()}});function P9e(e,t){let r=Gn(t),i=VA(t),o=e.program.getCompilerOptions(),s=[];return s.push(mEe(e,r,t,Xg(i.name,void 0,t.moduleSpecifier,J_(r,e.preferences)))),Rl(o)===1&&s.push(mEe(e,r,t,D.createImportEqualsDeclaration(void 0,!1,i.name,D.createExternalModuleReference(t.moduleSpecifier)))),s}function mEe(e,t,r,i){let o=nr.ChangeTracker.with(e,s=>s.replaceNode(t,r,i));return K_(hZ,o,[_.Replace_import_with_0,o[0].textChanges[0].newText])}function M9e(e){let t=e.sourceFile,r=_.This_expression_is_not_callable.code===e.errorCode?210:211,i=jn(Vi(t,e.span.start),s=>s.kind===r);if(!i)return[];let o=i.expression;return hEe(e,o)}function F9e(e){let t=e.sourceFile,r=jn(Vi(t,e.span.start),i=>i.getStart()===e.span.start&&i.getEnd()===e.span.start+e.span.length);return r?hEe(e,r):[]}function hEe(e,t){let r=e.program.getTypeChecker().getTypeAtLocation(t);if(!(r.symbol&&Zp(r.symbol)&&r.symbol.links.originatingImport))return[];let i=[],o=r.symbol.links.originatingImport;if(Dd(o)||si(i,P9e(e,o)),ot(t)&&!(zl(t.parent)&&t.parent.name===t)){let s=e.sourceFile,l=nr.ChangeTracker.with(e,f=>f.replaceNode(s,t,D.createPropertyAccessExpression(t,\"default\"),{}));i.push(K_(hZ,l,_.Use_synthetic_default_member))}return i}var hZ,G9e=gt({\"src/services/codefixes/fixInvalidImportSyntax.ts\"(){\"use strict\";Fr(),Qa(),hZ=\"invalidImportSyntax\",za({errorCodes:[_.This_expression_is_not_callable.code,_.This_expression_is_not_constructable.code],getCodeActions:M9e}),za({errorCodes:[_.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,_.Type_0_does_not_satisfy_the_constraint_1.code,_.Type_0_is_not_assignable_to_type_1.code,_.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code,_.Type_predicate_0_is_not_assignable_to_1.code,_.Property_0_of_type_1_is_not_assignable_to_2_index_type_3.code,_._0_index_type_1_is_not_assignable_to_2_index_type_3.code,_.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2.code,_.Property_0_in_type_1_is_not_assignable_to_type_2.code,_.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property.code,_.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1.code],getCodeActions:F9e})}});function gEe(e,t){let r=Vi(e,t);if(Re(r)&&Na(r.parent)){let i=Cl(r.parent);if(i)return{type:i,prop:r.parent,isJs:Yn(r.parent)}}}function B9e(e,t){if(t.isJs)return;let r=nr.ChangeTracker.with(e,i=>yEe(i,e.sourceFile,t.prop));return Ma(M9,r,[_.Add_definite_assignment_assertion_to_property_0,t.prop.getText()],F9,_.Add_definite_assignment_assertions_to_all_uninitialized_properties)}function yEe(e,t,r){pd(r);let i=D.updatePropertyDeclaration(r,r.modifiers,r.name,D.createToken(53),r.type,r.initializer);e.replaceNode(t,r,i)}function U9e(e,t){let r=nr.ChangeTracker.with(e,i=>vEe(i,e.sourceFile,t));return Ma(M9,r,[_.Add_undefined_type_to_property_0,t.prop.name.getText()],G9,_.Add_undefined_type_to_all_uninitialized_properties)}function vEe(e,t,r){let i=D.createKeywordTypeNode(155),o=DS(r.type)?r.type.types.concat(i):[r.type,i],s=D.createUnionTypeNode(o);r.isJs?e.addJSDocTags(t,r.prop,[D.createJSDocTypeTag(void 0,D.createJSDocTypeExpression(s))]):e.replaceNode(t,r.type,s)}function V9e(e,t){if(t.isJs)return;let r=e.program.getTypeChecker(),i=EEe(r,t.prop);if(!i)return;let o=nr.ChangeTracker.with(e,s=>bEe(s,e.sourceFile,t.prop,i));return Ma(M9,o,[_.Add_initializer_to_property_0,t.prop.name.getText()],B9,_.Add_initializers_to_all_uninitialized_properties)}function bEe(e,t,r,i){pd(r);let o=D.updatePropertyDeclaration(r,r.modifiers,r.name,r.questionToken,r.type,i);e.replaceNode(t,r,o)}function EEe(e,t){return TEe(e,e.getTypeFromTypeNode(t.type))}function TEe(e,t){if(t.flags&512)return t===e.getFalseType()||t===e.getFalseType(!0)?D.createFalse():D.createTrue();if(t.isStringLiteral())return D.createStringLiteral(t.value);if(t.isNumberLiteral())return D.createNumericLiteral(t.value);if(t.flags&2048)return D.createBigIntLiteral(t.value);if(t.isUnion())return ks(t.types,r=>TEe(e,r));if(t.isClass()){let r=Nh(t.symbol);if(!r||Mr(r,256))return;let i=Vm(r);return i&&i.parameters.length?void 0:D.createNewExpression(D.createIdentifier(t.symbol.name),void 0,void 0)}else if(e.isArrayLikeType(t))return D.createArrayLiteralExpression()}var M9,F9,G9,B9,gZ,j9e=gt({\"src/services/codefixes/fixStrictClassInitialization.ts\"(){\"use strict\";Fr(),Qa(),M9=\"strictClassInitialization\",F9=\"addMissingPropertyDefiniteAssignmentAssertions\",G9=\"addMissingPropertyUndefinedType\",B9=\"addMissingPropertyInitializer\",gZ=[_.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor.code],za({errorCodes:gZ,getCodeActions:function(t){let r=gEe(t.sourceFile,t.span.start);if(!r)return;let i=[];return Sn(i,U9e(t,r)),Sn(i,B9e(t,r)),Sn(i,V9e(t,r)),i},fixIds:[F9,G9,B9],getAllCodeActions:e=>ns(e,gZ,(t,r)=>{let i=gEe(r.file,r.start);if(i)switch(e.fixId){case F9:yEe(t,r.file,i.prop);break;case G9:vEe(t,r.file,i);break;case B9:let o=e.program.getTypeChecker(),s=EEe(o,i.prop);if(!s)return;bEe(t,r.file,i.prop,s);break;default:L.fail(JSON.stringify(e.fixId))}})})}});function SEe(e,t,r){let{allowSyntheticDefaults:i,defaultImportName:o,namedImports:s,statement:l,required:f}=r;e.replaceNode(t,l,o&&!i?D.createImportEqualsDeclaration(void 0,!1,o,D.createExternalModuleReference(f)):D.createImportDeclaration(void 0,D.createImportClause(!1,o,s),f,void 0))}function xEe(e,t,r){let{parent:i}=Vi(e,r);if(!qu(i,!0))throw L.failBadSyntaxKind(i);let o=Ga(i.parent,wi),s=zr(o.name,Re),l=cm(o.name)?H9e(o.name):void 0;if(s||l)return{allowSyntheticDefaults:wT(t.getCompilerOptions()),defaultImportName:s,namedImports:l,statement:Ga(o.parent.parent,Bc),required:Vo(i.arguments)}}function H9e(e){let t=[];for(let r of e.elements){if(!Re(r.name)||r.initializer)return;t.push(D.createImportSpecifier(!1,zr(r.propertyName,Re),r.name))}if(t.length)return D.createNamedImports(t)}var U9,yZ,W9e=gt({\"src/services/codefixes/requireInTs.ts\"(){\"use strict\";Fr(),Qa(),U9=\"requireInTs\",yZ=[_.require_call_may_be_converted_to_an_import.code],za({errorCodes:yZ,getCodeActions(e){let t=xEe(e.sourceFile,e.program,e.span.start);if(!t)return;let r=nr.ChangeTracker.with(e,i=>SEe(i,e.sourceFile,t));return[Ma(U9,r,_.Convert_require_to_import,U9,_.Convert_all_require_to_import)]},fixIds:[U9],getAllCodeActions:e=>ns(e,yZ,(t,r)=>{let i=xEe(r.file,e.program,r.start);i&&SEe(t,e.sourceFile,i)})})}});function AEe(e,t){let r=Vi(e,t);if(!Re(r))return;let{parent:i}=r;if(Nl(i)&&um(i.moduleReference))return{importNode:i,name:r,moduleSpecifier:i.moduleReference.expression};if(nv(i)){let o=i.parent.parent;return{importNode:o,name:r,moduleSpecifier:o.moduleSpecifier}}}function CEe(e,t,r,i){e.replaceNode(t,r.importNode,Xg(r.name,void 0,r.moduleSpecifier,J_(t,i)))}var V9,vZ,z9e=gt({\"src/services/codefixes/useDefaultImport.ts\"(){\"use strict\";Fr(),Qa(),V9=\"useDefaultImport\",vZ=[_.Import_may_be_converted_to_a_default_import.code],za({errorCodes:vZ,getCodeActions(e){let{sourceFile:t,span:{start:r}}=e,i=AEe(t,r);if(!i)return;let o=nr.ChangeTracker.with(e,s=>CEe(s,t,i,e.preferences));return[Ma(V9,o,_.Convert_to_default_import,V9,_.Convert_all_to_default_imports)]},fixIds:[V9],getAllCodeActions:e=>ns(e,vZ,(t,r)=>{let i=AEe(r.file,r.start);i&&CEe(t,r.file,i,e.preferences)})})}});function IEe(e,t,r){let i=zr(Vi(t,r.start),Vf);if(!i)return;let o=i.getText(t)+\"n\";e.replaceNode(t,i,D.createBigIntLiteral(o))}var j9,bZ,J9e=gt({\"src/services/codefixes/useBigintLiteral.ts\"(){\"use strict\";Fr(),Qa(),j9=\"useBigintLiteral\",bZ=[_.Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers.code],za({errorCodes:bZ,getCodeActions:function(t){let r=nr.ChangeTracker.with(t,i=>IEe(i,t.sourceFile,t.span));if(r.length>0)return[Ma(j9,r,_.Convert_to_a_bigint_numeric_literal,j9,_.Convert_all_to_bigint_numeric_literals)]},fixIds:[j9],getAllCodeActions:e=>ns(e,bZ,(t,r)=>IEe(t,r.file,r))})}});function LEe(e,t){let r=Vi(e,t);return L.assert(r.kind===100,\"This token should be an ImportKeyword\"),L.assert(r.parent.kind===202,\"Token parent should be an ImportType\"),r.parent}function kEe(e,t,r){let i=D.updateImportTypeNode(r,r.argument,r.assertions,r.qualifier,r.typeArguments,!0);e.replaceNode(t,r,i)}var DEe,H9,EZ,K9e=gt({\"src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts\"(){\"use strict\";Fr(),Qa(),DEe=\"fixAddModuleReferTypeMissingTypeof\",H9=DEe,EZ=[_.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0.code],za({errorCodes:EZ,getCodeActions:function(t){let{sourceFile:r,span:i}=t,o=LEe(r,i.start),s=nr.ChangeTracker.with(t,l=>kEe(l,r,o));return[Ma(H9,s,_.Add_missing_typeof,H9,_.Add_missing_typeof)]},fixIds:[H9],getAllCodeActions:e=>ns(e,EZ,(t,r)=>kEe(t,e.sourceFile,LEe(r.file,r.start)))})}});function wEe(e,t){let o=Vi(e,t).parent.parent;if(!(!ar(o)&&(o=o.parent,!ar(o)))&&rc(o.operatorToken))return o}function REe(e,t,r){let i=q9e(r);i&&e.replaceNode(t,r,D.createJsxFragment(D.createJsxOpeningFragment(),i,D.createJsxJsxClosingFragment()))}function q9e(e){let t=[],r=e;for(;;)if(ar(r)&&rc(r.operatorToken)&&r.operatorToken.kind===27){if(t.push(r.left),Pw(r.right))return t.push(r.right),t;if(ar(r.right)){r=r.right;continue}else return}else return}var W9,TZ,X9e=gt({\"src/services/codefixes/wrapJsxInFragment.ts\"(){\"use strict\";Fr(),Qa(),W9=\"wrapJsxInFragment\",TZ=[_.JSX_expressions_must_have_one_parent_element.code],za({errorCodes:TZ,getCodeActions:function(t){let{sourceFile:r,span:i}=t,o=wEe(r,i.start);if(!o)return;let s=nr.ChangeTracker.with(t,l=>REe(l,r,o));return[Ma(W9,s,_.Wrap_in_JSX_fragment,W9,_.Wrap_all_unparented_JSX_in_JSX_fragment)]},fixIds:[W9],getAllCodeActions:e=>ns(e,TZ,(t,r)=>{let i=wEe(e.sourceFile,r.start);i&&REe(t,e.sourceFile,i)})})}});function OEe(e,t){let r=Vi(e,t),i=zr(r.parent.parent,kS);if(!i)return;let o=ku(i.parent)?i.parent:zr(i.parent.parent,Ep);if(o)return{indexSignature:i,container:o}}function Y9e(e,t){return D.createTypeAliasDeclaration(e.modifiers,e.name,e.typeParameters,t)}function NEe(e,t,{indexSignature:r,container:i}){let s=(ku(i)?i.members:i.type.members).filter(m=>!kS(m)),l=Vo(r.parameters),f=D.createTypeParameterDeclaration(void 0,Ga(l.name,Re),l.type),d=D.createMappedTypeNode(jI(r)?D.createModifier(146):void 0,f,void 0,r.questionToken,r.type,void 0),g=D.createIntersectionTypeNode([...NI(i),d,...s.length?[D.createTypeLiteralNode(s)]:Je]);e.replaceNode(t,i,Y9e(i,g))}var z9,SZ,$9e=gt({\"src/services/codefixes/convertToMappedObjectType.ts\"(){\"use strict\";Fr(),Qa(),z9=\"fixConvertToMappedObjectType\",SZ=[_.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead.code],za({errorCodes:SZ,getCodeActions:function(t){let{sourceFile:r,span:i}=t,o=OEe(r,i.start);if(!o)return;let s=nr.ChangeTracker.with(t,f=>NEe(f,r,o)),l=vr(o.container.name);return[Ma(z9,s,[_.Convert_0_to_mapped_object_type,l],z9,[_.Convert_0_to_mapped_object_type,l])]},fixIds:[z9],getAllCodeActions:e=>ns(e,SZ,(t,r)=>{let i=OEe(r.file,r.start);i&&NEe(t,r.file,i)})})}}),xZ,PEe,Q9e=gt({\"src/services/codefixes/removeAccidentalCallParentheses.ts\"(){\"use strict\";Fr(),Qa(),xZ=\"removeAccidentalCallParentheses\",PEe=[_.This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without.code],za({errorCodes:PEe,getCodeActions(e){let t=jn(Vi(e.sourceFile,e.span.start),Pa);if(!t)return;let r=nr.ChangeTracker.with(e,i=>{i.deleteRange(e.sourceFile,{pos:t.expression.end,end:t.end})});return[K_(xZ,r,_.Remove_parentheses)]},fixIds:[xZ]})}});function MEe(e,t,r){let i=zr(Vi(t,r.start),f=>f.kind===133),o=i&&zr(i.parent,v2);if(!o)return;let s=o;if(ud(o.parent)){let f=QI(o.expression,!1);if(Re(f)){let d=el(o.parent.pos,t);d&&d.kind!==103&&(s=o.parent)}}e.replaceNode(t,s,o.expression)}var J9,AZ,Z9e=gt({\"src/services/codefixes/removeUnnecessaryAwait.ts\"(){\"use strict\";Fr(),Qa(),J9=\"removeUnnecessaryAwait\",AZ=[_.await_has_no_effect_on_the_type_of_this_expression.code],za({errorCodes:AZ,getCodeActions:function(t){let r=nr.ChangeTracker.with(t,i=>MEe(i,t.sourceFile,t.span));if(r.length>0)return[Ma(J9,r,_.Remove_unnecessary_await,J9,_.Remove_all_unnecessary_uses_of_await)]},fixIds:[J9],getAllCodeActions:e=>ns(e,AZ,(t,r)=>MEe(t,r.file,r))})}});function FEe(e,t){return jn(Vi(e,t.start),gl)}function GEe(e,t,r){if(!t)return;let i=L.checkDefined(t.importClause);e.replaceNode(r.sourceFile,t,D.updateImportDeclaration(t,t.modifiers,D.updateImportClause(i,i.isTypeOnly,i.name,void 0),t.moduleSpecifier,t.assertClause)),e.insertNodeAfter(r.sourceFile,t,D.createImportDeclaration(void 0,D.updateImportClause(i,i.isTypeOnly,void 0,i.namedBindings),t.moduleSpecifier,t.assertClause))}var CZ,K9,eGe=gt({\"src/services/codefixes/splitTypeOnlyImport.ts\"(){\"use strict\";Fr(),Qa(),CZ=[_.A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both.code],K9=\"splitTypeOnlyImport\",za({errorCodes:CZ,fixIds:[K9],getCodeActions:function(t){let r=nr.ChangeTracker.with(t,i=>GEe(i,FEe(t.sourceFile,t.span),t));if(r.length)return[Ma(K9,r,_.Split_into_two_separate_import_declarations,K9,_.Split_all_invalid_type_only_imports)]},getAllCodeActions:e=>ns(e,CZ,(t,r)=>{GEe(t,FEe(e.sourceFile,r),e)})})}});function BEe(e,t,r){var i;let s=r.getTypeChecker().getSymbolAtLocation(Vi(e,t));if(s===void 0)return;let l=zr((i=s?.valueDeclaration)==null?void 0:i.parent,pu);if(l===void 0)return;let f=Yo(l,85,e);if(f!==void 0)return{symbol:s,token:f}}function UEe(e,t,r){e.replaceNode(t,r,D.createToken(119))}var q9,IZ,tGe=gt({\"src/services/codefixes/convertConstToLet.ts\"(){\"use strict\";Fr(),Qa(),q9=\"fixConvertConstToLet\",IZ=[_.Cannot_assign_to_0_because_it_is_a_constant.code],za({errorCodes:IZ,getCodeActions:function(t){let{sourceFile:r,span:i,program:o}=t,s=BEe(r,i.start,o);if(s===void 0)return;let l=nr.ChangeTracker.with(t,f=>UEe(f,r,s.token));return[D$(q9,l,_.Convert_const_to_let,q9,_.Convert_all_const_to_let)]},getAllCodeActions:e=>{let{program:t}=e,r=new Map;return ix(nr.ChangeTracker.with(e,i=>{ax(e,IZ,o=>{let s=BEe(o.file,o.start,t);if(s&&V_(r,$a(s.symbol)))return UEe(i,o.file,s.token)})}))},fixIds:[q9]})}});function VEe(e,t,r){let i=Vi(e,t);return i.kind===26&&i.parent&&(rs(i.parent)||fu(i.parent))?{node:i}:void 0}function jEe(e,t,{node:r}){let i=D.createToken(27);e.replaceNode(t,r,i)}var X9,HEe,LZ,nGe=gt({\"src/services/codefixes/fixExpectedComma.ts\"(){\"use strict\";Fr(),Qa(),X9=\"fixExpectedComma\",HEe=_._0_expected.code,LZ=[HEe],za({errorCodes:LZ,getCodeActions(e){let{sourceFile:t}=e,r=VEe(t,e.span.start,e.errorCode);if(!r)return;let i=nr.ChangeTracker.with(e,o=>jEe(o,t,r));return[Ma(X9,i,[_.Change_0_to_1,\";\",\",\"],X9,[_.Change_0_to_1,\";\",\",\"])]},fixIds:[X9],getAllCodeActions:e=>ns(e,LZ,(t,r)=>{let i=VEe(r.file,r.start,r.code);i&&jEe(t,e.sourceFile,i)})})}});function WEe(e,t,r,i,o){let s=Vi(t,r.start);if(!Re(s)||!Pa(s.parent)||s.parent.expression!==s||s.parent.arguments.length!==0)return;let l=i.getTypeChecker(),f=l.getSymbolAtLocation(s),d=f?.valueDeclaration;if(!d||!ha(d)||!z0(d.parent.parent)||o?.has(d))return;o?.add(d);let g=rGe(d.parent.parent);if(vt(g)){let m=g[0],v=!DS(m)&&!wS(m)&&wS(D.createUnionTypeNode([m,D.createKeywordTypeNode(114)]).types[0]);v&&e.insertText(t,m.pos,\"(\"),e.insertText(t,m.end,v?\") | void\":\" | void\")}else{let m=l.getResolvedSignature(s.parent),v=m?.parameters[0],S=v&&l.getTypeOfSymbolAtLocation(v,d.parent.parent);Yn(d)?(!S||S.flags&3)&&(e.insertText(t,d.parent.parent.end,\")\"),e.insertText(t,xo(t.text,d.parent.parent.pos),\"/** @type {Promise<void>} */(\")):(!S||S.flags&2)&&e.insertText(t,d.parent.parent.expression.end,\"<void>\")}}function rGe(e){var t;if(Yn(e)){if(ud(e.parent)){let r=(t=x0(e.parent))==null?void 0:t.typeExpression.type;if(r&&m_(r)&&Re(r.typeName)&&vr(r.typeName)===\"Promise\")return r.typeArguments}}else return e.typeArguments}var zEe,kZ,DZ,iGe=gt({\"src/services/codefixes/fixAddVoidToPromise.ts\"(){\"use strict\";Fr(),Qa(),zEe=\"addVoidToPromise\",kZ=\"addVoidToPromise\",DZ=[_.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments.code,_.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise.code],za({errorCodes:DZ,fixIds:[kZ],getCodeActions(e){let t=nr.ChangeTracker.with(e,r=>WEe(r,e.sourceFile,e.span,e.program));if(t.length>0)return[Ma(zEe,t,_.Add_void_to_Promise_resolved_without_a_value,kZ,_.Add_void_to_all_Promises_resolved_without_a_value)]},getAllCodeActions(e){return ns(e,DZ,(t,r)=>WEe(t,r.file,r,e.program,new Set))}})}}),gu={};Mo(gu,{PreserveOptionalFlags:()=>pZ,addNewNodeForMemberSymbol:()=>iEe,codeFixAll:()=>ns,createCodeFixAction:()=>Ma,createCodeFixActionMaybeFixAll:()=>D$,createCodeFixActionWithoutFixAll:()=>K_,createCombinedCodeActions:()=>ix,createFileTextChanges:()=>_ve,createImportAdder:()=>s1,createImportSpecifierResolver:()=>v7e,createJsonPropertyAssignment:()=>P9,createMissingMemberNodes:()=>oZ,createSignatureDeclarationFromCallExpression:()=>sZ,createSignatureDeclarationFromSignature:()=>O9,createStubbedBody:()=>fP,eachDiagnostic:()=>ax,findAncestorMatchingSpan:()=>_Z,findJsonProperty:()=>fZ,generateAccessorFromProperty:()=>uEe,getAccessorConvertiblePropertyAtPosition:()=>_Ee,getAllFixes:()=>nFe,getAllSupers:()=>mZ,getArgumentTypesAndTypeParameters:()=>sEe,getFixes:()=>tFe,getImportCompletionAction:()=>b7e,getImportKind:()=>rQ,getNoopSymbolTrackerWithResolver:()=>sx,getPromoteTypeOnlyCompletionAction:()=>E7e,getSupportedErrorCodes:()=>Z3e,importFixName:()=>lQ,importSymbols:()=>cx,moduleSpecifierToValidIdentifier:()=>cQ,moduleSymbolToValidIdentifier:()=>sQ,parameterShouldGetTypeFromJSDoc:()=>Rve,registerCodeFix:()=>za,setJsonCompilerOptionValue:()=>dZ,setJsonCompilerOptionValues:()=>uZ,tryGetAutoImportableReferenceFromTypeNode:()=>l1,typeToAutoImportableTypeNode:()=>N9});var Qa=gt({\"src/services/_namespaces/ts.codefix.ts\"(){\"use strict\";rFe(),iFe(),aFe(),cFe(),_Fe(),gFe(),yFe(),vFe(),bFe(),xFe(),NFe(),MFe(),KFe(),d7e(),f7e(),p7e(),m7e(),h7e(),y7e(),V7e(),W7e(),K7e(),q7e(),X7e(),Q7e(),t5e(),i5e(),l5e(),v5e(),E5e(),T5e(),x5e(),A5e(),C5e(),I5e(),k5e(),D5e(),w5e(),R5e(),O5e(),P5e(),G5e(),j5e(),Y5e(),Q5e(),Z5e(),n9e(),r9e(),a9e(),o9e(),p9e(),m9e(),h9e(),T9e(),N9e(),G9e(),j9e(),W9e(),z9e(),J9e(),K9e(),X9e(),$9e(),Q9e(),Z9e(),eGe(),tGe(),nGe(),iGe()}});function aGe(e){return!!(e.kind&1)}function oGe(e){return!!(e.kind&2)}function _P(e){return!!(e&&e.kind&4)}function eC(e){return!!(e&&e.kind===32)}function sGe(e){return _P(e)||eC(e)||wZ(e)}function cGe(e){return(_P(e)||eC(e))&&!!e.isFromPackageJson}function lGe(e){return!!(e.kind&8)}function uGe(e){return!!(e.kind&16)}function JEe(e){return!!(e&&e.kind&64)}function KEe(e){return!!(e&&e.kind&128)}function dGe(e){return!!(e&&e.kind&256)}function wZ(e){return!!(e&&e.kind&512)}function qEe(e,t,r,i,o,s,l,f,d){var g,m,v;let S=Ms(),x=l||bS($s(i.getCompilerOptions())),A=!1,w=0,C=0,P=0,F=0,B=d({tryResolve:W,skippedAny:()=>A,resolvedAny:()=>C>0,resolvedBeyondLimit:()=>C>iG}),q=F?` (${(P/F*100).toFixed(1)}% hit rate)`:\"\";return(g=t.log)==null||g.call(t,`${e}: resolved ${C} module specifiers, plus ${w} ambient and ${P} from cache${q}`),(m=t.log)==null||m.call(t,`${e}: response is ${A?\"incomplete\":\"complete\"}`),(v=t.log)==null||v.call(t,`${e}: ${Ms()-S}`),B;function W(Y,R){if(R){let Z=r.getModuleSpecifierForBestExportInfo(Y,o,f);return Z&&w++,Z||\"failed\"}let ie=x||s.allowIncompleteCompletions&&C<iG,$=!ie&&s.allowIncompleteCompletions&&F<jZ,fe=ie||$?r.getModuleSpecifierForBestExportInfo(Y,o,f,$):void 0;return(!ie&&!$||$&&!fe)&&(A=!0),C+=fe?.computedWithoutCacheCount||0,P+=Y.length-(fe?.computedWithoutCacheCount||0),$&&F++,fe||(x?\"failed\":\"skipped\")}}function fGe(e,t,r,i,o,s,l,f,d,g,m=!1){var v;let{previousToken:S}=Q9(o,i);if(l&&!n1(i,o,S)&&!JGe(i,l,S,o))return;if(l===\" \")return s.includeCompletionsForImportStatements&&s.includeCompletionsWithInsertText?{isGlobalCompletion:!0,isMemberCompletion:!1,isNewIdentifierLocation:!0,isIncomplete:!0,entries:[]}:void 0;let x=t.getCompilerOptions(),A=s.allowIncompleteCompletions?(v=e.getIncompleteCompletionsCache)==null?void 0:v.call(e):void 0;if(A&&f===3&&S&&Re(S)){let P=_Ge(A,i,S,t,e,s,d,o);if(P)return P}else A?.clear();let w=aG.getStringLiteralCompletions(i,o,S,x,e,t,r,s,m);if(w)return w;if(S&&hI(S.parent)&&(S.kind===81||S.kind===86||S.kind===79))return wGe(S.parent);let C=iTe(t,r,i,x,o,s,void 0,e,g,d);if(C)switch(C.kind){case 0:let P=gGe(i,e,t,x,r,C,s,g,o,m);return P?.isIncomplete&&A?.set(P),P;case 1:return RZ(xb.getJSDocTagNameCompletions());case 2:return RZ(xb.getJSDocTagCompletions());case 3:return RZ(xb.getJSDocParameterNameCompletions(C.tag));case 4:return mGe(C.keywordCompletions,C.isNewIdentifierLocation);default:return L.assertNever(C)}}function pP(e,t){var r,i;let o=XD(e.sortText,t.sortText);return o===0&&(o=XD(e.name,t.name)),o===0&&((r=e.data)!=null&&r.moduleSpecifier)&&((i=t.data)!=null&&i.moduleSpecifier)&&(o=BR(e.data.moduleSpecifier,t.data.moduleSpecifier)),o===0?-1:o}function XEe(e){return!!e?.moduleSpecifier}function _Ge(e,t,r,i,o,s,l,f){let d=e.get();if(!d)return;let g=ef(t,f),m=r.text.toLowerCase(),v=YN(t,o,i,s,l),S=qEe(\"continuePreviousIncompleteResponse\",o,gu.createImportSpecifierResolver(t,i,o,s),i,r.getStart(),s,!1,TS(r),x=>{let A=Zi(d.entries,w=>{var C;if(!w.hasAction||!w.source||!w.data||XEe(w.data))return w;if(!gTe(w.name,m))return;let{origin:P}=L.checkDefined(aTe(w.name,w.data,i,o)),F=v.get(t.path,w.data.exportMapKey),B=F&&x.tryResolve(F,!fl(u_(P.moduleSymbol.name)));if(B===\"skipped\")return w;if(!B||B===\"failed\"){(C=o.log)==null||C.call(o,`Unexpected failure resolving auto import for '${w.name}' from '${w.source}'`);return}let q={...P,kind:32,moduleSpecifier:B.moduleSpecifier};return w.data=tTe(q),w.source=PZ(q),w.sourceDisplay=[tf(q.moduleSpecifier)],w});return x.skippedAny()||(d.isIncomplete=void 0),A});return d.entries=S,d.flags=(d.flags||0)|4,d.optionalReplacementSpan=$Ee(g),d}function RZ(e){return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!1,entries:e}}function pGe(e){return{name:Xa(e),kind:\"keyword\",kindModifiers:\"\",sortText:Pl.GlobalsOrKeywords}}function mGe(e,t){return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:t,entries:e.slice()}}function YEe(e,t,r){return{kind:4,keywordCompletions:oTe(e,t),isNewIdentifierLocation:r}}function hGe(e){switch(e){case 154:return 8;default:L.fail(\"Unknown mapping from SyntaxKind to KeywordCompletionFilters\")}}function $Ee(e){return e?.kind===79?Du(e):void 0}function gGe(e,t,r,i,o,s,l,f,d,g){let{symbols:m,contextToken:v,completionKind:S,isInSnippetScope:x,isNewIdentifierLocation:A,location:w,propertyAccessToConvert:C,keywordFilters:P,symbolToOriginInfoMap:F,recommendedCompletion:B,isJsxInitializer:q,isTypeOnlyLocation:W,isJsxIdentifierExpected:Y,isRightOfOpenTag:R,isRightOfDotOrQuestionDot:ie,importStatementCompletion:$,insideJsDocTagTypeExpression:fe,symbolToSortTextMap:Z,hasUnresolvedAutoImports:U}=s,re=s.literals,le=r.getTypeChecker();if(RR(e.scriptKind)===1){let ke=vGe(w,e);if(ke)return ke}let _e=jn(v,CL);if(_e&&(Pue(v)||AT(v,_e.expression))){let ke=J7(le,_e.parent.clauses);re=re.filter(Pe=>!ke.hasValue(Pe)),m.forEach((Pe,Ce)=>{if(Pe.valueDeclaration&&q0(Pe.valueDeclaration)){let Ie=le.getConstantValue(Pe.valueDeclaration);Ie!==void 0&&ke.hasValue(Ie)&&(F[Ce]={kind:256})}})}let ge=MU(),X=QEe(e,i);if(X&&!A&&(!m||m.length===0)&&P===0)return;let Ve=MZ(m,ge,void 0,v,w,d,e,t,r,Do(i),o,S,l,i,f,W,C,Y,q,$,B,F,Z,Y,R,g);if(P!==0)for(let ke of oTe(P,!fe&&Cu(e)))(W&&ik(lT(ke.name))||!Ve.has(ke.name))&&(Ve.add(ke.name),Ny(ge,ke,pP,!0));for(let ke of VGe(v,d))Ve.has(ke.name)||(Ve.add(ke.name),Ny(ge,ke,pP,!0));for(let ke of re){let Pe=EGe(e,l,ke);Ve.add(Pe.name),Ny(ge,Pe,pP,!0)}X||bGe(e,w.pos,Ve,Do(i),ge);let we;if(l.includeCompletionsWithInsertText&&v&&!R&&!ie&&(we=jn(v,hO))){let ke=ZEe(we,e,l,i,t,r,f);ke&&ge.push(ke.entry)}return{flags:s.flags,isGlobalCompletion:x,isIncomplete:l.allowIncompleteCompletions&&U?!0:void 0,isMemberCompletion:yGe(S),isNewIdentifierLocation:A,optionalReplacementSpan:$Ee(w),entries:ge}}function QEe(e,t){return!Cu(e)||!!HR(e,t)}function ZEe(e,t,r,i,o,s,l){let f=e.clauses,d=s.getTypeChecker(),g=d.getTypeAtLocation(e.parent.expression);if(g&&g.isUnion()&&Ji(g.types,m=>m.isLiteral())){let m=J7(d,f),v=Do(i),S=J_(t,r),x=gu.createImportAdder(t,s,r,o),A=[];for(let W of g.types)if(W.flags&1024){L.assert(W.symbol,\"An enum member type should have a symbol\"),L.assert(W.symbol.parent,\"An enum member type should have a parent symbol (the enum symbol)\");let Y=W.symbol.valueDeclaration&&d.getConstantValue(W.symbol.valueDeclaration);if(Y!==void 0){if(m.hasValue(Y))continue;m.addValue(Y)}let R=gu.typeToAutoImportableTypeNode(d,x,W,e,v);if(!R)return;let ie=Y9(R,v,S);if(!ie)return;A.push(ie)}else if(!m.hasValue(W.value))switch(typeof W.value){case\"object\":A.push(W.value.negative?D.createPrefixUnaryExpression(40,D.createBigIntLiteral({negative:!1,base10Value:W.value.base10Value})):D.createBigIntLiteral(W.value));break;case\"number\":A.push(W.value<0?D.createPrefixUnaryExpression(40,D.createNumericLiteral(-W.value)):D.createNumericLiteral(W.value));break;case\"string\":A.push(D.createStringLiteral(W.value,S===0));break}if(A.length===0)return;let w=on(A,W=>D.createCaseClause(W,[])),C=bb(o,l?.options),P=NZ({removeComments:!0,module:i.module,target:i.target,newLine:XN(C)}),F=l?W=>P.printAndFormatNode(4,W,t,l):W=>P.printNode(4,W,t),B=on(w,(W,Y)=>r.includeCompletionsWithSnippetText?`${F(W)}$${Y+1}`:`${F(W)}`).join(C);return{entry:{name:`${P.printNode(4,w[0],t)} ...`,kind:\"\",sortText:Pl.GlobalsOrKeywords,insertText:B,hasAction:x.hasFixes()||void 0,source:\"SwitchCases/\",isSnippet:r.includeCompletionsWithSnippetText?!0:void 0},importAdder:x}}}function Y9(e,t,r){switch(e.kind){case 180:let i=e.typeName;return $9(i,t,r);case 196:let o=Y9(e.objectType,t,r),s=Y9(e.indexType,t,r);return o&&s&&D.createElementAccessExpression(o,s);case 198:let l=e.literal;switch(l.kind){case 10:return D.createStringLiteral(l.text,r===0);case 8:return D.createNumericLiteral(l.text,l.numericLiteralFlags)}return;case 193:let f=Y9(e.type,t,r);return f&&(Re(f)?f:D.createParenthesizedExpression(f));case 183:return $9(e.exprName,t,r);case 202:L.fail(\"We should not get an import type after calling 'codefix.typeToAutoImportableTypeNode'.\")}}function $9(e,t,r){if(Re(e))return e;let i=Gi(e.right.escapedText);return HW(i,t)?D.createPropertyAccessExpression($9(e.left,t,r),i):D.createElementAccessExpression($9(e.left,t,r),D.createStringLiteral(i,r===0))}function yGe(e){switch(e){case 0:case 3:case 2:return!0;default:return!1}}function vGe(e,t){let r=jn(e,i=>{switch(i.kind){case 284:return!0;case 43:case 31:case 79:case 208:return!1;default:return\"quit\"}});if(r){let i=!!Yo(r,31,t),l=r.parent.openingElement.tagName.getText(t)+(i?\"\":\">\"),f=Du(r.tagName),d={name:l,kind:\"class\",kindModifiers:void 0,sortText:Pl.LocationPriority};return{isGlobalCompletion:!1,isMemberCompletion:!0,isNewIdentifierLocation:!1,optionalReplacementSpan:f,entries:[d]}}}function bGe(e,t,r,i,o){p$(e).forEach((s,l)=>{if(s===t)return;let f=Gi(l);!r.has(f)&&i_(f,i)&&(r.add(f),Ny(o,{name:f,kind:\"warning\",kindModifiers:\"\",sortText:Pl.JavascriptIdentifiers,isFromUncheckedFile:!0},pP))})}function OZ(e,t,r){return typeof r==\"object\"?j0(r)+\"n\":Ta(r)?ck(e,t,r):JSON.stringify(r)}function EGe(e,t,r){return{name:OZ(e,t,r),kind:\"string\",kindModifiers:\"\",sortText:Pl.LocationPriority}}function TGe(e,t,r,i,o,s,l,f,d,g,m,v,S,x,A,w,C,P,F,B,q,W,Y,R){let ie,$=eY(r),fe,Z,U=PZ(v),re,le,_e,ge=d.getTypeChecker(),X=v&&uGe(v),Ve=v&&oGe(v)||m;if(v&&aGe(v))ie=m?`this${X?\"?.\":\"\"}[${nTe(l,F,g)}]`:`this${X?\"?.\":\".\"}${g}`;else if((Ve||X)&&x){ie=Ve?m?`[${nTe(l,F,g)}]`:`[${g}]`:g,(X||x.questionDotToken)&&(ie=`?.${ie}`);let we=Yo(x,24,l)||Yo(x,28,l);if(!we)return;let ke=na(g,x.name.text)?x.name.end:we.end;$=Wc(we.getStart(l),ke)}if(A&&(ie===void 0&&(ie=g),ie=`{${ie}}`,typeof A!=\"boolean\"&&($=Du(A,l))),v&&lGe(v)&&x){ie===void 0&&(ie=g);let we=el(x.pos,l),ke=\"\";we&&N7(we.end,we.parent,l)&&(ke=\";\"),ke+=`(await ${x.expression.getText()})`,ie=m?`${ke}${ie}`:`${ke}${X?\"?.\":\".\"}${ie}`;let Ce=zr(x.parent,v2)?x.parent:x.expression;$=Wc(Ce.getStart(l),x.end)}if(eC(v)&&(re=[tf(v.moduleSpecifier)],w&&({insertText:ie,replacementSpan:$}=kGe(g,w,v,C,l,P,F),Z=F.includeCompletionsWithSnippetText?!0:void 0)),v?.kind===64&&(le=!0),F.includeCompletionsWithClassMemberSnippets&&F.includeCompletionsWithInsertText&&B===3&&SGe(e,o,l)){let we;({insertText:ie,isSnippet:Z,importAdder:we,replacementSpan:$}=eTe(f,d,P,F,g,e,o,s,i,q)),t=Pl.ClassMemberSnippets,we?.hasFixes()&&(le=!0,U=\"ClassMemberSnippet/\")}if(v&&KEe(v)&&({insertText:ie,isSnippet:Z,labelDetails:_e}=v,F.useLabelDetailsInCompletionEntries||(g=g+_e.detail,_e=void 0),U=\"ObjectLiteralMethodSnippet/\",t=Pl.SortBelow(t)),W&&!Y&&F.includeCompletionsWithSnippetText&&F.jsxAttributeCompletionStyle&&F.jsxAttributeCompletionStyle!==\"none\"&&!(Sp(o.parent)&&o.parent.initializer)){let we=F.jsxAttributeCompletionStyle===\"braces\",ke=ge.getTypeOfSymbolAtLocation(e,o);F.jsxAttributeCompletionStyle===\"auto\"&&!(ke.flags&528)&&!(ke.flags&1048576&&wr(ke.types,Pe=>!!(Pe.flags&528)))&&(ke.flags&402653316||ke.flags&1048576&&Ji(ke.types,Pe=>!!(Pe.flags&402686084||Nhe(Pe)))?(ie=`${OT(g)}=${ck(l,F,\"$1\")}`,Z=!0):we=!0),we&&(ie=`${OT(g)}={$1}`,Z=!0)}if(!(ie!==void 0&&!F.includeCompletionsWithInsertText))return(_P(v)||eC(v))&&(fe=tTe(v),le=!w),{name:g,kind:$g.getSymbolKind(ge,e,o),kindModifiers:$g.getSymbolModifiers(ge,e),sortText:t,source:U,hasAction:le?!0:void 0,isRecommended:DGe(e,S,ge)||void 0,insertText:ie,replacementSpan:$,sourceDisplay:re,labelDetails:_e,isSnippet:Z,isPackageJsonImport:cGe(v)||void 0,isImportStatementCompletion:!!w||void 0,data:fe,...R?{symbol:e}:void 0}}function SGe(e,t,r){return Yn(t)?!1:!!(e.flags&106500)&&(Yr(t)||t.parent&&t.parent.parent&&_l(t.parent)&&t===t.parent.name&&t.parent.getLastToken(r)===t.parent.name&&Yr(t.parent.parent)||t.parent&&A2(t)&&Yr(t.parent))}function eTe(e,t,r,i,o,s,l,f,d,g){let m=jn(l,Yr);if(!m)return{insertText:o};let v,S,x=o,A=t.getTypeChecker(),w=l.getSourceFile(),C=NZ({removeComments:!0,module:r.module,target:r.target,omitTrailingSemicolon:!1,newLine:XN(bb(e,g?.options))}),P=gu.createImportAdder(w,t,i,e),F;if(i.includeCompletionsWithSnippetText){v=!0;let ie=D.createEmptyStatement();F=D.createBlock([ie],!0),Ez(ie,{kind:0,order:0})}else F=D.createBlock([],!0);let B=0,{modifiers:q,span:W}=xGe(d,w,f),Y=!!(q&256),R=[];return gu.addNewNodeForMemberSymbol(s,m,w,{program:t,host:e},i,P,ie=>{let $=0;Y&&($|=256),_l(ie)&&A.getMemberOverrideModifierStatus(m,ie,s)===1&&($|=16384),R.length||(B=ie.modifierFlagsCache|$|q),ie=D.updateModifiers(ie,B),R.push(ie)},F,gu.PreserveOptionalFlags.Property,Y),R.length&&(S=W,g?x=C.printAndFormatSnippetList(131073,D.createNodeArray(R),w,g):x=C.printSnippetList(131073,D.createNodeArray(R),w)),{insertText:x,isSnippet:v,importAdder:P,replacementSpan:S}}function xGe(e,t,r){if(!e||Gs(t,r).line>Gs(t,e.getEnd()).line)return{modifiers:0};let i=0,o,s;return(s=AGe(e))&&(i|=gS(s),o=Du(e)),Na(e.parent)&&(i|=im(e.parent.modifiers)&126975,o=Du(e.parent)),{modifiers:i,span:o}}function AGe(e){if(Ha(e))return e.kind;if(Re(e)){let t=nb(e);if(t&&Rg(t))return t}}function CGe(e,t,r,i,o,s,l,f){let d=l.includeCompletionsWithSnippetText||void 0,g=t,m=r.getSourceFile(),v=IGe(e,r,m,i,o,l);if(!v)return;let S=NZ({removeComments:!0,module:s.module,target:s.target,omitTrailingSemicolon:!1,newLine:XN(bb(o,f?.options))});f?g=S.printAndFormatSnippetList(80,D.createNodeArray([v],!0),m,f):g=S.printSnippetList(80,D.createNodeArray([v],!0),m);let x=nE({removeComments:!0,module:s.module,target:s.target,omitTrailingSemicolon:!0}),A=D.createMethodSignature(void 0,\"\",v.questionToken,v.typeParameters,v.parameters,v.type),w={detail:x.printNode(4,A,m)};return{isSnippet:d,insertText:g,labelDetails:w}}function IGe(e,t,r,i,o,s){let l=e.getDeclarations();if(!(l&&l.length))return;let f=i.getTypeChecker(),d=l[0],g=cc(sa(d),!1),m=f.getWidenedType(f.getTypeOfSymbolAtLocation(e,t)),S=33554432|(J_(r,s)===0?268435456:0);switch(d.kind){case 168:case 169:case 170:case 171:{let x=m.flags&1048576&&m.types.length<10?f.getUnionType(m.types,2):m;if(x.flags&1048576){let F=Pr(x.types,B=>f.getSignaturesOfType(B,0).length>0);if(F.length===1)x=F[0];else return}if(f.getSignaturesOfType(x,0).length!==1)return;let w=f.typeToTypeNode(x,t,S,gu.getNoopSymbolTrackerWithResolver({program:i,host:o}));if(!w||!Jm(w))return;let C;if(s.includeCompletionsWithSnippetText){let F=D.createEmptyStatement();C=D.createBlock([F],!0),Ez(F,{kind:0,order:0})}else C=D.createBlock([],!0);let P=w.parameters.map(F=>D.createParameterDeclaration(void 0,F.dotDotDotToken,F.name,void 0,void 0,F.initializer));return D.createMethodDeclaration(void 0,void 0,g,void 0,void 0,P,void 0,C)}default:return}}function NZ(e){let t,r=nr.createWriter(db(e)),i=nE(e,r),o={...r,write:S=>s(S,()=>r.write(S)),nonEscapingWrite:r.write,writeLiteral:S=>s(S,()=>r.writeLiteral(S)),writeStringLiteral:S=>s(S,()=>r.writeStringLiteral(S)),writeSymbol:(S,x)=>s(S,()=>r.writeSymbol(S,x)),writeParameter:S=>s(S,()=>r.writeParameter(S)),writeComment:S=>s(S,()=>r.writeComment(S)),writeProperty:S=>s(S,()=>r.writeProperty(S))};return{printSnippetList:l,printAndFormatSnippetList:d,printNode:g,printAndFormatNode:v};function s(S,x){let A=OT(S);if(A!==S){let w=r.getTextPos();x();let C=r.getTextPos();t=Sn(t||(t=[]),{newText:A,span:{start:w,length:C-w}})}else x()}function l(S,x,A){let w=f(S,x,A);return t?nr.applyChanges(w,t):w}function f(S,x,A){return t=void 0,o.clear(),i.writeList(S,x,A,o),o.getText()}function d(S,x,A,w){let C={text:f(S,x,A),getLineAndCharacterOfPosition(q){return Gs(this,q)}},P=z7(w,A),F=Uo(x,q=>{let W=nr.assignPositionsToNode(q);return tl.formatNodeGivenIndentation(W,C,A.languageVariant,0,0,{...w,options:P})}),B=t?Ag(Qi(F,t),(q,W)=>f8(q.span,W.span)):F;return nr.applyChanges(C.text,B)}function g(S,x,A){let w=m(S,x,A);return t?nr.applyChanges(w,t):w}function m(S,x,A){return t=void 0,o.clear(),i.writeNode(S,x,A,o),o.getText()}function v(S,x,A,w){let C={text:m(S,x,A),getLineAndCharacterOfPosition(W){return Gs(this,W)}},P=z7(w,A),F=nr.assignPositionsToNode(x),B=tl.formatNodeGivenIndentation(F,C,A.languageVariant,0,0,{...w,options:P}),q=t?Ag(Qi(B,t),(W,Y)=>f8(W.span,Y.span)):B;return nr.applyChanges(C.text,q)}}function tTe(e){let t=e.fileName?void 0:u_(e.moduleSymbol.name),r=e.isFromPackageJson?!0:void 0;return eC(e)?{exportName:e.exportName,exportMapKey:e.exportMapKey,moduleSpecifier:e.moduleSpecifier,ambientModuleName:t,fileName:e.fileName,isPackageJsonImport:r}:{exportName:e.exportName,exportMapKey:e.exportMapKey,fileName:e.fileName,ambientModuleName:e.fileName?void 0:u_(e.moduleSymbol.name),isPackageJsonImport:e.isFromPackageJson?!0:void 0}}function LGe(e,t,r){let i=e.exportName===\"default\",o=!!e.isPackageJsonImport;return XEe(e)?{kind:32,exportName:e.exportName,exportMapKey:e.exportMapKey,moduleSpecifier:e.moduleSpecifier,symbolName:t,fileName:e.fileName,moduleSymbol:r,isDefaultExport:i,isFromPackageJson:o}:{kind:4,exportName:e.exportName,exportMapKey:e.exportMapKey,symbolName:t,fileName:e.fileName,moduleSymbol:r,isDefaultExport:i,isFromPackageJson:o}}function kGe(e,t,r,i,o,s,l){let f=t.replacementSpan,d=ck(o,l,OT(r.moduleSpecifier)),g=r.isDefaultExport?1:r.exportName===\"export=\"?2:0,m=l.includeCompletionsWithSnippetText?\"$1\":\"\",v=gu.getImportKind(o,g,s,!0),S=t.couldBeTypeOnlyImportSpecifier,x=t.isTopLevelTypeOnly?` ${Xa(154)} `:\" \",A=S?`${Xa(154)} `:\"\",w=i?\";\":\"\";switch(v){case 3:return{replacementSpan:f,insertText:`import${x}${OT(e)}${m} = require(${d})${w}`};case 1:return{replacementSpan:f,insertText:`import${x}${OT(e)}${m} from ${d}${w}`};case 2:return{replacementSpan:f,insertText:`import${x}* as ${OT(e)} from ${d}${w}`};case 0:return{replacementSpan:f,insertText:`import${x}{ ${A}${OT(e)}${m} } from ${d}${w}`}}}function nTe(e,t,r){return/^\\d+$/.test(r)?r:ck(e,t,r)}function DGe(e,t,r){return e===t||!!(e.flags&1048576)&&r.getExportSymbolOfSymbol(e)===t}function PZ(e){if(_P(e))return u_(e.moduleSymbol.name);if(eC(e))return e.moduleSpecifier;if(e?.kind===1)return\"ThisProperty/\";if(e?.kind===64)return\"TypeOnlyAlias/\"}function MZ(e,t,r,i,o,s,l,f,d,g,m,v,S,x,A,w,C,P,F,B,q,W,Y,R,ie,$=!1){var fe;let Z=Ms(),U=$Ge(o),re=P7(l),le=d.getTypeChecker(),_e=new Map;for(let X=0;X<e.length;X++){let Ve=e[X],we=W?.[X],ke=Z9(Ve,g,we,v,!!P);if(!ke||_e.get(ke.name)&&(!we||!KEe(we))||v===1&&Y&&!ge(Ve,Y))continue;let{name:Pe,needsConvertPropertyAccess:Ce}=ke,Ie=(fe=Y?.[$a(Ve)])!=null?fe:Pl.LocationPriority,Be=ZGe(Ve,le)?Pl.Deprecated(Ie):Ie,Ne=TGe(Ve,Be,r,i,o,s,l,f,d,Pe,Ce,we,q,C,F,B,re,x,S,v,A,R,ie,$);if(!Ne)continue;let Le=(!we||JEe(we))&&!(Ve.parent===void 0&&!vt(Ve.declarations,Ye=>Ye.getSourceFile()===o.getSourceFile()));_e.set(Pe,Le),Ny(t,Ne,pP,!0)}return m(\"getCompletionsAtPosition: getCompletionEntriesFromSymbols: \"+(Ms()-Z)),{has:X=>_e.has(X),add:X=>_e.set(X,!0)};function ge(X,Ve){let we=X.flags;if(!Li(o)){if(pc(o.parent))return!0;if(U&&X.valueDeclaration===U)return!1;let ke=wd(X,le);if(l.externalModuleIndicator&&!x.allowUmdGlobalAccess&&Ve[$a(X)]===Pl.GlobalsOrKeywords&&(Ve[$a(ke)]===Pl.AutoImportSuggestions||Ve[$a(ke)]===Pl.LocationPriority))return!1;if(we|=XI(ke),i7(o))return!!(we&1920);if(w)return VZ(X,le)}return!!(we&111551)}}function wGe(e){let t=RGe(e);if(t.length)return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!1,entries:t}}function RGe(e){let t=[],r=new Map,i=e;for(;i&&!Ia(i);){if(J0(i)){let o=i.label.text;r.has(o)||(r.set(o,!0),t.push({name:o,kindModifiers:\"\",kind:\"label\",sortText:Pl.LocationPriority}))}i=i.parent}return t}function rTe(e,t,r,i,o,s,l){if(o.source===\"SwitchCases/\")return{type:\"cases\"};if(o.data){let B=aTe(o.name,o.data,e,s);if(B){let{contextToken:q,previousToken:W}=Q9(i,r);return{type:\"symbol\",symbol:B.symbol,location:ef(r,i),previousToken:W,contextToken:q,isJsxInitializer:!1,isTypeOnlyLocation:!1,origin:B.origin}}}let f=e.getCompilerOptions(),d=iTe(e,t,r,f,i,{includeCompletionsForModuleExports:!0,includeCompletionsWithInsertText:!0},o,s,void 0);if(!d)return{type:\"none\"};if(d.kind!==0)return{type:\"request\",request:d};let{symbols:g,literals:m,location:v,completionKind:S,symbolToOriginInfoMap:x,contextToken:A,previousToken:w,isJsxInitializer:C,isTypeOnlyLocation:P}=d,F=wr(m,B=>OZ(r,l,B)===o.name);return F!==void 0?{type:\"literal\",literal:F}:ks(g,(B,q)=>{let W=x[q],Y=Z9(B,Do(f),W,S,d.isJsxIdentifierExpected);return Y&&Y.name===o.name&&(o.source===\"ClassMemberSnippet/\"&&B.flags&106500||o.source===\"ObjectLiteralMethodSnippet/\"&&B.flags&8196||PZ(W)===o.source)?{type:\"symbol\",symbol:B,location:v,origin:W,contextToken:A,previousToken:w,isJsxInitializer:C,isTypeOnlyLocation:P}:void 0})||{type:\"none\"}}function OGe(e,t,r,i,o,s,l,f,d){let g=e.getTypeChecker(),m=e.getCompilerOptions(),{name:v,source:S,data:x}=o,{previousToken:A,contextToken:w}=Q9(i,r);if(n1(r,i,A))return aG.getStringLiteralCompletionDetails(v,r,i,A,g,m,s,d,f);let C=rTe(e,t,r,i,o,s,f);switch(C.type){case\"request\":{let{request:P}=C;switch(P.kind){case 1:return xb.getJSDocTagNameCompletionDetails(v);case 2:return xb.getJSDocTagCompletionDetails(v);case 3:return xb.getJSDocParameterNameCompletionDetails(v);case 4:return vt(P.keywordCompletions,F=>F.name===v)?FZ(v,\"keyword\",5):void 0;default:return L.assertNever(P)}}case\"symbol\":{let{symbol:P,location:F,contextToken:B,origin:q,previousToken:W}=C,{codeActions:Y,sourceDisplay:R}=NGe(v,F,B,q,P,e,s,m,r,i,W,l,f,x,S,d),ie=wZ(q)?q.symbolName:P.name;return GZ(P,ie,g,r,F,d,Y,R)}case\"literal\":{let{literal:P}=C;return FZ(OZ(r,f,P),\"string\",typeof P==\"string\"?8:7)}case\"cases\":{let{entry:P,importAdder:F}=ZEe(w.parent,r,f,e.getCompilerOptions(),s,e,void 0);if(F.hasFixes()){let B=nr.ChangeTracker.with({host:s,formatContext:l,preferences:f},F.writeFixes);return{name:P.name,kind:\"\",kindModifiers:\"\",displayParts:[],sourceDisplay:void 0,codeActions:[{changes:B,description:ZS([_.Includes_imports_of_types_referenced_by_0,v])}]}}return{name:P.name,kind:\"\",kindModifiers:\"\",displayParts:[],sourceDisplay:void 0}}case\"none\":return JZ().some(P=>P.name===v)?FZ(v,\"keyword\",5):void 0;default:L.assertNever(C)}}function FZ(e,t,r){return mP(e,\"\",t,[Qu(e,r)])}function GZ(e,t,r,i,o,s,l,f){let{displayParts:d,documentation:g,symbolKind:m,tags:v}=r.runWithCancellationToken(s,S=>$g.getSymbolDisplayPartsDocumentationAndSymbolKind(S,e,i,o,o,7));return mP(t,$g.getSymbolModifiers(r,e),m,d,g,v,l,f)}function mP(e,t,r,i,o,s,l,f){return{name:e,kindModifiers:t,kind:r,displayParts:i,documentation:o,tags:s,codeActions:l,source:f,sourceDisplay:f}}function NGe(e,t,r,i,o,s,l,f,d,g,m,v,S,x,A,w){if(x?.moduleSpecifier&&m&&_Te(r||m).replacementSpan)return{codeActions:void 0,sourceDisplay:[tf(x.moduleSpecifier)]};if(A===\"ClassMemberSnippet/\"){let{importAdder:Y}=eTe(l,s,f,S,e,o,t,g,r,v);if(Y)return{sourceDisplay:void 0,codeActions:[{changes:nr.ChangeTracker.with({host:l,formatContext:v,preferences:S},Y.writeFixes),description:ZS([_.Includes_imports_of_types_referenced_by_0,e])}]}}if(JEe(i)){let Y=gu.getPromoteTypeOnlyCompletionAction(d,i.declaration.name,s,l,v,S);return L.assertIsDefined(Y,\"Expected to have a code action for promoting type-only alias\"),{codeActions:[Y],sourceDisplay:void 0}}if(!i||!(_P(i)||eC(i)))return{codeActions:void 0,sourceDisplay:void 0};let C=i.isFromPackageJson?l.getPackageJsonAutoImportProvider().getTypeChecker():s.getTypeChecker(),{moduleSymbol:P}=i,F=C.getMergedSymbol(wd(o.exportSymbol||o,C)),B=r?.kind===29&&Au(r.parent),{moduleSpecifier:q,codeAction:W}=gu.getImportCompletionAction(F,P,x?.exportMapKey,d,e,B,l,s,v,m&&Re(m)?m.getStart(d):g,S,w);return L.assert(!x?.moduleSpecifier||q===x.moduleSpecifier),{sourceDisplay:[tf(q)],codeActions:[W]}}function PGe(e,t,r,i,o,s,l){let f=rTe(e,t,r,i,o,s,l);return f.type===\"symbol\"?f.symbol:void 0}function MGe(e,t,r){return ks(t&&(t.isUnion()?t.types:[t]),i=>{let o=i&&i.symbol;return o&&o.flags&424&&!cle(o)?BZ(o,e,r):void 0})}function FGe(e,t,r,i){let{parent:o}=e;switch(e.kind){case 79:return w7(e,i);case 63:switch(o.kind){case 257:return i.getContextualType(o.initializer);case 223:return i.getTypeAtLocation(o.left);case 288:return i.getContextualTypeForJsxAttribute(o);default:return}case 103:return i.getContextualType(o);case 82:let s=zr(o,CL);return s?TY(s,i):void 0;case 18:return AL(o)&&!Hg(o.parent)&&!BS(o.parent)?i.getContextualTypeForJsxAttribute(o.parent):void 0;default:let l=BP.getArgumentInfoForCompletions(e,t,r);return l?i.getContextualTypeForArgumentAtIndex(l.invocation,l.argumentIndex+(e.kind===27?1:0)):R7(e.kind)&&ar(o)&&R7(o.operatorToken.kind)?i.getTypeAtLocation(o.left):i.getContextualType(e)}}function BZ(e,t,r){let i=r.getAccessibleSymbolChain(e,t,67108863,!1);return i?Vo(i):e.parent&&(GGe(e.parent)?e:BZ(e.parent,t,r))}function GGe(e){var t;return!!((t=e.declarations)!=null&&t.some(r=>r.kind===308))}function iTe(e,t,r,i,o,s,l,f,d,g){let m=e.getTypeChecker(),v=QEe(r,i),S=Ms(),x=Vi(r,o);t(\"getCompletionData: Get current token: \"+(Ms()-S)),S=Ms();let A=Kg(r,o,x);t(\"getCompletionData: Is inside comment: \"+(Ms()-S));let w=!1,C=!1;if(A){if(Rhe(r,o)){if(r.text.charCodeAt(o-1)===64)return{kind:1};{let Te=Wf(o,r);if(!/[^\\*|\\s(/)]/.test(r.text.substring(Te,o)))return{kind:2}}}let z=jGe(x,o);if(z){if(z.tagName.pos<=o&&o<=z.tagName.end)return{kind:1};let Te=zt(z);if(Te&&(x=Vi(r,o),(!x||!Rh(x)&&(x.parent.kind!==351||x.parent.name!==x))&&(w=pe(Te))),!w&&xp(z)&&(rc(z.name)||z.name.pos<=o&&o<=z.name.end))return{kind:3,tag:z}}if(!w){t(\"Returning an empty list because completion was inside a regular comment or plain text part of a JsDoc comment.\");return}}S=Ms();let P=!w&&Cu(r),F=Q9(o,r),B=F.previousToken,q=F.contextToken;t(\"getCompletionData: Get previous token: \"+(Ms()-S));let W=x,Y,R=!1,ie=!1,$=!1,fe=!1,Z=!1,U=!1,re,le=ef(r,o),_e=0,ge=!1,X=0;if(q){let z=_Te(q);if(z.keywordCompletion){if(z.isKeywordOnlyCompletion)return{kind:4,keywordCompletions:[pGe(z.keywordCompletion)],isNewIdentifierLocation:z.isNewIdentifierLocation};_e=hGe(z.keywordCompletion)}if(z.replacementSpan&&s.includeCompletionsForImportStatements&&s.includeCompletionsWithInsertText&&(X|=2,re=z,ge=z.isNewIdentifierLocation),!z.replacementSpan&&Ht(q))return t(\"Returning an empty list because completion was requested in an invalid position.\"),_e?YEe(_e,P,dr()):void 0;let Te=q.parent;if(q.kind===24||q.kind===28)switch(R=q.kind===24,ie=q.kind===28,Te.kind){case 208:Y=Te,W=Y.expression;let j=$I(Y);if(rc(j)||(Pa(W)||Ia(W))&&W.end===q.pos&&W.getChildCount(r)&&To(W.getChildren(r)).kind!==21)return;break;case 163:W=Te.left;break;case 264:W=Te.name;break;case 202:W=Te;break;case 233:W=Te.getFirstToken(r),L.assert(W.kind===100||W.kind===103);break;default:return}else if(!re){if(Te&&Te.kind===208&&(q=Te,Te=Te.parent),x.parent===le)switch(x.kind){case 31:(x.parent.kind===281||x.parent.kind===283)&&(le=x);break;case 43:x.parent.kind===282&&(le=x);break}switch(Te.kind){case 284:q.kind===43&&(fe=!0,le=q);break;case 223:if(!fTe(Te))break;case 282:case 281:case 283:U=!0,q.kind===29&&($=!0,le=q);break;case 291:case 290:(B.kind===19||B.kind===79&&B.parent.kind===288)&&(U=!0);break;case 288:if(Te.initializer===B&&B.end<o){U=!0;break}switch(B.kind){case 63:Z=!0;break;case 79:U=!0,Te!==B.parent&&!Te.initializer&&Yo(Te,63,r)&&(Z=B)}break}}}let Ve=Ms(),we=5,ke=!1,Pe=!1,Ce=[],Ie,Be=[],Ne=[],Le=new Map,Ye=nn(),_t=Jp(z=>$S(z?f.getPackageJsonAutoImportProvider():e,f));if(R||ie)Qt();else if($)Ce=m.getJsxIntrinsicTagNamesAt(le),L.assertEachIsDefined(Ce,\"getJsxIntrinsicTagNames() should all be defined\"),Gt(),we=1,_e=0;else if(fe){let z=q.parent.parent.openingElement.tagName,Te=m.getSymbolAtLocation(z);Te&&(Ce=[Te]),we=1,_e=0}else if(!Gt())return _e?YEe(_e,P,ge):void 0;t(\"getCompletionData: Semantic work: \"+(Ms()-Ve));let ct=B&&FGe(B,o,r,m),Rt=Zi(ct&&(ct.isUnion()?ct.types:[ct]),z=>z.isLiteral()&&!(z.flags&1024)?z.value:void 0),We=B&&ct&&MGe(B,ct,m);return{kind:0,symbols:Ce,completionKind:we,isInSnippetScope:C,propertyAccessToConvert:Y,isNewIdentifierLocation:ge,location:le,keywordFilters:_e,literals:Rt,symbolToOriginInfoMap:Be,recommendedCompletion:We,previousToken:B,contextToken:q,isJsxInitializer:Z,insideJsDocTagTypeExpression:w,symbolToSortTextMap:Ne,isTypeOnlyLocation:Ye,isJsxIdentifierExpected:U,isRightOfOpenTag:$,isRightOfDotOrQuestionDot:R||ie,importStatementCompletion:re,hasUnresolvedAutoImports:Pe,flags:X};function qe(z){switch(z.kind){case 344:case 351:case 345:case 347:case 349:case 352:case 353:return!0;case 348:return!!z.constraint;default:return!1}}function zt(z){if(qe(z)){let Te=H_(z)?z.constraint:z.typeExpression;return Te&&Te.kind===312?Te:void 0}if(x2(z)||qz(z))return z.class}function Qt(){we=2;let z=ib(W),Te=w||z&&!W.isTypeOf||Gm(W.parent)||MN(q,r,m),j=i7(W);if(Cd(W)||z||br(W)){let yt=Tc(W.parent);yt&&(ge=!0);let lt=m.getSymbolAtLocation(W);if(lt&&(lt=wd(lt,m),lt.flags&1920)){let Qe=m.getExportsOfModule(lt);L.assertEachIsDefined(Qe,\"getExportsOfModule() should all be defined\");let Vt=ei=>m.isValidPropertyAccess(z?W:W.parent,ei.name),Hn=ei=>VZ(ei,m),jr=yt?ei=>{var Kr;return!!(ei.flags&1920)&&!((Kr=ei.declarations)!=null&&Kr.every(Si=>Si.parent===W.parent))}:j?ei=>Hn(ei)||Vt(ei):Te?Hn:Vt;for(let ei of Qe)jr(ei)&&Ce.push(ei);if(!Te&&lt.declarations&&lt.declarations.some(ei=>ei.kind!==308&&ei.kind!==264&&ei.kind!==263)){let ei=m.getTypeOfSymbolAtLocation(lt,W).getNonOptionalType(),Kr=!1;if(ei.isNullableType()){let Si=R&&!ie&&s.includeAutomaticOptionalChainCompletions!==!1;(Si||ie)&&(ei=ei.getNonNullableType(),Si&&(Kr=!0))}tn(ei,!!(W.flags&32768),Kr)}return}}if(!Te){m.tryGetThisTypeAt(W,!1);let yt=m.getTypeAtLocation(W).getNonOptionalType(),lt=!1;if(yt.isNullableType()){let Qe=R&&!ie&&s.includeAutomaticOptionalChainCompletions!==!1;(Qe||ie)&&(yt=yt.getNonNullableType(),Qe&&(lt=!0))}tn(yt,!!(W.flags&32768),lt)}}function tn(z,Te,j){ge=!!z.getStringIndexType(),ie&&vt(z.getCallSignatures())&&(ge=!0);let yt=W.kind===202?W:W.parent;if(v)for(let lt of z.getApparentProperties())m.isValidPropertyAccessForCompletions(yt,z,lt)&&kn(lt,!1,j);else Ce.push(...Pr(nG(z,m),lt=>m.isValidPropertyAccessForCompletions(yt,z,lt)));if(Te&&s.includeCompletionsWithInsertText){let lt=m.getPromisedTypeOfPromise(z);if(lt)for(let Qe of lt.getApparentProperties())m.isValidPropertyAccessForCompletions(yt,lt,Qe)&&kn(Qe,!0,j)}}function kn(z,Te,j){var yt;let lt=ks(z.declarations,jr=>zr(sa(jr),ts));if(lt){let jr=_n(lt.expression),ei=jr&&m.getSymbolAtLocation(jr),Kr=ei&&BZ(ei,q,m);if(Kr&&V_(Le,$a(Kr))){let Si=Ce.length;Ce.push(Kr);let Ja=Kr.parent;if(!Ja||!BN(Ja)||m.tryGetMemberInModuleExportsAndProperties(Kr.name,Ja)!==Kr)Be[Si]={kind:Hn(2)};else{let Za=fl(u_(Ja.name))?(yt=m6(Ja))==null?void 0:yt.fileName:void 0,{moduleSpecifier:Fa}=(Ie||(Ie=gu.createImportSpecifierResolver(r,e,f,s))).getModuleSpecifierForBestExportInfo([{exportKind:0,moduleFileName:Za,isFromPackageJson:!1,moduleSymbol:Ja,symbol:Kr,targetFlags:wd(Kr,m).flags}],o,TS(le))||{};if(Fa){let Hi={kind:Hn(6),moduleSymbol:Ja,isDefaultExport:!1,symbolName:Kr.name,exportName:Kr.name,fileName:Za,moduleSpecifier:Fa};Be[Si]=Hi}}}else s.includeCompletionsWithInsertText&&(Vt(z),Qe(z),Ce.push(z))}else Vt(z),Qe(z),Ce.push(z);function Qe(jr){qGe(jr)&&(Ne[$a(jr)]=Pl.LocalDeclarationPriority)}function Vt(jr){s.includeCompletionsWithInsertText&&(Te&&V_(Le,$a(jr))?Be[Ce.length]={kind:Hn(8)}:j&&(Be[Ce.length]={kind:16}))}function Hn(jr){return j?jr|16:jr}}function _n(z){return Re(z)?z:br(z)?_n(z.expression):void 0}function Gt(){return(Se()||at()||Ni()||Tt()||ve()||$n()||nt()||ui()||(Pi(),1))===1}function $n(){return Q(q)?(we=5,ge=!0,_e=4,1):0}function ui(){let z=G(q),Te=z&&m.getContextualType(z.attributes);if(!Te)return 0;let j=z&&m.getContextualType(z.attributes,4);return Ce=Qi(Ce,oe(tG(Te,j,z.attributes,m),z.attributes.properties)),ae(),we=3,ge=!1,1}function Ni(){return re?(ge=!0,An(),1):0}function Pi(){_e=ue(q)?5:1,we=1,ge=dr(),B!==q&&L.assert(!!B,\"Expected 'contextToken' to be defined when different from 'previousToken'.\");let z=B!==q?B.getStart():o,Te=vn(q,z,r)||r;C=pt(Te);let j=(Ye?0:111551)|788968|1920|2097152,yt=B&&!TS(B);Ce=Qi(Ce,m.getSymbolsInScope(Te,j)),L.assertEachIsDefined(Ce,\"getSymbolsInScope() should all be defined\");for(let lt=0;lt<Ce.length;lt++){let Qe=Ce[lt];if(!m.isArgumentsSymbol(Qe)&&!vt(Qe.declarations,Vt=>Vt.getSourceFile()===r)&&(Ne[$a(Qe)]=Pl.GlobalsOrKeywords),yt&&!(Qe.flags&111551)){let Vt=Qe.declarations&&wr(Qe.declarations,Mj);if(Vt){let Hn={kind:64,declaration:Vt};Be[lt]=Hn}}}if(s.includeCompletionsWithInsertText&&Te.kind!==308){let lt=m.tryGetThisTypeAt(Te,!1,Yr(Te.parent)?Te:void 0);if(lt&&!KGe(lt,r,m))for(let Qe of nG(lt,m))Be[Ce.length]={kind:1},Ce.push(Qe),Ne[$a(Qe)]=Pl.SuggestedClassMembers}An(),Ye&&(_e=q&&pT(q.parent)?6:7)}function gr(){return re?!0:ke||!s.includeCompletionsForModuleExports?!1:r.externalModuleIndicator||r.commonJsModuleIndicator||aY(e.getCompilerOptions())?!0:Uhe(e)}function pt(z){switch(z.kind){case 308:case 225:case 291:case 238:return!0;default:return ca(z)}}function nn(){return w||!!re&&I0(le.parent)||!Dt(q)&&(MN(q,r,m)||Gm(le)||pn(q))}function Dt(z){return z&&(z.kind===112&&(z.parent.kind===183||y2(z.parent))||z.kind===129&&z.parent.kind===179)}function pn(z){if(z){let Te=z.parent.kind;switch(z.kind){case 58:return Te===169||Te===168||Te===166||Te===257||nS(Te);case 63:return Te===262;case 128:return Te===231;case 29:return Te===180||Te===213;case 94:return Te===165;case 150:return Te===235}}return!1}function An(){var z,Te;if(!gr()||(L.assert(!l?.data,\"Should not run 'collectAutoImports' when faster path is available via `data`\"),l&&!l.source))return;X|=1;let yt=B===q&&re?\"\":B&&Re(B)?B.text.toLowerCase():\"\",lt=(z=f.getModuleSpecifierCache)==null?void 0:z.call(f),Qe=YN(r,f,e,s,g),Vt=(Te=f.getPackageJsonAutoImportProvider)==null?void 0:Te.call(f),Hn=l?void 0:uk(r,s,f);qEe(\"collectAutoImports\",f,Ie||(Ie=gu.createImportSpecifierResolver(r,e,f,s)),e,o,s,!!re,TS(le),ei=>{Qe.search(r.path,$,(Kr,Si)=>{if(!i_(Kr,Do(f.getCompilationSettings()))||!l&&fS(Kr)||!Ye&&!re&&!(Si&111551)||Ye&&!(Si&790504))return!1;let Ja=Kr.charCodeAt(0);return $&&(Ja<65||Ja>90)?!1:l?!0:gTe(Kr,yt)},(Kr,Si,Ja,Za)=>{if(l&&!vt(Kr,Qr=>l.source===u_(Qr.moduleSymbol.name))||(Kr=Pr(Kr,jr),!Kr.length))return;let Fa=ei.tryResolve(Kr,Ja)||{};if(Fa===\"failed\")return;let Hi=Kr[0],xi;Fa!==\"skipped\"&&({exportInfo:Hi=Kr[0],moduleSpecifier:xi}=Fa);let Nr=Hi.exportKind===1,Fo=Nr&&QA(Hi.symbol)||Hi.symbol;Kn(Fo,{kind:xi?32:4,moduleSpecifier:xi,symbolName:Si,exportMapKey:Za,exportName:Hi.exportKind===2?\"export=\":Hi.symbol.name,fileName:Hi.moduleFileName,isDefaultExport:Nr,moduleSymbol:Hi.moduleSymbol,isFromPackageJson:Hi.isFromPackageJson})}),Pe=ei.skippedAny(),X|=ei.resolvedAny()?8:0,X|=ei.resolvedBeyondLimit()?16:0});function jr(ei){let Kr=zr(ei.moduleSymbol.valueDeclaration,Li);if(!Kr){let Si=u_(ei.moduleSymbol.name);return QT.nodeCoreModules.has(Si)&&na(Si,\"node:\")!==W7(r,e)?!1:Hn?Hn.allowsImportingAmbientModule(ei.moduleSymbol,_t(ei.isFromPackageJson)):!0}return PY(ei.isFromPackageJson?Vt:e,r,Kr,s,Hn,_t(ei.isFromPackageJson),lt)}}function Kn(z,Te){let j=$a(z);Ne[j]!==Pl.GlobalsOrKeywords&&(Be[Ce.length]=Te,Ne[j]=re?Pl.LocationPriority:Pl.AutoImportSuggestions,Ce.push(z))}function hi(z,Te){Yn(le)||z.forEach(j=>{if(!ri(j))return;let yt=Z9(j,Do(i),void 0,0,!1);if(!yt)return;let{name:lt}=yt,Qe=CGe(j,lt,Te,e,f,i,s,d);if(!Qe)return;let Vt={kind:128,...Qe};X|=32,Be[Ce.length]=Vt,Ce.push(j)})}function ri(z){return!!(z.flags&8196)}function vn(z,Te,j){let yt=z;for(;yt&&!WX(yt,Te,j);)yt=yt.parent;return yt}function Ht(z){let Te=Ms(),j=Cr(z)||Oe(z)||kt(z)||En(z)||a3(z);return t(\"getCompletionsAtPosition: isCompletionListBlocker: \"+(Ms()-Te)),j}function En(z){if(z.kind===11)return!0;if(z.kind===31&&z.parent){if(le===z.parent&&(le.kind===283||le.kind===282))return!1;if(z.parent.kind===283)return le.parent.kind!==283;if(z.parent.kind===284||z.parent.kind===282)return!!z.parent.parent&&z.parent.parent.kind===281}return!1}function dr(){if(q){let z=q.parent.kind,Te=eG(q);switch(Te){case 27:return z===210||z===173||z===211||z===206||z===223||z===181||z===207;case 20:return z===210||z===173||z===211||z===214||z===193;case 22:return z===206||z===178||z===164;case 142:case 143:case 100:return!0;case 24:return z===264;case 18:return z===260||z===207;case 63:return z===257||z===223;case 15:return z===225;case 16:return z===236;case 132:return z===171||z===300;case 41:return z===171}if(hP(Te))return!0}return!1}function Cr(z){return(Cz(z)||Fj(z))&&(RN(z,o)||o===z.end&&(!!z.isUnterminated||Cz(z)))}function Se(){let z=zGe(q);if(!z)return 0;let j=(dO(z.parent)?z.parent:void 0)||z,yt=dTe(j,m);if(!yt)return 0;let lt=m.getTypeFromTypeNode(j),Qe=nG(yt,m),Vt=nG(lt,m),Hn=new Set;return Vt.forEach(jr=>Hn.add(jr.escapedName)),Ce=Qi(Ce,Pr(Qe,jr=>!Hn.has(jr.escapedName))),we=0,ge=!0,1}function at(){let z=Ce.length,Te=BGe(q);if(!Te)return 0;we=0;let j,yt;if(Te.kind===207){let lt=XGe(Te,m);if(lt===void 0)return Te.flags&33554432?2:(ke=!0,0);let Qe=m.getContextualType(Te,4),Vt=(Qe||lt).getStringIndexType(),Hn=(Qe||lt).getNumberIndexType();if(ge=!!Vt||!!Hn,j=tG(lt,Qe,Te,m),yt=Te.properties,j.length===0&&!Hn)return ke=!0,0}else{L.assert(Te.kind===203),ge=!1;let lt=nm(Te.parent);if(!PA(lt))return L.fail(\"Root declaration is not variable-like.\");let Qe=Jy(lt)||!!Cl(lt)||lt.parent.parent.kind===247;if(!Qe&&lt.kind===166&&(ot(lt.parent)?Qe=!!m.getContextualType(lt.parent):(lt.parent.kind===171||lt.parent.kind===175)&&(Qe=ot(lt.parent.parent)&&!!m.getContextualType(lt.parent.parent))),Qe){let Vt=m.getTypeAtLocation(Te);if(!Vt)return 2;j=m.getPropertiesOfType(Vt).filter(Hn=>m.isPropertyAccessible(Te,!1,!1,Vt,Hn)),yt=Te.elements}}if(j&&j.length>0){let lt=ln(j,L.checkDefined(yt));Ce=Qi(Ce,lt),ae(),Te.kind===207&&s.includeCompletionsWithObjectLiteralMethodSnippets&&s.includeCompletionsWithInsertText&&(Ot(z),hi(lt,Te))}return 1}function Tt(){if(!q)return 0;let z=q.kind===18||q.kind===27?zr(q.parent,bW):b7(q)?zr(q.parent.parent,bW):void 0;if(!z)return 0;b7(q)||(_e=8);let{moduleSpecifier:Te}=z.kind===272?z.parent.parent:z.parent;if(!Te)return ge=!0,z.kind===272?2:0;let j=m.getSymbolAtLocation(Te);if(!j)return ge=!0,2;we=3,ge=!1;let yt=m.getExportsAndPropertiesOfModule(j),lt=new Set(z.elements.filter(Vt=>!pe(Vt)).map(Vt=>(Vt.propertyName||Vt.name).escapedText)),Qe=yt.filter(Vt=>Vt.escapedName!==\"default\"&&!lt.has(Vt.escapedName));return Ce=Qi(Ce,Qe),Qe.length||(_e=0),1}function ve(){var z;let Te=q&&(q.kind===18||q.kind===27)?zr(q.parent,h_):void 0;if(!Te)return 0;let j=jn(Te,Kp(Li,Tc));return we=5,ge=!1,(z=j.locals)==null||z.forEach((yt,lt)=>{var Qe,Vt;Ce.push(yt),(Vt=(Qe=j.symbol)==null?void 0:Qe.exports)!=null&&Vt.has(lt)&&(Ne[$a(yt)]=Pl.OptionalMember)}),1}function nt(){let z=WGe(r,q,le,o);if(!z)return 0;if(we=3,ge=!0,_e=q.kind===41?0:Yr(z)?2:3,!Yr(z))return 1;let Te=q.kind===26?q.parent.parent:q.parent,j=_l(Te)?uu(Te):0;if(q.kind===79&&!pe(q))switch(q.getText()){case\"private\":j=j|8;break;case\"static\":j=j|32;break;case\"override\":j=j|16384;break}if(oc(Te)&&(j|=32),!(j&8)){let yt=Yr(z)&&j&16384?aT(hp(z)):NI(z),lt=Uo(yt,Qe=>{let Vt=m.getTypeAtLocation(Qe);return j&32?Vt?.symbol&&m.getPropertiesOfType(m.getTypeOfSymbolAtLocation(Vt.symbol,z)):Vt&&m.getPropertiesOfType(Vt)});Ce=Qi(Ce,Ke(lt,z.members,j)),mn(Ce,(Qe,Vt)=>{let Hn=Qe?.valueDeclaration;if(Hn&&_l(Hn)&&Hn.name&&ts(Hn.name)){let jr={kind:512,symbolName:m.symbolToString(Qe)};Be[Vt]=jr}})}return 1}function ce(z){return!!z.parent&&ha(z.parent)&&Ec(z.parent.parent)&&(yI(z.kind)||Rh(z))}function Q(z){if(z){let Te=z.parent;switch(z.kind){case 20:case 27:return Ec(z.parent)?z.parent:void 0;default:if(ce(z))return Te.parent}}}function ue(z){if(z){let Te,j=jn(z.parent,yt=>Yr(yt)?\"quit\":Ds(yt)&&Te===yt.body?!0:(Te=yt,!1));return j&&j}}function G(z){if(z){let Te=z.parent;switch(z.kind){case 31:case 30:case 43:case 79:case 208:case 289:case 288:case 290:if(Te&&(Te.kind===282||Te.kind===283)){if(z.kind===31){let j=el(z.pos,r,void 0);if(!Te.typeArguments||j&&j.kind===43)break}return Te}else if(Te.kind===288)return Te.parent.parent;break;case 10:if(Te&&(Te.kind===288||Te.kind===290))return Te.parent.parent;break;case 19:if(Te&&Te.kind===291&&Te.parent&&Te.parent.kind===288)return Te.parent.parent.parent;if(Te&&Te.kind===290)return Te.parent.parent;break}}}function Oe(z){let Te=z.parent,j=Te.kind;switch(z.kind){case 27:return j===257||Kt(z)||j===240||j===263||Ge(j)||j===261||j===204||j===262||Yr(Te)&&!!Te.typeParameters&&Te.typeParameters.end>=z.pos;case 24:return j===204;case 58:return j===205;case 22:return j===204;case 20:return j===295||Ge(j);case 18:return j===263;case 29:return j===260||j===228||j===261||j===262||nS(j);case 124:return j===169&&!Yr(Te.parent);case 25:return j===166||!!Te.parent&&Te.parent.kind===204;case 123:case 121:case 122:return j===166&&!Ec(Te.parent);case 128:return j===273||j===278||j===271;case 137:case 151:return!rG(z);case 79:if(j===273&&z===Te.name&&z.text===\"type\")return!1;break;case 84:case 92:case 118:case 98:case 113:case 100:case 119:case 85:case 138:return!0;case 154:return j!==273;case 41:return Ia(z.parent)&&!Nc(z.parent)}if(hP(eG(z))&&rG(z)||ce(z)&&(!Re(z)||yI(eG(z))||pe(z)))return!1;switch(eG(z)){case 126:case 84:case 85:case 136:case 92:case 98:case 118:case 119:case 121:case 122:case 123:case 124:case 113:return!0;case 132:return Na(z.parent)}if(jn(z.parent,Yr)&&z===B&&je(z,o))return!1;let lt=cb(z.parent,169);if(lt&&z!==B&&Yr(B.parent.parent)&&o<=B.end){if(je(z,B.end))return!1;if(z.kind!==63&&(sN(lt)||f6(lt)))return!0}return Rh(z)&&!xf(z.parent)&&!Sp(z.parent)&&!(Yr(z.parent)&&(z!==B||o>B.end))}function je(z,Te){return z.kind!==63&&(z.kind===26||!Bf(z.end,Te,r))}function Ge(z){return nS(z)&&z!==173}function kt(z){if(z.kind===8){let Te=z.getFullText();return Te.charAt(Te.length-1)===\".\"}return!1}function Kt(z){return z.parent.kind===258&&!MN(z,r,m)}function ln(z,Te){if(Te.length===0)return z;let j=new Set,yt=new Set;for(let Qe of Te){if(Qe.kind!==299&&Qe.kind!==300&&Qe.kind!==205&&Qe.kind!==171&&Qe.kind!==174&&Qe.kind!==175&&Qe.kind!==301||pe(Qe))continue;let Vt;if(VS(Qe))ir(Qe,j);else if(Wo(Qe)&&Qe.propertyName)Qe.propertyName.kind===79&&(Vt=Qe.propertyName.escapedText);else{let Hn=sa(Qe);Vt=Hn&&c_(Hn)?MI(Hn):void 0}Vt!==void 0&&yt.add(Vt)}let lt=z.filter(Qe=>!yt.has(Qe.escapedName));return rt(j,lt),lt}function ir(z,Te){let j=z.expression,yt=m.getSymbolAtLocation(j),lt=yt&&m.getTypeOfSymbolAtLocation(yt,j),Qe=lt&&lt.properties;Qe&&Qe.forEach(Vt=>{Te.add(Vt.name)})}function ae(){Ce.forEach(z=>{var Te;if(z.flags&16777216){let j=$a(z);Ne[j]=(Te=Ne[j])!=null?Te:Pl.OptionalMember}})}function rt(z,Te){if(z.size!==0)for(let j of Te)z.has(j.name)&&(Ne[$a(j)]=Pl.MemberDeclaredBySpreadAssignment)}function Ot(z){var Te;for(let j=z;j<Ce.length;j++){let yt=Ce[j],lt=$a(yt),Qe=Be?.[j],Vt=Do(i),Hn=Z9(yt,Vt,Qe,0,!1);if(Hn){let jr=(Te=Ne[lt])!=null?Te:Pl.LocationPriority,{name:ei}=Hn;Ne[lt]=Pl.ObjectLiteralProperty(jr,ei)}}}function Ke(z,Te,j){let yt=new Set;for(let lt of Te){if(lt.kind!==169&&lt.kind!==171&&lt.kind!==174&&lt.kind!==175||pe(lt)||cd(lt,8)||Ca(lt)!==!!(j&32))continue;let Qe=M0(lt.name);Qe&&yt.add(Qe)}return z.filter(lt=>!yt.has(lt.escapedName)&&!!lt.declarations&&!(Ef(lt)&8)&&!(lt.valueDeclaration&&xu(lt.valueDeclaration)))}function oe(z,Te){let j=new Set,yt=new Set;for(let Qe of Te)pe(Qe)||(Qe.kind===288?j.add(Qe.name.escapedText):GT(Qe)&&ir(Qe,yt));let lt=z.filter(Qe=>!j.has(Qe.escapedName));return rt(yt,lt),lt}function pe(z){return z.getStart(r)<=o&&o<=z.getEnd()}}function BGe(e){if(e){let{parent:t}=e;switch(e.kind){case 18:case 27:if(rs(t)||cm(t))return t;break;case 41:return Nc(t)?zr(t.parent,rs):void 0;case 79:return e.text===\"async\"&&xf(e.parent)?e.parent.parent:void 0}}}function Q9(e,t){let r=el(e,t);return r&&e<=r.end&&(Ah(r)||Xu(r.kind))?{contextToken:el(r.getFullStart(),t,void 0),previousToken:r}:{contextToken:r,previousToken:r}}function aTe(e,t,r,i){let o=t.isPackageJsonImport?i.getPackageJsonAutoImportProvider():r,s=o.getTypeChecker(),l=t.ambientModuleName?s.tryFindAmbientModule(t.ambientModuleName):t.fileName?s.getMergedSymbol(L.checkDefined(o.getSourceFile(t.fileName)).symbol):void 0;if(!l)return;let f=t.exportName===\"export=\"?s.resolveExternalModuleSymbol(l):s.tryGetMemberInModuleExportsAndProperties(t.exportName,l);return f?(f=t.exportName===\"default\"&&QA(f)||f,{symbol:f,origin:LGe(t,e,l)}):void 0}function Z9(e,t,r,i,o){if(dGe(r))return;let s=sGe(r)?r.symbolName:e.name;if(s===void 0||e.flags&1536&&Xw(s.charCodeAt(0))||gR(e))return;let l={name:s,needsConvertPropertyAccess:!1};if(i_(s,t,o?1:0)||e.valueDeclaration&&xu(e.valueDeclaration))return l;switch(i){case 3:return wZ(r)?{name:r.symbolName,needsConvertPropertyAccess:!1}:void 0;case 0:return{name:JSON.stringify(s),needsConvertPropertyAccess:!1};case 2:case 1:return s.charCodeAt(0)===32?void 0:{name:s,needsConvertPropertyAccess:!0};case 5:case 4:return l;default:L.assertNever(i)}}function oTe(e,t){if(!t)return sTe(e);let r=e+8+1;return gP[r]||(gP[r]=sTe(e).filter(i=>!UGe(lT(i.name))))}function sTe(e){return gP[e]||(gP[e]=JZ().filter(t=>{let r=lT(t.name);switch(e){case 0:return!1;case 1:return lTe(r)||r===136||r===142||r===154||r===143||r===126||ik(r)&&r!==155;case 5:return lTe(r);case 2:return hP(r);case 3:return cTe(r);case 4:return yI(r);case 6:return ik(r)||r===85;case 7:return ik(r);case 8:return r===154;default:return L.assertNever(e)}}))}function UGe(e){switch(e){case 126:case 131:case 160:case 134:case 136:case 92:case 159:case 117:case 138:case 118:case 140:case 141:case 142:case 143:case 144:case 148:case 149:case 161:case 121:case 122:case 123:case 146:case 152:case 153:case 154:case 156:case 157:return!0;default:return!1}}function cTe(e){return e===146}function hP(e){switch(e){case 126:case 127:case 135:case 137:case 151:case 132:case 136:case 161:return!0;default:return Gj(e)}}function lTe(e){return e===132||e===133||e===128||e===150||e===154||!K6(e)&&!hP(e)}function eG(e){var t;return Re(e)?(t=nb(e))!=null?t:0:e.kind}function VGe(e,t){let r=[];if(e){let i=e.getSourceFile(),o=e.parent,s=i.getLineAndCharacterOfPosition(e.end).line,l=i.getLineAndCharacterOfPosition(t).line;(gl(o)||Il(o)&&o.moduleSpecifier)&&e===o.moduleSpecifier&&s===l&&r.push({name:Xa(130),kind:\"keyword\",kindModifiers:\"\",sortText:Pl.GlobalsOrKeywords})}return r}function jGe(e,t){return jn(e,r=>EI(r)&&wN(r,t)?!0:dm(r)?\"quit\":!1)}function tG(e,t,r,i){let o=t&&t!==e,s=o&&!(t.flags&3)?i.getUnionType([e,t]):e,l=HGe(s,r,i);return s.isClass()&&uTe(l)?[]:o?Pr(l,f):l;function f(d){return Fn(d.declarations)?vt(d.declarations,g=>g.parent!==r):!0}}function HGe(e,t,r){return e.isUnion()?r.getAllPossiblePropertiesOfTypes(Pr(e.types,i=>!(i.flags&134348796||r.isArrayLikeType(i)||r.isTypeInvalidDueToUnionDiscriminant(i,t)||r.typeHasCallOrConstructSignatures(i)||i.isClass()&&uTe(i.getApparentProperties())))):e.getApparentProperties()}function uTe(e){return vt(e,t=>!!(Ef(t)&24))}function nG(e,t){return e.isUnion()?L.checkEachDefined(t.getAllPossiblePropertiesOfTypes(e.types),\"getAllPossiblePropertiesOfTypes() should all be defined\"):L.checkEachDefined(e.getApparentProperties(),\"getApparentProperties() should all be defined\")}function WGe(e,t,r,i){var o;switch(r.kind){case 354:return zr(r.parent,yS);case 1:let s=zr(Os(Ga(r.parent,Li).statements),yS);if(s&&!Yo(s,19,e))return s;break;case 79:{if(nb(r)||Na(r.parent)&&r.parent.initializer===r)return;if(rG(r))return jn(r,yS)}}if(t){if(r.kind===135||Re(t)&&Na(t.parent)&&Yr(r))return jn(t,Yr);switch(t.kind){case 63:return;case 26:case 19:return rG(r)&&r.parent.name===r?r.parent.parent:zr(r,yS);case 18:case 27:return zr(t.parent,yS);default:if(yS(r)){if(Gs(e,t.getEnd()).line!==Gs(e,i).line)return r;let s=Yr(t.parent.parent)?hP:cTe;return s(t.kind)||t.kind===41||Re(t)&&s((o=nb(t))!=null?o:0)?t.parent.parent:void 0}return}}}function zGe(e){if(!e)return;let t=e.parent;switch(e.kind){case 18:if(Rd(t))return t;break;case 26:case 27:case 79:if(t.kind===168&&Rd(t.parent))return t.parent;break}}function dTe(e,t){if(!e)return;if(bi(e)&&_6(e.parent))return t.getTypeArgumentConstraint(e);let r=dTe(e.parent,t);if(r)switch(e.kind){case 168:return t.getTypeOfPropertyOfContextualType(r,e.symbol.escapedName);case 190:case 184:case 189:return r}}function rG(e){return e.parent&&s6(e.parent)&&yS(e.parent.parent)}function JGe(e,t,r,i){switch(t){case\".\":case\"@\":return!0;case'\"':case\"'\":case\"`\":return!!r&&age(r)&&i===r.getStart(e)+1;case\"#\":return!!r&&pi(r)&&!!Zc(r);case\"<\":return!!r&&r.kind===29&&(!ar(r.parent)||fTe(r.parent));case\"/\":return!!r&&(es(r)?!!oR(r):r.kind===43&&GS(r.parent));case\" \":return!!r&&gL(r)&&r.parent.kind===308;default:return L.assertNever(t)}}function fTe({left:e}){return rc(e)}function KGe(e,t,r){let i=r.resolveName(\"self\",void 0,111551,!1);if(i&&r.getTypeOfSymbolAtLocation(i,t)===e)return!0;let o=r.resolveName(\"global\",void 0,111551,!1);if(o&&r.getTypeOfSymbolAtLocation(o,t)===e)return!0;let s=r.resolveName(\"globalThis\",void 0,111551,!1);return!!(s&&r.getTypeOfSymbolAtLocation(s,t)===e)}function qGe(e){return!!(e.valueDeclaration&&uu(e.valueDeclaration)&32&&Yr(e.valueDeclaration.parent))}function XGe(e,t){let r=t.getContextualType(e);if(r)return r;let i=qy(e.parent);if(ar(i)&&i.operatorToken.kind===63&&e===i.left)return t.getTypeAtLocation(i);if(ot(i))return t.getContextualType(i)}function _Te(e){var t,r,i;let o,s=!1,l=f();return{isKeywordOnlyCompletion:s,keywordCompletion:o,isNewIdentifierLocation:!!(l||o===154),isTopLevelTypeOnly:!!((r=(t=zr(l,gl))==null?void 0:t.importClause)!=null&&r.isTypeOnly)||!!((i=zr(l,Nl))!=null&&i.isTypeOnly),couldBeTypeOnlyImportSpecifier:!!l&&mTe(l,e),replacementSpan:YGe(l)};function f(){let d=e.parent;if(Nl(d))return o=e.kind===154?void 0:154,UZ(d.moduleReference)?d:void 0;if(mTe(d,e)&&hTe(d.parent))return d;if(jg(d)||nv(d)){if(!d.parent.isTypeOnly&&(e.kind===18||e.kind===100||e.kind===27)&&(o=154),hTe(d))if(e.kind===19||e.kind===79)s=!0,o=158;else return d.parent.parent;return}if(gL(e)&&Li(d))return o=154,e;if(gL(e)&&gl(d))return o=154,UZ(d.moduleSpecifier)?d:void 0}}function YGe(e){var t,r,i;if(!e)return;let o=(t=jn(e,Kp(gl,Nl)))!=null?t:e,s=o.getSourceFile();if(DT(o,s))return Du(o,s);L.assert(o.kind!==100&&o.kind!==273);let l=o.kind===269?(i=pTe((r=o.importClause)==null?void 0:r.namedBindings))!=null?i:o.moduleSpecifier:o.moduleReference,f={pos:o.getFirstToken().getStart(),end:l.pos};if(DT(f,s))return lv(f)}function pTe(e){var t;return wr((t=zr(e,jg))==null?void 0:t.elements,r=>{var i;return!r.propertyName&&fS(r.name.text)&&((i=el(r.name.pos,e.getSourceFile(),e))==null?void 0:i.kind)!==27})}function mTe(e,t){return $u(e)&&(e.isTypeOnly||t===e.name&&b7(t))}function hTe(e){if(!UZ(e.parent.parent.moduleSpecifier)||e.parent.name)return!1;if(jg(e)){let t=pTe(e);return(t?e.elements.indexOf(t):e.elements.length)<2}return!0}function UZ(e){var t;return rc(e)?!0:!((t=zr(um(e)?e.expression:e,es))!=null&&t.text)}function $Ge(e){return jn(e,r=>bT(r)||QGe(r)||La(r)?\"quit\":wi(r))}function QGe(e){return e.parent&&xs(e.parent)&&e.parent.body===e}function VZ(e,t,r=new Map){return i(e)||i(wd(e.exportSymbol||e,t));function i(o){return!!(o.flags&788968)||t.isUnknownSymbol(o)||!!(o.flags&1536)&&V_(r,$a(o))&&t.getExportsOfModule(o).some(s=>VZ(s,t,r))}}function ZGe(e,t){let r=wd(e,t).declarations;return!!Fn(r)&&Ji(r,H7)}function gTe(e,t){if(t.length===0)return!0;let r=!1,i,o=0,s=e.length;for(let l=0;l<s;l++){let f=e.charCodeAt(l),d=t.charCodeAt(o);if((f===d||f===eBe(d))&&(r||(r=i===void 0||97<=i&&i<=122&&65<=f&&f<=90||i===95&&f!==95),r&&o++,o===t.length))return!0;i=f}return!1}function eBe(e){return 97<=e&&e<=122?e-32:e}var iG,jZ,Pl,HZ,WZ,zZ,gP,JZ,tBe=gt({\"src/services/completions.ts\"(){\"use strict\";Fr(),QZ(),iG=100,jZ=1e3,Pl={LocalDeclarationPriority:\"10\",LocationPriority:\"11\",OptionalMember:\"12\",MemberDeclaredBySpreadAssignment:\"13\",SuggestedClassMembers:\"14\",GlobalsOrKeywords:\"15\",AutoImportSuggestions:\"16\",ClassMemberSnippets:\"17\",JavascriptIdentifiers:\"18\",Deprecated(e){return\"z\"+e},ObjectLiteralProperty(e,t){return`${e}\\0${t}\\0`},SortBelow(e){return e+\"1\"}},HZ=(e=>(e.ThisProperty=\"ThisProperty/\",e.ClassMemberSnippet=\"ClassMemberSnippet/\",e.TypeOnlyAlias=\"TypeOnlyAlias/\",e.ObjectLiteralMethodSnippet=\"ObjectLiteralMethodSnippet/\",e.SwitchCases=\"SwitchCases/\",e))(HZ||{}),WZ=(e=>(e[e.ThisType=1]=\"ThisType\",e[e.SymbolMember=2]=\"SymbolMember\",e[e.Export=4]=\"Export\",e[e.Promise=8]=\"Promise\",e[e.Nullable=16]=\"Nullable\",e[e.ResolvedExport=32]=\"ResolvedExport\",e[e.TypeOnlyAlias=64]=\"TypeOnlyAlias\",e[e.ObjectLiteralMethod=128]=\"ObjectLiteralMethod\",e[e.Ignore=256]=\"Ignore\",e[e.ComputedPropertyName=512]=\"ComputedPropertyName\",e[e.SymbolMemberNoExport=2]=\"SymbolMemberNoExport\",e[e.SymbolMemberExport=6]=\"SymbolMemberExport\",e))(WZ||{}),zZ=(e=>(e[e.ObjectPropertyDeclaration=0]=\"ObjectPropertyDeclaration\",e[e.Global=1]=\"Global\",e[e.PropertyAccess=2]=\"PropertyAccess\",e[e.MemberLike=3]=\"MemberLike\",e[e.String=4]=\"String\",e[e.None=5]=\"None\",e))(zZ||{}),gP=[],JZ=zu(()=>{let e=[];for(let t=81;t<=162;t++)e.push({name:Xa(t),kind:\"keyword\",kindModifiers:\"\",sortText:Pl.GlobalsOrKeywords});return e})}});function KZ(){let e=new Map;function t(r){let i=e.get(r.name);(!i||$Z[i.kind]<$Z[r.kind])&&e.set(r.name,r)}return{add:t,has:e.has.bind(e),values:e.values.bind(e)}}function nBe(e,t,r,i,o,s,l,f,d){if(Fhe(e,t)){let g=yBe(e,t,i,o);return g&&yTe(g)}if(n1(e,t,r)){if(!r||!es(r))return;let g=bTe(e,r,t,s.getTypeChecker(),i,o,f);return rBe(g,r,e,o,s,l,i,f,t,d)}}function rBe(e,t,r,i,o,s,l,f,d,g){if(e===void 0)return;let m=tY(t);switch(e.kind){case 0:return yTe(e.paths);case 1:{let v=MU();return MZ(e.symbols,v,t,t,r,d,r,i,o,99,s,4,f,l,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,g),{isGlobalCompletion:!1,isMemberCompletion:!0,isNewIdentifierLocation:e.hasIndexSignature,optionalReplacementSpan:m,entries:v}}case 2:{let v=e.types.map(S=>({name:S.value,kindModifiers:\"\",kind:\"string\",sortText:Pl.LocationPriority,replacementSpan:eY(t)}));return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:e.isNewIdentifier,optionalReplacementSpan:m,entries:v}}default:return L.assertNever(e)}}function iBe(e,t,r,i,o,s,l,f,d){if(!i||!es(i))return;let g=bTe(t,i,r,o,s,l,d);return g&&aBe(e,i,g,t,o,f)}function aBe(e,t,r,i,o,s){switch(r.kind){case 0:{let l=wr(r.paths,f=>f.name===e);return l&&mP(e,vTe(l.extension),l.kind,[tf(e)])}case 1:{let l=wr(r.symbols,f=>f.name===e);return l&&GZ(l,l.name,o,i,t,s)}case 2:return wr(r.types,l=>l.value===e)?mP(e,\"\",\"string\",[tf(e)]):void 0;default:return L.assertNever(r)}}function yTe(e){return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!0,entries:e.map(({name:o,kind:s,span:l,extension:f})=>({name:o,kind:s,kindModifiers:vTe(f),sortText:Pl.LocationPriority,replacementSpan:l}))}}function vTe(e){switch(e){case\".d.ts\":return\".d.ts\";case\".js\":return\".js\";case\".json\":return\".json\";case\".jsx\":return\".jsx\";case\".ts\":return\".ts\";case\".tsx\":return\".tsx\";case\".d.mts\":return\".d.mts\";case\".mjs\":return\".mjs\";case\".mts\":return\".mts\";case\".d.cts\":return\".d.cts\";case\".cjs\":return\".cjs\";case\".cts\":return\".cts\";case\".tsbuildinfo\":return L.fail(\"Extension .tsbuildinfo is unsupported.\");case void 0:return\"\";default:return L.assertNever(e)}}function bTe(e,t,r,i,o,s,l){let f=ETe(t.parent);switch(f.kind){case 198:{let S=ETe(f.parent);switch(S.kind){case 230:case 180:{let w=jn(f,C=>C.parent===S);return w?{kind:2,types:yP(i.getTypeArgumentConstraint(w)),isNewIdentifier:!1}:void 0}case 196:let{indexType:x,objectType:A}=S;return wN(x,r)?TTe(i.getTypeFromTypeNode(A)):void 0;case 202:return{kind:0,paths:xTe(e,t,o,s,i,l)};case 189:{if(!m_(S.parent))return;let w=oBe(S,f);return{kind:2,types:yP(i.getTypeArgumentConstraint(S)).filter(P=>!ya(w,P.value)),isNewIdentifier:!1}}default:return}}case 299:return rs(f.parent)&&f.name===t?cBe(i,f.parent):d()||d(0);case 209:{let{expression:S,argumentExpression:x}=f;return t===vs(x)?TTe(i.getTypeAtLocation(S)):void 0}case 210:case 211:case 288:if(!TBe(t)&&!Dd(f)){let S=BP.getArgumentInfoForCompletions(f.kind===288?f.parent:t,r,e);return S&&sBe(S.invocation,t,S,i)||d()}case 269:case 275:case 280:return{kind:0,paths:xTe(e,t,o,s,i,l)};case 292:let g=J7(i,f.parent.clauses),m=d();return m?{kind:2,types:m.types.filter(S=>!g.hasValue(S.value)),isNewIdentifier:!1}:void 0;default:return d()}function d(g=4){let m=yP(w7(t,i,g));if(m.length)return{kind:2,types:m,isNewIdentifier:!1}}}function ETe(e){switch(e.kind){case 193:return dR(e);case 214:return qy(e);default:return e}}function oBe(e,t){return Zi(e.types,r=>r!==t&&mb(r)&&yo(r.literal)?r.literal.text:void 0)}function sBe(e,t,r,i){let o=!1,s=new Map,l=[],f=Au(e)?L.checkDefined(jn(t.parent,Sp)):t;i.getResolvedSignatureForStringLiteralCompletions(e,f,l);let d=Uo(l,g=>{if(!Xl(g)&&r.argumentCount>g.parameters.length)return;let m=g.getTypeParameterAtPosition(r.argumentIndex);if(Au(e)){let v=i.getTypeOfPropertyOfType(m,f.name.text);v&&(m=v)}return o=o||!!(m.flags&4),yP(m,s)});return Fn(d)?{kind:2,types:d,isNewIdentifier:o}:void 0}function TTe(e){return e&&{kind:1,symbols:Pr(e.getApparentProperties(),t=>!(t.valueDeclaration&&xu(t.valueDeclaration))),hasIndexSignature:EY(e)}}function cBe(e,t){let r=e.getContextualType(t);if(!r)return;let i=e.getContextualType(t,4);return{kind:1,symbols:tG(r,i,t,e),hasIndexSignature:EY(r)}}function yP(e,t=new Map){return e?(e=iY(e),e.isUnion()?Uo(e.types,r=>yP(r,t)):e.isStringLiteral()&&!(e.flags&1024)&&V_(t,e.value)?[e]:Je):Je}function tC(e,t,r){return{name:e,kind:t,extension:r}}function qZ(e){return tC(e,\"directory\",void 0)}function STe(e,t,r){let i=bBe(e,t),o=e.length===0?void 0:il(t,e.length);return r.map(({name:s,kind:l,extension:f})=>Math.max(s.indexOf(_s),s.indexOf(pw))!==-1?{name:s,kind:l,extension:f,span:o}:{name:s,kind:l,extension:f,span:i})}function xTe(e,t,r,i,o,s){return STe(t.text,t.getStart(e)+1,lBe(e,t,r,i,o,s))}function lBe(e,t,r,i,o,s){let l=Al(t.text),f=es(t)?W_(e,t):void 0,d=e.path,g=ni(d),m=XZ(r,1,e,o,s,f);return EBe(l)||!r.baseUrl&&(qp(l)||doe(l))?uBe(l,g,r,i,d,m):pBe(l,g,f,r,i,m,o)}function XZ(e,t,r,i,o,s){return{extensionsToSearch:t_(dBe(e,i)),referenceKind:t,importingSourceFile:r,endingPreference:o?.importModuleSpecifierEnding,resolutionMode:s}}function uBe(e,t,r,i,o,s){return r.rootDirs?_Be(r.rootDirs,e,t,s,r,i,o):lo(Tk(e,t,s,i,!1,o).values())}function dBe(e,t){let r=t?Zi(t.getAmbientModules(),s=>{let l=s.name.slice(1,-1);if(!(!l.startsWith(\"*.\")||l.includes(\"/\")))return l.slice(1)}):[],i=[...nL(e),r],o=$s(e);return T7(o)?FR(e,i):i}function fBe(e,t,r,i){e=e.map(s=>So(qp(s)?s:vi(t,s)));let o=ks(e,s=>Gy(s,r,t,i)?r.substr(s.length):void 0);return fA([...e.map(s=>vi(s,o)),r],z1,su)}function _Be(e,t,r,i,o,s,l){let f=o.project||s.getCurrentDirectory(),d=!(s.useCaseSensitiveFileNames&&s.useCaseSensitiveFileNames()),g=fBe(e,f,r,d);return Uo(g,m=>lo(Tk(t,m,i,s,!0,l).values()))}function Tk(e,t,r,i,o,s,l=KZ()){var f;e===void 0&&(e=\"\"),e=Al(e),My(e)||(e=ni(e)),e===\"\"&&(e=\".\"+_s),e=cu(e);let d=Fy(t,e),g=My(d)?d:ni(d);if(!o){let x=cge(g,i);if(x){let w=JI(x,i).typesVersions;if(typeof w==\"object\"){let C=(f=q3(w))==null?void 0:f.paths;if(C){let P=ni(x),F=d.slice(cu(P).length);if(CTe(l,F,P,r,i,C))return l}}}}let m=!(i.useCaseSensitiveFileNames&&i.useCaseSensitiveFileNames());if(!G7(i,g))return l;let v=xY(i,g,r.extensionsToSearch,void 0,[\"./*\"]);if(v)for(let x of v){if(x=So(x),s&&cT(x,s,t,m)===0)continue;let{name:A,extension:w}=ATe(Hl(x),i.getCompilationSettings(),r);l.add(tC(A,\"script\",w))}let S=M7(i,g);if(S)for(let x of S){let A=Hl(So(x));A!==\"@types\"&&l.add(qZ(A))}return l}function ATe(e,t,r){let i=Q0.tryGetRealFileNameForNonJsDeclarationFileName(e);if(i)return{name:i,extension:Hm(i)};if(r.referenceKind===0)return{name:e,extension:Hm(e)};let o=OW(r.endingPreference,r.resolutionMode,t,r.importingSourceFile);if(o===3){if($c(e,L4))return{name:e,extension:Hm(e)};let l=Q0.tryGetJSExtensionForFile(e,t);return l?{name:V0(e,l),extension:l}:{name:e,extension:Hm(e)}}if((o===0||o===1)&&$c(e,[\".js\",\".jsx\",\".ts\",\".tsx\",\".d.ts\"]))return{name:ld(e),extension:Hm(e)};let s=Q0.tryGetJSExtensionForFile(e,t);return s?{name:V0(e,s),extension:s}:{name:e,extension:Hm(e)}}function CTe(e,t,r,i,o,s){let l=d=>s[d],f=(d,g)=>{let m=n2(d),v=n2(g),S=typeof m==\"object\"?m.prefix.length:d.length,x=typeof v==\"object\"?v.prefix.length:g.length;return Es(x,S)};return ITe(e,t,r,i,o,bh(s),l,f)}function ITe(e,t,r,i,o,s,l,f){let d=[],g;for(let m of s){if(m===\".\")continue;let v=m.replace(/^\\.\\//,\"\"),S=l(m);if(S){let x=n2(v);if(!x)continue;let A=typeof x==\"object\"&&h8(x,t);A&&(g===void 0||f(m,g)===-1)&&(g=m,d=d.filter(C=>!C.matchedPattern)),(typeof x==\"string\"||g===void 0||f(m,g)!==1)&&d.push({matchedPattern:A,results:mBe(v,S,t,r,i,o).map(({name:C,kind:P,extension:F})=>tC(C,P,F))})}}return d.forEach(m=>m.results.forEach(v=>e.add(v))),g!==void 0}function pBe(e,t,r,i,o,s,l){let{baseUrl:f,paths:d}=i,g=KZ(),m=$s(i);if(f){let S=i.project||o.getCurrentDirectory(),x=So(vi(S,f));Tk(e,x,s,o,!1,void 0,g),d&&CTe(g,e,x,s,o,d)}let v=kTe(e);for(let S of gBe(e,v,l))g.add(tC(S,\"external module name\",void 0));if(RTe(o,i,t,v,s,g),T7(m)){let S=!1;if(v===void 0)for(let x of vBe(o,t)){let A=tC(x,\"external module name\",void 0);g.has(A.name)||(S=!0,g.add(A))}if(!S){let x=A=>{let w=vi(A,\"node_modules\");G7(o,w)&&Tk(e,w,s,o,!1,void 0,g)};if(v&&xW(i)){let A=x;x=w=>{let C=Ou(e);C.shift();let P=C.shift();if(!P)return A(w);if(na(P,\"@\")){let q=C.shift();if(!q)return A(w);P=vi(P,q)}let F=vi(w,\"node_modules\",P),B=vi(F,\"package.json\");if(F7(o,B)){let W=JI(B,o).exports;if(W){if(typeof W!=\"object\"||W===null)return;let Y=bh(W),R=C.join(\"/\")+(C.length&&My(e)?\"/\":\"\"),ie=r===99?[\"node\",\"import\",\"types\"]:[\"node\",\"require\",\"types\"];ITe(g,R,F,s,o,Y,$=>aT(LTe(W[$],ie)),tK);return}}return A(w)}}Th(t,x)}}return lo(g.values())}function LTe(e,t){if(typeof e==\"string\")return e;if(e&&typeof e==\"object\"&&!ba(e)){for(let r in e)if(r===\"default\"||t.indexOf(r)>-1||QO(t,r)){let i=e[r];return LTe(i,t)}}}function kTe(e){return YZ(e)?My(e)?e:ni(e):void 0}function mBe(e,t,r,i,o,s){if(!Oc(e,\"*\"))return jl(e,\"*\")?Je:d(e,\"script\");let l=e.slice(0,e.length-1),f=KU(r,l);if(f===void 0)return e[e.length-2]===\"/\"?d(l,\"directory\"):Uo(t,m=>{var v;return(v=DTe(\"\",i,m,o,s))==null?void 0:v.map(({name:S,...x})=>({name:l+S,...x}))});return Uo(t,g=>DTe(f,i,g,o,s));function d(g,m){return na(g,r)?[{name:sT(g),kind:m,extension:void 0}]:Je}}function DTe(e,t,r,i,o){if(!o.readDirectory)return;let s=n2(r);if(s===void 0||Ta(s))return;let l=Fy(s.prefix),f=My(s.prefix)?l:ni(l),d=My(s.prefix)?\"\":Hl(l),g=YZ(e),m=g?My(e)?e:ni(e):void 0,v=g?vi(f,d+m):f,S=So(s.suffix),x=So(vi(t,v)),A=g?x:cu(x)+d,w=S?\"**/*\"+S:\"./*\",C=Zi(xY(o,x,i.extensionsToSearch,void 0,[w]),B=>{let q=F(B);if(q){if(YZ(q))return qZ(Ou(wTe(q))[1]);let{name:W,extension:Y}=ATe(q,o.getCompilationSettings(),i);return tC(W,\"script\",Y)}}),P=S?Je:Zi(M7(o,x),B=>B===\"node_modules\"?void 0:qZ(B));return[...C,...P];function F(B){let q=hBe(So(B),A,S);return q===void 0?void 0:wTe(q)}}function hBe(e,t,r){return na(e,t)&&Oc(e,r)?e.slice(t.length,e.length-r.length):void 0}function wTe(e){return e[0]===_s?e.slice(1):e}function gBe(e,t,r){let o=r.getAmbientModules().map(s=>u_(s.name)).filter(s=>na(s,e)&&s.indexOf(\"*\")<0);if(t!==void 0){let s=cu(t);return o.map(l=>QC(l,s))}return o}function yBe(e,t,r,i){let o=Vi(e,t),s=Nm(e.text,o.pos),l=s&&wr(s,A=>t>=A.pos&&t<=A.end);if(!l)return;let f=e.text.slice(l.pos,t),d=OTe.exec(f);if(!d)return;let[,g,m,v]=d,S=ni(e.path),x=m===\"path\"?Tk(v,S,XZ(r,0,e),i,!0,e.path):m===\"types\"?RTe(i,r,S,kTe(v),XZ(r,1,e)):L.fail();return STe(v,l.pos+g.length,lo(x.values()))}function RTe(e,t,r,i,o,s=KZ()){let l=new Map,f=B7(()=>XO(t,e))||Je;for(let g of f)d(g);for(let g of AY(r,e)){let m=vi(ni(g),\"node_modules/@types\");d(m)}return s;function d(g){if(G7(e,g))for(let m of M7(e,g)){let v=iF(m);if(!(t.types&&!ya(t.types,v)))if(i===void 0)l.has(v)||(s.add(tC(v,\"external module name\",void 0)),l.set(v,!0));else{let S=vi(g,m),x=IW(i,v,lb(e));x!==void 0&&Tk(x,S,o,e,!1,void 0,s)}}}}function vBe(e,t){if(!e.readFile||!e.fileExists)return Je;let r=[];for(let i of AY(t,e)){let o=JI(i,e);for(let s of NTe){let l=o[s];if(l)for(let f in l)fs(l,f)&&!na(f,\"@types/\")&&r.push(f)}}return r}function bBe(e,t){let r=Math.max(e.lastIndexOf(_s),e.lastIndexOf(pw)),i=r!==-1?r+1:0,o=e.length-i;return o===0||i_(e.substr(i,o),99)?void 0:il(t+i,o)}function EBe(e){if(e&&e.length>=2&&e.charCodeAt(0)===46){let t=e.length>=3&&e.charCodeAt(1)===46?2:1,r=e.charCodeAt(t);return r===47||r===92}return!1}function YZ(e){return jl(e,_s)}function TBe(e){return Pa(e.parent)&&Sl(e.parent.arguments)===e&&Re(e.parent.expression)&&e.parent.expression.escapedText===\"require\"}var $Z,OTe,NTe,SBe=gt({\"src/services/stringCompletions.ts\"(){\"use strict\";Fr(),QZ(),$Z={directory:0,script:1,\"external module name\":2},OTe=/^(\\/\\/\\/\\s*<reference\\s+(path|types)\\s*=\\s*(?:'|\"))([^\\3\"]*)$/,NTe=[\"dependencies\",\"devDependencies\",\"peerDependencies\",\"optionalDependencies\"]}}),aG={};Mo(aG,{getStringLiteralCompletionDetails:()=>iBe,getStringLiteralCompletions:()=>nBe});var xBe=gt({\"src/services/_namespaces/ts.Completions.StringCompletions.ts\"(){\"use strict\";SBe()}}),lx={};Mo(lx,{CompletionKind:()=>zZ,CompletionSource:()=>HZ,SortText:()=>Pl,StringCompletions:()=>aG,SymbolOriginInfoKind:()=>WZ,createCompletionDetails:()=>mP,createCompletionDetailsForSymbol:()=>GZ,getCompletionEntriesFromSymbols:()=>MZ,getCompletionEntryDetails:()=>OGe,getCompletionEntrySymbol:()=>PGe,getCompletionsAtPosition:()=>fGe,getPropertiesForObjectExpression:()=>tG,moduleSpecifierResolutionCacheAttemptLimit:()=>jZ,moduleSpecifierResolutionLimit:()=>iG});var QZ=gt({\"src/services/_namespaces/ts.Completions.ts\"(){\"use strict\";tBe(),xBe()}});function ZZ(e,t,r,i){let o=LBe(e,r,i);return(s,l,f)=>{let{directImports:d,indirectUsers:g}=ABe(e,t,o,l,r,i);return{indirectUsers:g,...CBe(d,s,l.exportKind,r,f)}}}function ABe(e,t,r,{exportingModuleSymbol:i,exportKind:o},s,l){let f=W2(),d=W2(),g=[],m=!!i.globalExports,v=m?void 0:[];return x(i),{directImports:g,indirectUsers:S()};function S(){if(m)return e;if(i.declarations)for(let B of i.declarations)D0(B)&&t.has(B.getSourceFile().fileName)&&P(B);return v.map(Gn)}function x(B){let q=F(B);if(q){for(let W of q)if(f(W))switch(l&&l.throwIfCancellationRequested(),W.kind){case 210:if(Dd(W)){A(W);break}if(!m){let R=W.parent;if(o===2&&R.kind===257){let{name:ie}=R;if(ie.kind===79){g.push(ie);break}}}break;case 79:break;case 268:C(W,W.name,Mr(W,1),!1);break;case 269:g.push(W);let Y=W.importClause&&W.importClause.namedBindings;Y&&Y.kind===271?C(W,Y.name,!1,!0):!m&&lS(W)&&P(vP(W));break;case 275:W.exportClause?W.exportClause.kind===277?P(vP(W),!0):g.push(W):x(OBe(W,s));break;case 202:!m&&W.isTypeOf&&!W.qualifier&&w(W)&&P(W.getSourceFile(),!0),g.push(W);break;default:L.failBadSyntaxKind(W,\"Unexpected import kind.\")}}}function A(B){let q=jn(B,oG)||B.getSourceFile();P(q,!!w(B,!0))}function w(B,q=!1){return jn(B,W=>q&&oG(W)?\"quit\":g_(W)&&vt(W.modifiers,c3))}function C(B,q,W,Y){if(o===2)Y||g.push(B);else if(!m){let R=vP(B);L.assert(R.kind===308||R.kind===264),W||IBe(R,q,s)?P(R,!0):P(R)}}function P(B,q=!1){if(L.assert(!m),!d(B)||(v.push(B),!q))return;let Y=s.getMergedSymbol(B.symbol);if(!Y)return;L.assert(!!(Y.flags&1536));let R=F(Y);if(R)for(let ie of R)Mh(ie)||P(vP(ie),!0)}function F(B){return r.get($a(B).toString())}}function CBe(e,t,r,i,o){let s=[],l=[];function f(S,x){s.push([S,x])}if(e)for(let S of e)d(S);return{importSearches:s,singleReferences:l};function d(S){if(S.kind===268){tee(S)&&g(S.name);return}if(S.kind===79){g(S);return}if(S.kind===202){if(S.qualifier){let w=Yd(S.qualifier);w.escapedText===fc(t)&&l.push(w)}else r===2&&l.push(S.argument.literal);return}if(S.moduleSpecifier.kind!==10)return;if(S.kind===275){S.exportClause&&h_(S.exportClause)&&m(S.exportClause);return}let{name:x,namedBindings:A}=S.importClause||{name:void 0,namedBindings:void 0};if(A)switch(A.kind){case 271:g(A.name);break;case 272:(r===0||r===1)&&m(A);break;default:L.assertNever(A)}if(x&&(r===1||r===2)&&(!o||x.escapedText===A7(t))){let w=i.getSymbolAtLocation(x);f(x,w)}}function g(S){r===2&&(!o||v(S.escapedText))&&f(S,i.getSymbolAtLocation(S))}function m(S){if(S)for(let x of S.elements){let{name:A,propertyName:w}=x;if(v((w||A).escapedText))if(w)l.push(w),(!o||A.escapedText===t.escapedName)&&f(A,i.getSymbolAtLocation(A));else{let C=x.kind===278&&x.propertyName?i.getExportSpecifierLocalTargetSymbol(x):i.getSymbolAtLocation(A);f(A,C)}}}function v(S){return S===t.escapedName||r!==0&&S===\"default\"}}function IBe(e,t,r){let i=r.getSymbolAtLocation(t);return!!MTe(e,o=>{if(!Il(o))return;let{exportClause:s,moduleSpecifier:l}=o;return!l&&s&&h_(s)&&s.elements.some(f=>r.getExportSpecifierLocalTargetSymbol(f)===i)})}function PTe(e,t,r){var i;let o=[],s=e.getTypeChecker();for(let l of t){let f=r.valueDeclaration;if(f?.kind===308){for(let d of l.referencedFiles)e.getSourceFileFromReference(l,d)===f&&o.push({kind:\"reference\",referencingFile:l,ref:d});for(let d of l.typeReferenceDirectives){let g=(i=e.getResolvedTypeReferenceDirectives().get(d.fileName,d.resolutionMode||l.impliedNodeFormat))==null?void 0:i.resolvedTypeReferenceDirective;g!==void 0&&g.resolvedFileName===f.fileName&&o.push({kind:\"reference\",referencingFile:l,ref:d})}}FTe(l,(d,g)=>{s.getSymbolAtLocation(g)===r&&o.push({kind:\"import\",literal:g})})}return o}function LBe(e,t,r){let i=new Map;for(let o of e)r&&r.throwIfCancellationRequested(),FTe(o,(s,l)=>{let f=t.getSymbolAtLocation(l);if(f){let d=$a(f).toString(),g=i.get(d);g||i.set(d,g=[]),g.push(s)}});return i}function MTe(e,t){return mn(e.kind===308?e.statements:e.body.statements,r=>t(r)||oG(r)&&mn(r.body&&r.body.statements,t))}function FTe(e,t){if(e.externalModuleIndicator||e.imports!==void 0)for(let r of e.imports)t(aR(r),r);else MTe(e,r=>{switch(r.kind){case 275:case 269:{let i=r;i.moduleSpecifier&&yo(i.moduleSpecifier)&&t(i,i.moduleSpecifier);break}case 268:{let i=r;tee(i)&&t(i,i.moduleReference.expression);break}}})}function GTe(e,t,r,i){return i?o():o()||s();function o(){var d;let{parent:g}=e,m=g.parent;if(t.exportSymbol)return g.kind===208?(d=t.declarations)!=null&&d.some(x=>x===g)&&ar(m)?S(m,!1):void 0:l(t.exportSymbol,f(g));{let x=DBe(g,e);if(x&&Mr(x,1))return Nl(x)&&x.moduleReference===e?i?void 0:{kind:0,symbol:r.getSymbolAtLocation(x.name)}:l(t,f(x));if(qm(g))return l(t,0);if(pc(g))return v(g);if(pc(m))return v(m);if(ar(g))return S(g,!0);if(ar(m))return S(m,!0);if(Kz(g)||Vz(g))return l(t,0)}function v(x){if(!x.symbol.parent)return;let A=x.isExportEquals?2:1;return{kind:1,symbol:t,exportInfo:{exportingModuleSymbol:x.symbol.parent,exportKind:A}}}function S(x,A){let w;switch(ic(x)){case 1:w=0;break;case 2:w=2;break;default:return}let C=A?r.getSymbolAtLocation(ule(Ga(x.left,Us))):t;return C&&l(C,w)}}function s(){if(!wBe(e))return;let g=r.getImmediateAliasedSymbol(t);if(!g||(g=RBe(g,r),g.escapedName===\"export=\"&&(g=kBe(g,r),g===void 0)))return;let m=A7(g);if(m===void 0||m===\"default\"||m===t.escapedName)return{kind:0,symbol:g}}function l(d,g){let m=eee(d,g,r);return m&&{kind:1,symbol:d,exportInfo:m}}function f(d){return Mr(d,1024)?1:0}}function kBe(e,t){var r,i;if(e.flags&2097152)return t.getImmediateAliasedSymbol(e);let o=L.checkDefined(e.valueDeclaration);if(pc(o))return(r=zr(o.expression,$p))==null?void 0:r.symbol;if(ar(o))return(i=zr(o.right,$p))==null?void 0:i.symbol;if(Li(o))return o.symbol}function DBe(e,t){let r=wi(e)?e:Wo(e)?bA(e):void 0;return r?e.name!==t||E2(r.parent)?void 0:Bc(r.parent.parent)?r.parent.parent:void 0:e}function wBe(e){let{parent:t}=e;switch(t.kind){case 268:return t.name===e&&tee(t);case 273:return!t.propertyName;case 270:case 271:return L.assert(t.name===e),!0;case 205:return Yn(e)&&N0(t.parent.parent);default:return!1}}function eee(e,t,r){let i=e.parent;if(!i)return;let o=r.getMergedSymbol(i);return BN(o)?{exportingModuleSymbol:o,exportKind:t}:void 0}function RBe(e,t){if(e.declarations)for(let r of e.declarations){if(Mu(r)&&!r.propertyName&&!r.parent.parent.moduleSpecifier)return t.getExportSpecifierLocalTargetSymbol(r)||e;if(br(r)&&Bm(r.expression)&&!pi(r.name))return t.getSymbolAtLocation(r);if(xf(r)&&ar(r.parent.parent)&&ic(r.parent.parent)===2)return t.getExportSpecifierLocalTargetSymbol(r.name)}return e}function OBe(e,t){return t.getMergedSymbol(vP(e).symbol)}function vP(e){if(e.kind===210)return e.getSourceFile();let{parent:t}=e;return t.kind===308?t:(L.assert(t.kind===265),Ga(t.parent,oG))}function oG(e){return e.kind===264&&e.name.kind===10}function tee(e){return e.moduleReference.kind===280&&e.moduleReference.expression.kind===10}var nee,ree,NBe=gt({\"src/services/importTracker.ts\"(){\"use strict\";Fr(),nee=(e=>(e[e.Named=0]=\"Named\",e[e.Default=1]=\"Default\",e[e.ExportEquals=2]=\"ExportEquals\",e))(nee||{}),ree=(e=>(e[e.Import=0]=\"Import\",e[e.Export=1]=\"Export\",e))(ree||{})}});function Ym(e,t=1){return{kind:t,node:e.name||e,context:PBe(e)}}function BTe(e){return e&&e.kind===void 0}function PBe(e){if(Kl(e))return sE(e);if(e.parent){if(!Kl(e.parent)&&!pc(e.parent)){if(Yn(e)){let r=ar(e.parent)?e.parent:Us(e.parent)&&ar(e.parent.parent)&&e.parent.parent.left===e.parent?e.parent.parent:void 0;if(r&&ic(r)!==0)return sE(r)}if(Xm(e.parent)||GS(e.parent))return e.parent.parent;if(FS(e.parent)||J0(e.parent)||hI(e.parent))return e.parent;if(es(e)){let r=oR(e);if(r){let i=jn(r,o=>Kl(o)||ca(o)||EI(o));return Kl(i)?sE(i):i}}let t=jn(e,ts);return t?sE(t.parent):void 0}if(e.parent.name===e||Ec(e.parent)||pc(e.parent)||(eS(e.parent)||Wo(e.parent))&&e.parent.propertyName===e||e.kind===88&&Mr(e.parent,1025))return sE(e.parent)}}function sE(e){if(e)switch(e.kind){case 257:return!pu(e.parent)||e.parent.declarations.length!==1?e:Bc(e.parent.parent)?e.parent.parent:CA(e.parent.parent)?sE(e.parent.parent):e.parent;case 205:return sE(e.parent.parent);case 273:return e.parent.parent.parent;case 278:case 271:return e.parent.parent;case 270:case 277:return e.parent;case 223:return Ol(e.parent)?e.parent:e;case 247:case 246:return{start:e.initializer,end:e.expression};case 299:case 300:return qg(e.parent)?sE(jn(e.parent,t=>ar(t)||CA(t))):e;default:return e}}function iee(e,t,r){if(!r)return;let i=BTe(r)?EP(r.start,t,r.end):EP(r,t);return i.start!==e.start||i.length!==e.length?{contextSpan:i}:void 0}function MBe(e,t,r,i,o){let s=ef(i,o),l={use:1},f=u1.getReferencedSymbolsForNode(o,s,e,r,t,l),d=e.getTypeChecker(),g=u1.getAdjustedNode(s,l),m=FBe(g)?d.getSymbolAtLocation(g):void 0;return!f||!f.length?void 0:Zi(f,({definition:v,references:S})=>v&&{definition:d.runWithCancellationToken(t,x=>UBe(v,x,s)),references:S.map(x=>jBe(x,m))})}function FBe(e){return e.kind===88||!!fR(e)||_R(e)||e.kind===135&&Ec(e.parent)}function GBe(e,t,r,i,o){let s=ef(i,o),l,f=UTe(e,t,r,s,o);if(s.parent.kind===208||s.parent.kind===205||s.parent.kind===209||s.kind===106)l=f&&[...f];else if(f){let g=HU(f),m=new Map;for(;!g.isEmpty();){let v=g.dequeue();if(!V_(m,zo(v.node)))continue;l=Sn(l,v);let S=UTe(e,t,r,v.node,v.node.pos);S&&g.enqueue(...S)}}let d=e.getTypeChecker();return on(l,g=>WBe(g,d))}function UTe(e,t,r,i,o){if(i.kind===308)return;let s=e.getTypeChecker();if(i.parent.kind===300){let l=[];return u1.getReferenceEntriesForShorthandPropertyAssignment(i,s,f=>l.push(Ym(f))),l}else if(i.kind===106||Pu(i.parent)){let l=s.getSymbolAtLocation(i);return l.valueDeclaration&&[Ym(l.valueDeclaration)]}else return VTe(o,i,e,r,t,{implementations:!0,use:1})}function BBe(e,t,r,i,o,s,l){return on(jTe(u1.getReferencedSymbolsForNode(o,i,e,r,t,s)),f=>l(f,i,e.getTypeChecker()))}function VTe(e,t,r,i,o,s={},l=new Set(i.map(f=>f.fileName))){return jTe(u1.getReferencedSymbolsForNode(e,t,r,i,o,s,l))}function jTe(e){return e&&Uo(e,t=>t.references)}function UBe(e,t,r){let i=(()=>{switch(e.type){case 0:{let{symbol:m}=e,{displayParts:v,kind:S}=HTe(m,t,r),x=v.map(C=>C.text).join(\"\"),A=m.declarations&&Sl(m.declarations),w=A?sa(A)||A:r;return{...bP(w),name:x,kind:S,displayParts:v,context:sE(A)}}case 1:{let{node:m}=e;return{...bP(m),name:m.text,kind:\"label\",displayParts:[Qu(m.text,17)]}}case 2:{let{node:m}=e,v=Xa(m.kind);return{...bP(m),name:v,kind:\"keyword\",displayParts:[{text:v,kind:\"keyword\"}]}}case 3:{let{node:m}=e,v=t.getSymbolAtLocation(m),S=v&&$g.getSymbolDisplayPartsDocumentationAndSymbolKind(t,v,m.getSourceFile(),e1(m),m).displayParts||[tf(\"this\")];return{...bP(m),name:\"this\",kind:\"var\",displayParts:S}}case 4:{let{node:m}=e;return{...bP(m),name:m.text,kind:\"var\",displayParts:[Qu(Qc(m),8)]}}case 5:return{textSpan:lv(e.reference),sourceFile:e.file,name:e.reference.fileName,kind:\"string\",displayParts:[Qu(`\"${e.reference.fileName}\"`,8)]};default:return L.assertNever(e)}})(),{sourceFile:o,textSpan:s,name:l,kind:f,displayParts:d,context:g}=i;return{containerKind:\"\",containerName:\"\",fileName:o.fileName,kind:f,name:l,textSpan:s,displayParts:d,...iee(s,o,g)}}function bP(e){let t=e.getSourceFile();return{sourceFile:t,textSpan:EP(ts(e)?e.expression:e,t)}}function HTe(e,t,r){let i=u1.getIntersectingMeaningFromDeclarations(r,e),o=e.declarations&&Sl(e.declarations)||r,{displayParts:s,symbolKind:l}=$g.getSymbolDisplayPartsDocumentationAndSymbolKind(t,e,o.getSourceFile(),o,o,i);return{displayParts:s,kind:l}}function VBe(e,t,r,i){return{...sG(e),...i&&HBe(e,t,r)}}function jBe(e,t){let r=WTe(e);return t?{...r,isDefinition:e.kind!==0&&JTe(e.node,t)}:r}function WTe(e){let t=sG(e);if(e.kind===0)return{...t,isWriteAccess:!1};let{kind:r,node:i}=e;return{...t,isWriteAccess:zTe(i),isInString:r===2?!0:void 0}}function sG(e){if(e.kind===0)return{textSpan:e.textSpan,fileName:e.fileName};{let t=e.node.getSourceFile(),r=EP(e.node,t);return{textSpan:r,fileName:t.fileName,...iee(r,t,e.context)}}}function HBe(e,t,r){if(e.kind!==0&&Re(t)){let{node:i,kind:o}=e,s=i.parent,l=t.text,f=xf(s);if(f||jN(s)&&s.name===i&&s.dotDotDotToken===void 0){let d={prefixText:l+\": \"},g={suffixText:\": \"+l};if(o===3)return d;if(o===4)return g;if(f){let m=s.parent;return rs(m)&&ar(m.parent)&&Bm(m.parent.left)?d:g}else return d}else if($u(s)&&!s.propertyName){let d=Mu(t.parent)?r.getExportSpecifierLocalTargetSymbol(t.parent):r.getSymbolAtLocation(t);return ya(d.declarations,s)?{prefixText:l+\" as \"}:Cp}else if(Mu(s)&&!s.propertyName)return t===e.node||r.getSymbolAtLocation(t)===r.getSymbolAtLocation(e.node)?{prefixText:l+\" as \"}:{suffixText:\" as \"+l}}return Cp}function WBe(e,t){let r=sG(e);if(e.kind!==0){let{node:i}=e;return{...r,...zBe(i,t)}}else return{...r,kind:\"\",displayParts:[]}}function zBe(e,t){let r=t.getSymbolAtLocation(Kl(e)&&e.name?e.name:e);return r?HTe(r,t,e):e.kind===207?{kind:\"interface\",displayParts:[Yl(20),tf(\"object literal\"),Yl(21)]}:e.kind===228?{kind:\"local class\",displayParts:[Yl(20),tf(\"anonymous local class\"),Yl(21)]}:{kind:aE(e),displayParts:[]}}function JBe(e){let t=sG(e);if(e.kind===0)return{fileName:t.fileName,span:{textSpan:t.textSpan,kind:\"reference\"}};let r=zTe(e.node),i={textSpan:t.textSpan,kind:r?\"writtenReference\":\"reference\",isInString:e.kind===2?!0:void 0,...t.contextSpan&&{contextSpan:t.contextSpan}};return{fileName:t.fileName,span:i}}function EP(e,t,r){let i=e.getStart(t),o=(r||e).getEnd();return es(e)&&o-i>2&&(L.assert(r===void 0),i+=1,o-=1),Wc(i,o)}function aee(e){return e.kind===0?e.textSpan:EP(e.node,e.node.getSourceFile())}function zTe(e){let t=fR(e);return!!t&&KBe(t)||e.kind===88||YI(e)}function JTe(e,t){var r;if(!t)return!1;let i=fR(e)||(e.kind===88?e.parent:_R(e)||e.kind===135&&Ec(e.parent)?e.parent.parent:void 0),o=i&&ar(i)?i.left:void 0;return!!(i&&((r=t.declarations)!=null&&r.some(s=>s===i||s===o)))}function KBe(e){if(e.flags&16777216)return!0;switch(e.kind){case 223:case 205:case 260:case 228:case 88:case 263:case 302:case 278:case 270:case 268:case 273:case 261:case 341:case 349:case 288:case 264:case 267:case 271:case 277:case 166:case 300:case 262:case 165:return!0;case 299:return!qg(e.parent);case 259:case 215:case 173:case 171:case 174:case 175:return!!e.body;case 257:case 169:return!!e.initializer||E2(e.parent);case 170:case 168:case 351:case 344:return!1;default:return L.failBadSyntaxKind(e)}}var oee,see,cee,u1,qBe=gt({\"src/services/findAllReferences.ts\"(){\"use strict\";Fr(),KTe(),oee=(e=>(e[e.Symbol=0]=\"Symbol\",e[e.Label=1]=\"Label\",e[e.Keyword=2]=\"Keyword\",e[e.This=3]=\"This\",e[e.String=4]=\"String\",e[e.TripleSlashReference=5]=\"TripleSlashReference\",e))(oee||{}),see=(e=>(e[e.Span=0]=\"Span\",e[e.Node=1]=\"Node\",e[e.StringLiteral=2]=\"StringLiteral\",e[e.SearchedLocalFoundProperty=3]=\"SearchedLocalFoundProperty\",e[e.SearchedPropertyFoundLocal=4]=\"SearchedPropertyFoundLocal\",e))(see||{}),cee=(e=>(e[e.Other=0]=\"Other\",e[e.References=1]=\"References\",e[e.Rename=2]=\"Rename\",e))(cee||{}),(e=>{function t(Se,at,Tt,ve,nt,ce={},Q=new Set(ve.map(ue=>ue.fileName))){var ue,G,Oe;if(at=r(at,ce),Li(at)){let ae=xk.getReferenceAtPosition(at,Se,Tt);if(!ae?.file)return;let rt=Tt.getTypeChecker().getMergedSymbol(ae.file.symbol);if(rt)return g(Tt,rt,!1,ve,Q);let Ot=Tt.getFileIncludeReasons();return Ot?[{definition:{type:5,reference:ae.reference,file:at},references:o(ae.file,Ot,Tt)||Je}]:void 0}if(!ce.implementations){let ae=v(at,ve,nt);if(ae)return ae}let je=Tt.getTypeChecker(),Ge=je.getSymbolAtLocation(Ec(at)&&at.parent.name||at);if(!Ge){if(!ce.implementations&&es(at)){if(C7(at)){let ae=Tt.getFileIncludeReasons(),rt=(Oe=(G=(ue=at.getSourceFile().resolvedModules)==null?void 0:ue.get(at.text,W_(at.getSourceFile(),at)))==null?void 0:G.resolvedModule)==null?void 0:Oe.resolvedFileName,Ot=rt?Tt.getSourceFile(rt):void 0;if(Ot)return[{definition:{type:4,node:at},references:o(Ot,ae,Tt)||Je}]}return pt(at,ve,je,nt)}return}if(Ge.escapedName===\"export=\")return g(Tt,Ge.parent,!1,ve,Q);let kt=l(Ge,Tt,ve,nt,ce,Q);if(kt&&!(Ge.flags&33554432))return kt;let Kt=s(at,Ge,je),ln=Kt&&l(Kt,Tt,ve,nt,ce,Q),ir=S(Ge,at,ve,Q,je,nt,ce);return f(Tt,kt,ir,ln)}e.getReferencedSymbolsForNode=t;function r(Se,at){return at.use===1?Se=zX(Se):at.use===2&&(Se=_7(Se)),Se}e.getAdjustedNode=r;function i(Se,at,Tt,ve=new Set(Tt.map(nt=>nt.fileName))){var nt,ce;let Q=(nt=at.getSourceFile(Se))==null?void 0:nt.symbol;if(Q)return((ce=g(at,Q,!1,Tt,ve)[0])==null?void 0:ce.references)||Je;let ue=at.getFileIncludeReasons(),G=at.getSourceFile(Se);return G&&ue&&o(G,ue,at)||Je}e.getReferencesForFileName=i;function o(Se,at,Tt){let ve,nt=at.get(Se.path)||Je;for(let ce of nt)if(vb(ce)){let Q=Tt.getSourceFileByPath(ce.file),ue=YL(Tt.getSourceFileByPath,ce);F2(ue)&&(ve=Sn(ve,{kind:0,fileName:Q.fileName,textSpan:lv(ue)}))}return ve}function s(Se,at,Tt){if(Se.parent&&gO(Se.parent)){let ve=Tt.getAliasedSymbol(at),nt=Tt.getMergedSymbol(ve);if(ve!==nt)return nt}}function l(Se,at,Tt,ve,nt,ce){let Q=Se.flags&1536&&Se.declarations&&wr(Se.declarations,Li);if(!Q)return;let ue=Se.exports.get(\"export=\"),G=g(at,Se,!!ue,Tt,ce);if(!ue||!ce.has(Q.fileName))return G;let Oe=at.getTypeChecker();return Se=wd(ue,Oe),f(at,G,S(Se,void 0,Tt,ce,Oe,ve,nt))}function f(Se,...at){let Tt;for(let ve of at)if(!(!ve||!ve.length)){if(!Tt){Tt=ve;continue}for(let nt of ve){if(!nt.definition||nt.definition.type!==0){Tt.push(nt);continue}let ce=nt.definition.symbol,Q=Yc(Tt,G=>!!G.definition&&G.definition.type===0&&G.definition.symbol===ce);if(Q===-1){Tt.push(nt);continue}let ue=Tt[Q];Tt[Q]={definition:ue.definition,references:ue.references.concat(nt.references).sort((G,Oe)=>{let je=d(Se,G),Ge=d(Se,Oe);if(je!==Ge)return Es(je,Ge);let kt=aee(G),Kt=aee(Oe);return kt.start!==Kt.start?Es(kt.start,Kt.start):Es(kt.length,Kt.length)})}}}return Tt}function d(Se,at){let Tt=at.kind===0?Se.getSourceFile(at.fileName):at.node.getSourceFile();return Se.getSourceFiles().indexOf(Tt)}function g(Se,at,Tt,ve,nt){L.assert(!!at.valueDeclaration);let ce=Zi(PTe(Se,ve,at),ue=>{if(ue.kind===\"import\"){let G=ue.literal.parent;if(mb(G)){let Oe=Ga(G.parent,Mh);if(Tt&&!Oe.qualifier)return}return Ym(ue.literal)}else return{kind:0,fileName:ue.referencingFile.fileName,textSpan:lv(ue.ref)}});if(at.declarations)for(let ue of at.declarations)switch(ue.kind){case 308:break;case 264:nt.has(ue.getSourceFile().fileName)&&ce.push(Ym(ue.name));break;default:L.assert(!!(at.flags&33554432),\"Expected a module symbol to be declared by a SourceFile or ModuleDeclaration.\")}let Q=at.exports.get(\"export=\");if(Q?.declarations)for(let ue of Q.declarations){let G=ue.getSourceFile();if(nt.has(G.fileName)){let Oe=ar(ue)&&br(ue.left)?ue.left.expression:pc(ue)?L.checkDefined(Yo(ue,93,G)):sa(ue)||ue;ce.push(Ym(Oe))}}return ce.length?[{definition:{type:0,symbol:at},references:ce}]:Je}function m(Se){return Se.kind===146&&RS(Se.parent)&&Se.parent.operator===146}function v(Se,at,Tt){if(ik(Se.kind))return Se.kind===114&&NS(Se.parent)||Se.kind===146&&!m(Se)?void 0:we(at,Se.kind,Tt,Se.kind===146?m:void 0);if(NA(Se.parent)&&Se.parent.name===Se)return Ve(at,Tt);if(LS(Se)&&oc(Se.parent))return[{definition:{type:2,node:Se},references:[Ym(Se)]}];if(DN(Se)){let ve=s7(Se.parent,Se.text);return ve&&ge(ve.parent,ve)}else if(MX(Se))return ge(Se.parent,Se);if(H2(Se))return gr(Se,at,Tt);if(Se.kind===106)return Ni(Se)}function S(Se,at,Tt,ve,nt,ce,Q){let ue=at&&w(Se,at,nt,!Cr(Q))||Se,G=at?hi(at,ue):7,Oe=[],je=new F(Tt,ve,at?A(at):0,nt,ce,G,Q,Oe),Ge=!Cr(Q)||!ue.declarations?void 0:wr(ue.declarations,Mu);if(Ge)Be(Ge.name,ue,Ge,je.createSearch(at,Se,void 0),je,!0,!0);else if(at&&at.kind===88&&ue.escapedName===\"default\"&&ue.parent)ct(at,ue,je),B(at,ue,{exportingModuleSymbol:ue.parent,exportKind:1},je);else{let kt=je.createSearch(at,ue,void 0,{allSearchSymbols:at?nn(ue,at,nt,Q.use===2,!!Q.providePrefixAndSuffixTextForRename,!!Q.implementations):[ue]});x(ue,je,kt)}return Oe}function x(Se,at,Tt){let ve=$(Se);if(ve)Pe(ve,ve.getSourceFile(),Tt,at,!(Li(ve)&&!ya(at.sourceFiles,ve)));else for(let nt of at.sourceFiles)at.cancellationToken.throwIfCancellationRequested(),R(nt,Tt,at)}function A(Se){switch(Se.kind){case 173:case 135:return 1;case 79:if(Yr(Se.parent))return L.assert(Se.parent.name===Se),2;default:return 0}}function w(Se,at,Tt,ve){let{parent:nt}=at;return Mu(nt)&&ve?Ne(at,Se,nt,Tt):ks(Se.declarations,ce=>{if(!ce.parent){if(Se.flags&33554432)return;L.fail(`Unexpected symbol at ${L.formatSyntaxKind(at.kind)}: ${L.formatSymbol(Se)}`)}return Rd(ce.parent)&&DS(ce.parent.parent)?Tt.getPropertyOfType(Tt.getTypeFromTypeNode(ce.parent.parent),Se.name):void 0})}let C;(Se=>{Se[Se.None=0]=\"None\",Se[Se.Constructor=1]=\"Constructor\",Se[Se.Class=2]=\"Class\"})(C||(C={}));function P(Se){if(!(Se.flags&33555968))return;let at=Se.declarations&&wr(Se.declarations,Tt=>!Li(Tt)&&!Tc(Tt));return at&&at.symbol}class F{constructor(at,Tt,ve,nt,ce,Q,ue,G){this.sourceFiles=at,this.sourceFilesSet=Tt,this.specialSearchKind=ve,this.checker=nt,this.cancellationToken=ce,this.searchMeaning=Q,this.options=ue,this.result=G,this.inheritsFromCache=new Map,this.markSeenContainingTypeReference=W2(),this.markSeenReExportRHS=W2(),this.symbolIdToReferences=[],this.sourceFileToSeenSymbols=[]}includesSourceFile(at){return this.sourceFilesSet.has(at.fileName)}getImportSearches(at,Tt){return this.importTracker||(this.importTracker=ZZ(this.sourceFiles,this.sourceFilesSet,this.checker,this.cancellationToken)),this.importTracker(at,Tt,this.options.use===2)}createSearch(at,Tt,ve,nt={}){let{text:ce=u_(fc(QA(Tt)||P(Tt)||Tt)),allSearchSymbols:Q=[Tt]}=nt,ue=Bs(ce),G=this.options.implementations&&at?dr(at,Tt,this.checker):void 0;return{symbol:Tt,comingFrom:ve,text:ce,escapedText:ue,parents:G,allSearchSymbols:Q,includes:Oe=>ya(Q,Oe)}}referenceAdder(at){let Tt=$a(at),ve=this.symbolIdToReferences[Tt];return ve||(ve=this.symbolIdToReferences[Tt]=[],this.result.push({definition:{type:0,symbol:at},references:ve})),(nt,ce)=>ve.push(Ym(nt,ce))}addStringOrCommentReference(at,Tt){this.result.push({definition:void 0,references:[{kind:0,fileName:at,textSpan:Tt}]})}markSearchedSymbols(at,Tt){let ve=zo(at),nt=this.sourceFileToSeenSymbols[ve]||(this.sourceFileToSeenSymbols[ve]=new Set),ce=!1;for(let Q of Tt)ce=_0(nt,$a(Q))||ce;return ce}}function B(Se,at,Tt,ve){let{importSearches:nt,singleReferences:ce,indirectUsers:Q}=ve.getImportSearches(at,Tt);if(ce.length){let ue=ve.referenceAdder(at);for(let G of ce)W(G,ve)&&ue(G)}for(let[ue,G]of nt)ke(ue.getSourceFile(),ve.createSearch(ue,G,1),ve);if(Q.length){let ue;switch(Tt.exportKind){case 0:ue=ve.createSearch(Se,at,1);break;case 1:ue=ve.options.use===2?void 0:ve.createSearch(Se,at,1,{text:\"default\"});break;case 2:break}if(ue)for(let G of Q)R(G,ue,ve)}}function q(Se,at,Tt,ve,nt,ce,Q,ue){let G=ZZ(Se,new Set(Se.map(kt=>kt.fileName)),at,Tt),{importSearches:Oe,indirectUsers:je,singleReferences:Ge}=G(ve,{exportKind:Q?1:0,exportingModuleSymbol:nt},!1);for(let[kt]of Oe)ue(kt);for(let kt of Ge)Re(kt)&&Mh(kt.parent)&&ue(kt);for(let kt of je)for(let Kt of le(kt,Q?\"default\":ce)){let ln=at.getSymbolAtLocation(Kt),ir=vt(ln?.declarations,ae=>!!zr(ae,pc));Re(Kt)&&!eS(Kt.parent)&&(ln===ve||ir)&&ue(Kt)}}e.eachExportReference=q;function W(Se,at){return Ce(Se,at)?at.options.use!==2?!0:Re(Se)?!(eS(Se.parent)&&Se.escapedText===\"default\"):!1:!1}function Y(Se,at){if(Se.declarations)for(let Tt of Se.declarations){let ve=Tt.getSourceFile();ke(ve,at.createSearch(Tt,Se,0),at,at.includesSourceFile(ve))}}function R(Se,at,Tt){p$(Se).get(at.escapedText)!==void 0&&ke(Se,at,Tt)}function ie(Se,at){return qg(Se.parent.parent)?at.getPropertySymbolOfDestructuringAssignment(Se):void 0}function $(Se){let{declarations:at,flags:Tt,parent:ve,valueDeclaration:nt}=Se;if(nt&&(nt.kind===215||nt.kind===228))return nt;if(!at)return;if(Tt&8196){let ue=wr(at,G=>cd(G,8)||xu(G));return ue?cb(ue,260):void 0}if(at.some(jN))return;let ce=ve&&!(Se.flags&262144);if(ce&&!(BN(ve)&&!ve.globalExports))return;let Q;for(let ue of at){let G=e1(ue);if(Q&&Q!==G||!G||G.kind===308&&!kd(G))return;if(Q=G,ms(Q)){let Oe;for(;Oe=MH(Q);)Q=Oe}}return ce?Q.getSourceFile():Q}function fe(Se,at,Tt,ve=Tt){return Z(Se,at,Tt,()=>!0,ve)||!1}e.isSymbolReferencedInFile=fe;function Z(Se,at,Tt,ve,nt=Tt){let ce=Ad(Se.parent,Se.parent.parent)?Vo(at.getSymbolsOfParameterPropertyDeclaration(Se.parent,Se.text)):at.getSymbolAtLocation(Se);if(ce)for(let Q of le(Tt,ce.name,nt)){if(!Re(Q)||Q===Se||Q.escapedText!==Se.escapedText)continue;let ue=at.getSymbolAtLocation(Q);if(ue===ce||at.getShorthandAssignmentValueSymbol(Q.parent)===ce||Mu(Q.parent)&&Ne(Q,ue,Q.parent,at)===ce){let G=ve(Q);if(G)return G}}}e.eachSymbolReferenceInFile=Z;function U(Se,at){return Pr(le(at,Se),nt=>!!fR(nt)).reduce((nt,ce)=>{let Q=ve(ce);return!vt(nt.declarationNames)||Q===nt.depth?(nt.declarationNames.push(ce),nt.depth=Q):Q<nt.depth&&(nt.declarationNames=[ce],nt.depth=Q),nt},{depth:1/0,declarationNames:[]}).declarationNames;function ve(nt){let ce=0;for(;nt;)nt=e1(nt),ce++;return ce}}e.getTopMostDeclarationNamesInFile=U;function re(Se,at,Tt,ve){if(!Se.name||!Re(Se.name))return!1;let nt=L.checkDefined(Tt.getSymbolAtLocation(Se.name));for(let ce of at)for(let Q of le(ce,nt.name)){if(!Re(Q)||Q===Se.name||Q.escapedText!==Se.name.escapedText)continue;let ue=o7(Q),G=Pa(ue.parent)&&ue.parent.expression===ue?ue.parent:void 0,Oe=Tt.getSymbolAtLocation(Q);if(Oe&&Tt.getRootSymbols(Oe).some(je=>je===nt)&&ve(Q,G))return!0}return!1}e.someSignatureUsage=re;function le(Se,at,Tt=Se){return _e(Se,at,Tt).map(ve=>ef(Se,ve))}function _e(Se,at,Tt=Se){let ve=[];if(!at||!at.length)return ve;let nt=Se.text,ce=nt.length,Q=at.length,ue=nt.indexOf(at,Tt.pos);for(;ue>=0&&!(ue>Tt.end);){let G=ue+Q;(ue===0||!tb(nt.charCodeAt(ue-1),99))&&(G===ce||!tb(nt.charCodeAt(G),99))&&ve.push(ue),ue=nt.indexOf(at,ue+Q+1)}return ve}function ge(Se,at){let Tt=Se.getSourceFile(),ve=at.text,nt=Zi(le(Tt,ve,Se),ce=>ce===at||DN(ce)&&s7(ce,ve)===at?Ym(ce):void 0);return[{definition:{type:1,node:at},references:nt}]}function X(Se,at){switch(Se.kind){case 80:if(gb(Se.parent))return!0;case 79:return Se.text.length===at.length;case 14:case 10:{let Tt=Se;return(c7(Tt)||UX(Se)||vhe(Se)||Pa(Se.parent)&&sS(Se.parent)&&Se.parent.arguments[1]===Se)&&Tt.text.length===at.length}case 8:return c7(Se)&&Se.text.length===at.length;case 88:return at.length===7;default:return!1}}function Ve(Se,at){let Tt=Uo(Se,ve=>(at.throwIfCancellationRequested(),Zi(le(ve,\"meta\",ve),nt=>{let ce=nt.parent;if(NA(ce))return Ym(ce)})));return Tt.length?[{definition:{type:2,node:Tt[0].node},references:Tt}]:void 0}function we(Se,at,Tt,ve){let nt=Uo(Se,ce=>(Tt.throwIfCancellationRequested(),Zi(le(ce,Xa(at),ce),Q=>{if(Q.kind===at&&(!ve||ve(Q)))return Ym(Q)})));return nt.length?[{definition:{type:2,node:nt[0].node},references:nt}]:void 0}function ke(Se,at,Tt,ve=!0){return Tt.cancellationToken.throwIfCancellationRequested(),Pe(Se,Se,at,Tt,ve)}function Pe(Se,at,Tt,ve,nt){if(ve.markSearchedSymbols(at,Tt.allSearchSymbols))for(let ce of _e(at,Tt.text,Se))Ie(at,ce,Tt,ve,nt)}function Ce(Se,at){return!!(ZT(Se)&at.searchMeaning)}function Ie(Se,at,Tt,ve,nt){let ce=ef(Se,at);if(!X(ce,Tt.text)){!ve.options.implementations&&(ve.options.findInStrings&&n1(Se,at)||ve.options.findInComments&&Ghe(Se,at))&&ve.addStringOrCommentReference(Se.fileName,il(at,Tt.text.length));return}if(!Ce(ce,ve))return;let Q=ve.checker.getSymbolAtLocation(ce);if(!Q)return;let ue=ce.parent;if($u(ue)&&ue.propertyName===ce)return;if(Mu(ue)){L.assert(ce.kind===79),Be(ce,Q,ue,Tt,ve,nt);return}let G=Kn(Tt,Q,ce,ve);if(!G){_t(Q,Tt,ve);return}switch(ve.specialSearchKind){case 0:nt&&ct(ce,G,ve);break;case 1:Rt(ce,Se,Tt,ve);break;case 2:We(ce,Tt,ve);break;default:L.assertNever(ve.specialSearchKind)}Yn(ce)&&Wo(ce.parent)&&N0(ce.parent.parent.parent)&&(Q=ce.parent.symbol,!Q)||Ye(ce,Q,Tt,ve)}function Be(Se,at,Tt,ve,nt,ce,Q){L.assert(!Q||!!nt.options.providePrefixAndSuffixTextForRename,\"If alwaysGetReferences is true, then prefix/suffix text must be enabled\");let{parent:ue,propertyName:G,name:Oe}=Tt,je=ue.parent,Ge=Ne(Se,at,Tt,nt.checker);if(!Q&&!ve.includes(Ge))return;if(G?Se===G?(je.moduleSpecifier||kt(),ce&&nt.options.use!==2&&nt.markSeenReExportRHS(Oe)&&ct(Oe,L.checkDefined(Tt.symbol),nt)):nt.markSeenReExportRHS(Se)&&kt():nt.options.use===2&&Oe.escapedText===\"default\"||kt(),!Cr(nt.options)||Q){let ln=Se.escapedText===\"default\"||Tt.name.escapedText===\"default\"?1:0,ir=L.checkDefined(Tt.symbol),ae=eee(ir,ln,nt.checker);ae&&B(Se,ir,ae,nt)}if(ve.comingFrom!==1&&je.moduleSpecifier&&!G&&!Cr(nt.options)){let Kt=nt.checker.getExportSpecifierLocalTargetSymbol(Tt);Kt&&Y(Kt,nt)}function kt(){ce&&ct(Se,Ge,nt)}}function Ne(Se,at,Tt,ve){return Le(Se,Tt)&&ve.getExportSpecifierLocalTargetSymbol(Tt)||at}function Le(Se,at){let{parent:Tt,propertyName:ve,name:nt}=at;return L.assert(ve===Se||nt===Se),ve?ve===Se:!Tt.parent.moduleSpecifier}function Ye(Se,at,Tt,ve){let nt=GTe(Se,at,ve.checker,Tt.comingFrom===1);if(!nt)return;let{symbol:ce}=nt;nt.kind===0?Cr(ve.options)||Y(ce,ve):B(Se,ce,nt.exportInfo,ve)}function _t({flags:Se,valueDeclaration:at},Tt,ve){let nt=ve.checker.getShorthandAssignmentValueSymbol(at),ce=at&&sa(at);!(Se&33554432)&&ce&&Tt.includes(nt)&&ct(ce,nt,ve)}function ct(Se,at,Tt){let{kind:ve,symbol:nt}=\"kind\"in at?at:{kind:void 0,symbol:at};if(Tt.options.use===2&&Se.kind===88)return;let ce=Tt.referenceAdder(nt);Tt.options.implementations?_n(Se,ce,Tt):ce(Se,ve)}function Rt(Se,at,Tt,ve){ZL(Se)&&ct(Se,Tt.symbol,ve);let nt=()=>ve.referenceAdder(Tt.symbol);if(Yr(Se.parent))L.assert(Se.kind===88||Se.parent.name===Se),qe(Tt.symbol,at,nt());else{let ce=En(Se);ce&&(Qt(ce,nt()),kn(ce,ve))}}function We(Se,at,Tt){ct(Se,at.symbol,Tt);let ve=Se.parent;if(Tt.options.use===2||!Yr(ve))return;L.assert(ve.name===Se);let nt=Tt.referenceAdder(at.symbol);for(let ce of ve.members)xA(ce)&&Ca(ce)&&ce.body&&ce.body.forEachChild(function Q(ue){ue.kind===108?nt(ue):!Ia(ue)&&!Yr(ue)&&ue.forEachChild(Q)})}function qe(Se,at,Tt){let ve=zt(Se);if(ve&&ve.declarations)for(let nt of ve.declarations){let ce=Yo(nt,135,at);L.assert(nt.kind===173&&!!ce),Tt(ce)}Se.exports&&Se.exports.forEach(nt=>{let ce=nt.valueDeclaration;if(ce&&ce.kind===171){let Q=ce.body;Q&&Ht(Q,108,ue=>{ZL(ue)&&Tt(ue)})}})}function zt(Se){return Se.members&&Se.members.get(\"__constructor\")}function Qt(Se,at){let Tt=zt(Se.symbol);if(Tt&&Tt.declarations)for(let ve of Tt.declarations){L.assert(ve.kind===173);let nt=ve.body;nt&&Ht(nt,106,ce=>{NX(ce)&&at(ce)})}}function tn(Se){return!!zt(Se.symbol)}function kn(Se,at){if(tn(Se))return;let Tt=Se.symbol,ve=at.createSearch(void 0,Tt,void 0);x(Tt,at,ve)}function _n(Se,at,Tt){if(Rh(Se)&&ri(Se.parent)){at(Se);return}if(Se.kind!==79)return;Se.parent.kind===300&&vn(Se,Tt.checker,at);let ve=Gt(Se);if(ve){at(ve);return}let nt=jn(Se,ue=>!Yu(ue.parent)&&!bi(ue.parent)&&!_T(ue.parent)),ce=nt.parent;if(f6(ce)&&ce.type===nt&&Tt.markSeenContainingTypeReference(ce))if(Jy(ce))Q(ce.initializer);else if(Ia(ce)&&ce.body){let ue=ce.body;ue.kind===238?vT(ue,G=>{G.expression&&Q(G.expression)}):Q(ue)}else pT(ce)&&Q(ce.expression);function Q(ue){$n(ue)&&at(ue)}}function Gt(Se){return Re(Se)||br(Se)?Gt(Se.parent):Vg(Se)?zr(Se.parent.parent,Yr):void 0}function $n(Se){switch(Se.kind){case 214:return $n(Se.expression);case 216:case 215:case 207:case 228:case 206:return!0;default:return!1}}function ui(Se,at,Tt,ve){if(Se===at)return!0;let nt=$a(Se)+\",\"+$a(at),ce=Tt.get(nt);if(ce!==void 0)return ce;Tt.set(nt,!1);let Q=!!Se.declarations&&Se.declarations.some(ue=>NI(ue).some(G=>{let Oe=ve.getTypeAtLocation(G);return!!Oe&&!!Oe.symbol&&ui(Oe.symbol,at,Tt,ve)}));return Tt.set(nt,Q),Q}function Ni(Se){let at=Ww(Se,!1);if(!at)return;let Tt=32;switch(at.kind){case 169:case 168:case 171:case 170:case 173:case 174:case 175:Tt&=Yy(at),at=at.parent;break;default:return}let ve=at.getSourceFile(),nt=Zi(le(ve,\"super\",at),ce=>{if(ce.kind!==106)return;let Q=Ww(ce,!1);return Q&&Ca(Q)===!!Tt&&Q.parent.symbol===at.symbol?Ym(ce):void 0});return[{definition:{type:0,symbol:at.symbol},references:nt}]}function Pi(Se){return Se.kind===79&&Se.parent.kind===166&&Se.parent.name===Se}function gr(Se,at,Tt){let ve=Ku(Se,!1,!1),nt=32;switch(ve.kind){case 171:case 170:if(s_(ve)){nt&=Yy(ve),ve=ve.parent;break}case 169:case 168:case 173:case 174:case 175:nt&=Yy(ve),ve=ve.parent;break;case 308:if(Lc(ve)||Pi(Se))return;case 259:case 215:break;default:return}let ce=Uo(ve.kind===308?at:[ve.getSourceFile()],ue=>(Tt.throwIfCancellationRequested(),le(ue,\"this\",Li(ve)?ue:ve).filter(G=>{if(!H2(G))return!1;let Oe=Ku(G,!1,!1);if(!$p(Oe))return!1;switch(ve.kind){case 215:case 259:return ve.symbol===Oe.symbol;case 171:case 170:return s_(ve)&&ve.symbol===Oe.symbol;case 228:case 260:case 207:return Oe.parent&&$p(Oe.parent)&&ve.symbol===Oe.parent.symbol&&Ca(Oe)===!!nt;case 308:return Oe.kind===308&&!Lc(Oe)&&!Pi(G)}}))).map(ue=>Ym(ue));return[{definition:{type:3,node:ks(ce,ue=>ha(ue.node.parent)?ue.node:void 0)||Se},references:ce}]}function pt(Se,at,Tt,ve){let nt=f7(Se,Tt),ce=Uo(at,Q=>(ve.throwIfCancellationRequested(),Zi(le(Q,Se.text),ue=>{if(es(ue)&&ue.text===Se.text)if(nt){let G=f7(ue,Tt);if(nt!==Tt.getStringType()&&nt===G)return Ym(ue,2)}else return IS(ue)&&!DT(ue,Q)?void 0:Ym(ue,2)})));return[{definition:{type:4,node:Se},references:ce}]}function nn(Se,at,Tt,ve,nt,ce){let Q=[];return Dt(Se,at,Tt,ve,!(ve&&nt),(ue,G,Oe)=>{Oe&&An(Se)!==An(Oe)&&(Oe=void 0),Q.push(Oe||G||ue)},()=>!ce),Q}function Dt(Se,at,Tt,ve,nt,ce,Q){let ue=nP(at);if(ue){let ln=Tt.getShorthandAssignmentValueSymbol(at.parent);if(ln&&ve)return ce(ln,void 0,void 0,3);let ir=Tt.getContextualType(ue.parent),ae=ir&&ks(_5(ue,Tt,ir,!0),oe=>kt(oe,4));if(ae)return ae;let rt=ie(at,Tt),Ot=rt&&ce(rt,void 0,void 0,4);if(Ot)return Ot;let Ke=ln&&ce(ln,void 0,void 0,3);if(Ke)return Ke}let G=s(at,Se,Tt);if(G){let ln=ce(G,void 0,void 0,1);if(ln)return ln}let Oe=kt(Se);if(Oe)return Oe;if(Se.valueDeclaration&&Ad(Se.valueDeclaration,Se.valueDeclaration.parent)){let ln=Tt.getSymbolsOfParameterPropertyDeclaration(Ga(Se.valueDeclaration,ha),Se.name);return L.assert(ln.length===2&&!!(ln[0].flags&1)&&!!(ln[1].flags&4)),kt(Se.flags&1?ln[1]:ln[0])}let je=nc(Se,278);if(!ve||je&&!je.propertyName){let ln=je&&Tt.getExportSpecifierLocalTargetSymbol(je);if(ln){let ir=ce(ln,void 0,void 0,1);if(ir)return ir}}if(!ve){let ln;return nt?ln=jN(at.parent)?I7(Tt,at.parent):void 0:ln=Kt(Se,Tt),ln&&kt(ln,4)}if(L.assert(ve),nt){let ln=Kt(Se,Tt);return ln&&kt(ln,4)}function kt(ln,ir){return ks(Tt.getRootSymbols(ln),ae=>ce(ln,ae,void 0,ir)||(ae.parent&&ae.parent.flags&96&&Q(ae)?pn(ae.parent,ae.name,Tt,rt=>ce(ln,ae,rt,ir)):void 0))}function Kt(ln,ir){let ae=nc(ln,205);if(ae&&jN(ae))return I7(ir,ae)}}function pn(Se,at,Tt,ve){let nt=new Map;return ce(Se);function ce(Q){if(!(!(Q.flags&96)||!V_(nt,$a(Q))))return ks(Q.declarations,ue=>ks(NI(ue),G=>{let Oe=Tt.getTypeAtLocation(G),je=Oe&&Oe.symbol&&Tt.getPropertyOfType(Oe,at);return Oe&&je&&(ks(Tt.getRootSymbols(je),ve)||ce(Oe.symbol))}))}}function An(Se){return Se.valueDeclaration?!!(uu(Se.valueDeclaration)&32):!1}function Kn(Se,at,Tt,ve){let{checker:nt}=ve;return Dt(at,Tt,nt,!1,ve.options.use!==2||!!ve.options.providePrefixAndSuffixTextForRename,(ce,Q,ue,G)=>(ue&&An(at)!==An(ue)&&(ue=void 0),Se.includes(ue||Q||ce)?{symbol:Q&&!(ac(ce)&6)?Q:ce,kind:G}:void 0),ce=>!(Se.parents&&!Se.parents.some(Q=>ui(ce.parent,Q,ve.inheritsFromCache,nt))))}function hi(Se,at){let Tt=ZT(Se),{declarations:ve}=at;if(ve){let nt;do{nt=Tt;for(let ce of ve){let Q=LN(ce);Q&Tt&&(Tt|=Q)}}while(Tt!==nt)}return Tt}e.getIntersectingMeaningFromDeclarations=hi;function ri(Se){return Se.flags&16777216?!(ku(Se)||Ep(Se)):PA(Se)?Jy(Se):Ds(Se)?!!Se.body:Yr(Se)||Ow(Se)}function vn(Se,at,Tt){let ve=at.getSymbolAtLocation(Se),nt=at.getShorthandAssignmentValueSymbol(ve.valueDeclaration);if(nt)for(let ce of nt.getDeclarations())LN(ce)&1&&Tt(ce)}e.getReferenceEntriesForShorthandPropertyAssignment=vn;function Ht(Se,at,Tt){pa(Se,ve=>{ve.kind===at&&Tt(ve),Ht(ve,at,Tt)})}function En(Se){return lW(o7(Se).parent)}function dr(Se,at,Tt){let ve=j2(Se)?Se.parent:void 0,nt=ve&&Tt.getTypeAtLocation(ve.expression),ce=Zi(nt&&(nt.isUnionOrIntersection()?nt.types:nt.symbol===at.parent?void 0:[nt]),Q=>Q.symbol&&Q.symbol.flags&96?Q.symbol:void 0);return ce.length===0?void 0:ce}function Cr(Se){return Se.use===2&&Se.providePrefixAndSuffixTextForRename}})(u1||(u1={}))}}),js={};Mo(js,{Core:()=>u1,DefinitionKind:()=>oee,EntryKind:()=>see,ExportKind:()=>nee,FindReferencesUse:()=>cee,ImportExport:()=>ree,createImportTracker:()=>ZZ,findModuleReferences:()=>PTe,findReferenceOrRenameEntries:()=>BBe,findReferencedSymbols:()=>MBe,getContextNode:()=>sE,getExportInfo:()=>eee,getImplementationsAtPosition:()=>GBe,getImportOrExportSymbol:()=>GTe,getReferenceEntriesForNode:()=>VTe,getTextSpanOfEntry:()=>aee,isContextWithStartAndEndNode:()=>BTe,isDeclarationOfSymbol:()=>JTe,nodeEntry:()=>Ym,toContextSpan:()=>iee,toHighlightSpan:()=>JBe,toReferenceEntry:()=>WTe,toRenameLocation:()=>VBe});var KTe=gt({\"src/services/_namespaces/ts.FindAllReferences.ts\"(){\"use strict\";NBe(),qBe()}});function qTe(e,t,r,i,o){var s,l;let f=YTe(t,r,e),d=f&&[rUe(f.reference.fileName,f.fileName,f.unverified)]||Je;if(f?.file)return d;let g=ef(t,r);if(g===t)return;let{parent:m}=g,v=e.getTypeChecker();if(g.kind===161||Re(g)&&g3(m)&&m.tagName===g)return YBe(v,g)||Je;if(DN(g)){let C=s7(g.parent,g.text);return C?[uee(v,C,\"label\",g.text,void 0)]:void 0}if(g.kind===105){let C=jn(g.parent,P=>oc(P)?\"quit\":Ds(P));return C?[TP(v,C)]:void 0}if(g.kind===133){let C=jn(g,F=>Ds(F));return C&&vt(C.modifiers,F=>F.kind===132)?[TP(v,C)]:void 0}if(g.kind===125){let C=jn(g,F=>Ds(F));return C&&C.asteriskToken?[TP(v,C)]:void 0}if(LS(g)&&oc(g.parent)){let C=g.parent.parent,{symbol:P,failedAliasResolution:F}=cG(C,v,o),B=Pr(C.members,oc),q=P?v.symbolToString(P,C):\"\",W=g.getSourceFile();return on(B,Y=>{let{pos:R}=yp(Y);return R=xo(W.text,R),uee(v,Y,\"constructor\",\"static {}\",q,!1,F,{start:R,length:6})})}let{symbol:S,failedAliasResolution:x}=cG(g,v,o),A=g;if(i&&x){let C=mn([g,...S?.declarations||Je],F=>jn(F,Wse)),P=C&&iR(C);P&&({symbol:S,failedAliasResolution:x}=cG(P,v,o),A=P)}if(!S&&C7(A)){let C=(l=(s=t.resolvedModules)==null?void 0:s.get(A.text,W_(t,A)))==null?void 0:l.resolvedModule;if(C)return[{name:A.text,fileName:C.resolvedFileName,containerName:void 0,containerKind:void 0,kind:\"script\",textSpan:il(0,0),failedAliasResolution:x,isAmbient:Fu(C.resolvedFileName),unverified:A!==g}]}if(!S)return Qi(d,eUe(g,v));if(i&&Ji(S.declarations,C=>C.getSourceFile().fileName===t.fileName))return;let w=aUe(v,g);if(w&&!(Au(g.parent)&&oUe(w))){let C=TP(v,w,x);if(v.getRootSymbols(S).some(P=>XBe(P,w)))return[C];{let P=nC(v,S,g,x,w)||Je;return g.kind===106?[C,...P]:[...P,C]}}if(g.parent.kind===300){let C=v.getShorthandAssignmentValueSymbol(S.valueDeclaration),P=C?.declarations?C.declarations.map(F=>Sk(F,v,C,g,!1,x)):Je;return Qi(P,XTe(v,g)||Je)}if(Ys(g)&&Wo(m)&&cm(m.parent)&&g===(m.propertyName||m.name)){let C=VN(g),P=v.getTypeAtLocation(m.parent);return C===void 0?Je:Uo(P.isUnion()?P.types:[P],F=>{let B=F.getProperty(C);return B&&nC(v,B,g)})}return Qi(d,XTe(v,g)||nC(v,S,g,x))}function XBe(e,t){var r;return e===t.symbol||e===t.symbol.parent||Iu(t.parent)||!rS(t.parent)&&e===((r=zr(t.parent,$p))==null?void 0:r.symbol)}function XTe(e,t){let r=nP(t);if(r){let i=r&&e.getContextualType(r.parent);if(i)return Uo(_5(r,e,i,!1),o=>nC(e,o,t))}}function YBe(e,t){let r=jn(t,_l);if(!(r&&r.name))return;let i=jn(r,Yr);if(!i)return;let o=hp(i);if(!o)return;let s=vs(o.expression),l=_u(s)?s.symbol:e.getSymbolAtLocation(s);if(!l)return;let f=Gi(wA(r.name)),d=zc(r)?e.getPropertyOfType(e.getTypeOfSymbol(l),f):e.getPropertyOfType(e.getDeclaredTypeOfSymbol(l),f);if(d)return nC(e,d,t)}function YTe(e,t,r){var i,o,s,l;let f=rC(e.referencedFiles,t);if(f){let m=r.getSourceFileFromReference(e,f);return m&&{reference:f,fileName:m.fileName,file:m,unverified:!1}}let d=rC(e.typeReferenceDirectives,t);if(d){let m=(i=r.getResolvedTypeReferenceDirectives().get(d.fileName,d.resolutionMode||e.impliedNodeFormat))==null?void 0:i.resolvedTypeReferenceDirective,v=m&&r.getSourceFile(m.resolvedFileName);return v&&{reference:d,fileName:v.fileName,file:v,unverified:!1}}let g=rC(e.libReferenceDirectives,t);if(g){let m=r.getLibFileFromReference(g);return m&&{reference:g,fileName:m.fileName,file:m,unverified:!1}}if((o=e.resolvedModules)!=null&&o.size()){let m=nk(e,t);if(C7(m)&&fl(m.text)&&e.resolvedModules.has(m.text,W_(e,m))){let v=(l=(s=e.resolvedModules.get(m.text,W_(e,m)))==null?void 0:s.resolvedModule)==null?void 0:l.resolvedFileName,S=v||Fy(ni(e.fileName),m.text);return{file:r.getSourceFile(S),fileName:S,reference:{pos:m.getStart(),end:m.getEnd(),fileName:m.text},unverified:!v}}}}function $Be(e,t,r){let i=ef(t,r);if(i===t)return;if(NA(i.parent)&&i.parent.name===i)return lee(e.getTypeAtLocation(i.parent),e,i.parent,!1);let{symbol:o,failedAliasResolution:s}=cG(i,e,!1);if(!o)return;let l=e.getTypeOfSymbolAtLocation(o,i),f=QBe(o,l,e),d=f&&lee(f,e,i,s),g=d&&d.length!==0?d:lee(l,e,i,s);return g.length?g:!(o.flags&111551)&&o.flags&788968?nC(e,wd(o,e),i,s):void 0}function lee(e,t,r,i){return Uo(e.isUnion()&&!(e.flags&32)?e.types:[e],o=>o.symbol&&nC(t,o.symbol,r,i))}function QBe(e,t,r){if(t.symbol===e||e.valueDeclaration&&t.symbol&&wi(e.valueDeclaration)&&e.valueDeclaration.initializer===t.symbol.valueDeclaration){let i=t.getCallSignatures();if(i.length===1)return r.getReturnTypeOfSignature(Vo(i))}}function ZBe(e,t,r){let i=qTe(e,t,r);if(!i||i.length===0)return;let o=rC(t.referencedFiles,r)||rC(t.typeReferenceDirectives,r)||rC(t.libReferenceDirectives,r);if(o)return{definitions:i,textSpan:lv(o)};let s=ef(t,r),l=il(s.getStart(),s.getWidth());return{definitions:i,textSpan:l}}function eUe(e,t){return Zi(t.getIndexInfosAtLocation(e),r=>r.declaration&&TP(t,r.declaration))}function cG(e,t,r){let i=t.getSymbolAtLocation(e),o=!1;if(i?.declarations&&i.flags&2097152&&!r&&tUe(e,i.declarations[0])){let s=t.getAliasedSymbol(i);if(s.declarations)return{symbol:s};o=!0}return{symbol:i,failedAliasResolution:o}}function tUe(e,t){return e.kind!==79?!1:e.parent===t?!0:t.kind!==271}function nUe(e){if(!RI(e))return!1;let t=jn(e,r=>Iu(r)?!0:RI(r)?!1:\"quit\");return!!t&&ic(t)===5}function nC(e,t,r,i,o){let s=Pr(t.declarations,v=>v!==o),l=Pr(s,v=>!nUe(v)),f=vt(l)?l:s;return d()||g()||on(f,v=>Sk(v,e,t,r,!1,i));function d(){if(t.flags&32&&!(t.flags&19)&&(ZL(r)||r.kind===135)){let v=wr(s,Yr)||L.fail(\"Expected declaration to have at least one class-like declaration\");return m(v.members,!0)}}function g(){return PX(r)||VX(r)?m(s,!1):void 0}function m(v,S){if(!v)return;let x=v.filter(S?Ec:Ia),A=x.filter(w=>!!w.body);return x.length?A.length!==0?A.map(w=>Sk(w,e,t,r)):[Sk(To(x),e,t,r,!1,i)]:void 0}}function Sk(e,t,r,i,o,s){let l=t.symbolToString(r),f=$g.getSymbolKind(t,r,i),d=r.parent?t.symbolToString(r.parent,i):\"\";return uee(t,e,f,l,d,o,s)}function uee(e,t,r,i,o,s,l,f){let d=t.getSourceFile();if(!f){let g=sa(t)||t;f=Du(g,d)}return{fileName:d.fileName,textSpan:f,kind:r,name:i,containerKind:void 0,containerName:o,...js.toContextSpan(f,d,js.getContextNode(t)),isLocal:!dee(e,t),isAmbient:!!(t.flags&16777216),unverified:s,failedAliasResolution:l}}function dee(e,t){if(e.isDeclarationVisible(t))return!0;if(!t.parent)return!1;if(Jy(t.parent)&&t.parent.initializer===t)return dee(e,t.parent);switch(t.kind){case 169:case 174:case 175:case 171:if(cd(t,8))return!1;case 173:case 299:case 300:case 207:case 228:case 216:case 215:return dee(e,t.parent);default:return!1}}function TP(e,t,r){return Sk(t,e,t.symbol,t,!1,r)}function rC(e,t){return wr(e,r=>Y8(r,t))}function rUe(e,t,r){return{fileName:t,textSpan:Wc(0,0),kind:\"script\",name:e,containerName:void 0,containerKind:void 0,unverified:r}}function iUe(e){let t=jn(e,i=>!j2(i)),r=t?.parent;return r&&rS(r)&&P6(r)===t?r:void 0}function aUe(e,t){let r=iUe(t),i=r&&e.getResolvedSignature(r);return zr(i&&i.declaration,o=>Ia(o)&&!Jm(o))}function oUe(e){switch(e.kind){case 173:case 182:case 177:return!0;default:return!1}}var sUe=gt({\"src/services/goToDefinition.ts\"(){\"use strict\";Fr()}}),xk={};Mo(xk,{createDefinitionInfo:()=>Sk,findReferenceInPosition:()=>rC,getDefinitionAndBoundSpan:()=>ZBe,getDefinitionAtPosition:()=>qTe,getReferenceAtPosition:()=>YTe,getTypeDefinitionAtPosition:()=>$Be});var cUe=gt({\"src/services/_namespaces/ts.GoToDefinition.ts\"(){\"use strict\";sUe()}});function lUe(e){return e.includeInlayParameterNameHints===\"literals\"||e.includeInlayParameterNameHints===\"all\"}function uUe(e){return e.includeInlayParameterNameHints===\"literals\"}function dUe(e){let{file:t,program:r,span:i,cancellationToken:o,preferences:s}=e,l=t.text,f=r.getCompilerOptions(),d=r.getTypeChecker(),g=[];return m(t),g;function m(le){if(!(!le||le.getFullWidth()===0)){switch(le.kind){case 264:case 260:case 261:case 259:case 228:case 215:case 171:case 216:o.throwIfCancellationRequested()}if($8(i,le.pos,le.getFullWidth())&&!(bi(le)&&!Vg(le)))return s.includeInlayVariableTypeHints&&wi(le)||s.includeInlayPropertyDeclarationTypeHints&&Na(le)?P(le):s.includeInlayEnumMemberValueHints&&q0(le)?w(le):lUe(s)&&(Pa(le)||z0(le))?F(le):(s.includeInlayFunctionParameterTypeHints&&Ds(le)&&b4(le)&&ie(le),s.includeInlayFunctionLikeReturnTypeHints&&v(le)&&Y(le)),pa(le,m)}}function v(le){return xs(le)||ms(le)||Jc(le)||Nc(le)||p_(le)}function S(le,_e,ge){g.push({text:`${ge?\"...\":\"\"}${fe(le,lG)}:`,position:_e,kind:\"Parameter\",whitespaceAfter:!0})}function x(le,_e){g.push({text:`: ${fe(le,lG)}`,position:_e,kind:\"Type\",whitespaceBefore:!0})}function A(le,_e){g.push({text:`= ${fe(le,lG)}`,position:_e,kind:\"Enum\",whitespaceBefore:!0})}function w(le){if(le.initializer)return;let _e=d.getConstantValue(le);_e!==void 0&&A(_e.toString(),le.end)}function C(le){return le.symbol&&le.symbol.flags&1536}function P(le){if(!le.initializer||La(le.name)||wi(le)&&!re(le)||Cl(le))return;let ge=d.getTypeAtLocation(le);if(C(ge))return;let X=Z(ge);if(X){if(s.includeInlayVariableTypeHintsWhenTypeMatchesName===!1&&W1(le.name.getText(),X))return;x(X,le.name.end)}}function F(le){let _e=le.arguments;if(!_e||!_e.length)return;let ge=[],X=d.getResolvedSignatureForSignatureHelp(le,ge);if(!(!X||!ge.length))for(let Ve=0;Ve<_e.length;++Ve){let we=_e[Ve],ke=vs(we);if(uUe(s)&&!W(ke))continue;let Pe=d.getParameterIdentifierNameAtPosition(X,Ve);if(Pe){let[Ce,Ie]=Pe;if(!(s.includeInlayParameterNameHintsWhenArgumentMatchesName||!B(ke,Ce))&&!Ie)continue;let Ne=Gi(Ce);if(q(ke,Ne))continue;S(Ne,we.getStart(),Ie)}}}function B(le,_e){return Re(le)?le.text===_e:br(le)?le.name.text===_e:!1}function q(le,_e){if(!i_(_e,f.target,RR(t.scriptKind)))return!1;let ge=Nm(l,le.pos);if(!ge?.length)return!1;let X=$Te(_e);return vt(ge,Ve=>X.test(l.substring(Ve.pos,Ve.end)))}function W(le){switch(le.kind){case 221:{let _e=le.operand;return fT(_e)||Re(_e)&&cL(_e.escapedText)}case 110:case 95:case 104:case 14:case 225:return!0;case 79:{let _e=le.escapedText;return U(_e)||cL(_e)}}return fT(le)}function Y(le){if(xs(le)&&!Yo(le,20,t)||U_(le)||!le.body)return;let ge=d.getSignatureFromDeclaration(le);if(!ge)return;let X=d.getReturnTypeOfSignature(ge);if(C(X))return;let Ve=Z(X);Ve&&x(Ve,R(le))}function R(le){let _e=Yo(le,21,t);return _e?_e.end:le.parameters.end}function ie(le){let _e=d.getSignatureFromDeclaration(le);if(_e)for(let ge=0;ge<le.parameters.length&&ge<_e.parameters.length;++ge){let X=le.parameters[ge];if(!re(X)||Cl(X))continue;let we=$(_e.parameters[ge]);we&&x(we,X.questionToken?X.questionToken.end:X.name.end)}}function $(le){let _e=le.valueDeclaration;if(!_e||!ha(_e))return;let ge=d.getTypeOfSymbolAtLocation(le,_e);if(!C(ge))return Z(ge)}function fe(le,_e){return le.length>_e?le.substr(0,_e-3)+\"...\":le}function Z(le){let ge=rE();return SI(X=>{let Ve=d.typeToTypeNode(le,void 0,71286784);L.assertIsDefined(Ve,\"should always get typenode\"),ge.writeNode(4,Ve,t,X)})}function U(le){return le===\"undefined\"}function re(le){if((CT(le)||wi(le)&&kh(le))&&le.initializer){let _e=vs(le.initializer);return!(W(_e)||z0(_e)||rs(_e)||pT(_e))}return!0}}var lG,$Te,fUe=gt({\"src/services/inlayHints.ts\"(){\"use strict\";Fr(),lG=30,$Te=e=>new RegExp(`^\\\\s?/\\\\*\\\\*?\\\\s?${e}\\\\s?\\\\*\\\\/\\\\s?$`)}}),fee={};Mo(fee,{provideInlayHints:()=>dUe});var _Ue=gt({\"src/services/_namespaces/ts.InlayHints.ts\"(){\"use strict\";fUe()}});function pUe(e,t){let r=[];return lY(e,i=>{for(let o of hUe(i)){let s=dm(o)&&o.tags&&wr(o.tags,f=>f.kind===330&&(f.tagName.escapedText===\"inheritDoc\"||f.tagName.escapedText===\"inheritdoc\"));if(o.comment===void 0&&!s||dm(o)&&i.kind!==349&&i.kind!==341&&o.tags&&o.tags.some(f=>f.kind===349||f.kind===341)&&!o.tags.some(f=>f.kind===344||f.kind===345))continue;let l=o.comment?ux(o.comment,t):[];s&&s.comment&&(l=l.concat(ux(s.comment,t))),ya(r,l,mUe)||r.push(l)}}),t_(DU(r,[K2()]))}function mUe(e,t){return GD(e,t,(r,i)=>r.kind===i.kind&&r.text===i.text)}function hUe(e){switch(e.kind){case 344:case 351:return[e];case 341:case 349:return[e,e.parent];default:return PH(e)}}function gUe(e,t){let r=[];return lY(e,i=>{let o=A0(i);if(!(o.some(s=>s.kind===349||s.kind===341)&&!o.some(s=>s.kind===344||s.kind===345)))for(let s of o)r.push({name:s.tagName.text,text:yUe(s,t)})}),r}function ux(e,t){return typeof e==\"string\"?[tf(e)]:Uo(e,r=>r.kind===324?[tf(r.text)]:Qhe(r,t))}function yUe(e,t){let{comment:r,kind:i}=e,o=vUe(i);switch(i){case 352:let f=e.typeExpression;return f?s(f):r===void 0?void 0:ux(r,t);case 332:return s(e.class);case 331:return s(e.class);case 348:let d=e,g=[];if(d.constraint&&g.push(tf(d.constraint.getText())),Fn(d.typeParameters)){Fn(g)&&g.push(Qs());let v=d.typeParameters[d.typeParameters.length-1];mn(d.typeParameters,S=>{g.push(o(S.getText())),v!==S&&g.push(Yl(27),Qs())})}return r&&g.push(Qs(),...ux(r,t)),g;case 347:case 353:return s(e.typeExpression);case 349:case 341:case 351:case 344:case 350:let{name:m}=e;return m?s(m):r===void 0?void 0:ux(r,t);default:return r===void 0?void 0:ux(r,t)}function s(f){return l(f.getText())}function l(f){return r?f.match(/^https?$/)?[tf(f),...ux(r,t)]:[o(f),Qs(),...ux(r,t)]:[tf(f)]}}function vUe(e){switch(e){case 344:return Khe;case 351:return qhe;case 348:return Yhe;case 349:case 341:return Xhe;default:return tf}}function bUe(){return ZTe||(ZTe=on(pee,e=>({name:e,kind:\"keyword\",kindModifiers:\"\",sortText:lx.SortText.LocationPriority})))}function EUe(){return e1e||(e1e=on(pee,e=>({name:`@${e}`,kind:\"keyword\",kindModifiers:\"\",sortText:lx.SortText.LocationPriority})))}function QTe(e){return{name:e,kind:\"\",kindModifiers:\"\",displayParts:[tf(e)],documentation:Je,tags:void 0,codeActions:void 0}}function TUe(e){if(!Re(e.name))return Je;let t=e.name.text,r=e.parent,i=r.parent;return Ia(i)?Zi(i.parameters,o=>{if(!Re(o.name))return;let s=o.name.text;if(!(r.tags.some(l=>l!==e&&xp(l)&&Re(l.name)&&l.name.escapedText===s)||t!==void 0&&!na(s,t)))return{name:s,kind:\"parameter\",kindModifiers:\"\",sortText:lx.SortText.LocationPriority}}):[]}function SUe(e){return{name:e,kind:\"parameter\",kindModifiers:\"\",displayParts:[tf(e)],documentation:Je,tags:void 0,codeActions:void 0}}function xUe(e,t,r,i){let o=Vi(t,r),s=jn(o,dm);if(s&&(s.comment!==void 0||Fn(s.tags)))return;let l=o.getStart(t);if(!s&&l<r)return;let f=LUe(o,i);if(!f)return;let{commentOwner:d,parameters:g,hasReturn:m}=f,v=Kd(d)&&d.jsDoc?d.jsDoc:void 0,S=Os(v);if(d.getStart(t)<r||S&&s&&S!==s)return;let x=AUe(t,r),A=ES(t.fileName),w=(g?CUe(g||[],A,x,e):\"\")+(m?IUe(x,e):\"\"),C=\"/**\",P=\" */\",F=(v||[]).some(B=>!!B.tags);if(w&&!F){let B=C+e+x+\" * \",q=l===r?e+x:\"\";return{newText:B+e+w+x+P+q,caretOffset:B.length}}return{newText:C+P,caretOffset:3}}function AUe(e,t){let{text:r}=e,i=Wf(t,e),o=i;for(;o<=t&&Yp(r.charCodeAt(o));o++);return r.slice(i,o)}function CUe(e,t,r,i){return e.map(({name:o,dotDotDotToken:s},l)=>{let f=o.kind===79?o.text:\"param\"+l;return`${r} * @param ${t?s?\"{...any} \":\"{any} \":\"\"}${f}${i}`}).join(\"\")}function IUe(e,t){return`${e} * @returns${t}`}function LUe(e,t){return Lse(e,r=>_ee(r,t))}function _ee(e,t){switch(e.kind){case 259:case 215:case 171:case 173:case 170:case 216:let r=e;return{commentOwner:e,parameters:r.parameters,hasReturn:SP(r,t)};case 299:return _ee(e.initializer,t);case 260:case 261:case 263:case 302:case 262:return{commentOwner:e};case 168:{let o=e;return o.type&&Jm(o.type)?{commentOwner:e,parameters:o.type.parameters,hasReturn:SP(o.type,t)}:{commentOwner:e}}case 240:{let s=e.declarationList.declarations,l=s.length===1&&s[0].initializer?kUe(s[0].initializer):void 0;return l?{commentOwner:e,parameters:l.parameters,hasReturn:SP(l,t)}:{commentOwner:e}}case 308:return\"quit\";case 264:return e.parent.kind===264?void 0:{commentOwner:e};case 241:return _ee(e.expression,t);case 223:{let o=e;return ic(o)===0?\"quit\":Ia(o.right)?{commentOwner:e,parameters:o.right.parameters,hasReturn:SP(o.right,t)}:{commentOwner:e}}case 169:let i=e.initializer;if(i&&(ms(i)||xs(i)))return{commentOwner:e,parameters:i.parameters,hasReturn:SP(i,t)}}}function SP(e,t){return!!t?.generateReturnInDocTemplate&&(Jm(e)||xs(e)&&ot(e.body)||Ds(e)&&e.body&&Va(e.body)&&!!vT(e.body,r=>r))}function kUe(e){for(;e.kind===214;)e=e.expression;switch(e.kind){case 215:case 216:return e;case 228:return wr(e.members,Ec)}}var pee,ZTe,e1e,t1e,DUe=gt({\"src/services/jsDoc.ts\"(){\"use strict\";Fr(),pee=[\"abstract\",\"access\",\"alias\",\"argument\",\"async\",\"augments\",\"author\",\"borrows\",\"callback\",\"class\",\"classdesc\",\"constant\",\"constructor\",\"constructs\",\"copyright\",\"default\",\"deprecated\",\"description\",\"emits\",\"enum\",\"event\",\"example\",\"exports\",\"extends\",\"external\",\"field\",\"file\",\"fileoverview\",\"fires\",\"function\",\"generator\",\"global\",\"hideconstructor\",\"host\",\"ignore\",\"implements\",\"inheritdoc\",\"inner\",\"instance\",\"interface\",\"kind\",\"lends\",\"license\",\"link\",\"linkcode\",\"linkplain\",\"listens\",\"member\",\"memberof\",\"method\",\"mixes\",\"module\",\"name\",\"namespace\",\"overload\",\"override\",\"package\",\"param\",\"private\",\"prop\",\"property\",\"protected\",\"public\",\"readonly\",\"requires\",\"returns\",\"satisfies\",\"see\",\"since\",\"static\",\"summary\",\"template\",\"this\",\"throws\",\"todo\",\"tutorial\",\"type\",\"typedef\",\"var\",\"variation\",\"version\",\"virtual\",\"yields\"],t1e=QTe}}),xb={};Mo(xb,{getDocCommentTemplateAtPosition:()=>xUe,getJSDocParameterNameCompletionDetails:()=>SUe,getJSDocParameterNameCompletions:()=>TUe,getJSDocTagCompletionDetails:()=>QTe,getJSDocTagCompletions:()=>EUe,getJSDocTagNameCompletionDetails:()=>t1e,getJSDocTagNameCompletions:()=>bUe,getJsDocCommentsFromDeclarations:()=>pUe,getJsDocTagsFromDeclarations:()=>gUe});var wUe=gt({\"src/services/_namespaces/ts.JsDoc.ts\"(){\"use strict\";DUe()}});function RUe(e,t,r,i,o,s){let l=nr.ChangeTracker.fromContext({host:r,formatContext:t,preferences:o}),f=s===\"SortAndCombine\"||s===\"All\",d=f,g=s===\"RemoveUnused\"||s===\"All\",m=mee(e,e.statements.filter(gl)),v=XUe(o,f?()=>i1e(m,o)===2:void 0),S=A=>(g&&(A=NUe(A,e,i)),d&&(A=n1e(A,v,e)),f&&(A=Ag(A,(w,C)=>bee(w,C,v))),A);if(m.forEach(A=>x(A,S)),s!==\"RemoveUnused\"){let A=e.statements.filter(Il);x(A,w=>hee(w,v))}for(let A of e.statements.filter(lu)){if(!A.body)continue;if(mee(e,A.body.statements.filter(gl)).forEach(C=>x(C,S)),s!==\"RemoveUnused\"){let C=A.body.statements.filter(Il);x(C,P=>hee(P,v))}}return l.getChanges();function x(A,w){if(Fn(A)===0)return;D7(A[0]);let C=d?YC(A,B=>xP(B.moduleSpecifier)):[A],P=f?Ag(C,(B,q)=>yee(B[0].moduleSpecifier,q[0].moduleSpecifier,v)):C,F=Uo(P,B=>xP(B[0].moduleSpecifier)?w(B):B);if(F.length===0)l.deleteNodes(e,A,{leadingTriviaOption:nr.LeadingTriviaOption.Exclude,trailingTriviaOption:nr.TrailingTriviaOption.Include},!0);else{let B={leadingTriviaOption:nr.LeadingTriviaOption.Exclude,trailingTriviaOption:nr.TrailingTriviaOption.Include,suffix:bb(r,t.options)};l.replaceNodeWithNodes(e,A[0],F,B);let q=l.nodeHasTrailingComment(e,A[0],B);l.deleteNodes(e,A.slice(1),{trailingTriviaOption:nr.TrailingTriviaOption.Include},q)}}}function mee(e,t){let r=kg(e.languageVersion,!1,e.languageVariant),i=[],o=0;for(let s of t)i[o]&&OUe(e,s,r)&&o++,i[o]||(i[o]=[]),i[o].push(s);return i}function OUe(e,t,r){let i=t.getFullStart(),o=t.getStart();r.setText(e.text,i,o-i);let s=0;for(;r.getTokenPos()<o;)if(r.scan()===4&&(s++,s>=2))return!0;return!1}function NUe(e,t,r){let i=r.getTypeChecker(),o=r.getCompilerOptions(),s=i.getJsxNamespace(t),l=i.getJsxFragmentFactory(t),f=!!(t.transformFlags&2),d=[];for(let m of e){let{importClause:v,moduleSpecifier:S}=m;if(!v){d.push(m);continue}let{name:x,namedBindings:A}=v;if(x&&!g(x)&&(x=void 0),A)if(nv(A))g(A.name)||(A=void 0);else{let w=A.elements.filter(C=>g(C.name));w.length<A.elements.length&&(A=w.length?D.updateNamedImports(A,w):void 0)}x||A?d.push(Ak(m,x,A)):PUe(t,S)&&(t.isDeclarationFile?d.push(D.createImportDeclaration(m.modifiers,void 0,S,void 0)):d.push(m))}return d;function g(m){return f&&(m.text===s||l&&m.text===l)&&wY(o.jsx)||js.Core.isSymbolReferencedInFile(m,i,t)}}function PUe(e,t){let r=yo(t)&&t.text;return Ta(r)&&vt(e.moduleAugmentations,i=>yo(i)&&i.text===r)}function xP(e){return e!==void 0&&es(e)?e.text:void 0}function MUe(e,t,r){let i=uG(t);return n1e(e,i,r)}function n1e(e,t,r){if(e.length===0)return e;let{importWithoutClause:i,typeOnlyImports:o,regularImports:s}=FUe(e),l=[];i&&l.push(i);for(let f of[s,o]){let d=f===o,{defaultImports:g,namespaceImports:m,namedImports:v}=f;if(!d&&g.length===1&&m.length===1&&v.length===0){let q=g[0];l.push(Ak(q,q.importClause.name,m[0].importClause.namedBindings));continue}let S=Ag(m,(q,W)=>t(q.importClause.namedBindings.name.text,W.importClause.namedBindings.name.text));for(let q of S)l.push(Ak(q,void 0,q.importClause.namedBindings));let x=Sl(g),A=Sl(v),w=x??A;if(!w)continue;let C,P=[];if(g.length===1)C=g[0].importClause.name;else for(let q of g)P.push(D.createImportSpecifier(!1,D.createIdentifier(\"default\"),q.importClause.name));P.push(...zUe(v));let F=D.createNodeArray(r1e(P,t),A?.importClause.namedBindings.elements.hasTrailingComma),B=F.length===0?C?void 0:D.createNamedImports(Je):A?D.updateNamedImports(A.importClause.namedBindings,F):D.createNamedImports(F);r&&B&&A?.importClause.namedBindings&&!DT(A.importClause.namedBindings,r)&&Jn(B,2),d&&C&&B?(l.push(Ak(w,C,void 0)),l.push(Ak(A??w,void 0,B))):l.push(Ak(w,C,B))}return l}function FUe(e){let t,r={defaultImports:[],namespaceImports:[],namedImports:[]},i={defaultImports:[],namespaceImports:[],namedImports:[]};for(let o of e){if(o.importClause===void 0){t=t||o;continue}let s=o.importClause.isTypeOnly?r:i,{name:l,namedBindings:f}=o.importClause;l&&s.defaultImports.push(o),f&&(nv(f)?s.namespaceImports.push(o):s.namedImports.push(o))}return{importWithoutClause:t,typeOnlyImports:r,regularImports:i}}function GUe(e,t){let r=uG(t);return hee(e,r)}function hee(e,t){if(e.length===0)return e;let{exportWithoutClause:r,namedExports:i,typeOnlyExports:o}=l(e),s=[];r&&s.push(r);for(let f of[i,o]){if(f.length===0)continue;let d=[];d.push(...Uo(f,v=>v.exportClause&&h_(v.exportClause)?v.exportClause.elements:Je));let g=r1e(d,t),m=f[0];s.push(D.updateExportDeclaration(m,m.modifiers,m.isTypeOnly,m.exportClause&&(h_(m.exportClause)?D.updateNamedExports(m.exportClause,g):D.updateNamespaceExport(m.exportClause,m.exportClause.name)),m.moduleSpecifier,m.assertClause))}return s;function l(f){let d,g=[],m=[];for(let v of f)v.exportClause===void 0?d=d||v:v.isTypeOnly?m.push(v):g.push(v);return{exportWithoutClause:d,namedExports:g,typeOnlyExports:m}}}function Ak(e,t,r){return D.updateImportDeclaration(e,e.modifiers,D.updateImportClause(e.importClause,e.importClause.isTypeOnly,t,r),e.moduleSpecifier,e.assertClause)}function r1e(e,t){return Ag(e,(r,i)=>gee(r,i,t))}function gee(e,t,r){return g0(e.isTypeOnly,t.isTypeOnly)||r(e.name.text,t.name.text)}function BUe(e,t,r){let i=uG(!!r);return yee(e,t,i)}function yee(e,t,r){let i=e===void 0?void 0:xP(e),o=t===void 0?void 0:xP(t);return g0(i===void 0,o===void 0)||g0(fl(i),fl(o))||r(i,o)}function vee(e){var t;switch(e.kind){case 268:return(t=zr(e.moduleReference,um))==null?void 0:t.expression;case 269:return e.moduleSpecifier;case 240:return e.declarationList.declarations[0].initializer.arguments[0]}}function UUe(e,t){return i1e(mee(e,e.statements.filter(gl)),t)}function i1e(e,t){let r=dx(t,!1),i=dx(t,!0),o=3,s=!1;for(let l of e){if(l.length>1){let d=l8(l,g=>{var m,v;return(v=(m=zr(g.moduleSpecifier,yo))==null?void 0:m.text)!=null?v:\"\"},r,i);if(d&&(o&=d,s=!0),!o)return o}let f=wr(l,d=>{var g,m;return((m=zr((g=d.importClause)==null?void 0:g.namedBindings,jg))==null?void 0:m.elements.length)>1});if(f){let d=Eee(f.importClause.namedBindings.elements,t);if(d&&(o&=d,s=!0),!o)return o}if(o!==3)return o}return s?0:o}function VUe(e,t){let r=dx(t,!1),i=dx(t,!0);return l8(e,o=>xP(vee(o))||\"\",r,i)}function jUe(e,t,r){let i=Py(e,t,Ks,(o,s)=>bee(o,s,r));return i<0?~i:i}function HUe(e,t,r){let i=Py(e,t,Ks,(o,s)=>gee(o,s,r));return i<0?~i:i}function bee(e,t,r){return yee(vee(e),vee(t),r)||WUe(e,t)}function WUe(e,t){return Es(a1e(e),a1e(t))}function a1e(e){var t;switch(e.kind){case 269:return e.importClause?e.importClause.isTypeOnly?1:((t=e.importClause.namedBindings)==null?void 0:t.kind)===271?2:e.importClause.name?3:4:0;case 268:return 5;case 240:return 6}}function zUe(e){return Uo(e,t=>on(JUe(t),r=>r.name&&r.propertyName&&r.name.escapedText===r.propertyName.escapedText?D.updateImportSpecifier(r,r.isTypeOnly,void 0,r.name):r))}function JUe(e){var t;return(t=e.importClause)!=null&&t.namedBindings&&jg(e.importClause.namedBindings)?e.importClause.namedBindings.elements:void 0}function uG(e){return e?Sae:su}function KUe(e,t){var r,i,o;let s=qUe(t),l=(r=t.organizeImportsCaseFirst)!=null?r:!1,f=(i=t.organizeImportsNumericCollation)!=null?i:!1,d=(o=t.organizeImportsAccentCollation)!=null?o:!0,g=e?d?\"accent\":\"base\":d?\"variant\":\"case\";return new Intl.Collator(s,{usage:\"sort\",caseFirst:l||\"false\",sensitivity:g,numeric:f}).compare}function qUe(e){let t=e.organizeImportsLocale;t===\"auto\"&&(t=xae()),t===void 0&&(t=\"en\");let r=Intl.Collator.supportedLocalesOf(t);return r.length?r[0]:\"en\"}function dx(e,t){var r;return((r=e.organizeImportsCollation)!=null?r:\"ordinal\")===\"unicode\"?KUe(t,e):uG(t)}function XUe(e,t){var r;let i=typeof e.organizeImportsIgnoreCase==\"boolean\"?e.organizeImportsIgnoreCase:(r=t?.())!=null?r:!1;return dx(e,i)}var o1e,Eee,YUe=gt({\"src/services/organizeImports.ts\"(){\"use strict\";Fr(),o1e=class{has([e,t]){return this._lastPreferences!==t||!this._cache?!1:this._cache.has(e)}get([e,t]){if(!(this._lastPreferences!==t||!this._cache))return this._cache.get(e)}set([e,t],r){var i;this._lastPreferences!==t&&(this._lastPreferences=t,this._cache=void 0),(i=this._cache)!=null||(this._cache=new WeakMap),this._cache.set(e,r)}},Eee=Eae((e,t)=>{if(!dae(e,(o,s)=>g0(o.isTypeOnly,s.isTypeOnly)))return 0;let r=dx(t,!1),i=dx(t,!0);return l8(e,o=>o.name.text,r,i)},new o1e)}}),b_={};Mo(b_,{coalesceExports:()=>GUe,coalesceImports:()=>MUe,compareImportOrExportSpecifiers:()=>gee,compareImportsOrRequireStatements:()=>bee,compareModuleSpecifiers:()=>BUe,detectImportDeclarationSorting:()=>VUe,detectImportSpecifierSorting:()=>Eee,detectSorting:()=>UUe,getImportDeclarationInsertionIndex:()=>jUe,getImportSpecifierInsertionIndex:()=>HUe,getOrganizeImportsComparer:()=>dx,organizeImports:()=>RUe});var $Ue=gt({\"src/services/_namespaces/ts.OrganizeImports.ts\"(){\"use strict\";YUe()}});function QUe(e,t){let r=[];return ZUe(e,t,r),eVe(e,r),r.sort((i,o)=>i.textSpan.start-o.textSpan.start)}function ZUe(e,t,r){let i=40,o=0,s=[...e.statements,e.endOfFileToken],l=s.length;for(;o<l;){for(;o<l&&!yT(s[o]);)f(s[o]),o++;if(o===l)break;let d=o;for(;o<l&&yT(s[o]);)f(s[o]),o++;let g=o-1;g!==d&&r.push(AP(Yo(s[d],100,e).getStart(e),s[g].getEnd(),\"imports\"))}function f(d){var g;if(i===0)return;t.throwIfCancellationRequested(),(Kl(d)||Bc(d)||j_(d)||Ih(d)||d.kind===1)&&c1e(d,e,t,r),Ia(d)&&ar(d.parent)&&br(d.parent.left)&&c1e(d.parent.left,e,t,r),(Va(d)||Tp(d))&&Tee(d.statements.end,e,t,r),(Yr(d)||ku(d))&&Tee(d.members.end,e,t,r);let m=tVe(d,e);m&&r.push(m),i--,Pa(d)?(i++,f(d.expression),i--,d.arguments.forEach(f),(g=d.typeArguments)==null||g.forEach(f)):MT(d)&&d.elseStatement&&MT(d.elseStatement)?(f(d.expression),f(d.thenStatement),i++,f(d.elseStatement),i--):d.forEachChild(f),i++}}function eVe(e,t){let r=[],i=e.getLineStarts();for(let o of i){let s=e.getLineEndOfPosition(o),l=e.text.substring(o,s),f=s1e(l);if(!(!f||Kg(e,o)))if(f[1]){let d=r.pop();d&&(d.textSpan.length=s-d.textSpan.start,d.hintSpan.length=s-d.textSpan.start,t.push(d))}else{let d=Wc(e.text.indexOf(\"//\",o),s);r.push(d1(d,\"region\",d,!1,f[2]||\"#region\"))}}}function s1e(e){return e=ZC(e),na(e,\"//\")?(e=v0(e.slice(2)),l1e.exec(e)):null}function Tee(e,t,r,i){let o=Nm(t.text,e);if(!o)return;let s=-1,l=-1,f=0,d=t.getFullText();for(let{kind:m,pos:v,end:S}of o)switch(r.throwIfCancellationRequested(),m){case 2:let x=d.slice(v,S);if(s1e(x)){g(),f=0;break}f===0&&(s=v),l=S,f++;break;case 3:g(),i.push(AP(v,S,\"comment\")),f=0;break;default:L.assertNever(m)}g();function g(){f>1&&i.push(AP(s,l,\"comment\"))}}function c1e(e,t,r,i){CS(e)||Tee(e.pos,t,r,i)}function AP(e,t,r){return d1(Wc(e,t),r)}function tVe(e,t){switch(e.kind){case 238:if(Ia(e.parent))return nVe(e.parent,e,t);switch(e.parent.kind){case 243:case 246:case 247:case 245:case 242:case 244:case 251:case 295:return m(e.parent);case 255:let x=e.parent;if(x.tryBlock===e)return m(e.parent);if(x.finallyBlock===e){let A=Yo(x,96,t);if(A)return m(A)}default:return d1(Du(e,t),\"code\")}case 265:return m(e.parent);case 260:case 228:case 261:case 263:case 266:case 184:case 203:return m(e);case 186:return m(e,!1,!p2(e.parent),22);case 292:case 293:return v(e.statements);case 207:return g(e);case 206:return g(e,22);case 281:return s(e);case 285:return l(e);case 282:case 283:return f(e.attributes);case 225:case 14:return d(e);case 204:return m(e,!1,!Wo(e.parent),22);case 216:return o(e);case 210:return i(e);case 214:return S(e);case 272:case 276:case 296:return r(e)}function r(x){if(!x.elements.length)return;let A=Yo(x,18,t),w=Yo(x,19,t);if(!(!A||!w||Bf(A.pos,w.pos,t)))return dG(A,w,x,t,!1,!1)}function i(x){if(!x.arguments.length)return;let A=Yo(x,20,t),w=Yo(x,21,t);if(!(!A||!w||Bf(A.pos,w.pos,t)))return dG(A,w,x,t,!1,!0)}function o(x){if(Va(x.body)||ud(x.body)||Bf(x.body.getFullStart(),x.body.getEnd(),t))return;let A=Wc(x.body.getFullStart(),x.body.getEnd());return d1(A,\"code\",Du(x))}function s(x){let A=Wc(x.openingElement.getStart(t),x.closingElement.getEnd()),w=x.openingElement.tagName.getText(t),C=\"<\"+w+\">...</\"+w+\">\";return d1(A,\"code\",A,!1,C)}function l(x){let A=Wc(x.openingFragment.getStart(t),x.closingFragment.getEnd());return d1(A,\"code\",A,!1,\"<>...</>\")}function f(x){if(x.properties.length!==0)return AP(x.getStart(t),x.getEnd(),\"code\")}function d(x){if(!(x.kind===14&&x.text.length===0))return AP(x.getStart(t),x.getEnd(),\"code\")}function g(x,A=18){return m(x,!1,!fu(x.parent)&&!Pa(x.parent),A)}function m(x,A=!1,w=!0,C=18,P=C===18?19:23){let F=Yo(e,C,t),B=Yo(e,P,t);return F&&B&&dG(F,B,x,t,A,w)}function v(x){return x.length?d1(lv(x),\"code\"):void 0}function S(x){if(Bf(x.getStart(),x.getEnd(),t))return;let A=Wc(x.getStart(),x.getEnd());return d1(A,\"code\",Du(x))}}function nVe(e,t,r){let i=rVe(e,t,r),o=Yo(t,19,r);return i&&o&&dG(i,o,e,r,e.kind!==216)}function dG(e,t,r,i,o=!1,s=!0){let l=Wc(s?e.getFullStart():e.getStart(i),t.getEnd());return d1(l,\"code\",Du(r,i),o)}function d1(e,t,r=e,i=!1,o=\"...\"){return{textSpan:e,kind:t,hintSpan:r,bannerText:o,autoCollapse:i}}function rVe(e,t,r){if(ale(e.parameters,r)){let i=Yo(e,20,r);if(i)return i}return Yo(t,18,r)}var l1e,iVe=gt({\"src/services/outliningElementsCollector.ts\"(){\"use strict\";Fr(),l1e=/^#(end)?region(?:\\s+(.*))?(?:\\r)?$/}}),See={};Mo(See,{collectElements:()=>QUe});var aVe=gt({\"src/services/_namespaces/ts.OutliningElementsCollector.ts\"(){\"use strict\";iVe()}});function Vh(e,t){fG.set(e,t)}function oVe(e){return lo(OU(fG.values(),t=>{var r;return e.cancellationToken&&e.cancellationToken.isCancellationRequested()||!((r=t.kinds)!=null&&r.some(i=>pv(i,e.kind)))?void 0:t.getAvailableActions(e)}))}function sVe(e,t,r){let i=fG.get(t);return i&&i.getEditsForAction(e,r)}var fG,cVe=gt({\"src/services/refactorProvider.ts\"(){\"use strict\";Fr(),Qm(),fG=new Map}});function u1e(e,t=!0){let{file:r,program:i}=e,o=QS(e),s=Vi(r,o.start),l=s.parent&&Yy(s.parent)&1&&t?s.parent:HN(s,r,o);if(!l||!Li(l.parent)&&!(Tp(l.parent)&&lu(l.parent.parent)))return{error:uo(_.Could_not_find_export_statement)};let f=i.getTypeChecker(),d=pVe(l.parent,f),g=Yy(l)||(pc(l)&&!l.isExportEquals?1025:0),m=!!(g&1024);if(!(g&1)||!m&&d.exports.has(\"default\"))return{error:uo(_.This_file_already_has_a_default_export)};let v=S=>Re(S)&&f.getSymbolAtLocation(S)?void 0:{error:uo(_.Can_only_convert_named_export)};switch(l.kind){case 259:case 260:case 261:case 263:case 262:case 264:{let S=l;return S.name?v(S.name)||{exportNode:S,exportName:S.name,wasDefault:m,exportingModuleSymbol:d}:void 0}case 240:{let S=l;if(!(S.declarationList.flags&2)||S.declarationList.declarations.length!==1)return;let x=Vo(S.declarationList.declarations);return x.initializer?(L.assert(!m,\"Can't have a default flag here\"),v(x.name)||{exportNode:S,exportName:x.name,wasDefault:m,exportingModuleSymbol:d}):void 0}case 274:{let S=l;return S.isExportEquals?void 0:v(S.expression)||{exportNode:S,exportName:S.expression,wasDefault:m,exportingModuleSymbol:d}}default:return}}function lVe(e,t,r,i,o){uVe(e,r,i,t.getTypeChecker()),dVe(t,r,i,o)}function uVe(e,{wasDefault:t,exportNode:r,exportName:i},o,s){if(t)if(pc(r)&&!r.isExportEquals){let l=r.expression,f=d1e(l.text,l.text);o.replaceNode(e,r,D.createExportDeclaration(void 0,!1,D.createNamedExports([f])))}else o.delete(e,L.checkDefined(z2(r,88),\"Should find a default keyword in modifier list\"));else{let l=L.checkDefined(z2(r,93),\"Should find an export keyword in modifier list\");switch(r.kind){case 259:case 260:case 261:o.insertNodeAfter(e,l,D.createToken(88));break;case 240:let f=Vo(r.declarationList.declarations);if(!js.Core.isSymbolReferencedInFile(i,s,e)&&!f.type){o.replaceNode(e,r,D.createExportDefault(L.checkDefined(f.initializer,\"Initializer was previously known to be present\")));break}case 263:case 262:case 264:o.deleteModifier(e,l),o.insertNodeAfter(e,r,D.createExportDefault(D.createIdentifier(i.text)));break;default:L.fail(`Unexpected exportNode kind ${r.kind}`)}}}function dVe(e,{wasDefault:t,exportName:r,exportingModuleSymbol:i},o,s){let l=e.getTypeChecker(),f=L.checkDefined(l.getSymbolAtLocation(r),\"Export name should resolve to a symbol\");js.Core.eachExportReference(e.getSourceFiles(),l,s,f,i,r.text,t,d=>{if(r===d)return;let g=d.getSourceFile();t?fVe(g,d,o,r.text):_Ve(g,d,o)})}function fVe(e,t,r,i){let{parent:o}=t;switch(o.kind){case 208:r.replaceNode(e,t,D.createIdentifier(i));break;case 273:case 278:{let l=o;r.replaceNode(e,l,xee(i,l.name.text));break}case 270:{let l=o;L.assert(l.name===t,\"Import clause name should match provided ref\");let f=xee(i,t.text),{namedBindings:d}=l;if(!d)r.replaceNode(e,t,D.createNamedImports([f]));else if(d.kind===271){r.deleteRange(e,{pos:t.getStart(e),end:d.getStart(e)});let g=yo(l.parent.moduleSpecifier)?sY(l.parent.moduleSpecifier,e):1,m=Xg(void 0,[xee(i,t.text)],l.parent.moduleSpecifier,g);r.insertNodeAfter(e,l.parent,m)}else r.delete(e,t),r.insertNodeAtEndOfList(e,d.elements,f);break}case 202:let s=o;r.replaceNode(e,o,D.createImportTypeNode(s.argument,s.assertions,D.createIdentifier(i),s.typeArguments,s.isTypeOf));break;default:L.failBadSyntaxKind(o)}}function _Ve(e,t,r){let i=t.parent;switch(i.kind){case 208:r.replaceNode(e,t,D.createIdentifier(\"default\"));break;case 273:{let o=D.createIdentifier(i.name.text);i.parent.elements.length===1?r.replaceNode(e,i.parent,o):(r.delete(e,i),r.insertNodeBefore(e,i.parent,o));break}case 278:{r.replaceNode(e,i,d1e(\"default\",i.name.text));break}default:L.assertNever(i,`Unexpected parent kind ${i.kind}`)}}function xee(e,t){return D.createImportSpecifier(!1,e===t?void 0:D.createIdentifier(e),D.createIdentifier(t))}function d1e(e,t){return D.createExportSpecifier(!1,e===t?void 0:D.createIdentifier(e),D.createIdentifier(t))}function pVe(e,t){if(Li(e))return e.symbol;let r=e.parent.symbol;return r.valueDeclaration&&D0(r.valueDeclaration)?t.getMergedSymbol(r):r}var _G,CP,IP,mVe=gt({\"src/services/refactors/convertExport.ts\"(){\"use strict\";Fr(),Qm(),_G=\"Convert export\",CP={name:\"Convert default export to named export\",description:_.Convert_default_export_to_named_export.message,kind:\"refactor.rewrite.export.named\"},IP={name:\"Convert named export to default export\",description:_.Convert_named_export_to_default_export.message,kind:\"refactor.rewrite.export.default\"},Vh(_G,{kinds:[CP.kind,IP.kind],getAvailableActions:function(t){let r=u1e(t,t.triggerReason===\"invoked\");if(!r)return Je;if(!$m(r)){let i=r.wasDefault?CP:IP;return[{name:_G,description:i.description,actions:[i]}]}return t.preferences.provideRefactorNotApplicableReason?[{name:_G,description:_.Convert_default_export_to_named_export.message,actions:[{...CP,notApplicableReason:r.error},{...IP,notApplicableReason:r.error}]}]:Je},getEditsForAction:function(t,r){L.assert(r===CP.name||r===IP.name,\"Unexpected action name\");let i=u1e(t);return L.assert(i&&!$m(i),\"Expected applicable refactor info\"),{edits:nr.ChangeTracker.with(t,s=>lVe(t.file,t.program,i,s,t.cancellationToken)),renameFilename:void 0,renameLocation:void 0}}})}});function f1e(e,t=!0){let{file:r}=e,i=QS(e),o=Vi(r,i.start),s=t?jn(o,gl):HN(o,r,i);if(!s||!gl(s))return{error:\"Selection is not an import declaration.\"};let l=i.start+i.length,f=t1(s,s.parent,r);if(f&&l>f.getStart())return;let{importClause:d}=s;return d?d.namedBindings?d.namedBindings.kind===271?{convertTo:0,import:d.namedBindings}:_1e(e.program,d)?{convertTo:1,import:d.namedBindings}:{convertTo:2,import:d.namedBindings}:{error:uo(_.Could_not_find_namespace_import_or_named_imports)}:{error:uo(_.Could_not_find_import_clause)}}function _1e(e,t){return wT(e.getCompilerOptions())&&vVe(t.parent.moduleSpecifier,e.getTypeChecker())}function hVe(e,t,r,i){let o=t.getTypeChecker();i.convertTo===0?gVe(e,o,r,i.import,wT(t.getCompilerOptions())):m1e(e,t,r,i.import,i.convertTo===1)}function gVe(e,t,r,i,o){let s=!1,l=[],f=new Map;js.Core.eachSymbolReferenceInFile(i.name,t,e,v=>{if(!fse(v.parent))s=!0;else{let S=p1e(v.parent).text;t.resolveName(S,v,67108863,!0)&&f.set(S,!0),L.assert(yVe(v.parent)===v,\"Parent expression should match id\"),l.push(v.parent)}});let d=new Map;for(let v of l){let S=p1e(v).text,x=d.get(S);x===void 0&&d.set(S,x=f.has(S)?i1(S,e):S),r.replaceNode(e,v,D.createIdentifier(x))}let g=[];d.forEach((v,S)=>{g.push(D.createImportSpecifier(!1,v===S?void 0:D.createIdentifier(S),D.createIdentifier(v)))});let m=i.parent.parent;s&&!o?r.insertNodeAfter(e,m,Aee(m,void 0,g)):r.replaceNode(e,m,Aee(m,s?D.createIdentifier(i.name.text):void 0,g))}function p1e(e){return br(e)?e.name:e.right}function yVe(e){return br(e)?e.expression:e.left}function m1e(e,t,r,i,o=_1e(t,i.parent)){let s=t.getTypeChecker(),l=i.parent.parent,{moduleSpecifier:f}=l,d=new Set;i.elements.forEach(A=>{let w=s.getSymbolAtLocation(A.name);w&&d.add(w)});let g=f&&yo(f)?gu.moduleSpecifierToValidIdentifier(f.text,99):\"module\";function m(A){return!!js.Core.eachSymbolReferenceInFile(A.name,s,e,w=>{let C=s.resolveName(g,w,67108863,!0);return C?d.has(C)?Mu(w.parent):!0:!1})}let S=i.elements.some(m)?i1(g,e):g,x=new Set;for(let A of i.elements){let w=(A.propertyName||A.name).text;js.Core.eachSymbolReferenceInFile(A.name,s,e,C=>{let P=D.createPropertyAccessExpression(D.createIdentifier(S),w);xf(C.parent)?r.replaceNode(e,C.parent,D.createPropertyAssignment(C.text,P)):Mu(C.parent)?x.add(A):r.replaceNode(e,C,P)})}if(r.replaceNode(e,i,o?D.createIdentifier(S):D.createNamespaceImport(D.createIdentifier(S))),x.size){let A=lo(x.values(),w=>D.createImportSpecifier(w.isTypeOnly,w.propertyName&&D.createIdentifier(w.propertyName.text),D.createIdentifier(w.name.text)));r.insertNodeAfter(e,i.parent.parent,Aee(l,void 0,A))}}function vVe(e,t){let r=t.resolveExternalModuleName(e);if(!r)return!1;let i=t.resolveExternalModuleSymbol(r);return r!==i}function Aee(e,t,r){return D.createImportDeclaration(void 0,D.createImportClause(!1,t,r&&r.length?D.createNamedImports(r):void 0),e.moduleSpecifier,void 0)}var pG,LP,bVe=gt({\"src/services/refactors/convertImport.ts\"(){\"use strict\";Fr(),Qm(),pG=\"Convert import\",LP={0:{name:\"Convert namespace import to named imports\",description:_.Convert_namespace_import_to_named_imports.message,kind:\"refactor.rewrite.import.named\"},2:{name:\"Convert named imports to namespace import\",description:_.Convert_named_imports_to_namespace_import.message,kind:\"refactor.rewrite.import.namespace\"},1:{name:\"Convert named imports to default import\",description:_.Convert_named_imports_to_default_import.message,kind:\"refactor.rewrite.import.default\"}},Vh(pG,{kinds:H1(LP).map(e=>e.kind),getAvailableActions:function(t){let r=f1e(t,t.triggerReason===\"invoked\");if(!r)return Je;if(!$m(r)){let i=LP[r.convertTo];return[{name:pG,description:i.description,actions:[i]}]}return t.preferences.provideRefactorNotApplicableReason?H1(LP).map(i=>({name:pG,description:i.description,actions:[{...i,notApplicableReason:r.error}]})):Je},getEditsForAction:function(t,r){L.assert(vt(H1(LP),s=>s.name===r),\"Unexpected action name\");let i=f1e(t);return L.assert(i&&!$m(i),\"Expected applicable refactor info\"),{edits:nr.ChangeTracker.with(t,s=>hVe(t.file,t.program,s,i)),renameFilename:void 0,renameLocation:void 0}}})}});function h1e(e,t=!0){let{file:r,startPosition:i}=e,o=Cu(r),s=Vi(r,i),l=y7(QS(e)),f=l.pos===l.end&&t,d=jn(s,x=>x.parent&&bi(x)&&!Ab(l,x.parent,r)&&(f||HX(s,r,l.pos,l.end)));if(!d||!bi(d))return{error:uo(_.Selection_is_not_a_valid_type_node)};let g=e.program.getTypeChecker(),m=AVe(d,o);if(m===void 0)return{error:uo(_.No_type_could_be_extracted_from_this_type_node)};let v=EVe(g,d,m,r);if(!v)return{error:uo(_.No_type_could_be_extracted_from_this_type_node)};let S=Cee(g,d);return{isJS:o,selection:d,enclosingNode:m,typeParameters:v,typeElements:S}}function Cee(e,t){if(t)if(dO(t)){let r=[],i=new Map;for(let o of t.types){let s=Cee(e,o);if(!s||!s.every(l=>l.name&&V_(i,VN(l.name))))return;si(r,s)}return r}else{if(wS(t))return Cee(e,t.type);if(Rd(t))return t.members}}function Ab(e,t,r){return ON(e,xo(r.text,t.pos),t.end)}function EVe(e,t,r,i){let o=[];return s(t)?void 0:o;function s(l){if(m_(l)){if(Re(l.typeName)){let f=l.typeName,d=e.resolveName(f.text,f,262144,!0);for(let g of d?.declarations||Je)if(_c(g)&&g.getSourceFile()===i){if(g.name.escapedText===f.escapedText&&Ab(g,t,i))return!0;if(Ab(r,g,i)&&!Ab(t,g,i)){Of(o,g);break}}}}else if(h2(l)){let f=jn(l,d=>m2(d)&&Ab(d.extendsType,l,i));if(!f||!Ab(t,f,i))return!0}else if(l3(l)||u3(l)){let f=jn(l.parent,Ia);if(f&&f.type&&Ab(f.type,l,i)&&!Ab(t,f,i))return!0}else if(vL(l)){if(Re(l.exprName)){let f=e.resolveName(l.exprName.text,l.exprName,111551,!1);if(f?.valueDeclaration&&Ab(r,f.valueDeclaration,i)&&!Ab(t,f.valueDeclaration,i))return!0}else if(LT(l.exprName.left)&&!Ab(t,l.parent,i))return!0}return i&&p2(l)&&Gs(i,l.pos).line===Gs(i,l.end).line&&Jn(l,1),pa(l,s)}}function TVe(e,t,r,i){let{enclosingNode:o,selection:s,typeParameters:l}=i,f=D.createTypeAliasDeclaration(void 0,r,l.map(d=>D.updateTypeParameterDeclaration(d,d.modifiers,d.name,d.constraint,void 0)),s);e.insertNodeBefore(t,o,Tz(f),!0),e.replaceNode(t,s,D.createTypeReferenceNode(r,l.map(d=>D.createTypeReferenceNode(d.name,void 0))),{leadingTriviaOption:nr.LeadingTriviaOption.Exclude,trailingTriviaOption:nr.TrailingTriviaOption.ExcludeWhitespace})}function SVe(e,t,r,i){var o;let{enclosingNode:s,selection:l,typeParameters:f,typeElements:d}=i,g=D.createInterfaceDeclaration(void 0,r,f,void 0,d);it(g,(o=d[0])==null?void 0:o.parent),e.insertNodeBefore(t,s,Tz(g),!0),e.replaceNode(t,l,D.createTypeReferenceNode(r,f.map(m=>D.createTypeReferenceNode(m.name,void 0))),{leadingTriviaOption:nr.LeadingTriviaOption.Exclude,trailingTriviaOption:nr.TrailingTriviaOption.ExcludeWhitespace})}function xVe(e,t,r,i,o){var s;let{enclosingNode:l,selection:f,typeParameters:d}=o;Jn(f,7168);let g=D.createJSDocTypedefTag(D.createIdentifier(\"typedef\"),D.createJSDocTypeExpression(f),D.createIdentifier(i)),m=[];mn(d,S=>{let x=EA(S),A=D.createTypeParameterDeclaration(void 0,S.name),w=D.createJSDocTemplateTag(D.createIdentifier(\"template\"),x&&Ga(x,UT),[A]);m.push(w)});let v=D.createJSDocComment(void 0,D.createNodeArray(Qi(m,[g])));if(dm(l)){let S=l.getStart(r),x=bb(t.host,(s=t.formatContext)==null?void 0:s.options);e.insertNodeAt(r,l.getStart(r),v,{suffix:x+x+r.text.slice(hY(r.text,S-1),S)})}else e.insertNodeBefore(r,l,v,!0);e.replaceNode(r,f,D.createTypeReferenceNode(i,d.map(S=>D.createTypeReferenceNode(S.name,void 0))))}function AVe(e,t){return jn(e,ca)||(t?jn(e,dm):void 0)}var mG,kP,DP,wP,CVe=gt({\"src/services/refactors/extractType.ts\"(){\"use strict\";Fr(),Qm(),mG=\"Extract type\",kP={name:\"Extract to type alias\",description:uo(_.Extract_to_type_alias),kind:\"refactor.extract.type\"},DP={name:\"Extract to interface\",description:uo(_.Extract_to_interface),kind:\"refactor.extract.interface\"},wP={name:\"Extract to typedef\",description:uo(_.Extract_to_typedef),kind:\"refactor.extract.typedef\"},Vh(mG,{kinds:[kP.kind,DP.kind,wP.kind],getAvailableActions:function(t){let r=h1e(t,t.triggerReason===\"invoked\");return r?$m(r)?t.preferences.provideRefactorNotApplicableReason?[{name:mG,description:uo(_.Extract_type),actions:[{...wP,notApplicableReason:r.error},{...kP,notApplicableReason:r.error},{...DP,notApplicableReason:r.error}]}]:Je:[{name:mG,description:uo(_.Extract_type),actions:r.isJS?[wP]:Sn([kP],r.typeElements&&DP)}]:Je},getEditsForAction:function(t,r){let{file:i}=t,o=h1e(t);L.assert(o&&!$m(o),\"Expected to find a range to extract\");let s=i1(\"NewType\",i),l=nr.ChangeTracker.with(t,g=>{switch(r){case kP.name:return L.assert(!o.isJS,\"Invalid actionName/JS combo\"),TVe(g,i,s,o);case wP.name:return L.assert(o.isJS,\"Invalid actionName/JS combo\"),xVe(g,t,i,s,o);case DP.name:return L.assert(!o.isJS&&!!o.typeElements,\"Invalid actionName/JS combo\"),SVe(g,i,s,o);default:L.fail(\"Unexpected action name\")}}),f=i.fileName,d=KN(l,f,s,!1);return{edits:l,renameFilename:f,renameLocation:d}}})}});function $m(e){return e.error!==void 0}function pv(e,t){return t?e.substr(0,t.length)===t:!0}var IVe=gt({\"src/services/refactors/helpers.ts\"(){\"use strict\"}});function LVe(e){let{file:t}=e,r=y7(QS(e)),{statements:i}=t,o=Yc(i,f=>f.end>r.pos);if(o===-1)return;let s=i[o];if(zl(s)&&s.name&&Od(s.name,r))return{toMove:[i[o]],afterLast:i[o+1]};if(r.pos>s.getStart(t))return;let l=Yc(i,f=>f.end>r.end,o);if(!(l!==-1&&(l===0||i[l].getStart(t)<r.end)))return{toMove:i.slice(o,l===-1?i.length:l),afterLast:l===-1?void 0:i[l]}}function kVe(e,t,r,i,o,s){let l=t.getTypeChecker(),f=JVe(e,r.all,l),d=ni(e.fileName),g=jR(e.fileName),m=vi(d,WVe(zVe(f.oldFileImportsFromNewFile,f.movedSymbols),g,d,o))+g;i.createNewFile(e,m,OVe(e,f,i,r,t,o,m,s)),RVe(t,i,e.fileName,m,lb(o))}function g1e(e){let t=LVe(e);if(t===void 0)return;let r=[],i=[],{toMove:o,afterLast:s}=t;return PU(o,DVe,(l,f)=>{for(let d=l;d<f;d++)r.push(o[d]);i.push({first:o[l],afterLast:s})}),r.length===0?void 0:{all:r,ranges:i}}function DVe(e){return!wVe(e)&&!B_(e)}function wVe(e){switch(e.kind){case 269:return!0;case 268:return!Mr(e,1);case 240:return e.declarationList.declarations.every(t=>!!t.initializer&&qu(t.initializer,!0));default:return!1}}function RVe(e,t,r,i,o){let s=e.getCompilerOptions().configFile;if(!s)return;let l=So(vi(r,\"..\",i)),f=_w(s.fileName,l,o),d=s.statements[0]&&zr(s.statements[0].expression,rs),g=d&&wr(d.properties,m=>yl(m)&&yo(m.name)&&m.name.text===\"files\");g&&fu(g.initializer)&&t.insertNodeInListAfter(s,To(g.initializer.elements),D.createStringLiteral(f),g.initializer.elements)}function OVe(e,t,r,i,o,s,l,f){let d=o.getTypeChecker(),g=v8(e.statements,B_);if(e.externalModuleIndicator===void 0&&e.commonJsModuleIndicator===void 0&&t.oldImportsNeededByNewFile.size()===0)return y1e(e,i.ranges,r),[...g,...i.all];let m=!!e.externalModuleIndicator,v=J_(e,f),S=BVe(e,t.oldFileImportsFromNewFile,l,o,s,m,v);S&&L7(r,e,S,!0,f),NVe(e,i.all,r,t.unusedImportsFromOldFile,d),y1e(e,i.ranges,r),PVe(r,o,s,e,t.movedSymbols,l);let x=HVe(e,t.oldImportsNeededByNewFile,t.newFileImportsFromOldFile,r,d,o,s,m,v),A=UVe(e,i.all,t.oldFileImportsFromNewFile,m);return x.length&&A.length?[...g,...x,4,...A]:[...g,...x,...A]}function y1e(e,t,r){for(let{first:i,afterLast:o}of t)r.deleteNodeRangeExcludingEnd(e,i,o)}function NVe(e,t,r,i,o){for(let s of e.statements)ya(t,s)||Iee(s,l=>T1e(e,l,r,f=>i.has(o.getSymbolAtLocation(f))))}function PVe(e,t,r,i,o,s){let l=t.getTypeChecker();for(let f of t.getSourceFiles())if(f!==i)for(let d of f.statements)Iee(d,g=>{if(l.getSymbolAtLocation(v1e(g))!==i.symbol)return;let m=w=>{let C=Wo(w.parent)?I7(l,w.parent):wd(l.getSymbolAtLocation(w),l);return!!C&&o.has(C)};T1e(f,g,e,m);let v=Fy(ni(i.path),s),S=sF(t.getCompilerOptions(),f,f.path,v,$S(t,r)),x=A1e(g,D.createStringLiteral(S),m);x&&e.insertNodeAfter(f,d,x);let A=MVe(g);A&&FVe(e,f,l,o,S,A,g)})}function MVe(e){switch(e.kind){case 269:return e.importClause&&e.importClause.namedBindings&&e.importClause.namedBindings.kind===271?e.importClause.namedBindings.name:void 0;case 268:return e.name;case 257:return zr(e.name,Re);default:return L.assertNever(e,`Unexpected node kind ${e.kind}`)}}function FVe(e,t,r,i,o,s,l){let f=gu.moduleSpecifierToValidIdentifier(o,99),d=!1,g=[];if(js.Core.eachSymbolReferenceInFile(s,r,t,m=>{br(m.parent)&&(d=d||!!r.resolveName(f,m,67108863,!0),i.has(r.getSymbolAtLocation(m.parent.name))&&g.push(m))}),g.length){let m=d?i1(f,t):f;for(let v of g)e.replaceNode(t,v,D.createIdentifier(m));e.insertNodeAfter(t,l,GVe(l,f,o))}}function GVe(e,t,r){let i=D.createIdentifier(t),o=D.createStringLiteral(r);switch(e.kind){case 269:return D.createImportDeclaration(void 0,D.createImportClause(!1,void 0,D.createNamespaceImport(i)),o,void 0);case 268:return D.createImportEqualsDeclaration(void 0,!1,i,D.createExternalModuleReference(o));case 257:return D.createVariableDeclaration(i,void 0,void 0,Lee(o));default:return L.assertNever(e,`Unexpected node kind ${e.kind}`)}}function v1e(e){return e.kind===269?e.moduleSpecifier:e.kind===268?e.moduleReference.expression:e.initializer.arguments[0]}function Iee(e,t){if(gl(e))yo(e.moduleSpecifier)&&t(e);else if(Nl(e))um(e.moduleReference)&&es(e.moduleReference.expression)&&t(e);else if(Bc(e))for(let r of e.declarationList.declarations)r.initializer&&qu(r.initializer,!0)&&t(r)}function BVe(e,t,r,i,o,s,l){let f,d=[];return t.forEach(g=>{g.escapedName===\"default\"?f=D.createIdentifier(x7(g)):d.push(g.name)}),b1e(e,f,d,r,i,o,s,l)}function b1e(e,t,r,i,o,s,l,f){let d=Fy(ni(e.path),i),g=sF(o.getCompilerOptions(),e,e.path,d,$S(o,s));if(l){let m=r.map(v=>D.createImportSpecifier(!1,void 0,D.createIdentifier(v)));return jhe(t,m,g,f)}else{L.assert(!t,\"No default import should exist\");let m=r.map(v=>D.createBindingElement(void 0,void 0,v));return m.length?E1e(D.createObjectBindingPattern(m),void 0,Lee(D.createStringLiteral(g))):void 0}}function E1e(e,t,r,i=2){return D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(e,void 0,t,r)],i))}function Lee(e){return D.createCallExpression(D.createIdentifier(\"require\"),void 0,[e])}function UVe(e,t,r,i){return Uo(t,o=>{if(YVe(o)&&!R1e(e,o,i)&&k1e(o,s=>{var l;return r.has(L.checkDefined((l=zr(s,$p))==null?void 0:l.symbol))})){let s=ZVe(o,i);if(s)return s}return o})}function T1e(e,t,r,i){switch(t.kind){case 269:VVe(e,t,r,i);break;case 268:i(t.name)&&r.delete(e,t);break;case 257:jVe(e,t,r,i);break;default:L.assertNever(t,`Unexpected import decl kind ${t.kind}`)}}function VVe(e,t,r,i){if(!t.importClause)return;let{name:o,namedBindings:s}=t.importClause,l=!o||i(o),f=!s||(s.kind===271?i(s.name):s.elements.length!==0&&s.elements.every(d=>i(d.name)));if(l&&f)r.delete(e,t);else if(o&&l&&r.delete(e,o),s){if(f)r.replaceNode(e,t.importClause,D.updateImportClause(t.importClause,t.importClause.isTypeOnly,o,void 0));else if(s.kind===272)for(let d of s.elements)i(d.name)&&r.delete(e,d)}}function jVe(e,t,r,i){let{name:o}=t;switch(o.kind){case 79:i(o)&&(t.initializer&&qu(t.initializer,!0)?r.delete(e,pu(t.parent)&&Fn(t.parent.declarations)===1?t.parent.parent:t):r.delete(e,o));break;case 204:break;case 203:if(o.elements.every(s=>Re(s.name)&&i(s.name)))r.delete(e,pu(t.parent)&&t.parent.declarations.length===1?t.parent.parent:t);else for(let s of o.elements)Re(s.name)&&i(s.name)&&r.delete(e,s.name);break}}function HVe(e,t,r,i,o,s,l,f,d){let g=[];for(let x of e.statements)Iee(x,A=>{Sn(g,A1e(A,v1e(A),w=>t.has(o.getSymbolAtLocation(w))))});let m,v=[],S=W2();return r.forEach(x=>{if(x.declarations)for(let A of x.declarations){if(!I1e(A))continue;let w=$Ve(A);if(!w)continue;let C=w1e(A);S(C)&&QVe(e,C,w,i,f),Mr(A,1024)?m=w:v.push(w.text)}}),Sn(g,b1e(e,m,v,Hl(e.fileName),s,l,f,d)),g}function WVe(e,t,r,i){let o=e;for(let s=1;;s++){let l=vi(r,o+t);if(!i.fileExists(l))return o;o=`${e}.${s}`}}function zVe(e,t){return e.forEachEntry(x7)||t.forEachEntry(x7)||\"newFile\"}function JVe(e,t,r){let i=new Ik,o=new Ik,s=new Ik,l=wr(t,v=>!!(v.transformFlags&2)),f=m(l);f&&o.add(f);for(let v of t)k1e(v,S=>{i.add(L.checkDefined(Ol(S)?r.getSymbolAtLocation(S.expression.left):S.symbol,\"Need a symbol here\"))});for(let v of t)C1e(v,r,S=>{if(S.declarations)for(let x of S.declarations)S1e(x)?o.add(S):I1e(x)&&XVe(x)===e&&!i.has(S)&&s.add(S)});let d=o.clone(),g=new Ik;for(let v of e.statements)ya(t,v)||(f&&v.transformFlags&2&&d.delete(f),C1e(v,r,S=>{i.has(S)&&g.add(S),d.delete(S)}));return{movedSymbols:i,newFileImportsFromOldFile:s,oldFileImportsFromNewFile:g,oldImportsNeededByNewFile:o,unusedImportsFromOldFile:d};function m(v){if(v===void 0)return;let S=r.getJsxNamespace(v),x=r.resolveName(S,v,1920,!0);return x&&vt(x.declarations,S1e)?x:void 0}}function S1e(e){switch(e.kind){case 268:case 273:case 270:case 271:return!0;case 257:return x1e(e);case 205:return wi(e.parent.parent)&&x1e(e.parent.parent);default:return!1}}function x1e(e){return Li(e.parent.parent.parent)&&!!e.initializer&&qu(e.initializer,!0)}function A1e(e,t,r){switch(e.kind){case 269:{let i=e.importClause;if(!i)return;let o=i.name&&r(i.name)?i.name:void 0,s=i.namedBindings&&KVe(i.namedBindings,r);return o||s?D.createImportDeclaration(void 0,D.createImportClause(i.isTypeOnly,o,s),t,void 0):void 0}case 268:return r(e.name)?e:void 0;case 257:{let i=qVe(e.name,r);return i?E1e(i,e.type,Lee(t),e.parent.flags):void 0}default:return L.assertNever(e,`Unexpected import kind ${e.kind}`)}}function KVe(e,t){if(e.kind===271)return t(e.name)?e:void 0;{let r=e.elements.filter(i=>t(i.name));return r.length?D.createNamedImports(r):void 0}}function qVe(e,t){switch(e.kind){case 79:return t(e)?e:void 0;case 204:return e;case 203:{let r=e.elements.filter(i=>i.propertyName||!Re(i.name)||t(i.name));return r.length?D.createObjectBindingPattern(r):void 0}}}function C1e(e,t,r){e.forEachChild(function i(o){if(Re(o)&&!Rh(o)){let s=t.getSymbolAtLocation(o);s&&r(s)}else o.forEachChild(i)})}function I1e(e){return L1e(e)&&Li(e.parent)||wi(e)&&Li(e.parent.parent.parent)}function XVe(e){return wi(e)?e.parent.parent.parent:e.parent}function YVe(e){return L.assert(Li(e.parent),\"Node parent should be a SourceFile\"),L1e(e)||Bc(e)}function L1e(e){switch(e.kind){case 259:case 260:case 264:case 263:case 262:case 261:case 268:return!0;default:return!1}}function k1e(e,t){switch(e.kind){case 259:case 260:case 264:case 263:case 262:case 261:case 268:return t(e);case 240:return ks(e.declarationList.declarations,r=>D1e(r.name,t));case 241:{let{expression:r}=e;return ar(r)&&ic(r)===1?t(e):void 0}}}function D1e(e,t){switch(e.kind){case 79:return t(Ga(e.parent,r=>wi(r)||Wo(r)));case 204:case 203:return ks(e.elements,r=>ol(r)?void 0:D1e(r.name,t));default:return L.assertNever(e,`Unexpected name kind ${e.kind}`)}}function $Ve(e){return Ol(e)?zr(e.expression.left.name,Re):zr(e.name,Re)}function w1e(e){switch(e.kind){case 257:return e.parent.parent;case 205:return w1e(Ga(e.parent.parent,t=>wi(t)||Wo(t)));default:return e}}function QVe(e,t,r,i,o){if(!R1e(e,t,o,r))if(o)Ol(t)||i.insertExportModifier(e,t);else{let s=kee(t);s.length!==0&&i.insertNodesAfter(e,t,s.map(O1e))}}function R1e(e,t,r,i){var o;return r?!Ol(t)&&Mr(t,1)||!!(i&&((o=e.symbol.exports)!=null&&o.has(i.escapedText))):!!e.symbol&&!!e.symbol.exports&&kee(t).some(s=>e.symbol.exports.has(Bs(s)))}function ZVe(e,t){return t?[eje(e)]:tje(e)}function eje(e){let t=g_(e)?Qi([D.createModifier(93)],uT(e)):void 0;switch(e.kind){case 259:return D.updateFunctionDeclaration(e,t,e.asteriskToken,e.name,e.typeParameters,e.parameters,e.type,e.body);case 260:let r=HS(e)?Uy(e):void 0;return D.updateClassDeclaration(e,Qi(r,t),e.name,e.typeParameters,e.heritageClauses,e.members);case 240:return D.updateVariableStatement(e,t,e.declarationList);case 264:return D.updateModuleDeclaration(e,t,e.name,e.body);case 263:return D.updateEnumDeclaration(e,t,e.name,e.members);case 262:return D.updateTypeAliasDeclaration(e,t,e.name,e.typeParameters,e.type);case 261:return D.updateInterfaceDeclaration(e,t,e.name,e.typeParameters,e.heritageClauses,e.members);case 268:return D.updateImportEqualsDeclaration(e,t,e.isTypeOnly,e.name,e.moduleReference);case 241:return L.fail();default:return L.assertNever(e,`Unexpected declaration kind ${e.kind}`)}}function tje(e){return[e,...kee(e).map(O1e)]}function kee(e){switch(e.kind){case 259:case 260:return[e.name.text];case 240:return Zi(e.declarationList.declarations,t=>Re(t.name)?t.name.text:void 0);case 264:case 263:case 262:case 261:case 268:return Je;case 241:return L.fail(\"Can't export an ExpressionStatement\");default:return L.assertNever(e,`Unexpected decl kind ${e.kind}`)}}function O1e(e){return D.createExpressionStatement(D.createBinaryExpression(D.createPropertyAccessExpression(D.createIdentifier(\"exports\"),D.createIdentifier(e)),63,D.createIdentifier(e)))}var Ck,hG,gG,Ik,nje=gt({\"src/services/refactors/moveToNewFile.ts\"(){\"use strict\";L_e(),Fr(),Qm(),Ck=\"Move to a new file\",hG=uo(_.Move_to_a_new_file),gG={name:Ck,description:hG,kind:\"refactor.move.newFile\"},Vh(Ck,{kinds:[gG.kind],getAvailableActions:function(t){let r=g1e(t);return t.preferences.allowTextChangesInNewFiles&&r?[{name:Ck,description:hG,actions:[gG]}]:t.preferences.provideRefactorNotApplicableReason?[{name:Ck,description:hG,actions:[{...gG,notApplicableReason:uo(_.Selection_is_not_a_valid_statement_or_statements)}]}]:Je},getEditsForAction:function(t,r){L.assert(r===Ck,\"Wrong refactor invoked\");let i=L.checkDefined(g1e(t));return{edits:nr.ChangeTracker.with(t,s=>kVe(t.file,t.program,i,s,t.host,t.preferences)),renameFilename:void 0,renameLocation:void 0}}}),Ik=class{constructor(){this.map=new Map}add(e){this.map.set(String($a(e)),e)}has(e){return this.map.has(String($a(e)))}delete(e){this.map.delete(String($a(e)))}forEach(e){this.map.forEach(e)}forEachEntry(e){return Ld(this.map,e)}clone(){let e=new Ik;return Mw(this.map,e.map),e}size(){return this.map.size}}}});function rje(e){let{file:t,startPosition:r,program:i}=e;return P1e(t,r,i)?[{name:yG,description:Dee,actions:[wee]}]:Je}function ije(e){let{file:t,startPosition:r,program:i}=e,o=P1e(t,r,i);if(!o)return;let s=i.getTypeChecker(),l=o[o.length-1],f=l;switch(l.kind){case 170:{f=D.updateMethodSignature(l,l.modifiers,l.name,l.questionToken,l.typeParameters,g(o),l.type);break}case 171:{f=D.updateMethodDeclaration(l,l.modifiers,l.asteriskToken,l.name,l.questionToken,l.typeParameters,g(o),l.type,l.body);break}case 176:{f=D.updateCallSignature(l,l.typeParameters,g(o),l.type);break}case 173:{f=D.updateConstructorDeclaration(l,l.modifiers,g(o),l.body);break}case 177:{f=D.updateConstructSignature(l,l.typeParameters,g(o),l.type);break}case 259:{f=D.updateFunctionDeclaration(l,l.modifiers,l.asteriskToken,l.name,l.typeParameters,g(o),l.type,l.body);break}default:return L.failBadSyntaxKind(l,\"Unhandled signature kind in overload list conversion refactoring\")}if(f===l)return;return{renameFilename:void 0,renameLocation:void 0,edits:nr.ChangeTracker.with(e,S=>{S.replaceNodeRange(t,o[0],o[o.length-1],f)})};function g(S){let x=S[S.length-1];return Ds(x)&&x.body&&(S=S.slice(0,S.length-1)),D.createNodeArray([D.createParameterDeclaration(void 0,D.createToken(25),\"args\",void 0,D.createUnionTypeNode(on(S,m)))])}function m(S){let x=on(S.parameters,v);return Jn(D.createTupleTypeNode(x),vt(x,A=>!!Fn(l2(A)))?0:1)}function v(S){L.assert(Re(S.name));let x=it(D.createNamedTupleMember(S.dotDotDotToken,S.name,S.questionToken,S.type||D.createKeywordTypeNode(131)),S),A=S.symbol&&S.symbol.getDocumentationComment(s);if(A){let w=Mye(A);w.length&&W0(x,[{text:`*\n${w.split(`\n`).map(C=>` * ${C}`).join(`\n`)}\n `,kind:3,pos:-1,end:-1,hasTrailingNewLine:!0,hasLeadingNewline:!0}])}return x}}function N1e(e){switch(e.kind){case 170:case 171:case 176:case 173:case 177:case 259:return!0}return!1}function P1e(e,t,r){let i=Vi(e,t),o=jn(i,N1e);if(!o||Ds(o)&&o.body&&wN(o.body,t))return;let s=r.getTypeChecker(),l=o.symbol;if(!l)return;let f=l.declarations;if(Fn(f)<=1||!Ji(f,S=>Gn(S)===e)||!N1e(f[0]))return;let d=f[0].kind;if(!Ji(f,S=>S.kind===d))return;let g=f;if(vt(g,S=>!!S.typeParameters||vt(S.parameters,x=>!!x.modifiers||!Re(x.name))))return;let m=Zi(g,S=>s.getSignatureFromDeclaration(S));if(Fn(m)!==Fn(f))return;let v=s.getReturnTypeOfSignature(m[0]);if(Ji(m,S=>s.getReturnTypeOfSignature(S)===v))return g}var yG,Dee,wee,aje=gt({\"src/services/refactors/convertOverloadListToSingleSignature.ts\"(){\"use strict\";Fr(),Qm(),yG=\"Convert overload list to single signature\",Dee=_.Convert_overload_list_to_single_signature.message,wee={name:yG,description:Dee,kind:\"refactor.rewrite.function.overloadList\"},Vh(yG,{kinds:[wee.kind],getEditsForAction:ije,getAvailableActions:rje})}});function oje(e){let{file:t,startPosition:r,triggerReason:i}=e,o=M1e(t,r,i===\"invoked\");return o?$m(o)?e.preferences.provideRefactorNotApplicableReason?[{name:vG,description:Ree,actions:[{...RP,notApplicableReason:o.error},{...Lk,notApplicableReason:o.error}]}]:Je:[{name:vG,description:Ree,actions:[o.addBraces?RP:Lk]}]:Je}function sje(e,t){let{file:r,startPosition:i}=e,o=M1e(r,i);L.assert(o&&!$m(o),\"Expected applicable refactor info\");let{expression:s,returnStatement:l,func:f}=o,d;if(t===RP.name){let m=D.createReturnStatement(s);d=D.createBlock([m],!0),q2(s,m,r,3,!0)}else if(t===Lk.name&&l){let m=s||D.createVoidZero();d=bY(m)?D.createParenthesizedExpression(m):m,qN(l,d,r,3,!1),q2(l,d,r,3,!1),sk(l,d,r,3,!1)}else L.fail(\"invalid action\");return{renameFilename:void 0,renameLocation:void 0,edits:nr.ChangeTracker.with(e,m=>{m.replaceNode(r,f.body,d)})}}function M1e(e,t,r=!0,i){let o=Vi(e,t),s=Xd(o);if(!s)return{error:uo(_.Could_not_find_a_containing_arrow_function)};if(!xs(s))return{error:uo(_.Containing_function_is_not_an_arrow_function)};if(!(!Od(s,o)||Od(s.body,o)&&!r)){if(pv(RP.kind,i)&&ot(s.body))return{func:s,addBraces:!0,expression:s.body};if(pv(Lk.kind,i)&&Va(s.body)&&s.body.statements.length===1){let l=Vo(s.body.statements);if(j_(l))return{func:s,addBraces:!1,expression:l.expression,returnStatement:l}}}}var vG,Ree,RP,Lk,cje=gt({\"src/services/refactors/addOrRemoveBracesToArrowFunction.ts\"(){\"use strict\";Fr(),Qm(),vG=\"Add or remove braces in an arrow function\",Ree=_.Add_or_remove_braces_in_an_arrow_function.message,RP={name:\"Add braces to arrow function\",description:_.Add_braces_to_arrow_function.message,kind:\"refactor.rewrite.arrow.braces.add\"},Lk={name:\"Remove braces from arrow function\",description:_.Remove_braces_from_arrow_function.message,kind:\"refactor.rewrite.arrow.braces.remove\"},Vh(vG,{kinds:[Lk.kind],getEditsForAction:sje,getAvailableActions:oje})}}),lje={},uje=gt({\"src/services/_namespaces/ts.refactor.addOrRemoveBracesToArrowFunction.ts\"(){\"use strict\";aje(),cje()}});function dje(e){let{file:t,startPosition:r,program:i,kind:o}=e,s=G1e(t,r,i);if(!s)return Je;let{selectedVariableDeclaration:l,func:f}=s,d=[],g=[];if(pv(Dk.kind,o)){let m=l||xs(f)&&wi(f.parent)?void 0:uo(_.Could_not_convert_to_named_function);m?g.push({...Dk,notApplicableReason:m}):d.push(Dk)}if(pv(kk.kind,o)){let m=!l&&xs(f)?void 0:uo(_.Could_not_convert_to_anonymous_function);m?g.push({...kk,notApplicableReason:m}):d.push(kk)}if(pv(wk.kind,o)){let m=ms(f)?void 0:uo(_.Could_not_convert_to_arrow_function);m?g.push({...wk,notApplicableReason:m}):d.push(wk)}return[{name:Oee,description:V1e,actions:d.length===0&&e.preferences.provideRefactorNotApplicableReason?g:d}]}function fje(e,t){let{file:r,startPosition:i,program:o}=e,s=G1e(r,i,o);if(!s)return;let{func:l}=s,f=[];switch(t){case kk.name:f.push(...hje(e,l));break;case Dk.name:let d=mje(l);if(!d)return;f.push(...gje(e,l,d));break;case wk.name:if(!ms(l))return;f.push(...yje(e,l));break;default:return L.fail(\"invalid action\")}return{renameFilename:void 0,renameLocation:void 0,edits:f}}function F1e(e){let t=!1;return e.forEachChild(function r(i){if(H2(i)){t=!0;return}!Yr(i)&&!Jc(i)&&!ms(i)&&pa(i,r)}),t}function G1e(e,t,r){let i=Vi(e,t),o=r.getTypeChecker(),s=pje(e,o,i.parent);if(s&&!F1e(s.body)&&!o.containsArgumentsReference(s))return{selectedVariableDeclaration:!0,func:s};let l=Xd(i);if(l&&(ms(l)||xs(l))&&!Od(l.body,i)&&!F1e(l.body)&&!o.containsArgumentsReference(l))return ms(l)&&U1e(e,o,l)?void 0:{selectedVariableDeclaration:!1,func:l}}function _je(e){return wi(e)||pu(e)&&e.declarations.length===1}function pje(e,t,r){if(!_je(r))return;let o=(wi(r)?r:Vo(r.declarations)).initializer;if(o&&(xs(o)||ms(o)&&!U1e(e,t,o)))return o}function B1e(e){if(ot(e)){let t=D.createReturnStatement(e),r=e.getSourceFile();return it(t,e),pd(t),qN(e,t,r,void 0,!0),D.createBlock([t],!0)}else return e}function mje(e){let t=e.parent;if(!wi(t)||!L6(t))return;let r=t.parent,i=r.parent;if(!(!pu(r)||!Bc(i)||!Re(t.name)))return{variableDeclaration:t,variableDeclarationList:r,statement:i,name:t.name}}function hje(e,t){let{file:r}=e,i=B1e(t.body),o=D.createFunctionExpression(t.modifiers,t.asteriskToken,void 0,t.typeParameters,t.parameters,t.type,i);return nr.ChangeTracker.with(e,s=>s.replaceNode(r,t,o))}function gje(e,t,r){let{file:i}=e,o=B1e(t.body),{variableDeclaration:s,variableDeclarationList:l,statement:f,name:d}=r;D7(f);let g=wg(s)&1|uu(t),m=D.createModifiersFromModifierFlags(g),v=D.createFunctionDeclaration(Fn(m)?m:void 0,t.asteriskToken,d,t.typeParameters,t.parameters,t.type,o);return l.declarations.length===1?nr.ChangeTracker.with(e,S=>S.replaceNode(i,f,v)):nr.ChangeTracker.with(e,S=>{S.delete(i,s),S.insertNodeAfter(i,f,v)})}function yje(e,t){let{file:r}=e,o=t.body.statements[0],s;vje(t.body,o)?(s=o.expression,pd(s),r1(o,s)):s=t.body;let l=D.createArrowFunction(t.modifiers,t.typeParameters,t.parameters,t.type,D.createToken(38),s);return nr.ChangeTracker.with(e,f=>f.replaceNode(r,t,l))}function vje(e,t){return e.statements.length===1&&j_(t)&&!!t.expression}function U1e(e,t,r){return!!r.name&&js.Core.isSymbolReferencedInFile(r.name,t,e)}var Oee,V1e,kk,Dk,wk,bje=gt({\"src/services/refactors/convertArrowFunctionOrFunctionExpression.ts\"(){\"use strict\";Fr(),Qm(),Oee=\"Convert arrow function or function expression\",V1e=uo(_.Convert_arrow_function_or_function_expression),kk={name:\"Convert to anonymous function\",description:uo(_.Convert_to_anonymous_function),kind:\"refactor.rewrite.function.anonymous\"},Dk={name:\"Convert to named function\",description:uo(_.Convert_to_named_function),kind:\"refactor.rewrite.function.named\"},wk={name:\"Convert to arrow function\",description:uo(_.Convert_to_arrow_function),kind:\"refactor.rewrite.function.arrow\"},Vh(Oee,{kinds:[kk.kind,Dk.kind,wk.kind],getEditsForAction:fje,getAvailableActions:dje})}}),Eje={},Tje=gt({\"src/services/_namespaces/ts.refactor.convertArrowFunctionOrFunctionExpression.ts\"(){\"use strict\";bje()}});function Sje(e){let{file:t,startPosition:r}=e;return Cu(t)||!W1e(t,r,e.program.getTypeChecker())?Je:[{name:NP,description:Fee,actions:[Gee]}]}function xje(e,t){L.assert(t===NP,\"Unexpected action name\");let{file:r,startPosition:i,program:o,cancellationToken:s,host:l}=e,f=W1e(r,i,o.getTypeChecker());if(!f||!s)return;let d=Cje(f,o,s);return d.valid?{renameFilename:void 0,renameLocation:void 0,edits:nr.ChangeTracker.with(e,m=>Aje(r,o,l,m,f,d))}:{edits:[]}}function Aje(e,t,r,i,o,s){let l=s.signature,f=on(q1e(o,t,r),m=>cc(m));if(l){let m=on(q1e(l,t,r),v=>cc(v));g(l,m)}g(o,f);let d=HD(s.functionCalls,(m,v)=>Es(m.pos,v.pos));for(let m of d)if(m.arguments&&m.arguments.length){let v=cc(Mje(o,m.arguments),!0);i.replaceNodeRange(Gn(m),Vo(m.arguments),To(m.arguments),v,{leadingTriviaOption:nr.LeadingTriviaOption.IncludeAll,trailingTriviaOption:nr.TrailingTriviaOption.Include})}function g(m,v){i.replaceNodeRangeWithNodes(e,Vo(m.parameters),To(m.parameters),v,{joiner:\", \",indentation:0,leadingTriviaOption:nr.LeadingTriviaOption.IncludeAll,trailingTriviaOption:nr.TrailingTriviaOption.Include})}}function Cje(e,t,r){let i=Gje(e),o=Ec(e)?Fje(e):[],s=fA([...i,...o],Zv),l=t.getTypeChecker(),f=Uo(s,v=>js.getReferenceEntriesForNode(-1,v,t,t.getSourceFiles(),r)),d=g(f);return Ji(d.declarations,v=>ya(s,v))||(d.valid=!1),d;function g(v){let S={accessExpressions:[],typeUsages:[]},x={functionCalls:[],declarations:[],classReferences:S,valid:!0},A=on(i,m),w=on(o,m),C=Ec(e),P=on(i,F=>Nee(F,l));for(let F of v){if(F.kind===js.EntryKind.Span){x.valid=!1;continue}if(ya(P,m(F.node))){if(Dje(F.node.parent)){x.signature=F.node.parent;continue}let q=H1e(F);if(q){x.functionCalls.push(q);continue}}let B=Nee(F.node,l);if(B&&ya(P,B)){let q=Pee(F);if(q){x.declarations.push(q);continue}}if(ya(A,m(F.node))||ZL(F.node)){if(j1e(F))continue;let W=Pee(F);if(W){x.declarations.push(W);continue}let Y=H1e(F);if(Y){x.functionCalls.push(Y);continue}}if(C&&ya(w,m(F.node))){if(j1e(F))continue;let W=Pee(F);if(W){x.declarations.push(W);continue}let Y=Ije(F);if(Y){S.accessExpressions.push(Y);continue}if(sl(e.parent)){let R=Lje(F);if(R){S.typeUsages.push(R);continue}}}x.valid=!1}return x}function m(v){let S=l.getSymbolAtLocation(v);return S&&ege(S,l)}}function Nee(e,t){let r=nP(e);if(r){let i=t.getContextualTypeForObjectLiteralElement(r),o=i?.getSymbol();if(o&&!(ac(o)&6))return o}}function j1e(e){let t=e.node;if($u(t.parent)||lm(t.parent)||Nl(t.parent)||nv(t.parent)||Mu(t.parent)||pc(t.parent))return t}function Pee(e){if(Kl(e.node.parent))return e.node}function H1e(e){if(e.node.parent){let t=e.node,r=t.parent;switch(r.kind){case 210:case 211:let i=zr(r,Ih);if(i&&i.expression===t)return i;break;case 208:let o=zr(r,br);if(o&&o.parent&&o.name===t){let l=zr(o.parent,Ih);if(l&&l.expression===o)return l}break;case 209:let s=zr(r,Vs);if(s&&s.parent&&s.argumentExpression===t){let l=zr(s.parent,Ih);if(l&&l.expression===s)return l}break}}}function Ije(e){if(e.node.parent){let t=e.node,r=t.parent;switch(r.kind){case 208:let i=zr(r,br);if(i&&i.expression===t)return i;break;case 209:let o=zr(r,Vs);if(o&&o.expression===t)return o;break}}}function Lje(e){let t=e.node;if(ZT(t)===2||IR(t.parent))return t}function W1e(e,t,r){let i=nk(e,t),o=ice(i);if(!kje(i)&&o&&wje(o,r)&&Od(o,i)&&!(o.body&&Od(o.body,i)))return o}function kje(e){let t=jn(e,IA);if(t){let r=jn(t,i=>!IA(i));return!!r&&Ds(r)}return!1}function Dje(e){return zm(e)&&(ku(e.parent)||Rd(e.parent))}function wje(e,t){var r;if(!Rje(e.parameters,t))return!1;switch(e.kind){case 259:return z1e(e)&&OP(e,t);case 171:if(rs(e.parent)){let i=Nee(e.name,t);return((r=i?.declarations)==null?void 0:r.length)===1&&OP(e,t)}return OP(e,t);case 173:return sl(e.parent)?z1e(e.parent)&&OP(e,t):J1e(e.parent.parent)&&OP(e,t);case 215:case 216:return J1e(e.parent)}return!1}function OP(e,t){return!!e.body&&!t.isImplementationOfOverload(e)}function z1e(e){return e.name?!0:!!z2(e,88)}function Rje(e,t){return Nje(e)>=X1e&&Ji(e,r=>Oje(r,t))}function Oje(e,t){if(Fm(e)){let r=t.getTypeAtLocation(e);if(!t.isArrayType(r)&&!t.isTupleType(r))return!1}return!e.modifiers&&Re(e.name)}function J1e(e){return wi(e)&&kh(e)&&Re(e.name)&&!e.type}function Mee(e){return e.length>0&&H2(e[0].name)}function Nje(e){return Mee(e)?e.length-1:e.length}function K1e(e){return Mee(e)&&(e=D.createNodeArray(e.slice(1),e.hasTrailingComma)),e}function Pje(e,t){return Re(t)&&l_(t)===e?D.createShorthandPropertyAssignment(e):D.createPropertyAssignment(e,t)}function Mje(e,t){let r=K1e(e.parameters),i=Fm(To(r)),o=i?t.slice(0,r.length-1):t,s=on(o,(f,d)=>{let g=bG(r[d]),m=Pje(g,f);return pd(m.name),yl(m)&&pd(m.initializer),r1(f,m),m});if(i&&t.length>=r.length){let f=t.slice(r.length-1),d=D.createPropertyAssignment(bG(To(r)),D.createArrayLiteralExpression(f));s.push(d)}return D.createObjectLiteralExpression(s,!1)}function q1e(e,t,r){let i=t.getTypeChecker(),o=K1e(e.parameters),s=on(o,m),l=D.createObjectBindingPattern(s),f=v(o),d;Ji(o,A)&&(d=D.createObjectLiteralExpression());let g=D.createParameterDeclaration(void 0,void 0,l,void 0,f,d);if(Mee(e.parameters)){let w=e.parameters[0],C=D.createParameterDeclaration(void 0,void 0,w.name,void 0,w.type);return pd(C.name),r1(w.name,C.name),w.type&&(pd(C.type),r1(w.type,C.type)),D.createNodeArray([C,g])}return D.createNodeArray([g]);function m(w){let C=D.createBindingElement(void 0,void 0,bG(w),Fm(w)&&A(w)?D.createArrayLiteralExpression():w.initializer);return pd(C),w.initializer&&C.initializer&&r1(w.initializer,C.initializer),C}function v(w){let C=on(w,S);return bp(D.createTypeLiteralNode(C),1)}function S(w){let C=w.type;!C&&(w.initializer||Fm(w))&&(C=x(w));let P=D.createPropertySignature(void 0,bG(w),A(w)?D.createToken(57):w.questionToken,C);return pd(P),r1(w.name,P.name),w.type&&P.type&&r1(w.type,P.type),P}function x(w){let C=i.getTypeAtLocation(w);return lk(C,w,t,r)}function A(w){if(Fm(w)){let C=i.getTypeAtLocation(w);return!i.isTupleType(C)}return i.isOptionalParameter(w)}}function bG(e){return l_(e.name)}function Fje(e){switch(e.parent.kind){case 260:let t=e.parent;return t.name?[t.name]:[L.checkDefined(z2(t,88),\"Nameless class declaration should be a default export\")];case 228:let i=e.parent,o=e.parent.parent,s=i.name;return s?[s,o.name]:[o.name]}}function Gje(e){switch(e.kind){case 259:return e.name?[e.name]:[L.checkDefined(z2(e,88),\"Nameless function declaration should be a default export\")];case 171:return[e.name];case 173:let r=L.checkDefined(Yo(e,135,e.getSourceFile()),\"Constructor declaration should have constructor keyword\");return e.parent.kind===228?[e.parent.parent.name,r]:[r];case 216:return[e.parent.name];case 215:return e.name?[e.name,e.parent.name]:[e.parent.name];default:return L.assertNever(e,`Unexpected function declaration kind ${e.kind}`)}}var NP,X1e,Fee,Gee,Bje=gt({\"src/services/refactors/convertParamsToDestructuredObject.ts\"(){\"use strict\";Fr(),Qm(),NP=\"Convert parameters to destructured object\",X1e=1,Fee=uo(_.Convert_parameters_to_destructured_object),Gee={name:NP,description:Fee,kind:\"refactor.rewrite.parameters.toDestructured\"},Vh(NP,{kinds:[Gee.kind],getEditsForAction:xje,getAvailableActions:Sje})}}),Uje={},Vje=gt({\"src/services/_namespaces/ts.refactor.convertParamsToDestructuredObject.ts\"(){\"use strict\";Bje()}});function jje(e){let{file:t,startPosition:r}=e,i=Y1e(t,r),o=Bee(i),s={name:EG,description:TG,actions:[]};return ar(o)&&Uee(o).isValidConcatenation?(s.actions.push(SG),[s]):e.preferences.provideRefactorNotApplicableReason?(s.actions.push({...SG,notApplicableReason:uo(_.Can_only_convert_string_concatenation)}),[s]):Je}function Y1e(e,t){let r=Vi(e,t),i=Bee(r);return!Uee(i).isValidConcatenation&&ud(i.parent)&&ar(i.parent.parent)?i.parent.parent:r}function Hje(e,t){let{file:r,startPosition:i}=e,o=Y1e(r,i);switch(t){case TG:return{edits:Wje(e,o)};default:return L.fail(\"invalid action\")}}function Wje(e,t){let r=Bee(t),i=e.file,o=Kje(Uee(r),i),s=eb(i.text,r.end);if(s){let l=s[s.length-1],f={pos:s[0].pos,end:l.end};return nr.ChangeTracker.with(e,d=>{d.deleteRange(i,f),d.replaceNode(i,r,o)})}else return nr.ChangeTracker.with(e,l=>l.replaceNode(i,r,o))}function zje(e){return e.operatorToken.kind!==63}function Bee(e){return jn(e.parent,r=>{switch(r.kind){case 208:case 209:return!1;case 225:case 223:return!(ar(r.parent)&&zje(r.parent));default:return\"quit\"}})||e}function Uee(e){let t=l=>{if(!ar(l))return{nodes:[l],operators:[],validOperators:!0,hasString:yo(l)||IS(l)};let{nodes:f,operators:d,hasString:g,validOperators:m}=t(l.left);if(!(g||yo(l.right)||d3(l.right)))return{nodes:[l],operators:[],hasString:!1,validOperators:!0};let v=l.operatorToken.kind===39,S=m&&v;return f.push(l.right),d.push(l.operatorToken),{nodes:f,operators:d,hasString:!0,validOperators:S}},{nodes:r,operators:i,validOperators:o,hasString:s}=t(e);return{nodes:r,operators:i,isValidConcatenation:o&&s}}function Jje(e){return e.replace(/\\\\.|[$`]/g,t=>t[0]===\"\\\\\"?t:\"\\\\\"+t)}function $1e(e){let t=f2(e)||Aue(e)?-2:-1;return Qc(e).slice(1,t)}function Q1e(e,t){let r=[],i=\"\",o=\"\";for(;e<t.length;){let s=t[e];if(es(s))i+=s.text,o+=Jje(Qc(s).slice(1,-1)),r.push(e),e++;else if(d3(s)){i+=s.head.text,o+=$1e(s.head);break}else break}return[e,i,o,r]}function Kje({nodes:e,operators:t},r){let i=eSe(t,r),o=tSe(e,r,i),[s,l,f,d]=Q1e(0,e);if(s===e.length){let v=D.createNoSubstitutionTemplateLiteral(l,f);return o(d,v),v}let g=[],m=D.createTemplateHead(l,f);o(d,m);for(let v=s;v<e.length;v++){let S=qje(e[v]);i(v,S);let[x,A,w,C]=Q1e(v+1,e);v=x-1;let P=v===e.length-1;if(d3(S)){let F=on(S.templateSpans,(B,q)=>{Z1e(B);let W=q===S.templateSpans.length-1,Y=B.literal.text+(W?A:\"\"),R=$1e(B.literal)+(W?w:\"\");return D.createTemplateSpan(B.expression,P&&W?D.createTemplateTail(Y,R):D.createTemplateMiddle(Y,R))});g.push(...F)}else{let F=P?D.createTemplateTail(A,w):D.createTemplateMiddle(A,w);o(C,F),g.push(D.createTemplateSpan(S,F))}}return D.createTemplateExpression(m,g)}function Z1e(e){let t=e.getSourceFile();sk(e,e.expression,t,3,!1),qN(e.expression,e.expression,t,3,!1)}function qje(e){return ud(e)&&(Z1e(e),e=e.expression),e}var EG,TG,SG,eSe,tSe,Xje=gt({\"src/services/refactors/convertStringOrTemplateLiteral.ts\"(){\"use strict\";Fr(),Qm(),EG=\"Convert to template string\",TG=uo(_.Convert_to_template_string),SG={name:EG,description:TG,kind:\"refactor.rewrite.string\"},Vh(EG,{kinds:[SG.kind],getEditsForAction:Hje,getAvailableActions:jje}),eSe=(e,t)=>(r,i)=>{r<e.length&&sk(e[r],i,t,3,!1)},tSe=(e,t,r)=>(i,o)=>{for(;i.length>0;){let s=i.shift();sk(e[s],o,t,3,!1),r(s,o)}}}}),Yje={},$je=gt({\"src/services/_namespaces/ts.refactor.convertStringOrTemplateLiteral.ts\"(){\"use strict\";Xje()}});function Qje(e){let t=nSe(e,e.triggerReason===\"invoked\");return t?$m(t)?e.preferences.provideRefactorNotApplicableReason?[{name:PP,description:CG,actions:[{...IG,notApplicableReason:t.error}]}]:Je:[{name:PP,description:CG,actions:[IG]}]:Je}function Zje(e,t){let r=nSe(e);return L.assert(r&&!$m(r),\"Expected applicable refactor info\"),{edits:nr.ChangeTracker.with(e,o=>sHe(e.file,e.program.getTypeChecker(),o,r,t)),renameFilename:void 0,renameLocation:void 0}}function xG(e){return ar(e)||b2(e)}function eHe(e){return Ol(e)||j_(e)||Bc(e)}function AG(e){return xG(e)||eHe(e)}function nSe(e,t=!0){let{file:r,program:i}=e,o=QS(e),s=o.length===0;if(s&&!t)return;let l=Vi(r,o.start),f=p7(r,o.start+o.length),d=Wc(l.pos,f&&f.end>=l.pos?f.getEnd():l.getEnd()),g=s?aHe(l):iHe(l,d),m=g&&AG(g)?oHe(g):void 0;if(!m)return{error:uo(_.Could_not_find_convertible_access_expression)};let v=i.getTypeChecker();return b2(m)?tHe(m,v):nHe(m)}function tHe(e,t){let r=e.condition,i=jee(e.whenTrue);if(!i||t.isNullableType(t.getTypeAtLocation(i)))return{error:uo(_.Could_not_find_convertible_access_expression)};if((br(r)||Re(r))&&Vee(r,i.expression))return{finalExpression:i,occurrences:[r],expression:e};if(ar(r)){let o=rSe(i.expression,r);return o?{finalExpression:i,occurrences:o,expression:e}:{error:uo(_.Could_not_find_matching_access_expressions)}}}function nHe(e){if(e.operatorToken.kind!==55)return{error:uo(_.Can_only_convert_logical_AND_access_chains)};let t=jee(e.right);if(!t)return{error:uo(_.Could_not_find_convertible_access_expression)};let r=rSe(t.expression,e.left);return r?{finalExpression:t,occurrences:r,expression:e}:{error:uo(_.Could_not_find_matching_access_expressions)}}function rSe(e,t){let r=[];for(;ar(t)&&t.operatorToken.kind===55;){let o=Vee(vs(e),vs(t.right));if(!o)break;r.push(o),e=o,t=t.left}let i=Vee(e,t);return i&&r.push(i),r.length>0?r:void 0}function Vee(e,t){if(!(!Re(t)&&!br(t)&&!Vs(t)))return rHe(e,t)?t:void 0}function rHe(e,t){for(;(Pa(e)||br(e)||Vs(e))&&Rk(e)!==Rk(t);)e=e.expression;for(;br(e)&&br(t)||Vs(e)&&Vs(t);){if(Rk(e)!==Rk(t))return!1;e=e.expression,t=t.expression}return Re(e)&&Re(t)&&e.getText()===t.getText()}function Rk(e){if(Re(e)||yf(e))return e.getText();if(br(e))return Rk(e.name);if(Vs(e))return Rk(e.argumentExpression)}function iHe(e,t){for(;e.parent;){if(AG(e)&&t.length!==0&&e.end>=t.start+t.length)return e;e=e.parent}}function aHe(e){for(;e.parent;){if(AG(e)&&!AG(e.parent))return e;e=e.parent}}function oHe(e){if(xG(e))return e;if(Bc(e)){let t=HA(e),r=t?.initializer;return r&&xG(r)?r:void 0}return e.expression&&xG(e.expression)?e.expression:void 0}function jee(e){if(e=vs(e),ar(e))return jee(e.left);if((br(e)||Vs(e)||Pa(e))&&!Jl(e))return e}function iSe(e,t,r){if(br(t)||Vs(t)||Pa(t)){let i=iSe(e,t.expression,r),o=r.length>0?r[r.length-1]:void 0,s=o?.getText()===t.expression.getText();if(s&&r.pop(),Pa(t))return s?D.createCallChain(i,D.createToken(28),t.typeArguments,t.arguments):D.createCallChain(i,t.questionDotToken,t.typeArguments,t.arguments);if(br(t))return s?D.createPropertyAccessChain(i,D.createToken(28),t.name):D.createPropertyAccessChain(i,t.questionDotToken,t.name);if(Vs(t))return s?D.createElementAccessChain(i,D.createToken(28),t.argumentExpression):D.createElementAccessChain(i,t.questionDotToken,t.argumentExpression)}return t}function sHe(e,t,r,i,o){let{finalExpression:s,occurrences:l,expression:f}=i,d=l[l.length-1],g=iSe(t,s,l);g&&(br(g)||Vs(g)||Pa(g))&&(ar(f)?r.replaceNodeRange(e,d,s,g):b2(f)&&r.replaceNode(e,f,D.createBinaryExpression(g,D.createToken(60),f.whenFalse)))}var PP,CG,IG,cHe=gt({\"src/services/refactors/convertToOptionalChainExpression.ts\"(){\"use strict\";Fr(),Qm(),PP=\"Convert to optional chain expression\",CG=uo(_.Convert_to_optional_chain_expression),IG={name:PP,description:CG,kind:\"refactor.rewrite.expression.optionalChain\"},Vh(PP,{kinds:[IG.kind],getEditsForAction:Zje,getAvailableActions:Qje})}}),lHe={},uHe=gt({\"src/services/_namespaces/ts.refactor.convertToOptionalChainExpression.ts\"(){\"use strict\";cHe()}});function aSe(e){let t=e.kind,r=Hee(e.file,QS(e),e.triggerReason===\"invoked\"),i=r.targetRange;if(i===void 0){if(!r.errors||r.errors.length===0||!e.preferences.provideRefactorNotApplicableReason)return Je;let A=[];return pv(px.kind,t)&&A.push({name:fx,description:px.description,actions:[{...px,notApplicableReason:x(r.errors)}]}),pv(_x.kind,t)&&A.push({name:fx,description:_x.description,actions:[{..._x,notApplicableReason:x(r.errors)}]}),A}let o=hHe(i,e);if(o===void 0)return Je;let s=[],l=new Map,f,d=[],g=new Map,m,v=0;for(let{functionExtraction:A,constantExtraction:w}of o){if(pv(px.kind,t)){let C=A.description;A.errors.length===0?l.has(C)||(l.set(C,!0),s.push({description:C,name:`function_scope_${v}`,kind:px.kind})):f||(f={description:C,name:`function_scope_${v}`,notApplicableReason:x(A.errors),kind:px.kind})}if(pv(_x.kind,t)){let C=w.description;w.errors.length===0?g.has(C)||(g.set(C,!0),d.push({description:C,name:`constant_scope_${v}`,kind:_x.kind})):m||(m={description:C,name:`constant_scope_${v}`,notApplicableReason:x(w.errors),kind:_x.kind})}v++}let S=[];return s.length?S.push({name:fx,description:uo(_.Extract_function),actions:s}):e.preferences.provideRefactorNotApplicableReason&&f&&S.push({name:fx,description:uo(_.Extract_function),actions:[f]}),d.length?S.push({name:fx,description:uo(_.Extract_constant),actions:d}):e.preferences.provideRefactorNotApplicableReason&&m&&S.push({name:fx,description:uo(_.Extract_constant),actions:[m]}),S.length?S:Je;function x(A){let w=A[0].messageText;return typeof w!=\"string\"&&(w=w.messageText),w}}function oSe(e,t){let i=Hee(e.file,QS(e)).targetRange,o=/^function_scope_(\\d+)$/.exec(t);if(o){let l=+o[1];return L.assert(isFinite(l),\"Expected to parse a finite number from the function scope index\"),pHe(i,e,l)}let s=/^constant_scope_(\\d+)$/.exec(t);if(s){let l=+s[1];return L.assert(isFinite(l),\"Expected to parse a finite number from the constant scope index\"),mHe(i,e,l)}L.fail(\"Unrecognized action name\")}function Hee(e,t,r=!0){let{length:i}=t;if(i===0&&!r)return{errors:[al(e,t.start,i,vl.cannotExtractEmpty)]};let o=i===0&&r,s=Ihe(e,t.start),l=p7(e,wl(t)),f=s&&l&&r?dHe(s,l,e):t,d=o?MHe(s):HN(s,e,f),g=o?d:HN(l,e,f),m=0,v;if(!d||!g)return{errors:[al(e,t.start,i,vl.cannotExtractRange)]};if(d.flags&8388608)return{errors:[al(e,t.start,i,vl.cannotExtractJSDoc)]};if(d.parent!==g.parent)return{errors:[al(e,t.start,i,vl.cannotExtractRange)]};if(d!==g){if(!cSe(d.parent))return{errors:[al(e,t.start,i,vl.cannotExtractRange)]};let F=[];for(let B of d.parent.statements){if(B===d||F.length){let q=P(B);if(q)return{errors:q};F.push(B)}if(B===g)break}return F.length?{targetRange:{range:F,facts:m,thisNode:v}}:{errors:[al(e,t.start,i,vl.cannotExtractRange)]}}if(j_(d)&&!d.expression)return{errors:[al(e,t.start,i,vl.cannotExtractRange)]};let S=A(d),x=w(S)||P(S);if(x)return{errors:x};return{targetRange:{range:fHe(S),facts:m,thisNode:v}};function A(F){if(j_(F)){if(F.expression)return F.expression}else if(Bc(F)||pu(F)){let B=Bc(F)?F.declarationList.declarations:F.declarations,q=0,W;for(let Y of B)Y.initializer&&(q++,W=Y.initializer);if(q===1)return W}else if(wi(F)&&F.initializer)return F.initializer;return F}function w(F){if(Re(Ol(F)?F.expression:F))return[hr(F,vl.cannotExtractIdentifier)]}function C(F,B){let q=F;for(;q!==B;){if(q.kind===169){Ca(q)&&(m|=32);break}else if(q.kind===166){Xd(q).kind===173&&(m|=32);break}else q.kind===171&&Ca(q)&&(m|=32);q=q.parent}}function P(F){let B;if(($=>{$[$.None=0]=\"None\",$[$.Break=1]=\"Break\",$[$.Continue=2]=\"Continue\",$[$.Return=4]=\"Return\"})(B||(B={})),L.assert(F.pos<=F.end,\"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809 (1)\"),L.assert(!vp(F.pos),\"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809 (2)\"),!ca(F)&&!(Dh(F)&&sSe(F))&&!qee(F))return[hr(F,vl.statementOrExpressionExpected)];if(F.flags&16777216)return[hr(F,vl.cannotExtractAmbientBlock)];let q=Zc(F);q&&C(F,q);let W,Y=4,R;if(ie(F),m&8){let $=Ku(F,!1,!1);($.kind===259||$.kind===171&&$.parent.kind===207||$.kind===215)&&(m|=16)}return W;function ie($){if(W)return!0;if(Kl($)){let Z=$.kind===257?$.parent.parent:$;if(Mr(Z,1))return(W||(W=[])).push(hr($,vl.cannotExtractExportedEntity)),!0}switch($.kind){case 269:return(W||(W=[])).push(hr($,vl.cannotExtractImport)),!0;case 274:return(W||(W=[])).push(hr($,vl.cannotExtractExportedEntity)),!0;case 106:if($.parent.kind===210){let Z=Zc($);if(Z===void 0||Z.pos<t.start||Z.end>=t.start+t.length)return(W||(W=[])).push(hr($,vl.cannotExtractSuper)),!0}else m|=8,v=$;break;case 216:pa($,function Z(U){if(H2(U))m|=8,v=$;else{if(Yr(U)||Ia(U)&&!xs(U))return!1;pa(U,Z)}});case 260:case 259:Li($.parent)&&$.parent.externalModuleIndicator===void 0&&(W||(W=[])).push(hr($,vl.functionWillNotBeVisibleInTheNewScope));case 228:case 215:case 171:case 173:case 174:case 175:return!1}let fe=Y;switch($.kind){case 242:Y&=-5;break;case 255:Y=0;break;case 238:$.parent&&$.parent.kind===255&&$.parent.finallyBlock===$&&(Y=4);break;case 293:case 292:Y|=1;break;default:Wy($,!1)&&(Y|=3);break}switch($.kind){case 194:case 108:m|=8,v=$;break;case 253:{let Z=$.label;(R||(R=[])).push(Z.escapedText),pa($,ie),R.pop();break}case 249:case 248:{let Z=$.label;Z?ya(R,Z.escapedText)||(W||(W=[])).push(hr($,vl.cannotExtractRangeContainingLabeledBreakOrContinueStatementWithTargetOutsideOfTheRange)):Y&($.kind===249?1:2)||(W||(W=[])).push(hr($,vl.cannotExtractRangeContainingConditionalBreakOrContinueStatements));break}case 220:m|=4;break;case 226:m|=2;break;case 250:Y&4?m|=1:(W||(W=[])).push(hr($,vl.cannotExtractRangeContainingConditionalReturnStatement));break;default:pa($,ie);break}Y=fe}}}function dHe(e,t,r){let i=e.getStart(r),o=t.getEnd();return r.text.charCodeAt(o)===59&&o++,{start:i,length:o-i}}function fHe(e){if(ca(e))return[e];if(Dh(e))return Ol(e.parent)?[e.parent]:e;if(qee(e))return e}function Wee(e){return xs(e)?Hj(e.body):Ds(e)||Li(e)||Tp(e)||Yr(e)}function _He(e){let t=jh(e.range)?Vo(e.range):e.range;if(e.facts&8&&!(e.facts&16)){let i=Zc(t);if(i){let o=jn(t,Ds);return o?[o,i]:[i]}}let r=[];for(;;)if(t=t.parent,t.kind===166&&(t=jn(t,i=>Ds(i)).parent),Wee(t)&&(r.push(t),t.kind===308))return r}function pHe(e,t,r){let{scopes:i,readsAndWrites:{target:o,usagesPerScope:s,functionErrorsPerScope:l,exposedVariableDeclarations:f}}=zee(e,t);return L.assert(!l[r].length,\"The extraction went missing? How?\"),t.cancellationToken.throwIfCancellationRequested(),THe(o,i[r],s[r],f,e,t)}function mHe(e,t,r){let{scopes:i,readsAndWrites:{target:o,usagesPerScope:s,constantErrorsPerScope:l,exposedVariableDeclarations:f}}=zee(e,t);L.assert(!l[r].length,\"The extraction went missing? How?\"),L.assert(f.length===0,\"Extract constant accepted a range containing a variable declaration?\"),t.cancellationToken.throwIfCancellationRequested();let d=ot(o)?o:o.statements[0].expression;return SHe(d,i[r],s[r],e.facts,t)}function hHe(e,t){let{scopes:r,readsAndWrites:{functionErrorsPerScope:i,constantErrorsPerScope:o}}=zee(e,t);return r.map((l,f)=>{let d=gHe(l),g=yHe(l),m=Ds(l)?vHe(l):Yr(l)?bHe(l):EHe(l),v,S;return m===1?(v=jm(uo(_.Extract_to_0_in_1_scope),[d,\"global\"]),S=jm(uo(_.Extract_to_0_in_1_scope),[g,\"global\"])):m===0?(v=jm(uo(_.Extract_to_0_in_1_scope),[d,\"module\"]),S=jm(uo(_.Extract_to_0_in_1_scope),[g,\"module\"])):(v=jm(uo(_.Extract_to_0_in_1),[d,m]),S=jm(uo(_.Extract_to_0_in_1),[g,m])),f===0&&!Yr(l)&&(S=jm(uo(_.Extract_to_0_in_enclosing_scope),[g])),{functionExtraction:{description:v,errors:i[f]},constantExtraction:{description:S,errors:o[f]}}})}function zee(e,t){let{file:r}=t,i=_He(e),o=NHe(e,r),s=PHe(e,i,o,r,t.program.getTypeChecker(),t.cancellationToken);return{scopes:i,readsAndWrites:s}}function gHe(e){return Ds(e)?\"inner function\":Yr(e)?\"method\":\"function\"}function yHe(e){return Yr(e)?\"readonly field\":\"constant\"}function vHe(e){switch(e.kind){case 173:return\"constructor\";case 215:case 259:return e.name?`function '${e.name.text}'`:X7;case 216:return\"arrow function\";case 171:return`method '${e.name.getText()}'`;case 174:return`'get ${e.name.getText()}'`;case 175:return`'set ${e.name.getText()}'`;default:throw L.assertNever(e,`Unexpected scope kind ${e.kind}`)}}function bHe(e){return e.kind===260?e.name?`class '${e.name.text}'`:\"anonymous class declaration\":e.name?`class expression '${e.name.text}'`:\"anonymous class expression\"}function EHe(e){return e.kind===265?`namespace '${e.parent.name.getText()}'`:e.externalModuleIndicator?0:1}function THe(e,t,{usages:r,typeParameterUsages:i,substitutions:o},s,l,f){let d=f.program.getTypeChecker(),g=Do(f.program.getCompilerOptions()),m=gu.createImportAdder(f.file,f.program,f.preferences,f.host),v=t.getSourceFile(),S=i1(Yr(t)?\"newMethod\":\"newFunction\",v),x=Yn(t),A=D.createIdentifier(S),w,C=[],P=[],F;r.forEach((Ce,Ie)=>{let Be;if(!x){let Le=d.getTypeOfSymbolAtLocation(Ce.symbol,Ce.node);Le=d.getBaseTypeOfLiteralType(Le),Be=gu.typeToAutoImportableTypeNode(d,m,Le,t,g,1)}let Ne=D.createParameterDeclaration(void 0,void 0,Ie,void 0,Be);C.push(Ne),Ce.usage===2&&(F||(F=[])).push(Ce),P.push(D.createIdentifier(Ie))});let q=lo(i.values(),Ce=>({type:Ce,declaration:AHe(Ce)})).sort(CHe),W=q.length===0?void 0:q.map(Ce=>Ce.declaration),Y=W!==void 0?W.map(Ce=>D.createTypeReferenceNode(Ce.name,void 0)):void 0;if(ot(e)&&!x){let Ce=d.getContextualType(e);w=d.typeToTypeNode(Ce,t,1)}let{body:R,returnValueProperty:ie}=LHe(e,s,F,o,!!(l.facts&1));pd(R);let $,fe=!!(l.facts&16);if(Yr(t)){let Ce=x?[]:[D.createModifier(121)];l.facts&32&&Ce.push(D.createModifier(124)),l.facts&4&&Ce.push(D.createModifier(132)),$=D.createMethodDeclaration(Ce.length?Ce:void 0,l.facts&2?D.createToken(41):void 0,A,void 0,W,C,w,R)}else fe&&C.unshift(D.createParameterDeclaration(void 0,void 0,\"this\",void 0,d.typeToTypeNode(d.getTypeAtLocation(l.thisNode),t,1),void 0)),$=D.createFunctionDeclaration(l.facts&4?[D.createToken(132)]:void 0,l.facts&2?D.createToken(41):void 0,A,W,C,w,R);let Z=nr.ChangeTracker.fromContext(f),U=(jh(l.range)?To(l.range):l.range).end,re=wHe(U,t);re?Z.insertNodeBefore(f.file,re,$,!0):Z.insertNodeAtEndOfScope(f.file,t,$),m.writeFixes(Z);let le=[],_e=IHe(t,l,S);fe&&P.unshift(D.createIdentifier(\"this\"));let ge=D.createCallExpression(fe?D.createPropertyAccessExpression(_e,\"call\"):_e,Y,P);if(l.facts&2&&(ge=D.createYieldExpression(D.createToken(41),ge)),l.facts&4&&(ge=D.createAwaitExpression(ge)),Kee(e)&&(ge=D.createJsxExpression(void 0,ge)),s.length&&!F)if(L.assert(!ie,\"Expected no returnValueProperty\"),L.assert(!(l.facts&1),\"Expected RangeFacts.HasReturn flag to be unset\"),s.length===1){let Ce=s[0];le.push(D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(cc(Ce.name),void 0,cc(Ce.type),ge)],Ce.parent.flags)))}else{let Ce=[],Ie=[],Be=s[0].parent.flags,Ne=!1;for(let Ye of s){Ce.push(D.createBindingElement(void 0,void 0,cc(Ye.name)));let _t=d.typeToTypeNode(d.getBaseTypeOfLiteralType(d.getTypeAtLocation(Ye)),t,1);Ie.push(D.createPropertySignature(void 0,Ye.symbol.name,void 0,_t)),Ne=Ne||Ye.type!==void 0,Be=Be&Ye.parent.flags}let Le=Ne?D.createTypeLiteralNode(Ie):void 0;Le&&Jn(Le,1),le.push(D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(D.createObjectBindingPattern(Ce),void 0,Le,ge)],Be)))}else if(s.length||F){if(s.length)for(let Ie of s){let Be=Ie.parent.flags;Be&2&&(Be=Be&-3|1),le.push(D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(Ie.symbol.name,void 0,Pe(Ie.type))],Be)))}ie&&le.push(D.createVariableStatement(void 0,D.createVariableDeclarationList([D.createVariableDeclaration(ie,void 0,Pe(w))],1)));let Ce=Jee(s,F);ie&&Ce.unshift(D.createShorthandPropertyAssignment(ie)),Ce.length===1?(L.assert(!ie,\"Shouldn't have returnValueProperty here\"),le.push(D.createExpressionStatement(D.createAssignment(Ce[0].name,ge))),l.facts&1&&le.push(D.createReturnStatement())):(le.push(D.createExpressionStatement(D.createAssignment(D.createObjectLiteralExpression(Ce),ge))),ie&&le.push(D.createReturnStatement(D.createIdentifier(ie))))}else l.facts&1?le.push(D.createReturnStatement(ge)):jh(l.range)?le.push(D.createExpressionStatement(ge)):le.push(ge);jh(l.range)?Z.replaceNodeRangeWithNodes(f.file,Vo(l.range),To(l.range),le):Z.replaceNodeWithNodes(f.file,l.range,le);let X=Z.getChanges(),we=(jh(l.range)?Vo(l.range):l.range).getSourceFile().fileName,ke=KN(X,we,S,!1);return{renameFilename:we,renameLocation:ke,edits:X};function Pe(Ce){if(Ce===void 0)return;let Ie=cc(Ce),Be=Ie;for(;wS(Be);)Be=Be.type;return DS(Be)&&wr(Be.types,Ne=>Ne.kind===155)?Ie:D.createUnionTypeNode([Ie,D.createKeywordTypeNode(155)])}}function SHe(e,t,{substitutions:r},i,o){let s=o.program.getTypeChecker(),l=t.getSourceFile(),f=br(e)&&!Yr(t)&&!s.resolveName(e.name.text,e,111551,!1)&&!pi(e.name)&&!nb(e.name)?e.name.text:i1(Yr(t)?\"newProperty\":\"newLocal\",l),d=Yn(t),g=d||!s.isContextSensitive(e)?void 0:s.typeToTypeNode(s.getContextualType(e),t,1),m=kHe(vs(e),r);({variableType:g,initializer:m}=w(g,m)),pd(m);let v=nr.ChangeTracker.fromContext(o);if(Yr(t)){L.assert(!d,\"Cannot extract to a JS class\");let C=[];C.push(D.createModifier(121)),i&32&&C.push(D.createModifier(124)),C.push(D.createModifier(146));let P=D.createPropertyDeclaration(C,f,void 0,g,m),F=D.createPropertyAccessExpression(i&32?D.createIdentifier(t.name.getText()):D.createThis(),D.createIdentifier(f));Kee(e)&&(F=D.createJsxExpression(void 0,F));let B=e.pos,q=RHe(B,t);v.insertNodeBefore(o.file,q,P,!0),v.replaceNode(o.file,e,F)}else{let C=D.createVariableDeclaration(f,void 0,g,m),P=xHe(e,t);if(P){v.insertNodeBefore(o.file,P,C);let F=D.createIdentifier(f);v.replaceNode(o.file,e,F)}else if(e.parent.kind===241&&t===jn(e,Wee)){let F=D.createVariableStatement(void 0,D.createVariableDeclarationList([C],2));v.replaceNode(o.file,e.parent,F)}else{let F=D.createVariableStatement(void 0,D.createVariableDeclarationList([C],2)),B=OHe(e,t);if(B.pos===0?v.insertNodeAtTopOfFile(o.file,F,!1):v.insertNodeBefore(o.file,B,F,!1),e.parent.kind===241)v.delete(o.file,e.parent);else{let q=D.createIdentifier(f);Kee(e)&&(q=D.createJsxExpression(void 0,q)),v.replaceNode(o.file,e,q)}}}let S=v.getChanges(),x=e.getSourceFile().fileName,A=KN(S,x,f,!0);return{renameFilename:x,renameLocation:A,edits:S};function w(C,P){if(C===void 0)return{variableType:C,initializer:P};if(!ms(P)&&!xs(P)||P.typeParameters)return{variableType:C,initializer:P};let F=s.getTypeAtLocation(e),B=Wp(s.getSignaturesOfType(F,0));if(!B)return{variableType:C,initializer:P};if(B.getTypeParameters())return{variableType:C,initializer:P};let q=[],W=!1;for(let Y of P.parameters)if(Y.type)q.push(Y);else{let R=s.getTypeAtLocation(Y);R===s.getAnyType()&&(W=!0),q.push(D.updateParameterDeclaration(Y,Y.modifiers,Y.dotDotDotToken,Y.name,Y.questionToken,Y.type||s.typeToTypeNode(R,t,1),Y.initializer))}if(W)return{variableType:C,initializer:P};if(C=void 0,xs(P))P=D.updateArrowFunction(P,g_(e)?uT(e):void 0,P.typeParameters,q,P.type||s.typeToTypeNode(B.getReturnType(),t,1),P.equalsGreaterThanToken,P.body);else{if(B&&B.thisParameter){let Y=Sl(q);if(!Y||Re(Y.name)&&Y.name.escapedText!==\"this\"){let R=s.getTypeOfSymbolAtLocation(B.thisParameter,e);q.splice(0,0,D.createParameterDeclaration(void 0,void 0,\"this\",void 0,s.typeToTypeNode(R,t,1)))}}P=D.updateFunctionExpression(P,g_(e)?uT(e):void 0,P.asteriskToken,P.name,P.typeParameters,q,P.type||s.typeToTypeNode(B.getReturnType(),t,1),P.body)}return{variableType:C,initializer:P}}}function xHe(e,t){let r;for(;e!==void 0&&e!==t;){if(wi(e)&&e.initializer===r&&pu(e.parent)&&e.parent.declarations.length>1)return e;r=e,e=e.parent}}function AHe(e){let t,r=e.symbol;if(r&&r.declarations)for(let i of r.declarations)(t===void 0||i.pos<t.pos)&&(t=i);return t}function CHe({type:e,declaration:t},{type:r,declaration:i}){return Cae(t,i,\"pos\",Es)||su(e.symbol?e.symbol.getName():\"\",r.symbol?r.symbol.getName():\"\")||Es(e.id,r.id)}function IHe(e,t,r){let i=D.createIdentifier(r);if(Yr(e)){let o=t.facts&32?D.createIdentifier(e.name.text):D.createThis();return D.createPropertyAccessExpression(o,i)}else return i}function LHe(e,t,r,i,o){let s=r!==void 0||t.length>0;if(Va(e)&&!s&&i.size===0)return{body:D.createBlock(e.statements,!0),returnValueProperty:void 0};let l,f=!1,d=D.createNodeArray(Va(e)?e.statements.slice(0):[ca(e)?e:D.createReturnStatement(vs(e))]);if(s||i.size){let m=On(d,g,ca).slice();if(s&&!o&&ca(e)){let v=Jee(t,r);v.length===1?m.push(D.createReturnStatement(v[0].name)):m.push(D.createReturnStatement(D.createObjectLiteralExpression(v)))}return{body:D.createBlock(m,!0),returnValueProperty:l}}else return{body:D.createBlock(d,!0),returnValueProperty:void 0};function g(m){if(!f&&j_(m)&&s){let v=Jee(t,r);return m.expression&&(l||(l=\"__return\"),v.unshift(D.createPropertyAssignment(l,$e(m.expression,g,ot)))),v.length===1?D.createReturnStatement(v[0].name):D.createReturnStatement(D.createObjectLiteralExpression(v))}else{let v=f;f=f||Ds(m)||Yr(m);let S=i.get(zo(m).toString()),x=S?cc(S):xn(m,g,Bh);return f=v,x}}}function kHe(e,t){return t.size?r(e):e;function r(i){let o=t.get(zo(i).toString());return o?cc(o):xn(i,r,Bh)}}function DHe(e){if(Ds(e)){let t=e.body;if(Va(t))return t.statements}else{if(Tp(e)||Li(e))return e.statements;if(Yr(e))return e.members;}return Je}function wHe(e,t){return wr(DHe(t),r=>r.pos>=e&&Ds(r)&&!Ec(r))}function RHe(e,t){let r=t.members;L.assert(r.length>0,\"Found no members\");let i,o=!0;for(let s of r){if(s.pos>e)return i||r[0];if(o&&!Na(s)){if(i!==void 0)return s;o=!1}i=s}return i===void 0?L.fail():i}function OHe(e,t){L.assert(!Yr(t));let r;for(let i=e;i!==t;i=i.parent)Wee(i)&&(r=i);for(let i=(r||e).parent;;i=i.parent){if(cSe(i)){let o;for(let s of i.statements){if(s.pos>e.pos)break;o=s}return!o&&CL(i)?(L.assert(pO(i.parent.parent),\"Grandparent isn't a switch statement\"),i.parent.parent):L.checkDefined(o,\"prevStatement failed to get set\")}L.assert(i!==t,\"Didn't encounter a block-like before encountering scope\")}}function Jee(e,t){let r=on(e,o=>D.createShorthandPropertyAssignment(o.symbol.name)),i=on(t,o=>D.createShorthandPropertyAssignment(o.symbol.name));return r===void 0?i:i===void 0?r:r.concat(i)}function jh(e){return ba(e)}function NHe(e,t){return jh(e.range)?{pos:Vo(e.range).getStart(t),end:To(e.range).getEnd()}:e.range}function PHe(e,t,r,i,o,s){let l=new Map,f=[],d=[],g=[],m=[],v=[],S=new Map,x=[],A,w=jh(e.range)?e.range.length===1&&Ol(e.range[0])?e.range[0].expression:void 0:e.range,C;if(w===void 0){let re=e.range,le=Vo(re).getStart(),_e=To(re).end;C=al(i,le,_e-le,vl.expressionExpected)}else o.getTypeAtLocation(w).flags&147456&&(C=hr(w,vl.uselessConstantType));for(let re of t){f.push({usages:new Map,typeParameterUsages:new Map,substitutions:new Map}),d.push(new Map),g.push([]);let le=[];C&&le.push(C),Yr(re)&&Yn(re)&&le.push(hr(re,vl.cannotExtractToJSClass)),xs(re)&&!Va(re.body)&&le.push(hr(re,vl.cannotExtractToExpressionArrowFunction)),m.push(le)}let P=new Map,F=jh(e.range)?D.createBlock(e.range):e.range,B=jh(e.range)?Vo(e.range):e.range,q=W(B);if(R(F),q&&!jh(e.range)&&!Sp(e.range)){let re=o.getContextualType(e.range);Y(re)}if(l.size>0){let re=new Map,le=0;for(let _e=B;_e!==void 0&&le<t.length;_e=_e.parent)if(_e===t[le]&&(re.forEach((ge,X)=>{f[le].typeParameterUsages.set(X,ge)}),le++),mH(_e))for(let ge of jy(_e)){let X=o.getTypeAtLocation(ge);l.has(X.id.toString())&&re.set(X.id.toString(),X)}L.assert(le===t.length,\"Should have iterated all scopes\")}if(v.length){let re=pH(t[0],t[0].parent)?t[0]:tm(t[0]);pa(re,fe)}for(let re=0;re<t.length;re++){let le=f[re];if(re>0&&(le.usages.size>0||le.typeParameterUsages.size>0)){let X=jh(e.range)?e.range[0]:e.range;m[re].push(hr(X,vl.cannotAccessVariablesFromNestedScopes))}e.facts&16&&Yr(t[re])&&g[re].push(hr(e.thisNode,vl.cannotExtractFunctionsContainingThisToMethod));let _e=!1,ge;if(f[re].usages.forEach(X=>{X.usage===2&&(_e=!0,X.symbol.flags&106500&&X.symbol.valueDeclaration&&cd(X.symbol.valueDeclaration,64)&&(ge=X.symbol.valueDeclaration))}),L.assert(jh(e.range)||x.length===0,\"No variable declarations expected if something was extracted\"),_e&&!jh(e.range)){let X=hr(e.range,vl.cannotWriteInExpression);g[re].push(X),m[re].push(X)}else if(ge&&re>0){let X=hr(ge,vl.cannotExtractReadonlyPropertyInitializerOutsideConstructor);g[re].push(X),m[re].push(X)}else if(A){let X=hr(A,vl.cannotExtractExportedEntity);g[re].push(X),m[re].push(X)}}return{target:F,usagesPerScope:f,functionErrorsPerScope:g,constantErrorsPerScope:m,exposedVariableDeclarations:x};function W(re){return!!jn(re,le=>mH(le)&&jy(le).length!==0)}function Y(re){let le=o.getSymbolWalker(()=>(s.throwIfCancellationRequested(),!0)),{visitedTypes:_e}=le.walkType(re);for(let ge of _e)ge.isTypeParameter()&&l.set(ge.id.toString(),ge)}function R(re,le=1){if(q){let _e=o.getTypeAtLocation(re);Y(_e)}if(Kl(re)&&re.symbol&&v.push(re),Iu(re))R(re.left,2),R(re.right);else if(mse(re))R(re.operand,2);else if(br(re)||Vs(re))pa(re,R);else if(Re(re)){if(!re.parent||Yu(re.parent)&&re!==re.parent.left||br(re.parent)&&re!==re.parent.expression)return;ie(re,le,Gm(re))}else pa(re,R)}function ie(re,le,_e){let ge=$(re,le,_e);if(ge)for(let X=0;X<t.length;X++){let Ve=d[X].get(ge);Ve&&f[X].substitutions.set(zo(re).toString(),Ve)}}function $(re,le,_e){let ge=Z(re);if(!ge)return;let X=$a(ge).toString(),Ve=P.get(X);if(Ve&&Ve>=le)return X;if(P.set(X,le),Ve){for(let Pe of f)Pe.usages.get(re.text)&&Pe.usages.set(re.text,{usage:le,symbol:ge,node:re});return X}let we=ge.getDeclarations(),ke=we&&wr(we,Pe=>Pe.getSourceFile()===i);if(ke&&!ON(r,ke.getStart(),ke.end)){if(e.facts&2&&le===2){let Pe=hr(re,vl.cannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators);for(let Ce of g)Ce.push(Pe);for(let Ce of m)Ce.push(Pe)}for(let Pe=0;Pe<t.length;Pe++){let Ce=t[Pe];if(o.resolveName(ge.name,Ce,ge.flags,!1)!==ge&&!d[Pe].has(X)){let Be=U(ge.exportSymbol||ge,Ce,_e);if(Be)d[Pe].set(X,Be);else if(_e){if(!(ge.flags&262144)){let Ne=hr(re,vl.typeWillNotBeVisibleInTheNewScope);g[Pe].push(Ne),m[Pe].push(Ne)}}else f[Pe].usages.set(re.text,{usage:le,symbol:ge,node:re})}}return X}}function fe(re){if(re===e.range||jh(e.range)&&e.range.indexOf(re)>=0)return;let le=Re(re)?Z(re):o.getSymbolAtLocation(re);if(le){let _e=wr(v,ge=>ge.symbol===le);if(_e)if(wi(_e)){let ge=_e.symbol.id.toString();S.has(ge)||(x.push(_e),S.set(ge,!0))}else A=A||_e}pa(re,fe)}function Z(re){return re.parent&&xf(re.parent)&&re.parent.name===re?o.getShorthandAssignmentValueSymbol(re.parent):o.getSymbolAtLocation(re)}function U(re,le,_e){if(!re)return;let ge=re.getDeclarations();if(ge&&ge.some(Ve=>Ve.parent===le))return D.createIdentifier(re.name);let X=U(re.parent,le,_e);if(X!==void 0)return _e?D.createQualifiedName(X,D.createIdentifier(re.name)):D.createPropertyAccessExpression(X,re.name)}}function MHe(e){return jn(e,t=>t.parent&&sSe(t)&&!ar(t.parent))}function sSe(e){let{parent:t}=e;switch(t.kind){case 302:return!1}switch(e.kind){case 10:return t.kind!==269&&t.kind!==273;case 227:case 203:case 205:return!1;case 79:return t.kind!==205&&t.kind!==273&&t.kind!==278}return!0}function cSe(e){switch(e.kind){case 238:case 308:case 265:case 292:return!0;default:return!1}}function Kee(e){return qee(e)||(Hg(e)||FS(e)||BS(e))&&(Hg(e.parent)||BS(e.parent))}function qee(e){return yo(e)&&e.parent&&Sp(e.parent)}var fx,_x,px,vl,Xee,FHe=gt({\"src/services/refactors/extractSymbol.ts\"(){\"use strict\";Fr(),Qm(),fx=\"Extract Symbol\",_x={name:\"Extract Constant\",description:uo(_.Extract_constant),kind:\"refactor.extract.constant\"},px={name:\"Extract Function\",description:uo(_.Extract_function),kind:\"refactor.extract.function\"},Vh(fx,{kinds:[_x.kind,px.kind],getEditsForAction:oSe,getAvailableActions:aSe}),(e=>{function t(r){return{message:r,code:0,category:3,key:r}}e.cannotExtractRange=t(\"Cannot extract range.\"),e.cannotExtractImport=t(\"Cannot extract import statement.\"),e.cannotExtractSuper=t(\"Cannot extract super call.\"),e.cannotExtractJSDoc=t(\"Cannot extract JSDoc.\"),e.cannotExtractEmpty=t(\"Cannot extract empty range.\"),e.expressionExpected=t(\"expression expected.\"),e.uselessConstantType=t(\"No reason to extract constant of type.\"),e.statementOrExpressionExpected=t(\"Statement or expression expected.\"),e.cannotExtractRangeContainingConditionalBreakOrContinueStatements=t(\"Cannot extract range containing conditional break or continue statements.\"),e.cannotExtractRangeContainingConditionalReturnStatement=t(\"Cannot extract range containing conditional return statement.\"),e.cannotExtractRangeContainingLabeledBreakOrContinueStatementWithTargetOutsideOfTheRange=t(\"Cannot extract range containing labeled break or continue with target outside of the range.\"),e.cannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators=t(\"Cannot extract range containing writes to references located outside of the target range in generators.\"),e.typeWillNotBeVisibleInTheNewScope=t(\"Type will not visible in the new scope.\"),e.functionWillNotBeVisibleInTheNewScope=t(\"Function will not visible in the new scope.\"),e.cannotExtractIdentifier=t(\"Select more than a single identifier.\"),e.cannotExtractExportedEntity=t(\"Cannot extract exported declaration\"),e.cannotWriteInExpression=t(\"Cannot write back side-effects when extracting an expression\"),e.cannotExtractReadonlyPropertyInitializerOutsideConstructor=t(\"Cannot move initialization of read-only class property outside of the constructor\"),e.cannotExtractAmbientBlock=t(\"Cannot extract code from ambient contexts\"),e.cannotAccessVariablesFromNestedScopes=t(\"Cannot access variables from nested scopes\"),e.cannotExtractToJSClass=t(\"Cannot extract constant to a class scope in JS\"),e.cannotExtractToExpressionArrowFunction=t(\"Cannot extract constant to an arrow function without a block\"),e.cannotExtractFunctionsContainingThisToMethod=t(\"Cannot extract functions containing this to method\")})(vl||(vl={})),Xee=(e=>(e[e.None=0]=\"None\",e[e.HasReturn=1]=\"HasReturn\",e[e.IsGenerator=2]=\"IsGenerator\",e[e.IsAsyncFunction=4]=\"IsAsyncFunction\",e[e.UsesThis=8]=\"UsesThis\",e[e.UsesThisInFunction=16]=\"UsesThisInFunction\",e[e.InStaticRegion=32]=\"InStaticRegion\",e))(Xee||{})}}),lSe={};Mo(lSe,{Messages:()=>vl,RangeFacts:()=>Xee,getRangeToExtract:()=>Hee,getRefactorActionsToExtractSymbol:()=>aSe,getRefactorEditsToExtractSymbol:()=>oSe});var GHe=gt({\"src/services/_namespaces/ts.refactor.extractSymbol.ts\"(){\"use strict\";FHe()}}),MP,LG,kG,BHe=gt({\"src/services/refactors/generateGetAccessorAndSetAccessor.ts\"(){\"use strict\";Fr(),Qm(),MP=\"Generate 'get' and 'set' accessors\",LG=_.Generate_get_and_set_accessors.message,kG={name:MP,description:LG,kind:\"refactor.rewrite.property.generateAccessors\"},Vh(MP,{kinds:[kG.kind],getEditsForAction:function(t,r){if(!t.endPosition)return;let i=gu.getAccessorConvertiblePropertyAtPosition(t.file,t.program,t.startPosition,t.endPosition);L.assert(i&&!$m(i),\"Expected applicable refactor info\");let o=gu.generateAccessorFromProperty(t.file,t.program,t.startPosition,t.endPosition,t,r);if(!o)return;let s=t.file.fileName,l=i.renameAccessor?i.accessorName:i.fieldName,d=(Re(l)?0:-1)+KN(o,s,l.text,ha(i.declaration));return{renameFilename:s,renameLocation:d,edits:o}},getAvailableActions(e){if(!e.endPosition)return Je;let t=gu.getAccessorConvertiblePropertyAtPosition(e.file,e.program,e.startPosition,e.endPosition,e.triggerReason===\"invoked\");return t?$m(t)?e.preferences.provideRefactorNotApplicableReason?[{name:MP,description:LG,actions:[{...kG,notApplicableReason:t.error}]}]:Je:[{name:MP,description:LG,actions:[kG]}]:Je}})}}),UHe={},VHe=gt({\"src/services/_namespaces/ts.refactor.generateGetAccessorAndSetAccessor.ts\"(){\"use strict\";BHe()}});function jHe(e){let t=uSe(e);if(t&&!$m(t))return{renameFilename:void 0,renameLocation:void 0,edits:nr.ChangeTracker.with(e,i=>WHe(e.file,i,t.declaration,t.returnTypeNode))}}function HHe(e){let t=uSe(e);return t?$m(t)?e.preferences.provideRefactorNotApplicableReason?[{name:FP,description:DG,actions:[{...GP,notApplicableReason:t.error}]}]:Je:[{name:FP,description:DG,actions:[GP]}]:Je}function WHe(e,t,r,i){let o=Yo(r,21,e),s=xs(r)&&o===void 0,l=s?Vo(r.parameters):o;l&&(s&&(t.insertNodeBefore(e,l,D.createToken(20)),t.insertNodeAfter(e,l,D.createToken(21))),t.insertNodeAt(e,l.end,i,{prefix:\": \"}))}function uSe(e){if(Yn(e.file)||!pv(GP.kind,e.kind))return;let t=Vi(e.file,e.startPosition),r=jn(t,l=>Va(l)||l.parent&&xs(l.parent)&&(l.kind===38||l.parent.body===l)?\"quit\":zHe(l));if(!r||!r.body||r.type)return{error:uo(_.Return_type_must_be_inferred_from_a_function)};let i=e.program.getTypeChecker(),o=JHe(i,r);if(!o)return{error:uo(_.Could_not_determine_function_return_type)};let s=i.typeToTypeNode(o,r,1);if(s)return{declaration:r,returnTypeNode:s}}function zHe(e){switch(e.kind){case 259:case 215:case 216:case 171:return!0;default:return!1}}function JHe(e,t){if(e.isImplementationOfOverload(t)){let i=e.getTypeAtLocation(t).getCallSignatures();if(i.length>1)return e.getUnionType(Zi(i,o=>o.getReturnType()))}let r=e.getSignatureFromDeclaration(t);if(r)return e.getReturnTypeOfSignature(r)}var FP,DG,GP,KHe=gt({\"src/services/refactors/inferFunctionReturnType.ts\"(){\"use strict\";Fr(),Qm(),FP=\"Infer function return type\",DG=_.Infer_function_return_type.message,GP={name:FP,description:DG,kind:\"refactor.rewrite.function.returnType\"},Vh(FP,{kinds:[GP.kind],getEditsForAction:jHe,getAvailableActions:HHe})}}),qHe={},XHe=gt({\"src/services/_namespaces/ts.refactor.inferFunctionReturnType.ts\"(){\"use strict\";KHe()}}),Ok={};Mo(Ok,{addOrRemoveBracesToArrowFunction:()=>lje,convertArrowFunctionOrFunctionExpression:()=>Eje,convertParamsToDestructuredObject:()=>Uje,convertStringOrTemplateLiteral:()=>Yje,convertToOptionalChainExpression:()=>lHe,doChangeNamedToNamespaceOrDefault:()=>m1e,extractSymbol:()=>lSe,generateGetAccessorAndSetAccessor:()=>UHe,getApplicableRefactors:()=>oVe,getEditsForRefactor:()=>sVe,inferFunctionReturnType:()=>qHe,isRefactorErrorInfo:()=>$m,refactorKindBeginsWith:()=>pv,registerRefactor:()=>Vh});var Qm=gt({\"src/services/_namespaces/ts.refactor.ts\"(){\"use strict\";cVe(),mVe(),bVe(),CVe(),IVe(),nje(),uje(),Tje(),Vje(),$je(),uHe(),GHe(),VHe(),XHe()}});function YHe(e,t,r,i){let o=_7(ef(t,r));if(fSe(o)){let s=$He(o,e.getTypeChecker(),t,e,i);if(s)return s}return wG(_.You_cannot_rename_this_element)}function $He(e,t,r,i,o){let s=t.getSymbolAtLocation(e);if(!s){if(es(e)){let S=f7(e,t);if(S&&(S.flags&128||S.flags&1048576&&Ji(S.types,x=>!!(x.flags&128))))return Yee(e.text,e.text,\"string\",\"\",e,r)}else if(FX(e)){let S=Qc(e);return Yee(S,S,\"label\",\"\",e,r)}return}let{declarations:l}=s;if(!l||l.length===0)return;if(l.some(S=>QHe(i,S)))return wG(_.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library);if(Re(e)&&e.escapedText===\"default\"&&s.parent&&s.parent.flags&1536)return;if(es(e)&&oR(e))return o.allowRenameOfImportPath?eWe(e,r,s):void 0;let f=ZHe(r,s,t,o);if(f)return wG(f);let d=$g.getSymbolKind(t,s,e),g=Zhe(e)||yf(e)&&e.parent.kind===164?u_(l_(e)):void 0,m=g||t.symbolToString(s),v=g||t.getFullyQualifiedName(s);return Yee(m,v,d,$g.getSymbolModifiers(t,s),e,r)}function QHe(e,t){let r=t.getSourceFile();return e.isSourceFileDefaultLibrary(r)&&Gc(r.fileName,\".d.ts\")}function ZHe(e,t,r,i){if(!i.providePrefixAndSuffixTextForRename&&t.flags&2097152){let l=t.declarations&&wr(t.declarations,f=>$u(f));l&&!l.propertyName&&(t=r.getAliasedSymbol(t))}let{declarations:o}=t;if(!o)return;let s=dSe(e.path);if(s===void 0)return vt(o,l=>dge(l.getSourceFile().path))?_.You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder:void 0;for(let l of o){let f=dSe(l.getSourceFile().path);if(f){let d=Math.min(s.length,f.length);for(let g=0;g<=d;g++)if(su(s[g],f[g])!==0)return _.You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder}}}function dSe(e){let t=Ou(e),r=t.lastIndexOf(\"node_modules\");if(r!==-1)return t.slice(0,r+2)}function eWe(e,t,r){if(!fl(e.text))return wG(_.You_cannot_rename_a_module_via_a_global_import);let i=r.declarations&&wr(r.declarations,Li);if(!i)return;let o=Oc(e.text,\"/index\")||Oc(e.text,\"/index.js\")?void 0:Iae(ld(i.fileName),\"/index\"),s=o===void 0?i.fileName:o,l=o===void 0?\"module\":\"directory\",f=e.text.lastIndexOf(\"/\")+1,d=il(e.getStart(t)+1+f,e.text.length-f);return{canRename:!0,fileToRename:s,kind:l,displayName:s,fullDisplayName:s,kindModifiers:\"\",triggerSpan:d}}function Yee(e,t,r,i,o,s){return{canRename:!0,fileToRename:void 0,kind:r,displayName:e,fullDisplayName:t,kindModifiers:i,triggerSpan:tWe(o,s)}}function wG(e){return{canRename:!1,localizedErrorMessage:uo(e)}}function tWe(e,t){let r=e.getStart(t),i=e.getWidth(t);return es(e)&&(r+=1,i-=2),il(r,i)}function fSe(e){switch(e.kind){case 79:case 80:case 10:case 14:case 108:return!0;case 8:return c7(e);default:return!1}}var nWe=gt({\"src/services/rename.ts\"(){\"use strict\";Fr()}}),RG={};Mo(RG,{getRenameInfo:()=>YHe,nodeIsEligibleForRename:()=>fSe});var rWe=gt({\"src/services/_namespaces/ts.Rename.ts\"(){\"use strict\";nWe()}});function iWe(e,t,r,i,o){let s=e.getTypeChecker(),l=p7(t,r);if(!l)return;let f=!!i&&i.kind===\"characterTyped\";if(f&&(n1(t,r,l)||Kg(t,r)))return;let d=!!i&&i.kind===\"invoked\",g=vWe(l,r,t,s,d);if(!g)return;o.throwIfCancellationRequested();let m=aWe(g,s,t,l,f);return o.throwIfCancellationRequested(),m?s.runWithCancellationToken(o,v=>m.kind===0?vSe(m.candidates,m.resolvedSignature,g,t,v):EWe(m.symbol,g,t,v)):Cu(t)?sWe(g,e,o):void 0}function aWe({invocation:e,argumentCount:t},r,i,o,s){switch(e.kind){case 0:{if(s&&!oWe(o,e.node,i))return;let l=[],f=r.getResolvedSignatureForSignatureHelp(e.node,l,t);return l.length===0?void 0:{kind:0,candidates:l,resolvedSignature:f}}case 1:{let{called:l}=e;if(s&&!_Se(o,i,Re(l)?l.parent:l))return;let f=XX(l,t,r);if(f.length!==0)return{kind:0,candidates:f,resolvedSignature:Vo(f)};let d=r.getSymbolAtLocation(l);return d&&{kind:1,symbol:d}}case 2:return{kind:0,candidates:[e.signature],resolvedSignature:e.signature};default:return L.assertNever(e)}}function oWe(e,t,r){if(!Ih(t))return!1;let i=t.getChildren(r);switch(e.kind){case 20:return ya(i,e);case 27:{let o=d7(e);return!!o&&ya(i,o)}case 29:return _Se(e,r,t.expression);default:return!1}}function sWe(e,t,r){if(e.invocation.kind===2)return;let i=gSe(e.invocation),o=br(i)?i.name.text:void 0,s=t.getTypeChecker();return o===void 0?void 0:ks(t.getSourceFiles(),l=>ks(l.getNamedDeclarations().get(o),f=>{let d=f.symbol&&s.getTypeOfSymbolAtLocation(f.symbol,f),g=d&&d.getCallSignatures();if(g&&g.length)return s.runWithCancellationToken(r,m=>vSe(g,g[0],e,l,m,!0))}))}function _Se(e,t,r){let i=e.getFullStart(),o=e.parent;for(;o;){let s=el(i,t,o,!0);if(s)return Od(r,s);o=o.parent}return L.fail(\"Could not find preceding token\")}function cWe(e,t,r){let i=mSe(e,t,r);return!i||i.isTypeParameterList||i.invocation.kind!==0?void 0:{invocation:i.invocation.node,argumentCount:i.argumentCount,argumentIndex:i.argumentIndex}}function pSe(e,t,r){let i=lWe(e,r);if(!i)return;let{list:o,argumentIndex:s}=i,l=mWe(o,n1(r,t,e));s!==0&&L.assertLessThan(s,l);let f=gWe(o,r);return{list:o,argumentIndex:s,argumentCount:l,argumentsSpan:f}}function lWe(e,t){if(e.kind===29||e.kind===20)return{list:bWe(e.parent,e,t),argumentIndex:0};{let r=d7(e);return r&&{list:r,argumentIndex:pWe(r,e)}}}function mSe(e,t,r){let{parent:i}=e;if(Ih(i)){let o=i,s=pSe(e,t,r);if(!s)return;let{list:l,argumentIndex:f,argumentCount:d,argumentsSpan:g}=s;return{isTypeParameterList:!!i.typeArguments&&i.typeArguments.pos===l.pos,invocation:{kind:0,node:o},argumentsSpan:g,argumentIndex:f,argumentCount:d}}else{if(IS(e)&&PT(i))return FN(e,t,r)?Qee(i,0,r):void 0;if(f2(e)&&i.parent.kind===212){let o=i,s=o.parent;L.assert(o.kind===225);let l=FN(e,t,r)?0:1;return Qee(s,l,r)}else if(xL(i)&&PT(i.parent.parent)){let o=i,s=i.parent.parent;if(Iz(e)&&!FN(e,t,r))return;let l=o.parent.templateSpans.indexOf(o),f=hWe(l,e,t,r);return Qee(s,f,r)}else if(Au(i)){let o=i.attributes.pos,s=xo(r.text,i.attributes.end,!1);return{isTypeParameterList:!1,invocation:{kind:0,node:i},argumentsSpan:il(o,s-o),argumentIndex:0,argumentCount:1}}else{let o=YX(e,r);if(o){let{called:s,nTypeArguments:l}=o,f={kind:1,called:s},d=Wc(s.getStart(r),e.end);return{isTypeParameterList:!0,invocation:f,argumentsSpan:d,argumentIndex:l,argumentCount:l+1}}return}}}function uWe(e,t,r,i){return dWe(e,t,r,i)||mSe(e,t,r)}function hSe(e){return ar(e.parent)?hSe(e.parent):e}function $ee(e){return ar(e.left)?$ee(e.left)+1:2}function dWe(e,t,r,i){let o=fWe(e,r,t,i);if(!o)return;let{contextualType:s,argumentIndex:l,argumentCount:f,argumentsSpan:d}=o,g=s.getNonNullableType(),m=g.symbol;if(m===void 0)return;let v=Os(g.getCallSignatures());return v===void 0?void 0:{isTypeParameterList:!1,invocation:{kind:2,signature:v,node:e,symbol:_We(m)},argumentsSpan:d,argumentIndex:l,argumentCount:f}}function fWe(e,t,r,i){if(e.kind!==20&&e.kind!==27)return;let{parent:o}=e;switch(o.kind){case 214:case 171:case 215:case 216:let s=pSe(e,r,t);if(!s)return;let{argumentIndex:l,argumentCount:f,argumentsSpan:d}=s,g=Nc(o)?i.getContextualTypeForObjectLiteralElement(o):i.getContextualType(o);return g&&{contextualType:g,argumentIndex:l,argumentCount:f,argumentsSpan:d};case 223:{let m=hSe(o),v=i.getContextualType(m),S=e.kind===20?0:$ee(o)-1,x=$ee(m);return v&&{contextualType:v,argumentIndex:S,argumentCount:x,argumentsSpan:Du(o)}}default:return}}function _We(e){return e.name===\"__type\"&&ks(e.declarations,t=>{var r;return Jm(t)?(r=zr(t.parent,$p))==null?void 0:r.symbol:void 0})||e}function pWe(e,t){let r=0;for(let i of e.getChildren()){if(i===t)break;i.kind!==27&&r++}return r}function mWe(e,t){let r=e.getChildren(),i=Oy(r,o=>o.kind!==27);return!t&&r.length>0&&To(r).kind===27&&i++,i}function hWe(e,t,r,i){return L.assert(r>=t.getStart(),\"Assumed 'position' could not occur before node.\"),rse(t)?FN(t,r,i)?0:e+2:e+1}function Qee(e,t,r){let i=IS(e.template)?1:e.template.templateSpans.length+1;return t!==0&&L.assertLessThan(t,i),{isTypeParameterList:!1,invocation:{kind:0,node:e},argumentsSpan:yWe(e,r),argumentIndex:t,argumentCount:i}}function gWe(e,t){let r=e.getFullStart(),i=xo(t.text,e.getEnd(),!1);return il(r,i-r)}function yWe(e,t){let r=e.template,i=r.getStart(),o=r.getEnd();return r.kind===225&&To(r.templateSpans).literal.getFullWidth()===0&&(o=xo(t.text,o,!1)),il(i,o-i)}function vWe(e,t,r,i,o){for(let s=e;!Li(s)&&(o||!Va(s));s=s.parent){L.assert(Od(s.parent,s),\"Not a subspan\",()=>`Child: ${L.formatSyntaxKind(s.kind)}, parent: ${L.formatSyntaxKind(s.parent.kind)}`);let l=uWe(s,t,r,i);if(l)return l}}function bWe(e,t,r){let i=e.getChildren(r),o=i.indexOf(t);return L.assert(o>=0&&i.length>o+1),i[o+1]}function gSe(e){return e.kind===0?P6(e.node):e.called}function ySe(e){return e.kind===0?e.node:e.kind===1?e.called:e.node}function vSe(e,t,{isTypeParameterList:r,argumentCount:i,argumentsSpan:o,invocation:s,argumentIndex:l},f,d,g){var m;let v=ySe(s),S=s.kind===2?s.symbol:d.getSymbolAtLocation(gSe(s))||g&&((m=t.declaration)==null?void 0:m.symbol),x=S?ok(d,S,g?f:void 0,void 0):Je,A=on(e,B=>SWe(B,x,r,d,v,f));l!==0&&L.assertLessThan(l,i);let w=0,C=0;for(let B=0;B<A.length;B++){let q=A[B];if(e[B]===t&&(w=C,q.length>1)){let W=0;for(let Y of q){if(Y.isVariadic||Y.parameters.length>=i){w=C+W;break}W++}}C+=q.length}L.assert(w!==-1);let P={items:BD(A,Ks),applicableSpan:o,selectedItemIndex:w,argumentIndex:l,argumentCount:i},F=P.items[w];if(F.isVariadic){let B=Yc(F.parameters,q=>!!q.isRest);-1<B&&B<F.parameters.length-1?P.argumentIndex=F.parameters.length:P.argumentIndex=Math.min(P.argumentIndex,F.parameters.length-1)}return P}function EWe(e,{argumentCount:t,argumentsSpan:r,invocation:i,argumentIndex:o},s,l){let f=l.getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(e);return f?{items:[TWe(e,f,l,ySe(i),s)],applicableSpan:r,selectedItemIndex:0,argumentIndex:o,argumentCount:t}:void 0}function TWe(e,t,r,i,o){let s=ok(r,e),l=rE(),f=t.map(v=>bSe(v,r,i,o,l)),d=e.getDocumentationComment(r),g=e.getJsDocTags(r);return{isVariadic:!1,prefixDisplayParts:[...s,Yl(29)],suffixDisplayParts:[Yl(31)],separatorDisplayParts:Zee,parameters:f,documentation:d,tags:g}}function SWe(e,t,r,i,o,s){let l=(r?AWe:CWe)(e,i,o,s);return on(l,({isVariadic:f,parameters:d,prefix:g,suffix:m})=>{let v=[...t,...g],S=[...m,...xWe(e,o,i)],x=e.getDocumentationComment(i),A=e.getJsDocTags();return{isVariadic:f,prefixDisplayParts:v,suffixDisplayParts:S,separatorDisplayParts:Zee,parameters:d,documentation:x,tags:A}})}function xWe(e,t,r){return uv(i=>{i.writePunctuation(\":\"),i.writeSpace(\" \");let o=r.getTypePredicateOfSignature(e);o?r.writeTypePredicate(o,t,void 0,i):r.writeType(r.getReturnTypeOfSignature(e),t,void 0,i)})}function AWe(e,t,r,i){let o=(e.target||e).typeParameters,s=rE(),l=(o||Je).map(d=>bSe(d,t,r,i,s)),f=e.thisParameter?[t.symbolToParameterDeclaration(e.thisParameter,r,Nk)]:[];return t.getExpandedParameters(e).map(d=>{let g=D.createNodeArray([...f,...on(d,v=>t.symbolToParameterDeclaration(v,r,Nk))]),m=uv(v=>{s.writeList(2576,g,i,v)});return{isVariadic:!1,parameters:l,prefix:[Yl(29)],suffix:[Yl(31),...m]}})}function CWe(e,t,r,i){let o=rE(),s=uv(d=>{if(e.typeParameters&&e.typeParameters.length){let g=D.createNodeArray(e.typeParameters.map(m=>t.typeParameterToDeclaration(m,r,Nk)));o.writeList(53776,g,i,d)}}),l=t.getExpandedParameters(e),f=t.hasEffectiveRestParameter(e)?l.length===1?d=>!0:d=>{var g;return!!(d.length&&((g=zr(d[d.length-1],Zp))==null?void 0:g.links.checkFlags)&32768)}:d=>!1;return l.map(d=>({isVariadic:f(d),parameters:d.map(g=>IWe(g,t,r,i,o)),prefix:[...s,Yl(20)],suffix:[Yl(21)]}))}function IWe(e,t,r,i,o){let s=uv(d=>{let g=t.symbolToParameterDeclaration(e,r,Nk);o.writeNode(4,g,i,d)}),l=t.isOptionalParameter(e.valueDeclaration),f=Zp(e)&&!!(e.links.checkFlags&32768);return{name:e.name,documentation:e.getDocumentationComment(t),displayParts:s,isOptional:l,isRest:f}}function bSe(e,t,r,i,o){let s=uv(l=>{let f=t.typeParameterToDeclaration(e,r,Nk);o.writeNode(4,f,i,l)});return{name:e.symbol.name,documentation:e.symbol.getDocumentationComment(t),displayParts:s,isOptional:!1,isRest:!1}}var Nk,Zee,LWe=gt({\"src/services/signatureHelp.ts\"(){\"use strict\";Fr(),Nk=70246400,Zee=[Yl(27),Qs()]}}),BP={};Mo(BP,{getArgumentInfoForCompletions:()=>cWe,getSignatureHelpItems:()=>iWe});var kWe=gt({\"src/services/_namespaces/ts.SignatureHelp.ts\"(){\"use strict\";LWe()}});function DWe(e,t){var r,i;let o={textSpan:Wc(t.getFullStart(),t.getEnd())},s=t;e:for(;;){let d=RWe(s);if(!d.length)break;for(let g=0;g<d.length;g++){let m=d[g-1],v=d[g],S=d[g+1];if(gT(v,t,!0)>e)break e;let x=Wp(eb(t.text,v.end));if(x&&x.kind===2&&f(x.pos,x.end),wWe(t,e,v)){if(Hj(v)&&Ds(s)&&!Bf(v.getStart(t),v.getEnd(),t)&&l(v.getStart(t),v.getEnd()),Va(v)||xL(v)||f2(v)||Iz(v)||m&&f2(m)||pu(v)&&Bc(s)||A2(v)&&pu(s)||wi(v)&&A2(s)&&d.length===1||UT(v)||X0(v)||LL(v)){s=v;break}if(xL(s)&&S&&o6(S)){let P=v.getFullStart()-2,F=S.getStart()+1;l(P,F)}let A=A2(v)&&OWe(m)&&NWe(S)&&!Bf(m.getStart(),S.getStart(),t),w=A?m.getEnd():v.getStart(),C=A?S.getStart():PWe(t,v);if(Kd(v)&&((r=v.jsDoc)!=null&&r.length)&&l(Vo(v.jsDoc).getStart(),C),A2(v)){let P=v.getChildren()[0];P&&Kd(P)&&((i=P.jsDoc)!=null&&i.length)&&P.getStart()!==v.pos&&(w=Math.min(w,Vo(P.jsDoc).getStart()))}l(w,C),(yo(v)||AA(v))&&l(w+1,C-1),s=v;break}if(g===d.length-1)break e}}return o;function l(d,g){if(d!==g){let m=Wc(d,g);(!o||!J2(m,o.textSpan)&&Noe(m,e))&&(o={textSpan:m,...o&&{parent:o}})}}function f(d,g){l(d,g);let m=d;for(;t.text.charCodeAt(m)===47;)m++;l(m,g)}}function wWe(e,t,r){return L.assert(r.pos<=t),t<r.end?!0:r.getEnd()===t?ef(e,t).pos<r.end:!1}function RWe(e){var t;if(Li(e))return Pk(e.getChildAt(0).getChildren(),ESe);if(EL(e)){let[r,...i]=e.getChildren(),o=L.checkDefined(i.pop());L.assertEqual(r.kind,18),L.assertEqual(o.kind,19);let s=Pk(i,f=>f===e.readonlyToken||f.kind===146||f===e.questionToken||f.kind===57),l=Pk(s,({kind:f})=>f===22||f===165||f===23);return[r,Mk(OG(l,({kind:f})=>f===58)),o]}if($d(e)){let r=Pk(e.getChildren(),l=>l===e.name||ya(e.modifiers,l)),i=((t=r[0])==null?void 0:t.kind)===323?r[0]:void 0,o=i?r.slice(1):r,s=OG(o,({kind:l})=>l===58);return i?[i,Mk(s)]:s}if(ha(e)){let r=Pk(e.getChildren(),o=>o===e.dotDotDotToken||o===e.name),i=Pk(r,o=>o===r[0]||o===e.questionToken);return OG(i,({kind:o})=>o===63)}return Wo(e)?OG(e.getChildren(),({kind:r})=>r===63):e.getChildren()}function Pk(e,t){let r=[],i;for(let o of e)t(o)?(i=i||[],i.push(o)):(i&&(r.push(Mk(i)),i=void 0),r.push(o));return i&&r.push(Mk(i)),r}function OG(e,t,r=!0){if(e.length<2)return e;let i=Yc(e,t);if(i===-1)return e;let o=e.slice(0,i),s=e[i],l=To(e),f=r&&l.kind===26,d=e.slice(i+1,f?e.length-1:void 0),g=WD([o.length?Mk(o):void 0,s,d.length?Mk(d):void 0]);return f?g.concat(l):g}function Mk(e){return L.assertGreaterThanOrEqual(e.length,1),om(fm.createSyntaxList(e),e[0].pos,To(e).end)}function OWe(e){let t=e&&e.kind;return t===18||t===22||t===20||t===283}function NWe(e){let t=e&&e.kind;return t===19||t===23||t===21||t===284}function PWe(e,t){switch(t.kind){case 344:case 341:case 351:case 349:case 346:return e.getLineEndOfPosition(t.getStart());default:return t.getEnd()}}var ESe,MWe=gt({\"src/services/smartSelection.ts\"(){\"use strict\";Fr(),ESe=Kp(gl,Nl)}}),ete={};Mo(ete,{getSmartSelectionRange:()=>DWe});var FWe=gt({\"src/services/_namespaces/ts.SmartSelectionRange.ts\"(){\"use strict\";MWe()}});function TSe(e,t,r){let i=SSe(e,t,r);if(i!==\"\")return i;let o=XI(t);return o&32?nc(t,228)?\"local class\":\"class\":o&384?\"enum\":o&524288?\"type\":o&64?\"interface\":o&262144?\"type parameter\":o&8?\"enum member\":o&2097152?\"alias\":o&1536?\"module\":i}function SSe(e,t,r){let i=e.getRootSymbols(t);if(i.length===1&&Vo(i).flags&8192&&e.getTypeOfSymbolAtLocation(t,r).getNonNullableType().getCallSignatures().length!==0)return\"method\";if(e.isUndefinedSymbol(t))return\"var\";if(e.isArgumentsSymbol(t))return\"local var\";if(r.kind===108&&ot(r)||mS(r))return\"parameter\";let o=XI(t);if(o&3)return dY(t)?\"parameter\":t.valueDeclaration&&kh(t.valueDeclaration)?\"const\":mn(t.declarations,II)?\"let\":CSe(t)?\"local var\":\"var\";if(o&16)return CSe(t)?\"local function\":\"function\";if(o&32768)return\"getter\";if(o&65536)return\"setter\";if(o&8192)return\"method\";if(o&16384)return\"constructor\";if(o&131072)return\"index\";if(o&4){if(o&33554432&&t.links.checkFlags&6){let s=mn(e.getRootSymbols(t),l=>{if(l.getFlags()&98311)return\"property\"});return s||(e.getTypeOfSymbolAtLocation(t,r).getCallSignatures().length?\"method\":\"property\")}return\"property\"}return\"\"}function xSe(e){if(e.declarations&&e.declarations.length){let[t,...r]=e.declarations,i=Fn(r)&&H7(t)&&vt(r,s=>!H7(s))?8192:0,o=rk(t,i);if(o)return o.split(\",\")}return[]}function GWe(e,t){if(!t)return\"\";let r=new Set(xSe(t));if(t.flags&2097152){let i=e.getAliasedSymbol(t);i!==t&&mn(xSe(i),o=>{r.add(o)})}return t.flags&16777216&&r.add(\"optional\"),r.size>0?lo(r.values()).join(\",\"):\"\"}function ASe(e,t,r,i,o,s=ZT(o),l){var f;let d=[],g=[],m=[],v=XI(t),S=s&1?SSe(e,t,o):\"\",x=!1,A=o.kind===108&&F6(o)||mS(o),w,C,P,F=!1;if(o.kind===108&&!A)return{displayParts:[_d(108)],documentation:[],symbolKind:\"primitive type\",tags:void 0};if(S!==\"\"||v&32||v&2097152){if(S===\"getter\"||S===\"setter\"){let le=wr(t.declarations,_e=>_e.name===o);if(le)switch(le.kind){case 174:S=\"getter\";break;case 175:S=\"setter\";break;case 169:S=\"accessor\";break;default:L.assertNever(le)}else S=\"property\"}let U;if(w=A?e.getTypeAtLocation(o):e.getTypeOfSymbolAtLocation(t,o),o.parent&&o.parent.kind===208){let le=o.parent.name;(le===o||le&&le.getFullWidth()===0)&&(o=o.parent)}let re;if(Ih(o)?re=o:(NX(o)||ZL(o)||o.parent&&(Au(o.parent)||PT(o.parent))&&Ia(t.valueDeclaration))&&(re=o.parent),re){U=e.getResolvedSignature(re);let le=re.kind===211||Pa(re)&&re.expression.kind===106,_e=le?w.getConstructSignatures():w.getCallSignatures();if(U&&!ya(_e,U.target)&&!ya(_e,U)&&(U=_e.length?_e[0]:void 0),U){switch(le&&v&32?(S=\"constructor\",ie(w.symbol,S)):v&2097152?(S=\"alias\",$(S),d.push(Qs()),le&&(U.flags&4&&(d.push(_d(126)),d.push(Qs())),d.push(_d(103)),d.push(Qs())),R(t)):ie(t,S),S){case\"JSX attribute\":case\"property\":case\"var\":case\"const\":case\"let\":case\"parameter\":case\"local var\":d.push(Yl(58)),d.push(Qs()),!(Ur(w)&16)&&w.symbol&&(si(d,ok(e,w.symbol,i,void 0,5)),d.push(K2())),le&&(U.flags&4&&(d.push(_d(126)),d.push(Qs())),d.push(_d(103)),d.push(Qs())),fe(U,_e,262144);break;default:fe(U,_e)}x=!0,F=_e.length>1}}else if(VX(o)&&!(v&98304)||o.kind===135&&o.parent.kind===173){let le=o.parent;if(t.declarations&&wr(t.declarations,ge=>ge===(o.kind===135?le.parent:le))){let ge=le.kind===173?w.getNonNullableType().getConstructSignatures():w.getNonNullableType().getCallSignatures();e.isImplementationOfOverload(le)?U=ge[0]:U=e.getSignatureFromDeclaration(le),le.kind===173?(S=\"constructor\",ie(w.symbol,S)):ie(le.kind===176&&!(w.symbol.flags&2048||w.symbol.flags&4096)?w.symbol:t,S),U&&fe(U,ge),x=!0,F=ge.length>1}}}if(v&32&&!x&&!A&&(W(),nc(t,228)?$(\"local class\"):d.push(_d(84)),d.push(Qs()),R(t),Z(t,r)),v&64&&s&2&&(q(),d.push(_d(118)),d.push(Qs()),R(t),Z(t,r)),v&524288&&s&2&&(q(),d.push(_d(154)),d.push(Qs()),R(t),Z(t,r),d.push(Qs()),d.push(ak(63)),d.push(Qs()),si(d,zN(e,Ch(o.parent)?e.getTypeAtLocation(o.parent):e.getDeclaredTypeOfSymbol(t),i,8388608))),v&384&&(q(),vt(t.declarations,U=>hb(U)&&R0(U))&&(d.push(_d(85)),d.push(Qs())),d.push(_d(92)),d.push(Qs()),R(t)),v&1536&&!A){q();let U=nc(t,264),re=U&&U.name&&U.name.kind===79;d.push(_d(re?143:142)),d.push(Qs()),R(t)}if(v&262144&&s&2)if(q(),d.push(Yl(20)),d.push(tf(\"type parameter\")),d.push(Yl(21)),d.push(Qs()),R(t),t.parent)Y(),R(t.parent,i),Z(t.parent,i);else{let U=nc(t,165);if(U===void 0)return L.fail();let re=U.parent;if(re)if(Ia(re)){Y();let le=e.getSignatureFromDeclaration(re);re.kind===177?(d.push(_d(103)),d.push(Qs())):re.kind!==176&&re.name&&R(re.symbol),si(d,pY(e,le,r,32))}else Ep(re)&&(Y(),d.push(_d(154)),d.push(Qs()),R(re.symbol),Z(re.symbol,r))}if(v&8){S=\"enum member\",ie(t,\"enum member\");let U=(f=t.declarations)==null?void 0:f[0];if(U?.kind===302){let re=e.getConstantValue(U);re!==void 0&&(d.push(Qs()),d.push(ak(63)),d.push(Qs()),d.push(Qu(Use(re),typeof re==\"number\"?7:8)))}}if(t.flags&2097152){if(q(),!x){let U=e.getAliasedSymbol(t);if(U!==t&&U.declarations&&U.declarations.length>0){let re=U.declarations[0],le=sa(re);if(le){let _e=b6(re)&&Mr(re,2),ge=t.name!==\"default\"&&!_e,X=ASe(e,U,Gn(re),re,le,s,ge?t:U);d.push(...X.displayParts),d.push(K2()),C=X.documentation,P=X.tags}else C=U.getContextualDocumentationComment(re,e),P=U.getJsDocTags(e)}}if(t.declarations)switch(t.declarations[0].kind){case 267:d.push(_d(93)),d.push(Qs()),d.push(_d(143));break;case 274:d.push(_d(93)),d.push(Qs()),d.push(_d(t.declarations[0].isExportEquals?63:88));break;case 278:d.push(_d(93));break;default:d.push(_d(100))}d.push(Qs()),R(t),mn(t.declarations,U=>{if(U.kind===268){let re=U;if(ab(re))d.push(Qs()),d.push(ak(63)),d.push(Qs()),d.push(_d(147)),d.push(Yl(20)),d.push(Qu(Qc(wI(re)),8)),d.push(Yl(21));else{let le=e.getSymbolAtLocation(re.moduleReference);le&&(d.push(Qs()),d.push(ak(63)),d.push(Qs()),R(le,i))}return!0}})}if(!x)if(S!==\"\"){if(w){if(A?(q(),d.push(_d(108))):ie(t,S),S===\"property\"||S===\"accessor\"||S===\"getter\"||S===\"setter\"||S===\"JSX attribute\"||v&3||S===\"local var\"||S===\"index\"||A){if(d.push(Yl(58)),d.push(Qs()),w.symbol&&w.symbol.flags&262144&&S!==\"index\"){let U=uv(re=>{let le=e.typeParameterToDeclaration(w,i,tte);B().writeNode(4,le,Gn(ea(i)),re)});si(d,U)}else si(d,zN(e,w,i));if(Zp(t)&&t.links.target&&Zp(t.links.target)&&t.links.target.links.tupleLabelDeclaration){let U=t.links.target.links.tupleLabelDeclaration;L.assertNode(U.name,Re),d.push(Qs()),d.push(Yl(20)),d.push(tf(vr(U.name))),d.push(Yl(21))}}else if(v&16||v&8192||v&16384||v&131072||v&98304||S===\"method\"){let U=w.getNonNullableType().getCallSignatures();U.length&&(fe(U[0],U),F=U.length>1)}}}else S=TSe(e,t,o);if(g.length===0&&!F&&(g=t.getContextualDocumentationComment(i,e)),g.length===0&&v&4&&t.parent&&t.declarations&&mn(t.parent.declarations,U=>U.kind===308))for(let U of t.declarations){if(!U.parent||U.parent.kind!==223)continue;let re=e.getSymbolAtLocation(U.parent.right);if(re&&(g=re.getDocumentationComment(e),m=re.getJsDocTags(e),g.length>0))break}if(g.length===0&&Re(o)&&t.valueDeclaration&&Wo(t.valueDeclaration)){let U=t.valueDeclaration,re=U.parent;if(Re(U.name)&&cm(re)){let le=l_(U.name),_e=e.getTypeAtLocation(re);g=ks(_e.isUnion()?_e.types:[_e],ge=>{let X=ge.getProperty(le);return X?X.getDocumentationComment(e):void 0})||Je}}return m.length===0&&!F&&(m=t.getContextualJsDocTags(i,e)),g.length===0&&C&&(g=C),m.length===0&&P&&(m=P),{displayParts:d,documentation:g,symbolKind:S,tags:m.length===0?void 0:m};function B(){return rE()}function q(){d.length&&d.push(K2()),W()}function W(){l&&($(\"alias\"),d.push(Qs()))}function Y(){d.push(Qs()),d.push(_d(101)),d.push(Qs())}function R(U,re){let le;l&&U===t&&(U=l),S===\"index\"&&(le=e.getIndexInfosOfIndexSymbol(U));let _e=[];U.flags&131072&&le?(U.parent&&(_e=ok(e,U.parent)),_e.push(Yl(22)),le.forEach((ge,X)=>{_e.push(...zN(e,ge.keyType)),X!==le.length-1&&(_e.push(Qs()),_e.push(Yl(51)),_e.push(Qs()))}),_e.push(Yl(23))):_e=ok(e,U,re||r,void 0,7),si(d,_e),t.flags&16777216&&d.push(Yl(57))}function ie(U,re){q(),re&&($(re),U&&!vt(U.declarations,le=>xs(le)||(ms(le)||_u(le))&&!le.name)&&(d.push(Qs()),R(U)))}function $(U){switch(U){case\"var\":case\"function\":case\"let\":case\"const\":case\"constructor\":d.push(fY(U));return;default:d.push(Yl(20)),d.push(fY(U)),d.push(Yl(21));return}}function fe(U,re,le=0){si(d,pY(e,U,i,le|32)),re.length>1&&(d.push(Qs()),d.push(Yl(20)),d.push(ak(39)),d.push(Qu((re.length-1).toString(),7)),d.push(Qs()),d.push(tf(re.length===2?\"overload\":\"overloads\")),d.push(Yl(21))),g=U.getDocumentationComment(e),m=U.getJsDocTags(),re.length>1&&g.length===0&&m.length===0&&(g=re[0].getDocumentationComment(e),m=re[0].getJsDocTags().filter(_e=>_e.name!==\"deprecated\"))}function Z(U,re){let le=uv(_e=>{let ge=e.symbolToTypeParameterDeclarations(U,re,tte);B().writeList(53776,ge,Gn(ea(re)),_e)});si(d,le)}}function CSe(e){return e.parent?!1:mn(e.declarations,t=>{if(t.kind===215)return!0;if(t.kind!==257&&t.kind!==259)return!1;for(let r=t.parent;!bT(r);r=r.parent)if(r.kind===308||r.kind===265)return!1;return!0})}var tte,BWe=gt({\"src/services/symbolDisplay.ts\"(){\"use strict\";Fr(),tte=70246400}}),$g={};Mo($g,{getSymbolDisplayPartsDocumentationAndSymbolKind:()=>ASe,getSymbolKind:()=>TSe,getSymbolModifiers:()=>GWe});var UWe=gt({\"src/services/_namespaces/ts.SymbolDisplay.ts\"(){\"use strict\";BWe()}});function ISe(e){let t=e.__pos;return L.assert(typeof t==\"number\"),t}function nte(e,t){L.assert(typeof t==\"number\"),e.__pos=t}function LSe(e){let t=e.__end;return L.assert(typeof t==\"number\"),t}function rte(e,t){L.assert(typeof t==\"number\"),e.__end=t}function kSe(e,t){return xo(e,t,!1,!0)}function VWe(e,t){let r=t;for(;r<e.length;){let i=e.charCodeAt(r);if(Yp(i)){r++;continue}return i===47}return!1}function Fk(e,t,r,i){return{pos:f1(e,t,i),end:mx(e,r,i)}}function f1(e,t,r,i=!1){var o,s;let{leadingTriviaOption:l}=r;if(l===0)return t.getStart(e);if(l===3){let x=t.getStart(e),A=Wf(x,e);return wN(t,A)?A:x}if(l===2){let x=EH(t,e.text);if(x?.length)return Wf(x[0].pos,e)}let f=t.getFullStart(),d=t.getStart(e);if(f===d)return d;let g=Wf(f,e);if(Wf(d,e)===g)return l===1?f:d;if(i){let x=((o=Nm(e.text,f))==null?void 0:o[0])||((s=eb(e.text,f))==null?void 0:s[0]);if(x)return xo(e.text,x.end,!0,!0)}let v=f>0?1:0,S=Ky(UI(e,g)+v,e);return S=kSe(e.text,S),Ky(UI(e,S),e)}function ite(e,t,r){let{end:i}=t,{trailingTriviaOption:o}=r;if(o===2){let s=eb(e.text,i);if(s){let l=UI(e,t.end);for(let f of s){if(f.kind===2||UI(e,f.pos)>l)break;if(UI(e,f.end)>l)return xo(e.text,f.end,!0,!0)}}}}function mx(e,t,r){var i;let{end:o}=t,{trailingTriviaOption:s}=r;if(s===0)return o;if(s===1){let d=Qi(eb(e.text,o),Nm(e.text,o)),g=(i=d?.[d.length-1])==null?void 0:i.end;return g||o}let l=ite(e,t,r);if(l)return l;let f=xo(e.text,o,!0);return f!==o&&(s===2||Wl(e.text.charCodeAt(f-1)))?f:o}function NG(e,t){return!!t&&!!e.parent&&(t.kind===27||t.kind===26&&e.parent.kind===207)}function jWe(e){return ms(e)||Jc(e)}function HWe(e){if(e.kind!==216)return e;let t=e.parent.kind===169?e.parent:e.parent.parent;return t.jsDoc=e.jsDoc,t}function WWe(e,t){if(e.kind===t.kind)switch(e.kind){case 344:{let r=e,i=t;return Re(r.name)&&Re(i.name)&&r.name.escapedText===i.name.escapedText?D.createJSDocParameterTag(void 0,i.name,!1,i.typeExpression,i.isNameFirst,r.comment):void 0}case 345:return D.createJSDocReturnTag(void 0,t.typeExpression,e.comment);case 347:return D.createJSDocTypeTag(void 0,t.typeExpression,e.comment)}}function ate(e,t){return xo(e.text,f1(e,t,{leadingTriviaOption:1}),!1,!0)}function zWe(e,t,r,i){let o=ate(e,i);if(r===void 0||Bf(mx(e,t,{}),o,e))return o;let s=el(i.getStart(e),e);if(NG(t,s)){let l=el(t.getStart(e),e);if(NG(r,l)){let f=xo(e.text,s.getEnd(),!0,!0);if(Bf(l.getStart(e),s.getStart(e),e))return Wl(e.text.charCodeAt(f-1))?f-1:f;if(Wl(e.text.charCodeAt(f)))return f}}return o}function JWe(e,t){let r=Yo(e,18,t),i=Yo(e,19,t);return[r?.end,i?.end]}function PG(e){return rs(e)?e.properties:e.members}function KWe(e,t,r,i){return UP.newFileChangesWorker(void 0,t,e,r,i)}function ote(e,t){for(let r=t.length-1;r>=0;r--){let{span:i,newText:o}=t[r];e=`${e.substring(0,i.start)}${o}${e.substring(wl(i))}`}return e}function qWe(e){return xo(e,0)===e.length}function MG(e){let t=xn(e,MG,RSe,XWe,MG),r=ws(t)?t:Object.create(t);return om(r,ISe(e),LSe(e)),r}function XWe(e,t,r,i,o){let s=On(e,t,r,i,o);if(!s)return s;L.assert(e);let l=s===e?D.createNodeArray(s.slice(0)):s;return om(l,ISe(e),LSe(e)),l}function DSe(e){let t=0,r=SR(e),i=X=>{X&&nte(X,t)},o=X=>{X&&rte(X,t)},s=X=>{X&&nte(X,t)},l=X=>{X&&rte(X,t)},f=X=>{X&&nte(X,t)},d=X=>{X&&rte(X,t)};function g(X,Ve){if(Ve||!qWe(X)){t=r.getTextPos();let we=0;for(;xh(X.charCodeAt(X.length-we-1));)we++;t-=we}}function m(X){r.write(X),g(X,!1)}function v(X){r.writeComment(X)}function S(X){r.writeKeyword(X),g(X,!1)}function x(X){r.writeOperator(X),g(X,!1)}function A(X){r.writePunctuation(X),g(X,!1)}function w(X){r.writeTrailingSemicolon(X),g(X,!1)}function C(X){r.writeParameter(X),g(X,!1)}function P(X){r.writeProperty(X),g(X,!1)}function F(X){r.writeSpace(X),g(X,!1)}function B(X){r.writeStringLiteral(X),g(X,!1)}function q(X,Ve){r.writeSymbol(X,Ve),g(X,!1)}function W(X){r.writeLine(X)}function Y(){r.increaseIndent()}function R(){r.decreaseIndent()}function ie(){return r.getText()}function $(X){r.rawWrite(X),g(X,!1)}function fe(X){r.writeLiteral(X),g(X,!0)}function Z(){return r.getTextPos()}function U(){return r.getLine()}function re(){return r.getColumn()}function le(){return r.getIndent()}function _e(){return r.isAtStartOfLine()}function ge(){r.clear(),t=0}return{onBeforeEmitNode:i,onAfterEmitNode:o,onBeforeEmitNodeArray:s,onAfterEmitNodeArray:l,onBeforeEmitToken:f,onAfterEmitToken:d,write:m,writeComment:v,writeKeyword:S,writeOperator:x,writePunctuation:A,writeTrailingSemicolon:w,writeParameter:C,writeProperty:P,writeSpace:F,writeStringLiteral:B,writeSymbol:q,writeLine:W,increaseIndent:Y,decreaseIndent:R,getText:ie,rawWrite:$,writeLiteral:fe,getTextPos:Z,getLine:U,getColumn:re,getIndent:le,isAtStartOfLine:_e,hasTrailingComment:()=>r.hasTrailingComment(),hasTrailingWhitespace:()=>r.hasTrailingWhitespace(),clear:ge}}function YWe(e){let t;for(let g of e.statements)if(B_(g))t=g;else break;let r=0,i=e.text;if(t)return r=t.end,d(),r;let o=K8(i);o!==void 0&&(r=o.length,d());let s=Nm(i,r);if(!s)return r;let l,f;for(let g of s){if(g.kind===3){if(y6(i,g.pos)){l={range:g,pinnedOrTripleSlash:!0};continue}}else if(iH(i,g.pos,g.end)){l={range:g,pinnedOrTripleSlash:!0};continue}if(l){if(l.pinnedOrTripleSlash)break;let m=e.getLineAndCharacterOfPosition(g.pos).line,v=e.getLineAndCharacterOfPosition(l.range.end).line;if(m>=v+2)break}if(e.statements.length){f===void 0&&(f=e.getLineAndCharacterOfPosition(e.statements[0].getStart()).line);let m=e.getLineAndCharacterOfPosition(g.end).line;if(f<m+2)break}l={range:g,pinnedOrTripleSlash:!1}}return l&&(r=l.range.end,d()),r;function d(){if(r<i.length){let g=i.charCodeAt(r);Wl(g)&&(r++,r<i.length&&g===13&&i.charCodeAt(r)===10&&r++)}}}function wSe(e,t){return!Kg(e,t)&&!n1(e,t)&&!qX(e,t)&&!Dhe(e,t)}function $We(e,t){return($d(e)||Na(e))&&s6(t)&&t.name.kind===164||Nw(e)&&Nw(t)}function Zm(e,t,r,i={leadingTriviaOption:1}){let o=f1(t,r,i),s=mx(t,r,i);e.deleteRange(t,{pos:o,end:s})}function Gk(e,t,r,i){let o=L.checkDefined(tl.SmartIndenter.getContainingList(i,r)),s=DA(o,i);if(L.assert(s!==-1),o.length===1){Zm(e,r,i);return}L.assert(!t.has(i),\"Deleting a node twice\"),t.add(i),e.deleteRange(r,{pos:ate(r,i),end:s===o.length-1?mx(r,i,{}):zWe(r,i,o[s-1],o[s+1])})}var ste,cte,iC,FG,UP,RSe,lte,QWe=gt({\"src/services/textChanges.ts\"(){\"use strict\";Fr(),ste=(e=>(e[e.Exclude=0]=\"Exclude\",e[e.IncludeAll=1]=\"IncludeAll\",e[e.JSDoc=2]=\"JSDoc\",e[e.StartLine=3]=\"StartLine\",e))(ste||{}),cte=(e=>(e[e.Exclude=0]=\"Exclude\",e[e.ExcludeWhitespace=1]=\"ExcludeWhitespace\",e[e.Include=2]=\"Include\",e))(cte||{}),iC={leadingTriviaOption:0,trailingTriviaOption:0},FG=class{constructor(e,t){this.newLineCharacter=e,this.formatContext=t,this.changes=[],this.newFiles=[],this.classesWithNodesInsertedAtStart=new Map,this.deletedNodes=[]}static fromContext(e){return new FG(bb(e.host,e.formatContext.options),e.formatContext)}static with(e,t){let r=FG.fromContext(e);return t(r),r.getChanges()}pushRaw(e,t){L.assertEqual(e.fileName,t.fileName);for(let r of t.textChanges)this.changes.push({kind:3,sourceFile:e,text:r.newText,range:y7(r.span)})}deleteRange(e,t){this.changes.push({kind:0,sourceFile:e,range:t})}delete(e,t){this.deletedNodes.push({sourceFile:e,node:t})}deleteNode(e,t,r={leadingTriviaOption:1}){this.deleteRange(e,Fk(e,t,t,r))}deleteNodes(e,t,r={leadingTriviaOption:1},i){for(let o of t){let s=f1(e,o,r,i),l=mx(e,o,r);this.deleteRange(e,{pos:s,end:l}),i=!!ite(e,o,r)}}deleteModifier(e,t){this.deleteRange(e,{pos:t.getStart(e),end:xo(e.text,t.end,!0)})}deleteNodeRange(e,t,r,i={leadingTriviaOption:1}){let o=f1(e,t,i),s=mx(e,r,i);this.deleteRange(e,{pos:o,end:s})}deleteNodeRangeExcludingEnd(e,t,r,i={leadingTriviaOption:1}){let o=f1(e,t,i),s=r===void 0?e.text.length:f1(e,r,i);this.deleteRange(e,{pos:o,end:s})}replaceRange(e,t,r,i={}){this.changes.push({kind:1,sourceFile:e,range:t,options:i,node:r})}replaceNode(e,t,r,i=iC){this.replaceRange(e,Fk(e,t,t,i),r,i)}replaceNodeRange(e,t,r,i,o=iC){this.replaceRange(e,Fk(e,t,r,o),i,o)}replaceRangeWithNodes(e,t,r,i={}){this.changes.push({kind:2,sourceFile:e,range:t,options:i,nodes:r})}replaceNodeWithNodes(e,t,r,i=iC){this.replaceRangeWithNodes(e,Fk(e,t,t,i),r,i)}replaceNodeWithText(e,t,r){this.replaceRangeWithText(e,Fk(e,t,t,iC),r)}replaceNodeRangeWithNodes(e,t,r,i,o=iC){this.replaceRangeWithNodes(e,Fk(e,t,r,o),i,o)}nodeHasTrailingComment(e,t,r=iC){return!!ite(e,t,r)}nextCommaToken(e,t){let r=t1(t,t.parent,e);return r&&r.kind===27?r:void 0}replacePropertyAssignment(e,t,r){let i=this.nextCommaToken(e,t)?\"\":\",\"+this.newLineCharacter;this.replaceNode(e,t,r,{suffix:i})}insertNodeAt(e,t,r,i={}){this.replaceRange(e,Gf(t),r,i)}insertNodesAt(e,t,r,i={}){this.replaceRangeWithNodes(e,Gf(t),r,i)}insertNodeAtTopOfFile(e,t,r){this.insertAtTopOfFile(e,t,r)}insertNodesAtTopOfFile(e,t,r){this.insertAtTopOfFile(e,t,r)}insertAtTopOfFile(e,t,r){let i=YWe(e),o={prefix:i===0?void 0:this.newLineCharacter,suffix:(Wl(e.text.charCodeAt(i))?\"\":this.newLineCharacter)+(r?this.newLineCharacter:\"\")};ba(t)?this.insertNodesAt(e,i,t,o):this.insertNodeAt(e,i,t,o)}insertFirstParameter(e,t,r){let i=Sl(t);i?this.insertNodeBefore(e,i,r):this.insertNodeAt(e,t.pos,r)}insertNodeBefore(e,t,r,i=!1,o={}){this.insertNodeAt(e,f1(e,t,o),r,this.getOptionsForInsertNodeBefore(t,r,i))}insertModifierAt(e,t,r,i={}){this.insertNodeAt(e,t,D.createToken(r),i)}insertModifierBefore(e,t,r){return this.insertModifierAt(e,r.getStart(e),t,{suffix:\" \"})}insertCommentBeforeLine(e,t,r,i){let o=Ky(t,e),s=nge(e.text,o),l=wSe(e,s),f=nk(e,l?s:r),d=e.text.slice(o,s),g=`${l?\"\":this.newLineCharacter}//${i}${this.newLineCharacter}${d}`;this.insertText(e,f.getStart(e),g)}insertJsdocCommentBefore(e,t,r){let i=t.getStart(e);if(t.jsDoc)for(let l of t.jsDoc)this.deleteRange(e,{pos:Wf(l.getStart(e),e),end:mx(e,l,{})});let o=hY(e.text,i-1),s=e.text.slice(o,i);this.insertNodeAt(e,i,r,{suffix:this.newLineCharacter+s})}createJSDocText(e,t){let r=Uo(t.jsDoc,o=>Ta(o.comment)?D.createJSDocText(o.comment):o.comment),i=Wp(t.jsDoc);return i&&Bf(i.pos,i.end,e)&&Fn(r)===0?void 0:D.createNodeArray(DU(r,D.createJSDocText(`\n`)))}replaceJSDocComment(e,t,r){this.insertJsdocCommentBefore(e,HWe(t),D.createJSDocComment(this.createJSDocText(e,t),D.createNodeArray(r)))}addJSDocTags(e,t,r){let i=BD(t.jsDoc,s=>s.tags),o=r.filter(s=>!i.some((l,f)=>{let d=WWe(l,s);return d&&(i[f]=d),!!d}));this.replaceJSDocComment(e,t,[...i,...o])}filterJSDocTags(e,t,r){this.replaceJSDocComment(e,t,Pr(BD(t.jsDoc,i=>i.tags),r))}replaceRangeWithText(e,t,r){this.changes.push({kind:3,sourceFile:e,range:t,text:r})}insertText(e,t,r){this.replaceRangeWithText(e,Gf(t),r)}tryInsertTypeAnnotation(e,t,r){var i;let o;if(Ia(t)){if(o=Yo(t,21,e),!o){if(!xs(t))return!1;o=Vo(t.parameters)}}else o=(i=t.kind===257?t.exclamationToken:t.questionToken)!=null?i:t.name;return this.insertNodeAt(e,o.end,r,{prefix:\": \"}),!0}tryInsertThisTypeAnnotation(e,t,r){let i=Yo(t,20,e).getStart(e)+1,o=t.parameters.length?\", \":\"\";this.insertNodeAt(e,i,r,{prefix:\"this: \",suffix:o})}insertTypeParameters(e,t,r){let i=(Yo(t,20,e)||Vo(t.parameters)).getStart(e);this.insertNodesAt(e,i,r,{prefix:\"<\",suffix:\">\",joiner:\", \"})}getOptionsForInsertNodeBefore(e,t,r){return ca(e)||_l(e)?{suffix:r?this.newLineCharacter+this.newLineCharacter:this.newLineCharacter}:wi(e)?{suffix:\", \"}:ha(e)?ha(t)?{suffix:\", \"}:{}:yo(e)&&gl(e.parent)||jg(e)?{suffix:\", \"}:$u(e)?{suffix:\",\"+(r?this.newLineCharacter:\" \")}:L.failBadSyntaxKind(e)}insertNodeAtConstructorStart(e,t,r){let i=Sl(t.body.statements);!i||!t.body.multiLine?this.replaceConstructorBody(e,t,[r,...t.body.statements]):this.insertNodeBefore(e,i,r)}insertNodeAtConstructorStartAfterSuperCall(e,t,r){let i=wr(t.body.statements,o=>Ol(o)&&OA(o.expression));!i||!t.body.multiLine?this.replaceConstructorBody(e,t,[...t.body.statements,r]):this.insertNodeAfter(e,i,r)}insertNodeAtConstructorEnd(e,t,r){let i=Os(t.body.statements);!i||!t.body.multiLine?this.replaceConstructorBody(e,t,[...t.body.statements,r]):this.insertNodeAfter(e,i,r)}replaceConstructorBody(e,t,r){this.replaceNode(e,t.body,D.createBlock(r,!0))}insertNodeAtEndOfScope(e,t,r){let i=f1(e,t.getLastToken(),{});this.insertNodeAt(e,i,r,{prefix:Wl(e.text.charCodeAt(t.getLastToken().pos))?this.newLineCharacter:this.newLineCharacter+this.newLineCharacter,suffix:this.newLineCharacter})}insertMemberAtStart(e,t,r){this.insertNodeAtStartWorker(e,t,r)}insertNodeAtObjectStart(e,t,r){this.insertNodeAtStartWorker(e,t,r)}insertNodeAtStartWorker(e,t,r){var i;let o=(i=this.guessIndentationFromExistingMembers(e,t))!=null?i:this.computeIndentationForNewMember(e,t);this.insertNodeAt(e,PG(t).pos,r,this.getInsertNodeAtStartInsertOptions(e,t,o))}guessIndentationFromExistingMembers(e,t){let r,i=t;for(let o of PG(t)){if(a4(i,o,e))return;let s=o.getStart(e),l=tl.SmartIndenter.findFirstNonWhitespaceColumn(Wf(s,e),s,e,this.formatContext.options);if(r===void 0)r=l;else if(l!==r)return;i=o}return r}computeIndentationForNewMember(e,t){var r;let i=t.getStart(e);return tl.SmartIndenter.findFirstNonWhitespaceColumn(Wf(i,e),i,e,this.formatContext.options)+((r=this.formatContext.options.indentSize)!=null?r:4)}getInsertNodeAtStartInsertOptions(e,t,r){let o=PG(t).length===0,s=V_(this.classesWithNodesInsertedAtStart,zo(t),{node:t,sourceFile:e}),l=rs(t)&&(!Mf(e)||!o),f=rs(t)&&Mf(e)&&o&&!s;return{indentation:r,prefix:(f?\",\":\"\")+this.newLineCharacter,suffix:l?\",\":ku(t)&&o?\";\":\"\"}}insertNodeAfterComma(e,t,r){let i=this.insertNodeAfterWorker(e,this.nextCommaToken(e,t)||t,r);this.insertNodeAt(e,i,r,this.getInsertNodeAfterOptions(e,t))}insertNodeAfter(e,t,r){let i=this.insertNodeAfterWorker(e,t,r);this.insertNodeAt(e,i,r,this.getInsertNodeAfterOptions(e,t))}insertNodeAtEndOfList(e,t,r){this.insertNodeAt(e,t.end,r,{prefix:\", \"})}insertNodesAfter(e,t,r){let i=this.insertNodeAfterWorker(e,t,Vo(r));this.insertNodesAt(e,i,r,this.getInsertNodeAfterOptions(e,t))}insertNodeAfterWorker(e,t,r){return $We(t,r)&&e.text.charCodeAt(t.end-1)!==59&&this.replaceRange(e,Gf(t.end),D.createToken(26)),mx(e,t,{})}getInsertNodeAfterOptions(e,t){let r=this.getInsertNodeAfterOptionsWorker(t);return{...r,prefix:t.end===e.end&&ca(t)?r.prefix?`\n${r.prefix}`:`\n`:r.prefix}}getInsertNodeAfterOptionsWorker(e){switch(e.kind){case 260:case 264:return{prefix:this.newLineCharacter,suffix:this.newLineCharacter};case 257:case 10:case 79:return{prefix:\", \"};case 299:return{suffix:\",\"+this.newLineCharacter};case 93:return{prefix:\" \"};case 166:return{};default:return L.assert(ca(e)||s6(e)),{suffix:this.newLineCharacter}}}insertName(e,t,r){if(L.assert(!t.name),t.kind===216){let i=Yo(t,38,e),o=Yo(t,20,e);o?(this.insertNodesAt(e,o.getStart(e),[D.createToken(98),D.createIdentifier(r)],{joiner:\" \"}),Zm(this,e,i)):(this.insertText(e,Vo(t.parameters).getStart(e),`function ${r}(`),this.replaceRange(e,i,D.createToken(21))),t.body.kind!==238&&(this.insertNodesAt(e,t.body.getStart(e),[D.createToken(18),D.createToken(105)],{joiner:\" \",suffix:\" \"}),this.insertNodesAt(e,t.body.end,[D.createToken(26),D.createToken(19)],{joiner:\" \"}))}else{let i=Yo(t,t.kind===215?98:84,e).end;this.insertNodeAt(e,i,D.createIdentifier(r),{prefix:\" \"})}}insertExportModifier(e,t){this.insertText(e,t.getStart(e),\"export \")}insertImportSpecifierAtIndex(e,t,r,i){let o=r.elements[i-1];o?this.insertNodeInListAfter(e,o,t):this.insertNodeBefore(e,r.elements[0],t,!Bf(r.elements[0].getStart(),r.parent.parent.getStart(),e))}insertNodeInListAfter(e,t,r,i=tl.SmartIndenter.getContainingList(t,e)){if(!i){L.fail(\"node is not a list element\");return}let o=DA(i,t);if(o<0)return;let s=t.getEnd();if(o!==i.length-1){let l=Vi(e,t.end);if(l&&NG(t,l)){let f=i[o+1],d=kSe(e.text,f.getFullStart()),g=`${Xa(l.kind)}${e.text.substring(l.end,d)}`;this.insertNodesAt(e,d,[r],{suffix:g})}}else{let l=t.getStart(e),f=Wf(l,e),d,g=!1;if(i.length===1)d=27;else{let m=el(t.pos,e);d=NG(t,m)?m.kind:27,g=Wf(i[o-1].getStart(e),e)!==f}if(VWe(e.text,t.end)&&(g=!0),g){this.replaceRange(e,Gf(s),D.createToken(d));let m=tl.SmartIndenter.findFirstNonWhitespaceColumn(f,l,e,this.formatContext.options),v=xo(e.text,s,!0,!1);for(;v!==s&&Wl(e.text.charCodeAt(v-1));)v--;this.replaceRange(e,Gf(v),r,{indentation:m,prefix:this.newLineCharacter})}else this.replaceRange(e,Gf(s),r,{prefix:`${Xa(d)} `})}}parenthesizeExpression(e,t){this.replaceRange(e,MW(t),D.createParenthesizedExpression(t))}finishClassesWithNodesInsertedAtStart(){this.classesWithNodesInsertedAtStart.forEach(({node:e,sourceFile:t})=>{let[r,i]=JWe(e,t);if(r!==void 0&&i!==void 0){let o=PG(e).length===0,s=Bf(r,i,t);o&&s&&r!==i-1&&this.deleteRange(t,Gf(r,i-1)),s&&this.insertText(t,i-1,this.newLineCharacter)}})}finishDeleteDeclarations(){let e=new Set;for(let{sourceFile:t,node:r}of this.deletedNodes)this.deletedNodes.some(i=>i.sourceFile===t&&bhe(i.node,r))||(ba(r)?this.deleteRange(t,FW(t,r)):lte.deleteDeclaration(this,e,t,r));e.forEach(t=>{let r=t.getSourceFile(),i=tl.SmartIndenter.getContainingList(t,r);if(t!==To(i))return;let o=s8(i,s=>!e.has(s),i.length-2);o!==-1&&this.deleteRange(r,{pos:i[o].end,end:ate(r,i[o+1])})})}getChanges(e){this.finishDeleteDeclarations(),this.finishClassesWithNodesInsertedAtStart();let t=UP.getTextChangesFromChanges(this.changes,this.newLineCharacter,this.formatContext,e);for(let{oldFile:r,fileName:i,statements:o}of this.newFiles)t.push(UP.newFileChanges(r,i,o,this.newLineCharacter,this.formatContext));return t}createNewFile(e,t,r){this.newFiles.push({oldFile:e,fileName:t,statements:r})}},(e=>{function t(f,d,g,m){return Zi(YC(f,v=>v.sourceFile.path),v=>{let S=v[0].sourceFile,x=Ag(v,(w,C)=>w.range.pos-C.range.pos||w.range.end-C.range.end);for(let w=0;w<x.length-1;w++)L.assert(x[w].range.end<=x[w+1].range.pos,\"Changes overlap\",()=>`${JSON.stringify(x[w].range)} and ${JSON.stringify(x[w+1].range)}`);let A=Zi(x,w=>{let C=lv(w.range),P=o(w,S,d,g,m);if(!(C.length===P.length&&yge(S.text,P,C.start)))return GN(C,P)});return A.length>0?{fileName:S.fileName,textChanges:A}:void 0})}e.getTextChangesFromChanges=t;function r(f,d,g,m,v){let S=i(f,RW(d),g,m,v);return{fileName:d,textChanges:[GN(il(0,0),S)],isNewFile:!0}}e.newFileChanges=r;function i(f,d,g,m,v){let S=g.map(w=>w===4?\"\":l(w,f,m).text).join(m),x=DO(\"any file name\",S,99,!0,d),A=tl.formatDocument(x,v);return ote(S,A)+m}e.newFileChangesWorker=i;function o(f,d,g,m,v){var S;if(f.kind===0)return\"\";if(f.kind===3)return f.text;let{options:x={},range:{pos:A}}=f,w=F=>s(F,d,A,x,g,m,v),C=f.kind===2?f.nodes.map(F=>pA(w(F),g)).join(((S=f.options)==null?void 0:S.joiner)||g):w(f.node),P=x.indentation!==void 0||Wf(A,d)===A?C:C.replace(/^\\s+/,\"\");return(x.prefix||\"\")+P+(!x.suffix||Oc(P,x.suffix)?\"\":x.suffix)}function s(f,d,g,{indentation:m,prefix:v,delta:S},x,A,w){let{node:C,text:P}=l(f,d,x);w&&w(C,P);let F=z7(A,d),B=m!==void 0?m:tl.SmartIndenter.getIndentation(g,d,F,v===x||Wf(g,d)===g);S===void 0&&(S=tl.SmartIndenter.shouldIndentChildNode(F,f)&&F.indentSize||0);let q={text:P,getLineAndCharacterOfPosition(Y){return Gs(this,Y)}},W=tl.formatNodeGivenIndentation(C,q,d.languageVariant,B,S,{...A,options:F});return ote(P,W)}function l(f,d,g){let m=DSe(g),v=XN(g);return nE({newLine:v,neverAsciiEscape:!0,preserveSourceNewlines:!0,terminateUnterminatedLiterals:!0},m).writeNode(4,f,d,m),{text:m.getText(),node:MG(f)}}e.getNonformattedText=l})(UP||(UP={})),RSe={...Bh,factory:YR(Bh.factory.flags|1,Bh.factory.baseFactory)},(e=>{function t(s,l,f,d){switch(d.kind){case 166:{let x=d.parent;xs(x)&&x.parameters.length===1&&!Yo(x,20,f)?s.replaceNodeWithText(f,d,\"()\"):Gk(s,l,f,d);break}case 269:case 268:let g=f.imports.length&&d===Vo(f.imports).parent||d===wr(f.statements,yT);Zm(s,f,d,{leadingTriviaOption:g?0:Kd(d)?2:3});break;case 205:let m=d.parent;m.kind===204&&d!==To(m.elements)?Zm(s,f,d):Gk(s,l,f,d);break;case 257:o(s,l,f,d);break;case 165:Gk(s,l,f,d);break;case 273:let S=d.parent;S.elements.length===1?i(s,f,S):Gk(s,l,f,d);break;case 271:i(s,f,d);break;case 26:Zm(s,f,d,{trailingTriviaOption:0});break;case 98:Zm(s,f,d,{leadingTriviaOption:0});break;case 260:case 259:Zm(s,f,d,{leadingTriviaOption:Kd(d)?2:3});break;default:d.parent?lm(d.parent)&&d.parent.name===d?r(s,f,d.parent):Pa(d.parent)&&ya(d.parent.arguments,d)?Gk(s,l,f,d):Zm(s,f,d):Zm(s,f,d)}}e.deleteDeclaration=t;function r(s,l,f){if(!f.namedBindings)Zm(s,l,f.parent);else{let d=f.name.getStart(l),g=Vi(l,f.name.end);if(g&&g.kind===27){let m=xo(l.text,g.end,!1,!0);s.deleteRange(l,{pos:d,end:m})}else Zm(s,l,f.name)}}function i(s,l,f){if(f.parent.name){let d=L.checkDefined(Vi(l,f.pos-1));s.deleteRange(l,{pos:d.getStart(l),end:f.end})}else{let d=cb(f,269);Zm(s,l,d)}}function o(s,l,f,d){let{parent:g}=d;if(g.kind===295){s.deleteNodeRange(f,Yo(g,20,f),Yo(g,21,f));return}if(g.declarations.length!==1){Gk(s,l,f,d);return}let m=g.parent;switch(m.kind){case 247:case 246:s.replaceNode(f,d,D.createObjectLiteralExpression());break;case 245:Zm(s,f,g);break;case 240:Zm(s,f,m,{leadingTriviaOption:Kd(m)?2:3});break;default:L.assertNever(m)}}})(lte||(lte={}))}}),nr={};Mo(nr,{ChangeTracker:()=>FG,LeadingTriviaOption:()=>ste,TrailingTriviaOption:()=>cte,applyChanges:()=>ote,assignPositionsToNode:()=>MG,createWriter:()=>DSe,deleteNode:()=>Zm,getNewFileText:()=>KWe,isThisTypeAnnotatable:()=>jWe,isValidLocationToAddComment:()=>wSe});var ZWe=gt({\"src/services/_namespaces/ts.textChanges.ts\"(){\"use strict\";QWe()}}),ute,dte,eze=gt({\"src/services/formatting/formattingContext.ts\"(){\"use strict\";Fr(),ute=(e=>(e[e.FormatDocument=0]=\"FormatDocument\",e[e.FormatSelection=1]=\"FormatSelection\",e[e.FormatOnEnter=2]=\"FormatOnEnter\",e[e.FormatOnSemicolon=3]=\"FormatOnSemicolon\",e[e.FormatOnOpeningCurlyBrace=4]=\"FormatOnOpeningCurlyBrace\",e[e.FormatOnClosingCurlyBrace=5]=\"FormatOnClosingCurlyBrace\",e))(ute||{}),dte=class{constructor(e,t,r){this.sourceFile=e,this.formattingRequestKind=t,this.options=r}updateContext(e,t,r,i,o){this.currentTokenSpan=L.checkDefined(e),this.currentTokenParent=L.checkDefined(t),this.nextTokenSpan=L.checkDefined(r),this.nextTokenParent=L.checkDefined(i),this.contextNode=L.checkDefined(o),this.contextNodeAllOnSameLine=void 0,this.nextNodeAllOnSameLine=void 0,this.tokensAreOnSameLine=void 0,this.contextNodeBlockIsOnOneLine=void 0,this.nextNodeBlockIsOnOneLine=void 0}ContextNodeAllOnSameLine(){return this.contextNodeAllOnSameLine===void 0&&(this.contextNodeAllOnSameLine=this.NodeIsOnOneLine(this.contextNode)),this.contextNodeAllOnSameLine}NextNodeAllOnSameLine(){return this.nextNodeAllOnSameLine===void 0&&(this.nextNodeAllOnSameLine=this.NodeIsOnOneLine(this.nextTokenParent)),this.nextNodeAllOnSameLine}TokensAreOnSameLine(){if(this.tokensAreOnSameLine===void 0){let e=this.sourceFile.getLineAndCharacterOfPosition(this.currentTokenSpan.pos).line,t=this.sourceFile.getLineAndCharacterOfPosition(this.nextTokenSpan.pos).line;this.tokensAreOnSameLine=e===t}return this.tokensAreOnSameLine}ContextNodeBlockIsOnOneLine(){return this.contextNodeBlockIsOnOneLine===void 0&&(this.contextNodeBlockIsOnOneLine=this.BlockIsOnOneLine(this.contextNode)),this.contextNodeBlockIsOnOneLine}NextNodeBlockIsOnOneLine(){return this.nextNodeBlockIsOnOneLine===void 0&&(this.nextNodeBlockIsOnOneLine=this.BlockIsOnOneLine(this.nextTokenParent)),this.nextNodeBlockIsOnOneLine}NodeIsOnOneLine(e){let t=this.sourceFile.getLineAndCharacterOfPosition(e.getStart(this.sourceFile)).line,r=this.sourceFile.getLineAndCharacterOfPosition(e.getEnd()).line;return t===r}BlockIsOnOneLine(e){let t=Yo(e,18,this.sourceFile),r=Yo(e,19,this.sourceFile);if(t&&r){let i=this.sourceFile.getLineAndCharacterOfPosition(t.getEnd()).line,o=this.sourceFile.getLineAndCharacterOfPosition(r.getStart(this.sourceFile)).line;return i===o}return!1}}}});function fte(e,t,r,i,o){let s=t===1?NSe:OSe;s.setText(e),s.setTextPos(r);let l=!0,f,d,g,m,v,S=o({advance:x,readTokenInfo:W,readEOFTokenRange:R,isOnToken:ie,isOnEOF:$,getCurrentLeadingTrivia:()=>f,lastTrailingTriviaWasNewLine:()=>l,skipToEndOf:Z,skipToStartOf:U,getStartPos:()=>{var re;return(re=v?.token.pos)!=null?re:s.getTokenPos()}});return v=void 0,s.setText(void 0),S;function x(){v=void 0,s.getStartPos()!==r?l=!!d&&To(d).kind===4:s.scan(),f=void 0,d=void 0;let le=s.getStartPos();for(;le<i;){let _e=s.getToken();if(!KA(_e))break;s.scan();let ge={pos:le,end:s.getStartPos(),kind:_e};le=s.getStartPos(),f=Sn(f,ge)}g=s.getStartPos()}function A(re){switch(re.kind){case 33:case 71:case 72:case 49:case 48:return!0}return!1}function w(re){if(re.parent)switch(re.parent.kind){case 288:case 283:case 284:case 282:return Xu(re.kind)||re.kind===79}return!1}function C(re){return CS(re)||Hg(re)&&v?.token.kind===11}function P(re){return re.kind===13}function F(re){return re.kind===16||re.kind===17}function B(re){return re.parent&&Sp(re.parent)&&re.parent.initializer===re}function q(re){return re===43||re===68}function W(re){L.assert(ie());let le=A(re)?1:P(re)?2:F(re)?3:w(re)?4:C(re)?5:B(re)?6:0;if(v&&le===m)return fe(v,re);s.getStartPos()!==g&&(L.assert(v!==void 0),s.setTextPos(g),s.scan());let _e=Y(re,le),ge=VG(s.getStartPos(),s.getTextPos(),_e);for(d&&(d=void 0);s.getStartPos()<i&&(_e=s.scan(),!!KA(_e));){let X=VG(s.getStartPos(),s.getTextPos(),_e);if(d||(d=[]),d.push(X),_e===4){s.scan();break}}return v={leadingTrivia:f,trailingTrivia:d,token:ge},fe(v,re)}function Y(re,le){let _e=s.getToken();switch(m=0,le){case 1:if(_e===31){m=1;let ge=s.reScanGreaterToken();return L.assert(re.kind===ge),ge}break;case 2:if(q(_e)){m=2;let ge=s.reScanSlashToken();return L.assert(re.kind===ge),ge}break;case 3:if(_e===19)return m=3,s.reScanTemplateToken(!1);break;case 4:return m=4,s.scanJsxIdentifier();case 5:return m=5,s.reScanJsxToken(!1);case 6:return m=6,s.reScanJsxAttributeValue();case 0:break;default:L.assertNever(le)}return _e}function R(){return L.assert($()),VG(s.getStartPos(),s.getTextPos(),1)}function ie(){let re=v?v.token.kind:s.getToken();return re!==1&&!KA(re)}function $(){return(v?v.token.kind:s.getToken())===1}function fe(re,le){return Z1(le)&&re.token.kind!==le.kind&&(re.token.kind=le.kind),re}function Z(re){s.setTextPos(re.end),g=s.getStartPos(),m=void 0,v=void 0,l=!1,f=void 0,d=void 0}function U(re){s.setTextPos(re.pos),g=s.getStartPos(),m=void 0,v=void 0,l=!1,f=void 0,d=void 0}}var OSe,NSe,tze=gt({\"src/services/formatting/formattingScanner.ts\"(){\"use strict\";Fr(),Vk(),OSe=kg(99,!1,0),NSe=kg(99,!1,1)}}),VP,_te,pte,nze=gt({\"src/services/formatting/rule.ts\"(){\"use strict\";Fr(),VP=Je,_te=(e=>(e[e.None=0]=\"None\",e[e.StopProcessingSpaceActions=1]=\"StopProcessingSpaceActions\",e[e.StopProcessingTokenActions=2]=\"StopProcessingTokenActions\",e[e.InsertSpace=4]=\"InsertSpace\",e[e.InsertNewLine=8]=\"InsertNewLine\",e[e.DeleteSpace=16]=\"DeleteSpace\",e[e.DeleteToken=32]=\"DeleteToken\",e[e.InsertTrailingSemicolon=64]=\"InsertTrailingSemicolon\",e[e.StopAction=3]=\"StopAction\",e[e.ModifySpaceAction=28]=\"ModifySpaceAction\",e[e.ModifyTokenAction=96]=\"ModifyTokenAction\",e))(_te||{}),pte=(e=>(e[e.None=0]=\"None\",e[e.CanDeleteNewLines=1]=\"CanDeleteNewLines\",e))(pte||{})}});function PSe(){let e=[];for(let Y=0;Y<=162;Y++)Y!==1&&e.push(Y);function t(...Y){return{tokens:e.filter(R=>!Y.some(ie=>ie===R)),isSpecific:!1}}let r={tokens:e,isSpecific:!1},i=aC([...e,3]),o=aC([...e,1]),s=FSe(81,162),l=FSe(29,78),f=[101,102,162,128,140,150],d=[45,46,54,53],g=[8,9,79,20,22,18,108,103],m=[79,20,108,103],v=[79,21,23,103],S=[79,20,108,103],x=[79,21,23,103],A=[2,3],w=[79,...K7],C=i,P=aC([79,3,84,93,100]),F=aC([21,3,90,111,96,91]),B=[Lr(\"IgnoreBeforeComment\",r,A,VP,1),Lr(\"IgnoreAfterLineComment\",2,r,VP,1),Lr(\"NotSpaceBeforeColon\",r,58,[mi,jP,USe],16),Lr(\"SpaceAfterColon\",58,r,[mi,jP],4),Lr(\"NoSpaceBeforeQuestionMark\",r,57,[mi,jP,USe],16),Lr(\"SpaceAfterQuestionMarkInConditionalOperator\",57,r,[mi,ize],4),Lr(\"NoSpaceAfterQuestionMark\",57,r,[mi],16),Lr(\"NoSpaceBeforeDot\",r,[24,28],[mi,kze],16),Lr(\"NoSpaceAfterDot\",[24,28],r,[mi],16),Lr(\"NoSpaceBetweenImportParenInImportType\",100,20,[mi,mze],16),Lr(\"NoSpaceAfterUnaryPrefixOperator\",d,g,[mi,jP],16),Lr(\"NoSpaceAfterUnaryPreincrementOperator\",45,m,[mi],16),Lr(\"NoSpaceAfterUnaryPredecrementOperator\",46,S,[mi],16),Lr(\"NoSpaceBeforeUnaryPostincrementOperator\",v,45,[mi,txe],16),Lr(\"NoSpaceBeforeUnaryPostdecrementOperator\",x,46,[mi,txe],16),Lr(\"SpaceAfterPostincrementWhenFollowedByAdd\",45,39,[mi,Qg],4),Lr(\"SpaceAfterAddWhenFollowedByUnaryPlus\",39,39,[mi,Qg],4),Lr(\"SpaceAfterAddWhenFollowedByPreincrement\",39,45,[mi,Qg],4),Lr(\"SpaceAfterPostdecrementWhenFollowedBySubtract\",46,40,[mi,Qg],4),Lr(\"SpaceAfterSubtractWhenFollowedByUnaryMinus\",40,40,[mi,Qg],4),Lr(\"SpaceAfterSubtractWhenFollowedByPredecrement\",40,46,[mi,Qg],4),Lr(\"NoSpaceAfterCloseBrace\",19,[27,26],[mi],16),Lr(\"NewLineBeforeCloseBraceInBlockContext\",i,19,[jSe],8),Lr(\"SpaceAfterCloseBrace\",19,t(21),[mi,sze],4),Lr(\"SpaceBetweenCloseBraceAndElse\",19,91,[mi],4),Lr(\"SpaceBetweenCloseBraceAndWhile\",19,115,[mi],4),Lr(\"NoSpaceBetweenEmptyBraceBrackets\",18,19,[mi,qSe],16),Lr(\"SpaceAfterConditionalClosingParen\",21,22,[HP],4),Lr(\"NoSpaceBetweenFunctionKeywordAndStar\",98,41,[zSe],16),Lr(\"SpaceAfterStarInGeneratorDeclaration\",41,79,[zSe],4),Lr(\"SpaceAfterFunctionInFuncDecl\",98,r,[cE],4),Lr(\"NewLineAfterOpenBraceInBlockContext\",18,r,[jSe],8),Lr(\"SpaceAfterGetSetInMember\",[137,151],79,[cE],4),Lr(\"NoSpaceBetweenYieldKeywordAndStar\",125,41,[mi,exe],16),Lr(\"SpaceBetweenYieldOrYieldStarAndOperand\",[125,41],r,[mi,exe],4),Lr(\"NoSpaceBetweenReturnAndSemicolon\",105,26,[mi],16),Lr(\"SpaceAfterCertainKeywords\",[113,109,103,89,105,112,133],r,[mi],4),Lr(\"SpaceAfterLetConstInVariableDeclaration\",[119,85],r,[mi,vze],4),Lr(\"NoSpaceBeforeOpenParenInFuncCall\",r,20,[mi,uze,dze],16),Lr(\"SpaceBeforeBinaryKeywordOperator\",r,f,[mi,Qg],4),Lr(\"SpaceAfterBinaryKeywordOperator\",f,r,[mi,Qg],4),Lr(\"SpaceAfterVoidOperator\",114,r,[mi,xze],4),Lr(\"SpaceBetweenAsyncAndOpenParen\",132,20,[pze,mi],4),Lr(\"SpaceBetweenAsyncAndFunctionKeyword\",132,[98,79],[mi],4),Lr(\"NoSpaceBetweenTagAndTemplateString\",[79,21],[14,15],[mi],16),Lr(\"SpaceBeforeJsxAttribute\",r,79,[hze,mi],4),Lr(\"SpaceBeforeSlashInJsxOpeningElement\",r,43,[$Se,mi],4),Lr(\"NoSpaceBeforeGreaterThanTokenInJsxOpeningElement\",43,31,[$Se,mi],16),Lr(\"NoSpaceBeforeEqualInJsxAttribute\",r,63,[YSe,mi],16),Lr(\"NoSpaceAfterEqualInJsxAttribute\",63,r,[YSe,mi],16),Lr(\"NoSpaceAfterModuleImport\",[142,147],20,[mi],16),Lr(\"SpaceAfterCertainTypeScriptKeywords\",[126,127,84,136,88,92,93,94,137,117,100,118,142,143,121,123,122,146,151,124,154,158,141,138],r,[mi],4),Lr(\"SpaceBeforeCertainTypeScriptKeywords\",r,[94,117,158],[mi],4),Lr(\"SpaceAfterModuleName\",10,18,[bze],4),Lr(\"SpaceBeforeArrow\",r,38,[mi],4),Lr(\"SpaceAfterArrow\",38,r,[mi],4),Lr(\"NoSpaceAfterEllipsis\",25,79,[mi],16),Lr(\"NoSpaceAfterOptionalParameters\",57,[21,27],[mi,jP],16),Lr(\"NoSpaceBetweenEmptyInterfaceBraceBrackets\",18,19,[mi,Eze],16),Lr(\"NoSpaceBeforeOpenAngularBracket\",w,29,[mi,WP],16),Lr(\"NoSpaceBetweenCloseParenAndAngularBracket\",21,29,[mi,WP],16),Lr(\"NoSpaceAfterOpenAngularBracket\",29,r,[mi,WP],16),Lr(\"NoSpaceBeforeCloseAngularBracket\",r,31,[mi,WP],16),Lr(\"NoSpaceAfterCloseAngularBracket\",31,[20,22,31,27],[mi,WP,oze,Sze],16),Lr(\"SpaceBeforeAt\",[21,79],59,[mi],4),Lr(\"NoSpaceAfterAt\",59,r,[mi],16),Lr(\"SpaceAfterDecorator\",r,[126,79,93,88,84,124,123,121,122,137,151,22,41],[yze],4),Lr(\"NoSpaceBeforeNonNullAssertionOperator\",r,53,[mi,Aze],16),Lr(\"NoSpaceAfterNewKeywordOnConstructorSignature\",103,20,[mi,Tze],16),Lr(\"SpaceLessThanAndNonJSXTypeAnnotation\",29,29,[mi],4)],q=[Lr(\"SpaceAfterConstructor\",135,20,[Nd(\"insertSpaceAfterConstructor\"),mi],4),Lr(\"NoSpaceAfterConstructor\",135,20,[q_(\"insertSpaceAfterConstructor\"),mi],16),Lr(\"SpaceAfterComma\",27,r,[Nd(\"insertSpaceAfterCommaDelimiter\"),mi,Ete,fze,_ze],4),Lr(\"NoSpaceAfterComma\",27,r,[q_(\"insertSpaceAfterCommaDelimiter\"),mi,Ete],16),Lr(\"SpaceAfterAnonymousFunctionKeyword\",[98,41],20,[Nd(\"insertSpaceAfterFunctionKeywordForAnonymousFunctions\"),cE],4),Lr(\"NoSpaceAfterAnonymousFunctionKeyword\",[98,41],20,[q_(\"insertSpaceAfterFunctionKeywordForAnonymousFunctions\"),cE],16),Lr(\"SpaceAfterKeywordInControl\",s,20,[Nd(\"insertSpaceAfterKeywordsInControlFlowStatements\"),HP],4),Lr(\"NoSpaceAfterKeywordInControl\",s,20,[q_(\"insertSpaceAfterKeywordsInControlFlowStatements\"),HP],16),Lr(\"SpaceAfterOpenParen\",20,r,[Nd(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis\"),mi],4),Lr(\"SpaceBeforeCloseParen\",r,21,[Nd(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis\"),mi],4),Lr(\"SpaceBetweenOpenParens\",20,20,[Nd(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis\"),mi],4),Lr(\"NoSpaceBetweenParens\",20,21,[mi],16),Lr(\"NoSpaceAfterOpenParen\",20,r,[q_(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis\"),mi],16),Lr(\"NoSpaceBeforeCloseParen\",r,21,[q_(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis\"),mi],16),Lr(\"SpaceAfterOpenBracket\",22,r,[Nd(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets\"),mi],4),Lr(\"SpaceBeforeCloseBracket\",r,23,[Nd(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets\"),mi],4),Lr(\"NoSpaceBetweenBrackets\",22,23,[mi],16),Lr(\"NoSpaceAfterOpenBracket\",22,r,[q_(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets\"),mi],16),Lr(\"NoSpaceBeforeCloseBracket\",r,23,[q_(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets\"),mi],16),Lr(\"SpaceAfterOpenBrace\",18,r,[BSe(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces\"),VSe],4),Lr(\"SpaceBeforeCloseBrace\",r,19,[BSe(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces\"),VSe],4),Lr(\"NoSpaceBetweenEmptyBraceBrackets\",18,19,[mi,qSe],16),Lr(\"NoSpaceAfterOpenBrace\",18,r,[mte(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces\"),mi],16),Lr(\"NoSpaceBeforeCloseBrace\",r,19,[mte(\"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces\"),mi],16),Lr(\"SpaceBetweenEmptyBraceBrackets\",18,19,[Nd(\"insertSpaceAfterOpeningAndBeforeClosingEmptyBraces\")],4),Lr(\"NoSpaceBetweenEmptyBraceBrackets\",18,19,[mte(\"insertSpaceAfterOpeningAndBeforeClosingEmptyBraces\"),mi],16),Lr(\"SpaceAfterTemplateHeadAndMiddle\",[15,16],r,[Nd(\"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces\"),XSe],4,1),Lr(\"SpaceBeforeTemplateMiddleAndTail\",r,[16,17],[Nd(\"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces\"),mi],4),Lr(\"NoSpaceAfterTemplateHeadAndMiddle\",[15,16],r,[q_(\"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces\"),XSe],16,1),Lr(\"NoSpaceBeforeTemplateMiddleAndTail\",r,[16,17],[q_(\"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces\"),mi],16),Lr(\"SpaceAfterOpenBraceInJsxExpression\",18,r,[Nd(\"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces\"),mi,BG],4),Lr(\"SpaceBeforeCloseBraceInJsxExpression\",r,19,[Nd(\"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces\"),mi,BG],4),Lr(\"NoSpaceAfterOpenBraceInJsxExpression\",18,r,[q_(\"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces\"),mi,BG],16),Lr(\"NoSpaceBeforeCloseBraceInJsxExpression\",r,19,[q_(\"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces\"),mi,BG],16),Lr(\"SpaceAfterSemicolonInFor\",26,r,[Nd(\"insertSpaceAfterSemicolonInForStatements\"),mi,gte],4),Lr(\"NoSpaceAfterSemicolonInFor\",26,r,[q_(\"insertSpaceAfterSemicolonInForStatements\"),mi,gte],16),Lr(\"SpaceBeforeBinaryOperator\",r,l,[Nd(\"insertSpaceBeforeAndAfterBinaryOperators\"),mi,Qg],4),Lr(\"SpaceAfterBinaryOperator\",l,r,[Nd(\"insertSpaceBeforeAndAfterBinaryOperators\"),mi,Qg],4),Lr(\"NoSpaceBeforeBinaryOperator\",r,l,[q_(\"insertSpaceBeforeAndAfterBinaryOperators\"),mi,Qg],16),Lr(\"NoSpaceAfterBinaryOperator\",l,r,[q_(\"insertSpaceBeforeAndAfterBinaryOperators\"),mi,Qg],16),Lr(\"SpaceBeforeOpenParenInFuncDecl\",r,20,[Nd(\"insertSpaceBeforeFunctionParenthesis\"),mi,cE],4),Lr(\"NoSpaceBeforeOpenParenInFuncDecl\",r,20,[q_(\"insertSpaceBeforeFunctionParenthesis\"),mi,cE],16),Lr(\"NewLineBeforeOpenBraceInControl\",F,18,[Nd(\"placeOpenBraceOnNewLineForControlBlocks\"),HP,bte],8,1),Lr(\"NewLineBeforeOpenBraceInFunction\",C,18,[Nd(\"placeOpenBraceOnNewLineForFunctions\"),cE,bte],8,1),Lr(\"NewLineBeforeOpenBraceInTypeScriptDeclWithBlock\",P,18,[Nd(\"placeOpenBraceOnNewLineForFunctions\"),JSe,bte],8,1),Lr(\"SpaceAfterTypeAssertion\",31,r,[Nd(\"insertSpaceAfterTypeAssertion\"),mi,Ste],4),Lr(\"NoSpaceAfterTypeAssertion\",31,r,[q_(\"insertSpaceAfterTypeAssertion\"),mi,Ste],16),Lr(\"SpaceBeforeTypeAnnotation\",r,[57,58],[Nd(\"insertSpaceBeforeTypeAnnotation\"),mi,yte],4),Lr(\"NoSpaceBeforeTypeAnnotation\",r,[57,58],[q_(\"insertSpaceBeforeTypeAnnotation\"),mi,yte],16),Lr(\"NoOptionalSemicolon\",26,o,[GSe(\"semicolons\",\"remove\"),Ize],32),Lr(\"OptionalSemicolon\",r,o,[GSe(\"semicolons\",\"insert\"),Lze],64)],W=[Lr(\"NoSpaceBeforeSemicolon\",r,26,[mi],16),Lr(\"SpaceBeforeOpenBraceInControl\",F,18,[hte(\"placeOpenBraceOnNewLineForControlBlocks\"),HP,Tte,vte],4,1),Lr(\"SpaceBeforeOpenBraceInFunction\",C,18,[hte(\"placeOpenBraceOnNewLineForFunctions\"),cE,GG,Tte,vte],4,1),Lr(\"SpaceBeforeOpenBraceInTypeScriptDeclWithBlock\",P,18,[hte(\"placeOpenBraceOnNewLineForFunctions\"),JSe,Tte,vte],4,1),Lr(\"NoSpaceBeforeComma\",r,27,[mi],16),Lr(\"NoSpaceBeforeOpenBracket\",t(132,82),22,[mi],16),Lr(\"NoSpaceAfterCloseBracket\",23,r,[mi,gze],16),Lr(\"SpaceAfterSemicolon\",26,r,[mi],4),Lr(\"SpaceBetweenForAndAwaitKeyword\",97,133,[mi],4),Lr(\"SpaceBetweenStatements\",[21,90,91,82],r,[mi,Ete,rze],4),Lr(\"SpaceAfterTryCatchFinally\",[111,83,96],18,[mi],4)];return[...B,...q,...W]}function Lr(e,t,r,i,o,s=0){return{leftTokenRange:MSe(t),rightTokenRange:MSe(r),rule:{debugName:e,context:i,action:o,flags:s}}}function aC(e){return{tokens:e,isSpecific:!0}}function MSe(e){return typeof e==\"number\"?aC([e]):ba(e)?aC(e):e}function FSe(e,t,r=[]){let i=[];for(let o=e;o<=t;o++)ya(r,o)||i.push(o);return aC(i)}function GSe(e,t){return r=>r.options&&r.options[e]===t}function Nd(e){return t=>t.options&&fs(t.options,e)&&!!t.options[e]}function mte(e){return t=>t.options&&fs(t.options,e)&&!t.options[e]}function q_(e){return t=>!t.options||!fs(t.options,e)||!t.options[e]}function hte(e){return t=>!t.options||!fs(t.options,e)||!t.options[e]||t.TokensAreOnSameLine()}function BSe(e){return t=>!t.options||!fs(t.options,e)||!!t.options[e]}function gte(e){return e.contextNode.kind===245}function rze(e){return!gte(e)}function Qg(e){switch(e.contextNode.kind){case 223:return e.contextNode.operatorToken.kind!==27;case 224:case 191:case 231:case 278:case 273:case 179:case 189:case 190:case 235:return!0;case 205:case 262:case 268:case 274:case 257:case 166:case 302:case 169:case 168:return e.currentTokenSpan.kind===63||e.nextTokenSpan.kind===63;case 246:case 165:return e.currentTokenSpan.kind===101||e.nextTokenSpan.kind===101||e.currentTokenSpan.kind===63||e.nextTokenSpan.kind===63;case 247:return e.currentTokenSpan.kind===162||e.nextTokenSpan.kind===162}return!1}function jP(e){return!Qg(e)}function USe(e){return!yte(e)}function yte(e){let t=e.contextNode.kind;return t===169||t===168||t===166||t===257||nS(t)}function ize(e){return e.contextNode.kind===224||e.contextNode.kind===191}function vte(e){return e.TokensAreOnSameLine()||GG(e)}function VSe(e){return e.contextNode.kind===203||e.contextNode.kind===197||aze(e)}function bte(e){return GG(e)&&!(e.NextNodeAllOnSameLine()||e.NextNodeBlockIsOnOneLine())}function jSe(e){return HSe(e)&&!(e.ContextNodeAllOnSameLine()||e.ContextNodeBlockIsOnOneLine())}function aze(e){return HSe(e)&&(e.ContextNodeAllOnSameLine()||e.ContextNodeBlockIsOnOneLine())}function HSe(e){return WSe(e.contextNode)}function GG(e){return WSe(e.nextTokenParent)}function WSe(e){if(KSe(e))return!0;switch(e.kind){case 238:case 266:case 207:case 265:return!0}return!1}function cE(e){switch(e.contextNode.kind){case 259:case 171:case 170:case 174:case 175:case 176:case 215:case 173:case 216:case 261:return!0}return!1}function oze(e){return!cE(e)}function zSe(e){return e.contextNode.kind===259||e.contextNode.kind===215}function JSe(e){return KSe(e.contextNode)}function KSe(e){switch(e.kind){case 260:case 228:case 261:case 263:case 184:case 264:case 275:case 276:case 269:case 272:return!0}return!1}function sze(e){switch(e.currentTokenParent.kind){case 260:case 264:case 263:case 295:case 265:case 252:return!0;case 238:{let t=e.currentTokenParent.parent;if(!t||t.kind!==216&&t.kind!==215)return!0}}return!1}function HP(e){switch(e.contextNode.kind){case 242:case 252:case 245:case 246:case 247:case 244:case 255:case 243:case 251:case 295:return!0;default:return!1}}function qSe(e){return e.contextNode.kind===207}function cze(e){return e.contextNode.kind===210}function lze(e){return e.contextNode.kind===211}function uze(e){return cze(e)||lze(e)}function dze(e){return e.currentTokenSpan.kind!==27}function fze(e){return e.nextTokenSpan.kind!==23}function _ze(e){return e.nextTokenSpan.kind!==21}function pze(e){return e.contextNode.kind===216}function mze(e){return e.contextNode.kind===202}function mi(e){return e.TokensAreOnSameLine()&&e.contextNode.kind!==11}function XSe(e){return e.contextNode.kind!==11}function Ete(e){return e.contextNode.kind!==281&&e.contextNode.kind!==285}function BG(e){return e.contextNode.kind===291||e.contextNode.kind===290}function hze(e){return e.nextTokenParent.kind===288}function YSe(e){return e.contextNode.kind===288}function $Se(e){return e.contextNode.kind===282}function gze(e){return!cE(e)&&!GG(e)}function yze(e){return e.TokensAreOnSameLine()&&bf(e.contextNode)&&QSe(e.currentTokenParent)&&!QSe(e.nextTokenParent)}function QSe(e){for(;e&&ot(e);)e=e.parent;return e&&e.kind===167}function vze(e){return e.currentTokenParent.kind===258&&e.currentTokenParent.getStart(e.sourceFile)===e.currentTokenSpan.pos}function Tte(e){return e.formattingRequestKind!==2}function bze(e){return e.contextNode.kind===264}function Eze(e){return e.contextNode.kind===184}function Tze(e){return e.contextNode.kind===177}function ZSe(e,t){if(e.kind!==29&&e.kind!==31)return!1;switch(t.kind){case 180:case 213:case 262:case 260:case 228:case 261:case 259:case 215:case 216:case 171:case 170:case 176:case 177:case 210:case 211:case 230:return!0;default:return!1}}function WP(e){return ZSe(e.currentTokenSpan,e.currentTokenParent)||ZSe(e.nextTokenSpan,e.nextTokenParent)}function Ste(e){return e.contextNode.kind===213}function Sze(e){return!Ste(e)}function xze(e){return e.currentTokenSpan.kind===114&&e.currentTokenParent.kind===219}function exe(e){return e.contextNode.kind===226&&e.contextNode.expression!==void 0}function Aze(e){return e.contextNode.kind===232}function txe(e){return!Cze(e)}function Cze(e){switch(e.contextNode.kind){case 242:case 245:case 246:case 247:case 243:case 244:return!0;default:return!1}}function Ize(e){let t=e.nextTokenSpan.kind,r=e.nextTokenSpan.pos;if(KA(t)){let s=e.nextTokenParent===e.currentTokenParent?t1(e.currentTokenParent,jn(e.currentTokenParent,l=>!l.parent),e.sourceFile):e.nextTokenParent.getFirstToken(e.sourceFile);if(!s)return!0;t=s.kind,r=s.getStart(e.sourceFile)}let i=e.sourceFile.getLineAndCharacterOfPosition(e.currentTokenSpan.pos).line,o=e.sourceFile.getLineAndCharacterOfPosition(r).line;return i===o?t===19||t===1:t===237||t===26?!1:e.contextNode.kind===261||e.contextNode.kind===262?!$d(e.currentTokenParent)||!!e.currentTokenParent.type||t!==20:Na(e.currentTokenParent)?!e.currentTokenParent.initializer:e.currentTokenParent.kind!==245&&e.currentTokenParent.kind!==239&&e.currentTokenParent.kind!==237&&t!==22&&t!==20&&t!==39&&t!==40&&t!==43&&t!==13&&t!==27&&t!==225&&t!==15&&t!==14&&t!==24}function Lze(e){return N7(e.currentTokenSpan.end,e.currentTokenParent,e.sourceFile)}function kze(e){return!br(e.contextNode)||!Vf(e.contextNode.expression)||e.contextNode.expression.getText().indexOf(\".\")!==-1}var Dze=gt({\"src/services/formatting/rules.ts\"(){\"use strict\";Fr(),Vk()}});function wze(e,t){return{options:e,getRules:Rze(),host:t}}function Rze(){return xte===void 0&&(xte=Nze(PSe())),xte}function Oze(e){let t=0;return e&1&&(t|=28),e&2&&(t|=96),e&28&&(t|=28),e&96&&(t|=96),t}function Nze(e){let t=Pze(e);return r=>{let i=t[nxe(r.currentTokenSpan.kind,r.nextTokenSpan.kind)];if(i){let o=[],s=0;for(let l of i){let f=~Oze(s);l.action&f&&Ji(l.context,d=>d(r))&&(o.push(l),s|=l.action)}if(o.length)return o}}}function Pze(e){let t=new Array(UG*UG),r=new Array(t.length);for(let i of e){let o=i.leftTokenRange.isSpecific&&i.rightTokenRange.isSpecific;for(let s of i.leftTokenRange.tokens)for(let l of i.rightTokenRange.tokens){let f=nxe(s,l),d=t[f];d===void 0&&(d=t[f]=[]),Mze(d,i.rule,o,r,f)}}return t}function nxe(e,t){return L.assert(e<=162&&t<=162,\"Must compute formatting context from tokens\"),e*UG+t}function Mze(e,t,r,i,o){let s=t.action&3?r?0:oC.StopRulesAny:t.context!==VP?r?oC.ContextRulesSpecific:oC.ContextRulesAny:r?oC.NoContextRulesSpecific:oC.NoContextRulesAny,l=i[o]||0;e.splice(Fze(l,s),0,t),i[o]=Gze(l,s)}function Fze(e,t){let r=0;for(let i=0;i<=t;i+=hx)r+=e&zP,e>>=hx;return r}function Gze(e,t){let r=(e>>t&zP)+1;return L.assert((r&zP)===r,\"Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules.\"),e&~(zP<<t)|r<<t}var xte,hx,zP,UG,oC,Bze=gt({\"src/services/formatting/rulesMap.ts\"(){\"use strict\";Fr(),Vk(),hx=5,zP=31,UG=163,oC=(e=>(e[e.StopRulesSpecific=0]=\"StopRulesSpecific\",e[e.StopRulesAny=hx*1]=\"StopRulesAny\",e[e.ContextRulesSpecific=hx*2]=\"ContextRulesSpecific\",e[e.ContextRulesAny=hx*3]=\"ContextRulesAny\",e[e.NoContextRulesSpecific=hx*4]=\"NoContextRulesSpecific\",e[e.NoContextRulesAny=hx*5]=\"NoContextRulesAny\",e))(oC||{})}});function VG(e,t,r){let i={pos:e,end:t,kind:r};return L.isDebugging&&Object.defineProperty(i,\"__debugKind\",{get:()=>L.formatSyntaxKind(r)}),i}function Uze(e,t,r){let i=t.getLineAndCharacterOfPosition(e).line;if(i===0)return[];let o=Bw(i,t);for(;Yp(t.text.charCodeAt(o));)o--;Wl(t.text.charCodeAt(o))&&o--;let s={pos:Ky(i-1,t),end:o+1};return JP(s,t,r,2)}function Vze(e,t,r){let i=Ate(e,26,t);return rxe(Cte(i),t,r,3)}function jze(e,t,r){let i=Ate(e,18,t);if(!i)return[];let o=i.parent,s=Cte(o),l={pos:Wf(s.getStart(t),t),end:e};return JP(l,t,r,4)}function Hze(e,t,r){let i=Ate(e,19,t);return rxe(Cte(i),t,r,5)}function Wze(e,t){let r={pos:0,end:e.text.length};return JP(r,e,t,0)}function zze(e,t,r,i){let o={pos:Wf(e,r),end:t};return JP(o,r,i,1)}function Ate(e,t,r){let i=el(e,r);return i&&i.kind===t&&e===i.getEnd()?i:void 0}function Cte(e){let t=e;for(;t&&t.parent&&t.parent.end===e.end&&!Jze(t.parent,t);)t=t.parent;return t}function Jze(e,t){switch(e.kind){case 260:case 261:return Od(e.members,t);case 264:let r=e.body;return!!r&&r.kind===265&&Od(r.statements,t);case 308:case 238:case 265:return Od(e.statements,t);case 295:return Od(e.block.statements,t)}return!1}function Kze(e,t){return r(t);function r(i){let o=pa(i,s=>jX(s.getStart(t),s.end,e)&&s);if(o){let s=r(o);if(s)return s}return i}}function qze(e,t){if(!e.length)return o;let r=e.filter(s=>tk(t,s.start,s.start+s.length)).sort((s,l)=>s.start-l.start);if(!r.length)return o;let i=0;return s=>{for(;;){if(i>=r.length)return!1;let l=r[i];if(s.end<=l.start)return!1;if(l7(s.pos,s.end,l.start,l.start+l.length))return!0;i++}};function o(){return!1}}function Xze(e,t,r){let i=e.getStart(r);if(i===t.pos&&e.end===t.end)return i;let o=el(t.pos,r);return!o||o.end>=t.pos?e.pos:o.end}function Yze(e,t,r){let i=-1,o;for(;e;){let s=r.getLineAndCharacterOfPosition(e.getStart(r)).line;if(i!==-1&&s!==i)break;if(X_.shouldIndentChildNode(t,e,o,r))return t.indentSize;i=s,o=e,e=e.parent}return 0}function $ze(e,t,r,i,o,s){let l={pos:e.pos,end:e.end};return fte(t.text,r,l.pos,l.end,f=>ixe(l,e,i,o,f,s,1,d=>!1,t))}function rxe(e,t,r,i){if(!e)return[];let o={pos:Wf(e.getStart(t),t),end:e.end};return JP(o,t,r,i)}function JP(e,t,r,i){let o=Kze(e,t);return fte(t.text,t.languageVariant,Xze(o,e,t),e.end,s=>ixe(e,o,X_.getIndentationForNode(o,e,t,r.options),Yze(o,r.options,t),s,r,i,qze(t.parseDiagnostics,e),t))}function ixe(e,t,r,i,o,{options:s,getRules:l,host:f},d,g,m){var v;let S=new dte(m,d,s),x,A,w,C,P,F=-1,B=[];if(o.advance(),o.isOnToken()){let Ne=m.getLineAndCharacterOfPosition(t.getStart(m)).line,Le=Ne;bf(t)&&(Le=m.getLineAndCharacterOfPosition(aH(t,m)).line),ie(t,t,Ne,Le,r,i)}if(!o.isOnToken()){let Ne=X_.nodeWillIndentChild(s,t,void 0,m,!1)?r+s.indentSize:r,Le=o.getCurrentLeadingTrivia();Le&&($(Le,Ne,!1,Ye=>Z(Ye,m.getLineAndCharacterOfPosition(Ye.pos),t,t,void 0)),s.trimTrailingWhitespace!==!1&&we(Le))}if(A&&o.getStartPos()>=e.end){let Ne=o.isOnEOF()?o.readEOFTokenRange():o.isOnToken()?o.readTokenInfo(t).token:void 0;if(Ne&&Ne.pos===x){let Le=((v=el(Ne.end,m,t))==null?void 0:v.parent)||w;U(Ne,m.getLineAndCharacterOfPosition(Ne.pos).line,Le,A,C,w,Le,void 0)}}return B;function q(Ne,Le,Ye,_t,ct){if(tk(_t,Ne,Le)||ON(_t,Ne,Le)){if(ct!==-1)return ct}else{let Rt=m.getLineAndCharacterOfPosition(Ne).line,We=Wf(Ne,m),qe=X_.findFirstNonWhitespaceColumn(We,Ne,m,s);if(Rt!==Ye||Ne===qe){let zt=X_.getBaseIndentation(s);return zt>qe?zt:qe}}return-1}function W(Ne,Le,Ye,_t,ct,Rt){let We=X_.shouldIndentChildNode(s,Ne)?s.indentSize:0;return Rt===Le?{indentation:Le===P?F:ct.getIndentation(),delta:Math.min(s.indentSize,ct.getDelta(Ne)+We)}:Ye===-1?Ne.kind===20&&Le===P?{indentation:F,delta:ct.getDelta(Ne)}:X_.childStartsOnTheSameLineWithElseInIfStatement(_t,Ne,Le,m)||X_.childIsUnindentedBranchOfConditionalExpression(_t,Ne,Le,m)||X_.argumentStartsOnSameLineAsPreviousArgument(_t,Ne,Le,m)?{indentation:ct.getIndentation(),delta:We}:{indentation:ct.getIndentation()+ct.getDelta(Ne),delta:We}:{indentation:Ye,delta:We}}function Y(Ne){if(g_(Ne)){let Le=wr(Ne.modifiers,Ha,Yc(Ne.modifiers,du));if(Le)return Le.kind}switch(Ne.kind){case 260:return 84;case 261:return 118;case 259:return 98;case 263:return 263;case 174:return 137;case 175:return 151;case 171:if(Ne.asteriskToken)return 41;case 169:case 166:let Le=sa(Ne);if(Le)return Le.kind}}function R(Ne,Le,Ye,_t){return{getIndentationForComment:(We,qe,zt)=>{switch(We){case 19:case 23:case 21:return Ye+Rt(zt)}return qe!==-1?qe:Ye},getIndentationForToken:(We,qe,zt,Qt)=>!Qt&&ct(We,qe,zt)?Ye+Rt(zt):Ye,getIndentation:()=>Ye,getDelta:Rt,recomputeIndentation:(We,qe)=>{X_.shouldIndentChildNode(s,qe,Ne,m)&&(Ye+=We?s.indentSize:-s.indentSize,_t=X_.shouldIndentChildNode(s,Ne)?s.indentSize:0)}};function ct(We,qe,zt){switch(qe){case 18:case 19:case 21:case 91:case 115:case 59:return!1;case 43:case 31:switch(zt.kind){case 283:case 284:case 282:return!1}break;case 22:case 23:if(zt.kind!==197)return!1;break}return Le!==We&&!(bf(Ne)&&qe===Y(Ne))}function Rt(We){return X_.nodeWillIndentChild(s,Ne,We,m,!0)?_t:0}}function ie(Ne,Le,Ye,_t,ct,Rt){if(!tk(e,Ne.getStart(m),Ne.getEnd()))return;let We=R(Ne,Ye,ct,Rt),qe=Le;for(pa(Ne,kn=>{zt(kn,-1,Ne,We,Ye,_t,!1)},kn=>{Qt(kn,Ne,Ye,We)});o.isOnToken()&&o.getStartPos()<e.end;){let kn=o.readTokenInfo(Ne);if(kn.token.end>Math.min(Ne.end,e.end))break;tn(kn,Ne,We,Ne)}function zt(kn,_n,Gt,$n,ui,Ni,Pi,gr){if(L.assert(!ws(kn)),rc(kn)||Nse(Gt,kn))return _n;let pt=kn.getStart(m),nn=m.getLineAndCharacterOfPosition(pt).line,Dt=nn;bf(kn)&&(Dt=m.getLineAndCharacterOfPosition(aH(kn,m)).line);let pn=-1;if(Pi&&Od(e,Gt)&&(pn=q(pt,kn.end,ui,e,_n),pn!==-1&&(_n=pn)),!tk(e,kn.pos,kn.end))return kn.end<e.pos&&o.skipToEndOf(kn),_n;if(kn.getFullWidth()===0)return _n;for(;o.isOnToken()&&o.getStartPos()<e.end;){let hi=o.readTokenInfo(Ne);if(hi.token.end>e.end)return _n;if(hi.token.end>pt){hi.token.pos>pt&&o.skipToStartOf(kn);break}tn(hi,Ne,$n,Ne)}if(!o.isOnToken()||o.getStartPos()>=e.end)return _n;if(Z1(kn)){let hi=o.readTokenInfo(kn);if(kn.kind!==11)return L.assert(hi.token.end===kn.end,\"Token end is child end\"),tn(hi,Ne,$n,kn),_n}let An=kn.kind===167?nn:Ni,Kn=W(kn,nn,pn,Ne,$n,An);return ie(kn,qe,nn,Dt,Kn.indentation,Kn.delta),qe=Ne,gr&&Gt.kind===206&&_n===-1&&(_n=Kn.indentation),_n}function Qt(kn,_n,Gt,$n){L.assert(C0(kn)),L.assert(!ws(kn));let ui=Qze(_n,kn),Ni=$n,Pi=Gt;if(!tk(e,kn.pos,kn.end)){kn.end<e.pos&&o.skipToEndOf(kn);return}if(ui!==0)for(;o.isOnToken()&&o.getStartPos()<e.end;){let nn=o.readTokenInfo(_n);if(nn.token.end>kn.pos)break;if(nn.token.kind===ui){Pi=m.getLineAndCharacterOfPosition(nn.token.pos).line,tn(nn,_n,$n,_n);let Dt;if(F!==-1)Dt=F;else{let pn=Wf(nn.token.pos,m);Dt=X_.findFirstNonWhitespaceColumn(pn,nn.token.pos,m,s)}Ni=R(_n,Gt,Dt,s.indentSize)}else tn(nn,_n,$n,_n)}let gr=-1;for(let nn=0;nn<kn.length;nn++){let Dt=kn[nn];gr=zt(Dt,gr,Ne,Ni,Pi,Pi,!0,nn===0)}let pt=Zze(ui);if(pt!==0&&o.isOnToken()&&o.getStartPos()<e.end){let nn=o.readTokenInfo(_n);nn.token.kind===27&&(tn(nn,_n,Ni,_n),nn=o.isOnToken()?o.readTokenInfo(_n):void 0),nn&&nn.token.kind===pt&&Od(_n,nn.token)&&tn(nn,_n,Ni,_n,!0)}}function tn(kn,_n,Gt,$n,ui){L.assert(Od(_n,kn.token));let Ni=o.lastTrailingTriviaWasNewLine(),Pi=!1;kn.leadingTrivia&&fe(kn.leadingTrivia,_n,qe,Gt);let gr=0,pt=Od(e,kn.token),nn=m.getLineAndCharacterOfPosition(kn.token.pos);if(pt){let Dt=g(kn.token),pn=A;if(gr=Z(kn.token,nn,_n,qe,Gt),!Dt)if(gr===0){let An=pn&&m.getLineAndCharacterOfPosition(pn.end).line;Pi=Ni&&nn.line!==An}else Pi=gr===1}if(kn.trailingTrivia&&(x=To(kn.trailingTrivia).end,fe(kn.trailingTrivia,_n,qe,Gt)),Pi){let Dt=pt&&!g(kn.token)?Gt.getIndentationForToken(nn.line,kn.token.kind,$n,!!ui):-1,pn=!0;if(kn.leadingTrivia){let An=Gt.getIndentationForComment(kn.token.kind,Dt,$n);pn=$(kn.leadingTrivia,An,pn,Kn=>re(Kn.pos,An,!1))}Dt!==-1&&pn&&(re(kn.token.pos,Dt,gr===1),P=nn.line,F=Dt)}o.advance(),qe=_n}}function $(Ne,Le,Ye,_t){for(let ct of Ne){let Rt=Od(e,ct);switch(ct.kind){case 3:Rt&&ge(ct,Le,!Ye),Ye=!1;break;case 2:Ye&&Rt&&_t(ct),Ye=!1;break;case 4:Ye=!0;break}}return Ye}function fe(Ne,Le,Ye,_t){for(let ct of Ne)if(g7(ct.kind)&&Od(e,ct)){let Rt=m.getLineAndCharacterOfPosition(ct.pos);Z(ct,Rt,Le,Ye,_t)}}function Z(Ne,Le,Ye,_t,ct){let Rt=g(Ne),We=0;if(!Rt)if(A)We=U(Ne,Le.line,Ye,A,C,w,_t,ct);else{let qe=m.getLineAndCharacterOfPosition(e.pos);X(qe.line,Le.line)}return A=Ne,x=Ne.end,w=Ye,C=Le.line,We}function U(Ne,Le,Ye,_t,ct,Rt,We,qe){S.updateContext(_t,Rt,Ne,Ye,We);let zt=l(S),Qt=S.options.trimTrailingWhitespace!==!1,tn=0;return zt?sae(zt,kn=>{if(tn=Be(kn,_t,ct,Ne,Le),qe)switch(tn){case 2:Ye.getStart(m)===Ne.pos&&qe.recomputeIndentation(!1,We);break;case 1:Ye.getStart(m)===Ne.pos&&qe.recomputeIndentation(!0,We);break;default:L.assert(tn===0)}Qt=Qt&&!(kn.action&16)&&kn.flags!==1}):Qt=Qt&&Ne.kind!==1,Le!==ct&&Qt&&X(ct,Le,_t),tn}function re(Ne,Le,Ye){let _t=Ite(Le,s);if(Ye)Ce(Ne,0,_t);else{let ct=m.getLineAndCharacterOfPosition(Ne),Rt=Ky(ct.line,m);(Le!==le(Rt,ct.character)||_e(_t,Rt))&&Ce(Rt,ct.character,_t)}}function le(Ne,Le){let Ye=0;for(let _t=0;_t<Le;_t++)m.text.charCodeAt(Ne+_t)===9?Ye+=s.tabSize-Ye%s.tabSize:Ye++;return Ye}function _e(Ne,Le){return Ne!==m.text.substr(Le,Ne.length)}function ge(Ne,Le,Ye,_t=!0){let ct=m.getLineAndCharacterOfPosition(Ne.pos).line,Rt=m.getLineAndCharacterOfPosition(Ne.end).line;if(ct===Rt){Ye||re(Ne.pos,Le,!1);return}let We=[],qe=Ne.pos;for(let _n=ct;_n<Rt;_n++){let Gt=Bw(_n,m);We.push({pos:qe,end:Gt}),qe=Ky(_n+1,m)}if(_t&&We.push({pos:qe,end:Ne.end}),We.length===0)return;let zt=Ky(ct,m),Qt=X_.findFirstNonWhitespaceCharacterAndColumn(zt,We[0].pos,m,s),tn=0;Ye&&(tn=1,ct++);let kn=Le-Qt.column;for(let _n=tn;_n<We.length;_n++,ct++){let Gt=Ky(ct,m),$n=_n===0?Qt:X_.findFirstNonWhitespaceCharacterAndColumn(We[_n].pos,We[_n].end,m,s),ui=$n.column+kn;if(ui>0){let Ni=Ite(ui,s);Ce(Gt,$n.character,Ni)}else Pe(Gt,$n.character)}}function X(Ne,Le,Ye){for(let _t=Ne;_t<Le;_t++){let ct=Ky(_t,m),Rt=Bw(_t,m);if(Ye&&(g7(Ye.kind)||QX(Ye.kind))&&Ye.pos<=Rt&&Ye.end>Rt)continue;let We=Ve(ct,Rt);We!==-1&&(L.assert(We===ct||!Yp(m.text.charCodeAt(We-1))),Pe(We,Rt+1-We))}}function Ve(Ne,Le){let Ye=Le;for(;Ye>=Ne&&Yp(m.text.charCodeAt(Ye));)Ye--;return Ye!==Le?Ye+1:-1}function we(Ne){let Le=A?A.end:e.pos;for(let Ye of Ne)g7(Ye.kind)&&(Le<Ye.pos&&ke(Le,Ye.pos-1,A),Le=Ye.end+1);Le<e.end&&ke(Le,e.end,A)}function ke(Ne,Le,Ye){let _t=m.getLineAndCharacterOfPosition(Ne).line,ct=m.getLineAndCharacterOfPosition(Le).line;X(_t,ct+1,Ye)}function Pe(Ne,Le){Le&&B.push(v7(Ne,Le,\"\"))}function Ce(Ne,Le,Ye){(Le||Ye)&&B.push(v7(Ne,Le,Ye))}function Ie(Ne,Le){Le&&B.push(v7(Ne,0,Le))}function Be(Ne,Le,Ye,_t,ct){let Rt=ct!==Ye;switch(Ne.action){case 1:return 0;case 16:if(Le.end!==_t.pos)return Pe(Le.end,_t.pos-Le.end),Rt?2:0;break;case 32:Pe(Le.pos,Le.end-Le.pos);break;case 8:if(Ne.flags!==1&&Ye!==ct)return 0;if(ct-Ye!==1)return Ce(Le.end,_t.pos-Le.end,bb(f,s)),Rt?0:1;break;case 4:if(Ne.flags!==1&&Ye!==ct)return 0;if(_t.pos-Le.end!==1||m.text.charCodeAt(Le.end)!==32)return Ce(Le.end,_t.pos-Le.end,\" \"),Rt?2:0;break;case 64:Ie(Le.end,\";\")}return 0}}function axe(e,t,r,i=Vi(e,t)){let o=jn(i,dm);if(o&&(i=o.parent),i.getStart(e)<=t&&t<i.getEnd())return;r=r===null?void 0:r===void 0?el(t,e):r;let l=r&&eb(e.text,r.end),f=bH(i,e),d=Qi(l,f);return d&&wr(d,g=>RN(g,t)||t===g.end&&(g.kind===2||t===e.getFullWidth()))}function Qze(e,t){switch(e.kind){case 173:case 259:case 215:case 171:case 170:case 216:case 176:case 177:case 181:case 182:case 174:case 175:if(e.typeParameters===t)return 29;if(e.parameters===t)return 20;break;case 210:case 211:if(e.typeArguments===t)return 29;if(e.arguments===t)return 20;break;case 260:case 228:case 261:case 262:if(e.typeParameters===t)return 29;break;case 180:case 212:case 183:case 230:case 202:if(e.typeArguments===t)return 29;break;case 184:return 18}return 0}function Zze(e){switch(e){case 20:return 21;case 29:return 31;case 18:return 19}return 0}function Ite(e,t){if((!jG||jG.tabSize!==t.tabSize||jG.indentSize!==t.indentSize)&&(jG={tabSize:t.tabSize,indentSize:t.indentSize},Bk=Uk=void 0),t.convertTabsToSpaces){let i,o=Math.floor(e/t.indentSize),s=e%t.indentSize;return Uk||(Uk=[]),Uk[o]===void 0?(i=UN(\" \",t.indentSize*o),Uk[o]=i):i=Uk[o],s?i+UN(\" \",s):i}else{let i=Math.floor(e/t.tabSize),o=e-i*t.tabSize,s;return Bk||(Bk=[]),Bk[i]===void 0?Bk[i]=s=UN(\"\t\",i):s=Bk[i],o?s+UN(\" \",o):s}}var jG,Bk,Uk,eJe=gt({\"src/services/formatting/formatting.ts\"(){\"use strict\";Fr(),Vk()}}),X_,tJe=gt({\"src/services/formatting/smartIndenter.ts\"(){\"use strict\";Fr(),Vk(),(e=>{let t;(X=>{X[X.Unknown=-1]=\"Unknown\"})(t||(t={}));function r(X,Ve,we,ke=!1){if(X>Ve.text.length)return f(we);if(we.indentStyle===0)return 0;let Pe=el(X,Ve,void 0,!0),Ce=axe(Ve,X,Pe||null);if(Ce&&Ce.kind===3)return i(Ve,X,we,Ce);if(!Pe)return f(we);if(QX(Pe.kind)&&Pe.getStart(Ve)<=X&&X<Pe.end)return 0;let Be=Ve.getLineAndCharacterOfPosition(X).line,Ne=Vi(Ve,X),Le=Ne.kind===18&&Ne.parent.kind===207;if(we.indentStyle===1||Le)return o(Ve,X,we);if(Pe.kind===27&&Pe.parent.kind!==223){let _t=m(Pe,Ve,we);if(_t!==-1)return _t}let Ye=q(X,Pe.parent,Ve);if(Ye&&!Od(Ye,Pe)){let ct=[215,216].indexOf(Ne.parent.kind)!==-1?0:we.indentSize;return R(Ye,Ve,we)+ct}return s(Ve,X,Pe,Be,ke,we)}e.getIndentation=r;function i(X,Ve,we,ke){let Pe=Gs(X,Ve).line-1,Ce=Gs(X,ke.pos).line;if(L.assert(Ce>=0),Pe<=Ce)return U(Ky(Ce,X),Ve,X,we);let Ie=Ky(Pe,X),{column:Be,character:Ne}=Z(Ie,Ve,X,we);return Be===0?Be:X.text.charCodeAt(Ie+Ne)===42?Be-1:Be}function o(X,Ve,we){let ke=Ve;for(;ke>0;){let Ce=X.text.charCodeAt(ke);if(!xh(Ce))break;ke--}let Pe=Wf(ke,X);return U(Pe,ke,X,we)}function s(X,Ve,we,ke,Pe,Ce){let Ie,Be=we;for(;Be;){if(WX(Be,Ve,X)&&_e(Ce,Be,Ie,X,!0)){let Le=A(Be,X),Ye=x(we,Be,ke,X),_t=Ye!==0?Pe&&Ye===2?Ce.indentSize:0:ke!==Le.line?Ce.indentSize:0;return d(Be,Le,void 0,_t,X,!0,Ce)}let Ne=ie(Be,X,Ce,!0);if(Ne!==-1)return Ne;Ie=Be,Be=Be.parent}return f(Ce)}function l(X,Ve,we,ke){let Pe=we.getLineAndCharacterOfPosition(X.getStart(we));return d(X,Pe,Ve,0,we,!1,ke)}e.getIndentationForNode=l;function f(X){return X.baseIndentSize||0}e.getBaseIndentation=f;function d(X,Ve,we,ke,Pe,Ce,Ie){var Be;let Ne=X.parent;for(;Ne;){let Le=!0;if(we){let Rt=X.getStart(Pe);Le=Rt<we.pos||Rt>we.end}let Ye=g(Ne,X,Pe),_t=Ye.line===Ve.line||C(Ne,X,Ve.line,Pe);if(Le){let Rt=(Be=B(X,Pe))==null?void 0:Be[0],We=!!Rt&&A(Rt,Pe).line>Ye.line,qe=ie(X,Pe,Ie,We);if(qe!==-1||(qe=v(X,Ne,Ve,_t,Pe,Ie),qe!==-1))return qe+ke}_e(Ie,Ne,X,Pe,Ce)&&!_t&&(ke+=Ie.indentSize);let ct=w(Ne,X,Ve.line,Pe);X=Ne,Ne=X.parent,Ve=ct?Pe.getLineAndCharacterOfPosition(X.getStart(Pe)):Ye}return ke+f(Ie)}function g(X,Ve,we){let ke=B(Ve,we),Pe=ke?ke.pos:X.getStart(we);return we.getLineAndCharacterOfPosition(Pe)}function m(X,Ve,we){let ke=Ehe(X);return ke&&ke.listItemIndex>0?$(ke.list.getChildren(),ke.listItemIndex-1,Ve,we):-1}function v(X,Ve,we,ke,Pe,Ce){return(Kl(X)||Nw(X))&&(Ve.kind===308||!ke)?fe(we,Pe,Ce):-1}let S;(X=>{X[X.Unknown=0]=\"Unknown\",X[X.OpenBrace=1]=\"OpenBrace\",X[X.CloseBrace=2]=\"CloseBrace\"})(S||(S={}));function x(X,Ve,we,ke){let Pe=t1(X,Ve,ke);if(!Pe)return 0;if(Pe.kind===18)return 1;if(Pe.kind===19){let Ce=A(Pe,ke).line;return we===Ce?2:0}return 0}function A(X,Ve){return Ve.getLineAndCharacterOfPosition(X.getStart(Ve))}function w(X,Ve,we,ke){if(!(Pa(X)&&ya(X.arguments,Ve)))return!1;let Pe=X.expression.getEnd();return Gs(ke,Pe).line===we}e.isArgumentAndStartLineOverlapsExpressionBeingCalled=w;function C(X,Ve,we,ke){if(X.kind===242&&X.elseStatement===Ve){let Pe=Yo(X,91,ke);return L.assert(Pe!==void 0),A(Pe,ke).line===we}return!1}e.childStartsOnTheSameLineWithElseInIfStatement=C;function P(X,Ve,we,ke){if(b2(X)&&(Ve===X.whenTrue||Ve===X.whenFalse)){let Pe=Gs(ke,X.condition.end).line;if(Ve===X.whenTrue)return we===Pe;{let Ce=A(X.whenTrue,ke).line,Ie=Gs(ke,X.whenTrue.end).line;return Pe===Ce&&Ie===we}}return!1}e.childIsUnindentedBranchOfConditionalExpression=P;function F(X,Ve,we,ke){if(Ih(X)){if(!X.arguments)return!1;let Pe=wr(X.arguments,Ne=>Ne.pos===Ve.pos);if(!Pe)return!1;let Ce=X.arguments.indexOf(Pe);if(Ce===0)return!1;let Ie=X.arguments[Ce-1],Be=Gs(ke,Ie.getEnd()).line;if(we===Be)return!0}return!1}e.argumentStartsOnSameLineAsPreviousArgument=F;function B(X,Ve){return X.parent&&W(X.getStart(Ve),X.getEnd(),X.parent,Ve)}e.getContainingList=B;function q(X,Ve,we){return Ve&&W(X,X,Ve,we)}function W(X,Ve,we,ke){switch(we.kind){case 180:return Pe(we.typeArguments);case 207:return Pe(we.properties);case 206:return Pe(we.elements);case 184:return Pe(we.members);case 259:case 215:case 216:case 171:case 170:case 176:case 173:case 182:case 177:return Pe(we.typeParameters)||Pe(we.parameters);case 174:return Pe(we.parameters);case 260:case 228:case 261:case 262:case 348:return Pe(we.typeParameters);case 211:case 210:return Pe(we.typeArguments)||Pe(we.arguments);case 258:return Pe(we.declarations);case 272:case 276:return Pe(we.elements);case 203:case 204:return Pe(we.elements)}function Pe(Ce){return Ce&&ON(Y(we,Ce,ke),X,Ve)?Ce:void 0}}function Y(X,Ve,we){let ke=X.getChildren(we);for(let Pe=1;Pe<ke.length-1;Pe++)if(ke[Pe].pos===Ve.pos&&ke[Pe].end===Ve.end)return{pos:ke[Pe-1].end,end:ke[Pe+1].getStart(we)};return Ve}function R(X,Ve,we){return X?fe(Ve.getLineAndCharacterOfPosition(X.pos),Ve,we):-1}function ie(X,Ve,we,ke){if(X.parent&&X.parent.kind===258)return-1;let Pe=B(X,Ve);if(Pe){let Ce=Pe.indexOf(X);if(Ce!==-1){let Ie=$(Pe,Ce,Ve,we);if(Ie!==-1)return Ie}return R(Pe,Ve,we)+(ke?we.indentSize:0)}return-1}function $(X,Ve,we,ke){L.assert(Ve>=0&&Ve<X.length);let Pe=X[Ve],Ce=A(Pe,we);for(let Ie=Ve-1;Ie>=0;Ie--){if(X[Ie].kind===27)continue;if(we.getLineAndCharacterOfPosition(X[Ie].end).line!==Ce.line)return fe(Ce,we,ke);Ce=A(X[Ie],we)}return-1}function fe(X,Ve,we){let ke=Ve.getPositionOfLineAndCharacter(X.line,0);return U(ke,ke+X.character,Ve,we)}function Z(X,Ve,we,ke){let Pe=0,Ce=0;for(let Ie=X;Ie<Ve;Ie++){let Be=we.text.charCodeAt(Ie);if(!Yp(Be))break;Be===9?Ce+=ke.tabSize+Ce%ke.tabSize:Ce++,Pe++}return{column:Ce,character:Pe}}e.findFirstNonWhitespaceCharacterAndColumn=Z;function U(X,Ve,we,ke){return Z(X,Ve,we,ke).column}e.findFirstNonWhitespaceColumn=U;function re(X,Ve,we,ke,Pe){let Ce=we?we.kind:0;switch(Ve.kind){case 241:case 260:case 228:case 261:case 263:case 262:case 206:case 238:case 265:case 207:case 184:case 197:case 186:case 266:case 293:case 292:case 214:case 208:case 210:case 211:case 240:case 274:case 250:case 224:case 204:case 203:case 283:case 286:case 282:case 291:case 170:case 176:case 177:case 166:case 181:case 182:case 193:case 212:case 220:case 276:case 272:case 278:case 273:case 169:return!0;case 257:case 299:case 223:if(!X.indentMultiLineObjectLiteralBeginningOnBlankLine&&ke&&Ce===207)return ge(ke,we);if(Ve.kind===223&&ke&&we&&Ce===281){let Ie=ke.getLineAndCharacterOfPosition(xo(ke.text,Ve.pos)).line,Be=ke.getLineAndCharacterOfPosition(xo(ke.text,we.pos)).line;return Ie!==Be}if(Ve.kind!==223)return!0;break;case 243:case 244:case 246:case 247:case 245:case 242:case 259:case 215:case 171:case 173:case 174:case 175:return Ce!==238;case 216:return ke&&Ce===214?ge(ke,we):Ce!==238;case 275:return Ce!==276;case 269:return Ce!==270||!!we.namedBindings&&we.namedBindings.kind!==272;case 281:return Ce!==284;case 285:return Ce!==287;case 190:case 189:if(Ce===184||Ce===186)return!1;break}return Pe}e.nodeWillIndentChild=re;function le(X,Ve){switch(X){case 250:case 254:case 248:case 249:return Ve.kind!==238;default:return!1}}function _e(X,Ve,we,ke,Pe=!1){return re(X,Ve,we,ke,!1)&&!(Pe&&we&&le(we.kind,Ve))}e.shouldIndentChildNode=_e;function ge(X,Ve){let we=xo(X.text,Ve.pos),ke=X.getLineAndCharacterOfPosition(we).line,Pe=X.getLineAndCharacterOfPosition(Ve.end).line;return ke===Pe}})(X_||(X_={}))}}),tl={};Mo(tl,{FormattingContext:()=>dte,FormattingRequestKind:()=>ute,RuleAction:()=>_te,RuleFlags:()=>pte,SmartIndenter:()=>X_,anyContext:()=>VP,createTextRangeWithKind:()=>VG,formatDocument:()=>Wze,formatNodeGivenIndentation:()=>$ze,formatOnClosingCurly:()=>Hze,formatOnEnter:()=>Uze,formatOnOpeningCurly:()=>jze,formatOnSemicolon:()=>Vze,formatSelection:()=>zze,getAllRules:()=>PSe,getFormatContext:()=>wze,getFormattingScanner:()=>fte,getIndentationString:()=>Ite,getRangeOfEnclosingComment:()=>axe});var Vk=gt({\"src/services/_namespaces/ts.formatting.ts\"(){\"use strict\";eze(),tze(),nze(),Dze(),Bze(),eJe(),tJe()}}),Fr=gt({\"src/services/_namespaces/ts.ts\"(){\"use strict\";fa(),r7(),v6e(),K6e(),$6e(),l4e(),u4e(),d4e(),y4e(),L4e(),k4e(),w4e(),B4e(),V4e(),_3e(),m3e(),y3e(),E3e(),V3e(),Q3e(),Qa(),QZ(),KTe(),cUe(),_Ue(),wUe(),lye(),wye(),$Ue(),aVe(),Qm(),rWe(),kWe(),FWe(),UWe(),ZWe(),Vk()}});function nJe(){return kte??(kte=new r_(Rf))}function oxe(e,t,r,i,o){let s=t?\"DeprecationError: \":\"DeprecationWarning: \";return s+=`'${e}' `,s+=i?`has been deprecated since v${i}`:\"is deprecated\",s+=t?\" and can no longer be used.\":r?` and will no longer be usable after v${r}.`:\".\",s+=o?` ${jm(o,[e],0)}`:\"\",s}function rJe(e,t,r,i){let o=oxe(e,!0,t,r,i);return()=>{throw new TypeError(o)}}function iJe(e,t,r,i){let o=!1;return()=>{sxe&&!o&&(L.log.warn(oxe(e,!1,t,r,i)),o=!0)}}function aJe(e,t={}){var r,i;let o=typeof t.typeScriptVersion==\"string\"?new r_(t.typeScriptVersion):(r=t.typeScriptVersion)!=null?r:nJe(),s=typeof t.errorAfter==\"string\"?new r_(t.errorAfter):t.errorAfter,l=typeof t.warnAfter==\"string\"?new r_(t.warnAfter):t.warnAfter,f=typeof t.since==\"string\"?new r_(t.since):(i=t.since)!=null?i:l,d=t.error||s&&o.compareTo(s)>=0,g=!l||o.compareTo(l)>=0;return d?rJe(e,s,f,t.message):g?iJe(e,s,f,t.message):Ba}function oJe(e,t){return function(){return e(),t.apply(this,arguments)}}function Lte(e,t){var r;let i=aJe((r=t?.name)!=null?r:L.getFunctionName(e),t);return oJe(i,e)}var sxe,kte,cxe=gt({\"src/deprecatedCompat/deprecate.ts\"(){\"use strict\";HG(),sxe=!0}});function Dte(e,t,r,i){if(Object.defineProperty(s,\"name\",{...Object.getOwnPropertyDescriptor(s,\"name\"),value:e}),i)for(let l of Object.keys(i)){let f=+l;!isNaN(f)&&fs(t,`${f}`)&&(t[f]=Lte(t[f],{...i[f],name:e}))}let o=sJe(t,r);return s;function s(...l){let f=o(l),d=f!==void 0?t[f]:void 0;if(typeof d==\"function\")return d(...l);throw new TypeError(\"Invalid arguments\")}}function sJe(e,t){return r=>{for(let i=0;fs(e,`${i}`)&&fs(t,`${i}`);i++){let o=t[i];if(o(r))return i}}}function cJe(e){return{overload:t=>({bind:r=>({finish:()=>Dte(e,t,r),deprecate:i=>({finish:()=>Dte(e,t,r,i)})})})}}var lJe=gt({\"src/deprecatedCompat/deprecations.ts\"(){\"use strict\";HG(),cxe()}}),uJe=gt({\"src/deprecatedCompat/5.0/identifierProperties.ts\"(){\"use strict\";HG(),cxe(),fle(e=>{let t=e.getIdentifierConstructor();fs(t.prototype,\"originalKeywordKind\")||Object.defineProperty(t.prototype,\"originalKeywordKind\",{get:Lte(function(){return nb(this)},{name:\"originalKeywordKind\",since:\"5.0\",warnAfter:\"5.1\",errorAfter:\"5.2\",message:\"Use 'identifierToKeywordKind(identifier)' instead.\"})}),fs(t.prototype,\"isInJSDocNamespace\")||Object.defineProperty(t.prototype,\"isInJSDocNamespace\",{get:Lte(function(){return this.flags&2048?!0:void 0},{name:\"isInJSDocNamespace\",since:\"5.0\",warnAfter:\"5.1\",errorAfter:\"5.2\",message:\"Use '.parent' or the surrounding context to determine this instead.\"})})})}}),HG=gt({\"src/deprecatedCompat/_namespaces/ts.ts\"(){\"use strict\";fa(),lJe(),uJe()}}),lxe={};Mo(lxe,{ANONYMOUS:()=>X7,AccessFlags:()=>IV,AssertionLevel:()=>$U,AssignmentDeclarationKind:()=>PV,AssignmentKind:()=>YW,Associativity:()=>QW,BreakpointResolver:()=>x$,BuilderFileEmit:()=>Iq,BuilderProgramKind:()=>Lq,BuilderState:()=>pm,BundleFileSectionKind:()=>ej,CallHierarchy:()=>rx,CharacterCodes:()=>KV,CheckFlags:()=>TV,CheckMode:()=>_F,ClassificationType:()=>OX,ClassificationTypeNames:()=>RX,CommentDirectiveType:()=>oV,Comparison:()=>LU,CompletionInfoFlags:()=>AX,CompletionTriggerKind:()=>bX,Completions:()=>lx,ConfigFileProgramReloadLevel:()=>QK,ContextFlags:()=>_V,CoreServicesShimHostAdapter:()=>S$,Debug:()=>L,DiagnosticCategory:()=>nw,Diagnostics:()=>_,DocumentHighlights:()=>Q7,ElementFlags:()=>CV,EmitFlags:()=>U8,EmitHint:()=>$V,EmitOnly:()=>cV,EndOfLineState:()=>LX,EnumKind:()=>EV,ExitStatus:()=>uV,ExportKind:()=>GY,Extension:()=>qV,ExternalEmitHelpers:()=>YV,FileIncludeKind:()=>R8,FilePreprocessingDiagnosticsKind:()=>sV,FileSystemEntryKind:()=>oj,FileWatcherEventKind:()=>ij,FindAllReferences:()=>js,FlattenLevel:()=>RK,FlowFlags:()=>tw,ForegroundColorEscapeSequences:()=>pq,FunctionFlags:()=>$W,GeneratedIdentifierFlags:()=>w8,GetLiteralTextFlags:()=>KW,GoToDefinition:()=>xk,HighlightSpanKind:()=>TX,ImportKind:()=>FY,ImportsNotUsedAsValues:()=>VV,IndentStyle:()=>SX,IndexKind:()=>DV,InferenceFlags:()=>OV,InferencePriority:()=>RV,InlayHintKind:()=>EX,InlayHints:()=>fee,InternalEmitFlags:()=>XV,InternalSymbolName:()=>SV,InvalidatedProjectKind:()=>aX,JsDoc:()=>xb,JsTyping:()=>QT,JsxEmit:()=>UV,JsxFlags:()=>iV,JsxReferenceKind:()=>LV,LanguageServiceMode:()=>gX,LanguageServiceShimHostAdapter:()=>T$,LanguageVariant:()=>zV,LexicalEnvironmentFlags:()=>ZV,ListFormat:()=>tj,LogLevel:()=>ZU,MemberOverrideStatus:()=>dV,ModifierFlags:()=>k8,ModuleDetectionKind:()=>MV,ModuleInstanceState:()=>sK,ModuleKind:()=>F8,ModuleResolutionKind:()=>rw,ModuleSpecifierEnding:()=>lz,NavigateTo:()=>cye,NavigationBar:()=>Dye,NewLineKind:()=>jV,NodeBuilderFlags:()=>pV,NodeCheckFlags:()=>xV,NodeFactoryFlags:()=>mz,NodeFlags:()=>L8,NodeResolutionFeatures:()=>aK,ObjectFlags:()=>P8,OperationCanceledException:()=>tI,OperatorPrecedence:()=>ZW,OrganizeImports:()=>b_,OrganizeImportsMode:()=>vX,OuterExpressionKinds:()=>QV,OutliningElementsCollector:()=>See,OutliningSpanKind:()=>CX,OutputFileType:()=>IX,PackageJsonAutoImportPreference:()=>hX,PackageJsonDependencyGroup:()=>mX,PatternMatchKind:()=>n5,PollingInterval:()=>V8,PollingWatchKind:()=>BV,PragmaKindFlags:()=>nj,PrivateIdentifierKind:()=>Az,ProcessLevel:()=>MK,QuotePreference:()=>OY,RelationComparisonResult:()=>D8,Rename:()=>RG,ScriptElementKind:()=>DX,ScriptElementKindModifier:()=>wX,ScriptKind:()=>HV,ScriptSnapshot:()=>pX,ScriptTarget:()=>WV,SemanticClassificationFormat:()=>yX,SemanticMeaning:()=>RY,SemicolonPreference:()=>xX,SignatureCheckMode:()=>pF,SignatureFlags:()=>M8,SignatureHelp:()=>BP,SignatureKind:()=>kV,SmartSelectionRange:()=>ete,SnippetKind:()=>B8,SortKind:()=>XU,StructureIsReused:()=>lV,SymbolAccessibility:()=>gV,SymbolDisplay:()=>$g,SymbolDisplayPartKind:()=>IN,SymbolFlags:()=>O8,SymbolFormatFlags:()=>hV,SyntaxKind:()=>I8,SyntheticSymbolKind:()=>yV,Ternary:()=>NV,ThrottledCancellationToken:()=>g$,TokenClass:()=>kX,TokenFlags:()=>aV,TransformFlags:()=>G8,TypeFacts:()=>dF,TypeFlags:()=>N8,TypeFormatFlags:()=>mV,TypeMapKind:()=>wV,TypePredicateKind:()=>vV,TypeReferenceSerializationKind:()=>bV,TypeScriptServicesFactory:()=>eve,UnionReduction:()=>fV,UpToDateStatusType:()=>Wq,VarianceFlags:()=>AV,Version:()=>r_,VersionRange:()=>mA,WatchDirectoryFlags:()=>JV,WatchDirectoryKind:()=>GV,WatchFileKind:()=>FV,WatchLogLevel:()=>ZK,WatchType:()=>Hf,accessPrivateIdentifier:()=>$_e,addEmitFlags:()=>bp,addEmitHelper:()=>xS,addEmitHelpers:()=>Bg,addInternalEmitFlags:()=>SS,addNodeFactoryPatcher:()=>ARe,addObjectAllocatorPatcher:()=>fle,addRange:()=>si,addRelatedInfo:()=>Ao,addSyntheticLeadingComment:()=>nO,addSyntheticTrailingComment:()=>R4,addToSeen:()=>V_,advancedAsyncSuperHelper:()=>sO,affectsDeclarationPathOptionDeclarations:()=>FJ,affectsEmitOptionDeclarations:()=>MJ,allKeysStartWithDot:()=>nF,altDirectorySeparator:()=>pw,and:()=>g8,append:()=>Sn,appendIfUnique:()=>xg,arrayFrom:()=>lo,arrayIsEqualTo:()=>up,arrayIsHomogeneous:()=>Fle,arrayIsSorted:()=>dae,arrayOf:()=>mae,arrayReverseIterator:()=>Cke,arrayToMap:()=>p0,arrayToMultiMap:()=>KD,arrayToNumericMap:()=>gae,arraysEqual:()=>GD,assertType:()=>Pke,assign:()=>JD,assignHelper:()=>B4,asyncDelegator:()=>V4,asyncGeneratorHelper:()=>U4,asyncSuperHelper:()=>oO,asyncValues:()=>j4,attachFileToDiagnostics:()=>vS,awaitHelper:()=>AS,awaiterHelper:()=>W4,base64decode:()=>nle,base64encode:()=>tle,binarySearch:()=>Py,binarySearchKey:()=>j1,bindSourceFile:()=>c_e,breakIntoCharacterSpans:()=>Hge,breakIntoWordSpans:()=>Wge,buildLinkParts:()=>Qhe,buildOpts:()=>j3,buildOverload:()=>cJe,bundlerModuleNameResolver:()=>Wfe,canBeConvertedToAsync:()=>e$,canHaveDecorators:()=>HS,canHaveExportModifier:()=>WR,canHaveFlowNode:()=>cR,canHaveIllegalDecorators:()=>aJ,canHaveIllegalModifiers:()=>cde,canHaveIllegalType:()=>mOe,canHaveIllegalTypeParameters:()=>sde,canHaveJSDoc:()=>lR,canHaveLocals:()=>Qp,canHaveModifiers:()=>g_,canHaveSymbol:()=>$p,canJsonReportNoInputFiles:()=>FO,canProduceDiagnostics:()=>xF,canUsePropertyAccess:()=>HW,canWatchDirectoryOrFile:()=>vN,cartesianProduct:()=>Rae,cast:()=>Ga,chainBundle:()=>y_,chainDiagnosticMessages:()=>da,changeAnyExtension:()=>uj,changeCompilerHostLikeToUseCache:()=>pN,changeExtension:()=>V0,changesAffectModuleResolution:()=>eH,changesAffectingProgramStructure:()=>Ise,childIsDecorated:()=>kI,classElementOrClassElementParameterIsDecorated:()=>AH,classOrConstructorParameterIsDecorated:()=>O0,classPrivateFieldGetHelper:()=>n3,classPrivateFieldInHelper:()=>i3,classPrivateFieldSetHelper:()=>r3,classicNameResolver:()=>o_e,classifier:()=>T5,cleanExtendedConfigCache:()=>$K,clear:()=>Om,clearMap:()=>Tf,clearSharedExtendedConfigFileWatcher:()=>Fpe,climbPastPropertyAccess:()=>o7,climbPastPropertyOrElementAccess:()=>ghe,clone:()=>VU,cloneCompilerOptions:()=>Mhe,closeFileWatcher:()=>am,closeFileWatcherOf:()=>_m,codefix:()=>gu,collapseTextChangeRangesAcrossMultipleVersions:()=>GDe,collectExternalModuleInfo:()=>xK,combine:()=>_A,combinePaths:()=>vi,commentPragmas:()=>iw,commonOptionsWithBuild:()=>WO,commonPackageFolders:()=>nz,compact:()=>WD,compareBooleans:()=>g0,compareDataObjects:()=>gW,compareDiagnostics:()=>ZI,compareDiagnosticsSkipRelatedInformation:()=>c4,compareEmitHelpers:()=>Sue,compareNumberOfDirectorySeparators:()=>BR,comparePaths:()=>cT,comparePathsCaseInsensitive:()=>LDe,comparePathsCaseSensitive:()=>IDe,comparePatternKeys:()=>tK,compareProperties:()=>Cae,compareStringsCaseInsensitive:()=>_8,compareStringsCaseInsensitiveEslintCompatible:()=>Sae,compareStringsCaseSensitive:()=>su,compareStringsCaseSensitiveUI:()=>XD,compareTextSpans:()=>f8,compareValues:()=>Es,compileOnSaveCommandLineOption:()=>UO,compilerOptionsAffectDeclarationPath:()=>Cle,compilerOptionsAffectEmit:()=>Ale,compilerOptionsAffectSemanticDiagnostics:()=>xle,compilerOptionsDidYouMeanDiagnostics:()=>JO,compilerOptionsIndicateEsModules:()=>aY,compose:()=>Rke,computeCommonSourceDirectoryOfFilenames:()=>jpe,computeLineAndCharacterOfPosition:()=>yw,computeLineOfPosition:()=>aI,computeLineStarts:()=>hw,computePositionOfLineAndCharacter:()=>mj,computeSignature:()=>YT,computeSignatureWithDiagnostics:()=>Tq,computeSuggestionDiagnostics:()=>$Y,concatenate:()=>Qi,concatenateDiagnosticMessageChains:()=>gle,consumesNodeCoreModules:()=>V7,contains:()=>ya,containsIgnoredPath:()=>sL,containsObjectRestOrSpread:()=>IO,containsParseError:()=>Gw,containsPath:()=>Gy,convertCompilerOptionsForTelemetry:()=>TNe,convertCompilerOptionsFromJson:()=>mNe,convertJsonOption:()=>GO,convertToBase64:()=>ele,convertToObject:()=>rfe,convertToObjectWorker:()=>PO,convertToOptionsWithAbsolutePaths:()=>SJ,convertToRelativePath:()=>rI,convertToTSConfig:()=>tNe,convertTypeAcquisitionFromJson:()=>hNe,copyComments:()=>r1,copyEntries:()=>Mw,copyLeadingComments:()=>q2,copyProperties:()=>jU,copyTrailingAsLeadingComments:()=>qN,copyTrailingComments:()=>sk,couldStartTrivia:()=>hoe,countWhere:()=>Oy,createAbstractBuilder:()=>S8e,createAccessorPropertyBackingField:()=>sJ,createAccessorPropertyGetRedirector:()=>gde,createAccessorPropertySetRedirector:()=>yde,createBaseNodeFactory:()=>oue,createBinaryExpressionTrampoline:()=>C3,createBindingHelper:()=>d2,createBuildInfo:()=>dN,createBuilderProgram:()=>Sq,createBuilderProgramUsingProgramBuildInfo:()=>dme,createBuilderStatusReporter:()=>Ame,createCacheWithRedirects:()=>KJ,createCacheableExportInfoMap:()=>Tge,createCachedDirectoryStructureHost:()=>Mpe,createClassifier:()=>Age,createCommentDirectivesMap:()=>Gse,createCompilerDiagnostic:()=>ps,createCompilerDiagnosticForInvalidCustomType:()=>pJ,createCompilerDiagnosticFromMessageChain:()=>s4,createCompilerHost:()=>Hpe,createCompilerHostFromProgramHost:()=>Bq,createCompilerHostWorker:()=>nq,createDetachedDiagnostic:()=>t2,createDiagnosticCollection:()=>XA,createDiagnosticForFileFromMessageChain:()=>yH,createDiagnosticForNode:()=>hr,createDiagnosticForNodeArray:()=>RA,createDiagnosticForNodeArrayFromMessageChain:()=>jw,createDiagnosticForNodeFromMessageChain:()=>Lh,createDiagnosticForNodeInSourceFile:()=>Nu,createDiagnosticForRange:()=>vH,createDiagnosticMessageChainFromDiagnostic:()=>qse,createDiagnosticReporter:()=>bN,createDocumentPositionMapper:()=>H_e,createDocumentRegistry:()=>VY,createDocumentRegistryInternal:()=>Rge,createEmitAndSemanticDiagnosticsBuilderProgram:()=>kq,createEmitHelperFactory:()=>Tue,createEmptyExports:()=>bO,createExpressionForJsxElement:()=>Que,createExpressionForJsxFragment:()=>Zue,createExpressionForObjectLiteralElementLike:()=>ede,createExpressionForPropertyName:()=>Zz,createExpressionFromEntityName:()=>EO,createExternalHelpersImportDeclarationIfNeeded:()=>nJ,createFileDiagnostic:()=>al,createFileDiagnosticFromMessageChain:()=>S6,createForOfBindingStatement:()=>Qz,createGetCanonicalFileName:()=>Dl,createGetSourceFile:()=>eq,createGetSymbolAccessibilityDiagnosticForNode:()=>zg,createGetSymbolAccessibilityDiagnosticForNodeName:()=>Epe,createGetSymbolWalker:()=>f_e,createIncrementalCompilerHost:()=>jq,createIncrementalProgram:()=>xme,createInputFiles:()=>RRe,createInputFilesWithFilePaths:()=>_z,createInputFilesWithFileTexts:()=>pz,createJsxFactoryExpression:()=>$z,createLanguageService:()=>Bye,createLanguageServiceSourceFile:()=>f5,createMemberAccessForPropertyName:()=>VT,createModeAwareCache:()=>WT,createModeAwareCacheKey:()=>ML,createModuleResolutionCache:()=>Y3,createModuleResolutionLoader:()=>cq,createModuleSpecifierResolutionHost:()=>$S,createMultiMap:()=>Nf,createNodeConverters:()=>cue,createNodeFactory:()=>YR,createOptionNameMap:()=>R3,createOverload:()=>Dte,createPackageJsonImportFilter:()=>uk,createPackageJsonInfo:()=>uge,createParenthesizerRules:()=>sue,createPatternMatcher:()=>Fge,createPrependNodes:()=>fq,createPrinter:()=>nE,createPrinterWithDefaults:()=>qK,createPrinterWithRemoveComments:()=>rE,createPrinterWithRemoveCommentsNeverAsciiEscape:()=>XK,createPrinterWithRemoveCommentsOmitTrailingSemicolon:()=>fN,createProgram:()=>PF,createProgramHost:()=>Uq,createPropertyNameNodeForIdentifierOrLiteral:()=>E4,createQueue:()=>HU,createRange:()=>Gf,createRedirectedBuilderProgram:()=>Cq,createResolutionCache:()=>fme,createRuntimeTypeSerializer:()=>npe,createScanner:()=>kg,createSemanticDiagnosticsBuilderProgram:()=>T8e,createSet:()=>Dke,createSolutionBuilder:()=>U8e,createSolutionBuilderHost:()=>F8e,createSolutionBuilderWithWatch:()=>V8e,createSolutionBuilderWithWatchHost:()=>G8e,createSortedArray:()=>MU,createSourceFile:()=>DO,createSourceMapGenerator:()=>M_e,createSourceMapSource:()=>ORe,createSuperAccessVariableStatement:()=>SF,createSymbolTable:()=>Ua,createSymlinkCache:()=>Ile,createSystemWatchFunctions:()=>loe,createTextChange:()=>GN,createTextChangeFromStartLength:()=>v7,createTextChangeRange:()=>Sw,createTextRangeFromNode:()=>nY,createTextRangeFromSpan:()=>y7,createTextSpan:()=>il,createTextSpanFromBounds:()=>Wc,createTextSpanFromNode:()=>Du,createTextSpanFromRange:()=>lv,createTextSpanFromStringLiteralLikeContent:()=>tY,createTextWriter:()=>SR,createTokenRange:()=>_W,createTypeChecker:()=>k_e,createTypeReferenceDirectiveResolutionCache:()=>$3,createTypeReferenceResolutionLoader:()=>OF,createUnderscoreEscapedMultiMap:()=>vae,createUnparsedSourceFile:()=>fz,createWatchCompilerHost:()=>R8e,createWatchCompilerHostOfConfigFile:()=>Tme,createWatchCompilerHostOfFilesAndCompilerOptions:()=>Sme,createWatchFactory:()=>Gq,createWatchHost:()=>Fq,createWatchProgram:()=>O8e,createWatchStatusReporter:()=>pme,createWriteFileMeasuringIO:()=>tq,declarationNameToString:()=>os,decodeMappings:()=>EK,decodedTextSpanIntersectsWith:()=>Q8,decorateHelper:()=>N4,deduplicate:()=>fA,defaultIncludeSpec:()=>z3,defaultInitCompilerOptions:()=>W3,defaultMaximumTruncationLength:()=>KR,detectSortCaseSensitivity:()=>l8,diagnosticCategoryName:()=>C8,diagnosticToString:()=>ZS,directoryProbablyExists:()=>gp,directorySeparator:()=>_s,displayPart:()=>Qu,displayPartsToString:()=>Mye,disposeEmitNodes:()=>yz,documentSpansEqual:()=>P6e,dumpTracingLegend:()=>toe,elementAt:()=>Ig,elideNodes:()=>hde,emitComments:()=>Vce,emitDetachedComments:()=>jce,emitFiles:()=>CF,emitFilesAndReportErrors:()=>qF,emitFilesAndReportErrorsAndGetExitStatus:()=>vme,emitModuleKindIsNonNodeESM:()=>SW,emitNewLineBeforeLeadingCommentOfPosition:()=>Uce,emitNewLineBeforeLeadingComments:()=>Gce,emitNewLineBeforeLeadingCommentsOfPosition:()=>Bce,emitSkippedWithNoDiagnostics:()=>HF,emitUsingBuildInfo:()=>Ppe,emptyArray:()=>Je,emptyFileSystemEntries:()=>D4,emptyMap:()=>b8,emptyOptions:()=>Cp,emptySet:()=>Pae,endsWith:()=>Oc,ensurePathIsNonModuleName:()=>S0,ensureScriptKind:()=>h4,ensureTrailingDirectorySeparator:()=>cu,entityNameToString:()=>qd,enumerateInsertsAndDeletes:()=>wae,equalOwnProperties:()=>hae,equateStringsCaseInsensitive:()=>W1,equateStringsCaseSensitive:()=>z1,equateValues:()=>Zv,esDecorateHelper:()=>F4,escapeJsxAttributeString:()=>qH,escapeLeadingUnderscores:()=>Bs,escapeNonAsciiString:()=>ER,escapeSnippetText:()=>OT,escapeString:()=>_S,every:()=>Ji,expandPreOrPostfixIncrementOrDecrementExpression:()=>b3,explainFiles:()=>yme,explainIfFileIsRedirectAndImpliedFormat:()=>Oq,exportAssignmentIsAlias:()=>zA,exportStarHelper:()=>t3,expressionResultIsUnused:()=>Ble,extend:()=>d8,extendsHelper:()=>z4,extensionFromPath:()=>jR,extensionIsTS:()=>y4,externalHelpersModuleNameText:()=>_b,factory:()=>D,fileExtensionIs:()=>Gc,fileExtensionIsOneOf:()=>$c,fileIncludeReasonToDiagnostics:()=>Mq,filter:()=>Pr,filterMutate:()=>wU,filterSemanticDiagnostics:()=>MF,find:()=>wr,findAncestor:()=>jn,findBestPatternMatch:()=>JU,findChildOfKind:()=>Yo,findComputedPropertyNameCacheAssignment:()=>L3,findConfigFile:()=>Vpe,findContainingList:()=>d7,findDiagnosticForNode:()=>fge,findFirstNonJsxWhitespaceToken:()=>Ihe,findIndex:()=>Yc,findLast:()=>dA,findLastIndex:()=>s8,findListItemInfo:()=>Ehe,findMap:()=>vke,findModifier:()=>z2,findNextToken:()=>t1,findPackageJson:()=>cge,findPackageJsons:()=>AY,findPrecedingMatchingToken:()=>h7,findPrecedingToken:()=>el,findSuperStatementIndex:()=>bF,findTokenOnLeftOfPosition:()=>p7,findUseStrictPrologue:()=>tJ,first:()=>Vo,firstDefined:()=>ks,firstDefinedIterator:()=>FD,firstIterator:()=>pae,firstOrOnly:()=>LY,firstOrUndefined:()=>Sl,firstOrUndefinedIterator:()=>u8,fixupCompilerOptions:()=>t$,flatMap:()=>Uo,flatMapIterator:()=>OU,flatMapToMutable:()=>BD,flatten:()=>t_,flattenCommaList:()=>vde,flattenDestructuringAssignment:()=>KT,flattenDestructuringBinding:()=>eE,flattenDiagnosticMessageText:()=>sv,forEach:()=>mn,forEachAncestor:()=>Lse,forEachAncestorDirectory:()=>Th,forEachChild:()=>pa,forEachChildRecursively:()=>kO,forEachEmittedFile:()=>WK,forEachEnclosingBlockScopeContainer:()=>Jse,forEachEntry:()=>Ld,forEachExternalModuleToImportFrom:()=>MY,forEachImportClauseDeclaration:()=>z6,forEachKey:()=>TI,forEachLeadingCommentRange:()=>vw,forEachNameInAccessChainWalkingLeft:()=>Xwe,forEachResolvedProjectReference:()=>Kpe,forEachReturnStatement:()=>vT,forEachRight:()=>sae,forEachTrailingCommentRange:()=>bw,forEachUnique:()=>lY,forEachYieldExpression:()=>Yse,forSomeAncestorDirectory:()=>qwe,formatColorAndReset:()=>iE,formatDiagnostic:()=>rq,formatDiagnostics:()=>e8e,formatDiagnosticsWithColorAndContext:()=>Jpe,formatGeneratedName:()=>jT,formatGeneratedNamePart:()=>L2,formatLocation:()=>iq,formatMessage:()=>TW,formatStringFromArgs:()=>jm,formatting:()=>tl,fullTripleSlashAMDReferencePathRegEx:()=>XW,fullTripleSlashReferencePathRegEx:()=>qW,generateDjb2Hash:()=>aw,generateTSConfig:()=>oNe,generatorHelper:()=>Q4,getAdjustedReferenceLocation:()=>zX,getAdjustedRenameLocation:()=>_7,getAliasDeclarationFromName:()=>BH,getAllAccessorDeclarations:()=>kT,getAllDecoratorsOfClass:()=>LK,getAllDecoratorsOfClassElement:()=>TF,getAllJSDocTags:()=>kj,getAllJSDocTagsOfKind:()=>KDe,getAllKeys:()=>Ike,getAllProjectOutputs:()=>AF,getAllSuperTypeNodes:()=>NI,getAllUnscopedEmitHelpers:()=>xz,getAllowJSCompilerOption:()=>PR,getAllowSyntheticDefaultImports:()=>wT,getAncestor:()=>cb,getAnyExtensionFromPath:()=>j8,getAreDeclarationMapsEnabled:()=>d4,getAssignedExpandoInitializer:()=>oS,getAssignedName:()=>xj,getAssignmentDeclarationKind:()=>ic,getAssignmentDeclarationPropertyAccessKind:()=>tR,getAssignmentTargetKind:()=>xT,getAutomaticTypeDirectiveNames:()=>X3,getBaseFileName:()=>Hl,getBinaryOperatorPrecedence:()=>vR,getBuildInfo:()=>IF,getBuildInfoFileVersionMap:()=>Aq,getBuildInfoText:()=>Npe,getBuildOrderFromAnyBuildOrder:()=>ZF,getBuilderCreationParameters:()=>zF,getBuilderFileEmit:()=>cv,getCheckFlags:()=>ac,getClassExtendsHeritageElement:()=>P0,getClassLikeDeclarationOfSymbol:()=>Nh,getCombinedLocalAndExportSymbolFlags:()=>XI,getCombinedModifierFlags:()=>wg,getCombinedNodeFlags:()=>G_,getCombinedNodeFlagsAlwaysIncludeJSDoc:()=>Tj,getCommentRange:()=>sm,getCommonSourceDirectory:()=>uN,getCommonSourceDirectoryOfConfig:()=>XL,getCompilerOptionValue:()=>f4,getCompilerOptionsDiffValue:()=>aNe,getConditions:()=>P2,getConfigFileParsingDiagnostics:()=>XT,getConstantValue:()=>mue,getContainerNode:()=>e1,getContainingClass:()=>Zc,getContainingClassStaticBlock:()=>gwe,getContainingFunction:()=>Xd,getContainingFunctionDeclaration:()=>ice,getContainingFunctionOrClassStaticBlock:()=>R6,getContainingNodeArray:()=>Ule,getContainingObjectLiteralElement:()=>nP,getContextualTypeFromParent:()=>w7,getContextualTypeFromParentOrAncestorTypeNode:()=>f7,getCurrentTime:()=>SN,getDeclarationDiagnostics:()=>Tpe,getDeclarationEmitExtensionForPath:()=>QH,getDeclarationEmitOutputFilePath:()=>Rce,getDeclarationEmitOutputFilePathWorker:()=>$H,getDeclarationFromName:()=>fR,getDeclarationModifierFlagsFromSymbol:()=>Ef,getDeclarationOfKind:()=>nc,getDeclarationsOfKind:()=>Ase,getDeclaredExpandoInitializer:()=>$w,getDecorators:()=>Uy,getDefaultCompilerOptions:()=>d5,getDefaultExportInfoWorker:()=>$7,getDefaultFormatCodeSettings:()=>fhe,getDefaultLibFileName:()=>X8,getDefaultLibFilePath:()=>f3e,getDefaultLikeExportInfo:()=>Y7,getDiagnosticText:()=>ZOe,getDiagnosticsWithinSpan:()=>_ge,getDirectoryPath:()=>ni,getDocumentPositionMapper:()=>Yge,getESModuleInterop:()=>f_,getEditsForFileRename:()=>Nge,getEffectiveBaseTypeNode:()=>hp,getEffectiveConstraintOfTypeParameter:()=>EA,getEffectiveContainerForJSDocTemplateTag:()=>J6,getEffectiveImplementsTypeNodes:()=>JA,getEffectiveInitializer:()=>Yw,getEffectiveJSDocHost:()=>WA,getEffectiveModifierFlags:()=>uu,getEffectiveModifierFlagsAlwaysIncludeJSDoc:()=>Jce,getEffectiveModifierFlagsNoCache:()=>qce,getEffectiveReturnTypeNode:()=>U_,getEffectiveSetAccessorTypeAnnotationNode:()=>Fce,getEffectiveTypeAnnotationNode:()=>Cl,getEffectiveTypeParameterDeclarations:()=>jy,getEffectiveTypeRoots:()=>XO,getElementOrPropertyAccessArgumentExpressionOrName:()=>W6,getElementOrPropertyAccessName:()=>wh,getElementsOfBindingOrAssignmentPattern:()=>I2,getEmitDeclarations:()=>__,getEmitFlags:()=>Ya,getEmitHelpers:()=>O4,getEmitModuleDetectionKind:()=>Ele,getEmitModuleKind:()=>Rl,getEmitModuleResolutionKind:()=>$s,getEmitScriptTarget:()=>Do,getEnclosingBlockScopeContainer:()=>tm,getEncodedSemanticClassifications:()=>BY,getEncodedSyntacticClassifications:()=>UY,getEndLinePosition:()=>Bw,getEntityNameFromTypeNode:()=>Jw,getEntrypointsFromPackageJsonInfo:()=>zNe,getErrorCountForSummary:()=>JF,getErrorSpanForNode:()=>w0,getErrorSummaryText:()=>hme,getEscapedTextOfIdentifierOrLiteral:()=>MI,getExpandoInitializer:()=>ob,getExportAssignmentExpression:()=>UH,getExportInfoMap:()=>YN,getExportNeedsImportStarHelper:()=>z_e,getExpressionAssociativity:()=>WH,getExpressionPrecedence:()=>$6,getExternalHelpersModuleName:()=>SO,getExternalModuleImportEqualsDeclarationExpression:()=>wI,getExternalModuleName:()=>UA,getExternalModuleNameFromDeclaration:()=>Dce,getExternalModuleNameFromPath:()=>YH,getExternalModuleNameLiteral:()=>jS,getExternalModuleRequireArgument:()=>IH,getFallbackOptions:()=>_N,getFileEmitOutput:()=>Ype,getFileMatcherPatterns:()=>tL,getFileNamesFromConfigSpecs:()=>BO,getFileWatcherEventKind:()=>aoe,getFilesInErrorForSummary:()=>KF,getFirstConstructorWithBody:()=>Vm,getFirstIdentifier:()=>Yd,getFirstNonSpaceCharacterPosition:()=>nge,getFirstProjectOutput:()=>JK,getFixableErrorSpanExpression:()=>IY,getFormatCodeSettingsForWriting:()=>z7,getFullWidth:()=>Fw,getFunctionFlags:()=>pl,getHeritageClause:()=>mR,getHostSignatureFromJSDoc:()=>sb,getIdentifierAutoGenerate:()=>BRe,getIdentifierGeneratedImportReference:()=>Eue,getIdentifierTypeArguments:()=>NT,getImmediatelyInvokedFunctionExpression:()=>ET,getImpliedNodeFormatForFile:()=>NF,getImpliedNodeFormatForFileWorker:()=>uq,getImportNeedsImportDefaultHelper:()=>SK,getImportNeedsImportStarHelper:()=>vF,getIndentSize:()=>YA,getIndentString:()=>Q6,getInitializedVariables:()=>qI,getInitializerOfBinaryExpression:()=>OH,getInitializerOfBindingOrAssignmentElement:()=>AO,getInterfaceBaseTypeNodes:()=>PI,getInternalEmitFlags:()=>o_,getInvokedExpression:()=>P6,getIsolatedModules:()=>d_,getJSDocAugmentsTag:()=>Koe,getJSDocClassTag:()=>Aj,getJSDocCommentRanges:()=>EH,getJSDocCommentsAndTags:()=>PH,getJSDocDeprecatedTag:()=>Cj,getJSDocDeprecatedTagNoCache:()=>ese,getJSDocEnumTag:()=>Ij,getJSDocHost:()=>dS,getJSDocImplementsTags:()=>qoe,getJSDocOverrideTagNoCache:()=>Zoe,getJSDocParameterTags:()=>fI,getJSDocParameterTagsNoCache:()=>joe,getJSDocPrivateTag:()=>jDe,getJSDocPrivateTagNoCache:()=>Yoe,getJSDocProtectedTag:()=>HDe,getJSDocProtectedTagNoCache:()=>$oe,getJSDocPublicTag:()=>VDe,getJSDocPublicTagNoCache:()=>Xoe,getJSDocReadonlyTag:()=>WDe,getJSDocReadonlyTagNoCache:()=>Qoe,getJSDocReturnTag:()=>tse,getJSDocReturnType:()=>Aw,getJSDocRoot:()=>OI,getJSDocSatisfiesExpressionType:()=>JW,getJSDocSatisfiesTag:()=>Lj,getJSDocTags:()=>A0,getJSDocTagsNoCache:()=>JDe,getJSDocTemplateTag:()=>zDe,getJSDocThisTag:()=>e6,getJSDocType:()=>Vy,getJSDocTypeAliasName:()=>iJ,getJSDocTypeAssertionType:()=>T3,getJSDocTypeParameterDeclarations:()=>t4,getJSDocTypeParameterTags:()=>Woe,getJSDocTypeParameterTagsNoCache:()=>zoe,getJSDocTypeTag:()=>x0,getJSXImplicitImportBase:()=>_4,getJSXRuntimeImport:()=>p4,getJSXTransformEnabled:()=>AW,getKeyForCompilerOptions:()=>JJ,getLanguageVariant:()=>RR,getLastChild:()=>yW,getLeadingCommentRanges:()=>Nm,getLeadingCommentRangesOfNode:()=>bH,getLeftmostAccessExpression:()=>$I,getLeftmostExpression:()=>QI,getLineAndCharacterOfPosition:()=>Gs,getLineInfo:()=>F_e,getLineOfLocalPosition:()=>UI,getLineOfLocalPositionFromLineMap:()=>IT,getLineStartPositionForPosition:()=>Wf,getLineStarts:()=>Sh,getLinesBetweenPositionAndNextNonWhitespaceCharacter:()=>sle,getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter:()=>ole,getLinesBetweenPositions:()=>oI,getLinesBetweenRangeEndAndRangeStart:()=>pW,getLinesBetweenRangeEndPositions:()=>Wwe,getLiteralText:()=>Bse,getLocalNameForExternalImport:()=>C2,getLocalSymbolForExportDefault:()=>QA,getLocaleSpecificMessage:()=>uo,getLocaleTimeString:()=>EN,getMappedContextSpan:()=>zhe,getMappedDocumentSpan:()=>uY,getMappedLocation:()=>WN,getMatchedFileSpec:()=>Nq,getMatchedIncludeSpec:()=>Pq,getMeaningFromDeclaration:()=>LN,getMeaningFromLocation:()=>ZT,getMembersOfDeclaration:()=>$se,getModeForFileReference:()=>mN,getModeForResolutionAtIndex:()=>aq,getModeForUsageLocation:()=>W_,getModifiedTime:()=>$1,getModifiers:()=>uT,getModuleInstanceState:()=>Gh,getModuleNameStringLiteralAt:()=>GF,getModuleSpecifierEndingPreference:()=>OW,getModuleSpecifierResolverHost:()=>oY,getNameForExportedSymbol:()=>j7,getNameFromIndexInfo:()=>Kse,getNameFromPropertyName:()=>VN,getNameOfAccessExpression:()=>ule,getNameOfCompilerOptionValue:()=>EJ,getNameOfDeclaration:()=>sa,getNameOfExpando:()=>wH,getNameOfJSDocTypedef:()=>Uoe,getNameOrArgument:()=>eR,getNameTable:()=>p$,getNamesForExportedSymbol:()=>mge,getNamespaceDeclarationNode:()=>VA,getNewLineCharacter:()=>db,getNewLineKind:()=>XN,getNewLineOrDefaultFromHost:()=>bb,getNewTargetContainer:()=>oce,getNextJSDocCommentLocation:()=>MH,getNodeForGeneratedName:()=>I3,getNodeId:()=>zo,getNodeKind:()=>aE,getNodeModifiers:()=>rk,getNodeModulePathParts:()=>jW,getNonAssignedNameOfDeclaration:()=>Sj,getNonAssignmentOperatorForCompoundAssignment:()=>WL,getNonAugmentationDeclaration:()=>dH,getNonDecoratorTokenPosOfNode:()=>aH,getNormalizedAbsolutePath:()=>_a,getNormalizedAbsolutePathWithoutRoot:()=>lj,getNormalizedPathComponents:()=>fw,getObjectFlags:()=>Ur,getOperator:()=>JH,getOperatorAssociativity:()=>zH,getOperatorPrecedence:()=>yR,getOptionFromName:()=>gJ,getOptionsNameMap:()=>w2,getOrCreateEmitNode:()=>Lu,getOrCreateExternalHelpersModuleNameIfNeeded:()=>ade,getOrUpdate:()=>VD,getOriginalNode:()=>ec,getOriginalNodeId:()=>sc,getOriginalSourceFile:()=>wwe,getOutputDeclarationFileName:()=>qL,getOutputExtension:()=>zK,getOutputFileNames:()=>BMe,getOutputPathsFor:()=>KL,getOutputPathsForBundle:()=>JL,getOwnEmitOutputFilePath:()=>wce,getOwnKeys:()=>bh,getOwnValues:()=>H1,getPackageJsonInfo:()=>KS,getPackageJsonTypesVersionsPaths:()=>q3,getPackageJsonsVisibleToFile:()=>lge,getPackageNameFromTypesPackageName:()=>ZO,getPackageScopeForPath:()=>eF,getParameterSymbolFromJSDoc:()=>uR,getParameterTypeNode:()=>bRe,getParentNodeInSpan:()=>HN,getParseTreeNode:()=>ea,getParsedCommandLineOfConfigFile:()=>RO,getPathComponents:()=>Ou,getPathComponentsRelativeTo:()=>_j,getPathFromPathComponents:()=>T0,getPathUpdater:()=>jY,getPathsBasePath:()=>ZH,getPatternFromSpec:()=>kW,getPendingEmitKind:()=>G2,getPositionOfLineAndCharacter:()=>gw,getPossibleGenericSignatures:()=>XX,getPossibleOriginalInputExtensionForExtension:()=>Oce,getPossibleTypeArgumentsInfo:()=>YX,getPreEmitDiagnostics:()=>ZMe,getPrecedingNonSpaceCharacterPosition:()=>hY,getPrivateIdentifier:()=>kK,getProperties:()=>CK,getProperty:()=>zD,getPropertyArrayElementValue:()=>rce,getPropertyAssignment:()=>MA,getPropertyAssignmentAliasLikeExpression:()=>xce,getPropertyNameForPropertyNameNode:()=>M0,getPropertyNameForUniqueESSymbol:()=>kwe,getPropertyNameOfBindingOrAssignmentElement:()=>rJ,getPropertySymbolFromBindingElement:()=>I7,getPropertySymbolsFromContextualType:()=>_5,getQuoteFromPreference:()=>Hhe,getQuotePreference:()=>J_,getRangesWhere:()=>PU,getRefactorContextSpan:()=>QS,getReferencedFileLocation:()=>YL,getRegexFromPattern:()=>Qy,getRegularExpressionForWildcard:()=>eL,getRegularExpressionsForWildcards:()=>m4,getRelativePathFromDirectory:()=>Xp,getRelativePathFromFile:()=>_w,getRelativePathToDirectoryOrUrl:()=>Q1,getRenameLocation:()=>KN,getReplacementSpanForContextToken:()=>eY,getResolutionDiagnostic:()=>_q,getResolutionModeOverrideForClause:()=>qS,getResolveJsonModule:()=>RT,getResolvePackageJsonExports:()=>xW,getResolvePackageJsonImports:()=>oRe,getResolvedExternalModuleName:()=>Z6,getResolvedModule:()=>kA,getResolvedTypeReferenceDirective:()=>iwe,getRestIndicatorOfBindingOrAssignmentElement:()=>x3,getRestParameterElementType:()=>SH,getRightMostAssignedExpression:()=>Qw,getRootDeclaration:()=>nm,getRootLength:()=>_p,getScriptKind:()=>mY,getScriptKindFromFileName:()=>RW,getScriptTargetFeatures:()=>oH,getSelectedEffectiveModifierFlags:()=>hS,getSelectedSyntacticModifierFlags:()=>zce,getSemanticClassifications:()=>Cge,getSemanticJsxChildren:()=>bR,getSetAccessorTypeAnnotationNode:()=>Pce,getSetAccessorValueParameter:()=>VI,getSetExternalModuleIndicator:()=>OR,getShebang:()=>K8,getSingleInitializerOfVariableStatementOrPropertyDeclaration:()=>NH,getSingleVariableOfVariableStatement:()=>HA,getSnapshotText:()=>E7,getSnippetElement:()=>bz,getSourceFileOfModule:()=>m6,getSourceFileOfNode:()=>Gn,getSourceFilePathInNewDir:()=>e4,getSourceFilePathInNewDirWorker:()=>tW,getSourceFileVersionAsHashFromText:()=>XF,getSourceFilesToEmit:()=>eW,getSourceMapRange:()=>pb,getSourceMapper:()=>Xge,getSourceTextOfNodeFromSourceFile:()=>k0,getSpanOfTokenAtPosition:()=>Pg,getSpellingSuggestion:()=>$C,getStartPositionOfLine:()=>Ky,getStartPositionOfRange:()=>KI,getStartsOnNewLine:()=>tO,getStaticPropertiesAndClassStaticBlock:()=>EF,getStrictOptionValue:()=>Uf,getStringComparer:()=>p8,getSuperCallFromStatement:()=>AK,getSuperContainer:()=>Ww,getSupportedCodeFixes:()=>Fye,getSupportedExtensions:()=>nL,getSupportedExtensionsWithJsonIfResolveJsonModule:()=>FR,getSwitchedType:()=>TY,getSymbolId:()=>$a,getSymbolNameForPrivateIdentifier:()=>hR,getSymbolTarget:()=>ege,getSyntacticClassifications:()=>Dge,getSyntacticModifierFlags:()=>Yy,getSyntacticModifierFlagsNoCache:()=>sW,getSynthesizedDeepClone:()=>cc,getSynthesizedDeepCloneWithReplacements:()=>JN,getSynthesizedDeepClones:()=>oE,getSynthesizedDeepClonesWithReplacements:()=>gY,getSyntheticLeadingComments:()=>l2,getSyntheticTrailingComments:()=>rO,getTargetLabel:()=>s7,getTargetOfBindingOrAssignmentElement:()=>iv,getTemporaryModuleResolutionState:()=>Z3,getTextOfConstantValue:()=>Use,getTextOfIdentifierOrLiteral:()=>l_,getTextOfJSDocComment:()=>Cw,getTextOfNode:()=>Qc,getTextOfNodeFromSourceText:()=>AI,getTextOfPropertyName:()=>wA,getThisContainer:()=>Ku,getThisParameter:()=>F0,getTokenAtPosition:()=>Vi,getTokenPosOfNode:()=>gT,getTokenSourceMapRange:()=>FRe,getTouchingPropertyName:()=>ef,getTouchingToken:()=>nk,getTrailingCommentRanges:()=>eb,getTrailingSemicolonDeferringWriter:()=>XH,getTransformFlagsSubtreeExclusions:()=>uue,getTransformers:()=>jK,getTsBuildInfoEmitOutputFilePath:()=>Jg,getTsConfigObjectLiteralExpression:()=>LI,getTsConfigPropArray:()=>Hw,getTsConfigPropArrayElementValue:()=>w6,getTypeAnnotationNode:()=>Mce,getTypeArgumentOrTypeParameterList:()=>Ohe,getTypeKeywordOfTypeOnlyImport:()=>cY,getTypeNode:()=>vue,getTypeNodeIfAccessible:()=>lk,getTypeParameterFromJsDoc:()=>yce,getTypeParameterOwner:()=>BDe,getTypesPackageName:()=>rF,getUILocale:()=>xae,getUniqueName:()=>i1,getUniqueSymbolId:()=>tge,getUseDefineForClassFields:()=>MR,getWatchErrorSummaryDiagnosticMessage:()=>wq,getWatchFactory:()=>Upe,group:()=>YC,groupBy:()=>yae,guessIndentation:()=>xse,handleNoEmitOptions:()=>dq,hasAbstractModifier:()=>B0,hasAccessorModifier:()=>rm,hasAmbientModifier:()=>aW,hasChangesInResolutions:()=>nH,hasChildOfKind:()=>NN,hasContextSensitiveParameters:()=>b4,hasDecorators:()=>bf,hasDocComment:()=>Rhe,hasDynamicName:()=>Xy,hasEffectiveModifier:()=>cd,hasEffectiveModifiers:()=>n4,hasEffectiveReadonlyModifier:()=>jI,hasExtension:()=>gA,hasIndexSignature:()=>EY,hasInitializer:()=>Jy,hasInvalidEscape:()=>KH,hasJSDocNodes:()=>Kd,hasJSDocParameterTags:()=>Joe,hasJSFileExtension:()=>ES,hasJsonModuleEmitEnabled:()=>l4,hasOnlyExpressionInitializer:()=>mT,hasOverrideModifier:()=>iW,hasPossibleExternalModuleReference:()=>zse,hasProperty:()=>fs,hasPropertyAccessExpressionWithName:()=>kN,hasQuestionToken:()=>uS,hasRecordedExternalHelpers:()=>ide,hasRestParameter:()=>Yj,hasScopeMarker:()=>yse,hasStaticModifier:()=>zc,hasSyntacticModifier:()=>Mr,hasSyntacticModifiers:()=>Wce,hasTSFileExtension:()=>GR,hasTabstop:()=>jle,hasTrailingDirectorySeparator:()=>My,hasType:()=>f6,hasTypeArguments:()=>Awe,hasZeroOrOneAsteriskCharacter:()=>CW,helperString:()=>Sz,hostGetCanonicalFileName:()=>lb,hostUsesCaseSensitiveFileNames:()=>xR,idText:()=>vr,identifierIsThisKeyword:()=>rW,identifierToKeywordKind:()=>nb,identity:()=>Ks,identitySourceMapConsumer:()=>yF,ignoreSourceNewlines:()=>Tz,ignoredPaths:()=>uw,importDefaultHelper:()=>e3,importFromModuleSpecifier:()=>aR,importNameElisionDisabled:()=>u4,importStarHelper:()=>aO,indexOfAnyCharCode:()=>cae,indexOfNode:()=>DA,indicesOf:()=>jD,inferredTypesContainingFile:()=>VF,insertImports:()=>L7,insertLeadingStatement:()=>sOe,insertSorted:()=>Ny,insertStatementAfterCustomPrologue:()=>L0,insertStatementAfterStandardPrologue:()=>cwe,insertStatementsAfterCustomPrologue:()=>rH,insertStatementsAfterStandardPrologue:()=>em,intersperse:()=>DU,introducesArgumentsExoticObject:()=>tce,inverseJsxOptionMap:()=>NL,isAbstractConstructorSymbol:()=>cle,isAbstractModifier:()=>Rue,isAccessExpression:()=>Us,isAccessibilityModifier:()=>ZX,isAccessor:()=>rb,isAccessorModifier:()=>Nue,isAliasSymbolDeclaration:()=>Cwe,isAliasableExpression:()=>pR,isAmbientModule:()=>lu,isAmbientPropertyDeclaration:()=>_H,isAnonymousFunctionDefinition:()=>FI,isAnyDirectorySeparator:()=>sj,isAnyImportOrBareOrAccessedRequire:()=>Wse,isAnyImportOrReExport:()=>Uw,isAnyImportSyntax:()=>yT,isAnySupportedFileExtension:()=>mRe,isApplicableVersionedTypesKey:()=>QO,isArgumentExpressionOfElementAccess:()=>BX,isArray:()=>ba,isArrayBindingElement:()=>c6,isArrayBindingOrAssignmentElement:()=>ww,isArrayBindingOrAssignmentPattern:()=>Vj,isArrayBindingPattern:()=>g2,isArrayLiteralExpression:()=>fu,isArrayLiteralOrObjectLiteralDestructuringPattern:()=>qg,isArrayTypeNode:()=>wz,isArrowFunction:()=>xs,isAsExpression:()=>fO,isAssertClause:()=>p3,isAssertEntry:()=>jue,isAssertionExpression:()=>pT,isAssertionKey:()=>ase,isAssertsKeyword:()=>Due,isAssignmentDeclaration:()=>RI,isAssignmentExpression:()=>Iu,isAssignmentOperator:()=>Mg,isAssignmentPattern:()=>vI,isAssignmentTarget:()=>Um,isAsteriskToken:()=>cO,isAsyncFunction:()=>qA,isAsyncModifier:()=>mL,isAutoAccessorPropertyDeclaration:()=>Id,isAwaitExpression:()=>v2,isAwaitKeyword:()=>Dz,isBigIntLiteral:()=>a3,isBinaryExpression:()=>ar,isBinaryOperatorToken:()=>pde,isBindableObjectDefinePropertyCall:()=>sS,isBindableStaticAccessExpression:()=>ST,isBindableStaticElementAccessExpression:()=>H6,isBindableStaticNameExpression:()=>cS,isBindingElement:()=>Wo,isBindingElementOfBareOrAccessedRequire:()=>lce,isBindingName:()=>Mm,isBindingOrAssignmentElement:()=>use,isBindingOrAssignmentPattern:()=>kw,isBindingPattern:()=>La,isBlock:()=>Va,isBlockOrCatchScoped:()=>sH,isBlockScope:()=>pH,isBlockScopedContainerTopLevel:()=>Hse,isBooleanLiteral:()=>ose,isBreakOrContinueStatement:()=>hI,isBreakStatement:()=>qRe,isBuildInfoFile:()=>Ipe,isBuilderProgram:()=>gme,isBundle:()=>Bz,isBundleFileTextLike:()=>dle,isCallChain:()=>dT,isCallExpression:()=>Pa,isCallExpressionTarget:()=>NX,isCallLikeExpression:()=>rS,isCallOrNewExpression:()=>Ih,isCallOrNewExpressionTarget:()=>PX,isCallSignatureDeclaration:()=>_2,isCallToHelper:()=>pL,isCaseBlock:()=>hO,isCaseClause:()=>CL,isCaseKeyword:()=>Pue,isCaseOrDefaultClause:()=>Kj,isCatchClause:()=>E2,isCatchClauseVariableDeclaration:()=>Vle,isCatchClauseVariableDeclarationOrBindingElement:()=>cH,isCheckJsEnabledForFile:()=>HR,isChildOfNodeWithKind:()=>TH,isCircularBuildOrder:()=>YS,isClassDeclaration:()=>sl,isClassElement:()=>_l,isClassExpression:()=>_u,isClassLike:()=>Yr,isClassMemberModifier:()=>Gj,isClassOrTypeElement:()=>s6,isClassStaticBlockDeclaration:()=>oc,isCollapsedRange:()=>Hwe,isColonToken:()=>Iue,isCommaExpression:()=>TO,isCommaListExpression:()=>SL,isCommaSequence:()=>wL,isCommaToken:()=>Cue,isComment:()=>g7,isCommonJsExportPropertyAssignment:()=>k6,isCommonJsExportedExpression:()=>Zse,isCompoundAssignment:()=>oN,isComputedNonLiteralName:()=>Vw,isComputedPropertyName:()=>ts,isConciseBody:()=>u6,isConditionalExpression:()=>b2,isConditionalTypeNode:()=>m2,isConstTypeReference:()=>Ch,isConstructSignatureDeclaration:()=>uO,isConstructorDeclaration:()=>Ec,isConstructorTypeNode:()=>yL,isContextualKeyword:()=>K6,isContinueStatement:()=>KRe,isCustomPrologue:()=>A6,isDebuggerStatement:()=>XRe,isDeclaration:()=>Kl,isDeclarationBindingElement:()=>Lw,isDeclarationFileName:()=>Fu,isDeclarationName:()=>Rh,isDeclarationNameOfEnumOrNamespace:()=>wR,isDeclarationReadonly:()=>x6,isDeclarationStatement:()=>bse,isDeclarationWithTypeParameterChildren:()=>hH,isDeclarationWithTypeParameters:()=>mH,isDecorator:()=>du,isDecoratorTarget:()=>mhe,isDefaultClause:()=>yO,isDefaultImport:()=>lS,isDefaultModifier:()=>kue,isDefaultedExpandoInitializer:()=>dce,isDeleteExpression:()=>Gue,isDeleteTarget:()=>GH,isDeprecatedDeclaration:()=>H7,isDestructuringAssignment:()=>Fg,isDiagnosticWithLocation:()=>CY,isDiskPathRoot:()=>TDe,isDoStatement:()=>zRe,isDotDotDotToken:()=>o3,isDottedName:()=>WI,isDynamicName:()=>Y6,isESSymbolIdentifier:()=>Dwe,isEffectiveExternalModule:()=>aS,isEffectiveModuleDeclaration:()=>jse,isEffectiveStrictModeSourceFile:()=>fH,isElementAccessChain:()=>Dj,isElementAccessExpression:()=>Vs,isEmittedFileOfProgram:()=>Bpe,isEmptyArrayLiteral:()=>Zce,isEmptyBindingElement:()=>Goe,isEmptyBindingPattern:()=>Foe,isEmptyObjectLiteral:()=>dW,isEmptyStatement:()=>Pz,isEmptyStringLiteral:()=>CH,isEndOfDeclarationMarker:()=>QRe,isEntityName:()=>Cd,isEntityNameExpression:()=>bc,isEnumConst:()=>R0,isEnumDeclaration:()=>hb,isEnumMember:()=>q0,isEqualityOperatorKind:()=>R7,isEqualsGreaterThanToken:()=>Lue,isExclamationToken:()=>lO,isExcludedFile:()=>gfe,isExclusivelyTypeOnlyImportOrExport:()=>oq,isExportAssignment:()=>pc,isExportDeclaration:()=>Il,isExportModifier:()=>c3,isExportName:()=>E3,isExportNamespaceAsDefaultDeclaration:()=>v6,isExportOrDefaultModifier:()=>oJ,isExportSpecifier:()=>Mu,isExportsIdentifier:()=>TT,isExportsOrModuleExportsOrAlias:()=>$0,isExpression:()=>ot,isExpressionNode:()=>Dh,isExpressionOfExternalModuleImportEqualsDeclaration:()=>vhe,isExpressionOfOptionalChainRoot:()=>r6,isExpressionStatement:()=>Ol,isExpressionWithTypeArguments:()=>Vg,isExpressionWithTypeArgumentsInClassExtendsClause:()=>IR,isExternalModule:()=>Lc,isExternalModuleAugmentation:()=>D0,isExternalModuleImportEqualsDeclaration:()=>ab,isExternalModuleIndicator:()=>Rw,isExternalModuleNameRelative:()=>fl,isExternalModuleReference:()=>um,isExternalModuleSymbol:()=>BN,isExternalOrCommonJsModule:()=>kd,isFileLevelUniqueName:()=>g6,isFileProbablyExternalModule:()=>LO,isFirstDeclarationOfSymbolParameter:()=>dY,isFixablePromiseHandler:()=>ZY,isForInOrOfStatement:()=>CA,isForInStatement:()=>Mz,isForInitializer:()=>pp,isForOfStatement:()=>_O,isForStatement:()=>FT,isFunctionBlock:()=>bT,isFunctionBody:()=>Hj,isFunctionDeclaration:()=>Jc,isFunctionExpression:()=>ms,isFunctionExpressionOrArrowFunction:()=>a2,isFunctionLike:()=>Ia,isFunctionLikeDeclaration:()=>Ds,isFunctionLikeKind:()=>nS,isFunctionLikeOrClassStaticBlockDeclaration:()=>SA,isFunctionOrConstructorTypeNode:()=>lse,isFunctionOrModuleBlock:()=>Bj,isFunctionSymbol:()=>_ce,isFunctionTypeNode:()=>Jm,isFutureReservedKeyword:()=>Iwe,isGeneratedIdentifier:()=>tc,isGeneratedPrivateIdentifier:()=>tS,isGetAccessor:()=>zy,isGetAccessorDeclaration:()=>p_,isGetOrSetAccessorDeclaration:()=>t6,isGlobalDeclaration:()=>J6e,isGlobalScopeAugmentation:()=>mp,isGrammarError:()=>Nse,isHeritageClause:()=>dd,isHoistedFunction:()=>C6,isHoistedVariableStatement:()=>I6,isIdentifier:()=>Re,isIdentifierANonContextualKeyword:()=>q6,isIdentifierName:()=>Sce,isIdentifierOrThisTypeNode:()=>ude,isIdentifierPart:()=>tb,isIdentifierStart:()=>Pm,isIdentifierText:()=>i_,isIdentifierTypePredicate:()=>nce,isIdentifierTypeReference:()=>Mle,isIfStatement:()=>MT,isIgnoredFileFromWildCardWatching:()=>DF,isImplicitGlob:()=>LW,isImportCall:()=>Dd,isImportClause:()=>lm,isImportDeclaration:()=>gl,isImportEqualsDeclaration:()=>Nl,isImportKeyword:()=>gL,isImportMeta:()=>NA,isImportOrExportSpecifier:()=>eS,isImportOrExportSpecifierName:()=>Zhe,isImportSpecifier:()=>$u,isImportTypeAssertionContainer:()=>Vue,isImportTypeNode:()=>Mh,isImportableFile:()=>PY,isInComment:()=>Kg,isInExpressionContext:()=>F6,isInJSDoc:()=>qw,isInJSFile:()=>Yn,isInJSXText:()=>Dhe,isInJsonFile:()=>B6,isInNonReferenceComment:()=>Ghe,isInReferenceComment:()=>Fhe,isInRightSideOfInternalImportEqualsDeclaration:()=>i7,isInString:()=>n1,isInTemplateString:()=>qX,isInTopLevelContext:()=>O6,isIncrementalCompilation:()=>NR,isIndexSignatureDeclaration:()=>kS,isIndexedAccessTypeNode:()=>OS,isInferTypeNode:()=>h2,isInfinityOrNaNString:()=>cL,isInitializedProperty:()=>sN,isInitializedVariable:()=>mW,isInsideJsxElement:()=>m7,isInsideJsxElementOrAttribute:()=>khe,isInsideNodeModules:()=>dge,isInsideTemplateLiteral:()=>FN,isInstantiatedModule:()=>fK,isInterfaceDeclaration:()=>ku,isInternalDeclaration:()=>BK,isInternalModuleImportEqualsDeclaration:()=>GA,isInternalName:()=>eJ,isIntersectionTypeNode:()=>dO,isIntrinsicJsxName:()=>GI,isIterationStatement:()=>Wy,isJSDoc:()=>dm,isJSDocAllType:()=>Kue,isJSDocAugmentsTag:()=>x2,isJSDocAuthorTag:()=>tOe,isJSDocCallbackTag:()=>Vz,isJSDocClassTag:()=>Xue,isJSDocCommentContainingNode:()=>qj,isJSDocConstructSignature:()=>jA,isJSDocDeprecatedTag:()=>Jz,isJSDocEnumTag:()=>vO,isJSDocFunctionType:()=>S2,isJSDocImplementsTag:()=>qz,isJSDocIndexSignature:()=>U6,isJSDocLikeText:()=>cJ,isJSDocLink:()=>zue,isJSDocLinkCode:()=>Jue,isJSDocLinkLike:()=>iS,isJSDocLinkPlain:()=>ZRe,isJSDocMemberName:()=>gb,isJSDocNameReference:()=>IL,isJSDocNamepathType:()=>eOe,isJSDocNamespaceBody:()=>ZDe,isJSDocNode:()=>IA,isJSDocNonNullableType:()=>m3,isJSDocNullableType:()=>T2,isJSDocOptionalParameter:()=>JR,isJSDocOptionalType:()=>Uz,isJSDocOverloadTag:()=>kL,isJSDocOverrideTag:()=>g3,isJSDocParameterTag:()=>xp,isJSDocPrivateTag:()=>Hz,isJSDocPropertyLikeTag:()=>a6,isJSDocPropertyTag:()=>$ue,isJSDocProtectedTag:()=>Wz,isJSDocPublicTag:()=>jz,isJSDocReadonlyTag:()=>zz,isJSDocReturnTag:()=>y3,isJSDocSatisfiesExpression:()=>zW,isJSDocSatisfiesTag:()=>v3,isJSDocSeeTag:()=>nOe,isJSDocSignature:()=>X0,isJSDocTag:()=>EI,isJSDocTemplateTag:()=>H_,isJSDocThisTag:()=>Yue,isJSDocThrowsTag:()=>iOe,isJSDocTypeAlias:()=>Ff,isJSDocTypeAssertion:()=>RL,isJSDocTypeExpression:()=>UT,isJSDocTypeLiteral:()=>LL,isJSDocTypeTag:()=>DL,isJSDocTypedefTag:()=>Kz,isJSDocUnknownTag:()=>rOe,isJSDocUnknownType:()=>que,isJSDocVariadicType:()=>h3,isJSXTagName:()=>DI,isJsonEqual:()=>GW,isJsonSourceFile:()=>Mf,isJsxAttribute:()=>Sp,isJsxAttributeLike:()=>d6,isJsxAttributes:()=>K0,isJsxChild:()=>Pw,isJsxClosingElement:()=>GS,isJsxClosingFragment:()=>Hue,isJsxElement:()=>Hg,isJsxExpression:()=>AL,isJsxFragment:()=>BS,isJsxOpeningElement:()=>Xm,isJsxOpeningFragment:()=>US,isJsxOpeningLikeElement:()=>Au,isJsxOpeningLikeElementTagName:()=>hhe,isJsxSelfClosingElement:()=>FS,isJsxSpreadAttribute:()=>GT,isJsxTagNameExpression:()=>bI,isJsxText:()=>CS,isJumpStatementTarget:()=>DN,isKeyword:()=>Xu,isKnownSymbol:()=>gR,isLabelName:()=>FX,isLabelOfLabeledStatement:()=>MX,isLabeledStatement:()=>J0,isLateVisibilityPaintedStatement:()=>E6,isLeftHandSideExpression:()=>Ju,isLeftHandSideOfAssignment:()=>Bwe,isLet:()=>II,isLineBreak:()=>Wl,isLiteralComputedPropertyDeclarationName:()=>_R,isLiteralExpression:()=>fT,isLiteralExpressionOfObject:()=>Pj,isLiteralImportTypeNode:()=>ib,isLiteralKind:()=>gI,isLiteralLikeAccess:()=>j6,isLiteralLikeElementAccess:()=>Zw,isLiteralNameOfPropertyDeclarationOrIndexAccess:()=>c7,isLiteralTypeLikeExpression:()=>hOe,isLiteralTypeLiteral:()=>hse,isLiteralTypeNode:()=>mb,isLocalName:()=>rv,isLogicalOperator:()=>Yce,isLogicalOrCoalescingAssignmentExpression:()=>cW,isLogicalOrCoalescingAssignmentOperator:()=>HI,isLogicalOrCoalescingBinaryExpression:()=>CR,isLogicalOrCoalescingBinaryOperator:()=>AR,isMappedTypeNode:()=>EL,isMemberName:()=>Ah,isMergeDeclarationMarker:()=>$Re,isMetaProperty:()=>TL,isMethodDeclaration:()=>Nc,isMethodOrAccessor:()=>xA,isMethodSignature:()=>zm,isMinusToken:()=>kz,isMissingDeclaration:()=>YRe,isModifier:()=>Ha,isModifierKind:()=>Rg,isModifierLike:()=>Ns,isModuleAugmentationExternal:()=>uH,isModuleBlock:()=>Tp,isModuleBody:()=>vse,isModuleDeclaration:()=>Tc,isModuleExportsAccessExpression:()=>Bm,isModuleIdentifier:()=>RH,isModuleName:()=>_de,isModuleOrEnumDeclaration:()=>Ow,isModuleReference:()=>Tse,isModuleSpecifierLike:()=>C7,isModuleWithStringLiteralName:()=>b6,isNameOfFunctionDeclaration:()=>VX,isNameOfModuleDeclaration:()=>UX,isNamedClassElement:()=>cse,isNamedDeclaration:()=>zl,isNamedEvaluation:()=>vf,isNamedEvaluationSource:()=>VH,isNamedExportBindings:()=>Rj,isNamedExports:()=>h_,isNamedImportBindings:()=>Wj,isNamedImports:()=>jg,isNamedImportsOrExports:()=>bW,isNamedTupleMember:()=>bL,isNamespaceBody:()=>QDe,isNamespaceExport:()=>qm,isNamespaceExportDeclaration:()=>gO,isNamespaceImport:()=>nv,isNamespaceReexportDeclaration:()=>cce,isNewExpression:()=>z0,isNewExpressionTarget:()=>ZL,isNightly:()=>TR,isNoSubstitutionTemplateLiteral:()=>IS,isNode:()=>XDe,isNodeArray:()=>C0,isNodeArrayMultiLine:()=>ale,isNodeDescendantOf:()=>AT,isNodeKind:()=>Iw,isNodeLikeSystem:()=>qU,isNodeModulesDirectory:()=>H8,isNodeWithPossibleHoistedDeclaration:()=>vce,isNonContextualKeyword:()=>Ace,isNonExportDefaultModifier:()=>NOe,isNonGlobalAmbientModule:()=>lH,isNonGlobalDeclaration:()=>vge,isNonNullAccess:()=>Hle,isNonNullChain:()=>i6,isNonNullExpression:()=>PS,isNonStaticMethodOrAccessorWithPrivateName:()=>K_e,isNotEmittedOrPartiallyEmittedNode:()=>$De,isNotEmittedStatement:()=>Gz,isNullishCoalesce:()=>wj,isNumber:()=>Cg,isNumericLiteral:()=>Vf,isNumericLiteralName:()=>Wm,isObjectBindingElementWithoutPropertyName:()=>jN,isObjectBindingOrAssignmentElement:()=>Dw,isObjectBindingOrAssignmentPattern:()=>Uj,isObjectBindingPattern:()=>cm,isObjectLiteralElement:()=>Xj,isObjectLiteralElementLike:()=>Og,isObjectLiteralExpression:()=>rs,isObjectLiteralMethod:()=>s_,isObjectLiteralOrClassExpressionMethodOrAccessor:()=>D6,isObjectTypeDeclaration:()=>yS,isOctalDigit:()=>hj,isOmittedExpression:()=>ol,isOptionalChain:()=>Jl,isOptionalChainRoot:()=>pI,isOptionalDeclaration:()=>WW,isOptionalJSDocPropertyLikeTag:()=>zR,isOptionalTypeNode:()=>Rz,isOuterExpression:()=>S3,isOutermostOptionalChain:()=>mI,isOverrideModifier:()=>Oue,isPackedArrayLiteral:()=>UW,isParameter:()=>ha,isParameterDeclaration:()=>CT,isParameterOrCatchClauseVariable:()=>VW,isParameterPropertyDeclaration:()=>Ad,isParameterPropertyModifier:()=>yI,isParenthesizedExpression:()=>ud,isParenthesizedTypeNode:()=>wS,isParseTreeNode:()=>dI,isPartOfTypeNode:()=>Gm,isPartOfTypeQuery:()=>G6,isPartiallyEmittedExpression:()=>_3,isPatternMatch:()=>h8,isPinnedComment:()=>y6,isPlainJsFile:()=>h6,isPlusToken:()=>Lz,isPossiblyTypeArgumentPosition:()=>MN,isPostfixUnaryExpression:()=>Nz,isPrefixUnaryExpression:()=>tv,isPrivateIdentifier:()=>pi,isPrivateIdentifierClassElementDeclaration:()=>xu,isPrivateIdentifierPropertyAccessExpression:()=>TA,isPrivateIdentifierSymbol:()=>Cce,isProgramBundleEmitBuildInfo:()=>ame,isProgramUptoDate:()=>lq,isPrologueDirective:()=>B_,isPropertyAccessChain:()=>n6,isPropertyAccessEntityNameExpression:()=>LR,isPropertyAccessExpression:()=>br,isPropertyAccessOrQualifiedName:()=>fse,isPropertyAccessOrQualifiedNameOrImportTypeNode:()=>dse,isPropertyAssignment:()=>yl,isPropertyDeclaration:()=>Na,isPropertyName:()=>Ys,isPropertyNameLiteral:()=>c_,isPropertySignature:()=>$d,isProtoSetter:()=>Ice,isPrototypeAccess:()=>ub,isPrototypePropertyAssignment:()=>nR,isPunctuation:()=>Phe,isPushOrUnshiftIdentifier:()=>jH,isQualifiedName:()=>Yu,isQuestionDotToken:()=>s3,isQuestionOrExclamationToken:()=>lde,isQuestionOrPlusOrMinusToken:()=>fde,isQuestionToken:()=>ev,isRawSourceMap:()=>B_e,isReadonlyKeyword:()=>wue,isReadonlyKeywordOrPlusOrMinusToken:()=>dde,isRecognizedTripleSlashComment:()=>iH,isReferenceFileLocation:()=>F2,isReferencedFile:()=>vb,isRegularExpressionLiteral:()=>Cz,isRequireCall:()=>qu,isRequireVariableStatement:()=>DH,isRestParameter:()=>Fm,isRestTypeNode:()=>Oz,isReturnStatement:()=>j_,isReturnStatementWithFixablePromiseHandler:()=>r5,isRightSideOfAccessExpression:()=>$ce,isRightSideOfPropertyAccess:()=>j2,isRightSideOfQualifiedName:()=>yhe,isRightSideOfQualifiedNameOrPropertyAccess:()=>zI,isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName:()=>Qce,isRootedDiskPath:()=>qp,isSameEntityName:()=>BA,isSatisfiesExpression:()=>HRe,isScopeMarker:()=>gse,isSemicolonClassElement:()=>Bue,isSetAccessor:()=>Ng,isSetAccessorDeclaration:()=>Sf,isShebangTrivia:()=>gj,isShorthandAmbientModuleSymbol:()=>CI,isShorthandPropertyAssignment:()=>xf,isSignedNumericLiteral:()=>X6,isSimpleCopiableExpression:()=>Z0,isSimpleInlineableExpression:()=>Ap,isSingleOrDoubleQuote:()=>Xw,isSourceFile:()=>Li,isSourceFileFromLibrary:()=>dk,isSourceFileJS:()=>Cu,isSourceFileNotJS:()=>vwe,isSourceFileNotJson:()=>LH,isSourceMapping:()=>U_e,isSpecialPropertyDeclaration:()=>fce,isSpreadAssignment:()=>VS,isSpreadElement:()=>Km,isStatement:()=>ca,isStatementButNotDeclaration:()=>Nw,isStatementOrBlock:()=>Ese,isStatementWithLocals:()=>Ose,isStatic:()=>Ca,isStaticModifier:()=>LS,isString:()=>Ta,isStringAKeyword:()=>Lwe,isStringANonContextualKeyword:()=>fS,isStringAndEmptyAnonymousObjectIntersection:()=>Nhe,isStringDoubleQuoted:()=>V6,isStringLiteral:()=>yo,isStringLiteralLike:()=>es,isStringLiteralOrJsxExpression:()=>Sse,isStringLiteralOrTemplate:()=>age,isStringOrNumericLiteralLike:()=>yf,isStringOrRegularExpressionOrTemplateLiteral:()=>QX,isStringTextContainingNode:()=>Fj,isSuperCall:()=>OA,isSuperKeyword:()=>hL,isSuperOrSuperProperty:()=>ywe,isSuperProperty:()=>Pu,isSupportedSourceFileName:()=>wle,isSwitchStatement:()=>pO,isSyntaxList:()=>A2,isSyntheticExpression:()=>WRe,isSyntheticReference:()=>MS,isTagName:()=>GX,isTaggedTemplateExpression:()=>PT,isTaggedTemplateTag:()=>phe,isTemplateExpression:()=>d3,isTemplateHead:()=>f2,isTemplateLiteral:()=>AA,isTemplateLiteralKind:()=>Hy,isTemplateLiteralToken:()=>rse,isTemplateLiteralTypeNode:()=>jRe,isTemplateLiteralTypeSpan:()=>Mue,isTemplateMiddle:()=>Aue,isTemplateMiddleOrTemplateTail:()=>o6,isTemplateSpan:()=>xL,isTemplateTail:()=>Iz,isTextWhiteSpaceLike:()=>Whe,isThis:()=>H2,isThisContainerOrFunctionBlock:()=>ace,isThisIdentifier:()=>LT,isThisInTypeQuery:()=>mS,isThisInitializedDeclaration:()=>N6,isThisInitializedObjectBindingExpression:()=>sce,isThisProperty:()=>zw,isThisTypeNode:()=>u3,isThisTypeParameter:()=>lL,isThisTypePredicate:()=>hwe,isThrowStatement:()=>Fz,isToken:()=>Z1,isTokenKind:()=>Nj,isTraceEnabled:()=>ov,isTransientSymbol:()=>Zp,isTrivia:()=>KA,isTryStatement:()=>mO,isTupleTypeNode:()=>p2,isTypeAlias:()=>sR,isTypeAliasDeclaration:()=>Ep,isTypeAssertionExpression:()=>Fue,isTypeDeclaration:()=>o2,isTypeElement:()=>_T,isTypeKeyword:()=>ik,isTypeKeywordToken:()=>rY,isTypeKeywordTokenOrIdentifier:()=>b7,isTypeLiteralNode:()=>Rd,isTypeNode:()=>bi,isTypeNodeKind:()=>vW,isTypeOfExpression:()=>y2,isTypeOnlyExportDeclaration:()=>ise,isTypeOnlyImportDeclaration:()=>Mj,isTypeOnlyImportOrExportDeclaration:()=>I0,isTypeOperatorNode:()=>RS,isTypeParameterDeclaration:()=>_c,isTypePredicateNode:()=>l3,isTypeQueryNode:()=>vL,isTypeReferenceNode:()=>m_,isTypeReferenceType:()=>_6,isUMDExportSymbol:()=>o4,isUnaryExpression:()=>jj,isUnaryExpressionWithWrite:()=>mse,isUnicodeIdentifierStart:()=>W8,isUnionTypeNode:()=>DS,isUnparsedNode:()=>Oj,isUnparsedPrepend:()=>Wue,isUnparsedSource:()=>BT,isUnparsedTextLike:()=>nse,isUrl:()=>doe,isValidBigIntString:()=>v4,isValidESSymbolDeclaration:()=>ece,isValidTypeOnlyAliasUseSite:()=>TS,isValueSignatureDeclaration:()=>bce,isVarConst:()=>kh,isVariableDeclaration:()=>wi,isVariableDeclarationInVariableStatement:()=>L6,isVariableDeclarationInitializedToBareOrAccessedRequire:()=>N0,isVariableDeclarationInitializedToRequire:()=>kH,isVariableDeclarationList:()=>pu,isVariableLike:()=>PA,isVariableLikeOrAccessor:()=>Qse,isVariableStatement:()=>Bc,isVoidExpression:()=>NS,isWatchSet:()=>Jwe,isWhileStatement:()=>JRe,isWhiteSpaceLike:()=>xh,isWhiteSpaceSingleLine:()=>Yp,isWithStatement:()=>Uue,isWriteAccess:()=>YI,isWriteOnlyAccess:()=>hW,isYieldExpression:()=>f3,jsxModeNeedsExplicitImport:()=>wY,keywordPart:()=>_d,last:()=>To,lastOrUndefined:()=>Os,length:()=>Fn,libMap:()=>jO,libs:()=>VO,lineBreakPart:()=>K2,linkNamePart:()=>$he,linkPart:()=>_Y,linkTextPart:()=>k7,listFiles:()=>Rq,loadModuleFromGlobalCache:()=>s_e,loadWithModeAwareCache:()=>hN,makeIdentifierFromModuleName:()=>Vse,makeImport:()=>Xg,makeImportIfNecessary:()=>jhe,makeStringLiteral:()=>S7,mangleScopedPackageName:()=>UL,map:()=>on,mapAllOrFail:()=>NU,mapDefined:()=>Zi,mapDefinedEntries:()=>bke,mapDefinedIterator:()=>UD,mapEntries:()=>uae,mapIterator:()=>RU,mapOneOrMany:()=>pge,mapToDisplayParts:()=>uv,matchFiles:()=>wW,matchPatternOrExact:()=>NW,matchedText:()=>Dae,matchesExclude:()=>G3,maybeBind:()=>ho,maybeSetLocalizedDiagnosticMessages:()=>mle,memoize:()=>zu,memoizeCached:()=>Eae,memoizeOne:()=>Jp,memoizeWeak:()=>wke,metadataHelper:()=>P4,min:()=>WU,minAndMax:()=>Nle,missingFileModifiedTime:()=>Eh,modifierToFlag:()=>gS,modifiersToFlags:()=>im,moduleOptionDeclaration:()=>NJ,moduleResolutionIsEqualTo:()=>wse,moduleResolutionNameAndModeGetter:()=>QL,moduleResolutionOptionDeclarations:()=>U3,moduleResolutionSupportsPackageJsonExportsAndImports:()=>bS,moduleResolutionUsesNodeModules:()=>T7,moduleSpecifiers:()=>Q0,moveEmitHelpers:()=>gue,moveRangeEnd:()=>i4,moveRangePastDecorators:()=>$y,moveRangePastModifiers:()=>yp,moveRangePos:()=>fb,moveSyntheticComments:()=>pue,mutateMap:()=>e2,mutateMapSkippingNewValues:()=>Oh,needsParentheses:()=>bY,needsScopeMarker:()=>l6,newCaseClauseTracker:()=>J7,newPrivateEnvironment:()=>Y_e,noEmitNotification:()=>cN,noEmitSubstitution:()=>zL,noTransformers:()=>HK,noTruncationMaximumTruncationLength:()=>x4,nodeCanBeDecorated:()=>M6,nodeHasName:()=>xw,nodeIsDecorated:()=>FA,nodeIsMissing:()=>rc,nodeIsPresent:()=>Pf,nodeIsSynthesized:()=>ws,nodeModuleNameResolver:()=>zfe,nodeModulesPathPart:()=>Wg,nodeNextJsonConfigResolver:()=>Jfe,nodeOrChildIsDecorated:()=>Kw,nodeOverlapsWithStartEnd:()=>HX,nodePosToString:()=>swe,nodeSeenTracker:()=>W2,nodeStartsNewLexicalEnvironment:()=>HH,nodeToDisplayParts:()=>B6e,noop:()=>Ba,noopFileWatcher:()=>B2,noopPush:()=>E8,normalizePath:()=>So,normalizeSlashes:()=>Al,not:()=>y8,notImplemented:()=>Sa,notImplementedResolver:()=>LF,nullNodeConverters:()=>dz,nullParenthesizerRules:()=>uz,nullTransformationContext:()=>Bh,objectAllocator:()=>ml,operatorPart:()=>ak,optionDeclarations:()=>Fh,optionMapToObject:()=>bJ,optionsAffectingProgramStructure:()=>GJ,optionsForBuild:()=>UJ,optionsForWatch:()=>HO,optionsHaveChanges:()=>LA,optionsHaveModuleResolutionChanges:()=>Cse,or:()=>Kp,orderedRemoveItem:()=>m8,orderedRemoveItemAt:()=>y0,outFile:()=>Ss,packageIdToPackageName:()=>p6,packageIdToString:()=>hT,padLeft:()=>J1,padRight:()=>Mke,paramHelper:()=>M4,parameterIsThisKeyword:()=>G0,parameterNamePart:()=>Khe,parseBaseNodeFactory:()=>_J,parseBigInt:()=>Ple,parseBuildCommand:()=>QOe,parseCommandLine:()=>$Oe,parseCommandLineWorker:()=>hJ,parseConfigFileTextToJson:()=>vJ,parseConfigFileWithSystem:()=>L8e,parseConfigHostFromCompilerHostLike:()=>FF,parseCustomTypeOption:()=>O3,parseIsolatedEntityName:()=>zS,parseIsolatedJSDocComment:()=>Mde,parseJSDocTypeExpressionForTests:()=>zOe,parseJsonConfigFileContent:()=>cNe,parseJsonSourceFileConfigFileContent:()=>MO,parseJsonText:()=>wO,parseListTypeOption:()=>Kde,parseNodeFactory:()=>fm,parseNodeModuleFromPath:()=>XJ,parsePackageName:()=>ZJ,parsePseudoBigInt:()=>iL,parseValidBigInt:()=>BW,patchWriteFileEnsuringDirectory:()=>uoe,pathContainsNodeModules:()=>JS,pathIsAbsolute:()=>nI,pathIsBareSpecifier:()=>cj,pathIsRelative:()=>Jd,patternText:()=>kae,perfLogger:()=>fp,performIncrementalCompilation:()=>D8e,performance:()=>ZD,plainJSErrors:()=>jF,positionBelongsToNode:()=>WX,positionIsASICandidate:()=>N7,positionIsSynthesized:()=>vp,positionsAreOnSameLine:()=>Bf,preProcessFile:()=>qge,probablyUsesSemicolons:()=>P7,processCommentPragmas:()=>dJ,processPragmasIntoFields:()=>fJ,processTaggedTemplateExpression:()=>OK,programContainsEsModules:()=>Vhe,programContainsModules:()=>Uhe,projectReferenceIsEqualTo:()=>tH,propKeyHelper:()=>X4,propertyNamePart:()=>qhe,pseudoBigIntToString:()=>j0,punctuationPart:()=>Yl,pushIfUnique:()=>Of,quote:()=>ck,quotePreferenceFromString:()=>sY,rangeContainsPosition:()=>wN,rangeContainsPositionExclusive:()=>RN,rangeContainsRange:()=>Od,rangeContainsRangeExclusive:()=>bhe,rangeContainsStartEnd:()=>ON,rangeEndIsOnSameLineAsRangeStart:()=>DR,rangeEndPositionsAreOnSameLine:()=>rle,rangeEquals:()=>GU,rangeIsOnSingleLine:()=>DT,rangeOfNode:()=>MW,rangeOfTypeParameters:()=>FW,rangeOverlapsWithStartEnd:()=>tk,rangeStartIsOnSameLineAsRangeEnd:()=>ile,rangeStartPositionsAreOnSameLine:()=>a4,readBuilderProgram:()=>QF,readConfigFile:()=>OO,readHelper:()=>K4,readJson:()=>JI,readJsonConfigFile:()=>$de,readJsonOrUndefined:()=>fW,realizeDiagnostics:()=>b$,reduceEachLeadingCommentRange:()=>goe,reduceEachTrailingCommentRange:()=>yoe,reduceLeft:()=>ou,reduceLeftIterator:()=>yke,reducePathComponents:()=>oT,refactor:()=>Ok,regExpEscape:()=>lRe,relativeComplement:()=>fae,removeAllComments:()=>ZR,removeEmitHelper:()=>GRe,removeExtension:()=>UR,removeFileExtension:()=>ld,removeIgnoredPath:()=>Dq,removeMinAndVersionNumbers:()=>Lae,removeOptionality:()=>whe,removePrefix:()=>QC,removeSuffix:()=>pA,removeTrailingDirectorySeparator:()=>sT,repeatString:()=>UN,replaceElement:()=>UU,resolutionExtensionIsTSOrJson:()=>VR,resolveConfigFileProjectName:()=>Hq,resolveJSModule:()=>jfe,resolveModuleName:()=>FL,resolveModuleNameFromCache:()=>FNe,resolvePackageNameToPackageJson:()=>wNe,resolvePath:()=>Fy,resolveProjectReferencePath:()=>$L,resolveTripleslashReference:()=>wF,resolveTypeReferenceDirective:()=>HJ,resolvingEmptyArray:()=>S4,restHelper:()=>H4,returnFalse:()=>m0,returnNoopFileWatcher:()=>TN,returnTrue:()=>h0,returnUndefined:()=>Qv,returnsPromise:()=>QY,runInitializersHelper:()=>G4,sameFlatMap:()=>lae,sameMap:()=>Tl,sameMapping:()=>APe,scanShebangTrivia:()=>yj,scanTokenAtPosition:()=>Xse,scanner:()=>$l,screenStartingMessageCodes:()=>$F,semanticDiagnosticsOptionDeclarations:()=>PJ,serializeCompilerOptions:()=>TJ,server:()=>dhe,servicesVersion:()=>m$,setCommentRange:()=>hl,setConfigFileInOptions:()=>xJ,setConstantValue:()=>hue,setEachParent:()=>i2,setEmitFlags:()=>Jn,setFunctionNameHelper:()=>Y4,setGetSourceFileAsHashVersioned:()=>YF,setIdentifierAutoGenerate:()=>iO,setIdentifierGeneratedImportReference:()=>bue,setIdentifierTypeArguments:()=>Ug,setInternalEmitFlags:()=>eO,setLocalizedDiagnosticMessages:()=>ple,setModuleDefaultHelper:()=>Z4,setNodeFlags:()=>Gle,setObjectAllocator:()=>_le,setOriginalNode:()=>Ir,setParent:()=>go,setParentRecursive:()=>Zy,setPrivateIdentifier:()=>JT,setResolvedModule:()=>kse,setResolvedTypeReferenceDirective:()=>Dse,setSnippetElement:()=>Ez,setSourceMapRange:()=>Ho,setStackTraceLimit:()=>dDe,setStartsOnNewLine:()=>vz,setSyntheticLeadingComments:()=>W0,setSyntheticTrailingComments:()=>u2,setSys:()=>bDe,setSysLog:()=>ooe,setTextRange:()=>it,setTextRangeEnd:()=>r2,setTextRangePos:()=>aL,setTextRangePosEnd:()=>om,setTextRangePosWidth:()=>oL,setTokenSourceMapRange:()=>_ue,setTypeNode:()=>yue,setUILocale:()=>Aae,setValueDeclaration:()=>rR,shouldAllowImportingTsExtension:()=>VL,shouldPreserveConstEnums:()=>U0,shouldUseUriStyleNodeCoreModules:()=>W7,showModuleSpecifier:()=>lle,signatureHasLiteralTypes:()=>_K,signatureHasRestParameter:()=>Xl,signatureToDisplayParts:()=>pY,single:()=>BU,singleElementArray:()=>aT,singleIterator:()=>Eke,singleOrMany:()=>zp,singleOrUndefined:()=>Wp,skipAlias:()=>wd,skipAssertions:()=>fOe,skipConstraint:()=>iY,skipOuterExpressions:()=>ql,skipParentheses:()=>vs,skipPartiallyEmittedExpressions:()=>a_,skipTrivia:()=>xo,skipTypeChecking:()=>rL,skipTypeParentheses:()=>FH,skipWhile:()=>Nae,sliceAfter:()=>PW,some:()=>vt,sort:()=>XC,sortAndDeduplicate:()=>HD,sortAndDeduplicateDiagnostics:()=>vA,sourceFileAffectingCompilerOptions:()=>V3,sourceFileMayBeEmitted:()=>pS,sourceMapCommentRegExp:()=>hF,sourceMapCommentRegExpDontCareLineStart:()=>TK,spacePart:()=>Qs,spanMap:()=>c8,spreadArrayHelper:()=>q4,stableSort:()=>Ag,startEndContainsRange:()=>jX,startEndOverlapsWithStartEnd:()=>l7,startOnNewLine:()=>mu,startTracing:()=>eoe,startsWith:()=>na,startsWithDirectory:()=>fj,startsWithUnderscore:()=>DY,startsWithUseStrict:()=>nde,stringContains:()=>jl,stringContainsAt:()=>yge,stringToToken:()=>lT,stripQuotes:()=>u_,supportedDeclarationExtensions:()=>I4,supportedJSExtensions:()=>cz,supportedJSExtensionsFlat:()=>dL,supportedLocaleDirectories:()=>Qj,supportedTSExtensions:()=>c2,supportedTSExtensionsFlat:()=>sz,supportedTSImplementationExtensions:()=>L4,suppressLeadingAndTrailingTrivia:()=>pd,suppressLeadingTrivia:()=>D7,suppressTrailingTrivia:()=>ige,symbolEscapedNameNoDefault:()=>A7,symbolName:()=>fc,symbolNameNoDefault:()=>x7,symbolPart:()=>Jhe,symbolToDisplayParts:()=>ok,syntaxMayBeASICandidate:()=>NY,syntaxRequiresTrailingSemicolonOrASI:()=>O7,sys:()=>xl,sysLog:()=>ow,tagNamesAreEquivalent:()=>yb,takeWhile:()=>v8,targetOptionDeclaration:()=>zO,templateObjectHelper:()=>J4,testFormatSettings:()=>_he,textChangeRangeIsUnchanged:()=>Moe,textChangeRangeNewSpan:()=>uI,textChanges:()=>nr,textOrKeywordPart:()=>fY,textPart:()=>tf,textRangeContainsPositionInclusive:()=>Y8,textSpanContainsPosition:()=>bj,textSpanContainsTextSpan:()=>Roe,textSpanEnd:()=>wl,textSpanIntersection:()=>Poe,textSpanIntersectsWith:()=>$8,textSpanIntersectsWithPosition:()=>Noe,textSpanIntersectsWithTextSpan:()=>FDe,textSpanIsEmpty:()=>woe,textSpanOverlap:()=>Ooe,textSpanOverlapsWith:()=>MDe,textSpansEqual:()=>J2,textToKeywordObj:()=>Ew,timestamp:()=>Ms,toArray:()=>qD,toBuilderFileEmit:()=>lme,toBuilderStateFileInfoForMultiEmit:()=>cme,toEditorSettings:()=>tP,toFileNameLowerCase:()=>n_,toLowerCase:()=>bae,toPath:()=>Ts,toProgramEmitPending:()=>ume,tokenIsIdentifierOrKeyword:()=>Su,tokenIsIdentifierOrKeywordOrGreaterThan:()=>moe,tokenToString:()=>Xa,trace:()=>Xi,tracing:()=>ai,tracingEnabled:()=>ew,transform:()=>p3e,transformClassFields:()=>tpe,transformDeclarations:()=>UK,transformECMAScriptModule:()=>GK,transformES2015:()=>mpe,transformES2016:()=>_pe,transformES2017:()=>ape,transformES2018:()=>ope,transformES2019:()=>spe,transformES2020:()=>cpe,transformES2021:()=>lpe,transformES5:()=>hpe,transformESDecorators:()=>ipe,transformESNext:()=>upe,transformGenerators:()=>gpe,transformJsx:()=>dpe,transformLegacyDecorators:()=>rpe,transformModule:()=>FK,transformNodeModule:()=>bpe,transformNodes:()=>lN,transformSystemModule:()=>vpe,transformTypeScript:()=>Z_e,transpile:()=>U4e,transpileModule:()=>iye,transpileOptionValueCompilerOptions:()=>BJ,trimString:()=>v0,trimStringEnd:()=>$D,trimStringStart:()=>ZC,tryAddToSet:()=>_0,tryAndIgnoreErrors:()=>B7,tryCast:()=>zr,tryDirectoryExists:()=>G7,tryExtractTSExtension:()=>r4,tryFileExists:()=>F7,tryGetClassExtendingExpressionWithTypeArguments:()=>lW,tryGetClassImplementingOrExtendingExpressionWithTypeArguments:()=>uW,tryGetDirectories:()=>M7,tryGetExtensionFromPath:()=>Hm,tryGetImportFromModuleSpecifier:()=>oR,tryGetJSDocSatisfiesTypeNode:()=>T4,tryGetModuleNameFromFile:()=>xO,tryGetModuleSpecifierFromDeclaration:()=>iR,tryGetNativePerformanceHooks:()=>Yae,tryGetPropertyAccessOrIdentifierToString:()=>kR,tryGetPropertyNameOfBindingOrAssignmentElement:()=>A3,tryGetSourceMappingURL:()=>G_e,tryGetTextOfPropertyName:()=>T6,tryIOAndConsumeErrors:()=>U7,tryParsePattern:()=>n2,tryParsePatterns:()=>g4,tryParseRawSourceMap:()=>bK,tryReadDirectory:()=>xY,tryReadFile:()=>NO,tryRemoveDirectoryPrefix:()=>IW,tryRemoveExtension:()=>Ole,tryRemovePrefix:()=>KU,tryRemoveSuffix:()=>Iae,typeAcquisitionDeclarations:()=>H3,typeAliasNamePart:()=>Xhe,typeDirectiveIsEqualTo:()=>Rse,typeKeywords:()=>K7,typeParameterNamePart:()=>Yhe,typeReferenceResolutionNameAndModeGetter:()=>yN,typeToDisplayParts:()=>zN,unchangedPollThresholds:()=>lw,unchangedTextChangeRange:()=>$j,unescapeLeadingUnderscores:()=>Gi,unmangleScopedPackageName:()=>iF,unorderedRemoveItem:()=>YD,unorderedRemoveItemAt:()=>zU,unreachableCodeIsError:()=>Tle,unusedLabelIsError:()=>Sle,unwrapInnermostStatementOfLabel:()=>xH,updateErrorForNoInputFiles:()=>CJ,updateLanguageServiceSourceFile:()=>_$,updateMissingFilePathsWatch:()=>Gpe,updatePackageJsonWatch:()=>YMe,updateResolutionField:()=>N2,updateSharedExtendedConfigFileWatcher:()=>YK,updateSourceFile:()=>uJ,updateWatchingWildcardDirectories:()=>kF,usesExtensionsOnImports:()=>Dle,usingSingleLineStringWriter:()=>SI,utf16EncodeAsString:()=>lI,validateLocaleAndSetLanguage:()=>UDe,valuesHelper:()=>$4,version:()=>Rf,versionMajorMinor:()=>Sg,visitArray:()=>vK,visitCommaListElements:()=>aN,visitEachChild:()=>xn,visitFunctionBody:()=>Zd,visitIterationBody:()=>jf,visitLexicalEnvironment:()=>mF,visitNode:()=>$e,visitNodes:()=>On,visitParameterList:()=>Sc,walkUpBindingElementsAndPatterns:()=>bA,walkUpLexicalEnvironments:()=>X_e,walkUpOuterExpressions:()=>rde,walkUpParenthesizedExpressions:()=>qy,walkUpParenthesizedTypes:()=>dR,walkUpParenthesizedTypesAndGetParentAndChild:()=>Tce,whitespaceOrMapCommentRegExp:()=>gF,writeCommentRange:()=>$A,writeFile:()=>BI,writeFileEnsuringDirectories:()=>nW,zipToModeAwareCache:()=>qJ,zipWith:()=>kU});var uxe=gt({\"src/typescript/_namespaces/ts.ts\"(){\"use strict\";fa(),r7(),Fr(),HG()}}),dJe=hs({\"src/typescript/typescript.ts\"(e,t){uxe(),uxe(),typeof console<\"u\"&&(L.loggingHost={log(r,i){switch(r){case 1:return console.error(i);case 2:return console.warn(i);case 3:return console.log(i);case 4:return console.log(i)}}}),t.exports=lxe}});return dJe()})();typeof IU<\"u\"&&IU.exports&&(IU.exports=f0);var Eit=f0.createClassifier,iae=f0.createLanguageService,Tit=f0.displayPartsToString,Sit=f0.EndOfLineState,xit=f0.flattenDiagnosticMessageText,Ait=f0.IndentStyle,uA=f0.ScriptKind,Cit=f0.ScriptTarget,Iit=f0.TokenClass,aae=f0;var $i={};$i[\"lib.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es5\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n`;$i[\"lib.decorators.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/**\n * The decorator context types provided to class element decorators.\n */\ntype ClassMemberDecoratorContext =\n    | ClassMethodDecoratorContext\n    | ClassGetterDecoratorContext\n    | ClassSetterDecoratorContext\n    | ClassFieldDecoratorContext\n    | ClassAccessorDecoratorContext\n    ;\n\n/**\n * The decorator context types provided to any decorator.\n */\ntype DecoratorContext =\n    | ClassDecoratorContext\n    | ClassMemberDecoratorContext\n    ;\n\n/**\n * Context provided to a class decorator.\n * @template Class The type of the decorated class associated with this context.\n */\ninterface ClassDecoratorContext<\n    Class extends abstract new (...args: any) => any = abstract new (...args: any) => any,\n> {\n    /** The kind of element that was decorated. */\n    readonly kind: \"class\";\n\n    /** The name of the decorated class. */\n    readonly name: string | undefined;\n\n    /**\n     * Adds a callback to be invoked after the class definition has been finalized.\n     *\n     * @example\n     * \\`\\`\\`ts\n     * function customElement(name: string): ClassDecoratorFunction {\n     *   return (target, context) => {\n     *     context.addInitializer(function () {\n     *       customElements.define(name, this);\n     *     });\n     *   }\n     * }\n     *\n     * @customElement(\"my-element\")\n     * class MyElement {}\n     * \\`\\`\\`\n     */\n    addInitializer(initializer: (this: Class) => void): void;\n}\n\n/**\n * Context provided to a class method decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The type of the decorated class method.\n */\ninterface ClassMethodDecoratorContext<\n    This = unknown,\n    Value extends (this: This, ...args: any) => any = (this: This, ...args: any) => any,\n> {\n    /** The kind of class element that was decorated. */\n    readonly kind: \"method\";\n\n    /** The name of the decorated class element. */\n    readonly name: string | symbol;\n\n    /** A value indicating whether the class element is a static (\\`true\\`) or instance (\\`false\\`) element. */\n    readonly static: boolean;\n\n    /** A value indicating whether the class element has a private name. */\n    readonly private: boolean;\n\n    /** An object that can be used to access the current value of the class element at runtime. */\n    readonly access: {\n        /**\n         * Determines whether an object has a property with the same name as the decorated element.\n         */\n        has(object: This): boolean;\n        /**\n         * Gets the current value of the method from the provided object.\n         *\n         * @example\n         * let fn = context.access.get(instance);\n         */\n        get(object: This): Value;\n    };\n\n    /**\n     * Adds a callback to be invoked either before static initializers are run (when\n     * decorating a \\`static\\` element), or before instance initializers are run (when\n     * decorating a non-\\`static\\` element).\n     *\n     * @example\n     * \\`\\`\\`ts\n     * const bound: ClassMethodDecoratorFunction = (value, context) {\n     *   if (context.private) throw new TypeError(\"Not supported on private methods.\");\n     *   context.addInitializer(function () {\n     *     this[context.name] = this[context.name].bind(this);\n     *   });\n     * }\n     *\n     * class C {\n     *   message = \"Hello\";\n     *\n     *   @bound\n     *   m() {\n     *     console.log(this.message);\n     *   }\n     * }\n     * \\`\\`\\`\n     */\n    addInitializer(initializer: (this: This) => void): void;\n}\n\n/**\n * Context provided to a class getter decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The property type of the decorated class getter.\n */\ninterface ClassGetterDecoratorContext<\n    This = unknown,\n    Value = unknown,\n> {\n    /** The kind of class element that was decorated. */\n    readonly kind: \"getter\";\n\n    /** The name of the decorated class element. */\n    readonly name: string | symbol;\n\n    /** A value indicating whether the class element is a static (\\`true\\`) or instance (\\`false\\`) element. */\n    readonly static: boolean;\n\n    /** A value indicating whether the class element has a private name. */\n    readonly private: boolean;\n\n    /** An object that can be used to access the current value of the class element at runtime. */\n    readonly access: {\n        /**\n         * Determines whether an object has a property with the same name as the decorated element.\n         */\n        has(object: This): boolean;\n        /**\n         * Invokes the getter on the provided object.\n         *\n         * @example\n         * let value = context.access.get(instance);\n         */\n        get(object: This): Value;\n    };\n\n    /**\n     * Adds a callback to be invoked either before static initializers are run (when\n     * decorating a \\`static\\` element), or before instance initializers are run (when\n     * decorating a non-\\`static\\` element).\n     */\n    addInitializer(initializer: (this: This) => void): void;\n}\n\n/**\n * Context provided to a class setter decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The type of the decorated class setter.\n */\ninterface ClassSetterDecoratorContext<\n    This = unknown,\n    Value = unknown,\n> {\n    /** The kind of class element that was decorated. */\n    readonly kind: \"setter\";\n\n    /** The name of the decorated class element. */\n    readonly name: string | symbol;\n\n    /** A value indicating whether the class element is a static (\\`true\\`) or instance (\\`false\\`) element. */\n    readonly static: boolean;\n\n    /** A value indicating whether the class element has a private name. */\n    readonly private: boolean;\n\n    /** An object that can be used to access the current value of the class element at runtime. */\n    readonly access: {\n        /**\n         * Determines whether an object has a property with the same name as the decorated element.\n         */\n        has(object: This): boolean;\n        /**\n         * Invokes the setter on the provided object.\n         *\n         * @example\n         * context.access.set(instance, value);\n         */\n        set(object: This, value: Value): void;\n    };\n\n    /**\n     * Adds a callback to be invoked either before static initializers are run (when\n     * decorating a \\`static\\` element), or before instance initializers are run (when\n     * decorating a non-\\`static\\` element).\n     */\n    addInitializer(initializer: (this: This) => void): void;\n}\n\n/**\n * Context provided to a class \\`accessor\\` field decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The type of decorated class field.\n */\ninterface ClassAccessorDecoratorContext<\n    This = unknown,\n    Value = unknown,\n> {\n    /** The kind of class element that was decorated. */\n    readonly kind: \"accessor\";\n\n    /** The name of the decorated class element. */\n    readonly name: string | symbol;\n\n    /** A value indicating whether the class element is a static (\\`true\\`) or instance (\\`false\\`) element. */\n    readonly static: boolean;\n\n    /** A value indicating whether the class element has a private name. */\n    readonly private: boolean;\n\n    /** An object that can be used to access the current value of the class element at runtime. */\n    readonly access: {\n        /**\n         * Determines whether an object has a property with the same name as the decorated element.\n         */\n        has(object: This): boolean;\n\n        /**\n         * Invokes the getter on the provided object.\n         *\n         * @example\n         * let value = context.access.get(instance);\n         */\n        get(object: This): Value;\n\n        /**\n         * Invokes the setter on the provided object.\n         *\n         * @example\n         * context.access.set(instance, value);\n         */\n        set(object: This, value: Value): void;\n    };\n\n    /**\n     * Adds a callback to be invoked either before static initializers are run (when\n     * decorating a \\`static\\` element), or before instance initializers are run (when\n     * decorating a non-\\`static\\` element).\n     */\n    addInitializer(initializer: (this: This) => void): void;\n}\n\n/**\n * Describes the target provided to class \\`accessor\\` field decorators.\n * @template This The \\`this\\` type to which the target applies.\n * @template Value The property type for the class \\`accessor\\` field.\n */\ninterface ClassAccessorDecoratorTarget<This, Value> {\n    /**\n     * Invokes the getter that was defined prior to decorator application.\n     *\n     * @example\n     * let value = target.get.call(instance);\n     */\n    get(this: This): Value;\n\n    /**\n     * Invokes the setter that was defined prior to decorator application.\n     *\n     * @example\n     * target.set.call(instance, value);\n     */\n    set(this: This, value: Value): void;\n}\n\n/**\n * Describes the allowed return value from a class \\`accessor\\` field decorator.\n * @template This The \\`this\\` type to which the target applies.\n * @template Value The property type for the class \\`accessor\\` field.\n */\ninterface ClassAccessorDecoratorResult<This, Value> {\n    /**\n     * An optional replacement getter function. If not provided, the existing getter function is used instead.\n     */\n    get?(this: This): Value;\n\n    /**\n     * An optional replacement setter function. If not provided, the existing setter function is used instead.\n     */\n    set?(this: This, value: Value): void;\n\n    /**\n     * An optional initializer mutator that is invoked when the underlying field initializer is evaluated.\n     * @param value The incoming initializer value.\n     * @returns The replacement initializer value.\n     */\n    init?(this: This, value: Value): Value;\n}\n\n/**\n * Context provided to a class field decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The type of the decorated class field.\n */\ninterface ClassFieldDecoratorContext<\n    This = unknown,\n    Value = unknown,\n> {\n    /** The kind of class element that was decorated. */\n    readonly kind: \"field\";\n\n    /** The name of the decorated class element. */\n    readonly name: string | symbol;\n\n    /** A value indicating whether the class element is a static (\\`true\\`) or instance (\\`false\\`) element. */\n    readonly static: boolean;\n\n    /** A value indicating whether the class element has a private name. */\n    readonly private: boolean;\n\n    /** An object that can be used to access the current value of the class element at runtime. */\n    readonly access: {\n        /**\n         * Determines whether an object has a property with the same name as the decorated element.\n         */\n        has(object: This): boolean;\n\n        /**\n         * Gets the value of the field on the provided object.\n         */\n        get(object: This): Value;\n\n        /**\n         * Sets the value of the field on the provided object.\n         */\n        set(object: This, value: Value): void;\n    };\n\n    /**\n     * Adds a callback to be invoked either before static initializers are run (when\n     * decorating a \\`static\\` element), or before instance initializers are run (when\n     * decorating a non-\\`static\\` element).\n     */\n    addInitializer(initializer: (this: This) => void): void;\n}\n`;$i[\"lib.decorators.legacy.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ndeclare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void;\ndeclare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;\ndeclare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;\ndeclare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;\n`;$i[\"lib.dom.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/////////////////////////////\n/// Window APIs\n/////////////////////////////\n\ninterface AddEventListenerOptions extends EventListenerOptions {\n    once?: boolean;\n    passive?: boolean;\n    signal?: AbortSignal;\n}\n\ninterface AesCbcParams extends Algorithm {\n    iv: BufferSource;\n}\n\ninterface AesCtrParams extends Algorithm {\n    counter: BufferSource;\n    length: number;\n}\n\ninterface AesDerivedKeyParams extends Algorithm {\n    length: number;\n}\n\ninterface AesGcmParams extends Algorithm {\n    additionalData?: BufferSource;\n    iv: BufferSource;\n    tagLength?: number;\n}\n\ninterface AesKeyAlgorithm extends KeyAlgorithm {\n    length: number;\n}\n\ninterface AesKeyGenParams extends Algorithm {\n    length: number;\n}\n\ninterface Algorithm {\n    name: string;\n}\n\ninterface AnalyserOptions extends AudioNodeOptions {\n    fftSize?: number;\n    maxDecibels?: number;\n    minDecibels?: number;\n    smoothingTimeConstant?: number;\n}\n\ninterface AnimationEventInit extends EventInit {\n    animationName?: string;\n    elapsedTime?: number;\n    pseudoElement?: string;\n}\n\ninterface AnimationPlaybackEventInit extends EventInit {\n    currentTime?: CSSNumberish | null;\n    timelineTime?: CSSNumberish | null;\n}\n\ninterface AssignedNodesOptions {\n    flatten?: boolean;\n}\n\ninterface AudioBufferOptions {\n    length: number;\n    numberOfChannels?: number;\n    sampleRate: number;\n}\n\ninterface AudioBufferSourceOptions {\n    buffer?: AudioBuffer | null;\n    detune?: number;\n    loop?: boolean;\n    loopEnd?: number;\n    loopStart?: number;\n    playbackRate?: number;\n}\n\ninterface AudioConfiguration {\n    bitrate?: number;\n    channels?: string;\n    contentType: string;\n    samplerate?: number;\n    spatialRendering?: boolean;\n}\n\ninterface AudioContextOptions {\n    latencyHint?: AudioContextLatencyCategory | number;\n    sampleRate?: number;\n}\n\ninterface AudioNodeOptions {\n    channelCount?: number;\n    channelCountMode?: ChannelCountMode;\n    channelInterpretation?: ChannelInterpretation;\n}\n\ninterface AudioProcessingEventInit extends EventInit {\n    inputBuffer: AudioBuffer;\n    outputBuffer: AudioBuffer;\n    playbackTime: number;\n}\n\ninterface AudioTimestamp {\n    contextTime?: number;\n    performanceTime?: DOMHighResTimeStamp;\n}\n\ninterface AudioWorkletNodeOptions extends AudioNodeOptions {\n    numberOfInputs?: number;\n    numberOfOutputs?: number;\n    outputChannelCount?: number[];\n    parameterData?: Record<string, number>;\n    processorOptions?: any;\n}\n\ninterface AuthenticationExtensionsClientInputs {\n    appid?: string;\n    credProps?: boolean;\n    hmacCreateSecret?: boolean;\n}\n\ninterface AuthenticationExtensionsClientOutputs {\n    appid?: boolean;\n    credProps?: CredentialPropertiesOutput;\n    hmacCreateSecret?: boolean;\n}\n\ninterface AuthenticatorSelectionCriteria {\n    authenticatorAttachment?: AuthenticatorAttachment;\n    requireResidentKey?: boolean;\n    residentKey?: ResidentKeyRequirement;\n    userVerification?: UserVerificationRequirement;\n}\n\ninterface BiquadFilterOptions extends AudioNodeOptions {\n    Q?: number;\n    detune?: number;\n    frequency?: number;\n    gain?: number;\n    type?: BiquadFilterType;\n}\n\ninterface BlobEventInit {\n    data: Blob;\n    timecode?: DOMHighResTimeStamp;\n}\n\ninterface BlobPropertyBag {\n    endings?: EndingType;\n    type?: string;\n}\n\ninterface CSSStyleSheetInit {\n    baseURL?: string;\n    disabled?: boolean;\n    media?: MediaList | string;\n}\n\ninterface CacheQueryOptions {\n    ignoreMethod?: boolean;\n    ignoreSearch?: boolean;\n    ignoreVary?: boolean;\n}\n\ninterface CanvasRenderingContext2DSettings {\n    alpha?: boolean;\n    colorSpace?: PredefinedColorSpace;\n    desynchronized?: boolean;\n    willReadFrequently?: boolean;\n}\n\ninterface ChannelMergerOptions extends AudioNodeOptions {\n    numberOfInputs?: number;\n}\n\ninterface ChannelSplitterOptions extends AudioNodeOptions {\n    numberOfOutputs?: number;\n}\n\ninterface CheckVisibilityOptions {\n    checkOpacity?: boolean;\n    checkVisibilityCSS?: boolean;\n}\n\ninterface ClientQueryOptions {\n    includeUncontrolled?: boolean;\n    type?: ClientTypes;\n}\n\ninterface ClipboardEventInit extends EventInit {\n    clipboardData?: DataTransfer | null;\n}\n\ninterface ClipboardItemOptions {\n    presentationStyle?: PresentationStyle;\n}\n\ninterface CloseEventInit extends EventInit {\n    code?: number;\n    reason?: string;\n    wasClean?: boolean;\n}\n\ninterface CompositionEventInit extends UIEventInit {\n    data?: string;\n}\n\ninterface ComputedEffectTiming extends EffectTiming {\n    activeDuration?: CSSNumberish;\n    currentIteration?: number | null;\n    endTime?: CSSNumberish;\n    localTime?: CSSNumberish | null;\n    progress?: number | null;\n    startTime?: CSSNumberish;\n}\n\ninterface ComputedKeyframe {\n    composite: CompositeOperationOrAuto;\n    computedOffset: number;\n    easing: string;\n    offset: number | null;\n    [property: string]: string | number | null | undefined;\n}\n\ninterface ConstantSourceOptions {\n    offset?: number;\n}\n\ninterface ConstrainBooleanParameters {\n    exact?: boolean;\n    ideal?: boolean;\n}\n\ninterface ConstrainDOMStringParameters {\n    exact?: string | string[];\n    ideal?: string | string[];\n}\n\ninterface ConstrainDoubleRange extends DoubleRange {\n    exact?: number;\n    ideal?: number;\n}\n\ninterface ConstrainULongRange extends ULongRange {\n    exact?: number;\n    ideal?: number;\n}\n\ninterface ConvolverOptions extends AudioNodeOptions {\n    buffer?: AudioBuffer | null;\n    disableNormalization?: boolean;\n}\n\ninterface CredentialCreationOptions {\n    publicKey?: PublicKeyCredentialCreationOptions;\n    signal?: AbortSignal;\n}\n\ninterface CredentialPropertiesOutput {\n    rk?: boolean;\n}\n\ninterface CredentialRequestOptions {\n    mediation?: CredentialMediationRequirement;\n    publicKey?: PublicKeyCredentialRequestOptions;\n    signal?: AbortSignal;\n}\n\ninterface CryptoKeyPair {\n    privateKey: CryptoKey;\n    publicKey: CryptoKey;\n}\n\ninterface CustomEventInit<T = any> extends EventInit {\n    detail?: T;\n}\n\ninterface DOMMatrix2DInit {\n    a?: number;\n    b?: number;\n    c?: number;\n    d?: number;\n    e?: number;\n    f?: number;\n    m11?: number;\n    m12?: number;\n    m21?: number;\n    m22?: number;\n    m41?: number;\n    m42?: number;\n}\n\ninterface DOMMatrixInit extends DOMMatrix2DInit {\n    is2D?: boolean;\n    m13?: number;\n    m14?: number;\n    m23?: number;\n    m24?: number;\n    m31?: number;\n    m32?: number;\n    m33?: number;\n    m34?: number;\n    m43?: number;\n    m44?: number;\n}\n\ninterface DOMPointInit {\n    w?: number;\n    x?: number;\n    y?: number;\n    z?: number;\n}\n\ninterface DOMQuadInit {\n    p1?: DOMPointInit;\n    p2?: DOMPointInit;\n    p3?: DOMPointInit;\n    p4?: DOMPointInit;\n}\n\ninterface DOMRectInit {\n    height?: number;\n    width?: number;\n    x?: number;\n    y?: number;\n}\n\ninterface DelayOptions extends AudioNodeOptions {\n    delayTime?: number;\n    maxDelayTime?: number;\n}\n\ninterface DeviceMotionEventAccelerationInit {\n    x?: number | null;\n    y?: number | null;\n    z?: number | null;\n}\n\ninterface DeviceMotionEventInit extends EventInit {\n    acceleration?: DeviceMotionEventAccelerationInit;\n    accelerationIncludingGravity?: DeviceMotionEventAccelerationInit;\n    interval?: number;\n    rotationRate?: DeviceMotionEventRotationRateInit;\n}\n\ninterface DeviceMotionEventRotationRateInit {\n    alpha?: number | null;\n    beta?: number | null;\n    gamma?: number | null;\n}\n\ninterface DeviceOrientationEventInit extends EventInit {\n    absolute?: boolean;\n    alpha?: number | null;\n    beta?: number | null;\n    gamma?: number | null;\n}\n\ninterface DisplayMediaStreamOptions {\n    audio?: boolean | MediaTrackConstraints;\n    video?: boolean | MediaTrackConstraints;\n}\n\ninterface DocumentTimelineOptions {\n    originTime?: DOMHighResTimeStamp;\n}\n\ninterface DoubleRange {\n    max?: number;\n    min?: number;\n}\n\ninterface DragEventInit extends MouseEventInit {\n    dataTransfer?: DataTransfer | null;\n}\n\ninterface DynamicsCompressorOptions extends AudioNodeOptions {\n    attack?: number;\n    knee?: number;\n    ratio?: number;\n    release?: number;\n    threshold?: number;\n}\n\ninterface EcKeyAlgorithm extends KeyAlgorithm {\n    namedCurve: NamedCurve;\n}\n\ninterface EcKeyGenParams extends Algorithm {\n    namedCurve: NamedCurve;\n}\n\ninterface EcKeyImportParams extends Algorithm {\n    namedCurve: NamedCurve;\n}\n\ninterface EcdhKeyDeriveParams extends Algorithm {\n    public: CryptoKey;\n}\n\ninterface EcdsaParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n}\n\ninterface EffectTiming {\n    delay?: number;\n    direction?: PlaybackDirection;\n    duration?: number | string;\n    easing?: string;\n    endDelay?: number;\n    fill?: FillMode;\n    iterationStart?: number;\n    iterations?: number;\n    playbackRate?: number;\n}\n\ninterface ElementCreationOptions {\n    is?: string;\n}\n\ninterface ElementDefinitionOptions {\n    extends?: string;\n}\n\ninterface ErrorEventInit extends EventInit {\n    colno?: number;\n    error?: any;\n    filename?: string;\n    lineno?: number;\n    message?: string;\n}\n\ninterface EventInit {\n    bubbles?: boolean;\n    cancelable?: boolean;\n    composed?: boolean;\n}\n\ninterface EventListenerOptions {\n    capture?: boolean;\n}\n\ninterface EventModifierInit extends UIEventInit {\n    altKey?: boolean;\n    ctrlKey?: boolean;\n    metaKey?: boolean;\n    modifierAltGraph?: boolean;\n    modifierCapsLock?: boolean;\n    modifierFn?: boolean;\n    modifierFnLock?: boolean;\n    modifierHyper?: boolean;\n    modifierNumLock?: boolean;\n    modifierScrollLock?: boolean;\n    modifierSuper?: boolean;\n    modifierSymbol?: boolean;\n    modifierSymbolLock?: boolean;\n    shiftKey?: boolean;\n}\n\ninterface EventSourceInit {\n    withCredentials?: boolean;\n}\n\ninterface FilePropertyBag extends BlobPropertyBag {\n    lastModified?: number;\n}\n\ninterface FileSystemFlags {\n    create?: boolean;\n    exclusive?: boolean;\n}\n\ninterface FileSystemGetDirectoryOptions {\n    create?: boolean;\n}\n\ninterface FileSystemGetFileOptions {\n    create?: boolean;\n}\n\ninterface FileSystemRemoveOptions {\n    recursive?: boolean;\n}\n\ninterface FocusEventInit extends UIEventInit {\n    relatedTarget?: EventTarget | null;\n}\n\ninterface FocusOptions {\n    preventScroll?: boolean;\n}\n\ninterface FontFaceDescriptors {\n    ascentOverride?: string;\n    descentOverride?: string;\n    display?: FontDisplay;\n    featureSettings?: string;\n    lineGapOverride?: string;\n    stretch?: string;\n    style?: string;\n    unicodeRange?: string;\n    variant?: string;\n    weight?: string;\n}\n\ninterface FontFaceSetLoadEventInit extends EventInit {\n    fontfaces?: FontFace[];\n}\n\ninterface FormDataEventInit extends EventInit {\n    formData: FormData;\n}\n\ninterface FullscreenOptions {\n    navigationUI?: FullscreenNavigationUI;\n}\n\ninterface GainOptions extends AudioNodeOptions {\n    gain?: number;\n}\n\ninterface GamepadEventInit extends EventInit {\n    gamepad: Gamepad;\n}\n\ninterface GetAnimationsOptions {\n    subtree?: boolean;\n}\n\ninterface GetNotificationOptions {\n    tag?: string;\n}\n\ninterface GetRootNodeOptions {\n    composed?: boolean;\n}\n\ninterface HashChangeEventInit extends EventInit {\n    newURL?: string;\n    oldURL?: string;\n}\n\ninterface HkdfParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n    info: BufferSource;\n    salt: BufferSource;\n}\n\ninterface HmacImportParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n    length?: number;\n}\n\ninterface HmacKeyAlgorithm extends KeyAlgorithm {\n    hash: KeyAlgorithm;\n    length: number;\n}\n\ninterface HmacKeyGenParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n    length?: number;\n}\n\ninterface IDBDatabaseInfo {\n    name?: string;\n    version?: number;\n}\n\ninterface IDBIndexParameters {\n    multiEntry?: boolean;\n    unique?: boolean;\n}\n\ninterface IDBObjectStoreParameters {\n    autoIncrement?: boolean;\n    keyPath?: string | string[] | null;\n}\n\ninterface IDBTransactionOptions {\n    durability?: IDBTransactionDurability;\n}\n\ninterface IDBVersionChangeEventInit extends EventInit {\n    newVersion?: number | null;\n    oldVersion?: number;\n}\n\ninterface IIRFilterOptions extends AudioNodeOptions {\n    feedback: number[];\n    feedforward: number[];\n}\n\ninterface IdleRequestOptions {\n    timeout?: number;\n}\n\ninterface ImageBitmapOptions {\n    colorSpaceConversion?: ColorSpaceConversion;\n    imageOrientation?: ImageOrientation;\n    premultiplyAlpha?: PremultiplyAlpha;\n    resizeHeight?: number;\n    resizeQuality?: ResizeQuality;\n    resizeWidth?: number;\n}\n\ninterface ImageBitmapRenderingContextSettings {\n    alpha?: boolean;\n}\n\ninterface ImageDataSettings {\n    colorSpace?: PredefinedColorSpace;\n}\n\ninterface ImageEncodeOptions {\n    quality?: number;\n    type?: string;\n}\n\ninterface ImportMeta {\n    url: string;\n}\n\ninterface InputEventInit extends UIEventInit {\n    data?: string | null;\n    dataTransfer?: DataTransfer | null;\n    inputType?: string;\n    isComposing?: boolean;\n    targetRanges?: StaticRange[];\n}\n\ninterface IntersectionObserverEntryInit {\n    boundingClientRect: DOMRectInit;\n    intersectionRatio: number;\n    intersectionRect: DOMRectInit;\n    isIntersecting: boolean;\n    rootBounds: DOMRectInit | null;\n    target: Element;\n    time: DOMHighResTimeStamp;\n}\n\ninterface IntersectionObserverInit {\n    root?: Element | Document | null;\n    rootMargin?: string;\n    threshold?: number | number[];\n}\n\ninterface JsonWebKey {\n    alg?: string;\n    crv?: string;\n    d?: string;\n    dp?: string;\n    dq?: string;\n    e?: string;\n    ext?: boolean;\n    k?: string;\n    key_ops?: string[];\n    kty?: string;\n    n?: string;\n    oth?: RsaOtherPrimesInfo[];\n    p?: string;\n    q?: string;\n    qi?: string;\n    use?: string;\n    x?: string;\n    y?: string;\n}\n\ninterface KeyAlgorithm {\n    name: string;\n}\n\ninterface KeyboardEventInit extends EventModifierInit {\n    /** @deprecated */\n    charCode?: number;\n    code?: string;\n    isComposing?: boolean;\n    key?: string;\n    /** @deprecated */\n    keyCode?: number;\n    location?: number;\n    repeat?: boolean;\n}\n\ninterface Keyframe {\n    composite?: CompositeOperationOrAuto;\n    easing?: string;\n    offset?: number | null;\n    [property: string]: string | number | null | undefined;\n}\n\ninterface KeyframeAnimationOptions extends KeyframeEffectOptions {\n    id?: string;\n}\n\ninterface KeyframeEffectOptions extends EffectTiming {\n    composite?: CompositeOperation;\n    iterationComposite?: IterationCompositeOperation;\n    pseudoElement?: string | null;\n}\n\ninterface LockInfo {\n    clientId?: string;\n    mode?: LockMode;\n    name?: string;\n}\n\ninterface LockManagerSnapshot {\n    held?: LockInfo[];\n    pending?: LockInfo[];\n}\n\ninterface LockOptions {\n    ifAvailable?: boolean;\n    mode?: LockMode;\n    signal?: AbortSignal;\n    steal?: boolean;\n}\n\ninterface MIDIConnectionEventInit extends EventInit {\n    port?: MIDIPort;\n}\n\ninterface MIDIMessageEventInit extends EventInit {\n    data?: Uint8Array;\n}\n\ninterface MIDIOptions {\n    software?: boolean;\n    sysex?: boolean;\n}\n\ninterface MediaCapabilitiesDecodingInfo extends MediaCapabilitiesInfo {\n    configuration?: MediaDecodingConfiguration;\n}\n\ninterface MediaCapabilitiesEncodingInfo extends MediaCapabilitiesInfo {\n    configuration?: MediaEncodingConfiguration;\n}\n\ninterface MediaCapabilitiesInfo {\n    powerEfficient: boolean;\n    smooth: boolean;\n    supported: boolean;\n}\n\ninterface MediaConfiguration {\n    audio?: AudioConfiguration;\n    video?: VideoConfiguration;\n}\n\ninterface MediaDecodingConfiguration extends MediaConfiguration {\n    type: MediaDecodingType;\n}\n\ninterface MediaElementAudioSourceOptions {\n    mediaElement: HTMLMediaElement;\n}\n\ninterface MediaEncodingConfiguration extends MediaConfiguration {\n    type: MediaEncodingType;\n}\n\ninterface MediaEncryptedEventInit extends EventInit {\n    initData?: ArrayBuffer | null;\n    initDataType?: string;\n}\n\ninterface MediaImage {\n    sizes?: string;\n    src: string;\n    type?: string;\n}\n\ninterface MediaKeyMessageEventInit extends EventInit {\n    message: ArrayBuffer;\n    messageType: MediaKeyMessageType;\n}\n\ninterface MediaKeySystemConfiguration {\n    audioCapabilities?: MediaKeySystemMediaCapability[];\n    distinctiveIdentifier?: MediaKeysRequirement;\n    initDataTypes?: string[];\n    label?: string;\n    persistentState?: MediaKeysRequirement;\n    sessionTypes?: string[];\n    videoCapabilities?: MediaKeySystemMediaCapability[];\n}\n\ninterface MediaKeySystemMediaCapability {\n    contentType?: string;\n    encryptionScheme?: string | null;\n    robustness?: string;\n}\n\ninterface MediaMetadataInit {\n    album?: string;\n    artist?: string;\n    artwork?: MediaImage[];\n    title?: string;\n}\n\ninterface MediaPositionState {\n    duration?: number;\n    playbackRate?: number;\n    position?: number;\n}\n\ninterface MediaQueryListEventInit extends EventInit {\n    matches?: boolean;\n    media?: string;\n}\n\ninterface MediaRecorderOptions {\n    audioBitsPerSecond?: number;\n    bitsPerSecond?: number;\n    mimeType?: string;\n    videoBitsPerSecond?: number;\n}\n\ninterface MediaSessionActionDetails {\n    action: MediaSessionAction;\n    fastSeek?: boolean;\n    seekOffset?: number;\n    seekTime?: number;\n}\n\ninterface MediaStreamAudioSourceOptions {\n    mediaStream: MediaStream;\n}\n\ninterface MediaStreamConstraints {\n    audio?: boolean | MediaTrackConstraints;\n    peerIdentity?: string;\n    preferCurrentTab?: boolean;\n    video?: boolean | MediaTrackConstraints;\n}\n\ninterface MediaStreamTrackEventInit extends EventInit {\n    track: MediaStreamTrack;\n}\n\ninterface MediaTrackCapabilities {\n    aspectRatio?: DoubleRange;\n    autoGainControl?: boolean[];\n    channelCount?: ULongRange;\n    deviceId?: string;\n    displaySurface?: string;\n    echoCancellation?: boolean[];\n    facingMode?: string[];\n    frameRate?: DoubleRange;\n    groupId?: string;\n    height?: ULongRange;\n    noiseSuppression?: boolean[];\n    sampleRate?: ULongRange;\n    sampleSize?: ULongRange;\n    width?: ULongRange;\n}\n\ninterface MediaTrackConstraintSet {\n    aspectRatio?: ConstrainDouble;\n    autoGainControl?: ConstrainBoolean;\n    channelCount?: ConstrainULong;\n    deviceId?: ConstrainDOMString;\n    displaySurface?: ConstrainDOMString;\n    echoCancellation?: ConstrainBoolean;\n    facingMode?: ConstrainDOMString;\n    frameRate?: ConstrainDouble;\n    groupId?: ConstrainDOMString;\n    height?: ConstrainULong;\n    noiseSuppression?: ConstrainBoolean;\n    sampleRate?: ConstrainULong;\n    sampleSize?: ConstrainULong;\n    width?: ConstrainULong;\n}\n\ninterface MediaTrackConstraints extends MediaTrackConstraintSet {\n    advanced?: MediaTrackConstraintSet[];\n}\n\ninterface MediaTrackSettings {\n    aspectRatio?: number;\n    autoGainControl?: boolean;\n    channelCount?: number;\n    deviceId?: string;\n    displaySurface?: string;\n    echoCancellation?: boolean;\n    facingMode?: string;\n    frameRate?: number;\n    groupId?: string;\n    height?: number;\n    noiseSuppression?: boolean;\n    sampleRate?: number;\n    sampleSize?: number;\n    width?: number;\n}\n\ninterface MediaTrackSupportedConstraints {\n    aspectRatio?: boolean;\n    autoGainControl?: boolean;\n    channelCount?: boolean;\n    deviceId?: boolean;\n    displaySurface?: boolean;\n    echoCancellation?: boolean;\n    facingMode?: boolean;\n    frameRate?: boolean;\n    groupId?: boolean;\n    height?: boolean;\n    noiseSuppression?: boolean;\n    sampleRate?: boolean;\n    sampleSize?: boolean;\n    width?: boolean;\n}\n\ninterface MessageEventInit<T = any> extends EventInit {\n    data?: T;\n    lastEventId?: string;\n    origin?: string;\n    ports?: MessagePort[];\n    source?: MessageEventSource | null;\n}\n\ninterface MouseEventInit extends EventModifierInit {\n    button?: number;\n    buttons?: number;\n    clientX?: number;\n    clientY?: number;\n    movementX?: number;\n    movementY?: number;\n    relatedTarget?: EventTarget | null;\n    screenX?: number;\n    screenY?: number;\n}\n\ninterface MultiCacheQueryOptions extends CacheQueryOptions {\n    cacheName?: string;\n}\n\ninterface MutationObserverInit {\n    /** Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted. */\n    attributeFilter?: string[];\n    /** Set to true if attributes is true or omitted and target's attribute value before the mutation needs to be recorded. */\n    attributeOldValue?: boolean;\n    /** Set to true if mutations to target's attributes are to be observed. Can be omitted if attributeOldValue or attributeFilter is specified. */\n    attributes?: boolean;\n    /** Set to true if mutations to target's data are to be observed. Can be omitted if characterDataOldValue is specified. */\n    characterData?: boolean;\n    /** Set to true if characterData is set to true or omitted and target's data before the mutation needs to be recorded. */\n    characterDataOldValue?: boolean;\n    /** Set to true if mutations to target's children are to be observed. */\n    childList?: boolean;\n    /** Set to true if mutations to not just target, but also target's descendants are to be observed. */\n    subtree?: boolean;\n}\n\ninterface NavigationPreloadState {\n    enabled?: boolean;\n    headerValue?: string;\n}\n\ninterface NotificationAction {\n    action: string;\n    icon?: string;\n    title: string;\n}\n\ninterface NotificationOptions {\n    actions?: NotificationAction[];\n    badge?: string;\n    body?: string;\n    data?: any;\n    dir?: NotificationDirection;\n    icon?: string;\n    image?: string;\n    lang?: string;\n    renotify?: boolean;\n    requireInteraction?: boolean;\n    silent?: boolean;\n    tag?: string;\n    timestamp?: EpochTimeStamp;\n    vibrate?: VibratePattern;\n}\n\ninterface OfflineAudioCompletionEventInit extends EventInit {\n    renderedBuffer: AudioBuffer;\n}\n\ninterface OfflineAudioContextOptions {\n    length: number;\n    numberOfChannels?: number;\n    sampleRate: number;\n}\n\ninterface OptionalEffectTiming {\n    delay?: number;\n    direction?: PlaybackDirection;\n    duration?: number | string;\n    easing?: string;\n    endDelay?: number;\n    fill?: FillMode;\n    iterationStart?: number;\n    iterations?: number;\n    playbackRate?: number;\n}\n\ninterface OscillatorOptions extends AudioNodeOptions {\n    detune?: number;\n    frequency?: number;\n    periodicWave?: PeriodicWave;\n    type?: OscillatorType;\n}\n\ninterface PageTransitionEventInit extends EventInit {\n    persisted?: boolean;\n}\n\ninterface PannerOptions extends AudioNodeOptions {\n    coneInnerAngle?: number;\n    coneOuterAngle?: number;\n    coneOuterGain?: number;\n    distanceModel?: DistanceModelType;\n    maxDistance?: number;\n    orientationX?: number;\n    orientationY?: number;\n    orientationZ?: number;\n    panningModel?: PanningModelType;\n    positionX?: number;\n    positionY?: number;\n    positionZ?: number;\n    refDistance?: number;\n    rolloffFactor?: number;\n}\n\ninterface PaymentCurrencyAmount {\n    currency: string;\n    value: string;\n}\n\ninterface PaymentDetailsBase {\n    displayItems?: PaymentItem[];\n    modifiers?: PaymentDetailsModifier[];\n}\n\ninterface PaymentDetailsInit extends PaymentDetailsBase {\n    id?: string;\n    total: PaymentItem;\n}\n\ninterface PaymentDetailsModifier {\n    additionalDisplayItems?: PaymentItem[];\n    data?: any;\n    supportedMethods: string;\n    total?: PaymentItem;\n}\n\ninterface PaymentDetailsUpdate extends PaymentDetailsBase {\n    paymentMethodErrors?: any;\n    total?: PaymentItem;\n}\n\ninterface PaymentItem {\n    amount: PaymentCurrencyAmount;\n    label: string;\n    pending?: boolean;\n}\n\ninterface PaymentMethodChangeEventInit extends PaymentRequestUpdateEventInit {\n    methodDetails?: any;\n    methodName?: string;\n}\n\ninterface PaymentMethodData {\n    data?: any;\n    supportedMethods: string;\n}\n\ninterface PaymentRequestUpdateEventInit extends EventInit {\n}\n\ninterface PaymentValidationErrors {\n    error?: string;\n    paymentMethod?: any;\n}\n\ninterface Pbkdf2Params extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n    iterations: number;\n    salt: BufferSource;\n}\n\ninterface PerformanceMarkOptions {\n    detail?: any;\n    startTime?: DOMHighResTimeStamp;\n}\n\ninterface PerformanceMeasureOptions {\n    detail?: any;\n    duration?: DOMHighResTimeStamp;\n    end?: string | DOMHighResTimeStamp;\n    start?: string | DOMHighResTimeStamp;\n}\n\ninterface PerformanceObserverInit {\n    buffered?: boolean;\n    entryTypes?: string[];\n    type?: string;\n}\n\ninterface PeriodicWaveConstraints {\n    disableNormalization?: boolean;\n}\n\ninterface PeriodicWaveOptions extends PeriodicWaveConstraints {\n    imag?: number[] | Float32Array;\n    real?: number[] | Float32Array;\n}\n\ninterface PermissionDescriptor {\n    name: PermissionName;\n}\n\ninterface PictureInPictureEventInit extends EventInit {\n    pictureInPictureWindow: PictureInPictureWindow;\n}\n\ninterface PointerEventInit extends MouseEventInit {\n    coalescedEvents?: PointerEvent[];\n    height?: number;\n    isPrimary?: boolean;\n    pointerId?: number;\n    pointerType?: string;\n    predictedEvents?: PointerEvent[];\n    pressure?: number;\n    tangentialPressure?: number;\n    tiltX?: number;\n    tiltY?: number;\n    twist?: number;\n    width?: number;\n}\n\ninterface PopStateEventInit extends EventInit {\n    state?: any;\n}\n\ninterface PositionOptions {\n    enableHighAccuracy?: boolean;\n    maximumAge?: number;\n    timeout?: number;\n}\n\ninterface ProgressEventInit extends EventInit {\n    lengthComputable?: boolean;\n    loaded?: number;\n    total?: number;\n}\n\ninterface PromiseRejectionEventInit extends EventInit {\n    promise: Promise<any>;\n    reason?: any;\n}\n\ninterface PropertyIndexedKeyframes {\n    composite?: CompositeOperationOrAuto | CompositeOperationOrAuto[];\n    easing?: string | string[];\n    offset?: number | (number | null)[];\n    [property: string]: string | string[] | number | null | (number | null)[] | undefined;\n}\n\ninterface PublicKeyCredentialCreationOptions {\n    attestation?: AttestationConveyancePreference;\n    authenticatorSelection?: AuthenticatorSelectionCriteria;\n    challenge: BufferSource;\n    excludeCredentials?: PublicKeyCredentialDescriptor[];\n    extensions?: AuthenticationExtensionsClientInputs;\n    pubKeyCredParams: PublicKeyCredentialParameters[];\n    rp: PublicKeyCredentialRpEntity;\n    timeout?: number;\n    user: PublicKeyCredentialUserEntity;\n}\n\ninterface PublicKeyCredentialDescriptor {\n    id: BufferSource;\n    transports?: AuthenticatorTransport[];\n    type: PublicKeyCredentialType;\n}\n\ninterface PublicKeyCredentialEntity {\n    name: string;\n}\n\ninterface PublicKeyCredentialParameters {\n    alg: COSEAlgorithmIdentifier;\n    type: PublicKeyCredentialType;\n}\n\ninterface PublicKeyCredentialRequestOptions {\n    allowCredentials?: PublicKeyCredentialDescriptor[];\n    challenge: BufferSource;\n    extensions?: AuthenticationExtensionsClientInputs;\n    rpId?: string;\n    timeout?: number;\n    userVerification?: UserVerificationRequirement;\n}\n\ninterface PublicKeyCredentialRpEntity extends PublicKeyCredentialEntity {\n    id?: string;\n}\n\ninterface PublicKeyCredentialUserEntity extends PublicKeyCredentialEntity {\n    displayName: string;\n    id: BufferSource;\n}\n\ninterface PushSubscriptionJSON {\n    endpoint?: string;\n    expirationTime?: EpochTimeStamp | null;\n    keys?: Record<string, string>;\n}\n\ninterface PushSubscriptionOptionsInit {\n    applicationServerKey?: BufferSource | string | null;\n    userVisibleOnly?: boolean;\n}\n\ninterface QueuingStrategy<T = any> {\n    highWaterMark?: number;\n    size?: QueuingStrategySize<T>;\n}\n\ninterface QueuingStrategyInit {\n    /**\n     * Creates a new ByteLengthQueuingStrategy with the provided high water mark.\n     *\n     * Note that the provided high water mark will not be validated ahead of time. Instead, if it is negative, NaN, or not a number, the resulting ByteLengthQueuingStrategy will cause the corresponding stream constructor to throw.\n     */\n    highWaterMark: number;\n}\n\ninterface RTCAnswerOptions extends RTCOfferAnswerOptions {\n}\n\ninterface RTCCertificateExpiration {\n    expires?: number;\n}\n\ninterface RTCConfiguration {\n    bundlePolicy?: RTCBundlePolicy;\n    certificates?: RTCCertificate[];\n    iceCandidatePoolSize?: number;\n    iceServers?: RTCIceServer[];\n    iceTransportPolicy?: RTCIceTransportPolicy;\n    rtcpMuxPolicy?: RTCRtcpMuxPolicy;\n}\n\ninterface RTCDTMFToneChangeEventInit extends EventInit {\n    tone?: string;\n}\n\ninterface RTCDataChannelEventInit extends EventInit {\n    channel: RTCDataChannel;\n}\n\ninterface RTCDataChannelInit {\n    id?: number;\n    maxPacketLifeTime?: number;\n    maxRetransmits?: number;\n    negotiated?: boolean;\n    ordered?: boolean;\n    protocol?: string;\n}\n\ninterface RTCDtlsFingerprint {\n    algorithm?: string;\n    value?: string;\n}\n\ninterface RTCEncodedAudioFrameMetadata {\n    contributingSources?: number[];\n    synchronizationSource?: number;\n}\n\ninterface RTCEncodedVideoFrameMetadata {\n    contributingSources?: number[];\n    dependencies?: number[];\n    frameId?: number;\n    height?: number;\n    spatialIndex?: number;\n    synchronizationSource?: number;\n    temporalIndex?: number;\n    width?: number;\n}\n\ninterface RTCErrorEventInit extends EventInit {\n    error: RTCError;\n}\n\ninterface RTCErrorInit {\n    errorDetail: RTCErrorDetailType;\n    httpRequestStatusCode?: number;\n    receivedAlert?: number;\n    sctpCauseCode?: number;\n    sdpLineNumber?: number;\n    sentAlert?: number;\n}\n\ninterface RTCIceCandidateInit {\n    candidate?: string;\n    sdpMLineIndex?: number | null;\n    sdpMid?: string | null;\n    usernameFragment?: string | null;\n}\n\ninterface RTCIceCandidatePairStats extends RTCStats {\n    availableIncomingBitrate?: number;\n    availableOutgoingBitrate?: number;\n    bytesReceived?: number;\n    bytesSent?: number;\n    currentRoundTripTime?: number;\n    lastPacketReceivedTimestamp?: DOMHighResTimeStamp;\n    lastPacketSentTimestamp?: DOMHighResTimeStamp;\n    localCandidateId: string;\n    nominated?: boolean;\n    remoteCandidateId: string;\n    requestsReceived?: number;\n    requestsSent?: number;\n    responsesReceived?: number;\n    responsesSent?: number;\n    state: RTCStatsIceCandidatePairState;\n    totalRoundTripTime?: number;\n    transportId: string;\n}\n\ninterface RTCIceServer {\n    credential?: string;\n    urls: string | string[];\n    username?: string;\n}\n\ninterface RTCInboundRtpStreamStats extends RTCReceivedRtpStreamStats {\n    audioLevel?: number;\n    bytesReceived?: number;\n    concealedSamples?: number;\n    concealmentEvents?: number;\n    decoderImplementation?: string;\n    estimatedPlayoutTimestamp?: DOMHighResTimeStamp;\n    fecPacketsDiscarded?: number;\n    fecPacketsReceived?: number;\n    firCount?: number;\n    frameHeight?: number;\n    frameWidth?: number;\n    framesDecoded?: number;\n    framesDropped?: number;\n    framesPerSecond?: number;\n    framesReceived?: number;\n    headerBytesReceived?: number;\n    insertedSamplesForDeceleration?: number;\n    jitterBufferDelay?: number;\n    jitterBufferEmittedCount?: number;\n    keyFramesDecoded?: number;\n    kind: string;\n    lastPacketReceivedTimestamp?: DOMHighResTimeStamp;\n    nackCount?: number;\n    packetsDiscarded?: number;\n    pliCount?: number;\n    qpSum?: number;\n    remoteId?: string;\n    removedSamplesForAcceleration?: number;\n    silentConcealedSamples?: number;\n    totalAudioEnergy?: number;\n    totalDecodeTime?: number;\n    totalInterFrameDelay?: number;\n    totalProcessingDelay?: number;\n    totalSamplesDuration?: number;\n    totalSamplesReceived?: number;\n    totalSquaredInterFrameDelay?: number;\n}\n\ninterface RTCLocalSessionDescriptionInit {\n    sdp?: string;\n    type?: RTCSdpType;\n}\n\ninterface RTCOfferAnswerOptions {\n}\n\ninterface RTCOfferOptions extends RTCOfferAnswerOptions {\n    iceRestart?: boolean;\n    offerToReceiveAudio?: boolean;\n    offerToReceiveVideo?: boolean;\n}\n\ninterface RTCOutboundRtpStreamStats extends RTCSentRtpStreamStats {\n    firCount?: number;\n    frameHeight?: number;\n    frameWidth?: number;\n    framesEncoded?: number;\n    framesPerSecond?: number;\n    framesSent?: number;\n    headerBytesSent?: number;\n    hugeFramesSent?: number;\n    keyFramesEncoded?: number;\n    mediaSourceId?: string;\n    nackCount?: number;\n    pliCount?: number;\n    qpSum?: number;\n    qualityLimitationResolutionChanges?: number;\n    remoteId?: string;\n    retransmittedBytesSent?: number;\n    retransmittedPacketsSent?: number;\n    rid?: string;\n    targetBitrate?: number;\n    totalEncodeTime?: number;\n    totalEncodedBytesTarget?: number;\n    totalPacketSendDelay?: number;\n}\n\ninterface RTCPeerConnectionIceErrorEventInit extends EventInit {\n    address?: string | null;\n    errorCode: number;\n    errorText?: string;\n    port?: number | null;\n    url?: string;\n}\n\ninterface RTCPeerConnectionIceEventInit extends EventInit {\n    candidate?: RTCIceCandidate | null;\n    url?: string | null;\n}\n\ninterface RTCReceivedRtpStreamStats extends RTCRtpStreamStats {\n    jitter?: number;\n    packetsLost?: number;\n    packetsReceived?: number;\n}\n\ninterface RTCRtcpParameters {\n    cname?: string;\n    reducedSize?: boolean;\n}\n\ninterface RTCRtpCapabilities {\n    codecs: RTCRtpCodecCapability[];\n    headerExtensions: RTCRtpHeaderExtensionCapability[];\n}\n\ninterface RTCRtpCodecCapability {\n    channels?: number;\n    clockRate: number;\n    mimeType: string;\n    sdpFmtpLine?: string;\n}\n\ninterface RTCRtpCodecParameters {\n    channels?: number;\n    clockRate: number;\n    mimeType: string;\n    payloadType: number;\n    sdpFmtpLine?: string;\n}\n\ninterface RTCRtpCodingParameters {\n    rid?: string;\n}\n\ninterface RTCRtpContributingSource {\n    audioLevel?: number;\n    rtpTimestamp: number;\n    source: number;\n    timestamp: DOMHighResTimeStamp;\n}\n\ninterface RTCRtpEncodingParameters extends RTCRtpCodingParameters {\n    active?: boolean;\n    maxBitrate?: number;\n    maxFramerate?: number;\n    networkPriority?: RTCPriorityType;\n    priority?: RTCPriorityType;\n    scaleResolutionDownBy?: number;\n}\n\ninterface RTCRtpHeaderExtensionCapability {\n    uri?: string;\n}\n\ninterface RTCRtpHeaderExtensionParameters {\n    encrypted?: boolean;\n    id: number;\n    uri: string;\n}\n\ninterface RTCRtpParameters {\n    codecs: RTCRtpCodecParameters[];\n    headerExtensions: RTCRtpHeaderExtensionParameters[];\n    rtcp: RTCRtcpParameters;\n}\n\ninterface RTCRtpReceiveParameters extends RTCRtpParameters {\n}\n\ninterface RTCRtpSendParameters extends RTCRtpParameters {\n    degradationPreference?: RTCDegradationPreference;\n    encodings: RTCRtpEncodingParameters[];\n    transactionId: string;\n}\n\ninterface RTCRtpStreamStats extends RTCStats {\n    codecId?: string;\n    kind: string;\n    ssrc: number;\n    transportId?: string;\n}\n\ninterface RTCRtpSynchronizationSource extends RTCRtpContributingSource {\n}\n\ninterface RTCRtpTransceiverInit {\n    direction?: RTCRtpTransceiverDirection;\n    sendEncodings?: RTCRtpEncodingParameters[];\n    streams?: MediaStream[];\n}\n\ninterface RTCSentRtpStreamStats extends RTCRtpStreamStats {\n    bytesSent?: number;\n    packetsSent?: number;\n}\n\ninterface RTCSessionDescriptionInit {\n    sdp?: string;\n    type: RTCSdpType;\n}\n\ninterface RTCStats {\n    id: string;\n    timestamp: DOMHighResTimeStamp;\n    type: RTCStatsType;\n}\n\ninterface RTCTrackEventInit extends EventInit {\n    receiver: RTCRtpReceiver;\n    streams?: MediaStream[];\n    track: MediaStreamTrack;\n    transceiver: RTCRtpTransceiver;\n}\n\ninterface RTCTransportStats extends RTCStats {\n    bytesReceived?: number;\n    bytesSent?: number;\n    dtlsCipher?: string;\n    dtlsState: RTCDtlsTransportState;\n    localCertificateId?: string;\n    remoteCertificateId?: string;\n    selectedCandidatePairId?: string;\n    srtpCipher?: string;\n    tlsVersion?: string;\n}\n\ninterface ReadableStreamGetReaderOptions {\n    /**\n     * Creates a ReadableStreamBYOBReader and locks the stream to the new reader.\n     *\n     * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams, i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading. The returned BYOB reader provides the ability to directly read individual chunks from the stream via its read() method, into developer-supplied buffers, allowing more precise control over allocation.\n     */\n    mode?: ReadableStreamReaderMode;\n}\n\ninterface ReadableStreamReadDoneResult<T> {\n    done: true;\n    value?: T;\n}\n\ninterface ReadableStreamReadValueResult<T> {\n    done: false;\n    value: T;\n}\n\ninterface ReadableWritablePair<R = any, W = any> {\n    readable: ReadableStream<R>;\n    /**\n     * Provides a convenient, chainable way of piping this readable stream through a transform stream (or any other { writable, readable } pair). It simply pipes the stream into the writable side of the supplied pair, and returns the readable side for further use.\n     *\n     * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n     */\n    writable: WritableStream<W>;\n}\n\ninterface RegistrationOptions {\n    scope?: string;\n    type?: WorkerType;\n    updateViaCache?: ServiceWorkerUpdateViaCache;\n}\n\ninterface RequestInit {\n    /** A BodyInit object or null to set request's body. */\n    body?: BodyInit | null;\n    /** A string indicating how the request will interact with the browser's cache to set request's cache. */\n    cache?: RequestCache;\n    /** A string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. Sets request's credentials. */\n    credentials?: RequestCredentials;\n    /** A Headers object, an object literal, or an array of two-item arrays to set request's headers. */\n    headers?: HeadersInit;\n    /** A cryptographic hash of the resource to be fetched by request. Sets request's integrity. */\n    integrity?: string;\n    /** A boolean to set request's keepalive. */\n    keepalive?: boolean;\n    /** A string to set request's method. */\n    method?: string;\n    /** A string to indicate whether the request will use CORS, or will be restricted to same-origin URLs. Sets request's mode. */\n    mode?: RequestMode;\n    /** A string indicating whether request follows redirects, results in an error upon encountering a redirect, or returns the redirect (in an opaque fashion). Sets request's redirect. */\n    redirect?: RequestRedirect;\n    /** A string whose value is a same-origin URL, \"about:client\", or the empty string, to set request's referrer. */\n    referrer?: string;\n    /** A referrer policy to set request's referrerPolicy. */\n    referrerPolicy?: ReferrerPolicy;\n    /** An AbortSignal to set request's signal. */\n    signal?: AbortSignal | null;\n    /** Can only be null. Used to disassociate request from any Window. */\n    window?: null;\n}\n\ninterface ResizeObserverOptions {\n    box?: ResizeObserverBoxOptions;\n}\n\ninterface ResponseInit {\n    headers?: HeadersInit;\n    status?: number;\n    statusText?: string;\n}\n\ninterface RsaHashedImportParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n}\n\ninterface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm {\n    hash: KeyAlgorithm;\n}\n\ninterface RsaHashedKeyGenParams extends RsaKeyGenParams {\n    hash: HashAlgorithmIdentifier;\n}\n\ninterface RsaKeyAlgorithm extends KeyAlgorithm {\n    modulusLength: number;\n    publicExponent: BigInteger;\n}\n\ninterface RsaKeyGenParams extends Algorithm {\n    modulusLength: number;\n    publicExponent: BigInteger;\n}\n\ninterface RsaOaepParams extends Algorithm {\n    label?: BufferSource;\n}\n\ninterface RsaOtherPrimesInfo {\n    d?: string;\n    r?: string;\n    t?: string;\n}\n\ninterface RsaPssParams extends Algorithm {\n    saltLength: number;\n}\n\ninterface SVGBoundingBoxOptions {\n    clipped?: boolean;\n    fill?: boolean;\n    markers?: boolean;\n    stroke?: boolean;\n}\n\ninterface ScrollIntoViewOptions extends ScrollOptions {\n    block?: ScrollLogicalPosition;\n    inline?: ScrollLogicalPosition;\n}\n\ninterface ScrollOptions {\n    behavior?: ScrollBehavior;\n}\n\ninterface ScrollToOptions extends ScrollOptions {\n    left?: number;\n    top?: number;\n}\n\ninterface SecurityPolicyViolationEventInit extends EventInit {\n    blockedURI?: string;\n    columnNumber?: number;\n    disposition: SecurityPolicyViolationEventDisposition;\n    documentURI: string;\n    effectiveDirective: string;\n    lineNumber?: number;\n    originalPolicy: string;\n    referrer?: string;\n    sample?: string;\n    sourceFile?: string;\n    statusCode: number;\n    violatedDirective: string;\n}\n\ninterface ShadowRootInit {\n    delegatesFocus?: boolean;\n    mode: ShadowRootMode;\n    slotAssignment?: SlotAssignmentMode;\n}\n\ninterface ShareData {\n    files?: File[];\n    text?: string;\n    title?: string;\n    url?: string;\n}\n\ninterface SpeechSynthesisErrorEventInit extends SpeechSynthesisEventInit {\n    error: SpeechSynthesisErrorCode;\n}\n\ninterface SpeechSynthesisEventInit extends EventInit {\n    charIndex?: number;\n    charLength?: number;\n    elapsedTime?: number;\n    name?: string;\n    utterance: SpeechSynthesisUtterance;\n}\n\ninterface StaticRangeInit {\n    endContainer: Node;\n    endOffset: number;\n    startContainer: Node;\n    startOffset: number;\n}\n\ninterface StereoPannerOptions extends AudioNodeOptions {\n    pan?: number;\n}\n\ninterface StorageEstimate {\n    quota?: number;\n    usage?: number;\n}\n\ninterface StorageEventInit extends EventInit {\n    key?: string | null;\n    newValue?: string | null;\n    oldValue?: string | null;\n    storageArea?: Storage | null;\n    url?: string;\n}\n\ninterface StreamPipeOptions {\n    preventAbort?: boolean;\n    preventCancel?: boolean;\n    /**\n     * Pipes this readable stream to a given writable stream destination. The way in which the piping process behaves under various error conditions can be customized with a number of passed options. It returns a promise that fulfills when the piping process completes successfully, or rejects if any errors were encountered.\n     *\n     * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n     *\n     * Errors and closures of the source and destination streams propagate as follows:\n     *\n     * An error in this source readable stream will abort destination, unless preventAbort is truthy. The returned promise will be rejected with the source's error, or with any error that occurs during aborting the destination.\n     *\n     * An error in destination will cancel this source readable stream, unless preventCancel is truthy. The returned promise will be rejected with the destination's error, or with any error that occurs during canceling the source.\n     *\n     * When this source readable stream closes, destination will be closed, unless preventClose is truthy. The returned promise will be fulfilled once this process completes, unless an error is encountered while closing the destination, in which case it will be rejected with that error.\n     *\n     * If destination starts out closed or closing, this source readable stream will be canceled, unless preventCancel is true. The returned promise will be rejected with an error indicating piping to a closed stream failed, or with any error that occurs during canceling the source.\n     *\n     * The signal option can be set to an AbortSignal to allow aborting an ongoing pipe operation via the corresponding AbortController. In this case, this source readable stream will be canceled, and destination aborted, unless the respective options preventCancel or preventAbort are set.\n     */\n    preventClose?: boolean;\n    signal?: AbortSignal;\n}\n\ninterface StructuredSerializeOptions {\n    transfer?: Transferable[];\n}\n\ninterface SubmitEventInit extends EventInit {\n    submitter?: HTMLElement | null;\n}\n\ninterface TextDecodeOptions {\n    stream?: boolean;\n}\n\ninterface TextDecoderOptions {\n    fatal?: boolean;\n    ignoreBOM?: boolean;\n}\n\ninterface TextEncoderEncodeIntoResult {\n    read?: number;\n    written?: number;\n}\n\ninterface TouchEventInit extends EventModifierInit {\n    changedTouches?: Touch[];\n    targetTouches?: Touch[];\n    touches?: Touch[];\n}\n\ninterface TouchInit {\n    altitudeAngle?: number;\n    azimuthAngle?: number;\n    clientX?: number;\n    clientY?: number;\n    force?: number;\n    identifier: number;\n    pageX?: number;\n    pageY?: number;\n    radiusX?: number;\n    radiusY?: number;\n    rotationAngle?: number;\n    screenX?: number;\n    screenY?: number;\n    target: EventTarget;\n    touchType?: TouchType;\n}\n\ninterface TrackEventInit extends EventInit {\n    track?: TextTrack | null;\n}\n\ninterface Transformer<I = any, O = any> {\n    flush?: TransformerFlushCallback<O>;\n    readableType?: undefined;\n    start?: TransformerStartCallback<O>;\n    transform?: TransformerTransformCallback<I, O>;\n    writableType?: undefined;\n}\n\ninterface TransitionEventInit extends EventInit {\n    elapsedTime?: number;\n    propertyName?: string;\n    pseudoElement?: string;\n}\n\ninterface UIEventInit extends EventInit {\n    detail?: number;\n    view?: Window | null;\n    /** @deprecated */\n    which?: number;\n}\n\ninterface ULongRange {\n    max?: number;\n    min?: number;\n}\n\ninterface UnderlyingByteSource {\n    autoAllocateChunkSize?: number;\n    cancel?: UnderlyingSourceCancelCallback;\n    pull?: (controller: ReadableByteStreamController) => void | PromiseLike<void>;\n    start?: (controller: ReadableByteStreamController) => any;\n    type: \"bytes\";\n}\n\ninterface UnderlyingDefaultSource<R = any> {\n    cancel?: UnderlyingSourceCancelCallback;\n    pull?: (controller: ReadableStreamDefaultController<R>) => void | PromiseLike<void>;\n    start?: (controller: ReadableStreamDefaultController<R>) => any;\n    type?: undefined;\n}\n\ninterface UnderlyingSink<W = any> {\n    abort?: UnderlyingSinkAbortCallback;\n    close?: UnderlyingSinkCloseCallback;\n    start?: UnderlyingSinkStartCallback;\n    type?: undefined;\n    write?: UnderlyingSinkWriteCallback<W>;\n}\n\ninterface UnderlyingSource<R = any> {\n    autoAllocateChunkSize?: number;\n    cancel?: UnderlyingSourceCancelCallback;\n    pull?: UnderlyingSourcePullCallback<R>;\n    start?: UnderlyingSourceStartCallback<R>;\n    type?: ReadableStreamType;\n}\n\ninterface ValidityStateFlags {\n    badInput?: boolean;\n    customError?: boolean;\n    patternMismatch?: boolean;\n    rangeOverflow?: boolean;\n    rangeUnderflow?: boolean;\n    stepMismatch?: boolean;\n    tooLong?: boolean;\n    tooShort?: boolean;\n    typeMismatch?: boolean;\n    valueMissing?: boolean;\n}\n\ninterface VideoColorSpaceInit {\n    fullRange?: boolean | null;\n    matrix?: VideoMatrixCoefficients | null;\n    primaries?: VideoColorPrimaries | null;\n    transfer?: VideoTransferCharacteristics | null;\n}\n\ninterface VideoConfiguration {\n    bitrate: number;\n    colorGamut?: ColorGamut;\n    contentType: string;\n    framerate: number;\n    hdrMetadataType?: HdrMetadataType;\n    height: number;\n    scalabilityMode?: string;\n    transferFunction?: TransferFunction;\n    width: number;\n}\n\ninterface VideoFrameCallbackMetadata {\n    captureTime?: DOMHighResTimeStamp;\n    expectedDisplayTime: DOMHighResTimeStamp;\n    height: number;\n    mediaTime: number;\n    presentationTime: DOMHighResTimeStamp;\n    presentedFrames: number;\n    processingDuration?: number;\n    receiveTime?: DOMHighResTimeStamp;\n    rtpTimestamp?: number;\n    width: number;\n}\n\ninterface WaveShaperOptions extends AudioNodeOptions {\n    curve?: number[] | Float32Array;\n    oversample?: OverSampleType;\n}\n\ninterface WebGLContextAttributes {\n    alpha?: boolean;\n    antialias?: boolean;\n    depth?: boolean;\n    desynchronized?: boolean;\n    failIfMajorPerformanceCaveat?: boolean;\n    powerPreference?: WebGLPowerPreference;\n    premultipliedAlpha?: boolean;\n    preserveDrawingBuffer?: boolean;\n    stencil?: boolean;\n}\n\ninterface WebGLContextEventInit extends EventInit {\n    statusMessage?: string;\n}\n\ninterface WheelEventInit extends MouseEventInit {\n    deltaMode?: number;\n    deltaX?: number;\n    deltaY?: number;\n    deltaZ?: number;\n}\n\ninterface WindowPostMessageOptions extends StructuredSerializeOptions {\n    targetOrigin?: string;\n}\n\ninterface WorkerOptions {\n    credentials?: RequestCredentials;\n    name?: string;\n    type?: WorkerType;\n}\n\ninterface WorkletOptions {\n    credentials?: RequestCredentials;\n}\n\ntype NodeFilter = ((node: Node) => number) | { acceptNode(node: Node): number; };\n\ndeclare var NodeFilter: {\n    readonly FILTER_ACCEPT: 1;\n    readonly FILTER_REJECT: 2;\n    readonly FILTER_SKIP: 3;\n    readonly SHOW_ALL: 0xFFFFFFFF;\n    readonly SHOW_ELEMENT: 0x1;\n    readonly SHOW_ATTRIBUTE: 0x2;\n    readonly SHOW_TEXT: 0x4;\n    readonly SHOW_CDATA_SECTION: 0x8;\n    readonly SHOW_ENTITY_REFERENCE: 0x10;\n    readonly SHOW_ENTITY: 0x20;\n    readonly SHOW_PROCESSING_INSTRUCTION: 0x40;\n    readonly SHOW_COMMENT: 0x80;\n    readonly SHOW_DOCUMENT: 0x100;\n    readonly SHOW_DOCUMENT_TYPE: 0x200;\n    readonly SHOW_DOCUMENT_FRAGMENT: 0x400;\n    readonly SHOW_NOTATION: 0x800;\n};\n\ntype XPathNSResolver = ((prefix: string | null) => string | null) | { lookupNamespaceURI(prefix: string | null): string | null; };\n\n/** The ANGLE_instanced_arrays extension is part of the WebGL API and allows to draw the same object, or groups of similar objects multiple times, if they share the same vertex data, primitive count and type. */\ninterface ANGLE_instanced_arrays {\n    drawArraysInstancedANGLE(mode: GLenum, first: GLint, count: GLsizei, primcount: GLsizei): void;\n    drawElementsInstancedANGLE(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, primcount: GLsizei): void;\n    vertexAttribDivisorANGLE(index: GLuint, divisor: GLuint): void;\n    readonly VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88FE;\n}\n\ninterface ARIAMixin {\n    ariaAtomic: string | null;\n    ariaAutoComplete: string | null;\n    ariaBusy: string | null;\n    ariaChecked: string | null;\n    ariaColCount: string | null;\n    ariaColIndex: string | null;\n    ariaColSpan: string | null;\n    ariaCurrent: string | null;\n    ariaDisabled: string | null;\n    ariaExpanded: string | null;\n    ariaHasPopup: string | null;\n    ariaHidden: string | null;\n    ariaInvalid: string | null;\n    ariaKeyShortcuts: string | null;\n    ariaLabel: string | null;\n    ariaLevel: string | null;\n    ariaLive: string | null;\n    ariaModal: string | null;\n    ariaMultiLine: string | null;\n    ariaMultiSelectable: string | null;\n    ariaOrientation: string | null;\n    ariaPlaceholder: string | null;\n    ariaPosInSet: string | null;\n    ariaPressed: string | null;\n    ariaReadOnly: string | null;\n    ariaRequired: string | null;\n    ariaRoleDescription: string | null;\n    ariaRowCount: string | null;\n    ariaRowIndex: string | null;\n    ariaRowSpan: string | null;\n    ariaSelected: string | null;\n    ariaSetSize: string | null;\n    ariaSort: string | null;\n    ariaValueMax: string | null;\n    ariaValueMin: string | null;\n    ariaValueNow: string | null;\n    ariaValueText: string | null;\n    role: string | null;\n}\n\n/** A controller object that allows you to abort one or more DOM requests as and when desired. */\ninterface AbortController {\n    /** Returns the AbortSignal object associated with this object. */\n    readonly signal: AbortSignal;\n    /** Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. */\n    abort(reason?: any): void;\n}\n\ndeclare var AbortController: {\n    prototype: AbortController;\n    new(): AbortController;\n};\n\ninterface AbortSignalEventMap {\n    \"abort\": Event;\n}\n\n/** A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object. */\ninterface AbortSignal extends EventTarget {\n    /** Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise. */\n    readonly aborted: boolean;\n    onabort: ((this: AbortSignal, ev: Event) => any) | null;\n    readonly reason: any;\n    throwIfAborted(): void;\n    addEventListener<K extends keyof AbortSignalEventMap>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AbortSignalEventMap>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AbortSignal: {\n    prototype: AbortSignal;\n    new(): AbortSignal;\n    abort(reason?: any): AbortSignal;\n    timeout(milliseconds: number): AbortSignal;\n};\n\ninterface AbstractRange {\n    /** Returns true if range is collapsed, and false otherwise. */\n    readonly collapsed: boolean;\n    /** Returns range's end node. */\n    readonly endContainer: Node;\n    /** Returns range's end offset. */\n    readonly endOffset: number;\n    /** Returns range's start node. */\n    readonly startContainer: Node;\n    /** Returns range's start offset. */\n    readonly startOffset: number;\n}\n\ndeclare var AbstractRange: {\n    prototype: AbstractRange;\n    new(): AbstractRange;\n};\n\ninterface AbstractWorkerEventMap {\n    \"error\": ErrorEvent;\n}\n\ninterface AbstractWorker {\n    onerror: ((this: AbstractWorker, ev: ErrorEvent) => any) | null;\n    addEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: AbstractWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: AbstractWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** A node able to provide real-time frequency and time-domain analysis information. It is an AudioNode that passes the audio stream unchanged from the input to the output, but allows you to take the generated data, process it, and create audio visualizations. */\ninterface AnalyserNode extends AudioNode {\n    fftSize: number;\n    readonly frequencyBinCount: number;\n    maxDecibels: number;\n    minDecibels: number;\n    smoothingTimeConstant: number;\n    getByteFrequencyData(array: Uint8Array): void;\n    getByteTimeDomainData(array: Uint8Array): void;\n    getFloatFrequencyData(array: Float32Array): void;\n    getFloatTimeDomainData(array: Float32Array): void;\n}\n\ndeclare var AnalyserNode: {\n    prototype: AnalyserNode;\n    new(context: BaseAudioContext, options?: AnalyserOptions): AnalyserNode;\n};\n\ninterface Animatable {\n    animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions): Animation;\n    getAnimations(options?: GetAnimationsOptions): Animation[];\n}\n\ninterface AnimationEventMap {\n    \"cancel\": AnimationPlaybackEvent;\n    \"finish\": AnimationPlaybackEvent;\n    \"remove\": Event;\n}\n\ninterface Animation extends EventTarget {\n    currentTime: CSSNumberish | null;\n    effect: AnimationEffect | null;\n    readonly finished: Promise<Animation>;\n    id: string;\n    oncancel: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null;\n    onfinish: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null;\n    onremove: ((this: Animation, ev: Event) => any) | null;\n    readonly pending: boolean;\n    readonly playState: AnimationPlayState;\n    playbackRate: number;\n    readonly ready: Promise<Animation>;\n    readonly replaceState: AnimationReplaceState;\n    startTime: CSSNumberish | null;\n    timeline: AnimationTimeline | null;\n    cancel(): void;\n    commitStyles(): void;\n    finish(): void;\n    pause(): void;\n    persist(): void;\n    play(): void;\n    reverse(): void;\n    updatePlaybackRate(playbackRate: number): void;\n    addEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: Animation, ev: AnimationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: Animation, ev: AnimationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Animation: {\n    prototype: Animation;\n    new(effect?: AnimationEffect | null, timeline?: AnimationTimeline | null): Animation;\n};\n\ninterface AnimationEffect {\n    getComputedTiming(): ComputedEffectTiming;\n    getTiming(): EffectTiming;\n    updateTiming(timing?: OptionalEffectTiming): void;\n}\n\ndeclare var AnimationEffect: {\n    prototype: AnimationEffect;\n    new(): AnimationEffect;\n};\n\n/** Events providing information related to animations. */\ninterface AnimationEvent extends Event {\n    readonly animationName: string;\n    readonly elapsedTime: number;\n    readonly pseudoElement: string;\n}\n\ndeclare var AnimationEvent: {\n    prototype: AnimationEvent;\n    new(type: string, animationEventInitDict?: AnimationEventInit): AnimationEvent;\n};\n\ninterface AnimationFrameProvider {\n    cancelAnimationFrame(handle: number): void;\n    requestAnimationFrame(callback: FrameRequestCallback): number;\n}\n\ninterface AnimationPlaybackEvent extends Event {\n    readonly currentTime: CSSNumberish | null;\n    readonly timelineTime: CSSNumberish | null;\n}\n\ndeclare var AnimationPlaybackEvent: {\n    prototype: AnimationPlaybackEvent;\n    new(type: string, eventInitDict?: AnimationPlaybackEventInit): AnimationPlaybackEvent;\n};\n\ninterface AnimationTimeline {\n    readonly currentTime: number | null;\n}\n\ndeclare var AnimationTimeline: {\n    prototype: AnimationTimeline;\n    new(): AnimationTimeline;\n};\n\n/** A DOM element's attribute as an object. In most DOM methods, you will probably directly retrieve the attribute as a string (e.g., Element.getAttribute(), but certain functions (e.g., Element.getAttributeNode()) or means of iterating give Attr types. */\ninterface Attr extends Node {\n    readonly localName: string;\n    readonly name: string;\n    readonly namespaceURI: string | null;\n    readonly ownerDocument: Document;\n    readonly ownerElement: Element | null;\n    readonly prefix: string | null;\n    /** @deprecated */\n    readonly specified: boolean;\n    value: string;\n}\n\ndeclare var Attr: {\n    prototype: Attr;\n    new(): Attr;\n};\n\n/** A short audio asset residing in memory, created from an audio file using the AudioContext.decodeAudioData() method, or from raw data using AudioContext.createBuffer(). Once put into an AudioBuffer, the audio can then be played by being passed into an AudioBufferSourceNode. */\ninterface AudioBuffer {\n    readonly duration: number;\n    readonly length: number;\n    readonly numberOfChannels: number;\n    readonly sampleRate: number;\n    copyFromChannel(destination: Float32Array, channelNumber: number, bufferOffset?: number): void;\n    copyToChannel(source: Float32Array, channelNumber: number, bufferOffset?: number): void;\n    getChannelData(channel: number): Float32Array;\n}\n\ndeclare var AudioBuffer: {\n    prototype: AudioBuffer;\n    new(options: AudioBufferOptions): AudioBuffer;\n};\n\n/** An AudioScheduledSourceNode which represents an audio source consisting of in-memory audio data, stored in an AudioBuffer. It's especially useful for playing back audio which has particularly stringent timing accuracy requirements, such as for sounds that must match a specific rhythm and can be kept in memory rather than being played from disk or the network. */\ninterface AudioBufferSourceNode extends AudioScheduledSourceNode {\n    buffer: AudioBuffer | null;\n    readonly detune: AudioParam;\n    loop: boolean;\n    loopEnd: number;\n    loopStart: number;\n    readonly playbackRate: AudioParam;\n    start(when?: number, offset?: number, duration?: number): void;\n    addEventListener<K extends keyof AudioScheduledSourceNodeEventMap>(type: K, listener: (this: AudioBufferSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AudioScheduledSourceNodeEventMap>(type: K, listener: (this: AudioBufferSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AudioBufferSourceNode: {\n    prototype: AudioBufferSourceNode;\n    new(context: BaseAudioContext, options?: AudioBufferSourceOptions): AudioBufferSourceNode;\n};\n\n/** An audio-processing graph built from audio modules linked together, each represented by an AudioNode. */\ninterface AudioContext extends BaseAudioContext {\n    readonly baseLatency: number;\n    readonly outputLatency: number;\n    close(): Promise<void>;\n    createMediaElementSource(mediaElement: HTMLMediaElement): MediaElementAudioSourceNode;\n    createMediaStreamDestination(): MediaStreamAudioDestinationNode;\n    createMediaStreamSource(mediaStream: MediaStream): MediaStreamAudioSourceNode;\n    getOutputTimestamp(): AudioTimestamp;\n    resume(): Promise<void>;\n    suspend(): Promise<void>;\n    addEventListener<K extends keyof BaseAudioContextEventMap>(type: K, listener: (this: AudioContext, ev: BaseAudioContextEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof BaseAudioContextEventMap>(type: K, listener: (this: AudioContext, ev: BaseAudioContextEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AudioContext: {\n    prototype: AudioContext;\n    new(contextOptions?: AudioContextOptions): AudioContext;\n};\n\n/** AudioDestinationNode has no output (as it is the output, no more AudioNode can be linked after it in the audio graph) and one input. The number of channels in the input must be between 0 and the maxChannelCount value or an exception is raised. */\ninterface AudioDestinationNode extends AudioNode {\n    readonly maxChannelCount: number;\n}\n\ndeclare var AudioDestinationNode: {\n    prototype: AudioDestinationNode;\n    new(): AudioDestinationNode;\n};\n\n/** The position and orientation of the unique person listening to the audio scene, and is used in audio spatialization. All PannerNodes spatialize in relation to the AudioListener stored in the BaseAudioContext.listener attribute. */\ninterface AudioListener {\n    readonly forwardX: AudioParam;\n    readonly forwardY: AudioParam;\n    readonly forwardZ: AudioParam;\n    readonly positionX: AudioParam;\n    readonly positionY: AudioParam;\n    readonly positionZ: AudioParam;\n    readonly upX: AudioParam;\n    readonly upY: AudioParam;\n    readonly upZ: AudioParam;\n    /** @deprecated */\n    setOrientation(x: number, y: number, z: number, xUp: number, yUp: number, zUp: number): void;\n    /** @deprecated */\n    setPosition(x: number, y: number, z: number): void;\n}\n\ndeclare var AudioListener: {\n    prototype: AudioListener;\n    new(): AudioListener;\n};\n\n/** A generic interface for representing an audio processing module. Examples include: */\ninterface AudioNode extends EventTarget {\n    channelCount: number;\n    channelCountMode: ChannelCountMode;\n    channelInterpretation: ChannelInterpretation;\n    readonly context: BaseAudioContext;\n    readonly numberOfInputs: number;\n    readonly numberOfOutputs: number;\n    connect(destinationNode: AudioNode, output?: number, input?: number): AudioNode;\n    connect(destinationParam: AudioParam, output?: number): void;\n    disconnect(): void;\n    disconnect(output: number): void;\n    disconnect(destinationNode: AudioNode): void;\n    disconnect(destinationNode: AudioNode, output: number): void;\n    disconnect(destinationNode: AudioNode, output: number, input: number): void;\n    disconnect(destinationParam: AudioParam): void;\n    disconnect(destinationParam: AudioParam, output: number): void;\n}\n\ndeclare var AudioNode: {\n    prototype: AudioNode;\n    new(): AudioNode;\n};\n\n/** The Web Audio API's AudioParam interface represents an audio-related parameter, usually a parameter of an AudioNode (such as GainNode.gain). */\ninterface AudioParam {\n    automationRate: AutomationRate;\n    readonly defaultValue: number;\n    readonly maxValue: number;\n    readonly minValue: number;\n    value: number;\n    cancelAndHoldAtTime(cancelTime: number): AudioParam;\n    cancelScheduledValues(cancelTime: number): AudioParam;\n    exponentialRampToValueAtTime(value: number, endTime: number): AudioParam;\n    linearRampToValueAtTime(value: number, endTime: number): AudioParam;\n    setTargetAtTime(target: number, startTime: number, timeConstant: number): AudioParam;\n    setValueAtTime(value: number, startTime: number): AudioParam;\n    setValueCurveAtTime(values: number[] | Float32Array, startTime: number, duration: number): AudioParam;\n}\n\ndeclare var AudioParam: {\n    prototype: AudioParam;\n    new(): AudioParam;\n};\n\ninterface AudioParamMap {\n    forEach(callbackfn: (value: AudioParam, key: string, parent: AudioParamMap) => void, thisArg?: any): void;\n}\n\ndeclare var AudioParamMap: {\n    prototype: AudioParamMap;\n    new(): AudioParamMap;\n};\n\n/**\n * The Web Audio API events that occur when a ScriptProcessorNode input buffer is ready to be processed.\n * @deprecated As of the August 29 2014 Web Audio API spec publication, this feature has been marked as deprecated, and is soon to be replaced by AudioWorklet.\n */\ninterface AudioProcessingEvent extends Event {\n    /** @deprecated */\n    readonly inputBuffer: AudioBuffer;\n    /** @deprecated */\n    readonly outputBuffer: AudioBuffer;\n    /** @deprecated */\n    readonly playbackTime: number;\n}\n\n/** @deprecated */\ndeclare var AudioProcessingEvent: {\n    prototype: AudioProcessingEvent;\n    new(type: string, eventInitDict: AudioProcessingEventInit): AudioProcessingEvent;\n};\n\ninterface AudioScheduledSourceNodeEventMap {\n    \"ended\": Event;\n}\n\ninterface AudioScheduledSourceNode extends AudioNode {\n    onended: ((this: AudioScheduledSourceNode, ev: Event) => any) | null;\n    start(when?: number): void;\n    stop(when?: number): void;\n    addEventListener<K extends keyof AudioScheduledSourceNodeEventMap>(type: K, listener: (this: AudioScheduledSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AudioScheduledSourceNodeEventMap>(type: K, listener: (this: AudioScheduledSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AudioScheduledSourceNode: {\n    prototype: AudioScheduledSourceNode;\n    new(): AudioScheduledSourceNode;\n};\n\n/** Available only in secure contexts. */\ninterface AudioWorklet extends Worklet {\n}\n\ndeclare var AudioWorklet: {\n    prototype: AudioWorklet;\n    new(): AudioWorklet;\n};\n\ninterface AudioWorkletNodeEventMap {\n    \"processorerror\": Event;\n}\n\n/** Available only in secure contexts. */\ninterface AudioWorkletNode extends AudioNode {\n    onprocessorerror: ((this: AudioWorkletNode, ev: Event) => any) | null;\n    readonly parameters: AudioParamMap;\n    readonly port: MessagePort;\n    addEventListener<K extends keyof AudioWorkletNodeEventMap>(type: K, listener: (this: AudioWorkletNode, ev: AudioWorkletNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AudioWorkletNodeEventMap>(type: K, listener: (this: AudioWorkletNode, ev: AudioWorkletNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AudioWorkletNode: {\n    prototype: AudioWorkletNode;\n    new(context: BaseAudioContext, name: string, options?: AudioWorkletNodeOptions): AudioWorkletNode;\n};\n\n/** Available only in secure contexts. */\ninterface AuthenticatorAssertionResponse extends AuthenticatorResponse {\n    readonly authenticatorData: ArrayBuffer;\n    readonly signature: ArrayBuffer;\n    readonly userHandle: ArrayBuffer | null;\n}\n\ndeclare var AuthenticatorAssertionResponse: {\n    prototype: AuthenticatorAssertionResponse;\n    new(): AuthenticatorAssertionResponse;\n};\n\n/** Available only in secure contexts. */\ninterface AuthenticatorAttestationResponse extends AuthenticatorResponse {\n    readonly attestationObject: ArrayBuffer;\n    getAuthenticatorData(): ArrayBuffer;\n    getPublicKey(): ArrayBuffer | null;\n    getPublicKeyAlgorithm(): COSEAlgorithmIdentifier;\n    getTransports(): string[];\n}\n\ndeclare var AuthenticatorAttestationResponse: {\n    prototype: AuthenticatorAttestationResponse;\n    new(): AuthenticatorAttestationResponse;\n};\n\n/** Available only in secure contexts. */\ninterface AuthenticatorResponse {\n    readonly clientDataJSON: ArrayBuffer;\n}\n\ndeclare var AuthenticatorResponse: {\n    prototype: AuthenticatorResponse;\n    new(): AuthenticatorResponse;\n};\n\ninterface BarProp {\n    readonly visible: boolean;\n}\n\ndeclare var BarProp: {\n    prototype: BarProp;\n    new(): BarProp;\n};\n\ninterface BaseAudioContextEventMap {\n    \"statechange\": Event;\n}\n\ninterface BaseAudioContext extends EventTarget {\n    /** Available only in secure contexts. */\n    readonly audioWorklet: AudioWorklet;\n    readonly currentTime: number;\n    readonly destination: AudioDestinationNode;\n    readonly listener: AudioListener;\n    onstatechange: ((this: BaseAudioContext, ev: Event) => any) | null;\n    readonly sampleRate: number;\n    readonly state: AudioContextState;\n    createAnalyser(): AnalyserNode;\n    createBiquadFilter(): BiquadFilterNode;\n    createBuffer(numberOfChannels: number, length: number, sampleRate: number): AudioBuffer;\n    createBufferSource(): AudioBufferSourceNode;\n    createChannelMerger(numberOfInputs?: number): ChannelMergerNode;\n    createChannelSplitter(numberOfOutputs?: number): ChannelSplitterNode;\n    createConstantSource(): ConstantSourceNode;\n    createConvolver(): ConvolverNode;\n    createDelay(maxDelayTime?: number): DelayNode;\n    createDynamicsCompressor(): DynamicsCompressorNode;\n    createGain(): GainNode;\n    createIIRFilter(feedforward: number[], feedback: number[]): IIRFilterNode;\n    createOscillator(): OscillatorNode;\n    createPanner(): PannerNode;\n    createPeriodicWave(real: number[] | Float32Array, imag: number[] | Float32Array, constraints?: PeriodicWaveConstraints): PeriodicWave;\n    /** @deprecated */\n    createScriptProcessor(bufferSize?: number, numberOfInputChannels?: number, numberOfOutputChannels?: number): ScriptProcessorNode;\n    createStereoPanner(): StereoPannerNode;\n    createWaveShaper(): WaveShaperNode;\n    decodeAudioData(audioData: ArrayBuffer, successCallback?: DecodeSuccessCallback | null, errorCallback?: DecodeErrorCallback | null): Promise<AudioBuffer>;\n    addEventListener<K extends keyof BaseAudioContextEventMap>(type: K, listener: (this: BaseAudioContext, ev: BaseAudioContextEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof BaseAudioContextEventMap>(type: K, listener: (this: BaseAudioContext, ev: BaseAudioContextEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var BaseAudioContext: {\n    prototype: BaseAudioContext;\n    new(): BaseAudioContext;\n};\n\n/** The beforeunload event is fired when the window, the document and its resources are about to be unloaded. */\ninterface BeforeUnloadEvent extends Event {\n    returnValue: any;\n}\n\ndeclare var BeforeUnloadEvent: {\n    prototype: BeforeUnloadEvent;\n    new(): BeforeUnloadEvent;\n};\n\n/** A simple low-order filter, and is created using the AudioContext.createBiquadFilter() method. It is an AudioNode that can represent different kinds of filters, tone control devices, and graphic equalizers. */\ninterface BiquadFilterNode extends AudioNode {\n    readonly Q: AudioParam;\n    readonly detune: AudioParam;\n    readonly frequency: AudioParam;\n    readonly gain: AudioParam;\n    type: BiquadFilterType;\n    getFrequencyResponse(frequencyHz: Float32Array, magResponse: Float32Array, phaseResponse: Float32Array): void;\n}\n\ndeclare var BiquadFilterNode: {\n    prototype: BiquadFilterNode;\n    new(context: BaseAudioContext, options?: BiquadFilterOptions): BiquadFilterNode;\n};\n\n/** A file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user's system. */\ninterface Blob {\n    readonly size: number;\n    readonly type: string;\n    arrayBuffer(): Promise<ArrayBuffer>;\n    slice(start?: number, end?: number, contentType?: string): Blob;\n    stream(): ReadableStream<Uint8Array>;\n    text(): Promise<string>;\n}\n\ndeclare var Blob: {\n    prototype: Blob;\n    new(blobParts?: BlobPart[], options?: BlobPropertyBag): Blob;\n};\n\ninterface BlobEvent extends Event {\n    readonly data: Blob;\n    readonly timecode: DOMHighResTimeStamp;\n}\n\ndeclare var BlobEvent: {\n    prototype: BlobEvent;\n    new(type: string, eventInitDict: BlobEventInit): BlobEvent;\n};\n\ninterface Body {\n    readonly body: ReadableStream<Uint8Array> | null;\n    readonly bodyUsed: boolean;\n    arrayBuffer(): Promise<ArrayBuffer>;\n    blob(): Promise<Blob>;\n    formData(): Promise<FormData>;\n    json(): Promise<any>;\n    text(): Promise<string>;\n}\n\ninterface BroadcastChannelEventMap {\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n}\n\ninterface BroadcastChannel extends EventTarget {\n    /** Returns the channel name (as passed to the constructor). */\n    readonly name: string;\n    onmessage: ((this: BroadcastChannel, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: BroadcastChannel, ev: MessageEvent) => any) | null;\n    /** Closes the BroadcastChannel object, opening it up to garbage collection. */\n    close(): void;\n    /** Sends the given message to other BroadcastChannel objects set up for this channel. Messages can be structured objects, e.g. nested objects and arrays. */\n    postMessage(message: any): void;\n    addEventListener<K extends keyof BroadcastChannelEventMap>(type: K, listener: (this: BroadcastChannel, ev: BroadcastChannelEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof BroadcastChannelEventMap>(type: K, listener: (this: BroadcastChannel, ev: BroadcastChannelEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var BroadcastChannel: {\n    prototype: BroadcastChannel;\n    new(name: string): BroadcastChannel;\n};\n\n/** This Streams API interface provides\\xA0a built-in byte length queuing strategy that can be used when constructing streams. */\ninterface ByteLengthQueuingStrategy extends QueuingStrategy<ArrayBufferView> {\n    readonly highWaterMark: number;\n    readonly size: QueuingStrategySize<ArrayBufferView>;\n}\n\ndeclare var ByteLengthQueuingStrategy: {\n    prototype: ByteLengthQueuingStrategy;\n    new(init: QueuingStrategyInit): ByteLengthQueuingStrategy;\n};\n\n/** A CDATA section that can be used within XML to include extended portions of unescaped text. The symbols < and & don\\u2019t need escaping as they normally do when inside a CDATA section. */\ninterface CDATASection extends Text {\n}\n\ndeclare var CDATASection: {\n    prototype: CDATASection;\n    new(): CDATASection;\n};\n\ninterface CSSAnimation extends Animation {\n    readonly animationName: string;\n    addEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: CSSAnimation, ev: AnimationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: CSSAnimation, ev: AnimationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var CSSAnimation: {\n    prototype: CSSAnimation;\n    new(): CSSAnimation;\n};\n\n/** A single condition CSS at-rule, which consists of a condition and a statement block. It is a child of CSSGroupingRule. */\ninterface CSSConditionRule extends CSSGroupingRule {\n    readonly conditionText: string;\n}\n\ndeclare var CSSConditionRule: {\n    prototype: CSSConditionRule;\n    new(): CSSConditionRule;\n};\n\ninterface CSSContainerRule extends CSSConditionRule {\n}\n\ndeclare var CSSContainerRule: {\n    prototype: CSSContainerRule;\n    new(): CSSContainerRule;\n};\n\ninterface CSSCounterStyleRule extends CSSRule {\n    additiveSymbols: string;\n    fallback: string;\n    name: string;\n    negative: string;\n    pad: string;\n    prefix: string;\n    range: string;\n    speakAs: string;\n    suffix: string;\n    symbols: string;\n    system: string;\n}\n\ndeclare var CSSCounterStyleRule: {\n    prototype: CSSCounterStyleRule;\n    new(): CSSCounterStyleRule;\n};\n\ninterface CSSFontFaceRule extends CSSRule {\n    readonly style: CSSStyleDeclaration;\n}\n\ndeclare var CSSFontFaceRule: {\n    prototype: CSSFontFaceRule;\n    new(): CSSFontFaceRule;\n};\n\ninterface CSSFontFeatureValuesRule extends CSSRule {\n    fontFamily: string;\n}\n\ndeclare var CSSFontFeatureValuesRule: {\n    prototype: CSSFontFeatureValuesRule;\n    new(): CSSFontFeatureValuesRule;\n};\n\ninterface CSSFontPaletteValuesRule extends CSSRule {\n    readonly basePalette: string;\n    readonly fontFamily: string;\n    readonly name: string;\n    readonly overrideColors: string;\n}\n\ndeclare var CSSFontPaletteValuesRule: {\n    prototype: CSSFontPaletteValuesRule;\n    new(): CSSFontPaletteValuesRule;\n};\n\n/** Any CSS at-rule that contains other rules nested within it. */\ninterface CSSGroupingRule extends CSSRule {\n    readonly cssRules: CSSRuleList;\n    deleteRule(index: number): void;\n    insertRule(rule: string, index?: number): number;\n}\n\ndeclare var CSSGroupingRule: {\n    prototype: CSSGroupingRule;\n    new(): CSSGroupingRule;\n};\n\ninterface CSSImportRule extends CSSRule {\n    readonly href: string;\n    readonly layerName: string | null;\n    readonly media: MediaList;\n    readonly styleSheet: CSSStyleSheet;\n}\n\ndeclare var CSSImportRule: {\n    prototype: CSSImportRule;\n    new(): CSSImportRule;\n};\n\n/** An object representing a set of style for a given keyframe. It corresponds to the contains of a single keyframe of a @keyframes at-rule. It implements the CSSRule interface with a type value of 8 (CSSRule.KEYFRAME_RULE). */\ninterface CSSKeyframeRule extends CSSRule {\n    keyText: string;\n    readonly style: CSSStyleDeclaration;\n}\n\ndeclare var CSSKeyframeRule: {\n    prototype: CSSKeyframeRule;\n    new(): CSSKeyframeRule;\n};\n\n/** An object representing a complete set of keyframes for a CSS animation. It corresponds to the contains of a whole @keyframes at-rule. It implements the CSSRule interface with a type value of 7 (CSSRule.KEYFRAMES_RULE). */\ninterface CSSKeyframesRule extends CSSRule {\n    readonly cssRules: CSSRuleList;\n    name: string;\n    appendRule(rule: string): void;\n    deleteRule(select: string): void;\n    findRule(select: string): CSSKeyframeRule | null;\n    [index: number]: CSSKeyframeRule;\n}\n\ndeclare var CSSKeyframesRule: {\n    prototype: CSSKeyframesRule;\n    new(): CSSKeyframesRule;\n};\n\ninterface CSSLayerBlockRule extends CSSGroupingRule {\n    readonly name: string;\n}\n\ndeclare var CSSLayerBlockRule: {\n    prototype: CSSLayerBlockRule;\n    new(): CSSLayerBlockRule;\n};\n\ninterface CSSLayerStatementRule extends CSSRule {\n    readonly nameList: ReadonlyArray<string>;\n}\n\ndeclare var CSSLayerStatementRule: {\n    prototype: CSSLayerStatementRule;\n    new(): CSSLayerStatementRule;\n};\n\n/** A single CSS @media rule. It implements the CSSConditionRule interface, and therefore the CSSGroupingRule and the CSSRule interface with a type value of 4 (CSSRule.MEDIA_RULE). */\ninterface CSSMediaRule extends CSSConditionRule {\n    readonly media: MediaList;\n}\n\ndeclare var CSSMediaRule: {\n    prototype: CSSMediaRule;\n    new(): CSSMediaRule;\n};\n\n/** An object representing a single CSS @namespace at-rule. It implements the CSSRule interface, with a type value of 10 (CSSRule.NAMESPACE_RULE). */\ninterface CSSNamespaceRule extends CSSRule {\n    readonly namespaceURI: string;\n    readonly prefix: string;\n}\n\ndeclare var CSSNamespaceRule: {\n    prototype: CSSNamespaceRule;\n    new(): CSSNamespaceRule;\n};\n\n/** CSSPageRule is an interface representing a single CSS @page rule. It implements the CSSRule interface with a type value of 6 (CSSRule.PAGE_RULE). */\ninterface CSSPageRule extends CSSGroupingRule {\n    selectorText: string;\n    readonly style: CSSStyleDeclaration;\n}\n\ndeclare var CSSPageRule: {\n    prototype: CSSPageRule;\n    new(): CSSPageRule;\n};\n\n/** A single CSS rule. There are several types of rules, listed in the Type constants section below. */\ninterface CSSRule {\n    cssText: string;\n    readonly parentRule: CSSRule | null;\n    readonly parentStyleSheet: CSSStyleSheet | null;\n    /** @deprecated */\n    readonly type: number;\n    readonly STYLE_RULE: 1;\n    readonly CHARSET_RULE: 2;\n    readonly IMPORT_RULE: 3;\n    readonly MEDIA_RULE: 4;\n    readonly FONT_FACE_RULE: 5;\n    readonly PAGE_RULE: 6;\n    readonly NAMESPACE_RULE: 10;\n    readonly KEYFRAMES_RULE: 7;\n    readonly KEYFRAME_RULE: 8;\n    readonly SUPPORTS_RULE: 12;\n}\n\ndeclare var CSSRule: {\n    prototype: CSSRule;\n    new(): CSSRule;\n    readonly STYLE_RULE: 1;\n    readonly CHARSET_RULE: 2;\n    readonly IMPORT_RULE: 3;\n    readonly MEDIA_RULE: 4;\n    readonly FONT_FACE_RULE: 5;\n    readonly PAGE_RULE: 6;\n    readonly NAMESPACE_RULE: 10;\n    readonly KEYFRAMES_RULE: 7;\n    readonly KEYFRAME_RULE: 8;\n    readonly SUPPORTS_RULE: 12;\n};\n\n/** A CSSRuleList is an (indirect-modify only) array-like object containing an ordered collection of CSSRule objects. */\ninterface CSSRuleList {\n    readonly length: number;\n    item(index: number): CSSRule | null;\n    [index: number]: CSSRule;\n}\n\ndeclare var CSSRuleList: {\n    prototype: CSSRuleList;\n    new(): CSSRuleList;\n};\n\n/** An object that is a CSS declaration block, and exposes style information and various style-related methods and properties. */\ninterface CSSStyleDeclaration {\n    accentColor: string;\n    alignContent: string;\n    alignItems: string;\n    alignSelf: string;\n    alignmentBaseline: string;\n    all: string;\n    animation: string;\n    animationDelay: string;\n    animationDirection: string;\n    animationDuration: string;\n    animationFillMode: string;\n    animationIterationCount: string;\n    animationName: string;\n    animationPlayState: string;\n    animationTimingFunction: string;\n    appearance: string;\n    aspectRatio: string;\n    backdropFilter: string;\n    backfaceVisibility: string;\n    background: string;\n    backgroundAttachment: string;\n    backgroundBlendMode: string;\n    backgroundClip: string;\n    backgroundColor: string;\n    backgroundImage: string;\n    backgroundOrigin: string;\n    backgroundPosition: string;\n    backgroundPositionX: string;\n    backgroundPositionY: string;\n    backgroundRepeat: string;\n    backgroundSize: string;\n    baselineShift: string;\n    blockSize: string;\n    border: string;\n    borderBlock: string;\n    borderBlockColor: string;\n    borderBlockEnd: string;\n    borderBlockEndColor: string;\n    borderBlockEndStyle: string;\n    borderBlockEndWidth: string;\n    borderBlockStart: string;\n    borderBlockStartColor: string;\n    borderBlockStartStyle: string;\n    borderBlockStartWidth: string;\n    borderBlockStyle: string;\n    borderBlockWidth: string;\n    borderBottom: string;\n    borderBottomColor: string;\n    borderBottomLeftRadius: string;\n    borderBottomRightRadius: string;\n    borderBottomStyle: string;\n    borderBottomWidth: string;\n    borderCollapse: string;\n    borderColor: string;\n    borderEndEndRadius: string;\n    borderEndStartRadius: string;\n    borderImage: string;\n    borderImageOutset: string;\n    borderImageRepeat: string;\n    borderImageSlice: string;\n    borderImageSource: string;\n    borderImageWidth: string;\n    borderInline: string;\n    borderInlineColor: string;\n    borderInlineEnd: string;\n    borderInlineEndColor: string;\n    borderInlineEndStyle: string;\n    borderInlineEndWidth: string;\n    borderInlineStart: string;\n    borderInlineStartColor: string;\n    borderInlineStartStyle: string;\n    borderInlineStartWidth: string;\n    borderInlineStyle: string;\n    borderInlineWidth: string;\n    borderLeft: string;\n    borderLeftColor: string;\n    borderLeftStyle: string;\n    borderLeftWidth: string;\n    borderRadius: string;\n    borderRight: string;\n    borderRightColor: string;\n    borderRightStyle: string;\n    borderRightWidth: string;\n    borderSpacing: string;\n    borderStartEndRadius: string;\n    borderStartStartRadius: string;\n    borderStyle: string;\n    borderTop: string;\n    borderTopColor: string;\n    borderTopLeftRadius: string;\n    borderTopRightRadius: string;\n    borderTopStyle: string;\n    borderTopWidth: string;\n    borderWidth: string;\n    bottom: string;\n    boxShadow: string;\n    boxSizing: string;\n    breakAfter: string;\n    breakBefore: string;\n    breakInside: string;\n    captionSide: string;\n    caretColor: string;\n    clear: string;\n    /** @deprecated */\n    clip: string;\n    clipPath: string;\n    clipRule: string;\n    color: string;\n    colorInterpolation: string;\n    colorInterpolationFilters: string;\n    colorScheme: string;\n    columnCount: string;\n    columnFill: string;\n    columnGap: string;\n    columnRule: string;\n    columnRuleColor: string;\n    columnRuleStyle: string;\n    columnRuleWidth: string;\n    columnSpan: string;\n    columnWidth: string;\n    columns: string;\n    contain: string;\n    containIntrinsicBlockSize: string;\n    containIntrinsicHeight: string;\n    containIntrinsicInlineSize: string;\n    containIntrinsicSize: string;\n    containIntrinsicWidth: string;\n    container: string;\n    containerName: string;\n    containerType: string;\n    content: string;\n    contentVisibility: string;\n    counterIncrement: string;\n    counterReset: string;\n    counterSet: string;\n    cssFloat: string;\n    cssText: string;\n    cursor: string;\n    direction: string;\n    display: string;\n    dominantBaseline: string;\n    emptyCells: string;\n    fill: string;\n    fillOpacity: string;\n    fillRule: string;\n    filter: string;\n    flex: string;\n    flexBasis: string;\n    flexDirection: string;\n    flexFlow: string;\n    flexGrow: string;\n    flexShrink: string;\n    flexWrap: string;\n    float: string;\n    floodColor: string;\n    floodOpacity: string;\n    font: string;\n    fontFamily: string;\n    fontFeatureSettings: string;\n    fontKerning: string;\n    fontOpticalSizing: string;\n    fontPalette: string;\n    fontSize: string;\n    fontSizeAdjust: string;\n    fontStretch: string;\n    fontStyle: string;\n    fontSynthesis: string;\n    fontVariant: string;\n    fontVariantAlternates: string;\n    fontVariantCaps: string;\n    fontVariantEastAsian: string;\n    fontVariantLigatures: string;\n    fontVariantNumeric: string;\n    fontVariantPosition: string;\n    fontVariationSettings: string;\n    fontWeight: string;\n    gap: string;\n    grid: string;\n    gridArea: string;\n    gridAutoColumns: string;\n    gridAutoFlow: string;\n    gridAutoRows: string;\n    gridColumn: string;\n    gridColumnEnd: string;\n    /** @deprecated This is a legacy alias of \\`columnGap\\`. */\n    gridColumnGap: string;\n    gridColumnStart: string;\n    /** @deprecated This is a legacy alias of \\`gap\\`. */\n    gridGap: string;\n    gridRow: string;\n    gridRowEnd: string;\n    /** @deprecated This is a legacy alias of \\`rowGap\\`. */\n    gridRowGap: string;\n    gridRowStart: string;\n    gridTemplate: string;\n    gridTemplateAreas: string;\n    gridTemplateColumns: string;\n    gridTemplateRows: string;\n    height: string;\n    hyphenateCharacter: string;\n    hyphens: string;\n    /** @deprecated */\n    imageOrientation: string;\n    imageRendering: string;\n    inlineSize: string;\n    inset: string;\n    insetBlock: string;\n    insetBlockEnd: string;\n    insetBlockStart: string;\n    insetInline: string;\n    insetInlineEnd: string;\n    insetInlineStart: string;\n    isolation: string;\n    justifyContent: string;\n    justifyItems: string;\n    justifySelf: string;\n    left: string;\n    readonly length: number;\n    letterSpacing: string;\n    lightingColor: string;\n    lineBreak: string;\n    lineHeight: string;\n    listStyle: string;\n    listStyleImage: string;\n    listStylePosition: string;\n    listStyleType: string;\n    margin: string;\n    marginBlock: string;\n    marginBlockEnd: string;\n    marginBlockStart: string;\n    marginBottom: string;\n    marginInline: string;\n    marginInlineEnd: string;\n    marginInlineStart: string;\n    marginLeft: string;\n    marginRight: string;\n    marginTop: string;\n    marker: string;\n    markerEnd: string;\n    markerMid: string;\n    markerStart: string;\n    mask: string;\n    maskClip: string;\n    maskComposite: string;\n    maskImage: string;\n    maskMode: string;\n    maskOrigin: string;\n    maskPosition: string;\n    maskRepeat: string;\n    maskSize: string;\n    maskType: string;\n    mathStyle: string;\n    maxBlockSize: string;\n    maxHeight: string;\n    maxInlineSize: string;\n    maxWidth: string;\n    minBlockSize: string;\n    minHeight: string;\n    minInlineSize: string;\n    minWidth: string;\n    mixBlendMode: string;\n    objectFit: string;\n    objectPosition: string;\n    offset: string;\n    offsetDistance: string;\n    offsetPath: string;\n    offsetRotate: string;\n    opacity: string;\n    order: string;\n    orphans: string;\n    outline: string;\n    outlineColor: string;\n    outlineOffset: string;\n    outlineStyle: string;\n    outlineWidth: string;\n    overflow: string;\n    overflowAnchor: string;\n    overflowClipMargin: string;\n    overflowWrap: string;\n    overflowX: string;\n    overflowY: string;\n    overscrollBehavior: string;\n    overscrollBehaviorBlock: string;\n    overscrollBehaviorInline: string;\n    overscrollBehaviorX: string;\n    overscrollBehaviorY: string;\n    padding: string;\n    paddingBlock: string;\n    paddingBlockEnd: string;\n    paddingBlockStart: string;\n    paddingBottom: string;\n    paddingInline: string;\n    paddingInlineEnd: string;\n    paddingInlineStart: string;\n    paddingLeft: string;\n    paddingRight: string;\n    paddingTop: string;\n    pageBreakAfter: string;\n    pageBreakBefore: string;\n    pageBreakInside: string;\n    paintOrder: string;\n    readonly parentRule: CSSRule | null;\n    perspective: string;\n    perspectiveOrigin: string;\n    placeContent: string;\n    placeItems: string;\n    placeSelf: string;\n    pointerEvents: string;\n    position: string;\n    printColorAdjust: string;\n    quotes: string;\n    resize: string;\n    right: string;\n    rotate: string;\n    rowGap: string;\n    rubyPosition: string;\n    scale: string;\n    scrollBehavior: string;\n    scrollMargin: string;\n    scrollMarginBlock: string;\n    scrollMarginBlockEnd: string;\n    scrollMarginBlockStart: string;\n    scrollMarginBottom: string;\n    scrollMarginInline: string;\n    scrollMarginInlineEnd: string;\n    scrollMarginInlineStart: string;\n    scrollMarginLeft: string;\n    scrollMarginRight: string;\n    scrollMarginTop: string;\n    scrollPadding: string;\n    scrollPaddingBlock: string;\n    scrollPaddingBlockEnd: string;\n    scrollPaddingBlockStart: string;\n    scrollPaddingBottom: string;\n    scrollPaddingInline: string;\n    scrollPaddingInlineEnd: string;\n    scrollPaddingInlineStart: string;\n    scrollPaddingLeft: string;\n    scrollPaddingRight: string;\n    scrollPaddingTop: string;\n    scrollSnapAlign: string;\n    scrollSnapStop: string;\n    scrollSnapType: string;\n    scrollbarGutter: string;\n    shapeImageThreshold: string;\n    shapeMargin: string;\n    shapeOutside: string;\n    shapeRendering: string;\n    stopColor: string;\n    stopOpacity: string;\n    stroke: string;\n    strokeDasharray: string;\n    strokeDashoffset: string;\n    strokeLinecap: string;\n    strokeLinejoin: string;\n    strokeMiterlimit: string;\n    strokeOpacity: string;\n    strokeWidth: string;\n    tabSize: string;\n    tableLayout: string;\n    textAlign: string;\n    textAlignLast: string;\n    textAnchor: string;\n    textCombineUpright: string;\n    textDecoration: string;\n    textDecorationColor: string;\n    textDecorationLine: string;\n    textDecorationSkipInk: string;\n    textDecorationStyle: string;\n    textDecorationThickness: string;\n    textEmphasis: string;\n    textEmphasisColor: string;\n    textEmphasisPosition: string;\n    textEmphasisStyle: string;\n    textIndent: string;\n    textOrientation: string;\n    textOverflow: string;\n    textRendering: string;\n    textShadow: string;\n    textTransform: string;\n    textUnderlineOffset: string;\n    textUnderlinePosition: string;\n    top: string;\n    touchAction: string;\n    transform: string;\n    transformBox: string;\n    transformOrigin: string;\n    transformStyle: string;\n    transition: string;\n    transitionDelay: string;\n    transitionDuration: string;\n    transitionProperty: string;\n    transitionTimingFunction: string;\n    translate: string;\n    unicodeBidi: string;\n    userSelect: string;\n    verticalAlign: string;\n    visibility: string;\n    /** @deprecated This is a legacy alias of \\`alignContent\\`. */\n    webkitAlignContent: string;\n    /** @deprecated This is a legacy alias of \\`alignItems\\`. */\n    webkitAlignItems: string;\n    /** @deprecated This is a legacy alias of \\`alignSelf\\`. */\n    webkitAlignSelf: string;\n    /** @deprecated This is a legacy alias of \\`animation\\`. */\n    webkitAnimation: string;\n    /** @deprecated This is a legacy alias of \\`animationDelay\\`. */\n    webkitAnimationDelay: string;\n    /** @deprecated This is a legacy alias of \\`animationDirection\\`. */\n    webkitAnimationDirection: string;\n    /** @deprecated This is a legacy alias of \\`animationDuration\\`. */\n    webkitAnimationDuration: string;\n    /** @deprecated This is a legacy alias of \\`animationFillMode\\`. */\n    webkitAnimationFillMode: string;\n    /** @deprecated This is a legacy alias of \\`animationIterationCount\\`. */\n    webkitAnimationIterationCount: string;\n    /** @deprecated This is a legacy alias of \\`animationName\\`. */\n    webkitAnimationName: string;\n    /** @deprecated This is a legacy alias of \\`animationPlayState\\`. */\n    webkitAnimationPlayState: string;\n    /** @deprecated This is a legacy alias of \\`animationTimingFunction\\`. */\n    webkitAnimationTimingFunction: string;\n    /** @deprecated This is a legacy alias of \\`appearance\\`. */\n    webkitAppearance: string;\n    /** @deprecated This is a legacy alias of \\`backfaceVisibility\\`. */\n    webkitBackfaceVisibility: string;\n    /** @deprecated This is a legacy alias of \\`backgroundClip\\`. */\n    webkitBackgroundClip: string;\n    /** @deprecated This is a legacy alias of \\`backgroundOrigin\\`. */\n    webkitBackgroundOrigin: string;\n    /** @deprecated This is a legacy alias of \\`backgroundSize\\`. */\n    webkitBackgroundSize: string;\n    /** @deprecated This is a legacy alias of \\`borderBottomLeftRadius\\`. */\n    webkitBorderBottomLeftRadius: string;\n    /** @deprecated This is a legacy alias of \\`borderBottomRightRadius\\`. */\n    webkitBorderBottomRightRadius: string;\n    /** @deprecated This is a legacy alias of \\`borderRadius\\`. */\n    webkitBorderRadius: string;\n    /** @deprecated This is a legacy alias of \\`borderTopLeftRadius\\`. */\n    webkitBorderTopLeftRadius: string;\n    /** @deprecated This is a legacy alias of \\`borderTopRightRadius\\`. */\n    webkitBorderTopRightRadius: string;\n    /** @deprecated This is a legacy alias of \\`boxAlign\\`. */\n    webkitBoxAlign: string;\n    /** @deprecated This is a legacy alias of \\`boxFlex\\`. */\n    webkitBoxFlex: string;\n    /** @deprecated This is a legacy alias of \\`boxOrdinalGroup\\`. */\n    webkitBoxOrdinalGroup: string;\n    /** @deprecated This is a legacy alias of \\`boxOrient\\`. */\n    webkitBoxOrient: string;\n    /** @deprecated This is a legacy alias of \\`boxPack\\`. */\n    webkitBoxPack: string;\n    /** @deprecated This is a legacy alias of \\`boxShadow\\`. */\n    webkitBoxShadow: string;\n    /** @deprecated This is a legacy alias of \\`boxSizing\\`. */\n    webkitBoxSizing: string;\n    /** @deprecated This is a legacy alias of \\`filter\\`. */\n    webkitFilter: string;\n    /** @deprecated This is a legacy alias of \\`flex\\`. */\n    webkitFlex: string;\n    /** @deprecated This is a legacy alias of \\`flexBasis\\`. */\n    webkitFlexBasis: string;\n    /** @deprecated This is a legacy alias of \\`flexDirection\\`. */\n    webkitFlexDirection: string;\n    /** @deprecated This is a legacy alias of \\`flexFlow\\`. */\n    webkitFlexFlow: string;\n    /** @deprecated This is a legacy alias of \\`flexGrow\\`. */\n    webkitFlexGrow: string;\n    /** @deprecated This is a legacy alias of \\`flexShrink\\`. */\n    webkitFlexShrink: string;\n    /** @deprecated This is a legacy alias of \\`flexWrap\\`. */\n    webkitFlexWrap: string;\n    /** @deprecated This is a legacy alias of \\`justifyContent\\`. */\n    webkitJustifyContent: string;\n    webkitLineClamp: string;\n    /** @deprecated This is a legacy alias of \\`mask\\`. */\n    webkitMask: string;\n    /** @deprecated This is a legacy alias of \\`maskBorder\\`. */\n    webkitMaskBoxImage: string;\n    /** @deprecated This is a legacy alias of \\`maskBorderOutset\\`. */\n    webkitMaskBoxImageOutset: string;\n    /** @deprecated This is a legacy alias of \\`maskBorderRepeat\\`. */\n    webkitMaskBoxImageRepeat: string;\n    /** @deprecated This is a legacy alias of \\`maskBorderSlice\\`. */\n    webkitMaskBoxImageSlice: string;\n    /** @deprecated This is a legacy alias of \\`maskBorderSource\\`. */\n    webkitMaskBoxImageSource: string;\n    /** @deprecated This is a legacy alias of \\`maskBorderWidth\\`. */\n    webkitMaskBoxImageWidth: string;\n    /** @deprecated This is a legacy alias of \\`maskClip\\`. */\n    webkitMaskClip: string;\n    webkitMaskComposite: string;\n    /** @deprecated This is a legacy alias of \\`maskImage\\`. */\n    webkitMaskImage: string;\n    /** @deprecated This is a legacy alias of \\`maskOrigin\\`. */\n    webkitMaskOrigin: string;\n    /** @deprecated This is a legacy alias of \\`maskPosition\\`. */\n    webkitMaskPosition: string;\n    /** @deprecated This is a legacy alias of \\`maskRepeat\\`. */\n    webkitMaskRepeat: string;\n    /** @deprecated This is a legacy alias of \\`maskSize\\`. */\n    webkitMaskSize: string;\n    /** @deprecated This is a legacy alias of \\`order\\`. */\n    webkitOrder: string;\n    /** @deprecated This is a legacy alias of \\`perspective\\`. */\n    webkitPerspective: string;\n    /** @deprecated This is a legacy alias of \\`perspectiveOrigin\\`. */\n    webkitPerspectiveOrigin: string;\n    webkitTextFillColor: string;\n    /** @deprecated This is a legacy alias of \\`textSizeAdjust\\`. */\n    webkitTextSizeAdjust: string;\n    webkitTextStroke: string;\n    webkitTextStrokeColor: string;\n    webkitTextStrokeWidth: string;\n    /** @deprecated This is a legacy alias of \\`transform\\`. */\n    webkitTransform: string;\n    /** @deprecated This is a legacy alias of \\`transformOrigin\\`. */\n    webkitTransformOrigin: string;\n    /** @deprecated This is a legacy alias of \\`transformStyle\\`. */\n    webkitTransformStyle: string;\n    /** @deprecated This is a legacy alias of \\`transition\\`. */\n    webkitTransition: string;\n    /** @deprecated This is a legacy alias of \\`transitionDelay\\`. */\n    webkitTransitionDelay: string;\n    /** @deprecated This is a legacy alias of \\`transitionDuration\\`. */\n    webkitTransitionDuration: string;\n    /** @deprecated This is a legacy alias of \\`transitionProperty\\`. */\n    webkitTransitionProperty: string;\n    /** @deprecated This is a legacy alias of \\`transitionTimingFunction\\`. */\n    webkitTransitionTimingFunction: string;\n    /** @deprecated This is a legacy alias of \\`userSelect\\`. */\n    webkitUserSelect: string;\n    whiteSpace: string;\n    widows: string;\n    width: string;\n    willChange: string;\n    wordBreak: string;\n    wordSpacing: string;\n    /** @deprecated */\n    wordWrap: string;\n    writingMode: string;\n    zIndex: string;\n    getPropertyPriority(property: string): string;\n    getPropertyValue(property: string): string;\n    item(index: number): string;\n    removeProperty(property: string): string;\n    setProperty(property: string, value: string | null, priority?: string): void;\n    [index: number]: string;\n}\n\ndeclare var CSSStyleDeclaration: {\n    prototype: CSSStyleDeclaration;\n    new(): CSSStyleDeclaration;\n};\n\n/** CSSStyleRule represents a single CSS style rule. It implements the CSSRule interface with a type value of 1 (CSSRule.STYLE_RULE). */\ninterface CSSStyleRule extends CSSRule {\n    selectorText: string;\n    readonly style: CSSStyleDeclaration;\n}\n\ndeclare var CSSStyleRule: {\n    prototype: CSSStyleRule;\n    new(): CSSStyleRule;\n};\n\n/** A single CSS style sheet. It inherits properties and methods from its parent, StyleSheet. */\ninterface CSSStyleSheet extends StyleSheet {\n    readonly cssRules: CSSRuleList;\n    readonly ownerRule: CSSRule | null;\n    /** @deprecated */\n    readonly rules: CSSRuleList;\n    /** @deprecated */\n    addRule(selector?: string, style?: string, index?: number): number;\n    deleteRule(index: number): void;\n    insertRule(rule: string, index?: number): number;\n    /** @deprecated */\n    removeRule(index?: number): void;\n    replace(text: string): Promise<CSSStyleSheet>;\n    replaceSync(text: string): void;\n}\n\ndeclare var CSSStyleSheet: {\n    prototype: CSSStyleSheet;\n    new(options?: CSSStyleSheetInit): CSSStyleSheet;\n};\n\n/** An object representing a single CSS @supports at-rule. It implements the CSSConditionRule interface, and therefore the CSSRule and CSSGroupingRule interfaces with a type value of 12 (CSSRule.SUPPORTS_RULE). */\ninterface CSSSupportsRule extends CSSConditionRule {\n}\n\ndeclare var CSSSupportsRule: {\n    prototype: CSSSupportsRule;\n    new(): CSSSupportsRule;\n};\n\ninterface CSSTransition extends Animation {\n    readonly transitionProperty: string;\n    addEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: CSSTransition, ev: AnimationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AnimationEventMap>(type: K, listener: (this: CSSTransition, ev: AnimationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var CSSTransition: {\n    prototype: CSSTransition;\n    new(): CSSTransition;\n};\n\n/**\n * Provides a storage mechanism for Request / Response object pairs that are cached, for example as part of the ServiceWorker life cycle. Note that the Cache interface is exposed to windowed scopes as well as workers. You don't have to use it in conjunction with service workers, even though it is defined in the service worker spec.\n * Available only in secure contexts.\n */\ninterface Cache {\n    add(request: RequestInfo | URL): Promise<void>;\n    addAll(requests: RequestInfo[]): Promise<void>;\n    delete(request: RequestInfo | URL, options?: CacheQueryOptions): Promise<boolean>;\n    keys(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise<ReadonlyArray<Request>>;\n    match(request: RequestInfo | URL, options?: CacheQueryOptions): Promise<Response | undefined>;\n    matchAll(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise<ReadonlyArray<Response>>;\n    put(request: RequestInfo | URL, response: Response): Promise<void>;\n}\n\ndeclare var Cache: {\n    prototype: Cache;\n    new(): Cache;\n};\n\n/**\n * The storage for Cache objects.\n * Available only in secure contexts.\n */\ninterface CacheStorage {\n    delete(cacheName: string): Promise<boolean>;\n    has(cacheName: string): Promise<boolean>;\n    keys(): Promise<string[]>;\n    match(request: RequestInfo | URL, options?: MultiCacheQueryOptions): Promise<Response | undefined>;\n    open(cacheName: string): Promise<Cache>;\n}\n\ndeclare var CacheStorage: {\n    prototype: CacheStorage;\n    new(): CacheStorage;\n};\n\ninterface CanvasCaptureMediaStreamTrack extends MediaStreamTrack {\n    readonly canvas: HTMLCanvasElement;\n    requestFrame(): void;\n    addEventListener<K extends keyof MediaStreamTrackEventMap>(type: K, listener: (this: CanvasCaptureMediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MediaStreamTrackEventMap>(type: K, listener: (this: CanvasCaptureMediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var CanvasCaptureMediaStreamTrack: {\n    prototype: CanvasCaptureMediaStreamTrack;\n    new(): CanvasCaptureMediaStreamTrack;\n};\n\ninterface CanvasCompositing {\n    globalAlpha: number;\n    globalCompositeOperation: GlobalCompositeOperation;\n}\n\ninterface CanvasDrawImage {\n    drawImage(image: CanvasImageSource, dx: number, dy: number): void;\n    drawImage(image: CanvasImageSource, dx: number, dy: number, dw: number, dh: number): void;\n    drawImage(image: CanvasImageSource, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;\n}\n\ninterface CanvasDrawPath {\n    beginPath(): void;\n    clip(fillRule?: CanvasFillRule): void;\n    clip(path: Path2D, fillRule?: CanvasFillRule): void;\n    fill(fillRule?: CanvasFillRule): void;\n    fill(path: Path2D, fillRule?: CanvasFillRule): void;\n    isPointInPath(x: number, y: number, fillRule?: CanvasFillRule): boolean;\n    isPointInPath(path: Path2D, x: number, y: number, fillRule?: CanvasFillRule): boolean;\n    isPointInStroke(x: number, y: number): boolean;\n    isPointInStroke(path: Path2D, x: number, y: number): boolean;\n    stroke(): void;\n    stroke(path: Path2D): void;\n}\n\ninterface CanvasFillStrokeStyles {\n    fillStyle: string | CanvasGradient | CanvasPattern;\n    strokeStyle: string | CanvasGradient | CanvasPattern;\n    createConicGradient(startAngle: number, x: number, y: number): CanvasGradient;\n    createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;\n    createPattern(image: CanvasImageSource, repetition: string | null): CanvasPattern | null;\n    createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;\n}\n\ninterface CanvasFilters {\n    filter: string;\n}\n\n/** An opaque object describing a gradient. It is returned by the methods CanvasRenderingContext2D.createLinearGradient() or CanvasRenderingContext2D.createRadialGradient(). */\ninterface CanvasGradient {\n    /**\n     * Adds a color stop with the given color to the gradient at the given offset. 0.0 is the offset at one end of the gradient, 1.0 is the offset at the other end.\n     *\n     * Throws an \"IndexSizeError\" DOMException if the offset is out of range. Throws a \"SyntaxError\" DOMException if the color cannot be parsed.\n     */\n    addColorStop(offset: number, color: string): void;\n}\n\ndeclare var CanvasGradient: {\n    prototype: CanvasGradient;\n    new(): CanvasGradient;\n};\n\ninterface CanvasImageData {\n    createImageData(sw: number, sh: number, settings?: ImageDataSettings): ImageData;\n    createImageData(imagedata: ImageData): ImageData;\n    getImageData(sx: number, sy: number, sw: number, sh: number, settings?: ImageDataSettings): ImageData;\n    putImageData(imagedata: ImageData, dx: number, dy: number): void;\n    putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void;\n}\n\ninterface CanvasImageSmoothing {\n    imageSmoothingEnabled: boolean;\n    imageSmoothingQuality: ImageSmoothingQuality;\n}\n\ninterface CanvasPath {\n    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;\n    arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;\n    bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;\n    closePath(): void;\n    ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;\n    lineTo(x: number, y: number): void;\n    moveTo(x: number, y: number): void;\n    quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;\n    rect(x: number, y: number, w: number, h: number): void;\n    roundRect(x: number, y: number, w: number, h: number, radii?: number | DOMPointInit | (number | DOMPointInit)[]): void;\n}\n\ninterface CanvasPathDrawingStyles {\n    lineCap: CanvasLineCap;\n    lineDashOffset: number;\n    lineJoin: CanvasLineJoin;\n    lineWidth: number;\n    miterLimit: number;\n    getLineDash(): number[];\n    setLineDash(segments: number[]): void;\n}\n\n/** An opaque object describing a pattern, based on an image, a canvas, or a video, created by the CanvasRenderingContext2D.createPattern() method. */\ninterface CanvasPattern {\n    /** Sets the transformation matrix that will be used when rendering the pattern during a fill or stroke painting operation. */\n    setTransform(transform?: DOMMatrix2DInit): void;\n}\n\ndeclare var CanvasPattern: {\n    prototype: CanvasPattern;\n    new(): CanvasPattern;\n};\n\ninterface CanvasRect {\n    clearRect(x: number, y: number, w: number, h: number): void;\n    fillRect(x: number, y: number, w: number, h: number): void;\n    strokeRect(x: number, y: number, w: number, h: number): void;\n}\n\n/** The CanvasRenderingContext2D interface, part of the Canvas API, provides the 2D rendering context for the drawing surface of a <canvas> element. It is used for drawing shapes, text, images, and other objects. */\ninterface CanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform, CanvasUserInterface {\n    readonly canvas: HTMLCanvasElement;\n    getContextAttributes(): CanvasRenderingContext2DSettings;\n}\n\ndeclare var CanvasRenderingContext2D: {\n    prototype: CanvasRenderingContext2D;\n    new(): CanvasRenderingContext2D;\n};\n\ninterface CanvasShadowStyles {\n    shadowBlur: number;\n    shadowColor: string;\n    shadowOffsetX: number;\n    shadowOffsetY: number;\n}\n\ninterface CanvasState {\n    restore(): void;\n    save(): void;\n}\n\ninterface CanvasText {\n    fillText(text: string, x: number, y: number, maxWidth?: number): void;\n    measureText(text: string): TextMetrics;\n    strokeText(text: string, x: number, y: number, maxWidth?: number): void;\n}\n\ninterface CanvasTextDrawingStyles {\n    direction: CanvasDirection;\n    font: string;\n    fontKerning: CanvasFontKerning;\n    textAlign: CanvasTextAlign;\n    textBaseline: CanvasTextBaseline;\n}\n\ninterface CanvasTransform {\n    getTransform(): DOMMatrix;\n    resetTransform(): void;\n    rotate(angle: number): void;\n    scale(x: number, y: number): void;\n    setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void;\n    setTransform(transform?: DOMMatrix2DInit): void;\n    transform(a: number, b: number, c: number, d: number, e: number, f: number): void;\n    translate(x: number, y: number): void;\n}\n\ninterface CanvasUserInterface {\n    drawFocusIfNeeded(element: Element): void;\n    drawFocusIfNeeded(path: Path2D, element: Element): void;\n}\n\n/** The ChannelMergerNode interface, often used in conjunction with its opposite, ChannelSplitterNode, reunites different mono inputs into a single output. Each input is used to fill a channel of the output. This is useful for accessing each channels separately, e.g. for performing channel mixing where gain must be separately controlled on each channel. */\ninterface ChannelMergerNode extends AudioNode {\n}\n\ndeclare var ChannelMergerNode: {\n    prototype: ChannelMergerNode;\n    new(context: BaseAudioContext, options?: ChannelMergerOptions): ChannelMergerNode;\n};\n\n/** The ChannelSplitterNode interface, often used in conjunction with its opposite, ChannelMergerNode, separates the different channels of an audio source into a set of mono outputs. This is useful for accessing each channel separately, e.g. for performing channel mixing where gain must be separately controlled on each channel. */\ninterface ChannelSplitterNode extends AudioNode {\n}\n\ndeclare var ChannelSplitterNode: {\n    prototype: ChannelSplitterNode;\n    new(context: BaseAudioContext, options?: ChannelSplitterOptions): ChannelSplitterNode;\n};\n\n/** The CharacterData abstract interface represents a Node object that contains characters. This is an abstract interface, meaning there aren't any object of type CharacterData: it is implemented by other interfaces, like Text, Comment, or ProcessingInstruction which aren't abstract. */\ninterface CharacterData extends Node, ChildNode, NonDocumentTypeChildNode {\n    data: string;\n    readonly length: number;\n    readonly ownerDocument: Document;\n    appendData(data: string): void;\n    deleteData(offset: number, count: number): void;\n    insertData(offset: number, data: string): void;\n    replaceData(offset: number, count: number, data: string): void;\n    substringData(offset: number, count: number): string;\n}\n\ndeclare var CharacterData: {\n    prototype: CharacterData;\n    new(): CharacterData;\n};\n\ninterface ChildNode extends Node {\n    /**\n     * Inserts nodes just after node, while replacing strings in nodes with equivalent Text nodes.\n     *\n     * Throws a \"HierarchyRequestError\" DOMException if the constraints of the node tree are violated.\n     */\n    after(...nodes: (Node | string)[]): void;\n    /**\n     * Inserts nodes just before node, while replacing strings in nodes with equivalent Text nodes.\n     *\n     * Throws a \"HierarchyRequestError\" DOMException if the constraints of the node tree are violated.\n     */\n    before(...nodes: (Node | string)[]): void;\n    /** Removes node. */\n    remove(): void;\n    /**\n     * Replaces node with nodes, while replacing strings in nodes with equivalent Text nodes.\n     *\n     * Throws a \"HierarchyRequestError\" DOMException if the constraints of the node tree are violated.\n     */\n    replaceWith(...nodes: (Node | string)[]): void;\n}\n\n/** @deprecated */\ninterface ClientRect extends DOMRect {\n}\n\n/** Available only in secure contexts. */\ninterface Clipboard extends EventTarget {\n    read(): Promise<ClipboardItems>;\n    readText(): Promise<string>;\n    write(data: ClipboardItems): Promise<void>;\n    writeText(data: string): Promise<void>;\n}\n\ndeclare var Clipboard: {\n    prototype: Clipboard;\n    new(): Clipboard;\n};\n\n/** Events providing information related to modification of the clipboard, that is cut, copy, and paste events. */\ninterface ClipboardEvent extends Event {\n    readonly clipboardData: DataTransfer | null;\n}\n\ndeclare var ClipboardEvent: {\n    prototype: ClipboardEvent;\n    new(type: string, eventInitDict?: ClipboardEventInit): ClipboardEvent;\n};\n\n/** Available only in secure contexts. */\ninterface ClipboardItem {\n    readonly presentationStyle: PresentationStyle;\n    readonly types: ReadonlyArray<string>;\n    getType(type: string): Promise<Blob>;\n}\n\ndeclare var ClipboardItem: {\n    prototype: ClipboardItem;\n    new(items: Record<string, string | Blob | PromiseLike<string | Blob>>, options?: ClipboardItemOptions): ClipboardItem;\n};\n\n/** A CloseEvent is sent to clients using WebSockets when the connection is closed. This is delivered to the listener indicated by the WebSocket object's onclose attribute. */\ninterface CloseEvent extends Event {\n    /** Returns the WebSocket connection close code provided by the server. */\n    readonly code: number;\n    /** Returns the WebSocket connection close reason provided by the server. */\n    readonly reason: string;\n    /** Returns true if the connection closed cleanly; false otherwise. */\n    readonly wasClean: boolean;\n}\n\ndeclare var CloseEvent: {\n    prototype: CloseEvent;\n    new(type: string, eventInitDict?: CloseEventInit): CloseEvent;\n};\n\n/** Textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view. */\ninterface Comment extends CharacterData {\n}\n\ndeclare var Comment: {\n    prototype: Comment;\n    new(data?: string): Comment;\n};\n\n/** The DOM CompositionEvent represents events that occur due to the user indirectly entering text. */\ninterface CompositionEvent extends UIEvent {\n    readonly data: string;\n    /** @deprecated */\n    initCompositionEvent(typeArg: string, bubblesArg?: boolean, cancelableArg?: boolean, viewArg?: WindowProxy | null, dataArg?: string): void;\n}\n\ndeclare var CompositionEvent: {\n    prototype: CompositionEvent;\n    new(type: string, eventInitDict?: CompositionEventInit): CompositionEvent;\n};\n\ninterface ConstantSourceNode extends AudioScheduledSourceNode {\n    readonly offset: AudioParam;\n    addEventListener<K extends keyof AudioScheduledSourceNodeEventMap>(type: K, listener: (this: ConstantSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AudioScheduledSourceNodeEventMap>(type: K, listener: (this: ConstantSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ConstantSourceNode: {\n    prototype: ConstantSourceNode;\n    new(context: BaseAudioContext, options?: ConstantSourceOptions): ConstantSourceNode;\n};\n\n/** An AudioNode that performs a Linear Convolution on a given AudioBuffer, often used to achieve a reverb effect. A ConvolverNode always has exactly one input and one output. */\ninterface ConvolverNode extends AudioNode {\n    buffer: AudioBuffer | null;\n    normalize: boolean;\n}\n\ndeclare var ConvolverNode: {\n    prototype: ConvolverNode;\n    new(context: BaseAudioContext, options?: ConvolverOptions): ConvolverNode;\n};\n\n/** This Streams API interface provides\\xA0a built-in byte length queuing strategy that can be used when constructing streams. */\ninterface CountQueuingStrategy extends QueuingStrategy {\n    readonly highWaterMark: number;\n    readonly size: QueuingStrategySize;\n}\n\ndeclare var CountQueuingStrategy: {\n    prototype: CountQueuingStrategy;\n    new(init: QueuingStrategyInit): CountQueuingStrategy;\n};\n\n/** Available only in secure contexts. */\ninterface Credential {\n    readonly id: string;\n    readonly type: string;\n}\n\ndeclare var Credential: {\n    prototype: Credential;\n    new(): Credential;\n};\n\n/** Available only in secure contexts. */\ninterface CredentialsContainer {\n    create(options?: CredentialCreationOptions): Promise<Credential | null>;\n    get(options?: CredentialRequestOptions): Promise<Credential | null>;\n    preventSilentAccess(): Promise<void>;\n    store(credential: Credential): Promise<Credential>;\n}\n\ndeclare var CredentialsContainer: {\n    prototype: CredentialsContainer;\n    new(): CredentialsContainer;\n};\n\n/** Basic cryptography features available in the current context. It allows access to a cryptographically strong random number generator and to cryptographic primitives. */\ninterface Crypto {\n    /** Available only in secure contexts. */\n    readonly subtle: SubtleCrypto;\n    getRandomValues<T extends ArrayBufferView | null>(array: T): T;\n    /** Available only in secure contexts. */\n    randomUUID(): \\`\\${string}-\\${string}-\\${string}-\\${string}-\\${string}\\`;\n}\n\ndeclare var Crypto: {\n    prototype: Crypto;\n    new(): Crypto;\n};\n\n/**\n * The CryptoKey dictionary of the Web Crypto API represents a cryptographic key.\n * Available only in secure contexts.\n */\ninterface CryptoKey {\n    readonly algorithm: KeyAlgorithm;\n    readonly extractable: boolean;\n    readonly type: KeyType;\n    readonly usages: KeyUsage[];\n}\n\ndeclare var CryptoKey: {\n    prototype: CryptoKey;\n    new(): CryptoKey;\n};\n\ninterface CustomElementRegistry {\n    define(name: string, constructor: CustomElementConstructor, options?: ElementDefinitionOptions): void;\n    get(name: string): CustomElementConstructor | undefined;\n    upgrade(root: Node): void;\n    whenDefined(name: string): Promise<CustomElementConstructor>;\n}\n\ndeclare var CustomElementRegistry: {\n    prototype: CustomElementRegistry;\n    new(): CustomElementRegistry;\n};\n\ninterface CustomEvent<T = any> extends Event {\n    /** Returns any custom data event was created with. Typically used for synthetic events. */\n    readonly detail: T;\n    /** @deprecated */\n    initCustomEvent(type: string, bubbles?: boolean, cancelable?: boolean, detail?: T): void;\n}\n\ndeclare var CustomEvent: {\n    prototype: CustomEvent;\n    new<T>(type: string, eventInitDict?: CustomEventInit<T>): CustomEvent<T>;\n};\n\n/** An abnormal event (called an exception) which occurs as a result of calling a method or accessing a property of a web API. */\ninterface DOMException extends Error {\n    /** @deprecated */\n    readonly code: number;\n    readonly message: string;\n    readonly name: string;\n    readonly INDEX_SIZE_ERR: 1;\n    readonly DOMSTRING_SIZE_ERR: 2;\n    readonly HIERARCHY_REQUEST_ERR: 3;\n    readonly WRONG_DOCUMENT_ERR: 4;\n    readonly INVALID_CHARACTER_ERR: 5;\n    readonly NO_DATA_ALLOWED_ERR: 6;\n    readonly NO_MODIFICATION_ALLOWED_ERR: 7;\n    readonly NOT_FOUND_ERR: 8;\n    readonly NOT_SUPPORTED_ERR: 9;\n    readonly INUSE_ATTRIBUTE_ERR: 10;\n    readonly INVALID_STATE_ERR: 11;\n    readonly SYNTAX_ERR: 12;\n    readonly INVALID_MODIFICATION_ERR: 13;\n    readonly NAMESPACE_ERR: 14;\n    readonly INVALID_ACCESS_ERR: 15;\n    readonly VALIDATION_ERR: 16;\n    readonly TYPE_MISMATCH_ERR: 17;\n    readonly SECURITY_ERR: 18;\n    readonly NETWORK_ERR: 19;\n    readonly ABORT_ERR: 20;\n    readonly URL_MISMATCH_ERR: 21;\n    readonly QUOTA_EXCEEDED_ERR: 22;\n    readonly TIMEOUT_ERR: 23;\n    readonly INVALID_NODE_TYPE_ERR: 24;\n    readonly DATA_CLONE_ERR: 25;\n}\n\ndeclare var DOMException: {\n    prototype: DOMException;\n    new(message?: string, name?: string): DOMException;\n    readonly INDEX_SIZE_ERR: 1;\n    readonly DOMSTRING_SIZE_ERR: 2;\n    readonly HIERARCHY_REQUEST_ERR: 3;\n    readonly WRONG_DOCUMENT_ERR: 4;\n    readonly INVALID_CHARACTER_ERR: 5;\n    readonly NO_DATA_ALLOWED_ERR: 6;\n    readonly NO_MODIFICATION_ALLOWED_ERR: 7;\n    readonly NOT_FOUND_ERR: 8;\n    readonly NOT_SUPPORTED_ERR: 9;\n    readonly INUSE_ATTRIBUTE_ERR: 10;\n    readonly INVALID_STATE_ERR: 11;\n    readonly SYNTAX_ERR: 12;\n    readonly INVALID_MODIFICATION_ERR: 13;\n    readonly NAMESPACE_ERR: 14;\n    readonly INVALID_ACCESS_ERR: 15;\n    readonly VALIDATION_ERR: 16;\n    readonly TYPE_MISMATCH_ERR: 17;\n    readonly SECURITY_ERR: 18;\n    readonly NETWORK_ERR: 19;\n    readonly ABORT_ERR: 20;\n    readonly URL_MISMATCH_ERR: 21;\n    readonly QUOTA_EXCEEDED_ERR: 22;\n    readonly TIMEOUT_ERR: 23;\n    readonly INVALID_NODE_TYPE_ERR: 24;\n    readonly DATA_CLONE_ERR: 25;\n};\n\n/** An object providing methods which are not dependent on any particular document. Such an object is returned by the Document.implementation property. */\ninterface DOMImplementation {\n    createDocument(namespace: string | null, qualifiedName: string | null, doctype?: DocumentType | null): XMLDocument;\n    createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType;\n    createHTMLDocument(title?: string): Document;\n    /** @deprecated */\n    hasFeature(...args: any[]): true;\n}\n\ndeclare var DOMImplementation: {\n    prototype: DOMImplementation;\n    new(): DOMImplementation;\n};\n\ninterface DOMMatrix extends DOMMatrixReadOnly {\n    a: number;\n    b: number;\n    c: number;\n    d: number;\n    e: number;\n    f: number;\n    m11: number;\n    m12: number;\n    m13: number;\n    m14: number;\n    m21: number;\n    m22: number;\n    m23: number;\n    m24: number;\n    m31: number;\n    m32: number;\n    m33: number;\n    m34: number;\n    m41: number;\n    m42: number;\n    m43: number;\n    m44: number;\n    invertSelf(): DOMMatrix;\n    multiplySelf(other?: DOMMatrixInit): DOMMatrix;\n    preMultiplySelf(other?: DOMMatrixInit): DOMMatrix;\n    rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;\n    rotateFromVectorSelf(x?: number, y?: number): DOMMatrix;\n    rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;\n    scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n    scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n    setMatrixValue(transformList: string): DOMMatrix;\n    skewXSelf(sx?: number): DOMMatrix;\n    skewYSelf(sy?: number): DOMMatrix;\n    translateSelf(tx?: number, ty?: number, tz?: number): DOMMatrix;\n}\n\ndeclare var DOMMatrix: {\n    prototype: DOMMatrix;\n    new(init?: string | number[]): DOMMatrix;\n    fromFloat32Array(array32: Float32Array): DOMMatrix;\n    fromFloat64Array(array64: Float64Array): DOMMatrix;\n    fromMatrix(other?: DOMMatrixInit): DOMMatrix;\n};\n\ntype SVGMatrix = DOMMatrix;\ndeclare var SVGMatrix: typeof DOMMatrix;\n\ntype WebKitCSSMatrix = DOMMatrix;\ndeclare var WebKitCSSMatrix: typeof DOMMatrix;\n\ninterface DOMMatrixReadOnly {\n    readonly a: number;\n    readonly b: number;\n    readonly c: number;\n    readonly d: number;\n    readonly e: number;\n    readonly f: number;\n    readonly is2D: boolean;\n    readonly isIdentity: boolean;\n    readonly m11: number;\n    readonly m12: number;\n    readonly m13: number;\n    readonly m14: number;\n    readonly m21: number;\n    readonly m22: number;\n    readonly m23: number;\n    readonly m24: number;\n    readonly m31: number;\n    readonly m32: number;\n    readonly m33: number;\n    readonly m34: number;\n    readonly m41: number;\n    readonly m42: number;\n    readonly m43: number;\n    readonly m44: number;\n    flipX(): DOMMatrix;\n    flipY(): DOMMatrix;\n    inverse(): DOMMatrix;\n    multiply(other?: DOMMatrixInit): DOMMatrix;\n    rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;\n    rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;\n    rotateFromVector(x?: number, y?: number): DOMMatrix;\n    scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n    scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n    /** @deprecated */\n    scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix;\n    skewX(sx?: number): DOMMatrix;\n    skewY(sy?: number): DOMMatrix;\n    toFloat32Array(): Float32Array;\n    toFloat64Array(): Float64Array;\n    toJSON(): any;\n    transformPoint(point?: DOMPointInit): DOMPoint;\n    translate(tx?: number, ty?: number, tz?: number): DOMMatrix;\n    toString(): string;\n}\n\ndeclare var DOMMatrixReadOnly: {\n    prototype: DOMMatrixReadOnly;\n    new(init?: string | number[]): DOMMatrixReadOnly;\n    fromFloat32Array(array32: Float32Array): DOMMatrixReadOnly;\n    fromFloat64Array(array64: Float64Array): DOMMatrixReadOnly;\n    fromMatrix(other?: DOMMatrixInit): DOMMatrixReadOnly;\n    toString(): string;\n};\n\n/** Provides the ability to parse XML or HTML source code from a string into a DOM Document. */\ninterface DOMParser {\n    /**\n     * Parses string using either the HTML or XML parser, according to type, and returns the resulting Document. type can be \"text/html\" (which will invoke the HTML parser), or any of \"text/xml\", \"application/xml\", \"application/xhtml+xml\", or \"image/svg+xml\" (which will invoke the XML parser).\n     *\n     * For the XML parser, if string cannot be parsed, then the returned Document will contain elements describing the resulting error.\n     *\n     * Note that script elements are not evaluated during parsing, and the resulting document's encoding will always be UTF-8.\n     *\n     * Values other than the above for type will cause a TypeError exception to be thrown.\n     */\n    parseFromString(string: string, type: DOMParserSupportedType): Document;\n}\n\ndeclare var DOMParser: {\n    prototype: DOMParser;\n    new(): DOMParser;\n};\n\ninterface DOMPoint extends DOMPointReadOnly {\n    w: number;\n    x: number;\n    y: number;\n    z: number;\n}\n\ndeclare var DOMPoint: {\n    prototype: DOMPoint;\n    new(x?: number, y?: number, z?: number, w?: number): DOMPoint;\n    fromPoint(other?: DOMPointInit): DOMPoint;\n};\n\ntype SVGPoint = DOMPoint;\ndeclare var SVGPoint: typeof DOMPoint;\n\ninterface DOMPointReadOnly {\n    readonly w: number;\n    readonly x: number;\n    readonly y: number;\n    readonly z: number;\n    matrixTransform(matrix?: DOMMatrixInit): DOMPoint;\n    toJSON(): any;\n}\n\ndeclare var DOMPointReadOnly: {\n    prototype: DOMPointReadOnly;\n    new(x?: number, y?: number, z?: number, w?: number): DOMPointReadOnly;\n    fromPoint(other?: DOMPointInit): DOMPointReadOnly;\n};\n\ninterface DOMQuad {\n    readonly p1: DOMPoint;\n    readonly p2: DOMPoint;\n    readonly p3: DOMPoint;\n    readonly p4: DOMPoint;\n    getBounds(): DOMRect;\n    toJSON(): any;\n}\n\ndeclare var DOMQuad: {\n    prototype: DOMQuad;\n    new(p1?: DOMPointInit, p2?: DOMPointInit, p3?: DOMPointInit, p4?: DOMPointInit): DOMQuad;\n    fromQuad(other?: DOMQuadInit): DOMQuad;\n    fromRect(other?: DOMRectInit): DOMQuad;\n};\n\ninterface DOMRect extends DOMRectReadOnly {\n    height: number;\n    width: number;\n    x: number;\n    y: number;\n}\n\ndeclare var DOMRect: {\n    prototype: DOMRect;\n    new(x?: number, y?: number, width?: number, height?: number): DOMRect;\n    fromRect(other?: DOMRectInit): DOMRect;\n};\n\ntype SVGRect = DOMRect;\ndeclare var SVGRect: typeof DOMRect;\n\ninterface DOMRectList {\n    readonly length: number;\n    item(index: number): DOMRect | null;\n    [index: number]: DOMRect;\n}\n\ndeclare var DOMRectList: {\n    prototype: DOMRectList;\n    new(): DOMRectList;\n};\n\ninterface DOMRectReadOnly {\n    readonly bottom: number;\n    readonly height: number;\n    readonly left: number;\n    readonly right: number;\n    readonly top: number;\n    readonly width: number;\n    readonly x: number;\n    readonly y: number;\n    toJSON(): any;\n}\n\ndeclare var DOMRectReadOnly: {\n    prototype: DOMRectReadOnly;\n    new(x?: number, y?: number, width?: number, height?: number): DOMRectReadOnly;\n    fromRect(other?: DOMRectInit): DOMRectReadOnly;\n};\n\n/** A type returned by some APIs which contains a list of DOMString (strings). */\ninterface DOMStringList {\n    /** Returns the number of strings in strings. */\n    readonly length: number;\n    /** Returns true if strings contains string, and false otherwise. */\n    contains(string: string): boolean;\n    /** Returns the string with index index from strings. */\n    item(index: number): string | null;\n    [index: number]: string;\n}\n\ndeclare var DOMStringList: {\n    prototype: DOMStringList;\n    new(): DOMStringList;\n};\n\n/** Used by the dataset\\xA0HTML\\xA0attribute to represent data for custom attributes added to elements. */\ninterface DOMStringMap {\n    [name: string]: string | undefined;\n}\n\ndeclare var DOMStringMap: {\n    prototype: DOMStringMap;\n    new(): DOMStringMap;\n};\n\n/** A set of space-separated tokens. Such a set is returned by Element.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList, HTMLAreaElement.relList, HTMLIframeElement.sandbox, or HTMLOutputElement.htmlFor. It is indexed beginning with 0 as with JavaScript Array objects. DOMTokenList is always case-sensitive. */\ninterface DOMTokenList {\n    /** Returns the number of tokens. */\n    readonly length: number;\n    /**\n     * Returns the associated set as string.\n     *\n     * Can be set, to change the associated attribute.\n     */\n    value: string;\n    toString(): string;\n    /**\n     * Adds all arguments passed, except those already present.\n     *\n     * Throws a \"SyntaxError\" DOMException if one of the arguments is the empty string.\n     *\n     * Throws an \"InvalidCharacterError\" DOMException if one of the arguments contains any ASCII whitespace.\n     */\n    add(...tokens: string[]): void;\n    /** Returns true if token is present, and false otherwise. */\n    contains(token: string): boolean;\n    /** Returns the token with index index. */\n    item(index: number): string | null;\n    /**\n     * Removes arguments passed, if they are present.\n     *\n     * Throws a \"SyntaxError\" DOMException if one of the arguments is the empty string.\n     *\n     * Throws an \"InvalidCharacterError\" DOMException if one of the arguments contains any ASCII whitespace.\n     */\n    remove(...tokens: string[]): void;\n    /**\n     * Replaces token with newToken.\n     *\n     * Returns true if token was replaced with newToken, and false otherwise.\n     *\n     * Throws a \"SyntaxError\" DOMException if one of the arguments is the empty string.\n     *\n     * Throws an \"InvalidCharacterError\" DOMException if one of the arguments contains any ASCII whitespace.\n     */\n    replace(token: string, newToken: string): boolean;\n    /**\n     * Returns true if token is in the associated attribute's supported tokens. Returns false otherwise.\n     *\n     * Throws a TypeError if the associated attribute has no supported tokens defined.\n     */\n    supports(token: string): boolean;\n    /**\n     * If force is not given, \"toggles\" token, removing it if it's present and adding it if it's not present. If force is true, adds token (same as add()). If force is false, removes token (same as remove()).\n     *\n     * Returns true if token is now present, and false otherwise.\n     *\n     * Throws a \"SyntaxError\" DOMException if token is empty.\n     *\n     * Throws an \"InvalidCharacterError\" DOMException if token contains any spaces.\n     */\n    toggle(token: string, force?: boolean): boolean;\n    forEach(callbackfn: (value: string, key: number, parent: DOMTokenList) => void, thisArg?: any): void;\n    [index: number]: string;\n}\n\ndeclare var DOMTokenList: {\n    prototype: DOMTokenList;\n    new(): DOMTokenList;\n};\n\n/** Used to hold the data that is being dragged during a drag and drop operation. It may hold one or more data items, each of one or more data types. For more information about drag and drop, see HTML Drag and Drop API. */\ninterface DataTransfer {\n    /**\n     * Returns the kind of operation that is currently selected. If the kind of operation isn't one of those that is allowed by the effectAllowed attribute, then the operation will fail.\n     *\n     * Can be set, to change the selected operation.\n     *\n     * The possible values are \"none\", \"copy\", \"link\", and \"move\".\n     */\n    dropEffect: \"none\" | \"copy\" | \"link\" | \"move\";\n    /**\n     * Returns the kinds of operations that are to be allowed.\n     *\n     * Can be set (during the dragstart event), to change the allowed operations.\n     *\n     * The possible values are \"none\", \"copy\", \"copyLink\", \"copyMove\", \"link\", \"linkMove\", \"move\", \"all\", and \"uninitialized\",\n     */\n    effectAllowed: \"none\" | \"copy\" | \"copyLink\" | \"copyMove\" | \"link\" | \"linkMove\" | \"move\" | \"all\" | \"uninitialized\";\n    /** Returns a FileList of the files being dragged, if any. */\n    readonly files: FileList;\n    /** Returns a DataTransferItemList object, with the drag data. */\n    readonly items: DataTransferItemList;\n    /** Returns a frozen array listing the formats that were set in the dragstart event. In addition, if any files are being dragged, then one of the types will be the string \"Files\". */\n    readonly types: ReadonlyArray<string>;\n    /** Removes the data of the specified formats. Removes all data if the argument is omitted. */\n    clearData(format?: string): void;\n    /** Returns the specified data. If there is no such data, returns the empty string. */\n    getData(format: string): string;\n    /** Adds the specified data. */\n    setData(format: string, data: string): void;\n    /** Uses the given element to update the drag feedback, replacing any previously specified feedback. */\n    setDragImage(image: Element, x: number, y: number): void;\n}\n\ndeclare var DataTransfer: {\n    prototype: DataTransfer;\n    new(): DataTransfer;\n};\n\n/** One drag data item. During a drag operation, each drag event has a dataTransfer property which contains a list of drag data items. Each item in the list is a DataTransferItem object. */\ninterface DataTransferItem {\n    /** Returns the drag data item kind, one of: \"string\", \"file\". */\n    readonly kind: string;\n    /** Returns the drag data item type string. */\n    readonly type: string;\n    /** Returns a File object, if the drag data item kind is File. */\n    getAsFile(): File | null;\n    /** Invokes the callback with the string data as the argument, if the drag data item kind is text. */\n    getAsString(callback: FunctionStringCallback | null): void;\n    webkitGetAsEntry(): FileSystemEntry | null;\n}\n\ndeclare var DataTransferItem: {\n    prototype: DataTransferItem;\n    new(): DataTransferItem;\n};\n\n/** A list of DataTransferItem objects representing items being dragged. During a drag operation, each DragEvent has a dataTransfer property and that property is a DataTransferItemList. */\ninterface DataTransferItemList {\n    /** Returns the number of items in the drag data store. */\n    readonly length: number;\n    /** Adds a new entry for the given data to the drag data store. If the data is plain text then a type string has to be provided also. */\n    add(data: string, type: string): DataTransferItem | null;\n    add(data: File): DataTransferItem | null;\n    /** Removes all the entries in the drag data store. */\n    clear(): void;\n    /** Removes the indexth entry in the drag data store. */\n    remove(index: number): void;\n    [index: number]: DataTransferItem;\n}\n\ndeclare var DataTransferItemList: {\n    prototype: DataTransferItemList;\n    new(): DataTransferItemList;\n};\n\n/** A delay-line; an AudioNode audio-processing module that causes a delay between the arrival of an input data and its propagation to the output. */\ninterface DelayNode extends AudioNode {\n    readonly delayTime: AudioParam;\n}\n\ndeclare var DelayNode: {\n    prototype: DelayNode;\n    new(context: BaseAudioContext, options?: DelayOptions): DelayNode;\n};\n\n/**\n * The DeviceMotionEvent provides web developers with information about the speed of changes for the device's position and orientation.\n * Available only in secure contexts.\n */\ninterface DeviceMotionEvent extends Event {\n    readonly acceleration: DeviceMotionEventAcceleration | null;\n    readonly accelerationIncludingGravity: DeviceMotionEventAcceleration | null;\n    readonly interval: number;\n    readonly rotationRate: DeviceMotionEventRotationRate | null;\n}\n\ndeclare var DeviceMotionEvent: {\n    prototype: DeviceMotionEvent;\n    new(type: string, eventInitDict?: DeviceMotionEventInit): DeviceMotionEvent;\n};\n\n/** Available only in secure contexts. */\ninterface DeviceMotionEventAcceleration {\n    readonly x: number | null;\n    readonly y: number | null;\n    readonly z: number | null;\n}\n\n/** Available only in secure contexts. */\ninterface DeviceMotionEventRotationRate {\n    readonly alpha: number | null;\n    readonly beta: number | null;\n    readonly gamma: number | null;\n}\n\n/**\n * The DeviceOrientationEvent provides web developers with information from the physical orientation of the device running the web page.\n * Available only in secure contexts.\n */\ninterface DeviceOrientationEvent extends Event {\n    readonly absolute: boolean;\n    readonly alpha: number | null;\n    readonly beta: number | null;\n    readonly gamma: number | null;\n}\n\ndeclare var DeviceOrientationEvent: {\n    prototype: DeviceOrientationEvent;\n    new(type: string, eventInitDict?: DeviceOrientationEventInit): DeviceOrientationEvent;\n};\n\ninterface DocumentEventMap extends GlobalEventHandlersEventMap {\n    \"DOMContentLoaded\": Event;\n    \"fullscreenchange\": Event;\n    \"fullscreenerror\": Event;\n    \"pointerlockchange\": Event;\n    \"pointerlockerror\": Event;\n    \"readystatechange\": Event;\n    \"visibilitychange\": Event;\n}\n\n/** Any web page loaded in the browser and serves as an entry point into the web page's content, which is the DOM tree. */\ninterface Document extends Node, DocumentOrShadowRoot, FontFaceSource, GlobalEventHandlers, NonElementParentNode, ParentNode, XPathEvaluatorBase {\n    /** Sets or gets the URL for the current document. */\n    readonly URL: string;\n    /**\n     * Sets or gets the color of all active links in the document.\n     * @deprecated\n     */\n    alinkColor: string;\n    /**\n     * Returns a reference to the collection of elements contained by the object.\n     * @deprecated\n     */\n    readonly all: HTMLAllCollection;\n    /**\n     * Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order.\n     * @deprecated\n     */\n    readonly anchors: HTMLCollectionOf<HTMLAnchorElement>;\n    /**\n     * Retrieves a collection of all applet objects in the document.\n     * @deprecated\n     */\n    readonly applets: HTMLCollection;\n    /**\n     * Deprecated. Sets or retrieves a value that indicates the background color behind the object.\n     * @deprecated\n     */\n    bgColor: string;\n    /** Specifies the beginning and end of the document body. */\n    body: HTMLElement;\n    /** Returns document's encoding. */\n    readonly characterSet: string;\n    /**\n     * Gets or sets the character set used to encode the object.\n     * @deprecated This is a legacy alias of \\`characterSet\\`.\n     */\n    readonly charset: string;\n    /** Gets a value that indicates whether standards-compliant mode is switched on for the object. */\n    readonly compatMode: string;\n    /** Returns document's content type. */\n    readonly contentType: string;\n    /**\n     * Returns the HTTP cookies that apply to the Document. If there are no cookies or cookies can't be applied to this resource, the empty string will be returned.\n     *\n     * Can be set, to add a new cookie to the element's set of HTTP cookies.\n     *\n     * If the contents are sandboxed into a unique origin (e.g. in an iframe with the sandbox attribute), a \"SecurityError\" DOMException will be thrown on getting and setting.\n     */\n    cookie: string;\n    /**\n     * Returns the script element, or the SVG script element, that is currently executing, as long as the element represents a classic script. In the case of reentrant script execution, returns the one that most recently started executing amongst those that have not yet finished executing.\n     *\n     * Returns null if the Document is not currently executing a script or SVG script element (e.g., because the running script is an event handler, or a timeout), or if the currently executing script or SVG script element represents a module script.\n     */\n    readonly currentScript: HTMLOrSVGScriptElement | null;\n    /** Returns the Window object of the active document. */\n    readonly defaultView: (WindowProxy & typeof globalThis) | null;\n    /** Sets or gets a value that indicates whether the document can be edited. */\n    designMode: string;\n    /** Sets or retrieves a value that indicates the reading order of the object. */\n    dir: string;\n    /** Gets an object representing the document type declaration associated with the current document. */\n    readonly doctype: DocumentType | null;\n    /** Gets a reference to the root node of the document. */\n    readonly documentElement: HTMLElement;\n    /** Returns document's URL. */\n    readonly documentURI: string;\n    /**\n     * Sets or gets the security domain of the document.\n     * @deprecated\n     */\n    domain: string;\n    /** Retrieves a collection of all embed objects in the document. */\n    readonly embeds: HTMLCollectionOf<HTMLEmbedElement>;\n    /**\n     * Sets or gets the foreground (text) color of the document.\n     * @deprecated\n     */\n    fgColor: string;\n    /** Retrieves a collection, in source order, of all form objects in the document. */\n    readonly forms: HTMLCollectionOf<HTMLFormElement>;\n    /** @deprecated */\n    readonly fullscreen: boolean;\n    /** Returns true if document has the ability to display elements fullscreen and fullscreen is supported, or false otherwise. */\n    readonly fullscreenEnabled: boolean;\n    /** Returns the head element. */\n    readonly head: HTMLHeadElement;\n    readonly hidden: boolean;\n    /** Retrieves a collection, in source order, of img objects in the document. */\n    readonly images: HTMLCollectionOf<HTMLImageElement>;\n    /** Gets the implementation object of the current document. */\n    readonly implementation: DOMImplementation;\n    /**\n     * Returns the character encoding used to create the webpage that is loaded into the document object.\n     * @deprecated This is a legacy alias of \\`characterSet\\`.\n     */\n    readonly inputEncoding: string;\n    /** Gets the date that the page was last modified, if the page supplies one. */\n    readonly lastModified: string;\n    /**\n     * Sets or gets the color of the document links.\n     * @deprecated\n     */\n    linkColor: string;\n    /** Retrieves a collection of all a objects that specify the href property and all area objects in the document. */\n    readonly links: HTMLCollectionOf<HTMLAnchorElement | HTMLAreaElement>;\n    /** Contains information about the current URL. */\n    get location(): Location;\n    set location(href: string | Location);\n    onfullscreenchange: ((this: Document, ev: Event) => any) | null;\n    onfullscreenerror: ((this: Document, ev: Event) => any) | null;\n    onpointerlockchange: ((this: Document, ev: Event) => any) | null;\n    onpointerlockerror: ((this: Document, ev: Event) => any) | null;\n    /**\n     * Fires when the state of the object has changed.\n     * @param ev The event\n     */\n    onreadystatechange: ((this: Document, ev: Event) => any) | null;\n    onvisibilitychange: ((this: Document, ev: Event) => any) | null;\n    readonly ownerDocument: null;\n    readonly pictureInPictureEnabled: boolean;\n    /** Return an HTMLCollection of the embed elements in the Document. */\n    readonly plugins: HTMLCollectionOf<HTMLEmbedElement>;\n    /** Retrieves a value that indicates the current state of the object. */\n    readonly readyState: DocumentReadyState;\n    /** Gets the URL of the location that referred the user to the current page. */\n    readonly referrer: string;\n    /** @deprecated */\n    readonly rootElement: SVGSVGElement | null;\n    /** Retrieves a collection of all script objects in the document. */\n    readonly scripts: HTMLCollectionOf<HTMLScriptElement>;\n    readonly scrollingElement: Element | null;\n    readonly timeline: DocumentTimeline;\n    /** Contains the title of the document. */\n    title: string;\n    readonly visibilityState: DocumentVisibilityState;\n    /**\n     * Sets or gets the color of the links that the user has visited.\n     * @deprecated\n     */\n    vlinkColor: string;\n    /**\n     * Moves node from another document and returns it.\n     *\n     * If node is a document, throws a \"NotSupportedError\" DOMException or, if node is a shadow root, throws a \"HierarchyRequestError\" DOMException.\n     */\n    adoptNode<T extends Node>(node: T): T;\n    /** @deprecated */\n    captureEvents(): void;\n    /** @deprecated */\n    caretRangeFromPoint(x: number, y: number): Range | null;\n    /** @deprecated */\n    clear(): void;\n    /** Closes an output stream and forces the sent data to display. */\n    close(): void;\n    /**\n     * Creates an attribute object with a specified name.\n     * @param name String that sets the attribute object's name.\n     */\n    createAttribute(localName: string): Attr;\n    createAttributeNS(namespace: string | null, qualifiedName: string): Attr;\n    /** Returns a CDATASection node whose data is data. */\n    createCDATASection(data: string): CDATASection;\n    /**\n     * Creates a comment object with the specified data.\n     * @param data Sets the comment object's data.\n     */\n    createComment(data: string): Comment;\n    /** Creates a new document. */\n    createDocumentFragment(): DocumentFragment;\n    /**\n     * Creates an instance of the element for the specified tag.\n     * @param tagName The name of an element.\n     */\n    createElement<K extends keyof HTMLElementTagNameMap>(tagName: K, options?: ElementCreationOptions): HTMLElementTagNameMap[K];\n    /** @deprecated */\n    createElement<K extends keyof HTMLElementDeprecatedTagNameMap>(tagName: K, options?: ElementCreationOptions): HTMLElementDeprecatedTagNameMap[K];\n    createElement(tagName: string, options?: ElementCreationOptions): HTMLElement;\n    /**\n     * Returns an element with namespace namespace. Its namespace prefix will be everything before \":\" (U+003E) in qualifiedName or null. Its local name will be everything after \":\" (U+003E) in qualifiedName or qualifiedName.\n     *\n     * If localName does not match the Name production an \"InvalidCharacterError\" DOMException will be thrown.\n     *\n     * If one of the following conditions is true a \"NamespaceError\" DOMException will be thrown:\n     *\n     * localName does not match the QName production.\n     * Namespace prefix is not null and namespace is the empty string.\n     * Namespace prefix is \"xml\" and namespace is not the XML namespace.\n     * qualifiedName or namespace prefix is \"xmlns\" and namespace is not the XMLNS namespace.\n     * namespace is the XMLNS namespace and neither qualifiedName nor namespace prefix is \"xmlns\".\n     *\n     * When supplied, options's is can be used to create a customized built-in element.\n     */\n    createElementNS(namespaceURI: \"http://www.w3.org/1999/xhtml\", qualifiedName: string): HTMLElement;\n    createElementNS<K extends keyof SVGElementTagNameMap>(namespaceURI: \"http://www.w3.org/2000/svg\", qualifiedName: K): SVGElementTagNameMap[K];\n    createElementNS(namespaceURI: \"http://www.w3.org/2000/svg\", qualifiedName: string): SVGElement;\n    createElementNS<K extends keyof MathMLElementTagNameMap>(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", qualifiedName: K): MathMLElementTagNameMap[K];\n    createElementNS(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", qualifiedName: string): MathMLElement;\n    createElementNS(namespaceURI: string | null, qualifiedName: string, options?: ElementCreationOptions): Element;\n    createElementNS(namespace: string | null, qualifiedName: string, options?: string | ElementCreationOptions): Element;\n    createEvent(eventInterface: \"AnimationEvent\"): AnimationEvent;\n    createEvent(eventInterface: \"AnimationPlaybackEvent\"): AnimationPlaybackEvent;\n    createEvent(eventInterface: \"AudioProcessingEvent\"): AudioProcessingEvent;\n    createEvent(eventInterface: \"BeforeUnloadEvent\"): BeforeUnloadEvent;\n    createEvent(eventInterface: \"BlobEvent\"): BlobEvent;\n    createEvent(eventInterface: \"ClipboardEvent\"): ClipboardEvent;\n    createEvent(eventInterface: \"CloseEvent\"): CloseEvent;\n    createEvent(eventInterface: \"CompositionEvent\"): CompositionEvent;\n    createEvent(eventInterface: \"CustomEvent\"): CustomEvent;\n    createEvent(eventInterface: \"DeviceMotionEvent\"): DeviceMotionEvent;\n    createEvent(eventInterface: \"DeviceOrientationEvent\"): DeviceOrientationEvent;\n    createEvent(eventInterface: \"DragEvent\"): DragEvent;\n    createEvent(eventInterface: \"ErrorEvent\"): ErrorEvent;\n    createEvent(eventInterface: \"Event\"): Event;\n    createEvent(eventInterface: \"Events\"): Event;\n    createEvent(eventInterface: \"FocusEvent\"): FocusEvent;\n    createEvent(eventInterface: \"FontFaceSetLoadEvent\"): FontFaceSetLoadEvent;\n    createEvent(eventInterface: \"FormDataEvent\"): FormDataEvent;\n    createEvent(eventInterface: \"GamepadEvent\"): GamepadEvent;\n    createEvent(eventInterface: \"HashChangeEvent\"): HashChangeEvent;\n    createEvent(eventInterface: \"IDBVersionChangeEvent\"): IDBVersionChangeEvent;\n    createEvent(eventInterface: \"InputEvent\"): InputEvent;\n    createEvent(eventInterface: \"KeyboardEvent\"): KeyboardEvent;\n    createEvent(eventInterface: \"MIDIConnectionEvent\"): MIDIConnectionEvent;\n    createEvent(eventInterface: \"MIDIMessageEvent\"): MIDIMessageEvent;\n    createEvent(eventInterface: \"MediaEncryptedEvent\"): MediaEncryptedEvent;\n    createEvent(eventInterface: \"MediaKeyMessageEvent\"): MediaKeyMessageEvent;\n    createEvent(eventInterface: \"MediaQueryListEvent\"): MediaQueryListEvent;\n    createEvent(eventInterface: \"MediaStreamTrackEvent\"): MediaStreamTrackEvent;\n    createEvent(eventInterface: \"MessageEvent\"): MessageEvent;\n    createEvent(eventInterface: \"MouseEvent\"): MouseEvent;\n    createEvent(eventInterface: \"MouseEvents\"): MouseEvent;\n    createEvent(eventInterface: \"MutationEvent\"): MutationEvent;\n    createEvent(eventInterface: \"MutationEvents\"): MutationEvent;\n    createEvent(eventInterface: \"OfflineAudioCompletionEvent\"): OfflineAudioCompletionEvent;\n    createEvent(eventInterface: \"PageTransitionEvent\"): PageTransitionEvent;\n    createEvent(eventInterface: \"PaymentMethodChangeEvent\"): PaymentMethodChangeEvent;\n    createEvent(eventInterface: \"PaymentRequestUpdateEvent\"): PaymentRequestUpdateEvent;\n    createEvent(eventInterface: \"PictureInPictureEvent\"): PictureInPictureEvent;\n    createEvent(eventInterface: \"PointerEvent\"): PointerEvent;\n    createEvent(eventInterface: \"PopStateEvent\"): PopStateEvent;\n    createEvent(eventInterface: \"ProgressEvent\"): ProgressEvent;\n    createEvent(eventInterface: \"PromiseRejectionEvent\"): PromiseRejectionEvent;\n    createEvent(eventInterface: \"RTCDTMFToneChangeEvent\"): RTCDTMFToneChangeEvent;\n    createEvent(eventInterface: \"RTCDataChannelEvent\"): RTCDataChannelEvent;\n    createEvent(eventInterface: \"RTCErrorEvent\"): RTCErrorEvent;\n    createEvent(eventInterface: \"RTCPeerConnectionIceErrorEvent\"): RTCPeerConnectionIceErrorEvent;\n    createEvent(eventInterface: \"RTCPeerConnectionIceEvent\"): RTCPeerConnectionIceEvent;\n    createEvent(eventInterface: \"RTCTrackEvent\"): RTCTrackEvent;\n    createEvent(eventInterface: \"SecurityPolicyViolationEvent\"): SecurityPolicyViolationEvent;\n    createEvent(eventInterface: \"SpeechSynthesisErrorEvent\"): SpeechSynthesisErrorEvent;\n    createEvent(eventInterface: \"SpeechSynthesisEvent\"): SpeechSynthesisEvent;\n    createEvent(eventInterface: \"StorageEvent\"): StorageEvent;\n    createEvent(eventInterface: \"SubmitEvent\"): SubmitEvent;\n    createEvent(eventInterface: \"TouchEvent\"): TouchEvent;\n    createEvent(eventInterface: \"TrackEvent\"): TrackEvent;\n    createEvent(eventInterface: \"TransitionEvent\"): TransitionEvent;\n    createEvent(eventInterface: \"UIEvent\"): UIEvent;\n    createEvent(eventInterface: \"UIEvents\"): UIEvent;\n    createEvent(eventInterface: \"WebGLContextEvent\"): WebGLContextEvent;\n    createEvent(eventInterface: \"WheelEvent\"): WheelEvent;\n    createEvent(eventInterface: string): Event;\n    /**\n     * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n     * @param root The root element or node to start traversing on.\n     * @param whatToShow The type of nodes or elements to appear in the node list\n     * @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter.\n     */\n    createNodeIterator(root: Node, whatToShow?: number, filter?: NodeFilter | null): NodeIterator;\n    /** Returns a ProcessingInstruction node whose target is target and data is data. If target does not match the Name production an \"InvalidCharacterError\" DOMException will be thrown. If data contains \"?>\" an \"InvalidCharacterError\" DOMException will be thrown. */\n    createProcessingInstruction(target: string, data: string): ProcessingInstruction;\n    /**  Returns an empty range object that has both of its boundary points positioned at the beginning of the document. */\n    createRange(): Range;\n    /**\n     * Creates a text string from the specified value.\n     * @param data String that specifies the nodeValue property of the text node.\n     */\n    createTextNode(data: string): Text;\n    /**\n     * Creates a TreeWalker object that you can use to traverse filtered lists of nodes or elements in a document.\n     * @param root The root element or node to start traversing on.\n     * @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow.\n     * @param filter A custom NodeFilter function to use.\n     */\n    createTreeWalker(root: Node, whatToShow?: number, filter?: NodeFilter | null): TreeWalker;\n    /**\n     * Executes a command on the current document, current selection, or the given range.\n     * @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.\n     * @param showUI Display the user interface, defaults to false.\n     * @param value Value to assign.\n     * @deprecated\n     */\n    execCommand(commandId: string, showUI?: boolean, value?: string): boolean;\n    /** Stops document's fullscreen element from being displayed fullscreen and resolves promise when done. */\n    exitFullscreen(): Promise<void>;\n    exitPictureInPicture(): Promise<void>;\n    exitPointerLock(): void;\n    /**\n     * Returns a reference to the first object with the specified value of the ID attribute.\n     * @param elementId String that specifies the ID value.\n     */\n    getElementById(elementId: string): HTMLElement | null;\n    /** Returns a HTMLCollection of the elements in the object on which the method was invoked (a document or an element) that have all the classes given by classNames. The classNames argument is interpreted as a space-separated list of classes. */\n    getElementsByClassName(classNames: string): HTMLCollectionOf<Element>;\n    /**\n     * Gets a collection of objects based on the value of the NAME or ID attribute.\n     * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute.\n     */\n    getElementsByName(elementName: string): NodeListOf<HTMLElement>;\n    /**\n     * Retrieves a collection of objects based on the specified element name.\n     * @param name Specifies the name of an element.\n     */\n    getElementsByTagName<K extends keyof HTMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementTagNameMap[K]>;\n    getElementsByTagName<K extends keyof SVGElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<SVGElementTagNameMap[K]>;\n    getElementsByTagName<K extends keyof MathMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<MathMLElementTagNameMap[K]>;\n    /** @deprecated */\n    getElementsByTagName<K extends keyof HTMLElementDeprecatedTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementDeprecatedTagNameMap[K]>;\n    getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;\n    /**\n     * If namespace and localName are \"*\" returns a HTMLCollection of all descendant elements.\n     *\n     * If only namespace is \"*\" returns a HTMLCollection of all descendant elements whose local name is localName.\n     *\n     * If only localName is \"*\" returns a HTMLCollection of all descendant elements whose namespace is namespace.\n     *\n     * Otherwise, returns a HTMLCollection of all descendant elements whose namespace is namespace and local name is localName.\n     */\n    getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1999/xhtml\", localName: string): HTMLCollectionOf<HTMLElement>;\n    getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/2000/svg\", localName: string): HTMLCollectionOf<SVGElement>;\n    getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", localName: string): HTMLCollectionOf<MathMLElement>;\n    getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf<Element>;\n    /** Returns an object representing the current selection of the document that is loaded into the object displaying a webpage. */\n    getSelection(): Selection | null;\n    /** Gets a value indicating whether the object currently has focus. */\n    hasFocus(): boolean;\n    hasStorageAccess(): Promise<boolean>;\n    /**\n     * Returns a copy of node. If deep is true, the copy also includes the node's descendants.\n     *\n     * If node is a document or a shadow root, throws a \"NotSupportedError\" DOMException.\n     */\n    importNode<T extends Node>(node: T, deep?: boolean): T;\n    /**\n     * Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method.\n     * @param url Specifies a MIME type for the document.\n     * @param name Specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element.\n     * @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, \"fullscreen=yes, toolbar=yes\"). The following values are supported.\n     * @param replace Specifies whether the existing entry for the document is replaced in the history list.\n     */\n    open(unused1?: string, unused2?: string): Document;\n    open(url: string | URL, name: string, features: string): WindowProxy | null;\n    /**\n     * Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document.\n     * @param commandId Specifies a command identifier.\n     * @deprecated\n     */\n    queryCommandEnabled(commandId: string): boolean;\n    /**\n     * Returns a Boolean value that indicates whether the specified command is in the indeterminate state.\n     * @param commandId String that specifies a command identifier.\n     * @deprecated\n     */\n    queryCommandIndeterm(commandId: string): boolean;\n    /**\n     * Returns a Boolean value that indicates the current state of the command.\n     * @param commandId String that specifies a command identifier.\n     * @deprecated\n     */\n    queryCommandState(commandId: string): boolean;\n    /**\n     * Returns a Boolean value that indicates whether the current command is supported on the current range.\n     * @param commandId Specifies a command identifier.\n     * @deprecated\n     */\n    queryCommandSupported(commandId: string): boolean;\n    /**\n     * Returns the current value of the document, range, or current selection for the given command.\n     * @param commandId String that specifies a command identifier.\n     * @deprecated\n     */\n    queryCommandValue(commandId: string): string;\n    /** @deprecated */\n    releaseEvents(): void;\n    requestStorageAccess(): Promise<void>;\n    /**\n     * Writes one or more HTML expressions to a document in the specified window.\n     * @param content Specifies the text and HTML tags to write.\n     */\n    write(...text: string[]): void;\n    /**\n     * Writes one or more HTML expressions, followed by a carriage return, to a document in the specified window.\n     * @param content The text and HTML tags to write.\n     */\n    writeln(...text: string[]): void;\n    addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Document: {\n    prototype: Document;\n    new(): Document;\n};\n\n/** A minimal document object that has no parent. It is used as a lightweight version of Document that stores a segment of a document structure comprised of nodes just like a standard document. The key difference is that because the document fragment isn't part of the active document tree structure, changes made to the fragment don't affect the document, cause reflow, or incur any performance impact that can occur when changes are made. */\ninterface DocumentFragment extends Node, NonElementParentNode, ParentNode {\n    readonly ownerDocument: Document;\n    getElementById(elementId: string): HTMLElement | null;\n}\n\ndeclare var DocumentFragment: {\n    prototype: DocumentFragment;\n    new(): DocumentFragment;\n};\n\ninterface DocumentOrShadowRoot {\n    /**\n     * Returns the deepest element in the document through which or to which key events are being routed. This is, roughly speaking, the focused element in the document.\n     *\n     * For the purposes of this API, when a child browsing context is focused, its container is focused in the parent browsing context. For example, if the user moves the focus to a text control in an iframe, the iframe is the element returned by the activeElement API in the iframe's node document.\n     *\n     * Similarly, when the focused element is in a different node tree than documentOrShadowRoot, the element returned will be the host that's located in the same node tree as documentOrShadowRoot if documentOrShadowRoot is a shadow-including inclusive ancestor of the focused element, and null if not.\n     */\n    readonly activeElement: Element | null;\n    adoptedStyleSheets: CSSStyleSheet[];\n    /** Returns document's fullscreen element. */\n    readonly fullscreenElement: Element | null;\n    readonly pictureInPictureElement: Element | null;\n    readonly pointerLockElement: Element | null;\n    /** Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document. */\n    readonly styleSheets: StyleSheetList;\n    /**\n     * Returns the element for the specified x coordinate and the specified y coordinate.\n     * @param x The x-offset\n     * @param y The y-offset\n     */\n    elementFromPoint(x: number, y: number): Element | null;\n    elementsFromPoint(x: number, y: number): Element[];\n    getAnimations(): Animation[];\n}\n\ninterface DocumentTimeline extends AnimationTimeline {\n}\n\ndeclare var DocumentTimeline: {\n    prototype: DocumentTimeline;\n    new(options?: DocumentTimelineOptions): DocumentTimeline;\n};\n\n/** A Node containing a doctype. */\ninterface DocumentType extends Node, ChildNode {\n    readonly name: string;\n    readonly ownerDocument: Document;\n    readonly publicId: string;\n    readonly systemId: string;\n}\n\ndeclare var DocumentType: {\n    prototype: DocumentType;\n    new(): DocumentType;\n};\n\n/** A DOM event that represents a drag and drop interaction. The user initiates a drag by placing a pointer device (such as a mouse) on the touch surface and then dragging the pointer to a new location (such as another DOM element). Applications are free to interpret a drag and drop interaction in an application-specific way. */\ninterface DragEvent extends MouseEvent {\n    /** Returns the DataTransfer object for the event. */\n    readonly dataTransfer: DataTransfer | null;\n}\n\ndeclare var DragEvent: {\n    prototype: DragEvent;\n    new(type: string, eventInitDict?: DragEventInit): DragEvent;\n};\n\n/** Inherits properties from its parent, AudioNode. */\ninterface DynamicsCompressorNode extends AudioNode {\n    readonly attack: AudioParam;\n    readonly knee: AudioParam;\n    readonly ratio: AudioParam;\n    readonly reduction: number;\n    readonly release: AudioParam;\n    readonly threshold: AudioParam;\n}\n\ndeclare var DynamicsCompressorNode: {\n    prototype: DynamicsCompressorNode;\n    new(context: BaseAudioContext, options?: DynamicsCompressorOptions): DynamicsCompressorNode;\n};\n\ninterface EXT_blend_minmax {\n    readonly MIN_EXT: 0x8007;\n    readonly MAX_EXT: 0x8008;\n}\n\ninterface EXT_color_buffer_float {\n}\n\ninterface EXT_color_buffer_half_float {\n    readonly RGBA16F_EXT: 0x881A;\n    readonly RGB16F_EXT: 0x881B;\n    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211;\n    readonly UNSIGNED_NORMALIZED_EXT: 0x8C17;\n}\n\ninterface EXT_float_blend {\n}\n\n/** The EXT_frag_depth extension is part of the WebGL API and enables to set a depth value of a fragment from within the fragment shader. */\ninterface EXT_frag_depth {\n}\n\ninterface EXT_sRGB {\n    readonly SRGB_EXT: 0x8C40;\n    readonly SRGB_ALPHA_EXT: 0x8C42;\n    readonly SRGB8_ALPHA8_EXT: 0x8C43;\n    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: 0x8210;\n}\n\ninterface EXT_shader_texture_lod {\n}\n\ninterface EXT_texture_compression_bptc {\n    readonly COMPRESSED_RGBA_BPTC_UNORM_EXT: 0x8E8C;\n    readonly COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT: 0x8E8D;\n    readonly COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT: 0x8E8E;\n    readonly COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT: 0x8E8F;\n}\n\ninterface EXT_texture_compression_rgtc {\n    readonly COMPRESSED_RED_RGTC1_EXT: 0x8DBB;\n    readonly COMPRESSED_SIGNED_RED_RGTC1_EXT: 0x8DBC;\n    readonly COMPRESSED_RED_GREEN_RGTC2_EXT: 0x8DBD;\n    readonly COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 0x8DBE;\n}\n\n/** The EXT_texture_filter_anisotropic extension is part of the WebGL API and exposes two constants for anisotropic filtering (AF). */\ninterface EXT_texture_filter_anisotropic {\n    readonly TEXTURE_MAX_ANISOTROPY_EXT: 0x84FE;\n    readonly MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84FF;\n}\n\ninterface EXT_texture_norm16 {\n    readonly R16_EXT: 0x822A;\n    readonly RG16_EXT: 0x822C;\n    readonly RGB16_EXT: 0x8054;\n    readonly RGBA16_EXT: 0x805B;\n    readonly R16_SNORM_EXT: 0x8F98;\n    readonly RG16_SNORM_EXT: 0x8F99;\n    readonly RGB16_SNORM_EXT: 0x8F9A;\n    readonly RGBA16_SNORM_EXT: 0x8F9B;\n}\n\ninterface ElementEventMap {\n    \"fullscreenchange\": Event;\n    \"fullscreenerror\": Event;\n}\n\n/** Element is the most general base class from which all objects in a Document inherit. It only has methods and properties common to all kinds of elements. More specific classes inherit from Element. */\ninterface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, NonDocumentTypeChildNode, ParentNode, Slottable {\n    readonly attributes: NamedNodeMap;\n    /** Allows for manipulation of element's class content attribute as a set of whitespace-separated tokens through a DOMTokenList object. */\n    readonly classList: DOMTokenList;\n    /** Returns the value of element's class content attribute. Can be set to change it. */\n    className: string;\n    readonly clientHeight: number;\n    readonly clientLeft: number;\n    readonly clientTop: number;\n    readonly clientWidth: number;\n    /** Returns the value of element's id content attribute. Can be set to change it. */\n    id: string;\n    /** Returns the local name. */\n    readonly localName: string;\n    /** Returns the namespace. */\n    readonly namespaceURI: string | null;\n    onfullscreenchange: ((this: Element, ev: Event) => any) | null;\n    onfullscreenerror: ((this: Element, ev: Event) => any) | null;\n    outerHTML: string;\n    readonly ownerDocument: Document;\n    readonly part: DOMTokenList;\n    /** Returns the namespace prefix. */\n    readonly prefix: string | null;\n    readonly scrollHeight: number;\n    scrollLeft: number;\n    scrollTop: number;\n    readonly scrollWidth: number;\n    /** Returns element's shadow root, if any, and if shadow root's mode is \"open\", and null otherwise. */\n    readonly shadowRoot: ShadowRoot | null;\n    /** Returns the value of element's slot content attribute. Can be set to change it. */\n    slot: string;\n    /** Returns the HTML-uppercased qualified name. */\n    readonly tagName: string;\n    /** Creates a shadow root for element and returns it. */\n    attachShadow(init: ShadowRootInit): ShadowRoot;\n    checkVisibility(options?: CheckVisibilityOptions): boolean;\n    /** Returns the first (starting at element) inclusive ancestor that matches selectors, and null otherwise. */\n    closest<K extends keyof HTMLElementTagNameMap>(selector: K): HTMLElementTagNameMap[K] | null;\n    closest<K extends keyof SVGElementTagNameMap>(selector: K): SVGElementTagNameMap[K] | null;\n    closest<K extends keyof MathMLElementTagNameMap>(selector: K): MathMLElementTagNameMap[K] | null;\n    closest<E extends Element = Element>(selectors: string): E | null;\n    /** Returns element's first attribute whose qualified name is qualifiedName, and null if there is no such attribute otherwise. */\n    getAttribute(qualifiedName: string): string | null;\n    /** Returns element's attribute whose namespace is namespace and local name is localName, and null if there is no such attribute otherwise. */\n    getAttributeNS(namespace: string | null, localName: string): string | null;\n    /** Returns the qualified names of all element's attributes. Can contain duplicates. */\n    getAttributeNames(): string[];\n    getAttributeNode(qualifiedName: string): Attr | null;\n    getAttributeNodeNS(namespace: string | null, localName: string): Attr | null;\n    getBoundingClientRect(): DOMRect;\n    getClientRects(): DOMRectList;\n    /** Returns a HTMLCollection of the elements in the object on which the method was invoked (a document or an element) that have all the classes given by classNames. The classNames argument is interpreted as a space-separated list of classes. */\n    getElementsByClassName(classNames: string): HTMLCollectionOf<Element>;\n    getElementsByTagName<K extends keyof HTMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementTagNameMap[K]>;\n    getElementsByTagName<K extends keyof SVGElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<SVGElementTagNameMap[K]>;\n    getElementsByTagName<K extends keyof MathMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<MathMLElementTagNameMap[K]>;\n    /** @deprecated */\n    getElementsByTagName<K extends keyof HTMLElementDeprecatedTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementDeprecatedTagNameMap[K]>;\n    getElementsByTagName(qualifiedName: string): HTMLCollectionOf<Element>;\n    getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1999/xhtml\", localName: string): HTMLCollectionOf<HTMLElement>;\n    getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/2000/svg\", localName: string): HTMLCollectionOf<SVGElement>;\n    getElementsByTagNameNS(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", localName: string): HTMLCollectionOf<MathMLElement>;\n    getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf<Element>;\n    /** Returns true if element has an attribute whose qualified name is qualifiedName, and false otherwise. */\n    hasAttribute(qualifiedName: string): boolean;\n    /** Returns true if element has an attribute whose namespace is namespace and local name is localName. */\n    hasAttributeNS(namespace: string | null, localName: string): boolean;\n    /** Returns true if element has attributes, and false otherwise. */\n    hasAttributes(): boolean;\n    hasPointerCapture(pointerId: number): boolean;\n    insertAdjacentElement(where: InsertPosition, element: Element): Element | null;\n    insertAdjacentHTML(position: InsertPosition, text: string): void;\n    insertAdjacentText(where: InsertPosition, data: string): void;\n    /** Returns true if matching selectors against element's root yields element, and false otherwise. */\n    matches(selectors: string): boolean;\n    releasePointerCapture(pointerId: number): void;\n    /** Removes element's first attribute whose qualified name is qualifiedName. */\n    removeAttribute(qualifiedName: string): void;\n    /** Removes element's attribute whose namespace is namespace and local name is localName. */\n    removeAttributeNS(namespace: string | null, localName: string): void;\n    removeAttributeNode(attr: Attr): Attr;\n    /**\n     * Displays element fullscreen and resolves promise when done.\n     *\n     * When supplied, options's navigationUI member indicates whether showing navigation UI while in fullscreen is preferred or not. If set to \"show\", navigation simplicity is preferred over screen space, and if set to \"hide\", more screen space is preferred. User agents are always free to honor user preference over the application's. The default value \"auto\" indicates no application preference.\n     */\n    requestFullscreen(options?: FullscreenOptions): Promise<void>;\n    requestPointerLock(): void;\n    scroll(options?: ScrollToOptions): void;\n    scroll(x: number, y: number): void;\n    scrollBy(options?: ScrollToOptions): void;\n    scrollBy(x: number, y: number): void;\n    scrollIntoView(arg?: boolean | ScrollIntoViewOptions): void;\n    scrollTo(options?: ScrollToOptions): void;\n    scrollTo(x: number, y: number): void;\n    /** Sets the value of element's first attribute whose qualified name is qualifiedName to value. */\n    setAttribute(qualifiedName: string, value: string): void;\n    /** Sets the value of element's attribute whose namespace is namespace and local name is localName to value. */\n    setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;\n    setAttributeNode(attr: Attr): Attr | null;\n    setAttributeNodeNS(attr: Attr): Attr | null;\n    setPointerCapture(pointerId: number): void;\n    /**\n     * If force is not given, \"toggles\" qualifiedName, removing it if it is present and adding it if it is not present. If force is true, adds qualifiedName. If force is false, removes qualifiedName.\n     *\n     * Returns true if qualifiedName is now present, and false otherwise.\n     */\n    toggleAttribute(qualifiedName: string, force?: boolean): boolean;\n    /** @deprecated This is a legacy alias of \\`matches\\`. */\n    webkitMatchesSelector(selectors: string): boolean;\n    addEventListener<K extends keyof ElementEventMap>(type: K, listener: (this: Element, ev: ElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ElementEventMap>(type: K, listener: (this: Element, ev: ElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Element: {\n    prototype: Element;\n    new(): Element;\n};\n\ninterface ElementCSSInlineStyle {\n    readonly style: CSSStyleDeclaration;\n}\n\ninterface ElementContentEditable {\n    contentEditable: string;\n    enterKeyHint: string;\n    inputMode: string;\n    readonly isContentEditable: boolean;\n}\n\ninterface ElementInternals extends ARIAMixin {\n    /** Returns the form owner of internals's target element. */\n    readonly form: HTMLFormElement | null;\n    /** Returns a NodeList of all the label elements that internals's target element is associated with. */\n    readonly labels: NodeList;\n    /** Returns the ShadowRoot for internals's target element, if the target element is a shadow host, or null otherwise. */\n    readonly shadowRoot: ShadowRoot | null;\n    /** Returns the error message that would be shown to the user if internals's target element was to be checked for validity. */\n    readonly validationMessage: string;\n    /** Returns the ValidityState object for internals's target element. */\n    readonly validity: ValidityState;\n    /** Returns true if internals's target element will be validated when the form is submitted; false otherwise. */\n    readonly willValidate: boolean;\n    /** Returns true if internals's target element has no validity problems; false otherwise. Fires an invalid event at the element in the latter case. */\n    checkValidity(): boolean;\n    /** Returns true if internals's target element has no validity problems; otherwise, returns false, fires an invalid event at the element, and (if the event isn't canceled) reports the problem to the user. */\n    reportValidity(): boolean;\n    /**\n     * Sets both the state and submission value of internals's target element to value.\n     *\n     * If value is null, the element won't participate in form submission.\n     */\n    setFormValue(value: File | string | FormData | null, state?: File | string | FormData | null): void;\n    /** Marks internals's target element as suffering from the constraints indicated by the flags argument, and sets the element's validation message to message. If anchor is specified, the user agent might use it to indicate problems with the constraints of internals's target element when the form owner is validated interactively or reportValidity() is called. */\n    setValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n}\n\ndeclare var ElementInternals: {\n    prototype: ElementInternals;\n    new(): ElementInternals;\n};\n\n/** Events providing information related to errors in scripts or in files. */\ninterface ErrorEvent extends Event {\n    readonly colno: number;\n    readonly error: any;\n    readonly filename: string;\n    readonly lineno: number;\n    readonly message: string;\n}\n\ndeclare var ErrorEvent: {\n    prototype: ErrorEvent;\n    new(type: string, eventInitDict?: ErrorEventInit): ErrorEvent;\n};\n\n/** An event which takes place in the DOM. */\ninterface Event {\n    /** Returns true or false depending on how event was initialized. True if event goes through its target's ancestors in reverse tree order, and false otherwise. */\n    readonly bubbles: boolean;\n    /** @deprecated */\n    cancelBubble: boolean;\n    /** Returns true or false depending on how event was initialized. Its return value does not always carry meaning, but true can indicate that part of the operation during which event was dispatched, can be canceled by invoking the preventDefault() method. */\n    readonly cancelable: boolean;\n    /** Returns true or false depending on how event was initialized. True if event invokes listeners past a ShadowRoot node that is the root of its target, and false otherwise. */\n    readonly composed: boolean;\n    /** Returns the object whose event listener's callback is currently being invoked. */\n    readonly currentTarget: EventTarget | null;\n    /** Returns true if preventDefault() was invoked successfully to indicate cancelation, and false otherwise. */\n    readonly defaultPrevented: boolean;\n    /** Returns the event's phase, which is one of NONE, CAPTURING_PHASE, AT_TARGET, and BUBBLING_PHASE. */\n    readonly eventPhase: number;\n    /** Returns true if event was dispatched by the user agent, and false otherwise. */\n    readonly isTrusted: boolean;\n    /** @deprecated */\n    returnValue: boolean;\n    /** @deprecated */\n    readonly srcElement: EventTarget | null;\n    /** Returns the object to which event is dispatched (its target). */\n    readonly target: EventTarget | null;\n    /** Returns the event's timestamp as the number of milliseconds measured relative to the time origin. */\n    readonly timeStamp: DOMHighResTimeStamp;\n    /** Returns the type of event, e.g. \"click\", \"hashchange\", or \"submit\". */\n    readonly type: string;\n    /** Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is \"closed\" that are not reachable from event's currentTarget. */\n    composedPath(): EventTarget[];\n    /** @deprecated */\n    initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;\n    /** If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled. */\n    preventDefault(): void;\n    /** Invoking this method prevents event from reaching any registered event listeners after the current one finishes running and, when dispatched in a tree, also prevents event from reaching any other objects. */\n    stopImmediatePropagation(): void;\n    /** When dispatched in a tree, invoking this method prevents event from reaching any objects other than the current object. */\n    stopPropagation(): void;\n    readonly NONE: 0;\n    readonly CAPTURING_PHASE: 1;\n    readonly AT_TARGET: 2;\n    readonly BUBBLING_PHASE: 3;\n}\n\ndeclare var Event: {\n    prototype: Event;\n    new(type: string, eventInitDict?: EventInit): Event;\n    readonly NONE: 0;\n    readonly CAPTURING_PHASE: 1;\n    readonly AT_TARGET: 2;\n    readonly BUBBLING_PHASE: 3;\n};\n\ninterface EventCounts {\n    forEach(callbackfn: (value: number, key: string, parent: EventCounts) => void, thisArg?: any): void;\n}\n\ndeclare var EventCounts: {\n    prototype: EventCounts;\n    new(): EventCounts;\n};\n\ninterface EventListener {\n    (evt: Event): void;\n}\n\ninterface EventListenerObject {\n    handleEvent(object: Event): void;\n}\n\ninterface EventSourceEventMap {\n    \"error\": Event;\n    \"message\": MessageEvent;\n    \"open\": Event;\n}\n\ninterface EventSource extends EventTarget {\n    onerror: ((this: EventSource, ev: Event) => any) | null;\n    onmessage: ((this: EventSource, ev: MessageEvent) => any) | null;\n    onopen: ((this: EventSource, ev: Event) => any) | null;\n    /** Returns the state of this EventSource object's connection. It can have the values described below. */\n    readonly readyState: number;\n    /** Returns the URL providing the event stream. */\n    readonly url: string;\n    /** Returns true if the credentials mode for connection requests to the URL providing the event stream is set to \"include\", and false otherwise. */\n    readonly withCredentials: boolean;\n    /** Aborts any instances of the fetch algorithm started for this EventSource object, and sets the readyState attribute to CLOSED. */\n    close(): void;\n    readonly CONNECTING: 0;\n    readonly OPEN: 1;\n    readonly CLOSED: 2;\n    addEventListener<K extends keyof EventSourceEventMap>(type: K, listener: (this: EventSource, ev: EventSourceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: (this: EventSource, event: MessageEvent) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof EventSourceEventMap>(type: K, listener: (this: EventSource, ev: EventSourceEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: (this: EventSource, event: MessageEvent) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var EventSource: {\n    prototype: EventSource;\n    new(url: string | URL, eventSourceInitDict?: EventSourceInit): EventSource;\n    readonly CONNECTING: 0;\n    readonly OPEN: 1;\n    readonly CLOSED: 2;\n};\n\n/** EventTarget is a DOM interface implemented by objects that can receive events and may have listeners for them. */\ninterface EventTarget {\n    /**\n     * Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.\n     *\n     * The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.\n     *\n     * When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.\n     *\n     * When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in \\xA7 2.8 Observing event listeners.\n     *\n     * When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.\n     *\n     * If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.\n     *\n     * The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.\n     */\n    addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void;\n    /** Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. */\n    dispatchEvent(event: Event): boolean;\n    /** Removes the event listener in target's event listener list with the same type, callback, and options. */\n    removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void;\n}\n\ndeclare var EventTarget: {\n    prototype: EventTarget;\n    new(): EventTarget;\n};\n\n/** @deprecated */\ninterface External {\n    /** @deprecated */\n    AddSearchProvider(): void;\n    /** @deprecated */\n    IsSearchProviderInstalled(): void;\n}\n\n/** @deprecated */\ndeclare var External: {\n    prototype: External;\n    new(): External;\n};\n\n/** Provides information about files and allows JavaScript in a web page to access their content. */\ninterface File extends Blob {\n    readonly lastModified: number;\n    readonly name: string;\n    readonly webkitRelativePath: string;\n}\n\ndeclare var File: {\n    prototype: File;\n    new(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag): File;\n};\n\n/** An object of this type is returned by the files property of the HTML <input> element; this lets you access the list of files selected with the <input type=\"file\"> element. It's also used for a list of files dropped into web content when using the drag and drop API; see the DataTransfer object for details on this usage. */\ninterface FileList {\n    readonly length: number;\n    item(index: number): File | null;\n    [index: number]: File;\n}\n\ndeclare var FileList: {\n    prototype: FileList;\n    new(): FileList;\n};\n\ninterface FileReaderEventMap {\n    \"abort\": ProgressEvent<FileReader>;\n    \"error\": ProgressEvent<FileReader>;\n    \"load\": ProgressEvent<FileReader>;\n    \"loadend\": ProgressEvent<FileReader>;\n    \"loadstart\": ProgressEvent<FileReader>;\n    \"progress\": ProgressEvent<FileReader>;\n}\n\n/** Lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read. */\ninterface FileReader extends EventTarget {\n    readonly error: DOMException | null;\n    onabort: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onerror: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onload: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onloadend: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onloadstart: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onprogress: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    readonly readyState: typeof FileReader.EMPTY | typeof FileReader.LOADING | typeof FileReader.DONE;\n    readonly result: string | ArrayBuffer | null;\n    abort(): void;\n    readAsArrayBuffer(blob: Blob): void;\n    readAsBinaryString(blob: Blob): void;\n    readAsDataURL(blob: Blob): void;\n    readAsText(blob: Blob, encoding?: string): void;\n    readonly EMPTY: 0;\n    readonly LOADING: 1;\n    readonly DONE: 2;\n    addEventListener<K extends keyof FileReaderEventMap>(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof FileReaderEventMap>(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var FileReader: {\n    prototype: FileReader;\n    new(): FileReader;\n    readonly EMPTY: 0;\n    readonly LOADING: 1;\n    readonly DONE: 2;\n};\n\ninterface FileSystem {\n    readonly name: string;\n    readonly root: FileSystemDirectoryEntry;\n}\n\ndeclare var FileSystem: {\n    prototype: FileSystem;\n    new(): FileSystem;\n};\n\ninterface FileSystemDirectoryEntry extends FileSystemEntry {\n    createReader(): FileSystemDirectoryReader;\n    getDirectory(path?: string | null, options?: FileSystemFlags, successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;\n    getFile(path?: string | null, options?: FileSystemFlags, successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemDirectoryEntry: {\n    prototype: FileSystemDirectoryEntry;\n    new(): FileSystemDirectoryEntry;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemDirectoryHandle extends FileSystemHandle {\n    readonly kind: \"directory\";\n    getDirectoryHandle(name: string, options?: FileSystemGetDirectoryOptions): Promise<FileSystemDirectoryHandle>;\n    getFileHandle(name: string, options?: FileSystemGetFileOptions): Promise<FileSystemFileHandle>;\n    removeEntry(name: string, options?: FileSystemRemoveOptions): Promise<void>;\n    resolve(possibleDescendant: FileSystemHandle): Promise<string[] | null>;\n}\n\ndeclare var FileSystemDirectoryHandle: {\n    prototype: FileSystemDirectoryHandle;\n    new(): FileSystemDirectoryHandle;\n};\n\ninterface FileSystemDirectoryReader {\n    readEntries(successCallback: FileSystemEntriesCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemDirectoryReader: {\n    prototype: FileSystemDirectoryReader;\n    new(): FileSystemDirectoryReader;\n};\n\ninterface FileSystemEntry {\n    readonly filesystem: FileSystem;\n    readonly fullPath: string;\n    readonly isDirectory: boolean;\n    readonly isFile: boolean;\n    readonly name: string;\n    getParent(successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemEntry: {\n    prototype: FileSystemEntry;\n    new(): FileSystemEntry;\n};\n\ninterface FileSystemFileEntry extends FileSystemEntry {\n    file(successCallback: FileCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemFileEntry: {\n    prototype: FileSystemFileEntry;\n    new(): FileSystemFileEntry;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemFileHandle extends FileSystemHandle {\n    readonly kind: \"file\";\n    getFile(): Promise<File>;\n}\n\ndeclare var FileSystemFileHandle: {\n    prototype: FileSystemFileHandle;\n    new(): FileSystemFileHandle;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemHandle {\n    readonly kind: FileSystemHandleKind;\n    readonly name: string;\n    isSameEntry(other: FileSystemHandle): Promise<boolean>;\n}\n\ndeclare var FileSystemHandle: {\n    prototype: FileSystemHandle;\n    new(): FileSystemHandle;\n};\n\n/** Focus-related events like focus, blur, focusin, or focusout. */\ninterface FocusEvent extends UIEvent {\n    readonly relatedTarget: EventTarget | null;\n}\n\ndeclare var FocusEvent: {\n    prototype: FocusEvent;\n    new(type: string, eventInitDict?: FocusEventInit): FocusEvent;\n};\n\ninterface FontFace {\n    ascentOverride: string;\n    descentOverride: string;\n    display: FontDisplay;\n    family: string;\n    featureSettings: string;\n    lineGapOverride: string;\n    readonly loaded: Promise<FontFace>;\n    readonly status: FontFaceLoadStatus;\n    stretch: string;\n    style: string;\n    unicodeRange: string;\n    variant: string;\n    weight: string;\n    load(): Promise<FontFace>;\n}\n\ndeclare var FontFace: {\n    prototype: FontFace;\n    new(family: string, source: string | BinaryData, descriptors?: FontFaceDescriptors): FontFace;\n};\n\ninterface FontFaceSetEventMap {\n    \"loading\": Event;\n    \"loadingdone\": Event;\n    \"loadingerror\": Event;\n}\n\ninterface FontFaceSet extends EventTarget {\n    onloading: ((this: FontFaceSet, ev: Event) => any) | null;\n    onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null;\n    onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null;\n    readonly ready: Promise<FontFaceSet>;\n    readonly status: FontFaceSetLoadStatus;\n    check(font: string, text?: string): boolean;\n    load(font: string, text?: string): Promise<FontFace[]>;\n    forEach(callbackfn: (value: FontFace, key: FontFace, parent: FontFaceSet) => void, thisArg?: any): void;\n    addEventListener<K extends keyof FontFaceSetEventMap>(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof FontFaceSetEventMap>(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var FontFaceSet: {\n    prototype: FontFaceSet;\n    new(initialFaces: FontFace[]): FontFaceSet;\n};\n\ninterface FontFaceSetLoadEvent extends Event {\n    readonly fontfaces: ReadonlyArray<FontFace>;\n}\n\ndeclare var FontFaceSetLoadEvent: {\n    prototype: FontFaceSetLoadEvent;\n    new(type: string, eventInitDict?: FontFaceSetLoadEventInit): FontFaceSetLoadEvent;\n};\n\ninterface FontFaceSource {\n    readonly fonts: FontFaceSet;\n}\n\n/** Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to \"multipart/form-data\". */\ninterface FormData {\n    append(name: string, value: string | Blob, fileName?: string): void;\n    delete(name: string): void;\n    get(name: string): FormDataEntryValue | null;\n    getAll(name: string): FormDataEntryValue[];\n    has(name: string): boolean;\n    set(name: string, value: string | Blob, fileName?: string): void;\n    forEach(callbackfn: (value: FormDataEntryValue, key: string, parent: FormData) => void, thisArg?: any): void;\n}\n\ndeclare var FormData: {\n    prototype: FormData;\n    new(form?: HTMLFormElement): FormData;\n};\n\ninterface FormDataEvent extends Event {\n    /** Returns a FormData object representing names and values of elements associated to the target form. Operations on the FormData object will affect form data to be submitted. */\n    readonly formData: FormData;\n}\n\ndeclare var FormDataEvent: {\n    prototype: FormDataEvent;\n    new(type: string, eventInitDict: FormDataEventInit): FormDataEvent;\n};\n\n/** A change in volume. It is an AudioNode audio-processing module that causes a given gain to be applied to the input data before its propagation to the output. A GainNode always has exactly one input and one output, both with the same number of channels. */\ninterface GainNode extends AudioNode {\n    readonly gain: AudioParam;\n}\n\ndeclare var GainNode: {\n    prototype: GainNode;\n    new(context: BaseAudioContext, options?: GainOptions): GainNode;\n};\n\n/**\n * This Gamepad API interface defines an individual gamepad or other controller, allowing access to information such as button presses, axis positions, and id.\n * Available only in secure contexts.\n */\ninterface Gamepad {\n    readonly axes: ReadonlyArray<number>;\n    readonly buttons: ReadonlyArray<GamepadButton>;\n    readonly connected: boolean;\n    readonly hapticActuators: ReadonlyArray<GamepadHapticActuator>;\n    readonly id: string;\n    readonly index: number;\n    readonly mapping: GamepadMappingType;\n    readonly timestamp: DOMHighResTimeStamp;\n}\n\ndeclare var Gamepad: {\n    prototype: Gamepad;\n    new(): Gamepad;\n};\n\n/**\n * An individual button of a gamepad or other controller, allowing access to the current state of different types of buttons available on the control device.\n * Available only in secure contexts.\n */\ninterface GamepadButton {\n    readonly pressed: boolean;\n    readonly touched: boolean;\n    readonly value: number;\n}\n\ndeclare var GamepadButton: {\n    prototype: GamepadButton;\n    new(): GamepadButton;\n};\n\n/**\n * This Gamepad API interface contains references to gamepads connected to the system, which is what the gamepad events Window.gamepadconnected and Window.gamepaddisconnected are fired in response to.\n * Available only in secure contexts.\n */\ninterface GamepadEvent extends Event {\n    readonly gamepad: Gamepad;\n}\n\ndeclare var GamepadEvent: {\n    prototype: GamepadEvent;\n    new(type: string, eventInitDict: GamepadEventInit): GamepadEvent;\n};\n\n/** This Gamepad API interface represents hardware in the controller designed to provide haptic feedback to the user (if available), most commonly vibration hardware. */\ninterface GamepadHapticActuator {\n    readonly type: GamepadHapticActuatorType;\n}\n\ndeclare var GamepadHapticActuator: {\n    prototype: GamepadHapticActuator;\n    new(): GamepadHapticActuator;\n};\n\ninterface GenericTransformStream {\n    readonly readable: ReadableStream;\n    readonly writable: WritableStream;\n}\n\n/** An object able to programmatically obtain the position of the device. It gives Web content access to the location of the device. This allows a Web site or app to offer customized results based on the user's location. */\ninterface Geolocation {\n    clearWatch(watchId: number): void;\n    getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback | null, options?: PositionOptions): void;\n    watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback | null, options?: PositionOptions): number;\n}\n\ndeclare var Geolocation: {\n    prototype: Geolocation;\n    new(): Geolocation;\n};\n\n/** Available only in secure contexts. */\ninterface GeolocationCoordinates {\n    readonly accuracy: number;\n    readonly altitude: number | null;\n    readonly altitudeAccuracy: number | null;\n    readonly heading: number | null;\n    readonly latitude: number;\n    readonly longitude: number;\n    readonly speed: number | null;\n}\n\ndeclare var GeolocationCoordinates: {\n    prototype: GeolocationCoordinates;\n    new(): GeolocationCoordinates;\n};\n\n/** Available only in secure contexts. */\ninterface GeolocationPosition {\n    readonly coords: GeolocationCoordinates;\n    readonly timestamp: EpochTimeStamp;\n}\n\ndeclare var GeolocationPosition: {\n    prototype: GeolocationPosition;\n    new(): GeolocationPosition;\n};\n\ninterface GeolocationPositionError {\n    readonly code: number;\n    readonly message: string;\n    readonly PERMISSION_DENIED: 1;\n    readonly POSITION_UNAVAILABLE: 2;\n    readonly TIMEOUT: 3;\n}\n\ndeclare var GeolocationPositionError: {\n    prototype: GeolocationPositionError;\n    new(): GeolocationPositionError;\n    readonly PERMISSION_DENIED: 1;\n    readonly POSITION_UNAVAILABLE: 2;\n    readonly TIMEOUT: 3;\n};\n\ninterface GlobalEventHandlersEventMap {\n    \"abort\": UIEvent;\n    \"animationcancel\": AnimationEvent;\n    \"animationend\": AnimationEvent;\n    \"animationiteration\": AnimationEvent;\n    \"animationstart\": AnimationEvent;\n    \"auxclick\": MouseEvent;\n    \"beforeinput\": InputEvent;\n    \"blur\": FocusEvent;\n    \"cancel\": Event;\n    \"canplay\": Event;\n    \"canplaythrough\": Event;\n    \"change\": Event;\n    \"click\": MouseEvent;\n    \"close\": Event;\n    \"compositionend\": CompositionEvent;\n    \"compositionstart\": CompositionEvent;\n    \"compositionupdate\": CompositionEvent;\n    \"contextmenu\": MouseEvent;\n    \"copy\": ClipboardEvent;\n    \"cuechange\": Event;\n    \"cut\": ClipboardEvent;\n    \"dblclick\": MouseEvent;\n    \"drag\": DragEvent;\n    \"dragend\": DragEvent;\n    \"dragenter\": DragEvent;\n    \"dragleave\": DragEvent;\n    \"dragover\": DragEvent;\n    \"dragstart\": DragEvent;\n    \"drop\": DragEvent;\n    \"durationchange\": Event;\n    \"emptied\": Event;\n    \"ended\": Event;\n    \"error\": ErrorEvent;\n    \"focus\": FocusEvent;\n    \"focusin\": FocusEvent;\n    \"focusout\": FocusEvent;\n    \"formdata\": FormDataEvent;\n    \"gotpointercapture\": PointerEvent;\n    \"input\": Event;\n    \"invalid\": Event;\n    \"keydown\": KeyboardEvent;\n    \"keypress\": KeyboardEvent;\n    \"keyup\": KeyboardEvent;\n    \"load\": Event;\n    \"loadeddata\": Event;\n    \"loadedmetadata\": Event;\n    \"loadstart\": Event;\n    \"lostpointercapture\": PointerEvent;\n    \"mousedown\": MouseEvent;\n    \"mouseenter\": MouseEvent;\n    \"mouseleave\": MouseEvent;\n    \"mousemove\": MouseEvent;\n    \"mouseout\": MouseEvent;\n    \"mouseover\": MouseEvent;\n    \"mouseup\": MouseEvent;\n    \"paste\": ClipboardEvent;\n    \"pause\": Event;\n    \"play\": Event;\n    \"playing\": Event;\n    \"pointercancel\": PointerEvent;\n    \"pointerdown\": PointerEvent;\n    \"pointerenter\": PointerEvent;\n    \"pointerleave\": PointerEvent;\n    \"pointermove\": PointerEvent;\n    \"pointerout\": PointerEvent;\n    \"pointerover\": PointerEvent;\n    \"pointerup\": PointerEvent;\n    \"progress\": ProgressEvent;\n    \"ratechange\": Event;\n    \"reset\": Event;\n    \"resize\": UIEvent;\n    \"scroll\": Event;\n    \"securitypolicyviolation\": SecurityPolicyViolationEvent;\n    \"seeked\": Event;\n    \"seeking\": Event;\n    \"select\": Event;\n    \"selectionchange\": Event;\n    \"selectstart\": Event;\n    \"slotchange\": Event;\n    \"stalled\": Event;\n    \"submit\": SubmitEvent;\n    \"suspend\": Event;\n    \"timeupdate\": Event;\n    \"toggle\": Event;\n    \"touchcancel\": TouchEvent;\n    \"touchend\": TouchEvent;\n    \"touchmove\": TouchEvent;\n    \"touchstart\": TouchEvent;\n    \"transitioncancel\": TransitionEvent;\n    \"transitionend\": TransitionEvent;\n    \"transitionrun\": TransitionEvent;\n    \"transitionstart\": TransitionEvent;\n    \"volumechange\": Event;\n    \"waiting\": Event;\n    \"webkitanimationend\": Event;\n    \"webkitanimationiteration\": Event;\n    \"webkitanimationstart\": Event;\n    \"webkittransitionend\": Event;\n    \"wheel\": WheelEvent;\n}\n\ninterface GlobalEventHandlers {\n    /**\n     * Fires when the user aborts the download.\n     * @param ev The event.\n     */\n    onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;\n    onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n    onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n    onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n    onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n    onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null;\n    /**\n     * Fires when the object loses the input focus.\n     * @param ev The focus event.\n     */\n    onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;\n    oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when playback is possible, but would require further buffering.\n     * @param ev The event.\n     */\n    oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Fires when the contents of the object or selection have changed.\n     * @param ev The event.\n     */\n    onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Fires when the user clicks the left mouse button on the object\n     * @param ev The mouse event.\n     */\n    onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Fires when the user clicks the right mouse button in the client area, opening the context menu.\n     * @param ev The mouse event.\n     */\n    oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;\n    oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;\n    /**\n     * Fires when the user double-clicks the object.\n     * @param ev The mouse event.\n     */\n    ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    /**\n     * Fires on the source object continuously during a drag operation.\n     * @param ev The event.\n     */\n    ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n    /**\n     * Fires on the source object when the user releases the mouse at the close of a drag operation.\n     * @param ev The event.\n     */\n    ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n    /**\n     * Fires on the target element when the user drags the object to a valid drop target.\n     * @param ev The drag event.\n     */\n    ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n    /**\n     * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.\n     * @param ev The drag event.\n     */\n    ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n    /**\n     * Fires on the target element continuously while the user drags the object over a valid drop target.\n     * @param ev The event.\n     */\n    ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n    /**\n     * Fires on the source object when the user starts to drag a text selection or selected object.\n     * @param ev The event.\n     */\n    ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n    ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n    /**\n     * Occurs when the duration attribute is updated.\n     * @param ev The event.\n     */\n    ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when the media element is reset to its initial state.\n     * @param ev The event.\n     */\n    onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when the end of playback is reached.\n     * @param ev The event\n     */\n    onended: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Fires when an error occurs during object loading.\n     * @param ev The event.\n     */\n    onerror: OnErrorEventHandler;\n    /**\n     * Fires when the object receives focus.\n     * @param ev The event.\n     */\n    onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;\n    onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null;\n    ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Fires when the user presses a key.\n     * @param ev The keyboard event\n     */\n    onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;\n    /**\n     * Fires when the user presses an alphanumeric key.\n     * @param ev The event.\n     * @deprecated\n     */\n    onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;\n    /**\n     * Fires when the user releases a key.\n     * @param ev The keyboard event\n     */\n    onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;\n    /**\n     * Fires immediately after the browser loads the object.\n     * @param ev The event.\n     */\n    onload: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when media data is loaded at the current playback position.\n     * @param ev The event.\n     */\n    onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when the duration and dimensions of the media have been determined.\n     * @param ev The event.\n     */\n    onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when Internet Explorer begins looking for media data.\n     * @param ev The event.\n     */\n    onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    /**\n     * Fires when the user clicks the object with either mouse button.\n     * @param ev The mouse event.\n     */\n    onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    /**\n     * Fires when the user moves the mouse over the object.\n     * @param ev The mouse event.\n     */\n    onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    /**\n     * Fires when the user moves the mouse pointer outside the boundaries of the object.\n     * @param ev The mouse event.\n     */\n    onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    /**\n     * Fires when the user moves the mouse pointer into the object.\n     * @param ev The mouse event.\n     */\n    onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    /**\n     * Fires when the user releases a mouse button while the mouse is over the object.\n     * @param ev The mouse event.\n     */\n    onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n    onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;\n    /**\n     * Occurs when playback is paused.\n     * @param ev The event.\n     */\n    onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when the play method is requested.\n     * @param ev The event.\n     */\n    onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when the audio or video has started playing.\n     * @param ev The event.\n     */\n    onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n    /**\n     * Occurs to indicate progress while downloading media data.\n     * @param ev The event.\n     */\n    onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null;\n    /**\n     * Occurs when the playback rate is increased or decreased.\n     * @param ev The event.\n     */\n    onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Fires when the user resets a form.\n     * @param ev The event.\n     */\n    onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;\n    /**\n     * Fires when the user repositions the scroll box in the scroll bar on the object.\n     * @param ev The event.\n     */\n    onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null;\n    /**\n     * Occurs when the seek operation ends.\n     * @param ev The event.\n     */\n    onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when the current playback position is moved.\n     * @param ev The event.\n     */\n    onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Fires when the current selection changes.\n     * @param ev The event.\n     */\n    onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when the download has stopped.\n     * @param ev The event.\n     */\n    onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null;\n    /**\n     * Occurs if the load operation has been intentionally halted.\n     * @param ev The event.\n     */\n    onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs to indicate the current playback position.\n     * @param ev The event.\n     */\n    ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n    ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n    ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n    ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n    ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n    ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n    ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n    ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n    /**\n     * Occurs when the volume is changed, or playback is muted or unmuted.\n     * @param ev The event.\n     */\n    onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /**\n     * Occurs when playback stops because the next frame of a video resource is not available.\n     * @param ev The event.\n     */\n    onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /** @deprecated This is a legacy alias of \\`onanimationend\\`. */\n    onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /** @deprecated This is a legacy alias of \\`onanimationiteration\\`. */\n    onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /** @deprecated This is a legacy alias of \\`onanimationstart\\`. */\n    onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    /** @deprecated This is a legacy alias of \\`ontransitionend\\`. */\n    onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n    onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null;\n    addEventListener<K extends keyof GlobalEventHandlersEventMap>(type: K, listener: (this: GlobalEventHandlers, ev: GlobalEventHandlersEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof GlobalEventHandlersEventMap>(type: K, listener: (this: GlobalEventHandlers, ev: GlobalEventHandlersEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ninterface HTMLAllCollection {\n    /** Returns the number of elements in the collection. */\n    readonly length: number;\n    /** Returns the item with index index from the collection (determined by tree order). */\n    item(nameOrIndex?: string): HTMLCollection | Element | null;\n    /**\n     * Returns the item with ID or name name from the collection.\n     *\n     * If there are multiple matching items, then an HTMLCollection object containing all those elements is returned.\n     *\n     * Only button, form, iframe, input, map, meta, object, select, and textarea elements can have a name for the purpose of this method; their name is given by the value of their name attribute.\n     */\n    namedItem(name: string): HTMLCollection | Element | null;\n    [index: number]: Element;\n}\n\ndeclare var HTMLAllCollection: {\n    prototype: HTMLAllCollection;\n    new(): HTMLAllCollection;\n};\n\n/** Hyperlink elements and provides special properties and methods (beyond those of the regular HTMLElement object interface that they inherit from) for manipulating the layout and presentation of such elements. */\ninterface HTMLAnchorElement extends HTMLElement, HTMLHyperlinkElementUtils {\n    /**\n     * Sets or retrieves the character set used to encode the object.\n     * @deprecated\n     */\n    charset: string;\n    /**\n     * Sets or retrieves the coordinates of the object.\n     * @deprecated\n     */\n    coords: string;\n    download: string;\n    /** Sets or retrieves the language code of the object. */\n    hreflang: string;\n    /**\n     * Sets or retrieves the shape of the object.\n     * @deprecated\n     */\n    name: string;\n    ping: string;\n    referrerPolicy: string;\n    /** Sets or retrieves the relationship between the object and the destination of the link. */\n    rel: string;\n    readonly relList: DOMTokenList;\n    /**\n     * Sets or retrieves the relationship between the object and the destination of the link.\n     * @deprecated\n     */\n    rev: string;\n    /**\n     * Sets or retrieves the shape of the object.\n     * @deprecated\n     */\n    shape: string;\n    /** Sets or retrieves the window or frame at which to target content. */\n    target: string;\n    /** Retrieves or sets the text of the object as a string. */\n    text: string;\n    type: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLAnchorElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLAnchorElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLAnchorElement: {\n    prototype: HTMLAnchorElement;\n    new(): HTMLAnchorElement;\n};\n\n/** Provides special properties and methods (beyond those of the regular object HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <area> elements. */\ninterface HTMLAreaElement extends HTMLElement, HTMLHyperlinkElementUtils {\n    /** Sets or retrieves a text alternative to the graphic. */\n    alt: string;\n    /** Sets or retrieves the coordinates of the object. */\n    coords: string;\n    download: string;\n    /**\n     * Sets or gets whether clicks in this region cause action.\n     * @deprecated\n     */\n    noHref: boolean;\n    ping: string;\n    referrerPolicy: string;\n    rel: string;\n    readonly relList: DOMTokenList;\n    /** Sets or retrieves the shape of the object. */\n    shape: string;\n    /** Sets or retrieves the window or frame at which to target content. */\n    target: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLAreaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLAreaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLAreaElement: {\n    prototype: HTMLAreaElement;\n    new(): HTMLAreaElement;\n};\n\n/** Provides access to the properties of <audio> elements, as well as methods to manipulate them. It derives from the HTMLMediaElement interface. */\ninterface HTMLAudioElement extends HTMLMediaElement {\n    addEventListener<K extends keyof HTMLMediaElementEventMap>(type: K, listener: (this: HTMLAudioElement, ev: HTMLMediaElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLMediaElementEventMap>(type: K, listener: (this: HTMLAudioElement, ev: HTMLMediaElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLAudioElement: {\n    prototype: HTMLAudioElement;\n    new(): HTMLAudioElement;\n};\n\n/** A HTML line break element (<br>). It inherits from HTMLElement. */\ninterface HTMLBRElement extends HTMLElement {\n    /**\n     * Sets or retrieves the side on which floating objects are not to be positioned when any IHTMLBlockElement is inserted into the document.\n     * @deprecated\n     */\n    clear: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLBRElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLBRElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLBRElement: {\n    prototype: HTMLBRElement;\n    new(): HTMLBRElement;\n};\n\n/** Contains the base URI\\xA0for a document. This object inherits all of the properties and methods as described in the HTMLElement interface. */\ninterface HTMLBaseElement extends HTMLElement {\n    /** Gets or sets the baseline URL on which relative links are based. */\n    href: string;\n    /** Sets or retrieves the window or frame at which to target content. */\n    target: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLBaseElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLBaseElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLBaseElement: {\n    prototype: HTMLBaseElement;\n    new(): HTMLBaseElement;\n};\n\ninterface HTMLBodyElementEventMap extends HTMLElementEventMap, WindowEventHandlersEventMap {\n}\n\n/** Provides special properties (beyond those inherited from the regular HTMLElement interface) for manipulating <body> elements. */\ninterface HTMLBodyElement extends HTMLElement, WindowEventHandlers {\n    /** @deprecated */\n    aLink: string;\n    /** @deprecated */\n    background: string;\n    /** @deprecated */\n    bgColor: string;\n    /** @deprecated */\n    link: string;\n    /** @deprecated */\n    text: string;\n    /** @deprecated */\n    vLink: string;\n    addEventListener<K extends keyof HTMLBodyElementEventMap>(type: K, listener: (this: HTMLBodyElement, ev: HTMLBodyElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLBodyElementEventMap>(type: K, listener: (this: HTMLBodyElement, ev: HTMLBodyElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLBodyElement: {\n    prototype: HTMLBodyElement;\n    new(): HTMLBodyElement;\n};\n\n/** Provides properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <button> elements. */\ninterface HTMLButtonElement extends HTMLElement {\n    disabled: boolean;\n    /** Retrieves a reference to the form that the object is embedded in. */\n    readonly form: HTMLFormElement | null;\n    /** Overrides the action attribute (where the data on a form is sent) on the parent form element. */\n    formAction: string;\n    /** Used to override the encoding (formEnctype attribute) specified on the form element. */\n    formEnctype: string;\n    /** Overrides the submit method attribute previously specified on a form element. */\n    formMethod: string;\n    /** Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a \"save draft\"-type submit option. */\n    formNoValidate: boolean;\n    /** Overrides the target attribute on a form element. */\n    formTarget: string;\n    readonly labels: NodeListOf<HTMLLabelElement>;\n    /** Sets or retrieves the name of the object. */\n    name: string;\n    /** Gets the classification and default behavior of the button. */\n    type: string;\n    /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as \"this is a required field\". The result is that the user sees validation messages without actually submitting. */\n    readonly validationMessage: string;\n    /** Returns a  ValidityState object that represents the validity states of an element. */\n    readonly validity: ValidityState;\n    /** Sets or retrieves the default or selected value of the control. */\n    value: string;\n    /** Returns whether an element will successfully validate based on forms validation rules and constraints. */\n    readonly willValidate: boolean;\n    /** Returns whether a form will validate when it is submitted, without having to submit it. */\n    checkValidity(): boolean;\n    reportValidity(): boolean;\n    /**\n     * Sets a custom error message that is displayed when a form is submitted.\n     * @param error Sets a custom error message that is displayed when a form is submitted.\n     */\n    setCustomValidity(error: string): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLButtonElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLButtonElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLButtonElement: {\n    prototype: HTMLButtonElement;\n    new(): HTMLButtonElement;\n};\n\n/** Provides properties and methods for manipulating the layout and presentation of <canvas> elements. The HTMLCanvasElement interface also inherits the properties and methods of the HTMLElement interface. */\ninterface HTMLCanvasElement extends HTMLElement {\n    /** Gets or sets the height of a canvas element on a document. */\n    height: number;\n    /** Gets or sets the width of a canvas element on a document. */\n    width: number;\n    captureStream(frameRequestRate?: number): MediaStream;\n    /**\n     * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.\n     * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext(\"2d\"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext(\"experimental-webgl\");\n     */\n    getContext(contextId: \"2d\", options?: CanvasRenderingContext2DSettings): CanvasRenderingContext2D | null;\n    getContext(contextId: \"bitmaprenderer\", options?: ImageBitmapRenderingContextSettings): ImageBitmapRenderingContext | null;\n    getContext(contextId: \"webgl\", options?: WebGLContextAttributes): WebGLRenderingContext | null;\n    getContext(contextId: \"webgl2\", options?: WebGLContextAttributes): WebGL2RenderingContext | null;\n    getContext(contextId: string, options?: any): RenderingContext | null;\n    toBlob(callback: BlobCallback, type?: string, quality?: any): void;\n    /**\n     * Returns the content of the current canvas as an image that you can use as a source for another canvas or an HTML element.\n     * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image.\n     */\n    toDataURL(type?: string, quality?: any): string;\n    transferControlToOffscreen(): OffscreenCanvas;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLCanvasElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLCanvasElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLCanvasElement: {\n    prototype: HTMLCanvasElement;\n    new(): HTMLCanvasElement;\n};\n\n/** A generic collection (array-like object similar to arguments) of elements (in document order) and offers methods and properties for selecting from the list. */\ninterface HTMLCollectionBase {\n    /** Sets or retrieves the number of objects in a collection. */\n    readonly length: number;\n    /** Retrieves an object from various collections. */\n    item(index: number): Element | null;\n    [index: number]: Element;\n}\n\ninterface HTMLCollection extends HTMLCollectionBase {\n    /** Retrieves a select object or an object from an options collection. */\n    namedItem(name: string): Element | null;\n}\n\ndeclare var HTMLCollection: {\n    prototype: HTMLCollection;\n    new(): HTMLCollection;\n};\n\ninterface HTMLCollectionOf<T extends Element> extends HTMLCollectionBase {\n    item(index: number): T | null;\n    namedItem(name: string): T | null;\n    [index: number]: T;\n}\n\n/** Provides special properties (beyond those of the regular HTMLElement interface it also has available to it by inheritance) for manipulating definition list (<dl>) elements. */\ninterface HTMLDListElement extends HTMLElement {\n    /** @deprecated */\n    compact: boolean;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLDListElement: {\n    prototype: HTMLDListElement;\n    new(): HTMLDListElement;\n};\n\n/** Provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <data> elements. */\ninterface HTMLDataElement extends HTMLElement {\n    value: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDataElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDataElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLDataElement: {\n    prototype: HTMLDataElement;\n    new(): HTMLDataElement;\n};\n\n/** Provides special properties (beyond the HTMLElement object interface it also has available to it by inheritance) to manipulate <datalist> elements and their content. */\ninterface HTMLDataListElement extends HTMLElement {\n    /** Returns an HTMLCollection of the option elements of the datalist element. */\n    readonly options: HTMLCollectionOf<HTMLOptionElement>;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDataListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDataListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLDataListElement: {\n    prototype: HTMLDataListElement;\n    new(): HTMLDataListElement;\n};\n\ninterface HTMLDetailsElement extends HTMLElement {\n    open: boolean;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDetailsElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDetailsElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLDetailsElement: {\n    prototype: HTMLDetailsElement;\n    new(): HTMLDetailsElement;\n};\n\ninterface HTMLDialogElement extends HTMLElement {\n    open: boolean;\n    returnValue: string;\n    /**\n     * Closes the dialog element.\n     *\n     * The argument, if provided, provides a return value.\n     */\n    close(returnValue?: string): void;\n    /** Displays the dialog element. */\n    show(): void;\n    showModal(): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDialogElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDialogElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLDialogElement: {\n    prototype: HTMLDialogElement;\n    new(): HTMLDialogElement;\n};\n\n/** @deprecated */\ninterface HTMLDirectoryElement extends HTMLElement {\n    /** @deprecated */\n    compact: boolean;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDirectoryElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDirectoryElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** @deprecated */\ndeclare var HTMLDirectoryElement: {\n    prototype: HTMLDirectoryElement;\n    new(): HTMLDirectoryElement;\n};\n\n/** Provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <div> elements. */\ninterface HTMLDivElement extends HTMLElement {\n    /**\n     * Sets or retrieves how the object is aligned with adjacent text.\n     * @deprecated\n     */\n    align: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDivElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLDivElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLDivElement: {\n    prototype: HTMLDivElement;\n    new(): HTMLDivElement;\n};\n\n/** @deprecated use Document */\ninterface HTMLDocument extends Document {\n    addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: HTMLDocument, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: HTMLDocument, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** @deprecated */\ndeclare var HTMLDocument: {\n    prototype: HTMLDocument;\n    new(): HTMLDocument;\n};\n\ninterface HTMLElementEventMap extends ElementEventMap, GlobalEventHandlersEventMap {\n}\n\n/** Any HTML element. Some elements directly implement this interface, while others implement it via an interface that inherits it. */\ninterface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEditable, GlobalEventHandlers, HTMLOrSVGElement {\n    accessKey: string;\n    readonly accessKeyLabel: string;\n    autocapitalize: string;\n    dir: string;\n    draggable: boolean;\n    hidden: boolean;\n    inert: boolean;\n    innerText: string;\n    lang: string;\n    readonly offsetHeight: number;\n    readonly offsetLeft: number;\n    readonly offsetParent: Element | null;\n    readonly offsetTop: number;\n    readonly offsetWidth: number;\n    outerText: string;\n    spellcheck: boolean;\n    title: string;\n    translate: boolean;\n    attachInternals(): ElementInternals;\n    click(): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLElement: {\n    prototype: HTMLElement;\n    new(): HTMLElement;\n};\n\n/** Provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <embed> elements. */\ninterface HTMLEmbedElement extends HTMLElement {\n    /** @deprecated */\n    align: string;\n    /** Sets or retrieves the height of the object. */\n    height: string;\n    /**\n     * Sets or retrieves the name of the object.\n     * @deprecated\n     */\n    name: string;\n    /** Sets or retrieves a URL to be loaded by the object. */\n    src: string;\n    type: string;\n    /** Sets or retrieves the width of the object. */\n    width: string;\n    getSVGDocument(): Document | null;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLEmbedElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLEmbedElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLEmbedElement: {\n    prototype: HTMLEmbedElement;\n    new(): HTMLEmbedElement;\n};\n\n/** Provides special properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <fieldset> elements. */\ninterface HTMLFieldSetElement extends HTMLElement {\n    disabled: boolean;\n    /** Returns an HTMLCollection of the form controls in the element. */\n    readonly elements: HTMLCollection;\n    /** Retrieves a reference to the form that the object is embedded in. */\n    readonly form: HTMLFormElement | null;\n    name: string;\n    /** Returns the string \"fieldset\". */\n    readonly type: string;\n    /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as \"this is a required field\". The result is that the user sees validation messages without actually submitting. */\n    readonly validationMessage: string;\n    /** Returns a  ValidityState object that represents the validity states of an element. */\n    readonly validity: ValidityState;\n    /** Returns whether an element will successfully validate based on forms validation rules and constraints. */\n    readonly willValidate: boolean;\n    /** Returns whether a form will validate when it is submitted, without having to submit it. */\n    checkValidity(): boolean;\n    reportValidity(): boolean;\n    /**\n     * Sets a custom error message that is displayed when a form is submitted.\n     * @param error Sets a custom error message that is displayed when a form is submitted.\n     */\n    setCustomValidity(error: string): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLFieldSetElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLFieldSetElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLFieldSetElement: {\n    prototype: HTMLFieldSetElement;\n    new(): HTMLFieldSetElement;\n};\n\n/**\n * Implements the document object model (DOM) representation of the font element. The HTML Font Element <font> defines the font size, font face and color of text.\n * @deprecated\n */\ninterface HTMLFontElement extends HTMLElement {\n    /** @deprecated */\n    color: string;\n    /**\n     * Sets or retrieves the current typeface family.\n     * @deprecated\n     */\n    face: string;\n    /** @deprecated */\n    size: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLFontElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLFontElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** @deprecated */\ndeclare var HTMLFontElement: {\n    prototype: HTMLFontElement;\n    new(): HTMLFontElement;\n};\n\n/** A collection of HTML form control elements.  */\ninterface HTMLFormControlsCollection extends HTMLCollectionBase {\n    /**\n     * Returns the item with ID or name name from the collection.\n     *\n     * If there are multiple matching items, then a RadioNodeList object containing all those elements is returned.\n     */\n    namedItem(name: string): RadioNodeList | Element | null;\n}\n\ndeclare var HTMLFormControlsCollection: {\n    prototype: HTMLFormControlsCollection;\n    new(): HTMLFormControlsCollection;\n};\n\n/** A <form> element in the DOM; it allows access to and in some cases modification of aspects of the form, as well as access to its component elements. */\ninterface HTMLFormElement extends HTMLElement {\n    /** Sets or retrieves a list of character encodings for input data that must be accepted by the server processing the form. */\n    acceptCharset: string;\n    /** Sets or retrieves the URL to which the form content is sent for processing. */\n    action: string;\n    /** Specifies whether autocomplete is applied to an editable text field. */\n    autocomplete: string;\n    /** Retrieves a collection, in source order, of all controls in a given form. */\n    readonly elements: HTMLFormControlsCollection;\n    /** Sets or retrieves the MIME encoding for the form. */\n    encoding: string;\n    /** Sets or retrieves the encoding type for the form. */\n    enctype: string;\n    /** Sets or retrieves the number of objects in a collection. */\n    readonly length: number;\n    /** Sets or retrieves how to send the form data to the server. */\n    method: string;\n    /** Sets or retrieves the name of the object. */\n    name: string;\n    /** Designates a form that is not validated when submitted. */\n    noValidate: boolean;\n    rel: string;\n    readonly relList: DOMTokenList;\n    /** Sets or retrieves the window or frame at which to target content. */\n    target: string;\n    /** Returns whether a form will validate when it is submitted, without having to submit it. */\n    checkValidity(): boolean;\n    reportValidity(): boolean;\n    requestSubmit(submitter?: HTMLElement | null): void;\n    /** Fires when the user resets a form. */\n    reset(): void;\n    /** Fires when a FORM is about to be submitted. */\n    submit(): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLFormElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLFormElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n    [index: number]: Element;\n    [name: string]: any;\n}\n\ndeclare var HTMLFormElement: {\n    prototype: HTMLFormElement;\n    new(): HTMLFormElement;\n};\n\n/** @deprecated */\ninterface HTMLFrameElement extends HTMLElement {\n    /**\n     * Retrieves the document object of the page or frame.\n     * @deprecated\n     */\n    readonly contentDocument: Document | null;\n    /**\n     * Retrieves the object of the specified.\n     * @deprecated\n     */\n    readonly contentWindow: WindowProxy | null;\n    /**\n     * Sets or retrieves whether to display a border for the frame.\n     * @deprecated\n     */\n    frameBorder: string;\n    /**\n     * Sets or retrieves a URI to a long description of the object.\n     * @deprecated\n     */\n    longDesc: string;\n    /**\n     * Sets or retrieves the top and bottom margin heights before displaying the text in a frame.\n     * @deprecated\n     */\n    marginHeight: string;\n    /**\n     * Sets or retrieves the left and right margin widths before displaying the text in a frame.\n     * @deprecated\n     */\n    marginWidth: string;\n    /**\n     * Sets or retrieves the frame name.\n     * @deprecated\n     */\n    name: string;\n    /**\n     * Sets or retrieves whether the user can resize the frame.\n     * @deprecated\n     */\n    noResize: boolean;\n    /**\n     * Sets or retrieves whether the frame can be scrolled.\n     * @deprecated\n     */\n    scrolling: string;\n    /**\n     * Sets or retrieves a URL to be loaded by the object.\n     * @deprecated\n     */\n    src: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLFrameElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLFrameElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** @deprecated */\ndeclare var HTMLFrameElement: {\n    prototype: HTMLFrameElement;\n    new(): HTMLFrameElement;\n};\n\ninterface HTMLFrameSetElementEventMap extends HTMLElementEventMap, WindowEventHandlersEventMap {\n}\n\n/**\n * Provides special properties (beyond those of the regular HTMLElement interface they also inherit) for manipulating <frameset> elements.\n * @deprecated\n */\ninterface HTMLFrameSetElement extends HTMLElement, WindowEventHandlers {\n    /**\n     * Sets or retrieves the frame widths of the object.\n     * @deprecated\n     */\n    cols: string;\n    /**\n     * Sets or retrieves the frame heights of the object.\n     * @deprecated\n     */\n    rows: string;\n    addEventListener<K extends keyof HTMLFrameSetElementEventMap>(type: K, listener: (this: HTMLFrameSetElement, ev: HTMLFrameSetElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLFrameSetElementEventMap>(type: K, listener: (this: HTMLFrameSetElement, ev: HTMLFrameSetElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** @deprecated */\ndeclare var HTMLFrameSetElement: {\n    prototype: HTMLFrameSetElement;\n    new(): HTMLFrameSetElement;\n};\n\n/** Provides special properties (beyond those of the HTMLElement interface it also has available to it by inheritance) for manipulating <hr> elements. */\ninterface HTMLHRElement extends HTMLElement {\n    /**\n     * Sets or retrieves how the object is aligned with adjacent text.\n     * @deprecated\n     */\n    align: string;\n    /** @deprecated */\n    color: string;\n    /**\n     * Sets or retrieves whether the horizontal rule is drawn with 3-D shading.\n     * @deprecated\n     */\n    noShade: boolean;\n    /** @deprecated */\n    size: string;\n    /**\n     * Sets or retrieves the width of the object.\n     * @deprecated\n     */\n    width: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHRElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHRElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLHRElement: {\n    prototype: HTMLHRElement;\n    new(): HTMLHRElement;\n};\n\n/** Contains the descriptive information, or metadata, for a document. This object inherits all of the properties and methods described in the HTMLElement interface. */\ninterface HTMLHeadElement extends HTMLElement {\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHeadElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHeadElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLHeadElement: {\n    prototype: HTMLHeadElement;\n    new(): HTMLHeadElement;\n};\n\n/** The different heading elements. It inherits methods and properties from the HTMLElement interface. */\ninterface HTMLHeadingElement extends HTMLElement {\n    /**\n     * Sets or retrieves a value that indicates the table alignment.\n     * @deprecated\n     */\n    align: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHeadingElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHeadingElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLHeadingElement: {\n    prototype: HTMLHeadingElement;\n    new(): HTMLHeadingElement;\n};\n\n/** Serves as the root node for a given HTML document. This object inherits the properties and methods described in the HTMLElement interface. */\ninterface HTMLHtmlElement extends HTMLElement {\n    /**\n     * Sets or retrieves the DTD version that governs the current document.\n     * @deprecated\n     */\n    version: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHtmlElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLHtmlElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLHtmlElement: {\n    prototype: HTMLHtmlElement;\n    new(): HTMLHtmlElement;\n};\n\ninterface HTMLHyperlinkElementUtils {\n    /**\n     * Returns the hyperlink's URL's fragment (includes leading \"#\" if non-empty).\n     *\n     * Can be set, to change the URL's fragment (ignores leading \"#\").\n     */\n    hash: string;\n    /**\n     * Returns the hyperlink's URL's host and port (if different from the default port for the scheme).\n     *\n     * Can be set, to change the URL's host and port.\n     */\n    host: string;\n    /**\n     * Returns the hyperlink's URL's host.\n     *\n     * Can be set, to change the URL's host.\n     */\n    hostname: string;\n    /**\n     * Returns the hyperlink's URL.\n     *\n     * Can be set, to change the URL.\n     */\n    href: string;\n    toString(): string;\n    /** Returns the hyperlink's URL's origin. */\n    readonly origin: string;\n    /**\n     * Returns the hyperlink's URL's password.\n     *\n     * Can be set, to change the URL's password.\n     */\n    password: string;\n    /**\n     * Returns the hyperlink's URL's path.\n     *\n     * Can be set, to change the URL's path.\n     */\n    pathname: string;\n    /**\n     * Returns the hyperlink's URL's port.\n     *\n     * Can be set, to change the URL's port.\n     */\n    port: string;\n    /**\n     * Returns the hyperlink's URL's scheme.\n     *\n     * Can be set, to change the URL's scheme.\n     */\n    protocol: string;\n    /**\n     * Returns the hyperlink's URL's query (includes leading \"?\" if non-empty).\n     *\n     * Can be set, to change the URL's query (ignores leading \"?\").\n     */\n    search: string;\n    /**\n     * Returns the hyperlink's URL's username.\n     *\n     * Can be set, to change the URL's username.\n     */\n    username: string;\n}\n\n/** Provides special properties and methods (beyond those of the HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of inline frame elements. */\ninterface HTMLIFrameElement extends HTMLElement {\n    /**\n     * Sets or retrieves how the object is aligned with adjacent text.\n     * @deprecated\n     */\n    align: string;\n    allow: string;\n    allowFullscreen: boolean;\n    /** Retrieves the document object of the page or frame. */\n    readonly contentDocument: Document | null;\n    /** Retrieves the object of the specified. */\n    readonly contentWindow: WindowProxy | null;\n    /**\n     * Sets or retrieves whether to display a border for the frame.\n     * @deprecated\n     */\n    frameBorder: string;\n    /** Sets or retrieves the height of the object. */\n    height: string;\n    /**\n     * Sets or retrieves a URI to a long description of the object.\n     * @deprecated\n     */\n    longDesc: string;\n    /**\n     * Sets or retrieves the top and bottom margin heights before displaying the text in a frame.\n     * @deprecated\n     */\n    marginHeight: string;\n    /**\n     * Sets or retrieves the left and right margin widths before displaying the text in a frame.\n     * @deprecated\n     */\n    marginWidth: string;\n    /** Sets or retrieves the frame name. */\n    name: string;\n    referrerPolicy: ReferrerPolicy;\n    readonly sandbox: DOMTokenList;\n    /**\n     * Sets or retrieves whether the frame can be scrolled.\n     * @deprecated\n     */\n    scrolling: string;\n    /** Sets or retrieves a URL to be loaded by the object. */\n    src: string;\n    /** Sets or retrives the content of the page that is to contain. */\n    srcdoc: string;\n    /** Sets or retrieves the width of the object. */\n    width: string;\n    getSVGDocument(): Document | null;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLIFrameElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLIFrameElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLIFrameElement: {\n    prototype: HTMLIFrameElement;\n    new(): HTMLIFrameElement;\n};\n\n/** Provides special properties and methods for manipulating <img> elements. */\ninterface HTMLImageElement extends HTMLElement {\n    /**\n     * Sets or retrieves how the object is aligned with adjacent text.\n     * @deprecated\n     */\n    align: string;\n    /** Sets or retrieves a text alternative to the graphic. */\n    alt: string;\n    /**\n     * Specifies the properties of a border drawn around an object.\n     * @deprecated\n     */\n    border: string;\n    /** Retrieves whether the object is fully loaded. */\n    readonly complete: boolean;\n    crossOrigin: string | null;\n    readonly currentSrc: string;\n    decoding: \"async\" | \"sync\" | \"auto\";\n    /** Sets or retrieves the height of the object. */\n    height: number;\n    /**\n     * Sets or retrieves the width of the border to draw around the object.\n     * @deprecated\n     */\n    hspace: number;\n    /** Sets or retrieves whether the image is a server-side image map. */\n    isMap: boolean;\n    /** Sets or retrieves the policy for loading image elements that are outside the viewport. */\n    loading: \"eager\" | \"lazy\";\n    /**\n     * Sets or retrieves a Uniform Resource Identifier (URI) to a long description of the object.\n     * @deprecated\n     */\n    longDesc: string;\n    /** @deprecated */\n    lowsrc: string;\n    /**\n     * Sets or retrieves the name of the object.\n     * @deprecated\n     */\n    name: string;\n    /** The original height of the image resource before sizing. */\n    readonly naturalHeight: number;\n    /** The original width of the image resource before sizing. */\n    readonly naturalWidth: number;\n    referrerPolicy: string;\n    sizes: string;\n    /** The address or URL of the a media resource that is to be considered. */\n    src: string;\n    srcset: string;\n    /** Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. */\n    useMap: string;\n    /**\n     * Sets or retrieves the vertical margin for the object.\n     * @deprecated\n     */\n    vspace: number;\n    /** Sets or retrieves the width of the object. */\n    width: number;\n    readonly x: number;\n    readonly y: number;\n    decode(): Promise<void>;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLImageElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLImageElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLImageElement: {\n    prototype: HTMLImageElement;\n    new(): HTMLImageElement;\n};\n\n/** Provides special properties and methods for manipulating the options, layout, and presentation of <input> elements. */\ninterface HTMLInputElement extends HTMLElement {\n    /** Sets or retrieves a comma-separated list of content types. */\n    accept: string;\n    /**\n     * Sets or retrieves how the object is aligned with adjacent text.\n     * @deprecated\n     */\n    align: string;\n    /** Sets or retrieves a text alternative to the graphic. */\n    alt: string;\n    /** Specifies whether autocomplete is applied to an editable text field. */\n    autocomplete: string;\n    capture: string;\n    /** Sets or retrieves the state of the check box or radio button. */\n    checked: boolean;\n    /** Sets or retrieves the state of the check box or radio button. */\n    defaultChecked: boolean;\n    /** Sets or retrieves the initial contents of the object. */\n    defaultValue: string;\n    dirName: string;\n    disabled: boolean;\n    /** Returns a FileList object on a file type input object. */\n    files: FileList | null;\n    /** Retrieves a reference to the form that the object is embedded in. */\n    readonly form: HTMLFormElement | null;\n    /** Overrides the action attribute (where the data on a form is sent) on the parent form element. */\n    formAction: string;\n    /** Used to override the encoding (formEnctype attribute) specified on the form element. */\n    formEnctype: string;\n    /** Overrides the submit method attribute previously specified on a form element. */\n    formMethod: string;\n    /** Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a \"save draft\"-type submit option. */\n    formNoValidate: boolean;\n    /** Overrides the target attribute on a form element. */\n    formTarget: string;\n    /** Sets or retrieves the height of the object. */\n    height: number;\n    /** When set, overrides the rendering of checkbox controls so that the current value is not visible. */\n    indeterminate: boolean;\n    readonly labels: NodeListOf<HTMLLabelElement> | null;\n    /** Specifies the ID of a pre-defined datalist of options for an input element. */\n    readonly list: HTMLDataListElement | null;\n    /** Defines the maximum acceptable value for an input element with type=\"number\".When used with the min and step attributes, lets you control the range and increment (such as only even numbers) that the user can enter into an input field. */\n    max: string;\n    /** Sets or retrieves the maximum number of characters that the user can enter in a text control. */\n    maxLength: number;\n    /** Defines the minimum acceptable value for an input element with type=\"number\". When used with the max and step attributes, lets you control the range and increment (such as even numbers only) that the user can enter into an input field. */\n    min: string;\n    minLength: number;\n    /** Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list. */\n    multiple: boolean;\n    /** Sets or retrieves the name of the object. */\n    name: string;\n    /** Gets or sets a string containing a regular expression that the user's input must match. */\n    pattern: string;\n    /** Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field. */\n    placeholder: string;\n    readOnly: boolean;\n    /** When present, marks an element that can't be submitted without a value. */\n    required: boolean;\n    selectionDirection: \"forward\" | \"backward\" | \"none\" | null;\n    /** Gets or sets the end position or offset of a text selection. */\n    selectionEnd: number | null;\n    /** Gets or sets the starting position or offset of a text selection. */\n    selectionStart: number | null;\n    size: number;\n    /** The address or URL of the a media resource that is to be considered. */\n    src: string;\n    /** Defines an increment or jump between values that you want to allow the user to enter. When used with the max and min attributes, lets you control the range and increment (for example, allow only even numbers) that the user can enter into an input field. */\n    step: string;\n    /** Returns the content type of the object. */\n    type: string;\n    /**\n     * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.\n     * @deprecated\n     */\n    useMap: string;\n    /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as \"this is a required field\". The result is that the user sees validation messages without actually submitting. */\n    readonly validationMessage: string;\n    /** Returns a  ValidityState object that represents the validity states of an element. */\n    readonly validity: ValidityState;\n    /** Returns the value of the data at the cursor's current position. */\n    value: string;\n    /** Returns a Date object representing the form control's value, if applicable; otherwise, returns null. Can be set, to change the value. Throws an \"InvalidStateError\" DOMException if the control isn't date- or time-based. */\n    valueAsDate: Date | null;\n    /** Returns the input field value as a number. */\n    valueAsNumber: number;\n    readonly webkitEntries: ReadonlyArray<FileSystemEntry>;\n    webkitdirectory: boolean;\n    /** Sets or retrieves the width of the object. */\n    width: number;\n    /** Returns whether an element will successfully validate based on forms validation rules and constraints. */\n    readonly willValidate: boolean;\n    /** Returns whether a form will validate when it is submitted, without having to submit it. */\n    checkValidity(): boolean;\n    reportValidity(): boolean;\n    /** Makes the selection equal to the current object. */\n    select(): void;\n    /**\n     * Sets a custom error message that is displayed when a form is submitted.\n     * @param error Sets a custom error message that is displayed when a form is submitted.\n     */\n    setCustomValidity(error: string): void;\n    setRangeText(replacement: string): void;\n    setRangeText(replacement: string, start: number, end: number, selectionMode?: SelectionMode): void;\n    /**\n     * Sets the start and end positions of a selection in a text field.\n     * @param start The offset into the text field for the start of the selection.\n     * @param end The offset into the text field for the end of the selection.\n     * @param direction The direction in which the selection is performed.\n     */\n    setSelectionRange(start: number | null, end: number | null, direction?: \"forward\" | \"backward\" | \"none\"): void;\n    showPicker(): void;\n    /**\n     * Decrements a range input control's value by the value given by the Step attribute. If the optional parameter is used, it will decrement the input control's step value multiplied by the parameter's value.\n     * @param n Value to decrement the value by.\n     */\n    stepDown(n?: number): void;\n    /**\n     * Increments a range input control's value by the value given by the Step attribute. If the optional parameter is used, will increment the input control's value by that value.\n     * @param n Value to increment the value by.\n     */\n    stepUp(n?: number): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLInputElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLInputElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLInputElement: {\n    prototype: HTMLInputElement;\n    new(): HTMLInputElement;\n};\n\n/** Exposes specific properties and methods (beyond those defined by regular HTMLElement interface it also has available to it by inheritance) for manipulating list elements. */\ninterface HTMLLIElement extends HTMLElement {\n    /** @deprecated */\n    type: string;\n    /** Sets or retrieves the value of a list item. */\n    value: number;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLLIElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLLIElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLLIElement: {\n    prototype: HTMLLIElement;\n    new(): HTMLLIElement;\n};\n\n/** Gives access to properties specific to <label> elements. It inherits methods and properties from the base HTMLElement interface. */\ninterface HTMLLabelElement extends HTMLElement {\n    /** Returns the form control that is associated with this element. */\n    readonly control: HTMLElement | null;\n    /** Retrieves a reference to the form that the object is embedded in. */\n    readonly form: HTMLFormElement | null;\n    /** Sets or retrieves the object to which the given label object is assigned. */\n    htmlFor: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLLabelElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLLabelElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLLabelElement: {\n    prototype: HTMLLabelElement;\n    new(): HTMLLabelElement;\n};\n\n/** The HTMLLegendElement is an interface allowing to access properties of the <legend> elements. It inherits properties and methods from the HTMLElement interface. */\ninterface HTMLLegendElement extends HTMLElement {\n    /** @deprecated */\n    align: string;\n    /** Retrieves a reference to the form that the object is embedded in. */\n    readonly form: HTMLFormElement | null;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLLegendElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLLegendElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLLegendElement: {\n    prototype: HTMLLegendElement;\n    new(): HTMLLegendElement;\n};\n\n/** Reference information for external resources and the relationship of those resources to a document and vice-versa. This object inherits all of the properties and methods of the HTMLElement interface. */\ninterface HTMLLinkElement extends HTMLElement, LinkStyle {\n    as: string;\n    /**\n     * Sets or retrieves the character set used to encode the object.\n     * @deprecated\n     */\n    charset: string;\n    crossOrigin: string | null;\n    disabled: boolean;\n    /** Sets or retrieves a destination URL or an anchor point. */\n    href: string;\n    /** Sets or retrieves the language code of the object. */\n    hreflang: string;\n    imageSizes: string;\n    imageSrcset: string;\n    integrity: string;\n    /** Sets or retrieves the media type. */\n    media: string;\n    referrerPolicy: string;\n    /** Sets or retrieves the relationship between the object and the destination of the link. */\n    rel: string;\n    readonly relList: DOMTokenList;\n    /**\n     * Sets or retrieves the relationship between the object and the destination of the link.\n     * @deprecated\n     */\n    rev: string;\n    readonly sizes: DOMTokenList;\n    /**\n     * Sets or retrieves the window or frame at which to target content.\n     * @deprecated\n     */\n    target: string;\n    /** Sets or retrieves the MIME type of the object. */\n    type: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLLinkElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLLinkElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLLinkElement: {\n    prototype: HTMLLinkElement;\n    new(): HTMLLinkElement;\n};\n\n/** Provides special properties and methods (beyond those of the regular object HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of map elements. */\ninterface HTMLMapElement extends HTMLElement {\n    /** Retrieves a collection of the area objects defined for the given map object. */\n    readonly areas: HTMLCollection;\n    /** Sets or retrieves the name of the object. */\n    name: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMapElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMapElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLMapElement: {\n    prototype: HTMLMapElement;\n    new(): HTMLMapElement;\n};\n\n/**\n * Provides methods to manipulate <marquee> elements.\n * @deprecated\n */\ninterface HTMLMarqueeElement extends HTMLElement {\n    /** @deprecated */\n    behavior: string;\n    /** @deprecated */\n    bgColor: string;\n    /** @deprecated */\n    direction: string;\n    /** @deprecated */\n    height: string;\n    /** @deprecated */\n    hspace: number;\n    /** @deprecated */\n    loop: number;\n    /** @deprecated */\n    scrollAmount: number;\n    /** @deprecated */\n    scrollDelay: number;\n    /** @deprecated */\n    trueSpeed: boolean;\n    /** @deprecated */\n    vspace: number;\n    /** @deprecated */\n    width: string;\n    /** @deprecated */\n    start(): void;\n    /** @deprecated */\n    stop(): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMarqueeElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMarqueeElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** @deprecated */\ndeclare var HTMLMarqueeElement: {\n    prototype: HTMLMarqueeElement;\n    new(): HTMLMarqueeElement;\n};\n\ninterface HTMLMediaElementEventMap extends HTMLElementEventMap {\n    \"encrypted\": MediaEncryptedEvent;\n    \"waitingforkey\": Event;\n}\n\n/** Adds to HTMLElement the properties and methods needed to support basic media-related capabilities\\xA0that are\\xA0common to audio and video. */\ninterface HTMLMediaElement extends HTMLElement {\n    /** Gets or sets a value that indicates whether to start playing the media automatically. */\n    autoplay: boolean;\n    /** Gets a collection of buffered time ranges. */\n    readonly buffered: TimeRanges;\n    /** Gets or sets a flag that indicates whether the client provides a set of controls for the media (in case the developer does not include controls for the player). */\n    controls: boolean;\n    crossOrigin: string | null;\n    /** Gets the address or URL of the current media resource that is selected by IHTMLMediaElement. */\n    readonly currentSrc: string;\n    /** Gets or sets the current playback position, in seconds. */\n    currentTime: number;\n    defaultMuted: boolean;\n    /** Gets or sets the default playback rate when the user is not using fast forward or reverse for a video or audio resource. */\n    defaultPlaybackRate: number;\n    disableRemotePlayback: boolean;\n    /** Returns the duration in seconds of the current media resource. A NaN value is returned if duration is not available, or Infinity if the media resource is streaming. */\n    readonly duration: number;\n    /** Gets information about whether the playback has ended or not. */\n    readonly ended: boolean;\n    /** Returns an object representing the current error state of the audio or video element. */\n    readonly error: MediaError | null;\n    /** Gets or sets a flag to specify whether playback should restart after it completes. */\n    loop: boolean;\n    /** Available only in secure contexts. */\n    readonly mediaKeys: MediaKeys | null;\n    /** Gets or sets a flag that indicates whether the audio (either audio or the audio track on video media) is muted. */\n    muted: boolean;\n    /** Gets the current network activity for the element. */\n    readonly networkState: number;\n    onencrypted: ((this: HTMLMediaElement, ev: MediaEncryptedEvent) => any) | null;\n    onwaitingforkey: ((this: HTMLMediaElement, ev: Event) => any) | null;\n    /** Gets a flag that specifies whether playback is paused. */\n    readonly paused: boolean;\n    /** Gets or sets the current rate of speed for the media resource to play. This speed is expressed as a multiple of the normal speed of the media resource. */\n    playbackRate: number;\n    /** Gets TimeRanges for the current media resource that has been played. */\n    readonly played: TimeRanges;\n    /** Gets or sets a value indicating what data should be preloaded, if any. */\n    preload: \"none\" | \"metadata\" | \"auto\" | \"\";\n    preservesPitch: boolean;\n    readonly readyState: number;\n    readonly remote: RemotePlayback;\n    /** Returns a TimeRanges object that represents the ranges of the current media resource that can be seeked. */\n    readonly seekable: TimeRanges;\n    /** Gets a flag that indicates whether the client is currently moving to a new playback position in the media resource. */\n    readonly seeking: boolean;\n    /** The address or URL of the a media resource that is to be considered. */\n    src: string;\n    srcObject: MediaProvider | null;\n    readonly textTracks: TextTrackList;\n    /** Gets or sets the volume level for audio portions of the media element. */\n    volume: number;\n    addTextTrack(kind: TextTrackKind, label?: string, language?: string): TextTrack;\n    /** Returns a string that specifies whether the client can play a given media resource type. */\n    canPlayType(type: string): CanPlayTypeResult;\n    fastSeek(time: number): void;\n    /** Resets the audio or video object and loads a new media resource. */\n    load(): void;\n    /** Pauses the current playback and sets paused to TRUE. This can be used to test whether the media is playing or paused. You can also use the pause or play events to tell whether the media is playing or not. */\n    pause(): void;\n    /** Loads and starts playback of a media resource. */\n    play(): Promise<void>;\n    /** Available only in secure contexts. */\n    setMediaKeys(mediaKeys: MediaKeys | null): Promise<void>;\n    readonly NETWORK_EMPTY: 0;\n    readonly NETWORK_IDLE: 1;\n    readonly NETWORK_LOADING: 2;\n    readonly NETWORK_NO_SOURCE: 3;\n    readonly HAVE_NOTHING: 0;\n    readonly HAVE_METADATA: 1;\n    readonly HAVE_CURRENT_DATA: 2;\n    readonly HAVE_FUTURE_DATA: 3;\n    readonly HAVE_ENOUGH_DATA: 4;\n    addEventListener<K extends keyof HTMLMediaElementEventMap>(type: K, listener: (this: HTMLMediaElement, ev: HTMLMediaElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLMediaElementEventMap>(type: K, listener: (this: HTMLMediaElement, ev: HTMLMediaElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLMediaElement: {\n    prototype: HTMLMediaElement;\n    new(): HTMLMediaElement;\n    readonly NETWORK_EMPTY: 0;\n    readonly NETWORK_IDLE: 1;\n    readonly NETWORK_LOADING: 2;\n    readonly NETWORK_NO_SOURCE: 3;\n    readonly HAVE_NOTHING: 0;\n    readonly HAVE_METADATA: 1;\n    readonly HAVE_CURRENT_DATA: 2;\n    readonly HAVE_FUTURE_DATA: 3;\n    readonly HAVE_ENOUGH_DATA: 4;\n};\n\ninterface HTMLMenuElement extends HTMLElement {\n    /** @deprecated */\n    compact: boolean;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMenuElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMenuElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLMenuElement: {\n    prototype: HTMLMenuElement;\n    new(): HTMLMenuElement;\n};\n\n/** Contains descriptive metadata about a document. It\\xA0inherits all of the properties and methods described in the HTMLElement interface. */\ninterface HTMLMetaElement extends HTMLElement {\n    /** Gets or sets meta-information to associate with httpEquiv or name. */\n    content: string;\n    /** Gets or sets information used to bind the value of a content attribute of a meta element to an HTTP response header. */\n    httpEquiv: string;\n    media: string;\n    /** Sets or retrieves the value specified in the content attribute of the meta object. */\n    name: string;\n    /**\n     * Sets or retrieves a scheme to be used in interpreting the value of a property specified for the object.\n     * @deprecated\n     */\n    scheme: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMetaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMetaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLMetaElement: {\n    prototype: HTMLMetaElement;\n    new(): HTMLMetaElement;\n};\n\n/** The HTML <meter> elements expose the HTMLMeterElement interface, which provides special properties and methods (beyond the HTMLElement object interface they also have available to them by inheritance) for manipulating the layout and presentation of <meter> elements. */\ninterface HTMLMeterElement extends HTMLElement {\n    high: number;\n    readonly labels: NodeListOf<HTMLLabelElement>;\n    low: number;\n    max: number;\n    min: number;\n    optimum: number;\n    value: number;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMeterElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLMeterElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLMeterElement: {\n    prototype: HTMLMeterElement;\n    new(): HTMLMeterElement;\n};\n\n/** Provides special properties (beyond the regular methods and properties available through the HTMLElement interface they also have available to them by inheritance) for manipulating modification elements, that is <del> and <ins>. */\ninterface HTMLModElement extends HTMLElement {\n    /** Sets or retrieves reference information about the object. */\n    cite: string;\n    /** Sets or retrieves the date and time of a modification to the object. */\n    dateTime: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLModElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLModElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLModElement: {\n    prototype: HTMLModElement;\n    new(): HTMLModElement;\n};\n\n/** Provides special properties (beyond those defined on the regular HTMLElement interface it also has available to it by inheritance) for manipulating ordered list elements. */\ninterface HTMLOListElement extends HTMLElement {\n    /** @deprecated */\n    compact: boolean;\n    reversed: boolean;\n    /** The starting number. */\n    start: number;\n    type: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLOListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLOListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLOListElement: {\n    prototype: HTMLOListElement;\n    new(): HTMLOListElement;\n};\n\n/** Provides special properties and methods (beyond those on the HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <object> element, representing external resources. */\ninterface HTMLObjectElement extends HTMLElement {\n    /** @deprecated */\n    align: string;\n    /**\n     * Sets or retrieves a character string that can be used to implement your own archive functionality for the object.\n     * @deprecated\n     */\n    archive: string;\n    /** @deprecated */\n    border: string;\n    /**\n     * Sets or retrieves the URL of the file containing the compiled Java class.\n     * @deprecated\n     */\n    code: string;\n    /**\n     * Sets or retrieves the URL of the component.\n     * @deprecated\n     */\n    codeBase: string;\n    /**\n     * Sets or retrieves the Internet media type for the code associated with the object.\n     * @deprecated\n     */\n    codeType: string;\n    /** Retrieves the document object of the page or frame. */\n    readonly contentDocument: Document | null;\n    readonly contentWindow: WindowProxy | null;\n    /** Sets or retrieves the URL that references the data of the object. */\n    data: string;\n    /** @deprecated */\n    declare: boolean;\n    /** Retrieves a reference to the form that the object is embedded in. */\n    readonly form: HTMLFormElement | null;\n    /** Sets or retrieves the height of the object. */\n    height: string;\n    /** @deprecated */\n    hspace: number;\n    /** Sets or retrieves the name of the object. */\n    name: string;\n    /**\n     * Sets or retrieves a message to be displayed while an object is loading.\n     * @deprecated\n     */\n    standby: string;\n    /** Sets or retrieves the MIME type of the object. */\n    type: string;\n    /** Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map. */\n    useMap: string;\n    /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as \"this is a required field\". The result is that the user sees validation messages without actually submitting. */\n    readonly validationMessage: string;\n    /** Returns a  ValidityState object that represents the validity states of an element. */\n    readonly validity: ValidityState;\n    /** @deprecated */\n    vspace: number;\n    /** Sets or retrieves the width of the object. */\n    width: string;\n    /** Returns whether an element will successfully validate based on forms validation rules and constraints. */\n    readonly willValidate: boolean;\n    /** Returns whether a form will validate when it is submitted, without having to submit it. */\n    checkValidity(): boolean;\n    getSVGDocument(): Document | null;\n    reportValidity(): boolean;\n    /**\n     * Sets a custom error message that is displayed when a form is submitted.\n     * @param error Sets a custom error message that is displayed when a form is submitted.\n     */\n    setCustomValidity(error: string): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLObjectElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLObjectElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLObjectElement: {\n    prototype: HTMLObjectElement;\n    new(): HTMLObjectElement;\n};\n\n/** Provides special properties and methods (beyond the regular HTMLElement object interface they also have available to them by inheritance) for manipulating the layout and presentation of <optgroup> elements. */\ninterface HTMLOptGroupElement extends HTMLElement {\n    disabled: boolean;\n    /** Sets or retrieves a value that you can use to implement your own label functionality for the object. */\n    label: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLOptGroupElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLOptGroupElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLOptGroupElement: {\n    prototype: HTMLOptGroupElement;\n    new(): HTMLOptGroupElement;\n};\n\n/** <option> elements and inherits all classes and methods of the HTMLElement interface. */\ninterface HTMLOptionElement extends HTMLElement {\n    /** Sets or retrieves the status of an option. */\n    defaultSelected: boolean;\n    disabled: boolean;\n    /** Retrieves a reference to the form that the object is embedded in. */\n    readonly form: HTMLFormElement | null;\n    /** Sets or retrieves the ordinal position of an option in a list box. */\n    readonly index: number;\n    /** Sets or retrieves a value that you can use to implement your own label functionality for the object. */\n    label: string;\n    /** Sets or retrieves whether the option in the list box is the default item. */\n    selected: boolean;\n    /** Sets or retrieves the text string specified by the option tag. */\n    text: string;\n    /** Sets or retrieves the value which is returned to the server when the form control is submitted. */\n    value: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLOptionElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLOptionElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLOptionElement: {\n    prototype: HTMLOptionElement;\n    new(): HTMLOptionElement;\n};\n\n/** HTMLOptionsCollection is an interface representing a collection of HTML option elements (in document order) and offers methods and properties for traversing the list as well as optionally altering its items. This type is returned solely by the \"options\" property of select. */\ninterface HTMLOptionsCollection extends HTMLCollectionOf<HTMLOptionElement> {\n    /**\n     * Returns the number of elements in the collection.\n     *\n     * When set to a smaller number, truncates the number of option elements in the corresponding container.\n     *\n     * When set to a greater number, adds new blank option elements to that container.\n     */\n    length: number;\n    /**\n     * Returns the index of the first selected item, if any, or \\u22121 if there is no selected item.\n     *\n     * Can be set, to change the selection.\n     */\n    selectedIndex: number;\n    /**\n     * Inserts element before the node given by before.\n     *\n     * The before argument can be a number, in which case element is inserted before the item with that number, or an element from the collection, in which case element is inserted before that element.\n     *\n     * If before is omitted, null, or a number out of range, then element will be added at the end of the list.\n     *\n     * This method will throw a \"HierarchyRequestError\" DOMException if element is an ancestor of the element into which it is to be inserted.\n     */\n    add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number | null): void;\n    /** Removes the item with index index from the collection. */\n    remove(index: number): void;\n}\n\ndeclare var HTMLOptionsCollection: {\n    prototype: HTMLOptionsCollection;\n    new(): HTMLOptionsCollection;\n};\n\ninterface HTMLOrSVGElement {\n    autofocus: boolean;\n    readonly dataset: DOMStringMap;\n    nonce?: string;\n    tabIndex: number;\n    blur(): void;\n    focus(options?: FocusOptions): void;\n}\n\n/** Provides properties and methods (beyond those inherited from HTMLElement) for manipulating the layout and presentation of <output> elements. */\ninterface HTMLOutputElement extends HTMLElement {\n    defaultValue: string;\n    readonly form: HTMLFormElement | null;\n    readonly htmlFor: DOMTokenList;\n    readonly labels: NodeListOf<HTMLLabelElement>;\n    name: string;\n    /** Returns the string \"output\". */\n    readonly type: string;\n    readonly validationMessage: string;\n    readonly validity: ValidityState;\n    /**\n     * Returns the element's current value.\n     *\n     * Can be set, to change the value.\n     */\n    value: string;\n    readonly willValidate: boolean;\n    checkValidity(): boolean;\n    reportValidity(): boolean;\n    setCustomValidity(error: string): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLOutputElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLOutputElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLOutputElement: {\n    prototype: HTMLOutputElement;\n    new(): HTMLOutputElement;\n};\n\n/** Provides special properties (beyond those of the regular HTMLElement object interface it inherits) for manipulating <p> elements. */\ninterface HTMLParagraphElement extends HTMLElement {\n    /**\n     * Sets or retrieves how the object is aligned with adjacent text.\n     * @deprecated\n     */\n    align: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLParagraphElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLParagraphElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLParagraphElement: {\n    prototype: HTMLParagraphElement;\n    new(): HTMLParagraphElement;\n};\n\n/**\n * Provides special properties (beyond those of the regular HTMLElement object interface it inherits) for manipulating <param> elements, representing a pair of a key and a value that acts as a parameter for an <object> element.\n * @deprecated\n */\ninterface HTMLParamElement extends HTMLElement {\n    /**\n     * Sets or retrieves the name of an input parameter for an element.\n     * @deprecated\n     */\n    name: string;\n    /**\n     * Sets or retrieves the content type of the resource designated by the value attribute.\n     * @deprecated\n     */\n    type: string;\n    /**\n     * Sets or retrieves the value of an input parameter for an element.\n     * @deprecated\n     */\n    value: string;\n    /**\n     * Sets or retrieves the data type of the value attribute.\n     * @deprecated\n     */\n    valueType: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLParamElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLParamElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** @deprecated */\ndeclare var HTMLParamElement: {\n    prototype: HTMLParamElement;\n    new(): HTMLParamElement;\n};\n\n/** A <picture> HTML element. It doesn't implement specific properties or methods. */\ninterface HTMLPictureElement extends HTMLElement {\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLPictureElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLPictureElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLPictureElement: {\n    prototype: HTMLPictureElement;\n    new(): HTMLPictureElement;\n};\n\n/** Exposes specific properties and methods (beyond those of the HTMLElement interface it also has available to it by inheritance) for manipulating a block of preformatted text (<pre>). */\ninterface HTMLPreElement extends HTMLElement {\n    /**\n     * Sets or gets a value that you can use to implement your own width functionality for the object.\n     * @deprecated\n     */\n    width: number;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLPreElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLPreElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLPreElement: {\n    prototype: HTMLPreElement;\n    new(): HTMLPreElement;\n};\n\n/** Provides special properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of <progress> elements. */\ninterface HTMLProgressElement extends HTMLElement {\n    readonly labels: NodeListOf<HTMLLabelElement>;\n    /** Defines the maximum, or \"done\" value for a progress element. */\n    max: number;\n    /** Returns the quotient of value/max when the value attribute is set (determinate progress bar), or -1 when the value attribute is missing (indeterminate progress bar). */\n    readonly position: number;\n    /** Sets or gets the current value of a progress element. The value must be a non-negative number between 0 and the max value. */\n    value: number;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLProgressElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLProgressElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLProgressElement: {\n    prototype: HTMLProgressElement;\n    new(): HTMLProgressElement;\n};\n\n/** Provides special properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating quoting elements, like <blockquote> and <q>, but not the <cite> element. */\ninterface HTMLQuoteElement extends HTMLElement {\n    /** Sets or retrieves reference information about the object. */\n    cite: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLQuoteElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLQuoteElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLQuoteElement: {\n    prototype: HTMLQuoteElement;\n    new(): HTMLQuoteElement;\n};\n\n/** HTML <script> elements expose the HTMLScriptElement interface, which provides special properties and methods for manipulating the behavior and execution of <script> elements (beyond the inherited HTMLElement interface). */\ninterface HTMLScriptElement extends HTMLElement {\n    async: boolean;\n    /**\n     * Sets or retrieves the character set used to encode the object.\n     * @deprecated\n     */\n    charset: string;\n    crossOrigin: string | null;\n    /** Sets or retrieves the status of the script. */\n    defer: boolean;\n    /**\n     * Sets or retrieves the event for which the script is written.\n     * @deprecated\n     */\n    event: string;\n    /**\n     * Sets or retrieves the object that is bound to the event script.\n     * @deprecated\n     */\n    htmlFor: string;\n    integrity: string;\n    noModule: boolean;\n    referrerPolicy: string;\n    /** Retrieves the URL to an external file that contains the source code or data. */\n    src: string;\n    /** Retrieves or sets the text of the object as a string. */\n    text: string;\n    /** Sets or retrieves the MIME type for the associated scripting engine. */\n    type: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLScriptElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLScriptElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLScriptElement: {\n    prototype: HTMLScriptElement;\n    new(): HTMLScriptElement;\n    supports(type: string): boolean;\n};\n\n/** A <select> HTML Element. These elements also share all of the properties and methods of other HTML elements via the HTMLElement interface. */\ninterface HTMLSelectElement extends HTMLElement {\n    autocomplete: string;\n    disabled: boolean;\n    /** Retrieves a reference to the form that the object is embedded in. */\n    readonly form: HTMLFormElement | null;\n    readonly labels: NodeListOf<HTMLLabelElement>;\n    /** Sets or retrieves the number of objects in a collection. */\n    length: number;\n    /** Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list. */\n    multiple: boolean;\n    /** Sets or retrieves the name of the object. */\n    name: string;\n    /** Returns an HTMLOptionsCollection of the list of options. */\n    readonly options: HTMLOptionsCollection;\n    /** When present, marks an element that can't be submitted without a value. */\n    required: boolean;\n    /** Sets or retrieves the index of the selected option in a select object. */\n    selectedIndex: number;\n    readonly selectedOptions: HTMLCollectionOf<HTMLOptionElement>;\n    /** Sets or retrieves the number of rows in the list box. */\n    size: number;\n    /** Retrieves the type of select control based on the value of the MULTIPLE attribute. */\n    readonly type: string;\n    /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as \"this is a required field\". The result is that the user sees validation messages without actually submitting. */\n    readonly validationMessage: string;\n    /** Returns a  ValidityState object that represents the validity states of an element. */\n    readonly validity: ValidityState;\n    /** Sets or retrieves the value which is returned to the server when the form control is submitted. */\n    value: string;\n    /** Returns whether an element will successfully validate based on forms validation rules and constraints. */\n    readonly willValidate: boolean;\n    /**\n     * Adds an element to the areas, controlRange, or options collection.\n     * @param element Variant of type Number that specifies the index position in the collection where the element is placed. If no value is given, the method places the element at the end of the collection.\n     * @param before Variant of type Object that specifies an element to insert before, or null to append the object to the collection.\n     */\n    add(element: HTMLOptionElement | HTMLOptGroupElement, before?: HTMLElement | number | null): void;\n    /** Returns whether a form will validate when it is submitted, without having to submit it. */\n    checkValidity(): boolean;\n    /**\n     * Retrieves a select object or an object from an options collection.\n     * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is an integer, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.\n     * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.\n     */\n    item(index: number): HTMLOptionElement | null;\n    /**\n     * Retrieves a select object or an object from an options collection.\n     * @param namedItem A String that specifies the name or id property of the object to retrieve. A collection is returned if more than one match is made.\n     */\n    namedItem(name: string): HTMLOptionElement | null;\n    /**\n     * Removes an element from the collection.\n     * @param index Number that specifies the zero-based index of the element to remove from the collection.\n     */\n    remove(): void;\n    remove(index: number): void;\n    reportValidity(): boolean;\n    /**\n     * Sets a custom error message that is displayed when a form is submitted.\n     * @param error Sets a custom error message that is displayed when a form is submitted.\n     */\n    setCustomValidity(error: string): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLSelectElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLSelectElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n    [name: number]: HTMLOptionElement | HTMLOptGroupElement;\n}\n\ndeclare var HTMLSelectElement: {\n    prototype: HTMLSelectElement;\n    new(): HTMLSelectElement;\n};\n\ninterface HTMLSlotElement extends HTMLElement {\n    name: string;\n    assign(...nodes: (Element | Text)[]): void;\n    assignedElements(options?: AssignedNodesOptions): Element[];\n    assignedNodes(options?: AssignedNodesOptions): Node[];\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLSlotElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLSlotElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLSlotElement: {\n    prototype: HTMLSlotElement;\n    new(): HTMLSlotElement;\n};\n\n/** Provides special properties (beyond the regular HTMLElement object interface it also has available to it by inheritance) for manipulating <source> elements. */\ninterface HTMLSourceElement extends HTMLElement {\n    height: number;\n    /** Gets or sets the intended media type of the media source. */\n    media: string;\n    sizes: string;\n    /** The address or URL of the a media resource that is to be considered. */\n    src: string;\n    srcset: string;\n    /** Gets or sets the MIME type of a media resource. */\n    type: string;\n    width: number;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLSourceElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLSourceElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLSourceElement: {\n    prototype: HTMLSourceElement;\n    new(): HTMLSourceElement;\n};\n\n/** A <span> element and derives from the HTMLElement interface, but without implementing any additional properties or methods. */\ninterface HTMLSpanElement extends HTMLElement {\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLSpanElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLSpanElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLSpanElement: {\n    prototype: HTMLSpanElement;\n    new(): HTMLSpanElement;\n};\n\n/** A <style> element. It inherits properties and methods from its parent, HTMLElement, and from LinkStyle. */\ninterface HTMLStyleElement extends HTMLElement, LinkStyle {\n    /** Enables or disables the style sheet. */\n    disabled: boolean;\n    /** Sets or retrieves the media type. */\n    media: string;\n    /**\n     * Retrieves the CSS language in which the style sheet is written.\n     * @deprecated\n     */\n    type: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLStyleElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLStyleElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLStyleElement: {\n    prototype: HTMLStyleElement;\n    new(): HTMLStyleElement;\n};\n\n/** Special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating table caption elements. */\ninterface HTMLTableCaptionElement extends HTMLElement {\n    /**\n     * Sets or retrieves the alignment of the caption or legend.\n     * @deprecated\n     */\n    align: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableCaptionElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableCaptionElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTableCaptionElement: {\n    prototype: HTMLTableCaptionElement;\n    new(): HTMLTableCaptionElement;\n};\n\n/** Provides special properties and methods (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of table cells, either header or data cells, in an HTML document. */\ninterface HTMLTableCellElement extends HTMLElement {\n    /** Sets or retrieves abbreviated text for the object. */\n    abbr: string;\n    /**\n     * Sets or retrieves how the object is aligned with adjacent text.\n     * @deprecated\n     */\n    align: string;\n    /**\n     * Sets or retrieves a comma-delimited list of conceptual categories associated with the object.\n     * @deprecated\n     */\n    axis: string;\n    /** @deprecated */\n    bgColor: string;\n    /** Retrieves the position of the object in the cells collection of a row. */\n    readonly cellIndex: number;\n    /** @deprecated */\n    ch: string;\n    /** @deprecated */\n    chOff: string;\n    /** Sets or retrieves the number columns in the table that the object should span. */\n    colSpan: number;\n    /** Sets or retrieves a list of header cells that provide information for the object. */\n    headers: string;\n    /**\n     * Sets or retrieves the height of the object.\n     * @deprecated\n     */\n    height: string;\n    /**\n     * Sets or retrieves whether the browser automatically performs wordwrap.\n     * @deprecated\n     */\n    noWrap: boolean;\n    /** Sets or retrieves how many rows in a table the cell should span. */\n    rowSpan: number;\n    /** Sets or retrieves the group of cells in a table to which the object's information applies. */\n    scope: string;\n    /** @deprecated */\n    vAlign: string;\n    /**\n     * Sets or retrieves the width of the object.\n     * @deprecated\n     */\n    width: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTableCellElement: {\n    prototype: HTMLTableCellElement;\n    new(): HTMLTableCellElement;\n};\n\n/** Provides special properties (beyond the HTMLElement interface it also has available to it inheritance) for manipulating single or grouped table column elements. */\ninterface HTMLTableColElement extends HTMLElement {\n    /**\n     * Sets or retrieves the alignment of the object relative to the display or table.\n     * @deprecated\n     */\n    align: string;\n    /** @deprecated */\n    ch: string;\n    /** @deprecated */\n    chOff: string;\n    /** Sets or retrieves the number of columns in the group. */\n    span: number;\n    /** @deprecated */\n    vAlign: string;\n    /**\n     * Sets or retrieves the width of the object.\n     * @deprecated\n     */\n    width: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableColElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableColElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTableColElement: {\n    prototype: HTMLTableColElement;\n    new(): HTMLTableColElement;\n};\n\n/** @deprecated prefer HTMLTableCellElement */\ninterface HTMLTableDataCellElement extends HTMLTableCellElement {\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableDataCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableDataCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** Provides special properties and methods (beyond the regular HTMLElement object interface it also has available to it by inheritance) for manipulating the layout and presentation of tables in an HTML document. */\ninterface HTMLTableElement extends HTMLElement {\n    /**\n     * Sets or retrieves a value that indicates the table alignment.\n     * @deprecated\n     */\n    align: string;\n    /** @deprecated */\n    bgColor: string;\n    /**\n     * Sets or retrieves the width of the border to draw around the object.\n     * @deprecated\n     */\n    border: string;\n    /** Retrieves the caption object of a table. */\n    caption: HTMLTableCaptionElement | null;\n    /**\n     * Sets or retrieves the amount of space between the border of the cell and the content of the cell.\n     * @deprecated\n     */\n    cellPadding: string;\n    /**\n     * Sets or retrieves the amount of space between cells in a table.\n     * @deprecated\n     */\n    cellSpacing: string;\n    /**\n     * Sets or retrieves the way the border frame around the table is displayed.\n     * @deprecated\n     */\n    frame: string;\n    /** Sets or retrieves the number of horizontal rows contained in the object. */\n    readonly rows: HTMLCollectionOf<HTMLTableRowElement>;\n    /**\n     * Sets or retrieves which dividing lines (inner borders) are displayed.\n     * @deprecated\n     */\n    rules: string;\n    /**\n     * Sets or retrieves a description and/or structure of the object.\n     * @deprecated\n     */\n    summary: string;\n    /** Retrieves a collection of all tBody objects in the table. Objects in this collection are in source order. */\n    readonly tBodies: HTMLCollectionOf<HTMLTableSectionElement>;\n    /** Retrieves the tFoot object of the table. */\n    tFoot: HTMLTableSectionElement | null;\n    /** Retrieves the tHead object of the table. */\n    tHead: HTMLTableSectionElement | null;\n    /**\n     * Sets or retrieves the width of the object.\n     * @deprecated\n     */\n    width: string;\n    /** Creates an empty caption element in the table. */\n    createCaption(): HTMLTableCaptionElement;\n    /** Creates an empty tBody element in the table. */\n    createTBody(): HTMLTableSectionElement;\n    /** Creates an empty tFoot element in the table. */\n    createTFoot(): HTMLTableSectionElement;\n    /** Returns the tHead element object if successful, or null otherwise. */\n    createTHead(): HTMLTableSectionElement;\n    /** Deletes the caption element and its contents from the table. */\n    deleteCaption(): void;\n    /**\n     * Removes the specified row (tr) from the element and from the rows collection.\n     * @param index Number that specifies the zero-based position in the rows collection of the row to remove.\n     */\n    deleteRow(index: number): void;\n    /** Deletes the tFoot element and its contents from the table. */\n    deleteTFoot(): void;\n    /** Deletes the tHead element and its contents from the table. */\n    deleteTHead(): void;\n    /**\n     * Creates a new row (tr) in the table, and adds the row to the rows collection.\n     * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.\n     */\n    insertRow(index?: number): HTMLTableRowElement;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTableElement: {\n    prototype: HTMLTableElement;\n    new(): HTMLTableElement;\n};\n\n/** @deprecated prefer HTMLTableCellElement */\ninterface HTMLTableHeaderCellElement extends HTMLTableCellElement {\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableHeaderCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableHeaderCellElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** Provides special properties and methods (beyond the HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of rows in an HTML table. */\ninterface HTMLTableRowElement extends HTMLElement {\n    /**\n     * Sets or retrieves how the object is aligned with adjacent text.\n     * @deprecated\n     */\n    align: string;\n    /** @deprecated */\n    bgColor: string;\n    /** Retrieves a collection of all cells in the table row. */\n    readonly cells: HTMLCollectionOf<HTMLTableCellElement>;\n    /** @deprecated */\n    ch: string;\n    /** @deprecated */\n    chOff: string;\n    /** Retrieves the position of the object in the rows collection for the table. */\n    readonly rowIndex: number;\n    /** Retrieves the position of the object in the collection. */\n    readonly sectionRowIndex: number;\n    /** @deprecated */\n    vAlign: string;\n    /**\n     * Removes the specified cell from the table row, as well as from the cells collection.\n     * @param index Number that specifies the zero-based position of the cell to remove from the table row. If no value is provided, the last cell in the cells collection is deleted.\n     */\n    deleteCell(index: number): void;\n    /**\n     * Creates a new cell in the table row, and adds the cell to the cells collection.\n     * @param index Number that specifies where to insert the cell in the tr. The default value is -1, which appends the new cell to the end of the cells collection.\n     */\n    insertCell(index?: number): HTMLTableCellElement;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableRowElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableRowElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTableRowElement: {\n    prototype: HTMLTableRowElement;\n    new(): HTMLTableRowElement;\n};\n\n/** Provides special properties and methods (beyond the HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of sections, that is headers, footers and bodies, in an HTML table. */\ninterface HTMLTableSectionElement extends HTMLElement {\n    /**\n     * Sets or retrieves a value that indicates the table alignment.\n     * @deprecated\n     */\n    align: string;\n    /** @deprecated */\n    ch: string;\n    /** @deprecated */\n    chOff: string;\n    /** Sets or retrieves the number of horizontal rows contained in the object. */\n    readonly rows: HTMLCollectionOf<HTMLTableRowElement>;\n    /** @deprecated */\n    vAlign: string;\n    /**\n     * Removes the specified row (tr) from the element and from the rows collection.\n     * @param index Number that specifies the zero-based position in the rows collection of the row to remove.\n     */\n    deleteRow(index: number): void;\n    /**\n     * Creates a new row (tr) in the table, and adds the row to the rows collection.\n     * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.\n     */\n    insertRow(index?: number): HTMLTableRowElement;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableSectionElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTableSectionElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTableSectionElement: {\n    prototype: HTMLTableSectionElement;\n    new(): HTMLTableSectionElement;\n};\n\n/** Enables access to the contents of an HTML <template> element. */\ninterface HTMLTemplateElement extends HTMLElement {\n    /** Returns the template contents (a DocumentFragment). */\n    readonly content: DocumentFragment;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTemplateElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTemplateElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTemplateElement: {\n    prototype: HTMLTemplateElement;\n    new(): HTMLTemplateElement;\n};\n\n/** Provides special properties and methods for manipulating the layout and presentation of <textarea> elements. */\ninterface HTMLTextAreaElement extends HTMLElement {\n    autocomplete: string;\n    /** Sets or retrieves the width of the object. */\n    cols: number;\n    /** Sets or retrieves the initial contents of the object. */\n    defaultValue: string;\n    dirName: string;\n    disabled: boolean;\n    /** Retrieves a reference to the form that the object is embedded in. */\n    readonly form: HTMLFormElement | null;\n    readonly labels: NodeListOf<HTMLLabelElement>;\n    /** Sets or retrieves the maximum number of characters that the user can enter in a text control. */\n    maxLength: number;\n    minLength: number;\n    /** Sets or retrieves the name of the object. */\n    name: string;\n    /** Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field. */\n    placeholder: string;\n    /** Sets or retrieves the value indicated whether the content of the object is read-only. */\n    readOnly: boolean;\n    /** When present, marks an element that can't be submitted without a value. */\n    required: boolean;\n    /** Sets or retrieves the number of horizontal rows contained in the object. */\n    rows: number;\n    selectionDirection: \"forward\" | \"backward\" | \"none\";\n    /** Gets or sets the end position or offset of a text selection. */\n    selectionEnd: number;\n    /** Gets or sets the starting position or offset of a text selection. */\n    selectionStart: number;\n    readonly textLength: number;\n    /** Retrieves the type of control. */\n    readonly type: string;\n    /** Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as \"this is a required field\". The result is that the user sees validation messages without actually submitting. */\n    readonly validationMessage: string;\n    /** Returns a  ValidityState object that represents the validity states of an element. */\n    readonly validity: ValidityState;\n    /** Retrieves or sets the text in the entry field of the textArea element. */\n    value: string;\n    /** Returns whether an element will successfully validate based on forms validation rules and constraints. */\n    readonly willValidate: boolean;\n    /** Sets or retrieves how to handle wordwrapping in the object. */\n    wrap: string;\n    /** Returns whether a form will validate when it is submitted, without having to submit it. */\n    checkValidity(): boolean;\n    reportValidity(): boolean;\n    /** Highlights the input area of a form element. */\n    select(): void;\n    /**\n     * Sets a custom error message that is displayed when a form is submitted.\n     * @param error Sets a custom error message that is displayed when a form is submitted.\n     */\n    setCustomValidity(error: string): void;\n    setRangeText(replacement: string): void;\n    setRangeText(replacement: string, start: number, end: number, selectionMode?: SelectionMode): void;\n    /**\n     * Sets the start and end positions of a selection in a text field.\n     * @param start The offset into the text field for the start of the selection.\n     * @param end The offset into the text field for the end of the selection.\n     * @param direction The direction in which the selection is performed.\n     */\n    setSelectionRange(start: number | null, end: number | null, direction?: \"forward\" | \"backward\" | \"none\"): void;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTextAreaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTextAreaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTextAreaElement: {\n    prototype: HTMLTextAreaElement;\n    new(): HTMLTextAreaElement;\n};\n\n/** Provides special properties (beyond the regular HTMLElement interface it also has available to it by inheritance) for manipulating <time> elements. */\ninterface HTMLTimeElement extends HTMLElement {\n    dateTime: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTimeElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTimeElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTimeElement: {\n    prototype: HTMLTimeElement;\n    new(): HTMLTimeElement;\n};\n\n/** Contains the title for a document. This element inherits all of the properties and methods of the HTMLElement interface. */\ninterface HTMLTitleElement extends HTMLElement {\n    /** Retrieves or sets the text of the object as a string. */\n    text: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTitleElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTitleElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTitleElement: {\n    prototype: HTMLTitleElement;\n    new(): HTMLTitleElement;\n};\n\n/** The HTMLTrackElement */\ninterface HTMLTrackElement extends HTMLElement {\n    default: boolean;\n    kind: string;\n    label: string;\n    readonly readyState: number;\n    src: string;\n    srclang: string;\n    /** Returns the TextTrack object corresponding to the text track of the track element. */\n    readonly track: TextTrack;\n    readonly NONE: 0;\n    readonly LOADING: 1;\n    readonly LOADED: 2;\n    readonly ERROR: 3;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTrackElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLTrackElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLTrackElement: {\n    prototype: HTMLTrackElement;\n    new(): HTMLTrackElement;\n    readonly NONE: 0;\n    readonly LOADING: 1;\n    readonly LOADED: 2;\n    readonly ERROR: 3;\n};\n\n/** Provides special properties (beyond those defined on the regular HTMLElement interface it also has available to it by inheritance) for manipulating unordered list elements. */\ninterface HTMLUListElement extends HTMLElement {\n    /** @deprecated */\n    compact: boolean;\n    /** @deprecated */\n    type: string;\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLUListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLUListElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLUListElement: {\n    prototype: HTMLUListElement;\n    new(): HTMLUListElement;\n};\n\n/** An invalid HTML element and derives from the HTMLElement interface, but without implementing any additional properties or methods. */\ninterface HTMLUnknownElement extends HTMLElement {\n    addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLUnknownElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLUnknownElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLUnknownElement: {\n    prototype: HTMLUnknownElement;\n    new(): HTMLUnknownElement;\n};\n\ninterface HTMLVideoElementEventMap extends HTMLMediaElementEventMap {\n    \"enterpictureinpicture\": Event;\n    \"leavepictureinpicture\": Event;\n}\n\n/** Provides special properties and methods for manipulating video objects. It also inherits properties and methods of HTMLMediaElement and HTMLElement. */\ninterface HTMLVideoElement extends HTMLMediaElement {\n    disablePictureInPicture: boolean;\n    /** Gets or sets the height of the video element. */\n    height: number;\n    onenterpictureinpicture: ((this: HTMLVideoElement, ev: Event) => any) | null;\n    onleavepictureinpicture: ((this: HTMLVideoElement, ev: Event) => any) | null;\n    /** Gets or sets the playsinline of the video element. for example, On iPhone, video elements will now be allowed to play inline, and will not automatically enter fullscreen mode when playback begins. */\n    playsInline: boolean;\n    /** Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available. */\n    poster: string;\n    /** Gets the intrinsic height of a video in CSS pixels, or zero if the dimensions are not known. */\n    readonly videoHeight: number;\n    /** Gets the intrinsic width of a video in CSS pixels, or zero if the dimensions are not known. */\n    readonly videoWidth: number;\n    /** Gets or sets the width of the video element. */\n    width: number;\n    cancelVideoFrameCallback(handle: number): void;\n    getVideoPlaybackQuality(): VideoPlaybackQuality;\n    requestPictureInPicture(): Promise<PictureInPictureWindow>;\n    requestVideoFrameCallback(callback: VideoFrameRequestCallback): number;\n    addEventListener<K extends keyof HTMLVideoElementEventMap>(type: K, listener: (this: HTMLVideoElement, ev: HTMLVideoElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof HTMLVideoElementEventMap>(type: K, listener: (this: HTMLVideoElement, ev: HTMLVideoElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLVideoElement: {\n    prototype: HTMLVideoElement;\n    new(): HTMLVideoElement;\n};\n\n/** Events that fire when the fragment identifier of the URL has changed. */\ninterface HashChangeEvent extends Event {\n    /** Returns the URL of the session history entry that is now current. */\n    readonly newURL: string;\n    /** Returns the URL of the session history entry that was previously current. */\n    readonly oldURL: string;\n}\n\ndeclare var HashChangeEvent: {\n    prototype: HashChangeEvent;\n    new(type: string, eventInitDict?: HashChangeEventInit): HashChangeEvent;\n};\n\n/** This Fetch API interface allows you to perform various actions on HTTP request and response headers. These actions include retrieving, setting, adding to, and removing. A Headers object has an associated header list, which is initially empty and consists\\xA0of zero or more name and value pairs. \\xA0You can add to this using methods like append() (see Examples.)\\xA0In all methods of this interface, header names are matched by case-insensitive byte sequence. */\ninterface Headers {\n    append(name: string, value: string): void;\n    delete(name: string): void;\n    get(name: string): string | null;\n    has(name: string): boolean;\n    set(name: string, value: string): void;\n    forEach(callbackfn: (value: string, key: string, parent: Headers) => void, thisArg?: any): void;\n}\n\ndeclare var Headers: {\n    prototype: Headers;\n    new(init?: HeadersInit): Headers;\n};\n\n/** Allows\\xA0manipulation of\\xA0the browser session history, that is the pages visited in the tab or frame that the current page is loaded in. */\ninterface History {\n    readonly length: number;\n    scrollRestoration: ScrollRestoration;\n    readonly state: any;\n    back(): void;\n    forward(): void;\n    go(delta?: number): void;\n    pushState(data: any, unused: string, url?: string | URL | null): void;\n    replaceState(data: any, unused: string, url?: string | URL | null): void;\n}\n\ndeclare var History: {\n    prototype: History;\n    new(): History;\n};\n\n/** This IndexedDB API interface represents a cursor for traversing or iterating over multiple records in a database. */\ninterface IDBCursor {\n    /** Returns the direction (\"next\", \"nextunique\", \"prev\" or \"prevunique\") of the cursor. */\n    readonly direction: IDBCursorDirection;\n    /** Returns the key of the cursor. Throws a \"InvalidStateError\" DOMException if the cursor is advancing or is finished. */\n    readonly key: IDBValidKey;\n    /** Returns the effective key of the cursor. Throws a \"InvalidStateError\" DOMException if the cursor is advancing or is finished. */\n    readonly primaryKey: IDBValidKey;\n    readonly request: IDBRequest;\n    /** Returns the IDBObjectStore or IDBIndex the cursor was opened from. */\n    readonly source: IDBObjectStore | IDBIndex;\n    /** Advances the cursor through the next count records in range. */\n    advance(count: number): void;\n    /** Advances the cursor to the next record in range. */\n    continue(key?: IDBValidKey): void;\n    /** Advances the cursor to the next record in range matching or after key and primaryKey. Throws an \"InvalidAccessError\" DOMException if the source is not an index. */\n    continuePrimaryKey(key: IDBValidKey, primaryKey: IDBValidKey): void;\n    /**\n     * Delete the record pointed at by the cursor with a new value.\n     *\n     * If successful, request's result will be undefined.\n     */\n    delete(): IDBRequest<undefined>;\n    /**\n     * Updated the record pointed at by the cursor with a new value.\n     *\n     * Throws a \"DataError\" DOMException if the effective object store uses in-line keys and the key would have changed.\n     *\n     * If successful, request's result will be the record's key.\n     */\n    update(value: any): IDBRequest<IDBValidKey>;\n}\n\ndeclare var IDBCursor: {\n    prototype: IDBCursor;\n    new(): IDBCursor;\n};\n\n/** This IndexedDB API interface represents a cursor for traversing or iterating over multiple records in a database. It is the same as the IDBCursor, except that it includes the value property. */\ninterface IDBCursorWithValue extends IDBCursor {\n    /** Returns the cursor's current value. */\n    readonly value: any;\n}\n\ndeclare var IDBCursorWithValue: {\n    prototype: IDBCursorWithValue;\n    new(): IDBCursorWithValue;\n};\n\ninterface IDBDatabaseEventMap {\n    \"abort\": Event;\n    \"close\": Event;\n    \"error\": Event;\n    \"versionchange\": IDBVersionChangeEvent;\n}\n\n/** This IndexedDB API interface provides a connection to a database; you can use an IDBDatabase object to open a transaction on your database then create, manipulate, and delete objects (data) in that database. The interface provides the only way to get and manage versions of the database. */\ninterface IDBDatabase extends EventTarget {\n    /** Returns the name of the database. */\n    readonly name: string;\n    /** Returns a list of the names of object stores in the database. */\n    readonly objectStoreNames: DOMStringList;\n    onabort: ((this: IDBDatabase, ev: Event) => any) | null;\n    onclose: ((this: IDBDatabase, ev: Event) => any) | null;\n    onerror: ((this: IDBDatabase, ev: Event) => any) | null;\n    onversionchange: ((this: IDBDatabase, ev: IDBVersionChangeEvent) => any) | null;\n    /** Returns the version of the database. */\n    readonly version: number;\n    /** Closes the connection once all running transactions have finished. */\n    close(): void;\n    /**\n     * Creates a new object store with the given name and options and returns a new IDBObjectStore.\n     *\n     * Throws a \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    createObjectStore(name: string, options?: IDBObjectStoreParameters): IDBObjectStore;\n    /**\n     * Deletes the object store with the given name.\n     *\n     * Throws a \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    deleteObjectStore(name: string): void;\n    /** Returns a new transaction with the given mode (\"readonly\" or \"readwrite\") and scope which can be a single object store name or an array of names. */\n    transaction(storeNames: string | string[], mode?: IDBTransactionMode, options?: IDBTransactionOptions): IDBTransaction;\n    addEventListener<K extends keyof IDBDatabaseEventMap>(type: K, listener: (this: IDBDatabase, ev: IDBDatabaseEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof IDBDatabaseEventMap>(type: K, listener: (this: IDBDatabase, ev: IDBDatabaseEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var IDBDatabase: {\n    prototype: IDBDatabase;\n    new(): IDBDatabase;\n};\n\n/** In the following code snippet, we make a request to open a database, and include handlers for the success and error cases. For a full working example, see our To-do Notifications app (view example live.) */\ninterface IDBFactory {\n    /**\n     * Compares two values as keys. Returns -1 if key1 precedes key2, 1 if key2 precedes key1, and 0 if the keys are equal.\n     *\n     * Throws a \"DataError\" DOMException if either input is not a valid key.\n     */\n    cmp(first: any, second: any): number;\n    databases(): Promise<IDBDatabaseInfo[]>;\n    /** Attempts to delete the named database. If the database already exists and there are open connections that don't close in response to a versionchange event, the request will be blocked until all they close. If the request is successful request's result will be null. */\n    deleteDatabase(name: string): IDBOpenDBRequest;\n    /** Attempts to open a connection to the named database with the current version, or 1 if it does not already exist. If the request is successful request's result will be the connection. */\n    open(name: string, version?: number): IDBOpenDBRequest;\n}\n\ndeclare var IDBFactory: {\n    prototype: IDBFactory;\n    new(): IDBFactory;\n};\n\n/** IDBIndex interface of the IndexedDB API provides asynchronous access to an index in a database. An index is a kind of object store for looking up records in another object store, called the referenced object store. You use this interface to retrieve data. */\ninterface IDBIndex {\n    readonly keyPath: string | string[];\n    readonly multiEntry: boolean;\n    /** Returns the name of the index. */\n    name: string;\n    /** Returns the IDBObjectStore the index belongs to. */\n    readonly objectStore: IDBObjectStore;\n    readonly unique: boolean;\n    /**\n     * Retrieves the number of records matching the given key or key range in query.\n     *\n     * If successful, request's result will be the count.\n     */\n    count(query?: IDBValidKey | IDBKeyRange): IDBRequest<number>;\n    /**\n     * Retrieves the value of the first record matching the given key or key range in query.\n     *\n     * If successful, request's result will be the value, or undefined if there was no matching record.\n     */\n    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any>;\n    /**\n     * Retrieves the values of the records matching the given key or key range in query (up to count if given).\n     *\n     * If successful, request's result will be an Array of the values.\n     */\n    getAll(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest<any[]>;\n    /**\n     * Retrieves the keys of records matching the given key or key range in query (up to count if given).\n     *\n     * If successful, request's result will be an Array of the keys.\n     */\n    getAllKeys(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest<IDBValidKey[]>;\n    /**\n     * Retrieves the key of the first record matching the given key or key range in query.\n     *\n     * If successful, request's result will be the key, or undefined if there was no matching record.\n     */\n    getKey(query: IDBValidKey | IDBKeyRange): IDBRequest<IDBValidKey | undefined>;\n    /**\n     * Opens a cursor over the records matching query, ordered by direction. If query is null, all records in index are matched.\n     *\n     * If successful, request's result will be an IDBCursorWithValue, or null if there were no matching records.\n     */\n    openCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest<IDBCursorWithValue | null>;\n    /**\n     * Opens a cursor with key only flag set over the records matching query, ordered by direction. If query is null, all records in index are matched.\n     *\n     * If successful, request's result will be an IDBCursor, or null if there were no matching records.\n     */\n    openKeyCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest<IDBCursor | null>;\n}\n\ndeclare var IDBIndex: {\n    prototype: IDBIndex;\n    new(): IDBIndex;\n};\n\n/** A key range can be a single value or a range with upper and lower bounds or endpoints. If the key range has both upper and lower bounds, then it is bounded; if it has no bounds, it is unbounded. A bounded key range can either be open (the endpoints are excluded) or closed (the endpoints are included). To retrieve all keys within a certain range, you can use the following code constructs: */\ninterface IDBKeyRange {\n    /** Returns lower bound, or undefined if none. */\n    readonly lower: any;\n    /** Returns true if the lower open flag is set, and false otherwise. */\n    readonly lowerOpen: boolean;\n    /** Returns upper bound, or undefined if none. */\n    readonly upper: any;\n    /** Returns true if the upper open flag is set, and false otherwise. */\n    readonly upperOpen: boolean;\n    /** Returns true if key is included in the range, and false otherwise. */\n    includes(key: any): boolean;\n}\n\ndeclare var IDBKeyRange: {\n    prototype: IDBKeyRange;\n    new(): IDBKeyRange;\n    /** Returns a new IDBKeyRange spanning from lower to upper. If lowerOpen is true, lower is not included in the range. If upperOpen is true, upper is not included in the range. */\n    bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange;\n    /** Returns a new IDBKeyRange starting at key with no upper bound. If open is true, key is not included in the range. */\n    lowerBound(lower: any, open?: boolean): IDBKeyRange;\n    /** Returns a new IDBKeyRange spanning only key. */\n    only(value: any): IDBKeyRange;\n    /** Returns a new IDBKeyRange with no lower bound and ending at key. If open is true, key is not included in the range. */\n    upperBound(upper: any, open?: boolean): IDBKeyRange;\n};\n\n/** This example shows a variety of different uses of object stores, from updating the data structure with IDBObjectStore.createIndex\\xA0inside an onupgradeneeded function, to adding a new item to our object store with IDBObjectStore.add. For a full working example, see our\\xA0To-do Notifications\\xA0app (view example live.) */\ninterface IDBObjectStore {\n    /** Returns true if the store has a key generator, and false otherwise. */\n    readonly autoIncrement: boolean;\n    /** Returns a list of the names of indexes in the store. */\n    readonly indexNames: DOMStringList;\n    /** Returns the key path of the store, or null if none. */\n    readonly keyPath: string | string[];\n    /** Returns the name of the store. */\n    name: string;\n    /** Returns the associated transaction. */\n    readonly transaction: IDBTransaction;\n    /**\n     * Adds or updates a record in store with the given value and key.\n     *\n     * If the store uses in-line keys and key is specified a \"DataError\" DOMException will be thrown.\n     *\n     * If put() is used, any existing record with the key will be replaced. If add() is used, and if a record with the key already exists the request will fail, with request's error set to a \"ConstraintError\" DOMException.\n     *\n     * If successful, request's result will be the record's key.\n     */\n    add(value: any, key?: IDBValidKey): IDBRequest<IDBValidKey>;\n    /**\n     * Deletes all records in store.\n     *\n     * If successful, request's result will be undefined.\n     */\n    clear(): IDBRequest<undefined>;\n    /**\n     * Retrieves the number of records matching the given key or key range in query.\n     *\n     * If successful, request's result will be the count.\n     */\n    count(query?: IDBValidKey | IDBKeyRange): IDBRequest<number>;\n    /**\n     * Creates a new index in store with the given name, keyPath and options and returns a new IDBIndex. If the keyPath and options define constraints that cannot be satisfied with the data already in store the upgrade transaction will abort with a \"ConstraintError\" DOMException.\n     *\n     * Throws an \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    createIndex(name: string, keyPath: string | string[], options?: IDBIndexParameters): IDBIndex;\n    /**\n     * Deletes records in store with the given key or in the given key range in query.\n     *\n     * If successful, request's result will be undefined.\n     */\n    delete(query: IDBValidKey | IDBKeyRange): IDBRequest<undefined>;\n    /**\n     * Deletes the index in store with the given name.\n     *\n     * Throws an \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    deleteIndex(name: string): void;\n    /**\n     * Retrieves the value of the first record matching the given key or key range in query.\n     *\n     * If successful, request's result will be the value, or undefined if there was no matching record.\n     */\n    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any>;\n    /**\n     * Retrieves the values of the records matching the given key or key range in query (up to count if given).\n     *\n     * If successful, request's result will be an Array of the values.\n     */\n    getAll(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest<any[]>;\n    /**\n     * Retrieves the keys of records matching the given key or key range in query (up to count if given).\n     *\n     * If successful, request's result will be an Array of the keys.\n     */\n    getAllKeys(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest<IDBValidKey[]>;\n    /**\n     * Retrieves the key of the first record matching the given key or key range in query.\n     *\n     * If successful, request's result will be the key, or undefined if there was no matching record.\n     */\n    getKey(query: IDBValidKey | IDBKeyRange): IDBRequest<IDBValidKey | undefined>;\n    index(name: string): IDBIndex;\n    /**\n     * Opens a cursor over the records matching query, ordered by direction. If query is null, all records in store are matched.\n     *\n     * If successful, request's result will be an IDBCursorWithValue pointing at the first matching record, or null if there were no matching records.\n     */\n    openCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest<IDBCursorWithValue | null>;\n    /**\n     * Opens a cursor with key only flag set over the records matching query, ordered by direction. If query is null, all records in store are matched.\n     *\n     * If successful, request's result will be an IDBCursor pointing at the first matching record, or null if there were no matching records.\n     */\n    openKeyCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest<IDBCursor | null>;\n    /**\n     * Adds or updates a record in store with the given value and key.\n     *\n     * If the store uses in-line keys and key is specified a \"DataError\" DOMException will be thrown.\n     *\n     * If put() is used, any existing record with the key will be replaced. If add() is used, and if a record with the key already exists the request will fail, with request's error set to a \"ConstraintError\" DOMException.\n     *\n     * If successful, request's result will be the record's key.\n     */\n    put(value: any, key?: IDBValidKey): IDBRequest<IDBValidKey>;\n}\n\ndeclare var IDBObjectStore: {\n    prototype: IDBObjectStore;\n    new(): IDBObjectStore;\n};\n\ninterface IDBOpenDBRequestEventMap extends IDBRequestEventMap {\n    \"blocked\": IDBVersionChangeEvent;\n    \"upgradeneeded\": IDBVersionChangeEvent;\n}\n\n/** Also inherits methods from its parents IDBRequest and EventTarget. */\ninterface IDBOpenDBRequest extends IDBRequest<IDBDatabase> {\n    onblocked: ((this: IDBOpenDBRequest, ev: IDBVersionChangeEvent) => any) | null;\n    onupgradeneeded: ((this: IDBOpenDBRequest, ev: IDBVersionChangeEvent) => any) | null;\n    addEventListener<K extends keyof IDBOpenDBRequestEventMap>(type: K, listener: (this: IDBOpenDBRequest, ev: IDBOpenDBRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof IDBOpenDBRequestEventMap>(type: K, listener: (this: IDBOpenDBRequest, ev: IDBOpenDBRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var IDBOpenDBRequest: {\n    prototype: IDBOpenDBRequest;\n    new(): IDBOpenDBRequest;\n};\n\ninterface IDBRequestEventMap {\n    \"error\": Event;\n    \"success\": Event;\n}\n\n/** The request object does not initially contain any information about the result of the operation, but once information becomes available, an event is fired on the request, and the information becomes available through the properties of the IDBRequest instance. */\ninterface IDBRequest<T = any> extends EventTarget {\n    /** When a request is completed, returns the error (a DOMException), or null if the request succeeded. Throws a \"InvalidStateError\" DOMException if the request is still pending. */\n    readonly error: DOMException | null;\n    onerror: ((this: IDBRequest<T>, ev: Event) => any) | null;\n    onsuccess: ((this: IDBRequest<T>, ev: Event) => any) | null;\n    /** Returns \"pending\" until a request is complete, then returns \"done\". */\n    readonly readyState: IDBRequestReadyState;\n    /** When a request is completed, returns the result, or undefined if the request failed. Throws a \"InvalidStateError\" DOMException if the request is still pending. */\n    readonly result: T;\n    /** Returns the IDBObjectStore, IDBIndex, or IDBCursor the request was made against, or null if is was an open request. */\n    readonly source: IDBObjectStore | IDBIndex | IDBCursor;\n    /** Returns the IDBTransaction the request was made within. If this as an open request, then it returns an upgrade transaction while it is running, or null otherwise. */\n    readonly transaction: IDBTransaction | null;\n    addEventListener<K extends keyof IDBRequestEventMap>(type: K, listener: (this: IDBRequest<T>, ev: IDBRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof IDBRequestEventMap>(type: K, listener: (this: IDBRequest<T>, ev: IDBRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var IDBRequest: {\n    prototype: IDBRequest;\n    new(): IDBRequest;\n};\n\ninterface IDBTransactionEventMap {\n    \"abort\": Event;\n    \"complete\": Event;\n    \"error\": Event;\n}\n\ninterface IDBTransaction extends EventTarget {\n    /** Returns the transaction's connection. */\n    readonly db: IDBDatabase;\n    readonly durability: IDBTransactionDurability;\n    /** If the transaction was aborted, returns the error (a DOMException) providing the reason. */\n    readonly error: DOMException | null;\n    /** Returns the mode the transaction was created with (\"readonly\" or \"readwrite\"), or \"versionchange\" for an upgrade transaction. */\n    readonly mode: IDBTransactionMode;\n    /** Returns a list of the names of object stores in the transaction's scope. For an upgrade transaction this is all object stores in the database. */\n    readonly objectStoreNames: DOMStringList;\n    onabort: ((this: IDBTransaction, ev: Event) => any) | null;\n    oncomplete: ((this: IDBTransaction, ev: Event) => any) | null;\n    onerror: ((this: IDBTransaction, ev: Event) => any) | null;\n    /** Aborts the transaction. All pending requests will fail with a \"AbortError\" DOMException and all changes made to the database will be reverted. */\n    abort(): void;\n    commit(): void;\n    /** Returns an IDBObjectStore in the transaction's scope. */\n    objectStore(name: string): IDBObjectStore;\n    addEventListener<K extends keyof IDBTransactionEventMap>(type: K, listener: (this: IDBTransaction, ev: IDBTransactionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof IDBTransactionEventMap>(type: K, listener: (this: IDBTransaction, ev: IDBTransactionEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var IDBTransaction: {\n    prototype: IDBTransaction;\n    new(): IDBTransaction;\n};\n\n/** This IndexedDB API interface indicates that the version of the database has changed, as the result of an IDBOpenDBRequest.onupgradeneeded event handler function. */\ninterface IDBVersionChangeEvent extends Event {\n    readonly newVersion: number | null;\n    readonly oldVersion: number;\n}\n\ndeclare var IDBVersionChangeEvent: {\n    prototype: IDBVersionChangeEvent;\n    new(type: string, eventInitDict?: IDBVersionChangeEventInit): IDBVersionChangeEvent;\n};\n\n/** The\\xA0IIRFilterNode\\xA0interface of the\\xA0Web Audio API\\xA0is a AudioNode processor which implements a general infinite impulse response (IIR)\\xA0 filter; this type of filter can be used to implement tone control devices and graphic equalizers as well. It lets the parameters of the filter response be specified, so that it can be tuned as needed. */\ninterface IIRFilterNode extends AudioNode {\n    getFrequencyResponse(frequencyHz: Float32Array, magResponse: Float32Array, phaseResponse: Float32Array): void;\n}\n\ndeclare var IIRFilterNode: {\n    prototype: IIRFilterNode;\n    new(context: BaseAudioContext, options: IIRFilterOptions): IIRFilterNode;\n};\n\ninterface IdleDeadline {\n    readonly didTimeout: boolean;\n    timeRemaining(): DOMHighResTimeStamp;\n}\n\ndeclare var IdleDeadline: {\n    prototype: IdleDeadline;\n    new(): IdleDeadline;\n};\n\ninterface ImageBitmap {\n    /** Returns the intrinsic height of the image, in CSS pixels. */\n    readonly height: number;\n    /** Returns the intrinsic width of the image, in CSS pixels. */\n    readonly width: number;\n    /** Releases imageBitmap's underlying bitmap data. */\n    close(): void;\n}\n\ndeclare var ImageBitmap: {\n    prototype: ImageBitmap;\n    new(): ImageBitmap;\n};\n\ninterface ImageBitmapRenderingContext {\n    /** Returns the canvas element that the context is bound to. */\n    readonly canvas: HTMLCanvasElement | OffscreenCanvas;\n    /** Transfers the underlying bitmap data from imageBitmap to context, and the bitmap becomes the contents of the canvas element to which context is bound. */\n    transferFromImageBitmap(bitmap: ImageBitmap | null): void;\n}\n\ndeclare var ImageBitmapRenderingContext: {\n    prototype: ImageBitmapRenderingContext;\n    new(): ImageBitmapRenderingContext;\n};\n\n/** The underlying pixel data of an area of a <canvas> element. It is created using the ImageData() constructor or creator methods on the CanvasRenderingContext2D object associated with a canvas: createImageData() and getImageData(). It can also be used to set a part of the canvas by using putImageData(). */\ninterface ImageData {\n    readonly colorSpace: PredefinedColorSpace;\n    /** Returns the one-dimensional array containing the data in RGBA order, as integers in the range 0 to 255. */\n    readonly data: Uint8ClampedArray;\n    /** Returns the actual dimensions of the data in the ImageData object, in pixels. */\n    readonly height: number;\n    /** Returns the actual dimensions of the data in the ImageData object, in pixels. */\n    readonly width: number;\n}\n\ndeclare var ImageData: {\n    prototype: ImageData;\n    new(sw: number, sh: number, settings?: ImageDataSettings): ImageData;\n    new(data: Uint8ClampedArray, sw: number, sh?: number, settings?: ImageDataSettings): ImageData;\n};\n\ninterface InnerHTML {\n    innerHTML: string;\n}\n\n/** Available only in secure contexts. */\ninterface InputDeviceInfo extends MediaDeviceInfo {\n}\n\ndeclare var InputDeviceInfo: {\n    prototype: InputDeviceInfo;\n    new(): InputDeviceInfo;\n};\n\ninterface InputEvent extends UIEvent {\n    readonly data: string | null;\n    readonly dataTransfer: DataTransfer | null;\n    readonly inputType: string;\n    readonly isComposing: boolean;\n    getTargetRanges(): StaticRange[];\n}\n\ndeclare var InputEvent: {\n    prototype: InputEvent;\n    new(type: string, eventInitDict?: InputEventInit): InputEvent;\n};\n\n/** provides a way to asynchronously observe changes in the intersection of a target element with an ancestor element or with a top-level document's viewport. */\ninterface IntersectionObserver {\n    readonly root: Element | Document | null;\n    readonly rootMargin: string;\n    readonly thresholds: ReadonlyArray<number>;\n    disconnect(): void;\n    observe(target: Element): void;\n    takeRecords(): IntersectionObserverEntry[];\n    unobserve(target: Element): void;\n}\n\ndeclare var IntersectionObserver: {\n    prototype: IntersectionObserver;\n    new(callback: IntersectionObserverCallback, options?: IntersectionObserverInit): IntersectionObserver;\n};\n\n/** This Intersection Observer API interface describes the intersection between the target element and its root container at a specific moment of transition. */\ninterface IntersectionObserverEntry {\n    readonly boundingClientRect: DOMRectReadOnly;\n    readonly intersectionRatio: number;\n    readonly intersectionRect: DOMRectReadOnly;\n    readonly isIntersecting: boolean;\n    readonly rootBounds: DOMRectReadOnly | null;\n    readonly target: Element;\n    readonly time: DOMHighResTimeStamp;\n}\n\ndeclare var IntersectionObserverEntry: {\n    prototype: IntersectionObserverEntry;\n    new(intersectionObserverEntryInit: IntersectionObserverEntryInit): IntersectionObserverEntry;\n};\n\ninterface KHR_parallel_shader_compile {\n    readonly COMPLETION_STATUS_KHR: 0x91B1;\n}\n\n/** KeyboardEvent objects describe a user interaction with the keyboard; each event describes a single interaction between the user and a key (or combination of a key with modifier keys) on the keyboard. */\ninterface KeyboardEvent extends UIEvent {\n    readonly altKey: boolean;\n    /** @deprecated */\n    readonly charCode: number;\n    readonly code: string;\n    readonly ctrlKey: boolean;\n    readonly isComposing: boolean;\n    readonly key: string;\n    /** @deprecated */\n    readonly keyCode: number;\n    readonly location: number;\n    readonly metaKey: boolean;\n    readonly repeat: boolean;\n    readonly shiftKey: boolean;\n    getModifierState(keyArg: string): boolean;\n    /** @deprecated */\n    initKeyboardEvent(typeArg: string, bubblesArg?: boolean, cancelableArg?: boolean, viewArg?: Window | null, keyArg?: string, locationArg?: number, ctrlKey?: boolean, altKey?: boolean, shiftKey?: boolean, metaKey?: boolean): void;\n    readonly DOM_KEY_LOCATION_STANDARD: 0x00;\n    readonly DOM_KEY_LOCATION_LEFT: 0x01;\n    readonly DOM_KEY_LOCATION_RIGHT: 0x02;\n    readonly DOM_KEY_LOCATION_NUMPAD: 0x03;\n}\n\ndeclare var KeyboardEvent: {\n    prototype: KeyboardEvent;\n    new(type: string, eventInitDict?: KeyboardEventInit): KeyboardEvent;\n    readonly DOM_KEY_LOCATION_STANDARD: 0x00;\n    readonly DOM_KEY_LOCATION_LEFT: 0x01;\n    readonly DOM_KEY_LOCATION_RIGHT: 0x02;\n    readonly DOM_KEY_LOCATION_NUMPAD: 0x03;\n};\n\ninterface KeyframeEffect extends AnimationEffect {\n    composite: CompositeOperation;\n    iterationComposite: IterationCompositeOperation;\n    pseudoElement: string | null;\n    target: Element | null;\n    getKeyframes(): ComputedKeyframe[];\n    setKeyframes(keyframes: Keyframe[] | PropertyIndexedKeyframes | null): void;\n}\n\ndeclare var KeyframeEffect: {\n    prototype: KeyframeEffect;\n    new(target: Element | null, keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeEffectOptions): KeyframeEffect;\n    new(source: KeyframeEffect): KeyframeEffect;\n};\n\ninterface LinkStyle {\n    readonly sheet: CSSStyleSheet | null;\n}\n\n/** The location (URL) of the object it is linked to. Changes done on it are reflected on the object it relates to. Both the Document and Window interface have such a linked Location, accessible via Document.location and Window.location respectively. */\ninterface Location {\n    /** Returns a DOMStringList object listing the origins of the ancestor browsing contexts, from the parent browsing context to the top-level browsing context. */\n    readonly ancestorOrigins: DOMStringList;\n    /**\n     * Returns the Location object's URL's fragment (includes leading \"#\" if non-empty).\n     *\n     * Can be set, to navigate to the same URL with a changed fragment (ignores leading \"#\").\n     */\n    hash: string;\n    /**\n     * Returns the Location object's URL's host and port (if different from the default port for the scheme).\n     *\n     * Can be set, to navigate to the same URL with a changed host and port.\n     */\n    host: string;\n    /**\n     * Returns the Location object's URL's host.\n     *\n     * Can be set, to navigate to the same URL with a changed host.\n     */\n    hostname: string;\n    /**\n     * Returns the Location object's URL.\n     *\n     * Can be set, to navigate to the given URL.\n     */\n    href: string;\n    toString(): string;\n    /** Returns the Location object's URL's origin. */\n    readonly origin: string;\n    /**\n     * Returns the Location object's URL's path.\n     *\n     * Can be set, to navigate to the same URL with a changed path.\n     */\n    pathname: string;\n    /**\n     * Returns the Location object's URL's port.\n     *\n     * Can be set, to navigate to the same URL with a changed port.\n     */\n    port: string;\n    /**\n     * Returns the Location object's URL's scheme.\n     *\n     * Can be set, to navigate to the same URL with a changed scheme.\n     */\n    protocol: string;\n    /**\n     * Returns the Location object's URL's query (includes leading \"?\" if non-empty).\n     *\n     * Can be set, to navigate to the same URL with a changed query (ignores leading \"?\").\n     */\n    search: string;\n    /** Navigates to the given URL. */\n    assign(url: string | URL): void;\n    /** Reloads the current page. */\n    reload(): void;\n    /** Removes the current page from the session history and navigates to the given URL. */\n    replace(url: string | URL): void;\n}\n\ndeclare var Location: {\n    prototype: Location;\n    new(): Location;\n};\n\n/** Available only in secure contexts. */\ninterface Lock {\n    readonly mode: LockMode;\n    readonly name: string;\n}\n\ndeclare var Lock: {\n    prototype: Lock;\n    new(): Lock;\n};\n\n/** Available only in secure contexts. */\ninterface LockManager {\n    query(): Promise<LockManagerSnapshot>;\n    request(name: string, callback: LockGrantedCallback): Promise<any>;\n    request(name: string, options: LockOptions, callback: LockGrantedCallback): Promise<any>;\n}\n\ndeclare var LockManager: {\n    prototype: LockManager;\n    new(): LockManager;\n};\n\ninterface MIDIAccessEventMap {\n    \"statechange\": Event;\n}\n\n/** Available only in secure contexts. */\ninterface MIDIAccess extends EventTarget {\n    readonly inputs: MIDIInputMap;\n    onstatechange: ((this: MIDIAccess, ev: Event) => any) | null;\n    readonly outputs: MIDIOutputMap;\n    readonly sysexEnabled: boolean;\n    addEventListener<K extends keyof MIDIAccessEventMap>(type: K, listener: (this: MIDIAccess, ev: MIDIAccessEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MIDIAccessEventMap>(type: K, listener: (this: MIDIAccess, ev: MIDIAccessEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MIDIAccess: {\n    prototype: MIDIAccess;\n    new(): MIDIAccess;\n};\n\n/** Available only in secure contexts. */\ninterface MIDIConnectionEvent extends Event {\n    readonly port: MIDIPort;\n}\n\ndeclare var MIDIConnectionEvent: {\n    prototype: MIDIConnectionEvent;\n    new(type: string, eventInitDict?: MIDIConnectionEventInit): MIDIConnectionEvent;\n};\n\ninterface MIDIInputEventMap extends MIDIPortEventMap {\n    \"midimessage\": Event;\n}\n\n/** Available only in secure contexts. */\ninterface MIDIInput extends MIDIPort {\n    onmidimessage: ((this: MIDIInput, ev: Event) => any) | null;\n    addEventListener<K extends keyof MIDIInputEventMap>(type: K, listener: (this: MIDIInput, ev: MIDIInputEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MIDIInputEventMap>(type: K, listener: (this: MIDIInput, ev: MIDIInputEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MIDIInput: {\n    prototype: MIDIInput;\n    new(): MIDIInput;\n};\n\n/** Available only in secure contexts. */\ninterface MIDIInputMap {\n    forEach(callbackfn: (value: MIDIInput, key: string, parent: MIDIInputMap) => void, thisArg?: any): void;\n}\n\ndeclare var MIDIInputMap: {\n    prototype: MIDIInputMap;\n    new(): MIDIInputMap;\n};\n\n/** Available only in secure contexts. */\ninterface MIDIMessageEvent extends Event {\n    readonly data: Uint8Array;\n}\n\ndeclare var MIDIMessageEvent: {\n    prototype: MIDIMessageEvent;\n    new(type: string, eventInitDict?: MIDIMessageEventInit): MIDIMessageEvent;\n};\n\n/** Available only in secure contexts. */\ninterface MIDIOutput extends MIDIPort {\n    send(data: number[], timestamp?: DOMHighResTimeStamp): void;\n    addEventListener<K extends keyof MIDIPortEventMap>(type: K, listener: (this: MIDIOutput, ev: MIDIPortEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MIDIPortEventMap>(type: K, listener: (this: MIDIOutput, ev: MIDIPortEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MIDIOutput: {\n    prototype: MIDIOutput;\n    new(): MIDIOutput;\n};\n\n/** Available only in secure contexts. */\ninterface MIDIOutputMap {\n    forEach(callbackfn: (value: MIDIOutput, key: string, parent: MIDIOutputMap) => void, thisArg?: any): void;\n}\n\ndeclare var MIDIOutputMap: {\n    prototype: MIDIOutputMap;\n    new(): MIDIOutputMap;\n};\n\ninterface MIDIPortEventMap {\n    \"statechange\": Event;\n}\n\n/** Available only in secure contexts. */\ninterface MIDIPort extends EventTarget {\n    readonly connection: MIDIPortConnectionState;\n    readonly id: string;\n    readonly manufacturer: string | null;\n    readonly name: string | null;\n    onstatechange: ((this: MIDIPort, ev: Event) => any) | null;\n    readonly state: MIDIPortDeviceState;\n    readonly type: MIDIPortType;\n    readonly version: string | null;\n    close(): Promise<MIDIPort>;\n    open(): Promise<MIDIPort>;\n    addEventListener<K extends keyof MIDIPortEventMap>(type: K, listener: (this: MIDIPort, ev: MIDIPortEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MIDIPortEventMap>(type: K, listener: (this: MIDIPort, ev: MIDIPortEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MIDIPort: {\n    prototype: MIDIPort;\n    new(): MIDIPort;\n};\n\ninterface MathMLElementEventMap extends ElementEventMap, GlobalEventHandlersEventMap {\n}\n\ninterface MathMLElement extends Element, ElementCSSInlineStyle, GlobalEventHandlers, HTMLOrSVGElement {\n    addEventListener<K extends keyof MathMLElementEventMap>(type: K, listener: (this: MathMLElement, ev: MathMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MathMLElementEventMap>(type: K, listener: (this: MathMLElement, ev: MathMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MathMLElement: {\n    prototype: MathMLElement;\n    new(): MathMLElement;\n};\n\ninterface MediaCapabilities {\n    decodingInfo(configuration: MediaDecodingConfiguration): Promise<MediaCapabilitiesDecodingInfo>;\n    encodingInfo(configuration: MediaEncodingConfiguration): Promise<MediaCapabilitiesEncodingInfo>;\n}\n\ndeclare var MediaCapabilities: {\n    prototype: MediaCapabilities;\n    new(): MediaCapabilities;\n};\n\n/**\n * The MediaDevicesInfo interface contains information that describes a single media input or output device.\n * Available only in secure contexts.\n */\ninterface MediaDeviceInfo {\n    readonly deviceId: string;\n    readonly groupId: string;\n    readonly kind: MediaDeviceKind;\n    readonly label: string;\n    toJSON(): any;\n}\n\ndeclare var MediaDeviceInfo: {\n    prototype: MediaDeviceInfo;\n    new(): MediaDeviceInfo;\n};\n\ninterface MediaDevicesEventMap {\n    \"devicechange\": Event;\n}\n\n/**\n * Provides access to connected media input devices like cameras and microphones, as well as screen sharing. In essence, it lets you obtain access to any hardware source of media data.\n * Available only in secure contexts.\n */\ninterface MediaDevices extends EventTarget {\n    ondevicechange: ((this: MediaDevices, ev: Event) => any) | null;\n    enumerateDevices(): Promise<MediaDeviceInfo[]>;\n    getDisplayMedia(options?: DisplayMediaStreamOptions): Promise<MediaStream>;\n    getSupportedConstraints(): MediaTrackSupportedConstraints;\n    getUserMedia(constraints?: MediaStreamConstraints): Promise<MediaStream>;\n    addEventListener<K extends keyof MediaDevicesEventMap>(type: K, listener: (this: MediaDevices, ev: MediaDevicesEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MediaDevicesEventMap>(type: K, listener: (this: MediaDevices, ev: MediaDevicesEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MediaDevices: {\n    prototype: MediaDevices;\n    new(): MediaDevices;\n};\n\n/** A MediaElementSourceNode has no inputs and exactly one output, and is created using the AudioContext.createMediaElementSource method. The amount of channels in the output equals the number of channels of the audio referenced by the HTMLMediaElement used in the creation of the node, or is 1 if the HTMLMediaElement has no audio. */\ninterface MediaElementAudioSourceNode extends AudioNode {\n    readonly mediaElement: HTMLMediaElement;\n}\n\ndeclare var MediaElementAudioSourceNode: {\n    prototype: MediaElementAudioSourceNode;\n    new(context: AudioContext, options: MediaElementAudioSourceOptions): MediaElementAudioSourceNode;\n};\n\ninterface MediaEncryptedEvent extends Event {\n    readonly initData: ArrayBuffer | null;\n    readonly initDataType: string;\n}\n\ndeclare var MediaEncryptedEvent: {\n    prototype: MediaEncryptedEvent;\n    new(type: string, eventInitDict?: MediaEncryptedEventInit): MediaEncryptedEvent;\n};\n\n/** An error which occurred while handling media in an HTML media element based on HTMLMediaElement, such as <audio> or <video>. */\ninterface MediaError {\n    readonly code: number;\n    readonly message: string;\n    readonly MEDIA_ERR_ABORTED: 1;\n    readonly MEDIA_ERR_NETWORK: 2;\n    readonly MEDIA_ERR_DECODE: 3;\n    readonly MEDIA_ERR_SRC_NOT_SUPPORTED: 4;\n}\n\ndeclare var MediaError: {\n    prototype: MediaError;\n    new(): MediaError;\n    readonly MEDIA_ERR_ABORTED: 1;\n    readonly MEDIA_ERR_NETWORK: 2;\n    readonly MEDIA_ERR_DECODE: 3;\n    readonly MEDIA_ERR_SRC_NOT_SUPPORTED: 4;\n};\n\n/**\n * This EncryptedMediaExtensions API interface contains the content and related data when the content decryption module generates a message for the session.\n * Available only in secure contexts.\n */\ninterface MediaKeyMessageEvent extends Event {\n    readonly message: ArrayBuffer;\n    readonly messageType: MediaKeyMessageType;\n}\n\ndeclare var MediaKeyMessageEvent: {\n    prototype: MediaKeyMessageEvent;\n    new(type: string, eventInitDict: MediaKeyMessageEventInit): MediaKeyMessageEvent;\n};\n\ninterface MediaKeySessionEventMap {\n    \"keystatuseschange\": Event;\n    \"message\": MediaKeyMessageEvent;\n}\n\n/**\n * This EncryptedMediaExtensions API interface represents a\\xA0context for message exchange with a content decryption module (CDM).\n * Available only in secure contexts.\n */\ninterface MediaKeySession extends EventTarget {\n    readonly closed: Promise<MediaKeySessionClosedReason>;\n    readonly expiration: number;\n    readonly keyStatuses: MediaKeyStatusMap;\n    onkeystatuseschange: ((this: MediaKeySession, ev: Event) => any) | null;\n    onmessage: ((this: MediaKeySession, ev: MediaKeyMessageEvent) => any) | null;\n    readonly sessionId: string;\n    close(): Promise<void>;\n    generateRequest(initDataType: string, initData: BufferSource): Promise<void>;\n    load(sessionId: string): Promise<boolean>;\n    remove(): Promise<void>;\n    update(response: BufferSource): Promise<void>;\n    addEventListener<K extends keyof MediaKeySessionEventMap>(type: K, listener: (this: MediaKeySession, ev: MediaKeySessionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MediaKeySessionEventMap>(type: K, listener: (this: MediaKeySession, ev: MediaKeySessionEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MediaKeySession: {\n    prototype: MediaKeySession;\n    new(): MediaKeySession;\n};\n\n/**\n * This EncryptedMediaExtensions API interface is a read-only map of media key statuses by key IDs.\n * Available only in secure contexts.\n */\ninterface MediaKeyStatusMap {\n    readonly size: number;\n    get(keyId: BufferSource): MediaKeyStatus | undefined;\n    has(keyId: BufferSource): boolean;\n    forEach(callbackfn: (value: MediaKeyStatus, key: BufferSource, parent: MediaKeyStatusMap) => void, thisArg?: any): void;\n}\n\ndeclare var MediaKeyStatusMap: {\n    prototype: MediaKeyStatusMap;\n    new(): MediaKeyStatusMap;\n};\n\n/**\n * This EncryptedMediaExtensions API interface provides access to a Key System for decryption and/or a content protection provider. You can request an instance of this object using the Navigator.requestMediaKeySystemAccess method.\n * Available only in secure contexts.\n */\ninterface MediaKeySystemAccess {\n    readonly keySystem: string;\n    createMediaKeys(): Promise<MediaKeys>;\n    getConfiguration(): MediaKeySystemConfiguration;\n}\n\ndeclare var MediaKeySystemAccess: {\n    prototype: MediaKeySystemAccess;\n    new(): MediaKeySystemAccess;\n};\n\n/**\n * This EncryptedMediaExtensions API interface the represents a set of keys that an associated HTMLMediaElement can use for decryption of media data during playback.\n * Available only in secure contexts.\n */\ninterface MediaKeys {\n    createSession(sessionType?: MediaKeySessionType): MediaKeySession;\n    setServerCertificate(serverCertificate: BufferSource): Promise<boolean>;\n}\n\ndeclare var MediaKeys: {\n    prototype: MediaKeys;\n    new(): MediaKeys;\n};\n\ninterface MediaList {\n    readonly length: number;\n    mediaText: string;\n    toString(): string;\n    appendMedium(medium: string): void;\n    deleteMedium(medium: string): void;\n    item(index: number): string | null;\n    [index: number]: string;\n}\n\ndeclare var MediaList: {\n    prototype: MediaList;\n    new(): MediaList;\n};\n\ninterface MediaMetadata {\n    album: string;\n    artist: string;\n    artwork: ReadonlyArray<MediaImage>;\n    title: string;\n}\n\ndeclare var MediaMetadata: {\n    prototype: MediaMetadata;\n    new(init?: MediaMetadataInit): MediaMetadata;\n};\n\ninterface MediaQueryListEventMap {\n    \"change\": MediaQueryListEvent;\n}\n\n/** Stores information on a media query applied to a document, and handles sending notifications to listeners when the media query state change (i.e. when the media query test starts or stops evaluating to true). */\ninterface MediaQueryList extends EventTarget {\n    readonly matches: boolean;\n    readonly media: string;\n    onchange: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;\n    /** @deprecated */\n    addListener(callback: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null): void;\n    /** @deprecated */\n    removeListener(callback: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null): void;\n    addEventListener<K extends keyof MediaQueryListEventMap>(type: K, listener: (this: MediaQueryList, ev: MediaQueryListEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MediaQueryListEventMap>(type: K, listener: (this: MediaQueryList, ev: MediaQueryListEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MediaQueryList: {\n    prototype: MediaQueryList;\n    new(): MediaQueryList;\n};\n\ninterface MediaQueryListEvent extends Event {\n    readonly matches: boolean;\n    readonly media: string;\n}\n\ndeclare var MediaQueryListEvent: {\n    prototype: MediaQueryListEvent;\n    new(type: string, eventInitDict?: MediaQueryListEventInit): MediaQueryListEvent;\n};\n\ninterface MediaRecorderEventMap {\n    \"dataavailable\": BlobEvent;\n    \"error\": Event;\n    \"pause\": Event;\n    \"resume\": Event;\n    \"start\": Event;\n    \"stop\": Event;\n}\n\ninterface MediaRecorder extends EventTarget {\n    readonly audioBitsPerSecond: number;\n    readonly mimeType: string;\n    ondataavailable: ((this: MediaRecorder, ev: BlobEvent) => any) | null;\n    onerror: ((this: MediaRecorder, ev: Event) => any) | null;\n    onpause: ((this: MediaRecorder, ev: Event) => any) | null;\n    onresume: ((this: MediaRecorder, ev: Event) => any) | null;\n    onstart: ((this: MediaRecorder, ev: Event) => any) | null;\n    onstop: ((this: MediaRecorder, ev: Event) => any) | null;\n    readonly state: RecordingState;\n    readonly stream: MediaStream;\n    readonly videoBitsPerSecond: number;\n    pause(): void;\n    requestData(): void;\n    resume(): void;\n    start(timeslice?: number): void;\n    stop(): void;\n    addEventListener<K extends keyof MediaRecorderEventMap>(type: K, listener: (this: MediaRecorder, ev: MediaRecorderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MediaRecorderEventMap>(type: K, listener: (this: MediaRecorder, ev: MediaRecorderEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MediaRecorder: {\n    prototype: MediaRecorder;\n    new(stream: MediaStream, options?: MediaRecorderOptions): MediaRecorder;\n    isTypeSupported(type: string): boolean;\n};\n\ninterface MediaSession {\n    metadata: MediaMetadata | null;\n    playbackState: MediaSessionPlaybackState;\n    setActionHandler(action: MediaSessionAction, handler: MediaSessionActionHandler | null): void;\n    setPositionState(state?: MediaPositionState): void;\n}\n\ndeclare var MediaSession: {\n    prototype: MediaSession;\n    new(): MediaSession;\n};\n\ninterface MediaSourceEventMap {\n    \"sourceclose\": Event;\n    \"sourceended\": Event;\n    \"sourceopen\": Event;\n}\n\n/** This Media Source Extensions API interface represents a source of media data for an HTMLMediaElement object. A MediaSource object can be attached to a HTMLMediaElement to be played in the user agent. */\ninterface MediaSource extends EventTarget {\n    readonly activeSourceBuffers: SourceBufferList;\n    duration: number;\n    onsourceclose: ((this: MediaSource, ev: Event) => any) | null;\n    onsourceended: ((this: MediaSource, ev: Event) => any) | null;\n    onsourceopen: ((this: MediaSource, ev: Event) => any) | null;\n    readonly readyState: ReadyState;\n    readonly sourceBuffers: SourceBufferList;\n    addSourceBuffer(type: string): SourceBuffer;\n    clearLiveSeekableRange(): void;\n    endOfStream(error?: EndOfStreamError): void;\n    removeSourceBuffer(sourceBuffer: SourceBuffer): void;\n    setLiveSeekableRange(start: number, end: number): void;\n    addEventListener<K extends keyof MediaSourceEventMap>(type: K, listener: (this: MediaSource, ev: MediaSourceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MediaSourceEventMap>(type: K, listener: (this: MediaSource, ev: MediaSourceEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MediaSource: {\n    prototype: MediaSource;\n    new(): MediaSource;\n    isTypeSupported(type: string): boolean;\n};\n\ninterface MediaStreamEventMap {\n    \"addtrack\": MediaStreamTrackEvent;\n    \"removetrack\": MediaStreamTrackEvent;\n}\n\n/** A stream of media content. A stream consists of several tracks such as\\xA0video or audio tracks. Each track is specified as an instance of MediaStreamTrack. */\ninterface MediaStream extends EventTarget {\n    readonly active: boolean;\n    readonly id: string;\n    onaddtrack: ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null;\n    onremovetrack: ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null;\n    addTrack(track: MediaStreamTrack): void;\n    clone(): MediaStream;\n    getAudioTracks(): MediaStreamTrack[];\n    getTrackById(trackId: string): MediaStreamTrack | null;\n    getTracks(): MediaStreamTrack[];\n    getVideoTracks(): MediaStreamTrack[];\n    removeTrack(track: MediaStreamTrack): void;\n    addEventListener<K extends keyof MediaStreamEventMap>(type: K, listener: (this: MediaStream, ev: MediaStreamEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MediaStreamEventMap>(type: K, listener: (this: MediaStream, ev: MediaStreamEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MediaStream: {\n    prototype: MediaStream;\n    new(): MediaStream;\n    new(stream: MediaStream): MediaStream;\n    new(tracks: MediaStreamTrack[]): MediaStream;\n};\n\ninterface MediaStreamAudioDestinationNode extends AudioNode {\n    readonly stream: MediaStream;\n}\n\ndeclare var MediaStreamAudioDestinationNode: {\n    prototype: MediaStreamAudioDestinationNode;\n    new(context: AudioContext, options?: AudioNodeOptions): MediaStreamAudioDestinationNode;\n};\n\n/** A type of AudioNode which operates as an audio source whose media is received from a MediaStream obtained using the WebRTC or Media Capture and Streams APIs. */\ninterface MediaStreamAudioSourceNode extends AudioNode {\n    readonly mediaStream: MediaStream;\n}\n\ndeclare var MediaStreamAudioSourceNode: {\n    prototype: MediaStreamAudioSourceNode;\n    new(context: AudioContext, options: MediaStreamAudioSourceOptions): MediaStreamAudioSourceNode;\n};\n\ninterface MediaStreamTrackEventMap {\n    \"ended\": Event;\n    \"mute\": Event;\n    \"unmute\": Event;\n}\n\n/** A single media track within a stream; typically, these are audio or video tracks, but other track types may exist as well. */\ninterface MediaStreamTrack extends EventTarget {\n    contentHint: string;\n    enabled: boolean;\n    readonly id: string;\n    readonly kind: string;\n    readonly label: string;\n    readonly muted: boolean;\n    onended: ((this: MediaStreamTrack, ev: Event) => any) | null;\n    onmute: ((this: MediaStreamTrack, ev: Event) => any) | null;\n    onunmute: ((this: MediaStreamTrack, ev: Event) => any) | null;\n    readonly readyState: MediaStreamTrackState;\n    applyConstraints(constraints?: MediaTrackConstraints): Promise<void>;\n    clone(): MediaStreamTrack;\n    getCapabilities(): MediaTrackCapabilities;\n    getConstraints(): MediaTrackConstraints;\n    getSettings(): MediaTrackSettings;\n    stop(): void;\n    addEventListener<K extends keyof MediaStreamTrackEventMap>(type: K, listener: (this: MediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MediaStreamTrackEventMap>(type: K, listener: (this: MediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MediaStreamTrack: {\n    prototype: MediaStreamTrack;\n    new(): MediaStreamTrack;\n};\n\n/** Events which indicate that a MediaStream has had tracks added to or removed from the stream through calls to Media Stream API methods. These events are sent to the stream when these changes occur. */\ninterface MediaStreamTrackEvent extends Event {\n    readonly track: MediaStreamTrack;\n}\n\ndeclare var MediaStreamTrackEvent: {\n    prototype: MediaStreamTrackEvent;\n    new(type: string, eventInitDict: MediaStreamTrackEventInit): MediaStreamTrackEvent;\n};\n\n/** This Channel Messaging API interface allows us to create a new message channel and send data through it via its two MessagePort properties. */\ninterface MessageChannel {\n    /** Returns the first MessagePort object. */\n    readonly port1: MessagePort;\n    /** Returns the second MessagePort object. */\n    readonly port2: MessagePort;\n}\n\ndeclare var MessageChannel: {\n    prototype: MessageChannel;\n    new(): MessageChannel;\n};\n\n/** A message received by a target object. */\ninterface MessageEvent<T = any> extends Event {\n    /** Returns the data of the message. */\n    readonly data: T;\n    /** Returns the last event ID string, for server-sent events. */\n    readonly lastEventId: string;\n    /** Returns the origin of the message, for server-sent events and cross-document messaging. */\n    readonly origin: string;\n    /** Returns the MessagePort array sent with the message, for cross-document messaging and channel messaging. */\n    readonly ports: ReadonlyArray<MessagePort>;\n    /** Returns the WindowProxy of the source window, for cross-document messaging, and the MessagePort being attached, in the connect event fired at SharedWorkerGlobalScope objects. */\n    readonly source: MessageEventSource | null;\n    /** @deprecated */\n    initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: MessagePort[]): void;\n}\n\ndeclare var MessageEvent: {\n    prototype: MessageEvent;\n    new<T>(type: string, eventInitDict?: MessageEventInit<T>): MessageEvent<T>;\n};\n\ninterface MessagePortEventMap {\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n}\n\n/** This Channel Messaging API interface represents one of the two ports of a MessageChannel, allowing messages to be sent from one port and listening out for them arriving at the other. */\ninterface MessagePort extends EventTarget {\n    onmessage: ((this: MessagePort, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: MessagePort, ev: MessageEvent) => any) | null;\n    /** Disconnects the port, so that it is no longer active. */\n    close(): void;\n    /**\n     * Posts a message through the channel. Objects listed in transfer are transferred, not just cloned, meaning that they are no longer usable on the sending side.\n     *\n     * Throws a \"DataCloneError\" DOMException if transfer contains duplicate objects or port, or if message could not be cloned.\n     */\n    postMessage(message: any, transfer: Transferable[]): void;\n    postMessage(message: any, options?: StructuredSerializeOptions): void;\n    /** Begins dispatching messages received on the port. */\n    start(): void;\n    addEventListener<K extends keyof MessagePortEventMap>(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MessagePortEventMap>(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MessagePort: {\n    prototype: MessagePort;\n    new(): MessagePort;\n};\n\n/**\n * Provides contains information about a MIME type associated with a particular plugin. NavigatorPlugins.mimeTypes returns an array of this object.\n * @deprecated\n */\ninterface MimeType {\n    /**\n     * Returns the MIME type's description.\n     * @deprecated\n     */\n    readonly description: string;\n    /**\n     * Returns the Plugin object that implements this MIME type.\n     * @deprecated\n     */\n    readonly enabledPlugin: Plugin;\n    /**\n     * Returns the MIME type's typical file extensions, in a comma-separated list.\n     * @deprecated\n     */\n    readonly suffixes: string;\n    /**\n     * Returns the MIME type.\n     * @deprecated\n     */\n    readonly type: string;\n}\n\n/** @deprecated */\ndeclare var MimeType: {\n    prototype: MimeType;\n    new(): MimeType;\n};\n\n/**\n * Returns an array of MimeType instances, each of which contains information\\xA0about a supported browser plugins. This object is returned by NavigatorPlugins.mimeTypes.\n * @deprecated\n */\ninterface MimeTypeArray {\n    /** @deprecated */\n    readonly length: number;\n    /** @deprecated */\n    item(index: number): MimeType | null;\n    /** @deprecated */\n    namedItem(name: string): MimeType | null;\n    [index: number]: MimeType;\n}\n\n/** @deprecated */\ndeclare var MimeTypeArray: {\n    prototype: MimeTypeArray;\n    new(): MimeTypeArray;\n};\n\n/** Events that occur due to the user interacting with a pointing device (such as a mouse). Common events using this interface include click, dblclick, mouseup, mousedown. */\ninterface MouseEvent extends UIEvent {\n    readonly altKey: boolean;\n    readonly button: number;\n    readonly buttons: number;\n    readonly clientX: number;\n    readonly clientY: number;\n    readonly ctrlKey: boolean;\n    readonly metaKey: boolean;\n    readonly movementX: number;\n    readonly movementY: number;\n    readonly offsetX: number;\n    readonly offsetY: number;\n    readonly pageX: number;\n    readonly pageY: number;\n    readonly relatedTarget: EventTarget | null;\n    readonly screenX: number;\n    readonly screenY: number;\n    readonly shiftKey: boolean;\n    readonly x: number;\n    readonly y: number;\n    getModifierState(keyArg: string): boolean;\n    /** @deprecated */\n    initMouseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget | null): void;\n}\n\ndeclare var MouseEvent: {\n    prototype: MouseEvent;\n    new(type: string, eventInitDict?: MouseEventInit): MouseEvent;\n};\n\n/**\n * Provides event properties that are specific to modifications to the Document Object Model (DOM) hierarchy and nodes.\n * @deprecated DOM4 [DOM] provides a new mechanism using a MutationObserver interface which addresses the use cases that mutation events solve, but in a more performant manner. Thus, this specification describes mutation events for reference and completeness of legacy behavior, but deprecates the use of the MutationEvent interface.\n */\ninterface MutationEvent extends Event {\n    /** @deprecated */\n    readonly attrChange: number;\n    /** @deprecated */\n    readonly attrName: string;\n    /** @deprecated */\n    readonly newValue: string;\n    /** @deprecated */\n    readonly prevValue: string;\n    /** @deprecated */\n    readonly relatedNode: Node | null;\n    /** @deprecated */\n    initMutationEvent(typeArg: string, bubblesArg?: boolean, cancelableArg?: boolean, relatedNodeArg?: Node | null, prevValueArg?: string, newValueArg?: string, attrNameArg?: string, attrChangeArg?: number): void;\n    readonly MODIFICATION: 1;\n    readonly ADDITION: 2;\n    readonly REMOVAL: 3;\n}\n\n/** @deprecated */\ndeclare var MutationEvent: {\n    prototype: MutationEvent;\n    new(): MutationEvent;\n    readonly MODIFICATION: 1;\n    readonly ADDITION: 2;\n    readonly REMOVAL: 3;\n};\n\n/** Provides the ability to watch for changes being made to the DOM tree. It is designed as a replacement for the older Mutation Events feature which was part of the DOM3 Events specification. */\ninterface MutationObserver {\n    /** Stops observer from observing any mutations. Until the observe() method is used again, observer's callback will not be invoked. */\n    disconnect(): void;\n    /**\n     * Instructs the user agent to observe a given target (a node) and report any mutations based on the criteria given by options (an object).\n     *\n     * The options argument allows for setting mutation observation options via object members.\n     */\n    observe(target: Node, options?: MutationObserverInit): void;\n    /** Empties the record queue and returns what was in there. */\n    takeRecords(): MutationRecord[];\n}\n\ndeclare var MutationObserver: {\n    prototype: MutationObserver;\n    new(callback: MutationCallback): MutationObserver;\n};\n\n/** A MutationRecord represents an individual DOM mutation. It is the object that is passed to MutationObserver's callback. */\ninterface MutationRecord {\n    /** Return the nodes added and removed respectively. */\n    readonly addedNodes: NodeList;\n    /** Returns the local name of the changed attribute, and null otherwise. */\n    readonly attributeName: string | null;\n    /** Returns the namespace of the changed attribute, and null otherwise. */\n    readonly attributeNamespace: string | null;\n    /** Return the previous and next sibling respectively of the added or removed nodes, and null otherwise. */\n    readonly nextSibling: Node | null;\n    /** The return value depends on type. For \"attributes\", it is the value of the changed attribute before the change. For \"characterData\", it is the data of the changed node before the change. For \"childList\", it is null. */\n    readonly oldValue: string | null;\n    /** Return the previous and next sibling respectively of the added or removed nodes, and null otherwise. */\n    readonly previousSibling: Node | null;\n    /** Return the nodes added and removed respectively. */\n    readonly removedNodes: NodeList;\n    /** Returns the node the mutation affected, depending on the type. For \"attributes\", it is the element whose attribute changed. For \"characterData\", it is the CharacterData node. For \"childList\", it is the node whose children changed. */\n    readonly target: Node;\n    /** Returns \"attributes\" if it was an attribute mutation. \"characterData\" if it was a mutation to a CharacterData node. And \"childList\" if it was a mutation to the tree of nodes. */\n    readonly type: MutationRecordType;\n}\n\ndeclare var MutationRecord: {\n    prototype: MutationRecord;\n    new(): MutationRecord;\n};\n\n/** A collection of Attr objects. Objects inside a NamedNodeMap are not in any particular order, unlike NodeList, although they may be accessed by an index as in an array. */\ninterface NamedNodeMap {\n    readonly length: number;\n    getNamedItem(qualifiedName: string): Attr | null;\n    getNamedItemNS(namespace: string | null, localName: string): Attr | null;\n    item(index: number): Attr | null;\n    removeNamedItem(qualifiedName: string): Attr;\n    removeNamedItemNS(namespace: string | null, localName: string): Attr;\n    setNamedItem(attr: Attr): Attr | null;\n    setNamedItemNS(attr: Attr): Attr | null;\n    [index: number]: Attr;\n}\n\ndeclare var NamedNodeMap: {\n    prototype: NamedNodeMap;\n    new(): NamedNodeMap;\n};\n\n/** Available only in secure contexts. */\ninterface NavigationPreloadManager {\n    disable(): Promise<void>;\n    enable(): Promise<void>;\n    getState(): Promise<NavigationPreloadState>;\n    setHeaderValue(value: string): Promise<void>;\n}\n\ndeclare var NavigationPreloadManager: {\n    prototype: NavigationPreloadManager;\n    new(): NavigationPreloadManager;\n};\n\n/** The state and the identity of the user agent. It allows scripts to query it and to register themselves to carry on some activities. */\ninterface Navigator extends NavigatorAutomationInformation, NavigatorConcurrentHardware, NavigatorContentUtils, NavigatorCookies, NavigatorID, NavigatorLanguage, NavigatorLocks, NavigatorOnLine, NavigatorPlugins, NavigatorStorage {\n    /** Available only in secure contexts. */\n    readonly clipboard: Clipboard;\n    /** Available only in secure contexts. */\n    readonly credentials: CredentialsContainer;\n    readonly doNotTrack: string | null;\n    readonly geolocation: Geolocation;\n    readonly maxTouchPoints: number;\n    readonly mediaCapabilities: MediaCapabilities;\n    /** Available only in secure contexts. */\n    readonly mediaDevices: MediaDevices;\n    readonly mediaSession: MediaSession;\n    readonly permissions: Permissions;\n    /** Available only in secure contexts. */\n    readonly serviceWorker: ServiceWorkerContainer;\n    /** Available only in secure contexts. */\n    canShare(data?: ShareData): boolean;\n    getGamepads(): (Gamepad | null)[];\n    /** Available only in secure contexts. */\n    requestMIDIAccess(options?: MIDIOptions): Promise<MIDIAccess>;\n    /** Available only in secure contexts. */\n    requestMediaKeySystemAccess(keySystem: string, supportedConfigurations: MediaKeySystemConfiguration[]): Promise<MediaKeySystemAccess>;\n    sendBeacon(url: string | URL, data?: BodyInit | null): boolean;\n    /** Available only in secure contexts. */\n    share(data?: ShareData): Promise<void>;\n    vibrate(pattern: VibratePattern): boolean;\n}\n\ndeclare var Navigator: {\n    prototype: Navigator;\n    new(): Navigator;\n};\n\ninterface NavigatorAutomationInformation {\n    readonly webdriver: boolean;\n}\n\ninterface NavigatorConcurrentHardware {\n    readonly hardwareConcurrency: number;\n}\n\ninterface NavigatorContentUtils {\n    /** Available only in secure contexts. */\n    registerProtocolHandler(scheme: string, url: string | URL): void;\n}\n\ninterface NavigatorCookies {\n    readonly cookieEnabled: boolean;\n}\n\ninterface NavigatorID {\n    /** @deprecated */\n    readonly appCodeName: string;\n    /** @deprecated */\n    readonly appName: string;\n    /** @deprecated */\n    readonly appVersion: string;\n    /** @deprecated */\n    readonly platform: string;\n    /** @deprecated */\n    readonly product: string;\n    /** @deprecated */\n    readonly productSub: string;\n    readonly userAgent: string;\n    /** @deprecated */\n    readonly vendor: string;\n    /** @deprecated */\n    readonly vendorSub: string;\n}\n\ninterface NavigatorLanguage {\n    readonly language: string;\n    readonly languages: ReadonlyArray<string>;\n}\n\n/** Available only in secure contexts. */\ninterface NavigatorLocks {\n    readonly locks: LockManager;\n}\n\ninterface NavigatorOnLine {\n    readonly onLine: boolean;\n}\n\ninterface NavigatorPlugins {\n    /** @deprecated */\n    readonly mimeTypes: MimeTypeArray;\n    readonly pdfViewerEnabled: boolean;\n    /** @deprecated */\n    readonly plugins: PluginArray;\n    /** @deprecated */\n    javaEnabled(): boolean;\n}\n\n/** Available only in secure contexts. */\ninterface NavigatorStorage {\n    readonly storage: StorageManager;\n}\n\n/** Node is an interface from which a number of DOM API object types inherit. It allows those types to be treated similarly; for example, inheriting the same set of methods, or being tested in the same way. */\ninterface Node extends EventTarget {\n    /** Returns node's node document's document base URL. */\n    readonly baseURI: string;\n    /** Returns the children. */\n    readonly childNodes: NodeListOf<ChildNode>;\n    /** Returns the first child. */\n    readonly firstChild: ChildNode | null;\n    /** Returns true if node is connected and false otherwise. */\n    readonly isConnected: boolean;\n    /** Returns the last child. */\n    readonly lastChild: ChildNode | null;\n    /** Returns the next sibling. */\n    readonly nextSibling: ChildNode | null;\n    /** Returns a string appropriate for the type of node. */\n    readonly nodeName: string;\n    /** Returns the type of node. */\n    readonly nodeType: number;\n    nodeValue: string | null;\n    /** Returns the node document. Returns null for documents. */\n    readonly ownerDocument: Document | null;\n    /** Returns the parent element. */\n    readonly parentElement: HTMLElement | null;\n    /** Returns the parent. */\n    readonly parentNode: ParentNode | null;\n    /** Returns the previous sibling. */\n    readonly previousSibling: ChildNode | null;\n    textContent: string | null;\n    appendChild<T extends Node>(node: T): T;\n    /** Returns a copy of node. If deep is true, the copy also includes the node's descendants. */\n    cloneNode(deep?: boolean): Node;\n    /** Returns a bitmask indicating the position of other relative to node. */\n    compareDocumentPosition(other: Node): number;\n    /** Returns true if other is an inclusive descendant of node, and false otherwise. */\n    contains(other: Node | null): boolean;\n    /** Returns node's root. */\n    getRootNode(options?: GetRootNodeOptions): Node;\n    /** Returns whether node has children. */\n    hasChildNodes(): boolean;\n    insertBefore<T extends Node>(node: T, child: Node | null): T;\n    isDefaultNamespace(namespace: string | null): boolean;\n    /** Returns whether node and otherNode have the same properties. */\n    isEqualNode(otherNode: Node | null): boolean;\n    isSameNode(otherNode: Node | null): boolean;\n    lookupNamespaceURI(prefix: string | null): string | null;\n    lookupPrefix(namespace: string | null): string | null;\n    /** Removes empty exclusive Text nodes and concatenates the data of remaining contiguous exclusive Text nodes into the first of their nodes. */\n    normalize(): void;\n    removeChild<T extends Node>(child: T): T;\n    replaceChild<T extends Node>(node: Node, child: T): T;\n    /** node is an element. */\n    readonly ELEMENT_NODE: 1;\n    readonly ATTRIBUTE_NODE: 2;\n    /** node is a Text node. */\n    readonly TEXT_NODE: 3;\n    /** node is a CDATASection node. */\n    readonly CDATA_SECTION_NODE: 4;\n    readonly ENTITY_REFERENCE_NODE: 5;\n    readonly ENTITY_NODE: 6;\n    /** node is a ProcessingInstruction node. */\n    readonly PROCESSING_INSTRUCTION_NODE: 7;\n    /** node is a Comment node. */\n    readonly COMMENT_NODE: 8;\n    /** node is a document. */\n    readonly DOCUMENT_NODE: 9;\n    /** node is a doctype. */\n    readonly DOCUMENT_TYPE_NODE: 10;\n    /** node is a DocumentFragment node. */\n    readonly DOCUMENT_FRAGMENT_NODE: 11;\n    readonly NOTATION_NODE: 12;\n    /** Set when node and other are not in the same tree. */\n    readonly DOCUMENT_POSITION_DISCONNECTED: 0x01;\n    /** Set when other is preceding node. */\n    readonly DOCUMENT_POSITION_PRECEDING: 0x02;\n    /** Set when other is following node. */\n    readonly DOCUMENT_POSITION_FOLLOWING: 0x04;\n    /** Set when other is an ancestor of node. */\n    readonly DOCUMENT_POSITION_CONTAINS: 0x08;\n    /** Set when other is a descendant of node. */\n    readonly DOCUMENT_POSITION_CONTAINED_BY: 0x10;\n    readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20;\n}\n\ndeclare var Node: {\n    prototype: Node;\n    new(): Node;\n    /** node is an element. */\n    readonly ELEMENT_NODE: 1;\n    readonly ATTRIBUTE_NODE: 2;\n    /** node is a Text node. */\n    readonly TEXT_NODE: 3;\n    /** node is a CDATASection node. */\n    readonly CDATA_SECTION_NODE: 4;\n    readonly ENTITY_REFERENCE_NODE: 5;\n    readonly ENTITY_NODE: 6;\n    /** node is a ProcessingInstruction node. */\n    readonly PROCESSING_INSTRUCTION_NODE: 7;\n    /** node is a Comment node. */\n    readonly COMMENT_NODE: 8;\n    /** node is a document. */\n    readonly DOCUMENT_NODE: 9;\n    /** node is a doctype. */\n    readonly DOCUMENT_TYPE_NODE: 10;\n    /** node is a DocumentFragment node. */\n    readonly DOCUMENT_FRAGMENT_NODE: 11;\n    readonly NOTATION_NODE: 12;\n    /** Set when node and other are not in the same tree. */\n    readonly DOCUMENT_POSITION_DISCONNECTED: 0x01;\n    /** Set when other is preceding node. */\n    readonly DOCUMENT_POSITION_PRECEDING: 0x02;\n    /** Set when other is following node. */\n    readonly DOCUMENT_POSITION_FOLLOWING: 0x04;\n    /** Set when other is an ancestor of node. */\n    readonly DOCUMENT_POSITION_CONTAINS: 0x08;\n    /** Set when other is a descendant of node. */\n    readonly DOCUMENT_POSITION_CONTAINED_BY: 0x10;\n    readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20;\n};\n\n/** An iterator over the members of a list of the nodes in a subtree of the DOM. The nodes will be returned in document order. */\ninterface NodeIterator {\n    readonly filter: NodeFilter | null;\n    readonly pointerBeforeReferenceNode: boolean;\n    readonly referenceNode: Node;\n    readonly root: Node;\n    readonly whatToShow: number;\n    /** @deprecated */\n    detach(): void;\n    nextNode(): Node | null;\n    previousNode(): Node | null;\n}\n\ndeclare var NodeIterator: {\n    prototype: NodeIterator;\n    new(): NodeIterator;\n};\n\n/** NodeList objects are collections of nodes, usually returned by properties such as Node.childNodes and methods such as document.querySelectorAll(). */\ninterface NodeList {\n    /** Returns the number of nodes in the collection. */\n    readonly length: number;\n    /** Returns the node with index index from the collection. The nodes are sorted in tree order. */\n    item(index: number): Node | null;\n    /**\n     * Performs the specified action for each node in an list.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the list.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: Node, key: number, parent: NodeList) => void, thisArg?: any): void;\n    [index: number]: Node;\n}\n\ndeclare var NodeList: {\n    prototype: NodeList;\n    new(): NodeList;\n};\n\ninterface NodeListOf<TNode extends Node> extends NodeList {\n    item(index: number): TNode;\n    /**\n     * Performs the specified action for each node in an list.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the list.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: TNode, key: number, parent: NodeListOf<TNode>) => void, thisArg?: any): void;\n    [index: number]: TNode;\n}\n\ninterface NonDocumentTypeChildNode {\n    /** Returns the first following sibling that is an element, and null otherwise. */\n    readonly nextElementSibling: Element | null;\n    /** Returns the first preceding sibling that is an element, and null otherwise. */\n    readonly previousElementSibling: Element | null;\n}\n\ninterface NonElementParentNode {\n    /** Returns the first element within node's descendants whose ID is elementId. */\n    getElementById(elementId: string): Element | null;\n}\n\ninterface NotificationEventMap {\n    \"click\": Event;\n    \"close\": Event;\n    \"error\": Event;\n    \"show\": Event;\n}\n\n/** This Notifications API interface is used to configure and display desktop notifications to the user. */\ninterface Notification extends EventTarget {\n    readonly body: string;\n    readonly data: any;\n    readonly dir: NotificationDirection;\n    readonly icon: string;\n    readonly lang: string;\n    onclick: ((this: Notification, ev: Event) => any) | null;\n    onclose: ((this: Notification, ev: Event) => any) | null;\n    onerror: ((this: Notification, ev: Event) => any) | null;\n    onshow: ((this: Notification, ev: Event) => any) | null;\n    readonly tag: string;\n    readonly title: string;\n    close(): void;\n    addEventListener<K extends keyof NotificationEventMap>(type: K, listener: (this: Notification, ev: NotificationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof NotificationEventMap>(type: K, listener: (this: Notification, ev: NotificationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Notification: {\n    prototype: Notification;\n    new(title: string, options?: NotificationOptions): Notification;\n    readonly permission: NotificationPermission;\n    requestPermission(deprecatedCallback?: NotificationPermissionCallback): Promise<NotificationPermission>;\n};\n\ninterface OES_draw_buffers_indexed {\n    blendEquationSeparateiOES(buf: GLuint, modeRGB: GLenum, modeAlpha: GLenum): void;\n    blendEquationiOES(buf: GLuint, mode: GLenum): void;\n    blendFuncSeparateiOES(buf: GLuint, srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void;\n    blendFunciOES(buf: GLuint, src: GLenum, dst: GLenum): void;\n    colorMaskiOES(buf: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean): void;\n    disableiOES(target: GLenum, index: GLuint): void;\n    enableiOES(target: GLenum, index: GLuint): void;\n}\n\n/** The OES_element_index_uint extension is part of the WebGL API and adds support for gl.UNSIGNED_INT types to WebGLRenderingContext.drawElements(). */\ninterface OES_element_index_uint {\n}\n\ninterface OES_fbo_render_mipmap {\n}\n\n/** The OES_standard_derivatives extension is part of the WebGL API and adds the GLSL derivative functions dFdx, dFdy, and fwidth. */\ninterface OES_standard_derivatives {\n    readonly FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 0x8B8B;\n}\n\n/** The OES_texture_float extension is part of the WebGL API and exposes floating-point pixel types for textures. */\ninterface OES_texture_float {\n}\n\n/** The OES_texture_float_linear extension is part of the WebGL API and allows linear filtering with floating-point pixel types for textures. */\ninterface OES_texture_float_linear {\n}\n\n/** The OES_texture_half_float extension is part of the WebGL API and adds texture formats with 16- (aka half float) and 32-bit floating-point components. */\ninterface OES_texture_half_float {\n    readonly HALF_FLOAT_OES: 0x8D61;\n}\n\n/** The OES_texture_half_float_linear extension is part of the WebGL API and allows linear filtering with half floating-point pixel types for textures. */\ninterface OES_texture_half_float_linear {\n}\n\ninterface OES_vertex_array_object {\n    bindVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES | null): void;\n    createVertexArrayOES(): WebGLVertexArrayObjectOES | null;\n    deleteVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES | null): void;\n    isVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES | null): GLboolean;\n    readonly VERTEX_ARRAY_BINDING_OES: 0x85B5;\n}\n\ninterface OVR_multiview2 {\n    framebufferTextureMultiviewOVR(target: GLenum, attachment: GLenum, texture: WebGLTexture | null, level: GLint, baseViewIndex: GLint, numViews: GLsizei): void;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR: 0x9630;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR: 0x9632;\n    readonly MAX_VIEWS_OVR: 0x9631;\n    readonly FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: 0x9633;\n}\n\n/** The Web Audio API OfflineAudioCompletionEvent interface represents events that occur when the processing of an OfflineAudioContext is terminated. The complete event implements this interface. */\ninterface OfflineAudioCompletionEvent extends Event {\n    readonly renderedBuffer: AudioBuffer;\n}\n\ndeclare var OfflineAudioCompletionEvent: {\n    prototype: OfflineAudioCompletionEvent;\n    new(type: string, eventInitDict: OfflineAudioCompletionEventInit): OfflineAudioCompletionEvent;\n};\n\ninterface OfflineAudioContextEventMap extends BaseAudioContextEventMap {\n    \"complete\": OfflineAudioCompletionEvent;\n}\n\n/** An AudioContext interface representing an audio-processing graph built from linked together AudioNodes. In contrast with a standard AudioContext, an OfflineAudioContext doesn't render the audio to the device hardware; instead, it generates it, as fast as it can, and outputs the result to an AudioBuffer. */\ninterface OfflineAudioContext extends BaseAudioContext {\n    readonly length: number;\n    oncomplete: ((this: OfflineAudioContext, ev: OfflineAudioCompletionEvent) => any) | null;\n    resume(): Promise<void>;\n    startRendering(): Promise<AudioBuffer>;\n    suspend(suspendTime: number): Promise<void>;\n    addEventListener<K extends keyof OfflineAudioContextEventMap>(type: K, listener: (this: OfflineAudioContext, ev: OfflineAudioContextEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof OfflineAudioContextEventMap>(type: K, listener: (this: OfflineAudioContext, ev: OfflineAudioContextEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var OfflineAudioContext: {\n    prototype: OfflineAudioContext;\n    new(contextOptions: OfflineAudioContextOptions): OfflineAudioContext;\n    new(numberOfChannels: number, length: number, sampleRate: number): OfflineAudioContext;\n};\n\ninterface OffscreenCanvasEventMap {\n    \"contextlost\": Event;\n    \"contextrestored\": Event;\n}\n\ninterface OffscreenCanvas extends EventTarget {\n    /**\n     * These attributes return the dimensions of the OffscreenCanvas object's bitmap.\n     *\n     * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it).\n     */\n    height: number;\n    oncontextlost: ((this: OffscreenCanvas, ev: Event) => any) | null;\n    oncontextrestored: ((this: OffscreenCanvas, ev: Event) => any) | null;\n    /**\n     * These attributes return the dimensions of the OffscreenCanvas object's bitmap.\n     *\n     * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it).\n     */\n    width: number;\n    /**\n     * Returns a promise that will fulfill with a new Blob object representing a file containing the image in the OffscreenCanvas object.\n     *\n     * The argument, if provided, is a dictionary that controls the encoding options of the image file to be created. The type field specifies the file format and has a default value of \"image/png\"; that type is also used if the requested type isn't supported. If the image format supports variable quality (such as \"image/jpeg\"), then the quality field is a number in the range 0.0 to 1.0 inclusive indicating the desired quality level for the resulting image.\n     */\n    convertToBlob(options?: ImageEncodeOptions): Promise<Blob>;\n    /**\n     * Returns an object that exposes an API for drawing on the OffscreenCanvas object. contextId specifies the desired API: \"2d\", \"bitmaprenderer\", \"webgl\", or \"webgl2\". options is handled by that API.\n     *\n     * This specification defines the \"2d\" context below, which is similar but distinct from the \"2d\" context that is created from a canvas element. The WebGL specifications define the \"webgl\" and \"webgl2\" contexts. [WEBGL]\n     *\n     * Returns null if the canvas has already been initialized with another context type (e.g., trying to get a \"2d\" context after getting a \"webgl\" context).\n     */\n    getContext(contextId: \"2d\", options?: any): OffscreenCanvasRenderingContext2D | null;\n    getContext(contextId: \"bitmaprenderer\", options?: any): ImageBitmapRenderingContext | null;\n    getContext(contextId: \"webgl\", options?: any): WebGLRenderingContext | null;\n    getContext(contextId: \"webgl2\", options?: any): WebGL2RenderingContext | null;\n    getContext(contextId: OffscreenRenderingContextId, options?: any): OffscreenRenderingContext | null;\n    /** Returns a newly created ImageBitmap object with the image in the OffscreenCanvas object. The image in the OffscreenCanvas object is replaced with a new blank image. */\n    transferToImageBitmap(): ImageBitmap;\n    addEventListener<K extends keyof OffscreenCanvasEventMap>(type: K, listener: (this: OffscreenCanvas, ev: OffscreenCanvasEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof OffscreenCanvasEventMap>(type: K, listener: (this: OffscreenCanvas, ev: OffscreenCanvasEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var OffscreenCanvas: {\n    prototype: OffscreenCanvas;\n    new(width: number, height: number): OffscreenCanvas;\n};\n\ninterface OffscreenCanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform {\n    readonly canvas: OffscreenCanvas;\n    commit(): void;\n}\n\ndeclare var OffscreenCanvasRenderingContext2D: {\n    prototype: OffscreenCanvasRenderingContext2D;\n    new(): OffscreenCanvasRenderingContext2D;\n};\n\n/** The OscillatorNode\\xA0interface represents a periodic waveform, such as a sine wave. It is an AudioScheduledSourceNode audio-processing module that causes a specified frequency\\xA0of a given wave to be created\\u2014in effect, a constant tone. */\ninterface OscillatorNode extends AudioScheduledSourceNode {\n    readonly detune: AudioParam;\n    readonly frequency: AudioParam;\n    type: OscillatorType;\n    setPeriodicWave(periodicWave: PeriodicWave): void;\n    addEventListener<K extends keyof AudioScheduledSourceNodeEventMap>(type: K, listener: (this: OscillatorNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AudioScheduledSourceNodeEventMap>(type: K, listener: (this: OscillatorNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var OscillatorNode: {\n    prototype: OscillatorNode;\n    new(context: BaseAudioContext, options?: OscillatorOptions): OscillatorNode;\n};\n\ninterface OverconstrainedError extends Error {\n    readonly constraint: string;\n}\n\ndeclare var OverconstrainedError: {\n    prototype: OverconstrainedError;\n    new(constraint: string, message?: string): OverconstrainedError;\n};\n\n/** The PageTransitionEvent is fired when a document is being loaded or unloaded. */\ninterface PageTransitionEvent extends Event {\n    /**\n     * For the pageshow event, returns false if the page is newly being loaded (and the load event will fire). Otherwise, returns true.\n     *\n     * For the pagehide event, returns false if the page is going away for the last time. Otherwise, returns true, meaning that (if nothing conspires to make the page unsalvageable) the page might be reused if the user navigates back to this page.\n     *\n     * Things that can cause the page to be unsalvageable include:\n     *\n     * The user agent decided to not keep the Document alive in a session history entry after unload\n     * Having iframes that are not salvageable\n     * Active WebSocket objects\n     * Aborting a Document\n     */\n    readonly persisted: boolean;\n}\n\ndeclare var PageTransitionEvent: {\n    prototype: PageTransitionEvent;\n    new(type: string, eventInitDict?: PageTransitionEventInit): PageTransitionEvent;\n};\n\n/** A PannerNode always has exactly one input and one output: the input can be mono or stereo but the output is always stereo (2 channels); you can't have panning effects without at least two audio channels! */\ninterface PannerNode extends AudioNode {\n    coneInnerAngle: number;\n    coneOuterAngle: number;\n    coneOuterGain: number;\n    distanceModel: DistanceModelType;\n    maxDistance: number;\n    readonly orientationX: AudioParam;\n    readonly orientationY: AudioParam;\n    readonly orientationZ: AudioParam;\n    panningModel: PanningModelType;\n    readonly positionX: AudioParam;\n    readonly positionY: AudioParam;\n    readonly positionZ: AudioParam;\n    refDistance: number;\n    rolloffFactor: number;\n    /** @deprecated */\n    setOrientation(x: number, y: number, z: number): void;\n    /** @deprecated */\n    setPosition(x: number, y: number, z: number): void;\n}\n\ndeclare var PannerNode: {\n    prototype: PannerNode;\n    new(context: BaseAudioContext, options?: PannerOptions): PannerNode;\n};\n\ninterface ParentNode extends Node {\n    readonly childElementCount: number;\n    /** Returns the child elements. */\n    readonly children: HTMLCollection;\n    /** Returns the first child that is an element, and null otherwise. */\n    readonly firstElementChild: Element | null;\n    /** Returns the last child that is an element, and null otherwise. */\n    readonly lastElementChild: Element | null;\n    /**\n     * Inserts nodes after the last child of node, while replacing strings in nodes with equivalent Text nodes.\n     *\n     * Throws a \"HierarchyRequestError\" DOMException if the constraints of the node tree are violated.\n     */\n    append(...nodes: (Node | string)[]): void;\n    /**\n     * Inserts nodes before the first child of node, while replacing strings in nodes with equivalent Text nodes.\n     *\n     * Throws a \"HierarchyRequestError\" DOMException if the constraints of the node tree are violated.\n     */\n    prepend(...nodes: (Node | string)[]): void;\n    /** Returns the first element that is a descendant of node that matches selectors. */\n    querySelector<K extends keyof HTMLElementTagNameMap>(selectors: K): HTMLElementTagNameMap[K] | null;\n    querySelector<K extends keyof SVGElementTagNameMap>(selectors: K): SVGElementTagNameMap[K] | null;\n    querySelector<K extends keyof MathMLElementTagNameMap>(selectors: K): MathMLElementTagNameMap[K] | null;\n    /** @deprecated */\n    querySelector<K extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K): HTMLElementDeprecatedTagNameMap[K] | null;\n    querySelector<E extends Element = Element>(selectors: string): E | null;\n    /** Returns all element descendants of node that match selectors. */\n    querySelectorAll<K extends keyof HTMLElementTagNameMap>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;\n    querySelectorAll<K extends keyof SVGElementTagNameMap>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;\n    querySelectorAll<K extends keyof MathMLElementTagNameMap>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;\n    /** @deprecated */\n    querySelectorAll<K extends keyof HTMLElementDeprecatedTagNameMap>(selectors: K): NodeListOf<HTMLElementDeprecatedTagNameMap[K]>;\n    querySelectorAll<E extends Element = Element>(selectors: string): NodeListOf<E>;\n    /**\n     * Replace all children of node with nodes, while replacing strings in nodes with equivalent Text nodes.\n     *\n     * Throws a \"HierarchyRequestError\" DOMException if the constraints of the node tree are violated.\n     */\n    replaceChildren(...nodes: (Node | string)[]): void;\n}\n\n/** This Canvas 2D API interface is used to declare a path that can then be used on a CanvasRenderingContext2D object. The path methods of the CanvasRenderingContext2D interface are also present on this interface, which gives you the convenience of being able to retain and replay your path whenever desired. */\ninterface Path2D extends CanvasPath {\n    /** Adds to the path the path given by the argument. */\n    addPath(path: Path2D, transform?: DOMMatrix2DInit): void;\n}\n\ndeclare var Path2D: {\n    prototype: Path2D;\n    new(path?: Path2D | string): Path2D;\n};\n\n/** Available only in secure contexts. */\ninterface PaymentMethodChangeEvent extends PaymentRequestUpdateEvent {\n    readonly methodDetails: any;\n    readonly methodName: string;\n}\n\ndeclare var PaymentMethodChangeEvent: {\n    prototype: PaymentMethodChangeEvent;\n    new(type: string, eventInitDict?: PaymentMethodChangeEventInit): PaymentMethodChangeEvent;\n};\n\ninterface PaymentRequestEventMap {\n    \"paymentmethodchange\": Event;\n}\n\n/**\n * This Payment Request API interface is the primary access point into the API, and lets web content and apps accept payments from the end user.\n * Available only in secure contexts.\n */\ninterface PaymentRequest extends EventTarget {\n    readonly id: string;\n    onpaymentmethodchange: ((this: PaymentRequest, ev: Event) => any) | null;\n    abort(): Promise<void>;\n    canMakePayment(): Promise<boolean>;\n    show(detailsPromise?: PaymentDetailsUpdate | PromiseLike<PaymentDetailsUpdate>): Promise<PaymentResponse>;\n    addEventListener<K extends keyof PaymentRequestEventMap>(type: K, listener: (this: PaymentRequest, ev: PaymentRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof PaymentRequestEventMap>(type: K, listener: (this: PaymentRequest, ev: PaymentRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var PaymentRequest: {\n    prototype: PaymentRequest;\n    new(methodData: PaymentMethodData[], details: PaymentDetailsInit): PaymentRequest;\n};\n\n/**\n * This Payment Request API interface enables a web page to update the details of a PaymentRequest in response to a user action.\n * Available only in secure contexts.\n */\ninterface PaymentRequestUpdateEvent extends Event {\n    updateWith(detailsPromise: PaymentDetailsUpdate | PromiseLike<PaymentDetailsUpdate>): void;\n}\n\ndeclare var PaymentRequestUpdateEvent: {\n    prototype: PaymentRequestUpdateEvent;\n    new(type: string, eventInitDict?: PaymentRequestUpdateEventInit): PaymentRequestUpdateEvent;\n};\n\n/**\n * This Payment Request API interface is returned after a user selects a payment method and approves a payment request.\n * Available only in secure contexts.\n */\ninterface PaymentResponse extends EventTarget {\n    readonly details: any;\n    readonly methodName: string;\n    readonly requestId: string;\n    complete(result?: PaymentComplete): Promise<void>;\n    retry(errorFields?: PaymentValidationErrors): Promise<void>;\n    toJSON(): any;\n}\n\ndeclare var PaymentResponse: {\n    prototype: PaymentResponse;\n    new(): PaymentResponse;\n};\n\ninterface PerformanceEventMap {\n    \"resourcetimingbufferfull\": Event;\n}\n\n/** Provides access to performance-related information for the current page. It's part of the High Resolution Time API, but is enhanced by the Performance Timeline API, the Navigation Timing API, the User Timing API, and the Resource Timing API. */\ninterface Performance extends EventTarget {\n    readonly eventCounts: EventCounts;\n    /** @deprecated */\n    readonly navigation: PerformanceNavigation;\n    onresourcetimingbufferfull: ((this: Performance, ev: Event) => any) | null;\n    readonly timeOrigin: DOMHighResTimeStamp;\n    /** @deprecated */\n    readonly timing: PerformanceTiming;\n    clearMarks(markName?: string): void;\n    clearMeasures(measureName?: string): void;\n    clearResourceTimings(): void;\n    getEntries(): PerformanceEntryList;\n    getEntriesByName(name: string, type?: string): PerformanceEntryList;\n    getEntriesByType(type: string): PerformanceEntryList;\n    mark(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark;\n    measure(measureName: string, startOrMeasureOptions?: string | PerformanceMeasureOptions, endMark?: string): PerformanceMeasure;\n    now(): DOMHighResTimeStamp;\n    setResourceTimingBufferSize(maxSize: number): void;\n    toJSON(): any;\n    addEventListener<K extends keyof PerformanceEventMap>(type: K, listener: (this: Performance, ev: PerformanceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof PerformanceEventMap>(type: K, listener: (this: Performance, ev: PerformanceEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Performance: {\n    prototype: Performance;\n    new(): Performance;\n};\n\n/** Encapsulates a single performance metric that is part of the performance timeline. A performance entry can be directly created by making a performance mark or measure (for example by calling the mark() method) at an explicit point in an application. Performance entries are also created in indirect ways such as loading a resource (such as an image). */\ninterface PerformanceEntry {\n    readonly duration: DOMHighResTimeStamp;\n    readonly entryType: string;\n    readonly name: string;\n    readonly startTime: DOMHighResTimeStamp;\n    toJSON(): any;\n}\n\ndeclare var PerformanceEntry: {\n    prototype: PerformanceEntry;\n    new(): PerformanceEntry;\n};\n\ninterface PerformanceEventTiming extends PerformanceEntry {\n    readonly cancelable: boolean;\n    readonly processingEnd: DOMHighResTimeStamp;\n    readonly processingStart: DOMHighResTimeStamp;\n    readonly target: Node | null;\n    toJSON(): any;\n}\n\ndeclare var PerformanceEventTiming: {\n    prototype: PerformanceEventTiming;\n    new(): PerformanceEventTiming;\n};\n\n/** PerformanceMark\\xA0is an abstract interface for PerformanceEntry objects with an entryType of \"mark\". Entries of this type are created by calling performance.mark() to add a named DOMHighResTimeStamp (the mark) to the browser's performance timeline. */\ninterface PerformanceMark extends PerformanceEntry {\n    readonly detail: any;\n}\n\ndeclare var PerformanceMark: {\n    prototype: PerformanceMark;\n    new(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark;\n};\n\n/** PerformanceMeasure is an abstract interface for PerformanceEntry objects with an entryType of \"measure\". Entries of this type are created by calling performance.measure() to add a named DOMHighResTimeStamp (the measure) between two marks to the browser's performance timeline. */\ninterface PerformanceMeasure extends PerformanceEntry {\n    readonly detail: any;\n}\n\ndeclare var PerformanceMeasure: {\n    prototype: PerformanceMeasure;\n    new(): PerformanceMeasure;\n};\n\n/**\n * The legacy PerformanceNavigation interface represents information about how the navigation to the current document was done.\n * @deprecated This interface is deprecated in the Navigation Timing Level 2 specification. Please use the PerformanceNavigationTiming interface instead.\n */\ninterface PerformanceNavigation {\n    /** @deprecated */\n    readonly redirectCount: number;\n    /** @deprecated */\n    readonly type: number;\n    /** @deprecated */\n    toJSON(): any;\n    readonly TYPE_NAVIGATE: 0;\n    readonly TYPE_RELOAD: 1;\n    readonly TYPE_BACK_FORWARD: 2;\n    readonly TYPE_RESERVED: 255;\n}\n\n/** @deprecated */\ndeclare var PerformanceNavigation: {\n    prototype: PerformanceNavigation;\n    new(): PerformanceNavigation;\n    readonly TYPE_NAVIGATE: 0;\n    readonly TYPE_RELOAD: 1;\n    readonly TYPE_BACK_FORWARD: 2;\n    readonly TYPE_RESERVED: 255;\n};\n\n/** Provides methods and properties to store and retrieve metrics regarding the browser's document navigation events. For example, this interface can be used to determine how much time it takes to load or unload a document. */\ninterface PerformanceNavigationTiming extends PerformanceResourceTiming {\n    readonly domComplete: DOMHighResTimeStamp;\n    readonly domContentLoadedEventEnd: DOMHighResTimeStamp;\n    readonly domContentLoadedEventStart: DOMHighResTimeStamp;\n    readonly domInteractive: DOMHighResTimeStamp;\n    readonly loadEventEnd: DOMHighResTimeStamp;\n    readonly loadEventStart: DOMHighResTimeStamp;\n    readonly redirectCount: number;\n    readonly type: NavigationTimingType;\n    readonly unloadEventEnd: DOMHighResTimeStamp;\n    readonly unloadEventStart: DOMHighResTimeStamp;\n    toJSON(): any;\n}\n\ndeclare var PerformanceNavigationTiming: {\n    prototype: PerformanceNavigationTiming;\n    new(): PerformanceNavigationTiming;\n};\n\ninterface PerformanceObserver {\n    disconnect(): void;\n    observe(options?: PerformanceObserverInit): void;\n    takeRecords(): PerformanceEntryList;\n}\n\ndeclare var PerformanceObserver: {\n    prototype: PerformanceObserver;\n    new(callback: PerformanceObserverCallback): PerformanceObserver;\n    readonly supportedEntryTypes: ReadonlyArray<string>;\n};\n\ninterface PerformanceObserverEntryList {\n    getEntries(): PerformanceEntryList;\n    getEntriesByName(name: string, type?: string): PerformanceEntryList;\n    getEntriesByType(type: string): PerformanceEntryList;\n}\n\ndeclare var PerformanceObserverEntryList: {\n    prototype: PerformanceObserverEntryList;\n    new(): PerformanceObserverEntryList;\n};\n\ninterface PerformancePaintTiming extends PerformanceEntry {\n}\n\ndeclare var PerformancePaintTiming: {\n    prototype: PerformancePaintTiming;\n    new(): PerformancePaintTiming;\n};\n\n/** Enables retrieval and analysis of detailed network timing data regarding the loading of an application's resources. An application can use the timing metrics to determine, for example, the length of time it takes to fetch a specific resource, such as an XMLHttpRequest, <SVG>, image, or script. */\ninterface PerformanceResourceTiming extends PerformanceEntry {\n    readonly connectEnd: DOMHighResTimeStamp;\n    readonly connectStart: DOMHighResTimeStamp;\n    readonly decodedBodySize: number;\n    readonly domainLookupEnd: DOMHighResTimeStamp;\n    readonly domainLookupStart: DOMHighResTimeStamp;\n    readonly encodedBodySize: number;\n    readonly fetchStart: DOMHighResTimeStamp;\n    readonly initiatorType: string;\n    readonly nextHopProtocol: string;\n    readonly redirectEnd: DOMHighResTimeStamp;\n    readonly redirectStart: DOMHighResTimeStamp;\n    readonly requestStart: DOMHighResTimeStamp;\n    readonly responseEnd: DOMHighResTimeStamp;\n    readonly responseStart: DOMHighResTimeStamp;\n    readonly secureConnectionStart: DOMHighResTimeStamp;\n    readonly serverTiming: ReadonlyArray<PerformanceServerTiming>;\n    readonly transferSize: number;\n    readonly workerStart: DOMHighResTimeStamp;\n    toJSON(): any;\n}\n\ndeclare var PerformanceResourceTiming: {\n    prototype: PerformanceResourceTiming;\n    new(): PerformanceResourceTiming;\n};\n\ninterface PerformanceServerTiming {\n    readonly description: string;\n    readonly duration: DOMHighResTimeStamp;\n    readonly name: string;\n    toJSON(): any;\n}\n\ndeclare var PerformanceServerTiming: {\n    prototype: PerformanceServerTiming;\n    new(): PerformanceServerTiming;\n};\n\n/**\n * A legacy interface kept for backwards compatibility and contains properties that offer performance timing information for various events which occur during the loading and use of the current page. You get a PerformanceTiming object describing your page using the window.performance.timing property.\n * @deprecated This interface is deprecated in the Navigation Timing Level 2 specification. Please use the PerformanceNavigationTiming interface instead.\n */\ninterface PerformanceTiming {\n    /** @deprecated */\n    readonly connectEnd: number;\n    /** @deprecated */\n    readonly connectStart: number;\n    /** @deprecated */\n    readonly domComplete: number;\n    /** @deprecated */\n    readonly domContentLoadedEventEnd: number;\n    /** @deprecated */\n    readonly domContentLoadedEventStart: number;\n    /** @deprecated */\n    readonly domInteractive: number;\n    /** @deprecated */\n    readonly domLoading: number;\n    /** @deprecated */\n    readonly domainLookupEnd: number;\n    /** @deprecated */\n    readonly domainLookupStart: number;\n    /** @deprecated */\n    readonly fetchStart: number;\n    /** @deprecated */\n    readonly loadEventEnd: number;\n    /** @deprecated */\n    readonly loadEventStart: number;\n    /** @deprecated */\n    readonly navigationStart: number;\n    /** @deprecated */\n    readonly redirectEnd: number;\n    /** @deprecated */\n    readonly redirectStart: number;\n    /** @deprecated */\n    readonly requestStart: number;\n    /** @deprecated */\n    readonly responseEnd: number;\n    /** @deprecated */\n    readonly responseStart: number;\n    /** @deprecated */\n    readonly secureConnectionStart: number;\n    /** @deprecated */\n    readonly unloadEventEnd: number;\n    /** @deprecated */\n    readonly unloadEventStart: number;\n    /** @deprecated */\n    toJSON(): any;\n}\n\n/** @deprecated */\ndeclare var PerformanceTiming: {\n    prototype: PerformanceTiming;\n    new(): PerformanceTiming;\n};\n\n/** PeriodicWave has no inputs or outputs; it is used to define custom oscillators when calling OscillatorNode.setPeriodicWave(). The PeriodicWave itself is created/returned by AudioContext.createPeriodicWave(). */\ninterface PeriodicWave {\n}\n\ndeclare var PeriodicWave: {\n    prototype: PeriodicWave;\n    new(context: BaseAudioContext, options?: PeriodicWaveOptions): PeriodicWave;\n};\n\ninterface PermissionStatusEventMap {\n    \"change\": Event;\n}\n\ninterface PermissionStatus extends EventTarget {\n    readonly name: string;\n    onchange: ((this: PermissionStatus, ev: Event) => any) | null;\n    readonly state: PermissionState;\n    addEventListener<K extends keyof PermissionStatusEventMap>(type: K, listener: (this: PermissionStatus, ev: PermissionStatusEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof PermissionStatusEventMap>(type: K, listener: (this: PermissionStatus, ev: PermissionStatusEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var PermissionStatus: {\n    prototype: PermissionStatus;\n    new(): PermissionStatus;\n};\n\ninterface Permissions {\n    query(permissionDesc: PermissionDescriptor): Promise<PermissionStatus>;\n}\n\ndeclare var Permissions: {\n    prototype: Permissions;\n    new(): Permissions;\n};\n\ninterface PictureInPictureEvent extends Event {\n    readonly pictureInPictureWindow: PictureInPictureWindow;\n}\n\ndeclare var PictureInPictureEvent: {\n    prototype: PictureInPictureEvent;\n    new(type: string, eventInitDict: PictureInPictureEventInit): PictureInPictureEvent;\n};\n\ninterface PictureInPictureWindowEventMap {\n    \"resize\": Event;\n}\n\ninterface PictureInPictureWindow extends EventTarget {\n    readonly height: number;\n    onresize: ((this: PictureInPictureWindow, ev: Event) => any) | null;\n    readonly width: number;\n    addEventListener<K extends keyof PictureInPictureWindowEventMap>(type: K, listener: (this: PictureInPictureWindow, ev: PictureInPictureWindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof PictureInPictureWindowEventMap>(type: K, listener: (this: PictureInPictureWindow, ev: PictureInPictureWindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var PictureInPictureWindow: {\n    prototype: PictureInPictureWindow;\n    new(): PictureInPictureWindow;\n};\n\n/**\n * Provides information about a browser plugin.\n * @deprecated\n */\ninterface Plugin {\n    /**\n     * Returns the plugin's description.\n     * @deprecated\n     */\n    readonly description: string;\n    /**\n     * Returns the plugin library's filename, if applicable on the current platform.\n     * @deprecated\n     */\n    readonly filename: string;\n    /**\n     * Returns the number of MIME types, represented by MimeType objects, supported by the plugin.\n     * @deprecated\n     */\n    readonly length: number;\n    /**\n     * Returns the plugin's name.\n     * @deprecated\n     */\n    readonly name: string;\n    /**\n     * Returns the specified MimeType object.\n     * @deprecated\n     */\n    item(index: number): MimeType | null;\n    /** @deprecated */\n    namedItem(name: string): MimeType | null;\n    [index: number]: MimeType;\n}\n\n/** @deprecated */\ndeclare var Plugin: {\n    prototype: Plugin;\n    new(): Plugin;\n};\n\n/**\n * Used to store a list of Plugin objects describing the available plugins; it's returned by the window.navigator.plugins\\xA0property. The PluginArray is not a JavaScript array, but has the length property and supports accessing individual items using bracket notation (plugins[2]), as well as via item(index) and namedItem(\"name\") methods.\n * @deprecated\n */\ninterface PluginArray {\n    /** @deprecated */\n    readonly length: number;\n    /** @deprecated */\n    item(index: number): Plugin | null;\n    /** @deprecated */\n    namedItem(name: string): Plugin | null;\n    /** @deprecated */\n    refresh(): void;\n    [index: number]: Plugin;\n}\n\n/** @deprecated */\ndeclare var PluginArray: {\n    prototype: PluginArray;\n    new(): PluginArray;\n};\n\n/** The state of a DOM event produced by a pointer such as the geometry of the contact point, the device type that generated the event, the amount of pressure that was applied on the contact surface, etc. */\ninterface PointerEvent extends MouseEvent {\n    readonly height: number;\n    readonly isPrimary: boolean;\n    readonly pointerId: number;\n    readonly pointerType: string;\n    readonly pressure: number;\n    readonly tangentialPressure: number;\n    readonly tiltX: number;\n    readonly tiltY: number;\n    readonly twist: number;\n    readonly width: number;\n    /** Available only in secure contexts. */\n    getCoalescedEvents(): PointerEvent[];\n    getPredictedEvents(): PointerEvent[];\n}\n\ndeclare var PointerEvent: {\n    prototype: PointerEvent;\n    new(type: string, eventInitDict?: PointerEventInit): PointerEvent;\n};\n\n/** PopStateEvent is an event handler for the popstate event on the window. */\ninterface PopStateEvent extends Event {\n    /** Returns a copy of the information that was provided to pushState() or replaceState(). */\n    readonly state: any;\n}\n\ndeclare var PopStateEvent: {\n    prototype: PopStateEvent;\n    new(type: string, eventInitDict?: PopStateEventInit): PopStateEvent;\n};\n\n/** A processing instruction embeds application-specific instructions in XML which can be ignored by other applications that don't recognize them. */\ninterface ProcessingInstruction extends CharacterData, LinkStyle {\n    readonly ownerDocument: Document;\n    readonly target: string;\n}\n\ndeclare var ProcessingInstruction: {\n    prototype: ProcessingInstruction;\n    new(): ProcessingInstruction;\n};\n\n/** Events measuring progress of an underlying process, like an HTTP request (for an XMLHttpRequest, or the loading of the underlying resource of an <img>, <audio>, <video>, <style> or <link>). */\ninterface ProgressEvent<T extends EventTarget = EventTarget> extends Event {\n    readonly lengthComputable: boolean;\n    readonly loaded: number;\n    readonly target: T | null;\n    readonly total: number;\n}\n\ndeclare var ProgressEvent: {\n    prototype: ProgressEvent;\n    new(type: string, eventInitDict?: ProgressEventInit): ProgressEvent;\n};\n\ninterface PromiseRejectionEvent extends Event {\n    readonly promise: Promise<any>;\n    readonly reason: any;\n}\n\ndeclare var PromiseRejectionEvent: {\n    prototype: PromiseRejectionEvent;\n    new(type: string, eventInitDict: PromiseRejectionEventInit): PromiseRejectionEvent;\n};\n\n/** Available only in secure contexts. */\ninterface PublicKeyCredential extends Credential {\n    readonly authenticatorAttachment: string | null;\n    readonly rawId: ArrayBuffer;\n    readonly response: AuthenticatorResponse;\n    getClientExtensionResults(): AuthenticationExtensionsClientOutputs;\n}\n\ndeclare var PublicKeyCredential: {\n    prototype: PublicKeyCredential;\n    new(): PublicKeyCredential;\n    isConditionalMediationAvailable(): Promise<boolean>;\n    isUserVerifyingPlatformAuthenticatorAvailable(): Promise<boolean>;\n};\n\n/**\n * This Push API interface provides a way to receive notifications from third-party servers as well as request URLs for push notifications.\n * Available only in secure contexts.\n */\ninterface PushManager {\n    getSubscription(): Promise<PushSubscription | null>;\n    permissionState(options?: PushSubscriptionOptionsInit): Promise<PermissionState>;\n    subscribe(options?: PushSubscriptionOptionsInit): Promise<PushSubscription>;\n}\n\ndeclare var PushManager: {\n    prototype: PushManager;\n    new(): PushManager;\n    readonly supportedContentEncodings: ReadonlyArray<string>;\n};\n\n/**\n * This Push API interface provides a subcription's URL endpoint and allows unsubscription from a push service.\n * Available only in secure contexts.\n */\ninterface PushSubscription {\n    readonly endpoint: string;\n    readonly expirationTime: EpochTimeStamp | null;\n    readonly options: PushSubscriptionOptions;\n    getKey(name: PushEncryptionKeyName): ArrayBuffer | null;\n    toJSON(): PushSubscriptionJSON;\n    unsubscribe(): Promise<boolean>;\n}\n\ndeclare var PushSubscription: {\n    prototype: PushSubscription;\n    new(): PushSubscription;\n};\n\n/** Available only in secure contexts. */\ninterface PushSubscriptionOptions {\n    readonly applicationServerKey: ArrayBuffer | null;\n    readonly userVisibleOnly: boolean;\n}\n\ndeclare var PushSubscriptionOptions: {\n    prototype: PushSubscriptionOptions;\n    new(): PushSubscriptionOptions;\n};\n\ninterface RTCCertificate {\n    readonly expires: EpochTimeStamp;\n    getFingerprints(): RTCDtlsFingerprint[];\n}\n\ndeclare var RTCCertificate: {\n    prototype: RTCCertificate;\n    new(): RTCCertificate;\n};\n\ninterface RTCDTMFSenderEventMap {\n    \"tonechange\": RTCDTMFToneChangeEvent;\n}\n\ninterface RTCDTMFSender extends EventTarget {\n    readonly canInsertDTMF: boolean;\n    ontonechange: ((this: RTCDTMFSender, ev: RTCDTMFToneChangeEvent) => any) | null;\n    readonly toneBuffer: string;\n    insertDTMF(tones: string, duration?: number, interToneGap?: number): void;\n    addEventListener<K extends keyof RTCDTMFSenderEventMap>(type: K, listener: (this: RTCDTMFSender, ev: RTCDTMFSenderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof RTCDTMFSenderEventMap>(type: K, listener: (this: RTCDTMFSender, ev: RTCDTMFSenderEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var RTCDTMFSender: {\n    prototype: RTCDTMFSender;\n    new(): RTCDTMFSender;\n};\n\n/** Events sent to indicate that DTMF tones have started or finished playing. This interface is used by the tonechange event. */\ninterface RTCDTMFToneChangeEvent extends Event {\n    readonly tone: string;\n}\n\ndeclare var RTCDTMFToneChangeEvent: {\n    prototype: RTCDTMFToneChangeEvent;\n    new(type: string, eventInitDict?: RTCDTMFToneChangeEventInit): RTCDTMFToneChangeEvent;\n};\n\ninterface RTCDataChannelEventMap {\n    \"bufferedamountlow\": Event;\n    \"close\": Event;\n    \"closing\": Event;\n    \"error\": Event;\n    \"message\": MessageEvent;\n    \"open\": Event;\n}\n\ninterface RTCDataChannel extends EventTarget {\n    binaryType: BinaryType;\n    readonly bufferedAmount: number;\n    bufferedAmountLowThreshold: number;\n    readonly id: number | null;\n    readonly label: string;\n    readonly maxPacketLifeTime: number | null;\n    readonly maxRetransmits: number | null;\n    readonly negotiated: boolean;\n    onbufferedamountlow: ((this: RTCDataChannel, ev: Event) => any) | null;\n    onclose: ((this: RTCDataChannel, ev: Event) => any) | null;\n    onclosing: ((this: RTCDataChannel, ev: Event) => any) | null;\n    onerror: ((this: RTCDataChannel, ev: Event) => any) | null;\n    onmessage: ((this: RTCDataChannel, ev: MessageEvent) => any) | null;\n    onopen: ((this: RTCDataChannel, ev: Event) => any) | null;\n    readonly ordered: boolean;\n    readonly protocol: string;\n    readonly readyState: RTCDataChannelState;\n    close(): void;\n    send(data: string): void;\n    send(data: Blob): void;\n    send(data: ArrayBuffer): void;\n    send(data: ArrayBufferView): void;\n    addEventListener<K extends keyof RTCDataChannelEventMap>(type: K, listener: (this: RTCDataChannel, ev: RTCDataChannelEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof RTCDataChannelEventMap>(type: K, listener: (this: RTCDataChannel, ev: RTCDataChannelEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var RTCDataChannel: {\n    prototype: RTCDataChannel;\n    new(): RTCDataChannel;\n};\n\ninterface RTCDataChannelEvent extends Event {\n    readonly channel: RTCDataChannel;\n}\n\ndeclare var RTCDataChannelEvent: {\n    prototype: RTCDataChannelEvent;\n    new(type: string, eventInitDict: RTCDataChannelEventInit): RTCDataChannelEvent;\n};\n\ninterface RTCDtlsTransportEventMap {\n    \"error\": Event;\n    \"statechange\": Event;\n}\n\ninterface RTCDtlsTransport extends EventTarget {\n    readonly iceTransport: RTCIceTransport;\n    onerror: ((this: RTCDtlsTransport, ev: Event) => any) | null;\n    onstatechange: ((this: RTCDtlsTransport, ev: Event) => any) | null;\n    readonly state: RTCDtlsTransportState;\n    getRemoteCertificates(): ArrayBuffer[];\n    addEventListener<K extends keyof RTCDtlsTransportEventMap>(type: K, listener: (this: RTCDtlsTransport, ev: RTCDtlsTransportEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof RTCDtlsTransportEventMap>(type: K, listener: (this: RTCDtlsTransport, ev: RTCDtlsTransportEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var RTCDtlsTransport: {\n    prototype: RTCDtlsTransport;\n    new(): RTCDtlsTransport;\n};\n\ninterface RTCEncodedAudioFrame {\n    data: ArrayBuffer;\n    readonly timestamp: number;\n    getMetadata(): RTCEncodedAudioFrameMetadata;\n}\n\ndeclare var RTCEncodedAudioFrame: {\n    prototype: RTCEncodedAudioFrame;\n    new(): RTCEncodedAudioFrame;\n};\n\ninterface RTCEncodedVideoFrame {\n    data: ArrayBuffer;\n    readonly timestamp: number;\n    readonly type: RTCEncodedVideoFrameType;\n    getMetadata(): RTCEncodedVideoFrameMetadata;\n}\n\ndeclare var RTCEncodedVideoFrame: {\n    prototype: RTCEncodedVideoFrame;\n    new(): RTCEncodedVideoFrame;\n};\n\ninterface RTCError extends DOMException {\n    readonly errorDetail: RTCErrorDetailType;\n    readonly receivedAlert: number | null;\n    readonly sctpCauseCode: number | null;\n    readonly sdpLineNumber: number | null;\n    readonly sentAlert: number | null;\n}\n\ndeclare var RTCError: {\n    prototype: RTCError;\n    new(init: RTCErrorInit, message?: string): RTCError;\n};\n\ninterface RTCErrorEvent extends Event {\n    readonly error: RTCError;\n}\n\ndeclare var RTCErrorEvent: {\n    prototype: RTCErrorEvent;\n    new(type: string, eventInitDict: RTCErrorEventInit): RTCErrorEvent;\n};\n\n/** The RTCIceCandidate interface\\u2014part of the WebRTC API\\u2014represents a candidate Internet Connectivity Establishment (ICE) configuration which may be used to establish an RTCPeerConnection. */\ninterface RTCIceCandidate {\n    readonly address: string | null;\n    readonly candidate: string;\n    readonly component: RTCIceComponent | null;\n    readonly foundation: string | null;\n    readonly port: number | null;\n    readonly priority: number | null;\n    readonly protocol: RTCIceProtocol | null;\n    readonly relatedAddress: string | null;\n    readonly relatedPort: number | null;\n    readonly sdpMLineIndex: number | null;\n    readonly sdpMid: string | null;\n    readonly tcpType: RTCIceTcpCandidateType | null;\n    readonly type: RTCIceCandidateType | null;\n    readonly usernameFragment: string | null;\n    toJSON(): RTCIceCandidateInit;\n}\n\ndeclare var RTCIceCandidate: {\n    prototype: RTCIceCandidate;\n    new(candidateInitDict?: RTCIceCandidateInit): RTCIceCandidate;\n};\n\ninterface RTCIceTransportEventMap {\n    \"gatheringstatechange\": Event;\n    \"statechange\": Event;\n}\n\n/** Provides access to information about the ICE transport layer over which the data is being sent and received. */\ninterface RTCIceTransport extends EventTarget {\n    readonly gatheringState: RTCIceGathererState;\n    ongatheringstatechange: ((this: RTCIceTransport, ev: Event) => any) | null;\n    onstatechange: ((this: RTCIceTransport, ev: Event) => any) | null;\n    readonly state: RTCIceTransportState;\n    addEventListener<K extends keyof RTCIceTransportEventMap>(type: K, listener: (this: RTCIceTransport, ev: RTCIceTransportEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof RTCIceTransportEventMap>(type: K, listener: (this: RTCIceTransport, ev: RTCIceTransportEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var RTCIceTransport: {\n    prototype: RTCIceTransport;\n    new(): RTCIceTransport;\n};\n\ninterface RTCPeerConnectionEventMap {\n    \"connectionstatechange\": Event;\n    \"datachannel\": RTCDataChannelEvent;\n    \"icecandidate\": RTCPeerConnectionIceEvent;\n    \"icecandidateerror\": Event;\n    \"iceconnectionstatechange\": Event;\n    \"icegatheringstatechange\": Event;\n    \"negotiationneeded\": Event;\n    \"signalingstatechange\": Event;\n    \"track\": RTCTrackEvent;\n}\n\n/** A WebRTC connection between the local computer and a remote peer. It provides methods to connect to a remote peer, maintain and monitor the connection, and close the connection once it's no longer needed. */\ninterface RTCPeerConnection extends EventTarget {\n    readonly canTrickleIceCandidates: boolean | null;\n    readonly connectionState: RTCPeerConnectionState;\n    readonly currentLocalDescription: RTCSessionDescription | null;\n    readonly currentRemoteDescription: RTCSessionDescription | null;\n    readonly iceConnectionState: RTCIceConnectionState;\n    readonly iceGatheringState: RTCIceGatheringState;\n    readonly localDescription: RTCSessionDescription | null;\n    onconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n    ondatachannel: ((this: RTCPeerConnection, ev: RTCDataChannelEvent) => any) | null;\n    onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null;\n    onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null;\n    oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n    onicegatheringstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n    onnegotiationneeded: ((this: RTCPeerConnection, ev: Event) => any) | null;\n    onsignalingstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null;\n    ontrack: ((this: RTCPeerConnection, ev: RTCTrackEvent) => any) | null;\n    readonly pendingLocalDescription: RTCSessionDescription | null;\n    readonly pendingRemoteDescription: RTCSessionDescription | null;\n    readonly remoteDescription: RTCSessionDescription | null;\n    readonly sctp: RTCSctpTransport | null;\n    readonly signalingState: RTCSignalingState;\n    addIceCandidate(candidate?: RTCIceCandidateInit): Promise<void>;\n    /** @deprecated */\n    addIceCandidate(candidate: RTCIceCandidateInit, successCallback: VoidFunction, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;\n    addTrack(track: MediaStreamTrack, ...streams: MediaStream[]): RTCRtpSender;\n    addTransceiver(trackOrKind: MediaStreamTrack | string, init?: RTCRtpTransceiverInit): RTCRtpTransceiver;\n    close(): void;\n    createAnswer(options?: RTCAnswerOptions): Promise<RTCSessionDescriptionInit>;\n    /** @deprecated */\n    createAnswer(successCallback: RTCSessionDescriptionCallback, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;\n    createDataChannel(label: string, dataChannelDict?: RTCDataChannelInit): RTCDataChannel;\n    createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit>;\n    /** @deprecated */\n    createOffer(successCallback: RTCSessionDescriptionCallback, failureCallback: RTCPeerConnectionErrorCallback, options?: RTCOfferOptions): Promise<void>;\n    getConfiguration(): RTCConfiguration;\n    getReceivers(): RTCRtpReceiver[];\n    getSenders(): RTCRtpSender[];\n    getStats(selector?: MediaStreamTrack | null): Promise<RTCStatsReport>;\n    getTransceivers(): RTCRtpTransceiver[];\n    removeTrack(sender: RTCRtpSender): void;\n    restartIce(): void;\n    setConfiguration(configuration?: RTCConfiguration): void;\n    setLocalDescription(description?: RTCLocalSessionDescriptionInit): Promise<void>;\n    /** @deprecated */\n    setLocalDescription(description: RTCLocalSessionDescriptionInit, successCallback: VoidFunction, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;\n    setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void>;\n    /** @deprecated */\n    setRemoteDescription(description: RTCSessionDescriptionInit, successCallback: VoidFunction, failureCallback: RTCPeerConnectionErrorCallback): Promise<void>;\n    addEventListener<K extends keyof RTCPeerConnectionEventMap>(type: K, listener: (this: RTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof RTCPeerConnectionEventMap>(type: K, listener: (this: RTCPeerConnection, ev: RTCPeerConnectionEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var RTCPeerConnection: {\n    prototype: RTCPeerConnection;\n    new(configuration?: RTCConfiguration): RTCPeerConnection;\n    generateCertificate(keygenAlgorithm: AlgorithmIdentifier): Promise<RTCCertificate>;\n};\n\ninterface RTCPeerConnectionIceErrorEvent extends Event {\n    readonly address: string | null;\n    readonly errorCode: number;\n    readonly errorText: string;\n    readonly port: number | null;\n    readonly url: string;\n}\n\ndeclare var RTCPeerConnectionIceErrorEvent: {\n    prototype: RTCPeerConnectionIceErrorEvent;\n    new(type: string, eventInitDict: RTCPeerConnectionIceErrorEventInit): RTCPeerConnectionIceErrorEvent;\n};\n\n/** Events that occurs in relation to ICE candidates with the target, usually an RTCPeerConnection. Only one event is of this type: icecandidate. */\ninterface RTCPeerConnectionIceEvent extends Event {\n    readonly candidate: RTCIceCandidate | null;\n}\n\ndeclare var RTCPeerConnectionIceEvent: {\n    prototype: RTCPeerConnectionIceEvent;\n    new(type: string, eventInitDict?: RTCPeerConnectionIceEventInit): RTCPeerConnectionIceEvent;\n};\n\n/** This WebRTC API interface manages the reception and decoding of data for a\\xA0MediaStreamTrack on an\\xA0RTCPeerConnection. */\ninterface RTCRtpReceiver {\n    readonly track: MediaStreamTrack;\n    readonly transport: RTCDtlsTransport | null;\n    getContributingSources(): RTCRtpContributingSource[];\n    getParameters(): RTCRtpReceiveParameters;\n    getStats(): Promise<RTCStatsReport>;\n    getSynchronizationSources(): RTCRtpSynchronizationSource[];\n}\n\ndeclare var RTCRtpReceiver: {\n    prototype: RTCRtpReceiver;\n    new(): RTCRtpReceiver;\n    getCapabilities(kind: string): RTCRtpCapabilities | null;\n};\n\n/** Provides the ability to control and obtain details about how a particular MediaStreamTrack is encoded and sent to a remote peer. */\ninterface RTCRtpSender {\n    readonly dtmf: RTCDTMFSender | null;\n    readonly track: MediaStreamTrack | null;\n    readonly transport: RTCDtlsTransport | null;\n    getParameters(): RTCRtpSendParameters;\n    getStats(): Promise<RTCStatsReport>;\n    replaceTrack(withTrack: MediaStreamTrack | null): Promise<void>;\n    setParameters(parameters: RTCRtpSendParameters): Promise<void>;\n    setStreams(...streams: MediaStream[]): void;\n}\n\ndeclare var RTCRtpSender: {\n    prototype: RTCRtpSender;\n    new(): RTCRtpSender;\n    getCapabilities(kind: string): RTCRtpCapabilities | null;\n};\n\ninterface RTCRtpTransceiver {\n    readonly currentDirection: RTCRtpTransceiverDirection | null;\n    direction: RTCRtpTransceiverDirection;\n    readonly mid: string | null;\n    readonly receiver: RTCRtpReceiver;\n    readonly sender: RTCRtpSender;\n    setCodecPreferences(codecs: RTCRtpCodecCapability[]): void;\n    stop(): void;\n}\n\ndeclare var RTCRtpTransceiver: {\n    prototype: RTCRtpTransceiver;\n    new(): RTCRtpTransceiver;\n};\n\ninterface RTCSctpTransportEventMap {\n    \"statechange\": Event;\n}\n\ninterface RTCSctpTransport extends EventTarget {\n    readonly maxChannels: number | null;\n    readonly maxMessageSize: number;\n    onstatechange: ((this: RTCSctpTransport, ev: Event) => any) | null;\n    readonly state: RTCSctpTransportState;\n    readonly transport: RTCDtlsTransport;\n    addEventListener<K extends keyof RTCSctpTransportEventMap>(type: K, listener: (this: RTCSctpTransport, ev: RTCSctpTransportEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof RTCSctpTransportEventMap>(type: K, listener: (this: RTCSctpTransport, ev: RTCSctpTransportEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var RTCSctpTransport: {\n    prototype: RTCSctpTransport;\n    new(): RTCSctpTransport;\n};\n\n/** One end of a connection\\u2014or potential connection\\u2014and how it's configured. Each RTCSessionDescription consists of a description type indicating which part of the offer/answer negotiation process it describes and of the SDP descriptor of the session. */\ninterface RTCSessionDescription {\n    readonly sdp: string;\n    readonly type: RTCSdpType;\n    toJSON(): any;\n}\n\ndeclare var RTCSessionDescription: {\n    prototype: RTCSessionDescription;\n    new(descriptionInitDict: RTCSessionDescriptionInit): RTCSessionDescription;\n};\n\ninterface RTCStatsReport {\n    forEach(callbackfn: (value: any, key: string, parent: RTCStatsReport) => void, thisArg?: any): void;\n}\n\ndeclare var RTCStatsReport: {\n    prototype: RTCStatsReport;\n    new(): RTCStatsReport;\n};\n\ninterface RTCTrackEvent extends Event {\n    readonly receiver: RTCRtpReceiver;\n    readonly streams: ReadonlyArray<MediaStream>;\n    readonly track: MediaStreamTrack;\n    readonly transceiver: RTCRtpTransceiver;\n}\n\ndeclare var RTCTrackEvent: {\n    prototype: RTCTrackEvent;\n    new(type: string, eventInitDict: RTCTrackEventInit): RTCTrackEvent;\n};\n\ninterface RadioNodeList extends NodeList {\n    value: string;\n}\n\ndeclare var RadioNodeList: {\n    prototype: RadioNodeList;\n    new(): RadioNodeList;\n};\n\n/** A fragment of a document that can contain nodes and parts of text nodes. */\ninterface Range extends AbstractRange {\n    /** Returns the node, furthest away from the document, that is an ancestor of both range's start node and end node. */\n    readonly commonAncestorContainer: Node;\n    cloneContents(): DocumentFragment;\n    cloneRange(): Range;\n    collapse(toStart?: boolean): void;\n    compareBoundaryPoints(how: number, sourceRange: Range): number;\n    /** Returns \\u22121 if the point is before the range, 0 if the point is in the range, and 1 if the point is after the range. */\n    comparePoint(node: Node, offset: number): number;\n    createContextualFragment(fragment: string): DocumentFragment;\n    deleteContents(): void;\n    detach(): void;\n    extractContents(): DocumentFragment;\n    getBoundingClientRect(): DOMRect;\n    getClientRects(): DOMRectList;\n    insertNode(node: Node): void;\n    /** Returns whether range intersects node. */\n    intersectsNode(node: Node): boolean;\n    isPointInRange(node: Node, offset: number): boolean;\n    selectNode(node: Node): void;\n    selectNodeContents(node: Node): void;\n    setEnd(node: Node, offset: number): void;\n    setEndAfter(node: Node): void;\n    setEndBefore(node: Node): void;\n    setStart(node: Node, offset: number): void;\n    setStartAfter(node: Node): void;\n    setStartBefore(node: Node): void;\n    surroundContents(newParent: Node): void;\n    toString(): string;\n    readonly START_TO_START: 0;\n    readonly START_TO_END: 1;\n    readonly END_TO_END: 2;\n    readonly END_TO_START: 3;\n}\n\ndeclare var Range: {\n    prototype: Range;\n    new(): Range;\n    readonly START_TO_START: 0;\n    readonly START_TO_END: 1;\n    readonly END_TO_END: 2;\n    readonly END_TO_START: 3;\n    toString(): string;\n};\n\ninterface ReadableByteStreamController {\n    readonly byobRequest: ReadableStreamBYOBRequest | null;\n    readonly desiredSize: number | null;\n    close(): void;\n    enqueue(chunk: ArrayBufferView): void;\n    error(e?: any): void;\n}\n\ndeclare var ReadableByteStreamController: {\n    prototype: ReadableByteStreamController;\n    new(): ReadableByteStreamController;\n};\n\n/** This Streams API interface represents a readable stream of byte data. The Fetch API offers a concrete instance of a ReadableStream through the body property of a Response object. */\ninterface ReadableStream<R = any> {\n    readonly locked: boolean;\n    cancel(reason?: any): Promise<void>;\n    getReader(options: { mode: \"byob\" }): ReadableStreamBYOBReader;\n    getReader(): ReadableStreamDefaultReader<R>;\n    getReader(options?: ReadableStreamGetReaderOptions): ReadableStreamReader<R>;\n    pipeThrough<T>(transform: ReadableWritablePair<T, R>, options?: StreamPipeOptions): ReadableStream<T>;\n    pipeTo(destination: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;\n    tee(): [ReadableStream<R>, ReadableStream<R>];\n}\n\ndeclare var ReadableStream: {\n    prototype: ReadableStream;\n    new(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number }): ReadableStream<Uint8Array>;\n    new<R = any>(underlyingSource: UnderlyingDefaultSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;\n    new<R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;\n};\n\ninterface ReadableStreamBYOBReader extends ReadableStreamGenericReader {\n    read<T extends ArrayBufferView>(view: T): Promise<ReadableStreamReadResult<T>>;\n    releaseLock(): void;\n}\n\ndeclare var ReadableStreamBYOBReader: {\n    prototype: ReadableStreamBYOBReader;\n    new(stream: ReadableStream): ReadableStreamBYOBReader;\n};\n\ninterface ReadableStreamBYOBRequest {\n    readonly view: ArrayBufferView | null;\n    respond(bytesWritten: number): void;\n    respondWithNewView(view: ArrayBufferView): void;\n}\n\ndeclare var ReadableStreamBYOBRequest: {\n    prototype: ReadableStreamBYOBRequest;\n    new(): ReadableStreamBYOBRequest;\n};\n\ninterface ReadableStreamDefaultController<R = any> {\n    readonly desiredSize: number | null;\n    close(): void;\n    enqueue(chunk?: R): void;\n    error(e?: any): void;\n}\n\ndeclare var ReadableStreamDefaultController: {\n    prototype: ReadableStreamDefaultController;\n    new(): ReadableStreamDefaultController;\n};\n\ninterface ReadableStreamDefaultReader<R = any> extends ReadableStreamGenericReader {\n    read(): Promise<ReadableStreamReadResult<R>>;\n    releaseLock(): void;\n}\n\ndeclare var ReadableStreamDefaultReader: {\n    prototype: ReadableStreamDefaultReader;\n    new<R = any>(stream: ReadableStream<R>): ReadableStreamDefaultReader<R>;\n};\n\ninterface ReadableStreamGenericReader {\n    readonly closed: Promise<undefined>;\n    cancel(reason?: any): Promise<void>;\n}\n\ninterface RemotePlaybackEventMap {\n    \"connect\": Event;\n    \"connecting\": Event;\n    \"disconnect\": Event;\n}\n\ninterface RemotePlayback extends EventTarget {\n    onconnect: ((this: RemotePlayback, ev: Event) => any) | null;\n    onconnecting: ((this: RemotePlayback, ev: Event) => any) | null;\n    ondisconnect: ((this: RemotePlayback, ev: Event) => any) | null;\n    readonly state: RemotePlaybackState;\n    cancelWatchAvailability(id?: number): Promise<void>;\n    prompt(): Promise<void>;\n    watchAvailability(callback: RemotePlaybackAvailabilityCallback): Promise<number>;\n    addEventListener<K extends keyof RemotePlaybackEventMap>(type: K, listener: (this: RemotePlayback, ev: RemotePlaybackEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof RemotePlaybackEventMap>(type: K, listener: (this: RemotePlayback, ev: RemotePlaybackEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var RemotePlayback: {\n    prototype: RemotePlayback;\n    new(): RemotePlayback;\n};\n\n/** This Fetch API interface represents a resource request. */\ninterface Request extends Body {\n    /** Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */\n    readonly cache: RequestCache;\n    /** Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */\n    readonly credentials: RequestCredentials;\n    /** Returns the kind of resource requested by request, e.g., \"document\" or \"script\". */\n    readonly destination: RequestDestination;\n    /** Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the \"Host\" header. */\n    readonly headers: Headers;\n    /** Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */\n    readonly integrity: string;\n    /** Returns a boolean indicating whether or not request can outlive the global in which it was created. */\n    readonly keepalive: boolean;\n    /** Returns request's HTTP method, which is \"GET\" by default. */\n    readonly method: string;\n    /** Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */\n    readonly mode: RequestMode;\n    /** Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */\n    readonly redirect: RequestRedirect;\n    /** Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and \"about:client\" when defaulting to the global's default. This is used during fetching to determine the value of the \\`Referer\\` header of the request being made. */\n    readonly referrer: string;\n    /** Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */\n    readonly referrerPolicy: ReferrerPolicy;\n    /** Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */\n    readonly signal: AbortSignal;\n    /** Returns the URL of request as a string. */\n    readonly url: string;\n    clone(): Request;\n}\n\ndeclare var Request: {\n    prototype: Request;\n    new(input: RequestInfo | URL, init?: RequestInit): Request;\n};\n\ninterface ResizeObserver {\n    disconnect(): void;\n    observe(target: Element, options?: ResizeObserverOptions): void;\n    unobserve(target: Element): void;\n}\n\ndeclare var ResizeObserver: {\n    prototype: ResizeObserver;\n    new(callback: ResizeObserverCallback): ResizeObserver;\n};\n\ninterface ResizeObserverEntry {\n    readonly borderBoxSize: ReadonlyArray<ResizeObserverSize>;\n    readonly contentBoxSize: ReadonlyArray<ResizeObserverSize>;\n    readonly contentRect: DOMRectReadOnly;\n    readonly devicePixelContentBoxSize: ReadonlyArray<ResizeObserverSize>;\n    readonly target: Element;\n}\n\ndeclare var ResizeObserverEntry: {\n    prototype: ResizeObserverEntry;\n    new(): ResizeObserverEntry;\n};\n\ninterface ResizeObserverSize {\n    readonly blockSize: number;\n    readonly inlineSize: number;\n}\n\ndeclare var ResizeObserverSize: {\n    prototype: ResizeObserverSize;\n    new(): ResizeObserverSize;\n};\n\n/** This Fetch API interface represents the response to a request. */\ninterface Response extends Body {\n    readonly headers: Headers;\n    readonly ok: boolean;\n    readonly redirected: boolean;\n    readonly status: number;\n    readonly statusText: string;\n    readonly type: ResponseType;\n    readonly url: string;\n    clone(): Response;\n}\n\ndeclare var Response: {\n    prototype: Response;\n    new(body?: BodyInit | null, init?: ResponseInit): Response;\n    error(): Response;\n    redirect(url: string | URL, status?: number): Response;\n};\n\n/** Provides access to the properties of <a> element, as well as methods to manipulate them. */\ninterface SVGAElement extends SVGGraphicsElement, SVGURIReference {\n    rel: string;\n    readonly relList: DOMTokenList;\n    readonly target: SVGAnimatedString;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGAElement: {\n    prototype: SVGAElement;\n    new(): SVGAElement;\n};\n\n/** Used to represent a value that can be an <angle> or <number> value. An SVGAngle reflected through the animVal attribute is always read only. */\ninterface SVGAngle {\n    readonly unitType: number;\n    value: number;\n    valueAsString: string;\n    valueInSpecifiedUnits: number;\n    convertToSpecifiedUnits(unitType: number): void;\n    newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;\n    readonly SVG_ANGLETYPE_UNKNOWN: 0;\n    readonly SVG_ANGLETYPE_UNSPECIFIED: 1;\n    readonly SVG_ANGLETYPE_DEG: 2;\n    readonly SVG_ANGLETYPE_RAD: 3;\n    readonly SVG_ANGLETYPE_GRAD: 4;\n}\n\ndeclare var SVGAngle: {\n    prototype: SVGAngle;\n    new(): SVGAngle;\n    readonly SVG_ANGLETYPE_UNKNOWN: 0;\n    readonly SVG_ANGLETYPE_UNSPECIFIED: 1;\n    readonly SVG_ANGLETYPE_DEG: 2;\n    readonly SVG_ANGLETYPE_RAD: 3;\n    readonly SVG_ANGLETYPE_GRAD: 4;\n};\n\ninterface SVGAnimateElement extends SVGAnimationElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAnimateElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAnimateElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGAnimateElement: {\n    prototype: SVGAnimateElement;\n    new(): SVGAnimateElement;\n};\n\ninterface SVGAnimateMotionElement extends SVGAnimationElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAnimateMotionElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAnimateMotionElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGAnimateMotionElement: {\n    prototype: SVGAnimateMotionElement;\n    new(): SVGAnimateMotionElement;\n};\n\ninterface SVGAnimateTransformElement extends SVGAnimationElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAnimateTransformElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAnimateTransformElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGAnimateTransformElement: {\n    prototype: SVGAnimateTransformElement;\n    new(): SVGAnimateTransformElement;\n};\n\n/** Used for attributes of basic type <angle> which can be animated. */\ninterface SVGAnimatedAngle {\n    readonly animVal: SVGAngle;\n    readonly baseVal: SVGAngle;\n}\n\ndeclare var SVGAnimatedAngle: {\n    prototype: SVGAnimatedAngle;\n    new(): SVGAnimatedAngle;\n};\n\n/** Used for attributes of type boolean which can be animated. */\ninterface SVGAnimatedBoolean {\n    readonly animVal: boolean;\n    baseVal: boolean;\n}\n\ndeclare var SVGAnimatedBoolean: {\n    prototype: SVGAnimatedBoolean;\n    new(): SVGAnimatedBoolean;\n};\n\n/** Used for attributes whose value must be a constant from a particular enumeration and which can be animated. */\ninterface SVGAnimatedEnumeration {\n    readonly animVal: number;\n    baseVal: number;\n}\n\ndeclare var SVGAnimatedEnumeration: {\n    prototype: SVGAnimatedEnumeration;\n    new(): SVGAnimatedEnumeration;\n};\n\n/** Used for attributes of basic type <integer> which can be animated. */\ninterface SVGAnimatedInteger {\n    readonly animVal: number;\n    baseVal: number;\n}\n\ndeclare var SVGAnimatedInteger: {\n    prototype: SVGAnimatedInteger;\n    new(): SVGAnimatedInteger;\n};\n\n/** Used for attributes of basic type <length> which can be animated. */\ninterface SVGAnimatedLength {\n    readonly animVal: SVGLength;\n    readonly baseVal: SVGLength;\n}\n\ndeclare var SVGAnimatedLength: {\n    prototype: SVGAnimatedLength;\n    new(): SVGAnimatedLength;\n};\n\n/** Used for attributes of type SVGLengthList which can be animated. */\ninterface SVGAnimatedLengthList {\n    readonly animVal: SVGLengthList;\n    readonly baseVal: SVGLengthList;\n}\n\ndeclare var SVGAnimatedLengthList: {\n    prototype: SVGAnimatedLengthList;\n    new(): SVGAnimatedLengthList;\n};\n\n/** Used for attributes of basic type <Number> which can be animated. */\ninterface SVGAnimatedNumber {\n    readonly animVal: number;\n    baseVal: number;\n}\n\ndeclare var SVGAnimatedNumber: {\n    prototype: SVGAnimatedNumber;\n    new(): SVGAnimatedNumber;\n};\n\n/** The SVGAnimatedNumber interface is used for attributes which take a list of numbers and which can be animated. */\ninterface SVGAnimatedNumberList {\n    readonly animVal: SVGNumberList;\n    readonly baseVal: SVGNumberList;\n}\n\ndeclare var SVGAnimatedNumberList: {\n    prototype: SVGAnimatedNumberList;\n    new(): SVGAnimatedNumberList;\n};\n\ninterface SVGAnimatedPoints {\n    readonly animatedPoints: SVGPointList;\n    readonly points: SVGPointList;\n}\n\n/** Used for attributes of type SVGPreserveAspectRatio which can be animated. */\ninterface SVGAnimatedPreserveAspectRatio {\n    readonly animVal: SVGPreserveAspectRatio;\n    readonly baseVal: SVGPreserveAspectRatio;\n}\n\ndeclare var SVGAnimatedPreserveAspectRatio: {\n    prototype: SVGAnimatedPreserveAspectRatio;\n    new(): SVGAnimatedPreserveAspectRatio;\n};\n\n/** Used for attributes of basic SVGRect which can be animated. */\ninterface SVGAnimatedRect {\n    readonly animVal: DOMRectReadOnly;\n    readonly baseVal: DOMRect;\n}\n\ndeclare var SVGAnimatedRect: {\n    prototype: SVGAnimatedRect;\n    new(): SVGAnimatedRect;\n};\n\n/** The SVGAnimatedString\\xA0interface represents string attributes which can be animated from each SVG declaration. You need to create SVG attribute before doing anything else, everything should be declared\\xA0inside this. */\ninterface SVGAnimatedString {\n    readonly animVal: string;\n    baseVal: string;\n}\n\ndeclare var SVGAnimatedString: {\n    prototype: SVGAnimatedString;\n    new(): SVGAnimatedString;\n};\n\n/** Used for attributes which take a list of numbers and which can be animated. */\ninterface SVGAnimatedTransformList {\n    readonly animVal: SVGTransformList;\n    readonly baseVal: SVGTransformList;\n}\n\ndeclare var SVGAnimatedTransformList: {\n    prototype: SVGAnimatedTransformList;\n    new(): SVGAnimatedTransformList;\n};\n\ninterface SVGAnimationElement extends SVGElement, SVGTests {\n    readonly targetElement: SVGElement | null;\n    beginElement(): void;\n    beginElementAt(offset: number): void;\n    endElement(): void;\n    endElementAt(offset: number): void;\n    getCurrentTime(): number;\n    getSimpleDuration(): number;\n    getStartTime(): number;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAnimationElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGAnimationElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGAnimationElement: {\n    prototype: SVGAnimationElement;\n    new(): SVGAnimationElement;\n};\n\n/** An interface for the <circle> element. The circle element is defined by the cx and cy attributes that denote the coordinates of the centre of the circle. */\ninterface SVGCircleElement extends SVGGeometryElement {\n    readonly cx: SVGAnimatedLength;\n    readonly cy: SVGAnimatedLength;\n    readonly r: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGCircleElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGCircleElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGCircleElement: {\n    prototype: SVGCircleElement;\n    new(): SVGCircleElement;\n};\n\n/** Provides access to the properties of <clipPath> elements, as well as methods to manipulate them. */\ninterface SVGClipPathElement extends SVGElement {\n    readonly clipPathUnits: SVGAnimatedEnumeration;\n    readonly transform: SVGAnimatedTransformList;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGClipPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGClipPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGClipPathElement: {\n    prototype: SVGClipPathElement;\n    new(): SVGClipPathElement;\n};\n\n/** A base interface used by the component transfer function interfaces. */\ninterface SVGComponentTransferFunctionElement extends SVGElement {\n    readonly amplitude: SVGAnimatedNumber;\n    readonly exponent: SVGAnimatedNumber;\n    readonly intercept: SVGAnimatedNumber;\n    readonly offset: SVGAnimatedNumber;\n    readonly slope: SVGAnimatedNumber;\n    readonly tableValues: SVGAnimatedNumberList;\n    readonly type: SVGAnimatedEnumeration;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: 0;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: 1;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_TABLE: 2;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: 3;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: 4;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: 5;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGComponentTransferFunctionElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGComponentTransferFunctionElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGComponentTransferFunctionElement: {\n    prototype: SVGComponentTransferFunctionElement;\n    new(): SVGComponentTransferFunctionElement;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: 0;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: 1;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_TABLE: 2;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: 3;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: 4;\n    readonly SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: 5;\n};\n\n/** Corresponds to the <defs> element. */\ninterface SVGDefsElement extends SVGGraphicsElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGDefsElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGDefsElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGDefsElement: {\n    prototype: SVGDefsElement;\n    new(): SVGDefsElement;\n};\n\n/** Corresponds to the <desc> element. */\ninterface SVGDescElement extends SVGElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGDescElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGDescElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGDescElement: {\n    prototype: SVGDescElement;\n    new(): SVGDescElement;\n};\n\ninterface SVGElementEventMap extends ElementEventMap, GlobalEventHandlersEventMap {\n}\n\n/** All of the SVG DOM interfaces that correspond directly to elements in the SVG language derive from the SVGElement interface. */\ninterface SVGElement extends Element, ElementCSSInlineStyle, GlobalEventHandlers, HTMLOrSVGElement {\n    /** @deprecated */\n    readonly className: any;\n    readonly ownerSVGElement: SVGSVGElement | null;\n    readonly viewportElement: SVGElement | null;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGElement: {\n    prototype: SVGElement;\n    new(): SVGElement;\n};\n\n/** Provides access to the properties of <ellipse> elements. */\ninterface SVGEllipseElement extends SVGGeometryElement {\n    readonly cx: SVGAnimatedLength;\n    readonly cy: SVGAnimatedLength;\n    readonly rx: SVGAnimatedLength;\n    readonly ry: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGEllipseElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGEllipseElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGEllipseElement: {\n    prototype: SVGEllipseElement;\n    new(): SVGEllipseElement;\n};\n\n/** Corresponds to the <feBlend> element. */\ninterface SVGFEBlendElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly in1: SVGAnimatedString;\n    readonly in2: SVGAnimatedString;\n    readonly mode: SVGAnimatedEnumeration;\n    readonly SVG_FEBLEND_MODE_UNKNOWN: 0;\n    readonly SVG_FEBLEND_MODE_NORMAL: 1;\n    readonly SVG_FEBLEND_MODE_MULTIPLY: 2;\n    readonly SVG_FEBLEND_MODE_SCREEN: 3;\n    readonly SVG_FEBLEND_MODE_DARKEN: 4;\n    readonly SVG_FEBLEND_MODE_LIGHTEN: 5;\n    readonly SVG_FEBLEND_MODE_OVERLAY: 6;\n    readonly SVG_FEBLEND_MODE_COLOR_DODGE: 7;\n    readonly SVG_FEBLEND_MODE_COLOR_BURN: 8;\n    readonly SVG_FEBLEND_MODE_HARD_LIGHT: 9;\n    readonly SVG_FEBLEND_MODE_SOFT_LIGHT: 10;\n    readonly SVG_FEBLEND_MODE_DIFFERENCE: 11;\n    readonly SVG_FEBLEND_MODE_EXCLUSION: 12;\n    readonly SVG_FEBLEND_MODE_HUE: 13;\n    readonly SVG_FEBLEND_MODE_SATURATION: 14;\n    readonly SVG_FEBLEND_MODE_COLOR: 15;\n    readonly SVG_FEBLEND_MODE_LUMINOSITY: 16;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEBlendElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEBlendElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEBlendElement: {\n    prototype: SVGFEBlendElement;\n    new(): SVGFEBlendElement;\n    readonly SVG_FEBLEND_MODE_UNKNOWN: 0;\n    readonly SVG_FEBLEND_MODE_NORMAL: 1;\n    readonly SVG_FEBLEND_MODE_MULTIPLY: 2;\n    readonly SVG_FEBLEND_MODE_SCREEN: 3;\n    readonly SVG_FEBLEND_MODE_DARKEN: 4;\n    readonly SVG_FEBLEND_MODE_LIGHTEN: 5;\n    readonly SVG_FEBLEND_MODE_OVERLAY: 6;\n    readonly SVG_FEBLEND_MODE_COLOR_DODGE: 7;\n    readonly SVG_FEBLEND_MODE_COLOR_BURN: 8;\n    readonly SVG_FEBLEND_MODE_HARD_LIGHT: 9;\n    readonly SVG_FEBLEND_MODE_SOFT_LIGHT: 10;\n    readonly SVG_FEBLEND_MODE_DIFFERENCE: 11;\n    readonly SVG_FEBLEND_MODE_EXCLUSION: 12;\n    readonly SVG_FEBLEND_MODE_HUE: 13;\n    readonly SVG_FEBLEND_MODE_SATURATION: 14;\n    readonly SVG_FEBLEND_MODE_COLOR: 15;\n    readonly SVG_FEBLEND_MODE_LUMINOSITY: 16;\n};\n\n/** Corresponds to the <feColorMatrix> element. */\ninterface SVGFEColorMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly in1: SVGAnimatedString;\n    readonly type: SVGAnimatedEnumeration;\n    readonly values: SVGAnimatedNumberList;\n    readonly SVG_FECOLORMATRIX_TYPE_UNKNOWN: 0;\n    readonly SVG_FECOLORMATRIX_TYPE_MATRIX: 1;\n    readonly SVG_FECOLORMATRIX_TYPE_SATURATE: 2;\n    readonly SVG_FECOLORMATRIX_TYPE_HUEROTATE: 3;\n    readonly SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: 4;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEColorMatrixElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEColorMatrixElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEColorMatrixElement: {\n    prototype: SVGFEColorMatrixElement;\n    new(): SVGFEColorMatrixElement;\n    readonly SVG_FECOLORMATRIX_TYPE_UNKNOWN: 0;\n    readonly SVG_FECOLORMATRIX_TYPE_MATRIX: 1;\n    readonly SVG_FECOLORMATRIX_TYPE_SATURATE: 2;\n    readonly SVG_FECOLORMATRIX_TYPE_HUEROTATE: 3;\n    readonly SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: 4;\n};\n\n/** Corresponds to the <feComponentTransfer> element. */\ninterface SVGFEComponentTransferElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly in1: SVGAnimatedString;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEComponentTransferElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEComponentTransferElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEComponentTransferElement: {\n    prototype: SVGFEComponentTransferElement;\n    new(): SVGFEComponentTransferElement;\n};\n\n/** Corresponds to the <feComposite> element. */\ninterface SVGFECompositeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly in1: SVGAnimatedString;\n    readonly in2: SVGAnimatedString;\n    readonly k1: SVGAnimatedNumber;\n    readonly k2: SVGAnimatedNumber;\n    readonly k3: SVGAnimatedNumber;\n    readonly k4: SVGAnimatedNumber;\n    readonly operator: SVGAnimatedEnumeration;\n    readonly SVG_FECOMPOSITE_OPERATOR_UNKNOWN: 0;\n    readonly SVG_FECOMPOSITE_OPERATOR_OVER: 1;\n    readonly SVG_FECOMPOSITE_OPERATOR_IN: 2;\n    readonly SVG_FECOMPOSITE_OPERATOR_OUT: 3;\n    readonly SVG_FECOMPOSITE_OPERATOR_ATOP: 4;\n    readonly SVG_FECOMPOSITE_OPERATOR_XOR: 5;\n    readonly SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: 6;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFECompositeElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFECompositeElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFECompositeElement: {\n    prototype: SVGFECompositeElement;\n    new(): SVGFECompositeElement;\n    readonly SVG_FECOMPOSITE_OPERATOR_UNKNOWN: 0;\n    readonly SVG_FECOMPOSITE_OPERATOR_OVER: 1;\n    readonly SVG_FECOMPOSITE_OPERATOR_IN: 2;\n    readonly SVG_FECOMPOSITE_OPERATOR_OUT: 3;\n    readonly SVG_FECOMPOSITE_OPERATOR_ATOP: 4;\n    readonly SVG_FECOMPOSITE_OPERATOR_XOR: 5;\n    readonly SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: 6;\n};\n\n/** Corresponds to the <feConvolveMatrix> element. */\ninterface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly bias: SVGAnimatedNumber;\n    readonly divisor: SVGAnimatedNumber;\n    readonly edgeMode: SVGAnimatedEnumeration;\n    readonly in1: SVGAnimatedString;\n    readonly kernelMatrix: SVGAnimatedNumberList;\n    readonly kernelUnitLengthX: SVGAnimatedNumber;\n    readonly kernelUnitLengthY: SVGAnimatedNumber;\n    readonly orderX: SVGAnimatedInteger;\n    readonly orderY: SVGAnimatedInteger;\n    readonly preserveAlpha: SVGAnimatedBoolean;\n    readonly targetX: SVGAnimatedInteger;\n    readonly targetY: SVGAnimatedInteger;\n    readonly SVG_EDGEMODE_UNKNOWN: 0;\n    readonly SVG_EDGEMODE_DUPLICATE: 1;\n    readonly SVG_EDGEMODE_WRAP: 2;\n    readonly SVG_EDGEMODE_NONE: 3;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEConvolveMatrixElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEConvolveMatrixElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEConvolveMatrixElement: {\n    prototype: SVGFEConvolveMatrixElement;\n    new(): SVGFEConvolveMatrixElement;\n    readonly SVG_EDGEMODE_UNKNOWN: 0;\n    readonly SVG_EDGEMODE_DUPLICATE: 1;\n    readonly SVG_EDGEMODE_WRAP: 2;\n    readonly SVG_EDGEMODE_NONE: 3;\n};\n\n/** Corresponds to the <feDiffuseLighting> element. */\ninterface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly diffuseConstant: SVGAnimatedNumber;\n    readonly in1: SVGAnimatedString;\n    readonly kernelUnitLengthX: SVGAnimatedNumber;\n    readonly kernelUnitLengthY: SVGAnimatedNumber;\n    readonly surfaceScale: SVGAnimatedNumber;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEDiffuseLightingElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEDiffuseLightingElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEDiffuseLightingElement: {\n    prototype: SVGFEDiffuseLightingElement;\n    new(): SVGFEDiffuseLightingElement;\n};\n\n/** Corresponds to the <feDisplacementMap> element. */\ninterface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly in1: SVGAnimatedString;\n    readonly in2: SVGAnimatedString;\n    readonly scale: SVGAnimatedNumber;\n    readonly xChannelSelector: SVGAnimatedEnumeration;\n    readonly yChannelSelector: SVGAnimatedEnumeration;\n    readonly SVG_CHANNEL_UNKNOWN: 0;\n    readonly SVG_CHANNEL_R: 1;\n    readonly SVG_CHANNEL_G: 2;\n    readonly SVG_CHANNEL_B: 3;\n    readonly SVG_CHANNEL_A: 4;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEDisplacementMapElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEDisplacementMapElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEDisplacementMapElement: {\n    prototype: SVGFEDisplacementMapElement;\n    new(): SVGFEDisplacementMapElement;\n    readonly SVG_CHANNEL_UNKNOWN: 0;\n    readonly SVG_CHANNEL_R: 1;\n    readonly SVG_CHANNEL_G: 2;\n    readonly SVG_CHANNEL_B: 3;\n    readonly SVG_CHANNEL_A: 4;\n};\n\n/** Corresponds to the <feDistantLight> element. */\ninterface SVGFEDistantLightElement extends SVGElement {\n    readonly azimuth: SVGAnimatedNumber;\n    readonly elevation: SVGAnimatedNumber;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEDistantLightElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEDistantLightElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEDistantLightElement: {\n    prototype: SVGFEDistantLightElement;\n    new(): SVGFEDistantLightElement;\n};\n\ninterface SVGFEDropShadowElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly dx: SVGAnimatedNumber;\n    readonly dy: SVGAnimatedNumber;\n    readonly in1: SVGAnimatedString;\n    readonly stdDeviationX: SVGAnimatedNumber;\n    readonly stdDeviationY: SVGAnimatedNumber;\n    setStdDeviation(stdDeviationX: number, stdDeviationY: number): void;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEDropShadowElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEDropShadowElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEDropShadowElement: {\n    prototype: SVGFEDropShadowElement;\n    new(): SVGFEDropShadowElement;\n};\n\n/** Corresponds to the <feFlood> element. */\ninterface SVGFEFloodElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFloodElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFloodElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEFloodElement: {\n    prototype: SVGFEFloodElement;\n    new(): SVGFEFloodElement;\n};\n\n/** Corresponds to the <feFuncA> element. */\ninterface SVGFEFuncAElement extends SVGComponentTransferFunctionElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFuncAElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFuncAElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEFuncAElement: {\n    prototype: SVGFEFuncAElement;\n    new(): SVGFEFuncAElement;\n};\n\n/** Corresponds to the <feFuncB> element. */\ninterface SVGFEFuncBElement extends SVGComponentTransferFunctionElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFuncBElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFuncBElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEFuncBElement: {\n    prototype: SVGFEFuncBElement;\n    new(): SVGFEFuncBElement;\n};\n\n/** Corresponds to the <feFuncG> element. */\ninterface SVGFEFuncGElement extends SVGComponentTransferFunctionElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFuncGElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFuncGElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEFuncGElement: {\n    prototype: SVGFEFuncGElement;\n    new(): SVGFEFuncGElement;\n};\n\n/** Corresponds to the <feFuncR> element. */\ninterface SVGFEFuncRElement extends SVGComponentTransferFunctionElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFuncRElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEFuncRElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEFuncRElement: {\n    prototype: SVGFEFuncRElement;\n    new(): SVGFEFuncRElement;\n};\n\n/** Corresponds to the <feGaussianBlur> element. */\ninterface SVGFEGaussianBlurElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly in1: SVGAnimatedString;\n    readonly stdDeviationX: SVGAnimatedNumber;\n    readonly stdDeviationY: SVGAnimatedNumber;\n    setStdDeviation(stdDeviationX: number, stdDeviationY: number): void;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEGaussianBlurElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEGaussianBlurElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEGaussianBlurElement: {\n    prototype: SVGFEGaussianBlurElement;\n    new(): SVGFEGaussianBlurElement;\n};\n\n/** Corresponds to the <feImage> element. */\ninterface SVGFEImageElement extends SVGElement, SVGFilterPrimitiveStandardAttributes, SVGURIReference {\n    readonly preserveAspectRatio: SVGAnimatedPreserveAspectRatio;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEImageElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEImageElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEImageElement: {\n    prototype: SVGFEImageElement;\n    new(): SVGFEImageElement;\n};\n\n/** Corresponds to the <feMerge> element. */\ninterface SVGFEMergeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEMergeElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEMergeElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEMergeElement: {\n    prototype: SVGFEMergeElement;\n    new(): SVGFEMergeElement;\n};\n\n/** Corresponds to the <feMergeNode> element. */\ninterface SVGFEMergeNodeElement extends SVGElement {\n    readonly in1: SVGAnimatedString;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEMergeNodeElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEMergeNodeElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEMergeNodeElement: {\n    prototype: SVGFEMergeNodeElement;\n    new(): SVGFEMergeNodeElement;\n};\n\n/** Corresponds to the <feMorphology> element. */\ninterface SVGFEMorphologyElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly in1: SVGAnimatedString;\n    readonly operator: SVGAnimatedEnumeration;\n    readonly radiusX: SVGAnimatedNumber;\n    readonly radiusY: SVGAnimatedNumber;\n    readonly SVG_MORPHOLOGY_OPERATOR_UNKNOWN: 0;\n    readonly SVG_MORPHOLOGY_OPERATOR_ERODE: 1;\n    readonly SVG_MORPHOLOGY_OPERATOR_DILATE: 2;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEMorphologyElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEMorphologyElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEMorphologyElement: {\n    prototype: SVGFEMorphologyElement;\n    new(): SVGFEMorphologyElement;\n    readonly SVG_MORPHOLOGY_OPERATOR_UNKNOWN: 0;\n    readonly SVG_MORPHOLOGY_OPERATOR_ERODE: 1;\n    readonly SVG_MORPHOLOGY_OPERATOR_DILATE: 2;\n};\n\n/** Corresponds to the <feOffset> element. */\ninterface SVGFEOffsetElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly dx: SVGAnimatedNumber;\n    readonly dy: SVGAnimatedNumber;\n    readonly in1: SVGAnimatedString;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEOffsetElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEOffsetElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEOffsetElement: {\n    prototype: SVGFEOffsetElement;\n    new(): SVGFEOffsetElement;\n};\n\n/** Corresponds to the <fePointLight> element. */\ninterface SVGFEPointLightElement extends SVGElement {\n    readonly x: SVGAnimatedNumber;\n    readonly y: SVGAnimatedNumber;\n    readonly z: SVGAnimatedNumber;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEPointLightElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFEPointLightElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFEPointLightElement: {\n    prototype: SVGFEPointLightElement;\n    new(): SVGFEPointLightElement;\n};\n\n/** Corresponds to the <feSpecularLighting> element. */\ninterface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly in1: SVGAnimatedString;\n    readonly kernelUnitLengthX: SVGAnimatedNumber;\n    readonly kernelUnitLengthY: SVGAnimatedNumber;\n    readonly specularConstant: SVGAnimatedNumber;\n    readonly specularExponent: SVGAnimatedNumber;\n    readonly surfaceScale: SVGAnimatedNumber;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFESpecularLightingElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFESpecularLightingElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFESpecularLightingElement: {\n    prototype: SVGFESpecularLightingElement;\n    new(): SVGFESpecularLightingElement;\n};\n\n/** Corresponds to the <feSpotLight> element. */\ninterface SVGFESpotLightElement extends SVGElement {\n    readonly limitingConeAngle: SVGAnimatedNumber;\n    readonly pointsAtX: SVGAnimatedNumber;\n    readonly pointsAtY: SVGAnimatedNumber;\n    readonly pointsAtZ: SVGAnimatedNumber;\n    readonly specularExponent: SVGAnimatedNumber;\n    readonly x: SVGAnimatedNumber;\n    readonly y: SVGAnimatedNumber;\n    readonly z: SVGAnimatedNumber;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFESpotLightElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFESpotLightElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFESpotLightElement: {\n    prototype: SVGFESpotLightElement;\n    new(): SVGFESpotLightElement;\n};\n\n/** Corresponds to the <feTile> element. */\ninterface SVGFETileElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly in1: SVGAnimatedString;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFETileElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFETileElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFETileElement: {\n    prototype: SVGFETileElement;\n    new(): SVGFETileElement;\n};\n\n/** Corresponds to the <feTurbulence> element. */\ninterface SVGFETurbulenceElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {\n    readonly baseFrequencyX: SVGAnimatedNumber;\n    readonly baseFrequencyY: SVGAnimatedNumber;\n    readonly numOctaves: SVGAnimatedInteger;\n    readonly seed: SVGAnimatedNumber;\n    readonly stitchTiles: SVGAnimatedEnumeration;\n    readonly type: SVGAnimatedEnumeration;\n    readonly SVG_TURBULENCE_TYPE_UNKNOWN: 0;\n    readonly SVG_TURBULENCE_TYPE_FRACTALNOISE: 1;\n    readonly SVG_TURBULENCE_TYPE_TURBULENCE: 2;\n    readonly SVG_STITCHTYPE_UNKNOWN: 0;\n    readonly SVG_STITCHTYPE_STITCH: 1;\n    readonly SVG_STITCHTYPE_NOSTITCH: 2;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFETurbulenceElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFETurbulenceElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFETurbulenceElement: {\n    prototype: SVGFETurbulenceElement;\n    new(): SVGFETurbulenceElement;\n    readonly SVG_TURBULENCE_TYPE_UNKNOWN: 0;\n    readonly SVG_TURBULENCE_TYPE_FRACTALNOISE: 1;\n    readonly SVG_TURBULENCE_TYPE_TURBULENCE: 2;\n    readonly SVG_STITCHTYPE_UNKNOWN: 0;\n    readonly SVG_STITCHTYPE_STITCH: 1;\n    readonly SVG_STITCHTYPE_NOSTITCH: 2;\n};\n\n/** Provides access to the properties of <filter> elements, as well as methods to manipulate them. */\ninterface SVGFilterElement extends SVGElement, SVGURIReference {\n    readonly filterUnits: SVGAnimatedEnumeration;\n    readonly height: SVGAnimatedLength;\n    readonly primitiveUnits: SVGAnimatedEnumeration;\n    readonly width: SVGAnimatedLength;\n    readonly x: SVGAnimatedLength;\n    readonly y: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFilterElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGFilterElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGFilterElement: {\n    prototype: SVGFilterElement;\n    new(): SVGFilterElement;\n};\n\ninterface SVGFilterPrimitiveStandardAttributes {\n    readonly height: SVGAnimatedLength;\n    readonly result: SVGAnimatedString;\n    readonly width: SVGAnimatedLength;\n    readonly x: SVGAnimatedLength;\n    readonly y: SVGAnimatedLength;\n}\n\ninterface SVGFitToViewBox {\n    readonly preserveAspectRatio: SVGAnimatedPreserveAspectRatio;\n    readonly viewBox: SVGAnimatedRect;\n}\n\n/** Provides access to the properties of <foreignObject> elements, as well as methods to manipulate them. */\ninterface SVGForeignObjectElement extends SVGGraphicsElement {\n    readonly height: SVGAnimatedLength;\n    readonly width: SVGAnimatedLength;\n    readonly x: SVGAnimatedLength;\n    readonly y: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGForeignObjectElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGForeignObjectElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGForeignObjectElement: {\n    prototype: SVGForeignObjectElement;\n    new(): SVGForeignObjectElement;\n};\n\n/** Corresponds to the <g> element. */\ninterface SVGGElement extends SVGGraphicsElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGGElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGGElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGGElement: {\n    prototype: SVGGElement;\n    new(): SVGGElement;\n};\n\ninterface SVGGeometryElement extends SVGGraphicsElement {\n    readonly pathLength: SVGAnimatedNumber;\n    getPointAtLength(distance: number): DOMPoint;\n    getTotalLength(): number;\n    isPointInFill(point?: DOMPointInit): boolean;\n    isPointInStroke(point?: DOMPointInit): boolean;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGGeometryElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGGeometryElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGGeometryElement: {\n    prototype: SVGGeometryElement;\n    new(): SVGGeometryElement;\n};\n\n/** The SVGGradient interface is a base interface used by SVGLinearGradientElement and SVGRadialGradientElement. */\ninterface SVGGradientElement extends SVGElement, SVGURIReference {\n    readonly gradientTransform: SVGAnimatedTransformList;\n    readonly gradientUnits: SVGAnimatedEnumeration;\n    readonly spreadMethod: SVGAnimatedEnumeration;\n    readonly SVG_SPREADMETHOD_UNKNOWN: 0;\n    readonly SVG_SPREADMETHOD_PAD: 1;\n    readonly SVG_SPREADMETHOD_REFLECT: 2;\n    readonly SVG_SPREADMETHOD_REPEAT: 3;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGGradientElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGGradientElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGGradientElement: {\n    prototype: SVGGradientElement;\n    new(): SVGGradientElement;\n    readonly SVG_SPREADMETHOD_UNKNOWN: 0;\n    readonly SVG_SPREADMETHOD_PAD: 1;\n    readonly SVG_SPREADMETHOD_REFLECT: 2;\n    readonly SVG_SPREADMETHOD_REPEAT: 3;\n};\n\n/** SVG elements whose primary purpose is to directly render graphics into a group. */\ninterface SVGGraphicsElement extends SVGElement, SVGTests {\n    readonly transform: SVGAnimatedTransformList;\n    getBBox(options?: SVGBoundingBoxOptions): DOMRect;\n    getCTM(): DOMMatrix | null;\n    getScreenCTM(): DOMMatrix | null;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGGraphicsElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGGraphicsElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGGraphicsElement: {\n    prototype: SVGGraphicsElement;\n    new(): SVGGraphicsElement;\n};\n\n/** Corresponds to the <image> element. */\ninterface SVGImageElement extends SVGGraphicsElement, SVGURIReference {\n    readonly height: SVGAnimatedLength;\n    readonly preserveAspectRatio: SVGAnimatedPreserveAspectRatio;\n    readonly width: SVGAnimatedLength;\n    readonly x: SVGAnimatedLength;\n    readonly y: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGImageElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGImageElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGImageElement: {\n    prototype: SVGImageElement;\n    new(): SVGImageElement;\n};\n\n/** Correspond to the <length> basic data type. */\ninterface SVGLength {\n    readonly unitType: number;\n    value: number;\n    valueAsString: string;\n    valueInSpecifiedUnits: number;\n    convertToSpecifiedUnits(unitType: number): void;\n    newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;\n    readonly SVG_LENGTHTYPE_UNKNOWN: 0;\n    readonly SVG_LENGTHTYPE_NUMBER: 1;\n    readonly SVG_LENGTHTYPE_PERCENTAGE: 2;\n    readonly SVG_LENGTHTYPE_EMS: 3;\n    readonly SVG_LENGTHTYPE_EXS: 4;\n    readonly SVG_LENGTHTYPE_PX: 5;\n    readonly SVG_LENGTHTYPE_CM: 6;\n    readonly SVG_LENGTHTYPE_MM: 7;\n    readonly SVG_LENGTHTYPE_IN: 8;\n    readonly SVG_LENGTHTYPE_PT: 9;\n    readonly SVG_LENGTHTYPE_PC: 10;\n}\n\ndeclare var SVGLength: {\n    prototype: SVGLength;\n    new(): SVGLength;\n    readonly SVG_LENGTHTYPE_UNKNOWN: 0;\n    readonly SVG_LENGTHTYPE_NUMBER: 1;\n    readonly SVG_LENGTHTYPE_PERCENTAGE: 2;\n    readonly SVG_LENGTHTYPE_EMS: 3;\n    readonly SVG_LENGTHTYPE_EXS: 4;\n    readonly SVG_LENGTHTYPE_PX: 5;\n    readonly SVG_LENGTHTYPE_CM: 6;\n    readonly SVG_LENGTHTYPE_MM: 7;\n    readonly SVG_LENGTHTYPE_IN: 8;\n    readonly SVG_LENGTHTYPE_PT: 9;\n    readonly SVG_LENGTHTYPE_PC: 10;\n};\n\n/** The SVGLengthList defines a list of SVGLength objects. */\ninterface SVGLengthList {\n    readonly length: number;\n    readonly numberOfItems: number;\n    appendItem(newItem: SVGLength): SVGLength;\n    clear(): void;\n    getItem(index: number): SVGLength;\n    initialize(newItem: SVGLength): SVGLength;\n    insertItemBefore(newItem: SVGLength, index: number): SVGLength;\n    removeItem(index: number): SVGLength;\n    replaceItem(newItem: SVGLength, index: number): SVGLength;\n    [index: number]: SVGLength;\n}\n\ndeclare var SVGLengthList: {\n    prototype: SVGLengthList;\n    new(): SVGLengthList;\n};\n\n/** Provides access to the properties of <line> elements, as well as methods to manipulate them. */\ninterface SVGLineElement extends SVGGeometryElement {\n    readonly x1: SVGAnimatedLength;\n    readonly x2: SVGAnimatedLength;\n    readonly y1: SVGAnimatedLength;\n    readonly y2: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGLineElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGLineElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGLineElement: {\n    prototype: SVGLineElement;\n    new(): SVGLineElement;\n};\n\n/** Corresponds to the <linearGradient> element. */\ninterface SVGLinearGradientElement extends SVGGradientElement {\n    readonly x1: SVGAnimatedLength;\n    readonly x2: SVGAnimatedLength;\n    readonly y1: SVGAnimatedLength;\n    readonly y2: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGLinearGradientElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGLinearGradientElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGLinearGradientElement: {\n    prototype: SVGLinearGradientElement;\n    new(): SVGLinearGradientElement;\n};\n\ninterface SVGMPathElement extends SVGElement, SVGURIReference {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGMPathElement: {\n    prototype: SVGMPathElement;\n    new(): SVGMPathElement;\n};\n\ninterface SVGMarkerElement extends SVGElement, SVGFitToViewBox {\n    readonly markerHeight: SVGAnimatedLength;\n    readonly markerUnits: SVGAnimatedEnumeration;\n    readonly markerWidth: SVGAnimatedLength;\n    readonly orientAngle: SVGAnimatedAngle;\n    readonly orientType: SVGAnimatedEnumeration;\n    readonly refX: SVGAnimatedLength;\n    readonly refY: SVGAnimatedLength;\n    setOrientToAngle(angle: SVGAngle): void;\n    setOrientToAuto(): void;\n    readonly SVG_MARKERUNITS_UNKNOWN: 0;\n    readonly SVG_MARKERUNITS_USERSPACEONUSE: 1;\n    readonly SVG_MARKERUNITS_STROKEWIDTH: 2;\n    readonly SVG_MARKER_ORIENT_UNKNOWN: 0;\n    readonly SVG_MARKER_ORIENT_AUTO: 1;\n    readonly SVG_MARKER_ORIENT_ANGLE: 2;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMarkerElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMarkerElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGMarkerElement: {\n    prototype: SVGMarkerElement;\n    new(): SVGMarkerElement;\n    readonly SVG_MARKERUNITS_UNKNOWN: 0;\n    readonly SVG_MARKERUNITS_USERSPACEONUSE: 1;\n    readonly SVG_MARKERUNITS_STROKEWIDTH: 2;\n    readonly SVG_MARKER_ORIENT_UNKNOWN: 0;\n    readonly SVG_MARKER_ORIENT_AUTO: 1;\n    readonly SVG_MARKER_ORIENT_ANGLE: 2;\n};\n\n/** Provides access to the properties of <mask> elements, as well as methods to manipulate them. */\ninterface SVGMaskElement extends SVGElement {\n    readonly height: SVGAnimatedLength;\n    readonly maskContentUnits: SVGAnimatedEnumeration;\n    readonly maskUnits: SVGAnimatedEnumeration;\n    readonly width: SVGAnimatedLength;\n    readonly x: SVGAnimatedLength;\n    readonly y: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMaskElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMaskElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGMaskElement: {\n    prototype: SVGMaskElement;\n    new(): SVGMaskElement;\n};\n\n/** Corresponds to the <metadata> element. */\ninterface SVGMetadataElement extends SVGElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMetadataElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGMetadataElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGMetadataElement: {\n    prototype: SVGMetadataElement;\n    new(): SVGMetadataElement;\n};\n\n/** Corresponds to the <number> basic data type. */\ninterface SVGNumber {\n    value: number;\n}\n\ndeclare var SVGNumber: {\n    prototype: SVGNumber;\n    new(): SVGNumber;\n};\n\n/** The SVGNumberList defines a list of SVGNumber objects. */\ninterface SVGNumberList {\n    readonly length: number;\n    readonly numberOfItems: number;\n    appendItem(newItem: SVGNumber): SVGNumber;\n    clear(): void;\n    getItem(index: number): SVGNumber;\n    initialize(newItem: SVGNumber): SVGNumber;\n    insertItemBefore(newItem: SVGNumber, index: number): SVGNumber;\n    removeItem(index: number): SVGNumber;\n    replaceItem(newItem: SVGNumber, index: number): SVGNumber;\n    [index: number]: SVGNumber;\n}\n\ndeclare var SVGNumberList: {\n    prototype: SVGNumberList;\n    new(): SVGNumberList;\n};\n\n/** Corresponds to the <path> element. */\ninterface SVGPathElement extends SVGGeometryElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGPathElement: {\n    prototype: SVGPathElement;\n    new(): SVGPathElement;\n};\n\n/** Corresponds to the <pattern> element. */\ninterface SVGPatternElement extends SVGElement, SVGFitToViewBox, SVGURIReference {\n    readonly height: SVGAnimatedLength;\n    readonly patternContentUnits: SVGAnimatedEnumeration;\n    readonly patternTransform: SVGAnimatedTransformList;\n    readonly patternUnits: SVGAnimatedEnumeration;\n    readonly width: SVGAnimatedLength;\n    readonly x: SVGAnimatedLength;\n    readonly y: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPatternElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPatternElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGPatternElement: {\n    prototype: SVGPatternElement;\n    new(): SVGPatternElement;\n};\n\ninterface SVGPointList {\n    readonly length: number;\n    readonly numberOfItems: number;\n    appendItem(newItem: DOMPoint): DOMPoint;\n    clear(): void;\n    getItem(index: number): DOMPoint;\n    initialize(newItem: DOMPoint): DOMPoint;\n    insertItemBefore(newItem: DOMPoint, index: number): DOMPoint;\n    removeItem(index: number): DOMPoint;\n    replaceItem(newItem: DOMPoint, index: number): DOMPoint;\n    [index: number]: DOMPoint;\n}\n\ndeclare var SVGPointList: {\n    prototype: SVGPointList;\n    new(): SVGPointList;\n};\n\n/** Provides access to the properties of <polygon> elements, as well as methods to manipulate them. */\ninterface SVGPolygonElement extends SVGGeometryElement, SVGAnimatedPoints {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPolygonElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPolygonElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGPolygonElement: {\n    prototype: SVGPolygonElement;\n    new(): SVGPolygonElement;\n};\n\n/** Provides access to the properties of <polyline> elements, as well as methods to manipulate them. */\ninterface SVGPolylineElement extends SVGGeometryElement, SVGAnimatedPoints {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPolylineElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGPolylineElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGPolylineElement: {\n    prototype: SVGPolylineElement;\n    new(): SVGPolylineElement;\n};\n\n/** Corresponds to the preserveAspectRatio attribute, which is available for some of SVG's elements. */\ninterface SVGPreserveAspectRatio {\n    align: number;\n    meetOrSlice: number;\n    readonly SVG_PRESERVEASPECTRATIO_UNKNOWN: 0;\n    readonly SVG_PRESERVEASPECTRATIO_NONE: 1;\n    readonly SVG_PRESERVEASPECTRATIO_XMINYMIN: 2;\n    readonly SVG_PRESERVEASPECTRATIO_XMIDYMIN: 3;\n    readonly SVG_PRESERVEASPECTRATIO_XMAXYMIN: 4;\n    readonly SVG_PRESERVEASPECTRATIO_XMINYMID: 5;\n    readonly SVG_PRESERVEASPECTRATIO_XMIDYMID: 6;\n    readonly SVG_PRESERVEASPECTRATIO_XMAXYMID: 7;\n    readonly SVG_PRESERVEASPECTRATIO_XMINYMAX: 8;\n    readonly SVG_PRESERVEASPECTRATIO_XMIDYMAX: 9;\n    readonly SVG_PRESERVEASPECTRATIO_XMAXYMAX: 10;\n    readonly SVG_MEETORSLICE_UNKNOWN: 0;\n    readonly SVG_MEETORSLICE_MEET: 1;\n    readonly SVG_MEETORSLICE_SLICE: 2;\n}\n\ndeclare var SVGPreserveAspectRatio: {\n    prototype: SVGPreserveAspectRatio;\n    new(): SVGPreserveAspectRatio;\n    readonly SVG_PRESERVEASPECTRATIO_UNKNOWN: 0;\n    readonly SVG_PRESERVEASPECTRATIO_NONE: 1;\n    readonly SVG_PRESERVEASPECTRATIO_XMINYMIN: 2;\n    readonly SVG_PRESERVEASPECTRATIO_XMIDYMIN: 3;\n    readonly SVG_PRESERVEASPECTRATIO_XMAXYMIN: 4;\n    readonly SVG_PRESERVEASPECTRATIO_XMINYMID: 5;\n    readonly SVG_PRESERVEASPECTRATIO_XMIDYMID: 6;\n    readonly SVG_PRESERVEASPECTRATIO_XMAXYMID: 7;\n    readonly SVG_PRESERVEASPECTRATIO_XMINYMAX: 8;\n    readonly SVG_PRESERVEASPECTRATIO_XMIDYMAX: 9;\n    readonly SVG_PRESERVEASPECTRATIO_XMAXYMAX: 10;\n    readonly SVG_MEETORSLICE_UNKNOWN: 0;\n    readonly SVG_MEETORSLICE_MEET: 1;\n    readonly SVG_MEETORSLICE_SLICE: 2;\n};\n\n/** Corresponds to the <RadialGradient> element. */\ninterface SVGRadialGradientElement extends SVGGradientElement {\n    readonly cx: SVGAnimatedLength;\n    readonly cy: SVGAnimatedLength;\n    readonly fr: SVGAnimatedLength;\n    readonly fx: SVGAnimatedLength;\n    readonly fy: SVGAnimatedLength;\n    readonly r: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGRadialGradientElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGRadialGradientElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGRadialGradientElement: {\n    prototype: SVGRadialGradientElement;\n    new(): SVGRadialGradientElement;\n};\n\n/** Provides access to the properties of <rect> elements, as well as methods to manipulate them. */\ninterface SVGRectElement extends SVGGeometryElement {\n    readonly height: SVGAnimatedLength;\n    readonly rx: SVGAnimatedLength;\n    readonly ry: SVGAnimatedLength;\n    readonly width: SVGAnimatedLength;\n    readonly x: SVGAnimatedLength;\n    readonly y: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGRectElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGRectElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGRectElement: {\n    prototype: SVGRectElement;\n    new(): SVGRectElement;\n};\n\ninterface SVGSVGElementEventMap extends SVGElementEventMap, WindowEventHandlersEventMap {\n}\n\n/** Provides access to the properties of <svg> elements, as well as methods to manipulate them. This interface contains also various miscellaneous commonly-used utility methods, such as matrix operations and the ability to control the time of redraw on visual rendering devices. */\ninterface SVGSVGElement extends SVGGraphicsElement, SVGFitToViewBox, WindowEventHandlers {\n    currentScale: number;\n    readonly currentTranslate: DOMPointReadOnly;\n    readonly height: SVGAnimatedLength;\n    readonly width: SVGAnimatedLength;\n    readonly x: SVGAnimatedLength;\n    readonly y: SVGAnimatedLength;\n    animationsPaused(): boolean;\n    checkEnclosure(element: SVGElement, rect: DOMRectReadOnly): boolean;\n    checkIntersection(element: SVGElement, rect: DOMRectReadOnly): boolean;\n    createSVGAngle(): SVGAngle;\n    createSVGLength(): SVGLength;\n    createSVGMatrix(): DOMMatrix;\n    createSVGNumber(): SVGNumber;\n    createSVGPoint(): DOMPoint;\n    createSVGRect(): DOMRect;\n    createSVGTransform(): SVGTransform;\n    createSVGTransformFromMatrix(matrix?: DOMMatrix2DInit): SVGTransform;\n    deselectAll(): void;\n    /** @deprecated */\n    forceRedraw(): void;\n    getCurrentTime(): number;\n    getElementById(elementId: string): Element;\n    getEnclosureList(rect: DOMRectReadOnly, referenceElement: SVGElement | null): NodeListOf<SVGCircleElement | SVGEllipseElement | SVGImageElement | SVGLineElement | SVGPathElement | SVGPolygonElement | SVGPolylineElement | SVGRectElement | SVGTextElement | SVGUseElement>;\n    getIntersectionList(rect: DOMRectReadOnly, referenceElement: SVGElement | null): NodeListOf<SVGCircleElement | SVGEllipseElement | SVGImageElement | SVGLineElement | SVGPathElement | SVGPolygonElement | SVGPolylineElement | SVGRectElement | SVGTextElement | SVGUseElement>;\n    pauseAnimations(): void;\n    setCurrentTime(seconds: number): void;\n    /** @deprecated */\n    suspendRedraw(maxWaitMilliseconds: number): number;\n    unpauseAnimations(): void;\n    /** @deprecated */\n    unsuspendRedraw(suspendHandleID: number): void;\n    /** @deprecated */\n    unsuspendRedrawAll(): void;\n    addEventListener<K extends keyof SVGSVGElementEventMap>(type: K, listener: (this: SVGSVGElement, ev: SVGSVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGSVGElementEventMap>(type: K, listener: (this: SVGSVGElement, ev: SVGSVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGSVGElement: {\n    prototype: SVGSVGElement;\n    new(): SVGSVGElement;\n};\n\n/** Corresponds to the SVG <script> element. */\ninterface SVGScriptElement extends SVGElement, SVGURIReference {\n    type: string;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGScriptElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGScriptElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGScriptElement: {\n    prototype: SVGScriptElement;\n    new(): SVGScriptElement;\n};\n\ninterface SVGSetElement extends SVGAnimationElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGSetElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGSetElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGSetElement: {\n    prototype: SVGSetElement;\n    new(): SVGSetElement;\n};\n\n/** Corresponds to the <stop> element. */\ninterface SVGStopElement extends SVGElement {\n    readonly offset: SVGAnimatedNumber;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGStopElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGStopElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGStopElement: {\n    prototype: SVGStopElement;\n    new(): SVGStopElement;\n};\n\n/** The SVGStringList defines a list of DOMString objects. */\ninterface SVGStringList {\n    readonly length: number;\n    readonly numberOfItems: number;\n    appendItem(newItem: string): string;\n    clear(): void;\n    getItem(index: number): string;\n    initialize(newItem: string): string;\n    insertItemBefore(newItem: string, index: number): string;\n    removeItem(index: number): string;\n    replaceItem(newItem: string, index: number): string;\n    [index: number]: string;\n}\n\ndeclare var SVGStringList: {\n    prototype: SVGStringList;\n    new(): SVGStringList;\n};\n\n/** Corresponds to the SVG <style> element. */\ninterface SVGStyleElement extends SVGElement, LinkStyle {\n    disabled: boolean;\n    media: string;\n    title: string;\n    /** @deprecated */\n    type: string;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGStyleElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGStyleElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGStyleElement: {\n    prototype: SVGStyleElement;\n    new(): SVGStyleElement;\n};\n\n/** Corresponds to the <switch> element. */\ninterface SVGSwitchElement extends SVGGraphicsElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGSwitchElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGSwitchElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGSwitchElement: {\n    prototype: SVGSwitchElement;\n    new(): SVGSwitchElement;\n};\n\n/** Corresponds to the <symbol> element. */\ninterface SVGSymbolElement extends SVGElement, SVGFitToViewBox {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGSymbolElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGSymbolElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGSymbolElement: {\n    prototype: SVGSymbolElement;\n    new(): SVGSymbolElement;\n};\n\n/** A <tspan> element. */\ninterface SVGTSpanElement extends SVGTextPositioningElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTSpanElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTSpanElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGTSpanElement: {\n    prototype: SVGTSpanElement;\n    new(): SVGTSpanElement;\n};\n\ninterface SVGTests {\n    readonly requiredExtensions: SVGStringList;\n    readonly systemLanguage: SVGStringList;\n}\n\n/** Implemented by elements that support rendering child text content. It is inherited by various text-related interfaces, such as SVGTextElement, SVGTSpanElement, SVGTRefElement, SVGAltGlyphElement and SVGTextPathElement. */\ninterface SVGTextContentElement extends SVGGraphicsElement {\n    readonly lengthAdjust: SVGAnimatedEnumeration;\n    readonly textLength: SVGAnimatedLength;\n    getCharNumAtPosition(point?: DOMPointInit): number;\n    getComputedTextLength(): number;\n    getEndPositionOfChar(charnum: number): DOMPoint;\n    getExtentOfChar(charnum: number): DOMRect;\n    getNumberOfChars(): number;\n    getRotationOfChar(charnum: number): number;\n    getStartPositionOfChar(charnum: number): DOMPoint;\n    getSubStringLength(charnum: number, nchars: number): number;\n    /** @deprecated */\n    selectSubString(charnum: number, nchars: number): void;\n    readonly LENGTHADJUST_UNKNOWN: 0;\n    readonly LENGTHADJUST_SPACING: 1;\n    readonly LENGTHADJUST_SPACINGANDGLYPHS: 2;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTextContentElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTextContentElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGTextContentElement: {\n    prototype: SVGTextContentElement;\n    new(): SVGTextContentElement;\n    readonly LENGTHADJUST_UNKNOWN: 0;\n    readonly LENGTHADJUST_SPACING: 1;\n    readonly LENGTHADJUST_SPACINGANDGLYPHS: 2;\n};\n\n/** Corresponds to the <text> elements. */\ninterface SVGTextElement extends SVGTextPositioningElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTextElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTextElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGTextElement: {\n    prototype: SVGTextElement;\n    new(): SVGTextElement;\n};\n\n/** Corresponds to the <textPath> element. */\ninterface SVGTextPathElement extends SVGTextContentElement, SVGURIReference {\n    readonly method: SVGAnimatedEnumeration;\n    readonly spacing: SVGAnimatedEnumeration;\n    readonly startOffset: SVGAnimatedLength;\n    readonly TEXTPATH_METHODTYPE_UNKNOWN: 0;\n    readonly TEXTPATH_METHODTYPE_ALIGN: 1;\n    readonly TEXTPATH_METHODTYPE_STRETCH: 2;\n    readonly TEXTPATH_SPACINGTYPE_UNKNOWN: 0;\n    readonly TEXTPATH_SPACINGTYPE_AUTO: 1;\n    readonly TEXTPATH_SPACINGTYPE_EXACT: 2;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTextPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTextPathElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGTextPathElement: {\n    prototype: SVGTextPathElement;\n    new(): SVGTextPathElement;\n    readonly TEXTPATH_METHODTYPE_UNKNOWN: 0;\n    readonly TEXTPATH_METHODTYPE_ALIGN: 1;\n    readonly TEXTPATH_METHODTYPE_STRETCH: 2;\n    readonly TEXTPATH_SPACINGTYPE_UNKNOWN: 0;\n    readonly TEXTPATH_SPACINGTYPE_AUTO: 1;\n    readonly TEXTPATH_SPACINGTYPE_EXACT: 2;\n};\n\n/** Implemented by elements that support attributes that position individual text glyphs. It is inherited by SVGTextElement, SVGTSpanElement, SVGTRefElement and SVGAltGlyphElement. */\ninterface SVGTextPositioningElement extends SVGTextContentElement {\n    readonly dx: SVGAnimatedLengthList;\n    readonly dy: SVGAnimatedLengthList;\n    readonly rotate: SVGAnimatedNumberList;\n    readonly x: SVGAnimatedLengthList;\n    readonly y: SVGAnimatedLengthList;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTextPositioningElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTextPositioningElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGTextPositioningElement: {\n    prototype: SVGTextPositioningElement;\n    new(): SVGTextPositioningElement;\n};\n\n/** Corresponds to the <title> element. */\ninterface SVGTitleElement extends SVGElement {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTitleElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGTitleElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGTitleElement: {\n    prototype: SVGTitleElement;\n    new(): SVGTitleElement;\n};\n\n/** SVGTransform is the interface for one of the component transformations within an SVGTransformList; thus, an SVGTransform object corresponds to a single component (e.g., scale(\\u2026) or matrix(\\u2026)) within a transform attribute. */\ninterface SVGTransform {\n    readonly angle: number;\n    readonly matrix: DOMMatrix;\n    readonly type: number;\n    setMatrix(matrix?: DOMMatrix2DInit): void;\n    setRotate(angle: number, cx: number, cy: number): void;\n    setScale(sx: number, sy: number): void;\n    setSkewX(angle: number): void;\n    setSkewY(angle: number): void;\n    setTranslate(tx: number, ty: number): void;\n    readonly SVG_TRANSFORM_UNKNOWN: 0;\n    readonly SVG_TRANSFORM_MATRIX: 1;\n    readonly SVG_TRANSFORM_TRANSLATE: 2;\n    readonly SVG_TRANSFORM_SCALE: 3;\n    readonly SVG_TRANSFORM_ROTATE: 4;\n    readonly SVG_TRANSFORM_SKEWX: 5;\n    readonly SVG_TRANSFORM_SKEWY: 6;\n}\n\ndeclare var SVGTransform: {\n    prototype: SVGTransform;\n    new(): SVGTransform;\n    readonly SVG_TRANSFORM_UNKNOWN: 0;\n    readonly SVG_TRANSFORM_MATRIX: 1;\n    readonly SVG_TRANSFORM_TRANSLATE: 2;\n    readonly SVG_TRANSFORM_SCALE: 3;\n    readonly SVG_TRANSFORM_ROTATE: 4;\n    readonly SVG_TRANSFORM_SKEWX: 5;\n    readonly SVG_TRANSFORM_SKEWY: 6;\n};\n\n/** The SVGTransformList defines a list of SVGTransform objects. */\ninterface SVGTransformList {\n    readonly length: number;\n    readonly numberOfItems: number;\n    appendItem(newItem: SVGTransform): SVGTransform;\n    clear(): void;\n    consolidate(): SVGTransform | null;\n    createSVGTransformFromMatrix(matrix?: DOMMatrix2DInit): SVGTransform;\n    getItem(index: number): SVGTransform;\n    initialize(newItem: SVGTransform): SVGTransform;\n    insertItemBefore(newItem: SVGTransform, index: number): SVGTransform;\n    removeItem(index: number): SVGTransform;\n    replaceItem(newItem: SVGTransform, index: number): SVGTransform;\n    [index: number]: SVGTransform;\n}\n\ndeclare var SVGTransformList: {\n    prototype: SVGTransformList;\n    new(): SVGTransformList;\n};\n\ninterface SVGURIReference {\n    readonly href: SVGAnimatedString;\n}\n\n/** A commonly used set of constants used for reflecting gradientUnits, patternContentUnits and other similar attributes. */\ninterface SVGUnitTypes {\n    readonly SVG_UNIT_TYPE_UNKNOWN: 0;\n    readonly SVG_UNIT_TYPE_USERSPACEONUSE: 1;\n    readonly SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: 2;\n}\n\ndeclare var SVGUnitTypes: {\n    prototype: SVGUnitTypes;\n    new(): SVGUnitTypes;\n    readonly SVG_UNIT_TYPE_UNKNOWN: 0;\n    readonly SVG_UNIT_TYPE_USERSPACEONUSE: 1;\n    readonly SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: 2;\n};\n\n/** Corresponds to the <use> element. */\ninterface SVGUseElement extends SVGGraphicsElement, SVGURIReference {\n    readonly height: SVGAnimatedLength;\n    readonly width: SVGAnimatedLength;\n    readonly x: SVGAnimatedLength;\n    readonly y: SVGAnimatedLength;\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGUseElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGUseElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGUseElement: {\n    prototype: SVGUseElement;\n    new(): SVGUseElement;\n};\n\n/** Provides access to the properties of <view> elements, as well as methods to manipulate them. */\ninterface SVGViewElement extends SVGElement, SVGFitToViewBox {\n    addEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGViewElement, ev: SVGElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SVGElementEventMap>(type: K, listener: (this: SVGViewElement, ev: SVGElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SVGViewElement: {\n    prototype: SVGViewElement;\n    new(): SVGViewElement;\n};\n\n/** A screen, usually the one on which the current window is being rendered, and is obtained using window.screen. */\ninterface Screen {\n    readonly availHeight: number;\n    readonly availWidth: number;\n    readonly colorDepth: number;\n    readonly height: number;\n    readonly orientation: ScreenOrientation;\n    readonly pixelDepth: number;\n    readonly width: number;\n}\n\ndeclare var Screen: {\n    prototype: Screen;\n    new(): Screen;\n};\n\ninterface ScreenOrientationEventMap {\n    \"change\": Event;\n}\n\ninterface ScreenOrientation extends EventTarget {\n    readonly angle: number;\n    onchange: ((this: ScreenOrientation, ev: Event) => any) | null;\n    readonly type: OrientationType;\n    lock(orientation: OrientationLockType): Promise<void>;\n    unlock(): void;\n    addEventListener<K extends keyof ScreenOrientationEventMap>(type: K, listener: (this: ScreenOrientation, ev: ScreenOrientationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ScreenOrientationEventMap>(type: K, listener: (this: ScreenOrientation, ev: ScreenOrientationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ScreenOrientation: {\n    prototype: ScreenOrientation;\n    new(): ScreenOrientation;\n};\n\ninterface ScriptProcessorNodeEventMap {\n    \"audioprocess\": AudioProcessingEvent;\n}\n\n/**\n * Allows the generation, processing, or analyzing of audio using JavaScript.\n * @deprecated As of the August 29 2014 Web Audio API spec publication, this feature has been marked as deprecated, and was replaced by AudioWorklet (see AudioWorkletNode).\n */\ninterface ScriptProcessorNode extends AudioNode {\n    /** @deprecated */\n    readonly bufferSize: number;\n    /** @deprecated */\n    onaudioprocess: ((this: ScriptProcessorNode, ev: AudioProcessingEvent) => any) | null;\n    addEventListener<K extends keyof ScriptProcessorNodeEventMap>(type: K, listener: (this: ScriptProcessorNode, ev: ScriptProcessorNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ScriptProcessorNodeEventMap>(type: K, listener: (this: ScriptProcessorNode, ev: ScriptProcessorNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** @deprecated */\ndeclare var ScriptProcessorNode: {\n    prototype: ScriptProcessorNode;\n    new(): ScriptProcessorNode;\n};\n\n/** Inherits from Event, and represents the event object of an event sent on a document or worker when its content security policy is violated. */\ninterface SecurityPolicyViolationEvent extends Event {\n    readonly blockedURI: string;\n    readonly columnNumber: number;\n    readonly disposition: SecurityPolicyViolationEventDisposition;\n    readonly documentURI: string;\n    readonly effectiveDirective: string;\n    readonly lineNumber: number;\n    readonly originalPolicy: string;\n    readonly referrer: string;\n    readonly sample: string;\n    readonly sourceFile: string;\n    readonly statusCode: number;\n    readonly violatedDirective: string;\n}\n\ndeclare var SecurityPolicyViolationEvent: {\n    prototype: SecurityPolicyViolationEvent;\n    new(type: string, eventInitDict?: SecurityPolicyViolationEventInit): SecurityPolicyViolationEvent;\n};\n\n/** A Selection object\\xA0represents the range of text selected by the user or the current position of the caret. To obtain a Selection object for examination or\\xA0modification, call Window.getSelection(). */\ninterface Selection {\n    readonly anchorNode: Node | null;\n    readonly anchorOffset: number;\n    readonly focusNode: Node | null;\n    readonly focusOffset: number;\n    readonly isCollapsed: boolean;\n    readonly rangeCount: number;\n    readonly type: string;\n    addRange(range: Range): void;\n    collapse(node: Node | null, offset?: number): void;\n    collapseToEnd(): void;\n    collapseToStart(): void;\n    containsNode(node: Node, allowPartialContainment?: boolean): boolean;\n    deleteFromDocument(): void;\n    empty(): void;\n    extend(node: Node, offset?: number): void;\n    getRangeAt(index: number): Range;\n    modify(alter?: string, direction?: string, granularity?: string): void;\n    removeAllRanges(): void;\n    removeRange(range: Range): void;\n    selectAllChildren(node: Node): void;\n    setBaseAndExtent(anchorNode: Node, anchorOffset: number, focusNode: Node, focusOffset: number): void;\n    setPosition(node: Node | null, offset?: number): void;\n    toString(): string;\n}\n\ndeclare var Selection: {\n    prototype: Selection;\n    new(): Selection;\n    toString(): string;\n};\n\ninterface ServiceWorkerEventMap extends AbstractWorkerEventMap {\n    \"statechange\": Event;\n}\n\n/**\n * This ServiceWorker API interface provides a reference to a service worker. Multiple browsing contexts (e.g. pages, workers, etc.) can be associated with the same service worker, each through a unique ServiceWorker object.\n * Available only in secure contexts.\n */\ninterface ServiceWorker extends EventTarget, AbstractWorker {\n    onstatechange: ((this: ServiceWorker, ev: Event) => any) | null;\n    readonly scriptURL: string;\n    readonly state: ServiceWorkerState;\n    postMessage(message: any, transfer: Transferable[]): void;\n    postMessage(message: any, options?: StructuredSerializeOptions): void;\n    addEventListener<K extends keyof ServiceWorkerEventMap>(type: K, listener: (this: ServiceWorker, ev: ServiceWorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ServiceWorkerEventMap>(type: K, listener: (this: ServiceWorker, ev: ServiceWorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ServiceWorker: {\n    prototype: ServiceWorker;\n    new(): ServiceWorker;\n};\n\ninterface ServiceWorkerContainerEventMap {\n    \"controllerchange\": Event;\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n}\n\n/**\n * The\\xA0ServiceWorkerContainer\\xA0interface of the\\xA0ServiceWorker API\\xA0provides an object representing the service worker as an overall unit in the network ecosystem, including facilities to register, unregister and update service workers, and access the state of service workers and their registrations.\n * Available only in secure contexts.\n */\ninterface ServiceWorkerContainer extends EventTarget {\n    readonly controller: ServiceWorker | null;\n    oncontrollerchange: ((this: ServiceWorkerContainer, ev: Event) => any) | null;\n    onmessage: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null;\n    readonly ready: Promise<ServiceWorkerRegistration>;\n    getRegistration(clientURL?: string | URL): Promise<ServiceWorkerRegistration | undefined>;\n    getRegistrations(): Promise<ReadonlyArray<ServiceWorkerRegistration>>;\n    register(scriptURL: string | URL, options?: RegistrationOptions): Promise<ServiceWorkerRegistration>;\n    startMessages(): void;\n    addEventListener<K extends keyof ServiceWorkerContainerEventMap>(type: K, listener: (this: ServiceWorkerContainer, ev: ServiceWorkerContainerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ServiceWorkerContainerEventMap>(type: K, listener: (this: ServiceWorkerContainer, ev: ServiceWorkerContainerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ServiceWorkerContainer: {\n    prototype: ServiceWorkerContainer;\n    new(): ServiceWorkerContainer;\n};\n\ninterface ServiceWorkerRegistrationEventMap {\n    \"updatefound\": Event;\n}\n\n/**\n * This ServiceWorker API interface represents the service worker registration. You register a service worker to control one or more pages that share the same origin.\n * Available only in secure contexts.\n */\ninterface ServiceWorkerRegistration extends EventTarget {\n    readonly active: ServiceWorker | null;\n    readonly installing: ServiceWorker | null;\n    readonly navigationPreload: NavigationPreloadManager;\n    onupdatefound: ((this: ServiceWorkerRegistration, ev: Event) => any) | null;\n    readonly pushManager: PushManager;\n    readonly scope: string;\n    readonly updateViaCache: ServiceWorkerUpdateViaCache;\n    readonly waiting: ServiceWorker | null;\n    getNotifications(filter?: GetNotificationOptions): Promise<Notification[]>;\n    showNotification(title: string, options?: NotificationOptions): Promise<void>;\n    unregister(): Promise<boolean>;\n    update(): Promise<void>;\n    addEventListener<K extends keyof ServiceWorkerRegistrationEventMap>(type: K, listener: (this: ServiceWorkerRegistration, ev: ServiceWorkerRegistrationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ServiceWorkerRegistrationEventMap>(type: K, listener: (this: ServiceWorkerRegistration, ev: ServiceWorkerRegistrationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ServiceWorkerRegistration: {\n    prototype: ServiceWorkerRegistration;\n    new(): ServiceWorkerRegistration;\n};\n\ninterface ShadowRootEventMap {\n    \"slotchange\": Event;\n}\n\ninterface ShadowRoot extends DocumentFragment, DocumentOrShadowRoot, InnerHTML {\n    readonly delegatesFocus: boolean;\n    readonly host: Element;\n    readonly mode: ShadowRootMode;\n    onslotchange: ((this: ShadowRoot, ev: Event) => any) | null;\n    readonly slotAssignment: SlotAssignmentMode;\n    /** Throws a \"NotSupportedError\" DOMException if context object is a shadow root. */\n    addEventListener<K extends keyof ShadowRootEventMap>(type: K, listener: (this: ShadowRoot, ev: ShadowRootEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ShadowRootEventMap>(type: K, listener: (this: ShadowRoot, ev: ShadowRootEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ShadowRoot: {\n    prototype: ShadowRoot;\n    new(): ShadowRoot;\n};\n\ninterface SharedWorker extends EventTarget, AbstractWorker {\n    /** Returns sharedWorker's MessagePort object which can be used to communicate with the global environment. */\n    readonly port: MessagePort;\n    addEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: SharedWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: SharedWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SharedWorker: {\n    prototype: SharedWorker;\n    new(scriptURL: string | URL, options?: string | WorkerOptions): SharedWorker;\n};\n\ninterface Slottable {\n    readonly assignedSlot: HTMLSlotElement | null;\n}\n\ninterface SourceBufferEventMap {\n    \"abort\": Event;\n    \"error\": Event;\n    \"update\": Event;\n    \"updateend\": Event;\n    \"updatestart\": Event;\n}\n\n/** A chunk of media to be passed into an HTMLMediaElement and played, via a MediaSource\\xA0object. This can be made up of one or several media segments. */\ninterface SourceBuffer extends EventTarget {\n    appendWindowEnd: number;\n    appendWindowStart: number;\n    readonly buffered: TimeRanges;\n    mode: AppendMode;\n    onabort: ((this: SourceBuffer, ev: Event) => any) | null;\n    onerror: ((this: SourceBuffer, ev: Event) => any) | null;\n    onupdate: ((this: SourceBuffer, ev: Event) => any) | null;\n    onupdateend: ((this: SourceBuffer, ev: Event) => any) | null;\n    onupdatestart: ((this: SourceBuffer, ev: Event) => any) | null;\n    timestampOffset: number;\n    readonly updating: boolean;\n    abort(): void;\n    appendBuffer(data: BufferSource): void;\n    changeType(type: string): void;\n    remove(start: number, end: number): void;\n    addEventListener<K extends keyof SourceBufferEventMap>(type: K, listener: (this: SourceBuffer, ev: SourceBufferEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SourceBufferEventMap>(type: K, listener: (this: SourceBuffer, ev: SourceBufferEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SourceBuffer: {\n    prototype: SourceBuffer;\n    new(): SourceBuffer;\n};\n\ninterface SourceBufferListEventMap {\n    \"addsourcebuffer\": Event;\n    \"removesourcebuffer\": Event;\n}\n\n/** A simple container list for multiple SourceBuffer objects. */\ninterface SourceBufferList extends EventTarget {\n    readonly length: number;\n    onaddsourcebuffer: ((this: SourceBufferList, ev: Event) => any) | null;\n    onremovesourcebuffer: ((this: SourceBufferList, ev: Event) => any) | null;\n    addEventListener<K extends keyof SourceBufferListEventMap>(type: K, listener: (this: SourceBufferList, ev: SourceBufferListEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SourceBufferListEventMap>(type: K, listener: (this: SourceBufferList, ev: SourceBufferListEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n    [index: number]: SourceBuffer;\n}\n\ndeclare var SourceBufferList: {\n    prototype: SourceBufferList;\n    new(): SourceBufferList;\n};\n\ninterface SpeechRecognitionAlternative {\n    readonly confidence: number;\n    readonly transcript: string;\n}\n\ndeclare var SpeechRecognitionAlternative: {\n    prototype: SpeechRecognitionAlternative;\n    new(): SpeechRecognitionAlternative;\n};\n\ninterface SpeechRecognitionResult {\n    readonly isFinal: boolean;\n    readonly length: number;\n    item(index: number): SpeechRecognitionAlternative;\n    [index: number]: SpeechRecognitionAlternative;\n}\n\ndeclare var SpeechRecognitionResult: {\n    prototype: SpeechRecognitionResult;\n    new(): SpeechRecognitionResult;\n};\n\ninterface SpeechRecognitionResultList {\n    readonly length: number;\n    item(index: number): SpeechRecognitionResult;\n    [index: number]: SpeechRecognitionResult;\n}\n\ndeclare var SpeechRecognitionResultList: {\n    prototype: SpeechRecognitionResultList;\n    new(): SpeechRecognitionResultList;\n};\n\ninterface SpeechSynthesisEventMap {\n    \"voiceschanged\": Event;\n}\n\n/** This Web Speech API interface is the controller interface for the speech service; this can be used to retrieve information about the synthesis voices available on the device, start and pause speech, and other commands besides. */\ninterface SpeechSynthesis extends EventTarget {\n    onvoiceschanged: ((this: SpeechSynthesis, ev: Event) => any) | null;\n    readonly paused: boolean;\n    readonly pending: boolean;\n    readonly speaking: boolean;\n    cancel(): void;\n    getVoices(): SpeechSynthesisVoice[];\n    pause(): void;\n    resume(): void;\n    speak(utterance: SpeechSynthesisUtterance): void;\n    addEventListener<K extends keyof SpeechSynthesisEventMap>(type: K, listener: (this: SpeechSynthesis, ev: SpeechSynthesisEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SpeechSynthesisEventMap>(type: K, listener: (this: SpeechSynthesis, ev: SpeechSynthesisEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SpeechSynthesis: {\n    prototype: SpeechSynthesis;\n    new(): SpeechSynthesis;\n};\n\ninterface SpeechSynthesisErrorEvent extends SpeechSynthesisEvent {\n    readonly error: SpeechSynthesisErrorCode;\n}\n\ndeclare var SpeechSynthesisErrorEvent: {\n    prototype: SpeechSynthesisErrorEvent;\n    new(type: string, eventInitDict: SpeechSynthesisErrorEventInit): SpeechSynthesisErrorEvent;\n};\n\n/** This Web Speech API interface contains information about the current state of SpeechSynthesisUtterance objects that have been processed in the speech service. */\ninterface SpeechSynthesisEvent extends Event {\n    readonly charIndex: number;\n    readonly charLength: number;\n    readonly elapsedTime: number;\n    readonly name: string;\n    readonly utterance: SpeechSynthesisUtterance;\n}\n\ndeclare var SpeechSynthesisEvent: {\n    prototype: SpeechSynthesisEvent;\n    new(type: string, eventInitDict: SpeechSynthesisEventInit): SpeechSynthesisEvent;\n};\n\ninterface SpeechSynthesisUtteranceEventMap {\n    \"boundary\": SpeechSynthesisEvent;\n    \"end\": SpeechSynthesisEvent;\n    \"error\": SpeechSynthesisErrorEvent;\n    \"mark\": SpeechSynthesisEvent;\n    \"pause\": SpeechSynthesisEvent;\n    \"resume\": SpeechSynthesisEvent;\n    \"start\": SpeechSynthesisEvent;\n}\n\n/** This Web Speech API interface represents a speech request. It contains the content the speech service should read and information about how to read it (e.g. language, pitch and volume.) */\ninterface SpeechSynthesisUtterance extends EventTarget {\n    lang: string;\n    onboundary: ((this: SpeechSynthesisUtterance, ev: SpeechSynthesisEvent) => any) | null;\n    onend: ((this: SpeechSynthesisUtterance, ev: SpeechSynthesisEvent) => any) | null;\n    onerror: ((this: SpeechSynthesisUtterance, ev: SpeechSynthesisErrorEvent) => any) | null;\n    onmark: ((this: SpeechSynthesisUtterance, ev: SpeechSynthesisEvent) => any) | null;\n    onpause: ((this: SpeechSynthesisUtterance, ev: SpeechSynthesisEvent) => any) | null;\n    onresume: ((this: SpeechSynthesisUtterance, ev: SpeechSynthesisEvent) => any) | null;\n    onstart: ((this: SpeechSynthesisUtterance, ev: SpeechSynthesisEvent) => any) | null;\n    pitch: number;\n    rate: number;\n    text: string;\n    voice: SpeechSynthesisVoice | null;\n    volume: number;\n    addEventListener<K extends keyof SpeechSynthesisUtteranceEventMap>(type: K, listener: (this: SpeechSynthesisUtterance, ev: SpeechSynthesisUtteranceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SpeechSynthesisUtteranceEventMap>(type: K, listener: (this: SpeechSynthesisUtterance, ev: SpeechSynthesisUtteranceEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SpeechSynthesisUtterance: {\n    prototype: SpeechSynthesisUtterance;\n    new(text?: string): SpeechSynthesisUtterance;\n};\n\n/** This Web Speech API interface represents a voice that the system supports. Every SpeechSynthesisVoice has its own relative speech service including information about language, name and URI. */\ninterface SpeechSynthesisVoice {\n    readonly default: boolean;\n    readonly lang: string;\n    readonly localService: boolean;\n    readonly name: string;\n    readonly voiceURI: string;\n}\n\ndeclare var SpeechSynthesisVoice: {\n    prototype: SpeechSynthesisVoice;\n    new(): SpeechSynthesisVoice;\n};\n\ninterface StaticRange extends AbstractRange {\n}\n\ndeclare var StaticRange: {\n    prototype: StaticRange;\n    new(init: StaticRangeInit): StaticRange;\n};\n\n/** The pan property takes a unitless value between -1 (full left pan) and 1 (full right pan). This interface was introduced as a much simpler way to apply a simple panning effect than having to use a full PannerNode. */\ninterface StereoPannerNode extends AudioNode {\n    readonly pan: AudioParam;\n}\n\ndeclare var StereoPannerNode: {\n    prototype: StereoPannerNode;\n    new(context: BaseAudioContext, options?: StereoPannerOptions): StereoPannerNode;\n};\n\n/** This Web Storage API interface provides access to a particular domain's session or local storage. It allows, for example, the addition, modification, or deletion of stored data items. */\ninterface Storage {\n    /** Returns the number of key/value pairs. */\n    readonly length: number;\n    /**\n     * Removes all key/value pairs, if there are any.\n     *\n     * Dispatches a storage event on Window objects holding an equivalent Storage object.\n     */\n    clear(): void;\n    /** Returns the current value associated with the given key, or null if the given key does not exist. */\n    getItem(key: string): string | null;\n    /** Returns the name of the nth key, or null if n is greater than or equal to the number of key/value pairs. */\n    key(index: number): string | null;\n    /**\n     * Removes the key/value pair with the given key, if a key/value pair with the given key exists.\n     *\n     * Dispatches a storage event on Window objects holding an equivalent Storage object.\n     */\n    removeItem(key: string): void;\n    /**\n     * Sets the value of the pair identified by key to value, creating a new key/value pair if none existed for key previously.\n     *\n     * Throws a \"QuotaExceededError\" DOMException exception if the new value couldn't be set. (Setting could fail if, e.g., the user has disabled storage for the site, or if the quota has been exceeded.)\n     *\n     * Dispatches a storage event on Window objects holding an equivalent Storage object.\n     */\n    setItem(key: string, value: string): void;\n    [name: string]: any;\n}\n\ndeclare var Storage: {\n    prototype: Storage;\n    new(): Storage;\n};\n\n/** A StorageEvent is sent to a window when a storage area it has access to is changed within the context of another document. */\ninterface StorageEvent extends Event {\n    /** Returns the key of the storage item being changed. */\n    readonly key: string | null;\n    /** Returns the new value of the key of the storage item whose value is being changed. */\n    readonly newValue: string | null;\n    /** Returns the old value of the key of the storage item whose value is being changed. */\n    readonly oldValue: string | null;\n    /** Returns the Storage object that was affected. */\n    readonly storageArea: Storage | null;\n    /** Returns the URL of the document whose storage item changed. */\n    readonly url: string;\n    /** @deprecated */\n    initStorageEvent(type: string, bubbles?: boolean, cancelable?: boolean, key?: string | null, oldValue?: string | null, newValue?: string | null, url?: string | URL, storageArea?: Storage | null): void;\n}\n\ndeclare var StorageEvent: {\n    prototype: StorageEvent;\n    new(type: string, eventInitDict?: StorageEventInit): StorageEvent;\n};\n\n/** Available only in secure contexts. */\ninterface StorageManager {\n    estimate(): Promise<StorageEstimate>;\n    getDirectory(): Promise<FileSystemDirectoryHandle>;\n    persist(): Promise<boolean>;\n    persisted(): Promise<boolean>;\n}\n\ndeclare var StorageManager: {\n    prototype: StorageManager;\n    new(): StorageManager;\n};\n\n/** @deprecated */\ninterface StyleMedia {\n    type: string;\n    matchMedium(mediaquery: string): boolean;\n}\n\n/** A single style sheet. CSS style sheets will further implement the more specialized CSSStyleSheet interface. */\ninterface StyleSheet {\n    disabled: boolean;\n    readonly href: string | null;\n    readonly media: MediaList;\n    readonly ownerNode: Element | ProcessingInstruction | null;\n    readonly parentStyleSheet: CSSStyleSheet | null;\n    readonly title: string | null;\n    readonly type: string;\n}\n\ndeclare var StyleSheet: {\n    prototype: StyleSheet;\n    new(): StyleSheet;\n};\n\n/** A list of StyleSheet. */\ninterface StyleSheetList {\n    readonly length: number;\n    item(index: number): CSSStyleSheet | null;\n    [index: number]: CSSStyleSheet;\n}\n\ndeclare var StyleSheetList: {\n    prototype: StyleSheetList;\n    new(): StyleSheetList;\n};\n\ninterface SubmitEvent extends Event {\n    /** Returns the element representing the submit button that triggered the form submission, or null if the submission was not triggered by a button. */\n    readonly submitter: HTMLElement | null;\n}\n\ndeclare var SubmitEvent: {\n    prototype: SubmitEvent;\n    new(type: string, eventInitDict?: SubmitEventInit): SubmitEvent;\n};\n\n/**\n * This Web Crypto API interface provides a number of low-level cryptographic functions. It is accessed via the Crypto.subtle properties available in a window context (via Window.crypto).\n * Available only in secure contexts.\n */\ninterface SubtleCrypto {\n    decrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer>;\n    deriveBits(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;\n    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;\n    digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise<ArrayBuffer>;\n    encrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer>;\n    exportKey(format: \"jwk\", key: CryptoKey): Promise<JsonWebKey>;\n    exportKey(format: Exclude<KeyFormat, \"jwk\">, key: CryptoKey): Promise<ArrayBuffer>;\n    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKeyPair>;\n    generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKey>;\n    generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair | CryptoKey>;\n    importKey(format: \"jwk\", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKey>;\n    importKey(format: Exclude<KeyFormat, \"jwk\">, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;\n    sign(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer>;\n    unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;\n    verify(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean>;\n    wrapKey(format: KeyFormat, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams): Promise<ArrayBuffer>;\n}\n\ndeclare var SubtleCrypto: {\n    prototype: SubtleCrypto;\n    new(): SubtleCrypto;\n};\n\n/** The textual content of Element or Attr. If an element has no markup within its content, it has a single child implementing Text that contains the element's text. However, if the element contains markup, it is parsed into information items and Text nodes that form its children. */\ninterface Text extends CharacterData, Slottable {\n    /** Returns the combined data of all direct Text node siblings. */\n    readonly wholeText: string;\n    /** Splits data at the given offset and returns the remainder as Text node. */\n    splitText(offset: number): Text;\n}\n\ndeclare var Text: {\n    prototype: Text;\n    new(data?: string): Text;\n};\n\n/** A decoder for a specific method, that is a specific character encoding, like utf-8, iso-8859-2, koi8, cp1261, gbk, etc.\\xA0A decoder takes a stream of bytes as input and emits a stream of code points. For a more scalable, non-native library, see StringView \\u2013 a C-like representation of strings based on typed arrays. */\ninterface TextDecoder extends TextDecoderCommon {\n    /**\n     * Returns the result of running encoding's decoder. The method can be invoked zero or more times with options's stream set to true, and then once without options's stream (or set to false), to process a fragmented input. If the invocation without options's stream (or set to false) has no input, it's clearest to omit both arguments.\n     *\n     * \\`\\`\\`\n     * var string = \"\", decoder = new TextDecoder(encoding), buffer;\n     * while(buffer = next_chunk()) {\n     *   string += decoder.decode(buffer, {stream:true});\n     * }\n     * string += decoder.decode(); // end-of-queue\n     * \\`\\`\\`\n     *\n     * If the error mode is \"fatal\" and encoding's decoder returns error, throws a TypeError.\n     */\n    decode(input?: BufferSource, options?: TextDecodeOptions): string;\n}\n\ndeclare var TextDecoder: {\n    prototype: TextDecoder;\n    new(label?: string, options?: TextDecoderOptions): TextDecoder;\n};\n\ninterface TextDecoderCommon {\n    /** Returns encoding's name, lowercased. */\n    readonly encoding: string;\n    /** Returns true if error mode is \"fatal\", otherwise false. */\n    readonly fatal: boolean;\n    /** Returns the value of ignore BOM. */\n    readonly ignoreBOM: boolean;\n}\n\ninterface TextDecoderStream extends GenericTransformStream, TextDecoderCommon {\n    readonly readable: ReadableStream<string>;\n    readonly writable: WritableStream<BufferSource>;\n}\n\ndeclare var TextDecoderStream: {\n    prototype: TextDecoderStream;\n    new(label?: string, options?: TextDecoderOptions): TextDecoderStream;\n};\n\n/** TextEncoder takes a stream of code points as input and emits a stream of bytes. For a more scalable, non-native library, see StringView \\u2013 a C-like representation of strings based on typed arrays. */\ninterface TextEncoder extends TextEncoderCommon {\n    /** Returns the result of running UTF-8's encoder. */\n    encode(input?: string): Uint8Array;\n    /** Runs the UTF-8 encoder on source, stores the result of that operation into destination, and returns the progress made as an object wherein read is the number of converted code units of source and written is the number of bytes modified in destination. */\n    encodeInto(source: string, destination: Uint8Array): TextEncoderEncodeIntoResult;\n}\n\ndeclare var TextEncoder: {\n    prototype: TextEncoder;\n    new(): TextEncoder;\n};\n\ninterface TextEncoderCommon {\n    /** Returns \"utf-8\". */\n    readonly encoding: string;\n}\n\ninterface TextEncoderStream extends GenericTransformStream, TextEncoderCommon {\n    readonly readable: ReadableStream<Uint8Array>;\n    readonly writable: WritableStream<string>;\n}\n\ndeclare var TextEncoderStream: {\n    prototype: TextEncoderStream;\n    new(): TextEncoderStream;\n};\n\n/** The dimensions of a piece of text in the canvas, as created by the CanvasRenderingContext2D.measureText() method. */\ninterface TextMetrics {\n    /** Returns the measurement described below. */\n    readonly actualBoundingBoxAscent: number;\n    /** Returns the measurement described below. */\n    readonly actualBoundingBoxDescent: number;\n    /** Returns the measurement described below. */\n    readonly actualBoundingBoxLeft: number;\n    /** Returns the measurement described below. */\n    readonly actualBoundingBoxRight: number;\n    /** Returns the measurement described below. */\n    readonly fontBoundingBoxAscent: number;\n    /** Returns the measurement described below. */\n    readonly fontBoundingBoxDescent: number;\n    /** Returns the measurement described below. */\n    readonly width: number;\n}\n\ndeclare var TextMetrics: {\n    prototype: TextMetrics;\n    new(): TextMetrics;\n};\n\ninterface TextTrackEventMap {\n    \"cuechange\": Event;\n}\n\n/** This interface also inherits properties from EventTarget. */\ninterface TextTrack extends EventTarget {\n    /** Returns the text track cues from the text track list of cues that are currently active (i.e. that start before the current playback position and end after it), as a TextTrackCueList object. */\n    readonly activeCues: TextTrackCueList | null;\n    /** Returns the text track list of cues, as a TextTrackCueList object. */\n    readonly cues: TextTrackCueList | null;\n    /**\n     * Returns the ID of the given track.\n     *\n     * For in-band tracks, this is the ID that can be used with a fragment if the format supports media fragment syntax, and that can be used with the getTrackById() method.\n     *\n     * For TextTrack objects corresponding to track elements, this is the ID of the track element.\n     */\n    readonly id: string;\n    /** Returns the text track in-band metadata track dispatch type string. */\n    readonly inBandMetadataTrackDispatchType: string;\n    /** Returns the text track kind string. */\n    readonly kind: TextTrackKind;\n    /** Returns the text track label, if there is one, or the empty string otherwise (indicating that a custom label probably needs to be generated from the other attributes of the object if the object is exposed to the user). */\n    readonly label: string;\n    /** Returns the text track language string. */\n    readonly language: string;\n    /**\n     * Returns the text track mode, represented by a string from the following list:\n     *\n     * Can be set, to change the mode.\n     */\n    mode: TextTrackMode;\n    oncuechange: ((this: TextTrack, ev: Event) => any) | null;\n    /** Adds the given cue to textTrack's text track list of cues. */\n    addCue(cue: TextTrackCue): void;\n    /** Removes the given cue from textTrack's text track list of cues. */\n    removeCue(cue: TextTrackCue): void;\n    addEventListener<K extends keyof TextTrackEventMap>(type: K, listener: (this: TextTrack, ev: TextTrackEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof TextTrackEventMap>(type: K, listener: (this: TextTrack, ev: TextTrackEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var TextTrack: {\n    prototype: TextTrack;\n    new(): TextTrack;\n};\n\ninterface TextTrackCueEventMap {\n    \"enter\": Event;\n    \"exit\": Event;\n}\n\n/** TextTrackCues represent a string of text that will be displayed for some duration of time on a TextTrack. This includes the start and end times that the cue will be displayed. A TextTrackCue cannot be used directly, instead one of the derived types (e.g. VTTCue) must be used. */\ninterface TextTrackCue extends EventTarget {\n    /**\n     * Returns the text track cue end time, in seconds.\n     *\n     * Can be set.\n     */\n    endTime: number;\n    /**\n     * Returns the text track cue identifier.\n     *\n     * Can be set.\n     */\n    id: string;\n    onenter: ((this: TextTrackCue, ev: Event) => any) | null;\n    onexit: ((this: TextTrackCue, ev: Event) => any) | null;\n    /**\n     * Returns true if the text track cue pause-on-exit flag is set, false otherwise.\n     *\n     * Can be set.\n     */\n    pauseOnExit: boolean;\n    /**\n     * Returns the text track cue start time, in seconds.\n     *\n     * Can be set.\n     */\n    startTime: number;\n    /** Returns the TextTrack object to which this text track cue belongs, if any, or null otherwise. */\n    readonly track: TextTrack | null;\n    addEventListener<K extends keyof TextTrackCueEventMap>(type: K, listener: (this: TextTrackCue, ev: TextTrackCueEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof TextTrackCueEventMap>(type: K, listener: (this: TextTrackCue, ev: TextTrackCueEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var TextTrackCue: {\n    prototype: TextTrackCue;\n    new(): TextTrackCue;\n};\n\ninterface TextTrackCueList {\n    /** Returns the number of cues in the list. */\n    readonly length: number;\n    /**\n     * Returns the first text track cue (in text track cue order) with text track cue identifier id.\n     *\n     * Returns null if none of the cues have the given identifier or if the argument is the empty string.\n     */\n    getCueById(id: string): TextTrackCue | null;\n    [index: number]: TextTrackCue;\n}\n\ndeclare var TextTrackCueList: {\n    prototype: TextTrackCueList;\n    new(): TextTrackCueList;\n};\n\ninterface TextTrackListEventMap {\n    \"addtrack\": TrackEvent;\n    \"change\": Event;\n    \"removetrack\": TrackEvent;\n}\n\ninterface TextTrackList extends EventTarget {\n    readonly length: number;\n    onaddtrack: ((this: TextTrackList, ev: TrackEvent) => any) | null;\n    onchange: ((this: TextTrackList, ev: Event) => any) | null;\n    onremovetrack: ((this: TextTrackList, ev: TrackEvent) => any) | null;\n    getTrackById(id: string): TextTrack | null;\n    addEventListener<K extends keyof TextTrackListEventMap>(type: K, listener: (this: TextTrackList, ev: TextTrackListEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof TextTrackListEventMap>(type: K, listener: (this: TextTrackList, ev: TextTrackListEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n    [index: number]: TextTrack;\n}\n\ndeclare var TextTrackList: {\n    prototype: TextTrackList;\n    new(): TextTrackList;\n};\n\n/** Used to represent a set of time ranges, primarily for the purpose of tracking which portions of media have been buffered when loading it for use by the <audio> and <video>\\xA0elements. */\ninterface TimeRanges {\n    /** Returns the number of ranges in the object. */\n    readonly length: number;\n    /**\n     * Returns the time for the end of the range with the given index.\n     *\n     * Throws an \"IndexSizeError\" DOMException if the index is out of range.\n     */\n    end(index: number): number;\n    /**\n     * Returns the time for the start of the range with the given index.\n     *\n     * Throws an \"IndexSizeError\" DOMException if the index is out of range.\n     */\n    start(index: number): number;\n}\n\ndeclare var TimeRanges: {\n    prototype: TimeRanges;\n    new(): TimeRanges;\n};\n\n/** A single contact point on a touch-sensitive device. The contact point is commonly a finger or stylus and the device may be a touchscreen or trackpad. */\ninterface Touch {\n    readonly clientX: number;\n    readonly clientY: number;\n    readonly force: number;\n    readonly identifier: number;\n    readonly pageX: number;\n    readonly pageY: number;\n    readonly radiusX: number;\n    readonly radiusY: number;\n    readonly rotationAngle: number;\n    readonly screenX: number;\n    readonly screenY: number;\n    readonly target: EventTarget;\n}\n\ndeclare var Touch: {\n    prototype: Touch;\n    new(touchInitDict: TouchInit): Touch;\n};\n\n/** An event sent when the state of contacts with a touch-sensitive surface changes. This surface can be a touch screen or trackpad, for example. The event can describe one or more points of contact with the screen and includes support for detecting movement, addition and removal of contact points, and so forth. */\ninterface TouchEvent extends UIEvent {\n    readonly altKey: boolean;\n    readonly changedTouches: TouchList;\n    readonly ctrlKey: boolean;\n    readonly metaKey: boolean;\n    readonly shiftKey: boolean;\n    readonly targetTouches: TouchList;\n    readonly touches: TouchList;\n}\n\ndeclare var TouchEvent: {\n    prototype: TouchEvent;\n    new(type: string, eventInitDict?: TouchEventInit): TouchEvent;\n};\n\n/** A list of contact points on a touch surface. For example, if the user has three fingers on the touch surface (such as a screen or trackpad), the corresponding TouchList object would have one Touch object for each finger, for a total of three entries. */\ninterface TouchList {\n    readonly length: number;\n    item(index: number): Touch | null;\n    [index: number]: Touch;\n}\n\ndeclare var TouchList: {\n    prototype: TouchList;\n    new(): TouchList;\n};\n\n/** The TrackEvent interface, part of the HTML DOM specification, is used for events which represent changes to the set of available tracks on an HTML media element; these events are addtrack and removetrack. */\ninterface TrackEvent extends Event {\n    /** Returns the track object (TextTrack, AudioTrack, or VideoTrack) to which the event relates. */\n    readonly track: TextTrack | null;\n}\n\ndeclare var TrackEvent: {\n    prototype: TrackEvent;\n    new(type: string, eventInitDict?: TrackEventInit): TrackEvent;\n};\n\ninterface TransformStream<I = any, O = any> {\n    readonly readable: ReadableStream<O>;\n    readonly writable: WritableStream<I>;\n}\n\ndeclare var TransformStream: {\n    prototype: TransformStream;\n    new<I = any, O = any>(transformer?: Transformer<I, O>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<O>): TransformStream<I, O>;\n};\n\ninterface TransformStreamDefaultController<O = any> {\n    readonly desiredSize: number | null;\n    enqueue(chunk?: O): void;\n    error(reason?: any): void;\n    terminate(): void;\n}\n\ndeclare var TransformStreamDefaultController: {\n    prototype: TransformStreamDefaultController;\n    new(): TransformStreamDefaultController;\n};\n\n/** Events providing information related to transitions. */\ninterface TransitionEvent extends Event {\n    readonly elapsedTime: number;\n    readonly propertyName: string;\n    readonly pseudoElement: string;\n}\n\ndeclare var TransitionEvent: {\n    prototype: TransitionEvent;\n    new(type: string, transitionEventInitDict?: TransitionEventInit): TransitionEvent;\n};\n\n/** The nodes of a document subtree and a position within them. */\ninterface TreeWalker {\n    currentNode: Node;\n    readonly filter: NodeFilter | null;\n    readonly root: Node;\n    readonly whatToShow: number;\n    firstChild(): Node | null;\n    lastChild(): Node | null;\n    nextNode(): Node | null;\n    nextSibling(): Node | null;\n    parentNode(): Node | null;\n    previousNode(): Node | null;\n    previousSibling(): Node | null;\n}\n\ndeclare var TreeWalker: {\n    prototype: TreeWalker;\n    new(): TreeWalker;\n};\n\n/** Simple user interface events. */\ninterface UIEvent extends Event {\n    readonly detail: number;\n    readonly view: Window | null;\n    /** @deprecated */\n    readonly which: number;\n    /** @deprecated */\n    initUIEvent(typeArg: string, bubblesArg?: boolean, cancelableArg?: boolean, viewArg?: Window | null, detailArg?: number): void;\n}\n\ndeclare var UIEvent: {\n    prototype: UIEvent;\n    new(type: string, eventInitDict?: UIEventInit): UIEvent;\n};\n\n/** The URL\\xA0interface represents an object providing static methods used for creating object URLs. */\ninterface URL {\n    hash: string;\n    host: string;\n    hostname: string;\n    href: string;\n    toString(): string;\n    readonly origin: string;\n    password: string;\n    pathname: string;\n    port: string;\n    protocol: string;\n    search: string;\n    readonly searchParams: URLSearchParams;\n    username: string;\n    toJSON(): string;\n}\n\ndeclare var URL: {\n    prototype: URL;\n    new(url: string | URL, base?: string | URL): URL;\n    createObjectURL(obj: Blob | MediaSource): string;\n    revokeObjectURL(url: string): void;\n};\n\ntype webkitURL = URL;\ndeclare var webkitURL: typeof URL;\n\ninterface URLSearchParams {\n    /** Appends a specified key/value pair as a new search parameter. */\n    append(name: string, value: string): void;\n    /** Deletes the given search parameter, and its associated value, from the list of all search parameters. */\n    delete(name: string): void;\n    /** Returns the first value associated to the given search parameter. */\n    get(name: string): string | null;\n    /** Returns all the values association with a given search parameter. */\n    getAll(name: string): string[];\n    /** Returns a Boolean indicating if such a search parameter exists. */\n    has(name: string): boolean;\n    /** Sets the value associated to a given search parameter to the given value. If there were several values, delete the others. */\n    set(name: string, value: string): void;\n    sort(): void;\n    /** Returns a string containing a query string suitable for use in a URL. Does not include the question mark. */\n    toString(): string;\n    forEach(callbackfn: (value: string, key: string, parent: URLSearchParams) => void, thisArg?: any): void;\n}\n\ndeclare var URLSearchParams: {\n    prototype: URLSearchParams;\n    new(init?: string[][] | Record<string, string> | string | URLSearchParams): URLSearchParams;\n    toString(): string;\n};\n\ninterface VTTCue extends TextTrackCue {\n    align: AlignSetting;\n    line: LineAndPositionSetting;\n    lineAlign: LineAlignSetting;\n    position: LineAndPositionSetting;\n    positionAlign: PositionAlignSetting;\n    region: VTTRegion | null;\n    size: number;\n    snapToLines: boolean;\n    text: string;\n    vertical: DirectionSetting;\n    getCueAsHTML(): DocumentFragment;\n    addEventListener<K extends keyof TextTrackCueEventMap>(type: K, listener: (this: VTTCue, ev: TextTrackCueEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof TextTrackCueEventMap>(type: K, listener: (this: VTTCue, ev: TextTrackCueEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var VTTCue: {\n    prototype: VTTCue;\n    new(startTime: number, endTime: number, text: string): VTTCue;\n};\n\ninterface VTTRegion {\n    id: string;\n    lines: number;\n    regionAnchorX: number;\n    regionAnchorY: number;\n    scroll: ScrollSetting;\n    viewportAnchorX: number;\n    viewportAnchorY: number;\n    width: number;\n}\n\ndeclare var VTTRegion: {\n    prototype: VTTRegion;\n    new(): VTTRegion;\n};\n\n/** The validity states that an element can be in, with respect to constraint validation. Together, they help explain why an element's value fails to validate, if it's not valid. */\ninterface ValidityState {\n    readonly badInput: boolean;\n    readonly customError: boolean;\n    readonly patternMismatch: boolean;\n    readonly rangeOverflow: boolean;\n    readonly rangeUnderflow: boolean;\n    readonly stepMismatch: boolean;\n    readonly tooLong: boolean;\n    readonly tooShort: boolean;\n    readonly typeMismatch: boolean;\n    readonly valid: boolean;\n    readonly valueMissing: boolean;\n}\n\ndeclare var ValidityState: {\n    prototype: ValidityState;\n    new(): ValidityState;\n};\n\ninterface VideoColorSpace {\n    readonly fullRange: boolean | null;\n    readonly matrix: VideoMatrixCoefficients | null;\n    readonly primaries: VideoColorPrimaries | null;\n    readonly transfer: VideoTransferCharacteristics | null;\n    toJSON(): VideoColorSpaceInit;\n}\n\ndeclare var VideoColorSpace: {\n    prototype: VideoColorSpace;\n    new(init?: VideoColorSpaceInit): VideoColorSpace;\n};\n\n/** Returned by the HTMLVideoElement.getVideoPlaybackQuality() method and contains metrics that can be used to determine the playback quality of a video. */\ninterface VideoPlaybackQuality {\n    /** @deprecated */\n    readonly corruptedVideoFrames: number;\n    readonly creationTime: DOMHighResTimeStamp;\n    readonly droppedVideoFrames: number;\n    readonly totalVideoFrames: number;\n}\n\ndeclare var VideoPlaybackQuality: {\n    prototype: VideoPlaybackQuality;\n    new(): VideoPlaybackQuality;\n};\n\ninterface VisualViewportEventMap {\n    \"resize\": Event;\n    \"scroll\": Event;\n}\n\ninterface VisualViewport extends EventTarget {\n    readonly height: number;\n    readonly offsetLeft: number;\n    readonly offsetTop: number;\n    onresize: ((this: VisualViewport, ev: Event) => any) | null;\n    onscroll: ((this: VisualViewport, ev: Event) => any) | null;\n    readonly pageLeft: number;\n    readonly pageTop: number;\n    readonly scale: number;\n    readonly width: number;\n    addEventListener<K extends keyof VisualViewportEventMap>(type: K, listener: (this: VisualViewport, ev: VisualViewportEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof VisualViewportEventMap>(type: K, listener: (this: VisualViewport, ev: VisualViewportEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var VisualViewport: {\n    prototype: VisualViewport;\n    new(): VisualViewport;\n};\n\ninterface WEBGL_color_buffer_float {\n    readonly RGBA32F_EXT: 0x8814;\n    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211;\n    readonly UNSIGNED_NORMALIZED_EXT: 0x8C17;\n}\n\ninterface WEBGL_compressed_texture_astc {\n    getSupportedProfiles(): string[];\n    readonly COMPRESSED_RGBA_ASTC_4x4_KHR: 0x93B0;\n    readonly COMPRESSED_RGBA_ASTC_5x4_KHR: 0x93B1;\n    readonly COMPRESSED_RGBA_ASTC_5x5_KHR: 0x93B2;\n    readonly COMPRESSED_RGBA_ASTC_6x5_KHR: 0x93B3;\n    readonly COMPRESSED_RGBA_ASTC_6x6_KHR: 0x93B4;\n    readonly COMPRESSED_RGBA_ASTC_8x5_KHR: 0x93B5;\n    readonly COMPRESSED_RGBA_ASTC_8x6_KHR: 0x93B6;\n    readonly COMPRESSED_RGBA_ASTC_8x8_KHR: 0x93B7;\n    readonly COMPRESSED_RGBA_ASTC_10x5_KHR: 0x93B8;\n    readonly COMPRESSED_RGBA_ASTC_10x6_KHR: 0x93B9;\n    readonly COMPRESSED_RGBA_ASTC_10x8_KHR: 0x93BA;\n    readonly COMPRESSED_RGBA_ASTC_10x10_KHR: 0x93BB;\n    readonly COMPRESSED_RGBA_ASTC_12x10_KHR: 0x93BC;\n    readonly COMPRESSED_RGBA_ASTC_12x12_KHR: 0x93BD;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: 0x93D0;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR: 0x93D1;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR: 0x93D2;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR: 0x93D3;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR: 0x93D4;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR: 0x93D5;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR: 0x93D6;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: 0x93D7;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR: 0x93D8;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR: 0x93D9;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR: 0x93DA;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR: 0x93DB;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR: 0x93DC;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR: 0x93DD;\n}\n\ninterface WEBGL_compressed_texture_etc {\n    readonly COMPRESSED_R11_EAC: 0x9270;\n    readonly COMPRESSED_SIGNED_R11_EAC: 0x9271;\n    readonly COMPRESSED_RG11_EAC: 0x9272;\n    readonly COMPRESSED_SIGNED_RG11_EAC: 0x9273;\n    readonly COMPRESSED_RGB8_ETC2: 0x9274;\n    readonly COMPRESSED_SRGB8_ETC2: 0x9275;\n    readonly COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9276;\n    readonly COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9277;\n    readonly COMPRESSED_RGBA8_ETC2_EAC: 0x9278;\n    readonly COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9279;\n}\n\ninterface WEBGL_compressed_texture_etc1 {\n    readonly COMPRESSED_RGB_ETC1_WEBGL: 0x8D64;\n}\n\n/** The WEBGL_compressed_texture_s3tc extension is part of the WebGL API and exposes four S3TC compressed texture formats. */\ninterface WEBGL_compressed_texture_s3tc {\n    readonly COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83F0;\n    readonly COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83F1;\n    readonly COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83F2;\n    readonly COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83F3;\n}\n\ninterface WEBGL_compressed_texture_s3tc_srgb {\n    readonly COMPRESSED_SRGB_S3TC_DXT1_EXT: 0x8C4C;\n    readonly COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 0x8C4D;\n    readonly COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 0x8C4E;\n    readonly COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 0x8C4F;\n}\n\n/** The WEBGL_debug_renderer_info extension is part of the WebGL API and exposes two constants with information about the graphics driver for debugging purposes. */\ninterface WEBGL_debug_renderer_info {\n    readonly UNMASKED_VENDOR_WEBGL: 0x9245;\n    readonly UNMASKED_RENDERER_WEBGL: 0x9246;\n}\n\ninterface WEBGL_debug_shaders {\n    getTranslatedShaderSource(shader: WebGLShader): string;\n}\n\n/** The WEBGL_depth_texture extension is part of the WebGL API and defines 2D depth and depth-stencil textures. */\ninterface WEBGL_depth_texture {\n    readonly UNSIGNED_INT_24_8_WEBGL: 0x84FA;\n}\n\ninterface WEBGL_draw_buffers {\n    drawBuffersWEBGL(buffers: GLenum[]): void;\n    readonly COLOR_ATTACHMENT0_WEBGL: 0x8CE0;\n    readonly COLOR_ATTACHMENT1_WEBGL: 0x8CE1;\n    readonly COLOR_ATTACHMENT2_WEBGL: 0x8CE2;\n    readonly COLOR_ATTACHMENT3_WEBGL: 0x8CE3;\n    readonly COLOR_ATTACHMENT4_WEBGL: 0x8CE4;\n    readonly COLOR_ATTACHMENT5_WEBGL: 0x8CE5;\n    readonly COLOR_ATTACHMENT6_WEBGL: 0x8CE6;\n    readonly COLOR_ATTACHMENT7_WEBGL: 0x8CE7;\n    readonly COLOR_ATTACHMENT8_WEBGL: 0x8CE8;\n    readonly COLOR_ATTACHMENT9_WEBGL: 0x8CE9;\n    readonly COLOR_ATTACHMENT10_WEBGL: 0x8CEA;\n    readonly COLOR_ATTACHMENT11_WEBGL: 0x8CEB;\n    readonly COLOR_ATTACHMENT12_WEBGL: 0x8CEC;\n    readonly COLOR_ATTACHMENT13_WEBGL: 0x8CED;\n    readonly COLOR_ATTACHMENT14_WEBGL: 0x8CEE;\n    readonly COLOR_ATTACHMENT15_WEBGL: 0x8CEF;\n    readonly DRAW_BUFFER0_WEBGL: 0x8825;\n    readonly DRAW_BUFFER1_WEBGL: 0x8826;\n    readonly DRAW_BUFFER2_WEBGL: 0x8827;\n    readonly DRAW_BUFFER3_WEBGL: 0x8828;\n    readonly DRAW_BUFFER4_WEBGL: 0x8829;\n    readonly DRAW_BUFFER5_WEBGL: 0x882A;\n    readonly DRAW_BUFFER6_WEBGL: 0x882B;\n    readonly DRAW_BUFFER7_WEBGL: 0x882C;\n    readonly DRAW_BUFFER8_WEBGL: 0x882D;\n    readonly DRAW_BUFFER9_WEBGL: 0x882E;\n    readonly DRAW_BUFFER10_WEBGL: 0x882F;\n    readonly DRAW_BUFFER11_WEBGL: 0x8830;\n    readonly DRAW_BUFFER12_WEBGL: 0x8831;\n    readonly DRAW_BUFFER13_WEBGL: 0x8832;\n    readonly DRAW_BUFFER14_WEBGL: 0x8833;\n    readonly DRAW_BUFFER15_WEBGL: 0x8834;\n    readonly MAX_COLOR_ATTACHMENTS_WEBGL: 0x8CDF;\n    readonly MAX_DRAW_BUFFERS_WEBGL: 0x8824;\n}\n\ninterface WEBGL_lose_context {\n    loseContext(): void;\n    restoreContext(): void;\n}\n\ninterface WEBGL_multi_draw {\n    multiDrawArraysInstancedWEBGL(mode: GLenum, firstsList: Int32Array | GLint[], firstsOffset: GLuint, countsList: Int32Array | GLsizei[], countsOffset: GLuint, instanceCountsList: Int32Array | GLsizei[], instanceCountsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawArraysWEBGL(mode: GLenum, firstsList: Int32Array | GLint[], firstsOffset: GLuint, countsList: Int32Array | GLsizei[], countsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawElementsInstancedWEBGL(mode: GLenum, countsList: Int32Array | GLsizei[], countsOffset: GLuint, type: GLenum, offsetsList: Int32Array | GLsizei[], offsetsOffset: GLuint, instanceCountsList: Int32Array | GLsizei[], instanceCountsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawElementsWEBGL(mode: GLenum, countsList: Int32Array | GLsizei[], countsOffset: GLuint, type: GLenum, offsetsList: Int32Array | GLsizei[], offsetsOffset: GLuint, drawcount: GLsizei): void;\n}\n\n/** A WaveShaperNode always has exactly one input and one output. */\ninterface WaveShaperNode extends AudioNode {\n    curve: Float32Array | null;\n    oversample: OverSampleType;\n}\n\ndeclare var WaveShaperNode: {\n    prototype: WaveShaperNode;\n    new(context: BaseAudioContext, options?: WaveShaperOptions): WaveShaperNode;\n};\n\ninterface WebGL2RenderingContext extends WebGL2RenderingContextBase, WebGL2RenderingContextOverloads, WebGLRenderingContextBase {\n}\n\ndeclare var WebGL2RenderingContext: {\n    prototype: WebGL2RenderingContext;\n    new(): WebGL2RenderingContext;\n    readonly READ_BUFFER: 0x0C02;\n    readonly UNPACK_ROW_LENGTH: 0x0CF2;\n    readonly UNPACK_SKIP_ROWS: 0x0CF3;\n    readonly UNPACK_SKIP_PIXELS: 0x0CF4;\n    readonly PACK_ROW_LENGTH: 0x0D02;\n    readonly PACK_SKIP_ROWS: 0x0D03;\n    readonly PACK_SKIP_PIXELS: 0x0D04;\n    readonly COLOR: 0x1800;\n    readonly DEPTH: 0x1801;\n    readonly STENCIL: 0x1802;\n    readonly RED: 0x1903;\n    readonly RGB8: 0x8051;\n    readonly RGBA8: 0x8058;\n    readonly RGB10_A2: 0x8059;\n    readonly TEXTURE_BINDING_3D: 0x806A;\n    readonly UNPACK_SKIP_IMAGES: 0x806D;\n    readonly UNPACK_IMAGE_HEIGHT: 0x806E;\n    readonly TEXTURE_3D: 0x806F;\n    readonly TEXTURE_WRAP_R: 0x8072;\n    readonly MAX_3D_TEXTURE_SIZE: 0x8073;\n    readonly UNSIGNED_INT_2_10_10_10_REV: 0x8368;\n    readonly MAX_ELEMENTS_VERTICES: 0x80E8;\n    readonly MAX_ELEMENTS_INDICES: 0x80E9;\n    readonly TEXTURE_MIN_LOD: 0x813A;\n    readonly TEXTURE_MAX_LOD: 0x813B;\n    readonly TEXTURE_BASE_LEVEL: 0x813C;\n    readonly TEXTURE_MAX_LEVEL: 0x813D;\n    readonly MIN: 0x8007;\n    readonly MAX: 0x8008;\n    readonly DEPTH_COMPONENT24: 0x81A6;\n    readonly MAX_TEXTURE_LOD_BIAS: 0x84FD;\n    readonly TEXTURE_COMPARE_MODE: 0x884C;\n    readonly TEXTURE_COMPARE_FUNC: 0x884D;\n    readonly CURRENT_QUERY: 0x8865;\n    readonly QUERY_RESULT: 0x8866;\n    readonly QUERY_RESULT_AVAILABLE: 0x8867;\n    readonly STREAM_READ: 0x88E1;\n    readonly STREAM_COPY: 0x88E2;\n    readonly STATIC_READ: 0x88E5;\n    readonly STATIC_COPY: 0x88E6;\n    readonly DYNAMIC_READ: 0x88E9;\n    readonly DYNAMIC_COPY: 0x88EA;\n    readonly MAX_DRAW_BUFFERS: 0x8824;\n    readonly DRAW_BUFFER0: 0x8825;\n    readonly DRAW_BUFFER1: 0x8826;\n    readonly DRAW_BUFFER2: 0x8827;\n    readonly DRAW_BUFFER3: 0x8828;\n    readonly DRAW_BUFFER4: 0x8829;\n    readonly DRAW_BUFFER5: 0x882A;\n    readonly DRAW_BUFFER6: 0x882B;\n    readonly DRAW_BUFFER7: 0x882C;\n    readonly DRAW_BUFFER8: 0x882D;\n    readonly DRAW_BUFFER9: 0x882E;\n    readonly DRAW_BUFFER10: 0x882F;\n    readonly DRAW_BUFFER11: 0x8830;\n    readonly DRAW_BUFFER12: 0x8831;\n    readonly DRAW_BUFFER13: 0x8832;\n    readonly DRAW_BUFFER14: 0x8833;\n    readonly DRAW_BUFFER15: 0x8834;\n    readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8B49;\n    readonly MAX_VERTEX_UNIFORM_COMPONENTS: 0x8B4A;\n    readonly SAMPLER_3D: 0x8B5F;\n    readonly SAMPLER_2D_SHADOW: 0x8B62;\n    readonly FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8B8B;\n    readonly PIXEL_PACK_BUFFER: 0x88EB;\n    readonly PIXEL_UNPACK_BUFFER: 0x88EC;\n    readonly PIXEL_PACK_BUFFER_BINDING: 0x88ED;\n    readonly PIXEL_UNPACK_BUFFER_BINDING: 0x88EF;\n    readonly FLOAT_MAT2x3: 0x8B65;\n    readonly FLOAT_MAT2x4: 0x8B66;\n    readonly FLOAT_MAT3x2: 0x8B67;\n    readonly FLOAT_MAT3x4: 0x8B68;\n    readonly FLOAT_MAT4x2: 0x8B69;\n    readonly FLOAT_MAT4x3: 0x8B6A;\n    readonly SRGB: 0x8C40;\n    readonly SRGB8: 0x8C41;\n    readonly SRGB8_ALPHA8: 0x8C43;\n    readonly COMPARE_REF_TO_TEXTURE: 0x884E;\n    readonly RGBA32F: 0x8814;\n    readonly RGB32F: 0x8815;\n    readonly RGBA16F: 0x881A;\n    readonly RGB16F: 0x881B;\n    readonly VERTEX_ATTRIB_ARRAY_INTEGER: 0x88FD;\n    readonly MAX_ARRAY_TEXTURE_LAYERS: 0x88FF;\n    readonly MIN_PROGRAM_TEXEL_OFFSET: 0x8904;\n    readonly MAX_PROGRAM_TEXEL_OFFSET: 0x8905;\n    readonly MAX_VARYING_COMPONENTS: 0x8B4B;\n    readonly TEXTURE_2D_ARRAY: 0x8C1A;\n    readonly TEXTURE_BINDING_2D_ARRAY: 0x8C1D;\n    readonly R11F_G11F_B10F: 0x8C3A;\n    readonly UNSIGNED_INT_10F_11F_11F_REV: 0x8C3B;\n    readonly RGB9_E5: 0x8C3D;\n    readonly UNSIGNED_INT_5_9_9_9_REV: 0x8C3E;\n    readonly TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8C7F;\n    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8C80;\n    readonly TRANSFORM_FEEDBACK_VARYINGS: 0x8C83;\n    readonly TRANSFORM_FEEDBACK_BUFFER_START: 0x8C84;\n    readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8C85;\n    readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8C88;\n    readonly RASTERIZER_DISCARD: 0x8C89;\n    readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8C8A;\n    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8C8B;\n    readonly INTERLEAVED_ATTRIBS: 0x8C8C;\n    readonly SEPARATE_ATTRIBS: 0x8C8D;\n    readonly TRANSFORM_FEEDBACK_BUFFER: 0x8C8E;\n    readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8C8F;\n    readonly RGBA32UI: 0x8D70;\n    readonly RGB32UI: 0x8D71;\n    readonly RGBA16UI: 0x8D76;\n    readonly RGB16UI: 0x8D77;\n    readonly RGBA8UI: 0x8D7C;\n    readonly RGB8UI: 0x8D7D;\n    readonly RGBA32I: 0x8D82;\n    readonly RGB32I: 0x8D83;\n    readonly RGBA16I: 0x8D88;\n    readonly RGB16I: 0x8D89;\n    readonly RGBA8I: 0x8D8E;\n    readonly RGB8I: 0x8D8F;\n    readonly RED_INTEGER: 0x8D94;\n    readonly RGB_INTEGER: 0x8D98;\n    readonly RGBA_INTEGER: 0x8D99;\n    readonly SAMPLER_2D_ARRAY: 0x8DC1;\n    readonly SAMPLER_2D_ARRAY_SHADOW: 0x8DC4;\n    readonly SAMPLER_CUBE_SHADOW: 0x8DC5;\n    readonly UNSIGNED_INT_VEC2: 0x8DC6;\n    readonly UNSIGNED_INT_VEC3: 0x8DC7;\n    readonly UNSIGNED_INT_VEC4: 0x8DC8;\n    readonly INT_SAMPLER_2D: 0x8DCA;\n    readonly INT_SAMPLER_3D: 0x8DCB;\n    readonly INT_SAMPLER_CUBE: 0x8DCC;\n    readonly INT_SAMPLER_2D_ARRAY: 0x8DCF;\n    readonly UNSIGNED_INT_SAMPLER_2D: 0x8DD2;\n    readonly UNSIGNED_INT_SAMPLER_3D: 0x8DD3;\n    readonly UNSIGNED_INT_SAMPLER_CUBE: 0x8DD4;\n    readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8DD7;\n    readonly DEPTH_COMPONENT32F: 0x8CAC;\n    readonly DEPTH32F_STENCIL8: 0x8CAD;\n    readonly FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8DAD;\n    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210;\n    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211;\n    readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212;\n    readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213;\n    readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214;\n    readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215;\n    readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216;\n    readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217;\n    readonly FRAMEBUFFER_DEFAULT: 0x8218;\n    readonly UNSIGNED_INT_24_8: 0x84FA;\n    readonly DEPTH24_STENCIL8: 0x88F0;\n    readonly UNSIGNED_NORMALIZED: 0x8C17;\n    readonly DRAW_FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly READ_FRAMEBUFFER: 0x8CA8;\n    readonly DRAW_FRAMEBUFFER: 0x8CA9;\n    readonly READ_FRAMEBUFFER_BINDING: 0x8CAA;\n    readonly RENDERBUFFER_SAMPLES: 0x8CAB;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8CD4;\n    readonly MAX_COLOR_ATTACHMENTS: 0x8CDF;\n    readonly COLOR_ATTACHMENT1: 0x8CE1;\n    readonly COLOR_ATTACHMENT2: 0x8CE2;\n    readonly COLOR_ATTACHMENT3: 0x8CE3;\n    readonly COLOR_ATTACHMENT4: 0x8CE4;\n    readonly COLOR_ATTACHMENT5: 0x8CE5;\n    readonly COLOR_ATTACHMENT6: 0x8CE6;\n    readonly COLOR_ATTACHMENT7: 0x8CE7;\n    readonly COLOR_ATTACHMENT8: 0x8CE8;\n    readonly COLOR_ATTACHMENT9: 0x8CE9;\n    readonly COLOR_ATTACHMENT10: 0x8CEA;\n    readonly COLOR_ATTACHMENT11: 0x8CEB;\n    readonly COLOR_ATTACHMENT12: 0x8CEC;\n    readonly COLOR_ATTACHMENT13: 0x8CED;\n    readonly COLOR_ATTACHMENT14: 0x8CEE;\n    readonly COLOR_ATTACHMENT15: 0x8CEF;\n    readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8D56;\n    readonly MAX_SAMPLES: 0x8D57;\n    readonly HALF_FLOAT: 0x140B;\n    readonly RG: 0x8227;\n    readonly RG_INTEGER: 0x8228;\n    readonly R8: 0x8229;\n    readonly RG8: 0x822B;\n    readonly R16F: 0x822D;\n    readonly R32F: 0x822E;\n    readonly RG16F: 0x822F;\n    readonly RG32F: 0x8230;\n    readonly R8I: 0x8231;\n    readonly R8UI: 0x8232;\n    readonly R16I: 0x8233;\n    readonly R16UI: 0x8234;\n    readonly R32I: 0x8235;\n    readonly R32UI: 0x8236;\n    readonly RG8I: 0x8237;\n    readonly RG8UI: 0x8238;\n    readonly RG16I: 0x8239;\n    readonly RG16UI: 0x823A;\n    readonly RG32I: 0x823B;\n    readonly RG32UI: 0x823C;\n    readonly VERTEX_ARRAY_BINDING: 0x85B5;\n    readonly R8_SNORM: 0x8F94;\n    readonly RG8_SNORM: 0x8F95;\n    readonly RGB8_SNORM: 0x8F96;\n    readonly RGBA8_SNORM: 0x8F97;\n    readonly SIGNED_NORMALIZED: 0x8F9C;\n    readonly COPY_READ_BUFFER: 0x8F36;\n    readonly COPY_WRITE_BUFFER: 0x8F37;\n    readonly COPY_READ_BUFFER_BINDING: 0x8F36;\n    readonly COPY_WRITE_BUFFER_BINDING: 0x8F37;\n    readonly UNIFORM_BUFFER: 0x8A11;\n    readonly UNIFORM_BUFFER_BINDING: 0x8A28;\n    readonly UNIFORM_BUFFER_START: 0x8A29;\n    readonly UNIFORM_BUFFER_SIZE: 0x8A2A;\n    readonly MAX_VERTEX_UNIFORM_BLOCKS: 0x8A2B;\n    readonly MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8A2D;\n    readonly MAX_COMBINED_UNIFORM_BLOCKS: 0x8A2E;\n    readonly MAX_UNIFORM_BUFFER_BINDINGS: 0x8A2F;\n    readonly MAX_UNIFORM_BLOCK_SIZE: 0x8A30;\n    readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8A31;\n    readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8A33;\n    readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8A34;\n    readonly ACTIVE_UNIFORM_BLOCKS: 0x8A36;\n    readonly UNIFORM_TYPE: 0x8A37;\n    readonly UNIFORM_SIZE: 0x8A38;\n    readonly UNIFORM_BLOCK_INDEX: 0x8A3A;\n    readonly UNIFORM_OFFSET: 0x8A3B;\n    readonly UNIFORM_ARRAY_STRIDE: 0x8A3C;\n    readonly UNIFORM_MATRIX_STRIDE: 0x8A3D;\n    readonly UNIFORM_IS_ROW_MAJOR: 0x8A3E;\n    readonly UNIFORM_BLOCK_BINDING: 0x8A3F;\n    readonly UNIFORM_BLOCK_DATA_SIZE: 0x8A40;\n    readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8A42;\n    readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8A43;\n    readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8A44;\n    readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8A46;\n    readonly INVALID_INDEX: 0xFFFFFFFF;\n    readonly MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122;\n    readonly MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125;\n    readonly MAX_SERVER_WAIT_TIMEOUT: 0x9111;\n    readonly OBJECT_TYPE: 0x9112;\n    readonly SYNC_CONDITION: 0x9113;\n    readonly SYNC_STATUS: 0x9114;\n    readonly SYNC_FLAGS: 0x9115;\n    readonly SYNC_FENCE: 0x9116;\n    readonly SYNC_GPU_COMMANDS_COMPLETE: 0x9117;\n    readonly UNSIGNALED: 0x9118;\n    readonly SIGNALED: 0x9119;\n    readonly ALREADY_SIGNALED: 0x911A;\n    readonly TIMEOUT_EXPIRED: 0x911B;\n    readonly CONDITION_SATISFIED: 0x911C;\n    readonly WAIT_FAILED: 0x911D;\n    readonly SYNC_FLUSH_COMMANDS_BIT: 0x00000001;\n    readonly VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88FE;\n    readonly ANY_SAMPLES_PASSED: 0x8C2F;\n    readonly ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8D6A;\n    readonly SAMPLER_BINDING: 0x8919;\n    readonly RGB10_A2UI: 0x906F;\n    readonly INT_2_10_10_10_REV: 0x8D9F;\n    readonly TRANSFORM_FEEDBACK: 0x8E22;\n    readonly TRANSFORM_FEEDBACK_PAUSED: 0x8E23;\n    readonly TRANSFORM_FEEDBACK_ACTIVE: 0x8E24;\n    readonly TRANSFORM_FEEDBACK_BINDING: 0x8E25;\n    readonly TEXTURE_IMMUTABLE_FORMAT: 0x912F;\n    readonly MAX_ELEMENT_INDEX: 0x8D6B;\n    readonly TEXTURE_IMMUTABLE_LEVELS: 0x82DF;\n    readonly TIMEOUT_IGNORED: -1;\n    readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247;\n    readonly DEPTH_BUFFER_BIT: 0x00000100;\n    readonly STENCIL_BUFFER_BIT: 0x00000400;\n    readonly COLOR_BUFFER_BIT: 0x00004000;\n    readonly POINTS: 0x0000;\n    readonly LINES: 0x0001;\n    readonly LINE_LOOP: 0x0002;\n    readonly LINE_STRIP: 0x0003;\n    readonly TRIANGLES: 0x0004;\n    readonly TRIANGLE_STRIP: 0x0005;\n    readonly TRIANGLE_FAN: 0x0006;\n    readonly ZERO: 0;\n    readonly ONE: 1;\n    readonly SRC_COLOR: 0x0300;\n    readonly ONE_MINUS_SRC_COLOR: 0x0301;\n    readonly SRC_ALPHA: 0x0302;\n    readonly ONE_MINUS_SRC_ALPHA: 0x0303;\n    readonly DST_ALPHA: 0x0304;\n    readonly ONE_MINUS_DST_ALPHA: 0x0305;\n    readonly DST_COLOR: 0x0306;\n    readonly ONE_MINUS_DST_COLOR: 0x0307;\n    readonly SRC_ALPHA_SATURATE: 0x0308;\n    readonly FUNC_ADD: 0x8006;\n    readonly BLEND_EQUATION: 0x8009;\n    readonly BLEND_EQUATION_RGB: 0x8009;\n    readonly BLEND_EQUATION_ALPHA: 0x883D;\n    readonly FUNC_SUBTRACT: 0x800A;\n    readonly FUNC_REVERSE_SUBTRACT: 0x800B;\n    readonly BLEND_DST_RGB: 0x80C8;\n    readonly BLEND_SRC_RGB: 0x80C9;\n    readonly BLEND_DST_ALPHA: 0x80CA;\n    readonly BLEND_SRC_ALPHA: 0x80CB;\n    readonly CONSTANT_COLOR: 0x8001;\n    readonly ONE_MINUS_CONSTANT_COLOR: 0x8002;\n    readonly CONSTANT_ALPHA: 0x8003;\n    readonly ONE_MINUS_CONSTANT_ALPHA: 0x8004;\n    readonly BLEND_COLOR: 0x8005;\n    readonly ARRAY_BUFFER: 0x8892;\n    readonly ELEMENT_ARRAY_BUFFER: 0x8893;\n    readonly ARRAY_BUFFER_BINDING: 0x8894;\n    readonly ELEMENT_ARRAY_BUFFER_BINDING: 0x8895;\n    readonly STREAM_DRAW: 0x88E0;\n    readonly STATIC_DRAW: 0x88E4;\n    readonly DYNAMIC_DRAW: 0x88E8;\n    readonly BUFFER_SIZE: 0x8764;\n    readonly BUFFER_USAGE: 0x8765;\n    readonly CURRENT_VERTEX_ATTRIB: 0x8626;\n    readonly FRONT: 0x0404;\n    readonly BACK: 0x0405;\n    readonly FRONT_AND_BACK: 0x0408;\n    readonly CULL_FACE: 0x0B44;\n    readonly BLEND: 0x0BE2;\n    readonly DITHER: 0x0BD0;\n    readonly STENCIL_TEST: 0x0B90;\n    readonly DEPTH_TEST: 0x0B71;\n    readonly SCISSOR_TEST: 0x0C11;\n    readonly POLYGON_OFFSET_FILL: 0x8037;\n    readonly SAMPLE_ALPHA_TO_COVERAGE: 0x809E;\n    readonly SAMPLE_COVERAGE: 0x80A0;\n    readonly NO_ERROR: 0;\n    readonly INVALID_ENUM: 0x0500;\n    readonly INVALID_VALUE: 0x0501;\n    readonly INVALID_OPERATION: 0x0502;\n    readonly OUT_OF_MEMORY: 0x0505;\n    readonly CW: 0x0900;\n    readonly CCW: 0x0901;\n    readonly LINE_WIDTH: 0x0B21;\n    readonly ALIASED_POINT_SIZE_RANGE: 0x846D;\n    readonly ALIASED_LINE_WIDTH_RANGE: 0x846E;\n    readonly CULL_FACE_MODE: 0x0B45;\n    readonly FRONT_FACE: 0x0B46;\n    readonly DEPTH_RANGE: 0x0B70;\n    readonly DEPTH_WRITEMASK: 0x0B72;\n    readonly DEPTH_CLEAR_VALUE: 0x0B73;\n    readonly DEPTH_FUNC: 0x0B74;\n    readonly STENCIL_CLEAR_VALUE: 0x0B91;\n    readonly STENCIL_FUNC: 0x0B92;\n    readonly STENCIL_FAIL: 0x0B94;\n    readonly STENCIL_PASS_DEPTH_FAIL: 0x0B95;\n    readonly STENCIL_PASS_DEPTH_PASS: 0x0B96;\n    readonly STENCIL_REF: 0x0B97;\n    readonly STENCIL_VALUE_MASK: 0x0B93;\n    readonly STENCIL_WRITEMASK: 0x0B98;\n    readonly STENCIL_BACK_FUNC: 0x8800;\n    readonly STENCIL_BACK_FAIL: 0x8801;\n    readonly STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802;\n    readonly STENCIL_BACK_PASS_DEPTH_PASS: 0x8803;\n    readonly STENCIL_BACK_REF: 0x8CA3;\n    readonly STENCIL_BACK_VALUE_MASK: 0x8CA4;\n    readonly STENCIL_BACK_WRITEMASK: 0x8CA5;\n    readonly VIEWPORT: 0x0BA2;\n    readonly SCISSOR_BOX: 0x0C10;\n    readonly COLOR_CLEAR_VALUE: 0x0C22;\n    readonly COLOR_WRITEMASK: 0x0C23;\n    readonly UNPACK_ALIGNMENT: 0x0CF5;\n    readonly PACK_ALIGNMENT: 0x0D05;\n    readonly MAX_TEXTURE_SIZE: 0x0D33;\n    readonly MAX_VIEWPORT_DIMS: 0x0D3A;\n    readonly SUBPIXEL_BITS: 0x0D50;\n    readonly RED_BITS: 0x0D52;\n    readonly GREEN_BITS: 0x0D53;\n    readonly BLUE_BITS: 0x0D54;\n    readonly ALPHA_BITS: 0x0D55;\n    readonly DEPTH_BITS: 0x0D56;\n    readonly STENCIL_BITS: 0x0D57;\n    readonly POLYGON_OFFSET_UNITS: 0x2A00;\n    readonly POLYGON_OFFSET_FACTOR: 0x8038;\n    readonly TEXTURE_BINDING_2D: 0x8069;\n    readonly SAMPLE_BUFFERS: 0x80A8;\n    readonly SAMPLES: 0x80A9;\n    readonly SAMPLE_COVERAGE_VALUE: 0x80AA;\n    readonly SAMPLE_COVERAGE_INVERT: 0x80AB;\n    readonly COMPRESSED_TEXTURE_FORMATS: 0x86A3;\n    readonly DONT_CARE: 0x1100;\n    readonly FASTEST: 0x1101;\n    readonly NICEST: 0x1102;\n    readonly GENERATE_MIPMAP_HINT: 0x8192;\n    readonly BYTE: 0x1400;\n    readonly UNSIGNED_BYTE: 0x1401;\n    readonly SHORT: 0x1402;\n    readonly UNSIGNED_SHORT: 0x1403;\n    readonly INT: 0x1404;\n    readonly UNSIGNED_INT: 0x1405;\n    readonly FLOAT: 0x1406;\n    readonly DEPTH_COMPONENT: 0x1902;\n    readonly ALPHA: 0x1906;\n    readonly RGB: 0x1907;\n    readonly RGBA: 0x1908;\n    readonly LUMINANCE: 0x1909;\n    readonly LUMINANCE_ALPHA: 0x190A;\n    readonly UNSIGNED_SHORT_4_4_4_4: 0x8033;\n    readonly UNSIGNED_SHORT_5_5_5_1: 0x8034;\n    readonly UNSIGNED_SHORT_5_6_5: 0x8363;\n    readonly FRAGMENT_SHADER: 0x8B30;\n    readonly VERTEX_SHADER: 0x8B31;\n    readonly MAX_VERTEX_ATTRIBS: 0x8869;\n    readonly MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB;\n    readonly MAX_VARYING_VECTORS: 0x8DFC;\n    readonly MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D;\n    readonly MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C;\n    readonly MAX_TEXTURE_IMAGE_UNITS: 0x8872;\n    readonly MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD;\n    readonly SHADER_TYPE: 0x8B4F;\n    readonly DELETE_STATUS: 0x8B80;\n    readonly LINK_STATUS: 0x8B82;\n    readonly VALIDATE_STATUS: 0x8B83;\n    readonly ATTACHED_SHADERS: 0x8B85;\n    readonly ACTIVE_UNIFORMS: 0x8B86;\n    readonly ACTIVE_ATTRIBUTES: 0x8B89;\n    readonly SHADING_LANGUAGE_VERSION: 0x8B8C;\n    readonly CURRENT_PROGRAM: 0x8B8D;\n    readonly NEVER: 0x0200;\n    readonly LESS: 0x0201;\n    readonly EQUAL: 0x0202;\n    readonly LEQUAL: 0x0203;\n    readonly GREATER: 0x0204;\n    readonly NOTEQUAL: 0x0205;\n    readonly GEQUAL: 0x0206;\n    readonly ALWAYS: 0x0207;\n    readonly KEEP: 0x1E00;\n    readonly REPLACE: 0x1E01;\n    readonly INCR: 0x1E02;\n    readonly DECR: 0x1E03;\n    readonly INVERT: 0x150A;\n    readonly INCR_WRAP: 0x8507;\n    readonly DECR_WRAP: 0x8508;\n    readonly VENDOR: 0x1F00;\n    readonly RENDERER: 0x1F01;\n    readonly VERSION: 0x1F02;\n    readonly NEAREST: 0x2600;\n    readonly LINEAR: 0x2601;\n    readonly NEAREST_MIPMAP_NEAREST: 0x2700;\n    readonly LINEAR_MIPMAP_NEAREST: 0x2701;\n    readonly NEAREST_MIPMAP_LINEAR: 0x2702;\n    readonly LINEAR_MIPMAP_LINEAR: 0x2703;\n    readonly TEXTURE_MAG_FILTER: 0x2800;\n    readonly TEXTURE_MIN_FILTER: 0x2801;\n    readonly TEXTURE_WRAP_S: 0x2802;\n    readonly TEXTURE_WRAP_T: 0x2803;\n    readonly TEXTURE_2D: 0x0DE1;\n    readonly TEXTURE: 0x1702;\n    readonly TEXTURE_CUBE_MAP: 0x8513;\n    readonly TEXTURE_BINDING_CUBE_MAP: 0x8514;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A;\n    readonly MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C;\n    readonly TEXTURE0: 0x84C0;\n    readonly TEXTURE1: 0x84C1;\n    readonly TEXTURE2: 0x84C2;\n    readonly TEXTURE3: 0x84C3;\n    readonly TEXTURE4: 0x84C4;\n    readonly TEXTURE5: 0x84C5;\n    readonly TEXTURE6: 0x84C6;\n    readonly TEXTURE7: 0x84C7;\n    readonly TEXTURE8: 0x84C8;\n    readonly TEXTURE9: 0x84C9;\n    readonly TEXTURE10: 0x84CA;\n    readonly TEXTURE11: 0x84CB;\n    readonly TEXTURE12: 0x84CC;\n    readonly TEXTURE13: 0x84CD;\n    readonly TEXTURE14: 0x84CE;\n    readonly TEXTURE15: 0x84CF;\n    readonly TEXTURE16: 0x84D0;\n    readonly TEXTURE17: 0x84D1;\n    readonly TEXTURE18: 0x84D2;\n    readonly TEXTURE19: 0x84D3;\n    readonly TEXTURE20: 0x84D4;\n    readonly TEXTURE21: 0x84D5;\n    readonly TEXTURE22: 0x84D6;\n    readonly TEXTURE23: 0x84D7;\n    readonly TEXTURE24: 0x84D8;\n    readonly TEXTURE25: 0x84D9;\n    readonly TEXTURE26: 0x84DA;\n    readonly TEXTURE27: 0x84DB;\n    readonly TEXTURE28: 0x84DC;\n    readonly TEXTURE29: 0x84DD;\n    readonly TEXTURE30: 0x84DE;\n    readonly TEXTURE31: 0x84DF;\n    readonly ACTIVE_TEXTURE: 0x84E0;\n    readonly REPEAT: 0x2901;\n    readonly CLAMP_TO_EDGE: 0x812F;\n    readonly MIRRORED_REPEAT: 0x8370;\n    readonly FLOAT_VEC2: 0x8B50;\n    readonly FLOAT_VEC3: 0x8B51;\n    readonly FLOAT_VEC4: 0x8B52;\n    readonly INT_VEC2: 0x8B53;\n    readonly INT_VEC3: 0x8B54;\n    readonly INT_VEC4: 0x8B55;\n    readonly BOOL: 0x8B56;\n    readonly BOOL_VEC2: 0x8B57;\n    readonly BOOL_VEC3: 0x8B58;\n    readonly BOOL_VEC4: 0x8B59;\n    readonly FLOAT_MAT2: 0x8B5A;\n    readonly FLOAT_MAT3: 0x8B5B;\n    readonly FLOAT_MAT4: 0x8B5C;\n    readonly SAMPLER_2D: 0x8B5E;\n    readonly SAMPLER_CUBE: 0x8B60;\n    readonly VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622;\n    readonly VERTEX_ATTRIB_ARRAY_SIZE: 0x8623;\n    readonly VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624;\n    readonly VERTEX_ATTRIB_ARRAY_TYPE: 0x8625;\n    readonly VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A;\n    readonly VERTEX_ATTRIB_ARRAY_POINTER: 0x8645;\n    readonly VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F;\n    readonly IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A;\n    readonly IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B;\n    readonly COMPILE_STATUS: 0x8B81;\n    readonly LOW_FLOAT: 0x8DF0;\n    readonly MEDIUM_FLOAT: 0x8DF1;\n    readonly HIGH_FLOAT: 0x8DF2;\n    readonly LOW_INT: 0x8DF3;\n    readonly MEDIUM_INT: 0x8DF4;\n    readonly HIGH_INT: 0x8DF5;\n    readonly FRAMEBUFFER: 0x8D40;\n    readonly RENDERBUFFER: 0x8D41;\n    readonly RGBA4: 0x8056;\n    readonly RGB5_A1: 0x8057;\n    readonly RGB565: 0x8D62;\n    readonly DEPTH_COMPONENT16: 0x81A5;\n    readonly STENCIL_INDEX8: 0x8D48;\n    readonly DEPTH_STENCIL: 0x84F9;\n    readonly RENDERBUFFER_WIDTH: 0x8D42;\n    readonly RENDERBUFFER_HEIGHT: 0x8D43;\n    readonly RENDERBUFFER_INTERNAL_FORMAT: 0x8D44;\n    readonly RENDERBUFFER_RED_SIZE: 0x8D50;\n    readonly RENDERBUFFER_GREEN_SIZE: 0x8D51;\n    readonly RENDERBUFFER_BLUE_SIZE: 0x8D52;\n    readonly RENDERBUFFER_ALPHA_SIZE: 0x8D53;\n    readonly RENDERBUFFER_DEPTH_SIZE: 0x8D54;\n    readonly RENDERBUFFER_STENCIL_SIZE: 0x8D55;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3;\n    readonly COLOR_ATTACHMENT0: 0x8CE0;\n    readonly DEPTH_ATTACHMENT: 0x8D00;\n    readonly STENCIL_ATTACHMENT: 0x8D20;\n    readonly DEPTH_STENCIL_ATTACHMENT: 0x821A;\n    readonly NONE: 0;\n    readonly FRAMEBUFFER_COMPLETE: 0x8CD5;\n    readonly FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6;\n    readonly FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7;\n    readonly FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9;\n    readonly FRAMEBUFFER_UNSUPPORTED: 0x8CDD;\n    readonly FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly RENDERBUFFER_BINDING: 0x8CA7;\n    readonly MAX_RENDERBUFFER_SIZE: 0x84E8;\n    readonly INVALID_FRAMEBUFFER_OPERATION: 0x0506;\n    readonly UNPACK_FLIP_Y_WEBGL: 0x9240;\n    readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241;\n    readonly CONTEXT_LOST_WEBGL: 0x9242;\n    readonly UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243;\n    readonly BROWSER_DEFAULT_WEBGL: 0x9244;\n};\n\ninterface WebGL2RenderingContextBase {\n    beginQuery(target: GLenum, query: WebGLQuery): void;\n    beginTransformFeedback(primitiveMode: GLenum): void;\n    bindBufferBase(target: GLenum, index: GLuint, buffer: WebGLBuffer | null): void;\n    bindBufferRange(target: GLenum, index: GLuint, buffer: WebGLBuffer | null, offset: GLintptr, size: GLsizeiptr): void;\n    bindSampler(unit: GLuint, sampler: WebGLSampler | null): void;\n    bindTransformFeedback(target: GLenum, tf: WebGLTransformFeedback | null): void;\n    bindVertexArray(array: WebGLVertexArrayObject | null): void;\n    blitFramebuffer(srcX0: GLint, srcY0: GLint, srcX1: GLint, srcY1: GLint, dstX0: GLint, dstY0: GLint, dstX1: GLint, dstY1: GLint, mask: GLbitfield, filter: GLenum): void;\n    clearBufferfi(buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint): void;\n    clearBufferfv(buffer: GLenum, drawbuffer: GLint, values: Float32List, srcOffset?: GLuint): void;\n    clearBufferiv(buffer: GLenum, drawbuffer: GLint, values: Int32List, srcOffset?: GLuint): void;\n    clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Uint32List, srcOffset?: GLuint): void;\n    clientWaitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLuint64): GLenum;\n    compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, imageSize: GLsizei, offset: GLintptr): void;\n    compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, srcData: ArrayBufferView, srcOffset?: GLuint, srcLengthOverride?: GLuint): void;\n    compressedTexSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, imageSize: GLsizei, offset: GLintptr): void;\n    compressedTexSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, srcData: ArrayBufferView, srcOffset?: GLuint, srcLengthOverride?: GLuint): void;\n    copyBufferSubData(readTarget: GLenum, writeTarget: GLenum, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr): void;\n    copyTexSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    createQuery(): WebGLQuery | null;\n    createSampler(): WebGLSampler | null;\n    createTransformFeedback(): WebGLTransformFeedback | null;\n    createVertexArray(): WebGLVertexArrayObject | null;\n    deleteQuery(query: WebGLQuery | null): void;\n    deleteSampler(sampler: WebGLSampler | null): void;\n    deleteSync(sync: WebGLSync | null): void;\n    deleteTransformFeedback(tf: WebGLTransformFeedback | null): void;\n    deleteVertexArray(vertexArray: WebGLVertexArrayObject | null): void;\n    drawArraysInstanced(mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei): void;\n    drawBuffers(buffers: GLenum[]): void;\n    drawElementsInstanced(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, instanceCount: GLsizei): void;\n    drawRangeElements(mode: GLenum, start: GLuint, end: GLuint, count: GLsizei, type: GLenum, offset: GLintptr): void;\n    endQuery(target: GLenum): void;\n    endTransformFeedback(): void;\n    fenceSync(condition: GLenum, flags: GLbitfield): WebGLSync | null;\n    framebufferTextureLayer(target: GLenum, attachment: GLenum, texture: WebGLTexture | null, level: GLint, layer: GLint): void;\n    getActiveUniformBlockName(program: WebGLProgram, uniformBlockIndex: GLuint): string | null;\n    getActiveUniformBlockParameter(program: WebGLProgram, uniformBlockIndex: GLuint, pname: GLenum): any;\n    getActiveUniforms(program: WebGLProgram, uniformIndices: GLuint[], pname: GLenum): any;\n    getBufferSubData(target: GLenum, srcByteOffset: GLintptr, dstBuffer: ArrayBufferView, dstOffset?: GLuint, length?: GLuint): void;\n    getFragDataLocation(program: WebGLProgram, name: string): GLint;\n    getIndexedParameter(target: GLenum, index: GLuint): any;\n    getInternalformatParameter(target: GLenum, internalformat: GLenum, pname: GLenum): any;\n    getQuery(target: GLenum, pname: GLenum): WebGLQuery | null;\n    getQueryParameter(query: WebGLQuery, pname: GLenum): any;\n    getSamplerParameter(sampler: WebGLSampler, pname: GLenum): any;\n    getSyncParameter(sync: WebGLSync, pname: GLenum): any;\n    getTransformFeedbackVarying(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null;\n    getUniformBlockIndex(program: WebGLProgram, uniformBlockName: string): GLuint;\n    getUniformIndices(program: WebGLProgram, uniformNames: string[]): GLuint[] | null;\n    invalidateFramebuffer(target: GLenum, attachments: GLenum[]): void;\n    invalidateSubFramebuffer(target: GLenum, attachments: GLenum[], x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    isQuery(query: WebGLQuery | null): GLboolean;\n    isSampler(sampler: WebGLSampler | null): GLboolean;\n    isSync(sync: WebGLSync | null): GLboolean;\n    isTransformFeedback(tf: WebGLTransformFeedback | null): GLboolean;\n    isVertexArray(vertexArray: WebGLVertexArrayObject | null): GLboolean;\n    pauseTransformFeedback(): void;\n    readBuffer(src: GLenum): void;\n    renderbufferStorageMultisample(target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei): void;\n    resumeTransformFeedback(): void;\n    samplerParameterf(sampler: WebGLSampler, pname: GLenum, param: GLfloat): void;\n    samplerParameteri(sampler: WebGLSampler, pname: GLenum, param: GLint): void;\n    texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, pboOffset: GLintptr): void;\n    texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView | null): void;\n    texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: GLuint): void;\n    texStorage2D(target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei): void;\n    texStorage3D(target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei): void;\n    texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, pboOffset: GLintptr): void;\n    texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, srcData: ArrayBufferView | null, srcOffset?: GLuint): void;\n    transformFeedbackVaryings(program: WebGLProgram, varyings: string[], bufferMode: GLenum): void;\n    uniform1ui(location: WebGLUniformLocation | null, v0: GLuint): void;\n    uniform1uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint): void;\n    uniform2uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint, v2: GLuint): void;\n    uniform3uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint): void;\n    uniform4uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformBlockBinding(program: WebGLProgram, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint): void;\n    uniformMatrix2x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    vertexAttribDivisor(index: GLuint, divisor: GLuint): void;\n    vertexAttribI4i(index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint): void;\n    vertexAttribI4iv(index: GLuint, values: Int32List): void;\n    vertexAttribI4ui(index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint): void;\n    vertexAttribI4uiv(index: GLuint, values: Uint32List): void;\n    vertexAttribIPointer(index: GLuint, size: GLint, type: GLenum, stride: GLsizei, offset: GLintptr): void;\n    waitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLint64): void;\n    readonly READ_BUFFER: 0x0C02;\n    readonly UNPACK_ROW_LENGTH: 0x0CF2;\n    readonly UNPACK_SKIP_ROWS: 0x0CF3;\n    readonly UNPACK_SKIP_PIXELS: 0x0CF4;\n    readonly PACK_ROW_LENGTH: 0x0D02;\n    readonly PACK_SKIP_ROWS: 0x0D03;\n    readonly PACK_SKIP_PIXELS: 0x0D04;\n    readonly COLOR: 0x1800;\n    readonly DEPTH: 0x1801;\n    readonly STENCIL: 0x1802;\n    readonly RED: 0x1903;\n    readonly RGB8: 0x8051;\n    readonly RGBA8: 0x8058;\n    readonly RGB10_A2: 0x8059;\n    readonly TEXTURE_BINDING_3D: 0x806A;\n    readonly UNPACK_SKIP_IMAGES: 0x806D;\n    readonly UNPACK_IMAGE_HEIGHT: 0x806E;\n    readonly TEXTURE_3D: 0x806F;\n    readonly TEXTURE_WRAP_R: 0x8072;\n    readonly MAX_3D_TEXTURE_SIZE: 0x8073;\n    readonly UNSIGNED_INT_2_10_10_10_REV: 0x8368;\n    readonly MAX_ELEMENTS_VERTICES: 0x80E8;\n    readonly MAX_ELEMENTS_INDICES: 0x80E9;\n    readonly TEXTURE_MIN_LOD: 0x813A;\n    readonly TEXTURE_MAX_LOD: 0x813B;\n    readonly TEXTURE_BASE_LEVEL: 0x813C;\n    readonly TEXTURE_MAX_LEVEL: 0x813D;\n    readonly MIN: 0x8007;\n    readonly MAX: 0x8008;\n    readonly DEPTH_COMPONENT24: 0x81A6;\n    readonly MAX_TEXTURE_LOD_BIAS: 0x84FD;\n    readonly TEXTURE_COMPARE_MODE: 0x884C;\n    readonly TEXTURE_COMPARE_FUNC: 0x884D;\n    readonly CURRENT_QUERY: 0x8865;\n    readonly QUERY_RESULT: 0x8866;\n    readonly QUERY_RESULT_AVAILABLE: 0x8867;\n    readonly STREAM_READ: 0x88E1;\n    readonly STREAM_COPY: 0x88E2;\n    readonly STATIC_READ: 0x88E5;\n    readonly STATIC_COPY: 0x88E6;\n    readonly DYNAMIC_READ: 0x88E9;\n    readonly DYNAMIC_COPY: 0x88EA;\n    readonly MAX_DRAW_BUFFERS: 0x8824;\n    readonly DRAW_BUFFER0: 0x8825;\n    readonly DRAW_BUFFER1: 0x8826;\n    readonly DRAW_BUFFER2: 0x8827;\n    readonly DRAW_BUFFER3: 0x8828;\n    readonly DRAW_BUFFER4: 0x8829;\n    readonly DRAW_BUFFER5: 0x882A;\n    readonly DRAW_BUFFER6: 0x882B;\n    readonly DRAW_BUFFER7: 0x882C;\n    readonly DRAW_BUFFER8: 0x882D;\n    readonly DRAW_BUFFER9: 0x882E;\n    readonly DRAW_BUFFER10: 0x882F;\n    readonly DRAW_BUFFER11: 0x8830;\n    readonly DRAW_BUFFER12: 0x8831;\n    readonly DRAW_BUFFER13: 0x8832;\n    readonly DRAW_BUFFER14: 0x8833;\n    readonly DRAW_BUFFER15: 0x8834;\n    readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8B49;\n    readonly MAX_VERTEX_UNIFORM_COMPONENTS: 0x8B4A;\n    readonly SAMPLER_3D: 0x8B5F;\n    readonly SAMPLER_2D_SHADOW: 0x8B62;\n    readonly FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8B8B;\n    readonly PIXEL_PACK_BUFFER: 0x88EB;\n    readonly PIXEL_UNPACK_BUFFER: 0x88EC;\n    readonly PIXEL_PACK_BUFFER_BINDING: 0x88ED;\n    readonly PIXEL_UNPACK_BUFFER_BINDING: 0x88EF;\n    readonly FLOAT_MAT2x3: 0x8B65;\n    readonly FLOAT_MAT2x4: 0x8B66;\n    readonly FLOAT_MAT3x2: 0x8B67;\n    readonly FLOAT_MAT3x4: 0x8B68;\n    readonly FLOAT_MAT4x2: 0x8B69;\n    readonly FLOAT_MAT4x3: 0x8B6A;\n    readonly SRGB: 0x8C40;\n    readonly SRGB8: 0x8C41;\n    readonly SRGB8_ALPHA8: 0x8C43;\n    readonly COMPARE_REF_TO_TEXTURE: 0x884E;\n    readonly RGBA32F: 0x8814;\n    readonly RGB32F: 0x8815;\n    readonly RGBA16F: 0x881A;\n    readonly RGB16F: 0x881B;\n    readonly VERTEX_ATTRIB_ARRAY_INTEGER: 0x88FD;\n    readonly MAX_ARRAY_TEXTURE_LAYERS: 0x88FF;\n    readonly MIN_PROGRAM_TEXEL_OFFSET: 0x8904;\n    readonly MAX_PROGRAM_TEXEL_OFFSET: 0x8905;\n    readonly MAX_VARYING_COMPONENTS: 0x8B4B;\n    readonly TEXTURE_2D_ARRAY: 0x8C1A;\n    readonly TEXTURE_BINDING_2D_ARRAY: 0x8C1D;\n    readonly R11F_G11F_B10F: 0x8C3A;\n    readonly UNSIGNED_INT_10F_11F_11F_REV: 0x8C3B;\n    readonly RGB9_E5: 0x8C3D;\n    readonly UNSIGNED_INT_5_9_9_9_REV: 0x8C3E;\n    readonly TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8C7F;\n    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8C80;\n    readonly TRANSFORM_FEEDBACK_VARYINGS: 0x8C83;\n    readonly TRANSFORM_FEEDBACK_BUFFER_START: 0x8C84;\n    readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8C85;\n    readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8C88;\n    readonly RASTERIZER_DISCARD: 0x8C89;\n    readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8C8A;\n    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8C8B;\n    readonly INTERLEAVED_ATTRIBS: 0x8C8C;\n    readonly SEPARATE_ATTRIBS: 0x8C8D;\n    readonly TRANSFORM_FEEDBACK_BUFFER: 0x8C8E;\n    readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8C8F;\n    readonly RGBA32UI: 0x8D70;\n    readonly RGB32UI: 0x8D71;\n    readonly RGBA16UI: 0x8D76;\n    readonly RGB16UI: 0x8D77;\n    readonly RGBA8UI: 0x8D7C;\n    readonly RGB8UI: 0x8D7D;\n    readonly RGBA32I: 0x8D82;\n    readonly RGB32I: 0x8D83;\n    readonly RGBA16I: 0x8D88;\n    readonly RGB16I: 0x8D89;\n    readonly RGBA8I: 0x8D8E;\n    readonly RGB8I: 0x8D8F;\n    readonly RED_INTEGER: 0x8D94;\n    readonly RGB_INTEGER: 0x8D98;\n    readonly RGBA_INTEGER: 0x8D99;\n    readonly SAMPLER_2D_ARRAY: 0x8DC1;\n    readonly SAMPLER_2D_ARRAY_SHADOW: 0x8DC4;\n    readonly SAMPLER_CUBE_SHADOW: 0x8DC5;\n    readonly UNSIGNED_INT_VEC2: 0x8DC6;\n    readonly UNSIGNED_INT_VEC3: 0x8DC7;\n    readonly UNSIGNED_INT_VEC4: 0x8DC8;\n    readonly INT_SAMPLER_2D: 0x8DCA;\n    readonly INT_SAMPLER_3D: 0x8DCB;\n    readonly INT_SAMPLER_CUBE: 0x8DCC;\n    readonly INT_SAMPLER_2D_ARRAY: 0x8DCF;\n    readonly UNSIGNED_INT_SAMPLER_2D: 0x8DD2;\n    readonly UNSIGNED_INT_SAMPLER_3D: 0x8DD3;\n    readonly UNSIGNED_INT_SAMPLER_CUBE: 0x8DD4;\n    readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8DD7;\n    readonly DEPTH_COMPONENT32F: 0x8CAC;\n    readonly DEPTH32F_STENCIL8: 0x8CAD;\n    readonly FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8DAD;\n    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210;\n    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211;\n    readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212;\n    readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213;\n    readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214;\n    readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215;\n    readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216;\n    readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217;\n    readonly FRAMEBUFFER_DEFAULT: 0x8218;\n    readonly UNSIGNED_INT_24_8: 0x84FA;\n    readonly DEPTH24_STENCIL8: 0x88F0;\n    readonly UNSIGNED_NORMALIZED: 0x8C17;\n    readonly DRAW_FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly READ_FRAMEBUFFER: 0x8CA8;\n    readonly DRAW_FRAMEBUFFER: 0x8CA9;\n    readonly READ_FRAMEBUFFER_BINDING: 0x8CAA;\n    readonly RENDERBUFFER_SAMPLES: 0x8CAB;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8CD4;\n    readonly MAX_COLOR_ATTACHMENTS: 0x8CDF;\n    readonly COLOR_ATTACHMENT1: 0x8CE1;\n    readonly COLOR_ATTACHMENT2: 0x8CE2;\n    readonly COLOR_ATTACHMENT3: 0x8CE3;\n    readonly COLOR_ATTACHMENT4: 0x8CE4;\n    readonly COLOR_ATTACHMENT5: 0x8CE5;\n    readonly COLOR_ATTACHMENT6: 0x8CE6;\n    readonly COLOR_ATTACHMENT7: 0x8CE7;\n    readonly COLOR_ATTACHMENT8: 0x8CE8;\n    readonly COLOR_ATTACHMENT9: 0x8CE9;\n    readonly COLOR_ATTACHMENT10: 0x8CEA;\n    readonly COLOR_ATTACHMENT11: 0x8CEB;\n    readonly COLOR_ATTACHMENT12: 0x8CEC;\n    readonly COLOR_ATTACHMENT13: 0x8CED;\n    readonly COLOR_ATTACHMENT14: 0x8CEE;\n    readonly COLOR_ATTACHMENT15: 0x8CEF;\n    readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8D56;\n    readonly MAX_SAMPLES: 0x8D57;\n    readonly HALF_FLOAT: 0x140B;\n    readonly RG: 0x8227;\n    readonly RG_INTEGER: 0x8228;\n    readonly R8: 0x8229;\n    readonly RG8: 0x822B;\n    readonly R16F: 0x822D;\n    readonly R32F: 0x822E;\n    readonly RG16F: 0x822F;\n    readonly RG32F: 0x8230;\n    readonly R8I: 0x8231;\n    readonly R8UI: 0x8232;\n    readonly R16I: 0x8233;\n    readonly R16UI: 0x8234;\n    readonly R32I: 0x8235;\n    readonly R32UI: 0x8236;\n    readonly RG8I: 0x8237;\n    readonly RG8UI: 0x8238;\n    readonly RG16I: 0x8239;\n    readonly RG16UI: 0x823A;\n    readonly RG32I: 0x823B;\n    readonly RG32UI: 0x823C;\n    readonly VERTEX_ARRAY_BINDING: 0x85B5;\n    readonly R8_SNORM: 0x8F94;\n    readonly RG8_SNORM: 0x8F95;\n    readonly RGB8_SNORM: 0x8F96;\n    readonly RGBA8_SNORM: 0x8F97;\n    readonly SIGNED_NORMALIZED: 0x8F9C;\n    readonly COPY_READ_BUFFER: 0x8F36;\n    readonly COPY_WRITE_BUFFER: 0x8F37;\n    readonly COPY_READ_BUFFER_BINDING: 0x8F36;\n    readonly COPY_WRITE_BUFFER_BINDING: 0x8F37;\n    readonly UNIFORM_BUFFER: 0x8A11;\n    readonly UNIFORM_BUFFER_BINDING: 0x8A28;\n    readonly UNIFORM_BUFFER_START: 0x8A29;\n    readonly UNIFORM_BUFFER_SIZE: 0x8A2A;\n    readonly MAX_VERTEX_UNIFORM_BLOCKS: 0x8A2B;\n    readonly MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8A2D;\n    readonly MAX_COMBINED_UNIFORM_BLOCKS: 0x8A2E;\n    readonly MAX_UNIFORM_BUFFER_BINDINGS: 0x8A2F;\n    readonly MAX_UNIFORM_BLOCK_SIZE: 0x8A30;\n    readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8A31;\n    readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8A33;\n    readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8A34;\n    readonly ACTIVE_UNIFORM_BLOCKS: 0x8A36;\n    readonly UNIFORM_TYPE: 0x8A37;\n    readonly UNIFORM_SIZE: 0x8A38;\n    readonly UNIFORM_BLOCK_INDEX: 0x8A3A;\n    readonly UNIFORM_OFFSET: 0x8A3B;\n    readonly UNIFORM_ARRAY_STRIDE: 0x8A3C;\n    readonly UNIFORM_MATRIX_STRIDE: 0x8A3D;\n    readonly UNIFORM_IS_ROW_MAJOR: 0x8A3E;\n    readonly UNIFORM_BLOCK_BINDING: 0x8A3F;\n    readonly UNIFORM_BLOCK_DATA_SIZE: 0x8A40;\n    readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8A42;\n    readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8A43;\n    readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8A44;\n    readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8A46;\n    readonly INVALID_INDEX: 0xFFFFFFFF;\n    readonly MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122;\n    readonly MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125;\n    readonly MAX_SERVER_WAIT_TIMEOUT: 0x9111;\n    readonly OBJECT_TYPE: 0x9112;\n    readonly SYNC_CONDITION: 0x9113;\n    readonly SYNC_STATUS: 0x9114;\n    readonly SYNC_FLAGS: 0x9115;\n    readonly SYNC_FENCE: 0x9116;\n    readonly SYNC_GPU_COMMANDS_COMPLETE: 0x9117;\n    readonly UNSIGNALED: 0x9118;\n    readonly SIGNALED: 0x9119;\n    readonly ALREADY_SIGNALED: 0x911A;\n    readonly TIMEOUT_EXPIRED: 0x911B;\n    readonly CONDITION_SATISFIED: 0x911C;\n    readonly WAIT_FAILED: 0x911D;\n    readonly SYNC_FLUSH_COMMANDS_BIT: 0x00000001;\n    readonly VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88FE;\n    readonly ANY_SAMPLES_PASSED: 0x8C2F;\n    readonly ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8D6A;\n    readonly SAMPLER_BINDING: 0x8919;\n    readonly RGB10_A2UI: 0x906F;\n    readonly INT_2_10_10_10_REV: 0x8D9F;\n    readonly TRANSFORM_FEEDBACK: 0x8E22;\n    readonly TRANSFORM_FEEDBACK_PAUSED: 0x8E23;\n    readonly TRANSFORM_FEEDBACK_ACTIVE: 0x8E24;\n    readonly TRANSFORM_FEEDBACK_BINDING: 0x8E25;\n    readonly TEXTURE_IMMUTABLE_FORMAT: 0x912F;\n    readonly MAX_ELEMENT_INDEX: 0x8D6B;\n    readonly TEXTURE_IMMUTABLE_LEVELS: 0x82DF;\n    readonly TIMEOUT_IGNORED: -1;\n    readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247;\n}\n\ninterface WebGL2RenderingContextOverloads {\n    bufferData(target: GLenum, size: GLsizeiptr, usage: GLenum): void;\n    bufferData(target: GLenum, srcData: BufferSource | null, usage: GLenum): void;\n    bufferData(target: GLenum, srcData: ArrayBufferView, usage: GLenum, srcOffset: GLuint, length?: GLuint): void;\n    bufferSubData(target: GLenum, dstByteOffset: GLintptr, srcData: BufferSource): void;\n    bufferSubData(target: GLenum, dstByteOffset: GLintptr, srcData: ArrayBufferView, srcOffset: GLuint, length?: GLuint): void;\n    compressedTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, imageSize: GLsizei, offset: GLintptr): void;\n    compressedTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, srcData: ArrayBufferView, srcOffset?: GLuint, srcLengthOverride?: GLuint): void;\n    compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, imageSize: GLsizei, offset: GLintptr): void;\n    compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, srcData: ArrayBufferView, srcOffset?: GLuint, srcLengthOverride?: GLuint): void;\n    readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, dstData: ArrayBufferView | null): void;\n    readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, offset: GLintptr): void;\n    readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, dstData: ArrayBufferView, dstOffset: GLuint): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pboOffset: GLintptr): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: GLuint): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pboOffset: GLintptr): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: GLuint): void;\n    uniform1fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform1iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n}\n\n/** Part of the WebGL API and represents the information returned by calling the WebGLRenderingContext.getActiveAttrib() and WebGLRenderingContext.getActiveUniform() methods. */\ninterface WebGLActiveInfo {\n    readonly name: string;\n    readonly size: GLint;\n    readonly type: GLenum;\n}\n\ndeclare var WebGLActiveInfo: {\n    prototype: WebGLActiveInfo;\n    new(): WebGLActiveInfo;\n};\n\n/** Part of the WebGL API and represents an opaque buffer object storing data such as vertices or colors. */\ninterface WebGLBuffer {\n}\n\ndeclare var WebGLBuffer: {\n    prototype: WebGLBuffer;\n    new(): WebGLBuffer;\n};\n\n/** The WebContextEvent interface is part of the WebGL API and is an interface for an event that is generated in response to a status change to the WebGL rendering context. */\ninterface WebGLContextEvent extends Event {\n    readonly statusMessage: string;\n}\n\ndeclare var WebGLContextEvent: {\n    prototype: WebGLContextEvent;\n    new(type: string, eventInit?: WebGLContextEventInit): WebGLContextEvent;\n};\n\n/** Part of the WebGL API and represents a collection of buffers that serve as a rendering destination. */\ninterface WebGLFramebuffer {\n}\n\ndeclare var WebGLFramebuffer: {\n    prototype: WebGLFramebuffer;\n    new(): WebGLFramebuffer;\n};\n\n/** The WebGLProgram is part of the WebGL API and is a combination of two compiled WebGLShaders consisting of a vertex shader and a fragment shader (both written in GLSL). */\ninterface WebGLProgram {\n}\n\ndeclare var WebGLProgram: {\n    prototype: WebGLProgram;\n    new(): WebGLProgram;\n};\n\ninterface WebGLQuery {\n}\n\ndeclare var WebGLQuery: {\n    prototype: WebGLQuery;\n    new(): WebGLQuery;\n};\n\n/** Part of the WebGL API and represents a buffer that can contain an image, or can be source or target of an rendering operation. */\ninterface WebGLRenderbuffer {\n}\n\ndeclare var WebGLRenderbuffer: {\n    prototype: WebGLRenderbuffer;\n    new(): WebGLRenderbuffer;\n};\n\n/** Provides an interface to the OpenGL ES 2.0 graphics rendering context for the drawing surface of an HTML <canvas> element. */\ninterface WebGLRenderingContext extends WebGLRenderingContextBase, WebGLRenderingContextOverloads {\n}\n\ndeclare var WebGLRenderingContext: {\n    prototype: WebGLRenderingContext;\n    new(): WebGLRenderingContext;\n    readonly DEPTH_BUFFER_BIT: 0x00000100;\n    readonly STENCIL_BUFFER_BIT: 0x00000400;\n    readonly COLOR_BUFFER_BIT: 0x00004000;\n    readonly POINTS: 0x0000;\n    readonly LINES: 0x0001;\n    readonly LINE_LOOP: 0x0002;\n    readonly LINE_STRIP: 0x0003;\n    readonly TRIANGLES: 0x0004;\n    readonly TRIANGLE_STRIP: 0x0005;\n    readonly TRIANGLE_FAN: 0x0006;\n    readonly ZERO: 0;\n    readonly ONE: 1;\n    readonly SRC_COLOR: 0x0300;\n    readonly ONE_MINUS_SRC_COLOR: 0x0301;\n    readonly SRC_ALPHA: 0x0302;\n    readonly ONE_MINUS_SRC_ALPHA: 0x0303;\n    readonly DST_ALPHA: 0x0304;\n    readonly ONE_MINUS_DST_ALPHA: 0x0305;\n    readonly DST_COLOR: 0x0306;\n    readonly ONE_MINUS_DST_COLOR: 0x0307;\n    readonly SRC_ALPHA_SATURATE: 0x0308;\n    readonly FUNC_ADD: 0x8006;\n    readonly BLEND_EQUATION: 0x8009;\n    readonly BLEND_EQUATION_RGB: 0x8009;\n    readonly BLEND_EQUATION_ALPHA: 0x883D;\n    readonly FUNC_SUBTRACT: 0x800A;\n    readonly FUNC_REVERSE_SUBTRACT: 0x800B;\n    readonly BLEND_DST_RGB: 0x80C8;\n    readonly BLEND_SRC_RGB: 0x80C9;\n    readonly BLEND_DST_ALPHA: 0x80CA;\n    readonly BLEND_SRC_ALPHA: 0x80CB;\n    readonly CONSTANT_COLOR: 0x8001;\n    readonly ONE_MINUS_CONSTANT_COLOR: 0x8002;\n    readonly CONSTANT_ALPHA: 0x8003;\n    readonly ONE_MINUS_CONSTANT_ALPHA: 0x8004;\n    readonly BLEND_COLOR: 0x8005;\n    readonly ARRAY_BUFFER: 0x8892;\n    readonly ELEMENT_ARRAY_BUFFER: 0x8893;\n    readonly ARRAY_BUFFER_BINDING: 0x8894;\n    readonly ELEMENT_ARRAY_BUFFER_BINDING: 0x8895;\n    readonly STREAM_DRAW: 0x88E0;\n    readonly STATIC_DRAW: 0x88E4;\n    readonly DYNAMIC_DRAW: 0x88E8;\n    readonly BUFFER_SIZE: 0x8764;\n    readonly BUFFER_USAGE: 0x8765;\n    readonly CURRENT_VERTEX_ATTRIB: 0x8626;\n    readonly FRONT: 0x0404;\n    readonly BACK: 0x0405;\n    readonly FRONT_AND_BACK: 0x0408;\n    readonly CULL_FACE: 0x0B44;\n    readonly BLEND: 0x0BE2;\n    readonly DITHER: 0x0BD0;\n    readonly STENCIL_TEST: 0x0B90;\n    readonly DEPTH_TEST: 0x0B71;\n    readonly SCISSOR_TEST: 0x0C11;\n    readonly POLYGON_OFFSET_FILL: 0x8037;\n    readonly SAMPLE_ALPHA_TO_COVERAGE: 0x809E;\n    readonly SAMPLE_COVERAGE: 0x80A0;\n    readonly NO_ERROR: 0;\n    readonly INVALID_ENUM: 0x0500;\n    readonly INVALID_VALUE: 0x0501;\n    readonly INVALID_OPERATION: 0x0502;\n    readonly OUT_OF_MEMORY: 0x0505;\n    readonly CW: 0x0900;\n    readonly CCW: 0x0901;\n    readonly LINE_WIDTH: 0x0B21;\n    readonly ALIASED_POINT_SIZE_RANGE: 0x846D;\n    readonly ALIASED_LINE_WIDTH_RANGE: 0x846E;\n    readonly CULL_FACE_MODE: 0x0B45;\n    readonly FRONT_FACE: 0x0B46;\n    readonly DEPTH_RANGE: 0x0B70;\n    readonly DEPTH_WRITEMASK: 0x0B72;\n    readonly DEPTH_CLEAR_VALUE: 0x0B73;\n    readonly DEPTH_FUNC: 0x0B74;\n    readonly STENCIL_CLEAR_VALUE: 0x0B91;\n    readonly STENCIL_FUNC: 0x0B92;\n    readonly STENCIL_FAIL: 0x0B94;\n    readonly STENCIL_PASS_DEPTH_FAIL: 0x0B95;\n    readonly STENCIL_PASS_DEPTH_PASS: 0x0B96;\n    readonly STENCIL_REF: 0x0B97;\n    readonly STENCIL_VALUE_MASK: 0x0B93;\n    readonly STENCIL_WRITEMASK: 0x0B98;\n    readonly STENCIL_BACK_FUNC: 0x8800;\n    readonly STENCIL_BACK_FAIL: 0x8801;\n    readonly STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802;\n    readonly STENCIL_BACK_PASS_DEPTH_PASS: 0x8803;\n    readonly STENCIL_BACK_REF: 0x8CA3;\n    readonly STENCIL_BACK_VALUE_MASK: 0x8CA4;\n    readonly STENCIL_BACK_WRITEMASK: 0x8CA5;\n    readonly VIEWPORT: 0x0BA2;\n    readonly SCISSOR_BOX: 0x0C10;\n    readonly COLOR_CLEAR_VALUE: 0x0C22;\n    readonly COLOR_WRITEMASK: 0x0C23;\n    readonly UNPACK_ALIGNMENT: 0x0CF5;\n    readonly PACK_ALIGNMENT: 0x0D05;\n    readonly MAX_TEXTURE_SIZE: 0x0D33;\n    readonly MAX_VIEWPORT_DIMS: 0x0D3A;\n    readonly SUBPIXEL_BITS: 0x0D50;\n    readonly RED_BITS: 0x0D52;\n    readonly GREEN_BITS: 0x0D53;\n    readonly BLUE_BITS: 0x0D54;\n    readonly ALPHA_BITS: 0x0D55;\n    readonly DEPTH_BITS: 0x0D56;\n    readonly STENCIL_BITS: 0x0D57;\n    readonly POLYGON_OFFSET_UNITS: 0x2A00;\n    readonly POLYGON_OFFSET_FACTOR: 0x8038;\n    readonly TEXTURE_BINDING_2D: 0x8069;\n    readonly SAMPLE_BUFFERS: 0x80A8;\n    readonly SAMPLES: 0x80A9;\n    readonly SAMPLE_COVERAGE_VALUE: 0x80AA;\n    readonly SAMPLE_COVERAGE_INVERT: 0x80AB;\n    readonly COMPRESSED_TEXTURE_FORMATS: 0x86A3;\n    readonly DONT_CARE: 0x1100;\n    readonly FASTEST: 0x1101;\n    readonly NICEST: 0x1102;\n    readonly GENERATE_MIPMAP_HINT: 0x8192;\n    readonly BYTE: 0x1400;\n    readonly UNSIGNED_BYTE: 0x1401;\n    readonly SHORT: 0x1402;\n    readonly UNSIGNED_SHORT: 0x1403;\n    readonly INT: 0x1404;\n    readonly UNSIGNED_INT: 0x1405;\n    readonly FLOAT: 0x1406;\n    readonly DEPTH_COMPONENT: 0x1902;\n    readonly ALPHA: 0x1906;\n    readonly RGB: 0x1907;\n    readonly RGBA: 0x1908;\n    readonly LUMINANCE: 0x1909;\n    readonly LUMINANCE_ALPHA: 0x190A;\n    readonly UNSIGNED_SHORT_4_4_4_4: 0x8033;\n    readonly UNSIGNED_SHORT_5_5_5_1: 0x8034;\n    readonly UNSIGNED_SHORT_5_6_5: 0x8363;\n    readonly FRAGMENT_SHADER: 0x8B30;\n    readonly VERTEX_SHADER: 0x8B31;\n    readonly MAX_VERTEX_ATTRIBS: 0x8869;\n    readonly MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB;\n    readonly MAX_VARYING_VECTORS: 0x8DFC;\n    readonly MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D;\n    readonly MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C;\n    readonly MAX_TEXTURE_IMAGE_UNITS: 0x8872;\n    readonly MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD;\n    readonly SHADER_TYPE: 0x8B4F;\n    readonly DELETE_STATUS: 0x8B80;\n    readonly LINK_STATUS: 0x8B82;\n    readonly VALIDATE_STATUS: 0x8B83;\n    readonly ATTACHED_SHADERS: 0x8B85;\n    readonly ACTIVE_UNIFORMS: 0x8B86;\n    readonly ACTIVE_ATTRIBUTES: 0x8B89;\n    readonly SHADING_LANGUAGE_VERSION: 0x8B8C;\n    readonly CURRENT_PROGRAM: 0x8B8D;\n    readonly NEVER: 0x0200;\n    readonly LESS: 0x0201;\n    readonly EQUAL: 0x0202;\n    readonly LEQUAL: 0x0203;\n    readonly GREATER: 0x0204;\n    readonly NOTEQUAL: 0x0205;\n    readonly GEQUAL: 0x0206;\n    readonly ALWAYS: 0x0207;\n    readonly KEEP: 0x1E00;\n    readonly REPLACE: 0x1E01;\n    readonly INCR: 0x1E02;\n    readonly DECR: 0x1E03;\n    readonly INVERT: 0x150A;\n    readonly INCR_WRAP: 0x8507;\n    readonly DECR_WRAP: 0x8508;\n    readonly VENDOR: 0x1F00;\n    readonly RENDERER: 0x1F01;\n    readonly VERSION: 0x1F02;\n    readonly NEAREST: 0x2600;\n    readonly LINEAR: 0x2601;\n    readonly NEAREST_MIPMAP_NEAREST: 0x2700;\n    readonly LINEAR_MIPMAP_NEAREST: 0x2701;\n    readonly NEAREST_MIPMAP_LINEAR: 0x2702;\n    readonly LINEAR_MIPMAP_LINEAR: 0x2703;\n    readonly TEXTURE_MAG_FILTER: 0x2800;\n    readonly TEXTURE_MIN_FILTER: 0x2801;\n    readonly TEXTURE_WRAP_S: 0x2802;\n    readonly TEXTURE_WRAP_T: 0x2803;\n    readonly TEXTURE_2D: 0x0DE1;\n    readonly TEXTURE: 0x1702;\n    readonly TEXTURE_CUBE_MAP: 0x8513;\n    readonly TEXTURE_BINDING_CUBE_MAP: 0x8514;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A;\n    readonly MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C;\n    readonly TEXTURE0: 0x84C0;\n    readonly TEXTURE1: 0x84C1;\n    readonly TEXTURE2: 0x84C2;\n    readonly TEXTURE3: 0x84C3;\n    readonly TEXTURE4: 0x84C4;\n    readonly TEXTURE5: 0x84C5;\n    readonly TEXTURE6: 0x84C6;\n    readonly TEXTURE7: 0x84C7;\n    readonly TEXTURE8: 0x84C8;\n    readonly TEXTURE9: 0x84C9;\n    readonly TEXTURE10: 0x84CA;\n    readonly TEXTURE11: 0x84CB;\n    readonly TEXTURE12: 0x84CC;\n    readonly TEXTURE13: 0x84CD;\n    readonly TEXTURE14: 0x84CE;\n    readonly TEXTURE15: 0x84CF;\n    readonly TEXTURE16: 0x84D0;\n    readonly TEXTURE17: 0x84D1;\n    readonly TEXTURE18: 0x84D2;\n    readonly TEXTURE19: 0x84D3;\n    readonly TEXTURE20: 0x84D4;\n    readonly TEXTURE21: 0x84D5;\n    readonly TEXTURE22: 0x84D6;\n    readonly TEXTURE23: 0x84D7;\n    readonly TEXTURE24: 0x84D8;\n    readonly TEXTURE25: 0x84D9;\n    readonly TEXTURE26: 0x84DA;\n    readonly TEXTURE27: 0x84DB;\n    readonly TEXTURE28: 0x84DC;\n    readonly TEXTURE29: 0x84DD;\n    readonly TEXTURE30: 0x84DE;\n    readonly TEXTURE31: 0x84DF;\n    readonly ACTIVE_TEXTURE: 0x84E0;\n    readonly REPEAT: 0x2901;\n    readonly CLAMP_TO_EDGE: 0x812F;\n    readonly MIRRORED_REPEAT: 0x8370;\n    readonly FLOAT_VEC2: 0x8B50;\n    readonly FLOAT_VEC3: 0x8B51;\n    readonly FLOAT_VEC4: 0x8B52;\n    readonly INT_VEC2: 0x8B53;\n    readonly INT_VEC3: 0x8B54;\n    readonly INT_VEC4: 0x8B55;\n    readonly BOOL: 0x8B56;\n    readonly BOOL_VEC2: 0x8B57;\n    readonly BOOL_VEC3: 0x8B58;\n    readonly BOOL_VEC4: 0x8B59;\n    readonly FLOAT_MAT2: 0x8B5A;\n    readonly FLOAT_MAT3: 0x8B5B;\n    readonly FLOAT_MAT4: 0x8B5C;\n    readonly SAMPLER_2D: 0x8B5E;\n    readonly SAMPLER_CUBE: 0x8B60;\n    readonly VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622;\n    readonly VERTEX_ATTRIB_ARRAY_SIZE: 0x8623;\n    readonly VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624;\n    readonly VERTEX_ATTRIB_ARRAY_TYPE: 0x8625;\n    readonly VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A;\n    readonly VERTEX_ATTRIB_ARRAY_POINTER: 0x8645;\n    readonly VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F;\n    readonly IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A;\n    readonly IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B;\n    readonly COMPILE_STATUS: 0x8B81;\n    readonly LOW_FLOAT: 0x8DF0;\n    readonly MEDIUM_FLOAT: 0x8DF1;\n    readonly HIGH_FLOAT: 0x8DF2;\n    readonly LOW_INT: 0x8DF3;\n    readonly MEDIUM_INT: 0x8DF4;\n    readonly HIGH_INT: 0x8DF5;\n    readonly FRAMEBUFFER: 0x8D40;\n    readonly RENDERBUFFER: 0x8D41;\n    readonly RGBA4: 0x8056;\n    readonly RGB5_A1: 0x8057;\n    readonly RGB565: 0x8D62;\n    readonly DEPTH_COMPONENT16: 0x81A5;\n    readonly STENCIL_INDEX8: 0x8D48;\n    readonly DEPTH_STENCIL: 0x84F9;\n    readonly RENDERBUFFER_WIDTH: 0x8D42;\n    readonly RENDERBUFFER_HEIGHT: 0x8D43;\n    readonly RENDERBUFFER_INTERNAL_FORMAT: 0x8D44;\n    readonly RENDERBUFFER_RED_SIZE: 0x8D50;\n    readonly RENDERBUFFER_GREEN_SIZE: 0x8D51;\n    readonly RENDERBUFFER_BLUE_SIZE: 0x8D52;\n    readonly RENDERBUFFER_ALPHA_SIZE: 0x8D53;\n    readonly RENDERBUFFER_DEPTH_SIZE: 0x8D54;\n    readonly RENDERBUFFER_STENCIL_SIZE: 0x8D55;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3;\n    readonly COLOR_ATTACHMENT0: 0x8CE0;\n    readonly DEPTH_ATTACHMENT: 0x8D00;\n    readonly STENCIL_ATTACHMENT: 0x8D20;\n    readonly DEPTH_STENCIL_ATTACHMENT: 0x821A;\n    readonly NONE: 0;\n    readonly FRAMEBUFFER_COMPLETE: 0x8CD5;\n    readonly FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6;\n    readonly FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7;\n    readonly FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9;\n    readonly FRAMEBUFFER_UNSUPPORTED: 0x8CDD;\n    readonly FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly RENDERBUFFER_BINDING: 0x8CA7;\n    readonly MAX_RENDERBUFFER_SIZE: 0x84E8;\n    readonly INVALID_FRAMEBUFFER_OPERATION: 0x0506;\n    readonly UNPACK_FLIP_Y_WEBGL: 0x9240;\n    readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241;\n    readonly CONTEXT_LOST_WEBGL: 0x9242;\n    readonly UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243;\n    readonly BROWSER_DEFAULT_WEBGL: 0x9244;\n};\n\ninterface WebGLRenderingContextBase {\n    readonly canvas: HTMLCanvasElement | OffscreenCanvas;\n    readonly drawingBufferHeight: GLsizei;\n    readonly drawingBufferWidth: GLsizei;\n    activeTexture(texture: GLenum): void;\n    attachShader(program: WebGLProgram, shader: WebGLShader): void;\n    bindAttribLocation(program: WebGLProgram, index: GLuint, name: string): void;\n    bindBuffer(target: GLenum, buffer: WebGLBuffer | null): void;\n    bindFramebuffer(target: GLenum, framebuffer: WebGLFramebuffer | null): void;\n    bindRenderbuffer(target: GLenum, renderbuffer: WebGLRenderbuffer | null): void;\n    bindTexture(target: GLenum, texture: WebGLTexture | null): void;\n    blendColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void;\n    blendEquation(mode: GLenum): void;\n    blendEquationSeparate(modeRGB: GLenum, modeAlpha: GLenum): void;\n    blendFunc(sfactor: GLenum, dfactor: GLenum): void;\n    blendFuncSeparate(srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void;\n    checkFramebufferStatus(target: GLenum): GLenum;\n    clear(mask: GLbitfield): void;\n    clearColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void;\n    clearDepth(depth: GLclampf): void;\n    clearStencil(s: GLint): void;\n    colorMask(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean): void;\n    compileShader(shader: WebGLShader): void;\n    copyTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei, border: GLint): void;\n    copyTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    createBuffer(): WebGLBuffer | null;\n    createFramebuffer(): WebGLFramebuffer | null;\n    createProgram(): WebGLProgram | null;\n    createRenderbuffer(): WebGLRenderbuffer | null;\n    createShader(type: GLenum): WebGLShader | null;\n    createTexture(): WebGLTexture | null;\n    cullFace(mode: GLenum): void;\n    deleteBuffer(buffer: WebGLBuffer | null): void;\n    deleteFramebuffer(framebuffer: WebGLFramebuffer | null): void;\n    deleteProgram(program: WebGLProgram | null): void;\n    deleteRenderbuffer(renderbuffer: WebGLRenderbuffer | null): void;\n    deleteShader(shader: WebGLShader | null): void;\n    deleteTexture(texture: WebGLTexture | null): void;\n    depthFunc(func: GLenum): void;\n    depthMask(flag: GLboolean): void;\n    depthRange(zNear: GLclampf, zFar: GLclampf): void;\n    detachShader(program: WebGLProgram, shader: WebGLShader): void;\n    disable(cap: GLenum): void;\n    disableVertexAttribArray(index: GLuint): void;\n    drawArrays(mode: GLenum, first: GLint, count: GLsizei): void;\n    drawElements(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr): void;\n    enable(cap: GLenum): void;\n    enableVertexAttribArray(index: GLuint): void;\n    finish(): void;\n    flush(): void;\n    framebufferRenderbuffer(target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: WebGLRenderbuffer | null): void;\n    framebufferTexture2D(target: GLenum, attachment: GLenum, textarget: GLenum, texture: WebGLTexture | null, level: GLint): void;\n    frontFace(mode: GLenum): void;\n    generateMipmap(target: GLenum): void;\n    getActiveAttrib(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null;\n    getActiveUniform(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null;\n    getAttachedShaders(program: WebGLProgram): WebGLShader[] | null;\n    getAttribLocation(program: WebGLProgram, name: string): GLint;\n    getBufferParameter(target: GLenum, pname: GLenum): any;\n    getContextAttributes(): WebGLContextAttributes | null;\n    getError(): GLenum;\n    getExtension(extensionName: \"ANGLE_instanced_arrays\"): ANGLE_instanced_arrays | null;\n    getExtension(extensionName: \"EXT_blend_minmax\"): EXT_blend_minmax | null;\n    getExtension(extensionName: \"EXT_color_buffer_float\"): EXT_color_buffer_float | null;\n    getExtension(extensionName: \"EXT_color_buffer_half_float\"): EXT_color_buffer_half_float | null;\n    getExtension(extensionName: \"EXT_float_blend\"): EXT_float_blend | null;\n    getExtension(extensionName: \"EXT_frag_depth\"): EXT_frag_depth | null;\n    getExtension(extensionName: \"EXT_sRGB\"): EXT_sRGB | null;\n    getExtension(extensionName: \"EXT_shader_texture_lod\"): EXT_shader_texture_lod | null;\n    getExtension(extensionName: \"EXT_texture_compression_bptc\"): EXT_texture_compression_bptc | null;\n    getExtension(extensionName: \"EXT_texture_compression_rgtc\"): EXT_texture_compression_rgtc | null;\n    getExtension(extensionName: \"EXT_texture_filter_anisotropic\"): EXT_texture_filter_anisotropic | null;\n    getExtension(extensionName: \"KHR_parallel_shader_compile\"): KHR_parallel_shader_compile | null;\n    getExtension(extensionName: \"OES_element_index_uint\"): OES_element_index_uint | null;\n    getExtension(extensionName: \"OES_fbo_render_mipmap\"): OES_fbo_render_mipmap | null;\n    getExtension(extensionName: \"OES_standard_derivatives\"): OES_standard_derivatives | null;\n    getExtension(extensionName: \"OES_texture_float\"): OES_texture_float | null;\n    getExtension(extensionName: \"OES_texture_float_linear\"): OES_texture_float_linear | null;\n    getExtension(extensionName: \"OES_texture_half_float\"): OES_texture_half_float | null;\n    getExtension(extensionName: \"OES_texture_half_float_linear\"): OES_texture_half_float_linear | null;\n    getExtension(extensionName: \"OES_vertex_array_object\"): OES_vertex_array_object | null;\n    getExtension(extensionName: \"OVR_multiview2\"): OVR_multiview2 | null;\n    getExtension(extensionName: \"WEBGL_color_buffer_float\"): WEBGL_color_buffer_float | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_astc\"): WEBGL_compressed_texture_astc | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_etc\"): WEBGL_compressed_texture_etc | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_etc1\"): WEBGL_compressed_texture_etc1 | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_s3tc\"): WEBGL_compressed_texture_s3tc | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_s3tc_srgb\"): WEBGL_compressed_texture_s3tc_srgb | null;\n    getExtension(extensionName: \"WEBGL_debug_renderer_info\"): WEBGL_debug_renderer_info | null;\n    getExtension(extensionName: \"WEBGL_debug_shaders\"): WEBGL_debug_shaders | null;\n    getExtension(extensionName: \"WEBGL_depth_texture\"): WEBGL_depth_texture | null;\n    getExtension(extensionName: \"WEBGL_draw_buffers\"): WEBGL_draw_buffers | null;\n    getExtension(extensionName: \"WEBGL_lose_context\"): WEBGL_lose_context | null;\n    getExtension(extensionName: \"WEBGL_multi_draw\"): WEBGL_multi_draw | null;\n    getExtension(name: string): any;\n    getFramebufferAttachmentParameter(target: GLenum, attachment: GLenum, pname: GLenum): any;\n    getParameter(pname: GLenum): any;\n    getProgramInfoLog(program: WebGLProgram): string | null;\n    getProgramParameter(program: WebGLProgram, pname: GLenum): any;\n    getRenderbufferParameter(target: GLenum, pname: GLenum): any;\n    getShaderInfoLog(shader: WebGLShader): string | null;\n    getShaderParameter(shader: WebGLShader, pname: GLenum): any;\n    getShaderPrecisionFormat(shadertype: GLenum, precisiontype: GLenum): WebGLShaderPrecisionFormat | null;\n    getShaderSource(shader: WebGLShader): string | null;\n    getSupportedExtensions(): string[] | null;\n    getTexParameter(target: GLenum, pname: GLenum): any;\n    getUniform(program: WebGLProgram, location: WebGLUniformLocation): any;\n    getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation | null;\n    getVertexAttrib(index: GLuint, pname: GLenum): any;\n    getVertexAttribOffset(index: GLuint, pname: GLenum): GLintptr;\n    hint(target: GLenum, mode: GLenum): void;\n    isBuffer(buffer: WebGLBuffer | null): GLboolean;\n    isContextLost(): boolean;\n    isEnabled(cap: GLenum): GLboolean;\n    isFramebuffer(framebuffer: WebGLFramebuffer | null): GLboolean;\n    isProgram(program: WebGLProgram | null): GLboolean;\n    isRenderbuffer(renderbuffer: WebGLRenderbuffer | null): GLboolean;\n    isShader(shader: WebGLShader | null): GLboolean;\n    isTexture(texture: WebGLTexture | null): GLboolean;\n    lineWidth(width: GLfloat): void;\n    linkProgram(program: WebGLProgram): void;\n    pixelStorei(pname: GLenum, param: GLint | GLboolean): void;\n    polygonOffset(factor: GLfloat, units: GLfloat): void;\n    renderbufferStorage(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei): void;\n    sampleCoverage(value: GLclampf, invert: GLboolean): void;\n    scissor(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    shaderSource(shader: WebGLShader, source: string): void;\n    stencilFunc(func: GLenum, ref: GLint, mask: GLuint): void;\n    stencilFuncSeparate(face: GLenum, func: GLenum, ref: GLint, mask: GLuint): void;\n    stencilMask(mask: GLuint): void;\n    stencilMaskSeparate(face: GLenum, mask: GLuint): void;\n    stencilOp(fail: GLenum, zfail: GLenum, zpass: GLenum): void;\n    stencilOpSeparate(face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum): void;\n    texParameterf(target: GLenum, pname: GLenum, param: GLfloat): void;\n    texParameteri(target: GLenum, pname: GLenum, param: GLint): void;\n    uniform1f(location: WebGLUniformLocation | null, x: GLfloat): void;\n    uniform1i(location: WebGLUniformLocation | null, x: GLint): void;\n    uniform2f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat): void;\n    uniform2i(location: WebGLUniformLocation | null, x: GLint, y: GLint): void;\n    uniform3f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat): void;\n    uniform3i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint): void;\n    uniform4f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void;\n    uniform4i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint, w: GLint): void;\n    useProgram(program: WebGLProgram | null): void;\n    validateProgram(program: WebGLProgram): void;\n    vertexAttrib1f(index: GLuint, x: GLfloat): void;\n    vertexAttrib1fv(index: GLuint, values: Float32List): void;\n    vertexAttrib2f(index: GLuint, x: GLfloat, y: GLfloat): void;\n    vertexAttrib2fv(index: GLuint, values: Float32List): void;\n    vertexAttrib3f(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat): void;\n    vertexAttrib3fv(index: GLuint, values: Float32List): void;\n    vertexAttrib4f(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void;\n    vertexAttrib4fv(index: GLuint, values: Float32List): void;\n    vertexAttribPointer(index: GLuint, size: GLint, type: GLenum, normalized: GLboolean, stride: GLsizei, offset: GLintptr): void;\n    viewport(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    readonly DEPTH_BUFFER_BIT: 0x00000100;\n    readonly STENCIL_BUFFER_BIT: 0x00000400;\n    readonly COLOR_BUFFER_BIT: 0x00004000;\n    readonly POINTS: 0x0000;\n    readonly LINES: 0x0001;\n    readonly LINE_LOOP: 0x0002;\n    readonly LINE_STRIP: 0x0003;\n    readonly TRIANGLES: 0x0004;\n    readonly TRIANGLE_STRIP: 0x0005;\n    readonly TRIANGLE_FAN: 0x0006;\n    readonly ZERO: 0;\n    readonly ONE: 1;\n    readonly SRC_COLOR: 0x0300;\n    readonly ONE_MINUS_SRC_COLOR: 0x0301;\n    readonly SRC_ALPHA: 0x0302;\n    readonly ONE_MINUS_SRC_ALPHA: 0x0303;\n    readonly DST_ALPHA: 0x0304;\n    readonly ONE_MINUS_DST_ALPHA: 0x0305;\n    readonly DST_COLOR: 0x0306;\n    readonly ONE_MINUS_DST_COLOR: 0x0307;\n    readonly SRC_ALPHA_SATURATE: 0x0308;\n    readonly FUNC_ADD: 0x8006;\n    readonly BLEND_EQUATION: 0x8009;\n    readonly BLEND_EQUATION_RGB: 0x8009;\n    readonly BLEND_EQUATION_ALPHA: 0x883D;\n    readonly FUNC_SUBTRACT: 0x800A;\n    readonly FUNC_REVERSE_SUBTRACT: 0x800B;\n    readonly BLEND_DST_RGB: 0x80C8;\n    readonly BLEND_SRC_RGB: 0x80C9;\n    readonly BLEND_DST_ALPHA: 0x80CA;\n    readonly BLEND_SRC_ALPHA: 0x80CB;\n    readonly CONSTANT_COLOR: 0x8001;\n    readonly ONE_MINUS_CONSTANT_COLOR: 0x8002;\n    readonly CONSTANT_ALPHA: 0x8003;\n    readonly ONE_MINUS_CONSTANT_ALPHA: 0x8004;\n    readonly BLEND_COLOR: 0x8005;\n    readonly ARRAY_BUFFER: 0x8892;\n    readonly ELEMENT_ARRAY_BUFFER: 0x8893;\n    readonly ARRAY_BUFFER_BINDING: 0x8894;\n    readonly ELEMENT_ARRAY_BUFFER_BINDING: 0x8895;\n    readonly STREAM_DRAW: 0x88E0;\n    readonly STATIC_DRAW: 0x88E4;\n    readonly DYNAMIC_DRAW: 0x88E8;\n    readonly BUFFER_SIZE: 0x8764;\n    readonly BUFFER_USAGE: 0x8765;\n    readonly CURRENT_VERTEX_ATTRIB: 0x8626;\n    readonly FRONT: 0x0404;\n    readonly BACK: 0x0405;\n    readonly FRONT_AND_BACK: 0x0408;\n    readonly CULL_FACE: 0x0B44;\n    readonly BLEND: 0x0BE2;\n    readonly DITHER: 0x0BD0;\n    readonly STENCIL_TEST: 0x0B90;\n    readonly DEPTH_TEST: 0x0B71;\n    readonly SCISSOR_TEST: 0x0C11;\n    readonly POLYGON_OFFSET_FILL: 0x8037;\n    readonly SAMPLE_ALPHA_TO_COVERAGE: 0x809E;\n    readonly SAMPLE_COVERAGE: 0x80A0;\n    readonly NO_ERROR: 0;\n    readonly INVALID_ENUM: 0x0500;\n    readonly INVALID_VALUE: 0x0501;\n    readonly INVALID_OPERATION: 0x0502;\n    readonly OUT_OF_MEMORY: 0x0505;\n    readonly CW: 0x0900;\n    readonly CCW: 0x0901;\n    readonly LINE_WIDTH: 0x0B21;\n    readonly ALIASED_POINT_SIZE_RANGE: 0x846D;\n    readonly ALIASED_LINE_WIDTH_RANGE: 0x846E;\n    readonly CULL_FACE_MODE: 0x0B45;\n    readonly FRONT_FACE: 0x0B46;\n    readonly DEPTH_RANGE: 0x0B70;\n    readonly DEPTH_WRITEMASK: 0x0B72;\n    readonly DEPTH_CLEAR_VALUE: 0x0B73;\n    readonly DEPTH_FUNC: 0x0B74;\n    readonly STENCIL_CLEAR_VALUE: 0x0B91;\n    readonly STENCIL_FUNC: 0x0B92;\n    readonly STENCIL_FAIL: 0x0B94;\n    readonly STENCIL_PASS_DEPTH_FAIL: 0x0B95;\n    readonly STENCIL_PASS_DEPTH_PASS: 0x0B96;\n    readonly STENCIL_REF: 0x0B97;\n    readonly STENCIL_VALUE_MASK: 0x0B93;\n    readonly STENCIL_WRITEMASK: 0x0B98;\n    readonly STENCIL_BACK_FUNC: 0x8800;\n    readonly STENCIL_BACK_FAIL: 0x8801;\n    readonly STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802;\n    readonly STENCIL_BACK_PASS_DEPTH_PASS: 0x8803;\n    readonly STENCIL_BACK_REF: 0x8CA3;\n    readonly STENCIL_BACK_VALUE_MASK: 0x8CA4;\n    readonly STENCIL_BACK_WRITEMASK: 0x8CA5;\n    readonly VIEWPORT: 0x0BA2;\n    readonly SCISSOR_BOX: 0x0C10;\n    readonly COLOR_CLEAR_VALUE: 0x0C22;\n    readonly COLOR_WRITEMASK: 0x0C23;\n    readonly UNPACK_ALIGNMENT: 0x0CF5;\n    readonly PACK_ALIGNMENT: 0x0D05;\n    readonly MAX_TEXTURE_SIZE: 0x0D33;\n    readonly MAX_VIEWPORT_DIMS: 0x0D3A;\n    readonly SUBPIXEL_BITS: 0x0D50;\n    readonly RED_BITS: 0x0D52;\n    readonly GREEN_BITS: 0x0D53;\n    readonly BLUE_BITS: 0x0D54;\n    readonly ALPHA_BITS: 0x0D55;\n    readonly DEPTH_BITS: 0x0D56;\n    readonly STENCIL_BITS: 0x0D57;\n    readonly POLYGON_OFFSET_UNITS: 0x2A00;\n    readonly POLYGON_OFFSET_FACTOR: 0x8038;\n    readonly TEXTURE_BINDING_2D: 0x8069;\n    readonly SAMPLE_BUFFERS: 0x80A8;\n    readonly SAMPLES: 0x80A9;\n    readonly SAMPLE_COVERAGE_VALUE: 0x80AA;\n    readonly SAMPLE_COVERAGE_INVERT: 0x80AB;\n    readonly COMPRESSED_TEXTURE_FORMATS: 0x86A3;\n    readonly DONT_CARE: 0x1100;\n    readonly FASTEST: 0x1101;\n    readonly NICEST: 0x1102;\n    readonly GENERATE_MIPMAP_HINT: 0x8192;\n    readonly BYTE: 0x1400;\n    readonly UNSIGNED_BYTE: 0x1401;\n    readonly SHORT: 0x1402;\n    readonly UNSIGNED_SHORT: 0x1403;\n    readonly INT: 0x1404;\n    readonly UNSIGNED_INT: 0x1405;\n    readonly FLOAT: 0x1406;\n    readonly DEPTH_COMPONENT: 0x1902;\n    readonly ALPHA: 0x1906;\n    readonly RGB: 0x1907;\n    readonly RGBA: 0x1908;\n    readonly LUMINANCE: 0x1909;\n    readonly LUMINANCE_ALPHA: 0x190A;\n    readonly UNSIGNED_SHORT_4_4_4_4: 0x8033;\n    readonly UNSIGNED_SHORT_5_5_5_1: 0x8034;\n    readonly UNSIGNED_SHORT_5_6_5: 0x8363;\n    readonly FRAGMENT_SHADER: 0x8B30;\n    readonly VERTEX_SHADER: 0x8B31;\n    readonly MAX_VERTEX_ATTRIBS: 0x8869;\n    readonly MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB;\n    readonly MAX_VARYING_VECTORS: 0x8DFC;\n    readonly MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D;\n    readonly MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C;\n    readonly MAX_TEXTURE_IMAGE_UNITS: 0x8872;\n    readonly MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD;\n    readonly SHADER_TYPE: 0x8B4F;\n    readonly DELETE_STATUS: 0x8B80;\n    readonly LINK_STATUS: 0x8B82;\n    readonly VALIDATE_STATUS: 0x8B83;\n    readonly ATTACHED_SHADERS: 0x8B85;\n    readonly ACTIVE_UNIFORMS: 0x8B86;\n    readonly ACTIVE_ATTRIBUTES: 0x8B89;\n    readonly SHADING_LANGUAGE_VERSION: 0x8B8C;\n    readonly CURRENT_PROGRAM: 0x8B8D;\n    readonly NEVER: 0x0200;\n    readonly LESS: 0x0201;\n    readonly EQUAL: 0x0202;\n    readonly LEQUAL: 0x0203;\n    readonly GREATER: 0x0204;\n    readonly NOTEQUAL: 0x0205;\n    readonly GEQUAL: 0x0206;\n    readonly ALWAYS: 0x0207;\n    readonly KEEP: 0x1E00;\n    readonly REPLACE: 0x1E01;\n    readonly INCR: 0x1E02;\n    readonly DECR: 0x1E03;\n    readonly INVERT: 0x150A;\n    readonly INCR_WRAP: 0x8507;\n    readonly DECR_WRAP: 0x8508;\n    readonly VENDOR: 0x1F00;\n    readonly RENDERER: 0x1F01;\n    readonly VERSION: 0x1F02;\n    readonly NEAREST: 0x2600;\n    readonly LINEAR: 0x2601;\n    readonly NEAREST_MIPMAP_NEAREST: 0x2700;\n    readonly LINEAR_MIPMAP_NEAREST: 0x2701;\n    readonly NEAREST_MIPMAP_LINEAR: 0x2702;\n    readonly LINEAR_MIPMAP_LINEAR: 0x2703;\n    readonly TEXTURE_MAG_FILTER: 0x2800;\n    readonly TEXTURE_MIN_FILTER: 0x2801;\n    readonly TEXTURE_WRAP_S: 0x2802;\n    readonly TEXTURE_WRAP_T: 0x2803;\n    readonly TEXTURE_2D: 0x0DE1;\n    readonly TEXTURE: 0x1702;\n    readonly TEXTURE_CUBE_MAP: 0x8513;\n    readonly TEXTURE_BINDING_CUBE_MAP: 0x8514;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A;\n    readonly MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C;\n    readonly TEXTURE0: 0x84C0;\n    readonly TEXTURE1: 0x84C1;\n    readonly TEXTURE2: 0x84C2;\n    readonly TEXTURE3: 0x84C3;\n    readonly TEXTURE4: 0x84C4;\n    readonly TEXTURE5: 0x84C5;\n    readonly TEXTURE6: 0x84C6;\n    readonly TEXTURE7: 0x84C7;\n    readonly TEXTURE8: 0x84C8;\n    readonly TEXTURE9: 0x84C9;\n    readonly TEXTURE10: 0x84CA;\n    readonly TEXTURE11: 0x84CB;\n    readonly TEXTURE12: 0x84CC;\n    readonly TEXTURE13: 0x84CD;\n    readonly TEXTURE14: 0x84CE;\n    readonly TEXTURE15: 0x84CF;\n    readonly TEXTURE16: 0x84D0;\n    readonly TEXTURE17: 0x84D1;\n    readonly TEXTURE18: 0x84D2;\n    readonly TEXTURE19: 0x84D3;\n    readonly TEXTURE20: 0x84D4;\n    readonly TEXTURE21: 0x84D5;\n    readonly TEXTURE22: 0x84D6;\n    readonly TEXTURE23: 0x84D7;\n    readonly TEXTURE24: 0x84D8;\n    readonly TEXTURE25: 0x84D9;\n    readonly TEXTURE26: 0x84DA;\n    readonly TEXTURE27: 0x84DB;\n    readonly TEXTURE28: 0x84DC;\n    readonly TEXTURE29: 0x84DD;\n    readonly TEXTURE30: 0x84DE;\n    readonly TEXTURE31: 0x84DF;\n    readonly ACTIVE_TEXTURE: 0x84E0;\n    readonly REPEAT: 0x2901;\n    readonly CLAMP_TO_EDGE: 0x812F;\n    readonly MIRRORED_REPEAT: 0x8370;\n    readonly FLOAT_VEC2: 0x8B50;\n    readonly FLOAT_VEC3: 0x8B51;\n    readonly FLOAT_VEC4: 0x8B52;\n    readonly INT_VEC2: 0x8B53;\n    readonly INT_VEC3: 0x8B54;\n    readonly INT_VEC4: 0x8B55;\n    readonly BOOL: 0x8B56;\n    readonly BOOL_VEC2: 0x8B57;\n    readonly BOOL_VEC3: 0x8B58;\n    readonly BOOL_VEC4: 0x8B59;\n    readonly FLOAT_MAT2: 0x8B5A;\n    readonly FLOAT_MAT3: 0x8B5B;\n    readonly FLOAT_MAT4: 0x8B5C;\n    readonly SAMPLER_2D: 0x8B5E;\n    readonly SAMPLER_CUBE: 0x8B60;\n    readonly VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622;\n    readonly VERTEX_ATTRIB_ARRAY_SIZE: 0x8623;\n    readonly VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624;\n    readonly VERTEX_ATTRIB_ARRAY_TYPE: 0x8625;\n    readonly VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A;\n    readonly VERTEX_ATTRIB_ARRAY_POINTER: 0x8645;\n    readonly VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F;\n    readonly IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A;\n    readonly IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B;\n    readonly COMPILE_STATUS: 0x8B81;\n    readonly LOW_FLOAT: 0x8DF0;\n    readonly MEDIUM_FLOAT: 0x8DF1;\n    readonly HIGH_FLOAT: 0x8DF2;\n    readonly LOW_INT: 0x8DF3;\n    readonly MEDIUM_INT: 0x8DF4;\n    readonly HIGH_INT: 0x8DF5;\n    readonly FRAMEBUFFER: 0x8D40;\n    readonly RENDERBUFFER: 0x8D41;\n    readonly RGBA4: 0x8056;\n    readonly RGB5_A1: 0x8057;\n    readonly RGB565: 0x8D62;\n    readonly DEPTH_COMPONENT16: 0x81A5;\n    readonly STENCIL_INDEX8: 0x8D48;\n    readonly DEPTH_STENCIL: 0x84F9;\n    readonly RENDERBUFFER_WIDTH: 0x8D42;\n    readonly RENDERBUFFER_HEIGHT: 0x8D43;\n    readonly RENDERBUFFER_INTERNAL_FORMAT: 0x8D44;\n    readonly RENDERBUFFER_RED_SIZE: 0x8D50;\n    readonly RENDERBUFFER_GREEN_SIZE: 0x8D51;\n    readonly RENDERBUFFER_BLUE_SIZE: 0x8D52;\n    readonly RENDERBUFFER_ALPHA_SIZE: 0x8D53;\n    readonly RENDERBUFFER_DEPTH_SIZE: 0x8D54;\n    readonly RENDERBUFFER_STENCIL_SIZE: 0x8D55;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3;\n    readonly COLOR_ATTACHMENT0: 0x8CE0;\n    readonly DEPTH_ATTACHMENT: 0x8D00;\n    readonly STENCIL_ATTACHMENT: 0x8D20;\n    readonly DEPTH_STENCIL_ATTACHMENT: 0x821A;\n    readonly NONE: 0;\n    readonly FRAMEBUFFER_COMPLETE: 0x8CD5;\n    readonly FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6;\n    readonly FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7;\n    readonly FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9;\n    readonly FRAMEBUFFER_UNSUPPORTED: 0x8CDD;\n    readonly FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly RENDERBUFFER_BINDING: 0x8CA7;\n    readonly MAX_RENDERBUFFER_SIZE: 0x84E8;\n    readonly INVALID_FRAMEBUFFER_OPERATION: 0x0506;\n    readonly UNPACK_FLIP_Y_WEBGL: 0x9240;\n    readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241;\n    readonly CONTEXT_LOST_WEBGL: 0x9242;\n    readonly UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243;\n    readonly BROWSER_DEFAULT_WEBGL: 0x9244;\n}\n\ninterface WebGLRenderingContextOverloads {\n    bufferData(target: GLenum, size: GLsizeiptr, usage: GLenum): void;\n    bufferData(target: GLenum, data: BufferSource | null, usage: GLenum): void;\n    bufferSubData(target: GLenum, offset: GLintptr, data: BufferSource): void;\n    compressedTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, data: ArrayBufferView): void;\n    compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, data: ArrayBufferView): void;\n    readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    uniform1fv(location: WebGLUniformLocation | null, v: Float32List): void;\n    uniform1iv(location: WebGLUniformLocation | null, v: Int32List): void;\n    uniform2fv(location: WebGLUniformLocation | null, v: Float32List): void;\n    uniform2iv(location: WebGLUniformLocation | null, v: Int32List): void;\n    uniform3fv(location: WebGLUniformLocation | null, v: Float32List): void;\n    uniform3iv(location: WebGLUniformLocation | null, v: Int32List): void;\n    uniform4fv(location: WebGLUniformLocation | null, v: Float32List): void;\n    uniform4iv(location: WebGLUniformLocation | null, v: Int32List): void;\n    uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void;\n    uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void;\n    uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void;\n}\n\ninterface WebGLSampler {\n}\n\ndeclare var WebGLSampler: {\n    prototype: WebGLSampler;\n    new(): WebGLSampler;\n};\n\n/** The WebGLShader is part of the WebGL API and can either be a vertex or a fragment shader. A WebGLProgram requires both types of shaders. */\ninterface WebGLShader {\n}\n\ndeclare var WebGLShader: {\n    prototype: WebGLShader;\n    new(): WebGLShader;\n};\n\n/** Part of the WebGL API and represents the information returned by calling the WebGLRenderingContext.getShaderPrecisionFormat() method. */\ninterface WebGLShaderPrecisionFormat {\n    readonly precision: GLint;\n    readonly rangeMax: GLint;\n    readonly rangeMin: GLint;\n}\n\ndeclare var WebGLShaderPrecisionFormat: {\n    prototype: WebGLShaderPrecisionFormat;\n    new(): WebGLShaderPrecisionFormat;\n};\n\ninterface WebGLSync {\n}\n\ndeclare var WebGLSync: {\n    prototype: WebGLSync;\n    new(): WebGLSync;\n};\n\n/** Part of the WebGL API and represents an opaque texture object providing storage and state for texturing operations. */\ninterface WebGLTexture {\n}\n\ndeclare var WebGLTexture: {\n    prototype: WebGLTexture;\n    new(): WebGLTexture;\n};\n\ninterface WebGLTransformFeedback {\n}\n\ndeclare var WebGLTransformFeedback: {\n    prototype: WebGLTransformFeedback;\n    new(): WebGLTransformFeedback;\n};\n\n/** Part of the WebGL API and represents the location of a uniform variable in a shader program. */\ninterface WebGLUniformLocation {\n}\n\ndeclare var WebGLUniformLocation: {\n    prototype: WebGLUniformLocation;\n    new(): WebGLUniformLocation;\n};\n\ninterface WebGLVertexArrayObject {\n}\n\ndeclare var WebGLVertexArrayObject: {\n    prototype: WebGLVertexArrayObject;\n    new(): WebGLVertexArrayObject;\n};\n\ninterface WebGLVertexArrayObjectOES {\n}\n\ninterface WebSocketEventMap {\n    \"close\": CloseEvent;\n    \"error\": Event;\n    \"message\": MessageEvent;\n    \"open\": Event;\n}\n\n/** Provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection. */\ninterface WebSocket extends EventTarget {\n    /**\n     * Returns a string that indicates how binary data from the WebSocket object is exposed to scripts:\n     *\n     * Can be set, to change how binary data is returned. The default is \"blob\".\n     */\n    binaryType: BinaryType;\n    /**\n     * Returns the number of bytes of application data (UTF-8 text and binary data) that have been queued using send() but not yet been transmitted to the network.\n     *\n     * If the WebSocket connection is closed, this attribute's value will only increase with each call to the send() method. (The number does not reset to zero once the connection closes.)\n     */\n    readonly bufferedAmount: number;\n    /** Returns the extensions selected by the server, if any. */\n    readonly extensions: string;\n    onclose: ((this: WebSocket, ev: CloseEvent) => any) | null;\n    onerror: ((this: WebSocket, ev: Event) => any) | null;\n    onmessage: ((this: WebSocket, ev: MessageEvent) => any) | null;\n    onopen: ((this: WebSocket, ev: Event) => any) | null;\n    /** Returns the subprotocol selected by the server, if any. It can be used in conjunction with the array form of the constructor's second argument to perform subprotocol negotiation. */\n    readonly protocol: string;\n    /** Returns the state of the WebSocket object's connection. It can have the values described below. */\n    readonly readyState: number;\n    /** Returns the URL that was used to establish the WebSocket connection. */\n    readonly url: string;\n    /** Closes the WebSocket connection, optionally using code as the the WebSocket connection close code and reason as the the WebSocket connection close reason. */\n    close(code?: number, reason?: string): void;\n    /** Transmits data using the WebSocket connection. data can be a string, a Blob, an ArrayBuffer, or an ArrayBufferView. */\n    send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;\n    readonly CONNECTING: 0;\n    readonly OPEN: 1;\n    readonly CLOSING: 2;\n    readonly CLOSED: 3;\n    addEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var WebSocket: {\n    prototype: WebSocket;\n    new(url: string | URL, protocols?: string | string[]): WebSocket;\n    readonly CONNECTING: 0;\n    readonly OPEN: 1;\n    readonly CLOSING: 2;\n    readonly CLOSED: 3;\n};\n\n/** Events that occur due to the user moving a mouse wheel or similar input device. */\ninterface WheelEvent extends MouseEvent {\n    readonly deltaMode: number;\n    readonly deltaX: number;\n    readonly deltaY: number;\n    readonly deltaZ: number;\n    readonly DOM_DELTA_PIXEL: 0x00;\n    readonly DOM_DELTA_LINE: 0x01;\n    readonly DOM_DELTA_PAGE: 0x02;\n}\n\ndeclare var WheelEvent: {\n    prototype: WheelEvent;\n    new(type: string, eventInitDict?: WheelEventInit): WheelEvent;\n    readonly DOM_DELTA_PIXEL: 0x00;\n    readonly DOM_DELTA_LINE: 0x01;\n    readonly DOM_DELTA_PAGE: 0x02;\n};\n\ninterface WindowEventMap extends GlobalEventHandlersEventMap, WindowEventHandlersEventMap {\n    \"DOMContentLoaded\": Event;\n    \"devicemotion\": DeviceMotionEvent;\n    \"deviceorientation\": DeviceOrientationEvent;\n    \"gamepadconnected\": GamepadEvent;\n    \"gamepaddisconnected\": GamepadEvent;\n    \"orientationchange\": Event;\n}\n\n/** A window containing a DOM document; the document property points to the DOM document loaded in that window. */\ninterface Window extends EventTarget, AnimationFrameProvider, GlobalEventHandlers, WindowEventHandlers, WindowLocalStorage, WindowOrWorkerGlobalScope, WindowSessionStorage {\n    /** @deprecated This is a legacy alias of \\`navigator\\`. */\n    readonly clientInformation: Navigator;\n    /** Returns true if the window has been closed, false otherwise. */\n    readonly closed: boolean;\n    /** Defines a new custom element, mapping the given name to the given constructor as an autonomous custom element. */\n    readonly customElements: CustomElementRegistry;\n    readonly devicePixelRatio: number;\n    readonly document: Document;\n    /** @deprecated */\n    readonly event: Event | undefined;\n    /** @deprecated */\n    readonly external: External;\n    readonly frameElement: Element | null;\n    readonly frames: WindowProxy;\n    readonly history: History;\n    readonly innerHeight: number;\n    readonly innerWidth: number;\n    readonly length: number;\n    get location(): Location;\n    set location(href: string | Location);\n    /** Returns true if the location bar is visible; otherwise, returns false. */\n    readonly locationbar: BarProp;\n    /** Returns true if the menu bar is visible; otherwise, returns false. */\n    readonly menubar: BarProp;\n    name: string;\n    readonly navigator: Navigator;\n    /** Available only in secure contexts. */\n    ondevicemotion: ((this: Window, ev: DeviceMotionEvent) => any) | null;\n    /** Available only in secure contexts. */\n    ondeviceorientation: ((this: Window, ev: DeviceOrientationEvent) => any) | null;\n    /** @deprecated */\n    onorientationchange: ((this: Window, ev: Event) => any) | null;\n    opener: any;\n    /** @deprecated */\n    readonly orientation: number;\n    readonly outerHeight: number;\n    readonly outerWidth: number;\n    /** @deprecated This is a legacy alias of \\`scrollX\\`. */\n    readonly pageXOffset: number;\n    /** @deprecated This is a legacy alias of \\`scrollY\\`. */\n    readonly pageYOffset: number;\n    /**\n     * Refers to either the parent WindowProxy, or itself.\n     *\n     * It can rarely be null e.g. for contentWindow of an iframe that is already removed from the parent.\n     */\n    readonly parent: WindowProxy;\n    /** Returns true if the personal bar is visible; otherwise, returns false. */\n    readonly personalbar: BarProp;\n    readonly screen: Screen;\n    readonly screenLeft: number;\n    readonly screenTop: number;\n    readonly screenX: number;\n    readonly screenY: number;\n    readonly scrollX: number;\n    readonly scrollY: number;\n    /** Returns true if the scrollbars are visible; otherwise, returns false. */\n    readonly scrollbars: BarProp;\n    readonly self: Window & typeof globalThis;\n    readonly speechSynthesis: SpeechSynthesis;\n    /** @deprecated */\n    status: string;\n    /** Returns true if the status bar is visible; otherwise, returns false. */\n    readonly statusbar: BarProp;\n    /** Returns true if the toolbar is visible; otherwise, returns false. */\n    readonly toolbar: BarProp;\n    readonly top: WindowProxy | null;\n    readonly visualViewport: VisualViewport | null;\n    readonly window: Window & typeof globalThis;\n    alert(message?: any): void;\n    blur(): void;\n    cancelIdleCallback(handle: number): void;\n    /** @deprecated */\n    captureEvents(): void;\n    /** Closes the window. */\n    close(): void;\n    confirm(message?: string): boolean;\n    /** Moves the focus to the window's browsing context, if any. */\n    focus(): void;\n    getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration;\n    getSelection(): Selection | null;\n    matchMedia(query: string): MediaQueryList;\n    moveBy(x: number, y: number): void;\n    moveTo(x: number, y: number): void;\n    open(url?: string | URL, target?: string, features?: string): WindowProxy | null;\n    /**\n     * Posts a message to the given window. Messages can be structured objects, e.g. nested objects and arrays, can contain JavaScript values (strings, numbers, Date objects, etc), and can contain certain data objects such as File Blob, FileList, and ArrayBuffer objects.\n     *\n     * Objects listed in the transfer member of options are transferred, not just cloned, meaning that they are no longer usable on the sending side.\n     *\n     * A target origin can be specified using the targetOrigin member of options. If not provided, it defaults to \"/\". This default restricts the message to same-origin targets only.\n     *\n     * If the origin of the target window doesn't match the given target origin, the message is discarded, to avoid information leakage. To send the message to the target regardless of origin, set the target origin to \"*\".\n     *\n     * Throws a \"DataCloneError\" DOMException if transfer array contains duplicate objects or if message could not be cloned.\n     */\n    postMessage(message: any, targetOrigin: string, transfer?: Transferable[]): void;\n    postMessage(message: any, options?: WindowPostMessageOptions): void;\n    print(): void;\n    prompt(message?: string, _default?: string): string | null;\n    /** @deprecated */\n    releaseEvents(): void;\n    requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number;\n    resizeBy(x: number, y: number): void;\n    resizeTo(width: number, height: number): void;\n    scroll(options?: ScrollToOptions): void;\n    scroll(x: number, y: number): void;\n    scrollBy(options?: ScrollToOptions): void;\n    scrollBy(x: number, y: number): void;\n    scrollTo(options?: ScrollToOptions): void;\n    scrollTo(x: number, y: number): void;\n    /** Cancels the document load. */\n    stop(): void;\n    addEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n    [index: number]: Window;\n}\n\ndeclare var Window: {\n    prototype: Window;\n    new(): Window;\n};\n\ninterface WindowEventHandlersEventMap {\n    \"afterprint\": Event;\n    \"beforeprint\": Event;\n    \"beforeunload\": BeforeUnloadEvent;\n    \"gamepadconnected\": GamepadEvent;\n    \"gamepaddisconnected\": GamepadEvent;\n    \"hashchange\": HashChangeEvent;\n    \"languagechange\": Event;\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n    \"offline\": Event;\n    \"online\": Event;\n    \"pagehide\": PageTransitionEvent;\n    \"pageshow\": PageTransitionEvent;\n    \"popstate\": PopStateEvent;\n    \"rejectionhandled\": PromiseRejectionEvent;\n    \"storage\": StorageEvent;\n    \"unhandledrejection\": PromiseRejectionEvent;\n    \"unload\": Event;\n}\n\ninterface WindowEventHandlers {\n    onafterprint: ((this: WindowEventHandlers, ev: Event) => any) | null;\n    onbeforeprint: ((this: WindowEventHandlers, ev: Event) => any) | null;\n    onbeforeunload: ((this: WindowEventHandlers, ev: BeforeUnloadEvent) => any) | null;\n    ongamepadconnected: ((this: WindowEventHandlers, ev: GamepadEvent) => any) | null;\n    ongamepaddisconnected: ((this: WindowEventHandlers, ev: GamepadEvent) => any) | null;\n    onhashchange: ((this: WindowEventHandlers, ev: HashChangeEvent) => any) | null;\n    onlanguagechange: ((this: WindowEventHandlers, ev: Event) => any) | null;\n    onmessage: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: WindowEventHandlers, ev: MessageEvent) => any) | null;\n    onoffline: ((this: WindowEventHandlers, ev: Event) => any) | null;\n    ononline: ((this: WindowEventHandlers, ev: Event) => any) | null;\n    onpagehide: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null;\n    onpageshow: ((this: WindowEventHandlers, ev: PageTransitionEvent) => any) | null;\n    onpopstate: ((this: WindowEventHandlers, ev: PopStateEvent) => any) | null;\n    onrejectionhandled: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null;\n    onstorage: ((this: WindowEventHandlers, ev: StorageEvent) => any) | null;\n    onunhandledrejection: ((this: WindowEventHandlers, ev: PromiseRejectionEvent) => any) | null;\n    onunload: ((this: WindowEventHandlers, ev: Event) => any) | null;\n    addEventListener<K extends keyof WindowEventHandlersEventMap>(type: K, listener: (this: WindowEventHandlers, ev: WindowEventHandlersEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof WindowEventHandlersEventMap>(type: K, listener: (this: WindowEventHandlers, ev: WindowEventHandlersEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ninterface WindowLocalStorage {\n    readonly localStorage: Storage;\n}\n\ninterface WindowOrWorkerGlobalScope {\n    /** Available only in secure contexts. */\n    readonly caches: CacheStorage;\n    readonly crossOriginIsolated: boolean;\n    readonly crypto: Crypto;\n    readonly indexedDB: IDBFactory;\n    readonly isSecureContext: boolean;\n    readonly origin: string;\n    readonly performance: Performance;\n    atob(data: string): string;\n    btoa(data: string): string;\n    clearInterval(id: number | undefined): void;\n    clearTimeout(id: number | undefined): void;\n    createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap>;\n    createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;\n    fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n    queueMicrotask(callback: VoidFunction): void;\n    reportError(e: any): void;\n    setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;\n    setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;\n    structuredClone(value: any, options?: StructuredSerializeOptions): any;\n}\n\ninterface WindowSessionStorage {\n    readonly sessionStorage: Storage;\n}\n\ninterface WorkerEventMap extends AbstractWorkerEventMap {\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n}\n\n/** This Web Workers API interface represents a background task that can be easily created and can send messages back to its creator. Creating a worker is as simple as calling the Worker() constructor and specifying a script to be run in the worker thread. */\ninterface Worker extends EventTarget, AbstractWorker {\n    onmessage: ((this: Worker, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: Worker, ev: MessageEvent) => any) | null;\n    /** Clones message and transmits it to worker's global environment. transfer can be passed as a list of objects that are to be transferred rather than cloned. */\n    postMessage(message: any, transfer: Transferable[]): void;\n    postMessage(message: any, options?: StructuredSerializeOptions): void;\n    /** Aborts worker's associated global environment. */\n    terminate(): void;\n    addEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Worker: {\n    prototype: Worker;\n    new(scriptURL: string | URL, options?: WorkerOptions): Worker;\n};\n\n/** Available only in secure contexts. */\ninterface Worklet {\n    /**\n     * Loads and executes the module script given by moduleURL into all of worklet's global scopes. It can also create additional global scopes as part of this process, depending on the worklet type. The returned promise will fulfill once the script has been successfully loaded and run in all global scopes.\n     *\n     * The credentials option can be set to a credentials mode to modify the script-fetching process. It defaults to \"same-origin\".\n     *\n     * Any failures in fetching the script or its dependencies will cause the returned promise to be rejected with an \"AbortError\" DOMException. Any errors in parsing the script or its dependencies will cause the returned promise to be rejected with the exception generated during parsing.\n     */\n    addModule(moduleURL: string | URL, options?: WorkletOptions): Promise<void>;\n}\n\ndeclare var Worklet: {\n    prototype: Worklet;\n    new(): Worklet;\n};\n\n/** This Streams API interface provides\\xA0a standard abstraction for writing streaming data to a destination, known as a sink. This object comes with built-in backpressure and queuing. */\ninterface WritableStream<W = any> {\n    readonly locked: boolean;\n    abort(reason?: any): Promise<void>;\n    close(): Promise<void>;\n    getWriter(): WritableStreamDefaultWriter<W>;\n}\n\ndeclare var WritableStream: {\n    prototype: WritableStream;\n    new<W = any>(underlyingSink?: UnderlyingSink<W>, strategy?: QueuingStrategy<W>): WritableStream<W>;\n};\n\n/** This Streams API interface represents a controller allowing control of a\\xA0WritableStream's state. When constructing a WritableStream, the underlying sink is given a corresponding WritableStreamDefaultController instance to manipulate. */\ninterface WritableStreamDefaultController {\n    readonly signal: AbortSignal;\n    error(e?: any): void;\n}\n\ndeclare var WritableStreamDefaultController: {\n    prototype: WritableStreamDefaultController;\n    new(): WritableStreamDefaultController;\n};\n\n/** This Streams API interface is the object returned by WritableStream.getWriter() and once created locks the < writer to the WritableStream ensuring that no other streams can write to the underlying sink. */\ninterface WritableStreamDefaultWriter<W = any> {\n    readonly closed: Promise<undefined>;\n    readonly desiredSize: number | null;\n    readonly ready: Promise<undefined>;\n    abort(reason?: any): Promise<void>;\n    close(): Promise<void>;\n    releaseLock(): void;\n    write(chunk?: W): Promise<void>;\n}\n\ndeclare var WritableStreamDefaultWriter: {\n    prototype: WritableStreamDefaultWriter;\n    new<W = any>(stream: WritableStream<W>): WritableStreamDefaultWriter<W>;\n};\n\n/** An XML document. It inherits from the generic Document and does not add any specific methods or properties to it: nevertheless, several algorithms behave differently with the two types of documents. */\ninterface XMLDocument extends Document {\n    addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: XMLDocument, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: XMLDocument, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var XMLDocument: {\n    prototype: XMLDocument;\n    new(): XMLDocument;\n};\n\ninterface XMLHttpRequestEventMap extends XMLHttpRequestEventTargetEventMap {\n    \"readystatechange\": Event;\n}\n\n/** Use XMLHttpRequest (XHR) objects to interact with servers. You can retrieve data from a URL without having to do a full page refresh. This enables a Web page to update just part of a page without disrupting what the user is doing. */\ninterface XMLHttpRequest extends XMLHttpRequestEventTarget {\n    onreadystatechange: ((this: XMLHttpRequest, ev: Event) => any) | null;\n    /** Returns client's state. */\n    readonly readyState: number;\n    /** Returns the response body. */\n    readonly response: any;\n    /**\n     * Returns response as text.\n     *\n     * Throws an \"InvalidStateError\" DOMException if responseType is not the empty string or \"text\".\n     */\n    readonly responseText: string;\n    /**\n     * Returns the response type.\n     *\n     * Can be set to change the response type. Values are: the empty string (default), \"arraybuffer\", \"blob\", \"document\", \"json\", and \"text\".\n     *\n     * When set: setting to \"document\" is ignored if current global object is not a Window object.\n     *\n     * When set: throws an \"InvalidStateError\" DOMException if state is loading or done.\n     *\n     * When set: throws an \"InvalidAccessError\" DOMException if the synchronous flag is set and current global object is a Window object.\n     */\n    responseType: XMLHttpRequestResponseType;\n    readonly responseURL: string;\n    /**\n     * Returns the response as document.\n     *\n     * Throws an \"InvalidStateError\" DOMException if responseType is not the empty string or \"document\".\n     */\n    readonly responseXML: Document | null;\n    readonly status: number;\n    readonly statusText: string;\n    /**\n     * Can be set to a time in milliseconds. When set to a non-zero value will cause fetching to terminate after the given time has passed. When the time has passed, the request has not yet completed, and this's synchronous flag is unset, a timeout event will then be dispatched, or a \"TimeoutError\" DOMException will be thrown otherwise (for the send() method).\n     *\n     * When set: throws an \"InvalidAccessError\" DOMException if the synchronous flag is set and current global object is a Window object.\n     */\n    timeout: number;\n    /** Returns the associated XMLHttpRequestUpload object. It can be used to gather transmission information when data is transferred to a server. */\n    readonly upload: XMLHttpRequestUpload;\n    /**\n     * True when credentials are to be included in a cross-origin request. False when they are to be excluded in a cross-origin request and when cookies are to be ignored in its response. Initially false.\n     *\n     * When set: throws an \"InvalidStateError\" DOMException if state is not unsent or opened, or if the send() flag is set.\n     */\n    withCredentials: boolean;\n    /** Cancels any network activity. */\n    abort(): void;\n    getAllResponseHeaders(): string;\n    getResponseHeader(name: string): string | null;\n    /**\n     * Sets the request method, request URL, and synchronous flag.\n     *\n     * Throws a \"SyntaxError\" DOMException if either method is not a valid method or url cannot be parsed.\n     *\n     * Throws a \"SecurityError\" DOMException if method is a case-insensitive match for \\`CONNECT\\`, \\`TRACE\\`, or \\`TRACK\\`.\n     *\n     * Throws an \"InvalidAccessError\" DOMException if async is false, current global object is a Window object, and the timeout attribute is not zero or the responseType attribute is not the empty string.\n     */\n    open(method: string, url: string | URL): void;\n    open(method: string, url: string | URL, async: boolean, username?: string | null, password?: string | null): void;\n    /**\n     * Acts as if the \\`Content-Type\\` header value for a response is mime. (It does not change the header.)\n     *\n     * Throws an \"InvalidStateError\" DOMException if state is loading or done.\n     */\n    overrideMimeType(mime: string): void;\n    /**\n     * Initiates the request. The body argument provides the request body, if any, and is ignored if the request method is GET or HEAD.\n     *\n     * Throws an \"InvalidStateError\" DOMException if either state is not opened or the send() flag is set.\n     */\n    send(body?: Document | XMLHttpRequestBodyInit | null): void;\n    /**\n     * Combines a header in author request headers.\n     *\n     * Throws an \"InvalidStateError\" DOMException if either state is not opened or the send() flag is set.\n     *\n     * Throws a \"SyntaxError\" DOMException if name is not a header name or if value is not a header value.\n     */\n    setRequestHeader(name: string, value: string): void;\n    readonly UNSENT: 0;\n    readonly OPENED: 1;\n    readonly HEADERS_RECEIVED: 2;\n    readonly LOADING: 3;\n    readonly DONE: 4;\n    addEventListener<K extends keyof XMLHttpRequestEventMap>(type: K, listener: (this: XMLHttpRequest, ev: XMLHttpRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof XMLHttpRequestEventMap>(type: K, listener: (this: XMLHttpRequest, ev: XMLHttpRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var XMLHttpRequest: {\n    prototype: XMLHttpRequest;\n    new(): XMLHttpRequest;\n    readonly UNSENT: 0;\n    readonly OPENED: 1;\n    readonly HEADERS_RECEIVED: 2;\n    readonly LOADING: 3;\n    readonly DONE: 4;\n};\n\ninterface XMLHttpRequestEventTargetEventMap {\n    \"abort\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"error\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"load\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"loadend\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"loadstart\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"progress\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"timeout\": ProgressEvent<XMLHttpRequestEventTarget>;\n}\n\ninterface XMLHttpRequestEventTarget extends EventTarget {\n    onabort: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onerror: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onload: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onloadend: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onloadstart: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onprogress: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    ontimeout: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    addEventListener<K extends keyof XMLHttpRequestEventTargetEventMap>(type: K, listener: (this: XMLHttpRequestEventTarget, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof XMLHttpRequestEventTargetEventMap>(type: K, listener: (this: XMLHttpRequestEventTarget, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var XMLHttpRequestEventTarget: {\n    prototype: XMLHttpRequestEventTarget;\n    new(): XMLHttpRequestEventTarget;\n};\n\ninterface XMLHttpRequestUpload extends XMLHttpRequestEventTarget {\n    addEventListener<K extends keyof XMLHttpRequestEventTargetEventMap>(type: K, listener: (this: XMLHttpRequestUpload, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof XMLHttpRequestEventTargetEventMap>(type: K, listener: (this: XMLHttpRequestUpload, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var XMLHttpRequestUpload: {\n    prototype: XMLHttpRequestUpload;\n    new(): XMLHttpRequestUpload;\n};\n\n/** Provides the serializeToString() method to construct an XML string representing a DOM tree. */\ninterface XMLSerializer {\n    serializeToString(root: Node): string;\n}\n\ndeclare var XMLSerializer: {\n    prototype: XMLSerializer;\n    new(): XMLSerializer;\n};\n\n/** The\\xA0XPathEvaluator interface allows to compile and evaluate XPath expressions. */\ninterface XPathEvaluator extends XPathEvaluatorBase {\n}\n\ndeclare var XPathEvaluator: {\n    prototype: XPathEvaluator;\n    new(): XPathEvaluator;\n};\n\ninterface XPathEvaluatorBase {\n    createExpression(expression: string, resolver?: XPathNSResolver | null): XPathExpression;\n    createNSResolver(nodeResolver: Node): XPathNSResolver;\n    evaluate(expression: string, contextNode: Node, resolver?: XPathNSResolver | null, type?: number, result?: XPathResult | null): XPathResult;\n}\n\n/** This interface is a compiled XPath expression that can be evaluated on a document or specific node to return information its DOM tree. */\ninterface XPathExpression {\n    evaluate(contextNode: Node, type?: number, result?: XPathResult | null): XPathResult;\n}\n\ndeclare var XPathExpression: {\n    prototype: XPathExpression;\n    new(): XPathExpression;\n};\n\n/** The results generated by evaluating an XPath expression within the context of a given node. */\ninterface XPathResult {\n    readonly booleanValue: boolean;\n    readonly invalidIteratorState: boolean;\n    readonly numberValue: number;\n    readonly resultType: number;\n    readonly singleNodeValue: Node | null;\n    readonly snapshotLength: number;\n    readonly stringValue: string;\n    iterateNext(): Node | null;\n    snapshotItem(index: number): Node | null;\n    readonly ANY_TYPE: 0;\n    readonly NUMBER_TYPE: 1;\n    readonly STRING_TYPE: 2;\n    readonly BOOLEAN_TYPE: 3;\n    readonly UNORDERED_NODE_ITERATOR_TYPE: 4;\n    readonly ORDERED_NODE_ITERATOR_TYPE: 5;\n    readonly UNORDERED_NODE_SNAPSHOT_TYPE: 6;\n    readonly ORDERED_NODE_SNAPSHOT_TYPE: 7;\n    readonly ANY_UNORDERED_NODE_TYPE: 8;\n    readonly FIRST_ORDERED_NODE_TYPE: 9;\n}\n\ndeclare var XPathResult: {\n    prototype: XPathResult;\n    new(): XPathResult;\n    readonly ANY_TYPE: 0;\n    readonly NUMBER_TYPE: 1;\n    readonly STRING_TYPE: 2;\n    readonly BOOLEAN_TYPE: 3;\n    readonly UNORDERED_NODE_ITERATOR_TYPE: 4;\n    readonly ORDERED_NODE_ITERATOR_TYPE: 5;\n    readonly UNORDERED_NODE_SNAPSHOT_TYPE: 6;\n    readonly ORDERED_NODE_SNAPSHOT_TYPE: 7;\n    readonly ANY_UNORDERED_NODE_TYPE: 8;\n    readonly FIRST_ORDERED_NODE_TYPE: 9;\n};\n\n/** An XSLTProcessor applies an XSLT stylesheet transformation to an XML document to produce a new XML document as output. It has methods to load the XSLT stylesheet, to manipulate <xsl:param> parameter values, and to apply the transformation to documents. */\ninterface XSLTProcessor {\n    clearParameters(): void;\n    getParameter(namespaceURI: string | null, localName: string): any;\n    importStylesheet(style: Node): void;\n    removeParameter(namespaceURI: string | null, localName: string): void;\n    reset(): void;\n    setParameter(namespaceURI: string | null, localName: string, value: any): void;\n    transformToDocument(source: Node): Document;\n    transformToFragment(source: Node, output: Document): DocumentFragment;\n}\n\ndeclare var XSLTProcessor: {\n    prototype: XSLTProcessor;\n    new(): XSLTProcessor;\n};\n\ninterface Console {\n    assert(condition?: boolean, ...data: any[]): void;\n    clear(): void;\n    count(label?: string): void;\n    countReset(label?: string): void;\n    debug(...data: any[]): void;\n    dir(item?: any, options?: any): void;\n    dirxml(...data: any[]): void;\n    error(...data: any[]): void;\n    group(...data: any[]): void;\n    groupCollapsed(...data: any[]): void;\n    groupEnd(): void;\n    info(...data: any[]): void;\n    log(...data: any[]): void;\n    table(tabularData?: any, properties?: string[]): void;\n    time(label?: string): void;\n    timeEnd(label?: string): void;\n    timeLog(label?: string, ...data: any[]): void;\n    timeStamp(label?: string): void;\n    trace(...data: any[]): void;\n    warn(...data: any[]): void;\n}\n\ndeclare var console: Console;\n\n/** Holds useful CSS-related methods. No object with this interface are implemented: it contains only static methods and therefore is a utilitarian interface. */\ndeclare namespace CSS {\n    function escape(ident: string): string;\n    function supports(property: string, value: string): boolean;\n    function supports(conditionText: string): boolean;\n}\n\ndeclare namespace WebAssembly {\n    interface CompileError extends Error {\n    }\n\n    var CompileError: {\n        prototype: CompileError;\n        new(message?: string): CompileError;\n        (message?: string): CompileError;\n    };\n\n    interface Global {\n        value: any;\n        valueOf(): any;\n    }\n\n    var Global: {\n        prototype: Global;\n        new(descriptor: GlobalDescriptor, v?: any): Global;\n    };\n\n    interface Instance {\n        readonly exports: Exports;\n    }\n\n    var Instance: {\n        prototype: Instance;\n        new(module: Module, importObject?: Imports): Instance;\n    };\n\n    interface LinkError extends Error {\n    }\n\n    var LinkError: {\n        prototype: LinkError;\n        new(message?: string): LinkError;\n        (message?: string): LinkError;\n    };\n\n    interface Memory {\n        readonly buffer: ArrayBuffer;\n        grow(delta: number): number;\n    }\n\n    var Memory: {\n        prototype: Memory;\n        new(descriptor: MemoryDescriptor): Memory;\n    };\n\n    interface Module {\n    }\n\n    var Module: {\n        prototype: Module;\n        new(bytes: BufferSource): Module;\n        customSections(moduleObject: Module, sectionName: string): ArrayBuffer[];\n        exports(moduleObject: Module): ModuleExportDescriptor[];\n        imports(moduleObject: Module): ModuleImportDescriptor[];\n    };\n\n    interface RuntimeError extends Error {\n    }\n\n    var RuntimeError: {\n        prototype: RuntimeError;\n        new(message?: string): RuntimeError;\n        (message?: string): RuntimeError;\n    };\n\n    interface Table {\n        readonly length: number;\n        get(index: number): any;\n        grow(delta: number, value?: any): number;\n        set(index: number, value?: any): void;\n    }\n\n    var Table: {\n        prototype: Table;\n        new(descriptor: TableDescriptor, value?: any): Table;\n    };\n\n    interface GlobalDescriptor {\n        mutable?: boolean;\n        value: ValueType;\n    }\n\n    interface MemoryDescriptor {\n        initial: number;\n        maximum?: number;\n        shared?: boolean;\n    }\n\n    interface ModuleExportDescriptor {\n        kind: ImportExportKind;\n        name: string;\n    }\n\n    interface ModuleImportDescriptor {\n        kind: ImportExportKind;\n        module: string;\n        name: string;\n    }\n\n    interface TableDescriptor {\n        element: TableKind;\n        initial: number;\n        maximum?: number;\n    }\n\n    interface WebAssemblyInstantiatedSource {\n        instance: Instance;\n        module: Module;\n    }\n\n    type ImportExportKind = \"function\" | \"global\" | \"memory\" | \"table\";\n    type TableKind = \"anyfunc\" | \"externref\";\n    type ValueType = \"anyfunc\" | \"externref\" | \"f32\" | \"f64\" | \"i32\" | \"i64\" | \"v128\";\n    type ExportValue = Function | Global | Memory | Table;\n    type Exports = Record<string, ExportValue>;\n    type ImportValue = ExportValue | number;\n    type Imports = Record<string, ModuleImports>;\n    type ModuleImports = Record<string, ImportValue>;\n    function compile(bytes: BufferSource): Promise<Module>;\n    function compileStreaming(source: Response | PromiseLike<Response>): Promise<Module>;\n    function instantiate(bytes: BufferSource, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;\n    function instantiate(moduleObject: Module, importObject?: Imports): Promise<Instance>;\n    function instantiateStreaming(source: Response | PromiseLike<Response>, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;\n    function validate(bytes: BufferSource): boolean;\n}\n\ninterface BlobCallback {\n    (blob: Blob | null): void;\n}\n\ninterface CustomElementConstructor {\n    new (...params: any[]): HTMLElement;\n}\n\ninterface DecodeErrorCallback {\n    (error: DOMException): void;\n}\n\ninterface DecodeSuccessCallback {\n    (decodedData: AudioBuffer): void;\n}\n\ninterface ErrorCallback {\n    (err: DOMException): void;\n}\n\ninterface FileCallback {\n    (file: File): void;\n}\n\ninterface FileSystemEntriesCallback {\n    (entries: FileSystemEntry[]): void;\n}\n\ninterface FileSystemEntryCallback {\n    (entry: FileSystemEntry): void;\n}\n\ninterface FrameRequestCallback {\n    (time: DOMHighResTimeStamp): void;\n}\n\ninterface FunctionStringCallback {\n    (data: string): void;\n}\n\ninterface IdleRequestCallback {\n    (deadline: IdleDeadline): void;\n}\n\ninterface IntersectionObserverCallback {\n    (entries: IntersectionObserverEntry[], observer: IntersectionObserver): void;\n}\n\ninterface LockGrantedCallback {\n    (lock: Lock | null): any;\n}\n\ninterface MediaSessionActionHandler {\n    (details: MediaSessionActionDetails): void;\n}\n\ninterface MutationCallback {\n    (mutations: MutationRecord[], observer: MutationObserver): void;\n}\n\ninterface NotificationPermissionCallback {\n    (permission: NotificationPermission): void;\n}\n\ninterface OnBeforeUnloadEventHandlerNonNull {\n    (event: Event): string | null;\n}\n\ninterface OnErrorEventHandlerNonNull {\n    (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n}\n\ninterface PerformanceObserverCallback {\n    (entries: PerformanceObserverEntryList, observer: PerformanceObserver): void;\n}\n\ninterface PositionCallback {\n    (position: GeolocationPosition): void;\n}\n\ninterface PositionErrorCallback {\n    (positionError: GeolocationPositionError): void;\n}\n\ninterface QueuingStrategySize<T = any> {\n    (chunk: T): number;\n}\n\ninterface RTCPeerConnectionErrorCallback {\n    (error: DOMException): void;\n}\n\ninterface RTCSessionDescriptionCallback {\n    (description: RTCSessionDescriptionInit): void;\n}\n\ninterface RemotePlaybackAvailabilityCallback {\n    (available: boolean): void;\n}\n\ninterface ResizeObserverCallback {\n    (entries: ResizeObserverEntry[], observer: ResizeObserver): void;\n}\n\ninterface TransformerFlushCallback<O> {\n    (controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;\n}\n\ninterface TransformerStartCallback<O> {\n    (controller: TransformStreamDefaultController<O>): any;\n}\n\ninterface TransformerTransformCallback<I, O> {\n    (chunk: I, controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSinkAbortCallback {\n    (reason?: any): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSinkCloseCallback {\n    (): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSinkStartCallback {\n    (controller: WritableStreamDefaultController): any;\n}\n\ninterface UnderlyingSinkWriteCallback<W> {\n    (chunk: W, controller: WritableStreamDefaultController): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSourceCancelCallback {\n    (reason?: any): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSourcePullCallback<R> {\n    (controller: ReadableStreamController<R>): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSourceStartCallback<R> {\n    (controller: ReadableStreamController<R>): any;\n}\n\ninterface VideoFrameRequestCallback {\n    (now: DOMHighResTimeStamp, metadata: VideoFrameCallbackMetadata): void;\n}\n\ninterface VoidFunction {\n    (): void;\n}\n\ninterface HTMLElementTagNameMap {\n    \"a\": HTMLAnchorElement;\n    \"abbr\": HTMLElement;\n    \"address\": HTMLElement;\n    \"area\": HTMLAreaElement;\n    \"article\": HTMLElement;\n    \"aside\": HTMLElement;\n    \"audio\": HTMLAudioElement;\n    \"b\": HTMLElement;\n    \"base\": HTMLBaseElement;\n    \"bdi\": HTMLElement;\n    \"bdo\": HTMLElement;\n    \"blockquote\": HTMLQuoteElement;\n    \"body\": HTMLBodyElement;\n    \"br\": HTMLBRElement;\n    \"button\": HTMLButtonElement;\n    \"canvas\": HTMLCanvasElement;\n    \"caption\": HTMLTableCaptionElement;\n    \"cite\": HTMLElement;\n    \"code\": HTMLElement;\n    \"col\": HTMLTableColElement;\n    \"colgroup\": HTMLTableColElement;\n    \"data\": HTMLDataElement;\n    \"datalist\": HTMLDataListElement;\n    \"dd\": HTMLElement;\n    \"del\": HTMLModElement;\n    \"details\": HTMLDetailsElement;\n    \"dfn\": HTMLElement;\n    \"dialog\": HTMLDialogElement;\n    \"div\": HTMLDivElement;\n    \"dl\": HTMLDListElement;\n    \"dt\": HTMLElement;\n    \"em\": HTMLElement;\n    \"embed\": HTMLEmbedElement;\n    \"fieldset\": HTMLFieldSetElement;\n    \"figcaption\": HTMLElement;\n    \"figure\": HTMLElement;\n    \"footer\": HTMLElement;\n    \"form\": HTMLFormElement;\n    \"h1\": HTMLHeadingElement;\n    \"h2\": HTMLHeadingElement;\n    \"h3\": HTMLHeadingElement;\n    \"h4\": HTMLHeadingElement;\n    \"h5\": HTMLHeadingElement;\n    \"h6\": HTMLHeadingElement;\n    \"head\": HTMLHeadElement;\n    \"header\": HTMLElement;\n    \"hgroup\": HTMLElement;\n    \"hr\": HTMLHRElement;\n    \"html\": HTMLHtmlElement;\n    \"i\": HTMLElement;\n    \"iframe\": HTMLIFrameElement;\n    \"img\": HTMLImageElement;\n    \"input\": HTMLInputElement;\n    \"ins\": HTMLModElement;\n    \"kbd\": HTMLElement;\n    \"label\": HTMLLabelElement;\n    \"legend\": HTMLLegendElement;\n    \"li\": HTMLLIElement;\n    \"link\": HTMLLinkElement;\n    \"main\": HTMLElement;\n    \"map\": HTMLMapElement;\n    \"mark\": HTMLElement;\n    \"menu\": HTMLMenuElement;\n    \"meta\": HTMLMetaElement;\n    \"meter\": HTMLMeterElement;\n    \"nav\": HTMLElement;\n    \"noscript\": HTMLElement;\n    \"object\": HTMLObjectElement;\n    \"ol\": HTMLOListElement;\n    \"optgroup\": HTMLOptGroupElement;\n    \"option\": HTMLOptionElement;\n    \"output\": HTMLOutputElement;\n    \"p\": HTMLParagraphElement;\n    \"picture\": HTMLPictureElement;\n    \"pre\": HTMLPreElement;\n    \"progress\": HTMLProgressElement;\n    \"q\": HTMLQuoteElement;\n    \"rp\": HTMLElement;\n    \"rt\": HTMLElement;\n    \"ruby\": HTMLElement;\n    \"s\": HTMLElement;\n    \"samp\": HTMLElement;\n    \"script\": HTMLScriptElement;\n    \"section\": HTMLElement;\n    \"select\": HTMLSelectElement;\n    \"slot\": HTMLSlotElement;\n    \"small\": HTMLElement;\n    \"source\": HTMLSourceElement;\n    \"span\": HTMLSpanElement;\n    \"strong\": HTMLElement;\n    \"style\": HTMLStyleElement;\n    \"sub\": HTMLElement;\n    \"summary\": HTMLElement;\n    \"sup\": HTMLElement;\n    \"table\": HTMLTableElement;\n    \"tbody\": HTMLTableSectionElement;\n    \"td\": HTMLTableCellElement;\n    \"template\": HTMLTemplateElement;\n    \"textarea\": HTMLTextAreaElement;\n    \"tfoot\": HTMLTableSectionElement;\n    \"th\": HTMLTableCellElement;\n    \"thead\": HTMLTableSectionElement;\n    \"time\": HTMLTimeElement;\n    \"title\": HTMLTitleElement;\n    \"tr\": HTMLTableRowElement;\n    \"track\": HTMLTrackElement;\n    \"u\": HTMLElement;\n    \"ul\": HTMLUListElement;\n    \"var\": HTMLElement;\n    \"video\": HTMLVideoElement;\n    \"wbr\": HTMLElement;\n}\n\ninterface HTMLElementDeprecatedTagNameMap {\n    \"acronym\": HTMLElement;\n    \"applet\": HTMLUnknownElement;\n    \"basefont\": HTMLElement;\n    \"bgsound\": HTMLUnknownElement;\n    \"big\": HTMLElement;\n    \"blink\": HTMLUnknownElement;\n    \"center\": HTMLElement;\n    \"dir\": HTMLDirectoryElement;\n    \"font\": HTMLFontElement;\n    \"frame\": HTMLFrameElement;\n    \"frameset\": HTMLFrameSetElement;\n    \"isindex\": HTMLUnknownElement;\n    \"keygen\": HTMLUnknownElement;\n    \"listing\": HTMLPreElement;\n    \"marquee\": HTMLMarqueeElement;\n    \"menuitem\": HTMLElement;\n    \"multicol\": HTMLUnknownElement;\n    \"nextid\": HTMLUnknownElement;\n    \"nobr\": HTMLElement;\n    \"noembed\": HTMLElement;\n    \"noframes\": HTMLElement;\n    \"param\": HTMLParamElement;\n    \"plaintext\": HTMLElement;\n    \"rb\": HTMLElement;\n    \"rtc\": HTMLElement;\n    \"spacer\": HTMLUnknownElement;\n    \"strike\": HTMLElement;\n    \"tt\": HTMLElement;\n    \"xmp\": HTMLPreElement;\n}\n\ninterface SVGElementTagNameMap {\n    \"a\": SVGAElement;\n    \"animate\": SVGAnimateElement;\n    \"animateMotion\": SVGAnimateMotionElement;\n    \"animateTransform\": SVGAnimateTransformElement;\n    \"circle\": SVGCircleElement;\n    \"clipPath\": SVGClipPathElement;\n    \"defs\": SVGDefsElement;\n    \"desc\": SVGDescElement;\n    \"ellipse\": SVGEllipseElement;\n    \"feBlend\": SVGFEBlendElement;\n    \"feColorMatrix\": SVGFEColorMatrixElement;\n    \"feComponentTransfer\": SVGFEComponentTransferElement;\n    \"feComposite\": SVGFECompositeElement;\n    \"feConvolveMatrix\": SVGFEConvolveMatrixElement;\n    \"feDiffuseLighting\": SVGFEDiffuseLightingElement;\n    \"feDisplacementMap\": SVGFEDisplacementMapElement;\n    \"feDistantLight\": SVGFEDistantLightElement;\n    \"feDropShadow\": SVGFEDropShadowElement;\n    \"feFlood\": SVGFEFloodElement;\n    \"feFuncA\": SVGFEFuncAElement;\n    \"feFuncB\": SVGFEFuncBElement;\n    \"feFuncG\": SVGFEFuncGElement;\n    \"feFuncR\": SVGFEFuncRElement;\n    \"feGaussianBlur\": SVGFEGaussianBlurElement;\n    \"feImage\": SVGFEImageElement;\n    \"feMerge\": SVGFEMergeElement;\n    \"feMergeNode\": SVGFEMergeNodeElement;\n    \"feMorphology\": SVGFEMorphologyElement;\n    \"feOffset\": SVGFEOffsetElement;\n    \"fePointLight\": SVGFEPointLightElement;\n    \"feSpecularLighting\": SVGFESpecularLightingElement;\n    \"feSpotLight\": SVGFESpotLightElement;\n    \"feTile\": SVGFETileElement;\n    \"feTurbulence\": SVGFETurbulenceElement;\n    \"filter\": SVGFilterElement;\n    \"foreignObject\": SVGForeignObjectElement;\n    \"g\": SVGGElement;\n    \"image\": SVGImageElement;\n    \"line\": SVGLineElement;\n    \"linearGradient\": SVGLinearGradientElement;\n    \"marker\": SVGMarkerElement;\n    \"mask\": SVGMaskElement;\n    \"metadata\": SVGMetadataElement;\n    \"mpath\": SVGMPathElement;\n    \"path\": SVGPathElement;\n    \"pattern\": SVGPatternElement;\n    \"polygon\": SVGPolygonElement;\n    \"polyline\": SVGPolylineElement;\n    \"radialGradient\": SVGRadialGradientElement;\n    \"rect\": SVGRectElement;\n    \"script\": SVGScriptElement;\n    \"set\": SVGSetElement;\n    \"stop\": SVGStopElement;\n    \"style\": SVGStyleElement;\n    \"svg\": SVGSVGElement;\n    \"switch\": SVGSwitchElement;\n    \"symbol\": SVGSymbolElement;\n    \"text\": SVGTextElement;\n    \"textPath\": SVGTextPathElement;\n    \"title\": SVGTitleElement;\n    \"tspan\": SVGTSpanElement;\n    \"use\": SVGUseElement;\n    \"view\": SVGViewElement;\n}\n\ninterface MathMLElementTagNameMap {\n    \"annotation\": MathMLElement;\n    \"annotation-xml\": MathMLElement;\n    \"maction\": MathMLElement;\n    \"math\": MathMLElement;\n    \"merror\": MathMLElement;\n    \"mfrac\": MathMLElement;\n    \"mi\": MathMLElement;\n    \"mmultiscripts\": MathMLElement;\n    \"mn\": MathMLElement;\n    \"mo\": MathMLElement;\n    \"mover\": MathMLElement;\n    \"mpadded\": MathMLElement;\n    \"mphantom\": MathMLElement;\n    \"mprescripts\": MathMLElement;\n    \"mroot\": MathMLElement;\n    \"mrow\": MathMLElement;\n    \"ms\": MathMLElement;\n    \"mspace\": MathMLElement;\n    \"msqrt\": MathMLElement;\n    \"mstyle\": MathMLElement;\n    \"msub\": MathMLElement;\n    \"msubsup\": MathMLElement;\n    \"msup\": MathMLElement;\n    \"mtable\": MathMLElement;\n    \"mtd\": MathMLElement;\n    \"mtext\": MathMLElement;\n    \"mtr\": MathMLElement;\n    \"munder\": MathMLElement;\n    \"munderover\": MathMLElement;\n    \"semantics\": MathMLElement;\n}\n\n/** @deprecated Directly use HTMLElementTagNameMap or SVGElementTagNameMap as appropriate, instead. */\ntype ElementTagNameMap = HTMLElementTagNameMap & Pick<SVGElementTagNameMap, Exclude<keyof SVGElementTagNameMap, keyof HTMLElementTagNameMap>>;\n\ndeclare var Audio: {\n    new(src?: string): HTMLAudioElement;\n};\ndeclare var Image: {\n    new(width?: number, height?: number): HTMLImageElement;\n};\ndeclare var Option: {\n    new(text?: string, value?: string, defaultSelected?: boolean, selected?: boolean): HTMLOptionElement;\n};\n/** @deprecated This is a legacy alias of \\`navigator\\`. */\ndeclare var clientInformation: Navigator;\n/** Returns true if the window has been closed, false otherwise. */\ndeclare var closed: boolean;\n/** Defines a new custom element, mapping the given name to the given constructor as an autonomous custom element. */\ndeclare var customElements: CustomElementRegistry;\ndeclare var devicePixelRatio: number;\ndeclare var document: Document;\n/** @deprecated */\ndeclare var event: Event | undefined;\n/** @deprecated */\ndeclare var external: External;\ndeclare var frameElement: Element | null;\ndeclare var frames: WindowProxy;\ndeclare var history: History;\ndeclare var innerHeight: number;\ndeclare var innerWidth: number;\ndeclare var length: number;\ndeclare var location: Location;\n/** Returns true if the location bar is visible; otherwise, returns false. */\ndeclare var locationbar: BarProp;\n/** Returns true if the menu bar is visible; otherwise, returns false. */\ndeclare var menubar: BarProp;\n/** @deprecated */\ndeclare const name: void;\ndeclare var navigator: Navigator;\n/** Available only in secure contexts. */\ndeclare var ondevicemotion: ((this: Window, ev: DeviceMotionEvent) => any) | null;\n/** Available only in secure contexts. */\ndeclare var ondeviceorientation: ((this: Window, ev: DeviceOrientationEvent) => any) | null;\n/** @deprecated */\ndeclare var onorientationchange: ((this: Window, ev: Event) => any) | null;\ndeclare var opener: any;\n/** @deprecated */\ndeclare var orientation: number;\ndeclare var outerHeight: number;\ndeclare var outerWidth: number;\n/** @deprecated This is a legacy alias of \\`scrollX\\`. */\ndeclare var pageXOffset: number;\n/** @deprecated This is a legacy alias of \\`scrollY\\`. */\ndeclare var pageYOffset: number;\n/**\n * Refers to either the parent WindowProxy, or itself.\n *\n * It can rarely be null e.g. for contentWindow of an iframe that is already removed from the parent.\n */\ndeclare var parent: WindowProxy;\n/** Returns true if the personal bar is visible; otherwise, returns false. */\ndeclare var personalbar: BarProp;\ndeclare var screen: Screen;\ndeclare var screenLeft: number;\ndeclare var screenTop: number;\ndeclare var screenX: number;\ndeclare var screenY: number;\ndeclare var scrollX: number;\ndeclare var scrollY: number;\n/** Returns true if the scrollbars are visible; otherwise, returns false. */\ndeclare var scrollbars: BarProp;\ndeclare var self: Window & typeof globalThis;\ndeclare var speechSynthesis: SpeechSynthesis;\n/** @deprecated */\ndeclare var status: string;\n/** Returns true if the status bar is visible; otherwise, returns false. */\ndeclare var statusbar: BarProp;\n/** Returns true if the toolbar is visible; otherwise, returns false. */\ndeclare var toolbar: BarProp;\ndeclare var top: WindowProxy | null;\ndeclare var visualViewport: VisualViewport | null;\ndeclare var window: Window & typeof globalThis;\ndeclare function alert(message?: any): void;\ndeclare function blur(): void;\ndeclare function cancelIdleCallback(handle: number): void;\n/** @deprecated */\ndeclare function captureEvents(): void;\n/** Closes the window. */\ndeclare function close(): void;\ndeclare function confirm(message?: string): boolean;\n/** Moves the focus to the window's browsing context, if any. */\ndeclare function focus(): void;\ndeclare function getComputedStyle(elt: Element, pseudoElt?: string | null): CSSStyleDeclaration;\ndeclare function getSelection(): Selection | null;\ndeclare function matchMedia(query: string): MediaQueryList;\ndeclare function moveBy(x: number, y: number): void;\ndeclare function moveTo(x: number, y: number): void;\ndeclare function open(url?: string | URL, target?: string, features?: string): WindowProxy | null;\n/**\n * Posts a message to the given window. Messages can be structured objects, e.g. nested objects and arrays, can contain JavaScript values (strings, numbers, Date objects, etc), and can contain certain data objects such as File Blob, FileList, and ArrayBuffer objects.\n *\n * Objects listed in the transfer member of options are transferred, not just cloned, meaning that they are no longer usable on the sending side.\n *\n * A target origin can be specified using the targetOrigin member of options. If not provided, it defaults to \"/\". This default restricts the message to same-origin targets only.\n *\n * If the origin of the target window doesn't match the given target origin, the message is discarded, to avoid information leakage. To send the message to the target regardless of origin, set the target origin to \"*\".\n *\n * Throws a \"DataCloneError\" DOMException if transfer array contains duplicate objects or if message could not be cloned.\n */\ndeclare function postMessage(message: any, targetOrigin: string, transfer?: Transferable[]): void;\ndeclare function postMessage(message: any, options?: WindowPostMessageOptions): void;\ndeclare function print(): void;\ndeclare function prompt(message?: string, _default?: string): string | null;\n/** @deprecated */\ndeclare function releaseEvents(): void;\ndeclare function requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number;\ndeclare function resizeBy(x: number, y: number): void;\ndeclare function resizeTo(width: number, height: number): void;\ndeclare function scroll(options?: ScrollToOptions): void;\ndeclare function scroll(x: number, y: number): void;\ndeclare function scrollBy(options?: ScrollToOptions): void;\ndeclare function scrollBy(x: number, y: number): void;\ndeclare function scrollTo(options?: ScrollToOptions): void;\ndeclare function scrollTo(x: number, y: number): void;\n/** Cancels the document load. */\ndeclare function stop(): void;\ndeclare function toString(): string;\n/** Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. */\ndeclare function dispatchEvent(event: Event): boolean;\ndeclare function cancelAnimationFrame(handle: number): void;\ndeclare function requestAnimationFrame(callback: FrameRequestCallback): number;\n/**\n * Fires when the user aborts the download.\n * @param ev The event.\n */\ndeclare var onabort: ((this: Window, ev: UIEvent) => any) | null;\ndeclare var onanimationcancel: ((this: Window, ev: AnimationEvent) => any) | null;\ndeclare var onanimationend: ((this: Window, ev: AnimationEvent) => any) | null;\ndeclare var onanimationiteration: ((this: Window, ev: AnimationEvent) => any) | null;\ndeclare var onanimationstart: ((this: Window, ev: AnimationEvent) => any) | null;\ndeclare var onauxclick: ((this: Window, ev: MouseEvent) => any) | null;\ndeclare var onbeforeinput: ((this: Window, ev: InputEvent) => any) | null;\n/**\n * Fires when the object loses the input focus.\n * @param ev The focus event.\n */\ndeclare var onblur: ((this: Window, ev: FocusEvent) => any) | null;\ndeclare var oncancel: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when playback is possible, but would require further buffering.\n * @param ev The event.\n */\ndeclare var oncanplay: ((this: Window, ev: Event) => any) | null;\ndeclare var oncanplaythrough: ((this: Window, ev: Event) => any) | null;\n/**\n * Fires when the contents of the object or selection have changed.\n * @param ev The event.\n */\ndeclare var onchange: ((this: Window, ev: Event) => any) | null;\n/**\n * Fires when the user clicks the left mouse button on the object\n * @param ev The mouse event.\n */\ndeclare var onclick: ((this: Window, ev: MouseEvent) => any) | null;\ndeclare var onclose: ((this: Window, ev: Event) => any) | null;\n/**\n * Fires when the user clicks the right mouse button in the client area, opening the context menu.\n * @param ev The mouse event.\n */\ndeclare var oncontextmenu: ((this: Window, ev: MouseEvent) => any) | null;\ndeclare var oncopy: ((this: Window, ev: ClipboardEvent) => any) | null;\ndeclare var oncuechange: ((this: Window, ev: Event) => any) | null;\ndeclare var oncut: ((this: Window, ev: ClipboardEvent) => any) | null;\n/**\n * Fires when the user double-clicks the object.\n * @param ev The mouse event.\n */\ndeclare var ondblclick: ((this: Window, ev: MouseEvent) => any) | null;\n/**\n * Fires on the source object continuously during a drag operation.\n * @param ev The event.\n */\ndeclare var ondrag: ((this: Window, ev: DragEvent) => any) | null;\n/**\n * Fires on the source object when the user releases the mouse at the close of a drag operation.\n * @param ev The event.\n */\ndeclare var ondragend: ((this: Window, ev: DragEvent) => any) | null;\n/**\n * Fires on the target element when the user drags the object to a valid drop target.\n * @param ev The drag event.\n */\ndeclare var ondragenter: ((this: Window, ev: DragEvent) => any) | null;\n/**\n * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.\n * @param ev The drag event.\n */\ndeclare var ondragleave: ((this: Window, ev: DragEvent) => any) | null;\n/**\n * Fires on the target element continuously while the user drags the object over a valid drop target.\n * @param ev The event.\n */\ndeclare var ondragover: ((this: Window, ev: DragEvent) => any) | null;\n/**\n * Fires on the source object when the user starts to drag a text selection or selected object.\n * @param ev The event.\n */\ndeclare var ondragstart: ((this: Window, ev: DragEvent) => any) | null;\ndeclare var ondrop: ((this: Window, ev: DragEvent) => any) | null;\n/**\n * Occurs when the duration attribute is updated.\n * @param ev The event.\n */\ndeclare var ondurationchange: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when the media element is reset to its initial state.\n * @param ev The event.\n */\ndeclare var onemptied: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when the end of playback is reached.\n * @param ev The event\n */\ndeclare var onended: ((this: Window, ev: Event) => any) | null;\n/**\n * Fires when an error occurs during object loading.\n * @param ev The event.\n */\ndeclare var onerror: OnErrorEventHandler;\n/**\n * Fires when the object receives focus.\n * @param ev The event.\n */\ndeclare var onfocus: ((this: Window, ev: FocusEvent) => any) | null;\ndeclare var onformdata: ((this: Window, ev: FormDataEvent) => any) | null;\ndeclare var ongotpointercapture: ((this: Window, ev: PointerEvent) => any) | null;\ndeclare var oninput: ((this: Window, ev: Event) => any) | null;\ndeclare var oninvalid: ((this: Window, ev: Event) => any) | null;\n/**\n * Fires when the user presses a key.\n * @param ev The keyboard event\n */\ndeclare var onkeydown: ((this: Window, ev: KeyboardEvent) => any) | null;\n/**\n * Fires when the user presses an alphanumeric key.\n * @param ev The event.\n * @deprecated\n */\ndeclare var onkeypress: ((this: Window, ev: KeyboardEvent) => any) | null;\n/**\n * Fires when the user releases a key.\n * @param ev The keyboard event\n */\ndeclare var onkeyup: ((this: Window, ev: KeyboardEvent) => any) | null;\n/**\n * Fires immediately after the browser loads the object.\n * @param ev The event.\n */\ndeclare var onload: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when media data is loaded at the current playback position.\n * @param ev The event.\n */\ndeclare var onloadeddata: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when the duration and dimensions of the media have been determined.\n * @param ev The event.\n */\ndeclare var onloadedmetadata: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when Internet Explorer begins looking for media data.\n * @param ev The event.\n */\ndeclare var onloadstart: ((this: Window, ev: Event) => any) | null;\ndeclare var onlostpointercapture: ((this: Window, ev: PointerEvent) => any) | null;\n/**\n * Fires when the user clicks the object with either mouse button.\n * @param ev The mouse event.\n */\ndeclare var onmousedown: ((this: Window, ev: MouseEvent) => any) | null;\ndeclare var onmouseenter: ((this: Window, ev: MouseEvent) => any) | null;\ndeclare var onmouseleave: ((this: Window, ev: MouseEvent) => any) | null;\n/**\n * Fires when the user moves the mouse over the object.\n * @param ev The mouse event.\n */\ndeclare var onmousemove: ((this: Window, ev: MouseEvent) => any) | null;\n/**\n * Fires when the user moves the mouse pointer outside the boundaries of the object.\n * @param ev The mouse event.\n */\ndeclare var onmouseout: ((this: Window, ev: MouseEvent) => any) | null;\n/**\n * Fires when the user moves the mouse pointer into the object.\n * @param ev The mouse event.\n */\ndeclare var onmouseover: ((this: Window, ev: MouseEvent) => any) | null;\n/**\n * Fires when the user releases a mouse button while the mouse is over the object.\n * @param ev The mouse event.\n */\ndeclare var onmouseup: ((this: Window, ev: MouseEvent) => any) | null;\ndeclare var onpaste: ((this: Window, ev: ClipboardEvent) => any) | null;\n/**\n * Occurs when playback is paused.\n * @param ev The event.\n */\ndeclare var onpause: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when the play method is requested.\n * @param ev The event.\n */\ndeclare var onplay: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when the audio or video has started playing.\n * @param ev The event.\n */\ndeclare var onplaying: ((this: Window, ev: Event) => any) | null;\ndeclare var onpointercancel: ((this: Window, ev: PointerEvent) => any) | null;\ndeclare var onpointerdown: ((this: Window, ev: PointerEvent) => any) | null;\ndeclare var onpointerenter: ((this: Window, ev: PointerEvent) => any) | null;\ndeclare var onpointerleave: ((this: Window, ev: PointerEvent) => any) | null;\ndeclare var onpointermove: ((this: Window, ev: PointerEvent) => any) | null;\ndeclare var onpointerout: ((this: Window, ev: PointerEvent) => any) | null;\ndeclare var onpointerover: ((this: Window, ev: PointerEvent) => any) | null;\ndeclare var onpointerup: ((this: Window, ev: PointerEvent) => any) | null;\n/**\n * Occurs to indicate progress while downloading media data.\n * @param ev The event.\n */\ndeclare var onprogress: ((this: Window, ev: ProgressEvent) => any) | null;\n/**\n * Occurs when the playback rate is increased or decreased.\n * @param ev The event.\n */\ndeclare var onratechange: ((this: Window, ev: Event) => any) | null;\n/**\n * Fires when the user resets a form.\n * @param ev The event.\n */\ndeclare var onreset: ((this: Window, ev: Event) => any) | null;\ndeclare var onresize: ((this: Window, ev: UIEvent) => any) | null;\n/**\n * Fires when the user repositions the scroll box in the scroll bar on the object.\n * @param ev The event.\n */\ndeclare var onscroll: ((this: Window, ev: Event) => any) | null;\ndeclare var onsecuritypolicyviolation: ((this: Window, ev: SecurityPolicyViolationEvent) => any) | null;\n/**\n * Occurs when the seek operation ends.\n * @param ev The event.\n */\ndeclare var onseeked: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when the current playback position is moved.\n * @param ev The event.\n */\ndeclare var onseeking: ((this: Window, ev: Event) => any) | null;\n/**\n * Fires when the current selection changes.\n * @param ev The event.\n */\ndeclare var onselect: ((this: Window, ev: Event) => any) | null;\ndeclare var onselectionchange: ((this: Window, ev: Event) => any) | null;\ndeclare var onselectstart: ((this: Window, ev: Event) => any) | null;\ndeclare var onslotchange: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when the download has stopped.\n * @param ev The event.\n */\ndeclare var onstalled: ((this: Window, ev: Event) => any) | null;\ndeclare var onsubmit: ((this: Window, ev: SubmitEvent) => any) | null;\n/**\n * Occurs if the load operation has been intentionally halted.\n * @param ev The event.\n */\ndeclare var onsuspend: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs to indicate the current playback position.\n * @param ev The event.\n */\ndeclare var ontimeupdate: ((this: Window, ev: Event) => any) | null;\ndeclare var ontoggle: ((this: Window, ev: Event) => any) | null;\ndeclare var ontouchcancel: ((this: Window, ev: TouchEvent) => any) | null | undefined;\ndeclare var ontouchend: ((this: Window, ev: TouchEvent) => any) | null | undefined;\ndeclare var ontouchmove: ((this: Window, ev: TouchEvent) => any) | null | undefined;\ndeclare var ontouchstart: ((this: Window, ev: TouchEvent) => any) | null | undefined;\ndeclare var ontransitioncancel: ((this: Window, ev: TransitionEvent) => any) | null;\ndeclare var ontransitionend: ((this: Window, ev: TransitionEvent) => any) | null;\ndeclare var ontransitionrun: ((this: Window, ev: TransitionEvent) => any) | null;\ndeclare var ontransitionstart: ((this: Window, ev: TransitionEvent) => any) | null;\n/**\n * Occurs when the volume is changed, or playback is muted or unmuted.\n * @param ev The event.\n */\ndeclare var onvolumechange: ((this: Window, ev: Event) => any) | null;\n/**\n * Occurs when playback stops because the next frame of a video resource is not available.\n * @param ev The event.\n */\ndeclare var onwaiting: ((this: Window, ev: Event) => any) | null;\n/** @deprecated This is a legacy alias of \\`onanimationend\\`. */\ndeclare var onwebkitanimationend: ((this: Window, ev: Event) => any) | null;\n/** @deprecated This is a legacy alias of \\`onanimationiteration\\`. */\ndeclare var onwebkitanimationiteration: ((this: Window, ev: Event) => any) | null;\n/** @deprecated This is a legacy alias of \\`onanimationstart\\`. */\ndeclare var onwebkitanimationstart: ((this: Window, ev: Event) => any) | null;\n/** @deprecated This is a legacy alias of \\`ontransitionend\\`. */\ndeclare var onwebkittransitionend: ((this: Window, ev: Event) => any) | null;\ndeclare var onwheel: ((this: Window, ev: WheelEvent) => any) | null;\ndeclare var onafterprint: ((this: Window, ev: Event) => any) | null;\ndeclare var onbeforeprint: ((this: Window, ev: Event) => any) | null;\ndeclare var onbeforeunload: ((this: Window, ev: BeforeUnloadEvent) => any) | null;\ndeclare var ongamepadconnected: ((this: Window, ev: GamepadEvent) => any) | null;\ndeclare var ongamepaddisconnected: ((this: Window, ev: GamepadEvent) => any) | null;\ndeclare var onhashchange: ((this: Window, ev: HashChangeEvent) => any) | null;\ndeclare var onlanguagechange: ((this: Window, ev: Event) => any) | null;\ndeclare var onmessage: ((this: Window, ev: MessageEvent) => any) | null;\ndeclare var onmessageerror: ((this: Window, ev: MessageEvent) => any) | null;\ndeclare var onoffline: ((this: Window, ev: Event) => any) | null;\ndeclare var ononline: ((this: Window, ev: Event) => any) | null;\ndeclare var onpagehide: ((this: Window, ev: PageTransitionEvent) => any) | null;\ndeclare var onpageshow: ((this: Window, ev: PageTransitionEvent) => any) | null;\ndeclare var onpopstate: ((this: Window, ev: PopStateEvent) => any) | null;\ndeclare var onrejectionhandled: ((this: Window, ev: PromiseRejectionEvent) => any) | null;\ndeclare var onstorage: ((this: Window, ev: StorageEvent) => any) | null;\ndeclare var onunhandledrejection: ((this: Window, ev: PromiseRejectionEvent) => any) | null;\ndeclare var onunload: ((this: Window, ev: Event) => any) | null;\ndeclare var localStorage: Storage;\n/** Available only in secure contexts. */\ndeclare var caches: CacheStorage;\ndeclare var crossOriginIsolated: boolean;\ndeclare var crypto: Crypto;\ndeclare var indexedDB: IDBFactory;\ndeclare var isSecureContext: boolean;\ndeclare var origin: string;\ndeclare var performance: Performance;\ndeclare function atob(data: string): string;\ndeclare function btoa(data: string): string;\ndeclare function clearInterval(id: number | undefined): void;\ndeclare function clearTimeout(id: number | undefined): void;\ndeclare function createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap>;\ndeclare function createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;\ndeclare function fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\ndeclare function queueMicrotask(callback: VoidFunction): void;\ndeclare function reportError(e: any): void;\ndeclare function setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;\ndeclare function setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;\ndeclare function structuredClone(value: any, options?: StructuredSerializeOptions): any;\ndeclare var sessionStorage: Storage;\ndeclare function addEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\ndeclare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\ndeclare function removeEventListener<K extends keyof WindowEventMap>(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\ndeclare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\ntype AlgorithmIdentifier = Algorithm | string;\ntype BigInteger = Uint8Array;\ntype BinaryData = ArrayBuffer | ArrayBufferView;\ntype BlobPart = BufferSource | Blob | string;\ntype BodyInit = ReadableStream | XMLHttpRequestBodyInit;\ntype BufferSource = ArrayBufferView | ArrayBuffer;\ntype COSEAlgorithmIdentifier = number;\ntype CSSNumberish = number;\ntype CanvasImageSource = HTMLOrSVGImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | OffscreenCanvas;\ntype ClipboardItemData = Promise<string | Blob>;\ntype ClipboardItems = ClipboardItem[];\ntype ConstrainBoolean = boolean | ConstrainBooleanParameters;\ntype ConstrainDOMString = string | string[] | ConstrainDOMStringParameters;\ntype ConstrainDouble = number | ConstrainDoubleRange;\ntype ConstrainULong = number | ConstrainULongRange;\ntype DOMHighResTimeStamp = number;\ntype EpochTimeStamp = number;\ntype EventListenerOrEventListenerObject = EventListener | EventListenerObject;\ntype Float32List = Float32Array | GLfloat[];\ntype FormDataEntryValue = File | string;\ntype GLbitfield = number;\ntype GLboolean = boolean;\ntype GLclampf = number;\ntype GLenum = number;\ntype GLfloat = number;\ntype GLint = number;\ntype GLint64 = number;\ntype GLintptr = number;\ntype GLsizei = number;\ntype GLsizeiptr = number;\ntype GLuint = number;\ntype GLuint64 = number;\ntype HTMLOrSVGImageElement = HTMLImageElement | SVGImageElement;\ntype HTMLOrSVGScriptElement = HTMLScriptElement | SVGScriptElement;\ntype HashAlgorithmIdentifier = AlgorithmIdentifier;\ntype HeadersInit = [string, string][] | Record<string, string> | Headers;\ntype IDBValidKey = number | string | Date | BufferSource | IDBValidKey[];\ntype ImageBitmapSource = CanvasImageSource | Blob | ImageData;\ntype Int32List = Int32Array | GLint[];\ntype LineAndPositionSetting = number | AutoKeyword;\ntype MediaProvider = MediaStream | MediaSource | Blob;\ntype MessageEventSource = WindowProxy | MessagePort | ServiceWorker;\ntype MutationRecordType = \"attributes\" | \"characterData\" | \"childList\";\ntype NamedCurve = string;\ntype OffscreenRenderingContext = OffscreenCanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext;\ntype OnBeforeUnloadEventHandler = OnBeforeUnloadEventHandlerNonNull | null;\ntype OnErrorEventHandler = OnErrorEventHandlerNonNull | null;\ntype PerformanceEntryList = PerformanceEntry[];\ntype ReadableStreamController<T> = ReadableStreamDefaultController<T> | ReadableByteStreamController;\ntype ReadableStreamReadResult<T> = ReadableStreamReadValueResult<T> | ReadableStreamReadDoneResult<T>;\ntype ReadableStreamReader<T> = ReadableStreamDefaultReader<T> | ReadableStreamBYOBReader;\ntype RenderingContext = CanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext;\ntype RequestInfo = Request | string;\ntype TexImageSource = ImageBitmap | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | OffscreenCanvas;\ntype TimerHandler = string | Function;\ntype Transferable = OffscreenCanvas | ImageBitmap | MessagePort | ReadableStream | WritableStream | TransformStream | ArrayBuffer;\ntype Uint32List = Uint32Array | GLuint[];\ntype VibratePattern = number | number[];\ntype WindowProxy = Window;\ntype XMLHttpRequestBodyInit = Blob | BufferSource | FormData | URLSearchParams | string;\ntype AlignSetting = \"center\" | \"end\" | \"left\" | \"right\" | \"start\";\ntype AnimationPlayState = \"finished\" | \"idle\" | \"paused\" | \"running\";\ntype AnimationReplaceState = \"active\" | \"persisted\" | \"removed\";\ntype AppendMode = \"segments\" | \"sequence\";\ntype AttestationConveyancePreference = \"direct\" | \"enterprise\" | \"indirect\" | \"none\";\ntype AudioContextLatencyCategory = \"balanced\" | \"interactive\" | \"playback\";\ntype AudioContextState = \"closed\" | \"running\" | \"suspended\";\ntype AuthenticatorAttachment = \"cross-platform\" | \"platform\";\ntype AuthenticatorTransport = \"ble\" | \"hybrid\" | \"internal\" | \"nfc\" | \"usb\";\ntype AutoKeyword = \"auto\";\ntype AutomationRate = \"a-rate\" | \"k-rate\";\ntype BinaryType = \"arraybuffer\" | \"blob\";\ntype BiquadFilterType = \"allpass\" | \"bandpass\" | \"highpass\" | \"highshelf\" | \"lowpass\" | \"lowshelf\" | \"notch\" | \"peaking\";\ntype CanPlayTypeResult = \"\" | \"maybe\" | \"probably\";\ntype CanvasDirection = \"inherit\" | \"ltr\" | \"rtl\";\ntype CanvasFillRule = \"evenodd\" | \"nonzero\";\ntype CanvasFontKerning = \"auto\" | \"none\" | \"normal\";\ntype CanvasFontStretch = \"condensed\" | \"expanded\" | \"extra-condensed\" | \"extra-expanded\" | \"normal\" | \"semi-condensed\" | \"semi-expanded\" | \"ultra-condensed\" | \"ultra-expanded\";\ntype CanvasFontVariantCaps = \"all-petite-caps\" | \"all-small-caps\" | \"normal\" | \"petite-caps\" | \"small-caps\" | \"titling-caps\" | \"unicase\";\ntype CanvasLineCap = \"butt\" | \"round\" | \"square\";\ntype CanvasLineJoin = \"bevel\" | \"miter\" | \"round\";\ntype CanvasTextAlign = \"center\" | \"end\" | \"left\" | \"right\" | \"start\";\ntype CanvasTextBaseline = \"alphabetic\" | \"bottom\" | \"hanging\" | \"ideographic\" | \"middle\" | \"top\";\ntype CanvasTextRendering = \"auto\" | \"geometricPrecision\" | \"optimizeLegibility\" | \"optimizeSpeed\";\ntype ChannelCountMode = \"clamped-max\" | \"explicit\" | \"max\";\ntype ChannelInterpretation = \"discrete\" | \"speakers\";\ntype ClientTypes = \"all\" | \"sharedworker\" | \"window\" | \"worker\";\ntype ColorGamut = \"p3\" | \"rec2020\" | \"srgb\";\ntype ColorSpaceConversion = \"default\" | \"none\";\ntype CompositeOperation = \"accumulate\" | \"add\" | \"replace\";\ntype CompositeOperationOrAuto = \"accumulate\" | \"add\" | \"auto\" | \"replace\";\ntype CredentialMediationRequirement = \"optional\" | \"required\" | \"silent\";\ntype DOMParserSupportedType = \"application/xhtml+xml\" | \"application/xml\" | \"image/svg+xml\" | \"text/html\" | \"text/xml\";\ntype DirectionSetting = \"\" | \"lr\" | \"rl\";\ntype DisplayCaptureSurfaceType = \"browser\" | \"monitor\" | \"window\";\ntype DistanceModelType = \"exponential\" | \"inverse\" | \"linear\";\ntype DocumentReadyState = \"complete\" | \"interactive\" | \"loading\";\ntype DocumentVisibilityState = \"hidden\" | \"visible\";\ntype EndOfStreamError = \"decode\" | \"network\";\ntype EndingType = \"native\" | \"transparent\";\ntype FileSystemHandleKind = \"directory\" | \"file\";\ntype FillMode = \"auto\" | \"backwards\" | \"both\" | \"forwards\" | \"none\";\ntype FontDisplay = \"auto\" | \"block\" | \"fallback\" | \"optional\" | \"swap\";\ntype FontFaceLoadStatus = \"error\" | \"loaded\" | \"loading\" | \"unloaded\";\ntype FontFaceSetLoadStatus = \"loaded\" | \"loading\";\ntype FullscreenNavigationUI = \"auto\" | \"hide\" | \"show\";\ntype GamepadHapticActuatorType = \"vibration\";\ntype GamepadMappingType = \"\" | \"standard\" | \"xr-standard\";\ntype GlobalCompositeOperation = \"color\" | \"color-burn\" | \"color-dodge\" | \"copy\" | \"darken\" | \"destination-atop\" | \"destination-in\" | \"destination-out\" | \"destination-over\" | \"difference\" | \"exclusion\" | \"hard-light\" | \"hue\" | \"lighten\" | \"lighter\" | \"luminosity\" | \"multiply\" | \"overlay\" | \"saturation\" | \"screen\" | \"soft-light\" | \"source-atop\" | \"source-in\" | \"source-out\" | \"source-over\" | \"xor\";\ntype HdrMetadataType = \"smpteSt2086\" | \"smpteSt2094-10\" | \"smpteSt2094-40\";\ntype IDBCursorDirection = \"next\" | \"nextunique\" | \"prev\" | \"prevunique\";\ntype IDBRequestReadyState = \"done\" | \"pending\";\ntype IDBTransactionDurability = \"default\" | \"relaxed\" | \"strict\";\ntype IDBTransactionMode = \"readonly\" | \"readwrite\" | \"versionchange\";\ntype ImageOrientation = \"flipY\" | \"from-image\";\ntype ImageSmoothingQuality = \"high\" | \"low\" | \"medium\";\ntype InsertPosition = \"afterbegin\" | \"afterend\" | \"beforebegin\" | \"beforeend\";\ntype IterationCompositeOperation = \"accumulate\" | \"replace\";\ntype KeyFormat = \"jwk\" | \"pkcs8\" | \"raw\" | \"spki\";\ntype KeyType = \"private\" | \"public\" | \"secret\";\ntype KeyUsage = \"decrypt\" | \"deriveBits\" | \"deriveKey\" | \"encrypt\" | \"sign\" | \"unwrapKey\" | \"verify\" | \"wrapKey\";\ntype LineAlignSetting = \"center\" | \"end\" | \"start\";\ntype LockMode = \"exclusive\" | \"shared\";\ntype MIDIPortConnectionState = \"closed\" | \"open\" | \"pending\";\ntype MIDIPortDeviceState = \"connected\" | \"disconnected\";\ntype MIDIPortType = \"input\" | \"output\";\ntype MediaDecodingType = \"file\" | \"media-source\" | \"webrtc\";\ntype MediaDeviceKind = \"audioinput\" | \"audiooutput\" | \"videoinput\";\ntype MediaEncodingType = \"record\" | \"webrtc\";\ntype MediaKeyMessageType = \"individualization-request\" | \"license-release\" | \"license-renewal\" | \"license-request\";\ntype MediaKeySessionClosedReason = \"closed-by-application\" | \"hardware-context-reset\" | \"internal-error\" | \"release-acknowledged\" | \"resource-evicted\";\ntype MediaKeySessionType = \"persistent-license\" | \"temporary\";\ntype MediaKeyStatus = \"expired\" | \"internal-error\" | \"output-downscaled\" | \"output-restricted\" | \"released\" | \"status-pending\" | \"usable\" | \"usable-in-future\";\ntype MediaKeysRequirement = \"not-allowed\" | \"optional\" | \"required\";\ntype MediaSessionAction = \"nexttrack\" | \"pause\" | \"play\" | \"previoustrack\" | \"seekbackward\" | \"seekforward\" | \"seekto\" | \"skipad\" | \"stop\";\ntype MediaSessionPlaybackState = \"none\" | \"paused\" | \"playing\";\ntype MediaStreamTrackState = \"ended\" | \"live\";\ntype NavigationTimingType = \"back_forward\" | \"navigate\" | \"prerender\" | \"reload\";\ntype NotificationDirection = \"auto\" | \"ltr\" | \"rtl\";\ntype NotificationPermission = \"default\" | \"denied\" | \"granted\";\ntype OffscreenRenderingContextId = \"2d\" | \"bitmaprenderer\" | \"webgl\" | \"webgl2\" | \"webgpu\";\ntype OrientationLockType = \"any\" | \"landscape\" | \"landscape-primary\" | \"landscape-secondary\" | \"natural\" | \"portrait\" | \"portrait-primary\" | \"portrait-secondary\";\ntype OrientationType = \"landscape-primary\" | \"landscape-secondary\" | \"portrait-primary\" | \"portrait-secondary\";\ntype OscillatorType = \"custom\" | \"sawtooth\" | \"sine\" | \"square\" | \"triangle\";\ntype OverSampleType = \"2x\" | \"4x\" | \"none\";\ntype PanningModelType = \"HRTF\" | \"equalpower\";\ntype PaymentComplete = \"fail\" | \"success\" | \"unknown\";\ntype PermissionName = \"geolocation\" | \"notifications\" | \"persistent-storage\" | \"push\" | \"screen-wake-lock\" | \"xr-spatial-tracking\";\ntype PermissionState = \"denied\" | \"granted\" | \"prompt\";\ntype PlaybackDirection = \"alternate\" | \"alternate-reverse\" | \"normal\" | \"reverse\";\ntype PositionAlignSetting = \"auto\" | \"center\" | \"line-left\" | \"line-right\";\ntype PredefinedColorSpace = \"display-p3\" | \"srgb\";\ntype PremultiplyAlpha = \"default\" | \"none\" | \"premultiply\";\ntype PresentationStyle = \"attachment\" | \"inline\" | \"unspecified\";\ntype PublicKeyCredentialType = \"public-key\";\ntype PushEncryptionKeyName = \"auth\" | \"p256dh\";\ntype RTCBundlePolicy = \"balanced\" | \"max-bundle\" | \"max-compat\";\ntype RTCDataChannelState = \"closed\" | \"closing\" | \"connecting\" | \"open\";\ntype RTCDegradationPreference = \"balanced\" | \"maintain-framerate\" | \"maintain-resolution\";\ntype RTCDtlsTransportState = \"closed\" | \"connected\" | \"connecting\" | \"failed\" | \"new\";\ntype RTCEncodedVideoFrameType = \"delta\" | \"empty\" | \"key\";\ntype RTCErrorDetailType = \"data-channel-failure\" | \"dtls-failure\" | \"fingerprint-failure\" | \"hardware-encoder-error\" | \"hardware-encoder-not-available\" | \"sctp-failure\" | \"sdp-syntax-error\";\ntype RTCIceCandidateType = \"host\" | \"prflx\" | \"relay\" | \"srflx\";\ntype RTCIceComponent = \"rtcp\" | \"rtp\";\ntype RTCIceConnectionState = \"checking\" | \"closed\" | \"completed\" | \"connected\" | \"disconnected\" | \"failed\" | \"new\";\ntype RTCIceGathererState = \"complete\" | \"gathering\" | \"new\";\ntype RTCIceGatheringState = \"complete\" | \"gathering\" | \"new\";\ntype RTCIceProtocol = \"tcp\" | \"udp\";\ntype RTCIceTcpCandidateType = \"active\" | \"passive\" | \"so\";\ntype RTCIceTransportPolicy = \"all\" | \"relay\";\ntype RTCIceTransportState = \"checking\" | \"closed\" | \"completed\" | \"connected\" | \"disconnected\" | \"failed\" | \"new\";\ntype RTCPeerConnectionState = \"closed\" | \"connected\" | \"connecting\" | \"disconnected\" | \"failed\" | \"new\";\ntype RTCPriorityType = \"high\" | \"low\" | \"medium\" | \"very-low\";\ntype RTCRtcpMuxPolicy = \"require\";\ntype RTCRtpTransceiverDirection = \"inactive\" | \"recvonly\" | \"sendonly\" | \"sendrecv\" | \"stopped\";\ntype RTCSctpTransportState = \"closed\" | \"connected\" | \"connecting\";\ntype RTCSdpType = \"answer\" | \"offer\" | \"pranswer\" | \"rollback\";\ntype RTCSignalingState = \"closed\" | \"have-local-offer\" | \"have-local-pranswer\" | \"have-remote-offer\" | \"have-remote-pranswer\" | \"stable\";\ntype RTCStatsIceCandidatePairState = \"failed\" | \"frozen\" | \"in-progress\" | \"inprogress\" | \"succeeded\" | \"waiting\";\ntype RTCStatsType = \"candidate-pair\" | \"certificate\" | \"codec\" | \"data-channel\" | \"inbound-rtp\" | \"local-candidate\" | \"media-source\" | \"outbound-rtp\" | \"peer-connection\" | \"remote-candidate\" | \"remote-inbound-rtp\" | \"remote-outbound-rtp\" | \"track\" | \"transport\";\ntype ReadableStreamReaderMode = \"byob\";\ntype ReadableStreamType = \"bytes\";\ntype ReadyState = \"closed\" | \"ended\" | \"open\";\ntype RecordingState = \"inactive\" | \"paused\" | \"recording\";\ntype ReferrerPolicy = \"\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\";\ntype RemotePlaybackState = \"connected\" | \"connecting\" | \"disconnected\";\ntype RequestCache = \"default\" | \"force-cache\" | \"no-cache\" | \"no-store\" | \"only-if-cached\" | \"reload\";\ntype RequestCredentials = \"include\" | \"omit\" | \"same-origin\";\ntype RequestDestination = \"\" | \"audio\" | \"audioworklet\" | \"document\" | \"embed\" | \"font\" | \"frame\" | \"iframe\" | \"image\" | \"manifest\" | \"object\" | \"paintworklet\" | \"report\" | \"script\" | \"sharedworker\" | \"style\" | \"track\" | \"video\" | \"worker\" | \"xslt\";\ntype RequestMode = \"cors\" | \"navigate\" | \"no-cors\" | \"same-origin\";\ntype RequestRedirect = \"error\" | \"follow\" | \"manual\";\ntype ResidentKeyRequirement = \"discouraged\" | \"preferred\" | \"required\";\ntype ResizeObserverBoxOptions = \"border-box\" | \"content-box\" | \"device-pixel-content-box\";\ntype ResizeQuality = \"high\" | \"low\" | \"medium\" | \"pixelated\";\ntype ResponseType = \"basic\" | \"cors\" | \"default\" | \"error\" | \"opaque\" | \"opaqueredirect\";\ntype ScrollBehavior = \"auto\" | \"smooth\";\ntype ScrollLogicalPosition = \"center\" | \"end\" | \"nearest\" | \"start\";\ntype ScrollRestoration = \"auto\" | \"manual\";\ntype ScrollSetting = \"\" | \"up\";\ntype SecurityPolicyViolationEventDisposition = \"enforce\" | \"report\";\ntype SelectionMode = \"end\" | \"preserve\" | \"select\" | \"start\";\ntype ServiceWorkerState = \"activated\" | \"activating\" | \"installed\" | \"installing\" | \"parsed\" | \"redundant\";\ntype ServiceWorkerUpdateViaCache = \"all\" | \"imports\" | \"none\";\ntype ShadowRootMode = \"closed\" | \"open\";\ntype SlotAssignmentMode = \"manual\" | \"named\";\ntype SpeechSynthesisErrorCode = \"audio-busy\" | \"audio-hardware\" | \"canceled\" | \"interrupted\" | \"invalid-argument\" | \"language-unavailable\" | \"network\" | \"not-allowed\" | \"synthesis-failed\" | \"synthesis-unavailable\" | \"text-too-long\" | \"voice-unavailable\";\ntype TextTrackKind = \"captions\" | \"chapters\" | \"descriptions\" | \"metadata\" | \"subtitles\";\ntype TextTrackMode = \"disabled\" | \"hidden\" | \"showing\";\ntype TouchType = \"direct\" | \"stylus\";\ntype TransferFunction = \"hlg\" | \"pq\" | \"srgb\";\ntype UserVerificationRequirement = \"discouraged\" | \"preferred\" | \"required\";\ntype VideoColorPrimaries = \"bt470bg\" | \"bt709\" | \"smpte170m\";\ntype VideoFacingModeEnum = \"environment\" | \"left\" | \"right\" | \"user\";\ntype VideoMatrixCoefficients = \"bt470bg\" | \"bt709\" | \"rgb\" | \"smpte170m\";\ntype VideoTransferCharacteristics = \"bt709\" | \"iec61966-2-1\" | \"smpte170m\";\ntype WebGLPowerPreference = \"default\" | \"high-performance\" | \"low-power\";\ntype WorkerType = \"classic\" | \"module\";\ntype XMLHttpRequestResponseType = \"\" | \"arraybuffer\" | \"blob\" | \"document\" | \"json\" | \"text\";\n`;$i[\"lib.dom.iterable.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/////////////////////////////\n/// Window Iterable APIs\n/////////////////////////////\n\ninterface AudioParam {\n    setValueCurveAtTime(values: Iterable<number>, startTime: number, duration: number): AudioParam;\n}\n\ninterface AudioParamMap extends ReadonlyMap<string, AudioParam> {\n}\n\ninterface BaseAudioContext {\n    createIIRFilter(feedforward: Iterable<number>, feedback: Iterable<number>): IIRFilterNode;\n    createPeriodicWave(real: Iterable<number>, imag: Iterable<number>, constraints?: PeriodicWaveConstraints): PeriodicWave;\n}\n\ninterface CSSKeyframesRule {\n    [Symbol.iterator](): IterableIterator<CSSKeyframeRule>;\n}\n\ninterface CSSRuleList {\n    [Symbol.iterator](): IterableIterator<CSSRule>;\n}\n\ninterface CSSStyleDeclaration {\n    [Symbol.iterator](): IterableIterator<string>;\n}\n\ninterface Cache {\n    addAll(requests: Iterable<RequestInfo>): Promise<void>;\n}\n\ninterface CanvasPath {\n    roundRect(x: number, y: number, w: number, h: number, radii?: number | DOMPointInit | Iterable<number | DOMPointInit>): void;\n}\n\ninterface CanvasPathDrawingStyles {\n    setLineDash(segments: Iterable<number>): void;\n}\n\ninterface DOMRectList {\n    [Symbol.iterator](): IterableIterator<DOMRect>;\n}\n\ninterface DOMStringList {\n    [Symbol.iterator](): IterableIterator<string>;\n}\n\ninterface DOMTokenList {\n    [Symbol.iterator](): IterableIterator<string>;\n    entries(): IterableIterator<[number, string]>;\n    keys(): IterableIterator<number>;\n    values(): IterableIterator<string>;\n}\n\ninterface DataTransferItemList {\n    [Symbol.iterator](): IterableIterator<DataTransferItem>;\n}\n\ninterface EventCounts extends ReadonlyMap<string, number> {\n}\n\ninterface FileList {\n    [Symbol.iterator](): IterableIterator<File>;\n}\n\ninterface FontFaceSet extends Set<FontFace> {\n}\n\ninterface FormData {\n    [Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>;\n    /** Returns an array of key, value pairs for every entry in the list. */\n    entries(): IterableIterator<[string, FormDataEntryValue]>;\n    /** Returns a list of keys in the list. */\n    keys(): IterableIterator<string>;\n    /** Returns a list of values in the list. */\n    values(): IterableIterator<FormDataEntryValue>;\n}\n\ninterface HTMLAllCollection {\n    [Symbol.iterator](): IterableIterator<Element>;\n}\n\ninterface HTMLCollectionBase {\n    [Symbol.iterator](): IterableIterator<Element>;\n}\n\ninterface HTMLCollectionOf<T extends Element> {\n    [Symbol.iterator](): IterableIterator<T>;\n}\n\ninterface HTMLFormElement {\n    [Symbol.iterator](): IterableIterator<Element>;\n}\n\ninterface HTMLSelectElement {\n    [Symbol.iterator](): IterableIterator<HTMLOptionElement>;\n}\n\ninterface Headers {\n    [Symbol.iterator](): IterableIterator<[string, string]>;\n    /** Returns an iterator allowing to go through all key/value pairs contained in this object. */\n    entries(): IterableIterator<[string, string]>;\n    /** Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */\n    keys(): IterableIterator<string>;\n    /** Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */\n    values(): IterableIterator<string>;\n}\n\ninterface IDBDatabase {\n    /** Returns a new transaction with the given mode (\"readonly\" or \"readwrite\") and scope which can be a single object store name or an array of names. */\n    transaction(storeNames: string | Iterable<string>, mode?: IDBTransactionMode, options?: IDBTransactionOptions): IDBTransaction;\n}\n\ninterface IDBObjectStore {\n    /**\n     * Creates a new index in store with the given name, keyPath and options and returns a new IDBIndex. If the keyPath and options define constraints that cannot be satisfied with the data already in store the upgrade transaction will abort with a \"ConstraintError\" DOMException.\n     *\n     * Throws an \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    createIndex(name: string, keyPath: string | Iterable<string>, options?: IDBIndexParameters): IDBIndex;\n}\n\ninterface MIDIInputMap extends ReadonlyMap<string, MIDIInput> {\n}\n\ninterface MIDIOutput {\n    send(data: Iterable<number>, timestamp?: DOMHighResTimeStamp): void;\n}\n\ninterface MIDIOutputMap extends ReadonlyMap<string, MIDIOutput> {\n}\n\ninterface MediaKeyStatusMap {\n    [Symbol.iterator](): IterableIterator<[BufferSource, MediaKeyStatus]>;\n    entries(): IterableIterator<[BufferSource, MediaKeyStatus]>;\n    keys(): IterableIterator<BufferSource>;\n    values(): IterableIterator<MediaKeyStatus>;\n}\n\ninterface MediaList {\n    [Symbol.iterator](): IterableIterator<string>;\n}\n\ninterface MessageEvent<T = any> {\n    /** @deprecated */\n    initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: Iterable<MessagePort>): void;\n}\n\ninterface MimeTypeArray {\n    [Symbol.iterator](): IterableIterator<MimeType>;\n}\n\ninterface NamedNodeMap {\n    [Symbol.iterator](): IterableIterator<Attr>;\n}\n\ninterface Navigator {\n    /** Available only in secure contexts. */\n    requestMediaKeySystemAccess(keySystem: string, supportedConfigurations: Iterable<MediaKeySystemConfiguration>): Promise<MediaKeySystemAccess>;\n    vibrate(pattern: Iterable<number>): boolean;\n}\n\ninterface NodeList {\n    [Symbol.iterator](): IterableIterator<Node>;\n    /** Returns an array of key, value pairs for every entry in the list. */\n    entries(): IterableIterator<[number, Node]>;\n    /** Returns an list of keys in the list. */\n    keys(): IterableIterator<number>;\n    /** Returns an list of values in the list. */\n    values(): IterableIterator<Node>;\n}\n\ninterface NodeListOf<TNode extends Node> {\n    [Symbol.iterator](): IterableIterator<TNode>;\n    /** Returns an array of key, value pairs for every entry in the list. */\n    entries(): IterableIterator<[number, TNode]>;\n    /** Returns an list of keys in the list. */\n    keys(): IterableIterator<number>;\n    /** Returns an list of values in the list. */\n    values(): IterableIterator<TNode>;\n}\n\ninterface Plugin {\n    [Symbol.iterator](): IterableIterator<MimeType>;\n}\n\ninterface PluginArray {\n    [Symbol.iterator](): IterableIterator<Plugin>;\n}\n\ninterface RTCRtpTransceiver {\n    setCodecPreferences(codecs: Iterable<RTCRtpCodecCapability>): void;\n}\n\ninterface RTCStatsReport extends ReadonlyMap<string, any> {\n}\n\ninterface SVGLengthList {\n    [Symbol.iterator](): IterableIterator<SVGLength>;\n}\n\ninterface SVGNumberList {\n    [Symbol.iterator](): IterableIterator<SVGNumber>;\n}\n\ninterface SVGPointList {\n    [Symbol.iterator](): IterableIterator<DOMPoint>;\n}\n\ninterface SVGStringList {\n    [Symbol.iterator](): IterableIterator<string>;\n}\n\ninterface SVGTransformList {\n    [Symbol.iterator](): IterableIterator<SVGTransform>;\n}\n\ninterface SourceBufferList {\n    [Symbol.iterator](): IterableIterator<SourceBuffer>;\n}\n\ninterface SpeechRecognitionResult {\n    [Symbol.iterator](): IterableIterator<SpeechRecognitionAlternative>;\n}\n\ninterface SpeechRecognitionResultList {\n    [Symbol.iterator](): IterableIterator<SpeechRecognitionResult>;\n}\n\ninterface StyleSheetList {\n    [Symbol.iterator](): IterableIterator<CSSStyleSheet>;\n}\n\ninterface SubtleCrypto {\n    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;\n    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKeyPair>;\n    generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKey>;\n    generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKeyPair | CryptoKey>;\n    importKey(format: \"jwk\", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKey>;\n    importKey(format: Exclude<KeyFormat, \"jwk\">, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;\n    unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;\n}\n\ninterface TextTrackCueList {\n    [Symbol.iterator](): IterableIterator<TextTrackCue>;\n}\n\ninterface TextTrackList {\n    [Symbol.iterator](): IterableIterator<TextTrack>;\n}\n\ninterface TouchList {\n    [Symbol.iterator](): IterableIterator<Touch>;\n}\n\ninterface URLSearchParams {\n    [Symbol.iterator](): IterableIterator<[string, string]>;\n    /** Returns an array of key, value pairs for every entry in the search params. */\n    entries(): IterableIterator<[string, string]>;\n    /** Returns a list of keys in the search params. */\n    keys(): IterableIterator<string>;\n    /** Returns a list of values in the search params. */\n    values(): IterableIterator<string>;\n}\n\ninterface WEBGL_draw_buffers {\n    drawBuffersWEBGL(buffers: Iterable<GLenum>): void;\n}\n\ninterface WEBGL_multi_draw {\n    multiDrawArraysInstancedWEBGL(mode: GLenum, firstsList: Int32Array | Iterable<GLint>, firstsOffset: GLuint, countsList: Int32Array | Iterable<GLsizei>, countsOffset: GLuint, instanceCountsList: Int32Array | Iterable<GLsizei>, instanceCountsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawArraysWEBGL(mode: GLenum, firstsList: Int32Array | Iterable<GLint>, firstsOffset: GLuint, countsList: Int32Array | Iterable<GLsizei>, countsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawElementsInstancedWEBGL(mode: GLenum, countsList: Int32Array | Iterable<GLsizei>, countsOffset: GLuint, type: GLenum, offsetsList: Int32Array | Iterable<GLsizei>, offsetsOffset: GLuint, instanceCountsList: Int32Array | Iterable<GLsizei>, instanceCountsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawElementsWEBGL(mode: GLenum, countsList: Int32Array | Iterable<GLsizei>, countsOffset: GLuint, type: GLenum, offsetsList: Int32Array | Iterable<GLsizei>, offsetsOffset: GLuint, drawcount: GLsizei): void;\n}\n\ninterface WebGL2RenderingContextBase {\n    clearBufferfv(buffer: GLenum, drawbuffer: GLint, values: Iterable<GLfloat>, srcOffset?: GLuint): void;\n    clearBufferiv(buffer: GLenum, drawbuffer: GLint, values: Iterable<GLint>, srcOffset?: GLuint): void;\n    clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Iterable<GLuint>, srcOffset?: GLuint): void;\n    drawBuffers(buffers: Iterable<GLenum>): void;\n    getActiveUniforms(program: WebGLProgram, uniformIndices: Iterable<GLuint>, pname: GLenum): any;\n    getUniformIndices(program: WebGLProgram, uniformNames: Iterable<string>): Iterable<GLuint> | null;\n    invalidateFramebuffer(target: GLenum, attachments: Iterable<GLenum>): void;\n    invalidateSubFramebuffer(target: GLenum, attachments: Iterable<GLenum>, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    transformFeedbackVaryings(program: WebGLProgram, varyings: Iterable<string>, bufferMode: GLenum): void;\n    uniform1uiv(location: WebGLUniformLocation | null, data: Iterable<GLuint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2uiv(location: WebGLUniformLocation | null, data: Iterable<GLuint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3uiv(location: WebGLUniformLocation | null, data: Iterable<GLuint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4uiv(location: WebGLUniformLocation | null, data: Iterable<GLuint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    vertexAttribI4iv(index: GLuint, values: Iterable<GLint>): void;\n    vertexAttribI4uiv(index: GLuint, values: Iterable<GLuint>): void;\n}\n\ninterface WebGL2RenderingContextOverloads {\n    uniform1fv(location: WebGLUniformLocation | null, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform1iv(location: WebGLUniformLocation | null, data: Iterable<GLint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2fv(location: WebGLUniformLocation | null, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2iv(location: WebGLUniformLocation | null, data: Iterable<GLint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3fv(location: WebGLUniformLocation | null, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3iv(location: WebGLUniformLocation | null, data: Iterable<GLint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4fv(location: WebGLUniformLocation | null, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4iv(location: WebGLUniformLocation | null, data: Iterable<GLint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n}\n\ninterface WebGLRenderingContextBase {\n    vertexAttrib1fv(index: GLuint, values: Iterable<GLfloat>): void;\n    vertexAttrib2fv(index: GLuint, values: Iterable<GLfloat>): void;\n    vertexAttrib3fv(index: GLuint, values: Iterable<GLfloat>): void;\n    vertexAttrib4fv(index: GLuint, values: Iterable<GLfloat>): void;\n}\n\ninterface WebGLRenderingContextOverloads {\n    uniform1fv(location: WebGLUniformLocation | null, v: Iterable<GLfloat>): void;\n    uniform1iv(location: WebGLUniformLocation | null, v: Iterable<GLint>): void;\n    uniform2fv(location: WebGLUniformLocation | null, v: Iterable<GLfloat>): void;\n    uniform2iv(location: WebGLUniformLocation | null, v: Iterable<GLint>): void;\n    uniform3fv(location: WebGLUniformLocation | null, v: Iterable<GLfloat>): void;\n    uniform3iv(location: WebGLUniformLocation | null, v: Iterable<GLint>): void;\n    uniform4fv(location: WebGLUniformLocation | null, v: Iterable<GLfloat>): void;\n    uniform4iv(location: WebGLUniformLocation | null, v: Iterable<GLint>): void;\n    uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Iterable<GLfloat>): void;\n    uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Iterable<GLfloat>): void;\n    uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Iterable<GLfloat>): void;\n}\n`;$i[\"lib.es2015.collection.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface Map<K, V> {\n\n    clear(): void;\n    /**\n     * @returns true if an element in the Map existed and has been removed, or false if the element does not exist.\n     */\n    delete(key: K): boolean;\n    /**\n     * Executes a provided function once per each key/value pair in the Map, in insertion order.\n     */\n    forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;\n    /**\n     * Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.\n     * @returns Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.\n     */\n    get(key: K): V | undefined;\n    /**\n     * @returns boolean indicating whether an element with the specified key exists or not.\n     */\n    has(key: K): boolean;\n    /**\n     * Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated.\n     */\n    set(key: K, value: V): this;\n    /**\n     * @returns the number of elements in the Map.\n     */\n    readonly size: number;\n}\n\ninterface MapConstructor {\n    new(): Map<any, any>;\n    new <K, V>(entries?: readonly (readonly [K, V])[] | null): Map<K, V>;\n    readonly prototype: Map<any, any>;\n}\ndeclare var Map: MapConstructor;\n\ninterface ReadonlyMap<K, V> {\n    forEach(callbackfn: (value: V, key: K, map: ReadonlyMap<K, V>) => void, thisArg?: any): void;\n    get(key: K): V | undefined;\n    has(key: K): boolean;\n    readonly size: number;\n}\n\ninterface WeakMap<K extends object, V> {\n    /**\n     * Removes the specified element from the WeakMap.\n     * @returns true if the element was successfully removed, or false if it was not present.\n     */\n    delete(key: K): boolean;\n    /**\n     * @returns a specified element.\n     */\n    get(key: K): V | undefined;\n    /**\n     * @returns a boolean indicating whether an element with the specified key exists or not.\n     */\n    has(key: K): boolean;\n    /**\n     * Adds a new element with a specified key and value.\n     * @param key Must be an object.\n     */\n    set(key: K, value: V): this;\n}\n\ninterface WeakMapConstructor {\n    new <K extends object = object, V = any>(entries?: readonly [K, V][] | null): WeakMap<K, V>;\n    readonly prototype: WeakMap<object, any>;\n}\ndeclare var WeakMap: WeakMapConstructor;\n\ninterface Set<T> {\n    /**\n     * Appends a new element with a specified value to the end of the Set.\n     */\n    add(value: T): this;\n\n    clear(): void;\n    /**\n     * Removes a specified value from the Set.\n     * @returns Returns true if an element in the Set existed and has been removed, or false if the element does not exist.\n     */\n    delete(value: T): boolean;\n    /**\n     * Executes a provided function once per each value in the Set object, in insertion order.\n     */\n    forEach(callbackfn: (value: T, value2: T, set: Set<T>) => void, thisArg?: any): void;\n    /**\n     * @returns a boolean indicating whether an element with the specified value exists in the Set or not.\n     */\n    has(value: T): boolean;\n    /**\n     * @returns the number of (unique) elements in Set.\n     */\n    readonly size: number;\n}\n\ninterface SetConstructor {\n    new <T = any>(values?: readonly T[] | null): Set<T>;\n    readonly prototype: Set<any>;\n}\ndeclare var Set: SetConstructor;\n\ninterface ReadonlySet<T> {\n    forEach(callbackfn: (value: T, value2: T, set: ReadonlySet<T>) => void, thisArg?: any): void;\n    has(value: T): boolean;\n    readonly size: number;\n}\n\ninterface WeakSet<T extends object> {\n    /**\n     * Appends a new object to the end of the WeakSet.\n     */\n    add(value: T): this;\n    /**\n     * Removes the specified element from the WeakSet.\n     * @returns Returns true if the element existed and has been removed, or false if the element does not exist.\n     */\n    delete(value: T): boolean;\n    /**\n     * @returns a boolean indicating whether an object exists in the WeakSet or not.\n     */\n    has(value: T): boolean;\n}\n\ninterface WeakSetConstructor {\n    new <T extends object = object>(values?: readonly T[] | null): WeakSet<T>;\n    readonly prototype: WeakSet<object>;\n}\ndeclare var WeakSet: WeakSetConstructor;\n`;$i[\"lib.es2015.core.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface Array<T> {\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find<S extends T>(predicate: (value: T, index: number, obj: T[]) => value is S, thisArg?: any): S | undefined;\n    find(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): number;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: T, start?: number, end?: number): this;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n}\n\ninterface ArrayConstructor {\n    /**\n     * Creates an array from an array-like object.\n     * @param arrayLike An array-like object to convert to an array.\n     */\n    from<T>(arrayLike: ArrayLike<T>): T[];\n\n    /**\n     * Creates an array from an iterable object.\n     * @param arrayLike An array-like object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of<T>(...items: T[]): T[];\n}\n\ninterface DateConstructor {\n    new (value: number | string | Date): Date;\n}\n\ninterface Function {\n    /**\n     * Returns the name of the function. Function names are read-only and can not be changed.\n     */\n    readonly name: string;\n}\n\ninterface Math {\n    /**\n     * Returns the number of leading zero bits in the 32-bit binary representation of a number.\n     * @param x A numeric expression.\n     */\n    clz32(x: number): number;\n\n    /**\n     * Returns the result of 32-bit multiplication of two numbers.\n     * @param x First number\n     * @param y Second number\n     */\n    imul(x: number, y: number): number;\n\n    /**\n     * Returns the sign of the x, indicating whether x is positive, negative or zero.\n     * @param x The numeric expression to test\n     */\n    sign(x: number): number;\n\n    /**\n     * Returns the base 10 logarithm of a number.\n     * @param x A numeric expression.\n     */\n    log10(x: number): number;\n\n    /**\n     * Returns the base 2 logarithm of a number.\n     * @param x A numeric expression.\n     */\n    log2(x: number): number;\n\n    /**\n     * Returns the natural logarithm of 1 + x.\n     * @param x A numeric expression.\n     */\n    log1p(x: number): number;\n\n    /**\n     * Returns the result of (e^x - 1), which is an implementation-dependent approximation to\n     * subtracting 1 from the exponential function of x (e raised to the power of x, where e\n     * is the base of the natural logarithms).\n     * @param x A numeric expression.\n     */\n    expm1(x: number): number;\n\n    /**\n     * Returns the hyperbolic cosine of a number.\n     * @param x A numeric expression that contains an angle measured in radians.\n     */\n    cosh(x: number): number;\n\n    /**\n     * Returns the hyperbolic sine of a number.\n     * @param x A numeric expression that contains an angle measured in radians.\n     */\n    sinh(x: number): number;\n\n    /**\n     * Returns the hyperbolic tangent of a number.\n     * @param x A numeric expression that contains an angle measured in radians.\n     */\n    tanh(x: number): number;\n\n    /**\n     * Returns the inverse hyperbolic cosine of a number.\n     * @param x A numeric expression that contains an angle measured in radians.\n     */\n    acosh(x: number): number;\n\n    /**\n     * Returns the inverse hyperbolic sine of a number.\n     * @param x A numeric expression that contains an angle measured in radians.\n     */\n    asinh(x: number): number;\n\n    /**\n     * Returns the inverse hyperbolic tangent of a number.\n     * @param x A numeric expression that contains an angle measured in radians.\n     */\n    atanh(x: number): number;\n\n    /**\n     * Returns the square root of the sum of squares of its arguments.\n     * @param values Values to compute the square root for.\n     *     If no arguments are passed, the result is +0.\n     *     If there is only one argument, the result is the absolute value.\n     *     If any argument is +Infinity or -Infinity, the result is +Infinity.\n     *     If any argument is NaN, the result is NaN.\n     *     If all arguments are either +0 or \\u22120, the result is +0.\n     */\n    hypot(...values: number[]): number;\n\n    /**\n     * Returns the integral part of the a numeric expression, x, removing any fractional digits.\n     * If x is already an integer, the result is x.\n     * @param x A numeric expression.\n     */\n    trunc(x: number): number;\n\n    /**\n     * Returns the nearest single precision float representation of a number.\n     * @param x A numeric expression.\n     */\n    fround(x: number): number;\n\n    /**\n     * Returns an implementation-dependent approximation to the cube root of number.\n     * @param x A numeric expression.\n     */\n    cbrt(x: number): number;\n}\n\ninterface NumberConstructor {\n    /**\n     * The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1\n     * that is representable as a Number value, which is approximately:\n     * 2.2204460492503130808472633361816 x 10\\u200D\\u2212\\u200D16.\n     */\n    readonly EPSILON: number;\n\n    /**\n     * Returns true if passed value is finite.\n     * Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a\n     * number. Only finite values of the type number, result in true.\n     * @param number A numeric value.\n     */\n    isFinite(number: unknown): boolean;\n\n    /**\n     * Returns true if the value passed is an integer, false otherwise.\n     * @param number A numeric value.\n     */\n    isInteger(number: unknown): boolean;\n\n    /**\n     * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a\n     * number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter\n     * to a number. Only values of the type number, that are also NaN, result in true.\n     * @param number A numeric value.\n     */\n    isNaN(number: unknown): boolean;\n\n    /**\n     * Returns true if the value passed is a safe integer.\n     * @param number A numeric value.\n     */\n    isSafeInteger(number: unknown): boolean;\n\n    /**\n     * The value of the largest integer n such that n and n + 1 are both exactly representable as\n     * a Number value.\n     * The value of Number.MAX_SAFE_INTEGER is 9007199254740991 2^53 \\u2212 1.\n     */\n    readonly MAX_SAFE_INTEGER: number;\n\n    /**\n     * The value of the smallest integer n such that n and n \\u2212 1 are both exactly representable as\n     * a Number value.\n     * The value of Number.MIN_SAFE_INTEGER is \\u22129007199254740991 (\\u2212(2^53 \\u2212 1)).\n     */\n    readonly MIN_SAFE_INTEGER: number;\n\n    /**\n     * Converts a string to a floating-point number.\n     * @param string A string that contains a floating-point number.\n     */\n    parseFloat(string: string): number;\n\n    /**\n     * Converts A string to an integer.\n     * @param string A string to convert into a number.\n     * @param radix A value between 2 and 36 that specifies the base of the number in \\`string\\`.\n     * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.\n     * All other strings are considered decimal.\n     */\n    parseInt(string: string, radix?: number): number;\n}\n\ninterface ObjectConstructor {\n    /**\n     * Copy the values of all of the enumerable own properties from one or more source objects to a\n     * target object. Returns the target object.\n     * @param target The target object to copy to.\n     * @param source The source object from which to copy properties.\n     */\n    assign<T extends {}, U>(target: T, source: U): T & U;\n\n    /**\n     * Copy the values of all of the enumerable own properties from one or more source objects to a\n     * target object. Returns the target object.\n     * @param target The target object to copy to.\n     * @param source1 The first source object from which to copy properties.\n     * @param source2 The second source object from which to copy properties.\n     */\n    assign<T extends {}, U, V>(target: T, source1: U, source2: V): T & U & V;\n\n    /**\n     * Copy the values of all of the enumerable own properties from one or more source objects to a\n     * target object. Returns the target object.\n     * @param target The target object to copy to.\n     * @param source1 The first source object from which to copy properties.\n     * @param source2 The second source object from which to copy properties.\n     * @param source3 The third source object from which to copy properties.\n     */\n    assign<T extends {}, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\n\n    /**\n     * Copy the values of all of the enumerable own properties from one or more source objects to a\n     * target object. Returns the target object.\n     * @param target The target object to copy to.\n     * @param sources One or more source objects from which to copy properties\n     */\n    assign(target: object, ...sources: any[]): any;\n\n    /**\n     * Returns an array of all symbol properties found directly on object o.\n     * @param o Object to retrieve the symbols from.\n     */\n    getOwnPropertySymbols(o: any): symbol[];\n\n    /**\n     * Returns the names of the enumerable string properties and methods of an object.\n     * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n     */\n    keys(o: {}): string[];\n\n    /**\n     * Returns true if the values are the same value, false otherwise.\n     * @param value1 The first value.\n     * @param value2 The second value.\n     */\n    is(value1: any, value2: any): boolean;\n\n    /**\n     * Sets the prototype of a specified object o to object proto or null. Returns the object o.\n     * @param o The object to change its prototype.\n     * @param proto The value of the new prototype or null.\n     */\n    setPrototypeOf(o: any, proto: object | null): any;\n}\n\ninterface ReadonlyArray<T> {\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find<S extends T>(predicate: (value: T, index: number, obj: readonly T[]) => value is S, thisArg?: any): S | undefined;\n    find(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): T | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): number;\n}\n\ninterface RegExp {\n    /**\n     * Returns a string indicating the flags of the regular expression in question. This field is read-only.\n     * The characters in this string are sequenced and concatenated in the following order:\n     *\n     *    - \"g\" for global\n     *    - \"i\" for ignoreCase\n     *    - \"m\" for multiline\n     *    - \"u\" for unicode\n     *    - \"y\" for sticky\n     *\n     * If no flags are set, the value is the empty string.\n     */\n    readonly flags: string;\n\n    /**\n     * Returns a Boolean value indicating the state of the sticky flag (y) used with a regular\n     * expression. Default is false. Read-only.\n     */\n    readonly sticky: boolean;\n\n    /**\n     * Returns a Boolean value indicating the state of the Unicode flag (u) used with a regular\n     * expression. Default is false. Read-only.\n     */\n    readonly unicode: boolean;\n}\n\ninterface RegExpConstructor {\n    new (pattern: RegExp | string, flags?: string): RegExp;\n    (pattern: RegExp | string, flags?: string): RegExp;\n}\n\ninterface String {\n    /**\n     * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\n     * value of the UTF-16 encoded code point starting at the string element at position pos in\n     * the String resulting from converting this object to a String.\n     * If there is no element at that position, the result is undefined.\n     * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.\n     */\n    codePointAt(pos: number): number | undefined;\n\n    /**\n     * Returns true if searchString appears as a substring of the result of converting this\n     * object to a String, at one or more positions that are\n     * greater than or equal to position; otherwise, returns false.\n     * @param searchString search string\n     * @param position If position is undefined, 0 is assumed, so as to search all of the String.\n     */\n    includes(searchString: string, position?: number): boolean;\n\n    /**\n     * Returns true if the sequence of elements of searchString converted to a String is the\n     * same as the corresponding elements of this object (converted to a String) starting at\n     * endPosition \\u2013 length(this). Otherwise returns false.\n     */\n    endsWith(searchString: string, endPosition?: number): boolean;\n\n    /**\n     * Returns the String value result of normalizing the string into the normalization form\n     * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n     * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n     * is \"NFC\"\n     */\n    normalize(form: \"NFC\" | \"NFD\" | \"NFKC\" | \"NFKD\"): string;\n\n    /**\n     * Returns the String value result of normalizing the string into the normalization form\n     * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.\n     * @param form Applicable values: \"NFC\", \"NFD\", \"NFKC\", or \"NFKD\", If not specified default\n     * is \"NFC\"\n     */\n    normalize(form?: string): string;\n\n    /**\n     * Returns a String value that is made from count copies appended together. If count is 0,\n     * the empty string is returned.\n     * @param count number of copies to append\n     */\n    repeat(count: number): string;\n\n    /**\n     * Returns true if the sequence of elements of searchString converted to a String is the\n     * same as the corresponding elements of this object (converted to a String) starting at\n     * position. Otherwise returns false.\n     */\n    startsWith(searchString: string, position?: number): boolean;\n\n    /**\n     * Returns an \\`<a>\\` HTML anchor element and sets the name attribute to the text value\n     * @deprecated A legacy feature for browser compatibility\n     * @param name\n     */\n    anchor(name: string): string;\n\n    /**\n     * Returns a \\`<big>\\` HTML element\n     * @deprecated A legacy feature for browser compatibility\n     */\n    big(): string;\n\n    /**\n     * Returns a \\`<blink>\\` HTML element\n     * @deprecated A legacy feature for browser compatibility\n     */\n    blink(): string;\n\n    /**\n     * Returns a \\`<b>\\` HTML element\n     * @deprecated A legacy feature for browser compatibility\n     */\n    bold(): string;\n\n    /**\n     * Returns a \\`<tt>\\` HTML element\n     * @deprecated A legacy feature for browser compatibility\n     */\n    fixed(): string;\n\n    /**\n     * Returns a \\`<font>\\` HTML element and sets the color attribute value\n     * @deprecated A legacy feature for browser compatibility\n     */\n    fontcolor(color: string): string;\n\n    /**\n     * Returns a \\`<font>\\` HTML element and sets the size attribute value\n     * @deprecated A legacy feature for browser compatibility\n     */\n    fontsize(size: number): string;\n\n    /**\n     * Returns a \\`<font>\\` HTML element and sets the size attribute value\n     * @deprecated A legacy feature for browser compatibility\n     */\n    fontsize(size: string): string;\n\n    /**\n     * Returns an \\`<i>\\` HTML element\n     * @deprecated A legacy feature for browser compatibility\n     */\n    italics(): string;\n\n    /**\n     * Returns an \\`<a>\\` HTML element and sets the href attribute value\n     * @deprecated A legacy feature for browser compatibility\n     */\n    link(url: string): string;\n\n    /**\n     * Returns a \\`<small>\\` HTML element\n     * @deprecated A legacy feature for browser compatibility\n     */\n    small(): string;\n\n    /**\n     * Returns a \\`<strike>\\` HTML element\n     * @deprecated A legacy feature for browser compatibility\n     */\n    strike(): string;\n\n    /**\n     * Returns a \\`<sub>\\` HTML element\n     * @deprecated A legacy feature for browser compatibility\n     */\n    sub(): string;\n\n    /**\n     * Returns a \\`<sup>\\` HTML element\n     * @deprecated A legacy feature for browser compatibility\n     */\n    sup(): string;\n}\n\ninterface StringConstructor {\n    /**\n     * Return the String value whose elements are, in order, the elements in the List elements.\n     * If length is 0, the empty string is returned.\n     */\n    fromCodePoint(...codePoints: number[]): string;\n\n    /**\n     * String.raw is usually used as a tag function of a Tagged Template String. When called as\n     * such, the first argument will be a well formed template call site object and the rest\n     * parameter will contain the substitution values. It can also be called directly, for example,\n     * to interleave strings and values from your own tag function, and in this case the only thing\n     * it needs from the first argument is the raw property.\n     * @param template A well-formed template string call site representation.\n     * @param substitutions A set of substitution values.\n     */\n    raw(template: { raw: readonly string[] | ArrayLike<string>}, ...substitutions: any[]): string;\n}\n`;$i[\"lib.es2015.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es5\" />\n/// <reference lib=\"es2015.core\" />\n/// <reference lib=\"es2015.collection\" />\n/// <reference lib=\"es2015.iterable\" />\n/// <reference lib=\"es2015.generator\" />\n/// <reference lib=\"es2015.promise\" />\n/// <reference lib=\"es2015.proxy\" />\n/// <reference lib=\"es2015.reflect\" />\n/// <reference lib=\"es2015.symbol\" />\n/// <reference lib=\"es2015.symbol.wellknown\" />\n`;$i[\"lib.es2015.generator.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015.iterable\" />\n\ninterface Generator<T = unknown, TReturn = any, TNext = unknown> extends Iterator<T, TReturn, TNext> {\n    // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.\n    next(...args: [] | [TNext]): IteratorResult<T, TReturn>;\n    return(value: TReturn): IteratorResult<T, TReturn>;\n    throw(e: any): IteratorResult<T, TReturn>;\n    [Symbol.iterator](): Generator<T, TReturn, TNext>;\n}\n\ninterface GeneratorFunction {\n    /**\n     * Creates a new Generator object.\n     * @param args A list of arguments the function accepts.\n     */\n    new (...args: any[]): Generator;\n    /**\n     * Creates a new Generator object.\n     * @param args A list of arguments the function accepts.\n     */\n    (...args: any[]): Generator;\n    /**\n     * The length of the arguments.\n     */\n    readonly length: number;\n    /**\n     * Returns the name of the function.\n     */\n    readonly name: string;\n    /**\n     * A reference to the prototype.\n     */\n    readonly prototype: Generator;\n}\n\ninterface GeneratorFunctionConstructor {\n    /**\n     * Creates a new Generator function.\n     * @param args A list of arguments the function accepts.\n     */\n    new (...args: string[]): GeneratorFunction;\n    /**\n     * Creates a new Generator function.\n     * @param args A list of arguments the function accepts.\n     */\n    (...args: string[]): GeneratorFunction;\n    /**\n     * The length of the arguments.\n     */\n    readonly length: number;\n    /**\n     * Returns the name of the function.\n     */\n    readonly name: string;\n    /**\n     * A reference to the prototype.\n     */\n    readonly prototype: GeneratorFunction;\n}\n`;$i[\"lib.es2015.iterable.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015.symbol\" />\n\ninterface SymbolConstructor {\n    /**\n     * A method that returns the default iterator for an object. Called by the semantics of the\n     * for-of statement.\n     */\n    readonly iterator: unique symbol;\n}\n\ninterface IteratorYieldResult<TYield> {\n    done?: false;\n    value: TYield;\n}\n\ninterface IteratorReturnResult<TReturn> {\n    done: true;\n    value: TReturn;\n}\n\ntype IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;\n\ninterface Iterator<T, TReturn = any, TNext = undefined> {\n    // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.\n    next(...args: [] | [TNext]): IteratorResult<T, TReturn>;\n    return?(value?: TReturn): IteratorResult<T, TReturn>;\n    throw?(e?: any): IteratorResult<T, TReturn>;\n}\n\ninterface Iterable<T> {\n    [Symbol.iterator](): Iterator<T>;\n}\n\ninterface IterableIterator<T> extends Iterator<T> {\n    [Symbol.iterator](): IterableIterator<T>;\n}\n\ninterface Array<T> {\n    /** Iterator */\n    [Symbol.iterator](): IterableIterator<T>;\n\n    /**\n     * Returns an iterable of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, T]>;\n\n    /**\n     * Returns an iterable of keys in the array\n     */\n    keys(): IterableIterator<number>;\n\n    /**\n     * Returns an iterable of values in the array\n     */\n    values(): IterableIterator<T>;\n}\n\ninterface ArrayConstructor {\n    /**\n     * Creates an array from an iterable object.\n     * @param iterable An iterable object to convert to an array.\n     */\n    from<T>(iterable: Iterable<T> | ArrayLike<T>): T[];\n\n    /**\n     * Creates an array from an iterable object.\n     * @param iterable An iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[];\n}\n\ninterface ReadonlyArray<T> {\n    /** Iterator of values in the array. */\n    [Symbol.iterator](): IterableIterator<T>;\n\n    /**\n     * Returns an iterable of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, T]>;\n\n    /**\n     * Returns an iterable of keys in the array\n     */\n    keys(): IterableIterator<number>;\n\n    /**\n     * Returns an iterable of values in the array\n     */\n    values(): IterableIterator<T>;\n}\n\ninterface IArguments {\n    /** Iterator */\n    [Symbol.iterator](): IterableIterator<any>;\n}\n\ninterface Map<K, V> {\n    /** Returns an iterable of entries in the map. */\n    [Symbol.iterator](): IterableIterator<[K, V]>;\n\n    /**\n     * Returns an iterable of key, value pairs for every entry in the map.\n     */\n    entries(): IterableIterator<[K, V]>;\n\n    /**\n     * Returns an iterable of keys in the map\n     */\n    keys(): IterableIterator<K>;\n\n    /**\n     * Returns an iterable of values in the map\n     */\n    values(): IterableIterator<V>;\n}\n\ninterface ReadonlyMap<K, V> {\n    /** Returns an iterable of entries in the map. */\n    [Symbol.iterator](): IterableIterator<[K, V]>;\n\n    /**\n     * Returns an iterable of key, value pairs for every entry in the map.\n     */\n    entries(): IterableIterator<[K, V]>;\n\n    /**\n     * Returns an iterable of keys in the map\n     */\n    keys(): IterableIterator<K>;\n\n    /**\n     * Returns an iterable of values in the map\n     */\n    values(): IterableIterator<V>;\n}\n\ninterface MapConstructor {\n    new(): Map<any, any>;\n    new <K, V>(iterable?: Iterable<readonly [K, V]> | null): Map<K, V>;\n}\n\ninterface WeakMap<K extends object, V> { }\n\ninterface WeakMapConstructor {\n    new <K extends object, V>(iterable: Iterable<readonly [K, V]>): WeakMap<K, V>;\n}\n\ninterface Set<T> {\n    /** Iterates over values in the set. */\n    [Symbol.iterator](): IterableIterator<T>;\n    /**\n     * Returns an iterable of [v,v] pairs for every value \\`v\\` in the set.\n     */\n    entries(): IterableIterator<[T, T]>;\n    /**\n     * Despite its name, returns an iterable of the values in the set.\n     */\n    keys(): IterableIterator<T>;\n\n    /**\n     * Returns an iterable of values in the set.\n     */\n    values(): IterableIterator<T>;\n}\n\ninterface ReadonlySet<T> {\n    /** Iterates over values in the set. */\n    [Symbol.iterator](): IterableIterator<T>;\n\n    /**\n     * Returns an iterable of [v,v] pairs for every value \\`v\\` in the set.\n     */\n    entries(): IterableIterator<[T, T]>;\n\n    /**\n     * Despite its name, returns an iterable of the values in the set.\n     */\n    keys(): IterableIterator<T>;\n\n    /**\n     * Returns an iterable of values in the set.\n     */\n    values(): IterableIterator<T>;\n}\n\ninterface SetConstructor {\n    new <T>(iterable?: Iterable<T> | null): Set<T>;\n}\n\ninterface WeakSet<T extends object> { }\n\ninterface WeakSetConstructor {\n    new <T extends object = object>(iterable: Iterable<T>): WeakSet<T>;\n}\n\ninterface Promise<T> { }\n\ninterface PromiseConstructor {\n    /**\n     * Creates a Promise that is resolved with an array of results when all of the provided Promises\n     * resolve, or rejected when any Promise is rejected.\n     * @param values An iterable of Promises.\n     * @returns A new Promise.\n     */\n    all<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>[]>;\n\n    /**\n     * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved\n     * or rejected.\n     * @param values An iterable of Promises.\n     * @returns A new Promise.\n     */\n    race<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>>;\n}\n\ninterface String {\n    /** Iterator */\n    [Symbol.iterator](): IterableIterator<string>;\n}\n\ninterface Int8Array {\n    [Symbol.iterator](): IterableIterator<number>;\n    /**\n     * Returns an array of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, number]>;\n    /**\n     * Returns an list of keys in the array\n     */\n    keys(): IterableIterator<number>;\n    /**\n     * Returns an list of values in the array\n     */\n    values(): IterableIterator<number>;\n}\n\ninterface Int8ArrayConstructor {\n    new (elements: Iterable<number>): Int8Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Int8Array;\n}\n\ninterface Uint8Array {\n    [Symbol.iterator](): IterableIterator<number>;\n    /**\n     * Returns an array of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, number]>;\n    /**\n     * Returns an list of keys in the array\n     */\n    keys(): IterableIterator<number>;\n    /**\n     * Returns an list of values in the array\n     */\n    values(): IterableIterator<number>;\n}\n\ninterface Uint8ArrayConstructor {\n    new (elements: Iterable<number>): Uint8Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8Array;\n}\n\ninterface Uint8ClampedArray {\n    [Symbol.iterator](): IterableIterator<number>;\n    /**\n     * Returns an array of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, number]>;\n\n    /**\n     * Returns an list of keys in the array\n     */\n    keys(): IterableIterator<number>;\n\n    /**\n     * Returns an list of values in the array\n     */\n    values(): IterableIterator<number>;\n}\n\ninterface Uint8ClampedArrayConstructor {\n    new (elements: Iterable<number>): Uint8ClampedArray;\n\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint8ClampedArray;\n}\n\ninterface Int16Array {\n    [Symbol.iterator](): IterableIterator<number>;\n    /**\n     * Returns an array of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, number]>;\n\n    /**\n     * Returns an list of keys in the array\n     */\n    keys(): IterableIterator<number>;\n\n    /**\n     * Returns an list of values in the array\n     */\n    values(): IterableIterator<number>;\n}\n\ninterface Int16ArrayConstructor {\n    new (elements: Iterable<number>): Int16Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Int16Array;\n}\n\ninterface Uint16Array {\n    [Symbol.iterator](): IterableIterator<number>;\n    /**\n     * Returns an array of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, number]>;\n    /**\n     * Returns an list of keys in the array\n     */\n    keys(): IterableIterator<number>;\n    /**\n     * Returns an list of values in the array\n     */\n    values(): IterableIterator<number>;\n}\n\ninterface Uint16ArrayConstructor {\n    new (elements: Iterable<number>): Uint16Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint16Array;\n}\n\ninterface Int32Array {\n    [Symbol.iterator](): IterableIterator<number>;\n    /**\n     * Returns an array of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, number]>;\n    /**\n     * Returns an list of keys in the array\n     */\n    keys(): IterableIterator<number>;\n    /**\n     * Returns an list of values in the array\n     */\n    values(): IterableIterator<number>;\n}\n\ninterface Int32ArrayConstructor {\n    new (elements: Iterable<number>): Int32Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Int32Array;\n}\n\ninterface Uint32Array {\n    [Symbol.iterator](): IterableIterator<number>;\n    /**\n     * Returns an array of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, number]>;\n    /**\n     * Returns an list of keys in the array\n     */\n    keys(): IterableIterator<number>;\n    /**\n     * Returns an list of values in the array\n     */\n    values(): IterableIterator<number>;\n}\n\ninterface Uint32ArrayConstructor {\n    new (elements: Iterable<number>): Uint32Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Uint32Array;\n}\n\ninterface Float32Array {\n    [Symbol.iterator](): IterableIterator<number>;\n    /**\n     * Returns an array of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, number]>;\n    /**\n     * Returns an list of keys in the array\n     */\n    keys(): IterableIterator<number>;\n    /**\n     * Returns an list of values in the array\n     */\n    values(): IterableIterator<number>;\n}\n\ninterface Float32ArrayConstructor {\n    new (elements: Iterable<number>): Float32Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Float32Array;\n}\n\ninterface Float64Array {\n    [Symbol.iterator](): IterableIterator<number>;\n    /**\n     * Returns an array of key, value pairs for every entry in the array\n     */\n    entries(): IterableIterator<[number, number]>;\n    /**\n     * Returns an list of keys in the array\n     */\n    keys(): IterableIterator<number>;\n    /**\n     * Returns an list of values in the array\n     */\n    values(): IterableIterator<number>;\n}\n\ninterface Float64ArrayConstructor {\n    new (elements: Iterable<number>): Float64Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: Iterable<number>, mapfn?: (v: number, k: number) => number, thisArg?: any): Float64Array;\n}\n`;$i[\"lib.es2015.promise.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface PromiseConstructor {\n    /**\n     * A reference to the prototype.\n     */\n    readonly prototype: Promise<any>;\n\n    /**\n     * Creates a new Promise.\n     * @param executor A callback used to initialize the promise. This callback is passed two arguments:\n     * a resolve callback used to resolve the promise with a value or the result of another promise,\n     * and a reject callback used to reject the promise with a provided reason or error.\n     */\n    new <T>(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): Promise<T>;\n\n    /**\n     * Creates a Promise that is resolved with an array of results when all of the provided Promises\n     * resolve, or rejected when any Promise is rejected.\n     * @param values An array of Promises.\n     * @returns A new Promise.\n     */\n    all<T extends readonly unknown[] | []>(values: T): Promise<{ -readonly [P in keyof T]: Awaited<T[P]> }>;\n\n    // see: lib.es2015.iterable.d.ts\n    // all<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>[]>;\n\n    /**\n     * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved\n     * or rejected.\n     * @param values An array of Promises.\n     * @returns A new Promise.\n     */\n    race<T extends readonly unknown[] | []>(values: T): Promise<Awaited<T[number]>>;\n\n    // see: lib.es2015.iterable.d.ts\n    // race<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>>;\n\n    /**\n     * Creates a new rejected promise for the provided reason.\n     * @param reason The reason the promise was rejected.\n     * @returns A new rejected Promise.\n     */\n    reject<T = never>(reason?: any): Promise<T>;\n\n    /**\n     * Creates a new resolved promise.\n     * @returns A resolved promise.\n     */\n    resolve(): Promise<void>;\n    /**\n     * Creates a new resolved promise for the provided value.\n     * @param value A promise.\n     * @returns A promise whose internal state matches the provided promise.\n     */\n    resolve<T>(value: T): Promise<Awaited<T>>;\n    /**\n     * Creates a new resolved promise for the provided value.\n     * @param value A promise.\n     * @returns A promise whose internal state matches the provided promise.\n     */\n    resolve<T>(value: T | PromiseLike<T>): Promise<Awaited<T>>;\n}\n\ndeclare var Promise: PromiseConstructor;\n`;$i[\"lib.es2015.proxy.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface ProxyHandler<T extends object> {\n    /**\n     * A trap method for a function call.\n     * @param target The original callable object which is being proxied.\n     */\n    apply?(target: T, thisArg: any, argArray: any[]): any;\n\n    /**\n     * A trap for the \\`new\\` operator.\n     * @param target The original object which is being proxied.\n     * @param newTarget The constructor that was originally called.\n     */\n    construct?(target: T, argArray: any[], newTarget: Function): object;\n\n    /**\n     * A trap for \\`Object.defineProperty()\\`.\n     * @param target The original object which is being proxied.\n     * @returns A \\`Boolean\\` indicating whether or not the property has been defined.\n     */\n    defineProperty?(target: T, property: string | symbol, attributes: PropertyDescriptor): boolean;\n\n    /**\n     * A trap for the \\`delete\\` operator.\n     * @param target The original object which is being proxied.\n     * @param p The name or \\`Symbol\\` of the property to delete.\n     * @returns A \\`Boolean\\` indicating whether or not the property was deleted.\n     */\n    deleteProperty?(target: T, p: string | symbol): boolean;\n\n    /**\n     * A trap for getting a property value.\n     * @param target The original object which is being proxied.\n     * @param p The name or \\`Symbol\\` of the property to get.\n     * @param receiver The proxy or an object that inherits from the proxy.\n     */\n    get?(target: T, p: string | symbol, receiver: any): any;\n\n    /**\n     * A trap for \\`Object.getOwnPropertyDescriptor()\\`.\n     * @param target The original object which is being proxied.\n     * @param p The name of the property whose description should be retrieved.\n     */\n    getOwnPropertyDescriptor?(target: T, p: string | symbol): PropertyDescriptor | undefined;\n\n    /**\n     * A trap for the \\`[[GetPrototypeOf]]\\` internal method.\n     * @param target The original object which is being proxied.\n     */\n    getPrototypeOf?(target: T): object | null;\n\n    /**\n     * A trap for the \\`in\\` operator.\n     * @param target The original object which is being proxied.\n     * @param p The name or \\`Symbol\\` of the property to check for existence.\n     */\n    has?(target: T, p: string | symbol): boolean;\n\n    /**\n     * A trap for \\`Object.isExtensible()\\`.\n     * @param target The original object which is being proxied.\n     */\n    isExtensible?(target: T): boolean;\n\n    /**\n     * A trap for \\`Reflect.ownKeys()\\`.\n     * @param target The original object which is being proxied.\n     */\n    ownKeys?(target: T): ArrayLike<string | symbol>;\n\n    /**\n     * A trap for \\`Object.preventExtensions()\\`.\n     * @param target The original object which is being proxied.\n     */\n    preventExtensions?(target: T): boolean;\n\n    /**\n     * A trap for setting a property value.\n     * @param target The original object which is being proxied.\n     * @param p The name or \\`Symbol\\` of the property to set.\n     * @param receiver The object to which the assignment was originally directed.\n     * @returns A \\`Boolean\\` indicating whether or not the property was set.\n     */\n    set?(target: T, p: string | symbol, newValue: any, receiver: any): boolean;\n\n    /**\n     * A trap for \\`Object.setPrototypeOf()\\`.\n     * @param target The original object which is being proxied.\n     * @param newPrototype The object's new prototype or \\`null\\`.\n     */\n    setPrototypeOf?(target: T, v: object | null): boolean;\n}\n\ninterface ProxyConstructor {\n    /**\n     * Creates a revocable Proxy object.\n     * @param target A target object to wrap with Proxy.\n     * @param handler An object whose properties define the behavior of Proxy when an operation is attempted on it.\n     */\n    revocable<T extends object>(target: T, handler: ProxyHandler<T>): { proxy: T; revoke: () => void; };\n\n    /**\n     * Creates a Proxy object. The Proxy object allows you to create an object that can be used in place of the\n     * original object, but which may redefine fundamental Object operations like getting, setting, and defining\n     * properties. Proxy objects are commonly used to log property accesses, validate, format, or sanitize inputs.\n     * @param target A target object to wrap with Proxy.\n     * @param handler An object whose properties define the behavior of Proxy when an operation is attempted on it.\n     */\n    new <T extends object>(target: T, handler: ProxyHandler<T>): T;\n}\ndeclare var Proxy: ProxyConstructor;\n`;$i[\"lib.es2015.reflect.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ndeclare namespace Reflect {\n    /**\n     * Calls the function with the specified object as the this value\n     * and the elements of specified array as the arguments.\n     * @param target The function to call.\n     * @param thisArgument The object to be used as the this object.\n     * @param argumentsList An array of argument values to be passed to the function.\n     */\n    function apply<T, A extends readonly any[], R>(\n        target: (this: T, ...args: A) => R,\n        thisArgument: T,\n        argumentsList: Readonly<A>,\n    ): R;\n    function apply(target: Function, thisArgument: any, argumentsList: ArrayLike<any>): any;\n\n    /**\n     * Constructs the target with the elements of specified array as the arguments\n     * and the specified constructor as the \\`new.target\\` value.\n     * @param target The constructor to invoke.\n     * @param argumentsList An array of argument values to be passed to the constructor.\n     * @param newTarget The constructor to be used as the \\`new.target\\` object.\n     */\n    function construct<A extends readonly any[], R>(\n        target: new (...args: A) => R,\n        argumentsList: Readonly<A>,\n        newTarget?: new (...args: any) => any,\n    ): R;\n    function construct(target: Function, argumentsList: ArrayLike<any>, newTarget?: Function): any;\n\n    /**\n     * Adds a property to an object, or modifies attributes of an existing property.\n     * @param target Object on which to add or modify the property. This can be a native JavaScript object\n     *        (that is, a user-defined object or a built in object) or a DOM object.\n     * @param propertyKey The property name.\n     * @param attributes Descriptor for the property. It can be for a data property or an accessor property.\n     */\n    function defineProperty(target: object, propertyKey: PropertyKey, attributes: PropertyDescriptor & ThisType<any>): boolean;\n\n    /**\n     * Removes a property from an object, equivalent to \\`delete target[propertyKey]\\`,\n     * except it won't throw if \\`target[propertyKey]\\` is non-configurable.\n     * @param target Object from which to remove the own property.\n     * @param propertyKey The property name.\n     */\n    function deleteProperty(target: object, propertyKey: PropertyKey): boolean;\n\n    /**\n     * Gets the property of target, equivalent to \\`target[propertyKey]\\` when \\`receiver === target\\`.\n     * @param target Object that contains the property on itself or in its prototype chain.\n     * @param propertyKey The property name.\n     * @param receiver The reference to use as the \\`this\\` value in the getter function,\n     *        if \\`target[propertyKey]\\` is an accessor property.\n     */\n    function get<T extends object, P extends PropertyKey>(\n        target: T,\n        propertyKey: P,\n        receiver?: unknown,\n    ): P extends keyof T ? T[P] : any;\n\n    /**\n     * Gets the own property descriptor of the specified object.\n     * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype.\n     * @param target Object that contains the property.\n     * @param propertyKey The property name.\n     */\n    function getOwnPropertyDescriptor<T extends object, P extends PropertyKey>(\n        target: T,\n        propertyKey: P,\n    ): TypedPropertyDescriptor<P extends keyof T ? T[P] : any> | undefined;\n\n    /**\n     * Returns the prototype of an object.\n     * @param target The object that references the prototype.\n     */\n    function getPrototypeOf(target: object): object | null;\n\n    /**\n     * Equivalent to \\`propertyKey in target\\`.\n     * @param target Object that contains the property on itself or in its prototype chain.\n     * @param propertyKey Name of the property.\n     */\n    function has(target: object, propertyKey: PropertyKey): boolean;\n\n    /**\n     * Returns a value that indicates whether new properties can be added to an object.\n     * @param target Object to test.\n     */\n    function isExtensible(target: object): boolean;\n\n    /**\n     * Returns the string and symbol keys of the own properties of an object. The own properties of an object\n     * are those that are defined directly on that object, and are not inherited from the object's prototype.\n     * @param target Object that contains the own properties.\n     */\n    function ownKeys(target: object): (string | symbol)[];\n\n    /**\n     * Prevents the addition of new properties to an object.\n     * @param target Object to make non-extensible.\n     * @return Whether the object has been made non-extensible.\n     */\n    function preventExtensions(target: object): boolean;\n\n    /**\n     * Sets the property of target, equivalent to \\`target[propertyKey] = value\\` when \\`receiver === target\\`.\n     * @param target Object that contains the property on itself or in its prototype chain.\n     * @param propertyKey Name of the property.\n     * @param receiver The reference to use as the \\`this\\` value in the setter function,\n     *        if \\`target[propertyKey]\\` is an accessor property.\n     */\n    function set<T extends object, P extends PropertyKey>(\n        target: T,\n        propertyKey: P,\n        value: P extends keyof T ? T[P] : any,\n        receiver?: any,\n    ): boolean;\n    function set(target: object, propertyKey: PropertyKey, value: any, receiver?: any): boolean;\n\n    /**\n     * Sets the prototype of a specified object o to object proto or null.\n     * @param target The object to change its prototype.\n     * @param proto The value of the new prototype or null.\n     * @return Whether setting the prototype was successful.\n     */\n    function setPrototypeOf(target: object, proto: object | null): boolean;\n}\n`;$i[\"lib.es2015.symbol.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface SymbolConstructor {\n    /**\n     * A reference to the prototype.\n     */\n    readonly prototype: Symbol;\n\n    /**\n     * Returns a new unique Symbol value.\n     * @param  description Description of the new Symbol object.\n     */\n    (description?: string | number): symbol;\n\n    /**\n     * Returns a Symbol object from the global symbol registry matching the given key if found.\n     * Otherwise, returns a new symbol with this key.\n     * @param key key to search for.\n     */\n    for(key: string): symbol;\n\n    /**\n     * Returns a key from the global symbol registry matching the given Symbol if found.\n     * Otherwise, returns a undefined.\n     * @param sym Symbol to find the key for.\n     */\n    keyFor(sym: symbol): string | undefined;\n}\n\ndeclare var Symbol: SymbolConstructor;`;$i[\"lib.es2015.symbol.wellknown.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015.symbol\" />\n\ninterface SymbolConstructor {\n    /**\n     * A method that determines if a constructor object recognizes an object as one of the\n     * constructor\\u2019s instances. Called by the semantics of the instanceof operator.\n     */\n    readonly hasInstance: unique symbol;\n\n    /**\n     * A Boolean value that if true indicates that an object should flatten to its array elements\n     * by Array.prototype.concat.\n     */\n    readonly isConcatSpreadable: unique symbol;\n\n    /**\n     * A regular expression method that matches the regular expression against a string. Called\n     * by the String.prototype.match method.\n     */\n    readonly match: unique symbol;\n\n    /**\n     * A regular expression method that replaces matched substrings of a string. Called by the\n     * String.prototype.replace method.\n     */\n    readonly replace: unique symbol;\n\n    /**\n     * A regular expression method that returns the index within a string that matches the\n     * regular expression. Called by the String.prototype.search method.\n     */\n    readonly search: unique symbol;\n\n    /**\n     * A function valued property that is the constructor function that is used to create\n     * derived objects.\n     */\n    readonly species: unique symbol;\n\n    /**\n     * A regular expression method that splits a string at the indices that match the regular\n     * expression. Called by the String.prototype.split method.\n     */\n    readonly split: unique symbol;\n\n    /**\n     * A method that converts an object to a corresponding primitive value.\n     * Called by the ToPrimitive abstract operation.\n     */\n    readonly toPrimitive: unique symbol;\n\n    /**\n     * A String value that is used in the creation of the default string description of an object.\n     * Called by the built-in method Object.prototype.toString.\n     */\n    readonly toStringTag: unique symbol;\n\n    /**\n     * An Object whose truthy properties are properties that are excluded from the 'with'\n     * environment bindings of the associated objects.\n     */\n    readonly unscopables: unique symbol;\n}\n\ninterface Symbol {\n    /**\n     * Converts a Symbol object to a symbol.\n     */\n    [Symbol.toPrimitive](hint: string): symbol;\n\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface Array<T> {\n    /**\n     * Is an object whose properties have the value 'true'\n     * when they will be absent when used in a 'with' statement.\n     */\n    readonly [Symbol.unscopables]: {\n        [K in keyof any[]]?: boolean;\n    };\n}\n\ninterface ReadonlyArray<T> {\n    /**\n     * Is an object whose properties have the value 'true'\n     * when they will be absent when used in a 'with' statement.\n     */\n    readonly [Symbol.unscopables]: {\n        [K in keyof readonly any[]]?: boolean;\n    };\n}\n\ninterface Date {\n    /**\n     * Converts a Date object to a string.\n     */\n    [Symbol.toPrimitive](hint: \"default\"): string;\n    /**\n     * Converts a Date object to a string.\n     */\n    [Symbol.toPrimitive](hint: \"string\"): string;\n    /**\n     * Converts a Date object to a number.\n     */\n    [Symbol.toPrimitive](hint: \"number\"): number;\n    /**\n     * Converts a Date object to a string or number.\n     *\n     * @param hint The strings \"number\", \"string\", or \"default\" to specify what primitive to return.\n     *\n     * @throws {TypeError} If 'hint' was given something other than \"number\", \"string\", or \"default\".\n     * @returns A number if 'hint' was \"number\", a string if 'hint' was \"string\" or \"default\".\n     */\n    [Symbol.toPrimitive](hint: string): string | number;\n}\n\ninterface Map<K, V> {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface WeakMap<K extends object, V> {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface Set<T> {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface WeakSet<T extends object> {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface JSON {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface Function {\n    /**\n     * Determines whether the given value inherits from this function if this function was used\n     * as a constructor function.\n     *\n     * A constructor function can control which objects are recognized as its instances by\n     * 'instanceof' by overriding this method.\n     */\n    [Symbol.hasInstance](value: any): boolean;\n}\n\ninterface GeneratorFunction {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface Math {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface Promise<T> {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface PromiseConstructor {\n    readonly [Symbol.species]: PromiseConstructor;\n}\n\ninterface RegExp {\n    /**\n     * Matches a string with this regular expression, and returns an array containing the results of\n     * that search.\n     * @param string A string to search within.\n     */\n    [Symbol.match](string: string): RegExpMatchArray | null;\n\n    /**\n     * Replaces text in a string, using this regular expression.\n     * @param string A String object or string literal whose contents matching against\n     *               this regular expression will be replaced\n     * @param replaceValue A String object or string literal containing the text to replace for every\n     *                     successful match of this regular expression.\n     */\n    [Symbol.replace](string: string, replaceValue: string): string;\n\n    /**\n     * Replaces text in a string, using this regular expression.\n     * @param string A String object or string literal whose contents matching against\n     *               this regular expression will be replaced\n     * @param replacer A function that returns the replacement text.\n     */\n    [Symbol.replace](string: string, replacer: (substring: string, ...args: any[]) => string): string;\n\n    /**\n     * Finds the position beginning first substring match in a regular expression search\n     * using this regular expression.\n     *\n     * @param string The string to search within.\n     */\n    [Symbol.search](string: string): number;\n\n    /**\n     * Returns an array of substrings that were delimited by strings in the original input that\n     * match against this regular expression.\n     *\n     * If the regular expression contains capturing parentheses, then each time this\n     * regular expression matches, the results (including any undefined results) of the\n     * capturing parentheses are spliced.\n     *\n     * @param string string value to split\n     * @param limit if not undefined, the output array is truncated so that it contains no more\n     * than 'limit' elements.\n     */\n    [Symbol.split](string: string, limit?: number): string[];\n}\n\ninterface RegExpConstructor {\n    readonly [Symbol.species]: RegExpConstructor;\n}\n\ninterface String {\n    /**\n     * Matches a string or an object that supports being matched against, and returns an array\n     * containing the results of that search, or null if no matches are found.\n     * @param matcher An object that supports being matched against.\n     */\n    match(matcher: { [Symbol.match](string: string): RegExpMatchArray | null; }): RegExpMatchArray | null;\n\n    /**\n     * Passes a string and {@linkcode replaceValue} to the \\`[Symbol.replace]\\` method on {@linkcode searchValue}. This method is expected to implement its own replacement algorithm.\n     * @param searchValue An object that supports searching for and replacing matches within a string.\n     * @param replaceValue The replacement text.\n     */\n    replace(searchValue: { [Symbol.replace](string: string, replaceValue: string): string; }, replaceValue: string): string;\n\n    /**\n     * Replaces text in a string, using an object that supports replacement within a string.\n     * @param searchValue A object can search for and replace matches within a string.\n     * @param replacer A function that returns the replacement text.\n     */\n    replace(searchValue: { [Symbol.replace](string: string, replacer: (substring: string, ...args: any[]) => string): string; }, replacer: (substring: string, ...args: any[]) => string): string;\n\n    /**\n     * Finds the first substring match in a regular expression search.\n     * @param searcher An object which supports searching within a string.\n     */\n    search(searcher: { [Symbol.search](string: string): number; }): number;\n\n    /**\n     * Split a string into substrings using the specified separator and return them as an array.\n     * @param splitter An object that can split a string.\n     * @param limit A value used to limit the number of elements returned in the array.\n     */\n    split(splitter: { [Symbol.split](string: string, limit?: number): string[]; }, limit?: number): string[];\n}\n\ninterface ArrayBuffer {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface DataView {\n    readonly [Symbol.toStringTag]: string;\n}\n\ninterface Int8Array {\n    readonly [Symbol.toStringTag]: \"Int8Array\";\n}\n\ninterface Uint8Array {\n    readonly [Symbol.toStringTag]: \"Uint8Array\";\n}\n\ninterface Uint8ClampedArray {\n    readonly [Symbol.toStringTag]: \"Uint8ClampedArray\";\n}\n\ninterface Int16Array {\n    readonly [Symbol.toStringTag]: \"Int16Array\";\n}\n\ninterface Uint16Array {\n    readonly [Symbol.toStringTag]: \"Uint16Array\";\n}\n\ninterface Int32Array {\n    readonly [Symbol.toStringTag]: \"Int32Array\";\n}\n\ninterface Uint32Array {\n    readonly [Symbol.toStringTag]: \"Uint32Array\";\n}\n\ninterface Float32Array {\n    readonly [Symbol.toStringTag]: \"Float32Array\";\n}\n\ninterface Float64Array {\n    readonly [Symbol.toStringTag]: \"Float64Array\";\n}\n\ninterface ArrayConstructor {\n    readonly [Symbol.species]: ArrayConstructor;\n}\ninterface MapConstructor {\n    readonly [Symbol.species]: MapConstructor;\n}\ninterface SetConstructor {\n    readonly [Symbol.species]: SetConstructor;\n}\ninterface ArrayBufferConstructor {\n    readonly [Symbol.species]: ArrayBufferConstructor;\n}\n`;$i[\"lib.es2016.array.include.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface Array<T> {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: T, fromIndex?: number): boolean;\n}\n\ninterface ReadonlyArray<T> {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: T, fromIndex?: number): boolean;\n}\n\ninterface Int8Array {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: number, fromIndex?: number): boolean;\n}\n\ninterface Uint8Array {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: number, fromIndex?: number): boolean;\n}\n\ninterface Uint8ClampedArray {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: number, fromIndex?: number): boolean;\n}\n\ninterface Int16Array {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: number, fromIndex?: number): boolean;\n}\n\ninterface Uint16Array {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: number, fromIndex?: number): boolean;\n}\n\ninterface Int32Array {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: number, fromIndex?: number): boolean;\n}\n\ninterface Uint32Array {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: number, fromIndex?: number): boolean;\n}\n\ninterface Float32Array {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: number, fromIndex?: number): boolean;\n}\n\ninterface Float64Array {\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: number, fromIndex?: number): boolean;\n}`;$i[\"lib.es2016.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015\" />\n/// <reference lib=\"es2016.array.include\" />`;$i[\"lib.es2016.full.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2016\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n/// <reference lib=\"dom.iterable\" />`;$i[\"lib.es2017.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2016\" />\n/// <reference lib=\"es2017.object\" />\n/// <reference lib=\"es2017.sharedmemory\" />\n/// <reference lib=\"es2017.string\" />\n/// <reference lib=\"es2017.intl\" />\n/// <reference lib=\"es2017.typedarrays\" />\n`;$i[\"lib.es2017.full.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2017\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n/// <reference lib=\"dom.iterable\" />`;$i[\"lib.es2017.intl.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ndeclare namespace Intl {\n\n    interface DateTimeFormatPartTypesRegistry {\n        day: any\n        dayPeriod: any\n        era: any\n        hour: any\n        literal: any\n        minute: any\n        month: any\n        second: any\n        timeZoneName: any\n        weekday: any\n        year: any\n    }\n\n    type DateTimeFormatPartTypes = keyof DateTimeFormatPartTypesRegistry;\n\n    interface DateTimeFormatPart {\n        type: DateTimeFormatPartTypes;\n        value: string;\n    }\n\n    interface DateTimeFormat {\n        formatToParts(date?: Date | number): DateTimeFormatPart[];\n    }\n}\n`;$i[\"lib.es2017.object.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface ObjectConstructor {\n    /**\n     * Returns an array of values of the enumerable properties of an object\n     * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n     */\n    values<T>(o: { [s: string]: T } | ArrayLike<T>): T[];\n\n    /**\n     * Returns an array of values of the enumerable properties of an object\n     * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n     */\n    values(o: {}): any[];\n\n    /**\n     * Returns an array of key/values of the enumerable properties of an object\n     * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n     */\n    entries<T>(o: { [s: string]: T } | ArrayLike<T>): [string, T][];\n\n    /**\n     * Returns an array of key/values of the enumerable properties of an object\n     * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n     */\n    entries(o: {}): [string, any][];\n\n    /**\n     * Returns an object containing all own property descriptors of an object\n     * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n     */\n    getOwnPropertyDescriptors<T>(o: T): {[P in keyof T]: TypedPropertyDescriptor<T[P]>} & { [x: string]: PropertyDescriptor };\n}\n`;$i[\"lib.es2017.sharedmemory.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015.symbol\" />\n/// <reference lib=\"es2015.symbol.wellknown\" />\n\ninterface SharedArrayBuffer {\n    /**\n     * Read-only. The length of the ArrayBuffer (in bytes).\n     */\n    readonly byteLength: number;\n\n    /**\n     * Returns a section of an SharedArrayBuffer.\n     */\n    slice(begin: number, end?: number): SharedArrayBuffer;\n    readonly [Symbol.species]: SharedArrayBuffer;\n    readonly [Symbol.toStringTag]: \"SharedArrayBuffer\";\n}\n\ninterface SharedArrayBufferConstructor {\n    readonly prototype: SharedArrayBuffer;\n    new (byteLength: number): SharedArrayBuffer;\n}\ndeclare var SharedArrayBuffer: SharedArrayBufferConstructor;\n\ninterface ArrayBufferTypes {\n    SharedArrayBuffer: SharedArrayBuffer;\n}\n\ninterface Atomics {\n    /**\n     * Adds a value to the value at the given position in the array, returning the original value.\n     * Until this atomic operation completes, any other read or write operation against the array\n     * will block.\n     */\n    add(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number;\n\n    /**\n     * Stores the bitwise AND of a value with the value at the given position in the array,\n     * returning the original value. Until this atomic operation completes, any other read or\n     * write operation against the array will block.\n     */\n    and(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number;\n\n    /**\n     * Replaces the value at the given position in the array if the original value equals the given\n     * expected value, returning the original value. Until this atomic operation completes, any\n     * other read or write operation against the array will block.\n     */\n    compareExchange(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, expectedValue: number, replacementValue: number): number;\n\n    /**\n     * Replaces the value at the given position in the array, returning the original value. Until\n     * this atomic operation completes, any other read or write operation against the array will\n     * block.\n     */\n    exchange(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number;\n\n    /**\n     * Returns a value indicating whether high-performance algorithms can use atomic operations\n     * (\\`true\\`) or must use locks (\\`false\\`) for the given number of bytes-per-element of a typed\n     * array.\n     */\n    isLockFree(size: number): boolean;\n\n    /**\n     * Returns the value at the given position in the array. Until this atomic operation completes,\n     * any other read or write operation against the array will block.\n     */\n    load(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number): number;\n\n    /**\n     * Stores the bitwise OR of a value with the value at the given position in the array,\n     * returning the original value. Until this atomic operation completes, any other read or write\n     * operation against the array will block.\n     */\n    or(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number;\n\n    /**\n     * Stores a value at the given position in the array, returning the new value. Until this\n     * atomic operation completes, any other read or write operation against the array will block.\n     */\n    store(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number;\n\n    /**\n     * Subtracts a value from the value at the given position in the array, returning the original\n     * value. Until this atomic operation completes, any other read or write operation against the\n     * array will block.\n     */\n    sub(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number;\n\n    /**\n     * If the value at the given position in the array is equal to the provided value, the current\n     * agent is put to sleep causing execution to suspend until the timeout expires (returning\n     * \\`\"timed-out\"\\`) or until the agent is awoken (returning \\`\"ok\"\\`); otherwise, returns\n     * \\`\"not-equal\"\\`.\n     */\n    wait(typedArray: Int32Array, index: number, value: number, timeout?: number): \"ok\" | \"not-equal\" | \"timed-out\";\n\n    /**\n     * Wakes up sleeping agents that are waiting on the given index of the array, returning the\n     * number of agents that were awoken.\n     * @param typedArray A shared Int32Array.\n     * @param index The position in the typedArray to wake up on.\n     * @param count The number of sleeping agents to notify. Defaults to +Infinity.\n     */\n    notify(typedArray: Int32Array, index: number, count?: number): number;\n\n    /**\n     * Stores the bitwise XOR of a value with the value at the given position in the array,\n     * returning the original value. Until this atomic operation completes, any other read or write\n     * operation against the array will block.\n     */\n    xor(typedArray: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array, index: number, value: number): number;\n\n    readonly [Symbol.toStringTag]: \"Atomics\";\n}\n\ndeclare var Atomics: Atomics;\n`;$i[\"lib.es2017.string.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface String {\n    /**\n     * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n     * The padding is applied from the start (left) of the current string.\n     *\n     * @param maxLength The length of the resulting string once the current string has been padded.\n     *        If this parameter is smaller than the current string's length, the current string will be returned as it is.\n     *\n     * @param fillString The string to pad the current string with.\n     *        If this string is too long, it will be truncated and the left-most part will be applied.\n     *        The default value for this parameter is \" \" (U+0020).\n     */\n    padStart(maxLength: number, fillString?: string): string;\n\n    /**\n     * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\n     * The padding is applied from the end (right) of the current string.\n     *\n     * @param maxLength The length of the resulting string once the current string has been padded.\n     *        If this parameter is smaller than the current string's length, the current string will be returned as it is.\n     *\n     * @param fillString The string to pad the current string with.\n     *        If this string is too long, it will be truncated and the left-most part will be applied.\n     *        The default value for this parameter is \" \" (U+0020).\n     */\n    padEnd(maxLength: number, fillString?: string): string;\n}\n`;$i[\"lib.es2017.typedarrays.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface Int8ArrayConstructor {\n    new (): Int8Array;\n}\n\ninterface Uint8ArrayConstructor {\n    new (): Uint8Array;\n}\n\ninterface Uint8ClampedArrayConstructor {\n    new (): Uint8ClampedArray;\n}\n\ninterface Int16ArrayConstructor {\n    new (): Int16Array;\n}\n\ninterface Uint16ArrayConstructor {\n    new (): Uint16Array;\n}\n\ninterface Int32ArrayConstructor {\n    new (): Int32Array;\n}\n\ninterface Uint32ArrayConstructor {\n    new (): Uint32Array;\n}\n\ninterface Float32ArrayConstructor {\n    new (): Float32Array;\n}\n\ninterface Float64ArrayConstructor {\n    new (): Float64Array;\n}\n`;$i[\"lib.es2018.asyncgenerator.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2018.asynciterable\" />\n\ninterface AsyncGenerator<T = unknown, TReturn = any, TNext = unknown> extends AsyncIterator<T, TReturn, TNext> {\n    // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.\n    next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;\n    return(value: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>;\n    throw(e: any): Promise<IteratorResult<T, TReturn>>;\n    [Symbol.asyncIterator](): AsyncGenerator<T, TReturn, TNext>;\n}\n\ninterface AsyncGeneratorFunction {\n    /**\n     * Creates a new AsyncGenerator object.\n     * @param args A list of arguments the function accepts.\n     */\n    new (...args: any[]): AsyncGenerator;\n    /**\n     * Creates a new AsyncGenerator object.\n     * @param args A list of arguments the function accepts.\n     */\n    (...args: any[]): AsyncGenerator;\n    /**\n     * The length of the arguments.\n     */\n    readonly length: number;\n    /**\n     * Returns the name of the function.\n     */\n    readonly name: string;\n    /**\n     * A reference to the prototype.\n     */\n    readonly prototype: AsyncGenerator;\n}\n\ninterface AsyncGeneratorFunctionConstructor {\n    /**\n     * Creates a new AsyncGenerator function.\n     * @param args A list of arguments the function accepts.\n     */\n    new (...args: string[]): AsyncGeneratorFunction;\n    /**\n     * Creates a new AsyncGenerator function.\n     * @param args A list of arguments the function accepts.\n     */\n    (...args: string[]): AsyncGeneratorFunction;\n    /**\n     * The length of the arguments.\n     */\n    readonly length: number;\n    /**\n     * Returns the name of the function.\n     */\n    readonly name: string;\n    /**\n     * A reference to the prototype.\n     */\n    readonly prototype: AsyncGeneratorFunction;\n}\n`;$i[\"lib.es2018.asynciterable.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015.symbol\" />\n/// <reference lib=\"es2015.iterable\" />\n\ninterface SymbolConstructor {\n    /**\n     * A method that returns the default async iterator for an object. Called by the semantics of\n     * the for-await-of statement.\n     */\n    readonly asyncIterator: unique symbol;\n}\n\ninterface AsyncIterator<T, TReturn = any, TNext = undefined> {\n    // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.\n    next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;\n    return?(value?: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>;\n    throw?(e?: any): Promise<IteratorResult<T, TReturn>>;\n}\n\ninterface AsyncIterable<T> {\n    [Symbol.asyncIterator](): AsyncIterator<T>;\n}\n\ninterface AsyncIterableIterator<T> extends AsyncIterator<T> {\n    [Symbol.asyncIterator](): AsyncIterableIterator<T>;\n}`;$i[\"lib.es2018.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2017\" />\n/// <reference lib=\"es2018.asynciterable\" />\n/// <reference lib=\"es2018.asyncgenerator\" />\n/// <reference lib=\"es2018.promise\" />\n/// <reference lib=\"es2018.regexp\" />\n/// <reference lib=\"es2018.intl\" />\n`;$i[\"lib.es2018.full.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2018\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n/// <reference lib=\"dom.iterable\" />`;$i[\"lib.es2018.intl.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ndeclare namespace Intl {\n\n    // http://cldr.unicode.org/index/cldr-spec/plural-rules#TOC-Determining-Plural-Categories\n    type LDMLPluralRule = \"zero\" | \"one\" | \"two\" | \"few\" | \"many\" | \"other\";\n    type PluralRuleType = \"cardinal\" | \"ordinal\";\n\n    interface PluralRulesOptions {\n        localeMatcher?: \"lookup\" | \"best fit\" | undefined;\n        type?: PluralRuleType | undefined;\n        minimumIntegerDigits?: number | undefined;\n        minimumFractionDigits?: number | undefined;\n        maximumFractionDigits?: number | undefined;\n        minimumSignificantDigits?: number | undefined;\n        maximumSignificantDigits?: number | undefined;\n    }\n\n    interface ResolvedPluralRulesOptions {\n        locale: string;\n        pluralCategories: LDMLPluralRule[];\n        type: PluralRuleType;\n        minimumIntegerDigits: number;\n        minimumFractionDigits: number;\n        maximumFractionDigits: number;\n        minimumSignificantDigits?: number;\n        maximumSignificantDigits?: number;\n    }\n\n    interface PluralRules {\n        resolvedOptions(): ResolvedPluralRulesOptions;\n        select(n: number): LDMLPluralRule;\n    }\n\n    const PluralRules: {\n        new (locales?: string | string[], options?: PluralRulesOptions): PluralRules;\n        (locales?: string | string[], options?: PluralRulesOptions): PluralRules;\n\n        supportedLocalesOf(locales: string | string[], options?: { localeMatcher?: \"lookup\" | \"best fit\" }): string[];\n    };\n\n    // We can only have one definition for 'type' in TypeScript, and so you can learn where the keys come from here:\n    type ES2018NumberFormatPartType = \"literal\" | \"nan\" | \"infinity\" | \"percent\" | \"integer\" | \"group\" | \"decimal\" | \"fraction\" | \"plusSign\" | \"minusSign\" | \"percentSign\" | \"currency\" | \"code\" | \"symbol\" | \"name\";\n    type ES2020NumberFormatPartType = \"compact\" | \"exponentInteger\" | \"exponentMinusSign\" | \"exponentSeparator\" | \"unit\" | \"unknown\";\n    type NumberFormatPartTypes = ES2018NumberFormatPartType | ES2020NumberFormatPartType;\n\n    interface NumberFormatPart {\n        type: NumberFormatPartTypes;\n        value: string;\n    }\n\n    interface NumberFormat {\n        formatToParts(number?: number | bigint): NumberFormatPart[];\n    }\n}\n`;$i[\"lib.es2018.promise.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/**\n * Represents the completion of an asynchronous operation\n */\ninterface Promise<T> {\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): Promise<T>\n}\n`;$i[\"lib.es2018.regexp.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface RegExpMatchArray {\n    groups?: {\n        [key: string]: string\n    }\n}\n\ninterface RegExpExecArray {\n    groups?: {\n        [key: string]: string\n    }\n}\n\ninterface RegExp {\n    /**\n     * Returns a Boolean value indicating the state of the dotAll flag (s) used with a regular expression.\n     * Default is false. Read-only.\n     */\n    readonly dotAll: boolean;\n}`;$i[\"lib.es2019.array.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ntype FlatArray<Arr, Depth extends number> = {\n    \"done\": Arr,\n    \"recur\": Arr extends ReadonlyArray<infer InnerArr>\n        ? FlatArray<InnerArr, [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]>\n        : Arr\n}[Depth extends -1 ? \"done\" : \"recur\"];\n\ninterface ReadonlyArray<T> {\n\n    /**\n     * Calls a defined callback function on each element of an array. Then, flattens the result into\n     * a new array.\n     * This is identical to a map followed by flat with depth 1.\n     *\n     * @param callback A function that accepts up to three arguments. The flatMap method calls the\n     * callback function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callback function. If\n     * thisArg is omitted, undefined is used as the this value.\n     */\n    flatMap<U, This = undefined> (\n        callback: (this: This, value: T, index: number, array: T[]) => U | ReadonlyArray<U>,\n        thisArg?: This\n    ): U[]\n\n\n    /**\n     * Returns a new array with all sub-array elements concatenated into it recursively up to the\n     * specified depth.\n     *\n     * @param depth The maximum recursion depth\n     */\n    flat<A, D extends number = 1>(\n        this: A,\n        depth?: D\n    ): FlatArray<A, D>[]\n  }\n\ninterface Array<T> {\n\n    /**\n     * Calls a defined callback function on each element of an array. Then, flattens the result into\n     * a new array.\n     * This is identical to a map followed by flat with depth 1.\n     *\n     * @param callback A function that accepts up to three arguments. The flatMap method calls the\n     * callback function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callback function. If\n     * thisArg is omitted, undefined is used as the this value.\n     */\n    flatMap<U, This = undefined> (\n        callback: (this: This, value: T, index: number, array: T[]) => U | ReadonlyArray<U>,\n        thisArg?: This\n    ): U[]\n\n    /**\n     * Returns a new array with all sub-array elements concatenated into it recursively up to the\n     * specified depth.\n     *\n     * @param depth The maximum recursion depth\n     */\n    flat<A, D extends number = 1>(\n        this: A,\n        depth?: D\n    ): FlatArray<A, D>[]\n}\n`;$i[\"lib.es2019.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2018\" />\n/// <reference lib=\"es2019.array\" />\n/// <reference lib=\"es2019.object\" />\n/// <reference lib=\"es2019.string\" />\n/// <reference lib=\"es2019.symbol\" />\n/// <reference lib=\"es2019.intl\" />\n`;$i[\"lib.es2019.full.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2019\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n/// <reference lib=\"dom.iterable\" />\n`;$i[\"lib.es2019.intl.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ndeclare namespace Intl {\n    interface DateTimeFormatPartTypesRegistry {\n        unknown: any\n    }\n}\n`;$i[\"lib.es2019.object.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015.iterable\" />\n\ninterface ObjectConstructor {\n    /**\n     * Returns an object created by key-value entries for properties and methods\n     * @param entries An iterable object that contains key-value entries for properties and methods.\n     */\n    fromEntries<T = any>(entries: Iterable<readonly [PropertyKey, T]>): { [k: string]: T };\n\n    /**\n     * Returns an object created by key-value entries for properties and methods\n     * @param entries An iterable object that contains key-value entries for properties and methods.\n     */\n    fromEntries(entries: Iterable<readonly any[]>): any;\n}\n`;$i[\"lib.es2019.string.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface String {\n    /** Removes the trailing white space and line terminator characters from a string. */\n    trimEnd(): string;\n\n    /** Removes the leading white space and line terminator characters from a string. */\n    trimStart(): string;\n\n    /**\n     * Removes the leading white space and line terminator characters from a string.\n     * @deprecated A legacy feature for browser compatibility. Use \\`trimStart\\` instead\n     */\n    trimLeft(): string;\n\n    /**\n     * Removes the trailing white space and line terminator characters from a string.\n     * @deprecated A legacy feature for browser compatibility. Use \\`trimEnd\\` instead\n     */\n    trimRight(): string;\n}\n`;$i[\"lib.es2019.symbol.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface Symbol {\n    /**\n     * Expose the [[Description]] internal slot of a symbol directly.\n     */\n    readonly description: string | undefined;\n}\n`;$i[\"lib.es2020.bigint.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2020.intl\" />\n\ninterface BigIntToLocaleStringOptions {\n    /**\n     * The locale matching algorithm to use.The default is \"best fit\". For information about this option, see the {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation Intl page}.\n     */\n    localeMatcher?: string;\n    /**\n     * The formatting style to use , the default is \"decimal\".\n     */\n    style?: string;\n\n    numberingSystem?: string;\n    /**\n     * The unit to use in unit formatting, Possible values are core unit identifiers, defined in UTS #35, Part 2, Section 6. A subset of units from the full list was selected for use in ECMAScript. Pairs of simple units can be concatenated with \"-per-\" to make a compound unit. There is no default value; if the style is \"unit\", the unit property must be provided.\n     */\n    unit?: string;\n\n    /**\n     * The unit formatting style to use in unit formatting, the defaults is \"short\".\n     */\n    unitDisplay?: string;\n\n    /**\n     * The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, such as \"USD\" for the US dollar, \"EUR\" for the euro, or \"CNY\" for the Chinese RMB \\u2014 see the Current currency & funds code list. There is no default value; if the style is \"currency\", the currency property must be provided. It is only used when [[Style]] has the value \"currency\".\n     */\n    currency?: string;\n\n    /**\n     * How to display the currency in currency formatting. It is only used when [[Style]] has the value \"currency\". The default is \"symbol\".\n     *\n     * \"symbol\" to use a localized currency symbol such as \\u20AC,\n     *\n     * \"code\" to use the ISO currency code,\n     *\n     * \"name\" to use a localized currency name such as \"dollar\"\n     */\n    currencyDisplay?: string;\n\n    /**\n     * Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators. The default is true.\n     */\n    useGrouping?: boolean;\n\n    /**\n     * The minimum number of integer digits to use. Possible values are from 1 to 21; the default is 1.\n     */\n    minimumIntegerDigits?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21;\n\n    /**\n     * The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of minor unit digits provided by the {@link http://www.currency-iso.org/en/home/tables/table-a1.html ISO 4217 currency codes list} (2 if the list doesn't provide that information).\n     */\n    minimumFractionDigits?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20;\n\n    /**\n     * The maximum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number formatting is the larger of minimumFractionDigits and 3; the default for currency formatting is the larger of minimumFractionDigits and the number of minor unit digits provided by the {@link http://www.currency-iso.org/en/home/tables/table-a1.html ISO 4217 currency codes list} (2 if the list doesn't provide that information); the default for percent formatting is the larger of minimumFractionDigits and 0.\n     */\n    maximumFractionDigits?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20;\n\n    /**\n     * The minimum number of significant digits to use. Possible values are from 1 to 21; the default is 1.\n     */\n    minimumSignificantDigits?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21;\n\n    /**\n     * The maximum number of significant digits to use. Possible values are from 1 to 21; the default is 21.\n     */\n    maximumSignificantDigits?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21;\n\n    /**\n     * The formatting that should be displayed for the number, the defaults is \"standard\"\n     *\n     *     \"standard\" plain number formatting\n     *\n     *     \"scientific\" return the order-of-magnitude for formatted number.\n     *\n     *     \"engineering\" return the exponent of ten when divisible by three\n     *\n     *     \"compact\" string representing exponent, defaults is using the \"short\" form\n     */\n    notation?: string;\n\n    /**\n     * used only when notation is \"compact\"\n     */\n    compactDisplay?: string;\n}\n\ninterface BigInt {\n    /**\n     * Returns a string representation of an object.\n     * @param radix Specifies a radix for converting numeric values to strings.\n     */\n    toString(radix?: number): string;\n\n    /** Returns a string representation appropriate to the host environment's current locale. */\n    toLocaleString(locales?: Intl.LocalesArgument, options?: BigIntToLocaleStringOptions): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): bigint;\n\n    readonly [Symbol.toStringTag]: \"BigInt\";\n}\n\ninterface BigIntConstructor {\n    (value: bigint | boolean | number | string): bigint;\n    readonly prototype: BigInt;\n\n    /**\n     * Interprets the low bits of a BigInt as a 2's-complement signed integer.\n     * All higher bits are discarded.\n     * @param bits The number of low bits to use\n     * @param int The BigInt whose bits to extract\n     */\n    asIntN(bits: number, int: bigint): bigint;\n    /**\n     * Interprets the low bits of a BigInt as an unsigned integer.\n     * All higher bits are discarded.\n     * @param bits The number of low bits to use\n     * @param int The BigInt whose bits to extract\n     */\n    asUintN(bits: number, int: bigint): bigint;\n}\n\ndeclare var BigInt: BigIntConstructor;\n\n/**\n * A typed array of 64-bit signed integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated, an exception is raised.\n */\ninterface BigInt64Array {\n    /** The size in bytes of each element in the array. */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /** The ArrayBuffer instance referenced by the array. */\n    readonly buffer: ArrayBufferLike;\n\n    /** The length in bytes of the array. */\n    readonly byteLength: number;\n\n    /** The offset in bytes of the array. */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /** Yields index, value pairs for every entry in the array. */\n    entries(): IterableIterator<[number, bigint]>;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns false,\n     * or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: bigint, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: bigint, index: number, array: BigInt64Array) => any, thisArg?: any): BigInt64Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): bigint | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: bigint, index: number, array: BigInt64Array) => void, thisArg?: any): void;\n\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: bigint, fromIndex?: number): boolean;\n\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    indexOf(searchElement: bigint, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /** Yields each index in the array. */\n    keys(): IterableIterator<number>;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: bigint, fromIndex?: number): number;\n\n    /** The length of the array. */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: bigint, index: number, array: BigInt64Array) => bigint, thisArg?: any): BigInt64Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigInt64Array) => bigint): bigint;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigInt64Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigInt64Array) => bigint): bigint;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigInt64Array) => U, initialValue: U): U;\n\n    /** Reverses the elements in the array. */\n    reverse(): this;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<bigint>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array.\n     */\n    slice(start?: number, end?: number): BigInt64Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls the\n     * predicate function for each element in the array until the predicate returns true, or until\n     * the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: bigint, index: number, array: BigInt64Array) => boolean, thisArg?: any): boolean;\n\n    /**\n     * Sorts the array.\n     * @param compareFn The function used to determine the order of the elements. If omitted, the elements are sorted in ascending order.\n     */\n    sort(compareFn?: (a: bigint, b: bigint) => number | bigint): this;\n\n    /**\n     * Gets a new BigInt64Array view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): BigInt64Array;\n\n    /** Converts the array to a string by using the current locale. */\n    toLocaleString(): string;\n\n    /** Returns a string representation of the array. */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): BigInt64Array;\n\n    /** Yields each value in the array. */\n    values(): IterableIterator<bigint>;\n\n    [Symbol.iterator](): IterableIterator<bigint>;\n\n    readonly [Symbol.toStringTag]: \"BigInt64Array\";\n\n    [index: number]: bigint;\n}\n\ninterface BigInt64ArrayConstructor {\n    readonly prototype: BigInt64Array;\n    new(length?: number): BigInt64Array;\n    new(array: Iterable<bigint>): BigInt64Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): BigInt64Array;\n\n    /** The size in bytes of each element in the array. */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: bigint[]): BigInt64Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: ArrayLike<bigint>): BigInt64Array;\n    from<U>(arrayLike: ArrayLike<U>, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigInt64Array;\n}\n\ndeclare var BigInt64Array: BigInt64ArrayConstructor;\n\n/**\n * A typed array of 64-bit unsigned integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated, an exception is raised.\n */\ninterface BigUint64Array {\n    /** The size in bytes of each element in the array. */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /** The ArrayBuffer instance referenced by the array. */\n    readonly buffer: ArrayBufferLike;\n\n    /** The length in bytes of the array. */\n    readonly byteLength: number;\n\n    /** The offset in bytes of the array. */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /** Yields index, value pairs for every entry in the array. */\n    entries(): IterableIterator<[number, bigint]>;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns false,\n     * or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: bigint, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: bigint, index: number, array: BigUint64Array) => any, thisArg?: any): BigUint64Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): bigint | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: bigint, index: number, array: BigUint64Array) => void, thisArg?: any): void;\n\n    /**\n     * Determines whether an array includes a certain element, returning true or false as appropriate.\n     * @param searchElement The element to search for.\n     * @param fromIndex The position in this array at which to begin searching for searchElement.\n     */\n    includes(searchElement: bigint, fromIndex?: number): boolean;\n\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    indexOf(searchElement: bigint, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /** Yields each index in the array. */\n    keys(): IterableIterator<number>;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: bigint, fromIndex?: number): number;\n\n    /** The length of the array. */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: bigint, index: number, array: BigUint64Array) => bigint, thisArg?: any): BigUint64Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigUint64Array) => bigint): bigint;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigUint64Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: bigint, currentValue: bigint, currentIndex: number, array: BigUint64Array) => bigint): bigint;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: bigint, currentIndex: number, array: BigUint64Array) => U, initialValue: U): U;\n\n    /** Reverses the elements in the array. */\n    reverse(): this;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<bigint>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array.\n     */\n    slice(start?: number, end?: number): BigUint64Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls the\n     * predicate function for each element in the array until the predicate returns true, or until\n     * the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: bigint, index: number, array: BigUint64Array) => boolean, thisArg?: any): boolean;\n\n    /**\n     * Sorts the array.\n     * @param compareFn The function used to determine the order of the elements. If omitted, the elements are sorted in ascending order.\n     */\n    sort(compareFn?: (a: bigint, b: bigint) => number | bigint): this;\n\n    /**\n     * Gets a new BigUint64Array view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): BigUint64Array;\n\n    /** Converts the array to a string by using the current locale. */\n    toLocaleString(): string;\n\n    /** Returns a string representation of the array. */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): BigUint64Array;\n\n    /** Yields each value in the array. */\n    values(): IterableIterator<bigint>;\n\n    [Symbol.iterator](): IterableIterator<bigint>;\n\n    readonly [Symbol.toStringTag]: \"BigUint64Array\";\n\n    [index: number]: bigint;\n}\n\ninterface BigUint64ArrayConstructor {\n    readonly prototype: BigUint64Array;\n    new(length?: number): BigUint64Array;\n    new(array: Iterable<bigint>): BigUint64Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): BigUint64Array;\n\n    /** The size in bytes of each element in the array. */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: bigint[]): BigUint64Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from(arrayLike: ArrayLike<bigint>): BigUint64Array;\n    from<U>(arrayLike: ArrayLike<U>, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigUint64Array;\n}\n\ndeclare var BigUint64Array: BigUint64ArrayConstructor;\n\ninterface DataView {\n    /**\n     * Gets the BigInt64 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     * @param littleEndian If false or undefined, a big-endian value should be read.\n     */\n    getBigInt64(byteOffset: number, littleEndian?: boolean): bigint;\n\n    /**\n     * Gets the BigUint64 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     * @param littleEndian If false or undefined, a big-endian value should be read.\n     */\n    getBigUint64(byteOffset: number, littleEndian?: boolean): bigint;\n\n    /**\n     * Stores a BigInt64 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     * @param littleEndian If false or undefined, a big-endian value should be written.\n     */\n    setBigInt64(byteOffset: number, value: bigint, littleEndian?: boolean): void;\n\n    /**\n     * Stores a BigUint64 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     * @param littleEndian If false or undefined, a big-endian value should be written.\n     */\n    setBigUint64(byteOffset: number, value: bigint, littleEndian?: boolean): void;\n}\n\ndeclare namespace Intl{\n    interface NumberFormat {\n        format(value: number | bigint): string;\n        resolvedOptions(): ResolvedNumberFormatOptions;\n    }\n}\n`;$i[\"lib.es2020.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2019\" />\n/// <reference lib=\"es2020.bigint\" />\n/// <reference lib=\"es2020.date\" />\n/// <reference lib=\"es2020.number\" />\n/// <reference lib=\"es2020.promise\" />\n/// <reference lib=\"es2020.sharedmemory\" />\n/// <reference lib=\"es2020.string\" />\n/// <reference lib=\"es2020.symbol.wellknown\" />\n/// <reference lib=\"es2020.intl\" />\n`;$i[\"lib.es2020.date.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2020.intl\" />\n\ninterface Date {\n    /**\n     * Converts a date and time to a string by using the current or specified locale.\n     * @param locales A locale string, array of locale strings, Intl.Locale object, or array of Intl.Locale objects that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n     * @param options An object that contains one or more properties that specify comparison options.\n     */\n    toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;\n\n    /**\n     * Converts a date to a string by using the current or specified locale.\n     * @param locales A locale string, array of locale strings, Intl.Locale object, or array of Intl.Locale objects that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n     * @param options An object that contains one or more properties that specify comparison options.\n     */\n    toLocaleDateString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;\n\n    /**\n     * Converts a time to a string by using the current or specified locale.\n     * @param locales A locale string, array of locale strings, Intl.Locale object, or array of Intl.Locale objects that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n     * @param options An object that contains one or more properties that specify comparison options.\n     */\n    toLocaleTimeString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;\n}`;$i[\"lib.es2020.full.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2020\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n/// <reference lib=\"dom.iterable\" />\n`;$i[\"lib.es2020.intl.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2018.intl\" />\ndeclare namespace Intl {\n\n    /**\n     * [Unicode BCP 47 Locale Identifiers](https://unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers) definition.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument).\n     */\n    type UnicodeBCP47LocaleIdentifier = string;\n\n    /**\n     * Unit to use in the relative time internationalized message.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format#Parameters).\n     */\n    type RelativeTimeFormatUnit =\n        | \"year\"\n        | \"years\"\n        | \"quarter\"\n        | \"quarters\"\n        | \"month\"\n        | \"months\"\n        | \"week\"\n        | \"weeks\"\n        | \"day\"\n        | \"days\"\n        | \"hour\"\n        | \"hours\"\n        | \"minute\"\n        | \"minutes\"\n        | \"second\"\n        | \"seconds\";\n\n    /**\n     * Value of the \\`unit\\` property in objects returned by\n     * \\`Intl.RelativeTimeFormat.prototype.formatToParts()\\`. \\`formatToParts\\` and\n     * \\`format\\` methods accept either singular or plural unit names as input,\n     * but \\`formatToParts\\` only outputs singular (e.g. \"day\") not plural (e.g.\n     * \"days\").\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts#Using_formatToParts).\n     */\n     type RelativeTimeFormatUnitSingular =\n        | \"year\"\n        | \"quarter\"\n        | \"month\"\n        | \"week\"\n        | \"day\"\n        | \"hour\"\n        | \"minute\"\n        | \"second\";\n\n    /**\n     * The locale matching algorithm to use.\n     *\n     * [MDN](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation).\n     */\n    type RelativeTimeFormatLocaleMatcher = \"lookup\" | \"best fit\";\n\n    /**\n     * The format of output message.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters).\n     */\n    type RelativeTimeFormatNumeric = \"always\" | \"auto\";\n\n    /**\n     * The length of the internationalized message.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters).\n     */\n    type RelativeTimeFormatStyle = \"long\" | \"short\" | \"narrow\";\n\n    /**\n     * [BCP 47 language tag](http://tools.ietf.org/html/rfc5646) definition.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument).\n     */\n    type BCP47LanguageTag = string;\n\n    /**\n     * The locale(s) to use\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument).\n     */\n    type LocalesArgument = UnicodeBCP47LocaleIdentifier | Locale | readonly (UnicodeBCP47LocaleIdentifier | Locale)[] | undefined;\n\n    /**\n     * An object with some or all of properties of \\`options\\` parameter\n     * of \\`Intl.RelativeTimeFormat\\` constructor.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters).\n     */\n    interface RelativeTimeFormatOptions {\n        /** The locale matching algorithm to use. For information about this option, see [Intl page](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation). */\n        localeMatcher?: RelativeTimeFormatLocaleMatcher;\n        /** The format of output message. */\n        numeric?: RelativeTimeFormatNumeric;\n        /** The length of the internationalized message. */\n        style?: RelativeTimeFormatStyle;\n    }\n\n    /**\n     * An object with properties reflecting the locale\n     * and formatting options computed during initialization\n     * of the \\`Intl.RelativeTimeFormat\\` object\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/resolvedOptions#Description).\n     */\n    interface ResolvedRelativeTimeFormatOptions {\n        locale: UnicodeBCP47LocaleIdentifier;\n        style: RelativeTimeFormatStyle;\n        numeric: RelativeTimeFormatNumeric;\n        numberingSystem: string;\n    }\n\n    /**\n     * An object representing the relative time format in parts\n     * that can be used for custom locale-aware formatting.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts#Using_formatToParts).\n     */\n    type RelativeTimeFormatPart =\n        | {\n              type: \"literal\";\n              value: string;\n          }\n        | {\n              type: Exclude<NumberFormatPartTypes, \"literal\">;\n              value: string;\n              unit: RelativeTimeFormatUnitSingular;\n          };\n\n    interface RelativeTimeFormat {\n        /**\n         * Formats a value and a unit according to the locale\n         * and formatting options of the given\n         * [\\`Intl.RelativeTimeFormat\\`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat)\n         * object.\n         *\n         * While this method automatically provides the correct plural forms,\n         * the grammatical form is otherwise as neutral as possible.\n         *\n         * It is the caller's responsibility to handle cut-off logic\n         * such as deciding between displaying \"in 7 days\" or \"in 1 week\".\n         * This API does not support relative dates involving compound units.\n         * e.g \"in 5 days and 4 hours\".\n         *\n         * @param value -  Numeric value to use in the internationalized relative time message\n         *\n         * @param unit - [Unit](https://tc39.es/ecma402/#sec-singularrelativetimeunit) to use in the relative time internationalized message.\n         *\n         * @throws \\`RangeError\\` if \\`unit\\` was given something other than \\`unit\\` possible values\n         *\n         * @returns {string} Internationalized relative time message as string\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format).\n         */\n        format(value: number, unit: RelativeTimeFormatUnit): string;\n\n        /**\n         *  Returns an array of objects representing the relative time format in parts that can be used for custom locale-aware formatting.\n         *\n         *  @param value - Numeric value to use in the internationalized relative time message\n         *\n         *  @param unit - [Unit](https://tc39.es/ecma402/#sec-singularrelativetimeunit) to use in the relative time internationalized message.\n         *\n         *  @throws \\`RangeError\\` if \\`unit\\` was given something other than \\`unit\\` possible values\n         *\n         *  [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts).\n         */\n        formatToParts(value: number, unit: RelativeTimeFormatUnit): RelativeTimeFormatPart[];\n\n        /**\n         * Provides access to the locale and options computed during initialization of this \\`Intl.RelativeTimeFormat\\` object.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/resolvedOptions).\n         */\n        resolvedOptions(): ResolvedRelativeTimeFormatOptions;\n    }\n\n    /**\n     * The [\\`Intl.RelativeTimeFormat\\`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat)\n     * object is a constructor for objects that enable language-sensitive relative time formatting.\n     *\n     * [Compatibility](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat#Browser_compatibility).\n     */\n    const RelativeTimeFormat: {\n        /**\n         * Creates [Intl.RelativeTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat) objects\n         *\n         * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n         *  For the general form and interpretation of the locales argument,\n         *  see the [\\`Intl\\` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n         *\n         * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters)\n         *  with some or all of options of \\`RelativeTimeFormatOptions\\`.\n         *\n         * @returns [Intl.RelativeTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat) object.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat).\n         */\n        new(\n            locales?: UnicodeBCP47LocaleIdentifier | UnicodeBCP47LocaleIdentifier[],\n            options?: RelativeTimeFormatOptions,\n        ): RelativeTimeFormat;\n\n        /**\n         * Returns an array containing those of the provided locales\n         * that are supported in date and time formatting\n         * without having to fall back to the runtime's default locale.\n         *\n         * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n         *  For the general form and interpretation of the locales argument,\n         *  see the [\\`Intl\\` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n         *\n         * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#Parameters)\n         *  with some or all of options of the formatting.\n         *\n         * @returns An array containing those of the provided locales\n         *  that are supported in date and time formatting\n         *  without having to fall back to the runtime's default locale.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/supportedLocalesOf).\n         */\n        supportedLocalesOf(\n            locales?: UnicodeBCP47LocaleIdentifier | UnicodeBCP47LocaleIdentifier[],\n            options?: RelativeTimeFormatOptions,\n        ): UnicodeBCP47LocaleIdentifier[];\n    };\n\n    interface NumberFormatOptions {\n        compactDisplay?: \"short\" | \"long\" | undefined;\n        notation?: \"standard\" | \"scientific\" | \"engineering\" | \"compact\" | undefined;\n        signDisplay?: \"auto\" | \"never\" | \"always\" | \"exceptZero\" | undefined;\n        unit?: string | undefined;\n        unitDisplay?: \"short\" | \"long\" | \"narrow\" | undefined;\n        currencyDisplay?: string | undefined;\n        currencySign?: string | undefined;\n    }\n\n    interface ResolvedNumberFormatOptions {\n        compactDisplay?: \"short\" | \"long\";\n        notation?: \"standard\" | \"scientific\" | \"engineering\" | \"compact\";\n        signDisplay?: \"auto\" | \"never\" | \"always\" | \"exceptZero\";\n        unit?: string;\n        unitDisplay?: \"short\" | \"long\" | \"narrow\";\n        currencyDisplay?: string;\n        currencySign?: string;\n    }\n\n    interface DateTimeFormatOptions {\n        calendar?: string | undefined;\n        dayPeriod?: \"narrow\" | \"short\" | \"long\" | undefined;\n        numberingSystem?: string | undefined;\n\n        dateStyle?: \"full\" | \"long\" | \"medium\" | \"short\" | undefined;\n        timeStyle?: \"full\" | \"long\" | \"medium\" | \"short\" | undefined;\n        hourCycle?: \"h11\" | \"h12\" | \"h23\" | \"h24\" | undefined;\n    }\n\n    type LocaleHourCycleKey = \"h12\" | \"h23\" | \"h11\" | \"h24\";\n    type LocaleCollationCaseFirst = \"upper\" | \"lower\" | \"false\";\n\n    interface LocaleOptions {\n        /** A string containing the language, and the script and region if available. */\n        baseName?: string;\n        /** The part of the Locale that indicates the locale's calendar era. */\n        calendar?: string;\n        /** Flag that defines whether case is taken into account for the locale's collation rules. */\n        caseFirst?: LocaleCollationCaseFirst;\n        /** The collation type used for sorting */\n        collation?: string;\n        /** The time keeping format convention used by the locale. */\n        hourCycle?: LocaleHourCycleKey;\n        /** The primary language subtag associated with the locale. */\n        language?: string;\n        /** The numeral system used by the locale. */\n        numberingSystem?: string;\n        /** Flag that defines whether the locale has special collation handling for numeric characters. */\n        numeric?: boolean;\n        /** The region of the world (usually a country) associated with the locale. Possible values are region codes as defined by ISO 3166-1. */\n        region?: string;\n        /** The script used for writing the particular language used in the locale. Possible values are script codes as defined by ISO 15924. */\n        script?: string;\n    }\n\n    interface Locale extends LocaleOptions {\n        /** A string containing the language, and the script and region if available. */\n        baseName: string;\n        /** The primary language subtag associated with the locale. */\n        language: string;\n        /** Gets the most likely values for the language, script, and region of the locale based on existing values. */\n        maximize(): Locale;\n        /** Attempts to remove information about the locale that would be added by calling \\`Locale.maximize()\\`. */\n        minimize(): Locale;\n        /** Returns the locale's full locale identifier string. */\n        toString(): BCP47LanguageTag;\n    }\n\n    /**\n     * Constructor creates [Intl.Locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale)\n     * objects\n     *\n     * @param tag - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646).\n     *  For the general form and interpretation of the locales argument,\n     *  see the [\\`Intl\\` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n     *\n     * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/Locale#Parameters) with some or all of options of the locale.\n     *\n     * @returns [Intl.Locale](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale) object.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale).\n     */\n    const Locale: {\n        new (tag: BCP47LanguageTag | Locale, options?: LocaleOptions): Locale;\n    };\n\n    type DisplayNamesFallback =\n        | \"code\"\n        | \"none\";\n\n    type DisplayNamesType =\n        | \"language\"\n        | \"region\"\n        | \"script\"\n        | \"calendar\"\n        | \"dateTimeField\"\n        | \"currency\";\n\n    type DisplayNamesLanguageDisplay =\n        | \"dialect\"\n        | \"standard\";\n\n    interface DisplayNamesOptions {\n        localeMatcher?: RelativeTimeFormatLocaleMatcher;\n        style?: RelativeTimeFormatStyle;\n        type: DisplayNamesType;\n        languageDisplay?: DisplayNamesLanguageDisplay;\n        fallback?: DisplayNamesFallback;\n    }\n\n    interface ResolvedDisplayNamesOptions {\n        locale: UnicodeBCP47LocaleIdentifier;\n        style: RelativeTimeFormatStyle;\n        type: DisplayNamesType;\n        fallback: DisplayNamesFallback;\n        languageDisplay?: DisplayNamesLanguageDisplay;\n    }\n\n    interface DisplayNames {\n        /**\n         * Receives a code and returns a string based on the locale and options provided when instantiating\n         * [\\`Intl.DisplayNames()\\`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames)\n         *\n         * @param code The \\`code\\` to provide depends on the \\`type\\` passed to display name during creation:\n         *  - If the type is \\`\"region\"\\`, code should be either an [ISO-3166 two letters region code](https://www.iso.org/iso-3166-country-codes.html),\n         *    or a [three digits UN M49 Geographic Regions](https://unstats.un.org/unsd/methodology/m49/).\n         *  - If the type is \\`\"script\"\\`, code should be an [ISO-15924 four letters script code](https://unicode.org/iso15924/iso15924-codes.html).\n         *  - If the type is \\`\"language\"\\`, code should be a \\`languageCode\\` [\"-\" \\`scriptCode\\`] [\"-\" \\`regionCode\\` ] *(\"-\" \\`variant\\` )\n         *    subsequence of the unicode_language_id grammar in [UTS 35's Unicode Language and Locale Identifiers grammar](https://unicode.org/reports/tr35/#Unicode_language_identifier).\n         *    \\`languageCode\\` is either a two letters ISO 639-1 language code or a three letters ISO 639-2 language code.\n         *  - If the type is \\`\"currency\"\\`, code should be a [3-letter ISO 4217 currency code](https://www.iso.org/iso-4217-currency-codes.html).\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/of).\n         */\n        of(code: string): string | undefined;\n        /**\n         * Returns a new object with properties reflecting the locale and style formatting options computed during the construction of the current\n         * [\\`Intl/DisplayNames\\`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames) object.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/resolvedOptions).\n         */\n        resolvedOptions(): ResolvedDisplayNamesOptions;\n    }\n\n    /**\n     * The [\\`Intl.DisplayNames()\\`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames)\n     * object enables the consistent translation of language, region and script display names.\n     *\n     * [Compatibility](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames#browser_compatibility).\n     */\n    const DisplayNames: {\n        prototype: DisplayNames;\n\n        /**\n         * @param locales A string with a BCP 47 language tag, or an array of such strings.\n         *   For the general form and interpretation of the \\`locales\\` argument, see the [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locale_identification_and_negotiation)\n         *   page.\n         *\n         * @param options An object for setting up a display name.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/DisplayNames).\n         */\n        new(locales: LocalesArgument, options: DisplayNamesOptions): DisplayNames;\n\n        /**\n         * Returns an array containing those of the provided locales that are supported in display names without having to fall back to the runtime's default locale.\n         *\n         * @param locales A string with a BCP 47 language tag, or an array of such strings.\n         *   For the general form and interpretation of the \\`locales\\` argument, see the [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locale_identification_and_negotiation)\n         *   page.\n         *\n         * @param options An object with a locale matcher.\n         *\n         * @returns An array of strings representing a subset of the given locale tags that are supported in display names without having to fall back to the runtime's default locale.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/supportedLocalesOf).\n         */\n        supportedLocalesOf(locales?: LocalesArgument, options?: { localeMatcher?: RelativeTimeFormatLocaleMatcher }): BCP47LanguageTag[];\n    };\n\n}\n`;$i[\"lib.es2020.number.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2020.intl\" />\n\ninterface Number {\n    /**\n     * Converts a number to a string by using the current or specified locale.\n     * @param locales A locale string, array of locale strings, Intl.Locale object, or array of Intl.Locale objects that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n     * @param options An object that contains one or more properties that specify comparison options.\n     */\n    toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.NumberFormatOptions): string;\n}\n`;$i[\"lib.es2020.promise.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface PromiseFulfilledResult<T> {\n    status: \"fulfilled\";\n    value: T;\n}\n\ninterface PromiseRejectedResult {\n    status: \"rejected\";\n    reason: any;\n}\n\ntype PromiseSettledResult<T> = PromiseFulfilledResult<T> | PromiseRejectedResult;\n\ninterface PromiseConstructor {\n    /**\n     * Creates a Promise that is resolved with an array of results when all\n     * of the provided Promises resolve or reject.\n     * @param values An array of Promises.\n     * @returns A new Promise.\n     */\n    allSettled<T extends readonly unknown[] | []>(values: T): Promise<{ -readonly [P in keyof T]: PromiseSettledResult<Awaited<T[P]>> }>;\n\n    /**\n     * Creates a Promise that is resolved with an array of results when all\n     * of the provided Promises resolve or reject.\n     * @param values An array of Promises.\n     * @returns A new Promise.\n     */\n    allSettled<T>(values: Iterable<T | PromiseLike<T>>): Promise<PromiseSettledResult<Awaited<T>>[]>;\n}\n`;$i[\"lib.es2020.sharedmemory.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface Atomics {\n    /**\n     * Adds a value to the value at the given position in the array, returning the original value.\n     * Until this atomic operation completes, any other read or write operation against the array\n     * will block.\n     */\n    add(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint;\n\n    /**\n     * Stores the bitwise AND of a value with the value at the given position in the array,\n     * returning the original value. Until this atomic operation completes, any other read or\n     * write operation against the array will block.\n     */\n    and(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint;\n\n    /**\n     * Replaces the value at the given position in the array if the original value equals the given\n     * expected value, returning the original value. Until this atomic operation completes, any\n     * other read or write operation against the array will block.\n     */\n    compareExchange(typedArray: BigInt64Array | BigUint64Array, index: number, expectedValue: bigint, replacementValue: bigint): bigint;\n\n    /**\n     * Replaces the value at the given position in the array, returning the original value. Until\n     * this atomic operation completes, any other read or write operation against the array will\n     * block.\n     */\n    exchange(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint;\n\n    /**\n     * Returns the value at the given position in the array. Until this atomic operation completes,\n     * any other read or write operation against the array will block.\n     */\n    load(typedArray: BigInt64Array | BigUint64Array, index: number): bigint;\n\n    /**\n     * Stores the bitwise OR of a value with the value at the given position in the array,\n     * returning the original value. Until this atomic operation completes, any other read or write\n     * operation against the array will block.\n     */\n    or(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint;\n\n    /**\n     * Stores a value at the given position in the array, returning the new value. Until this\n     * atomic operation completes, any other read or write operation against the array will block.\n     */\n    store(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint;\n\n    /**\n     * Subtracts a value from the value at the given position in the array, returning the original\n     * value. Until this atomic operation completes, any other read or write operation against the\n     * array will block.\n     */\n    sub(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint;\n\n    /**\n     * If the value at the given position in the array is equal to the provided value, the current\n     * agent is put to sleep causing execution to suspend until the timeout expires (returning\n     * \\`\"timed-out\"\\`) or until the agent is awoken (returning \\`\"ok\"\\`); otherwise, returns\n     * \\`\"not-equal\"\\`.\n     */\n    wait(typedArray: BigInt64Array, index: number, value: bigint, timeout?: number): \"ok\" | \"not-equal\" | \"timed-out\";\n\n    /**\n     * Wakes up sleeping agents that are waiting on the given index of the array, returning the\n     * number of agents that were awoken.\n     * @param typedArray A shared BigInt64Array.\n     * @param index The position in the typedArray to wake up on.\n     * @param count The number of sleeping agents to notify. Defaults to +Infinity.\n     */\n    notify(typedArray: BigInt64Array, index: number, count?: number): number;\n\n    /**\n     * Stores the bitwise XOR of a value with the value at the given position in the array,\n     * returning the original value. Until this atomic operation completes, any other read or write\n     * operation against the array will block.\n     */\n    xor(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint;\n}\n`;$i[\"lib.es2020.string.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015.iterable\" />\n\ninterface String {\n    /**\n     * Matches a string with a regular expression, and returns an iterable of matches\n     * containing the results of that search.\n     * @param regexp A variable name or string literal containing the regular expression pattern and flags.\n     */\n    matchAll(regexp: RegExp): IterableIterator<RegExpMatchArray>;\n}\n`;$i[\"lib.es2020.symbol.wellknown.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015.iterable\" />\n/// <reference lib=\"es2015.symbol\" />\n\ninterface SymbolConstructor {\n    /**\n     * A regular expression method that matches the regular expression against a string. Called\n     * by the String.prototype.matchAll method.\n     */\n    readonly matchAll: unique symbol;\n}\n\ninterface RegExp {\n    /**\n     * Matches a string with this regular expression, and returns an iterable of matches\n     * containing the results of that search.\n     * @param string A string to search within.\n     */\n    [Symbol.matchAll](str: string): IterableIterator<RegExpMatchArray>;\n}\n`;$i[\"lib.es2021.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2020\" />\n/// <reference lib=\"es2021.promise\" />\n/// <reference lib=\"es2021.string\" />\n/// <reference lib=\"es2021.weakref\" />\n/// <reference lib=\"es2021.intl\" />\n`;$i[\"lib.es2021.full.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2021\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n/// <reference lib=\"dom.iterable\" />\n`;$i[\"lib.es2021.intl.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ndeclare namespace Intl {\n\n    interface DateTimeFormatPartTypesRegistry {\n        fractionalSecond: any\n     }\n\n    interface DateTimeFormatOptions {\n        formatMatcher?: \"basic\" | \"best fit\" | \"best fit\" | undefined;\n        dateStyle?: \"full\" | \"long\" | \"medium\" | \"short\" | undefined;\n        timeStyle?: \"full\" | \"long\" | \"medium\" | \"short\" | undefined;\n        dayPeriod?: \"narrow\" | \"short\" | \"long\" | undefined;\n        fractionalSecondDigits?: 1 | 2 | 3 | undefined;\n    }\n\n    interface DateTimeRangeFormatPart extends DateTimeFormatPart {\n        source: \"startRange\" | \"endRange\" | \"shared\"\n    }\n\n    interface DateTimeFormat {\n        formatRange(startDate: Date | number | bigint, endDate: Date | number | bigint): string;\n        formatRangeToParts(startDate: Date | number | bigint, endDate: Date | number | bigint): DateTimeRangeFormatPart[];\n    }\n\n    interface ResolvedDateTimeFormatOptions {\n        formatMatcher?: \"basic\" | \"best fit\" | \"best fit\";\n        dateStyle?: \"full\" | \"long\" | \"medium\" | \"short\";\n        timeStyle?: \"full\" | \"long\" | \"medium\" | \"short\";\n        hourCycle?: \"h11\" | \"h12\" | \"h23\" | \"h24\";\n        dayPeriod?: \"narrow\" | \"short\" | \"long\";\n        fractionalSecondDigits?: 1 | 2 | 3;\n    }\n\n    /**\n     * The locale matching algorithm to use.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/ListFormat#parameters).\n     */\n    type ListFormatLocaleMatcher = \"lookup\" | \"best fit\";\n\n    /**\n     * The format of output message.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/ListFormat#parameters).\n     */\n    type ListFormatType = \"conjunction\" | \"disjunction\" | \"unit\";\n\n    /**\n     * The length of the formatted message.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/ListFormat#parameters).\n     */\n    type ListFormatStyle = \"long\" | \"short\" | \"narrow\";\n\n    /**\n     * An object with some or all properties of the \\`Intl.ListFormat\\` constructor \\`options\\` parameter.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/ListFormat#parameters).\n     */\n    interface ListFormatOptions {\n        /** The locale matching algorithm to use. For information about this option, see [Intl page](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation). */\n        localeMatcher?: ListFormatLocaleMatcher | undefined;\n        /** The format of output message. */\n        type?: ListFormatType | undefined;\n        /** The length of the internationalized message. */\n        style?: ListFormatStyle | undefined;\n    }\n\n    interface ResolvedListFormatOptions {\n        locale: string;\n        style: ListFormatStyle;\n        type: ListFormatType;\n    }\n\n    interface ListFormat {\n        /**\n         * Returns a string with a language-specific representation of the list.\n         *\n         * @param list - An iterable object, such as an [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).\n         *\n         * @throws \\`TypeError\\` if \\`list\\` includes something other than the possible values.\n         *\n         * @returns {string} A language-specific formatted string representing the elements of the list.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/format).\n         */\n        format(list: Iterable<string>): string;\n\n        /**\n         * Returns an Array of objects representing the different components that can be used to format a list of values in a locale-aware fashion.\n         *\n         * @param list - An iterable object, such as an [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array), to be formatted according to a locale.\n         *\n         * @throws \\`TypeError\\` if \\`list\\` includes something other than the possible values.\n         *\n         * @returns {{ type: \"element\" | \"literal\", value: string; }[]} An Array of components which contains the formatted parts from the list.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/formatToParts).\n         */\n        formatToParts(list: Iterable<string>): { type: \"element\" | \"literal\", value: string; }[];\n\n        /**\n         * Returns a new object with properties reflecting the locale and style\n         * formatting options computed during the construction of the current\n         * \\`Intl.ListFormat\\` object.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/resolvedOptions).\n         */\n        resolvedOptions(): ResolvedListFormatOptions;\n    }\n\n    const ListFormat: {\n        prototype: ListFormat;\n\n        /**\n         * Creates [Intl.ListFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat) objects that\n         * enable language-sensitive list formatting.\n         *\n         * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n         *  For the general form and interpretation of the \\`locales\\` argument,\n         *  see the [\\`Intl\\` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n         *\n         * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/ListFormat#parameters)\n         *  with some or all options of \\`ListFormatOptions\\`.\n         *\n         * @returns [Intl.ListFormatOptions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat) object.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat).\n         */\n        new(locales?: BCP47LanguageTag | BCP47LanguageTag[], options?: ListFormatOptions): ListFormat;\n\n        /**\n         * Returns an array containing those of the provided locales that are\n         * supported in list formatting without having to fall back to the runtime's default locale.\n         *\n         * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n         *  For the general form and interpretation of the \\`locales\\` argument,\n         *  see the [\\`Intl\\` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n         *\n         * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/supportedLocalesOf#parameters).\n         *  with some or all possible options.\n         *\n         * @returns An array of strings representing a subset of the given locale tags that are supported in list\n         *  formatting without having to fall back to the runtime's default locale.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/supportedLocalesOf).\n         */\n        supportedLocalesOf(locales: BCP47LanguageTag | BCP47LanguageTag[], options?: Pick<ListFormatOptions, \"localeMatcher\">): BCP47LanguageTag[];\n    };\n}\n`;$i[\"lib.es2021.promise.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface AggregateError extends Error {\n    errors: any[]\n}\n\ninterface AggregateErrorConstructor {\n    new(errors: Iterable<any>, message?: string): AggregateError;\n    (errors: Iterable<any>, message?: string): AggregateError;\n    readonly prototype: AggregateError;\n}\n\ndeclare var AggregateError: AggregateErrorConstructor;\n\n/**\n * Represents the completion of an asynchronous operation\n */\ninterface PromiseConstructor {\n    /**\n     * The any function returns a promise that is fulfilled by the first given promise to be fulfilled, or rejected with an AggregateError containing an array of rejection reasons if all of the given promises are rejected. It resolves all elements of the passed iterable to promises as it runs this algorithm.\n     * @param values An array or iterable of Promises.\n     * @returns A new Promise.\n     */\n    any<T extends readonly unknown[] | []>(values: T): Promise<Awaited<T[number]>>;\n\n    /**\n     * The any function returns a promise that is fulfilled by the first given promise to be fulfilled, or rejected with an AggregateError containing an array of rejection reasons if all of the given promises are rejected. It resolves all elements of the passed iterable to promises as it runs this algorithm.\n     * @param values An array or iterable of Promises.\n     * @returns A new Promise.\n     */\n    any<T>(values: Iterable<T | PromiseLike<T>>): Promise<Awaited<T>>\n}\n`;$i[\"lib.es2021.string.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface String {\n    /**\n     * Replace all instances of a substring in a string, using a regular expression or search string.\n     * @param searchValue A string to search for.\n     * @param replaceValue A string containing the text to replace for every successful match of searchValue in this string.\n     */\n    replaceAll(searchValue: string | RegExp, replaceValue: string): string;\n\n    /**\n     * Replace all instances of a substring in a string, using a regular expression or search string.\n     * @param searchValue A string to search for.\n     * @param replacer A function that returns the replacement text.\n     */\n    replaceAll(searchValue: string | RegExp, replacer: (substring: string, ...args: any[]) => string): string;\n}\n`;$i[\"lib.es2021.weakref.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface WeakRef<T extends object> {\n    readonly [Symbol.toStringTag]: \"WeakRef\";\n\n    /**\n     * Returns the WeakRef instance's target object, or undefined if the target object has been\n     * reclaimed.\n     */\n    deref(): T | undefined;\n}\n\ninterface WeakRefConstructor {\n    readonly prototype: WeakRef<any>;\n\n    /**\n     * Creates a WeakRef instance for the given target object.\n     * @param target The target object for the WeakRef instance.\n     */\n    new<T extends object>(target: T): WeakRef<T>;\n}\n\ndeclare var WeakRef: WeakRefConstructor;\n\ninterface FinalizationRegistry<T> {\n    readonly [Symbol.toStringTag]: \"FinalizationRegistry\";\n\n    /**\n     * Registers an object with the registry.\n     * @param target The target object to register.\n     * @param heldValue The value to pass to the finalizer for this object. This cannot be the\n     * target object.\n     * @param unregisterToken The token to pass to the unregister method to unregister the target\n     * object. If provided (and not undefined), this must be an object. If not provided, the target\n     * cannot be unregistered.\n     */\n    register(target: object, heldValue: T, unregisterToken?: object): void;\n\n    /**\n     * Unregisters an object from the registry.\n     * @param unregisterToken The token that was used as the unregisterToken argument when calling\n     * register to register the target object.\n     */\n    unregister(unregisterToken: object): void;\n}\n\ninterface FinalizationRegistryConstructor {\n    readonly prototype: FinalizationRegistry<any>;\n\n    /**\n     * Creates a finalization registry with an associated cleanup callback\n     * @param cleanupCallback The callback to call after an object in the registry has been reclaimed.\n     */\n    new<T>(cleanupCallback: (heldValue: T) => void): FinalizationRegistry<T>;\n}\n\ndeclare var FinalizationRegistry: FinalizationRegistryConstructor;\n`;$i[\"lib.es2022.array.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface Array<T> {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): T | undefined;\n}\n\ninterface ReadonlyArray<T> {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): T | undefined;\n}\n\ninterface Int8Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): number | undefined;\n}\n\ninterface Uint8Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): number | undefined;\n}\n\ninterface Uint8ClampedArray {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): number | undefined;\n}\n\ninterface Int16Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): number | undefined;\n}\n\ninterface Uint16Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): number | undefined;\n}\n\ninterface Int32Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): number | undefined;\n}\n\ninterface Uint32Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): number | undefined;\n}\n\ninterface Float32Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): number | undefined;\n}\n\ninterface Float64Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): number | undefined;\n}\n\ninterface BigInt64Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): bigint | undefined;\n}\n\ninterface BigUint64Array {\n    /**\n     * Returns the item located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): bigint | undefined;\n}\n`;$i[\"lib.es2022.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2021\" />\n/// <reference lib=\"es2022.array\" />\n/// <reference lib=\"es2022.error\" />\n/// <reference lib=\"es2022.intl\" />\n/// <reference lib=\"es2022.object\" />\n/// <reference lib=\"es2022.sharedmemory\" />\n/// <reference lib=\"es2022.string\" />\n/// <reference lib=\"es2022.regexp\" />\n`;$i[\"lib.es2022.error.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface ErrorOptions {\n    cause?: unknown;\n}\n\ninterface Error {\n    cause?: unknown;\n}\n\ninterface ErrorConstructor {\n    new (message?: string, options?: ErrorOptions): Error;\n    (message?: string, options?: ErrorOptions): Error;\n}\n\ninterface EvalErrorConstructor {\n    new (message?: string, options?: ErrorOptions): EvalError;\n    (message?: string, options?: ErrorOptions): EvalError;\n}\n\ninterface RangeErrorConstructor {\n    new (message?: string, options?: ErrorOptions): RangeError;\n    (message?: string, options?: ErrorOptions): RangeError;\n}\n\ninterface ReferenceErrorConstructor {\n    new (message?: string, options?: ErrorOptions): ReferenceError;\n    (message?: string, options?: ErrorOptions): ReferenceError;\n}\n\ninterface SyntaxErrorConstructor {\n    new (message?: string, options?: ErrorOptions): SyntaxError;\n    (message?: string, options?: ErrorOptions): SyntaxError;\n}\n\ninterface TypeErrorConstructor {\n    new (message?: string, options?: ErrorOptions): TypeError;\n    (message?: string, options?: ErrorOptions): TypeError;\n}\n\ninterface URIErrorConstructor {\n    new (message?: string, options?: ErrorOptions): URIError;\n    (message?: string, options?: ErrorOptions): URIError;\n}\n\ninterface AggregateErrorConstructor {\n    new (\n        errors: Iterable<any>,\n        message?: string,\n        options?: ErrorOptions\n    ): AggregateError;\n    (\n        errors: Iterable<any>,\n        message?: string,\n        options?: ErrorOptions\n    ): AggregateError;\n}\n`;$i[\"lib.es2022.full.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2022\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n/// <reference lib=\"dom.iterable\" />\n`;$i[\"lib.es2022.intl.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ndeclare namespace Intl {\n\n    /**\n     * An object with some or all properties of the \\`Intl.Segmenter\\` constructor \\`options\\` parameter.\n     *\n     * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters)\n     */\n    interface SegmenterOptions {\n        /** The locale matching algorithm to use. For information about this option, see [Intl page](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation). */\n        localeMatcher?: \"best fit\" | \"lookup\" | undefined;\n        /** The type of input to be split */\n        granularity?: \"grapheme\" | \"word\" | \"sentence\" | undefined;\n    }\n\n    interface Segmenter {\n        /**\n         * Returns \\`Segments\\` object containing the segments of the input string, using the segmenter's locale and granularity.\n         *\n         * @param input - The text to be segmented as a \\`string\\`.\n         *\n         * @returns A new iterable Segments object containing the segments of the input string, using the segmenter's locale and granularity.\n         */\n        segment(input: string): Segments;\n        resolvedOptions(): ResolvedSegmenterOptions;\n    }\n\n    interface ResolvedSegmenterOptions {\n        locale: string;\n        granularity: \"grapheme\" | \"word\" | \"sentence\";\n    }\n\n    interface Segments {\n        /**\n         * Returns an object describing the segment in the original string that includes the code unit at a specified index.\n         *\n         * @param codeUnitIndex - A number specifying the index of the code unit in the original input string. If the value is omitted, it defaults to \\`0\\`.\n         */\n        containing(codeUnitIndex?: number): SegmentData;\n\n        /** Returns an iterator to iterate over the segments. */\n        [Symbol.iterator](): IterableIterator<SegmentData>;\n    }\n\n    interface SegmentData {\n        /** A string containing the segment extracted from the original input string. */\n        segment: string;\n        /** The code unit index in the original input string at which the segment begins. */\n        index: number;\n        /** The complete input string that was segmented. */\n        input: string;\n        /**\n         * A boolean value only if granularity is \"word\"; otherwise, undefined.\n         * If granularity is \"word\", then isWordLike is true when the segment is word-like (i.e., consists of letters/numbers/ideographs/etc.); otherwise, false.\n         */\n        isWordLike?: boolean;\n    }\n\n    const Segmenter: {\n        prototype: Segmenter;\n\n        /**\n         * Creates a new \\`Intl.Segmenter\\` object.\n         *\n         * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n         *  For the general form and interpretation of the \\`locales\\` argument,\n         *  see the [\\`Intl\\` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n         *\n         * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters)\n         *  with some or all options of \\`SegmenterOptions\\`.\n         *\n         * @returns [Intl.Segmenter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segments) object.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter).\n         */\n        new(locales?: BCP47LanguageTag | BCP47LanguageTag[], options?: SegmenterOptions): Segmenter;\n\n        /**\n         * Returns an array containing those of the provided locales that are supported without having to fall back to the runtime's default locale.\n         *\n         * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n         *  For the general form and interpretation of the \\`locales\\` argument,\n         *  see the [\\`Intl\\` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n         *\n         * @param options An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/supportedLocalesOf#parameters).\n         *  with some or all possible options.\n         *\n         * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/supportedLocalesOf)\n         */\n        supportedLocalesOf(locales: BCP47LanguageTag | BCP47LanguageTag[], options?: Pick<SegmenterOptions, \"localeMatcher\">): BCP47LanguageTag[];\n    };\n}\n`;$i[\"lib.es2022.object.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface ObjectConstructor {\n    /**\n     * Determines whether an object has a property with the specified name.\n     * @param o An object.\n     * @param v A property name.\n     */\n    hasOwn(o: object, v: PropertyKey): boolean;\n}\n`;$i[\"lib.es2022.regexp.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface RegExpMatchArray {\n    indices?: RegExpIndicesArray;\n}\n\ninterface RegExpExecArray {\n    indices?: RegExpIndicesArray;\n}\n\ninterface RegExpIndicesArray extends Array<[number, number]> {\n    groups?: {\n        [key: string]: [number, number];\n    };\n}\n\ninterface RegExp {\n    /**\n     * Returns a Boolean value indicating the state of the hasIndices flag (d) used with with a regular expression.\n     * Default is false. Read-only.\n     */\n    readonly hasIndices: boolean;\n}\n`;$i[\"lib.es2022.sharedmemory.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface Atomics {\n    /**\n     * A non-blocking, asynchronous version of wait which is usable on the main thread.\n     * Waits asynchronously on a shared memory location and returns a Promise\n     * @param typedArray A shared Int32Array or BigInt64Array.\n     * @param index The position in the typedArray to wait on.\n     * @param value The expected value to test.\n     * @param [timeout] The expected value to test.\n     */\n    waitAsync(typedArray: Int32Array, index: number, value: number, timeout?: number): { async: false, value: \"not-equal\" | \"timed-out\" } | { async: true, value: Promise<\"ok\" | \"timed-out\"> };\n\n    /**\n     * A non-blocking, asynchronous version of wait which is usable on the main thread.\n     * Waits asynchronously on a shared memory location and returns a Promise\n     * @param typedArray A shared Int32Array or BigInt64Array.\n     * @param index The position in the typedArray to wait on.\n     * @param value The expected value to test.\n     * @param [timeout] The expected value to test.\n     */\n    waitAsync(typedArray: BigInt64Array, index: number, value: bigint, timeout?: number): { async: false, value: \"not-equal\" | \"timed-out\" } | { async: true, value: Promise<\"ok\" | \"timed-out\"> };\n}\n`;$i[\"lib.es2022.string.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface String {\n    /**\n     * Returns a new String consisting of the single UTF-16 code unit located at the specified index.\n     * @param index The zero-based index of the desired code unit. A negative index will count back from the last item.\n     */\n    at(index: number): string | undefined;\n}\n`;$i[\"lib.es2023.array.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ninterface Array<T> {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): number;\n}\n\ninterface ReadonlyArray<T> {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends T>(predicate: (value: T, index: number, array: readonly T[]) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): T | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): number;\n}\n\ninterface Int8Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends number>(predicate: (value: number, index: number, array: Int8Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: number, index: number, array: Int8Array) => unknown, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: number, index: number, array: Int8Array) => unknown, thisArg?: any): number;\n}\n\ninterface Uint8Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends number>(predicate: (value: number, index: number, array: Uint8Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: number, index: number, array: Uint8Array) => unknown, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: number, index: number, array: Uint8Array) => unknown, thisArg?: any): number;\n}\n\ninterface Uint8ClampedArray {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends number>(predicate: (value: number, index: number, array: Uint8ClampedArray) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: number, index: number, array: Uint8ClampedArray) => unknown, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: number, index: number, array: Uint8ClampedArray) => unknown, thisArg?: any): number;\n}\n\ninterface Int16Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends number>(predicate: (value: number, index: number, array: Int16Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: number, index: number, array: Int16Array) => unknown, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: number, index: number, array: Int16Array) => unknown, thisArg?: any): number;\n}\n\ninterface Uint16Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends number>(predicate: (value: number, index: number, array: Uint16Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: number, index: number, array: Uint16Array) => unknown, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: number, index: number, array: Uint16Array) => unknown, thisArg?: any): number;\n}\n\ninterface Int32Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends number>(predicate: (value: number, index: number, array: Int32Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: number, index: number, array: Int32Array) => unknown, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: number, index: number, array: Int32Array) => unknown, thisArg?: any): number;\n}\n\ninterface Uint32Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends number>(predicate: (value: number, index: number, array: Uint32Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: number, index: number, array: Uint32Array) => unknown, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: number, index: number, array: Uint32Array) => unknown, thisArg?: any): number;\n}\n\ninterface Float32Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends number>(predicate: (value: number, index: number, array: Float32Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: number, index: number, array: Float32Array) => unknown, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: number, index: number, array: Float32Array) => unknown, thisArg?: any): number;\n}\n\ninterface Float64Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends number>(predicate: (value: number, index: number, array: Float64Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: number, index: number, array: Float64Array) => unknown, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: number, index: number, array: Float64Array) => unknown, thisArg?: any): number;\n}\n\ninterface BigInt64Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends bigint>(predicate: (value: bigint, index: number, array: BigInt64Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: bigint, index: number, array: BigInt64Array) => unknown, thisArg?: any): bigint | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: bigint, index: number, array: BigInt64Array) => unknown, thisArg?: any): number;\n}\n\ninterface BigUint64Array {\n    /**\n     * Returns the value of the last element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate findLast calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found, findLast\n     * immediately returns that element value. Otherwise, findLast returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLast<S extends bigint>(predicate: (value: bigint, index: number, array: BigUint64Array) => value is S, thisArg?: any): S | undefined;\n    findLast(predicate: (value: bigint, index: number, array: BigUint64Array) => unknown, thisArg?: any): bigint | undefined;\n\n    /**\n     * Returns the index of the last element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate findLastIndex calls predicate once for each element of the array, in descending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findLastIndex(predicate: (value: bigint, index: number, array: BigUint64Array) => unknown, thisArg?: any): number;\n}\n`;$i[\"lib.es2023.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2022\" />\n/// <reference lib=\"es2023.array\" />\n`;$i[\"lib.es2023.full.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2023\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n/// <reference lib=\"dom.iterable\" />\n`;$i[\"lib.es5.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"decorators\" />\n/// <reference lib=\"decorators.legacy\" />\n\n/////////////////////////////\n/// ECMAScript APIs\n/////////////////////////////\n\ndeclare var NaN: number;\ndeclare var Infinity: number;\n\n/**\n * Evaluates JavaScript code and executes it.\n * @param x A String value that contains valid JavaScript code.\n */\ndeclare function eval(x: string): any;\n\n/**\n * Converts a string to an integer.\n * @param string A string to convert into a number.\n * @param radix A value between 2 and 36 that specifies the base of the number in \\`string\\`.\n * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.\n * All other strings are considered decimal.\n */\ndeclare function parseInt(string: string, radix?: number): number;\n\n/**\n * Converts a string to a floating-point number.\n * @param string A string that contains a floating-point number.\n */\ndeclare function parseFloat(string: string): number;\n\n/**\n * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number).\n * @param number A numeric value.\n */\ndeclare function isNaN(number: number): boolean;\n\n/**\n * Determines whether a supplied number is finite.\n * @param number Any numeric value.\n */\ndeclare function isFinite(number: number): boolean;\n\n/**\n * Gets the unencoded version of an encoded Uniform Resource Identifier (URI).\n * @param encodedURI A value representing an encoded URI.\n */\ndeclare function decodeURI(encodedURI: string): string;\n\n/**\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n * @param encodedURIComponent A value representing an encoded URI component.\n */\ndeclare function decodeURIComponent(encodedURIComponent: string): string;\n\n/**\n * Encodes a text string as a valid Uniform Resource Identifier (URI)\n * @param uri A value representing an unencoded URI.\n */\ndeclare function encodeURI(uri: string): string;\n\n/**\n * Encodes a text string as a valid component of a Uniform Resource Identifier (URI).\n * @param uriComponent A value representing an unencoded URI component.\n */\ndeclare function encodeURIComponent(uriComponent: string | number | boolean): string;\n\n/**\n * Computes a new string in which certain characters have been replaced by a hexadecimal escape sequence.\n * @deprecated A legacy feature for browser compatibility\n * @param string A string value\n */\ndeclare function escape(string: string): string;\n\n/**\n * Computes a new string in which hexadecimal escape sequences are replaced with the character that it represents.\n * @deprecated A legacy feature for browser compatibility\n * @param string A string value\n */\ndeclare function unescape(string: string): string;\n\ninterface Symbol {\n    /** Returns a string representation of an object. */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): symbol;\n}\n\ndeclare type PropertyKey = string | number | symbol;\n\ninterface PropertyDescriptor {\n    configurable?: boolean;\n    enumerable?: boolean;\n    value?: any;\n    writable?: boolean;\n    get?(): any;\n    set?(v: any): void;\n}\n\ninterface PropertyDescriptorMap {\n    [key: PropertyKey]: PropertyDescriptor;\n}\n\ninterface Object {\n    /** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */\n    constructor: Function;\n\n    /** Returns a string representation of an object. */\n    toString(): string;\n\n    /** Returns a date converted to a string using the current locale. */\n    toLocaleString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Object;\n\n    /**\n     * Determines whether an object has a property with the specified name.\n     * @param v A property name.\n     */\n    hasOwnProperty(v: PropertyKey): boolean;\n\n    /**\n     * Determines whether an object exists in another object's prototype chain.\n     * @param v Another object whose prototype chain is to be checked.\n     */\n    isPrototypeOf(v: Object): boolean;\n\n    /**\n     * Determines whether a specified property is enumerable.\n     * @param v A property name.\n     */\n    propertyIsEnumerable(v: PropertyKey): boolean;\n}\n\ninterface ObjectConstructor {\n    new(value?: any): Object;\n    (): any;\n    (value: any): any;\n\n    /** A reference to the prototype for a class of objects. */\n    readonly prototype: Object;\n\n    /**\n     * Returns the prototype of an object.\n     * @param o The object that references the prototype.\n     */\n    getPrototypeOf(o: any): any;\n\n    /**\n     * Gets the own property descriptor of the specified object.\n     * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype.\n     * @param o Object that contains the property.\n     * @param p Name of the property.\n     */\n    getOwnPropertyDescriptor(o: any, p: PropertyKey): PropertyDescriptor | undefined;\n\n    /**\n     * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly\n     * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.\n     * @param o Object that contains the own properties.\n     */\n    getOwnPropertyNames(o: any): string[];\n\n    /**\n     * Creates an object that has the specified prototype or that has null prototype.\n     * @param o Object to use as a prototype. May be null.\n     */\n    create(o: object | null): any;\n\n    /**\n     * Creates an object that has the specified prototype, and that optionally contains specified properties.\n     * @param o Object to use as a prototype. May be null\n     * @param properties JavaScript object that contains one or more property descriptors.\n     */\n    create(o: object | null, properties: PropertyDescriptorMap & ThisType<any>): any;\n\n    /**\n     * Adds a property to an object, or modifies attributes of an existing property.\n     * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object.\n     * @param p The property name.\n     * @param attributes Descriptor for the property. It can be for a data property or an accessor property.\n     */\n    defineProperty<T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>): T;\n\n    /**\n     * Adds one or more properties to an object, and/or modifies attributes of existing properties.\n     * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object.\n     * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property.\n     */\n    defineProperties<T>(o: T, properties: PropertyDescriptorMap & ThisType<any>): T;\n\n    /**\n     * Prevents the modification of attributes of existing properties, and prevents the addition of new properties.\n     * @param o Object on which to lock the attributes.\n     */\n    seal<T>(o: T): T;\n\n    /**\n     * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\n     * @param f Object on which to lock the attributes.\n     */\n    freeze<T extends Function>(f: T): T;\n\n    /**\n     * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\n     * @param o Object on which to lock the attributes.\n     */\n    freeze<T extends {[idx: string]: U | null | undefined | object}, U extends string | bigint | number | boolean | symbol>(o: T): Readonly<T>;\n\n    /**\n     * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.\n     * @param o Object on which to lock the attributes.\n     */\n    freeze<T>(o: T): Readonly<T>;\n\n    /**\n     * Prevents the addition of new properties to an object.\n     * @param o Object to make non-extensible.\n     */\n    preventExtensions<T>(o: T): T;\n\n    /**\n     * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object.\n     * @param o Object to test.\n     */\n    isSealed(o: any): boolean;\n\n    /**\n     * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object.\n     * @param o Object to test.\n     */\n    isFrozen(o: any): boolean;\n\n    /**\n     * Returns a value that indicates whether new properties can be added to an object.\n     * @param o Object to test.\n     */\n    isExtensible(o: any): boolean;\n\n    /**\n     * Returns the names of the enumerable string properties and methods of an object.\n     * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\n     */\n    keys(o: object): string[];\n}\n\n/**\n * Provides functionality common to all JavaScript objects.\n */\ndeclare var Object: ObjectConstructor;\n\n/**\n * Creates a new function.\n */\ninterface Function {\n    /**\n     * Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function.\n     * @param thisArg The object to be used as the this object.\n     * @param argArray A set of arguments to be passed to the function.\n     */\n    apply(this: Function, thisArg: any, argArray?: any): any;\n\n    /**\n     * Calls a method of an object, substituting another object for the current object.\n     * @param thisArg The object to be used as the current object.\n     * @param argArray A list of arguments to be passed to the method.\n     */\n    call(this: Function, thisArg: any, ...argArray: any[]): any;\n\n    /**\n     * For a given function, creates a bound function that has the same body as the original function.\n     * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\n     * @param thisArg An object to which the this keyword can refer inside the new function.\n     * @param argArray A list of arguments to be passed to the new function.\n     */\n    bind(this: Function, thisArg: any, ...argArray: any[]): any;\n\n    /** Returns a string representation of a function. */\n    toString(): string;\n\n    prototype: any;\n    readonly length: number;\n\n    // Non-standard extensions\n    arguments: any;\n    caller: Function;\n}\n\ninterface FunctionConstructor {\n    /**\n     * Creates a new function.\n     * @param args A list of arguments the function accepts.\n     */\n    new(...args: string[]): Function;\n    (...args: string[]): Function;\n    readonly prototype: Function;\n}\n\ndeclare var Function: FunctionConstructor;\n\n/**\n * Extracts the type of the 'this' parameter of a function type, or 'unknown' if the function type has no 'this' parameter.\n */\ntype ThisParameterType<T> = T extends (this: infer U, ...args: never) => any ? U : unknown;\n\n/**\n * Removes the 'this' parameter from a function type.\n */\ntype OmitThisParameter<T> = unknown extends ThisParameterType<T> ? T : T extends (...args: infer A) => infer R ? (...args: A) => R : T;\n\ninterface CallableFunction extends Function {\n    /**\n     * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\n     * @param thisArg The object to be used as the this object.\n     * @param args An array of argument values to be passed to the function.\n     */\n    apply<T, R>(this: (this: T) => R, thisArg: T): R;\n    apply<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg: T, args: A): R;\n\n    /**\n     * Calls the function with the specified object as the this value and the specified rest arguments as the arguments.\n     * @param thisArg The object to be used as the this object.\n     * @param args Argument values to be passed to the function.\n     */\n    call<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg: T, ...args: A): R;\n\n    /**\n     * For a given function, creates a bound function that has the same body as the original function.\n     * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\n     * @param thisArg The object to be used as the this object.\n     * @param args Arguments to bind to the parameters of the function.\n     */\n    bind<T>(this: T, thisArg: ThisParameterType<T>): OmitThisParameter<T>;\n    bind<T, A0, A extends any[], R>(this: (this: T, arg0: A0, ...args: A) => R, thisArg: T, arg0: A0): (...args: A) => R;\n    bind<T, A0, A1, A extends any[], R>(this: (this: T, arg0: A0, arg1: A1, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1): (...args: A) => R;\n    bind<T, A0, A1, A2, A extends any[], R>(this: (this: T, arg0: A0, arg1: A1, arg2: A2, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2): (...args: A) => R;\n    bind<T, A0, A1, A2, A3, A extends any[], R>(this: (this: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3, ...args: A) => R, thisArg: T, arg0: A0, arg1: A1, arg2: A2, arg3: A3): (...args: A) => R;\n    bind<T, AX, R>(this: (this: T, ...args: AX[]) => R, thisArg: T, ...args: AX[]): (...args: AX[]) => R;\n}\n\ninterface NewableFunction extends Function {\n    /**\n     * Calls the function with the specified object as the this value and the elements of specified array as the arguments.\n     * @param thisArg The object to be used as the this object.\n     * @param args An array of argument values to be passed to the function.\n     */\n    apply<T>(this: new () => T, thisArg: T): void;\n    apply<T, A extends any[]>(this: new (...args: A) => T, thisArg: T, args: A): void;\n\n    /**\n     * Calls the function with the specified object as the this value and the specified rest arguments as the arguments.\n     * @param thisArg The object to be used as the this object.\n     * @param args Argument values to be passed to the function.\n     */\n    call<T, A extends any[]>(this: new (...args: A) => T, thisArg: T, ...args: A): void;\n\n    /**\n     * For a given function, creates a bound function that has the same body as the original function.\n     * The this object of the bound function is associated with the specified object, and has the specified initial parameters.\n     * @param thisArg The object to be used as the this object.\n     * @param args Arguments to bind to the parameters of the function.\n     */\n    bind<T>(this: T, thisArg: any): T;\n    bind<A0, A extends any[], R>(this: new (arg0: A0, ...args: A) => R, thisArg: any, arg0: A0): new (...args: A) => R;\n    bind<A0, A1, A extends any[], R>(this: new (arg0: A0, arg1: A1, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1): new (...args: A) => R;\n    bind<A0, A1, A2, A extends any[], R>(this: new (arg0: A0, arg1: A1, arg2: A2, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1, arg2: A2): new (...args: A) => R;\n    bind<A0, A1, A2, A3, A extends any[], R>(this: new (arg0: A0, arg1: A1, arg2: A2, arg3: A3, ...args: A) => R, thisArg: any, arg0: A0, arg1: A1, arg2: A2, arg3: A3): new (...args: A) => R;\n    bind<AX, R>(this: new (...args: AX[]) => R, thisArg: any, ...args: AX[]): new (...args: AX[]) => R;\n}\n\ninterface IArguments {\n    [index: number]: any;\n    length: number;\n    callee: Function;\n}\n\ninterface String {\n    /** Returns a string representation of a string. */\n    toString(): string;\n\n    /**\n     * Returns the character at the specified index.\n     * @param pos The zero-based index of the desired character.\n     */\n    charAt(pos: number): string;\n\n    /**\n     * Returns the Unicode value of the character at the specified location.\n     * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.\n     */\n    charCodeAt(index: number): number;\n\n    /**\n     * Returns a string that contains the concatenation of two or more strings.\n     * @param strings The strings to append to the end of the string.\n     */\n    concat(...strings: string[]): string;\n\n    /**\n     * Returns the position of the first occurrence of a substring.\n     * @param searchString The substring to search for in the string\n     * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.\n     */\n    indexOf(searchString: string, position?: number): number;\n\n    /**\n     * Returns the last occurrence of a substring in the string.\n     * @param searchString The substring to search for.\n     * @param position The index at which to begin searching. If omitted, the search begins at the end of the string.\n     */\n    lastIndexOf(searchString: string, position?: number): number;\n\n    /**\n     * Determines whether two strings are equivalent in the current locale.\n     * @param that String to compare to target string\n     */\n    localeCompare(that: string): number;\n\n    /**\n     * Matches a string with a regular expression, and returns an array containing the results of that search.\n     * @param regexp A variable name or string literal containing the regular expression pattern and flags.\n     */\n    match(regexp: string | RegExp): RegExpMatchArray | null;\n\n    /**\n     * Replaces text in a string, using a regular expression or search string.\n     * @param searchValue A string or regular expression to search for.\n     * @param replaceValue A string containing the text to replace. When the {@linkcode searchValue} is a \\`RegExp\\`, all matches are replaced if the \\`g\\` flag is set (or only those matches at the beginning, if the \\`y\\` flag is also present). Otherwise, only the first match of {@linkcode searchValue} is replaced.\n     */\n    replace(searchValue: string | RegExp, replaceValue: string): string;\n\n    /**\n     * Replaces text in a string, using a regular expression or search string.\n     * @param searchValue A string to search for.\n     * @param replacer A function that returns the replacement text.\n     */\n    replace(searchValue: string | RegExp, replacer: (substring: string, ...args: any[]) => string): string;\n\n    /**\n     * Finds the first substring match in a regular expression search.\n     * @param regexp The regular expression pattern and applicable flags.\n     */\n    search(regexp: string | RegExp): number;\n\n    /**\n     * Returns a section of a string.\n     * @param start The index to the beginning of the specified portion of stringObj.\n     * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end.\n     * If this value is not specified, the substring continues to the end of stringObj.\n     */\n    slice(start?: number, end?: number): string;\n\n    /**\n     * Split a string into substrings using the specified separator and return them as an array.\n     * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned.\n     * @param limit A value used to limit the number of elements returned in the array.\n     */\n    split(separator: string | RegExp, limit?: number): string[];\n\n    /**\n     * Returns the substring at the specified location within a String object.\n     * @param start The zero-based index number indicating the beginning of the substring.\n     * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.\n     * If end is omitted, the characters from start through the end of the original string are returned.\n     */\n    substring(start: number, end?: number): string;\n\n    /** Converts all the alphabetic characters in a string to lowercase. */\n    toLowerCase(): string;\n\n    /** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */\n    toLocaleLowerCase(locales?: string | string[]): string;\n\n    /** Converts all the alphabetic characters in a string to uppercase. */\n    toUpperCase(): string;\n\n    /** Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. */\n    toLocaleUpperCase(locales?: string | string[]): string;\n\n    /** Removes the leading and trailing white space and line terminator characters from a string. */\n    trim(): string;\n\n    /** Returns the length of a String object. */\n    readonly length: number;\n\n    // IE extensions\n    /**\n     * Gets a substring beginning at the specified location and having the specified length.\n     * @deprecated A legacy feature for browser compatibility\n     * @param from The starting position of the desired substring. The index of the first character in the string is zero.\n     * @param length The number of characters to include in the returned substring.\n     */\n    substr(from: number, length?: number): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): string;\n\n    readonly [index: number]: string;\n}\n\ninterface StringConstructor {\n    new(value?: any): String;\n    (value?: any): string;\n    readonly prototype: String;\n    fromCharCode(...codes: number[]): string;\n}\n\n/**\n * Allows manipulation and formatting of text strings and determination and location of substrings within strings.\n */\ndeclare var String: StringConstructor;\n\ninterface Boolean {\n    /** Returns the primitive value of the specified object. */\n    valueOf(): boolean;\n}\n\ninterface BooleanConstructor {\n    new(value?: any): Boolean;\n    <T>(value?: T): boolean;\n    readonly prototype: Boolean;\n}\n\ndeclare var Boolean: BooleanConstructor;\n\ninterface Number {\n    /**\n     * Returns a string representation of an object.\n     * @param radix Specifies a radix for converting numeric values to strings. This value is only used for numbers.\n     */\n    toString(radix?: number): string;\n\n    /**\n     * Returns a string representing a number in fixed-point notation.\n     * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.\n     */\n    toFixed(fractionDigits?: number): string;\n\n    /**\n     * Returns a string containing a number represented in exponential notation.\n     * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.\n     */\n    toExponential(fractionDigits?: number): string;\n\n    /**\n     * Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.\n     * @param precision Number of significant digits. Must be in the range 1 - 21, inclusive.\n     */\n    toPrecision(precision?: number): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): number;\n}\n\ninterface NumberConstructor {\n    new(value?: any): Number;\n    (value?: any): number;\n    readonly prototype: Number;\n\n    /** The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308. */\n    readonly MAX_VALUE: number;\n\n    /** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */\n    readonly MIN_VALUE: number;\n\n    /**\n     * A value that is not a number.\n     * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.\n     */\n    readonly NaN: number;\n\n    /**\n     * A value that is less than the largest negative number that can be represented in JavaScript.\n     * JavaScript displays NEGATIVE_INFINITY values as -infinity.\n     */\n    readonly NEGATIVE_INFINITY: number;\n\n    /**\n     * A value greater than the largest number that can be represented in JavaScript.\n     * JavaScript displays POSITIVE_INFINITY values as infinity.\n     */\n    readonly POSITIVE_INFINITY: number;\n}\n\n/** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */\ndeclare var Number: NumberConstructor;\n\ninterface TemplateStringsArray extends ReadonlyArray<string> {\n    readonly raw: readonly string[];\n}\n\n/**\n * The type of \\`import.meta\\`.\n *\n * If you need to declare that a given property exists on \\`import.meta\\`,\n * this type may be augmented via interface merging.\n */\ninterface ImportMeta {\n}\n\n/**\n * The type for the optional second argument to \\`import()\\`.\n *\n * If your host environment supports additional options, this type may be\n * augmented via interface merging.\n */\ninterface ImportCallOptions {\n    assert?: ImportAssertions;\n}\n\n/**\n * The type for the \\`assert\\` property of the optional second argument to \\`import()\\`.\n */\ninterface ImportAssertions {\n    [key: string]: string;\n}\n\ninterface Math {\n    /** The mathematical constant e. This is Euler's number, the base of natural logarithms. */\n    readonly E: number;\n    /** The natural logarithm of 10. */\n    readonly LN10: number;\n    /** The natural logarithm of 2. */\n    readonly LN2: number;\n    /** The base-2 logarithm of e. */\n    readonly LOG2E: number;\n    /** The base-10 logarithm of e. */\n    readonly LOG10E: number;\n    /** Pi. This is the ratio of the circumference of a circle to its diameter. */\n    readonly PI: number;\n    /** The square root of 0.5, or, equivalently, one divided by the square root of 2. */\n    readonly SQRT1_2: number;\n    /** The square root of 2. */\n    readonly SQRT2: number;\n    /**\n     * Returns the absolute value of a number (the value without regard to whether it is positive or negative).\n     * For example, the absolute value of -5 is the same as the absolute value of 5.\n     * @param x A numeric expression for which the absolute value is needed.\n     */\n    abs(x: number): number;\n    /**\n     * Returns the arc cosine (or inverse cosine) of a number.\n     * @param x A numeric expression.\n     */\n    acos(x: number): number;\n    /**\n     * Returns the arcsine of a number.\n     * @param x A numeric expression.\n     */\n    asin(x: number): number;\n    /**\n     * Returns the arctangent of a number.\n     * @param x A numeric expression for which the arctangent is needed.\n     */\n    atan(x: number): number;\n    /**\n     * Returns the angle (in radians) from the X axis to a point.\n     * @param y A numeric expression representing the cartesian y-coordinate.\n     * @param x A numeric expression representing the cartesian x-coordinate.\n     */\n    atan2(y: number, x: number): number;\n    /**\n     * Returns the smallest integer greater than or equal to its numeric argument.\n     * @param x A numeric expression.\n     */\n    ceil(x: number): number;\n    /**\n     * Returns the cosine of a number.\n     * @param x A numeric expression that contains an angle measured in radians.\n     */\n    cos(x: number): number;\n    /**\n     * Returns e (the base of natural logarithms) raised to a power.\n     * @param x A numeric expression representing the power of e.\n     */\n    exp(x: number): number;\n    /**\n     * Returns the greatest integer less than or equal to its numeric argument.\n     * @param x A numeric expression.\n     */\n    floor(x: number): number;\n    /**\n     * Returns the natural logarithm (base e) of a number.\n     * @param x A numeric expression.\n     */\n    log(x: number): number;\n    /**\n     * Returns the larger of a set of supplied numeric expressions.\n     * @param values Numeric expressions to be evaluated.\n     */\n    max(...values: number[]): number;\n    /**\n     * Returns the smaller of a set of supplied numeric expressions.\n     * @param values Numeric expressions to be evaluated.\n     */\n    min(...values: number[]): number;\n    /**\n     * Returns the value of a base expression taken to a specified power.\n     * @param x The base value of the expression.\n     * @param y The exponent value of the expression.\n     */\n    pow(x: number, y: number): number;\n    /** Returns a pseudorandom number between 0 and 1. */\n    random(): number;\n    /**\n     * Returns a supplied numeric expression rounded to the nearest integer.\n     * @param x The value to be rounded to the nearest integer.\n     */\n    round(x: number): number;\n    /**\n     * Returns the sine of a number.\n     * @param x A numeric expression that contains an angle measured in radians.\n     */\n    sin(x: number): number;\n    /**\n     * Returns the square root of a number.\n     * @param x A numeric expression.\n     */\n    sqrt(x: number): number;\n    /**\n     * Returns the tangent of a number.\n     * @param x A numeric expression that contains an angle measured in radians.\n     */\n    tan(x: number): number;\n}\n/** An intrinsic object that provides basic mathematics functionality and constants. */\ndeclare var Math: Math;\n\n/** Enables basic storage and retrieval of dates and times. */\ninterface Date {\n    /** Returns a string representation of a date. The format of the string depends on the locale. */\n    toString(): string;\n    /** Returns a date as a string value. */\n    toDateString(): string;\n    /** Returns a time as a string value. */\n    toTimeString(): string;\n    /** Returns a value as a string value appropriate to the host environment's current locale. */\n    toLocaleString(): string;\n    /** Returns a date as a string value appropriate to the host environment's current locale. */\n    toLocaleDateString(): string;\n    /** Returns a time as a string value appropriate to the host environment's current locale. */\n    toLocaleTimeString(): string;\n    /** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */\n    valueOf(): number;\n    /** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */\n    getTime(): number;\n    /** Gets the year, using local time. */\n    getFullYear(): number;\n    /** Gets the year using Universal Coordinated Time (UTC). */\n    getUTCFullYear(): number;\n    /** Gets the month, using local time. */\n    getMonth(): number;\n    /** Gets the month of a Date object using Universal Coordinated Time (UTC). */\n    getUTCMonth(): number;\n    /** Gets the day-of-the-month, using local time. */\n    getDate(): number;\n    /** Gets the day-of-the-month, using Universal Coordinated Time (UTC). */\n    getUTCDate(): number;\n    /** Gets the day of the week, using local time. */\n    getDay(): number;\n    /** Gets the day of the week using Universal Coordinated Time (UTC). */\n    getUTCDay(): number;\n    /** Gets the hours in a date, using local time. */\n    getHours(): number;\n    /** Gets the hours value in a Date object using Universal Coordinated Time (UTC). */\n    getUTCHours(): number;\n    /** Gets the minutes of a Date object, using local time. */\n    getMinutes(): number;\n    /** Gets the minutes of a Date object using Universal Coordinated Time (UTC). */\n    getUTCMinutes(): number;\n    /** Gets the seconds of a Date object, using local time. */\n    getSeconds(): number;\n    /** Gets the seconds of a Date object using Universal Coordinated Time (UTC). */\n    getUTCSeconds(): number;\n    /** Gets the milliseconds of a Date, using local time. */\n    getMilliseconds(): number;\n    /** Gets the milliseconds of a Date object using Universal Coordinated Time (UTC). */\n    getUTCMilliseconds(): number;\n    /** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */\n    getTimezoneOffset(): number;\n    /**\n     * Sets the date and time value in the Date object.\n     * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT.\n     */\n    setTime(time: number): number;\n    /**\n     * Sets the milliseconds value in the Date object using local time.\n     * @param ms A numeric value equal to the millisecond value.\n     */\n    setMilliseconds(ms: number): number;\n    /**\n     * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC).\n     * @param ms A numeric value equal to the millisecond value.\n     */\n    setUTCMilliseconds(ms: number): number;\n\n    /**\n     * Sets the seconds value in the Date object using local time.\n     * @param sec A numeric value equal to the seconds value.\n     * @param ms A numeric value equal to the milliseconds value.\n     */\n    setSeconds(sec: number, ms?: number): number;\n    /**\n     * Sets the seconds value in the Date object using Universal Coordinated Time (UTC).\n     * @param sec A numeric value equal to the seconds value.\n     * @param ms A numeric value equal to the milliseconds value.\n     */\n    setUTCSeconds(sec: number, ms?: number): number;\n    /**\n     * Sets the minutes value in the Date object using local time.\n     * @param min A numeric value equal to the minutes value.\n     * @param sec A numeric value equal to the seconds value.\n     * @param ms A numeric value equal to the milliseconds value.\n     */\n    setMinutes(min: number, sec?: number, ms?: number): number;\n    /**\n     * Sets the minutes value in the Date object using Universal Coordinated Time (UTC).\n     * @param min A numeric value equal to the minutes value.\n     * @param sec A numeric value equal to the seconds value.\n     * @param ms A numeric value equal to the milliseconds value.\n     */\n    setUTCMinutes(min: number, sec?: number, ms?: number): number;\n    /**\n     * Sets the hour value in the Date object using local time.\n     * @param hours A numeric value equal to the hours value.\n     * @param min A numeric value equal to the minutes value.\n     * @param sec A numeric value equal to the seconds value.\n     * @param ms A numeric value equal to the milliseconds value.\n     */\n    setHours(hours: number, min?: number, sec?: number, ms?: number): number;\n    /**\n     * Sets the hours value in the Date object using Universal Coordinated Time (UTC).\n     * @param hours A numeric value equal to the hours value.\n     * @param min A numeric value equal to the minutes value.\n     * @param sec A numeric value equal to the seconds value.\n     * @param ms A numeric value equal to the milliseconds value.\n     */\n    setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number;\n    /**\n     * Sets the numeric day-of-the-month value of the Date object using local time.\n     * @param date A numeric value equal to the day of the month.\n     */\n    setDate(date: number): number;\n    /**\n     * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC).\n     * @param date A numeric value equal to the day of the month.\n     */\n    setUTCDate(date: number): number;\n    /**\n     * Sets the month value in the Date object using local time.\n     * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.\n     * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used.\n     */\n    setMonth(month: number, date?: number): number;\n    /**\n     * Sets the month value in the Date object using Universal Coordinated Time (UTC).\n     * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.\n     * @param date A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used.\n     */\n    setUTCMonth(month: number, date?: number): number;\n    /**\n     * Sets the year of the Date object using local time.\n     * @param year A numeric value for the year.\n     * @param month A zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified.\n     * @param date A numeric value equal for the day of the month.\n     */\n    setFullYear(year: number, month?: number, date?: number): number;\n    /**\n     * Sets the year value in the Date object using Universal Coordinated Time (UTC).\n     * @param year A numeric value equal to the year.\n     * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied.\n     * @param date A numeric value equal to the day of the month.\n     */\n    setUTCFullYear(year: number, month?: number, date?: number): number;\n    /** Returns a date converted to a string using Universal Coordinated Time (UTC). */\n    toUTCString(): string;\n    /** Returns a date as a string value in ISO format. */\n    toISOString(): string;\n    /** Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. */\n    toJSON(key?: any): string;\n}\n\ninterface DateConstructor {\n    new(): Date;\n    new(value: number | string): Date;\n    /**\n     * Creates a new Date.\n     * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n     * @param monthIndex The month as a number between 0 and 11 (January to December).\n     * @param date The date as a number between 1 and 31.\n     * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n     * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n     * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n     * @param ms A number from 0 to 999 that specifies the milliseconds.\n     */\n    new(year: number, monthIndex: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date;\n    (): string;\n    readonly prototype: Date;\n    /**\n     * Parses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970.\n     * @param s A date string\n     */\n    parse(s: string): number;\n    /**\n     * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date.\n     * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.\n     * @param monthIndex The month as a number between 0 and 11 (January to December).\n     * @param date The date as a number between 1 and 31.\n     * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour.\n     * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes.\n     * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds.\n     * @param ms A number from 0 to 999 that specifies the milliseconds.\n     */\n    UTC(year: number, monthIndex: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number;\n    /** Returns the number of milliseconds elapsed since midnight, January 1, 1970 Universal Coordinated Time (UTC). */\n    now(): number;\n}\n\ndeclare var Date: DateConstructor;\n\ninterface RegExpMatchArray extends Array<string> {\n    /**\n     * The index of the search at which the result was found.\n     */\n    index?: number;\n    /**\n     * A copy of the search string.\n     */\n    input?: string;\n    /**\n     * The first match. This will always be present because \\`null\\` will be returned if there are no matches.\n     */\n    0: string;\n}\n\ninterface RegExpExecArray extends Array<string> {\n    /**\n     * The index of the search at which the result was found.\n     */\n    index: number;\n    /**\n     * A copy of the search string.\n     */\n    input: string;\n    /**\n     * The first match. This will always be present because \\`null\\` will be returned if there are no matches.\n     */\n    0: string;\n}\n\ninterface RegExp {\n    /**\n     * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search.\n     * @param string The String object or string literal on which to perform the search.\n     */\n    exec(string: string): RegExpExecArray | null;\n\n    /**\n     * Returns a Boolean value that indicates whether or not a pattern exists in a searched string.\n     * @param string String on which to perform the search.\n     */\n    test(string: string): boolean;\n\n    /** Returns a copy of the text of the regular expression pattern. Read-only. The regExp argument is a Regular expression object. It can be a variable name or a literal. */\n    readonly source: string;\n\n    /** Returns a Boolean value indicating the state of the global flag (g) used with a regular expression. Default is false. Read-only. */\n    readonly global: boolean;\n\n    /** Returns a Boolean value indicating the state of the ignoreCase flag (i) used with a regular expression. Default is false. Read-only. */\n    readonly ignoreCase: boolean;\n\n    /** Returns a Boolean value indicating the state of the multiline flag (m) used with a regular expression. Default is false. Read-only. */\n    readonly multiline: boolean;\n\n    lastIndex: number;\n\n    // Non-standard extensions\n    /** @deprecated A legacy feature for browser compatibility */\n    compile(pattern: string, flags?: string): this;\n}\n\ninterface RegExpConstructor {\n    new(pattern: RegExp | string): RegExp;\n    new(pattern: string, flags?: string): RegExp;\n    (pattern: RegExp | string): RegExp;\n    (pattern: string, flags?: string): RegExp;\n    readonly prototype: RegExp;\n\n    // Non-standard extensions\n    /** @deprecated A legacy feature for browser compatibility */\n    $1: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    $2: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    $3: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    $4: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    $5: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    $6: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    $7: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    $8: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    $9: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    input: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    $_: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    lastMatch: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    \"$&\": string;\n    /** @deprecated A legacy feature for browser compatibility */\n    lastParen: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    \"$+\": string;\n    /** @deprecated A legacy feature for browser compatibility */\n    leftContext: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    \"$\\`\": string;\n    /** @deprecated A legacy feature for browser compatibility */\n    rightContext: string;\n    /** @deprecated A legacy feature for browser compatibility */\n    \"$'\": string;\n}\n\ndeclare var RegExp: RegExpConstructor;\n\ninterface Error {\n    name: string;\n    message: string;\n    stack?: string;\n}\n\ninterface ErrorConstructor {\n    new(message?: string): Error;\n    (message?: string): Error;\n    readonly prototype: Error;\n}\n\ndeclare var Error: ErrorConstructor;\n\ninterface EvalError extends Error {\n}\n\ninterface EvalErrorConstructor extends ErrorConstructor {\n    new(message?: string): EvalError;\n    (message?: string): EvalError;\n    readonly prototype: EvalError;\n}\n\ndeclare var EvalError: EvalErrorConstructor;\n\ninterface RangeError extends Error {\n}\n\ninterface RangeErrorConstructor extends ErrorConstructor {\n    new(message?: string): RangeError;\n    (message?: string): RangeError;\n    readonly prototype: RangeError;\n}\n\ndeclare var RangeError: RangeErrorConstructor;\n\ninterface ReferenceError extends Error {\n}\n\ninterface ReferenceErrorConstructor extends ErrorConstructor {\n    new(message?: string): ReferenceError;\n    (message?: string): ReferenceError;\n    readonly prototype: ReferenceError;\n}\n\ndeclare var ReferenceError: ReferenceErrorConstructor;\n\ninterface SyntaxError extends Error {\n}\n\ninterface SyntaxErrorConstructor extends ErrorConstructor {\n    new(message?: string): SyntaxError;\n    (message?: string): SyntaxError;\n    readonly prototype: SyntaxError;\n}\n\ndeclare var SyntaxError: SyntaxErrorConstructor;\n\ninterface TypeError extends Error {\n}\n\ninterface TypeErrorConstructor extends ErrorConstructor {\n    new(message?: string): TypeError;\n    (message?: string): TypeError;\n    readonly prototype: TypeError;\n}\n\ndeclare var TypeError: TypeErrorConstructor;\n\ninterface URIError extends Error {\n}\n\ninterface URIErrorConstructor extends ErrorConstructor {\n    new(message?: string): URIError;\n    (message?: string): URIError;\n    readonly prototype: URIError;\n}\n\ndeclare var URIError: URIErrorConstructor;\n\ninterface JSON {\n    /**\n     * Converts a JavaScript Object Notation (JSON) string into an object.\n     * @param text A valid JSON string.\n     * @param reviver A function that transforms the results. This function is called for each member of the object.\n     * If a member contains nested objects, the nested objects are transformed before the parent object is.\n     */\n    parse(text: string, reviver?: (this: any, key: string, value: any) => any): any;\n    /**\n     * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.\n     * @param value A JavaScript value, usually an object or array, to be converted.\n     * @param replacer A function that transforms the results.\n     * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\n     */\n    stringify(value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number): string;\n    /**\n     * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.\n     * @param value A JavaScript value, usually an object or array, to be converted.\n     * @param replacer An array of strings and numbers that acts as an approved list for selecting the object properties that will be stringified.\n     * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\n     */\n    stringify(value: any, replacer?: (number | string)[] | null, space?: string | number): string;\n}\n\n/**\n * An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format.\n */\ndeclare var JSON: JSON;\n\n\n/////////////////////////////\n/// ECMAScript Array API (specially handled by compiler)\n/////////////////////////////\n\ninterface ReadonlyArray<T> {\n    /**\n     * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n     */\n    readonly length: number;\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n    /**\n     * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods.\n     */\n    toLocaleString(): string;\n    /**\n     * Combines two or more arrays.\n     * @param items Additional items to add to the end of array1.\n     */\n    concat(...items: ConcatArray<T>[]): T[];\n    /**\n     * Combines two or more arrays.\n     * @param items Additional items to add to the end of array1.\n     */\n    concat(...items: (T | ConcatArray<T>)[]): T[];\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): T[];\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n     */\n    indexOf(searchElement: T, fromIndex?: number): number;\n    /**\n     * Returns the index of the last occurrence of a specified value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.\n     */\n    lastIndexOf(searchElement: T, fromIndex?: number): number;\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every<S extends T>(predicate: (value: T, index: number, array: readonly T[]) => value is S, thisArg?: any): this is readonly S[];\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): boolean;\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): boolean;\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: T, index: number, array: readonly T[]) => void, thisArg?: any): void;\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n     */\n    map<U>(callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any): U[];\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\n     */\n    filter<S extends T>(predicate: (value: T, index: number, array: readonly T[]) => value is S, thisArg?: any): S[];\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): T[];\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T): T;\n    reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T, initialValue: T): T;\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U, initialValue: U): U;\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T): T;\n    reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T, initialValue: T): T;\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U, initialValue: U): U;\n\n    readonly [n: number]: T;\n}\n\ninterface ConcatArray<T> {\n    readonly length: number;\n    readonly [n: number]: T;\n    join(separator?: string): string;\n    slice(start?: number, end?: number): T[];\n}\n\ninterface Array<T> {\n    /**\n     * Gets or sets the length of the array. This is a number one higher than the highest index in the array.\n     */\n    length: number;\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n    /**\n     * Returns a string representation of an array. The elements are converted to string using their toLocaleString methods.\n     */\n    toLocaleString(): string;\n    /**\n     * Removes the last element from an array and returns it.\n     * If the array is empty, undefined is returned and the array is not modified.\n     */\n    pop(): T | undefined;\n    /**\n     * Appends new elements to the end of an array, and returns the new length of the array.\n     * @param items New elements to add to the array.\n     */\n    push(...items: T[]): number;\n    /**\n     * Combines two or more arrays.\n     * This method returns a new array without modifying any existing arrays.\n     * @param items Additional arrays and/or items to add to the end of the array.\n     */\n    concat(...items: ConcatArray<T>[]): T[];\n    /**\n     * Combines two or more arrays.\n     * This method returns a new array without modifying any existing arrays.\n     * @param items Additional arrays and/or items to add to the end of the array.\n     */\n    concat(...items: (T | ConcatArray<T>)[]): T[];\n    /**\n     * Adds all the elements of an array into a string, separated by the specified separator string.\n     * @param separator A string used to separate one element of the array from the next in the resulting string. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n    /**\n     * Reverses the elements in an array in place.\n     * This method mutates the array and returns a reference to the same array.\n     */\n    reverse(): T[];\n    /**\n     * Removes the first element from an array and returns it.\n     * If the array is empty, undefined is returned and the array is not modified.\n     */\n    shift(): T | undefined;\n    /**\n     * Returns a copy of a section of an array.\n     * For both start and end, a negative index can be used to indicate an offset from the end of the array.\n     * For example, -2 refers to the second to last element of the array.\n     * @param start The beginning index of the specified portion of the array.\n     * If start is undefined, then the slice begins at index 0.\n     * @param end The end index of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     * If end is undefined, then the slice extends to the end of the array.\n     */\n    slice(start?: number, end?: number): T[];\n    /**\n     * Sorts an array in place.\n     * This method mutates the array and returns a reference to the same array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending, ASCII character order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: T, b: T) => number): this;\n    /**\n     * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n     * @param start The zero-based location in the array from which to start removing elements.\n     * @param deleteCount The number of elements to remove.\n     * @returns An array containing the elements that were deleted.\n     */\n    splice(start: number, deleteCount?: number): T[];\n    /**\n     * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.\n     * @param start The zero-based location in the array from which to start removing elements.\n     * @param deleteCount The number of elements to remove.\n     * @param items Elements to insert into the array in place of the deleted elements.\n     * @returns An array containing the elements that were deleted.\n     */\n    splice(start: number, deleteCount: number, ...items: T[]): T[];\n    /**\n     * Inserts new elements at the start of an array, and returns the new length of the array.\n     * @param items Elements to insert at the start of the array.\n     */\n    unshift(...items: T[]): number;\n    /**\n     * Returns the index of the first occurrence of a value in an array, or -1 if it is not present.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\n     */\n    indexOf(searchElement: T, fromIndex?: number): number;\n    /**\n     * Returns the index of the last occurrence of a specified value in an array, or -1 if it is not present.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin searching backward. If fromIndex is omitted, the search starts at the last index in the array.\n     */\n    lastIndexOf(searchElement: T, fromIndex?: number): number;\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): this is S[];\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\n     */\n    map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\n     */\n    filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[];\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function. If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[];\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;\n    reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T;\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;\n    reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T;\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;\n\n    [n: number]: T;\n}\n\ninterface ArrayConstructor {\n    new(arrayLength?: number): any[];\n    new <T>(arrayLength: number): T[];\n    new <T>(...items: T[]): T[];\n    (arrayLength?: number): any[];\n    <T>(arrayLength: number): T[];\n    <T>(...items: T[]): T[];\n    isArray(arg: any): arg is any[];\n    readonly prototype: any[];\n}\n\ndeclare var Array: ArrayConstructor;\n\ninterface TypedPropertyDescriptor<T> {\n    enumerable?: boolean;\n    configurable?: boolean;\n    writable?: boolean;\n    value?: T;\n    get?: () => T;\n    set?: (value: T) => void;\n}\n\ndeclare type PromiseConstructorLike = new <T>(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void) => PromiseLike<T>;\n\ninterface PromiseLike<T> {\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): PromiseLike<TResult1 | TResult2>;\n}\n\n/**\n * Represents the completion of an asynchronous operation\n */\ninterface Promise<T> {\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;\n\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>;\n}\n\n/**\n * Recursively unwraps the \"awaited type\" of a type. Non-promise \"thenables\" should resolve to \\`never\\`. This emulates the behavior of \\`await\\`.\n */\ntype Awaited<T> =\n    T extends null | undefined ? T : // special case for \\`null | undefined\\` when not in \\`--strictNullChecks\\` mode\n        T extends object & { then(onfulfilled: infer F, ...args: infer _): any } ? // \\`await\\` only unwraps object types with a callable \\`then\\`. Non-object types are not unwrapped\n            F extends ((value: infer V, ...args: infer _) => any) ? // if the argument to \\`then\\` is callable, extracts the first argument\n                Awaited<V> : // recursively unwrap the value\n                never : // the argument to \\`then\\` was not callable\n        T; // non-object or non-thenable\n\ninterface ArrayLike<T> {\n    readonly length: number;\n    readonly [n: number]: T;\n}\n\n/**\n * Make all properties in T optional\n */\ntype Partial<T> = {\n    [P in keyof T]?: T[P];\n};\n\n/**\n * Make all properties in T required\n */\ntype Required<T> = {\n    [P in keyof T]-?: T[P];\n};\n\n/**\n * Make all properties in T readonly\n */\ntype Readonly<T> = {\n    readonly [P in keyof T]: T[P];\n};\n\n/**\n * From T, pick a set of properties whose keys are in the union K\n */\ntype Pick<T, K extends keyof T> = {\n    [P in K]: T[P];\n};\n\n/**\n * Construct a type with a set of properties K of type T\n */\ntype Record<K extends keyof any, T> = {\n    [P in K]: T;\n};\n\n/**\n * Exclude from T those types that are assignable to U\n */\ntype Exclude<T, U> = T extends U ? never : T;\n\n/**\n * Extract from T those types that are assignable to U\n */\ntype Extract<T, U> = T extends U ? T : never;\n\n/**\n * Construct a type with the properties of T except for those in type K.\n */\ntype Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;\n\n/**\n * Exclude null and undefined from T\n */\ntype NonNullable<T> = T & {};\n\n/**\n * Obtain the parameters of a function type in a tuple\n */\ntype Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;\n\n/**\n * Obtain the parameters of a constructor function type in a tuple\n */\ntype ConstructorParameters<T extends abstract new (...args: any) => any> = T extends abstract new (...args: infer P) => any ? P : never;\n\n/**\n * Obtain the return type of a function type\n */\ntype ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;\n\n/**\n * Obtain the return type of a constructor function type\n */\ntype InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (...args: any) => infer R ? R : any;\n\n/**\n * Convert string literal type to uppercase\n */\ntype Uppercase<S extends string> = intrinsic;\n\n/**\n * Convert string literal type to lowercase\n */\ntype Lowercase<S extends string> = intrinsic;\n\n/**\n * Convert first character of string literal type to uppercase\n */\ntype Capitalize<S extends string> = intrinsic;\n\n/**\n * Convert first character of string literal type to lowercase\n */\ntype Uncapitalize<S extends string> = intrinsic;\n\n/**\n * Marker for contextual 'this' type\n */\ninterface ThisType<T> { }\n\n/**\n * Represents a raw buffer of binary data, which is used to store data for the\n * different typed arrays. ArrayBuffers cannot be read from or written to directly,\n * but can be passed to a typed array or DataView Object to interpret the raw\n * buffer as needed.\n */\ninterface ArrayBuffer {\n    /**\n     * Read-only. The length of the ArrayBuffer (in bytes).\n     */\n    readonly byteLength: number;\n\n    /**\n     * Returns a section of an ArrayBuffer.\n     */\n    slice(begin: number, end?: number): ArrayBuffer;\n}\n\n/**\n * Allowed ArrayBuffer types for the buffer of an ArrayBufferView and related Typed Arrays.\n */\ninterface ArrayBufferTypes {\n    ArrayBuffer: ArrayBuffer;\n}\ntype ArrayBufferLike = ArrayBufferTypes[keyof ArrayBufferTypes];\n\ninterface ArrayBufferConstructor {\n    readonly prototype: ArrayBuffer;\n    new(byteLength: number): ArrayBuffer;\n    isView(arg: any): arg is ArrayBufferView;\n}\ndeclare var ArrayBuffer: ArrayBufferConstructor;\n\ninterface ArrayBufferView {\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    byteOffset: number;\n}\n\ninterface DataView {\n    readonly buffer: ArrayBuffer;\n    readonly byteLength: number;\n    readonly byteOffset: number;\n    /**\n     * Gets the Float32 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     * @param littleEndian If false or undefined, a big-endian value should be read.\n     */\n    getFloat32(byteOffset: number, littleEndian?: boolean): number;\n\n    /**\n     * Gets the Float64 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     * @param littleEndian If false or undefined, a big-endian value should be read.\n     */\n    getFloat64(byteOffset: number, littleEndian?: boolean): number;\n\n    /**\n     * Gets the Int8 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     */\n    getInt8(byteOffset: number): number;\n\n    /**\n     * Gets the Int16 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     * @param littleEndian If false or undefined, a big-endian value should be read.\n     */\n    getInt16(byteOffset: number, littleEndian?: boolean): number;\n    /**\n     * Gets the Int32 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     * @param littleEndian If false or undefined, a big-endian value should be read.\n     */\n    getInt32(byteOffset: number, littleEndian?: boolean): number;\n\n    /**\n     * Gets the Uint8 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     */\n    getUint8(byteOffset: number): number;\n\n    /**\n     * Gets the Uint16 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     * @param littleEndian If false or undefined, a big-endian value should be read.\n     */\n    getUint16(byteOffset: number, littleEndian?: boolean): number;\n\n    /**\n     * Gets the Uint32 value at the specified byte offset from the start of the view. There is\n     * no alignment constraint; multi-byte values may be fetched from any offset.\n     * @param byteOffset The place in the buffer at which the value should be retrieved.\n     * @param littleEndian If false or undefined, a big-endian value should be read.\n     */\n    getUint32(byteOffset: number, littleEndian?: boolean): number;\n\n    /**\n     * Stores an Float32 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     * @param littleEndian If false or undefined, a big-endian value should be written.\n     */\n    setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n    /**\n     * Stores an Float64 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     * @param littleEndian If false or undefined, a big-endian value should be written.\n     */\n    setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n    /**\n     * Stores an Int8 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     */\n    setInt8(byteOffset: number, value: number): void;\n\n    /**\n     * Stores an Int16 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     * @param littleEndian If false or undefined, a big-endian value should be written.\n     */\n    setInt16(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n    /**\n     * Stores an Int32 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     * @param littleEndian If false or undefined, a big-endian value should be written.\n     */\n    setInt32(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n    /**\n     * Stores an Uint8 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     */\n    setUint8(byteOffset: number, value: number): void;\n\n    /**\n     * Stores an Uint16 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     * @param littleEndian If false or undefined, a big-endian value should be written.\n     */\n    setUint16(byteOffset: number, value: number, littleEndian?: boolean): void;\n\n    /**\n     * Stores an Uint32 value at the specified byte offset from the start of the view.\n     * @param byteOffset The place in the buffer at which the value should be set.\n     * @param value The value to set.\n     * @param littleEndian If false or undefined, a big-endian value should be written.\n     */\n    setUint32(byteOffset: number, value: number, littleEndian?: boolean): void;\n}\n\ninterface DataViewConstructor {\n    readonly prototype: DataView;\n    new(buffer: ArrayBufferLike, byteOffset?: number, byteLength?: number): DataView;\n}\ndeclare var DataView: DataViewConstructor;\n\n/**\n * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested\n * number of bytes could not be allocated an exception is raised.\n */\ninterface Int8Array {\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    readonly buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    readonly byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: number, index: number, array: Int8Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: number, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: number, index: number, array: Int8Array) => any, thisArg?: any): Int8Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: number, index: number, obj: Int8Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): void;\n\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     *  search starts at index 0.\n     */\n    indexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * The length of the array.\n     */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number): number;\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number): number;\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U;\n\n    /**\n     * Reverses the elements in an Array.\n     */\n    reverse(): Int8Array;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<number>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): Int8Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: number, index: number, array: Int8Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Sorts an array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if first argument is less than second argument, zero if they're equal and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: number, b: number) => number): this;\n\n    /**\n     * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): Int8Array;\n\n    /**\n     * Converts a number to a string by using the current locale.\n     */\n    toLocaleString(): string;\n\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Int8Array;\n\n    [index: number]: number;\n}\ninterface Int8ArrayConstructor {\n    readonly prototype: Int8Array;\n    new(length: number): Int8Array;\n    new(array: ArrayLike<number> | ArrayBufferLike): Int8Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int8Array;\n\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: number[]): Int8Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     */\n    from(arrayLike: ArrayLike<number>): Int8Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int8Array;\n\n\n}\ndeclare var Int8Array: Int8ArrayConstructor;\n\n/**\n * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Uint8Array {\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    readonly buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    readonly byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: number, index: number, array: Uint8Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: number, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: number, index: number, array: Uint8Array) => any, thisArg?: any): Uint8Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: number, index: number, obj: Uint8Array) => boolean, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: number, index: number, obj: Uint8Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void, thisArg?: any): void;\n\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     *  search starts at index 0.\n     */\n    indexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * The length of the array.\n     */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: number, index: number, array: Uint8Array) => number, thisArg?: any): Uint8Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number): number;\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number): number;\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U;\n\n    /**\n     * Reverses the elements in an Array.\n     */\n    reverse(): Uint8Array;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<number>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): Uint8Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: number, index: number, array: Uint8Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Sorts an array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if first argument is less than second argument, zero if they're equal and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: number, b: number) => number): this;\n\n    /**\n     * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): Uint8Array;\n\n    /**\n     * Converts a number to a string by using the current locale.\n     */\n    toLocaleString(): string;\n\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Uint8Array;\n\n    [index: number]: number;\n}\n\ninterface Uint8ArrayConstructor {\n    readonly prototype: Uint8Array;\n    new(length: number): Uint8Array;\n    new(array: ArrayLike<number> | ArrayBufferLike): Uint8Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8Array;\n\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: number[]): Uint8Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     */\n    from(arrayLike: ArrayLike<number>): Uint8Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8Array;\n\n}\ndeclare var Uint8Array: Uint8ArrayConstructor;\n\n/**\n * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0.\n * If the requested number of bytes could not be allocated an exception is raised.\n */\ninterface Uint8ClampedArray {\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    readonly buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    readonly byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: number, index: number, array: Uint8ClampedArray) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: number, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: number, index: number, array: Uint8ClampedArray) => any, thisArg?: any): Uint8ClampedArray;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: number, index: number, obj: Uint8ClampedArray) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => void, thisArg?: any): void;\n\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     *  search starts at index 0.\n     */\n    indexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * The length of the array.\n     */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => number, thisArg?: any): Uint8ClampedArray;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number): number;\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number): number;\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U;\n\n    /**\n     * Reverses the elements in an Array.\n     */\n    reverse(): Uint8ClampedArray;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<number>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): Uint8ClampedArray;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: number, index: number, array: Uint8ClampedArray) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Sorts an array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if first argument is less than second argument, zero if they're equal and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: number, b: number) => number): this;\n\n    /**\n     * Gets a new Uint8ClampedArray view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): Uint8ClampedArray;\n\n    /**\n     * Converts a number to a string by using the current locale.\n     */\n    toLocaleString(): string;\n\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Uint8ClampedArray;\n\n    [index: number]: number;\n}\n\ninterface Uint8ClampedArrayConstructor {\n    readonly prototype: Uint8ClampedArray;\n    new(length: number): Uint8ClampedArray;\n    new(array: ArrayLike<number> | ArrayBufferLike): Uint8ClampedArray;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint8ClampedArray;\n\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: number[]): Uint8ClampedArray;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     */\n    from(arrayLike: ArrayLike<number>): Uint8ClampedArray;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint8ClampedArray;\n}\ndeclare var Uint8ClampedArray: Uint8ClampedArrayConstructor;\n\n/**\n * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Int16Array {\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    readonly buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    readonly byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: number, index: number, array: Int16Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: number, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: number, index: number, array: Int16Array) => any, thisArg?: any): Int16Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: number, index: number, obj: Int16Array) => boolean, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: number, index: number, obj: Int16Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: number, index: number, array: Int16Array) => void, thisArg?: any): void;\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     *  search starts at index 0.\n     */\n    indexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * The length of the array.\n     */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: number, index: number, array: Int16Array) => number, thisArg?: any): Int16Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number): number;\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number): number;\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U;\n\n    /**\n     * Reverses the elements in an Array.\n     */\n    reverse(): Int16Array;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<number>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): Int16Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: number, index: number, array: Int16Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Sorts an array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if first argument is less than second argument, zero if they're equal and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: number, b: number) => number): this;\n\n    /**\n     * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): Int16Array;\n\n    /**\n     * Converts a number to a string by using the current locale.\n     */\n    toLocaleString(): string;\n\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Int16Array;\n\n    [index: number]: number;\n}\n\ninterface Int16ArrayConstructor {\n    readonly prototype: Int16Array;\n    new(length: number): Int16Array;\n    new(array: ArrayLike<number> | ArrayBufferLike): Int16Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int16Array;\n\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: number[]): Int16Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     */\n    from(arrayLike: ArrayLike<number>): Int16Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int16Array;\n\n\n}\ndeclare var Int16Array: Int16ArrayConstructor;\n\n/**\n * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Uint16Array {\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    readonly buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    readonly byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: number, index: number, array: Uint16Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: number, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: number, index: number, array: Uint16Array) => any, thisArg?: any): Uint16Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: number, index: number, obj: Uint16Array) => boolean, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: number, index: number, obj: Uint16Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: number, index: number, array: Uint16Array) => void, thisArg?: any): void;\n\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     *  search starts at index 0.\n     */\n    indexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * The length of the array.\n     */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: number, index: number, array: Uint16Array) => number, thisArg?: any): Uint16Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number): number;\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number): number;\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U;\n\n    /**\n     * Reverses the elements in an Array.\n     */\n    reverse(): Uint16Array;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<number>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): Uint16Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: number, index: number, array: Uint16Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Sorts an array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if first argument is less than second argument, zero if they're equal and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: number, b: number) => number): this;\n\n    /**\n     * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): Uint16Array;\n\n    /**\n     * Converts a number to a string by using the current locale.\n     */\n    toLocaleString(): string;\n\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Uint16Array;\n\n    [index: number]: number;\n}\n\ninterface Uint16ArrayConstructor {\n    readonly prototype: Uint16Array;\n    new(length: number): Uint16Array;\n    new(array: ArrayLike<number> | ArrayBufferLike): Uint16Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint16Array;\n\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: number[]): Uint16Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     */\n    from(arrayLike: ArrayLike<number>): Uint16Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint16Array;\n\n\n}\ndeclare var Uint16Array: Uint16ArrayConstructor;\n/**\n * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Int32Array {\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    readonly buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    readonly byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: number, index: number, array: Int32Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: number, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: number, index: number, array: Int32Array) => any, thisArg?: any): Int32Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: number, index: number, obj: Int32Array) => boolean, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: number, index: number, obj: Int32Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: number, index: number, array: Int32Array) => void, thisArg?: any): void;\n\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     *  search starts at index 0.\n     */\n    indexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * The length of the array.\n     */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: number, index: number, array: Int32Array) => number, thisArg?: any): Int32Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number): number;\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number): number;\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U;\n\n    /**\n     * Reverses the elements in an Array.\n     */\n    reverse(): Int32Array;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<number>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): Int32Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: number, index: number, array: Int32Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Sorts an array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if first argument is less than second argument, zero if they're equal and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: number, b: number) => number): this;\n\n    /**\n     * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): Int32Array;\n\n    /**\n     * Converts a number to a string by using the current locale.\n     */\n    toLocaleString(): string;\n\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Int32Array;\n\n    [index: number]: number;\n}\n\ninterface Int32ArrayConstructor {\n    readonly prototype: Int32Array;\n    new(length: number): Int32Array;\n    new(array: ArrayLike<number> | ArrayBufferLike): Int32Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Int32Array;\n\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: number[]): Int32Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     */\n    from(arrayLike: ArrayLike<number>): Int32Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Int32Array;\n\n}\ndeclare var Int32Array: Int32ArrayConstructor;\n\n/**\n * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the\n * requested number of bytes could not be allocated an exception is raised.\n */\ninterface Uint32Array {\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    readonly buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    readonly byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: number, index: number, array: Uint32Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: number, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: number, index: number, array: Uint32Array) => any, thisArg?: any): Uint32Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: number, index: number, obj: Uint32Array) => boolean, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: number, index: number, obj: Uint32Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: number, index: number, array: Uint32Array) => void, thisArg?: any): void;\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     *  search starts at index 0.\n     */\n    indexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * The length of the array.\n     */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: number, index: number, array: Uint32Array) => number, thisArg?: any): Uint32Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number): number;\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number): number;\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U;\n\n    /**\n     * Reverses the elements in an Array.\n     */\n    reverse(): Uint32Array;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<number>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): Uint32Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: number, index: number, array: Uint32Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Sorts an array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if first argument is less than second argument, zero if they're equal and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: number, b: number) => number): this;\n\n    /**\n     * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): Uint32Array;\n\n    /**\n     * Converts a number to a string by using the current locale.\n     */\n    toLocaleString(): string;\n\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Uint32Array;\n\n    [index: number]: number;\n}\n\ninterface Uint32ArrayConstructor {\n    readonly prototype: Uint32Array;\n    new(length: number): Uint32Array;\n    new(array: ArrayLike<number> | ArrayBufferLike): Uint32Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Uint32Array;\n\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: number[]): Uint32Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     */\n    from(arrayLike: ArrayLike<number>): Uint32Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Uint32Array;\n\n}\ndeclare var Uint32Array: Uint32ArrayConstructor;\n\n/**\n * A typed array of 32-bit float values. The contents are initialized to 0. If the requested number\n * of bytes could not be allocated an exception is raised.\n */\ninterface Float32Array {\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    readonly buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    readonly byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: number, index: number, array: Float32Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: number, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: number, index: number, array: Float32Array) => any, thisArg?: any): Float32Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: number, index: number, obj: Float32Array) => boolean, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: number, index: number, obj: Float32Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: number, index: number, array: Float32Array) => void, thisArg?: any): void;\n\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     *  search starts at index 0.\n     */\n    indexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * The length of the array.\n     */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: number, index: number, array: Float32Array) => number, thisArg?: any): Float32Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number): number;\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number): number;\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U;\n\n    /**\n     * Reverses the elements in an Array.\n     */\n    reverse(): Float32Array;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<number>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): Float32Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: number, index: number, array: Float32Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Sorts an array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if first argument is less than second argument, zero if they're equal and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: number, b: number) => number): this;\n\n    /**\n     * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): Float32Array;\n\n    /**\n     * Converts a number to a string by using the current locale.\n     */\n    toLocaleString(): string;\n\n    /**\n     * Returns a string representation of an array.\n     */\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Float32Array;\n\n    [index: number]: number;\n}\n\ninterface Float32ArrayConstructor {\n    readonly prototype: Float32Array;\n    new(length: number): Float32Array;\n    new(array: ArrayLike<number> | ArrayBufferLike): Float32Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float32Array;\n\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: number[]): Float32Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     */\n    from(arrayLike: ArrayLike<number>): Float32Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Float32Array;\n\n\n}\ndeclare var Float32Array: Float32ArrayConstructor;\n\n/**\n * A typed array of 64-bit float values. The contents are initialized to 0. If the requested\n * number of bytes could not be allocated an exception is raised.\n */\ninterface Float64Array {\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * The ArrayBuffer instance referenced by the array.\n     */\n    readonly buffer: ArrayBufferLike;\n\n    /**\n     * The length in bytes of the array.\n     */\n    readonly byteLength: number;\n\n    /**\n     * The offset in bytes of the array.\n     */\n    readonly byteOffset: number;\n\n    /**\n     * Returns the this object after copying a section of the array identified by start and end\n     * to the same array starting at position target\n     * @param target If target is negative, it is treated as length+target where length is the\n     * length of the array.\n     * @param start If start is negative, it is treated as length+start. If end is negative, it\n     * is treated as length+end.\n     * @param end If not specified, length of the this object is used as its default value.\n     */\n    copyWithin(target: number, start: number, end?: number): this;\n\n    /**\n     * Determines whether all the members of an array satisfy the specified test.\n     * @param predicate A function that accepts up to three arguments. The every method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value false, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    every(predicate: (value: number, index: number, array: Float64Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Changes all array elements from \\`start\\` to \\`end\\` index to a static \\`value\\` and returns the modified array\n     * @param value value to fill array section with\n     * @param start index to start filling the array at. If start is negative, it is treated as\n     * length+start where length is the length of the array.\n     * @param end index to stop filling the array at. If end is negative, it is treated as\n     * length+end.\n     */\n    fill(value: number, start?: number, end?: number): this;\n\n    /**\n     * Returns the elements of an array that meet the condition specified in a callback function.\n     * @param predicate A function that accepts up to three arguments. The filter method calls\n     * the predicate function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    filter(predicate: (value: number, index: number, array: Float64Array) => any, thisArg?: any): Float64Array;\n\n    /**\n     * Returns the value of the first element in the array where predicate is true, and undefined\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found, find\n     * immediately returns that element value. Otherwise, find returns undefined.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    find(predicate: (value: number, index: number, obj: Float64Array) => boolean, thisArg?: any): number | undefined;\n\n    /**\n     * Returns the index of the first element in the array where predicate is true, and -1\n     * otherwise.\n     * @param predicate find calls predicate once for each element of the array, in ascending\n     * order, until it finds one where predicate returns true. If such an element is found,\n     * findIndex immediately returns that element index. Otherwise, findIndex returns -1.\n     * @param thisArg If provided, it will be used as the this value for each invocation of\n     * predicate. If it is not provided, undefined is used instead.\n     */\n    findIndex(predicate: (value: number, index: number, obj: Float64Array) => boolean, thisArg?: any): number;\n\n    /**\n     * Performs the specified action for each element in an array.\n     * @param callbackfn  A function that accepts up to three arguments. forEach calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg  An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    forEach(callbackfn: (value: number, index: number, array: Float64Array) => void, thisArg?: any): void;\n\n    /**\n     * Returns the index of the first occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     *  search starts at index 0.\n     */\n    indexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * Adds all the elements of an array separated by the specified separator string.\n     * @param separator A string used to separate one element of an array from the next in the\n     * resulting String. If omitted, the array elements are separated with a comma.\n     */\n    join(separator?: string): string;\n\n    /**\n     * Returns the index of the last occurrence of a value in an array.\n     * @param searchElement The value to locate in the array.\n     * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the\n     * search starts at index 0.\n     */\n    lastIndexOf(searchElement: number, fromIndex?: number): number;\n\n    /**\n     * The length of the array.\n     */\n    readonly length: number;\n\n    /**\n     * Calls a defined callback function on each element of an array, and returns an array that\n     * contains the results.\n     * @param callbackfn A function that accepts up to three arguments. The map method calls the\n     * callbackfn function one time for each element in the array.\n     * @param thisArg An object to which the this keyword can refer in the callbackfn function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    map(callbackfn: (value: number, index: number, array: Float64Array) => number, thisArg?: any): Float64Array;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number): number;\n    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array. The return value of\n     * the callback function is the accumulated result, and is provided as an argument in the next\n     * call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduce method calls the\n     * callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an\n     * argument instead of an array value.\n     */\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number): number;\n    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue: number): number;\n\n    /**\n     * Calls the specified callback function for all the elements in an array, in descending order.\n     * The return value of the callback function is the accumulated result, and is provided as an\n     * argument in the next call to the callback function.\n     * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls\n     * the callbackfn function one time for each element in the array.\n     * @param initialValue If initialValue is specified, it is used as the initial value to start\n     * the accumulation. The first call to the callbackfn function provides this value as an argument\n     * instead of an array value.\n     */\n    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U;\n\n    /**\n     * Reverses the elements in an Array.\n     */\n    reverse(): Float64Array;\n\n    /**\n     * Sets a value or an array of values.\n     * @param array A typed or untyped array of values to set.\n     * @param offset The index in the current array at which the values are to be written.\n     */\n    set(array: ArrayLike<number>, offset?: number): void;\n\n    /**\n     * Returns a section of an array.\n     * @param start The beginning of the specified portion of the array.\n     * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'.\n     */\n    slice(start?: number, end?: number): Float64Array;\n\n    /**\n     * Determines whether the specified callback function returns true for any element of an array.\n     * @param predicate A function that accepts up to three arguments. The some method calls\n     * the predicate function for each element in the array until the predicate returns a value\n     * which is coercible to the Boolean value true, or until the end of the array.\n     * @param thisArg An object to which the this keyword can refer in the predicate function.\n     * If thisArg is omitted, undefined is used as the this value.\n     */\n    some(predicate: (value: number, index: number, array: Float64Array) => unknown, thisArg?: any): boolean;\n\n    /**\n     * Sorts an array.\n     * @param compareFn Function used to determine the order of the elements. It is expected to return\n     * a negative value if first argument is less than second argument, zero if they're equal and a positive\n     * value otherwise. If omitted, the elements are sorted in ascending order.\n     * \\`\\`\\`ts\n     * [11,2,22,1].sort((a, b) => a - b)\n     * \\`\\`\\`\n     */\n    sort(compareFn?: (a: number, b: number) => number): this;\n\n    /**\n     * at begin, inclusive, up to end, exclusive.\n     * @param begin The index of the beginning of the array.\n     * @param end The index of the end of the array.\n     */\n    subarray(begin?: number, end?: number): Float64Array;\n\n    toString(): string;\n\n    /** Returns the primitive value of the specified object. */\n    valueOf(): Float64Array;\n\n    [index: number]: number;\n}\n\ninterface Float64ArrayConstructor {\n    readonly prototype: Float64Array;\n    new(length: number): Float64Array;\n    new(array: ArrayLike<number> | ArrayBufferLike): Float64Array;\n    new(buffer: ArrayBufferLike, byteOffset?: number, length?: number): Float64Array;\n\n    /**\n     * The size in bytes of each element in the array.\n     */\n    readonly BYTES_PER_ELEMENT: number;\n\n    /**\n     * Returns a new array from a set of elements.\n     * @param items A set of elements to include in the new array object.\n     */\n    of(...items: number[]): Float64Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     */\n    from(arrayLike: ArrayLike<number>): Float64Array;\n\n    /**\n     * Creates an array from an array-like or iterable object.\n     * @param arrayLike An array-like or iterable object to convert to an array.\n     * @param mapfn A mapping function to call on every element of the array.\n     * @param thisArg Value of 'this' used to invoke the mapfn.\n     */\n    from<T>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => number, thisArg?: any): Float64Array;\n\n}\ndeclare var Float64Array: Float64ArrayConstructor;\n\n/////////////////////////////\n/// ECMAScript Internationalization API\n/////////////////////////////\n\ndeclare namespace Intl {\n    interface CollatorOptions {\n        usage?: string | undefined;\n        localeMatcher?: string | undefined;\n        numeric?: boolean | undefined;\n        caseFirst?: string | undefined;\n        sensitivity?: string | undefined;\n        ignorePunctuation?: boolean | undefined;\n    }\n\n    interface ResolvedCollatorOptions {\n        locale: string;\n        usage: string;\n        sensitivity: string;\n        ignorePunctuation: boolean;\n        collation: string;\n        caseFirst: string;\n        numeric: boolean;\n    }\n\n    interface Collator {\n        compare(x: string, y: string): number;\n        resolvedOptions(): ResolvedCollatorOptions;\n    }\n    var Collator: {\n        new(locales?: string | string[], options?: CollatorOptions): Collator;\n        (locales?: string | string[], options?: CollatorOptions): Collator;\n        supportedLocalesOf(locales: string | string[], options?: CollatorOptions): string[];\n    };\n\n    interface NumberFormatOptions {\n        localeMatcher?: string | undefined;\n        style?: string | undefined;\n        currency?: string | undefined;\n        currencySign?: string | undefined;\n        useGrouping?: boolean | undefined;\n        minimumIntegerDigits?: number | undefined;\n        minimumFractionDigits?: number | undefined;\n        maximumFractionDigits?: number | undefined;\n        minimumSignificantDigits?: number | undefined;\n        maximumSignificantDigits?: number | undefined;\n    }\n\n    interface ResolvedNumberFormatOptions {\n        locale: string;\n        numberingSystem: string;\n        style: string;\n        currency?: string;\n        minimumIntegerDigits: number;\n        minimumFractionDigits: number;\n        maximumFractionDigits: number;\n        minimumSignificantDigits?: number;\n        maximumSignificantDigits?: number;\n        useGrouping: boolean;\n    }\n\n    interface NumberFormat {\n        format(value: number): string;\n        resolvedOptions(): ResolvedNumberFormatOptions;\n    }\n    var NumberFormat: {\n        new(locales?: string | string[], options?: NumberFormatOptions): NumberFormat;\n        (locales?: string | string[], options?: NumberFormatOptions): NumberFormat;\n        supportedLocalesOf(locales: string | string[], options?: NumberFormatOptions): string[];\n        readonly prototype: NumberFormat;\n    };\n\n    interface DateTimeFormatOptions {\n        localeMatcher?: \"best fit\" | \"lookup\" | undefined;\n        weekday?: \"long\" | \"short\" | \"narrow\" | undefined;\n        era?: \"long\" | \"short\" | \"narrow\" | undefined;\n        year?: \"numeric\" | \"2-digit\" | undefined;\n        month?: \"numeric\" | \"2-digit\" | \"long\" | \"short\" | \"narrow\" | undefined;\n        day?: \"numeric\" | \"2-digit\" | undefined;\n        hour?: \"numeric\" | \"2-digit\" | undefined;\n        minute?: \"numeric\" | \"2-digit\" | undefined;\n        second?: \"numeric\" | \"2-digit\" | undefined;\n        timeZoneName?: \"short\" | \"long\" | \"shortOffset\" | \"longOffset\" | \"shortGeneric\" | \"longGeneric\" | undefined;\n        formatMatcher?: \"best fit\" | \"basic\" | undefined;\n        hour12?: boolean | undefined;\n        timeZone?: string | undefined;\n    }\n\n    interface ResolvedDateTimeFormatOptions {\n        locale: string;\n        calendar: string;\n        numberingSystem: string;\n        timeZone: string;\n        hour12?: boolean;\n        weekday?: string;\n        era?: string;\n        year?: string;\n        month?: string;\n        day?: string;\n        hour?: string;\n        minute?: string;\n        second?: string;\n        timeZoneName?: string;\n    }\n\n    interface DateTimeFormat {\n        format(date?: Date | number): string;\n        resolvedOptions(): ResolvedDateTimeFormatOptions;\n    }\n    var DateTimeFormat: {\n        new(locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;\n        (locales?: string | string[], options?: DateTimeFormatOptions): DateTimeFormat;\n        supportedLocalesOf(locales: string | string[], options?: DateTimeFormatOptions): string[];\n        readonly prototype: DateTimeFormat;\n    };\n}\n\ninterface String {\n    /**\n     * Determines whether two strings are equivalent in the current or specified locale.\n     * @param that String to compare to target string\n     * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.\n     * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.\n     */\n    localeCompare(that: string, locales?: string | string[], options?: Intl.CollatorOptions): number;\n}\n\ninterface Number {\n    /**\n     * Converts a number to a string by using the current or specified locale.\n     * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n     * @param options An object that contains one or more properties that specify comparison options.\n     */\n    toLocaleString(locales?: string | string[], options?: Intl.NumberFormatOptions): string;\n}\n\ninterface Date {\n    /**\n     * Converts a date and time to a string by using the current or specified locale.\n     * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n     * @param options An object that contains one or more properties that specify comparison options.\n     */\n    toLocaleString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\n    /**\n     * Converts a date to a string by using the current or specified locale.\n     * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n     * @param options An object that contains one or more properties that specify comparison options.\n     */\n    toLocaleDateString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\n\n    /**\n     * Converts a time to a string by using the current or specified locale.\n     * @param locales A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.\n     * @param options An object that contains one or more properties that specify comparison options.\n     */\n    toLocaleTimeString(locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;\n}\n`;$i[\"lib.es6.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2015\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"dom.iterable\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n`;$i[\"lib.esnext.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"es2023\" />\n/// <reference lib=\"esnext.intl\" />\n`;$i[\"lib.esnext.full.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/// <reference lib=\"esnext\" />\n/// <reference lib=\"dom\" />\n/// <reference lib=\"webworker.importscripts\" />\n/// <reference lib=\"scripthost\" />\n/// <reference lib=\"dom.iterable\" />`;$i[\"lib.esnext.intl.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\ndeclare namespace Intl {\n  interface NumberRangeFormatPart extends NumberFormatPart {\n    source: \"startRange\" | \"endRange\" | \"shared\"\n  }\n\n  interface NumberFormat {\n    formatRange(start: number | bigint, end: number | bigint): string;\n    formatRangeToParts(start: number | bigint, end: number | bigint): NumberRangeFormatPart[];\n  }\n}\n`;$i[\"lib.scripthost.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n\n\n/////////////////////////////\n/// Windows Script Host APIS\n/////////////////////////////\n\n\ninterface ActiveXObject {\n    new (s: string): any;\n}\ndeclare var ActiveXObject: ActiveXObject;\n\ninterface ITextWriter {\n    Write(s: string): void;\n    WriteLine(s: string): void;\n    Close(): void;\n}\n\ninterface TextStreamBase {\n    /**\n     * The column number of the current character position in an input stream.\n     */\n    Column: number;\n\n    /**\n     * The current line number in an input stream.\n     */\n    Line: number;\n\n    /**\n     * Closes a text stream.\n     * It is not necessary to close standard streams; they close automatically when the process ends. If\n     * you close a standard stream, be aware that any other pointers to that standard stream become invalid.\n     */\n    Close(): void;\n}\n\ninterface TextStreamWriter extends TextStreamBase {\n    /**\n     * Sends a string to an output stream.\n     */\n    Write(s: string): void;\n\n    /**\n     * Sends a specified number of blank lines (newline characters) to an output stream.\n     */\n    WriteBlankLines(intLines: number): void;\n\n    /**\n     * Sends a string followed by a newline character to an output stream.\n     */\n    WriteLine(s: string): void;\n}\n\ninterface TextStreamReader extends TextStreamBase {\n    /**\n     * Returns a specified number of characters from an input stream, starting at the current pointer position.\n     * Does not return until the ENTER key is pressed.\n     * Can only be used on a stream in reading mode; causes an error in writing or appending mode.\n     */\n    Read(characters: number): string;\n\n    /**\n     * Returns all characters from an input stream.\n     * Can only be used on a stream in reading mode; causes an error in writing or appending mode.\n     */\n    ReadAll(): string;\n\n    /**\n     * Returns an entire line from an input stream.\n     * Although this method extracts the newline character, it does not add it to the returned string.\n     * Can only be used on a stream in reading mode; causes an error in writing or appending mode.\n     */\n    ReadLine(): string;\n\n    /**\n     * Skips a specified number of characters when reading from an input text stream.\n     * Can only be used on a stream in reading mode; causes an error in writing or appending mode.\n     * @param characters Positive number of characters to skip forward. (Backward skipping is not supported.)\n     */\n    Skip(characters: number): void;\n\n    /**\n     * Skips the next line when reading from an input text stream.\n     * Can only be used on a stream in reading mode, not writing or appending mode.\n     */\n    SkipLine(): void;\n\n    /**\n     * Indicates whether the stream pointer position is at the end of a line.\n     */\n    AtEndOfLine: boolean;\n\n    /**\n     * Indicates whether the stream pointer position is at the end of a stream.\n     */\n    AtEndOfStream: boolean;\n}\n\ndeclare var WScript: {\n    /**\n     * Outputs text to either a message box (under WScript.exe) or the command console window followed by\n     * a newline (under CScript.exe).\n     */\n    Echo(s: any): void;\n\n    /**\n     * Exposes the write-only error output stream for the current script.\n     * Can be accessed only while using CScript.exe.\n     */\n    StdErr: TextStreamWriter;\n\n    /**\n     * Exposes the write-only output stream for the current script.\n     * Can be accessed only while using CScript.exe.\n     */\n    StdOut: TextStreamWriter;\n    Arguments: { length: number; Item(n: number): string; };\n\n    /**\n     *  The full path of the currently running script.\n     */\n    ScriptFullName: string;\n\n    /**\n     * Forces the script to stop immediately, with an optional exit code.\n     */\n    Quit(exitCode?: number): number;\n\n    /**\n     * The Windows Script Host build version number.\n     */\n    BuildVersion: number;\n\n    /**\n     * Fully qualified path of the host executable.\n     */\n    FullName: string;\n\n    /**\n     * Gets/sets the script mode - interactive(true) or batch(false).\n     */\n    Interactive: boolean;\n\n    /**\n     * The name of the host executable (WScript.exe or CScript.exe).\n     */\n    Name: string;\n\n    /**\n     * Path of the directory containing the host executable.\n     */\n    Path: string;\n\n    /**\n     * The filename of the currently running script.\n     */\n    ScriptName: string;\n\n    /**\n     * Exposes the read-only input stream for the current script.\n     * Can be accessed only while using CScript.exe.\n     */\n    StdIn: TextStreamReader;\n\n    /**\n     * Windows Script Host version\n     */\n    Version: string;\n\n    /**\n     * Connects a COM object's event sources to functions named with a given prefix, in the form prefix_event.\n     */\n    ConnectObject(objEventSource: any, strPrefix: string): void;\n\n    /**\n     * Creates a COM object.\n     * @param strProgiID\n     * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events.\n     */\n    CreateObject(strProgID: string, strPrefix?: string): any;\n\n    /**\n     * Disconnects a COM object from its event sources.\n     */\n    DisconnectObject(obj: any): void;\n\n    /**\n     * Retrieves an existing object with the specified ProgID from memory, or creates a new one from a file.\n     * @param strPathname Fully qualified path to the file containing the object persisted to disk.\n     *                       For objects in memory, pass a zero-length string.\n     * @param strProgID\n     * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events.\n     */\n    GetObject(strPathname: string, strProgID?: string, strPrefix?: string): any;\n\n    /**\n     * Suspends script execution for a specified length of time, then continues execution.\n     * @param intTime Interval (in milliseconds) to suspend script execution.\n     */\n    Sleep(intTime: number): void;\n};\n\n/**\n * WSH is an alias for WScript under Windows Script Host\n */\ndeclare var WSH: typeof WScript;\n\n/**\n * Represents an Automation SAFEARRAY\n */\ndeclare class SafeArray<T = any> {\n    private constructor();\n    private SafeArray_typekey: SafeArray<T>;\n}\n\n/**\n * Allows enumerating over a COM collection, which may not have indexed item access.\n */\ninterface Enumerator<T = any> {\n    /**\n     * Returns true if the current item is the last one in the collection, or the collection is empty,\n     * or the current item is undefined.\n     */\n    atEnd(): boolean;\n\n    /**\n     * Returns the current item in the collection\n     */\n    item(): T;\n\n    /**\n     * Resets the current item in the collection to the first item. If there are no items in the collection,\n     * the current item is set to undefined.\n     */\n    moveFirst(): void;\n\n    /**\n     * Moves the current item to the next item in the collection. If the enumerator is at the end of\n     * the collection or the collection is empty, the current item is set to undefined.\n     */\n    moveNext(): void;\n}\n\ninterface EnumeratorConstructor {\n    new <T = any>(safearray: SafeArray<T>): Enumerator<T>;\n    new <T = any>(collection: { Item(index: any): T }): Enumerator<T>;\n    new <T = any>(collection: any): Enumerator<T>;\n}\n\ndeclare var Enumerator: EnumeratorConstructor;\n\n/**\n * Enables reading from a COM safe array, which might have an alternate lower bound, or multiple dimensions.\n */\ninterface VBArray<T = any> {\n    /**\n     * Returns the number of dimensions (1-based).\n     */\n    dimensions(): number;\n\n    /**\n     * Takes an index for each dimension in the array, and returns the item at the corresponding location.\n     */\n    getItem(dimension1Index: number, ...dimensionNIndexes: number[]): T;\n\n    /**\n     * Returns the smallest available index for a given dimension.\n     * @param dimension 1-based dimension (defaults to 1)\n     */\n    lbound(dimension?: number): number;\n\n    /**\n     * Returns the largest available index for a given dimension.\n     * @param dimension 1-based dimension (defaults to 1)\n     */\n    ubound(dimension?: number): number;\n\n    /**\n     * Returns a Javascript array with all the elements in the VBArray. If there are multiple dimensions,\n     * each successive dimension is appended to the end of the array.\n     * Example: [[1,2,3],[4,5,6]] becomes [1,2,3,4,5,6]\n     */\n    toArray(): T[];\n}\n\ninterface VBArrayConstructor {\n    new <T = any>(safeArray: SafeArray<T>): VBArray<T>;\n}\n\ndeclare var VBArray: VBArrayConstructor;\n\n/**\n * Automation date (VT_DATE)\n */\ndeclare class VarDate {\n    private constructor();\n    private VarDate_typekey: VarDate;\n}\n\ninterface DateConstructor {\n    new (vd: VarDate): Date;\n}\n\ninterface Date {\n    getVarDate: () => VarDate;\n}\n`;$i[\"lib.webworker.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/////////////////////////////\n/// Worker APIs\n/////////////////////////////\n\ninterface AddEventListenerOptions extends EventListenerOptions {\n    once?: boolean;\n    passive?: boolean;\n    signal?: AbortSignal;\n}\n\ninterface AesCbcParams extends Algorithm {\n    iv: BufferSource;\n}\n\ninterface AesCtrParams extends Algorithm {\n    counter: BufferSource;\n    length: number;\n}\n\ninterface AesDerivedKeyParams extends Algorithm {\n    length: number;\n}\n\ninterface AesGcmParams extends Algorithm {\n    additionalData?: BufferSource;\n    iv: BufferSource;\n    tagLength?: number;\n}\n\ninterface AesKeyAlgorithm extends KeyAlgorithm {\n    length: number;\n}\n\ninterface AesKeyGenParams extends Algorithm {\n    length: number;\n}\n\ninterface Algorithm {\n    name: string;\n}\n\ninterface AudioConfiguration {\n    bitrate?: number;\n    channels?: string;\n    contentType: string;\n    samplerate?: number;\n    spatialRendering?: boolean;\n}\n\ninterface BlobPropertyBag {\n    endings?: EndingType;\n    type?: string;\n}\n\ninterface CacheQueryOptions {\n    ignoreMethod?: boolean;\n    ignoreSearch?: boolean;\n    ignoreVary?: boolean;\n}\n\ninterface ClientQueryOptions {\n    includeUncontrolled?: boolean;\n    type?: ClientTypes;\n}\n\ninterface CloseEventInit extends EventInit {\n    code?: number;\n    reason?: string;\n    wasClean?: boolean;\n}\n\ninterface CryptoKeyPair {\n    privateKey: CryptoKey;\n    publicKey: CryptoKey;\n}\n\ninterface CustomEventInit<T = any> extends EventInit {\n    detail?: T;\n}\n\ninterface DOMMatrix2DInit {\n    a?: number;\n    b?: number;\n    c?: number;\n    d?: number;\n    e?: number;\n    f?: number;\n    m11?: number;\n    m12?: number;\n    m21?: number;\n    m22?: number;\n    m41?: number;\n    m42?: number;\n}\n\ninterface DOMMatrixInit extends DOMMatrix2DInit {\n    is2D?: boolean;\n    m13?: number;\n    m14?: number;\n    m23?: number;\n    m24?: number;\n    m31?: number;\n    m32?: number;\n    m33?: number;\n    m34?: number;\n    m43?: number;\n    m44?: number;\n}\n\ninterface DOMPointInit {\n    w?: number;\n    x?: number;\n    y?: number;\n    z?: number;\n}\n\ninterface DOMQuadInit {\n    p1?: DOMPointInit;\n    p2?: DOMPointInit;\n    p3?: DOMPointInit;\n    p4?: DOMPointInit;\n}\n\ninterface DOMRectInit {\n    height?: number;\n    width?: number;\n    x?: number;\n    y?: number;\n}\n\ninterface EcKeyGenParams extends Algorithm {\n    namedCurve: NamedCurve;\n}\n\ninterface EcKeyImportParams extends Algorithm {\n    namedCurve: NamedCurve;\n}\n\ninterface EcdhKeyDeriveParams extends Algorithm {\n    public: CryptoKey;\n}\n\ninterface EcdsaParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n}\n\ninterface ErrorEventInit extends EventInit {\n    colno?: number;\n    error?: any;\n    filename?: string;\n    lineno?: number;\n    message?: string;\n}\n\ninterface EventInit {\n    bubbles?: boolean;\n    cancelable?: boolean;\n    composed?: boolean;\n}\n\ninterface EventListenerOptions {\n    capture?: boolean;\n}\n\ninterface EventSourceInit {\n    withCredentials?: boolean;\n}\n\ninterface ExtendableEventInit extends EventInit {\n}\n\ninterface ExtendableMessageEventInit extends ExtendableEventInit {\n    data?: any;\n    lastEventId?: string;\n    origin?: string;\n    ports?: MessagePort[];\n    source?: Client | ServiceWorker | MessagePort | null;\n}\n\ninterface FetchEventInit extends ExtendableEventInit {\n    clientId?: string;\n    handled?: Promise<undefined>;\n    preloadResponse?: Promise<any>;\n    replacesClientId?: string;\n    request: Request;\n    resultingClientId?: string;\n}\n\ninterface FilePropertyBag extends BlobPropertyBag {\n    lastModified?: number;\n}\n\ninterface FileSystemGetDirectoryOptions {\n    create?: boolean;\n}\n\ninterface FileSystemGetFileOptions {\n    create?: boolean;\n}\n\ninterface FileSystemReadWriteOptions {\n    at?: number;\n}\n\ninterface FileSystemRemoveOptions {\n    recursive?: boolean;\n}\n\ninterface FontFaceDescriptors {\n    ascentOverride?: string;\n    descentOverride?: string;\n    display?: FontDisplay;\n    featureSettings?: string;\n    lineGapOverride?: string;\n    stretch?: string;\n    style?: string;\n    unicodeRange?: string;\n    variant?: string;\n    weight?: string;\n}\n\ninterface FontFaceSetLoadEventInit extends EventInit {\n    fontfaces?: FontFace[];\n}\n\ninterface GetNotificationOptions {\n    tag?: string;\n}\n\ninterface HkdfParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n    info: BufferSource;\n    salt: BufferSource;\n}\n\ninterface HmacImportParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n    length?: number;\n}\n\ninterface HmacKeyGenParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n    length?: number;\n}\n\ninterface IDBDatabaseInfo {\n    name?: string;\n    version?: number;\n}\n\ninterface IDBIndexParameters {\n    multiEntry?: boolean;\n    unique?: boolean;\n}\n\ninterface IDBObjectStoreParameters {\n    autoIncrement?: boolean;\n    keyPath?: string | string[] | null;\n}\n\ninterface IDBTransactionOptions {\n    durability?: IDBTransactionDurability;\n}\n\ninterface IDBVersionChangeEventInit extends EventInit {\n    newVersion?: number | null;\n    oldVersion?: number;\n}\n\ninterface ImageBitmapOptions {\n    colorSpaceConversion?: ColorSpaceConversion;\n    imageOrientation?: ImageOrientation;\n    premultiplyAlpha?: PremultiplyAlpha;\n    resizeHeight?: number;\n    resizeQuality?: ResizeQuality;\n    resizeWidth?: number;\n}\n\ninterface ImageBitmapRenderingContextSettings {\n    alpha?: boolean;\n}\n\ninterface ImageDataSettings {\n    colorSpace?: PredefinedColorSpace;\n}\n\ninterface ImageEncodeOptions {\n    quality?: number;\n    type?: string;\n}\n\ninterface ImportMeta {\n    url: string;\n}\n\ninterface JsonWebKey {\n    alg?: string;\n    crv?: string;\n    d?: string;\n    dp?: string;\n    dq?: string;\n    e?: string;\n    ext?: boolean;\n    k?: string;\n    key_ops?: string[];\n    kty?: string;\n    n?: string;\n    oth?: RsaOtherPrimesInfo[];\n    p?: string;\n    q?: string;\n    qi?: string;\n    use?: string;\n    x?: string;\n    y?: string;\n}\n\ninterface KeyAlgorithm {\n    name: string;\n}\n\ninterface LockInfo {\n    clientId?: string;\n    mode?: LockMode;\n    name?: string;\n}\n\ninterface LockManagerSnapshot {\n    held?: LockInfo[];\n    pending?: LockInfo[];\n}\n\ninterface LockOptions {\n    ifAvailable?: boolean;\n    mode?: LockMode;\n    signal?: AbortSignal;\n    steal?: boolean;\n}\n\ninterface MediaCapabilitiesDecodingInfo extends MediaCapabilitiesInfo {\n    configuration?: MediaDecodingConfiguration;\n}\n\ninterface MediaCapabilitiesEncodingInfo extends MediaCapabilitiesInfo {\n    configuration?: MediaEncodingConfiguration;\n}\n\ninterface MediaCapabilitiesInfo {\n    powerEfficient: boolean;\n    smooth: boolean;\n    supported: boolean;\n}\n\ninterface MediaConfiguration {\n    audio?: AudioConfiguration;\n    video?: VideoConfiguration;\n}\n\ninterface MediaDecodingConfiguration extends MediaConfiguration {\n    type: MediaDecodingType;\n}\n\ninterface MediaEncodingConfiguration extends MediaConfiguration {\n    type: MediaEncodingType;\n}\n\ninterface MessageEventInit<T = any> extends EventInit {\n    data?: T;\n    lastEventId?: string;\n    origin?: string;\n    ports?: MessagePort[];\n    source?: MessageEventSource | null;\n}\n\ninterface MultiCacheQueryOptions extends CacheQueryOptions {\n    cacheName?: string;\n}\n\ninterface NavigationPreloadState {\n    enabled?: boolean;\n    headerValue?: string;\n}\n\ninterface NotificationAction {\n    action: string;\n    icon?: string;\n    title: string;\n}\n\ninterface NotificationEventInit extends ExtendableEventInit {\n    action?: string;\n    notification: Notification;\n}\n\ninterface NotificationOptions {\n    actions?: NotificationAction[];\n    badge?: string;\n    body?: string;\n    data?: any;\n    dir?: NotificationDirection;\n    icon?: string;\n    image?: string;\n    lang?: string;\n    renotify?: boolean;\n    requireInteraction?: boolean;\n    silent?: boolean;\n    tag?: string;\n    timestamp?: EpochTimeStamp;\n    vibrate?: VibratePattern;\n}\n\ninterface Pbkdf2Params extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n    iterations: number;\n    salt: BufferSource;\n}\n\ninterface PerformanceMarkOptions {\n    detail?: any;\n    startTime?: DOMHighResTimeStamp;\n}\n\ninterface PerformanceMeasureOptions {\n    detail?: any;\n    duration?: DOMHighResTimeStamp;\n    end?: string | DOMHighResTimeStamp;\n    start?: string | DOMHighResTimeStamp;\n}\n\ninterface PerformanceObserverInit {\n    buffered?: boolean;\n    entryTypes?: string[];\n    type?: string;\n}\n\ninterface PermissionDescriptor {\n    name: PermissionName;\n}\n\ninterface ProgressEventInit extends EventInit {\n    lengthComputable?: boolean;\n    loaded?: number;\n    total?: number;\n}\n\ninterface PromiseRejectionEventInit extends EventInit {\n    promise: Promise<any>;\n    reason?: any;\n}\n\ninterface PushEventInit extends ExtendableEventInit {\n    data?: PushMessageDataInit;\n}\n\ninterface PushSubscriptionJSON {\n    endpoint?: string;\n    expirationTime?: EpochTimeStamp | null;\n    keys?: Record<string, string>;\n}\n\ninterface PushSubscriptionOptionsInit {\n    applicationServerKey?: BufferSource | string | null;\n    userVisibleOnly?: boolean;\n}\n\ninterface QueuingStrategy<T = any> {\n    highWaterMark?: number;\n    size?: QueuingStrategySize<T>;\n}\n\ninterface QueuingStrategyInit {\n    /**\n     * Creates a new ByteLengthQueuingStrategy with the provided high water mark.\n     *\n     * Note that the provided high water mark will not be validated ahead of time. Instead, if it is negative, NaN, or not a number, the resulting ByteLengthQueuingStrategy will cause the corresponding stream constructor to throw.\n     */\n    highWaterMark: number;\n}\n\ninterface RTCEncodedAudioFrameMetadata {\n    contributingSources?: number[];\n    synchronizationSource?: number;\n}\n\ninterface RTCEncodedVideoFrameMetadata {\n    contributingSources?: number[];\n    dependencies?: number[];\n    frameId?: number;\n    height?: number;\n    spatialIndex?: number;\n    synchronizationSource?: number;\n    temporalIndex?: number;\n    width?: number;\n}\n\ninterface ReadableStreamGetReaderOptions {\n    /**\n     * Creates a ReadableStreamBYOBReader and locks the stream to the new reader.\n     *\n     * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams, i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading. The returned BYOB reader provides the ability to directly read individual chunks from the stream via its read() method, into developer-supplied buffers, allowing more precise control over allocation.\n     */\n    mode?: ReadableStreamReaderMode;\n}\n\ninterface ReadableStreamReadDoneResult<T> {\n    done: true;\n    value?: T;\n}\n\ninterface ReadableStreamReadValueResult<T> {\n    done: false;\n    value: T;\n}\n\ninterface ReadableWritablePair<R = any, W = any> {\n    readable: ReadableStream<R>;\n    /**\n     * Provides a convenient, chainable way of piping this readable stream through a transform stream (or any other { writable, readable } pair). It simply pipes the stream into the writable side of the supplied pair, and returns the readable side for further use.\n     *\n     * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n     */\n    writable: WritableStream<W>;\n}\n\ninterface RegistrationOptions {\n    scope?: string;\n    type?: WorkerType;\n    updateViaCache?: ServiceWorkerUpdateViaCache;\n}\n\ninterface RequestInit {\n    /** A BodyInit object or null to set request's body. */\n    body?: BodyInit | null;\n    /** A string indicating how the request will interact with the browser's cache to set request's cache. */\n    cache?: RequestCache;\n    /** A string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. Sets request's credentials. */\n    credentials?: RequestCredentials;\n    /** A Headers object, an object literal, or an array of two-item arrays to set request's headers. */\n    headers?: HeadersInit;\n    /** A cryptographic hash of the resource to be fetched by request. Sets request's integrity. */\n    integrity?: string;\n    /** A boolean to set request's keepalive. */\n    keepalive?: boolean;\n    /** A string to set request's method. */\n    method?: string;\n    /** A string to indicate whether the request will use CORS, or will be restricted to same-origin URLs. Sets request's mode. */\n    mode?: RequestMode;\n    /** A string indicating whether request follows redirects, results in an error upon encountering a redirect, or returns the redirect (in an opaque fashion). Sets request's redirect. */\n    redirect?: RequestRedirect;\n    /** A string whose value is a same-origin URL, \"about:client\", or the empty string, to set request's referrer. */\n    referrer?: string;\n    /** A referrer policy to set request's referrerPolicy. */\n    referrerPolicy?: ReferrerPolicy;\n    /** An AbortSignal to set request's signal. */\n    signal?: AbortSignal | null;\n    /** Can only be null. Used to disassociate request from any Window. */\n    window?: null;\n}\n\ninterface ResponseInit {\n    headers?: HeadersInit;\n    status?: number;\n    statusText?: string;\n}\n\ninterface RsaHashedImportParams extends Algorithm {\n    hash: HashAlgorithmIdentifier;\n}\n\ninterface RsaHashedKeyGenParams extends RsaKeyGenParams {\n    hash: HashAlgorithmIdentifier;\n}\n\ninterface RsaKeyGenParams extends Algorithm {\n    modulusLength: number;\n    publicExponent: BigInteger;\n}\n\ninterface RsaOaepParams extends Algorithm {\n    label?: BufferSource;\n}\n\ninterface RsaOtherPrimesInfo {\n    d?: string;\n    r?: string;\n    t?: string;\n}\n\ninterface RsaPssParams extends Algorithm {\n    saltLength: number;\n}\n\ninterface SecurityPolicyViolationEventInit extends EventInit {\n    blockedURI?: string;\n    columnNumber?: number;\n    disposition: SecurityPolicyViolationEventDisposition;\n    documentURI: string;\n    effectiveDirective: string;\n    lineNumber?: number;\n    originalPolicy: string;\n    referrer?: string;\n    sample?: string;\n    sourceFile?: string;\n    statusCode: number;\n    violatedDirective: string;\n}\n\ninterface StorageEstimate {\n    quota?: number;\n    usage?: number;\n}\n\ninterface StreamPipeOptions {\n    preventAbort?: boolean;\n    preventCancel?: boolean;\n    /**\n     * Pipes this readable stream to a given writable stream destination. The way in which the piping process behaves under various error conditions can be customized with a number of passed options. It returns a promise that fulfills when the piping process completes successfully, or rejects if any errors were encountered.\n     *\n     * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n     *\n     * Errors and closures of the source and destination streams propagate as follows:\n     *\n     * An error in this source readable stream will abort destination, unless preventAbort is truthy. The returned promise will be rejected with the source's error, or with any error that occurs during aborting the destination.\n     *\n     * An error in destination will cancel this source readable stream, unless preventCancel is truthy. The returned promise will be rejected with the destination's error, or with any error that occurs during canceling the source.\n     *\n     * When this source readable stream closes, destination will be closed, unless preventClose is truthy. The returned promise will be fulfilled once this process completes, unless an error is encountered while closing the destination, in which case it will be rejected with that error.\n     *\n     * If destination starts out closed or closing, this source readable stream will be canceled, unless preventCancel is true. The returned promise will be rejected with an error indicating piping to a closed stream failed, or with any error that occurs during canceling the source.\n     *\n     * The signal option can be set to an AbortSignal to allow aborting an ongoing pipe operation via the corresponding AbortController. In this case, this source readable stream will be canceled, and destination aborted, unless the respective options preventCancel or preventAbort are set.\n     */\n    preventClose?: boolean;\n    signal?: AbortSignal;\n}\n\ninterface StructuredSerializeOptions {\n    transfer?: Transferable[];\n}\n\ninterface TextDecodeOptions {\n    stream?: boolean;\n}\n\ninterface TextDecoderOptions {\n    fatal?: boolean;\n    ignoreBOM?: boolean;\n}\n\ninterface TextEncoderEncodeIntoResult {\n    read?: number;\n    written?: number;\n}\n\ninterface Transformer<I = any, O = any> {\n    flush?: TransformerFlushCallback<O>;\n    readableType?: undefined;\n    start?: TransformerStartCallback<O>;\n    transform?: TransformerTransformCallback<I, O>;\n    writableType?: undefined;\n}\n\ninterface UnderlyingByteSource {\n    autoAllocateChunkSize?: number;\n    cancel?: UnderlyingSourceCancelCallback;\n    pull?: (controller: ReadableByteStreamController) => void | PromiseLike<void>;\n    start?: (controller: ReadableByteStreamController) => any;\n    type: \"bytes\";\n}\n\ninterface UnderlyingDefaultSource<R = any> {\n    cancel?: UnderlyingSourceCancelCallback;\n    pull?: (controller: ReadableStreamDefaultController<R>) => void | PromiseLike<void>;\n    start?: (controller: ReadableStreamDefaultController<R>) => any;\n    type?: undefined;\n}\n\ninterface UnderlyingSink<W = any> {\n    abort?: UnderlyingSinkAbortCallback;\n    close?: UnderlyingSinkCloseCallback;\n    start?: UnderlyingSinkStartCallback;\n    type?: undefined;\n    write?: UnderlyingSinkWriteCallback<W>;\n}\n\ninterface UnderlyingSource<R = any> {\n    autoAllocateChunkSize?: number;\n    cancel?: UnderlyingSourceCancelCallback;\n    pull?: UnderlyingSourcePullCallback<R>;\n    start?: UnderlyingSourceStartCallback<R>;\n    type?: ReadableStreamType;\n}\n\ninterface VideoColorSpaceInit {\n    fullRange?: boolean | null;\n    matrix?: VideoMatrixCoefficients | null;\n    primaries?: VideoColorPrimaries | null;\n    transfer?: VideoTransferCharacteristics | null;\n}\n\ninterface VideoConfiguration {\n    bitrate: number;\n    colorGamut?: ColorGamut;\n    contentType: string;\n    framerate: number;\n    hdrMetadataType?: HdrMetadataType;\n    height: number;\n    scalabilityMode?: string;\n    transferFunction?: TransferFunction;\n    width: number;\n}\n\ninterface WebGLContextAttributes {\n    alpha?: boolean;\n    antialias?: boolean;\n    depth?: boolean;\n    desynchronized?: boolean;\n    failIfMajorPerformanceCaveat?: boolean;\n    powerPreference?: WebGLPowerPreference;\n    premultipliedAlpha?: boolean;\n    preserveDrawingBuffer?: boolean;\n    stencil?: boolean;\n}\n\ninterface WebGLContextEventInit extends EventInit {\n    statusMessage?: string;\n}\n\ninterface WorkerOptions {\n    credentials?: RequestCredentials;\n    name?: string;\n    type?: WorkerType;\n}\n\n/** The ANGLE_instanced_arrays extension is part of the WebGL API and allows to draw the same object, or groups of similar objects multiple times, if they share the same vertex data, primitive count and type. */\ninterface ANGLE_instanced_arrays {\n    drawArraysInstancedANGLE(mode: GLenum, first: GLint, count: GLsizei, primcount: GLsizei): void;\n    drawElementsInstancedANGLE(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, primcount: GLsizei): void;\n    vertexAttribDivisorANGLE(index: GLuint, divisor: GLuint): void;\n    readonly VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88FE;\n}\n\n/** A controller object that allows you to abort one or more DOM requests as and when desired. */\ninterface AbortController {\n    /** Returns the AbortSignal object associated with this object. */\n    readonly signal: AbortSignal;\n    /** Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. */\n    abort(reason?: any): void;\n}\n\ndeclare var AbortController: {\n    prototype: AbortController;\n    new(): AbortController;\n};\n\ninterface AbortSignalEventMap {\n    \"abort\": Event;\n}\n\n/** A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object. */\ninterface AbortSignal extends EventTarget {\n    /** Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise. */\n    readonly aborted: boolean;\n    onabort: ((this: AbortSignal, ev: Event) => any) | null;\n    readonly reason: any;\n    throwIfAborted(): void;\n    addEventListener<K extends keyof AbortSignalEventMap>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AbortSignalEventMap>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AbortSignal: {\n    prototype: AbortSignal;\n    new(): AbortSignal;\n    abort(reason?: any): AbortSignal;\n    timeout(milliseconds: number): AbortSignal;\n};\n\ninterface AbstractWorkerEventMap {\n    \"error\": ErrorEvent;\n}\n\ninterface AbstractWorker {\n    onerror: ((this: AbstractWorker, ev: ErrorEvent) => any) | null;\n    addEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: AbstractWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof AbstractWorkerEventMap>(type: K, listener: (this: AbstractWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ninterface AnimationFrameProvider {\n    cancelAnimationFrame(handle: number): void;\n    requestAnimationFrame(callback: FrameRequestCallback): number;\n}\n\n/** A file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user's system. */\ninterface Blob {\n    readonly size: number;\n    readonly type: string;\n    arrayBuffer(): Promise<ArrayBuffer>;\n    slice(start?: number, end?: number, contentType?: string): Blob;\n    stream(): ReadableStream<Uint8Array>;\n    text(): Promise<string>;\n}\n\ndeclare var Blob: {\n    prototype: Blob;\n    new(blobParts?: BlobPart[], options?: BlobPropertyBag): Blob;\n};\n\ninterface Body {\n    readonly body: ReadableStream<Uint8Array> | null;\n    readonly bodyUsed: boolean;\n    arrayBuffer(): Promise<ArrayBuffer>;\n    blob(): Promise<Blob>;\n    formData(): Promise<FormData>;\n    json(): Promise<any>;\n    text(): Promise<string>;\n}\n\ninterface BroadcastChannelEventMap {\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n}\n\ninterface BroadcastChannel extends EventTarget {\n    /** Returns the channel name (as passed to the constructor). */\n    readonly name: string;\n    onmessage: ((this: BroadcastChannel, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: BroadcastChannel, ev: MessageEvent) => any) | null;\n    /** Closes the BroadcastChannel object, opening it up to garbage collection. */\n    close(): void;\n    /** Sends the given message to other BroadcastChannel objects set up for this channel. Messages can be structured objects, e.g. nested objects and arrays. */\n    postMessage(message: any): void;\n    addEventListener<K extends keyof BroadcastChannelEventMap>(type: K, listener: (this: BroadcastChannel, ev: BroadcastChannelEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof BroadcastChannelEventMap>(type: K, listener: (this: BroadcastChannel, ev: BroadcastChannelEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var BroadcastChannel: {\n    prototype: BroadcastChannel;\n    new(name: string): BroadcastChannel;\n};\n\n/** This Streams API interface provides\\xA0a built-in byte length queuing strategy that can be used when constructing streams. */\ninterface ByteLengthQueuingStrategy extends QueuingStrategy<ArrayBufferView> {\n    readonly highWaterMark: number;\n    readonly size: QueuingStrategySize<ArrayBufferView>;\n}\n\ndeclare var ByteLengthQueuingStrategy: {\n    prototype: ByteLengthQueuingStrategy;\n    new(init: QueuingStrategyInit): ByteLengthQueuingStrategy;\n};\n\n/**\n * Provides a storage mechanism for Request / Response object pairs that are cached, for example as part of the ServiceWorker life cycle. Note that the Cache interface is exposed to windowed scopes as well as workers. You don't have to use it in conjunction with service workers, even though it is defined in the service worker spec.\n * Available only in secure contexts.\n */\ninterface Cache {\n    add(request: RequestInfo | URL): Promise<void>;\n    addAll(requests: RequestInfo[]): Promise<void>;\n    delete(request: RequestInfo | URL, options?: CacheQueryOptions): Promise<boolean>;\n    keys(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise<ReadonlyArray<Request>>;\n    match(request: RequestInfo | URL, options?: CacheQueryOptions): Promise<Response | undefined>;\n    matchAll(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise<ReadonlyArray<Response>>;\n    put(request: RequestInfo | URL, response: Response): Promise<void>;\n}\n\ndeclare var Cache: {\n    prototype: Cache;\n    new(): Cache;\n};\n\n/**\n * The storage for Cache objects.\n * Available only in secure contexts.\n */\ninterface CacheStorage {\n    delete(cacheName: string): Promise<boolean>;\n    has(cacheName: string): Promise<boolean>;\n    keys(): Promise<string[]>;\n    match(request: RequestInfo | URL, options?: MultiCacheQueryOptions): Promise<Response | undefined>;\n    open(cacheName: string): Promise<Cache>;\n}\n\ndeclare var CacheStorage: {\n    prototype: CacheStorage;\n    new(): CacheStorage;\n};\n\ninterface CanvasCompositing {\n    globalAlpha: number;\n    globalCompositeOperation: GlobalCompositeOperation;\n}\n\ninterface CanvasDrawImage {\n    drawImage(image: CanvasImageSource, dx: number, dy: number): void;\n    drawImage(image: CanvasImageSource, dx: number, dy: number, dw: number, dh: number): void;\n    drawImage(image: CanvasImageSource, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;\n}\n\ninterface CanvasDrawPath {\n    beginPath(): void;\n    clip(fillRule?: CanvasFillRule): void;\n    clip(path: Path2D, fillRule?: CanvasFillRule): void;\n    fill(fillRule?: CanvasFillRule): void;\n    fill(path: Path2D, fillRule?: CanvasFillRule): void;\n    isPointInPath(x: number, y: number, fillRule?: CanvasFillRule): boolean;\n    isPointInPath(path: Path2D, x: number, y: number, fillRule?: CanvasFillRule): boolean;\n    isPointInStroke(x: number, y: number): boolean;\n    isPointInStroke(path: Path2D, x: number, y: number): boolean;\n    stroke(): void;\n    stroke(path: Path2D): void;\n}\n\ninterface CanvasFillStrokeStyles {\n    fillStyle: string | CanvasGradient | CanvasPattern;\n    strokeStyle: string | CanvasGradient | CanvasPattern;\n    createConicGradient(startAngle: number, x: number, y: number): CanvasGradient;\n    createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;\n    createPattern(image: CanvasImageSource, repetition: string | null): CanvasPattern | null;\n    createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;\n}\n\ninterface CanvasFilters {\n    filter: string;\n}\n\n/** An opaque object describing a gradient. It is returned by the methods CanvasRenderingContext2D.createLinearGradient() or CanvasRenderingContext2D.createRadialGradient(). */\ninterface CanvasGradient {\n    /**\n     * Adds a color stop with the given color to the gradient at the given offset. 0.0 is the offset at one end of the gradient, 1.0 is the offset at the other end.\n     *\n     * Throws an \"IndexSizeError\" DOMException if the offset is out of range. Throws a \"SyntaxError\" DOMException if the color cannot be parsed.\n     */\n    addColorStop(offset: number, color: string): void;\n}\n\ndeclare var CanvasGradient: {\n    prototype: CanvasGradient;\n    new(): CanvasGradient;\n};\n\ninterface CanvasImageData {\n    createImageData(sw: number, sh: number, settings?: ImageDataSettings): ImageData;\n    createImageData(imagedata: ImageData): ImageData;\n    getImageData(sx: number, sy: number, sw: number, sh: number, settings?: ImageDataSettings): ImageData;\n    putImageData(imagedata: ImageData, dx: number, dy: number): void;\n    putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void;\n}\n\ninterface CanvasImageSmoothing {\n    imageSmoothingEnabled: boolean;\n    imageSmoothingQuality: ImageSmoothingQuality;\n}\n\ninterface CanvasPath {\n    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;\n    arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;\n    bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;\n    closePath(): void;\n    ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;\n    lineTo(x: number, y: number): void;\n    moveTo(x: number, y: number): void;\n    quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;\n    rect(x: number, y: number, w: number, h: number): void;\n    roundRect(x: number, y: number, w: number, h: number, radii?: number | DOMPointInit | (number | DOMPointInit)[]): void;\n}\n\ninterface CanvasPathDrawingStyles {\n    lineCap: CanvasLineCap;\n    lineDashOffset: number;\n    lineJoin: CanvasLineJoin;\n    lineWidth: number;\n    miterLimit: number;\n    getLineDash(): number[];\n    setLineDash(segments: number[]): void;\n}\n\n/** An opaque object describing a pattern, based on an image, a canvas, or a video, created by the CanvasRenderingContext2D.createPattern() method. */\ninterface CanvasPattern {\n    /** Sets the transformation matrix that will be used when rendering the pattern during a fill or stroke painting operation. */\n    setTransform(transform?: DOMMatrix2DInit): void;\n}\n\ndeclare var CanvasPattern: {\n    prototype: CanvasPattern;\n    new(): CanvasPattern;\n};\n\ninterface CanvasRect {\n    clearRect(x: number, y: number, w: number, h: number): void;\n    fillRect(x: number, y: number, w: number, h: number): void;\n    strokeRect(x: number, y: number, w: number, h: number): void;\n}\n\ninterface CanvasShadowStyles {\n    shadowBlur: number;\n    shadowColor: string;\n    shadowOffsetX: number;\n    shadowOffsetY: number;\n}\n\ninterface CanvasState {\n    restore(): void;\n    save(): void;\n}\n\ninterface CanvasText {\n    fillText(text: string, x: number, y: number, maxWidth?: number): void;\n    measureText(text: string): TextMetrics;\n    strokeText(text: string, x: number, y: number, maxWidth?: number): void;\n}\n\ninterface CanvasTextDrawingStyles {\n    direction: CanvasDirection;\n    font: string;\n    fontKerning: CanvasFontKerning;\n    textAlign: CanvasTextAlign;\n    textBaseline: CanvasTextBaseline;\n}\n\ninterface CanvasTransform {\n    getTransform(): DOMMatrix;\n    resetTransform(): void;\n    rotate(angle: number): void;\n    scale(x: number, y: number): void;\n    setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void;\n    setTransform(transform?: DOMMatrix2DInit): void;\n    transform(a: number, b: number, c: number, d: number, e: number, f: number): void;\n    translate(x: number, y: number): void;\n}\n\n/** The Client\\xA0interface represents an executable context such as a Worker, or a SharedWorker. Window clients are represented by the more-specific\\xA0WindowClient. You can get\\xA0Client/WindowClient\\xA0objects from methods such as Clients.matchAll() and\\xA0Clients.get(). */\ninterface Client {\n    readonly frameType: FrameType;\n    readonly id: string;\n    readonly type: ClientTypes;\n    readonly url: string;\n    postMessage(message: any, transfer: Transferable[]): void;\n    postMessage(message: any, options?: StructuredSerializeOptions): void;\n}\n\ndeclare var Client: {\n    prototype: Client;\n    new(): Client;\n};\n\n/** Provides access to\\xA0Client\\xA0objects. Access it\\xA0via self.clients\\xA0within a\\xA0service worker. */\ninterface Clients {\n    claim(): Promise<void>;\n    get(id: string): Promise<Client | undefined>;\n    matchAll<T extends ClientQueryOptions>(options?: T): Promise<ReadonlyArray<T[\"type\"] extends \"window\" ? WindowClient : Client>>;\n    openWindow(url: string | URL): Promise<WindowClient | null>;\n}\n\ndeclare var Clients: {\n    prototype: Clients;\n    new(): Clients;\n};\n\n/** A CloseEvent is sent to clients using WebSockets when the connection is closed. This is delivered to the listener indicated by the WebSocket object's onclose attribute. */\ninterface CloseEvent extends Event {\n    /** Returns the WebSocket connection close code provided by the server. */\n    readonly code: number;\n    /** Returns the WebSocket connection close reason provided by the server. */\n    readonly reason: string;\n    /** Returns true if the connection closed cleanly; false otherwise. */\n    readonly wasClean: boolean;\n}\n\ndeclare var CloseEvent: {\n    prototype: CloseEvent;\n    new(type: string, eventInitDict?: CloseEventInit): CloseEvent;\n};\n\n/** This Streams API interface provides\\xA0a built-in byte length queuing strategy that can be used when constructing streams. */\ninterface CountQueuingStrategy extends QueuingStrategy {\n    readonly highWaterMark: number;\n    readonly size: QueuingStrategySize;\n}\n\ndeclare var CountQueuingStrategy: {\n    prototype: CountQueuingStrategy;\n    new(init: QueuingStrategyInit): CountQueuingStrategy;\n};\n\n/** Basic cryptography features available in the current context. It allows access to a cryptographically strong random number generator and to cryptographic primitives. */\ninterface Crypto {\n    /** Available only in secure contexts. */\n    readonly subtle: SubtleCrypto;\n    getRandomValues<T extends ArrayBufferView | null>(array: T): T;\n    /** Available only in secure contexts. */\n    randomUUID(): \\`\\${string}-\\${string}-\\${string}-\\${string}-\\${string}\\`;\n}\n\ndeclare var Crypto: {\n    prototype: Crypto;\n    new(): Crypto;\n};\n\n/**\n * The CryptoKey dictionary of the Web Crypto API represents a cryptographic key.\n * Available only in secure contexts.\n */\ninterface CryptoKey {\n    readonly algorithm: KeyAlgorithm;\n    readonly extractable: boolean;\n    readonly type: KeyType;\n    readonly usages: KeyUsage[];\n}\n\ndeclare var CryptoKey: {\n    prototype: CryptoKey;\n    new(): CryptoKey;\n};\n\ninterface CustomEvent<T = any> extends Event {\n    /** Returns any custom data event was created with. Typically used for synthetic events. */\n    readonly detail: T;\n    /** @deprecated */\n    initCustomEvent(type: string, bubbles?: boolean, cancelable?: boolean, detail?: T): void;\n}\n\ndeclare var CustomEvent: {\n    prototype: CustomEvent;\n    new<T>(type: string, eventInitDict?: CustomEventInit<T>): CustomEvent<T>;\n};\n\n/** An abnormal event (called an exception) which occurs as a result of calling a method or accessing a property of a web API. */\ninterface DOMException extends Error {\n    /** @deprecated */\n    readonly code: number;\n    readonly message: string;\n    readonly name: string;\n    readonly INDEX_SIZE_ERR: 1;\n    readonly DOMSTRING_SIZE_ERR: 2;\n    readonly HIERARCHY_REQUEST_ERR: 3;\n    readonly WRONG_DOCUMENT_ERR: 4;\n    readonly INVALID_CHARACTER_ERR: 5;\n    readonly NO_DATA_ALLOWED_ERR: 6;\n    readonly NO_MODIFICATION_ALLOWED_ERR: 7;\n    readonly NOT_FOUND_ERR: 8;\n    readonly NOT_SUPPORTED_ERR: 9;\n    readonly INUSE_ATTRIBUTE_ERR: 10;\n    readonly INVALID_STATE_ERR: 11;\n    readonly SYNTAX_ERR: 12;\n    readonly INVALID_MODIFICATION_ERR: 13;\n    readonly NAMESPACE_ERR: 14;\n    readonly INVALID_ACCESS_ERR: 15;\n    readonly VALIDATION_ERR: 16;\n    readonly TYPE_MISMATCH_ERR: 17;\n    readonly SECURITY_ERR: 18;\n    readonly NETWORK_ERR: 19;\n    readonly ABORT_ERR: 20;\n    readonly URL_MISMATCH_ERR: 21;\n    readonly QUOTA_EXCEEDED_ERR: 22;\n    readonly TIMEOUT_ERR: 23;\n    readonly INVALID_NODE_TYPE_ERR: 24;\n    readonly DATA_CLONE_ERR: 25;\n}\n\ndeclare var DOMException: {\n    prototype: DOMException;\n    new(message?: string, name?: string): DOMException;\n    readonly INDEX_SIZE_ERR: 1;\n    readonly DOMSTRING_SIZE_ERR: 2;\n    readonly HIERARCHY_REQUEST_ERR: 3;\n    readonly WRONG_DOCUMENT_ERR: 4;\n    readonly INVALID_CHARACTER_ERR: 5;\n    readonly NO_DATA_ALLOWED_ERR: 6;\n    readonly NO_MODIFICATION_ALLOWED_ERR: 7;\n    readonly NOT_FOUND_ERR: 8;\n    readonly NOT_SUPPORTED_ERR: 9;\n    readonly INUSE_ATTRIBUTE_ERR: 10;\n    readonly INVALID_STATE_ERR: 11;\n    readonly SYNTAX_ERR: 12;\n    readonly INVALID_MODIFICATION_ERR: 13;\n    readonly NAMESPACE_ERR: 14;\n    readonly INVALID_ACCESS_ERR: 15;\n    readonly VALIDATION_ERR: 16;\n    readonly TYPE_MISMATCH_ERR: 17;\n    readonly SECURITY_ERR: 18;\n    readonly NETWORK_ERR: 19;\n    readonly ABORT_ERR: 20;\n    readonly URL_MISMATCH_ERR: 21;\n    readonly QUOTA_EXCEEDED_ERR: 22;\n    readonly TIMEOUT_ERR: 23;\n    readonly INVALID_NODE_TYPE_ERR: 24;\n    readonly DATA_CLONE_ERR: 25;\n};\n\ninterface DOMMatrix extends DOMMatrixReadOnly {\n    a: number;\n    b: number;\n    c: number;\n    d: number;\n    e: number;\n    f: number;\n    m11: number;\n    m12: number;\n    m13: number;\n    m14: number;\n    m21: number;\n    m22: number;\n    m23: number;\n    m24: number;\n    m31: number;\n    m32: number;\n    m33: number;\n    m34: number;\n    m41: number;\n    m42: number;\n    m43: number;\n    m44: number;\n    invertSelf(): DOMMatrix;\n    multiplySelf(other?: DOMMatrixInit): DOMMatrix;\n    preMultiplySelf(other?: DOMMatrixInit): DOMMatrix;\n    rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;\n    rotateFromVectorSelf(x?: number, y?: number): DOMMatrix;\n    rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;\n    scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n    scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n    skewXSelf(sx?: number): DOMMatrix;\n    skewYSelf(sy?: number): DOMMatrix;\n    translateSelf(tx?: number, ty?: number, tz?: number): DOMMatrix;\n}\n\ndeclare var DOMMatrix: {\n    prototype: DOMMatrix;\n    new(init?: string | number[]): DOMMatrix;\n    fromFloat32Array(array32: Float32Array): DOMMatrix;\n    fromFloat64Array(array64: Float64Array): DOMMatrix;\n    fromMatrix(other?: DOMMatrixInit): DOMMatrix;\n};\n\ninterface DOMMatrixReadOnly {\n    readonly a: number;\n    readonly b: number;\n    readonly c: number;\n    readonly d: number;\n    readonly e: number;\n    readonly f: number;\n    readonly is2D: boolean;\n    readonly isIdentity: boolean;\n    readonly m11: number;\n    readonly m12: number;\n    readonly m13: number;\n    readonly m14: number;\n    readonly m21: number;\n    readonly m22: number;\n    readonly m23: number;\n    readonly m24: number;\n    readonly m31: number;\n    readonly m32: number;\n    readonly m33: number;\n    readonly m34: number;\n    readonly m41: number;\n    readonly m42: number;\n    readonly m43: number;\n    readonly m44: number;\n    flipX(): DOMMatrix;\n    flipY(): DOMMatrix;\n    inverse(): DOMMatrix;\n    multiply(other?: DOMMatrixInit): DOMMatrix;\n    rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;\n    rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;\n    rotateFromVector(x?: number, y?: number): DOMMatrix;\n    scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n    scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n    /** @deprecated */\n    scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix;\n    skewX(sx?: number): DOMMatrix;\n    skewY(sy?: number): DOMMatrix;\n    toFloat32Array(): Float32Array;\n    toFloat64Array(): Float64Array;\n    toJSON(): any;\n    transformPoint(point?: DOMPointInit): DOMPoint;\n    translate(tx?: number, ty?: number, tz?: number): DOMMatrix;\n}\n\ndeclare var DOMMatrixReadOnly: {\n    prototype: DOMMatrixReadOnly;\n    new(init?: string | number[]): DOMMatrixReadOnly;\n    fromFloat32Array(array32: Float32Array): DOMMatrixReadOnly;\n    fromFloat64Array(array64: Float64Array): DOMMatrixReadOnly;\n    fromMatrix(other?: DOMMatrixInit): DOMMatrixReadOnly;\n};\n\ninterface DOMPoint extends DOMPointReadOnly {\n    w: number;\n    x: number;\n    y: number;\n    z: number;\n}\n\ndeclare var DOMPoint: {\n    prototype: DOMPoint;\n    new(x?: number, y?: number, z?: number, w?: number): DOMPoint;\n    fromPoint(other?: DOMPointInit): DOMPoint;\n};\n\ninterface DOMPointReadOnly {\n    readonly w: number;\n    readonly x: number;\n    readonly y: number;\n    readonly z: number;\n    matrixTransform(matrix?: DOMMatrixInit): DOMPoint;\n    toJSON(): any;\n}\n\ndeclare var DOMPointReadOnly: {\n    prototype: DOMPointReadOnly;\n    new(x?: number, y?: number, z?: number, w?: number): DOMPointReadOnly;\n    fromPoint(other?: DOMPointInit): DOMPointReadOnly;\n};\n\ninterface DOMQuad {\n    readonly p1: DOMPoint;\n    readonly p2: DOMPoint;\n    readonly p3: DOMPoint;\n    readonly p4: DOMPoint;\n    getBounds(): DOMRect;\n    toJSON(): any;\n}\n\ndeclare var DOMQuad: {\n    prototype: DOMQuad;\n    new(p1?: DOMPointInit, p2?: DOMPointInit, p3?: DOMPointInit, p4?: DOMPointInit): DOMQuad;\n    fromQuad(other?: DOMQuadInit): DOMQuad;\n    fromRect(other?: DOMRectInit): DOMQuad;\n};\n\ninterface DOMRect extends DOMRectReadOnly {\n    height: number;\n    width: number;\n    x: number;\n    y: number;\n}\n\ndeclare var DOMRect: {\n    prototype: DOMRect;\n    new(x?: number, y?: number, width?: number, height?: number): DOMRect;\n    fromRect(other?: DOMRectInit): DOMRect;\n};\n\ninterface DOMRectReadOnly {\n    readonly bottom: number;\n    readonly height: number;\n    readonly left: number;\n    readonly right: number;\n    readonly top: number;\n    readonly width: number;\n    readonly x: number;\n    readonly y: number;\n    toJSON(): any;\n}\n\ndeclare var DOMRectReadOnly: {\n    prototype: DOMRectReadOnly;\n    new(x?: number, y?: number, width?: number, height?: number): DOMRectReadOnly;\n    fromRect(other?: DOMRectInit): DOMRectReadOnly;\n};\n\n/** A type returned by some APIs which contains a list of DOMString (strings). */\ninterface DOMStringList {\n    /** Returns the number of strings in strings. */\n    readonly length: number;\n    /** Returns true if strings contains string, and false otherwise. */\n    contains(string: string): boolean;\n    /** Returns the string with index index from strings. */\n    item(index: number): string | null;\n    [index: number]: string;\n}\n\ndeclare var DOMStringList: {\n    prototype: DOMStringList;\n    new(): DOMStringList;\n};\n\ninterface DedicatedWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap {\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n}\n\n/** (the Worker global scope) is accessible through the self keyword. Some additional global functions, namespaces objects, and constructors, not typically associated with the worker global scope, but available on it, are listed in the JavaScript Reference. See also: Functions available to workers. */\ninterface DedicatedWorkerGlobalScope extends WorkerGlobalScope, AnimationFrameProvider {\n    /** Returns dedicatedWorkerGlobal's name, i.e. the value given to the Worker constructor. Primarily useful for debugging. */\n    readonly name: string;\n    onmessage: ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null;\n    /** Aborts dedicatedWorkerGlobal. */\n    close(): void;\n    /** Clones message and transmits it to the Worker object associated with dedicatedWorkerGlobal. transfer can be passed as a list of objects that are to be transferred rather than cloned. */\n    postMessage(message: any, transfer: Transferable[]): void;\n    postMessage(message: any, options?: StructuredSerializeOptions): void;\n    addEventListener<K extends keyof DedicatedWorkerGlobalScopeEventMap>(type: K, listener: (this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof DedicatedWorkerGlobalScopeEventMap>(type: K, listener: (this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var DedicatedWorkerGlobalScope: {\n    prototype: DedicatedWorkerGlobalScope;\n    new(): DedicatedWorkerGlobalScope;\n};\n\ninterface EXT_blend_minmax {\n    readonly MIN_EXT: 0x8007;\n    readonly MAX_EXT: 0x8008;\n}\n\ninterface EXT_color_buffer_float {\n}\n\ninterface EXT_color_buffer_half_float {\n    readonly RGBA16F_EXT: 0x881A;\n    readonly RGB16F_EXT: 0x881B;\n    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211;\n    readonly UNSIGNED_NORMALIZED_EXT: 0x8C17;\n}\n\ninterface EXT_float_blend {\n}\n\n/** The EXT_frag_depth extension is part of the WebGL API and enables to set a depth value of a fragment from within the fragment shader. */\ninterface EXT_frag_depth {\n}\n\ninterface EXT_sRGB {\n    readonly SRGB_EXT: 0x8C40;\n    readonly SRGB_ALPHA_EXT: 0x8C42;\n    readonly SRGB8_ALPHA8_EXT: 0x8C43;\n    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: 0x8210;\n}\n\ninterface EXT_shader_texture_lod {\n}\n\ninterface EXT_texture_compression_bptc {\n    readonly COMPRESSED_RGBA_BPTC_UNORM_EXT: 0x8E8C;\n    readonly COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT: 0x8E8D;\n    readonly COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT: 0x8E8E;\n    readonly COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT: 0x8E8F;\n}\n\ninterface EXT_texture_compression_rgtc {\n    readonly COMPRESSED_RED_RGTC1_EXT: 0x8DBB;\n    readonly COMPRESSED_SIGNED_RED_RGTC1_EXT: 0x8DBC;\n    readonly COMPRESSED_RED_GREEN_RGTC2_EXT: 0x8DBD;\n    readonly COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 0x8DBE;\n}\n\n/** The EXT_texture_filter_anisotropic extension is part of the WebGL API and exposes two constants for anisotropic filtering (AF). */\ninterface EXT_texture_filter_anisotropic {\n    readonly TEXTURE_MAX_ANISOTROPY_EXT: 0x84FE;\n    readonly MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84FF;\n}\n\ninterface EXT_texture_norm16 {\n    readonly R16_EXT: 0x822A;\n    readonly RG16_EXT: 0x822C;\n    readonly RGB16_EXT: 0x8054;\n    readonly RGBA16_EXT: 0x805B;\n    readonly R16_SNORM_EXT: 0x8F98;\n    readonly RG16_SNORM_EXT: 0x8F99;\n    readonly RGB16_SNORM_EXT: 0x8F9A;\n    readonly RGBA16_SNORM_EXT: 0x8F9B;\n}\n\n/** Events providing information related to errors in scripts or in files. */\ninterface ErrorEvent extends Event {\n    readonly colno: number;\n    readonly error: any;\n    readonly filename: string;\n    readonly lineno: number;\n    readonly message: string;\n}\n\ndeclare var ErrorEvent: {\n    prototype: ErrorEvent;\n    new(type: string, eventInitDict?: ErrorEventInit): ErrorEvent;\n};\n\n/** An event which takes place in the DOM. */\ninterface Event {\n    /** Returns true or false depending on how event was initialized. True if event goes through its target's ancestors in reverse tree order, and false otherwise. */\n    readonly bubbles: boolean;\n    /** @deprecated */\n    cancelBubble: boolean;\n    /** Returns true or false depending on how event was initialized. Its return value does not always carry meaning, but true can indicate that part of the operation during which event was dispatched, can be canceled by invoking the preventDefault() method. */\n    readonly cancelable: boolean;\n    /** Returns true or false depending on how event was initialized. True if event invokes listeners past a ShadowRoot node that is the root of its target, and false otherwise. */\n    readonly composed: boolean;\n    /** Returns the object whose event listener's callback is currently being invoked. */\n    readonly currentTarget: EventTarget | null;\n    /** Returns true if preventDefault() was invoked successfully to indicate cancelation, and false otherwise. */\n    readonly defaultPrevented: boolean;\n    /** Returns the event's phase, which is one of NONE, CAPTURING_PHASE, AT_TARGET, and BUBBLING_PHASE. */\n    readonly eventPhase: number;\n    /** Returns true if event was dispatched by the user agent, and false otherwise. */\n    readonly isTrusted: boolean;\n    /** @deprecated */\n    returnValue: boolean;\n    /** @deprecated */\n    readonly srcElement: EventTarget | null;\n    /** Returns the object to which event is dispatched (its target). */\n    readonly target: EventTarget | null;\n    /** Returns the event's timestamp as the number of milliseconds measured relative to the time origin. */\n    readonly timeStamp: DOMHighResTimeStamp;\n    /** Returns the type of event, e.g. \"click\", \"hashchange\", or \"submit\". */\n    readonly type: string;\n    /** Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is \"closed\" that are not reachable from event's currentTarget. */\n    composedPath(): EventTarget[];\n    /** @deprecated */\n    initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;\n    /** If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled. */\n    preventDefault(): void;\n    /** Invoking this method prevents event from reaching any registered event listeners after the current one finishes running and, when dispatched in a tree, also prevents event from reaching any other objects. */\n    stopImmediatePropagation(): void;\n    /** When dispatched in a tree, invoking this method prevents event from reaching any objects other than the current object. */\n    stopPropagation(): void;\n    readonly NONE: 0;\n    readonly CAPTURING_PHASE: 1;\n    readonly AT_TARGET: 2;\n    readonly BUBBLING_PHASE: 3;\n}\n\ndeclare var Event: {\n    prototype: Event;\n    new(type: string, eventInitDict?: EventInit): Event;\n    readonly NONE: 0;\n    readonly CAPTURING_PHASE: 1;\n    readonly AT_TARGET: 2;\n    readonly BUBBLING_PHASE: 3;\n};\n\ninterface EventListener {\n    (evt: Event): void;\n}\n\ninterface EventListenerObject {\n    handleEvent(object: Event): void;\n}\n\ninterface EventSourceEventMap {\n    \"error\": Event;\n    \"message\": MessageEvent;\n    \"open\": Event;\n}\n\ninterface EventSource extends EventTarget {\n    onerror: ((this: EventSource, ev: Event) => any) | null;\n    onmessage: ((this: EventSource, ev: MessageEvent) => any) | null;\n    onopen: ((this: EventSource, ev: Event) => any) | null;\n    /** Returns the state of this EventSource object's connection. It can have the values described below. */\n    readonly readyState: number;\n    /** Returns the URL providing the event stream. */\n    readonly url: string;\n    /** Returns true if the credentials mode for connection requests to the URL providing the event stream is set to \"include\", and false otherwise. */\n    readonly withCredentials: boolean;\n    /** Aborts any instances of the fetch algorithm started for this EventSource object, and sets the readyState attribute to CLOSED. */\n    close(): void;\n    readonly CONNECTING: 0;\n    readonly OPEN: 1;\n    readonly CLOSED: 2;\n    addEventListener<K extends keyof EventSourceEventMap>(type: K, listener: (this: EventSource, ev: EventSourceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: (this: EventSource, event: MessageEvent) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof EventSourceEventMap>(type: K, listener: (this: EventSource, ev: EventSourceEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: (this: EventSource, event: MessageEvent) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var EventSource: {\n    prototype: EventSource;\n    new(url: string | URL, eventSourceInitDict?: EventSourceInit): EventSource;\n    readonly CONNECTING: 0;\n    readonly OPEN: 1;\n    readonly CLOSED: 2;\n};\n\n/** EventTarget is a DOM interface implemented by objects that can receive events and may have listeners for them. */\ninterface EventTarget {\n    /**\n     * Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.\n     *\n     * The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture.\n     *\n     * When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET.\n     *\n     * When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in \\xA7 2.8 Observing event listeners.\n     *\n     * When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed.\n     *\n     * If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted.\n     *\n     * The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture.\n     */\n    addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void;\n    /** Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. */\n    dispatchEvent(event: Event): boolean;\n    /** Removes the event listener in target's event listener list with the same type, callback, and options. */\n    removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void;\n}\n\ndeclare var EventTarget: {\n    prototype: EventTarget;\n    new(): EventTarget;\n};\n\n/** Extends the lifetime of the install and activate events dispatched on the global scope as part of the service worker lifecycle. This ensures that any functional events (like FetchEvent) are not dispatched until it upgrades database schemas and deletes the outdated cache entries. */\ninterface ExtendableEvent extends Event {\n    waitUntil(f: Promise<any>): void;\n}\n\ndeclare var ExtendableEvent: {\n    prototype: ExtendableEvent;\n    new(type: string, eventInitDict?: ExtendableEventInit): ExtendableEvent;\n};\n\n/** This ServiceWorker API interface represents the event object of a message event fired on a service worker (when a channel message is received on the ServiceWorkerGlobalScope from another context) \\u2014 extends the lifetime of such events. */\ninterface ExtendableMessageEvent extends ExtendableEvent {\n    readonly data: any;\n    readonly lastEventId: string;\n    readonly origin: string;\n    readonly ports: ReadonlyArray<MessagePort>;\n    readonly source: Client | ServiceWorker | MessagePort | null;\n}\n\ndeclare var ExtendableMessageEvent: {\n    prototype: ExtendableMessageEvent;\n    new(type: string, eventInitDict?: ExtendableMessageEventInit): ExtendableMessageEvent;\n};\n\n/** This is the event type for fetch\\xA0events dispatched on the\\xA0service worker global scope. It contains information about the fetch, including the\\xA0request and how the receiver will treat the response. It provides the event.respondWith() method, which allows us to provide a response to this fetch. */\ninterface FetchEvent extends ExtendableEvent {\n    readonly clientId: string;\n    readonly handled: Promise<undefined>;\n    readonly preloadResponse: Promise<any>;\n    readonly request: Request;\n    readonly resultingClientId: string;\n    respondWith(r: Response | PromiseLike<Response>): void;\n}\n\ndeclare var FetchEvent: {\n    prototype: FetchEvent;\n    new(type: string, eventInitDict: FetchEventInit): FetchEvent;\n};\n\n/** Provides information about files and allows JavaScript in a web page to access their content. */\ninterface File extends Blob {\n    readonly lastModified: number;\n    readonly name: string;\n    readonly webkitRelativePath: string;\n}\n\ndeclare var File: {\n    prototype: File;\n    new(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag): File;\n};\n\n/** An object of this type is returned by the files property of the HTML <input> element; this lets you access the list of files selected with the <input type=\"file\"> element. It's also used for a list of files dropped into web content when using the drag and drop API; see the DataTransfer object for details on this usage. */\ninterface FileList {\n    readonly length: number;\n    item(index: number): File | null;\n    [index: number]: File;\n}\n\ndeclare var FileList: {\n    prototype: FileList;\n    new(): FileList;\n};\n\ninterface FileReaderEventMap {\n    \"abort\": ProgressEvent<FileReader>;\n    \"error\": ProgressEvent<FileReader>;\n    \"load\": ProgressEvent<FileReader>;\n    \"loadend\": ProgressEvent<FileReader>;\n    \"loadstart\": ProgressEvent<FileReader>;\n    \"progress\": ProgressEvent<FileReader>;\n}\n\n/** Lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read. */\ninterface FileReader extends EventTarget {\n    readonly error: DOMException | null;\n    onabort: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onerror: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onload: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onloadend: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onloadstart: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    onprogress: ((this: FileReader, ev: ProgressEvent<FileReader>) => any) | null;\n    readonly readyState: typeof FileReader.EMPTY | typeof FileReader.LOADING | typeof FileReader.DONE;\n    readonly result: string | ArrayBuffer | null;\n    abort(): void;\n    readAsArrayBuffer(blob: Blob): void;\n    readAsBinaryString(blob: Blob): void;\n    readAsDataURL(blob: Blob): void;\n    readAsText(blob: Blob, encoding?: string): void;\n    readonly EMPTY: 0;\n    readonly LOADING: 1;\n    readonly DONE: 2;\n    addEventListener<K extends keyof FileReaderEventMap>(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof FileReaderEventMap>(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var FileReader: {\n    prototype: FileReader;\n    new(): FileReader;\n    readonly EMPTY: 0;\n    readonly LOADING: 1;\n    readonly DONE: 2;\n};\n\n/** Allows to read File or Blob objects in a synchronous way. */\ninterface FileReaderSync {\n    readAsArrayBuffer(blob: Blob): ArrayBuffer;\n    /** @deprecated */\n    readAsBinaryString(blob: Blob): string;\n    readAsDataURL(blob: Blob): string;\n    readAsText(blob: Blob, encoding?: string): string;\n}\n\ndeclare var FileReaderSync: {\n    prototype: FileReaderSync;\n    new(): FileReaderSync;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemDirectoryHandle extends FileSystemHandle {\n    readonly kind: \"directory\";\n    getDirectoryHandle(name: string, options?: FileSystemGetDirectoryOptions): Promise<FileSystemDirectoryHandle>;\n    getFileHandle(name: string, options?: FileSystemGetFileOptions): Promise<FileSystemFileHandle>;\n    removeEntry(name: string, options?: FileSystemRemoveOptions): Promise<void>;\n    resolve(possibleDescendant: FileSystemHandle): Promise<string[] | null>;\n}\n\ndeclare var FileSystemDirectoryHandle: {\n    prototype: FileSystemDirectoryHandle;\n    new(): FileSystemDirectoryHandle;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemFileHandle extends FileSystemHandle {\n    readonly kind: \"file\";\n    createSyncAccessHandle(): Promise<FileSystemSyncAccessHandle>;\n    getFile(): Promise<File>;\n}\n\ndeclare var FileSystemFileHandle: {\n    prototype: FileSystemFileHandle;\n    new(): FileSystemFileHandle;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemHandle {\n    readonly kind: FileSystemHandleKind;\n    readonly name: string;\n    isSameEntry(other: FileSystemHandle): Promise<boolean>;\n}\n\ndeclare var FileSystemHandle: {\n    prototype: FileSystemHandle;\n    new(): FileSystemHandle;\n};\n\n/** Available only in secure contexts. */\ninterface FileSystemSyncAccessHandle {\n    close(): void;\n    flush(): void;\n    getSize(): number;\n    read(buffer: BufferSource, options?: FileSystemReadWriteOptions): number;\n    truncate(newSize: number): void;\n    write(buffer: BufferSource, options?: FileSystemReadWriteOptions): number;\n}\n\ndeclare var FileSystemSyncAccessHandle: {\n    prototype: FileSystemSyncAccessHandle;\n    new(): FileSystemSyncAccessHandle;\n};\n\ninterface FontFace {\n    ascentOverride: string;\n    descentOverride: string;\n    display: FontDisplay;\n    family: string;\n    featureSettings: string;\n    lineGapOverride: string;\n    readonly loaded: Promise<FontFace>;\n    readonly status: FontFaceLoadStatus;\n    stretch: string;\n    style: string;\n    unicodeRange: string;\n    variant: string;\n    weight: string;\n    load(): Promise<FontFace>;\n}\n\ndeclare var FontFace: {\n    prototype: FontFace;\n    new(family: string, source: string | BinaryData, descriptors?: FontFaceDescriptors): FontFace;\n};\n\ninterface FontFaceSetEventMap {\n    \"loading\": Event;\n    \"loadingdone\": Event;\n    \"loadingerror\": Event;\n}\n\ninterface FontFaceSet extends EventTarget {\n    onloading: ((this: FontFaceSet, ev: Event) => any) | null;\n    onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null;\n    onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null;\n    readonly ready: Promise<FontFaceSet>;\n    readonly status: FontFaceSetLoadStatus;\n    check(font: string, text?: string): boolean;\n    load(font: string, text?: string): Promise<FontFace[]>;\n    forEach(callbackfn: (value: FontFace, key: FontFace, parent: FontFaceSet) => void, thisArg?: any): void;\n    addEventListener<K extends keyof FontFaceSetEventMap>(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof FontFaceSetEventMap>(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var FontFaceSet: {\n    prototype: FontFaceSet;\n    new(initialFaces: FontFace[]): FontFaceSet;\n};\n\ninterface FontFaceSetLoadEvent extends Event {\n    readonly fontfaces: ReadonlyArray<FontFace>;\n}\n\ndeclare var FontFaceSetLoadEvent: {\n    prototype: FontFaceSetLoadEvent;\n    new(type: string, eventInitDict?: FontFaceSetLoadEventInit): FontFaceSetLoadEvent;\n};\n\ninterface FontFaceSource {\n    readonly fonts: FontFaceSet;\n}\n\n/** Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to \"multipart/form-data\". */\ninterface FormData {\n    append(name: string, value: string | Blob, fileName?: string): void;\n    delete(name: string): void;\n    get(name: string): FormDataEntryValue | null;\n    getAll(name: string): FormDataEntryValue[];\n    has(name: string): boolean;\n    set(name: string, value: string | Blob, fileName?: string): void;\n    forEach(callbackfn: (value: FormDataEntryValue, key: string, parent: FormData) => void, thisArg?: any): void;\n}\n\ndeclare var FormData: {\n    prototype: FormData;\n    new(): FormData;\n};\n\ninterface GenericTransformStream {\n    readonly readable: ReadableStream;\n    readonly writable: WritableStream;\n}\n\n/** This Fetch API interface allows you to perform various actions on HTTP request and response headers. These actions include retrieving, setting, adding to, and removing. A Headers object has an associated header list, which is initially empty and consists\\xA0of zero or more name and value pairs. \\xA0You can add to this using methods like append() (see Examples.)\\xA0In all methods of this interface, header names are matched by case-insensitive byte sequence. */\ninterface Headers {\n    append(name: string, value: string): void;\n    delete(name: string): void;\n    get(name: string): string | null;\n    has(name: string): boolean;\n    set(name: string, value: string): void;\n    forEach(callbackfn: (value: string, key: string, parent: Headers) => void, thisArg?: any): void;\n}\n\ndeclare var Headers: {\n    prototype: Headers;\n    new(init?: HeadersInit): Headers;\n};\n\n/** This IndexedDB API interface represents a cursor for traversing or iterating over multiple records in a database. */\ninterface IDBCursor {\n    /** Returns the direction (\"next\", \"nextunique\", \"prev\" or \"prevunique\") of the cursor. */\n    readonly direction: IDBCursorDirection;\n    /** Returns the key of the cursor. Throws a \"InvalidStateError\" DOMException if the cursor is advancing or is finished. */\n    readonly key: IDBValidKey;\n    /** Returns the effective key of the cursor. Throws a \"InvalidStateError\" DOMException if the cursor is advancing or is finished. */\n    readonly primaryKey: IDBValidKey;\n    readonly request: IDBRequest;\n    /** Returns the IDBObjectStore or IDBIndex the cursor was opened from. */\n    readonly source: IDBObjectStore | IDBIndex;\n    /** Advances the cursor through the next count records in range. */\n    advance(count: number): void;\n    /** Advances the cursor to the next record in range. */\n    continue(key?: IDBValidKey): void;\n    /** Advances the cursor to the next record in range matching or after key and primaryKey. Throws an \"InvalidAccessError\" DOMException if the source is not an index. */\n    continuePrimaryKey(key: IDBValidKey, primaryKey: IDBValidKey): void;\n    /**\n     * Delete the record pointed at by the cursor with a new value.\n     *\n     * If successful, request's result will be undefined.\n     */\n    delete(): IDBRequest<undefined>;\n    /**\n     * Updated the record pointed at by the cursor with a new value.\n     *\n     * Throws a \"DataError\" DOMException if the effective object store uses in-line keys and the key would have changed.\n     *\n     * If successful, request's result will be the record's key.\n     */\n    update(value: any): IDBRequest<IDBValidKey>;\n}\n\ndeclare var IDBCursor: {\n    prototype: IDBCursor;\n    new(): IDBCursor;\n};\n\n/** This IndexedDB API interface represents a cursor for traversing or iterating over multiple records in a database. It is the same as the IDBCursor, except that it includes the value property. */\ninterface IDBCursorWithValue extends IDBCursor {\n    /** Returns the cursor's current value. */\n    readonly value: any;\n}\n\ndeclare var IDBCursorWithValue: {\n    prototype: IDBCursorWithValue;\n    new(): IDBCursorWithValue;\n};\n\ninterface IDBDatabaseEventMap {\n    \"abort\": Event;\n    \"close\": Event;\n    \"error\": Event;\n    \"versionchange\": IDBVersionChangeEvent;\n}\n\n/** This IndexedDB API interface provides a connection to a database; you can use an IDBDatabase object to open a transaction on your database then create, manipulate, and delete objects (data) in that database. The interface provides the only way to get and manage versions of the database. */\ninterface IDBDatabase extends EventTarget {\n    /** Returns the name of the database. */\n    readonly name: string;\n    /** Returns a list of the names of object stores in the database. */\n    readonly objectStoreNames: DOMStringList;\n    onabort: ((this: IDBDatabase, ev: Event) => any) | null;\n    onclose: ((this: IDBDatabase, ev: Event) => any) | null;\n    onerror: ((this: IDBDatabase, ev: Event) => any) | null;\n    onversionchange: ((this: IDBDatabase, ev: IDBVersionChangeEvent) => any) | null;\n    /** Returns the version of the database. */\n    readonly version: number;\n    /** Closes the connection once all running transactions have finished. */\n    close(): void;\n    /**\n     * Creates a new object store with the given name and options and returns a new IDBObjectStore.\n     *\n     * Throws a \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    createObjectStore(name: string, options?: IDBObjectStoreParameters): IDBObjectStore;\n    /**\n     * Deletes the object store with the given name.\n     *\n     * Throws a \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    deleteObjectStore(name: string): void;\n    /** Returns a new transaction with the given mode (\"readonly\" or \"readwrite\") and scope which can be a single object store name or an array of names. */\n    transaction(storeNames: string | string[], mode?: IDBTransactionMode, options?: IDBTransactionOptions): IDBTransaction;\n    addEventListener<K extends keyof IDBDatabaseEventMap>(type: K, listener: (this: IDBDatabase, ev: IDBDatabaseEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof IDBDatabaseEventMap>(type: K, listener: (this: IDBDatabase, ev: IDBDatabaseEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var IDBDatabase: {\n    prototype: IDBDatabase;\n    new(): IDBDatabase;\n};\n\n/** In the following code snippet, we make a request to open a database, and include handlers for the success and error cases. For a full working example, see our To-do Notifications app (view example live.) */\ninterface IDBFactory {\n    /**\n     * Compares two values as keys. Returns -1 if key1 precedes key2, 1 if key2 precedes key1, and 0 if the keys are equal.\n     *\n     * Throws a \"DataError\" DOMException if either input is not a valid key.\n     */\n    cmp(first: any, second: any): number;\n    databases(): Promise<IDBDatabaseInfo[]>;\n    /** Attempts to delete the named database. If the database already exists and there are open connections that don't close in response to a versionchange event, the request will be blocked until all they close. If the request is successful request's result will be null. */\n    deleteDatabase(name: string): IDBOpenDBRequest;\n    /** Attempts to open a connection to the named database with the current version, or 1 if it does not already exist. If the request is successful request's result will be the connection. */\n    open(name: string, version?: number): IDBOpenDBRequest;\n}\n\ndeclare var IDBFactory: {\n    prototype: IDBFactory;\n    new(): IDBFactory;\n};\n\n/** IDBIndex interface of the IndexedDB API provides asynchronous access to an index in a database. An index is a kind of object store for looking up records in another object store, called the referenced object store. You use this interface to retrieve data. */\ninterface IDBIndex {\n    readonly keyPath: string | string[];\n    readonly multiEntry: boolean;\n    /** Returns the name of the index. */\n    name: string;\n    /** Returns the IDBObjectStore the index belongs to. */\n    readonly objectStore: IDBObjectStore;\n    readonly unique: boolean;\n    /**\n     * Retrieves the number of records matching the given key or key range in query.\n     *\n     * If successful, request's result will be the count.\n     */\n    count(query?: IDBValidKey | IDBKeyRange): IDBRequest<number>;\n    /**\n     * Retrieves the value of the first record matching the given key or key range in query.\n     *\n     * If successful, request's result will be the value, or undefined if there was no matching record.\n     */\n    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any>;\n    /**\n     * Retrieves the values of the records matching the given key or key range in query (up to count if given).\n     *\n     * If successful, request's result will be an Array of the values.\n     */\n    getAll(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest<any[]>;\n    /**\n     * Retrieves the keys of records matching the given key or key range in query (up to count if given).\n     *\n     * If successful, request's result will be an Array of the keys.\n     */\n    getAllKeys(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest<IDBValidKey[]>;\n    /**\n     * Retrieves the key of the first record matching the given key or key range in query.\n     *\n     * If successful, request's result will be the key, or undefined if there was no matching record.\n     */\n    getKey(query: IDBValidKey | IDBKeyRange): IDBRequest<IDBValidKey | undefined>;\n    /**\n     * Opens a cursor over the records matching query, ordered by direction. If query is null, all records in index are matched.\n     *\n     * If successful, request's result will be an IDBCursorWithValue, or null if there were no matching records.\n     */\n    openCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest<IDBCursorWithValue | null>;\n    /**\n     * Opens a cursor with key only flag set over the records matching query, ordered by direction. If query is null, all records in index are matched.\n     *\n     * If successful, request's result will be an IDBCursor, or null if there were no matching records.\n     */\n    openKeyCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest<IDBCursor | null>;\n}\n\ndeclare var IDBIndex: {\n    prototype: IDBIndex;\n    new(): IDBIndex;\n};\n\n/** A key range can be a single value or a range with upper and lower bounds or endpoints. If the key range has both upper and lower bounds, then it is bounded; if it has no bounds, it is unbounded. A bounded key range can either be open (the endpoints are excluded) or closed (the endpoints are included). To retrieve all keys within a certain range, you can use the following code constructs: */\ninterface IDBKeyRange {\n    /** Returns lower bound, or undefined if none. */\n    readonly lower: any;\n    /** Returns true if the lower open flag is set, and false otherwise. */\n    readonly lowerOpen: boolean;\n    /** Returns upper bound, or undefined if none. */\n    readonly upper: any;\n    /** Returns true if the upper open flag is set, and false otherwise. */\n    readonly upperOpen: boolean;\n    /** Returns true if key is included in the range, and false otherwise. */\n    includes(key: any): boolean;\n}\n\ndeclare var IDBKeyRange: {\n    prototype: IDBKeyRange;\n    new(): IDBKeyRange;\n    /** Returns a new IDBKeyRange spanning from lower to upper. If lowerOpen is true, lower is not included in the range. If upperOpen is true, upper is not included in the range. */\n    bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange;\n    /** Returns a new IDBKeyRange starting at key with no upper bound. If open is true, key is not included in the range. */\n    lowerBound(lower: any, open?: boolean): IDBKeyRange;\n    /** Returns a new IDBKeyRange spanning only key. */\n    only(value: any): IDBKeyRange;\n    /** Returns a new IDBKeyRange with no lower bound and ending at key. If open is true, key is not included in the range. */\n    upperBound(upper: any, open?: boolean): IDBKeyRange;\n};\n\n/** This example shows a variety of different uses of object stores, from updating the data structure with IDBObjectStore.createIndex\\xA0inside an onupgradeneeded function, to adding a new item to our object store with IDBObjectStore.add. For a full working example, see our\\xA0To-do Notifications\\xA0app (view example live.) */\ninterface IDBObjectStore {\n    /** Returns true if the store has a key generator, and false otherwise. */\n    readonly autoIncrement: boolean;\n    /** Returns a list of the names of indexes in the store. */\n    readonly indexNames: DOMStringList;\n    /** Returns the key path of the store, or null if none. */\n    readonly keyPath: string | string[];\n    /** Returns the name of the store. */\n    name: string;\n    /** Returns the associated transaction. */\n    readonly transaction: IDBTransaction;\n    /**\n     * Adds or updates a record in store with the given value and key.\n     *\n     * If the store uses in-line keys and key is specified a \"DataError\" DOMException will be thrown.\n     *\n     * If put() is used, any existing record with the key will be replaced. If add() is used, and if a record with the key already exists the request will fail, with request's error set to a \"ConstraintError\" DOMException.\n     *\n     * If successful, request's result will be the record's key.\n     */\n    add(value: any, key?: IDBValidKey): IDBRequest<IDBValidKey>;\n    /**\n     * Deletes all records in store.\n     *\n     * If successful, request's result will be undefined.\n     */\n    clear(): IDBRequest<undefined>;\n    /**\n     * Retrieves the number of records matching the given key or key range in query.\n     *\n     * If successful, request's result will be the count.\n     */\n    count(query?: IDBValidKey | IDBKeyRange): IDBRequest<number>;\n    /**\n     * Creates a new index in store with the given name, keyPath and options and returns a new IDBIndex. If the keyPath and options define constraints that cannot be satisfied with the data already in store the upgrade transaction will abort with a \"ConstraintError\" DOMException.\n     *\n     * Throws an \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    createIndex(name: string, keyPath: string | string[], options?: IDBIndexParameters): IDBIndex;\n    /**\n     * Deletes records in store with the given key or in the given key range in query.\n     *\n     * If successful, request's result will be undefined.\n     */\n    delete(query: IDBValidKey | IDBKeyRange): IDBRequest<undefined>;\n    /**\n     * Deletes the index in store with the given name.\n     *\n     * Throws an \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    deleteIndex(name: string): void;\n    /**\n     * Retrieves the value of the first record matching the given key or key range in query.\n     *\n     * If successful, request's result will be the value, or undefined if there was no matching record.\n     */\n    get(query: IDBValidKey | IDBKeyRange): IDBRequest<any>;\n    /**\n     * Retrieves the values of the records matching the given key or key range in query (up to count if given).\n     *\n     * If successful, request's result will be an Array of the values.\n     */\n    getAll(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest<any[]>;\n    /**\n     * Retrieves the keys of records matching the given key or key range in query (up to count if given).\n     *\n     * If successful, request's result will be an Array of the keys.\n     */\n    getAllKeys(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest<IDBValidKey[]>;\n    /**\n     * Retrieves the key of the first record matching the given key or key range in query.\n     *\n     * If successful, request's result will be the key, or undefined if there was no matching record.\n     */\n    getKey(query: IDBValidKey | IDBKeyRange): IDBRequest<IDBValidKey | undefined>;\n    index(name: string): IDBIndex;\n    /**\n     * Opens a cursor over the records matching query, ordered by direction. If query is null, all records in store are matched.\n     *\n     * If successful, request's result will be an IDBCursorWithValue pointing at the first matching record, or null if there were no matching records.\n     */\n    openCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest<IDBCursorWithValue | null>;\n    /**\n     * Opens a cursor with key only flag set over the records matching query, ordered by direction. If query is null, all records in store are matched.\n     *\n     * If successful, request's result will be an IDBCursor pointing at the first matching record, or null if there were no matching records.\n     */\n    openKeyCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest<IDBCursor | null>;\n    /**\n     * Adds or updates a record in store with the given value and key.\n     *\n     * If the store uses in-line keys and key is specified a \"DataError\" DOMException will be thrown.\n     *\n     * If put() is used, any existing record with the key will be replaced. If add() is used, and if a record with the key already exists the request will fail, with request's error set to a \"ConstraintError\" DOMException.\n     *\n     * If successful, request's result will be the record's key.\n     */\n    put(value: any, key?: IDBValidKey): IDBRequest<IDBValidKey>;\n}\n\ndeclare var IDBObjectStore: {\n    prototype: IDBObjectStore;\n    new(): IDBObjectStore;\n};\n\ninterface IDBOpenDBRequestEventMap extends IDBRequestEventMap {\n    \"blocked\": IDBVersionChangeEvent;\n    \"upgradeneeded\": IDBVersionChangeEvent;\n}\n\n/** Also inherits methods from its parents IDBRequest and EventTarget. */\ninterface IDBOpenDBRequest extends IDBRequest<IDBDatabase> {\n    onblocked: ((this: IDBOpenDBRequest, ev: IDBVersionChangeEvent) => any) | null;\n    onupgradeneeded: ((this: IDBOpenDBRequest, ev: IDBVersionChangeEvent) => any) | null;\n    addEventListener<K extends keyof IDBOpenDBRequestEventMap>(type: K, listener: (this: IDBOpenDBRequest, ev: IDBOpenDBRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof IDBOpenDBRequestEventMap>(type: K, listener: (this: IDBOpenDBRequest, ev: IDBOpenDBRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var IDBOpenDBRequest: {\n    prototype: IDBOpenDBRequest;\n    new(): IDBOpenDBRequest;\n};\n\ninterface IDBRequestEventMap {\n    \"error\": Event;\n    \"success\": Event;\n}\n\n/** The request object does not initially contain any information about the result of the operation, but once information becomes available, an event is fired on the request, and the information becomes available through the properties of the IDBRequest instance. */\ninterface IDBRequest<T = any> extends EventTarget {\n    /** When a request is completed, returns the error (a DOMException), or null if the request succeeded. Throws a \"InvalidStateError\" DOMException if the request is still pending. */\n    readonly error: DOMException | null;\n    onerror: ((this: IDBRequest<T>, ev: Event) => any) | null;\n    onsuccess: ((this: IDBRequest<T>, ev: Event) => any) | null;\n    /** Returns \"pending\" until a request is complete, then returns \"done\". */\n    readonly readyState: IDBRequestReadyState;\n    /** When a request is completed, returns the result, or undefined if the request failed. Throws a \"InvalidStateError\" DOMException if the request is still pending. */\n    readonly result: T;\n    /** Returns the IDBObjectStore, IDBIndex, or IDBCursor the request was made against, or null if is was an open request. */\n    readonly source: IDBObjectStore | IDBIndex | IDBCursor;\n    /** Returns the IDBTransaction the request was made within. If this as an open request, then it returns an upgrade transaction while it is running, or null otherwise. */\n    readonly transaction: IDBTransaction | null;\n    addEventListener<K extends keyof IDBRequestEventMap>(type: K, listener: (this: IDBRequest<T>, ev: IDBRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof IDBRequestEventMap>(type: K, listener: (this: IDBRequest<T>, ev: IDBRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var IDBRequest: {\n    prototype: IDBRequest;\n    new(): IDBRequest;\n};\n\ninterface IDBTransactionEventMap {\n    \"abort\": Event;\n    \"complete\": Event;\n    \"error\": Event;\n}\n\ninterface IDBTransaction extends EventTarget {\n    /** Returns the transaction's connection. */\n    readonly db: IDBDatabase;\n    readonly durability: IDBTransactionDurability;\n    /** If the transaction was aborted, returns the error (a DOMException) providing the reason. */\n    readonly error: DOMException | null;\n    /** Returns the mode the transaction was created with (\"readonly\" or \"readwrite\"), or \"versionchange\" for an upgrade transaction. */\n    readonly mode: IDBTransactionMode;\n    /** Returns a list of the names of object stores in the transaction's scope. For an upgrade transaction this is all object stores in the database. */\n    readonly objectStoreNames: DOMStringList;\n    onabort: ((this: IDBTransaction, ev: Event) => any) | null;\n    oncomplete: ((this: IDBTransaction, ev: Event) => any) | null;\n    onerror: ((this: IDBTransaction, ev: Event) => any) | null;\n    /** Aborts the transaction. All pending requests will fail with a \"AbortError\" DOMException and all changes made to the database will be reverted. */\n    abort(): void;\n    commit(): void;\n    /** Returns an IDBObjectStore in the transaction's scope. */\n    objectStore(name: string): IDBObjectStore;\n    addEventListener<K extends keyof IDBTransactionEventMap>(type: K, listener: (this: IDBTransaction, ev: IDBTransactionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof IDBTransactionEventMap>(type: K, listener: (this: IDBTransaction, ev: IDBTransactionEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var IDBTransaction: {\n    prototype: IDBTransaction;\n    new(): IDBTransaction;\n};\n\n/** This IndexedDB API interface indicates that the version of the database has changed, as the result of an IDBOpenDBRequest.onupgradeneeded event handler function. */\ninterface IDBVersionChangeEvent extends Event {\n    readonly newVersion: number | null;\n    readonly oldVersion: number;\n}\n\ndeclare var IDBVersionChangeEvent: {\n    prototype: IDBVersionChangeEvent;\n    new(type: string, eventInitDict?: IDBVersionChangeEventInit): IDBVersionChangeEvent;\n};\n\ninterface ImageBitmap {\n    /** Returns the intrinsic height of the image, in CSS pixels. */\n    readonly height: number;\n    /** Returns the intrinsic width of the image, in CSS pixels. */\n    readonly width: number;\n    /** Releases imageBitmap's underlying bitmap data. */\n    close(): void;\n}\n\ndeclare var ImageBitmap: {\n    prototype: ImageBitmap;\n    new(): ImageBitmap;\n};\n\ninterface ImageBitmapRenderingContext {\n    /** Transfers the underlying bitmap data from imageBitmap to context, and the bitmap becomes the contents of the canvas element to which context is bound. */\n    transferFromImageBitmap(bitmap: ImageBitmap | null): void;\n}\n\ndeclare var ImageBitmapRenderingContext: {\n    prototype: ImageBitmapRenderingContext;\n    new(): ImageBitmapRenderingContext;\n};\n\n/** The underlying pixel data of an area of a <canvas> element. It is created using the ImageData() constructor or creator methods on the CanvasRenderingContext2D object associated with a canvas: createImageData() and getImageData(). It can also be used to set a part of the canvas by using putImageData(). */\ninterface ImageData {\n    readonly colorSpace: PredefinedColorSpace;\n    /** Returns the one-dimensional array containing the data in RGBA order, as integers in the range 0 to 255. */\n    readonly data: Uint8ClampedArray;\n    /** Returns the actual dimensions of the data in the ImageData object, in pixels. */\n    readonly height: number;\n    /** Returns the actual dimensions of the data in the ImageData object, in pixels. */\n    readonly width: number;\n}\n\ndeclare var ImageData: {\n    prototype: ImageData;\n    new(sw: number, sh: number, settings?: ImageDataSettings): ImageData;\n    new(data: Uint8ClampedArray, sw: number, sh?: number, settings?: ImageDataSettings): ImageData;\n};\n\ninterface KHR_parallel_shader_compile {\n    readonly COMPLETION_STATUS_KHR: 0x91B1;\n}\n\n/** Available only in secure contexts. */\ninterface Lock {\n    readonly mode: LockMode;\n    readonly name: string;\n}\n\ndeclare var Lock: {\n    prototype: Lock;\n    new(): Lock;\n};\n\n/** Available only in secure contexts. */\ninterface LockManager {\n    query(): Promise<LockManagerSnapshot>;\n    request(name: string, callback: LockGrantedCallback): Promise<any>;\n    request(name: string, options: LockOptions, callback: LockGrantedCallback): Promise<any>;\n}\n\ndeclare var LockManager: {\n    prototype: LockManager;\n    new(): LockManager;\n};\n\ninterface MediaCapabilities {\n    decodingInfo(configuration: MediaDecodingConfiguration): Promise<MediaCapabilitiesDecodingInfo>;\n    encodingInfo(configuration: MediaEncodingConfiguration): Promise<MediaCapabilitiesEncodingInfo>;\n}\n\ndeclare var MediaCapabilities: {\n    prototype: MediaCapabilities;\n    new(): MediaCapabilities;\n};\n\n/** This Channel Messaging API interface allows us to create a new message channel and send data through it via its two MessagePort properties. */\ninterface MessageChannel {\n    /** Returns the first MessagePort object. */\n    readonly port1: MessagePort;\n    /** Returns the second MessagePort object. */\n    readonly port2: MessagePort;\n}\n\ndeclare var MessageChannel: {\n    prototype: MessageChannel;\n    new(): MessageChannel;\n};\n\n/** A message received by a target object. */\ninterface MessageEvent<T = any> extends Event {\n    /** Returns the data of the message. */\n    readonly data: T;\n    /** Returns the last event ID string, for server-sent events. */\n    readonly lastEventId: string;\n    /** Returns the origin of the message, for server-sent events and cross-document messaging. */\n    readonly origin: string;\n    /** Returns the MessagePort array sent with the message, for cross-document messaging and channel messaging. */\n    readonly ports: ReadonlyArray<MessagePort>;\n    /** Returns the WindowProxy of the source window, for cross-document messaging, and the MessagePort being attached, in the connect event fired at SharedWorkerGlobalScope objects. */\n    readonly source: MessageEventSource | null;\n    /** @deprecated */\n    initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: MessagePort[]): void;\n}\n\ndeclare var MessageEvent: {\n    prototype: MessageEvent;\n    new<T>(type: string, eventInitDict?: MessageEventInit<T>): MessageEvent<T>;\n};\n\ninterface MessagePortEventMap {\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n}\n\n/** This Channel Messaging API interface represents one of the two ports of a MessageChannel, allowing messages to be sent from one port and listening out for them arriving at the other. */\ninterface MessagePort extends EventTarget {\n    onmessage: ((this: MessagePort, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: MessagePort, ev: MessageEvent) => any) | null;\n    /** Disconnects the port, so that it is no longer active. */\n    close(): void;\n    /**\n     * Posts a message through the channel. Objects listed in transfer are transferred, not just cloned, meaning that they are no longer usable on the sending side.\n     *\n     * Throws a \"DataCloneError\" DOMException if transfer contains duplicate objects or port, or if message could not be cloned.\n     */\n    postMessage(message: any, transfer: Transferable[]): void;\n    postMessage(message: any, options?: StructuredSerializeOptions): void;\n    /** Begins dispatching messages received on the port. */\n    start(): void;\n    addEventListener<K extends keyof MessagePortEventMap>(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof MessagePortEventMap>(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var MessagePort: {\n    prototype: MessagePort;\n    new(): MessagePort;\n};\n\n/** Available only in secure contexts. */\ninterface NavigationPreloadManager {\n    disable(): Promise<void>;\n    enable(): Promise<void>;\n    getState(): Promise<NavigationPreloadState>;\n    setHeaderValue(value: string): Promise<void>;\n}\n\ndeclare var NavigationPreloadManager: {\n    prototype: NavigationPreloadManager;\n    new(): NavigationPreloadManager;\n};\n\ninterface NavigatorConcurrentHardware {\n    readonly hardwareConcurrency: number;\n}\n\ninterface NavigatorID {\n    /** @deprecated */\n    readonly appCodeName: string;\n    /** @deprecated */\n    readonly appName: string;\n    /** @deprecated */\n    readonly appVersion: string;\n    /** @deprecated */\n    readonly platform: string;\n    /** @deprecated */\n    readonly product: string;\n    readonly userAgent: string;\n}\n\ninterface NavigatorLanguage {\n    readonly language: string;\n    readonly languages: ReadonlyArray<string>;\n}\n\n/** Available only in secure contexts. */\ninterface NavigatorLocks {\n    readonly locks: LockManager;\n}\n\ninterface NavigatorOnLine {\n    readonly onLine: boolean;\n}\n\n/** Available only in secure contexts. */\ninterface NavigatorStorage {\n    readonly storage: StorageManager;\n}\n\ninterface NotificationEventMap {\n    \"click\": Event;\n    \"close\": Event;\n    \"error\": Event;\n    \"show\": Event;\n}\n\n/** This Notifications API interface is used to configure and display desktop notifications to the user. */\ninterface Notification extends EventTarget {\n    readonly body: string;\n    readonly data: any;\n    readonly dir: NotificationDirection;\n    readonly icon: string;\n    readonly lang: string;\n    onclick: ((this: Notification, ev: Event) => any) | null;\n    onclose: ((this: Notification, ev: Event) => any) | null;\n    onerror: ((this: Notification, ev: Event) => any) | null;\n    onshow: ((this: Notification, ev: Event) => any) | null;\n    readonly tag: string;\n    readonly title: string;\n    close(): void;\n    addEventListener<K extends keyof NotificationEventMap>(type: K, listener: (this: Notification, ev: NotificationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof NotificationEventMap>(type: K, listener: (this: Notification, ev: NotificationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Notification: {\n    prototype: Notification;\n    new(title: string, options?: NotificationOptions): Notification;\n    readonly permission: NotificationPermission;\n};\n\n/** The parameter passed into the onnotificationclick handler, the NotificationEvent interface represents a notification click event that is dispatched on the ServiceWorkerGlobalScope of a ServiceWorker. */\ninterface NotificationEvent extends ExtendableEvent {\n    readonly action: string;\n    readonly notification: Notification;\n}\n\ndeclare var NotificationEvent: {\n    prototype: NotificationEvent;\n    new(type: string, eventInitDict: NotificationEventInit): NotificationEvent;\n};\n\ninterface OES_draw_buffers_indexed {\n    blendEquationSeparateiOES(buf: GLuint, modeRGB: GLenum, modeAlpha: GLenum): void;\n    blendEquationiOES(buf: GLuint, mode: GLenum): void;\n    blendFuncSeparateiOES(buf: GLuint, srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void;\n    blendFunciOES(buf: GLuint, src: GLenum, dst: GLenum): void;\n    colorMaskiOES(buf: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean): void;\n    disableiOES(target: GLenum, index: GLuint): void;\n    enableiOES(target: GLenum, index: GLuint): void;\n}\n\n/** The OES_element_index_uint extension is part of the WebGL API and adds support for gl.UNSIGNED_INT types to WebGLRenderingContext.drawElements(). */\ninterface OES_element_index_uint {\n}\n\ninterface OES_fbo_render_mipmap {\n}\n\n/** The OES_standard_derivatives extension is part of the WebGL API and adds the GLSL derivative functions dFdx, dFdy, and fwidth. */\ninterface OES_standard_derivatives {\n    readonly FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 0x8B8B;\n}\n\n/** The OES_texture_float extension is part of the WebGL API and exposes floating-point pixel types for textures. */\ninterface OES_texture_float {\n}\n\n/** The OES_texture_float_linear extension is part of the WebGL API and allows linear filtering with floating-point pixel types for textures. */\ninterface OES_texture_float_linear {\n}\n\n/** The OES_texture_half_float extension is part of the WebGL API and adds texture formats with 16- (aka half float) and 32-bit floating-point components. */\ninterface OES_texture_half_float {\n    readonly HALF_FLOAT_OES: 0x8D61;\n}\n\n/** The OES_texture_half_float_linear extension is part of the WebGL API and allows linear filtering with half floating-point pixel types for textures. */\ninterface OES_texture_half_float_linear {\n}\n\ninterface OES_vertex_array_object {\n    bindVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES | null): void;\n    createVertexArrayOES(): WebGLVertexArrayObjectOES | null;\n    deleteVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES | null): void;\n    isVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES | null): GLboolean;\n    readonly VERTEX_ARRAY_BINDING_OES: 0x85B5;\n}\n\ninterface OVR_multiview2 {\n    framebufferTextureMultiviewOVR(target: GLenum, attachment: GLenum, texture: WebGLTexture | null, level: GLint, baseViewIndex: GLint, numViews: GLsizei): void;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR: 0x9630;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR: 0x9632;\n    readonly MAX_VIEWS_OVR: 0x9631;\n    readonly FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: 0x9633;\n}\n\ninterface OffscreenCanvasEventMap {\n    \"contextlost\": Event;\n    \"contextrestored\": Event;\n}\n\ninterface OffscreenCanvas extends EventTarget {\n    /**\n     * These attributes return the dimensions of the OffscreenCanvas object's bitmap.\n     *\n     * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it).\n     */\n    height: number;\n    oncontextlost: ((this: OffscreenCanvas, ev: Event) => any) | null;\n    oncontextrestored: ((this: OffscreenCanvas, ev: Event) => any) | null;\n    /**\n     * These attributes return the dimensions of the OffscreenCanvas object's bitmap.\n     *\n     * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it).\n     */\n    width: number;\n    /**\n     * Returns a promise that will fulfill with a new Blob object representing a file containing the image in the OffscreenCanvas object.\n     *\n     * The argument, if provided, is a dictionary that controls the encoding options of the image file to be created. The type field specifies the file format and has a default value of \"image/png\"; that type is also used if the requested type isn't supported. If the image format supports variable quality (such as \"image/jpeg\"), then the quality field is a number in the range 0.0 to 1.0 inclusive indicating the desired quality level for the resulting image.\n     */\n    convertToBlob(options?: ImageEncodeOptions): Promise<Blob>;\n    /**\n     * Returns an object that exposes an API for drawing on the OffscreenCanvas object. contextId specifies the desired API: \"2d\", \"bitmaprenderer\", \"webgl\", or \"webgl2\". options is handled by that API.\n     *\n     * This specification defines the \"2d\" context below, which is similar but distinct from the \"2d\" context that is created from a canvas element. The WebGL specifications define the \"webgl\" and \"webgl2\" contexts. [WEBGL]\n     *\n     * Returns null if the canvas has already been initialized with another context type (e.g., trying to get a \"2d\" context after getting a \"webgl\" context).\n     */\n    getContext(contextId: \"2d\", options?: any): OffscreenCanvasRenderingContext2D | null;\n    getContext(contextId: \"bitmaprenderer\", options?: any): ImageBitmapRenderingContext | null;\n    getContext(contextId: \"webgl\", options?: any): WebGLRenderingContext | null;\n    getContext(contextId: \"webgl2\", options?: any): WebGL2RenderingContext | null;\n    getContext(contextId: OffscreenRenderingContextId, options?: any): OffscreenRenderingContext | null;\n    /** Returns a newly created ImageBitmap object with the image in the OffscreenCanvas object. The image in the OffscreenCanvas object is replaced with a new blank image. */\n    transferToImageBitmap(): ImageBitmap;\n    addEventListener<K extends keyof OffscreenCanvasEventMap>(type: K, listener: (this: OffscreenCanvas, ev: OffscreenCanvasEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof OffscreenCanvasEventMap>(type: K, listener: (this: OffscreenCanvas, ev: OffscreenCanvasEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var OffscreenCanvas: {\n    prototype: OffscreenCanvas;\n    new(width: number, height: number): OffscreenCanvas;\n};\n\ninterface OffscreenCanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform {\n    readonly canvas: OffscreenCanvas;\n    commit(): void;\n}\n\ndeclare var OffscreenCanvasRenderingContext2D: {\n    prototype: OffscreenCanvasRenderingContext2D;\n    new(): OffscreenCanvasRenderingContext2D;\n};\n\n/** This Canvas 2D API interface is used to declare a path that can then be used on a CanvasRenderingContext2D object. The path methods of the CanvasRenderingContext2D interface are also present on this interface, which gives you the convenience of being able to retain and replay your path whenever desired. */\ninterface Path2D extends CanvasPath {\n    /** Adds to the path the path given by the argument. */\n    addPath(path: Path2D, transform?: DOMMatrix2DInit): void;\n}\n\ndeclare var Path2D: {\n    prototype: Path2D;\n    new(path?: Path2D | string): Path2D;\n};\n\ninterface PerformanceEventMap {\n    \"resourcetimingbufferfull\": Event;\n}\n\n/** Provides access to performance-related information for the current page. It's part of the High Resolution Time API, but is enhanced by the Performance Timeline API, the Navigation Timing API, the User Timing API, and the Resource Timing API. */\ninterface Performance extends EventTarget {\n    onresourcetimingbufferfull: ((this: Performance, ev: Event) => any) | null;\n    readonly timeOrigin: DOMHighResTimeStamp;\n    clearMarks(markName?: string): void;\n    clearMeasures(measureName?: string): void;\n    clearResourceTimings(): void;\n    getEntries(): PerformanceEntryList;\n    getEntriesByName(name: string, type?: string): PerformanceEntryList;\n    getEntriesByType(type: string): PerformanceEntryList;\n    mark(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark;\n    measure(measureName: string, startOrMeasureOptions?: string | PerformanceMeasureOptions, endMark?: string): PerformanceMeasure;\n    now(): DOMHighResTimeStamp;\n    setResourceTimingBufferSize(maxSize: number): void;\n    toJSON(): any;\n    addEventListener<K extends keyof PerformanceEventMap>(type: K, listener: (this: Performance, ev: PerformanceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof PerformanceEventMap>(type: K, listener: (this: Performance, ev: PerformanceEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Performance: {\n    prototype: Performance;\n    new(): Performance;\n};\n\n/** Encapsulates a single performance metric that is part of the performance timeline. A performance entry can be directly created by making a performance mark or measure (for example by calling the mark() method) at an explicit point in an application. Performance entries are also created in indirect ways such as loading a resource (such as an image). */\ninterface PerformanceEntry {\n    readonly duration: DOMHighResTimeStamp;\n    readonly entryType: string;\n    readonly name: string;\n    readonly startTime: DOMHighResTimeStamp;\n    toJSON(): any;\n}\n\ndeclare var PerformanceEntry: {\n    prototype: PerformanceEntry;\n    new(): PerformanceEntry;\n};\n\n/** PerformanceMark\\xA0is an abstract interface for PerformanceEntry objects with an entryType of \"mark\". Entries of this type are created by calling performance.mark() to add a named DOMHighResTimeStamp (the mark) to the browser's performance timeline. */\ninterface PerformanceMark extends PerformanceEntry {\n    readonly detail: any;\n}\n\ndeclare var PerformanceMark: {\n    prototype: PerformanceMark;\n    new(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark;\n};\n\n/** PerformanceMeasure is an abstract interface for PerformanceEntry objects with an entryType of \"measure\". Entries of this type are created by calling performance.measure() to add a named DOMHighResTimeStamp (the measure) between two marks to the browser's performance timeline. */\ninterface PerformanceMeasure extends PerformanceEntry {\n    readonly detail: any;\n}\n\ndeclare var PerformanceMeasure: {\n    prototype: PerformanceMeasure;\n    new(): PerformanceMeasure;\n};\n\ninterface PerformanceObserver {\n    disconnect(): void;\n    observe(options?: PerformanceObserverInit): void;\n    takeRecords(): PerformanceEntryList;\n}\n\ndeclare var PerformanceObserver: {\n    prototype: PerformanceObserver;\n    new(callback: PerformanceObserverCallback): PerformanceObserver;\n    readonly supportedEntryTypes: ReadonlyArray<string>;\n};\n\ninterface PerformanceObserverEntryList {\n    getEntries(): PerformanceEntryList;\n    getEntriesByName(name: string, type?: string): PerformanceEntryList;\n    getEntriesByType(type: string): PerformanceEntryList;\n}\n\ndeclare var PerformanceObserverEntryList: {\n    prototype: PerformanceObserverEntryList;\n    new(): PerformanceObserverEntryList;\n};\n\n/** Enables retrieval and analysis of detailed network timing data regarding the loading of an application's resources. An application can use the timing metrics to determine, for example, the length of time it takes to fetch a specific resource, such as an XMLHttpRequest, <SVG>, image, or script. */\ninterface PerformanceResourceTiming extends PerformanceEntry {\n    readonly connectEnd: DOMHighResTimeStamp;\n    readonly connectStart: DOMHighResTimeStamp;\n    readonly decodedBodySize: number;\n    readonly domainLookupEnd: DOMHighResTimeStamp;\n    readonly domainLookupStart: DOMHighResTimeStamp;\n    readonly encodedBodySize: number;\n    readonly fetchStart: DOMHighResTimeStamp;\n    readonly initiatorType: string;\n    readonly nextHopProtocol: string;\n    readonly redirectEnd: DOMHighResTimeStamp;\n    readonly redirectStart: DOMHighResTimeStamp;\n    readonly requestStart: DOMHighResTimeStamp;\n    readonly responseEnd: DOMHighResTimeStamp;\n    readonly responseStart: DOMHighResTimeStamp;\n    readonly secureConnectionStart: DOMHighResTimeStamp;\n    readonly serverTiming: ReadonlyArray<PerformanceServerTiming>;\n    readonly transferSize: number;\n    readonly workerStart: DOMHighResTimeStamp;\n    toJSON(): any;\n}\n\ndeclare var PerformanceResourceTiming: {\n    prototype: PerformanceResourceTiming;\n    new(): PerformanceResourceTiming;\n};\n\ninterface PerformanceServerTiming {\n    readonly description: string;\n    readonly duration: DOMHighResTimeStamp;\n    readonly name: string;\n    toJSON(): any;\n}\n\ndeclare var PerformanceServerTiming: {\n    prototype: PerformanceServerTiming;\n    new(): PerformanceServerTiming;\n};\n\ninterface PermissionStatusEventMap {\n    \"change\": Event;\n}\n\ninterface PermissionStatus extends EventTarget {\n    readonly name: string;\n    onchange: ((this: PermissionStatus, ev: Event) => any) | null;\n    readonly state: PermissionState;\n    addEventListener<K extends keyof PermissionStatusEventMap>(type: K, listener: (this: PermissionStatus, ev: PermissionStatusEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof PermissionStatusEventMap>(type: K, listener: (this: PermissionStatus, ev: PermissionStatusEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var PermissionStatus: {\n    prototype: PermissionStatus;\n    new(): PermissionStatus;\n};\n\ninterface Permissions {\n    query(permissionDesc: PermissionDescriptor): Promise<PermissionStatus>;\n}\n\ndeclare var Permissions: {\n    prototype: Permissions;\n    new(): Permissions;\n};\n\n/** Events measuring progress of an underlying process, like an HTTP request (for an XMLHttpRequest, or the loading of the underlying resource of an <img>, <audio>, <video>, <style> or <link>). */\ninterface ProgressEvent<T extends EventTarget = EventTarget> extends Event {\n    readonly lengthComputable: boolean;\n    readonly loaded: number;\n    readonly target: T | null;\n    readonly total: number;\n}\n\ndeclare var ProgressEvent: {\n    prototype: ProgressEvent;\n    new(type: string, eventInitDict?: ProgressEventInit): ProgressEvent;\n};\n\ninterface PromiseRejectionEvent extends Event {\n    readonly promise: Promise<any>;\n    readonly reason: any;\n}\n\ndeclare var PromiseRejectionEvent: {\n    prototype: PromiseRejectionEvent;\n    new(type: string, eventInitDict: PromiseRejectionEventInit): PromiseRejectionEvent;\n};\n\n/**\n * This Push API interface represents a push message that has been received. This event is sent to the global scope of a ServiceWorker. It contains the information sent from an application server to a PushSubscription.\n * Available only in secure contexts.\n */\ninterface PushEvent extends ExtendableEvent {\n    readonly data: PushMessageData | null;\n}\n\ndeclare var PushEvent: {\n    prototype: PushEvent;\n    new(type: string, eventInitDict?: PushEventInit): PushEvent;\n};\n\n/**\n * This Push API interface provides a way to receive notifications from third-party servers as well as request URLs for push notifications.\n * Available only in secure contexts.\n */\ninterface PushManager {\n    getSubscription(): Promise<PushSubscription | null>;\n    permissionState(options?: PushSubscriptionOptionsInit): Promise<PermissionState>;\n    subscribe(options?: PushSubscriptionOptionsInit): Promise<PushSubscription>;\n}\n\ndeclare var PushManager: {\n    prototype: PushManager;\n    new(): PushManager;\n    readonly supportedContentEncodings: ReadonlyArray<string>;\n};\n\n/**\n * This Push API interface provides methods which let you retrieve the push data sent by a server in various formats.\n * Available only in secure contexts.\n */\ninterface PushMessageData {\n    arrayBuffer(): ArrayBuffer;\n    blob(): Blob;\n    json(): any;\n    text(): string;\n}\n\ndeclare var PushMessageData: {\n    prototype: PushMessageData;\n    new(): PushMessageData;\n};\n\n/**\n * This Push API interface provides a subcription's URL endpoint and allows unsubscription from a push service.\n * Available only in secure contexts.\n */\ninterface PushSubscription {\n    readonly endpoint: string;\n    readonly expirationTime: EpochTimeStamp | null;\n    readonly options: PushSubscriptionOptions;\n    getKey(name: PushEncryptionKeyName): ArrayBuffer | null;\n    toJSON(): PushSubscriptionJSON;\n    unsubscribe(): Promise<boolean>;\n}\n\ndeclare var PushSubscription: {\n    prototype: PushSubscription;\n    new(): PushSubscription;\n};\n\n/** Available only in secure contexts. */\ninterface PushSubscriptionOptions {\n    readonly applicationServerKey: ArrayBuffer | null;\n    readonly userVisibleOnly: boolean;\n}\n\ndeclare var PushSubscriptionOptions: {\n    prototype: PushSubscriptionOptions;\n    new(): PushSubscriptionOptions;\n};\n\ninterface RTCEncodedAudioFrame {\n    data: ArrayBuffer;\n    readonly timestamp: number;\n    getMetadata(): RTCEncodedAudioFrameMetadata;\n}\n\ndeclare var RTCEncodedAudioFrame: {\n    prototype: RTCEncodedAudioFrame;\n    new(): RTCEncodedAudioFrame;\n};\n\ninterface RTCEncodedVideoFrame {\n    data: ArrayBuffer;\n    readonly timestamp: number;\n    readonly type: RTCEncodedVideoFrameType;\n    getMetadata(): RTCEncodedVideoFrameMetadata;\n}\n\ndeclare var RTCEncodedVideoFrame: {\n    prototype: RTCEncodedVideoFrame;\n    new(): RTCEncodedVideoFrame;\n};\n\ninterface ReadableByteStreamController {\n    readonly byobRequest: ReadableStreamBYOBRequest | null;\n    readonly desiredSize: number | null;\n    close(): void;\n    enqueue(chunk: ArrayBufferView): void;\n    error(e?: any): void;\n}\n\ndeclare var ReadableByteStreamController: {\n    prototype: ReadableByteStreamController;\n    new(): ReadableByteStreamController;\n};\n\n/** This Streams API interface represents a readable stream of byte data. The Fetch API offers a concrete instance of a ReadableStream through the body property of a Response object. */\ninterface ReadableStream<R = any> {\n    readonly locked: boolean;\n    cancel(reason?: any): Promise<void>;\n    getReader(options: { mode: \"byob\" }): ReadableStreamBYOBReader;\n    getReader(): ReadableStreamDefaultReader<R>;\n    getReader(options?: ReadableStreamGetReaderOptions): ReadableStreamReader<R>;\n    pipeThrough<T>(transform: ReadableWritablePair<T, R>, options?: StreamPipeOptions): ReadableStream<T>;\n    pipeTo(destination: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;\n    tee(): [ReadableStream<R>, ReadableStream<R>];\n}\n\ndeclare var ReadableStream: {\n    prototype: ReadableStream;\n    new(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number }): ReadableStream<Uint8Array>;\n    new<R = any>(underlyingSource: UnderlyingDefaultSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;\n    new<R = any>(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>): ReadableStream<R>;\n};\n\ninterface ReadableStreamBYOBReader extends ReadableStreamGenericReader {\n    read<T extends ArrayBufferView>(view: T): Promise<ReadableStreamReadResult<T>>;\n    releaseLock(): void;\n}\n\ndeclare var ReadableStreamBYOBReader: {\n    prototype: ReadableStreamBYOBReader;\n    new(stream: ReadableStream): ReadableStreamBYOBReader;\n};\n\ninterface ReadableStreamBYOBRequest {\n    readonly view: ArrayBufferView | null;\n    respond(bytesWritten: number): void;\n    respondWithNewView(view: ArrayBufferView): void;\n}\n\ndeclare var ReadableStreamBYOBRequest: {\n    prototype: ReadableStreamBYOBRequest;\n    new(): ReadableStreamBYOBRequest;\n};\n\ninterface ReadableStreamDefaultController<R = any> {\n    readonly desiredSize: number | null;\n    close(): void;\n    enqueue(chunk?: R): void;\n    error(e?: any): void;\n}\n\ndeclare var ReadableStreamDefaultController: {\n    prototype: ReadableStreamDefaultController;\n    new(): ReadableStreamDefaultController;\n};\n\ninterface ReadableStreamDefaultReader<R = any> extends ReadableStreamGenericReader {\n    read(): Promise<ReadableStreamReadResult<R>>;\n    releaseLock(): void;\n}\n\ndeclare var ReadableStreamDefaultReader: {\n    prototype: ReadableStreamDefaultReader;\n    new<R = any>(stream: ReadableStream<R>): ReadableStreamDefaultReader<R>;\n};\n\ninterface ReadableStreamGenericReader {\n    readonly closed: Promise<undefined>;\n    cancel(reason?: any): Promise<void>;\n}\n\n/** This Fetch API interface represents a resource request. */\ninterface Request extends Body {\n    /** Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */\n    readonly cache: RequestCache;\n    /** Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */\n    readonly credentials: RequestCredentials;\n    /** Returns the kind of resource requested by request, e.g., \"document\" or \"script\". */\n    readonly destination: RequestDestination;\n    /** Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the \"Host\" header. */\n    readonly headers: Headers;\n    /** Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */\n    readonly integrity: string;\n    /** Returns a boolean indicating whether or not request can outlive the global in which it was created. */\n    readonly keepalive: boolean;\n    /** Returns request's HTTP method, which is \"GET\" by default. */\n    readonly method: string;\n    /** Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */\n    readonly mode: RequestMode;\n    /** Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */\n    readonly redirect: RequestRedirect;\n    /** Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and \"about:client\" when defaulting to the global's default. This is used during fetching to determine the value of the \\`Referer\\` header of the request being made. */\n    readonly referrer: string;\n    /** Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */\n    readonly referrerPolicy: ReferrerPolicy;\n    /** Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */\n    readonly signal: AbortSignal;\n    /** Returns the URL of request as a string. */\n    readonly url: string;\n    clone(): Request;\n}\n\ndeclare var Request: {\n    prototype: Request;\n    new(input: RequestInfo | URL, init?: RequestInit): Request;\n};\n\n/** This Fetch API interface represents the response to a request. */\ninterface Response extends Body {\n    readonly headers: Headers;\n    readonly ok: boolean;\n    readonly redirected: boolean;\n    readonly status: number;\n    readonly statusText: string;\n    readonly type: ResponseType;\n    readonly url: string;\n    clone(): Response;\n}\n\ndeclare var Response: {\n    prototype: Response;\n    new(body?: BodyInit | null, init?: ResponseInit): Response;\n    error(): Response;\n    redirect(url: string | URL, status?: number): Response;\n};\n\n/** Inherits from Event, and represents the event object of an event sent on a document or worker when its content security policy is violated. */\ninterface SecurityPolicyViolationEvent extends Event {\n    readonly blockedURI: string;\n    readonly columnNumber: number;\n    readonly disposition: SecurityPolicyViolationEventDisposition;\n    readonly documentURI: string;\n    readonly effectiveDirective: string;\n    readonly lineNumber: number;\n    readonly originalPolicy: string;\n    readonly referrer: string;\n    readonly sample: string;\n    readonly sourceFile: string;\n    readonly statusCode: number;\n    readonly violatedDirective: string;\n}\n\ndeclare var SecurityPolicyViolationEvent: {\n    prototype: SecurityPolicyViolationEvent;\n    new(type: string, eventInitDict?: SecurityPolicyViolationEventInit): SecurityPolicyViolationEvent;\n};\n\ninterface ServiceWorkerEventMap extends AbstractWorkerEventMap {\n    \"statechange\": Event;\n}\n\n/**\n * This ServiceWorker API interface provides a reference to a service worker. Multiple browsing contexts (e.g. pages, workers, etc.) can be associated with the same service worker, each through a unique ServiceWorker object.\n * Available only in secure contexts.\n */\ninterface ServiceWorker extends EventTarget, AbstractWorker {\n    onstatechange: ((this: ServiceWorker, ev: Event) => any) | null;\n    readonly scriptURL: string;\n    readonly state: ServiceWorkerState;\n    postMessage(message: any, transfer: Transferable[]): void;\n    postMessage(message: any, options?: StructuredSerializeOptions): void;\n    addEventListener<K extends keyof ServiceWorkerEventMap>(type: K, listener: (this: ServiceWorker, ev: ServiceWorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ServiceWorkerEventMap>(type: K, listener: (this: ServiceWorker, ev: ServiceWorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ServiceWorker: {\n    prototype: ServiceWorker;\n    new(): ServiceWorker;\n};\n\ninterface ServiceWorkerContainerEventMap {\n    \"controllerchange\": Event;\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n}\n\n/**\n * The\\xA0ServiceWorkerContainer\\xA0interface of the\\xA0ServiceWorker API\\xA0provides an object representing the service worker as an overall unit in the network ecosystem, including facilities to register, unregister and update service workers, and access the state of service workers and their registrations.\n * Available only in secure contexts.\n */\ninterface ServiceWorkerContainer extends EventTarget {\n    readonly controller: ServiceWorker | null;\n    oncontrollerchange: ((this: ServiceWorkerContainer, ev: Event) => any) | null;\n    onmessage: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null;\n    readonly ready: Promise<ServiceWorkerRegistration>;\n    getRegistration(clientURL?: string | URL): Promise<ServiceWorkerRegistration | undefined>;\n    getRegistrations(): Promise<ReadonlyArray<ServiceWorkerRegistration>>;\n    register(scriptURL: string | URL, options?: RegistrationOptions): Promise<ServiceWorkerRegistration>;\n    startMessages(): void;\n    addEventListener<K extends keyof ServiceWorkerContainerEventMap>(type: K, listener: (this: ServiceWorkerContainer, ev: ServiceWorkerContainerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ServiceWorkerContainerEventMap>(type: K, listener: (this: ServiceWorkerContainer, ev: ServiceWorkerContainerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ServiceWorkerContainer: {\n    prototype: ServiceWorkerContainer;\n    new(): ServiceWorkerContainer;\n};\n\ninterface ServiceWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap {\n    \"activate\": ExtendableEvent;\n    \"fetch\": FetchEvent;\n    \"install\": ExtendableEvent;\n    \"message\": ExtendableMessageEvent;\n    \"messageerror\": MessageEvent;\n    \"notificationclick\": NotificationEvent;\n    \"notificationclose\": NotificationEvent;\n    \"push\": PushEvent;\n    \"pushsubscriptionchange\": Event;\n}\n\n/** This ServiceWorker API interface represents the global execution context of a service worker. */\ninterface ServiceWorkerGlobalScope extends WorkerGlobalScope {\n    readonly clients: Clients;\n    onactivate: ((this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any) | null;\n    onfetch: ((this: ServiceWorkerGlobalScope, ev: FetchEvent) => any) | null;\n    oninstall: ((this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any) | null;\n    onmessage: ((this: ServiceWorkerGlobalScope, ev: ExtendableMessageEvent) => any) | null;\n    onmessageerror: ((this: ServiceWorkerGlobalScope, ev: MessageEvent) => any) | null;\n    onnotificationclick: ((this: ServiceWorkerGlobalScope, ev: NotificationEvent) => any) | null;\n    onnotificationclose: ((this: ServiceWorkerGlobalScope, ev: NotificationEvent) => any) | null;\n    onpush: ((this: ServiceWorkerGlobalScope, ev: PushEvent) => any) | null;\n    onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: Event) => any) | null;\n    readonly registration: ServiceWorkerRegistration;\n    readonly serviceWorker: ServiceWorker;\n    skipWaiting(): Promise<void>;\n    addEventListener<K extends keyof ServiceWorkerGlobalScopeEventMap>(type: K, listener: (this: ServiceWorkerGlobalScope, ev: ServiceWorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ServiceWorkerGlobalScopeEventMap>(type: K, listener: (this: ServiceWorkerGlobalScope, ev: ServiceWorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ServiceWorkerGlobalScope: {\n    prototype: ServiceWorkerGlobalScope;\n    new(): ServiceWorkerGlobalScope;\n};\n\ninterface ServiceWorkerRegistrationEventMap {\n    \"updatefound\": Event;\n}\n\n/**\n * This ServiceWorker API interface represents the service worker registration. You register a service worker to control one or more pages that share the same origin.\n * Available only in secure contexts.\n */\ninterface ServiceWorkerRegistration extends EventTarget {\n    readonly active: ServiceWorker | null;\n    readonly installing: ServiceWorker | null;\n    readonly navigationPreload: NavigationPreloadManager;\n    onupdatefound: ((this: ServiceWorkerRegistration, ev: Event) => any) | null;\n    readonly pushManager: PushManager;\n    readonly scope: string;\n    readonly updateViaCache: ServiceWorkerUpdateViaCache;\n    readonly waiting: ServiceWorker | null;\n    getNotifications(filter?: GetNotificationOptions): Promise<Notification[]>;\n    showNotification(title: string, options?: NotificationOptions): Promise<void>;\n    unregister(): Promise<boolean>;\n    update(): Promise<void>;\n    addEventListener<K extends keyof ServiceWorkerRegistrationEventMap>(type: K, listener: (this: ServiceWorkerRegistration, ev: ServiceWorkerRegistrationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof ServiceWorkerRegistrationEventMap>(type: K, listener: (this: ServiceWorkerRegistration, ev: ServiceWorkerRegistrationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ServiceWorkerRegistration: {\n    prototype: ServiceWorkerRegistration;\n    new(): ServiceWorkerRegistration;\n};\n\ninterface SharedWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap {\n    \"connect\": MessageEvent;\n}\n\ninterface SharedWorkerGlobalScope extends WorkerGlobalScope {\n    /** Returns sharedWorkerGlobal's name, i.e. the value given to the SharedWorker constructor. Multiple SharedWorker objects can correspond to the same shared worker (and SharedWorkerGlobalScope), by reusing the same name. */\n    readonly name: string;\n    onconnect: ((this: SharedWorkerGlobalScope, ev: MessageEvent) => any) | null;\n    /** Aborts sharedWorkerGlobal. */\n    close(): void;\n    addEventListener<K extends keyof SharedWorkerGlobalScopeEventMap>(type: K, listener: (this: SharedWorkerGlobalScope, ev: SharedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof SharedWorkerGlobalScopeEventMap>(type: K, listener: (this: SharedWorkerGlobalScope, ev: SharedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var SharedWorkerGlobalScope: {\n    prototype: SharedWorkerGlobalScope;\n    new(): SharedWorkerGlobalScope;\n};\n\n/** Available only in secure contexts. */\ninterface StorageManager {\n    estimate(): Promise<StorageEstimate>;\n    getDirectory(): Promise<FileSystemDirectoryHandle>;\n    persisted(): Promise<boolean>;\n}\n\ndeclare var StorageManager: {\n    prototype: StorageManager;\n    new(): StorageManager;\n};\n\n/**\n * This Web Crypto API interface provides a number of low-level cryptographic functions. It is accessed via the Crypto.subtle properties available in a window context (via Window.crypto).\n * Available only in secure contexts.\n */\ninterface SubtleCrypto {\n    decrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer>;\n    deriveBits(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;\n    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;\n    digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise<ArrayBuffer>;\n    encrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer>;\n    exportKey(format: \"jwk\", key: CryptoKey): Promise<JsonWebKey>;\n    exportKey(format: Exclude<KeyFormat, \"jwk\">, key: CryptoKey): Promise<ArrayBuffer>;\n    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKeyPair>;\n    generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKey>;\n    generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair | CryptoKey>;\n    importKey(format: \"jwk\", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKey>;\n    importKey(format: Exclude<KeyFormat, \"jwk\">, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;\n    sign(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer>;\n    unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;\n    verify(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean>;\n    wrapKey(format: KeyFormat, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams): Promise<ArrayBuffer>;\n}\n\ndeclare var SubtleCrypto: {\n    prototype: SubtleCrypto;\n    new(): SubtleCrypto;\n};\n\n/** A decoder for a specific method, that is a specific character encoding, like utf-8, iso-8859-2, koi8, cp1261, gbk, etc.\\xA0A decoder takes a stream of bytes as input and emits a stream of code points. For a more scalable, non-native library, see StringView \\u2013 a C-like representation of strings based on typed arrays. */\ninterface TextDecoder extends TextDecoderCommon {\n    /**\n     * Returns the result of running encoding's decoder. The method can be invoked zero or more times with options's stream set to true, and then once without options's stream (or set to false), to process a fragmented input. If the invocation without options's stream (or set to false) has no input, it's clearest to omit both arguments.\n     *\n     * \\`\\`\\`\n     * var string = \"\", decoder = new TextDecoder(encoding), buffer;\n     * while(buffer = next_chunk()) {\n     *   string += decoder.decode(buffer, {stream:true});\n     * }\n     * string += decoder.decode(); // end-of-queue\n     * \\`\\`\\`\n     *\n     * If the error mode is \"fatal\" and encoding's decoder returns error, throws a TypeError.\n     */\n    decode(input?: BufferSource, options?: TextDecodeOptions): string;\n}\n\ndeclare var TextDecoder: {\n    prototype: TextDecoder;\n    new(label?: string, options?: TextDecoderOptions): TextDecoder;\n};\n\ninterface TextDecoderCommon {\n    /** Returns encoding's name, lowercased. */\n    readonly encoding: string;\n    /** Returns true if error mode is \"fatal\", otherwise false. */\n    readonly fatal: boolean;\n    /** Returns the value of ignore BOM. */\n    readonly ignoreBOM: boolean;\n}\n\ninterface TextDecoderStream extends GenericTransformStream, TextDecoderCommon {\n    readonly readable: ReadableStream<string>;\n    readonly writable: WritableStream<BufferSource>;\n}\n\ndeclare var TextDecoderStream: {\n    prototype: TextDecoderStream;\n    new(label?: string, options?: TextDecoderOptions): TextDecoderStream;\n};\n\n/** TextEncoder takes a stream of code points as input and emits a stream of bytes. For a more scalable, non-native library, see StringView \\u2013 a C-like representation of strings based on typed arrays. */\ninterface TextEncoder extends TextEncoderCommon {\n    /** Returns the result of running UTF-8's encoder. */\n    encode(input?: string): Uint8Array;\n    /** Runs the UTF-8 encoder on source, stores the result of that operation into destination, and returns the progress made as an object wherein read is the number of converted code units of source and written is the number of bytes modified in destination. */\n    encodeInto(source: string, destination: Uint8Array): TextEncoderEncodeIntoResult;\n}\n\ndeclare var TextEncoder: {\n    prototype: TextEncoder;\n    new(): TextEncoder;\n};\n\ninterface TextEncoderCommon {\n    /** Returns \"utf-8\". */\n    readonly encoding: string;\n}\n\ninterface TextEncoderStream extends GenericTransformStream, TextEncoderCommon {\n    readonly readable: ReadableStream<Uint8Array>;\n    readonly writable: WritableStream<string>;\n}\n\ndeclare var TextEncoderStream: {\n    prototype: TextEncoderStream;\n    new(): TextEncoderStream;\n};\n\n/** The dimensions of a piece of text in the canvas, as created by the CanvasRenderingContext2D.measureText() method. */\ninterface TextMetrics {\n    /** Returns the measurement described below. */\n    readonly actualBoundingBoxAscent: number;\n    /** Returns the measurement described below. */\n    readonly actualBoundingBoxDescent: number;\n    /** Returns the measurement described below. */\n    readonly actualBoundingBoxLeft: number;\n    /** Returns the measurement described below. */\n    readonly actualBoundingBoxRight: number;\n    /** Returns the measurement described below. */\n    readonly fontBoundingBoxAscent: number;\n    /** Returns the measurement described below. */\n    readonly fontBoundingBoxDescent: number;\n    /** Returns the measurement described below. */\n    readonly width: number;\n}\n\ndeclare var TextMetrics: {\n    prototype: TextMetrics;\n    new(): TextMetrics;\n};\n\ninterface TransformStream<I = any, O = any> {\n    readonly readable: ReadableStream<O>;\n    readonly writable: WritableStream<I>;\n}\n\ndeclare var TransformStream: {\n    prototype: TransformStream;\n    new<I = any, O = any>(transformer?: Transformer<I, O>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<O>): TransformStream<I, O>;\n};\n\ninterface TransformStreamDefaultController<O = any> {\n    readonly desiredSize: number | null;\n    enqueue(chunk?: O): void;\n    error(reason?: any): void;\n    terminate(): void;\n}\n\ndeclare var TransformStreamDefaultController: {\n    prototype: TransformStreamDefaultController;\n    new(): TransformStreamDefaultController;\n};\n\n/** The URL\\xA0interface represents an object providing static methods used for creating object URLs. */\ninterface URL {\n    hash: string;\n    host: string;\n    hostname: string;\n    href: string;\n    toString(): string;\n    readonly origin: string;\n    password: string;\n    pathname: string;\n    port: string;\n    protocol: string;\n    search: string;\n    readonly searchParams: URLSearchParams;\n    username: string;\n    toJSON(): string;\n}\n\ndeclare var URL: {\n    prototype: URL;\n    new(url: string | URL, base?: string | URL): URL;\n    createObjectURL(obj: Blob): string;\n    revokeObjectURL(url: string): void;\n};\n\ninterface URLSearchParams {\n    /** Appends a specified key/value pair as a new search parameter. */\n    append(name: string, value: string): void;\n    /** Deletes the given search parameter, and its associated value, from the list of all search parameters. */\n    delete(name: string): void;\n    /** Returns the first value associated to the given search parameter. */\n    get(name: string): string | null;\n    /** Returns all the values association with a given search parameter. */\n    getAll(name: string): string[];\n    /** Returns a Boolean indicating if such a search parameter exists. */\n    has(name: string): boolean;\n    /** Sets the value associated to a given search parameter to the given value. If there were several values, delete the others. */\n    set(name: string, value: string): void;\n    sort(): void;\n    /** Returns a string containing a query string suitable for use in a URL. Does not include the question mark. */\n    toString(): string;\n    forEach(callbackfn: (value: string, key: string, parent: URLSearchParams) => void, thisArg?: any): void;\n}\n\ndeclare var URLSearchParams: {\n    prototype: URLSearchParams;\n    new(init?: string[][] | Record<string, string> | string | URLSearchParams): URLSearchParams;\n    toString(): string;\n};\n\ninterface VideoColorSpace {\n    readonly fullRange: boolean | null;\n    readonly matrix: VideoMatrixCoefficients | null;\n    readonly primaries: VideoColorPrimaries | null;\n    readonly transfer: VideoTransferCharacteristics | null;\n    toJSON(): VideoColorSpaceInit;\n}\n\ndeclare var VideoColorSpace: {\n    prototype: VideoColorSpace;\n    new(init?: VideoColorSpaceInit): VideoColorSpace;\n};\n\ninterface WEBGL_color_buffer_float {\n    readonly RGBA32F_EXT: 0x8814;\n    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211;\n    readonly UNSIGNED_NORMALIZED_EXT: 0x8C17;\n}\n\ninterface WEBGL_compressed_texture_astc {\n    getSupportedProfiles(): string[];\n    readonly COMPRESSED_RGBA_ASTC_4x4_KHR: 0x93B0;\n    readonly COMPRESSED_RGBA_ASTC_5x4_KHR: 0x93B1;\n    readonly COMPRESSED_RGBA_ASTC_5x5_KHR: 0x93B2;\n    readonly COMPRESSED_RGBA_ASTC_6x5_KHR: 0x93B3;\n    readonly COMPRESSED_RGBA_ASTC_6x6_KHR: 0x93B4;\n    readonly COMPRESSED_RGBA_ASTC_8x5_KHR: 0x93B5;\n    readonly COMPRESSED_RGBA_ASTC_8x6_KHR: 0x93B6;\n    readonly COMPRESSED_RGBA_ASTC_8x8_KHR: 0x93B7;\n    readonly COMPRESSED_RGBA_ASTC_10x5_KHR: 0x93B8;\n    readonly COMPRESSED_RGBA_ASTC_10x6_KHR: 0x93B9;\n    readonly COMPRESSED_RGBA_ASTC_10x8_KHR: 0x93BA;\n    readonly COMPRESSED_RGBA_ASTC_10x10_KHR: 0x93BB;\n    readonly COMPRESSED_RGBA_ASTC_12x10_KHR: 0x93BC;\n    readonly COMPRESSED_RGBA_ASTC_12x12_KHR: 0x93BD;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: 0x93D0;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR: 0x93D1;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR: 0x93D2;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR: 0x93D3;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR: 0x93D4;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR: 0x93D5;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR: 0x93D6;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: 0x93D7;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR: 0x93D8;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR: 0x93D9;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR: 0x93DA;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR: 0x93DB;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR: 0x93DC;\n    readonly COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR: 0x93DD;\n}\n\ninterface WEBGL_compressed_texture_etc {\n    readonly COMPRESSED_R11_EAC: 0x9270;\n    readonly COMPRESSED_SIGNED_R11_EAC: 0x9271;\n    readonly COMPRESSED_RG11_EAC: 0x9272;\n    readonly COMPRESSED_SIGNED_RG11_EAC: 0x9273;\n    readonly COMPRESSED_RGB8_ETC2: 0x9274;\n    readonly COMPRESSED_SRGB8_ETC2: 0x9275;\n    readonly COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9276;\n    readonly COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9277;\n    readonly COMPRESSED_RGBA8_ETC2_EAC: 0x9278;\n    readonly COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9279;\n}\n\ninterface WEBGL_compressed_texture_etc1 {\n    readonly COMPRESSED_RGB_ETC1_WEBGL: 0x8D64;\n}\n\n/** The WEBGL_compressed_texture_s3tc extension is part of the WebGL API and exposes four S3TC compressed texture formats. */\ninterface WEBGL_compressed_texture_s3tc {\n    readonly COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83F0;\n    readonly COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83F1;\n    readonly COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83F2;\n    readonly COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83F3;\n}\n\ninterface WEBGL_compressed_texture_s3tc_srgb {\n    readonly COMPRESSED_SRGB_S3TC_DXT1_EXT: 0x8C4C;\n    readonly COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 0x8C4D;\n    readonly COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 0x8C4E;\n    readonly COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 0x8C4F;\n}\n\n/** The WEBGL_debug_renderer_info extension is part of the WebGL API and exposes two constants with information about the graphics driver for debugging purposes. */\ninterface WEBGL_debug_renderer_info {\n    readonly UNMASKED_VENDOR_WEBGL: 0x9245;\n    readonly UNMASKED_RENDERER_WEBGL: 0x9246;\n}\n\ninterface WEBGL_debug_shaders {\n    getTranslatedShaderSource(shader: WebGLShader): string;\n}\n\n/** The WEBGL_depth_texture extension is part of the WebGL API and defines 2D depth and depth-stencil textures. */\ninterface WEBGL_depth_texture {\n    readonly UNSIGNED_INT_24_8_WEBGL: 0x84FA;\n}\n\ninterface WEBGL_draw_buffers {\n    drawBuffersWEBGL(buffers: GLenum[]): void;\n    readonly COLOR_ATTACHMENT0_WEBGL: 0x8CE0;\n    readonly COLOR_ATTACHMENT1_WEBGL: 0x8CE1;\n    readonly COLOR_ATTACHMENT2_WEBGL: 0x8CE2;\n    readonly COLOR_ATTACHMENT3_WEBGL: 0x8CE3;\n    readonly COLOR_ATTACHMENT4_WEBGL: 0x8CE4;\n    readonly COLOR_ATTACHMENT5_WEBGL: 0x8CE5;\n    readonly COLOR_ATTACHMENT6_WEBGL: 0x8CE6;\n    readonly COLOR_ATTACHMENT7_WEBGL: 0x8CE7;\n    readonly COLOR_ATTACHMENT8_WEBGL: 0x8CE8;\n    readonly COLOR_ATTACHMENT9_WEBGL: 0x8CE9;\n    readonly COLOR_ATTACHMENT10_WEBGL: 0x8CEA;\n    readonly COLOR_ATTACHMENT11_WEBGL: 0x8CEB;\n    readonly COLOR_ATTACHMENT12_WEBGL: 0x8CEC;\n    readonly COLOR_ATTACHMENT13_WEBGL: 0x8CED;\n    readonly COLOR_ATTACHMENT14_WEBGL: 0x8CEE;\n    readonly COLOR_ATTACHMENT15_WEBGL: 0x8CEF;\n    readonly DRAW_BUFFER0_WEBGL: 0x8825;\n    readonly DRAW_BUFFER1_WEBGL: 0x8826;\n    readonly DRAW_BUFFER2_WEBGL: 0x8827;\n    readonly DRAW_BUFFER3_WEBGL: 0x8828;\n    readonly DRAW_BUFFER4_WEBGL: 0x8829;\n    readonly DRAW_BUFFER5_WEBGL: 0x882A;\n    readonly DRAW_BUFFER6_WEBGL: 0x882B;\n    readonly DRAW_BUFFER7_WEBGL: 0x882C;\n    readonly DRAW_BUFFER8_WEBGL: 0x882D;\n    readonly DRAW_BUFFER9_WEBGL: 0x882E;\n    readonly DRAW_BUFFER10_WEBGL: 0x882F;\n    readonly DRAW_BUFFER11_WEBGL: 0x8830;\n    readonly DRAW_BUFFER12_WEBGL: 0x8831;\n    readonly DRAW_BUFFER13_WEBGL: 0x8832;\n    readonly DRAW_BUFFER14_WEBGL: 0x8833;\n    readonly DRAW_BUFFER15_WEBGL: 0x8834;\n    readonly MAX_COLOR_ATTACHMENTS_WEBGL: 0x8CDF;\n    readonly MAX_DRAW_BUFFERS_WEBGL: 0x8824;\n}\n\ninterface WEBGL_lose_context {\n    loseContext(): void;\n    restoreContext(): void;\n}\n\ninterface WEBGL_multi_draw {\n    multiDrawArraysInstancedWEBGL(mode: GLenum, firstsList: Int32Array | GLint[], firstsOffset: GLuint, countsList: Int32Array | GLsizei[], countsOffset: GLuint, instanceCountsList: Int32Array | GLsizei[], instanceCountsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawArraysWEBGL(mode: GLenum, firstsList: Int32Array | GLint[], firstsOffset: GLuint, countsList: Int32Array | GLsizei[], countsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawElementsInstancedWEBGL(mode: GLenum, countsList: Int32Array | GLsizei[], countsOffset: GLuint, type: GLenum, offsetsList: Int32Array | GLsizei[], offsetsOffset: GLuint, instanceCountsList: Int32Array | GLsizei[], instanceCountsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawElementsWEBGL(mode: GLenum, countsList: Int32Array | GLsizei[], countsOffset: GLuint, type: GLenum, offsetsList: Int32Array | GLsizei[], offsetsOffset: GLuint, drawcount: GLsizei): void;\n}\n\ninterface WebGL2RenderingContext extends WebGL2RenderingContextBase, WebGL2RenderingContextOverloads, WebGLRenderingContextBase {\n}\n\ndeclare var WebGL2RenderingContext: {\n    prototype: WebGL2RenderingContext;\n    new(): WebGL2RenderingContext;\n    readonly READ_BUFFER: 0x0C02;\n    readonly UNPACK_ROW_LENGTH: 0x0CF2;\n    readonly UNPACK_SKIP_ROWS: 0x0CF3;\n    readonly UNPACK_SKIP_PIXELS: 0x0CF4;\n    readonly PACK_ROW_LENGTH: 0x0D02;\n    readonly PACK_SKIP_ROWS: 0x0D03;\n    readonly PACK_SKIP_PIXELS: 0x0D04;\n    readonly COLOR: 0x1800;\n    readonly DEPTH: 0x1801;\n    readonly STENCIL: 0x1802;\n    readonly RED: 0x1903;\n    readonly RGB8: 0x8051;\n    readonly RGBA8: 0x8058;\n    readonly RGB10_A2: 0x8059;\n    readonly TEXTURE_BINDING_3D: 0x806A;\n    readonly UNPACK_SKIP_IMAGES: 0x806D;\n    readonly UNPACK_IMAGE_HEIGHT: 0x806E;\n    readonly TEXTURE_3D: 0x806F;\n    readonly TEXTURE_WRAP_R: 0x8072;\n    readonly MAX_3D_TEXTURE_SIZE: 0x8073;\n    readonly UNSIGNED_INT_2_10_10_10_REV: 0x8368;\n    readonly MAX_ELEMENTS_VERTICES: 0x80E8;\n    readonly MAX_ELEMENTS_INDICES: 0x80E9;\n    readonly TEXTURE_MIN_LOD: 0x813A;\n    readonly TEXTURE_MAX_LOD: 0x813B;\n    readonly TEXTURE_BASE_LEVEL: 0x813C;\n    readonly TEXTURE_MAX_LEVEL: 0x813D;\n    readonly MIN: 0x8007;\n    readonly MAX: 0x8008;\n    readonly DEPTH_COMPONENT24: 0x81A6;\n    readonly MAX_TEXTURE_LOD_BIAS: 0x84FD;\n    readonly TEXTURE_COMPARE_MODE: 0x884C;\n    readonly TEXTURE_COMPARE_FUNC: 0x884D;\n    readonly CURRENT_QUERY: 0x8865;\n    readonly QUERY_RESULT: 0x8866;\n    readonly QUERY_RESULT_AVAILABLE: 0x8867;\n    readonly STREAM_READ: 0x88E1;\n    readonly STREAM_COPY: 0x88E2;\n    readonly STATIC_READ: 0x88E5;\n    readonly STATIC_COPY: 0x88E6;\n    readonly DYNAMIC_READ: 0x88E9;\n    readonly DYNAMIC_COPY: 0x88EA;\n    readonly MAX_DRAW_BUFFERS: 0x8824;\n    readonly DRAW_BUFFER0: 0x8825;\n    readonly DRAW_BUFFER1: 0x8826;\n    readonly DRAW_BUFFER2: 0x8827;\n    readonly DRAW_BUFFER3: 0x8828;\n    readonly DRAW_BUFFER4: 0x8829;\n    readonly DRAW_BUFFER5: 0x882A;\n    readonly DRAW_BUFFER6: 0x882B;\n    readonly DRAW_BUFFER7: 0x882C;\n    readonly DRAW_BUFFER8: 0x882D;\n    readonly DRAW_BUFFER9: 0x882E;\n    readonly DRAW_BUFFER10: 0x882F;\n    readonly DRAW_BUFFER11: 0x8830;\n    readonly DRAW_BUFFER12: 0x8831;\n    readonly DRAW_BUFFER13: 0x8832;\n    readonly DRAW_BUFFER14: 0x8833;\n    readonly DRAW_BUFFER15: 0x8834;\n    readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8B49;\n    readonly MAX_VERTEX_UNIFORM_COMPONENTS: 0x8B4A;\n    readonly SAMPLER_3D: 0x8B5F;\n    readonly SAMPLER_2D_SHADOW: 0x8B62;\n    readonly FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8B8B;\n    readonly PIXEL_PACK_BUFFER: 0x88EB;\n    readonly PIXEL_UNPACK_BUFFER: 0x88EC;\n    readonly PIXEL_PACK_BUFFER_BINDING: 0x88ED;\n    readonly PIXEL_UNPACK_BUFFER_BINDING: 0x88EF;\n    readonly FLOAT_MAT2x3: 0x8B65;\n    readonly FLOAT_MAT2x4: 0x8B66;\n    readonly FLOAT_MAT3x2: 0x8B67;\n    readonly FLOAT_MAT3x4: 0x8B68;\n    readonly FLOAT_MAT4x2: 0x8B69;\n    readonly FLOAT_MAT4x3: 0x8B6A;\n    readonly SRGB: 0x8C40;\n    readonly SRGB8: 0x8C41;\n    readonly SRGB8_ALPHA8: 0x8C43;\n    readonly COMPARE_REF_TO_TEXTURE: 0x884E;\n    readonly RGBA32F: 0x8814;\n    readonly RGB32F: 0x8815;\n    readonly RGBA16F: 0x881A;\n    readonly RGB16F: 0x881B;\n    readonly VERTEX_ATTRIB_ARRAY_INTEGER: 0x88FD;\n    readonly MAX_ARRAY_TEXTURE_LAYERS: 0x88FF;\n    readonly MIN_PROGRAM_TEXEL_OFFSET: 0x8904;\n    readonly MAX_PROGRAM_TEXEL_OFFSET: 0x8905;\n    readonly MAX_VARYING_COMPONENTS: 0x8B4B;\n    readonly TEXTURE_2D_ARRAY: 0x8C1A;\n    readonly TEXTURE_BINDING_2D_ARRAY: 0x8C1D;\n    readonly R11F_G11F_B10F: 0x8C3A;\n    readonly UNSIGNED_INT_10F_11F_11F_REV: 0x8C3B;\n    readonly RGB9_E5: 0x8C3D;\n    readonly UNSIGNED_INT_5_9_9_9_REV: 0x8C3E;\n    readonly TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8C7F;\n    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8C80;\n    readonly TRANSFORM_FEEDBACK_VARYINGS: 0x8C83;\n    readonly TRANSFORM_FEEDBACK_BUFFER_START: 0x8C84;\n    readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8C85;\n    readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8C88;\n    readonly RASTERIZER_DISCARD: 0x8C89;\n    readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8C8A;\n    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8C8B;\n    readonly INTERLEAVED_ATTRIBS: 0x8C8C;\n    readonly SEPARATE_ATTRIBS: 0x8C8D;\n    readonly TRANSFORM_FEEDBACK_BUFFER: 0x8C8E;\n    readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8C8F;\n    readonly RGBA32UI: 0x8D70;\n    readonly RGB32UI: 0x8D71;\n    readonly RGBA16UI: 0x8D76;\n    readonly RGB16UI: 0x8D77;\n    readonly RGBA8UI: 0x8D7C;\n    readonly RGB8UI: 0x8D7D;\n    readonly RGBA32I: 0x8D82;\n    readonly RGB32I: 0x8D83;\n    readonly RGBA16I: 0x8D88;\n    readonly RGB16I: 0x8D89;\n    readonly RGBA8I: 0x8D8E;\n    readonly RGB8I: 0x8D8F;\n    readonly RED_INTEGER: 0x8D94;\n    readonly RGB_INTEGER: 0x8D98;\n    readonly RGBA_INTEGER: 0x8D99;\n    readonly SAMPLER_2D_ARRAY: 0x8DC1;\n    readonly SAMPLER_2D_ARRAY_SHADOW: 0x8DC4;\n    readonly SAMPLER_CUBE_SHADOW: 0x8DC5;\n    readonly UNSIGNED_INT_VEC2: 0x8DC6;\n    readonly UNSIGNED_INT_VEC3: 0x8DC7;\n    readonly UNSIGNED_INT_VEC4: 0x8DC8;\n    readonly INT_SAMPLER_2D: 0x8DCA;\n    readonly INT_SAMPLER_3D: 0x8DCB;\n    readonly INT_SAMPLER_CUBE: 0x8DCC;\n    readonly INT_SAMPLER_2D_ARRAY: 0x8DCF;\n    readonly UNSIGNED_INT_SAMPLER_2D: 0x8DD2;\n    readonly UNSIGNED_INT_SAMPLER_3D: 0x8DD3;\n    readonly UNSIGNED_INT_SAMPLER_CUBE: 0x8DD4;\n    readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8DD7;\n    readonly DEPTH_COMPONENT32F: 0x8CAC;\n    readonly DEPTH32F_STENCIL8: 0x8CAD;\n    readonly FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8DAD;\n    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210;\n    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211;\n    readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212;\n    readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213;\n    readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214;\n    readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215;\n    readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216;\n    readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217;\n    readonly FRAMEBUFFER_DEFAULT: 0x8218;\n    readonly UNSIGNED_INT_24_8: 0x84FA;\n    readonly DEPTH24_STENCIL8: 0x88F0;\n    readonly UNSIGNED_NORMALIZED: 0x8C17;\n    readonly DRAW_FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly READ_FRAMEBUFFER: 0x8CA8;\n    readonly DRAW_FRAMEBUFFER: 0x8CA9;\n    readonly READ_FRAMEBUFFER_BINDING: 0x8CAA;\n    readonly RENDERBUFFER_SAMPLES: 0x8CAB;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8CD4;\n    readonly MAX_COLOR_ATTACHMENTS: 0x8CDF;\n    readonly COLOR_ATTACHMENT1: 0x8CE1;\n    readonly COLOR_ATTACHMENT2: 0x8CE2;\n    readonly COLOR_ATTACHMENT3: 0x8CE3;\n    readonly COLOR_ATTACHMENT4: 0x8CE4;\n    readonly COLOR_ATTACHMENT5: 0x8CE5;\n    readonly COLOR_ATTACHMENT6: 0x8CE6;\n    readonly COLOR_ATTACHMENT7: 0x8CE7;\n    readonly COLOR_ATTACHMENT8: 0x8CE8;\n    readonly COLOR_ATTACHMENT9: 0x8CE9;\n    readonly COLOR_ATTACHMENT10: 0x8CEA;\n    readonly COLOR_ATTACHMENT11: 0x8CEB;\n    readonly COLOR_ATTACHMENT12: 0x8CEC;\n    readonly COLOR_ATTACHMENT13: 0x8CED;\n    readonly COLOR_ATTACHMENT14: 0x8CEE;\n    readonly COLOR_ATTACHMENT15: 0x8CEF;\n    readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8D56;\n    readonly MAX_SAMPLES: 0x8D57;\n    readonly HALF_FLOAT: 0x140B;\n    readonly RG: 0x8227;\n    readonly RG_INTEGER: 0x8228;\n    readonly R8: 0x8229;\n    readonly RG8: 0x822B;\n    readonly R16F: 0x822D;\n    readonly R32F: 0x822E;\n    readonly RG16F: 0x822F;\n    readonly RG32F: 0x8230;\n    readonly R8I: 0x8231;\n    readonly R8UI: 0x8232;\n    readonly R16I: 0x8233;\n    readonly R16UI: 0x8234;\n    readonly R32I: 0x8235;\n    readonly R32UI: 0x8236;\n    readonly RG8I: 0x8237;\n    readonly RG8UI: 0x8238;\n    readonly RG16I: 0x8239;\n    readonly RG16UI: 0x823A;\n    readonly RG32I: 0x823B;\n    readonly RG32UI: 0x823C;\n    readonly VERTEX_ARRAY_BINDING: 0x85B5;\n    readonly R8_SNORM: 0x8F94;\n    readonly RG8_SNORM: 0x8F95;\n    readonly RGB8_SNORM: 0x8F96;\n    readonly RGBA8_SNORM: 0x8F97;\n    readonly SIGNED_NORMALIZED: 0x8F9C;\n    readonly COPY_READ_BUFFER: 0x8F36;\n    readonly COPY_WRITE_BUFFER: 0x8F37;\n    readonly COPY_READ_BUFFER_BINDING: 0x8F36;\n    readonly COPY_WRITE_BUFFER_BINDING: 0x8F37;\n    readonly UNIFORM_BUFFER: 0x8A11;\n    readonly UNIFORM_BUFFER_BINDING: 0x8A28;\n    readonly UNIFORM_BUFFER_START: 0x8A29;\n    readonly UNIFORM_BUFFER_SIZE: 0x8A2A;\n    readonly MAX_VERTEX_UNIFORM_BLOCKS: 0x8A2B;\n    readonly MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8A2D;\n    readonly MAX_COMBINED_UNIFORM_BLOCKS: 0x8A2E;\n    readonly MAX_UNIFORM_BUFFER_BINDINGS: 0x8A2F;\n    readonly MAX_UNIFORM_BLOCK_SIZE: 0x8A30;\n    readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8A31;\n    readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8A33;\n    readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8A34;\n    readonly ACTIVE_UNIFORM_BLOCKS: 0x8A36;\n    readonly UNIFORM_TYPE: 0x8A37;\n    readonly UNIFORM_SIZE: 0x8A38;\n    readonly UNIFORM_BLOCK_INDEX: 0x8A3A;\n    readonly UNIFORM_OFFSET: 0x8A3B;\n    readonly UNIFORM_ARRAY_STRIDE: 0x8A3C;\n    readonly UNIFORM_MATRIX_STRIDE: 0x8A3D;\n    readonly UNIFORM_IS_ROW_MAJOR: 0x8A3E;\n    readonly UNIFORM_BLOCK_BINDING: 0x8A3F;\n    readonly UNIFORM_BLOCK_DATA_SIZE: 0x8A40;\n    readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8A42;\n    readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8A43;\n    readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8A44;\n    readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8A46;\n    readonly INVALID_INDEX: 0xFFFFFFFF;\n    readonly MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122;\n    readonly MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125;\n    readonly MAX_SERVER_WAIT_TIMEOUT: 0x9111;\n    readonly OBJECT_TYPE: 0x9112;\n    readonly SYNC_CONDITION: 0x9113;\n    readonly SYNC_STATUS: 0x9114;\n    readonly SYNC_FLAGS: 0x9115;\n    readonly SYNC_FENCE: 0x9116;\n    readonly SYNC_GPU_COMMANDS_COMPLETE: 0x9117;\n    readonly UNSIGNALED: 0x9118;\n    readonly SIGNALED: 0x9119;\n    readonly ALREADY_SIGNALED: 0x911A;\n    readonly TIMEOUT_EXPIRED: 0x911B;\n    readonly CONDITION_SATISFIED: 0x911C;\n    readonly WAIT_FAILED: 0x911D;\n    readonly SYNC_FLUSH_COMMANDS_BIT: 0x00000001;\n    readonly VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88FE;\n    readonly ANY_SAMPLES_PASSED: 0x8C2F;\n    readonly ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8D6A;\n    readonly SAMPLER_BINDING: 0x8919;\n    readonly RGB10_A2UI: 0x906F;\n    readonly INT_2_10_10_10_REV: 0x8D9F;\n    readonly TRANSFORM_FEEDBACK: 0x8E22;\n    readonly TRANSFORM_FEEDBACK_PAUSED: 0x8E23;\n    readonly TRANSFORM_FEEDBACK_ACTIVE: 0x8E24;\n    readonly TRANSFORM_FEEDBACK_BINDING: 0x8E25;\n    readonly TEXTURE_IMMUTABLE_FORMAT: 0x912F;\n    readonly MAX_ELEMENT_INDEX: 0x8D6B;\n    readonly TEXTURE_IMMUTABLE_LEVELS: 0x82DF;\n    readonly TIMEOUT_IGNORED: -1;\n    readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247;\n    readonly DEPTH_BUFFER_BIT: 0x00000100;\n    readonly STENCIL_BUFFER_BIT: 0x00000400;\n    readonly COLOR_BUFFER_BIT: 0x00004000;\n    readonly POINTS: 0x0000;\n    readonly LINES: 0x0001;\n    readonly LINE_LOOP: 0x0002;\n    readonly LINE_STRIP: 0x0003;\n    readonly TRIANGLES: 0x0004;\n    readonly TRIANGLE_STRIP: 0x0005;\n    readonly TRIANGLE_FAN: 0x0006;\n    readonly ZERO: 0;\n    readonly ONE: 1;\n    readonly SRC_COLOR: 0x0300;\n    readonly ONE_MINUS_SRC_COLOR: 0x0301;\n    readonly SRC_ALPHA: 0x0302;\n    readonly ONE_MINUS_SRC_ALPHA: 0x0303;\n    readonly DST_ALPHA: 0x0304;\n    readonly ONE_MINUS_DST_ALPHA: 0x0305;\n    readonly DST_COLOR: 0x0306;\n    readonly ONE_MINUS_DST_COLOR: 0x0307;\n    readonly SRC_ALPHA_SATURATE: 0x0308;\n    readonly FUNC_ADD: 0x8006;\n    readonly BLEND_EQUATION: 0x8009;\n    readonly BLEND_EQUATION_RGB: 0x8009;\n    readonly BLEND_EQUATION_ALPHA: 0x883D;\n    readonly FUNC_SUBTRACT: 0x800A;\n    readonly FUNC_REVERSE_SUBTRACT: 0x800B;\n    readonly BLEND_DST_RGB: 0x80C8;\n    readonly BLEND_SRC_RGB: 0x80C9;\n    readonly BLEND_DST_ALPHA: 0x80CA;\n    readonly BLEND_SRC_ALPHA: 0x80CB;\n    readonly CONSTANT_COLOR: 0x8001;\n    readonly ONE_MINUS_CONSTANT_COLOR: 0x8002;\n    readonly CONSTANT_ALPHA: 0x8003;\n    readonly ONE_MINUS_CONSTANT_ALPHA: 0x8004;\n    readonly BLEND_COLOR: 0x8005;\n    readonly ARRAY_BUFFER: 0x8892;\n    readonly ELEMENT_ARRAY_BUFFER: 0x8893;\n    readonly ARRAY_BUFFER_BINDING: 0x8894;\n    readonly ELEMENT_ARRAY_BUFFER_BINDING: 0x8895;\n    readonly STREAM_DRAW: 0x88E0;\n    readonly STATIC_DRAW: 0x88E4;\n    readonly DYNAMIC_DRAW: 0x88E8;\n    readonly BUFFER_SIZE: 0x8764;\n    readonly BUFFER_USAGE: 0x8765;\n    readonly CURRENT_VERTEX_ATTRIB: 0x8626;\n    readonly FRONT: 0x0404;\n    readonly BACK: 0x0405;\n    readonly FRONT_AND_BACK: 0x0408;\n    readonly CULL_FACE: 0x0B44;\n    readonly BLEND: 0x0BE2;\n    readonly DITHER: 0x0BD0;\n    readonly STENCIL_TEST: 0x0B90;\n    readonly DEPTH_TEST: 0x0B71;\n    readonly SCISSOR_TEST: 0x0C11;\n    readonly POLYGON_OFFSET_FILL: 0x8037;\n    readonly SAMPLE_ALPHA_TO_COVERAGE: 0x809E;\n    readonly SAMPLE_COVERAGE: 0x80A0;\n    readonly NO_ERROR: 0;\n    readonly INVALID_ENUM: 0x0500;\n    readonly INVALID_VALUE: 0x0501;\n    readonly INVALID_OPERATION: 0x0502;\n    readonly OUT_OF_MEMORY: 0x0505;\n    readonly CW: 0x0900;\n    readonly CCW: 0x0901;\n    readonly LINE_WIDTH: 0x0B21;\n    readonly ALIASED_POINT_SIZE_RANGE: 0x846D;\n    readonly ALIASED_LINE_WIDTH_RANGE: 0x846E;\n    readonly CULL_FACE_MODE: 0x0B45;\n    readonly FRONT_FACE: 0x0B46;\n    readonly DEPTH_RANGE: 0x0B70;\n    readonly DEPTH_WRITEMASK: 0x0B72;\n    readonly DEPTH_CLEAR_VALUE: 0x0B73;\n    readonly DEPTH_FUNC: 0x0B74;\n    readonly STENCIL_CLEAR_VALUE: 0x0B91;\n    readonly STENCIL_FUNC: 0x0B92;\n    readonly STENCIL_FAIL: 0x0B94;\n    readonly STENCIL_PASS_DEPTH_FAIL: 0x0B95;\n    readonly STENCIL_PASS_DEPTH_PASS: 0x0B96;\n    readonly STENCIL_REF: 0x0B97;\n    readonly STENCIL_VALUE_MASK: 0x0B93;\n    readonly STENCIL_WRITEMASK: 0x0B98;\n    readonly STENCIL_BACK_FUNC: 0x8800;\n    readonly STENCIL_BACK_FAIL: 0x8801;\n    readonly STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802;\n    readonly STENCIL_BACK_PASS_DEPTH_PASS: 0x8803;\n    readonly STENCIL_BACK_REF: 0x8CA3;\n    readonly STENCIL_BACK_VALUE_MASK: 0x8CA4;\n    readonly STENCIL_BACK_WRITEMASK: 0x8CA5;\n    readonly VIEWPORT: 0x0BA2;\n    readonly SCISSOR_BOX: 0x0C10;\n    readonly COLOR_CLEAR_VALUE: 0x0C22;\n    readonly COLOR_WRITEMASK: 0x0C23;\n    readonly UNPACK_ALIGNMENT: 0x0CF5;\n    readonly PACK_ALIGNMENT: 0x0D05;\n    readonly MAX_TEXTURE_SIZE: 0x0D33;\n    readonly MAX_VIEWPORT_DIMS: 0x0D3A;\n    readonly SUBPIXEL_BITS: 0x0D50;\n    readonly RED_BITS: 0x0D52;\n    readonly GREEN_BITS: 0x0D53;\n    readonly BLUE_BITS: 0x0D54;\n    readonly ALPHA_BITS: 0x0D55;\n    readonly DEPTH_BITS: 0x0D56;\n    readonly STENCIL_BITS: 0x0D57;\n    readonly POLYGON_OFFSET_UNITS: 0x2A00;\n    readonly POLYGON_OFFSET_FACTOR: 0x8038;\n    readonly TEXTURE_BINDING_2D: 0x8069;\n    readonly SAMPLE_BUFFERS: 0x80A8;\n    readonly SAMPLES: 0x80A9;\n    readonly SAMPLE_COVERAGE_VALUE: 0x80AA;\n    readonly SAMPLE_COVERAGE_INVERT: 0x80AB;\n    readonly COMPRESSED_TEXTURE_FORMATS: 0x86A3;\n    readonly DONT_CARE: 0x1100;\n    readonly FASTEST: 0x1101;\n    readonly NICEST: 0x1102;\n    readonly GENERATE_MIPMAP_HINT: 0x8192;\n    readonly BYTE: 0x1400;\n    readonly UNSIGNED_BYTE: 0x1401;\n    readonly SHORT: 0x1402;\n    readonly UNSIGNED_SHORT: 0x1403;\n    readonly INT: 0x1404;\n    readonly UNSIGNED_INT: 0x1405;\n    readonly FLOAT: 0x1406;\n    readonly DEPTH_COMPONENT: 0x1902;\n    readonly ALPHA: 0x1906;\n    readonly RGB: 0x1907;\n    readonly RGBA: 0x1908;\n    readonly LUMINANCE: 0x1909;\n    readonly LUMINANCE_ALPHA: 0x190A;\n    readonly UNSIGNED_SHORT_4_4_4_4: 0x8033;\n    readonly UNSIGNED_SHORT_5_5_5_1: 0x8034;\n    readonly UNSIGNED_SHORT_5_6_5: 0x8363;\n    readonly FRAGMENT_SHADER: 0x8B30;\n    readonly VERTEX_SHADER: 0x8B31;\n    readonly MAX_VERTEX_ATTRIBS: 0x8869;\n    readonly MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB;\n    readonly MAX_VARYING_VECTORS: 0x8DFC;\n    readonly MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D;\n    readonly MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C;\n    readonly MAX_TEXTURE_IMAGE_UNITS: 0x8872;\n    readonly MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD;\n    readonly SHADER_TYPE: 0x8B4F;\n    readonly DELETE_STATUS: 0x8B80;\n    readonly LINK_STATUS: 0x8B82;\n    readonly VALIDATE_STATUS: 0x8B83;\n    readonly ATTACHED_SHADERS: 0x8B85;\n    readonly ACTIVE_UNIFORMS: 0x8B86;\n    readonly ACTIVE_ATTRIBUTES: 0x8B89;\n    readonly SHADING_LANGUAGE_VERSION: 0x8B8C;\n    readonly CURRENT_PROGRAM: 0x8B8D;\n    readonly NEVER: 0x0200;\n    readonly LESS: 0x0201;\n    readonly EQUAL: 0x0202;\n    readonly LEQUAL: 0x0203;\n    readonly GREATER: 0x0204;\n    readonly NOTEQUAL: 0x0205;\n    readonly GEQUAL: 0x0206;\n    readonly ALWAYS: 0x0207;\n    readonly KEEP: 0x1E00;\n    readonly REPLACE: 0x1E01;\n    readonly INCR: 0x1E02;\n    readonly DECR: 0x1E03;\n    readonly INVERT: 0x150A;\n    readonly INCR_WRAP: 0x8507;\n    readonly DECR_WRAP: 0x8508;\n    readonly VENDOR: 0x1F00;\n    readonly RENDERER: 0x1F01;\n    readonly VERSION: 0x1F02;\n    readonly NEAREST: 0x2600;\n    readonly LINEAR: 0x2601;\n    readonly NEAREST_MIPMAP_NEAREST: 0x2700;\n    readonly LINEAR_MIPMAP_NEAREST: 0x2701;\n    readonly NEAREST_MIPMAP_LINEAR: 0x2702;\n    readonly LINEAR_MIPMAP_LINEAR: 0x2703;\n    readonly TEXTURE_MAG_FILTER: 0x2800;\n    readonly TEXTURE_MIN_FILTER: 0x2801;\n    readonly TEXTURE_WRAP_S: 0x2802;\n    readonly TEXTURE_WRAP_T: 0x2803;\n    readonly TEXTURE_2D: 0x0DE1;\n    readonly TEXTURE: 0x1702;\n    readonly TEXTURE_CUBE_MAP: 0x8513;\n    readonly TEXTURE_BINDING_CUBE_MAP: 0x8514;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A;\n    readonly MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C;\n    readonly TEXTURE0: 0x84C0;\n    readonly TEXTURE1: 0x84C1;\n    readonly TEXTURE2: 0x84C2;\n    readonly TEXTURE3: 0x84C3;\n    readonly TEXTURE4: 0x84C4;\n    readonly TEXTURE5: 0x84C5;\n    readonly TEXTURE6: 0x84C6;\n    readonly TEXTURE7: 0x84C7;\n    readonly TEXTURE8: 0x84C8;\n    readonly TEXTURE9: 0x84C9;\n    readonly TEXTURE10: 0x84CA;\n    readonly TEXTURE11: 0x84CB;\n    readonly TEXTURE12: 0x84CC;\n    readonly TEXTURE13: 0x84CD;\n    readonly TEXTURE14: 0x84CE;\n    readonly TEXTURE15: 0x84CF;\n    readonly TEXTURE16: 0x84D0;\n    readonly TEXTURE17: 0x84D1;\n    readonly TEXTURE18: 0x84D2;\n    readonly TEXTURE19: 0x84D3;\n    readonly TEXTURE20: 0x84D4;\n    readonly TEXTURE21: 0x84D5;\n    readonly TEXTURE22: 0x84D6;\n    readonly TEXTURE23: 0x84D7;\n    readonly TEXTURE24: 0x84D8;\n    readonly TEXTURE25: 0x84D9;\n    readonly TEXTURE26: 0x84DA;\n    readonly TEXTURE27: 0x84DB;\n    readonly TEXTURE28: 0x84DC;\n    readonly TEXTURE29: 0x84DD;\n    readonly TEXTURE30: 0x84DE;\n    readonly TEXTURE31: 0x84DF;\n    readonly ACTIVE_TEXTURE: 0x84E0;\n    readonly REPEAT: 0x2901;\n    readonly CLAMP_TO_EDGE: 0x812F;\n    readonly MIRRORED_REPEAT: 0x8370;\n    readonly FLOAT_VEC2: 0x8B50;\n    readonly FLOAT_VEC3: 0x8B51;\n    readonly FLOAT_VEC4: 0x8B52;\n    readonly INT_VEC2: 0x8B53;\n    readonly INT_VEC3: 0x8B54;\n    readonly INT_VEC4: 0x8B55;\n    readonly BOOL: 0x8B56;\n    readonly BOOL_VEC2: 0x8B57;\n    readonly BOOL_VEC3: 0x8B58;\n    readonly BOOL_VEC4: 0x8B59;\n    readonly FLOAT_MAT2: 0x8B5A;\n    readonly FLOAT_MAT3: 0x8B5B;\n    readonly FLOAT_MAT4: 0x8B5C;\n    readonly SAMPLER_2D: 0x8B5E;\n    readonly SAMPLER_CUBE: 0x8B60;\n    readonly VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622;\n    readonly VERTEX_ATTRIB_ARRAY_SIZE: 0x8623;\n    readonly VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624;\n    readonly VERTEX_ATTRIB_ARRAY_TYPE: 0x8625;\n    readonly VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A;\n    readonly VERTEX_ATTRIB_ARRAY_POINTER: 0x8645;\n    readonly VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F;\n    readonly IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A;\n    readonly IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B;\n    readonly COMPILE_STATUS: 0x8B81;\n    readonly LOW_FLOAT: 0x8DF0;\n    readonly MEDIUM_FLOAT: 0x8DF1;\n    readonly HIGH_FLOAT: 0x8DF2;\n    readonly LOW_INT: 0x8DF3;\n    readonly MEDIUM_INT: 0x8DF4;\n    readonly HIGH_INT: 0x8DF5;\n    readonly FRAMEBUFFER: 0x8D40;\n    readonly RENDERBUFFER: 0x8D41;\n    readonly RGBA4: 0x8056;\n    readonly RGB5_A1: 0x8057;\n    readonly RGB565: 0x8D62;\n    readonly DEPTH_COMPONENT16: 0x81A5;\n    readonly STENCIL_INDEX8: 0x8D48;\n    readonly DEPTH_STENCIL: 0x84F9;\n    readonly RENDERBUFFER_WIDTH: 0x8D42;\n    readonly RENDERBUFFER_HEIGHT: 0x8D43;\n    readonly RENDERBUFFER_INTERNAL_FORMAT: 0x8D44;\n    readonly RENDERBUFFER_RED_SIZE: 0x8D50;\n    readonly RENDERBUFFER_GREEN_SIZE: 0x8D51;\n    readonly RENDERBUFFER_BLUE_SIZE: 0x8D52;\n    readonly RENDERBUFFER_ALPHA_SIZE: 0x8D53;\n    readonly RENDERBUFFER_DEPTH_SIZE: 0x8D54;\n    readonly RENDERBUFFER_STENCIL_SIZE: 0x8D55;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3;\n    readonly COLOR_ATTACHMENT0: 0x8CE0;\n    readonly DEPTH_ATTACHMENT: 0x8D00;\n    readonly STENCIL_ATTACHMENT: 0x8D20;\n    readonly DEPTH_STENCIL_ATTACHMENT: 0x821A;\n    readonly NONE: 0;\n    readonly FRAMEBUFFER_COMPLETE: 0x8CD5;\n    readonly FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6;\n    readonly FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7;\n    readonly FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9;\n    readonly FRAMEBUFFER_UNSUPPORTED: 0x8CDD;\n    readonly FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly RENDERBUFFER_BINDING: 0x8CA7;\n    readonly MAX_RENDERBUFFER_SIZE: 0x84E8;\n    readonly INVALID_FRAMEBUFFER_OPERATION: 0x0506;\n    readonly UNPACK_FLIP_Y_WEBGL: 0x9240;\n    readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241;\n    readonly CONTEXT_LOST_WEBGL: 0x9242;\n    readonly UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243;\n    readonly BROWSER_DEFAULT_WEBGL: 0x9244;\n};\n\ninterface WebGL2RenderingContextBase {\n    beginQuery(target: GLenum, query: WebGLQuery): void;\n    beginTransformFeedback(primitiveMode: GLenum): void;\n    bindBufferBase(target: GLenum, index: GLuint, buffer: WebGLBuffer | null): void;\n    bindBufferRange(target: GLenum, index: GLuint, buffer: WebGLBuffer | null, offset: GLintptr, size: GLsizeiptr): void;\n    bindSampler(unit: GLuint, sampler: WebGLSampler | null): void;\n    bindTransformFeedback(target: GLenum, tf: WebGLTransformFeedback | null): void;\n    bindVertexArray(array: WebGLVertexArrayObject | null): void;\n    blitFramebuffer(srcX0: GLint, srcY0: GLint, srcX1: GLint, srcY1: GLint, dstX0: GLint, dstY0: GLint, dstX1: GLint, dstY1: GLint, mask: GLbitfield, filter: GLenum): void;\n    clearBufferfi(buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint): void;\n    clearBufferfv(buffer: GLenum, drawbuffer: GLint, values: Float32List, srcOffset?: GLuint): void;\n    clearBufferiv(buffer: GLenum, drawbuffer: GLint, values: Int32List, srcOffset?: GLuint): void;\n    clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Uint32List, srcOffset?: GLuint): void;\n    clientWaitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLuint64): GLenum;\n    compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, imageSize: GLsizei, offset: GLintptr): void;\n    compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, srcData: ArrayBufferView, srcOffset?: GLuint, srcLengthOverride?: GLuint): void;\n    compressedTexSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, imageSize: GLsizei, offset: GLintptr): void;\n    compressedTexSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, srcData: ArrayBufferView, srcOffset?: GLuint, srcLengthOverride?: GLuint): void;\n    copyBufferSubData(readTarget: GLenum, writeTarget: GLenum, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr): void;\n    copyTexSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    createQuery(): WebGLQuery | null;\n    createSampler(): WebGLSampler | null;\n    createTransformFeedback(): WebGLTransformFeedback | null;\n    createVertexArray(): WebGLVertexArrayObject | null;\n    deleteQuery(query: WebGLQuery | null): void;\n    deleteSampler(sampler: WebGLSampler | null): void;\n    deleteSync(sync: WebGLSync | null): void;\n    deleteTransformFeedback(tf: WebGLTransformFeedback | null): void;\n    deleteVertexArray(vertexArray: WebGLVertexArrayObject | null): void;\n    drawArraysInstanced(mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei): void;\n    drawBuffers(buffers: GLenum[]): void;\n    drawElementsInstanced(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, instanceCount: GLsizei): void;\n    drawRangeElements(mode: GLenum, start: GLuint, end: GLuint, count: GLsizei, type: GLenum, offset: GLintptr): void;\n    endQuery(target: GLenum): void;\n    endTransformFeedback(): void;\n    fenceSync(condition: GLenum, flags: GLbitfield): WebGLSync | null;\n    framebufferTextureLayer(target: GLenum, attachment: GLenum, texture: WebGLTexture | null, level: GLint, layer: GLint): void;\n    getActiveUniformBlockName(program: WebGLProgram, uniformBlockIndex: GLuint): string | null;\n    getActiveUniformBlockParameter(program: WebGLProgram, uniformBlockIndex: GLuint, pname: GLenum): any;\n    getActiveUniforms(program: WebGLProgram, uniformIndices: GLuint[], pname: GLenum): any;\n    getBufferSubData(target: GLenum, srcByteOffset: GLintptr, dstBuffer: ArrayBufferView, dstOffset?: GLuint, length?: GLuint): void;\n    getFragDataLocation(program: WebGLProgram, name: string): GLint;\n    getIndexedParameter(target: GLenum, index: GLuint): any;\n    getInternalformatParameter(target: GLenum, internalformat: GLenum, pname: GLenum): any;\n    getQuery(target: GLenum, pname: GLenum): WebGLQuery | null;\n    getQueryParameter(query: WebGLQuery, pname: GLenum): any;\n    getSamplerParameter(sampler: WebGLSampler, pname: GLenum): any;\n    getSyncParameter(sync: WebGLSync, pname: GLenum): any;\n    getTransformFeedbackVarying(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null;\n    getUniformBlockIndex(program: WebGLProgram, uniformBlockName: string): GLuint;\n    getUniformIndices(program: WebGLProgram, uniformNames: string[]): GLuint[] | null;\n    invalidateFramebuffer(target: GLenum, attachments: GLenum[]): void;\n    invalidateSubFramebuffer(target: GLenum, attachments: GLenum[], x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    isQuery(query: WebGLQuery | null): GLboolean;\n    isSampler(sampler: WebGLSampler | null): GLboolean;\n    isSync(sync: WebGLSync | null): GLboolean;\n    isTransformFeedback(tf: WebGLTransformFeedback | null): GLboolean;\n    isVertexArray(vertexArray: WebGLVertexArrayObject | null): GLboolean;\n    pauseTransformFeedback(): void;\n    readBuffer(src: GLenum): void;\n    renderbufferStorageMultisample(target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei): void;\n    resumeTransformFeedback(): void;\n    samplerParameterf(sampler: WebGLSampler, pname: GLenum, param: GLfloat): void;\n    samplerParameteri(sampler: WebGLSampler, pname: GLenum, param: GLint): void;\n    texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, pboOffset: GLintptr): void;\n    texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView | null): void;\n    texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: GLuint): void;\n    texStorage2D(target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei): void;\n    texStorage3D(target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei): void;\n    texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, pboOffset: GLintptr): void;\n    texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, srcData: ArrayBufferView | null, srcOffset?: GLuint): void;\n    transformFeedbackVaryings(program: WebGLProgram, varyings: string[], bufferMode: GLenum): void;\n    uniform1ui(location: WebGLUniformLocation | null, v0: GLuint): void;\n    uniform1uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint): void;\n    uniform2uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint, v2: GLuint): void;\n    uniform3uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint): void;\n    uniform4uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformBlockBinding(program: WebGLProgram, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint): void;\n    uniformMatrix2x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    vertexAttribDivisor(index: GLuint, divisor: GLuint): void;\n    vertexAttribI4i(index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint): void;\n    vertexAttribI4iv(index: GLuint, values: Int32List): void;\n    vertexAttribI4ui(index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint): void;\n    vertexAttribI4uiv(index: GLuint, values: Uint32List): void;\n    vertexAttribIPointer(index: GLuint, size: GLint, type: GLenum, stride: GLsizei, offset: GLintptr): void;\n    waitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLint64): void;\n    readonly READ_BUFFER: 0x0C02;\n    readonly UNPACK_ROW_LENGTH: 0x0CF2;\n    readonly UNPACK_SKIP_ROWS: 0x0CF3;\n    readonly UNPACK_SKIP_PIXELS: 0x0CF4;\n    readonly PACK_ROW_LENGTH: 0x0D02;\n    readonly PACK_SKIP_ROWS: 0x0D03;\n    readonly PACK_SKIP_PIXELS: 0x0D04;\n    readonly COLOR: 0x1800;\n    readonly DEPTH: 0x1801;\n    readonly STENCIL: 0x1802;\n    readonly RED: 0x1903;\n    readonly RGB8: 0x8051;\n    readonly RGBA8: 0x8058;\n    readonly RGB10_A2: 0x8059;\n    readonly TEXTURE_BINDING_3D: 0x806A;\n    readonly UNPACK_SKIP_IMAGES: 0x806D;\n    readonly UNPACK_IMAGE_HEIGHT: 0x806E;\n    readonly TEXTURE_3D: 0x806F;\n    readonly TEXTURE_WRAP_R: 0x8072;\n    readonly MAX_3D_TEXTURE_SIZE: 0x8073;\n    readonly UNSIGNED_INT_2_10_10_10_REV: 0x8368;\n    readonly MAX_ELEMENTS_VERTICES: 0x80E8;\n    readonly MAX_ELEMENTS_INDICES: 0x80E9;\n    readonly TEXTURE_MIN_LOD: 0x813A;\n    readonly TEXTURE_MAX_LOD: 0x813B;\n    readonly TEXTURE_BASE_LEVEL: 0x813C;\n    readonly TEXTURE_MAX_LEVEL: 0x813D;\n    readonly MIN: 0x8007;\n    readonly MAX: 0x8008;\n    readonly DEPTH_COMPONENT24: 0x81A6;\n    readonly MAX_TEXTURE_LOD_BIAS: 0x84FD;\n    readonly TEXTURE_COMPARE_MODE: 0x884C;\n    readonly TEXTURE_COMPARE_FUNC: 0x884D;\n    readonly CURRENT_QUERY: 0x8865;\n    readonly QUERY_RESULT: 0x8866;\n    readonly QUERY_RESULT_AVAILABLE: 0x8867;\n    readonly STREAM_READ: 0x88E1;\n    readonly STREAM_COPY: 0x88E2;\n    readonly STATIC_READ: 0x88E5;\n    readonly STATIC_COPY: 0x88E6;\n    readonly DYNAMIC_READ: 0x88E9;\n    readonly DYNAMIC_COPY: 0x88EA;\n    readonly MAX_DRAW_BUFFERS: 0x8824;\n    readonly DRAW_BUFFER0: 0x8825;\n    readonly DRAW_BUFFER1: 0x8826;\n    readonly DRAW_BUFFER2: 0x8827;\n    readonly DRAW_BUFFER3: 0x8828;\n    readonly DRAW_BUFFER4: 0x8829;\n    readonly DRAW_BUFFER5: 0x882A;\n    readonly DRAW_BUFFER6: 0x882B;\n    readonly DRAW_BUFFER7: 0x882C;\n    readonly DRAW_BUFFER8: 0x882D;\n    readonly DRAW_BUFFER9: 0x882E;\n    readonly DRAW_BUFFER10: 0x882F;\n    readonly DRAW_BUFFER11: 0x8830;\n    readonly DRAW_BUFFER12: 0x8831;\n    readonly DRAW_BUFFER13: 0x8832;\n    readonly DRAW_BUFFER14: 0x8833;\n    readonly DRAW_BUFFER15: 0x8834;\n    readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8B49;\n    readonly MAX_VERTEX_UNIFORM_COMPONENTS: 0x8B4A;\n    readonly SAMPLER_3D: 0x8B5F;\n    readonly SAMPLER_2D_SHADOW: 0x8B62;\n    readonly FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8B8B;\n    readonly PIXEL_PACK_BUFFER: 0x88EB;\n    readonly PIXEL_UNPACK_BUFFER: 0x88EC;\n    readonly PIXEL_PACK_BUFFER_BINDING: 0x88ED;\n    readonly PIXEL_UNPACK_BUFFER_BINDING: 0x88EF;\n    readonly FLOAT_MAT2x3: 0x8B65;\n    readonly FLOAT_MAT2x4: 0x8B66;\n    readonly FLOAT_MAT3x2: 0x8B67;\n    readonly FLOAT_MAT3x4: 0x8B68;\n    readonly FLOAT_MAT4x2: 0x8B69;\n    readonly FLOAT_MAT4x3: 0x8B6A;\n    readonly SRGB: 0x8C40;\n    readonly SRGB8: 0x8C41;\n    readonly SRGB8_ALPHA8: 0x8C43;\n    readonly COMPARE_REF_TO_TEXTURE: 0x884E;\n    readonly RGBA32F: 0x8814;\n    readonly RGB32F: 0x8815;\n    readonly RGBA16F: 0x881A;\n    readonly RGB16F: 0x881B;\n    readonly VERTEX_ATTRIB_ARRAY_INTEGER: 0x88FD;\n    readonly MAX_ARRAY_TEXTURE_LAYERS: 0x88FF;\n    readonly MIN_PROGRAM_TEXEL_OFFSET: 0x8904;\n    readonly MAX_PROGRAM_TEXEL_OFFSET: 0x8905;\n    readonly MAX_VARYING_COMPONENTS: 0x8B4B;\n    readonly TEXTURE_2D_ARRAY: 0x8C1A;\n    readonly TEXTURE_BINDING_2D_ARRAY: 0x8C1D;\n    readonly R11F_G11F_B10F: 0x8C3A;\n    readonly UNSIGNED_INT_10F_11F_11F_REV: 0x8C3B;\n    readonly RGB9_E5: 0x8C3D;\n    readonly UNSIGNED_INT_5_9_9_9_REV: 0x8C3E;\n    readonly TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8C7F;\n    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8C80;\n    readonly TRANSFORM_FEEDBACK_VARYINGS: 0x8C83;\n    readonly TRANSFORM_FEEDBACK_BUFFER_START: 0x8C84;\n    readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8C85;\n    readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8C88;\n    readonly RASTERIZER_DISCARD: 0x8C89;\n    readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8C8A;\n    readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8C8B;\n    readonly INTERLEAVED_ATTRIBS: 0x8C8C;\n    readonly SEPARATE_ATTRIBS: 0x8C8D;\n    readonly TRANSFORM_FEEDBACK_BUFFER: 0x8C8E;\n    readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8C8F;\n    readonly RGBA32UI: 0x8D70;\n    readonly RGB32UI: 0x8D71;\n    readonly RGBA16UI: 0x8D76;\n    readonly RGB16UI: 0x8D77;\n    readonly RGBA8UI: 0x8D7C;\n    readonly RGB8UI: 0x8D7D;\n    readonly RGBA32I: 0x8D82;\n    readonly RGB32I: 0x8D83;\n    readonly RGBA16I: 0x8D88;\n    readonly RGB16I: 0x8D89;\n    readonly RGBA8I: 0x8D8E;\n    readonly RGB8I: 0x8D8F;\n    readonly RED_INTEGER: 0x8D94;\n    readonly RGB_INTEGER: 0x8D98;\n    readonly RGBA_INTEGER: 0x8D99;\n    readonly SAMPLER_2D_ARRAY: 0x8DC1;\n    readonly SAMPLER_2D_ARRAY_SHADOW: 0x8DC4;\n    readonly SAMPLER_CUBE_SHADOW: 0x8DC5;\n    readonly UNSIGNED_INT_VEC2: 0x8DC6;\n    readonly UNSIGNED_INT_VEC3: 0x8DC7;\n    readonly UNSIGNED_INT_VEC4: 0x8DC8;\n    readonly INT_SAMPLER_2D: 0x8DCA;\n    readonly INT_SAMPLER_3D: 0x8DCB;\n    readonly INT_SAMPLER_CUBE: 0x8DCC;\n    readonly INT_SAMPLER_2D_ARRAY: 0x8DCF;\n    readonly UNSIGNED_INT_SAMPLER_2D: 0x8DD2;\n    readonly UNSIGNED_INT_SAMPLER_3D: 0x8DD3;\n    readonly UNSIGNED_INT_SAMPLER_CUBE: 0x8DD4;\n    readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8DD7;\n    readonly DEPTH_COMPONENT32F: 0x8CAC;\n    readonly DEPTH32F_STENCIL8: 0x8CAD;\n    readonly FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8DAD;\n    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210;\n    readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211;\n    readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212;\n    readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213;\n    readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214;\n    readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215;\n    readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216;\n    readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217;\n    readonly FRAMEBUFFER_DEFAULT: 0x8218;\n    readonly UNSIGNED_INT_24_8: 0x84FA;\n    readonly DEPTH24_STENCIL8: 0x88F0;\n    readonly UNSIGNED_NORMALIZED: 0x8C17;\n    readonly DRAW_FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly READ_FRAMEBUFFER: 0x8CA8;\n    readonly DRAW_FRAMEBUFFER: 0x8CA9;\n    readonly READ_FRAMEBUFFER_BINDING: 0x8CAA;\n    readonly RENDERBUFFER_SAMPLES: 0x8CAB;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8CD4;\n    readonly MAX_COLOR_ATTACHMENTS: 0x8CDF;\n    readonly COLOR_ATTACHMENT1: 0x8CE1;\n    readonly COLOR_ATTACHMENT2: 0x8CE2;\n    readonly COLOR_ATTACHMENT3: 0x8CE3;\n    readonly COLOR_ATTACHMENT4: 0x8CE4;\n    readonly COLOR_ATTACHMENT5: 0x8CE5;\n    readonly COLOR_ATTACHMENT6: 0x8CE6;\n    readonly COLOR_ATTACHMENT7: 0x8CE7;\n    readonly COLOR_ATTACHMENT8: 0x8CE8;\n    readonly COLOR_ATTACHMENT9: 0x8CE9;\n    readonly COLOR_ATTACHMENT10: 0x8CEA;\n    readonly COLOR_ATTACHMENT11: 0x8CEB;\n    readonly COLOR_ATTACHMENT12: 0x8CEC;\n    readonly COLOR_ATTACHMENT13: 0x8CED;\n    readonly COLOR_ATTACHMENT14: 0x8CEE;\n    readonly COLOR_ATTACHMENT15: 0x8CEF;\n    readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8D56;\n    readonly MAX_SAMPLES: 0x8D57;\n    readonly HALF_FLOAT: 0x140B;\n    readonly RG: 0x8227;\n    readonly RG_INTEGER: 0x8228;\n    readonly R8: 0x8229;\n    readonly RG8: 0x822B;\n    readonly R16F: 0x822D;\n    readonly R32F: 0x822E;\n    readonly RG16F: 0x822F;\n    readonly RG32F: 0x8230;\n    readonly R8I: 0x8231;\n    readonly R8UI: 0x8232;\n    readonly R16I: 0x8233;\n    readonly R16UI: 0x8234;\n    readonly R32I: 0x8235;\n    readonly R32UI: 0x8236;\n    readonly RG8I: 0x8237;\n    readonly RG8UI: 0x8238;\n    readonly RG16I: 0x8239;\n    readonly RG16UI: 0x823A;\n    readonly RG32I: 0x823B;\n    readonly RG32UI: 0x823C;\n    readonly VERTEX_ARRAY_BINDING: 0x85B5;\n    readonly R8_SNORM: 0x8F94;\n    readonly RG8_SNORM: 0x8F95;\n    readonly RGB8_SNORM: 0x8F96;\n    readonly RGBA8_SNORM: 0x8F97;\n    readonly SIGNED_NORMALIZED: 0x8F9C;\n    readonly COPY_READ_BUFFER: 0x8F36;\n    readonly COPY_WRITE_BUFFER: 0x8F37;\n    readonly COPY_READ_BUFFER_BINDING: 0x8F36;\n    readonly COPY_WRITE_BUFFER_BINDING: 0x8F37;\n    readonly UNIFORM_BUFFER: 0x8A11;\n    readonly UNIFORM_BUFFER_BINDING: 0x8A28;\n    readonly UNIFORM_BUFFER_START: 0x8A29;\n    readonly UNIFORM_BUFFER_SIZE: 0x8A2A;\n    readonly MAX_VERTEX_UNIFORM_BLOCKS: 0x8A2B;\n    readonly MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8A2D;\n    readonly MAX_COMBINED_UNIFORM_BLOCKS: 0x8A2E;\n    readonly MAX_UNIFORM_BUFFER_BINDINGS: 0x8A2F;\n    readonly MAX_UNIFORM_BLOCK_SIZE: 0x8A30;\n    readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8A31;\n    readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8A33;\n    readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8A34;\n    readonly ACTIVE_UNIFORM_BLOCKS: 0x8A36;\n    readonly UNIFORM_TYPE: 0x8A37;\n    readonly UNIFORM_SIZE: 0x8A38;\n    readonly UNIFORM_BLOCK_INDEX: 0x8A3A;\n    readonly UNIFORM_OFFSET: 0x8A3B;\n    readonly UNIFORM_ARRAY_STRIDE: 0x8A3C;\n    readonly UNIFORM_MATRIX_STRIDE: 0x8A3D;\n    readonly UNIFORM_IS_ROW_MAJOR: 0x8A3E;\n    readonly UNIFORM_BLOCK_BINDING: 0x8A3F;\n    readonly UNIFORM_BLOCK_DATA_SIZE: 0x8A40;\n    readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8A42;\n    readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8A43;\n    readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8A44;\n    readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8A46;\n    readonly INVALID_INDEX: 0xFFFFFFFF;\n    readonly MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122;\n    readonly MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125;\n    readonly MAX_SERVER_WAIT_TIMEOUT: 0x9111;\n    readonly OBJECT_TYPE: 0x9112;\n    readonly SYNC_CONDITION: 0x9113;\n    readonly SYNC_STATUS: 0x9114;\n    readonly SYNC_FLAGS: 0x9115;\n    readonly SYNC_FENCE: 0x9116;\n    readonly SYNC_GPU_COMMANDS_COMPLETE: 0x9117;\n    readonly UNSIGNALED: 0x9118;\n    readonly SIGNALED: 0x9119;\n    readonly ALREADY_SIGNALED: 0x911A;\n    readonly TIMEOUT_EXPIRED: 0x911B;\n    readonly CONDITION_SATISFIED: 0x911C;\n    readonly WAIT_FAILED: 0x911D;\n    readonly SYNC_FLUSH_COMMANDS_BIT: 0x00000001;\n    readonly VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88FE;\n    readonly ANY_SAMPLES_PASSED: 0x8C2F;\n    readonly ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8D6A;\n    readonly SAMPLER_BINDING: 0x8919;\n    readonly RGB10_A2UI: 0x906F;\n    readonly INT_2_10_10_10_REV: 0x8D9F;\n    readonly TRANSFORM_FEEDBACK: 0x8E22;\n    readonly TRANSFORM_FEEDBACK_PAUSED: 0x8E23;\n    readonly TRANSFORM_FEEDBACK_ACTIVE: 0x8E24;\n    readonly TRANSFORM_FEEDBACK_BINDING: 0x8E25;\n    readonly TEXTURE_IMMUTABLE_FORMAT: 0x912F;\n    readonly MAX_ELEMENT_INDEX: 0x8D6B;\n    readonly TEXTURE_IMMUTABLE_LEVELS: 0x82DF;\n    readonly TIMEOUT_IGNORED: -1;\n    readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247;\n}\n\ninterface WebGL2RenderingContextOverloads {\n    bufferData(target: GLenum, size: GLsizeiptr, usage: GLenum): void;\n    bufferData(target: GLenum, srcData: BufferSource | null, usage: GLenum): void;\n    bufferData(target: GLenum, srcData: ArrayBufferView, usage: GLenum, srcOffset: GLuint, length?: GLuint): void;\n    bufferSubData(target: GLenum, dstByteOffset: GLintptr, srcData: BufferSource): void;\n    bufferSubData(target: GLenum, dstByteOffset: GLintptr, srcData: ArrayBufferView, srcOffset: GLuint, length?: GLuint): void;\n    compressedTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, imageSize: GLsizei, offset: GLintptr): void;\n    compressedTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, srcData: ArrayBufferView, srcOffset?: GLuint, srcLengthOverride?: GLuint): void;\n    compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, imageSize: GLsizei, offset: GLintptr): void;\n    compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, srcData: ArrayBufferView, srcOffset?: GLuint, srcLengthOverride?: GLuint): void;\n    readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, dstData: ArrayBufferView | null): void;\n    readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, offset: GLintptr): void;\n    readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, dstData: ArrayBufferView, dstOffset: GLuint): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pboOffset: GLintptr): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: GLuint): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pboOffset: GLintptr): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: GLuint): void;\n    uniform1fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform1iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: GLuint, srcLength?: GLuint): void;\n}\n\n/** Part of the WebGL API and represents the information returned by calling the WebGLRenderingContext.getActiveAttrib() and WebGLRenderingContext.getActiveUniform() methods. */\ninterface WebGLActiveInfo {\n    readonly name: string;\n    readonly size: GLint;\n    readonly type: GLenum;\n}\n\ndeclare var WebGLActiveInfo: {\n    prototype: WebGLActiveInfo;\n    new(): WebGLActiveInfo;\n};\n\n/** Part of the WebGL API and represents an opaque buffer object storing data such as vertices or colors. */\ninterface WebGLBuffer {\n}\n\ndeclare var WebGLBuffer: {\n    prototype: WebGLBuffer;\n    new(): WebGLBuffer;\n};\n\n/** The WebContextEvent interface is part of the WebGL API and is an interface for an event that is generated in response to a status change to the WebGL rendering context. */\ninterface WebGLContextEvent extends Event {\n    readonly statusMessage: string;\n}\n\ndeclare var WebGLContextEvent: {\n    prototype: WebGLContextEvent;\n    new(type: string, eventInit?: WebGLContextEventInit): WebGLContextEvent;\n};\n\n/** Part of the WebGL API and represents a collection of buffers that serve as a rendering destination. */\ninterface WebGLFramebuffer {\n}\n\ndeclare var WebGLFramebuffer: {\n    prototype: WebGLFramebuffer;\n    new(): WebGLFramebuffer;\n};\n\n/** The WebGLProgram is part of the WebGL API and is a combination of two compiled WebGLShaders consisting of a vertex shader and a fragment shader (both written in GLSL). */\ninterface WebGLProgram {\n}\n\ndeclare var WebGLProgram: {\n    prototype: WebGLProgram;\n    new(): WebGLProgram;\n};\n\ninterface WebGLQuery {\n}\n\ndeclare var WebGLQuery: {\n    prototype: WebGLQuery;\n    new(): WebGLQuery;\n};\n\n/** Part of the WebGL API and represents a buffer that can contain an image, or can be source or target of an rendering operation. */\ninterface WebGLRenderbuffer {\n}\n\ndeclare var WebGLRenderbuffer: {\n    prototype: WebGLRenderbuffer;\n    new(): WebGLRenderbuffer;\n};\n\n/** Provides an interface to the OpenGL ES 2.0 graphics rendering context for the drawing surface of an HTML <canvas> element. */\ninterface WebGLRenderingContext extends WebGLRenderingContextBase, WebGLRenderingContextOverloads {\n}\n\ndeclare var WebGLRenderingContext: {\n    prototype: WebGLRenderingContext;\n    new(): WebGLRenderingContext;\n    readonly DEPTH_BUFFER_BIT: 0x00000100;\n    readonly STENCIL_BUFFER_BIT: 0x00000400;\n    readonly COLOR_BUFFER_BIT: 0x00004000;\n    readonly POINTS: 0x0000;\n    readonly LINES: 0x0001;\n    readonly LINE_LOOP: 0x0002;\n    readonly LINE_STRIP: 0x0003;\n    readonly TRIANGLES: 0x0004;\n    readonly TRIANGLE_STRIP: 0x0005;\n    readonly TRIANGLE_FAN: 0x0006;\n    readonly ZERO: 0;\n    readonly ONE: 1;\n    readonly SRC_COLOR: 0x0300;\n    readonly ONE_MINUS_SRC_COLOR: 0x0301;\n    readonly SRC_ALPHA: 0x0302;\n    readonly ONE_MINUS_SRC_ALPHA: 0x0303;\n    readonly DST_ALPHA: 0x0304;\n    readonly ONE_MINUS_DST_ALPHA: 0x0305;\n    readonly DST_COLOR: 0x0306;\n    readonly ONE_MINUS_DST_COLOR: 0x0307;\n    readonly SRC_ALPHA_SATURATE: 0x0308;\n    readonly FUNC_ADD: 0x8006;\n    readonly BLEND_EQUATION: 0x8009;\n    readonly BLEND_EQUATION_RGB: 0x8009;\n    readonly BLEND_EQUATION_ALPHA: 0x883D;\n    readonly FUNC_SUBTRACT: 0x800A;\n    readonly FUNC_REVERSE_SUBTRACT: 0x800B;\n    readonly BLEND_DST_RGB: 0x80C8;\n    readonly BLEND_SRC_RGB: 0x80C9;\n    readonly BLEND_DST_ALPHA: 0x80CA;\n    readonly BLEND_SRC_ALPHA: 0x80CB;\n    readonly CONSTANT_COLOR: 0x8001;\n    readonly ONE_MINUS_CONSTANT_COLOR: 0x8002;\n    readonly CONSTANT_ALPHA: 0x8003;\n    readonly ONE_MINUS_CONSTANT_ALPHA: 0x8004;\n    readonly BLEND_COLOR: 0x8005;\n    readonly ARRAY_BUFFER: 0x8892;\n    readonly ELEMENT_ARRAY_BUFFER: 0x8893;\n    readonly ARRAY_BUFFER_BINDING: 0x8894;\n    readonly ELEMENT_ARRAY_BUFFER_BINDING: 0x8895;\n    readonly STREAM_DRAW: 0x88E0;\n    readonly STATIC_DRAW: 0x88E4;\n    readonly DYNAMIC_DRAW: 0x88E8;\n    readonly BUFFER_SIZE: 0x8764;\n    readonly BUFFER_USAGE: 0x8765;\n    readonly CURRENT_VERTEX_ATTRIB: 0x8626;\n    readonly FRONT: 0x0404;\n    readonly BACK: 0x0405;\n    readonly FRONT_AND_BACK: 0x0408;\n    readonly CULL_FACE: 0x0B44;\n    readonly BLEND: 0x0BE2;\n    readonly DITHER: 0x0BD0;\n    readonly STENCIL_TEST: 0x0B90;\n    readonly DEPTH_TEST: 0x0B71;\n    readonly SCISSOR_TEST: 0x0C11;\n    readonly POLYGON_OFFSET_FILL: 0x8037;\n    readonly SAMPLE_ALPHA_TO_COVERAGE: 0x809E;\n    readonly SAMPLE_COVERAGE: 0x80A0;\n    readonly NO_ERROR: 0;\n    readonly INVALID_ENUM: 0x0500;\n    readonly INVALID_VALUE: 0x0501;\n    readonly INVALID_OPERATION: 0x0502;\n    readonly OUT_OF_MEMORY: 0x0505;\n    readonly CW: 0x0900;\n    readonly CCW: 0x0901;\n    readonly LINE_WIDTH: 0x0B21;\n    readonly ALIASED_POINT_SIZE_RANGE: 0x846D;\n    readonly ALIASED_LINE_WIDTH_RANGE: 0x846E;\n    readonly CULL_FACE_MODE: 0x0B45;\n    readonly FRONT_FACE: 0x0B46;\n    readonly DEPTH_RANGE: 0x0B70;\n    readonly DEPTH_WRITEMASK: 0x0B72;\n    readonly DEPTH_CLEAR_VALUE: 0x0B73;\n    readonly DEPTH_FUNC: 0x0B74;\n    readonly STENCIL_CLEAR_VALUE: 0x0B91;\n    readonly STENCIL_FUNC: 0x0B92;\n    readonly STENCIL_FAIL: 0x0B94;\n    readonly STENCIL_PASS_DEPTH_FAIL: 0x0B95;\n    readonly STENCIL_PASS_DEPTH_PASS: 0x0B96;\n    readonly STENCIL_REF: 0x0B97;\n    readonly STENCIL_VALUE_MASK: 0x0B93;\n    readonly STENCIL_WRITEMASK: 0x0B98;\n    readonly STENCIL_BACK_FUNC: 0x8800;\n    readonly STENCIL_BACK_FAIL: 0x8801;\n    readonly STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802;\n    readonly STENCIL_BACK_PASS_DEPTH_PASS: 0x8803;\n    readonly STENCIL_BACK_REF: 0x8CA3;\n    readonly STENCIL_BACK_VALUE_MASK: 0x8CA4;\n    readonly STENCIL_BACK_WRITEMASK: 0x8CA5;\n    readonly VIEWPORT: 0x0BA2;\n    readonly SCISSOR_BOX: 0x0C10;\n    readonly COLOR_CLEAR_VALUE: 0x0C22;\n    readonly COLOR_WRITEMASK: 0x0C23;\n    readonly UNPACK_ALIGNMENT: 0x0CF5;\n    readonly PACK_ALIGNMENT: 0x0D05;\n    readonly MAX_TEXTURE_SIZE: 0x0D33;\n    readonly MAX_VIEWPORT_DIMS: 0x0D3A;\n    readonly SUBPIXEL_BITS: 0x0D50;\n    readonly RED_BITS: 0x0D52;\n    readonly GREEN_BITS: 0x0D53;\n    readonly BLUE_BITS: 0x0D54;\n    readonly ALPHA_BITS: 0x0D55;\n    readonly DEPTH_BITS: 0x0D56;\n    readonly STENCIL_BITS: 0x0D57;\n    readonly POLYGON_OFFSET_UNITS: 0x2A00;\n    readonly POLYGON_OFFSET_FACTOR: 0x8038;\n    readonly TEXTURE_BINDING_2D: 0x8069;\n    readonly SAMPLE_BUFFERS: 0x80A8;\n    readonly SAMPLES: 0x80A9;\n    readonly SAMPLE_COVERAGE_VALUE: 0x80AA;\n    readonly SAMPLE_COVERAGE_INVERT: 0x80AB;\n    readonly COMPRESSED_TEXTURE_FORMATS: 0x86A3;\n    readonly DONT_CARE: 0x1100;\n    readonly FASTEST: 0x1101;\n    readonly NICEST: 0x1102;\n    readonly GENERATE_MIPMAP_HINT: 0x8192;\n    readonly BYTE: 0x1400;\n    readonly UNSIGNED_BYTE: 0x1401;\n    readonly SHORT: 0x1402;\n    readonly UNSIGNED_SHORT: 0x1403;\n    readonly INT: 0x1404;\n    readonly UNSIGNED_INT: 0x1405;\n    readonly FLOAT: 0x1406;\n    readonly DEPTH_COMPONENT: 0x1902;\n    readonly ALPHA: 0x1906;\n    readonly RGB: 0x1907;\n    readonly RGBA: 0x1908;\n    readonly LUMINANCE: 0x1909;\n    readonly LUMINANCE_ALPHA: 0x190A;\n    readonly UNSIGNED_SHORT_4_4_4_4: 0x8033;\n    readonly UNSIGNED_SHORT_5_5_5_1: 0x8034;\n    readonly UNSIGNED_SHORT_5_6_5: 0x8363;\n    readonly FRAGMENT_SHADER: 0x8B30;\n    readonly VERTEX_SHADER: 0x8B31;\n    readonly MAX_VERTEX_ATTRIBS: 0x8869;\n    readonly MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB;\n    readonly MAX_VARYING_VECTORS: 0x8DFC;\n    readonly MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D;\n    readonly MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C;\n    readonly MAX_TEXTURE_IMAGE_UNITS: 0x8872;\n    readonly MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD;\n    readonly SHADER_TYPE: 0x8B4F;\n    readonly DELETE_STATUS: 0x8B80;\n    readonly LINK_STATUS: 0x8B82;\n    readonly VALIDATE_STATUS: 0x8B83;\n    readonly ATTACHED_SHADERS: 0x8B85;\n    readonly ACTIVE_UNIFORMS: 0x8B86;\n    readonly ACTIVE_ATTRIBUTES: 0x8B89;\n    readonly SHADING_LANGUAGE_VERSION: 0x8B8C;\n    readonly CURRENT_PROGRAM: 0x8B8D;\n    readonly NEVER: 0x0200;\n    readonly LESS: 0x0201;\n    readonly EQUAL: 0x0202;\n    readonly LEQUAL: 0x0203;\n    readonly GREATER: 0x0204;\n    readonly NOTEQUAL: 0x0205;\n    readonly GEQUAL: 0x0206;\n    readonly ALWAYS: 0x0207;\n    readonly KEEP: 0x1E00;\n    readonly REPLACE: 0x1E01;\n    readonly INCR: 0x1E02;\n    readonly DECR: 0x1E03;\n    readonly INVERT: 0x150A;\n    readonly INCR_WRAP: 0x8507;\n    readonly DECR_WRAP: 0x8508;\n    readonly VENDOR: 0x1F00;\n    readonly RENDERER: 0x1F01;\n    readonly VERSION: 0x1F02;\n    readonly NEAREST: 0x2600;\n    readonly LINEAR: 0x2601;\n    readonly NEAREST_MIPMAP_NEAREST: 0x2700;\n    readonly LINEAR_MIPMAP_NEAREST: 0x2701;\n    readonly NEAREST_MIPMAP_LINEAR: 0x2702;\n    readonly LINEAR_MIPMAP_LINEAR: 0x2703;\n    readonly TEXTURE_MAG_FILTER: 0x2800;\n    readonly TEXTURE_MIN_FILTER: 0x2801;\n    readonly TEXTURE_WRAP_S: 0x2802;\n    readonly TEXTURE_WRAP_T: 0x2803;\n    readonly TEXTURE_2D: 0x0DE1;\n    readonly TEXTURE: 0x1702;\n    readonly TEXTURE_CUBE_MAP: 0x8513;\n    readonly TEXTURE_BINDING_CUBE_MAP: 0x8514;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A;\n    readonly MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C;\n    readonly TEXTURE0: 0x84C0;\n    readonly TEXTURE1: 0x84C1;\n    readonly TEXTURE2: 0x84C2;\n    readonly TEXTURE3: 0x84C3;\n    readonly TEXTURE4: 0x84C4;\n    readonly TEXTURE5: 0x84C5;\n    readonly TEXTURE6: 0x84C6;\n    readonly TEXTURE7: 0x84C7;\n    readonly TEXTURE8: 0x84C8;\n    readonly TEXTURE9: 0x84C9;\n    readonly TEXTURE10: 0x84CA;\n    readonly TEXTURE11: 0x84CB;\n    readonly TEXTURE12: 0x84CC;\n    readonly TEXTURE13: 0x84CD;\n    readonly TEXTURE14: 0x84CE;\n    readonly TEXTURE15: 0x84CF;\n    readonly TEXTURE16: 0x84D0;\n    readonly TEXTURE17: 0x84D1;\n    readonly TEXTURE18: 0x84D2;\n    readonly TEXTURE19: 0x84D3;\n    readonly TEXTURE20: 0x84D4;\n    readonly TEXTURE21: 0x84D5;\n    readonly TEXTURE22: 0x84D6;\n    readonly TEXTURE23: 0x84D7;\n    readonly TEXTURE24: 0x84D8;\n    readonly TEXTURE25: 0x84D9;\n    readonly TEXTURE26: 0x84DA;\n    readonly TEXTURE27: 0x84DB;\n    readonly TEXTURE28: 0x84DC;\n    readonly TEXTURE29: 0x84DD;\n    readonly TEXTURE30: 0x84DE;\n    readonly TEXTURE31: 0x84DF;\n    readonly ACTIVE_TEXTURE: 0x84E0;\n    readonly REPEAT: 0x2901;\n    readonly CLAMP_TO_EDGE: 0x812F;\n    readonly MIRRORED_REPEAT: 0x8370;\n    readonly FLOAT_VEC2: 0x8B50;\n    readonly FLOAT_VEC3: 0x8B51;\n    readonly FLOAT_VEC4: 0x8B52;\n    readonly INT_VEC2: 0x8B53;\n    readonly INT_VEC3: 0x8B54;\n    readonly INT_VEC4: 0x8B55;\n    readonly BOOL: 0x8B56;\n    readonly BOOL_VEC2: 0x8B57;\n    readonly BOOL_VEC3: 0x8B58;\n    readonly BOOL_VEC4: 0x8B59;\n    readonly FLOAT_MAT2: 0x8B5A;\n    readonly FLOAT_MAT3: 0x8B5B;\n    readonly FLOAT_MAT4: 0x8B5C;\n    readonly SAMPLER_2D: 0x8B5E;\n    readonly SAMPLER_CUBE: 0x8B60;\n    readonly VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622;\n    readonly VERTEX_ATTRIB_ARRAY_SIZE: 0x8623;\n    readonly VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624;\n    readonly VERTEX_ATTRIB_ARRAY_TYPE: 0x8625;\n    readonly VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A;\n    readonly VERTEX_ATTRIB_ARRAY_POINTER: 0x8645;\n    readonly VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F;\n    readonly IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A;\n    readonly IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B;\n    readonly COMPILE_STATUS: 0x8B81;\n    readonly LOW_FLOAT: 0x8DF0;\n    readonly MEDIUM_FLOAT: 0x8DF1;\n    readonly HIGH_FLOAT: 0x8DF2;\n    readonly LOW_INT: 0x8DF3;\n    readonly MEDIUM_INT: 0x8DF4;\n    readonly HIGH_INT: 0x8DF5;\n    readonly FRAMEBUFFER: 0x8D40;\n    readonly RENDERBUFFER: 0x8D41;\n    readonly RGBA4: 0x8056;\n    readonly RGB5_A1: 0x8057;\n    readonly RGB565: 0x8D62;\n    readonly DEPTH_COMPONENT16: 0x81A5;\n    readonly STENCIL_INDEX8: 0x8D48;\n    readonly DEPTH_STENCIL: 0x84F9;\n    readonly RENDERBUFFER_WIDTH: 0x8D42;\n    readonly RENDERBUFFER_HEIGHT: 0x8D43;\n    readonly RENDERBUFFER_INTERNAL_FORMAT: 0x8D44;\n    readonly RENDERBUFFER_RED_SIZE: 0x8D50;\n    readonly RENDERBUFFER_GREEN_SIZE: 0x8D51;\n    readonly RENDERBUFFER_BLUE_SIZE: 0x8D52;\n    readonly RENDERBUFFER_ALPHA_SIZE: 0x8D53;\n    readonly RENDERBUFFER_DEPTH_SIZE: 0x8D54;\n    readonly RENDERBUFFER_STENCIL_SIZE: 0x8D55;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3;\n    readonly COLOR_ATTACHMENT0: 0x8CE0;\n    readonly DEPTH_ATTACHMENT: 0x8D00;\n    readonly STENCIL_ATTACHMENT: 0x8D20;\n    readonly DEPTH_STENCIL_ATTACHMENT: 0x821A;\n    readonly NONE: 0;\n    readonly FRAMEBUFFER_COMPLETE: 0x8CD5;\n    readonly FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6;\n    readonly FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7;\n    readonly FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9;\n    readonly FRAMEBUFFER_UNSUPPORTED: 0x8CDD;\n    readonly FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly RENDERBUFFER_BINDING: 0x8CA7;\n    readonly MAX_RENDERBUFFER_SIZE: 0x84E8;\n    readonly INVALID_FRAMEBUFFER_OPERATION: 0x0506;\n    readonly UNPACK_FLIP_Y_WEBGL: 0x9240;\n    readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241;\n    readonly CONTEXT_LOST_WEBGL: 0x9242;\n    readonly UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243;\n    readonly BROWSER_DEFAULT_WEBGL: 0x9244;\n};\n\ninterface WebGLRenderingContextBase {\n    readonly drawingBufferHeight: GLsizei;\n    readonly drawingBufferWidth: GLsizei;\n    activeTexture(texture: GLenum): void;\n    attachShader(program: WebGLProgram, shader: WebGLShader): void;\n    bindAttribLocation(program: WebGLProgram, index: GLuint, name: string): void;\n    bindBuffer(target: GLenum, buffer: WebGLBuffer | null): void;\n    bindFramebuffer(target: GLenum, framebuffer: WebGLFramebuffer | null): void;\n    bindRenderbuffer(target: GLenum, renderbuffer: WebGLRenderbuffer | null): void;\n    bindTexture(target: GLenum, texture: WebGLTexture | null): void;\n    blendColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void;\n    blendEquation(mode: GLenum): void;\n    blendEquationSeparate(modeRGB: GLenum, modeAlpha: GLenum): void;\n    blendFunc(sfactor: GLenum, dfactor: GLenum): void;\n    blendFuncSeparate(srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void;\n    checkFramebufferStatus(target: GLenum): GLenum;\n    clear(mask: GLbitfield): void;\n    clearColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void;\n    clearDepth(depth: GLclampf): void;\n    clearStencil(s: GLint): void;\n    colorMask(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean): void;\n    compileShader(shader: WebGLShader): void;\n    copyTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei, border: GLint): void;\n    copyTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    createBuffer(): WebGLBuffer | null;\n    createFramebuffer(): WebGLFramebuffer | null;\n    createProgram(): WebGLProgram | null;\n    createRenderbuffer(): WebGLRenderbuffer | null;\n    createShader(type: GLenum): WebGLShader | null;\n    createTexture(): WebGLTexture | null;\n    cullFace(mode: GLenum): void;\n    deleteBuffer(buffer: WebGLBuffer | null): void;\n    deleteFramebuffer(framebuffer: WebGLFramebuffer | null): void;\n    deleteProgram(program: WebGLProgram | null): void;\n    deleteRenderbuffer(renderbuffer: WebGLRenderbuffer | null): void;\n    deleteShader(shader: WebGLShader | null): void;\n    deleteTexture(texture: WebGLTexture | null): void;\n    depthFunc(func: GLenum): void;\n    depthMask(flag: GLboolean): void;\n    depthRange(zNear: GLclampf, zFar: GLclampf): void;\n    detachShader(program: WebGLProgram, shader: WebGLShader): void;\n    disable(cap: GLenum): void;\n    disableVertexAttribArray(index: GLuint): void;\n    drawArrays(mode: GLenum, first: GLint, count: GLsizei): void;\n    drawElements(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr): void;\n    enable(cap: GLenum): void;\n    enableVertexAttribArray(index: GLuint): void;\n    finish(): void;\n    flush(): void;\n    framebufferRenderbuffer(target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: WebGLRenderbuffer | null): void;\n    framebufferTexture2D(target: GLenum, attachment: GLenum, textarget: GLenum, texture: WebGLTexture | null, level: GLint): void;\n    frontFace(mode: GLenum): void;\n    generateMipmap(target: GLenum): void;\n    getActiveAttrib(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null;\n    getActiveUniform(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null;\n    getAttachedShaders(program: WebGLProgram): WebGLShader[] | null;\n    getAttribLocation(program: WebGLProgram, name: string): GLint;\n    getBufferParameter(target: GLenum, pname: GLenum): any;\n    getContextAttributes(): WebGLContextAttributes | null;\n    getError(): GLenum;\n    getExtension(extensionName: \"ANGLE_instanced_arrays\"): ANGLE_instanced_arrays | null;\n    getExtension(extensionName: \"EXT_blend_minmax\"): EXT_blend_minmax | null;\n    getExtension(extensionName: \"EXT_color_buffer_float\"): EXT_color_buffer_float | null;\n    getExtension(extensionName: \"EXT_color_buffer_half_float\"): EXT_color_buffer_half_float | null;\n    getExtension(extensionName: \"EXT_float_blend\"): EXT_float_blend | null;\n    getExtension(extensionName: \"EXT_frag_depth\"): EXT_frag_depth | null;\n    getExtension(extensionName: \"EXT_sRGB\"): EXT_sRGB | null;\n    getExtension(extensionName: \"EXT_shader_texture_lod\"): EXT_shader_texture_lod | null;\n    getExtension(extensionName: \"EXT_texture_compression_bptc\"): EXT_texture_compression_bptc | null;\n    getExtension(extensionName: \"EXT_texture_compression_rgtc\"): EXT_texture_compression_rgtc | null;\n    getExtension(extensionName: \"EXT_texture_filter_anisotropic\"): EXT_texture_filter_anisotropic | null;\n    getExtension(extensionName: \"KHR_parallel_shader_compile\"): KHR_parallel_shader_compile | null;\n    getExtension(extensionName: \"OES_element_index_uint\"): OES_element_index_uint | null;\n    getExtension(extensionName: \"OES_fbo_render_mipmap\"): OES_fbo_render_mipmap | null;\n    getExtension(extensionName: \"OES_standard_derivatives\"): OES_standard_derivatives | null;\n    getExtension(extensionName: \"OES_texture_float\"): OES_texture_float | null;\n    getExtension(extensionName: \"OES_texture_float_linear\"): OES_texture_float_linear | null;\n    getExtension(extensionName: \"OES_texture_half_float\"): OES_texture_half_float | null;\n    getExtension(extensionName: \"OES_texture_half_float_linear\"): OES_texture_half_float_linear | null;\n    getExtension(extensionName: \"OES_vertex_array_object\"): OES_vertex_array_object | null;\n    getExtension(extensionName: \"OVR_multiview2\"): OVR_multiview2 | null;\n    getExtension(extensionName: \"WEBGL_color_buffer_float\"): WEBGL_color_buffer_float | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_astc\"): WEBGL_compressed_texture_astc | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_etc\"): WEBGL_compressed_texture_etc | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_etc1\"): WEBGL_compressed_texture_etc1 | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_s3tc\"): WEBGL_compressed_texture_s3tc | null;\n    getExtension(extensionName: \"WEBGL_compressed_texture_s3tc_srgb\"): WEBGL_compressed_texture_s3tc_srgb | null;\n    getExtension(extensionName: \"WEBGL_debug_renderer_info\"): WEBGL_debug_renderer_info | null;\n    getExtension(extensionName: \"WEBGL_debug_shaders\"): WEBGL_debug_shaders | null;\n    getExtension(extensionName: \"WEBGL_depth_texture\"): WEBGL_depth_texture | null;\n    getExtension(extensionName: \"WEBGL_draw_buffers\"): WEBGL_draw_buffers | null;\n    getExtension(extensionName: \"WEBGL_lose_context\"): WEBGL_lose_context | null;\n    getExtension(extensionName: \"WEBGL_multi_draw\"): WEBGL_multi_draw | null;\n    getExtension(name: string): any;\n    getFramebufferAttachmentParameter(target: GLenum, attachment: GLenum, pname: GLenum): any;\n    getParameter(pname: GLenum): any;\n    getProgramInfoLog(program: WebGLProgram): string | null;\n    getProgramParameter(program: WebGLProgram, pname: GLenum): any;\n    getRenderbufferParameter(target: GLenum, pname: GLenum): any;\n    getShaderInfoLog(shader: WebGLShader): string | null;\n    getShaderParameter(shader: WebGLShader, pname: GLenum): any;\n    getShaderPrecisionFormat(shadertype: GLenum, precisiontype: GLenum): WebGLShaderPrecisionFormat | null;\n    getShaderSource(shader: WebGLShader): string | null;\n    getSupportedExtensions(): string[] | null;\n    getTexParameter(target: GLenum, pname: GLenum): any;\n    getUniform(program: WebGLProgram, location: WebGLUniformLocation): any;\n    getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation | null;\n    getVertexAttrib(index: GLuint, pname: GLenum): any;\n    getVertexAttribOffset(index: GLuint, pname: GLenum): GLintptr;\n    hint(target: GLenum, mode: GLenum): void;\n    isBuffer(buffer: WebGLBuffer | null): GLboolean;\n    isContextLost(): boolean;\n    isEnabled(cap: GLenum): GLboolean;\n    isFramebuffer(framebuffer: WebGLFramebuffer | null): GLboolean;\n    isProgram(program: WebGLProgram | null): GLboolean;\n    isRenderbuffer(renderbuffer: WebGLRenderbuffer | null): GLboolean;\n    isShader(shader: WebGLShader | null): GLboolean;\n    isTexture(texture: WebGLTexture | null): GLboolean;\n    lineWidth(width: GLfloat): void;\n    linkProgram(program: WebGLProgram): void;\n    pixelStorei(pname: GLenum, param: GLint | GLboolean): void;\n    polygonOffset(factor: GLfloat, units: GLfloat): void;\n    renderbufferStorage(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei): void;\n    sampleCoverage(value: GLclampf, invert: GLboolean): void;\n    scissor(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    shaderSource(shader: WebGLShader, source: string): void;\n    stencilFunc(func: GLenum, ref: GLint, mask: GLuint): void;\n    stencilFuncSeparate(face: GLenum, func: GLenum, ref: GLint, mask: GLuint): void;\n    stencilMask(mask: GLuint): void;\n    stencilMaskSeparate(face: GLenum, mask: GLuint): void;\n    stencilOp(fail: GLenum, zfail: GLenum, zpass: GLenum): void;\n    stencilOpSeparate(face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum): void;\n    texParameterf(target: GLenum, pname: GLenum, param: GLfloat): void;\n    texParameteri(target: GLenum, pname: GLenum, param: GLint): void;\n    uniform1f(location: WebGLUniformLocation | null, x: GLfloat): void;\n    uniform1i(location: WebGLUniformLocation | null, x: GLint): void;\n    uniform2f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat): void;\n    uniform2i(location: WebGLUniformLocation | null, x: GLint, y: GLint): void;\n    uniform3f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat): void;\n    uniform3i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint): void;\n    uniform4f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void;\n    uniform4i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint, w: GLint): void;\n    useProgram(program: WebGLProgram | null): void;\n    validateProgram(program: WebGLProgram): void;\n    vertexAttrib1f(index: GLuint, x: GLfloat): void;\n    vertexAttrib1fv(index: GLuint, values: Float32List): void;\n    vertexAttrib2f(index: GLuint, x: GLfloat, y: GLfloat): void;\n    vertexAttrib2fv(index: GLuint, values: Float32List): void;\n    vertexAttrib3f(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat): void;\n    vertexAttrib3fv(index: GLuint, values: Float32List): void;\n    vertexAttrib4f(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void;\n    vertexAttrib4fv(index: GLuint, values: Float32List): void;\n    vertexAttribPointer(index: GLuint, size: GLint, type: GLenum, normalized: GLboolean, stride: GLsizei, offset: GLintptr): void;\n    viewport(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    readonly DEPTH_BUFFER_BIT: 0x00000100;\n    readonly STENCIL_BUFFER_BIT: 0x00000400;\n    readonly COLOR_BUFFER_BIT: 0x00004000;\n    readonly POINTS: 0x0000;\n    readonly LINES: 0x0001;\n    readonly LINE_LOOP: 0x0002;\n    readonly LINE_STRIP: 0x0003;\n    readonly TRIANGLES: 0x0004;\n    readonly TRIANGLE_STRIP: 0x0005;\n    readonly TRIANGLE_FAN: 0x0006;\n    readonly ZERO: 0;\n    readonly ONE: 1;\n    readonly SRC_COLOR: 0x0300;\n    readonly ONE_MINUS_SRC_COLOR: 0x0301;\n    readonly SRC_ALPHA: 0x0302;\n    readonly ONE_MINUS_SRC_ALPHA: 0x0303;\n    readonly DST_ALPHA: 0x0304;\n    readonly ONE_MINUS_DST_ALPHA: 0x0305;\n    readonly DST_COLOR: 0x0306;\n    readonly ONE_MINUS_DST_COLOR: 0x0307;\n    readonly SRC_ALPHA_SATURATE: 0x0308;\n    readonly FUNC_ADD: 0x8006;\n    readonly BLEND_EQUATION: 0x8009;\n    readonly BLEND_EQUATION_RGB: 0x8009;\n    readonly BLEND_EQUATION_ALPHA: 0x883D;\n    readonly FUNC_SUBTRACT: 0x800A;\n    readonly FUNC_REVERSE_SUBTRACT: 0x800B;\n    readonly BLEND_DST_RGB: 0x80C8;\n    readonly BLEND_SRC_RGB: 0x80C9;\n    readonly BLEND_DST_ALPHA: 0x80CA;\n    readonly BLEND_SRC_ALPHA: 0x80CB;\n    readonly CONSTANT_COLOR: 0x8001;\n    readonly ONE_MINUS_CONSTANT_COLOR: 0x8002;\n    readonly CONSTANT_ALPHA: 0x8003;\n    readonly ONE_MINUS_CONSTANT_ALPHA: 0x8004;\n    readonly BLEND_COLOR: 0x8005;\n    readonly ARRAY_BUFFER: 0x8892;\n    readonly ELEMENT_ARRAY_BUFFER: 0x8893;\n    readonly ARRAY_BUFFER_BINDING: 0x8894;\n    readonly ELEMENT_ARRAY_BUFFER_BINDING: 0x8895;\n    readonly STREAM_DRAW: 0x88E0;\n    readonly STATIC_DRAW: 0x88E4;\n    readonly DYNAMIC_DRAW: 0x88E8;\n    readonly BUFFER_SIZE: 0x8764;\n    readonly BUFFER_USAGE: 0x8765;\n    readonly CURRENT_VERTEX_ATTRIB: 0x8626;\n    readonly FRONT: 0x0404;\n    readonly BACK: 0x0405;\n    readonly FRONT_AND_BACK: 0x0408;\n    readonly CULL_FACE: 0x0B44;\n    readonly BLEND: 0x0BE2;\n    readonly DITHER: 0x0BD0;\n    readonly STENCIL_TEST: 0x0B90;\n    readonly DEPTH_TEST: 0x0B71;\n    readonly SCISSOR_TEST: 0x0C11;\n    readonly POLYGON_OFFSET_FILL: 0x8037;\n    readonly SAMPLE_ALPHA_TO_COVERAGE: 0x809E;\n    readonly SAMPLE_COVERAGE: 0x80A0;\n    readonly NO_ERROR: 0;\n    readonly INVALID_ENUM: 0x0500;\n    readonly INVALID_VALUE: 0x0501;\n    readonly INVALID_OPERATION: 0x0502;\n    readonly OUT_OF_MEMORY: 0x0505;\n    readonly CW: 0x0900;\n    readonly CCW: 0x0901;\n    readonly LINE_WIDTH: 0x0B21;\n    readonly ALIASED_POINT_SIZE_RANGE: 0x846D;\n    readonly ALIASED_LINE_WIDTH_RANGE: 0x846E;\n    readonly CULL_FACE_MODE: 0x0B45;\n    readonly FRONT_FACE: 0x0B46;\n    readonly DEPTH_RANGE: 0x0B70;\n    readonly DEPTH_WRITEMASK: 0x0B72;\n    readonly DEPTH_CLEAR_VALUE: 0x0B73;\n    readonly DEPTH_FUNC: 0x0B74;\n    readonly STENCIL_CLEAR_VALUE: 0x0B91;\n    readonly STENCIL_FUNC: 0x0B92;\n    readonly STENCIL_FAIL: 0x0B94;\n    readonly STENCIL_PASS_DEPTH_FAIL: 0x0B95;\n    readonly STENCIL_PASS_DEPTH_PASS: 0x0B96;\n    readonly STENCIL_REF: 0x0B97;\n    readonly STENCIL_VALUE_MASK: 0x0B93;\n    readonly STENCIL_WRITEMASK: 0x0B98;\n    readonly STENCIL_BACK_FUNC: 0x8800;\n    readonly STENCIL_BACK_FAIL: 0x8801;\n    readonly STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802;\n    readonly STENCIL_BACK_PASS_DEPTH_PASS: 0x8803;\n    readonly STENCIL_BACK_REF: 0x8CA3;\n    readonly STENCIL_BACK_VALUE_MASK: 0x8CA4;\n    readonly STENCIL_BACK_WRITEMASK: 0x8CA5;\n    readonly VIEWPORT: 0x0BA2;\n    readonly SCISSOR_BOX: 0x0C10;\n    readonly COLOR_CLEAR_VALUE: 0x0C22;\n    readonly COLOR_WRITEMASK: 0x0C23;\n    readonly UNPACK_ALIGNMENT: 0x0CF5;\n    readonly PACK_ALIGNMENT: 0x0D05;\n    readonly MAX_TEXTURE_SIZE: 0x0D33;\n    readonly MAX_VIEWPORT_DIMS: 0x0D3A;\n    readonly SUBPIXEL_BITS: 0x0D50;\n    readonly RED_BITS: 0x0D52;\n    readonly GREEN_BITS: 0x0D53;\n    readonly BLUE_BITS: 0x0D54;\n    readonly ALPHA_BITS: 0x0D55;\n    readonly DEPTH_BITS: 0x0D56;\n    readonly STENCIL_BITS: 0x0D57;\n    readonly POLYGON_OFFSET_UNITS: 0x2A00;\n    readonly POLYGON_OFFSET_FACTOR: 0x8038;\n    readonly TEXTURE_BINDING_2D: 0x8069;\n    readonly SAMPLE_BUFFERS: 0x80A8;\n    readonly SAMPLES: 0x80A9;\n    readonly SAMPLE_COVERAGE_VALUE: 0x80AA;\n    readonly SAMPLE_COVERAGE_INVERT: 0x80AB;\n    readonly COMPRESSED_TEXTURE_FORMATS: 0x86A3;\n    readonly DONT_CARE: 0x1100;\n    readonly FASTEST: 0x1101;\n    readonly NICEST: 0x1102;\n    readonly GENERATE_MIPMAP_HINT: 0x8192;\n    readonly BYTE: 0x1400;\n    readonly UNSIGNED_BYTE: 0x1401;\n    readonly SHORT: 0x1402;\n    readonly UNSIGNED_SHORT: 0x1403;\n    readonly INT: 0x1404;\n    readonly UNSIGNED_INT: 0x1405;\n    readonly FLOAT: 0x1406;\n    readonly DEPTH_COMPONENT: 0x1902;\n    readonly ALPHA: 0x1906;\n    readonly RGB: 0x1907;\n    readonly RGBA: 0x1908;\n    readonly LUMINANCE: 0x1909;\n    readonly LUMINANCE_ALPHA: 0x190A;\n    readonly UNSIGNED_SHORT_4_4_4_4: 0x8033;\n    readonly UNSIGNED_SHORT_5_5_5_1: 0x8034;\n    readonly UNSIGNED_SHORT_5_6_5: 0x8363;\n    readonly FRAGMENT_SHADER: 0x8B30;\n    readonly VERTEX_SHADER: 0x8B31;\n    readonly MAX_VERTEX_ATTRIBS: 0x8869;\n    readonly MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB;\n    readonly MAX_VARYING_VECTORS: 0x8DFC;\n    readonly MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D;\n    readonly MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C;\n    readonly MAX_TEXTURE_IMAGE_UNITS: 0x8872;\n    readonly MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD;\n    readonly SHADER_TYPE: 0x8B4F;\n    readonly DELETE_STATUS: 0x8B80;\n    readonly LINK_STATUS: 0x8B82;\n    readonly VALIDATE_STATUS: 0x8B83;\n    readonly ATTACHED_SHADERS: 0x8B85;\n    readonly ACTIVE_UNIFORMS: 0x8B86;\n    readonly ACTIVE_ATTRIBUTES: 0x8B89;\n    readonly SHADING_LANGUAGE_VERSION: 0x8B8C;\n    readonly CURRENT_PROGRAM: 0x8B8D;\n    readonly NEVER: 0x0200;\n    readonly LESS: 0x0201;\n    readonly EQUAL: 0x0202;\n    readonly LEQUAL: 0x0203;\n    readonly GREATER: 0x0204;\n    readonly NOTEQUAL: 0x0205;\n    readonly GEQUAL: 0x0206;\n    readonly ALWAYS: 0x0207;\n    readonly KEEP: 0x1E00;\n    readonly REPLACE: 0x1E01;\n    readonly INCR: 0x1E02;\n    readonly DECR: 0x1E03;\n    readonly INVERT: 0x150A;\n    readonly INCR_WRAP: 0x8507;\n    readonly DECR_WRAP: 0x8508;\n    readonly VENDOR: 0x1F00;\n    readonly RENDERER: 0x1F01;\n    readonly VERSION: 0x1F02;\n    readonly NEAREST: 0x2600;\n    readonly LINEAR: 0x2601;\n    readonly NEAREST_MIPMAP_NEAREST: 0x2700;\n    readonly LINEAR_MIPMAP_NEAREST: 0x2701;\n    readonly NEAREST_MIPMAP_LINEAR: 0x2702;\n    readonly LINEAR_MIPMAP_LINEAR: 0x2703;\n    readonly TEXTURE_MAG_FILTER: 0x2800;\n    readonly TEXTURE_MIN_FILTER: 0x2801;\n    readonly TEXTURE_WRAP_S: 0x2802;\n    readonly TEXTURE_WRAP_T: 0x2803;\n    readonly TEXTURE_2D: 0x0DE1;\n    readonly TEXTURE: 0x1702;\n    readonly TEXTURE_CUBE_MAP: 0x8513;\n    readonly TEXTURE_BINDING_CUBE_MAP: 0x8514;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518;\n    readonly TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519;\n    readonly TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A;\n    readonly MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C;\n    readonly TEXTURE0: 0x84C0;\n    readonly TEXTURE1: 0x84C1;\n    readonly TEXTURE2: 0x84C2;\n    readonly TEXTURE3: 0x84C3;\n    readonly TEXTURE4: 0x84C4;\n    readonly TEXTURE5: 0x84C5;\n    readonly TEXTURE6: 0x84C6;\n    readonly TEXTURE7: 0x84C7;\n    readonly TEXTURE8: 0x84C8;\n    readonly TEXTURE9: 0x84C9;\n    readonly TEXTURE10: 0x84CA;\n    readonly TEXTURE11: 0x84CB;\n    readonly TEXTURE12: 0x84CC;\n    readonly TEXTURE13: 0x84CD;\n    readonly TEXTURE14: 0x84CE;\n    readonly TEXTURE15: 0x84CF;\n    readonly TEXTURE16: 0x84D0;\n    readonly TEXTURE17: 0x84D1;\n    readonly TEXTURE18: 0x84D2;\n    readonly TEXTURE19: 0x84D3;\n    readonly TEXTURE20: 0x84D4;\n    readonly TEXTURE21: 0x84D5;\n    readonly TEXTURE22: 0x84D6;\n    readonly TEXTURE23: 0x84D7;\n    readonly TEXTURE24: 0x84D8;\n    readonly TEXTURE25: 0x84D9;\n    readonly TEXTURE26: 0x84DA;\n    readonly TEXTURE27: 0x84DB;\n    readonly TEXTURE28: 0x84DC;\n    readonly TEXTURE29: 0x84DD;\n    readonly TEXTURE30: 0x84DE;\n    readonly TEXTURE31: 0x84DF;\n    readonly ACTIVE_TEXTURE: 0x84E0;\n    readonly REPEAT: 0x2901;\n    readonly CLAMP_TO_EDGE: 0x812F;\n    readonly MIRRORED_REPEAT: 0x8370;\n    readonly FLOAT_VEC2: 0x8B50;\n    readonly FLOAT_VEC3: 0x8B51;\n    readonly FLOAT_VEC4: 0x8B52;\n    readonly INT_VEC2: 0x8B53;\n    readonly INT_VEC3: 0x8B54;\n    readonly INT_VEC4: 0x8B55;\n    readonly BOOL: 0x8B56;\n    readonly BOOL_VEC2: 0x8B57;\n    readonly BOOL_VEC3: 0x8B58;\n    readonly BOOL_VEC4: 0x8B59;\n    readonly FLOAT_MAT2: 0x8B5A;\n    readonly FLOAT_MAT3: 0x8B5B;\n    readonly FLOAT_MAT4: 0x8B5C;\n    readonly SAMPLER_2D: 0x8B5E;\n    readonly SAMPLER_CUBE: 0x8B60;\n    readonly VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622;\n    readonly VERTEX_ATTRIB_ARRAY_SIZE: 0x8623;\n    readonly VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624;\n    readonly VERTEX_ATTRIB_ARRAY_TYPE: 0x8625;\n    readonly VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A;\n    readonly VERTEX_ATTRIB_ARRAY_POINTER: 0x8645;\n    readonly VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F;\n    readonly IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A;\n    readonly IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B;\n    readonly COMPILE_STATUS: 0x8B81;\n    readonly LOW_FLOAT: 0x8DF0;\n    readonly MEDIUM_FLOAT: 0x8DF1;\n    readonly HIGH_FLOAT: 0x8DF2;\n    readonly LOW_INT: 0x8DF3;\n    readonly MEDIUM_INT: 0x8DF4;\n    readonly HIGH_INT: 0x8DF5;\n    readonly FRAMEBUFFER: 0x8D40;\n    readonly RENDERBUFFER: 0x8D41;\n    readonly RGBA4: 0x8056;\n    readonly RGB5_A1: 0x8057;\n    readonly RGB565: 0x8D62;\n    readonly DEPTH_COMPONENT16: 0x81A5;\n    readonly STENCIL_INDEX8: 0x8D48;\n    readonly DEPTH_STENCIL: 0x84F9;\n    readonly RENDERBUFFER_WIDTH: 0x8D42;\n    readonly RENDERBUFFER_HEIGHT: 0x8D43;\n    readonly RENDERBUFFER_INTERNAL_FORMAT: 0x8D44;\n    readonly RENDERBUFFER_RED_SIZE: 0x8D50;\n    readonly RENDERBUFFER_GREEN_SIZE: 0x8D51;\n    readonly RENDERBUFFER_BLUE_SIZE: 0x8D52;\n    readonly RENDERBUFFER_ALPHA_SIZE: 0x8D53;\n    readonly RENDERBUFFER_DEPTH_SIZE: 0x8D54;\n    readonly RENDERBUFFER_STENCIL_SIZE: 0x8D55;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0;\n    readonly FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2;\n    readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3;\n    readonly COLOR_ATTACHMENT0: 0x8CE0;\n    readonly DEPTH_ATTACHMENT: 0x8D00;\n    readonly STENCIL_ATTACHMENT: 0x8D20;\n    readonly DEPTH_STENCIL_ATTACHMENT: 0x821A;\n    readonly NONE: 0;\n    readonly FRAMEBUFFER_COMPLETE: 0x8CD5;\n    readonly FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6;\n    readonly FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7;\n    readonly FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9;\n    readonly FRAMEBUFFER_UNSUPPORTED: 0x8CDD;\n    readonly FRAMEBUFFER_BINDING: 0x8CA6;\n    readonly RENDERBUFFER_BINDING: 0x8CA7;\n    readonly MAX_RENDERBUFFER_SIZE: 0x84E8;\n    readonly INVALID_FRAMEBUFFER_OPERATION: 0x0506;\n    readonly UNPACK_FLIP_Y_WEBGL: 0x9240;\n    readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241;\n    readonly CONTEXT_LOST_WEBGL: 0x9242;\n    readonly UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243;\n    readonly BROWSER_DEFAULT_WEBGL: 0x9244;\n}\n\ninterface WebGLRenderingContextOverloads {\n    bufferData(target: GLenum, size: GLsizeiptr, usage: GLenum): void;\n    bufferData(target: GLenum, data: BufferSource | null, usage: GLenum): void;\n    bufferSubData(target: GLenum, offset: GLintptr, data: BufferSource): void;\n    compressedTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, data: ArrayBufferView): void;\n    compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, data: ArrayBufferView): void;\n    readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texImage2D(target: GLenum, level: GLint, internalformat: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;\n    texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, format: GLenum, type: GLenum, source: TexImageSource): void;\n    uniform1fv(location: WebGLUniformLocation | null, v: Float32List): void;\n    uniform1iv(location: WebGLUniformLocation | null, v: Int32List): void;\n    uniform2fv(location: WebGLUniformLocation | null, v: Float32List): void;\n    uniform2iv(location: WebGLUniformLocation | null, v: Int32List): void;\n    uniform3fv(location: WebGLUniformLocation | null, v: Float32List): void;\n    uniform3iv(location: WebGLUniformLocation | null, v: Int32List): void;\n    uniform4fv(location: WebGLUniformLocation | null, v: Float32List): void;\n    uniform4iv(location: WebGLUniformLocation | null, v: Int32List): void;\n    uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void;\n    uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void;\n    uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void;\n}\n\ninterface WebGLSampler {\n}\n\ndeclare var WebGLSampler: {\n    prototype: WebGLSampler;\n    new(): WebGLSampler;\n};\n\n/** The WebGLShader is part of the WebGL API and can either be a vertex or a fragment shader. A WebGLProgram requires both types of shaders. */\ninterface WebGLShader {\n}\n\ndeclare var WebGLShader: {\n    prototype: WebGLShader;\n    new(): WebGLShader;\n};\n\n/** Part of the WebGL API and represents the information returned by calling the WebGLRenderingContext.getShaderPrecisionFormat() method. */\ninterface WebGLShaderPrecisionFormat {\n    readonly precision: GLint;\n    readonly rangeMax: GLint;\n    readonly rangeMin: GLint;\n}\n\ndeclare var WebGLShaderPrecisionFormat: {\n    prototype: WebGLShaderPrecisionFormat;\n    new(): WebGLShaderPrecisionFormat;\n};\n\ninterface WebGLSync {\n}\n\ndeclare var WebGLSync: {\n    prototype: WebGLSync;\n    new(): WebGLSync;\n};\n\n/** Part of the WebGL API and represents an opaque texture object providing storage and state for texturing operations. */\ninterface WebGLTexture {\n}\n\ndeclare var WebGLTexture: {\n    prototype: WebGLTexture;\n    new(): WebGLTexture;\n};\n\ninterface WebGLTransformFeedback {\n}\n\ndeclare var WebGLTransformFeedback: {\n    prototype: WebGLTransformFeedback;\n    new(): WebGLTransformFeedback;\n};\n\n/** Part of the WebGL API and represents the location of a uniform variable in a shader program. */\ninterface WebGLUniformLocation {\n}\n\ndeclare var WebGLUniformLocation: {\n    prototype: WebGLUniformLocation;\n    new(): WebGLUniformLocation;\n};\n\ninterface WebGLVertexArrayObject {\n}\n\ndeclare var WebGLVertexArrayObject: {\n    prototype: WebGLVertexArrayObject;\n    new(): WebGLVertexArrayObject;\n};\n\ninterface WebGLVertexArrayObjectOES {\n}\n\ninterface WebSocketEventMap {\n    \"close\": CloseEvent;\n    \"error\": Event;\n    \"message\": MessageEvent;\n    \"open\": Event;\n}\n\n/** Provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection. */\ninterface WebSocket extends EventTarget {\n    /**\n     * Returns a string that indicates how binary data from the WebSocket object is exposed to scripts:\n     *\n     * Can be set, to change how binary data is returned. The default is \"blob\".\n     */\n    binaryType: BinaryType;\n    /**\n     * Returns the number of bytes of application data (UTF-8 text and binary data) that have been queued using send() but not yet been transmitted to the network.\n     *\n     * If the WebSocket connection is closed, this attribute's value will only increase with each call to the send() method. (The number does not reset to zero once the connection closes.)\n     */\n    readonly bufferedAmount: number;\n    /** Returns the extensions selected by the server, if any. */\n    readonly extensions: string;\n    onclose: ((this: WebSocket, ev: CloseEvent) => any) | null;\n    onerror: ((this: WebSocket, ev: Event) => any) | null;\n    onmessage: ((this: WebSocket, ev: MessageEvent) => any) | null;\n    onopen: ((this: WebSocket, ev: Event) => any) | null;\n    /** Returns the subprotocol selected by the server, if any. It can be used in conjunction with the array form of the constructor's second argument to perform subprotocol negotiation. */\n    readonly protocol: string;\n    /** Returns the state of the WebSocket object's connection. It can have the values described below. */\n    readonly readyState: number;\n    /** Returns the URL that was used to establish the WebSocket connection. */\n    readonly url: string;\n    /** Closes the WebSocket connection, optionally using code as the the WebSocket connection close code and reason as the the WebSocket connection close reason. */\n    close(code?: number, reason?: string): void;\n    /** Transmits data using the WebSocket connection. data can be a string, a Blob, an ArrayBuffer, or an ArrayBufferView. */\n    send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;\n    readonly CONNECTING: 0;\n    readonly OPEN: 1;\n    readonly CLOSING: 2;\n    readonly CLOSED: 3;\n    addEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var WebSocket: {\n    prototype: WebSocket;\n    new(url: string | URL, protocols?: string | string[]): WebSocket;\n    readonly CONNECTING: 0;\n    readonly OPEN: 1;\n    readonly CLOSING: 2;\n    readonly CLOSED: 3;\n};\n\n/** This ServiceWorker API interface represents the scope of a service worker client that is a document in a browser context, controlled by an active worker. The service worker client independently selects and uses a service worker for its own loading and sub-resources. */\ninterface WindowClient extends Client {\n    readonly focused: boolean;\n    readonly visibilityState: DocumentVisibilityState;\n    focus(): Promise<WindowClient>;\n    navigate(url: string | URL): Promise<WindowClient | null>;\n}\n\ndeclare var WindowClient: {\n    prototype: WindowClient;\n    new(): WindowClient;\n};\n\ninterface WindowOrWorkerGlobalScope {\n    /** Available only in secure contexts. */\n    readonly caches: CacheStorage;\n    readonly crossOriginIsolated: boolean;\n    readonly crypto: Crypto;\n    readonly indexedDB: IDBFactory;\n    readonly isSecureContext: boolean;\n    readonly origin: string;\n    readonly performance: Performance;\n    atob(data: string): string;\n    btoa(data: string): string;\n    clearInterval(id: number | undefined): void;\n    clearTimeout(id: number | undefined): void;\n    createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap>;\n    createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;\n    fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\n    queueMicrotask(callback: VoidFunction): void;\n    reportError(e: any): void;\n    setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;\n    setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;\n    structuredClone(value: any, options?: StructuredSerializeOptions): any;\n}\n\ninterface WorkerEventMap extends AbstractWorkerEventMap {\n    \"message\": MessageEvent;\n    \"messageerror\": MessageEvent;\n}\n\n/** This Web Workers API interface represents a background task that can be easily created and can send messages back to its creator. Creating a worker is as simple as calling the Worker() constructor and specifying a script to be run in the worker thread. */\ninterface Worker extends EventTarget, AbstractWorker {\n    onmessage: ((this: Worker, ev: MessageEvent) => any) | null;\n    onmessageerror: ((this: Worker, ev: MessageEvent) => any) | null;\n    /** Clones message and transmits it to worker's global environment. transfer can be passed as a list of objects that are to be transferred rather than cloned. */\n    postMessage(message: any, transfer: Transferable[]): void;\n    postMessage(message: any, options?: StructuredSerializeOptions): void;\n    /** Aborts worker's associated global environment. */\n    terminate(): void;\n    addEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Worker: {\n    prototype: Worker;\n    new(scriptURL: string | URL, options?: WorkerOptions): Worker;\n};\n\ninterface WorkerGlobalScopeEventMap {\n    \"error\": ErrorEvent;\n    \"languagechange\": Event;\n    \"offline\": Event;\n    \"online\": Event;\n    \"rejectionhandled\": PromiseRejectionEvent;\n    \"unhandledrejection\": PromiseRejectionEvent;\n}\n\n/** This Web Workers API interface is an interface representing the scope of any worker. Workers have no browsing context; this scope contains the information usually conveyed by Window objects \\u2014 in this case event handlers, the console or the associated WorkerNavigator object. Each WorkerGlobalScope has its own event loop. */\ninterface WorkerGlobalScope extends EventTarget, FontFaceSource, WindowOrWorkerGlobalScope {\n    /** Returns workerGlobal's WorkerLocation object. */\n    readonly location: WorkerLocation;\n    /** Returns workerGlobal's WorkerNavigator object. */\n    readonly navigator: WorkerNavigator;\n    onerror: ((this: WorkerGlobalScope, ev: ErrorEvent) => any) | null;\n    onlanguagechange: ((this: WorkerGlobalScope, ev: Event) => any) | null;\n    onoffline: ((this: WorkerGlobalScope, ev: Event) => any) | null;\n    ononline: ((this: WorkerGlobalScope, ev: Event) => any) | null;\n    onrejectionhandled: ((this: WorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null;\n    onunhandledrejection: ((this: WorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null;\n    /** Returns workerGlobal. */\n    readonly self: WorkerGlobalScope & typeof globalThis;\n    /** Fetches each URL in urls, executes them one-by-one in the order they are passed, and then returns (or throws if something went amiss). */\n    importScripts(...urls: (string | URL)[]): void;\n    addEventListener<K extends keyof WorkerGlobalScopeEventMap>(type: K, listener: (this: WorkerGlobalScope, ev: WorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof WorkerGlobalScopeEventMap>(type: K, listener: (this: WorkerGlobalScope, ev: WorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var WorkerGlobalScope: {\n    prototype: WorkerGlobalScope;\n    new(): WorkerGlobalScope;\n};\n\n/** The absolute location of the script executed by the Worker. Such an object is initialized for each worker and is available via the WorkerGlobalScope.location property obtained by calling self.location. */\ninterface WorkerLocation {\n    readonly hash: string;\n    readonly host: string;\n    readonly hostname: string;\n    readonly href: string;\n    toString(): string;\n    readonly origin: string;\n    readonly pathname: string;\n    readonly port: string;\n    readonly protocol: string;\n    readonly search: string;\n}\n\ndeclare var WorkerLocation: {\n    prototype: WorkerLocation;\n    new(): WorkerLocation;\n};\n\n/** A subset of the Navigator interface allowed to be accessed from a Worker. Such an object is initialized for each worker and is available via the WorkerGlobalScope.navigator property obtained by calling window.self.navigator. */\ninterface WorkerNavigator extends NavigatorConcurrentHardware, NavigatorID, NavigatorLanguage, NavigatorLocks, NavigatorOnLine, NavigatorStorage {\n    readonly mediaCapabilities: MediaCapabilities;\n}\n\ndeclare var WorkerNavigator: {\n    prototype: WorkerNavigator;\n    new(): WorkerNavigator;\n};\n\n/** This Streams API interface provides\\xA0a standard abstraction for writing streaming data to a destination, known as a sink. This object comes with built-in backpressure and queuing. */\ninterface WritableStream<W = any> {\n    readonly locked: boolean;\n    abort(reason?: any): Promise<void>;\n    close(): Promise<void>;\n    getWriter(): WritableStreamDefaultWriter<W>;\n}\n\ndeclare var WritableStream: {\n    prototype: WritableStream;\n    new<W = any>(underlyingSink?: UnderlyingSink<W>, strategy?: QueuingStrategy<W>): WritableStream<W>;\n};\n\n/** This Streams API interface represents a controller allowing control of a\\xA0WritableStream's state. When constructing a WritableStream, the underlying sink is given a corresponding WritableStreamDefaultController instance to manipulate. */\ninterface WritableStreamDefaultController {\n    readonly signal: AbortSignal;\n    error(e?: any): void;\n}\n\ndeclare var WritableStreamDefaultController: {\n    prototype: WritableStreamDefaultController;\n    new(): WritableStreamDefaultController;\n};\n\n/** This Streams API interface is the object returned by WritableStream.getWriter() and once created locks the < writer to the WritableStream ensuring that no other streams can write to the underlying sink. */\ninterface WritableStreamDefaultWriter<W = any> {\n    readonly closed: Promise<undefined>;\n    readonly desiredSize: number | null;\n    readonly ready: Promise<undefined>;\n    abort(reason?: any): Promise<void>;\n    close(): Promise<void>;\n    releaseLock(): void;\n    write(chunk?: W): Promise<void>;\n}\n\ndeclare var WritableStreamDefaultWriter: {\n    prototype: WritableStreamDefaultWriter;\n    new<W = any>(stream: WritableStream<W>): WritableStreamDefaultWriter<W>;\n};\n\ninterface XMLHttpRequestEventMap extends XMLHttpRequestEventTargetEventMap {\n    \"readystatechange\": Event;\n}\n\n/** Use XMLHttpRequest (XHR) objects to interact with servers. You can retrieve data from a URL without having to do a full page refresh. This enables a Web page to update just part of a page without disrupting what the user is doing. */\ninterface XMLHttpRequest extends XMLHttpRequestEventTarget {\n    onreadystatechange: ((this: XMLHttpRequest, ev: Event) => any) | null;\n    /** Returns client's state. */\n    readonly readyState: number;\n    /** Returns the response body. */\n    readonly response: any;\n    /**\n     * Returns response as text.\n     *\n     * Throws an \"InvalidStateError\" DOMException if responseType is not the empty string or \"text\".\n     */\n    readonly responseText: string;\n    /**\n     * Returns the response type.\n     *\n     * Can be set to change the response type. Values are: the empty string (default), \"arraybuffer\", \"blob\", \"document\", \"json\", and \"text\".\n     *\n     * When set: setting to \"document\" is ignored if current global object is not a Window object.\n     *\n     * When set: throws an \"InvalidStateError\" DOMException if state is loading or done.\n     *\n     * When set: throws an \"InvalidAccessError\" DOMException if the synchronous flag is set and current global object is a Window object.\n     */\n    responseType: XMLHttpRequestResponseType;\n    readonly responseURL: string;\n    readonly status: number;\n    readonly statusText: string;\n    /**\n     * Can be set to a time in milliseconds. When set to a non-zero value will cause fetching to terminate after the given time has passed. When the time has passed, the request has not yet completed, and this's synchronous flag is unset, a timeout event will then be dispatched, or a \"TimeoutError\" DOMException will be thrown otherwise (for the send() method).\n     *\n     * When set: throws an \"InvalidAccessError\" DOMException if the synchronous flag is set and current global object is a Window object.\n     */\n    timeout: number;\n    /** Returns the associated XMLHttpRequestUpload object. It can be used to gather transmission information when data is transferred to a server. */\n    readonly upload: XMLHttpRequestUpload;\n    /**\n     * True when credentials are to be included in a cross-origin request. False when they are to be excluded in a cross-origin request and when cookies are to be ignored in its response. Initially false.\n     *\n     * When set: throws an \"InvalidStateError\" DOMException if state is not unsent or opened, or if the send() flag is set.\n     */\n    withCredentials: boolean;\n    /** Cancels any network activity. */\n    abort(): void;\n    getAllResponseHeaders(): string;\n    getResponseHeader(name: string): string | null;\n    /**\n     * Sets the request method, request URL, and synchronous flag.\n     *\n     * Throws a \"SyntaxError\" DOMException if either method is not a valid method or url cannot be parsed.\n     *\n     * Throws a \"SecurityError\" DOMException if method is a case-insensitive match for \\`CONNECT\\`, \\`TRACE\\`, or \\`TRACK\\`.\n     *\n     * Throws an \"InvalidAccessError\" DOMException if async is false, current global object is a Window object, and the timeout attribute is not zero or the responseType attribute is not the empty string.\n     */\n    open(method: string, url: string | URL): void;\n    open(method: string, url: string | URL, async: boolean, username?: string | null, password?: string | null): void;\n    /**\n     * Acts as if the \\`Content-Type\\` header value for a response is mime. (It does not change the header.)\n     *\n     * Throws an \"InvalidStateError\" DOMException if state is loading or done.\n     */\n    overrideMimeType(mime: string): void;\n    /**\n     * Initiates the request. The body argument provides the request body, if any, and is ignored if the request method is GET or HEAD.\n     *\n     * Throws an \"InvalidStateError\" DOMException if either state is not opened or the send() flag is set.\n     */\n    send(body?: XMLHttpRequestBodyInit | null): void;\n    /**\n     * Combines a header in author request headers.\n     *\n     * Throws an \"InvalidStateError\" DOMException if either state is not opened or the send() flag is set.\n     *\n     * Throws a \"SyntaxError\" DOMException if name is not a header name or if value is not a header value.\n     */\n    setRequestHeader(name: string, value: string): void;\n    readonly UNSENT: 0;\n    readonly OPENED: 1;\n    readonly HEADERS_RECEIVED: 2;\n    readonly LOADING: 3;\n    readonly DONE: 4;\n    addEventListener<K extends keyof XMLHttpRequestEventMap>(type: K, listener: (this: XMLHttpRequest, ev: XMLHttpRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof XMLHttpRequestEventMap>(type: K, listener: (this: XMLHttpRequest, ev: XMLHttpRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var XMLHttpRequest: {\n    prototype: XMLHttpRequest;\n    new(): XMLHttpRequest;\n    readonly UNSENT: 0;\n    readonly OPENED: 1;\n    readonly HEADERS_RECEIVED: 2;\n    readonly LOADING: 3;\n    readonly DONE: 4;\n};\n\ninterface XMLHttpRequestEventTargetEventMap {\n    \"abort\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"error\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"load\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"loadend\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"loadstart\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"progress\": ProgressEvent<XMLHttpRequestEventTarget>;\n    \"timeout\": ProgressEvent<XMLHttpRequestEventTarget>;\n}\n\ninterface XMLHttpRequestEventTarget extends EventTarget {\n    onabort: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onerror: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onload: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onloadend: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onloadstart: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    onprogress: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    ontimeout: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null;\n    addEventListener<K extends keyof XMLHttpRequestEventTargetEventMap>(type: K, listener: (this: XMLHttpRequestEventTarget, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof XMLHttpRequestEventTargetEventMap>(type: K, listener: (this: XMLHttpRequestEventTarget, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var XMLHttpRequestEventTarget: {\n    prototype: XMLHttpRequestEventTarget;\n    new(): XMLHttpRequestEventTarget;\n};\n\ninterface XMLHttpRequestUpload extends XMLHttpRequestEventTarget {\n    addEventListener<K extends keyof XMLHttpRequestEventTargetEventMap>(type: K, listener: (this: XMLHttpRequestUpload, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n    removeEventListener<K extends keyof XMLHttpRequestEventTargetEventMap>(type: K, listener: (this: XMLHttpRequestUpload, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var XMLHttpRequestUpload: {\n    prototype: XMLHttpRequestUpload;\n    new(): XMLHttpRequestUpload;\n};\n\ninterface Console {\n    assert(condition?: boolean, ...data: any[]): void;\n    clear(): void;\n    count(label?: string): void;\n    countReset(label?: string): void;\n    debug(...data: any[]): void;\n    dir(item?: any, options?: any): void;\n    dirxml(...data: any[]): void;\n    error(...data: any[]): void;\n    group(...data: any[]): void;\n    groupCollapsed(...data: any[]): void;\n    groupEnd(): void;\n    info(...data: any[]): void;\n    log(...data: any[]): void;\n    table(tabularData?: any, properties?: string[]): void;\n    time(label?: string): void;\n    timeEnd(label?: string): void;\n    timeLog(label?: string, ...data: any[]): void;\n    timeStamp(label?: string): void;\n    trace(...data: any[]): void;\n    warn(...data: any[]): void;\n}\n\ndeclare var console: Console;\n\ndeclare namespace WebAssembly {\n    interface CompileError extends Error {\n    }\n\n    var CompileError: {\n        prototype: CompileError;\n        new(message?: string): CompileError;\n        (message?: string): CompileError;\n    };\n\n    interface Global {\n        value: any;\n        valueOf(): any;\n    }\n\n    var Global: {\n        prototype: Global;\n        new(descriptor: GlobalDescriptor, v?: any): Global;\n    };\n\n    interface Instance {\n        readonly exports: Exports;\n    }\n\n    var Instance: {\n        prototype: Instance;\n        new(module: Module, importObject?: Imports): Instance;\n    };\n\n    interface LinkError extends Error {\n    }\n\n    var LinkError: {\n        prototype: LinkError;\n        new(message?: string): LinkError;\n        (message?: string): LinkError;\n    };\n\n    interface Memory {\n        readonly buffer: ArrayBuffer;\n        grow(delta: number): number;\n    }\n\n    var Memory: {\n        prototype: Memory;\n        new(descriptor: MemoryDescriptor): Memory;\n    };\n\n    interface Module {\n    }\n\n    var Module: {\n        prototype: Module;\n        new(bytes: BufferSource): Module;\n        customSections(moduleObject: Module, sectionName: string): ArrayBuffer[];\n        exports(moduleObject: Module): ModuleExportDescriptor[];\n        imports(moduleObject: Module): ModuleImportDescriptor[];\n    };\n\n    interface RuntimeError extends Error {\n    }\n\n    var RuntimeError: {\n        prototype: RuntimeError;\n        new(message?: string): RuntimeError;\n        (message?: string): RuntimeError;\n    };\n\n    interface Table {\n        readonly length: number;\n        get(index: number): any;\n        grow(delta: number, value?: any): number;\n        set(index: number, value?: any): void;\n    }\n\n    var Table: {\n        prototype: Table;\n        new(descriptor: TableDescriptor, value?: any): Table;\n    };\n\n    interface GlobalDescriptor {\n        mutable?: boolean;\n        value: ValueType;\n    }\n\n    interface MemoryDescriptor {\n        initial: number;\n        maximum?: number;\n        shared?: boolean;\n    }\n\n    interface ModuleExportDescriptor {\n        kind: ImportExportKind;\n        name: string;\n    }\n\n    interface ModuleImportDescriptor {\n        kind: ImportExportKind;\n        module: string;\n        name: string;\n    }\n\n    interface TableDescriptor {\n        element: TableKind;\n        initial: number;\n        maximum?: number;\n    }\n\n    interface WebAssemblyInstantiatedSource {\n        instance: Instance;\n        module: Module;\n    }\n\n    type ImportExportKind = \"function\" | \"global\" | \"memory\" | \"table\";\n    type TableKind = \"anyfunc\" | \"externref\";\n    type ValueType = \"anyfunc\" | \"externref\" | \"f32\" | \"f64\" | \"i32\" | \"i64\" | \"v128\";\n    type ExportValue = Function | Global | Memory | Table;\n    type Exports = Record<string, ExportValue>;\n    type ImportValue = ExportValue | number;\n    type Imports = Record<string, ModuleImports>;\n    type ModuleImports = Record<string, ImportValue>;\n    function compile(bytes: BufferSource): Promise<Module>;\n    function compileStreaming(source: Response | PromiseLike<Response>): Promise<Module>;\n    function instantiate(bytes: BufferSource, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;\n    function instantiate(moduleObject: Module, importObject?: Imports): Promise<Instance>;\n    function instantiateStreaming(source: Response | PromiseLike<Response>, importObject?: Imports): Promise<WebAssemblyInstantiatedSource>;\n    function validate(bytes: BufferSource): boolean;\n}\n\ninterface FrameRequestCallback {\n    (time: DOMHighResTimeStamp): void;\n}\n\ninterface LockGrantedCallback {\n    (lock: Lock | null): any;\n}\n\ninterface OnErrorEventHandlerNonNull {\n    (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n}\n\ninterface PerformanceObserverCallback {\n    (entries: PerformanceObserverEntryList, observer: PerformanceObserver): void;\n}\n\ninterface QueuingStrategySize<T = any> {\n    (chunk: T): number;\n}\n\ninterface TransformerFlushCallback<O> {\n    (controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;\n}\n\ninterface TransformerStartCallback<O> {\n    (controller: TransformStreamDefaultController<O>): any;\n}\n\ninterface TransformerTransformCallback<I, O> {\n    (chunk: I, controller: TransformStreamDefaultController<O>): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSinkAbortCallback {\n    (reason?: any): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSinkCloseCallback {\n    (): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSinkStartCallback {\n    (controller: WritableStreamDefaultController): any;\n}\n\ninterface UnderlyingSinkWriteCallback<W> {\n    (chunk: W, controller: WritableStreamDefaultController): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSourceCancelCallback {\n    (reason?: any): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSourcePullCallback<R> {\n    (controller: ReadableStreamController<R>): void | PromiseLike<void>;\n}\n\ninterface UnderlyingSourceStartCallback<R> {\n    (controller: ReadableStreamController<R>): any;\n}\n\ninterface VoidFunction {\n    (): void;\n}\n\n/** Returns dedicatedWorkerGlobal's name, i.e. the value given to the Worker constructor. Primarily useful for debugging. */\ndeclare var name: string;\ndeclare var onmessage: ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null;\ndeclare var onmessageerror: ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null;\n/** Aborts dedicatedWorkerGlobal. */\ndeclare function close(): void;\n/** Clones message and transmits it to the Worker object associated with dedicatedWorkerGlobal. transfer can be passed as a list of objects that are to be transferred rather than cloned. */\ndeclare function postMessage(message: any, transfer: Transferable[]): void;\ndeclare function postMessage(message: any, options?: StructuredSerializeOptions): void;\n/** Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. */\ndeclare function dispatchEvent(event: Event): boolean;\n/** Returns workerGlobal's WorkerLocation object. */\ndeclare var location: WorkerLocation;\n/** Returns workerGlobal's WorkerNavigator object. */\ndeclare var navigator: WorkerNavigator;\ndeclare var onerror: ((this: DedicatedWorkerGlobalScope, ev: ErrorEvent) => any) | null;\ndeclare var onlanguagechange: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null;\ndeclare var onoffline: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null;\ndeclare var ononline: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null;\ndeclare var onrejectionhandled: ((this: DedicatedWorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null;\ndeclare var onunhandledrejection: ((this: DedicatedWorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null;\n/** Returns workerGlobal. */\ndeclare var self: WorkerGlobalScope & typeof globalThis;\n/** Fetches each URL in urls, executes them one-by-one in the order they are passed, and then returns (or throws if something went amiss). */\ndeclare function importScripts(...urls: (string | URL)[]): void;\n/** Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. */\ndeclare function dispatchEvent(event: Event): boolean;\ndeclare var fonts: FontFaceSet;\n/** Available only in secure contexts. */\ndeclare var caches: CacheStorage;\ndeclare var crossOriginIsolated: boolean;\ndeclare var crypto: Crypto;\ndeclare var indexedDB: IDBFactory;\ndeclare var isSecureContext: boolean;\ndeclare var origin: string;\ndeclare var performance: Performance;\ndeclare function atob(data: string): string;\ndeclare function btoa(data: string): string;\ndeclare function clearInterval(id: number | undefined): void;\ndeclare function clearTimeout(id: number | undefined): void;\ndeclare function createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap>;\ndeclare function createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;\ndeclare function fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;\ndeclare function queueMicrotask(callback: VoidFunction): void;\ndeclare function reportError(e: any): void;\ndeclare function setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;\ndeclare function setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number;\ndeclare function structuredClone(value: any, options?: StructuredSerializeOptions): any;\ndeclare function cancelAnimationFrame(handle: number): void;\ndeclare function requestAnimationFrame(callback: FrameRequestCallback): number;\ndeclare function addEventListener<K extends keyof DedicatedWorkerGlobalScopeEventMap>(type: K, listener: (this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\ndeclare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\ndeclare function removeEventListener<K extends keyof DedicatedWorkerGlobalScopeEventMap>(type: K, listener: (this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\ndeclare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\ntype AlgorithmIdentifier = Algorithm | string;\ntype BigInteger = Uint8Array;\ntype BinaryData = ArrayBuffer | ArrayBufferView;\ntype BlobPart = BufferSource | Blob | string;\ntype BodyInit = ReadableStream | XMLHttpRequestBodyInit;\ntype BufferSource = ArrayBufferView | ArrayBuffer;\ntype CanvasImageSource = ImageBitmap | OffscreenCanvas;\ntype DOMHighResTimeStamp = number;\ntype EpochTimeStamp = number;\ntype EventListenerOrEventListenerObject = EventListener | EventListenerObject;\ntype Float32List = Float32Array | GLfloat[];\ntype FormDataEntryValue = File | string;\ntype GLbitfield = number;\ntype GLboolean = boolean;\ntype GLclampf = number;\ntype GLenum = number;\ntype GLfloat = number;\ntype GLint = number;\ntype GLint64 = number;\ntype GLintptr = number;\ntype GLsizei = number;\ntype GLsizeiptr = number;\ntype GLuint = number;\ntype GLuint64 = number;\ntype HashAlgorithmIdentifier = AlgorithmIdentifier;\ntype HeadersInit = [string, string][] | Record<string, string> | Headers;\ntype IDBValidKey = number | string | Date | BufferSource | IDBValidKey[];\ntype ImageBitmapSource = CanvasImageSource | Blob | ImageData;\ntype Int32List = Int32Array | GLint[];\ntype MessageEventSource = MessagePort | ServiceWorker;\ntype NamedCurve = string;\ntype OffscreenRenderingContext = OffscreenCanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext;\ntype OnErrorEventHandler = OnErrorEventHandlerNonNull | null;\ntype PerformanceEntryList = PerformanceEntry[];\ntype PushMessageDataInit = BufferSource | string;\ntype ReadableStreamController<T> = ReadableStreamDefaultController<T> | ReadableByteStreamController;\ntype ReadableStreamReadResult<T> = ReadableStreamReadValueResult<T> | ReadableStreamReadDoneResult<T>;\ntype ReadableStreamReader<T> = ReadableStreamDefaultReader<T> | ReadableStreamBYOBReader;\ntype RequestInfo = Request | string;\ntype TexImageSource = ImageBitmap | ImageData | OffscreenCanvas;\ntype TimerHandler = string | Function;\ntype Transferable = OffscreenCanvas | ImageBitmap | MessagePort | ReadableStream | WritableStream | TransformStream | ArrayBuffer;\ntype Uint32List = Uint32Array | GLuint[];\ntype VibratePattern = number | number[];\ntype XMLHttpRequestBodyInit = Blob | BufferSource | FormData | URLSearchParams | string;\ntype BinaryType = \"arraybuffer\" | \"blob\";\ntype CanvasDirection = \"inherit\" | \"ltr\" | \"rtl\";\ntype CanvasFillRule = \"evenodd\" | \"nonzero\";\ntype CanvasFontKerning = \"auto\" | \"none\" | \"normal\";\ntype CanvasFontStretch = \"condensed\" | \"expanded\" | \"extra-condensed\" | \"extra-expanded\" | \"normal\" | \"semi-condensed\" | \"semi-expanded\" | \"ultra-condensed\" | \"ultra-expanded\";\ntype CanvasFontVariantCaps = \"all-petite-caps\" | \"all-small-caps\" | \"normal\" | \"petite-caps\" | \"small-caps\" | \"titling-caps\" | \"unicase\";\ntype CanvasLineCap = \"butt\" | \"round\" | \"square\";\ntype CanvasLineJoin = \"bevel\" | \"miter\" | \"round\";\ntype CanvasTextAlign = \"center\" | \"end\" | \"left\" | \"right\" | \"start\";\ntype CanvasTextBaseline = \"alphabetic\" | \"bottom\" | \"hanging\" | \"ideographic\" | \"middle\" | \"top\";\ntype CanvasTextRendering = \"auto\" | \"geometricPrecision\" | \"optimizeLegibility\" | \"optimizeSpeed\";\ntype ClientTypes = \"all\" | \"sharedworker\" | \"window\" | \"worker\";\ntype ColorGamut = \"p3\" | \"rec2020\" | \"srgb\";\ntype ColorSpaceConversion = \"default\" | \"none\";\ntype DocumentVisibilityState = \"hidden\" | \"visible\";\ntype EndingType = \"native\" | \"transparent\";\ntype FileSystemHandleKind = \"directory\" | \"file\";\ntype FontDisplay = \"auto\" | \"block\" | \"fallback\" | \"optional\" | \"swap\";\ntype FontFaceLoadStatus = \"error\" | \"loaded\" | \"loading\" | \"unloaded\";\ntype FontFaceSetLoadStatus = \"loaded\" | \"loading\";\ntype FrameType = \"auxiliary\" | \"nested\" | \"none\" | \"top-level\";\ntype GlobalCompositeOperation = \"color\" | \"color-burn\" | \"color-dodge\" | \"copy\" | \"darken\" | \"destination-atop\" | \"destination-in\" | \"destination-out\" | \"destination-over\" | \"difference\" | \"exclusion\" | \"hard-light\" | \"hue\" | \"lighten\" | \"lighter\" | \"luminosity\" | \"multiply\" | \"overlay\" | \"saturation\" | \"screen\" | \"soft-light\" | \"source-atop\" | \"source-in\" | \"source-out\" | \"source-over\" | \"xor\";\ntype HdrMetadataType = \"smpteSt2086\" | \"smpteSt2094-10\" | \"smpteSt2094-40\";\ntype IDBCursorDirection = \"next\" | \"nextunique\" | \"prev\" | \"prevunique\";\ntype IDBRequestReadyState = \"done\" | \"pending\";\ntype IDBTransactionDurability = \"default\" | \"relaxed\" | \"strict\";\ntype IDBTransactionMode = \"readonly\" | \"readwrite\" | \"versionchange\";\ntype ImageOrientation = \"flipY\" | \"from-image\";\ntype ImageSmoothingQuality = \"high\" | \"low\" | \"medium\";\ntype KeyFormat = \"jwk\" | \"pkcs8\" | \"raw\" | \"spki\";\ntype KeyType = \"private\" | \"public\" | \"secret\";\ntype KeyUsage = \"decrypt\" | \"deriveBits\" | \"deriveKey\" | \"encrypt\" | \"sign\" | \"unwrapKey\" | \"verify\" | \"wrapKey\";\ntype LockMode = \"exclusive\" | \"shared\";\ntype MediaDecodingType = \"file\" | \"media-source\" | \"webrtc\";\ntype MediaEncodingType = \"record\" | \"webrtc\";\ntype NotificationDirection = \"auto\" | \"ltr\" | \"rtl\";\ntype NotificationPermission = \"default\" | \"denied\" | \"granted\";\ntype OffscreenRenderingContextId = \"2d\" | \"bitmaprenderer\" | \"webgl\" | \"webgl2\" | \"webgpu\";\ntype PermissionName = \"geolocation\" | \"notifications\" | \"persistent-storage\" | \"push\" | \"screen-wake-lock\" | \"xr-spatial-tracking\";\ntype PermissionState = \"denied\" | \"granted\" | \"prompt\";\ntype PredefinedColorSpace = \"display-p3\" | \"srgb\";\ntype PremultiplyAlpha = \"default\" | \"none\" | \"premultiply\";\ntype PushEncryptionKeyName = \"auth\" | \"p256dh\";\ntype RTCEncodedVideoFrameType = \"delta\" | \"empty\" | \"key\";\ntype ReadableStreamReaderMode = \"byob\";\ntype ReadableStreamType = \"bytes\";\ntype ReferrerPolicy = \"\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\";\ntype RequestCache = \"default\" | \"force-cache\" | \"no-cache\" | \"no-store\" | \"only-if-cached\" | \"reload\";\ntype RequestCredentials = \"include\" | \"omit\" | \"same-origin\";\ntype RequestDestination = \"\" | \"audio\" | \"audioworklet\" | \"document\" | \"embed\" | \"font\" | \"frame\" | \"iframe\" | \"image\" | \"manifest\" | \"object\" | \"paintworklet\" | \"report\" | \"script\" | \"sharedworker\" | \"style\" | \"track\" | \"video\" | \"worker\" | \"xslt\";\ntype RequestMode = \"cors\" | \"navigate\" | \"no-cors\" | \"same-origin\";\ntype RequestRedirect = \"error\" | \"follow\" | \"manual\";\ntype ResizeQuality = \"high\" | \"low\" | \"medium\" | \"pixelated\";\ntype ResponseType = \"basic\" | \"cors\" | \"default\" | \"error\" | \"opaque\" | \"opaqueredirect\";\ntype SecurityPolicyViolationEventDisposition = \"enforce\" | \"report\";\ntype ServiceWorkerState = \"activated\" | \"activating\" | \"installed\" | \"installing\" | \"parsed\" | \"redundant\";\ntype ServiceWorkerUpdateViaCache = \"all\" | \"imports\" | \"none\";\ntype TransferFunction = \"hlg\" | \"pq\" | \"srgb\";\ntype VideoColorPrimaries = \"bt470bg\" | \"bt709\" | \"smpte170m\";\ntype VideoMatrixCoefficients = \"bt470bg\" | \"bt709\" | \"rgb\" | \"smpte170m\";\ntype VideoTransferCharacteristics = \"bt709\" | \"iec61966-2-1\" | \"smpte170m\";\ntype WebGLPowerPreference = \"default\" | \"high-performance\" | \"low-power\";\ntype WorkerType = \"classic\" | \"module\";\ntype XMLHttpRequestResponseType = \"\" | \"arraybuffer\" | \"blob\" | \"document\" | \"json\" | \"text\";\n`;$i[\"lib.webworker.importscripts.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n\n/////////////////////////////\n/// WorkerGlobalScope APIs\n/////////////////////////////\n// These are only available in a Web Worker\ndeclare function importScripts(...urls: string[]): void;\n`;$i[\"lib.webworker.iterable.d.ts\"]=`/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// <reference no-default-lib=\"true\"/>\n\n/////////////////////////////\n/// Worker Iterable APIs\n/////////////////////////////\n\ninterface Cache {\n    addAll(requests: Iterable<RequestInfo>): Promise<void>;\n}\n\ninterface CanvasPath {\n    roundRect(x: number, y: number, w: number, h: number, radii?: number | DOMPointInit | Iterable<number | DOMPointInit>): void;\n}\n\ninterface CanvasPathDrawingStyles {\n    setLineDash(segments: Iterable<number>): void;\n}\n\ninterface DOMStringList {\n    [Symbol.iterator](): IterableIterator<string>;\n}\n\ninterface FileList {\n    [Symbol.iterator](): IterableIterator<File>;\n}\n\ninterface FontFaceSet extends Set<FontFace> {\n}\n\ninterface FormData {\n    [Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>;\n    /** Returns an array of key, value pairs for every entry in the list. */\n    entries(): IterableIterator<[string, FormDataEntryValue]>;\n    /** Returns a list of keys in the list. */\n    keys(): IterableIterator<string>;\n    /** Returns a list of values in the list. */\n    values(): IterableIterator<FormDataEntryValue>;\n}\n\ninterface Headers {\n    [Symbol.iterator](): IterableIterator<[string, string]>;\n    /** Returns an iterator allowing to go through all key/value pairs contained in this object. */\n    entries(): IterableIterator<[string, string]>;\n    /** Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */\n    keys(): IterableIterator<string>;\n    /** Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */\n    values(): IterableIterator<string>;\n}\n\ninterface IDBDatabase {\n    /** Returns a new transaction with the given mode (\"readonly\" or \"readwrite\") and scope which can be a single object store name or an array of names. */\n    transaction(storeNames: string | Iterable<string>, mode?: IDBTransactionMode, options?: IDBTransactionOptions): IDBTransaction;\n}\n\ninterface IDBObjectStore {\n    /**\n     * Creates a new index in store with the given name, keyPath and options and returns a new IDBIndex. If the keyPath and options define constraints that cannot be satisfied with the data already in store the upgrade transaction will abort with a \"ConstraintError\" DOMException.\n     *\n     * Throws an \"InvalidStateError\" DOMException if not called within an upgrade transaction.\n     */\n    createIndex(name: string, keyPath: string | Iterable<string>, options?: IDBIndexParameters): IDBIndex;\n}\n\ninterface MessageEvent<T = any> {\n    /** @deprecated */\n    initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: Iterable<MessagePort>): void;\n}\n\ninterface SubtleCrypto {\n    deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;\n    generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKeyPair>;\n    generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKey>;\n    generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKeyPair | CryptoKey>;\n    importKey(format: \"jwk\", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: ReadonlyArray<KeyUsage>): Promise<CryptoKey>;\n    importKey(format: Exclude<KeyFormat, \"jwk\">, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;\n    unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;\n}\n\ninterface URLSearchParams {\n    [Symbol.iterator](): IterableIterator<[string, string]>;\n    /** Returns an array of key, value pairs for every entry in the search params. */\n    entries(): IterableIterator<[string, string]>;\n    /** Returns a list of keys in the search params. */\n    keys(): IterableIterator<string>;\n    /** Returns a list of values in the search params. */\n    values(): IterableIterator<string>;\n}\n\ninterface WEBGL_draw_buffers {\n    drawBuffersWEBGL(buffers: Iterable<GLenum>): void;\n}\n\ninterface WEBGL_multi_draw {\n    multiDrawArraysInstancedWEBGL(mode: GLenum, firstsList: Int32Array | Iterable<GLint>, firstsOffset: GLuint, countsList: Int32Array | Iterable<GLsizei>, countsOffset: GLuint, instanceCountsList: Int32Array | Iterable<GLsizei>, instanceCountsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawArraysWEBGL(mode: GLenum, firstsList: Int32Array | Iterable<GLint>, firstsOffset: GLuint, countsList: Int32Array | Iterable<GLsizei>, countsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawElementsInstancedWEBGL(mode: GLenum, countsList: Int32Array | Iterable<GLsizei>, countsOffset: GLuint, type: GLenum, offsetsList: Int32Array | Iterable<GLsizei>, offsetsOffset: GLuint, instanceCountsList: Int32Array | Iterable<GLsizei>, instanceCountsOffset: GLuint, drawcount: GLsizei): void;\n    multiDrawElementsWEBGL(mode: GLenum, countsList: Int32Array | Iterable<GLsizei>, countsOffset: GLuint, type: GLenum, offsetsList: Int32Array | Iterable<GLsizei>, offsetsOffset: GLuint, drawcount: GLsizei): void;\n}\n\ninterface WebGL2RenderingContextBase {\n    clearBufferfv(buffer: GLenum, drawbuffer: GLint, values: Iterable<GLfloat>, srcOffset?: GLuint): void;\n    clearBufferiv(buffer: GLenum, drawbuffer: GLint, values: Iterable<GLint>, srcOffset?: GLuint): void;\n    clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Iterable<GLuint>, srcOffset?: GLuint): void;\n    drawBuffers(buffers: Iterable<GLenum>): void;\n    getActiveUniforms(program: WebGLProgram, uniformIndices: Iterable<GLuint>, pname: GLenum): any;\n    getUniformIndices(program: WebGLProgram, uniformNames: Iterable<string>): Iterable<GLuint> | null;\n    invalidateFramebuffer(target: GLenum, attachments: Iterable<GLenum>): void;\n    invalidateSubFramebuffer(target: GLenum, attachments: Iterable<GLenum>, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;\n    transformFeedbackVaryings(program: WebGLProgram, varyings: Iterable<string>, bufferMode: GLenum): void;\n    uniform1uiv(location: WebGLUniformLocation | null, data: Iterable<GLuint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2uiv(location: WebGLUniformLocation | null, data: Iterable<GLuint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3uiv(location: WebGLUniformLocation | null, data: Iterable<GLuint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4uiv(location: WebGLUniformLocation | null, data: Iterable<GLuint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    vertexAttribI4iv(index: GLuint, values: Iterable<GLint>): void;\n    vertexAttribI4uiv(index: GLuint, values: Iterable<GLuint>): void;\n}\n\ninterface WebGL2RenderingContextOverloads {\n    uniform1fv(location: WebGLUniformLocation | null, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform1iv(location: WebGLUniformLocation | null, data: Iterable<GLint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2fv(location: WebGLUniformLocation | null, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform2iv(location: WebGLUniformLocation | null, data: Iterable<GLint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3fv(location: WebGLUniformLocation | null, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform3iv(location: WebGLUniformLocation | null, data: Iterable<GLint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4fv(location: WebGLUniformLocation | null, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniform4iv(location: WebGLUniformLocation | null, data: Iterable<GLint>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n    uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable<GLfloat>, srcOffset?: GLuint, srcLength?: GLuint): void;\n}\n\ninterface WebGLRenderingContextBase {\n    vertexAttrib1fv(index: GLuint, values: Iterable<GLfloat>): void;\n    vertexAttrib2fv(index: GLuint, values: Iterable<GLfloat>): void;\n    vertexAttrib3fv(index: GLuint, values: Iterable<GLfloat>): void;\n    vertexAttrib4fv(index: GLuint, values: Iterable<GLfloat>): void;\n}\n\ninterface WebGLRenderingContextOverloads {\n    uniform1fv(location: WebGLUniformLocation | null, v: Iterable<GLfloat>): void;\n    uniform1iv(location: WebGLUniformLocation | null, v: Iterable<GLint>): void;\n    uniform2fv(location: WebGLUniformLocation | null, v: Iterable<GLfloat>): void;\n    uniform2iv(location: WebGLUniformLocation | null, v: Iterable<GLint>): void;\n    uniform3fv(location: WebGLUniformLocation | null, v: Iterable<GLfloat>): void;\n    uniform3iv(location: WebGLUniformLocation | null, v: Iterable<GLint>): void;\n    uniform4fv(location: WebGLUniformLocation | null, v: Iterable<GLfloat>): void;\n    uniform4iv(location: WebGLUniformLocation | null, v: Iterable<GLint>): void;\n    uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Iterable<GLfloat>): void;\n    uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Iterable<GLfloat>): void;\n    uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Iterable<GLfloat>): void;\n}\n`;function e_(zd){return typeof zd==\"string\"?/^file:\\/\\/\\//.test(zd)?!!$i[zd.substr(8)]:!1:zd.path.indexOf(\"/lib.\")===0?!!$i[zd.path.slice(1)]:!1}var o8=class zd{constructor(ti,gt){this._extraLibs=Object.create(null);this._languageService=iae(this);this._ctx=ti,this._compilerOptions=gt.compilerOptions,this._extraLibs=gt.extraLibs,this._inlayHintsOptions=gt.inlayHintsOptions}getCompilationSettings(){return this._compilerOptions}getLanguageService(){return this._languageService}getExtraLibs(){return this._extraLibs}getScriptFileNames(){return this._ctx.getMirrorModels().map(hs=>hs.uri).filter(hs=>!e_(hs)).map(hs=>hs.toString()).concat(Object.keys(this._extraLibs))}_getModel(ti){let gt=this._ctx.getMirrorModels();for(let hs=0;hs<gt.length;hs++){let Mo=gt[hs].uri;if(Mo.toString()===ti||Mo.toString(!0)===ti)return gt[hs]}return null}getScriptVersion(ti){let gt=this._getModel(ti);return gt?gt.version.toString():this.isDefaultLibFileName(ti)?\"1\":ti in this._extraLibs?String(this._extraLibs[ti].version):\"\"}async getScriptText(ti){return this._getScriptText(ti)}_getScriptText(ti){let gt,hs=this._getModel(ti),Mo=\"lib.\"+ti+\".d.ts\";if(hs)gt=hs.getValue();else if(ti in $i)gt=$i[ti];else if(Mo in $i)gt=$i[Mo];else if(ti in this._extraLibs)gt=this._extraLibs[ti].content;else return;return gt}getScriptSnapshot(ti){let gt=this._getScriptText(ti);if(gt!==void 0)return{getText:(hs,Mo)=>gt.substring(hs,Mo),getLength:()=>gt.length,getChangeRange:()=>{}}}getScriptKind(ti){switch(ti.substr(ti.lastIndexOf(\".\")+1)){case\"ts\":return uA.TS;case\"tsx\":return uA.TSX;case\"js\":return uA.JS;case\"jsx\":return uA.JSX;default:return this.getCompilationSettings().allowJs?uA.JS:uA.TS}}getCurrentDirectory(){return\"\"}getDefaultLibFileName(ti){switch(ti.target){case 99:let gt=\"lib.esnext.full.d.ts\";if(gt in $i||gt in this._extraLibs)return gt;case 7:case 6:case 5:case 4:case 3:case 2:default:let hs=`lib.es${2013+(ti.target||99)}.full.d.ts`;return hs in $i||hs in this._extraLibs?hs:\"lib.es6.d.ts\";case 1:case 0:return\"lib.d.ts\"}}isDefaultLibFileName(ti){return ti===this.getDefaultLibFileName(this._compilerOptions)}readFile(ti){return this._getScriptText(ti)}fileExists(ti){return this._getScriptText(ti)!==void 0}async getLibFiles(){return $i}static clearFiles(ti){let gt=[];for(let hs of ti){let Mo={...hs};if(Mo.file=Mo.file?{fileName:Mo.file.fileName}:void 0,hs.relatedInformation){Mo.relatedInformation=[];for(let Sg of hs.relatedInformation){let Rf={...Sg};Rf.file=Rf.file?{fileName:Rf.file.fileName}:void 0,Mo.relatedInformation.push(Rf)}}gt.push(Mo)}return gt}async getSyntacticDiagnostics(ti){if(e_(ti))return[];let gt=this._languageService.getSyntacticDiagnostics(ti);return zd.clearFiles(gt)}async getSemanticDiagnostics(ti){if(e_(ti))return[];let gt=this._languageService.getSemanticDiagnostics(ti);return zd.clearFiles(gt)}async getSuggestionDiagnostics(ti){if(e_(ti))return[];let gt=this._languageService.getSuggestionDiagnostics(ti);return zd.clearFiles(gt)}async getCompilerOptionsDiagnostics(ti){if(e_(ti))return[];let gt=this._languageService.getCompilerOptionsDiagnostics();return zd.clearFiles(gt)}async getCompletionsAtPosition(ti,gt){if(!e_(ti))return this._languageService.getCompletionsAtPosition(ti,gt,void 0)}async getCompletionEntryDetails(ti,gt,hs){return this._languageService.getCompletionEntryDetails(ti,gt,hs,void 0,void 0,void 0,void 0)}async getSignatureHelpItems(ti,gt,hs){if(!e_(ti))return this._languageService.getSignatureHelpItems(ti,gt,hs)}async getQuickInfoAtPosition(ti,gt){if(!e_(ti))return this._languageService.getQuickInfoAtPosition(ti,gt)}async getDocumentHighlights(ti,gt,hs){if(!e_(ti))return this._languageService.getDocumentHighlights(ti,gt,hs)}async getDefinitionAtPosition(ti,gt){if(!e_(ti))return this._languageService.getDefinitionAtPosition(ti,gt)}async getReferencesAtPosition(ti,gt){if(!e_(ti))return this._languageService.getReferencesAtPosition(ti,gt)}async getNavigationTree(ti){if(!e_(ti))return this._languageService.getNavigationTree(ti)}async getFormattingEditsForDocument(ti,gt){return e_(ti)?[]:this._languageService.getFormattingEditsForDocument(ti,gt)}async getFormattingEditsForRange(ti,gt,hs,Mo){return e_(ti)?[]:this._languageService.getFormattingEditsForRange(ti,gt,hs,Mo)}async getFormattingEditsAfterKeystroke(ti,gt,hs,Mo){return e_(ti)?[]:this._languageService.getFormattingEditsAfterKeystroke(ti,gt,hs,Mo)}async findRenameLocations(ti,gt,hs,Mo,Sg){if(!e_(ti))return this._languageService.findRenameLocations(ti,gt,hs,Mo,Sg)}async getRenameInfo(ti,gt,hs){return e_(ti)?{canRename:!1,localizedErrorMessage:\"Cannot rename in lib file\"}:this._languageService.getRenameInfo(ti,gt,hs)}async getEmitOutput(ti){return e_(ti)?{outputFiles:[],emitSkipped:!0}:this._languageService.getEmitOutput(ti)}async getCodeFixesAtPosition(ti,gt,hs,Mo,Sg){if(e_(ti))return[];let Rf={};try{return this._languageService.getCodeFixesAtPosition(ti,gt,hs,Mo,Sg,Rf)}catch{return[]}}async updateExtraLibs(ti){this._extraLibs=ti}async provideInlayHints(ti,gt,hs){if(e_(ti))return[];let Mo=this._inlayHintsOptions??{},Sg={start:gt,length:hs-gt};try{return this._languageService.provideInlayHints(ti,Sg,Mo)}catch{return[]}}};function Lit(zd,ti){let gt=o8;if(ti.customWorkerPath)if(typeof importScripts>\"u\")console.warn(\"Monaco is not using webworkers for background tasks, and that is needed to support the customWorkerPath flag\");else{self.importScripts(ti.customWorkerPath);let hs=self.customTSWorkerFactory;if(!hs)throw new Error(`The script at ${ti.customWorkerPath} does not add customTSWorkerFactory to self`);gt=hs(o8,oae,$i)}return new gt(zd,ti)}globalThis.ts=aae;return bit(kit);})();\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nreturn moduleExports;\n});\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/loader.js",
    "content": "\"use strict\";/*!-----------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f)\n * Released under the MIT license\n * https://github.com/microsoft/vscode/blob/main/LICENSE.txt\n *-----------------------------------------------------------*/const _amdLoaderGlobal=this,_commonjsGlobal=typeof global==\"object\"?global:{};var AMDLoader;(function(u){u.global=_amdLoaderGlobal;class y{get isWindows(){return this._detect(),this._isWindows}get isNode(){return this._detect(),this._isNode}get isElectronRenderer(){return this._detect(),this._isElectronRenderer}get isWebWorker(){return this._detect(),this._isWebWorker}get isElectronNodeIntegrationWebWorker(){return this._detect(),this._isElectronNodeIntegrationWebWorker}constructor(){this._detected=!1,this._isWindows=!1,this._isNode=!1,this._isElectronRenderer=!1,this._isWebWorker=!1,this._isElectronNodeIntegrationWebWorker=!1}_detect(){this._detected||(this._detected=!0,this._isWindows=y._isWindows(),this._isNode=typeof module<\"u\"&&!!module.exports,this._isElectronRenderer=typeof process<\"u\"&&typeof process.versions<\"u\"&&typeof process.versions.electron<\"u\"&&process.type===\"renderer\",this._isWebWorker=typeof u.global.importScripts==\"function\",this._isElectronNodeIntegrationWebWorker=this._isWebWorker&&typeof process<\"u\"&&typeof process.versions<\"u\"&&typeof process.versions.electron<\"u\"&&process.type===\"worker\")}static _isWindows(){return typeof navigator<\"u\"&&navigator.userAgent&&navigator.userAgent.indexOf(\"Windows\")>=0?!0:typeof process<\"u\"?process.platform===\"win32\":!1}}u.Environment=y})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(u){class y{constructor(r,c,a){this.type=r,this.detail=c,this.timestamp=a}}u.LoaderEvent=y;class m{constructor(r){this._events=[new y(1,\"\",r)]}record(r,c){this._events.push(new y(r,c,u.Utilities.getHighPerformanceTimestamp()))}getEvents(){return this._events}}u.LoaderEventRecorder=m;class p{record(r,c){}getEvents(){return[]}}p.INSTANCE=new p,u.NullLoaderEventRecorder=p})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(u){class y{static fileUriToFilePath(p,h){if(h=decodeURI(h).replace(/%23/g,\"#\"),p){if(/^file:\\/\\/\\//.test(h))return h.substr(8);if(/^file:\\/\\//.test(h))return h.substr(5)}else if(/^file:\\/\\//.test(h))return h.substr(7);return h}static startsWith(p,h){return p.length>=h.length&&p.substr(0,h.length)===h}static endsWith(p,h){return p.length>=h.length&&p.substr(p.length-h.length)===h}static containsQueryString(p){return/^[^\\#]*\\?/gi.test(p)}static isAbsolutePath(p){return/^((http:\\/\\/)|(https:\\/\\/)|(file:\\/\\/)|(\\/))/.test(p)}static forEachProperty(p,h){if(p){let r;for(r in p)p.hasOwnProperty(r)&&h(r,p[r])}}static isEmpty(p){let h=!0;return y.forEachProperty(p,()=>{h=!1}),h}static recursiveClone(p){if(!p||typeof p!=\"object\"||p instanceof RegExp||!Array.isArray(p)&&Object.getPrototypeOf(p)!==Object.prototype)return p;let h=Array.isArray(p)?[]:{};return y.forEachProperty(p,(r,c)=>{c&&typeof c==\"object\"?h[r]=y.recursiveClone(c):h[r]=c}),h}static generateAnonymousModule(){return\"===anonymous\"+y.NEXT_ANONYMOUS_ID+++\"===\"}static isAnonymousModule(p){return y.startsWith(p,\"===anonymous\")}static getHighPerformanceTimestamp(){return this.PERFORMANCE_NOW_PROBED||(this.PERFORMANCE_NOW_PROBED=!0,this.HAS_PERFORMANCE_NOW=u.global.performance&&typeof u.global.performance.now==\"function\"),this.HAS_PERFORMANCE_NOW?u.global.performance.now():Date.now()}}y.NEXT_ANONYMOUS_ID=1,y.PERFORMANCE_NOW_PROBED=!1,y.HAS_PERFORMANCE_NOW=!1,u.Utilities=y})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(u){function y(h){if(h instanceof Error)return h;const r=new Error(h.message||String(h)||\"Unknown Error\");return h.stack&&(r.stack=h.stack),r}u.ensureError=y;class m{static validateConfigurationOptions(r){function c(a){if(a.phase===\"loading\"){console.error('Loading \"'+a.moduleId+'\" failed'),console.error(a),console.error(\"Here are the modules that depend on it:\"),console.error(a.neededBy);return}if(a.phase===\"factory\"){console.error('The factory function of \"'+a.moduleId+'\" has thrown an exception'),console.error(a),console.error(\"Here are the modules that depend on it:\"),console.error(a.neededBy);return}}if(r=r||{},typeof r.baseUrl!=\"string\"&&(r.baseUrl=\"\"),typeof r.isBuild!=\"boolean\"&&(r.isBuild=!1),typeof r.paths!=\"object\"&&(r.paths={}),typeof r.config!=\"object\"&&(r.config={}),typeof r.catchError>\"u\"&&(r.catchError=!1),typeof r.recordStats>\"u\"&&(r.recordStats=!1),typeof r.urlArgs!=\"string\"&&(r.urlArgs=\"\"),typeof r.onError!=\"function\"&&(r.onError=c),Array.isArray(r.ignoreDuplicateModules)||(r.ignoreDuplicateModules=[]),r.baseUrl.length>0&&(u.Utilities.endsWith(r.baseUrl,\"/\")||(r.baseUrl+=\"/\")),typeof r.cspNonce!=\"string\"&&(r.cspNonce=\"\"),typeof r.preferScriptTags>\"u\"&&(r.preferScriptTags=!1),r.nodeCachedData&&typeof r.nodeCachedData==\"object\"&&(typeof r.nodeCachedData.seed!=\"string\"&&(r.nodeCachedData.seed=\"seed\"),(typeof r.nodeCachedData.writeDelay!=\"number\"||r.nodeCachedData.writeDelay<0)&&(r.nodeCachedData.writeDelay=1e3*7),!r.nodeCachedData.path||typeof r.nodeCachedData.path!=\"string\")){const a=y(new Error(\"INVALID cached data configuration, 'path' MUST be set\"));a.phase=\"configuration\",r.onError(a),r.nodeCachedData=void 0}return r}static mergeConfigurationOptions(r=null,c=null){let a=u.Utilities.recursiveClone(c||{});return u.Utilities.forEachProperty(r,(t,e)=>{t===\"ignoreDuplicateModules\"&&typeof a.ignoreDuplicateModules<\"u\"?a.ignoreDuplicateModules=a.ignoreDuplicateModules.concat(e):t===\"paths\"&&typeof a.paths<\"u\"?u.Utilities.forEachProperty(e,(i,s)=>a.paths[i]=s):t===\"config\"&&typeof a.config<\"u\"?u.Utilities.forEachProperty(e,(i,s)=>a.config[i]=s):a[t]=u.Utilities.recursiveClone(e)}),m.validateConfigurationOptions(a)}}u.ConfigurationOptionsUtil=m;class p{constructor(r,c){if(this._env=r,this.options=m.mergeConfigurationOptions(c),this._createIgnoreDuplicateModulesMap(),this._createSortedPathsRules(),this.options.baseUrl===\"\"&&this.options.nodeRequire&&this.options.nodeRequire.main&&this.options.nodeRequire.main.filename&&this._env.isNode){let a=this.options.nodeRequire.main.filename,t=Math.max(a.lastIndexOf(\"/\"),a.lastIndexOf(\"\\\\\"));this.options.baseUrl=a.substring(0,t+1)}}_createIgnoreDuplicateModulesMap(){this.ignoreDuplicateModulesMap={};for(let r=0;r<this.options.ignoreDuplicateModules.length;r++)this.ignoreDuplicateModulesMap[this.options.ignoreDuplicateModules[r]]=!0}_createSortedPathsRules(){this.sortedPathsRules=[],u.Utilities.forEachProperty(this.options.paths,(r,c)=>{Array.isArray(c)?this.sortedPathsRules.push({from:r,to:c}):this.sortedPathsRules.push({from:r,to:[c]})}),this.sortedPathsRules.sort((r,c)=>c.from.length-r.from.length)}cloneAndMerge(r){return new p(this._env,m.mergeConfigurationOptions(r,this.options))}getOptionsLiteral(){return this.options}_applyPaths(r){let c;for(let a=0,t=this.sortedPathsRules.length;a<t;a++)if(c=this.sortedPathsRules[a],u.Utilities.startsWith(r,c.from)){let e=[];for(let i=0,s=c.to.length;i<s;i++)e.push(c.to[i]+r.substr(c.from.length));return e}return[r]}_addUrlArgsToUrl(r){return u.Utilities.containsQueryString(r)?r+\"&\"+this.options.urlArgs:r+\"?\"+this.options.urlArgs}_addUrlArgsIfNecessaryToUrl(r){return this.options.urlArgs?this._addUrlArgsToUrl(r):r}_addUrlArgsIfNecessaryToUrls(r){if(this.options.urlArgs)for(let c=0,a=r.length;c<a;c++)r[c]=this._addUrlArgsToUrl(r[c]);return r}moduleIdToPaths(r){if(this._env.isNode&&this.options.amdModulesPattern instanceof RegExp&&!this.options.amdModulesPattern.test(r))return this.isBuild()?[\"empty:\"]:[\"node|\"+r];let c=r,a;if(!u.Utilities.endsWith(c,\".js\")&&!u.Utilities.isAbsolutePath(c)){a=this._applyPaths(c);for(let t=0,e=a.length;t<e;t++)this.isBuild()&&a[t]===\"empty:\"||(u.Utilities.isAbsolutePath(a[t])||(a[t]=this.options.baseUrl+a[t]),!u.Utilities.endsWith(a[t],\".js\")&&!u.Utilities.containsQueryString(a[t])&&(a[t]=a[t]+\".js\"))}else!u.Utilities.endsWith(c,\".js\")&&!u.Utilities.containsQueryString(c)&&(c=c+\".js\"),a=[c];return this._addUrlArgsIfNecessaryToUrls(a)}requireToUrl(r){let c=r;return u.Utilities.isAbsolutePath(c)||(c=this._applyPaths(c)[0],u.Utilities.isAbsolutePath(c)||(c=this.options.baseUrl+c)),this._addUrlArgsIfNecessaryToUrl(c)}isBuild(){return this.options.isBuild}shouldInvokeFactory(r){return!!(!this.options.isBuild||u.Utilities.isAnonymousModule(r)||this.options.buildForceInvokeFactory&&this.options.buildForceInvokeFactory[r])}isDuplicateMessageIgnoredFor(r){return this.ignoreDuplicateModulesMap.hasOwnProperty(r)}getConfigForModule(r){if(this.options.config)return this.options.config[r]}shouldCatchError(){return this.options.catchError}shouldRecordStats(){return this.options.recordStats}onError(r){this.options.onError(r)}}u.Configuration=p})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(u){class y{constructor(e){this._env=e,this._scriptLoader=null,this._callbackMap={}}load(e,i,s,n){if(!this._scriptLoader)if(this._env.isWebWorker)this._scriptLoader=new h;else if(this._env.isElectronRenderer){const{preferScriptTags:d}=e.getConfig().getOptionsLiteral();d?this._scriptLoader=new m:this._scriptLoader=new r(this._env)}else this._env.isNode?this._scriptLoader=new r(this._env):this._scriptLoader=new m;let l={callback:s,errorback:n};if(this._callbackMap.hasOwnProperty(i)){this._callbackMap[i].push(l);return}this._callbackMap[i]=[l],this._scriptLoader.load(e,i,()=>this.triggerCallback(i),d=>this.triggerErrorback(i,d))}triggerCallback(e){let i=this._callbackMap[e];delete this._callbackMap[e];for(let s=0;s<i.length;s++)i[s].callback()}triggerErrorback(e,i){let s=this._callbackMap[e];delete this._callbackMap[e];for(let n=0;n<s.length;n++)s[n].errorback(i)}}class m{attachListeners(e,i,s){let n=()=>{e.removeEventListener(\"load\",l),e.removeEventListener(\"error\",d)},l=o=>{n(),i()},d=o=>{n(),s(o)};e.addEventListener(\"load\",l),e.addEventListener(\"error\",d)}load(e,i,s,n){if(/^node\\|/.test(i)){let l=e.getConfig().getOptionsLiteral(),d=c(e.getRecorder(),l.nodeRequire||u.global.nodeRequire),o=i.split(\"|\"),_=null;try{_=d(o[1])}catch(f){n(f);return}e.enqueueDefineAnonymousModule([],()=>_),s()}else{let l=document.createElement(\"script\");l.setAttribute(\"async\",\"async\"),l.setAttribute(\"type\",\"text/javascript\"),this.attachListeners(l,s,n);const{trustedTypesPolicy:d}=e.getConfig().getOptionsLiteral();d&&(i=d.createScriptURL(i)),l.setAttribute(\"src\",i);const{cspNonce:o}=e.getConfig().getOptionsLiteral();o&&l.setAttribute(\"nonce\",o),document.getElementsByTagName(\"head\")[0].appendChild(l)}}}function p(t){const{trustedTypesPolicy:e}=t.getConfig().getOptionsLiteral();try{return(e?self.eval(e.createScript(\"\",\"true\")):new Function(\"true\")).call(self),!0}catch{return!1}}class h{constructor(){this._cachedCanUseEval=null}_canUseEval(e){return this._cachedCanUseEval===null&&(this._cachedCanUseEval=p(e)),this._cachedCanUseEval}load(e,i,s,n){if(/^node\\|/.test(i)){const l=e.getConfig().getOptionsLiteral(),d=c(e.getRecorder(),l.nodeRequire||u.global.nodeRequire),o=i.split(\"|\");let _=null;try{_=d(o[1])}catch(f){n(f);return}e.enqueueDefineAnonymousModule([],function(){return _}),s()}else{const{trustedTypesPolicy:l}=e.getConfig().getOptionsLiteral();if(!(/^((http:)|(https:)|(file:))/.test(i)&&i.substring(0,self.origin.length)!==self.origin)&&this._canUseEval(e)){fetch(i).then(o=>{if(o.status!==200)throw new Error(o.statusText);return o.text()}).then(o=>{o=`${o}\n//# sourceURL=${i}`,(l?self.eval(l.createScript(\"\",o)):new Function(o)).call(self),s()}).then(void 0,n);return}try{l&&(i=l.createScriptURL(i)),importScripts(i),s()}catch(o){n(o)}}}}class r{constructor(e){this._env=e,this._didInitialize=!1,this._didPatchNodeRequire=!1}_init(e){this._didInitialize||(this._didInitialize=!0,this._fs=e(\"fs\"),this._vm=e(\"vm\"),this._path=e(\"path\"),this._crypto=e(\"crypto\"))}_initNodeRequire(e,i){const{nodeCachedData:s}=i.getConfig().getOptionsLiteral();if(!s||this._didPatchNodeRequire)return;this._didPatchNodeRequire=!0;const n=this,l=e(\"module\");function d(o){const _=o.constructor;let f=function(v){try{return o.require(v)}finally{}};return f.resolve=function(v,E){return _._resolveFilename(v,o,!1,E)},f.resolve.paths=function(v){return _._resolveLookupPaths(v,o)},f.main=process.mainModule,f.extensions=_._extensions,f.cache=_._cache,f}l.prototype._compile=function(o,_){const f=l.wrap(o.replace(/^#!.*/,\"\")),g=i.getRecorder(),v=n._getCachedDataPath(s,_),E={filename:_};let I;try{const D=n._fs.readFileSync(v);I=D.slice(0,16),E.cachedData=D.slice(16),g.record(60,v)}catch{g.record(61,v)}const C=new n._vm.Script(f,E),P=C.runInThisContext(E),w=n._path.dirname(_),R=d(this),U=[this.exports,R,this,_,w,process,_commonjsGlobal,Buffer],b=P.apply(this.exports,U);return n._handleCachedData(C,f,v,!E.cachedData,i),n._verifyCachedData(C,f,v,I,i),b}}load(e,i,s,n){const l=e.getConfig().getOptionsLiteral(),d=c(e.getRecorder(),l.nodeRequire||u.global.nodeRequire),o=l.nodeInstrumenter||function(f){return f};this._init(d),this._initNodeRequire(d,e);let _=e.getRecorder();if(/^node\\|/.test(i)){let f=i.split(\"|\"),g=null;try{g=d(f[1])}catch(v){n(v);return}e.enqueueDefineAnonymousModule([],()=>g),s()}else{i=u.Utilities.fileUriToFilePath(this._env.isWindows,i);const f=this._path.normalize(i),g=this._getElectronRendererScriptPathOrUri(f),v=!!l.nodeCachedData,E=v?this._getCachedDataPath(l.nodeCachedData,i):void 0;this._readSourceAndCachedData(f,E,_,(I,C,P,w)=>{if(I){n(I);return}let R;C.charCodeAt(0)===r._BOM?R=r._PREFIX+C.substring(1)+r._SUFFIX:R=r._PREFIX+C+r._SUFFIX,R=o(R,f);const U={filename:g,cachedData:P},b=this._createAndEvalScript(e,R,U,s,n);this._handleCachedData(b,R,E,v&&!P,e),this._verifyCachedData(b,R,E,w,e)})}}_createAndEvalScript(e,i,s,n,l){const d=e.getRecorder();d.record(31,s.filename);const o=new this._vm.Script(i,s),_=o.runInThisContext(s),f=e.getGlobalAMDDefineFunc();let g=!1;const v=function(){return g=!0,f.apply(null,arguments)};return v.amd=f.amd,_.call(u.global,e.getGlobalAMDRequireFunc(),v,s.filename,this._path.dirname(s.filename)),d.record(32,s.filename),g?n():l(new Error(`Didn't receive define call in ${s.filename}!`)),o}_getElectronRendererScriptPathOrUri(e){if(!this._env.isElectronRenderer)return e;let i=e.match(/^([a-z])\\:(.*)/i);return i?`file:///${(i[1].toUpperCase()+\":\"+i[2]).replace(/\\\\/g,\"/\")}`:`file://${e}`}_getCachedDataPath(e,i){const s=this._crypto.createHash(\"md5\").update(i,\"utf8\").update(e.seed,\"utf8\").update(process.arch,\"\").digest(\"hex\"),n=this._path.basename(i).replace(/\\.js$/,\"\");return this._path.join(e.path,`${n}-${s}.code`)}_handleCachedData(e,i,s,n,l){e.cachedDataRejected?this._fs.unlink(s,d=>{l.getRecorder().record(62,s),this._createAndWriteCachedData(e,i,s,l),d&&l.getConfig().onError(d)}):n&&this._createAndWriteCachedData(e,i,s,l)}_createAndWriteCachedData(e,i,s,n){let l=Math.ceil(n.getConfig().getOptionsLiteral().nodeCachedData.writeDelay*(1+Math.random())),d=-1,o=0,_;const f=()=>{setTimeout(()=>{_||(_=this._crypto.createHash(\"md5\").update(i,\"utf8\").digest());const g=e.createCachedData();if(!(g.length===0||g.length===d||o>=5)){if(g.length<d){f();return}d=g.length,this._fs.writeFile(s,Buffer.concat([_,g]),v=>{v&&n.getConfig().onError(v),n.getRecorder().record(63,s),f()})}},l*Math.pow(4,o++))};f()}_readSourceAndCachedData(e,i,s,n){if(!i)this._fs.readFile(e,{encoding:\"utf8\"},n);else{let l,d,o,_=2;const f=g=>{g?n(g):--_===0&&n(void 0,l,d,o)};this._fs.readFile(e,{encoding:\"utf8\"},(g,v)=>{l=v,f(g)}),this._fs.readFile(i,(g,v)=>{!g&&v&&v.length>0?(o=v.slice(0,16),d=v.slice(16),s.record(60,i)):s.record(61,i),f()})}}_verifyCachedData(e,i,s,n,l){n&&(e.cachedDataRejected||setTimeout(()=>{const d=this._crypto.createHash(\"md5\").update(i,\"utf8\").digest();n.equals(d)||(l.getConfig().onError(new Error(`FAILED TO VERIFY CACHED DATA, deleting stale '${s}' now, but a RESTART IS REQUIRED`)),this._fs.unlink(s,o=>{o&&l.getConfig().onError(o)}))},Math.ceil(5e3*(1+Math.random()))))}}r._BOM=65279,r._PREFIX=\"(function (require, define, __filename, __dirname) { \",r._SUFFIX=`\n});`;function c(t,e){if(e.__$__isRecorded)return e;const i=function(n){t.record(33,n);try{return e(n)}finally{t.record(34,n)}};return i.__$__isRecorded=!0,i}u.ensureRecordedNodeRequire=c;function a(t){return new y(t)}u.createScriptLoader=a})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(u){class y{constructor(t){let e=t.lastIndexOf(\"/\");e!==-1?this.fromModulePath=t.substr(0,e+1):this.fromModulePath=\"\"}static _normalizeModuleId(t){let e=t,i;for(i=/\\/\\.\\//;i.test(e);)e=e.replace(i,\"/\");for(e=e.replace(/^\\.\\//g,\"\"),i=/\\/(([^\\/])|([^\\/][^\\/\\.])|([^\\/\\.][^\\/])|([^\\/][^\\/][^\\/]+))\\/\\.\\.\\//;i.test(e);)e=e.replace(i,\"/\");return e=e.replace(/^(([^\\/])|([^\\/][^\\/\\.])|([^\\/\\.][^\\/])|([^\\/][^\\/][^\\/]+))\\/\\.\\.\\//,\"\"),e}resolveModule(t){let e=t;return u.Utilities.isAbsolutePath(e)||(u.Utilities.startsWith(e,\"./\")||u.Utilities.startsWith(e,\"../\"))&&(e=y._normalizeModuleId(this.fromModulePath+e)),e}}y.ROOT=new y(\"\"),u.ModuleIdResolver=y;class m{constructor(t,e,i,s,n,l){this.id=t,this.strId=e,this.dependencies=i,this._callback=s,this._errorback=n,this.moduleIdResolver=l,this.exports={},this.error=null,this.exportsPassedIn=!1,this.unresolvedDependenciesCount=this.dependencies.length,this._isComplete=!1}static _safeInvokeFunction(t,e){try{return{returnedValue:t.apply(u.global,e),producedError:null}}catch(i){return{returnedValue:null,producedError:i}}}static _invokeFactory(t,e,i,s){return t.shouldInvokeFactory(e)?t.shouldCatchError()?this._safeInvokeFunction(i,s):{returnedValue:i.apply(u.global,s),producedError:null}:{returnedValue:null,producedError:null}}complete(t,e,i,s){this._isComplete=!0;let n=null;if(this._callback)if(typeof this._callback==\"function\"){t.record(21,this.strId);let l=m._invokeFactory(e,this.strId,this._callback,i);n=l.producedError,t.record(22,this.strId),!n&&typeof l.returnedValue<\"u\"&&(!this.exportsPassedIn||u.Utilities.isEmpty(this.exports))&&(this.exports=l.returnedValue)}else this.exports=this._callback;if(n){let l=u.ensureError(n);l.phase=\"factory\",l.moduleId=this.strId,l.neededBy=s(this.id),this.error=l,e.onError(l)}this.dependencies=null,this._callback=null,this._errorback=null,this.moduleIdResolver=null}onDependencyError(t){return this._isComplete=!0,this.error=t,this._errorback?(this._errorback(t),!0):!1}isComplete(){return this._isComplete}}u.Module=m;class p{constructor(){this._nextId=0,this._strModuleIdToIntModuleId=new Map,this._intModuleIdToStrModuleId=[],this.getModuleId(\"exports\"),this.getModuleId(\"module\"),this.getModuleId(\"require\")}getMaxModuleId(){return this._nextId}getModuleId(t){let e=this._strModuleIdToIntModuleId.get(t);return typeof e>\"u\"&&(e=this._nextId++,this._strModuleIdToIntModuleId.set(t,e),this._intModuleIdToStrModuleId[e]=t),e}getStrModuleId(t){return this._intModuleIdToStrModuleId[t]}}class h{constructor(t){this.id=t}}h.EXPORTS=new h(0),h.MODULE=new h(1),h.REQUIRE=new h(2),u.RegularDependency=h;class r{constructor(t,e,i){this.id=t,this.pluginId=e,this.pluginParam=i}}u.PluginDependency=r;class c{constructor(t,e,i,s,n=0){this._env=t,this._scriptLoader=e,this._loaderAvailableTimestamp=n,this._defineFunc=i,this._requireFunc=s,this._moduleIdProvider=new p,this._config=new u.Configuration(this._env),this._hasDependencyCycle=!1,this._modules2=[],this._knownModules2=[],this._inverseDependencies2=[],this._inversePluginDependencies2=new Map,this._currentAnonymousDefineCall=null,this._recorder=null,this._buildInfoPath=[],this._buildInfoDefineStack=[],this._buildInfoDependencies=[],this._requireFunc.moduleManager=this}reset(){return new c(this._env,this._scriptLoader,this._defineFunc,this._requireFunc,this._loaderAvailableTimestamp)}getGlobalAMDDefineFunc(){return this._defineFunc}getGlobalAMDRequireFunc(){return this._requireFunc}static _findRelevantLocationInStack(t,e){let i=l=>l.replace(/\\\\/g,\"/\"),s=i(t),n=e.split(/\\n/);for(let l=0;l<n.length;l++){let d=n[l].match(/(.*):(\\d+):(\\d+)\\)?$/);if(d){let o=d[1],_=d[2],f=d[3],g=Math.max(o.lastIndexOf(\" \")+1,o.lastIndexOf(\"(\")+1);if(o=o.substr(g),o=i(o),o===s){let v={line:parseInt(_,10),col:parseInt(f,10)};return v.line===1&&(v.col-=53),v}}}throw new Error(\"Could not correlate define call site for needle \"+t)}getBuildInfo(){if(!this._config.isBuild())return null;let t=[],e=0;for(let i=0,s=this._modules2.length;i<s;i++){let n=this._modules2[i];if(!n)continue;let l=this._buildInfoPath[n.id]||null,d=this._buildInfoDefineStack[n.id]||null,o=this._buildInfoDependencies[n.id];t[e++]={id:n.strId,path:l,defineLocation:l&&d?c._findRelevantLocationInStack(l,d):null,dependencies:o,shim:null,exports:n.exports}}return t}getRecorder(){return this._recorder||(this._config.shouldRecordStats()?this._recorder=new u.LoaderEventRecorder(this._loaderAvailableTimestamp):this._recorder=u.NullLoaderEventRecorder.INSTANCE),this._recorder}getLoaderEvents(){return this.getRecorder().getEvents()}enqueueDefineAnonymousModule(t,e){if(this._currentAnonymousDefineCall!==null)throw new Error(\"Can only have one anonymous define call per script file\");let i=null;this._config.isBuild()&&(i=new Error(\"StackLocation\").stack||null),this._currentAnonymousDefineCall={stack:i,dependencies:t,callback:e}}defineModule(t,e,i,s,n,l=new y(t)){let d=this._moduleIdProvider.getModuleId(t);if(this._modules2[d]){this._config.isDuplicateMessageIgnoredFor(t)||console.warn(\"Duplicate definition of module '\"+t+\"'\");return}let o=new m(d,t,this._normalizeDependencies(e,l),i,s,l);this._modules2[d]=o,this._config.isBuild()&&(this._buildInfoDefineStack[d]=n,this._buildInfoDependencies[d]=(o.dependencies||[]).map(_=>this._moduleIdProvider.getStrModuleId(_.id))),this._resolve(o)}_normalizeDependency(t,e){if(t===\"exports\")return h.EXPORTS;if(t===\"module\")return h.MODULE;if(t===\"require\")return h.REQUIRE;let i=t.indexOf(\"!\");if(i>=0){let s=e.resolveModule(t.substr(0,i)),n=e.resolveModule(t.substr(i+1)),l=this._moduleIdProvider.getModuleId(s+\"!\"+n),d=this._moduleIdProvider.getModuleId(s);return new r(l,d,n)}return new h(this._moduleIdProvider.getModuleId(e.resolveModule(t)))}_normalizeDependencies(t,e){let i=[],s=0;for(let n=0,l=t.length;n<l;n++)i[s++]=this._normalizeDependency(t[n],e);return i}_relativeRequire(t,e,i,s){if(typeof e==\"string\")return this.synchronousRequire(e,t);this.defineModule(u.Utilities.generateAnonymousModule(),e,i,s,null,t)}synchronousRequire(t,e=new y(t)){let i=this._normalizeDependency(t,e),s=this._modules2[i.id];if(!s)throw new Error(\"Check dependency list! Synchronous require cannot resolve module '\"+t+\"'. This is the first mention of this module!\");if(!s.isComplete())throw new Error(\"Check dependency list! Synchronous require cannot resolve module '\"+t+\"'. This module has not been resolved completely yet.\");if(s.error)throw s.error;return s.exports}configure(t,e){let i=this._config.shouldRecordStats();e?this._config=new u.Configuration(this._env,t):this._config=this._config.cloneAndMerge(t),this._config.shouldRecordStats()&&!i&&(this._recorder=null)}getConfig(){return this._config}_onLoad(t){if(this._currentAnonymousDefineCall!==null){let e=this._currentAnonymousDefineCall;this._currentAnonymousDefineCall=null,this.defineModule(this._moduleIdProvider.getStrModuleId(t),e.dependencies,e.callback,null,e.stack)}}_createLoadError(t,e){let i=this._moduleIdProvider.getStrModuleId(t),s=(this._inverseDependencies2[t]||[]).map(l=>this._moduleIdProvider.getStrModuleId(l));const n=u.ensureError(e);return n.phase=\"loading\",n.moduleId=i,n.neededBy=s,n}_onLoadError(t,e){const i=this._createLoadError(t,e);this._modules2[t]||(this._modules2[t]=new m(t,this._moduleIdProvider.getStrModuleId(t),[],()=>{},null,null));let s=[];for(let d=0,o=this._moduleIdProvider.getMaxModuleId();d<o;d++)s[d]=!1;let n=!1,l=[];for(l.push(t),s[t]=!0;l.length>0;){let d=l.shift(),o=this._modules2[d];o&&(n=o.onDependencyError(i)||n);let _=this._inverseDependencies2[d];if(_)for(let f=0,g=_.length;f<g;f++){let v=_[f];s[v]||(l.push(v),s[v]=!0)}}n||this._config.onError(i)}_hasDependencyPath(t,e){let i=this._modules2[t];if(!i)return!1;let s=[];for(let l=0,d=this._moduleIdProvider.getMaxModuleId();l<d;l++)s[l]=!1;let n=[];for(n.push(i),s[t]=!0;n.length>0;){let d=n.shift().dependencies;if(d)for(let o=0,_=d.length;o<_;o++){let f=d[o];if(f.id===e)return!0;let g=this._modules2[f.id];g&&!s[f.id]&&(s[f.id]=!0,n.push(g))}}return!1}_findCyclePath(t,e,i){if(t===e||i===50)return[t];let s=this._modules2[t];if(!s)return null;let n=s.dependencies;if(n)for(let l=0,d=n.length;l<d;l++){let o=this._findCyclePath(n[l].id,e,i+1);if(o!==null)return o.push(t),o}return null}_createRequire(t){let e=(i,s,n)=>this._relativeRequire(t,i,s,n);return e.toUrl=i=>this._config.requireToUrl(t.resolveModule(i)),e.getStats=()=>this.getLoaderEvents(),e.hasDependencyCycle=()=>this._hasDependencyCycle,e.config=(i,s=!1)=>{this.configure(i,s)},e.__$__nodeRequire=u.global.nodeRequire,e}_loadModule(t){if(this._modules2[t]||this._knownModules2[t])return;this._knownModules2[t]=!0;let e=this._moduleIdProvider.getStrModuleId(t),i=this._config.moduleIdToPaths(e),s=/^@[^\\/]+\\/[^\\/]+$/;this._env.isNode&&(e.indexOf(\"/\")===-1||s.test(e))&&i.push(\"node|\"+e);let n=-1,l=d=>{if(n++,n>=i.length)this._onLoadError(t,d);else{let o=i[n],_=this.getRecorder();if(this._config.isBuild()&&o===\"empty:\"){this._buildInfoPath[t]=o,this.defineModule(this._moduleIdProvider.getStrModuleId(t),[],null,null,null),this._onLoad(t);return}_.record(10,o),this._scriptLoader.load(this,o,()=>{this._config.isBuild()&&(this._buildInfoPath[t]=o),_.record(11,o),this._onLoad(t)},f=>{_.record(12,o),l(f)})}};l(null)}_loadPluginDependency(t,e){if(this._modules2[e.id]||this._knownModules2[e.id])return;this._knownModules2[e.id]=!0;let i=s=>{this.defineModule(this._moduleIdProvider.getStrModuleId(e.id),[],s,null,null)};i.error=s=>{this._config.onError(this._createLoadError(e.id,s))},t.load(e.pluginParam,this._createRequire(y.ROOT),i,this._config.getOptionsLiteral())}_resolve(t){let e=t.dependencies;if(e)for(let i=0,s=e.length;i<s;i++){let n=e[i];if(n===h.EXPORTS){t.exportsPassedIn=!0,t.unresolvedDependenciesCount--;continue}if(n===h.MODULE){t.unresolvedDependenciesCount--;continue}if(n===h.REQUIRE){t.unresolvedDependenciesCount--;continue}let l=this._modules2[n.id];if(l&&l.isComplete()){if(l.error){t.onDependencyError(l.error);return}t.unresolvedDependenciesCount--;continue}if(this._hasDependencyPath(n.id,t.id)){this._hasDependencyCycle=!0,console.warn(\"There is a dependency cycle between '\"+this._moduleIdProvider.getStrModuleId(n.id)+\"' and '\"+this._moduleIdProvider.getStrModuleId(t.id)+\"'. The cyclic path follows:\");let d=this._findCyclePath(n.id,t.id,0)||[];d.reverse(),d.push(n.id),console.warn(d.map(o=>this._moduleIdProvider.getStrModuleId(o)).join(` => \n`)),t.unresolvedDependenciesCount--;continue}if(this._inverseDependencies2[n.id]=this._inverseDependencies2[n.id]||[],this._inverseDependencies2[n.id].push(t.id),n instanceof r){let d=this._modules2[n.pluginId];if(d&&d.isComplete()){this._loadPluginDependency(d.exports,n);continue}let o=this._inversePluginDependencies2.get(n.pluginId);o||(o=[],this._inversePluginDependencies2.set(n.pluginId,o)),o.push(n),this._loadModule(n.pluginId);continue}this._loadModule(n.id)}t.unresolvedDependenciesCount===0&&this._onModuleComplete(t)}_onModuleComplete(t){let e=this.getRecorder();if(t.isComplete())return;let i=t.dependencies,s=[];if(i)for(let o=0,_=i.length;o<_;o++){let f=i[o];if(f===h.EXPORTS){s[o]=t.exports;continue}if(f===h.MODULE){s[o]={id:t.strId,config:()=>this._config.getConfigForModule(t.strId)};continue}if(f===h.REQUIRE){s[o]=this._createRequire(t.moduleIdResolver);continue}let g=this._modules2[f.id];if(g){s[o]=g.exports;continue}s[o]=null}const n=o=>(this._inverseDependencies2[o]||[]).map(_=>this._moduleIdProvider.getStrModuleId(_));t.complete(e,this._config,s,n);let l=this._inverseDependencies2[t.id];if(this._inverseDependencies2[t.id]=null,l)for(let o=0,_=l.length;o<_;o++){let f=l[o],g=this._modules2[f];g.unresolvedDependenciesCount--,g.unresolvedDependenciesCount===0&&this._onModuleComplete(g)}let d=this._inversePluginDependencies2.get(t.id);if(d){this._inversePluginDependencies2.delete(t.id);for(let o=0,_=d.length;o<_;o++)this._loadPluginDependency(t.exports,d[o])}}}u.ModuleManager=c})(AMDLoader||(AMDLoader={}));var define,AMDLoader;(function(u){const y=new u.Environment;let m=null;const p=function(a,t,e){typeof a!=\"string\"&&(e=t,t=a,a=null),(typeof t!=\"object\"||!Array.isArray(t))&&(e=t,t=null),t||(t=[\"require\",\"exports\",\"module\"]),a?m.defineModule(a,t,e,null,null):m.enqueueDefineAnonymousModule(t,e)};p.amd={jQuery:!0};const h=function(a,t=!1){m.configure(a,t)},r=function(){if(arguments.length===1){if(arguments[0]instanceof Object&&!Array.isArray(arguments[0])){h(arguments[0]);return}if(typeof arguments[0]==\"string\")return m.synchronousRequire(arguments[0])}if((arguments.length===2||arguments.length===3)&&Array.isArray(arguments[0])){m.defineModule(u.Utilities.generateAnonymousModule(),arguments[0],arguments[1],arguments[2],null);return}throw new Error(\"Unrecognized require call\")};r.config=h,r.getConfig=function(){return m.getConfig().getOptionsLiteral()},r.reset=function(){m=m.reset()},r.getBuildInfo=function(){return m.getBuildInfo()},r.getStats=function(){return m.getLoaderEvents()},r.define=p;function c(){if(typeof u.global.require<\"u\"||typeof require<\"u\"){const a=u.global.require||require;if(typeof a==\"function\"&&typeof a.resolve==\"function\"){const t=u.ensureRecordedNodeRequire(m.getRecorder(),a);u.global.nodeRequire=t,r.nodeRequire=t,r.__$__nodeRequire=t}}y.isNode&&!y.isElectronRenderer&&!y.isElectronNodeIntegrationWebWorker?module.exports=r:(y.isElectronRenderer||(u.global.define=p),u.global.require=r)}u.init=c,(typeof u.global.define!=\"function\"||!u.global.define.amd)&&(m=new u.ModuleManager(y,u.createScriptLoader(y),p,r,u.Utilities.getHighPerformanceTimestamp()),typeof u.global.require<\"u\"&&typeof u.global.require!=\"function\"&&r.config(u.global.require),define=function(){return p.apply(null,arguments)},define.amd=p.amd,typeof doNotInitLoader>\"u\"&&c())})(AMDLoader||(AMDLoader={}));\n\n//# sourceMappingURL=../../min-maps/vs/loader.js.map"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco-yaml/monaco-yaml.js",
    "content": "import { configureMonacoYaml } from 'monaco-yaml'\n\nwindow.configureMonacoYaml = configureMonacoYaml;\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco-yaml/yaml.worker.js",
    "content": "import 'monaco-yaml/yaml.worker.js';\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco-yaml/yaml.worker.min.js.LICENSE.txt",
    "content": "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\n"
  },
  {
    "path": "modules/backend/vuecomponents/monacoeditor/partials/_monacoeditor.php",
    "content": "<div\n    class=\"flex-layout-column component-backend-monaco-editor\"\n    :class=\"cssClass\"\n    data-configuration=\"<?= e($configuration) ?>\"\n>\n    <div class=\"flex-layout-item fix\" v-if=\"showTabs\">\n        <backend-tabs\n            :tabs=\"editorTabs\"\n            :closeable=\"false\"\n            :no-panes=\"true\"\n            :container-css-class=\"tabsContainerCssClass\"\n            :tooltips-enabled=\"false\"\n            tabs-style=\"monaco-editor\"\n            @tabselected=\"onTabSelected\"\n        ></backend-tabs>\n    </div>\n\n    <div class=\"flex-layout-item stretch position-relative h-100\" style=\"overflow: hidden\">\n        <div\n            class=\"flex-layout-column fill-container\"\n            :class=\"editorContainerCssClass\"\n            ref=\"editorContainer\"\n            @dragover.capture=\"onDragOver\"\n            @drop.capture=\"onDragDrop\"\n        ></div>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/popover/assets/js/popover.js",
    "content": "/*\n * Vue popover implementation\n */\nexport default {\n    props: {\n        closeByEsc: {\n            type: Boolean,\n            default: true\n        },\n        containerCssClass: {\n            type: String,\n            default: ''\n        },\n        closeByOverlayClick: {\n            type: Boolean,\n            default: true\n        },\n        baseZIndex: {\n            type: Number,\n            default: 600\n        },\n        position: {\n            type: String,\n            default: 'bottom-right',\n            validator: function (value) {\n                return ['bottom-right'].indexOf(value) !== -1;\n            }\n        },\n        alwaysVisible: {\n            type: Boolean,\n            default: false\n        }\n    },\n    data: function () {\n        return {\n            basePopoverZindex: 600,\n            visible: false,\n            in: false,\n            zIndex: 600,\n            offset: {\n                left: 0,\n                top: 0\n            },\n            componentUid: null\n        };\n    },\n    computed: {\n        containerStyle() {\n            let result = {\n                'z-index': this.zIndex\n            };\n\n            if (this.alwaysVisible && !this.visible) {\n                result.display = 'none';\n            }\n\n            return result;\n        },\n\n        popoverStyle() {\n            const result = {\n                top: this.offset.top + 'px',\n                left: this.offset.left + 'px'\n            };\n\n            return result;\n        },\n\n        containerCssClassFull() {\n            let result = this.containerCssClass;\n\n            if (this.in) {\n                result += ' show ';\n            }\n\n            if (this.position === 'bottom-right') {\n                result += ' placement-bottom placement-bottom-right';\n            }\n\n            return result;\n        },\n\n        isVisible() {\n            return this.visible;\n        }\n    },\n    methods: {\n        show(triggerElement) {\n            if (!triggerElement) {\n                throw new Error('Popover trigger element is not provided');\n            }\n\n            this.offset.top = 0;\n            this.offset.left = 0;\n\n            this.visible = true;\n            Vue.nextTick(_ => {\n                this.in = true;\n                this.loadPosition(triggerElement);\n            });\n\n            $(document.body).on('keydown', this.onKeyDown);\n        },\n\n        hide(byEscape) {\n            $(document.body).off('keydown', this.onKeyDown);\n            this.in = false;\n\n            setTimeout(_ => {\n                this.visible = false;\n                $.oc.modalFocusManager.pop();\n                Vue.nextTick(_ => this.$emit('hidden', byEscape));\n            }, 300);\n        },\n\n        loadPosition(triggerElement) {\n            Vue.nextTick(_ => {\n                this.calculatePosition(triggerElement);\n                $.oc.modalFocusManager.push(this.onFocusIn, 'popover', this.componentUid, true);\n                this.zIndex = this.basePopoverZindex + $.oc.modalFocusManager.getNumberOfType('popover');\n                this.$emit('shown');\n            });\n        },\n\n        calculatePosition(triggerElement) {\n            const relativeOffset = $.oc.vueUtils.getRelativeOffset(triggerElement, this.$refs.popover);\n            const triggerHeight = $(triggerElement).outerHeight();\n            const triggerWidth = $(triggerElement).outerWidth();\n            const containerWidth = $(this.$refs.popover).width();\n\n            this.offset.top = relativeOffset.top + triggerHeight + 10;\n            this.offset.left = relativeOffset.left + triggerWidth - containerWidth;\n        },\n\n        focusDefaultControl() {\n            let defaultFocus = $(this.$refs.content).find('[data-default-focus]').first();\n            setTimeout(_ => defaultFocus.focus(), 100);\n        },\n\n        onKeyDown(ev) {\n            if (!$.oc.modalFocusManager.isUidTop(this.componentUid)) {\n                return;\n            }\n\n            if (ev.keyCode == 27) {\n                if (!this.closeByEsc) {\n                    return;\n                }\n\n                const event = $.Event('escapepressed');\n\n                this.$emit('escapepressed', event);\n                if (!event.isDefaultPrevented()) {\n                    this.hide(true);\n\n                    ev.stopPropagation();\n                    ev.preventDefault();\n                }\n            }\n\n            if (ev.keyCode == 13) {\n                this.$emit('enterkey', ev);\n            }\n        },\n\n        onFocusIn(ev) {\n            if (!ev) {\n                const event = $.Event('setdefaultfocus');\n\n                this.$emit('setdefaultfocus', event);\n                if (event.isDefaultPrevented()) {\n                    return;\n                }\n\n                this.focusDefaultControl();\n\n                return;\n            }\n\n            if (!this.isModal) {\n                return;\n            }\n\n            if (\n                document !== ev.target &&\n                this.$refs.content !== ev.target &&\n                this.$el !== ev.target &&\n                !this.$refs.content.contains(ev.target)\n            ) {\n                this.focusDefaultControl();\n\n                return false;\n            }\n        },\n\n        onOverlayClick(ev) {\n            if (!this.visible) {\n                return;\n            }\n\n            const $popover = $(this.$refs.popover);\n            if ($popover.has(ev.target).length) {\n                return;\n            }\n\n            if (this.$refs.popover == ev.target) {\n                return;\n            }\n\n            if (this.closeByOverlayClick) {\n                this.hide(true);\n                return;\n            }\n        }\n    },\n    mounted() {\n        this.basePopoverZindex = this.baseZIndex;\n        this.componentUid = $.oc.domIdManager.generate('popover-uid');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/popover/partials/_popover.php",
    "content": "<div class=\"popover-overlay-container\" v-if=\"visible || alwaysVisible\" @click=\"onOverlayClick\" :style=\"containerStyle\">\n    <div class=\"control-popover fade\" ref=\"popover\" :class=\"containerCssClassFull\" :style=\"popoverStyle\">\n        <div>\n            <slot></slot>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/richeditor/assets/css/_editor-styles.css",
    "content": ".component-backend-richeditor {\n    .fr-box.fr-basic .fr-element.fr-view {\n        padding: 30px 40px;\n        line-height: 150%;\n        font-family: Arial, Helvetica, sans-serif;\n        font-size: 14px;\n\n        /* Base editor styles */\n\n        a {\n            text-decoration: underline;\n            color: var(--bs-link-color);\n        }\n\n        h1 {\n            font-size: 34px;\n            font-weight: normal;\n            margin-bottom: 20px;\n        }\n\n        h2 {\n            font-size: 26px;\n            font-weight: normal;\n            margin-bottom: 20px;\n        }\n\n        h3 {\n            font-size: 21px;\n            font-weight: normal;\n            margin-bottom: 20px;\n        }\n\n        h4 {\n            font-size: 18px;\n            font-weight: normal;\n            margin: 20px 0;\n        }\n\n        h5 {\n            font-size: 16px;\n            font-weight: normal;\n            color: #434343;\n        }\n\n        strong {\n            font-weight: 700;\n        }\n\n        pre {\n            white-space: pre-wrap;\n            word-wrap: break-word;\n            padding: 5px 10px;\n            border-radius: 4px;\n        }\n\n        code {\n            background: #eee;\n            padding: 0px 3px 2px;\n            display: inline-block;\n            border-radius: 4px;\n        }\n\n        blockquote {\n            border-left: solid 2px #5e35b1;\n            margin-left: 0;\n            padding-left: 5px;\n            color: #5e35b1;\n            font-size: inherit;\n\n            blockquote {\n                border-color: #00bcd4;\n                color: #00bcd4;\n\n                blockquote {\n                    border-color: #43a047;\n                    color: #43a047;\n                }\n            }\n        }\n\n        table {\n            border: none;\n            border-collapse: collapse;\n            empty-cells: show;\n            max-width: 100%;\n            margin-bottom: 10px;\n\n            td,\n            th {\n                border: 1px solid #ddd;\n                padding: 5px;\n\n                &:empty {\n                    height: 20px;\n                }\n            }\n\n            th {\n                background: #e6e6e6;\n            }\n        }\n\n        hr {\n            clear: both;\n            user-select: none;\n            page-break-after: always;\n        }\n\n        /* File attachment link */\n\n        a.fr-file {\n            position: relative;\n\n            &:before {\n                font-family: 'octo-icon' !important;\n                speak: none;\n                font-style: normal;\n                font-weight: normal;\n                font-variant: normal;\n                text-transform: none;\n                line-height: 1;\n                -webkit-font-smoothing: antialiased;\n                -moz-osx-font-smoothing: grayscale;\n                text-decoration: none;\n                display: inline-block;\n                position: relative;\n                vertical-align: middle;\n                content: \"\\e92a\";\n            }\n\n            &:after {\n                display: none;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditor/assets/css/iframestyles.css",
    "content": "body {\n    padding: 10px 10px;\n    line-height: 150%;\n    font-family: Arial, Helvetica, sans-serif;\n    font-size: 14px;\n\n    a {\n        text-decoration: underline;\n        color: #3498db;\n    }\n\n    h1 {\n        font-size: 34px;\n        font-weight: normal;\n        margin-bottom: 20px;\n    }\n\n    h2 {\n        font-size: 26px;\n        font-weight: normal;\n        margin-bottom: 20px;\n    }\n\n    h3 {\n        font-size: 21px;\n        font-weight: normal;\n        margin-bottom: 20px;\n    }\n\n    h4 {\n        font-size: 18px;\n        font-weight: normal;\n        margin: 20px 0;\n    }\n\n    h5 {\n        font-size: 16px;\n        font-weight: normal;\n        color: #434343;\n    }\n\n    strong {\n        font-weight: 700;\n    }\n\n    pre {\n        white-space: pre-wrap;\n        word-wrap: break-word;\n        padding: 5px 10px;\n        border-radius: 4px;\n    }\n\n    code {\n        background: #eee;\n        padding: 0px 3px 2px;\n        display: inline-block;\n        border-radius: 4px;\n    }\n\n    blockquote {\n        border-left: solid 2px #5e35b1;\n        margin-left: 0;\n        padding-left: 5px;\n        color: #5e35b1;\n        font-size: inherit;\n\n        blockquote {\n            border-color: #00bcd4;\n            color: #00bcd4;\n\n            blockquote {\n                border-color: #43a047;\n                color: #43a047;\n            }\n        }\n    }\n\n    table {\n        border: none;\n        border-collapse: collapse;\n        empty-cells: show;\n        max-width: 100%;\n        margin-bottom: 10px;\n\n        td,\n        th {\n            border: 1px solid #ddd;\n            padding: 5px;\n\n            &:empty {\n                height: 20px;\n            }\n        }\n\n        th {\n            background: #e6e6e6;\n        }\n    }\n\n    hr {\n        clear: both;\n        user-select: none;\n        page-break-after: always;\n    }\n\n    a.fr-file {\n        position: relative;\n\n        &:before {\n            font-family: 'octo-icon' !important;\n            speak: none;\n            font-style: normal;\n            font-weight: normal;\n            font-variant: normal;\n            text-transform: none;\n            line-height: 1;\n            -webkit-font-smoothing: antialiased;\n            -moz-osx-font-smoothing: grayscale;\n            text-decoration: none;\n            display: inline-block;\n            position: relative;\n            vertical-align: middle;\n            content: \"\\e92a\";\n        }\n\n        &:after {\n            display: none;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditor/assets/css/richeditor.css",
    "content": "@import \"_editor-styles.css\";\n\n.component-backend-richeditor {\n    position: relative;\n\n    .field-richeditor {\n        border: none;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditor/assets/js/richeditor.js",
    "content": "function initFroala(component) {\n    const options = JSON.parse(component.$el.getAttribute('data-configuration'));\n    const $textarea = $(component.$refs.textarea);\n    let froalaOptions = {\n        ...component.editorOptions,\n        editorClass: 'control-richeditor',\n        language: options.editorLang,\n        toolbarSticky: false\n    };\n\n    if (component.useLineBreaks) {\n        froalaOptions.enter = $.FroalaEditor.ENTER_BR;\n    }\n\n    if (Array.isArray(component.toolbarButtons) && component.toolbarButtons.length > 0) {\n        froalaOptions.toolbarButtons = component.toolbarButtons;\n    }\n    else {\n        if (options.globalToolbarButtons) {\n            froalaOptions.toolbarButtons = options.globalToolbarButtons;\n        }\n        else {\n            froalaOptions.toolbarButtons = component.defaultButtons;\n        }\n    }\n\n    froalaOptions.imageStyles = options.imageStyles\n        ? options.imageStyles\n        : {\n              'oc-img-rounded': 'Rounded',\n              'oc-img-bordered': 'Bordered'\n          };\n\n    froalaOptions.linkStyles = options.linkStyles\n        ? options.linkStyles\n        : {\n              'oc-link-green': 'Green',\n              'oc-link-strong': 'Thick'\n          };\n\n    froalaOptions.paragraphFormat = options.paragraphFormat\n        ? options.paragraphFormat\n        : {\n          'N': 'Normal',\n          'H1': 'Heading 1',\n          'H2': 'Heading 2',\n          'H3': 'Heading 3',\n          'H4': 'Heading 4',\n          'PRE': 'Code'\n        }\n\n    froalaOptions.paragraphStyles = options.paragraphStyles\n        ? options.paragraphStyles\n        : {\n              'oc-text-gray': 'Gray',\n              'oc-text-bordered': 'Bordered',\n              'oc-text-spaced': 'Spaced',\n              'oc-text-uppercase': 'Uppercase'\n          };\n\n    froalaOptions.inlineStyles = options.inlineStyles\n        ? options.inlineStyles\n        : {\n            'oc-class-code': 'Code',\n            'oc-class-highlighted': 'Highlighted',\n            'oc-class-transparency': 'Transparent'\n          };\n\n    froalaOptions.tableStyles = options.tableStyles\n        ? options.tableStyles\n        : {\n              'oc-dashed-borders': 'Dashed Borders',\n              'oc-alternate-rows': 'Alternate Rows'\n          };\n\n    froalaOptions.tableCellStyles = options.tableCellStyles\n        ? options.tableCellStyles\n        : {\n              'oc-cell-highlighted': 'Highlighted',\n              'oc-cell-thick-border': 'Thick'\n          };\n\n    froalaOptions.toolbarButtonsMD = froalaOptions.toolbarButtons;\n    froalaOptions.toolbarButtonsSM = froalaOptions.toolbarButtons;\n    froalaOptions.toolbarButtonsXS = froalaOptions.toolbarButtons;\n\n    if (options.allowEmptyTags) {\n        froalaOptions.htmlAllowedEmptyTags = options.allowEmptyTags.split(/[\\s,]+/);\n    }\n\n    if (options.allowTags) {\n        froalaOptions.htmlAllowedTags = options.allowTags.split(/[\\s,]+/);\n    }\n\n    if (options.allowAttrs) {\n        froalaOptions.htmlAllowedAttrs = $.FroalaEditor.DEFAULTS.htmlAllowedAttrs.concat(options.allowAttrs.split(/[\\s,]+/));\n    }\n\n    if (options.noWrapTags) {\n        froalaOptions.htmlDoNotWrapTags = options.noWrapTags.split(/[\\s,]+/);\n    }\n\n    if (options.removeTags) {\n        froalaOptions.htmlRemoveTags = options.removeTags.split(/[\\s,]+/);\n    }\n\n    froalaOptions.lineBreakerTags = options.lineBreakerTags\n        ? options.lineBreakerTags.split(/[\\s,]+/)\n        : ['figure, table, hr, iframe, form, dl'];\n\n    froalaOptions.shortcutsEnabled = ['show', 'bold', 'italic', 'underline', 'indent', 'outdent', 'undo', 'redo'];\n\n    // File upload\n    froalaOptions.imageUploadURL = froalaOptions.fileUploadURL = window.location;\n    froalaOptions.imageUploadParam = froalaOptions.fileUploadParam = 'file_data';\n    froalaOptions.imageUploadParams = froalaOptions.fileUploadParams = {\n        X_OCTOBER_MEDIA_MANAGER_QUICK_UPLOAD: 1,\n        _token: $('meta[name=\"csrf-token\"]').attr('content')\n    };\n\n    var placeholder = component.placeholder;\n    froalaOptions.placeholderText = placeholder ? placeholder : '';\n\n    var fieldEl = component.$el.closest('.field-richeditor');\n    if (fieldEl && !fieldEl.classList.contains('stretch')) {\n        froalaOptions.height = $('.height-indicator', fieldEl).height();\n    }\n    else {\n        froalaOptions.height = Infinity;\n    }\n\n    froalaOptions.iframeStyleFiles = [options.iframeStylesFile];\n\n    if (component.fullPage) {\n        froalaOptions.fullPage = true;\n    }\n\n    if (!options.useMediaManager) {\n        delete $.FroalaEditor.PLUGINS.mediaManager;\n    }\n\n    if (!oc.pageLookup) {\n        delete $.FroalaEditor.PLUGINS.pageLinks;\n    }\n\n    // $textarea.on('froalaEditor.initialized.richeditor', component.initialized);\n    $textarea.on('froalaEditor.contentChanged.richeditor', component.onChange);\n    $textarea.on('froalaEditor.focus.richeditor', component.onFocus);\n    $textarea.on('froalaEditor.blur.richeditor', component.onBlur);\n    $textarea.on('froalaEditor.image.uploaded.richeditor', component.onImageUploaded);\n    $textarea.closest('form').on('oc.beforeRequest', component.onFormBeforeRequest);\n    $(document).on('vue.beforeRequest', component.onVueFormBeforeRequest);\n    // $textarea.on('froalaEditor.html.get.richeditor', this.proxy(this.onSyncContent));\n    // $textarea.on('froalaEditor.html.set.richeditor', this.proxy(this.onSetContent));\n\n    $textarea.froalaEditor(froalaOptions);\n\n    component.editor = Vue.markRaw($textarea.data('froala.editor'));\n\n    if (component.readOnly) {\n        component.editor.edit.off();\n    }\n\n    // this.$el.on('keydown', '.fr-view figure', this.proxy(this.onFigureKeydown));\n}\n\nexport default {\n    props: {\n        fullHeight: {\n            type: Boolean,\n            default: true\n        },\n        readOnly: Boolean,\n        useLineBreaks: Boolean,\n        editorOptions: Object,\n        toolbarButtons: Array,\n        fullPage: {\n            type: Boolean,\n            default: false\n        },\n        containerCssClass: {\n            type: String,\n            default: ''\n        },\n        modelValue: String,\n        placeholder: String\n    },\n    data: function() {\n        return {\n            editorId: $.oc.domIdManager.generate('richeditor'),\n            defaultButtons: oc.richEditorButtons,\n            editor: null,\n            lastCachedValue: this.modelValue\n        };\n    },\n    computed: {\n        cssClass: function computeCssClass() {\n            var result = '';\n\n            if (this.fullHeight) {\n                result += ' full-height-strict';\n            }\n\n            result += ' ' + this.containerCssClass;\n\n            return result;\n        }\n    },\n    methods: {\n        getEditor: function getEditor() {\n            return this.editor;\n        },\n\n        onChange: function onChange() {\n            this.lastCachedValue = this.editor.html.get();\n            this.$emit('update:modelValue', this.lastCachedValue);\n        },\n\n        onFocus: function onFocus() {\n            this.$emit('focus');\n        },\n\n        onBlur: function onBlur() {\n            this.$emit('blur');\n        },\n\n        onFormBeforeRequest: function onFormBeforeRequest() {\n            const $textarea = $(this.$refs.textarea).closest('div.field-richeditor.vue-mode').find('[data-richeditor-textarea]');\n            $textarea.val(this.editor.html.get());\n        },\n\n        onVueFormBeforeRequest: function onVueFormBeforeRequest() {\n            this.onChange();\n        },\n\n        onImageUploaded: function onImageUploaded(ev, editor, response) {\n            try {\n                var data = JSON.parse(response);\n                if (data.error) {\n                    oc.flashMsg({ text: data.error, class: 'error' });\n                    editor.image.hideProgressBar(true);\n                    editor.image.remove();\n                    editor.edit.on();\n                    return false;\n                }\n            }\n            catch (e) {}\n        }\n    },\n    mounted: function onMounted() {\n        Vue.nextTick(() => {\n            initFroala(this);\n            this.editor.html.set(this.modelValue);\n        });\n    },\n    beforeUnmount: function beforeUnmount() {\n        const $textarea = $(this.$refs.textarea);\n\n        if (this.editor) {\n            $textarea.off('.richeditor');\n            $textarea.froalaEditor('destroy');\n        }\n\n        $textarea.closest('form').off('oc.beforeRequest', this.onFormBeforeRequest);\n        $(document).off('vue.beforeRequest', this.onVueFormBeforeRequest);\n\n        this.editor = null;\n    },\n    watch: {\n        modelValue: function onValueChanged(newValue, oldValue) {\n            if (!this.editor) {\n                return;\n            }\n\n            if (this.lastCachedValue == newValue) {\n                return;\n            }\n\n            if (newValue === null) {\n                newValue = '';\n            }\n\n            this.editor.html.set(newValue);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditor/partials/_richeditor.php",
    "content": "<div\n    class=\"component-backend-richeditor flex-layout-column\"\n    :class=\"cssClass\"\n    data-configuration=\"<?= e($configuration) ?>\"\n>\n    <div class=\"flex-layout-item field-richeditor stretch relative\" data-richeditor-vue>\n        <textarea ref=\"textarea\" v-bind:id=\"editorId\" class=\"editor-element\"></textarea>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/css/_formwidget.css",
    "content": ".field-richeditor {\n    &.vue-mode {\n        border: none;\n        box-shadow: none !important;\n        position: relative;\n\n        textarea[data-richeditor-textarea] {\n            display: none;\n        }\n\n        .editor-write {\n            border: 1px solid var(--bs-border-color);\n            position: relative;\n            transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n            border-radius: 4px;\n\n            &.editor-focus {\n                border: 1px solid var(--oc-border-focus);\n            }\n        }\n\n        &.size-adaptive {\n            .editor-write {\n                border: none!important;\n            }\n        }\n\n        &.size-tiny .editor-write {\n            min-height: 95px;\n        }\n\n        &.size-small .editor-write {\n            min-height: 145px;\n        }\n\n        &.size-large .editor-write {\n            min-height: 245px;\n        }\n\n        &.size-huge .editor-write {\n            min-height: 295px;\n        }\n\n        &.size-giant .editor-write {\n            min-height: 395px;\n        }\n\n        &.stretch .editor-write {\n            float: none;\n            height: calc(100%);\n            position: relative;\n            min-height: 0;\n        }\n\n        .height-indicator {\n            display: none;\n        }\n\n        div.no-resizing-ui {\n            .component-backend-richeditor {\n                .fr-box.fr-basic .fr-element.fr-view {\n                    padding: 10px;\n                }\n            }\n        }\n\n        .component-backend-document {\n            .document-content-container {\n                border-bottom-right-radius: 4px !important;\n                border-bottom-left-radius: 4px !important;\n            }\n\n            .document-header-container {\n                display: none !important;\n            }\n        }\n    }\n}\n\n.fancy-layout {\n    .field-richeditor.vue-mode {\n        border-left: none!important;\n\n        .field-richeditor {\n            border-left: none!important;\n        }\n\n        .editor-write {\n            border: none;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/css/_resizing.css",
    "content": ".component-backend-richeditor-document-connector {\n    .top-ruler {\n        background-color: var(--oc-document-ruler-bg);\n        height: 14px;\n        border-bottom: var(--oc-document-ruler-bg) 1px solid;\n\n        .width-indicator {\n            height: 13px;\n            max-width: 100% !important;\n            background: var(--oc-document-ruler-color);\n            position: relative;\n\n            .width-tick {\n                position: absolute;\n                width: 1px;\n                background: var(--oc-document-ruler-tick);\n\n                &.tick-major {\n                    top: 2px;\n                    height: 9px;\n                }\n\n                &.tick-minor {\n                    top: 5px;\n                    height: 3px;\n                }\n            }\n\n            .width-drag-handle {\n                width: 15px;\n                height: 0;\n                display: block;\n                content: '';\n                border-left: 7.5px solid transparent;\n                border-right: 7.5px solid transparent;\n                border-top: 8px solid #3498DB;\n                border-bottom-width: 0;\n                position: absolute;\n                right: -7px;\n                bottom: 0;\n                opacity: 0.85;\n                cursor: ew-resize;\n            }\n        }\n    }\n\n    &.resizing-ui {\n        .fr-box.fr-basic {\n            background-color: var(--bs-body-bg);\n        }\n\n        .fr-wrapper {\n            background: var(--oc-form-control-bg);\n            color: var(--bs-body-color);\n            box-shadow: 0 0 5px 3px rgba(var(--bs-body-color-rgb), 0.05);\n            display: block;\n            max-width: 100% !important;\n            left: 50% !important;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/css/richeditordocumentconnector.css",
    "content": "@import \"_resizing.css\";\n@import \"_formwidget.css\";\n\n.component-backend-richeditor-document-connector {\n    div.richeditor-container {\n        display: block;\n        position: relative;\n    }\n\n    div.codeeditor-container {\n        display: none;\n    }\n\n    &.code-editing-mode {\n        div.richeditor-container {\n            display: none;\n        }\n\n        div.codeeditor-container {\n            display: block;\n        }\n    }\n\n    .component-backend-richeditor {\n        position: absolute;\n        width: 100%;\n        height: 100%;\n\n        .fr-box {\n            position: absolute !important;\n        }\n\n        .fr-toolbar {\n            height: 0;\n            padding: 0;\n            border: none;\n\n            > button,\n            > div.fr-dropdown-menu,\n            > div.fr-separator,\n            > div.fr-btn-wrap {\n                display: none;\n            }\n        }\n\n        .fr-popup {\n            top: 0 !important;\n        }\n    }\n\n    iframe.fr-iframe {\n        min-height: 100%;\n    }\n}\n\nbody .fr-popup {\n    border: var(--oc-popup-border) !important;\n    border-radius: 8px;\n    box-shadow: 0 0 32px rgba(67, 86, 100, 0.2) !important;\n    background-color: var(--oc-popup-bg);\n\n    .fr-buttons {\n        border-bottom: none !important;\n\n        &:empty {\n            border-bottom: none;\n        }\n    }\n\n    .fr-arrow {\n        display: none;\n    }\n\n    .fr-action-buttons {\n        padding: 5px 0;\n        height: auto;\n    }\n}\n\nbody.richeditor-document-connector-resizing {\n    * {\n        user-select: none;\n        cursor: col-resize !important;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/js/formwidget.js",
    "content": "class FormWidget\n{\n    constructor(element, options, changeCallback) {\n        this.element = element;\n        this.changeCallback = changeCallback;\n\n        // Create wrapper element for Vue app\n        this.wrapperEl = document.createElement('div');\n        element.parentNode.appendChild(this.wrapperEl);\n\n        // Create and mount Vue 3 app after page scripts have loaded\n        const self = this;\n        oc.pageReady().then(() => {\n            this.app = oc.createVueApp({\n                data() {\n                    return {\n                        textarea: element,\n                        useMediaManager: options.useMediaManager,\n                        lang: $(element).closest('.field-richeditor').data(),\n                        options: options\n                    };\n                },\n                template: '<backend-richeditor-document-connector-formwidgetconnector ref=\"connector\" :textarea=\"textarea\" :use-media-manager=\"useMediaManager\" :lang=\"lang\" :options=\"options\" @change=\"onChange\" @focus=\"onFocus\" @blur=\"onBlur\" />',\n                methods: {\n                    onChange() {\n                        if (self.changeCallback) {\n                            self.changeCallback();\n                        }\n                    },\n                    onFocus() {\n                        $(element).closest('.editor-write').addClass('editor-focus');\n                    },\n                    onBlur() {\n                        $(element).closest('.editor-write').removeClass('editor-focus');\n                    }\n                }\n            });\n\n            this.vm = this.app.mount(this.wrapperEl);\n            this.element.addEventListener('change', this.onChangeTextarea);\n        });\n    }\n\n    onChangeTextarea = () => {\n        this.setContent(this.element.value);\n    }\n\n    get connectorInstance() {\n        return this.vm?.$refs?.connector;\n    }\n\n    getEditor() {\n        if (this.connectorInstance) {\n            return this.connectorInstance.getEditor();\n        }\n    }\n\n    setContent(str) {\n        if (this.connectorInstance) {\n            this.connectorInstance.setContent(str);\n        }\n    }\n\n    remove() {\n        this.element.removeEventListener('change', this.onChangeTextarea);\n\n        if (this.app) {\n            this.app.unmount();\n            $(this.wrapperEl).remove();\n        }\n\n        this.app = null;\n        this.vm = null;\n        this.wrapperEl = null;\n        this.element = null;\n    }\n}\n\nexport default FormWidget;"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/js/formwidgetconnector.js",
    "content": "export default {\n    props: {\n        textarea: null,\n        lang: {},\n        useMediaManager: {\n            type: Boolean,\n            default: false\n        },\n        options: Object\n    },\n    data: function () {\n        const toolbarExtensionPoint = [];\n\n        return {\n            toolbarExtensionPoint,\n            fullScreen: false,\n            value: ''\n        };\n    },\n    computed: {\n        toolbarElements: function computeToolbarElements() {\n            return [\n                this.toolbarExtensionPoint,\n                {\n                    type: 'button',\n                    icon: this.fullScreen ? 'icon-fullscreen-collapse' : 'icon-fullscreen',\n                    command: 'document:toggleFullscreen',\n                    pressed: this.fullScreen,\n                    fixedRight: true,\n                    tooltip: this.lang.langFullscreen\n                }\n            ];\n        },\n\n        editorOptions: function computeEditorOptions() {\n            if (typeof this.options.editorOptions !== 'object') {\n                return {};\n            }\n\n            return this.options.editorOptions;\n        },\n\n        toolbarButtons: function computeToolbarButtons() {\n            if (typeof this.options.toolbarButtons !== 'string') {\n                return [];\n            }\n\n            return this.options.toolbarButtons.split(',').map((button) => {\n                return button.trim();\n            });\n        },\n\n        fullPage: function computeFullPage() {\n            return !!this.options.fullpage;\n        },\n\n        readOnly: function computeReadOnly() {\n            return this.options.readOnly;\n        },\n\n        externalToolbarAppState: function computeExternalToolbarAppState() {\n            return this.options.externalToolbarAppState;\n        },\n\n        toolbarExtensionPointProxy: function computeToolbarExtensionPointProxy() {\n            if (!this.options.externalToolbarAppState) {\n                return this.toolbarExtensionPoint;\n            }\n\n            const point = $.oc.vueUtils.getToolbarExtensionPoint(\n                this.options.externalToolbarAppState,\n                this.textarea\n            );\n\n            return point ? point.state : this.toolbarExtensionPoint;\n        },\n\n        hasExternalToolbar: function computeHasExternalToolbar() {\n            return !!this.options.externalToolbarAppState;\n        },\n\n        showMargins: function computeShowMargins() {\n            return this.options.showMargins ? true : false;\n        }\n    },\n    mounted: function onMounted() {\n        this.value = this.textarea.value;\n    },\n    methods: {\n        getEditor: function getEditor() {\n            return this.$refs.richeditor.getEditor();\n        },\n\n        setContent: function setContent(str) {\n            this.value = str;\n        },\n\n        onToolbarCommand: function onToolbarCommand(cmd, ev) {\n            if (cmd == 'document:toggleFullscreen') {\n                this.fullScreen = !this.fullScreen;\n                return;\n            }\n\n            // Forward toolbar commands to the richeditor document connector\n            const connector = this.$refs.documentConnector;\n            if (connector && connector.internalEventBus) {\n                connector.internalEventBus.emit('toolbarcmd', { command: cmd, ev: ev });\n            }\n        },\n\n        onFocus: function onFocus() {\n            this.$emit('focus');\n        },\n\n        onBlur: function onBlur() {\n            this.$emit('blur');\n        }\n    },\n    beforeUnmount: function beforeUnmount() {\n    },\n    watch: {\n        value: function watchValue(newValue) {\n            if (newValue != this.textarea.value) {\n                this.textarea.value = newValue;\n                this.$emit('change');\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/js/octobercommands.js",
    "content": "import { host as inspectorHost } from '../../../inspector/assets/js/classes/index.js';\nimport { modalUtils } from '../../../modal/assets/js/classes/index.js';\n\nfunction getUrlPopupConfig(component) {\n    return [\n        {\n            property: 'url',\n            title: 'URL',\n            type: 'string',\n            defaultFocus: true,\n            placeholder: 'https://...',\n            validation: {\n                required: {\n                    message: component.trans('url_required')\n                },\n                regex: {\n                    message: component.trans('url_validation'),\n                    pattern: '^https?:\\\\/\\\\/'\n                }\n            }\n        }\n    ];\n}\n\nfunction getEmbeddingPopupConfig(component) {\n    return [\n        {\n            property: 'code',\n            title: component.trans('embedding_code'),\n            type: 'text',\n            size: 'medium',\n            defaultFocus: true,\n            placeholder: '<iframe...',\n            validation: {\n                required: {\n                    message: component.trans('embedding_code_required')\n                }\n            }\n        }\n    ];\n}\n\nclass OctoberCommands {\n    invoke(command, $textarea, component) {\n        switch (command) {\n            case 'oc-upload-image':\n                return this.uploadImage($textarea);\n\n            case 'oc-browse-image':\n                return this.browseImage($textarea);\n\n            case 'oc-enter-image-url':\n                this.saveEditorSelection($textarea);\n                return this.addImageByUrl($textarea, component);\n\n            case 'oc-browse-video':\n                return this.browseVideo($textarea);\n\n            case 'oc-enter-video-url':\n                this.saveEditorSelection($textarea);\n                return this.addVideoByUrl($textarea, component);\n\n            case 'oc-embed-video':\n                this.saveEditorSelection($textarea);\n                return this.addVideoByEmbedding($textarea, component);\n\n            case 'oc-embed-audio':\n                this.saveEditorSelection($textarea);\n                return this.addAudioByEmbedding($textarea, component);\n\n            case 'oc-browse-audio':\n                return this.browseAudio($textarea);\n\n            case 'oc-enter-audio-url':\n                this.saveEditorSelection($textarea);\n                return this.addAudioByUrl($textarea, component);\n\n            case 'oc-browse-file':\n                return this.browseFile($textarea);\n\n            case 'oc-upload-file':\n                return this.uploadFile($textarea);\n\n            case 'oc-enter-file-url':\n                this.saveEditorSelection($textarea);\n                return this.addFileByUrl($textarea, component);\n\n            case 'oc-toggle-code-editor':\n                return this.toggleCodeEditor(component);\n        }\n    }\n\n    uploadMedia(callback, $textarea, accept) {\n        const uploaderUtils = oc.vueComponentHelpers.uploader.utils;\n        uploaderUtils.selectAndUploadMediaManagerFiles(\n            function(link, isMultipleFiles) {\n                callback(link);\n\n                if (isMultipleFiles) {\n                    $textarea.froalaEditor('selection.clear');\n                }\n            },\n            true,\n            accept\n        );\n    }\n\n    titleFromUrl(url) {\n        const parts = url.split('/');\n        for (let index = parts.length - 1; index >= 0; index--) {\n            const part = parts[index];\n            if (part.length === 0) {\n                continue;\n            }\n\n            return decodeURIComponent(part);\n        }\n\n        return decodeURIComponent(url);\n    }\n\n    insertFileLink(link, $textarea) {\n        let selectionText = $textarea.froalaEditor('selection.text');\n        if (typeof selectionText !== 'string' || !selectionText.length) {\n            selectionText = this.titleFromUrl(link);\n        }\n\n        $textarea.froalaEditor('link.insert', link, selectionText, { class: 'fr-file' });\n    }\n\n    uploadImage($textarea) {\n        this.uploadMedia(\n            (link) => {\n                $textarea.froalaEditor('image.insert', link, true);\n            },\n            $textarea,\n            '.png, .jpg, .jpeg, .gif, .svg'\n        );\n    }\n\n    browseImage($textarea) {\n        $textarea.froalaEditor('mediaManager.insertImage');\n    }\n\n    addImageByUrl($textarea, component) {\n        const config = getUrlPopupConfig(component);\n        const data = {\n            url: ''\n        };\n\n        inspectorHost\n            .showModal(component.trans('add_image_title'), data, config, 'file-url', {\n                beforeApplyCallback: (updatedData) => {\n                    $textarea.froalaEditor('image.insert', updatedData.url, true);\n                    return Promise.resolve();\n                }\n            })\n            .then($.noop, $.noop);\n    }\n\n    browseVideo($textarea) {\n        $textarea.froalaEditor('mediaManager.insertVideo', (url, title) => {\n            $textarea.froalaEditor('figures.insertVideo', url, title);\n        });\n    }\n\n    addVideoByUrl($textarea, component) {\n        const config = getUrlPopupConfig(component);\n        const data = {\n            url: ''\n        };\n\n        inspectorHost\n            .showModal(component.trans('add_video_title'), data, config, 'file-url', {\n                beforeApplyCallback: (updatedData) => {\n                    const url = updatedData.url;\n                    const title = this.titleFromUrl(url);\n\n                    $textarea.froalaEditor('figures.insertVideo', url, title);\n                    return Promise.resolve();\n                }\n            })\n            .then($.noop, $.noop);\n    }\n\n    embedMedia(component, title, callback) {\n        const config = getEmbeddingPopupConfig(component);\n        const data = {\n            code: ''\n        };\n\n        inspectorHost\n            .showModal(title, data, config, 'embed-media', {\n                beforeApplyCallback: (updatedData) => {\n                    let valid = false;\n                    try {\n                        valid = $(updatedData.code).length > 0;\n                    } catch (error) {}\n\n                    if (!valid) {\n                        modalUtils.showAlert(\n                            component.trans('invalid_embedding_code_title'),\n                            component.trans('invalid_embedding_code_message')\n                        );\n\n                        return Promise.reject();\n                    }\n\n                    callback(updatedData.code);\n                    return Promise.resolve();\n                }\n            })\n            .then($.noop, $.noop);\n    }\n\n    addVideoByEmbedding($textarea, component) {\n        this.embedMedia(component, component.trans('add_video_title'), (code) => {\n            $textarea.froalaEditor('video.insert', code);\n        });\n    }\n\n    addAudioByEmbedding($textarea, component) {\n        this.embedMedia(component, component.trans('add_audio_title'), (code) => {\n            // Audio embedding code can be inserted with video.insert\n            $textarea.froalaEditor('video.insert', code);\n        });\n    }\n\n    browseAudio($textarea) {\n        $textarea.froalaEditor('mediaManager.insertAudio', (url, title) => {\n            $textarea.froalaEditor('figures.insertAudio', url, title);\n        });\n    }\n\n    addAudioByUrl($textarea, component) {\n        const config = getUrlPopupConfig(component);\n        const data = {\n            url: ''\n        };\n\n        inspectorHost\n            .showModal(component.trans('add_audio_title'), data, config, 'file-url', {\n                beforeApplyCallback: (updatedData) => {\n                    const url = updatedData.url;\n                    const title = this.titleFromUrl(url);\n\n                    $textarea.froalaEditor('figures.insertAudio', url, title);\n                    return Promise.resolve();\n                }\n            })\n            .then($.noop, $.noop);\n    }\n\n    browseFile($textarea) {\n        $textarea.froalaEditor('mediaManager.insertFile');\n    }\n\n    uploadFile($textarea) {\n        this.uploadMedia((link) => {\n            this.insertFileLink(link, $textarea);\n        }, $textarea);\n    }\n\n    addFileByUrl($textarea, component) {\n        const config = getUrlPopupConfig(component);\n        const data = {\n            url: ''\n        };\n\n        inspectorHost\n            .showModal(component.trans('add_file_title'), data, config, 'file-url', {\n                beforeApplyCallback: (updatedData) => {\n                    this.insertFileLink(updatedData.url, $textarea);\n                    return Promise.resolve();\n                }\n            })\n            .then($.noop, $.noop);\n    }\n\n    toggleCodeEditor(component) {\n        component.toggleCodeEditing();\n    }\n\n    saveEditorSelection($textarea) {\n        $textarea.froalaEditor('selection.save');\n    }\n}\n\nexport default new OctoberCommands();"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/js/richeditordocumentconnector.js",
    "content": "import utils from './utils.js';\nimport octoberCommands from './octobercommands.js';\nimport EditorModelDefinition from '../../../monacoeditor/assets/js/modeldefinition.js';\n\nexport default {\n    props: {\n        toolbarContainer: Array,\n        allowResizing: {\n            type: Boolean,\n            default: true\n        },\n        uniqueKey: {\n            type: String,\n            required: true\n        },\n        containerCssClass: {\n            type: String,\n            default: ''\n        },\n        useMediaManager: {\n            type: Boolean,\n            default: false\n        },\n        builtInMode: {\n            type: Boolean,\n            default: false\n        },\n        externalToolbarAppState: String\n    },\n    data: function() {\n        const imageDropdownItems = [];\n        const fileDropdownItems = [];\n        const videoDropdownOptions = [];\n        const audioDropdownOptions = [];\n        const internalEventBus = Vue.markRaw(mitt());\n\n        videoDropdownOptions.push({\n            command: 'oc-embed-video',\n            label: 'embedding_code'\n        });\n\n        audioDropdownOptions.push({\n            command: 'oc-embed-audio',\n            label: 'embedding_code'\n        });\n\n        if (this.useMediaManager) {\n            imageDropdownItems.push({\n                command: 'oc-upload-image',\n                label: 'command_upload_from_computer'\n            });\n\n            fileDropdownItems.push({\n                command: 'oc-upload-file',\n                label: 'command_upload_from_computer'\n            });\n\n            imageDropdownItems.push({\n                command: 'oc-browse-image',\n                label: 'browse'\n            });\n\n            fileDropdownItems.push({\n                command: 'oc-browse-file',\n                label: 'browse'\n            });\n\n            videoDropdownOptions.push({\n                command: 'oc-browse-video',\n                label: 'browse'\n            });\n\n            audioDropdownOptions.push({\n                command: 'oc-browse-audio',\n                label: 'browse'\n            });\n        }\n\n        imageDropdownItems.push({\n            command: 'oc-enter-image-url',\n            label: 'by_url'\n        });\n\n        fileDropdownItems.push({\n            command: 'oc-enter-file-url',\n            label: 'by_url'\n        });\n\n        videoDropdownOptions.push({\n            command: 'oc-enter-video-url',\n            label: 'by_url'\n        });\n\n        audioDropdownOptions.push({\n            command: 'oc-enter-audio-url',\n            label: 'by_url'\n        });\n\n        return {\n            internalEventBus: internalEventBus,\n            size: 800,\n            minSize: 200,\n            containerSize: 0,\n\n            config: null,\n\n            editorTextarea: null,\n            editorButtons: null,\n            updateDebounceTimeoutId: null,\n\n            codeEditingMode: false,\n            loadingCodeEditingMode: false,\n            htmlCode: '',\n            codeEditorModelDefinitions: [],\n\n            buttonConfig: {\n                fullscreen: {\n                    ignore: true\n                },\n                quote: {\n                    dropdownOnly: true\n                },\n                paragraphStyle: {\n                    dropdownOnly: true,\n                    checkboxDropdown: true,\n                    noPressedState: true\n                },\n                paragraphFormat: {\n                    dropdownOnly: true,\n                    checkedToLabel: true,\n                    checkboxDropdown: true,\n                    noPressedState: true,\n                    separatorAfter: true,\n                    separatorBefore: true\n                },\n                fontFamily: {\n                    dropdownOnly: true,\n                    checkedToLabel: true,\n                    checkboxDropdown: true,\n                    noPressedState: true,\n                    separatorAfter: true,\n                    separatorBefore: true,\n                    applyItemStyle: true\n                },\n                fontSize: {\n                    dropdownOnly: true,\n                    checkedToLabel: true,\n                    checkboxDropdown: true,\n                    noPressedState: true,\n                    separatorAfter: true\n                },\n                inlineStyle: {\n                    dropdownOnly: true\n                },\n                align: {\n                    convertToButtonGroup: true\n                },\n                html: {\n                    cmd: 'oc-toggle-code-editor'\n                },\n                insertSnippet: {},\n                insertLink: {},\n                insertPageLink: {},\n                insertImage: {\n                    dropdown: imageDropdownItems,\n                    dropdownOnly: true\n                },\n                insertVideo: {\n                    dropdown: videoDropdownOptions,\n                    dropdownOnly: true\n                },\n                insertAudio: {\n                    dropdown: audioDropdownOptions,\n                    dropdownOnly: true\n                },\n                insertFile: {\n                    dropdown: fileDropdownItems,\n                    dropdownOnly: true\n                }\n            },\n            nonModifyingCommands: ['insertSnippet', 'insertLink', 'insertPageLink'],\n            iconMap: {\n                'undo': 'text-undo',\n                'redo': 'text-redo',\n                'bold': 'text-bold',\n                'italic': 'text-italic',\n                'underline': 'text-underline',\n                'align-left': 'text-left',\n                'align-right': 'text-right',\n                'align-center': 'text-center',\n                'align-justify': 'text-justify',\n                'icon-list-ol': 'text-format-ol',\n                'icon-list-ul': 'text-format-ul',\n                'icon-magic': 'magic-wand',\n                'icon-quote-left': 'quote',\n                'icon-paint-brush': 'text-inline-style',\n                color: 'text-colors',\n                emoticons: 'text-emoticons',\n                subscript: 'text-subscript',\n                superscript: 'text-superscript',\n                strikeThrough: 'text-strikethrough',\n                insertSnippet: 'newspaper',\n                insertLink: 'text-link',\n                insertPageLink: 'text-link',\n                insertTable: 'text-insert-table',\n                outdent: 'text-decrease-indent',\n                indent: 'text-increase-indent',\n                'icon-paragraph': null,\n                insertHR: 'horizontal-line',\n                'icon-image': 'text-image',\n                'icon-video-camera': 'text-video',\n                'icon-volume-up': 'volume',\n                'icon-file': 'attachment',\n                clearFormatting: 'text-clear-formatting',\n                selectAll: 'cursor-arrow',\n                html: 'edit-code'\n            }\n        };\n    },\n    computed: {\n        majorTicks: function computeMajorTicks() {\n            return utils.makeTicks(this, 100);\n        },\n\n        minorTicks: function computeMinorTicks() {\n            return utils.makeTicks(this, 25);\n        },\n\n        cssClass: function computeCssClass() {\n            var result = '';\n\n            if (this.allowResizing) {\n                result += ' resizing-ui';\n            }\n            else {\n                result += ' no-resizing-ui';\n            }\n\n            if (this.codeEditingMode) {\n                result += ' code-editing-mode';\n            }\n\n            result += ' ' + this.containerCssClass;\n\n            return result;\n        },\n\n        configuration: function computeConfiguration() {\n            if (this.config === null) {\n                this.config = JSON.parse(this.$el.getAttribute('data-configuration'));\n            }\n\n            return this.config;\n        },\n\n        rulerStyle: function computeRulerStyle() {\n            const result = {\n                width: this.size + 'px'\n            };\n\n            result.margin = '0 auto';\n\n            return result;\n        },\n\n        storageKey: function computeStorageKey() {\n            return this.uniqueKey + '-splitter';\n        },\n\n        externalToolbarEventBusObj: function computeExternalToolbarEventBusObj() {\n            if (!this.externalToolbarAppState) {\n                return null;\n            }\n\n            const point = $.oc.vueUtils.getToolbarExtensionPoint(\n                this.externalToolbarAppState,\n                this.$el\n            );\n\n            return point ? point.bus : null;\n        },\n\n        hasExternalToolbar: function computeHasExternalToolbar() {\n            return !!this.externalToolbarEventBusObj;\n        }\n    },\n    methods: {\n        extendToolbar: function extendToolbar(dropdownId) {\n            // Guard against unmounted component during retry\n            if (!this.$el) {\n                return;\n            }\n\n            // Find buttons fresh each time - Froala may not be ready on first call\n            var $buttons = $(this.$el).find('.fr-toolbar .fr-btn, .fr-toolbar .fr-separator');\n\n            // If no buttons found, Froala isn't ready yet - retry after a delay.\n            // Uses setTimeout instead of Vue.nextTick because nextTick creates\n            // microtasks that never yield to the browser, causing infinite loops.\n            if (!$buttons.length) {\n                setTimeout(() => {\n                    this.extendToolbar(dropdownId);\n                }, 50);\n                return;\n            }\n\n            this.editorButtons = $buttons;\n            const that = this;\n\n            if (!dropdownId) {\n                this.toolbarContainer.splice(0, this.toolbarContainer.length);\n\n                if (!this.builtInMode) {\n                    this.toolbarContainer.push({ type: 'separator' });\n                }\n            }\n\n            if (!utils.hasActiveFroalaPopup()) {\n                this.openDropdown('fontFamily');\n                this.openDropdown('fontSize');\n                this.openDropdown('paragraphFormat');\n            }\n\n            $buttons.each(function() {\n                const $button = $(this);\n\n                if (!dropdownId && $button.hasClass('fr-separator')) {\n                    utils.addSeparator(that);\n                    return;\n                }\n\n                if (dropdownId && $button.attr('data-oc-button-id') !== dropdownId) {\n                    return;\n                }\n\n                const cmd = $button.attr('data-cmd');\n                if (that.buttonConfig[cmd] && that.buttonConfig[cmd].ignore) {\n                    return;\n                }\n\n                const hasCustomDropdown = that.buttonConfig[cmd] && that.buttonConfig[cmd].dropdown;\n\n                if (!$button.hasClass('fr-dropdown') && !hasCustomDropdown) {\n                    utils.buttonFromButton(that, $button);\n                }\n                else {\n                    utils.dropdownFromButton(that, $button, dropdownId);\n                }\n            });\n\n            this.updateDebounceTimeoutId = null;\n        },\n\n        extendExternalToolbar: function extendExternalToolbar() {\n            // Guard against unmounted component during retry\n            if (!this.$el) {\n                return;\n            }\n\n            if ($(this.$el).is(\":visible\")) {\n                this.extendToolbar(null);\n            }\n            else {\n                // Element not visible yet, retry after a delay.\n                // Uses setTimeout instead of Vue.nextTick because nextTick creates\n                // microtasks that never yield to the browser, causing infinite loops.\n                setTimeout(() => {\n                    this.extendExternalToolbar();\n                }, 50);\n            }\n        },\n\n        trans: function trans(key) {\n            if (this.configuration.lang[key] === undefined) {\n                return key;\n            }\n\n            return this.configuration.lang[key];\n        },\n\n        mountEventBus: function mountEventBus() {\n            if (!this.externalToolbarEventBusObj) {\n                return;\n            }\n\n            this.externalToolbarEventBusObj.on('toolbarcmd', this.onToolbarExternalCommand);\n            this.externalToolbarEventBusObj.on('extendapptoolbar', this.extendExternalToolbar);\n        },\n\n        unmountEventBus: function unmountEventBus() {\n            if (!this.externalToolbarEventBusObj) {\n                return;\n            }\n\n            this.externalToolbarEventBusObj.off('toolbarcmd', this.onToolbarExternalCommand);\n            this.externalToolbarEventBusObj.off('extendapptoolbar', this.extendExternalToolbar);\n        },\n\n        updateSize: function updateSize() {\n            if (this.allowResizing) {\n                const $wrapper = $('.fr-wrapper', this.$el);\n                const containerSize = $(this.$el).width();\n                if (containerSize && this.size > containerSize) {\n                    $wrapper\n                        .css('width', this.size + 'px')\n                        .css('margin-left', '-50%');\n                }\n                else {\n                    $wrapper\n                        .css('width', this.size + 'px')\n                        .css('margin-left', -(this.size / 2) + 'px');\n                }\n            }\n        },\n\n        updateUi: function updateUi(dropdownId) {\n            if (dropdownId) {\n                this.extendToolbar(dropdownId);\n                return;\n            }\n\n            if (this.updateDebounceTimeoutId !== null) {\n                clearTimeout(this.updateDebounceTimeoutId);\n            }\n\n            // Froala uses 50ms timeout\n            this.updateDebounceTimeoutId = setTimeout(this.extendToolbar, 80);\n        },\n\n        initListeners: function initListeners() {\n            // Guard against unmounted component during retry\n            if (!this.$el) {\n                return;\n            }\n\n            var $textarea = $(this.$el).find('.editor-element');\n\n            // If textarea not found, Froala isn't ready yet - retry on next tick\n            if (!$textarea || !$textarea.length) {\n                Vue.nextTick(() => {\n                    this.initListeners();\n                });\n                return;\n            }\n\n            this.editorTextarea = $textarea;\n\n            $textarea.on(\n                [\n                    'froalaEditor.click.connector',\n                    'froalaEditor.input.connector',\n                    'froalaEditor.keyup.connector'\n                ].join(' '),\n                this.onEditorContextChanged\n            );\n        },\n\n        openDropdown: function openDropdown(cmd) {\n            const $button = $(this.$el).find('.fr-toolbar button[data-cmd=\"' + cmd + '\"]');\n            this.triggerEditorButtonClick($button);\n        },\n\n        triggerEditorButtonClick: function triggerEditorCommandClick($button) {\n            var editor = this.editorTextarea ? this.editorTextarea.data('froala.editor') : null,\n                eventType = editor && editor.helpers.isMobile() ? 'touchend' : 'mouseup';\n\n            const ev1 = jQuery.Event(eventType);\n            ev1.which = 1;\n            $button.addClass('fr-selected').trigger(ev1).removeClass('fr-selected');\n        },\n\n        toggleCodeEditing: function toggleCodeEditing() {\n            if (!this.codeEditingMode) {\n                const basePath = this.configuration.vendorPath;\n                this.loadingCodeEditingMode = true;\n\n                require.config({\n                    paths: {\n                        beautify: basePath + '/beautify@1.13.0/beautify.js',\n                        beautifyHtml: basePath + '/beautify@1.13.0/beautify-html.js'\n                    }\n                });\n\n                // require is provided by the Monaco editor loader\n                //\n                require(['beautify', 'beautifyHtml'], (js, html) => {\n                    this.htmlCode = html.html_beautify(this.editorTextarea.froalaEditor('html.get'));\n                    const defMarkup = new EditorModelDefinition(\n                        'html',\n                        'HTML',\n                        {},\n                        'htmlCode',\n                        'backend-icon-background monaco-document html'\n                    );\n                    defMarkup.setHolderObject(this);\n                    this.codeEditorModelDefinitions = [defMarkup];\n\n                    this.codeEditingMode = true;\n                });\n            }\n            else {\n                this.codeEditingMode = false;\n                this.loadingCodeEditingMode = false;\n                utils.updateEditorHtml(this, this.htmlCode);\n            }\n\n            this.updateUi();\n        },\n\n        saveSize: function saveSize() {\n            if (isNaN(this.size)) {\n                return;\n            }\n\n            localStorage.setItem(this.storageKey + '-size', this.size);\n        },\n\n        alignEditorToolbars: function alignEditorToolbars($button) {\n            const $popup = $(this.$el).find('.fr-toolbar .fr-popup.fr-desktop.fr-active');\n            if (!$popup.length) {\n                return;\n            }\n\n            $popup.css('visibility', 'hidden');\n            const buttonPosition = $button.position();\n\n            $popup.css('left', buttonPosition.left + 'px');\n            const popupOffset = $popup.offset();\n            const popupRight = popupOffset.left + $popup.width();\n            const documentWidth = $(document).width();\n            const correction = popupRight - documentWidth;\n            if (correction > 0) {\n                $popup.css('left', buttonPosition.left - correction - 15 + 'px');\n            }\n\n            if (popupOffset.left < 15) {\n                $popup.css('left', 15 + 'px');\n            }\n\n            $popup.css('visibility', 'visible');\n        },\n\n        onResizingHandleMouseDown: function onResizingHandleMouseDown() {\n            this.containerSize = $(this.$el).width();\n            $(document.body).addClass('richeditor-document-connector-resizing');\n\n            document.addEventListener('mousemove', this.onMouseMove, { passive: true });\n            document.addEventListener('mouseup', this.onMouseUp);\n\n            this.startMargin = $(this.$refs.handle).position();\n        },\n\n        onMouseMove: function onMouseMove(ev) {\n            if (ev.buttons != 1) {\n                // Handle the case when the button was released\n                // outside of the viewport. mouseup doesn't fire\n                // in that case.\n                //\n                this.onMouseUp();\n            }\n\n            var handlePos = $(this.$refs.handle).offset(),\n                delta = ev.pageX - handlePos.left;\n\n            if (delta <= 0) {\n                this.size = Math.max(this.size + delta, this.minSize);\n            }\n            else {\n                this.size = Math.min(this.size + delta, this.containerSize);\n            }\n        },\n\n        onMouseUp: function onMouseUp() {\n            document.removeEventListener('mousemove', this.onMouseMove, { passive: true });\n            document.removeEventListener('mouseup', this.onMouseUp);\n\n            $(document.body).removeClass('richeditor-document-connector-resizing');\n            this.saveSize();\n        },\n\n        onEditorContextChanged: function onEditorContextChanged() {\n            this.updateUi();\n        },\n\n        onToolbarExternalCommand: function (command) {\n            if ($(this.$el).is(\":visible\")) {\n                this.onToolbarCommand(command);\n            }\n        },\n\n        onToolbarCommand: function(commandData) {\n            const command = utils.parseCommandString(commandData.command);\n            if (command === null) {\n                return;\n            }\n\n            if (command.isOctoberCommand) {\n                this.onOctoberCommand(command);\n            }\n\n            let $button = $(this.$el).find('.fr-toolbar [data-cmd=\"' + command.froalaCommand + '\"]');\n\n            if (command.parameter && command.parameter.substring(0, 11) !== 'oc-dropdown') {\n                $button = $button.filter('[data-param1=\"' + command.parameter + '\"]');\n            }\n\n            if (!$button.length) {\n                return;\n            }\n\n            this.triggerEditorButtonClick($button);\n            if (this.nonModifyingCommands.indexOf(command.froalaCommand) === -1) {\n                this.updateUi(command.ocParameter);\n            }\n\n            if (commandData.ev) {\n                this.alignEditorToolbars($(commandData.ev.currentTarget));\n            }\n        },\n\n        onOctoberCommand: function onOctoberCommand(command) {\n            octoberCommands.invoke(command.froalaCommand, this.editorTextarea, this);\n        }\n    },\n    mounted: function onMounted() {\n        Vue.nextTick(() => {\n            // Richeditor Vue component initializes Froala in the next tick\n            // after mount()\n            //\n            var size = parseInt(localStorage.getItem(this.storageKey + '-size'));\n\n            if (size) {\n                this.size = size;\n            }\n\n            if (this.hasExternalToolbar) {\n                this.extendExternalToolbar();\n            }\n            else {\n                this.extendToolbar();\n            }\n\n            this.mountEventBus();\n            this.initListeners();\n            this.internalEventBus.on('toolbarcmd', this.onToolbarCommand);\n            this.updateSize();\n            addEventListener('resize', this.updateSize);\n        });\n    },\n    beforeUnmount: function beforeUnmount() {\n        if (this.editorTextarea) {\n            this.editorTextarea.off('.connector');\n        }\n        removeEventListener('resize', this.updateSize);\n\n        this.unmountEventBus();\n        this.internalEventBus.off('toolbarcmd', this.onToolbarCommand);\n\n        this.editorTextarea = null;\n        this.editorButtons = null;\n    },\n    watch: {\n        size: function watchSize() {\n            this.updateSize();\n        },\n        htmlCode: function watchHtmlCode(html) {\n            utils.updateEditorHtml(this, html);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/js/utils.js",
    "content": "class Utils {\n    isLastElementSeparator(component) {\n        const elements = component.toolbarContainer;\n        const element = elements[elements.length - 1];\n\n        if (!element) {\n            return false;\n        }\n\n        return element.type === 'separator';\n    }\n\n    mapIconName(component, editorIconName, defaultIconName) {\n        if (component.iconMap[editorIconName] === undefined) {\n            return defaultIconName || editorIconName;\n        }\n\n        return 'icon-' + component.iconMap[editorIconName];\n    }\n\n    addSeparator(component) {\n        if (!this.isLastElementSeparator(component)) {\n            component.toolbarContainer.push({ type: 'separator' });\n        }\n    }\n\n    buttonFromButton(component, $button) {\n        const cmd = $button.attr('data-cmd');\n        const buttonIconName = $button.find('i').attr('class');\n\n        const $wrapper = $button.closest('.fr-btn-wrap');\n        if ($wrapper.length && $button.next('.fr-btn.fr-dropdown')) {\n            // Dropdowns have two buttons,\n            // ignore the first one.\n            return;\n        }\n\n        let buttonCmd = cmd;\n        const knownButtonConfig = component.buttonConfig[cmd];\n        if (knownButtonConfig && knownButtonConfig.cmd) {\n            buttonCmd = knownButtonConfig.cmd;\n        }\n\n        const codeEditing = component.loadingCodeEditingMode || component.codeEditingMode;\n\n        component.toolbarContainer.push({\n            type: 'button',\n            icon: this.mapIconName(component, cmd, buttonIconName),\n            command: 'richeditor-toolbar-' + buttonCmd,\n            tooltip: $button.attr('title'),\n            pressed: $button.hasClass('fr-active') || (codeEditing && cmd === 'html'),\n            disabled: $button.hasClass('fr-disabled') || (codeEditing && cmd !== 'html')\n        });\n    }\n\n    dropdownFromButton(component, $button, updateDropdownId) {\n        let cmd = $button.attr('data-cmd');\n        const knownButtonConfig = component.buttonConfig[cmd];\n\n        if (knownButtonConfig && knownButtonConfig.convertToButtonGroup) {\n            return this.buttonGroupFromButton(component, $button);\n        }\n\n        let buttonId = $button.attr('data-oc-button-id');\n        if (!buttonId) {\n            buttonId = $.oc.domIdManager.generate('oc-richedit-button');\n            $button.attr('data-oc-button-id', buttonId);\n        }\n\n        if (updateDropdownId && buttonId !== updateDropdownId) {\n            return;\n        }\n\n        const $wrapper = $button.closest('.fr-btn-wrap');\n        const isWrapped = $wrapper.length > 0;\n\n        let $items = null;\n        if (!knownButtonConfig || !knownButtonConfig.dropdown) {\n            $items = $wrapper.find('.fr-dropdown-menu li > a');\n            if ($items.length === 0) {\n                $items = $button.next('.fr-dropdown-menu').find('li a');\n            }\n        }\n\n        let buttonIconName = '';\n        let buttonTitle = '';\n        let pressed = false;\n        const noPressedState = knownButtonConfig && knownButtonConfig.noPressedState;\n\n        if (isWrapped) {\n            const $prevButton = $button.prev('.fr-btn');\n            buttonIconName = $wrapper.find('.fr-btn i').attr('class');\n            buttonTitle = $prevButton.find('.fr-sr-only').text();\n            cmd = $prevButton.attr('data-cmd');\n            pressed = !noPressedState && $prevButton.hasClass('fr-active');\n        }\n        else {\n            buttonIconName = $button.find('i').attr('class');\n            buttonTitle = $button.find('.fr-sr-only').text();\n            pressed = !noPressedState && $button.hasClass('fr-active');\n        }\n\n        let type = 'button';\n        let dropdownItemType = 'text';\n\n        if (knownButtonConfig && knownButtonConfig.checkboxDropdown) {\n            dropdownItemType = 'checkbox';\n        }\n\n        if ((knownButtonConfig && knownButtonConfig.dropdownOnly) || !isWrapped) {\n            type = 'dropdown';\n        }\n\n        let buttonConfig = {};\n        let emitCommandBeforeMenu = null;\n\n        if (dropdownItemType == 'checkbox') {\n            emitCommandBeforeMenu = 'richeditor-toolbar-' + cmd + '@oc-dropdown|' + buttonId;\n        }\n\n        if (!updateDropdownId && knownButtonConfig && knownButtonConfig.separatorBefore) {\n            this.addSeparator(component);\n        }\n\n        if (!updateDropdownId) {\n            const labelFromSelectedItem = knownButtonConfig && knownButtonConfig.checkedToLabel;\n            const mappedIcon = this.mapIconName(component, buttonIconName);\n\n            const codeEditing = component.loadingCodeEditingMode || component.codeEditingMode;\n\n            buttonConfig = {\n                type: type,\n                icon: mappedIcon,\n                command: 'richeditor-toolbar-' + cmd,\n                emitCommandBeforeMenu: emitCommandBeforeMenu,\n                tooltip: buttonTitle,\n                pressed: pressed,\n                menuitems: [],\n                richeditorButtonId: buttonId,\n                labelFromSelectedItem: labelFromSelectedItem,\n                disabled: $button.hasClass('fr-disabled') || codeEditing\n            };\n        }\n        else {\n            buttonConfig = component.toolbarContainer.find((buttonElement) => {\n                return buttonElement.richeditorButtonId === updateDropdownId;\n            });\n            buttonConfig.menuitems = [];\n        }\n\n        let firstItem = null;\n        let checkedFound = false;\n\n        if ($items !== null) {\n            $items.each(function() {\n                const $item = $(this);\n                const cmd = $item.attr('data-cmd');\n                const param = $item.attr('data-param1');\n                const menuItem = {\n                    type: dropdownItemType,\n                    command: 'richeditor-toolbar-' + cmd + '@' + param,\n                    label: $item.text(),\n                    checked: $item.attr('aria-selected') === 'true'\n                };\n\n                if (knownButtonConfig && knownButtonConfig.applyItemStyle) {\n                    menuItem.style = $item.attr('style');\n                }\n\n                checkedFound = checkedFound || menuItem.checked;\n\n                if (!firstItem) {\n                    firstItem = menuItem;\n                }\n\n                buttonConfig.menuitems.push(menuItem);\n            });\n        }\n\n        if (knownButtonConfig && knownButtonConfig.dropdown) {\n            knownButtonConfig.dropdown.forEach((customDropdownItem) => {\n                buttonConfig.menuitems.push({\n                    type: dropdownItemType,\n                    command: 'richeditor-toolbar-' + customDropdownItem.command,\n                    label: component.trans(customDropdownItem.label)\n                });\n            });\n        }\n\n        if (!checkedFound && firstItem) {\n            firstItem.checked = true;\n        }\n\n        if (!updateDropdownId) {\n            component.toolbarContainer.push(buttonConfig);\n            if (knownButtonConfig && knownButtonConfig.separatorAfter) {\n                this.addSeparator(component);\n            }\n        }\n    }\n\n    buttonGroupFromButton(component, $button) {\n        this.addSeparator(component);\n        const $dropdownItems = $button.next('.fr-dropdown-menu').find('li > a');\n        const buttonIconName = $button.find('i').attr('class');\n        const that = this;\n\n        $dropdownItems.each(function() {\n            const $dropdownButton = $(this);\n            const cmd = $dropdownButton.attr('data-cmd');\n            const param = $dropdownButton.attr('data-param1');\n\n            const codeEditing = component.loadingCodeEditingMode || component.codeEditingMode;\n\n            const buttonConfig = {\n                type: 'button',\n                icon: that.mapIconName(component, cmd + '-' + param, buttonIconName),\n                command: 'richeditor-toolbar-' + cmd + '@' + param,\n                tooltip: $dropdownButton.attr('title'),\n                buttonGroup: true,\n                disabled: $button.hasClass('fr-disabled') || codeEditing\n            };\n\n            if ($dropdownButton.find('i').attr('class') == buttonIconName) {\n                buttonConfig.pressed = true;\n            }\n\n            component.toolbarContainer.push(buttonConfig);\n        });\n\n        this.addSeparator(component);\n    }\n\n    parseCommandString(command) {\n        if (!/^richeditor\\-toolbar-/.test(command) || !/^[0-9a-z\\-\\@:\\|;,\\s]+$/i.test(command)) {\n            return null;\n        }\n\n        let froalaCommand = command.substring(19);\n        let parameter = '';\n        const cmdParts = froalaCommand.split('@');\n        if (cmdParts.length > 1) {\n            froalaCommand = cmdParts[0];\n            parameter = cmdParts[1];\n        }\n\n        const parameterParts = parameter.split('|');\n        let ocParameter = null;\n        if (parameterParts.length > 1) {\n            parameter = parameterParts[0];\n            ocParameter = parameterParts[1];\n        }\n\n        const isOctoberCommand = froalaCommand.substring(0, 3) === 'oc-';\n\n        return {\n            froalaCommand,\n            isOctoberCommand,\n            parameter,\n            ocParameter\n        };\n    }\n\n    hasActiveFroalaPopup() {\n        return $(document.body).find('.fr-popup.fr-active').length > 0;\n    }\n\n    makeTicks(component, interval) {\n        const tickCount = Math.ceil(component.size / interval);\n        const result = [];\n        for (var index = 0; index < tickCount; index++) {\n            result.push({\n                style: {\n                    left: index * interval + 'px'\n                }\n            });\n        }\n\n        return result;\n    }\n\n    updateEditorHtml(component, html) {\n        component.editorTextarea.froalaEditor('html.set', html);\n        component.editorTextarea.trigger('froalaEditor.contentChanged.richeditor');\n    }\n}\n\nexport default new Utils();"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/vendor/beautify@1.13.0/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/vendor/beautify@1.13.0/beautify-html.js",
    "content": "/* AUTO-GENERATED. DO NOT MODIFY. */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n\n\n Style HTML\n---------------\n\n  Written by Nochum Sossonko, (nsossonko@hotmail.com)\n\n  Based on code initially developed by: Einar Lielmanis, <einar@beautifier.io>\n    https://beautifier.io/\n\n  Usage:\n    style_html(html_source);\n\n    style_html(html_source, options);\n\n  The options are:\n    indent_inner_html (default false)  — indent <head> and <body> sections,\n    indent_size (default 4)          — indentation size,\n    indent_char (default space)      — character to indent with,\n    wrap_line_length (default 250)            -  maximum amount of characters per line (0 = disable)\n    brace_style (default \"collapse\") - \"collapse\" | \"expand\" | \"end-expand\" | \"none\"\n            put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line, or attempt to keep them where they are.\n    inline (defaults to inline tags) - list of tags to be considered inline tags\n    unformatted (defaults to inline tags) - list of tags, that shouldn't be reformatted\n    content_unformatted (defaults to [\"pre\", \"textarea\"] tags) - list of tags, whose content shouldn't be reformatted\n    indent_scripts (default normal)  - \"keep\"|\"separate\"|\"normal\"\n    preserve_newlines (default true) - whether existing line breaks before elements should be preserved\n                                        Only works before elements, not inside tags or for text.\n    max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk\n    indent_handlebars (default false) - format and indent {{#foo}} and {{/foo}}\n    end_with_newline (false)          - end with a newline\n    extra_liners (default [head,body,/html]) -List of tags that should have an extra newline before them.\n\n    e.g.\n\n    style_html(html_source, {\n      'indent_inner_html': false,\n      'indent_size': 2,\n      'indent_char': ' ',\n      'wrap_line_length': 78,\n      'brace_style': 'expand',\n      'preserve_newlines': true,\n      'max_preserve_newlines': 5,\n      'indent_handlebars': false,\n      'extra_liners': ['/html']\n    });\n*/\n\n(function() {\n\n/* GENERATED_BUILD_OUTPUT */\nvar legacy_beautify_html =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 18);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */,\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction OutputLine(parent) {\n  this.__parent = parent;\n  this.__character_count = 0;\n  // use indent_count as a marker for this.__lines that have preserved indentation\n  this.__indent_count = -1;\n  this.__alignment_count = 0;\n  this.__wrap_point_index = 0;\n  this.__wrap_point_character_count = 0;\n  this.__wrap_point_indent_count = -1;\n  this.__wrap_point_alignment_count = 0;\n\n  this.__items = [];\n}\n\nOutputLine.prototype.clone_empty = function() {\n  var line = new OutputLine(this.__parent);\n  line.set_indent(this.__indent_count, this.__alignment_count);\n  return line;\n};\n\nOutputLine.prototype.item = function(index) {\n  if (index < 0) {\n    return this.__items[this.__items.length + index];\n  } else {\n    return this.__items[index];\n  }\n};\n\nOutputLine.prototype.has_match = function(pattern) {\n  for (var lastCheckedOutput = this.__items.length - 1; lastCheckedOutput >= 0; lastCheckedOutput--) {\n    if (this.__items[lastCheckedOutput].match(pattern)) {\n      return true;\n    }\n  }\n  return false;\n};\n\nOutputLine.prototype.set_indent = function(indent, alignment) {\n  if (this.is_empty()) {\n    this.__indent_count = indent || 0;\n    this.__alignment_count = alignment || 0;\n    this.__character_count = this.__parent.get_indent_size(this.__indent_count, this.__alignment_count);\n  }\n};\n\nOutputLine.prototype._set_wrap_point = function() {\n  if (this.__parent.wrap_line_length) {\n    this.__wrap_point_index = this.__items.length;\n    this.__wrap_point_character_count = this.__character_count;\n    this.__wrap_point_indent_count = this.__parent.next_line.__indent_count;\n    this.__wrap_point_alignment_count = this.__parent.next_line.__alignment_count;\n  }\n};\n\nOutputLine.prototype._should_wrap = function() {\n  return this.__wrap_point_index &&\n    this.__character_count > this.__parent.wrap_line_length &&\n    this.__wrap_point_character_count > this.__parent.next_line.__character_count;\n};\n\nOutputLine.prototype._allow_wrap = function() {\n  if (this._should_wrap()) {\n    this.__parent.add_new_line();\n    var next = this.__parent.current_line;\n    next.set_indent(this.__wrap_point_indent_count, this.__wrap_point_alignment_count);\n    next.__items = this.__items.slice(this.__wrap_point_index);\n    this.__items = this.__items.slice(0, this.__wrap_point_index);\n\n    next.__character_count += this.__character_count - this.__wrap_point_character_count;\n    this.__character_count = this.__wrap_point_character_count;\n\n    if (next.__items[0] === \" \") {\n      next.__items.splice(0, 1);\n      next.__character_count -= 1;\n    }\n    return true;\n  }\n  return false;\n};\n\nOutputLine.prototype.is_empty = function() {\n  return this.__items.length === 0;\n};\n\nOutputLine.prototype.last = function() {\n  if (!this.is_empty()) {\n    return this.__items[this.__items.length - 1];\n  } else {\n    return null;\n  }\n};\n\nOutputLine.prototype.push = function(item) {\n  this.__items.push(item);\n  var last_newline_index = item.lastIndexOf('\\n');\n  if (last_newline_index !== -1) {\n    this.__character_count = item.length - last_newline_index;\n  } else {\n    this.__character_count += item.length;\n  }\n};\n\nOutputLine.prototype.pop = function() {\n  var item = null;\n  if (!this.is_empty()) {\n    item = this.__items.pop();\n    this.__character_count -= item.length;\n  }\n  return item;\n};\n\n\nOutputLine.prototype._remove_indent = function() {\n  if (this.__indent_count > 0) {\n    this.__indent_count -= 1;\n    this.__character_count -= this.__parent.indent_size;\n  }\n};\n\nOutputLine.prototype._remove_wrap_indent = function() {\n  if (this.__wrap_point_indent_count > 0) {\n    this.__wrap_point_indent_count -= 1;\n  }\n};\nOutputLine.prototype.trim = function() {\n  while (this.last() === ' ') {\n    this.__items.pop();\n    this.__character_count -= 1;\n  }\n};\n\nOutputLine.prototype.toString = function() {\n  var result = '';\n  if (this.is_empty()) {\n    if (this.__parent.indent_empty_lines) {\n      result = this.__parent.get_indent_string(this.__indent_count);\n    }\n  } else {\n    result = this.__parent.get_indent_string(this.__indent_count, this.__alignment_count);\n    result += this.__items.join('');\n  }\n  return result;\n};\n\nfunction IndentStringCache(options, baseIndentString) {\n  this.__cache = [''];\n  this.__indent_size = options.indent_size;\n  this.__indent_string = options.indent_char;\n  if (!options.indent_with_tabs) {\n    this.__indent_string = new Array(options.indent_size + 1).join(options.indent_char);\n  }\n\n  // Set to null to continue support for auto detection of base indent\n  baseIndentString = baseIndentString || '';\n  if (options.indent_level > 0) {\n    baseIndentString = new Array(options.indent_level + 1).join(this.__indent_string);\n  }\n\n  this.__base_string = baseIndentString;\n  this.__base_string_length = baseIndentString.length;\n}\n\nIndentStringCache.prototype.get_indent_size = function(indent, column) {\n  var result = this.__base_string_length;\n  column = column || 0;\n  if (indent < 0) {\n    result = 0;\n  }\n  result += indent * this.__indent_size;\n  result += column;\n  return result;\n};\n\nIndentStringCache.prototype.get_indent_string = function(indent_level, column) {\n  var result = this.__base_string;\n  column = column || 0;\n  if (indent_level < 0) {\n    indent_level = 0;\n    result = '';\n  }\n  column += indent_level * this.__indent_size;\n  this.__ensure_cache(column);\n  result += this.__cache[column];\n  return result;\n};\n\nIndentStringCache.prototype.__ensure_cache = function(column) {\n  while (column >= this.__cache.length) {\n    this.__add_column();\n  }\n};\n\nIndentStringCache.prototype.__add_column = function() {\n  var column = this.__cache.length;\n  var indent = 0;\n  var result = '';\n  if (this.__indent_size && column >= this.__indent_size) {\n    indent = Math.floor(column / this.__indent_size);\n    column -= indent * this.__indent_size;\n    result = new Array(indent + 1).join(this.__indent_string);\n  }\n  if (column) {\n    result += new Array(column + 1).join(' ');\n  }\n\n  this.__cache.push(result);\n};\n\nfunction Output(options, baseIndentString) {\n  this.__indent_cache = new IndentStringCache(options, baseIndentString);\n  this.raw = false;\n  this._end_with_newline = options.end_with_newline;\n  this.indent_size = options.indent_size;\n  this.wrap_line_length = options.wrap_line_length;\n  this.indent_empty_lines = options.indent_empty_lines;\n  this.__lines = [];\n  this.previous_line = null;\n  this.current_line = null;\n  this.next_line = new OutputLine(this);\n  this.space_before_token = false;\n  this.non_breaking_space = false;\n  this.previous_token_wrapped = false;\n  // initialize\n  this.__add_outputline();\n}\n\nOutput.prototype.__add_outputline = function() {\n  this.previous_line = this.current_line;\n  this.current_line = this.next_line.clone_empty();\n  this.__lines.push(this.current_line);\n};\n\nOutput.prototype.get_line_number = function() {\n  return this.__lines.length;\n};\n\nOutput.prototype.get_indent_string = function(indent, column) {\n  return this.__indent_cache.get_indent_string(indent, column);\n};\n\nOutput.prototype.get_indent_size = function(indent, column) {\n  return this.__indent_cache.get_indent_size(indent, column);\n};\n\nOutput.prototype.is_empty = function() {\n  return !this.previous_line && this.current_line.is_empty();\n};\n\nOutput.prototype.add_new_line = function(force_newline) {\n  // never newline at the start of file\n  // otherwise, newline only if we didn't just add one or we're forced\n  if (this.is_empty() ||\n    (!force_newline && this.just_added_newline())) {\n    return false;\n  }\n\n  // if raw output is enabled, don't print additional newlines,\n  // but still return True as though you had\n  if (!this.raw) {\n    this.__add_outputline();\n  }\n  return true;\n};\n\nOutput.prototype.get_code = function(eol) {\n  this.trim(true);\n\n  // handle some edge cases where the last tokens\n  // has text that ends with newline(s)\n  var last_item = this.current_line.pop();\n  if (last_item) {\n    if (last_item[last_item.length - 1] === '\\n') {\n      last_item = last_item.replace(/\\n+$/g, '');\n    }\n    this.current_line.push(last_item);\n  }\n\n  if (this._end_with_newline) {\n    this.__add_outputline();\n  }\n\n  var sweet_code = this.__lines.join('\\n');\n\n  if (eol !== '\\n') {\n    sweet_code = sweet_code.replace(/[\\n]/g, eol);\n  }\n  return sweet_code;\n};\n\nOutput.prototype.set_wrap_point = function() {\n  this.current_line._set_wrap_point();\n};\n\nOutput.prototype.set_indent = function(indent, alignment) {\n  indent = indent || 0;\n  alignment = alignment || 0;\n\n  // Next line stores alignment values\n  this.next_line.set_indent(indent, alignment);\n\n  // Never indent your first output indent at the start of the file\n  if (this.__lines.length > 1) {\n    this.current_line.set_indent(indent, alignment);\n    return true;\n  }\n\n  this.current_line.set_indent();\n  return false;\n};\n\nOutput.prototype.add_raw_token = function(token) {\n  for (var x = 0; x < token.newlines; x++) {\n    this.__add_outputline();\n  }\n  this.current_line.set_indent(-1);\n  this.current_line.push(token.whitespace_before);\n  this.current_line.push(token.text);\n  this.space_before_token = false;\n  this.non_breaking_space = false;\n  this.previous_token_wrapped = false;\n};\n\nOutput.prototype.add_token = function(printable_token) {\n  this.__add_space_before_token();\n  this.current_line.push(printable_token);\n  this.space_before_token = false;\n  this.non_breaking_space = false;\n  this.previous_token_wrapped = this.current_line._allow_wrap();\n};\n\nOutput.prototype.__add_space_before_token = function() {\n  if (this.space_before_token && !this.just_added_newline()) {\n    if (!this.non_breaking_space) {\n      this.set_wrap_point();\n    }\n    this.current_line.push(' ');\n  }\n};\n\nOutput.prototype.remove_indent = function(index) {\n  var output_length = this.__lines.length;\n  while (index < output_length) {\n    this.__lines[index]._remove_indent();\n    index++;\n  }\n  this.current_line._remove_wrap_indent();\n};\n\nOutput.prototype.trim = function(eat_newlines) {\n  eat_newlines = (eat_newlines === undefined) ? false : eat_newlines;\n\n  this.current_line.trim();\n\n  while (eat_newlines && this.__lines.length > 1 &&\n    this.current_line.is_empty()) {\n    this.__lines.pop();\n    this.current_line = this.__lines[this.__lines.length - 1];\n    this.current_line.trim();\n  }\n\n  this.previous_line = this.__lines.length > 1 ?\n    this.__lines[this.__lines.length - 2] : null;\n};\n\nOutput.prototype.just_added_newline = function() {\n  return this.current_line.is_empty();\n};\n\nOutput.prototype.just_added_blankline = function() {\n  return this.is_empty() ||\n    (this.current_line.is_empty() && this.previous_line.is_empty());\n};\n\nOutput.prototype.ensure_empty_line_above = function(starts_with, ends_with) {\n  var index = this.__lines.length - 2;\n  while (index >= 0) {\n    var potentialEmptyLine = this.__lines[index];\n    if (potentialEmptyLine.is_empty()) {\n      break;\n    } else if (potentialEmptyLine.item(0).indexOf(starts_with) !== 0 &&\n      potentialEmptyLine.item(-1) !== ends_with) {\n      this.__lines.splice(index + 1, 0, new OutputLine(this));\n      this.previous_line = this.__lines[this.__lines.length - 2];\n      break;\n    }\n    index--;\n  }\n};\n\nmodule.exports.Output = Output;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Token(type, text, newlines, whitespace_before) {\n  this.type = type;\n  this.text = text;\n\n  // comments_before are\n  // comments that have a new line before them\n  // and may or may not have a newline after\n  // this is a set of comments before\n  this.comments_before = null; /* inline comment*/\n\n\n  // this.comments_after =  new TokenStream(); // no new line before and newline after\n  this.newlines = newlines || 0;\n  this.whitespace_before = whitespace_before || '';\n  this.parent = null;\n  this.next = null;\n  this.previous = null;\n  this.opened = null;\n  this.closed = null;\n  this.directives = null;\n}\n\n\nmodule.exports.Token = Token;\n\n\n/***/ }),\n/* 4 */,\n/* 5 */,\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Options(options, merge_child_field) {\n  this.raw_options = _mergeOpts(options, merge_child_field);\n\n  // Support passing the source text back with no change\n  this.disabled = this._get_boolean('disabled');\n\n  this.eol = this._get_characters('eol', 'auto');\n  this.end_with_newline = this._get_boolean('end_with_newline');\n  this.indent_size = this._get_number('indent_size', 4);\n  this.indent_char = this._get_characters('indent_char', ' ');\n  this.indent_level = this._get_number('indent_level');\n\n  this.preserve_newlines = this._get_boolean('preserve_newlines', true);\n  this.max_preserve_newlines = this._get_number('max_preserve_newlines', 32786);\n  if (!this.preserve_newlines) {\n    this.max_preserve_newlines = 0;\n  }\n\n  this.indent_with_tabs = this._get_boolean('indent_with_tabs', this.indent_char === '\\t');\n  if (this.indent_with_tabs) {\n    this.indent_char = '\\t';\n\n    // indent_size behavior changed after 1.8.6\n    // It used to be that indent_size would be\n    // set to 1 for indent_with_tabs. That is no longer needed and\n    // actually doesn't make sense - why not use spaces? Further,\n    // that might produce unexpected behavior - tabs being used\n    // for single-column alignment. So, when indent_with_tabs is true\n    // and indent_size is 1, reset indent_size to 4.\n    if (this.indent_size === 1) {\n      this.indent_size = 4;\n    }\n  }\n\n  // Backwards compat with 1.3.x\n  this.wrap_line_length = this._get_number('wrap_line_length', this._get_number('max_char'));\n\n  this.indent_empty_lines = this._get_boolean('indent_empty_lines');\n\n  // valid templating languages ['django', 'erb', 'handlebars', 'php']\n  // For now, 'auto' = all off for javascript, all on for html (and inline javascript).\n  // other values ignored\n  this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php'], ['auto']);\n}\n\nOptions.prototype._get_array = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  var result = default_value || [];\n  if (typeof option_value === 'object') {\n    if (option_value !== null && typeof option_value.concat === 'function') {\n      result = option_value.concat();\n    }\n  } else if (typeof option_value === 'string') {\n    result = option_value.split(/[^a-zA-Z0-9_\\/\\-]+/);\n  }\n  return result;\n};\n\nOptions.prototype._get_boolean = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  var result = option_value === undefined ? !!default_value : !!option_value;\n  return result;\n};\n\nOptions.prototype._get_characters = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  var result = default_value || '';\n  if (typeof option_value === 'string') {\n    result = option_value.replace(/\\\\r/, '\\r').replace(/\\\\n/, '\\n').replace(/\\\\t/, '\\t');\n  }\n  return result;\n};\n\nOptions.prototype._get_number = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  default_value = parseInt(default_value, 10);\n  if (isNaN(default_value)) {\n    default_value = 0;\n  }\n  var result = parseInt(option_value, 10);\n  if (isNaN(result)) {\n    result = default_value;\n  }\n  return result;\n};\n\nOptions.prototype._get_selection = function(name, selection_list, default_value) {\n  var result = this._get_selection_list(name, selection_list, default_value);\n  if (result.length !== 1) {\n    throw new Error(\n      \"Invalid Option Value: The option '\" + name + \"' can only be one of the following values:\\n\" +\n      selection_list + \"\\nYou passed in: '\" + this.raw_options[name] + \"'\");\n  }\n\n  return result[0];\n};\n\n\nOptions.prototype._get_selection_list = function(name, selection_list, default_value) {\n  if (!selection_list || selection_list.length === 0) {\n    throw new Error(\"Selection list cannot be empty.\");\n  }\n\n  default_value = default_value || [selection_list[0]];\n  if (!this._is_valid_selection(default_value, selection_list)) {\n    throw new Error(\"Invalid Default Value!\");\n  }\n\n  var result = this._get_array(name, default_value);\n  if (!this._is_valid_selection(result, selection_list)) {\n    throw new Error(\n      \"Invalid Option Value: The option '\" + name + \"' can contain only the following values:\\n\" +\n      selection_list + \"\\nYou passed in: '\" + this.raw_options[name] + \"'\");\n  }\n\n  return result;\n};\n\nOptions.prototype._is_valid_selection = function(result, selection_list) {\n  return result.length && selection_list.length &&\n    !result.some(function(item) { return selection_list.indexOf(item) === -1; });\n};\n\n\n// merges child options up with the parent options object\n// Example: obj = {a: 1, b: {a: 2}}\n//          mergeOpts(obj, 'b')\n//\n//          Returns: {a: 2}\nfunction _mergeOpts(allOptions, childFieldName) {\n  var finalOpts = {};\n  allOptions = _normalizeOpts(allOptions);\n  var name;\n\n  for (name in allOptions) {\n    if (name !== childFieldName) {\n      finalOpts[name] = allOptions[name];\n    }\n  }\n\n  //merge in the per type settings for the childFieldName\n  if (childFieldName && allOptions[childFieldName]) {\n    for (name in allOptions[childFieldName]) {\n      finalOpts[name] = allOptions[childFieldName][name];\n    }\n  }\n  return finalOpts;\n}\n\nfunction _normalizeOpts(options) {\n  var convertedOpts = {};\n  var key;\n\n  for (key in options) {\n    var newKey = key.replace(/-/g, \"_\");\n    convertedOpts[newKey] = options[key];\n  }\n  return convertedOpts;\n}\n\nmodule.exports.Options = Options;\nmodule.exports.normalizeOpts = _normalizeOpts;\nmodule.exports.mergeOpts = _mergeOpts;\n\n\n/***/ }),\n/* 7 */,\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar regexp_has_sticky = RegExp.prototype.hasOwnProperty('sticky');\n\nfunction InputScanner(input_string) {\n  this.__input = input_string || '';\n  this.__input_length = this.__input.length;\n  this.__position = 0;\n}\n\nInputScanner.prototype.restart = function() {\n  this.__position = 0;\n};\n\nInputScanner.prototype.back = function() {\n  if (this.__position > 0) {\n    this.__position -= 1;\n  }\n};\n\nInputScanner.prototype.hasNext = function() {\n  return this.__position < this.__input_length;\n};\n\nInputScanner.prototype.next = function() {\n  var val = null;\n  if (this.hasNext()) {\n    val = this.__input.charAt(this.__position);\n    this.__position += 1;\n  }\n  return val;\n};\n\nInputScanner.prototype.peek = function(index) {\n  var val = null;\n  index = index || 0;\n  index += this.__position;\n  if (index >= 0 && index < this.__input_length) {\n    val = this.__input.charAt(index);\n  }\n  return val;\n};\n\n// This is a JavaScript only helper function (not in python)\n// Javascript doesn't have a match method\n// and not all implementation support \"sticky\" flag.\n// If they do not support sticky then both this.match() and this.test() method\n// must get the match and check the index of the match.\n// If sticky is supported and set, this method will use it.\n// Otherwise it will check that global is set, and fall back to the slower method.\nInputScanner.prototype.__match = function(pattern, index) {\n  pattern.lastIndex = index;\n  var pattern_match = pattern.exec(this.__input);\n\n  if (pattern_match && !(regexp_has_sticky && pattern.sticky)) {\n    if (pattern_match.index !== index) {\n      pattern_match = null;\n    }\n  }\n\n  return pattern_match;\n};\n\nInputScanner.prototype.test = function(pattern, index) {\n  index = index || 0;\n  index += this.__position;\n\n  if (index >= 0 && index < this.__input_length) {\n    return !!this.__match(pattern, index);\n  } else {\n    return false;\n  }\n};\n\nInputScanner.prototype.testChar = function(pattern, index) {\n  // test one character regex match\n  var val = this.peek(index);\n  pattern.lastIndex = 0;\n  return val !== null && pattern.test(val);\n};\n\nInputScanner.prototype.match = function(pattern) {\n  var pattern_match = this.__match(pattern, this.__position);\n  if (pattern_match) {\n    this.__position += pattern_match[0].length;\n  } else {\n    pattern_match = null;\n  }\n  return pattern_match;\n};\n\nInputScanner.prototype.read = function(starting_pattern, until_pattern, until_after) {\n  var val = '';\n  var match;\n  if (starting_pattern) {\n    match = this.match(starting_pattern);\n    if (match) {\n      val += match[0];\n    }\n  }\n  if (until_pattern && (match || !starting_pattern)) {\n    val += this.readUntil(until_pattern, until_after);\n  }\n  return val;\n};\n\nInputScanner.prototype.readUntil = function(pattern, until_after) {\n  var val = '';\n  var match_index = this.__position;\n  pattern.lastIndex = this.__position;\n  var pattern_match = pattern.exec(this.__input);\n  if (pattern_match) {\n    match_index = pattern_match.index;\n    if (until_after) {\n      match_index += pattern_match[0].length;\n    }\n  } else {\n    match_index = this.__input_length;\n  }\n\n  val = this.__input.substring(this.__position, match_index);\n  this.__position = match_index;\n  return val;\n};\n\nInputScanner.prototype.readUntilAfter = function(pattern) {\n  return this.readUntil(pattern, true);\n};\n\nInputScanner.prototype.get_regexp = function(pattern, match_from) {\n  var result = null;\n  var flags = 'g';\n  if (match_from && regexp_has_sticky) {\n    flags = 'y';\n  }\n  // strings are converted to regexp\n  if (typeof pattern === \"string\" && pattern !== '') {\n    // result = new RegExp(pattern.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), flags);\n    result = new RegExp(pattern, flags);\n  } else if (pattern) {\n    result = new RegExp(pattern.source, flags);\n  }\n  return result;\n};\n\nInputScanner.prototype.get_literal_regexp = function(literal_string) {\n  return RegExp(literal_string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'));\n};\n\n/* css beautifier legacy helpers */\nInputScanner.prototype.peekUntilAfter = function(pattern) {\n  var start = this.__position;\n  var val = this.readUntilAfter(pattern);\n  this.__position = start;\n  return val;\n};\n\nInputScanner.prototype.lookBack = function(testVal) {\n  var start = this.__position - 1;\n  return start >= testVal.length && this.__input.substring(start - testVal.length, start)\n    .toLowerCase() === testVal;\n};\n\nmodule.exports.InputScanner = InputScanner;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar InputScanner = __webpack_require__(8).InputScanner;\nvar Token = __webpack_require__(3).Token;\nvar TokenStream = __webpack_require__(10).TokenStream;\nvar WhitespacePattern = __webpack_require__(11).WhitespacePattern;\n\nvar TOKEN = {\n  START: 'TK_START',\n  RAW: 'TK_RAW',\n  EOF: 'TK_EOF'\n};\n\nvar Tokenizer = function(input_string, options) {\n  this._input = new InputScanner(input_string);\n  this._options = options || {};\n  this.__tokens = null;\n\n  this._patterns = {};\n  this._patterns.whitespace = new WhitespacePattern(this._input);\n};\n\nTokenizer.prototype.tokenize = function() {\n  this._input.restart();\n  this.__tokens = new TokenStream();\n\n  this._reset();\n\n  var current;\n  var previous = new Token(TOKEN.START, '');\n  var open_token = null;\n  var open_stack = [];\n  var comments = new TokenStream();\n\n  while (previous.type !== TOKEN.EOF) {\n    current = this._get_next_token(previous, open_token);\n    while (this._is_comment(current)) {\n      comments.add(current);\n      current = this._get_next_token(previous, open_token);\n    }\n\n    if (!comments.isEmpty()) {\n      current.comments_before = comments;\n      comments = new TokenStream();\n    }\n\n    current.parent = open_token;\n\n    if (this._is_opening(current)) {\n      open_stack.push(open_token);\n      open_token = current;\n    } else if (open_token && this._is_closing(current, open_token)) {\n      current.opened = open_token;\n      open_token.closed = current;\n      open_token = open_stack.pop();\n      current.parent = open_token;\n    }\n\n    current.previous = previous;\n    previous.next = current;\n\n    this.__tokens.add(current);\n    previous = current;\n  }\n\n  return this.__tokens;\n};\n\n\nTokenizer.prototype._is_first_token = function() {\n  return this.__tokens.isEmpty();\n};\n\nTokenizer.prototype._reset = function() {};\n\nTokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false\n  this._readWhitespace();\n  var resulting_string = this._input.read(/.+/g);\n  if (resulting_string) {\n    return this._create_token(TOKEN.RAW, resulting_string);\n  } else {\n    return this._create_token(TOKEN.EOF, '');\n  }\n};\n\nTokenizer.prototype._is_comment = function(current_token) { // jshint unused:false\n  return false;\n};\n\nTokenizer.prototype._is_opening = function(current_token) { // jshint unused:false\n  return false;\n};\n\nTokenizer.prototype._is_closing = function(current_token, open_token) { // jshint unused:false\n  return false;\n};\n\nTokenizer.prototype._create_token = function(type, text) {\n  var token = new Token(type, text,\n    this._patterns.whitespace.newline_count,\n    this._patterns.whitespace.whitespace_before_token);\n  return token;\n};\n\nTokenizer.prototype._readWhitespace = function() {\n  return this._patterns.whitespace.read();\n};\n\n\n\nmodule.exports.Tokenizer = Tokenizer;\nmodule.exports.TOKEN = TOKEN;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction TokenStream(parent_token) {\n  // private\n  this.__tokens = [];\n  this.__tokens_length = this.__tokens.length;\n  this.__position = 0;\n  this.__parent_token = parent_token;\n}\n\nTokenStream.prototype.restart = function() {\n  this.__position = 0;\n};\n\nTokenStream.prototype.isEmpty = function() {\n  return this.__tokens_length === 0;\n};\n\nTokenStream.prototype.hasNext = function() {\n  return this.__position < this.__tokens_length;\n};\n\nTokenStream.prototype.next = function() {\n  var val = null;\n  if (this.hasNext()) {\n    val = this.__tokens[this.__position];\n    this.__position += 1;\n  }\n  return val;\n};\n\nTokenStream.prototype.peek = function(index) {\n  var val = null;\n  index = index || 0;\n  index += this.__position;\n  if (index >= 0 && index < this.__tokens_length) {\n    val = this.__tokens[index];\n  }\n  return val;\n};\n\nTokenStream.prototype.add = function(token) {\n  if (this.__parent_token) {\n    token.parent = this.__parent_token;\n  }\n  this.__tokens.push(token);\n  this.__tokens_length += 1;\n};\n\nmodule.exports.TokenStream = TokenStream;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Pattern = __webpack_require__(12).Pattern;\n\nfunction WhitespacePattern(input_scanner, parent) {\n  Pattern.call(this, input_scanner, parent);\n  if (parent) {\n    this._line_regexp = this._input.get_regexp(parent._line_regexp);\n  } else {\n    this.__set_whitespace_patterns('', '');\n  }\n\n  this.newline_count = 0;\n  this.whitespace_before_token = '';\n}\nWhitespacePattern.prototype = new Pattern();\n\nWhitespacePattern.prototype.__set_whitespace_patterns = function(whitespace_chars, newline_chars) {\n  whitespace_chars += '\\\\t ';\n  newline_chars += '\\\\n\\\\r';\n\n  this._match_pattern = this._input.get_regexp(\n    '[' + whitespace_chars + newline_chars + ']+', true);\n  this._newline_regexp = this._input.get_regexp(\n    '\\\\r\\\\n|[' + newline_chars + ']');\n};\n\nWhitespacePattern.prototype.read = function() {\n  this.newline_count = 0;\n  this.whitespace_before_token = '';\n\n  var resulting_string = this._input.read(this._match_pattern);\n  if (resulting_string === ' ') {\n    this.whitespace_before_token = ' ';\n  } else if (resulting_string) {\n    var matches = this.__split(this._newline_regexp, resulting_string);\n    this.newline_count = matches.length - 1;\n    this.whitespace_before_token = matches[this.newline_count];\n  }\n\n  return resulting_string;\n};\n\nWhitespacePattern.prototype.matching = function(whitespace_chars, newline_chars) {\n  var result = this._create();\n  result.__set_whitespace_patterns(whitespace_chars, newline_chars);\n  result._update();\n  return result;\n};\n\nWhitespacePattern.prototype._create = function() {\n  return new WhitespacePattern(this._input, this);\n};\n\nWhitespacePattern.prototype.__split = function(regexp, input_string) {\n  regexp.lastIndex = 0;\n  var start_index = 0;\n  var result = [];\n  var next_match = regexp.exec(input_string);\n  while (next_match) {\n    result.push(input_string.substring(start_index, next_match.index));\n    start_index = next_match.index + next_match[0].length;\n    next_match = regexp.exec(input_string);\n  }\n\n  if (start_index < input_string.length) {\n    result.push(input_string.substring(start_index, input_string.length));\n  } else {\n    result.push('');\n  }\n\n  return result;\n};\n\n\n\nmodule.exports.WhitespacePattern = WhitespacePattern;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Pattern(input_scanner, parent) {\n  this._input = input_scanner;\n  this._starting_pattern = null;\n  this._match_pattern = null;\n  this._until_pattern = null;\n  this._until_after = false;\n\n  if (parent) {\n    this._starting_pattern = this._input.get_regexp(parent._starting_pattern, true);\n    this._match_pattern = this._input.get_regexp(parent._match_pattern, true);\n    this._until_pattern = this._input.get_regexp(parent._until_pattern);\n    this._until_after = parent._until_after;\n  }\n}\n\nPattern.prototype.read = function() {\n  var result = this._input.read(this._starting_pattern);\n  if (!this._starting_pattern || result) {\n    result += this._input.read(this._match_pattern, this._until_pattern, this._until_after);\n  }\n  return result;\n};\n\nPattern.prototype.read_match = function() {\n  return this._input.match(this._match_pattern);\n};\n\nPattern.prototype.until_after = function(pattern) {\n  var result = this._create();\n  result._until_after = true;\n  result._until_pattern = this._input.get_regexp(pattern);\n  result._update();\n  return result;\n};\n\nPattern.prototype.until = function(pattern) {\n  var result = this._create();\n  result._until_after = false;\n  result._until_pattern = this._input.get_regexp(pattern);\n  result._update();\n  return result;\n};\n\nPattern.prototype.starting_with = function(pattern) {\n  var result = this._create();\n  result._starting_pattern = this._input.get_regexp(pattern, true);\n  result._update();\n  return result;\n};\n\nPattern.prototype.matching = function(pattern) {\n  var result = this._create();\n  result._match_pattern = this._input.get_regexp(pattern, true);\n  result._update();\n  return result;\n};\n\nPattern.prototype._create = function() {\n  return new Pattern(this._input, this);\n};\n\nPattern.prototype._update = function() {};\n\nmodule.exports.Pattern = Pattern;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Directives(start_block_pattern, end_block_pattern) {\n  start_block_pattern = typeof start_block_pattern === 'string' ? start_block_pattern : start_block_pattern.source;\n  end_block_pattern = typeof end_block_pattern === 'string' ? end_block_pattern : end_block_pattern.source;\n  this.__directives_block_pattern = new RegExp(start_block_pattern + / beautify( \\w+[:]\\w+)+ /.source + end_block_pattern, 'g');\n  this.__directive_pattern = / (\\w+)[:](\\w+)/g;\n\n  this.__directives_end_ignore_pattern = new RegExp(start_block_pattern + /\\sbeautify\\signore:end\\s/.source + end_block_pattern, 'g');\n}\n\nDirectives.prototype.get_directives = function(text) {\n  if (!text.match(this.__directives_block_pattern)) {\n    return null;\n  }\n\n  var directives = {};\n  this.__directive_pattern.lastIndex = 0;\n  var directive_match = this.__directive_pattern.exec(text);\n\n  while (directive_match) {\n    directives[directive_match[1]] = directive_match[2];\n    directive_match = this.__directive_pattern.exec(text);\n  }\n\n  return directives;\n};\n\nDirectives.prototype.readIgnored = function(input) {\n  return input.readUntilAfter(this.__directives_end_ignore_pattern);\n};\n\n\nmodule.exports.Directives = Directives;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Pattern = __webpack_require__(12).Pattern;\n\n\nvar template_names = {\n  django: false,\n  erb: false,\n  handlebars: false,\n  php: false\n};\n\n// This lets templates appear anywhere we would do a readUntil\n// The cost is higher but it is pay to play.\nfunction TemplatablePattern(input_scanner, parent) {\n  Pattern.call(this, input_scanner, parent);\n  this.__template_pattern = null;\n  this._disabled = Object.assign({}, template_names);\n  this._excluded = Object.assign({}, template_names);\n\n  if (parent) {\n    this.__template_pattern = this._input.get_regexp(parent.__template_pattern);\n    this._excluded = Object.assign(this._excluded, parent._excluded);\n    this._disabled = Object.assign(this._disabled, parent._disabled);\n  }\n  var pattern = new Pattern(input_scanner);\n  this.__patterns = {\n    handlebars_comment: pattern.starting_with(/{{!--/).until_after(/--}}/),\n    handlebars_unescaped: pattern.starting_with(/{{{/).until_after(/}}}/),\n    handlebars: pattern.starting_with(/{{/).until_after(/}}/),\n    php: pattern.starting_with(/<\\?(?:[=]|php)/).until_after(/\\?>/),\n    erb: pattern.starting_with(/<%[^%]/).until_after(/[^%]%>/),\n    // django coflicts with handlebars a bit.\n    django: pattern.starting_with(/{%/).until_after(/%}/),\n    django_value: pattern.starting_with(/{{/).until_after(/}}/),\n    django_comment: pattern.starting_with(/{#/).until_after(/#}/)\n  };\n}\nTemplatablePattern.prototype = new Pattern();\n\nTemplatablePattern.prototype._create = function() {\n  return new TemplatablePattern(this._input, this);\n};\n\nTemplatablePattern.prototype._update = function() {\n  this.__set_templated_pattern();\n};\n\nTemplatablePattern.prototype.disable = function(language) {\n  var result = this._create();\n  result._disabled[language] = true;\n  result._update();\n  return result;\n};\n\nTemplatablePattern.prototype.read_options = function(options) {\n  var result = this._create();\n  for (var language in template_names) {\n    result._disabled[language] = options.templating.indexOf(language) === -1;\n  }\n  result._update();\n  return result;\n};\n\nTemplatablePattern.prototype.exclude = function(language) {\n  var result = this._create();\n  result._excluded[language] = true;\n  result._update();\n  return result;\n};\n\nTemplatablePattern.prototype.read = function() {\n  var result = '';\n  if (this._match_pattern) {\n    result = this._input.read(this._starting_pattern);\n  } else {\n    result = this._input.read(this._starting_pattern, this.__template_pattern);\n  }\n  var next = this._read_template();\n  while (next) {\n    if (this._match_pattern) {\n      next += this._input.read(this._match_pattern);\n    } else {\n      next += this._input.readUntil(this.__template_pattern);\n    }\n    result += next;\n    next = this._read_template();\n  }\n\n  if (this._until_after) {\n    result += this._input.readUntilAfter(this._until_pattern);\n  }\n  return result;\n};\n\nTemplatablePattern.prototype.__set_templated_pattern = function() {\n  var items = [];\n\n  if (!this._disabled.php) {\n    items.push(this.__patterns.php._starting_pattern.source);\n  }\n  if (!this._disabled.handlebars) {\n    items.push(this.__patterns.handlebars._starting_pattern.source);\n  }\n  if (!this._disabled.erb) {\n    items.push(this.__patterns.erb._starting_pattern.source);\n  }\n  if (!this._disabled.django) {\n    items.push(this.__patterns.django._starting_pattern.source);\n    items.push(this.__patterns.django_value._starting_pattern.source);\n    items.push(this.__patterns.django_comment._starting_pattern.source);\n  }\n\n  if (this._until_pattern) {\n    items.push(this._until_pattern.source);\n  }\n  this.__template_pattern = this._input.get_regexp('(?:' + items.join('|') + ')');\n};\n\nTemplatablePattern.prototype._read_template = function() {\n  var resulting_string = '';\n  var c = this._input.peek();\n  if (c === '<') {\n    var peek1 = this._input.peek(1);\n    //if we're in a comment, do something special\n    // We treat all comments as literals, even more than preformatted tags\n    // we just look for the appropriate close tag\n    if (!this._disabled.php && !this._excluded.php && peek1 === '?') {\n      resulting_string = resulting_string ||\n        this.__patterns.php.read();\n    }\n    if (!this._disabled.erb && !this._excluded.erb && peek1 === '%') {\n      resulting_string = resulting_string ||\n        this.__patterns.erb.read();\n    }\n  } else if (c === '{') {\n    if (!this._disabled.handlebars && !this._excluded.handlebars) {\n      resulting_string = resulting_string ||\n        this.__patterns.handlebars_comment.read();\n      resulting_string = resulting_string ||\n        this.__patterns.handlebars_unescaped.read();\n      resulting_string = resulting_string ||\n        this.__patterns.handlebars.read();\n    }\n    if (!this._disabled.django) {\n      // django coflicts with handlebars a bit.\n      if (!this._excluded.django && !this._excluded.handlebars) {\n        resulting_string = resulting_string ||\n          this.__patterns.django_value.read();\n      }\n      if (!this._excluded.django) {\n        resulting_string = resulting_string ||\n          this.__patterns.django_comment.read();\n        resulting_string = resulting_string ||\n          this.__patterns.django.read();\n      }\n    }\n  }\n  return resulting_string;\n};\n\n\nmodule.exports.TemplatablePattern = TemplatablePattern;\n\n\n/***/ }),\n/* 15 */,\n/* 16 */,\n/* 17 */,\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Beautifier = __webpack_require__(19).Beautifier,\n  Options = __webpack_require__(20).Options;\n\nfunction style_html(html_source, options, js_beautify, css_beautify) {\n  var beautifier = new Beautifier(html_source, options, js_beautify, css_beautify);\n  return beautifier.beautify();\n}\n\nmodule.exports = style_html;\nmodule.exports.defaultOptions = function() {\n  return new Options();\n};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Options = __webpack_require__(20).Options;\nvar Output = __webpack_require__(2).Output;\nvar Tokenizer = __webpack_require__(21).Tokenizer;\nvar TOKEN = __webpack_require__(21).TOKEN;\n\nvar lineBreak = /\\r\\n|[\\r\\n]/;\nvar allLineBreaks = /\\r\\n|[\\r\\n]/g;\n\nvar Printer = function(options, base_indent_string) { //handles input/output and some other printing functions\n\n  this.indent_level = 0;\n  this.alignment_size = 0;\n  this.max_preserve_newlines = options.max_preserve_newlines;\n  this.preserve_newlines = options.preserve_newlines;\n\n  this._output = new Output(options, base_indent_string);\n\n};\n\nPrinter.prototype.current_line_has_match = function(pattern) {\n  return this._output.current_line.has_match(pattern);\n};\n\nPrinter.prototype.set_space_before_token = function(value, non_breaking) {\n  this._output.space_before_token = value;\n  this._output.non_breaking_space = non_breaking;\n};\n\nPrinter.prototype.set_wrap_point = function() {\n  this._output.set_indent(this.indent_level, this.alignment_size);\n  this._output.set_wrap_point();\n};\n\n\nPrinter.prototype.add_raw_token = function(token) {\n  this._output.add_raw_token(token);\n};\n\nPrinter.prototype.print_preserved_newlines = function(raw_token) {\n  var newlines = 0;\n  if (raw_token.type !== TOKEN.TEXT && raw_token.previous.type !== TOKEN.TEXT) {\n    newlines = raw_token.newlines ? 1 : 0;\n  }\n\n  if (this.preserve_newlines) {\n    newlines = raw_token.newlines < this.max_preserve_newlines + 1 ? raw_token.newlines : this.max_preserve_newlines + 1;\n  }\n  for (var n = 0; n < newlines; n++) {\n    this.print_newline(n > 0);\n  }\n\n  return newlines !== 0;\n};\n\nPrinter.prototype.traverse_whitespace = function(raw_token) {\n  if (raw_token.whitespace_before || raw_token.newlines) {\n    if (!this.print_preserved_newlines(raw_token)) {\n      this._output.space_before_token = true;\n    }\n    return true;\n  }\n  return false;\n};\n\nPrinter.prototype.previous_token_wrapped = function() {\n  return this._output.previous_token_wrapped;\n};\n\nPrinter.prototype.print_newline = function(force) {\n  this._output.add_new_line(force);\n};\n\nPrinter.prototype.print_token = function(token) {\n  if (token.text) {\n    this._output.set_indent(this.indent_level, this.alignment_size);\n    this._output.add_token(token.text);\n  }\n};\n\nPrinter.prototype.indent = function() {\n  this.indent_level++;\n};\n\nPrinter.prototype.get_full_indent = function(level) {\n  level = this.indent_level + (level || 0);\n  if (level < 1) {\n    return '';\n  }\n\n  return this._output.get_indent_string(level);\n};\n\nvar get_type_attribute = function(start_token) {\n  var result = null;\n  var raw_token = start_token.next;\n\n  // Search attributes for a type attribute\n  while (raw_token.type !== TOKEN.EOF && start_token.closed !== raw_token) {\n    if (raw_token.type === TOKEN.ATTRIBUTE && raw_token.text === 'type') {\n      if (raw_token.next && raw_token.next.type === TOKEN.EQUALS &&\n        raw_token.next.next && raw_token.next.next.type === TOKEN.VALUE) {\n        result = raw_token.next.next.text;\n      }\n      break;\n    }\n    raw_token = raw_token.next;\n  }\n\n  return result;\n};\n\nvar get_custom_beautifier_name = function(tag_check, raw_token) {\n  var typeAttribute = null;\n  var result = null;\n\n  if (!raw_token.closed) {\n    return null;\n  }\n\n  if (tag_check === 'script') {\n    typeAttribute = 'text/javascript';\n  } else if (tag_check === 'style') {\n    typeAttribute = 'text/css';\n  }\n\n  typeAttribute = get_type_attribute(raw_token) || typeAttribute;\n\n  // For script and style tags that have a type attribute, only enable custom beautifiers for matching values\n  // For those without a type attribute use default;\n  if (typeAttribute.search('text/css') > -1) {\n    result = 'css';\n  } else if (typeAttribute.search(/module|((text|application|dojo)\\/(x-)?(javascript|ecmascript|jscript|livescript|(ld\\+)?json|method|aspect))/) > -1) {\n    result = 'javascript';\n  } else if (typeAttribute.search(/(text|application|dojo)\\/(x-)?(html)/) > -1) {\n    result = 'html';\n  } else if (typeAttribute.search(/test\\/null/) > -1) {\n    // Test only mime-type for testing the beautifier when null is passed as beautifing function\n    result = 'null';\n  }\n\n  return result;\n};\n\nfunction in_array(what, arr) {\n  return arr.indexOf(what) !== -1;\n}\n\nfunction TagFrame(parent, parser_token, indent_level) {\n  this.parent = parent || null;\n  this.tag = parser_token ? parser_token.tag_name : '';\n  this.indent_level = indent_level || 0;\n  this.parser_token = parser_token || null;\n}\n\nfunction TagStack(printer) {\n  this._printer = printer;\n  this._current_frame = null;\n}\n\nTagStack.prototype.get_parser_token = function() {\n  return this._current_frame ? this._current_frame.parser_token : null;\n};\n\nTagStack.prototype.record_tag = function(parser_token) { //function to record a tag and its parent in this.tags Object\n  var new_frame = new TagFrame(this._current_frame, parser_token, this._printer.indent_level);\n  this._current_frame = new_frame;\n};\n\nTagStack.prototype._try_pop_frame = function(frame) { //function to retrieve the opening tag to the corresponding closer\n  var parser_token = null;\n\n  if (frame) {\n    parser_token = frame.parser_token;\n    this._printer.indent_level = frame.indent_level;\n    this._current_frame = frame.parent;\n  }\n\n  return parser_token;\n};\n\nTagStack.prototype._get_frame = function(tag_list, stop_list) { //function to retrieve the opening tag to the corresponding closer\n  var frame = this._current_frame;\n\n  while (frame) { //till we reach '' (the initial value);\n    if (tag_list.indexOf(frame.tag) !== -1) { //if this is it use it\n      break;\n    } else if (stop_list && stop_list.indexOf(frame.tag) !== -1) {\n      frame = null;\n      break;\n    }\n    frame = frame.parent;\n  }\n\n  return frame;\n};\n\nTagStack.prototype.try_pop = function(tag, stop_list) { //function to retrieve the opening tag to the corresponding closer\n  var frame = this._get_frame([tag], stop_list);\n  return this._try_pop_frame(frame);\n};\n\nTagStack.prototype.indent_to_tag = function(tag_list) {\n  var frame = this._get_frame(tag_list);\n  if (frame) {\n    this._printer.indent_level = frame.indent_level;\n  }\n};\n\nfunction Beautifier(source_text, options, js_beautify, css_beautify) {\n  //Wrapper function to invoke all the necessary constructors and deal with the output.\n  this._source_text = source_text || '';\n  options = options || {};\n  this._js_beautify = js_beautify;\n  this._css_beautify = css_beautify;\n  this._tag_stack = null;\n\n  // Allow the setting of language/file-type specific options\n  // with inheritance of overall settings\n  var optionHtml = new Options(options, 'html');\n\n  this._options = optionHtml;\n\n  this._is_wrap_attributes_force = this._options.wrap_attributes.substr(0, 'force'.length) === 'force';\n  this._is_wrap_attributes_force_expand_multiline = (this._options.wrap_attributes === 'force-expand-multiline');\n  this._is_wrap_attributes_force_aligned = (this._options.wrap_attributes === 'force-aligned');\n  this._is_wrap_attributes_aligned_multiple = (this._options.wrap_attributes === 'aligned-multiple');\n  this._is_wrap_attributes_preserve = this._options.wrap_attributes.substr(0, 'preserve'.length) === 'preserve';\n  this._is_wrap_attributes_preserve_aligned = (this._options.wrap_attributes === 'preserve-aligned');\n}\n\nBeautifier.prototype.beautify = function() {\n\n  // if disabled, return the input unchanged.\n  if (this._options.disabled) {\n    return this._source_text;\n  }\n\n  var source_text = this._source_text;\n  var eol = this._options.eol;\n  if (this._options.eol === 'auto') {\n    eol = '\\n';\n    if (source_text && lineBreak.test(source_text)) {\n      eol = source_text.match(lineBreak)[0];\n    }\n  }\n\n  // HACK: newline parsing inconsistent. This brute force normalizes the input.\n  source_text = source_text.replace(allLineBreaks, '\\n');\n\n  var baseIndentString = source_text.match(/^[\\t ]*/)[0];\n\n  var last_token = {\n    text: '',\n    type: ''\n  };\n\n  var last_tag_token = new TagOpenParserToken();\n\n  var printer = new Printer(this._options, baseIndentString);\n  var tokens = new Tokenizer(source_text, this._options).tokenize();\n\n  this._tag_stack = new TagStack(printer);\n\n  var parser_token = null;\n  var raw_token = tokens.next();\n  while (raw_token.type !== TOKEN.EOF) {\n\n    if (raw_token.type === TOKEN.TAG_OPEN || raw_token.type === TOKEN.COMMENT) {\n      parser_token = this._handle_tag_open(printer, raw_token, last_tag_token, last_token);\n      last_tag_token = parser_token;\n    } else if ((raw_token.type === TOKEN.ATTRIBUTE || raw_token.type === TOKEN.EQUALS || raw_token.type === TOKEN.VALUE) ||\n      (raw_token.type === TOKEN.TEXT && !last_tag_token.tag_complete)) {\n      parser_token = this._handle_inside_tag(printer, raw_token, last_tag_token, tokens);\n    } else if (raw_token.type === TOKEN.TAG_CLOSE) {\n      parser_token = this._handle_tag_close(printer, raw_token, last_tag_token);\n    } else if (raw_token.type === TOKEN.TEXT) {\n      parser_token = this._handle_text(printer, raw_token, last_tag_token);\n    } else {\n      // This should never happen, but if it does. Print the raw token\n      printer.add_raw_token(raw_token);\n    }\n\n    last_token = parser_token;\n\n    raw_token = tokens.next();\n  }\n  var sweet_code = printer._output.get_code(eol);\n\n  return sweet_code;\n};\n\nBeautifier.prototype._handle_tag_close = function(printer, raw_token, last_tag_token) {\n  var parser_token = {\n    text: raw_token.text,\n    type: raw_token.type\n  };\n  printer.alignment_size = 0;\n  last_tag_token.tag_complete = true;\n\n  printer.set_space_before_token(raw_token.newlines || raw_token.whitespace_before !== '', true);\n  if (last_tag_token.is_unformatted) {\n    printer.add_raw_token(raw_token);\n  } else {\n    if (last_tag_token.tag_start_char === '<') {\n      printer.set_space_before_token(raw_token.text[0] === '/', true); // space before />, no space before >\n      if (this._is_wrap_attributes_force_expand_multiline && last_tag_token.has_wrapped_attrs) {\n        printer.print_newline(false);\n      }\n    }\n    printer.print_token(raw_token);\n\n  }\n\n  if (last_tag_token.indent_content &&\n    !(last_tag_token.is_unformatted || last_tag_token.is_content_unformatted)) {\n    printer.indent();\n\n    // only indent once per opened tag\n    last_tag_token.indent_content = false;\n  }\n\n  if (!last_tag_token.is_inline_element &&\n    !(last_tag_token.is_unformatted || last_tag_token.is_content_unformatted)) {\n    printer.set_wrap_point();\n  }\n\n  return parser_token;\n};\n\nBeautifier.prototype._handle_inside_tag = function(printer, raw_token, last_tag_token, tokens) {\n  var wrapped = last_tag_token.has_wrapped_attrs;\n  var parser_token = {\n    text: raw_token.text,\n    type: raw_token.type\n  };\n\n  printer.set_space_before_token(raw_token.newlines || raw_token.whitespace_before !== '', true);\n  if (last_tag_token.is_unformatted) {\n    printer.add_raw_token(raw_token);\n  } else if (last_tag_token.tag_start_char === '{' && raw_token.type === TOKEN.TEXT) {\n    // For the insides of handlebars allow newlines or a single space between open and contents\n    if (printer.print_preserved_newlines(raw_token)) {\n      raw_token.newlines = 0;\n      printer.add_raw_token(raw_token);\n    } else {\n      printer.print_token(raw_token);\n    }\n  } else {\n    if (raw_token.type === TOKEN.ATTRIBUTE) {\n      printer.set_space_before_token(true);\n      last_tag_token.attr_count += 1;\n    } else if (raw_token.type === TOKEN.EQUALS) { //no space before =\n      printer.set_space_before_token(false);\n    } else if (raw_token.type === TOKEN.VALUE && raw_token.previous.type === TOKEN.EQUALS) { //no space before value\n      printer.set_space_before_token(false);\n    }\n\n    if (raw_token.type === TOKEN.ATTRIBUTE && last_tag_token.tag_start_char === '<') {\n      if (this._is_wrap_attributes_preserve || this._is_wrap_attributes_preserve_aligned) {\n        printer.traverse_whitespace(raw_token);\n        wrapped = wrapped || raw_token.newlines !== 0;\n      }\n\n\n      if (this._is_wrap_attributes_force) {\n        var force_attr_wrap = last_tag_token.attr_count > 1;\n        if (this._is_wrap_attributes_force_expand_multiline && last_tag_token.attr_count === 1) {\n          var is_only_attribute = true;\n          var peek_index = 0;\n          var peek_token;\n          do {\n            peek_token = tokens.peek(peek_index);\n            if (peek_token.type === TOKEN.ATTRIBUTE) {\n              is_only_attribute = false;\n              break;\n            }\n            peek_index += 1;\n          } while (peek_index < 4 && peek_token.type !== TOKEN.EOF && peek_token.type !== TOKEN.TAG_CLOSE);\n\n          force_attr_wrap = !is_only_attribute;\n        }\n\n        if (force_attr_wrap) {\n          printer.print_newline(false);\n          wrapped = true;\n        }\n      }\n    }\n    printer.print_token(raw_token);\n    wrapped = wrapped || printer.previous_token_wrapped();\n    last_tag_token.has_wrapped_attrs = wrapped;\n  }\n  return parser_token;\n};\n\nBeautifier.prototype._handle_text = function(printer, raw_token, last_tag_token) {\n  var parser_token = {\n    text: raw_token.text,\n    type: 'TK_CONTENT'\n  };\n  if (last_tag_token.custom_beautifier_name) { //check if we need to format javascript\n    this._print_custom_beatifier_text(printer, raw_token, last_tag_token);\n  } else if (last_tag_token.is_unformatted || last_tag_token.is_content_unformatted) {\n    printer.add_raw_token(raw_token);\n  } else {\n    printer.traverse_whitespace(raw_token);\n    printer.print_token(raw_token);\n  }\n  return parser_token;\n};\n\nBeautifier.prototype._print_custom_beatifier_text = function(printer, raw_token, last_tag_token) {\n  var local = this;\n  if (raw_token.text !== '') {\n\n    var text = raw_token.text,\n      _beautifier,\n      script_indent_level = 1,\n      pre = '',\n      post = '';\n    if (last_tag_token.custom_beautifier_name === 'javascript' && typeof this._js_beautify === 'function') {\n      _beautifier = this._js_beautify;\n    } else if (last_tag_token.custom_beautifier_name === 'css' && typeof this._css_beautify === 'function') {\n      _beautifier = this._css_beautify;\n    } else if (last_tag_token.custom_beautifier_name === 'html') {\n      _beautifier = function(html_source, options) {\n        var beautifier = new Beautifier(html_source, options, local._js_beautify, local._css_beautify);\n        return beautifier.beautify();\n      };\n    }\n\n    if (this._options.indent_scripts === \"keep\") {\n      script_indent_level = 0;\n    } else if (this._options.indent_scripts === \"separate\") {\n      script_indent_level = -printer.indent_level;\n    }\n\n    var indentation = printer.get_full_indent(script_indent_level);\n\n    // if there is at least one empty line at the end of this text, strip it\n    // we'll be adding one back after the text but before the containing tag.\n    text = text.replace(/\\n[ \\t]*$/, '');\n\n    // Handle the case where content is wrapped in a comment or cdata.\n    if (last_tag_token.custom_beautifier_name !== 'html' &&\n      text[0] === '<' && text.match(/^(<!--|<!\\[CDATA\\[)/)) {\n      var matched = /^(<!--[^\\n]*|<!\\[CDATA\\[)(\\n?)([ \\t\\n]*)([\\s\\S]*)(-->|]]>)$/.exec(text);\n\n      // if we start to wrap but don't finish, print raw\n      if (!matched) {\n        printer.add_raw_token(raw_token);\n        return;\n      }\n\n      pre = indentation + matched[1] + '\\n';\n      text = matched[4];\n      if (matched[5]) {\n        post = indentation + matched[5];\n      }\n\n      // if there is at least one empty line at the end of this text, strip it\n      // we'll be adding one back after the text but before the containing tag.\n      text = text.replace(/\\n[ \\t]*$/, '');\n\n      if (matched[2] || matched[3].indexOf('\\n') !== -1) {\n        // if the first line of the non-comment text has spaces\n        // use that as the basis for indenting in null case.\n        matched = matched[3].match(/[ \\t]+$/);\n        if (matched) {\n          raw_token.whitespace_before = matched[0];\n        }\n      }\n    }\n\n    if (text) {\n      if (_beautifier) {\n\n        // call the Beautifier if avaliable\n        var Child_options = function() {\n          this.eol = '\\n';\n        };\n        Child_options.prototype = this._options.raw_options;\n        var child_options = new Child_options();\n        text = _beautifier(indentation + text, child_options);\n      } else {\n        // simply indent the string otherwise\n        var white = raw_token.whitespace_before;\n        if (white) {\n          text = text.replace(new RegExp('\\n(' + white + ')?', 'g'), '\\n');\n        }\n\n        text = indentation + text.replace(/\\n/g, '\\n' + indentation);\n      }\n    }\n\n    if (pre) {\n      if (!text) {\n        text = pre + post;\n      } else {\n        text = pre + text + '\\n' + post;\n      }\n    }\n\n    printer.print_newline(false);\n    if (text) {\n      raw_token.text = text;\n      raw_token.whitespace_before = '';\n      raw_token.newlines = 0;\n      printer.add_raw_token(raw_token);\n      printer.print_newline(true);\n    }\n  }\n};\n\nBeautifier.prototype._handle_tag_open = function(printer, raw_token, last_tag_token, last_token) {\n  var parser_token = this._get_tag_open_token(raw_token);\n\n  if ((last_tag_token.is_unformatted || last_tag_token.is_content_unformatted) &&\n    !last_tag_token.is_empty_element &&\n    raw_token.type === TOKEN.TAG_OPEN && raw_token.text.indexOf('</') === 0) {\n    // End element tags for unformatted or content_unformatted elements\n    // are printed raw to keep any newlines inside them exactly the same.\n    printer.add_raw_token(raw_token);\n    parser_token.start_tag_token = this._tag_stack.try_pop(parser_token.tag_name);\n  } else {\n    printer.traverse_whitespace(raw_token);\n    this._set_tag_position(printer, raw_token, parser_token, last_tag_token, last_token);\n    if (!parser_token.is_inline_element) {\n      printer.set_wrap_point();\n    }\n    printer.print_token(raw_token);\n  }\n\n  //indent attributes an auto, forced, aligned or forced-align line-wrap\n  if (this._is_wrap_attributes_force_aligned || this._is_wrap_attributes_aligned_multiple || this._is_wrap_attributes_preserve_aligned) {\n    parser_token.alignment_size = raw_token.text.length + 1;\n  }\n\n  if (!parser_token.tag_complete && !parser_token.is_unformatted) {\n    printer.alignment_size = parser_token.alignment_size;\n  }\n\n  return parser_token;\n};\n\nvar TagOpenParserToken = function(parent, raw_token) {\n  this.parent = parent || null;\n  this.text = '';\n  this.type = 'TK_TAG_OPEN';\n  this.tag_name = '';\n  this.is_inline_element = false;\n  this.is_unformatted = false;\n  this.is_content_unformatted = false;\n  this.is_empty_element = false;\n  this.is_start_tag = false;\n  this.is_end_tag = false;\n  this.indent_content = false;\n  this.multiline_content = false;\n  this.custom_beautifier_name = null;\n  this.start_tag_token = null;\n  this.attr_count = 0;\n  this.has_wrapped_attrs = false;\n  this.alignment_size = 0;\n  this.tag_complete = false;\n  this.tag_start_char = '';\n  this.tag_check = '';\n\n  if (!raw_token) {\n    this.tag_complete = true;\n  } else {\n    var tag_check_match;\n\n    this.tag_start_char = raw_token.text[0];\n    this.text = raw_token.text;\n\n    if (this.tag_start_char === '<') {\n      tag_check_match = raw_token.text.match(/^<([^\\s>]*)/);\n      this.tag_check = tag_check_match ? tag_check_match[1] : '';\n    } else {\n      tag_check_match = raw_token.text.match(/^{{(?:[\\^]|#\\*?)?([^\\s}]+)/);\n      this.tag_check = tag_check_match ? tag_check_match[1] : '';\n\n      // handle \"{{#> myPartial}}\n      if (raw_token.text === '{{#>' && this.tag_check === '>' && raw_token.next !== null) {\n        this.tag_check = raw_token.next.text;\n      }\n    }\n    this.tag_check = this.tag_check.toLowerCase();\n\n    if (raw_token.type === TOKEN.COMMENT) {\n      this.tag_complete = true;\n    }\n\n    this.is_start_tag = this.tag_check.charAt(0) !== '/';\n    this.tag_name = !this.is_start_tag ? this.tag_check.substr(1) : this.tag_check;\n    this.is_end_tag = !this.is_start_tag ||\n      (raw_token.closed && raw_token.closed.text === '/>');\n\n    // handlebars tags that don't start with # or ^ are single_tags, and so also start and end.\n    this.is_end_tag = this.is_end_tag ||\n      (this.tag_start_char === '{' && (this.text.length < 3 || (/[^#\\^]/.test(this.text.charAt(2)))));\n  }\n};\n\nBeautifier.prototype._get_tag_open_token = function(raw_token) { //function to get a full tag and parse its type\n  var parser_token = new TagOpenParserToken(this._tag_stack.get_parser_token(), raw_token);\n\n  parser_token.alignment_size = this._options.wrap_attributes_indent_size;\n\n  parser_token.is_end_tag = parser_token.is_end_tag ||\n    in_array(parser_token.tag_check, this._options.void_elements);\n\n  parser_token.is_empty_element = parser_token.tag_complete ||\n    (parser_token.is_start_tag && parser_token.is_end_tag);\n\n  parser_token.is_unformatted = !parser_token.tag_complete && in_array(parser_token.tag_check, this._options.unformatted);\n  parser_token.is_content_unformatted = !parser_token.is_empty_element && in_array(parser_token.tag_check, this._options.content_unformatted);\n  parser_token.is_inline_element = in_array(parser_token.tag_name, this._options.inline) || parser_token.tag_start_char === '{';\n\n  return parser_token;\n};\n\nBeautifier.prototype._set_tag_position = function(printer, raw_token, parser_token, last_tag_token, last_token) {\n\n  if (!parser_token.is_empty_element) {\n    if (parser_token.is_end_tag) { //this tag is a double tag so check for tag-ending\n      parser_token.start_tag_token = this._tag_stack.try_pop(parser_token.tag_name); //remove it and all ancestors\n    } else { // it's a start-tag\n      // check if this tag is starting an element that has optional end element\n      // and do an ending needed\n      if (this._do_optional_end_element(parser_token)) {\n        if (!parser_token.is_inline_element) {\n          printer.print_newline(false);\n        }\n      }\n\n      this._tag_stack.record_tag(parser_token); //push it on the tag stack\n\n      if ((parser_token.tag_name === 'script' || parser_token.tag_name === 'style') &&\n        !(parser_token.is_unformatted || parser_token.is_content_unformatted)) {\n        parser_token.custom_beautifier_name = get_custom_beautifier_name(parser_token.tag_check, raw_token);\n      }\n    }\n  }\n\n  if (in_array(parser_token.tag_check, this._options.extra_liners)) { //check if this double needs an extra line\n    printer.print_newline(false);\n    if (!printer._output.just_added_blankline()) {\n      printer.print_newline(true);\n    }\n  }\n\n  if (parser_token.is_empty_element) { //if this tag name is a single tag type (either in the list or has a closing /)\n\n    // if you hit an else case, reset the indent level if you are inside an:\n    // 'if', 'unless', or 'each' block.\n    if (parser_token.tag_start_char === '{' && parser_token.tag_check === 'else') {\n      this._tag_stack.indent_to_tag(['if', 'unless', 'each']);\n      parser_token.indent_content = true;\n      // Don't add a newline if opening {{#if}} tag is on the current line\n      var foundIfOnCurrentLine = printer.current_line_has_match(/{{#if/);\n      if (!foundIfOnCurrentLine) {\n        printer.print_newline(false);\n      }\n    }\n\n    // Don't add a newline before elements that should remain where they are.\n    if (parser_token.tag_name === '!--' && last_token.type === TOKEN.TAG_CLOSE &&\n      last_tag_token.is_end_tag && parser_token.text.indexOf('\\n') === -1) {\n      //Do nothing. Leave comments on same line.\n    } else {\n      if (!(parser_token.is_inline_element || parser_token.is_unformatted)) {\n        printer.print_newline(false);\n      }\n      this._calcluate_parent_multiline(printer, parser_token);\n    }\n  } else if (parser_token.is_end_tag) { //this tag is a double tag so check for tag-ending\n    var do_end_expand = false;\n\n    // deciding whether a block is multiline should not be this hard\n    do_end_expand = parser_token.start_tag_token && parser_token.start_tag_token.multiline_content;\n    do_end_expand = do_end_expand || (!parser_token.is_inline_element &&\n      !(last_tag_token.is_inline_element || last_tag_token.is_unformatted) &&\n      !(last_token.type === TOKEN.TAG_CLOSE && parser_token.start_tag_token === last_tag_token) &&\n      last_token.type !== 'TK_CONTENT'\n    );\n\n    if (parser_token.is_content_unformatted || parser_token.is_unformatted) {\n      do_end_expand = false;\n    }\n\n    if (do_end_expand) {\n      printer.print_newline(false);\n    }\n  } else { // it's a start-tag\n    parser_token.indent_content = !parser_token.custom_beautifier_name;\n\n    if (parser_token.tag_start_char === '<') {\n      if (parser_token.tag_name === 'html') {\n        parser_token.indent_content = this._options.indent_inner_html;\n      } else if (parser_token.tag_name === 'head') {\n        parser_token.indent_content = this._options.indent_head_inner_html;\n      } else if (parser_token.tag_name === 'body') {\n        parser_token.indent_content = this._options.indent_body_inner_html;\n      }\n    }\n\n    if (!(parser_token.is_inline_element || parser_token.is_unformatted) &&\n      (last_token.type !== 'TK_CONTENT' || parser_token.is_content_unformatted)) {\n      printer.print_newline(false);\n    }\n\n    this._calcluate_parent_multiline(printer, parser_token);\n  }\n};\n\nBeautifier.prototype._calcluate_parent_multiline = function(printer, parser_token) {\n  if (parser_token.parent && printer._output.just_added_newline() &&\n    !((parser_token.is_inline_element || parser_token.is_unformatted) && parser_token.parent.is_inline_element)) {\n    parser_token.parent.multiline_content = true;\n  }\n};\n\n//To be used for <p> tag special case:\nvar p_closers = ['address', 'article', 'aside', 'blockquote', 'details', 'div', 'dl', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'main', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'];\nvar p_parent_excludes = ['a', 'audio', 'del', 'ins', 'map', 'noscript', 'video'];\n\nBeautifier.prototype._do_optional_end_element = function(parser_token) {\n  var result = null;\n  // NOTE: cases of \"if there is no more content in the parent element\"\n  // are handled automatically by the beautifier.\n  // It assumes parent or ancestor close tag closes all children.\n  // https://www.w3.org/TR/html5/syntax.html#optional-tags\n  if (parser_token.is_empty_element || !parser_token.is_start_tag || !parser_token.parent) {\n    return;\n\n  }\n\n  if (parser_token.tag_name === 'body') {\n    // A head element’s end tag may be omitted if the head element is not immediately followed by a space character or a comment.\n    result = result || this._tag_stack.try_pop('head');\n\n    //} else if (parser_token.tag_name === 'body') {\n    // DONE: A body element’s end tag may be omitted if the body element is not immediately followed by a comment.\n\n  } else if (parser_token.tag_name === 'li') {\n    // An li element’s end tag may be omitted if the li element is immediately followed by another li element or if there is no more content in the parent element.\n    result = result || this._tag_stack.try_pop('li', ['ol', 'ul']);\n\n  } else if (parser_token.tag_name === 'dd' || parser_token.tag_name === 'dt') {\n    // A dd element’s end tag may be omitted if the dd element is immediately followed by another dd element or a dt element, or if there is no more content in the parent element.\n    // A dt element’s end tag may be omitted if the dt element is immediately followed by another dt element or a dd element.\n    result = result || this._tag_stack.try_pop('dt', ['dl']);\n    result = result || this._tag_stack.try_pop('dd', ['dl']);\n\n\n  } else if (parser_token.parent.tag_name === 'p' && p_closers.indexOf(parser_token.tag_name) !== -1) {\n    // IMPORTANT: this else-if works because p_closers has no overlap with any other element we look for in this method\n    // check for the parent element is an HTML element that is not an <a>, <audio>, <del>, <ins>, <map>, <noscript>, or <video> element,  or an autonomous custom element.\n    // To do this right, this needs to be coded as an inclusion of the inverse of the exclusion above.\n    // But to start with (if we ignore \"autonomous custom elements\") the exclusion would be fine.\n    var p_parent = parser_token.parent.parent;\n    if (!p_parent || p_parent_excludes.indexOf(p_parent.tag_name) === -1) {\n      result = result || this._tag_stack.try_pop('p');\n    }\n  } else if (parser_token.tag_name === 'rp' || parser_token.tag_name === 'rt') {\n    // An rt element’s end tag may be omitted if the rt element is immediately followed by an rt or rp element, or if there is no more content in the parent element.\n    // An rp element’s end tag may be omitted if the rp element is immediately followed by an rt or rp element, or if there is no more content in the parent element.\n    result = result || this._tag_stack.try_pop('rt', ['ruby', 'rtc']);\n    result = result || this._tag_stack.try_pop('rp', ['ruby', 'rtc']);\n\n  } else if (parser_token.tag_name === 'optgroup') {\n    // An optgroup element’s end tag may be omitted if the optgroup element is immediately followed by another optgroup element, or if there is no more content in the parent element.\n    // An option element’s end tag may be omitted if the option element is immediately followed by another option element, or if it is immediately followed by an optgroup element, or if there is no more content in the parent element.\n    result = result || this._tag_stack.try_pop('optgroup', ['select']);\n    //result = result || this._tag_stack.try_pop('option', ['select']);\n\n  } else if (parser_token.tag_name === 'option') {\n    // An option element’s end tag may be omitted if the option element is immediately followed by another option element, or if it is immediately followed by an optgroup element, or if there is no more content in the parent element.\n    result = result || this._tag_stack.try_pop('option', ['select', 'datalist', 'optgroup']);\n\n  } else if (parser_token.tag_name === 'colgroup') {\n    // DONE: A colgroup element’s end tag may be omitted if the colgroup element is not immediately followed by a space character or a comment.\n    // A caption element's end tag may be ommitted if a colgroup, thead, tfoot, tbody, or tr element is started.\n    result = result || this._tag_stack.try_pop('caption', ['table']);\n\n  } else if (parser_token.tag_name === 'thead') {\n    // A colgroup element's end tag may be ommitted if a thead, tfoot, tbody, or tr element is started.\n    // A caption element's end tag may be ommitted if a colgroup, thead, tfoot, tbody, or tr element is started.\n    result = result || this._tag_stack.try_pop('caption', ['table']);\n    result = result || this._tag_stack.try_pop('colgroup', ['table']);\n\n    //} else if (parser_token.tag_name === 'caption') {\n    // DONE: A caption element’s end tag may be omitted if the caption element is not immediately followed by a space character or a comment.\n\n  } else if (parser_token.tag_name === 'tbody' || parser_token.tag_name === 'tfoot') {\n    // A thead element’s end tag may be omitted if the thead element is immediately followed by a tbody or tfoot element.\n    // A tbody element’s end tag may be omitted if the tbody element is immediately followed by a tbody or tfoot element, or if there is no more content in the parent element.\n    // A colgroup element's end tag may be ommitted if a thead, tfoot, tbody, or tr element is started.\n    // A caption element's end tag may be ommitted if a colgroup, thead, tfoot, tbody, or tr element is started.\n    result = result || this._tag_stack.try_pop('caption', ['table']);\n    result = result || this._tag_stack.try_pop('colgroup', ['table']);\n    result = result || this._tag_stack.try_pop('thead', ['table']);\n    result = result || this._tag_stack.try_pop('tbody', ['table']);\n\n    //} else if (parser_token.tag_name === 'tfoot') {\n    // DONE: A tfoot element’s end tag may be omitted if there is no more content in the parent element.\n\n  } else if (parser_token.tag_name === 'tr') {\n    // A tr element’s end tag may be omitted if the tr element is immediately followed by another tr element, or if there is no more content in the parent element.\n    // A colgroup element's end tag may be ommitted if a thead, tfoot, tbody, or tr element is started.\n    // A caption element's end tag may be ommitted if a colgroup, thead, tfoot, tbody, or tr element is started.\n    result = result || this._tag_stack.try_pop('caption', ['table']);\n    result = result || this._tag_stack.try_pop('colgroup', ['table']);\n    result = result || this._tag_stack.try_pop('tr', ['table', 'thead', 'tbody', 'tfoot']);\n\n  } else if (parser_token.tag_name === 'th' || parser_token.tag_name === 'td') {\n    // A td element’s end tag may be omitted if the td element is immediately followed by a td or th element, or if there is no more content in the parent element.\n    // A th element’s end tag may be omitted if the th element is immediately followed by a td or th element, or if there is no more content in the parent element.\n    result = result || this._tag_stack.try_pop('td', ['table', 'thead', 'tbody', 'tfoot', 'tr']);\n    result = result || this._tag_stack.try_pop('th', ['table', 'thead', 'tbody', 'tfoot', 'tr']);\n  }\n\n  // Start element omission not handled currently\n  // A head element’s start tag may be omitted if the element is empty, or if the first thing inside the head element is an element.\n  // A tbody element’s start tag may be omitted if the first thing inside the tbody element is a tr element, and if the element is not immediately preceded by a tbody, thead, or tfoot element whose end tag has been omitted. (It can’t be omitted if the element is empty.)\n  // A colgroup element’s start tag may be omitted if the first thing inside the colgroup element is a col element, and if the element is not immediately preceded by another colgroup element whose end tag has been omitted. (It can’t be omitted if the element is empty.)\n\n  // Fix up the parent of the parser token\n  parser_token.parent = this._tag_stack.get_parser_token();\n\n  return result;\n};\n\nmodule.exports.Beautifier = Beautifier;\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar BaseOptions = __webpack_require__(6).Options;\n\nfunction Options(options) {\n  BaseOptions.call(this, options, 'html');\n  if (this.templating.length === 1 && this.templating[0] === 'auto') {\n    this.templating = ['django', 'erb', 'handlebars', 'php'];\n  }\n\n  this.indent_inner_html = this._get_boolean('indent_inner_html');\n  this.indent_body_inner_html = this._get_boolean('indent_body_inner_html', true);\n  this.indent_head_inner_html = this._get_boolean('indent_head_inner_html', true);\n\n  this.indent_handlebars = this._get_boolean('indent_handlebars', true);\n  this.wrap_attributes = this._get_selection('wrap_attributes',\n    ['auto', 'force', 'force-aligned', 'force-expand-multiline', 'aligned-multiple', 'preserve', 'preserve-aligned']);\n  this.wrap_attributes_indent_size = this._get_number('wrap_attributes_indent_size', this.indent_size);\n  this.extra_liners = this._get_array('extra_liners', ['head', 'body', '/html']);\n\n  // Block vs inline elements\n  // https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements\n  // https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements\n  // https://www.w3.org/TR/html5/dom.html#phrasing-content\n  this.inline = this._get_array('inline', [\n    'a', 'abbr', 'area', 'audio', 'b', 'bdi', 'bdo', 'br', 'button', 'canvas', 'cite',\n    'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'i', 'iframe', 'img',\n    'input', 'ins', 'kbd', 'keygen', 'label', 'map', 'mark', 'math', 'meter', 'noscript',\n    'object', 'output', 'progress', 'q', 'ruby', 's', 'samp', /* 'script', */ 'select', 'small',\n    'span', 'strong', 'sub', 'sup', 'svg', 'template', 'textarea', 'time', 'u', 'var',\n    'video', 'wbr', 'text',\n    // obsolete inline tags\n    'acronym', 'big', 'strike', 'tt'\n  ]);\n  this.void_elements = this._get_array('void_elements', [\n    // HTLM void elements - aka self-closing tags - aka singletons\n    // https://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n    'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen',\n    'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr',\n    // NOTE: Optional tags are too complex for a simple list\n    // they are hard coded in _do_optional_end_element\n\n    // Doctype and xml elements\n    '!doctype', '?xml',\n\n    // obsolete tags\n    // basefont: https://www.computerhope.com/jargon/h/html-basefont-tag.htm\n    // isndex: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/isindex\n    'basefont', 'isindex'\n  ]);\n  this.unformatted = this._get_array('unformatted', []);\n  this.content_unformatted = this._get_array('content_unformatted', [\n    'pre', 'textarea'\n  ]);\n  this.unformatted_content_delimiter = this._get_characters('unformatted_content_delimiter');\n  this.indent_scripts = this._get_selection('indent_scripts', ['normal', 'keep', 'separate']);\n\n}\nOptions.prototype = new BaseOptions();\n\n\n\nmodule.exports.Options = Options;\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar BaseTokenizer = __webpack_require__(9).Tokenizer;\nvar BASETOKEN = __webpack_require__(9).TOKEN;\nvar Directives = __webpack_require__(13).Directives;\nvar TemplatablePattern = __webpack_require__(14).TemplatablePattern;\nvar Pattern = __webpack_require__(12).Pattern;\n\nvar TOKEN = {\n  TAG_OPEN: 'TK_TAG_OPEN',\n  TAG_CLOSE: 'TK_TAG_CLOSE',\n  ATTRIBUTE: 'TK_ATTRIBUTE',\n  EQUALS: 'TK_EQUALS',\n  VALUE: 'TK_VALUE',\n  COMMENT: 'TK_COMMENT',\n  TEXT: 'TK_TEXT',\n  UNKNOWN: 'TK_UNKNOWN',\n  START: BASETOKEN.START,\n  RAW: BASETOKEN.RAW,\n  EOF: BASETOKEN.EOF\n};\n\nvar directives_core = new Directives(/<\\!--/, /-->/);\n\nvar Tokenizer = function(input_string, options) {\n  BaseTokenizer.call(this, input_string, options);\n  this._current_tag_name = '';\n\n  // Words end at whitespace or when a tag starts\n  // if we are indenting handlebars, they are considered tags\n  var templatable_reader = new TemplatablePattern(this._input).read_options(this._options);\n  var pattern_reader = new Pattern(this._input);\n\n  this.__patterns = {\n    word: templatable_reader.until(/[\\n\\r\\t <]/),\n    single_quote: templatable_reader.until_after(/'/),\n    double_quote: templatable_reader.until_after(/\"/),\n    attribute: templatable_reader.until(/[\\n\\r\\t =>]|\\/>/),\n    element_name: templatable_reader.until(/[\\n\\r\\t >\\/]/),\n\n    handlebars_comment: pattern_reader.starting_with(/{{!--/).until_after(/--}}/),\n    handlebars: pattern_reader.starting_with(/{{/).until_after(/}}/),\n    handlebars_open: pattern_reader.until(/[\\n\\r\\t }]/),\n    handlebars_raw_close: pattern_reader.until(/}}/),\n    comment: pattern_reader.starting_with(/<!--/).until_after(/-->/),\n    cdata: pattern_reader.starting_with(/<!\\[CDATA\\[/).until_after(/]]>/),\n    // https://en.wikipedia.org/wiki/Conditional_comment\n    conditional_comment: pattern_reader.starting_with(/<!\\[/).until_after(/]>/),\n    processing: pattern_reader.starting_with(/<\\?/).until_after(/\\?>/)\n  };\n\n  if (this._options.indent_handlebars) {\n    this.__patterns.word = this.__patterns.word.exclude('handlebars');\n  }\n\n  this._unformatted_content_delimiter = null;\n\n  if (this._options.unformatted_content_delimiter) {\n    var literal_regexp = this._input.get_literal_regexp(this._options.unformatted_content_delimiter);\n    this.__patterns.unformatted_content_delimiter =\n      pattern_reader.matching(literal_regexp)\n      .until_after(literal_regexp);\n  }\n};\nTokenizer.prototype = new BaseTokenizer();\n\nTokenizer.prototype._is_comment = function(current_token) { // jshint unused:false\n  return false; //current_token.type === TOKEN.COMMENT || current_token.type === TOKEN.UNKNOWN;\n};\n\nTokenizer.prototype._is_opening = function(current_token) {\n  return current_token.type === TOKEN.TAG_OPEN;\n};\n\nTokenizer.prototype._is_closing = function(current_token, open_token) {\n  return current_token.type === TOKEN.TAG_CLOSE &&\n    (open_token && (\n      ((current_token.text === '>' || current_token.text === '/>') && open_token.text[0] === '<') ||\n      (current_token.text === '}}' && open_token.text[0] === '{' && open_token.text[1] === '{')));\n};\n\nTokenizer.prototype._reset = function() {\n  this._current_tag_name = '';\n};\n\nTokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false\n  var token = null;\n  this._readWhitespace();\n  var c = this._input.peek();\n\n  if (c === null) {\n    return this._create_token(TOKEN.EOF, '');\n  }\n\n  token = token || this._read_open_handlebars(c, open_token);\n  token = token || this._read_attribute(c, previous_token, open_token);\n  token = token || this._read_close(c, open_token);\n  token = token || this._read_raw_content(c, previous_token, open_token);\n  token = token || this._read_content_word(c);\n  token = token || this._read_comment_or_cdata(c);\n  token = token || this._read_processing(c);\n  token = token || this._read_open(c, open_token);\n  token = token || this._create_token(TOKEN.UNKNOWN, this._input.next());\n\n  return token;\n};\n\nTokenizer.prototype._read_comment_or_cdata = function(c) { // jshint unused:false\n  var token = null;\n  var resulting_string = null;\n  var directives = null;\n\n  if (c === '<') {\n    var peek1 = this._input.peek(1);\n    // We treat all comments as literals, even more than preformatted tags\n    // we only look for the appropriate closing marker\n    if (peek1 === '!') {\n      resulting_string = this.__patterns.comment.read();\n\n      // only process directive on html comments\n      if (resulting_string) {\n        directives = directives_core.get_directives(resulting_string);\n        if (directives && directives.ignore === 'start') {\n          resulting_string += directives_core.readIgnored(this._input);\n        }\n      } else {\n        resulting_string = this.__patterns.cdata.read();\n      }\n    }\n\n    if (resulting_string) {\n      token = this._create_token(TOKEN.COMMENT, resulting_string);\n      token.directives = directives;\n    }\n  }\n\n  return token;\n};\n\nTokenizer.prototype._read_processing = function(c) { // jshint unused:false\n  var token = null;\n  var resulting_string = null;\n  var directives = null;\n\n  if (c === '<') {\n    var peek1 = this._input.peek(1);\n    if (peek1 === '!' || peek1 === '?') {\n      resulting_string = this.__patterns.conditional_comment.read();\n      resulting_string = resulting_string || this.__patterns.processing.read();\n    }\n\n    if (resulting_string) {\n      token = this._create_token(TOKEN.COMMENT, resulting_string);\n      token.directives = directives;\n    }\n  }\n\n  return token;\n};\n\nTokenizer.prototype._read_open = function(c, open_token) {\n  var resulting_string = null;\n  var token = null;\n  if (!open_token) {\n    if (c === '<') {\n\n      resulting_string = this._input.next();\n      if (this._input.peek() === '/') {\n        resulting_string += this._input.next();\n      }\n      resulting_string += this.__patterns.element_name.read();\n      token = this._create_token(TOKEN.TAG_OPEN, resulting_string);\n    }\n  }\n  return token;\n};\n\nTokenizer.prototype._read_open_handlebars = function(c, open_token) {\n  var resulting_string = null;\n  var token = null;\n  if (!open_token) {\n    if (this._options.indent_handlebars && c === '{' && this._input.peek(1) === '{') {\n      if (this._input.peek(2) === '!') {\n        resulting_string = this.__patterns.handlebars_comment.read();\n        resulting_string = resulting_string || this.__patterns.handlebars.read();\n        token = this._create_token(TOKEN.COMMENT, resulting_string);\n      } else {\n        resulting_string = this.__patterns.handlebars_open.read();\n        token = this._create_token(TOKEN.TAG_OPEN, resulting_string);\n      }\n    }\n  }\n  return token;\n};\n\n\nTokenizer.prototype._read_close = function(c, open_token) {\n  var resulting_string = null;\n  var token = null;\n  if (open_token) {\n    if (open_token.text[0] === '<' && (c === '>' || (c === '/' && this._input.peek(1) === '>'))) {\n      resulting_string = this._input.next();\n      if (c === '/') { //  for close tag \"/>\"\n        resulting_string += this._input.next();\n      }\n      token = this._create_token(TOKEN.TAG_CLOSE, resulting_string);\n    } else if (open_token.text[0] === '{' && c === '}' && this._input.peek(1) === '}') {\n      this._input.next();\n      this._input.next();\n      token = this._create_token(TOKEN.TAG_CLOSE, '}}');\n    }\n  }\n\n  return token;\n};\n\nTokenizer.prototype._read_attribute = function(c, previous_token, open_token) {\n  var token = null;\n  var resulting_string = '';\n  if (open_token && open_token.text[0] === '<') {\n\n    if (c === '=') {\n      token = this._create_token(TOKEN.EQUALS, this._input.next());\n    } else if (c === '\"' || c === \"'\") {\n      var content = this._input.next();\n      if (c === '\"') {\n        content += this.__patterns.double_quote.read();\n      } else {\n        content += this.__patterns.single_quote.read();\n      }\n      token = this._create_token(TOKEN.VALUE, content);\n    } else {\n      resulting_string = this.__patterns.attribute.read();\n\n      if (resulting_string) {\n        if (previous_token.type === TOKEN.EQUALS) {\n          token = this._create_token(TOKEN.VALUE, resulting_string);\n        } else {\n          token = this._create_token(TOKEN.ATTRIBUTE, resulting_string);\n        }\n      }\n    }\n  }\n  return token;\n};\n\nTokenizer.prototype._is_content_unformatted = function(tag_name) {\n  // void_elements have no content and so cannot have unformatted content\n  // script and style tags should always be read as unformatted content\n  // finally content_unformatted and unformatted element contents are unformatted\n  return this._options.void_elements.indexOf(tag_name) === -1 &&\n    (this._options.content_unformatted.indexOf(tag_name) !== -1 ||\n      this._options.unformatted.indexOf(tag_name) !== -1);\n};\n\n\nTokenizer.prototype._read_raw_content = function(c, previous_token, open_token) { // jshint unused:false\n  var resulting_string = '';\n  if (open_token && open_token.text[0] === '{') {\n    resulting_string = this.__patterns.handlebars_raw_close.read();\n  } else if (previous_token.type === TOKEN.TAG_CLOSE &&\n    previous_token.opened.text[0] === '<' && previous_token.text[0] !== '/') {\n    // ^^ empty tag has no content \n    var tag_name = previous_token.opened.text.substr(1).toLowerCase();\n    if (tag_name === 'script' || tag_name === 'style') {\n      // Script and style tags are allowed to have comments wrapping their content\n      // or just have regular content.\n      var token = this._read_comment_or_cdata(c);\n      if (token) {\n        token.type = TOKEN.TEXT;\n        return token;\n      }\n      resulting_string = this._input.readUntil(new RegExp('</' + tag_name + '[\\\\n\\\\r\\\\t ]*?>', 'ig'));\n    } else if (this._is_content_unformatted(tag_name)) {\n\n      resulting_string = this._input.readUntil(new RegExp('</' + tag_name + '[\\\\n\\\\r\\\\t ]*?>', 'ig'));\n    }\n  }\n\n  if (resulting_string) {\n    return this._create_token(TOKEN.TEXT, resulting_string);\n  }\n\n  return null;\n};\n\nTokenizer.prototype._read_content_word = function(c) {\n  var resulting_string = '';\n  if (this._options.unformatted_content_delimiter) {\n    if (c === this._options.unformatted_content_delimiter[0]) {\n      resulting_string = this.__patterns.unformatted_content_delimiter.read();\n    }\n  }\n\n  if (!resulting_string) {\n    resulting_string = this.__patterns.word.read();\n  }\n  if (resulting_string) {\n    return this._create_token(TOKEN.TEXT, resulting_string);\n  }\n};\n\nmodule.exports.Tokenizer = Tokenizer;\nmodule.exports.TOKEN = TOKEN;\n\n\n/***/ })\n/******/ ]);\nvar style_html = legacy_beautify_html;\n/* Footer */\nif (typeof define === \"function\" && define.amd) {\n    // Add support for AMD ( https://github.com/amdjs/amdjs-api/wiki/AMD#defineamd-property- )\n    define([\"require\", \"./beautify\", \"./beautify-css\"], function(requireamd) {\n        var js_beautify = requireamd(\"./beautify\");\n        var css_beautify = requireamd(\"./beautify-css\");\n\n        return {\n            html_beautify: function(html_source, options) {\n                return style_html(html_source, options, js_beautify.js_beautify, css_beautify.css_beautify);\n            }\n        };\n    });\n} else if (typeof exports !== \"undefined\") {\n    // Add support for CommonJS. Just put this file somewhere on your require.paths\n    // and you will be able to `var html_beautify = require(\"beautify\").html_beautify`.\n    var js_beautify = require('./beautify.js');\n    var css_beautify = require('./beautify-css.js');\n\n    exports.html_beautify = function(html_source, options) {\n        return style_html(html_source, options, js_beautify.js_beautify, css_beautify.css_beautify);\n    };\n} else if (typeof window !== \"undefined\") {\n    // If we're running a web page and don't have either of the above, add our one global\n    window.html_beautify = function(html_source, options) {\n        return style_html(html_source, options, window.js_beautify, window.css_beautify);\n    };\n} else if (typeof global !== \"undefined\") {\n    // If we don't even have window, try global.\n    global.html_beautify = function(html_source, options) {\n        return style_html(html_source, options, global.js_beautify, global.css_beautify);\n    };\n}\n\n}());\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/vendor/beautify@1.13.0/beautify.js",
    "content": "/* AUTO-GENERATED. DO NOT MODIFY. */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n\n JS Beautifier\n---------------\n\n\n  Written by Einar Lielmanis, <einar@beautifier.io>\n      https://beautifier.io/\n\n  Originally converted to javascript by Vital, <vital76@gmail.com>\n  \"End braces on own line\" added by Chris J. Shull, <chrisjshull@gmail.com>\n  Parsing improvements for brace-less statements by Liam Newman <bitwiseman@beautifier.io>\n\n\n  Usage:\n    js_beautify(js_source_text);\n    js_beautify(js_source_text, options);\n\n  The options are:\n    indent_size (default 4)          - indentation size,\n    indent_char (default space)      - character to indent with,\n    preserve_newlines (default true) - whether existing line breaks should be preserved,\n    max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk,\n\n    jslint_happy (default false) - if true, then jslint-stricter mode is enforced.\n\n            jslint_happy        !jslint_happy\n            ---------------------------------\n            function ()         function()\n\n            switch () {         switch() {\n            case 1:               case 1:\n              break;                break;\n            }                   }\n\n    space_after_anon_function (default false) - should the space before an anonymous function's parens be added, \"function()\" vs \"function ()\",\n          NOTE: This option is overriden by jslint_happy (i.e. if jslint_happy is true, space_after_anon_function is true by design)\n\n    brace_style (default \"collapse\") - \"collapse\" | \"expand\" | \"end-expand\" | \"none\" | any of the former + \",preserve-inline\"\n            put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line, or attempt to keep them where they are.\n            preserve-inline will try to preserve inline blocks of curly braces\n\n    space_before_conditional (default true) - should the space before conditional statement be added, \"if(true)\" vs \"if (true)\",\n\n    unescape_strings (default false) - should printable characters in strings encoded in \\xNN notation be unescaped, \"example\" vs \"\\x65\\x78\\x61\\x6d\\x70\\x6c\\x65\"\n\n    wrap_line_length (default unlimited) - lines should wrap at next opportunity after this number of characters.\n          NOTE: This is not a hard limit. Lines will continue until a point where a newline would\n                be preserved if it were present.\n\n    end_with_newline (default false)  - end output with a newline\n\n\n    e.g\n\n    js_beautify(js_source_text, {\n      'indent_size': 1,\n      'indent_char': '\\t'\n    });\n\n*/\n\n(function() {\n\n/* GENERATED_BUILD_OUTPUT */\nvar legacy_beautify_js =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Beautifier = __webpack_require__(1).Beautifier,\n  Options = __webpack_require__(5).Options;\n\nfunction js_beautify(js_source_text, options) {\n  var beautifier = new Beautifier(js_source_text, options);\n  return beautifier.beautify();\n}\n\nmodule.exports = js_beautify;\nmodule.exports.defaultOptions = function() {\n  return new Options();\n};\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Output = __webpack_require__(2).Output;\nvar Token = __webpack_require__(3).Token;\nvar acorn = __webpack_require__(4);\nvar Options = __webpack_require__(5).Options;\nvar Tokenizer = __webpack_require__(7).Tokenizer;\nvar line_starters = __webpack_require__(7).line_starters;\nvar positionable_operators = __webpack_require__(7).positionable_operators;\nvar TOKEN = __webpack_require__(7).TOKEN;\n\n\nfunction in_array(what, arr) {\n  return arr.indexOf(what) !== -1;\n}\n\nfunction ltrim(s) {\n  return s.replace(/^\\s+/g, '');\n}\n\nfunction generateMapFromStrings(list) {\n  var result = {};\n  for (var x = 0; x < list.length; x++) {\n    // make the mapped names underscored instead of dash\n    result[list[x].replace(/-/g, '_')] = list[x];\n  }\n  return result;\n}\n\nfunction reserved_word(token, word) {\n  return token && token.type === TOKEN.RESERVED && token.text === word;\n}\n\nfunction reserved_array(token, words) {\n  return token && token.type === TOKEN.RESERVED && in_array(token.text, words);\n}\n// Unsure of what they mean, but they work. Worth cleaning up in future.\nvar special_words = ['case', 'return', 'do', 'if', 'throw', 'else', 'await', 'break', 'continue', 'async'];\n\nvar validPositionValues = ['before-newline', 'after-newline', 'preserve-newline'];\n\n// Generate map from array\nvar OPERATOR_POSITION = generateMapFromStrings(validPositionValues);\n\nvar OPERATOR_POSITION_BEFORE_OR_PRESERVE = [OPERATOR_POSITION.before_newline, OPERATOR_POSITION.preserve_newline];\n\nvar MODE = {\n  BlockStatement: 'BlockStatement', // 'BLOCK'\n  Statement: 'Statement', // 'STATEMENT'\n  ObjectLiteral: 'ObjectLiteral', // 'OBJECT',\n  ArrayLiteral: 'ArrayLiteral', //'[EXPRESSION]',\n  ForInitializer: 'ForInitializer', //'(FOR-EXPRESSION)',\n  Conditional: 'Conditional', //'(COND-EXPRESSION)',\n  Expression: 'Expression' //'(EXPRESSION)'\n};\n\nfunction remove_redundant_indentation(output, frame) {\n  // This implementation is effective but has some issues:\n  //     - can cause line wrap to happen too soon due to indent removal\n  //           after wrap points are calculated\n  // These issues are minor compared to ugly indentation.\n\n  if (frame.multiline_frame ||\n    frame.mode === MODE.ForInitializer ||\n    frame.mode === MODE.Conditional) {\n    return;\n  }\n\n  // remove one indent from each line inside this section\n  output.remove_indent(frame.start_line_index);\n}\n\n// we could use just string.split, but\n// IE doesn't like returning empty strings\nfunction split_linebreaks(s) {\n  //return s.split(/\\x0d\\x0a|\\x0a/);\n\n  s = s.replace(acorn.allLineBreaks, '\\n');\n  var out = [],\n    idx = s.indexOf(\"\\n\");\n  while (idx !== -1) {\n    out.push(s.substring(0, idx));\n    s = s.substring(idx + 1);\n    idx = s.indexOf(\"\\n\");\n  }\n  if (s.length) {\n    out.push(s);\n  }\n  return out;\n}\n\nfunction is_array(mode) {\n  return mode === MODE.ArrayLiteral;\n}\n\nfunction is_expression(mode) {\n  return in_array(mode, [MODE.Expression, MODE.ForInitializer, MODE.Conditional]);\n}\n\nfunction all_lines_start_with(lines, c) {\n  for (var i = 0; i < lines.length; i++) {\n    var line = lines[i].trim();\n    if (line.charAt(0) !== c) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction each_line_matches_indent(lines, indent) {\n  var i = 0,\n    len = lines.length,\n    line;\n  for (; i < len; i++) {\n    line = lines[i];\n    // allow empty lines to pass through\n    if (line && line.indexOf(indent) !== 0) {\n      return false;\n    }\n  }\n  return true;\n}\n\n\nfunction Beautifier(source_text, options) {\n  options = options || {};\n  this._source_text = source_text || '';\n\n  this._output = null;\n  this._tokens = null;\n  this._last_last_text = null;\n  this._flags = null;\n  this._previous_flags = null;\n\n  this._flag_store = null;\n  this._options = new Options(options);\n}\n\nBeautifier.prototype.create_flags = function(flags_base, mode) {\n  var next_indent_level = 0;\n  if (flags_base) {\n    next_indent_level = flags_base.indentation_level;\n    if (!this._output.just_added_newline() &&\n      flags_base.line_indent_level > next_indent_level) {\n      next_indent_level = flags_base.line_indent_level;\n    }\n  }\n\n  var next_flags = {\n    mode: mode,\n    parent: flags_base,\n    last_token: flags_base ? flags_base.last_token : new Token(TOKEN.START_BLOCK, ''), // last token text\n    last_word: flags_base ? flags_base.last_word : '', // last TOKEN.WORD passed\n    declaration_statement: false,\n    declaration_assignment: false,\n    multiline_frame: false,\n    inline_frame: false,\n    if_block: false,\n    else_block: false,\n    do_block: false,\n    do_while: false,\n    import_block: false,\n    in_case_statement: false, // switch(..){ INSIDE HERE }\n    in_case: false, // we're on the exact line with \"case 0:\"\n    case_body: false, // the indented case-action block\n    indentation_level: next_indent_level,\n    alignment: 0,\n    line_indent_level: flags_base ? flags_base.line_indent_level : next_indent_level,\n    start_line_index: this._output.get_line_number(),\n    ternary_depth: 0\n  };\n  return next_flags;\n};\n\nBeautifier.prototype._reset = function(source_text) {\n  var baseIndentString = source_text.match(/^[\\t ]*/)[0];\n\n  this._last_last_text = ''; // pre-last token text\n  this._output = new Output(this._options, baseIndentString);\n\n  // If testing the ignore directive, start with output disable set to true\n  this._output.raw = this._options.test_output_raw;\n\n\n  // Stack of parsing/formatting states, including MODE.\n  // We tokenize, parse, and output in an almost purely a forward-only stream of token input\n  // and formatted output.  This makes the beautifier less accurate than full parsers\n  // but also far more tolerant of syntax errors.\n  //\n  // For example, the default mode is MODE.BlockStatement. If we see a '{' we push a new frame of type\n  // MODE.BlockStatement on the the stack, even though it could be object literal.  If we later\n  // encounter a \":\", we'll switch to to MODE.ObjectLiteral.  If we then see a \";\",\n  // most full parsers would die, but the beautifier gracefully falls back to\n  // MODE.BlockStatement and continues on.\n  this._flag_store = [];\n  this.set_mode(MODE.BlockStatement);\n  var tokenizer = new Tokenizer(source_text, this._options);\n  this._tokens = tokenizer.tokenize();\n  return source_text;\n};\n\nBeautifier.prototype.beautify = function() {\n  // if disabled, return the input unchanged.\n  if (this._options.disabled) {\n    return this._source_text;\n  }\n\n  var sweet_code;\n  var source_text = this._reset(this._source_text);\n\n  var eol = this._options.eol;\n  if (this._options.eol === 'auto') {\n    eol = '\\n';\n    if (source_text && acorn.lineBreak.test(source_text || '')) {\n      eol = source_text.match(acorn.lineBreak)[0];\n    }\n  }\n\n  var current_token = this._tokens.next();\n  while (current_token) {\n    this.handle_token(current_token);\n\n    this._last_last_text = this._flags.last_token.text;\n    this._flags.last_token = current_token;\n\n    current_token = this._tokens.next();\n  }\n\n  sweet_code = this._output.get_code(eol);\n\n  return sweet_code;\n};\n\nBeautifier.prototype.handle_token = function(current_token, preserve_statement_flags) {\n  if (current_token.type === TOKEN.START_EXPR) {\n    this.handle_start_expr(current_token);\n  } else if (current_token.type === TOKEN.END_EXPR) {\n    this.handle_end_expr(current_token);\n  } else if (current_token.type === TOKEN.START_BLOCK) {\n    this.handle_start_block(current_token);\n  } else if (current_token.type === TOKEN.END_BLOCK) {\n    this.handle_end_block(current_token);\n  } else if (current_token.type === TOKEN.WORD) {\n    this.handle_word(current_token);\n  } else if (current_token.type === TOKEN.RESERVED) {\n    this.handle_word(current_token);\n  } else if (current_token.type === TOKEN.SEMICOLON) {\n    this.handle_semicolon(current_token);\n  } else if (current_token.type === TOKEN.STRING) {\n    this.handle_string(current_token);\n  } else if (current_token.type === TOKEN.EQUALS) {\n    this.handle_equals(current_token);\n  } else if (current_token.type === TOKEN.OPERATOR) {\n    this.handle_operator(current_token);\n  } else if (current_token.type === TOKEN.COMMA) {\n    this.handle_comma(current_token);\n  } else if (current_token.type === TOKEN.BLOCK_COMMENT) {\n    this.handle_block_comment(current_token, preserve_statement_flags);\n  } else if (current_token.type === TOKEN.COMMENT) {\n    this.handle_comment(current_token, preserve_statement_flags);\n  } else if (current_token.type === TOKEN.DOT) {\n    this.handle_dot(current_token);\n  } else if (current_token.type === TOKEN.EOF) {\n    this.handle_eof(current_token);\n  } else if (current_token.type === TOKEN.UNKNOWN) {\n    this.handle_unknown(current_token, preserve_statement_flags);\n  } else {\n    this.handle_unknown(current_token, preserve_statement_flags);\n  }\n};\n\nBeautifier.prototype.handle_whitespace_and_comments = function(current_token, preserve_statement_flags) {\n  var newlines = current_token.newlines;\n  var keep_whitespace = this._options.keep_array_indentation && is_array(this._flags.mode);\n\n  if (current_token.comments_before) {\n    var comment_token = current_token.comments_before.next();\n    while (comment_token) {\n      // The cleanest handling of inline comments is to treat them as though they aren't there.\n      // Just continue formatting and the behavior should be logical.\n      // Also ignore unknown tokens.  Again, this should result in better behavior.\n      this.handle_whitespace_and_comments(comment_token, preserve_statement_flags);\n      this.handle_token(comment_token, preserve_statement_flags);\n      comment_token = current_token.comments_before.next();\n    }\n  }\n\n  if (keep_whitespace) {\n    for (var i = 0; i < newlines; i += 1) {\n      this.print_newline(i > 0, preserve_statement_flags);\n    }\n  } else {\n    if (this._options.max_preserve_newlines && newlines > this._options.max_preserve_newlines) {\n      newlines = this._options.max_preserve_newlines;\n    }\n\n    if (this._options.preserve_newlines) {\n      if (newlines > 1) {\n        this.print_newline(false, preserve_statement_flags);\n        for (var j = 1; j < newlines; j += 1) {\n          this.print_newline(true, preserve_statement_flags);\n        }\n      }\n    }\n  }\n\n};\n\nvar newline_restricted_tokens = ['async', 'break', 'continue', 'return', 'throw', 'yield'];\n\nBeautifier.prototype.allow_wrap_or_preserved_newline = function(current_token, force_linewrap) {\n  force_linewrap = (force_linewrap === undefined) ? false : force_linewrap;\n\n  // Never wrap the first token on a line\n  if (this._output.just_added_newline()) {\n    return;\n  }\n\n  var shouldPreserveOrForce = (this._options.preserve_newlines && current_token.newlines) || force_linewrap;\n  var operatorLogicApplies = in_array(this._flags.last_token.text, positionable_operators) ||\n    in_array(current_token.text, positionable_operators);\n\n  if (operatorLogicApplies) {\n    var shouldPrintOperatorNewline = (\n        in_array(this._flags.last_token.text, positionable_operators) &&\n        in_array(this._options.operator_position, OPERATOR_POSITION_BEFORE_OR_PRESERVE)\n      ) ||\n      in_array(current_token.text, positionable_operators);\n    shouldPreserveOrForce = shouldPreserveOrForce && shouldPrintOperatorNewline;\n  }\n\n  if (shouldPreserveOrForce) {\n    this.print_newline(false, true);\n  } else if (this._options.wrap_line_length) {\n    if (reserved_array(this._flags.last_token, newline_restricted_tokens)) {\n      // These tokens should never have a newline inserted\n      // between them and the following expression.\n      return;\n    }\n    this._output.set_wrap_point();\n  }\n};\n\nBeautifier.prototype.print_newline = function(force_newline, preserve_statement_flags) {\n  if (!preserve_statement_flags) {\n    if (this._flags.last_token.text !== ';' && this._flags.last_token.text !== ',' && this._flags.last_token.text !== '=' && (this._flags.last_token.type !== TOKEN.OPERATOR || this._flags.last_token.text === '--' || this._flags.last_token.text === '++')) {\n      var next_token = this._tokens.peek();\n      while (this._flags.mode === MODE.Statement &&\n        !(this._flags.if_block && reserved_word(next_token, 'else')) &&\n        !this._flags.do_block) {\n        this.restore_mode();\n      }\n    }\n  }\n\n  if (this._output.add_new_line(force_newline)) {\n    this._flags.multiline_frame = true;\n  }\n};\n\nBeautifier.prototype.print_token_line_indentation = function(current_token) {\n  if (this._output.just_added_newline()) {\n    if (this._options.keep_array_indentation &&\n      current_token.newlines &&\n      (current_token.text === '[' || is_array(this._flags.mode))) {\n      this._output.current_line.set_indent(-1);\n      this._output.current_line.push(current_token.whitespace_before);\n      this._output.space_before_token = false;\n    } else if (this._output.set_indent(this._flags.indentation_level, this._flags.alignment)) {\n      this._flags.line_indent_level = this._flags.indentation_level;\n    }\n  }\n};\n\nBeautifier.prototype.print_token = function(current_token) {\n  if (this._output.raw) {\n    this._output.add_raw_token(current_token);\n    return;\n  }\n\n  if (this._options.comma_first && current_token.previous && current_token.previous.type === TOKEN.COMMA &&\n    this._output.just_added_newline()) {\n    if (this._output.previous_line.last() === ',') {\n      var popped = this._output.previous_line.pop();\n      // if the comma was already at the start of the line,\n      // pull back onto that line and reprint the indentation\n      if (this._output.previous_line.is_empty()) {\n        this._output.previous_line.push(popped);\n        this._output.trim(true);\n        this._output.current_line.pop();\n        this._output.trim();\n      }\n\n      // add the comma in front of the next token\n      this.print_token_line_indentation(current_token);\n      this._output.add_token(',');\n      this._output.space_before_token = true;\n    }\n  }\n\n  this.print_token_line_indentation(current_token);\n  this._output.non_breaking_space = true;\n  this._output.add_token(current_token.text);\n  if (this._output.previous_token_wrapped) {\n    this._flags.multiline_frame = true;\n  }\n};\n\nBeautifier.prototype.indent = function() {\n  this._flags.indentation_level += 1;\n  this._output.set_indent(this._flags.indentation_level, this._flags.alignment);\n};\n\nBeautifier.prototype.deindent = function() {\n  if (this._flags.indentation_level > 0 &&\n    ((!this._flags.parent) || this._flags.indentation_level > this._flags.parent.indentation_level)) {\n    this._flags.indentation_level -= 1;\n    this._output.set_indent(this._flags.indentation_level, this._flags.alignment);\n  }\n};\n\nBeautifier.prototype.set_mode = function(mode) {\n  if (this._flags) {\n    this._flag_store.push(this._flags);\n    this._previous_flags = this._flags;\n  } else {\n    this._previous_flags = this.create_flags(null, mode);\n  }\n\n  this._flags = this.create_flags(this._previous_flags, mode);\n  this._output.set_indent(this._flags.indentation_level, this._flags.alignment);\n};\n\n\nBeautifier.prototype.restore_mode = function() {\n  if (this._flag_store.length > 0) {\n    this._previous_flags = this._flags;\n    this._flags = this._flag_store.pop();\n    if (this._previous_flags.mode === MODE.Statement) {\n      remove_redundant_indentation(this._output, this._previous_flags);\n    }\n    this._output.set_indent(this._flags.indentation_level, this._flags.alignment);\n  }\n};\n\nBeautifier.prototype.start_of_object_property = function() {\n  return this._flags.parent.mode === MODE.ObjectLiteral && this._flags.mode === MODE.Statement && (\n    (this._flags.last_token.text === ':' && this._flags.ternary_depth === 0) || (reserved_array(this._flags.last_token, ['get', 'set'])));\n};\n\nBeautifier.prototype.start_of_statement = function(current_token) {\n  var start = false;\n  start = start || reserved_array(this._flags.last_token, ['var', 'let', 'const']) && current_token.type === TOKEN.WORD;\n  start = start || reserved_word(this._flags.last_token, 'do');\n  start = start || (!(this._flags.parent.mode === MODE.ObjectLiteral && this._flags.mode === MODE.Statement)) && reserved_array(this._flags.last_token, newline_restricted_tokens) && !current_token.newlines;\n  start = start || reserved_word(this._flags.last_token, 'else') &&\n    !(reserved_word(current_token, 'if') && !current_token.comments_before);\n  start = start || (this._flags.last_token.type === TOKEN.END_EXPR && (this._previous_flags.mode === MODE.ForInitializer || this._previous_flags.mode === MODE.Conditional));\n  start = start || (this._flags.last_token.type === TOKEN.WORD && this._flags.mode === MODE.BlockStatement &&\n    !this._flags.in_case &&\n    !(current_token.text === '--' || current_token.text === '++') &&\n    this._last_last_text !== 'function' &&\n    current_token.type !== TOKEN.WORD && current_token.type !== TOKEN.RESERVED);\n  start = start || (this._flags.mode === MODE.ObjectLiteral && (\n    (this._flags.last_token.text === ':' && this._flags.ternary_depth === 0) || reserved_array(this._flags.last_token, ['get', 'set'])));\n\n  if (start) {\n    this.set_mode(MODE.Statement);\n    this.indent();\n\n    this.handle_whitespace_and_comments(current_token, true);\n\n    // Issue #276:\n    // If starting a new statement with [if, for, while, do], push to a new line.\n    // if (a) if (b) if(c) d(); else e(); else f();\n    if (!this.start_of_object_property()) {\n      this.allow_wrap_or_preserved_newline(current_token,\n        reserved_array(current_token, ['do', 'for', 'if', 'while']));\n    }\n    return true;\n  }\n  return false;\n};\n\nBeautifier.prototype.handle_start_expr = function(current_token) {\n  // The conditional starts the statement if appropriate.\n  if (!this.start_of_statement(current_token)) {\n    this.handle_whitespace_and_comments(current_token);\n  }\n\n  var next_mode = MODE.Expression;\n  if (current_token.text === '[') {\n\n    if (this._flags.last_token.type === TOKEN.WORD || this._flags.last_token.text === ')') {\n      // this is array index specifier, break immediately\n      // a[x], fn()[x]\n      if (reserved_array(this._flags.last_token, line_starters)) {\n        this._output.space_before_token = true;\n      }\n      this.print_token(current_token);\n      this.set_mode(next_mode);\n      this.indent();\n      if (this._options.space_in_paren) {\n        this._output.space_before_token = true;\n      }\n      return;\n    }\n\n    next_mode = MODE.ArrayLiteral;\n    if (is_array(this._flags.mode)) {\n      if (this._flags.last_token.text === '[' ||\n        (this._flags.last_token.text === ',' && (this._last_last_text === ']' || this._last_last_text === '}'))) {\n        // ], [ goes to new line\n        // }, [ goes to new line\n        if (!this._options.keep_array_indentation) {\n          this.print_newline();\n        }\n      }\n    }\n\n    if (!in_array(this._flags.last_token.type, [TOKEN.START_EXPR, TOKEN.END_EXPR, TOKEN.WORD, TOKEN.OPERATOR])) {\n      this._output.space_before_token = true;\n    }\n  } else {\n    if (this._flags.last_token.type === TOKEN.RESERVED) {\n      if (this._flags.last_token.text === 'for') {\n        this._output.space_before_token = this._options.space_before_conditional;\n        next_mode = MODE.ForInitializer;\n      } else if (in_array(this._flags.last_token.text, ['if', 'while'])) {\n        this._output.space_before_token = this._options.space_before_conditional;\n        next_mode = MODE.Conditional;\n      } else if (in_array(this._flags.last_word, ['await', 'async'])) {\n        // Should be a space between await and an IIFE, or async and an arrow function\n        this._output.space_before_token = true;\n      } else if (this._flags.last_token.text === 'import' && current_token.whitespace_before === '') {\n        this._output.space_before_token = false;\n      } else if (in_array(this._flags.last_token.text, line_starters) || this._flags.last_token.text === 'catch') {\n        this._output.space_before_token = true;\n      }\n    } else if (this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {\n      // Support of this kind of newline preservation.\n      // a = (b &&\n      //     (c || d));\n      if (!this.start_of_object_property()) {\n        this.allow_wrap_or_preserved_newline(current_token);\n      }\n    } else if (this._flags.last_token.type === TOKEN.WORD) {\n      this._output.space_before_token = false;\n\n      // function name() vs function name ()\n      // function* name() vs function* name ()\n      // async name() vs async name ()\n      // In ES6, you can also define the method properties of an object\n      // var obj = {a: function() {}}\n      // It can be abbreviated\n      // var obj = {a() {}}\n      // var obj = { a() {}} vs var obj = { a () {}}\n      // var obj = { * a() {}} vs var obj = { * a () {}}\n      var peek_back_two = this._tokens.peek(-3);\n      if (this._options.space_after_named_function && peek_back_two) {\n        // peek starts at next character so -1 is current token\n        var peek_back_three = this._tokens.peek(-4);\n        if (reserved_array(peek_back_two, ['async', 'function']) ||\n          (peek_back_two.text === '*' && reserved_array(peek_back_three, ['async', 'function']))) {\n          this._output.space_before_token = true;\n        } else if (this._flags.mode === MODE.ObjectLiteral) {\n          if ((peek_back_two.text === '{' || peek_back_two.text === ',') ||\n            (peek_back_two.text === '*' && (peek_back_three.text === '{' || peek_back_three.text === ','))) {\n            this._output.space_before_token = true;\n          }\n        }\n      }\n    } else {\n      // Support preserving wrapped arrow function expressions\n      // a.b('c',\n      //     () => d.e\n      // )\n      this.allow_wrap_or_preserved_newline(current_token);\n    }\n\n    // function() vs function ()\n    // yield*() vs yield* ()\n    // function*() vs function* ()\n    if ((this._flags.last_token.type === TOKEN.RESERVED && (this._flags.last_word === 'function' || this._flags.last_word === 'typeof')) ||\n      (this._flags.last_token.text === '*' &&\n        (in_array(this._last_last_text, ['function', 'yield']) ||\n          (this._flags.mode === MODE.ObjectLiteral && in_array(this._last_last_text, ['{', ',']))))) {\n      this._output.space_before_token = this._options.space_after_anon_function;\n    }\n  }\n\n  if (this._flags.last_token.text === ';' || this._flags.last_token.type === TOKEN.START_BLOCK) {\n    this.print_newline();\n  } else if (this._flags.last_token.type === TOKEN.END_EXPR || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.END_BLOCK || this._flags.last_token.text === '.' || this._flags.last_token.type === TOKEN.COMMA) {\n    // do nothing on (( and )( and ][ and ]( and .(\n    // TODO: Consider whether forcing this is required.  Review failing tests when removed.\n    this.allow_wrap_or_preserved_newline(current_token, current_token.newlines);\n  }\n\n  this.print_token(current_token);\n  this.set_mode(next_mode);\n  if (this._options.space_in_paren) {\n    this._output.space_before_token = true;\n  }\n\n  // In all cases, if we newline while inside an expression it should be indented.\n  this.indent();\n};\n\nBeautifier.prototype.handle_end_expr = function(current_token) {\n  // statements inside expressions are not valid syntax, but...\n  // statements must all be closed when their container closes\n  while (this._flags.mode === MODE.Statement) {\n    this.restore_mode();\n  }\n\n  this.handle_whitespace_and_comments(current_token);\n\n  if (this._flags.multiline_frame) {\n    this.allow_wrap_or_preserved_newline(current_token,\n      current_token.text === ']' && is_array(this._flags.mode) && !this._options.keep_array_indentation);\n  }\n\n  if (this._options.space_in_paren) {\n    if (this._flags.last_token.type === TOKEN.START_EXPR && !this._options.space_in_empty_paren) {\n      // () [] no inner space in empty parens like these, ever, ref #320\n      this._output.trim();\n      this._output.space_before_token = false;\n    } else {\n      this._output.space_before_token = true;\n    }\n  }\n  this.deindent();\n  this.print_token(current_token);\n  this.restore_mode();\n\n  remove_redundant_indentation(this._output, this._previous_flags);\n\n  // do {} while () // no statement required after\n  if (this._flags.do_while && this._previous_flags.mode === MODE.Conditional) {\n    this._previous_flags.mode = MODE.Expression;\n    this._flags.do_block = false;\n    this._flags.do_while = false;\n\n  }\n};\n\nBeautifier.prototype.handle_start_block = function(current_token) {\n  this.handle_whitespace_and_comments(current_token);\n\n  // Check if this is should be treated as a ObjectLiteral\n  var next_token = this._tokens.peek();\n  var second_token = this._tokens.peek(1);\n  if (this._flags.last_word === 'switch' && this._flags.last_token.type === TOKEN.END_EXPR) {\n    this.set_mode(MODE.BlockStatement);\n    this._flags.in_case_statement = true;\n  } else if (this._flags.case_body) {\n    this.set_mode(MODE.BlockStatement);\n  } else if (second_token && (\n      (in_array(second_token.text, [':', ',']) && in_array(next_token.type, [TOKEN.STRING, TOKEN.WORD, TOKEN.RESERVED])) ||\n      (in_array(next_token.text, ['get', 'set', '...']) && in_array(second_token.type, [TOKEN.WORD, TOKEN.RESERVED]))\n    )) {\n    // We don't support TypeScript,but we didn't break it for a very long time.\n    // We'll try to keep not breaking it.\n    if (!in_array(this._last_last_text, ['class', 'interface'])) {\n      this.set_mode(MODE.ObjectLiteral);\n    } else {\n      this.set_mode(MODE.BlockStatement);\n    }\n  } else if (this._flags.last_token.type === TOKEN.OPERATOR && this._flags.last_token.text === '=>') {\n    // arrow function: (param1, paramN) => { statements }\n    this.set_mode(MODE.BlockStatement);\n  } else if (in_array(this._flags.last_token.type, [TOKEN.EQUALS, TOKEN.START_EXPR, TOKEN.COMMA, TOKEN.OPERATOR]) ||\n    reserved_array(this._flags.last_token, ['return', 'throw', 'import', 'default'])\n  ) {\n    // Detecting shorthand function syntax is difficult by scanning forward,\n    //     so check the surrounding context.\n    // If the block is being returned, imported, export default, passed as arg,\n    //     assigned with = or assigned in a nested object, treat as an ObjectLiteral.\n    this.set_mode(MODE.ObjectLiteral);\n  } else {\n    this.set_mode(MODE.BlockStatement);\n  }\n\n  var empty_braces = !next_token.comments_before && next_token.text === '}';\n  var empty_anonymous_function = empty_braces && this._flags.last_word === 'function' &&\n    this._flags.last_token.type === TOKEN.END_EXPR;\n\n  if (this._options.brace_preserve_inline) // check for inline, set inline_frame if so\n  {\n    // search forward for a newline wanted inside this block\n    var index = 0;\n    var check_token = null;\n    this._flags.inline_frame = true;\n    do {\n      index += 1;\n      check_token = this._tokens.peek(index - 1);\n      if (check_token.newlines) {\n        this._flags.inline_frame = false;\n        break;\n      }\n    } while (check_token.type !== TOKEN.EOF &&\n      !(check_token.type === TOKEN.END_BLOCK && check_token.opened === current_token));\n  }\n\n  if ((this._options.brace_style === \"expand\" ||\n      (this._options.brace_style === \"none\" && current_token.newlines)) &&\n    !this._flags.inline_frame) {\n    if (this._flags.last_token.type !== TOKEN.OPERATOR &&\n      (empty_anonymous_function ||\n        this._flags.last_token.type === TOKEN.EQUALS ||\n        (reserved_array(this._flags.last_token, special_words) && this._flags.last_token.text !== 'else'))) {\n      this._output.space_before_token = true;\n    } else {\n      this.print_newline(false, true);\n    }\n  } else { // collapse || inline_frame\n    if (is_array(this._previous_flags.mode) && (this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.COMMA)) {\n      if (this._flags.last_token.type === TOKEN.COMMA || this._options.space_in_paren) {\n        this._output.space_before_token = true;\n      }\n\n      if (this._flags.last_token.type === TOKEN.COMMA || (this._flags.last_token.type === TOKEN.START_EXPR && this._flags.inline_frame)) {\n        this.allow_wrap_or_preserved_newline(current_token);\n        this._previous_flags.multiline_frame = this._previous_flags.multiline_frame || this._flags.multiline_frame;\n        this._flags.multiline_frame = false;\n      }\n    }\n    if (this._flags.last_token.type !== TOKEN.OPERATOR && this._flags.last_token.type !== TOKEN.START_EXPR) {\n      if (this._flags.last_token.type === TOKEN.START_BLOCK && !this._flags.inline_frame) {\n        this.print_newline();\n      } else {\n        this._output.space_before_token = true;\n      }\n    }\n  }\n  this.print_token(current_token);\n  this.indent();\n\n  // Except for specific cases, open braces are followed by a new line.\n  if (!empty_braces && !(this._options.brace_preserve_inline && this._flags.inline_frame)) {\n    this.print_newline();\n  }\n};\n\nBeautifier.prototype.handle_end_block = function(current_token) {\n  // statements must all be closed when their container closes\n  this.handle_whitespace_and_comments(current_token);\n\n  while (this._flags.mode === MODE.Statement) {\n    this.restore_mode();\n  }\n\n  var empty_braces = this._flags.last_token.type === TOKEN.START_BLOCK;\n\n  if (this._flags.inline_frame && !empty_braces) { // try inline_frame (only set if this._options.braces-preserve-inline) first\n    this._output.space_before_token = true;\n  } else if (this._options.brace_style === \"expand\") {\n    if (!empty_braces) {\n      this.print_newline();\n    }\n  } else {\n    // skip {}\n    if (!empty_braces) {\n      if (is_array(this._flags.mode) && this._options.keep_array_indentation) {\n        // we REALLY need a newline here, but newliner would skip that\n        this._options.keep_array_indentation = false;\n        this.print_newline();\n        this._options.keep_array_indentation = true;\n\n      } else {\n        this.print_newline();\n      }\n    }\n  }\n  this.restore_mode();\n  this.print_token(current_token);\n};\n\nBeautifier.prototype.handle_word = function(current_token) {\n  if (current_token.type === TOKEN.RESERVED) {\n    if (in_array(current_token.text, ['set', 'get']) && this._flags.mode !== MODE.ObjectLiteral) {\n      current_token.type = TOKEN.WORD;\n    } else if (current_token.text === 'import' && this._tokens.peek().text === '(') {\n      current_token.type = TOKEN.WORD;\n    } else if (in_array(current_token.text, ['as', 'from']) && !this._flags.import_block) {\n      current_token.type = TOKEN.WORD;\n    } else if (this._flags.mode === MODE.ObjectLiteral) {\n      var next_token = this._tokens.peek();\n      if (next_token.text === ':') {\n        current_token.type = TOKEN.WORD;\n      }\n    }\n  }\n\n  if (this.start_of_statement(current_token)) {\n    // The conditional starts the statement if appropriate.\n    if (reserved_array(this._flags.last_token, ['var', 'let', 'const']) && current_token.type === TOKEN.WORD) {\n      this._flags.declaration_statement = true;\n    }\n  } else if (current_token.newlines && !is_expression(this._flags.mode) &&\n    (this._flags.last_token.type !== TOKEN.OPERATOR || (this._flags.last_token.text === '--' || this._flags.last_token.text === '++')) &&\n    this._flags.last_token.type !== TOKEN.EQUALS &&\n    (this._options.preserve_newlines || !reserved_array(this._flags.last_token, ['var', 'let', 'const', 'set', 'get']))) {\n    this.handle_whitespace_and_comments(current_token);\n    this.print_newline();\n  } else {\n    this.handle_whitespace_and_comments(current_token);\n  }\n\n  if (this._flags.do_block && !this._flags.do_while) {\n    if (reserved_word(current_token, 'while')) {\n      // do {} ## while ()\n      this._output.space_before_token = true;\n      this.print_token(current_token);\n      this._output.space_before_token = true;\n      this._flags.do_while = true;\n      return;\n    } else {\n      // do {} should always have while as the next word.\n      // if we don't see the expected while, recover\n      this.print_newline();\n      this._flags.do_block = false;\n    }\n  }\n\n  // if may be followed by else, or not\n  // Bare/inline ifs are tricky\n  // Need to unwind the modes correctly: if (a) if (b) c(); else d(); else e();\n  if (this._flags.if_block) {\n    if (!this._flags.else_block && reserved_word(current_token, 'else')) {\n      this._flags.else_block = true;\n    } else {\n      while (this._flags.mode === MODE.Statement) {\n        this.restore_mode();\n      }\n      this._flags.if_block = false;\n      this._flags.else_block = false;\n    }\n  }\n\n  if (this._flags.in_case_statement && reserved_array(current_token, ['case', 'default'])) {\n    this.print_newline();\n    if (this._flags.last_token.type !== TOKEN.END_BLOCK && (this._flags.case_body || this._options.jslint_happy)) {\n      // switch cases following one another\n      this.deindent();\n    }\n    this._flags.case_body = false;\n\n    this.print_token(current_token);\n    this._flags.in_case = true;\n    return;\n  }\n\n  if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {\n    if (!this.start_of_object_property()) {\n      this.allow_wrap_or_preserved_newline(current_token);\n    }\n  }\n\n  if (reserved_word(current_token, 'function')) {\n    if (in_array(this._flags.last_token.text, ['}', ';']) ||\n      (this._output.just_added_newline() && !(in_array(this._flags.last_token.text, ['(', '[', '{', ':', '=', ',']) || this._flags.last_token.type === TOKEN.OPERATOR))) {\n      // make sure there is a nice clean space of at least one blank line\n      // before a new function definition\n      if (!this._output.just_added_blankline() && !current_token.comments_before) {\n        this.print_newline();\n        this.print_newline(true);\n      }\n    }\n    if (this._flags.last_token.type === TOKEN.RESERVED || this._flags.last_token.type === TOKEN.WORD) {\n      if (reserved_array(this._flags.last_token, ['get', 'set', 'new', 'export']) ||\n        reserved_array(this._flags.last_token, newline_restricted_tokens)) {\n        this._output.space_before_token = true;\n      } else if (reserved_word(this._flags.last_token, 'default') && this._last_last_text === 'export') {\n        this._output.space_before_token = true;\n      } else if (this._flags.last_token.text === 'declare') {\n        // accomodates Typescript declare function formatting\n        this._output.space_before_token = true;\n      } else {\n        this.print_newline();\n      }\n    } else if (this._flags.last_token.type === TOKEN.OPERATOR || this._flags.last_token.text === '=') {\n      // foo = function\n      this._output.space_before_token = true;\n    } else if (!this._flags.multiline_frame && (is_expression(this._flags.mode) || is_array(this._flags.mode))) {\n      // (function\n    } else {\n      this.print_newline();\n    }\n\n    this.print_token(current_token);\n    this._flags.last_word = current_token.text;\n    return;\n  }\n\n  var prefix = 'NONE';\n\n  if (this._flags.last_token.type === TOKEN.END_BLOCK) {\n\n    if (this._previous_flags.inline_frame) {\n      prefix = 'SPACE';\n    } else if (!reserved_array(current_token, ['else', 'catch', 'finally', 'from'])) {\n      prefix = 'NEWLINE';\n    } else {\n      if (this._options.brace_style === \"expand\" ||\n        this._options.brace_style === \"end-expand\" ||\n        (this._options.brace_style === \"none\" && current_token.newlines)) {\n        prefix = 'NEWLINE';\n      } else {\n        prefix = 'SPACE';\n        this._output.space_before_token = true;\n      }\n    }\n  } else if (this._flags.last_token.type === TOKEN.SEMICOLON && this._flags.mode === MODE.BlockStatement) {\n    // TODO: Should this be for STATEMENT as well?\n    prefix = 'NEWLINE';\n  } else if (this._flags.last_token.type === TOKEN.SEMICOLON && is_expression(this._flags.mode)) {\n    prefix = 'SPACE';\n  } else if (this._flags.last_token.type === TOKEN.STRING) {\n    prefix = 'NEWLINE';\n  } else if (this._flags.last_token.type === TOKEN.RESERVED || this._flags.last_token.type === TOKEN.WORD ||\n    (this._flags.last_token.text === '*' &&\n      (in_array(this._last_last_text, ['function', 'yield']) ||\n        (this._flags.mode === MODE.ObjectLiteral && in_array(this._last_last_text, ['{', ',']))))) {\n    prefix = 'SPACE';\n  } else if (this._flags.last_token.type === TOKEN.START_BLOCK) {\n    if (this._flags.inline_frame) {\n      prefix = 'SPACE';\n    } else {\n      prefix = 'NEWLINE';\n    }\n  } else if (this._flags.last_token.type === TOKEN.END_EXPR) {\n    this._output.space_before_token = true;\n    prefix = 'NEWLINE';\n  }\n\n  if (reserved_array(current_token, line_starters) && this._flags.last_token.text !== ')') {\n    if (this._flags.inline_frame || this._flags.last_token.text === 'else' || this._flags.last_token.text === 'export') {\n      prefix = 'SPACE';\n    } else {\n      prefix = 'NEWLINE';\n    }\n\n  }\n\n  if (reserved_array(current_token, ['else', 'catch', 'finally'])) {\n    if ((!(this._flags.last_token.type === TOKEN.END_BLOCK && this._previous_flags.mode === MODE.BlockStatement) ||\n        this._options.brace_style === \"expand\" ||\n        this._options.brace_style === \"end-expand\" ||\n        (this._options.brace_style === \"none\" && current_token.newlines)) &&\n      !this._flags.inline_frame) {\n      this.print_newline();\n    } else {\n      this._output.trim(true);\n      var line = this._output.current_line;\n      // If we trimmed and there's something other than a close block before us\n      // put a newline back in.  Handles '} // comment' scenario.\n      if (line.last() !== '}') {\n        this.print_newline();\n      }\n      this._output.space_before_token = true;\n    }\n  } else if (prefix === 'NEWLINE') {\n    if (reserved_array(this._flags.last_token, special_words)) {\n      // no newline between 'return nnn'\n      this._output.space_before_token = true;\n    } else if (this._flags.last_token.text === 'declare' && reserved_array(current_token, ['var', 'let', 'const'])) {\n      // accomodates Typescript declare formatting\n      this._output.space_before_token = true;\n    } else if (this._flags.last_token.type !== TOKEN.END_EXPR) {\n      if ((this._flags.last_token.type !== TOKEN.START_EXPR || !reserved_array(current_token, ['var', 'let', 'const'])) && this._flags.last_token.text !== ':') {\n        // no need to force newline on 'var': for (var x = 0...)\n        if (reserved_word(current_token, 'if') && reserved_word(current_token.previous, 'else')) {\n          // no newline for } else if {\n          this._output.space_before_token = true;\n        } else {\n          this.print_newline();\n        }\n      }\n    } else if (reserved_array(current_token, line_starters) && this._flags.last_token.text !== ')') {\n      this.print_newline();\n    }\n  } else if (this._flags.multiline_frame && is_array(this._flags.mode) && this._flags.last_token.text === ',' && this._last_last_text === '}') {\n    this.print_newline(); // }, in lists get a newline treatment\n  } else if (prefix === 'SPACE') {\n    this._output.space_before_token = true;\n  }\n  if (current_token.previous && (current_token.previous.type === TOKEN.WORD || current_token.previous.type === TOKEN.RESERVED)) {\n    this._output.space_before_token = true;\n  }\n  this.print_token(current_token);\n  this._flags.last_word = current_token.text;\n\n  if (current_token.type === TOKEN.RESERVED) {\n    if (current_token.text === 'do') {\n      this._flags.do_block = true;\n    } else if (current_token.text === 'if') {\n      this._flags.if_block = true;\n    } else if (current_token.text === 'import') {\n      this._flags.import_block = true;\n    } else if (this._flags.import_block && reserved_word(current_token, 'from')) {\n      this._flags.import_block = false;\n    }\n  }\n};\n\nBeautifier.prototype.handle_semicolon = function(current_token) {\n  if (this.start_of_statement(current_token)) {\n    // The conditional starts the statement if appropriate.\n    // Semicolon can be the start (and end) of a statement\n    this._output.space_before_token = false;\n  } else {\n    this.handle_whitespace_and_comments(current_token);\n  }\n\n  var next_token = this._tokens.peek();\n  while (this._flags.mode === MODE.Statement &&\n    !(this._flags.if_block && reserved_word(next_token, 'else')) &&\n    !this._flags.do_block) {\n    this.restore_mode();\n  }\n\n  // hacky but effective for the moment\n  if (this._flags.import_block) {\n    this._flags.import_block = false;\n  }\n  this.print_token(current_token);\n};\n\nBeautifier.prototype.handle_string = function(current_token) {\n  if (this.start_of_statement(current_token)) {\n    // The conditional starts the statement if appropriate.\n    // One difference - strings want at least a space before\n    this._output.space_before_token = true;\n  } else {\n    this.handle_whitespace_and_comments(current_token);\n    if (this._flags.last_token.type === TOKEN.RESERVED || this._flags.last_token.type === TOKEN.WORD || this._flags.inline_frame) {\n      this._output.space_before_token = true;\n    } else if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {\n      if (!this.start_of_object_property()) {\n        this.allow_wrap_or_preserved_newline(current_token);\n      }\n    } else {\n      this.print_newline();\n    }\n  }\n  this.print_token(current_token);\n};\n\nBeautifier.prototype.handle_equals = function(current_token) {\n  if (this.start_of_statement(current_token)) {\n    // The conditional starts the statement if appropriate.\n  } else {\n    this.handle_whitespace_and_comments(current_token);\n  }\n\n  if (this._flags.declaration_statement) {\n    // just got an '=' in a var-line, different formatting/line-breaking, etc will now be done\n    this._flags.declaration_assignment = true;\n  }\n  this._output.space_before_token = true;\n  this.print_token(current_token);\n  this._output.space_before_token = true;\n};\n\nBeautifier.prototype.handle_comma = function(current_token) {\n  this.handle_whitespace_and_comments(current_token, true);\n\n  this.print_token(current_token);\n  this._output.space_before_token = true;\n  if (this._flags.declaration_statement) {\n    if (is_expression(this._flags.parent.mode)) {\n      // do not break on comma, for(var a = 1, b = 2)\n      this._flags.declaration_assignment = false;\n    }\n\n    if (this._flags.declaration_assignment) {\n      this._flags.declaration_assignment = false;\n      this.print_newline(false, true);\n    } else if (this._options.comma_first) {\n      // for comma-first, we want to allow a newline before the comma\n      // to turn into a newline after the comma, which we will fixup later\n      this.allow_wrap_or_preserved_newline(current_token);\n    }\n  } else if (this._flags.mode === MODE.ObjectLiteral ||\n    (this._flags.mode === MODE.Statement && this._flags.parent.mode === MODE.ObjectLiteral)) {\n    if (this._flags.mode === MODE.Statement) {\n      this.restore_mode();\n    }\n\n    if (!this._flags.inline_frame) {\n      this.print_newline();\n    }\n  } else if (this._options.comma_first) {\n    // EXPR or DO_BLOCK\n    // for comma-first, we want to allow a newline before the comma\n    // to turn into a newline after the comma, which we will fixup later\n    this.allow_wrap_or_preserved_newline(current_token);\n  }\n};\n\nBeautifier.prototype.handle_operator = function(current_token) {\n  var isGeneratorAsterisk = current_token.text === '*' &&\n    (reserved_array(this._flags.last_token, ['function', 'yield']) ||\n      (in_array(this._flags.last_token.type, [TOKEN.START_BLOCK, TOKEN.COMMA, TOKEN.END_BLOCK, TOKEN.SEMICOLON]))\n    );\n  var isUnary = in_array(current_token.text, ['-', '+']) && (\n    in_array(this._flags.last_token.type, [TOKEN.START_BLOCK, TOKEN.START_EXPR, TOKEN.EQUALS, TOKEN.OPERATOR]) ||\n    in_array(this._flags.last_token.text, line_starters) ||\n    this._flags.last_token.text === ','\n  );\n\n  if (this.start_of_statement(current_token)) {\n    // The conditional starts the statement if appropriate.\n  } else {\n    var preserve_statement_flags = !isGeneratorAsterisk;\n    this.handle_whitespace_and_comments(current_token, preserve_statement_flags);\n  }\n\n  if (reserved_array(this._flags.last_token, special_words)) {\n    // \"return\" had a special handling in TK_WORD. Now we need to return the favor\n    this._output.space_before_token = true;\n    this.print_token(current_token);\n    return;\n  }\n\n  // hack for actionscript's import .*;\n  if (current_token.text === '*' && this._flags.last_token.type === TOKEN.DOT) {\n    this.print_token(current_token);\n    return;\n  }\n\n  if (current_token.text === '::') {\n    // no spaces around exotic namespacing syntax operator\n    this.print_token(current_token);\n    return;\n  }\n\n  // Allow line wrapping between operators when operator_position is\n  //   set to before or preserve\n  if (this._flags.last_token.type === TOKEN.OPERATOR && in_array(this._options.operator_position, OPERATOR_POSITION_BEFORE_OR_PRESERVE)) {\n    this.allow_wrap_or_preserved_newline(current_token);\n  }\n\n  if (current_token.text === ':' && this._flags.in_case) {\n    this.print_token(current_token);\n\n    this._flags.in_case = false;\n    this._flags.case_body = true;\n    if (this._tokens.peek().type !== TOKEN.START_BLOCK) {\n      this.indent();\n      this.print_newline();\n    } else {\n      this._output.space_before_token = true;\n    }\n    return;\n  }\n\n  var space_before = true;\n  var space_after = true;\n  var in_ternary = false;\n  if (current_token.text === ':') {\n    if (this._flags.ternary_depth === 0) {\n      // Colon is invalid javascript outside of ternary and object, but do our best to guess what was meant.\n      space_before = false;\n    } else {\n      this._flags.ternary_depth -= 1;\n      in_ternary = true;\n    }\n  } else if (current_token.text === '?') {\n    this._flags.ternary_depth += 1;\n  }\n\n  // let's handle the operator_position option prior to any conflicting logic\n  if (!isUnary && !isGeneratorAsterisk && this._options.preserve_newlines && in_array(current_token.text, positionable_operators)) {\n    var isColon = current_token.text === ':';\n    var isTernaryColon = (isColon && in_ternary);\n    var isOtherColon = (isColon && !in_ternary);\n\n    switch (this._options.operator_position) {\n      case OPERATOR_POSITION.before_newline:\n        // if the current token is : and it's not a ternary statement then we set space_before to false\n        this._output.space_before_token = !isOtherColon;\n\n        this.print_token(current_token);\n\n        if (!isColon || isTernaryColon) {\n          this.allow_wrap_or_preserved_newline(current_token);\n        }\n\n        this._output.space_before_token = true;\n        return;\n\n      case OPERATOR_POSITION.after_newline:\n        // if the current token is anything but colon, or (via deduction) it's a colon and in a ternary statement,\n        //   then print a newline.\n\n        this._output.space_before_token = true;\n\n        if (!isColon || isTernaryColon) {\n          if (this._tokens.peek().newlines) {\n            this.print_newline(false, true);\n          } else {\n            this.allow_wrap_or_preserved_newline(current_token);\n          }\n        } else {\n          this._output.space_before_token = false;\n        }\n\n        this.print_token(current_token);\n\n        this._output.space_before_token = true;\n        return;\n\n      case OPERATOR_POSITION.preserve_newline:\n        if (!isOtherColon) {\n          this.allow_wrap_or_preserved_newline(current_token);\n        }\n\n        // if we just added a newline, or the current token is : and it's not a ternary statement,\n        //   then we set space_before to false\n        space_before = !(this._output.just_added_newline() || isOtherColon);\n\n        this._output.space_before_token = space_before;\n        this.print_token(current_token);\n        this._output.space_before_token = true;\n        return;\n    }\n  }\n\n  if (isGeneratorAsterisk) {\n    this.allow_wrap_or_preserved_newline(current_token);\n    space_before = false;\n    var next_token = this._tokens.peek();\n    space_after = next_token && in_array(next_token.type, [TOKEN.WORD, TOKEN.RESERVED]);\n  } else if (current_token.text === '...') {\n    this.allow_wrap_or_preserved_newline(current_token);\n    space_before = this._flags.last_token.type === TOKEN.START_BLOCK;\n    space_after = false;\n  } else if (in_array(current_token.text, ['--', '++', '!', '~']) || isUnary) {\n    // unary operators (and binary +/- pretending to be unary) special cases\n    if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR) {\n      this.allow_wrap_or_preserved_newline(current_token);\n    }\n\n    space_before = false;\n    space_after = false;\n\n    // http://www.ecma-international.org/ecma-262/5.1/#sec-7.9.1\n    // if there is a newline between -- or ++ and anything else we should preserve it.\n    if (current_token.newlines && (current_token.text === '--' || current_token.text === '++')) {\n      this.print_newline(false, true);\n    }\n\n    if (this._flags.last_token.text === ';' && is_expression(this._flags.mode)) {\n      // for (;; ++i)\n      //        ^^^\n      space_before = true;\n    }\n\n    if (this._flags.last_token.type === TOKEN.RESERVED) {\n      space_before = true;\n    } else if (this._flags.last_token.type === TOKEN.END_EXPR) {\n      space_before = !(this._flags.last_token.text === ']' && (current_token.text === '--' || current_token.text === '++'));\n    } else if (this._flags.last_token.type === TOKEN.OPERATOR) {\n      // a++ + ++b;\n      // a - -b\n      space_before = in_array(current_token.text, ['--', '-', '++', '+']) && in_array(this._flags.last_token.text, ['--', '-', '++', '+']);\n      // + and - are not unary when preceeded by -- or ++ operator\n      // a-- + b\n      // a * +b\n      // a - -b\n      if (in_array(current_token.text, ['+', '-']) && in_array(this._flags.last_token.text, ['--', '++'])) {\n        space_after = true;\n      }\n    }\n\n\n    if (((this._flags.mode === MODE.BlockStatement && !this._flags.inline_frame) || this._flags.mode === MODE.Statement) &&\n      (this._flags.last_token.text === '{' || this._flags.last_token.text === ';')) {\n      // { foo; --i }\n      // foo(); --bar;\n      this.print_newline();\n    }\n  }\n\n  this._output.space_before_token = this._output.space_before_token || space_before;\n  this.print_token(current_token);\n  this._output.space_before_token = space_after;\n};\n\nBeautifier.prototype.handle_block_comment = function(current_token, preserve_statement_flags) {\n  if (this._output.raw) {\n    this._output.add_raw_token(current_token);\n    if (current_token.directives && current_token.directives.preserve === 'end') {\n      // If we're testing the raw output behavior, do not allow a directive to turn it off.\n      this._output.raw = this._options.test_output_raw;\n    }\n    return;\n  }\n\n  if (current_token.directives) {\n    this.print_newline(false, preserve_statement_flags);\n    this.print_token(current_token);\n    if (current_token.directives.preserve === 'start') {\n      this._output.raw = true;\n    }\n    this.print_newline(false, true);\n    return;\n  }\n\n  // inline block\n  if (!acorn.newline.test(current_token.text) && !current_token.newlines) {\n    this._output.space_before_token = true;\n    this.print_token(current_token);\n    this._output.space_before_token = true;\n    return;\n  } else {\n    this.print_block_commment(current_token, preserve_statement_flags);\n  }\n};\n\nBeautifier.prototype.print_block_commment = function(current_token, preserve_statement_flags) {\n  var lines = split_linebreaks(current_token.text);\n  var j; // iterator for this case\n  var javadoc = false;\n  var starless = false;\n  var lastIndent = current_token.whitespace_before;\n  var lastIndentLength = lastIndent.length;\n\n  // block comment starts with a new line\n  this.print_newline(false, preserve_statement_flags);\n\n  // first line always indented\n  this.print_token_line_indentation(current_token);\n  this._output.add_token(lines[0]);\n  this.print_newline(false, preserve_statement_flags);\n\n\n  if (lines.length > 1) {\n    lines = lines.slice(1);\n    javadoc = all_lines_start_with(lines, '*');\n    starless = each_line_matches_indent(lines, lastIndent);\n\n    if (javadoc) {\n      this._flags.alignment = 1;\n    }\n\n    for (j = 0; j < lines.length; j++) {\n      if (javadoc) {\n        // javadoc: reformat and re-indent\n        this.print_token_line_indentation(current_token);\n        this._output.add_token(ltrim(lines[j]));\n      } else if (starless && lines[j]) {\n        // starless: re-indent non-empty content, avoiding trim\n        this.print_token_line_indentation(current_token);\n        this._output.add_token(lines[j].substring(lastIndentLength));\n      } else {\n        // normal comments output raw\n        this._output.current_line.set_indent(-1);\n        this._output.add_token(lines[j]);\n      }\n\n      // for comments on their own line or  more than one line, make sure there's a new line after\n      this.print_newline(false, preserve_statement_flags);\n    }\n\n    this._flags.alignment = 0;\n  }\n};\n\n\nBeautifier.prototype.handle_comment = function(current_token, preserve_statement_flags) {\n  if (current_token.newlines) {\n    this.print_newline(false, preserve_statement_flags);\n  } else {\n    this._output.trim(true);\n  }\n\n  this._output.space_before_token = true;\n  this.print_token(current_token);\n  this.print_newline(false, preserve_statement_flags);\n};\n\nBeautifier.prototype.handle_dot = function(current_token) {\n  if (this.start_of_statement(current_token)) {\n    // The conditional starts the statement if appropriate.\n  } else {\n    this.handle_whitespace_and_comments(current_token, true);\n  }\n\n  if (reserved_array(this._flags.last_token, special_words)) {\n    this._output.space_before_token = false;\n  } else {\n    // allow preserved newlines before dots in general\n    // force newlines on dots after close paren when break_chained - for bar().baz()\n    this.allow_wrap_or_preserved_newline(current_token,\n      this._flags.last_token.text === ')' && this._options.break_chained_methods);\n  }\n\n  // Only unindent chained method dot if this dot starts a new line.\n  // Otherwise the automatic extra indentation removal will handle the over indent\n  if (this._options.unindent_chained_methods && this._output.just_added_newline()) {\n    this.deindent();\n  }\n\n  this.print_token(current_token);\n};\n\nBeautifier.prototype.handle_unknown = function(current_token, preserve_statement_flags) {\n  this.print_token(current_token);\n\n  if (current_token.text[current_token.text.length - 1] === '\\n') {\n    this.print_newline(false, preserve_statement_flags);\n  }\n};\n\nBeautifier.prototype.handle_eof = function(current_token) {\n  // Unwind any open statements\n  while (this._flags.mode === MODE.Statement) {\n    this.restore_mode();\n  }\n  this.handle_whitespace_and_comments(current_token);\n};\n\nmodule.exports.Beautifier = Beautifier;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction OutputLine(parent) {\n  this.__parent = parent;\n  this.__character_count = 0;\n  // use indent_count as a marker for this.__lines that have preserved indentation\n  this.__indent_count = -1;\n  this.__alignment_count = 0;\n  this.__wrap_point_index = 0;\n  this.__wrap_point_character_count = 0;\n  this.__wrap_point_indent_count = -1;\n  this.__wrap_point_alignment_count = 0;\n\n  this.__items = [];\n}\n\nOutputLine.prototype.clone_empty = function() {\n  var line = new OutputLine(this.__parent);\n  line.set_indent(this.__indent_count, this.__alignment_count);\n  return line;\n};\n\nOutputLine.prototype.item = function(index) {\n  if (index < 0) {\n    return this.__items[this.__items.length + index];\n  } else {\n    return this.__items[index];\n  }\n};\n\nOutputLine.prototype.has_match = function(pattern) {\n  for (var lastCheckedOutput = this.__items.length - 1; lastCheckedOutput >= 0; lastCheckedOutput--) {\n    if (this.__items[lastCheckedOutput].match(pattern)) {\n      return true;\n    }\n  }\n  return false;\n};\n\nOutputLine.prototype.set_indent = function(indent, alignment) {\n  if (this.is_empty()) {\n    this.__indent_count = indent || 0;\n    this.__alignment_count = alignment || 0;\n    this.__character_count = this.__parent.get_indent_size(this.__indent_count, this.__alignment_count);\n  }\n};\n\nOutputLine.prototype._set_wrap_point = function() {\n  if (this.__parent.wrap_line_length) {\n    this.__wrap_point_index = this.__items.length;\n    this.__wrap_point_character_count = this.__character_count;\n    this.__wrap_point_indent_count = this.__parent.next_line.__indent_count;\n    this.__wrap_point_alignment_count = this.__parent.next_line.__alignment_count;\n  }\n};\n\nOutputLine.prototype._should_wrap = function() {\n  return this.__wrap_point_index &&\n    this.__character_count > this.__parent.wrap_line_length &&\n    this.__wrap_point_character_count > this.__parent.next_line.__character_count;\n};\n\nOutputLine.prototype._allow_wrap = function() {\n  if (this._should_wrap()) {\n    this.__parent.add_new_line();\n    var next = this.__parent.current_line;\n    next.set_indent(this.__wrap_point_indent_count, this.__wrap_point_alignment_count);\n    next.__items = this.__items.slice(this.__wrap_point_index);\n    this.__items = this.__items.slice(0, this.__wrap_point_index);\n\n    next.__character_count += this.__character_count - this.__wrap_point_character_count;\n    this.__character_count = this.__wrap_point_character_count;\n\n    if (next.__items[0] === \" \") {\n      next.__items.splice(0, 1);\n      next.__character_count -= 1;\n    }\n    return true;\n  }\n  return false;\n};\n\nOutputLine.prototype.is_empty = function() {\n  return this.__items.length === 0;\n};\n\nOutputLine.prototype.last = function() {\n  if (!this.is_empty()) {\n    return this.__items[this.__items.length - 1];\n  } else {\n    return null;\n  }\n};\n\nOutputLine.prototype.push = function(item) {\n  this.__items.push(item);\n  var last_newline_index = item.lastIndexOf('\\n');\n  if (last_newline_index !== -1) {\n    this.__character_count = item.length - last_newline_index;\n  } else {\n    this.__character_count += item.length;\n  }\n};\n\nOutputLine.prototype.pop = function() {\n  var item = null;\n  if (!this.is_empty()) {\n    item = this.__items.pop();\n    this.__character_count -= item.length;\n  }\n  return item;\n};\n\n\nOutputLine.prototype._remove_indent = function() {\n  if (this.__indent_count > 0) {\n    this.__indent_count -= 1;\n    this.__character_count -= this.__parent.indent_size;\n  }\n};\n\nOutputLine.prototype._remove_wrap_indent = function() {\n  if (this.__wrap_point_indent_count > 0) {\n    this.__wrap_point_indent_count -= 1;\n  }\n};\nOutputLine.prototype.trim = function() {\n  while (this.last() === ' ') {\n    this.__items.pop();\n    this.__character_count -= 1;\n  }\n};\n\nOutputLine.prototype.toString = function() {\n  var result = '';\n  if (this.is_empty()) {\n    if (this.__parent.indent_empty_lines) {\n      result = this.__parent.get_indent_string(this.__indent_count);\n    }\n  } else {\n    result = this.__parent.get_indent_string(this.__indent_count, this.__alignment_count);\n    result += this.__items.join('');\n  }\n  return result;\n};\n\nfunction IndentStringCache(options, baseIndentString) {\n  this.__cache = [''];\n  this.__indent_size = options.indent_size;\n  this.__indent_string = options.indent_char;\n  if (!options.indent_with_tabs) {\n    this.__indent_string = new Array(options.indent_size + 1).join(options.indent_char);\n  }\n\n  // Set to null to continue support for auto detection of base indent\n  baseIndentString = baseIndentString || '';\n  if (options.indent_level > 0) {\n    baseIndentString = new Array(options.indent_level + 1).join(this.__indent_string);\n  }\n\n  this.__base_string = baseIndentString;\n  this.__base_string_length = baseIndentString.length;\n}\n\nIndentStringCache.prototype.get_indent_size = function(indent, column) {\n  var result = this.__base_string_length;\n  column = column || 0;\n  if (indent < 0) {\n    result = 0;\n  }\n  result += indent * this.__indent_size;\n  result += column;\n  return result;\n};\n\nIndentStringCache.prototype.get_indent_string = function(indent_level, column) {\n  var result = this.__base_string;\n  column = column || 0;\n  if (indent_level < 0) {\n    indent_level = 0;\n    result = '';\n  }\n  column += indent_level * this.__indent_size;\n  this.__ensure_cache(column);\n  result += this.__cache[column];\n  return result;\n};\n\nIndentStringCache.prototype.__ensure_cache = function(column) {\n  while (column >= this.__cache.length) {\n    this.__add_column();\n  }\n};\n\nIndentStringCache.prototype.__add_column = function() {\n  var column = this.__cache.length;\n  var indent = 0;\n  var result = '';\n  if (this.__indent_size && column >= this.__indent_size) {\n    indent = Math.floor(column / this.__indent_size);\n    column -= indent * this.__indent_size;\n    result = new Array(indent + 1).join(this.__indent_string);\n  }\n  if (column) {\n    result += new Array(column + 1).join(' ');\n  }\n\n  this.__cache.push(result);\n};\n\nfunction Output(options, baseIndentString) {\n  this.__indent_cache = new IndentStringCache(options, baseIndentString);\n  this.raw = false;\n  this._end_with_newline = options.end_with_newline;\n  this.indent_size = options.indent_size;\n  this.wrap_line_length = options.wrap_line_length;\n  this.indent_empty_lines = options.indent_empty_lines;\n  this.__lines = [];\n  this.previous_line = null;\n  this.current_line = null;\n  this.next_line = new OutputLine(this);\n  this.space_before_token = false;\n  this.non_breaking_space = false;\n  this.previous_token_wrapped = false;\n  // initialize\n  this.__add_outputline();\n}\n\nOutput.prototype.__add_outputline = function() {\n  this.previous_line = this.current_line;\n  this.current_line = this.next_line.clone_empty();\n  this.__lines.push(this.current_line);\n};\n\nOutput.prototype.get_line_number = function() {\n  return this.__lines.length;\n};\n\nOutput.prototype.get_indent_string = function(indent, column) {\n  return this.__indent_cache.get_indent_string(indent, column);\n};\n\nOutput.prototype.get_indent_size = function(indent, column) {\n  return this.__indent_cache.get_indent_size(indent, column);\n};\n\nOutput.prototype.is_empty = function() {\n  return !this.previous_line && this.current_line.is_empty();\n};\n\nOutput.prototype.add_new_line = function(force_newline) {\n  // never newline at the start of file\n  // otherwise, newline only if we didn't just add one or we're forced\n  if (this.is_empty() ||\n    (!force_newline && this.just_added_newline())) {\n    return false;\n  }\n\n  // if raw output is enabled, don't print additional newlines,\n  // but still return True as though you had\n  if (!this.raw) {\n    this.__add_outputline();\n  }\n  return true;\n};\n\nOutput.prototype.get_code = function(eol) {\n  this.trim(true);\n\n  // handle some edge cases where the last tokens\n  // has text that ends with newline(s)\n  var last_item = this.current_line.pop();\n  if (last_item) {\n    if (last_item[last_item.length - 1] === '\\n') {\n      last_item = last_item.replace(/\\n+$/g, '');\n    }\n    this.current_line.push(last_item);\n  }\n\n  if (this._end_with_newline) {\n    this.__add_outputline();\n  }\n\n  var sweet_code = this.__lines.join('\\n');\n\n  if (eol !== '\\n') {\n    sweet_code = sweet_code.replace(/[\\n]/g, eol);\n  }\n  return sweet_code;\n};\n\nOutput.prototype.set_wrap_point = function() {\n  this.current_line._set_wrap_point();\n};\n\nOutput.prototype.set_indent = function(indent, alignment) {\n  indent = indent || 0;\n  alignment = alignment || 0;\n\n  // Next line stores alignment values\n  this.next_line.set_indent(indent, alignment);\n\n  // Never indent your first output indent at the start of the file\n  if (this.__lines.length > 1) {\n    this.current_line.set_indent(indent, alignment);\n    return true;\n  }\n\n  this.current_line.set_indent();\n  return false;\n};\n\nOutput.prototype.add_raw_token = function(token) {\n  for (var x = 0; x < token.newlines; x++) {\n    this.__add_outputline();\n  }\n  this.current_line.set_indent(-1);\n  this.current_line.push(token.whitespace_before);\n  this.current_line.push(token.text);\n  this.space_before_token = false;\n  this.non_breaking_space = false;\n  this.previous_token_wrapped = false;\n};\n\nOutput.prototype.add_token = function(printable_token) {\n  this.__add_space_before_token();\n  this.current_line.push(printable_token);\n  this.space_before_token = false;\n  this.non_breaking_space = false;\n  this.previous_token_wrapped = this.current_line._allow_wrap();\n};\n\nOutput.prototype.__add_space_before_token = function() {\n  if (this.space_before_token && !this.just_added_newline()) {\n    if (!this.non_breaking_space) {\n      this.set_wrap_point();\n    }\n    this.current_line.push(' ');\n  }\n};\n\nOutput.prototype.remove_indent = function(index) {\n  var output_length = this.__lines.length;\n  while (index < output_length) {\n    this.__lines[index]._remove_indent();\n    index++;\n  }\n  this.current_line._remove_wrap_indent();\n};\n\nOutput.prototype.trim = function(eat_newlines) {\n  eat_newlines = (eat_newlines === undefined) ? false : eat_newlines;\n\n  this.current_line.trim();\n\n  while (eat_newlines && this.__lines.length > 1 &&\n    this.current_line.is_empty()) {\n    this.__lines.pop();\n    this.current_line = this.__lines[this.__lines.length - 1];\n    this.current_line.trim();\n  }\n\n  this.previous_line = this.__lines.length > 1 ?\n    this.__lines[this.__lines.length - 2] : null;\n};\n\nOutput.prototype.just_added_newline = function() {\n  return this.current_line.is_empty();\n};\n\nOutput.prototype.just_added_blankline = function() {\n  return this.is_empty() ||\n    (this.current_line.is_empty() && this.previous_line.is_empty());\n};\n\nOutput.prototype.ensure_empty_line_above = function(starts_with, ends_with) {\n  var index = this.__lines.length - 2;\n  while (index >= 0) {\n    var potentialEmptyLine = this.__lines[index];\n    if (potentialEmptyLine.is_empty()) {\n      break;\n    } else if (potentialEmptyLine.item(0).indexOf(starts_with) !== 0 &&\n      potentialEmptyLine.item(-1) !== ends_with) {\n      this.__lines.splice(index + 1, 0, new OutputLine(this));\n      this.previous_line = this.__lines[this.__lines.length - 2];\n      break;\n    }\n    index--;\n  }\n};\n\nmodule.exports.Output = Output;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Token(type, text, newlines, whitespace_before) {\n  this.type = type;\n  this.text = text;\n\n  // comments_before are\n  // comments that have a new line before them\n  // and may or may not have a newline after\n  // this is a set of comments before\n  this.comments_before = null; /* inline comment*/\n\n\n  // this.comments_after =  new TokenStream(); // no new line before and newline after\n  this.newlines = newlines || 0;\n  this.whitespace_before = whitespace_before || '';\n  this.parent = null;\n  this.next = null;\n  this.previous = null;\n  this.opened = null;\n  this.closed = null;\n  this.directives = null;\n}\n\n\nmodule.exports.Token = Token;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* jshint node: true, curly: false */\n// Parts of this section of code is taken from acorn.\n//\n// Acorn was written by Marijn Haverbeke and released under an MIT\n// license. The Unicode regexps (for identifiers and whitespace) were\n// taken from [Esprima](http://esprima.org) by Ariya Hidayat.\n//\n// Git repositories for Acorn are available at\n//\n//     http://marijnhaverbeke.nl/git/acorn\n//     https://github.com/marijnh/acorn.git\n\n// ## Character categories\n\n\n\n\n// acorn used char codes to squeeze the last bit of performance out\n// Beautifier is okay without that, so we're using regex\n// permit # (23), $ (36), and @ (64). @ is used in ES7 decorators.\n// 65 through 91 are uppercase letters.\n// permit _ (95).\n// 97 through 123 are lowercase letters.\nvar baseASCIIidentifierStartChars = \"\\\\x23\\\\x24\\\\x40\\\\x41-\\\\x5a\\\\x5f\\\\x61-\\\\x7a\";\n\n// inside an identifier @ is not allowed but 0-9 are.\nvar baseASCIIidentifierChars = \"\\\\x24\\\\x30-\\\\x39\\\\x41-\\\\x5a\\\\x5f\\\\x61-\\\\x7a\";\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point above 128.\nvar nonASCIIidentifierStartChars = \"\\\\xaa\\\\xb5\\\\xba\\\\xc0-\\\\xd6\\\\xd8-\\\\xf6\\\\xf8-\\\\u02c1\\\\u02c6-\\\\u02d1\\\\u02e0-\\\\u02e4\\\\u02ec\\\\u02ee\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037a-\\\\u037d\\\\u0386\\\\u0388-\\\\u038a\\\\u038c\\\\u038e-\\\\u03a1\\\\u03a3-\\\\u03f5\\\\u03f7-\\\\u0481\\\\u048a-\\\\u0527\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05d0-\\\\u05ea\\\\u05f0-\\\\u05f2\\\\u0620-\\\\u064a\\\\u066e\\\\u066f\\\\u0671-\\\\u06d3\\\\u06d5\\\\u06e5\\\\u06e6\\\\u06ee\\\\u06ef\\\\u06fa-\\\\u06fc\\\\u06ff\\\\u0710\\\\u0712-\\\\u072f\\\\u074d-\\\\u07a5\\\\u07b1\\\\u07ca-\\\\u07ea\\\\u07f4\\\\u07f5\\\\u07fa\\\\u0800-\\\\u0815\\\\u081a\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08a0\\\\u08a2-\\\\u08ac\\\\u0904-\\\\u0939\\\\u093d\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0977\\\\u0979-\\\\u097f\\\\u0985-\\\\u098c\\\\u098f\\\\u0990\\\\u0993-\\\\u09a8\\\\u09aa-\\\\u09b0\\\\u09b2\\\\u09b6-\\\\u09b9\\\\u09bd\\\\u09ce\\\\u09dc\\\\u09dd\\\\u09df-\\\\u09e1\\\\u09f0\\\\u09f1\\\\u0a05-\\\\u0a0a\\\\u0a0f\\\\u0a10\\\\u0a13-\\\\u0a28\\\\u0a2a-\\\\u0a30\\\\u0a32\\\\u0a33\\\\u0a35\\\\u0a36\\\\u0a38\\\\u0a39\\\\u0a59-\\\\u0a5c\\\\u0a5e\\\\u0a72-\\\\u0a74\\\\u0a85-\\\\u0a8d\\\\u0a8f-\\\\u0a91\\\\u0a93-\\\\u0aa8\\\\u0aaa-\\\\u0ab0\\\\u0ab2\\\\u0ab3\\\\u0ab5-\\\\u0ab9\\\\u0abd\\\\u0ad0\\\\u0ae0\\\\u0ae1\\\\u0b05-\\\\u0b0c\\\\u0b0f\\\\u0b10\\\\u0b13-\\\\u0b28\\\\u0b2a-\\\\u0b30\\\\u0b32\\\\u0b33\\\\u0b35-\\\\u0b39\\\\u0b3d\\\\u0b5c\\\\u0b5d\\\\u0b5f-\\\\u0b61\\\\u0b71\\\\u0b83\\\\u0b85-\\\\u0b8a\\\\u0b8e-\\\\u0b90\\\\u0b92-\\\\u0b95\\\\u0b99\\\\u0b9a\\\\u0b9c\\\\u0b9e\\\\u0b9f\\\\u0ba3\\\\u0ba4\\\\u0ba8-\\\\u0baa\\\\u0bae-\\\\u0bb9\\\\u0bd0\\\\u0c05-\\\\u0c0c\\\\u0c0e-\\\\u0c10\\\\u0c12-\\\\u0c28\\\\u0c2a-\\\\u0c33\\\\u0c35-\\\\u0c39\\\\u0c3d\\\\u0c58\\\\u0c59\\\\u0c60\\\\u0c61\\\\u0c85-\\\\u0c8c\\\\u0c8e-\\\\u0c90\\\\u0c92-\\\\u0ca8\\\\u0caa-\\\\u0cb3\\\\u0cb5-\\\\u0cb9\\\\u0cbd\\\\u0cde\\\\u0ce0\\\\u0ce1\\\\u0cf1\\\\u0cf2\\\\u0d05-\\\\u0d0c\\\\u0d0e-\\\\u0d10\\\\u0d12-\\\\u0d3a\\\\u0d3d\\\\u0d4e\\\\u0d60\\\\u0d61\\\\u0d7a-\\\\u0d7f\\\\u0d85-\\\\u0d96\\\\u0d9a-\\\\u0db1\\\\u0db3-\\\\u0dbb\\\\u0dbd\\\\u0dc0-\\\\u0dc6\\\\u0e01-\\\\u0e30\\\\u0e32\\\\u0e33\\\\u0e40-\\\\u0e46\\\\u0e81\\\\u0e82\\\\u0e84\\\\u0e87\\\\u0e88\\\\u0e8a\\\\u0e8d\\\\u0e94-\\\\u0e97\\\\u0e99-\\\\u0e9f\\\\u0ea1-\\\\u0ea3\\\\u0ea5\\\\u0ea7\\\\u0eaa\\\\u0eab\\\\u0ead-\\\\u0eb0\\\\u0eb2\\\\u0eb3\\\\u0ebd\\\\u0ec0-\\\\u0ec4\\\\u0ec6\\\\u0edc-\\\\u0edf\\\\u0f00\\\\u0f40-\\\\u0f47\\\\u0f49-\\\\u0f6c\\\\u0f88-\\\\u0f8c\\\\u1000-\\\\u102a\\\\u103f\\\\u1050-\\\\u1055\\\\u105a-\\\\u105d\\\\u1061\\\\u1065\\\\u1066\\\\u106e-\\\\u1070\\\\u1075-\\\\u1081\\\\u108e\\\\u10a0-\\\\u10c5\\\\u10c7\\\\u10cd\\\\u10d0-\\\\u10fa\\\\u10fc-\\\\u1248\\\\u124a-\\\\u124d\\\\u1250-\\\\u1256\\\\u1258\\\\u125a-\\\\u125d\\\\u1260-\\\\u1288\\\\u128a-\\\\u128d\\\\u1290-\\\\u12b0\\\\u12b2-\\\\u12b5\\\\u12b8-\\\\u12be\\\\u12c0\\\\u12c2-\\\\u12c5\\\\u12c8-\\\\u12d6\\\\u12d8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135a\\\\u1380-\\\\u138f\\\\u13a0-\\\\u13f4\\\\u1401-\\\\u166c\\\\u166f-\\\\u167f\\\\u1681-\\\\u169a\\\\u16a0-\\\\u16ea\\\\u16ee-\\\\u16f0\\\\u1700-\\\\u170c\\\\u170e-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176c\\\\u176e-\\\\u1770\\\\u1780-\\\\u17b3\\\\u17d7\\\\u17dc\\\\u1820-\\\\u1877\\\\u1880-\\\\u18a8\\\\u18aa\\\\u18b0-\\\\u18f5\\\\u1900-\\\\u191c\\\\u1950-\\\\u196d\\\\u1970-\\\\u1974\\\\u1980-\\\\u19ab\\\\u19c1-\\\\u19c7\\\\u1a00-\\\\u1a16\\\\u1a20-\\\\u1a54\\\\u1aa7\\\\u1b05-\\\\u1b33\\\\u1b45-\\\\u1b4b\\\\u1b83-\\\\u1ba0\\\\u1bae\\\\u1baf\\\\u1bba-\\\\u1be5\\\\u1c00-\\\\u1c23\\\\u1c4d-\\\\u1c4f\\\\u1c5a-\\\\u1c7d\\\\u1ce9-\\\\u1cec\\\\u1cee-\\\\u1cf1\\\\u1cf5\\\\u1cf6\\\\u1d00-\\\\u1dbf\\\\u1e00-\\\\u1f15\\\\u1f18-\\\\u1f1d\\\\u1f20-\\\\u1f45\\\\u1f48-\\\\u1f4d\\\\u1f50-\\\\u1f57\\\\u1f59\\\\u1f5b\\\\u1f5d\\\\u1f5f-\\\\u1f7d\\\\u1f80-\\\\u1fb4\\\\u1fb6-\\\\u1fbc\\\\u1fbe\\\\u1fc2-\\\\u1fc4\\\\u1fc6-\\\\u1fcc\\\\u1fd0-\\\\u1fd3\\\\u1fd6-\\\\u1fdb\\\\u1fe0-\\\\u1fec\\\\u1ff2-\\\\u1ff4\\\\u1ff6-\\\\u1ffc\\\\u2071\\\\u207f\\\\u2090-\\\\u209c\\\\u2102\\\\u2107\\\\u210a-\\\\u2113\\\\u2115\\\\u2119-\\\\u211d\\\\u2124\\\\u2126\\\\u2128\\\\u212a-\\\\u212d\\\\u212f-\\\\u2139\\\\u213c-\\\\u213f\\\\u2145-\\\\u2149\\\\u214e\\\\u2160-\\\\u2188\\\\u2c00-\\\\u2c2e\\\\u2c30-\\\\u2c5e\\\\u2c60-\\\\u2ce4\\\\u2ceb-\\\\u2cee\\\\u2cf2\\\\u2cf3\\\\u2d00-\\\\u2d25\\\\u2d27\\\\u2d2d\\\\u2d30-\\\\u2d67\\\\u2d6f\\\\u2d80-\\\\u2d96\\\\u2da0-\\\\u2da6\\\\u2da8-\\\\u2dae\\\\u2db0-\\\\u2db6\\\\u2db8-\\\\u2dbe\\\\u2dc0-\\\\u2dc6\\\\u2dc8-\\\\u2dce\\\\u2dd0-\\\\u2dd6\\\\u2dd8-\\\\u2dde\\\\u2e2f\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303c\\\\u3041-\\\\u3096\\\\u309d-\\\\u309f\\\\u30a1-\\\\u30fa\\\\u30fc-\\\\u30ff\\\\u3105-\\\\u312d\\\\u3131-\\\\u318e\\\\u31a0-\\\\u31ba\\\\u31f0-\\\\u31ff\\\\u3400-\\\\u4db5\\\\u4e00-\\\\u9fcc\\\\ua000-\\\\ua48c\\\\ua4d0-\\\\ua4fd\\\\ua500-\\\\ua60c\\\\ua610-\\\\ua61f\\\\ua62a\\\\ua62b\\\\ua640-\\\\ua66e\\\\ua67f-\\\\ua697\\\\ua6a0-\\\\ua6ef\\\\ua717-\\\\ua71f\\\\ua722-\\\\ua788\\\\ua78b-\\\\ua78e\\\\ua790-\\\\ua793\\\\ua7a0-\\\\ua7aa\\\\ua7f8-\\\\ua801\\\\ua803-\\\\ua805\\\\ua807-\\\\ua80a\\\\ua80c-\\\\ua822\\\\ua840-\\\\ua873\\\\ua882-\\\\ua8b3\\\\ua8f2-\\\\ua8f7\\\\ua8fb\\\\ua90a-\\\\ua925\\\\ua930-\\\\ua946\\\\ua960-\\\\ua97c\\\\ua984-\\\\ua9b2\\\\ua9cf\\\\uaa00-\\\\uaa28\\\\uaa40-\\\\uaa42\\\\uaa44-\\\\uaa4b\\\\uaa60-\\\\uaa76\\\\uaa7a\\\\uaa80-\\\\uaaaf\\\\uaab1\\\\uaab5\\\\uaab6\\\\uaab9-\\\\uaabd\\\\uaac0\\\\uaac2\\\\uaadb-\\\\uaadd\\\\uaae0-\\\\uaaea\\\\uaaf2-\\\\uaaf4\\\\uab01-\\\\uab06\\\\uab09-\\\\uab0e\\\\uab11-\\\\uab16\\\\uab20-\\\\uab26\\\\uab28-\\\\uab2e\\\\uabc0-\\\\uabe2\\\\uac00-\\\\ud7a3\\\\ud7b0-\\\\ud7c6\\\\ud7cb-\\\\ud7fb\\\\uf900-\\\\ufa6d\\\\ufa70-\\\\ufad9\\\\ufb00-\\\\ufb06\\\\ufb13-\\\\ufb17\\\\ufb1d\\\\ufb1f-\\\\ufb28\\\\ufb2a-\\\\ufb36\\\\ufb38-\\\\ufb3c\\\\ufb3e\\\\ufb40\\\\ufb41\\\\ufb43\\\\ufb44\\\\ufb46-\\\\ufbb1\\\\ufbd3-\\\\ufd3d\\\\ufd50-\\\\ufd8f\\\\ufd92-\\\\ufdc7\\\\ufdf0-\\\\ufdfb\\\\ufe70-\\\\ufe74\\\\ufe76-\\\\ufefc\\\\uff21-\\\\uff3a\\\\uff41-\\\\uff5a\\\\uff66-\\\\uffbe\\\\uffc2-\\\\uffc7\\\\uffca-\\\\uffcf\\\\uffd2-\\\\uffd7\\\\uffda-\\\\uffdc\";\nvar nonASCIIidentifierChars = \"\\\\u0300-\\\\u036f\\\\u0483-\\\\u0487\\\\u0591-\\\\u05bd\\\\u05bf\\\\u05c1\\\\u05c2\\\\u05c4\\\\u05c5\\\\u05c7\\\\u0610-\\\\u061a\\\\u0620-\\\\u0649\\\\u0672-\\\\u06d3\\\\u06e7-\\\\u06e8\\\\u06fb-\\\\u06fc\\\\u0730-\\\\u074a\\\\u0800-\\\\u0814\\\\u081b-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082d\\\\u0840-\\\\u0857\\\\u08e4-\\\\u08fe\\\\u0900-\\\\u0903\\\\u093a-\\\\u093c\\\\u093e-\\\\u094f\\\\u0951-\\\\u0957\\\\u0962-\\\\u0963\\\\u0966-\\\\u096f\\\\u0981-\\\\u0983\\\\u09bc\\\\u09be-\\\\u09c4\\\\u09c7\\\\u09c8\\\\u09d7\\\\u09df-\\\\u09e0\\\\u0a01-\\\\u0a03\\\\u0a3c\\\\u0a3e-\\\\u0a42\\\\u0a47\\\\u0a48\\\\u0a4b-\\\\u0a4d\\\\u0a51\\\\u0a66-\\\\u0a71\\\\u0a75\\\\u0a81-\\\\u0a83\\\\u0abc\\\\u0abe-\\\\u0ac5\\\\u0ac7-\\\\u0ac9\\\\u0acb-\\\\u0acd\\\\u0ae2-\\\\u0ae3\\\\u0ae6-\\\\u0aef\\\\u0b01-\\\\u0b03\\\\u0b3c\\\\u0b3e-\\\\u0b44\\\\u0b47\\\\u0b48\\\\u0b4b-\\\\u0b4d\\\\u0b56\\\\u0b57\\\\u0b5f-\\\\u0b60\\\\u0b66-\\\\u0b6f\\\\u0b82\\\\u0bbe-\\\\u0bc2\\\\u0bc6-\\\\u0bc8\\\\u0bca-\\\\u0bcd\\\\u0bd7\\\\u0be6-\\\\u0bef\\\\u0c01-\\\\u0c03\\\\u0c46-\\\\u0c48\\\\u0c4a-\\\\u0c4d\\\\u0c55\\\\u0c56\\\\u0c62-\\\\u0c63\\\\u0c66-\\\\u0c6f\\\\u0c82\\\\u0c83\\\\u0cbc\\\\u0cbe-\\\\u0cc4\\\\u0cc6-\\\\u0cc8\\\\u0cca-\\\\u0ccd\\\\u0cd5\\\\u0cd6\\\\u0ce2-\\\\u0ce3\\\\u0ce6-\\\\u0cef\\\\u0d02\\\\u0d03\\\\u0d46-\\\\u0d48\\\\u0d57\\\\u0d62-\\\\u0d63\\\\u0d66-\\\\u0d6f\\\\u0d82\\\\u0d83\\\\u0dca\\\\u0dcf-\\\\u0dd4\\\\u0dd6\\\\u0dd8-\\\\u0ddf\\\\u0df2\\\\u0df3\\\\u0e34-\\\\u0e3a\\\\u0e40-\\\\u0e45\\\\u0e50-\\\\u0e59\\\\u0eb4-\\\\u0eb9\\\\u0ec8-\\\\u0ecd\\\\u0ed0-\\\\u0ed9\\\\u0f18\\\\u0f19\\\\u0f20-\\\\u0f29\\\\u0f35\\\\u0f37\\\\u0f39\\\\u0f41-\\\\u0f47\\\\u0f71-\\\\u0f84\\\\u0f86-\\\\u0f87\\\\u0f8d-\\\\u0f97\\\\u0f99-\\\\u0fbc\\\\u0fc6\\\\u1000-\\\\u1029\\\\u1040-\\\\u1049\\\\u1067-\\\\u106d\\\\u1071-\\\\u1074\\\\u1082-\\\\u108d\\\\u108f-\\\\u109d\\\\u135d-\\\\u135f\\\\u170e-\\\\u1710\\\\u1720-\\\\u1730\\\\u1740-\\\\u1750\\\\u1772\\\\u1773\\\\u1780-\\\\u17b2\\\\u17dd\\\\u17e0-\\\\u17e9\\\\u180b-\\\\u180d\\\\u1810-\\\\u1819\\\\u1920-\\\\u192b\\\\u1930-\\\\u193b\\\\u1951-\\\\u196d\\\\u19b0-\\\\u19c0\\\\u19c8-\\\\u19c9\\\\u19d0-\\\\u19d9\\\\u1a00-\\\\u1a15\\\\u1a20-\\\\u1a53\\\\u1a60-\\\\u1a7c\\\\u1a7f-\\\\u1a89\\\\u1a90-\\\\u1a99\\\\u1b46-\\\\u1b4b\\\\u1b50-\\\\u1b59\\\\u1b6b-\\\\u1b73\\\\u1bb0-\\\\u1bb9\\\\u1be6-\\\\u1bf3\\\\u1c00-\\\\u1c22\\\\u1c40-\\\\u1c49\\\\u1c5b-\\\\u1c7d\\\\u1cd0-\\\\u1cd2\\\\u1d00-\\\\u1dbe\\\\u1e01-\\\\u1f15\\\\u200c\\\\u200d\\\\u203f\\\\u2040\\\\u2054\\\\u20d0-\\\\u20dc\\\\u20e1\\\\u20e5-\\\\u20f0\\\\u2d81-\\\\u2d96\\\\u2de0-\\\\u2dff\\\\u3021-\\\\u3028\\\\u3099\\\\u309a\\\\ua640-\\\\ua66d\\\\ua674-\\\\ua67d\\\\ua69f\\\\ua6f0-\\\\ua6f1\\\\ua7f8-\\\\ua800\\\\ua806\\\\ua80b\\\\ua823-\\\\ua827\\\\ua880-\\\\ua881\\\\ua8b4-\\\\ua8c4\\\\ua8d0-\\\\ua8d9\\\\ua8f3-\\\\ua8f7\\\\ua900-\\\\ua909\\\\ua926-\\\\ua92d\\\\ua930-\\\\ua945\\\\ua980-\\\\ua983\\\\ua9b3-\\\\ua9c0\\\\uaa00-\\\\uaa27\\\\uaa40-\\\\uaa41\\\\uaa4c-\\\\uaa4d\\\\uaa50-\\\\uaa59\\\\uaa7b\\\\uaae0-\\\\uaae9\\\\uaaf2-\\\\uaaf3\\\\uabc0-\\\\uabe1\\\\uabec\\\\uabed\\\\uabf0-\\\\uabf9\\\\ufb20-\\\\ufb28\\\\ufe00-\\\\ufe0f\\\\ufe20-\\\\ufe26\\\\ufe33\\\\ufe34\\\\ufe4d-\\\\ufe4f\\\\uff10-\\\\uff19\\\\uff3f\";\n//var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n//var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\nvar identifierStart = \"(?:\\\\\\\\u[0-9a-fA-F]{4}|[\" + baseASCIIidentifierStartChars + nonASCIIidentifierStartChars + \"])\";\nvar identifierChars = \"(?:\\\\\\\\u[0-9a-fA-F]{4}|[\" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"])*\";\n\nexports.identifier = new RegExp(identifierStart + identifierChars, 'g');\nexports.identifierStart = new RegExp(identifierStart);\nexports.identifierMatch = new RegExp(\"(?:\\\\\\\\u[0-9a-fA-F]{4}|[\" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"])+\");\n\nvar nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/; // jshint ignore:line\n\n// Whether a single character denotes a newline.\n\nexports.newline = /[\\n\\r\\u2028\\u2029]/;\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\n// in javascript, these two differ\n// in python they are the same, different methods are called on them\nexports.lineBreak = new RegExp('\\r\\n|' + exports.newline.source);\nexports.allLineBreaks = new RegExp(exports.lineBreak.source, 'g');\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar BaseOptions = __webpack_require__(6).Options;\n\nvar validPositionValues = ['before-newline', 'after-newline', 'preserve-newline'];\n\nfunction Options(options) {\n  BaseOptions.call(this, options, 'js');\n\n  // compatibility, re\n  var raw_brace_style = this.raw_options.brace_style || null;\n  if (raw_brace_style === \"expand-strict\") { //graceful handling of deprecated option\n    this.raw_options.brace_style = \"expand\";\n  } else if (raw_brace_style === \"collapse-preserve-inline\") { //graceful handling of deprecated option\n    this.raw_options.brace_style = \"collapse,preserve-inline\";\n  } else if (this.raw_options.braces_on_own_line !== undefined) { //graceful handling of deprecated option\n    this.raw_options.brace_style = this.raw_options.braces_on_own_line ? \"expand\" : \"collapse\";\n    // } else if (!raw_brace_style) { //Nothing exists to set it\n    //   raw_brace_style = \"collapse\";\n  }\n\n  //preserve-inline in delimited string will trigger brace_preserve_inline, everything\n  //else is considered a brace_style and the last one only will have an effect\n\n  var brace_style_split = this._get_selection_list('brace_style', ['collapse', 'expand', 'end-expand', 'none', 'preserve-inline']);\n\n  this.brace_preserve_inline = false; //Defaults in case one or other was not specified in meta-option\n  this.brace_style = \"collapse\";\n\n  for (var bs = 0; bs < brace_style_split.length; bs++) {\n    if (brace_style_split[bs] === \"preserve-inline\") {\n      this.brace_preserve_inline = true;\n    } else {\n      this.brace_style = brace_style_split[bs];\n    }\n  }\n\n  this.unindent_chained_methods = this._get_boolean('unindent_chained_methods');\n  this.break_chained_methods = this._get_boolean('break_chained_methods');\n  this.space_in_paren = this._get_boolean('space_in_paren');\n  this.space_in_empty_paren = this._get_boolean('space_in_empty_paren');\n  this.jslint_happy = this._get_boolean('jslint_happy');\n  this.space_after_anon_function = this._get_boolean('space_after_anon_function');\n  this.space_after_named_function = this._get_boolean('space_after_named_function');\n  this.keep_array_indentation = this._get_boolean('keep_array_indentation');\n  this.space_before_conditional = this._get_boolean('space_before_conditional', true);\n  this.unescape_strings = this._get_boolean('unescape_strings');\n  this.e4x = this._get_boolean('e4x');\n  this.comma_first = this._get_boolean('comma_first');\n  this.operator_position = this._get_selection('operator_position', validPositionValues);\n\n  // For testing of beautify preserve:start directive\n  this.test_output_raw = this._get_boolean('test_output_raw');\n\n  // force this._options.space_after_anon_function to true if this._options.jslint_happy\n  if (this.jslint_happy) {\n    this.space_after_anon_function = true;\n  }\n\n}\nOptions.prototype = new BaseOptions();\n\n\n\nmodule.exports.Options = Options;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Options(options, merge_child_field) {\n  this.raw_options = _mergeOpts(options, merge_child_field);\n\n  // Support passing the source text back with no change\n  this.disabled = this._get_boolean('disabled');\n\n  this.eol = this._get_characters('eol', 'auto');\n  this.end_with_newline = this._get_boolean('end_with_newline');\n  this.indent_size = this._get_number('indent_size', 4);\n  this.indent_char = this._get_characters('indent_char', ' ');\n  this.indent_level = this._get_number('indent_level');\n\n  this.preserve_newlines = this._get_boolean('preserve_newlines', true);\n  this.max_preserve_newlines = this._get_number('max_preserve_newlines', 32786);\n  if (!this.preserve_newlines) {\n    this.max_preserve_newlines = 0;\n  }\n\n  this.indent_with_tabs = this._get_boolean('indent_with_tabs', this.indent_char === '\\t');\n  if (this.indent_with_tabs) {\n    this.indent_char = '\\t';\n\n    // indent_size behavior changed after 1.8.6\n    // It used to be that indent_size would be\n    // set to 1 for indent_with_tabs. That is no longer needed and\n    // actually doesn't make sense - why not use spaces? Further,\n    // that might produce unexpected behavior - tabs being used\n    // for single-column alignment. So, when indent_with_tabs is true\n    // and indent_size is 1, reset indent_size to 4.\n    if (this.indent_size === 1) {\n      this.indent_size = 4;\n    }\n  }\n\n  // Backwards compat with 1.3.x\n  this.wrap_line_length = this._get_number('wrap_line_length', this._get_number('max_char'));\n\n  this.indent_empty_lines = this._get_boolean('indent_empty_lines');\n\n  // valid templating languages ['django', 'erb', 'handlebars', 'php']\n  // For now, 'auto' = all off for javascript, all on for html (and inline javascript).\n  // other values ignored\n  this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php'], ['auto']);\n}\n\nOptions.prototype._get_array = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  var result = default_value || [];\n  if (typeof option_value === 'object') {\n    if (option_value !== null && typeof option_value.concat === 'function') {\n      result = option_value.concat();\n    }\n  } else if (typeof option_value === 'string') {\n    result = option_value.split(/[^a-zA-Z0-9_\\/\\-]+/);\n  }\n  return result;\n};\n\nOptions.prototype._get_boolean = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  var result = option_value === undefined ? !!default_value : !!option_value;\n  return result;\n};\n\nOptions.prototype._get_characters = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  var result = default_value || '';\n  if (typeof option_value === 'string') {\n    result = option_value.replace(/\\\\r/, '\\r').replace(/\\\\n/, '\\n').replace(/\\\\t/, '\\t');\n  }\n  return result;\n};\n\nOptions.prototype._get_number = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  default_value = parseInt(default_value, 10);\n  if (isNaN(default_value)) {\n    default_value = 0;\n  }\n  var result = parseInt(option_value, 10);\n  if (isNaN(result)) {\n    result = default_value;\n  }\n  return result;\n};\n\nOptions.prototype._get_selection = function(name, selection_list, default_value) {\n  var result = this._get_selection_list(name, selection_list, default_value);\n  if (result.length !== 1) {\n    throw new Error(\n      \"Invalid Option Value: The option '\" + name + \"' can only be one of the following values:\\n\" +\n      selection_list + \"\\nYou passed in: '\" + this.raw_options[name] + \"'\");\n  }\n\n  return result[0];\n};\n\n\nOptions.prototype._get_selection_list = function(name, selection_list, default_value) {\n  if (!selection_list || selection_list.length === 0) {\n    throw new Error(\"Selection list cannot be empty.\");\n  }\n\n  default_value = default_value || [selection_list[0]];\n  if (!this._is_valid_selection(default_value, selection_list)) {\n    throw new Error(\"Invalid Default Value!\");\n  }\n\n  var result = this._get_array(name, default_value);\n  if (!this._is_valid_selection(result, selection_list)) {\n    throw new Error(\n      \"Invalid Option Value: The option '\" + name + \"' can contain only the following values:\\n\" +\n      selection_list + \"\\nYou passed in: '\" + this.raw_options[name] + \"'\");\n  }\n\n  return result;\n};\n\nOptions.prototype._is_valid_selection = function(result, selection_list) {\n  return result.length && selection_list.length &&\n    !result.some(function(item) { return selection_list.indexOf(item) === -1; });\n};\n\n\n// merges child options up with the parent options object\n// Example: obj = {a: 1, b: {a: 2}}\n//          mergeOpts(obj, 'b')\n//\n//          Returns: {a: 2}\nfunction _mergeOpts(allOptions, childFieldName) {\n  var finalOpts = {};\n  allOptions = _normalizeOpts(allOptions);\n  var name;\n\n  for (name in allOptions) {\n    if (name !== childFieldName) {\n      finalOpts[name] = allOptions[name];\n    }\n  }\n\n  //merge in the per type settings for the childFieldName\n  if (childFieldName && allOptions[childFieldName]) {\n    for (name in allOptions[childFieldName]) {\n      finalOpts[name] = allOptions[childFieldName][name];\n    }\n  }\n  return finalOpts;\n}\n\nfunction _normalizeOpts(options) {\n  var convertedOpts = {};\n  var key;\n\n  for (key in options) {\n    var newKey = key.replace(/-/g, \"_\");\n    convertedOpts[newKey] = options[key];\n  }\n  return convertedOpts;\n}\n\nmodule.exports.Options = Options;\nmodule.exports.normalizeOpts = _normalizeOpts;\nmodule.exports.mergeOpts = _mergeOpts;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar InputScanner = __webpack_require__(8).InputScanner;\nvar BaseTokenizer = __webpack_require__(9).Tokenizer;\nvar BASETOKEN = __webpack_require__(9).TOKEN;\nvar Directives = __webpack_require__(13).Directives;\nvar acorn = __webpack_require__(4);\nvar Pattern = __webpack_require__(12).Pattern;\nvar TemplatablePattern = __webpack_require__(14).TemplatablePattern;\n\n\nfunction in_array(what, arr) {\n  return arr.indexOf(what) !== -1;\n}\n\n\nvar TOKEN = {\n  START_EXPR: 'TK_START_EXPR',\n  END_EXPR: 'TK_END_EXPR',\n  START_BLOCK: 'TK_START_BLOCK',\n  END_BLOCK: 'TK_END_BLOCK',\n  WORD: 'TK_WORD',\n  RESERVED: 'TK_RESERVED',\n  SEMICOLON: 'TK_SEMICOLON',\n  STRING: 'TK_STRING',\n  EQUALS: 'TK_EQUALS',\n  OPERATOR: 'TK_OPERATOR',\n  COMMA: 'TK_COMMA',\n  BLOCK_COMMENT: 'TK_BLOCK_COMMENT',\n  COMMENT: 'TK_COMMENT',\n  DOT: 'TK_DOT',\n  UNKNOWN: 'TK_UNKNOWN',\n  START: BASETOKEN.START,\n  RAW: BASETOKEN.RAW,\n  EOF: BASETOKEN.EOF\n};\n\n\nvar directives_core = new Directives(/\\/\\*/, /\\*\\//);\n\nvar number_pattern = /0[xX][0123456789abcdefABCDEF]*|0[oO][01234567]*|0[bB][01]*|\\d+n|(?:\\.\\d+|\\d+\\.?\\d*)(?:[eE][+-]?\\d+)?/;\n\nvar digit = /[0-9]/;\n\n// Dot \".\" must be distinguished from \"...\" and decimal\nvar dot_pattern = /[^\\d\\.]/;\n\nvar positionable_operators = (\n  \">>> === !== \" +\n  \"<< && >= ** != == <= >> || ?? |> \" +\n  \"< / - + > : & % ? ^ | *\").split(' ');\n\n// IMPORTANT: this must be sorted longest to shortest or tokenizing many not work.\n// Also, you must update possitionable operators separately from punct\nvar punct =\n  \">>>= \" +\n  \"... >>= <<= === >>> !== **= \" +\n  \"=> ^= :: /= << <= == && -= >= >> != -- += ** || ?? ++ %= &= *= |= |> \" +\n  \"= ! ? > < : / ^ - + * & % ~ |\";\n\npunct = punct.replace(/[-[\\]{}()*+?.,\\\\^$|#]/g, \"\\\\$&\");\n// ?. but not if followed by a number \npunct = '\\\\?\\\\.(?!\\\\d) ' + punct;\npunct = punct.replace(/ /g, '|');\n\nvar punct_pattern = new RegExp(punct);\n\n// words which should always start on new line.\nvar line_starters = 'continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export'.split(',');\nvar reserved_words = line_starters.concat(['do', 'in', 'of', 'else', 'get', 'set', 'new', 'catch', 'finally', 'typeof', 'yield', 'async', 'await', 'from', 'as']);\nvar reserved_word_pattern = new RegExp('^(?:' + reserved_words.join('|') + ')$');\n\n// var template_pattern = /(?:(?:<\\?php|<\\?=)[\\s\\S]*?\\?>)|(?:<%[\\s\\S]*?%>)/g;\n\nvar in_html_comment;\n\nvar Tokenizer = function(input_string, options) {\n  BaseTokenizer.call(this, input_string, options);\n\n  this._patterns.whitespace = this._patterns.whitespace.matching(\n    /\\u00A0\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff/.source,\n    /\\u2028\\u2029/.source);\n\n  var pattern_reader = new Pattern(this._input);\n  var templatable = new TemplatablePattern(this._input)\n    .read_options(this._options);\n\n  this.__patterns = {\n    template: templatable,\n    identifier: templatable.starting_with(acorn.identifier).matching(acorn.identifierMatch),\n    number: pattern_reader.matching(number_pattern),\n    punct: pattern_reader.matching(punct_pattern),\n    // comment ends just before nearest linefeed or end of file\n    comment: pattern_reader.starting_with(/\\/\\//).until(/[\\n\\r\\u2028\\u2029]/),\n    //  /* ... */ comment ends with nearest */ or end of file\n    block_comment: pattern_reader.starting_with(/\\/\\*/).until_after(/\\*\\//),\n    html_comment_start: pattern_reader.matching(/<!--/),\n    html_comment_end: pattern_reader.matching(/-->/),\n    include: pattern_reader.starting_with(/#include/).until_after(acorn.lineBreak),\n    shebang: pattern_reader.starting_with(/#!/).until_after(acorn.lineBreak),\n    xml: pattern_reader.matching(/[\\s\\S]*?<(\\/?)([-a-zA-Z:0-9_.]+|{[\\s\\S]+?}|!\\[CDATA\\[[\\s\\S]*?\\]\\])(\\s+{[\\s\\S]+?}|\\s+[-a-zA-Z:0-9_.]+|\\s+[-a-zA-Z:0-9_.]+\\s*=\\s*('[^']*'|\"[^\"]*\"|{[\\s\\S]+?}))*\\s*(\\/?)\\s*>/),\n    single_quote: templatable.until(/['\\\\\\n\\r\\u2028\\u2029]/),\n    double_quote: templatable.until(/[\"\\\\\\n\\r\\u2028\\u2029]/),\n    template_text: templatable.until(/[`\\\\$]/),\n    template_expression: templatable.until(/[`}\\\\]/)\n  };\n\n};\nTokenizer.prototype = new BaseTokenizer();\n\nTokenizer.prototype._is_comment = function(current_token) {\n  return current_token.type === TOKEN.COMMENT || current_token.type === TOKEN.BLOCK_COMMENT || current_token.type === TOKEN.UNKNOWN;\n};\n\nTokenizer.prototype._is_opening = function(current_token) {\n  return current_token.type === TOKEN.START_BLOCK || current_token.type === TOKEN.START_EXPR;\n};\n\nTokenizer.prototype._is_closing = function(current_token, open_token) {\n  return (current_token.type === TOKEN.END_BLOCK || current_token.type === TOKEN.END_EXPR) &&\n    (open_token && (\n      (current_token.text === ']' && open_token.text === '[') ||\n      (current_token.text === ')' && open_token.text === '(') ||\n      (current_token.text === '}' && open_token.text === '{')));\n};\n\nTokenizer.prototype._reset = function() {\n  in_html_comment = false;\n};\n\nTokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false\n  var token = null;\n  this._readWhitespace();\n  var c = this._input.peek();\n\n  if (c === null) {\n    return this._create_token(TOKEN.EOF, '');\n  }\n\n  token = token || this._read_non_javascript(c);\n  token = token || this._read_string(c);\n  token = token || this._read_word(previous_token);\n  token = token || this._read_singles(c);\n  token = token || this._read_comment(c);\n  token = token || this._read_regexp(c, previous_token);\n  token = token || this._read_xml(c, previous_token);\n  token = token || this._read_punctuation();\n  token = token || this._create_token(TOKEN.UNKNOWN, this._input.next());\n\n  return token;\n};\n\nTokenizer.prototype._read_word = function(previous_token) {\n  var resulting_string;\n  resulting_string = this.__patterns.identifier.read();\n  if (resulting_string !== '') {\n    resulting_string = resulting_string.replace(acorn.allLineBreaks, '\\n');\n    if (!(previous_token.type === TOKEN.DOT ||\n        (previous_token.type === TOKEN.RESERVED && (previous_token.text === 'set' || previous_token.text === 'get'))) &&\n      reserved_word_pattern.test(resulting_string)) {\n      if (resulting_string === 'in' || resulting_string === 'of') { // hack for 'in' and 'of' operators\n        return this._create_token(TOKEN.OPERATOR, resulting_string);\n      }\n      return this._create_token(TOKEN.RESERVED, resulting_string);\n    }\n    return this._create_token(TOKEN.WORD, resulting_string);\n  }\n\n  resulting_string = this.__patterns.number.read();\n  if (resulting_string !== '') {\n    return this._create_token(TOKEN.WORD, resulting_string);\n  }\n};\n\nTokenizer.prototype._read_singles = function(c) {\n  var token = null;\n  if (c === '(' || c === '[') {\n    token = this._create_token(TOKEN.START_EXPR, c);\n  } else if (c === ')' || c === ']') {\n    token = this._create_token(TOKEN.END_EXPR, c);\n  } else if (c === '{') {\n    token = this._create_token(TOKEN.START_BLOCK, c);\n  } else if (c === '}') {\n    token = this._create_token(TOKEN.END_BLOCK, c);\n  } else if (c === ';') {\n    token = this._create_token(TOKEN.SEMICOLON, c);\n  } else if (c === '.' && dot_pattern.test(this._input.peek(1))) {\n    token = this._create_token(TOKEN.DOT, c);\n  } else if (c === ',') {\n    token = this._create_token(TOKEN.COMMA, c);\n  }\n\n  if (token) {\n    this._input.next();\n  }\n  return token;\n};\n\nTokenizer.prototype._read_punctuation = function() {\n  var resulting_string = this.__patterns.punct.read();\n\n  if (resulting_string !== '') {\n    if (resulting_string === '=') {\n      return this._create_token(TOKEN.EQUALS, resulting_string);\n    } else if (resulting_string === '?.') {\n      return this._create_token(TOKEN.DOT, resulting_string);\n    } else {\n      return this._create_token(TOKEN.OPERATOR, resulting_string);\n    }\n  }\n};\n\nTokenizer.prototype._read_non_javascript = function(c) {\n  var resulting_string = '';\n\n  if (c === '#') {\n    if (this._is_first_token()) {\n      resulting_string = this.__patterns.shebang.read();\n\n      if (resulting_string) {\n        return this._create_token(TOKEN.UNKNOWN, resulting_string.trim() + '\\n');\n      }\n    }\n\n    // handles extendscript #includes\n    resulting_string = this.__patterns.include.read();\n\n    if (resulting_string) {\n      return this._create_token(TOKEN.UNKNOWN, resulting_string.trim() + '\\n');\n    }\n\n    c = this._input.next();\n\n    // Spidermonkey-specific sharp variables for circular references. Considered obsolete.\n    var sharp = '#';\n    if (this._input.hasNext() && this._input.testChar(digit)) {\n      do {\n        c = this._input.next();\n        sharp += c;\n      } while (this._input.hasNext() && c !== '#' && c !== '=');\n      if (c === '#') {\n        //\n      } else if (this._input.peek() === '[' && this._input.peek(1) === ']') {\n        sharp += '[]';\n        this._input.next();\n        this._input.next();\n      } else if (this._input.peek() === '{' && this._input.peek(1) === '}') {\n        sharp += '{}';\n        this._input.next();\n        this._input.next();\n      }\n      return this._create_token(TOKEN.WORD, sharp);\n    }\n\n    this._input.back();\n\n  } else if (c === '<' && this._is_first_token()) {\n    resulting_string = this.__patterns.html_comment_start.read();\n    if (resulting_string) {\n      while (this._input.hasNext() && !this._input.testChar(acorn.newline)) {\n        resulting_string += this._input.next();\n      }\n      in_html_comment = true;\n      return this._create_token(TOKEN.COMMENT, resulting_string);\n    }\n  } else if (in_html_comment && c === '-') {\n    resulting_string = this.__patterns.html_comment_end.read();\n    if (resulting_string) {\n      in_html_comment = false;\n      return this._create_token(TOKEN.COMMENT, resulting_string);\n    }\n  }\n\n  return null;\n};\n\nTokenizer.prototype._read_comment = function(c) {\n  var token = null;\n  if (c === '/') {\n    var comment = '';\n    if (this._input.peek(1) === '*') {\n      // peek for comment /* ... */\n      comment = this.__patterns.block_comment.read();\n      var directives = directives_core.get_directives(comment);\n      if (directives && directives.ignore === 'start') {\n        comment += directives_core.readIgnored(this._input);\n      }\n      comment = comment.replace(acorn.allLineBreaks, '\\n');\n      token = this._create_token(TOKEN.BLOCK_COMMENT, comment);\n      token.directives = directives;\n    } else if (this._input.peek(1) === '/') {\n      // peek for comment // ...\n      comment = this.__patterns.comment.read();\n      token = this._create_token(TOKEN.COMMENT, comment);\n    }\n  }\n  return token;\n};\n\nTokenizer.prototype._read_string = function(c) {\n  if (c === '`' || c === \"'\" || c === '\"') {\n    var resulting_string = this._input.next();\n    this.has_char_escapes = false;\n\n    if (c === '`') {\n      resulting_string += this._read_string_recursive('`', true, '${');\n    } else {\n      resulting_string += this._read_string_recursive(c);\n    }\n\n    if (this.has_char_escapes && this._options.unescape_strings) {\n      resulting_string = unescape_string(resulting_string);\n    }\n\n    if (this._input.peek() === c) {\n      resulting_string += this._input.next();\n    }\n\n    resulting_string = resulting_string.replace(acorn.allLineBreaks, '\\n');\n\n    return this._create_token(TOKEN.STRING, resulting_string);\n  }\n\n  return null;\n};\n\nTokenizer.prototype._allow_regexp_or_xml = function(previous_token) {\n  // regex and xml can only appear in specific locations during parsing\n  return (previous_token.type === TOKEN.RESERVED && in_array(previous_token.text, ['return', 'case', 'throw', 'else', 'do', 'typeof', 'yield'])) ||\n    (previous_token.type === TOKEN.END_EXPR && previous_token.text === ')' &&\n      previous_token.opened.previous.type === TOKEN.RESERVED && in_array(previous_token.opened.previous.text, ['if', 'while', 'for'])) ||\n    (in_array(previous_token.type, [TOKEN.COMMENT, TOKEN.START_EXPR, TOKEN.START_BLOCK, TOKEN.START,\n      TOKEN.END_BLOCK, TOKEN.OPERATOR, TOKEN.EQUALS, TOKEN.EOF, TOKEN.SEMICOLON, TOKEN.COMMA\n    ]));\n};\n\nTokenizer.prototype._read_regexp = function(c, previous_token) {\n\n  if (c === '/' && this._allow_regexp_or_xml(previous_token)) {\n    // handle regexp\n    //\n    var resulting_string = this._input.next();\n    var esc = false;\n\n    var in_char_class = false;\n    while (this._input.hasNext() &&\n      ((esc || in_char_class || this._input.peek() !== c) &&\n        !this._input.testChar(acorn.newline))) {\n      resulting_string += this._input.peek();\n      if (!esc) {\n        esc = this._input.peek() === '\\\\';\n        if (this._input.peek() === '[') {\n          in_char_class = true;\n        } else if (this._input.peek() === ']') {\n          in_char_class = false;\n        }\n      } else {\n        esc = false;\n      }\n      this._input.next();\n    }\n\n    if (this._input.peek() === c) {\n      resulting_string += this._input.next();\n\n      // regexps may have modifiers /regexp/MOD , so fetch those, too\n      // Only [gim] are valid, but if the user puts in garbage, do what we can to take it.\n      resulting_string += this._input.read(acorn.identifier);\n    }\n    return this._create_token(TOKEN.STRING, resulting_string);\n  }\n  return null;\n};\n\nTokenizer.prototype._read_xml = function(c, previous_token) {\n\n  if (this._options.e4x && c === \"<\" && this._allow_regexp_or_xml(previous_token)) {\n    var xmlStr = '';\n    var match = this.__patterns.xml.read_match();\n    // handle e4x xml literals\n    //\n    if (match) {\n      // Trim root tag to attempt to\n      var rootTag = match[2].replace(/^{\\s+/, '{').replace(/\\s+}$/, '}');\n      var isCurlyRoot = rootTag.indexOf('{') === 0;\n      var depth = 0;\n      while (match) {\n        var isEndTag = !!match[1];\n        var tagName = match[2];\n        var isSingletonTag = (!!match[match.length - 1]) || (tagName.slice(0, 8) === \"![CDATA[\");\n        if (!isSingletonTag &&\n          (tagName === rootTag || (isCurlyRoot && tagName.replace(/^{\\s+/, '{').replace(/\\s+}$/, '}')))) {\n          if (isEndTag) {\n            --depth;\n          } else {\n            ++depth;\n          }\n        }\n        xmlStr += match[0];\n        if (depth <= 0) {\n          break;\n        }\n        match = this.__patterns.xml.read_match();\n      }\n      // if we didn't close correctly, keep unformatted.\n      if (!match) {\n        xmlStr += this._input.match(/[\\s\\S]*/g)[0];\n      }\n      xmlStr = xmlStr.replace(acorn.allLineBreaks, '\\n');\n      return this._create_token(TOKEN.STRING, xmlStr);\n    }\n  }\n\n  return null;\n};\n\nfunction unescape_string(s) {\n  // You think that a regex would work for this\n  // return s.replace(/\\\\x([0-9a-f]{2})/gi, function(match, val) {\n  //         return String.fromCharCode(parseInt(val, 16));\n  //     })\n  // However, dealing with '\\xff', '\\\\xff', '\\\\\\xff' makes this more fun.\n  var out = '',\n    escaped = 0;\n\n  var input_scan = new InputScanner(s);\n  var matched = null;\n\n  while (input_scan.hasNext()) {\n    // Keep any whitespace, non-slash characters\n    // also keep slash pairs.\n    matched = input_scan.match(/([\\s]|[^\\\\]|\\\\\\\\)+/g);\n\n    if (matched) {\n      out += matched[0];\n    }\n\n    if (input_scan.peek() === '\\\\') {\n      input_scan.next();\n      if (input_scan.peek() === 'x') {\n        matched = input_scan.match(/x([0-9A-Fa-f]{2})/g);\n      } else if (input_scan.peek() === 'u') {\n        matched = input_scan.match(/u([0-9A-Fa-f]{4})/g);\n      } else {\n        out += '\\\\';\n        if (input_scan.hasNext()) {\n          out += input_scan.next();\n        }\n        continue;\n      }\n\n      // If there's some error decoding, return the original string\n      if (!matched) {\n        return s;\n      }\n\n      escaped = parseInt(matched[1], 16);\n\n      if (escaped > 0x7e && escaped <= 0xff && matched[0].indexOf('x') === 0) {\n        // we bail out on \\x7f..\\xff,\n        // leaving whole string escaped,\n        // as it's probably completely binary\n        return s;\n      } else if (escaped >= 0x00 && escaped < 0x20) {\n        // leave 0x00...0x1f escaped\n        out += '\\\\' + matched[0];\n        continue;\n      } else if (escaped === 0x22 || escaped === 0x27 || escaped === 0x5c) {\n        // single-quote, apostrophe, backslash - escape these\n        out += '\\\\' + String.fromCharCode(escaped);\n      } else {\n        out += String.fromCharCode(escaped);\n      }\n    }\n  }\n\n  return out;\n}\n\n// handle string\n//\nTokenizer.prototype._read_string_recursive = function(delimiter, allow_unescaped_newlines, start_sub) {\n  var current_char;\n  var pattern;\n  if (delimiter === '\\'') {\n    pattern = this.__patterns.single_quote;\n  } else if (delimiter === '\"') {\n    pattern = this.__patterns.double_quote;\n  } else if (delimiter === '`') {\n    pattern = this.__patterns.template_text;\n  } else if (delimiter === '}') {\n    pattern = this.__patterns.template_expression;\n  }\n\n  var resulting_string = pattern.read();\n  var next = '';\n  while (this._input.hasNext()) {\n    next = this._input.next();\n    if (next === delimiter ||\n      (!allow_unescaped_newlines && acorn.newline.test(next))) {\n      this._input.back();\n      break;\n    } else if (next === '\\\\' && this._input.hasNext()) {\n      current_char = this._input.peek();\n\n      if (current_char === 'x' || current_char === 'u') {\n        this.has_char_escapes = true;\n      } else if (current_char === '\\r' && this._input.peek(1) === '\\n') {\n        this._input.next();\n      }\n      next += this._input.next();\n    } else if (start_sub) {\n      if (start_sub === '${' && next === '$' && this._input.peek() === '{') {\n        next += this._input.next();\n      }\n\n      if (start_sub === next) {\n        if (delimiter === '`') {\n          next += this._read_string_recursive('}', allow_unescaped_newlines, '`');\n        } else {\n          next += this._read_string_recursive('`', allow_unescaped_newlines, '${');\n        }\n        if (this._input.hasNext()) {\n          next += this._input.next();\n        }\n      }\n    }\n    next += pattern.read();\n    resulting_string += next;\n  }\n\n  return resulting_string;\n};\n\nmodule.exports.Tokenizer = Tokenizer;\nmodule.exports.TOKEN = TOKEN;\nmodule.exports.positionable_operators = positionable_operators.slice();\nmodule.exports.line_starters = line_starters.slice();\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar regexp_has_sticky = RegExp.prototype.hasOwnProperty('sticky');\n\nfunction InputScanner(input_string) {\n  this.__input = input_string || '';\n  this.__input_length = this.__input.length;\n  this.__position = 0;\n}\n\nInputScanner.prototype.restart = function() {\n  this.__position = 0;\n};\n\nInputScanner.prototype.back = function() {\n  if (this.__position > 0) {\n    this.__position -= 1;\n  }\n};\n\nInputScanner.prototype.hasNext = function() {\n  return this.__position < this.__input_length;\n};\n\nInputScanner.prototype.next = function() {\n  var val = null;\n  if (this.hasNext()) {\n    val = this.__input.charAt(this.__position);\n    this.__position += 1;\n  }\n  return val;\n};\n\nInputScanner.prototype.peek = function(index) {\n  var val = null;\n  index = index || 0;\n  index += this.__position;\n  if (index >= 0 && index < this.__input_length) {\n    val = this.__input.charAt(index);\n  }\n  return val;\n};\n\n// This is a JavaScript only helper function (not in python)\n// Javascript doesn't have a match method\n// and not all implementation support \"sticky\" flag.\n// If they do not support sticky then both this.match() and this.test() method\n// must get the match and check the index of the match.\n// If sticky is supported and set, this method will use it.\n// Otherwise it will check that global is set, and fall back to the slower method.\nInputScanner.prototype.__match = function(pattern, index) {\n  pattern.lastIndex = index;\n  var pattern_match = pattern.exec(this.__input);\n\n  if (pattern_match && !(regexp_has_sticky && pattern.sticky)) {\n    if (pattern_match.index !== index) {\n      pattern_match = null;\n    }\n  }\n\n  return pattern_match;\n};\n\nInputScanner.prototype.test = function(pattern, index) {\n  index = index || 0;\n  index += this.__position;\n\n  if (index >= 0 && index < this.__input_length) {\n    return !!this.__match(pattern, index);\n  } else {\n    return false;\n  }\n};\n\nInputScanner.prototype.testChar = function(pattern, index) {\n  // test one character regex match\n  var val = this.peek(index);\n  pattern.lastIndex = 0;\n  return val !== null && pattern.test(val);\n};\n\nInputScanner.prototype.match = function(pattern) {\n  var pattern_match = this.__match(pattern, this.__position);\n  if (pattern_match) {\n    this.__position += pattern_match[0].length;\n  } else {\n    pattern_match = null;\n  }\n  return pattern_match;\n};\n\nInputScanner.prototype.read = function(starting_pattern, until_pattern, until_after) {\n  var val = '';\n  var match;\n  if (starting_pattern) {\n    match = this.match(starting_pattern);\n    if (match) {\n      val += match[0];\n    }\n  }\n  if (until_pattern && (match || !starting_pattern)) {\n    val += this.readUntil(until_pattern, until_after);\n  }\n  return val;\n};\n\nInputScanner.prototype.readUntil = function(pattern, until_after) {\n  var val = '';\n  var match_index = this.__position;\n  pattern.lastIndex = this.__position;\n  var pattern_match = pattern.exec(this.__input);\n  if (pattern_match) {\n    match_index = pattern_match.index;\n    if (until_after) {\n      match_index += pattern_match[0].length;\n    }\n  } else {\n    match_index = this.__input_length;\n  }\n\n  val = this.__input.substring(this.__position, match_index);\n  this.__position = match_index;\n  return val;\n};\n\nInputScanner.prototype.readUntilAfter = function(pattern) {\n  return this.readUntil(pattern, true);\n};\n\nInputScanner.prototype.get_regexp = function(pattern, match_from) {\n  var result = null;\n  var flags = 'g';\n  if (match_from && regexp_has_sticky) {\n    flags = 'y';\n  }\n  // strings are converted to regexp\n  if (typeof pattern === \"string\" && pattern !== '') {\n    // result = new RegExp(pattern.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), flags);\n    result = new RegExp(pattern, flags);\n  } else if (pattern) {\n    result = new RegExp(pattern.source, flags);\n  }\n  return result;\n};\n\nInputScanner.prototype.get_literal_regexp = function(literal_string) {\n  return RegExp(literal_string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'));\n};\n\n/* css beautifier legacy helpers */\nInputScanner.prototype.peekUntilAfter = function(pattern) {\n  var start = this.__position;\n  var val = this.readUntilAfter(pattern);\n  this.__position = start;\n  return val;\n};\n\nInputScanner.prototype.lookBack = function(testVal) {\n  var start = this.__position - 1;\n  return start >= testVal.length && this.__input.substring(start - testVal.length, start)\n    .toLowerCase() === testVal;\n};\n\nmodule.exports.InputScanner = InputScanner;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar InputScanner = __webpack_require__(8).InputScanner;\nvar Token = __webpack_require__(3).Token;\nvar TokenStream = __webpack_require__(10).TokenStream;\nvar WhitespacePattern = __webpack_require__(11).WhitespacePattern;\n\nvar TOKEN = {\n  START: 'TK_START',\n  RAW: 'TK_RAW',\n  EOF: 'TK_EOF'\n};\n\nvar Tokenizer = function(input_string, options) {\n  this._input = new InputScanner(input_string);\n  this._options = options || {};\n  this.__tokens = null;\n\n  this._patterns = {};\n  this._patterns.whitespace = new WhitespacePattern(this._input);\n};\n\nTokenizer.prototype.tokenize = function() {\n  this._input.restart();\n  this.__tokens = new TokenStream();\n\n  this._reset();\n\n  var current;\n  var previous = new Token(TOKEN.START, '');\n  var open_token = null;\n  var open_stack = [];\n  var comments = new TokenStream();\n\n  while (previous.type !== TOKEN.EOF) {\n    current = this._get_next_token(previous, open_token);\n    while (this._is_comment(current)) {\n      comments.add(current);\n      current = this._get_next_token(previous, open_token);\n    }\n\n    if (!comments.isEmpty()) {\n      current.comments_before = comments;\n      comments = new TokenStream();\n    }\n\n    current.parent = open_token;\n\n    if (this._is_opening(current)) {\n      open_stack.push(open_token);\n      open_token = current;\n    } else if (open_token && this._is_closing(current, open_token)) {\n      current.opened = open_token;\n      open_token.closed = current;\n      open_token = open_stack.pop();\n      current.parent = open_token;\n    }\n\n    current.previous = previous;\n    previous.next = current;\n\n    this.__tokens.add(current);\n    previous = current;\n  }\n\n  return this.__tokens;\n};\n\n\nTokenizer.prototype._is_first_token = function() {\n  return this.__tokens.isEmpty();\n};\n\nTokenizer.prototype._reset = function() {};\n\nTokenizer.prototype._get_next_token = function(previous_token, open_token) { // jshint unused:false\n  this._readWhitespace();\n  var resulting_string = this._input.read(/.+/g);\n  if (resulting_string) {\n    return this._create_token(TOKEN.RAW, resulting_string);\n  } else {\n    return this._create_token(TOKEN.EOF, '');\n  }\n};\n\nTokenizer.prototype._is_comment = function(current_token) { // jshint unused:false\n  return false;\n};\n\nTokenizer.prototype._is_opening = function(current_token) { // jshint unused:false\n  return false;\n};\n\nTokenizer.prototype._is_closing = function(current_token, open_token) { // jshint unused:false\n  return false;\n};\n\nTokenizer.prototype._create_token = function(type, text) {\n  var token = new Token(type, text,\n    this._patterns.whitespace.newline_count,\n    this._patterns.whitespace.whitespace_before_token);\n  return token;\n};\n\nTokenizer.prototype._readWhitespace = function() {\n  return this._patterns.whitespace.read();\n};\n\n\n\nmodule.exports.Tokenizer = Tokenizer;\nmodule.exports.TOKEN = TOKEN;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction TokenStream(parent_token) {\n  // private\n  this.__tokens = [];\n  this.__tokens_length = this.__tokens.length;\n  this.__position = 0;\n  this.__parent_token = parent_token;\n}\n\nTokenStream.prototype.restart = function() {\n  this.__position = 0;\n};\n\nTokenStream.prototype.isEmpty = function() {\n  return this.__tokens_length === 0;\n};\n\nTokenStream.prototype.hasNext = function() {\n  return this.__position < this.__tokens_length;\n};\n\nTokenStream.prototype.next = function() {\n  var val = null;\n  if (this.hasNext()) {\n    val = this.__tokens[this.__position];\n    this.__position += 1;\n  }\n  return val;\n};\n\nTokenStream.prototype.peek = function(index) {\n  var val = null;\n  index = index || 0;\n  index += this.__position;\n  if (index >= 0 && index < this.__tokens_length) {\n    val = this.__tokens[index];\n  }\n  return val;\n};\n\nTokenStream.prototype.add = function(token) {\n  if (this.__parent_token) {\n    token.parent = this.__parent_token;\n  }\n  this.__tokens.push(token);\n  this.__tokens_length += 1;\n};\n\nmodule.exports.TokenStream = TokenStream;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Pattern = __webpack_require__(12).Pattern;\n\nfunction WhitespacePattern(input_scanner, parent) {\n  Pattern.call(this, input_scanner, parent);\n  if (parent) {\n    this._line_regexp = this._input.get_regexp(parent._line_regexp);\n  } else {\n    this.__set_whitespace_patterns('', '');\n  }\n\n  this.newline_count = 0;\n  this.whitespace_before_token = '';\n}\nWhitespacePattern.prototype = new Pattern();\n\nWhitespacePattern.prototype.__set_whitespace_patterns = function(whitespace_chars, newline_chars) {\n  whitespace_chars += '\\\\t ';\n  newline_chars += '\\\\n\\\\r';\n\n  this._match_pattern = this._input.get_regexp(\n    '[' + whitespace_chars + newline_chars + ']+', true);\n  this._newline_regexp = this._input.get_regexp(\n    '\\\\r\\\\n|[' + newline_chars + ']');\n};\n\nWhitespacePattern.prototype.read = function() {\n  this.newline_count = 0;\n  this.whitespace_before_token = '';\n\n  var resulting_string = this._input.read(this._match_pattern);\n  if (resulting_string === ' ') {\n    this.whitespace_before_token = ' ';\n  } else if (resulting_string) {\n    var matches = this.__split(this._newline_regexp, resulting_string);\n    this.newline_count = matches.length - 1;\n    this.whitespace_before_token = matches[this.newline_count];\n  }\n\n  return resulting_string;\n};\n\nWhitespacePattern.prototype.matching = function(whitespace_chars, newline_chars) {\n  var result = this._create();\n  result.__set_whitespace_patterns(whitespace_chars, newline_chars);\n  result._update();\n  return result;\n};\n\nWhitespacePattern.prototype._create = function() {\n  return new WhitespacePattern(this._input, this);\n};\n\nWhitespacePattern.prototype.__split = function(regexp, input_string) {\n  regexp.lastIndex = 0;\n  var start_index = 0;\n  var result = [];\n  var next_match = regexp.exec(input_string);\n  while (next_match) {\n    result.push(input_string.substring(start_index, next_match.index));\n    start_index = next_match.index + next_match[0].length;\n    next_match = regexp.exec(input_string);\n  }\n\n  if (start_index < input_string.length) {\n    result.push(input_string.substring(start_index, input_string.length));\n  } else {\n    result.push('');\n  }\n\n  return result;\n};\n\n\n\nmodule.exports.WhitespacePattern = WhitespacePattern;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Pattern(input_scanner, parent) {\n  this._input = input_scanner;\n  this._starting_pattern = null;\n  this._match_pattern = null;\n  this._until_pattern = null;\n  this._until_after = false;\n\n  if (parent) {\n    this._starting_pattern = this._input.get_regexp(parent._starting_pattern, true);\n    this._match_pattern = this._input.get_regexp(parent._match_pattern, true);\n    this._until_pattern = this._input.get_regexp(parent._until_pattern);\n    this._until_after = parent._until_after;\n  }\n}\n\nPattern.prototype.read = function() {\n  var result = this._input.read(this._starting_pattern);\n  if (!this._starting_pattern || result) {\n    result += this._input.read(this._match_pattern, this._until_pattern, this._until_after);\n  }\n  return result;\n};\n\nPattern.prototype.read_match = function() {\n  return this._input.match(this._match_pattern);\n};\n\nPattern.prototype.until_after = function(pattern) {\n  var result = this._create();\n  result._until_after = true;\n  result._until_pattern = this._input.get_regexp(pattern);\n  result._update();\n  return result;\n};\n\nPattern.prototype.until = function(pattern) {\n  var result = this._create();\n  result._until_after = false;\n  result._until_pattern = this._input.get_regexp(pattern);\n  result._update();\n  return result;\n};\n\nPattern.prototype.starting_with = function(pattern) {\n  var result = this._create();\n  result._starting_pattern = this._input.get_regexp(pattern, true);\n  result._update();\n  return result;\n};\n\nPattern.prototype.matching = function(pattern) {\n  var result = this._create();\n  result._match_pattern = this._input.get_regexp(pattern, true);\n  result._update();\n  return result;\n};\n\nPattern.prototype._create = function() {\n  return new Pattern(this._input, this);\n};\n\nPattern.prototype._update = function() {};\n\nmodule.exports.Pattern = Pattern;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Directives(start_block_pattern, end_block_pattern) {\n  start_block_pattern = typeof start_block_pattern === 'string' ? start_block_pattern : start_block_pattern.source;\n  end_block_pattern = typeof end_block_pattern === 'string' ? end_block_pattern : end_block_pattern.source;\n  this.__directives_block_pattern = new RegExp(start_block_pattern + / beautify( \\w+[:]\\w+)+ /.source + end_block_pattern, 'g');\n  this.__directive_pattern = / (\\w+)[:](\\w+)/g;\n\n  this.__directives_end_ignore_pattern = new RegExp(start_block_pattern + /\\sbeautify\\signore:end\\s/.source + end_block_pattern, 'g');\n}\n\nDirectives.prototype.get_directives = function(text) {\n  if (!text.match(this.__directives_block_pattern)) {\n    return null;\n  }\n\n  var directives = {};\n  this.__directive_pattern.lastIndex = 0;\n  var directive_match = this.__directive_pattern.exec(text);\n\n  while (directive_match) {\n    directives[directive_match[1]] = directive_match[2];\n    directive_match = this.__directive_pattern.exec(text);\n  }\n\n  return directives;\n};\n\nDirectives.prototype.readIgnored = function(input) {\n  return input.readUntilAfter(this.__directives_end_ignore_pattern);\n};\n\n\nmodule.exports.Directives = Directives;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Pattern = __webpack_require__(12).Pattern;\n\n\nvar template_names = {\n  django: false,\n  erb: false,\n  handlebars: false,\n  php: false\n};\n\n// This lets templates appear anywhere we would do a readUntil\n// The cost is higher but it is pay to play.\nfunction TemplatablePattern(input_scanner, parent) {\n  Pattern.call(this, input_scanner, parent);\n  this.__template_pattern = null;\n  this._disabled = Object.assign({}, template_names);\n  this._excluded = Object.assign({}, template_names);\n\n  if (parent) {\n    this.__template_pattern = this._input.get_regexp(parent.__template_pattern);\n    this._excluded = Object.assign(this._excluded, parent._excluded);\n    this._disabled = Object.assign(this._disabled, parent._disabled);\n  }\n  var pattern = new Pattern(input_scanner);\n  this.__patterns = {\n    handlebars_comment: pattern.starting_with(/{{!--/).until_after(/--}}/),\n    handlebars_unescaped: pattern.starting_with(/{{{/).until_after(/}}}/),\n    handlebars: pattern.starting_with(/{{/).until_after(/}}/),\n    php: pattern.starting_with(/<\\?(?:[=]|php)/).until_after(/\\?>/),\n    erb: pattern.starting_with(/<%[^%]/).until_after(/[^%]%>/),\n    // django coflicts with handlebars a bit.\n    django: pattern.starting_with(/{%/).until_after(/%}/),\n    django_value: pattern.starting_with(/{{/).until_after(/}}/),\n    django_comment: pattern.starting_with(/{#/).until_after(/#}/)\n  };\n}\nTemplatablePattern.prototype = new Pattern();\n\nTemplatablePattern.prototype._create = function() {\n  return new TemplatablePattern(this._input, this);\n};\n\nTemplatablePattern.prototype._update = function() {\n  this.__set_templated_pattern();\n};\n\nTemplatablePattern.prototype.disable = function(language) {\n  var result = this._create();\n  result._disabled[language] = true;\n  result._update();\n  return result;\n};\n\nTemplatablePattern.prototype.read_options = function(options) {\n  var result = this._create();\n  for (var language in template_names) {\n    result._disabled[language] = options.templating.indexOf(language) === -1;\n  }\n  result._update();\n  return result;\n};\n\nTemplatablePattern.prototype.exclude = function(language) {\n  var result = this._create();\n  result._excluded[language] = true;\n  result._update();\n  return result;\n};\n\nTemplatablePattern.prototype.read = function() {\n  var result = '';\n  if (this._match_pattern) {\n    result = this._input.read(this._starting_pattern);\n  } else {\n    result = this._input.read(this._starting_pattern, this.__template_pattern);\n  }\n  var next = this._read_template();\n  while (next) {\n    if (this._match_pattern) {\n      next += this._input.read(this._match_pattern);\n    } else {\n      next += this._input.readUntil(this.__template_pattern);\n    }\n    result += next;\n    next = this._read_template();\n  }\n\n  if (this._until_after) {\n    result += this._input.readUntilAfter(this._until_pattern);\n  }\n  return result;\n};\n\nTemplatablePattern.prototype.__set_templated_pattern = function() {\n  var items = [];\n\n  if (!this._disabled.php) {\n    items.push(this.__patterns.php._starting_pattern.source);\n  }\n  if (!this._disabled.handlebars) {\n    items.push(this.__patterns.handlebars._starting_pattern.source);\n  }\n  if (!this._disabled.erb) {\n    items.push(this.__patterns.erb._starting_pattern.source);\n  }\n  if (!this._disabled.django) {\n    items.push(this.__patterns.django._starting_pattern.source);\n    items.push(this.__patterns.django_value._starting_pattern.source);\n    items.push(this.__patterns.django_comment._starting_pattern.source);\n  }\n\n  if (this._until_pattern) {\n    items.push(this._until_pattern.source);\n  }\n  this.__template_pattern = this._input.get_regexp('(?:' + items.join('|') + ')');\n};\n\nTemplatablePattern.prototype._read_template = function() {\n  var resulting_string = '';\n  var c = this._input.peek();\n  if (c === '<') {\n    var peek1 = this._input.peek(1);\n    //if we're in a comment, do something special\n    // We treat all comments as literals, even more than preformatted tags\n    // we just look for the appropriate close tag\n    if (!this._disabled.php && !this._excluded.php && peek1 === '?') {\n      resulting_string = resulting_string ||\n        this.__patterns.php.read();\n    }\n    if (!this._disabled.erb && !this._excluded.erb && peek1 === '%') {\n      resulting_string = resulting_string ||\n        this.__patterns.erb.read();\n    }\n  } else if (c === '{') {\n    if (!this._disabled.handlebars && !this._excluded.handlebars) {\n      resulting_string = resulting_string ||\n        this.__patterns.handlebars_comment.read();\n      resulting_string = resulting_string ||\n        this.__patterns.handlebars_unescaped.read();\n      resulting_string = resulting_string ||\n        this.__patterns.handlebars.read();\n    }\n    if (!this._disabled.django) {\n      // django coflicts with handlebars a bit.\n      if (!this._excluded.django && !this._excluded.handlebars) {\n        resulting_string = resulting_string ||\n          this.__patterns.django_value.read();\n      }\n      if (!this._excluded.django) {\n        resulting_string = resulting_string ||\n          this.__patterns.django_comment.read();\n        resulting_string = resulting_string ||\n          this.__patterns.django.read();\n      }\n    }\n  }\n  return resulting_string;\n};\n\n\nmodule.exports.TemplatablePattern = TemplatablePattern;\n\n\n/***/ })\n/******/ ]);\nvar js_beautify = legacy_beautify_js;\n/* Footer */\nif (typeof define === \"function\" && define.amd) {\n    // Add support for AMD ( https://github.com/amdjs/amdjs-api/wiki/AMD#defineamd-property- )\n    define([], function() {\n        return { js_beautify: js_beautify };\n    });\n} else if (typeof exports !== \"undefined\") {\n    // Add support for CommonJS. Just put this file somewhere on your require.paths\n    // and you will be able to `var js_beautify = require(\"beautify\").js_beautify`.\n    exports.js_beautify = js_beautify;\n} else if (typeof window !== \"undefined\") {\n    // If we're running a web page and don't have either of the above, add our one global\n    window.js_beautify = js_beautify;\n} else if (typeof global !== \"undefined\") {\n    // If we don't even have window, try global.\n    global.js_beautify = js_beautify;\n}\n\n}());\n\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/assets/vendor/beautify@1.13.0/beautify.js-css.js",
    "content": "/* AUTO-GENERATED. DO NOT MODIFY. */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n\n\n CSS Beautifier\n---------------\n\n    Written by Harutyun Amirjanyan, (amirjanyan@gmail.com)\n\n    Based on code initially developed by: Einar Lielmanis, <einar@beautifier.io>\n        https://beautifier.io/\n\n    Usage:\n        css_beautify(source_text);\n        css_beautify(source_text, options);\n\n    The options are (default in brackets):\n        indent_size (4)                         — indentation size,\n        indent_char (space)                     — character to indent with,\n        selector_separator_newline (true)       - separate selectors with newline or\n                                                  not (e.g. \"a,\\nbr\" or \"a, br\")\n        end_with_newline (false)                - end with a newline\n        newline_between_rules (true)            - add a new line after every css rule\n        space_around_selector_separator (false) - ensure space around selector separators:\n                                                  '>', '+', '~' (e.g. \"a>b\" -> \"a > b\")\n    e.g\n\n    css_beautify(css_source_text, {\n      'indent_size': 1,\n      'indent_char': '\\t',\n      'selector_separator': ' ',\n      'end_with_newline': false,\n      'newline_between_rules': true,\n      'space_around_selector_separator': true\n    });\n*/\n\n// http://www.w3.org/TR/CSS21/syndata.html#tokenization\n// http://www.w3.org/TR/css3-syntax/\n\n(function() {\n\n/* GENERATED_BUILD_OUTPUT */\nvar legacy_beautify_css =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 15);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */,\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction OutputLine(parent) {\n  this.__parent = parent;\n  this.__character_count = 0;\n  // use indent_count as a marker for this.__lines that have preserved indentation\n  this.__indent_count = -1;\n  this.__alignment_count = 0;\n  this.__wrap_point_index = 0;\n  this.__wrap_point_character_count = 0;\n  this.__wrap_point_indent_count = -1;\n  this.__wrap_point_alignment_count = 0;\n\n  this.__items = [];\n}\n\nOutputLine.prototype.clone_empty = function() {\n  var line = new OutputLine(this.__parent);\n  line.set_indent(this.__indent_count, this.__alignment_count);\n  return line;\n};\n\nOutputLine.prototype.item = function(index) {\n  if (index < 0) {\n    return this.__items[this.__items.length + index];\n  } else {\n    return this.__items[index];\n  }\n};\n\nOutputLine.prototype.has_match = function(pattern) {\n  for (var lastCheckedOutput = this.__items.length - 1; lastCheckedOutput >= 0; lastCheckedOutput--) {\n    if (this.__items[lastCheckedOutput].match(pattern)) {\n      return true;\n    }\n  }\n  return false;\n};\n\nOutputLine.prototype.set_indent = function(indent, alignment) {\n  if (this.is_empty()) {\n    this.__indent_count = indent || 0;\n    this.__alignment_count = alignment || 0;\n    this.__character_count = this.__parent.get_indent_size(this.__indent_count, this.__alignment_count);\n  }\n};\n\nOutputLine.prototype._set_wrap_point = function() {\n  if (this.__parent.wrap_line_length) {\n    this.__wrap_point_index = this.__items.length;\n    this.__wrap_point_character_count = this.__character_count;\n    this.__wrap_point_indent_count = this.__parent.next_line.__indent_count;\n    this.__wrap_point_alignment_count = this.__parent.next_line.__alignment_count;\n  }\n};\n\nOutputLine.prototype._should_wrap = function() {\n  return this.__wrap_point_index &&\n    this.__character_count > this.__parent.wrap_line_length &&\n    this.__wrap_point_character_count > this.__parent.next_line.__character_count;\n};\n\nOutputLine.prototype._allow_wrap = function() {\n  if (this._should_wrap()) {\n    this.__parent.add_new_line();\n    var next = this.__parent.current_line;\n    next.set_indent(this.__wrap_point_indent_count, this.__wrap_point_alignment_count);\n    next.__items = this.__items.slice(this.__wrap_point_index);\n    this.__items = this.__items.slice(0, this.__wrap_point_index);\n\n    next.__character_count += this.__character_count - this.__wrap_point_character_count;\n    this.__character_count = this.__wrap_point_character_count;\n\n    if (next.__items[0] === \" \") {\n      next.__items.splice(0, 1);\n      next.__character_count -= 1;\n    }\n    return true;\n  }\n  return false;\n};\n\nOutputLine.prototype.is_empty = function() {\n  return this.__items.length === 0;\n};\n\nOutputLine.prototype.last = function() {\n  if (!this.is_empty()) {\n    return this.__items[this.__items.length - 1];\n  } else {\n    return null;\n  }\n};\n\nOutputLine.prototype.push = function(item) {\n  this.__items.push(item);\n  var last_newline_index = item.lastIndexOf('\\n');\n  if (last_newline_index !== -1) {\n    this.__character_count = item.length - last_newline_index;\n  } else {\n    this.__character_count += item.length;\n  }\n};\n\nOutputLine.prototype.pop = function() {\n  var item = null;\n  if (!this.is_empty()) {\n    item = this.__items.pop();\n    this.__character_count -= item.length;\n  }\n  return item;\n};\n\n\nOutputLine.prototype._remove_indent = function() {\n  if (this.__indent_count > 0) {\n    this.__indent_count -= 1;\n    this.__character_count -= this.__parent.indent_size;\n  }\n};\n\nOutputLine.prototype._remove_wrap_indent = function() {\n  if (this.__wrap_point_indent_count > 0) {\n    this.__wrap_point_indent_count -= 1;\n  }\n};\nOutputLine.prototype.trim = function() {\n  while (this.last() === ' ') {\n    this.__items.pop();\n    this.__character_count -= 1;\n  }\n};\n\nOutputLine.prototype.toString = function() {\n  var result = '';\n  if (this.is_empty()) {\n    if (this.__parent.indent_empty_lines) {\n      result = this.__parent.get_indent_string(this.__indent_count);\n    }\n  } else {\n    result = this.__parent.get_indent_string(this.__indent_count, this.__alignment_count);\n    result += this.__items.join('');\n  }\n  return result;\n};\n\nfunction IndentStringCache(options, baseIndentString) {\n  this.__cache = [''];\n  this.__indent_size = options.indent_size;\n  this.__indent_string = options.indent_char;\n  if (!options.indent_with_tabs) {\n    this.__indent_string = new Array(options.indent_size + 1).join(options.indent_char);\n  }\n\n  // Set to null to continue support for auto detection of base indent\n  baseIndentString = baseIndentString || '';\n  if (options.indent_level > 0) {\n    baseIndentString = new Array(options.indent_level + 1).join(this.__indent_string);\n  }\n\n  this.__base_string = baseIndentString;\n  this.__base_string_length = baseIndentString.length;\n}\n\nIndentStringCache.prototype.get_indent_size = function(indent, column) {\n  var result = this.__base_string_length;\n  column = column || 0;\n  if (indent < 0) {\n    result = 0;\n  }\n  result += indent * this.__indent_size;\n  result += column;\n  return result;\n};\n\nIndentStringCache.prototype.get_indent_string = function(indent_level, column) {\n  var result = this.__base_string;\n  column = column || 0;\n  if (indent_level < 0) {\n    indent_level = 0;\n    result = '';\n  }\n  column += indent_level * this.__indent_size;\n  this.__ensure_cache(column);\n  result += this.__cache[column];\n  return result;\n};\n\nIndentStringCache.prototype.__ensure_cache = function(column) {\n  while (column >= this.__cache.length) {\n    this.__add_column();\n  }\n};\n\nIndentStringCache.prototype.__add_column = function() {\n  var column = this.__cache.length;\n  var indent = 0;\n  var result = '';\n  if (this.__indent_size && column >= this.__indent_size) {\n    indent = Math.floor(column / this.__indent_size);\n    column -= indent * this.__indent_size;\n    result = new Array(indent + 1).join(this.__indent_string);\n  }\n  if (column) {\n    result += new Array(column + 1).join(' ');\n  }\n\n  this.__cache.push(result);\n};\n\nfunction Output(options, baseIndentString) {\n  this.__indent_cache = new IndentStringCache(options, baseIndentString);\n  this.raw = false;\n  this._end_with_newline = options.end_with_newline;\n  this.indent_size = options.indent_size;\n  this.wrap_line_length = options.wrap_line_length;\n  this.indent_empty_lines = options.indent_empty_lines;\n  this.__lines = [];\n  this.previous_line = null;\n  this.current_line = null;\n  this.next_line = new OutputLine(this);\n  this.space_before_token = false;\n  this.non_breaking_space = false;\n  this.previous_token_wrapped = false;\n  // initialize\n  this.__add_outputline();\n}\n\nOutput.prototype.__add_outputline = function() {\n  this.previous_line = this.current_line;\n  this.current_line = this.next_line.clone_empty();\n  this.__lines.push(this.current_line);\n};\n\nOutput.prototype.get_line_number = function() {\n  return this.__lines.length;\n};\n\nOutput.prototype.get_indent_string = function(indent, column) {\n  return this.__indent_cache.get_indent_string(indent, column);\n};\n\nOutput.prototype.get_indent_size = function(indent, column) {\n  return this.__indent_cache.get_indent_size(indent, column);\n};\n\nOutput.prototype.is_empty = function() {\n  return !this.previous_line && this.current_line.is_empty();\n};\n\nOutput.prototype.add_new_line = function(force_newline) {\n  // never newline at the start of file\n  // otherwise, newline only if we didn't just add one or we're forced\n  if (this.is_empty() ||\n    (!force_newline && this.just_added_newline())) {\n    return false;\n  }\n\n  // if raw output is enabled, don't print additional newlines,\n  // but still return True as though you had\n  if (!this.raw) {\n    this.__add_outputline();\n  }\n  return true;\n};\n\nOutput.prototype.get_code = function(eol) {\n  this.trim(true);\n\n  // handle some edge cases where the last tokens\n  // has text that ends with newline(s)\n  var last_item = this.current_line.pop();\n  if (last_item) {\n    if (last_item[last_item.length - 1] === '\\n') {\n      last_item = last_item.replace(/\\n+$/g, '');\n    }\n    this.current_line.push(last_item);\n  }\n\n  if (this._end_with_newline) {\n    this.__add_outputline();\n  }\n\n  var sweet_code = this.__lines.join('\\n');\n\n  if (eol !== '\\n') {\n    sweet_code = sweet_code.replace(/[\\n]/g, eol);\n  }\n  return sweet_code;\n};\n\nOutput.prototype.set_wrap_point = function() {\n  this.current_line._set_wrap_point();\n};\n\nOutput.prototype.set_indent = function(indent, alignment) {\n  indent = indent || 0;\n  alignment = alignment || 0;\n\n  // Next line stores alignment values\n  this.next_line.set_indent(indent, alignment);\n\n  // Never indent your first output indent at the start of the file\n  if (this.__lines.length > 1) {\n    this.current_line.set_indent(indent, alignment);\n    return true;\n  }\n\n  this.current_line.set_indent();\n  return false;\n};\n\nOutput.prototype.add_raw_token = function(token) {\n  for (var x = 0; x < token.newlines; x++) {\n    this.__add_outputline();\n  }\n  this.current_line.set_indent(-1);\n  this.current_line.push(token.whitespace_before);\n  this.current_line.push(token.text);\n  this.space_before_token = false;\n  this.non_breaking_space = false;\n  this.previous_token_wrapped = false;\n};\n\nOutput.prototype.add_token = function(printable_token) {\n  this.__add_space_before_token();\n  this.current_line.push(printable_token);\n  this.space_before_token = false;\n  this.non_breaking_space = false;\n  this.previous_token_wrapped = this.current_line._allow_wrap();\n};\n\nOutput.prototype.__add_space_before_token = function() {\n  if (this.space_before_token && !this.just_added_newline()) {\n    if (!this.non_breaking_space) {\n      this.set_wrap_point();\n    }\n    this.current_line.push(' ');\n  }\n};\n\nOutput.prototype.remove_indent = function(index) {\n  var output_length = this.__lines.length;\n  while (index < output_length) {\n    this.__lines[index]._remove_indent();\n    index++;\n  }\n  this.current_line._remove_wrap_indent();\n};\n\nOutput.prototype.trim = function(eat_newlines) {\n  eat_newlines = (eat_newlines === undefined) ? false : eat_newlines;\n\n  this.current_line.trim();\n\n  while (eat_newlines && this.__lines.length > 1 &&\n    this.current_line.is_empty()) {\n    this.__lines.pop();\n    this.current_line = this.__lines[this.__lines.length - 1];\n    this.current_line.trim();\n  }\n\n  this.previous_line = this.__lines.length > 1 ?\n    this.__lines[this.__lines.length - 2] : null;\n};\n\nOutput.prototype.just_added_newline = function() {\n  return this.current_line.is_empty();\n};\n\nOutput.prototype.just_added_blankline = function() {\n  return this.is_empty() ||\n    (this.current_line.is_empty() && this.previous_line.is_empty());\n};\n\nOutput.prototype.ensure_empty_line_above = function(starts_with, ends_with) {\n  var index = this.__lines.length - 2;\n  while (index >= 0) {\n    var potentialEmptyLine = this.__lines[index];\n    if (potentialEmptyLine.is_empty()) {\n      break;\n    } else if (potentialEmptyLine.item(0).indexOf(starts_with) !== 0 &&\n      potentialEmptyLine.item(-1) !== ends_with) {\n      this.__lines.splice(index + 1, 0, new OutputLine(this));\n      this.previous_line = this.__lines[this.__lines.length - 2];\n      break;\n    }\n    index--;\n  }\n};\n\nmodule.exports.Output = Output;\n\n\n/***/ }),\n/* 3 */,\n/* 4 */,\n/* 5 */,\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Options(options, merge_child_field) {\n  this.raw_options = _mergeOpts(options, merge_child_field);\n\n  // Support passing the source text back with no change\n  this.disabled = this._get_boolean('disabled');\n\n  this.eol = this._get_characters('eol', 'auto');\n  this.end_with_newline = this._get_boolean('end_with_newline');\n  this.indent_size = this._get_number('indent_size', 4);\n  this.indent_char = this._get_characters('indent_char', ' ');\n  this.indent_level = this._get_number('indent_level');\n\n  this.preserve_newlines = this._get_boolean('preserve_newlines', true);\n  this.max_preserve_newlines = this._get_number('max_preserve_newlines', 32786);\n  if (!this.preserve_newlines) {\n    this.max_preserve_newlines = 0;\n  }\n\n  this.indent_with_tabs = this._get_boolean('indent_with_tabs', this.indent_char === '\\t');\n  if (this.indent_with_tabs) {\n    this.indent_char = '\\t';\n\n    // indent_size behavior changed after 1.8.6\n    // It used to be that indent_size would be\n    // set to 1 for indent_with_tabs. That is no longer needed and\n    // actually doesn't make sense - why not use spaces? Further,\n    // that might produce unexpected behavior - tabs being used\n    // for single-column alignment. So, when indent_with_tabs is true\n    // and indent_size is 1, reset indent_size to 4.\n    if (this.indent_size === 1) {\n      this.indent_size = 4;\n    }\n  }\n\n  // Backwards compat with 1.3.x\n  this.wrap_line_length = this._get_number('wrap_line_length', this._get_number('max_char'));\n\n  this.indent_empty_lines = this._get_boolean('indent_empty_lines');\n\n  // valid templating languages ['django', 'erb', 'handlebars', 'php']\n  // For now, 'auto' = all off for javascript, all on for html (and inline javascript).\n  // other values ignored\n  this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php'], ['auto']);\n}\n\nOptions.prototype._get_array = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  var result = default_value || [];\n  if (typeof option_value === 'object') {\n    if (option_value !== null && typeof option_value.concat === 'function') {\n      result = option_value.concat();\n    }\n  } else if (typeof option_value === 'string') {\n    result = option_value.split(/[^a-zA-Z0-9_\\/\\-]+/);\n  }\n  return result;\n};\n\nOptions.prototype._get_boolean = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  var result = option_value === undefined ? !!default_value : !!option_value;\n  return result;\n};\n\nOptions.prototype._get_characters = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  var result = default_value || '';\n  if (typeof option_value === 'string') {\n    result = option_value.replace(/\\\\r/, '\\r').replace(/\\\\n/, '\\n').replace(/\\\\t/, '\\t');\n  }\n  return result;\n};\n\nOptions.prototype._get_number = function(name, default_value) {\n  var option_value = this.raw_options[name];\n  default_value = parseInt(default_value, 10);\n  if (isNaN(default_value)) {\n    default_value = 0;\n  }\n  var result = parseInt(option_value, 10);\n  if (isNaN(result)) {\n    result = default_value;\n  }\n  return result;\n};\n\nOptions.prototype._get_selection = function(name, selection_list, default_value) {\n  var result = this._get_selection_list(name, selection_list, default_value);\n  if (result.length !== 1) {\n    throw new Error(\n      \"Invalid Option Value: The option '\" + name + \"' can only be one of the following values:\\n\" +\n      selection_list + \"\\nYou passed in: '\" + this.raw_options[name] + \"'\");\n  }\n\n  return result[0];\n};\n\n\nOptions.prototype._get_selection_list = function(name, selection_list, default_value) {\n  if (!selection_list || selection_list.length === 0) {\n    throw new Error(\"Selection list cannot be empty.\");\n  }\n\n  default_value = default_value || [selection_list[0]];\n  if (!this._is_valid_selection(default_value, selection_list)) {\n    throw new Error(\"Invalid Default Value!\");\n  }\n\n  var result = this._get_array(name, default_value);\n  if (!this._is_valid_selection(result, selection_list)) {\n    throw new Error(\n      \"Invalid Option Value: The option '\" + name + \"' can contain only the following values:\\n\" +\n      selection_list + \"\\nYou passed in: '\" + this.raw_options[name] + \"'\");\n  }\n\n  return result;\n};\n\nOptions.prototype._is_valid_selection = function(result, selection_list) {\n  return result.length && selection_list.length &&\n    !result.some(function(item) { return selection_list.indexOf(item) === -1; });\n};\n\n\n// merges child options up with the parent options object\n// Example: obj = {a: 1, b: {a: 2}}\n//          mergeOpts(obj, 'b')\n//\n//          Returns: {a: 2}\nfunction _mergeOpts(allOptions, childFieldName) {\n  var finalOpts = {};\n  allOptions = _normalizeOpts(allOptions);\n  var name;\n\n  for (name in allOptions) {\n    if (name !== childFieldName) {\n      finalOpts[name] = allOptions[name];\n    }\n  }\n\n  //merge in the per type settings for the childFieldName\n  if (childFieldName && allOptions[childFieldName]) {\n    for (name in allOptions[childFieldName]) {\n      finalOpts[name] = allOptions[childFieldName][name];\n    }\n  }\n  return finalOpts;\n}\n\nfunction _normalizeOpts(options) {\n  var convertedOpts = {};\n  var key;\n\n  for (key in options) {\n    var newKey = key.replace(/-/g, \"_\");\n    convertedOpts[newKey] = options[key];\n  }\n  return convertedOpts;\n}\n\nmodule.exports.Options = Options;\nmodule.exports.normalizeOpts = _normalizeOpts;\nmodule.exports.mergeOpts = _mergeOpts;\n\n\n/***/ }),\n/* 7 */,\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar regexp_has_sticky = RegExp.prototype.hasOwnProperty('sticky');\n\nfunction InputScanner(input_string) {\n  this.__input = input_string || '';\n  this.__input_length = this.__input.length;\n  this.__position = 0;\n}\n\nInputScanner.prototype.restart = function() {\n  this.__position = 0;\n};\n\nInputScanner.prototype.back = function() {\n  if (this.__position > 0) {\n    this.__position -= 1;\n  }\n};\n\nInputScanner.prototype.hasNext = function() {\n  return this.__position < this.__input_length;\n};\n\nInputScanner.prototype.next = function() {\n  var val = null;\n  if (this.hasNext()) {\n    val = this.__input.charAt(this.__position);\n    this.__position += 1;\n  }\n  return val;\n};\n\nInputScanner.prototype.peek = function(index) {\n  var val = null;\n  index = index || 0;\n  index += this.__position;\n  if (index >= 0 && index < this.__input_length) {\n    val = this.__input.charAt(index);\n  }\n  return val;\n};\n\n// This is a JavaScript only helper function (not in python)\n// Javascript doesn't have a match method\n// and not all implementation support \"sticky\" flag.\n// If they do not support sticky then both this.match() and this.test() method\n// must get the match and check the index of the match.\n// If sticky is supported and set, this method will use it.\n// Otherwise it will check that global is set, and fall back to the slower method.\nInputScanner.prototype.__match = function(pattern, index) {\n  pattern.lastIndex = index;\n  var pattern_match = pattern.exec(this.__input);\n\n  if (pattern_match && !(regexp_has_sticky && pattern.sticky)) {\n    if (pattern_match.index !== index) {\n      pattern_match = null;\n    }\n  }\n\n  return pattern_match;\n};\n\nInputScanner.prototype.test = function(pattern, index) {\n  index = index || 0;\n  index += this.__position;\n\n  if (index >= 0 && index < this.__input_length) {\n    return !!this.__match(pattern, index);\n  } else {\n    return false;\n  }\n};\n\nInputScanner.prototype.testChar = function(pattern, index) {\n  // test one character regex match\n  var val = this.peek(index);\n  pattern.lastIndex = 0;\n  return val !== null && pattern.test(val);\n};\n\nInputScanner.prototype.match = function(pattern) {\n  var pattern_match = this.__match(pattern, this.__position);\n  if (pattern_match) {\n    this.__position += pattern_match[0].length;\n  } else {\n    pattern_match = null;\n  }\n  return pattern_match;\n};\n\nInputScanner.prototype.read = function(starting_pattern, until_pattern, until_after) {\n  var val = '';\n  var match;\n  if (starting_pattern) {\n    match = this.match(starting_pattern);\n    if (match) {\n      val += match[0];\n    }\n  }\n  if (until_pattern && (match || !starting_pattern)) {\n    val += this.readUntil(until_pattern, until_after);\n  }\n  return val;\n};\n\nInputScanner.prototype.readUntil = function(pattern, until_after) {\n  var val = '';\n  var match_index = this.__position;\n  pattern.lastIndex = this.__position;\n  var pattern_match = pattern.exec(this.__input);\n  if (pattern_match) {\n    match_index = pattern_match.index;\n    if (until_after) {\n      match_index += pattern_match[0].length;\n    }\n  } else {\n    match_index = this.__input_length;\n  }\n\n  val = this.__input.substring(this.__position, match_index);\n  this.__position = match_index;\n  return val;\n};\n\nInputScanner.prototype.readUntilAfter = function(pattern) {\n  return this.readUntil(pattern, true);\n};\n\nInputScanner.prototype.get_regexp = function(pattern, match_from) {\n  var result = null;\n  var flags = 'g';\n  if (match_from && regexp_has_sticky) {\n    flags = 'y';\n  }\n  // strings are converted to regexp\n  if (typeof pattern === \"string\" && pattern !== '') {\n    // result = new RegExp(pattern.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), flags);\n    result = new RegExp(pattern, flags);\n  } else if (pattern) {\n    result = new RegExp(pattern.source, flags);\n  }\n  return result;\n};\n\nInputScanner.prototype.get_literal_regexp = function(literal_string) {\n  return RegExp(literal_string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'));\n};\n\n/* css beautifier legacy helpers */\nInputScanner.prototype.peekUntilAfter = function(pattern) {\n  var start = this.__position;\n  var val = this.readUntilAfter(pattern);\n  this.__position = start;\n  return val;\n};\n\nInputScanner.prototype.lookBack = function(testVal) {\n  var start = this.__position - 1;\n  return start >= testVal.length && this.__input.substring(start - testVal.length, start)\n    .toLowerCase() === testVal;\n};\n\nmodule.exports.InputScanner = InputScanner;\n\n\n/***/ }),\n/* 9 */,\n/* 10 */,\n/* 11 */,\n/* 12 */,\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nfunction Directives(start_block_pattern, end_block_pattern) {\n  start_block_pattern = typeof start_block_pattern === 'string' ? start_block_pattern : start_block_pattern.source;\n  end_block_pattern = typeof end_block_pattern === 'string' ? end_block_pattern : end_block_pattern.source;\n  this.__directives_block_pattern = new RegExp(start_block_pattern + / beautify( \\w+[:]\\w+)+ /.source + end_block_pattern, 'g');\n  this.__directive_pattern = / (\\w+)[:](\\w+)/g;\n\n  this.__directives_end_ignore_pattern = new RegExp(start_block_pattern + /\\sbeautify\\signore:end\\s/.source + end_block_pattern, 'g');\n}\n\nDirectives.prototype.get_directives = function(text) {\n  if (!text.match(this.__directives_block_pattern)) {\n    return null;\n  }\n\n  var directives = {};\n  this.__directive_pattern.lastIndex = 0;\n  var directive_match = this.__directive_pattern.exec(text);\n\n  while (directive_match) {\n    directives[directive_match[1]] = directive_match[2];\n    directive_match = this.__directive_pattern.exec(text);\n  }\n\n  return directives;\n};\n\nDirectives.prototype.readIgnored = function(input) {\n  return input.readUntilAfter(this.__directives_end_ignore_pattern);\n};\n\n\nmodule.exports.Directives = Directives;\n\n\n/***/ }),\n/* 14 */,\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Beautifier = __webpack_require__(16).Beautifier,\n  Options = __webpack_require__(17).Options;\n\nfunction css_beautify(source_text, options) {\n  var beautifier = new Beautifier(source_text, options);\n  return beautifier.beautify();\n}\n\nmodule.exports = css_beautify;\nmodule.exports.defaultOptions = function() {\n  return new Options();\n};\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar Options = __webpack_require__(17).Options;\nvar Output = __webpack_require__(2).Output;\nvar InputScanner = __webpack_require__(8).InputScanner;\nvar Directives = __webpack_require__(13).Directives;\n\nvar directives_core = new Directives(/\\/\\*/, /\\*\\//);\n\nvar lineBreak = /\\r\\n|[\\r\\n]/;\nvar allLineBreaks = /\\r\\n|[\\r\\n]/g;\n\n// tokenizer\nvar whitespaceChar = /\\s/;\nvar whitespacePattern = /(?:\\s|\\n)+/g;\nvar block_comment_pattern = /\\/\\*(?:[\\s\\S]*?)((?:\\*\\/)|$)/g;\nvar comment_pattern = /\\/\\/(?:[^\\n\\r\\u2028\\u2029]*)/g;\n\nfunction Beautifier(source_text, options) {\n  this._source_text = source_text || '';\n  // Allow the setting of language/file-type specific options\n  // with inheritance of overall settings\n  this._options = new Options(options);\n  this._ch = null;\n  this._input = null;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule\n  this.NESTED_AT_RULE = {\n    \"@page\": true,\n    \"@font-face\": true,\n    \"@keyframes\": true,\n    // also in CONDITIONAL_GROUP_RULE below\n    \"@media\": true,\n    \"@supports\": true,\n    \"@document\": true\n  };\n  this.CONDITIONAL_GROUP_RULE = {\n    \"@media\": true,\n    \"@supports\": true,\n    \"@document\": true\n  };\n\n}\n\nBeautifier.prototype.eatString = function(endChars) {\n  var result = '';\n  this._ch = this._input.next();\n  while (this._ch) {\n    result += this._ch;\n    if (this._ch === \"\\\\\") {\n      result += this._input.next();\n    } else if (endChars.indexOf(this._ch) !== -1 || this._ch === \"\\n\") {\n      break;\n    }\n    this._ch = this._input.next();\n  }\n  return result;\n};\n\n// Skips any white space in the source text from the current position.\n// When allowAtLeastOneNewLine is true, will output new lines for each\n// newline character found; if the user has preserve_newlines off, only\n// the first newline will be output\nBeautifier.prototype.eatWhitespace = function(allowAtLeastOneNewLine) {\n  var result = whitespaceChar.test(this._input.peek());\n  var isFirstNewLine = true;\n\n  while (whitespaceChar.test(this._input.peek())) {\n    this._ch = this._input.next();\n    if (allowAtLeastOneNewLine && this._ch === '\\n') {\n      if (this._options.preserve_newlines || isFirstNewLine) {\n        isFirstNewLine = false;\n        this._output.add_new_line(true);\n      }\n    }\n  }\n  return result;\n};\n\n// Nested pseudo-class if we are insideRule\n// and the next special character found opens\n// a new block\nBeautifier.prototype.foundNestedPseudoClass = function() {\n  var openParen = 0;\n  var i = 1;\n  var ch = this._input.peek(i);\n  while (ch) {\n    if (ch === \"{\") {\n      return true;\n    } else if (ch === '(') {\n      // pseudoclasses can contain ()\n      openParen += 1;\n    } else if (ch === ')') {\n      if (openParen === 0) {\n        return false;\n      }\n      openParen -= 1;\n    } else if (ch === \";\" || ch === \"}\") {\n      return false;\n    }\n    i++;\n    ch = this._input.peek(i);\n  }\n  return false;\n};\n\nBeautifier.prototype.print_string = function(output_string) {\n  this._output.set_indent(this._indentLevel);\n  this._output.non_breaking_space = true;\n  this._output.add_token(output_string);\n};\n\nBeautifier.prototype.preserveSingleSpace = function(isAfterSpace) {\n  if (isAfterSpace) {\n    this._output.space_before_token = true;\n  }\n};\n\nBeautifier.prototype.indent = function() {\n  this._indentLevel++;\n};\n\nBeautifier.prototype.outdent = function() {\n  if (this._indentLevel > 0) {\n    this._indentLevel--;\n  }\n};\n\n/*_____________________--------------------_____________________*/\n\nBeautifier.prototype.beautify = function() {\n  if (this._options.disabled) {\n    return this._source_text;\n  }\n\n  var source_text = this._source_text;\n  var eol = this._options.eol;\n  if (eol === 'auto') {\n    eol = '\\n';\n    if (source_text && lineBreak.test(source_text || '')) {\n      eol = source_text.match(lineBreak)[0];\n    }\n  }\n\n\n  // HACK: newline parsing inconsistent. This brute force normalizes the this._input.\n  source_text = source_text.replace(allLineBreaks, '\\n');\n\n  // reset\n  var baseIndentString = source_text.match(/^[\\t ]*/)[0];\n\n  this._output = new Output(this._options, baseIndentString);\n  this._input = new InputScanner(source_text);\n  this._indentLevel = 0;\n  this._nestedLevel = 0;\n\n  this._ch = null;\n  var parenLevel = 0;\n\n  var insideRule = false;\n  // This is the value side of a property value pair (blue in the following ex)\n  // label { content: blue }\n  var insidePropertyValue = false;\n  var enteringConditionalGroup = false;\n  var insideAtExtend = false;\n  var insideAtImport = false;\n  var topCharacter = this._ch;\n  var whitespace;\n  var isAfterSpace;\n  var previous_ch;\n\n  while (true) {\n    whitespace = this._input.read(whitespacePattern);\n    isAfterSpace = whitespace !== '';\n    previous_ch = topCharacter;\n    this._ch = this._input.next();\n    if (this._ch === '\\\\' && this._input.hasNext()) {\n      this._ch += this._input.next();\n    }\n    topCharacter = this._ch;\n\n    if (!this._ch) {\n      break;\n    } else if (this._ch === '/' && this._input.peek() === '*') {\n      // /* css comment */\n      // Always start block comments on a new line.\n      // This handles scenarios where a block comment immediately\n      // follows a property definition on the same line or where\n      // minified code is being beautified.\n      this._output.add_new_line();\n      this._input.back();\n\n      var comment = this._input.read(block_comment_pattern);\n\n      // Handle ignore directive\n      var directives = directives_core.get_directives(comment);\n      if (directives && directives.ignore === 'start') {\n        comment += directives_core.readIgnored(this._input);\n      }\n\n      this.print_string(comment);\n\n      // Ensures any new lines following the comment are preserved\n      this.eatWhitespace(true);\n\n      // Block comments are followed by a new line so they don't\n      // share a line with other properties\n      this._output.add_new_line();\n    } else if (this._ch === '/' && this._input.peek() === '/') {\n      // // single line comment\n      // Preserves the space before a comment\n      // on the same line as a rule\n      this._output.space_before_token = true;\n      this._input.back();\n      this.print_string(this._input.read(comment_pattern));\n\n      // Ensures any new lines following the comment are preserved\n      this.eatWhitespace(true);\n    } else if (this._ch === '@') {\n      this.preserveSingleSpace(isAfterSpace);\n\n      // deal with less propery mixins @{...}\n      if (this._input.peek() === '{') {\n        this.print_string(this._ch + this.eatString('}'));\n      } else {\n        this.print_string(this._ch);\n\n        // strip trailing space, if present, for hash property checks\n        var variableOrRule = this._input.peekUntilAfter(/[: ,;{}()[\\]\\/='\"]/g);\n\n        if (variableOrRule.match(/[ :]$/)) {\n          // we have a variable or pseudo-class, add it and insert one space before continuing\n          variableOrRule = this.eatString(\": \").replace(/\\s$/, '');\n          this.print_string(variableOrRule);\n          this._output.space_before_token = true;\n        }\n\n        variableOrRule = variableOrRule.replace(/\\s$/, '');\n\n        if (variableOrRule === 'extend') {\n          insideAtExtend = true;\n        } else if (variableOrRule === 'import') {\n          insideAtImport = true;\n        }\n\n        // might be a nesting at-rule\n        if (variableOrRule in this.NESTED_AT_RULE) {\n          this._nestedLevel += 1;\n          if (variableOrRule in this.CONDITIONAL_GROUP_RULE) {\n            enteringConditionalGroup = true;\n          }\n          // might be less variable\n        } else if (!insideRule && parenLevel === 0 && variableOrRule.indexOf(':') !== -1) {\n          insidePropertyValue = true;\n          this.indent();\n        }\n      }\n    } else if (this._ch === '#' && this._input.peek() === '{') {\n      this.preserveSingleSpace(isAfterSpace);\n      this.print_string(this._ch + this.eatString('}'));\n    } else if (this._ch === '{') {\n      if (insidePropertyValue) {\n        insidePropertyValue = false;\n        this.outdent();\n      }\n\n      // when entering conditional groups, only rulesets are allowed\n      if (enteringConditionalGroup) {\n        enteringConditionalGroup = false;\n        insideRule = (this._indentLevel >= this._nestedLevel);\n      } else {\n        // otherwise, declarations are also allowed\n        insideRule = (this._indentLevel >= this._nestedLevel - 1);\n      }\n      if (this._options.newline_between_rules && insideRule) {\n        if (this._output.previous_line && this._output.previous_line.item(-1) !== '{') {\n          this._output.ensure_empty_line_above('/', ',');\n        }\n      }\n\n      this._output.space_before_token = true;\n\n      // The difference in print_string and indent order is necessary to indent the '{' correctly\n      if (this._options.brace_style === 'expand') {\n        this._output.add_new_line();\n        this.print_string(this._ch);\n        this.indent();\n        this._output.set_indent(this._indentLevel);\n      } else {\n        this.indent();\n        this.print_string(this._ch);\n      }\n\n      this.eatWhitespace(true);\n      this._output.add_new_line();\n    } else if (this._ch === '}') {\n      this.outdent();\n      this._output.add_new_line();\n      if (previous_ch === '{') {\n        this._output.trim(true);\n      }\n      insideAtImport = false;\n      insideAtExtend = false;\n      if (insidePropertyValue) {\n        this.outdent();\n        insidePropertyValue = false;\n      }\n      this.print_string(this._ch);\n      insideRule = false;\n      if (this._nestedLevel) {\n        this._nestedLevel--;\n      }\n\n      this.eatWhitespace(true);\n      this._output.add_new_line();\n\n      if (this._options.newline_between_rules && !this._output.just_added_blankline()) {\n        if (this._input.peek() !== '}') {\n          this._output.add_new_line(true);\n        }\n      }\n    } else if (this._ch === \":\") {\n      if ((insideRule || enteringConditionalGroup) && !(this._input.lookBack(\"&\") || this.foundNestedPseudoClass()) && !this._input.lookBack(\"(\") && !insideAtExtend && parenLevel === 0) {\n        // 'property: value' delimiter\n        // which could be in a conditional group query\n        this.print_string(':');\n        if (!insidePropertyValue) {\n          insidePropertyValue = true;\n          this._output.space_before_token = true;\n          this.eatWhitespace(true);\n          this.indent();\n        }\n      } else {\n        // sass/less parent reference don't use a space\n        // sass nested pseudo-class don't use a space\n\n        // preserve space before pseudoclasses/pseudoelements, as it means \"in any child\"\n        if (this._input.lookBack(\" \")) {\n          this._output.space_before_token = true;\n        }\n        if (this._input.peek() === \":\") {\n          // pseudo-element\n          this._ch = this._input.next();\n          this.print_string(\"::\");\n        } else {\n          // pseudo-class\n          this.print_string(':');\n        }\n      }\n    } else if (this._ch === '\"' || this._ch === '\\'') {\n      this.preserveSingleSpace(isAfterSpace);\n      this.print_string(this._ch + this.eatString(this._ch));\n      this.eatWhitespace(true);\n    } else if (this._ch === ';') {\n      if (parenLevel === 0) {\n        if (insidePropertyValue) {\n          this.outdent();\n          insidePropertyValue = false;\n        }\n        insideAtExtend = false;\n        insideAtImport = false;\n        this.print_string(this._ch);\n        this.eatWhitespace(true);\n\n        // This maintains single line comments on the same\n        // line. Block comments are also affected, but\n        // a new line is always output before one inside\n        // that section\n        if (this._input.peek() !== '/') {\n          this._output.add_new_line();\n        }\n      } else {\n        this.print_string(this._ch);\n        this.eatWhitespace(true);\n        this._output.space_before_token = true;\n      }\n    } else if (this._ch === '(') { // may be a url\n      if (this._input.lookBack(\"url\")) {\n        this.print_string(this._ch);\n        this.eatWhitespace();\n        parenLevel++;\n        this.indent();\n        this._ch = this._input.next();\n        if (this._ch === ')' || this._ch === '\"' || this._ch === '\\'') {\n          this._input.back();\n        } else if (this._ch) {\n          this.print_string(this._ch + this.eatString(')'));\n          if (parenLevel) {\n            parenLevel--;\n            this.outdent();\n          }\n        }\n      } else {\n        this.preserveSingleSpace(isAfterSpace);\n        this.print_string(this._ch);\n        this.eatWhitespace();\n        parenLevel++;\n        this.indent();\n      }\n    } else if (this._ch === ')') {\n      if (parenLevel) {\n        parenLevel--;\n        this.outdent();\n      }\n      this.print_string(this._ch);\n    } else if (this._ch === ',') {\n      this.print_string(this._ch);\n      this.eatWhitespace(true);\n      if (this._options.selector_separator_newline && !insidePropertyValue && parenLevel === 0 && !insideAtImport) {\n        this._output.add_new_line();\n      } else {\n        this._output.space_before_token = true;\n      }\n    } else if ((this._ch === '>' || this._ch === '+' || this._ch === '~') && !insidePropertyValue && parenLevel === 0) {\n      //handle combinator spacing\n      if (this._options.space_around_combinator) {\n        this._output.space_before_token = true;\n        this.print_string(this._ch);\n        this._output.space_before_token = true;\n      } else {\n        this.print_string(this._ch);\n        this.eatWhitespace();\n        // squash extra whitespace\n        if (this._ch && whitespaceChar.test(this._ch)) {\n          this._ch = '';\n        }\n      }\n    } else if (this._ch === ']') {\n      this.print_string(this._ch);\n    } else if (this._ch === '[') {\n      this.preserveSingleSpace(isAfterSpace);\n      this.print_string(this._ch);\n    } else if (this._ch === '=') { // no whitespace before or after\n      this.eatWhitespace();\n      this.print_string('=');\n      if (whitespaceChar.test(this._ch)) {\n        this._ch = '';\n      }\n    } else if (this._ch === '!' && !this._input.lookBack(\"\\\\\")) { // !important\n      this.print_string(' ');\n      this.print_string(this._ch);\n    } else {\n      this.preserveSingleSpace(isAfterSpace);\n      this.print_string(this._ch);\n    }\n  }\n\n  var sweetCode = this._output.get_code(eol);\n\n  return sweetCode;\n};\n\nmodule.exports.Beautifier = Beautifier;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*jshint node:true */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n*/\n\n\n\nvar BaseOptions = __webpack_require__(6).Options;\n\nfunction Options(options) {\n  BaseOptions.call(this, options, 'css');\n\n  this.selector_separator_newline = this._get_boolean('selector_separator_newline', true);\n  this.newline_between_rules = this._get_boolean('newline_between_rules', true);\n  var space_around_selector_separator = this._get_boolean('space_around_selector_separator');\n  this.space_around_combinator = this._get_boolean('space_around_combinator') || space_around_selector_separator;\n\n  var brace_style_split = this._get_selection_list('brace_style', ['collapse', 'expand', 'end-expand', 'none', 'preserve-inline']);\n  this.brace_style = 'collapse';\n  for (var bs = 0; bs < brace_style_split.length; bs++) {\n    if (brace_style_split[bs] !== 'expand') {\n      // default to collapse, as only collapse|expand is implemented for now\n      this.brace_style = 'collapse';\n    } else {\n      this.brace_style = brace_style_split[bs];\n    }\n  }\n}\nOptions.prototype = new BaseOptions();\n\n\n\nmodule.exports.Options = Options;\n\n\n/***/ })\n/******/ ]);\nvar css_beautify = legacy_beautify_css;\n/* Footer */\nif (typeof define === \"function\" && define.amd) {\n    // Add support for AMD ( https://github.com/amdjs/amdjs-api/wiki/AMD#defineamd-property- )\n    define([], function() {\n        return {\n            css_beautify: css_beautify\n        };\n    });\n} else if (typeof exports !== \"undefined\") {\n    // Add support for CommonJS. Just put this file somewhere on your require.paths\n    // and you will be able to `var html_beautify = require(\"beautify\").html_beautify`.\n    exports.css_beautify = css_beautify;\n} else if (typeof window !== \"undefined\") {\n    // If we're running a web page and don't have either of the above, add our one global\n    window.css_beautify = css_beautify;\n} else if (typeof global !== \"undefined\") {\n    // If we don't even have window, try global.\n    global.css_beautify = css_beautify;\n}\n\n}());\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/partials/_formwidgetconnector.php",
    "content": "<backend-document\n    container-css-class=\"fill-container\"\n    :built-in-mode=\"true\"\n    :full-screen=\"fullScreen\"\n    ref=\"document\"\n>\n    <template v-slot:toolbar v-if=\"!hasExternalToolbar\">\n        <backend-document-toolbar\n            :elements=\"toolbarElements\"\n            :disabled=\"readOnly\"\n            @command=\"onToolbarCommand\"\n            ref=\"toolbar\"\n        ></backend-document-toolbar>\n    </template>\n\n    <template v-slot:content>\n        <div class=\"flex-layout-column fill-container\" ref=\"contentContainer\">\n            <div class=\"flex-layout-item stretch editor-panel relative\">\n                <backend-richeditor-document-connector\n                    :allow-resizing=\"showMargins\"\n                    :toolbar-container=\"toolbarExtensionPointProxy\"\n                    :external-toolbar-app-state=\"externalToolbarAppState\"\n                    :use-media-manager=\"useMediaManager\"\n                    :built-in-mode=\"true\"\n                    unique-key=\"html-editor-form-widget\"\n                    container-css-class=\"fill-container\"\n                    ref=\"documentConnector\"\n                >\n                    <backend-richeditor\n                        v-model=\"value\"\n                        :read-only=\"options.readOnly\"\n                        :use-line-breaks=\"options.useLineBreaks\"\n                        :full-page=\"fullPage\"\n                        :editor-options=\"editorOptions\"\n                        :toolbar-buttons=\"toolbarButtons\"\n                        ref=\"richeditor\"\n                        @blur=\"onBlur\"\n                        @focus=\"onFocus\"\n                    >\n                    </backend-richeditor>\n                </backend-richeditor-document-connector>\n            </div>\n        </div>\n    </template>\n</backend-document>\n"
  },
  {
    "path": "modules/backend/vuecomponents/richeditordocumentconnector/partials/_richeditordocumentconnector.php",
    "content": "<div\n    class=\"component-backend-richeditor-document-connector flex-layout-column layout-absolute\"\n    :class=\"cssClass\"\n    data-configuration=\"<?= e($configuration) ?>\"\n>\n    <div v-if=\"allowResizing && !codeEditingMode\" class=\"top-ruler flex-layout-item fix\">\n        <div class=\"width-indicator\" :style=\"rulerStyle\">\n            <span v-for=\"tick in majorTicks\" :style=\"tick.style\" class=\"width-tick tick-major\"></span>\n            <span v-for=\"tick in minorTicks\" :style=\"tick.style\" class=\"width-tick tick-minor\"></span>\n\n            <div class=\"width-drag-handle\" @mousedown.stop=\"onResizingHandleMouseDown\" ref=\"handle\"></div>\n        </div>\n    </div>\n    <div class=\"flex-layout-item stretch richeditor-container\">\n        <slot></slot>\n    </div>\n    <div class=\"flex-layout-item stretch relative codeeditor-container\">\n        <backend-monacoeditor\n            v-if=\"codeEditingMode\"\n            ref=\"codeEditor\"\n            container-css-class=\"fill-container\"\n            :model-definitions=\"codeEditorModelDefinitions\"\n        >\n        </backend-monacoeditor>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/vuecomponents/scrollablepanel/assets/css/scrollablepanel.css",
    "content": ".component-backend-scrollablepanel {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n\n    .scrollable-panel-container {\n        position: absolute;\n        left: 0;\n        top: 0;\n        width: 100%;\n        height: 100%;\n\n        .scrollable {\n            overflow: hidden;\n        }\n    }\n\n    &.scrollablepanel-relative {\n        position: relative;\n\n        > .scrollable-panel-container {\n            position: relative;\n\n            > .scrollable {\n                position: relative;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/scrollablepanel/assets/js/scrollablepanel.js",
    "content": "/*\n * Vue scrollable panel implementation.\n *\n * The panel is positioned using position=absolute. The hosting\n * element must have position=relative.\n */\nexport default {\n    props: {\n        relativeLayout: {\n            type: Boolean,\n            default: false\n        },\n        relativeLayoutMaxHeight: Number\n    },\n    computed: {\n        containerStyle: function computeContainerStyle() {\n            if (!this.relativeLayout) {\n                return {};\n            }\n\n            var result = {};\n\n            if (this.relativeLayoutMaxHeight !== undefined) {\n                result['max-height'] = this.relativeLayoutMaxHeight + 'px';\n            }\n\n            return result;\n        }\n    },\n    methods: {\n        gotoStart: function gotoStart() {\n            $(this.$refs.scrollable).dragScroll('goToStart');\n        },\n\n        goToElement: function goToElement(element, options) {\n            var that = this;\n            return new Promise(function (resolve, reject) {\n                $(that.$refs.scrollable).dragScroll('goToElement', element, resolve, options);\n            });\n        },\n\n        onScroll: function onScroll() {\n            $(this.$refs.container).toggleClass('scrolled', this.$refs.scrollable.scrollTop > 0);\n        }\n    },\n    mounted: function mounted() {\n        $(this.$refs.scrollable).dragScroll({\n            useDrag: true,\n            useNative: false,\n            vertical: true,\n            noScrollClasses: true\n        });\n    },\n    beforeUnmount: function beforeUnmount() {\n        $(this.$refs.scrollable).dragScroll('dispose');\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/scrollablepanel/partials/_scrollablepanel.php",
    "content": "<div\n    class=\"component-backend-scrollablepanel\"\n    :class=\"{'scrollablepanel-relative': relativeLayout}\"\n>\n    <div class=\"scrollable-panel-container\" ref=\"container\">\n        <div\n            class=\"scrollable\"\n            ref=\"scrollable\"\n            v-on:scroll.passive=\"onScroll\"\n            :style=\"containerStyle\"\n        >\n            <slot></slot>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/splitter/assets/css/splitter.css",
    "content": ".component-backend-splitter {\n    > .splitter-handle {\n        background: var(--oc-primary-border);\n        transition: background-color 0.1s;\n        position: relative;\n\n        &:hover,\n        &.dragging {\n            background-color: var(--bs-primary);\n        }\n\n        &:before,\n        &:after {\n            content: '';\n            position: absolute;\n            top: 0;\n        }\n    }\n\n    &.flex-layout-row {\n        /* Vertical splitter */\n\n        > .splitter-handle {\n            width: 1px;\n            cursor: col-resize;\n\n            &:before,\n            &:after {\n                width: 1px;\n                height: 100%;\n            }\n\n            &:before {\n                left: -1px;\n            }\n\n            &:after {\n                right: -1px;\n            }\n        }\n    }\n\n    &.flex-layout-column {\n        /* Horizontal splitter */\n\n        > .splitter-handle {\n            height: 1px;\n            cursor: row-resize;\n\n            &:before,\n            &:after {\n                height: 1px;\n                width: 100%;\n            }\n\n            &:before {\n                top: -1px;\n            }\n\n            &:after {\n                bottom: -1px;\n            }\n        }\n    }\n}\n\nbody.splitter-dragging-vertical,\nbody.splitter-dragging-horizontal {\n    * {\n        user-select: none;\n    }\n}\n\nbody.splitter-dragging-vertical {\n    * {\n        cursor: col-resize !important;\n    }\n}\n\nbody.splitter-dragging-horizontal {\n    * {\n        cursor: row-resize !important;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/splitter/assets/js/splitter.js",
    "content": "/*\n * Vue splitter implementation\n */\nexport default {\n    props: {\n        direction: {\n            type: String,\n            default: 'vertical',\n            validator: function (value) {\n                if (['vertical', 'horizontal'].indexOf(value) === -1) {\n                    return false;\n                }\n\n                return true;\n            }\n        },\n        minSize: {\n            type: Number,\n            default: 100\n        },\n        defaultSize: {\n            type: Number,\n            default: 100\n        },\n        fullHeight: {\n            type: Boolean,\n            default: true\n        },\n        uniqueKey: {\n            type: String,\n            required: true\n        },\n        value: {\n            // If the splitter size is provided as an\n            // external property, the component doesn't\n            // save its size and doesn't use the default\n            // size property.\n            //\n            type: Number\n        }\n    },\n    data: function () {\n        return {\n            size: 100,\n            containerSize: 0,\n            dragging: false\n        };\n    },\n    computed: {\n        firstPanelStyle: function computeFirstPanelStyle() {\n            var result = {},\n                prop = this.direction == 'vertical' ? 'width' : 'height';\n\n            result[prop] = this.size + 'px';\n\n            return result;\n        },\n\n        cssClass: function computeCssClass() {\n            var result = {};\n\n            result['full-height-strict'] = this.fullHeight;\n            result['flex-layout-row'] = this.direction == 'vertical';\n            result['flex-layout-column'] = this.direction == 'horizontal';\n\n            return result;\n        },\n\n        storageKey: function computeStorageKey() {\n            return this.uniqueKey + '-splitter';\n        }\n    },\n    methods: {\n        saveSize: function saveSize() {\n            if (this.value !== undefined) {\n                return;\n            }\n\n            localStorage.setItem(this.storageKey + '-size', !isNaN(this.size) ? this.size : this.defaultSize);\n        },\n\n        applyMinSize: function applyMinSize() {\n            var containerSize = 0;\n\n            if (this.direction == 'vertical') {\n                containerSize = $(this.$el).width();\n            }\n            else {\n                containerSize = $(this.$el).height();\n            }\n\n            if (!containerSize) {\n                return;\n            }\n\n            this.size = Math.max(this.size, this.minSize);\n            this.size = Math.min(this.size, containerSize - this.minSize);\n            this.saveSize();\n        },\n\n        onMouseMove: function onMouseMove(ev) {\n            if (ev.buttons != 1) {\n                // Handle the case when the button was released\n                // outside of the viewport. mouseup doesn't fire\n                // in that case.\n                //\n                this.onMouseUp();\n            }\n\n            var handlePos = $(this.$refs.handle).offset(),\n                delta = 0;\n\n            if (this.direction == 'vertical') {\n                delta = ev.pageX - handlePos.left;\n            }\n            else {\n                delta = ev.pageY - handlePos.top;\n            }\n\n            if (delta <= 0) {\n                this.size = Math.max(this.size + delta, this.minSize);\n            }\n            else {\n                this.size = Math.min(this.size + delta, this.containerSize - this.minSize);\n            }\n\n            this.$emit('input', this.size);\n        },\n\n        onMouseUp: function onMouseUp() {\n            document.removeEventListener('mousemove', this.onMouseMove, { passive: true });\n            document.removeEventListener('mouseup', this.onMouseUp);\n            this.dragging = false;\n\n            $(document.body).removeClass('splitter-dragging-vertical splitter-dragging-horizontal');\n            this.saveSize();\n        },\n\n        onHandleMouseDown: function onSplitterMouseDown() {\n            if (this.direction == 'vertical') {\n                this.containerSize = $(this.$el).width();\n                $(document.body).addClass('splitter-dragging-vertical');\n            }\n            else {\n                this.containerSize = $(this.$el).height();\n                $(document.body).addClass('splitter-dragging-horizontal');\n            }\n\n            document.addEventListener('mousemove', this.onMouseMove, { passive: true });\n            document.addEventListener('mouseup', this.onMouseUp);\n            this.dragging = true;\n        }\n    },\n    mounted: function onMounted() {\n        if (this.value === undefined) {\n            var size = parseInt(localStorage.getItem(this.storageKey + '-size'));\n\n            if (!size) {\n                size = this.defaultSize;\n            }\n\n            this.size = size;\n        }\n        else {\n            this.size = this.value;\n        }\n\n        var that = this;\n        Vue.nextTick(function () {\n            that.applyMinSize();\n        });\n\n        window.addEventListener('resize', this.applyMinSize, { passive: true });\n    },\n    watch: {\n        value: function onValueChanged(newValue, oldValue) {\n            if (newValue != this.size) {\n                this.size = newValue;\n            }\n        },\n        dragging: function (newValue) {\n            this.$emit('dragging', newValue)\n        }\n    },\n    beforeUnmount: function onBeforeUnmount() {\n        window.removeEventListener('resize', this.applyMinSize, { passive: true });\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/splitter/partials/_splitter.php",
    "content": "<div\n    class=\"component-backend-splitter\" :class=\"cssClass\"\n>\n    <div class=\"flex-layout-item fix splitter-first-panel\" :style=\"firstPanelStyle\" ref=\"firstPanel\">\n        <slot name=\"first\">\n            Left panel\n        </slot>\n    </div>\n\n    <div\n        class=\"flex-layout-item fix splitter-handle\"\n        :class=\"{dragging: dragging}\"\n        ref=\"handle\"\n        @mousedown.stop=\"onHandleMouseDown\"\n    ></div>\n\n    <div class=\"flex-layout-item stretch relative\">\n        <slot name=\"second\">\n            Right panel\n        </slot>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/tabs/assets/css/_style-document.css",
    "content": ".component-backend-tabs.style-document {\n    > .tablist-container {\n        .tabs-scrollable {\n            background-color: var(--oc-editor-tab-bg);\n        }\n\n        .tabs-toolbar {\n            line-height: 39px;\n            background-color: var(--oc-editor-tab-bg);\n\n            &:after {\n                content: '';\n                height: 100%;\n                width: 1px;\n                top: 0;\n                background: var(--oc-primary-border);\n                position: absolute;\n                margin-left: -1px;\n            }\n\n            .toolbar-container {\n                margin: 5px 10px 0 10px;\n            }\n        }\n\n        .tablist {\n            &:after {\n                position: absolute;\n                content: '';\n                height: 1px;\n                left: 0;\n                width: 100%;\n                bottom: 0;\n                background-color: var(--oc-primary-border);\n                z-index: 0;\n            }\n\n            &:empty:after {\n                display: none;\n            }\n\n            button {\n                height: 48px;\n                border-left: 1px solid var(--oc-primary-border);\n                max-width: 220px;\n                min-width: 120px;\n\n                &.active {\n                    background-color: var(--oc-editor-tab-active-bg);\n                    color: var(--oc-editor-tab-active-color);\n\n                    &:after {\n                        position: absolute;\n                        content: '';\n                        height: 1px;\n                        left: 0;\n                        width: 100%;\n                        bottom: 0;\n                        z-index: 1;\n                        background-color: var(--oc-editor-tab-active-bg);\n                    }\n                }\n\n                &:first-child {\n                    margin-left: 25px;\n                }\n\n                &:last-child {\n                    border-right: 1px solid var(--oc-primary-border);\n                }\n            }\n        }\n\n        .tablist-scrollable-container {\n            position: relative;\n\n            .tabs-scrollable:after {\n                content: '';\n                position: absolute;\n                display: block;\n                width: 5px;\n                height: 48px;\n                opacity: 0;\n                top: 0;\n                transition: opacity 0.3s;\n                left: 0;\n                background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, 0) 100%);\n            }\n\n            &.scroll-before .tabs-scrollable:after {\n                opacity: 0.15;\n            }\n\n            &:not(.has-fixed-panel) {\n                &:after {\n                    content: '';\n                    position: absolute;\n                    display: block;\n                    width: 5px;\n                    height: 48px;\n                    opacity: 0;\n                    top: 0;\n                    transition: opacity 0.3s;\n                    right: 0;\n                    background: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, #000 100%);\n                }\n\n                &.scroll-after:after {\n                    opacity: 0.15;\n                }\n            }\n\n            &.has-fixed-panel {\n                .fixed-right {\n                    &:before {\n                        content: '';\n                        position: absolute;\n                        display: block;\n                        width: 5px;\n                        height: 48px;\n                        opacity: 0;\n                        top: 0;\n                        transition: opacity 0.3s;\n                        margin-left: -5px;\n                        background: linear-gradient(-90deg, #000 0%, rgba(0, 0, 0, 0) 100%);\n                    }\n                }\n\n                &.scroll-after .fixed-right:before {\n                    opacity: 0.15;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/tabs/assets/css/_style-form.css",
    "content": ".component-backend-tabs.style-form {\n    > .tablist-container {\n        .tablist {\n            button {\n                border: 1px solid var(--oc-primary-border);\n                margin-left: -1px;\n                height: 38px;\n\n                &.active {\n                    color: #2C3E4F;\n                    border-color: var(--bs-primary);\n                    font-weight: 600;\n                    z-index: 1;\n                }\n\n                &:first-child {\n                    margin-left: 0;\n                    border-radius: 6px 0 0 6px;\n                }\n\n                &:last-child {\n                    border-radius: 0 6px 6px 0;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/tabs/assets/css/_style-inspector.css",
    "content": ".component-backend-tabs.style-inspector {\n    > .tablist-container {\n        background: transparent;\n        padding-top: 15px;\n\n        .tablist {\n            &:after {\n                position: absolute;\n                content: '';\n                height: 1px;\n                left: 0;\n                width: 100%;\n                bottom: 0;\n                background-color: var(--oc-primary-border);\n                z-index: 0;\n            }\n\n            button {\n                overflow: visible;\n                text-overflow: clip;\n                color: var(--oc-toolbar-color);\n                font-weight: 600;\n\n                /* Important - setting anything else for z-index\n                   breaks styles for Inspector dropdown controls\n                   overlapping tabs. */\n                z-index: auto;\n\n                margin-right: 15px;\n                padding: 0 0 4px;\n\n                &.active {\n                    color: var(--bs-primary);\n\n                    &:after {\n                        position: absolute;\n                        content: '';\n                        height: 1px;\n                        left: 0;\n                        width: 100%;\n                        bottom: 0;\n                        z-index: 1;\n                        background-color: var(--bs-primary);\n                    }\n                }\n\n                &:first-child {\n                    margin-left: 0;\n                }\n\n                &:last-child {\n                    margin-right: 0;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/tabs/assets/css/tabs.css",
    "content": "@import \"_style-form.css\";\n@import \"_style-document.css\";\n@import \"_style-inspector.css\";\n\n.component-backend-tabs {\n    &.full-screen {\n        background: var(--bs-body-bg);\n        position: fixed;\n        left: 0;\n        top: 0;\n        width: 100%;\n        height: 100%;\n        z-index: 10; /* Experimental value - numbers lower than 2 expose treeview control in Editor */\n    }\n\n    > .tablist-container {\n        /* Important: this element must be an offset parent for\n           .tabs-scrollable and .tablist */\n        position: relative;\n\n        .tabs-scrollable {\n            width: 100%;\n            overflow: hidden;\n        }\n\n        .tablist {\n            button {\n                -webkit-appearance: none;\n                padding: 0 13px;\n                background: transparent;\n                color: var(--oc-editor-tab-color);\n                border: none;\n                position: relative;\n                white-space: nowrap;\n                overflow: hidden;\n                text-overflow: ellipsis;\n                user-select: none;\n                text-align: left;\n\n                &.has-icon {\n                    padding-left: 36px;\n                }\n\n                &.has-close-button {\n                    padding-right: 32px;\n                    min-width: 120px;\n                }\n\n                &:focus {\n                    outline: none;\n                    color: var(--bs-primary);\n\n                    span.tab-icon:not(.tab-error) {\n                        box-shadow: 0 0 0px 2px rgba(0, 0, 0, 0.15);\n                    }\n                }\n\n                span.tab-icon {\n                    display: inline-block;\n                    width: 16px;\n                    height: 16px;\n                    line-height: 16px;\n                    border-radius: 4px;\n                    position: absolute;\n                    left: 13px;\n                    top: 16px;\n                    overflow: hidden;\n\n                    .tab-icon-background {\n                        width: 16px;\n                        height: 16px;\n                        display: block;\n                        position: absolute;\n                        top: 0;\n                        left: 0;\n                        transition: top .5s;\n                    }\n\n                    i {\n                        color: white;\n                        position: absolute;\n                        left: 3px;\n                        top: 3px;\n                        font-size: 10px;\n                    }\n\n                    i.tab-error {\n                        top: 16px;\n                        left: 0;\n                        width: 16px;\n                        height: 16px;\n                        background-position: -31px -35px;\n                        transition: top .5s;\n                    }\n\n                    &.tab-error {\n                        .tab-icon-background {\n                            top: -16px;\n                        }\n\n                        i.tab-error {\n                            top: 0;\n                        }\n                    }\n                }\n\n                span.close-tab {\n                    display: inline-block;\n                    position: absolute;\n                    width: 19px;\n                    height: 19px;\n                    right: 10px;\n                    top: 15px;\n                    color: transparent;\n                    vertical-align: middle;\n                    border-radius: 20px;\n\n                    &:focus {\n                        outline: none;\n                        background-color: var(--oc-toolbar-hover-bg);\n                    }\n\n                    &:before {\n                        position: absolute;\n                        display: block;\n                        width: 7px;\n                        height: 7px;\n                        left: 6px;\n                        top: 6px;\n                        background-position: -156px 0;\n                    }\n\n                    &,\n                    &.has-changes {\n                        &:focus,\n                        &:hover {\n                            &:before {\n                                background-position: -165px 0;\n                            }\n                        }\n                    }\n\n                    &.has-changes {\n                        &:before {\n                            background-position: -167px -10px;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    > .tabpanel {\n        &:focus {\n            outline: none;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/tabs/assets/js/tabs.js",
    "content": "/*\n * Vue tabs implementation\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Tab_Role\n * @see https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-2/tabs.html\n */\nexport default {\n        props: {\n            tabs: Array,\n            ariaLabel: {\n                type: String,\n                default: ''\n            },\n            fullHeight: {\n                type: Boolean,\n                default: true\n            },\n            closeable: {\n                type: Boolean,\n                default: false\n            },\n            closeTooltip: {\n                type: String,\n                default: null\n            },\n            closeTooltipHotkey: {\n                // The tabs control does not handle hotkeys.\n                // It must be implemented in a parent component.\n                //\n                type: String,\n                default: null\n            },\n            useSlots: {\n                type: Boolean,\n                default: false\n            },\n            hideTabPanel: {\n                type: Boolean,\n                default: false\n            },\n            noPanes: {\n                type: Boolean,\n                default: false\n            },\n            tabsStyle: {\n                type: String,\n                default: 'document'\n            },\n            tabPanelCssClass: {\n                type: String,\n                default: ''\n            },\n            containerCssClass: {\n                type: String,\n                default: ''\n            },\n            commonTabContextMenuItems: {\n                type: Array,\n                default: function () {\n                    return [];\n                },\n                validator: function (value) {\n                    var knownCodes = ['close', 'close-all', 'close-others', 'close-saved'];\n\n                    return !value.some(function (itemCode) {\n                        return knownCodes.indexOf(itemCode) === -1;\n                    });\n                }\n            },\n            tabContextMenuItems: {\n                type: Array,\n                default: function () {\n                    return [];\n                }\n            },\n            supportsFullScreen: {\n                type: Boolean,\n                default: false\n            },\n            tooltipsEnabled: {\n                type: Boolean,\n                default: true\n            }\n        },\n        data: function () {\n            return {\n                selectedTabKey: null,\n                focusedTabKey: null,\n                tabIds: {},\n                contextMenuItems: [],\n                contextMenuId: $.oc.domIdManager.generate('tabs-context-menu'),\n                contextMenuLabeledById: '',\n                contextMenuTab: null,\n                fullScreen: false\n            };\n        },\n        computed: {\n            currentTabKey: function computeCurrentTabKey() {\n                if (this.selectedTabKey === null) {\n                    if (this.tabs.length > 0) {\n                        return this.tabs[0].key;\n                    }\n                }\n\n                return this.selectedTabKey;\n            },\n\n            currentFocusTabKey: function computeCurrentFocusTabKey() {\n                if (this.focusedTabKey === null) {\n                    return this.currentTabKey;\n                }\n\n                return this.focusedTabKey;\n            },\n\n            focusedTabKeyIndex: function computeFocusedTabKeyIndex() {\n                return this.getTabIndex(this.currentFocusTabKey);\n            },\n\n            selectedTabIndex: function computeSelectedTabIndex() {\n                return this.getTabIndex(this.currentTabKey);\n            },\n\n            isFullScreen: function computeIsFullScreen() {\n                return this.fullScreen && this.tabs.length > 0;\n            },\n\n            cssClass: function computeCssClass() {\n                var result = '';\n\n                if (this.fullHeight) {\n                    result += ' full-height-strict';\n                }\n\n                if (this.isFullScreen) {\n                    result += ' full-screen';\n                }\n\n                result += ' style-' + this.tabsStyle;\n                result += ' ' + this.containerCssClass;\n\n                return result;\n            },\n\n            tabCount: function computeTabCount() {\n                return this.tabs.length;\n            },\n\n            hasTabs: function computeHasTabs() {\n                return this.tabCount > 0;\n            },\n\n            hasTabsWithChanges: function computeHasTabsWithChanges() {\n                for (var index = this.tabs.length - 1; index >= 0; index--) {\n                    if (this.tabs[index].hasChanges) {\n                        return true;\n                    }\n                }\n\n                return false;\n            },\n\n            selectedComponentRefName: function computeSelectedComponentRefName() {\n                return 'tab-component-' + this.selectedTabKey;\n            }\n        },\n        methods: {\n            selectTab: function selectTab(tabKey) {\n                this.selectedTabKey = tabKey;\n                this.focusedTabKey = tabKey;\n            },\n\n            getTooltipText: function getTooltipText(tab) {\n                if (!this.tooltipsEnabled) {\n                    return null;\n                }\n\n                return tab.label;\n            },\n\n            getTabIndex: function getTabIndex(tabKey) {\n                for (var index = 0; index < this.tabs.length; index++) {\n                    if (this.tabs[index].key == tabKey) {\n                        return index;\n                    }\n                }\n            },\n\n            getTabId: function getTabId(tab, suffix) {\n                if (tab.key === undefined) {\n                    throw new Error('Tabs must have the \"key\" property');\n                }\n\n                if (!suffix) {\n                    suffix = '';\n                }\n\n                if (this.tabIds[tab.key] === undefined) {\n                    this.tabIds[tab.key] = $.oc.domIdManager.generate('tab');\n                }\n\n                return this.tabIds[tab.key] + '-' + suffix;\n            },\n\n            getTabUniqueKey: function getTabUniqueKey(tab) {\n                if (tab.systemData && tab.systemData.uniqueKey) {\n                    return tab.systemData.uniqueKey;\n                }\n\n                tab.systemData = tab.systemData || {};\n                tab.systemData.uniqueKey = $.oc.domIdManager.generate('tabuniquekey');\n\n                return tab.systemData.uniqueKey;\n            },\n\n            getTabComponentRefName: function getTabComponentRefName(tab) {\n                return 'tab-component-' + tab.key;\n            },\n\n            getTabIconStyle: function getTabIconStyle(tab) {\n                return {\n                    'background-color': tab.icon.backgroundColor ? tab.icon.backgroundColor : '#E67E21'\n                };\n            },\n\n            closeTabConfirmedByHostedComponent: function closeTabConfirmedByHostedComponent(tab) {\n                var parentEv = $.Event('tabclose'),\n                    tabIndex = this.getTabIndex(tab.key);\n\n                this.$emit('tabclose', tab.key, parentEv);\n                if (parentEv.isDefaultPrevented()) {\n                    return;\n                }\n\n                Vue.nextTick(oc.octoberTooltips.clear, 1);\n\n                if (tabIndex === null || !this.tabs.length) {\n                    this.selectedTabKey = null;\n                    this.focusedTabKey = null;\n                }\n                else {\n                    if (this.tabs[tabIndex] !== undefined) {\n                        this.selectedTabKey = this.tabs[tabIndex].key;\n                        this.focusedTabKey = this.tabs[tabIndex].key;\n                    }\n                    else {\n                        this.selectedTabKey = this.tabs[tabIndex - 1].key;\n                        this.focusedTabKey = this.tabs[tabIndex - 1].key;\n                    }\n\n                    var that = this;\n                    Vue.nextTick(function () {\n                        $(that.$refs.tabList).children().eq(that.focusedTabKeyIndex).focus();\n                    });\n                }\n            },\n\n            closeAllTabs: function closeAllTabs(ignoreTab, onlySaved) {\n                for (var index = this.tabs.length - 1; index >= 0; index--) {\n                    var tab = this.tabs[index];\n                    if (tab === ignoreTab) {\n                        continue;\n                    }\n\n                    if (onlySaved && tab.hasChanges) {\n                        continue;\n                    }\n\n                    if (!this.onCloseClick(tab)) {\n                        this.onClick(tab);\n                        break;\n                    }\n                }\n            },\n\n            getSelectedTabComponent: function getSelectedTabComponent() {\n                var result = this.$refs[this.selectedComponentRefName];\n\n                if (result === undefined || !result.length) {\n                    return null;\n                }\n\n                return result[0];\n            },\n\n            getTabComponent: function getTabComponent(tabKey) {\n                var refName = 'tab-component-' + tabKey;\n                var result = this.$refs[refName];\n\n                if (result === undefined || !result.length) {\n                    return null;\n                }\n\n                return result[0];\n            },\n\n            onKeyDown: function onKeyDown(ev) {\n                // Right/left arrow handling. See w3.org accessibility\n                // requirements for details.\n                //\n                var key = 'which' in ev ? ev.which : ev.keyCode;\n\n                if (key != 39 && key != 37) {\n                    return;\n                }\n\n                if (this.focusedTabKeyIndex === null) {\n                    return;\n                }\n\n                if (key == 39) {\n                    if (this.focusedTabKeyIndex < this.tabs.length - 1) {\n                        this.focusedTabKey = this.tabs[this.focusedTabKeyIndex + 1].key;\n                    }\n                    else {\n                        this.focusedTabKey = this.tabs[0].key;\n                    }\n                }\n                else {\n                    if (this.focusedTabKeyIndex > 0) {\n                        this.focusedTabKey = this.tabs[this.focusedTabKeyIndex - 1].key;\n                    }\n                    else {\n                        this.focusedTabKey = this.tabs[this.tabs.length - 1].key;\n                    }\n                }\n\n                $(this.$refs.tabList).children().eq(this.focusedTabKeyIndex).focus();\n            },\n\n            onClick: function onClick(tab) {\n                this.selectedTabKey = tab.key;\n                this.focusedTabKey = tab.key;\n\n                var that = this;\n                Vue.nextTick(function () {\n                    $(that.$refs.tabList).children().eq(that.focusedTabKeyIndex).focus();\n                });\n            },\n\n            onMiddleClick: function onMiddleClick(tab) {\n                this.onCloseClick(tab);\n            },\n\n            onCloseClick: function onCloseClick(tab) {\n                var refName = this.getTabComponentRefName(tab),\n                    componentRefs = this.$refs[refName],\n                    that = this;\n\n                if (componentRefs.length && typeof componentRefs[0].onParentTabClose == 'function') {\n                    var result = this.$refs[refName][0].onParentTabClose();\n\n                    // If result is true or falsy, close immediately\n                    // If result is a promise (thenable), wait for it\n                    if (!result || result === true) {\n                        this.closeTabConfirmedByHostedComponent(tab);\n                        return true;\n                    }\n\n                    // Result is a promise, wait for confirmation\n                    result.then(function () {\n                        that.closeTabConfirmedByHostedComponent(tab);\n                    }, $.noop);\n\n                    return false;\n                }\n                else {\n                    this.closeTabConfirmedByHostedComponent(tab);\n                    return true;\n                }\n            },\n\n            onHostedComponentTabClose: function onHostedComponentTabClose(tab) {\n                return this.onCloseClick(tab);\n            },\n\n            onTabFatalError: function onTabFatalError(tab) {\n                // Vue 3: Direct assignment is reactive\n                tab.fatalError = true;\n            },\n\n            onTabkeyChanged: function onTabkeyChanged(oldKey, newKey) {\n                if (this.selectedTabKey == oldKey) {\n                    this.selectedTabKey = newKey;\n                }\n\n                if (this.focusedTabKey == oldKey) {\n                    this.focusedTabKey = newKey;\n                }\n            },\n\n            onContextMenu: function onContextMenu(ev, tab) {\n                this.contextMenuItems = [].concat(this.tabContextMenuItems);\n                var el = this.$el,\n                    that = this;\n\n                this.commonTabContextMenuItems.forEach(function (itemCode) {\n                    that.contextMenuItems.push({\n                        type: 'text',\n                        command: itemCode,\n                        label: el.getAttribute('data-lang-' + itemCode)\n                    });\n                });\n\n                if (!this.contextMenuItems.length) {\n                    return;\n                }\n\n                this.contextMenuTab = tab;\n                this.contextMenuLabeledById = this.getTabId(tab, 'tab');\n                this.$refs.contextmenu.showMenu(ev);\n                ev.preventDefault();\n            },\n\n            onMenuItemCommand: function onMenuItemCommand(command) {\n                switch (command) {\n                    case 'close':\n                        this.onCloseClick(this.contextMenuTab);\n                        break;\n                    case 'close-all':\n                        this.closeAllTabs();\n                        break;\n                    case 'close-others':\n                        this.closeAllTabs(this.contextMenuTab);\n                        break;\n                    case 'close-saved':\n                        this.closeAllTabs(null, true);\n                        break;\n                    default:\n                        this.$emit('contextmenu', command, this.contextMenuTab);\n                        break;\n                }\n            },\n\n            onToggleFullscreen: function onToggleFullscreen() {\n                this.fullScreen = !this.fullScreen;\n            }\n        },\n        mounted: function mounted() {\n            if (this.supportsFullScreen && this.tabsStyle != 'document') {\n                throw new Error('Tab fullscreen mode only supported for the document tab style.');\n            }\n\n            $(this.$refs.scrollable).dragScroll({\n                useDrag: true,\n                useNative: false,\n                noScrollClasses: false,\n                scrollClassContainer: this.$refs.scrollableTabsContainer\n            });\n        },\n        beforeUnmount: function beforeUnmount() {\n            $(this.$refs.scrollable).dragScroll('dispose');\n        },\n        watch: {\n            currentTabKey: function watchCurrentTabKey(key, oldKey) {\n                this.$emit('tabselected', key, oldKey);\n\n                var component = this.getSelectedTabComponent();\n                if (component && typeof component.onParentTabSelected == 'function') {\n                    component.onParentTabSelected();\n                }\n            },\n\n            selectedTabIndex: function watchSelectedTabIndex(newValue, oldValue) {\n                // Only handle the case where the selected tab was removed\n                // (newValue becomes undefined because selectedTabKey points to a non-existent tab)\n                if (newValue !== undefined) {\n                    return;\n                }\n\n                // Prevent re-entry - if we're already adjusting, skip\n                if (this._adjustingTabSelection) {\n                    return;\n                }\n\n                this._adjustingTabSelection = true;\n\n                // Selecting another tab after a tab was deleted.\n                //\n                if (oldValue !== undefined && oldValue <= this.tabs.length - 1 && this.tabs[oldValue]) {\n                    this.selectedTabKey = this.tabs[oldValue].key;\n                    this.focusedTabKey = this.selectedTabKey;\n                }\n                else if (this.tabs.length > 0) {\n                    this.selectedTabKey = this.tabs[this.tabs.length - 1].key;\n                    this.focusedTabKey = this.selectedTabKey;\n                }\n                else {\n                    this.selectedTabKey = null;\n                    this.focusedTabKey = null;\n                }\n\n                var that = this;\n                Vue.nextTick(function() {\n                    that._adjustingTabSelection = false;\n                });\n            },\n            tabCount: function watchTabCount(value) {\n                if (!value) {\n                    this.fullScreen = false;\n                }\n            }\n        }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/tabs/partials/_tabs.php",
    "content": "<div\n    class=\"component-backend-tabs flex-layout-column\"\n    :class=\"cssClass\"\n    data-lang-close=\"<?= e(trans('backend::lang.tabs.close')) ?>\"\n    data-lang-close-all=\"<?= e(trans('backend::lang.tabs.close_all')) ?>\"\n    data-lang-close-others=\"<?= e(trans('backend::lang.tabs.close_others')) ?>\"\n    data-lang-close-saved=\"<?= e(trans('backend::lang.tabs.close_saved')) ?>\"\n>\n    <div class=\"tablist-container flex-layout-item fix\" v-show=\"!hideTabPanel\">\n        <div class=\"flex-layout-row tablist-scrollable-container\" :class=\"{'has-fixed-panel': supportsFullScreen && hasTabs}\" ref=\"scrollableTabsContainer\">\n            <div class=\"tabs-scrollable flex-layout-item stretch\" ref=\"scrollable\">\n                <div\n                    class=\"tablist flex-layout-row\"\n                    role=\"tablist\"\n                    ref=\"tabList\"\n                    v-bind:aria-label=\"ariaLabel\"\n                    @keydown=\"onKeyDown\"\n                >\n                    <button\n                        v-for=\"tab in tabs\"\n                        role=\"tab\"\n                        data-component-backend-tab\n                        class=\"flex-layout-item\"\n                        :class=\"{\n                            active: currentTabKey == tab.key,\n                            stretch: tabsStyle == 'document',\n                            fix: tabsStyle == 'form',\n                            'has-icon': tab.icon || tab.fatalError,\n                            'has-close-button': closeable\n                        }\"\n                        v-bind:id=\"getTabId(tab, 'tab')\"\n                        v-bind:aria-controls=\"getTabId(tab, 'panel')\"\n                        v-bind:aria-selected=\"currentTabKey == tab.key ? 'true' : 'false'\"\n                        v-bind:tabindex=\"currentTabKey == tab.key ? 0 : -1\"\n                        v-bind:data-tooltip-text=\"getTooltipText(tab)\"\n                        @click.ignore=\"onClick(tab)\"\n                        @mouseup.middle=\"onMiddleClick(tab)\"\n                        @contextmenu.stop=\"onContextMenu($event, tab)\"\n                    >\n                        <span\n                            class=\"tab-icon\"\n                            :class=\"{'tab-error': tab.fatalError}\"\n                            v-if=\"tab.icon\"\n                            aria-hidden=\"true\"\n                        >\n                            <span\n                                class=\"tab-icon-background\"\n                                v-bind:style=\"getTabIconStyle(tab)\"\n                            >\n                                <i\n                                    :class=\"tab.icon.cssClass\"\n                                ></i>\n                            </span>\n\n                            <i class=\"backend-icon-background tab-error\"></i>\n                        </span>\n\n                        <span v-text=\"tab.label\" role=\"text\"></span>\n\n                        <span\n                            class=\"backend-icon-background-pseudo close-tab\"\n                            :class=\"{'has-changes': tab.hasChanges}\"\n                            v-bind:tabindex=\"currentTabKey == tab.key ? 0 : -1\"\n                            v-if=\"closeable\"\n                            role=\"button\"\n                            aria-label=\"<?= e(trans('backend::lang.tabs.close')) ?>\"\n                            v-bind:title=\"closeTooltip ? '' : '<?= e(trans('backend::lang.tabs.close')) ?>'\"\n                            v-bind:data-tooltip-text=\"closeTooltip\"\n                            v-bind:data-tooltip-hotkey=\"closeTooltipHotkey\"\n                            @click.stop.prevent=\"onCloseClick(tab)\"\n                        >✕</span>\n                    </button>\n                </div>\n            </div>\n            <div class=\"flex-layout-item fix fixed-right tabs-toolbar\" v-if=\"supportsFullScreen && hasTabs\">\n                <div class=\"toolbar-container\">\n                    <button\n                        class=\"backend-toolbar-button icon-only\"\n                        data-tooltip-text=\"<?= e(trans('backend::lang.tabs.full_screen')) ?>\"\n                        @click.stop.prevent=\"onToggleFullscreen\"\n                    >\n                        <i :class=\"{'icon-fullscreen': !isFullScreen, 'icon-fullscreen-collapse': isFullScreen}\"></i>\n                    </button>\n                </div>\n            </div>\n        </div>\n\n    </div>\n\n    <template v-if=\"!noPanes\">\n        <div\n            v-for=\"tab in tabs\"\n            role=\"tabpanel\"\n            tabindex=\"0\"\n            :key=\"getTabUniqueKey(tab)\"\n            v-show=\"currentTabKey == tab.key\"\n            v-bind:id=\"getTabId(tab, 'panel')\"\n            v-bind:aria-labelledby=\"getTabId(tab, 'tab')\"\n            class=\"tabpanel flex-layout-item stretch relative\"\n            :class=\"tabPanelCssClass\"\n        >\n            <component\n                v-if=\"!useSlots\"\n                :ref=\"getTabComponentRefName(tab)\"\n                v-bind:is=\"tab.component\"\n                :component-data=\"tab.componentData\"\n                @tabfatalerror=\"onTabFatalError(tab)\"\n                @tabkeychanged=\"onTabkeyChanged\"\n                @tabclose=\"onHostedComponentTabClose(tab)\"\n            ></component>\n            <slot v-else :name=\"tab.key\"></slot>\n        </div>\n    </template>\n\n    <slot v-if=\"!tabs.length\" name=\"noTabsView\"></slot>\n\n    <backend-dropdown-menu\n        :items=\"contextMenuItems\"\n        :menu-id=\"contextMenuId\"\n        :labeled-by-id=\"contextMenuLabeledById\"\n        ref=\"contextmenu\"\n        @command=\"onMenuItemCommand\"\n    ></backend-dropdown-menu>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/NodeDefinition.php",
    "content": "<?php namespace Backend\\VueComponents\\TreeView;\n\nuse SystemException;\nuse Backend\\VueComponents\\DropdownMenu\\ItemDefinition;\n\n/**\n * NodeDefinition encapsulates Treeview node information.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass NodeDefinition\n{\n    const DISPLAY_MODE_TREE = 'tree';\n    const DISPLAY_MODE_LIST = 'list';\n\n    const DND_SORT = 'sort';\n    const DND_MOVE = 'move';\n    const DND_CUSTOM = 'custom';\n    const DND_CUSTOM_EXTERNAL = 'custom-external';\n\n    const GROUP_BY_MODE_FOLDERS = 'folders';\n    const GROUP_BY_MODE_NESTING = 'nesting';\n\n    /**\n     * @var mixed label\n     */\n    protected $label;\n\n    /**\n     * @var mixed key\n     */\n    protected $key;\n\n    /**\n     * @var mixed childKeyPrefix\n     */\n    protected $childKeyPrefix;\n\n    /**\n     * @var mixed displayMode\n     */\n    protected $displayMode = NodeDefinition::DISPLAY_MODE_LIST;\n\n    /**\n     * @var bool draggable\n     */\n    protected $draggable = false;\n\n    /**\n     * @var bool selectable\n     */\n    protected $selectable = true;\n\n    /**\n     * @var mixed icon\n     */\n    protected $icon;\n\n    /**\n     * @var array nodes\n     */\n    protected $nodes = [];\n\n    /**\n     * @var mixed userData\n     */\n    protected $userData = null;\n\n    /**\n     * @var mixed sortBy\n     */\n    protected $sortBy = null;\n\n    /**\n     * @var mixed groupBy\n     */\n    protected $groupBy = null;\n\n    /**\n     * @var mixed groupByMode\n     */\n    protected $groupByMode = NodeDefinition::GROUP_BY_MODE_FOLDERS;\n\n    /**\n     * @var mixed dragAndDropMode\n     */\n    protected $dragAndDropMode = null;\n\n    /**\n     * @var mixed rootMenuItems\n     */\n    protected $rootMenuItems = null;\n\n    /**\n     * @var mixed description\n     */\n    protected $description = null;\n\n    /**\n     * @var mixed hasApiMenuItems\n     */\n    protected $hasApiMenuItems = false;\n\n    /**\n     * @var mixed displayProperty\n     */\n    protected $displayProperty;\n\n    /**\n     * @var mixed noMoveDrop\n     */\n    protected $noMoveDrop = null;\n\n    /**\n     * @var mixed multiSelect\n     */\n    protected $multiSelect = null;\n\n    /**\n     * @var mixed hideInQuickAccess\n     */\n    protected $hideInQuickAccess = false;\n\n    /**\n     * __construct\n     */\n    public function __construct(string $label, string $key)\n    {\n        $this->label = $label;\n        $this->key = $key;\n    }\n\n    /**\n     * Sets tree branch display mode - tree or list.\n     * Only the root node display mode is considered.\n     */\n    public function setDisplayMode(string $value)\n    {\n        if (!in_array($value, [self::DISPLAY_MODE_TREE, self::DISPLAY_MODE_LIST])) {\n            throw new SystemException('Invalid tree display mode: '.$value);\n        }\n\n        if ($this->groupBy) {\n            throw new SystemException('Treeview branch grouping is only supported for the LIST display mode');\n        }\n\n        $this->displayMode = $value;\n\n        return $this;\n    }\n\n    /**\n     * Determines whether multiple nodes can be selected.\n     * Only the root node property value is considered.\n     */\n    public function setMultiSelect(bool $value)\n    {\n        $this->multiSelect = $value;\n\n        return $this;\n    }\n\n    /**\n     * Determines whether the node is draggable.\n     * Only the root node draggable value is considered.\n     */\n    public function setDraggable(bool $value)\n    {\n        $this->draggable = $value;\n\n        return $this;\n    }\n\n    /**\n     * Determines whether the node must be hidden in the Treeview Quick Access user interface.\n     * This affects only leaf nodes.\n     */\n    public function setHideInQuickAccess($value)\n    {\n        $this->hideInQuickAccess = $value;\n\n        return $this;\n    }\n\n    /**\n     * Determines whether other nodes can be dropped to the node.\n     */\n    public function setNoMoveDrop(bool $value)\n    {\n        $this->noMoveDrop = $value;\n\n        return $this;\n    }\n\n    /**\n     * Sets node description.\n     * Node descriptions are rendered by the treeview component\n     * but their styling must be done by a parent component.\n     */\n    public function setDescription(string $value)\n    {\n        $this->description = $value;\n\n        return $this;\n    }\n\n    /**\n     * Determines if the node is selectable.\n     * The value is ignored for root nodes - they cannot\n     * be selected.\n     */\n    public function setSelectable(bool $value)\n    {\n        $this->selectable = $value;\n\n        return $this;\n    }\n\n    /**\n     * setIcon\n     */\n    public function setIcon(string $backgroundColor, string $iconClassName)\n    {\n        $this->icon = [\n            'backgroundColor' => $backgroundColor,\n            'cssClass' => $iconClassName\n        ];\n\n        return $this;\n    }\n\n    /**\n     * setFolderIcon\n     */\n    public function setFolderIcon()\n    {\n        $this->icon = 'folder';\n    }\n\n    /**\n     * Sets optional user data object.\n     */\n    public function setUserData(array $userData)\n    {\n        $this->userData = $userData;\n\n        return $this;\n    }\n\n    /**\n     * setUserDataElement\n     */\n    public function setUserDataElement(string $key, $value)\n    {\n        if (!is_array($this->userData)) {\n            $this->userData = [];\n        }\n\n        $this->userData[$key] = $value;\n        return $this;\n    }\n\n    /**\n     * addNode\n     */\n    public function addNode(string $label, string $key)\n    {\n        if (strlen($this->childKeyPrefix)) {\n            $key = $this->childKeyPrefix.$key;\n        }\n\n        $node = new NodeDefinition($label, $key);\n        $node->setChildKeyPrefix($this->childKeyPrefix);\n\n        return $this->nodes[] = $node;\n    }\n\n    /**\n     * setChildKeyPrefix\n     */\n    public function setChildKeyPrefix($prefix)\n    {\n        $this->childKeyPrefix = $this->childKeyPrefix.$prefix;\n        return $this;\n    }\n\n    /**\n     * Sets optional sorting for a tree branch.\n     * Applies to root nodes only. Allows to sort\n     * child nodes using userData object properties.\n     * Syntax: propertyName1,propertyName2:desc.\n     */\n    public function setSortBy(string $sortBy)\n    {\n        $this->sortBy = $sortBy;\n\n        return $this;\n    }\n\n    /**\n     * Sets tree branch drag and drop mode - sort, move (or both), or custom.\n     * Only the root node drag and drop mode is considered.\n     */\n    public function setDragAndDropMode(array $mode)\n    {\n        foreach ($mode as $option) {\n            if (!in_array($option, [self::DND_MOVE, self::DND_SORT, self::DND_CUSTOM, self::DND_CUSTOM_EXTERNAL])) {\n                throw new SystemException('Invalid treeview branch drag and drop mode: '.$option);\n            }\n\n            if ($option === self::DND_CUSTOM && count($mode) > 1) {\n                throw new SystemException('Treeview branch drag and drop Custom mode cannot be combined with other modes');\n            }\n        }\n\n        if ($this->groupBy) {\n            throw new SystemException('Drag and drop is not supported for treeview branches with enabled Group By feature');\n        }\n\n        $this->dragAndDropMode = $mode;\n\n        return $this;\n    }\n\n    /**\n     * Sets optional grouping for a tree branch.\n     * Applies to root nodes only. Allows to group\n     * child nodes using a userData object property.\n     * Supported for the list display mode only.\n     */\n    public function setGroupBy(string $property)\n    {\n        if ($this->displayMode != NodeDefinition::DISPLAY_MODE_LIST) {\n            throw new SystemException('Treeview branch grouping is only supported for the LIST display mode');\n        }\n\n        if ($this->dragAndDropMode) {\n            throw new SystemException('Drag and drop is not supported for treeview branches with enabled Group By feature');\n        }\n\n        $this->groupBy = $property;\n\n        return $this;\n    }\n\n    /**\n     * setGroupByMode\n     */\n    public function setGroupByMode(string $mode)\n    {\n        if (!in_array($mode, [self::GROUP_BY_MODE_NESTING, self::GROUP_BY_MODE_FOLDERS])) {\n            throw new SystemException('Invalid treeview branch group by mode: '.$mode);\n        }\n\n        $this->groupByMode = $mode;\n\n        return $this;\n    }\n\n    /**\n     * addRootMenuItem\n     */\n    public function addRootMenuItem($type, ?string $label = null, ?string $command = null)\n    {\n        if (!$this->rootMenuItems) {\n            $this->rootMenuItems = new ItemDefinition(ItemDefinition::TYPE_TEXT, 'root', 'none');\n        }\n\n        return $this->rootMenuItems->addItem($type, $label, $command);\n    }\n\n    /**\n     * Allows to set userData property name to use as the node label.\n     * Applies to root nodes only.\n     */\n    public function setDisplayProperty(string $displayProperty)\n    {\n        $this->displayProperty = $displayProperty;\n\n        return $this;\n    }\n\n    /**\n     * Indicates that the menu item supports API-generated menu items.\n     */\n    public function setHasApiMenuItems(bool $hasApiMenuItems)\n    {\n        $this->hasApiMenuItems = $hasApiMenuItems;\n\n        return $this;\n    }\n\n    /**\n     * getNodes\n     */\n    public function getNodes()\n    {\n        return $this->nodes;\n    }\n\n    /**\n     * toArray\n     */\n    public function toArray()\n    {\n        $result = [\n            'label' => $this->label,\n            'uniqueKey' => $this->key,\n            'displayMode' => $this->displayMode,\n            'draggable' => $this->draggable,\n            'selectable' => $this->selectable\n        ];\n\n        if ($this->icon) {\n            $result['icon'] = $this->icon;\n        }\n\n        if ($this->description) {\n            $result['description'] = $this->description;\n        }\n\n        if ($this->groupBy) {\n            $result['groupBy'] = $this->groupBy;\n            $result['groupByMode'] = $this->groupByMode;\n        }\n\n        if ($this->dragAndDropMode) {\n            $result['dragAndDropMode'] = $this->dragAndDropMode;\n        }\n\n        if ($this->displayProperty) {\n            $result['displayProperty'] = $this->displayProperty;\n        }\n\n        if ($this->sortBy) {\n            $result['sortBy'] = $this->sortBy;\n        }\n\n        if ($this->hasApiMenuItems) {\n            $result['hasApiMenuItems'] = $this->hasApiMenuItems;\n        }\n\n        if ($this->noMoveDrop !== null) {\n            $result['noMoveDrop'] = $this->noMoveDrop;\n        }\n\n        if ($this->multiSelect !== null) {\n            $result['multiSelect'] = $this->multiSelect;\n        }\n\n        if ($this->hideInQuickAccess) {\n            $result['hideInQuickAccess'] = true;\n        }\n\n        $result['nodes'] = [];\n\n        if ($this->userData) {\n            $result['userData'] = $this->userData;\n        }\n\n        foreach ($this->nodes as $node) {\n            $result['nodes'][] = $node->toArray();\n        }\n\n        if ($this->rootMenuItems) {\n            $menuItems = $this->rootMenuItems->toArray();\n            $result['topLevelMenuitems'] = $menuItems['items'];\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/SectionDefinition.php",
    "content": "<?php namespace Backend\\VueComponents\\TreeView;\n\nuse Backend\\VueComponents\\DropdownMenu\\ItemDefinition;\n\n/**\n * SectionDefinition encapsulates Treeview section information.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SectionDefinition\n{\n    /**\n     * @var string label\n     */\n    protected $label;\n\n    /**\n     * @var string key\n     */\n    protected $key;\n\n    /**\n     * @var mixed menuItems\n     */\n    protected $menuItems = null;\n\n    /**\n     * @var mixed createMenuItems\n     */\n    protected $createMenuItems = null;\n\n    /**\n     * @var array nodes\n     */\n    protected $nodes = [];\n\n    /**\n     * @var mixed childKeyPrefix\n     */\n    protected $childKeyPrefix;\n\n    /**\n     * @var bool hasApiMenuItems\n     */\n    protected $hasApiMenuItems = false;\n\n    /**\n     * @var mixed userData\n     */\n    protected $userData = null;\n\n    /**\n     * __construct\n     */\n    public function __construct(string $label, string $key)\n    {\n        $this->label = $label;\n        $this->key = $key;\n    }\n\n    /**\n     * addNode\n     */\n    public function addNode(string $label, string $key)\n    {\n        if (strlen($this->childKeyPrefix)) {\n            $key = $this->childKeyPrefix.$key;\n        }\n\n        $node = new NodeDefinition($label, $key);\n\n        $node->setChildKeyPrefix($this->childKeyPrefix);\n\n        return $this->nodes[] = $node;\n    }\n\n    /**\n     * setChildKeyPrefix\n     */\n    public function setChildKeyPrefix($prefix)\n    {\n        $this->childKeyPrefix = $prefix;\n\n        return $this;\n    }\n\n    /**\n     * addMenuItem\n     */\n    public function addMenuItem($type, ?string $label = null, ?string $command = null)\n    {\n        if (!$this->menuItems) {\n            $this->menuItems = new ItemDefinition(ItemDefinition::TYPE_TEXT, 'root', 'none');\n        }\n\n        return $this->menuItems->addItem($type, $label, $command);\n    }\n\n    /**\n     * addMenuItemObject\n     */\n    public function addMenuItemObject(ItemDefinition $item)\n    {\n        if (!$this->menuItems) {\n            $this->menuItems = new ItemDefinition(ItemDefinition::TYPE_TEXT, 'root', 'none');\n        }\n\n        return $this->menuItems->addItemObject($item);\n    }\n\n    /**\n     * addCreateMenuItem\n     */\n    public function addCreateMenuItem($type, ?string $label = null, ?string $command = null)\n    {\n        if (!$this->createMenuItems) {\n            $this->createMenuItems = new ItemDefinition(ItemDefinition::TYPE_TEXT, 'root', 'none');\n        }\n\n        return $this->createMenuItems->addItem($type, $label, $command);\n    }\n\n    /**\n     * Indicates that the section supports API-generated menu items.\n     */\n    public function setHasApiMenuItems(bool $hasApiMenuItems)\n    {\n        $this->hasApiMenuItems = $hasApiMenuItems;\n\n        return $this;\n    }\n\n    /**\n     * Sets optional user data object.\n     */\n    public function setUserData(array $userData)\n    {\n        $this->userData = $userData;\n\n        return $this;\n    }\n\n    /**\n     * setUserDataElement\n     */\n    public function setUserDataElement(string $key, $value)\n    {\n        if (!is_array($this->userData)) {\n            $this->userData = [];\n        }\n\n        $this->userData[$key] = $value;\n        return $this;\n    }\n\n    /**\n     * getNodes\n     */\n    public function getNodes()\n    {\n        return $this->nodes;\n    }\n\n    /**\n     * toArray\n     */\n    public function toArray()\n    {\n        $result = [\n            'label' => $this->label,\n            'uniqueKey' => $this->key\n        ];\n\n        if ($this->hasApiMenuItems) {\n            $result['hasApiMenuItems'] = $this->hasApiMenuItems;\n        }\n        else {\n            $result['hasApiMenuItems'] = false;\n        }\n\n        if ($this->userData) {\n            $result['userData'] = $this->userData;\n        }\n\n        $result['nodes'] = [];\n\n        foreach ($this->nodes as $node) {\n            $result['nodes'][] = $node->toArray();\n        }\n\n        if ($this->menuItems) {\n            $menuItems = $this->menuItems->toArray();\n            $result['menuItems'] = $menuItems['items'];\n        }\n\n        if ($this->createMenuItems) {\n            $createMenuItems = $this->createMenuItems->toArray();\n            $result['createMenuItems'] = $createMenuItems['items'];\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/SectionList.php",
    "content": "<?php namespace Backend\\VueComponents\\TreeView;\n\n/**\n * SectionList encapsulates a list of Treeview sections.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SectionList\n{\n    /**\n     * @var array sections\n     */\n    protected $sections = [];\n\n    /**\n     * @var mixed childKeyPrefix\n     */\n    protected $childKeyPrefix;\n\n    /**\n     * addSection\n     */\n    public function addSection(string $label, string $key)\n    {\n        $section = new SectionDefinition($label, $key);\n        $section->setChildKeyPrefix($this->childKeyPrefix);\n\n        return $this->sections[] = $section;\n    }\n\n    /**\n     * getSections\n     */\n    public function getSections()\n    {\n        return $this->sections;\n    }\n\n    /**\n     * setChildKeyPrefix\n     */\n    public function setChildKeyPrefix($prefix)\n    {\n        $this->childKeyPrefix = $prefix;\n\n        return $this;\n    }\n\n    /**\n     * toArray\n     */\n    public function toArray()\n    {\n        $result = [];\n        foreach ($this->sections as $section) {\n            $result[] = $section->toArray();\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/css/_drag-drop.css",
    "content": ".component-backend-treeview {\n    .drag-indicator {\n        position: absolute;\n        display: none;\n        pointer-events: none;\n\n        right: 0;\n        height: 4px;\n        background: var(--bs-primary);\n        border: 1px solid white;\n        border-radius: 6px;\n        z-index: 1;\n        margin-top: -2px;\n\n        &[data-drop-position] {\n            display: block;\n        }\n\n        &[data-drop-position=below] {\n            margin-top: 28px;\n        }\n\n        &:after {\n            content: '';\n            position: absolute;\n            border: 2px solid var(--bs-primary);\n            background: white;\n            width: 6px;\n            height: 6px;\n            border-radius: 6px;\n            top: -2px;\n            left: -4px;\n            box-shadow: 0 0 0 1px white;\n        }\n    }\n\n    ul li.drop-target-parent {\n        > .item-label-outer-container {\n            &:before {\n                border: 2px solid var(--bs-primary);\n            }\n        }\n    }\n\n    .treeview-ghost-image-container {\n        top: 0;\n        left: 0;\n        z-index: 0;\n        position: absolute;\n\n        &.snapshot {\n            z-index: 5;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/css/_node-expand-toggle.css",
    "content": ".component-backend-treeview {\n    ul li {\n        &.mode-tree, &.root-node {\n            > ul {\n                padding-left: 19px;\n            }\n        }\n\n        .node-toggle-control {\n            -webkit-appearance: none;\n            display: inline-block;\n            border: none;\n            background: transparent;\n            position: absolute;\n            left: 0;\n            top: 0;\n            z-index: 2;\n            padding: 0;\n            margin: 0;\n            width: 16px;\n            height: 30px;\n            margin-right: 3px;\n            vertical-align: top;\n            outline: none;\n\n            &:before {\n                position: absolute;\n                width: 10px;\n                height: 6px;\n                left: 3px;\n                top: 12px;\n                background-position: -182px 0;\n                transform: rotate(-90deg);\n                transition: transform 0.1s;\n            }\n\n            &.no-child-nodes {\n                opacity: 0;\n                cursor: inherit;\n            }\n        }\n\n        &.expanded-node > .item-label-outer-container > .item-label-container .node-toggle-control {\n            &:before {\n                transform: rotate(0);\n            }\n        }\n\n        &.selected-node > .item-label-outer-container > .item-label-container .node-toggle-control:before {\n            background-position: -182px -8px;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/css/_node-icon.css",
    "content": ".component-backend-treeview {\n    ul li {\n        span.node-icon {\n            display: inline-block;\n            position: absolute;\n            top: 7px;\n            border-radius: 4px;\n            width: 16px;\n            height: 16px;\n            margin-right: 3px;\n            vertical-align: text-bottom;\n            box-shadow: 0 0 0 1px rgba(var(--bs-body-bg-rgb), 0.3);\n\n            &.folder-icon {\n                box-shadow: none;\n            }\n\n            i {\n                color: white;\n                position: absolute;\n                left: 3px;\n                top: 3px;\n                font-size: 10px;\n\n                &.treeview-folder {\n                    width: 16px;\n                    height: 16px;\n                    background-position: 0 -20px;\n                    left: 0;\n                    top: 0;\n                }\n            }\n        }\n\n        &.selected-node {\n            > .item-label-outer-container {\n                > .item-label-container {\n                    span.node-icon .treeview-folder {\n                        background-position: 0 -73px;\n                    }\n                }\n            }\n        }\n\n        &.mode-tree {\n            span.node-icon {\n                left: 19px;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/css/_node-menu.css",
    "content": ".component-backend-treeview {\n    ul li {\n        > .item-label-outer-container > .item-label-container.has-menu {\n            .node-menu-trigger {\n                display: none;\n\n                position: absolute;\n                top: 0;\n                right: 0;\n                background: transparent;\n                border: none;\n                -webkit-appearance: none;\n                outline: none;\n                border-radius: 4px;\n                width: 30px;\n                height: 30px;\n                font-size: 0;\n                color: transparent;\n\n                &:before {\n                    width: 2px;\n                    height: 12px;\n                    top: 9px;\n                    left: 14px;\n                    position: absolute;\n                    background-position: -231px 0;\n                }\n\n                &:focus {\n                    background-color: rgba(0, 0, 0, 0.1);\n                }\n            }\n\n            &:hover {\n                padding-right: 30px;\n\n                .node-menu-trigger {\n                    display: inline-block;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/css/_node.css",
    "content": ".component-backend-treeview {\n    ul {\n        li {\n            display: block;\n            white-space: nowrap;\n\n            .node-label {\n                display: block;\n                color: var(--oc-toolbar-color);\n                position: relative;\n                z-index: 1;\n                vertical-align: top;\n                overflow: hidden;\n                text-overflow: ellipsis;\n                width: 100%;\n            }\n\n            > .item-label-outer-container {\n                &:before {\n                    content: '';\n                    position: absolute;\n                    left: 0;\n                    width: 100%;\n                    height: 30px;\n                    border-radius: 4px;\n                    z-index: 0;\n                }\n\n                > .item-label-container {\n                    cursor: default;\n                    position: relative;\n                    line-height: 30px;\n                    font-size: 14px;\n                    vertical-align: top;\n                }\n            }\n\n            &.root-node > .item-label-outer-container > .item-label-container .node-label {\n                color: var(--oc-editor-section-color);\n            }\n\n            &:focus {\n                outline: none;\n\n                > .item-label-outer-container:before {\n                    background-color: var(--oc-toolbar-hover-bg);\n                }\n            }\n\n            &.selectable-node:not(.selected-node) {\n                > .item-label-outer-container:hover:before {\n                    background-color: var(--oc-toolbar-hover-bg);\n                }\n\n                &.context-menu-visible > .item-label-outer-container:before {\n                    background-color: var(--oc-toolbar-hover-bg);\n                }\n            }\n\n            &.selected-node {\n                > .item-label-outer-container {\n                    &:before {\n                        background: var(--oc-selection);\n                    }\n\n                    > .item-label-container {\n                        &,\n                        &.root-node {\n                            .node-label {\n                                color: white;\n                            }\n                        }\n                    }\n                }\n\n                &:focus > .item-label-outer-container:before {\n                    border: 2px solid rgba(0, 0, 0, 0.1);\n                }\n            }\n\n            &.selectable-node > .item-label-outer-container > .item-label-container {\n                cursor: pointer;\n            }\n\n            /* Multi-node selection - remove round corners between adjacent nodes */\n\n            &.selected-node:not(.expanded-with-children) + li.selected-node,\n            &.selected-node > ul[data-subtree] > li.selected-node:first-child {\n                > .item-label-outer-container:before {\n                    border-top-left-radius: 0;\n                    border-top-right-radius: 0;\n                }\n            }\n\n            &.selected-node.next-is-selected {\n                > .item-label-outer-container:before {\n                    border-bottom-left-radius: 0;\n                    border-bottom-right-radius: 0;\n                }\n            }\n\n            /* Alignment of the collapse button, icon and label text */\n\n            &.mode-tree,\n            &.root-node {\n                > .item-label-outer-container > .item-label-container {\n                    .node-label {\n                        padding-left: 19px;\n                    }\n\n                    &.has-icon .node-label {\n                        padding-left: 38px;\n                    }\n                }\n            }\n\n            > .item-label-outer-container > .item-label-container.has-icon .node-label {\n                padding-left: 19px;\n            }\n        }\n    }\n\n    .treeview-readonly {\n        ul {\n            li {\n                .node-label {\n                    opacity: 0.7;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/css/_quick-access.css",
    "content": ".component-backend-treeview {\n    .modal.component-backend-modal {\n        &.treeview-quick-access-modal {\n            .modal-content {\n                min-height: 52px;\n            }\n        }\n\n        .treeview-quick-access {\n            .modal-header {\n                border-bottom: none;\n                padding: 0;\n                height: 10px;\n                min-height: 0;\n\n                h4 {\n                    display: none;\n                }\n            }\n\n            .modal-body {\n                padding: 0;\n\n                .input-container {\n                    position: relative;\n\n                    &:before {\n                        display: block;\n                        width: 15px;\n                        height: 15px;\n                        position: absolute;\n                        background-position: -238px 0;\n                        top: 7px;\n                        left: 10px;\n                    }\n\n                    > input {\n                        display: block;\n                        border: none;\n                        height: 40px;\n                        width: 100%;\n                        border-bottom-style: solid;\n                        border-bottom-color: var(--oc-primary-border);\n                        border-bottom-width: 0;\n                        background: transparent;\n                        outline: none;\n                        -webkit-appearance: none;\n                        position: relative;\n                        padding: 0 10px 11px 35px;\n\n                        &:focus {\n                            border-bottom-color: #72809d;\n                        }\n                    }\n                }\n\n                .scrollable-panel-container {\n                    background: inherit;\n                }\n\n                .quick-access-list {\n                    li {\n                        line-height: 30px;\n                        padding: 0 10px 0 30px;\n                        white-space: nowrap;\n                        overflow: hidden;\n                        user-select: none;\n                        position: relative;\n                        cursor: pointer;\n\n                        &.quick-list-header {\n                            cursor: default;\n                            line-height: 12px;\n                            font-weight: 600;\n                            font-size: 12px;\n                            color: var(--bs-secondary-color);\n                            padding: 0 0 0 10px;\n                            margin: 8px 0 5px 0;\n                        }\n\n                        span {\n                            vertical-align: middle;\n\n                            &.node-icon {\n                                left: 10px;\n                                box-shadow: none;\n\n                                i.icon-command {\n                                    background-position: -283px -37px;\n                                    width: 16px;\n                                    height: 16px;\n                                    top: 0;\n                                    left: 0;\n                                }\n                            }\n\n                            &.path-item {\n                                font-size: 14px;\n                            }\n\n                            &.path-section,\n                            &.path-node,\n                            &.path-command,\n                            &.path-folder {\n                                color: var(--bs-secondary-color);\n                            }\n\n                            &.path-folder {\n                                &:before {\n                                    width: 16px;\n                                    height: 16px;\n                                    background-position: 0 -20px;\n                                    display: inline-block;\n                                    vertical-align: middle;\n                                    margin: 0 5px;\n                                }\n                            }\n\n                            &.path-node,\n                            &.path-leaf {\n                                &:before {\n                                    display: inline-block;\n                                    color: var(--bs-secondary-color);\n                                    margin: 0 3px;\n                                    content: '/';\n                                }\n\n                                &.path-leaf-command:before {\n                                    display: none;\n                                }\n                            }\n\n                            &.path-section + .path-node {\n                                &:before {\n                                    display: inline-block;\n                                    margin: 0 3px;\n                                    content: '\\2192';\n                                }\n                            }\n\n                            &.path-command {\n                                &:after {\n                                    display: inline-block;\n                                    margin: 0 3px;\n                                    content: '\\2192';\n                                }\n                            }\n                        }\n\n                        &.selected {\n                            background: var(--oc-selection);\n\n                            span {\n                                &,\n                                &.path-section,\n                                &.path-node {\n                                    color: white;\n                                }\n\n                                &:before {\n                                    color: white;\n                                }\n\n                                &.path-folder:before {\n                                    background-position: 0 -73px;\n                                }\n\n                                &.node-icon {\n                                    i.icon-command {\n                                        background-position: -283px -53px;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n\n                &.has-results {\n                    .input-container {\n                        > input {\n                            border-bottom-width: 1px;\n                            padding-bottom: 10px;\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/css/_search.css",
    "content": ".component-backend-treeview {\n    .treeview-search-control {\n        height: 40px;\n        background: var(--oc-primary-bg);\n        color: var(--bs-body-color);\n        position: relative;\n\n        &:before {\n            display: block;\n            width: 15px;\n            height: 15px;\n            position: absolute;\n            background-position: -238px 0;\n            top: 14px;\n            right: 11px;\n        }\n\n        > input {\n            display: block;\n            border: none;\n            height: 40px;\n            width: 100%;\n            border-top: 1px solid var(--oc-primary-border);\n            background: transparent;\n            color: var(--bs-body-color);\n            outline: none;\n            -webkit-appearance: none;\n            padding-left: 10px;\n            padding-right: 35px;\n            position: relative;\n            z-index: 0;\n\n            &:focus {\n                border-top: 1px solid #72809d;\n            }\n        }\n\n        > button {\n            display: none;\n            -webkit-appearance: none;\n            border: none;\n            border-radius: 30px;\n            position: absolute;\n            width: 30px;\n            height: 30px;\n            right: 6px;\n            top: 6px;\n            background: transparent;\n            font-size: 0;\n            color: transparent;\n            padding: 0;\n            outline: none;\n\n            &:focus {\n                background: var(--oc-toolbar-hover-bg);\n            }\n\n            &:before {\n                display: block;\n                width: 11px;\n                height: 11px;\n                position: absolute;\n                background-position: -253px 0;\n                top: 10px;\n                right: 9px;\n            }\n        }\n\n        &.search-enabled {\n            &:before {\n                display: none;\n            }\n\n            > button {\n                display: block;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/css/_section.css",
    "content": ".component-backend-treeview {\n    ul {\n        li {\n            > .item-label-outer-container {\n                &.section-label {\n                    background: var(--oc-editor-section-bg);\n                    margin: 0 -8px;\n                    padding: 0 8px;\n                    position: sticky;\n                    margin-bottom: 2px;\n                    z-index: 3;\n                    top: 0;\n\n                    .node-label {\n                        cursor: pointer;\n                        color: var(--oc-editor-section-color);\n                        font-weight: 600;\n                        padding-left: 19px;\n                    }\n                }\n\n                > .item-label-container.has-menu {\n                    .node-menu-trigger.section-create-button {\n                        right: 30px;\n                        z-index: 2;\n\n                        &:before {\n                            width: 11px;\n                            height: 11px;\n                            top: 9px;\n                            left: 9px;\n                            position: absolute;\n                            background-position: -267px -40px;\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/css/treeview.css",
    "content": "@import \"_node.css\";\n@import \"_section.css\";\n@import \"_node-expand-toggle.css\";\n@import \"_node-icon.css\";\n@import \"_node-menu.css\";\n@import \"_drag-drop.css\";\n@import \"_search.css\";\n@import \"_quick-access.css\";\n\n.component-backend-treeview {\n    background: var(--oc-editor-bg);\n    user-select: none;\n\n    .scrollable-panel-container {\n        background: var(--oc-editor-bg);\n\n        &.scrolled:before {\n            z-index: 1;\n        }\n    }\n\n    .treeview-container {\n        ul {\n            padding: 0;\n            margin: 0;\n            list-style: none;\n            font-size: 0;\n        }\n\n        .scrollable {\n            > div {\n                margin: 0 8px 8px 8px;\n\n                /* Important: this element must be an offset\n                   parent for .item-label-container inside nodes */\n\n                position: relative;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/js/classes/draganddrop.js",
    "content": "import utils from './utils.js';\n\n/*\n * TreeView drag and drop class\n */\nexport class TreeviewDragAndDrop {\n    constructor() {\n        this.$dragRoot = null;\n        this.$draggedNode = null;\n        this.$dragIndicator = null;\n        this.dragModeMove = false;\n        this.dragModeSort = false;\n        this.$lastParentNode = null;\n        this.$scrollable = null;\n        this.treePageTop = null;\n        this.treePageBottom = null;\n        this.scrollTimer = null;\n        this.rootNodeList = null;\n    }\n\n    isAllowedTargetForCustomExternalDrop(ev) {\n        var $li = $(ev.target).closest('li');\n\n        if ($li.hasClass('no-move-drop') || !$li.hasClass('custom-external-drop')) {\n            return false;\n        }\n\n        return $li;\n    }\n\n    isAllowedTarget(ev) {\n        if (!this.$dragRoot || !this.$draggedNode) {\n            return false;\n        }\n\n        if ($(ev.target).closest('li').hasClass('root-node') && !(!this.dragModeSort && this.dragModeMove)) {\n            // Do not allow dropping to a root node except the case\n            // when it is Move mode and not Sort mode.\n\n            return false;\n        }\n\n        if (this.dragModeMove && $(ev.target).closest('li').hasClass('no-move-drop')) {\n            return false;\n        }\n\n        if (this.dragModeMove && !this.dragModeSort && this.targetIsTheParent(ev.target)) {\n            // Do not allow moving to the same parent\n            return false;\n        }\n\n        if (this.$draggedNode.has(ev.target).length > 0) {\n            // Do not allow dropping to children\n            // nodes\n            return false;\n        }\n\n        if (!this.$dragRoot.has(ev.target).length > 0) {\n            // Do not allow dropping to nodes\n            // belonging to other root nodes than\n            // the dragged node.\n            return false;\n        }\n\n        if (!this.dragModeMove && this.targetHasDifferentParent(ev.target)) {\n            // Do not allow dropping to other parents\n            // if the Move option is not enabled.\n            return false;\n        }\n\n        var $targetNode = $(ev.target).closest('li'),\n            targetIsCollapsed = $targetNode.hasClass('collapsed-node');\n\n        if (\n            !this.dragModeMove &&\n            this.isBelowTargetMidline(ev, $targetNode) &&\n            this.nodeHasChildNodes($targetNode) &&\n            !targetIsCollapsed\n        ) {\n            // In the Sort only mode - do not allow dropping below expanded nodes\n            // with child nodes.\n\n            return false;\n        }\n\n        return true;\n    }\n\n    nodeHasChildNodes($node) {\n        return !$node.hasClass('no-child-nodes');\n    }\n\n    targetHasDifferentParent(target) {\n        var targetParent = this.getParentNode($(target).closest('li')).get(0);\n\n        for (var index = 0; index < this.$draggedNode.length; index++) {\n            var $currentDraggedNode = $(this.$draggedNode.get(index)),\n                draggedParentNode = this.getParentNode($currentDraggedNode).get(0);\n\n            if (draggedParentNode === targetParent) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    targetIsTheParent(target) {\n        var targetParent = $(target).closest('li').get(0);\n\n        for (var index = 0; index < this.$draggedNode.length; index++) {\n            var $currentDraggedNode = $(this.$draggedNode.get(index)),\n                draggedParentNode = this.getParentNode($currentDraggedNode).get(0);\n\n            if (draggedParentNode === targetParent) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    isBelowTargetMidline(ev, $targetNode) {\n        var $labelContainer = $targetNode.find('.item-label-container'),\n            targetPageMid = $labelContainer.height() / 2 + $labelContainer.offset().top;\n\n        return ev.pageY > targetPageMid;\n    }\n\n    getTargetDropAreaThird(ev, $targetNode) {\n        var $labelContainer = $targetNode.find('.item-label-container'),\n            thirdHeight = $labelContainer.height() / 3,\n            delta = ev.pageY - $labelContainer.offset().top;\n\n        if (delta > 2 * thirdHeight) {\n            return 3;\n        }\n\n        if (delta > thirdHeight) {\n            return 2;\n        }\n\n        return 1;\n    }\n\n    cleanAndInitNodeList() {\n        var $cleanedNodes = $([]);\n        const self = this;\n\n        this.$draggedNode.each(function() {\n            var $node = $(this),\n                $selectedParent = $node.parent().parents('li[data-treenode].selected-node').last(),\n                $actualNode = $selectedParent.length !== 0 ? $selectedParent : $node;\n\n            if ($cleanedNodes.index($actualNode) === -1) {\n                $cleanedNodes = $cleanedNodes.add($actualNode);\n            }\n        });\n\n        this.$draggedNode = $cleanedNodes;\n    }\n\n    extractDroppedNodesData() {\n        var result = [];\n        const self = this;\n\n        this.$draggedNode.each(function() {\n            var node = this,\n                nodeInfo = utils.findNodeInfoByKey(self.rootNodeList, node.getAttribute('data-unique-key'));\n\n            if (nodeInfo) {\n                result.push(nodeInfo);\n            }\n        });\n\n        return result;\n    }\n\n    getParentNode($targetNode) {\n        return $targetNode.parent().closest('li[data-treenode]');\n    }\n\n    alignDragIndicator($targetNode, position) {\n        var $labelContainer = $targetNode.find('> .item-label-outer-container > .item-label-container');\n\n        this.$dragIndicator\n            .css('top', $labelContainer.position().top)\n            .width($labelContainer.width())\n            .attr('data-drop-position', position);\n    }\n\n    handleCustomExternalDrag(ev) {\n        var $customDropTarget = this.isAllowedTargetForCustomExternalDrop(ev);\n        if (!$customDropTarget) {\n            return;\n        }\n\n        if (this.$lastParentNode) {\n            this.$lastParentNode.removeClass('drop-target-parent');\n        }\n\n        this.$lastParentNode = $customDropTarget;\n        this.$lastParentNode.addClass('drop-target-parent');\n\n        // Prevent default to allow drop\n        //\n        ev.preventDefault();\n    }\n\n    handleSortDragOver($targetNode, ev) {\n        var result = {\n            parentType: 'drop-parent'\n        };\n\n        if (this.isBelowTargetMidline(ev, $targetNode)) {\n            this.alignDragIndicator($targetNode, 'below');\n            result.indexType = 'below';\n        }\n        else {\n            this.alignDragIndicator($targetNode, 'above');\n            result.indexType = 'above';\n        }\n\n        return result;\n    }\n\n    handleTreeDragOver($targetNode, ev) {\n        var third = this.getTargetDropAreaThird(ev, $targetNode),\n            result = {\n                parentType: 'drop-parent'\n            };\n\n        if (this.$lastParentNode) {\n            this.$lastParentNode.removeClass('drop-target-parent');\n        }\n\n        this.$lastParentNode = this.getParentNode($targetNode);\n\n        // The top third of the target - offer to drop\n        // above the target node, to the same parent.\n        //\n        if (third == 1) {\n            $targetNode.removeClass('drop-target-parent');\n            this.$lastParentNode.addClass('drop-target-parent');\n\n            this.alignDragIndicator($targetNode, 'above');\n            result.indexType = 'above';\n            return result;\n        }\n\n        var noChildNodes = !this.nodeHasChildNodes($targetNode);\n\n        // The bottom third of the target without child nodes or with\n        // collapsed subnodes - offer to drop below the target node,\n        // to the same parent.\n        //\n        if (third == 3 && (noChildNodes || $targetNode.hasClass('collapsed-node'))) {\n            $targetNode.removeClass('drop-target-parent');\n            this.$lastParentNode.addClass('drop-target-parent');\n\n            this.alignDragIndicator($targetNode, 'below');\n            result.indexType = 'below';\n            return result;\n        }\n\n        $targetNode.addClass('drop-target-parent');\n        result.parentType = 'this';\n\n        // The middle third of the target without child nodes -\n        // offer to drop inside the target node.\n        //\n        if (noChildNodes) {\n            this.$dragIndicator.removeAttr('data-drop-position');\n            result.indexType = 'first';\n            return result;\n        }\n\n        // The middle third of the target with child nodes -\n        // offer to drop inside the target node, above the\n        // first child node.\n        //\n\n        // If the node is collapsed - hide the drag indicator\n        //\n        if ($targetNode.hasClass('collapsed-node')) {\n            this.$dragIndicator.removeAttr('data-drop-position');\n            result.indexType = 'first';\n            return result;\n        }\n\n        result.indexType = 'first';\n\n        $targetNode = $targetNode.find('ul[data-subtree]:first li[data-treenode]:first');\n        this.alignDragIndicator($targetNode, 'above');\n\n        return result;\n    }\n\n    handleMoveDragOver($targetNode, ev) {\n        var result = {\n            parentType: 'this',\n            indexType: 'first'\n        };\n\n        $targetNode.addClass('drop-target-parent');\n\n        return result;\n    }\n\n    handleDrag(ev) {\n        var $targetNode = $(ev.target).closest('li');\n\n        if (!this.dragModeMove && this.dragModeSort) {\n            // Sorting nodes within a parent node\n            //\n            return this.handleSortDragOver($targetNode, ev);\n        }\n\n        if (this.dragModeMove && !this.dragModeSort) {\n            // Moving nodes between parents\n            //\n            return this.handleMoveDragOver($targetNode, ev);\n        }\n\n        // Moving and sorting nodes\n        //\n        return this.handleTreeDragOver($targetNode, ev);\n    }\n\n    monitorDragScroll(ev) {\n        if (this.scrollTimer !== null) {\n            return;\n        }\n\n        const self = this;\n\n        if (ev.pageY - this.treePageTop <= 20) {\n            this.scrollTimer = setTimeout(function() {\n                self.$scrollable.get(0).scrollTop -= 6;\n                self.scrollTimer = null;\n            }, 1);\n        }\n\n        if (this.treePageBottom - ev.pageY <= 20) {\n            this.scrollTimer = setTimeout(function() {\n                self.$scrollable.get(0).scrollTop += 6;\n                self.scrollTimer = null;\n            }, 1);\n        }\n    }\n\n    setupScrollMonitoring(ev) {\n        this.$scrollable = $(ev.target).closest('.scrollable');\n\n        this.treePageTop = this.$scrollable.parent().offset().top;\n        this.treePageBottom = this.treePageTop + this.$scrollable.parent().height();\n    }\n\n    clear() {\n        if (this.$lastParentNode) {\n            this.$lastParentNode.removeClass('drop-target-parent');\n        }\n\n        if (!this.$dragIndicator) {\n            return;\n        }\n\n        this.$dragIndicator.removeAttr('data-drop-position');\n        this.$dragRoot.removeClass('drop-target-parent');\n        this.$dragRoot.find('li.drop-target-parent').removeClass('drop-target-parent');\n\n        this.$dragRoot = null;\n        this.$draggedNode = null;\n        this.$dragIndicator = null;\n        this.dragModeSort = false;\n        this.dragModeMove = false;\n        this.rootNodeList = null;\n    }\n\n    dragStart(ev, nodeComponent) {\n        if (nodeComponent.dragAndDropCustom) {\n            ev.treeNodeData = nodeComponent.nodeData;\n            ev.stopPropagation();\n            nodeComponent.$emit('customdragstart', ev);\n            return;\n        }\n\n        ev.dataTransfer.dropEffect = 'move';\n        ev.dataTransfer.setData('text', ev.target.id);\n\n        this.rootNodeList = nodeComponent.getRootNodeData().nodes;\n\n        var $startNode = $(ev.target),\n            draggingSelectedNode = $startNode.hasClass('selected-node');\n\n        this.$dragRoot = $startNode.closest('li.root-node');\n\n        if (!draggingSelectedNode) {\n            // If the node being dragged is not currently selected,\n            // drag only that node. Drag all selected nodes otherwise.\n            //\n            this.$draggedNode = $startNode;\n        }\n        else {\n            // There can be multiple selected nodes but we drag\n            // only visible nodes, ignoring nodes in collapsed\n            // parents. This is simpler and safer for the user.\n            //\n            this.$draggedNode = this.$dragRoot.find('li[data-treenode].selected-node');\n        }\n\n        // Sorting for multi-selection is not supported\n        //\n        this.dragModeSort = this.$draggedNode.length === 1 && this.$dragRoot.hasClass('drag-sortable');\n\n        this.dragModeMove = this.$dragRoot.hasClass('drag-movable');\n\n        this.setupScrollMonitoring(ev);\n\n        var $treeviewRoot = this.$dragRoot.closest('.component-backend-treeview');\n        this.$dragIndicator = $treeviewRoot.find('.drag-indicator');\n        ev.stopPropagation();\n\n        // For multi-node operations we want to ignore leaf nodes\n        // which parent nodes participate in the move operation.\n        //\n        // Selected nodes before cleaning:\n        // Node 1\n        //   Node 2\n        // Node 3\n        //\n        // After cleaning:\n        // Node 1\n        // Node 3\n        //\n        if (draggingSelectedNode) {\n            this.cleanAndInitNodeList();\n        }\n\n        if (this.$draggedNode.length > 1 && !/Edge/.test(navigator.userAgent)) {\n            var $imgContainer = $treeviewRoot.find('.treeview-ghost-image-container'),\n                $dragImage = $imgContainer.find('img[data-multi-drag-image]');\n\n            $imgContainer.addClass('snapshot');\n            ev.dataTransfer.setDragImage($dragImage.get(0), 5, 0);\n            $imgContainer.removeClass('snapshot');\n        }\n    }\n\n    onDragOver(ev) {\n        if (!this.$dragIndicator) {\n            // Custom drag and drop session\n            //\n            this.handleCustomExternalDrag(ev);\n\n            return;\n        }\n\n        this.monitorDragScroll(ev);\n\n        if (!this.isAllowedTarget(ev)) {\n            this.$dragIndicator.removeAttr('data-drop-position');\n\n            if (this.$lastParentNode) {\n                this.$lastParentNode.removeClass('drop-target-parent');\n            }\n\n            return;\n        }\n\n        ev.dataTransfer.dropEffect = 'move';\n\n        // Prevent default to allow drop\n        //\n        ev.preventDefault();\n\n        this.handleDrag(ev);\n    }\n\n    onDragEnter(ev) {\n        if (!this.$dragIndicator) {\n            // Custom drag and drop session\n            //\n            this.clear();\n\n            return;\n        }\n\n        if (!this.isAllowedTarget(ev)) {\n            return;\n        }\n\n        // Prevent default to allow drop\n        //\n        ev.preventDefault();\n    }\n\n    onDragLeave(ev) {\n        if (!this.$dragIndicator) {\n            this.clear();\n\n            // Custom drag and drop session\n            //\n            return;\n        }\n\n        if (!this.isAllowedTarget(ev)) {\n            return;\n        }\n\n        $(ev.target).closest('li').removeClass('drop-target-parent');\n    }\n\n    onDragEnd(ev) {\n        this.clear();\n    }\n\n    onDrop(ev, node) {\n        if (!this.$dragIndicator) {\n            // Custom drag and drop session\n            //\n            if (this.isAllowedTargetForCustomExternalDrop(ev)) {\n                ev.stopPropagation();\n                ev.preventDefault();\n            }\n\n            this.clear();\n            return {\n                original: 'external',\n                ev: ev\n            };\n        }\n\n        if (!this.isAllowedTarget(ev)) {\n            this.clear();\n            return null;\n        }\n\n        ev.stopPropagation();\n        ev.preventDefault();\n\n        var result = {\n            droppedNodes: this.extractDroppedNodesData(),\n            to: this.handleDrag(ev)\n        };\n\n        this.clear();\n\n        return result;\n    }\n\n    completeDrop(dropData, node) {\n        var targetNodeList = [],\n            targetIndex = 0,\n            parentNode = null;\n\n        switch (dropData.to.parentType) {\n            case 'drop-parent':\n                targetNodeList = node.parentNodeList;\n                parentNode = node.$parent;\n                break;\n            case 'this':\n                if (typeof node.nodeData.nodes === 'undefined') {\n                    // Vue 3: Direct assignment is reactive\n                    node.nodeData.nodes = [];\n                }\n\n                targetNodeList = node.nodeData.nodes;\n                parentNode = node;\n                node.expand();\n                break;\n            default:\n                throw new Error('Invalid parent type: ' + dropData.to.parentType);\n        }\n\n        switch (dropData.to.indexType) {\n            case 'above':\n                targetIndex = node.indexInParent;\n                break;\n            case 'below':\n                targetIndex = node.indexInParent + 1;\n                break;\n            case 'first':\n                targetIndex = 0;\n                break;\n            default:\n                throw new Error('Invalid index type: ' + dropData.to.indexType);\n        }\n\n        dropData.droppedNodes.forEach(function(droppedNodeData) {\n            var originalNode = droppedNodeData.nodeData;\n\n            targetNodeList.splice(targetIndex, 0, originalNode);\n\n            var indexToDelete = droppedNodeData.parentArray.indexOf(originalNode);\n            droppedNodeData.parentArray.splice(indexToDelete, 1);\n        });\n    }\n\n    mouseDown(ev) {\n        // Stop the mousedown event for draggable nodes\n        // if this is not a touch device. On touch devices,\n        // we do not support drag and drop.\n\n        var $closestNode = $(ev.target).closest('li');\n\n        if ($closestNode.attr('draggable') !== 'true') {\n            return;\n        }\n\n        if ($.oc.isTouchEnabled()) {\n            return;\n        }\n\n        ev.stopPropagation();\n    }\n}\n\nexport const dragAndDrop = new TreeviewDragAndDrop();\nexport default dragAndDrop;\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/js/classes/index.js",
    "content": "/*\n * TreeView classes entry point\n */\nimport utils, { TreeviewUtils } from './utils.js';\nimport navigation, { TreeviewNavigation } from './navigation.js';\nimport dragAndDrop, { TreeviewDragAndDrop } from './draganddrop.js';\nimport Selection from './selection.js';\n\nexport {\n    utils,\n    TreeviewUtils,\n    navigation,\n    TreeviewNavigation,\n    dragAndDrop,\n    TreeviewDragAndDrop,\n    Selection\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/js/classes/navigation.js",
    "content": "/*\n * TreeView navigation class\n */\nexport class TreeviewNavigation {\n    findNodeIndex(nodeArr, node) {\n        return nodeArr.indexOf(node);\n    }\n\n    getAllVisibleNodes(treeviewElement) {\n        var allNodes = treeviewElement.querySelectorAll('li');\n\n        return Array.prototype.slice.call(allNodes);\n    }\n\n    getToggleButton($node) {\n        return $node.find('> .item-label-outer-container > .item-label-container button.node-toggle-control');\n    }\n\n    navigateNext(treeviewElement, currentFocus, ev) {\n        var nodeArr = this.getAllVisibleNodes(treeviewElement),\n            index = this.findNodeIndex(nodeArr, currentFocus);\n\n        if (index === -1 || index === nodeArr.length - 1) {\n            return;\n        }\n\n        nodeArr[index + 1].focus();\n        ev.preventDefault();\n        ev.stopPropagation();\n\n        return 'selection-changed';\n    }\n\n    navigatePrev(treeviewElement, currentFocus, ev) {\n        var nodeArr = this.getAllVisibleNodes(treeviewElement),\n            index = this.findNodeIndex(nodeArr, currentFocus);\n\n        if (index === -1 || index === 0) {\n            return;\n        }\n\n        nodeArr[index - 1].focus();\n        ev.preventDefault();\n        ev.stopPropagation();\n\n        return 'selection-changed';\n    }\n\n    navigateRight(currentFocus) {\n        var $currentFocus = $(currentFocus);\n\n        if ($currentFocus.hasClass('no-child-nodes')) {\n            return;\n        }\n\n        if ($currentFocus.hasClass('collapsed-node')) {\n            this.getToggleButton($currentFocus).click();\n        }\n        else {\n            $currentFocus.find('> ul:first li:first').focus();\n        }\n    }\n\n    navigateLeft(currentFocus) {\n        var $currentFocus = $(currentFocus);\n\n        if (!$currentFocus.hasClass('no-child-nodes') && $currentFocus.hasClass('expanded-node')) {\n            return this.getToggleButton($currentFocus).click();\n        }\n\n        $currentFocus.parent().closest('li').focus();\n    }\n\n    navigateHome(treeviewElement, ev) {\n        var nodeArr = this.getAllVisibleNodes(treeviewElement);\n\n        if (nodeArr.length === 0) {\n            return;\n        }\n\n        ev.stopPropagation();\n        ev.preventDefault();\n        return nodeArr[0].focus();\n    }\n\n    navigateEnd(treeviewElement, ev) {\n        var nodeArr = this.getAllVisibleNodes(treeviewElement);\n\n        if (nodeArr.length === 0) {\n            return;\n        }\n\n        ev.stopPropagation();\n        ev.preventDefault();\n        return nodeArr[nodeArr.length - 1].focus();\n    }\n\n    expandSameLevelSiblings(treeviewElement, currentFocus) {\n        var $currentFocus = $(currentFocus),\n            $siblings = $currentFocus.siblings('li.collapsed-node:not(.no-child-nodes)');\n\n        if ($currentFocus.hasClass('collapsed-node') && !$currentFocus.hasClass('no-child-nodes')) {\n            this.getToggleButton($currentFocus).click();\n        }\n\n        this.getToggleButton($siblings).click();\n    }\n\n    navigateNextStartingWith(char, treeviewElement, currentFocus) {\n        if (!char || typeof char !== 'string') {\n            return;\n        }\n\n        var nodeArr = this.getAllVisibleNodes(treeviewElement),\n            index = this.findNodeIndex(nodeArr, currentFocus);\n\n        if (index === -1) {\n            return;\n        }\n\n        char = char.toLowerCase();\n\n        var wrappedArray = [];\n\n        if (index === nodeArr.length - 1) {\n            wrappedArray = nodeArr;\n        }\n        else {\n            wrappedArray = nodeArr.slice(index + 1).concat(nodeArr.slice(0, index));\n        }\n\n        for (var nodeIndex = 0; nodeIndex < wrappedArray.length; nodeIndex++) {\n            var text = $(wrappedArray[nodeIndex].querySelector('.node-label')).text();\n\n            if (text.substring(0, 1).toLowerCase() == char) {\n                wrappedArray[nodeIndex].focus();\n                return;\n            }\n        }\n    }\n}\n\nexport const navigation = new TreeviewNavigation();\nexport default navigation;\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/js/classes/selection.js",
    "content": "/*\n * TreeView selection class\n */\nexport class Selection {\n    keySet;\n    selectedKeys;\n\n    constructor() {\n        this.keySet = new Set();\n        this.selectedKeys = [];\n    }\n\n    syncKeys() {\n        this.selectedKeys.splice(0, this.selectedKeys.length);\n\n        this.keySet.forEach((key) => {\n            this.selectedKeys.push(key);\n        });\n    }\n\n    has(key) {\n        return this.keySet.has(key);\n    }\n\n    set(key) {\n        this.keySet.clear();\n        this.keySet.add(key);\n        this.syncKeys();\n    }\n\n    add(key) {\n        this.keySet.add(key);\n        this.syncKeys();\n    }\n\n    addOrInvert(key) {\n        if (this.keySet.has(key)) {\n            this.keySet.delete(key);\n        }\n        else {\n            this.keySet.add(key);\n        }\n\n        this.syncKeys();\n    }\n\n    getElementMidVertical($element) {\n        return ($element.offset() + $element.height()) / 2;\n    }\n\n    addRange(key, clickedElement, prevSelectedElement) {\n        const $currentFocus = $(prevSelectedElement).find('> .item-label-outer-container');\n        const $clickedElement = $(clickedElement).find('> .item-label-outer-container');\n        const currentFocusRoot = $currentFocus.closest('li.root-node');\n        const clickedRoot = $clickedElement.closest('li.root-node');\n\n        if (!currentFocusRoot.length || !clickedRoot.length) {\n            return;\n        }\n\n        if (currentFocusRoot.get(0) !== clickedRoot.get(0)) {\n            return;\n        }\n\n        const treeNodes = currentFocusRoot\n            .get(0)\n            .querySelectorAll('li[data-treenode] > .item-label-outer-container');\n        const treeNodesArr = [...treeNodes];\n        const currentFocusIndex = treeNodesArr.indexOf($currentFocus.get(0));\n        const clickedIndex = treeNodesArr.indexOf($clickedElement.get(0));\n        const startIndex = Math.min(currentFocusIndex, clickedIndex);\n        const endIndex = Math.max(currentFocusIndex, clickedIndex);\n\n        for (let index = startIndex; index <= endIndex; index++) {\n            const nodeElement = $(treeNodesArr[index]).closest('li[data-treenode]');\n\n            if (!nodeElement.hasClass('selectable-node')) {\n                continue;\n            }\n\n            const key = nodeElement.attr('data-unique-key');\n\n            if (index == startIndex || index == endIndex) {\n                this.add(key);\n            }\n            else {\n                this.addOrInvert(key);\n            }\n        }\n    }\n}\n\nexport default Selection;\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/js/classes/utils.js",
    "content": "/*\n * TreeView utilities class\n */\nexport class TreeviewUtils {\n    fuzzySearch(query, str) {\n        var queryArray = query.split(' '),\n            wordsFound = 0;\n\n        for (var index = 0; index < queryArray.length; index++) {\n            if (str.indexOf(queryArray[index]) !== -1) {\n                wordsFound++;\n            }\n        }\n\n        return wordsFound == queryArray.length;\n    }\n\n    compareAnything(value1, value2, invertor) {\n        if (value1 > value2) {\n            return 1 * invertor;\n        }\n\n        if (value1 < value2) {\n            return -1 * invertor;\n        }\n\n        return 0;\n    }\n\n    compareStrings(str1, str2, invertor) {\n        if (str1.localeCompare !== undefined) {\n            return str1.localeCompare(str2) * invertor;\n        }\n\n        return this.compareAnything(str1, str2, invertor);\n    }\n\n    ungroupGroupedNodes(nodes) {\n        for (var index = 0; index < nodes.length; index++) {\n            var node = nodes[index],\n                subnodes = this.getSystemData(node, 'groupedNodes');\n\n            if (subnodes && subnodes.length > 0) {\n                // Vue 3: Direct assignment is reactive\n                node.systemData.groupedNodes = [];\n            }\n\n            // Traversing subnodes is not needed. When we group\n            // nodes, we keep the original node list intact, so\n            // it is enough to clear systemData.groupedNodes for\n            // all top-level nodes to ungroup everything.\n        }\n\n        return nodes;\n    }\n\n    makeFolderNodesForPath(folderNodes, path, folderIcon) {\n        var pathParts = path.split('/'),\n            keyPath = [],\n            lastParent = null,\n            keyPrefix = 'treegroupby-folder-';\n\n        for (var index = 0; index < pathParts.length; index++) {\n            var currentPart = keyPrefix + pathParts[index];\n            keyPath = keyPath.concat(currentPart);\n\n            var existingFolder = $.oc.vueUtils.findObjectByKeyPath(\n                folderNodes,\n                keyPath,\n                'systemData.groupedNodes',\n                'uniqueKey'\n            );\n            if (!existingFolder) {\n                var folder = {\n                    label: pathParts[index],\n                    uniqueKey: currentPart,\n                    icon: folderIcon,\n                    userData: {},\n                    systemData: {\n                        treeviewGroupFolder: true,\n                        groupedNodes: []\n                    },\n                    nodes: []\n                };\n\n                if (lastParent) {\n                    this.getSystemData(lastParent, 'groupedNodes').push(folder);\n                }\n                else {\n                    folderNodes.push(folder);\n                }\n\n                lastParent = folder;\n            }\n            else {\n                lastParent = existingFolder;\n            }\n        }\n\n        return lastParent;\n    }\n\n    filterPathParts(pathParts, regex) {\n        if (!regex) {\n            return pathParts;\n        }\n\n        var result = [];\n        for (var index = 0; index < pathParts.length; index++) {\n            if (regex.test(pathParts[index])) {\n                result.push(pathParts[index]);\n            }\n        }\n\n        return result;\n    }\n\n    pathBeginsWith(path1, path2) {\n        if (path1.length < path2.length) {\n            return -1;\n        }\n\n        for (var index = 0; index < path2.length; index++) {\n            if (path2[index] != path1[index]) {\n                return false;\n            }\n        }\n\n        return path2.length;\n    }\n\n    findParentNodeForPath(nodes, endIndex, path, groupBy, regex) {\n        var pathParts = this.filterPathParts(path.split('/'), regex),\n            lastParent = null,\n            maxDepth = -1;\n\n        for (var index = 0; index < endIndex; index++) {\n            var node = nodes[index],\n                nodePath = this.getUserData(node, groupBy);\n\n            if (!nodePath) {\n                continue;\n            }\n\n            var nodePathParts = this.filterPathParts(nodePath.split('/'), regex),\n                depth = this.pathBeginsWith(pathParts, nodePathParts);\n\n            if (depth > maxDepth) {\n                maxDepth = depth;\n                lastParent = node;\n            }\n        }\n\n        return lastParent;\n    }\n\n    groupNodesToFolders(nodes, groupBy, folderIcon) {\n        var ungroupedNodes = this.ungroupGroupedNodes(nodes),\n            folderNodes = [],\n            result = [];\n\n        for (var index = 0; index < ungroupedNodes.length; index++) {\n            var node = ungroupedNodes[index],\n                path = this.getUserData(node, groupBy);\n\n            if (path && path != '/') {\n                var nodeFolder = this.makeFolderNodesForPath(folderNodes, path, folderIcon);\n\n                nodeFolder.systemData = nodeFolder.systemData || {};\n                nodeFolder.systemData.groupedNodes = nodeFolder.systemData.groupedNodes || [];\n                nodeFolder.systemData.groupedNodes.push(node);\n            }\n            else {\n                result.push(node);\n            }\n        }\n\n        return folderNodes.concat(result);\n    }\n\n    groupNodesByNesting(nodes, groupBy, groupByRegex) {\n        var ungroupedNodes = this.ungroupGroupedNodes(nodes),\n            result = [],\n            regex = groupByRegex ? new RegExp(groupByRegex, 'i') : null;\n\n        for (var index = 0; index < ungroupedNodes.length; index++) {\n            var node = ungroupedNodes[index],\n                path = this.getUserData(node, groupBy);\n\n            if (path && path != '/') {\n                var parentNode = this.findParentNodeForPath(ungroupedNodes, index, path, groupBy, regex);\n\n                if (parentNode) {\n                    parentNode.systemData = parentNode.systemData || {};\n                    parentNode.systemData.groupedNodes = parentNode.systemData.groupedNodes || [];\n                    parentNode.systemData.groupedNodes.push(node);\n                }\n                else {\n                    result.push(node);\n                }\n            }\n            else {\n                // We change keys for root nodes to enforce the reactive update. Missing this\n                // results in root nodes not being redrawn when switching between folders/nesting\n                // grouping modes.\n                //\n                this.setSystemData(node, 'updateKey', $.oc.domIdManager.generate('node-update-key'));\n                result.push(node);\n            }\n        }\n\n        return result;\n    }\n\n    getSystemData(node, systemDataProperty) {\n        if (!node.systemData) {\n            return undefined;\n        }\n\n        return node.systemData[systemDataProperty];\n    }\n\n    setSystemData(node, systemDataProperty, value) {\n        // Vue 3: Direct assignment is reactive\n        if (node.systemData === undefined) {\n            node.systemData = {};\n        }\n\n        node.systemData[systemDataProperty] = value;\n    }\n\n    getUserData(node, userDataProperty) {\n        if (!node.userData) {\n            return undefined;\n        }\n\n        return node.userData[userDataProperty];\n    }\n\n    getAllUserDataValues(node) {\n        if (!node.userData) {\n            return [];\n        }\n\n        var result = [];\n        for (var prop in node.userData) {\n            if (node.userData.hasOwnProperty(prop)) {\n                var value = node.userData[prop];\n                if (typeof value === 'string') {\n                    result.push(node.userData[prop]);\n                }\n            }\n        }\n\n        return result;\n    }\n\n    applyNodeSearch(nodes, searchQuery) {\n        if (!searchQuery.length) {\n            return nodes;\n        }\n\n        const self = this;\n\n        function traverse(nodes, searchQuery, isGrouped) {\n            var result = false;\n\n            for (var index = 0; index < nodes.length; index++) {\n                var currentNode = nodes[index],\n                    nodeHasQuery = false,\n                    childNodes = [];\n\n                if (!self.getSystemData(currentNode, 'treeviewGroupFolder')) {\n                    var searchData = currentNode.label,\n                        allValues = self.getAllUserDataValues(currentNode);\n\n                    if (currentNode.userData && currentNode.userData.nodeSearchData) {\n                        searchData = currentNode.userData.nodeSearchData;\n                    }\n\n                    searchData += allValues.join(' ');\n\n                    nodeHasQuery = self.fuzzySearch(searchQuery, searchData.toLowerCase());\n                }\n\n                if (currentNode.groupBy || isGrouped) {\n                    childNodes = self.getSystemData(currentNode, 'groupedNodes') || [];\n                }\n                else {\n                    childNodes = currentNode.nodes ? currentNode.nodes : [];\n                }\n\n                var childrenHasQuery = traverse(childNodes, searchQuery, isGrouped || currentNode.groupBy);\n\n                // Vue 3: Direct assignment is reactive\n                if (currentNode.systemData === undefined) {\n                    currentNode.systemData = {};\n                }\n\n                if (childrenHasQuery || nodeHasQuery) {\n                    currentNode.systemData.visibleInSearch = true;\n                    result = true;\n                }\n                else {\n                    currentNode.systemData.visibleInSearch = false;\n                }\n            }\n\n            return result;\n        }\n\n        traverse(nodes, searchQuery);\n    }\n\n    groupNodes(nodes, rootNode, defaultFolderIcon) {\n        // This method implements the automatic node grouping, which\n        // corresponds to the groupBy=folders and groupBy=nesting options.\n        //\n        var result = nodes.slice();\n\n        // TODO: groupByRegex is only supported for the nesting mode.\n        //\n\n        result = this.sortNodes(result, rootNode.groupBy);\n\n        if (rootNode.groupByMode == 'folders') {\n            result = this.groupNodesToFolders(result, rootNode.groupBy, rootNode.groupByFolderIcon || defaultFolderIcon);\n        }\n\n        if (rootNode.groupByMode == 'nesting') {\n            result = this.groupNodesByNesting(result, rootNode.groupBy, rootNode.groupByRegex);\n        }\n\n        return result;\n    }\n\n    groupSectionNodes(sectionNodes, defaultFolderIcon) {\n        for (var index = 0; index < sectionNodes.length; index++) {\n            var node = sectionNodes[index];\n\n            // Vue 3: Direct assignment is reactive\n            if (!node.systemData) {\n                node.systemData = {};\n            }\n\n            if (!node.groupBy) {\n                node.systemData.groupedNodes = [];\n                continue;\n            }\n\n            var nodes = this.groupNodes(node.nodes || [], node, defaultFolderIcon);\n\n            node.systemData.groupedNodes = nodes;\n        }\n\n        return sectionNodes;\n    }\n\n    sortNodes(nodes, sortQuery) {\n        var sortProperties = sortQuery.split(',');\n        const self = this;\n\n        sortProperties.forEach(function(element, index, array) {\n            var property = element.trim(),\n                propertyParts = property.split(':');\n\n            array[index] = {\n                property: propertyParts[0],\n                invertor: propertyParts[1] === 'desc' ? -1 : 1\n            };\n        });\n\n        return nodes.sort(function(node1, node2) {\n            if (node1.userData === undefined) {\n                throw new Error('Unable to sort treeview nodes. userData is not defined for node ' + node1.label);\n            }\n\n            if (node2.userData === undefined) {\n                throw new Error('Unable to sort treeview nodes. userData is not defined for node ' + node2.label);\n            }\n\n            // Always put automatically created folders to the top\n            //\n            if (self.getSystemData(node1, 'treeviewGroupFolder') && !self.getSystemData(node2, 'treeviewGroupFolder')) {\n                return -1;\n            }\n\n            if (!self.getSystemData(node1, 'treeviewGroupFolder') && self.getSystemData(node2, 'treeviewGroupFolder')) {\n                return 1;\n            }\n\n            if (self.getSystemData(node1, 'treeviewGroupFolder') && self.getSystemData(node2, 'treeviewGroupFolder')) {\n                return self.compareStrings(\n                    node1.systemData.treeviewGroupFolder,\n                    node2.systemData.treeviewGroupFolder,\n                    1\n                );\n            }\n\n            for (var index = 0; index < sortProperties.length; index++) {\n                var propertyParts = sortProperties[index],\n                    node1Prop = node1.userData[propertyParts.property],\n                    node2Prop = node2.userData[propertyParts.property],\n                    cmpResult = 0;\n\n                if (node1Prop === undefined) {\n                    throw new Error(\n                        'Unable to sort treeview nodes. Property ' +\n                            propertyParts.property +\n                            ' is not defined in userData of ' +\n                            node1.label\n                    );\n                }\n\n                if (node2Prop === undefined) {\n                    throw new Error(\n                        'Property ' + propertyParts.property + ' is not defined in userData of ' + node2.label\n                    );\n                }\n\n                if (typeof node1Prop === 'string') {\n                    cmpResult = self.compareStrings(node1Prop, node2Prop, propertyParts.invertor);\n                }\n                else {\n                    cmpResult = self.compareAnything(node1Prop, node2Prop, propertyParts.invertor);\n                }\n\n                if (cmpResult !== 0) {\n                    return cmpResult;\n                }\n            }\n        });\n    }\n\n    findNodeObjectByKeyPath(nodes, keyPathArray) {\n        return $.oc.vueUtils.findObjectByKeyPath(nodes, keyPathArray, 'nodes', 'uniqueKey');\n    }\n\n    findNodeObjectByKeyPathInSections(sections, keyPathArray) {\n        var result = null;\n\n        for (var index = 0; index < sections.length; index++) {\n            result = this.findNodeObjectByKeyPath(sections[index].nodes, keyPathArray);\n            if (result) {\n                return result;\n            }\n        }\n\n        return result;\n    }\n\n    makeKeyPath(parentNodes, node) {\n        var result = [];\n        for (var index = 0; index < parentNodes.length; index++) {\n            result.push(parentNodes[index].uniqueKey);\n        }\n\n        result.push(node.uniqueKey);\n    }\n\n    findNodeByKey(nodes, key) {\n        var result = $.oc.vueUtils.findObjectsByProperty(nodes, 'nodes', 'uniqueKey', key);\n\n        if (!result.length) {\n            return null;\n        }\n\n        return result[0];\n    }\n\n    findNodeAndPathByKey(nodes, key) {\n        function traverse(nodeList, path) {\n            for (var index = 0; index < nodeList.length; index++) {\n                var node = nodeList[index];\n\n                if (node.uniqueKey === key) {\n                    return {\n                        node: node,\n                        path: path\n                    };\n                }\n\n                var childData = traverse(node.nodes || [], path.concat([node]));\n                if (childData) {\n                    return childData;\n                }\n            }\n        }\n\n        return traverse(nodes, []);\n    }\n\n    findNodeAndPathByKeyInSections(sections, key) {\n        var result = null;\n\n        for (var index = 0; index < sections.length; index++) {\n            result = this.findNodeAndPathByKey(sections[index].nodes, key);\n            if (result) {\n                return result;\n            }\n        }\n\n        return result;\n    }\n\n    findNodeByKeyInSections(sections, key) {\n        var result = null;\n\n        for (var index = 0; index < sections.length; index++) {\n            result = this.findNodeByKey(sections[index].nodes, key);\n            if (result) {\n                return result;\n            }\n        }\n\n        return result;\n    }\n\n    findNodePathByKey(nodes, key) {\n        const self = this;\n\n        function traverse(objects, path, isBranchGrouped) {\n            for (var index = 0; index < objects.length; index++) {\n                var object = objects[index],\n                    currentPropertyValue = object.uniqueKey,\n                    isGrouped = isBranchGrouped || object.groupBy;\n\n                if (currentPropertyValue === key) {\n                    return path.concat(currentPropertyValue);\n                }\n\n                var childNodes = isGrouped ? self.getSystemData(object, 'groupedNodes') : object.nodes,\n                    childPath = traverse(childNodes || [], path.concat(currentPropertyValue), isGrouped);\n\n                if (childPath) {\n                    return childPath;\n                }\n            }\n        }\n\n        return traverse(nodes, []);\n    }\n\n    findNodePathByKeyInSections(sections, key) {\n        var path = null;\n\n        for (var index = 0; index < sections.length; index++) {\n            path = this.findNodePathByKey(sections[index].nodes, key);\n            if (path) {\n                return path;\n            }\n        }\n\n        return path;\n    }\n\n    findNodeComponentByKey(nodes, key) {\n        for (var index = 0; index < nodes.length; index++) {\n            if (nodes[index].nodeData.uniqueKey == key) {\n                return nodes[index];\n            }\n        }\n    }\n\n    findNodeComponentByKeyRecursive(node, key) {\n        // Vue 3: Use childNodeRefs instead of $children\n        var childRefs = node.childNodeRefs || [];\n        for (var index = 0; index < childRefs.length; index++) {\n            var childrenComponent = childRefs[index];\n            if (!childrenComponent) continue;\n\n            if (childrenComponent.nodeData.uniqueKey == key) {\n                return childrenComponent;\n            }\n\n            var childNode = this.findNodeComponentByKeyRecursive(childrenComponent, key);\n            if (childNode) {\n                return childNode;\n            }\n        }\n    }\n\n    findRootNodeByKey(nodes, key) {\n        for (var index = 0; index < nodes.length; index++) {\n            var node = nodes[index];\n\n            if (node.uniqueKey === key) {\n                return node;\n            }\n        }\n    }\n\n    deleteNodeByKey(nodes, key) {\n        var parentInfo = $.oc.vueUtils.findObjectParentInfoByProperty(nodes, 'nodes', 'uniqueKey', key);\n\n        if (parentInfo) {\n            parentInfo.parentArray.splice(parentInfo.index, 1);\n            return true;\n        }\n\n        return false;\n    }\n\n    deleteNodeByKeyInSections(sections, key) {\n        for (var index = 0; index < sections.length; index++) {\n            if (this.deleteNodeByKey(sections[index].nodes, key)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    updateRootNodes(nodes) {\n        for (var index = 0; index < nodes.length; index++) {\n            var node = nodes[index];\n            this.setSystemData(node, 'updateKey', $.oc.domIdManager.generate('node-update-key'));\n        }\n    }\n\n    updateRootNodesInSections(sections) {\n        for (var index = 0; index < sections.length; index++) {\n            this.updateRootNodes(sections[index].nodes);\n        }\n    }\n\n    getFlattenNodes(nodes) {\n        return $.oc.vueUtils.getFlattenNodes(nodes, 'nodes');\n    }\n\n    getLastGroupedPathSegment(label, node, isFolder, displayProperty) {\n        if (isFolder || node.branchGroupByMode !== 'folders' || node.isRoot) {\n            return label;\n        }\n\n        if (displayProperty && node.branchGroupBy !== displayProperty) {\n            if (\n                !node.branchGroupFolderDisplayPathProps ||\n                node.branchGroupFolderDisplayPathProps.indexOf(displayProperty) === -1\n            ) {\n                return label;\n            }\n        }\n\n        var parts = label.split('/');\n        return parts[parts.length - 1];\n    }\n\n    findNodeInfoByKey(nodes, key) {\n        var parentInfo = $.oc.vueUtils.findObjectParentInfoByProperty(nodes, 'nodes', 'uniqueKey', key);\n\n        if (parentInfo) {\n            return {\n                parentArray: parentInfo.parentArray,\n                index: parentInfo.index,\n                nodeData: parentInfo.object\n            };\n        }\n\n        return null;\n    }\n\n    findNodeInfoByKeyInSections(sections, key) {\n        var result = null;\n\n        for (var index = 0; index < sections.length; index++) {\n            result = this.findNodeInfoByKey(sections[index].nodes, key);\n            if (result) {\n                return result;\n            }\n        }\n\n        return result;\n    }\n\n    getQuickAccessLeafNonFolderItems(parentNodes, path) {\n        var result = [];\n        const self = this;\n\n        function traverse(nodes, path, isBranchGrouped) {\n            for (var index = 0; index < nodes.length; index++) {\n                var node = nodes[index],\n                    isGrouped = isBranchGrouped || node.groupBy;\n\n                var childNodes = isGrouped ? self.getSystemData(node, 'groupedNodes') : node.nodes,\n                    isFolder = self.getSystemData(node, 'treeviewGroupFolder'),\n                    isLeaf =\n                        (!Array.isArray(childNodes) || !childNodes.length) && node.icon !== 'folder' && !isFolder;\n\n                if (isLeaf) {\n                    // Ignore invisible nodes and root nodes\n                    //\n                    if (!self.getSystemData(node, 'visibleInSearch') || path.length == 1 || !node.selectable) {\n                        continue;\n                    }\n\n                    if (node.hideInQuickAccess) {\n                        continue;\n                    }\n\n                    result.push({\n                        node: node,\n                        path: path\n                    });\n                }\n                else {\n                    traverse(childNodes, path.concat([node]), isGrouped);\n                }\n            }\n        }\n\n        traverse(parentNodes, path);\n\n        return result;\n    }\n\n    findQuickAccessNodes(sections, maxItems, searchQuery, defaultFolderIcon) {\n        var result = [];\n\n        for (var index = 0; index < sections.length; index++) {\n            var section = sections[index],\n                groupedNodes = this.groupSectionNodes(section.nodes, defaultFolderIcon);\n\n            this.applyNodeSearch(groupedNodes, searchQuery);\n\n            // We are working with a copy of the tree,\n            // modifying objects is fine.\n            //\n            section.isSection = true;\n\n            // In-place version of .concat\n            result.push.apply(result, this.getQuickAccessLeafNonFolderItems(section.nodes, [section], section.label));\n        }\n\n        return result.slice(0, maxItems);\n    }\n\n    getQuickAccessLeafCommands(menuItems, path, labelAccumulator) {\n        var result = [];\n\n        function traverse(items, itemPath, label) {\n            for (var index = 0; index < items.length; index++) {\n                var item = items[index];\n\n                if (item.type === 'separator') {\n                    continue;\n                }\n\n                if (!Array.isArray(item.items) || !item.items.length) {\n                    result.push({\n                        item: item,\n                        path: itemPath,\n                        pathLabel: label + item.label\n                    });\n                }\n                else {\n                    traverse(item.items, itemPath.concat([item]), label + item.label);\n                }\n            }\n        }\n\n        traverse(menuItems, path, labelAccumulator);\n\n        return result;\n    }\n\n    findQuickAccessCommands(sections, searchQuery) {\n        var commands = [];\n\n        for (var index = 0; index < sections.length; index++) {\n            var section = sections[index];\n\n            if (!Array.isArray(section.menuItems) || !section.menuItems.length) {\n                continue;\n            }\n\n            commands.push.apply(commands, this.getQuickAccessLeafCommands(section.menuItems, [section], section.label));\n        }\n\n        if (!searchQuery.length) {\n            return commands;\n        }\n\n        var result = [];\n        for (var index = 0; index < commands.length; index++) {\n            var command = commands[index];\n\n            if (this.fuzzySearch(searchQuery, command.pathLabel.toLowerCase())) {\n                result.push(command);\n            }\n        }\n\n        return result;\n    }\n}\n\nexport const utils = new TreeviewUtils();\nexport default utils;\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/js/node.js",
    "content": "import { nextTick } from 'vue';\nimport { utils, dragAndDrop } from './classes/index.js';\n\n/*\n * Vue treeview node\n */\nexport default {\n    props: {\n        nodeData: {\n            type: Object,\n            required: true,\n            validator: function (value) {\n                if (typeof value !== 'object') {\n                    return false;\n                }\n\n                if (typeof value.uniqueKey !== 'string') {\n                    console.error('node.uniqueKey must be string', value);\n                    return false;\n                }\n\n                if (value.nodes !== undefined && !Array.isArray(value.nodes)) {\n                    console.error('node.nodes must be an array', value);\n                    return false;\n                }\n\n                if (value.selectable !== undefined && typeof value.selectable !== 'boolean') {\n                    console.error('node.selectable must be boolean', value);\n                    return false;\n                }\n\n                if (value.hasApiMenuItems !== undefined && typeof value.hasApiMenuItems !== 'boolean') {\n                    console.error('node.hasApiMenuItems must be boolean', value);\n                    return false;\n                }\n\n                if (typeof value.label !== 'string' || value.label === undefined) {\n                    console.error('node.label must be string', value);\n                    return false;\n                }\n\n                if (value.icon !== undefined) {\n                    if (\n                        value.icon !== 'folder' &&\n                        (typeof value.icon !== 'object' || !value.icon.hasOwnProperty('cssClass'))\n                    ) {\n                        console.error('node.icon must be an object with cssClass property', value);\n                        return false;\n                    }\n                }\n\n                if (value.menuitems !== undefined && !Array.isArray(value.menuitems)) {\n                    console.error('node.menuitems must be an array', value);\n                    return false;\n                }\n\n                if (value.topLevelMenuitems !== undefined && !Array.isArray(value.topLevelMenuitems)) {\n                    console.error('node.topLevelMenuitems must be an array', value);\n                    return false;\n                }\n\n                if (value.userData !== undefined && typeof value.userData !== 'object') {\n                    console.error('node.userData must be an object', value);\n                    return false;\n                }\n\n                if (value.sortBy !== undefined && typeof value.sortBy !== 'string') {\n                    console.error('node.sortBy must be string', value);\n                    return false;\n                }\n\n                if (value.displayMode !== undefined) {\n                    if (typeof value.displayMode !== 'string') {\n                        console.error('node.displayMode must be string', value);\n                        return false;\n                    }\n\n                    if (['list', 'tree'].indexOf(value.displayMode) === -1) {\n                        console.error('node.displayMode must be list or tree', value);\n                        return false;\n                    }\n                }\n\n                if (value.dragAndDropMode !== undefined && !Array.isArray(value.dragAndDropMode)) {\n                    console.error('node.dragAndDropMode must be an array', value);\n                    return false;\n                }\n\n                if (value.groupBy !== undefined && typeof value.groupBy !== 'string') {\n                    console.error('node.groupBy must be string', value);\n                    return false;\n                }\n\n                if (value.multiSelect !== undefined && typeof value.multiSelect !== 'boolean') {\n                    console.error('node.multiSelect must be boolean', value);\n                    return false;\n                }\n\n                if (value.groupByRegex && typeof value.groupByRegex !== 'string') {\n                    console.error('node.groupByRegex must be string', value);\n                    return false;\n                }\n\n                if (value.groupByMode !== undefined) {\n                    if (typeof value.groupByMode !== 'string') {\n                        console.error('node.groupByMode must be string', value);\n                        return false;\n                    }\n\n                    if (['folders', 'nesting'].indexOf(value.groupByMode) === -1) {\n                        console.error('node.groupByMode must be folders or nesting', value);\n                        return false;\n                    }\n                }\n\n                if (value.groupByFolderIcon !== undefined) {\n                    if (\n                        typeof value.groupByFolderIcon !== 'object' ||\n                        !value.groupByFolderIcon.hasOwnProperty('cssClass')\n                    ) {\n                        console.error('node.groupByFolderIcon must be an object with cssClass property', value);\n                        return false;\n                    }\n                }\n\n                if (value.displayProperty !== undefined) {\n                    if (typeof value.displayProperty !== 'string') {\n                        console.error('node.displayProperty must be string', value);\n                        return false;\n                    }\n                }\n\n                if (value.noMoveDrop !== undefined && typeof value.noMoveDrop !== 'boolean') {\n                    console.error('node.noMoveDrop must be boolean', value);\n                    return false;\n                }\n\n                return true;\n            }\n        },\n        isRoot: {\n            type: Boolean,\n            default: false\n        },\n        branchDisplayMode: {\n            type: String,\n            default: 'tree',\n            validator: function (value) {\n                return ['list', 'tree'].indexOf(value) !== -1;\n            }\n        },\n        branchMenuitems: Array,\n        branchDragAndDropMode: {\n            type: Array\n        },\n        branchSortBy: {\n            type: String\n        },\n        parentKeyPath: {\n            type: Array\n        },\n        selectedKeys: {\n            type: Array\n        },\n        treeUniqueKey: {\n            type: String,\n            required: true\n        },\n        indexInParent: {\n            type: Number,\n            required: true\n        },\n        parentNodeList: {\n            type: Array,\n            required: true\n        },\n        branchGroupBy: {\n            type: String\n        },\n        branchGroupByMode: {\n            type: String\n        },\n        branchGroupByRegex: {\n            type: String\n        },\n        branchDisplayProperty: {\n            type: String\n        },\n        branchGroupFolderDisplayPathProps: {\n            type: Array\n        },\n        branchMultiSelect: {\n            type: Boolean\n        },\n        readonly: {\n            type: Boolean,\n            default: false\n        },\n        searchQuery: '',\n        store: Object,\n        groupedNodes: Array\n    },\n    data: function () {\n        return {\n            expanded: false,\n            menuId: null,\n            menuButtonId: null,\n            menuLabelId: null,\n            contextMenuVisible: false,\n            clickCounter: 0,\n            clickTimer: null,\n            childNodeRefs: []\n        };\n    },\n    computed: {\n        hasChildNodes: function computeHasChildNodes() {\n            if (this.groupedNodes === undefined) {\n                return false;\n            }\n\n            if (!this.searchQuery.length) {\n                return !!this.groupedNodes.length;\n            }\n\n            for (var index = 0; index < this.groupedNodes.length; index++) {\n                var node = this.groupedNodes[index];\n\n                if (node.systemData === undefined) {\n                    return true;\n                }\n\n                if (node.systemData.visibleInSearch) {\n                    return true;\n                }\n            }\n\n            return false;\n        },\n\n        cssClass: function computeCssClass() {\n            var displayMode = this.branchDisplayMode;\n\n            if (displayMode == 'list' && this.branchGroupBy) {\n                displayMode = 'tree';\n            }\n\n            var result = 'mode-' + displayMode;\n\n            if (this.isRoot) {\n                result += ' root-node';\n            }\n\n            if (this.expanded) {\n                result += ' expanded-node';\n\n                if (this.hasChildNodes) {\n                    result += ' expanded-with-children';\n                }\n            }\n            else {\n                result += ' collapsed-node';\n            }\n\n            if (this.isSelected) {\n                result += ' selected-node';\n            }\n\n            if (this.branchMultiSelect) {\n                result += ' multi-select';\n            }\n\n            if (this.nodeData.selectable) {\n                result += ' selectable-node';\n            }\n\n            if (this.nextNodeIsSelected) {\n                result += ' next-is-selected';\n            }\n\n            if (!this.hasChildNodes) {\n                result += ' no-child-nodes';\n            }\n            else {\n                result += ' has-child-nodes';\n            }\n\n            if (this.dragAndDropSortable) {\n                result += ' drag-sortable';\n            }\n\n            if (this.dragAndDropMovable) {\n                result += ' drag-movable';\n            }\n\n            if (this.contextMenuVisible) {\n                result += ' context-menu-visible';\n            }\n\n            if (this.nodeData.noMoveDrop === true) {\n                result += ' no-move-drop';\n            }\n\n            if (this.dragAndDropCustomExternal) {\n                result += ' custom-external-drop';\n            }\n\n            return result;\n        },\n\n        nodeMenuitems: function computeNodeMenuitems() {\n            return this.isRoot ? this.nodeData.topLevelMenuitems : this.branchMenuitems;\n        },\n\n        labelContainerCssClass: function computeLabelContainerCssClass() {\n            var result = '';\n\n            if (this.nodeData.icon) {\n                result += 'has-icon';\n            }\n\n            if (this.nodeMenuitems || this.nodeData.hasApiMenuItems) {\n                result += ' has-menu';\n            }\n\n            return result;\n        },\n\n        keyPath: function computeKeyPath() {\n            return this.parentKeyPath.concat(this.nodeData.uniqueKey);\n        },\n\n        keyPathString: function computeKeyPathString() {\n            return JSON.stringify(this.keyPath);\n        },\n\n        expandStatusStorageKey: function computeStorageKeyString() {\n            return this.storageKeyBase + '-' + this.nodeData.uniqueKey;\n        },\n\n        storageKeyBase: function computeStorageKeyBase() {\n            return 'tree-expand-status-' + this.treeUniqueKey;\n        },\n\n        isSelected: function isSelected() {\n            return this.selectedKeys.indexOf(this.nodeData.uniqueKey) !== -1;\n        },\n\n        isAriaExpanded: function computeIsExpanded() {\n            // Return string, not Boolean.\n            //\n            return this.expanded ? 'true' : 'false';\n        },\n\n        nodeDomId: function computeNodeDomId() {\n            // Node ID can change when the tree rebuilds.\n            // It is used only for drag-and-drop sessions\n            // and should not be used for accessing nodes\n            // by external code.\n            //\n            return $.oc.domIdManager.generate('treenode');\n        },\n\n        isDraggable: function computeIsDraggable() {\n            return this.dragAndDropSortable || this.dragAndDropMovable || this.dragAndDropCustom;\n        },\n\n        dragAndDropSortable: function computeIsDragAndDropSortable() {\n            return Array.isArray(this.branchDragAndDropMode) && this.branchDragAndDropMode.indexOf('sort') !== -1;\n        },\n\n        dragAndDropMovable: function computeIsDragAndDropSortable() {\n            return Array.isArray(this.branchDragAndDropMode) && this.branchDragAndDropMode.indexOf('move') !== -1;\n        },\n\n        dragAndDropCustom: function computeIsDragAndDropSortable() {\n            return Array.isArray(this.branchDragAndDropMode) && this.branchDragAndDropMode.indexOf('custom') !== -1;\n        },\n\n        dragAndDropCustomExternal: function computeIsDragAndDropSortable() {\n            return (\n                Array.isArray(this.branchDragAndDropMode) && this.branchDragAndDropMode.indexOf('custom-external') !== -1\n            );\n        },\n\n        sortedNodes: function computeSortedNodes() {\n            if (!this.branchSortBy) {\n                return this.groupedNodes;\n            }\n\n            return utils.sortNodes(this.groupedNodes, this.branchSortBy);\n        },\n\n        nodeText: function computeNodeText() {\n            var isFolder = utils.getSystemData(this.nodeData, 'treeviewGroupFolder');\n\n            if (!isFolder && this.branchDisplayProperty && !this.isRoot) {\n                if (!this.nodeData.userData) {\n                    throw new Error(\n                        'Node user data is not set. Cannot use the displayProperty value. ' + this.keyPathString\n                    );\n                }\n\n                return utils.getLastGroupedPathSegment(\n                    this.nodeData.userData[this.branchDisplayProperty],\n                    this,\n                    isFolder,\n                    this.branchDisplayProperty\n                );\n            }\n\n            return utils.getLastGroupedPathSegment(this.nodeData.label, this, isFolder);\n        },\n\n        nodeDataObj: function computeNodeData() {\n            return this.nodeData;\n        },\n\n        icon: function computeIcon() {\n            if (typeof this.nodeData.icon === 'object') {\n                return this.nodeData.icon;\n            }\n\n            if (this.isFolderIcon) {\n                return {\n                    cssClass: 'backend-icon-background treeview-folder',\n                    backgroundColor: 'transparent'\n                };\n            }\n\n            return null;\n        },\n\n        nextNodeIsSelected: function nextNodeIsSelected() {\n            var lastParentIndex = this.parentNodeList.length - 1;\n            var nextNode = null;\n\n            if (this.hasChildNodes && this.expanded) {\n                nextNode = this.getFirstVisibleChildNode();\n            }\n            else {\n                if (this.indexInParent < lastParentIndex) {\n                    nextNode = this.parentNodeList[this.indexInParent + 1];\n                }\n            }\n\n            if (!nextNode) {\n                return false;\n            }\n\n            return this.selectedKeys.indexOf(nextNode.uniqueKey) !== -1;\n        },\n\n        isFolderIcon: function computeIsFolderIcon() {\n            return this.nodeData.icon === 'folder';\n        }\n    },\n    methods: {\n        expand: function () {\n            this.expanded = true;\n\n            localStorage.setItem(this.expandStatusStorageKey, '1');\n        },\n\n        collapse: function () {\n            this.expanded = false;\n\n            localStorage.removeItem(this.expandStatusStorageKey);\n        },\n\n        getFirstVisibleChildNode: function () {\n            for (var index = 0; index < this.sortedNodes.length; index++) {\n                var node = this.sortedNodes[index];\n                if (!this.searchQuery.length || (!node.systemData || node.systemData.visibleInSearch)) {\n                    return node;\n                }\n            }\n\n            return null;\n        },\n\n        collapseChildren: function () {\n            function traverse(nodeRefs) {\n                for (var index = 0; index < nodeRefs.length; index++) {\n                    var currentNode = nodeRefs[index];\n                    if (!currentNode) continue;\n\n                    currentNode.collapse();\n                    traverse(currentNode.childNodeRefs || []);\n                }\n            }\n\n            traverse(this.childNodeRefs);\n            this.collapse();\n        },\n\n        expandParents: function () {\n            var lastParent = this;\n\n            while (lastParent.$parent && lastParent.$parent.nodeDataObj) {\n                lastParent.expand();\n                lastParent = lastParent.$parent;\n            }\n        },\n\n        notifySelectionChanged: function (uniqueKey, type) {\n            this.$emit('nodeselected', {\n                uniqueKey: uniqueKey ? uniqueKey : this.nodeData.uniqueKey,\n                type: type,\n                nodeEl: this.$el\n            });\n        },\n\n        getRootNodeData: function getRootNodeData() {\n            var lastParent = this;\n\n            while (lastParent.$parent && lastParent.$parent.nodeDataObj) {\n                lastParent = lastParent.$parent;\n            }\n\n            return lastParent.nodeDataObj;\n        },\n\n        scrollIntoView: function scrollIntoView(callback) {\n            var thisElement = this.$el;\n            nextTick(function () {\n                thisElement.scrollIntoView({ behavior: 'smooth' });\n\n                if (callback) {\n                    callback();\n                }\n            });\n        },\n\n        focus: function focus() {\n            this.$el.focus();\n        },\n\n        triggerSelected: function triggerSelected(ev) {\n            this.onSingleClick(ev);\n        },\n\n        onExpandToggleClick: function () {\n            if (this.expanded) {\n                this.collapse();\n            }\n            else {\n                this.expand();\n            }\n        },\n\n        onNodeClick: function (event) {\n            var isFolderNode = this.isFolderIcon;\n\n            if (!isFolderNode) {\n                isFolderNode = (!this.nodeData.selectable || this.isRoot) && this.hasChildNodes;\n            }\n\n            if (!isFolderNode) {\n                this.onSingleClick(event);\n                return;\n            }\n\n            this.clickCounter++;\n            if (this.clickCounter == 1) {\n                var that = this;\n\n                this.clickTimer = setTimeout(function() {\n                    that.clickCounter = 0;\n                    that.onSingleClick(event);\n                }, 200);\n\n                return;\n            }\n\n            clearTimeout(this.clickTimer);\n            this.clickCounter = 0;\n            this.onDoubleClick(event);\n        },\n\n        onDoubleClick: function (event) {\n            if ($(document.body).hasClass('drag')) {\n                return;\n            }\n\n            if (this.isFolderIcon) {\n                this.onExpandToggleClick();\n                return;\n            }\n\n            this.onSingleClick(event);\n        },\n\n        onSingleClick: function (event) {\n            if ($(document.body).hasClass('drag')) {\n                return;\n            }\n\n            if (this.readonly) {\n                return;\n            }\n\n            if (this.nodeData.selectable && this.branchMultiSelect) {\n                if (event.metaKey || event.ctrlKey) {\n                    this.notifySelectionChanged(null, 'add');\n                    this.$el.focus();\n                    return;\n                }\n\n                if (event.shiftKey) {\n                    this.notifySelectionChanged(null, 'range');\n                    this.$el.focus();\n                    return;\n                }\n            }\n\n            var ev = $.Event('treviewnodeclick', {\n                // See also treeview.js onQuickAccessNodeSelected()\n\n                treeviewData: {\n                    keyPath: this.keyPath,\n                    uniqueKey: this.nodeData.uniqueKey,\n                    nodeData: this.nodeData,\n                    rootNodeData: this.getRootNodeData()\n                }\n            });\n\n            if (!this.nodeData.selectable) {\n                this.$emit('nonselectablenodeclick', ev);\n            }\n\n            if (!this.nodeData.selectable || this.isRoot) {\n                if (this.hasChildNodes) {\n                    this.onExpandToggleClick();\n                    return;\n                }\n\n                return;\n            }\n\n            this.$emit('nodeclick', ev);\n\n            if (ev.isDefaultPrevented()) {\n                return;\n            }\n\n            this.notifySelectionChanged();\n            this.$el.focus();\n        },\n\n        onDrop: function (ev) {\n            var dropData = dragAndDrop.onDrop(ev);\n\n            if (!dropData) {\n                return;\n            }\n\n            if (dropData.original === 'external') {\n                this.$emit('externaldrop', {\n                    ev: dropData.ev,\n                    toKeyPath: this.keyPath,\n                    toUniqueKey: this.nodeData.uniqueKey,\n                    nodeData: this.nodeData\n                });\n                return;\n            }\n\n            var parent = dropData.to.parentType == 'drop-parent' ? this.$parent : this,\n                ev = $.Event('nodedrop', {\n                    toKeyPath: parent.keyPath,\n                    movedNodes: dropData.droppedNodes,\n                    movedToNode: parent.nodeData\n                });\n\n            this.$emit('nodedrop', ev);\n            if (ev.isDefaultPrevented()) {\n                return;\n            }\n\n            dragAndDrop.completeDrop(dropData, this);\n        },\n\n        onDragStart: function onDragStart(ev) {\n            dragAndDrop.dragStart(ev, this);\n        },\n\n        onMenuTriggerClick: function onMenuTriggerClick() {\n            var data = {\n                node: this,\n                type: 'trigger'\n            };\n\n            this.$emit('nodemenutriggerclick', data);\n        },\n\n        onContextMenu: function onContextMenu(ev) {\n            if (this.readonly) {\n                return;\n            }\n\n            if (!this.nodeMenuitems && !this.nodeData.hasApiMenuItems) {\n                return;\n            }\n\n            var data = {\n                node: this,\n                type: 'contextmenu',\n                ev: ev\n            };\n\n            this.$emit('nodemenutriggerclick', data);\n\n            ev.preventDefault();\n        },\n\n        onMenuShown: function onMenuShown() {\n            $(this.$refs.contextmenuTrigger).attr('aria-expanded', 'true');\n            this.contextMenuVisible = true;\n        },\n\n        onMenuHidden: function onMenuHidden() {\n            $(this.$refs.contextmenuTrigger).removeAttr('aria-expanded');\n            this.contextMenuVisible = false;\n        },\n\n        onMenuClosedWithEsc: function () {\n            var that = this;\n            nextTick(function () {\n                that.$refs.contextmenuTrigger.focus();\n            });\n        }\n    },\n    mounted: function onMounted() {\n        this.expanded = localStorage.getItem(this.expandStatusStorageKey) == '1';\n        this.menuId = $.oc.domIdManager.generate('dropdown-menu');\n        this.menuButtonId = $.oc.domIdManager.generate('treeview-menu-button');\n        this.menuLabelId = $.oc.domIdManager.generate('treeview-menu-label');\n\n        if (this.dragAndDropSortable && this.branchSortBy) {\n            throw new Error(\n                'Nodes belonging to branches with SORT drag and drop option cannot be sortable using the sortBy option. Node path: ' +\n                this.keyPathString\n            );\n        }\n\n        if (this.dragAndDropMovable && this.branchDisplayMode == 'list') {\n            throw new Error(\n                'Treeview branch in LIST mode cannot have the MOVE drag and drop option enabled. Node path: ' +\n                this.keyPathString\n            );\n        }\n\n        if (this.branchGroupBy && this.branchDisplayMode !== 'list') {\n            throw new Error(\n                'Treeview branch in LIST mode cannot have the groupBy property set. Node path: ' + this.keyPathString\n            );\n        }\n\n        if (this.branchDragAndDropMode && this.branchGroupBy) {\n            throw new Error(\n                'Treeview drag and drop is not supported for branches with enabled groupBy option. Node path: ' +\n                this.keyPathString\n            );\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/js/quickaccess.js",
    "content": "import { utils } from './classes/index.js';\n\n/*\n * Vue treeview node\n */\nexport default {\n    props: {\n        uniqueKey: String,\n        sections: Array,\n        maxItems: {\n            type: Number,\n            default: 50\n        },\n        defaultFolderIcon: Object\n    },\n    data: function data() {\n        return {\n            labelId: $.oc.domIdManager.generate('treeview-quickaccess-label'),\n            searchQuery: '',\n            selectedIndex: -1,\n            nodes: [],\n            commands: [],\n            searchTimeoutId: null\n        };\n    },\n    computed: {\n        searchQueryTrimmed: function computeSearchQueryTrimmed() {\n            return this.searchQuery.toLowerCase().trim();\n        },\n\n        resizable: function computeResizable() {\n            if (this.totalItemCount > 0 || this.searchQueryTrimmed.length === 0) {\n                return true;\n            }\n\n            return 'horizontal';\n        },\n\n        modalUniqueKey: function computeModalUniqueKey() {\n            return this.uniqueKey + '-quickaccess-modal';\n        },\n\n        totalItemCount: function computeTotalItemCount() {\n            return this.nodes.length + this.commands.length;\n        }\n    },\n    methods: {\n        show: function show() {\n            this.searchQuery = '';\n            this.selectedIndex = -1;\n            this.nodes = [];\n            this.commands = [];\n            this.update();\n            this.$refs.modal.show();\n        },\n\n        update: function update() {\n            this.searchTimeoutId = null;\n\n            var sections = $.oc.vueUtils.getCleanObject(this.sections);\n\n            this.updateNodes(sections);\n            this.updateCommands(sections);\n        },\n\n        updateNodes: function updateNodes(sections) {\n            this.selectedIndex = -1;\n\n            if (!this.searchQueryTrimmed.length) {\n                this.nodes = [];\n                return;\n            }\n\n            this.nodes = utils.findQuickAccessNodes(\n                sections,\n                this.maxItems,\n                this.searchQueryTrimmed,\n                this.defaultFolderIcon\n            );\n        },\n\n        updateCommands: function updateCommands(sections) {\n            this.commands = utils.findQuickAccessCommands(sections, this.searchQueryTrimmed);\n        },\n\n        getItemIsFolder: function (pathItem) {\n            return pathItem.icon === 'folder' || utils.getSystemData(pathItem, 'treeviewGroupFolder');\n        },\n\n        getPathItemText: function getPathItemText(pathItem, path) {\n            var isFolder = this.getItemIsFolder(pathItem),\n                rootItem = path[1], // 0 is the section, 1 is the root node\n                isRoot = rootItem === pathItem,\n                isSection = path[0] === pathItem;\n\n            var nodeComponentObj = {\n                branchGroupByMode: rootItem.groupByMode,\n                isRoot: rootItem === pathItem,\n                branchGroupBy: rootItem.groupBy,\n                branchGroupFolderDisplayPathProps: rootItem.groupFolderDisplayPathProps\n            };\n\n            if (!isFolder && rootItem.displayProperty && !isRoot && !isSection) {\n                return utils.getLastGroupedPathSegment(\n                    pathItem.userData[rootItem.displayProperty],\n                    nodeComponentObj,\n                    isFolder,\n                    rootItem.displayProperty\n                );\n            }\n\n            return utils.getLastGroupedPathSegment(pathItem.label, nodeComponentObj, isFolder);\n        },\n\n        getPathItemClass: function getPathItemClass(pathItem) {\n            var isFolder = this.getItemIsFolder(pathItem);\n\n            return {\n                'path-section': pathItem.isSection,\n                'path-folder': isFolder,\n                'backend-icon-background-pseudo': isFolder,\n                'path-node': !isFolder && !pathItem.isSection\n            };\n        },\n\n        scrollSelectedIntoView: function scrollSelectedIntoView() {\n            var that = this;\n            Vue.nextTick(function () {\n                var selected = $(that.$el).find('li.selected');\n\n                if (selected.length) {\n                    that.$refs.scrollablePanel.goToElement(selected.get(0), { alignBottom: true, duration: 0 });\n                }\n            });\n        },\n\n        triggerNodeSelected: function triggerNodeSelected(ev) {\n            var selectedNode = $(this.$el).find('li.selected');\n\n            if (selectedNode.hasClass('item-document')) {\n                var selectedKey = selectedNode.attr('data-node-key');\n\n                if (!selectedKey) {\n                    return;\n                }\n\n                this.$emit('nodeselected', selectedKey, ev);\n                return;\n            }\n\n            if (selectedNode.hasClass('item-command')) {\n                var href = selectedNode.attr('data-item-href'),\n                    target = selectedNode.attr('data-item-target');\n\n                if (typeof href === 'string') {\n                    window.open(href, target ? target : '_blank');\n                }\n\n                var selectedCommand = selectedNode.attr('data-command');\n\n                this.$emit('command', selectedCommand, ev);\n            }\n        },\n\n        onModalShown: function onModalShown() {\n            $(document.body).on('keydown', this.onKeyDown);\n        },\n\n        onModalHidden: function onModalHidden() {\n            $(document.body).off('keydown', this.onKeyDown);\n        },\n\n        onMouseOver: function onMouseOver(index) {\n            this.selectedIndex = index;\n        },\n\n        onClick: function onClick(ev, selectedKey) {\n            this.$emit('nodeselected', selectedKey, ev);\n            this.$refs.modal.hide();\n        },\n\n        onCommandClick: function onCommandClick(ev, command, item) {\n            this.$refs.modal.hide();\n\n            if (item.href) {\n                window.open(item.href, item.target);\n                return;\n            }\n\n            this.$emit('command', command, ev);\n        },\n\n        onKeyDown: function onKeyDown(ev) {\n            var key = 'which' in ev ? ev.which : ev.keyCode;\n\n            if (key == 40) {\n                this.selectedIndex = Math.min(this.selectedIndex + 1, this.totalItemCount - 1);\n                ev.preventDefault();\n            }\n            else if (key == 38) {\n                this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\n                ev.preventDefault();\n            }\n            else if (key == 13) {\n                this.triggerNodeSelected(ev);\n                this.$refs.modal.hide();\n            }\n\n            this.scrollSelectedIntoView();\n        }\n    },\n    watch: {\n        searchQueryTrimmed: function watchSearchQueryTrimmed() {\n            if (this.searchTimeoutId) {\n                clearTimeout(this.searchTimeoutId);\n            }\n\n            if (this.$refs.scrollablePanel) {\n                this.$refs.scrollablePanel.gotoStart();\n            }\n\n            this.selectedIndex = -1;\n            this.searchTimeoutId = setTimeout(this.update, 100);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/js/section.js",
    "content": "import { nextTick } from 'vue';\nimport { utils } from './classes/index.js';\n\n/*\n * Vue treeview section\n */\nexport default {\n    props: {\n        uniqueKey: {\n            type: String,\n            required: true\n        },\n        label: {\n            type: String,\n            required: true\n        },\n        readonly: {\n            type: Boolean,\n            default: false\n        },\n        treeUniqueKey: {\n            type: String,\n            required: true\n        },\n        selectedKeys: Array,\n        store: Object,\n        searchQuery: String,\n        menuItems: Array,\n        createMenuItems: Array,\n        nodes: Array,\n        hideSections: Boolean,\n        defaultFolderIcon: Object,\n        hasApiMenuItems: {\n            type: Boolean,\n            default: false\n        },\n        userData: Object\n    },\n    data: function () {\n        return {\n            expanded: true,\n            menuId: $.oc.domIdManager.generate('dropdown-menu'),\n            menuButtonId: $.oc.domIdManager.generate('treeview-menu-button'),\n            menuLabelId: $.oc.domIdManager.generate('treeview-menu-label'),\n            contextMenuVisible: false,\n            nodeRefs: []\n        };\n    },\n    computed: {\n        hasMenuItems: function computeHasMenuItems() {\n            return Array.isArray(this.menuItems) && this.menuItems.length;\n        },\n\n        hasCreateMenuItems: function computeHasCreateMenuItems() {\n            return Array.isArray(this.createMenuItems) && this.createMenuItems.length;\n        },\n\n        nodeMenuitems: function computeNodeMenuitems() {\n            return this.menuItems;\n        },\n\n        nodeData: function computeNodeData() {\n            var result = {};\n            if (this.userData) {\n                result = this.userData;\n            }\n\n            result.userData = this.userData;\n            result.hasApiMenuItems = this.hasApiMenuItems;\n\n            return result;\n        },\n\n        cssClass: function computeCssClass() {\n            var result = '';\n\n            if (this.expanded) {\n                result += ' expanded-node';\n            }\n            else {\n                result += ' collapsed-node';\n            }\n\n            if (!this.hideSections) {\n                result += ' mode-tree';\n            }\n\n            return result;\n        },\n\n        isAriaExpanded: function computeIsExpanded() {\n            // Return string, not Boolean.\n            //\n            return this.expanded ? 'true' : 'false';\n        },\n\n        groupedNodes: function computeGroupedNodes() {\n            return utils.groupSectionNodes(this.nodes, this.defaultFolderIcon);\n        },\n\n        filteredNodes: function computeFilteredNodes() {\n            // Instead of returning an updated tree containing\n            // only nodes satisfying the search criteria, we\n            // mark nodes as visible or invisible. Thus the\n            // tree displays the same objects and we don't need\n            // to worry about synchronizing two copies of the\n            // node tree.\n            //\n\n            utils.applyNodeSearch(this.groupedNodes, this.searchQuery);\n\n            return this.groupedNodes;\n        },\n\n        hasVisibleNodes: function hasVisibleNodes() {\n            if (!this.searchQuery.length) {\n                // Display empty sections if the\n                // search query is empty.\n                return true;\n            }\n\n            var that = this;\n            return this.filteredNodes.some(function (node) {\n                return !that.searchQuery.length || (!node.systemData || node.systemData.visibleInSearch);\n            });\n        },\n\n        expandStatusStorageKey: function computeStorageKeyString() {\n            return this.storageKeyBase + '-' + this.uniqueKey;\n        },\n\n        storageKeyBase: function computeStorageKeyBase() {\n            return 'tree-expand-status-' + this.treeUniqueKey;\n        }\n    },\n    mounted: function onMounted() {\n        if (this.hideSections) {\n            this.expanded = true;\n        }\n        else {\n            var expanded = localStorage.getItem(this.expandStatusStorageKey);\n\n            this.expanded = expanded === '1' || expanded === null;\n        }\n    },\n    methods: {\n        expand: function expanded() {\n            this.expanded = true;\n            localStorage.setItem(this.expandStatusStorageKey, this.expanded ? '1' : '0');\n        },\n\n        onMenuTriggerClick: function onMenuTriggerClick() {\n            if (this.readonly) {\n                return;\n            }\n\n            var data = {\n                node: this,\n                type: 'trigger',\n                elementType: 'section'\n            };\n\n            this.$emit('nodemenutriggerclick', data);\n        },\n\n        onCreateMenuTriggerClick: function onCreateMenuTriggerClick() {\n            var data = {\n                node: this,\n                type: 'trigger',\n                elementType: 'section',\n                sectionCreateMenu: true\n            };\n\n            this.$emit('nodemenutriggerclick', data);\n        },\n\n        onContextMenu: function onContextMenu(ev) {\n            if (this.readonly) {\n                return;\n            }\n\n            if (!this.hasMenuItems) {\n                return;\n            }\n\n            var data = {\n                node: this,\n                type: 'contextmenu',\n                ev: ev,\n                elementType: 'section'\n            };\n\n            this.$emit('nodemenutriggerclick', data);\n\n            ev.preventDefault();\n        },\n\n        onExpandToggleClick: function onExpandToggleClick() {\n            this.expanded = !this.expanded;\n\n            localStorage.setItem(this.expandStatusStorageKey, this.expanded ? '1' : '0');\n        },\n\n        onMenuShown: function onMenuShown() {\n            $(this.$refs.contextmenuTrigger).attr('aria-expanded', 'true');\n            this.contextMenuVisible = true;\n        },\n\n        onMenuHidden: function onMenuHidden() {\n            $(this.$refs.contextmenuTrigger).removeAttr('aria-expanded');\n            this.contextMenuVisible = false;\n        },\n\n        onMenuClosedWithEsc: function () {\n            var that = this;\n            nextTick(function () {\n                that.$refs.contextmenuTrigger.focus();\n            });\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/assets/js/treeview.js",
    "content": "import { nextTick } from 'vue';\nimport { Selection, utils, navigation, dragAndDrop } from './classes/index.js';\n\n/*\n * Vue treeview implementation\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Tab_Role\n * @see https://www.w3.org/WAI/GL/wiki/Using_ARIA_trees\n */\nexport default {\n    props: {\n        sections: Array,\n        ariaLabel: {\n            type: String,\n            default: ''\n        },\n        searchable: {\n            type: Boolean,\n            default: true\n        },\n        selectedUniqueKey: {\n            type: String\n        },\n        uniqueKey: {\n            type: String,\n            required: true\n        },\n        containerCssClass: {\n            type: String,\n            default: ''\n        },\n        readonly: {\n            type: Boolean,\n            default: false\n        },\n        hideSections: {\n            type: Boolean,\n            default: false\n        }\n    },\n    data: function () {\n        var selection = new Selection();\n\n        return {\n            lastSelectedNodeElement: null,\n            selection: selection,\n            selectedKeys: selection.selectedKeys,\n            searchTimeoutId: null,\n            store: {\n                contextMenu: {\n                    items: [],\n                    node: null,\n                    labeledById: null,\n                    menuId: null\n                }\n            },\n            searchQuery: '',\n            searchQueryTrimmed: '',\n            defaultFolderIcon: {\n                cssClass: 'backend-icon-background treeview-folder',\n                backgroundColor: 'transparent'\n            },\n            sectionRefs: []\n        };\n    },\n    computed: {\n        selectedNodesData: function computeSelectedNodesData() {\n            var sections = this.sections,\n                result = [];\n\n            this.selectedKeys.forEach(function (selectedKey) {\n                var nodeInfo = utils.findNodeInfoByKeyInSections(sections, selectedKey);\n\n                if (nodeInfo) {\n                    result.push(nodeInfo);\n                }\n            });\n\n            return result;\n        }\n    },\n    methods: {\n        setSelectedKey: function setSelectedKey(uniqueKey) {\n            this.selection.set(uniqueKey);\n        },\n\n        setSearchQueryTrimmed: function setSearchQueryTrimmed() {\n            this.searchTimeoutId = null;\n            this.searchQueryTrimmed = this.searchQuery.toLowerCase().trim();\n            this.displayedSections = {};\n        },\n\n        nodeKeyChanged: function nodeKeyChanged(oldValue, newValue) {\n            if (this.selectedKeys.length > 1 || this.selectedKeys.indexOf(newValue) === -1) {\n                this.selection.set(newValue);\n            }\n        },\n\n        revealNode: function revealNode(nodeUniqueKey) {\n            var path = utils.findNodePathByKeyInSections(this.sections, nodeUniqueKey),\n                thisElement = $(this.$el);\n\n            if (!path) {\n                return;\n            }\n\n            function revealNextNode(nodeRefs, index, sectionComponent) {\n                var currentKey = path[index],\n                    currentNode = utils.findNodeComponentByKey(nodeRefs, currentKey);\n\n                if (!currentNode) {\n                    return;\n                }\n\n                if (index < path.length - 1) {\n                    currentNode.expand();\n                }\n                else {\n                    var scrollableEl = thisElement.find('.scrollable').get(0);\n                    currentNode.scrollIntoView(function () {\n                        currentNode.focus();\n\n                        // A simple solution against a revealed node\n                        // being hidden behind a section element.\n                        scrollableEl.scrollTop -= 40;\n                    });\n                }\n\n                if (index < path.length - 1) {\n                    sectionComponent.expand();\n                    nextTick(function () {\n                        revealNextNode(currentNode.childNodeRefs, index + 1, sectionComponent);\n                    });\n                }\n            }\n\n            // The first level of children are sections\n            // Use sectionRefs instead of $children\n            for (var index = 0; index < this.sectionRefs.length; index++) {\n                var sectionComponent = this.sectionRefs[index];\n                if (sectionComponent) {\n                    revealNextNode(sectionComponent.nodeRefs, 0, sectionComponent);\n                }\n            }\n        },\n\n        handleKeyDown: function handleKeyDown(ev) {\n            // See w3.org treeview accessibility requirements for details.\n            //\n            var key = 'which' in ev ? ev.which : ev.keyCode,\n                currentFocus = document.activeElement;\n\n            // It is simpler to work with the DOM tree than with the node\n            // tree here.\n            //\n\n            if (!currentFocus || (currentFocus.tagName !== 'LI' && currentFocus.tagName !== 'BUTTON')) {\n                return;\n            }\n\n            var isInnerButton = currentFocus.tagName === 'BUTTON';\n            if (isInnerButton) {\n                currentFocus = $(currentFocus).closest('li').get(0);\n            }\n\n            switch (key) {\n                case 40:\n                    return navigation.navigateNext(this.$el, currentFocus, ev);\n                case 38:\n                    return navigation.navigatePrev(this.$el, currentFocus, ev);\n                case 39:\n                    return navigation.navigateRight(currentFocus);\n                case 37:\n                    return navigation.navigateLeft(currentFocus);\n                case 36:\n                    return navigation.navigateHome(this.$el, ev);\n                case 35:\n                    return navigation.navigateEnd(this.$el, ev);\n                case 106: // Asterisk\n                    return navigation.expandSameLevelSiblings(this.$el, currentFocus);\n                case 13:\n                case 32:\n                    if (isInnerButton) {\n                        return;\n                    }\n\n                    return $(currentFocus).find('> .item-label-outer-container > .item-label-container').click();\n            }\n\n            navigation.navigateNextStartingWith(ev.key, this.$el, currentFocus);\n        },\n\n        showQuickAccess: function () {\n            if (!this.readonly) {\n                this.$refs.quickAccess.show();\n            }\n        },\n\n        onKeyDown: function onKeyDown(ev) {\n            var result = this.handleKeyDown(ev);\n            this.lastSelectedNodeElement = $(document.activeElement).closest('li[data-treenode]').get(0);\n\n            if (\n                ev.shiftKey &&\n                result === 'selection-changed' &&\n                $(this.lastSelectedNodeElement).hasClass('selectable-node')\n            ) {\n                this.selection.addOrInvert(this.lastSelectedNodeElement.getAttribute('data-unique-key'));\n            }\n\n            return result;\n        },\n\n        onNodeSelected: function onNodeSelected(ev) {\n            var prevSelectedNodeElement = this.lastSelectedNodeElement;\n            this.lastSelectedNodeElement = ev.nodeEl;\n\n            if (ev.type === 'add') {\n                this.selection.addOrInvert(ev.uniqueKey);\n                return;\n            }\n\n            if (ev.type === 'range') {\n                this.selection.addRange(ev.uniqueKey, ev.nodeEl, prevSelectedNodeElement);\n                return;\n            }\n\n            this.selection.set(ev.uniqueKey);\n        },\n\n        onDragOver: function onDragOver(ev) {\n            if (this.readonly) {\n                return;\n            }\n\n            dragAndDrop.onDragOver(ev);\n        },\n\n        onDragEnter: function onDragEnter(ev) {\n            if (this.readonly) {\n                return;\n            }\n\n            dragAndDrop.onDragEnter(ev);\n        },\n\n        onDragLeave: function onDragLeave(ev) {\n            dragAndDrop.onDragLeave(ev);\n        },\n\n        onDragEnd: function onDragEnd(ev) {\n            dragAndDrop.onDragEnd(ev);\n        },\n\n        onMouseDown: function onMouseDown(ev) {\n            if (this.readonly) {\n                return;\n            }\n\n            dragAndDrop.mouseDown(ev);\n        },\n\n        onMenuItemCommand: function onMenuItemCommand(command) {\n            var keyPath = null;\n\n            if (this.store.contextMenu.elementType !== 'section') {\n                keyPath = $.oc.vueUtils.getCleanObject(this.store.contextMenu.node.keyPath);\n            }\n\n            this.$emit(\n                'command',\n                command,\n                keyPath,\n                this.store.contextMenu.node,\n                this.store.contextMenu.selectedNodesData\n            );\n        },\n\n        onNodeMenuTriggerClick: function onNodeMenuTriggerClick(data) {\n            var menuItems = data.sectionCreateMenu ? data.node.createMenuItems : data.node.nodeMenuitems;\n\n            if (!Array.isArray(menuItems)) {\n                menuItems = [];\n            }\n\n            var selectedNodesData = this.selectedNodesData;\n            if (data.node.nodeData.hasApiMenuItems) {\n                this.$emit('nodecontextmenudisplay', data.node.nodeData, menuItems, {\n                    selectedNodes: selectedNodesData,\n                    clickedNode: data.node.nodeData,\n                    clickedIsSelected: this.selectedKeys.indexOf(data.node.nodeData.uniqueKey) !== -1\n                });\n            }\n\n            this.store.contextMenu.items = menuItems;\n            this.store.contextMenu.node = data.node;\n            this.store.contextMenu.menuId = data.node.menuId;\n            this.store.contextMenu.selectedNodesData = this.selectedNodesData;\n            this.store.contextMenu.labeledById = data.node.menuLabelId;\n            this.store.contextMenu.elementType = data.elementType;\n\n            if (data.type == 'trigger') {\n                this.$refs.contextmenu.showMenu(data.node.$refs.contextmenuTrigger);\n            }\n            else {\n                this.$refs.contextmenu.showMenu(data.ev);\n            }\n        },\n\n        onShowMenu: function onShowMenu(payload) { },\n\n        onMenuShown: function onMenuShown() {\n            this.store.contextMenu.node.onMenuShown();\n        },\n\n        onMenuHidden: function onMenuHidden() {\n            this.store.contextMenu.node.onMenuHidden();\n        },\n\n        onMenuClosedWithEsc: function () {\n            this.store.contextMenu.node.onMenuClosedWithEsc();\n        },\n\n        onQuickAccessNodeSelected: function (nodeKey, ev) {\n            var nodeData = utils.findNodeAndPathByKeyInSections(this.sections, nodeKey);\n\n            if (!nodeData) {\n                return;\n            }\n\n            var ev = $.Event('treviewnodeclick', {\n                // See also treeview.js onQuickAccessNodeSelected()\n\n                treeviewData: {\n                    keyPath: utils.makeKeyPath(nodeData.path, nodeData.node),\n                    uniqueKey: nodeData.node.uniqueKey,\n                    nodeData: nodeData.node,\n                    rootNodeData: nodeData.path[0]\n                }\n            });\n\n            this.$emit('nodeclick', ev);\n        },\n\n        onQuickAccessCommand: function (command, ev) {\n            var keyPath = null;\n\n            // Quick access can only trigger section commands,\n            // it's safe to pass nulls to the node\n            // and selectedNodesData arguments.\n            this.$emit('command', command, keyPath, null, null);\n        }\n    },\n    beforeMount: function beforeMount() {\n        this.selection.set(this.selectedUniqueKey);\n\n        var storedQuery = localStorage.getItem(this.uniqueKey + '-search');\n        if (storedQuery === null) {\n            storedQuery = '';\n        }\n\n        this.searchQuery = storedQuery;\n        this.setSearchQueryTrimmed();\n\n        var that = this;\n\n        if (storedQuery != '') {\n            nextTick(function () {\n                utils.updateRootNodesInSections(that.sections);\n            });\n        }\n    },\n    beforeUnmount: function beforeUnmount() { },\n    watch: {\n        selectedUniqueKey: function (uniqueKey) {\n            this.selection.set(uniqueKey);\n        },\n\n        searchQuery: function (query) {\n            localStorage.setItem(this.uniqueKey + '-search', query);\n\n            if (this.searchTimeoutId) {\n                clearTimeout(this.searchTimeoutId);\n            }\n\n            this.searchTimeoutId = setTimeout(this.setSearchQueryTrimmed, 100);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/partials/_node.php",
    "content": "<li\n    role=\"treeitem\"\n    :class=\"cssClass\"\n    v-bind:aria-expanded=\"isAriaExpanded\"\n    v-bind:tabindex=\"isSelected ? 0 : -1\"\n    v-bind:draggable=\"isDraggable && !isRoot\"\n    v-bind:id=\"nodeDomId\"\n    v-bind:data-unique-key=\"nodeData.uniqueKey\"\n    data-treenode\n    @drop=\"onDrop\"\n    @dragstart=\"onDragStart\"\n    @contextmenu.stop=\"onContextMenu\"\n>\n    <div role=\"none\" class=\"item-label-outer-container\">\n        <div\n            role=\"none\"\n            class=\"item-label-container\"\n            :class=\"labelContainerCssClass\"\n            @click.stop=\"onNodeClick\"\n        >\n            <button\n                aria-hidden=\"true\"\n                v-if=\"isRoot || branchDisplayMode == 'tree' || branchGroupBy\"\n                v-bind:aria-label=\"'<?= e(trans('backend::lang.treeview.collapse')) ?>'\"\n                class=\"node-toggle-control backend-icon-background-pseudo\"\n                :class=\"{'no-child-nodes': !hasChildNodes}\"\n                @click.stop=\"onExpandToggleClick\"\n                tabindex=\"-1\"\n            ></button>\n            <span\n                class=\"node-icon\"\n                aria-hidden=\"true\"\n                v-if=\"icon\"\n                v-bind:style=\"{'background-color': icon.backgroundColor ? icon.backgroundColor : '#E67E21'}\"\n                :class=\"{'folder-icon': isFolderIcon}\"\n            >\n                <i :class=\"icon.cssClass\"></i>\n            </span>\n            <span v-text=\"nodeText\" class=\"node-label\" v-bind:id=\"menuLabelId\"></span>\n            <span v-if=\"nodeData.description\" v-text=\"nodeData.description\" class=\"node-label\"></span>\n            <button\n                v-bind:tabindex=\"isSelected ? 0 : -1\"\n                v-if=\"(nodeMenuitems || nodeData.hasApiMenuItems) && ! readonly\"\n                ref=\"contextmenuTrigger\"\n                class=\"node-menu-trigger backend-icon-background-pseudo\"\n                @click.stop=\"onMenuTriggerClick\"\n                v-bind:aria-labeledby=\"menuLabelId\"\n                v-bind:aria-controls=\"menuId\"\n                v-bind:id=\"menuButtonId\"\n                v-bind:aria-haspopup=\"true\"\n                aria-hidden=\"true\"\n            >⋮</button>\n        </div>\n    </div>\n    <ul role=\"group\" v-if=\"hasChildNodes && expanded\" data-subtree>\n        <template v-for=\"(node, index) in sortedNodes\" :key=\"node.uniqueKey + (node.systemData ? node.systemData.updateKey : '')\">\n            <backend-treeview-node\n                v-if=\"!searchQuery.length || (!node.systemData || node.systemData.visibleInSearch)\"\n                :ref=\"el => { if (el) childNodeRefs[index] = el }\"\n                :node-data=\"node\"\n                :is-root=\"false\"\n                :branch-display-mode=\"branchDisplayMode\"\n                :parent-key-path=\"keyPath\"\n                :selected-keys=\"selectedKeys\"\n                :tree-unique-key=\"treeUniqueKey\"\n                :branch-drag-and-drop-mode=\"branchDragAndDropMode\"\n                :branch-menuitems=\"branchMenuitems\"\n                :branch-display-property=\"branchDisplayProperty\"\n                :branch-sort-by=\"branchSortBy\"\n                :branch-group-by=\"branchGroupBy\"\n                :branch-group-by-mode=\"branchGroupByMode\"\n                :branch-multi-select=\"branchMultiSelect\"\n                :branch-group-folder-display-path-props=\"branchGroupFolderDisplayPathProps\"\n                :index-in-parent=\"index\"\n                :parent-node-list=\"sortedNodes\"\n                :store=\"store\"\n                :search-query=\"searchQuery\"\n                :grouped-nodes=\"!branchGroupBy ? node.nodes : (!node.systemData ? [] : node.systemData.groupedNodes)\"\n                :readonly=\"readonly\"\n                @nodeclick=\"$emit('nodeclick', $event)\"\n                @customdragstart=\"$emit('customdragstart', $event)\"\n                @nonselectablenodeclick=\"$emit('nonselectablenodeclick', $event)\"\n                @nodeselected=\"$emit('nodeselected', $event)\"\n                @nodedrop=\"$emit('nodedrop', $event)\"\n                @externaldrop=\"$emit('externaldrop', $event)\"\n                @nodemenutriggerclick=\"$emit('nodemenutriggerclick', $event)\"\n            ></backend-treeview-node>\n        </template>\n    </ul>\n</li>"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/partials/_quickaccess.php",
    "content": "<backend-modal\n    ref=\"modal\"\n    :unique-key=\"modalUniqueKey\"\n    :close-by-overlay-click=\"true\"\n    :resizable=\"resizable\"\n    :draggable=\"true\"\n    :aria-labeled-by=\"labelId\"\n    :resize-min-height=\"200\"\n    :resize-default-width=\"500\"\n    modalCssClass=\"treeview-quick-access-modal\"\n    @shown=\"onModalShown\"\n    @hidden=\"onModalHidden\"\n>\n    <template v-slot:content>\n        <div class=\"treeview-quick-access flex-layout-column fill-container\">\n            <div class=\"modal-header flex-layout-item fix\">\n                <h4 class=\"modal-title\" v-bind:id=\"labelId\"><?= e(trans('backend::lang.treeview.quick_access')) ?></h4>\n            </div>\n            <div class=\"modal-body flex-layout-item stretch relative\" :class=\"{'has-results': nodes.length > 0}\">\n                <div class=\"treeview-quick-access flex-layout-column fill-container\">\n                    <div class=\"input-container backend-icon-background-pseudo flex-layout-item fix\">\n                        <input\n                            v-model=\"searchQuery\"\n                            type=\"text\"\n                            placeholder=\"<?= e(trans('backend::lang.treeview.command_or_document')) ?>\"\n                            data-default-focus\n                        />\n                    </div>\n                    <div class=\"quick-access-list flex-layout-item stretch relative\">\n                        <backend-scrollable-panel ref=\"scrollablePanel\">\n                            <ul>\n                                <li class=\"quick-list-header\" v-if=\"nodes.length > 0\">\n                                    <?= e(trans('backend::lang.treeview.open')) ?>\n                                </li>\n                                <li\n                                    v-for=\"(nodeData, index) in nodes\"\n                                    class=\"item-document\"\n                                    :class=\"{selected: selectedIndex == index}\"\n                                    @mouseover=\"onMouseOver(index)\"\n                                    @click.prevent=\"onClick($event, nodeData.node.uniqueKey)\"\n                                    v-bind:data-node-key=\"nodeData.node.uniqueKey\"\n                                >\n                                    <span\n                                        class=\"node-icon\"\n                                        aria-hidden=\"true\"\n                                        v-if=\"nodeData.node.icon\"\n                                        v-bind:style=\"{'background-color': nodeData.node.icon.backgroundColor ? nodeData.node.icon.backgroundColor : '#E67E21'}\"\n                                    >\n                                        <i :class=\"nodeData.node.icon.cssClass\"></i>\n                                    </span>\n\n                                    <span\n                                        v-for=\"pathItem in nodeData.path\"\n                                        v-text=\"getPathItemText(pathItem, nodeData.path)\"\n                                        class=\"path-item\"\n                                        :class=\"getPathItemClass(pathItem)\"\n                                    ></span>\n                                    <span class=\"path-item path-leaf\" v-text=\"getPathItemText(nodeData.node, nodeData.path)\"></span>\n                                </li>\n\n                                <li class=\"quick-list-header\" v-if=\"commands.length > 0\">\n                                    <?= e(trans('backend::lang.treeview.commands')) ?>\n                                </li>\n\n                                <li\n                                    v-for=\"(commandData, index) in commands\"\n                                    class=\"item-command\"\n                                    :class=\"{selected: selectedIndex == index + nodes.length}\"\n                                    @mouseover=\"onMouseOver(index + nodes.length)\"\n                                    @click.prevent=\"onCommandClick($event, commandData.item.command, commandData.item)\"\n                                    v-bind:data-command=\"commandData.item.command\"\n                                    v-bind:data-item-href=\"commandData.item.href\"\n                                    v-bind:data-item-target=\"commandData.item.target\"\n                                >\n                                    <span\n                                        class=\"node-icon\"\n                                        aria-hidden=\"true\"\n                                    >\n                                        <i class=\"backend-icon-background icon-command\"></i>\n                                    </span>\n\n                                    <span\n                                        v-for=\"pathItem in commandData.path\"\n                                        v-text=\"pathItem.label\"\n                                        class=\"path-item path-command\"\n                                    ></span>\n\n                                    <span class=\"path-item path-leaf path-leaf-command\" v-text=\"commandData.item.label\"></span>\n                                </li>\n                            </ul>\n                        </backend-scrollable-panel>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </template>\n</backend-modal>"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/partials/_section.php",
    "content": "<li\n    role=\"treeitem\"\n    class=\"treeview-section\"\n    v-if=\"hasVisibleNodes\"\n    v-bind:aria-expanded=\"isAriaExpanded\"\n    :class=\"cssClass\"\n    @contextmenu.stop=\"onContextMenu\"\n>\n    <div role=\"none\" class=\"item-label-outer-container section-label\" v-show=\"!hideSections\">\n        <div role=\"none\" class=\"item-label-container\" :class=\"{'has-menu': menuItems}\">\n            <button\n                aria-hidden=\"true\"\n                v-bind:aria-label=\"'<?= e(trans('backend::lang.treeview.collapse')) ?>'\"\n                class=\"node-toggle-control backend-icon-background-pseudo\"\n                @click.stop=\"onExpandToggleClick\"\n                tabindex=\"-1\"\n            ></button>\n\n            <span class=\"node-label\" v-text=\"label\" v-bind:id=\"menuLabelId\" @click=\"onExpandToggleClick\"></span>\n\n            <button\n                class=\"node-menu-trigger section-create-button backend-icon-background-pseudo\"\n                v-if=\"hasCreateMenuItems\"\n                ref=\"createmenuTrigger\"\n                @click.stop=\"onCreateMenuTriggerClick\"\n                v-bind:aria-labeledby=\"menuLabelId\"\n                v-bind:aria-controls=\"menuId\"\n                v-bind:aria-haspopup=\"true\"\n                aria-hidden=\"true\"\n            ></button>\n\n            <button\n                v-if=\"hasMenuItems && ! readonly\"\n                ref=\"contextmenuTrigger\"\n                class=\"node-menu-trigger backend-icon-background-pseudo\"\n                @click.stop=\"onMenuTriggerClick\"\n                v-bind:aria-labeledby=\"menuLabelId\"\n                v-bind:aria-controls=\"menuId\"\n                v-bind:id=\"menuButtonId\"\n                v-bind:aria-haspopup=\"true\"\n                aria-hidden=\"true\"\n            >⋮</button>\n        </div>\n    </div>\n\n    <ul role=\"group\" v-show=\"expanded\">\n        <template v-for=\"(node, index) in filteredNodes\" :key=\"node.uniqueKey\">\n            <backend-treeview-node\n                v-if=\"!searchQuery.length || (!node.systemData || node.systemData.visibleInSearch)\"\n                :ref=\"el => { if (el) nodeRefs[index] = el }\"\n                :node-data=\"node\"\n                :is-root=\"true\"\n                :branch-display-mode=\"node.displayMode\"\n                :branch-drag-and-drop-mode=\"node.dragAndDropMode\"\n                :branch-menuitems=\"node.menuitems\"\n                :branch-sort-by=\"node.sortBy\"\n                :parent-key-path=\"[]\"\n                :selected-keys=\"selectedKeys\"\n                :tree-unique-key=\"treeUniqueKey\"\n                :index-in-parent=\"index\"\n                :parent-node-list=\"nodes\"\n                :store=\"store\"\n                :search-query=\"searchQuery\"\n                :branch-group-by=\"node.groupBy\"\n                :branch-group-by-mode=\"node.groupByMode\"\n                :branch-group-by-regex=\"node.groupByRegex\"\n                :branch-multi-select=\"node.multiSelect\"\n                :branch-group-folder-display-path-props=\"node.groupFolderDisplayPathProps\"\n                :grouped-nodes=\"!node.groupBy ? node.nodes : (!node.systemData ? [] : node.systemData.groupedNodes)\"\n                :branch-display-property=\"node.displayProperty\"\n                :readonly=\"readonly\"\n                @nodeclick=\"$emit('nodeclick', $event)\"\n                @customdragstart=\"$emit('customdragstart', $event)\"\n                @nonselectablenodeclick=\"$emit('nonselectablenodeclick', $event)\"\n                @nodeselected=\"$emit('nodeselected', $event)\"\n                @nodedrop=\"$emit('nodedrop', $event)\"\n                @externaldrop=\"$emit('externaldrop', $event)\"\n                @nodemenutriggerclick=\"$emit('nodemenutriggerclick', $event)\"\n            ></backend-treeview-node>\n        </template>\n    </ul>\n</li>"
  },
  {
    "path": "modules/backend/vuecomponents/treeview/partials/_treeview.php",
    "content": "<div class=\"component-backend-treeview flex-layout-column full-height-strict\" :class=\"containerCssClass\">\n    <div\n        class=\"treeview-container flex-layout-item stretch relative\"\n    >\n        <div class=\"treeview-ghost-image-container\">\n            <img\n                data-multi-drag-image\n                src=\"<?= Url::asset('/modules/backend/assets/images/treeview-multi-drag.svg') ?>\" />\n        </div>\n        <backend-scrollable-panel ref=\"scrollablePanel\">\n            <div :class=\"{'treeview-readonly': readonly}\">\n                <ul\n                    role=\"tree\"\n                    v-bind:aria-label=\"ariaLabel\"\n                    @keydown=\"onKeyDown\"\n                    @mousedown=\"onMouseDown\"\n                    @dragover=\"onDragOver\"\n                    @dragenter=\"onDragEnter\"\n                    @dragleave=\"onDragLeave\"\n                    @dragend=\"onDragEnd\"\n                >\n                    <backend-treeview-section\n                        v-for=\"(section, index) in sections\"\n                        :ref=\"el => { if (el) sectionRefs[index] = el }\"\n                        :key=\"section.uniqueKey\"\n                        :unique-key=\"section.uniqueKey\"\n                        :label=\"section.label\"\n                        :nodes=\"section.nodes\"\n                        :hasApiMenuItems=\"section.hasApiMenuItems\"\n                        :userData=\"section.userData\"\n                        :menu-items=\"section.menuItems\"\n                        :create-menu-items=\"section.createMenuItems\"\n                        :readonly=\"readonly\"\n                        :search-query=\"searchQueryTrimmed\"\n                        :store=\"store\"\n                        :selected-keys=\"selectedKeys\"\n                        :tree-unique-key=\"uniqueKey\"\n                        :hide-sections=\"hideSections\"\n                        :default-folder-icon=\"defaultFolderIcon\"\n\n                        @nodeclick=\"$emit('nodeclick', $event)\"\n                        @customdragstart=\"$emit('customdragstart', $event)\"\n                        @nonselectablenodeclick=\"$emit('nonselectablenodeclick', $event)\"\n                        @nodeselected=\"onNodeSelected\"\n                        @nodedrop=\"$emit('nodedrop', $event)\"\n                        @externaldrop=\"$emit('externaldrop', $event)\"\n                        @nodecontextmenudisplay=\"$emit('nodecontextmenudisplay', $event)\"\n\n                        @nodemenutriggerclick=\"onNodeMenuTriggerClick\"\n                    >\n                    </backend-treeview-section>\n                </ul>\n\n                <div class=\"drag-indicator\"></div>\n            </div>\n        </backend-scrollable-panel>\n\n        <backend-dropdown-menu\n            :items=\"store.contextMenu.items\"\n            :menu-id=\"store.contextMenu.menuId\"\n            :labeled-by-id=\"store.contextMenu.labeledById\"\n            ref=\"contextmenu\"\n            @command=\"onMenuItemCommand\"\n            @shown=\"onMenuShown\"\n            @hidden=\"onMenuHidden\"\n            @closedwithesc=\"onMenuClosedWithEsc\"\n        ></backend-dropdown-menu>\n\n        <backend-treeview-quickaccess\n            :unique-key=\"uniqueKey\"\n            ref=\"quickAccess\"\n            :sections=\"sections\"\n            :default-folder-icon=\"defaultFolderIcon\"\n            @nodeselected=\"onQuickAccessNodeSelected\"\n            @command=\"onQuickAccessCommand\"\n        ></backend-treeview-quickaccess>\n    </div>\n\n    <div\n        v-if=\"searchable\"\n        class=\"flex-layout-item fix treeview-search-control backend-icon-background-pseudo\"\n        :class=\"{'search-enabled': searchQuery.length > 0}\"\n    >\n        <input\n            v-model=\"searchQuery\"\n            type=\"text\"\n            aria-label=\"<?= e(trans('backend::lang.treeview.search')) ?>\"\n            data-default-focus\n        />\n\n        <button class=\"backend-icon-background-pseudo\" @click=\"searchQuery=''\" aria-label=\"<?= e(trans('backend::lang.treeview.clear_search')) ?>\">×</button>\n    </div>\n</div>"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/assets/css/_item.css",
    "content": ".component-backend-uploader {\n    .uploader-body {\n        ul {\n            padding: 0;\n            margin: 0;\n\n            li {\n                padding: 15px 20px;\n                max-width: 330px;\n                margin: 0;\n                box-sizing: border-box;\n                list-style: none;\n                border-bottom: 1px solid var(--oc-primary-border);\n                position: relative;\n                white-space: nowrap;\n\n                &:last-child {\n                    border-bottom: none;\n                }\n\n                .item-name {\n                    text-overflow: ellipsis;\n                    overflow: hidden;\n                    display: block;\n                }\n\n                .item-error {\n                    white-space: normal;\n                    display: inline-block;\n                    margin-top: 6px;\n                }\n\n                &.status-error {\n                    .item-name {\n                        color: var(--bs-danger);\n                    }\n                }\n\n                &.status-completed {\n                    padding-right: 50px;\n\n                    i.backend-icon-background {\n                        position: absolute;\n                        right: 20px;\n                        top: 17px;\n                        background-position: -223px -40px;\n                        width: 16px;\n                        height: 16px;\n                    }\n                }\n\n                &.status-uploading {\n                    padding-right: 123px;\n\n                    .component-backend-loading-indicator {\n                        position: absolute;\n                        width: 65px;\n                        top: 22px;\n                        right: 48px;\n                    }\n\n                    .close {\n                        top: 16px;\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/assets/css/uploader.css",
    "content": "@import \"_item.css\";\n\n.component-backend-uploader {\n    border: var(--oc-popup-border);\n    border-right: none;\n    border-radius: 8px 0 0 8px;\n    box-shadow: 0 0 32px rgba(67, 86, 100, 0.2);\n    background-color: white;\n    position: fixed;\n    right: 0;\n    bottom: 20px;\n    min-width: 270px;\n    overflow: hidden;\n    z-index: 5;\n\n    .uploader-header {\n        padding: 18px 50px 18px 20px;\n        border-bottom: var(--oc-popup-border);\n        position: relative;\n\n        h3 {\n            font-size: 14px;\n            margin: 0;\n            padding: 0;\n            font-weight: bold;\n        }\n\n        .component-backend-loading-indicator {\n            position: absolute;\n            width: 120px;\n            top: 22px;\n            right: 53px;\n            display: none;\n        }\n    }\n\n    .uploader-body-container {\n        overflow: hidden;\n    }\n\n    .uploader-body {\n        margin-top: 0;\n        transition: margin 0.3s;\n    }\n\n    &.uploader-collapsed {\n        .uploader-body {\n            margin-top: -100%;\n        }\n\n        .uploader-header {\n            padding-right: 185px;\n\n            .component-backend-loading-indicator {\n                display: block;\n            }\n        }\n    }\n\n    .close {\n        width: 19px;\n        height: 19px;\n        border-radius: 20px;\n        position: absolute;\n        top: 17px;\n        right: 20px;\n        opacity: 1;\n        font-size: 0;\n        color: transparent;\n\n        &:focus {\n            outline: none;\n            background-color: var(--oc-toolbar-hover-bg);\n        }\n\n        &:before {\n            display: block;\n            width: 11px;\n            height: 11px;\n            position: absolute;\n            background-position: -253px 0;\n            top: 4px;\n            right: 4px;\n        }\n\n        &:focus,\n        &:hover {\n            &:before {\n                background-position: -268px 0;\n            }\n        }\n\n        &.collapse,\n        &.expand {\n            &:before {\n                transform: rotate(0);\n                transition: transform 0.2s;\n                background-position: -250px -30px;\n                transition-delay: 0.2s;\n            }\n        }\n\n        &.expand {\n            &:before {\n                transform: rotate(180deg);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/assets/js/file.js",
    "content": "let lastFileId = 0;\n\nfunction makeUniqueFileKey() {\n    return ++lastFileId;\n}\n\nclass File {\n    name;\n    status;\n    progress;\n    key;\n    size;\n    promise;\n    abortController;\n    errorMessage;\n    participatesInTotal;\n\n    constructor(queue, handlerName, file, formFieldName, extraData) {\n        this.name = file.name;\n        this.progress = 0;\n        this.bytesLoaded = 0;\n        this.status = 'uploading';\n        this.size = file.size;\n        this.key = makeUniqueFileKey();\n        this.participatesInTotal = true;\n        this.abortController = new AbortController();\n        this.promise = queue.add(\n            handlerName,\n            formFieldName,\n            file,\n            file.name,\n            (progress) => {\n                this.progress = progress;\n            },\n            this.abortController.signal,\n            extraData\n        );\n\n        this.promise.then(\n            () => {\n                this.progress = 100;\n                this.status = 'completed';\n            },\n            (err) => {\n                this.status = 'error';\n                if (typeof err === 'string') {\n                    this.errorMessage = err;\n                }\n            }\n        );\n    }\n\n    abort() {\n        this.abortController.abort();\n        this.promise = null;\n    }\n}\n\nexport default File;\n"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/assets/js/item.js",
    "content": "/*\n *  Universal file uploader item implementation\n */\nexport default {\n    props: {\n        errorMessage: String,\n        fileName: String,\n        progress: Number,\n        status: String\n    },\n    data: function () {\n        return {};\n    },\n    computed: {\n        cssClass: function computeCssClass() {\n            return {\n                'status-completed': this.status === 'completed',\n                'status-uploading': this.status === 'uploading',\n                'status-error': this.status === 'error'\n            };\n        }\n    },\n    methods: {}\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/assets/js/queue.js",
    "content": "import PQueue from 'p-queue';\n\nfunction uploadAjaxRequest(handler, requestData, onProgress, abortSignal) {\n    if (!handler.match(/^(?:\\w+\\:{2})?on*/) && handler !== 'mediamanager') {\n        throw new Error('Invalid handler name. The correct handler name format is: \"onEvent\".');\n    }\n\n    return new Promise((resolve, reject) => {\n        if (abortSignal?.aborted) {\n            return resolve();\n        }\n\n        const xhr = new XMLHttpRequest();\n        xhr.open('POST', window.location.href);\n\n        const token = getToken();\n        if (token) {\n            xhr.setRequestHeader('X-CSRF-TOKEN', token);\n        }\n\n        if (handler !== 'mediamanager') {\n            xhr.setRequestHeader('X-AJAX-HANDLER', handler);\n            xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n        }\n\n        xhr.upload.addEventListener(\n            'progress',\n            (e) => {\n                if (e.lengthComputable) {\n                    onProgress(Math.round(e.loaded * 100 / e.total));\n                }\n            },\n            false\n        );\n\n        xhr.onload = function() {\n            if (xhr.status === 200) {\n                onProgress(100);\n                resolve(xhr.response);\n            }\n            else {\n                reject(xhr.response);\n            }\n        };\n\n        xhr.upload.addEventListener(\n            'error',\n            (e) => {\n                reject(e);\n            },\n            false\n        );\n\n        abortSignal?.addEventListener('abort', () => xhr.abort());\n\n        xhr.send(requestData);\n    });\n}\n\nfunction getToken() {\n    return $('meta[name=\"csrf-token\"]').attr('content');\n}\n\nclass UploaderQueue {\n    queue;\n\n    constructor() {\n        this.queue = new PQueue({ concurrency: 5 });\n    }\n\n    add(handlerName, formFieldName, fileData, fileName, onProgress, abortSignal, extraData) {\n        const data = new FormData();\n        data.append(formFieldName, fileData, fileName);\n\n        if (typeof extraData === 'object') {\n            Object.keys(extraData).forEach((key) => {\n                data.append(key, extraData[key]);\n            });\n        }\n\n        if (handlerName === 'mediamanager') {\n            data.append('X_OCTOBER_MEDIA_MANAGER_QUICK_UPLOAD', 1);\n\n            const token = getToken();\n            if (token) {\n                data.append('_token', token);\n            }\n        }\n\n        return this.queue.add(\n            () => uploadAjaxRequest(handlerName, data, onProgress, abortSignal),\n            { signal: abortSignal }\n        );\n    }\n}\n\nexport default UploaderQueue;\n"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/assets/js/uploader-utils.js",
    "content": "});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2VzNi91cGxvYWRlci11dGlscy5qcyJdLCJuYW1lcyI6WyIkIiwib2MiLCJtb2R1bGUiLCJyZWdpc3RlciJdLCJtYXBwaW5ncyI6IkFBQUFBLEVBQUVDLEVBQUYsQ0FBS0MsTUFBTCxDQUFZQyxRQUFaLENBQXFCLHNDQUFyQixFQUE2RCxZQUFXLENBQUUsQ0FBMUUiLCJmaWxlIjoidXBsb2FkZXItdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIkLm9jLm1vZHVsZS5yZWdpc3RlcignYmFja2VuZC52dWVjb21wb25lbnRzLnVwbG9hZGVyLnV0aWxzJywgZnVuY3Rpb24oKSB7fSk7XG4iXX0=\n"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/assets/js/uploader.js",
    "content": "import UploaderQueue from './queue.js';\nimport UploaderFile from './file.js';\n\n/*\n *  Universal file uploader implementation\n */\nexport default {\n    props: {},\n    data: function() {\n        return {\n            files: [],\n            lang: {\n                complete: '',\n                uploading: ''\n            },\n            collapsed: false,\n            hidden: true,\n            queue: new UploaderQueue()\n        };\n    },\n    computed: {\n        numOfFilesInProgress: function computeNumOfFilesInProgress() {\n            return this.files.filter((file) => {\n                return file.status === 'uploading';\n            }).length;\n        },\n\n        hasFilesInProgress: function computeHasFilesInProgress() {\n            return this.numOfFilesInProgress > 0;\n        },\n\n        titleText: function computeTitleText() {\n            if (!this.numOfFilesInProgress) {\n                return this.lang.complete;\n            }\n\n            return this.lang.uploading;\n        },\n\n        totalProgress: function computeTotalProgress() {\n            const participatingFiles = this.files.filter((file) => {\n                return file.participatesInTotal;\n            });\n\n            if (!participatingFiles.length) {\n                return 100;\n            }\n\n            const total = participatingFiles.reduce((total, file) => {\n                return (total += file.progress);\n            }, 0);\n\n            return total / participatingFiles.length;\n        }\n    },\n    mounted: function onMounted() {\n        this.lang.complete = this.$el.getAttribute('data-lang-complete');\n        this.lang.uploading = this.$el.getAttribute('data-lang-uploading');\n    },\n    methods: {\n        addFile: function addFile(handlerName, file, formFieldName, extraData) {\n            this.markFilesInProgress();\n\n            const newFile = new UploaderFile(this.queue, handlerName, file, formFieldName, extraData);\n            this.files.push(newFile);\n\n            return newFile.promise;\n        },\n\n        addMediaManagerFile: function addMediaManagerFile(file, extraData) {\n            this.markFilesInProgress();\n\n            const newFile = new UploaderFile(this.queue, 'mediamanager', file, 'file_data', extraData);\n            this.files.push(newFile);\n\n            return newFile.promise;\n        },\n\n        markFilesInProgress: function markFilesInProgress() {\n            this.files.forEach((file) => {\n                file.participatesInTotal = file.status === 'uploading';\n            });\n        },\n\n        onBytesLoaded: function onBytesLoaded(bytesLoaded) {\n            this.totalBytesLoaded += bytesLoaded;\n        },\n\n        onHeaderButtonClick: function onCloseClick() {\n            if (this.hasFilesInProgress) {\n                this.collapsed = !this.collapsed;\n            }\n            else {\n                this.hidden = true;\n                this.collapsed = false;\n                for (let index = this.files.length - 1; index >= 0; index--) {\n                    if (this.files[index].status !== 'uploading') {\n                        this.files.splice(index, 1);\n                    }\n                }\n            }\n        },\n\n        onRemoveClick: function onRemoveClick(index) {\n            const file = this.files[index];\n            if (file) {\n                file.abort();\n                this.files.splice(index, 1);\n            }\n        }\n    },\n    watch: {\n        hasFilesInProgress: function watchHasFilesInProgress(newValue, oldValue) {\n            if (newValue) {\n                this.hidden = false;\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/assets/js/utils.js",
    "content": "function makeUploaderInstance() {\n    // Create container element for Vue app\n    const wrapperEl = document.createElement('div');\n    document.body.appendChild(wrapperEl);\n\n    // Create Vue 3 app\n    const app = oc.createVueApp({\n        data() {\n            return {};\n        },\n        template: '<backend-uploader ref=\"uploader\" />'\n    });\n\n    const vm = app.mount(wrapperEl);\n\n    // Store app reference for cleanup and return the uploader component\n    const uploaderComponent = vm.$refs.uploader;\n    uploaderComponent.__vueApp = app;\n    uploaderComponent.__wrapperEl = wrapperEl;\n\n    return uploaderComponent;\n}\n\nclass UploaderUtils {\n    uploaderInstance;\n\n    constructor() {\n        this.uploaderInstance = null;\n    }\n\n    uploadMediaManagerFile(file) {\n        if (!this.uploaderInstance) {\n            this.uploaderInstance = makeUploaderInstance();\n        }\n\n        return this.uploaderInstance.addMediaManagerFile(file);\n    }\n\n    selectAndUploadMediaManagerFiles(callback, multiple, accept) {\n        const uploaderUtils = oc.vueComponentHelpers.uploader.utils;\n        const $input = $('<input type=\"file\" style=\"display:none\" name=\"file\"/>');\n\n        if (multiple) {\n            $input.attr('multiple', 'multiple');\n        }\n\n        if (typeof accept === 'string') {\n            $input.attr('accept', accept);\n        }\n\n        $(document.body).append($input);\n\n        $input.one('change', () => {\n            const files = $input.get(0).files;\n            const promises = [];\n            for (let i = 0; i < files.length; i++) {\n                const promise = uploaderUtils.uploadMediaManagerFile(files[i]).then(\n                    (response) => {\n                        const data = JSON.parse(response);\n\n                        callback(data.link, files.length > 1, i == files.length - 1);\n                    },\n                    () => {}\n                );\n\n                promises.push(promises);\n            }\n\n            Promise.all(promises.map((p) => Promise.resolve(p).then(() => {}, () => {}))).then(() => {\n                $input.remove();\n            });\n        });\n\n        $input.click();\n    }\n\n    uploadFile(handlerName, file, formFieldName, extraData) {\n        if (!this.uploaderInstance) {\n            this.uploaderInstance = makeUploaderInstance();\n        }\n\n        let fileArr = [];\n        if (file instanceof FileList) {\n            fileArr = file;\n        }\n        else if (Array.isArray(file)) {\n            fileArr = file;\n        }\n        else {\n            fileArr.push(file);\n        }\n\n        const promises = [];\n        for (let i = 0; i < fileArr.length; i++) {\n            promises.push(this.uploaderInstance.addFile(handlerName, fileArr[i], formFieldName, extraData));\n        }\n\n        return Promise.all(\n            promises.map((p) =>\n                Promise.resolve(p).then(\n                    (value) => ({\n                        status: 'fulfilled',\n                        value\n                    }),\n                    (reason) => ({\n                        status: 'rejected',\n                        reason\n                    })\n                )\n            )\n        );\n    }\n}\n\nif (oc.vueComponentHelpers === undefined) {\n    oc.vueComponentHelpers = {};\n}\n\nif (oc.vueComponentHelpers.uploader === undefined) {\n    oc.vueComponentHelpers.uploader = {};\n}\n\noc.vueComponentHelpers.uploader.utils = new UploaderUtils();"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/partials/_item.php",
    "content": "<li :class=\"cssClass\">\n    <span class=\"item-name\" v-text=\"fileName\"></span>\n    <span class=\"item-error\" v-if=\"errorMessage\" v-text=\"errorMessage\"></span>\n\n    <i\n        class=\"backend-icon-background\"\n        v-if=\"status == 'completed'\"\n    ></i>\n\n    <template\n        v-if=\"status == 'uploading'\"\n    >\n        <backend-loading-indicator\n            indicator-style=\"bar\"\n            :progress=\"progress\"\n        ></backend-loading-indicator>\n\n        <button\n            @click.prevent=\"$emit('removeclick')\"\n            type=\"button\"\n            class=\"close backend-icon-background-pseudo\"\n            tabindex=\"0\"\n            ><span aria-hidden=\"true\">&times;</span>\n        </button>\n    </template>\n</li>"
  },
  {
    "path": "modules/backend/vuecomponents/uploader/partials/_uploader.php",
    "content": "<div\n    class=\"component-backend-uploader\"\n    v-show=\"!hidden\"\n    :class=\"{'uploader-collapsed': collapsed}\"\n    data-lang-uploading=\"<?= e(trans('backend::lang.uploader.uploading')) ?>\"\n    data-lang-complete=\"<?= e(trans('backend::lang.uploader.complete')) ?>\"\n>\n    <div class=\"uploader-header\">\n        <h3 v-text=\"titleText\"></h3>\n\n        <backend-loading-indicator\n            indicator-style=\"bar\"\n            :progress=\"totalProgress\"\n        ></backend-loading-indicator>\n\n        <button\n            @click.prevent=\"onHeaderButtonClick\"\n            type=\"button\"\n            class=\"close backend-icon-background-pseudo\"\n            :class=\"{'collapse': !collapsed && hasFilesInProgress, 'expand': collapsed && hasFilesInProgress}\"\n            tabindex=\"0\"\n            ><span aria-hidden=\"true\">&times;</span>\n        </button>\n    </div>\n    <div class=\"uploader-body-container\">\n        <div class=\"uploader-body\">\n            <backend-scrollable-panel\n                :relative-layout=\"true\"\n                :relative-layout-max-height=\"200\"\n            >\n                <div>\n                    <ul>\n                        <backend-uploader-item\n                            v-for=\"(file, index) in files\"\n                            :key=\"file.key\"\n                            :fileName=\"file.name\"\n                            :status=\"file.status\"\n                            :progress=\"file.progress\"\n                            :errorMessage=\"file.errorMessage\"\n                            @removeclick=\"onRemoveClick(index)\"\n                        ></backend-uploader-item>\n                    </ul>\n                </div>\n            </backend-scrollable-panel>\n        </div>\n    </div>\n\n</div>"
  },
  {
    "path": "modules/backend/widgets/Filter.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Lang;\nuse DbDongle;\nuse Backend\\Classes\\WidgetBase;\nuse October\\Rain\\Element\\ElementHolder;\nuse October\\Contracts\\Element\\FilterElement;\nuse Backend\\Classes\\FilterScope;\nuse ApplicationException;\nuse SystemException;\n\n/**\n * Filter Widget renders a container used for filtering things\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Filter extends WidgetBase implements FilterElement\n{\n    use \\Backend\\Widgets\\Filter\\IsFilterElement;\n    use \\Backend\\Widgets\\Filter\\ScopeProcessor;\n    use \\Backend\\Widgets\\Filter\\HasFilterWidgets;\n    use \\Backend\\Widgets\\Filter\\HasLegacyDefinitions;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var array scopes defined by configuration\n     */\n    public $scopes;\n\n    /**\n     * @var Model model associated to the filtering, optional\n     */\n    public $model;\n\n    /**\n     * @var string context of this filter, scopes that do not belong\n     * to this context will not be shown.\n     */\n    public $context;\n\n    /**\n     * @var string arrayName if the scope element names should be contained in an array.\n     * Eg: `<input name=\"CustomFilter[scopeName]\" />`\n     */\n    public $arrayName = 'CustomFilter';\n\n    /**\n     * @var string customPageName will be reset when a filter is applied, shared with the list widget\n     */\n    public $customPageName = 'page';\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'filter';\n\n    /**\n     * @var boolean scopesDefined determines if scope definitions have been created.\n     */\n    protected $scopesDefined = false;\n\n    /**\n     * @var array allScopes used in this filter.\n     */\n    protected $allScopes = [];\n\n    /**\n     * @var array scopeModels used in this filter.\n     */\n    protected $scopeModels = [];\n\n    /**\n     * @var array cssClasses to apply to the filter container element\n     */\n    public $cssClasses = [];\n\n    /**\n     * init the widget, called by the constructor and free from its parameters.\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'scopes',\n            'model',\n            'context',\n            'arrayName',\n            'customPageName',\n        ]);\n\n        if (!$this->customPageName) {\n            $this->customPageName = '_page';\n        }\n\n        $this->initFilterWidgetsConcern();\n    }\n\n    /**\n     * bindToController ensures scopes are defined and filter widgets are registered so they\n     * can also be bound to the controller this allows their AJAX features to operate.\n     * @return void\n     */\n    public function bindToController()\n    {\n        $this->defineFilterScopes();\n        parent::bindToController();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/october.filter.js');\n    }\n\n    /**\n     * render the widget.\n     */\n    public function render()\n    {\n        $this->defineFilterScopes();\n        $this->applyFiltersFromModel();\n        $this->prepareVars();\n\n        return $this->makePartial('filter');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['cssClasses'] = implode(' ', $this->cssClasses);\n        $this->vars['scopes'] = $this->allScopes;\n        $this->vars['pageName'] = $this->customPageName;\n    }\n\n    /**\n     * defineFilterScopes creates an array of filter scopes from the configuration\n     */\n    protected function defineFilterScopes()\n    {\n        if ($this->scopesDefined) {\n            return;\n        }\n\n        /**\n         * @event backend.filter.extendScopesBefore\n         * Provides an opportunity to interact with the Filter widget before defining the filter scopes\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.filter.extendScopesBefore', function ((\\Backend\\Widgets\\Filter) $filterWidget) {\n         *         // Just in case you really had to do something before scopes are defined\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('filter.extendScopesBefore', function () use ((\\Backend\\Widgets\\Filter) $filterWidget) {\n         *         // Just in case you really had to do something before scopes are defined\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.filter.extendScopesBefore');\n\n        // All scopes\n        if (!isset($this->scopes) || !is_array($this->scopes)) {\n            $this->scopes = [];\n        }\n\n        if ($this->scopes) {\n            $this->addScopes($this->scopes);\n        }\n        else {\n            $this->addScopesFromModel();\n        }\n\n        /**\n         * @event backend.filter.extendScopes\n         * Provides an opportunity to interact with the Filter widget & its scopes after the filter scopes have been initialized\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.filter.extendScopes', function ((\\Backend\\Widgets\\Filter) $filterWidget) {\n         *         $filterWidget->addScopes([\n         *             'my_scope' => [\n         *                 'label' => 'My Filter Scope'\n         *             ]\n         *         ]);\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('filter.extendScopes', function () use ((\\Backend\\Widgets\\Filter) $filterWidget) {\n         *         $filterWidget->removeScope('my_scope');\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.filter.extendScopes');\n\n        // Apply post processing\n        $this->processLegacyDefinitions($this->allScopes);\n        $this->processScopeModels($this->allScopes);\n        $this->processPermissionCheck($this->allScopes);\n        $this->processAutoOrder($this->allScopes);\n        $this->processFilterWidgetScopes($this->allScopes);\n        $this->processFieldOptionValues($this->allScopes);\n\n        // Set scope values from data source\n        foreach ($this->allScopes as $scope) {\n            $scope->setScopeValue($this->getScopeValue($scope));\n        }\n\n        $this->scopesDefined = true;\n    }\n\n    /**\n     * addScopes programmatically, used internally and for extensibility.\n     */\n    public function addScopes(array $scopes)\n    {\n        foreach ($scopes as $name => $config) {\n            $scopeObj = $this->makeFilterScope($name, (array) $config);\n\n            // Check that the filter scope matches the active context\n            if ($scopeObj->context !== null) {\n                $context = is_array($scopeObj->context) ? $scopeObj->context : [$scopeObj->context];\n                if (!in_array($this->getContext(), $context)) {\n                    continue;\n                }\n            }\n\n            // Scope name without @context suffix\n            $scopeName = $scopeObj->scopeName;\n\n            $this->allScopes[$scopeName] = $scopeObj;\n        }\n    }\n\n    /**\n     * addScopesFromModel from the model\n     */\n    protected function addScopesFromModel(): void\n    {\n        if (!$this->model) {\n            return;\n        }\n\n        if (method_exists($this->model, 'defineFilterScopes')) {\n            $this->model->defineFilterScopes($this);\n        }\n    }\n\n    /**\n     * removeScope programmatically, used for extensibility.\n     * @param string $scopeName\n     */\n    public function removeScope($scopeName)\n    {\n        if (isset($this->allScopes[$scopeName])) {\n            unset($this->allScopes[$scopeName]);\n        }\n    }\n\n    /**\n     * makeFilterScope creates a filter scope object from name and configuration.\n     */\n    protected function makeFilterScope($name, $config)\n    {\n        $scopeType = $config['type'] ?? null;\n        [$scopeName, $scopeContext] = $this->evalScopeName($name);\n\n        $scope = new FilterScope([\n            'scopeName' => $scopeName,\n            'arrayName' => $this->arrayName,\n            // @deprecated v4 this should be uncommented\n            // 'idPrefix' => $this->getId()\n        ]);\n\n        $scope->useConfig($config);\n        $scope->idPrefix($this->getId());\n\n        if ($scopeContext) {\n            $scope->context($scopeContext);\n        }\n\n        if ($scopeType) {\n            $scope->displayAs($scopeType);\n        }\n\n        return $scope;\n    }\n\n    /**\n     * applyAllScopesToQuery applies all scopes to a DB query.\n     * @param  Builder $query\n     * @return Builder\n     */\n    public function applyAllScopesToQuery($query)\n    {\n        $this->defineFilterScopes();\n\n        foreach ($this->allScopes as $scope) {\n            $this->applyScopeToQuery($scope, $query);\n        }\n\n        return $query;\n    }\n\n    /**\n     * applyScopeToQuery applies a filter scope constraints to a DB query.\n     * @param  string $scope\n     * @param  Builder $query\n     * @return Builder\n     */\n    public function applyScopeToQuery($scope, $query)\n    {\n        if (is_string($scope)) {\n            $scope = $this->getScope($scope);\n        }\n\n        switch ($scope->type) {\n            case 'checkbox':\n            case 'switch':\n                $this->applyCheckboxScopeToQuery($query, $scope);\n                break;\n\n            case 'dropdown':\n                $this->applyDropdownScopeToQuery($query, $scope);\n                break;\n\n            case 'widget':\n                $this->applyWidgetScopeToQuery($query, $scope);\n                break;\n        }\n\n        return $query;\n    }\n\n    /**\n     * applyWidgetScopeToQuery\n     */\n    public function applyWidgetScopeToQuery($query, $scope)\n    {\n        if (!$scope->scopeValue) {\n            return;\n        }\n\n        $this->makeFilterScopeWidget($scope)->applyScopeToQuery($query);\n    }\n\n    /**\n     * applyCheckboxScopeToQuery\n     */\n    public function applyCheckboxScopeToQuery($query, $scope)\n    {\n        // Check true value\n        $scopeValue = $scope->scopeValue !== null ? $scope->value : null;\n        if (!$scopeValue) {\n            return;\n        }\n\n        // Scope\n        if ($scope->modelScope) {\n            $scope->applyScopeMethodToQuery($query);\n            return;\n        }\n\n        // Condition\n        $scopeConditions = $scope->conditions;\n        if ($scopeConditions) {\n            // Switch scope: multiple conditions, value either 1 or 2\n            if (is_array($scopeConditions)) {\n                $conditionNum = ((int) $scopeValue) - 1;\n                [$scopeConditions] = array_slice($scopeConditions, $conditionNum);\n            }\n\n            $query->whereRaw(DbDongle::parse($scopeConditions));\n            return;\n        }\n\n        if ($scope->type === 'switch') {\n            $scopeValue = (int) $scopeValue === 2;\n        }\n\n        $query->where($scope->valueFrom ?: $scope->scopeName, $scopeValue);\n    }\n\n    /**\n     * applyDropdownScopeToQuery\n     */\n    public function applyDropdownScopeToQuery($query, $scope)\n    {\n        // Check true value\n        $scopeValue = $scope->scopeValue !== null ? $scope->value : null;\n        if ($scopeValue === null || $scopeValue === '') {\n            return;\n        }\n\n        // Scope\n        if ($scope->modelScope) {\n            $scope->applyScopeMethodToQuery($query);\n            return;\n        }\n\n        // Condition\n        $sqlCondition = $scope->conditions;\n        if (is_string($sqlCondition)) {\n            // @deprecated adapt legacy format\n            $sqlCondition = str_replace([\"':value'\", \"':filtered'\", ':filtered'], ':value', $sqlCondition);\n\n            $query->whereRaw(DbDongle::parse($sqlCondition, [\n                'value' => $scopeValue\n            ]));\n            return;\n        }\n\n        $query->where($scope->valueFrom ?: $scope->scopeName, $scopeValue);\n    }\n\n    /**\n     * renderScopeElement for a scope\n     */\n    public function renderScopeElement($scope)\n    {\n        if (is_string($scope)) {\n            if (!isset($this->allScopes[$scope])) {\n                throw new SystemException(Lang::get(\n                    'backend::lang.form.missing_definition',\n                    compact('scope')\n                ));\n            }\n\n            $scope = $this->allScopes[$scope];\n        }\n\n        return $this->makePartial('scope_' . $scope->type, [\n            'scope' => $scope,\n        ]);\n    }\n\n    /**\n     * renderScopeFormElement\n     */\n    public function renderScopeFormElement($scope)\n    {\n        if (is_string($scope)) {\n            if (!isset($this->allScopes[$scope])) {\n                throw new SystemException(Lang::get(\n                    'backend::lang.form.missing_definition',\n                    compact('scope')\n                ));\n            }\n\n            $scope = $this->allScopes[$scope];\n        }\n\n        return $this->makePartial('form_' . $scope->type, [\n            'scope' => $scope,\n        ]);\n    }\n\n    /**\n     * evalScopeName parses a scopes's name for embedded context\n     * with a result of scopeName@context to [scopeName, context]\n     */\n    protected function evalScopeName(string $scope): array\n    {\n        if (strpos($scope, '@') === false) {\n            return [$scope, null];\n        }\n\n        return explode('@', $scope);\n    }\n\n    /**\n     * getHeaderValue looks up the scope header\n     */\n    public function getHeaderValue($scope)\n    {\n        if ($scope->shortLabel !== null) {\n            $value = Lang::get($scope->shortLabel);\n        }\n        else {\n            $value = Lang::get($scope->label);\n        }\n\n        /**\n         * @event backend.filter.overrideHeaderValue\n         * Overrides the scope header value in a filter widget.\n         *\n         * If a value is returned from this event, it will be used as the value for the provided scope.\n         * `$value` is passed by reference so modifying the variable in place is also supported. Example usage:\n         *\n         *     Event::listen('backend.filter.overrideHeaderValue', function ($filterWidget, $scope, &$value) {\n         *         $value .= '-modified';\n         *     });\n         *\n         * Or\n         *\n         *     $filterWidget->bindEvent('filter.overrideHeaderValue', function ($scope, $value) {\n         *         return 'Custom header value';\n         *     });\n         *\n         */\n        if ($response = $this->fireSystemEvent('backend.filter.overrideHeaderValue', [$scope, &$value])) {\n            $value = $response;\n        }\n\n        return $value;\n    }\n\n    /**\n     * getScopeValue returns a scope value for this widget instance.\n     */\n    public function getScopeValue($scope)\n    {\n        if (is_string($scope)) {\n            $scope = $this->getScope($scope);\n        }\n\n        $cacheKey = 'scope-'.$scope->scopeName;\n        return $this->getSession($cacheKey, $scope->getDefaultScopeValue());\n    }\n\n    /**\n     * putScopeValue sets an scope value for this widget instance.\n     */\n    public function putScopeValue($scope, $value)\n    {\n        if (is_string($scope)) {\n            $scope = $this->getScope($scope);\n        }\n\n        // Set in session\n        $cacheKey = 'scope-'.$scope->scopeName;\n        $this->putSession($cacheKey, $value);\n\n        // Set in memory\n        $scope->setScopeValue($value);\n\n        // Set in widget memory\n        if ($scope->type === 'widget' && ($widget = $this->makeFilterScopeWidget($scope))) {\n            $widget->getFilterScope()->setScopeValue($value);\n        }\n    }\n\n    /**\n     * getScopes gets all the registered scopes for the instance.\n     * @return array\n     */\n    public function getScopes()\n    {\n        return $this->allScopes;\n    }\n\n    /**\n     * getScope gets a specified scope object\n     * @param  string $scope\n     * @return mixed\n     */\n    public function getScope($scope)\n    {\n        if (!isset($this->allScopes[$scope])) {\n            throw new ApplicationException(\"No definition for scope [{$scope}] found\");\n        }\n\n        return $this->allScopes[$scope];\n    }\n\n    /**\n     * getDependScopes\n     */\n    protected function getDependScopes($parentScope): array\n    {\n        $dependScopes = [];\n        foreach ($this->getScopes() as $scope) {\n            if ($scope->scopeName === $parentScope->scopeName) {\n                continue;\n            }\n\n            if (!$scope->dependsOn) {\n                continue;\n            }\n\n            foreach ((array) $scope->dependsOn as $scopeName) {\n                if ($scopeName === $parentScope->scopeName) {\n                    $dependScopes[] = $scope;\n                }\n            }\n        }\n\n        return $dependScopes;\n    }\n\n    /**\n     * getModel returns the active model for this form.\n     * @return \\Model|null\n     */\n    public function getModel()\n    {\n        return $this->model;\n    }\n\n    /**\n     * getContext returns the active context for displaying the form.\n     * @return string\n     */\n    public function getContext()\n    {\n        return $this->context;\n    }\n\n    /**\n     * onLoadFilterForm\n     */\n    public function onLoadFilterForm()\n    {\n        $this->defineFilterScopes();\n\n        if (!$scope = post('scopeName')) {\n            return;\n        }\n\n        return $this->renderScopeFormElement($scope);\n    }\n\n    /**\n     * onFilterUpdate updates a filter scope value.\n     * @return array\n     */\n    public function onFilterUpdate()\n    {\n        if (post('preload')) {\n            return $this->onPreloadContent();\n        }\n\n        $updateScopePartial = false;\n        $this->defineFilterScopes();\n\n        if (!$scope = post('scopeName')) {\n            return;\n        }\n\n        $scope = $this->getScope($scope);\n\n        switch ($scope->type) {\n            case 'checkbox':\n                $checked = post('value');\n                $this->putScopeValue($scope, ['value' => $checked]);\n                break;\n\n            case 'dropdown':\n            case 'switch':\n                $value = post('value');\n                $this->putScopeValue($scope, ['value' => $value]);\n                break;\n\n            case 'widget':\n                $widget = $this->makeFilterScopeWidget($scope);\n                $this->putScopeValue($scope, $widget->getActiveValue());\n                $updateScopePartial = true;\n                break;\n        }\n\n        // Apply model filters to scopes\n        $this->applyFiltersFromModel();\n\n        // Build response\n        $result = [];\n        if ($updateScopePartial) {\n            $result['#' . $scope->getId('group')] = $this->makePartial('scope', ['scope' => $scope]);\n        }\n\n        // Reset dependant scopes\n        if ($dependScopes = $this->getDependScopes($scope)) {\n            foreach ($dependScopes as $dScope) {\n                $this->putScopeValue($dScope, null);\n                $result['#' . $dScope->getId('group')] = $this->makePartial('scope', ['scope' => $dScope]);\n            }\n        }\n\n        $result = $this->extendScopeUpdateResponse($result, func_get_args());\n\n        return $result;\n    }\n\n    /**\n     * onPreloadContent\n     */\n    public function onPreloadContent()\n    {\n        $this->defineFilterScopes();\n\n        $result = [];\n\n        foreach ($this->getScopes() as $scope) {\n            $hasNoForm = in_array($scope->type, ['checkbox', 'switch', 'dropdown']);\n            if ($hasNoForm) {\n                continue;\n            }\n\n            $result[$scope->scopeName] = $this->renderScopeFormElement($scope);\n        }\n\n        return ['popoverContent' => $result];\n    }\n\n    /**\n     * onFilterClearAll\n     */\n    public function onFilterClearAll()\n    {\n        $this->prepareVars();\n\n        foreach ($this->getScopes() as $scope) {\n            $scope->setScopeValue($scope->getDefaultScopeValue());\n\n            if ($scope->type === 'widget' && ($widget = $this->makeFilterScopeWidget($scope))) {\n                $widget->getFilterScope()->setScopeValue($scope->getDefaultScopeValue());\n            }\n        }\n\n        $this->resetSession();\n\n        // Return response\n        $result = [\n            '#' . $this->getId() => $this->makePartial('filter-container')\n        ];\n\n        $result = $this->extendScopeUpdateResponse($result, func_get_args());\n\n        return $result;\n    }\n\n    /**\n     * applyFiltersFromModel allows the model to filter scopes\n     */\n    protected function applyFiltersFromModel()\n    {\n        if (!$this->model) {\n            return;\n        }\n\n        $targetModel = clone $this->model;\n\n        // For passing to events\n        $holder = new ElementHolder($this->allScopes);\n\n        // Standard usage\n        if (method_exists($targetModel, 'filterScopes')) {\n            $targetModel->filterScopes($holder, $this->getContext());\n        }\n\n        // Advanced usage\n        if (method_exists($targetModel, 'fireEvent')) {\n            /**\n             * @event model.filter.filterScopes\n             * Called after the filter is initialized\n             *\n             * Example usage:\n             *\n             *     $model->bindEvent('model.filter.filterScopes', function ((\\Backend\\Widgets\\Filter) $filterWidget, (stdClass) $scopes, (string) $context) use (\\October\\Rain\\Database\\Model $model) {\n             *         if ($someCondition) {\n             *             $scopes->roles->hidden = false;\n             *         }\n             *     });\n             *\n             */\n            $targetModel->fireEvent('model.filter.filterScopes', [$this, $holder, $this->getContext()]);\n        }\n    }\n\n    /**\n     * extendScopeUpdateResponse\n     */\n    public function extendScopeUpdateResponse($result, $params)\n    {\n        /**\n         * @event backend.filter.update\n         * Called after the filter is updated, should return an array of additional result parameters.\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.filter.update', function ((\\Backend\\Widgets\\Filter) $filterWidget, (array) $params) {\n         *         return ['#my-partial-id' => $filterWidget->makePartial(...)];\n         *     });\n         *\n         * Or\n         *\n         *     $filterWidget->bindEvent('filter.update', function ((array) $params) use ((\\Backend\\Widgets\\Filter $filterWidget)) {\n         *         return ['#my-partial-id' => $filterWidget->makePartial(...)];\n         *     });\n         *\n         */\n        $eventResults = $this->fireSystemEvent('backend.filter.update', [$params], false);\n\n        foreach ($eventResults as $eventResult) {\n            if (!is_array($eventResult)) {\n                continue;\n            }\n\n            $result = $eventResult + $result;\n        }\n\n        return $result;\n    }\n\n    /**\n     * extendScopeModelQuery\n     */\n    public function extendScopeModelQuery($scope, $query)\n    {\n        /**\n         * @event backend.filter.extendQuery\n         * Provides an opportunity to extend the query of the list of options\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.filter.extendQuery', function ((\\Backend\\Widgets\\Filter) $filterWidget, $query, (\\Backend\\Classes\\FilterScope) $scope) {\n         *         if ($scope->scopeName == 'status') {\n         *             $query->where('status', '<>', 'all');\n         *         }\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('filter.extendQuery', function ($query, (\\Backend\\Classes\\FilterScope) $scope) {\n         *         if ($scope->scopeName == 'status') {\n         *             $query->where('status', '<>', 'all');\n         *         }\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.filter.extendQuery', [$query, $scope]);\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/Form.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Lang;\nuse Form as FormHelper;\nuse Backend\\Classes\\FormTabs;\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\WidgetBase;\nuse October\\Rain\\Element\\ElementHolder;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Rain\\Database\\Model;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse SystemException;\nuse BackedEnum;\nuse UnitEnum;\n\n/**\n * Form Widget is used for building back end forms and renders a form\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Form extends WidgetBase implements FormElement\n{\n    use \\Backend\\Widgets\\Form\\IsFormElement;\n    use \\Backend\\Widgets\\Form\\FieldProcessor;\n    use \\Backend\\Widgets\\Form\\HasFormWidgets;\n    use \\Backend\\Widgets\\Form\\HasTranslatable;\n    use \\Backend\\Traits\\FormModelSaver;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var array fields configuration.\n     */\n    public $fields;\n\n    /**\n     * @var array tabs (primary) configuration.\n     */\n    public $tabs;\n\n    /**\n     * @var array secondaryTabs configuration.\n     */\n    public $secondaryTabs;\n\n    /**\n     * @var Model model object for the form.\n     */\n    public $model;\n\n    /**\n     * @var array data containing field values, if none supplied, model is used.\n     */\n    public $data;\n\n    /**\n     * @var string context of this form, fields that do not belong\n     * to this context will not be shown.\n     */\n    public $context;\n\n    /**\n     * @var string arrayName if the field element names should be contained in an array.\n     * Eg: `<input name=\"nameArray[fieldName]\" />`\n     */\n    public $arrayName;\n\n    /**\n     * @var bool isNested is used to flag that this form is being rendered as part of another form,\n     * a good indicator to expect that the form model and dataset values will differ.\n     */\n    public $isNested = false;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'form';\n\n    /**\n     * @var boolean fieldsDefined determines if field definitions have been created.\n     */\n    protected $fieldsDefined = false;\n\n    /**\n     * @var array allFields used in this form.\n     * @see \\Backend\\Classes\\FormField\n     */\n    protected $allFields = [];\n\n    /**\n     * @var object allTabs sections used in this form.\n     * @see \\Backend\\Classes\\FormTabs\n     */\n    protected $allTabs = [\n        'outside' => null,\n        'primary' => null,\n        'secondary' => null,\n    ];\n\n    /**\n     * @var array saveDataOverride allows for values to be changed during the save process\n     */\n    protected $saveDataOverride;\n\n    /**\n     * @var string sessionKey for the active session, used for editing forms and deferred bindings.\n     */\n    public $sessionKey;\n\n    /**\n     * @var string sessionKeySuffix adds some extra uniqueness to the session key.\n     */\n    public $sessionKeySuffix;\n\n    /**\n     * @var string|null parentFieldName if this form is nested in a field.\n     */\n    public $parentFieldName = null;\n\n    /**\n     * @var bool previewMode renders this form with uneditable preview data.\n     */\n    public $previewMode = false;\n\n    /**\n     * @var bool surveyMode renders this form using a survey layout (no tabs)\n     */\n    public $surveyMode = false;\n\n    /**\n     * @var bool horizontalMode renders this form using a horizontal layout\n     */\n    public $horizontalMode = false;\n\n    /**\n     * @var bool useTranslatable fields\n     */\n    public $useTranslatable  = true;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'fields',\n            'tabs',\n            'secondaryTabs',\n            'model',\n            'data',\n            'context',\n            'arrayName',\n            'isNested',\n            'sessionKey',\n            'sessionKeySuffix',\n            'parentFieldName',\n            'previewMode',\n            'surveyMode',\n            'horizontalMode',\n            'useTranslatable',\n        ]);\n\n        $this->initFormWidgetsConcern();\n        $this->initFormTabs();\n        $this->validateModel();\n    }\n\n    /**\n     * bindToController ensure fields are defined and form widgets are registered so they\n     * can also be bound to the controller this allows their AJAX features to operate.\n     * @return void\n     */\n    public function bindToController()\n    {\n        $this->defineFormFields();\n        parent::bindToController();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/october.form.js');\n    }\n\n    /**\n     * render the widget.\n     *\n     * Options:\n     *  - preview: Render this form as an uneditable preview. Default: false\n     *  - useContainer: Wrap the result in a container, used by AJAX. Default: true\n     *  - section: Which form section to render. Default: null\n     *     - outside: Renders the Outside Fields section.\n     *     - primary: Renders the Primary Tabs section.\n     *     - secondary: Renders the Secondary Tabs section.\n     *     - null: Renders all sections\n     *\n     * @param array $options\n     * @return string|bool The rendered partial contents, or false if suppressing an exception\n     */\n    public function render($options = [])\n    {\n        $this->defineFormFields();\n        $this->applyFiltersFromModel();\n        $this->prepareVars();\n\n        // Custom options\n        if (isset($options['preview'])) {\n            $this->previewMode = $options['preview'];\n        }\n\n        if (isset($options['surveyMode'])) {\n            $this->surveyMode = $options['surveyMode'];\n        }\n\n        $options['useContainer'] ??= true;\n        $options['section'] ??= null;\n\n        $extraVars = [];\n        $targetPartial = 'form';\n\n        // Determine the partial to use based on the supplied section option\n        if ($section = $options['section']) {\n            $section = strtolower($section);\n\n            if (isset($this->allTabs->{$section})) {\n                $extraVars['tabs'] = $this->allTabs->{$section};\n            }\n\n            $targetPartial = 'section';\n            $extraVars['renderSection'] = $section;\n        }\n\n        // Apply a container to the element\n        if ($options['useContainer']) {\n            $targetPartial = $section ? 'section-container' : 'form-container';\n        }\n\n        // Force preview mode on all widgets\n        if ($this->previewMode) {\n            foreach ($this->formWidgets as $widget) {\n                $widget->previewMode = $this->previewMode;\n            }\n        }\n\n        return $this->makePartial($targetPartial, $extraVars);\n    }\n\n    /**\n     * renderFields renders the specified fields.\n     * @deprecated use `render(['primaryTab' => 'My Tab'])`\n     */\n    public function renderFields(array $fields): string\n    {\n        return $this->makePartial('form_fields', ['fields' => $fields]);\n    }\n\n    /**\n     * renderTabSection renders the specified tabs.\n     * @deprecated use `render(['section' => 'outside', 'useContainer' => false])`\n     */\n    public function renderTabSection($tabs): string\n    {\n        return $this->makePartial('section', ['tabs' => $tabs]);\n    }\n\n    /**\n     * renderField\n     */\n    public function renderTab($tabName, $options = [])\n    {\n        $this->defineFormFields();\n        $this->prepareVars();\n\n        $options['secondaryTab'] ??= false;\n\n        // Render a secondary tab\n        if ($options['secondaryTab']) {\n            $extraVars['fields'] = array_get($this->allTabs->secondary->getFields(), $tabName, []);\n        }\n        else {\n            $extraVars['fields'] = array_get($this->allTabs->primary->getFields(), $tabName, []);\n        }\n\n        return $this->makePartial('form_fields', $extraVars);\n    }\n\n    /**\n     * renderField renders a single form field\n     *\n     * Options:\n     *  - useContainer: Wrap the result in a container, used by AJAX. Default: true\n     *\n     * @param \\Backend\\Classes\\FormField|string $field The field name or definition\n     * @param array $options\n     * @return string|bool The rendered partial contents, or false if suppressing an exception\n     */\n    public function renderField($field, $options = [])\n    {\n        $this->defineFormFields();\n        $this->prepareVars();\n\n        if (is_string($field)) {\n            if (!isset($this->allFields[$field])) {\n                throw new SystemException(Lang::get(\n                    'backend::lang.form.missing_definition',\n                    compact('field')\n                ));\n            }\n\n            $field = $this->allFields[$field];\n        }\n\n        if (!isset($options['useContainer'])) {\n            $options['useContainer'] = true;\n        }\n\n        $targetPartial = $options['useContainer'] ? 'field-container' : 'field';\n\n        return $this->makePartial($targetPartial, ['field' => $field]);\n    }\n\n    /**\n     * renderFieldElement renders the HTML element for a field\n     * @param \\Backend\\Classes\\FormField|string $field\n     * @return string|bool The rendered partial contents, or false if suppressing an exception\n     */\n    public function renderFieldElement($field)\n    {\n        if (is_string($field)) {\n            if (!isset($this->allFields[$field])) {\n                throw new SystemException(Lang::get(\n                    'backend::lang.form.missing_definition',\n                    compact('field')\n                ));\n            }\n\n            $field = $this->allFields[$field];\n        }\n\n        return $this->makePartial('field_' . $field->type, [\n            'field' => $field,\n            'formModel' => $this->model\n        ]);\n    }\n\n    /**\n     * initFormTabs\n     */\n    protected function initFormTabs()\n    {\n        $this->allTabs = (object) $this->allTabs;\n        $this->allTabs->outside = new FormTabs(['section' => FormTabs::SECTION_OUTSIDE]);\n        $this->allTabs->primary = new FormTabs(['section' => FormTabs::SECTION_PRIMARY]);\n        $this->allTabs->secondary = new FormTabs(['section' => FormTabs::SECTION_SECONDARY]);\n    }\n\n    /**\n     * validateModel validates the supplied form model.\n     * @return mixed\n     */\n    protected function validateModel()\n    {\n        if (!$this->model) {\n            throw new SystemException(Lang::get(\n                'backend::lang.form.missing_model',\n                ['class'=>get_class($this->controller)]\n            ));\n        }\n\n        $this->data = isset($this->data)\n            ? (object) $this->data\n            : $this->model;\n\n        // Non-existent models cannot use translatable features\n        if (!$this->model->exists) {\n            $this->useTranslatable = false;\n        }\n\n        return $this->model;\n    }\n\n    /**\n     * prepareVars prepares the form data\n     */\n    protected function prepareVars()\n    {\n        $this->vars['sessionKey'] = $this->getSessionKey();\n        $this->vars['outsideTabs'] = $this->allTabs->outside;\n        $this->vars['primaryTabs'] = $this->allTabs->primary;\n        $this->vars['secondaryTabs'] = $this->allTabs->secondary;\n    }\n\n    /**\n     * setFormValues sets or resets form field values.\n     * @param array $data\n     * @return array\n     */\n    public function setFormValues($data = null)\n    {\n        $data = $this->setFormValuesInternal($data);\n\n        // Notify form widgets new form field values\n        foreach ($this->formWidgets as $widget) {\n            $widget->model = $this->model;\n            $widget->resetFormValue();\n        }\n\n        return $data;\n    }\n\n    /**\n     * setFormValuesInternal method delays resetting form widgets\n     * @param array $data\n     * @return array\n     */\n    protected function setFormValuesInternal($data = null)\n    {\n        if ($data === null) {\n            $data = $this->getSaveData();\n        }\n\n        // Fill the model as if it were to be saved\n        if (!$this->isNested) {\n            $this->prepareModelsToSave($this->model, $data);\n        }\n\n        // Data set differs from model\n        if ($this->data !== $this->model) {\n            $this->data = (object) array_merge((array) $this->data, (array) $data);\n        }\n\n        // Set field values from data source\n        foreach ($this->allFields as $field) {\n            $field->value = $this->getFieldValue($field);\n        }\n\n        return $data;\n    }\n\n    /**\n     * onRefresh event handler for refreshing the form.\n     *\n     * @return array\n     */\n    public function onRefresh()\n    {\n        $result = [];\n        $saveData = $this->getSaveDataInternal();\n        $this->context = FormField::CONTEXT_REFRESH;\n\n        /**\n         * @event backend.form.beforeRefresh\n         * Called before the form is refreshed, modify the $dataHolder->data property in place\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.beforeRefresh', function ((\\Backend\\Widgets\\Form) $formWidget, (stdClass) $dataHolder) {\n         *         $dataHolder->data = $arrayOfSaveDataToReplaceExistingDataWith;\n         *     });\n         *\n         * Or\n         *\n         *     $formWidget->bindEvent('form.beforeRefresh', function ((stdClass) $dataHolder) {\n         *         $dataHolder->data = $arrayOfSaveDataToReplaceExistingDataWith;\n         *     });\n         *\n         */\n        $dataHolder = (object) ['data' => $saveData];\n        $this->fireSystemEvent('backend.form.beforeRefresh', [$dataHolder]);\n        $saveData = $dataHolder->data;\n\n        // Set the form variables and prepare the widget\n        $this->setFormValuesInternal($saveData);\n        $this->applyFiltersFromModel();\n        $this->prepareVars();\n\n        /**\n         * @event backend.form.refreshFields\n         * Called when the form is refreshed, giving the opportunity to modify the form fields\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.refreshFields', function ((\\Backend\\Widgets\\Form) $formWidget, (array) $allFields) {\n         *         $allFields['name']->required = false;\n         *     });\n         *\n         * Or\n         *\n         *     $formWidget->bindEvent('form.refreshFields', function ((array) $allFields) {\n         *         $allFields['name']->required = false;\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.form.refreshFields', [$this->allFields]);\n\n        // If an array of fields is supplied, update specified fields individually.\n        if (($updateFields = post('fields')) && is_array($updateFields)) {\n            foreach ($updateFields as $field) {\n                if (!isset($this->allFields[$field])) {\n                    continue;\n                }\n\n                $fieldObject = $this->allFields[$field];\n                $result['#' . $fieldObject->getId('group')] = $this->makePartial('field', ['field' => $fieldObject]);\n            }\n        }\n\n        // Update the whole form\n        if (empty($result)) {\n            $result = ['#'.$this->getId() => $this->makePartial('form')];\n        }\n\n        /**\n         * @event backend.form.refresh\n         * Called after the form is refreshed, should return an array of additional result parameters.\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.refresh', function ((\\Backend\\Widgets\\Form) $formWidget, (array) $result) {\n         *         $result['#my-partial-id' => $formWidget->makePartial('$/path/to/custom/backend/_partial.php')];\n         *         return $result;\n         *     });\n         *\n         * Or\n         *\n         *     $formWidget->bindEvent('form.refresh', function ((array) $result) use ((\\Backend\\Widgets\\Form $formWidget)) {\n         *         $result['#my-partial-id' => $formWidget->makePartial('$/path/to/custom/backend/_partial.php')];\n         *         return $result;\n         *     });\n         *\n         */\n        $eventResults = $this->fireSystemEvent('backend.form.refresh', [$result], false);\n\n        foreach ($eventResults as $eventResult) {\n            if (!is_array($eventResult)) {\n                continue;\n            }\n\n            $result = $eventResult + $result;\n        }\n\n        return $result;\n    }\n\n    /**\n     * onLazyLoadTab renders all fields of a tab in the target tab pane\n     */\n    public function onLazyLoadTab()\n    {\n        $target  = post('target');\n\n        if (!$tabName = post('name')) {\n            throw new SystemException(Lang::get('backend::lang.form.missing_tab'));\n        }\n\n        $tab = $this->getTab(post('section', 'primary'));\n\n        $fields = $tab !== null ? array_get($tab->getFields(), $tabName) : [];\n\n        return [\n            $target => $this->makePartial('form_fields', ['fields' => $fields]),\n        ];\n    }\n\n    /**\n     * defineFormFields creates a flat array of form fields from the configuration\n     * and slots fields in to their respective tabs\n     */\n    protected function defineFormFields()\n    {\n        if ($this->fieldsDefined) {\n            return;\n        }\n\n        /**\n         * @event backend.form.extendFieldsBefore\n         * Called before the form fields are defined\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.extendFieldsBefore', function ((\\Backend\\Widgets\\Form) $widget) {\n         *         // You should always check to see if you're extending correct model/controller\n         *         if (!$widget->model instanceof \\Foo\\Example\\Models\\Bar) {\n         *             return;\n         *         }\n         *\n         *         // Add a new field named example_field\n         *         $widget->addField('example_field', [\n         *             'label' => 'Example field',\n         *             'comment' => 'Your example field',\n         *             'type' => 'text'\n         *         ]);\n         *     });\n         *\n         * Or\n         *\n         *     $formWidget->bindEvent('form.extendFieldsBefore', function () use ((\\Backend\\Widgets\\Form $formWidget)) {\n         *         // You should always check to see if you're extending correct model/controller\n         *         if (!$widget->model instanceof \\Foo\\Example\\Models\\Bar) {\n         *             return;\n         *         }\n         *\n         *         // Add a new field named example_field\n         *         $widget->addField('example_field', [\n         *             'label' => 'Example field',\n         *             'comment' => 'Your example field',\n         *             'type' => 'text'\n         *         ]);\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.form.extendFieldsBefore');\n\n        // Configure tabs\n        $this->allTabs->primary->useConfig((array) $this->tabs);\n        $this->allTabs->secondary->useConfig((array) $this->secondaryTabs);\n\n        // Outside fields\n        if (!isset($this->fields) || !is_array($this->fields)) {\n            $this->fields = [];\n        }\n\n        // Primary Tabs + Fields\n        if (!isset($this->tabs['fields']) || !is_array($this->tabs['fields'])) {\n            $this->tabs['fields'] = [];\n        }\n\n        // Secondary Tabs + Fields\n        if (!isset($this->secondaryTabs['fields']) || !is_array($this->secondaryTabs['fields'])) {\n            $this->secondaryTabs['fields'] = [];\n        }\n\n        // When form fields are manually defined, only use what was defined\n        // and do not load fields from the model for undefined sections\n        $hasDefinedFields = $this->fields || $this->tabs['fields'] || $this->secondaryTabs['fields'];\n\n        if ($this->fields) {\n            $this->addFields($this->fields);\n        }\n        elseif (!$hasDefinedFields) {\n            $this->addFieldsFromModel();\n        }\n\n        if ($this->tabs['fields']) {\n            $this->addFields($this->tabs['fields'], FormTabs::SECTION_PRIMARY);\n        }\n        elseif (!$hasDefinedFields) {\n            $this->addFieldsFromModel(FormTabs::SECTION_PRIMARY);\n        }\n\n        if ($this->secondaryTabs['fields']) {\n            $this->addFields($this->secondaryTabs['fields'], FormTabs::SECTION_SECONDARY);\n        }\n        elseif (!$hasDefinedFields) {\n            $this->addFieldsFromModel(FormTabs::SECTION_SECONDARY);\n        }\n\n        /**\n         * @event backend.form.extendFields\n         * Called after the form fields are defined\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.form.extendFields', function ((\\Backend\\Widgets\\Form) $widget) {\n         *         // Only for the User controller\n         *         if (!$widget->getController() instanceof \\RainLab\\User\\Controllers\\Users) {\n         *             return;\n         *         }\n         *\n         *         // Only for the User model\n         *         if (!$widget->model instanceof \\RainLab\\User\\Models\\User) {\n         *             return;\n         *         }\n         *\n         *         // Add an extra birthday field\n         *         $widget->addFields([\n         *             'birthday' => [\n         *                 'label'   => 'Birthday',\n         *                 'comment' => 'Select the users birthday',\n         *                 'type'    => 'datepicker'\n         *             ]\n         *         ]);\n         *\n         *         // Remove a Surname field\n         *         $widget->removeField('surname');\n         *     });\n         *\n         * Or\n         *\n         *     $formWidget->bindEvent('form.extendFields', function () use ((\\Backend\\Widgets\\Form $formWidget)) {\n         *         // Only for the User controller\n         *         if (!$widget->getController() instanceof \\RainLab\\User\\Controllers\\Users) {\n         *             return;\n         *         }\n         *\n         *         // Only for the User model\n         *         if (!$widget->model instanceof \\RainLab\\User\\Models\\User) {\n         *             return;\n         *         }\n         *\n         *         // Add an extra birthday field\n         *         $widget->addFields([\n         *             'birthday' => [\n         *                 'label'   => 'Birthday',\n         *                 'comment' => 'Select the users birthday',\n         *                 'type'    => 'datepicker'\n         *             ]\n         *         ]);\n         *\n         *         // Remove a Surname field\n         *         $widget->removeField('surname');\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.form.extendFields', [new ElementHolder($this->allFields)]);\n\n        // Apply post processing\n        $this->processPermissionCheck($this->allFields);\n        $this->processFormWidgetFields($this->allFields);\n        $this->processValidationAttributes($this->allFields);\n        $this->processFieldOptionValues($this->allFields);\n\n        // Model based processing\n        if ($this->model && $this->model instanceof \\October\\Rain\\Database\\Model) {\n            $this->processRequiredAttributes($this->allFields);\n            $this->processTranslatableAttributes($this->allFields);\n        }\n\n        // Set field values from data source, if not from the outside\n        foreach ($this->allFields as $field) {\n            if ($field->value === null) {\n                $field->value = $this->getFieldValue($field);\n            }\n        }\n\n        // Apply a default order and sort fields\n        $this->processAutoOrder($this->allTabs->outside);\n        $this->processAutoOrder($this->allTabs->primary);\n        $this->processAutoOrder($this->allTabs->secondary);\n\n        // Convert automatic spanned fields\n        $this->processAutoSpan($this->allTabs->outside);\n        $this->processAutoSpan($this->allTabs->primary);\n        $this->processAutoSpan($this->allTabs->secondary);\n\n        // At least one tab section should stretch\n        if (\n            $this->allTabs->secondary->stretch === null\n            && $this->allTabs->primary->stretch === null\n            && $this->allTabs->outside->stretch === null\n        ) {\n            if ($this->allTabs->secondary->hasFields()) {\n                $this->allTabs->secondary->stretch();\n            }\n            elseif ($this->allTabs->primary->hasFields()) {\n                $this->allTabs->primary->stretch();\n            }\n            else {\n                $this->allTabs->outside->stretch();\n            }\n        }\n\n        $this->fieldsDefined = true;\n    }\n\n    /**\n     * addFields programmatically, used internally and for extensibility\n     * @param array $fields\n     * @param string $inSection\n     */\n    public function addFields(array $fields, ?string $inSection = null): ElementHolder\n    {\n        $built = [];\n        foreach ($fields as $name => $config) {\n            $fieldObj = $built[$name] = $this->makeFormField($name, $config);\n\n            // Check form field matches the active context\n            if (!$fieldObj->matchesContext($this->getContext())) {\n                continue;\n            }\n\n            // Field name without @context suffix\n            $fieldName = $fieldObj->fieldName;\n\n            $this->allFields[$fieldName] = $fieldObj;\n\n            switch (strtolower((string) $inSection)) {\n                case FormTabs::SECTION_PRIMARY:\n                    $this->allTabs->primary->addField($fieldName, $fieldObj);\n                    break;\n                case FormTabs::SECTION_SECONDARY:\n                    $this->allTabs->secondary->addField($fieldName, $fieldObj);\n                    break;\n                default:\n                    $this->allTabs->outside->addField($fieldName, $fieldObj);\n                    break;\n            }\n        }\n\n        return new ElementHolder($built);\n    }\n\n    /**\n     * addField\n     */\n    public function addField($name, $config = []): FormField\n    {\n        if (is_string($config)) {\n            $config = ['label' => $config];\n        }\n\n        return $this->addFields([$name => $config])->$name;\n    }\n\n    /**\n     * addTabFields\n     */\n    public function addTabFields(array $fields): ElementHolder\n    {\n        return $this->addFields($fields, FormTabs::SECTION_PRIMARY);\n    }\n\n    /**\n     * addTabField\n     */\n    public function addTabField($name, $config = []): FormField\n    {\n        if (is_string($config)) {\n            $config = ['label' => $config];\n        }\n\n        return $this->addTabFields([$name => $config])->$name;\n    }\n\n    /**\n     * addSecondaryTabFields\n     */\n    public function addSecondaryTabFields(array $fields): ElementHolder\n    {\n        return $this->addFields($fields, FormTabs::SECTION_SECONDARY);\n    }\n\n    /**\n     * addSecondaryTabField\n     */\n    public function addSecondaryTabField($name, $config = []): FormField\n    {\n        if (is_string($config)) {\n            $config = ['label' => $config];\n        }\n\n        return $this->addSecondaryTabFields([$name => $config])->$name;\n    }\n\n    /**\n     * removeField programmatically\n     */\n    public function removeField($name): bool\n    {\n        if (!isset($this->allFields[$name])) {\n            return false;\n        }\n\n        // Remove from tabs\n        $this->allTabs->primary->removeField($name);\n        $this->allTabs->secondary->removeField($name);\n        $this->allTabs->outside->removeField($name);\n\n        // Remove from main collection\n        unset($this->allFields[$name]);\n\n        return true;\n    }\n\n    /**\n     * removeTab programmatically remove all fields belonging to a tab\n     * @param string $name\n     */\n    public function removeTab($name)\n    {\n        foreach ($this->allFields as $fieldName => $field) {\n            if ($field->tab == $name) {\n                $this->removeField($fieldName);\n            }\n        }\n    }\n\n    /**\n     * makeFormField creates a form field object from name and configuration\n     */\n    protected function makeFormField(string $name, $config = []): FormField\n    {\n        $label = $config['label'] ?? null;\n        [$fieldName, $fieldContext] = $this->evalFieldName($name);\n\n        $field = new FormField([\n            'fieldName' => $fieldName,\n            'label' => $label,\n            'arrayName' => $this->arrayName,\n            'idPrefix' => $this->getId()\n        ]);\n\n        if ($fieldContext) {\n            $field->context($fieldContext);\n        }\n\n        if (is_string($config)) {\n            $field->displayAs($config);\n        }\n        else {\n            $fieldType = $config['type'] ?? null;\n            if (!is_string($fieldType) && $fieldType !== null) {\n                throw new SystemException(Lang::get(\n                    'backend::lang.field.invalid_type',\n                    ['type' => gettype($fieldType)]\n                ));\n            }\n\n            if ($config) {\n                $field->useConfig($config);\n            }\n\n            if ($fieldType) {\n                $field->displayAs($fieldType);\n            }\n        }\n\n        return $field;\n    }\n\n    /**\n     * getFields for the instance\n     */\n    public function getFields(): array\n    {\n        return $this->allFields;\n    }\n\n    /**\n     * getField object specified\n     */\n    public function getField(string $field)\n    {\n        if (isset($this->allFields[$field])) {\n            return $this->allFields[$field];\n        }\n\n        return null;\n    }\n\n    /**\n     * getTabs for the instance\n     * @return object[FormTabs]\n     */\n    public function getTabs()\n    {\n        return $this->allTabs;\n    }\n\n    /**\n     * Get a specified tab object.\n     * Options: outside, primary, secondary.\n     *\n     * @param string $field\n     * @return mixed\n     */\n    public function getTab($tab)\n    {\n        if (isset($this->allTabs->$tab)) {\n            return $this->allTabs->$tab;\n        }\n\n        return null;\n    }\n\n    /**\n     * evalFieldName parses a field's name for embedded context\n     * with a result of fieldName@context to [fieldName, context]\n     */\n    protected function evalFieldName(string $field): array\n    {\n        if (strpos($field, '@') === false) {\n            return [$field, null];\n        }\n\n        return explode('@', $field);\n    }\n\n    /**\n     * hasFieldValue determines if the field value is found in the data.\n     */\n    protected function hasFieldValue($field, $data = null): bool\n    {\n        return $field->getValueFromData($data, FormField::NO_SAVE_DATA) !== FormField::NO_SAVE_DATA;\n    }\n\n    /**\n     * getFieldValue looks up the field value.\n     * @param mixed $field\n     * @param mixed $data\n     * @return string\n     */\n    protected function getFieldValue($field, $data = null)\n    {\n        if ($data === null) {\n            $data = $this->data;\n        }\n\n        if (is_string($field)) {\n            if (!isset($this->allFields[$field])) {\n                throw new SystemException(Lang::get(\n                    'backend::lang.form.missing_definition',\n                    ['field' => $field]\n                ));\n            }\n\n            $field = $this->allFields[$field];\n        }\n\n        $defaultValue = $this->useDefaultValues()\n            ? $field->getDefaultFromData($data)\n            : null;\n\n        // Default value might be a translatable string\n        $defaultValue = is_string($defaultValue) ? __($defaultValue) : $defaultValue;\n\n        // Ask the field for the value\n        $value = $field->getValueFromData($data, $defaultValue);\n\n        // Cast enums to scalar\n        if ($value instanceof BackedEnum) {\n            $value = $value->value;\n        }\n        elseif ($value instanceof UnitEnum) {\n            $value = $value->name;\n        }\n\n        return $value;\n    }\n\n    /**\n     * useDefaultValues determines when to apply default data, usually when the context\n     * is \"create\", the model is non-existent or the form is nested.\n     */\n    protected function useDefaultValues(): bool\n    {\n        return $this->context === FormField::CONTEXT_CREATE || $this->isNested || !$this->model->exists;\n    }\n\n    /**\n     * getFieldDepends returns a HTML encoded value containing the other fields\n     * this field depends on\n     * @param \\Backend\\Classes\\FormField $field\n     */\n    protected function getFieldDepends($field): string\n    {\n        if (!$field->dependsOn) {\n            return '';\n        }\n\n        $dependsOn = is_array($field->dependsOn) ? $field->dependsOn : [$field->dependsOn];\n\n        $dependsOn = htmlspecialchars(json_encode($dependsOn), ENT_QUOTES, 'UTF-8');\n\n        return $dependsOn;\n    }\n\n    /**\n     * showFieldLabels is a helper method to determine if field should be rendered\n     * with label and comments.\n     */\n    protected function showFieldLabels(FormField $field): bool\n    {\n        if (in_array($field->type, ['checkbox', 'switch', 'section', 'hint', 'ruler'])) {\n            return false;\n        }\n\n        if ($field->type === 'widget') {\n            return (bool) ($this->makeFormFieldWidget($field)->showLabels ?? true);\n        }\n\n        return true;\n    }\n\n    /**\n     * getFieldTooltipValue looks up the field tooltip value\n     * @param \\Backend\\Classes\\FormField $field\n     * @return string\n     */\n    public function getFieldTooltipValue($field)\n    {\n        return Lang::get($field->tooltip['title'] ?? $field->tooltip);\n    }\n\n    /**\n     * getSaveData returns post data from a submitted form.\n     * @return array\n     */\n    public function getSaveData()\n    {\n        $this->defineFormFields();\n\n        $saveData = $this->getSaveDataInternal();\n\n        $this->applyFiltersFromModel($saveData);\n\n        return $this->cleanSaveDataInternal($saveData);\n    }\n\n    /**\n     * setSaveDataOverride will override the save data captured by the form\n     */\n    public function setSaveDataOverride($key, $value)\n    {\n        $this->saveDataOverride[$key] = $value;\n    }\n\n    /**\n     * getSaveDataInternal will return all possible data to save\n     */\n    protected function getSaveDataInternal(): array\n    {\n        $this->defineFormFields();\n\n        $result = [];\n        $data = $this->getSaveDataSourceInternal();\n\n        // Spin over each field and extract the postback value\n        foreach ($this->allFields as $name => $field) {\n            // Handle HTML array, eg: item[key][another]\n            $parts = HtmlHelper::nameToArray($name);\n            if (($value = $this->dataArrayGet($data, $parts)) !== null) {\n                // Convert number to float\n                if ($field->type === 'number') {\n                    $value = !strlen(trim($value)) ? null : (float) $value;\n                }\n\n                $this->dataArraySet($result, $parts, $value);\n            }\n        }\n\n        // Give widgets an opportunity to process the data.\n        foreach ($this->formWidgets as $field => $widget) {\n            // Handle HTML array, eg: item[key][another]\n            $parts = HtmlHelper::nameToArray($field);\n            if (($value = $this->dataArrayGet($data, $parts)) !== null) {\n                $widgetValue = $widget->getSaveValue($value);\n                $this->dataArraySet($result, $parts, $widgetValue);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * getSaveDataSourceInternal\n     */\n    protected function getSaveDataSourceInternal(): array\n    {\n        $data = $this->arrayName ? post($this->arrayName) : post();\n        if (!$data) {\n            $data = [];\n        }\n\n        if (is_array($this->saveDataOverride)) {\n            $data = array_merge($data, $this->saveDataOverride);\n        }\n\n        return $data;\n    }\n\n    /**\n     * cleanSaveDataInternal will purge disabled and hidden fields from the dataset\n     */\n    protected function cleanSaveDataInternal(array $data): array\n    {\n        foreach ($this->allFields as $name => $field) {\n            if ($field->disabled || $field->hidden) {\n                $parts = HtmlHelper::nameToArray($name);\n                $this->dataArrayForget($data, $parts);\n            }\n        }\n\n        return $data;\n    }\n\n    /**\n     * applyFiltersFromModel allows the model to filter fields\n     */\n    protected function applyFiltersFromModel($applyData = null)\n    {\n        $targetModel = clone $this->model;\n\n        // Apply specified data before filtering\n        if ($applyData) {\n            if (!$this->isNested) {\n                $this->prepareModelsToSave($targetModel, $applyData);\n            }\n\n            foreach ($this->allFields as $field) {\n                if ($this->hasFieldValue($field, $applyData)) {\n                    $field->value = $this->getFieldValue($field, $applyData);\n                }\n            }\n        }\n\n        // For passing to events\n        $holder = new ElementHolder($this->allFields);\n\n        // Standard usage\n        if (method_exists($targetModel, 'filterFields')) {\n            $targetModel->filterFields($holder, $this->getContext());\n        }\n\n        // Advanced usage\n        if (method_exists($targetModel, 'fireEvent')) {\n            /**\n             * @event model.form.filterFields\n             * Called after the form is initialized\n             *\n             * Example usage:\n             *\n             *     $model->bindEvent('model.form.filterFields', function ((\\Backend\\Widgets\\Form) $formWidget, (stdClass) $fields, (string) $context) use (\\October\\Rain\\Database\\Model $model) {\n             *         if ($model->source_type == 'http') {\n             *             $fields->source_url->hidden = false;\n             *             $fields->git_branch->hidden = true;\n             *         }\n             *         elseif ($model->source_type == 'git') {\n             *             $fields->source_url->hidden = false;\n             *             $fields->git_branch->hidden = false;\n             *         }\n             *         else {\n             *             $fields->source_url->hidden = true;\n             *             $fields->git_branch->hidden = true;\n             *         }\n             *     });\n             *\n             */\n            $targetModel->fireEvent('model.form.filterFields', [$this, $holder, $this->getContext()]);\n        }\n\n        // Reset widgets if they have been accessed\n        foreach ($holder->getTouchedElements() as $name => $field) {\n            if (isset($this->formWidgets[$name])) {\n                $this->formWidgets[$name]->resetFormValue();\n            }\n        }\n    }\n\n    /**\n     * getSessionKey returns the active session key.\n     * @return string\n     */\n    public function getSessionKey()\n    {\n        if ($this->sessionKey) {\n            return $this->sessionKey;\n        }\n\n        $sessionKey = post('_session_key');\n\n        if (!$sessionKey) {\n            $sessionKey = FormHelper::getSessionKey();\n        }\n\n        return $this->sessionKey = $sessionKey;\n    }\n\n    /**\n     * getSessionKeyWithSuffix\n     * @return string\n     */\n    public function getSessionKeyWithSuffix()\n    {\n        return $this->getSessionKey() . $this->sessionKeySuffix;\n    }\n\n    /**\n     * getModel returns the active model for this form.\n     * @return \\Model|null\n     */\n    public function getModel()\n    {\n        return $this->model;\n    }\n\n    /**\n     * getContext returns the active context for displaying the form.\n     * @return string\n     */\n    public function getContext()\n    {\n        return $this->context;\n    }\n\n    /**\n     * Variant to array_get() but preserves dots in key names.\n     *\n     * @param array $array\n     * @param array $parts\n     * @param null $default\n     * @return mixed\n     */\n    protected function dataArrayGet(array $array, array $parts, $default = null)\n    {\n        if (count($parts) === 1) {\n            $key = array_shift($parts);\n            if (isset($array[$key])) {\n                return $array[$key];\n            }\n\n            return $default;\n        }\n\n        foreach ($parts as $segment) {\n            if (!is_array($array) || !array_key_exists($segment, $array)) {\n                return $default;\n            }\n\n            $array = $array[$segment];\n        }\n\n        return $array;\n    }\n\n    /**\n     * Variant to array_set() but preserves dots in key names.\n     *\n     * @param array $array\n     * @param array $parts\n     * @param string $value\n     * @return array\n     */\n    protected function dataArraySet(array &$array, array $parts, $value)\n    {\n        while (count($parts) > 1) {\n            $key = array_shift($parts);\n\n            if (!isset($array[$key]) || !is_array($array[$key])) {\n                $array[$key] = [];\n            }\n\n            $array =& $array[$key];\n        }\n\n        $array[array_shift($parts)] = $value;\n\n        return $array;\n    }\n\n    /**\n     * Variant to array_forget() but preserves dots in key names.\n     *\n     * @param array $array\n     * @param array $parts\n     * @return void\n     */\n    protected function dataArrayForget(array &$array, array $parts)\n    {\n        while (count($parts) > 1) {\n            $part = array_shift($parts);\n\n            if (isset($array[$part]) && is_array($array[$part])) {\n                $array = &$array[$part];\n            }\n            else {\n                return;\n            }\n        }\n\n        unset($array[array_shift($parts)]);\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/ListStructure.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Site;\nuse Backend;\nuse BackendAuth;\nuse October\\Rain\\Database\\Model;\nuse ApplicationException;\nuse ForbiddenException;\n\n/**\n * ListStructure\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ListStructure extends Lists\n{\n    /**\n     * @var bool useStructure display parent/child relationships in the list.\n     */\n    public $useStructure = true;\n\n    /**\n     * @var bool showTree will display the tree structure\n     */\n    public $showTree = true;\n\n    /**\n     * @var bool treeExpanded will expand the tree nodes by default.\n     */\n    public $treeExpanded = true;\n\n    /**\n     * @var bool showReorder allows the user to reorder the records.\n     */\n    public $showReorder = true;\n\n    /**\n     * @var bool includeSortOrders specifies if \"sort_orders\" should be included in postback.\n     */\n    public $includeSortOrders = false;\n\n    /**\n     * @var bool includeReferencePool should be used when sorting within subset of records.\n     * For example, sorting with pagination.\n     */\n    public $includeReferencePool = false;\n\n    /**\n     * @var int|null maxDepth defines the maximum levels allowed for reordering.\n     */\n    public $maxDepth = null;\n\n    /**\n     * @var bool dragRow allows dragging the entire row in addition to the reorder handle.\n     */\n    public $dragRow = true;\n\n    /**\n     * @var array permissions needed to modify the structure.\n     */\n    protected $permissions;\n\n    /**\n     * __construct the widget\n     * @param \\Backend\\Classes\\Controller $controller\n     * @param array $configuration Proactive configuration definition.\n     */\n    public function __construct($controller, $configuration = [])\n    {\n        parent::__construct($controller, $configuration);\n\n        // Extend view to include parent\n        $parentViewPath = $this->guessViewPathFrom(Lists::class, '/partials');\n        $this->addViewPath($parentViewPath, true);\n    }\n\n    /**\n     * init the widget, called by the constructor and free from its parameters.\n     */\n    public function init()\n    {\n        // Defaults needed for reinit\n        $this->useStructure = true;\n        $this->showReorder = true;\n        $this->showPagination = false;\n        $this->showTree = true;\n\n        $this->fillFromConfig([\n            'maxDepth',\n            'dragRow',\n            'showTree',\n            'showReorder',\n            'treeExpanded',\n            'includeSortOrders',\n            'permissions'\n        ]);\n\n        parent::init();\n\n        // Hide tree when sorting\n        if ($this->isUserSorting()) {\n            $this->disableStructure();\n        }\n\n        if ($this->showTree) {\n            $this->validateTree();\n        }\n        else {\n            $this->maxDepth = 1;\n        }\n\n        // Hide reorder without permission\n        if (!$this->hasStructurePermission()) {\n            $this->showReorder = false;\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/october.liststructure.js');\n        $this->addJs('/modules/backend/widgets/lists/assets/js/october.list.js');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        parent::prepareVars();\n\n        // Alter tree status based on record content\n        $this->showTree = $this->getIndentTreeStatus($this->records);\n\n        $this->vars['useStructure'] = $this->useStructure;\n        $this->vars['maxDepth'] = $this->maxDepth;\n        $this->vars['dragRow'] = $this->dragRow;\n        $this->vars['showTree'] = $this->showTree;\n        $this->vars['showReorder'] = $this->showReorder;\n        $this->vars['includeSortOrders'] = $this->useSortOrdering();\n        $this->vars['treeLevel'] = 0;\n        $this->vars['indentSize'] = $this->getIndentSize();\n    }\n\n    /**\n     * disableStructure toggles the settings to completely disable the structure\n     */\n    protected function disableStructure()\n    {\n        $this->useStructure = false;\n        $this->showReorder = false;\n        $this->showPagination = true;\n        $this->showTree = false;\n    }\n\n    /**\n     * enableStructure reverts disableStructure\n     */\n    protected function enableStructure()\n    {\n        $this->sortColumn = null;\n        $this->putSession('sort', null);\n        $this->init();\n    }\n\n    /**\n     * onSort AJAX handler for sorting the list.\n     */\n    public function onSort()\n    {\n        $column = post('sortColumn');\n        if (!$column) {\n            return;\n        }\n\n        // Spool up cache\n        $this->getSortColumn();\n\n        // Detect third click\n        $isSameColumn = $column === $this->getSortColumn();\n        $isFinalStep = $this->getSortStep() >= 2;\n        $isSearchEmpty = empty($this->searchTerm);\n\n        // Reset the list state and cache\n        if ($isSameColumn && $isFinalStep && $isSearchEmpty) {\n            $this->enableStructure();\n            return $this->onRefresh();\n        }\n\n        // Disable structure when sorting\n        $this->disableStructure();\n\n        return parent::onSort();\n    }\n\n    /**\n     * onShowStructure\n     */\n    public function onShowStructure()\n    {\n        $this->enableStructure();\n        return $this->onRefresh();\n    }\n\n    /**\n     * useSorting\n     */\n    protected function useSorting(): bool\n    {\n        return !$this->useStructure;\n    }\n\n    /**\n     * setSearchTerm will disable the structure if a value is supplied.\n     */\n    public function setSearchTerm($term, $resetState = false)\n    {\n        if (!empty($term)) {\n            $this->disableStructure();\n        }\n        elseif ($resetState) {\n            $this->enableStructure();\n        }\n\n        parent::setSearchTerm($term, $resetState);\n    }\n\n    /**\n     * getRecords returns all the records from the supplied model, after filtering\n     * @return Collection\n     */\n    protected function getRecords()\n    {\n        if (!$this->useStructure || !$this->showTree) {\n            return parent::getRecords();\n        }\n\n        // Find records\n        $records = $this->prepareQuery()->getNested();\n\n        // Extensibility from parent\n        if ($event = $this->fireSystemEvent('backend.list.extendRecords', [&$records])) {\n            $records = $event;\n        }\n\n        return $this->records = $records;\n    }\n\n    /**\n     * getTotalColumns calculates the total columns used in the list, including checkboxes\n     * and other additions.\n     */\n    protected function getTotalColumns()\n    {\n        $total = parent::getTotalColumns();\n\n        if ($this->showReorder) {\n            $total++;\n        }\n\n        return $total;\n    }\n\n    /**\n     * getIndentSize returns the size increment of indentation\n     */\n    protected function getIndentSize(): int\n    {\n        return 18;\n    }\n\n    /**\n     * getIndentStartSize is used to pad each row based on its tree level\n     */\n    protected function getIndentStartSize(int $treeLevel): int\n    {\n        return ($treeLevel * $this->getIndentSize()) +\n            ($this->showTree ? 15 : 0) +\n            ($this->showReorder ? 0 : 15);\n    }\n\n    /**\n     * getIndentTreeStatus checks if the collapse UI should be shown\n     * based on if any records have children.\n     */\n    protected function getIndentTreeStatus($records): bool\n    {\n        if (!$this->showTree) {\n            return false;\n        }\n\n        foreach ($records as $record) {\n            if ($record->getChildCount()) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * validateTree validates the model and settings if useStructure is used\n     */\n    public function validateTree()\n    {\n        if (!$this->model->isClassInstanceOf(\\October\\Contracts\\Database\\TreeInterface::class)) {\n            $modelClass = get_class($this->model);\n            throw new ApplicationException(\n                \"To display list as a tree, the model {$modelClass} must implement methods found in October\\Contracts\\Database\\TreeInterface, or set showTree to false\"\n            );\n        }\n    }\n\n    /**\n     * useSortOrdering\n     */\n    public function useSortOrdering(): bool\n    {\n        return $this->includeSortOrders || $this->model->isClassInstanceOf(\\October\\Contracts\\Database\\SortableInterface::class);\n    }\n\n    /**\n     * onReorder\n     */\n    public function onReorder()\n    {\n        if (!$this->hasStructurePermission()) {\n            throw new ForbiddenException;\n        }\n\n        $itemId = post('record_id');\n        if (!$itemId) {\n            return;\n        }\n\n        $item = $this->model->newQueryWithoutScopes()->find($itemId);\n        if (!$item) {\n            return;\n        }\n\n        if ($this->fireSystemEvent('backend.list.beforeReorderStructure', [$item], true) === false) {\n            return $this->onRefresh();\n        }\n\n        if (\n            $item->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n            $item->isMultisiteSyncEnabled() &&\n            $item->getMultisiteConfig('structure', true)\n        ) {\n            $this->reorderForOtherSites($item);\n        }\n        else {\n            $this->reorderForItem($item);\n        }\n\n        $this->fireSystemEvent('backend.list.reorderStructure', [$item]);\n\n        return $this->onRefresh();\n    }\n\n    /**\n     * reorderForOtherSites\n     */\n    protected function reorderForOtherSites($item)\n    {\n        // This query will include the main item itself\n        $otherItems = $item->newOtherSiteQuery()->get();\n        if (!$otherItems || !$otherItems->count()) {\n            return;\n        }\n\n        foreach (Site::listEditEnabled() as $site) {\n            $otherItem = $otherItems->where('site_id', $site->id)->first();\n            if ($otherItem) {\n                Site::withContext($site->id, function() use ($otherItem) {\n                    $this->reorderForItem($otherItem, true);\n                });\n            }\n        }\n    }\n\n    /**\n     * reorderForItem applies generic reordering logic\n     */\n    protected function reorderForItem($item, $multisite = false)\n    {\n        // Nested Tree\n        if ($this->model->isClassInstanceOf(\\October\\Contracts\\Database\\NestedSetInterface::class)) {\n            if ($prevId = post($multisite ? 'previous_root_id' : 'previous_id')) {\n                $item->moveAfter($prevId);\n            }\n            elseif ($nextId = post($multisite ? 'next_root_id' : 'next_id')) {\n                $item->moveBefore($nextId);\n            }\n            elseif ($parentId = post($multisite ? 'parent_root_id' : 'parent_id')) {\n                $item->makeChildOf($parentId);\n            }\n        }\n        else {\n            // Simple Tree\n            if ($this->model->hasRelation('parent')) {\n                $item->parent = post($multisite ? 'parent_root_id' : 'parent_id');\n                $item->save(['force' => true]);\n            }\n\n            // Sortable\n            if ($this->model->isClassInstanceOf(\\October\\Contracts\\Database\\SortableInterface::class)) {\n                $item->setSortableOrder(\n                    post($multisite ? 'root_sort_orders' : 'sort_orders'),\n                    $this->includeReferencePool ? null : true\n                );\n            }\n        }\n    }\n\n    /**\n     * onToggleTreeNode sets a node (model) to an expanded or collapsed state, stored in the\n     * session, then renders the list again.\n     */\n    public function onToggleTreeNode()\n    {\n        $this->putSession('tree_node_status_' . post('node_id'), post('status') ? 0 : 1);\n\n        return $this->onRefresh();\n    }\n\n    /**\n     * isTreeNodeExpanded checks if a node (model) is expanded in the session.\n     * @param  Model $node\n     * @return bool\n     */\n    public function isTreeNodeExpanded($node)\n    {\n        return $this->getSession('tree_node_status_' . $node->getKey(), $this->treeExpanded);\n    }\n\n    /**\n     * hasStructurePermission checks if the user has permissions to modify the structure.\n     */\n    protected function hasStructurePermission(): bool\n    {\n        if (!$this->permissions) {\n            return true;\n        }\n\n        return BackendAuth::userHasAccess($this->permissions, false);\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/Lists.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Db;\nuse Str;\nuse Html;\nuse Lang;\nuse Backend;\nuse DbDongle;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse October\\Rain\\Router\\Helper as RouterHelper;\nuse Backend\\Classes\\ListColumn;\nuse Backend\\Classes\\WidgetBase;\nuse October\\Rain\\Database\\Model;\nuse October\\Contracts\\Element\\ListElement;\nuse Illuminate\\Database\\Query\\Builder as QueryBuilder;\nuse Illuminate\\Pagination\\UrlWindow;\nuse ApplicationException;\nuse Exception;\nuse BackedEnum;\nuse UnitEnum;\n\n/**\n * Lists Widget used for building back end lists, renders a list of model objects\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Lists extends WidgetBase implements ListElement\n{\n    use \\Backend\\Widgets\\Lists\\IsListElement;\n    use \\Backend\\Widgets\\Lists\\ColumnProcessor;\n    use \\Backend\\Widgets\\Lists\\HasListSetup;\n    use \\Backend\\Widgets\\Lists\\HasValueProcessor;\n    use \\Backend\\Widgets\\Lists\\HasSorting;\n    use \\Backend\\Widgets\\Lists\\HasSearch;\n    use \\Backend\\Traits\\PreferenceMaker;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var array columns configuration.\n     */\n    public $columns;\n\n    /**\n     * @var Model model object for the list.\n     */\n    public $model;\n\n    /**\n     * @var string recordUrl for each record row. Replace :id with the record id.\n     */\n    public $recordUrl;\n\n    /**\n     * @var string recordOnClick event for each record row. Replace :id with the record id.\n     */\n    public $recordOnClick;\n\n    /**\n     * @var string noRecordsMessage to display when there are no records in the list.\n     */\n    public $noRecordsMessage = 'backend::lang.list.no_records';\n\n    /**\n     * @var int recordsPerPage as maximum rows to display.\n     */\n    public $recordsPerPage;\n\n    /**\n     * @var array perPageOptions is the number of items per page.\n     */\n    public $perPageOptions;\n\n    /**\n     * @var bool showSorting options for each column.\n     */\n    public $showSorting = true;\n\n    /**\n     * @var mixed defaultSort column to look for.\n     */\n    public $defaultSort;\n\n    /**\n     * @var bool showCheckboxes next to each record row.\n     */\n    public $showCheckboxes = false;\n\n    /**\n     * @var bool showSetup displays the list set up used for column visibility and ordering.\n     */\n    public $showSetup = false;\n\n    /**\n     * @var bool expandLastCol will expand to squeeze extra room from the last column.\n     */\n    public $expandLastColumn = false;\n\n    /**\n     * @var bool|string showPagination when limiting records per page.\n     */\n    public $showPagination = 'auto';\n\n    /**\n     * @var bool showPageNumbers with pagination, disable to improve performance.\n     */\n    public $showPageNumbers = true;\n\n    /**\n     * @var string customViewPath specifies a custom view path to override partials used by the list.\n     */\n    public $customViewPath;\n\n    /**\n     * @var string customPageName specifies a name to use in the page URL for paginated records.\n     */\n    public $customPageName = 'page';\n\n    /**\n     * @var string pivotMode targets the pivot relationship on the model for identifiers and replacements.\n     */\n    public $pivotMode = false;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'list';\n\n    /**\n     * @var array allColumns collection of all list columns used in this list.\n     * @see Backend\\Classes\\ListColumn\n     */\n    protected $allColumns;\n\n    /**\n     * @var array columnOverride default columns with supplied key names.\n     */\n    protected $columnOverride;\n\n    /**\n     * @var array visibleColumns to display and their order.\n     */\n    protected $visibleColumns;\n\n    /**\n     * @var object records of models as a data collection.\n     */\n    protected $records;\n\n    /**\n     * @var int currentPageNumber\n     */\n    protected $currentPageNumber;\n\n    /**\n     * @var array Collection of functions to apply to each list query.\n     */\n    protected $filterCallbacks = [];\n\n    /**\n     * @var array cssClasses to apply to the list container element\n     */\n    public $cssClasses = [];\n\n    /**\n     * init the widget, called by the constructor and free from its parameters.\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'columns',\n            'model',\n            'recordUrl',\n            'recordOnClick',\n            'noRecordsMessage',\n            'showPageNumbers',\n            'recordsPerPage',\n            'showSorting',\n            'perPageOptions',\n            'defaultSort',\n            'showCheckboxes',\n            'showSetup',\n            'expandLastColumn',\n            'showPagination',\n            'customViewPath',\n            'customPageName',\n            'pivotMode',\n        ]);\n\n        // Configure the list widget\n        if ($this->showSetup) {\n            $this->recordsPerPage = $this->getUserPreference('per_page', $this->recordsPerPage);\n        }\n\n        if ($this->showPagination == 'auto') {\n            $this->showPagination = $this->recordsPerPage && $this->recordsPerPage > 0;\n        }\n\n        if ($this->customViewPath) {\n            $this->addViewPath($this->customViewPath);\n        }\n\n        if (!$this->customPageName) {\n            $this->customPageName = '_page';\n        }\n\n        $this->validateModel();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/october.list.js');\n    }\n\n    /**\n     * Renders the widget.\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('list-container');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['cssClasses'] = implode(' ', $this->cssClasses);\n        $this->vars['columns'] = $this->getVisibleColumns();\n        $this->vars['columnTotal'] = $this->getTotalColumns();\n        $this->vars['records'] = $this->getRecords();\n        $this->vars['noRecordsMessage'] = trans($this->noRecordsMessage);\n        $this->vars['showCheckboxes'] = $this->showCheckboxes;\n        $this->vars['showSetup'] = $this->showSetup;\n        $this->vars['showPagination'] = $this->showPagination;\n        $this->vars['showPageNumbers'] = $this->showPageNumbers;\n        $this->vars['expandLastColumn'] = $this->expandLastColumn;\n        $this->vars['showSorting'] = $this->showSorting;\n        $this->vars['sortColumn'] = $this->getSortColumn();\n        $this->vars['sortDirection'] = $this->sortDirection;\n        $this->vars['pageName'] = $this->customPageName;\n\n        if ($this->showPagination) {\n            $this->vars['pageCurrent'] = $this->records->currentPage();\n\n            if ($this->showPageNumbers) {\n                $this->vars['recordElements'] = $this->getPaginationElements($this->records);\n                $this->vars['recordTotal'] = $this->records->total();\n                $this->vars['pageLast'] = $this->records->lastPage();\n                $this->vars['pageFrom'] = $this->records->firstItem();\n                $this->vars['pageTo'] = $this->records->lastItem();\n            }\n            else {\n                $this->vars['hasMorePages'] = $this->records->hasMorePages();\n            }\n        }\n        else {\n            $this->vars['recordTotal'] = $this->records->count();\n            $this->vars['pageCurrent'] = 1;\n        }\n    }\n\n    /**\n     * getPaginationElements get the array of elements to pass to the view.\n     * @return array\n     */\n    protected function getPaginationElements($records)\n    {\n        $records->onEachSide(1);\n\n        $window = UrlWindow::make($records);\n\n        return array_filter([\n            $window['first'],\n            is_array($window['slider']) ? '...' : null,\n            $window['slider'],\n            is_array($window['last']) ? '...' : null,\n            $window['last'],\n        ]);\n    }\n\n    /**\n     * onRefresh event handler for refreshing the list.\n     */\n    public function onRefresh()\n    {\n        $this->prepareVars();\n\n        $result = ['#'.$this->getId() => $this->makePartial('list')];\n\n        /**\n         * @event backend.list.refresh\n         * Called after the list is refreshed, should return an array of additional result parameters.\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.list.refresh', function ((\\Backend\\Widgets\\List) $listWidget, (array) $result) {\n         *         $result['#my-partial-id' => $listWidget->makePartial('$/path/to/custom/backend/_partial.php')];\n         *         return $result;\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.refresh', function ((array) $result) use ((\\Backend\\Widgets\\List $listWidget)) {\n         *         $result['#my-partial-id' => $listWidget->makePartial('$/path/to/custom/backend/_partial.php')];\n         *         return $result;\n         *     });\n         *\n         */\n        $eventResults = $this->fireSystemEvent('backend.list.refresh', [$result], false);\n\n        foreach ($eventResults as $eventResult) {\n            if (!is_array($eventResult)) {\n                continue;\n            }\n\n            $result = $eventResult + $result;\n        }\n\n        return $result;\n    }\n\n    /**\n     * onPaginate event handler for switching the page number.\n     */\n    public function onPaginate()\n    {\n        $this->currentPageNumber = input($this->customPageName);\n\n        return $this->onRefresh();\n    }\n\n    /**\n     * onFilter event handler for changing the filter\n     */\n    public function onFilter()\n    {\n        $this->currentPageNumber = 1;\n\n        return $this->onRefresh();\n    }\n\n    /**\n     * validateModel is present and right class type\n     */\n    protected function validateModel()\n    {\n        if (!$this->model) {\n            throw new ApplicationException(Lang::get(\n                'backend::lang.list.missing_model',\n                ['class'=>get_class($this->controller)]\n            ));\n        }\n\n        if (!$this->model instanceof Model) {\n            throw new ApplicationException(Lang::get(\n                'backend::lang.model.invalid_class',\n                ['model'=>get_class($this->model), 'class'=>get_class($this->controller)]\n            ));\n        }\n\n        return $this->model;\n    }\n\n    /**\n     * parseTableName replaces the @ symbol with a table name in a model\n     * @param  string $sql\n     * @param  string $table\n     * @return string\n     */\n    protected function parseTableName($sql, $table)\n    {\n        return str_replace('@', $table.'.', $sql);\n    }\n\n    /**\n     * prepareQuery applies any filters to the model\n     */\n    public function prepareQuery()\n    {\n        $query = $this->model->newQuery();\n        $primaryTable = $this->model->getTable();\n        $selects = [$primaryTable.'.*'];\n        $joins = [];\n        $withs = [];\n        $bindings = [];\n\n        /**\n         * @event backend.list.extendQueryBefore\n         * Provides an opportunity to modify the `$query` object before the List widget applies its scopes to it.\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.list.extendQueryBefore', function ($listWidget, $query) {\n         *         $query->whereNull('deleted_at');\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.extendQueryBefore', function ($query) {\n         *         $query->whereNull('deleted_at');\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.list.extendQueryBefore', [$query]);\n\n        // Prepare searchable column names\n        $primarySearchable = [];\n        $relationSearchable = [];\n\n        if (!empty($this->searchTerm) && ($searchableColumns = $this->getSearchableColumns())) {\n            foreach ($searchableColumns as $column) {\n                // Related\n                if ($this->isColumnRelated($column)) {\n                    $table = $this->model->makeRelation($column->relation)->getTable();\n                    $columnName = $column->sqlSelect\n                        ? DbDongle::raw($this->parseTableName($column->sqlSelect, $table))\n                        : $table . '.' . $column->valueFrom;\n\n                    $relationSearchable[$column->relation][] = $columnName;\n                }\n                // Primary\n                else {\n                    $columnName = $column->sqlSelect\n                        ? DbDongle::raw($this->parseTableName($column->sqlSelect, $primaryTable))\n                        : $primaryTable . '.' . $column->columnName;\n\n                    $primarySearchable[] = $columnName;\n                }\n            }\n        }\n\n        // Prepare related eager loads (withs) and custom selects (joins)\n        foreach ($this->getVisibleColumns() as $column) {\n            // Column wants to count the value\n            if ($column->useRelationCount()) {\n                $query->withCount($column->relation);\n            }\n\n            // Column wants to eager load something\n            if ($column->relationWith) {\n                if (is_array($column->relationWith)) {\n                    $withs = array_merge($withs, $column->relationWith);\n                } else {\n                    $withs[] = $column->relationWith;\n                }\n            }\n\n            // Column is not a related column selection (relation + select)\n            if (!$this->isColumnRelated($column) || (!$column->sqlSelect && !$column->valueFrom)) {\n                continue;\n            }\n\n            if ($column->valueFrom) {\n                $withs[] = $column->relation;\n            }\n\n            $joins[] = $column->relation;\n        }\n\n        // Add eager loads to the query\n        if ($withs) {\n            $query->with(array_unique($withs));\n        }\n\n        // Apply search term\n        $query->where(function($innerQuery) use ($primarySearchable, $relationSearchable, $joins) {\n\n            // Search primary columns\n            if (count($primarySearchable) > 0) {\n                $this->applySearchToQuery($innerQuery, $primarySearchable, 'or');\n            }\n\n            // Search relation columns\n            if ($joins) {\n                foreach (array_unique($joins) as $join) {\n                    // Apply a supplied search term for relation columns and constrain\n                    // the query only if there is something to search for\n                    $columnsToSearch = array_get($relationSearchable, $join, []);\n\n                    if (count($columnsToSearch) > 0) {\n                        $innerQuery->orWhereHas($join, function ($_query) use ($columnsToSearch) {\n                            $this->applySearchToQuery($_query, $columnsToSearch);\n                        });\n                    }\n                }\n            }\n        });\n\n        // Custom select queries\n        foreach ($this->getVisibleColumns() as $column) {\n            if (!$column->sqlSelect) {\n                continue;\n            }\n\n            $alias = $query->getQuery()->getGrammar()->wrap($column->columnName);\n\n            // Relation column\n            if ($column->relation) {\n                $relationType = $this->model->getRelationType($column->relation);\n                if ($relationType === 'morphTo') {\n                    throw new ApplicationException('The relationship morphTo is not supported for list columns.');\n                }\n\n                $table = $this->model->makeRelation($column->relation)->getTable();\n                $sqlSelect = $this->parseTableName($column->sqlSelect, $table);\n\n                // Manipulate a count query for the sub query\n                $relationObj = $this->model->{$column->relation}();\n                $relationQuery = $relationObj->getRelated()->newQuery();\n\n                // Apply related constraints to the sub query\n                // Possibility: the column could contribute to this via conditions or scope\n                $relationObj->addDefinedConstraintsToQuery($relationQuery);\n\n                $countQuery = $relationObj->getRelationExistenceQuery($relationQuery, $query);\n\n                $isMultiRelation = $this->isColumnRelated($column, true);\n\n                $joinSql = $isMultiRelation\n                    ? DbDongle::raw(\"group_concat(\" . $sqlSelect . \" separator ', ')\")\n                    : DbDongle::raw($sqlSelect);\n\n                $countQuery->select($joinSql);\n\n                // Only strip ordering for multi-relations (group_concat),\n                // singular relations with LIMIT 1 need ordering for deterministic results\n                if ($isMultiRelation) {\n                    $countQuery->reorder();\n                }\n                // Singular relations need a limit to prevent subquery errors\n                else {\n                    $countQuery->limit(1);\n                }\n\n                $joinSql = $countQuery->toSql();\n\n                $selects[] = Db::raw(\"({$joinSql}) as {$alias}\");\n\n                // If a polymorphic relation, bindings need to be added to the query\n                $bindings = array_merge($bindings, $countQuery->getBindings());\n            }\n            // Primary column\n            else {\n                $sqlSelect = $this->parseTableName($column->sqlSelect, $primaryTable);\n                $selects[] = DbDongle::raw($sqlSelect . ' as '. $alias);\n            }\n        }\n\n        // Apply sorting\n        if (\n            $this->useSorting() &&\n            ($sortColumn = $this->getSortColumn()) &&\n            $this->isColumnSortable($sortColumn) &&\n            ($column = $this->allColumns[$sortColumn] ?? null)\n        ) {\n            if ($column->useRelationCount()) {\n                $sortColumn = $column->relation . '_count';\n            }\n            elseif ($column->valueFrom) {\n                $sortColumn = $this->isColumnPivot($column)\n                    ? 'pivot_' . $column->valueFrom\n                    : $column->valueFrom;\n            }\n\n            $sortDirection = $this->getSortDirection();\n            $query->reorder($sortColumn, $sortDirection);\n\n            /**\n             * @event backend.list.extendSortColumn\n             * Provides an opportunity to customize the sort column and direction\n             *\n             * Example usage:\n             *\n             *     Event::listen('backend.list.extendSortColumn', function ($listWidget, $query, $sortColumn, $sortDirection) {\n             *         $query->reorder('secondary_order', 'asc);\n             *         $query->orderBy($sortColumn, $sortDirection);\n             *     });\n             *\n             * Or\n             *\n             *     $listWidget->bindEvent('list.extendSortColumn', function ($query, $sortColumn, $sortDirection) {\n             *         $query->orderBy('secondary_order');\n             *     });\n             *\n             */\n            $this->fireSystemEvent('backend.list.extendSortColumn', [$query, $sortColumn, $sortDirection]);\n        }\n\n        // Apply filters\n        foreach ($this->filterCallbacks as $callback) {\n            $callback($query);\n        }\n\n        // Add custom selects\n        $query->addSelect($selects);\n\n        // Add bindings for polymorphic relations\n        $query->addBinding($bindings, 'select');\n\n        /**\n         * @event backend.list.extendQuery\n         * Provides an opportunity to modify and / or return the `$query` object after the List widget has applied its scopes to it and before it's used to get the records.\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.list.extendQuery', function ($listWidget, $query) {\n         *         $newQuery = MyModel::newQuery();\n         *         return $newQuery;\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.extendQuery', function ($query) {\n         *         $query->whereNull('deleted_at');\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('backend.list.extendQuery', [&$query])) {\n            return $event;\n        }\n\n        return $query;\n    }\n\n    /**\n     * getRecords returns all the records from the supplied model, after filtering.\n     * @return Collection\n     */\n    protected function getRecords()\n    {\n        $query = $this->prepareQuery();\n\n        if ($this->showPagination) {\n            $method = $this->showPageNumbers ? 'paginateAtPage' : 'simplePaginateAtPage';\n            $currentPageNumber = $this->getCurrentPageNumber($query);\n            $records = $query->{$method}($this->recordsPerPage, $currentPageNumber);\n        }\n        else {\n            $records = $query->get();\n        }\n\n        /**\n         * @event backend.list.extendRecords\n         * Provides an opportunity to modify and / or return the `$records` Collection object before the widget uses it.\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.list.extendRecords', function ($listWidget, $records) {\n         *         $model = MyModel::where('always_include', true)->first();\n         *         $records->prepend($model);\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.extendRecords', function ($records) {\n         *         $model = MyModel::where('always_include', true)->first();\n         *         $records->prepend($model);\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('backend.list.extendRecords', [&$records])) {\n            $records = $event;\n        }\n\n        return $this->records = $records;\n    }\n\n    /**\n     * getCurrentPageNumber returns the current page number for the list. This will override\n     * the current page number provided by the user if it is past the last page of available\n     * records.\n     * @param object $query\n     * @return int\n     */\n    protected function getCurrentPageNumber($query)\n    {\n        $currentPageNumber = $this->currentPageNumber;\n        if (empty($currentPageNumber)) {\n            $currentPageNumber = input($this->customPageName);\n        }\n\n        // Convert empty page number to page 1\n        $currentPageNumber = $currentPageNumber ? intval($currentPageNumber) : 1;\n\n        // Validate the page number\n        if ($currentPageNumber > 1) {\n            $baseQuery = $query instanceof QueryBuilder ? $query : $query->toBase();\n            $count = $baseQuery->getCountForPagination();\n\n            // If the current page number is higher than the amount of\n            // available pages, go to the last available page\n            if ($count <= (($currentPageNumber - 1) * $this->recordsPerPage)) {\n                $currentPageNumber = ceil($count / $this->recordsPerPage);\n            }\n        }\n\n        return $currentPageNumber;\n    }\n\n    /**\n     * hasRecordAction will specify is anything is clickable\n     */\n    public function hasRecordAction(): bool\n    {\n        return isset($this->recordOnClick) || isset($this->recordUrl);\n    }\n\n    /**\n     * getRecordAction\n     */\n    public function getRecordAction($record): ?array\n    {\n        if (!$this->hasRecordAction()) {\n            return null;\n        }\n\n        $url = $this->getRecordUrl($record);\n        $onClick = $this->getRecordOnClick($record, true);\n\n        /**\n         * @event backend.list.overrideRecordAction\n         * Overrides the record url or onclick event in a list widget.\n         *\n         * If a value is returned from this event, it will be used as the url for the provided record.\n         * $url contains the default url and $record is a reference to the model instance.\n         * Example usage:\n         *\n         *     Event::listen('backend.list.overrideRecordAction', function ($listWidget, $record, $url, $onClick) {\n         *         if ($record->user_id !== BackendAuth::getUser()->id) {\n         *             return 'acme/blog/posts/preview/' . $record->id;\n         *         }\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.overrideRecordAction', function ($record, $url, $onClick) {\n         *         if ($record->user_id !== BackendAuth::getUser()->id) {\n         *             return 'acme/blog/posts/preview/' . $record->id;\n         *         }\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('backend.list.overrideRecordAction', [$record, $url, $onClick])) {\n            if (is_array($event)) {\n                // Override onclick event\n                if (array_key_exists('onclick', $event)) {\n                    if ($event['onclick'] === null) {\n                        $onClick = null;\n                    }\n                    else {\n                        $onClick = $event['onclick'];\n                    }\n                }\n\n                // Override URL\n                if (array_key_exists('url', $event)) {\n                    if ($event['url'] === null) {\n                        $url = 'javascript:;';\n                    }\n                    else {\n                        $url = Backend::url($event['url']);\n                    }\n                }\n\n                // Override clickable entirely\n                if (array_key_exists('clickable', $event) && $event['clickable'] === false) {\n                    return null;\n                }\n            }\n            elseif (is_string($event)) {\n                $url = Backend::url($event);\n            }\n        }\n\n        return [\n            $url,\n            $onClick ? Html::attributes(['onclick' => $onClick]) : null\n        ];\n    }\n\n    /**\n     * getRecordUrl returns the record URL address for a list row.\n     * @param  Model $record\n     * @return string\n     */\n    public function getRecordUrl($record)\n    {\n        if (isset($this->recordOnClick)) {\n            return 'javascript:;';\n        }\n\n        if (!isset($this->recordUrl)) {\n            return null;\n        }\n\n        if ($this->pivotMode) {\n            $url = RouterHelper::replaceParameters($record->pivot, $this->recordUrl);\n        }\n\n        $url = RouterHelper::replaceParameters($record, $this->recordUrl);\n\n        return Backend::url($url);\n    }\n\n    /**\n     * getRecordOnClick returns the onclick event for a list row.\n     * @param  Model $record\n     * @return string\n     */\n    public function getRecordOnClick($record, $isRaw = false)\n    {\n        if (!isset($this->recordOnClick)) {\n            return null;\n        }\n\n        $recordOnClick = $this->recordOnClick;\n\n        // FormController popup design integration\n        if (str_starts_with($recordOnClick, 'popup') && $this->controller->isClassExtendedWith(\\Backend\\Behaviors\\FormController::class)) {\n            if (str_contains($recordOnClick, '@')) {\n                $recordOnClickContext = explode('@', $recordOnClick)[1];\n                $recordOnClick = \"oc.listOnLoadForm(':id', '{$recordOnClickContext}')\";\n            }\n            else {\n                $recordOnClick = \"oc.listOnLoadForm(':id')\";\n            }\n        }\n\n        if ($this->pivotMode) {\n            $recordOnClick = RouterHelper::replaceParameters($record->pivot, $recordOnClick);\n        }\n\n        $recordOnClick = RouterHelper::replaceParameters($record, $recordOnClick);\n\n        // @deprecated this method will always return isRaw = true\n        return $isRaw ? $recordOnClick : Html::attributes(['onclick' => $recordOnClick]);\n    }\n\n    /**\n     * getColumns gets all the registered columns for the instance.\n     * @return array\n     */\n    public function getColumns()\n    {\n        return $this->allColumns ?: $this->defineListColumns();\n    }\n\n    /**\n     * getColumn gets a specified column object\n     * @param  string $column\n     * @return mixed\n     */\n    public function getColumn($column)\n    {\n        if (!isset($this->allColumns[$column])) {\n            throw new ApplicationException('No definition for column ' . $column);\n        }\n\n        return $this->allColumns[$column];\n    }\n\n    /**\n     * isColumnSortable checks if column can be sorted, excluding calculated non visible columns\n     */\n    protected function isColumnSortable(string $columnName): bool\n    {\n        if ($this->isColumnVisible($columnName)) {\n            return true;\n        }\n\n        $column = array_get($this->allColumns, $columnName);\n        if (!$column) {\n            return false;\n        }\n\n        if ($column->sqlSelect || $column->relation) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * isColumnVisible checks if a column is visible to the list\n     */\n    public function isColumnVisible(string $columnName): bool\n    {\n        $columns = $this->visibleColumns ?: $this->getVisibleColumns();\n\n        return isset($columns[$columnName]);\n    }\n\n    /**\n     * getVisibleColumns returns the list columns that are visible by list settings or default\n     */\n    public function getVisibleColumns()\n    {\n        $definitions = $this->defineListColumns();\n        $columns = [];\n\n        // Supplied column list\n        if ($this->showSetup && $this->columnOverride === null) {\n            $this->columnOverride = $this->getUserPreference('visible', null);\n        }\n\n        if ($this->columnOverride && is_array($this->columnOverride)) {\n            $invalidColumns = array_diff($this->columnOverride, array_keys($definitions));\n            if (!count($definitions)) {\n                throw new ApplicationException(Lang::get(\n                    'backend::lang.list.missing_column',\n                    ['columns'=>implode(',', $invalidColumns)]\n                ));\n            }\n\n            $availableColumns = array_intersect($this->columnOverride, array_keys($definitions));\n            foreach ($availableColumns as $columnName) {\n                $definitions[$columnName]->invisible = false;\n                $columns[$columnName] = $definitions[$columnName];\n            }\n        }\n        // Use default column list\n        else {\n            foreach ($definitions as $columnName => $column) {\n                if ($column->invisible) {\n                    continue;\n                }\n\n                $columns[$columnName] = $definitions[$columnName];\n            }\n        }\n\n        return $this->visibleColumns = $columns;\n    }\n\n    /**\n     * defineListColumns builds an array of list columns with keys as the column name\n     * and values as a ListColumn object\n     */\n    protected function defineListColumns(): array\n    {\n        if (!isset($this->columns) || !is_array($this->columns)) {\n            $this->columns = [];\n        }\n\n        if ($this->columns) {\n            $this->addColumns($this->columns);\n        }\n        else {\n            $this->addColumnsFromModel();\n        }\n\n        if (!$this->allColumns) {\n            $class = get_class($this->model instanceof Model ? $this->model : $this->controller);\n            throw new ApplicationException(Lang::get('backend::lang.list.missing_columns', compact('class')));\n        }\n\n        /**\n         * @event backend.list.extendColumns\n         * Provides an opportunity to modify the columns of a List widget\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.list.extendColumns', function ($listWidget) {\n         *         // Only for the User controller\n         *         if (!$listWidget->getController() instanceof \\Backend\\Controllers\\Users) {\n         *             return;\n         *         }\n         *\n         *         // Only for the User model\n         *         if (!$listWidget->model instanceof \\Backend\\Models\\User) {\n         *             return;\n         *         }\n         *\n         *         // Add an extra birthday column\n         *         $listWidget->addColumns([\n         *             'birthday' => [\n         *                 'label' => 'Birthday'\n         *             ]\n         *         ]);\n         *\n         *         // Remove a Surname column\n         *         $listWidget->removeColumn('surname');\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.extendColumns', function () use ($listWidget) {\n         *         // Only for the User controller\n         *         if (!$listWidget->getController() instanceof \\Backend\\Controllers\\Users) {\n         *             return;\n         *         }\n         *\n         *         // Only for the User model\n         *         if (!$listWidget->model instanceof \\Backend\\Models\\User) {\n         *             return;\n         *         }\n         *\n         *         // Add an extra birthday column\n         *         $listWidget->addColumns([\n         *             'birthday' => [\n         *                 'label' => 'Birthday'\n         *             ]\n         *         ]);\n         *\n         *         // Remove a Surname column\n         *         $listWidget->removeColumn('surname');\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.list.extendColumns');\n\n        $this->processPermissionCheck($this->allColumns);\n        $this->processAutoOrder($this->allColumns);\n        $this->processHiddenColumns($this->allColumns);\n        $this->processUserColumnOrders($this->allColumns, $this->getUserPreference('order'));\n        $this->processColumnTypeModifiers($this->allColumns);\n\n        return $this->allColumns;\n    }\n\n    /**\n     * addColumns programmatically add columns, used internally and for extensibility.\n     * @param array $columns Column definitions\n     */\n    public function addColumns(array $columns)\n    {\n        foreach ($columns as $columnName => $config) {\n            $this->allColumns[$columnName] = $this->makeListColumn($columnName, $config);\n        }\n    }\n\n    /**\n     * removeColumn programmatically removes a column, used for extensibility.\n     * @param string $column Column name\n     */\n    public function removeColumn($columnName)\n    {\n        if (isset($this->allColumns[$columnName])) {\n            unset($this->allColumns[$columnName]);\n        }\n    }\n\n    /**\n     * getModel returns the active model for this list.\n     * @return \\Model|null\n     */\n    public function getModel()\n    {\n        return $this->model;\n    }\n\n    /**\n     * makeListColumn creates a list column object from it's name and configuration.\n     */\n    protected function makeListColumn($name, $config)\n    {\n        if (is_string($config)) {\n            $label = $config;\n            $config = [];\n        }\n        elseif (isset($config['label'])) {\n            $label = $config['label'];\n        }\n        else {\n            $label = studly_case($name);\n        }\n\n        // Auto configure pivot relation\n        if (str_starts_with($name, 'pivot[') && str_contains($name, ']')) {\n            $_name = HtmlHelper::nameToArray($name);\n            $relationName = array_shift($_name);\n            $valueFrom = array_shift($_name);\n\n            if (count($_name) > 0) {\n                $valueFrom  .= '['.implode('][', $_name).']';\n            }\n\n            $config['relation'] = $relationName;\n            $config['valueFrom'] = $valueFrom;\n            $config['searchable'] = false;\n        }\n        // Auto configure standard relation\n        elseif (str_contains($name, '[') && str_contains($name, ']')) {\n            $config['valueFrom'] = $name;\n            $config['sortable'] = false;\n            $config['searchable'] = false;\n        }\n\n        $columnType = $config['type'] ?? null;\n\n        $column = new ListColumn([\n            'columnName' => $name,\n            'label' => $label\n        ]);\n\n        if ($config) {\n            $column->useConfig($config);\n        }\n\n        if ($columnType) {\n            $column->displayAs($columnType);\n        }\n\n        return $column;\n    }\n\n    /**\n     * getTotalColumns calculates the total columns used in the list, including\n     * checkboxes and other additions.\n     */\n    protected function getTotalColumns()\n    {\n        $columns = $this->visibleColumns ?: $this->getVisibleColumns();\n        $total = count($columns);\n\n        if ($this->showCheckboxes) {\n            $total++;\n        }\n\n        return $total;\n    }\n\n    /**\n     * getHeaderValue looks up the column header\n     */\n    public function getHeaderValue($column)\n    {\n        if ($column->shortLabel !== null) {\n            $value = Lang::get($column->shortLabel);\n        }\n        else {\n            $value = Lang::get($column->label);\n        }\n\n        /**\n         * @event backend.list.overrideHeaderValue\n         * Overrides the column header value in a list widget.\n         *\n         * If a value is returned from this event, it will be used as the value for the provided column.\n         * `$value` is passed by reference so modifying the variable in place is also supported. Example usage:\n         *\n         *     Event::listen('backend.list.overrideHeaderValue', function ($listWidget, $column, &$value) {\n         *         $value .= '-modified';\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.overrideHeaderValue', function ($column, $value) {\n         *         return 'Custom header value';\n         *     });\n         *\n         */\n        if ($response = $this->fireSystemEvent('backend.list.overrideHeaderValue', [$column, &$value])) {\n            $value = $response;\n        }\n\n        return $value;\n    }\n\n    /**\n     * getHeaderTooltipValue looks up the column header\n     * @return string\n     */\n    public function getHeaderTooltipValue($column)\n    {\n        return Lang::get($column->tooltip['title'] ?? $column->tooltip);\n    }\n\n    /**\n     * getColumnValueRaw returns a raw column value\n     * @return string\n     */\n    public function getColumnValueRaw($record, $column)\n    {\n        $columnName = $column->columnName;\n\n        // Handle taking value from model relation.\n        if ($column->valueFrom && $column->relation) {\n            $columnName = $column->relation;\n\n            if (!array_key_exists($columnName, $record->getRelations())) {\n                $value = null;\n            }\n            elseif ($this->isColumnRelated($column, true)) {\n                $value = $record->{$columnName}->pluck($column->valueFrom)->all();\n            }\n            elseif ($this->isColumnRelated($column) || $this->isColumnPivot($column)) {\n                $value = $record->{$columnName}\n                    ? $column->getValueFromData($record->{$columnName})\n                    : null;\n            }\n            else {\n                $value = null;\n            }\n        }\n        // Handle taking value from model attribute.\n        elseif ($column->valueFrom) {\n            $value = $column->getValueFromData($record);\n        }\n        // Otherwise, if the column is a relation, it will be a custom select,\n        // so prevent the Model from attempting to load the relation\n        // if the value is NULL.\n        else {\n            if (\n                $record->hasRelation($columnName) &&\n                array_key_exists($columnName, $record->attributes)\n            ) {\n                $value = $record->attributes[$columnName];\n            }\n            elseif ($column->useRelationCount()) {\n                $countColumnName = Str::snake($column->relation) . '_count';\n                $value = $record->{$countColumnName};\n            }\n            else {\n                $value = $record->getAttribute($columnName);\n            }\n        }\n\n        /**\n         * @event backend.list.overrideColumnValueRaw\n         * Overrides the raw column value in a list widget.\n         *\n         * If a value is returned from this event, it will be used as the raw value for the provided column.\n         * `$value` is passed by reference so modifying the variable in place is also supported. Example usage:\n         *\n         *     Event::listen('backend.list.overrideColumnValueRaw', function ($listWidget, $record, $column, &$value) {\n         *         $value .= '-modified';\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.overrideColumnValueRaw', function ($record, $column, $value) {\n         *         return 'No values for you!';\n         *     });\n         *\n         */\n        if ($response = $this->fireSystemEvent('backend.list.overrideColumnValueRaw', [$record, $column, &$value])) {\n            $value = $response;\n        }\n\n        return $value;\n    }\n\n    /**\n     * getColumnKey returns a column key/identifier\n     */\n    public function getColumnKey($record)\n    {\n        if ($this->pivotMode) {\n            return $record->pivot->getKey();\n        }\n\n        return $record->getKey();\n    }\n\n    /**\n     * getColumnValue returns a column value, with filters applied\n     */\n    public function getColumnValue($record, $column)\n    {\n        // Custom display attribute that pulls directly from the model\n        if ($column->displayFrom) {\n            $columnName = $column->displayFrom;\n            $value = $record->{$columnName};\n        }\n        // Standard value\n        else {\n            $value = $this->getColumnValueRaw($record, $column);\n        }\n\n        // Cast enums to scalar\n        if ($value instanceof BackedEnum) {\n            $value = $value->value;\n        }\n        elseif ($value instanceof UnitEnum) {\n            $value = $value->name;\n        }\n\n        // Apply filters\n        if (method_exists($this, 'eval'. studly_case($column->type) .'TypeValue')) {\n            $value = $this->{'eval'. studly_case($column->type) .'TypeValue'}($record, $column, $value);\n        }\n        else {\n            $value = $this->evalCustomListType($column->type, $record, $column, $value);\n        }\n\n        // Apply default value.\n        if ($value === '' || $value === null) {\n            $value = $column->defaults;\n        }\n\n        /**\n         * @event backend.list.overrideColumnValue\n         * Overrides the column value in a list widget.\n         *\n         * If a value is returned from this event, it will be used as the value for the provided column.\n         * `$value` is passed by reference so modifying the variable in place is also supported. Example usage:\n         *\n         *     Event::listen('backend.list.overrideColumnValue', function ($listWidget, $record, $column, &$value) {\n         *         $value .= '-modified';\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.overrideColumnValue', function ($record, $column, $value) {\n         *         return 'No values for you!';\n         *     });\n         *\n         */\n        if ($response = $this->fireSystemEvent('backend.list.overrideColumnValue', [$record, $column, &$value])) {\n            $value = $response;\n        }\n\n        return $value;\n    }\n\n    /**\n     * getCheckedRows\n     */\n    protected function getCheckedRows(): array\n    {\n        return array_unique((array) post('allChecked'));\n    }\n\n    /**\n     * getCheckedRowsEncoded\n     */\n    protected function getCheckedRowsEncoded(): string\n    {\n        try {\n            return json_encode(array_values($this->getCheckedRows()));\n        }\n        catch (Exception $ex) {\n            return '';\n        }\n    }\n\n    /**\n     * isRowChecked\n     */\n    protected function isRowChecked($record): bool\n    {\n        return in_array($record->getKey(), $this->getCheckedRows());\n    }\n\n    /**\n     * getAllCheckedIds returns all checked IDs, including those not visible on the page,\n     * stored in the list data locker from switching pagination.\n     */\n    public function getAllCheckedIds(): array\n    {\n        $checkedIds = (array) post('checked');\n\n        if ($allChecked = post('checked-all')) {\n            $checkedIds = array_merge((array) json_decode($allChecked, true), $checkedIds);\n        }\n\n        return array_filter($checkedIds, 'is_scalar');\n    }\n\n    /**\n     * getRowClass adds a custom CSS class string to a record row\n     * @param  Model $record Populated model\n     * @return string\n     */\n    public function getRowClass($record)\n    {\n        $value = '';\n\n        /**\n         * @event backend.list.injectRowClass\n         * Provides opportunity to inject a custom CSS row class\n         *\n         * If a value is returned from this event, it will be used as the value for the row class.\n         * `$value` is passed by reference so modifying the variable in place is also supported. Example usage:\n         *\n         *     Event::listen('backend.list.injectRowClass', function ($listWidget, $record, &$value) {\n         *         $value .= '-modified';\n         *     });\n         *\n         * Or\n         *\n         *     $listWidget->bindEvent('list.injectRowClass', function ($record, $value) {\n         *         return 'strike';\n         *     });\n         *\n         */\n        if ($response = $this->fireSystemEvent('backend.list.injectRowClass', [$record, &$value])) {\n            $value = $response;\n        }\n\n        return $value;\n    }\n\n    /**\n     * getColumnTimezonePreference for date specific columns\n     */\n    protected function getColumnTimezonePreference($column, $default = true): bool\n    {\n        // @deprecated API\n        if (!empty($column->config['ignoreTimezone'])) {\n            return false;\n        }\n\n        return (bool) $column->getConfig('useTimezone', $default);\n    }\n\n    //\n    // Filtering\n    //\n\n    /**\n     * addFilter query to the stack.\n     */\n    public function addFilter(callable $filter)\n    {\n        $this->filterCallbacks[] = $filter;\n    }\n\n    //\n    // Helpers\n    //\n\n    /**\n     * isColumnRelated checks if column refers to a relation of the model, with a toggle\n     * switch for checking only relationships with multiple records.\n     */\n    protected function isColumnRelated(ListColumn $column, bool $isMulti = false): bool\n    {\n        if (!$column->relation || $this->isColumnPivot($column)) {\n            return false;\n        }\n\n        if (!$this->model->hasRelation($column->relation)) {\n            throw new ApplicationException(Lang::get(\n                'backend::lang.model.missing_relation',\n                ['class'=>get_class($this->model), 'relation'=>$column->relation]\n            ));\n        }\n\n        if ($isMulti) {\n            return !$this->model->isRelationTypeSingular($column->relation);\n        }\n\n        return true;\n    }\n\n    /**\n     * isColumnPivot checks if a column refers to a pivot model specifically.\n     */\n    protected function isColumnPivot(ListColumn $column): bool\n    {\n        if (!$column->relation || $column->relation !== 'pivot') {\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/ReportContainer.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Lang;\nuse Flash;\nuse Request;\nuse Backend\\Classes\\WidgetBase;\nuse Backend\\Classes\\DashManager;\nuse Backend\\Models\\UserPreference;\nuse System\\Models\\Parameter as SystemParameters;\nuse ApplicationException;\nuse ForbiddenException;\n\n/**\n * ReportContainer has been deprecated\n * @deprecated this has been replaced by the `Backend\\Widgets\\Dash` widget\n */\nclass ReportContainer extends WidgetBase\n{\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string context is a unique name that defines the context where the container is used.\n     * Widget settings are saved in a specific context. This allows to\n     * have multiple report containers on different pages that have\n     * different widgets and widget settings. Context names can contain\n     * only Latin letters.\n     */\n    public $context = 'dashboard';\n\n    /**\n     * @var bool showReorder allows the user to reorder the widgets.\n     */\n    public $showReorder = true;\n\n    /**\n     * @var bool showConfigure allows the user to configure the widgets.\n     */\n    public $showConfigure = true;\n\n    /**\n     * @var bool showAddRemove determines whether widgets could be added and deleted.\n     */\n    public $showAddRemove = true;\n\n    /**\n     * @var bool showMakeDefault displays the \"Make Default\" button.\n     */\n    public $showMakeDefault = true;\n\n    /**\n     * @var array defaultWidgets to load.\n     * This structure could be defined in the widget configuration file,\n     * (for example config_report_container.yaml), example YAML structure:\n     *\n     * defaultWidgets:\n     *     trafficOverview:\n     *         class: RainLab\\GoogleAnalytics\\ReportWidgets\\TrafficOverview\n     *         sortOrder: 1\n     *         configuration:\n     *             title: 'Traffic overview'\n     *             ocWidgetWidth: 12\n     */\n    public $defaultWidgets = [];\n\n    /**\n     * @deprecated use showAddRemove\n     */\n    public $canAddAndDelete;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'reportContainer';\n\n    /**\n     * @var array reportWidgets used by this container.\n     */\n    protected $reportWidgets = [];\n\n    /**\n     * @var boolean reportsDefined determines if report widgets have been created.\n     */\n    protected $reportsDefined = false;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'context',\n            'showReorder',\n            'showConfigure',\n            'showAddRemove',\n            'showMakeDefault',\n            'defaultWidgets',\n            'canAddAndDelete', // @deprecated\n        ]);\n\n        // @deprecated\n        if ($this->canAddAndDelete !== null) {\n            $this->showAddRemove = (bool) $this->canAddAndDelete;\n        }\n    }\n\n    /**\n     * bindToController ensures report widgets are registered so they can also be bound to\n     * the controller this allows their AJAX features to operate.\n     * @return void\n     */\n    public function bindToController()\n    {\n        $this->defineReportWidgets();\n        parent::bindToController();\n    }\n\n    /**\n     * render this widget along with its collection of report widgets.\n     */\n    public function render()\n    {\n        $this->defineReportWidgets();\n        $this->vars['widgets'] = $this->reportWidgets;\n        return $this->makePartial('container');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/reportcontainer.css');\n        $this->addJs('vendor/isotope/jquery.isotope.min.js');\n        $this->addJs('js/reportcontainer.js');\n    }\n\n    //\n    // AJAX handlers\n    //\n\n    /**\n     * onResetWidgets\n     */\n    public function onResetWidgets()\n    {\n        if (!$this->showAddRemove) {\n            throw new ForbiddenException;\n        }\n\n        $this->resetWidgets();\n\n        $this->vars['widgets'] = $this->reportWidgets;\n\n        Flash::success(__(\"Layout has been reset\"));\n\n        return ['#'.$this->getId('container-list') => $this->makePartial('widget_list')];\n    }\n\n    /**\n     * onMakeLayoutDefault\n     */\n    public function onMakeLayoutDefault()\n    {\n        if (!$this->showMakeDefault) {\n            throw new ForbiddenException;\n        }\n\n        $widgets = $this->getWidgetsFromUserPreferences();\n\n        SystemParameters::set($this->getSystemParametersKey(), $widgets);\n\n        Flash::success(__(\"Current layout is now the default\"));\n    }\n\n    /**\n     * onUpdateWidget\n     */\n    public function onUpdateWidget()\n    {\n        if (!$this->showConfigure) {\n            throw new ForbiddenException;\n        }\n\n        $alias = Request::input('alias');\n\n        $widget = $this->findWidgetByAlias($alias);\n\n        $widget->setProperties(json_decode(Request::input('fields'), true));\n\n        $this->saveWidgetProperties($alias, $widget->getProperties());\n\n        return [\n            '#'.$alias => $widget->render()\n        ];\n    }\n\n    /**\n     * onRemoveWidget\n     */\n    public function onRemoveWidget()\n    {\n        if (!$this->showAddRemove) {\n            throw new ForbiddenException;\n        }\n\n        $alias = Request::input('alias');\n\n        $this->removeWidget($alias);\n    }\n\n    /**\n     * onLoadAddPopup\n     */\n    public function onLoadAddPopup()\n    {\n        if (!$this->showAddRemove) {\n            throw new ForbiddenException;\n        }\n\n        $sizes = [];\n        for ($i = 1; $i <= 12; $i++) {\n            $sizes[$i] = $i < 12 ? $i : $i.' (' . __(\"full width\") . ')';\n        }\n\n        $this->vars['sizes'] = $sizes;\n        $this->vars['widgets'] = DashManager::instance()->listReportWidgets();\n\n        return $this->makePartial('new_widget_popup');\n    }\n\n    /**\n     * onAddWidget\n     */\n    public function onAddWidget()\n    {\n        if (!$this->showAddRemove) {\n            throw new ForbiddenException;\n        }\n\n        $className = trim(Request::input('className'));\n        $size = trim(Request::input('size'));\n\n        if (!$className) {\n            throw new ApplicationException(\"Please select a widget to add.\");\n        }\n\n        if (!class_exists($className)) {\n            throw new ApplicationException(\"The selected class doesn't exist.\");\n        }\n\n        $widget = new $className($this->controller);\n        if (!($widget instanceof \\Backend\\Classes\\ReportWidgetBase)) {\n            throw new ApplicationException(\"The selected class is not a report widget.\");\n        }\n\n        $widgetInfo = $this->addWidget($widget, $size);\n\n        return [\n            '@#'.$this->getId('container-list') => $this->makePartial('widget', [\n                'widget' => $widget,\n                'widgetAlias' => $widgetInfo['alias'],\n                'sortOrder' => $widgetInfo['sortOrder']\n            ])\n        ];\n    }\n\n    /**\n     * onSetWidgetOrders\n     */\n    public function onSetWidgetOrders()\n    {\n        if (!$this->showReorder) {\n            throw new ForbiddenException;\n        }\n\n        $aliases = trim(Request::input('aliases'));\n        $orders = trim(Request::input('orders'));\n\n        if (!$aliases) {\n            throw new ApplicationException('Invalid aliases string.');\n        }\n\n        if (!$orders) {\n            throw new ApplicationException('Invalid orders string.');\n        }\n\n        $aliases = explode(',', $aliases);\n        $orders = explode(',', $orders);\n\n        if (count($aliases) != count($orders)) {\n            throw new ApplicationException('Invalid data posted.');\n        }\n\n        $widgets = $this->getWidgetsFromUserPreferences();\n        foreach ($aliases as $index => $alias) {\n            if (isset($widgets[$alias])) {\n                $widgets[$alias]['sortOrder'] = $orders[$index];\n            }\n        }\n\n        $this->setWidgetsToUserPreferences($widgets);\n    }\n\n    //\n    // Widget API\n    //\n\n    /**\n     * addWidget\n     */\n    public function addWidget($widget, $size)\n    {\n        $widgets = $this->getWidgetsFromUserPreferences();\n\n        $num = count($widgets);\n        do {\n            $num++;\n            $alias = 'report_container_'.$this->context.'_'.$num;\n        }\n        while (array_key_exists($alias, $widgets));\n\n        // Ensure that the widget's alias is correctly set for this request\n        $widget->alias = $alias;\n\n        $sortOrder = 0;\n        foreach ($widgets as $widgetInfo) {\n            $sortOrder = max($sortOrder, $widgetInfo['sortOrder']);\n        }\n\n        $sortOrder++;\n\n        $widget->setProperty('ocWidgetWidth', $size);\n\n        $widgets[$alias] = [\n            'class' => get_class($widget),\n            'configuration' => $widget->getProperties(),\n            'sortOrder' => $sortOrder\n        ];\n\n        $this->setWidgetsToUserPreferences($widgets);\n\n        return [\n            'alias' => $alias,\n            'sortOrder' => $widgets[$alias]['sortOrder']\n        ];\n    }\n\n    /**\n     * removeWidget\n     */\n    protected function removeWidget($alias)\n    {\n        $widgets = $this->getWidgetsFromUserPreferences();\n\n        if (isset($widgets[$alias])) {\n            unset($widgets[$alias]);\n        }\n\n        $this->setWidgetsToUserPreferences($widgets);\n    }\n\n    //\n    // Methods for internal use\n    //\n\n    /**\n     * defineReportWidgets registers the report widgets that will be included in this container.\n     * The chosen widgets are based on the user preferences.\n     */\n    protected function defineReportWidgets()\n    {\n        if ($this->reportsDefined) {\n            return;\n        }\n\n        $result = [];\n        $widgets = $this->getWidgetsFromUserPreferences();\n\n        foreach ($widgets as $alias => $widgetInfo) {\n            if ($widget = $this->makeReportWidget($alias, $widgetInfo)) {\n                $result[$alias] = $widget;\n            }\n        }\n\n        uasort($result, function ($a, $b) {\n            return $a['sortOrder'] - $b['sortOrder'];\n        });\n\n        $this->reportWidgets = $result;\n\n        $this->reportsDefined = true;\n    }\n\n    /**\n     * makeReportWidget makes a single report widget object, returned array index:\n     * - widget: The widget object (Backend\\Classes\\ReportWidgetBase)\n     * - sortOrder: The current sort order\n     *\n     * @param  string $alias\n     * @param  array $widgetInfo\n     * @return array\n     */\n    protected function makeReportWidget($alias, $widgetInfo)\n    {\n        $configuration = $widgetInfo['configuration'];\n        $configuration['alias'] = $alias;\n\n        $className = $widgetInfo['class'];\n        $availableReportWidgets = array_keys(DashManager::instance()->listReportWidgets());\n        if (!class_exists($className) || !in_array($className, $availableReportWidgets)) {\n            return;\n        }\n\n        $widget = new $className($this->controller, $configuration);\n        $widget->bindToController();\n\n        return ['widget' => $widget, 'sortOrder' => $widgetInfo['sortOrder']];\n    }\n\n    /**\n     * resetWidgets\n     */\n    protected function resetWidgets()\n    {\n        $this->resetWidgetsUserPreferences();\n\n        $this->reportsDefined = false;\n\n        $this->defineReportWidgets();\n    }\n\n    /**\n     * findWidgetByAlias\n     */\n    protected function findWidgetByAlias($alias)\n    {\n        $this->defineReportWidgets();\n\n        $widgets = $this->reportWidgets;\n        if (!isset($widgets[$alias])) {\n            throw new ApplicationException('The specified widget is not found.');\n        }\n\n        return $widgets[$alias]['widget'];\n    }\n\n    /**\n     * getWidgetPropertyConfig\n     */\n    protected function getWidgetPropertyConfig($widget)\n    {\n        $properties = $widget->defineProperties();\n\n        $property = [\n            'property' => 'ocWidgetWidth',\n            'title' => __(\"Width :columns\", ['columns' => '(1-12)']),\n            'description' => __(\"The widget width, a number between 1 and 10.\"),\n            'type' => 'dropdown',\n            'validationPattern' => '^[0-9]+$',\n            'validationMessage' => __(\"Please enter the widget width as a number between 1 and 10.\"),\n            'options' => [\n                1  => '1 ' . trans_choice(\"{1} column|[2,Inf] columns\", 1),\n                2  => '2 ' . trans_choice(\"{1} column|[2,Inf] columns\", 2),\n                3  => '3 ' . trans_choice(\"{1} column|[2,Inf] columns\", 3),\n                4  => '4 ' . trans_choice(\"{1} column|[2,Inf] columns\", 4),\n                5  => '5 ' . trans_choice(\"{1} column|[2,Inf] columns\", 5),\n                6  => '6 ' . trans_choice(\"{1} column|[2,Inf] columns\", 6),\n                7  => '7 ' . trans_choice(\"{1} column|[2,Inf] columns\", 7),\n                8  => '8 ' . trans_choice(\"{1} column|[2,Inf] columns\", 8),\n                9  => '9 ' . trans_choice(\"{1} column|[2,Inf] columns\", 9),\n                10 => '10 ' . trans_choice(\"{1} column|[2,Inf] columns\", 10),\n                11 => '11 ' . trans_choice(\"{1} column|[2,Inf] columns\", 11),\n                12 => '12 ' . trans_choice(\"{1} column|[2,Inf] columns\", 12)\n            ]\n        ];\n        $result[] = $property;\n\n        $property = [\n            'property' => 'ocWidgetNewRow',\n            'title' => __(\"Force new row\"),\n            'description' => __(\"Put the widget in a new row.\"),\n            'type' => 'checkbox'\n        ];\n\n        $result[] = $property;\n        foreach ($properties as $name => $params) {\n            $property = [\n                'property' => $name,\n                'title'    => isset($params['title']) ? Lang::get($params['title']) : $name,\n                'type'     => $params['type'] ?? 'string'\n            ];\n\n            foreach ($params as $name => $value) {\n                if (isset($property[$name])) {\n                    continue;\n                }\n\n                $property[$name] = !is_array($value) ? Lang::get($value) : $value;\n            }\n\n            $result[] = $property;\n        }\n\n        return json_encode($result);\n    }\n\n    /**\n     * getWidgetPropertyValues\n     */\n    protected function getWidgetPropertyValues($widget)\n    {\n        $result = [];\n\n        $properties = $widget->defineProperties();\n        foreach ($properties as $name => $params) {\n            $value = $widget->property($name);\n            if (is_string($value)) {\n                $value = Lang::get($value);\n            }\n            $result[$name] = $value;\n        }\n\n        $result['ocWidgetWidth'] = $widget->property('ocWidgetWidth');\n        $result['ocWidgetNewRow'] = $widget->property('ocWidgetNewRow');\n\n        return json_encode($result);\n    }\n\n    //\n    // User and system value storage\n    //\n\n    /**\n     * getWidgetsFromUserPreferences\n     */\n    protected function getWidgetsFromUserPreferences()\n    {\n        $defaultWidgets = SystemParameters::get($this->getSystemParametersKey(), $this->defaultWidgets);\n\n        $widgets = UserPreference::forUser()\n            ->get($this->getUserPreferencesKey(), $defaultWidgets);\n\n        if (!is_array($widgets)) {\n            return [];\n        }\n\n        return $widgets;\n    }\n\n    /**\n     * setWidgetsToUserPreferences\n     */\n    protected function setWidgetsToUserPreferences($widgets)\n    {\n        UserPreference::forUser()->set($this->getUserPreferencesKey(), $widgets);\n    }\n\n    /**\n     * resetWidgetsUserPreferences\n     */\n    protected function resetWidgetsUserPreferences()\n    {\n        UserPreference::forUser()->reset($this->getUserPreferencesKey());\n    }\n\n    /**\n     * saveWidgetProperties\n     */\n    protected function saveWidgetProperties($alias, $properties)\n    {\n        $widgets = $this->getWidgetsFromUserPreferences();\n\n        if (isset($widgets[$alias])) {\n            $widgets[$alias]['configuration'] = $properties;\n\n            $this->setWidgetsToUserPreferences($widgets);\n        }\n    }\n\n    /**\n     * getUserPreferencesKey\n     */\n    protected function getUserPreferencesKey()\n    {\n        return 'backend::reportwidgets.'.$this->context;\n    }\n\n    /**\n     * getSystemParametersKey\n     */\n    protected function getSystemParametersKey()\n    {\n        return 'backend::reportwidgets.default.'.$this->context;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/RoleImpersonator.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Block;\nuse Backend;\nuse Redirect;\nuse BackendAuth;\nuse Backend\\Classes\\WidgetBase;\n\n/**\n * RoleImpersonator widget.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RoleImpersonator extends WidgetBase\n{\n    /**\n     * bindToController\n     */\n    public function bindToController()\n    {\n        parent::bindToController();\n\n        Block::append('banner-area', $this->makePartial('roleimpersonator'));\n    }\n\n    /**\n     * loadAssets adds widget specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/roleimpersonator.css');\n    }\n\n    /**\n     * onStopImpersonateRole\n     */\n    public function onStopImpersonateRole()\n    {\n        BackendAuth::stopImpersonateRole();\n\n        if (post('redirect')) {\n            return Backend::redirect('backend/userroles/update/'.$this->getImpersonatingRole()->id);\n        }\n\n        return Redirect::refresh();\n    }\n\n    /**\n     * getImpersonatingRole\n     */\n    public function getImpersonatingRole()\n    {\n        return BackendAuth::getUser()->getRoleImpersonation();\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/Search.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Lang;\nuse Throwable;\nuse Backend\\Classes\\WidgetBase;\n\n/**\n * Search Widget\n * Used for building a toolbar, Renders a search container.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Search extends WidgetBase\n{\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string prompt is the search placeholder text.\n     */\n    public $prompt;\n\n    /**\n     * @var bool growable when selected.\n     */\n    public $growable = true;\n\n    /**\n     * @var string partial custom partial file definition, in context of the controller.\n     */\n    public $partial;\n\n    /**\n     * @var string mode defines the search mode. Commonly passed to the searchWhere() query.\n     */\n    public $mode;\n\n    /**\n     * @var string scope custom method name. Commonly passed to the query.\n     */\n    public $scope;\n\n    /**\n     * @var bool searchOnEnter searches on enter key instead of every key stroke.\n     */\n    public $searchOnEnter = false;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'search';\n\n    /**\n     * @var string activeTerm pulled from session data.\n     */\n    protected $activeTerm;\n\n    /**\n     * @var array cssClasses to apply to the list container element.\n     */\n    public $cssClasses = [];\n\n    /**\n     * init the widget, called by the constructor and free from its parameters.\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'prompt',\n            'partial',\n            'growable',\n            'scope',\n            'mode',\n            'searchOnEnter',\n        ]);\n\n        if ($this->growable) {\n            $this->cssClasses[] = 'is-growable';\n        }\n    }\n\n    /**\n     * render the widget\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        if ($this->partial) {\n            return $this->controller->makePartial($this->partial);\n        }\n\n        return $this->makePartial('search');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['cssClasses'] = implode(' ', $this->cssClasses);\n        $this->vars['placeholder'] = Lang::get($this->prompt);\n        $this->vars['value'] = $this->getActiveTerm();\n        $this->vars['searchOnEnter'] = $this->searchOnEnter;\n    }\n\n    /**\n     * onSubmit search field\n     */\n    public function onSubmit()\n    {\n        // Save or reset search term in session\n        $this->setActiveTerm(post($this->getName()));\n\n        // Trigger class event, merge results as viewable array\n        $params = func_get_args();\n        try {\n            $result = $this->fireEvent('search.submit', [$params]);\n        }\n        catch (Throwable $e) {\n            $this->setActiveTerm('');\n            throw $e;\n        }\n\n        if ($result && is_array($result)) {\n            return call_user_func_array('array_merge', $result);\n        }\n    }\n\n    /**\n     * getActiveTerm returns an active search term for this widget instance.\n     */\n    public function getActiveTerm()\n    {\n        return $this->activeTerm = $this->getSession('term', '');\n    }\n\n    /**\n     * setActiveTerm for this widget instance.\n     */\n    public function setActiveTerm($term)\n    {\n        if (!is_string($term) || !strlen($term)) {\n            $this->resetSession();\n        }\n        else {\n            $this->putSession('term', $term);\n        }\n\n        $this->activeTerm = $term;\n    }\n\n    /**\n     * getName returns a value suitable for the field name property.\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->alias . '[term]';\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/SiteSwitcher.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Site;\nuse Request;\nuse BackendAuth;\nuse Cms\\Classes\\Theme;\nuse Backend\\Classes\\WidgetBase;\nuse System\\Classes\\PluginManager;\n\n/**\n * SiteSwitcher widget.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SiteSwitcher extends WidgetBase\n{\n    /**\n     * @var string defaultAlias to identify this widget.\n     */\n    protected $defaultAlias = 'siteSwitcher';\n\n    /**\n     * @var string|null switchHandler is set by setSwitchHandler.\n     */\n    protected $switchHandler;\n\n    /**\n     * bindToController\n     */\n    public function bindToController()\n    {\n        parent::bindToController();\n\n        // Store preference when user actively switches site\n        if ($id = get('_site_id')) {\n            if (!Request::ajax()) {\n                Theme::resetEditTheme();\n            }\n\n            Site::storeEditSitePreference($id);\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render($extraVars = [])\n    {\n        $this->prepareVars($extraVars);\n        return $this->makePartial('siteswitcher');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function renderSubmenu()\n    {\n        $this->prepareVars();\n        return $this->makePartial('submenu');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars($extraVars = [])\n    {\n        foreach ($extraVars as $key => $val) {\n            $this->vars[$key] = $val;\n        }\n\n        $useMultisite = Site::hasMultiEditSite();\n\n        $sites = Site::listEditEnabled();\n        $sites = $this->filterSitesByPlugin($sites);\n\n        $this->vars['switchHandler'] = $this->switchHandler;\n        $this->vars['useMultisite'] = $useMultisite;\n        $this->vars['canManageSite'] = BackendAuth::userHasAccess('settings.manage_sites');\n        $this->vars['useAnySite'] = Site::hasAnySite();\n        $this->vars['editSite'] = Site::getEditSite() ?: Site::getAnySite();\n        $this->vars['sites'] = $sites;\n    }\n\n    /**\n     * filterSitesByPlugin removes sites where the current controller's\n     * plugin is disabled, returns the collection unchanged for module controllers.\n     */\n    protected function filterSitesByPlugin($sites)\n    {\n        $manager = PluginManager::instance();\n        $pluginCode = $manager->getIdentifier(get_class($this->controller));\n\n        if (!$pluginCode || !$manager->hasPlugin($pluginCode)) {\n            return $sites;\n        }\n\n        return $sites->filter(function($site) use ($manager, $pluginCode) {\n            return !$manager->isDisabledForSiteDefinition($pluginCode, $site);\n        });\n    }\n\n    /**\n     * setSwitchHandler enables the use of an AJAX handler when switching the site\n     */\n    public function setSwitchHandler(?string $name = null)\n    {\n        $this->switchHandler = $name;\n    }\n\n    /**\n     * loadAssets adds widget specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/siteswitcher.css');\n        $this->addJs('js/siteswitcher.js', ['type' => 'module']);\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/Table.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Lang;\nuse Input;\nuse Request;\nuse Backend\\Classes\\WidgetBase;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse SystemException;\n\n/**\n * Table Widget.\n *\n * Represents an editable tabular control.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Table extends WidgetBase\n{\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'table';\n\n    /**\n     * @var array Table columns\n     */\n    protected $columns = [];\n\n    /**\n     * @var boolean Show data table header\n     */\n    protected $showHeader = true;\n\n    /**\n     * @var Backend\\Widgets\\Table\\DatasourceBase\n     */\n    protected $dataSource;\n\n    /**\n     * @var string Field name used for request data.\n     */\n    protected $fieldName;\n\n    /**\n     * @var string\n     */\n    protected $recordsKeyFrom;\n\n    /**\n     * @var array dataSourceAliases\n     */\n    protected $dataSourceAliases = [\n        'client' => \\Backend\\Widgets\\Table\\ClientMemoryDataSource::class,\n        'server' => \\Backend\\Widgets\\Table\\ServerEventDataSource::class\n    ];\n\n    /**\n     * Initialize the widget, called by the constructor and free from its parameters.\n     */\n    public function init()\n    {\n        $this->columns = $this->getConfig('columns', []);\n\n        $this->fieldName = $this->getConfig('fieldName', $this->alias);\n\n        $this->recordsKeyFrom = $this->getConfig('keyFrom', 'id');\n\n        $dataSourceClass = $this->getConfig('dataSource');\n        if (!strlen($dataSourceClass)) {\n            throw new SystemException('The Table widget data source is not specified in the configuration.');\n        }\n\n        if (array_key_exists($dataSourceClass, $this->dataSourceAliases)) {\n            $dataSourceClass = $this->dataSourceAliases[$dataSourceClass];\n        }\n\n        if (!class_exists($dataSourceClass)) {\n            throw new SystemException(sprintf('The Table widget data source class \"%s\" is could not be found.', $dataSourceClass));\n        }\n\n        $this->dataSource = new $dataSourceClass($this->recordsKeyFrom);\n\n        // Load data into the client memory data source on POST\n        if (Request::method() == 'POST' && $this->isClientDataSource()) {\n            if (strpos($this->fieldName, '[') === false) {\n                $requestData = post($this->fieldName . 'TableData');\n            }\n            else {\n                $requestData = post($this->fieldName . '[TableData]');\n            }\n\n            if ($requestData) {\n                $requestData = json_decode($requestData, true);\n            }\n\n            if ($requestData) {\n                $this->dataSource->purge();\n                $this->dataSource->initRecords($requestData);\n            }\n        }\n    }\n\n    /**\n     * Returns the data source object.\n     * @return \\Backend\\Widgets\\Table\\DataSourceBase\n     */\n    public function getDataSource()\n    {\n        return $this->dataSource;\n    }\n\n    /**\n     * Renders the widget.\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('table');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['columns'] = $this->prepareColumnsArray();\n        $this->vars['recordsKeyFrom'] = $this->recordsKeyFrom;\n\n        $this->vars['recordsPerPage'] = $this->getConfig('recordsPerPage', false) ?: 'false';\n        $this->vars['postbackHandlerName'] = $this->getConfig('postbackHandlerName');\n        $this->vars['postbackHandlerWild'] = $this->getConfig('postbackHandlerWild', false) ?: 'false';\n        $this->vars['searching'] = $this->getConfig('searching', false);\n        $this->vars['adding'] = $this->getConfig('adding', true);\n        $this->vars['deleting'] = $this->getConfig('deleting', true);\n        $this->vars['toolbar'] = $this->getConfig('toolbar', true);\n        $this->vars['height'] = $this->getConfig('height', false) ?: 'false';\n        $this->vars['dynamicHeight'] = $this->getConfig('dynamicHeight', false) ?: 'false';\n\n        $this->vars['btnAddRowLabel'] = Lang::get($this->getConfig('btnAddRowLabel', 'backend::lang.form.insert_row'));\n        $this->vars['btnAddRowBelowLabel'] = Lang::get($this->getConfig('btnAddRowBelowLabel', 'backend::lang.form.insert_row_below'));\n        $this->vars['btnDeleteRowLabel'] = Lang::get($this->getConfig('btnDeleteRowLabel', 'backend::lang.form.delete_row'));\n\n        $isClientDataSource = $this->isClientDataSource();\n\n        $this->vars['clientDataSourceClass'] = $isClientDataSource ? 'client' : 'server';\n        $this->vars['data'] = json_encode(\n            $isClientDataSource ? $this->dataSource->getAllRecords() : []\n        );\n    }\n\n    //\n    // Internals\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/table.css');\n        $this->addJs('js/build-min.js');\n    }\n\n    /**\n     * Converts the columns associative array to a regular array and translates column headers and drop-down options.\n     * Working with regular arrays is much faster in JavaScript.\n     * References:\n     * - https://www.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/\n     * - https://jsperf.com/performance-of-array-vs-object/3\n     */\n    protected function prepareColumnsArray()\n    {\n        $result = [];\n\n        foreach ($this->columns as $key => $data) {\n            $data['key'] = $key;\n\n            if (isset($data['title'])) {\n                $data['title'] = trans($data['title']);\n            }\n\n            if (isset($data['options'])) {\n                foreach ($data['options'] as &$option) {\n                    $option = trans($option);\n                }\n            }\n\n            if (isset($data['validation'])) {\n                foreach ($data['validation'] as &$validation) {\n                    if (isset($validation['message'])) {\n                        $validation['message'] = trans($validation['message']);\n                    }\n                }\n            }\n\n            $result[] = $data;\n        }\n\n        return $result;\n    }\n\n    /**\n     * isClientDataSource\n     */\n    protected function isClientDataSource(): bool\n    {\n        return $this->dataSource instanceof \\Backend\\Widgets\\Table\\ClientMemoryDataSource;\n    }\n\n    //\n    // Event handlers\n    //\n\n    /**\n     * onServerGetRecords\n     */\n    public function onServerGetRecords()\n    {\n        // Disable asset broadcasting\n        $this->controller->flushAssets();\n\n        if ($this->isClientDataSource()) {\n            throw new SystemException('The Table widget is not configured to use the server data source.');\n        }\n\n        $count = post('count');\n\n        // Oddly, JS may pass false as a string (@todo)\n        if ($count === 'false') {\n            $count = false;\n        }\n\n        return [\n            'records' => $this->dataSource->getRecords(post('offset'), $count),\n            'count' => $this->dataSource->getCount()\n        ];\n    }\n\n    /**\n     * onServerSearchRecords\n     */\n    public function onServerSearchRecords()\n    {\n        // Disable asset broadcasting\n        $this->controller->flushAssets();\n\n        if ($this->isClientDataSource()) {\n            throw new SystemException('The Table widget is not configured to use the server data source.');\n        }\n\n        $count = post('count');\n\n        // Oddly, JS may pass false as a string (@todo)\n        if ($count === 'false') {\n            $count = false;\n        }\n\n        return [\n            'records' => $this->dataSource->searchRecords(post('query'), post('offset'), $count),\n            'count' => $this->dataSource->getCount()\n        ];\n    }\n\n    /**\n     * onServerCreateRecord\n     */\n    public function onServerCreateRecord()\n    {\n        if ($this->isClientDataSource()) {\n            throw new SystemException('The Table widget is not configured to use the server data source.');\n        }\n\n        $this->dataSource->createRecord(\n            post('recordData'),\n            post('placement'),\n            post('relativeToKey')\n        );\n\n        return $this->onServerGetRecords();\n    }\n\n    /**\n     * onServerUpdateRecord\n     */\n    public function onServerUpdateRecord()\n    {\n        if ($this->isClientDataSource()) {\n            throw new SystemException('The Table widget is not configured to use the server data source.');\n        }\n\n        $this->dataSource->updateRecord(post('key'), post('recordData'));\n    }\n\n    /**\n     * onServerDeleteRecord\n     */\n    public function onServerDeleteRecord()\n    {\n        if ($this->isClientDataSource()) {\n            throw new SystemException('The Table widget is not configured to use the server data source.');\n        }\n\n        $this->dataSource->deleteRecord(post('key'));\n\n        return $this->onServerGetRecords();\n    }\n\n    /**\n     * onGetDropdownOptions\n     */\n    public function onGetDropdownOptions()\n    {\n        $columnName = Input::get('column');\n        $rowData = Input::get('rowData');\n\n        $eventResults = $this->fireEvent('table.getDropdownOptions', [$columnName, $rowData]);\n\n        $options = [];\n        if (count($eventResults)) {\n            $options = $eventResults[0];\n        }\n\n        return [\n            'options' => $options\n        ];\n    }\n\n    /**\n     * onGetAutocompleteOptions\n     */\n    public function onGetAutocompleteOptions()\n    {\n        $columnName = Input::get('column');\n        $rowData = Input::get('rowData');\n\n        $eventResults = $this->fireEvent('table.getAutocompleteOptions', [$columnName, $rowData]);\n\n        $options = [];\n        if (count($eventResults)) {\n            $options = $eventResults[0];\n        }\n\n        return [\n            'options' => $options\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/Toolbar.php",
    "content": "<?php namespace Backend\\Widgets;\n\nuse Backend\\Classes\\WidgetBase;\n\n/**\n * Toolbar Widget\n * Used for building a toolbar, renders a toolbar.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Toolbar extends WidgetBase\n{\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string buttons partial name\n     */\n    public $buttons;\n\n    /**\n     * @var array|string search widget configuration or partial name, optional.\n     */\n    public $search;\n\n    /**\n     * @var string setupHandler displays a list configuration icon in the toolbar.\n     */\n    public $setupHandler;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'toolbar';\n\n    /**\n     * @var WidgetBase searchWidget reference\n     */\n    protected $searchWidget;\n\n    /**\n     * @var array cssClasses to apply to the toolbar container element\n     */\n    public $cssClasses = [];\n\n    /**\n     * @var string listWidgetId\n     */\n    public $listWidgetId;\n\n    /**\n     * init the widget, called by the constructor and free from its parameters.\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'buttons',\n            'search',\n            'setupHandler',\n        ]);\n\n        // Prepare the search widget (optional)\n        if (isset($this->search)) {\n            if (is_string($this->search)) {\n                $searchConfig = $this->makeConfig(['partial' => $this->search]);\n            }\n            else {\n                $searchConfig = $this->makeConfig($this->search);\n            }\n\n            $searchConfig->alias = $this->alias . 'Search';\n            $this->searchWidget = $this->makeWidget(\\Backend\\Widgets\\Search::class, $searchConfig);\n            $this->searchWidget->bindToController();\n        }\n    }\n\n    /**\n     * Renders the widget.\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('toolbar');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['search'] = $this->searchWidget ? $this->searchWidget->render() : '';\n        $this->vars['cssClasses'] = implode(' ', $this->cssClasses);\n        $this->vars['controlPanel'] = $this->makeControlPanel();\n        $this->vars['setupHandler'] = $this->setupHandler;\n    }\n\n    /**\n     * getSearchWidget\n     */\n    public function getSearchWidget()\n    {\n        return $this->searchWidget;\n    }\n\n    /**\n     * makeControlPanel\n     */\n    public function makeControlPanel()\n    {\n        $this->vars['alias'] = $this->alias;\n\n        if (!isset($this->buttons)) {\n            return '<div data-control=\"toolbar\"></div>';\n        }\n\n        return $this->controller->makePartial($this->buttons, $this->vars);\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/HasFilterWidgets.php",
    "content": "<?php namespace Backend\\Widgets\\Filter;\n\nuse Lang;\nuse Backend\\Classes\\FilterScope;\nuse Backend\\Classes\\WidgetManager;\nuse Backend\\Classes\\FilterWidgetBase;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse SystemException;\n\n/**\n * HasFilterWidgets concern\n */\ntrait HasFilterWidgets\n{\n    /**\n     * @var array filterWidgets collection of all filter widgets used in this filter.\n     */\n    protected $filterWidgets = [];\n\n    /**\n     * @var \\Backend\\Classes\\WidgetManager widgetManager\n     */\n    protected $widgetManager;\n\n    /**\n     * initFilterWidgetsConcern\n     */\n    protected function initFilterWidgetsConcern()\n    {\n        $this->widgetManager = WidgetManager::instance();\n    }\n\n    /**\n     * makeFilterScopeWidget object from a filter field object\n     */\n    protected function makeFilterScopeWidget(FilterScope $scope): ?FilterWidgetBase\n    {\n        if ($scope->type !== 'widget') {\n            return null;\n        }\n\n        if (isset($this->filterWidgets[$scope->scopeName])) {\n            return $this->filterWidgets[$scope->scopeName];\n        }\n\n        $widgetConfig = $this->makeConfig($scope->config);\n        $widgetConfig->alias = $this->alias . studly_case($this->nameToId($scope->scopeName));\n        $widgetConfig->previewMode = $this->previewMode;\n        $widgetConfig->model = $this->scopeModels[$scope->scopeName] ?? null;\n        $widgetConfig->isJsonable = $this->model->isJsonable($scope->scopeName);\n        $widgetConfig->parentFilter = $this;\n\n        $widgetName = $widgetConfig->widget;\n        $widgetClass = $this->widgetManager->resolveFilterWidget($widgetName);\n\n        if (!class_exists($widgetClass)) {\n            throw new SystemException(Lang::get(\n                'backend::lang.widget.not_registered',\n                ['name' => $widgetClass]\n            ));\n        }\n\n        $widget = $this->makeFilterWidget($widgetClass, $scope, $widgetConfig);\n\n        return $this->filterWidgets[$scope->scopeName] = $widget;\n    }\n\n    /**\n     * makeFilterWidget object with the supplied filter scope and widget configuration.\n     * @param string $class Widget class name\n     * @param mixed $scopeConfig A field name, an array of config or a FileScope object.\n     * @param array $widgetConfig An array of config.\n     * @return \\Backend\\Classes\\FilterWidgetBase The widget object\n     */\n    public function makeFilterWidget($class, $scopeConfig = [], $widgetConfig = [])\n    {\n        $controller = property_exists($this, 'controller') && $this->controller\n            ? $this->controller\n            : $this;\n\n        if (!class_exists($class)) {\n            throw new SystemException(Lang::get('backend::lang.widget.not_registered', [\n                'name' => $class\n            ]));\n        }\n\n        if (is_string($scopeConfig)) {\n            $scopeConfig = ['scopeName' => $scopeConfig];\n        }\n\n        if (is_array($scopeConfig)) {\n            if (isset($fieldConfig['name'])) {\n                $fieldConfig['scopeName'] = $fieldConfig['name'];\n            }\n\n            $filterScope = new FilterScope($scopeConfig);\n            $filterScope->displayAs('widget');\n        }\n        else {\n            $filterScope = $scopeConfig;\n        }\n\n        return new $class($controller, $filterScope, $widgetConfig);\n    }\n\n    /**\n     * isFilterWidget checks if a field type is a widget or not\n     */\n    protected function isFilterWidget(string $scopeType): bool\n    {\n        if (!$scopeType) {\n            return false;\n        }\n\n        if (strpos($scopeType, '\\\\')) {\n            return true;\n        }\n\n        $widgetClass = $this->widgetManager->resolveFilterWidget($scopeType);\n\n        if (!class_exists($widgetClass)) {\n            return false;\n        }\n\n        if (is_subclass_of($widgetClass, \\Backend\\Classes\\FilterWidgetBase::class)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * getFilterWidgets for the instance\n     */\n    public function getFilterWidgets(): array\n    {\n        return $this->filterWidgets;\n    }\n\n    /**\n     * getFilterWidget returns a specified filter widget\n     * @param string $scope\n     */\n    public function getFilterWidget($scope)\n    {\n        if (isset($this->filterWidgets[$scope])) {\n            return $this->filterWidgets[$scope];\n        }\n\n        return null;\n    }\n\n    /**\n     * nameToId is a helper method to convert a field name to a valid ID attribute\n     * @param $input\n     * @return string\n     */\n    public function nameToId($input)\n    {\n        return HtmlHelper::nameToId($input);\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/HasLegacyDefinitions.php",
    "content": "<?php namespace Backend\\Widgets\\Filter;\n\nuse Date;\nuse Exception;\n\n/**\n * HasLegacyDefinitions concern\n */\ntrait HasLegacyDefinitions\n{\n    /**\n     * setScopeValue\n     * @deprecated see putScopeValue\n     */\n    public function setScopeValue($scope, $value)\n    {\n        $this->putScopeValue($scope, ['value' => $value]);\n    }\n\n    /**\n     * refitLegacyDateScope\n     */\n    protected function refitLegacyDateScope($scope)\n    {\n        $condition = $scope->conditions;\n\n        if (is_string($condition)) {\n            if (strpos('>', $condition)) {\n                $scope->conditions = [\n                    'after' => $condition\n                ];\n            }\n            elseif (strpos('<', $condition)) {\n                $scope->conditions = [\n                    'before' => $condition\n                ];\n            }\n            else {\n                $scope->conditions = [\n                    'equals' => $condition\n                ];\n            }\n        }\n\n        if (!$scope->modelScope && ($scopeName = $scope->scope)) {\n            $scope->modelScope = function($query, $scope) use ($scopeName) {\n                return $query->$scopeName(\n                    $this->refitLegacyDateParse($scope->value)\n                );\n            };\n        }\n    }\n\n    /**\n     * refitLegacyDateRangeScope\n     */\n    protected function refitLegacyDateRangeScope($scope)\n    {\n        $condition = $scope->conditions;\n\n        $scope->type = 'date';\n        $scope->conditions = ['between' => $condition];\n\n        if (!$scope->modelScope && ($scopeName = $scope->scope)) {\n            $scope->modelScope = function($query, $scope) use ($scopeName) {\n                return $query->$scopeName(\n                    $this->refitLegacyDateParse($scope->after),\n                    $this->refitLegacyDateParse($scope->before)\n                );\n            };\n        }\n    }\n\n    /**\n     * refitLegacyDateParse\n     */\n    protected function refitLegacyDateParse($value)\n    {\n        try {\n            return is_int($value)\n                ? Date::createFromTimestamp($value)\n                : Date::parse($value);\n        }\n        catch (Exception $ex) {\n            return $value;\n        }\n    }\n\n    /**\n     * refitLegacyNumberScope\n     */\n    protected function refitLegacyNumberScope($scope)\n    {\n        $condition = $scope->conditions;\n\n        if (is_string($condition)) {\n            if (strpos('>', $condition)) {\n                $scope->conditions = [\n                    'greater' => $condition\n                ];\n            }\n            elseif (strpos('<', $condition)) {\n                $scope->conditions = [\n                    'lesser' => $condition\n                ];\n            }\n            else {\n                $scope->conditions = [\n                    'equals' => $condition\n                ];\n            }\n        }\n\n        if (!$scope->modelScope && ($scopeName = $scope->scope)) {\n            $scope->modelScope = function($query, $scope) use ($scopeName) {\n                return $query->$scopeName($scope->value);\n            };\n        }\n    }\n\n    /**\n     * refitLegacyNumberRangeScope\n     */\n    protected function refitLegacyNumberRangeScope($scope)\n    {\n        $condition = $scope->conditions;\n\n        $scope->type = 'number';\n        $scope->conditions = ['between' => $condition];\n\n        if (!$scope->modelScope && ($scopeName = $scope->scope)) {\n            $scope->modelScope = function($query, $scope) use ($scopeName) {\n                return $query->$scopeName($scope->min, $scope->max);\n            };\n        }\n    }\n\n    /**\n     * refitLegacyTextScope\n     */\n    protected function refitLegacyTextScope($scope)\n    {\n        $condition = $scope->conditions;\n\n        if (is_string($condition)) {\n            $scope->conditions = [\n                'equals' => $condition\n            ];\n        }\n\n        if (!$scope->modelScope && ($scopeName = $scope->scope)) {\n            $scope->modelScope = function($query, $scope) use ($scopeName) {\n                return $query->$scopeName($scope->value);\n            };\n        }\n    }\n\n    /**\n     * refitLegacyClearScope\n     */\n    protected function refitLegacyClearScope($scope)\n    {\n        $this->removeScope($scope->scopeName);\n    }\n\n    /**\n     * refitLegacyGroupScope\n     */\n    protected function refitLegacyGroupScope($scope)\n    {\n        if (!$scope->modelScope && ($scopeName = $scope->scope)) {\n            $scope->modelScope = function($query, $scope) use ($scopeName) {\n                return $query->$scopeName($scope->value, $scope->mode ?? null);\n            };\n        }\n    }\n\n    /**\n     * refitLegacyDefaultScope\n     */\n    protected function refitLegacyDefaultScope($scope)\n    {\n        if (!$scope->modelScope && ($scopeName = $scope->scope)) {\n            $scope->modelScope = function($query, $scope) use ($scopeName) {\n                return $query->$scopeName($scope->value);\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/IsFilterElement.php",
    "content": "<?php namespace Backend\\Widgets\\Filter;\n\nuse Backend\\Classes\\FilterScope;\nuse October\\Rain\\Element\\Filter\\ScopeDefinition;\n\n/**\n * IsFilterElement defines all methods to satisfy the FilterElement contract\n *\n * @see \\October\\Contracts\\Element\\FilterElement\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait IsFilterElement\n{\n    /**\n     * defineScope adds a scope to the filter element\n     */\n    public function defineScope(?string $scopeName = null, ?string $label = null): ScopeDefinition\n    {\n        $scopeObj = new FilterScope([\n            'scopeName' => $scopeName,\n            'label' => $label,\n            'arrayName' => $this->arrayName,\n            // @deprecated v4 this should be uncommented\n            // 'idPrefix' => $this->getId()\n        ]);\n\n        $this->allScopes[$scopeName] = $scopeObj;\n\n        return $scopeObj;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/ScopeProcessor.php",
    "content": "<?php namespace Backend\\Widgets\\Filter;\n\nuse BackendAuth;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\n\n/**\n * ScopeProcessor concern\n */\ntrait ScopeProcessor\n{\n    /**\n     * processFieldOptionValues sets the callback for retrieving options\n     */\n    protected function processFieldOptionValues(array $scopes): void\n    {\n        $optionModelTypes = ['dropdown'];\n\n        foreach ($scopes as $scope) {\n            if (!in_array($scope->type, $optionModelTypes, false)) {\n                continue;\n            }\n\n            // Specified explicitly on the object already\n            if ($scope->hasOptions()) {\n                continue;\n            }\n\n            // Defer the execution of option data collection\n            $scopeOptions = $scope->optionsMethod ?: $scope->options;\n            $scope->options(function () use ($scope, $scopeOptions) {\n                return $scope->getOptionsFromModel($this->model, $scopeOptions);\n            });\n        }\n    }\n\n    /**\n     * processScopeModels creates associated models for scopes\n     */\n    protected function processScopeModels(array $scopes): void\n    {\n        foreach ($scopes as $scopeName => $scope) {\n            if ($className = $scope->modelClass) {\n                $model = new $className;\n                $this->scopeModels[$scopeName] = $model;\n            }\n            elseif ($this->model) {\n                [$nestedModel, $nestedField] = $this->makeNestedFilterModel($this->model, $scopeName);\n                if ($nestedModel->hasRelation($nestedField)) {\n                    $this->scopeModels[$scopeName] = $nestedModel->makeRelation($nestedField);\n                }\n            }\n        }\n    }\n\n    /**\n     * processPermissionCheck check if user has permissions to show the scope\n     * and removes it if permission is denied\n     */\n    protected function processPermissionCheck(array $scopes): void\n    {\n        foreach ($scopes as $scopeName => $scope) {\n            if (\n                $scope->permissions &&\n                !BackendAuth::userHasAccess($scope->permissions, false)\n            ) {\n                $this->removeScope($scopeName);\n            }\n        }\n    }\n\n    /**\n     * processFilterWidgetScopes will mutate scopes types that are registered as widgets,\n     * convert their type to 'widget' and internally allocate the widget object\n     */\n    protected function processFilterWidgetScopes(array $scopes): void\n    {\n        foreach ($scopes as $scope) {\n            if (!$this->isFilterWidget((string) $scope->type)) {\n                continue;\n            }\n\n            $newConfig = ['widget' => $scope->type];\n\n            if (is_array($scope->attributes)) {\n                $newConfig += $scope->attributes;\n            }\n\n            $scope->useConfig($newConfig)->displayAs('widget');\n\n            // Create filter widget instance and bind to controller\n            $this->makeFilterScopeWidget($scope)->bindToController();\n        }\n    }\n\n    /**\n     * processAutoOrder applies a default sort order to all scopes\n     */\n    protected function processAutoOrder(array &$scopes)\n    {\n        // Build before and after map\n        $beforeMap = $afterMap = [];\n        foreach ($scopes as $scope) {\n            if ($scope->after && isset($scopes[$scope->after])) {\n                $afterMap[$scope->scopeName] = $scopes[$scope->after]->scopeName;\n            }\n            elseif ($scope->before && isset($scopes[$scope->before])) {\n                $beforeMap[$scope->scopeName] = $scopes[$scope->before]->scopeName;\n            }\n        }\n\n        // Apply incremental default orders\n        $orderCount = 0;\n        foreach ($scopes as $scope) {\n            if (\n                $scope->order !== -1 ||\n                isset($afterMap[$scope->scopeName]) ||\n                isset($beforeMap[$scope->scopeName])\n            ) {\n                continue;\n            }\n            $scope->order = ($orderCount += 100);\n        }\n\n        // Apply before and after\n        foreach ($beforeMap as $from => $to) {\n            $scopes[$from]->order = $scopes[$to]->order - 1;\n        }\n        foreach ($afterMap as $from => $to) {\n            $scopes[$from]->order = $scopes[$to]->order + 1;\n        }\n\n        // Sort scopes\n        uasort($scopes, static function ($a, $b) {\n            return $a->order - $b->order;\n        });\n    }\n\n    /**\n     * processLegacyDefinitions applies deprecated definitions for backwards compatibility\n     */\n    protected function processLegacyDefinitions(array $scopes): void\n    {\n        foreach ($scopes as $scope) {\n            if ($scope->type === 'date') {\n                $this->refitLegacyDateScope($scope);\n            }\n            elseif ($scope->type === 'number') {\n                $this->refitLegacyNumberScope($scope);\n            }\n            elseif ($scope->type === 'numberrange') {\n                $this->refitLegacyNumberRangeScope($scope);\n            }\n            elseif ($scope->type === 'daterange') {\n                $this->refitLegacyDateRangeScope($scope);\n            }\n            elseif ($scope->type === 'text') {\n                $this->refitLegacyTextScope($scope);\n            }\n            elseif ($scope->type === 'clear') {\n                $this->refitLegacyClearScope($scope);\n            }\n            elseif ($scope->type === 'group') {\n                $this->refitLegacyGroupScope($scope);\n            }\n            else {\n                $this->refitLegacyDefaultScope($scope);\n            }\n        }\n    }\n\n    /**\n     * makeNestedFilterModel resolves a relation based on a nested field name\n     * E.g: model[relation1][relation2] → $model->relation1()->relation2()\n     */\n    protected function makeNestedFilterModel($model, $field)\n    {\n        if (strpos($field, '[') === false || strpos($field, ']') === false) {\n            return [$model, $field];\n        }\n\n        $parts = HtmlHelper::nameToArray($field);\n        $lastField = array_pop($parts);\n        while ($rootField = array_shift($parts)) {\n            $model = $model->$rootField()->getRelated();\n        }\n\n        return [$model, $lastField];\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/assets/css/filter.css",
    "content": ".control-filter .form-check .form-check-input{position:relative;top:1px}.control-filter .form-check label{color:var(--bs-secondary-color);font-size:14px}.control-filter>.filter-group>.filter-scope.form-check,.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check{padding-left:29px}.control-filter>.filter-group>.filter-scope.form-check,.control-filter>.filter-group>.filter-scope.form-check label,.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check,.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check label{margin-bottom:0}.control-filter>.filter-group>.filter-scope.form-check:after,.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check:after{content:\"\"}.control-filter>.filter-group>.filter-scope.active.form-check label,.control-filter>.filter-group>.filter-scope.scope-checkbox.active.form-check label,.control-filter>.filter-group>.filter-scope.scope-checkbox:hover.form-check label,.control-filter>.filter-group>.filter-scope:hover.form-check label{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope.dropdown,.control-filter>.filter-group>.filter-scope.scope-dropdown{padding:8px 0 4px}.control-filter>.filter-group>.filter-scope.dropdown:after,.control-filter>.filter-group>.filter-scope.scope-dropdown:after{content:\"\"}.control-filter>.filter-group>.filter-scope.dropdown .select2-container,.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container{display:inline-block;position:relative;top:-2px;width:100%}.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection,.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection{background-color:transparent;border:none;border-radius:0;box-shadow:none;font-size:12px;height:29px;line-height:29px;padding:0 3px 0 12px}.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection.select2-default,.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection.select2-default{font-weight:400}.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection:focus-visible,.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection:focus-visible{outline:1px auto}.control-filter>.filter-group>.filter-scope.dropdown .select2-container .loading-indicator>span,.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .loading-indicator>span{top:15px}.control-filter>.filter-group>.filter-scope.dropdown .select2-container.select2-container--open,.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container.select2-container--open{border:none;border-radius:0}.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection__arrow{font-size:14px;right:10px;top:1px}.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection__rendered{color:var(--bs-secondary-color);font-size:14px;padding:0 28px 0 0}.control-filter>.filter-group>.filter-scope.dropdown.active .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.dropdown.active .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.dropdown:hover .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.dropdown:hover .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.scope-dropdown.active .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.scope-dropdown.active .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.scope-dropdown:hover .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.scope-dropdown:hover .select2-selection__rendered{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope.scope-inline{align-items:center;display:flex;padding:0}.control-filter>.filter-group>.filter-scope.scope-inline:after{content:\"\"}.control-filter-popover .filter-search{min-height:36px;position:relative}.control-filter-popover .filter-search input{background:transparent!important;border:none;border-bottom:1px solid var(--bs-border-color);border-bottom-left-radius:0;border-bottom-right-radius:0;box-shadow:none;height:auto;padding-bottom:6px;padding-right:35px;padding-top:6px}.control-filter-popover .filter-search .close{display:none}.control-filter-popover .filter-search .filter-active-items,.control-filter-popover .filter-search .filter-items{color:var(--bs-secondary-color);font-size:13px}.control-filter-popover .filter-search .filter-active-items li,.control-filter-popover .filter-search .filter-active-items ul,.control-filter-popover .filter-search .filter-items li,.control-filter-popover .filter-search .filter-items ul{list-style-type:none;margin:0;padding:0}.control-filter-popover .filter-search .filter-active-items li,.control-filter-popover .filter-search .filter-items li{transition:color .6s,background-color .3s}.control-filter-popover .filter-search .filter-active-items a,.control-filter-popover .filter-search .filter-items a{color:var(--bs-secondary-color);display:block;padding:7px 9px;text-decoration:none}.control-filter-popover .filter-search .filter-active-items a:before,.control-filter-popover .filter-search .filter-items a:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;border-radius:100px;display:inline-block;font-family:octo-icon!important;font-style:normal;font-variant:normal;font-weight:400;line-height:1;margin-right:4px;position:relative;text-align:center;text-transform:none;top:1px;vertical-align:baseline}.control-filter-popover .filter-search .filter-active-items a:hover,.control-filter-popover .filter-search .filter-items a:hover{background-color:var(--oc-selection);color:#fff}.control-filter-popover .filter-search .filter-items{max-height:200px;overflow:auto}.control-filter-popover .filter-search .filter-items a:before{content:\"\\f067\"}.control-filter-popover .filter-search .filter-items li.loading{padding:7px}.control-filter-popover .filter-search .filter-items li.loading>span{animation:spin 1s linear infinite;background-image:url(../../../../assets/images/loader-transparent.svg);background-position:50% 50%;background-size:20px 20px;display:block;height:20px;width:20px}.control-filter-popover .filter-search .filter-items li.animate-enter{animation:fadeInUp .3s}.control-filter-popover .filter-search .filter-buttons{border-top:none}.control-filter-popover .filter-search .filter-active-items{border-top:1px solid var(--bs-border-color)}.control-filter-popover .filter-search .filter-active-items a{color:var(--bs-body-color);font-weight:600}.control-filter-popover .filter-search .filter-active-items a:before{background-color:var(--bs-secondary-bg);color:var(--bs-body-color);content:\"\\e93e\";left:-1px}.control-filter-popover .filter-search .filter-active-items a:hover:before{background-color:#fff;color:#c63e26}.control-filter-popover .filter-search .filter-active-items li.animate-enter{animation:fadeInDown .3s}.control-filter-popover .filter-search .filter-active-items li:last-child{border-bottom:1px solid var(--bs-border-color)}.control-filter-popover .filter-box .filter-facet{display:flex;padding:10px 5px}.control-filter-popover .filter-box .filter-facet .facet-item{line-height:1.8;padding-left:5px;padding-right:5px;white-space:nowrap}.control-filter-popover .filter-box .filter-facet .facet-item>span{color:var(--bs-secondary-color);font-size:12px}.control-filter-popover .filter-box .filter-facet .facet-item.is-grow{flex-grow:1}.control-filter-popover .filter-box .filter-facet+.filter-facet{padding-top:0}.control-filter{background-color:var(--bs-body-bg);border-bottom:1px solid var(--bs-border-color);border-top:1px solid var(--bs-border-color);color:var(--bs-secondary-color);font-size:14px;padding:0 10px}.control-filter a{color:var(--bs-secondary-color);text-decoration:none}.control-filter>.filter-setup{padding:6px 0}.control-filter>.filter-setup>a>span{border-radius:3px;color:var(--oc-toolbar-color);display:block;height:24px;margin-left:-2px;margin-right:-2px;text-align:center;width:24px}.control-filter>.filter-setup>a>span>i{font-size:20px;position:relative;top:2px}.control-filter>.filter-setup>a:hover>span{background:var(--oc-toolbar-hover-bg);color:var(--oc-toolbar-hover-color)}.control-filter>.filter-group{display:inline-block;vertical-align:middle}.control-filter>.filter-group>.filter-scope{display:block;padding:8px}.control-filter>.filter-group>.filter-scope .filter-label{margin-right:5px}.control-filter>.filter-group>.filter-scope .filter-setting{display:inline-block;margin-right:5px;transition:color .6s}.control-filter>.filter-group>.filter-scope.loading-indicator-container.in-progress{cursor:default;pointer-events:none}.control-filter>.filter-group>.filter-scope.loading-indicator-container.in-progress .loading-indicator{background:transparent}.control-filter>.filter-group>.filter-scope.loading-indicator-container.in-progress .loading-indicator>span{background-color:var(--bs-body-bg);background-size:15px 15px;border-radius:50%;height:20px;left:unset;margin-top:0;right:0;top:10px;width:20px}.control-filter>.filter-group>.filter-scope:after{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f107\";font-family:octo-icon!important;font-size:14px;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.control-filter>.filter-group>.filter-scope.active .filter-setting{background-color:var(--bs-success);border-radius:4px;color:#fff;padding-left:5px;padding-right:5px;transition:color 1s,background-color 1s}.control-filter>.filter-group>.filter-scope.active,.control-filter>.filter-group>.filter-scope.active .filter-label,.control-filter>.filter-group>.filter-scope:hover,.control-filter>.filter-group>.filter-scope:hover .filter-label{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope.active.active .filter-setting,.control-filter>.filter-group>.filter-scope:hover.active .filter-setting{background-color:var(--bs-success)}.control-filter>.filter-group>.filter-has-popover{display:inline-block;padding:10px}.control-filter>.filter-group>.filter-has-popover .filter-setting{display:inline-block;transition:color .6s}.control-filter>.filter-group>.filter-has-popover:after{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\f107\";font-family:octo-icon!important;font-size:14px;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.control-filter>.filter-group>.filter-has-popover.active .filter-setting{background-color:var(--bs-success);border-radius:4px;color:#fff;padding-left:5px;padding-right:5px;transition:color 1s,background-color 1s}.control-filter>.filter-group>.filter-has-popover:hover{color:#000}.control-filter>.filter-group>.filter-has-popover:hover .filter-label{color:var(--bs-secondary-color)}.control-filter>.filter-group>.filter-has-popover:hover.active .filter-setting{background-color:#79c035}.control-filter.is-loading{cursor:wait}.control-filter.is-loading>.filter-group{opacity:.7;pointer-events:none}.control-filter.is-loading>.filter-setup>a{opacity:0}.control-filter.is-loading>.filter-setup:after{animation:spin 1s linear infinite;background-image:url(../../../../../backend/assets/images/loader-transparent.svg);background-position:50% 50%;background-size:20px 20px;content:\" \";display:block;height:20px;left:50%;margin-left:-10px;margin-top:-10px;position:absolute;top:50%;width:20px}.control-filter-popover{min-width:275px}.control-filter-popover>.loading-indicator-container>.loading-indicator{border-radius:4px}.control-filter-popover>.loading-indicator-container>.loading-indicator>span{left:10px}.control-filter-popover input[type=number]{-moz-appearance:textfield}.control-filter-popover input[type=number]::-webkit-inner-spin-button,.control-filter-popover input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.control-filter-popover .filter-buttons{border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top:1px solid var(--bs-border-color);display:flex;padding:10px}.control-filter-popover .filter-buttons>div{flex-grow:1}.control-filter-popover .filter-buttons>.btn{text-align:center}\n"
  },
  {
    "path": "modules/backend/widgets/filter/assets/js/october.filter.js",
    "content": "/*\n * Filter Widget\n *\n * Data attributes:\n * - data-behavior=\"filter\" - enables the filter plugin\n *\n * Dependencies:\n * - October Popover (october.popover.js)\n *\n */\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype;\n\n    var FilterWidget = function (element, options) {\n        this.$el = $(element);\n        this.options = options || {};\n        this.popoverContent = {};\n        this.$activeScope = null;\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        Base.call(this);\n        this.init();\n    }\n\n    FilterWidget.prototype = Object.create(BaseProto);\n    FilterWidget.prototype.constructor = FilterWidget;\n\n    FilterWidget.prototype.init = function() {\n        oc.Events.on(this.$el.get(0), 'change', '.filter-scope select', this.proxy(this.onToggleDropdown));\n        this.$el.on('change', '.filter-scope input[type=\"checkbox\"]', this.proxy(this.onToggleCheckbox));\n        this.$el.on('click', 'a.filter-scope', this.proxy(this.onClickScopePopover));\n        this.$el.on('hide.oc.popover', 'a.filter-scope', this.proxy(this.onHideScopePopover));\n        this.$el.on('click', '.filter-scope [data-filter-action=\"apply\"]', this.proxy(this.onClickInlineScopeApply));\n        this.$el.on('click', '.filter-scope [data-filter-action=\"clear\"]', this.proxy(this.onClickInlineScopeClear));\n\n        this.bindCheckboxes();\n        this.preloadContent();\n    }\n\n    FilterWidget.prototype.dispose = function() {\n        oc.Events.off(this.$el.get(0), 'change', '.filter-scope select', this.proxy(this.onToggleDropdown));\n        this.$el.off('change', '.filter-scope input[type=\"checkbox\"]', this.proxy(this.onToggleCheckbox));\n        this.$el.off('click', 'a.filter-scope', this.proxy(this.onClickScopePopover));\n        this.$el.off('hide.oc.popover', 'a.filter-scope', this.proxy(this.onHideScopePopover));\n        this.$el.off('click', '.filter-scope [data-filter-action=\"apply\"]', this.proxy(this.onClickInlineScopeApply));\n        this.$el.off('click', '.filter-scope [data-filter-action=\"clear\"]', this.proxy(this.onClickInlineScopeClear));\n\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n        this.$el.removeData('oc.filterwidget');\n\n        this.$el = null;\n        this.options = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    FilterWidget.prototype.preloadContent = function() {\n        try {\n            var self = this;\n            this.$el.request(this.options.updateHandler, {\n                data: {\n                    preload: true\n                },\n                success: function(data) {\n                    self.popoverContent = data.popoverContent;\n                },\n                error: function() {}\n            })\n        }\n        catch (e) {}\n    }\n\n    //\n    // Popover Scope\n    //\n\n    FilterWidget.prototype.initContainer = function(el) {\n        $(el).on('click', '[data-filter-action=\"apply\"]', this.proxy(this.onClickScopeApply));\n        $(el).on('click', '[data-filter-action=\"clear\"]', this.proxy(this.onClickScopeClear));\n    }\n\n    FilterWidget.prototype.disposeContainer = function(el) {\n        $(el).off('click', '[data-filter-action=\"apply\"]', this.proxy(this.onClickScopeApply));\n        $(el).off('click', '[data-filter-action=\"clear\"]', this.proxy(this.onClickScopeClear));\n    }\n\n    FilterWidget.prototype.onClickScopePopover = function(ev) {\n        var $el = $(ev.target),\n            $scope = $el.closest('.filter-scope');\n\n        // Second click closes the filter scope\n        if ($scope.hasClass('filter-scope-open')) {\n            return;\n        }\n\n        $scope.addClass('filter-scope-open');\n\n        // Hide any old scopes\n        if (this.$activeScope) {\n            this.hidePopover(this.$activeScope);\n        }\n\n        this.$activeScope = $scope;\n\n        this.showPopover($scope);\n    }\n\n    FilterWidget.prototype.onClickScopeApply = function(ev) {\n        ev.preventDefault();\n\n        var $el = $(ev.target),\n            $form = $el.closest('form');\n\n        this.submitUpdate($form, this.$activeScope);\n\n        this.hidePopover(this.$activeScope);\n    }\n\n    FilterWidget.prototype.onClickScopeClear = function(ev) {\n        ev.preventDefault();\n\n        var $el = $(ev.target),\n            $form = $el.closest('form');\n\n        this.submitUpdate($form, this.$activeScope, {\n            clearScope: true\n        });\n\n        this.hidePopover(this.$activeScope);\n    }\n\n    FilterWidget.prototype.onHideScopePopover = function(ev) {\n        var $el = $(ev.target),\n            $scope = $el.closest('.filter-scope');\n\n        this.$activeScope = null;\n\n        setTimeout(function() {\n            $scope.removeClass('filter-scope-open');\n        }, 200);\n    }\n\n    FilterWidget.prototype.hidePopover = function($scope) {\n        var scopeName = $scope.data('scope-name');\n        this.popoverContent[scopeName] = null;\n\n        $scope.ocPopover('hide');\n    }\n\n    FilterWidget.prototype.showPopover = function($scope) {\n        var self = this,\n            scopeName = $scope.data('scope-name'),\n            container = false;\n\n        // If the filter is running in a modal, popovers should be\n        // attached to the modal container. This prevents z-index issues.\n        var modalParent = $scope.closest('.modal');\n        if (modalParent.length > 0) {\n            container = modalParent[0];\n        }\n\n        var data = {\n            scopeName: scopeName\n        };\n\n        $scope.data('oc.popover', null);\n\n        $scope.ocPopover({\n            content: Mustache.render(self.getPopoverTemplate(), data),\n            modal: false,\n            highlightModalTarget: true,\n            closeOnPageClick: true,\n            placement: 'bottom',\n            container: container,\n            onCheckDocumentClickTarget: function (target) {\n                return self.onCheckDocumentClickTargetDatePicker(target)\n            }\n        });\n\n        var $container = $scope.ocPopover('getContainer'),\n            $form = $('form:first', $container);\n\n        if (!this.popoverContent) {\n            this.popoverContent = {};\n        }\n\n        if (this.popoverContent[scopeName]) {\n            self.setPopoverContent($container, this.popoverContent[scopeName]);\n            oc.Events.dispatch('render');\n        }\n        else {\n            $form.request(this.options.loadHandler, {\n                success: function(data) {\n                    this.success(data);\n                    self.setPopoverContent($container, data.result);\n                    self.popoverContent[scopeName] = data.result;\n                }\n            });\n        }\n\n        // Bind events\n        this.initContainer($container);\n    }\n\n    FilterWidget.prototype.setPopoverContent = function($container, html) {\n        $('.control-filter-popover', $container).html(html);\n    }\n\n    //\n    // Inline Scope\n    //\n\n    FilterWidget.prototype.onClickInlineScopeApply = function(ev) {\n        ev.preventDefault();\n\n        var $el = $(ev.target),\n            $scope = $el.closest('.filter-scope');\n\n        this.submitUpdate(this.$el, $scope, oc.serializeJSON($scope.get(0)));\n\n        if (this.$activeScope) {\n            this.hidePopover(this.$activeScope);\n        }\n    }\n\n    FilterWidget.prototype.onClickInlineScopeClear = function(ev) {\n        ev.preventDefault();\n\n        var $el = $(ev.target),\n            $scope = $el.closest('.filter-scope');\n\n        this.submitUpdate(this.$el, $scope, {\n            clearScope: true\n        });\n\n        if (this.$activeScope) {\n            this.hidePopover(this.$activeScope);\n        }\n    }\n\n    //\n    // Dropdowns\n    //\n\n    FilterWidget.prototype.onToggleDropdown = function(ev) {\n        var $el = $(ev.target),\n            $scope = $el.closest('.filter-scope');\n\n        // Hide any old scopes\n        if (this.$activeScope) {\n            this.hidePopover(this.$activeScope);\n        }\n\n        this.submitUpdate(this.$el, $scope, {\n            value: $el.val()\n        });\n    }\n\n    //\n    // Checkboxes\n    //\n\n    FilterWidget.prototype.bindCheckboxes = function() {\n        $('.filter-scope input[type=\"checkbox\"]', this.$el).each(function() {\n            $(this).closest('.filter-scope').toggleClass('active', $(this).is(':checked'));\n        });\n    }\n\n    FilterWidget.prototype.onToggleCheckbox = function(ev) {\n        var $el = $(ev.target),\n            $scope = $el.closest('.filter-scope');\n\n        // Hide any old scopes\n        if (this.$activeScope) {\n            this.hidePopover(this.$activeScope);\n        }\n\n        if ($scope.hasClass('is-indeterminate')) {\n            this.switchToggle($el);\n        }\n        else {\n            this.checkboxToggle($el);\n        }\n    }\n\n    FilterWidget.prototype.checkboxToggle = function($el) {\n        var isChecked = $el.is(':checked'),\n            $scope = $el.closest('.filter-scope');\n\n        this.submitUpdate(this.$el, $scope, {\n            value: isChecked\n        });\n\n        $scope.toggleClass('active', isChecked);\n    }\n\n    FilterWidget.prototype.switchToggle = function($el) {\n        var switchValue = $el.data('checked'),\n            $scope = $el.closest('.filter-scope');\n\n        this.submitUpdate(this.$el, $scope, {\n            value: switchValue\n        });\n\n        $scope.toggleClass('active', !!switchValue);\n    }\n\n    //\n    // AJAX\n    //\n\n    FilterWidget.prototype.submitUpdate = function($el, $scope, data) {\n        if (!this.options.updateHandler) {\n            return;\n        }\n\n        var scopeName = $scope.data('scope-name');\n        this.$el.addClass('is-loading');\n\n        // Prepare data with known values\n        if (!data) {\n            data = {};\n        }\n        data.scopeName = scopeName;\n\n        // Submit data\n        var submitData = {\n            data: data,\n        };\n\n        if (this.options.pageName) {\n            submitData.query = {\n                [this.options.pageName]: null\n            };\n        }\n\n        // Submit request\n        $el.request(this.options.updateHandler, submitData)\n            .always(() => {\n                this.$el.removeClass('is-loading');\n            })\n            .done((data) => {\n                // Trigger dependsOn updates on successful requests\n                this.$el\n                    .find('[data-scope-name=\"'+scopeName+'\"]')\n                    .trigger('change.oc.filterScope');\n            });\n    }\n\n    FilterWidget.prototype.updatePopoverContent = function(content) {\n        var self = this;\n        $.each(content, function(key, val) {\n            self.popoverContent[key] = val;\n        });\n    }\n\n    FilterWidget.prototype.getPopoverTemplate = function() {\n        return $(this.options.popoverTemplate).html();\n    }\n\n    FilterWidget.prototype.onCheckDocumentClickTargetDatePicker = function (target) {\n        var $target = $(target);\n\n        // If the click happens on a pikaday element, do not close the popover\n        return $target.hasClass('pika-next') ||\n            $target.hasClass('pika-prev') ||\n            $target.hasClass('pika-select') ||\n            $target.hasClass('pika-button') ||\n            $target.parents('.pika-table').length ||\n            $target.parents('.pika-title').length;\n    }\n\n    FilterWidget.DEFAULTS = {\n        popoverTemplate: null,\n        optionsHandler: null,\n        updateHandler: null,\n        loadHandler: null,\n        pageName: null\n    }\n\n    // FILTER WIDGET PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.filterWidget\n\n    $.fn.filterWidget = function (option) {\n        var args = arguments,\n            result;\n\n        this.each(function () {\n            var $this   = $(this);\n            var data    = $this.data('oc.filterwidget');\n            var options = $.extend({}, FilterWidget.DEFAULTS, $this.data(), typeof option == 'object' && option);\n            if (!data) $this.data('oc.filterwidget', (data = new FilterWidget(this, options)));\n            if (typeof option == 'string') result = data[option].call($this);\n            if (typeof result != 'undefined') return false;\n        })\n\n        return result ? result : this;\n    }\n\n    $.fn.filterWidget.Constructor = FilterWidget;\n\n    // FILTER WIDGET NO CONFLICT\n    // =================\n\n    $.fn.filterWidget.noConflict = function () {\n        $.fn.filterWidget = old;\n        return this;\n    }\n\n    // FILTER WIDGET DATA-API\n    // ==============\n\n    $(document).render(function(){\n        $('[data-control=\"filterwidget\"]').filterWidget();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/filter/assets/less/filter.box.less",
    "content": ".control-filter-popover .filter-box {\n\n    .filter-facet {\n        padding: 10px 5px;\n        display: flex;\n\n        .facet-item {\n            white-space: nowrap;\n            padding-left: 5px;\n            padding-right: 5px;\n            line-height: 1.8;\n\n            > span {\n                font-size: @font-size-small;\n                color: @color-filter-text;\n            }\n\n            &.is-grow {\n                flex-grow: 1;\n            }\n        }\n    }\n\n    .filter-facet + .filter-facet {\n        padding-top: 0;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/assets/less/filter.checkbox.less",
    "content": ".control-filter {\n    .form-check {\n        .form-check-input {\n            position: relative;\n            top: 1px;\n        }\n        label {\n            font-size: @font-size-base;\n            color: @color-filter-text;\n        }\n    }\n\n    > .filter-group > .filter-scope.scope-checkbox,\n    // @deprecated\n    > .filter-group > .filter-scope {\n        &.form-check {\n            padding-left: 29px;\n\n            &, label {\n                margin-bottom: 0;\n            }\n\n            &:after {\n                content: '';\n            }\n        }\n\n        &:hover, &.active {\n            &.form-check label {\n                color: @color-filter-text-active;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/assets/less/filter.dropdown.less",
    "content": ".control-filter {\n    > .filter-group > .filter-scope.scope-dropdown,\n    // @deprecated\n    > .filter-group > .filter-scope.dropdown {\n        padding: 8px 0 4px;\n\n        &:after {\n            content: '';\n        }\n\n        .select2-container {\n            width: 100%;\n            display: inline-block;\n            position: relative;\n            top: -2px;\n\n            .select2-selection {\n                height: 29px;\n                line-height: 29px;\n                padding: 0 3px 0 12px;\n                border: none;\n                font-size: 12px;\n                border-radius: 0;\n                box-shadow: none;\n                background-color: transparent;\n\n                &.select2-default {\n                    font-weight: normal;\n                }\n\n                &:focus-visible {\n                    outline: auto 1px;\n                }\n            }\n\n            .loading-indicator {\n                > span {\n                    top: 15px;\n                }\n            }\n\n            &.select2-container--open {\n                border-radius: 0;\n                border: none;\n            }\n\n            .select2-selection__arrow {\n                font-size: @font-size-base;\n                top: 1px;\n                right: 10px;\n            }\n\n            .select2-selection__rendered {\n                padding: 0 28px 0 0;\n                font-size: @font-size-base;\n                color: @color-filter-text;\n            }\n        }\n\n        &:hover, &.active {\n            .select2-selection__arrow,\n            .select2-selection__rendered {\n                color: @color-filter-text-active;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/assets/less/filter.group.less",
    "content": "\n.control-filter-popover .filter-search {\n    min-height: 36px;\n    position: relative;\n\n    // &:after {\n    //     .icon-OctoFont();\n    //     position: absolute;\n    //     width: 16px;\n    //     height: 16px;\n    //     content: @icon-search;\n    //     right: 10px;\n    //     top: 10px;\n    //     font-size: 16px;\n    // }\n\n    input {\n        height: auto;\n        border: none;\n        border-bottom: 1px solid @color-filter-border;\n        .border-bottom-radius(0);\n        box-shadow: none;\n        background: transparent !important;\n        padding-top: 6px;\n        padding-bottom: 6px;\n        padding-right: 35px;\n    }\n\n    .close {\n        display: none;\n    }\n\n    .filter-items, .filter-active-items {\n        color: @color-filter-text;\n        font-size: @font-size-base - 1;\n\n        ul, li {\n            list-style-type: none;\n            margin:0;\n            padding:0;\n        }\n\n        li {\n            transition: color 0.6s, background-color 0.3s;\n        }\n\n        a {\n            text-decoration: none;\n            color: @color-filter-text;\n            display: block;\n            padding: 7px 9px;\n\n            &:before {\n                .icon-OctoFont();\n                margin-right: 4px;\n                position: relative;\n                top: 1px;\n                display: inline-block;\n                vertical-align: baseline;\n                text-align: center;\n                border-radius: 100px;\n            }\n\n            &:hover {\n                background-color: @color-filter-items-bg-hover;\n                color: white;\n            }\n        }\n    }\n\n    .filter-items {\n        max-height: 200px;\n        overflow: auto;\n        a:before {\n            content: @icon-plus;\n        }\n\n        li {\n            &.loading {\n                padding: 7px;\n\n                > span {\n                    --loader-size: 20px;\n                    display: block;\n                    width: var(--loader-size);\n                    height: var(--loader-size);\n                    border: 2px solid var(--oc-primary-border);\n                    border-top-color: var(--oc-accent);\n                    border-radius: 50%;\n                    animation: spin 0.8s linear infinite;\n                }\n            }\n\n            &.animate-enter { animation: fadeInUp .3s; }\n        }\n    }\n\n    .filter-buttons {\n        border-top: none;\n    }\n\n    .filter-active-items {\n        border-top: 1px solid @color-filter-border;\n        a {\n            font-weight: 600;\n            color: var(--bs-body-color);\n\n            &:before {\n                background-color: @secondary-bg;\n                color: @text-color;\n                content: @icon-cross;\n                left: -1px;\n            }\n\n            &:hover:before {\n                color: #c63e26;\n                background-color: white;\n            }\n        }\n\n        li.animate-enter {\n            animation: fadeInDown .3s;\n        }\n\n        li:last-child {\n            border-bottom: 1px solid @color-filter-border;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/assets/less/filter.inline.less",
    "content": ".control-filter {\n    > .filter-group > .filter-scope.scope-inline {\n        padding: 0;\n        display: flex;\n        align-items: center;\n\n        &:after {\n            content: '';\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/assets/less/filter.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n//\n// Filters\n// --------------------------------------------------\n\n@color-filter-text:            var(--bs-secondary-color);\n@color-filter-text-active:     var(--bs-emphasis-color);\n@color-filter-border:          var(--bs-border-color);\n@color-filter-bg:              var(--bs-body-bg);\n@color-filter-bg-active:       var(--bs-success);\n@color-filter-items-bg-hover:  var(--oc-selection);\n\n//\n// Filters\n// --------------------------------------------------\n\n@import \"filter.checkbox.less\";\n@import \"filter.dropdown.less\";\n@import \"filter.inline.less\";\n@import \"filter.group.less\";\n@import \"filter.box.less\";\n\n.control-filter {\n    padding: 0 (@padding-standard / 2);\n    color: @color-filter-text;\n    background-color: @color-filter-bg;\n    border-top: 1px solid @color-filter-border;\n    border-bottom: 1px solid @color-filter-border;\n    font-size: @font-size-base;\n\n    a {\n        text-decoration: none;\n        color: @color-filter-text;\n    }\n\n    > .filter-setup {\n        padding: 6px 0;\n\n        > a {\n            > span {\n                margin-left: -2px;\n                margin-right: -2px;\n                display: block;\n                color: @toolbar-color;\n                width: 24px;\n                height: 24px;\n                text-align: center;\n                border-radius: 3px;\n                > i {\n                    position: relative;\n                    top: 2px;\n                    font-size: 20px;\n                }\n            }\n\n            &:hover > span {\n                color: @toolbar-hover-color;\n                background: @toolbar-hover-bg;\n            }\n        }\n    }\n\n    > .filter-group {\n        display: inline-block;\n        vertical-align: middle;\n    }\n\n    > .filter-group > .filter-scope {\n        padding: 8px;\n        display: block;\n\n        .filter-label {\n            margin-right: 5px;\n        }\n\n        .filter-setting {\n            display: inline-block;\n            margin-right: 5px;\n            .transition(color 0.6s);\n        }\n\n        &.loading-indicator-container.in-progress {\n            pointer-events: none;\n            cursor: default;\n\n            .loading-indicator {\n                background: transparent;\n\n                > span {\n                    left: unset;\n                    right: 0;\n                    top: 10px;\n                    background-color: @color-filter-bg;\n                    border-radius: 50%;\n                    margin-top: 0;\n                    width: 20px;\n                    height: 20px;\n                    background-size: 15px 15px;\n                }\n            }\n        }\n\n        &:after {\n            font-size: 14px;\n            .icon(@icon-angle-down);\n        }\n\n        &.active {\n            .filter-setting {\n                padding-left: 5px;\n                padding-right: 5px;\n                color: #FFF;\n                background-color: @color-filter-bg-active;\n                .border-radius(4px);\n                .transition(~'color 1s, background-color 1s');\n            }\n        }\n\n        &:hover, &.active {\n            color: @color-filter-text-active;\n\n            .filter-label {\n                color: @color-filter-text-active;\n            }\n\n            &.active .filter-setting {\n                background-color: @color-filter-bg-active;\n            }\n        }\n    }\n\n    > .filter-group > .filter-has-popover {\n        display: inline-block;\n        padding: (@padding-standard / 2);\n        .filter-setting {\n            display: inline-block;\n            .transition(color 0.6s);\n        }\n\n        &:after {\n            font-size: 14px;\n            .icon(@icon-angle-down);\n        }\n\n        &.active {\n            .filter-setting {\n                padding-left: 5px;\n                padding-right: 5px;\n                color: #FFF;\n                background-color: @color-filter-bg-active;\n                .border-radius(4px);\n                transition: color 1s, background-color 1s;\n            }\n        }\n\n        &:hover {\n            color: #000;\n            .filter-label {\n                color: @color-filter-text;\n            }\n            &.active .filter-setting {\n                background-color: darken(#86cB43, 5%);\n            }\n        }\n    }\n}\n\n.control-filter.is-loading {\n    cursor: wait;\n\n    > .filter-group {\n        pointer-events: none;\n        opacity: .7;\n    }\n\n    > .filter-setup {\n        > a {\n            opacity: 0;\n        }\n\n        &:after {\n            --loader-size: 20px;\n            content: '';\n            position: absolute;\n            left: 50%;\n            top: 50%;\n            width: var(--loader-size);\n            height: var(--loader-size);\n            margin-top: calc(var(--loader-size) / -2);\n            margin-left: calc(var(--loader-size) / -2);\n            border: 2px solid var(--oc-primary-border);\n            border-top-color: var(--oc-accent);\n            border-radius: 50%;\n            animation: spin 0.8s linear infinite;\n        }\n    }\n}\n\n// .layout-row > .control-filter {\n//     margin: 0 @padding-standard;\n//     background-color: transparent;\n//     border-top: none;\n// }\n\n// @media (max-width: @screen-xs-max) {\n//     .layout-row > .control-filter {\n//         margin: 0;\n//     }\n// }\n\n.control-filter-popover {\n    min-width: 275px;\n\n    > .loading-indicator-container > .loading-indicator {\n        border-radius: 4px;\n\n        > span {\n            left: 10px;\n        }\n    }\n\n    // Hide spinner on numbers\n    input[type=\"number\"] {\n        -moz-appearance: textfield;\n    }\n\n    input[type=\"number\"]::-webkit-inner-spin-button,\n    input[type=\"number\"]::-webkit-outer-spin-button {\n        -webkit-appearance: none;\n        margin: 0;\n    }\n\n    .filter-buttons {\n        border-top: 1px solid @color-filter-border;\n        padding: 10px;\n        display: flex;\n        border-bottom-left-radius: 5px;\n        border-bottom-right-radius: 5px;\n\n        > div {\n            flex-grow: 1;\n        }\n\n        > .btn {\n            text-align: center;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_filter-container.php",
    "content": "<?= $this->makePartial('filter_menu') ?>\n\n<?= $this->makePartial('filter_scopes', ['scopes' => $scopes]) ?>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_filter.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"control-filter\"\n    data-control=\"filterwidget\"\n    data-popover-template=\"#<?= $this->getId('popoverTemplate') ?>\"\n    data-update-handler=\"<?= $this->getEventHandler('onFilterUpdate') ?>\"\n    data-load-handler=\"<?= $this->getEventHandler('onLoadFilterForm') ?>\"\n    <?php if ($pageName !== '_page'): ?>data-page-name=\"<?= $pageName ?>\"<?php endif ?>\n>\n    <?= $this->makePartial('filter-container') ?>\n</div>\n\n<!-- Popover Template -->\n<?= $this->makePartial('popover_template') ?>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_filter_menu.php",
    "content": "<div\n    class=\"filter-group filter-setup dropdown\">\n    <a href=\"javascript:;\"\n        data-toggle=\"dropdown\"\n        title=\"<?= __(\"Filter Setup\") ?>\">\n        <span><i class=\"ph ph-funnel-simple\"></i></span>\n    </a>\n    <ul class=\"dropdown-menu\" role=\"menu\">\n        <li role=\"presentation\">\n            <a\n                data-filter-clear\n                role=\"menuitem\"\n                href=\"javascript:;\"\n                data-request=\"<?= $this->getEventHandler('onFilterClearAll') ?>\"\n                data-stripe-load-indicator\n                tabindex=\"-1\">\n                <i class=\"icon-eraser\"></i>\n                <?= __(\"Clear Filters\") ?>\n            </a>\n        </li>\n    </ul>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_filter_scopes.php",
    "content": "<?php foreach ($scopes as $scope): ?>\n    <?= $this->makePartial('scope-container', ['scope' => $scope]) ?>\n<?php endforeach ?>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_form_widget.php",
    "content": "<!-- Widget -->\n<?php\n    $widget = $this->makeFilterScopeWidget($scope);\n?>\n<?= $widget->renderForm() ?>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_popover_template.php",
    "content": "<script type=\"text/template\" id=\"<?= $this->getId('popoverTemplate') ?>\">\n    <form data-request-parent-form=\"#<?= $this->getId() ?>\">\n        <input type=\"hidden\" name=\"scopeName\" value=\"{{ scopeName }}\" />\n        <div class=\"control-filter-popover control-filter-box-popover\">\n            <div class=\"loading-indicator-container\">\n                <div class=\"loading-indicator size-small\">\n                    <span></span>\n                </div>\n            </div>\n        </div>\n    </form>\n</script>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_scope-container.php",
    "content": "<div\n    class=\"filter-group\"\n    id=\"<?= $scope->getId('group') ?>\"><?=\n    /* Must be on the same line for :empty selector */\n    trim($this->makePartial('scope', ['scope' => $scope]))\n?></div>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_scope.php",
    "content": "<?php if (!$scope->hidden): ?>\n    <?= $this->renderScopeElement($scope) ?>\n<?php endif?>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_scope_checkbox.php",
    "content": "<?php\n    $activeValue = $scope->scopeValue !== null ? $scope->value : null;\n?>\n<div\n    class=\"filter-scope scope-checkbox form-check\"\n    data-scope-name=\"<?= $scope->scopeName ?>\">\n    <input class=\"form-check-input\" type=\"checkbox\" id=\"<?= $scope->getId() ?>\" <?= $activeValue ? 'checked' : '' ?> />\n    <label class=\"form-check-label\" for=\"<?= $scope->getId() ?>\"><?= e($this->getHeaderValue($scope)) ?></label>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_scope_dropdown.php",
    "content": "<?php\n    $emptyOption = $scope->emptyOption;\n    $activeValue = $scope->scopeValue !== null ? $scope->value : $scope->default;\n    $flatOptions = $emptyOption ? ['' => __($emptyOption)] + $scope->options() : $scope->options();\n    $scopeOptions = $scope->asOptionsDefinition($flatOptions);\n?>\n<div\n    class=\"filter-scope scope-dropdown\"\n    data-scope-name=\"<?= $scope->scopeName ?>\">\n    <select\n        id=\"<?= $scope->getId() ?>\"\n        class=\"select custom-select select-no-search select-dropdown-auto-width\"\n        style=\"opacity:0\"\n    >\n        <?php foreach ($scopeOptions as $value => $option): ?>\n            <option\n                <?= (string) $activeValue === (string) $value ? 'selected=\"selected\"' : '' ?>\n                <?php if ($option->color): ?>\n                    data-status=\"<?= e($option->color) ?>\"\n                <?php elseif ($option->image): ?>\n                    data-image=\"<?= e($option->image) ?>\"\n                <?php elseif ($option->icon): ?>\n                    data-icon=\"<?= e($option->icon) ?>\"\n                <?php endif ?>\n                value=\"<?= e($value) ?>\"\n            ><?= e(__($option->label)) ?></option>\n        <?php endforeach ?>\n    </select>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_scope_switch.php",
    "content": "<?php\n    $activeValue = $scope->scopeValue !== null ? $scope->value : $scope->default;\n?>\n<div\n    class=\"filter-scope form-check is-indeterminate\"\n    data-scope-name=\"<?= $scope->scopeName ?>\">\n    <input class=\"form-check-input\" type=\"checkbox\" id=\"<?= $scope->getId() ?>\" data-checked=\"<?= $activeValue ?: '0' ?>\" />\n    <label class=\"form-check-label\" for=\"<?= $scope->getId() ?>\"><?= e($this->getHeaderValue($scope)) ?></label>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/filter/partials/_scope_widget.php",
    "content": "<!-- Widget -->\n<?php\n    $widget = $this->makeFilterScopeWidget($scope);\n?>\n<?= $widget->render() ?>"
  },
  {
    "path": "modules/backend/widgets/form/FieldProcessor.php",
    "content": "<?php namespace Backend\\Widgets\\Form;\n\nuse BackendAuth;\nuse Backend\\Classes\\FormTabs;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\n\n/**\n * FieldProcessor concern\n */\ntrait FieldProcessor\n{\n    /**\n     * processAutoOrder applies a default sort order to all fields\n     */\n    protected function processAutoOrder(FormTabs $tabs)\n    {\n        // Apply incremental default orders\n        $orderCount = 0;\n        foreach ($tabs->getFields() as $fields) {\n            foreach ($fields as $field) {\n                if ($field->order !== -1) {\n                    continue;\n                }\n                $field->order = ($orderCount += 100);\n            }\n        }\n\n        // Sort fields internally\n        $tabs->sortAllFields();\n    }\n\n    /**\n     * processAutoSpan converts fields with a span set to 'auto' as either\n     * 'left' or 'right' depending on the previous field.\n     */\n    protected function processAutoSpan(FormTabs $tabs)\n    {\n        $prevSpan = null;\n\n        foreach ($tabs->getFields() as $fields) {\n            foreach ($fields as $field) {\n                // Auto sizing\n                if (strtolower($field->span) === 'auto') {\n                    if ($prevSpan === 'left') {\n                        $field->span = 'right';\n                    }\n                    else {\n                        $field->span = 'left';\n                    }\n                }\n\n                $prevSpan = $field->span;\n\n                // Adaptive sizing\n                if (strtolower($field->span) === 'adaptive') {\n                    $field->size = 'adaptive';\n                    $field->stretch = true;\n                    $tabs->stretch = true;\n                    $tabs->addAdaptive($field->tab ?: $tabs->defaultTab);\n                }\n            }\n        }\n    }\n\n    /**\n     * processPermissionCheck check if user has permissions to show the field\n     * and removes it if permission is denied\n     */\n    protected function processPermissionCheck(array $fields)\n    {\n        foreach ($fields as $fieldName => $field) {\n            if (\n                $field->permissions &&\n                !BackendAuth::userHasAccess($field->permissions, false)\n            ) {\n                $this->removeField($fieldName);\n            }\n        }\n    }\n\n    /**\n     * processFormWidgetFields will mutate fields types that are registered as widgets,\n     * convert their type to 'widget' and internally allocate the widget object\n     */\n    protected function processFormWidgetFields(array $fields)\n    {\n        foreach ($fields as $field) {\n            if (!$this->isFormWidget((string) $field->type)) {\n                continue;\n            }\n\n            $newConfig = ['widget' => $field->type];\n\n            if (is_array($field->config)) {\n                $newConfig += $field->config;\n            }\n\n            $field->useConfig($newConfig)->displayAs('widget');\n\n            // Create form widget instance and bind to controller\n            $this->makeFormFieldWidget($field)->bindToController();\n        }\n    }\n\n    /**\n     * processValidationAttributes applies the field name to the validation engine\n     */\n    protected function processValidationAttributes(array $fields)\n    {\n        if (!$this->model || !method_exists($this->model, 'setValidationAttributeName')) {\n            return;\n        }\n\n        foreach ($fields as $field) {\n            $this->model->setValidationAttributeName(\n                HtmlHelper::nameToDot($field->fieldName),\n                $field->label\n            );\n        }\n    }\n\n    /**\n     * processFieldOptionValues sets the callback for retrieving options\n     * from fields that specifically require it\n     */\n    protected function processFieldOptionValues(array $fields)\n    {\n        // Fields that demand options\n        $requiredTypes = [\n            'dropdown',\n            'radio',\n            'checkboxlist',\n            'balloon-selector'\n        ];\n\n        foreach ($fields as $field) {\n            if (!in_array($field->type, $requiredTypes, false)) {\n                continue;\n            }\n\n            // Specified explicitly on the object already\n            if ($field->hasOptions()) {\n                continue;\n            }\n\n            // If options are defined by config but are in an unusable state\n            $fieldOptions = $field->optionsPreset\n                ? 'preset:' . $field->optionsPreset\n                : ($field->optionsMethod ?: $field->options);\n\n            // Defer the execution of option data collection\n            $field->options(function () use ($field, $fieldOptions) {\n                return $field->getOptionsFromModel($this->model, $fieldOptions, $this->data);\n            });\n        }\n    }\n\n    /**\n     * processRequiredAttributes will set the required flag based on the model preference\n     */\n    protected function processRequiredAttributes(array $fields)\n    {\n        if (!$this->model->isClassInstanceOf(\\October\\Contracts\\Database\\ValidationInterface::class)) {\n            return;\n        }\n\n        if (!$this->model || !method_exists($this->model, 'isAttributeRequired')) {\n            return;\n        }\n\n        foreach ($fields as $field) {\n            if ($field->required !== null) {\n                continue;\n            }\n\n            $field->required = $this->model->isAttributeRequired(\n                HtmlHelper::nameToDot($field->fieldName)\n            );\n        }\n    }\n\n    /**\n     * processTranslatableAttributes will set the translatable flag based on the model preference\n     */\n    protected function processTranslatableAttributes(array $fields)\n    {\n        if ($this->useTranslatable === false) {\n            return;\n        }\n\n        if (!$this->model) {\n            return;\n        }\n\n        // Multisite trait: non-propagatable attributes are translatable\n        if (\n            $this->model->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n            $this->model->isMultisiteSyncEnabled()\n        ) {\n            foreach ($fields as $field) {\n                if ($field->translatable !== null) {\n                    continue;\n                }\n\n                $attrName = HtmlHelper::nameToDot($field->fieldName);\n                if (!$this->model->isAttributePropagatable($attrName)) {\n                    $field->translatable = true;\n                }\n            }\n        }\n\n        // Translatable trait: attributes listed in $translatable are translatable\n        if (\n            $this->model->isClassInstanceOf(\\October\\Contracts\\Database\\TranslatableInterface::class) &&\n            $this->model->isTranslatableEnabled()\n        ) {\n            $translatableAttrs = $this->model->getTranslatableAttributes();\n\n            foreach ($fields as $field) {\n                if ($field->translatable !== null) {\n                    continue;\n                }\n\n                $attrName = HtmlHelper::nameToDot($field->fieldName);\n                if (in_array($attrName, $translatableAttrs)) {\n                    $field->translatable = true;\n                }\n            }\n        }\n\n        // Currencyable trait: attributes listed in $currencyable.\n        // Only show the globe icon for existing records since overrides\n        // are stored in a sidecar table that requires a saved record.\n        if (\n            $this->model->exists &&\n            $this->model->isClassInstanceOf(\\October\\Contracts\\Database\\CurrencyableInterface::class) &&\n            $this->model->isCurrencyableEnabled()\n        ) {\n            $currencyableAttrs = $this->model->getCurrencyableAttributes();\n\n            foreach ($fields as $field) {\n                if ($field->translatable !== null) {\n                    continue;\n                }\n\n                $attrName = HtmlHelper::nameToDot($field->fieldName);\n                if (in_array($attrName, $currencyableAttrs)) {\n                    $field->translatable = 'currency';\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/form/HasFormWidgets.php",
    "content": "<?php namespace Backend\\Widgets\\Form;\n\nuse Lang;\nuse SystemException;\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\WidgetManager;\nuse Backend\\Classes\\FormWidgetBase;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\n\n/**\n * HasFormWidgets concern\n */\ntrait HasFormWidgets\n{\n    /**\n     * @var array formWidgets collection of all form widgets used in this form.\n     */\n    protected $formWidgets = [];\n\n    /**\n     * @var \\Backend\\Classes\\WidgetManager widgetManager\n     */\n    protected $widgetManager;\n\n    /**\n     * initFormWidgetsConcern\n     */\n    protected function initFormWidgetsConcern()\n    {\n        $this->widgetManager = WidgetManager::instance();\n    }\n\n    /**\n     * makeFormFieldWidget object from a form field object\n     */\n    protected function makeFormFieldWidget(FormField $field): ?FormWidgetBase\n    {\n        if ($field->type !== 'widget') {\n            return null;\n        }\n\n        if (isset($this->formWidgets[$field->fieldName])) {\n            return $this->formWidgets[$field->fieldName];\n        }\n\n        // If options are defined by config but are in an unusable state\n        $fieldOptions = $field->optionsPreset\n            ? 'preset:' . $field->optionsPreset\n            : ($field->optionsMethod ?: $field->options);\n\n        // Defer the execution of option data collection\n        if ($fieldOptions !== null && !$field->hasOptions()) {\n            $field->options(function () use ($field, $fieldOptions) {\n                return $field->getOptionsFromModel($this->model, $fieldOptions, $this->data);\n            });\n        }\n\n        // Create form widget instance\n        $widgetConfig = $this->makeConfig($field->config);\n        $widgetConfig->alias = $this->alias . studly_case($this->nameToId($field->fieldName));\n        $widgetConfig->sessionKey = $this->getSessionKey();\n        $widgetConfig->sessionKeySuffix = $this->sessionKeySuffix;\n        $widgetConfig->previewMode = $this->previewMode;\n        $widgetConfig->model = $this->model;\n        $widgetConfig->data = $this->data;\n        $widgetConfig->parentForm = $this;\n\n        $widgetName = $widgetConfig->widget;\n        $widgetClass = $this->widgetManager->resolveFormWidget($widgetName);\n\n        if (!class_exists($widgetClass)) {\n            throw new SystemException(Lang::get(\n                'backend::lang.widget.not_registered',\n                ['name' => $widgetClass]\n            ));\n        }\n\n        $widget = $this->makeFormWidget($widgetClass, $field, $widgetConfig);\n\n        return $this->formWidgets[$field->fieldName] = $widget;\n    }\n\n    /**\n     * isFormWidget checks if a field type is a widget or not\n     */\n    protected function isFormWidget(string $fieldType): bool\n    {\n        if (!$fieldType) {\n            return false;\n        }\n\n        if (strpos($fieldType, '\\\\')) {\n            return true;\n        }\n\n        $widgetClass = $this->widgetManager->resolveFormWidget($fieldType);\n\n        if (!class_exists($widgetClass)) {\n            return false;\n        }\n\n        if (is_subclass_of($widgetClass, \\Backend\\Classes\\FormWidgetBase::class)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * getFormWidgets for the instance\n     */\n    public function getFormWidgets(): array\n    {\n        return $this->formWidgets;\n    }\n\n    /**\n     * getFormWidget returns a specified form widget\n     * @param string $field\n     */\n    public function getFormWidget($field)\n    {\n        if (isset($this->formWidgets[$field])) {\n            return $this->formWidgets[$field];\n        }\n\n        return null;\n    }\n\n    /**\n     * nameToId is a helper method to convert a field name to a valid ID attribute\n     * @param $input\n     * @return string\n     */\n    public function nameToId($input)\n    {\n        return HtmlHelper::nameToId($input);\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/form/HasTranslatable.php",
    "content": "<?php namespace Backend\\Widgets\\Form;\n\nuse Site;\nuse Backend\\Widgets\\Form as FormWidget;\nuse SystemException;\n\n/**\n * HasTranslatable adds translatable field popup support to the Form widget.\n * Clicking the globe icon shows a dropdown of available sites/locales, and\n * selecting one opens a popup to edit that single locale's field value.\n */\ntrait HasTranslatable\n{\n    /**\n     * @var array translatableSitesCache keyed by filter type ('locale' or 'currency')\n     */\n    protected $translatableSitesCache = [];\n\n    /**\n     * onLoadTranslateField AJAX handler to open the translate popup for a single site\n     */\n    public function onLoadTranslateField()\n    {\n        $fieldName = post('field_name');\n        $siteId = post('site_id');\n        $field = $this->getField($fieldName);\n\n        if (!$field) {\n            throw new SystemException(\"Field [{$fieldName}] not found in form.\");\n        }\n\n        $site = $this->getTranslatableSite($siteId);\n\n        // Wrap the entire handler in site context so the form widget renders\n        // with the correct site (and currency) active\n        return Site::withContext($site->id, function () use ($field, $site) {\n            $siteModel = $this->getTranslatableSiteModel($this->model, $site);\n            $formWidget = $this->makeTranslateFormWidget($field, $siteModel, $site);\n\n            $this->vars['translatableField'] = $field;\n            $this->vars['translatableSite'] = $site;\n            $this->vars['translatableFormWidget'] = $formWidget;\n            $this->vars['translatableSessionKey'] = $formWidget->getSessionKey();\n            $this->vars['translatableModelId'] = $this->model->getKey();\n\n            return $this->makePartial('translate_popup');\n        });\n    }\n\n    /**\n     * onSaveTranslateField AJAX handler to save a single site's translation\n     */\n    public function onSaveTranslateField()\n    {\n        $fieldName = post('field_name');\n        $siteId = post('site_id');\n        $field = $this->getField($fieldName);\n\n        if (!$field) {\n            throw new SystemException(\"Field [{$fieldName}] not found in form.\");\n        }\n\n        $model = $this->model;\n        $site = $this->getTranslatableSite($siteId);\n\n        Site::withContext($siteId, function () use ($model, $field, $site) {\n            $siteModel = $this->getTranslatableSiteModel($model, $site);\n            $formWidget = $this->makeTranslateFormWidget($field, $siteModel, $site);\n            $saveData = $formWidget->getSaveData();\n            $this->controller->formBeforeSave($model);\n\n            $formWidget->performSaveOnModel($siteModel, $saveData, [\n                'sessionKey' => $formWidget->getSessionKey(),\n                'force' => true\n            ]);\n\n            $this->controller->formAfterSave($model);\n        });\n    }\n\n    /**\n     * getTranslatableSites returns available sites for translation or currency\n     * override, excluding the current site. When a field is provided, the\n     * filter type is determined per-field: currency fields show sites with\n     * different currencies, while locale fields show sites with different locales.\n     */\n    public function getTranslatableSites($model, $field = null)\n    {\n        $cacheKey = $field && $field->translatable === 'currency' ? 'currency' : 'locale';\n\n        if (array_key_exists($cacheKey, $this->translatableSitesCache)) {\n            return $this->translatableSitesCache[$cacheKey];\n        }\n\n        $sites = Site::listEditEnabled();\n\n        if ($cacheKey === 'currency') {\n            // Currencyable: show other sites with a different currency\n            $currentSiteId = Site::getEditSiteId();\n            $currentCurrencyCode = Site::getEditSite()->hard_currency_code;\n            $sites = $sites->filter(\n                fn($site) =>\n                    $site->id != $currentSiteId &&\n                    $site->hard_currency_code !== $currentCurrencyCode\n            );\n        }\n        else {\n            $currentSiteId = Site::getEditSiteId();\n            $sites = $sites->filter(fn($site) => $site->id != $currentSiteId);\n\n            // Multisite: only show sites where a linked record exists\n            if ($model->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) && $model->isMultisiteEnabled()) {\n                $sites = $sites->filter(fn($site) => $model->findForSite($site->id) !== null);\n            }\n            // Translatable: only show sites with a different locale\n            elseif ($model->isClassInstanceOf(\\October\\Contracts\\Database\\TranslatableInterface::class) && $model->isTranslatableEnabled()) {\n                $currentLocale = Site::getEditSite()->hard_locale ?? null;\n                $sites = $sites->filter(fn($site) => $site->hard_locale !== $currentLocale);\n            }\n        }\n\n        return $this->translatableSitesCache[$cacheKey] = $sites->values();\n    }\n\n    /**\n     * getTranslatableSite returns a single site definition by ID\n     */\n    protected function getTranslatableSite($siteId)\n    {\n        $sites = Site::listEditEnabled();\n\n        $site = $sites->first(fn($site) => $site->id == $siteId);\n\n        if (!$site) {\n            throw new SystemException(\"Site [{$siteId}] not found.\");\n        }\n\n        return $site;\n    }\n\n    /**\n     * getTranslatableSiteModel returns the model for a specific site context\n     */\n    protected function getTranslatableSiteModel($model, $site)\n    {\n        if (!method_exists($model, 'isClassInstanceOf')) {\n            return $model;\n        }\n\n        // Model isn't populated likely from saving context\n        if (!$model->exists && ($modelId = post('model_id'))) {\n            $model = $model->newQuery()->find($modelId) ?: $model;\n        }\n\n        // Multisite: load the linked record for the target site\n        if ($model->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) && $model->isMultisiteEnabled()) {\n            return $model->findForSite($site->id) ?: $model;\n        }\n\n        // Translatable: set locale context on the same model\n        if ($model->methodExists('setLocale')) {\n            $model->setLocale($site->hard_locale);\n        }\n        elseif ($model->methodExists('translateContext')) {\n            $model->translateContext($site->hard_locale);\n        }\n\n        // Currencyable: set currency context for the target site.\n        // Always call setCurrency — even for primary sites (no currency_id)\n        // so the model's cached context is reset from the current page's currency.\n        if (\n            $model->isClassInstanceOf(\\October\\Contracts\\Database\\CurrencyableInterface::class) &&\n            $model->isCurrencyableEnabled()\n        ) {\n            $model->setCurrency($site->hard_currency_code);\n        }\n\n        return $model;\n    }\n\n    /**\n     * makeTranslateFormWidget creates a Form widget instance for a single site/locale\n     */\n    protected function makeTranslateFormWidget($field, $siteModel, $site)\n    {\n        $config = $this->makeConfig();\n        $config->model = $siteModel;\n        $config->alias = $this->alias . 'TranslateField' . $site->id;\n        $config->arrayName = 'TranslateField';\n        $config->context = 'update';\n        $config->sessionKey = $this->getSessionKey();\n        $config->isNested = true;\n        $config->useTranslatable = false;\n        $config->fields = [\n            $field->fieldName => array_except(array_merge($field->config, [\n                'type' => $field->config['widget'] ?? ($field->config['type'] ?? null),\n                'required' => false,\n                'span' => 'full'\n            ]), ['value', 'arrayName'])\n        ];\n\n        $widget = $this->makeWidget(FormWidget::class, $config);\n        $widget->bindToController();\n\n        return $widget;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/form/IsFormElement.php",
    "content": "<?php namespace Backend\\Widgets\\Form;\n\nuse Backend\\Classes\\FormTabs;\nuse Backend\\Classes\\FormField;\nuse October\\Rain\\Element\\Form\\FieldDefinition;\nuse October\\Rain\\Element\\Form\\FieldsetDefinition;\nuse SystemException;\n\n/**\n * IsFormElement defines all methods to satisfy the FormElement contract\n *\n * @see \\October\\Contracts\\Element\\FormElement\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait IsFormElement\n{\n    /**\n     * @var FieldsetDefinition|null activeTabSection where fields are currently being added\n     */\n    protected $activeTabSection = null;\n\n    /**\n     * addFormField adds a field to the fieldset\n     */\n    public function addFormField(string $fieldName, ?string $label = null): FieldDefinition\n    {\n        if ($this->activeTabSection === null) {\n            throw new SystemException(\"The addFormField method should be called when defining fields inside a model. Try using addField, addTabField or addSecondaryTabField instead.\");\n        }\n\n        $fieldObj = new FormField([\n            'fieldName' => $fieldName,\n            'label' => $label,\n            'arrayName' => $this->arrayName,\n            'idPrefix' => $this->getId()\n        ]);\n\n        $this->allFields[$fieldName] = $fieldObj;\n\n        $this->activeTabSection->addField($fieldName, $fieldObj);\n\n        return $fieldObj;\n    }\n\n    /**\n     * getFormFieldset returns the current fieldset definition\n     */\n    public function getFormFieldset(): FieldsetDefinition\n    {\n        return $this->activeTabSection;\n    }\n\n    /**\n     * getFormContext returns the current form context\n     */\n    public function getFormContext()\n    {\n        return $this->getContext();\n    }\n\n    /**\n     * inActiveTabSection\n     */\n    public function inActiveTabSection($inSection, callable $callback)\n    {\n        switch (strtolower($inSection)) {\n            case FormTabs::SECTION_PRIMARY:\n                $this->activeTabSection = $this->allTabs->primary;\n                break;\n            case FormTabs::SECTION_SECONDARY:\n                $this->activeTabSection = $this->allTabs->secondary;\n                break;\n            default:\n                $this->activeTabSection = $this->allTabs->outside;\n                break;\n        }\n\n        $callback();\n\n        $this->activeTabSection = null;\n    }\n\n    /**\n     * addFieldsFromModel from the model\n     */\n    protected function addFieldsFromModel(?string $inSection = null)\n    {\n        if ($this->isNested || !$this->model) {\n            return;\n        }\n\n        switch (strtolower((string) $inSection)) {\n            case FormTabs::SECTION_PRIMARY:\n                $this->activeTabSection = $this->allTabs->primary;\n                $modelMethod = 'definePrimaryFormFields';\n                break;\n            case FormTabs::SECTION_SECONDARY:\n                $this->activeTabSection = $this->allTabs->secondary;\n                $modelMethod = 'defineSecondaryFormFields';\n                break;\n            default:\n                $this->activeTabSection = $this->allTabs->outside;\n                $modelMethod = 'defineFormFields';\n                break;\n        }\n\n        if (method_exists($this->model, $modelMethod)) {\n            $this->model->$modelMethod($this);\n        }\n\n        $this->activeTabSection = null;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/form/assets/css/form.css",
    "content": ".form-preview{background:var(--oc-primary-bg);border:1px solid var(--oc-primary-border);margin-bottom:20px;padding:20px}.form-preview>.form-group:last-child{padding-bottom:0}.form-preview>.form-group:last-child .form-check{margin-bottom:0}.form-preview.form-flush{border-top:none}.form-preview .control-tabs.primary-tabs>div>div>ul.nav-tabs>li a>span.title:after,.form-preview .control-tabs.primary-tabs>div>div>ul.nav-tabs>li a>span.title:before,.form-preview .control-tabs.primary-tabs>div>ul.nav-tabs>li a>span.title:after,.form-preview .control-tabs.primary-tabs>div>ul.nav-tabs>li a>span.title:before,.form-preview .control-tabs.primary-tabs>ul.nav-tabs>li a>span.title:after,.form-preview .control-tabs.primary-tabs>ul.nav-tabs>li a>span.title:before{background:var(--oc-primary-bg)}.form-preview .control-tabs.primary-tabs>div>div>ul.nav-tabs>li.active a:before,.form-preview .control-tabs.primary-tabs>div>ul.nav-tabs>li.active a:before,.form-preview .control-tabs.primary-tabs>ul.nav-tabs>li.active a:before{background-color:var(--oc-primary-bg)}.form-elements:after,.form-elements:before,.form-tabless-fields:after,.form-tabless-fields:before{content:\" \";display:table}.form-elements:after,.form-tabless-fields:after{clear:both}.form-control{-webkit-appearance:none;position:relative}.form-control:focus{border:1px solid var(--oc-border-focus);box-shadow:none}.form-control.growable,.form-control.is-growable{width:110px}.form-control.growable:active,.form-control.growable:focus,.form-control.is-growable:active,.form-control.is-growable:focus{width:200px!important}@media (max-width:576px){.form-control.growable,.form-control.is-growable{text-indent:-999px;width:40px}.form-control.growable:active,.form-control.growable:focus,.form-control.is-growable:active,.form-control.is-growable:focus{text-indent:0;width:100px!important}.form-control.growable.icon,.form-control.is-growable.icon{padding-right:0!important}}.form-control.is-searchable{border-radius:100px}.search-input-container{position:relative}.search-input-container:before{background-position:0 -38px;height:16px;position:absolute;right:8px;top:11px;width:16px;z-index:1}.form-group{box-sizing:border-box;position:relative}.form-group:empty{display:none}.form-group,.form-group.layout-item{margin-bottom:0;padding-bottom:20px}.form-group.is-required>label:after{background-color:var(--bs-danger);border-radius:8px;content:\"\";display:inline-block;font-size:60%;height:5px;margin-left:3px;vertical-align:super;width:5px}.form-group .form-translatable{background-color:var(--oc-input-translatable-bg);border-radius:5px;color:var(--oc-input-translatable-color);display:inline-block;height:20px;margin-bottom:-5px;margin-left:2px;position:relative;width:25px}.form-group .form-translatable i{font-size:16px;left:4px;position:absolute;top:2px}.form-group .form-translatable.no-label{left:auto;position:absolute;right:0;top:1px;z-index:2}.form-group.span-full{float:left;width:100%}.form-group.span-left{clear:left;float:left;width:48.5%}.form-group.span-right{clear:right;float:right;width:48.5%}.form-group.clear-full{clear:both}.form-group.clear-left{clear:left}.form-group.clear-right{clear:right}.form-group.layout-relative{padding-bottom:0}.form-group.checkbox-field{padding-bottom:5px}.form-group.checkbox-field>.form-check,.form-group.radio-field>.form-check{margin-bottom:10px}.form-group.number-field>.form-control{text-align:right}.form-group.radio-align{margin-top:-20px;padding-left:23px}.form-group.checkbox-align{margin-top:-5px;padding-left:23px}.form-group.field-align-above{margin-top:-5px}.form-group.field-slim.span-left,.form-group.field-slim.span-right{width:50%}.form-group.field-indent{padding-left:23px}.form-group.input-sidebar-control{padding-right:35px}.form-group.input-sidebar-control .sidebar-control{color:#c4c4c4;font-size:16px;position:absolute;right:8px;top:34px}.form-group.input-sidebar-control .sidebar-control:focus,.form-group.input-sidebar-control .sidebar-control:hover{color:var(--bs-link-color);outline:none;text-decoration:none}.form-horizontal .col-horizontal{width:155px}.form-horizontal .form-group.checkbox-field{padding-bottom:20px}.form-group-preview .form-control{background-color:var(--oc-form-control-disabled-bg);box-shadow:none;height:auto;min-height:38px;word-break:break-word}.form-group-preview .custom-checkbox label,.form-group-preview .custom-radio label{cursor:default}.col-form-label,.form-label{font-weight:600}.form-text{margin-bottom:0}.form-text.before-field{margin-bottom:.385rem;margin-top:-.135rem}.control-disabled .form-text{opacity:.5}.input-with-icon{position:relative}.input-with-icon>.icon{color:#bdbdbd;font-size:15px;margin-top:1px;padding:10px;pointer-events:none;position:absolute;z-index:10}.input-with-icon.right-align>.icon{right:0}.input-with-icon.right-align input{padding-right:32px!important}.input-with-icon.left-align>.icon{left:0}.input-with-icon.left-align input{padding-left:32px!important}.input-with-icon.size-sm>.icon{margin-top:0;padding:5px 8px}.input-no-spinner{-moz-appearance:textfield}.input-no-spinner::-webkit-inner-spin-button,.input-no-spinner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.field-section{border-bottom:1px solid var(--bs-border-color);padding-bottom:7px;padding-top:3px}.field-section>h4{font-size:1.3rem;font-weight:400}.field-section>h4:first-child,.field-section>p:first-child{margin:0}.field-section.is-collapsible{cursor:pointer}.field-section.is-collapsible>h4:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:rgba(0,0,0,.4);content:\"\\f077\";display:inline-block;float:right;font-family:octo-icon!important;font-size:12px;font-style:normal;font-variant:normal;font-weight:400;line-height:1;margin:2px 8px 0;text-transform:none;transform:scale(1);transition:all .3s;vertical-align:baseline}.field-section.is-collapsible:hover{border-bottom:1px solid #b0bdcd}.field-section.is-collapsible:hover>h4:before{color:inherit}.field-action{border-bottom:1px solid var(--bs-border-color);margin-top:-20px;padding:10px 0 5px}.field-action h5{font-size:1rem;font-weight:400;margin-bottom:.35rem;margin-top:.75rem}.field-action p{color:var(--bs-secondary-color);font-size:.9rem;margin-bottom:0}.field-action .field-action-button{margin-bottom:10px;margin-top:15px}@media (min-width:992px){.field-action .field-action-button{text-align:right}}.form-group.section-field.collapsed .field-section.is-collapsible>h4:before{transform:scaleY(-1)}.field-horizontalrule hr{background:#000;height:1px;margin:0;opacity:.1}.field-textarea{resize:vertical}.field-textarea.size-tiny{min-height:50px}.field-textarea.size-small{min-height:100px}.field-textarea.size-large{min-height:200px}.field-textarea.size-huge{min-height:250px}.field-textarea.size-giant{min-height:350px}.field-checkboxlist .field-checkboxlist-inner{background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:4px}.field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner{padding:15px 15px 2px}.field-checkboxlist .checkboxlist-controls{background:var(--oc-form-control-bg);border-left:1px solid var(--bs-border-color);border-right:1px solid var(--bs-border-color);border-top:1px solid var(--bs-border-color);border-top-left-radius:4px;border-top-right-radius:4px;font-size:0;padding:3px;white-space:nowrap}.field-checkboxlist .checkboxlist-controls+.field-checkboxlist-inner{border-top-color:var(--oc-toolbar-border);border-top-left-radius:0;border-top-right-radius:0}.field-checkboxlist .form-check{margin-bottom:10px}.field-checkboxlist .checkboxlist-group{list-style:none;margin:0;padding-left:1.1rem}.field-checkboxlist .checkboxlist-group-item:not(:has(*)),.field-checkboxlist .checkboxlist-group:not(:has(*)){display:none}.field-checkboxlist-scrollable{height:300px}.field-checkboxlist-scrollable .form-check{margin-bottom:10px;margin-left:15px;margin-top:15px}.field-checkboxlist-scrollable .form-check~.form-check{margin-top:0}.form-group.inline-options .field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner{padding:15px 15px 5px}.form-group.inline-options .form-check{display:inline-block;margin-right:15px}.form-buttons{font-size:0;padding-bottom:20px;width:100%}.form-buttons:after,.form-buttons:before{content:\" \";display:table}.form-buttons:after{clear:both}.form-buttons.is-horizontal{padding-left:155px}.form-buttons .btn{margin-right:7px}.form-buttons .btn.no-margin-right{margin-right:0}.form-buttons .btn-group{margin-right:7px}.form-buttons .btn-group .btn{margin-right:0}.form-buttons .pull-right{margin-left:7px;margin-right:0}.form-buttons.buttons-offset{padding-left:20px}body.slim-container .form-buttons{padding:0 20px 20px}body .modal-footer .form-buttons{padding:0}@media (max-width:769px){.form-group.span-left,.form-group.span-right{clear:none;width:100%}}body.compact-container .form-fatal-error{padding:1rem 20px 0}.select2-container--default .select2-selection--single .select2-selection__arrow b{border:none}.select2-dropdown{z-index:10400}[data-control~=toolbar] .form-control{display:inline-block;margin-right:15px}[data-control~=toolbar] input[type=text].form-control,[data-control~=toolbar] label{position:relative;top:5px}[data-control~=toolbar] label{margin-right:7px}[data-control~=toolbar] label.standalone{margin-right:15px}[data-control~=toolbar] .select2-container{display:inline-block;height:36px;margin-right:15px;width:auto}[data-control~=toolbar] .select2-container .select2-selection__rendered{line-height:17px}[data-control~=toolbar] .select2-container .select2-selection--single{height:36px}[data-control~=toolbar] select.form-control.custom-select{display:none}\n"
  },
  {
    "path": "modules/backend/widgets/form/assets/js/october.form.js",
    "content": "/*\n * Form Widget\n *\n * Config:\n * - refreshHandler: null\n * - refreshData: {}\n */\n+function ($) { \"use strict\";\n\n    oc.registerControl('formwidget', class extends oc.ControlBase {\n\n        init() {\n            // Throttle dependency updating\n            this.dependantUpdateInterval = 300;\n            this.dependantUpdateTimers = {};\n\n            this.fieldElementCache = null;\n            this.disposeCallbacks = [];\n        }\n\n        connect() {\n            this.$el = $(this.element);\n            this.$form = this.$el.closest('form');\n            this.options = Object.assign({}, this.config || {});\n\n            this.$el.on('change.oc.formwidget', '[data-change-handler]', this.proxy(this.onRefreshChangeField));\n            $('.nav-tabs', this.$el).on('shown.bs.tab shownLinkable.oc.tab', 'li.tab-lazy > a', this.proxy(this.showLazyTab));\n            this.$el.on('oc.triggerOn.afterUpdate', '.field-checkboxlist', this.proxy(this.toggleCheckboxlist));\n            this.listen('click', '.field-checkboxlist input[type=checkbox]', this.onClickCheckboxListCheckbox);\n            this.listen('click', '.field-checkboxlist.is-cumulative input[type=checkbox]', this.onClickCheckboxListCheckboxCumulative);\n\n            addEventListener('trigger:complete', this.proxy(this.toggleEmptyTabs));\n            oc.Events.on(this.element, 'trigger:empty', '.field-checkboxlist', this.proxy(this.clearCheckboxlist));\n\n            this.bindDependents();\n            this.bindCheckboxlist();\n            this.bindCollapsibleSections();\n            this.toggleEmptyTabs();\n        }\n\n        disconnect() {\n            this.$el.off('change.oc.formwidget', '[data-change-handler]', this.proxy(this.onRefreshChangeField));\n            $('.nav-tabs', this.$el).off('shown.bs.tab shownLinkable.oc.tab', 'li.tab-lazy > a', this.proxy(this.showLazyTab));\n            this.$el.off('oc.triggerOn.afterUpdate', '.field-checkboxlist', this.proxy(this.toggleCheckboxlist));\n\n            $('.section-field[data-field-collapsible]', this.$form).off('click');\n\n            this.disposeCallbacks.forEach(callback => callback());\n            this.disposeCallbacks = [];\n\n            removeEventListener('trigger:complete', this.proxy(this.toggleEmptyTabs));\n            oc.Events.off(this.element, 'trigger:empty', '.field-checkboxlist', this.proxy(this.clearCheckboxlist));\n\n            this.$el.removeData('oc.formwidget');\n\n            this.$el = null;\n            this.$form = null;\n            this.options = null;\n            this.fieldElementCache = null;\n        }\n\n        // Logic for checkboxlist\n        onClickCheckboxListCheckbox(ev) {\n            oc.checkboxRangeRegisterClick(ev, '.form-check', 'input[type=checkbox]');\n        }\n\n        onClickCheckboxListCheckboxCumulative(ev) {\n            const el = ev.delegateTarget;\n            if (el.checked) {\n                const childGroup = el.closest('.form-check').nextElementSibling;\n                if (childGroup && childGroup.classList && childGroup.classList.contains('checkboxlist-group')) {\n                    childGroup.querySelectorAll('input[type=checkbox]').forEach((chk) => {\n                        chk.checked = true;\n                    });\n                }\n            }\n        }\n\n        toggleCheckboxlist(ev) {\n            var $field = ev.target.closest('.field-checkboxlist'),\n                isDisabled = $field.classList.contains('control-disabled');\n\n            $field.querySelectorAll('input[type=checkbox]:not([data-option-disabled]), .checkboxlist-controls > .control-button').forEach((el) => {\n                el.disabled = isDisabled;\n            });\n        }\n\n        clearCheckboxlist(ev) {\n            this.checkAllCheckboxlist(ev.target, false);\n        }\n\n        bindCheckboxlist() {\n            this.listen('click', '[data-field-checkboxlist-all]', (event) => {\n                const el = event.delegateTarget;\n                if (el.disabled || el.readOnly) {\n                    return;\n                }\n\n                this.checkAllCheckboxlist(el.closest('.field-checkboxlist'), true);\n            });\n\n            this.listen('click', '[data-field-checkboxlist-none]', (event) => {\n                const el = event.delegateTarget;\n                if (el.disabled || el.readOnly) {\n                    return;\n                }\n\n                this.checkAllCheckboxlist(el.closest('.field-checkboxlist'), false);\n            });\n\n            this.element.querySelectorAll('.field-checkboxlist').forEach((el) => {\n                el.querySelectorAll('input[type=checkbox][disabled]').forEach((checkbox) => {\n                    checkbox.dataset.optionDisabled = '';\n                });\n\n                this.toggleCheckboxlist({ target: el });\n            });\n        }\n\n        checkAllCheckboxlist($field, flag) {\n            $('input[type=checkbox]:not([data-option-disabled])', $field)\n                .prop('checked', flag)\n                .first()\n                .trigger('change');\n        }\n\n        // Get all fields elements that belong to this form, nested form\n        // fields are removed from this collection.\n        getFieldElements() {\n            if (this.fieldElementCache !== null) {\n                return this.fieldElementCache;\n            }\n\n            var form = this.$el,\n                nestedFields = form.find('[data-control=\"formwidget\"] [data-field-name]');\n\n            return this.fieldElementCache = form.find('[data-field-name]').not(nestedFields);\n        }\n\n        // Bind dependant fields\n        bindDependents() {\n            if (!$('[data-field-depends]', this.$el).length) {\n                return;\n            }\n\n            var fieldMap = {},\n                fieldElements = this.getFieldElements();\n\n            // Map master and slave fields\n            fieldElements.filter('[data-field-depends]').each((index, element) => {\n                var name = $(element).data('field-name'),\n                    depends = $(element).data('field-depends');\n\n                $.each(depends, (index, depend) => {\n                    if (!fieldMap[depend]) {\n                        fieldMap[depend] = { fields: [] };\n                    }\n\n                    fieldMap[depend].fields.push(name);\n                })\n            });\n\n            // When a master is updated, refresh its slaves\n            $.each(fieldMap, (fieldName, toRefresh) => {\n                fieldElements.filter('[data-field-name=\"'+fieldName+'\"]')\n                    .on('change.oc.formwidget', $.proxy(this.onRefreshDependents, this, fieldName, toRefresh));\n\n                // Set up disposal\n                this.disposeCallbacks.push(function() {\n                    fieldElements.filter('[data-field-name=\"'+fieldName+'\"]')\n                        .off('change.oc.formwidget');\n                });\n            });\n        }\n\n        // Refresh a dependency field\n        // Uses a throttle to prevent duplicate calls and click spamming\n        onRefreshDependents(fieldName, toRefresh) {\n            var formEl = this.$form,\n                fieldElements = this.getFieldElements();\n\n            if (this.dependantUpdateTimers[fieldName] !== undefined) {\n                window.clearTimeout(this.dependantUpdateTimers[fieldName]);\n            }\n\n            this.dependantUpdateTimers[fieldName] = window.setTimeout(() => {\n                var refreshData = $.extend({},\n                    toRefresh,\n                    paramToObj('data-refresh-data', this.options.refreshData)\n                );\n\n                formEl.request(this.options.refreshHandler, {\n                    data: refreshData\n                }).done(() => {\n                    this.toggleEmptyTabs();\n\n                    // Refresh field element cache and trigger change only on fields in this form\n                    this.fieldElementCache = null;\n                    var updatedFieldElements = this.getFieldElements();\n                    $.each(toRefresh.fields, (key, field) => {\n                        updatedFieldElements.filter('[data-field-name=\"' + field + '\"]').trigger('change');\n                    });\n                });\n            }, this.dependantUpdateInterval);\n\n            $.each(toRefresh.fields, function(index, field) {\n                fieldElements.filter('[data-field-name=\"'+field+'\"]:visible')\n                    .addClass('loading-indicator-container size-form-field')\n                    .loadIndicator();\n            });\n        }\n\n        // Calls an AJAX handler when the field updates.\n        onRefreshChangeField(ev) {\n            // @todo same approach in onRefreshDependents instead of debounce? -sg\n            if (!this.isCurrentFormContext(ev.target)) {\n                return;\n            }\n\n            var $group = $(ev.target).closest('[data-change-handler]'),\n                handler = $group.data('change-handler');\n\n            // Debounce needed because select2 triggers change twice (vanilla + jquery) -sg\n            if (this.dependantUpdateTimers[handler] !== undefined) {\n                window.clearTimeout(this.dependantUpdateTimers[handler]);\n            }\n\n            this.dependantUpdateTimers[handler] = window.setTimeout(() => {\n                var refreshData = paramToObj('data-refresh-data', this.options.refreshData);\n                $group.request(handler, {\n                    data: refreshData\n                }).done(() => {\n                    this.toggleEmptyTabs();\n                });\n            }, this.dependantUpdateInterval);\n        }\n\n        isCurrentFormContext(el) {\n            return el.closest('[data-control=\"formwidget\"]') === this.$el.get(0);\n        }\n\n        // Hides tabs that have no content, it is possible this can be\n        // called multiple times in a single cycle due to input.trigger.\n        toggleEmptyTabs() {\n            var form = this.$el;\n\n            if (this.toggleEmptyTabsTimer !== undefined) {\n                window.clearTimeout(this.toggleEmptyTabsTimer);\n            }\n\n            this.toggleEmptyTabsTimer = window.setTimeout(() => {\n                var tabControl = $('[data-control=tab]', this.$el),\n                    tabContainer = $('.nav-tabs', tabControl);\n\n                if (!tabControl.length || !$.contains(form.get(0), tabControl.get(0))) {\n                    return;\n                }\n\n                // Check each tab pane for form field groups, locate first level form groups only\n                $('.tab-pane:not(.is-lazy):not(.nohide)', tabControl).each(function() {\n                    var hasControlsSelector = '> .form-group:not(:empty):not(.oc-hide), > .row > .form-group:not(:empty):not(.oc-hide)';\n\n                    $('[data-bs-target=\"#' + $(this).attr('id') + '\"]', tabControl)\n                        .closest('li')\n                        .toggle(!!$(hasControlsSelector, $(this)).length);\n                });\n\n                // If a hidden tab was selected, select the first visible tab\n                if (!$('> li.active:visible', tabContainer).length) {\n                    $('> li:visible:first', tabContainer)\n                        .find('> a:first')\n                        .tab('show');\n                }\n            }, 1);\n        }\n\n        // Render tab form fields once a lazy tab is selected.\n        showLazyTab(ev) {\n            var $el = $(ev.target),\n                handlerName = $el.data('tab-lazy-handler');\n\n            $el.request(handlerName, {\n                data: {\n                    target: $el.data('target'),\n                    name: $el.data('tab-name'),\n                    section: $el.data('tab-section')\n                },\n                success: function(data) {\n                    this.success(data);\n                    $el.parent().removeClass('tab-lazy');\n\n                    // Trigger all input presets to populate new fields.\n                    setTimeout(function() {\n                        $('[data-input-preset]').each(function() {\n                            var preset = $(this).data('oc.inputPreset')\n                            if (preset && preset.$src) {\n                                preset.$src.trigger('input')\n                            }\n                        })\n                    }, 0);\n                }\n            });\n        }\n\n        // Makes sections collapsible by targeting every field after\n        // up until the next section\n        bindCollapsibleSections() {\n            $('.section-field[data-field-collapsible]', this.$form)\n                .addClass('collapsed')\n                .find('.field-section:first')\n                    .addClass('is-collapsible')\n                    .end()\n                .on('click', function() {\n                    $(this)\n                        .toggleClass('collapsed')\n                        .nextUntil('.section-field').toggle();\n                })\n                .nextUntil('.section-field').hide();\n        }\n    });\n\n    // FORM WIDGET INTERNALS\n    // ==============\n\n    function paramToObj(name, value) {\n        if (value === undefined) value = '';\n        if (typeof value == 'object') return value;\n\n        try {\n            return oc.parseJSON(\"{\" + value + \"}\");\n        }\n        catch (e) {\n            throw new Error('Error parsing the '+name+' attribute value. '+e);\n        }\n    }\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/form/assets/less/form.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n//\n// Forms\n// --------------------------------------------------\n\n//\n// Form containers\n//\n\n.form-preview {\n    padding: @padding-standard;\n    margin-bottom: 20px;\n    background: @primary-bg;\n    border: 1px solid @primary-border;\n\n    > .form-group:last-child {\n        padding-bottom: 0;\n\n        .form-check {\n            margin-bottom: 0;\n        }\n    }\n\n    // Form to sit flush to the element above\n    &.form-flush {\n        border-top: none;\n    }\n\n    // Style primary tabs\n    .control-tabs.primary-tabs {\n        > ul.nav-tabs,\n        > div > ul.nav-tabs,\n        > div > div > ul.nav-tabs {\n            > li a > span.title {\n                &:before,\n                &:after {\n                    background: @primary-bg;\n                }\n            }\n            > li.active a {\n                &:before {\n                    background-color: @primary-bg;\n                }\n            }\n        }\n    }\n}\n\n//\n// Nice forms\n//\n\n.form-elements,\n.form-tabless-fields {\n    .clearfix();\n}\n\n.form-control {\n    position: relative;\n    -webkit-appearance: none;\n    // border: 1px solid @input-border;\n\n    &:focus {\n        border: 1px solid @input-border-focus; // gray-800\n        box-shadow: none;\n    }\n\n    &.growable, // @deprecated\n    &.is-growable {\n        width: 110px;\n        //.transition(width 0.2s);\n        &:focus,\n        &:active {\n            width: 200px !important;\n        }\n\n        @media (max-width: @screen-xs) {\n            width: 40px;\n            text-indent: -999px;\n\n            &:focus,\n            &:active {\n                text-indent: 0;\n                width: 100px !important;\n            }\n\n            &.icon {\n                padding-right: 0 !important;\n            }\n        }\n    }\n\n    &.is-searchable {\n        border-radius: 100px;\n    }\n}\n\n.search-input-container {\n    position: relative;\n\n    &:before {\n        position: absolute;\n        width: 16px;\n        height: 16px;\n        background-position: 0 -38px;\n        z-index: 1;\n        right: 8px;\n        top: 11px;\n    }\n}\n\n.form-group {\n    position: relative;\n    box-sizing: border-box;\n\n    &:empty {\n        display: none;\n    }\n\n    &, &.layout-item {\n        padding-bottom: @padding-standard;\n        margin-bottom: 0;\n    }\n\n    &.is-required {\n        > label:after {\n            background-color: @color-form-required-asterisk;\n            width: 5px;\n            height: 5px;\n            margin-left: 3px;\n            vertical-align: super;\n            font-size: 60%;\n            content: \"\";\n            display: inline-block;\n            border-radius: 8px;\n        }\n    }\n\n    .form-translatable {\n        display: inline-block;\n        position: relative;\n        height: 20px;\n        width: 25px;\n        border-radius: 5px;\n        background-color: @input-translatable-bg;\n        color: @input-translatable-color;\n\n        // Alignment\n        margin-bottom: -5px;\n        margin-left: 2px;\n\n        i {\n            font-size: 16px;\n            position: absolute;\n            top: 2px;\n            left: 4px;\n            cursor: pointer;\n        }\n\n        &.no-label {\n            position: absolute;\n            top: 1px;\n            right: 0;\n            left: auto;\n            z-index: 2;\n        }\n    }\n\n    &.span-full {\n        width: 100%;\n        float: left;\n    }\n\n    &.span-left {\n        float: left;\n        width: 48.5%;\n        clear: left;\n    }\n\n    &.span-right {\n        float: right;\n        width: 48.5%;\n        clear: right;\n    }\n\n    &.clear-full {\n        clear: both;\n    }\n\n    &.clear-left {\n        clear: left;\n    }\n\n    &.clear-right {\n        clear: right;\n    }\n\n    &.layout-relative {\n        padding-bottom: 0;\n    }\n\n    &.checkbox-field {\n        padding-bottom: 5px;\n\n        > .form-check {\n            margin-bottom: 10px;\n        }\n    }\n\n    &.radio-field {\n        > .form-check {\n            margin-bottom: 10px;\n        }\n    }\n\n    &.number-field {\n        > .form-control {\n            text-align: right;\n        }\n    }\n\n    &.radio-align {\n        padding-left: 23px;\n        margin-top: -20px;\n    }\n\n    &.checkbox-align {\n        padding-left: 23px;\n        margin-top: -5px;\n    }\n\n    &.field-align-above {\n        margin-top: -5px;\n    }\n\n    &.field-slim {\n        &.span-left,\n        &.span-right {\n            width: 50%;\n        }\n    }\n\n    &.field-indent {\n        padding-left: 23px;\n    }\n\n    // @deprecated (used by sitemap and pages)\n    &.input-sidebar-control {\n        padding-right: 35px;\n\n        .sidebar-control {\n            position: absolute;\n            right: 8px;\n            top: 34px;\n            font-size: 16px;\n            color: #C4C4C4;\n            &:hover,\n            &:focus {\n                text-decoration: none;\n                color: @link-color;\n                outline: none;\n            }\n        }\n    }\n}\n\n.form-horizontal {\n    .col-horizontal {\n        width: 155px;\n    }\n\n    .form-group {\n        &.checkbox-field {\n            padding-bottom: 20px;\n        }\n    }\n}\n\n.form-group-preview {\n    .form-control {\n        background-color: @input-disabled-bg;\n        height: auto;\n        min-height: 38px;\n        word-break: break-word;\n        box-shadow: none;\n    }\n\n    .custom-checkbox,\n    .custom-radio {\n        label {\n            cursor: default;\n        }\n    }\n}\n\n.col-form-label,\n.form-label {\n    font-weight: 600;\n}\n\n.form-text {\n    margin-bottom: 0;\n\n    &.before-field {\n        margin-top: -.135rem;\n        margin-bottom: .385rem;\n    }\n}\n\n.control-disabled {\n    .form-text {\n        opacity: .5;\n    }\n}\n\n.input-with-icon {\n    position: relative;\n\n    > .icon {\n        position: absolute;\n        z-index: @zindex-form;\n        padding: 10px;\n        pointer-events: none;\n        color: @color-form-field-icon;\n        font-size: 15px;\n        margin-top: 1px;\n    }\n\n    &.right-align {\n        > .icon {\n            right: 0;\n        }\n        input {\n            padding-right: 32px !important;\n        }\n    }\n\n    &.left-align {\n        > .icon {\n            left: 0;\n        }\n        input {\n            padding-left: 32px !important;\n        }\n    }\n\n    &.size-sm {\n        > .icon {\n            margin-top: 0;\n            padding: 5px 8px;\n        }\n    }\n}\n\n.input-no-spinner {\n    -moz-appearance: textfield;\n\n    &::-webkit-inner-spin-button,\n    &::-webkit-outer-spin-button {\n        -webkit-appearance: none;\n        margin: 0;\n    }\n}\n\n.field-section {\n    border-bottom: 1px solid var(--bs-border-color);\n    padding-top: 3px;\n    padding-bottom: 7px;\n\n    > h4 {\n        font-weight: 400;\n        font-size: 1.3rem;\n    }\n\n    > p:first-child,\n    > h4:first-child {\n        margin: 0;\n    }\n\n    &.is-collapsible {\n        cursor: pointer;\n\n        > h4:before {\n            // Icon\n            display: inline-block;\n            vertical-align: baseline;\n            .icon(@icon-chevron-up);\n\n            font-size: 12px;\n            margin: 2px 8px 0;\n            float: right;\n            color: rgba(0, 0, 0, .4);\n            .transition(all 0.3s);\n            .scaleAxes(1, 1);\n        }\n\n        &:hover {\n            border-bottom: 1px solid @input-border-fade;\n            > h4:before {\n                color: inherit;\n            }\n        }\n    }\n}\n\n.field-action {\n    border-bottom: 1px solid @input-border;\n    padding: 10px 0 5px;\n    margin-top: -20px;\n\n    h5 {\n        margin-bottom: .35rem;\n        margin-top: .75rem;\n        font-weight: 400;\n        font-size: 1rem;\n    }\n\n    p {\n        color: @secondary-color;\n        margin-bottom: 0;\n        font-size: .9rem;\n    }\n\n    .field-action-button {\n        margin-top: 15px;\n        margin-bottom: 10px;\n\n        @media (min-width: 992px) {\n            text-align: right;\n        }\n    }\n}\n\n.form-group.section-field.collapsed {\n    .field-section.is-collapsible > h4:before {\n        .scaleAxes(1, -1);\n    }\n}\n\n.field-horizontalrule hr {\n    height: 1px;\n    background: #000;\n    margin: 0;\n    opacity: .1;\n}\n\n.field-textarea {\n    resize: vertical;\n    &.size-tiny {\n        min-height: @size-tiny;\n    }\n    &.size-small {\n        min-height: @size-small;\n    }\n    &.size-large {\n        min-height: @size-large;\n    }\n    &.size-huge {\n        min-height: @size-huge;\n    }\n    &.size-giant {\n        min-height: @size-giant;\n    }\n}\n\n.field-checkboxlist {\n    .field-checkboxlist-inner {\n        border-radius: @border-radius-base;\n        background: @input-bg;\n        border: 1px solid @input-border;\n    }\n\n    &:not(.is-scrollable) {\n        .field-checkboxlist-inner {\n            padding: 15px 15px 2px 15px;\n        }\n    }\n\n    .checkboxlist-controls {\n        padding: 3px;\n        font-size: 0;\n        white-space: nowrap;\n        background: @input-bg;\n        border-top: 1px solid @input-border;\n        border-left: 1px solid @input-border;\n        border-right: 1px solid @input-border;\n        border-top-left-radius: @border-radius-base;\n        border-top-right-radius: @border-radius-base;\n\n        + .field-checkboxlist-inner {\n            border-top-left-radius: 0;\n            border-top-right-radius: 0;\n            border-top-color: @toolbar-border;\n        }\n    }\n\n    .form-check {\n        margin-bottom: 10px;\n    }\n\n    .checkboxlist-group {\n        margin: 0;\n        padding-left: 1.1rem;\n        list-style: none;\n    }\n\n    .checkboxlist-group, .checkboxlist-group-item {\n        /* alternative to :empty */\n        &:not(:has(*)) {\n            display: none;\n        }\n    }\n}\n\n.field-checkboxlist-scrollable {\n    height: @size-large + 100;\n\n    // First checkbox\n    .form-check {\n        margin-left: 15px;\n        margin-top: 15px;\n        margin-bottom: 10px;\n    }\n\n    // All others\n    .form-check ~ .form-check {\n        margin-top: 0;\n    }\n}\n\n.form-group.inline-options {\n    .field-checkboxlist:not(.is-scrollable) {\n        .field-checkboxlist-inner {\n            padding: 15px 15px 5px 15px;\n        }\n    }\n\n    .form-check {\n        display: inline-block;\n        margin-right: 15px;\n    }\n}\n\n.form-buttons {\n    .clearfix();\n    padding-bottom: @padding-standard;\n    font-size: 0;\n    width: 100%;\n\n    &.is-horizontal {\n        padding-left: 155px;\n    }\n\n    .btn {\n        margin-right: 7px;\n\n        &.no-margin-right {\n            margin-right: 0;\n        }\n    }\n\n    .btn-group {\n        margin-right: 7px;\n\n        .btn {\n            margin-right: 0;\n        }\n    }\n\n    .pull-right {\n        margin-right: 0;\n        margin-left: 7px;\n    }\n\n    &.buttons-offset {\n        padding-left: 20px;\n    }\n}\n\nbody.slim-container {\n    .form-buttons {\n        padding: 0 20px 20px;\n    }\n}\n\nbody .modal-footer {\n    .form-buttons {\n        padding: 0;\n    }\n}\n\n@media (max-width: @form-breakpoint-max) {\n    .form-group {\n        &.span-left,\n        &.span-right {\n            width: 100%;\n            clear: none;\n        }\n    }\n}\n\nbody.compact-container .form-fatal-error {\n    padding: 1rem @padding-standard 0 @padding-standard;\n}\n\n//\n// Select2\n//\n\n.select2-container--default .select2-selection--single .select2-selection__arrow b {\n    border: none;\n}\n\n.select2-dropdown {\n    z-index: @zindex-select;\n}\n\n//\n// Controls inside toolbar\n//\n\n[data-control~=toolbar] {\n    .form-control {\n        display: inline-block;\n        margin-right: 15px;\n    }\n\n    input[type=text].form-control,\n    label {\n        position: relative;\n        top: 5px;\n    }\n\n    label {\n        margin-right: 7px;\n\n        &.standalone {\n            margin-right: 15px;\n        }\n    }\n\n    .select2-container {\n        display: inline-block;\n        width: auto;\n        height: 36px;\n        margin-right: 15px;\n\n        .select2-selection__rendered {\n            line-height: 17px;\n        }\n\n        .select2-selection--single {\n            height: 36px;\n        }\n    }\n\n    select.form-control.custom-select {\n        display: none;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field-container.php",
    "content": "<div\n    class=\"form-group <?= $this->previewMode ? 'form-group-preview' : '' ?> <?= $field->type ?>-field span-<?= $field->span ?> <?= $field->spanClass ?> <?= $field->required ? 'is-required' : '' ?> <?= $field->stretch ? 'layout-relative' : '' ?> <?= $field->cssClass ?>\"\n    <?php if ($depends = $this->getFieldDepends($field)): ?>data-field-depends=\"<?= $depends ?>\"<?php endif ?>\n    <?php if ($field->changeHandler): ?>data-change-handler=\"<?= e($field->changeHandler) ?>\"<?php endif ?>\n    data-field-name=\"<?= $field->fieldName ?>\"\n    <?= $field->getAttributes('container') ?>\n    id=\"<?= $field->getId('group') ?>\"><?=\n    /* Must be on the same line for :empty selector */\n    trim($this->makePartial($this->horizontalMode ? 'horizontal_field' : 'field', [\n        'field' => $field\n    ]))\n?></div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field.php",
    "content": "<?php if (!$field->hidden): ?>\n\n    <?php if (!$this->showFieldLabels($field)): ?>\n\n        <?= $this->renderFieldElement($field) ?>\n\n    <?php else: ?>\n\n        <?php if ($field->label): ?>\n            <label for=\"<?= $field->getId() ?>\" class=\"form-label\">\n                <?= e(__($field->label)) ?>\n                <?php if ($field->tooltip): ?>\n                    <?= $this->makePartial('tooltip', ['field' => $field]) ?>\n                <?php endif ?>\n            </label>\n        <?php endif ?>\n\n        <?php if ($this->useTranslatable && $field->translatable && !$this->previewMode): ?>\n            <?= $this->makePartial('translate_button', ['field' => $field]) ?>\n        <?php endif ?>\n\n        <?php if ($fieldComment = $field->commentAbove): ?>\n            <p class=\"form-text before-field\"><?= $field->commentHtml ? trans($fieldComment) : e(__($fieldComment)) ?></p>\n        <?php endif ?>\n\n        <?= $this->renderFieldElement($field) ?>\n\n        <?php if ($fieldComment = $field->comment): ?>\n            <p class=\"form-text\"><?= $field->commentHtml ? trans($fieldComment) : e(__($fieldComment)) ?></p>\n        <?php endif ?>\n\n    <?php endif ?>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_balloon-selector.php",
    "content": "<?php\n    $emptyOption = $field->getConfig('allowEmpty');\n    $fieldOptions = $field->options();\n?>\n<!-- Balloon selector -->\n<div\n    id=\"<?= $field->getId() ?>\"\n    class=\"control-balloon-selector <?= $this->previewMode || $field->disabled ? 'control-disabled' : '' ?>\"\n    data-control=\"balloon-selector\"\n    <?= $emptyOption ? 'data-selector-allow-empty' : '' ?>\n    <?= $field->getAttributes() ?>\n>\n    <ul>\n        <?php foreach ($fieldOptions as $value => $text): ?>\n            <li data-value=\"<?= e($value) ?>\" class=\"<?= $field->isSelected($value) ? 'active' : '' ?>\"><?= $field->getDisplayValue($text) ?></li>\n        <?php endforeach ?>\n    </ul>\n\n    <input\n        type=\"hidden\"\n        name=\"<?= $field->getName() ?>\"\n        id=\"<?= $field->getId() ?>\"\n        value=\"<?= e($field->value) ?>\"\n    />\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_checkbox.php",
    "content": "<!-- Checkbox -->\n<div class=\"form-check\" <?php if ($this->previewMode): ?>tabindex=\"0\"<?php endif ?>>\n    <input\n        type=\"hidden\"\n        name=\"<?= $field->getName() ?>\"\n        value=\"0\"\n        <?= $this->previewMode ? 'disabled' : '' ?>\n    />\n    <input\n        class=\"form-check-input\"\n        type=\"checkbox\"\n        id=\"<?= $field->getId() ?>\"\n        name=\"<?= $field->getName() ?>\"\n        value=\"1\"\n        <?= $this->previewMode ? 'disabled' : '' ?>\n        <?= $field->isSelected() ? 'checked' : '' ?>\n        <?= $field->getAttributes() ?>\n    />\n\n    <label class=\"form-check-label\" for=\"<?= $field->getId() ?>\">\n        <?= e(__($field->label)) ?>\n        <?php if ($field->tooltip): ?>\n            <?= $this->makePartial('tooltip', ['field' => $field]) ?>\n        <?php endif ?>\n    </label>\n    <?php if ($field->comment): ?>\n        <p class=\"form-text\"><?= $field->commentHtml ? trans($field->comment) : e(__($field->comment)) ?></p>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_checkboxlist.php",
    "content": "<?php\n    $flatOptions = $field->options();\n    $fieldOptions = $field->asOptionsDefinition($flatOptions);\n    $isScrollable = count($flatOptions) > 10;\n    $checkedValues = (array) $field->value;\n    $inlineOptions = $field->inlineOptions && !$isScrollable;\n    $isQuickSelect = $field->getConfig('quickselect', $isScrollable);\n?>\n\n<?php $renderCheckboxListCheckboxFunc = function($option, $value) use (&$renderCheckboxListCheckboxFunc, $field, $inlineOptions, $checkedValues) { ?>\n    <?php\n        $checkboxId = 'checkbox_'.$field->getId().'_'.$value;\n    ?>\n    <?php if (!$this->previewMode || in_array($value, $checkedValues)): ?>\n        <div class=\"form-check <?= $inlineOptions ? 'form-check-inline' : '' ?>\">\n            <input\n                class=\"form-check-input\"\n                type=\"checkbox\"\n                id=\"<?= $checkboxId ?>\"\n                name=\"<?= $field->getName() ?>[]\"\n                value=\"<?= e($value) ?>\"\n                <?php if ($this->previewMode): ?>\n                    disabled\n                    checked\n                <?php else: ?>\n                    <?= in_array($value, $checkedValues) ? 'checked=\"checked\"' : '' ?>\n                    <?= $field->disabled || $option->disabled ? 'disabled' : '' ?>\n                    <?= $field->readOnly || $option->readOnly ? 'onclick=\"return false\"' : '' ?>\n                <?php endif ?>\n            />\n            <label class=\"form-check-label\" for=\"<?= $checkboxId ?>\">\n                <?= $field->getDisplayValue($option->label) ?>\n            </label>\n            <?php if ($option->comment && strlen($option->comment)): ?>\n                <p class=\"form-text\"><?= $field->getDisplayValue($option->comment) ?></p>\n            <?php endif ?>\n        </div>\n    <?php endif ?>\n\n    <?php if ($option->children): ?>\n        <ul class=\"checkboxlist-group\">\n            <?php foreach ($option->children as $value => $option): ?>\n                <li class=\"checkboxlist-group-item\">\n                    <?php $renderCheckboxListCheckboxFunc($option, $value) ?>\n                </li>\n            <?php endforeach ?>\n        </ul>\n    <?php endif ?>\n<?php }; ?>\n\n<!-- Checkbox List -->\n<?php if ($this->previewMode): ?>\n\n    <?php if ($field->value): ?>\n        <div class=\"field-checkboxlist control-disabled\">\n            <?php foreach ($fieldOptions as $value => $option): ?>\n                <?php $renderCheckboxListCheckboxFunc($option, $value) ?>\n            <?php endforeach ?>\n        </div>\n    <?php else: ?>\n        <!-- No options specified -->\n        <?php if ($field->placeholder): ?>\n            <p><?= e(__($field->placeholder)) ?></p>\n        <?php endif ?>\n    <?php endif ?>\n\n<?php else: ?>\n    <div class=\"field-checkboxlist <?= $field->cumulative ? 'is-cumulative' : '' ?> <?= $isScrollable ? 'is-scrollable' : '' ?> <?= $field->disabled ? 'control-disabled' : '' ?>\" <?= $field->getAttributes() ?>>\n        <?php if ($isQuickSelect): ?>\n            <!-- Quick selection -->\n            <div class=\"checkboxlist-controls\">\n                <a\n                    href=\"javascript:;\" class=\"backend-toolbar-button control-button\"\n                    <?= $field->disabled ? 'disabled' : '' ?>\n                    <?= $field->readOnly ? 'readonly' : '' ?>\n                    data-field-checkboxlist-all>\n                    <i class=\"icon-check-multi\"></i>\n                    <span class=\"button-label\"><?= e(trans('backend::lang.form.select_all')) ?></span>\n                </a>\n\n                <a\n                    href=\"javascript:;\" class=\"backend-toolbar-button control-button\"\n                    <?= $field->disabled ? 'disabled' : '' ?>\n                    <?= $field->readOnly ? 'readonly' : '' ?>\n                    data-field-checkboxlist-none>\n                    <i class=\"icon-eraser\"></i>\n                    <span class=\"button-label\"><?= e(trans('backend::lang.form.select_none')) ?></span>\n                </a>\n            </div>\n        <?php endif ?>\n\n        <div class=\"field-checkboxlist-inner\">\n            <?php if ($isScrollable): ?>\n                <!-- Scrollable Checkbox list -->\n                <div class=\"field-checkboxlist-scrollable\">\n                    <div class=\"control-scrollbar\" data-control=\"scrollbar\">\n            <?php endif ?>\n\n            <input\n                type=\"hidden\"\n                name=\"<?= $field->getName() ?>\"\n                value=\"\"\n                <?= $field->disabled ? 'disabled' : '' ?>\n            />\n\n            <?php if (count($fieldOptions)): ?>\n                <?php foreach ($fieldOptions as $value => $option): ?>\n                    <?php $renderCheckboxListCheckboxFunc($option, $value) ?>\n                <?php endforeach ?>\n            <?php else: ?>\n                <p class=\"text-muted\"><?= e(__($field->emptyOption)) ?></p>\n            <?php endif ?>\n\n            <?php if ($isScrollable): ?>\n                    </div>\n                </div>\n            <?php endif ?>\n\n        </div>\n    </div>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_dropdown.php",
    "content": "<?php\n    $emptyOption = $field->getConfig('emptyOption', $field->placeholder);\n    $useSearch = $field->getConfig('showSearch', true);\n    $flatOptions = $emptyOption ? ['' => __($emptyOption)] + $field->options() : $field->options();\n    $fieldOptions = $field->asOptionsDefinition($flatOptions);\n?>\n<?php $renderDropdownOptionFunc = function($option, $value, $depth = 0) use (&$renderDropdownOptionFunc, $field) { ?>\n    <?php\n        $indentStr = str_repeat('&nbsp;&nbsp;&nbsp;', $depth);\n    ?>\n    <option\n        <?= $field->isSelected($value) ? 'selected=\"selected\"' : '' ?>\n        <?php if ($option->color): ?>\n            data-status=\"<?= e($option->color) ?>\"\n        <?php elseif ($option->image): ?>\n            data-image=\"<?= e($option->image) ?>\"\n        <?php elseif ($option->icon): ?>\n            data-icon=\"<?= e($option->icon) ?>\"\n        <?php endif ?>\n        value=\"<?= e($value) ?>\"\n    ><?= $indentStr ?><?= $field->getDisplayValue($option->label) ?></option>\n\n    <?php if ($option->children): ?>\n        <?php foreach ($option->children as $value => $option): ?>\n            <?php $renderDropdownOptionFunc($option, $value, $depth + 1) ?>\n        <?php endforeach ?>\n    <?php endif ?>\n<?php }; ?>\n\n<!-- Dropdown -->\n<?php if ($this->previewMode || $field->readOnly): ?>\n    <div class=\"form-control\" <?= $field->readOnly ? 'disabled' : '' ?>>\n        <?php if ($option = $fieldOptions[$field->value] ?? null): ?>\n            <?php if ($option->color): ?>\n                <span class=\"status-indicator\" style=\"background:<?= e($option->color) ?>\"></span>\n            <?php elseif ($option->image): ?>\n                <img src=\"<?= e($option->image) ?>\" alt=\"\" />\n            <?php elseif ($option->icon): ?>\n                <i class=\"<?= e($option->icon) ?>\"></i>\n            <?php endif ?>\n            <?= $field->getDisplayValue($option->label) ?>\n        <?php endif ?>\n    </div>\n    <?php if ($field->readOnly): ?>\n        <input\n            type=\"hidden\"\n            name=\"<?= $field->getName() ?>\"\n            value=\"<?= $field->value ?>\" />\n    <?php endif ?>\n<?php else: ?>\n    <select\n        id=\"<?= $field->getId() ?>\"\n        name=\"<?= $field->getName() ?>\"\n        class=\"form-control custom-select <?= $useSearch ? '' : 'select-no-search' ?>\"\n        <?= $field->getAttributes() ?>\n        <?= $field->placeholder ? 'data-placeholder=\"'.e(__($field->placeholder)).'\"' : '' ?>\n    >\n        <?php foreach ($fieldOptions as $value => $option): ?>\n            <?php if ($option->optgroup): ?>\n                <optgroup label=\"<?= $field->getDisplayValue($option->label) ?>\">\n                    <?php foreach ($option->children as $value => $option): ?>\n                        <?php $renderDropdownOptionFunc($option, $value) ?>\n                    <?php endforeach ?>\n                </optgroup>\n            <?php else: ?>\n                <?php $renderDropdownOptionFunc($option, $value) ?>\n            <?php endif ?>\n        <?php endforeach ?>\n    </select>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_email.php",
    "content": "<!-- Email -->\n<?php if ($this->previewMode): ?>\n    <span class=\"form-control\"><?= $field->value ? e($field->value) : '&nbsp;' ?></span>\n<?php else: ?>\n    <input\n        type=\"email\"\n        name=\"<?= $field->getName() ?>\"\n        id=\"<?= $field->getId() ?>\"\n        value=\"<?= e($field->value) ?>\"\n        placeholder=\"<?= e(__($field->placeholder)) ?>\"\n        class=\"form-control\"\n        <?= $field->getAttributes() ?>\n    />\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_hint.php",
    "content": "<?php if ($field->path): ?>\n    <?= $this->controller->makeHintPartial($field->getId(), $field->path, [\n        'formModel' => $formModel,\n        'formField' => $field,\n        'formValue' => $field->value,\n        'model' => $formModel,\n        'field' => $field,\n        'value' => $field->value\n    ]) ?>\n<?php else: ?>\n    <?php\n        $callout = Ui::callout();\n\n        if ($field->label) {\n            $callout->label(e(__($field->label)));\n        }\n\n        if ($field->comment) {\n            $callout->commentHtml(\n                $field->commentHtml\n                    ? '<p>'.trans($field->comment).'</p>'\n                    : Markdown::parse(e(__($field->comment)))\n            );\n        }\n\n        switch ($field->getConfig('mode')) {\n            case 'success':\n                $callout->success();\n                break;\n            case 'danger':\n                $callout->danger();\n                break;\n            case 'warning':\n                $callout->warning();\n                break;\n            case 'tip':\n            case 'info':\n            default:\n                $callout->tip();\n                break;\n        }\n    ?>\n    <?= $callout ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_number.php",
    "content": "<!-- Number -->\n<?php if ($this->previewMode): ?>\n    <span class=\"form-control\"><?= ($field->value || (string) $field->value === '0') ? e($field->value) : '&nbsp;' ?></span>\n<?php else: ?>\n    <input\n        type=\"number\"\n        step=\"<?= $field->step ?: 'any' ?>\"\n        name=\"<?= $field->getName() ?>\"\n        id=\"<?= $field->getId() ?>\"\n        value=\"<?= e($field->value) ?>\"\n        placeholder=\"<?= e(__($field->placeholder)) ?>\"\n        class=\"form-control <?= $field->step === null ? 'input-no-spinner' : '' ?>\"\n        autocomplete=\"off\"\n        <?= $field->min !== null ? 'min=\"' . $field->min . '\"' : '' ?>\n        <?= $field->max !== null ? 'max=\"' . $field->max . '\"' : '' ?>\n        <?= $field->hasAttribute('pattern') ? '' : 'pattern=\"-?\\d+(\\.\\d+)?\"' ?>\n        <?= $field->hasAttribute('maxlength') ? '' : 'maxlength=\"255\"' ?>\n        <?= $field->getAttributes() ?>\n    />\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_partial.php",
    "content": "<?php\n    $vars = [\n        'formModel' => $formModel,\n        'formField' => $field,\n        'formValue' => $field->value,\n        'model' => $formModel,\n        'field' => $field,\n        'value' => $field->value\n    ];\n?>\n<?php if (str_contains($field->path, '::')): ?>\n    <?= View::make($field->path, $vars) ?>\n<?php elseif ($field->path && File::isPathSymbol($field->path)): ?>\n    <?= $this->controller->makePartial($field->path, $vars) ?>\n<?php else: ?>\n    <?php\n        // @deprecated forever?\n        $oldViewFile = $field->path ?: ltrim($field->fieldName, '_');\n        $viewFile = $field->path ?: 'field_' . ltrim($field->fieldName, '_');\n        $modelPath = $this->guessViewPathFrom($formModel);\n    ?>\n    <?= ($this->controller->makePartial(\"{$modelPath}/{$viewFile}\", $vars, false)\n            ?: $this->controller->makePartial($viewFile, $vars, false))\n            ?: $this->controller->makePartial($oldViewFile, $vars) ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_password.php",
    "content": "<!-- Password -->\n<?php if ($this->previewMode): ?>\n    <div class=\"form-control\">********</div>\n<?php else: ?>\n    <input\n        type=\"password\"\n        name=\"<?= $field->getName() ?>\"\n        id=\"<?= $field->getId() ?>\"\n        value=\"\"\n        placeholder=\"<?= e(__($field->placeholder)) ?>\"\n        class=\"form-control\"\n        autocomplete=\"off\"\n        <?= $field->hasAttribute('maxlength') ? '' : 'maxlength=\"255\"' ?>\n        <?= $field->getAttributes() ?>\n    />\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_radio.php",
    "content": "<?php\n    $fieldOptions = $field->asOptionsDefinition();\n    $inlineOptions = $field->inlineOptions;\n?>\n<!-- Radio List -->\n<?php if (count($fieldOptions)): ?>\n    <?php if ($inlineOptions): ?><div><?php endif ?>\n        <?php foreach ($fieldOptions as $value => $option): ?>\n            <?php\n                $radioId = 'checkbox_'.$field->getId().'_'.$value;\n            ?>\n            <div class=\"form-check <?= $inlineOptions ? 'form-check-inline' : '' ?>\">\n                <input\n                    class=\"form-check-input\"\n                    id=\"<?= $radioId ?>\"\n                    name=\"<?= $field->getName() ?>\"\n                    value=\"<?= e($value) ?>\"\n                    type=\"radio\"\n                    <?= $field->isSelected($value) ? 'checked' : '' ?>\n                    <?= $this->previewMode || $option->disabled ? 'disabled' : '' ?>\n                    <?= $field->getAttributes() ?>\n                />\n\n                <label class=\"form-check-label\" for=\"<?= $radioId ?>\">\n                    <?= $field->getDisplayValue($option->label) ?>\n                </label>\n                <?php if ($option->comment && strlen($option->comment)): ?>\n                    <p class=\"form-text\"><?= $field->getDisplayValue($option->comment) ?></p>\n                <?php endif ?>\n            </div>\n        <?php endforeach ?>\n    <?php if ($inlineOptions): ?></div><?php endif ?>\n<?php else: ?>\n\n    <!-- No options specified -->\n    <?php if ($field->placeholder): ?>\n        <p><?= e(__($field->placeholder)) ?></p>\n    <?php endif ?>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_ruler.php",
    "content": "<!-- Horizontal Rule -->\n<?php if ($field->label): ?>\n    <label for=\"<?= $field->getId() ?>\" class=\"form-label\">\n        <?= e(__($field->label)) ?>\n    </label>\n<?php endif ?>\n<div class=\"field-horizontalrule\">\n    <hr />\n</div>\n<?php if ($field->comment): ?>\n    <p class=\"form-text\">\n        <?= $field->commentHtml ? trans($field->comment) : e(__($field->comment)) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_section.php",
    "content": "<!-- Section -->\n<div class=\"field-section\">\n    <?php if ($field->label): ?>\n        <?php if ($field->displayMode === 'simple'): ?>\n            <label><?= e(__($field->label)) ?></label>\n        <?php else: ?>\n            <h4><?= e(__($field->label)) ?></h4>\n        <?php endif ?>\n    <?php endif ?>\n\n    <?php if ($field->comment): ?>\n        <p class=\"form-text\"><?= $field->commentHtml ? trans($field->comment) : e(__($field->comment)) ?></p>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_switch.php",
    "content": "<!-- Switch -->\n<div class=\"form-check form-switch\" <?php if ($this->previewMode): ?>tabindex=\"0\"<?php endif ?>>\n    <input\n        type=\"hidden\"\n        name=\"<?= $field->getName() ?>\"\n        value=\"0\"\n        <?= $this->previewMode ? 'disabled' : '' ?>>\n    <input\n        class=\"form-check-input\"\n        type=\"checkbox\"\n        id=\"<?= $field->getId() ?>\"\n        name=\"<?= $field->getName() ?>\"\n        value=\"1\"\n        <?= $this->previewMode ? 'disabled' : '' ?>\n        <?= $field->isSelected() ? 'checked' : '' ?>\n        <?= $field->getAttributes() ?>\n    />\n\n    <label class=\"form-check-label\" for=\"<?= $field->getId() ?>\">\n        <?= e(__($field->label)) ?>\n        <?php if ($field->tooltip): ?>\n            <?= $this->makePartial('tooltip', ['field' => $field]) ?>\n        <?php endif ?>\n    </label>\n    <?php if ($field->comment): ?>\n        <p class=\"form-text\"><?= $field->commentHtml ? trans($field->comment) : e(__($field->comment)) ?></p>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_text.php",
    "content": "<!-- Text -->\n<?php if ($this->previewMode): ?>\n    <span class=\"form-control\"><?= $field->value ? e($field->value) : '&nbsp;' ?></span>\n<?php else: ?>\n    <input\n        type=\"text\"\n        name=\"<?= $field->getName() ?>\"\n        id=\"<?= $field->getId() ?>\"\n        value=\"<?= e($field->value) ?>\"\n        placeholder=\"<?= e(__($field->placeholder)) ?>\"\n        class=\"form-control\"\n        autocomplete=\"off\"\n        <?= $field->hasAttribute('maxlength') ? '' : 'maxlength=\"255\"' ?>\n        <?= $field->getAttributes() ?>\n    />\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_textarea.php",
    "content": "<!-- Textarea -->\n<?php if ($this->previewMode): ?>\n    <div class=\"form-control\"><?= nl2br(e($field->value)) ?></div>\n<?php else: ?>\n    <textarea\n        name=\"<?= $field->getName() ?>\"\n        id=\"<?= $field->getId() ?>\"\n        autocomplete=\"off\"\n        class=\"form-control field-textarea size-<?= $field->size ?>\"\n        placeholder=\"<?= e(__($field->placeholder)) ?>\"\n        <?= $field->getAttributes() ?>><?= e($field->value) ?></textarea>\n<?php endif?>"
  },
  {
    "path": "modules/backend/widgets/form/partials/_field_widget.php",
    "content": "<!-- Widget -->\n<?php\n    $widget = $this->makeFormFieldWidget($field);\n?>\n<?= $widget->render() ?>"
  },
  {
    "path": "modules/backend/widgets/form/partials/_form-container.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    data-control=\"formwidget\"\n    data-refresh-handler=\"<?= $this->getEventHandler('onRefresh') ?>\"\n    class=\"form-widget form-elements layout <?= $this->horizontalMode ? 'form-horizontal' : '' ?>\"\n    role=\"form\">\n    <?= $this->makePartial('form') ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_form.php",
    "content": "<?php if ($outsideTabs->hasFields()): ?>\n    <?= $this->makePartial('section', ['tabs' => $outsideTabs]) ?>\n<?php endif ?>\n\n<?php if ($primaryTabs->hasFields()): ?>\n    <?= $this->makePartial('section', ['tabs' => $primaryTabs]) ?>\n<?php endif ?>\n\n<?php if ($secondaryTabs->hasFields()): ?>\n    <?= $this->makePartial('section', ['tabs' => $secondaryTabs]) ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_form_fields.php",
    "content": "<?php\n    $rowOpen = false;\n?>\n<?php foreach ($fields as $field): ?>\n    <?php if ($field->span === 'row' && !$rowOpen): $rowOpen = true; ?>\n        <div class=\"row w-100\">\n    <?php endif ?>\n    <?php if ($field->span !== 'row' && $rowOpen): $rowOpen = false; ?>\n        </div>\n    <?php endif ?>\n    <?= $this->makePartial('field-container', ['field' => $field]) ?>\n<?php endforeach ?>\n<?php if ($rowOpen): $rowOpen = false; ?>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_form_fields_lazy.php",
    "content": "<div class=\"loading-indicator-container m-t\">\n    <div class=\"loading-indicator indicator-center\">\n        <span></span>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_form_tabs.php",
    "content": "<?php\n    $navCss = '';\n    $contentCss = '';\n    $paneCss = '';\n\n    if ($tabs->stretch) {\n        $navCss = 'layout-row min-size';\n        $contentCss = 'layout-row flex-grow-1';\n        $paneCss = 'layout-cell';\n    }\n?>\n<div class=\"<?= $navCss ?>\">\n    <ul class=\"nav nav-tabs\">\n        <?php $index = 0; foreach ($tabs as $name => $fields): $index++ ?>\n            <?php\n                $isActive = $tabs->isPaneActive($index, $name);\n                $isLazy = !$isActive && $tabs->isLazy($name);\n                $anchorId = $tabs->getPaneAnchorId($index, $name);\n                $tabId = $tabs->getTabId($name);\n                $tabClass = ($isActive ? 'active ' : '')\n                    . ($isLazy ? 'tab-lazy ' : '');\n            ?>\n            <li class=\"<?= $tabClass ?>\" <?php if ($tabId): ?>id=\"<?= $tabId ?>\"<?php endif ?>>\n                <a href=\"#<?= e($anchorId) ?>\" name=\"<?= e($anchorId) ?>\"\n                    <?php if ($isLazy): ?>\n                        data-tab-name=\"<?= e($name) ?>\"\n                        data-tab-section=\"<?= $tabs->section ?>\"\n                        data-tab-lazy-handler=\"<?= $this->getEventHandler('onLazyLoadTab') ?>\"\n                    <?php endif ?>\n                >\n                    <span class=\"title\">\n                        <span>\n                            <?php if ($tabs->getIcon($name)): ?>\n                                <span class=\"<?= $tabs->getIcon($name) ?>\"></span>\n                            <?php endif ?>\n                            <?= e(trans($name)) ?>\n                        </span>\n                    </span>\n                </a>\n            </li>\n        <?php endforeach ?>\n    </ul>\n</div>\n\n<div class=\"tab-content <?= $contentCss ?>\">\n    <?php $index = 0; foreach ($tabs as $name => $fields): $index++ ?>\n        <?php\n            $isActive = $tabs->isPaneActive($index, $name);\n            $isLazy = !$isActive && $tabs->isLazy($name);\n            $isAdaptive = $tabs->isAdaptive($name);\n            $paneId = $tabs->getPaneId($name);\n            $paneClass = 'tab-pane '\n                . ($isLazy ? 'is-lazy ' : '')\n                . ($isAdaptive ? 'is-adaptive ' : '')\n                . ($tabs->getPaneCssClass($index, $name) . ' ')\n                . ($isActive ? 'active ' : '')\n                . $paneCss;\n        ?>\n        <div class=\"<?= $paneClass ?>\" <?php if ($paneId): ?>id=\"<?= $paneId ?>\"<?php endif ?>>\n            <?php if ($isLazy): ?>\n                <?= $this->makePartial('form_fields_lazy', ['fields' => $fields]) ?>\n            <?php else: ?>\n                <?= $this->makePartial('form_fields', ['fields' => $fields]) ?>\n            <?php endif ?>\n        </div>\n    <?php endforeach ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_form_tabs_survey.php",
    "content": "\n<?php\n    $contentCss = '';\n    $paneCss = '';\n\n    if ($tabs->stretch) {\n        $contentCss = 'align-items-stretch';\n        $paneCss = '';\n    }\n?>\n<div class=\"row <?= $contentCss ?>\">\n    <?php $index = 0; foreach ($tabs as $name => $fields): $index++ ?>\n        <?php\n            $isAdaptive = $tabs->isAdaptive($name);\n        ?>\n        <div class=\"col-12 <?= e($tabs->getPaneCssClass($index, $name)) ?> <?= $paneCss ?>\">\n            <h4 class=\"my-3 fw-normal\"><?= e(trans($name)) ?></h4>\n            <?= $this->makePartial('form_fields', ['fields' => $fields]) ?>\n        </div>\n    <?php endforeach ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_horizontal_field.php",
    "content": "<?php if (!$field->hidden): ?>\n    <?php\n        $showLabels = $this->showFieldLabels($field);\n    ?>\n    <div class=\"row mb-1\">\n        <div class=\"col-horizontal\">\n            <?php if ($showLabels): ?>\n                <?php if ($field->label): ?>\n                    <label for=\"<?= $field->getId() ?>\" class=\"col-form-label\">\n                        <?= e(__($field->label)) ?>\n                        <?php if ($field->tooltip): ?>\n                            <?= $this->makePartial('tooltip', ['field' => $field]) ?>\n                        <?php endif ?>\n                    </label>\n                <?php endif ?>\n\n                <?php if ($this->useTranslatable && $field->translatable && !$this->previewMode): ?>\n                    <?= $this->makePartial('translate_button', ['field' => $field]) ?>\n                <?php endif ?>\n\n                <?php if ($fieldComment = $field->commentAbove): ?>\n                    <p class=\"form-text before-field\"><?= $field->commentHtml ? trans($fieldComment) : e(__($fieldComment)) ?></p>\n                <?php endif ?>\n            <?php endif ?>\n        </div>\n        <div class=\"col\">\n            <?= $this->renderFieldElement($field) ?>\n\n            <?php if ($showLabels): ?>\n                <?php if ($fieldComment = $field->comment): ?>\n                    <p class=\"form-text\"><?= $field->commentHtml ? trans($fieldComment) : e(__($fieldComment)) ?></p>\n                <?php endif ?>\n            <?php endif ?>\n        </div>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_section-container.php",
    "content": "<div\n    data-control=\"formwidget\"\n    data-refresh-handler=\"<?= $this->getEventHandler('onRefresh') ?>\"\n    class=\"layout-row <?= $this->horizontalMode ? 'form-horizontal' : '' ?>\"\n    role=\"form\"\n    id=\"<?= $this->getId($renderSection.'Container') ?>\">\n\n    <?php if ($renderSection == 'outside'): ?>\n        <?= $this->makePartial('section', ['tabs' => $outsideTabs]) ?>\n    <?php endif ?>\n\n    <?php if ($renderSection == 'primary'): ?>\n        <?= $this->makePartial('section', ['tabs' => $primaryTabs]) ?>\n    <?php endif ?>\n\n    <?php if ($renderSection == 'secondary'): ?>\n        <?= $this->makePartial('section', ['tabs' => $secondaryTabs]) ?>\n    <?php endif ?>\n\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_section.php",
    "content": "<?php\n    $type = $tabs->section;\n    $containerCss = 'layout-row min-size';\n\n    if ($tabs->stretch) {\n        $containerCss = 'layout-row';\n    }\n?>\n<!-- <?= ucfirst($type) ?> Tabs -->\n<div class=\"<?= $containerCss ?>\">\n    <?php if ($tabs->suppressTabs): ?>\n\n        <div\n            id=\"<?= $this->getId($type.'Tabs') ?>\"\n            class=\"form-tabless-fields <?= $tabs->cssClass ?>\">\n            <?= $this->makePartial('form_fields', ['fields' => $tabs]) ?>\n        </div>\n\n    <?php else: ?>\n\n        <div\n            id=\"<?= $this->getId($type.'Tabs') ?>\"\n            class=\"control-tabs <?= $type ?>-tabs layout <?= $tabs->cssClass ?>\"\n            <?= $tabs->linkable ? 'data-linkable' : '' ?>\n            <?php if (iterator_count($tabs) === 1): ?>data-single-tab<?php endif ?>\n            data-control=\"tab\">\n            <?= $this->makePartial($this->surveyMode ? 'form_tabs_survey' : 'form_tabs', [\n                'tabs' => $tabs\n            ]) ?>\n        </div>\n\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_tooltip.php",
    "content": "<?php\n    $tooltip = is_array($field->tooltip) ? $field->tooltip : ['title' => $field->tooltip];\n    $tooltipIsHtml = $tooltip['isHtml'] ?? false;\n    $tooltipPlacement = $tooltip['placement'] ?? 'top';\n    $tooltipIcon = $tooltip['icon'] ?? 'icon-info-circle';\n    $tooltipTitle = $tooltipIsHtml ? $this->getFieldTooltipValue($field) : e($this->getFieldTooltipValue($field));\n?>\n<span class=\"field-tooltip\">\n    <i class=\"<?= $tooltipIcon ?>\"\n        data-bs-toggle=\"tooltip\"\n        data-bs-placement=\"<?= $tooltipPlacement ?>\"\n        <?= $tooltipIsHtml ? 'data-bs-html=\"true\"' : '' ?>\n        data-bs-title=\"<?= $tooltipTitle ?>\"\n    ></i>\n</span>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_translate_button.php",
    "content": "<?php\n    $translatableSites = $this->getTranslatableSites($this->model, $field);\n?>\n<?php if ($translatableSites->isNotEmpty()): ?>\n    <span class=\"form-translatable <?= $field->label ? '' : 'no-label' ?> dropdown\">\n        <i class=\"icon-globe\" data-bs-toggle=\"dropdown\" role=\"button\"></i>\n        <ul class=\"dropdown-menu\">\n            <?php foreach ($translatableSites as $translatableSite): ?>\n                <li>\n                    <a\n                        class=\"dropdown-item\"\n                        href=\"javascript:;\"\n                        data-control=\"popup\"\n                        data-handler=\"<?= $this->getEventHandler('onLoadTranslateField') ?>\"\n                        data-request-data=\"field_name: '<?= e($field->fieldName) ?>', site_id: '<?= e($translatableSite->id) ?>'\"\n                    ><?= e($translatableSite->name) ?></a>\n                </li>\n            <?php endforeach ?>\n        </ul>\n    </span>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/form/partials/_translate_popup.php",
    "content": "<div data-popup-size=\"750\">\n    <?= Form::ajax($this->getEventHandler('onSaveTranslateField'), [\n        'sessionKey' => $translatableSessionKey,\n        'data-popup-load-indicator' => true,\n    ]) ?>\n        <input type=\"hidden\" name=\"field_name\" value=\"<?= e($translatableField->fieldName) ?>\" />\n        <input type=\"hidden\" name=\"site_id\" value=\"<?= e($translatableSite->id) ?>\" />\n        <input type=\"hidden\" name=\"model_id\" value=\"<?= e($translatableModelId) ?>\" />\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\">\n                <?=  e($translatableSite->name) ?>\n            </h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n        <div class=\"modal-body\">\n            <?= $translatableFormWidget->render() ?>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::button(\n                label: __('backend::lang.form.save'),\n                primary: true,\n                type: 'submit',\n                hotkey: ['ctrl+s', 'cmd+s']\n            ) ?>\n            <span class=\"btn-text\">\n                <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                <?= Ui::button(\n                    label: __('backend::lang.form.cancel'),\n                    class: 'btn-link p-0',\n                    dataDismiss: 'popup'\n                ) ?>\n            </span>\n        </div>\n    <?= Form::close() ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/lists/ColumnProcessor.php",
    "content": "<?php namespace Backend\\Widgets\\Lists;\n\nuse BackendAuth;\n\n/**\n * ColumnProcessor concern\n */\ntrait ColumnProcessor\n{\n    /**\n     * processColumnTypeModifiers\n     */\n    protected function processColumnTypeModifiers(array &$columns)\n    {\n        foreach ($columns as $column) {\n            if ($column->type === 'linkage') {\n                $column->clickable(false);\n            }\n        }\n    }\n\n    /**\n     * processPermissionCheck check if user has permissions to show the column\n     * and removes it if permission is denied\n     */\n    protected function processPermissionCheck(array $columns): void\n    {\n        foreach ($columns as $columnName => $column) {\n            if (\n                $column->permissions &&\n                !BackendAuth::userHasAccess($column->permissions, false)\n            ) {\n                $this->removeColumn($columnName);\n            }\n        }\n    }\n\n    /**\n     * processAutoOrder applies a default sort order to all columns\n     */\n    protected function processAutoOrder(array &$columns)\n    {\n        // Build before and after map\n        $beforeMap = $afterMap = [];\n        foreach ($columns as $column) {\n            if ($column->after && isset($columns[$column->after])) {\n                $afterMap[$column->columnName] = $columns[$column->after]->columnName;\n            }\n            elseif ($column->before && isset($columns[$column->before])) {\n                $beforeMap[$column->columnName] = $columns[$column->before]->columnName;\n            }\n        }\n\n        // Apply incremental default orders\n        $orderCount = 0;\n        foreach ($columns as $column) {\n            if (\n                $column->order !== -1 ||\n                isset($afterMap[$column->columnName]) ||\n                isset($beforeMap[$column->columnName])\n            ) {\n                continue;\n            }\n            $column->order = ($orderCount += 100);\n        }\n\n        // Apply before and after\n        foreach ($beforeMap as $from => $to) {\n            $columns[$from]->order = $columns[$to]->order - 1;\n        }\n        foreach ($afterMap as $from => $to) {\n            $columns[$from]->order = $columns[$to]->order + 1;\n        }\n\n        // Sort columns\n        uasort($columns, static function ($a, $b) {\n            return $a->order - $b->order;\n        });\n    }\n\n    /**\n     * processHiddenColumns purges hidden columns\n     */\n    protected function processHiddenColumns(array $columns)\n    {\n        foreach ($columns as $key => $column) {\n            if ($column->hidden) {\n                $this->removeColumn($key);\n            }\n        }\n    }\n\n    /**\n     * processUserColumnOrders applies a supplied column order from a user preference\n     */\n    protected function processUserColumnOrders(array &$columns, $userPreference)\n    {\n        if ($userPreference) {\n            $orderedDefinitions = [];\n            foreach ((array) $userPreference as $column) {\n                if (isset($columns[$column])) {\n                    $orderedDefinitions[$column] = $columns[$column];\n                }\n            }\n\n            $columns = array_merge($orderedDefinitions, $columns);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/lists/HasListSetup.php",
    "content": "<?php namespace Backend\\Widgets\\Lists;\n\n/**\n * HasListSetup concern\n */\ntrait HasListSetup\n{\n    /**\n     * onLoadSetup handler to display the list set up.\n     */\n    public function onLoadSetup()\n    {\n        $this->vars['columns'] = $this->getSetupListColumns();\n        $this->vars['perPageOptions'] = $this->getSetupPerPageOptions();\n        $this->vars['recordsPerPage'] = $this->recordsPerPage;\n        return $this->makePartial('setup_form');\n    }\n\n    /**\n     * onApplySetup handler\n     */\n    public function onApplySetup()\n    {\n        if (($visibleColumns = post('visible_columns')) && is_array($visibleColumns)) {\n            $this->columnOverride = $visibleColumns;\n            $this->putUserPreference('visible', $this->columnOverride);\n        }\n\n        $this->recordsPerPage = post('records_per_page', $this->recordsPerPage);\n\n        $this->putUserPreference('order', post('column_order'));\n\n        $this->putUserPreference('per_page', $this->recordsPerPage);\n\n        return $this->onRefresh();\n    }\n\n    /**\n     * onResetSetup handler\n     */\n    public function onResetSetup()\n    {\n        $this->resetUserPreference('visible');\n\n        $this->resetUserPreference('per_page');\n\n        $this->resetUserPreference('order');\n\n        $this->resetSession();\n\n        $this->init();\n\n        return $this->onRefresh();\n    }\n\n    /**\n     * Returns an array of allowable records per page.\n     */\n    protected function getSetupPerPageOptions()\n    {\n        $perPageOptions = is_array($this->perPageOptions)\n            ? $this->perPageOptions\n            : [20, 40, 80, 100, 120];\n\n        if (!in_array($this->recordsPerPage, $perPageOptions)) {\n            $perPageOptions[] = $this->recordsPerPage;\n        }\n\n        sort($perPageOptions);\n\n        return $perPageOptions;\n    }\n\n    /**\n     * getSetupListColumns returns all the list columns used for list set up.\n     */\n    protected function getSetupListColumns()\n    {\n        // Force all columns invisible\n        $columns = $this->defineListColumns();\n        foreach ($columns as $column) {\n            $column->invisible = true;\n        }\n\n        return array_merge($columns, $this->getVisibleColumns());\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/lists/HasSearch.php",
    "content": "<?php namespace Backend\\Widgets\\Lists;\n\nuse Backend;\n\n/**\n * HasSearch concern\n *\n * @mixin \\Backend\\Traits\\SessionMaker\n */\ntrait HasSearch\n{\n    /**\n     * @var string Filter the records by a search term.\n     */\n    protected $searchTerm;\n\n    /**\n     * @var string If searching the records, specifies a policy to use.\n     * - all: result must contain all words\n     * - any: result can contain any word\n     * - exact: result must contain the exact phrase\n     */\n    protected $searchMode;\n\n    /**\n     * @var string Use a custom scope method for performing searches.\n     */\n    protected $searchScope;\n\n    /**\n     * setSearchTerm applies a search term to the list results.\n     * @param string $term\n     * @param boolean $resetState\n     */\n    public function setSearchTerm($term, $resetState = false)\n    {\n        // Reset pagination\n        if ($resetState) {\n            $this->currentPageNumber = 1;\n        }\n\n        // Set the actual term\n        $this->searchTerm = $term;\n    }\n\n    /**\n     * setSearchOptions applies a search options to the list search.\n     * @param array $options\n     */\n    public function setSearchOptions($options = [])\n    {\n        extract(array_merge([\n            'mode' => null,\n            'scope' => null\n        ], $options));\n\n        $this->searchMode = $mode;\n        $this->searchScope = $scope;\n    }\n\n    /**\n     * getSearchableColumns returns a collection of columns which can be searched.\n     * @return array\n     */\n    protected function getSearchableColumns()\n    {\n        $columns = $this->getColumns();\n        $searchable = [];\n\n        foreach ($columns as $column) {\n            if (!$column->searchable) {\n                continue;\n            }\n\n            $searchable[] = $column;\n        }\n\n        return $searchable;\n    }\n\n    /**\n     * applySearchToQuery applies the search constraint to a query.\n     */\n    protected function applySearchToQuery($query, $columns, $boolean = 'and')\n    {\n        $term = $this->searchTerm;\n\n        if ($scopeMethod = $this->searchScope) {\n            $searchMethod = $boolean == 'and' ? 'where' : 'orWhere';\n            $query->$searchMethod(function ($q) use ($term, $columns, $scopeMethod) {\n                $q->$scopeMethod($term, $columns);\n            });\n        }\n        else {\n            $searchMethod = $boolean == 'and' ? 'searchWhere' : 'orSearchWhere';\n            $query->$searchMethod($term, $columns, $this->searchMode);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/lists/HasSorting.php",
    "content": "<?php namespace Backend\\Widgets\\Lists;\n\n/**\n * HasSorting concern\n *\n * @mixin \\Backend\\Traits\\SessionMaker\n */\ntrait HasSorting\n{\n    /**\n     * @var array All sortable columns.\n     */\n    protected $sortableColumns;\n\n    /**\n     * @var string Sets the list sorting column.\n     */\n    protected $sortColumn;\n\n    /**\n     * @var string sortDirection sets the list sorting direction (asc, desc)\n     */\n    protected $sortDirection;\n\n    /**\n     * @var string sortStep allows for indeterminate sorting\n     */\n    protected $sortStep;\n\n    /**\n     * onSort AJAX handler for sorting the list.\n     */\n    public function onSort()\n    {\n        $column = post('sortColumn');\n        if (!$column) {\n            return;\n        }\n\n        $sortOptions = [\n            'column' => $this->getSortColumn(),\n            'direction' => $this->getSortDirection(),\n            'step' => $this->getSortStep()\n        ];\n\n        $isSameColumn = $column === $sortOptions['column'];\n        $otherDirection = $sortOptions['direction'] !== 'asc' ? 'asc' : 'desc';\n\n        // Sorting the same column\n        if ($isSameColumn) {\n            $sortOptions['column'] = $column;\n            $sortOptions['direction'] = $otherDirection;\n            $sortOptions['step']++;\n        }\n        // Sorting a new column\n        else {\n            $sortOptions['column'] = $column;\n            $sortOptions['direction'] = 'desc';\n            $sortOptions['step'] = 1;\n        }\n\n        // Finish up\n        $this->sortDirection = $sortOptions['direction'];\n        $this->sortColumn = $sortOptions['column'];\n        $this->sortStep = $sortOptions['step'];\n\n        // Persist the page number\n        $this->currentPageNumber = post('page');\n\n        // Attempt a refresh with the new sortOptions and update the\n        // the user session only if the query succeeded.\n        $result = $this->onRefresh();\n\n        $this->putSession('sort', $sortOptions);\n\n        return $result;\n    }\n\n    /**\n     * getSortColumn returns the current sorting column, saved in a session or cached.\n     */\n    public function getSortColumn()\n    {\n        if (!$this->isSortable() || !$this->useSorting()) {\n            return false;\n        }\n\n        if ($this->sortColumn !== null) {\n            return $this->sortColumn;\n        }\n\n        // Defaults\n        $this->sortStep = 0;\n        $this->sortDirection = 'asc';\n\n        // User preference\n        if ($this->showSorting && ($sortOptions = $this->getSession('sort'))) {\n            $this->sortColumn = $sortOptions['column'] ?? '';\n            $this->sortDirection = $sortOptions['direction'] ?? $this->sortDirection;\n            $this->sortStep = $sortOptions['step'] ?? $this->sortStep;\n        }\n        // Supplied default\n        else {\n            if (is_string($this->defaultSort)) {\n                $this->sortColumn = $this->defaultSort;\n            }\n            elseif (is_array($this->defaultSort) && isset($this->defaultSort['column'])) {\n                $this->sortColumn = $this->defaultSort['column'];\n                $this->sortDirection = $this->defaultSort['direction'] ?? $this->sortDirection;\n            }\n            else {\n                foreach ($this->getColumns() as $column) {\n                    if (!$column->sortableDefault) {\n                        continue;\n                    }\n                    $this->sortColumn = $column->columnName;\n                    if (is_string($column->sortableDefault)) {\n                        $this->sortDirection = $column->sortableDefault;\n                    }\n                    break;\n                }\n            }\n        }\n\n        // If an invalid column is found, reset to the first available column\n        if ($this->sortColumn && !$this->isSortable($this->sortColumn)) {\n            $columns = $this->visibleColumns ?: $this->getVisibleColumns();\n            $columns = array_filter($columns, function ($column) {\n                return $column->sortable;\n            });\n            $this->sortColumn = key($columns);\n        }\n\n        return $this->sortColumn;\n    }\n\n    /**\n     * isUserSorting returns true if the user has requested a sort column\n     */\n    public function isUserSorting(): bool\n    {\n        return (bool) $this->getSession('sort', false);\n    }\n\n    /**\n     * getSortStep returns the current indeterminate step\n     */\n    public function getSortStep(): int\n    {\n        return (int) ($this->sortStep ?? 0);\n    }\n\n    /**\n     * getSortDirection returns the current sort direction or default of 'asc'\n     */\n    public function getSortDirection()\n    {\n        return $this->sortDirection ?? 'asc';\n    }\n\n    /**\n     * useSorting\n     */\n    protected function useSorting(): bool\n    {\n        return true;\n    }\n\n    /**\n     * isSortable returns true if the column can be sorted.\n     */\n    protected function isSortable($column = null)\n    {\n        if ($column === null) {\n            return (count($this->getSortableColumns()) > 0);\n        }\n\n        return array_key_exists($column, $this->getSortableColumns());\n    }\n\n    /**\n     * getSortableColumns returns a collection of columns which are sortable.\n     */\n    protected function getSortableColumns()\n    {\n        if ($this->sortableColumns !== null) {\n            return $this->sortableColumns;\n        }\n\n        $columns = $this->getColumns();\n        $sortable = array_filter($columns, function ($column) {\n            return $column->sortable;\n        });\n\n        return $this->sortableColumns = $sortable;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/lists/HasValueProcessor.php",
    "content": "<?php namespace Backend\\Widgets\\Lists;\n\nuse Str;\nuse Url;\nuse Html;\nuse Lang;\nuse Backend;\nuse Carbon\\Carbon;\nuse October\\Rain\\Router\\Helper as RouterHelper;\nuse System\\Helpers\\DateTime as DateTimeHelper;\nuse System\\Classes\\PluginManager;\nuse ApplicationException;\n\n/**\n * HasValueProcessor concern\n */\ntrait HasValueProcessor\n{\n\n    //\n    // Value processing\n    //\n\n    /**\n     * evalCustomListType processes a custom list types registered by plugins and the app.\n     */\n    protected function evalCustomListType($type, $record, $column, $value)\n    {\n        // Load plugin and app column types\n        $methodValues = PluginManager::instance()->getRegistrationMethodValues('registerListColumnTypes');\n        foreach ($methodValues as $availableTypes) {\n            if (!isset($availableTypes[$type])) {\n                continue;\n            }\n\n            $callback = $availableTypes[$type];\n\n            if (is_callable($callback)) {\n                return call_user_func_array($callback, [$value, $column, $record]);\n            }\n        }\n\n        $customMessage = '';\n        if ($type === 'relation') {\n            $customMessage = 'Type: relation is not supported, instead use the relation property to specify a relationship to pull the value from and set the type to the type of the value expected.';\n        }\n\n        throw new ApplicationException(sprintf('List column type \"%s\" could not be found. %s', $type, $customMessage));\n    }\n\n    /**\n     * evalTextTypeValue as text and escape the value\n     * @return string\n     */\n    protected function evalTextTypeValue($record, $column, $value)\n    {\n        if (is_array($value) && count($value) === count($value, COUNT_RECURSIVE)) {\n            $value = implode(', ', $value);\n        }\n\n        if (is_string($column->format) && !empty($column->format)) {\n            $value = sprintf($column->format, $value);\n        }\n\n        return htmlentities((string) $value, ENT_QUOTES, 'UTF-8', false);\n    }\n\n    /**\n     * evalNumberTypeValue process as number, proxy to text but uses different styling\n     * @return string\n     */\n    protected function evalNumberTypeValue($record, $column, $value)\n    {\n        return $this->evalTextTypeValue($record, $column, $value);\n    }\n\n    /**\n     * evalImageTypeValue will process an image value\n     * @return string\n     */\n    protected function evalImageTypeValue($record, $column, $value)\n    {\n        $config = $column->config;\n        $width = isset($config['width']) ? $config['width'] : 68;\n        $height = isset($config['height']) ? $config['height'] : 68;\n        $limit = isset($config['limit']) ? $config['limit'] : 3;\n        $options = isset($config['options']) ? $config['options'] : [];\n        $isDefaultSize = !isset($config['width']) && !isset($config['height']);\n\n        $colName = $column->columnName;\n        $images = [];\n\n        // File model\n        if (isset($record->attachMany[$colName])) {\n            $images = $value->count() ? $value->all() : [];\n        }\n        elseif (isset($record->attachOne[$colName])) {\n            $images = $value ? [$value] : [];\n        }\n        // Media item\n        else {\n            foreach ((array) $value as $val) {\n                if (is_array($val)) {\n                    return '';\n                }\n                if (strpos($val, '://') !== false) {\n                    $images[] = $val;\n                }\n                elseif (strlen($val)) {\n                    $images[] = \\Media\\Classes\\MediaLibrary::url($val);\n                }\n            }\n        }\n\n        if (!$images) {\n            return '';\n        }\n\n        $totalImages = count($images);\n        $images = array_slice($images, 0, $limit);\n\n        $imageUrls = [];\n        foreach ($images as $image) {\n            $imageUrls[] = \\System\\Classes\\ResizeImages::resize($image, $width, $height, $options);\n        }\n\n        return $this->makePartial('column_image', [\n            'totalImages' => $totalImages,\n            'imageUrls' => $imageUrls,\n            'isDefaultSize' => $isDefaultSize,\n            'width' => $width,\n            'height' => $height\n        ]);\n    }\n\n    /**\n     * evalFileTypeValue will process a file attachment value\n     * @return string\n     */\n    protected function evalFileTypeValue($record, $column, $value)\n    {\n        $config = $column->config;\n        $limit = $config['limit'] ?? 3;\n\n        $colName = $column->columnName;\n        $files = [];\n\n        // File model\n        if (isset($record->attachMany[$colName])) {\n            $files = $value->count() ? $value->all() : [];\n        }\n        elseif (isset($record->attachOne[$colName])) {\n            $files = $value ? [$value] : [];\n        }\n\n        if (!$files) {\n            return '';\n        }\n\n        $totalFiles = count($files);\n        $files = array_slice($files, 0, $limit);\n\n        $fileItems = [];\n        foreach ($files as $file) {\n            $fileItems[] = [\n                'url' => $file->getPath(),\n                'name' => $file->file_name,\n                'icon' => $this->getFileTypeIcon($file->getExtension()),\n            ];\n        }\n\n        return $this->makePartial('column_file', [\n            'totalFiles' => $totalFiles,\n            'fileItems' => $fileItems,\n            'column' => $column,\n        ]);\n    }\n\n    /**\n     * evalSwitchTypeValue as boolean switch\n     */\n    protected function evalSwitchTypeValue($record, $column, $value)\n    {\n        $config = $column->config;\n\n        return $this->makePartial('column_switch', [\n            'column' => $column,\n            'value' => $value,\n            'trueValue' => Lang::get($config['options'][1] ?? 'backend::lang.list.column_switch_true'),\n            'falseValue' => Lang::get($config['options'][0] ?? 'backend::lang.list.column_switch_false'),\n        ]);\n    }\n\n    /**\n     * evalSummaryTypeValue will limit a value by words\n     */\n    protected function evalSummaryTypeValue($record, $column, $value)\n    {\n        $config = $column->config;\n        $endChars = isset($config['endChars']) ? $config['endChars'] : '...';\n        $limitChars = isset($config['limitChars']) ? $config['limitChars'] : 40;\n        $limitWords = isset($config['limitWords']) ? $config['limitWords'] : null;\n\n        // Handle null values\n        if ($value === null) {\n            return null;\n        }\n\n        // Collapse spacing for inline nodes that will get stripped\n        // \"Welcome <img />, User\" should read \"Welcome, User\"\n        $result = $value;\n        $result = str_replace(' <', '<', $result);\n\n        // Add natural spacing between HTML nodes\n        $result = str_replace(\"><\", '> <', $result);\n\n        // Strip HTML\n        $result = $original = trim(Html::strip($result));\n\n        // Nothing left\n        if (!strlen($result)) {\n            return $result;\n        }\n\n        // Limit by chars and estimate word count\n        if (!$limitWords) {\n            $result = Str::limit($result, $limitChars, '');\n            $limitWords = substr_count($result, ' ') + 1;\n        }\n\n        // Strip HTML, limit to words\n        $result = Str::words($result, $limitWords, '');\n\n        // Add end suffix where original differs\n        if (mb_strlen($result) !== mb_strlen($original)) {\n            $result .= $endChars;\n        }\n\n        return $result;\n    }\n\n    /**\n     * evalDatetimeTypeValue as a datetime value\n     */\n    protected function evalDatetimeTypeValue($record, $column, $value)\n    {\n        if ($value === null) {\n            return null;\n        }\n\n        $dateTime = $this->validateDateTimeValue($value, $column);\n\n        if ($column->format !== null) {\n            $value = $dateTime->format($column->format);\n        }\n        else {\n            $value = $dateTime->toDayDateTimeString();\n        }\n\n        $options = [\n            'column' => $column,\n            'defaultValue' => $value,\n            'format' => $column->format,\n            'formatAlias' => 'dateTimeLongMin',\n            'useTimezone' => $this->getColumnTimezonePreference($column),\n        ];\n\n        return Backend::dateTime($dateTime, $options);\n    }\n\n    /**\n     * evalTimeTypeValue as a time value\n     */\n    protected function evalTimeTypeValue($record, $column, $value)\n    {\n        if ($value === null) {\n            return null;\n        }\n\n        $dateTime = $this->validateDateTimeValue($value, $column);\n\n        $format = $column->format ?? 'g:i A';\n\n        $value = $dateTime->format($format);\n\n        $options = [\n            'column' => $column,\n            'defaultValue' => $value,\n            'format' => $column->format,\n            'formatAlias' => 'time',\n            'useTimezone' => $this->getColumnTimezonePreference($column, false),\n        ];\n\n        return Backend::dateTime($dateTime, $options);\n    }\n\n    /**\n     * evalDateTypeValue as a date value\n     */\n    protected function evalDateTypeValue($record, $column, $value)\n    {\n        if ($value === null) {\n            return null;\n        }\n\n        $dateTime = $this->validateDateTimeValue($value, $column);\n\n        if ($column->format !== null) {\n            $value = $dateTime->format($column->format);\n        }\n        else {\n            $value = $dateTime->toFormattedDateString();\n        }\n\n        $options = [\n            'column' => $column,\n            'defaultValue' => $value,\n            'format' => $column->format,\n            'formatAlias' => 'dateLongMin',\n            'useTimezone' => $this->getColumnTimezonePreference($column, false),\n        ];\n\n        return Backend::dateTime($dateTime, $options);\n    }\n\n    /**\n     * evalTimesinceTypeValue as diff for humans (1 min ago)\n     */\n    protected function evalTimesinceTypeValue($record, $column, $value)\n    {\n        if ($value === null) {\n            return null;\n        }\n\n        $dateTime = $this->validateDateTimeValue($value, $column);\n\n        $value = DateTimeHelper::timeSince($dateTime);\n\n        $options = [\n            'column' => $column,\n            'defaultValue' => $value,\n            'timeSince' => true,\n            'useTimezone' => $this->getColumnTimezonePreference($column),\n        ];\n\n        return Backend::dateTime($dateTime, $options);\n    }\n\n    /**\n     * evalTimetenseTypeValue as time as current tense (Today at 0:00)\n     */\n    protected function evalTimetenseTypeValue($record, $column, $value)\n    {\n        if ($value === null) {\n            return null;\n        }\n\n        $dateTime = $this->validateDateTimeValue($value, $column);\n\n        $value = DateTimeHelper::timeTense($dateTime);\n\n        $options = [\n            'column' => $column,\n            'defaultValue' => $value,\n            'timeTense' => true,\n            'useTimezone' => $this->getColumnTimezonePreference($column),\n        ];\n\n        return Backend::dateTime($dateTime, $options);\n    }\n\n    /**\n     * evalSelectableTypeValue processes as selectable value types for 'dropdown',\n     * 'radio', 'balloon-selector' and similar form field types\n     */\n    protected function evalSelectableTypeValue($record, $column, $value)\n    {\n        $formField = new \\Backend\\Classes\\FormField([\n            'fieldName' => $column->columnName,\n            'label' => $column->label\n        ]);\n\n        $fieldOptions = $column->optionsPreset\n            ? 'preset:' . $column->optionsPreset\n            : ($column->optionsMethod ?: $column->options);\n\n        if (!is_array($fieldOptions)) {\n            $model = $this->isColumnRelated($column)\n                ? $this->model->makeRelation($column->relation)\n                : $this->model;\n\n            $fieldOptions = $formField->getOptionsFromModel(\n                $model,\n                $fieldOptions,\n                $record->toArray()\n            );\n        }\n\n        return $this->makePartial('column_selectable', [\n            'fieldOptions' => $fieldOptions,\n            'column' => $column,\n            'value' => $value\n        ]);\n    }\n\n    /**\n     * evalLinkageTypeValue\n     */\n    protected function evalLinkageTypeValue($record, $column, $value)\n    {\n        // Handle array value from custom link function: [$url, $text]\n        if (is_array($value) && count($value) === 2) {\n            $linkUrl = $value[0];\n            $linkText = $value[1];\n        }\n        else {\n            // Build link URL - always process linkUrl config with parameter replacement\n            if ($column->linkUrl) {\n                $linkUrl = RouterHelper::replaceParameters($record, $column->linkUrl);\n                if (!starts_with($linkUrl, ['//', 'http://', 'https://'])) {\n                    $linkUrl = Backend::url($linkUrl);\n                }\n            }\n            else {\n                $linkUrl = $value;\n            }\n\n            // Determine link text - prefer config, fall back to value\n            $linkText = $column->linkText ?: $value;\n\n            // When no value exists, use URL for both value and text\n            if (!$value && $column->linkUrl) {\n                $value = $linkUrl;\n                if (!$column->linkText) {\n                    $linkText = $linkUrl;\n                }\n            }\n        }\n\n        if (str_starts_with($linkUrl, 'october://')) {\n            $isDefault = $linkUrl === $linkText;\n            $linkUrl = \\Cms\\Classes\\PageManager::url($linkUrl);\n            if (!$linkUrl) {\n                $value = null;\n            }\n            elseif ($isDefault) {\n                $linkText = Url::makeRelative($linkUrl);\n            }\n        }\n\n        return $this->makePartial('column_linkage', [\n            'attributes' => (array) $column->attributes,\n            'linkText' => $linkText,\n            'linkUrl' => $linkUrl,\n            'column' => $column,\n            'value' => $value\n        ]);\n    }\n\n    /**\n     * evalPartialTypeValue as partial reference\n     */\n    protected function evalPartialTypeValue($record, $column, $value)\n    {\n        return $this->makePartial('column_partial', [\n            'record' => $record,\n            'column' => $column,\n            'value' => $value\n        ]);\n    }\n\n    /**\n     * evalColorPickerTypeValue as background color, to be seen at list\n     */\n    protected function evalColorPickerTypeValue($record, $column, $value)\n    {\n        return $this->makePartial('column_colorpicker', [\n            'value' => $value\n        ]);\n    }\n\n    /**\n     * validateDateTimeValue column type\n     */\n    protected function validateDateTimeValue($value, $column)\n    {\n        $value = DateTimeHelper::makeCarbon($value, false);\n\n        if (!$value instanceof Carbon) {\n            throw new ApplicationException(Lang::get(\n                'backend::lang.list.invalid_column_datetime',\n                ['column' => $column->columnName]\n            ));\n        }\n\n        return $value;\n    }\n\n    /**\n     * getFileTypeIcon returns the appropriate Phosphor icon for a file extension\n     */\n    protected function getFileTypeIcon(string $extension): string\n    {\n        $extension = strtolower($extension);\n\n        $iconMap = [\n            // Archives\n            'zip' => 'file-zip',\n            'rar' => 'file-archive',\n            'tar' => 'file-archive',\n            'gz' => 'file-archive',\n            '7z' => 'file-archive',\n\n            // Documents\n            'pdf' => 'file-pdf',\n            'doc' => 'file-doc',\n            'docx' => 'file-doc',\n            'txt' => 'file-text',\n            'rtf' => 'file-text',\n\n            // Spreadsheets\n            'xls' => 'file-xls',\n            'xlsx' => 'file-xls',\n            'csv' => 'file-csv',\n\n            // Presentations\n            'ppt' => 'file-ppt',\n            'pptx' => 'file-ppt',\n\n            // Images\n            'jpg' => 'file-jpg',\n            'jpeg' => 'file-jpg',\n            'png' => 'file-png',\n            'gif' => 'file-image',\n            'bmp' => 'file-image',\n            'webp' => 'file-image',\n            'svg' => 'file-svg',\n\n            // Audio\n            'mp3' => 'file-audio',\n            'wav' => 'file-audio',\n            'ogg' => 'file-audio',\n            'flac' => 'file-audio',\n            'aac' => 'file-audio',\n\n            // Video\n            'mp4' => 'file-video',\n            'avi' => 'file-video',\n            'mov' => 'file-video',\n            'wmv' => 'file-video',\n            'mkv' => 'file-video',\n            'webm' => 'file-video',\n\n            // Code\n            'html' => 'file-html',\n            'htm' => 'file-html',\n            'css' => 'file-css',\n            'js' => 'file-js',\n            'jsx' => 'file-jsx',\n            'ts' => 'file-ts',\n            'tsx' => 'file-tsx',\n            'vue' => 'file-vue',\n            'sql' => 'file-sql',\n            'rs' => 'file-rs',\n            'php' => 'file-code',\n            'py' => 'file-code',\n            'rb' => 'file-code',\n            'java' => 'file-code',\n            'c' => 'file-code',\n            'cpp' => 'file-code',\n            'h' => 'file-code',\n            'json' => 'file-code',\n            'xml' => 'file-code',\n            'yaml' => 'file-code',\n            'yml' => 'file-code',\n        ];\n\n        return $iconMap[$extension] ?? 'file';\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/lists/IsListElement.php",
    "content": "<?php namespace Backend\\Widgets\\Lists;\n\nuse Backend\\Classes\\ListColumn;\nuse October\\Rain\\Element\\Lists\\ColumnDefinition;\n\n/**\n * IsListElement defines all methods to satisfy the ListElement contract\n *\n * @see \\October\\Contracts\\Element\\ListElement\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait IsListElement\n{\n    /**\n     * defineColumn adds a column to the list element\n     */\n    public function defineColumn(string $columnName, ?string $label = null): ColumnDefinition\n    {\n        return $this->allColumns[$columnName] = new ListColumn([\n            'columnName' => $columnName,\n            'label' => $label\n        ]);\n    }\n\n    /**\n     * addColumnsFromModel from the model\n     */\n    protected function addColumnsFromModel()\n    {\n        if (!$this->model || !method_exists($this->model, 'defineListColumns')) {\n            return;\n        }\n\n        $this->model->defineListColumns($this);\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/lists/assets/js/october.list.js",
    "content": "/*\n * List Widget\n *\n * Dependencies:\n * - Row Link Plugin (backend/assets/foundation/scripts/rowlink/rowlink.js)\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype;\n\n    var ListWidget = function (element, options) {\n        this.$el = $(element);\n        this.options = options || {};\n\n        this.$head = $('thead:first', this.$el);\n        this.$body = $('tbody:first', this.$el);\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        Base.call(this);\n\n        this.init();\n    }\n\n    ListWidget.prototype = Object.create(BaseProto);\n    ListWidget.prototype.constructor = ListWidget;\n\n    ListWidget.DEFAULTS = {\n        checkboxSelector: '.list-checkbox input[type=\"checkbox\"]'\n    }\n\n    ListWidget.prototype.init = function() {\n        this.bindScrollableContent();\n\n        this.$el.on('ajaxSetup', this.proxy(this.beforeAjaxRequest));\n        this.$body.on('click', '.list-checkbox > input[type=checkbox]', this.proxy(this.onClickCheckbox));\n        this.$body.on('change', this.options.checkboxSelector, this.proxy(this.toggleBodyCheckbox));\n        this.$head.on('change', this.options.checkboxSelector, this.proxy(this.toggleHeadCheckbox));\n\n        this.$el.one('dispose-control', this.proxy(this.dispose));\n\n        this.updateUi();\n    }\n\n    ListWidget.prototype.dispose = function() {\n        this.$el.off('ajaxSetup', this.proxy(this.beforeAjaxRequest));\n        this.$body.off('click', '.list-checkbox > input[type=checkbox]', this.proxy(this.onClickCheckbox));\n        this.$body.off('change', this.options.checkboxSelector, this.proxy(this.toggleBodyCheckbox));\n        this.$head.off('change', this.options.checkboxSelector, this.proxy(this.toggleHeadCheckbox));\n\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n        this.$el.removeData('oc.listwidget');\n\n        this.$el = null;\n\n        // In some cases options could contain callbacks,\n        // so it's better to clean them up too.\n        this.options = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    ListWidget.prototype.bindScrollableContent = function() {\n        var $content = $('.list-content:first', this.$el);\n        var scrollClassContainer = this.options.scrollClassContainer !== undefined\n            ? this.options.scrollClassContainer\n            : this.$el;\n\n        $content.dragScroll({\n            scrollClassContainer: scrollClassContainer,\n            scrollSelector: 'thead',\n            dragSelector: 'thead'\n        });\n    }\n\n    ListWidget.prototype.updateUi = function() {\n        $(this.options.checkboxSelector, this.$body).each(function(){\n            var $el = $(this);\n            if ($el.is(':checked')) {\n                $el.closest('tr').addClass('active');\n            }\n        });\n\n        this.checkIndeterminate();\n    }\n\n    ListWidget.prototype.checkIndeterminate = function() {\n        var $all = $(this.options.checkboxSelector, this.$body),\n            $headCb = $(this.options.checkboxSelector, this.$head),\n            checkedCount = $all.filter(':checked').length;\n\n        if (checkedCount && $all.length !== checkedCount) {\n            $headCb.prop('indeterminate', true);\n        }\n        else {\n            $headCb.prop('indeterminate', false);\n        }\n\n        $headCb.prop('checked', !!checkedCount);\n    }\n\n    ListWidget.prototype.toggleHeadCheckbox = function(ev) {\n        var $el = $(ev.target),\n            checked = $el.is(':checked');\n\n        $(this.options.checkboxSelector, this.$body)\n            .prop('checked', checked)\n            .first()\n            .trigger('change');\n\n        if (checked) {\n            $('tr', this.$body).addClass('active');\n        }\n        else {\n            $('tr', this.$body).removeClass('active');\n        }\n    }\n\n    ListWidget.prototype.toggleBodyCheckbox = function(ev) {\n        var $el = $(ev.target),\n            checked = $el.is(':checked');\n\n        if (checked) {\n            $el.closest('tr').addClass('active');\n        }\n        else {\n            $(this.options.checkboxSelector, this.$head).prop('checked', false);\n            $el.closest('tr').removeClass('active');\n        }\n\n        this.checkIndeterminate();\n    }\n\n    ListWidget.prototype.onClickCheckbox = function(ev) {\n        oc.checkboxRangeRegisterClick(ev, 'tr', this.options.checkboxSelector);\n    }\n\n    ListWidget.prototype.getAllChecked = function() {\n        return this.getChecked().concat(this.getCheckedFromLocker());\n    }\n\n    ListWidget.prototype.getChecked = function() {\n        return $(this.options.checkboxSelector, this.$body)\n            .map(function(){\n                var $el = $(this)\n                if ($el.is(':checked')) {\n                    return $el.val();\n                }\n            })\n            .get();\n    }\n\n    ListWidget.prototype.getUnchecked = function() {\n        return $(this.options.checkboxSelector, this.$body)\n            .map(function(){\n                var $el = $(this)\n                if (!$el.is(':checked')) {\n                    return $el.val();\n                }\n            })\n            .get();\n    }\n\n    ListWidget.prototype.getCheckedFromLocker = function() {\n        try {\n            var locker = JSON.parse($('[data-list-datalocker-checked]', this.$el).val());\n\n            $.each(this.getUnchecked(), function(k, value) {\n                var index = locker.indexOf(value);\n                if (index > -1) {\n                    locker.splice(index, 1);\n                }\n            });\n\n            return locker;\n        }\n        catch(err) {\n            return [];\n        }\n    }\n\n    ListWidget.prototype.toggleChecked = function(el) {\n        var $checkbox = $(this.options.checkboxSelector, $(el).closest('tr'));\n\n        $checkbox\n            .prop('checked', !$checkbox.is(':checked'))\n            .trigger('change');\n    }\n\n    ListWidget.prototype.beforeAjaxRequest = function(ev, context) {\n        context.options.data.allChecked = this.getAllChecked();\n    }\n\n    // LIST WIDGET PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.listWidget\n\n    $.fn.listWidget = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.listwidget')\n            var options = $.extend({}, ListWidget.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.listwidget', (data = new ListWidget(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        });\n\n        return result ? result : this;\n      }\n\n    $.fn.listWidget.Constructor = ListWidget\n\n    // LIST WIDGET NO CONFLICT\n    // =================\n\n    $.fn.listWidget.noConflict = function () {\n        $.fn.listWidget = old;\n        return this;\n    }\n\n    // LIST WIDGET HELPERS\n    // =================\n\n    if ($.oc === undefined) {\n        $.oc = {};\n    }\n\n    $.oc.listToggleChecked = function(el) {\n        $(el).closest('.control-list').listWidget('toggleChecked', el);\n    }\n\n    $.oc.listGetChecked = function(el) {\n        return $(el).closest('.control-list').listWidget('getChecked');\n    }\n\n    // LIST WIDGET DATA-API\n    // ==============\n\n    $(document).render(function(){\n        $('[data-control=\"listwidget\"]').listWidget();\n    });\n\n    // LIST HELPER DATA-API\n    // ==============\n\n    oc.listOnLoadForm = function(recordId, context) {\n        $('<a />').popup({\n            handler: 'onLoadPopupForm',\n            extraData: {\n                form_record_id: recordId,\n                form_context: context || null\n            }\n        });\n    }\n\n    $.fn.listCheckedTriggerOn = function() {\n        this.each(function() {\n            var $buttonEl = $(this),\n                listId = $buttonEl.closest('[data-list-linkage]').data('list-linkage');\n\n            // No list or already bound\n            if (!listId || $buttonEl.data('oc.listCheckedTriggerOn')) {\n                $buttonEl.trigger('oc.triggerOn.update');\n                return;\n            }\n\n            var triggerCallback = null,\n                $counter = $('[data-list-checked-counter]', $buttonEl);\n\n            if ($counter.length) {\n                $buttonEl.get(0).addEventListener('trigger:after-update', () => {\n                    var checked = $.oc.listGetChecked('#' + listId + ' > .control-list:first');\n\n                    if (checked.length) {\n                        $counter.text('(' + checked.length + ')');\n                    }\n                    else {\n                        $counter.text('');\n                    }\n                });\n            }\n\n            $buttonEl.triggerOn({\n                triggerCallback: triggerCallback,\n                triggerAction: 'enable',\n                triggerCondition: 'checked',\n                trigger: '#' + listId + ' > .control-list:first tbody .list-checkbox input[type=checkbox]'\n            });\n\n            $buttonEl.data('oc.listCheckedTriggerOn', true);\n        });\n\n        return this;\n    }\n\n    $.fn.listCheckedRequest = function() {\n        this.each(function() {\n            var $buttonEl = $(this),\n                listId = $buttonEl.closest('[data-list-linkage]').data('list-linkage');\n\n            // No list or already bound\n            if (!listId || $buttonEl.data('oc.listCheckedRequest')) {\n                return;\n            }\n\n            $buttonEl.on('ajaxSetup', function (ev, context) {\n                var checked = $.oc.listGetChecked('#' + listId + ' > .control-list:first');\n                if (checked.length) {\n                    context.options.data.checked = checked;\n                }\n            });\n\n            $buttonEl.data('oc.listCheckedRequest', true);\n        });\n\n        return this;\n    }\n\n    $(document).render(function(){\n        $('[data-list-checked-trigger]').listCheckedTriggerOn();\n        $('[data-list-checked-request]').listCheckedRequest();\n    });\n\n    // Global page chooser\n    $(document).on('submit', 'form[data-list-page-chooser]', function(ev) {\n        ev.preventDefault();\n        $(ev.target).trigger('close.oc.popover');\n\n        var $chooser = document.getElementById(ev.target.dataset.chooserId),\n            $input = ev.target.querySelector('input[data-chooser-input]'),\n            handler = ev.target.dataset.handler,\n            pageName = $input.name,\n            pageNumber = $input.value,\n            transportMethod = pageName === '_page' ? 'data' : 'query';\n\n        oc.request($chooser, handler, {\n            [transportMethod]: { [pageName]: pageNumber }\n        });\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/lists/assets/less/list.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n//\n// Lists\n// --------------------------------------------------\n\n@import \"list.structure.less\";\n@import \"list.rowlink.less\";\n\n//\n// Override Bootstrap\n//\n\n.control-list {\n    table.table.data thead {\n        td, th {\n            border: none;\n        }\n    }\n\n    .table > :not(:first-child) {\n        border-top: none;\n    }\n\n    .table > :not(caption) > * > * {\n        border-bottom-width: 0;\n    }\n}\n\n//\n// List Data Table\n//\n\ntable.table.data {\n    .list-head-icon(@icon) {\n        > span, > a {\n            &:after {\n                font-size: 14px;\n                line-height: 14px;\n                display: inline-block;\n                margin-left: 6px;\n                vertical-align: baseline;\n                opacity: .4;\n                .icon(@icon);\n            }\n            &:hover:after { opacity: .8; }\n        }\n    }\n\n    font-size: @font-size-base;\n    border-bottom: 1px solid @border-color;\n\n    &.no-offset-bottom {\n        margin-bottom: 0 !important;\n    }\n\n    thead {\n        background: @tertiary-bg;\n\n        td, th {\n            border-width: 1px;\n            border-top: 1px solid @border-color !important;\n            border-bottom: 1px solid @border-color !important;\n            border-color: @border-color;\n            padding: 0;\n            font-weight: 600;\n            font-size: @font-size-base;\n            white-space: nowrap;\n            background-color: inherit;\n\n            > a, > span {\n                display: block;\n                padding: 10px 15px;\n                color: @text-color;\n                text-decoration: none;\n                &:hover { color: var(--bs-emphasis-color) }\n            }\n\n            &.explicit-left-padding {\n                > a, > span {\n                    padding-left: 0;\n                }\n            }\n\n            &.sort-desc { .list-head-icon(@icon-angle-down); }\n            &.sort-asc { .list-head-icon(@icon-angle-up); }\n\n            &.has-tooltip {\n                > a, > span {\n                    padding-left: 20px;\n                    padding-right: 10px;\n                }\n\n                .list-tooltip {\n                    float: left;\n                    position: relative;\n                    left: -5px;\n                }\n            }\n\n            &.active {\n                text-decoration: underline;\n                color: @emphasis-color;\n\n                &:hover {\n                    text-decoration: none;\n                }\n\n                > span, > a {\n\n                    &:after {\n                        text-decoration: none;\n                        color: @color-list-active-sort;\n                        opacity: 1 !important;\n                    }\n                }\n            }\n        }\n\n        tr th:first-child {\n            // padding-left: 7px;\n        }\n\n        tr th:last-child a {\n            padding-right: 25px;\n        }\n\n        .list-checkbox .custom-checkbox {\n            top: -22px;\n        }\n    }\n\n    tbody {\n        tr {\n            background-color: var(--bs-table-bg);\n        }\n        tr:nth-child(even) {\n            td, th {\n                background-color: var(--bs-table-striped-bg);\n            }\n        }\n\n        td, th {\n            padding: 10px 15px;\n            color: var(--bs-table-color);\n            border-top: 1px solid var(--bs-table-border-color);\n\n            strong {\n                font-weight: 600;\n            }\n\n            div.progress {\n                position: relative;\n                overflow: visible;\n                height: auto;\n                margin-bottom: 0;\n                background-color: transparent;\n                border-radius: 0;\n                box-shadow: none;\n\n                div.bar {\n                    position: absolute;\n                    left: -15px;\n                    top: -11px;\n                    bottom: -11px;\n                    background: @color-list-progress-bg;\n                    opacity: .3;\n                }\n\n                a {\n                    position: relative;\n                }\n            }\n        }\n\n        tr:first-child {\n            th, td {\n                border-top: none;\n            }\n        }\n\n        tr:last-child {\n            th, td {\n                // border-bottom: 1px solid var(--bs-border-color);\n            }\n        }\n\n        tr td:first-child {\n            // padding-left: 20px;\n        }\n\n        tr.active,\n        tr.selected {\n            &:not(.no-data) td {\n                color: var(--bs-table-hover-color);\n                background-color: var(--bs-table-hover-bg);\n            }\n        }\n\n        &:not(.tree-drag-mode) {\n            tr.rowlink:not(.nolink):not(.active):hover td,\n            tr:not(.no-data):not(.active).selected td {\n                color: var(--bs-table-hover-color);\n                background-color: var(--bs-table-hover-bg);\n\n                // When hover is white, this targets common objects\n                // a:not(.btn), span, i[class^=\"icon-\"] {\n                //    color: @color-list-hover-text;\n                // }\n            }\n\n            tr.rowlink:not(.nolink).active:hover td,\n            tr:not(.no-data).active.selected td {\n                background: var(--oc-table-active-bg);\n            }\n        }\n\n        tr.sortable-chosen {\n            position: relative;\n            z-index: 1;\n\n            td {\n                color: var(--bs-table-hover-color);\n                background-color: var(--bs-table-hover-bg);\n            }\n        }\n\n        // tr.rowlink:not(.nolink):active td {\n        //     background: @color-list-hover-bg-active !important;\n        //     color: @color-list-active-text;\n        // }\n\n        tr:focus {\n            outline: none;\n        }\n\n        tr.hidden {\n            td, th, td a, th a {\n                display: none;\n            }\n        }\n\n        tr.strike {\n            td, th, td a, th a {\n                text-decoration: line-through;\n            }\n        }\n\n        tr.frozen {\n            td, th, td a, th a {\n                color: #337ab7;\n            }\n        }\n\n        tr.processing {\n            td, th, td a, th a {\n                color: #666666;\n            }\n        }\n\n        tr.negative {\n            td, th, td a, th a {\n                color: #b2341c;\n            }\n        }\n\n        tr.positive {\n            td, th, td a, th a {\n                color: #278731;\n            }\n        }\n\n        tr.disabled, tr.deleted {\n            td, th, td a, th a {\n                color: #888888;\n            }\n        }\n\n        tr.new, tr.important {\n            td, th, td a, th a {\n                font-weight: 600;\n            }\n        }\n\n        tr.safe, tr.special {\n            td, th, td a, th a {\n                color: #98a7a8;\n            }\n        }\n\n        td.column-break-word {\n            word-wrap: break-word;\n            word-break: break-all;\n        }\n\n        // Requires \"max-width\" with px value\n        td.column-single-line {\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n        }\n\n        td.column-slim {\n            padding-left: 0;\n            padding-right: 0;\n        }\n\n        td.column-compact {\n            padding: 0;\n        }\n\n        td.column-button {\n            padding: 5px;\n        }\n\n        &.icons {\n            td i[class^=\"icon-\"] {\n                display: inline-block;\n                margin-right: 7px;\n                font-size: 15px;\n                color: #95a5a6;\n                position: relative;\n                top: 1px;\n            }\n        }\n\n        &.clickable {\n            cursor: pointer;\n            user-select: none;\n        }\n    }\n\n    &.no-active-indicator tbody {\n        tr td:first-child {\n            border-left: none;\n        }\n    }\n\n    tfoot {\n        a {\n            color: @color-list-text;\n            text-decoration: none;\n        }\n        td, th {\n            border-color: @border-color;\n            padding: 10px 15px;\n            // border-color: transparent;\n            // padding: 10px 0;\n        }\n    }\n\n    th.list-cell-type-switch,\n    td.list-cell-type-switch {\n        text-align: center;\n    }\n\n    th.list-cell-type-number,\n    td.list-cell-type-number {\n        text-align: right;\n    }\n\n    th.list-cell-align-left,\n    td.list-cell-align-left {\n        text-align: left;\n    }\n\n    th.list-cell-align-right,\n    td.list-cell-align-right {\n        text-align: right;\n    }\n\n    th.list-cell-align-center,\n    td.list-cell-align-center {\n        text-align: center;\n    }\n\n    th.list-cell-type-selectable,\n    td.list-cell-type-selectable {\n        white-space: nowrap;\n    }\n\n    th.list-cell-type-colorpicker,\n    td.list-cell-type-colorpicker {\n        width: 20px;\n    }\n\n    //\n    // Labels\n    //\n\n    .list-badge {\n        display: inline-block;\n        position: relative;\n        top: 0;\n        margin: 0 5px 0 0;\n        padding: 1px 0 0 0;\n        font-size: 10px;\n        width: 15px;\n        height: 15px;\n        text-align: center;\n        border-radius: @border-radius-base;\n        color: #fff;\n\n        > i {\n            position: relative;\n            top: -1px;\n        }\n\n        &.badge-default {\n            background: @gray-light;\n        }\n\n        &.badge-primary {\n            background: @brand-primary;\n        }\n\n        &.badge-success {\n            background: @brand-success;\n        }\n\n        &.badge-info {\n            background: @brand-info;\n        }\n\n        &.badge-warning {\n            background: @brand-warning;\n        }\n\n        &.badge-danger {\n            background: @brand-danger;\n        }\n    }\n\n    .list-switch {\n        border-radius: 100px;\n        display: inline-block;\n        width: 20px;\n        height: 20px;\n        text-align: center;\n        &.is-true {\n            background-color: @brand-success;\n            color: #fff;\n        }\n        &.is-false {\n            background-color: @secondary-bg;\n            color: @text-color;\n        }\n    }\n\n    //\n    // Link List\n    //\n\n    ul.list-link-list {\n        list-style: none;\n        padding: 0;\n        margin: 0;\n\n        > li {\n            display: inline-block;\n\n            &:after {\n                content: ', ';\n            }\n\n            &:last-child {\n                padding-right: 0;\n\n                &:after {\n                    content: '';\n                }\n            }\n\n            a {\n                text-decoration: underline;\n            }\n        }\n    }\n\n    //\n    // Image\n    //\n\n    .list-image-thumbs {\n        margin-top: -7px;\n        margin-bottom: -7px;\n    }\n\n    .list-image-thumb {\n        display: inline-block;\n        position: relative;\n        margin-top: 1px;\n        margin-bottom: 1px;\n\n        &:after {\n            content: '';\n            display: block;\n            position: absolute;\n            box-shadow: inset 0px 0px 0px 1px rgba(127, 140, 141, .25); // #7f8c8d\n            top: 0;\n            bottom: 0;\n            right: 0;\n            left: 0;\n            z-index: 2;\n            border-radius: 4px;\n        }\n\n        > img {\n            border-radius: 4px;\n        }\n\n        &.is-default-size {\n            width: 34px;\n            height: 34px;\n            > img {\n                height: 100%;\n                width: 100%;\n                object-fit: cover;\n            }\n        }\n    }\n\n    //\n    // File\n    //\n\n    .list-file-items {\n        margin-top: -7px;\n        margin-bottom: -7px;\n    }\n\n    .list-file-item {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        width: 34px;\n        height: 34px;\n        margin: 1px;\n        background: @toolbar-bg;\n        border: 1px solid @toolbar-border;\n        border-radius: 4px;\n        color: @text-muted;\n        text-decoration: none;\n\n        > i {\n            font-size: 18px;\n        }\n    }\n\n    //\n    // Selectable Badge\n    //\n\n    .list-selectable {\n        background: @toolbar-bg;\n        border: 1px solid @toolbar-border;\n        border-radius: 6px;\n        display: inline-block;\n        padding: 0 8px;\n        height: 28px;\n        line-height: 26px;\n        margin-top: -10px;\n        margin-bottom: -10px;\n        white-space: nowrap;\n\n        i {\n            display: inline-block;\n            margin-right: 3px;\n            margin-left: 3px;\n            text-align: center;\n        }\n    }\n\n    //\n    // Color Picker\n    //\n\n    .list-colorpicker {\n        width: 0;\n        height: 0;\n        background-color: transparent;\n        border-right-color: var(--background-color);\n        border-top-color: var(--background-color);\n        border-bottom-color: var(--background-color);\n        border-left-color: var(--background-color);\n        border-width: 10px;\n        border-style: solid;\n        border-radius: 20px;\n        display: inline-block;\n        position: relative;\n\n        // Offset the table padding\n        margin-top: -5px;\n        margin-bottom: -5px;\n\n        &:after {\n            content: \"\";\n            top: -10px;\n            left: -10px;\n            width: 20px;\n            height: 20px;\n            position: absolute;\n            box-shadow: inset 0 0 0 1px rgba(53, 66, 91, .15);\n            border-radius: 20px;\n        }\n\n        &.is-twotone {\n            border-top-color: var(--foreground-color);\n            border-left-color: var(--foreground-color);\n        }\n    }\n\n    //\n    // Checkbox\n    //\n\n    .list-checkbox {\n        width: 42px;\n        vertical-align: top;\n        border-right: 1px solid var(--bs-table-border-color);\n    }\n\n    tbody tr td.list-checkbox {\n        padding-left: 15px;\n    }\n\n    thead tr th.list-checkbox {\n        padding: 10.5px 0 0 15px;\n    }\n}\n\n//\n// List containers\n//\n\n.list-preview {\n    padding: 0;\n    margin-bottom: 20px;\n    background: white;\n    border: 1px solid @border-color;\n\n    .list-header:first-child {\n        padding-top: 20px;\n    }\n\n    .control-list:last-child {\n        margin-bottom: 0;\n    }\n\n    .control-list:last-child > table {\n        border-bottom: none;\n    }\n}\n\n// List to sit flush to the element above (no toolbar)\n.list-flush {\n    table.table.data {\n        thead tr th {\n            border-top: none !important;\n        }\n    }\n}\n\n// List with sidebar\n.list-with-sidebar {\n    display: flex;\n\n    .sidebar-area {\n        flex-shrink: 0;\n        flex-basis: 180px;\n        width: 180px;\n    }\n\n    .sidebar-list {\n        flex-grow: 1;\n        width: 0;\n    }\n}\n\n@media (max-width: @screen-sm-max) {\n    .list-with-sidebar {\n        display: block;\n\n        .sidebar-area {\n            width: auto;\n            flex-shrink: inherit;\n            flex-basis: inherit;\n            margin: 0 20px 20px;\n        }\n\n        .sidebar-list {\n            flex-grow: inherit;\n            width: auto;\n        }\n    }\n}\n\n\n//\n// List control\n//\n\n.control-list {\n    margin-bottom: @line-height-computed;\n\n    p.no-data {\n        padding: 18px 20px;\n        margin: 0 20px;\n        color: @color-list-norecords-text;\n        font-size: @font-size-base;\n        text-align: center;\n        border-radius: @border-radius-base;\n    }\n\n    table.table.data {\n        margin-bottom: 0;\n\n        .list-setup {\n            width: 48px;\n            vertical-align: middle;\n\n            a {\n                padding: 8px 15px;\n                > span {\n                    display: block;\n                    color: @toolbar-color;\n                    background: @toolbar-bg;\n                    width: 24px;\n                    height: 24px;\n                    text-align: center;\n                    border-radius: 3px;\n\n                    &:before {\n                        font-size: 14px;\n                        line-height: 14px;\n                        .icon(@icon-list-ul);\n                        display: inline-block;\n                        vertical-align: middle;\n                    }\n                }\n\n                &:hover > span {\n                    color: @toolbar-hover-color;\n                    background: @toolbar-hover-bg;\n                }\n            }\n\n            &.setup-show-structure a > span:before {\n                .icon(@icon-sitemap);\n            }\n        }\n    }\n\n    &.list-rowlink tbody {\n        td, th {\n            a:not(.btn,.dropdown-item) {\n                color: @color-list-text;\n                &:hover {\n                    text-decoration: none;\n                }\n            }\n        }\n    }\n}\n\n.list-widget-container {\n    border-radius: @border-radius-large;\n    border: 1px solid @border-color;\n    // background-color: var(--bs-table-bg);\n    // border-top: 2px solid var(--oc-border-color);\n    overflow: hidden;\n\n    > .control-filter {\n        background-color: var(--oc-form-control-bg);\n        border-top: none;\n\n        > .filter-group > .filter-scope {\n            padding: 10px;\n        }\n    }\n\n    > .list-widget {\n        table.table.data thead th {\n            border-top: none !important;\n        }\n\n        .control-list table.table.data {\n            border-bottom: none;\n        }\n    }\n}\n\n.list-widget-container {\n    margin: 0 @padding-standard @padding-standard;\n\n    > .list-widget > .control-list {\n        margin-bottom: 0;\n    }\n}\n\n@media (max-width: @screen-xs-max) {\n    .list-widget-container {\n        margin: 0 0 @padding-standard;\n        border-radius: 0;\n        border: none;\n    }\n}\n\n.list-header {\n    background-color: transparent;\n    padding: 0 @padding-standard 1px @padding-standard;\n\n    h3 {\n        font-size: 14px;\n        color: @color-status-list-text;\n        text-transform: uppercase;\n        font-weight: 600;\n        margin-top: 0;\n        margin-bottom: 15px;\n    }\n}\n\n.list-footer {\n    padding: 5px 10px;\n    // padding: 5px 0;\n    border-top: 1px solid @border-color;\n\n    a {\n        color: @color-list-text;\n        text-decoration: none;\n    }\n\n    .list-pagination {\n        display: flex;\n\n        .list-pagination-summary {\n            padding: .475rem 5px;\n            font-size: .9rem;\n        }\n\n        .list-pagination-links {\n            ul.pagination {\n                margin-bottom: 0;\n\n                .page-link {\n                    border-radius: 4px;\n                    border-color: transparent;\n                    box-shadow: none;\n                }\n\n                li.disabled .page-link {\n                    color: #98a7a8;\n                    background-color: transparent;\n                }\n            }\n        }\n    }\n\n    @media (max-width: @screen-md) {\n        .list-pagination {\n            flex-direction: column-reverse;\n\n            .list-pagination-links {\n                margin-bottom: .5rem;\n            }\n        }\n    }\n}\n\n// Used by Google Analytics plugin\n.report-widget {\n    .table-container {\n        margin: -15px;\n\n        table.table.data {\n            margin-bottom: 0;\n\n            thead tr {\n                th {\n                    border-top: none !important;\n                }\n            }\n\n            tbody {\n                tr:nth-child(even) {\n                    td, th { background-color: transparent; }\n                }\n            }\n        }\n    }\n}\n\n//\n// Scrollable list control\n//\n\n.list-scrollable-container {\n    touch-action: auto;\n    position: relative;\n\n    > .list-scrollable {\n        .horizontal-scroll-shadow();\n\n        &:after, &:before {\n            bottom: auto;\n\n            // Height of the header\n            height: 40.5px;\n        }\n\n        &:before {\n            left: 0;\n        }\n\n        &:after {\n            right: 0;\n        }\n\n        &.scroll-after th ,\n        &.scroll-before th {\n            cursor: move;\n            a {\n                cursor: pointer;\n            }\n        }\n\n        > .list-content {\n            overflow-x: auto;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/lists/assets/less/list.rowlink.less",
    "content": "// Rowlink.less\n// CSS for rowlink plugin\n// ----------------------\n\ntr.rowlink:not(.nolink) td {\n    cursor: pointer;\n    &.nolink {\n        cursor: auto;\n    }\n}\n\na.rowlink {\n    color: inherit;\n    font: inherit;\n    text-decoration: inherit;\n}\n"
  },
  {
    "path": "modules/backend/widgets/lists/assets/less/list.structure.less",
    "content": "//\n// List Data Table\n//\n\n@tree-control-size: 24px;\n\n.list-hidden-drag-ghost {\n    opacity: 0 !important;\n}\n\ntable.table.data {\n    //\n    // Trees\n    //\n\n    tr:hover .list-reorder {\n        span.list-reorder-handle {\n            display: block;\n        }\n    }\n\n    tbody.tree-drag-mode {\n        &, * {\n            cursor: move!important;\n        }\n\n        td.list-reorder span.list-reorder-handle {\n            display: none;\n        }\n\n        tr.sortable-chosen td.list-reorder span.list-reorder-handle {\n            display: block;\n        }\n    }\n\n    tbody.tree-drag-updated {\n        td.list-reorder span.list-reorder-handle {\n            display: none !important;\n        }\n    }\n\n    th.list-reorder,\n    td.list-reorder {\n        width: @tree-control-size;\n        min-width: @tree-control-size;\n        padding-left: 0;\n        padding-right: 0;\n    }\n\n    td.list-reorder {\n        vertical-align: middle;\n        position: relative;\n\n        span.list-reorder-handle {\n            display: none;\n            background: @toolbar-bg;\n            text-align: center;\n            cursor: move;\n            left: -6px;\n\n            width: @tree-control-size;\n            height: @tree-control-size;\n            position: absolute;\n            top: calc(50% - 12px);\n            border-radius: 3px;\n            text-decoration: none;\n\n            i {\n                font-size: 24px;\n                top: 2px;\n            }\n\n            &:active {\n                background: @toolbar-focus-bg;\n            }\n        }\n    }\n\n    td.list-cell-tree {\n        vertical-align: middle;\n        position: relative;\n        -webkit-transition: padding 0.3s ease;\n        transition: padding 0.3s ease;\n\n        a.tree-expand-collapse {\n            width: @tree-control-size;\n            height: @tree-control-size;\n            display: block;\n            position: absolute;\n            top: calc(50% - 12px);\n            border-radius: 3px;\n            text-decoration: none;\n        }\n\n        a.tree-expand-collapse {\n            margin-left: -25px;\n\n            > span {\n                position: absolute;\n                display: inline-block;\n                left: 0;\n                top: 0;\n                width: @tree-control-size;\n                height: @tree-control-size;\n\n                &:after {\n                    .icon(@icon-angle-right);\n                    position: absolute;\n                    left: calc(100% - 15px);\n                    top: 5px;\n                    width: @tree-control-size;\n                    height: @tree-control-size;\n                    font-size: 15px;\n                    color: @text-color;\n                    text-indent: 0;\n                }\n            }\n\n            &.is-expanded span:after {\n                .icon(@icon-angle-down);\n                left: calc(100% - 17px);\n            }\n        }\n    }\n}\n\n.control-list.list-checkboxes table.table.data {\n    th.list-reorder,\n    td.list-reorder {\n        width: @tree-control-size - 6px;\n    }\n\n    td.list-reorder {\n        span.list-reorder-handle {\n            left: -13px;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_column_colorpicker.php",
    "content": "<?php if (is_array($value) && count($value) === 2): ?>\n    <span\n        class=\"list-colorpicker is-twotone\"\n        style=\"--background-color:<?= e($value[0]) ?>;--foreground-color:<?= e($value[1]) ?>\"\n    ><span>\n<?php elseif ($value): ?>\n    <span\n        class=\"list-colorpicker\"\n        style=\"--background-color:<?= e($value) ?>\"\n    ><span>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_column_file.php",
    "content": "<div class=\"list-file-items\">\n    <?php foreach ($fileItems as $fileItem): ?>\n        <?php if (!$column->clickable): ?>\n            <a\n                href=\"<?= e($fileItem['url']) ?>\"\n                target=\"_blank\"\n                class=\"list-file-item\"\n                title=\"<?= e($fileItem['name']) ?>\"\n            >\n                <i class=\"ph ph-<?= e($fileItem['icon']) ?>\"></i>\n            </a>\n        <?php else: ?>\n            <span class=\"list-file-item\" title=\"<?= e($fileItem['name']) ?>\">\n                <i class=\"ph ph-<?= e($fileItem['icon']) ?>\"></i>\n            </span>\n        <?php endif ?>\n    <?php endforeach ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_column_image.php",
    "content": "<div class=\"list-image-thumbs\">\n    <?php foreach ($imageUrls as $imageUrl): ?>\n        <span class=\"list-image-thumb <?= $isDefaultSize ? 'is-default-size' : '' ?>\">\n            <img src=\"<?= $imageUrl ?>\" width=\"<?= $width ?>\" height=\"<?= $height ?>\" alt=\"\" />\n        </span>\n    <?php endforeach ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_column_linkage.php",
    "content": "<?php if ($value): ?>\n    <ul class=\"list-link-list\">\n        <li><a href=\"<?= e($linkUrl) ?>\" <?= Html::attributes($attributes) ?>><?= e(__($linkText)) ?></a></li>\n    </ul>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_column_partial.php",
    "content": "<?php\n    $vars = [\n        'listColumn' => $column,\n        'listRecord' => $record,\n        'listValue' => $value,\n        'column' => $column,\n        'record' => $record,\n        'value' => $value\n    ];\n?>\n<?php if ($column->path && str_contains($column->path, '::')): ?>\n    <?= View::make($column->path, $vars) ?>\n<?php elseif ($column->path && File::isPathSymbol($column->path)): ?>\n    <?= $this->controller->makePartial($column->path, $vars) ?>\n<?php else: ?>\n    <?php\n        // @deprecated forever?\n        $oldViewFile = $column->path ?: ltrim($column->columnName, '_');\n        $viewFile = $column->path ?: 'column_' . ltrim($column->columnName, '_');\n        $modelPath = $this->guessViewPathFrom($record);\n    ?>\n    <?= ($this->controller->makePartial(\"{$modelPath}/{$viewFile}\", $vars, false)\n            ?: $this->controller->makePartial($viewFile, $vars, false))\n            ?: $this->controller->makePartial($oldViewFile, $vars, false) ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_column_selectable.php",
    "content": "<?php\nif (is_array($value)) {\n    $selectedValues = array_map(function ($value) use ($fieldOptions) {\n        return $fieldOptions[$value] ?? $value;\n    }, $value);\n}\nelse {\n    $selectedValues = array_key_exists($value, $fieldOptions) ? [$fieldOptions[$value]] :  [];\n}\n\n$isComplex = is_array(array_first($selectedValues));\n?>\n<?php if ($isComplex): ?>\n    <?php foreach ($selectedValues as $selectedValue): ?>\n        <span class=\"list-selectable\">\n            <?php if (Html::isValidColor($selectedValue[1])): ?>\n                <span class=\"status-indicator\" style=\"background:<?= $selectedValue[1] ?>\"></span>\n            <?php elseif (strpos($selectedValue[1], '.')): ?>\n                <img src=\"<?= $selectedValue[1] ?>\" alt=\"\" />\n            <?php else: ?>\n                <i class=\"<?= $selectedValue[1] ?>\"></i>\n            <?php endif ?>\n            <?= $column->getDisplayValue($selectedValue[0]) ?>\n        </span>\n    <?php endforeach ?>\n<?php else: ?>\n    <?= e(implode(', ', $column->valueTrans\n        ? Arr::trans($selectedValues)\n        : $selectedValues\n    )) ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_column_switch.php",
    "content": "<span class=\"list-switch <?= $value ? 'is-true' : 'is-false' ?>\">\n    <?php if ($value): ?>\n        <i class=\"icon-check\" data-bs-toggle=\"tooltip\" title=\"<?= e($trueValue) ?>\"></i>\n    <?php else: ?>\n        <i class=\"icon-times\" data-bs-toggle=\"tooltip\" title=\"<?= e($falseValue) ?>\"></i>\n    <?php endif ?>\n</span>"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list-container.php",
    "content": "<div class=\"list-widget list-scrollable-container <?= $cssClasses ?>\" id=\"<?= $this->getId() ?>\">\n    <?= $this->makePartial('list') ?>\n</div>"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list.php",
    "content": "<?php\n    $useRowLink = $this->hasRecordAction();\n\n    $classes = [\n        'list-scrollable',\n    ];\n\n    if ($useRowLink) $classes[] = 'list-rowlink';\n?>\n<div\n    class=\"control-list <?= implode(' ', $classes) ?>\"\n    data-control=\"listwidget\">\n    <div class=\"list-content\">\n        <table class=\"table data\" <?= $useRowLink ? 'data-control=\"rowlink\"' : '' ?>>\n            <thead>\n                <?= $this->makePartial('list_head_row') ?>\n            </thead>\n            <tbody>\n                <?php if (count($records)): ?>\n                    <?= $this->makePartial('list_body_rows') ?>\n                <?php else: ?>\n                    <tr class=\"no-data\">\n                        <td colspan=\"<?= $columnTotal ?>\" class=\"nolink\">\n                            <p class=\"no-data\"><?= $noRecordsMessage ?></p>\n                        </td>\n                    </tr>\n                <?php endif ?>\n            </tbody>\n        </table>\n    </div>\n    <?php if ($showPagination): ?>\n        <div class=\"list-footer\">\n            <?php if ($showPageNumbers): ?>\n                <?= $this->makePartial('list_pagination') ?>\n            <?php else: ?>\n                <?= $this->makePartial('list_pagination_simple') ?>\n            <?php endif ?>\n        </div>\n    <?php endif ?>\n\n    <?= $this->makePartial('list_datalocker') ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list_body_checkbox.php",
    "content": "<td class=\"list-checkbox nolink\">\n    <input\n        class=\"form-check-input\"\n        type=\"checkbox\"\n        name=\"checked[]\"\n        value=\"<?= $this->getColumnKey($record) ?>\"\n        <?= $this->isRowChecked($record) ? 'checked' : '' ?>\n        autocomplete=\"off\" />\n</td>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list_body_row.php",
    "content": "<tr class=\"<?= $this->getRowClass($record) ?>\">\n    <?php if ($showCheckboxes): ?>\n        <?= $this->makePartial('list_body_checkbox', ['record' => $record]) ?>\n    <?php endif ?>\n\n    <?php $index = $action = 0; $total = count($columns); foreach ($columns as $key => $column): ?>\n        <?php\n            $index++;\n            $classes = [\n                'list-cell-index-'.$index,\n                'list-cell-name-'.$column->getName(),\n                'list-cell-type-'.$column->type,\n                $column->getAlignClass(),\n                $column->cssClass\n            ];\n\n            if (!$column->clickable) {\n                $classes[] = 'nolink';\n            }\n        ?>\n        <td class=\"<?= implode(' ', $classes) ?>\">\n            <?php if ($column->clickable && !$action && ($action = $this->getRecordAction($record))): ?>\n                <a <?= $action[1] ?> href=\"<?= $action[0] ?>\">\n                    <?= $this->getColumnValue($record, $column) ?>\n                </a>\n            <?php else: ?>\n                <?= $this->getColumnValue($record, $column) ?>\n            <?php endif ?>\n        </td>\n    <?php endforeach ?>\n</tr>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list_body_rows.php",
    "content": "<?php foreach ($records as $record): ?>\n    <?= $this->makePartial('list_body_row', ['record' => $record]) ?>\n<?php endforeach ?>"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list_datalocker.php",
    "content": "<input\n    type=\"hidden\"\n    id=\"<?= $this->getId('checkedDataLocker') ?>\"\n    name=\"checked-all\"\n    value=\"<?= e($this->getCheckedRowsEncoded()) ?>\"\n    data-list-datalocker-checked\n/>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list_head_row.php",
    "content": "<tr>\n    <?php if ($showCheckboxes): ?>\n        <th class=\"list-checkbox\">\n            <input type=\"checkbox\" class=\"form-check-input\" />\n        </th>\n    <?php endif ?>\n\n    <?php foreach ($columns as $key => $column): ?>\n        <?php\n            $styles = [];\n            if ($column->width) {\n                $styles[] = 'width: '.$column->width;\n            }\n\n            $classes = [\n                'list-cell-name-'.$column->getName(),\n                'list-cell-type-'.$column->type,\n                $column->getAlignClass(),\n                $column->headCssClass\n            ];\n\n            if ($column->tooltip) {\n                $classes[] = 'has-tooltip';\n            }\n        ?>\n        <?php if ($showSorting && $column->sortable): ?>\n            <?php\n                $classes[] = $this->sortColumn == $column->columnName\n                    ? 'sort-'.$this->sortDirection.' active'\n                    : 'sort-desc';\n            ?>\n            <th style=\"<?= implode(';', $styles) ?>\" class=\"<?= implode(' ', $classes) ?>\">\n                <a\n                    href=\"javascript:;\"\n                    data-request=\"<?= $this->getEventHandler('onSort') ?>\"\n                    data-stripe-load-indicator\n                    data-request-data=\"sortColumn: '<?= $column->columnName ?>', page: <?= $pageCurrent ?>\"\n                ><?= $this->getHeaderValue($column) ?><?php if ($column->tooltip): ?><?=\n                    $this->makePartial('list_head_tooltip', ['column' => $column])\n                ?><?php endif ?></a>\n            </th>\n        <?php else: ?>\n            <th style=\"<?= implode(';', $styles) ?>\" class=\"<?= implode(' ', $classes) ?>\">\n                <span><?= $this->getHeaderValue($column) ?><?php if ($column->tooltip): ?><?=\n                    $this->makePartial('list_head_tooltip', ['column' => $column])\n                ?><?php endif ?></span>\n            </th>\n        <?php endif ?>\n    <?php endforeach ?>\n</tr>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list_head_tooltip.php",
    "content": "<?php\n    $tooltip = is_array($column->tooltip) ? $column->tooltip : ['title' => $column->tooltip];\n    $tooltipIsHtml = $tooltip['isHtml'] ?? false;\n    $tooltipPlacement = $tooltip['placement'] ?? 'top';\n    $tooltipIcon = $tooltip['icon'] ?? 'icon-info-circle';\n    $tooltipTitle = $tooltipIsHtml ? $this->getHeaderTooltipValue($column) : e($this->getHeaderTooltipValue($column));\n?>\n<div class=\"list-tooltip\">\n    <i class=\"<?= $tooltipIcon ?>\"\n        data-bs-toggle=\"tooltip\"\n        data-bs-placement=\"<?= $tooltipPlacement ?>\"\n        <?= $tooltipIsHtml ? 'data-bs-html=\"true\"' : '' ?>\n        data-bs-title=\"<?= $tooltipTitle ?>\"\n    ></i>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list_pagination.php",
    "content": "<?php\n    $transportMethod = $pageName === '_page' ? 'data' : 'query';\n?>\n<div class=\"list-pagination\">\n    <div class=\"list-pagination-summary text-muted me-auto\">\n        <?= e(trans('backend::lang.list.pagination', ['from' => $pageFrom, 'to' => $pageTo, 'total' => $recordTotal])) ?>\n    </div>\n    <?php if ($pageLast > 1): ?>\n        <nav class=\"list-pagination-links loading-indicator-container size-small\">\n            <ul class=\"pagination\">\n                <?php if ($pageCurrent > 1): ?>\n                    <li class=\"page-item\">\n                        <a\n                            href=\"javascript:;\"\n                            class=\"page-link page-first\"\n                            data-request=\"<?= $this->getEventHandler('onPaginate') ?>\"\n                            data-request-<?= $transportMethod ?>=\"{ <?= e($pageName) ?>: 1 }\"\n                            data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                            title=\"<?= e(trans('backend::lang.list.first_page')) ?>\">\n                            <i class=\"icon-angle-double-left\"></i>\n                        </a>\n                    </li>\n                <?php else: ?>\n                    <li class=\"page-item disabled\">\n                        <span\n                            class=\"page-link page-first\"\n                            title=\"<?= e(trans('backend::lang.list.first_page')) ?>\">\n                            <i class=\"icon-angle-double-left\"></i>\n                        </span>\n                    </li>\n                <?php endif ?>\n                <?php if ($pageCurrent > 1): ?>\n                    <li class=\"page-item\">\n                        <a\n                            href=\"javascript:;\"\n                            class=\"page-link page-back\"\n                            data-request=\"<?= $this->getEventHandler('onPaginate') ?>\"\n                            data-request-<?= $transportMethod ?>=\"{ <?= e($pageName) ?>: <?= $pageCurrent - 1 ?> }\"\n                            data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                            title=\"<?= e(trans('backend::lang.list.prev_page')) ?>\">\n                            <i class=\"icon-angle-left\"></i>\n                        </a>\n                    </li>\n                <?php else: ?>\n                    <li class=\"page-item disabled\">\n                        <span\n                            class=\"page-link page-back\"\n                            title=\"<?= e(trans('backend::lang.list.prev_page')) ?>\">\n                            <i class=\"icon-angle-left\"></i>\n                        </span>\n                    </li>\n                <?php endif ?>\n                <?php foreach ($recordElements as $element): ?>\n                    <?php if (is_string($element)): ?>\n                        <li class=\"page-item page-choose\">\n                            <a\n                                href=\"javascript:;\"\n                                id=\"<?= $this->getId('pageChooser') ?>\"\n                                class=\"page-link page-dots\"\n                                data-control=\"popover\"\n                                data-content-from=\"#<?= $this->getId('pageChooserPopover') ?>\"\n                                data-fallback-placement=\"left\"\n                                data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\">\n                                <?= e($element) ?>\n                            </a>\n                        </li>\n                    <?php elseif (is_array($element)): ?>\n                        <?php foreach ($element as $page => $url): ?>\n                            <?php if ($page === $pageCurrent): ?>\n                                <li class=\"page-item active\">\n                                    <span class=\"page-link page-active\">\n                                        <?= $page ?>\n                                    </span>\n                                </li>\n                            <?php else: ?>\n                                <li class=\"page-item\">\n                                    <a\n                                        href=\"javascript:;\"\n                                        class=\"page-link page-back\"\n                                        data-request=\"<?= $this->getEventHandler('onPaginate') ?>\"\n                                        data-request-<?= $transportMethod ?>=\"{ <?= e($pageName) ?>: <?= $page ?> }\"\n                                        data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                                    >\n                                        <?= $page ?>\n                                    </a>\n                                </li>\n                            <?php endif ?>\n                        <?php endforeach ?>\n                    <?php endif ?>\n                <?php endforeach ?>\n                <?php if ($pageLast > $pageCurrent): ?>\n                    <li class=\"page-item\">\n                        <a\n                            href=\"javascript:;\"\n                            class=\"page-link page-next\"\n                            data-request-<?= $transportMethod ?>=\"{ <?= e($pageName) ?>: <?= $pageCurrent + 1 ?> }\"\n                            data-request=\"<?= $this->getEventHandler('onPaginate') ?>\"\n                            data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                            title=\"<?= e(trans('backend::lang.list.next_page')) ?>\">\n                            <i class=\"icon-angle-right\"></i>\n                        </a>\n                    </li>\n                <?php else: ?>\n                    <li class=\"page-item disabled\">\n                        <span\n                            class=\"page-link page-next\"\n                            title=\"<?= e(trans('backend::lang.list.next_page')) ?>\">\n                            <i class=\"icon-angle-right\"></i>\n                        </span>\n                    </li>\n                <?php endif ?>\n                <?php if ($pageLast > $pageCurrent): ?>\n                    <li class=\"page-item\">\n                        <a\n                            href=\"javascript:;\"\n                            class=\"page-link page-last\"\n                            data-request-<?= $transportMethod ?>=\"{ <?= e($pageName) ?>: <?= $pageLast ?> }\"\n                            data-request=\"<?= $this->getEventHandler('onPaginate') ?>\"\n                            data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                            title=\"<?= e(trans('backend::lang.list.last_page')) ?>\">\n                            <i class=\"icon-angle-double-right\"></i>\n                        </a>\n                    </li>\n                <?php else: ?>\n                    <li class=\"page-item disabled\">\n                        <span\n                            class=\"page-link page-last\"\n                            title=\"<?= e(trans('backend::lang.list.last_page')) ?>\">\n                            <i class=\"icon-angle-double-right\"></i>\n                        </span>\n                    </li>\n                <?php endif ?>\n            </ul>\n        </nav>\n    <?php endif ?>\n</div>\n<script type=\"text/template\" id=\"<?= $this->getId('pageChooserPopover') ?>\">\n    <div class=\"popover-body\">\n        <form\n            data-list-page-chooser\n            data-chooser-id=\"<?= $this->getId('pageChooser') ?>\"\n            data-handler=\"<?= $this->getEventHandler('onPaginate') ?>\"\n            class=\"control-list-page-chooser\">\n            <div class=\"input-group flex-nowrap\">\n                <span class=\"input-group-text\"><?= __('Go to page') ?></span>\n                <input\n                    type=\"number\"\n                    value=\"\"\n                    name=\"<?= e($pageName) ?>\"\n                    autocomplete=\"off\"\n                    class=\"form-control input-no-spinner\"\n                    style=\"width: 75px\"\n                    data-chooser-input\n                    data-popover-autofocus />\n                <button\n                    type=\"submit\"\n                    class=\"btn btn-primary\">\n                    <?= __(\"Go\") ?>\n                </button>\n            </div>\n        </form>\n    </div>\n</script>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_list_pagination_simple.php",
    "content": "<?php\n    $transportMethod = $pageName === '_page' ? 'data' : 'query';\n?>\n<div class=\"list-pagination\">\n    <nav class=\"list-pagination-links ms-auto loading-indicator-container size-small\">\n        <ul class=\"pagination\">\n            <?php if ($pageCurrent > 1): ?>\n                <li class=\"page-item\">\n                    <a\n                        href=\"javascript:;\"\n                        class=\"page-link page-first\"\n                        data-request=\"<?= $this->getEventHandler('onPaginate') ?>\"\n                        data-request-<?= $transportMethod ?>=\"{ <?= e($pageName) ?>: 1 }\"\n                        data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                        title=\"<?= e(trans('backend::lang.list.first_page')) ?>\">\n                        <i class=\"icon-angle-double-left\"></i>\n                    </a>\n                </li>\n            <?php else: ?>\n            <li class=\"page-item disabled\">\n                <span\n                    class=\"page-link page-first\"\n                    title=\"<?= e(trans('backend::lang.list.first_page')) ?>\">\n                    <i class=\"icon-angle-double-left\"></i>\n                </span>\n            <?php endif ?>\n            <?php if ($pageCurrent > 1): ?>\n                <li class=\"page-item\">\n                    <a\n                        href=\"javascript:;\"\n                        class=\"page-link page-back\"\n                        data-request=\"<?= $this->getEventHandler('onPaginate') ?>\"\n                        data-request-<?= $transportMethod ?>=\"{ <?= e($pageName) ?>: <?= $pageCurrent - 1 ?> }\"\n                        data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                        title=\"<?= e(trans('backend::lang.list.prev_page')) ?>\">\n                        <i class=\"icon-angle-left\"></i>\n                    </a>\n                </li>\n            <?php else: ?>\n                <li class=\"page-item disabled\">\n                    <span\n                        class=\"page-link page-back\"\n                        title=\"<?= e(trans('backend::lang.list.prev_page')) ?>\">\n                        <i class=\"icon-angle-left\"></i>\n                    </span>\n                </li>\n            <?php endif ?>\n            <li class=\"page-item active\">\n                <span class=\"page-link page-active\">\n                    <?= $pageCurrent ?>\n                </span>\n            </li>\n            <?php if ($hasMorePages): ?>\n                <li class=\"page-item\">\n                    <a\n                        href=\"javascript:;\"\n                        class=\"page-link page-next\"\n                        data-request-<?= $transportMethod ?>=\"{ <?= e($pageName) ?>: <?= $pageCurrent + 1 ?> }\"\n                        data-request=\"<?= $this->getEventHandler('onPaginate') ?>\"\n                        data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                        title=\"<?= e(trans('backend::lang.list.next_page')) ?>\">\n                        <i class=\"icon-angle-right\"></i>\n                    </a>\n                </li>\n            <?php else: ?>\n                <li class=\"page-item disabled\">\n                    <span\n                        class=\"page-link page-next\"\n                        title=\"<?= e(trans('backend::lang.list.next_page')) ?>\">\n                        <i class=\"icon-angle-right\"></i>\n                    </span>\n                </li>\n            <?php endif ?>\n        </ul>\n    </nav>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/lists/partials/_setup_form.php",
    "content": "<?= Form::open([\n    'data-request-parent-form' => \"#{$this->getId()}\"\n]) ?>\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __(\"List Setup\") ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n    <div class=\"modal-body\">\n        <p class=\"form-text before-field\"><?= __(\"Use checkboxes to select columns you want to see in the list. You can change position of columns by dragging them up or down.\") ?></p>\n\n        <div class=\"control-simplelist with-checkboxes is-sortable\" data-control=\"simplelist\">\n            <ul>\n                <?php foreach ($columns as $key => $column): ?>\n                    <li>\n                        <span class=\"drag-handle\" title=\"<?= __(\"Reorder\") ?>\">\n                            <i class=\"icon-list-reorder\"></i>\n                        </span>\n                        <div class=\"form-check\">\n                            <input\n                                type=\"hidden\"\n                                name=\"column_order[]\"\n                                value=\"<?= e($column->columnName) ?>\" />\n                            <input\n                                class=\"form-check-input\"\n                                id=\"<?= $this->getId('setupCheckbox-'.$column->columnName) ?>\"\n                                name=\"visible_columns[]\"\n                                value=\"<?= e($column->columnName) ?>\"\n                                <?= $column->invisible ? '' : 'checked=\"checked\"' ?>\n                                type=\"checkbox\" />\n                            <label\n                                class=\"form-check-label\"\n                                for=\"<?= $this->getId('setupCheckbox-'.$column->columnName) ?>\">\n                                    <?= __($column->label) ?>\n                            </label>\n                        </div>\n                    </li>\n                <?php endforeach ?>\n            </ul>\n        </div>\n\n        <?php if ($this->showPagination): ?>\n            <div class=\"form-group\">\n                <label><?= __(\"Records Per Page\") ?></label>\n                <p class=\"form-text before-field\">\n                    <?= __(\"Select the number of records per page to display. Please note that high number of records on a single page can reduce performance.\") ?>\n                </p>\n                <select class=\"form-control custom-select select-no-search\" name=\"records_per_page\">\n                    <?php foreach ($perPageOptions as $optionValue): ?>\n                        <option value=\"<?= $optionValue ?>\" <?= $optionValue == $recordsPerPage ? 'selected=\"selected\"' : '' ?>><?= $optionValue ?></option>\n                    <?php endforeach ?>\n                </select>\n            </div>\n        <?php endif ?>\n\n    </div>\n    <div class=\"modal-footer\">\n        <button\n            type=\"button\"\n            class=\"btn btn-primary\"\n            data-request=\"<?= $this->getEventHandler('onApplySetup') ?>\"\n            data-dismiss=\"popup\"\n            data-stripe-load-indicator>\n            <?= __(\"Apply\") ?>\n        </button>\n        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n        <button\n            type=\"button\"\n            class=\"btn btn-link text-muted\"\n            data-dismiss=\"popup\">\n            <?= __(\"Cancel\") ?>\n        </button>\n\n        <button\n            type=\"button\"\n            class=\"btn btn-link pull-right\"\n            data-request=\"<?= $this->getEventHandler('onResetSetup') ?>\"\n            data-dismiss=\"popup\"\n            data-stripe-load-indicator>\n            <?= __(\"Reset to Default\") ?>\n        </button>\n    </div>\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/backend/widgets/liststructure/assets/js/october.liststructure.js",
    "content": "/*\n * List Structure Widget\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype;\n\n    var ListStructureWidget = function (element, options) {\n        this.$el = $(element);\n        this.options = options || {};\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        Base.call(this);\n        this.init();\n    }\n\n    ListStructureWidget.prototype = Object.create(BaseProto);\n    ListStructureWidget.prototype.constructor = ListStructureWidget;\n\n    ListStructureWidget.DEFAULTS = {\n        reorderHandler: 'onReorder',\n        toggleHandler: 'onToggleTreeNode',\n        includeSortOrders: false,\n        useReorder: true,\n        useTree: true,\n        indentSize: 18,\n        maxDepth: null,\n        dragRow: true\n    }\n\n    ListStructureWidget.prototype.init = function() {\n        this.$tableBody = $('table > tbody', this.$el);\n\n        if ($.oc.isTouchEnabled()) {\n            this.options.dragRow = false;\n        }\n\n        if (this.options.useReorder) {\n            this.initReorder();\n        }\n\n        if (this.options.useTree) {\n            this.initTree();\n        }\n\n        this.$el.one('dispose-control', this.proxy(this.dispose));\n    }\n\n    ListStructureWidget.prototype.initTree = function() {\n        this.$el.on('click', '.tree-expand-collapse', this.proxy(this.onToggleTreeNode));\n    }\n\n    ListStructureWidget.prototype.destroyTree = function() {\n        this.$el.off('click', '.tree-expand-collapse', this.proxy(this.onToggleTreeNode));\n    }\n\n    ListStructureWidget.prototype.onToggleTreeNode = function(evt) {\n        var $link = $(evt.target).closest('a');\n        $link.toggleClass('is-expanded');\n        $link.request(this.options.toggleHandler);\n\n        var $item = $link.closest('tr');\n\n        $.each(this.getChildren($item), function() {\n            $(this).toggle();\n        });\n    }\n\n    ListStructureWidget.prototype.initReorder = function() {\n        this.dragging = false;\n\n        this.dragBoundary = {};\n        this.dragStartX = 0;\n        this.draggingX = 0;\n\n        this.activeAncestors = null;\n        this.activeChildren = null;\n        this.lastChildDiff = null;\n\n        var self = this;\n\n        var sortableOptions = {\n            // forceFallback: true,\n            filter: '.no-sort',\n            animation: 150,\n            setData: function setData(dataTransfer, dragEl) {\n                self.dragGhost = dragEl.cloneNode(true);\n                self.dragGhost.classList.add('list-hidden-drag-ghost');\n                document.body.appendChild(self.dragGhost);\n                dataTransfer.setDragImage(self.dragGhost, 0, 0);\n            },\n            onStart: this.proxy(this.onDragStart),\n            onChange: this.proxy(this.onChange),\n            onEnd: this.proxy(this.onDragStop),\n            onMove: this.proxy(this.onDragMove),\n\n            // Auto scroll plugin\n            forceAutoScrollFallback: true,\n            scrollSensitivity: 60,\n            scrollSpeed: 20\n        };\n\n        if (!this.options.dragRow) {\n            sortableOptions.handle = '.list-reorder-handle';\n        }\n\n        this.sortable = Sortable.create(this.$tableBody.get(0), sortableOptions);\n\n        this.$el.on('drag', this.proxy(this.onDragging));\n        this.$el.on('mousemove', this.proxy(this.onDragging));\n        this.$el.on('touchmove', this.proxy(this.onDragging));\n        this.$el.on('pointermove', this.proxy(this.onDragging));\n    }\n\n    ListStructureWidget.prototype.destroyReorder = function() {\n        this.$el.off('drag', this.proxy(this.onDragging));\n        this.$el.off('mousemove', this.proxy(this.onDragging));\n        this.$el.off('touchmove', this.proxy(this.onDragging));\n        this.$el.off('pointermove', this.proxy(this.onDragging));\n    }\n\n    ListStructureWidget.prototype.dispose = function() {\n        if (this.options.useReorder) {\n            this.destroyReorder();\n        }\n\n        if (this.options.useTree) {\n            this.destroyTree();\n        }\n\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n        this.$el.removeData('oc.liststructurewidget');\n\n        this.$tableBody = null;\n        this.$el = null;\n\n        // In some cases options could contain callbacks,\n        // so it's better to clean them up too.\n        this.options = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    ListStructureWidget.prototype.onDragMove = function(evt) {\n        var $item = $(evt.related);\n\n        if (evt.willInsertAfter && !this.canInsertAfter($item)) {\n            return false;\n        }\n\n        if (!evt.willInsertAfter && !this.canInsertBefore($item)) {\n            return false;\n        }\n    }\n\n    ListStructureWidget.prototype.onDragStart = function(evt) {\n        var $item = $(evt.item);\n\n        this.dragging = true;\n        this.activeItem = evt.item;\n        this.activeClone = evt.clone;\n        this.activeAncestors = this.getAncestors($item);\n        this.activeChildren = this.getChildren($item);\n        this.dragStartX = this.getEventPageX(evt.originalEvent);\n        this.$tableBody.addClass('tree-drag-mode');\n\n        var currentDepth = $item.data('tree-level'),\n            lastChildDiff = 0;\n\n        $.each(this.activeChildren, function() {\n            $(this).hide();\n\n            var childLevel = $(this).data('tree-level'),\n                childDiff = childLevel - currentDepth;\n\n            if (childDiff > lastChildDiff) {\n                lastChildDiff = childDiff;\n            }\n        });\n\n        this.lastChildDiff = lastChildDiff;\n        this.setTargetBoundary();\n    }\n\n    ListStructureWidget.prototype.onChange = function(evt, originalEvent) {\n        this.activeItem = evt.item;\n        this.setTargetBoundary();\n    }\n\n    ListStructureWidget.prototype.onDragStop = function(evt) {\n        this.activeItem = null;\n        this.dragging = false;\n        var $item = $(evt.item),\n            self = this,\n            $tableBody = this.$tableBody;\n\n        if (!$tableBody) {\n            return;\n        }\n\n        $tableBody.addClass('tree-drag-updated').removeClass('tree-drag-mode');\n\n        if (this.dragGhost) {\n            $(this.dragGhost).remove();\n            this.dragGhost = null;\n        }\n\n        var currentLevel = $item.data('tree-level'),\n            proposedLevel = $item.data('tree-level-proposed'),\n            levelDistance = currentLevel - proposedLevel;\n\n        $item.data('tree-level', proposedLevel);\n\n        // Bring children along for the ride\n        $.each(this.activeChildren, function() {\n            var $child = $(this),\n                childLevel = $child.data('tree-level');\n\n            $item.after($child.show());\n            self.setIndentOnItem($child, childLevel - levelDistance);\n        });\n\n        // Post back data to server\n        var postData = this.getMovePostData($item, proposedLevel);\n\n        if (this.options.includeSortOrders) {\n            postData.sort_orders = this.getRecordSortData();\n            postData.root_sort_orders = this.getRecordSortData(true);\n        }\n\n        this.$el.request(this.options.reorderHandler, {\n            data: postData\n        }).always(function () {\n            $tableBody.removeClass('tree-drag-updated');\n        });\n    }\n\n    ListStructureWidget.prototype.getMovePostData = function($item, proposedLevel) {\n        var data = {\n            record_id: $item.data('tree-id')\n        };\n\n        // Find next row\n        var $nextRow = $item.next();\n        while ($nextRow.length) {\n            var nextRowLevel = $nextRow.data('tree-level');\n\n            if (nextRowLevel === proposedLevel) {\n                data.next_id = $nextRow.data('tree-id');\n                data.next_root_id = $nextRow.data('tree-root-id');\n                break;\n            }\n\n            if (nextRowLevel < proposedLevel) {\n                break;\n            }\n\n            $nextRow = $nextRow.next();\n        }\n\n        // Find previous row\n        var $prevRow = $item.prev();\n        while ($prevRow.length) {\n            var prevRowLevel = $prevRow.data('tree-level');\n\n            if (prevRowLevel === proposedLevel) {\n                data.previous_id = $prevRow.data('tree-id');\n                data.previous_root_id = $prevRow.data('tree-root-id');\n                break;\n            }\n\n            if (prevRowLevel < proposedLevel) {\n                break;\n            }\n\n            $prevRow = $prevRow.prev();\n        }\n\n        // Find parent row\n        $prevRow = $item.prev();\n        while ($prevRow.length) {\n            var prevRowLevel = $prevRow.data('tree-level');\n\n            if (prevRowLevel < proposedLevel) {\n                data.parent_id = $prevRow.data('tree-id');\n                data.parent_root_id = $prevRow.data('tree-root-id');\n                break;\n            }\n\n            $prevRow = $prevRow.prev();\n        }\n\n        return data;\n    }\n\n    ListStructureWidget.prototype.getRecordSortData = function(rootId) {\n        var sortOrders = [];\n\n        $('[data-tree-id]', this.$tableBody).each(function() {\n            sortOrders.push($(this).data(rootId ? 'tree-root-id' : 'tree-id'))\n        });\n\n        return sortOrders;\n    }\n\n    ListStructureWidget.prototype.onDragging = function(evt) {\n        if (!this.dragging) {\n            return;\n        }\n\n        this.draggingX = this.getEventPageX(evt);\n\n        this.setIndent();\n\n        $('.list-cell-tree:first', this.activeClone).css('padding-left', 1);\n    }\n\n    ListStructureWidget.prototype.getAncestors = function($row) {\n        var ancestors = [],\n            targetLevel = $row.data('tree-level');\n\n        if (targetLevel === 0) {\n            return ancestors;\n        }\n\n        var level = targetLevel,\n            $prevRow = $row.prev();\n\n        while ($prevRow.length) {\n            var currentLevel = $prevRow.data('tree-level');\n            if (currentLevel < level) {\n                ancestors.unshift($prevRow);\n                level = currentLevel;\n\n                if (level === 0) {\n                    break;\n                }\n            }\n\n            $prevRow = $prevRow.prev();\n        }\n\n        return ancestors;\n    }\n\n    ListStructureWidget.prototype.getChildren = function($row) {\n        var children = [],\n            targetLevel = $row.data('tree-level'),\n            $nextRow = $row.next();\n\n        while ($nextRow.length) {\n            var currentLevel = $nextRow.data('tree-level');\n            if (currentLevel > targetLevel) {\n                children.unshift($nextRow);\n            }\n\n            if (currentLevel <= targetLevel) {\n                break;\n            }\n\n            $nextRow = $nextRow.next();\n        }\n\n        return children;\n    }\n\n    ListStructureWidget.prototype.setTargetBoundary = function() {\n        var $item = $(this.activeItem);\n        this.dragBoundary = this.getIndentBoundaries($item.prev(), $item.next());\n    }\n\n    ListStructureWidget.prototype.canInsertBefore = function($item) {\n        return this.getIndentBoundaries($item.prev(), $item, true) !== false;\n    }\n\n    ListStructureWidget.prototype.canInsertAfter = function($item) {\n        return this.getIndentBoundaries($item, $item.next(), true) !== false;\n    }\n\n    ListStructureWidget.prototype.getIndentBoundaries = function($prevRow, $nextRow, isMaxCheck) {\n        var minLevel = 0,\n            maxLevel = 0;\n\n        if ($nextRow.length && $nextRow.is(':visible')) {\n            minLevel = $nextRow.data('tree-level');\n        }\n\n        if ($prevRow.length && $prevRow.is(':visible')) {\n            maxLevel = $prevRow.data('tree-level') + 1;\n\n            if (!$prevRow.data('tree-expanded') && $prevRow.data('tree-children')) {\n                maxLevel--;\n            }\n        }\n\n        var maxDepth = this.getMaxDepth();\n        if (maxDepth !== null) {\n            if (minLevel !== 0 && minLevel + this.lastChildDiff > maxDepth) {\n                if (isMaxCheck) {\n                    return false;\n                }\n\n                maxLevel = maxDepth - this.lastChildDiff;\n                if (minLevel > maxLevel) {\n                    minLevel = maxLevel;\n                }\n            }\n\n            if (maxLevel + this.lastChildDiff > maxDepth) {\n                maxLevel = maxDepth - this.lastChildDiff;\n                if (maxLevel < minLevel) {\n                    maxLevel = minLevel;\n                }\n            }\n        }\n\n        return {\n            min: minLevel,\n            max: maxLevel\n        }\n    }\n\n    ListStructureWidget.prototype.getMaxDepth = function() {\n        if (!this.options.maxDepth) {\n            return null;\n        }\n\n        // Reflected as maximum allowed levels\n        return this.options.maxDepth - 1;\n    }\n\n    ListStructureWidget.prototype.setIndent = function() {\n        var currentLevel = $(this.activeItem).data('tree-level');\n\n        var distanceFromStart = this.draggingX - this.dragStartX;\n\n        var indentDistance = Math.round(distanceFromStart / this.options.indentSize);\n\n        var proposedLevel = currentLevel + indentDistance;\n\n        if (proposedLevel < this.dragBoundary.min) {\n            proposedLevel = this.dragBoundary.min;\n        }\n        else if (proposedLevel > this.dragBoundary.max) {\n            proposedLevel = this.dragBoundary.max;\n        }\n\n        this.setIndentOnItem(this.activeItem, proposedLevel, true);\n    }\n\n    ListStructureWidget.prototype.setIndentOnItem = function(item, indentLevel, isProposal) {\n        if (isProposal) {\n            $(item).data('tree-level-proposed', indentLevel);\n        }\n        else {\n            $(item).data('tree-level', indentLevel);\n        }\n\n        $('> .list-cell-tree:first', item).css('padding-left', this.getIndentStartSize(indentLevel));\n    }\n\n    ListStructureWidget.prototype.getIndentStartSize = function(treeLevel) {\n        return (treeLevel * this.options.indentSize) +\n            (this.options.useTree ? 15 : 0) +\n            (this.options.useReorder ? 0 : 15);\n    }\n\n    ListStructureWidget.prototype.getEventPageX = function(evt) {\n        return evt.pageX || (evt.touches && evt.touches[0].pageX) || 0;\n    }\n\n    // LISTREE WIDGET PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.listStructureWidget;\n\n    $.fn.listStructureWidget = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result;\n\n        this.each(function () {\n            var $this   = $(this);\n            var data    = $this.data('oc.liststructurewidget');\n            var options = $.extend({}, ListStructureWidget.DEFAULTS, $this.data(), typeof option == 'object' && option);\n            if (!data) $this.data('oc.liststructurewidget', (data = new ListStructureWidget(this, options)));\n            if (typeof option == 'string') result = data[option].apply(data, args);\n            if (typeof result != 'undefined') return false;\n        });\n\n        return result ? result : this;\n      }\n\n    $.fn.listStructureWidget.Constructor = ListStructureWidget;\n\n    // LISTREE WIDGET NO CONFLICT\n    // =================\n\n    $.fn.listStructureWidget.noConflict = function () {\n        $.fn.listStructureWidget = old;\n        return this;\n    }\n\n\n    // LISTREE WIDGET DATA-API\n    // ==============\n\n    $(document).render(function(){\n        $('[data-control=\"liststructurewidget\"]')\n            .listWidget()\n            .listStructureWidget()\n        ;\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/liststructure/partials/_list.php",
    "content": "<?php\n    $useRowLink = $this->hasRecordAction();\n\n    $classes = [\n        'list-scrollable',\n    ];\n\n    if ($useRowLink) $classes[] = 'list-rowlink';\n    if ($showCheckboxes) $classes[] = 'list-checkboxes';\n?>\n<div\n    class=\"control-list <?= implode(' ', $classes) ?>\"\n    data-control=\"liststructurewidget\"\n    data-reorder-handler=\"<?= $this->getEventHandler('onReorder') ?>\"\n    data-toggle-handler=\"<?= $this->getEventHandler('onToggleTreeNode') ?>\"\n    data-use-reorder=\"<?= $showReorder ?>\"\n    data-use-tree=\"<?= $showTree ?>\"\n    data-drag-row=\"<?= $dragRow ?>\"\n    data-include-sort-orders=\"<?= $includeSortOrders ?>\"\n    data-indent-size=\"<?= $indentSize ?>\"\n    data-stripe-load-indicator\n    <?php if ($maxDepth !== null): ?>data-max-depth=\"<?= $maxDepth ?>\"<?php endif ?>\n>\n    <div class=\"list-content\">\n        <table class=\"table data\" <?= $useRowLink ? 'data-control=\"rowlink\"' : '' ?>>\n            <thead>\n                <?= $this->makePartial('list_head_row') ?>\n            </thead>\n            <tbody>\n                <?php if (count($records)): ?>\n                    <?= $this->makePartial('list_body_rows') ?>\n                <?php else: ?>\n                    <tr class=\"no-data no-sort\">\n                        <td colspan=\"<?= $columnTotal ?>\" class=\"nolink\">\n                            <p class=\"no-data\"><?= $noRecordsMessage ?></p>\n                        </td>\n                    </tr>\n                <?php endif ?>\n            </tbody>\n        </table>\n        <?php if ($showPagination): ?>\n            <div class=\"list-footer\">\n                <?php if ($showPageNumbers): ?>\n                    <?= $this->makePartial('list_pagination') ?>\n                <?php else: ?>\n                    <?= $this->makePartial('list_pagination_simple') ?>\n                <?php endif ?>\n            </div>\n        <?php endif ?>\n\n        <?= $this->makePartial('list_datalocker') ?>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/liststructure/partials/_list_body_reorder.php",
    "content": "<td class=\"list-reorder nolink\">\n    <span\n        class=\"list-reorder-handle\"\n        title=\"<?= e(trans('backend::lang.treeview.reorder')) ?>\">\n        <i class=\"icon-list-reorder\"></i>\n    </span>\n</td>\n"
  },
  {
    "path": "modules/backend/widgets/liststructure/partials/_list_body_row.php",
    "content": "<?php\n    $expanded = $showTree ? $this->isTreeNodeExpanded($record) : null;\n    $childRecords = $showTree ? $record->getChildren() : null;\n    $treeLevelClass = $showTree ? 'list-tree-level-'.$treeLevel : '';\n    $childCount = $showTree ? $record->getChildCount() : 0;\n?>\n<tr\n    class=\"<?= $treeLevelClass ?> <?= $this->getRowClass($record) ?>\"\n    data-tree-id=\"<?= $record->getKey() ?>\"\n    data-tree-root-id=\"<?= $record->site_root_id ?: $record->getKey() ?>\"\n    data-tree-level=\"<?= $treeLevel ?>\"\n    data-tree-expanded=\"<?= $expanded ? 'true' : 'false' ?>\"\n    data-tree-children=\"<?= $childCount ?>\"\n>\n    <?php if ($showCheckboxes): ?>\n        <?= $this->makePartial('list_body_checkbox', ['record' => $record]) ?>\n    <?php endif ?>\n    <?php if ($showReorder): ?>\n        <?= $this->makePartial('list_body_reorder', ['record' => $record]) ?>\n    <?php endif ?>\n    <?php $index = $action = 0; $total = count($columns); foreach ($columns as $key => $column): ?>\n        <?php\n            $index++;\n            $classes = [\n                'list-cell-index-'.$index,\n                'list-cell-name-'.$column->getName(),\n                'list-cell-type-'.$column->type,\n                $column->getAlignClass(),\n                $column->cssClass\n            ];\n\n            if (!$column->clickable) {\n                $classes[] = 'nolink';\n            }\n\n            $isLastWithoutStructure = $expandLastColumn && !$useStructure && $index === $total;\n\n            $styles = '';\n            $isTreeCell = $index === 1 && $useStructure;\n            if ($isTreeCell) {\n                $classes[] = 'list-cell-tree';\n                $styles = 'padding-left:'.$this->getIndentStartSize($treeLevel).'px';\n            }\n        ?>\n        <td class=\"<?= implode(' ', $classes) ?>\" style=\"<?= $styles ?>\" <?= $isLastWithoutStructure ? 'colspan=\"2\"' : '' ?>>\n            <?php if ($isTreeCell): ?>\n                <?= $this->makePartial('list_body_tree', [\n                    'treeLevel' => $treeLevel,\n                    'record' => $record,\n                    'expanded' => $expanded,\n                    'childCount' => $childCount\n                ]) ?>\n            <?php endif ?>\n            <?php if ($column->clickable && !$action && ($action = $this->getRecordAction($record))): ?>\n                <a <?= $action[1] ?> href=\"<?= $action[0] ?>\">\n                    <?= $this->getColumnValue($record, $column) ?>\n                </a>\n            <?php else: ?>\n                <?= $this->getColumnValue($record, $column) ?>\n            <?php endif ?>\n        </td>\n    <?php endforeach ?>\n    <?php if (!$expandLastColumn && !$useStructure): ?>\n        <td></td>\n    <?php endif ?>\n</tr>\n\n<?php if ($showTree && $expanded): ?>\n    <?= $this->makePartial('list_body_rows', [\n        'records' => $childRecords,\n        'treeLevel' => $treeLevel + 1\n    ]) ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/liststructure/partials/_list_body_rows.php",
    "content": "<?php foreach ($records as $record): ?>\n    <?= $this->makePartial('list_body_row', [\n        'record' => $record,\n        'treeLevel' => $treeLevel\n    ]) ?>\n<?php endforeach ?>\n"
  },
  {
    "path": "modules/backend/widgets/liststructure/partials/_list_body_tree.php",
    "content": "<?php if ($childCount): ?>\n    <div class=\"nolink\">\n        <a\n            href=\"javascript:;\"\n            class=\"tree-expand-collapse <?= $expanded ? 'is-expanded' : '' ?> nolink\"\n            data-stripe-load-indicator\n            data-request-data=\"node_id: '<?= $record->getKey() ?>', status: <?= $expanded ? 1 : 0 ?>\"\n            title=\"<?= e(__($expanded ? 'backend::lang.treeview.collapse' : 'backend::lang.treeview.expand')) ?>\">\n            <span></span>\n        </a>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/liststructure/partials/_list_head_row.php",
    "content": "<tr>\n    <?php if ($showCheckboxes): ?>\n        <th class=\"list-checkbox\">\n            <input type=\"checkbox\" class=\"form-check-input\" />\n        </th>\n    <?php endif ?>\n    <?php if ($showReorder): ?>\n        <th class=\"list-reorder\"></th>\n    <?php endif ?>\n    <?php $index = 0; foreach ($columns as $key => $column): ?>\n        <?php\n            $index++;\n            $styles = [];\n            if ($column->width) {\n                $styles[] = 'width: '.$column->width;\n            }\n\n            $classes = [\n                'list-cell-name-'.$column->getName(),\n                'list-cell-type-'.$column->type,\n                $column->getAlignClass(),\n                $column->headCssClass\n            ];\n\n            if ($column->tooltip) {\n                $classes[] = 'has-tooltip';\n            }\n\n            if ($showReorder && $index === 1) {\n                $styles[] = 'padding-left: '.$this->getIndentStartSize(0).'px';\n                $classes[] = 'explicit-left-padding';\n            }\n        ?>\n        <?php if ($showSorting && $column->sortable): ?>\n            <?php\n                $classes[] = $this->sortColumn == $column->columnName\n                    ? 'sort-'.$this->sortDirection.' active'\n                    : 'sort-desc';\n            ?>\n            <th style=\"<?= implode(';', $styles) ?>\" class=\"<?= implode(' ', $classes) ?>\">\n                <a\n                    href=\"javascript:;\"\n                    data-request=\"<?= $this->getEventHandler('onSort') ?>\"\n                    data-stripe-load-indicator\n                    data-request-data=\"sortColumn: '<?= $column->columnName ?>', page: <?= $pageCurrent ?>\"\n                ><?= $this->getHeaderValue($column) ?><?php if ($column->tooltip): ?><?=\n                    $this->makePartial('list_head_tooltip', ['column' => $column])\n                ?><?php endif ?></a>\n            </th>\n        <?php else: ?>\n            <th style=\"<?= implode(';', $styles) ?>\" class=\"<?= implode(' ', $classes) ?>\">\n                <span><?= $this->getHeaderValue($column) ?><?php if ($column->tooltip): ?><?=\n                    $this->makePartial('list_head_tooltip', ['column' => $column])\n                ?><?php endif ?></span>\n            </th>\n        <?php endif ?>\n    <?php endforeach ?>\n\n    <?php if (!$useStructure): ?>\n        <th class=\"list-setup setup-show-structure\">\n            <a href=\"javascript:;\"\n                title=\"<?= __(\"Show Structure\") ?>\"\n                data-request=\"<?= $this->getEventHandler('onShowStructure') ?>\"><span></span></a>\n        </th>\n    <?php endif ?>\n</tr>\n"
  },
  {
    "path": "modules/backend/widgets/reportcontainer/assets/css/reportcontainer.css",
    "content": ".report-container{margin-bottom:15px}.report-container>ul{list-style:none;margin-bottom:15px;padding:0}.report-container>ul .item{display:block;float:left;overflow:hidden}.report-container>ul .item .content{margin:5px;position:relative}.report-container>ul .item .content .drag-handle{cursor:move;height:24px;left:8px;opacity:0;position:absolute;top:12px;transition:opacity .2s;width:24px}.report-container>ul .item .content .drag-handle>i{font-size:24px;line-height:1}.report-container>ul .item .content .widget-control{color:#b6b6b6;display:none;height:15px;outline:none;position:absolute;width:15px}.report-container>ul .item .content .widget-control:hover{color:var(--bs-link-color)}.report-container>ul .item .content .report-widget h3{padding-left:0;transition:padding .2s}.report-container>ul .item .content .edit-widget{right:12px;text-indent:-10000em;top:15px}.report-container>ul .item .content .edit-widget:before{display:block;font-size:15px;height:15px;left:0;position:absolute;text-indent:0;width:15px}.report-container>ul .item .content .edit-widget:hover:before{text-decoration:none}.report-container>ul .item .content .edit-widget.inspector-open{display:block}.report-container>ul .item.is-removable .edit-widget{right:40px}.report-container>ul .item.is-removable .btn-close{font-size:13px;right:12px;top:12px}.report-container>ul .item.is-sortable.dragged .report-widget h3,.report-container>ul .item.is-sortable:hover .report-widget h3{padding-left:18px}.report-container>ul .item.is-sortable.dragged .drag-handle,.report-container>ul .item.is-sortable:hover .drag-handle{opacity:1}.report-container>ul .item.dragged .widget-control,.report-container>ul .item:hover .widget-control{display:block}.report-container>ul .item.width-1{width:8.33%}.report-container>ul .item.width-2{width:16.66%}.report-container>ul .item.width-3{width:24.99%}.report-container>ul .item.width-4{width:33.32%}.report-container>ul .item.width-5{width:41.65%}.report-container>ul .item.width-6{width:49.98%}.report-container>ul .item.width-7{width:58.31%}.report-container>ul .item.width-8{width:66.64%}.report-container>ul .item.width-9{width:74.97%}.report-container>ul .item.width-10{width:83.3%}.report-container>ul .item.width-11{width:91.63%}.report-container>ul .item.width-12{width:100%}.report-container>ul .item.dragged{opacity:.5;position:absolute;transform:translateZ(0)!important;transition-duration:0s!important;z-index:2000}.report-container>ul .item.placeholder{display:none}.report-container>ul .item.separator{width:100%!important}.report-container>ul.add-delete .item .content .edit-widget{right:40px}.report-container>ul.wrapped .item{width:100%!important}.report-container .manage-widgets{background-color:var(--oc-dropdown-trigger-bg);border:1px dashed var(--oc-dropdown-trigger-border);border-radius:4px;color:var(--oc-dropdown-trigger-color);display:inline-block;font-size:14px;font-weight:400;margin-left:5px;padding:7px 15px}.report-container .manage-widgets i{margin-right:5px}.report-container .manage-widgets.show,.report-container .manage-widgets:hover{background-color:var(--oc-dropdown-hover-bg);border-color:transparent;color:var(--oc-dropdown-hover-color);text-decoration:none}.report-container.isotope,.report-container.isotope .isotope-item{transition-duration:.8s}.report-container.isotope{transition-property:height,width}.report-container.isotope .isotope-item{transition-property:transform,opacity}@media (max-width:768px){.report-container ul .item{width:100%!important}}\n"
  },
  {
    "path": "modules/backend/widgets/reportcontainer/assets/js/reportcontainer.js",
    "content": "/*\n * Report container widget\n *\n * Data attributes:\n * - data-control=\"report-container\" - enables the report container plugin\n *\n * JavaScript API:\n * $('#container').reportContainer()\n *\n * Dependancies:\n * - Isotope (isotope.js)\n */\n+function ($) { \"use strict\";\n\n    // REPORTCONTAINER CLASS DEFINITION\n    // ============================\n\n    var ReportContainer = function(element, options) {\n        this.options = options;\n        this.$el= $(element);\n        this.$form = this.$el.closest('form');\n        this.$toolbar = $('[data-container-toolbar]', this.$form);\n        this.alias = $('[data-container-alias]', this.$form).val();\n\n        this.init();\n    }\n\n    ReportContainer.DEFAULTS = {\n        breakpoint: 768,\n        columns: 12\n    }\n\n    ReportContainer.prototype.init = function() {\n        var self = this;\n\n        this.$el.isotope({\n            itemSelector: '.item',\n            resizable: false\n        });\n\n        $(window).resize($.proxy(this.updateWidth, this));\n        this.updateWidth();\n\n        if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) {\n            this.$el.sortable({\n                vertical: false,\n                handle: '.drag-handle',\n                onDrop: function($item, container, _super) {\n                    $item.removeClass('dragged');\n                    $('body').removeClass('dragging');\n\n                    self.updateSeparators();\n                    self.redraw();\n                    self.postSortOrders();\n                }\n            });\n        }\n\n        this.$el.on('hidden.oc.inspector', '[data-inspectable]', function() {\n            var values = $('[data-inspector-values]', this).val(),\n                parsedValues = JSON.parse(values),\n                li = $(this).closest('li').get(0);\n\n            self.$form.request(self.alias + '::onUpdateWidget', {\n                data: {\n                    'fields': values,\n                    'alias': $('[data-widget-alias]', $(this).closest('div.content')).val()\n                },\n                success: function(data) {\n                    this.success(data).done(function() {\n                        li.className = li.className.replace(/width\\-[0-9]+/g, '');\n                        $(li).addClass('width-'+parsedValues['ocWidgetWidth']);\n                        $(li).toggleClass('new-line', parsedValues['ocWidgetNewRow'] == 1);\n\n                        self.updateSeparators();\n                        self.redraw();\n                    });\n                }\n            });\n        });\n\n        this.$el.on('click', '.content > button[data-remove-widget]', function() {\n            var $btn = $(this);\n            oc.confirm($.oc.lang.get('alert.widget_remove_confirm'), function(isConfirm) {\n                if (!isConfirm) {\n                    return;\n                }\n\n                self.$form.request(self.alias + '::onRemoveWidget', {\n                    data: {\n                        'alias': $('[data-widget-alias]', $btn.closest('div.content')).val()\n                    }\n                });\n\n                $btn.closest('li').remove();\n                self.redraw();\n                self.setSortOrders();\n            });\n        });\n\n        $(window).on('oc.reportWidgetAdded', function() {\n            self.redraw();\n            self.setSortOrders();\n        });\n\n        $(window).on('oc.reportWidgetRefresh', function() {\n            self.redraw();\n        });\n\n        window.setTimeout(function() {\n            self.updateWidth();\n            self.redraw();\n        }, 200);\n\n        this.setSortOrders();\n    }\n\n    ReportContainer.prototype.updateWidth = function() {\n        var width = this.$el.width(),\n            wrapped = width <= this.options.breakpoint,\n            columnWidth = wrapped ? width : width / this.options.columns;\n\n        this.$el.isotope({\n            masonry: { columnWidth: columnWidth }\n        });\n\n        this.$el.toggleClass('wrapped', wrapped);\n    }\n\n    ReportContainer.prototype.redraw = function() {\n        this.$el\n            .isotope('reloadItems')\n            .isotope({ sortBy: 'original-order' });\n\n        var $items = $('li.item', this.$el);\n\n        $items.css({'width': '', 'height': ''});\n\n        $('> .dropdown', this.$toolbar).toggleClass('dropup', !!$items.length);\n    }\n\n    ReportContainer.prototype.setSortOrders = function() {\n        this.sortOrders = [];\n\n        var self = this\n        $('[data-widget-order]', this.$el).each(function() {\n            self.sortOrders.push($(this).val());\n        });\n    }\n\n    ReportContainer.prototype.postSortOrders = function() {\n        var aliases = [],\n            self = this;\n\n        $('[data-widget-alias]', this.$el).each(function() {\n            aliases.push($(this).val());\n        });\n\n        this.$form.request(self.alias + '::onSetWidgetOrders', {\n            data: {\n                'aliases': aliases.join(','),\n                'orders': self.sortOrders.join(',')\n            }\n        });\n    }\n\n    ReportContainer.prototype.updateSeparators = function() {\n        $('li.item.separator', this.$el).remove();\n        $('li.item.new-line', this.$el).each(function() {\n            $(this).before('<li class=\"item separator\"></li>')\n        });\n    }\n\n    // REPORTCONTAINER PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.reportContainer\n\n    $.fn.reportContainer = function(option) {\n        return this.each(function() {\n            var $this   = $(this)\n            var data    = $this.data('oc.reportContainer')\n            var options = $.extend({}, ReportContainer.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.reportContainer', (data = new ReportContainer(this, options)))\n            if (typeof option == 'string') data[option].call($this)\n        })\n    }\n\n    $.fn.reportContainer.Constructor = ReportContainer;\n\n    // REPORTCONTAINER NO CONFLICT\n    // =================\n\n    $.fn.reportContainer.noConflict = function() {\n        $.fn.reportContainer = old;\n        return this;\n    }\n\n    // REPORTCONTAINER DATA-API\n    // ===============\n\n    $(document).render(function() {\n        $('[data-control=\"report-container\"]').reportContainer();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/reportcontainer/assets/less/reportcontainer.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n.report-container {\n    margin-bottom: 15px;\n    > ul {\n        list-style: none;\n        padding: 0;\n        margin-bottom: 15px;\n\n        .item {\n            float: left;\n            overflow: hidden;\n            display: block;\n\n            .content {\n                margin: 5px;\n                position: relative;\n\n                .drag-handle {\n                    width: 24px;\n                    height: 24px;\n                    position: absolute;\n                    left: 8px;\n                    top: 12px;\n                    opacity: 0;\n                    transition: opacity 0.2s;\n                    cursor: move;\n\n                    > i {\n                        font-size: 24px;\n                        line-height: 1;\n                    }\n                }\n\n                .widget-control {\n                    position: absolute;\n                    display: none;\n                    width: 15px;\n                    height: 15px;\n                    color: @color-report-widget-control-inactive;\n                    outline: none;\n\n                    &:hover {\n                        color: @link-color;\n                    }\n                }\n\n                .report-widget h3 {\n                    padding-left: 0;\n                    .transition(padding 0.2s);\n                }\n\n                .edit-widget {\n                    text-indent: -10000em;\n                    right: 12px;\n                    top: 15px;\n\n                    &:before {\n                        position: absolute;\n                        display: block;\n                        text-indent: 0;\n                        left: 0;\n                        width: 15px;\n                        height: 15px;\n                        font-size: 15px;\n                    }\n\n                    &:hover:before {\n                        text-decoration: none;\n                    }\n\n                    &.inspector-open {\n                        display: block;\n                    }\n                }\n            }\n\n            &.is-removable {\n                .edit-widget {\n                    right: 40px;\n                }\n\n                .btn-close {\n                    right: 12px;\n                    top: 12px;\n                    font-size: 13px;\n                }\n            }\n\n            &.is-sortable {\n                &:hover, &.dragged {\n                    .report-widget h3 {\n                        padding-left: 18px;\n                    }\n\n                    .drag-handle {\n                        opacity: 1;\n                    }\n                }\n            }\n\n            &:hover, &.dragged {\n                .widget-control {\n                    display: block;\n                }\n            }\n\n            &.width-1 { width: 8.33%; }\n            &.width-2 { width: 16.66%; }\n            &.width-3 { width: 24.99%; }\n            &.width-4 { width: 33.32%; }\n            &.width-5 { width: 41.65%; }\n            &.width-6 { width: 49.98%; }\n            &.width-7 { width: 58.31%; }\n            &.width-8 { width: 66.64%; }\n            &.width-9 { width: 74.97%; }\n            &.width-10 { width: 83.3%; }\n            &.width-11 { width: 91.63%; }\n            &.width-12 { width: 100%; }\n\n            &.dragged {\n                .transition-duration(0s) !important;\n                .translate3d(0, 0, 0) !important;\n                position: absolute;\n                opacity: 0.5;\n                z-index: 2000;\n            }\n\n            &.placeholder {\n                display: none;\n            }\n\n            &.separator {\n                width: 100% !important;\n            }\n        }\n\n        &.add-delete .item .content .edit-widget {\n            right: 40px;\n        }\n\n        &.wrapped {\n            .item {\n                width: 100% !important;\n            }\n        }\n    }\n\n    .manage-widgets {\n        display: inline-block;\n        color: @dropdown-trigger-color;\n        background-color: @dropdown-trigger-bg;\n        border: 1px dashed @dropdown-trigger-border;\n        padding: 7px 15px;\n        font-size: @font-size-base;\n        font-weight: normal;\n        border-radius: @border-radius-base;\n        margin-left: 5px;\n\n        i {\n            margin-right: 5px;\n        }\n    }\n\n    .manage-widgets:hover,\n    .manage-widgets.show {\n        background-color: @dropdown-hover-bg;\n        border-color: transparent;\n        color: @dropdown-hover-color;\n        text-decoration: none;\n    }\n\n    //\n    // Isotope CSS3 transitions\n    //\n\n    &.isotope,\n    &.isotope .isotope-item {\n        transition-duration: 0.8s;\n    }\n\n    &.isotope {\n        transition-property: height, width;\n    }\n\n    &.isotope .isotope-item {\n        transition-property: transform, opacity;\n    }\n}\n\n@media (max-width: @screen-sm) {\n    .report-container {\n        ul .item {\n            // The breakpoint should be defined in the CSS and JS,\n            // otherwise some widgets can't calculate the width properly,\n            // as the JS is applied too late.\n            width: 100% !important;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/reportcontainer/assets/vendor/isotope/jquery.isotope.js",
    "content": "/*!\n * Isotope PACKAGED v3.0.6\n *\n * Licensed GPLv3 for open source use\n * or Isotope Commercial License for commercial use\n *\n * https://isotope.metafizzy.co\n * Copyright 2010-2018 Metafizzy\n */\n\n/**\n * Bridget makes jQuery widgets\n * v2.0.1\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /* globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) {\n      return factory( window, jQuery );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('jquery')\n    );\n  } else {\n    // browser global\n    window.jQueryBridget = factory(\n      window,\n      window.jQuery\n    );\n  }\n\n}( window, function factory( window, jQuery ) {\n'use strict';\n\n// ----- utils ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// helper function for logging errors\n// $.error breaks jQuery chaining\nvar console = window.console;\nvar logError = typeof console == 'undefined' ? function() {} :\n  function( message ) {\n    console.error( message );\n  };\n\n// ----- jQueryBridget ----- //\n\nfunction jQueryBridget( namespace, PluginClass, $ ) {\n  $ = $ || jQuery || window.jQuery;\n  if ( !$ ) {\n    return;\n  }\n\n  // add option method -> $().plugin('option', {...})\n  if ( !PluginClass.prototype.option ) {\n    // option setter\n    PluginClass.prototype.option = function( opts ) {\n      // bail out if not an object\n      if ( !$.isPlainObject( opts ) ){\n        return;\n      }\n      this.options = $.extend( true, this.options, opts );\n    };\n  }\n\n  // make jQuery plugin\n  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {\n    if ( typeof arg0 == 'string' ) {\n      // method call $().plugin( 'methodName', { options } )\n      // shift arguments by 1\n      var args = arraySlice.call( arguments, 1 );\n      return methodCall( this, arg0, args );\n    }\n    // just $().plugin({ options })\n    plainCall( this, arg0 );\n    return this;\n  };\n\n  // $().plugin('methodName')\n  function methodCall( $elems, methodName, args ) {\n    var returnValue;\n    var pluginMethodStr = '$().' + namespace + '(\"' + methodName + '\")';\n\n    $elems.each( function( i, elem ) {\n      // get instance\n      var instance = $.data( elem, namespace );\n      if ( !instance ) {\n        logError( namespace + ' not initialized. Cannot call methods, i.e. ' +\n          pluginMethodStr );\n        return;\n      }\n\n      var method = instance[ methodName ];\n      if ( !method || methodName.charAt(0) == '_' ) {\n        logError( pluginMethodStr + ' is not a valid method' );\n        return;\n      }\n\n      // apply method, get return value\n      var value = method.apply( instance, args );\n      // set return value if value is returned, use only first value\n      returnValue = returnValue === undefined ? value : returnValue;\n    });\n\n    return returnValue !== undefined ? returnValue : $elems;\n  }\n\n  function plainCall( $elems, options ) {\n    $elems.each( function( i, elem ) {\n      var instance = $.data( elem, namespace );\n      if ( instance ) {\n        // set options & init\n        instance.option( options );\n        instance._init();\n      } else {\n        // initialize new instance\n        instance = new PluginClass( elem, options );\n        $.data( elem, namespace, instance );\n      }\n    });\n  }\n\n  updateJQuery( $ );\n\n}\n\n// ----- updateJQuery ----- //\n\n// set $.bridget for v1 backwards compatibility\nfunction updateJQuery( $ ) {\n  if ( !$ || ( $ && $.bridget ) ) {\n    return;\n  }\n  $.bridget = jQueryBridget;\n}\n\nupdateJQuery( jQuery || window.jQuery );\n\n// -----  ----- //\n\nreturn jQueryBridget;\n\n}));\n\n/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /* globals define, module, window */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD - RequireJS\n    define( 'ev-emitter/ev-emitter',factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory();\n  } else {\n    // Browser globals\n    global.EvEmitter = factory();\n  }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // set events hash\n  var events = this._events = this._events || {};\n  // set listeners array\n  var listeners = events[ eventName ] = events[ eventName ] || [];\n  // only add once\n  if ( listeners.indexOf( listener ) == -1 ) {\n    listeners.push( listener );\n  }\n\n  return this;\n};\n\nproto.once = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // add event\n  this.on( eventName, listener );\n  // set once flag\n  // set onceEvents hash\n  var onceEvents = this._onceEvents = this._onceEvents || {};\n  // set onceListeners object\n  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n  // set flag\n  onceListeners[ listener ] = true;\n\n  return this;\n};\n\nproto.off = function( eventName, listener ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  var index = listeners.indexOf( listener );\n  if ( index != -1 ) {\n    listeners.splice( index, 1 );\n  }\n\n  return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  // copy over to avoid interference if .off() in listener\n  listeners = listeners.slice(0);\n  args = args || [];\n  // once stuff\n  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n  for ( var i=0; i < listeners.length; i++ ) {\n    var listener = listeners[i]\n    var isOnce = onceListeners && onceListeners[ listener ];\n    if ( isOnce ) {\n      // remove listener\n      // remove before trigger to prevent recursion\n      this.off( eventName, listener );\n      // unset once flag\n      delete onceListeners[ listener ];\n    }\n    // trigger listener\n    listener.apply( this, args );\n  }\n\n  return this;\n};\n\nproto.allOff = function() {\n  delete this._events;\n  delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n\n/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n  /* jshint strict: false */ /* globals define, module */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'get-size/get-size',factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.getSize = factory();\n  }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n  var num = parseFloat( value );\n  // not a percent like '100%', and a number\n  var isValid = value.indexOf('%') == -1 && !isNaN( num );\n  return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n  function( message ) {\n    console.error( message );\n  };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n  'paddingLeft',\n  'paddingRight',\n  'paddingTop',\n  'paddingBottom',\n  'marginLeft',\n  'marginRight',\n  'marginTop',\n  'marginBottom',\n  'borderLeftWidth',\n  'borderRightWidth',\n  'borderTopWidth',\n  'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n  var size = {\n    width: 0,\n    height: 0,\n    innerWidth: 0,\n    innerHeight: 0,\n    outerWidth: 0,\n    outerHeight: 0\n  };\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    size[ measurement ] = 0;\n  }\n  return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n  var style = getComputedStyle( elem );\n  if ( !style ) {\n    logError( 'Style returned ' + style +\n      '. Are you running this code in a hidden iframe on Firefox? ' +\n      'See https://bit.ly/getsizebug1' );\n  }\n  return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n  // setup once\n  if ( isSetup ) {\n    return;\n  }\n  isSetup = true;\n\n  // -------------------------- box sizing -------------------------- //\n\n  /**\n   * Chrome & Safari measure the outer-width on style.width on border-box elems\n   * IE11 & Firefox<29 measures the inner-width\n   */\n  var div = document.createElement('div');\n  div.style.width = '200px';\n  div.style.padding = '1px 2px 3px 4px';\n  div.style.borderStyle = 'solid';\n  div.style.borderWidth = '1px 2px 3px 4px';\n  div.style.boxSizing = 'border-box';\n\n  var body = document.body || document.documentElement;\n  body.appendChild( div );\n  var style = getStyle( div );\n  // round value for browser zoom. desandro/masonry#928\n  isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n  getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n  body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n  setup();\n\n  // use querySeletor if elem is string\n  if ( typeof elem == 'string' ) {\n    elem = document.querySelector( elem );\n  }\n\n  // do not proceed on non-objects\n  if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n    return;\n  }\n\n  var style = getStyle( elem );\n\n  // if hidden, everything is 0\n  if ( style.display == 'none' ) {\n    return getZeroSize();\n  }\n\n  var size = {};\n  size.width = elem.offsetWidth;\n  size.height = elem.offsetHeight;\n\n  var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n  // get all measurements\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    var value = style[ measurement ];\n    var num = parseFloat( value );\n    // any 'auto', 'medium' value will be 0\n    size[ measurement ] = !isNaN( num ) ? num : 0;\n  }\n\n  var paddingWidth = size.paddingLeft + size.paddingRight;\n  var paddingHeight = size.paddingTop + size.paddingBottom;\n  var marginWidth = size.marginLeft + size.marginRight;\n  var marginHeight = size.marginTop + size.marginBottom;\n  var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n  var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n  // overwrite width and height if we can get it from style\n  var styleWidth = getStyleSize( style.width );\n  if ( styleWidth !== false ) {\n    size.width = styleWidth +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n  }\n\n  var styleHeight = getStyleSize( style.height );\n  if ( styleHeight !== false ) {\n    size.height = styleHeight +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n  }\n\n  size.innerWidth = size.width - ( paddingWidth + borderWidth );\n  size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n  size.outerWidth = size.width + marginWidth;\n  size.outerHeight = size.height + marginHeight;\n\n  return size;\n}\n\nreturn getSize;\n\n});\n\n/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n  /*global define: false, module: false */\n  'use strict';\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'desandro-matches-selector/matches-selector',factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.matchesSelector = factory();\n  }\n\n}( window, function factory() {\n  'use strict';\n\n  var matchesMethod = ( function() {\n    var ElemProto = window.Element.prototype;\n    // check for the standard method name first\n    if ( ElemProto.matches ) {\n      return 'matches';\n    }\n    // check un-prefixed\n    if ( ElemProto.matchesSelector ) {\n      return 'matchesSelector';\n    }\n    // check vendor prefixes\n    var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n    for ( var i=0; i < prefixes.length; i++ ) {\n      var prefix = prefixes[i];\n      var method = prefix + 'MatchesSelector';\n      if ( ElemProto[ method ] ) {\n        return method;\n      }\n    }\n  })();\n\n  return function matchesSelector( elem, selector ) {\n    return elem[ matchesMethod ]( selector );\n  };\n\n}));\n\n/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'fizzy-ui-utils/utils',[\n      'desandro-matches-selector/matches-selector'\n    ], function( matchesSelector ) {\n      return factory( window, matchesSelector );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('desandro-matches-selector')\n    );\n  } else {\n    // browser global\n    window.fizzyUIUtils = factory(\n      window,\n      window.matchesSelector\n    );\n  }\n\n}( window, function factory( window, matchesSelector ) {\n\n\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n  return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n  if ( Array.isArray( obj ) ) {\n    // use object if already an array\n    return obj;\n  }\n  // return empty array if undefined or null. #6\n  if ( obj === null || obj === undefined ) {\n    return [];\n  }\n\n  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  if ( isArrayLike ) {\n    // convert nodeList to array\n    return arraySlice.call( obj );\n  }\n\n  // array of single index\n  return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n  var index = ary.indexOf( obj );\n  if ( index != -1 ) {\n    ary.splice( index, 1 );\n  }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n  while ( elem.parentNode && elem != document.body ) {\n    elem = elem.parentNode;\n    if ( matchesSelector( elem, selector ) ) {\n      return elem;\n    }\n  }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n  if ( typeof elem == 'string' ) {\n    return document.querySelector( elem );\n  }\n  return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n  // make array of elems\n  elems = utils.makeArray( elems );\n  var ffElems = [];\n\n  elems.forEach( function( elem ) {\n    // check that elem is an actual element\n    if ( !( elem instanceof HTMLElement ) ) {\n      return;\n    }\n    // add elem if no selector\n    if ( !selector ) {\n      ffElems.push( elem );\n      return;\n    }\n    // filter & find items if we have a selector\n    // filter\n    if ( matchesSelector( elem, selector ) ) {\n      ffElems.push( elem );\n    }\n    // find children\n    var childElems = elem.querySelectorAll( selector );\n    // concat childElems to filterFound array\n    for ( var i=0; i < childElems.length; i++ ) {\n      ffElems.push( childElems[i] );\n    }\n  });\n\n  return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n  threshold = threshold || 100;\n  // original method\n  var method = _class.prototype[ methodName ];\n  var timeoutName = methodName + 'Timeout';\n\n  _class.prototype[ methodName ] = function() {\n    var timeout = this[ timeoutName ];\n    clearTimeout( timeout );\n\n    var args = arguments;\n    var _this = this;\n    this[ timeoutName ] = setTimeout( function() {\n      method.apply( _this, args );\n      delete _this[ timeoutName ];\n    }, threshold );\n  };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n  var readyState = document.readyState;\n  if ( readyState == 'complete' || readyState == 'interactive' ) {\n    // do async to allow for other scripts to run. metafizzy/flickity#441\n    setTimeout( callback );\n  } else {\n    document.addEventListener( 'DOMContentLoaded', callback );\n  }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n    return $1 + '-' + $2;\n  }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n  utils.docReady( function() {\n    var dashedNamespace = utils.toDashed( namespace );\n    var dataAttr = 'data-' + dashedNamespace;\n    var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n    var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n    var elems = utils.makeArray( dataAttrElems )\n      .concat( utils.makeArray( jsDashElems ) );\n    var dataOptionsAttr = dataAttr + '-options';\n    var jQuery = window.jQuery;\n\n    elems.forEach( function( elem ) {\n      var attr = elem.getAttribute( dataAttr ) ||\n        elem.getAttribute( dataOptionsAttr );\n      var options;\n      try {\n        options = attr && JSON.parse( attr );\n      } catch ( error ) {\n        // log error, do not initialize\n        if ( console ) {\n          console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n          ': ' + error );\n        }\n        return;\n      }\n      // initialize\n      var instance = new WidgetClass( elem, options );\n      // make available via $().data('namespace')\n      if ( jQuery ) {\n        jQuery.data( elem, namespace, instance );\n      }\n    });\n\n  });\n};\n\n// -----  ----- //\n\nreturn utils;\n\n}));\n\n/**\n * Outlayer Item\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /* globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD - RequireJS\n    define( 'outlayer/item',[\n        'ev-emitter/ev-emitter',\n        'get-size/get-size'\n      ],\n      factory\n    );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory(\n      require('ev-emitter'),\n      require('get-size')\n    );\n  } else {\n    // browser global\n    window.Outlayer = {};\n    window.Outlayer.Item = factory(\n      window.EvEmitter,\n      window.getSize\n    );\n  }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n  for ( var prop in obj ) {\n    return false;\n  }\n  prop = null;\n  return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n  'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n  'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n  WebkitTransition: 'webkitTransitionEnd',\n  transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n  transform: transformProperty,\n  transition: transitionProperty,\n  transitionDuration: transitionProperty + 'Duration',\n  transitionProperty: transitionProperty + 'Property',\n  transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n  if ( !element ) {\n    return;\n  }\n\n  this.element = element;\n  // parent layout class, i.e. Masonry, Isotope, or Packery\n  this.layout = layout;\n  this.position = {\n    x: 0,\n    y: 0\n  };\n\n  this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n  // transition objects\n  this._transn = {\n    ingProperties: {},\n    clean: {},\n    onEnd: {}\n  };\n\n  this.css({\n    position: 'absolute'\n  });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n  var elemStyle = this.element.style;\n\n  for ( var prop in style ) {\n    // use vendor property if available\n    var supportedProp = vendorProperties[ prop ] || prop;\n    elemStyle[ supportedProp ] = style[ prop ];\n  }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n  var style = getComputedStyle( this.element );\n  var isOriginLeft = this.layout._getOption('originLeft');\n  var isOriginTop = this.layout._getOption('originTop');\n  var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n  var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n  var x = parseFloat( xValue );\n  var y = parseFloat( yValue );\n  // convert percent to pixels\n  var layoutSize = this.layout.size;\n  if ( xValue.indexOf('%') != -1 ) {\n    x = ( x / 100 ) * layoutSize.width;\n  }\n  if ( yValue.indexOf('%') != -1 ) {\n    y = ( y / 100 ) * layoutSize.height;\n  }\n  // clean up 'auto' or other non-integer values\n  x = isNaN( x ) ? 0 : x;\n  y = isNaN( y ) ? 0 : y;\n  // remove padding from measurement\n  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n  this.position.x = x;\n  this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n  var layoutSize = this.layout.size;\n  var style = {};\n  var isOriginLeft = this.layout._getOption('originLeft');\n  var isOriginTop = this.layout._getOption('originTop');\n\n  // x\n  var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n  var xProperty = isOriginLeft ? 'left' : 'right';\n  var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n  var x = this.position.x + layoutSize[ xPadding ];\n  // set in percentage or pixels\n  style[ xProperty ] = this.getXValue( x );\n  // reset other property\n  style[ xResetProperty ] = '';\n\n  // y\n  var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n  var yProperty = isOriginTop ? 'top' : 'bottom';\n  var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n  var y = this.position.y + layoutSize[ yPadding ];\n  // set in percentage or pixels\n  style[ yProperty ] = this.getYValue( y );\n  // reset other property\n  style[ yResetProperty ] = '';\n\n  this.css( style );\n  this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n  var isHorizontal = this.layout._getOption('horizontal');\n  return this.layout.options.percentPosition && !isHorizontal ?\n    ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n  var isHorizontal = this.layout._getOption('horizontal');\n  return this.layout.options.percentPosition && isHorizontal ?\n    ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n  this.getPosition();\n  // get current x & y from top/left\n  var curX = this.position.x;\n  var curY = this.position.y;\n\n  var didNotMove = x == this.position.x && y == this.position.y;\n\n  // save end position\n  this.setPosition( x, y );\n\n  // if did not move and not transitioning, just go to layout\n  if ( didNotMove && !this.isTransitioning ) {\n    this.layoutPosition();\n    return;\n  }\n\n  var transX = x - curX;\n  var transY = y - curY;\n  var transitionStyle = {};\n  transitionStyle.transform = this.getTranslate( transX, transY );\n\n  this.transition({\n    to: transitionStyle,\n    onTransitionEnd: {\n      transform: this.layoutPosition\n    },\n    isCleaning: true\n  });\n};\n\nproto.getTranslate = function( x, y ) {\n  // flip cooridinates if origin on right or bottom\n  var isOriginLeft = this.layout._getOption('originLeft');\n  var isOriginTop = this.layout._getOption('originTop');\n  x = isOriginLeft ? x : -x;\n  y = isOriginTop ? y : -y;\n  return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n  this.setPosition( x, y );\n  this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n  this.position.x = parseFloat( x );\n  this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n  this.css( args.to );\n  if ( args.isCleaning ) {\n    this._removeStyles( args.to );\n  }\n  for ( var prop in args.onTransitionEnd ) {\n    args.onTransitionEnd[ prop ].call( this );\n  }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n *   @param {Object} to - style to transition to\n *   @param {Object} from - style to start transition from\n *   @param {Boolean} isCleaning - removes transition styles after transition\n *   @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n  // redirect to nonTransition if no transition duration\n  if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n    this._nonTransition( args );\n    return;\n  }\n\n  var _transition = this._transn;\n  // keep track of onTransitionEnd callback by css property\n  for ( var prop in args.onTransitionEnd ) {\n    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n  }\n  // keep track of properties that are transitioning\n  for ( prop in args.to ) {\n    _transition.ingProperties[ prop ] = true;\n    // keep track of properties to clean up when transition is done\n    if ( args.isCleaning ) {\n      _transition.clean[ prop ] = true;\n    }\n  }\n\n  // set from styles\n  if ( args.from ) {\n    this.css( args.from );\n    // force redraw. http://blog.alexmaccaw.com/css-transitions\n    var h = this.element.offsetHeight;\n    // hack for JSHint to hush about unused var\n    h = null;\n  }\n  // enable transition\n  this.enableTransition( args.to );\n  // set styles that are transitioning\n  this.css( args.to );\n\n  this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n  return str.replace( /([A-Z])/g, function( $1 ) {\n    return '-' + $1.toLowerCase();\n  });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n  // HACK changing transitionProperty during a transition\n  // will cause transition to jump\n  if ( this.isTransitioning ) {\n    return;\n  }\n\n  // make `transition: foo, bar, baz` from style object\n  // HACK un-comment this when enableTransition can work\n  // while a transition is happening\n  // var transitionValues = [];\n  // for ( var prop in style ) {\n  //   // dash-ify camelCased properties like WebkitTransition\n  //   prop = vendorProperties[ prop ] || prop;\n  //   transitionValues.push( toDashedAll( prop ) );\n  // }\n  // munge number to millisecond, to match stagger\n  var duration = this.layout.options.transitionDuration;\n  duration = typeof duration == 'number' ? duration + 'ms' : duration;\n  // enable transition styles\n  this.css({\n    transitionProperty: transitionProps,\n    transitionDuration: duration,\n    transitionDelay: this.staggerDelay || 0\n  });\n  // listen for transition end event\n  this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n  this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n  this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n  '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n  // disregard bubbled events from children\n  if ( event.target !== this.element ) {\n    return;\n  }\n  var _transition = this._transn;\n  // get property name of transitioned property, convert to prefix-free\n  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n  // remove property that has completed transitioning\n  delete _transition.ingProperties[ propertyName ];\n  // check if any properties are still transitioning\n  if ( isEmptyObj( _transition.ingProperties ) ) {\n    // all properties have completed transitioning\n    this.disableTransition();\n  }\n  // clean style\n  if ( propertyName in _transition.clean ) {\n    // clean up style\n    this.element.style[ event.propertyName ] = '';\n    delete _transition.clean[ propertyName ];\n  }\n  // trigger onTransitionEnd callback\n  if ( propertyName in _transition.onEnd ) {\n    var onTransitionEnd = _transition.onEnd[ propertyName ];\n    onTransitionEnd.call( this );\n    delete _transition.onEnd[ propertyName ];\n  }\n\n  this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n  this.removeTransitionStyles();\n  this.element.removeEventListener( transitionEndEvent, this, false );\n  this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n  // clean up transition styles\n  var cleanStyle = {};\n  for ( var prop in style ) {\n    cleanStyle[ prop ] = '';\n  }\n  this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n  transitionProperty: '',\n  transitionDuration: '',\n  transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n  // remove transition\n  this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n  delay = isNaN( delay ) ? 0 : delay;\n  this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n  this.element.parentNode.removeChild( this.element );\n  // remove display: none\n  this.css({ display: '' });\n  this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n  // just remove element if no transition support or no transition\n  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n    this.removeElem();\n    return;\n  }\n\n  // start transition\n  this.once( 'transitionEnd', function() {\n    this.removeElem();\n  });\n  this.hide();\n};\n\nproto.reveal = function() {\n  delete this.isHidden;\n  // remove display: none\n  this.css({ display: '' });\n\n  var options = this.layout.options;\n\n  var onTransitionEnd = {};\n  var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n  this.transition({\n    from: options.hiddenStyle,\n    to: options.visibleStyle,\n    isCleaning: true,\n    onTransitionEnd: onTransitionEnd\n  });\n};\n\nproto.onRevealTransitionEnd = function() {\n  // check if still visible\n  // during transition, item may have been hidden\n  if ( !this.isHidden ) {\n    this.emitEvent('reveal');\n  }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n  var optionStyle = this.layout.options[ styleProperty ];\n  // use opacity\n  if ( optionStyle.opacity ) {\n    return 'opacity';\n  }\n  // get first property\n  for ( var prop in optionStyle ) {\n    return prop;\n  }\n};\n\nproto.hide = function() {\n  // set flag\n  this.isHidden = true;\n  // remove display: none\n  this.css({ display: '' });\n\n  var options = this.layout.options;\n\n  var onTransitionEnd = {};\n  var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n  this.transition({\n    from: options.visibleStyle,\n    to: options.hiddenStyle,\n    // keep hidden stuff hidden\n    isCleaning: true,\n    onTransitionEnd: onTransitionEnd\n  });\n};\n\nproto.onHideTransitionEnd = function() {\n  // check if still hidden\n  // during transition, item may have been un-hidden\n  if ( this.isHidden ) {\n    this.css({ display: 'none' });\n    this.emitEvent('hide');\n  }\n};\n\nproto.destroy = function() {\n  this.css({\n    position: '',\n    left: '',\n    right: '',\n    top: '',\n    bottom: '',\n    transition: '',\n    transform: ''\n  });\n};\n\nreturn Item;\n\n}));\n\n/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n  'use strict';\n  // universal module definition\n  /* jshint strict: false */ /* globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD - RequireJS\n    define( 'outlayer/outlayer',[\n        'ev-emitter/ev-emitter',\n        'get-size/get-size',\n        'fizzy-ui-utils/utils',\n        './item'\n      ],\n      function( EvEmitter, getSize, utils, Item ) {\n        return factory( window, EvEmitter, getSize, utils, Item);\n      }\n    );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory(\n      window,\n      require('ev-emitter'),\n      require('get-size'),\n      require('fizzy-ui-utils'),\n      require('./item')\n    );\n  } else {\n    // browser global\n    window.Outlayer = factory(\n      window,\n      window.EvEmitter,\n      window.getSize,\n      window.fizzyUIUtils,\n      window.Outlayer.Item\n    );\n  }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n  var queryElement = utils.getQueryElement( element );\n  if ( !queryElement ) {\n    if ( console ) {\n      console.error( 'Bad element for ' + this.constructor.namespace +\n        ': ' + ( queryElement || element ) );\n    }\n    return;\n  }\n  this.element = queryElement;\n  // add jQuery\n  if ( jQuery ) {\n    this.$element = jQuery( this.element );\n  }\n\n  // options\n  this.options = utils.extend( {}, this.constructor.defaults );\n  this.option( options );\n\n  // add id for Outlayer.getFromElement\n  var id = ++GUID;\n  this.element.outlayerGUID = id; // expando\n  instances[ id ] = this; // associate via id\n\n  // kick it off\n  this._create();\n\n  var isInitLayout = this._getOption('initLayout');\n  if ( isInitLayout ) {\n    this.layout();\n  }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n  containerStyle: {\n    position: 'relative'\n  },\n  initLayout: true,\n  originLeft: true,\n  originTop: true,\n  resize: true,\n  resizeContainer: true,\n  // item options\n  transitionDuration: '0.4s',\n  hiddenStyle: {\n    opacity: 0,\n    transform: 'scale(0.001)'\n  },\n  visibleStyle: {\n    opacity: 1,\n    transform: 'scale(1)'\n  }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n  utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n  var oldOption = this.constructor.compatOptions[ option ];\n  return oldOption && this.options[ oldOption ] !== undefined ?\n    this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n  // currentName: oldName\n  initLayout: 'isInitLayout',\n  horizontal: 'isHorizontal',\n  layoutInstant: 'isLayoutInstant',\n  originLeft: 'isOriginLeft',\n  originTop: 'isOriginTop',\n  resize: 'isResizeBound',\n  resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n  // get items from children\n  this.reloadItems();\n  // elements that affect layout, but are not laid out\n  this.stamps = [];\n  this.stamp( this.options.stamp );\n  // set container style\n  utils.extend( this.element.style, this.options.containerStyle );\n\n  // bind resize method\n  var canBindResize = this._getOption('resize');\n  if ( canBindResize ) {\n    this.bindResize();\n  }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n  // collection of item elements\n  this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n  var itemElems = this._filterFindItemElements( elems );\n  var Item = this.constructor.Item;\n\n  // create new Outlayer Items for collection\n  var items = [];\n  for ( var i=0; i < itemElems.length; i++ ) {\n    var elem = itemElems[i];\n    var item = new Item( elem, this );\n    items.push( item );\n  }\n\n  return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n  return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n  return this.items.map( function( item ) {\n    return item.element;\n  });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n  this._resetLayout();\n  this._manageStamps();\n\n  // don't animate first layout\n  var layoutInstant = this._getOption('layoutInstant');\n  var isInstant = layoutInstant !== undefined ?\n    layoutInstant : !this._isLayoutInited;\n  this.layoutItems( this.items, isInstant );\n\n  // flag for initalized\n  this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n  this.getSize();\n};\n\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n  var option = this.options[ measurement ];\n  var elem;\n  if ( !option ) {\n    // default to 0\n    this[ measurement ] = 0;\n  } else {\n    // use option as an element\n    if ( typeof option == 'string' ) {\n      elem = this.element.querySelector( option );\n    } else if ( option instanceof HTMLElement ) {\n      elem = option;\n    }\n    // use size of element, if element\n    this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n  }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n  items = this._getItemsForLayout( items );\n\n  this._layoutItems( items, isInstant );\n\n  this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n  return items.filter( function( item ) {\n    return !item.isIgnored;\n  });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n  this._emitCompleteOnItems( 'layout', items );\n\n  if ( !items || !items.length ) {\n    // no items, emit event with empty array\n    return;\n  }\n\n  var queue = [];\n\n  items.forEach( function( item ) {\n    // get x/y object from method\n    var position = this._getItemLayoutPosition( item );\n    // enqueue\n    position.item = item;\n    position.isInstant = isInstant || item.isLayoutInstant;\n    queue.push( position );\n  }, this );\n\n  this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n  return {\n    x: 0,\n    y: 0\n  };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n  this.updateStagger();\n  queue.forEach( function( obj, i ) {\n    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n  }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n  var stagger = this.options.stagger;\n  if ( stagger === null || stagger === undefined ) {\n    this.stagger = 0;\n    return;\n  }\n  this.stagger = getMilliseconds( stagger );\n  return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n  if ( isInstant ) {\n    // if not transition, just set CSS\n    item.goTo( x, y );\n  } else {\n    item.stagger( i * this.stagger );\n    item.moveTo( x, y );\n  }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n  this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n  var isResizingContainer = this._getOption('resizeContainer');\n  if ( !isResizingContainer ) {\n    return;\n  }\n  var size = this._getContainerSize();\n  if ( size ) {\n    this._setContainerMeasure( size.width, true );\n    this._setContainerMeasure( size.height, false );\n  }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n *   @param {Number} width\n *   @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n  if ( measure === undefined ) {\n    return;\n  }\n\n  var elemSize = this.size;\n  // add padding and border width if border box\n  if ( elemSize.isBorderBox ) {\n    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n      elemSize.borderLeftWidth + elemSize.borderRightWidth :\n      elemSize.paddingBottom + elemSize.paddingTop +\n      elemSize.borderTopWidth + elemSize.borderBottomWidth;\n  }\n\n  measure = Math.max( measure, 0 );\n  this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n  var _this = this;\n  function onComplete() {\n    _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n  }\n\n  var count = items.length;\n  if ( !items || !count ) {\n    onComplete();\n    return;\n  }\n\n  var doneCount = 0;\n  function tick() {\n    doneCount++;\n    if ( doneCount == count ) {\n      onComplete();\n    }\n  }\n\n  // bind callback\n  items.forEach( function( item ) {\n    item.once( eventName, tick );\n  });\n};\n\n/**\n * emits events via EvEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n  // add original event to arguments\n  var emitArgs = event ? [ event ].concat( args ) : args;\n  this.emitEvent( type, emitArgs );\n\n  if ( jQuery ) {\n    // set this.$element\n    this.$element = this.$element || jQuery( this.element );\n    if ( event ) {\n      // create jQuery event\n      var $event = jQuery.Event( event );\n      $event.type = type;\n      this.$element.trigger( $event, args );\n    } else {\n      // just trigger with type if no event available\n      this.$element.trigger( type, args );\n    }\n  }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n  var item = this.getItem( elem );\n  if ( item ) {\n    item.isIgnored = true;\n  }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n  var item = this.getItem( elem );\n  if ( item ) {\n    delete item.isIgnored;\n  }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n  elems = this._find( elems );\n  if ( !elems ) {\n    return;\n  }\n\n  this.stamps = this.stamps.concat( elems );\n  // ignore\n  elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n  elems = this._find( elems );\n  if ( !elems ){\n    return;\n  }\n\n  elems.forEach( function( elem ) {\n    // filter out removed stamp elements\n    utils.removeFrom( this.stamps, elem );\n    this.unignore( elem );\n  }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n  if ( !elems ) {\n    return;\n  }\n  // if string, use argument as selector string\n  if ( typeof elems == 'string' ) {\n    elems = this.element.querySelectorAll( elems );\n  }\n  elems = utils.makeArray( elems );\n  return elems;\n};\n\nproto._manageStamps = function() {\n  if ( !this.stamps || !this.stamps.length ) {\n    return;\n  }\n\n  this._getBoundingRect();\n\n  this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n  // get bounding rect for container element\n  var boundingRect = this.element.getBoundingClientRect();\n  var size = this.size;\n  this._boundingRect = {\n    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n    top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n  };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n  var boundingRect = elem.getBoundingClientRect();\n  var thisRect = this._boundingRect;\n  var size = getSize( elem );\n  var offset = {\n    left: boundingRect.left - thisRect.left - size.marginLeft,\n    top: boundingRect.top - thisRect.top - size.marginTop,\n    right: thisRect.right - boundingRect.right - size.marginRight,\n    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n  };\n  return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n  window.addEventListener( 'resize', this );\n  this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n  window.removeEventListener( 'resize', this );\n  this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n  this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n  // don't trigger if size did not change\n  // or if resize was unbound. See #9\n  if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n    return;\n  }\n\n  this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n  var size = getSize( this.element );\n  // check that this.size and size are there\n  // IE8 triggers resize on body size change, so they might not be\n  var hasSizes = this.size && size;\n  return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n  var items = this._itemize( elems );\n  // add items to collection\n  if ( items.length ) {\n    this.items = this.items.concat( items );\n  }\n  return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n  var items = this.addItems( elems );\n  if ( !items.length ) {\n    return;\n  }\n  // layout and reveal just the new items\n  this.layoutItems( items, true );\n  this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n  var items = this._itemize( elems );\n  if ( !items.length ) {\n    return;\n  }\n  // add items to beginning of collection\n  var previousItems = this.items.slice(0);\n  this.items = items.concat( previousItems );\n  // start new layout\n  this._resetLayout();\n  this._manageStamps();\n  // layout new stuff without transition\n  this.layoutItems( items, true );\n  this.reveal( items );\n  // layout previous items\n  this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n  this._emitCompleteOnItems( 'reveal', items );\n  if ( !items || !items.length ) {\n    return;\n  }\n  var stagger = this.updateStagger();\n  items.forEach( function( item, i ) {\n    item.stagger( i * stagger );\n    item.reveal();\n  });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n  this._emitCompleteOnItems( 'hide', items );\n  if ( !items || !items.length ) {\n    return;\n  }\n  var stagger = this.updateStagger();\n  items.forEach( function( item, i ) {\n    item.stagger( i * stagger );\n    item.hide();\n  });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n  var items = this.getItems( elems );\n  this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n  var items = this.getItems( elems );\n  this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n  // loop through items to get the one that matches\n  for ( var i=0; i < this.items.length; i++ ) {\n    var item = this.items[i];\n    if ( item.element == elem ) {\n      // return item\n      return item;\n    }\n  }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n  elems = utils.makeArray( elems );\n  var items = [];\n  elems.forEach( function( elem ) {\n    var item = this.getItem( elem );\n    if ( item ) {\n      items.push( item );\n    }\n  }, this );\n\n  return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n  var removeItems = this.getItems( elems );\n\n  this._emitCompleteOnItems( 'remove', removeItems );\n\n  // bail if no items to remove\n  if ( !removeItems || !removeItems.length ) {\n    return;\n  }\n\n  removeItems.forEach( function( item ) {\n    item.remove();\n    // remove item from collection\n    utils.removeFrom( this.items, item );\n  }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n  // clean up dynamic styles\n  var style = this.element.style;\n  style.height = '';\n  style.position = '';\n  style.width = '';\n  // destroy items\n  this.items.forEach( function( item ) {\n    item.destroy();\n  });\n\n  this.unbindResize();\n\n  var id = this.element.outlayerGUID;\n  delete instances[ id ]; // remove reference to instance by id\n  delete this.element.outlayerGUID;\n  // remove data for jQuery\n  if ( jQuery ) {\n    jQuery.removeData( this.element, this.constructor.namespace );\n  }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n  elem = utils.getQueryElement( elem );\n  var id = elem && elem.outlayerGUID;\n  return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n  // sub-class Outlayer\n  var Layout = subclass( Outlayer );\n  // apply new options and compatOptions\n  Layout.defaults = utils.extend( {}, Outlayer.defaults );\n  utils.extend( Layout.defaults, options );\n  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );\n\n  Layout.namespace = namespace;\n\n  Layout.data = Outlayer.data;\n\n  // sub-class Item\n  Layout.Item = subclass( Item );\n\n  // -------------------------- declarative -------------------------- //\n\n  utils.htmlInit( Layout, namespace );\n\n  // -------------------------- jQuery bridge -------------------------- //\n\n  // make into jQuery plugin\n  if ( jQuery && jQuery.bridget ) {\n    jQuery.bridget( namespace, Layout );\n  }\n\n  return Layout;\n};\n\nfunction subclass( Parent ) {\n  function SubClass() {\n    Parent.apply( this, arguments );\n  }\n\n  SubClass.prototype = Object.create( Parent.prototype );\n  SubClass.prototype.constructor = SubClass;\n\n  return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n  ms: 1,\n  s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n  if ( typeof time == 'number' ) {\n    return time;\n  }\n  var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n  var num = matches && matches[1];\n  var unit = matches && matches[2];\n  if ( !num.length ) {\n    return 0;\n  }\n  num = parseFloat( num );\n  var mult = msUnits[ unit ] || 1;\n  return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n\n/**\n * Isotope Item\n**/\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'isotope-layout/js/item',[\n        'outlayer/outlayer'\n      ],\n      factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('outlayer')\n    );\n  } else {\n    // browser global\n    window.Isotope = window.Isotope || {};\n    window.Isotope.Item = factory(\n      window.Outlayer\n    );\n  }\n\n}( window, function factory( Outlayer ) {\n'use strict';\n\n// -------------------------- Item -------------------------- //\n\n// sub-class Outlayer Item\nfunction Item() {\n  Outlayer.Item.apply( this, arguments );\n}\n\nvar proto = Item.prototype = Object.create( Outlayer.Item.prototype );\n\nvar _create = proto._create;\nproto._create = function() {\n  // assign id, used for original-order sorting\n  this.id = this.layout.itemGUID++;\n  _create.call( this );\n  this.sortData = {};\n};\n\nproto.updateSortData = function() {\n  if ( this.isIgnored ) {\n    return;\n  }\n  // default sorters\n  this.sortData.id = this.id;\n  // for backward compatibility\n  this.sortData['original-order'] = this.id;\n  this.sortData.random = Math.random();\n  // go thru getSortData obj and apply the sorters\n  var getSortData = this.layout.options.getSortData;\n  var sorters = this.layout._sorters;\n  for ( var key in getSortData ) {\n    var sorter = sorters[ key ];\n    this.sortData[ key ] = sorter( this.element, this );\n  }\n};\n\nvar _destroy = proto.destroy;\nproto.destroy = function() {\n  // call super\n  _destroy.apply( this, arguments );\n  // reset display, #741\n  this.css({\n    display: ''\n  });\n};\n\nreturn Item;\n\n}));\n\n/**\n * Isotope LayoutMode\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'isotope-layout/js/layout-mode',[\n        'get-size/get-size',\n        'outlayer/outlayer'\n      ],\n      factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('get-size'),\n      require('outlayer')\n    );\n  } else {\n    // browser global\n    window.Isotope = window.Isotope || {};\n    window.Isotope.LayoutMode = factory(\n      window.getSize,\n      window.Outlayer\n    );\n  }\n\n}( window, function factory( getSize, Outlayer ) {\n  'use strict';\n\n  // layout mode class\n  function LayoutMode( isotope ) {\n    this.isotope = isotope;\n    // link properties\n    if ( isotope ) {\n      this.options = isotope.options[ this.namespace ];\n      this.element = isotope.element;\n      this.items = isotope.filteredItems;\n      this.size = isotope.size;\n    }\n  }\n\n  var proto = LayoutMode.prototype;\n\n  /**\n   * some methods should just defer to default Outlayer method\n   * and reference the Isotope instance as `this`\n  **/\n  var facadeMethods = [\n    '_resetLayout',\n    '_getItemLayoutPosition',\n    '_manageStamp',\n    '_getContainerSize',\n    '_getElementOffset',\n    'needsResizeLayout',\n    '_getOption'\n  ];\n\n  facadeMethods.forEach( function( methodName ) {\n    proto[ methodName ] = function() {\n      return Outlayer.prototype[ methodName ].apply( this.isotope, arguments );\n    };\n  });\n\n  // -----  ----- //\n\n  // for horizontal layout modes, check vertical size\n  proto.needsVerticalResizeLayout = function() {\n    // don't trigger if size did not change\n    var size = getSize( this.isotope.element );\n    // check that this.size and size are there\n    // IE8 triggers resize on body size change, so they might not be\n    var hasSizes = this.isotope.size && size;\n    return hasSizes && size.innerHeight != this.isotope.size.innerHeight;\n  };\n\n  // ----- measurements ----- //\n\n  proto._getMeasurement = function() {\n    this.isotope._getMeasurement.apply( this, arguments );\n  };\n\n  proto.getColumnWidth = function() {\n    this.getSegmentSize( 'column', 'Width' );\n  };\n\n  proto.getRowHeight = function() {\n    this.getSegmentSize( 'row', 'Height' );\n  };\n\n  /**\n   * get columnWidth or rowHeight\n   * segment: 'column' or 'row'\n   * size 'Width' or 'Height'\n  **/\n  proto.getSegmentSize = function( segment, size ) {\n    var segmentName = segment + size;\n    var outerSize = 'outer' + size;\n    // columnWidth / outerWidth // rowHeight / outerHeight\n    this._getMeasurement( segmentName, outerSize );\n    // got rowHeight or columnWidth, we can chill\n    if ( this[ segmentName ] ) {\n      return;\n    }\n    // fall back to item of first element\n    var firstItemSize = this.getFirstItemSize();\n    this[ segmentName ] = firstItemSize && firstItemSize[ outerSize ] ||\n      // or size of container\n      this.isotope.size[ 'inner' + size ];\n  };\n\n  proto.getFirstItemSize = function() {\n    var firstItem = this.isotope.filteredItems[0];\n    return firstItem && firstItem.element && getSize( firstItem.element );\n  };\n\n  // ----- methods that should reference isotope ----- //\n\n  proto.layout = function() {\n    this.isotope.layout.apply( this.isotope, arguments );\n  };\n\n  proto.getSize = function() {\n    this.isotope.getSize();\n    this.size = this.isotope.size;\n  };\n\n  // -------------------------- create -------------------------- //\n\n  LayoutMode.modes = {};\n\n  LayoutMode.create = function( namespace, options ) {\n\n    function Mode() {\n      LayoutMode.apply( this, arguments );\n    }\n\n    Mode.prototype = Object.create( proto );\n    Mode.prototype.constructor = Mode;\n\n    // default options\n    if ( options ) {\n      Mode.options = options;\n    }\n\n    Mode.prototype.namespace = namespace;\n    // register in Isotope\n    LayoutMode.modes[ namespace ] = Mode;\n\n    return Mode;\n  };\n\n  return LayoutMode;\n\n}));\n\n/*!\n * Masonry v4.2.1\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'masonry-layout/masonry',[\n        'outlayer/outlayer',\n        'get-size/get-size'\n      ],\n      factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('outlayer'),\n      require('get-size')\n    );\n  } else {\n    // browser global\n    window.Masonry = factory(\n      window.Outlayer,\n      window.getSize\n    );\n  }\n\n}( window, function factory( Outlayer, getSize ) {\n\n\n\n// -------------------------- masonryDefinition -------------------------- //\n\n  // create an Outlayer layout class\n  var Masonry = Outlayer.create('masonry');\n  // isFitWidth -> fitWidth\n  Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n  var proto = Masonry.prototype;\n\n  proto._resetLayout = function() {\n    this.getSize();\n    this._getMeasurement( 'columnWidth', 'outerWidth' );\n    this._getMeasurement( 'gutter', 'outerWidth' );\n    this.measureColumns();\n\n    // reset column Y\n    this.colYs = [];\n    for ( var i=0; i < this.cols; i++ ) {\n      this.colYs.push( 0 );\n    }\n\n    this.maxY = 0;\n    this.horizontalColIndex = 0;\n  };\n\n  proto.measureColumns = function() {\n    this.getContainerWidth();\n    // if columnWidth is 0, default to outerWidth of first item\n    if ( !this.columnWidth ) {\n      var firstItem = this.items[0];\n      var firstItemElem = firstItem && firstItem.element;\n      // columnWidth fall back to item of first element\n      this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n        // if first elem has no width, default to size of container\n        this.containerWidth;\n    }\n\n    var columnWidth = this.columnWidth += this.gutter;\n\n    // calculate columns\n    var containerWidth = this.containerWidth + this.gutter;\n    var cols = containerWidth / columnWidth;\n    // fix rounding errors, typically with gutters\n    var excess = columnWidth - containerWidth % columnWidth;\n    // if overshoot is less than a pixel, round up, otherwise floor it\n    var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n    cols = Math[ mathMethod ]( cols );\n    this.cols = Math.max( cols, 1 );\n  };\n\n  proto.getContainerWidth = function() {\n    // container is parent if fit width\n    var isFitWidth = this._getOption('fitWidth');\n    var container = isFitWidth ? this.element.parentNode : this.element;\n    // check that this.size and size are there\n    // IE8 triggers resize on body size change, so they might not be\n    var size = getSize( container );\n    this.containerWidth = size && size.innerWidth;\n  };\n\n  proto._getItemLayoutPosition = function( item ) {\n    item.getSize();\n    // how many columns does this brick span\n    var remainder = item.size.outerWidth % this.columnWidth;\n    var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n    // round if off by 1 pixel, otherwise use ceil\n    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n    colSpan = Math.min( colSpan, this.cols );\n    // use horizontal or top column position\n    var colPosMethod = this.options.horizontalOrder ?\n      '_getHorizontalColPosition' : '_getTopColPosition';\n    var colPosition = this[ colPosMethod ]( colSpan, item );\n    // position the brick\n    var position = {\n      x: this.columnWidth * colPosition.col,\n      y: colPosition.y\n    };\n    // apply setHeight to necessary columns\n    var setHeight = colPosition.y + item.size.outerHeight;\n    var setMax = colSpan + colPosition.col;\n    for ( var i = colPosition.col; i < setMax; i++ ) {\n      this.colYs[i] = setHeight;\n    }\n\n    return position;\n  };\n\n  proto._getTopColPosition = function( colSpan ) {\n    var colGroup = this._getTopColGroup( colSpan );\n    // get the minimum Y value from the columns\n    var minimumY = Math.min.apply( Math, colGroup );\n\n    return {\n      col: colGroup.indexOf( minimumY ),\n      y: minimumY,\n    };\n  };\n\n  /**\n   * @param {Number} colSpan - number of columns the element spans\n   * @returns {Array} colGroup\n   */\n  proto._getTopColGroup = function( colSpan ) {\n    if ( colSpan < 2 ) {\n      // if brick spans only one column, use all the column Ys\n      return this.colYs;\n    }\n\n    var colGroup = [];\n    // how many different places could this brick fit horizontally\n    var groupCount = this.cols + 1 - colSpan;\n    // for each group potential horizontal position\n    for ( var i = 0; i < groupCount; i++ ) {\n      colGroup[i] = this._getColGroupY( i, colSpan );\n    }\n    return colGroup;\n  };\n\n  proto._getColGroupY = function( col, colSpan ) {\n    if ( colSpan < 2 ) {\n      return this.colYs[ col ];\n    }\n    // make an array of colY values for that one group\n    var groupColYs = this.colYs.slice( col, col + colSpan );\n    // and get the max value of the array\n    return Math.max.apply( Math, groupColYs );\n  };\n\n  // get column position based on horizontal index. #873\n  proto._getHorizontalColPosition = function( colSpan, item ) {\n    var col = this.horizontalColIndex % this.cols;\n    var isOver = colSpan > 1 && col + colSpan > this.cols;\n    // shift to next row if item can't fit on current row\n    col = isOver ? 0 : col;\n    // don't let zero-size items take up space\n    var hasSize = item.size.outerWidth && item.size.outerHeight;\n    this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n    return {\n      col: col,\n      y: this._getColGroupY( col, colSpan ),\n    };\n  };\n\n  proto._manageStamp = function( stamp ) {\n    var stampSize = getSize( stamp );\n    var offset = this._getElementOffset( stamp );\n    // get the columns that this stamp affects\n    var isOriginLeft = this._getOption('originLeft');\n    var firstX = isOriginLeft ? offset.left : offset.right;\n    var lastX = firstX + stampSize.outerWidth;\n    var firstCol = Math.floor( firstX / this.columnWidth );\n    firstCol = Math.max( 0, firstCol );\n    var lastCol = Math.floor( lastX / this.columnWidth );\n    // lastCol should not go over if multiple of columnWidth #425\n    lastCol -= lastX % this.columnWidth ? 0 : 1;\n    lastCol = Math.min( this.cols - 1, lastCol );\n    // set colYs to bottom of the stamp\n\n    var isOriginTop = this._getOption('originTop');\n    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n      stampSize.outerHeight;\n    for ( var i = firstCol; i <= lastCol; i++ ) {\n      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n    }\n  };\n\n  proto._getContainerSize = function() {\n    this.maxY = Math.max.apply( Math, this.colYs );\n    var size = {\n      height: this.maxY\n    };\n\n    if ( this._getOption('fitWidth') ) {\n      size.width = this._getContainerFitWidth();\n    }\n\n    return size;\n  };\n\n  proto._getContainerFitWidth = function() {\n    var unusedCols = 0;\n    // count unused columns\n    var i = this.cols;\n    while ( --i ) {\n      if ( this.colYs[i] !== 0 ) {\n        break;\n      }\n      unusedCols++;\n    }\n    // fit container to columns that have been used\n    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n  };\n\n  proto.needsResizeLayout = function() {\n    var previousWidth = this.containerWidth;\n    this.getContainerWidth();\n    return previousWidth != this.containerWidth;\n  };\n\n  return Masonry;\n\n}));\n\n/*!\n * Masonry layout mode\n * sub-classes Masonry\n * https://masonry.desandro.com\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'isotope-layout/js/layout-modes/masonry',[\n        '../layout-mode',\n        'masonry-layout/masonry'\n      ],\n      factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('../layout-mode'),\n      require('masonry-layout')\n    );\n  } else {\n    // browser global\n    factory(\n      window.Isotope.LayoutMode,\n      window.Masonry\n    );\n  }\n\n}( window, function factory( LayoutMode, Masonry ) {\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n  // create an Outlayer layout class\n  var MasonryMode = LayoutMode.create('masonry');\n\n  var proto = MasonryMode.prototype;\n\n  var keepModeMethods = {\n    _getElementOffset: true,\n    layout: true,\n    _getMeasurement: true\n  };\n\n  // inherit Masonry prototype\n  for ( var method in Masonry.prototype ) {\n    // do not inherit mode methods\n    if ( !keepModeMethods[ method ] ) {\n      proto[ method ] = Masonry.prototype[ method ];\n    }\n  }\n\n  var measureColumns = proto.measureColumns;\n  proto.measureColumns = function() {\n    // set items, used if measuring first item\n    this.items = this.isotope.filteredItems;\n    measureColumns.call( this );\n  };\n\n  // point to mode options for fitWidth\n  var _getOption = proto._getOption;\n  proto._getOption = function( option ) {\n    if ( option == 'fitWidth' ) {\n      return this.options.isFitWidth !== undefined ?\n        this.options.isFitWidth : this.options.fitWidth;\n    }\n    return _getOption.apply( this.isotope, arguments );\n  };\n\n  return MasonryMode;\n\n}));\n\n/**\n * fitRows layout mode\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'isotope-layout/js/layout-modes/fit-rows',[\n        '../layout-mode'\n      ],\n      factory );\n  } else if ( typeof exports == 'object' ) {\n    // CommonJS\n    module.exports = factory(\n      require('../layout-mode')\n    );\n  } else {\n    // browser global\n    factory(\n      window.Isotope.LayoutMode\n    );\n  }\n\n}( window, function factory( LayoutMode ) {\n'use strict';\n\nvar FitRows = LayoutMode.create('fitRows');\n\nvar proto = FitRows.prototype;\n\nproto._resetLayout = function() {\n  this.x = 0;\n  this.y = 0;\n  this.maxY = 0;\n  this._getMeasurement( 'gutter', 'outerWidth' );\n};\n\nproto._getItemLayoutPosition = function( item ) {\n  item.getSize();\n\n  var itemWidth = item.size.outerWidth + this.gutter;\n  // if this element cannot fit in the current row\n  var containerWidth = this.isotope.size.innerWidth + this.gutter;\n  if ( this.x !== 0 && itemWidth + this.x > containerWidth ) {\n    this.x = 0;\n    this.y = this.maxY;\n  }\n\n  var position = {\n    x: this.x,\n    y: this.y\n  };\n\n  this.maxY = Math.max( this.maxY, this.y + item.size.outerHeight );\n  this.x += itemWidth;\n\n  return position;\n};\n\nproto._getContainerSize = function() {\n  return { height: this.maxY };\n};\n\nreturn FitRows;\n\n}));\n\n/**\n * vertical layout mode\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'isotope-layout/js/layout-modes/vertical',[\n        '../layout-mode'\n      ],\n      factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('../layout-mode')\n    );\n  } else {\n    // browser global\n    factory(\n      window.Isotope.LayoutMode\n    );\n  }\n\n}( window, function factory( LayoutMode ) {\n'use strict';\n\nvar Vertical = LayoutMode.create( 'vertical', {\n  horizontalAlignment: 0\n});\n\nvar proto = Vertical.prototype;\n\nproto._resetLayout = function() {\n  this.y = 0;\n};\n\nproto._getItemLayoutPosition = function( item ) {\n  item.getSize();\n  var x = ( this.isotope.size.innerWidth - item.size.outerWidth ) *\n    this.options.horizontalAlignment;\n  var y = this.y;\n  this.y += item.size.outerHeight;\n  return { x: x, y: y };\n};\n\nproto._getContainerSize = function() {\n  return { height: this.y };\n};\n\nreturn Vertical;\n\n}));\n\n/*!\n * Isotope v3.0.6\n *\n * Licensed GPLv3 for open source use\n * or Isotope Commercial License for commercial use\n *\n * https://isotope.metafizzy.co\n * Copyright 2010-2018 Metafizzy\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n        'outlayer/outlayer',\n        'get-size/get-size',\n        'desandro-matches-selector/matches-selector',\n        'fizzy-ui-utils/utils',\n        'isotope-layout/js/item',\n        'isotope-layout/js/layout-mode',\n        // include default layout modes\n        'isotope-layout/js/layout-modes/masonry',\n        'isotope-layout/js/layout-modes/fit-rows',\n        'isotope-layout/js/layout-modes/vertical'\n      ],\n      function( Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ) {\n        return factory( window, Outlayer, getSize, matchesSelector, utils, Item, LayoutMode );\n      });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('outlayer'),\n      require('get-size'),\n      require('desandro-matches-selector'),\n      require('fizzy-ui-utils'),\n      require('isotope-layout/js/item'),\n      require('isotope-layout/js/layout-mode'),\n      // include default layout modes\n      require('isotope-layout/js/layout-modes/masonry'),\n      require('isotope-layout/js/layout-modes/fit-rows'),\n      require('isotope-layout/js/layout-modes/vertical')\n    );\n  } else {\n    // browser global\n    window.Isotope = factory(\n      window,\n      window.Outlayer,\n      window.getSize,\n      window.matchesSelector,\n      window.fizzyUIUtils,\n      window.Isotope.Item,\n      window.Isotope.LayoutMode\n    );\n  }\n\n}( window, function factory( window, Outlayer, getSize, matchesSelector, utils,\n  Item, LayoutMode ) {\n\n\n\n// -------------------------- vars -------------------------- //\n\nvar jQuery = window.jQuery;\n\n// -------------------------- helpers -------------------------- //\n\nvar trim = String.prototype.trim ?\n  function( str ) {\n    return str.trim();\n  } :\n  function( str ) {\n    return str.replace( /^\\s+|\\s+$/g, '' );\n  };\n\n// -------------------------- isotopeDefinition -------------------------- //\n\n  // create an Outlayer layout class\n  var Isotope = Outlayer.create( 'isotope', {\n    layoutMode: 'masonry',\n    isJQueryFiltering: true,\n    sortAscending: true\n  });\n\n  Isotope.Item = Item;\n  Isotope.LayoutMode = LayoutMode;\n\n  var proto = Isotope.prototype;\n\n  proto._create = function() {\n    this.itemGUID = 0;\n    // functions that sort items\n    this._sorters = {};\n    this._getSorters();\n    // call super\n    Outlayer.prototype._create.call( this );\n\n    // create layout modes\n    this.modes = {};\n    // start filteredItems with all items\n    this.filteredItems = this.items;\n    // keep of track of sortBys\n    this.sortHistory = [ 'original-order' ];\n    // create from registered layout modes\n    for ( var name in LayoutMode.modes ) {\n      this._initLayoutMode( name );\n    }\n  };\n\n  proto.reloadItems = function() {\n    // reset item ID counter\n    this.itemGUID = 0;\n    // call super\n    Outlayer.prototype.reloadItems.call( this );\n  };\n\n  proto._itemize = function() {\n    var items = Outlayer.prototype._itemize.apply( this, arguments );\n    // assign ID for original-order\n    for ( var i=0; i < items.length; i++ ) {\n      var item = items[i];\n      item.id = this.itemGUID++;\n    }\n    this._updateItemsSortData( items );\n    return items;\n  };\n\n\n  // -------------------------- layout -------------------------- //\n\n  proto._initLayoutMode = function( name ) {\n    var Mode = LayoutMode.modes[ name ];\n    // set mode options\n    // HACK extend initial options, back-fill in default options\n    var initialOpts = this.options[ name ] || {};\n    this.options[ name ] = Mode.options ?\n      utils.extend( Mode.options, initialOpts ) : initialOpts;\n    // init layout mode instance\n    this.modes[ name ] = new Mode( this );\n  };\n\n\n  proto.layout = function() {\n    // if first time doing layout, do all magic\n    if ( !this._isLayoutInited && this._getOption('initLayout') ) {\n      this.arrange();\n      return;\n    }\n    this._layout();\n  };\n\n  // private method to be used in layout() & magic()\n  proto._layout = function() {\n    // don't animate first layout\n    var isInstant = this._getIsInstant();\n    // layout flow\n    this._resetLayout();\n    this._manageStamps();\n    this.layoutItems( this.filteredItems, isInstant );\n\n    // flag for initalized\n    this._isLayoutInited = true;\n  };\n\n  // filter + sort + layout\n  proto.arrange = function( opts ) {\n    // set any options pass\n    this.option( opts );\n    this._getIsInstant();\n    // filter, sort, and layout\n\n    // filter\n    var filtered = this._filter( this.items );\n    this.filteredItems = filtered.matches;\n\n    this._bindArrangeComplete();\n\n    if ( this._isInstant ) {\n      this._noTransition( this._hideReveal, [ filtered ] );\n    } else {\n      this._hideReveal( filtered );\n    }\n\n    this._sort();\n    this._layout();\n  };\n  // alias to _init for main plugin method\n  proto._init = proto.arrange;\n\n  proto._hideReveal = function( filtered ) {\n    this.reveal( filtered.needReveal );\n    this.hide( filtered.needHide );\n  };\n\n  // HACK\n  // Don't animate/transition first layout\n  // Or don't animate/transition other layouts\n  proto._getIsInstant = function() {\n    var isLayoutInstant = this._getOption('layoutInstant');\n    var isInstant = isLayoutInstant !== undefined ? isLayoutInstant :\n      !this._isLayoutInited;\n    this._isInstant = isInstant;\n    return isInstant;\n  };\n\n  // listen for layoutComplete, hideComplete and revealComplete\n  // to trigger arrangeComplete\n  proto._bindArrangeComplete = function() {\n    // listen for 3 events to trigger arrangeComplete\n    var isLayoutComplete, isHideComplete, isRevealComplete;\n    var _this = this;\n    function arrangeParallelCallback() {\n      if ( isLayoutComplete && isHideComplete && isRevealComplete ) {\n        _this.dispatchEvent( 'arrangeComplete', null, [ _this.filteredItems ] );\n      }\n    }\n    this.once( 'layoutComplete', function() {\n      isLayoutComplete = true;\n      arrangeParallelCallback();\n    });\n    this.once( 'hideComplete', function() {\n      isHideComplete = true;\n      arrangeParallelCallback();\n    });\n    this.once( 'revealComplete', function() {\n      isRevealComplete = true;\n      arrangeParallelCallback();\n    });\n  };\n\n  // -------------------------- filter -------------------------- //\n\n  proto._filter = function( items ) {\n    var filter = this.options.filter;\n    filter = filter || '*';\n    var matches = [];\n    var hiddenMatched = [];\n    var visibleUnmatched = [];\n\n    var test = this._getFilterTest( filter );\n\n    // test each item\n    for ( var i=0; i < items.length; i++ ) {\n      var item = items[i];\n      if ( item.isIgnored ) {\n        continue;\n      }\n      // add item to either matched or unmatched group\n      var isMatched = test( item );\n      // item.isFilterMatched = isMatched;\n      // add to matches if its a match\n      if ( isMatched ) {\n        matches.push( item );\n      }\n      // add to additional group if item needs to be hidden or revealed\n      if ( isMatched && item.isHidden ) {\n        hiddenMatched.push( item );\n      } else if ( !isMatched && !item.isHidden ) {\n        visibleUnmatched.push( item );\n      }\n    }\n\n    // return collections of items to be manipulated\n    return {\n      matches: matches,\n      needReveal: hiddenMatched,\n      needHide: visibleUnmatched\n    };\n  };\n\n  // get a jQuery, function, or a matchesSelector test given the filter\n  proto._getFilterTest = function( filter ) {\n    if ( jQuery && this.options.isJQueryFiltering ) {\n      // use jQuery\n      return function( item ) {\n        return jQuery( item.element ).is( filter );\n      };\n    }\n    if ( typeof filter == 'function' ) {\n      // use filter as function\n      return function( item ) {\n        return filter( item.element );\n      };\n    }\n    // default, use filter as selector string\n    return function( item ) {\n      return matchesSelector( item.element, filter );\n    };\n  };\n\n  // -------------------------- sorting -------------------------- //\n\n  /**\n   * @params {Array} elems\n   * @public\n   */\n  proto.updateSortData = function( elems ) {\n    // get items\n    var items;\n    if ( elems ) {\n      elems = utils.makeArray( elems );\n      items = this.getItems( elems );\n    } else {\n      // update all items if no elems provided\n      items = this.items;\n    }\n\n    this._getSorters();\n    this._updateItemsSortData( items );\n  };\n\n  proto._getSorters = function() {\n    var getSortData = this.options.getSortData;\n    for ( var key in getSortData ) {\n      var sorter = getSortData[ key ];\n      this._sorters[ key ] = mungeSorter( sorter );\n    }\n  };\n\n  /**\n   * @params {Array} items - of Isotope.Items\n   * @private\n   */\n  proto._updateItemsSortData = function( items ) {\n    // do not update if no items\n    var len = items && items.length;\n\n    for ( var i=0; len && i < len; i++ ) {\n      var item = items[i];\n      item.updateSortData();\n    }\n  };\n\n  // ----- munge sorter ----- //\n\n  // encapsulate this, as we just need mungeSorter\n  // other functions in here are just for munging\n  var mungeSorter = ( function() {\n    // add a magic layer to sorters for convienent shorthands\n    // `.foo-bar` will use the text of .foo-bar querySelector\n    // `[foo-bar]` will use attribute\n    // you can also add parser\n    // `.foo-bar parseInt` will parse that as a number\n    function mungeSorter( sorter ) {\n      // if not a string, return function or whatever it is\n      if ( typeof sorter != 'string' ) {\n        return sorter;\n      }\n      // parse the sorter string\n      var args = trim( sorter ).split(' ');\n      var query = args[0];\n      // check if query looks like [an-attribute]\n      var attrMatch = query.match( /^\\[(.+)\\]$/ );\n      var attr = attrMatch && attrMatch[1];\n      var getValue = getValueGetter( attr, query );\n      // use second argument as a parser\n      var parser = Isotope.sortDataParsers[ args[1] ];\n      // parse the value, if there was a parser\n      sorter = parser ? function( elem ) {\n        return elem && parser( getValue( elem ) );\n      } :\n      // otherwise just return value\n      function( elem ) {\n        return elem && getValue( elem );\n      };\n\n      return sorter;\n    }\n\n    // get an attribute getter, or get text of the querySelector\n    function getValueGetter( attr, query ) {\n      // if query looks like [foo-bar], get attribute\n      if ( attr ) {\n        return function getAttribute( elem ) {\n          return elem.getAttribute( attr );\n        };\n      }\n\n      // otherwise, assume its a querySelector, and get its text\n      return function getChildText( elem ) {\n        var child = elem.querySelector( query );\n        return child && child.textContent;\n      };\n    }\n\n    return mungeSorter;\n  })();\n\n  // parsers used in getSortData shortcut strings\n  Isotope.sortDataParsers = {\n    'parseInt': function( val ) {\n      return parseInt( val, 10 );\n    },\n    'parseFloat': function( val ) {\n      return parseFloat( val );\n    }\n  };\n\n  // ----- sort method ----- //\n\n  // sort filteredItem order\n  proto._sort = function() {\n    if ( !this.options.sortBy ) {\n      return;\n    }\n    // keep track of sortBy History\n    var sortBys = utils.makeArray( this.options.sortBy );\n    if ( !this._getIsSameSortBy( sortBys ) ) {\n      // concat all sortBy and sortHistory, add to front, oldest goes in last\n      this.sortHistory = sortBys.concat( this.sortHistory );\n    }\n    // sort magic\n    var itemSorter = getItemSorter( this.sortHistory, this.options.sortAscending );\n    this.filteredItems.sort( itemSorter );\n  };\n\n  // check if sortBys is same as start of sortHistory\n  proto._getIsSameSortBy = function( sortBys ) {\n    for ( var i=0; i < sortBys.length; i++ ) {\n      if ( sortBys[i] != this.sortHistory[i] ) {\n        return false;\n      }\n    }\n    return true;\n  };\n\n  // returns a function used for sorting\n  function getItemSorter( sortBys, sortAsc ) {\n    return function sorter( itemA, itemB ) {\n      // cycle through all sortKeys\n      for ( var i = 0; i < sortBys.length; i++ ) {\n        var sortBy = sortBys[i];\n        var a = itemA.sortData[ sortBy ];\n        var b = itemB.sortData[ sortBy ];\n        if ( a > b || a < b ) {\n          // if sortAsc is an object, use the value given the sortBy key\n          var isAscending = sortAsc[ sortBy ] !== undefined ? sortAsc[ sortBy ] : sortAsc;\n          var direction = isAscending ? 1 : -1;\n          return ( a > b ? 1 : -1 ) * direction;\n        }\n      }\n      return 0;\n    };\n  }\n\n  // -------------------------- methods -------------------------- //\n\n  // get layout mode\n  proto._mode = function() {\n    var layoutMode = this.options.layoutMode;\n    var mode = this.modes[ layoutMode ];\n    if ( !mode ) {\n      // TODO console.error\n      throw new Error( 'No layout mode: ' + layoutMode );\n    }\n    // HACK sync mode's options\n    // any options set after init for layout mode need to be synced\n    mode.options = this.options[ layoutMode ];\n    return mode;\n  };\n\n  proto._resetLayout = function() {\n    // trigger original reset layout\n    Outlayer.prototype._resetLayout.call( this );\n    this._mode()._resetLayout();\n  };\n\n  proto._getItemLayoutPosition = function( item  ) {\n    return this._mode()._getItemLayoutPosition( item );\n  };\n\n  proto._manageStamp = function( stamp ) {\n    this._mode()._manageStamp( stamp );\n  };\n\n  proto._getContainerSize = function() {\n    return this._mode()._getContainerSize();\n  };\n\n  proto.needsResizeLayout = function() {\n    return this._mode().needsResizeLayout();\n  };\n\n  // -------------------------- adding & removing -------------------------- //\n\n  // HEADS UP overwrites default Outlayer appended\n  proto.appended = function( elems ) {\n    var items = this.addItems( elems );\n    if ( !items.length ) {\n      return;\n    }\n    // filter, layout, reveal new items\n    var filteredItems = this._filterRevealAdded( items );\n    // add to filteredItems\n    this.filteredItems = this.filteredItems.concat( filteredItems );\n  };\n\n  // HEADS UP overwrites default Outlayer prepended\n  proto.prepended = function( elems ) {\n    var items = this._itemize( elems );\n    if ( !items.length ) {\n      return;\n    }\n    // start new layout\n    this._resetLayout();\n    this._manageStamps();\n    // filter, layout, reveal new items\n    var filteredItems = this._filterRevealAdded( items );\n    // layout previous items\n    this.layoutItems( this.filteredItems );\n    // add to items and filteredItems\n    this.filteredItems = filteredItems.concat( this.filteredItems );\n    this.items = items.concat( this.items );\n  };\n\n  proto._filterRevealAdded = function( items ) {\n    var filtered = this._filter( items );\n    this.hide( filtered.needHide );\n    // reveal all new items\n    this.reveal( filtered.matches );\n    // layout new items, no transition\n    this.layoutItems( filtered.matches, true );\n    return filtered.matches;\n  };\n\n  /**\n   * Filter, sort, and layout newly-appended item elements\n   * @param {Array or NodeList or Element} elems\n   */\n  proto.insert = function( elems ) {\n    var items = this.addItems( elems );\n    if ( !items.length ) {\n      return;\n    }\n    // append item elements\n    var i, item;\n    var len = items.length;\n    for ( i=0; i < len; i++ ) {\n      item = items[i];\n      this.element.appendChild( item.element );\n    }\n    // filter new stuff\n    var filteredInsertItems = this._filter( items ).matches;\n    // set flag\n    for ( i=0; i < len; i++ ) {\n      items[i].isLayoutInstant = true;\n    }\n    this.arrange();\n    // reset flag\n    for ( i=0; i < len; i++ ) {\n      delete items[i].isLayoutInstant;\n    }\n    this.reveal( filteredInsertItems );\n  };\n\n  var _remove = proto.remove;\n  proto.remove = function( elems ) {\n    elems = utils.makeArray( elems );\n    var removeItems = this.getItems( elems );\n    // do regular thing\n    _remove.call( this, elems );\n    // bail if no items to remove\n    var len = removeItems && removeItems.length;\n    // remove elems from filteredItems\n    for ( var i=0; len && i < len; i++ ) {\n      var item = removeItems[i];\n      // remove item from collection\n      utils.removeFrom( this.filteredItems, item );\n    }\n  };\n\n  proto.shuffle = function() {\n    // update random sortData\n    for ( var i=0; i < this.items.length; i++ ) {\n      var item = this.items[i];\n      item.sortData.random = Math.random();\n    }\n    this.options.sortBy = 'random';\n    this._sort();\n    this._layout();\n  };\n\n  /**\n   * trigger fn without transition\n   * kind of hacky to have this in the first place\n   * @param {Function} fn\n   * @param {Array} args\n   * @returns ret\n   * @private\n   */\n  proto._noTransition = function( fn, args ) {\n    // save transitionDuration before disabling\n    var transitionDuration = this.options.transitionDuration;\n    // disable transition\n    this.options.transitionDuration = 0;\n    // do it\n    var returnValue = fn.apply( this, args );\n    // re-enable transition for reveal\n    this.options.transitionDuration = transitionDuration;\n    return returnValue;\n  };\n\n  // ----- helper methods ----- //\n\n  /**\n   * getter method for getting filtered item elements\n   * @returns {Array} elems - collection of item elements\n   */\n  proto.getFilteredItemElements = function() {\n    return this.filteredItems.map( function( item ) {\n      return item.element;\n    });\n  };\n\n  // -----  ----- //\n\n  return Isotope;\n\n}));"
  },
  {
    "path": "modules/backend/widgets/reportcontainer/partials/_container.php",
    "content": "<div class=\"report-container\">\n    <input type=\"hidden\" value=\"<?= $this->alias ?>\" data-container-alias />\n\n    <ul\n        id=\"<?= $this->getId('container-list') ?>\"\n        class=\"<?= $this->showAddRemove ? 'add-delete' : null ?>\"\n        data-control=\"report-container\">\n        <?= $this->makePartial('widget_list') ?>\n    </ul>\n\n    <?php if ($this->showAddRemove): ?>\n        <div id=\"<?= $this->getId('container-toolbar') ?>\" data-container-toolbar>\n            <?= $this->makePartial('widget_toolbar') ?>\n        </div>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/reportcontainer/partials/_new_widget_popup.php",
    "content": "<?= Form::open([\n    'data-request' => $this->getEventHandler('onAddWidget'),\n    'data-request-success' => \"\\$(this).trigger('close.oc.popup'); \\$(window).trigger('oc.reportWidgetAdded')\",\n    'data-popup-load-indicator' => true\n]) ?>\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __('Add Widget') ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n    <div class=\"modal-body\">\n        <div class=\"form-group\">\n            <label><?= __('Widget') ?></label>\n            <select class=\"form-control custom-select\" name=\"className\" data-placeholder=\"<?= __('please select') ?>\">\n                <option></option>\n                <?php foreach ($widgets as $className => $widgetInfo):?>\n                    <option value=\"<?= e($className) ?>\"><?= isset($widgetInfo['label']) ? e(__($widgetInfo['label'])) : $className ?></option>\n                <?php endforeach ?>\n            </select>\n        </div>\n\n        <div class=\"form-group\">\n            <label><?= __('Width') ?></label>\n            <select class=\"form-control custom-select\" name=\"size\">\n                <option></option>\n                <?php foreach ($sizes as $size => $name):?>\n                    <option value=\"<?= e($size) ?>\" <?= $size == 12 ? 'selected' : null ?>><?= e($name) ?></option>\n                <?php endforeach ?>\n            </select>\n        </div>\n    </div>\n    <div class=\"modal-footer\">\n        <button\n            type=\"submit\"\n            class=\"btn btn-primary\">\n            <?= e(trans('backend::lang.form.add')) ?>\n        </button>\n        <button\n            type=\"button\"\n            class=\"btn btn-default\"\n            data-dismiss=\"popup\">\n            <?= e(trans('backend::lang.form.cancel')) ?>\n        </button>\n    </div>\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/backend/widgets/reportcontainer/partials/_widget.php",
    "content": "<?php if ($widget->property('ocWidgetNewRow')): ?>\n    <li class=\"item separator\"></li>\n<?php endif ?>\n\n<li class=\"item <?= 'width-'.$widget->property('ocWidgetWidth') ?> <?= $widget->property('ocWidgetNewRow') ? 'new-line' : null ?> <?= $this->showReorder ? 'is-sortable' : '' ?> <?= $this->showAddRemove ? 'is-removable' : '' ?>\">\n    <div class=\"content\">\n        <?php if ($this->showReorder): ?>\n            <div class=\"drag-handle\">\n                <i class=\"icon-list-reorder\"></i>\n            </div>\n        <?php endif ?>\n\n        <div id=\"<?= $widgetAlias ?>\"><?= $widget->render() ?></div>\n\n        <?php if ($this->showConfigure): ?>\n            <a href=\"javascript:;\"\n                class=\"icon-cog widget-control edit-widget\"\n                data-inspectable\n                data-inspector-title=\"<?= e(__(\"Widget Configuration\")) ?>\"\n                data-inspector-description=\"<?= e(__(\"Configure the report widget\")) ?>\"\n                data-inspector-config=\"<?= e($this->getWidgetPropertyConfig($widget)) ?>\"\n                data-inspector-class=\"<?= get_class($widget) ?>\"\n                data-inspector-offset=\"-3\"\n                data-inspector-offset-x=\"-15\"\n                data-inspector-placement=\"left\"\n                data-inspector-fallback-placement=\"left\">\n                <input type=\"hidden\" name=\"widget_properties[]\" data-inspector-values value=\"<?= e($this->getWidgetPropertyValues($widget)) ?>\"/>\n                Edit\n            </a>\n        <?php endif ?>\n\n        <?php if ($this->showAddRemove): ?>\n            <button\n                type=\"button\"\n                class=\"btn-close widget-control close-widget\"\n                data-remove-widget\n                aria-label=\"<?= __(\"Close\") ?>\"></button>\n        <?php endif ?>\n\n        <input type=\"hidden\" data-widget-alias name=\"widgetAliases[]\" value=\"<?= $widgetAlias ?>\"/>\n        <input type=\"hidden\" data-widget-order name=\"widgetSortOrders[]\" value=\"<?= $sortOrder ?>\"/>\n    </div>\n</li>\n"
  },
  {
    "path": "modules/backend/widgets/reportcontainer/partials/_widget_list.php",
    "content": "<?php foreach ($widgets as $widgetAlias => $widgetInfo): ?>\n    <?= $this->makePartial('widget', [\n        'widgetAlias' => $widgetAlias,\n        'widget' => $widgetInfo['widget'],\n        'sortOrder' => $widgetInfo['sortOrder']\n    ]) ?>\n<?php endforeach ?>\n"
  },
  {
    "path": "modules/backend/widgets/reportcontainer/partials/_widget_toolbar.php",
    "content": "<div class=\"dropdown dropup\">\n    <a\n        href=\"javascript:;\"\n        class=\"manage-widgets\"\n        data-toggle=\"dropdown\">\n        <i class=\"icon-cogs\"></i> <?= __('Manage Widgets') ?>\n    </a>\n\n    <ul class=\"dropdown-menu\" role=\"menu\">\n        <li role=\"presentation\">\n            <a\n                role=\"menuitem\"\n                href=\"javascript:;\"\n                class=\"dropdown-item\"\n                data-control=\"popup\"\n                data-handler=\"<?= $this->getEventHandler('onLoadAddPopup') ?>\"\n                tabindex=\"-1\">\n                <i class=\"icon-plus\"></i>\n                <?= __('Add Widget') ?>\n            </a>\n        </li>\n        <li role=\"separator\" class=\"dropdown-divider\"></li>\n        <?php if ($this->showMakeDefault): ?>\n            <li role=\"presentation\">\n                <a\n                    role=\"menuitem\"\n                    href=\"javascript:;\"\n                    class=\"dropdown-item\"\n                    data-request=\"<?= $this->getEventHandler('onMakeLayoutDefault') ?>\"\n                    data-request-confirm=\"<?= __('Set the current layout as the default?') ?>\"\n                    tabindex=\"-1\">\n                    <i class=\"icon-floppy\"></i>\n                    <?= __('Make Default') ?>\n                </a>\n            </li>\n        <?php endif ?>\n        <li role=\"presentation\">\n            <a\n                role=\"menuitem\"\n                href=\"javascript:;\"\n                class=\"dropdown-item\"\n                data-request-success=\"$(window).trigger('oc.reportWidgetRefresh')\"\n                data-request=\"<?= $this->getEventHandler('onResetWidgets') ?>\"\n                data-request-confirm=\"<?= __('Reset layout back to default?') ?>\"\n                tabindex=\"-1\">\n                <i class=\"icon-repeat\"></i>\n                <?= __('Reset Layout') ?>\n            </a>\n        </li>\n    </ul>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/roleimpersonator/assets/css/roleimpersonator.css",
    "content": ".control-roleimpersonator{color:#fff;min-height:30px}.control-roleimpersonator .roleimpersonator-contents,.control-roleimpersonator .roleimpersonator-left,.control-roleimpersonator .roleimpersonator-right{padding:5px 10px}.control-roleimpersonator .roleimpersonator-contents{padding-top:10px;text-align:center}.control-roleimpersonator .roleimpersonator-right{text-align:right}@media (max-width:576px){.control-roleimpersonator .roleimpersonator-contents,.control-roleimpersonator .roleimpersonator-left,.control-roleimpersonator .roleimpersonator-right{padding:5px;text-align:center}}\n"
  },
  {
    "path": "modules/backend/widgets/roleimpersonator/assets/less/roleimpersonator.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n.control-roleimpersonator {\n    min-height: 30px;\n    color: white;\n\n    .roleimpersonator-left,\n    .roleimpersonator-contents,\n    .roleimpersonator-right {\n        padding: 5px 10px;\n    }\n\n    .roleimpersonator-contents {\n        text-align: center;\n        padding-top: 10px;\n    }\n\n    .roleimpersonator-right {\n        text-align: right;\n    }\n\n    @media (max-width: @screen-xs) {\n        .roleimpersonator-left,\n        .roleimpersonator-contents,\n        .roleimpersonator-right {\n            padding: 5px;\n            text-align: center;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/roleimpersonator/partials/_roleimpersonator.php",
    "content": "<div class=\"control-roleimpersonator row gx-0 bg-secondary\">\n    <div class=\"col-sm-3\">\n        <div class=\"roleimpersonator-left\">\n            <button\n                class=\"btn btn-sm btn-outline-light\"\n                data-request=\"<?= $this->getEventHandler('onStopImpersonateRole') ?>\"\n                data-request-data=\"redirect:1\"\n                data-stripe-load-indicator\n            >\n                <i class=\"icon-arrow-left\"></i>\n                <?= __(\"Return to Role Settings\") ?>\n            </button>\n        </div>\n    </div>\n    <div class=\"col-sm-6\">\n        <div class=\"roleimpersonator-contents\">\n            <?= __(\"You are viewing as\") ?>\n            <strong><?= e($this->getImpersonatingRole()->name) ?></strong>\n        </div>\n    </div>\n    <div class=\"col-sm-3\">\n        <div class=\"roleimpersonator-right\">\n            <button\n                class=\"btn btn-sm btn-outline-light\"\n                data-request=\"<?= $this->getEventHandler('onStopImpersonateRole') ?>\"\n                data-stripe-load-indicator\n            >\n                <?= __(\"Cancel\") ?>\n            </button>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/search/partials/_search.php",
    "content": "<div class=\"control-search loading-indicator-container size-input-text\">\n    <div\n        id=\"<?= $this->getId() ?>\"\n        class=\"search-input-container storm-icon-pseudo\"\n        data-control=\"search-input\"\n    >\n        <input\n            placeholder=\"<?= $placeholder ?>\"\n            type=\"text\"\n            name=\"<?= $this->getName() ?>\"\n            value=\"<?= e($value) ?>\"\n            data-request=\"<?= $this->getEventHandler('onSubmit') ?>\"\n            <?= !$searchOnEnter ? 'data-track-input' : '' ?>\n            data-load-indicator\n            data-load-indicator-opaque\n            class=\"form-control is-searchable <?= $cssClasses ?>\"\n            autocomplete=\"off\"\n            data-search-input />\n        <button\n            class=\"clear-input-text\"\n            type=\"button\"\n            value=\"\"\n            style=\"display:none\"\n            data-search-clear\n        >\n            <i class=\"storm-icon\"></i>\n        </button>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/siteswitcher/assets/css/siteswitcher.css",
    "content": ".control-siteswitcher-banner .banner-bar{background:linear-gradient(45deg,var(--foreground-color) 25%,transparent 25%,transparent 50%,var(--foreground-color) 50%,var(--foreground-color) 75%,transparent 75%,transparent);background-color:var(--background-color);background-size:3rem 3rem;display:block;height:3px;left:0;opacity:1;position:fixed;right:0;top:0;transition:height .35s ease,opacity .35s ease-out;width:100%;z-index:101}html[data-ajax-progress] .control-siteswitcher-banner .banner-bar{height:0;opacity:.35}body ul.mainmenu-items.mainmenu-submenu-dropdown.siteswitcher-dropdown{margin-left:-50px}body.left-menu-submenu-displayed ul.mainmenu-items.mainmenu-submenu-dropdown.siteswitcher-dropdown{margin-bottom:50px;margin-left:0}\n"
  },
  {
    "path": "modules/backend/widgets/siteswitcher/assets/js/siteswitcher.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\n\n/*\n * Site Switcher logic\n */\nregisterControl('siteswitcher', class extends ControlBase {\n    connect() {\n        this.listen('click', 'a[data-siteswitcher-link]', this.onClickLink);\n    }\n\n    onClickLink(ev) {\n        ev.preventDefault();\n        var $anchor = ev.target.closest('a');\n\n        if ($anchor.dataset.handler) {\n            this.onClickHandler(ev);\n        }\n        else {\n            oc.visit(this.makeAnchorLink($anchor));\n        }\n    }\n\n    onClickHandler(ev) {\n        ev.preventDefault();\n\n        var $anchor = ev.target.closest('a');\n        oc.request($anchor, $anchor.dataset.handler).done((data) => {\n            oc.Events.dispatch('backend:hidemenus');\n            if (data.confirm) {\n                oc.confirm(data.confirm, (isConfirm) => {\n                    if (isConfirm) {\n                        oc.visit(this.makeAnchorLink($anchor));\n                    }\n                });\n            }\n            else {\n                oc.visit(this.makeAnchorLink($anchor));\n            }\n        });\n    }\n\n    makeAnchorLink($anchor) {\n        return $anchor.href + window.location.hash;\n    }\n});\n"
  },
  {
    "path": "modules/backend/widgets/siteswitcher/assets/less/siteswitcher.less",
    "content": "@import \"../../../../assets/less/core/boot.less\";\n\n.control-siteswitcher-banner {\n    .banner-bar {\n        display: block;\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        width: 100%;\n        z-index: 101;\n        height: 3px;\n        transition: height 0.35s ease, opacity 0.35s ease-out;\n        opacity: 1;\n\n        background: linear-gradient(45deg, var(--foreground-color) 25%, transparent 25%, transparent 50%, var(--foreground-color) 50%, var(--foreground-color) 75%, transparent 75%, transparent);\n        background-color: var(--background-color);\n        background-size: 3rem 3rem;\n    }\n}\n\nhtml[data-ajax-progress] {\n    .control-siteswitcher-banner .banner-bar {\n        opacity: .35;\n        height: 0;\n    }\n}\n\n// Offset from the right side\nbody ul.mainmenu-items.mainmenu-submenu-dropdown.siteswitcher-dropdown {\n    margin-left: -50px;\n}\n\nbody.left-menu-submenu-displayed ul.mainmenu-items.mainmenu-submenu-dropdown.siteswitcher-dropdown {\n    margin-left: 0;\n    margin-bottom: 50px;\n}\n"
  },
  {
    "path": "modules/backend/widgets/siteswitcher/partials/_sitebanner.php",
    "content": "<div class=\"control-siteswitcher-banner\">\n    <span\n        class=\"banner-bar\"\n        style=\"--background-color:<?= e($backgroundColor) ?>;--foreground-color:<?= e($foregroundColor) ?>\"\n    ></span>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/siteswitcher/partials/_siteswitcher.php",
    "content": "<?php if ($useMultisite): ?>\n    <li class=\"mainmenu-item mainmenu-preview has-subitems <?= $editSite->is_styled ? 'has-solidicon' : '' ?>\" data-submenu-index=\"sites\">\n        <a\n            href=\"javascript:;\"\n            rel=\"noopener noreferrer\"\n        >\n            <?php if ($editSite->is_styled): ?>\n                <span class=\"nav-icon\">\n                    <span class=\"nav-colorpicker\" style=\"--background-color:<?= e($editSite->color_background) ?>;--foreground-color:<?= e($editSite->color_foreground) ?>\"></span>\n                </span>\n            <?php else: ?>\n                <span class=\"nav-icon\">\n                    <i class=\"icon-globe-site\"></i>\n                </span>\n            <?php endif ?>\n\n            <span class=\"nav-label\">\n                <?= e($editSite->name ?? '') ?>\n            </span>\n        </a>\n    </li>\n<?php elseif ($useAnySite): ?>\n    <li class=\"mainmenu-item mainmenu-preview <?= $editSite->is_styled ? 'has-solidicon' : 'has-nolabel' ?>\">\n        <a\n            href=\"<?= Url::to('/') ?>\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            <?php if (!$isVerticalMenu): ?>\n                data-tooltip-text=\"<?= __(\"Preview the Website\") ?>\"\n            <?php endif ?>\n        >\n            <?php if ($editSite->is_styled): ?>\n                <span class=\"nav-icon\">\n                    <span class=\"nav-colorpicker\" style=\"--background-color:<?= e($editSite->color_background) ?>;--foreground-color:<?= e($editSite->color_foreground) ?>\"></span>\n                </span>\n                <span class=\"nav-label\">\n                    <?= e($editSite->name ?? '') ?>\n                </span>\n            <?php else: ?>\n                <span class=\"nav-icon\">\n                    <i class=\"icon-location-target\"></i>\n                </span>\n            <?php endif ?>\n\n            <?php if ($isVerticalMenu && !$editSite->is_styled): ?>\n                <span class=\"nav-label\">\n                    <?= __(\"Preview the Website\") ?>\n                </span>\n            <?php endif ?>\n        </a>\n    </li>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/siteswitcher/partials/_submenu.php",
    "content": "<?php if (Site::hasMultiEditSite()): ?>\n    <ul\n        class=\"mainmenu-items mainmenu-submenu-dropdown hover-effects siteswitcher-dropdown\"\n        data-submenu-index=\"sites\"\n        data-control=\"siteswitcher\">\n        <?php if (Site::hasSiteGroups()): ?>\n            <?= $this->makePartial('submenu_grouped_items') ?>\n        <?php else: ?>\n            <li class=\"mainmenu-item section-title\">\n                <span class=\"nav-label\"><?= __(\"Selected Site\") ?></span>\n            </li>\n            <?= $this->makePartial('submenu_items') ?>\n        <?php endif ?>\n        <?= $this->makePartial('submenu_footer') ?>\n    </ul>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/siteswitcher/partials/_submenu_footer.php",
    "content": "<?php if ($canManageSite || $useAnySite): ?>\n    <li class=\"mainmenu-item divider\"></li>\n<?php endif ?>\n<?php if ($canManageSite): ?>\n<li class=\"mainmenu-item\">\n    <a href=\"<?= Backend::url('system/sites') ?>\">\n        <span class=\"nav-icon\">\n            <i class=\"icon-globe-site\"></i>\n        </span>\n        <span class=\"nav-label\">\n            <?= __(\"Manage Sites\") ?>\n        </span>\n    </a>\n</li>\n<?php endif ?>\n<?php if ($useAnySite): ?>\n    <li class=\"mainmenu-item\">\n        <a href=\"<?= $editSite->base_url ?>\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\">\n            <span class=\"nav-icon\">\n                <i class=\"icon-location-target\"></i>\n            </span>\n            <span class=\"nav-label\">\n                <?= __(\"Preview the Website\") ?>\n            </span>\n        </a>\n    </li>\n<?php endif ?>\n"
  },
  {
    "path": "modules/backend/widgets/siteswitcher/partials/_submenu_grouped_items.php",
    "content": "<?php\n    $grouped = $sites->groupBy('group.name');\n?>\n<?php foreach ($grouped as $groupName => $groupSites): ?>\n    <li class=\"mainmenu-item section-title\">\n        <span class=\"nav-label\"><?= $groupName ?></span>\n    </li>\n    <?= $this->makePartial('submenu_items', ['sites' => $groupSites]) ?>\n<?php endforeach ?>\n"
  },
  {
    "path": "modules/backend/widgets/siteswitcher/partials/_submenu_items.php",
    "content": "<?php\n    $editSiteId = $editSite ? $editSite->id : null;\n?>\n<?php foreach ($sites as $site): ?>\n    <li class=\"mainmenu-item has-bullet has-flag <?= $site->id === $editSiteId ? 'is-selected' : '' ?>\">\n        <a\n            href=\"?<?= http_build_query(array_merge(get(), ['_site_id' => e($site->id)])) ?>\"\n            <?php if ($switchHandler): ?>\n                data-handler=\"<?= $switchHandler ?>\"\n                data-request-data=\"site_id: '<?= e($site->id) ?>'\"\n            <?php endif ?>\n            data-siteswitcher-link>\n            <span class=\"nav-label\">\n                <?= e($site->name) ?>\n            </span>\n            <?php if ($flag = $site->flag_icon): ?>\n                <span class=\"nav-icon nav-icon-flag\">\n                    <i class=\"<?= e($flag) ?>\"></i>\n                </span>\n            <?php endif ?>\n        </a>\n    </li>\n<?php endforeach ?>\n"
  },
  {
    "path": "modules/backend/widgets/table/ClientMemoryDataSource.php",
    "content": "<?php namespace Backend\\Widgets\\Table;\n\n/**\n * The client-memory data source for the Table widget.\n */\nclass ClientMemoryDataSource extends DataSourceBase\n{\n    /**\n     * @var array Keeps the data source data.\n     */\n    protected $data = [];\n\n    /**\n     * Initializes records in the data source.\n     * The method doesn't replace existing records and\n     * could be called multiple times in order to fill\n     * the data source.\n     * @param array $records Records to initialize in the data source.\n     */\n    public function initRecords($records)\n    {\n        $this->data = array_merge($this->data, $records);\n    }\n\n    /**\n     * Returns a total number of records in the data source.\n     * @return integer\n     */\n    public function getCount()\n    {\n        return count($this->data);\n    }\n\n    /**\n     * Removes all records from the data source.\n     */\n    public function purge()\n    {\n        $this->data = [];\n    }\n\n    /**\n     * Return records from the data source.\n     * @param integer $offset Specifies the offset of the first record to return, zero-based.\n     * @param integer $count Specifies the number of records to return.\n     * @return array Returns the records.\n     * If there are no more records, returns an empty array.\n     */\n    public function getRecords($offset, $count)\n    {\n        return array_slice($this->data, $offset, $count);\n    }\n\n    /**\n     * Returns all records in the data source.\n     * This method is specific only for the client memory data sources.\n     */\n    public function getAllRecords()\n    {\n        return $this->data;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/table/DataSourceBase.php",
    "content": "<?php namespace Backend\\Widgets\\Table;\n\n/**\n * Base class for the Table widget data sources.\n */\nabstract class DataSourceBase\n{\n    /**\n     * @var string Specifies a name of record's key column\n     */\n    protected $keyColumn;\n\n    /**\n     * @var integer Internal record offset\n     */\n    protected $offset = 0;\n\n    /**\n     * Class constructor.\n     * @param string $keyColumn Specifies a name of the key column.\n     */\n    public function construct($keyColumn = 'id')\n    {\n        $this->keyColumn = $keyColumn;\n    }\n\n    /**\n     * Initializes records in the data source.\n     * The method doesn't replace existing records and\n     * could be called multiple times in order to fill\n     * the data source.\n     * @param array $records Records to initialize in the data source.\n     */\n    abstract public function initRecords($records);\n\n    /**\n     * Returns a total number of records in the data source.\n     * @return integer\n     */\n    abstract public function getCount();\n\n    /**\n     * Removes all records from the data source.\n     */\n    abstract public function purge();\n\n    /**\n     * Return records from the data source.\n     * @param integer $offset Specifies the offset of the first record to return, zero-based.\n     * @param integer $count Specifies the number of records to return.\n     * @return array Returns the records.\n     * If there are no more records, returns an empty array.\n     */\n    abstract public function getRecords($offset, $count);\n\n    /**\n     * Identical to getRecords except provided with a search query.\n     */\n    public function searchRecords($query, $offset, $count)\n    {\n        return $this->getRecords($offset, $count);\n    }\n\n    /**\n     * Rewinds the the data source to the first record.\n     * Use this method with the readRecords() method.\n     */\n    public function reset()\n    {\n        $this->offset = 0;\n    }\n\n    /**\n     * Returns a set of records from the data source.\n     * @param integer $count Specifies the number of records to return.\n     * @return array Returns the records.\n     * If there are no more records, returns an empty array.\n     */\n    public function readRecords($count = 10)\n    {\n        $result = $this->getRecords($this->offset, $count);\n        $this->offset += count($result);\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/table/README.md",
    "content": "# Client-side table widget (table.xxx.js)\n\n## Code organization\n\n### OOP pattern\n\nThe data source and cell processor JavaScript classes use the simple parasitic combination inheritance pattern described here:\n\n- http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/\n- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript\n\n```js\n// Parent class with a method\nvar SuperClass = function(params) {}\nSuperClass.prototype.someMethod = function() {}\n\n// Child class\nvar SubClass = function(params) {\n    // Call the parent constructor\n    SuperClass.call(this, params)\n}\n\nSubClass.prototype = Object.create(SuperClass.prototype)\nSubClass.prototype.constructor = SubClass\n\n// Child class methods can be defined only after the prototype\n// is updated in the two previous lines\n\nSubClass.prototype.someMethod = function() {\n    // Call the parent method\n    SuperClass.prototype.someMethod.call(this)\n};\n```\n\n### Namespaces\n\nAll classes for the table widget are be defined in the **$.oc.table** namespace. There are several namespaces in this namespace:\n\n- **$.oc.table.processor** - cell processors\n- **$.oc.table.datasource** - data sources\n- **$.oc.table.helper** - helper classes\n- **$.oc.table.validator** - validation classes\n\n### Client-side performance and memory usage considerations\n\nThe classes defined for the Table widget should follow the best practices in order to achieve the high performance and avoid memory leaks:\n\n* All references to JavaScript objects and DOM elements should be cleared with the `dispose()` methods.\n* All event handlers registered in the control should be unregistered with the `dispose()` method.\n* DOM manipulations should only be performed in the detached tree with the `DocumentFragment` objects.\n* The number of registered event handlers should be kept as low as possible. Cell processors should rely to delegated events registered for the table.\n* Cell processors should have the `dispose()` method that unregisters the event handlers and does all required cleanup actions.\n* Do not use closures for event handlers. This gives more control over the variable scope and simplifies the cleanup operations.\n* If closures are used for anything, use named closures to simplify the profiling process with Chrome dev tools.\n\nThere are several articles that provide a good insight into the high performance JavaScript code and efficient memory management:\n\n* http://www.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/\n* http://www.toptal.com/javascript/javascript-prototypes-scopes-and-performance-what-you-need-to-know\n* http://developer.nokia.com/community/wiki/JavaScript_Performance_Best_Practices (the suggestion about the code comments is doubtful as JS engines compile code now).\n\n## Widget usage\n\nAny `DIV` elements that have the `data-control=\"table\"` attributes are automatically picked up by the control.\n\n```html\n<div data=control=\"table\" data-columns=\"{...}\"></div>\n```\n\n### Options\n\nThe options below are listed in the JavaScript notation. Corresponding data attributes would look like `data-client-data-source-class`.\n\n- `clientDataSourceСlass` (default is **client**)- specifies the client-side data source class. There are two data source classes supported on the client side - **client** and **server**.\n- `data` - specifies the data in JSON format for the **client**.\n- `recordsPerPage` - specifies how many records per page to display. If the value is not defined or `false` or `null`, the pagination feature is disabled and all records are displayed. Pagination and `rowSorting` cannot be used in the same time.\n- `columns` - column definitions in JSON format, see the server-side column definition format below.\n- `rowSorting` - enables the drag & drop row sorting. The sorting cannot be used with the pagination (`recordsPerPage` is not `null` or `false`).\n- `keyColumn` - specifies the name of the key column. The default value is **id**.\n- `postback` - post the client-memory data source data to the server automatically when the parent form gets submitted. The default value is `true`. The option is used only with client-memory data sources. When enabled, the data source data  is available in the widget's server-side data source: `$table->getDataSource()->getRecords();` The data postback occurs only of the request handler name matches the `postbackHandlerName` option value.\n- `postbackHandlerName` - AJAX data handler name for the automatic data postback. The data will be posted only when the AJAX request posts data matching this handler name. The default value is **onSave**.\n- `adding` - determines whether users can add new records. Default value is **true**.\n- `deleting` - determines whether users can delete records. Default value is **true**.\n- `toolbar` - determines whether the toolbar is visible. The default value is **true**.\n- `height` - specifies the maximum height of the data table  (not including the header, toolbar and pagination). If the table contains more rows than the height could fit, the data table becomes scrollable. The default value is **false** (height is not limited).\n\n## Client-side helper classes\n\nSome auxiliary code is factored out from the table class to helper classes. The helper classes are defined in the **$.oc.table.helper** namespace.\n\n- **table.helper.navigation.js** - implements the keyboard navigation within the table and pagination.\n\n## Data sources ($.oc.table.datasource)\n\n### Adding and removing records\n\nAdding and removing records is an asynchronous process that involves updating records in the dataset.\n\nWhen a user adds a record, the table object calls the `addRecord(data, offset, count, onSuccess)` method of the data source. The data source adds an empty record to the underlying data set and calls the `onSuccess` callback parameter passed to the method. In the `onSuccess` handler the table object rebuilds the table and focuses a field in the new row.\n\nWhen user deletes a record, the table object calls the `deleteRecord(index, offset, count, onSuccess)` method of the data source. The data source removes the record from the underlying dataset and calls the `onSuccess` callback parameter, passing records of the current page (determined with the `offset` and `count` parameters) to the callback.\n\nThe `onSuccess` callback parameters are: data (records), count.\n\n### Client memory data source ($.oc.table.datasource.client)\n\nThe client memory data sources keeps the data in the client memory. The data is loaded from the control element's `data` property (`data-data` attribute) and posted back with the form data.\n\n### Server memory data source ($.oc.table.datasource.server)\n\n**TODO:** document this\n\n## Cell processors ($.oc.table.processor)\n\nCell processors are responsible for rendering the cell content, creating the cell data editors and updating the cell value in the grid control. There is a single cell processor per the table column. All rows in a specific column are handled with a same cell processor.\n\nCell processors should use the table's `setCellValue()` method to update the value in the table. The table class, in turn, will commit the changes to the data source when the user navigates to another row, on the pagination event, search or form submit. The `setCellValue()` should be the only way to update the table data by cell processors.\n\nCell processors should register delegated events to detect user's interaction with the cells they responsible for. The processors should unregister any event handlers in the `dispose()` method. The even handlers should be registered for the widgwet's top element, not for the table, as the table could be rebuilt completely on pagination, search, and other cases. The `click` and `keydown` events are dispatched to cell processors by the table class automatically and don't require extra handlers.\n\n### Removing editors from the table\n\nThe table keeps a reference to the currently active cell processor. The cell processor objects have the `activeCell` property that is a reference to the cell which currently has an editor. The table calls the `hideEditor()` method of the active cell processor and the cell processor removes the editor from the active cell.\n\n### Showing editors\n\nThe table object calls the `onFocus()` method of the cell processors when a cell is clicked or navigated (with the keyboard). The cell processor can build a cell editor when this method is called, if it's required.\n\n### Drop-down cell processor\n\nThe drop-down column type can load options from the column configuration or with AJAX. Example column configuration:\n\n```yaml\ncolor:\n    title: Color\n    type: dropdown\n    options:\n        red: Red\n        green: Green\n        blue: Blue\n    width: 15%\n```\n\nIf the `options` element is not presented in the configuration, the options will be loaded with AJAX.\n\n**TODO:** Document the AJAX interface\n\nThe drop-down options could depend on other columns. This works only with AJAX-based drop-downs. The column a drop-down depends on are defined with the `dependsOn` property:\n\n```yaml\nstate:\n    title: State\n    type: dropdown\n    dependsOn: country\n```\n\nMultiple fields are allowed as well:\n\n```yaml\nstate:\n    title: State\n    type: dropdown\n    dependsOn: [country, language]\n```\n\n**Note:** Dependent drop-down should always be defined after their master columns.\n\n### Autocomplete cell processor\n\nThe autocomplete column type can load options from the column configuration or with AJAX. Example column configuration:\n\n```yaml\ncolor:\n    title: Color\n    type: autocomplete\n    options:\n        red: Red\n        green: Green\n        blue: Blue\n```\n\nIf the `options` element is not presented in the configuration, the options will be loaded with AJAX.\n\n**TODO:** Document the AJAX interface\n\nThe editor can have the `dependsOn` property similar to the drop-down editor.\n\n# Server-side table widget (Backend\\Widgets\\Table)\n\n## Configuration\n\nThe widget is configured with YAML file. Required parameters:\n\n* `columns` - the columns definitions, see below.\n* `dataSource` - The data source class. Should specify the full qualified data source class name or alias. See the data source aliases below.\n* `keyFrom` - name of the key column. The default value is **id**.\n* `recordsPerPage` - number of records per page. If not specified, the pagination will be disabled.\n* `postbackHandlerName` - AJAX data handler name for the automatic data postback. The data will be posted only when the AJAX requests posts data to this handler. The default value is **onSave**. This parameter is applicable only with client-memory data sources.\n* `adding` - indicates if record deleting is allowed, default is **true**.\n* `deleting` - indicates if record deleting is allowed, default is **true**.\n* `toolbar` - specifies if the toolbar should be visible, default is **true**.\n* `height` - specifies the data table height, in pixels. The default value is **false** - the height is not limited.\n* `dynamicHeight` - determines if the `height` parameter should work as a max height. When this option is enabled and the table height is less than the `height` value, it won't be scrollable.\n\nThe `dataSource` parameter can take aliases for some data source classes for the simpler configuration syntax. Known aliases are:\n\n* `client` = \\Backend\\Widgets\\Table\\ClientMemoryDataSource\n\n### Column definitions\n\nColumns are defined as array with the `columns` property. The array keys correspond the column identifiers. The array elements are associative arrays with the following keys:\n\n- `title`\n- `type` (string, checkbox, dropdown, autocomplete)\n- `width` - sets the column width, can be specified in percents (10%) or pixels (50px). There could be a single column without width specified, it will be stretched to take the available space.\n- `readOnly` - prevents the cell value from being modified. Default: false.\n- `options` (for drop-down elements and autocomplete types)\n- `dependsOn` (from drop-down elements)\n- validation - defines the column client-side validation rules. See the **Client-side validation** section below.\n\n## Events\n\n### table.getDropdownOptions\n\ntable.getDropdownOptions - triggered when drop-down options are requested by the client. Parameters:\n\n- `$columnName` - specifies the drop-down column name.\n- `$rowData` - an array containing values of all columns in the table row.\n\nExample event handler:\n\n```php\n$table->bindEvent('table.getDropdownOptions',\n    function ($columnName, $rowData) {\n        if ($columnName == 'state') {\n            return ['ca'=>'California', 'wa'=>'Washington'];\n        }\n\n        // ...\n    }\n);\n```\n\n## Initializing the data\n\nAfter the table widget is created, its data source optionally could be filled with records. Example code:\n\n```php\n$table = new Table($this, $config);\n$dataSource = $table->getDataSource();\n\n$records = [\n    ['id'=>1, 'first_name'=>'John', 'last_name'=>'Smith'],\n    ['id'=>2, 'last_name'=>'John', 'last_name'=>'Doe']\n];\n\n$dataSource->initRecords($records);\n```\n\nNote that initializing records in the data source is required only once, when the widget object is first created and not required on the subsequent AJAX calls.\n\nThe `initRecords()` method can be called multiple times. Each call adds records to the data source and doesn't replace the existing records.\n\n## Emptying the data source\n\nThe `purge` method removes all records from the data source. This method should always be used with server memory data sources. Nonetheless, server side data sources should take care about providing the automatic ways of cleaning data with using the time-to-live mechanisms.\n\n```php\n$table = new Table($this, $config);\n$dataSource = $table->getDataSource();\n$dataSource->purge();\n```\n\n## Reading data from the data source\n\nThe server-side data sources (PHP) automatically maintain the actual data, but that mechanism for the client-memory and server-memory data sources is different.\n\nIn case of the client-memory data source, the table widget adds the data records to the POST, when the form is saved using the AJAX Framework (see `postback` and `postbackHandlerName` options). The table data will be injected automatically to the AJAX request when the `postback` value is `true` and the `postbackHandlerName` matches the exact handler name of the request. On the server side the data is inserted to the data source and can be accessed using the PHP example below.\n\nThe server-memory data source always automatically maintain its contents in synch with the client using AJAX, and POSTing data is not required.\n\nIn PHP reading data from a data source of any type looks like this (it should be in the AJAX handler that saves the data, for the client-memory data source the handler name should match the `postbackHandlerName` option value):\n\n```php\npublic function onSave()\n{\n    // Assuming that the widget was initialized in the\n    // controller constructor with the \"table\" alias.\n    $dataSource = $this->widget->table->getDataSource();\n\n    while ($records = $dataSource->readRecords(5)) {\n        traceLog($records);\n    }\n```\n\n## Validation\n\nThere are two ways to validate the table data - with the client-side and server-side validation.\n\n### Client-side validation ($.oc.table.validator)\n\nThe client-side validation is performed before the data is sent to the server, or before the user navigates to another page (if the pagination is enabled). Client-side validation is a fast, but simple validation implementation. It can't be used for complex cases like finding duplicating records, or comparing data with records existing in the database.\n\nThe client-side validation is configured in the widget configuration file in the column definition with the `validation` key. Example:\n\n```yaml\nstate:\n    title: State\n    type: dropdown\n    validation:\n        required:\n            message: Please select the state\n            requiredWith: country\n```\n\nIf a validator doesn't have any options (or default option values should be used), the declaration could look like this:\n\n```yaml\nstate:\n    title: State\n    type: dropdown\n    validation:\n        required: {}\n```\n\nThe `requiredWith` and `message` parameters are common for all validators.\n\nCurrently implemented client-side validation rules:\n\n- required\n- integer\n- float\n- length\n- regex\n\nValidation rules can be configured with extra parameters, which depend on a specific validator.\n\n#### required validator ($.oc.table.validator.required)\n\nChecks if the user has provided a value for the cell.\n\n#### integer validator ($.oc.table.validator.integer)\n\nChecks if the value is integer. Parameters:\n\n* `allowNegative` - optional, determines if negative values are allowed.\n* `min` - optional object, defines the minimum allowed value and error message. Object fields:\n    * `value` - defines the minimum value.\n    * `message` - optional, defines the error message.\n* `max` - optional object, defines the maximum allowed value and error message. Object fields:\n    * `value` - defines the maximum value.\n    * `message` - optional, defines the error message.\n\nExample of defining the integer validator with the `min` parameter:\n\n```yaml\nlength:\n    title: Length\n    type: string\n    validation:\n        integer:\n            min:\n                value: 3\n                message: \"The length cannot be less than 3\"\n```\n\n#### float validator ($.oc.table.validator.float)\n\nChecks if the value is a floating point number. The parameters for this validator match the parameters of the **integer** validator.\n\nValid floating point number formats:\n\n* 10\n* 10.302\n* -10 (if `allowNegative` is `true`)\n* -10.84 (if `allowNegative` is `true`)\n\n#### length validator ($.oc.table.validator.length)\n\nChecks if a string is not shorter or longer than specified values.  Parameters:\n\n* `min` - optional object, defines the minimum length and error message. Object fields:\n    * `value` - defines the minimum length.\n    * `message` - optional, defines the error message.\n* `max` - optional object, defines the maximum length and error message. Object fields:\n    * `value` - defines the maximum length.\n    * `message` - optional, defines the error message.\n\nExample column definition:\n\n    name:\n        title: Name\n        type: string\n        validation:\n            length:\n                min:\n                    value: 3\n                    message: \"The name is too short.\"\n\n#### regex validator ($.oc.table.validator.regex)\n\nChecks a string against a provided regular expression:\n\n* `pattern` - specifies the regular expression pattern string. Example: **^[0-9a-z]+$**\n* `modifiers` - optional, a string containing regular expression modifiers (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp), for example **i** for \"case insensitive\".\n\nExample:\n\n    login:\n        title: Login\n        type: string\n        validation:\n            regex:\n                pattern: \"^[a-z0-9]+$\"\n                modifiers: \"i\"\n                message: \"The login name can contain only Latin letters and numbers.\"\n\nAlthough the `message` parameter is optional for all validators it's highly recommended to provide a message for the regular expression validator as the default message \"Invalid value format.\" is not descriptive and can be confusing.\n\n### Server-side validation\n\nTODO: document.\n\nDraft. In case of a validation error the AJAX response should contain the following information:\n\n- row key\n- row offset in the data set\n- error message"
  },
  {
    "path": "modules/backend/widgets/table/ServerEventDataSource.php",
    "content": "<?php namespace Backend\\Widgets\\Table;\n\n/**\n * The server-event data source for the Table widget.\n */\nclass ServerEventDataSource extends DataSourceBase\n{\n    use \\October\\Rain\\Support\\Traits\\Emitter;\n\n    /**\n     * Return records from the data source.\n     * @param integer $offset Specifies the offset of the first record to return, zero-based.\n     * @param integer $count Specifies the number of records to return.\n     * @return array Returns the records.\n     * If there are no more records, returns an empty array.\n     */\n    public function getRecords($offset, $count)\n    {\n        return $this->fireEvent('data.getRecords', [$offset, $count], true);\n    }\n\n    /**\n     * Identical to getRecords except provided with a search query.\n     */\n    public function searchRecords($query, $offset, $count)\n    {\n        return $this->fireEvent('data.searchRecords', [$query, $offset, $count], true);\n    }\n\n    /**\n     * Returns a total number of records in the data source.\n     * @return integer\n     */\n    public function getCount()\n    {\n        return $this->fireEvent('data.getCount', [], true);\n    }\n\n    /**\n     * Updates a record in the data source.\n     * @return void\n     */\n    public function createRecord($data, $placement, $relativeToKey)\n    {\n        return $this->fireEvent('data.createRecord', [$data, $placement, $relativeToKey]);\n    }\n\n    /**\n     * Updates a record in the data source.\n     * @return void\n     */\n    public function updateRecord($key, $data)\n    {\n        $this->fireEvent('data.updateRecord', [$key, $data]);\n    }\n\n    /**\n     * Removes a record from the data source.\n     * @return array Returns the remaining records.\n     */\n    public function deleteRecord($key)\n    {\n        return $this->fireEvent('data.deleteRecord', [$key], true);\n    }\n\n    /**\n     * Initializes records in the data source.\n     * The method doesn't replace existing records and\n     * could be called multiple times in order to fill\n     * the data source.\n     * @param array $records Records to initialize in the data source.\n     */\n    public function initRecords($records)\n    {\n    }\n\n    /**\n     * Removes all records from the data source.\n     */\n    public function purge()\n    {\n    }\n\n    /**\n     * Returns all records in the data source.\n     * This method is specific only for the client memory data sources.\n     */\n    public function getAllRecords()\n    {\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/table/assets/css/table.css",
    "content": ".control-table {\n    .table-container {\n        border: 1px solid var(--bs-border-color);\n        border-radius: 4px;\n        overflow: hidden;\n        margin-bottom: 15px;\n\n        &:last-child {\n            margin-bottom: 0;\n        }\n    }\n\n    &.active .table-container {\n        border-color: var(--oc-primary-border);\n    }\n\n    table {\n        width: 100%;\n        border-collapse: collapse;\n        table-layout: fixed;\n        position: relative;\n\n        td, th {\n            padding: 0;\n            font-size: 13px;\n            color: var(--bs-body-color);\n        }\n\n        [data-view-container] {\n            padding: 5px 10px;\n            width: 100%;\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            min-height: 28px;\n        }\n    }\n\n    table.headers {\n        &:after {\n            content: ' ';\n            display: block;\n            position: absolute;\n            left: 1px;\n            right: 1px;\n            margin-top: -1px;\n            border-bottom: 1px solid var(--bs-border-color);\n        }\n\n        th {\n            padding: 7px 10px;\n            font-weight: normal;\n            font-size: 14px;\n            color: var(--oc-heading-color);\n            background: var(--bs-tertiary-bg);\n            border-right: 1px solid var(--bs-border-color);\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n\n            [data-view-container] {\n                padding-bottom: 6px;\n            }\n\n            &:last-child {\n                border-right: none;\n            }\n        }\n    }\n\n    &.active table.headers:after {\n        border-bottom-color: var(--oc-primary-border);\n    }\n\n    table.data {\n        td {\n            border: 1px solid var(--oc-primary-border);\n\n            .content-container {\n                position: relative;\n                padding: 1px;\n            }\n\n            &.active {\n                background: var(--oc-form-control-bg);\n\n                .content-container {\n                    box-shadow: inset 0 0 1px 1px var(--oc-border-focus);\n\n                    input {\n                        background: transparent;\n                        color: var(--bs-body-color);\n                    }\n                }\n            }\n        }\n\n        tr {\n            background-color: var(--bs-table-bg);\n\n            &.error {\n                background-color: var(--oc-table-active-bg, #fbecec) !important;\n\n                td.active.error {\n                    .content-container {\n                        box-shadow: inset 0 0 1px 1px #ec0000;\n                    }\n                }\n            }\n        }\n\n        tr:nth-child(2n) {\n            background-color: var(--bs-table-striped-bg);\n        }\n    }\n\n    table.data {\n        tr:first-child td {\n            border-top: none;\n        }\n\n        tr:last-child td {\n            border-bottom: none;\n        }\n\n        td:first-child {\n            border-left: none;\n        }\n\n        td:last-child {\n            border-right: none;\n        }\n    }\n\n    .control-scrollbar {\n        > div {\n            border-bottom-right-radius: 4px;\n            border-bottom-left-radius: 4px;\n            overflow: hidden;\n        }\n\n        table.data {\n            tr:last-child td {\n                border-bottom: 1px solid var(--bs-border-color);\n            }\n        }\n    }\n\n    .toolbar {\n        background: var(--oc-form-control-bg);\n        border-bottom: 1px solid var(--bs-border-color);\n        padding: 3px;\n        font-size: 0;\n        white-space: nowrap;\n\n        a.btn {\n            line-height: inherit;\n            display: inline-block;\n            color: inherit;\n            padding: 0 6px;\n            min-width: 40px;\n            text-align: center;\n            text-decoration: none !important;\n            border-radius: 4px;\n            outline: none;\n            box-shadow: none;\n            -webkit-appearance: none;\n            border: none;\n            background: transparent;\n            font-size: 14px;\n            line-height: 30px;\n            vertical-align: top;\n\n            &.control-button {\n                color: var(--oc-toolbar-color);\n                font-size: 14px;\n                margin-right: 8px;\n                line-height: 30px;\n            }\n\n            &.icon-only {\n                min-width: 30px;\n            }\n\n            &[disabled] {\n                cursor: default;\n\n                > i,\n                > span,\n                &:after {\n                    opacity: 0.5;\n                }\n            }\n\n            i {\n                display: inline-block;\n                position: relative;\n                font-size: 16px;\n                top: 1px;\n\n                + span {\n                    margin-left: 2px;\n                }\n            }\n\n            &:not([disabled]):hover {\n                background: var(--oc-toolbar-hover-bg);\n            }\n\n            &:not([disabled]):focus {\n                background: var(--oc-toolbar-hover-bg);\n            }\n\n            &.has-menu {\n                &:after {\n                    font-family: 'octo-icon' !important;\n                    speak: none;\n                    font-style: normal;\n                    font-weight: normal;\n                    font-variant: normal;\n                    text-transform: none;\n                    line-height: 1;\n                    -webkit-font-smoothing: antialiased;\n                    -moz-osx-font-smoothing: grayscale;\n                    content: \"\\e90a\";\n                    font-size: 16px;\n                    vertical-align: middle;\n                    margin-left: 0;\n                    margin-right: -3px;\n                    position: relative;\n                    top: -1px;\n                }\n            }\n        }\n\n        a.btn, button {\n            color: var(--oc-toolbar-color);\n            margin: 1px 0;\n        }\n\n        .table-search {\n            float: right;\n            margin: 0 3px 0 0;\n\n            .table-search-input {\n                height: auto;\n                padding: 5px 13px 5px;\n            }\n        }\n\n        a.table-icon {\n            &:before {\n                display: inline-block;\n                content: ' ';\n                width: 16px;\n                height: 16px;\n                margin-right: 8px;\n                position: relative;\n                top: 3px;\n                background: transparent url(../images/table-icons.gif) no-repeat 0 0;\n                background-size: 32px auto;\n            }\n\n            &.add-table-row-above:before {\n                background-position: 0 -56px;\n            }\n\n            &.delete-table-row:before {\n                background-position: 0 -113px;\n            }\n        }\n    }\n\n    &.active .toolbar {\n        border-bottom-color: var(--oc-primary-border);\n    }\n\n    .pagination {\n        ul {\n            padding: 0;\n            margin-bottom: 15px;\n\n            li {\n                list-style: none;\n                padding: 4px 6px;\n                border-radius: 2px;\n                display: inline-block;\n                margin-right: 5px;\n                font-size: 12px;\n                background: #ecf0f1;\n                line-height: 100%;\n\n                a {\n                    text-decoration: none;\n                    color: #95a5a6;\n                }\n\n                &.active {\n                    background: var(--bs-primary);\n                    a {\n                        color: #fff;\n                    }\n                }\n            }\n        }\n    }\n}\n\n@media only screen and (-moz-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-devicepixel-ratio: 1.5), only screen and (min-resolution: 1.5dppx) {\n    .control-table .toolbar {\n        a {\n            &:before {\n                background-position: 0px -9px;\n                background-size: 16px auto;\n            }\n\n            &.add-table-row-above:before {\n                background-position: 0 -39px;\n            }\n\n            &.delete-table-row:before {\n                background-position: 0 -66px;\n            }\n        }\n    }\n}\n\n/*\n * String and autocomplete editors\n */\n\n.control-table {\n    td[data-column-type=string],\n    td[data-column-type=autocomplete] {\n        input[type=text] {\n            width: 100%;\n            height: 100%;\n            display: block;\n            outline: none;\n            border: none;\n            padding: 5px 10px 6px;\n        }\n    }\n}\n\nul.table-widget-autocomplete {\n    background: var(--bs-modal-bg);\n    font-size: 13px;\n    margin-top: 0;\n    border: 1px solid var(--oc-primary-border);\n    border-top: 1px solid var(--oc-toolbar-border);\n    border-bottom-right-radius: 4px;\n    border-bottom-left-radius: 4px;\n\n    li a {\n        padding: 5px 10px;\n    }\n}\n\n/*\n * Checkbox editor\n */\n\n.control-table {\n    td[data-column-type=checkbox] {\n        input[data-checkbox-element] {\n            font-size: 1rem;\n            margin-left: 10px;\n        }\n    }\n}\n\n/*\n * Dropdown editor\n */\n\n.control-table {\n    td[data-column-type=dropdown] {\n        user-select: none;\n\n        [data-view-container] {\n            padding-right: 20px;\n            position: relative;\n            cursor: pointer;\n\n            &:after {\n                font-family: 'octo-icon' !important;\n                speak: none;\n                font-style: normal;\n                font-weight: normal;\n                font-variant: normal;\n                text-transform: none;\n                line-height: 1;\n                -webkit-font-smoothing: antialiased;\n                -moz-osx-font-smoothing: grayscale;\n                content: \"\\f107\";\n                font-size: 13px;\n                line-height: 100%;\n                color: #95a5a6;\n                position: absolute;\n                top: 8px;\n                right: 10px;\n            }\n\n            &:hover:after {\n                color: var(--oc-link-color);\n            }\n        }\n\n        [data-dropdown-open=true] {\n            background: var(--oc-primary-bg);\n\n            [data-view-container]:after {\n                font-family: 'octo-icon' !important;\n                speak: none;\n                font-style: normal;\n                font-weight: normal;\n                font-variant: normal;\n                text-transform: none;\n                line-height: 1;\n                -webkit-font-smoothing: antialiased;\n                -moz-osx-font-smoothing: grayscale;\n                content: \"\\f106\";\n            }\n        }\n\n        .content-container {\n            outline: none;\n        }\n    }\n}\n\n/* Frameless control styles start */\n\n.widget-field.frameless .control-table {\n    .table-container {\n        border-top: none;\n        border-left: none;\n        border-right: none;\n        border-radius: 0;\n    }\n\n    .toolbar {\n        background: transparent;\n    }\n}\n\n/* Frameless control styles end */\n\nhtml.cssanimations {\n    .control-table td[data-column-type=dropdown] {\n        [data-view-container].loading:after {\n            background: url('../../../../../../modules/backend/assets/images/loader-transparent.svg') 50% 50%;\n            background-size: 15px 15px;\n            position: absolute;\n            width: 15px;\n            height: 15px;\n            top: 6px;\n            right: 5px;\n            content: ' ';\n            animation: spin 1s linear infinite;\n        }\n    }\n}\n\n.table-control-dropdown-list {\n    user-select: none;\n    position: absolute;\n    background: var(--bs-modal-bg);\n    border: 1px solid var(--oc-primary-border);\n    border-top: none;\n    padding-top: 1px;\n    overflow: hidden;\n    z-index: 1000;\n    box-sizing: border-box;\n    border-bottom-right-radius: 4px;\n    border-bottom-left-radius: 4px;\n\n    ul {\n        border-top: 1px solid var(--oc-toolbar-border);\n        padding: 0;\n        margin: 0;\n        max-height: 200px;\n        overflow: auto;\n    }\n\n    li {\n        list-style: none;\n        font-size: 13px;\n        color: var(--oc-text-color);\n        padding: 5px 10px;\n        cursor: pointer;\n        outline: none;\n\n        &:hover,\n        &:focus,\n        &.selected {\n            background: var(--oc-border-focus);\n            color: white;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/build-min.js",
    "content": "!function(t){\"use strict\";void 0===t.oc&&(t.oc={}),void 0===t.oc.table&&(t.oc.table={});var e=function(e,o){if(this.el=e,this.$el=t(e),this.options=o,this.disposed=!1,this.dataSource=null,this.cellProcessors={},this.activeCellProcessor=null,this.activeCell=null,this.tableContainer=null,this.dataTableContainer=null,this.editedRowKey=null,this.dataTable=null,this.headerTable=null,this.toolbar=null,this.clickHandler=this.onClick.bind(this),this.keydownHandler=this.onKeydown.bind(this),this.documentClickHandler=this.onDocumentClick.bind(this),this.toolbarClickHandler=this.onToolbarClick.bind(this),this.options.postback&&\"client\"==this.options.clientDataSourceClass){if(!this.options.postbackHandlerName){var i=this.$el.closest(\"form\").data(\"request\");this.options.postbackHandlerName=i||\"onSave\"}this.formSubmitHandler=this.onFormSubmit.bind(this)}this.navigation=null,this.search=null,this.recordsAddedOrDeleted=0,this.disposeBound=this.dispose.bind(this),this.init(),t.oc.foundation.controlUtils.markDisposable(e)};e.prototype.init=function(){this.createDataSource(),this.initCellProcessors(),this.navigation=new t.oc.table.helper.navigation(this),this.search=new t.oc.table.helper.search(this),this.buildUi(),this.registerHandlers()},e.prototype.disposeCellProcessors=function(){for(var t=0,e=this.options.columns.length;t<e;t++){var o=this.options.columns[t].key;this.cellProcessors[o].dispose(),this.cellProcessors[o]=null}this.cellProcessors=null,this.activeCellProcessor=null},e.prototype.setColumnConfiguration=function(t,e){this.cellProcessors[t].columnConfiguration={...this.cellProcessors[t].columnConfiguration||{},...e}},e.prototype.createDataSource=function(){var e=this.options.clientDataSourceClass;if(void 0===t.oc.table.datasource||null==t.oc.table.datasource[e])throw new Error('The table client-side data source class \"'+e+'\" is not found in the $.oc.table.datasource namespace.');this.dataSource=new t.oc.table.datasource[e](this)},e.prototype.registerHandlers=function(){this.el.addEventListener(\"click\",this.clickHandler),this.el.addEventListener(\"keydown\",this.keydownHandler),this.$el.one(\"dispose-control\",this.disposeBound),document.addEventListener(\"click\",this.documentClickHandler),this.options.postback&&\"client\"==this.options.clientDataSourceClass&&this.$el.closest(\"form\").bind(\"oc.beforeRequest\",this.formSubmitHandler);var t=this.getToolbar();t&&t.addEventListener(\"click\",this.toolbarClickHandler)},e.prototype.unregisterHandlers=function(){this.el.removeEventListener(\"click\",this.clickHandler),document.removeEventListener(\"click\",this.documentClickHandler),this.clickHandler=null,this.el.removeEventListener(\"keydown\",this.keydownHandler),this.keydownHandler=null;var t=this.getToolbar();t&&t.removeEventListener(\"click\",this.toolbarClickHandler),this.toolbarClickHandler=null,this.formSubmitHandler&&(this.$el.closest(\"form\").unbind(\"oc.beforeRequest\",this.formSubmitHandler),this.formSubmitHandler=null)},e.prototype.initCellProcessors=function(){for(var e=0,o=this.options.columns.length;e<o;e++){var i=this.options.columns[e],a=i.key,n=i.type;if(void 0===n&&(n=\"string\",this.options.columns[e].type=n),void 0===t.oc.table.processor||null==t.oc.table.processor[n])throw new Error('The table cell processor for the column type \"'+n+'\" is not found in the $.oc.table.processor namespace.');this.cellProcessors[a]=new t.oc.table.processor[n](this,a,i)}},e.prototype.getCellProcessor=function(t){return this.cellProcessors[t]},e.prototype.buildUi=function(){var t=this.el.querySelector(\"div.table-container\");t&&t.remove(),this.tableContainer=document.createElement(\"div\"),this.tableContainer.setAttribute(\"class\",\"table-container\"),this.options.toolbar&&this.buildToolbar(),this.tableContainer.appendChild(this.buildHeaderTable()),this.el.insertBefore(this.tableContainer,this.el.children[0]),this.options.height?this.dataTableContainer=this.buildScrollbar():this.dataTableContainer=this.tableContainer,this.updateDataTable()},e.prototype.buildToolbar=function(){(this.options.adding||this.options.deleting)&&(this.toolbar=t(t(\"[data-table-toolbar]\",this.el).html()).appendTo(this.tableContainer).get(0),this.options.adding?this.navigation.paginationEnabled()||!this.options.rowSorting?t(\"[data-cmd=record-add-below], [data-cmd=record-add-above]\",this.toolbar).remove():t(\"[data-cmd=record-add]\",this.toolbar).remove():t('[data-cmd^=\"record-add\"]',this.toolbar).remove(),this.options.deleting||t('[data-cmd=\"record-delete\"]',this.toolbar).remove())},e.prototype.buildScrollbar=function(){var e=document.createElement(\"div\"),o=document.createElement(\"div\");return e.setAttribute(\"class\",\"control-scrollbar\"),this.options.dynamicHeight?e.setAttribute(\"style\",\"max-height: \"+this.options.height+\"px\"):e.setAttribute(\"style\",\"height: \"+this.options.height+\"px\"),e.appendChild(o),this.tableContainer.appendChild(e),t(e).scrollbar({animation:!1}),o},e.prototype.buildHeaderTable=function(){var t=document.createElement(\"table\"),e=document.createElement(\"tr\");t.className=\"headers\",t.appendChild(e);for(var o=0,i=this.options.columns.length;o<i;o++){var a=document.createElement(\"th\");this.options.columns[o].width&&a.setAttribute(\"style\",\"width: \"+this.options.columns[o].width),void 0!==a.textContent?a.textContent=this.options.columns[o].title:a.innerText=this.options.columns[o].title,e.appendChild(a)}return this.headerTable=t,t},e.prototype.updateDataTable=function(t){var e=this;this.unfocusTable(),this.fetchRecords(function(o,i){e.buildDataTable(o,i),t&&t(),0==i&&e.options.adding&&e.addRecord(\"above\",!0),e.$el.trigger(\"oc.tableUpdateData\",[o,i]),e=null})},e.prototype.updateColumnWidth=function(){for(var t=this.headerTable.querySelectorAll(\"th\"),e=this.dataTable.querySelectorAll(\"tr:first-child td\"),o=0,i=t.length;o<i;o++)e[o]&&e[o].setAttribute(\"style\",t[o].getAttribute(\"style\"))},e.prototype.buildDataTable=function(t,e){var o=document.createElement(\"table\"),i=document.createElement(\"tbody\"),a=this.options.keyColumn;o.setAttribute(\"class\",\"data\");for(var n=0,r=t.length;n<r;n++){var s=document.createElement(\"tr\");if(void 0===t[n][a])throw new Error(\"The row attribute \"+a+\" is not set for the row #\"+n);s.setAttribute(\"data-row\",t[n][a]);for(var l=0,c=this.options.columns.length;l<c;l++){var h=document.createElement(\"td\"),d=document.createElement(\"input\"),u=document.createElement(\"div\"),p=this.options.columns[l],b=p.key,f=this.getCellProcessor(b);h.setAttribute(\"data-column\",b),h.setAttribute(\"data-column-type\",p.type),d.setAttribute(\"type\",\"hidden\"),d.setAttribute(\"data-container\",\"data-container\"),d.value=this.formatDataContainerValue(t[n][b]),u.setAttribute(\"class\",\"content-container\"),h.appendChild(u),s.appendChild(h),h.appendChild(d),f.renderCell(t[n][b],u)}i.appendChild(s)}o.appendChild(i),null!==this.dataTable?this.dataTableContainer.replaceChild(o,this.dataTable):this.dataTableContainer.appendChild(o),this.dataTable=o,this.updateColumnWidth(),this.updateScrollbar(),this.navigation.buildPagination(e),this.search.buildSearchForm()},e.prototype.formatDataContainerValue=function(t){return void 0===t?\"\":\"boolean\"==typeof t?t?1:\"\":t},e.prototype.fetchRecords=function(t){this.search.hasQuery()?this.dataSource.searchRecords(this.search.getQuery(),this.navigation.getPageFirstRowOffset(),this.options.recordsPerPage,t):this.dataSource.getRecords(this.navigation.getPageFirstRowOffset(),this.options.recordsPerPage,t)},e.prototype.updateScrollbar=function(){this.options.height&&t(this.dataTableContainer.parentNode).data(\"oc.scrollbar\")?.update()},e.prototype.scrollCellIntoView=function(){this.options.height&&this.activeCell&&t(this.dataTableContainer.parentNode).data(\"oc.scrollbar\")?.gotoElement(this.activeCell)},e.prototype.disposeScrollbar=function(){this.options.height&&(t(this.dataTableContainer.parentNode).data(\"oc.scrollbar\")?.dispose(),t(this.dataTableContainer.parentNode).data(\"oc.scrollbar\",null))},e.prototype.setActiveProcessor=function(t){this.activeCellProcessor&&this.activeCellProcessor.onUnfocus(),this.activeCellProcessor=t},e.prototype.commitEditedRow=function(){if(null!==this.editedRowKey){var t=this.dataTable.querySelector('tr[data-row=\"'+CSS.escape(this.editedRowKey)+'\"]');if(t&&1==t.getAttribute(\"data-dirty\")){for(var e=t.children,o={},i=0,a=e.length;i<a;i++){var n=e[i];o[n.getAttribute(\"data-column\")]=this.getCellValue(n)}this.dataSource.updateRecord(this.editedRowKey,o),t.setAttribute(\"data-dirty\",0)}}},e.prototype.unfocusTable=function(){this.elementRemoveClass(this.el,\"active\"),this.activeCellProcessor&&this.activeCellProcessor.onUnfocus(),this.commitEditedRow(),this.activeCellProcessor=null,this.activeCell&&this.activeCell.setAttribute(\"class\",\"\"),this.activeCell=null},e.prototype.focusTable=function(){this.elementAddClass(this.el,\"active\")},e.prototype.focusCell=function(t,e){var o=t.getAttribute(\"data-column\");if(null!==o){this.focusTable();var i=this.getCellProcessor(o);if(!i)throw new Error(\"Cell processor not found for the column \"+o);this.activeCell!==t&&(this.activeCell&&this.elementRemoveClass(this.activeCell,\"active\"),this.setActiveProcessor(i),this.activeCell=t,i.isCellFocusable()&&this.elementAddClass(this.activeCell,\"active\"));var a=this.getCellRowKey(t);null!==this.editedRowKey&&a!=this.editedRowKey&&this.commitEditedRow(),this.editedRowKey=a,i.onFocus(t,e),this.scrollCellIntoView()}},e.prototype.markCellRowDirty=function(t){t.parentNode.setAttribute(\"data-dirty\",1)},e.prototype.addRecord=function(t,e){this.activeCell&&!this.navigation.paginationEnabled()&&this.options.rowSorting||(t=\"bottom\");var o=null,i=null;if(\"above\"!=t&&\"below\"!=t||(o=this.getCellRowKey(this.activeCell),i=this.getCellRowIndex(this.activeCell)),this.unfocusTable(),this.navigation.paginationEnabled()){var a=this.navigation.getNewRowPage(t,i);if(a!=this.navigation.pageIndex&&!this.validate())return;this.navigation.pageIndex=a}this.recordsAddedOrDeleted++;var n=this.options.keyColumn,r={},s=this;r[n]=-1*this.recordsAddedOrDeleted,this.$el.trigger(\"oc.tableNewRow\",[r]),this.dataSource.createRecord(r,t,o,this.navigation.getPageFirstRowOffset(),this.options.recordsPerPage,function(t,o){s.buildDataTable(t,o);var i=s.findRowByKey(r[n]);if(!i)throw new Error(\"New row is not found in the updated table: \"+r[n]);e||s.navigation.focusCell(i,0),s=null})},e.prototype.deleteRecord=function(){if(this.activeCell){var t=this,e=this.getCellRowKey(this.activeCell),o=this.getCellRowIndex(this.activeCell),i=this.navigation.paginationEnabled(),a=this.navigation.pageIndex,n=this.activeCell.cellIndex;i&&(this.navigation.pageIndex=this.navigation.getPageAfterDeletion(o)),this.recordsAddedOrDeleted++;var r={};r[this.options.keyColumn]=-1*this.recordsAddedOrDeleted,this.dataSource.deleteRecord(e,r,this.navigation.getPageFirstRowOffset(),this.options.recordsPerPage,function(e,r){t.buildDataTable(e,r),i&&a!=t.navigation.pageIndex?t.navigation.focusCell(\"bottom\",n):t.navigation.focusCellInReplacedRow(o,n),t=null})}},e.prototype.notifyRowProcessorsOnChange=function(t){for(var e=t.getAttribute(\"data-column\"),o=t.parentNode,i=0,a=o.children.length;i<a;i++){var n=this.options.columns[i].key;this.cellProcessors[n].onRowValueChanged(e,o.children[i])}},e.prototype.getToolbar=function(){return this.tableContainer.querySelector(\"div.toolbar\")},e.prototype.validate=function(){for(var e=this.dataTable.querySelectorAll(\"tbody tr[data-row]\"),o=0,i=e.length;o<i;o++){var a=e[o];this.elementRemoveClass(a,\"error\")}o=0;for(var n=e.length;o<n;o++){a=e[o];for(var r=this.getRowData(a),s=0,l=a.children.length;s<l;s++)this.elementRemoveClass(a.children[s],\"error\");for(var c in r){var h=this.getCellProcessor(c),d=h.validate(r[c],r);if(void 0!==d){var u=a.querySelector('td[data-column=\"'+c+'\"]'),p=this;return this.elementAddClass(a,\"error\"),this.elementAddClass(u,\"error\"),t.oc.flashMsg({text:d,class:\"error\"}),window.setTimeout(function(){p.focusCell(u,!1),u=null,p=null,h=null},100),!1}}}return!0},e.prototype.onClick=function(t){if(this.focusTable(),!1!==this.navigation.onClick(t)&&!1!==this.search.onClick(t)){for(var e=0,o=this.options.columns.length;e<o;e++){var i=this.options.columns[e].key;this.cellProcessors[i].onClick(t)}var a=this.getEventTarget(t,\"TD\");a&&\"TD\"==a.tagName?this.focusCell(a,!0):this.unfocusTable()}},e.prototype.onKeydown=function(t){if((\"a\"===t.key||\"A\"===t.key)&&t.altKey&&this.options.adding)return t.shiftKey?this.addRecord(\"above\"):this.addRecord(\"below\"),void this.stopEvent(t);if((\"d\"===t.key||\"D\"===t.key)&&t.altKey&&this.options.deleting)return this.deleteRecord(),void this.stopEvent(t);for(var e=0,o=this.options.columns.length;e<o;e++){var i=this.options.columns[e].key;if(!1===this.cellProcessors[i].onKeyDown(t))return}!1!==this.navigation.onKeydown(t)&&this.search.onKeydown(t)},e.prototype.onFormSubmit=function(t,e){var o=e.handler===this.options.postbackHandlerName;if(!o||(this.unfocusTable(),this.validate())){if(o||this.options.postbackHandlerWild){var i=this.options.fieldName.indexOf(\"[\")>-1?this.options.fieldName+\"[TableData]\":this.options.fieldName+\"TableData\";e.options.data[i]=JSON.stringify(this.dataSource.getAllData())}}else t.preventDefault()},e.prototype.onToolbarClick=function(t){var e=this.getEventTarget(t,\"BUTTON\"),o=e&&e.getAttribute(\"data-cmd\");if(o){switch(o){case\"record-add\":case\"record-add-below\":this.addRecord(\"below\");break;case\"record-add-above\":this.addRecord(\"above\");break;case\"record-delete\":this.deleteRecord()}this.stopEvent(t)}},e.prototype.onDocumentClick=function(t){var e=this.getEventTarget(t);this.parentContainsElement(this.el,e)||this.activeCellProcessor&&this.activeCellProcessor.elementBelongsToProcessor(e)||this.unfocusTable()},e.prototype.dispose=function(){this.disposed||(this.disposed=!0,this.disposeBound=!0,this.unfocusTable(),this.dataSource.dispose(),this.dataSource=null,this.unregisterHandlers(),this.dataTable=null,this.headerTable=null,this.toolbar=null,this.disposeCellProcessors(),this.navigation.dispose(),this.navigation=null,this.disposeScrollbar(),this.el=null,this.tableContainer=null,this.$el=null,this.dataTableContainer=null,this.activeCell=null)},e.prototype.setRowValues=function(t,e){var o=this.findRowByIndex(t);if(!o)return!1;for(var i=!1,a=0,n=o.children.length;a<n;a++){var r=o.children[a],s=this.getCellColumnName(r);for(var l in e)l==s&&(this.setCellValue(r,e[l],!0),i=!0)}if(i){var c=this.editedRowKey;this.editedRowKey=this.getRowKey(o),this.commitEditedRow(),this.editedRowKey=c}return!0},e.prototype.getElement=function(){return this.el},e.prototype.getAlias=function(){return this.options.alias},e.prototype.getTableContainer=function(){return this.tableContainer},e.prototype.getDataTableBody=function(){return this.dataTable.children[0]},e.prototype.getEventTarget=function(t,e){var o=t.target?t.target:t.srcElement;if(void 0===e)return o;for(var i=o.tagName;i!=e;){if(!(o=o.parentNode))return null;i=o.tagName}return o},e.prototype.stopEvent=function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,t.preventDefault?t.preventDefault():t.returnValue=!1},e.prototype.elementHasClass=function(t,e){return t.classList?t.classList.contains(e):new RegExp(\"(^| )\"+e+\"( |$)\",\"gi\").test(t.className)},e.prototype.elementAddClass=function(t,e){this.elementHasClass(t,e)||(t.classList?t.classList.add(e):t.className+=\" \"+e)},e.prototype.elementRemoveClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(new RegExp(\"(^|\\\\b)\"+e.split(\" \").join(\"|\")+\"(\\\\b|$)\",\"gi\"),\" \")},e.prototype.parentContainsElement=function(t,e){for(;e&&e!=t;)e=e.parentNode;return!!e},e.prototype.getCellValue=function(t){return t.querySelector(\"[data-container]\").value},e.prototype.getCellRowKey=function(t){return t.parentNode.getAttribute(\"data-row\")},e.prototype.getRowKey=function(t){return t.getAttribute(\"data-row\")},e.prototype.findRowByKey=function(t){return this.dataTable.querySelector('tbody tr[data-row=\"'+t+'\"]')},e.prototype.findRowByIndex=function(t){return this.getDataTableBody().children[t]},e.prototype.getCellRowIndex=function(t){return parseInt(t.parentNode.rowIndex)},e.prototype.getRowCellValueByColumnName=function(t,e){var o=t.querySelector('td[data-column=\"'+e+'\"]');return o?this.getCellValue(o):o},e.prototype.getRowData=function(t){for(var e={},o=0,i=t.children.length;o<i;o++){var a=t.children[o];e[a.getAttribute(\"data-column\")]=this.getCellValue(a)}return e},e.prototype.getCellColumnName=function(t){return t.getAttribute(\"data-column\")},e.prototype.setCellValue=function(t,e,o){var i=t.querySelector(\"[data-container]\");i.value!=e&&(i.value=e,this.markCellRowDirty(t),this.notifyRowProcessorsOnChange(t),void 0!==o&&o||this.$el.trigger(\"oc.tableCellChanged\",[this.getCellColumnName(t),e,this.getCellRowIndex(t)]))},e.DEFAULTS={clientDataSourceClass:\"client\",keyColumn:\"id\",recordsPerPage:!1,data:null,postback:!0,postbackHandlerName:null,postbackHandlerWild:!1,adding:!0,deleting:!0,toolbar:!0,searching:!1,rowSorting:!1,height:!1,dynamicHeight:!1};var o=t.fn.table;t.fn.table=function(o){var i=Array.prototype.slice.call(arguments,1),a=void 0;return this.each(function(){var n=t(this),r=n.data(\"oc.table\"),s=t.extend({},e.DEFAULTS,n.data(),\"object\"==typeof o&&o);if(r||n.data(\"oc.table\",r=new e(this,s)),\"string\"==typeof o&&(a=r[o].apply(r,i)),void 0!==a)return!1}),a||this},t.fn.table.Constructor=e,t.oc.table.table=e,t.fn.table.noConflict=function(){return t.fn.table=o,this},t(document).on(\"render\",function(){t(\"div[data-control=table]\").table()})}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");void 0===t.oc.table.helper&&(t.oc.table.helper={});var e=function(t){this.tableObj=t,this.pageIndex=0,this.pageCount=0,this.init()};e.prototype.init=function(){},e.prototype.dispose=function(){this.tableObj=null},e.prototype.paginationEnabled=function(){return null!=this.tableObj.options.recordsPerPage&&0!=this.tableObj.options.recordsPerPage},e.prototype.getPageFirstRowOffset=function(){return this.pageIndex*this.tableObj.options.recordsPerPage},e.prototype.buildPagination=function(t){if(this.paginationEnabled()){var e=this.tableObj.getElement().querySelector(\".pagination\"),o=!1,i=0;if(this.pageCount=this.calculatePageCount(t,this.tableObj.options.recordsPerPage),e?i=this.getRecordCount(e):((e=document.createElement(\"div\")).setAttribute(\"class\",\"pagination\"),o=!0),o||i!=t){e.setAttribute(\"data-record-count\",t);var a=this.buildPaginationLinkList(t,this.tableObj.options.recordsPerPage,this.pageIndex);o?(e.appendChild(a),this.tableObj.getElement().appendChild(e)):e.replaceChild(a,e.children[0])}else this.markActiveLinkItem(e,this.pageIndex)}},e.prototype.calculatePageCount=function(t,e){var o=Math.ceil(t/e);return o||(o=1),o},e.prototype.getRecordCount=function(t){var e=t||this.tableObj.getElement().querySelector(\".pagination\");return parseInt(e.getAttribute(\"data-record-count\"))},e.prototype.buildPaginationLinkList=function(e,o,i){for(var a=this.calculatePageCount(e,o),n=document.createElement(\"ul\"),r=0;r<a;r++){var s=document.createElement(\"li\"),l=document.createElement(\"a\");r==i&&s.setAttribute(\"class\",\"active\"),l.innerText=r+1,l.setAttribute(\"data-page-index\",r),l.setAttribute(\"href\",\"#\"),s.appendChild(l),n.appendChild(s),t(l).addClass(\"pagination-link\")}return n},e.prototype.markActiveLinkItem=function(t,e){var o=t.querySelector(\".active\"),i=t.children[0];o.setAttribute(\"class\",\"\");for(var a=0,n=i.children.length;a<n;a++)a==e&&i.children[a].setAttribute(\"class\",\"active\")},e.prototype.gotoPage=function(t,e){this.tableObj.unfocusTable(),this.tableObj.validate()&&(this.pageIndex=t,this.tableObj.updateDataTable(e))},e.prototype.getRowCountOnPage=function(t){return this.tableObj.getDataTableBody().children.length},e.prototype.getNewRowPage=function(t,e){var o=this.getRecordCount();return\"bottom\"===t?this.calculatePageCount(o+1,this.tableObj.options.recordsPerPage)-1:\"above\"==t?this.pageIndex:\"below\"==t&&e==this.tableObj.options.recordsPerPage-1?this.pageIndex+1:this.pageIndex},e.prototype.getPageAfterDeletion=function(t){return 0==t&&1==this.getRowCountOnPage()?0==this.pageIndex?0:this.pageIndex-1:this.pageIndex},e.prototype.navigateDown=function(t,e){if(this.tableObj.activeCell&&(!this.tableObj.activeCellProcessor||this.tableObj.activeCellProcessor.keyNavigationAllowed(t,\"down\"))){var o=this.tableObj.activeCell.parentNode,i=t.shiftKey?o.parentNode.children[o.parentNode.children.length-1]:o.nextElementSibling,a=void 0!==e?e:this.tableObj.activeCell.cellIndex;if(i){var n=i.children[a];n&&this.tableObj.focusCell(n)}else{if(!this.paginationEnabled())return;if(this.pageIndex<this.pageCount-1){var r=this;this.gotoPage(this.pageIndex+1,function(){r.focusCell(\"top\",a),r=null})}}}},e.prototype.navigateUp=function(t,e,o){if(this.tableObj.activeCell&&(!this.tableObj.activeCellProcessor||this.tableObj.activeCellProcessor.keyNavigationAllowed(t,\"up\"))){var i=this.tableObj.activeCell.parentNode,a=!t.shiftKey||o?i.previousElementSibling:i.parentNode.children[0],n=void 0!==e?e:this.tableObj.activeCell.cellIndex;if(a){var r=a.children[n];r&&this.tableObj.focusCell(r)}else{if(!this.paginationEnabled())return;if(this.pageIndex>0){var s=this;this.gotoPage(this.pageIndex-1,function(){s.focusCell(\"bottom\",n),s=null})}}}},e.prototype.navigateLeft=function(t,e){if(this.tableObj.activeCell&&(e||!this.tableObj.activeCellProcessor||this.tableObj.activeCellProcessor.keyNavigationAllowed(t,\"left\"))){var o=this.tableObj.activeCell.parentNode,i=!t.shiftKey||e?this.tableObj.activeCell.cellIndex-1:0,a=o.children[i];a?this.tableObj.focusCell(a):this.navigateUp(t,o.children.length-1,e)}},e.prototype.navigateRight=function(t,e){if(this.tableObj.activeCell&&(e||!this.tableObj.activeCellProcessor||this.tableObj.activeCellProcessor.keyNavigationAllowed(t,\"right\"))){var o=this.tableObj.activeCell.parentNode,i=t.shiftKey?o.children.length-1:this.tableObj.activeCell.cellIndex+1,a=o.children[i];a?this.tableObj.focusCell(a):this.navigateDown(t,0)}},e.prototype.navigateNext=function(t){this.tableObj.activeCell&&(this.tableObj.activeCellProcessor&&!this.tableObj.activeCellProcessor.keyNavigationAllowed(t,\"tab\")||(t.shiftKey?this.navigateLeft(t,!0):this.navigateRight(t,!0),this.tableObj.stopEvent(t)))},e.prototype.focusCell=function(t,e){var o=null,i=this.tableObj.getDataTableBody();if(\"object\"==typeof t?o=t:\"bottom\"==t?o=i.children[i.children.length-1]:\"top\"==t&&(o=i.children[0]),o){var a=o.children[e];a&&this.tableObj.focusCell(a)}},e.prototype.focusCellInReplacedRow=function(t,e){if(0==t)this.focusCell(\"top\",e);else{var o=this.tableObj.findRowByIndex(t);o||(o=this.tableObj.findRowByIndex(t-1)),o?this.focusCell(o,e):this.focusCell(\"top\",e)}},e.prototype.onKeydown=function(t){return\"ArrowDown\"===t.key?this.navigateDown(t):\"ArrowUp\"===t.key?this.navigateUp(t):\"ArrowLeft\"===t.key?this.navigateLeft(t):\"ArrowRight\"===t.key?this.navigateRight(t):\"Tab\"===t.key?this.navigateNext(t):void 0},e.prototype.onClick=function(e){var o=this.tableObj.getEventTarget(e,\"A\");if(o&&t(o).hasClass(\"pagination-link\")){var i=parseInt(o.getAttribute(\"data-page-index\"));if(null!==i)return this.gotoPage(i),this.tableObj.stopEvent(e),!1}},t.oc.table.helper.navigation=e}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");void 0===t.oc.table.helper&&(t.oc.table.helper={});var e=function(t){this.tableObj=t,this.searchForm=null,this.searchInput=null,this.inputTrackTimer=null,this.activeQuery=null,this.isActive=!1,this.init()};e.prototype.init=function(){},e.prototype.dispose=function(){this.tableObj=null,this.searchForm=null,this.searchInput=null},e.prototype.buildSearchForm=function(){if(this.searchEnabled()){var e=this.tableObj.getElement(),o=this.tableObj.getToolbar();o.querySelector(\".table-search\")||(this.searchForm=t(t(\"[data-table-toolbar-search]\",e).html()).appendTo(o).get(0),this.searchInput=t(\".table-search-input\",this.searchForm).get(0))}},e.prototype.getQuery=function(){return t.trim(this.activeQuery)},e.prototype.hasQuery=function(){return this.searchEnabled()&&t.trim(this.activeQuery).length>0},e.prototype.searchEnabled=function(){return this.tableObj.options.searching},e.prototype.performSearch=function(t,e){var o=this.activeQuery!=t;this.activeQuery=t,o&&this.tableObj.updateDataTable(e)},e.prototype.onKeydown=function(t){if(\"Tab\"!==t.key){if(this.isActive){var e=this;this.inputTrackTimer=window.setTimeout(function(){e.performSearch(e.searchInput.value)},300)}}else this.onClick(t)},e.prototype.onClick=function(e){var o=this.tableObj.getEventTarget(e,\"INPUT\");this.isActive=o&&t(o).hasClass(\"table-search-input\")},t.oc.table.helper.search=e}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");void 0===t.oc.table.datasource&&(t.oc.table.datasource={});var e=function(t){this.tableObj=t};e.prototype.dispose=function(){this.tableObj=null},e.prototype.getRecords=function(t,e,o){o([])},e.prototype.searchRecords=function(t,e,o,i){i([])},e.prototype.createRecord=function(t,e,o,i,a,n){n([],0)},e.prototype.updateRecord=function(t,e){},e.prototype.deleteRecord=function(t,e,o,i,a){a([],0)},t.oc.table.datasource.base=e}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.datasource)throw new Error(\"The $.oc.table.datasource namespace is not defined. Make sure that the table.datasource.base.js script is loaded.\");var e=t.oc.table.datasource.base,o=e.prototype,i=function(t){e.call(this,t);var o=t.getElement().getAttribute(\"data-data\");if(null==o)throw new Error(\"The required data-data attribute is not found on the table control element.\");this.data=JSON.parse(o)};(i.prototype=Object.create(o)).constructor=i,i.prototype.dispose=function(){o.dispose.call(this),this.data=null},i.prototype.getRecords=function(t,e,o){o(e?this.data.slice(t,t+e):this.data,this.data.length)},i.prototype.createRecord=function(t,e,o,i,a,n){if(\"bottom\"===e)this.data.push(t);else if(\"above\"==e||\"below\"==e){var r=this.getIndexOfKey(o);\"below\"==e&&r++,this.data.splice(r,0,t)}this.getRecords(i,a,n)},i.prototype.updateRecord=function(t,e){var o=this.getIndexOfKey(t);if(-1===o)throw new Error(\"Record with they key \"+t+\" is not found in the data set\");e[this.tableObj.options.keyColumn]=t,this.data[o]=e},i.prototype.deleteRecord=function(t,e,o,i,a){var n=this.getIndexOfKey(t);if(-1===n)throw new Error(\"Record with they key \"+t+\" is not found in the data set\");this.data.splice(n,1),0==this.data.length&&this.data.push(e),this.getRecords(o,i,a)},i.prototype.getIndexOfKey=function(t){var e=this.tableObj.options.keyColumn;return this.data.map(function(t){return t[e]+\"\"}).indexOf(t+\"\")},i.prototype.getAllData=function(){return this.data},t.oc.table.datasource.client=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.datasource)throw new Error(\"The $.oc.table.datasource namespace is not defined. Make sure that the table.datasource.base.js script is loaded.\");var e=t.oc.table.datasource.base,o=e.prototype,i=function(t){e.call(this,t);var o=t.getElement().getAttribute(\"data-data\");if(null==o)throw new Error(\"The required data-data attribute is not found on the table control element.\");this.data=JSON.parse(o)};(i.prototype=Object.create(o)).constructor=i,i.prototype.dispose=function(){o.dispose.call(this),this.data=null},i.prototype.getRecords=function(t,e,o){var i=this.tableObj.getAlias()+\"::onServerGetRecords\";this.tableObj.$el.request(i,{data:{offset:t,count:e}}).done(function(t){o(t.records,t.count)})},i.prototype.searchRecords=function(t,e,o,i){var a=this.tableObj.getAlias()+\"::onServerSearchRecords\";this.tableObj.$el.request(a,{data:{query:t,offset:e,count:o}}).done(function(t){i(t.records,t.count)})},i.prototype.createRecord=function(t,e,o,i,a,n){var r=this.tableObj.getAlias()+\"::onServerCreateRecord\";this.tableObj.$el.request(r,{data:{recordData:t,placement:e,relativeToKey:o,offset:i,count:a}}).done(function(t){n(t.records,t.count)})},i.prototype.updateRecord=function(t,e){var o=this.tableObj.getAlias()+\"::onServerUpdateRecord\";this.tableObj.$el.request(o,{data:{key:t,recordData:e}})},i.prototype.deleteRecord=function(t,e,o,i,a){var n=this.tableObj.getAlias()+\"::onServerDeleteRecord\";this.tableObj.$el.request(n,{data:{key:t,offset:o,count:i}}).done(function(t){a(t.records,t.count)})},t.oc.table.datasource.server=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");void 0===t.oc.table.processor&&(t.oc.table.processor={});var e=function(t,e,o){this.tableObj=t,this.columnName=e,this.columnConfiguration=o,this.activeCell=null,this.validators=[],this.registerHandlers(),this.initValidators()};e.prototype.dispose=function(){this.unregisterHandlers(),this.tableObj=null,this.activeCell=null},e.prototype.renderCell=function(t,e){},e.prototype.registerHandlers=function(){},e.prototype.unregisterHandlers=function(){},e.prototype.onFocus=function(t,e){},e.prototype.onUnfocus=function(){},e.prototype.onKeyDown=function(t){},e.prototype.onClick=function(t){},e.prototype.onRowValueChanged=function(t,e){},e.prototype.keyNavigationAllowed=function(t,e){return!0},e.prototype.isCellFocusable=function(){return!0},e.prototype.getCellContentContainer=function(t){return t.querySelector(\".content-container\")},e.prototype.createViewContainer=function(t,e){var o=document.createElement(\"div\");return o.setAttribute(\"data-view-container\",\"data-view-container\"),o.textContent=void 0===e?\"\":e,t.appendChild(o),o},e.prototype.getViewContainer=function(t){return t.querySelector(\"[data-view-container]\")},e.prototype.showViewContainer=function(t){return this.getViewContainer(t).setAttribute(\"class\",\"\")},e.prototype.hideViewContainer=function(t){return this.getViewContainer(t).setAttribute(\"class\",\"oc-hide\")},e.prototype.setViewContainerValue=function(t,e){return this.getViewContainer(t).textContent=e},e.prototype.elementBelongsToProcessor=function(t){return!1},e.prototype.initValidators=function(){if(void 0!==this.columnConfiguration.validation)for(var e in this.columnConfiguration.validation){if(void 0===t.oc.table.validator||null==t.oc.table.validator[e])throw new Error('The table cell validator \"'+e+'\" for the column \"'+this.columnName+'\" is not found in the $.oc.table.validator namespace.');var o=new t.oc.table.validator[e](this.columnConfiguration.validation[e]);this.validators.push(o)}},e.prototype.validate=function(t,e){for(var o=0,i=this.validators.length;o<i;o++){var a=this.validators[o].validate(t,e);if(void 0!==a)return a}},t.oc.table.processor.base=e}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.processor)throw new Error(\"The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.\");var e=t.oc.table.processor.base,o=e.prototype,i=function(t,o,i){this.focusTimeoutHandler=this.onFocusTimeout.bind(this),e.call(this,t,o,i)};(i.prototype=Object.create(o)).constructor=i,i.prototype.dispose=function(){o.dispose.call(this),this.focusTimeoutHandler=null},i.prototype.renderCell=function(t,e){this.createViewContainer(e,t)},i.prototype.onFocus=function(t,e){this.activeCell!==t&&(this.activeCell=t,this.buildEditor(t,this.getCellContentContainer(t)))},i.prototype.onUnfocus=function(){if(this.activeCell){var t=this.activeCell.querySelector(\".string-input\");t&&(this.tableObj.setCellValue(this.activeCell,t.value),this.setViewContainerValue(this.activeCell,t.value),t.parentNode.removeChild(t)),this.showViewContainer(this.activeCell),this.activeCell=null}},i.prototype.buildEditor=function(t,e){this.hideViewContainer(this.activeCell);var o=document.createElement(\"input\");o.setAttribute(\"type\",\"text\"),o.setAttribute(\"class\",\"string-input\"),o.value=this.tableObj.getCellValue(t),this.columnConfiguration.readOnly&&o.setAttribute(\"readonly\",!0),e.appendChild(o),this.setCaretPosition(o,0),window.setTimeout(this.focusTimeoutHandler,0)},i.prototype.keyNavigationAllowed=function(t,e){if(\"left\"!=e&&\"right\"!=e)return!0;if(!this.activeCell)return!0;var o=this.activeCell.querySelector(\".string-input\");if(!o)return!0;var i=this.getCaretPosition(o);return\"left\"==e?0==i:\"right\"!=e||i==o.value.length},i.prototype.onRowValueChanged=function(t,e){if(t==this.columnName){var o=this.tableObj.getCellValue(e);this.setViewContainerValue(e,o)}},i.prototype.onFocusTimeout=function(){if(this.activeCell){var t=this.activeCell.querySelector(\".string-input\");t&&(t.focus(),this.setCaretPosition(t,0))}},i.prototype.getCaretPosition=function(t){if(document.selection){var e=document.selection.createRange();return e.moveStart(\"character\",-t.value.length),e.text.length}return void 0!==t.selectionStart?t.selectionStart:0},i.prototype.setCaretPosition=function(t,e){if(document.selection){var o=t.createTextRange();setTimeout(function(){o.collapse(!0),o.moveStart(\"character\",e),o.moveEnd(\"character\",0),o.select()},0)}return void 0!==t.selectionStart&&setTimeout(function(){t.selectionStart=e,t.selectionEnd=e},0),0},t.oc.table.processor.string=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.processor)throw new Error(\"The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.\");var e=t.oc.table.processor.base,o=e.prototype,i=function(t,o,i){e.call(this,t,o,i)};(i.prototype=Object.create(o)).constructor=i,i.prototype.dispose=function(){o.dispose.call(this)},i.prototype.isCellFocusable=function(){return!1},i.prototype.renderCell=function(t,e){var o=document.createElement(\"input\");o.setAttribute(\"data-checkbox-element\",\"true\"),o.setAttribute(\"tabindex\",\"0\"),o.setAttribute(\"type\",\"checkbox\"),o.setAttribute(\"class\",\"form-check-input\"),t&&0!=t&&\"false\"!=t&&(o.checked=!0),e.appendChild(o)},i.prototype.onFocus=function(t,e){t.querySelector(\"input[data-checkbox-element]\").focus()},i.prototype.onClick=function(e){var o=e.target;if(o.getAttribute(\"data-checkbox-element\")){if(this.getCheckboxContainerNode(o).getAttribute(\"data-column\")!==this.columnName)return;this.changeState(o),t(o).trigger(\"change\")}},i.prototype.changeState=function(t){var e=this.getCheckboxContainerNode(t);this.tableObj.setCellValue(e,t.checked?1:0)},i.prototype.getCheckboxContainerNode=function(t){return t.parentNode.parentNode},i.prototype.onRowValueChanged=function(t,e){if(t===this.columnName){var o=e.querySelector(\"input[data-checkbox-element]\"),i=this.tableObj.getCellValue(e);o.checked=!(!i||0==i||\"false\"==i)}},t.oc.table.processor.checkbox=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.processor)throw new Error(\"The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.\");var e=t.oc.table.processor.base,o=e.prototype,i=function(t,o,i){this.itemListElement=null,this.cachedOptionPromises={},this.searching=!1,this.searchQuery=null,this.searchInterval=null,this.itemClickHandler=this.onItemClick.bind(this),this.itemKeyDownHandler=this.onItemKeyDown.bind(this),this.itemMouseMoveHandler=this.onItemMouseMove.bind(this),e.call(this,t,o,i)};(i.prototype=Object.create(o)).constructor=i,i.prototype.dispose=function(){this.unregisterListHandlers(),this.itemClickHandler=null,this.itemKeyDownHandler=null,this.itemMouseMoveHandler=null,this.itemListElement=null,this.cachedOptionPromises=null,o.dispose.call(this)},i.prototype.unregisterListHandlers=function(){this.itemListElement&&(this.itemListElement.removeEventListener(\"click\",this.itemClickHandler),this.itemListElement.removeEventListener(\"keydown\",this.itemKeyDownHandler),this.itemListElement.removeEventListener(\"mousemove\",this.itemMouseMoveHandler))},i.prototype.renderCell=function(t,e){var o=this.createViewContainer(e,\"...\");this.fetchOptions(e.parentNode,function(i){void 0!==i[t]&&(o.textContent=i[t]),e.setAttribute(\"tabindex\",0)})},i.prototype.onFocus=function(t,e){if(this.activeCell!==t){this.activeCell=t;var o=this.getCellContentContainer(t);this.buildEditor(t,o,e),e||o.focus()}else this.showDropdown()},i.prototype.onUnfocus=function(){this.activeCell&&(this.unregisterListHandlers(),this.hideDropdown(),this.itemListElement=null,this.activeCell=null)},i.prototype.buildEditor=function(t,e,o){var i=this.tableObj.getCellValue(t),a=this.getAbsolutePosition(e);self=this,this.itemListElement=document.createElement(\"div\"),this.itemListElement.addEventListener(\"click\",this.itemClickHandler),this.itemListElement.addEventListener(\"keydown\",this.itemKeyDownHandler),this.itemListElement.addEventListener(\"mousemove\",this.itemMouseMoveHandler),this.itemListElement.setAttribute(\"class\",\"table-control-dropdown-list\"),this.itemListElement.style.width=e.offsetWidth+2+\"px\",this.itemListElement.style.left=a.left+\"px\",this.itemListElement.style.top=a.top-2+e.offsetHeight+\"px\",this.fetchOptions(t,function(t){var e=document.createElement(\"ul\");for(var a in t){var n=document.createElement(\"li\");n.setAttribute(\"data-value\",a),n.textContent=t[a],n.setAttribute(\"tabindex\",0),a==i&&n.setAttribute(\"class\",\"selected\"),e.appendChild(n)}self.itemListElement.appendChild(e),o&&self.showDropdown(),self=null})},i.prototype.hideDropdown=function(){if(this.itemListElement&&this.activeCell&&this.itemListElement.parentNode){var t=this.getCellContentContainer(this.activeCell);t.setAttribute(\"data-dropdown-open\",\"false\"),this.itemListElement.parentNode.removeChild(this.itemListElement),t.focus()}},i.prototype.showDropdown=function(){if(this.itemListElement&&this.itemListElement.parentNode!==document.body){this.getCellContentContainer(this.activeCell).setAttribute(\"data-dropdown-open\",\"true\"),document.body.appendChild(this.itemListElement);var t=this.itemListElement.querySelector(\"ul li.selected\");t||(t=this.itemListElement.querySelector(\"ul li:first-child\"))&&t.setAttribute(\"class\",\"selected\"),t&&window.setTimeout(function(){t.focus()},0)}},i.prototype.fetchOptions=function(t,e){if(this.columnConfiguration.options)e(this.columnConfiguration.options);else{var o=t.parentNode,i=this.createOptionsCachingKey(o),a=this.getViewContainer(t);if(a.setAttribute(\"class\",\"loading\"),!this.cachedOptionPromises[i]){var n={column:this.columnName,rowData:this.tableObj.getRowData(o)},r=this.tableObj.getAlias()+\"::onGetDropdownOptions\";this.cachedOptionPromises[i]=this.tableObj.$el.request(r,{data:n})}this.cachedOptionPromises[i].done(function(t){e(t.options)}).always(function(){a.setAttribute(\"class\",\"\")})}},i.prototype.createOptionsCachingKey=function(t){var e=\"non-dependent\",o=this.columnConfiguration.dependsOn;if(o)if(\"object\"==typeof o)for(var i=0,a=o.length;i<a;i++)e+=o[i]+this.tableObj.getRowCellValueByColumnName(t,o[i]);else e=o+this.tableObj.getRowCellValueByColumnName(t,o);return e},i.prototype.getAbsolutePosition=function(t){var e=document.body.scrollTop,o=0;do{e+=t.offsetTop||0,e-=t.scrollTop||0,o+=t.offsetLeft||0,t=t.offsetParent}while(t);return{top:e,left:o}},i.prototype.updateCellFromFocusedItem=function(t){t||(t=this.findFocusedItem()),this.setSelectedItem(t)},i.prototype.findSelectedItem=function(){return this.itemListElement?this.itemListElement.querySelector(\"ul li.selected\"):null},i.prototype.setSelectedItem=function(t){if(!this.itemListElement)return null;\"LI\"==t.tagName&&this.itemListElement.contains(t)&&(this.itemListElement.querySelectorAll(\"ul li\").forEach(function(t){t.removeAttribute(\"class\")}),t.setAttribute(\"class\",\"selected\")),this.tableObj.setCellValue(this.activeCell,t.getAttribute(\"data-value\")),this.setViewContainerValue(this.activeCell,t.textContent)},i.prototype.findFocusedItem=function(){return this.itemListElement?this.itemListElement.querySelector(\"ul li:focus\"):null},i.prototype.onItemClick=function(t){var e=this.tableObj.getEventTarget(t);\"LI\"==e.tagName&&(e.focus(),this.updateCellFromFocusedItem(e),this.hideDropdown())},i.prototype.onItemKeyDown=function(t){if(this.itemListElement){if(\"ArrowDown\"===t.key||\"ArrowUp\"===t.key){var e=this.findFocusedItem(),o=e.nextElementSibling;return\"ArrowUp\"===t.key&&(o=e.previousElementSibling),void(o&&o.focus())}return\"Enter\"===t.key||\"(Space character)\"===t.key||\"Spacebar\"===t.key||\" \"===t.key?(this.updateCellFromFocusedItem(),void this.hideDropdown()):\"Tab\"===t.key?(this.updateCellFromFocusedItem(),this.tableObj.navigation.navigateNext(t),void this.tableObj.stopEvent(t)):void(\"Escape\"!==t.key?this.searchByTextInput(t,!0):this.hideDropdown())}},i.prototype.onItemMouseMove=function(t){if(this.itemListElement){var e=this.tableObj.getEventTarget(t);\"LI\"==e.tagName&&e.focus()}},i.prototype.onKeyDown=function(t){if(this.itemListElement)if(\"(Space character)\"!==t.key&&\"Spacebar\"!==t.key&&\" \"!==t.key||this.searching){if(\"ArrowDown\"===t.key||\"ArrowUp\"===t.key){var e,o=this.findSelectedItem();if(o)e=o.nextElementSibling,\"ArrowUp\"===t.key&&(e=o.previousElementSibling);else{if(\"ArrowUp\"===t.key)return!1;e=this.itemListElement.querySelector(\"ul li:first-child\")}return e&&this.setSelectedItem(e),!1}this.searchByTextInput(t)}else this.showDropdown()},i.prototype.onRowValueChanged=function(t,e){if(this.columnConfiguration.dependsOn){var o=!1,i=this.columnConfiguration.dependsOn;if(\"object\"==typeof i){for(var a=0,n=i.length;a<n;a++)if(i[a]==t){o=!0;break}}else o=i==t;if(o){var r=this.tableObj.getCellValue(e),s=this.getViewContainer(e);this.fetchOptions(e,function(t){var e=void 0!==t[r]?t[r]:\"...\";s.textContent=e,s=null})}}},i.prototype.elementBelongsToProcessor=function(t){return!!this.itemListElement&&this.tableObj.parentContainsElement(this.itemListElement,t)},i.prototype.searchByTextInput=function(t,e){void 0===e&&(e=!1);var o=t.key;if(1===o.length||\"Space\"===o){this.searching||(this.searching=!0,this.searchQuery=\"\"),this.searchQuery+=\"Space\"===o?\" \":o;var i=null,a=this.searchQuery;this.itemListElement.querySelectorAll(\"ul li\").forEach(function(t){null===i&&t.dataset.value&&0===t.dataset.value.toLowerCase().indexOf(a.toLowerCase())&&(i=t)}),i?(!0===e?i.focus():this.setSelectedItem(i),this.searchInterval&&clearTimeout(this.searchInterval),this.searchInterval=setTimeout(this.cancelTextSearch.bind(this),1e3)):this.cancelTextSearch()}},i.prototype.cancelTextSearch=function(){this.searching=!1,this.searchQuery=null,this.searchInterval=null},t.oc.table.processor.dropdown=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.processor)throw new Error(\"The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.\");var e=t.oc.table.processor.string,o=e.prototype,i=function(t,o,i){this.cachedOptionPromises={},e.call(this,t,o,i)};(i.prototype=Object.create(o)).constructor=i,i.prototype.dispose=function(){this.cachedOptionPromises=null,o.dispose.call(this)},i.prototype.onUnfocus=function(){this.activeCell&&(this.removeAutocomplete(),o.onUnfocus.call(this))},i.prototype.renderCell=function(t,e){o.renderCell.call(this,t,e)},i.prototype.buildEditor=function(t,e,i){o.buildEditor.call(this,t,e,i);var a=this;this.fetchOptions(t,function(t){a.buildAutoComplete(t),a=null})},i.prototype.fetchOptions=function(e,o){if(this.columnConfiguration.options)void 0!==o&&o(this.columnConfiguration.options);else{if(!1===this.triggerGetOptions(o))return;var i=e.parentNode,a=this.createOptionsCachingKey(i),n=this.getViewContainer(e);if(t.oc.foundation.element.addClass(n,\"loading\"),!this.cachedOptionPromises[a]){var r={column:this.columnName,rowData:this.tableObj.getRowData(i)},s=this.tableObj.getAlias()+\"::onGetAutocompleteOptions\";this.cachedOptionPromises[a]=this.tableObj.$el.request(s,{data:r})}this.cachedOptionPromises[a].done(function(t){void 0!==o&&o(t.options)}).always(function(){t.oc.foundation.element.removeClass(n,\"loading\")})}},i.prototype.createOptionsCachingKey=function(t){var e=\"non-dependent\",o=this.columnConfiguration.dependsOn;if(o)if(\"object\"==typeof o)for(var i=0,a=o.length;i<a;i++)e+=o[i]+this.tableObj.getRowCellValueByColumnName(t,o[i]);else e=o+this.tableObj.getRowCellValueByColumnName(t,o);return e},i.prototype.triggerGetOptions=function(e){var o=this.tableObj.getElement();if(o){var i=t.Event(\"autocompleteitems.oc.table\");return t(o).trigger(i,[{values:{},callback:e,column:this.columnName,columnConfiguration:this.columnConfiguration}]),!i.isDefaultPrevented()}},i.prototype.getInput=function(){return this.activeCell?this.activeCell.querySelector(\".string-input\"):null},i.prototype.buildAutoComplete=function(e){if(this.activeCell){var o=this.getInput();o&&(void 0===e&&(e=[]),t(o).autocomplete({source:this.prepareItems(e),matchWidth:!0,menu:'<ul class=\"autocomplete dropdown-menu table-widget-autocomplete\"></ul>',bodyContainer:!0}))}},i.prototype.prepareItems=function(t){var e={};if(Array.isArray(t))for(var o=0,i=t.length;o<i;o++)e[t[o]]=t[o];else e=t;return e},i.prototype.removeAutocomplete=function(){var e=this.getInput();t(e).autocomplete(\"destroy\")},t.oc.table.processor.autocomplete=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");void 0===t.oc.table.validator&&(t.oc.table.validator={});var e=function(t){this.options=t};e.prototype.validate=function(t,e){if(void 0===this.options.requiredWith||this.rowHasValue(this.options.requiredWith,e))return this.validateValue(t,e)},e.prototype.validateValue=function(t,e){},e.prototype.trim=function(t){return String.prototype.trim?t.trim():t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\")},e.prototype.getMessage=function(t){return void 0!==this.options.message?this.options.message:t},e.prototype.rowHasValue=function(t,e){return void 0!==e[t]&&(\"boolean\"==typeof e[t]?e[t]:this.trim(String(e[t])).length>0)},t.oc.table.validator.base=e}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.validator)throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");var e=t.oc.table.validator.base,o=e.prototype,i=function(t){e.call(this,t)};(i.prototype=Object.create(o)).constructor=i,i.prototype.validateValue=function(t,e){if(0===(t=this.trim(t)).length)return this.getMessage(\"The value should not be empty.\")},t.oc.table.validator.required=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.validator)throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");var e=t.oc.table.validator.base,o=e.prototype,i=function(t){e.call(this,t)};(i.prototype=Object.create(o)).constructor=i,i.prototype.doCommonChecks=function(t){if(void 0!==this.options.min||void 0!==this.options.max){if(void 0!==this.options.min){if(void 0===this.options.min.value)throw new Error(\"The min.value parameter is not defined in the table validator configuration\");if(t<this.options.min.value)return void 0!==this.options.min.message?this.options.min.message:\"The value should not be less than \"+this.options.min.value}if(void 0!==this.options.max){if(void 0===this.options.max.value)throw new Error(\"The max.value parameter is not defined in the table validator configuration\");if(t>this.options.max.value)return void 0!==this.options.max.message?this.options.max.message:\"The value should not be more than \"+this.options.max.value}}},t.oc.table.validator.baseNumber=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.validator)throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");if(void 0===t.oc.table.validator.baseNumber)throw new Error(\"The $.oc.table.validator.baseNumber namespace is not defined. Make sure that the table.validator.baseNumber.js script is loaded.\");var e=t.oc.table.validator.baseNumber,o=e.prototype,i=function(t){e.call(this,t)};(i.prototype=Object.create(o)).constructor=i,i.prototype.validateValue=function(t,e){if(0!=(t=this.trim(t)).length){if(!(this.options.allowNegative?/^\\-?[0-9]*$/.test(t):/^[0-9]*$/.test(t))){var o=this.options.allowNegative?\"The value should be an integer.\":\"The value should be a positive integer\";return this.getMessage(o)}return this.doCommonChecks(parseInt(t))}},t.oc.table.validator.integer=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.validator)throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");if(void 0===t.oc.table.validator.baseNumber)throw new Error(\"The $.oc.table.validator.baseNumber namespace is not defined. Make sure that the table.validator.baseNumber.js script is loaded.\");var e=t.oc.table.validator.baseNumber,o=e.prototype,i=function(t){e.call(this,t)};(i.prototype=Object.create(o)).constructor=i,i.prototype.validateValue=function(t,e){if(0!=(t=this.trim(t)).length){if(!(this.options.allowNegative?/^[-]?([0-9]+\\.[0-9]+|[0-9]+)$/.test(t):/^([0-9]+\\.[0-9]+|[0-9]+)$/.test(t))){var o=this.options.allowNegative?\"The value should be a floating point number.\":\"The value should be a positive floating point number\";return this.getMessage(o)}return this.doCommonChecks(parseFloat(t))}},t.oc.table.validator.float=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.validator)throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");var e=t.oc.table.validator.base,o=e.prototype,i=function(t){e.call(this,t)};(i.prototype=Object.create(o)).constructor=i,i.prototype.validateValue=function(t,e){if(0!=(t=this.trim(t)).length&&(void 0!==this.options.min||void 0!==this.options.max)){if(void 0!==this.options.min){if(void 0===this.options.min.value)throw new Error(\"The min.value parameter is not defined in the Length table validator configuration\");if(t.length<this.options.min.value)return void 0!==this.options.min.message?this.options.min.message:\"The string should not be shorter than \"+this.options.min.value}if(void 0!==this.options.max){if(void 0===this.options.max.value)throw new Error(\"The max.value parameter is not defined in the Length table validator configuration\");if(t.length>this.options.max.value)return void 0!==this.options.max.message?this.options.max.message:\"The string should not be longer than \"+this.options.max.value}}},t.oc.table.validator.length=i}(window.jQuery),function(t){\"use strict\";if(void 0===t.oc.table)throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");if(void 0===t.oc.table.validator)throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");var e=t.oc.table.validator.base,o=e.prototype,i=function(t){e.call(this,t)};(i.prototype=Object.create(o)).constructor=i,i.prototype.validateValue=function(t,e){if(0!=(t=this.trim(t)).length){if(void 0===this.options.pattern)throw new Error(\"The pattern parameter is not defined in the Regex table validator configuration\");return new RegExp(this.options.pattern,this.options.modifiers).test(t)?void 0:this.getMessage(\"Invalid value format.\")}},t.oc.table.validator.regex=i}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.datasource.base.js",
    "content": "/*\n * Base class for the table data sources.\n */\n+function ($) { \"use strict\";\n\n    // DATASOURCE NAMESPACES\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.datasource === undefined)\n        $.oc.table.datasource = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = function(tableObj) {\n        //\n        // State properties\n        //\n\n        this.tableObj = tableObj\n    }\n\n    Base.prototype.dispose = function() {\n        this.tableObj = null\n    }\n\n    /*\n     * Fetches records from the underlying data source and\n     * passes them to the onSuccess callback function.\n     * The onSuccess callback parameters: records, totalCount.\n     * Each record contains the key field which uniquely identifies \n     * the record. The name of the key field is defined with the table \n     * widget options.\n     */\n    Base.prototype.getRecords = function(offset, count, onSuccess) {\n        onSuccess([])\n    }\n\n    /*\n     * Identical to getRecords except using a search query.\n     */\n    Base.prototype.searchRecords = function(query, offset, count, onSuccess) {\n        onSuccess([])\n    }\n\n    /*\n     * Creates a record with the passed data and returns the updated page records\n     * to the onSuccess callback function.\n     * \n     * - recordData - the record fields\n     * - placement - \"bottom\" (the end of the data set), \"above\", \"below\"\n     * - relativeToKey - a row key, required if the placement is not \"bottom\"\n     * - offset - the current page's first record index (zero-based)\n     * - count - number of records to return\n     * - onSuccess - a callback function to execute when the updated data gets available.\n     *\n     * The onSuccess callback parameters: records, totalCount.\n     */\n    Base.prototype.createRecord = function(recordData, placement, relativeToKey, offset, count, onSuccess) {\n        onSuccess([], 0)\n    }\n\n    /*\n     * Updates a record with the specified key with the passed data\n     *\n     * - key - the record key in the dataset (primary key, etc)\n     * - recordData - the record fields.\n     */\n    Base.prototype.updateRecord = function(key, recordData) {\n    }\n\n    /*\n     * Deletes a record with the specified key.\n     *\n     * - key - the record key in the dataset (primary key, etc).\n     * - newRecordData - replacement record to add to the dataset if the deletion\n     *   empties it.\n     * - offset - the current page's first record key (zero-based)\n     * - count - number of records to return\n     * - onSuccess - a callback function to execute when the updated data gets available.\n     *\n     * The onSuccess callback parameters: records, totalCount.\n     */\n    Base.prototype.deleteRecord = function(key, newRecordData, offset, count, onSuccess) {\n        onSuccess([], 0)\n    }\n\n    $.oc.table.datasource.base = Base;\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.datasource.client.js",
    "content": "/*\n * Client memory data source for the table control.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.datasource === undefined)\n        throw new Error(\"The $.oc.table.datasource namespace is not defined. Make sure that the table.datasource.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.datasource.base,\n        BaseProto = Base.prototype\n\n    var Client = function(tableObj) {\n        Base.call(this, tableObj)\n\n        var dataString = tableObj.getElement().getAttribute('data-data')\n\n        if (dataString === null || dataString === undefined)\n            throw new Error('The required data-data attribute is not found on the table control element.')\n\n        this.data = JSON.parse(dataString)\n    };\n\n    Client.prototype = Object.create(BaseProto)\n    Client.prototype.constructor = Client\n\n    Client.prototype.dispose = function() {\n        BaseProto.dispose.call(this)\n        this.data = null\n    }\n\n    /*\n     * Fetches records from the underlying data source and\n     * passes them to the onSuccess callback function.\n     * The onSuccess callback parameters: records, totalCount.\n     * Each record contains the key field which uniquely identifies \n     * the record. The name of the key field is defined with the table \n     * widget options.\n     */\n    Client.prototype.getRecords = function(offset, count, onSuccess) {\n        if (!count) {\n            // Return all records\n            onSuccess(this.data, this.data.length)\n        }\n        else {\n            // Return a subset of records\n            onSuccess(this.data.slice(offset, offset+count), this.data.length)\n        }\n    }\n\n    /*\n     * Creates a record with the passed data and returns the updated page records\n     * to the onSuccess callback function.\n     * \n     * - recordData - the record fields\n     * - placement - \"bottom\" (the end of the data set), \"above\", \"below\"\n     * - relativeToKey - a row key, required if the placement is not \"bottom\"\n     * - offset - the current page's first record index (zero-based)\n     * - count - number of records to return\n     * - onSuccess - a callback function to execute when the updated data gets available.\n     *\n     * The onSuccess callback parameters: records, totalCount.\n     */\n    Client.prototype.createRecord = function(recordData, placement, relativeToKey, offset, count, onSuccess) {\n        if (placement === 'bottom') {\n            // Add record to the bottom of the dataset\n            this.data.push(recordData)\n        }\n        else if (placement == 'above' || placement == 'below') {\n            // Add record above or below the passed record key\n            var recordIndex = this.getIndexOfKey(relativeToKey)\n            if (placement == 'below')\n                recordIndex ++\n\n            this.data.splice(recordIndex, 0, recordData)\n        }\n\n        this.getRecords(offset, count, onSuccess)\n    }\n\n    /*\n     * Updates a record with the specified key with the passed data\n     *\n     * - key - the record key in the dataset (primary key, etc)\n     * - recordData - the record fields.\n     */\n    Client.prototype.updateRecord = function(key, recordData) {\n        var recordIndex = this.getIndexOfKey(key)\n\n        if (recordIndex !== -1) {\n            recordData[this.tableObj.options.keyColumn] = key\n            this.data[recordIndex] = recordData\n        }\n        else {\n            throw new Error('Record with they key '+key+ ' is not found in the data set')\n        }\n    }\n\n    /*\n     * Deletes a record with the specified key.\n     *\n     * - key - the record key in the dataset (primary key, etc).\n     * - newRecordData - replacement record to add to the dataset if the deletion\n     *   empties it.\n     * - offset - the current page's first record key (zero-based)\n     * - count - number of records to return\n     * - onSuccess - a callback function to execute when the updated data gets available.\n     *\n     * The onSuccess callback parameters: records, totalCount.\n     */\n    Client.prototype.deleteRecord = function(key, newRecordData, offset, count, onSuccess) {\n        var recordIndex = this.getIndexOfKey(key)\n\n        if (recordIndex !== -1) {\n            this.data.splice(recordIndex, 1)\n\n            if (this.data.length == 0)\n                this.data.push(newRecordData)\n\n            this.getRecords(offset, count, onSuccess)\n        }\n        else {\n            throw new Error('Record with they key '+key+ ' is not found in the data set')\n        }\n    }\n\n    Client.prototype.getIndexOfKey = function(key) {\n        var keyColumn = this.tableObj.options.keyColumn\n\n        return this.data.map(function(record) {\n            return record[keyColumn] + \"\"\n        }).indexOf(key + \"\")\n    }\n\n    Client.prototype.getAllData = function() {\n        return this.data\n    }\n\n    $.oc.table.datasource.client = Client\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.datasource.server.js",
    "content": "/*\n * Server memory data source for the table control.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.datasource === undefined)\n        throw new Error(\"The $.oc.table.datasource namespace is not defined. Make sure that the table.datasource.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.datasource.base,\n        BaseProto = Base.prototype\n\n    var Server = function(tableObj) {\n        Base.call(this, tableObj)\n\n        var dataString = tableObj.getElement().getAttribute('data-data')\n\n        if (dataString === null || dataString === undefined)\n            throw new Error('The required data-data attribute is not found on the table control element.')\n\n        this.data = JSON.parse(dataString)\n    };\n\n    Server.prototype = Object.create(BaseProto)\n    Server.prototype.constructor = Server\n\n    Server.prototype.dispose = function() {\n        BaseProto.dispose.call(this)\n        this.data = null\n    }\n\n    /*\n     * Fetches records from the underlying data source and\n     * passes them to the onSuccess callback function.\n     * The onSuccess callback parameters: records, totalCount.\n     * Each record contains the key field which uniquely identifies\n     * the record. The name of the key field is defined with the table\n     * widget options.\n     */\n    Server.prototype.getRecords = function(offset, count, onSuccess) {\n        var handlerName = this.tableObj.getAlias()+'::onServerGetRecords'\n        this.tableObj.$el.request(handlerName, {\n            data: {\n                offset: offset,\n                count: count\n            }\n        }).done(function(data) {\n            onSuccess(data.records, data.count)\n        })\n    }\n\n    /*\n     * Identical to getRecords except using a search query.\n     */\n    Server.prototype.searchRecords = function(query, offset, count, onSuccess) {\n        var handlerName = this.tableObj.getAlias()+'::onServerSearchRecords'\n        this.tableObj.$el.request(handlerName, {\n            data: {\n                query: query,\n                offset: offset,\n                count: count\n            }\n        }).done(function(data) {\n            onSuccess(data.records, data.count)\n        })\n    }\n\n    /*\n     * Creates a record with the passed data and returns the updated page records\n     * to the onSuccess callback function.\n     *\n     * - recordData - the record fields\n     * - placement - \"bottom\" (the end of the data set), \"above\", \"below\"\n     * - relativeToKey - a row key, required if the placement is not \"bottom\"\n     * - offset - the current page's first record index (zero-based)\n     * - count - number of records to return\n     * - onSuccess - a callback function to execute when the updated data gets available.\n     *\n     * The onSuccess callback parameters: records, totalCount.\n     */\n    Server.prototype.createRecord = function(recordData, placement, relativeToKey, offset, count, onSuccess) {\n        var handlerName = this.tableObj.getAlias()+'::onServerCreateRecord'\n        this.tableObj.$el.request(handlerName, {\n            data: {\n                recordData: recordData,\n                placement: placement,\n                relativeToKey: relativeToKey,\n                offset: offset,\n                count: count\n            }\n        }).done(function(data) {\n            onSuccess(data.records, data.count);\n        });\n    }\n\n    /*\n     * Updates a record with the specified key with the passed data\n     *\n     * - key - the record key in the dataset (primary key, etc)\n     * - recordData - the record fields.\n     */\n    Server.prototype.updateRecord = function(key, recordData) {\n        var handlerName = this.tableObj.getAlias()+'::onServerUpdateRecord'\n        this.tableObj.$el.request(handlerName, {\n            data: {\n                key: key,\n                recordData: recordData\n            }\n        })\n    }\n\n    /*\n     * Deletes a record with the specified key.\n     *\n     * - key - the record key in the dataset (primary key, etc).\n     * - newRecordData - replacement record to add to the dataset if the deletion\n     *   empties it.\n     * - offset - the current page's first record key (zero-based)\n     * - count - number of records to return\n     * - onSuccess - a callback function to execute when the updated data gets available.\n     *\n     * The onSuccess callback parameters: records, totalCount.\n     */\n    Server.prototype.deleteRecord = function(key, newRecordData, offset, count, onSuccess) {\n        var handlerName = this.tableObj.getAlias()+'::onServerDeleteRecord'\n        this.tableObj.$el.request(handlerName, {\n            data: {\n                key: key,\n                offset: offset,\n                count: count\n            }\n        }).done(function(data) {\n            onSuccess(data.records, data.count)\n        })\n    }\n\n    $.oc.table.datasource.server = Server\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.helper.navigation.js",
    "content": "/*\n * Navigation helper for the table widget.\n * Implements the keyboard navigation within the current page\n * and pagination.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.helper === undefined)\n        $.oc.table.helper = {}\n\n    // NAVIGATION CLASS DEFINITION\n    // ============================\n\n    var Navigation = function(tableObj) {\n        // Reference to the table object\n        this.tableObj = tableObj\n\n        // The current page index\n        this.pageIndex = 0\n\n        // Event handlers\n\n        // Number of pages in the pagination\n        this.pageCount = 0\n\n        this.init()\n    };\n\n    Navigation.prototype.init = function() {\n    }\n\n    Navigation.prototype.dispose = function() {\n        // Remove the reference to the table object\n        this.tableObj = null\n    }\n\n    // PAGINATION\n    // ============================\n\n    Navigation.prototype.paginationEnabled = function() {\n        return this.tableObj.options.recordsPerPage != null &&\n            this.tableObj.options.recordsPerPage != false\n    }\n\n    Navigation.prototype.getPageFirstRowOffset = function() {\n        return this.pageIndex * this.tableObj.options.recordsPerPage\n    }\n\n    Navigation.prototype.buildPagination = function(recordCount) {\n        if (!this.paginationEnabled())\n            return\n\n        var paginationContainer = this.tableObj.getElement().querySelector('.pagination'),\n            newPaginationContainer = false,\n            curRecordCount = 0\n\n        this.pageCount = this.calculatePageCount(recordCount, this.tableObj.options.recordsPerPage)\n\n        if (!paginationContainer) {\n            paginationContainer = document.createElement('div')\n            paginationContainer.setAttribute('class', 'pagination')\n            newPaginationContainer = true\n        }\n        else {\n            curRecordCount = this.getRecordCount(paginationContainer)\n        }\n\n        // Generate the new page list only if the record count has changed\n        if (newPaginationContainer || curRecordCount != recordCount) {\n            paginationContainer.setAttribute('data-record-count', recordCount)\n\n            var pageList = this.buildPaginationLinkList(\n                recordCount,\n                this.tableObj.options.recordsPerPage,\n                this.pageIndex\n            )\n\n            if (!newPaginationContainer) {\n                paginationContainer.replaceChild(pageList, paginationContainer.children[0])\n            }\n            else {\n                paginationContainer.appendChild(pageList)\n                this.tableObj.getElement().appendChild(paginationContainer)\n            }\n        }\n        else {\n            // Do not re-generate the pages if the record count hasn't changed,\n            // but mark the new active item in the pagination list\n            this.markActiveLinkItem(paginationContainer, this.pageIndex)\n        }\n    }\n\n    Navigation.prototype.calculatePageCount = function(recordCount, recordsPerPage) {\n        var pageCount = Math.ceil(recordCount/recordsPerPage)\n\n        if (!pageCount)\n            pageCount = 1\n\n        return pageCount\n    }\n\n    Navigation.prototype.getRecordCount = function(paginationContainer) {\n        var container = paginationContainer ? paginationContainer : this.tableObj.getElement().querySelector('.pagination')\n\n        return parseInt(container.getAttribute('data-record-count'))\n    } \n\n    Navigation.prototype.buildPaginationLinkList = function(recordCount, recordsPerPage, pageIndex) {\n        // This method could be refactored and moved to a pagination\n        // helper if we want to support other pagination markup options.\n\n        var pageCount = this.calculatePageCount(recordCount, recordsPerPage),\n            pageList = document.createElement('ul')\n\n        for (var i=0; i < pageCount; i++) {\n            var item = document.createElement('li'),\n                link = document.createElement('a')\n\n            if (i == pageIndex)\n                item.setAttribute('class', 'active')\n\n\n            link.innerText = i+1\n            link.setAttribute('data-page-index', i)\n            link.setAttribute('href', '#')\n\n            item.appendChild(link)\n            pageList.appendChild(item)\n\n            $(link).addClass('pagination-link')\n        }\n\n        return pageList\n    }\n\n    Navigation.prototype.markActiveLinkItem = function(paginationContainer, pageIndex) {\n        // This method could be refactored and moved to a pagination\n        // helper if we want to support other pagination markup options.\n\n        var activeItem = paginationContainer.querySelector('.active'),\n            list = paginationContainer.children[0]\n\n        activeItem.setAttribute('class', '')\n\n        for (var i=0, len = list.children.length; i < len; i++) {\n            if (i == pageIndex) {\n                list.children[i].setAttribute('class', 'active')\n            }\n        }\n    }\n\n    Navigation.prototype.gotoPage = function(pageIndex, onSuccess) {\n        this.tableObj.unfocusTable()\n\n        if (!this.tableObj.validate())\n            return\n\n        this.pageIndex = pageIndex\n\n        this.tableObj.updateDataTable(onSuccess)\n    }\n\n    Navigation.prototype.getRowCountOnPage = function(cellElement) {\n        return this.tableObj.getDataTableBody().children.length\n    }\n\n    Navigation.prototype.getNewRowPage = function(placement, currentRowIndex) {\n        var curRecordCount = this.getRecordCount()\n\n        if (placement === 'bottom')\n            return this.calculatePageCount(curRecordCount + 1, this.tableObj.options.recordsPerPage) - 1\n\n        // When a row is added above a current row, the current row just moves down,\n        // so it's safe to return the current page index\n        if (placement == 'above')\n            return this.pageIndex\n\n        if (placement == 'below') {\n            if (currentRowIndex == (this.tableObj.options.recordsPerPage - 1))\n                return this.pageIndex + 1\n\n            return this.pageIndex\n        }\n\n        return this.pageIndex\n    }\n\n    Navigation.prototype.getPageAfterDeletion = function(currentRowIndex) {\n        if (currentRowIndex == 0 && this.getRowCountOnPage() == 1)\n            return this.pageIndex == 0 ? 0 : this.pageIndex - 1\n\n        return this.pageIndex\n    }\n\n    // KEYBOARD NAVIGATION\n    // ============================\n\n    Navigation.prototype.navigateDown = function(ev, forceCellIndex) {\n        if (!this.tableObj.activeCell)\n            return\n\n        if (this.tableObj.activeCellProcessor && !this.tableObj.activeCellProcessor.keyNavigationAllowed(ev, 'down'))\n            return\n\n        var row = this.tableObj.activeCell.parentNode,\n            newRow = !ev.shiftKey\n                ? row.nextElementSibling\n                : row.parentNode.children[row.parentNode.children.length - 1],\n            cellIndex = forceCellIndex !== undefined\n                ? forceCellIndex\n                : this.tableObj.activeCell.cellIndex\n\n        if (newRow) {\n            var cell = newRow.children[cellIndex]\n\n            if (cell)\n                this.tableObj.focusCell(cell)\n        }\n        else {\n            // Try to switch to the next page if that's possible\n\n            if (!this.paginationEnabled())\n                return\n\n            if (this.pageIndex < this.pageCount - 1) {\n                var self = this\n\n                this.gotoPage(this.pageIndex + 1, function navDownPageSuccess() {\n                    self.focusCell('top', cellIndex)\n                    self = null\n                })\n            }\n        }\n    }\n\n    Navigation.prototype.navigateUp = function(ev, forceCellIndex, isTab) {\n        if (!this.tableObj.activeCell)\n            return\n\n        if (this.tableObj.activeCellProcessor && !this.tableObj.activeCellProcessor.keyNavigationAllowed(ev, 'up'))\n            return\n\n        var row = this.tableObj.activeCell.parentNode,\n            newRow = (!ev.shiftKey || isTab)\n                ? row.previousElementSibling\n                : row.parentNode.children[0],\n            cellIndex = forceCellIndex !== undefined\n                ? forceCellIndex\n                : this.tableObj.activeCell.cellIndex\n\n        if (newRow) {\n            var cell = newRow.children[cellIndex]\n\n            if (cell)\n                this.tableObj.focusCell(cell)\n        }\n        else {\n            // Try to switch to the previous page if that's possible\n\n            if (!this.paginationEnabled())\n                return\n\n            if (this.pageIndex > 0) {\n                var self = this\n\n                this.gotoPage(this.pageIndex - 1, function navUpPageSuccess(){\n                    self.focusCell('bottom', cellIndex)\n                    self = null\n                })\n            }\n        }\n    }\n\n    Navigation.prototype.navigateLeft = function(ev, isTab) {\n        if (!this.tableObj.activeCell)\n            return\n\n        if (!isTab && this.tableObj.activeCellProcessor && !this.tableObj.activeCellProcessor.keyNavigationAllowed(ev, 'left'))\n            return\n\n        var row = this.tableObj.activeCell.parentNode,\n            newIndex = (!ev.shiftKey || isTab)\n                ? this.tableObj.activeCell.cellIndex - 1\n                : 0\n\n        var cell = row.children[newIndex]\n\n        if (cell) {\n            this.tableObj.focusCell(cell)\n        }\n        else {\n            // Try to navigate up if that's possible\n            this.navigateUp(ev, row.children.length - 1, isTab)\n        }\n    }\n\n    Navigation.prototype.navigateRight = function(ev, isTab) {\n        if (!this.tableObj.activeCell)\n            return\n\n        if (!isTab && this.tableObj.activeCellProcessor && !this.tableObj.activeCellProcessor.keyNavigationAllowed(ev, 'right'))\n            return\n\n        var row = this.tableObj.activeCell.parentNode,\n            newIndex = !ev.shiftKey\n                ? this.tableObj.activeCell.cellIndex + 1\n                : row.children.length - 1\n\n        var cell = row.children[newIndex]\n\n        if (cell) {\n            this.tableObj.focusCell(cell)\n        }\n        else {\n            // Try to navigate down if that's possible\n            this.navigateDown(ev, 0)\n        }\n    }\n\n    Navigation.prototype.navigateNext = function(ev) {\n        if (!this.tableObj.activeCell)\n            return\n\n        if (this.tableObj.activeCellProcessor && !this.tableObj.activeCellProcessor.keyNavigationAllowed(ev, 'tab'))\n            return\n\n        if (!ev.shiftKey)\n            this.navigateRight(ev, true)\n        else\n            this.navigateLeft(ev, true)\n\n        this.tableObj.stopEvent(ev)\n    }\n\n    Navigation.prototype.focusCell = function(rowReference, cellIndex) {\n        var row = null,\n            tbody = this.tableObj.getDataTableBody()\n\n        if (typeof rowReference === 'object') {\n            row = rowReference\n        }\n        else {\n            if (rowReference == 'bottom') {\n                row = tbody.children[tbody.children.length-1]\n            }\n            else if (rowReference == 'top') {\n                row = tbody.children[0]\n            }\n        }\n\n        if (!row)\n            return\n\n        var cell = row.children[cellIndex]\n        if (cell)\n            this.tableObj.focusCell(cell)\n    }\n\n    Navigation.prototype.focusCellInReplacedRow = function(rowIndex, cellIndex) {\n        if (rowIndex == 0) {\n           this.focusCell('top', cellIndex)\n        }\n        else {\n            var focusRow = this.tableObj.findRowByIndex(rowIndex)\n\n            if (!focusRow)\n                focusRow = this.tableObj.findRowByIndex(rowIndex-1)\n\n            if (focusRow)\n                this.focusCell(focusRow, cellIndex)\n            else\n                this.focusCell('top', cellIndex)\n        }\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    Navigation.prototype.onKeydown = function(ev) {\n        // The navigation object uses the table's keydown handler\n        // and doesn't register own handler.\n\n        if (ev.key === 'ArrowDown')\n            return this.navigateDown(ev)\n        else if (ev.key === 'ArrowUp')\n            return this.navigateUp(ev)\n        else if (ev.key === 'ArrowLeft')\n            return this.navigateLeft(ev)\n\n        if (ev.key === 'ArrowRight')\n            return this.navigateRight(ev)\n\n        if (ev.key === 'Tab')\n            return this.navigateNext(ev)\n    }\n\n    Navigation.prototype.onClick = function(ev) {\n        // The navigation object uses the table's click handler\n        // and doesn't register own click handler.\n\n        var target = this.tableObj.getEventTarget(ev, 'A')\n\n        if (!target || !$(target).hasClass('pagination-link'))\n            return\n\n        var pageIndex = parseInt(target.getAttribute('data-page-index'))\n\n        if (pageIndex === null)\n            return\n\n        this.gotoPage(pageIndex)\n        this.tableObj.stopEvent(ev)\n\n        return false\n    }\n\n    $.oc.table.helper.navigation = Navigation;\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.helper.search.js",
    "content": "/*\n * Search helper for the table widget.\n * Implements searching within the table.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.helper === undefined)\n        $.oc.table.helper = {}\n\n    // SEARCH CLASS DEFINITION\n    // ============================\n\n    var Search = function(tableObj) {\n        // Reference to the table object\n        this.tableObj = tableObj\n\n        // The search form element\n        this.searchForm = null\n        this.searchInput = null\n\n        // Timer used for tracking input changes\n        this.inputTrackTimer = null\n\n        // Event handlers\n\n        // Active search query\n        this.activeQuery = null\n\n        this.isActive = false\n\n        this.init()\n    };\n\n    Search.prototype.init = function() {\n    }\n\n    Search.prototype.dispose = function() {\n        // Remove the reference to the table object\n        this.tableObj = null\n        this.searchForm = null\n        this.searchInput = null\n    }\n\n    Search.prototype.buildSearchForm = function() {\n        if (!this.searchEnabled())\n            return\n\n        var el = this.tableObj.getElement(),\n            toolbar = this.tableObj.getToolbar(),\n            searchForm = toolbar.querySelector('.table-search')\n\n        if (!searchForm) {\n            this.searchForm = $($('[data-table-toolbar-search]', el).html()).appendTo(toolbar).get(0)\n            this.searchInput = $('.table-search-input', this.searchForm).get(0)\n        }\n    }\n\n    Search.prototype.getQuery = function() {\n        return $.trim(this.activeQuery)\n    }\n\n    Search.prototype.hasQuery = function() {\n        return this.searchEnabled() && $.trim(this.activeQuery).length > 0\n    }\n\n    Search.prototype.searchEnabled = function() {\n        return this.tableObj.options.searching\n    }\n\n    Search.prototype.performSearch = function(query, onSuccess) {\n        var isDirty = this.activeQuery != query\n\n        this.activeQuery = query\n\n        if (isDirty) {\n            this.tableObj.updateDataTable(onSuccess)\n        }\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    Search.prototype.onKeydown = function(ev) {\n        // The navigation object uses the table's keydown handler\n        // and doesn't register own handler.\n\n        // Tab pressed\n        if (ev.key === 'Tab') {\n            this.onClick(ev)\n            return\n        }\n\n        if (!this.isActive) {\n            return\n        }\n\n        var self = this\n        this.inputTrackTimer = window.setTimeout(function() {\n            self.performSearch(self.searchInput.value)\n        }, 300)\n    }\n\n    Search.prototype.onClick = function(ev) {\n        var target = this.tableObj.getEventTarget(ev, 'INPUT')\n        this.isActive = target && $(target).hasClass('table-search-input')\n    }\n\n    $.oc.table.helper.search = Search;\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.js",
    "content": "/*\n * Table control class\n *\n * Dependencies:\n * - Scrollbar (october.scrollbar.js)\n */\n+function ($) { \"use strict\";\n\n    // TABLE CONTROL NAMESPACES\n    // ============================\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.table === undefined)\n        $.oc.table = {}\n\n    // TABLE CLASS DEFINITION\n    // ============================\n\n    var Table = function(element, options) {\n        this.el = element;\n        this.$el = $(element);\n\n        this.options = options;\n        this.disposed = false;\n\n        //\n        // State properties\n        //\n\n        // The data source object\n        this.dataSource = null;\n\n        // The cell processors list\n        this.cellProcessors = {};\n\n        // A reference to the currently active cell processor\n        this.activeCellProcessor = null;\n\n        // A reference to the currently active table cell\n        this.activeCell = null;\n\n        // A reference to the tables container\n        this.tableContainer = null;\n\n        // A reference to the data table container\n        this.dataTableContainer = null;\n\n        // The key of the row which is being edited at the moment.\n        // This key corresponds the data source row key which\n        // uniquely identifies the row in the data set. When the\n        // table grid notices that a cell in another row is edited it commits\n        // the previously edited record to the data source.\n        this.editedRowKey = null;\n\n        // A reference to the data table\n        this.dataTable = null;\n\n        // A reference to the header table\n        this.headerTable = null;\n\n        // A reference to the toolbar\n        this.toolbar = null;\n\n        // Event handlers\n        this.clickHandler = this.onClick.bind(this);\n        this.keydownHandler = this.onKeydown.bind(this);\n        this.documentClickHandler = this.onDocumentClick.bind(this);\n        this.toolbarClickHandler = this.onToolbarClick.bind(this);\n\n        if (this.options.postback && this.options.clientDataSourceClass == 'client') {\n            if (!this.options.postbackHandlerName) {\n                var formHandler = this.$el.closest('form').data('request');\n                this.options.postbackHandlerName = formHandler || 'onSave';\n            }\n            this.formSubmitHandler = this.onFormSubmit.bind(this);\n        }\n\n        // Navigation helper\n        this.navigation = null;\n\n        // Search helper\n        this.search = null;\n\n        // Number of records added or deleted during the session\n        this.recordsAddedOrDeleted = 0;\n\n        // Bound reference to dispose() - ideally the class should use the October foundation library base class\n        this.disposeBound = this.dispose.bind(this);\n\n        //\n        // Initialization\n        //\n\n        this.init();\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n    }\n\n    // INTERNAL METHODS\n    // ============================\n\n    Table.prototype.init = function() {\n        // Create the data source object\n        this.createDataSource()\n\n        // Create cell processors\n        this.initCellProcessors()\n\n        // Initialize helpers\n        this.navigation = new $.oc.table.helper.navigation(this)\n        this.search = new $.oc.table.helper.search(this)\n\n        // Create the UI\n        this.buildUi()\n\n        // Register event handlers\n        this.registerHandlers()\n    }\n\n    Table.prototype.disposeCellProcessors = function() {\n        // For the performance reasons cell processors are stored\n        // in an object structure with keys matching the column names.\n        // We can iterate through then with the for cycle if we know\n        // the column names. We use the for cycle for the performance\n        // reasons: http://jsperf.com/for-vs-foreach/37,\n        // http://jonraasch.com/blog/10-javascript-performance-boosting-tips-from-nicholas-zakas\n\n        for (var i = 0, len = this.options.columns.length; i < len; i++) {\n            var column = this.options.columns[i].key\n\n            this.cellProcessors[column].dispose()\n            this.cellProcessors[column] = null\n        }\n\n        this.cellProcessors = null\n        this.activeCellProcessor = null\n    }\n\n    Table.prototype.setColumnConfiguration = function(column, options) {\n        this.cellProcessors[column].columnConfiguration = { ...this.cellProcessors[column].columnConfiguration || {}, ...options };\n    }\n\n    Table.prototype.createDataSource = function() {\n        var dataSourceClass = this.options.clientDataSourceClass\n\n        if ($.oc.table.datasource === undefined || $.oc.table.datasource[dataSourceClass] == undefined)\n            throw new Error('The table client-side data source class \"'+dataSourceClass+'\" is not ' +\n                'found in the $.oc.table.datasource namespace.')\n\n        this.dataSource = new $.oc.table.datasource[dataSourceClass](this)\n    }\n\n    Table.prototype.registerHandlers = function() {\n        this.el.addEventListener('click', this.clickHandler);\n        this.el.addEventListener('keydown', this.keydownHandler);\n        this.$el.one('dispose-control', this.disposeBound);\n\n        document.addEventListener('click', this.documentClickHandler);\n\n        if (this.options.postback && this.options.clientDataSourceClass == 'client') {\n            this.$el.closest('form').bind('oc.beforeRequest', this.formSubmitHandler);\n        }\n\n        var toolbar = this.getToolbar();\n        if (toolbar) {\n            toolbar.addEventListener('click', this.toolbarClickHandler);\n        }\n    }\n\n    Table.prototype.unregisterHandlers = function() {\n        this.el.removeEventListener('click', this.clickHandler);\n        document.removeEventListener('click', this.documentClickHandler)\n\n        this.clickHandler = null\n\n        this.el.removeEventListener('keydown', this.keydownHandler);\n        this.keydownHandler = null\n\n        var toolbar = this.getToolbar()\n        if (toolbar) {\n            toolbar.removeEventListener('click', this.toolbarClickHandler);\n        }\n\n        this.toolbarClickHandler = null;\n\n        if (this.formSubmitHandler) {\n            this.$el.closest('form').unbind('oc.beforeRequest', this.formSubmitHandler);\n            this.formSubmitHandler = null;\n        }\n    }\n\n    Table.prototype.initCellProcessors = function() {\n        for (var i = 0, len = this.options.columns.length; i < len; i++) {\n            var columnConfiguration = this.options.columns[i],\n                column = columnConfiguration.key,\n                columnType = columnConfiguration.type\n\n            // Resolve the default column type to string\n            if (columnType === undefined) {\n                columnType = 'string'\n                this.options.columns[i].type = columnType\n            }\n\n            if ($.oc.table.processor === undefined || $.oc.table.processor[columnType] == undefined)\n                throw new Error('The table cell processor for the column type \"'+columnType+'\" is not ' +\n                    'found in the $.oc.table.processor namespace.')\n\n            this.cellProcessors[column] = new $.oc.table.processor[columnType](this, column, columnConfiguration)\n        }\n    }\n\n    Table.prototype.getCellProcessor = function(columnName) {\n        return this.cellProcessors[columnName]\n    }\n\n    Table.prototype.buildUi = function() {\n        var existingTable = this.el.querySelector('div.table-container');\n        if (existingTable) {\n            existingTable.remove();\n        }\n\n        this.tableContainer = document.createElement('div');\n        this.tableContainer.setAttribute('class', 'table-container');\n\n        // Build the toolbar\n        if (this.options.toolbar) {\n            this.buildToolbar();\n        }\n\n        // Build the headers table\n        this.tableContainer.appendChild(this.buildHeaderTable());\n\n        // Append the table container to the element\n        this.el.insertBefore(this.tableContainer, this.el.children[0]);\n\n        if (!this.options.height) {\n            this.dataTableContainer = this.tableContainer;\n        }\n        else {\n            this.dataTableContainer = this.buildScrollbar();\n        }\n\n        // Build the data table\n        this.updateDataTable();\n    }\n\n    Table.prototype.buildToolbar = function() {\n        if (!this.options.adding && !this.options.deleting) {\n            return;\n        }\n\n        this.toolbar = $($('[data-table-toolbar]', this.el).html()).appendTo(this.tableContainer).get(0);\n\n        if (!this.options.adding) {\n            $('[data-cmd^=\"record-add\"]', this.toolbar).remove();\n        }\n        else {\n            if (this.navigation.paginationEnabled() || !this.options.rowSorting) {\n                // When the pagination is enabled, or sorting is disabled,\n                // new records can only be added to the bottom of the\n                // table, so just show the general \"Add row\" button.\n                $('[data-cmd=record-add-below], [data-cmd=record-add-above]', this.toolbar).remove();\n            }\n            else {\n                $('[data-cmd=record-add]', this.toolbar).remove();\n            }\n        }\n\n        if (!this.options.deleting) {\n            $('[data-cmd=\"record-delete\"]', this.toolbar).remove();\n        }\n    }\n\n    Table.prototype.buildScrollbar = function() {\n        var scrollbar = document.createElement('div'),\n            scrollbarContent = document.createElement('div');\n\n        scrollbar.setAttribute('class', 'control-scrollbar');\n\n        if (this.options.dynamicHeight) {\n            scrollbar.setAttribute('style', 'max-height: ' + this.options.height + 'px');\n        }\n        else {\n            scrollbar.setAttribute('style', 'height: ' + this.options.height + 'px');\n        }\n\n        scrollbar.appendChild(scrollbarContent);\n        this.tableContainer.appendChild(scrollbar);\n\n        $(scrollbar).scrollbar({animation: false});\n\n        return scrollbarContent;\n    }\n\n    Table.prototype.buildHeaderTable = function() {\n        var headersTable = document.createElement('table'),\n            row = document.createElement('tr');\n\n        headersTable.className = 'headers';\n        headersTable.appendChild(row);\n\n        for (var i = 0, len = this.options.columns.length; i < len; i++) {\n            var header = document.createElement('th');\n\n            if (this.options.columns[i].width) {\n                header.setAttribute('style', 'width: '+this.options.columns[i].width);\n            }\n\n            header.textContent !== undefined\n                ? header.textContent = this.options.columns[i].title\n                : header.innerText = this.options.columns[i].title;\n\n            row.appendChild(header);\n        }\n\n        this.headerTable = headersTable;\n\n        return headersTable;\n    }\n\n    Table.prototype.updateDataTable = function(onSuccess) {\n        var self = this;\n\n        this.unfocusTable();\n\n        this.fetchRecords(function onUpdateDataTableSuccess(records, totalCount) {\n            self.buildDataTable(records, totalCount);\n\n            if (onSuccess) {\n                onSuccess();\n            }\n\n            if (totalCount == 0 && self.options.adding) {\n                self.addRecord('above', true);\n            }\n\n            self.$el.trigger('oc.tableUpdateData', [\n                records,\n                totalCount\n            ]);\n\n            self = null;\n        })\n    }\n\n    Table.prototype.updateColumnWidth = function() {\n        var headerCells = this.headerTable.querySelectorAll('th'),\n            dataCells = this.dataTable.querySelectorAll('tr:first-child td');\n\n        for (var i = 0, len = headerCells.length; i < len; i++) {\n            if (dataCells[i]) {\n                dataCells[i].setAttribute('style', headerCells[i].getAttribute('style'));\n            }\n        }\n    }\n\n    Table.prototype.buildDataTable = function(records, totalCount) {\n        var dataTable = document.createElement('table'),\n            tbody = document.createElement('tbody'),\n            keyColumn = this.options.keyColumn\n\n        dataTable.setAttribute('class', 'data')\n\n        for (var i = 0, len = records.length; i < len; i++) {\n            var row = document.createElement('tr')\n\n            if (records[i][keyColumn] === undefined)\n                throw new Error('The row attribute '+keyColumn+' is not set for the row #'+i);\n\n            row.setAttribute('data-row', records[i][keyColumn])\n            for (var j = 0, colsLen = this.options.columns.length; j < colsLen; j++) {\n                var cell = document.createElement('td'),\n                    dataContainer = document.createElement('input'),\n                    cellContentContainer = document.createElement('div'),\n                    column = this.options.columns[j],\n                    columnName = column.key,\n                    cellProcessor = this.getCellProcessor(columnName)\n\n                cell.setAttribute('data-column', columnName)\n                cell.setAttribute('data-column-type', column.type)\n\n                dataContainer.setAttribute('type', 'hidden')\n                dataContainer.setAttribute('data-container', 'data-container')\n                dataContainer.value = this.formatDataContainerValue(records[i][columnName])\n\n                cellContentContainer.setAttribute('class', 'content-container')\n\n                cell.appendChild(cellContentContainer)\n                row.appendChild(cell)\n                cell.appendChild(dataContainer)\n\n                cellProcessor.renderCell(records[i][columnName], cellContentContainer)\n            }\n\n            tbody.appendChild(row)\n        }\n\n        dataTable.appendChild(tbody)\n\n        // Inject the data table to the DOM or replace the existing table\n        if (this.dataTable !== null)\n            this.dataTableContainer.replaceChild(dataTable, this.dataTable)\n        else\n            this.dataTableContainer.appendChild(dataTable)\n\n        this.dataTable = dataTable\n\n        // Update column widths\n        this.updateColumnWidth()\n\n        // Update the scrollbar\n        this.updateScrollbar()\n\n        // Update the pagination links\n        this.navigation.buildPagination(totalCount)\n\n        // Update the search form\n        this.search.buildSearchForm()\n    }\n\n    Table.prototype.formatDataContainerValue = function(value) {\n        if (value === undefined) {\n            return ''\n        }\n\n        if (typeof value === 'boolean') {\n            return value ? 1 : ''\n        }\n\n        return value\n    }\n\n    Table.prototype.fetchRecords = function(onSuccess) {\n        if (this.search.hasQuery()) {\n            this.dataSource.searchRecords(\n                this.search.getQuery(),\n                this.navigation.getPageFirstRowOffset(),\n                this.options.recordsPerPage,\n                onSuccess\n            )\n        }\n        else {\n            this.dataSource.getRecords(\n                this.navigation.getPageFirstRowOffset(),\n                this.options.recordsPerPage,\n                onSuccess\n            )\n        }\n    }\n\n    Table.prototype.updateScrollbar = function() {\n        if (!this.options.height) {\n            return;\n        }\n\n        $(this.dataTableContainer.parentNode).data('oc.scrollbar')?.update();\n    }\n\n    Table.prototype.scrollCellIntoView = function() {\n        if (!this.options.height || !this.activeCell) {\n            return;\n        }\n\n        $(this.dataTableContainer.parentNode).data('oc.scrollbar')?.gotoElement(this.activeCell)\n    }\n\n    Table.prototype.disposeScrollbar = function() {\n        if (!this.options.height) {\n            return;\n        }\n\n        $(this.dataTableContainer.parentNode).data('oc.scrollbar')?.dispose();\n        $(this.dataTableContainer.parentNode).data('oc.scrollbar', null);\n    }\n\n    /*\n     * Makes a cell processor active and hides the previously\n     * active editor.\n     */\n    Table.prototype.setActiveProcessor = function(processor) {\n        if (this.activeCellProcessor)\n            this.activeCellProcessor.onUnfocus()\n\n        this.activeCellProcessor = processor\n    }\n\n    Table.prototype.commitEditedRow = function() {\n        if (this.editedRowKey === null) {\n            return;\n        }\n\n        var editedRow = this.dataTable.querySelector('tr[data-row=\"'+CSS.escape(this.editedRowKey)+'\"]')\n        if (!editedRow) {\n            return;\n        }\n\n        if (editedRow.getAttribute('data-dirty') != 1) {\n            return;\n        }\n\n        var cells = editedRow.children,\n            data = {};\n\n        for (var i=0, len = cells.length; i < len; i++) {\n            var cell = cells[i];\n            data[cell.getAttribute('data-column')] = this.getCellValue(cell);\n        }\n\n        this.dataSource.updateRecord(this.editedRowKey, data);\n        editedRow.setAttribute('data-dirty', 0);\n    }\n\n    /*\n     * Removes editor from the currently edited cell and commits the row if needed.\n     */\n    Table.prototype.unfocusTable = function() {\n        this.elementRemoveClass(this.el, 'active')\n\n        if (this.activeCellProcessor)\n            this.activeCellProcessor.onUnfocus()\n\n        this.commitEditedRow()\n        this.activeCellProcessor = null\n\n        if (this.activeCell)\n            this.activeCell.setAttribute('class', '')\n\n        this.activeCell = null\n    }\n\n    /*\n     * Makes the table focused in the UI\n     */\n    Table.prototype.focusTable = function() {\n        this.elementAddClass(this.el, 'active')\n    }\n\n    /*\n     * Calls the onFocus() method for the cell processor responsible for the\n     * newly focused cell. Commit the previous edited row to the data source\n     * if needed.\n     */\n    Table.prototype.focusCell = function(cellElement, isClick) {\n        var columnName = cellElement.getAttribute('data-column');\n        if (columnName === null) {\n            return;\n        }\n\n        this.focusTable();\n\n        var processor = this.getCellProcessor(columnName);\n        if (!processor) {\n            throw new Error(\"Cell processor not found for the column \"+columnName);\n        }\n\n        if (this.activeCell !== cellElement) {\n            if (this.activeCell) {\n                this.elementRemoveClass(this.activeCell, 'active');\n            }\n\n            this.setActiveProcessor(processor);\n            this.activeCell = cellElement;\n\n            if (processor.isCellFocusable()) {\n                this.elementAddClass(this.activeCell, 'active');\n            }\n        }\n\n        // If the cell belongs to other row than the currently edited,\n        // commit currently edited row to the data source. Update the\n        // currently edited row key.\n        var rowKey = this.getCellRowKey(cellElement);\n\n        if (this.editedRowKey !== null && rowKey != this.editedRowKey) {\n            this.commitEditedRow();\n        }\n\n        this.editedRowKey = rowKey;\n\n        processor.onFocus(cellElement, isClick);\n\n        this.scrollCellIntoView();\n    }\n\n    Table.prototype.markCellRowDirty = function(cellElement) {\n        cellElement.parentNode.setAttribute('data-dirty', 1)\n    }\n\n    Table.prototype.addRecord = function(placement, noFocus) {\n        // If there is no active cell, or the pagination is enabled or\n        // row sorting is disabled, add the record to the bottom of\n        // the table (last page).\n\n        if (!this.activeCell || this.navigation.paginationEnabled() || !this.options.rowSorting) {\n            placement = 'bottom';\n        }\n\n        var relativeToKey = null,\n            currentRowIndex = null;\n\n        if (placement == 'above' || placement == 'below') {\n            relativeToKey = this.getCellRowKey(this.activeCell);\n            currentRowIndex = this.getCellRowIndex(this.activeCell);\n        }\n\n        this.unfocusTable();\n\n        if (this.navigation.paginationEnabled()) {\n            var newPageIndex = this.navigation.getNewRowPage(placement, currentRowIndex);\n\n            if (newPageIndex != this.navigation.pageIndex) {\n                // Validate data on the current page if adding a new record\n                // is going to create another page.\n                if (!this.validate()) {\n                    return;\n                }\n            }\n\n            this.navigation.pageIndex = newPageIndex;\n        }\n\n        this.recordsAddedOrDeleted++;\n\n        // New records have negative keys\n        var keyColumn = this.options.keyColumn,\n            recordData = {},\n            self = this;\n\n        recordData[keyColumn] = -1 * this.recordsAddedOrDeleted;\n\n        this.$el.trigger('oc.tableNewRow', [\n            recordData\n        ]);\n\n        this.dataSource.createRecord(recordData, placement, relativeToKey,\n            this.navigation.getPageFirstRowOffset(),\n            this.options.recordsPerPage,\n            function onAddRecordDataTableSuccess(records, totalCount) {\n                self.buildDataTable(records, totalCount);\n\n                var row = self.findRowByKey(recordData[keyColumn]);\n                if (!row) {\n                    throw new Error('New row is not found in the updated table: '+recordData[keyColumn]);\n                }\n\n                if (!noFocus) {\n                    self.navigation.focusCell(row, 0);\n                }\n\n                self = null;\n            }\n        )\n    }\n\n    Table.prototype.deleteRecord = function() {\n        if (!this.activeCell) {\n            return;\n        }\n\n        var self = this,\n            key = this.getCellRowKey(this.activeCell),\n            currentRowIndex = this.getCellRowIndex(this.activeCell),\n            paginationEnabled = this.navigation.paginationEnabled(),\n            currentPageIndex = this.navigation.pageIndex,\n            currentCellIndex = this.activeCell.cellIndex;\n\n        if (paginationEnabled) {\n            this.navigation.pageIndex = this.navigation.getPageAfterDeletion(currentRowIndex);\n        }\n\n        this.recordsAddedOrDeleted++;\n\n        // New records have negative keys\n        var keyColumn = this.options.keyColumn,\n            newRecordData = {};\n\n        newRecordData[keyColumn] = -1 * this.recordsAddedOrDeleted;\n\n        this.dataSource.deleteRecord(\n            key,\n            newRecordData,\n            this.navigation.getPageFirstRowOffset(),\n            this.options.recordsPerPage,\n            function onDeleteRecordDataTableSuccess(records, totalCount) {\n                self.buildDataTable(records, totalCount);\n\n                if (!paginationEnabled) {\n                    self.navigation.focusCellInReplacedRow(currentRowIndex, currentCellIndex);\n                }\n                else {\n                    if (currentPageIndex != self.navigation.pageIndex) {\n                        self.navigation.focusCell('bottom', currentCellIndex);\n                    }\n                    else {\n                        self.navigation.focusCellInReplacedRow(currentRowIndex, currentCellIndex);\n                    }\n                }\n\n                self = null;\n            }\n        )\n    }\n\n    Table.prototype.notifyRowProcessorsOnChange = function(cellElement) {\n        var columnName = cellElement.getAttribute('data-column'),\n            row = cellElement.parentNode;\n\n        for (var i = 0, len = row.children.length; i < len; i++) {\n            var column = this.options.columns[i].key;\n\n            this.cellProcessors[column].onRowValueChanged(columnName, row.children[i]);\n        }\n    }\n\n    Table.prototype.getToolbar = function() {\n        return this.tableContainer.querySelector('div.toolbar');\n    }\n\n    /*\n     * Validates data on the current page\n     */\n    Table.prototype.validate = function() {\n        var rows = this.dataTable.querySelectorAll('tbody tr[data-row]');\n\n        for (var i = 0, len = rows.length; i < len; i++) {\n            var row = rows[i];\n            this.elementRemoveClass(row, 'error');\n        }\n\n        for (var i = 0, rowsLen = rows.length; i < rowsLen; i++) {\n            var row = rows[i],\n                rowData = this.getRowData(row);\n\n            for (var j = 0, colsLen = row.children.length; j < colsLen; j++) {\n                this.elementRemoveClass(row.children[j], 'error');\n            }\n\n            for (var columnName in rowData) {\n                var cellProcessor = this.getCellProcessor(columnName),\n                    message = cellProcessor.validate(rowData[columnName], rowData);\n\n                if (message !== undefined) {\n                    var cell = row.querySelector('td[data-column=\"'+columnName+'\"]'),\n                        self = this;\n\n                    this.elementAddClass(row, 'error');\n                    this.elementAddClass(cell, 'error');\n\n                    $.oc.flashMsg({ text: message, 'class': 'error'});\n\n                    window.setTimeout(function(){\n                        self.focusCell(cell, false)\n                        cell = null\n                        self = null\n                        cellProcessor = null\n                    }, 100);\n\n                    return false;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    Table.prototype.onClick = function(ev) {\n        this.focusTable()\n\n        if (this.navigation.onClick(ev) === false)\n            return\n\n        if (this.search.onClick(ev) === false)\n            return\n\n        for (var i = 0, len = this.options.columns.length; i < len; i++) {\n            var column = this.options.columns[i].key\n\n            this.cellProcessors[column].onClick(ev)\n        }\n\n        var target = this.getEventTarget(ev, 'TD')\n\n        if (!target) {\n            this.unfocusTable();\n            return;\n        }\n\n        if (target.tagName != 'TD') {\n            this.unfocusTable();\n            return;\n        }\n\n        this.focusCell(target, true);\n    }\n\n    Table.prototype.onKeydown = function(ev) {\n        if ((ev.key === 'a' || ev.key === 'A') && ev.altKey && this.options.adding) {\n            if (!ev.shiftKey) {\n                // alt+a - add record below\n                this.addRecord('below');\n            }\n            else {\n                // alt+shift+a - add record above\n                this.addRecord('above');\n            }\n\n            this.stopEvent(ev);\n            return;\n        }\n\n        if ((ev.key === 'd' || ev.key === 'D') && ev.altKey && this.options.deleting) {\n            // alt+d - delete record\n            this.deleteRecord();\n\n            this.stopEvent(ev);\n            return;\n        }\n\n        for (var i = 0, len = this.options.columns.length; i < len; i++) {\n            var column = this.options.columns[i].key;\n            if (this.cellProcessors[column].onKeyDown(ev) === false) {\n                return;\n            }\n        }\n\n        if (this.navigation.onKeydown(ev) === false) {\n            return;\n        }\n\n        if (this.search.onKeydown(ev) === false) {\n            return;\n        }\n    }\n\n    // Validate table contents and manipulate request directly\n    Table.prototype.onFormSubmit = function(ev, data) {\n        var isSubmitHandler = data.handler === this.options.postbackHandlerName;\n\n        if (isSubmitHandler) {\n            this.unfocusTable();\n\n            if (!this.validate()) {\n                ev.preventDefault();\n                return;\n            }\n        }\n\n        if (isSubmitHandler || this.options.postbackHandlerWild) {\n            var fieldName = this.options.fieldName.indexOf('[') > -1\n                ? this.options.fieldName + '[TableData]'\n                : this.options.fieldName + 'TableData';\n\n            data.options.data[fieldName] = JSON.stringify(this.dataSource.getAllData());\n        }\n    }\n\n    Table.prototype.onToolbarClick = function(ev) {\n        var target = this.getEventTarget(ev, 'BUTTON'),\n            cmd = target && target.getAttribute('data-cmd');\n\n        if (!cmd) {\n            return;\n        }\n\n        switch (cmd) {\n            case 'record-add':\n            case 'record-add-below':\n                this.addRecord('below');\n            break\n            case 'record-add-above':\n                this.addRecord('above');\n            break\n            case 'record-delete':\n                this.deleteRecord();\n            break\n        }\n\n        this.stopEvent(ev);\n    }\n\n    Table.prototype.onDocumentClick = function(ev) {\n        var target = this.getEventTarget(ev);\n\n        // Determine if the click was inside the table element\n        // and just exit if so\n        if (this.parentContainsElement(this.el, target)) {\n            return;\n        }\n\n        // Request the active cell processor if the clicked\n        // element belongs to any extra-table element created\n        // by the processor\n\n        if (this.activeCellProcessor && this.activeCellProcessor.elementBelongsToProcessor(target)) {\n            return;\n        }\n\n        this.unfocusTable();\n    }\n\n    // PUBLIC METHODS\n    // ============================\n\n    Table.prototype.dispose = function() {\n        if (this.disposed) {\n            // Prevent errors when legacy code executes the dispose() method\n            // directly, bypassing $.oc.foundation.controlUtils.disposeControls(container)\n            return\n        }\n\n        this.disposed = true\n\n        this.disposeBound = true\n\n        // Remove an editor and commit the data if needed\n        this.unfocusTable()\n\n        // Dispose the data source and clean up the reference\n        this.dataSource.dispose()\n        this.dataSource = null\n\n        // Unregister event handlers\n        this.unregisterHandlers()\n\n        // Remove references to DOM elements\n        this.dataTable = null\n        this.headerTable = null\n        this.toolbar = null\n\n        // Dispose cell processors\n        this.disposeCellProcessors()\n\n        // Dispose helpers and remove references\n        this.navigation.dispose()\n        this.navigation = null\n\n        // Delete references to the control HTML elements.\n        // The script doesn't remove any DOM elements themselves.\n        // If it's needed it should be done by the outer script,\n        // we only make sure that the table widget doesn't hold\n        // references to the detached DOM tree so that the garbage\n        // collector can delete the elements if needed.\n        this.disposeScrollbar()\n        this.el = null\n        this.tableContainer = null\n        this.$el = null\n        this.dataTableContainer = null\n\n        // Delete references to other DOM elements\n        this.activeCell = null\n    }\n\n    /*\n     * Updates row values in the table.\n     * rowIndex is an integer value containing the row index on the current page.\n     * The rowValues should be a hash object containing only changed\n     * columns.\n     * Returns false if the row wasn't found. Otherwise returns true.\n     */\n    Table.prototype.setRowValues = function(rowIndex, rowValues) {\n        var row = this.findRowByIndex(rowIndex)\n\n        if (!row) {\n            return false\n        }\n\n        var dataUpdated = false\n\n        for (var i = 0, len = row.children.length; i < len; i++) {\n            var cell = row.children[i],\n                cellColumnName = this.getCellColumnName(cell)\n\n            for (var rowColumnName in rowValues) {\n                if (rowColumnName == cellColumnName) {\n                    this.setCellValue(cell, rowValues[rowColumnName], true)\n                    dataUpdated = true\n                }\n            }\n        }\n\n        if (dataUpdated) {\n            var originalEditedRowKey = this.editedRowKey\n\n            this.editedRowKey = this.getRowKey(row)\n            this.commitEditedRow()\n            this.editedRowKey = originalEditedRowKey\n        }\n\n        return true\n    }\n\n    // HELPER METHODS\n    // ============================\n\n    Table.prototype.getElement = function() {\n        return this.el\n    }\n\n    Table.prototype.getAlias = function() {\n        return this.options.alias\n    }\n\n    Table.prototype.getTableContainer = function() {\n        return this.tableContainer\n    }\n\n    Table.prototype.getDataTableBody = function() {\n        return this.dataTable.children[0]\n    }\n\n    Table.prototype.getEventTarget = function(ev, tag) {\n        // TODO: use the foundation library\n\n        var target = ev.target ? ev.target : ev.srcElement\n\n        if (tag === undefined)\n            return target\n\n        var tagName = target.tagName\n\n        while (tagName != tag) {\n            target = target.parentNode\n\n            if (!target)\n                return null\n\n            tagName = target.tagName\n        }\n\n        return target\n    }\n\n    Table.prototype.stopEvent = function(ev) {\n        // TODO: use the foundation library\n\n        if (ev.stopPropagation)\n            ev.stopPropagation()\n        else\n            ev.cancelBubble = true\n\n        if(ev.preventDefault)\n            ev.preventDefault()\n        else\n            ev.returnValue = false\n    }\n\n    Table.prototype.elementHasClass = function(el, className) {\n        // TODO: use the foundation library\n\n        if (el.classList)\n            return el.classList.contains(className);\n\n        return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);\n    }\n\n    Table.prototype.elementAddClass = function(el, className) {\n        // TODO: use the foundation library\n\n        if (this.elementHasClass(el, className))\n            return\n\n        if (el.classList)\n            el.classList.add(className);\n        else\n            el.className += ' ' + className;\n    }\n\n    Table.prototype.elementRemoveClass = function(el, className) {\n        // TODO: use the foundation library\n\n        if (el.classList)\n            el.classList.remove(className);\n        else\n            el.className = el.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n    }\n\n    Table.prototype.parentContainsElement = function(parent, element) {\n        while (element && element != parent) {\n            element = element.parentNode;\n        }\n\n        return element ? true : false;\n    }\n\n    Table.prototype.getCellValue = function(cellElement) {\n        return cellElement.querySelector('[data-container]').value;\n    }\n\n    Table.prototype.getCellRowKey = function(cellElement) {\n        // Was parseInt -sg\n        return cellElement.parentNode.getAttribute('data-row');\n    }\n\n    Table.prototype.getRowKey = function(rowElement) {\n        // Was parseInt -sg\n        return rowElement.getAttribute('data-row');\n    }\n\n    Table.prototype.findRowByKey = function(key) {\n        return this.dataTable.querySelector('tbody tr[data-row=\"'+key+'\"]');\n    }\n\n    Table.prototype.findRowByIndex = function(index) {\n        return this.getDataTableBody().children[index];\n    }\n\n    Table.prototype.getCellRowIndex = function(cellElement) {\n        return parseInt(cellElement.parentNode.rowIndex);\n    }\n\n    Table.prototype.getRowCellValueByColumnName = function(row, columnName) {\n        var cell = row.querySelector('td[data-column=\"'+columnName+'\"]');\n\n        if (!cell) {\n            return cell;\n        }\n\n        return this.getCellValue(cell);\n    }\n\n    Table.prototype.getRowData = function(row) {\n        var result = {};\n\n        for (var i = 0, len = row.children.length; i < len; i++) {\n            var cell = row.children[i];\n            result[cell.getAttribute('data-column')] = this.getCellValue(cell);\n        }\n\n        return result;\n    }\n\n    Table.prototype.getCellColumnName = function(cellElement) {\n        return cellElement.getAttribute('data-column')\n    }\n\n    Table.prototype.setCellValue = function(cellElement, value, suppressEvents) {\n        var dataContainer = cellElement.querySelector('[data-container]')\n\n        if (dataContainer.value != value) {\n            dataContainer.value = value\n\n            this.markCellRowDirty(cellElement)\n\n            this.notifyRowProcessorsOnChange(cellElement)\n\n            if (suppressEvents === undefined || !suppressEvents) {\n                this.$el.trigger('oc.tableCellChanged', [\n                    this.getCellColumnName(cellElement),\n                    value,\n                    this.getCellRowIndex(cellElement)\n                ]);\n            }\n        }\n    }\n\n    Table.DEFAULTS = {\n        clientDataSourceClass: 'client',\n        keyColumn: 'id',\n        recordsPerPage: false,\n        data: null,\n        postback: true,\n        postbackHandlerName: null,\n        postbackHandlerWild: false,\n        adding: true,\n        deleting: true,\n        toolbar: true,\n        searching: false,\n        rowSorting: false,\n        height: false,\n        dynamicHeight: false\n    }\n\n    // TABLE PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.table\n\n    $.fn.table = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1),\n            result = undefined\n\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.table')\n            var options = $.extend({}, Table.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.table', (data = new Table(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        })\n\n        return result ? result : this\n    }\n\n    $.fn.table.Constructor = Table\n\n    $.oc.table.table = Table\n\n    // TABLE NO CONFLICT\n    // =================\n\n    $.fn.table.noConflict = function () {\n        $.fn.table = old\n        return this\n    }\n\n    // TABLE DATA-API\n    // ===============\n\n    $(document).on('render', function(){\n        $('div[data-control=table]').table()\n    })\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.processor.autocomplete.js",
    "content": "/*\n * Autocomplete cell processor for the table control.\n */\n\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.processor === undefined)\n        throw new Error(\"The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.processor.string,\n        BaseProto = Base.prototype\n\n    var AutocompleteProcessor = function(tableObj, columnName, columnConfiguration) {\n        //\n        // State properties\n        //\n\n        this.cachedOptionPromises = {}\n\n        //\n        // Parent constructor\n        //\n\n        Base.call(this, tableObj, columnName, columnConfiguration)\n    }\n\n    AutocompleteProcessor.prototype = Object.create(BaseProto)\n    AutocompleteProcessor.prototype.constructor = AutocompleteProcessor\n\n    AutocompleteProcessor.prototype.dispose = function() {\n        this.cachedOptionPromises = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    /*\n     * Forces the processor to hide the editor when the user navigates\n     * away from the cell. Processors can update the cell value in this method.\n     * Processors must clear the reference to the active cell in this method.\n     */\n    AutocompleteProcessor.prototype.onUnfocus = function() {\n        if (!this.activeCell)\n            return\n\n        this.removeAutocomplete()\n\n        BaseProto.onUnfocus.call(this)\n    }\n\n    /*\n     * Renders the cell in the normal (no edit) mode\n     */\n    AutocompleteProcessor.prototype.renderCell = function(value, cellContentContainer) {\n        BaseProto.renderCell.call(this, value, cellContentContainer)\n\n        // this.fetchOptions(cellContentContainer.parentNode)\n    }\n\n    AutocompleteProcessor.prototype.buildEditor = function(cellElement, cellContentContainer, isClick) {\n        BaseProto.buildEditor.call(this, cellElement, cellContentContainer, isClick)\n\n        var self = this\n\n        this.fetchOptions(cellElement, function autocompleteFetchOptions(options) {\n            self.buildAutoComplete(options)\n\n            self = null\n        })\n    }\n\n    AutocompleteProcessor.prototype.fetchOptions = function(cellElement, onSuccess) {\n        if (this.columnConfiguration.options) {\n            if (onSuccess !== undefined) {\n                onSuccess(this.columnConfiguration.options)\n            }\n        } else {\n            // If options are not provided and not found in the cache,\n            // request them from the server. For dependent autocomplete editors\n            // the caching key contains the master column values.\n\n            if (this.triggerGetOptions(onSuccess) === false) {\n                return\n            }\n\n            var row = cellElement.parentNode,\n                cachingKey = this.createOptionsCachingKey(row),\n                viewContainer = this.getViewContainer(cellElement)\n\n            // Request options from the server. When the table widget builds,\n            // multiple cells in the column could require loading the options.\n            // The AJAX promises are cached here so that we have a single\n            // request per caching key.\n\n            $.oc.foundation.element.addClass(viewContainer, 'loading')\n\n            if (!this.cachedOptionPromises[cachingKey]) {\n                var requestData = {\n                        column: this.columnName,\n                        rowData: this.tableObj.getRowData(row)\n                    },\n                    handlerName = this.tableObj.getAlias()+'::onGetAutocompleteOptions'\n\n                this.cachedOptionPromises[cachingKey] = this.tableObj.$el.request(handlerName, {data: requestData})\n            }\n\n            this.cachedOptionPromises[cachingKey].done(function onAutocompleteLoadOptionsSuccess(data){\n                if (onSuccess !== undefined) {\n                    onSuccess(data.options)\n                }\n            }).always(function onAutocompleteLoadOptionsAlways(){\n                $.oc.foundation.element.removeClass(viewContainer, 'loading')\n            })\n        }\n    }\n\n    AutocompleteProcessor.prototype.createOptionsCachingKey = function(row) {\n        var cachingKey = 'non-dependent',\n            dependsOn = this.columnConfiguration.dependsOn\n\n        if (dependsOn) {\n            if (typeof dependsOn == 'object') {\n                for (var i = 0, len = dependsOn.length; i < len; i++ )\n                    cachingKey += dependsOn[i] + this.tableObj.getRowCellValueByColumnName(row, dependsOn[i])\n            } else\n                cachingKey = dependsOn + this.tableObj.getRowCellValueByColumnName(row, dependsOn)\n        }\n\n        return cachingKey\n    }\n\n    AutocompleteProcessor.prototype.triggerGetOptions = function(callback) {\n        var tableElement = this.tableObj.getElement()\n        if (!tableElement) {\n            return\n        }\n\n        var optionsEvent = $.Event('autocompleteitems.oc.table'),\n            values = {} // TODO - implement loading values from the current row.\n\n        $(tableElement).trigger(optionsEvent, [{\n            values: values,\n            callback: callback,\n            column: this.columnName,\n            columnConfiguration: this.columnConfiguration\n        }])\n\n        if (optionsEvent.isDefaultPrevented()) {\n            return false\n        }\n\n        return true\n    }\n\n    AutocompleteProcessor.prototype.getInput = function() {\n        if (!this.activeCell) {\n            return null\n        }\n\n        return this.activeCell.querySelector('.string-input')\n    }\n\n    AutocompleteProcessor.prototype.buildAutoComplete = function(items) {\n        if (!this.activeCell) {\n            return\n        }\n\n        var input = this.getInput()\n        if (!input) {\n            return\n        }\n\n        if (items === undefined) {\n            items = []\n        }\n\n        $(input).autocomplete({\n            source: this.prepareItems(items),\n            matchWidth: true,\n            menu: '<ul class=\"autocomplete dropdown-menu table-widget-autocomplete\"></ul>',\n            bodyContainer: true\n        })\n    }\n\n    AutocompleteProcessor.prototype.prepareItems = function(items) {\n        var result = {}\n\n        if (Array.isArray(items)) {\n            for (var i = 0, len = items.length; i < len; i++) {\n                result[items[i]] = items[i]\n            }\n        }\n        else {\n            result = items\n        }\n\n        return result\n    }\n\n    AutocompleteProcessor.prototype.removeAutocomplete = function() {\n        var input = this.getInput()\n\n        $(input).autocomplete('destroy')\n    }\n\n    $.oc.table.processor.autocomplete = AutocompleteProcessor;\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.processor.base.js",
    "content": "/*\n * Base class for the table cell processors.\n */\n+function ($) { \"use strict\";\n\n    // PROCESSOR NAMESPACES\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.processor === undefined)\n        $.oc.table.processor = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = function(tableObj, columnName, columnConfiguration) {\n        //\n        // State properties\n        //\n\n        this.tableObj = tableObj;\n\n        this.columnName = columnName;\n\n        this.columnConfiguration = columnConfiguration;\n\n        this.activeCell = null;\n\n        this.validators = [];\n\n        // Register event handlers\n        this.registerHandlers();\n\n        // Initialize validators\n        this.initValidators();\n    }\n\n    Base.prototype.dispose = function() {\n        // Register event handlers\n        this.unregisterHandlers()\n\n        // Remove references to the DOM\n        this.tableObj = null\n\n        this.activeCell = null\n    }\n\n    /*\n     * Renders the cell in the normal (no edit) mode\n     */\n    Base.prototype.renderCell = function(value, cellContentContainer) {\n    }\n\n    /*\n     * Registers event handlers required for the cell processor.\n     * Event handers should be bound to the container control element\n     * (not to the table element).\n     */\n    Base.prototype.registerHandlers = function() {\n    }\n\n    /*\n     * Unregisters event handlers previously registered with\n     * registerHandlers().\n     */\n    Base.prototype.unregisterHandlers = function() {\n    }\n\n    /*\n     * This method is called when the cell managed by the processor\n     * is focused (clicked or navigated with the keyboard).\n     */\n    Base.prototype.onFocus = function(cellElement, isClick) {\n    }\n\n    /*\n     * Forces the processor to hide the editor when the user navigates\n     * away from the cell. Processors can update the sell value in this method.\n     * Processors must clear the reference to the active cell in this method.\n     */\n    Base.prototype.onUnfocus = function() {\n    }\n\n    /*\n     * Event handler for the keydown event. The table class calls this method\n     * for all processors.\n     */\n    Base.prototype.onKeyDown = function(ev) {\n    }\n\n    /*\n     * Event handler for the click event. The table class calls this method\n     * for all processors.\n     */\n    Base.prototype.onClick = function(ev) {\n    }\n\n    /*\n     * This method is called when a cell value in the row changes.\n     */\n    Base.prototype.onRowValueChanged = function(columnName, cellElement) {\n    }\n\n    /*\n     * Determines if the keyboard navigation in the specified direction is allowed\n     * by the cell processor. Some processors could reject the navigation, for example\n     * the string processor could cancel the left array navigation if the caret\n     * in the text input is not in the beginning of the text.\n     */\n    Base.prototype.keyNavigationAllowed = function(ev, direction) {\n        return true\n    }\n\n    /*\n     * Determines if the processor's cell is focusable.\n     */\n    Base.prototype.isCellFocusable = function() {\n        return true\n    }\n\n    /*\n     * Returns the content container element of a cell\n     */\n    Base.prototype.getCellContentContainer = function(cellElement) {\n        return cellElement.querySelector('.content-container')\n    }\n\n    /*\n     * Creates a cell view data container (a DIV element that contains\n     * the current cell value). This functionality is required for most\n     * of the processors, perhaps except the checkbox cell processor.\n     */\n    Base.prototype.createViewContainer = function(cellContentContainer, value) {\n        var viewContainer = document.createElement('div')\n\n        viewContainer.setAttribute('data-view-container', 'data-view-container')\n        viewContainer.textContent = value === undefined ? '' : value\n\n        cellContentContainer.appendChild(viewContainer)\n\n        return viewContainer\n    }\n\n    /*\n     * Returns the cell's view container element.\n     */\n    Base.prototype.getViewContainer = function(cellElement) {\n        return cellElement.querySelector('[data-view-container]')\n    }\n\n    /*\n     * Displays the view container\n     */\n    Base.prototype.showViewContainer = function(cellElement) {\n        return this.getViewContainer(cellElement).setAttribute('class', '')\n    }\n\n    /*\n     * Hides the view container\n     */\n    Base.prototype.hideViewContainer = function(cellElement) {\n        return this.getViewContainer(cellElement).setAttribute('class', 'oc-hide')\n    }\n\n    /*\n     * Sets visual value for the view container\n     */\n    Base.prototype.setViewContainerValue = function(cellElement, value) {\n        return this.getViewContainer(cellElement).textContent = value\n    }\n\n    /*\n     * Determines whether the specified element is some element created by the\n     * processor.\n     */\n    Base.prototype.elementBelongsToProcessor = function(element) {\n        return false\n    }\n\n    Base.prototype.initValidators = function() {\n        if (this.columnConfiguration.validation === undefined)\n            return\n\n        for (var validatorName in this.columnConfiguration.validation) {\n            if ($.oc.table.validator === undefined || $.oc.table.validator[validatorName] == undefined)\n                throw new Error('The table cell validator \"'+validatorName+'\" for the column \"'+this.columnName+'\" is not ' +\n                    'found in the $.oc.table.validator namespace.')\n\n            var validator = new $.oc.table.validator[validatorName](\n                    this.columnConfiguration.validation[validatorName]\n                )\n\n            this.validators.push(validator)\n        }\n    }\n\n    Base.prototype.validate = function(value, rowData) {\n        for (var i=0, len=this.validators.length; i<len; i++) {\n            var message = this.validators[i].validate(value, rowData)\n\n            if (message !== undefined)\n                return message\n        }\n    }\n\n    $.oc.table.processor.base = Base\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.processor.checkbox.js",
    "content": "/*\n * Checkbox cell processor for the table control.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.processor === undefined)\n        throw new Error(\"The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.processor.base,\n        BaseProto = Base.prototype\n\n    var CheckboxProcessor = function(tableObj, columnName, columnConfiguration) {\n        //\n        // Parent constructor\n        //\n\n        Base.call(this, tableObj, columnName, columnConfiguration)\n    }\n\n    CheckboxProcessor.prototype = Object.create(BaseProto)\n    CheckboxProcessor.prototype.constructor = CheckboxProcessor\n\n    CheckboxProcessor.prototype.dispose = function() {\n        BaseProto.dispose.call(this)\n    }\n\n    /*\n     * Determines if the processor's cell is focusable.\n     */\n    CheckboxProcessor.prototype.isCellFocusable = function() {\n        return false\n    }\n\n    /*\n     * Renders the cell in the normal (no edit) mode\n     */\n    CheckboxProcessor.prototype.renderCell = function(value, cellContentContainer) {\n        var checkbox = document.createElement('input')\n        checkbox.setAttribute('data-checkbox-element', 'true');\n        checkbox.setAttribute('tabindex', '0');\n        checkbox.setAttribute('type', 'checkbox');\n        checkbox.setAttribute('class', 'form-check-input');\n\n        if (value && value != 0 && value != \"false\") {\n            checkbox.checked = true;\n        }\n\n        cellContentContainer.appendChild(checkbox)\n    }\n\n    /*\n     * This method is called when the cell managed by the processor\n     * is focused (clicked or navigated with the keyboard).\n     */\n    CheckboxProcessor.prototype.onFocus = function(cellElement, isClick) {\n        cellElement.querySelector('input[data-checkbox-element]').focus();\n    }\n\n    /*\n     * Event handler for the click event. The table class calls this method\n     * for all processors.\n     */\n    CheckboxProcessor.prototype.onClick = function(ev) {\n        var chkElement = ev.target;\n\n        if (chkElement.getAttribute('data-checkbox-element')) {\n            // The method is called for all processors, but we should\n            // update only the checkbox in the clicked column.\n            var container = this.getCheckboxContainerNode(chkElement);\n            if (container.getAttribute('data-column') !== this.columnName) {\n                return;\n            }\n\n            this.changeState(chkElement);\n            $(chkElement).trigger('change');\n        }\n    }\n\n    CheckboxProcessor.prototype.changeState = function(chkElement) {\n        var cell = this.getCheckboxContainerNode(chkElement);\n\n        this.tableObj.setCellValue(cell, chkElement.checked ? 1 : 0);\n    }\n\n    CheckboxProcessor.prototype.getCheckboxContainerNode = function(checkbox) {\n        return checkbox.parentNode.parentNode;\n    }\n\n    /*\n     * This method is called when a cell value in the row changes.\n     */\n    CheckboxProcessor.prototype.onRowValueChanged = function(columnName, cellElement) {\n        if (columnName !== this.columnName) {\n            return;\n        }\n\n        var checkbox = cellElement.querySelector('input[data-checkbox-element]'),\n            value = this.tableObj.getCellValue(cellElement)\n\n        if (value && value != 0 && value != \"false\") {\n            checkbox.checked = true;\n        }\n        else {\n            checkbox.checked = false;\n        }\n    }\n\n    $.oc.table.processor.checkbox = CheckboxProcessor;\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.processor.dropdown.js",
    "content": "/*\n * Drop-down cell processor for the table control.\n */\n\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.processor === undefined)\n        throw new Error(\"The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.processor.base,\n        BaseProto = Base.prototype\n\n    var DropdownProcessor = function(tableObj, columnName, columnConfiguration) {\n        //\n        // State properties\n        //\n\n        this.itemListElement = null\n\n        this.cachedOptionPromises = {}\n        this.searching = false\n        this.searchQuery = null\n        this.searchInterval = null\n\n        // Event handlers\n        this.itemClickHandler = this.onItemClick.bind(this)\n        this.itemKeyDownHandler = this.onItemKeyDown.bind(this)\n        this.itemMouseMoveHandler = this.onItemMouseMove.bind(this)\n\n        //\n        // Parent constructor\n        //\n\n        Base.call(this, tableObj, columnName, columnConfiguration)\n    }\n\n    DropdownProcessor.prototype = Object.create(BaseProto)\n    DropdownProcessor.prototype.constructor = DropdownProcessor\n\n    DropdownProcessor.prototype.dispose = function() {\n        this.unregisterListHandlers()\n        this.itemClickHandler = null\n        this.itemKeyDownHandler = null\n        this.itemMouseMoveHandler = null\n        this.itemListElement = null\n        this.cachedOptionPromises = null\n        BaseProto.dispose.call(this)\n    }\n\n    DropdownProcessor.prototype.unregisterListHandlers = function() {\n        if (this.itemListElement) {\n            // This processor binds custom click handler to the item list,\n            // the standard registerHandlers/unregisterHandlers functionality\n            // can't be used here because the element belongs to the document\n            // body, not to the table.\n            this.itemListElement.removeEventListener('click', this.itemClickHandler)\n            this.itemListElement.removeEventListener('keydown', this.itemKeyDownHandler)\n            this.itemListElement.removeEventListener('mousemove', this.itemMouseMoveHandler)\n        }\n    }\n\n    /*\n     * Renders the cell in the normal (no edit) mode\n     */\n    DropdownProcessor.prototype.renderCell = function(value, cellContentContainer) {\n        var viewContainer = this.createViewContainer(cellContentContainer, '...')\n\n        this.fetchOptions(cellContentContainer.parentNode, function renderCellFetchOptions(options) {\n            if (options[value] !== undefined)\n                viewContainer.textContent = options[value]\n\n            cellContentContainer.setAttribute('tabindex', 0)\n        })\n    }\n\n    /*\n     * This method is called when the cell managed by the processor\n     * is focused (clicked or navigated with the keyboard).\n     */\n    DropdownProcessor.prototype.onFocus = function(cellElement, isClick) {\n        if (this.activeCell === cellElement) {\n            this.showDropdown()\n            return\n        }\n\n        this.activeCell = cellElement\n        var cellContentContainer = this.getCellContentContainer(cellElement)\n        this.buildEditor(cellElement, cellContentContainer, isClick)\n\n        if (!isClick)\n            cellContentContainer.focus()\n    }\n\n    /*\n     * Forces the processor to hide the editor when the user navigates\n     * away from the cell. Processors can update the sell value in this method.\n     * Processors must clear the reference to the active cell in this method.\n     */\n    DropdownProcessor.prototype.onUnfocus = function() {\n        if (!this.activeCell)\n            return\n\n        this.unregisterListHandlers()\n\n        this.hideDropdown()\n        this.itemListElement = null\n        this.activeCell = null\n    }\n\n    DropdownProcessor.prototype.buildEditor = function(cellElement, cellContentContainer, isClick) {\n        // Create the select control\n        var currentValue = this.tableObj.getCellValue(cellElement),\n            containerPosition = this.getAbsolutePosition(cellContentContainer)\n            self = this\n\n        this.itemListElement = document.createElement('div')\n\n        this.itemListElement.addEventListener('click', this.itemClickHandler)\n        this.itemListElement.addEventListener('keydown', this.itemKeyDownHandler)\n        this.itemListElement.addEventListener('mousemove', this.itemMouseMoveHandler)\n\n        this.itemListElement.setAttribute('class', 'table-control-dropdown-list')\n        this.itemListElement.style.width = cellContentContainer.offsetWidth + 2 + 'px'\n        this.itemListElement.style.left = containerPosition.left + 'px'\n        this.itemListElement.style.top = containerPosition.top - 2 + cellContentContainer.offsetHeight + 'px'\n\n        this.fetchOptions(cellElement, function renderCellFetchOptions(options) {\n            var listElement = document.createElement('ul')\n\n            for (var value  in options) {\n                var itemElement = document.createElement('li')\n                itemElement.setAttribute('data-value', value)\n                itemElement.textContent = options[value]\n                itemElement.setAttribute('tabindex', 0)\n\n                if (value == currentValue)\n                    itemElement.setAttribute('class', 'selected')\n\n                listElement.appendChild(itemElement)\n            }\n\n            self.itemListElement.appendChild(listElement)\n\n            if (isClick)\n                self.showDropdown()\n\n            self = null\n        })\n    }\n\n    /*\n     * Hide the drop-down, but don't delete it.\n     */\n    DropdownProcessor.prototype.hideDropdown = function() {\n        if (this.itemListElement && this.activeCell && this.itemListElement.parentNode) {\n            var cellContentContainer = this.getCellContentContainer(this.activeCell)\n            cellContentContainer.setAttribute('data-dropdown-open', 'false')\n\n            this.itemListElement.parentNode.removeChild(this.itemListElement)\n\n            cellContentContainer.focus()\n        }\n    }\n\n    DropdownProcessor.prototype.showDropdown = function() {\n        if (this.itemListElement && this.itemListElement.parentNode !== document.body) {\n            this.getCellContentContainer(this.activeCell).setAttribute('data-dropdown-open', 'true')\n            document.body.appendChild(this.itemListElement)\n\n            var activeItemElement = this.itemListElement.querySelector('ul li.selected')\n\n            if (!activeItemElement) {\n                activeItemElement = this.itemListElement.querySelector('ul li:first-child')\n\n                if (activeItemElement)\n                    activeItemElement.setAttribute('class', 'selected')\n            }\n\n            if (activeItemElement) {\n                window.setTimeout(function(){\n                    activeItemElement.focus()\n                }, 0)\n            }\n        }\n    }\n\n    DropdownProcessor.prototype.fetchOptions = function(cellElement, onSuccess) {\n        if (this.columnConfiguration.options) {\n            onSuccess(this.columnConfiguration.options)\n        }\n        else {\n            // If options are not provided and not found in the cache,\n            // request them from the server. For dependent drop-downs\n            // the caching key contains the master column values.\n\n            var row = cellElement.parentNode,\n                cachingKey = this.createOptionsCachingKey(row),\n                viewContainer = this.getViewContainer(cellElement)\n\n            // Request options from the server. When the table widget builds,\n            // multiple cells in the column could require loading the options.\n            // The AJAX promises are cached here so that we have a single\n            // request per caching key.\n\n            viewContainer.setAttribute('class', 'loading')\n\n            if (!this.cachedOptionPromises[cachingKey]) {\n                var requestData = {\n                        column: this.columnName,\n                        rowData: this.tableObj.getRowData(row)\n                    },\n                    handlerName = this.tableObj.getAlias()+'::onGetDropdownOptions'\n\n                this.cachedOptionPromises[cachingKey] = this.tableObj.$el.request(handlerName, {data: requestData})\n            }\n\n            this.cachedOptionPromises[cachingKey]\n                .done(function onDropDownLoadOptionsSuccess(data){\n                    onSuccess(data.options)\n                })\n                .always(function onDropDownLoadOptionsAlways(){\n                    viewContainer.setAttribute('class', '')\n                })\n        }\n    }\n\n    DropdownProcessor.prototype.createOptionsCachingKey = function(row) {\n        var cachingKey = 'non-dependent',\n            dependsOn = this.columnConfiguration.dependsOn\n\n        if (dependsOn) {\n            if (typeof dependsOn == 'object') {\n                for (var i = 0, len = dependsOn.length; i < len; i++) {\n                    cachingKey += dependsOn[i] + this.tableObj.getRowCellValueByColumnName(row, dependsOn[i])\n                }\n            }\n            else {\n                cachingKey = dependsOn + this.tableObj.getRowCellValueByColumnName(row, dependsOn)\n            }\n        }\n\n        return cachingKey\n    }\n\n    DropdownProcessor.prototype.getAbsolutePosition = function(element) {\n        // TODO: use the foundation library\n\n        var top = document.body.scrollTop,\n            left = 0\n\n        do {\n            top += element.offsetTop || 0;\n            top -= element.scrollTop || 0;\n            left += element.offsetLeft || 0;\n            element = element.offsetParent;\n        } while(element)\n\n        return {\n            top: top,\n            left: left\n        }\n    }\n\n    DropdownProcessor.prototype.updateCellFromFocusedItem = function(focusedItem) {\n        if (!focusedItem) {\n            focusedItem = this.findFocusedItem();\n        }\n\n        this.setSelectedItem(focusedItem);\n    }\n\n    DropdownProcessor.prototype.findSelectedItem = function() {\n        if (this.itemListElement)\n            return this.itemListElement.querySelector('ul li.selected')\n\n        return null\n    }\n\n    DropdownProcessor.prototype.setSelectedItem = function(item) {\n        if (!this.itemListElement)\n            return null\n\n        if (item.tagName == 'LI' && this.itemListElement.contains(item)) {\n            this.itemListElement.querySelectorAll('ul li').forEach(function (option) {\n                option.removeAttribute('class')\n            })\n\n            item.setAttribute('class', 'selected');\n        }\n\n        this.tableObj.setCellValue(this.activeCell, item.getAttribute('data-value'))\n        this.setViewContainerValue(this.activeCell, item.textContent)\n    }\n\n    DropdownProcessor.prototype.findFocusedItem = function() {\n        if (this.itemListElement)\n            return this.itemListElement.querySelector('ul li:focus')\n\n        return null\n    }\n\n    DropdownProcessor.prototype.onItemClick = function(ev) {\n        var target = this.tableObj.getEventTarget(ev)\n\n        if (target.tagName == 'LI') {\n            target.focus()\n            this.updateCellFromFocusedItem(target)\n            this.hideDropdown()\n        }\n    }\n\n    DropdownProcessor.prototype.onItemKeyDown = function(ev) {\n        if (!this.itemListElement)\n            return\n\n        if (ev.key === 'ArrowDown' || ev.key === 'ArrowUp') {\n            // Up or down keys - find previous/next list item and select it\n            var focused = this.findFocusedItem(),\n                newFocusedItem = focused.nextElementSibling\n\n            if (ev.key === 'ArrowUp')\n                newFocusedItem = focused.previousElementSibling\n\n            if (newFocusedItem) {\n                newFocusedItem.focus()\n            }\n\n            return\n        }\n\n        if (ev.key === 'Enter' || ev.key === '(Space character)' || ev.key === 'Spacebar' || ev.key === ' ') {\n            // Return or space keys - update the selected value and hide the editor\n            this.updateCellFromFocusedItem()\n            this.hideDropdown()\n            return\n        }\n\n        if (ev.key === 'Tab') {\n            // Tab - update the selected value and pass control to the table navigation\n            this.updateCellFromFocusedItem()\n            this.tableObj.navigation.navigateNext(ev)\n            this.tableObj.stopEvent(ev)\n            return\n        }\n\n        if (ev.key === 'Escape') {\n            // Esc - hide the drop-down\n            this.hideDropdown()\n            return\n        }\n\n        this.searchByTextInput(ev, true);\n    }\n\n    /*\n     * Event handler for mouse movements over options in the dropdown menu\n     */\n    DropdownProcessor.prototype.onItemMouseMove = function(ev) {\n        if (!this.itemListElement)\n            return\n\n        var target = this.tableObj.getEventTarget(ev)\n\n        if (target.tagName == 'LI') {\n            target.focus()\n        }\n    }\n\n    /*\n     * Event handler for the keydown event. The table class calls this method\n     * for all processors.\n     */\n    DropdownProcessor.prototype.onKeyDown = function(ev) {\n        if (!this.itemListElement)\n            return\n\n        if ((ev.key === '(Space character)' || ev.key === 'Spacebar' || ev.key === ' ') && !this.searching) { // Spacebar\n            this.showDropdown()\n        }\n        else if (ev.key === 'ArrowDown'  || ev.key === 'ArrowUp') { // Up and down arrow keys\n            var selected = this.findSelectedItem(),\n                newSelectedItem;\n\n            if (!selected) {\n                if (ev.key === 'ArrowUp') {\n                    // Only show an initial item when the down array key is pressed\n                    return false\n                }\n                newSelectedItem = this.itemListElement.querySelector('ul li:first-child')\n            }\n            else {\n                newSelectedItem = selected.nextElementSibling\n\n                if (ev.key === 'ArrowUp')\n                    newSelectedItem = selected.previousElementSibling\n            }\n\n            if (newSelectedItem) {\n                this.setSelectedItem(newSelectedItem);\n            }\n\n            return false // Stop propogation of event\n        }\n        else {\n            this.searchByTextInput(ev);\n        }\n    }\n\n    /*\n     * This method is called when a cell value in the row changes.\n     */\n    DropdownProcessor.prototype.onRowValueChanged = function(columnName, cellElement) {\n        // Determine if this drop-down depends on the changed column\n        // and update the option list if necessary\n\n        // TODO: setting drop-down values with table.setRowValues() is not implemented currently\n\n        if (!this.columnConfiguration.dependsOn)\n            return\n\n        var dependsOnColumn = false,\n            dependsOn = this.columnConfiguration.dependsOn\n\n        if (typeof dependsOn == 'object') {\n            for (var i = 0, len = dependsOn.length; i < len; i++ ) {\n                if (dependsOn[i] == columnName) {\n                    dependsOnColumn = true\n                    break\n                }\n            }\n        }\n        else {\n            dependsOnColumn = dependsOn == columnName\n        }\n\n        if (!dependsOnColumn)\n            return\n\n        var currentValue = this.tableObj.getCellValue(cellElement),\n            viewContainer = this.getViewContainer(cellElement)\n\n        this.fetchOptions(cellElement, function rowValueChangedFetchOptions(options) {\n            var value = options[currentValue] !== undefined\n                ? options[currentValue]\n                : '...'\n\n            viewContainer.textContent = value\n            viewContainer = null\n        })\n    }\n\n    /*\n     * Determines whether the specified element is some element created by the\n     * processor.\n     */\n    DropdownProcessor.prototype.elementBelongsToProcessor = function(element) {\n        if (!this.itemListElement)\n            return false\n\n        return this.tableObj.parentContainsElement(this.itemListElement, element)\n    }\n\n    /*\n     * Provides auto-complete like functionality for typing in a query and selecting\n     * a matching list option\n     */\n    DropdownProcessor.prototype.searchByTextInput = function(ev, focusOnly) {\n        if (focusOnly === undefined) {\n            focusOnly = false\n        }\n\n        var character = ev.key\n\n        if (character.length === 1 || character === 'Space') {\n            if (!this.searching) {\n                this.searching = true\n                this.searchQuery = ''\n            }\n\n            this.searchQuery += (character === 'Space') ? ' ' : character\n\n            // Search for a valid option in dropdown\n            var validItem = null;\n            var query = this.searchQuery\n\n            this.itemListElement.querySelectorAll('ul li').forEach(function(item) {\n                if (validItem === null && item.dataset.value && item.dataset.value.toLowerCase().indexOf(query.toLowerCase()) === 0) {\n                    validItem = item\n                }\n            })\n\n            if (validItem) {\n                // If a valid item is found, select item and allow for fine-tuning the search query\n                if (focusOnly === true) {\n                    validItem.focus()\n                }\n                else {\n                    this.setSelectedItem(validItem)\n                }\n\n                if (this.searchInterval) {\n                    clearTimeout(this.searchInterval)\n                }\n\n                this.searchInterval = setTimeout(this.cancelTextSearch.bind(this), 1000)\n            }\n            else {\n                this.cancelTextSearch()\n            }\n        }\n    }\n\n    DropdownProcessor.prototype.cancelTextSearch = function() {\n        this.searching = false\n        this.searchQuery = null\n        this.searchInterval = null\n    }\n\n    $.oc.table.processor.dropdown = DropdownProcessor;\n}(window.jQuery);\n"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.processor.string.js",
    "content": "/*\n * String cell processor for the table control.\n * The string processor allows to edit cell values with a simple\n * input control.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.processor === undefined)\n        throw new Error(\"The $.oc.table.processor namespace is not defined. Make sure that the table.processor.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.processor.base,\n        BaseProto = Base.prototype\n\n    var StringProcessor = function(tableObj, columnName, columnConfiguration) {\n        //\n        // State properties\n        //\n\n        this.focusTimeoutHandler = this.onFocusTimeout.bind(this)\n\n        //\n        // Parent constructor\n        //\n\n        Base.call(this, tableObj, columnName, columnConfiguration)\n    }\n\n    StringProcessor.prototype = Object.create(BaseProto)\n    StringProcessor.prototype.constructor = StringProcessor\n\n    StringProcessor.prototype.dispose = function() {\n        BaseProto.dispose.call(this)\n        this.focusTimeoutHandler = null\n    }\n\n    /*\n     * Renders the cell in the normal (no edit) mode\n     */\n    StringProcessor.prototype.renderCell = function(value, cellContentContainer) {\n        this.createViewContainer(cellContentContainer, value)\n    }\n\n    /*\n     * This method is called when the cell managed by the processor\n     * is focused (clicked or navigated with the keyboard).\n     */\n    StringProcessor.prototype.onFocus = function(cellElement, isClick) {\n        if (this.activeCell === cellElement)\n            return\n\n        this.activeCell = cellElement\n        this.buildEditor(cellElement, this.getCellContentContainer(cellElement))\n    }\n\n    /*\n     * Forces the processor to hide the editor when the user navigates\n     * away from the cell. Processors can update the sell value in this method.\n     * Processors must clear the reference to the active cell in this method.\n     */\n    StringProcessor.prototype.onUnfocus = function() {\n        if (!this.activeCell)\n            return\n\n        var editor = this.activeCell.querySelector('.string-input')\n        if (editor) {\n            // Update the cell value and remove the editor\n            this.tableObj.setCellValue(this.activeCell, editor.value)\n            this.setViewContainerValue(this.activeCell, editor.value)\n            editor.parentNode.removeChild(editor)\n        }\n\n        this.showViewContainer(this.activeCell)\n        this.activeCell = null\n    }\n\n    StringProcessor.prototype.buildEditor = function(cellElement, cellContentContainer) {\n        // Hide the view container\n        this.hideViewContainer(this.activeCell)\n\n        // Create the input control\n        var input = document.createElement('input')\n        input.setAttribute('type', 'text')\n        input.setAttribute('class', 'string-input')\n        input.value = this.tableObj.getCellValue(cellElement)\n\n        if (this.columnConfiguration.readOnly) {\n            input.setAttribute('readonly', true)\n        }\n\n        cellContentContainer.appendChild(input)\n\n        this.setCaretPosition(input, 0)\n\n        // Focus the element in the next frame.\n        // http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful\n        window.setTimeout(this.focusTimeoutHandler, 0)\n    }\n\n    /*\n     * Determines if the keyboard navigation in the specified direction is allowed\n     * by the cell processor. Some processors could reject the navigation, for example\n     * the string processor could cancel the left array navigation if the caret\n     * in the text input is not in the beginning of the text.\n     */\n    StringProcessor.prototype.keyNavigationAllowed = function(ev, direction) {\n        if (direction != 'left' && direction != 'right')\n            return true\n\n        if (!this.activeCell)\n            return true\n\n        var editor = this.activeCell.querySelector('.string-input')\n        if (!editor)\n            return true\n\n        var caretPosition = this.getCaretPosition(editor)\n\n        if (direction == 'left')\n            return caretPosition == 0\n\n        if (direction == 'right')\n            return caretPosition == editor.value.length\n\n        return true\n    }\n\n    /*\n     * This method is called when a cell value in the row changes.\n     */\n    StringProcessor.prototype.onRowValueChanged = function(columnName, cellElement) {\n        if (columnName != this.columnName) {\n            return\n        }\n\n        var value = this.tableObj.getCellValue(cellElement)\n\n        this.setViewContainerValue(cellElement, value)\n    }\n\n    StringProcessor.prototype.onFocusTimeout = function() {\n        if (!this.activeCell)\n            return\n\n        var editor = this.activeCell.querySelector('.string-input')\n        if (!editor)\n            return\n\n        editor.focus()\n        this.setCaretPosition(editor, 0)\n    }\n\n    StringProcessor.prototype.getCaretPosition = function(input) {\n        // TODO: use the foundation library\n\n        if (document.selection) {\n           var selection = document.selection.createRange()\n\n           selection.moveStart('character', -input.value.length)\n           return selection.text.length\n        }\n\n        if (input.selectionStart !== undefined)\n           return input.selectionStart\n\n        return 0\n    }\n\n    StringProcessor.prototype.setCaretPosition = function(input, position) {\n        // TODO: use the foundation library\n\n        if (document.selection) {\n            var range = input.createTextRange()\n\n            setTimeout(function() {\n                // Asynchronous layout update, better performance\n                range.collapse(true)\n                range.moveStart(\"character\", position)\n                range.moveEnd(\"character\", 0)\n                range.select()\n            }, 0)\n        }\n\n        if (input.selectionStart !== undefined) {\n            setTimeout(function() {\n                // Asynchronous layout update\n                input.selectionStart = position\n                input.selectionEnd = position\n            }, 0)\n       }\n\n        return 0\n    }\n\n    $.oc.table.processor.string = StringProcessor;\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.validator.base.js",
    "content": "/*\n * Base class for the table validators.\n */\n+function ($) { \"use strict\";\n\n    // VALIDATOR NAMESPACES\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.validator === undefined)\n        $.oc.table.validator = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = function(options) {\n        //\n        // State properties\n        //\n\n        this.options = options\n    }\n\n    /*\n     * Validates a value and returns the error message. If there\n     * are no errors, returns undefined.\n     * The rowData parameter is an object containing all values in the\n     * target row.\n     */\n    Base.prototype.validate = function(value, rowData) {\n        if (this.options.requiredWith !== undefined && !this.rowHasValue(this.options.requiredWith, rowData))\n            return\n\n        return this.validateValue(value, rowData)\n    }\n\n    /*\n     * Validates a value and returns the error message. If there\n     * are no errors, returns undefined. This method should be redefined\n     * in descendant classes.\n     * The rowData parameter is an object containing all values in the\n     * target row.\n     */\n    Base.prototype.validateValue = function(value, rowData) {\n        \n    }\n\n    Base.prototype.trim = function(value) {\n        if (String.prototype.trim)\n            return value.trim()\n\n        return value.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '')\n    }\n\n    Base.prototype.getMessage = function(defaultValue) {\n        if (this.options.message !== undefined)\n            return this.options.message\n\n        return defaultValue\n    }\n\n    Base.prototype.rowHasValue = function(columnName, rowData) {\n        if (rowData[columnName] === undefined)\n            return false\n\n        if (typeof rowData[columnName] == 'boolean')\n            return rowData[columnName]\n\n        var value = this.trim(String(rowData[columnName]))\n\n        return value.length > 0\n    }\n\n    $.oc.table.validator.base = Base;\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.validator.basenumber.js",
    "content": "/*\n * Base class for number validators.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.validator === undefined)\n        throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.validator.base,\n        BaseProto = Base.prototype\n\n    var BaseNumber = function(options) {\n        Base.call(this, options)\n    };\n\n    BaseNumber.prototype = Object.create(BaseProto)\n    BaseNumber.prototype.constructor = BaseNumber\n\n    BaseNumber.prototype.doCommonChecks = function(value) {\n        if (this.options.min !== undefined || this.options.max !== undefined) {\n            if (this.options.min !== undefined) {\n                if (this.options.min.value === undefined)\n                    throw new Error('The min.value parameter is not defined in the table validator configuration')\n\n                if (value < this.options.min.value) {\n                    return this.options.min.message !== undefined ?\n                        this.options.min.message :\n                        \"The value should not be less than \" + this.options.min.value\n                }\n            }\n\n            if (this.options.max !== undefined) {\n                if (this.options.max.value === undefined)\n                    throw new Error('The max.value parameter is not defined in the table validator configuration')\n\n                if (value > this.options.max.value) {\n                    return this.options.max.message !== undefined ?\n                        this.options.max.message :\n                        \"The value should not be more than \" + this.options.max.value\n                }\n            }\n        }\n\n        return\n    }\n\n    $.oc.table.validator.baseNumber = BaseNumber\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.validator.float.js",
    "content": "/*\n * Float table validator.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.validator === undefined)\n        throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");\n\n    if ($.oc.table.validator.baseNumber === undefined)\n        throw new Error(\"The $.oc.table.validator.baseNumber namespace is not defined. Make sure that the table.validator.baseNumber.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.validator.baseNumber,\n        BaseProto = Base.prototype\n\n    var Float = function(options) {\n        Base.call(this, options)\n    };\n\n    Float.prototype = Object.create(BaseProto)\n    Float.prototype.constructor = Float\n\n    /*\n     * Validates a value and returns the error message. If there\n     * are no errors, returns undefined.\n     * The rowData parameter is an object containing all values in the\n     * target row.\n     */\n    Float.prototype.validateValue = function(value, rowData) {\n        value = this.trim(value)\n\n        if (value.length == 0)\n            return\n\n        var testResult = this.options.allowNegative ? \n            /^[-]?([0-9]+\\.[0-9]+|[0-9]+)$/.test(value) : \n            /^([0-9]+\\.[0-9]+|[0-9]+)$/.test(value)\n\n        if (!testResult) {\n            var defaultMessage = this.options.allowNegative ?\n                'The value should be a floating point number.' :\n                'The value should be a positive floating point number';\n\n            return this.getMessage(defaultMessage)\n        }\n\n        return this.doCommonChecks(parseFloat(value))\n    }\n\n    $.oc.table.validator.float = Float\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.validator.integer.js",
    "content": "/*\n * Integer table validator.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.validator === undefined)\n        throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");\n\n    if ($.oc.table.validator.baseNumber === undefined)\n        throw new Error(\"The $.oc.table.validator.baseNumber namespace is not defined. Make sure that the table.validator.baseNumber.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.validator.baseNumber,\n        BaseProto = Base.prototype\n\n    var Integer = function(options) {\n        Base.call(this, options)\n    };\n\n    Integer.prototype = Object.create(BaseProto)\n    Integer.prototype.constructor = Integer\n\n    /*\n     * Validates a value and returns the error message. If there\n     * are no errors, returns undefined.\n     * The rowData parameter is an object containing all values in the\n     * target row.\n     */\n    Integer.prototype.validateValue = function(value, rowData) {\n        value = this.trim(value)\n\n        if (value.length == 0)\n            return\n\n        var testResult = this.options.allowNegative ? \n            /^\\-?[0-9]*$/.test(value) : \n            /^[0-9]*$/.test(value)\n\n        if (!testResult) {\n            var defaultMessage = this.options.allowNegative ?\n                'The value should be an integer.' :\n                'The value should be a positive integer';\n\n            return this.getMessage(defaultMessage)\n        }\n\n        return this.doCommonChecks(parseInt(value))\n    }\n\n    $.oc.table.validator.integer = Integer\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.validator.length.js",
    "content": "/*\n * String length table validator.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.validator === undefined)\n        throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.validator.base,\n        BaseProto = Base.prototype\n\n    var Length = function(options) {\n        Base.call(this, options)\n    };\n\n    Length.prototype = Object.create(BaseProto)\n    Length.prototype.constructor = Length\n\n    /*\n     * Validates a value and returns the error message. If there\n     * are no errors, returns undefined.\n     * The rowData parameter is an object containing all values in the\n     * target row.\n     */\n    Length.prototype.validateValue = function(value, rowData) {\n        value = this.trim(value)\n\n        if (value.length == 0)\n            return\n\n        if (this.options.min !== undefined || this.options.max !== undefined) {\n            if (this.options.min !== undefined) {\n                if (this.options.min.value === undefined)\n                    throw new Error('The min.value parameter is not defined in the Length table validator configuration')\n\n                if (value.length < this.options.min.value) {\n                    return this.options.min.message !== undefined ?\n                        this.options.min.message :\n                        \"The string should not be shorter than \" + this.options.min.value\n                }\n            }\n\n            if (this.options.max !== undefined) {\n                if (this.options.max.value === undefined)\n                    throw new Error('The max.value parameter is not defined in the Length table validator configuration')\n\n                if (value.length > this.options.max.value) {\n                    return this.options.max.message !== undefined ?\n                        this.options.max.message :\n                        \"The string should not be longer than \" + this.options.max.value\n                }\n            }\n        }\n\n        return\n    }\n\n    $.oc.table.validator.length = Length\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.validator.regex.js",
    "content": "/*\n * Regex length table validator.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.validator === undefined)\n        throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.validator.base,\n        BaseProto = Base.prototype\n\n    var Regex = function(options) {\n        Base.call(this, options)\n    };\n\n    Regex.prototype = Object.create(BaseProto)\n    Regex.prototype.constructor = Regex\n\n    /*\n     * Validates a value and returns the error message. If there\n     * are no errors, returns undefined.\n     * The rowData parameter is an object containing all values in the\n     * target row.\n     */\n    Regex.prototype.validateValue = function(value, rowData) {\n        value = this.trim(value)\n\n        if (value.length == 0)\n            return\n\n        if (this.options.pattern === undefined)\n            throw new Error('The pattern parameter is not defined in the Regex table validator configuration')\n\n        var regexObj = new RegExp(this.options.pattern, this.options.modifiers)\n\n        if (!regexObj.test(value))\n            return this.getMessage(\"Invalid value format.\")\n\n        return\n    }\n\n    $.oc.table.validator.regex = Regex\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/assets/js/table.validator.required.js",
    "content": "/*\n * Required table validator.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACE CHECK\n    // ============================\n\n    if ($.oc.table === undefined)\n        throw new Error(\"The $.oc.table namespace is not defined. Make sure that the table.js script is loaded.\");\n\n    if ($.oc.table.validator === undefined)\n        throw new Error(\"The $.oc.table.validator namespace is not defined. Make sure that the table.validator.base.js script is loaded.\");\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.table.validator.base,\n        BaseProto = Base.prototype\n\n    var Required = function(options) {\n        Base.call(this, options)\n    };\n\n    Required.prototype = Object.create(BaseProto)\n    Required.prototype.constructor = Required\n\n    /*\n     * Validates a value and returns the error message. If there\n     * are no errors, returns undefined.\n     * The rowData parameter is an object containing all values in the\n     * target row.\n     */\n    Required.prototype.validateValue = function(value, rowData) {\n        value = this.trim(value)\n\n        if (value.length === 0)\n            return this.getMessage(\"The value should not be empty.\")\n\n        return\n    }\n\n    $.oc.table.validator.required = Required\n}(window.jQuery);"
  },
  {
    "path": "modules/backend/widgets/table/partials/_table.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    data-control=\"table\"\n    class=\"control-table\"\n    data-columns=\"<?= e(json_encode($columns)) ?>\"\n    data-data=\"<?= e($data) ?>\"\n    data-alias=\"<?= e($this->alias) ?>\"\n    data-field-name=\"<?= e($this->fieldName) ?>\"\n    data-postback-handler-name=\"<?= e($postbackHandlerName) ?>\"\n    data-postback-handler-wild=\"<?= e($postbackHandlerWild) ?>\"\n    data-adding=\"<?= e($adding) ?>\"\n    data-searching=\"<?= e($searching) ?>\"\n    data-deleting=\"<?= e($deleting) ?>\"\n    data-toolbar=\"<?= e($toolbar) ?>\"\n    data-height=\"<?= e($height) ?>\"\n    data-records-per-page=\"<?= e($recordsPerPage) ?>\"\n    data-key-column=\"<?= e($recordsKeyFrom) ?>\"\n    data-client-data-source-class=\"<?= e($clientDataSourceClass) ?>\"\n    data-dynamic-height=\"<?= e($dynamicHeight) ?>\"\n>\n    <script type=\"text/template\" data-table-toolbar>\n        <div class=\"toolbar\">\n            <button type=\"button\" class=\"backend-toolbar-button control-button add-table-row-below\" data-cmd=\"record-add\">\n                <i class=\"icon-list-add\"></i>\n                <span class=\"button-label\"><?= e($btnAddRowLabel) ?></span>\n            </button>\n\n            <button type=\"button\" class=\"backend-toolbar-button control-button add-table-row-below\" data-cmd=\"record-add-below\">\n                <i class=\"icon-add-below\"></i>\n                <?= e($btnAddRowBelowLabel) ?>\n            </button>\n\n            <button type=\"button\" class=\"backend-toolbar-button control-button add-table-row-above\" data-cmd=\"record-add-above\">\n                <i class=\"icon-add-above\"></i>\n                Add Row Above\n            </button>\n\n            <button type=\"button\" class=\"backend-toolbar-button control-button delete-table-row\" data-cmd=\"record-delete\">\n                <i class=\"icon-list-remove\"></i>\n                <?= e($btnDeleteRowLabel) ?>\n            </button>\n        </div>\n    </script>\n    <script type=\"text/template\" data-table-toolbar-search>\n        <div class=\"table-search\">\n            <input\n                placeholder=\"<?= e(trans('backend::lang.list.search_prompt')) ?>\"\n                name=\"search\"\n                id=\"search\"\n                value=\"<?= e(get('search')) ?>\"\n                type=\"text\"\n                autocomplete=\"off\"\n                class=\"table-search-input form-control\" />\n        </div>\n    </script>\n</div>\n"
  },
  {
    "path": "modules/backend/widgets/toolbar/partials/_toolbar.php",
    "content": "<div\n    class=\"toolbar-widget <?= $cssClasses ?>\"\n    id=\"<?= $this->getId() ?>\"\n    <?= $this->listWidgetId ? 'data-list-linkage=\"'.$this->listWidgetId.'\"' : '' ?>\n>\n    <div class=\"control-toolbar\">\n\n        <!-- Control Panel -->\n        <div class=\"toolbar-item toolbar-primary\">\n            <?= $controlPanel ?>\n        </div>\n\n        <!-- List Search -->\n        <?php if ($search): ?>\n            <div class=\"toolbar-item\" data-calculate-width>\n                <?= $search ?>\n            </div>\n        <?php endif ?>\n\n        <!-- List Setup -->\n        <?php if ($setupHandler): ?>\n            <div class=\"toolbar-item toolbar-setup\">\n                <a href=\"javascript:;\"\n                    title=\"<?= __(\"List Setup\") ?>\"\n                    data-control=\"popup\"\n                    data-handler=\"<?= $setupHandler ?>\"><span></span></a>\n            </div>\n        <?php endif ?>\n\n    </div>\n</div>\n"
  },
  {
    "path": "modules/cms/ServiceProvider.php",
    "content": "<?php namespace Cms;\n\nuse Event;\nuse Backend;\nuse BackendAuth;\nuse Cms\\Models\\ThemeLog;\nuse Cms\\Models\\ThemeData;\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\CmsObject;\nuse Cms\\Classes\\Page as CmsPage;\nuse Cms\\Classes\\ThemeManager;\nuse Cms\\Classes\\CmsObjectCache;\nuse Cms\\Widgets\\PageLookup;\nuse Cms\\Widgets\\SnippetLookup;\nuse Backend\\Models\\UserRole;\nuse Backend\\Classes\\Controller as BackendController;\nuse System\\Classes\\SettingsManager;\nuse October\\Rain\\Support\\ModuleServiceProvider;\n\n/**\n * ServiceProvider for CMS module\n */\nclass ServiceProvider extends ModuleServiceProvider\n{\n    /**\n     * register the service provider.\n     */\n    public function register()\n    {\n        parent::register('cms');\n\n        $this->registerSingletons();\n        $this->registerThemeLogging();\n        $this->registerCombinerEvents();\n        $this->registerThemeSiteEvents();\n        $this->registerThemeTranslations();\n        $this->registerConsole();\n        $this->registerRenamedClasses();\n\n        CmsObjectCache::flush();\n\n        // Backend specific\n        if ($this->app->runningInBackend() || $this->app->runningInOctane()) {\n            $this->registerPageLookupInstance();\n        }\n    }\n\n    /**\n     * boot the module events.\n     */\n    public function boot()\n    {\n        parent::boot('cms');\n\n        $this->bootEditorEvents();\n        $this->bootPageLookupEvents();\n    }\n\n    /**\n     * registerSingletons\n     */\n    protected function registerSingletons()\n    {\n        $this->app->singleton('cms.helper', \\Cms\\Helpers\\Cms::class);\n        $this->app->singleton('cms.components', \\Cms\\Classes\\ComponentManager::class);\n        $this->app->singleton('cms.snippets', \\Cms\\Classes\\SnippetManager::class);\n        $this->app->singleton('cms.themes', \\Cms\\Classes\\ThemeManager::class);\n    }\n\n    /**\n     * registerConsole for command line specifics\n     */\n    protected function registerConsole()\n    {\n        $this->discoverConsoleCommands('cms');\n    }\n\n    /**\n     * registerComponents\n     */\n    public function registerComponents()\n    {\n        return [\n           \\Cms\\Components\\ViewBag::class => 'viewBag',\n           \\Cms\\Components\\Resources::class => 'resources',\n           \\Cms\\Components\\SitePicker::class => 'sitePicker'\n        ];\n    }\n\n    /**\n     * registerThemeLogging on templates\n     */\n    protected function registerThemeLogging()\n    {\n        CmsObject::extend(function ($model) {\n            ThemeLog::bindEventsToModel($model);\n        });\n    }\n\n    /**\n     * registerCombinerEvents for the asset combiner.\n     */\n    protected function registerCombinerEvents()\n    {\n        if ($this->app->runningInBackend() || $this->app->runningInConsole()) {\n            return;\n        }\n\n        Event::listen('cms.combiner.beforePrepare', function ($combiner, $assets) {\n            $filters = array_flatten($combiner->getFilters());\n            ThemeData::applyAssetVariablesToCombinerFilters($filters);\n        });\n\n        Event::listen('cms.combiner.getCacheKey', function ($combiner, &$cacheKey) {\n            $cacheKey = $cacheKey . ThemeData::getCombinerCacheKey();\n        });\n    }\n\n    /**\n     * registerThemeSiteEvents will reset the cache in case of a race condition where\n     * the theme is accessed before the site is set.\n     */\n    protected function registerThemeSiteEvents()\n    {\n        Event::listen('site.changed', function() {\n            Theme::resetCache();\n            ThemeManager::instance()->bootAll();\n        });\n    }\n\n    /**\n     * registerThemeTranslations localization from an active theme.\n     */\n    protected function registerThemeTranslations()\n    {\n        $this->callAfterResolving('translator', function() {\n            ThemeManager::instance()->bootAll();\n        });\n    }\n\n    /**\n     * registerReportWidgets\n     */\n    public function registerReportWidgets()\n    {\n        return [\n            \\Cms\\ReportWidgets\\ActiveTheme::class => [\n                'label' => 'cms::lang.dashboard.active_theme.widget_title_default',\n                'context' => 'dashboard'\n            ],\n        ];\n    }\n\n    /**\n     * registerPermissions\n     */\n    public function registerPermissions()\n    {\n        return [\n            // General\n            'general.view_offline' => [\n                'label' => 'View Website During Maintenance',\n                'tab' => 'General',\n                'order' => 100\n            ],\n\n            // Editor\n            'editor.cms_content' => [\n                'label' => 'Manage Content',\n                'comment' => 'cms::lang.permissions.manage_content',\n                'tab' => 'Editor',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 200\n            ],\n            'editor.cms_assets' => [\n                'label' => 'Manage Asset Files',\n                'comment' => 'cms::lang.permissions.manage_assets',\n                'tab' => 'Editor',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 300\n            ],\n            'editor.cms_pages' => [\n                'label' => 'Manage Pages',\n                'comment' => 'cms::lang.permissions.manage_pages',\n                'tab' => 'Editor',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 400\n            ],\n            'editor.cms_partials' => [\n                'label' => 'Manage Partials',\n                'comment' => 'cms::lang.permissions.manage_partials',\n                'tab' => 'Editor',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 500\n            ],\n            'editor.cms_layouts' => [\n                'label' => 'Manage Layouts',\n                'comment' => 'cms::lang.permissions.manage_layouts',\n                'tab' => 'Editor',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 600\n            ],\n\n            // Themes\n            'cms.themes' => [\n                'label' => 'Manage Themes',\n                'comment' => 'cms::lang.permissions.manage_themes',\n                'tab' => 'Themes',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 300\n            ],\n            'cms.themes.create' => [\n                'label' => 'Create Theme',\n                'tab' => 'Themes',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 400\n            ],\n            'cms.themes.activate' => [\n                'label' => 'Activate Theme',\n                'tab' => 'Themes',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 600\n            ],\n            'cms.themes.delete' => [\n                'label' => 'Delete Theme',\n                'tab' => 'Themes',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 600\n            ],\n            'cms.maintenance_mode' => [\n                'label' => 'Manage Maintenance Mode',\n                'tab' => 'Themes',\n                'order' => 900\n            ],\n            'cms.theme_customize' => [\n                'label' => 'Customize Theme',\n                'comment' => 'cms::lang.permissions.manage_theme_options',\n                'tab' => 'Themes',\n                'order' => 400\n            ],\n        ];\n    }\n\n    /**\n     * registerFormWidgets\n     */\n    public function registerFormWidgets()\n    {\n        return [\n            \\Cms\\FormWidgets\\PageFinder::class => 'pagefinder'\n        ];\n    }\n\n    /**\n     * registerMarkupTags\n     */\n    public function registerMarkupTags()\n    {\n        return [\n            'filters' => [\n                'link' => [\\Cms\\Classes\\PageManager::class, 'url', false],\n            ],\n            'functions' => [\n                'link' => [\\Cms\\Classes\\PageManager::class, 'resolve', false],\n            ]\n        ];\n    }\n\n    /**\n     * registerSettings\n     */\n    public function registerSettings()\n    {\n        return [\n            'theme' => [\n                'label' => 'Site Theme',\n                'description' => 'Manage the front-end theme and customization options.',\n                'category' => SettingsManager::CATEGORY_CMS,\n                'icon' => 'ph ph-monitor',\n                'url' => Backend::url('cms/themes'),\n                'permissions' => ['cms.themes', 'cms.theme_customize'],\n                'order' => 300\n            ],\n            'maintenance_settings' => [\n                'label' => 'Maintenance Mode',\n                'description' => 'Configure the maintenance mode page and toggle the setting.',\n                'category' => SettingsManager::CATEGORY_CMS,\n                'icon' => 'icon-power',\n                'class' => \\Cms\\Models\\MaintenanceSetting::class,\n                'permissions' => ['cms.maintenance_mode'],\n                'order' => 400\n            ],\n            'theme_logs' => [\n                'label' => 'cms::lang.theme_log.menu_label',\n                'description' => 'cms::lang.theme_log.menu_description',\n                'category' => SettingsManager::CATEGORY_LOGS,\n                'icon' => 'icon-magic',\n                'url' => Backend::url('cms/themelogs'),\n                'permissions' => ['utilities.logs'],\n                'order' => 910,\n                'keywords' => 'theme change log'\n            ],\n        ];\n    }\n\n    /**\n     * bootPageLookupEvents\n     */\n    protected function bootPageLookupEvents()\n    {\n        Event::listen(['cms.pageLookup.listTypes', 'pages.menuitem.listTypes'], function () {\n            return [\n                'cms-page' => 'CMS Page'\n            ];\n        });\n\n        Event::listen(['cms.pageLookup.getTypeInfo', 'pages.menuitem.getTypeInfo'], function ($type) {\n            if ($type === 'cms-page') {\n                return CmsPage::getMenuTypeInfo($type);\n            }\n        });\n\n        Event::listen(['cms.pageLookup.resolveItem', 'pages.menuitem.resolveItem'], function ($type, $item, $url, $theme) {\n            if ($type === 'cms-page') {\n                return CmsPage::resolveMenuItem($item, $url, $theme);\n            }\n        });\n    }\n\n    /**\n     * bootEditorEvents handles editor events\n     */\n    protected function bootEditorEvents()\n    {\n        Event::listen('editor.extension.register', function () {\n            return \\Cms\\Classes\\EditorExtension::class;\n        });\n    }\n\n    /**\n     * registerPageLookupInstance ensures page lookup widget is available on all backend pages\n     */\n    protected function registerPageLookupInstance()\n    {\n        BackendController::extend(function($controller) {\n            if (BackendAuth::getUser()) {\n                $manager = new PageLookup($controller, ['alias' => 'ocpagelookup']);\n                $manager->bindToController();\n\n                $manager = new SnippetLookup($controller, ['alias' => 'ocsnippetlookup']);\n                $manager->bindToController();\n            }\n        });\n    }\n\n    /**\n     * registerRenamedClasses\n     */\n    protected function registerRenamedClasses()\n    {\n        $this->app->registerClassAliases([\n            \\Cms\\Classes\\PageLookup::class => \\Cms\\Classes\\PageManager::class,\n        ]);\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/css/themelogs.css",
    "content": "del {\n    text-decoration: none;\n    color: var(--bs-danger-text);\n    background: var(--bs-danger-bg-subtle);\n}\nins {\n    background: var(--bs-success-bg-subtle);\n    color: var(--bs-success-text);\n    text-decoration: none;\n}\n"
  },
  {
    "path": "modules/cms/assets/css/themes.css",
    "content": ".theme-selector-layout .theme-item>div{box-sizing:border-box;padding:24px}.theme-selector-layout .theme-thumbnail{background:var(--bs-secondary-bg);border-top:1px solid var(--bs-border-color);width:288px}.theme-selector-layout .theme-thumbnail img{opacity:.6;width:240px}.theme-selector-layout .theme-description{border-top:1px solid var(--oc-primary-border);flex-grow:1}.theme-selector-layout .theme-description h3,.theme-selector-layout .theme-description p{opacity:.6}.theme-selector-layout .theme-description h3{color:var(--bs-body-color);display:inline-block;font-size:28px;font-weight:400;margin:0 0 25px}.theme-selector-layout .theme-description p.author{color:var(--oc-primary-color);display:inline-block;font-size:13px}.theme-selector-layout .theme-description p.description{color:var(--oc-primary-color);font-size:14px;line-height:180%;margin-bottom:30px}.theme-selector-layout .theme-description .controls .btn{margin-right:3.5px}.theme-selector-layout .theme-description .controls .btn>i{font-size:16px;margin-right:5px;position:relative;top:1px}.theme-selector-layout .theme-description .controls .btn>i.icon-star{color:#f1a84e}.theme-selector-layout .theme-description .controls .dropdown{display:inline-block}.theme-selector-layout .theme-item.active .theme-thumbnail{background:var(--bs-secondary);border-top-color:var(--bs-border-color)}.theme-selector-layout .theme-item.active .thumbnail-container{position:relative}.theme-selector-layout .theme-item.active .thumbnail-container:after{border-bottom:14px solid transparent;border-left:15px solid var(--bs-secondary);border-top:14px solid transparent;content:\"\";display:block;height:0;margin-top:-14px;position:absolute;right:-35px;top:50%;width:0}.theme-selector-layout .theme-item.active .theme-description h3,.theme-selector-layout .theme-item.active .theme-description p,.theme-selector-layout .theme-item.active .theme-thumbnail img,.theme-selector-layout .theme-item:hover .theme-description h3,.theme-selector-layout .theme-item:hover .theme-description p,.theme-selector-layout .theme-item:hover .theme-thumbnail img{opacity:1}.theme-selector-layout .theme-item.theme-item-links .theme-description,.theme-selector-layout .theme-item.theme-item-links .theme-thumbnail,.theme-selector-layout .theme-item:first-child .theme-description,.theme-selector-layout .theme-item:first-child .theme-thumbnail{border-top:none}.theme-selector-layout .theme-item.theme-item-links .theme-thumbnail{border-bottom:1px solid var(--bs-border-color)}.theme-selector-layout .theme-item.theme-item-links .theme-description{border-bottom:1px solid var(--oc-primary-border)}.theme-selector-layout .create-new-theme{margin-bottom:10px}.theme-selector-layout .create-new-theme,.theme-selector-layout .find-more-themes{background:var(--oc-secondary-bg);border-radius:4px;color:var(--bs-emphasis-color);display:block;padding:20px;text-decoration:none}.theme-selector-layout .create-new-theme:hover,.theme-selector-layout .find-more-themes:hover{background:var(--oc-selection);color:#fff}@media (max-width:768px){.theme-selector-layout .theme-item{flex-direction:column}.theme-selector-layout .theme-item .thumbnail-container:after{display:none!important}.theme-selector-layout .theme-item>div{display:block!important;flex-grow:1;height:auto!important;width:auto!important}.theme-selector-layout .theme-thumbnail img{width:100%}.theme-selector-layout .theme-item-links .theme-thumbnail{background:transparent;padding:0}}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.extension.documentcomponent.base.js",
    "content": "import { DocumentComponentBase } from '../../../editor/assets/js/editor.extension.documentcomponent.base.js';\nimport { host as inspectorHost } from '../../../backend/vuecomponents/inspector/assets/js/classes/index.js';\nimport { modalUtils } from '../../../backend/vuecomponents/modal/assets/js/classes/index.js';\n\nexport const CmsDocumentComponentBase = {\n    extends: DocumentComponentBase,\n    data: function() {\n        return {\n            toolbarDisabled: false,\n            savingDocument: false,\n            documentSavedMessage: this.trans('cms::lang.template.saved'),\n            documentReloadedMessage: this.trans('cms::lang.template.reloaded'),\n            documentDeletedMessage: this.trans('cms::lang.template.deleted')\n        };\n    },\n\n    computed: {\n        databaseTemplatesEnabled: function computeDatabaseTemplatesEnabled() {\n            return this.extension.customData.databaseTemplatesEnabled;\n        },\n\n        hasVisibleComponents: function computeHasVisibleComponents() {\n            if (!this.documentData.components) {\n                return false;\n            }\n\n            return this.documentData.components.some((component) => !component.isHidden);\n        },\n\n        customToolbarButtons: function computeCustomToolbarButtons() {\n            const buttons = this.extension.getCustomToolbarSettingsButtons(this.documentType);\n\n            if (!Array.isArray(buttons) || !buttons.length) {\n                return [];\n            }\n\n            let result = [];\n\n            result.push({\n                type: 'separator'\n            });\n\n            buttons.forEach((button, index) => {\n                let buttonDefinition = {\n                    type: 'button',\n                    icon: typeof button.icon === 'string' ? button.icon : undefined,\n                    label: button.button,\n                    command: 'custom-toolbar-button@' + index\n                };\n\n                result.push(buttonDefinition);\n            });\n\n            result.push({\n                type: 'separator'\n            });\n\n            return result;\n        },\n\n        viewBagComponent: function computeViewBagComponent() {\n            if (!this.documentData.components) {\n                return undefined;\n            }\n\n            if (!Array.isArray(this.documentData.components)) {\n                return undefined;\n            }\n\n            return this.documentData.components.find((component) => {\n                return component.className === 'Cms\\\\Components\\\\ViewBag';\n            });\n        }\n    },\n\n    methods: {\n        getRootProperties: function getRootProperties() {\n            throw new Error('getRootProperties must be implemented in CmsDocumentEditorComponentBase descendants.');\n        },\n\n        monacoLoaded: function monacoLoaded() {\n            // Overwrite this method in subclasses\n        },\n\n        getInfoPopupItems: function getInfoPopupItems() {\n            const mtime = this.documentMetadata.mtime;\n            const storage = [this.trans('cms::lang.template.storage_filesystem')];\n\n            if (this.documentMetadata.canResetFromTemplateFile) {\n                storage.push(this.trans('cms::lang.template.storage_database'));\n            }\n\n            return [\n                {\n                    title: this.trans('cms::lang.template.last_modified'),\n                    value: moment.unix(mtime).format('ll LTS')\n                },\n                {\n                    title: this.trans('cms::lang.template.storage'),\n                    value: storage.join(', ')\n                },\n                {\n                    title: this.trans('cms::lang.template.template_file'),\n                    value: this.documentMetadata.fullPath\n                }\n            ];\n        },\n\n        getSaveDocumentData: function getSaveDocumentData(inspectorDocumentData) {\n            const rootProperties = this.getRootProperties();\n            const documentData = inspectorDocumentData ? inspectorDocumentData : this.documentData;\n\n            const data = $.oc.vueUtils.getCleanObject(documentData);\n            const result = {\n                settings: {}\n            };\n\n            // Copy root properties\n            //\n            Object.keys(data).forEach((property) => {\n                if (property === 'settings') {\n                    return;\n                }\n\n                if (rootProperties.indexOf(property) !== -1) {\n                    result[property] = data[property];\n                }\n                else {\n                    result.settings[property] = data[property];\n                }\n            });\n\n            // Copy custom settings properties\n            //\n            if (typeof data.settings === 'object') {\n                Object.keys(data.settings).forEach((property) => {\n                    if (rootProperties.indexOf(property) === -1 && result.settings[property] === undefined) {\n                        result.settings[property] = data.settings[property];\n                    }\n                });\n            }\n\n            return result;\n        },\n\n        getDocumentSavedMessage: function getDocumentSavedMessage(responseData) {\n            if (responseData.templateFileUpdated) {\n                return this.trans('cms::lang.template.file_updated');\n            }\n\n            if (this.databaseTemplatesEnabled) {\n                // TODO - this must be ignored for assets\n                return this.trans('cms::lang.template.saved_to_db');\n            }\n\n            return this.documentSavedMessage;\n        },\n\n        resetFromTemplateFile: async function resetFromTemplateFile() {\n            try {\n                var result = await this.requestDocumentFromServer(\n                    {\n                        resetFromTemplateFile: true\n                    },\n                    true\n                );\n                this.documentCreatedOrLoaded();\n                this.documentLoaded(result);\n                oc.snackbar.show(this.trans('cms::lang.template.reset_from_template_success'));\n            }\n            catch (error) {\n                let errorText = error.responseText;\n                modalUtils.showAlert(this.trans('editor::lang.common.error'), errorText);\n            }\n        },\n\n        addComponent: function addComponent(componentData) {\n            if (!Array.isArray(this.documentData.components)) {\n                return;\n            }\n\n            let counter = 1,\n                originalAlias = componentData.alias,\n                alias = componentData.alias;\n\n            while (\n                this.documentData.components.some((component) => {\n                    return component.alias == alias;\n                })\n            ) {\n                alias = originalAlias + (++counter);\n            }\n\n            componentData.alias = alias;\n            componentData.propertyValues['oc.alias'] = alias;\n            componentData.propertyValues = JSON.stringify(componentData.propertyValues);\n            this.documentData.components.push(componentData);\n\n            return alias;\n        },\n\n        postProcessToolbarElements: function postProcessToolbarElements(\n            toolbarElements,\n            noDatabaseTemplateFeatures\n        ) {\n            let dbOperationsMenu = undefined;\n            if (this.databaseTemplatesEnabled && !noDatabaseTemplateFeatures) {\n                dbOperationsMenu = [\n                    {\n                        type: 'text',\n                        command: 'update-template-file',\n                        label: this.trans('cms::lang.template.update_file'),\n                        disabled: !this.documentMetadata.canUpdateTemplateFile || this.isDocumentChanged\n                    },\n                    {\n                        type: 'text',\n                        command: 'reset-from-template-file',\n                        label: this.trans('cms::lang.template.reset_from_file'),\n                        disabled: !this.documentMetadata.canResetFromTemplateFile || this.isDocumentChanged\n                    }\n                ];\n            }\n\n            toolbarElements.some((element) => {\n                if (element.command === 'save') {\n                    element.menuitems = dbOperationsMenu;\n                    return true;\n                }\n            });\n\n            if ($.oc.editor.application.isDirectDocumentMode) {\n                toolbarElements.forEach((element) => {\n                    if (\n                        element.command === 'document:toggleToolbar' ||\n                        element.command === 'delete' ||\n                        element.visibilityTag === 'hide-for-direct-document') {\n                        element.hidden = true;\n                    }\n                });\n            }\n\n            return toolbarElements;\n        },\n\n        showTemplateInfo: function showTemplateInfo() {\n            this.application.showEditorDocumentInfoPopup(this.getInfoPopupItems(), this.documentMetadata.typeName);\n        },\n\n        expandComponent: async function expandComponent(payload) {\n            this.processing = true;\n\n            try {\n                const data = await this.ajaxRequest('onCommand', {\n                    extension: this.namespace,\n                    command: 'onExpandCmsComponent',\n                    documentMetadata: this.documentMetadata,\n                    documentData: this.documentData,\n                    componentAlias: payload.alias\n                });\n\n                this.processing = false;\n                this.$refs.editor.replaceAsSnippet(payload.model, payload.range, data.content.trim());\n            } catch (error) {\n                this.processing = false;\n                modalUtils.showAlert(\n                    $.oc.editor.getLangStr('editor::lang.common.error'),\n                    error.responseText\n                );\n            }\n        },\n\n        handleCustomToolbarButton: function handleCustomToolbarButton(command) {\n            const parts = command.split('@');\n            const buttonIndex = parts[1];\n            const buttons = this.extension.getCustomToolbarSettingsButtons(this.documentType);\n\n            if (!buttons[buttonIndex]) {\n                return;\n            }\n\n            const button = buttons[buttonIndex];\n            const settingsProperties = button.properties;\n\n            if (typeof settingsProperties !== 'object') {\n                throw new Error('Custom button properties must be an array');\n            }\n\n            let dataHolder = this.documentData;\n            if (button.useViewBag) {\n                if (!this.viewBagComponent) {\n                    throw new Error('View bag component not found');\n                }\n\n                dataHolder = JSON.parse(this.viewBagComponent.propertyValues);\n            }\n\n            inspectorHost\n                .showModal(\n                    button.popupTitle ? button.popupTitle : this.documentSettingsPopupTitle,\n                    dataHolder,\n                    settingsProperties,\n                    'cms-custom-settings',\n                    {\n                        buttonText: this.trans('backend::lang.form.apply'),\n                        resizableWidth: true,\n                        beforeApplyCallback: async (updatedDataObj) => {\n                            if (button.useViewBag) {\n                                this.viewBagComponent.propertyValues = JSON.stringify(updatedDataObj);\n                            }\n                        }\n                    }\n                )\n                .then($.noop, $.noop);\n        },\n\n        onEditorDragDrop: function onDragDrop(editor, ev) {\n            ev.preventDefault();\n\n            if (!this.defMarkup) {\n                return;\n            }\n\n            const currentModelUri = this.$refs.editor.getCurrentModelUri();\n            if (currentModelUri != this.defMarkup.uriString) {\n                return;\n            }\n\n            const componentDefinitionStr = ev.dataTransfer.getData('application/october-component');\n            if (!componentDefinitionStr) {\n                return;\n            }\n\n            const componentDefinition = JSON.parse(componentDefinitionStr);\n            const alias = this.addComponent(componentDefinition);\n\n            this.$refs.editor.insertText(\"{% component '\" + alias + \"' %}\");\n        },\n\n        onComponentRemove: function onComponentRemove(component) {\n            if (this.documentData.markup && this.defMarkup) {\n                const componentStr = \"{% component '\" + component.alias + \"' %}\";\n                this.$refs.editor.replaceText(componentStr, '', this.defMarkup);\n            }\n        },\n\n        onParentTabSelected: function onParentTabSelected() {\n            if (this.$refs.editor) {\n                this.$nextTick(() => this.$refs.editor.layout());\n            }\n        },\n\n        onToolbarCommand: function onToolbarCommand(command, isHotkey) {\n            this.handleBasicDocumentCommands(command, isHotkey);\n\n            if (command === 'show-components') {\n                this.store.dispatchCommand('cms:show-component-list');\n            }\n\n            if (command === 'update-template-file') {\n                this.saveDocument(false, null, {\n                    updateTemplateFile: true\n                }).then($.noop, $.noop);\n            }\n\n            if (command === 'reset-from-template-file') {\n                this.resetFromTemplateFile().then($.noop, $.noop);\n            }\n\n            if (command === 'show-template-info') {\n                this.showTemplateInfo();\n            }\n\n            if (command.startsWith('custom-toolbar-button@')) {\n                this.handleCustomToolbarButton(command);\n            }\n        },\n\n        onInspectorShowed: function onInspectorShowed() {\n            this.toolbarDisabled = true;\n        },\n\n        onInspectorHidden: function onInspectorHidden() {\n            this.toolbarDisabled = false;\n        },\n\n        onMonacoLoaded: function onMonacoLoaded(monaco, editor) {\n            this.extension.intellisense.init(monaco, editor, this.$refs.editor);\n            this.monacoLoaded();\n        },\n\n        onMonacoDispose: function onMonacoDispose(editor) {\n            this.extension.intellisense.disposeForEditor(editor);\n        },\n\n        onEditorContextMenu: function onEditorContextMenu(payload) {\n            this.extension.intellisense.onContextMenu(payload);\n        },\n\n        onEditorFilterSupportedActions: function onEditorFilterSupportedActions(payload) {\n            this.extension.intellisense.onFilterSupportedActions(payload);\n        },\n\n        onEditorCustomEvent: function onEditorCustomEvent(eventName, payload) {\n            if (eventName == 'expandComponent') {\n                this.expandComponent(payload);\n            }\n        },\n\n        onApplicationCommand: function onApplicationCommand(command, payload) {\n            if (command === 'cms:intellisense-trigger-completion') {\n                // Not in use\n                this.$refs.editor.editor.trigger(payload.source, 'editor.action.triggerSuggest', payload.options);\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.extension.documentcontroller.asset.js",
    "content": "import { DocumentControllerBase } from '../../../editor/assets/js/editor.extension.documentcontroller.base.js';\nimport { EditorCommand } from '../../../editor/assets/js/editor.command.js';\nimport { DocumentUri } from '../../../editor/assets/js/editor.documenturi.js';\nimport { FileSystemFunctions } from '../../../editor/assets/js/editor.extension.filesystemfunctions.js';\nimport { utils as treeviewUtils } from '../../../backend/vuecomponents/treeview/assets/js/classes/index.js';\n\nexport class DocumentControllerAsset extends DocumentControllerBase {\n    get documentType() {\n        return 'cms-asset';\n    }\n\n    get vueEditorComponentName() {\n        return 'cms-editor-component-asset-editor';\n    }\n\n    beforeDocumentOpen(commandObj, nodeData) {\n        if (!nodeData.userData) {\n            return false;\n        }\n\n        if (nodeData.userData.isFolder) {\n            return false;\n        }\n\n        if (nodeData.userData.isEditable) {\n            return true;\n        }\n\n        return false;\n    }\n\n    initListeners() {\n        this.on('cms:navigator-context-menu-display', this.getNavigatorContextMenuItems);\n        this.on('cms:cms-asset-create-directory', this.onCreateDirectory);\n        this.on('cms:cms-asset-delete', this.onDeleteAssetOrDirectory);\n        this.on('cms:cms-asset-rename', this.onRenameAssetOrDirectory);\n        this.on('cms:navigator-node-moved', this.onNavigatorNodeMoved);\n        this.on('cms:navigator-external-drop', this.onNavigatorExternalDrop);\n        this.on('cms:cms-asset-upload', this.onUploadDocument);\n        this.on('cms:cms-asset-open', this.onOpenAsset);\n        this.on('cms:navigator-nodes-updated', this.onNavigatorNodesUpdated);\n    }\n\n    getNavigatorContextMenuItems(commandObj, payload) {\n        const uri = DocumentUri.parse(payload.nodeData.uniqueKey);\n        const parentPath = payload.nodeData.userData.path;\n\n        if (uri.documentType !== this.documentType) {\n            return;\n        }\n\n        if (payload.nodeData.userData.isFolder) {\n            payload.menuItems.push({\n                type: 'text',\n                icon: 'icon-create',\n                command: new EditorCommand('cms:create-document@' + this.documentType, {\n                    path: parentPath\n                }),\n                label: this.trans('cms::lang.asset.new')\n            });\n\n            payload.menuItems.push({\n                type: 'text',\n                icon: 'icon-upload',\n                command: new EditorCommand('cms:cms-asset-upload@' + this.documentType, {\n                    path: parentPath\n                }),\n                label: this.trans('cms::lang.asset.upload_files')\n            });\n\n            payload.menuItems.push({\n                type: 'text',\n                icon: 'icon-folder',\n                command: 'cms:cms-asset-create-directory@' + parentPath,\n                label: this.trans('cms::lang.asset.create_directory')\n            });\n\n            payload.menuItems.push({\n                type: 'separator'\n            });\n        }\n        else {\n            if (!payload.nodeData.userData.isEditable) {\n                payload.menuItems.push({\n                    type: 'text',\n                    icon: 'icon-fullscreen',\n                    command: new EditorCommand('cms:cms-asset-open@' + parentPath, {\n                        url: payload.nodeData.userData.url\n                    }),\n                    label: this.trans('cms::lang.asset.open')\n                });\n            }\n        }\n\n        payload.menuItems.push({\n            type: 'text',\n            icon: 'icon-terminal',\n            command: new EditorCommand('cms:cms-asset-rename@' + parentPath, {\n                fileName: payload.nodeData.userData.filename\n            }),\n            label: this.trans('cms::lang.asset.rename')\n        });\n\n        payload.menuItems.push({\n            type: 'text',\n            icon: 'icon-delete',\n            command: new EditorCommand('cms:cms-asset-delete@' + parentPath, {\n                itemsDetails: payload.itemsDetails\n            }),\n            label: this.trans('cms::lang.asset.delete')\n        });\n    }\n\n    getAllAssetFilenames() {\n        if (this.cachedAssetList) {\n            return this.cachedAssetList;\n        }\n\n        const assetsNavigatorNode = treeviewUtils.findNodeByKeyInSections(\n            this.parentExtension.state.navigatorSections,\n            'cms:cms-asset'\n        );\n\n        let assetList = [];\n\n        if (assetsNavigatorNode) {\n            assetList = treeviewUtils\n                .getFlattenNodes(assetsNavigatorNode.nodes)\n                .filter((assetNode) => {\n                    return !assetNode.userData.isFolder;\n                })\n                .map((assetNode) => {\n                    return assetNode.userData.path;\n                });\n        }\n        else {\n            assetList = this.parentExtension.state.customData.assets;\n        }\n\n        this.cachedAssetList = assetList;\n        return assetList;\n    }\n\n    onBeforeDocumentCreated(commandObj, payload, documentData) {\n        let parentPath = '';\n\n        if (commandObj.userData && commandObj.userData.path) {\n            parentPath = commandObj.userData.path;\n        }\n\n        if (parentPath.length > 0) {\n            documentData.document.fileName = parentPath + '/' + documentData.document.fileName;\n        }\n    }\n\n    onCreateDirectory(cmd, payload) {\n        const fs = new FileSystemFunctions(this);\n        const theme = this.parentExtension.cmsTheme;\n\n        fs.createDirectoryFromNavigatorMenu('onAssetCreateDirectory', cmd, payload, {\n            theme: theme\n        });\n    }\n\n    async onDeleteAssetOrDirectory(cmd, payload) {\n        const fs = new FileSystemFunctions(this);\n        const theme = this.parentExtension.cmsTheme;\n\n        await fs.deleteFileOrDirectoryFromNavigatorMenu('onAssetDelete', cmd, payload, {\n            theme: theme\n        });\n    }\n\n    onRenameAssetOrDirectory(cmd, payload) {\n        const fs = new FileSystemFunctions(this);\n        const theme = this.parentExtension.cmsTheme;\n\n        fs.renameFileOrDirectoryFromNavigatorMenu('onAssetRename', cmd, payload, {\n            theme: theme\n        });\n    }\n\n    async onNavigatorNodeMoved(cmd) {\n        const fs = new FileSystemFunctions(this);\n        const theme = this.parentExtension.cmsTheme;\n\n        fs.handleNavigatorNodeMove('onAssetMove', cmd, {\n            theme: theme\n        });\n    }\n\n    onNavigatorExternalDrop(cmd) {\n        const fs = new FileSystemFunctions(this);\n        const theme = this.parentExtension.cmsTheme;\n\n        fs.handleNavigatorExternalDrop('onAssetUpload', cmd, {\n            theme: theme\n        });\n    }\n\n    onUploadDocument(cmd) {\n        const fs = new FileSystemFunctions(this);\n        const theme = this.parentExtension.cmsTheme;\n\n        fs.uploadDocument(this.parentExtension.customData['assetExtensionList'], 'onAssetUpload', cmd, {\n            theme: theme\n        });\n    }\n\n    onOpenAsset(cmd, payload) {\n        window.open(cmd.userData.url);\n    }\n\n    onNavigatorNodesUpdated(cmd) {\n        this.cachedAssetList = null;\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.extension.documentcontroller.content.js",
    "content": "import { DocumentControllerBase } from '../../../editor/assets/js/editor.extension.documentcontroller.base.js';\nimport { utils as treeviewUtils } from '../../../backend/vuecomponents/treeview/assets/js/classes/index.js';\n\nexport class DocumentControllerContent extends DocumentControllerBase {\n    get documentType() {\n        return 'cms-content';\n    }\n\n    get vueEditorComponentName() {\n        return 'cms-editor-component-content-editor';\n    }\n\n    initListeners() {\n        this.on('cms:navigator-nodes-updated', this.onNavigatorNodesUpdated);\n    }\n\n    getAllContentFilenames() {\n        if (this.cachedContentList) {\n            return this.cachedContentList;\n        }\n\n        const contentNavigatorNode = treeviewUtils.findNodeByKeyInSections(\n            this.parentExtension.state.navigatorSections,\n            'cms:cms-content'\n        );\n\n        let contentList = [];\n\n        if (contentNavigatorNode) {\n            contentList = treeviewUtils.getFlattenNodes(contentNavigatorNode.nodes).map((contentNode) => {\n                return contentNode.userData.filename;\n            });\n        }\n        else {\n            contentList = this.parentExtension.state.customData.content;\n        }\n\n        this.cachedContentList = contentList;\n        return contentList;\n    }\n\n    onNavigatorNodesUpdated(cmd) {\n        this.cachedContentList = null;\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.extension.documentcontroller.layout.js",
    "content": "import { DocumentControllerBase } from '../../../editor/assets/js/editor.extension.documentcontroller.base.js';\nimport { utils as treeviewUtils } from '../../../backend/vuecomponents/treeview/assets/js/classes/index.js';\n\nexport class DocumentControllerLayout extends DocumentControllerBase {\n    get documentType() {\n        return 'cms-layout';\n    }\n\n    get vueEditorComponentName() {\n        return 'cms-editor-component-layout-editor';\n    }\n\n    initListeners() {\n        this.on('cms:navigator-nodes-updated', this.onNavigatorNodesUpdated);\n    }\n\n    getAllLayoutFilenames() {\n        if (this.cachedLayoutList) {\n            return this.cachedLayoutList;\n        }\n\n        const layoutsNavigatorNode = treeviewUtils.findNodeByKeyInSections(\n            this.parentExtension.state.navigatorSections,\n            'cms:cms-layout'\n        );\n\n        let layoutList = [];\n\n        if (layoutsNavigatorNode) {\n            layoutList = treeviewUtils.getFlattenNodes(layoutsNavigatorNode.nodes).map((layoutNode) => {\n                return layoutNode.userData.filename;\n            });\n        }\n        else {\n            layoutList = this.parentExtension.state.customData.layouts;\n        }\n\n        this.cachedLayoutList = layoutList;\n        return layoutList;\n    }\n\n    onNavigatorNodesUpdated(cmd) {\n        this.cachedLayoutList = null;\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.extension.documentcontroller.page.js",
    "content": "import dropdownMenuUtils from '../../../backend/vuecomponents/dropdownmenu/assets/js/dropdownmenu-utils.js';\nimport { DocumentControllerBase } from '../../../editor/assets/js/editor.extension.documentcontroller.base.js';\nimport { utils as treeviewUtils } from '../../../backend/vuecomponents/treeview/assets/js/classes/index.js';\nconst menuUtils = dropdownMenuUtils;\n\nexport class DocumentControllerPage extends DocumentControllerBase {\n    constructor(editorExtension) {\n        super(editorExtension);\n\n        this.loadPageSorting();\n    }\n\n    get documentType() {\n        return 'cms-page';\n    }\n\n    get vueEditorComponentName() {\n        return 'cms-editor-component-page-editor';\n    }\n\n    loadPageSorting() {\n        const knownSortingModes = ['cms-pages-sort-cmd', 'cms-pages-group-cmd', 'cms-pages-display-cmd'];\n\n        knownSortingModes.forEach((item) => {\n            const itemValue = localStorage.getItem(item);\n            if (itemValue !== null) {\n                this.emit(itemValue);\n            }\n        });\n    }\n\n    initListeners() {\n        this.on('cms:sort-pages@title, cms:sort-pages@url, cms:sort-pages@filename', this.sortPages);\n        this.on('cms:group-pages@path, cms:group-pages@url', this.groupPages);\n        this.on('cms:display-pages@title, cms:display-pages@url, cms:display-pages@filename', this.setDisplayMode);\n        this.on('cms:navigator-nodes-updated', this.onNavigatorNodesUpdated);\n    }\n\n    sortPages(commandObj) {\n        if (!commandObj.hasParameter) {\n            throw new Error(`cms:sort-pages command excepts a parameter: ${commandObj.fullCommand}`);\n        }\n\n        const pagesNode = this.rootNavigatorNodeSafe;\n        if (!pagesNode) {\n            return;\n        }\n\n        const sortingItem = menuUtils.findMenuItem(pagesNode.topLevelMenuitems, ['sorting'], 'command');\n\n        menuUtils.checkItemInGroup(sortingItem.items, commandObj.fullCommand);\n        pagesNode.sortBy = commandObj.parameter;\n\n        localStorage.setItem('cms-pages-sort-cmd', commandObj.fullCommand);\n    }\n\n    setDisplayMode(commandObj) {\n        if (!commandObj.hasParameter) {\n            throw new Error(`cms:display-pages command excepts a parameter: ${commandObj.fullCommand}`);\n        }\n\n        const pagesNode = this.rootNavigatorNodeSafe;\n        if (!pagesNode) {\n            return;\n        }\n\n        const displayItem = menuUtils.findMenuItem(pagesNode.topLevelMenuitems, ['display'], 'command');\n\n        menuUtils.checkItemInGroup(displayItem.items, commandObj.fullCommand);\n        pagesNode.displayProperty = commandObj.parameter;\n\n        localStorage.setItem('cms-pages-display-cmd', commandObj.fullCommand);\n    }\n\n    groupPages(commandObj) {\n        if (!commandObj.hasParameter) {\n            throw new Error(`cms:group-pages command excepts a parameter: ${commandObj.fullCommand}`);\n        }\n\n        const pagesNode = this.rootNavigatorNodeSafe;\n        if (!pagesNode) {\n            return;\n        }\n\n        const groupingItem = menuUtils.findMenuItem(pagesNode.topLevelMenuitems, ['grouping'], 'command');\n\n        menuUtils.checkItemInGroup(groupingItem.items, commandObj.fullCommand);\n        pagesNode.groupBy = commandObj.parameter;\n\n        if (commandObj.parameter == 'path') {\n            pagesNode.groupByMode = 'folders';\n            pagesNode.groupByRegex = null;\n            pagesNode.groupFolderDisplayPathProps = ['filename'];\n        }\n        else {\n            pagesNode.groupByMode = 'nesting';\n            pagesNode.groupByRegex = '^[a-z0-9_\\\\-]*$';\n            pagesNode.groupByFolderDisplayPathProps = null;\n        }\n\n        localStorage.setItem('cms-pages-group-cmd', commandObj.fullCommand);\n    }\n\n    preprocessSettingsFields(settingsFields) {\n        const layoutList = this.parentExtension.getDocumentController('cms-layout').getAllLayoutFilenames();\n\n        layoutList.sort();\n\n        const layouts = {};\n        layouts[''] = $.oc.editor.getLangStr('cms::lang.page.no_layout');\n        layoutList.forEach((fileName) => {\n            const path = this.parentExtension.removeFileExtension(fileName);\n            layouts[path] = path;\n        });\n\n        settingsFields.some((field) => {\n            if (field.property == 'layout') {\n                field.options = layouts;\n\n                return true;\n            }\n        });\n\n        if ($.oc.editor.application.isDirectDocumentMode) {\n            settingsFields = settingsFields.filter((field) => {\n                return ['layout', 'url', 'fileName', 'is_hidden'].indexOf(field.property) === -1;\n            });\n        }\n\n        return settingsFields;\n    }\n\n    preprocessNewDocumentData(newDocumentData, commandObj) {\n        const layoutList = this.parentExtension.getDocumentController('cms-layout').getAllLayoutFilenames();\n\n        if (\n            layoutList.some((fileName) => {\n                return this.parentExtension.removeFileExtension(fileName) === 'default';\n            })\n        ) {\n            newDocumentData.document.layout = 'default';\n        }\n    }\n\n    getAllPageFilenames() {\n        if (this.cachedPageList) {\n            return this.cachedPageList;\n        }\n\n        const pagesNavigatorNode = treeviewUtils.findNodeByKeyInSections(\n            this.parentExtension.state.navigatorSections,\n            'cms:cms-page'\n        );\n\n        let pageList = [];\n\n        if (pagesNavigatorNode) {\n            pageList = treeviewUtils.getFlattenNodes(pagesNavigatorNode.nodes).map((pageNode) => {\n                return pageNode.userData.filename;\n            });\n        }\n        else {\n            pageList = this.parentExtension.state.customData.pages;\n        }\n\n        this.cachedPageList = pageList;\n        return pageList;\n    }\n\n    onNavigatorNodesUpdated(cmd) {\n        this.cachedPageList = null;\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.extension.documentcontroller.partial.js",
    "content": "import { DocumentControllerBase } from '../../../editor/assets/js/editor.extension.documentcontroller.base.js';\nimport { utils as treeviewUtils } from '../../../backend/vuecomponents/treeview/assets/js/classes/index.js';\n\nexport class DocumentControllerPartial extends DocumentControllerBase {\n    get documentType() {\n        return 'cms-partial';\n    }\n\n    get vueEditorComponentName() {\n        return 'cms-editor-component-partial-editor';\n    }\n\n    initListeners() {\n        this.on('cms:navigator-nodes-updated', this.onNavigatorNodesUpdated);\n    }\n\n    getAllPartialFilenames() {\n        if (this.cachedPartialList) {\n            return this.cachedPartialList;\n        }\n\n        const partialsNavigatorNode = treeviewUtils.findNodeByKeyInSections(\n            this.parentExtension.state.navigatorSections,\n            'cms:cms-partial'\n        );\n\n        let partialList = [];\n\n        if (partialsNavigatorNode) {\n            partialList = treeviewUtils.getFlattenNodes(partialsNavigatorNode.nodes).map((partialNode) => {\n                return partialNode.userData.filename;\n            });\n        }\n        else {\n            partialList = this.parentExtension.state.customData.partials;\n        }\n\n        this.cachedPartialList = partialList;\n        return partialList;\n    }\n\n    onNavigatorNodesUpdated(cmd) {\n        this.cachedPartialList = null;\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.extension.js",
    "content": "import { nextTick } from 'vue';\nimport { ExtensionBase } from '../../../editor/assets/js/editor.extension.base.js';\nimport { DocumentUri } from '../../../editor/assets/js/editor.documenturi.js';\nimport { EditorCommand } from '../../../editor/assets/js/editor.command.js';\nimport { makeCmsIntellisense } from './cms.editor.intellisense.js';\nimport { DocumentControllerPage } from './cms.editor.extension.documentcontroller.page.js';\nimport { DocumentControllerLayout } from './cms.editor.extension.documentcontroller.layout.js';\nimport { DocumentControllerPartial } from './cms.editor.extension.documentcontroller.partial.js';\nimport { DocumentControllerContent } from './cms.editor.extension.documentcontroller.content.js';\nimport { DocumentControllerAsset } from './cms.editor.extension.documentcontroller.asset.js';\nimport { modalUtils } from '../../../backend/vuecomponents/modal/assets/js/classes/index.js';\n\n// Declaring this as a scoped variable. For some reason,\n// making this a property of CmsEditorExtension causes\n// stack overflow in Vue.\nlet componentListInstance = null;\nlet componentListApp = null;\nlet componentListWrapperEl = null;\n\nclass CmsEditorExtension extends ExtensionBase {\n    intellisense;\n\n    constructor(namespace) {\n        super(namespace);\n\n        nextTick(() => {\n            this.createComponentListPopup();\n        });\n    }\n\n    get componentList() {\n        return this.state.customData.components;\n    }\n\n    get cmsTheme() {\n        return this.customData['theme'];\n    }\n\n    setInitialState(initialState) {\n        super.setInitialState(initialState);\n\n        this.intellisense = makeCmsIntellisense(this.state.customData);\n        this.intellisense.on('onTokenClick', (tokenClickData) => this.onTokenClick(tokenClickData));\n    }\n\n    listDocumentControllerClasses() {\n        return [\n            DocumentControllerPage,\n            DocumentControllerLayout,\n            DocumentControllerPartial,\n            DocumentControllerContent,\n            DocumentControllerAsset\n        ];\n    }\n\n    removeFileExtension(fileName) {\n        return fileName.split('.').slice(0, -1).join('.');\n    }\n\n    createComponentListPopup() {\n        // Create container element for Vue app\n        componentListWrapperEl = document.createElement('div');\n        document.body.appendChild(componentListWrapperEl);\n\n        // Create Vue 3 app\n        componentListApp = oc.createVueApp({\n            data() {\n                return {};\n            },\n            template: '<cms-component-cmscomponentlistpopup ref=\"popup\" />'\n        });\n\n        const vm = componentListApp.mount(componentListWrapperEl);\n        componentListInstance = vm.$refs.popup;\n    }\n\n    addCmsComponent(componentData) {\n        const documentComponent = $.oc.editor.application.getCurrentDocumentComponent();\n\n        if (!documentComponent || typeof documentComponent.addComponent !== 'function') {\n            return;\n        }\n\n        documentComponent.addComponent(componentData);\n    }\n\n    getCustomToolbarSettingsButtons(documentType) {\n        return this.state.customData.customToolbarSettingsButtons[documentType];\n    }\n\n    onCommand(commandString, payload) {\n        super.onCommand(commandString, payload);\n\n        if (commandString === 'global:application-tab-selected') {\n            if (!payload) {\n                if (componentListInstance) {\n                    componentListInstance.hide();\n                }\n                return;\n            }\n\n            const uri = DocumentUri.parse(payload);\n            if (uri.namespace !== 'cms') {\n                if (componentListInstance) {\n                    componentListInstance.hide();\n                }\n            }\n\n            const documentsSupportingComponents = ['cms-page', 'cms-partial', 'cms-layout'];\n            if (documentsSupportingComponents.indexOf(uri.documentType) === -1) {\n                if (componentListInstance) {\n                    componentListInstance.hide();\n                }\n            }\n\n            return;\n        }\n\n        if (commandString === 'cms:add-component') {\n            return this.addCmsComponent(payload);\n        }\n\n        if (commandString === 'cms:refresh-navigator') {\n            this.editorStore.refreshExtensionNavigatorNodes(this.editorNamespace).then(() => {});\n\n            return;\n        }\n\n        if (commandString === 'cms:show-component-list') {\n            if (componentListInstance) {\n                componentListInstance.show();\n            }\n        }\n\n        const editorCommand = new EditorCommand(commandString);\n        if (editorCommand.basePart === 'cms:set-edit-theme') {\n            this.onSetEditTheme(editorCommand.parameter);\n        }\n    }\n\n    onTokenClick(tokenClickData) {\n        if (tokenClickData.type == 'cms-partial' || tokenClickData.type == 'cms-page') {\n            let path = tokenClickData.path;\n            if (!path.endsWith('.htm')) {\n                path += '.htm';\n            }\n\n            this.openDocumentByUniqueKey('cms:' + tokenClickData.type + ':' + path);\n        }\n\n        if (tokenClickData.type == 'cms-content') {\n            this.openDocumentByUniqueKey('cms:cms-content:' + tokenClickData.path);\n        }\n\n        if (tokenClickData.type == 'cms-asset') {\n            this.openDocumentByUniqueKey('cms:cms-asset:' + tokenClickData.path);\n        }\n    }\n\n    async onSetEditTheme(theme) {\n        if (this.editorApplication.hasChangedTabs()) {\n            modalUtils.showAlert(\n                this.trans('cms::lang.editor.change_edit_theme'),\n                this.trans('cms::lang.editor.edit_theme_saved_changed_tabs')\n            );\n\n            return;\n        }\n\n        this.editorApplication.closeAllTabs();\n        this.editorApplication.setNavigatorReadonly(true);\n\n        const changingMessageId = oc.snackbar.show(this.trans('cms::lang.theme.setting_edit_theme'), {\n            timeout: 5000\n        });\n\n        try {\n            await this.editorApplication.ajaxRequest('onCommand', {\n                extension: this.editorNamespace,\n                command: 'onSetEditTheme',\n                documentMetadata: {\n                    theme: theme\n                }\n            });\n\n            // await this.editorStore.refreshExtensionNavigatorNodes(this.editorNamespace);\n            await this.editorStore.refreshExtensionNavigatorNodes('*');\n\n            oc.snackbar.show(this.trans('cms::lang.theme.edit_theme_changed'), { replace: changingMessageId });\n            this.customData['theme'] = theme;\n            this.editorApplication.setNavigatorReadonly(false);\n\n            Object.keys(this.state.newDocumentData).forEach((documentType) => {\n                this.state.newDocumentData[documentType].metadata.theme = theme;\n            });\n\n        }\n        catch (error) {\n            oc.snackbar.hide(changingMessageId);\n            $.oc.editor.page.showAjaxErrorAlert(error, this.trans('editor::lang.common.error'));\n            this.editorApplication.setNavigatorReadonly(false);\n            return false;\n        }\n    }\n}\n\n// Register with the editor extension registry\noc.editorExtensions = oc.editorExtensions || {};\noc.editorExtensions['cms'] = CmsEditorExtension;\n\nexport { CmsEditorExtension };\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.actionhandler.base.js",
    "content": "export class ActionHandlerBase {\n    editor;\n    action;\n    intellisense;\n    monacoComponent;\n\n    constructor(intellisense, editor, monacoComponent) {\n        this.editor = editor;\n        this.intellisense = intellisense;\n        this.monacoComponent = monacoComponent;\n\n        this.initEditor();\n    }\n\n    initEditor() {}\n\n    getModelTags(editor) {\n        let tags = editor.getModel().octoberEditorCmsTags;\n        if (!Array.isArray(tags)) {\n            return [];\n        }\n\n        return tags;\n    }\n\n    modelHasTag(editor, tag) {\n        const tags = this.getModelTags(editor);\n        return tags.indexOf(tag) !== -1;\n    }\n\n    getTagAtPosition(editor, tagRegexPattern, position) {\n        const tagRegex = new RegExp(tagRegexPattern, 'ig');\n        const model = editor.getModel();\n        const mouseColumnIndex = position.column - 1;\n        const lineContent = model.getLineContent(position.lineNumber);\n\n        let match = '';\n        while ((match = tagRegex.exec(lineContent)) !== null) {\n            const tag = match[0];\n            if (match.index <= mouseColumnIndex && mouseColumnIndex < match.index + tag.length) {\n                return {\n                    tag: tag,\n                    range: {\n                        endColumn: match.index + tag.length + 1,\n                        endLineNumber: position.lineNumber,\n                        startColumn: match.index + 1,\n                        startLineNumber: position.lineNumber\n                    }\n                };\n            }\n        }\n\n        return null;\n    }\n\n    run(editor) {}\n\n    onFilterSupportedActions(payload) {}\n\n    onContextMenu(editor, target) {}\n\n    dispose() {\n        this.monacoComponent = null;\n\n        if (this.action) {\n            this.action.dispose();\n        }\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.actionhandler.expandcomponent.js",
    "content": "import { ActionHandlerBase } from './cms.editor.intellisense.actionhandler.base.js';\n\nexport class ActionHandlerExpandComponent extends ActionHandlerBase {\n    tagRePattern;\n\n    constructor(intellisense, editor, monacoComponent) {\n        super(intellisense, editor, monacoComponent);\n        this.tagRePattern = '{%\\\\s+component\\\\s*[^}]+\\\\s*%}';\n    }\n\n    initEditor() {\n        const condition = this.editor.createContextKey('octoberExpandComponentDefinitionCondition', false);\n        condition.set(true);\n        this.editor.octoberExpandComponentDefinitionCondition = condition;\n        const that = this;\n\n        this.action = this.editor.addAction({\n            id: 'october-expand-component-definition',\n            label: $.oc.editor.getLangStr('cms::lang.component.expand_partial'),\n            precondition: 'octoberExpandComponentDefinitionCondition',\n            contextMenuGroupId: 'navigation',\n            contextMenuOrder: 1.5,\n            run: function(editor) {\n                that.run(editor);\n                return null;\n            }\n        });\n    }\n\n    run(editor) {\n        const position = editor.getPosition();\n        const tag = this.getTagAtPosition(editor, this.tagRePattern, position);\n        if (!tag) {\n            return;\n        }\n\n        const re = /^{%\\s*component\\s(['\"])([^\"']+)(?:\\1)[^(?:%})]+%}$/;\n        const matches = re.exec(tag.tag);\n\n        if (!matches || !matches[2]) {\n            return;\n        }\n\n        this.monacoComponent.emitCustomEvent('expandComponent', {\n            alias: matches[2],\n            range: tag.range,\n            model: editor.getModel()\n        });\n    }\n\n    onFilterSupportedActions(payload) {\n        payload.actions = payload.actions.filter((action) => {\n            return action.id.indexOf('october-expand-component-definition') === -1;\n        });\n    }\n\n    onContextMenu(editor, target) {\n        if (!editor.octoberExpandComponentDefinitionCondition || !target) {\n            return;\n        }\n\n        if (!this.modelHasTag(editor, 'cms-markup')) {\n            editor.octoberExpandComponentDefinitionCondition.set(false);\n            return;\n        }\n\n        const tag = this.getTagAtPosition(editor, this.tagRePattern, target.position);\n        if (!tag) {\n            editor.octoberExpandComponentDefinitionCondition.set(false);\n            return;\n        }\n\n        editor.octoberExpandComponentDefinitionCondition.set(true);\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.clickhandler.base.js",
    "content": "export class ClickHandlerBase {\n    intellisense;\n    options;\n\n    constructor(intellisense, options) {\n        this.intellisense = intellisense;\n        this.options = options;\n    }\n\n    get utils() {\n        return this.intellisense.utils;\n    }\n\n    getFileExtension(fileName) {\n        const parts = fileName.split('/').pop().split('.');\n        if (parts.length < 2) {\n            return null;\n        }\n\n        return parts.pop();\n    }\n\n    addExtensionIfMissing(fileName, extension) {\n        if (this.getFileExtension(fileName) !== null) {\n            return fileName;\n        }\n\n        return fileName + '.' + extension;\n    }\n\n    resolveRelativeFilePath(base, relative) {\n        const parts = relative.split('/');\n        let stack = base.split('/');\n\n        stack.pop();\n        parts.forEach((part) => {\n            if (part === '.') {\n                return;\n            }\n\n            if (part === '..') {\n                stack.pop();\n            }\n            else {\n                stack.push(part);\n            }\n        });\n\n        return stack.join('/');\n    }\n\n    provideLinks(model, token) {}\n\n    resolveLink(link, token) {}\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.clickhandler.cssimports.js",
    "content": "import { ClickHandlerBase } from './cms.editor.intellisense.clickhandler.base.js';\n\nexport class ClickHandlerCssImport extends ClickHandlerBase {\n    resolveLink(link, token) {\n        let path = link.templateName;\n        if (link.type === 'cms-asset') {\n            path = path.replace(/^assets\\//, '');\n        }\n\n        this.intellisense.emit('onTokenClick', {\n            type: link.type,\n            path: path\n        });\n    }\n\n    addUnderscore(fileName) {\n        const parts = fileName.split('/');\n        const baseName = '_' + parts.pop();\n\n        return parts.join('/') + '/' + baseName;\n    }\n\n    getAssets() {\n        return this.utils.getAssets().map((asset) => {\n            return asset.name;\n        });\n    }\n\n    makeLinks(model, re, links, basePath, options) {\n        const matches = model.findMatches(re, false, true, false, null, true);\n        let templateList = false;\n\n        matches.forEach((findMatch) => {\n            const templateName = findMatch.matches[2];\n            let fullTemplateName = null;\n\n            const extension = this.getFileExtension(templateName);\n            if (options.allowedExtensions.indexOf(extension) === -1) {\n                return;\n            }\n\n            if (templateList === false) {\n                templateList = this.getAssets();\n            }\n\n            fullTemplateName = this.addExtensionIfMissing(templateName, this.options.extension);\n            fullTemplateName = this.resolveRelativeFilePath(basePath, fullTemplateName);\n\n            if (templateList.indexOf(fullTemplateName) === -1) {\n                fullTemplateName = this.addUnderscore(fullTemplateName);\n                if (templateList.indexOf(fullTemplateName) === -1) {\n                    return;\n                }\n            }\n\n            const templatePos = findMatch.matches[0].indexOf(templateName);\n            const startColumn = findMatch.range.startColumn + templatePos;\n\n            links.push({\n                type: 'cms-asset',\n                templateName: fullTemplateName,\n                range: {\n                    endColumn: startColumn + templateName.length,\n                    endLineNumber: findMatch.range.endLineNumber,\n                    startColumn: startColumn,\n                    startLineNumber: findMatch.range.startLineNumber\n                }\n            });\n        });\n    }\n\n    provideLinks(model, token) {\n        if (typeof this.options.extension !== 'string') {\n            throw new Error('options.extension must be set for cssimports click handler');\n        }\n\n        if (!this.intellisense.modelHasTag(model, 'cms-asset-contents')) {\n            return;\n        }\n\n        const basePath = 'assets/' + this.intellisense.getModelCustomAttribute(model, 'filePath');\n        const result = {\n            links: []\n        };\n\n        this.makeLinks(model, /@import\\s+(\"|')([a-zA-Z0-9\\-\\/_\\.]+)\\1/gm, result.links, basePath, {\n            allowedExtensions: [this.options.extension, null]\n        });\n\n        return result;\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.clickhandler.template.js",
    "content": "import { ClickHandlerBase } from './cms.editor.intellisense.clickhandler.base.js';\n\nexport class ClickHandlerTemplate extends ClickHandlerBase {\n    get canManagePartials() {\n        return this.options.canManagePartials;\n    }\n\n    get canManageContent() {\n        return this.options.canManageContent;\n    }\n\n    get canManageAssets() {\n        return this.options.canManageAssets;\n    }\n\n    get canManagePages() {\n        return this.options.canManagePages;\n    }\n\n    get editableAssetExtensions() {\n        return this.options.editableAssetExtensions;\n    }\n\n    resolveLink(link, token) {\n        let path = link.templateName;\n        if (link.type === 'cms-asset') {\n            path = path.replace(/^assets\\//, '');\n        }\n\n        this.intellisense.emit('onTokenClick', {\n            type: link.type,\n            path: path\n        });\n    }\n\n    getListByName(listName) {\n        if (listName === 'assets') {\n            return this.utils.getAssets().map((asset) => {\n                return asset.name;\n            });\n        }\n\n        if (listName === 'pages') {\n            return this.utils.getPages().map((asset) => {\n                return asset.name;\n            });\n        }\n    }\n\n    makeLinks(model, re, links, documentType, options) {\n        const matches = model.findMatches(re, false, true, false, null, true);\n        let templateList = false;\n\n        matches.forEach((findMatch) => {\n            const templateName = findMatch.matches[2];\n\n            if (options) {\n                if (options.allowedExtensions) {\n                    const extension = this.getFileExtension(templateName);\n                    if (extension === null || options.allowedExtensions.indexOf(extension) === -1) {\n                        return;\n                    }\n                }\n\n                if (options.checkList) {\n                    if (templateList === false) {\n                        templateList = this.getListByName(options.checkList);\n                    }\n\n                    if (!Array.isArray(templateList) || templateList.indexOf(templateName) === -1) {\n                        return;\n                    }\n                }\n            }\n\n            const templatePos = findMatch.matches[0].indexOf(templateName);\n            const startColumn = findMatch.range.startColumn + templatePos;\n\n            links.push({\n                type: documentType,\n                templateName: templateName,\n                range: {\n                    endColumn: startColumn + templateName.length,\n                    endLineNumber: findMatch.range.endLineNumber,\n                    startColumn: startColumn,\n                    startLineNumber: findMatch.range.startLineNumber\n                }\n            });\n        });\n    }\n\n    provideLinks(model, token) {\n        if (!this.intellisense.modelHasTag(model, 'cms-markup')) {\n            return;\n        }\n\n        const result = {\n            links: []\n        };\n\n        if (this.canManagePartials) {\n            this.makeLinks(model, /\\{%\\s+(?:partial|ajaxPartial)\\s+(\"|')([a-zA-Z0-9\\-\\/_]+)\\1/gm, result.links, 'cms-partial');\n        }\n\n        if (this.canManageContent) {\n            this.makeLinks(model, /\\{%\\s+content\\s+(\"|')([a-zA-Z0-9\\-\\/\\._]+)\\1/gm, result.links, 'cms-content');\n        }\n\n        if (this.canManageAssets) {\n            this.makeLinks(model, /\\{\\{\\s+(\"|')([a-zA-Z0-9\\-\\/\\.\\s_@]+)\\1/gm, result.links, 'cms-asset', {\n                allowedExtensions: this.editableAssetExtensions,\n                checkList: 'assets'\n            });\n        }\n\n        if (this.canManagePages) {\n            this.makeLinks(model, /\\{\\{\\s+(\"|')([a-zA-Z0-9\\-\\/\\._]+)\\1/gm, result.links, 'cms-page', {\n                checkList: 'pages'\n            });\n        }\n\n        return result;\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.completer.assets.js",
    "content": "import { CompleterBase } from './cms.editor.intellisense.completer.base.js';\n\nexport class CompleterAssets extends CompleterBase {\n    get triggerCharacters() {\n        return [...['\"', \"'\", '/', '-', '.', '@'], ...this.alphaNumCharacters];\n    }\n\n    getNormalizedAssets(range) {\n        return this.utils.getAssets().map((asset) => {\n            var result = {\n                label: asset.name,\n                insertText: asset.name,\n                kind: monaco.languages.CompletionItemKind.Enum,\n                range: range,\n                detail: 'Asset'\n            };\n\n            return result;\n        });\n    }\n\n    provideCompletionItems(model, position) {\n        if (!this.intellisense.modelHasTag(model, 'cms-markup')) {\n            return;\n        }\n\n        const textUntilPosition = this.intellisense.utils.textUntilPosition(model, position);\n        const textAfterPosition = this.intellisense.utils.textAfterPosition(model, position);\n        const wordMatches = textUntilPosition.match(/\\{\\{\\s+(\"|')(\\w|\\/|\\-|\\.|@)*$/);\n        if (!wordMatches) {\n            return;\n        }\n\n        const wordMatchBefore = textUntilPosition.match(/(\"|')[\\w\\/\\-\\.@]*$/);\n        if (!wordMatchBefore) {\n            return;\n        }\n\n        const wordMatchAfter = textAfterPosition.match(/[\\w\\/\\-\\.@]?(\"|')/);\n        if (!wordMatchAfter) {\n            return;\n        }\n\n        const range = {\n            startLineNumber: position.lineNumber,\n            endLineNumber: position.lineNumber,\n            startColumn: wordMatchBefore.index + 2,\n            endColumn: position.column + wordMatchAfter[0].length - 1\n        };\n\n        return {\n            suggestions: this.getNormalizedAssets(range)\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.completer.base.js",
    "content": "export class CompleterBase {\n    intellisense;\n\n    constructor(intellisense) {\n        this.intellisense = intellisense;\n    }\n\n    get alphaNumCharacters() {\n        return [\n            'a',\n            'b',\n            'c',\n            'd',\n            'e',\n            'f',\n            'g',\n            'h',\n            'i',\n            'j',\n            'k',\n            'l',\n            'm',\n            'n',\n            'o',\n            'p',\n            'q',\n            'r',\n            's',\n            't',\n            'u',\n            'v',\n            'w',\n            'x',\n            'y',\n            'z',\n            '1',\n            '2',\n            '3',\n            '4',\n            '5',\n            '6',\n            '7',\n            '8',\n            '9',\n            '0'\n        ];\n    }\n\n    get utils() {\n        return this.intellisense.utils;\n    }\n\n    provideCompletionItems(model, position) {}\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.completer.content.js",
    "content": "import { CompleterBase } from './cms.editor.intellisense.completer.base.js';\n\nexport class CompleterOctoberContent extends CompleterBase {\n    get triggerCharacters() {\n        return [...['\"', \"'\", '/', '-', '.'], ...this.alphaNumCharacters];\n    }\n\n    getNormalizedContentFiles(range) {\n        return this.utils.getContentFiles().map((content) => {\n            var result = {\n                label: content.name,\n                insertText: content.name,\n                kind: monaco.languages.CompletionItemKind.Enum,\n                range: range,\n                detail: 'Content file'\n            };\n\n            return result;\n        });\n    }\n\n    provideCompletionItems(model, position) {\n        if (!this.intellisense.modelHasTag(model, 'cms-markup')) {\n            return;\n        }\n\n        const textUntilPosition = this.intellisense.utils.textUntilPosition(model, position);\n        const textAfterPosition = this.intellisense.utils.textAfterPosition(model, position);\n        const wordMatches = textUntilPosition.match(/\\{%\\s+content\\s+(\"|')(\\w|\\/|\\-|\\.)*$/);\n        if (!wordMatches) {\n            return;\n        }\n\n        const wordMatchBefore = textUntilPosition.match(/(\"|')[\\w\\/\\-\\.]*$/);\n        if (!wordMatchBefore) {\n            return;\n        }\n\n        const wordMatchAfter = textAfterPosition.match(/[\\w\\/\\-\\.]?(\"|')/);\n        if (!wordMatchAfter) {\n            return;\n        }\n\n        const range = {\n            startLineNumber: position.lineNumber,\n            endLineNumber: position.lineNumber,\n            startColumn: wordMatchBefore.index + 2,\n            endColumn: position.column + wordMatchAfter[0].length - 1\n        };\n\n        return {\n            suggestions: this.getNormalizedContentFiles(range)\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.completer.octobertags.js",
    "content": "import { CompleterBase } from './cms.editor.intellisense.completer.base.js';\n\nexport class CompleterOctoberTags extends CompleterBase {\n    getOctoberTags() {\n        return this.intellisense.getCustomData().octoberTags;\n    }\n\n    get triggerCharacters() {\n        return [...[' '], ...this.alphaNumCharacters];\n    }\n\n    getNormalizedTags() {\n        if (this.normalizedTags) {\n            return this.normalizedTags;\n        }\n\n        this.normalizedTags = this.getOctoberTags().map((tag) => {\n            var result = $.oc.vueUtils.getCleanObject(tag);\n\n            result.kind = monaco.languages.CompletionItemKind.Function;\n            result.insertTextRules = monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet;\n            result.detail = 'October CMS tag';\n            result.documentation = {\n                value: this.intellisense.utils.makeTagDocumentationString(result)\n            };\n\n            return result;\n        });\n\n        return this.normalizedTags;\n    }\n\n    getPartialEnum() {\n        const partialNameList = this.utils.getPartials().map((partial) => {\n            return partial.name;\n        });\n\n        if (!partialNameList.length) {\n            return '';\n        }\n\n        return '|' + partialNameList.join(',') + '|';\n    }\n\n    getContentEnum() {\n        const contentNameList = this.utils.getContentFiles().map((contentFile) => {\n            return contentFile.name;\n        });\n\n        if (!contentNameList.length) {\n            return '';\n        }\n\n        return '|' + contentNameList.join(',') + '|';\n    }\n\n    applyNormalizedTags(range) {\n        const tags = this.getNormalizedTags();\n\n        return tags.map((tag) => {\n            var result = $.oc.vueUtils.getCleanObject(tag);\n            if (tag.insertText && tag.insertText.indexOf('%}') !== -1) {\n                result.range = range;\n            }\n\n            if (tag.insertText && tag.insertText.indexOf('{partial-list}' !== -1)) {\n                tag.insertText = tag.insertText.replace('{partial-list}', this.getPartialEnum());\n            }\n\n            if (tag.insertText && tag.insertText.indexOf('{content-list}' !== -1)) {\n                tag.insertText = tag.insertText.replace('{content-list}', this.getContentEnum());\n            }\n\n            return result;\n        });\n    }\n\n    provideCompletionItems(model, position) {\n        if (!this.intellisense.modelHasTag(model, 'cms-markup')) {\n            return;\n        }\n\n        const textUntilPosition = this.intellisense.utils.textUntilPosition(model, position);\n        const textAfterPosition = this.intellisense.utils.textAfterPosition(model, position);\n\n        const wordMatches = textUntilPosition.match(/\\{%\\s+\\w*$/);\n        if (!wordMatches) {\n            return;\n        }\n\n        const word = model.getWordUntilPosition(position);\n        if (word.word === '%') {\n            return;\n        }\n\n        let range = null;\n        const matches = textAfterPosition.match(/\\s+%}/);\n        if (matches) {\n            range = {\n                startLineNumber: position.lineNumber,\n                endLineNumber: position.lineNumber,\n                startColumn: word.endColumn - wordMatches[0].length,\n                endColumn: word.endColumn + matches[0].length\n            };\n        }\n\n        return {\n            suggestions: this.applyNormalizedTags(range)\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.completer.pages.js",
    "content": "import { CompleterBase } from './cms.editor.intellisense.completer.base.js';\n\nexport class CompleterPages extends CompleterBase {\n    get triggerCharacters() {\n        return [...['\"', \"'\", '/', '-', '.', '@'], ...this.alphaNumCharacters];\n    }\n\n    getNormalizedPages(range) {\n        return this.utils.getPages().map((asset) => {\n            var result = {\n                label: asset.name,\n                insertText: asset.name,\n                kind: monaco.languages.CompletionItemKind.EnumMember,\n                range: range,\n                detail: 'CMS Page'\n            };\n\n            return result;\n        });\n    }\n\n    provideCompletionItems(model, position) {\n        if (!this.intellisense.modelHasTag(model, 'cms-markup')) {\n            return;\n        }\n\n        const textUntilPosition = this.intellisense.utils.textUntilPosition(model, position);\n        const textAfterPosition = this.intellisense.utils.textAfterPosition(model, position);\n        const wordMatches = textUntilPosition.match(/\\{\\{\\s+(\"|')(\\w|\\/|\\-|\\.|@)*$/);\n        if (!wordMatches) {\n            return;\n        }\n\n        const wordMatchBefore = textUntilPosition.match(/(\"|')[\\w\\/\\-\\.@]*$/);\n        if (!wordMatchBefore) {\n            return;\n        }\n\n        const wordMatchAfter = textAfterPosition.match(/[\\w\\/\\-\\.@]?(\"|')/);\n        if (!wordMatchAfter) {\n            return;\n        }\n\n        const range = {\n            startLineNumber: position.lineNumber,\n            endLineNumber: position.lineNumber,\n            startColumn: wordMatchBefore.index + 2,\n            endColumn: position.column + wordMatchAfter[0].length - 1\n        };\n\n        return {\n            suggestions: this.getNormalizedPages(range)\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.completer.partials.js",
    "content": "import { CompleterBase } from './cms.editor.intellisense.completer.base.js';\n\nexport class CompleterOctoberPartials extends CompleterBase {\n    get triggerCharacters() {\n        return [...['\"', \"'\", '/', '-'], ...this.alphaNumCharacters];\n    }\n\n    getNormalizedPartials(range) {\n        return this.utils.getPartials().map((partial) => {\n            var result = {\n                label: partial.name,\n                insertText: partial.name,\n                kind: monaco.languages.CompletionItemKind.Enum,\n                range: range,\n                detail: 'October CMS partial'\n            };\n\n            return result;\n        });\n    }\n\n    provideCompletionItems(model, position) {\n        if (!this.intellisense.modelHasTag(model, 'cms-markup')) {\n            return;\n        }\n\n        const textUntilPosition = this.intellisense.utils.textUntilPosition(model, position);\n        const textAfterPosition = this.intellisense.utils.textAfterPosition(model, position);\n        const wordMatches = textUntilPosition.match(/\\{%\\s+(partial|ajaxPartial)\\s+(\"|')(\\w|\\/|\\-)*$/);\n        if (!wordMatches) {\n            return;\n        }\n\n        const wordMatchBefore = textUntilPosition.match(/(\"|')[\\w\\/\\-]*$/);\n        if (!wordMatchBefore) {\n            return;\n        }\n\n        const wordMatchAfter = textAfterPosition.match(/[\\w\\/\\-]?(\"|')/);\n        if (!wordMatchAfter) {\n            return;\n        }\n\n        const range = {\n            startLineNumber: position.lineNumber,\n            endLineNumber: position.lineNumber,\n            startColumn: wordMatchBefore.index + 2,\n            endColumn: position.column + wordMatchAfter[0].length - 1\n        };\n\n        return {\n            suggestions: this.getNormalizedPartials(range)\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.completer.twigfilters.js",
    "content": "import { CompleterBase } from './cms.editor.intellisense.completer.base.js';\n\nexport class CompleterTwigFilters extends CompleterBase {\n    getTwigFilters() {\n        return this.intellisense.getCustomData().twigFilters;\n    }\n\n    get triggerCharacters() {\n        return [...['|'], ...this.alphaNumCharacters];\n    }\n\n    getNormalizedFilters() {\n        return this.getTwigFilters().map((filter) => {\n            var result = $.oc.vueUtils.getCleanObject(filter);\n\n            result.kind = monaco.languages.CompletionItemKind.Function;\n            result.insertTextRules = monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet;\n            result.detail = filter.isNativeTwigFilter ? 'Twig filter' : 'October CMS filter';\n            result.documentation = {\n                value: this.intellisense.utils.makeTagDocumentationString(result)\n            };\n\n            return result;\n        });\n    }\n\n    provideCompletionItems(model, position) {\n        if (!this.intellisense.modelHasTag(model, 'cms-markup')) {\n            return;\n        }\n\n        const textUntilPosition = this.intellisense.utils.textUntilPosition(model, position);\n        if (!textUntilPosition.match(/((\\{%)|(\\{\\{)).*[^\\s]+\\|\\w*$/)) {\n            return;\n        }\n\n        const openingTags = (textUntilPosition.match(/(\\{%)|(\\{\\{)/g) || []).length;\n        const closingTags = (textUntilPosition.match(/(%\\})|(\\}\\})/g) || []).length;\n\n        if (openingTags <= closingTags) {\n            return;\n        }\n\n        return {\n            suggestions: this.getNormalizedFilters()\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.hoverprovider.base.js",
    "content": "export class HoverProviderBase {\n    intellisense;\n\n    constructor(intellisense) {\n        this.intellisense = intellisense;\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.hoverprovider.octobertags.js",
    "content": "import { HoverProviderBase } from './cms.editor.intellisense.hoverprovider.base.js';\n\nexport class HoverProviderOctoberTags extends HoverProviderBase {\n    getOctoberTags() {\n        return this.intellisense.getCustomData().octoberTags;\n    }\n\n    provideHover(model, position) {\n        if (!this.intellisense.modelHasTag(model, 'cms-markup')) {\n            return;\n        }\n\n        const textUntilPosition = this.intellisense.utils.textUntilPosition(model, position);\n        if (!/{%\\s+\\w+$/.test(textUntilPosition)) {\n            return;\n        }\n\n        const wordAtPosition = model.getWordAtPosition(position);\n        if (!wordAtPosition) {\n            return;\n        }\n\n        const word = wordAtPosition.word;\n        const tag = this.getOctoberTags().find((item) => {\n            if (Array.isArray(item.hoverKeyword)) {\n                return item.hoverKeyword.some((keyword) => keyword == word);\n            }\n\n            return item.hoverKeyword == word;\n        });\n\n        if (!tag) {\n            return;\n        }\n\n        return {\n            contents: [\n                { value: '**' + tag.label + '**' },\n                {\n                    value: this.intellisense.utils.makeTagDocumentationString(tag)\n                }\n            ]\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.hoverprovider.twigfilters.js",
    "content": "import { HoverProviderBase } from './cms.editor.intellisense.hoverprovider.base.js';\n\nexport class HoverProviderTwigFilters extends HoverProviderBase {\n    getTwigFilters() {\n        return this.intellisense.getCustomData().twigFilters;\n    }\n\n    provideHover(model, position) {\n        if (!this.intellisense.modelHasTag(model, 'cms-markup')) {\n            return;\n        }\n\n        const textUntilPosition = this.intellisense.utils.textUntilPosition(model, position);\n        if (!textUntilPosition.match(/(\\{%)|(\\{\\{).*[^\\s]+\\|\\w*$/)) {\n            return;\n        }\n\n        const openingTags = (textUntilPosition.match(/(\\{%)|(\\{\\{)/g) || []).length;\n        const closingTags = (textUntilPosition.match(/(%\\})|(\\}\\})/g) || []).length;\n\n        if (openingTags <= closingTags) {\n            return;\n        }\n\n        const wordAtPosition = model.getWordAtPosition(position);\n        if (!wordAtPosition) {\n            return;\n        }\n\n        const word = wordAtPosition.word;\n        const filter = this.getTwigFilters().find((item) => {\n            if (Array.isArray(item.hoverKeyword)) {\n                return item.hoverKeyword.some((keyword) => keyword == word);\n            }\n\n            return item.hoverKeyword == word;\n        });\n\n        if (!filter) {\n            return;\n        }\n\n        return {\n            contents: [\n                { value: '**' + filter.label + '**' },\n                {\n                    value: this.intellisense.utils.makeTagDocumentationString(filter)\n                }\n            ]\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.js",
    "content": "import { CompleterOctoberTags } from './cms.editor.intellisense.completer.octobertags.js';\nimport { CompleterTwigFilters } from './cms.editor.intellisense.completer.twigfilters.js';\nimport { CompleterOctoberPartials } from './cms.editor.intellisense.completer.partials.js';\nimport { CompleterAssets } from './cms.editor.intellisense.completer.assets.js';\nimport { CompleterPages } from './cms.editor.intellisense.completer.pages.js';\nimport { CompleterOctoberContent } from './cms.editor.intellisense.completer.content.js';\n\nimport { ClickHandlerTemplate } from './cms.editor.intellisense.clickhandler.template.js';\nimport { ClickHandlerCssImport } from './cms.editor.intellisense.clickhandler.cssimports.js';\nimport { HoverProviderOctoberTags } from './cms.editor.intellisense.hoverprovider.octobertags.js';\nimport { HoverProviderTwigFilters } from './cms.editor.intellisense.hoverprovider.twigfilters.js';\nimport { IntellisenseUtils } from './cms.editor.intellisense.utils.js';\nimport { ActionHandlerExpandComponent } from './cms.editor.intellisense.actionhandler.expandcomponent.js';\n\nlet instance = null;\n\nclass CmsIntellisense {\n    customData;\n    completers;\n    globalInitialized;\n    linkProviders;\n    hoverProviders;\n    listeners;\n    utils;\n    actionHandlers;\n\n    constructor(cmsCustomData) {\n        this.customData = cmsCustomData.intellisense;\n        this.globalInitialized = false;\n        this.listeners = new Map();\n        this.utils = new IntellisenseUtils(this);\n\n        this.completers = {\n            octoberTags: new CompleterOctoberTags(this),\n            octoberPartials: new CompleterOctoberPartials(this),\n            twigFilters: new CompleterTwigFilters(this),\n            assets: new CompleterAssets(this),\n            pages: new CompleterPages(this),\n            content: new CompleterOctoberContent(this)\n        };\n\n        this.linkProviders = {\n            octoberTemplates: new ClickHandlerTemplate(this, {\n                canManagePartials: cmsCustomData.canManagePartials,\n                canManageContent: cmsCustomData.canManageContent,\n                canManageAssets: cmsCustomData.canManageAssets,\n                canManagePages: cmsCustomData.canManagePages,\n                editableAssetExtensions: cmsCustomData.editableAssetExtensions\n            }),\n\n            lessImports: new ClickHandlerCssImport(this, {\n                extension: 'less'\n            }),\n\n            scssImports: new ClickHandlerCssImport(this, {\n                extension: 'scss'\n            })\n        };\n\n        this.hoverProviders = {\n            octoberTags: new HoverProviderOctoberTags(this),\n            twigFilters: new HoverProviderTwigFilters(this)\n        };\n\n        this.actionHandlers = new Map();\n    }\n\n    getCustomData() {\n        return this.customData;\n    }\n\n    init(monaco, editor, monacoComponent) {\n        if (!this.globalInitialized) {\n            this.globalInitialized = true;\n            monaco.languages.registerCompletionItemProvider('twig', this.completers.octoberTags);\n            monaco.languages.registerCompletionItemProvider('twig', this.completers.octoberPartials);\n            monaco.languages.registerCompletionItemProvider('twig', this.completers.twigFilters);\n            monaco.languages.registerCompletionItemProvider('twig', this.completers.assets);\n            monaco.languages.registerCompletionItemProvider('twig', this.completers.pages);\n            monaco.languages.registerCompletionItemProvider('twig', this.completers.content);\n\n            monaco.languages.registerLinkProvider('twig', this.linkProviders.octoberTemplates);\n            monaco.languages.registerLinkProvider('less', this.linkProviders.lessImports);\n            monaco.languages.registerLinkProvider('scss', this.linkProviders.scssImports);\n\n            monaco.languages.registerHoverProvider('twig', this.hoverProviders.octoberTags);\n            monaco.languages.registerHoverProvider('twig', this.hoverProviders.twigFilters);\n        }\n\n        this.addActionHandler(editor, new ActionHandlerExpandComponent(this, editor, monacoComponent));\n    }\n\n    trans(key) {\n        return $.oc.editor.getLangStr(key);\n    }\n\n    addActionHandler(editor, handler) {\n        if (this.actionHandlers.has(editor)) {\n            const handlers = this.actionHandlers.get(editor);\n            handlers.push(handler);\n            return;\n        }\n\n        this.actionHandlers.set(editor, [handler]);\n    }\n\n    on(eventType, listener) {\n        this.listeners.set(listener, eventType);\n    }\n\n    off(listener) {\n        this.listeners.delete(listener);\n    }\n\n    emit(eventType, payload) {\n        this.listeners.forEach((listenerEventType, listener) => {\n            if (listenerEventType == eventType) {\n                listener(payload);\n            }\n        });\n    }\n\n    escapeHtml(str) {\n        return str\n            .replace(/&/g, '&amp;')\n            .replace(/</g, '&lt;')\n            .replace(/>/g, '&gt;')\n            .replace(/\"/g, '&quot;')\n            .replace(/'/g, '&#039;');\n    }\n\n    modelHasTag(model, tag) {\n        if (!model.octoberEditorCmsTags) {\n            return false;\n        }\n\n        return model.octoberEditorCmsTags.indexOf(tag) !== -1;\n    }\n\n    getModelCustomAttribute(model, name) {\n        if (model.octoberEditorAttributes === undefined) {\n            return undefined;\n        }\n\n        return model.octoberEditorAttributes[name];\n    }\n\n    disposeForEditor(editor) {\n        this.actionHandlers.forEach((handlers, currentEditor) => {\n            if (currentEditor == editor) {\n                handlers.forEach((handler) => handler.dispose());\n            }\n        });\n    }\n\n    onContextMenu(payload) {\n        this.actionHandlers.forEach((handlers, editor) => {\n            if (editor == payload.editor) {\n                handlers.forEach((handler) => {\n                    handler.onContextMenu(payload.editor, payload.target);\n                });\n            }\n        });\n    }\n\n    onFilterSupportedActions(payload) {\n        this.actionHandlers.forEach((handlers, editor) => {\n            if (editor == payload.editor) {\n                handlers.forEach((handler) => handler.onFilterSupportedActions(payload));\n            }\n        });\n    }\n}\n\nexport function makeCmsIntellisense(cmsCustomData) {\n    if (instance !== null) {\n        return instance;\n    }\n\n    return (instance = new CmsIntellisense(cmsCustomData));\n}\n\nexport { CmsIntellisense };\n"
  },
  {
    "path": "modules/cms/assets/js/cms.editor.intellisense.utils.js",
    "content": "export class IntellisenseUtils {\n    intellisense;\n\n    constructor(intellisense) {\n        this.intellisense = intellisense;\n    }\n\n    getPartials() {\n        const cmsExtension = $.oc.editor.store.getExtension('cms');\n        const partialDocController = cmsExtension.getDocumentController('cms-partial');\n        const partials = partialDocController.getAllPartialFilenames();\n\n        return partials.map((partial) => {\n            return {\n                name: cmsExtension.removeFileExtension(partial)\n            };\n        });\n    }\n\n    getPages() {\n        const cmsExtension = $.oc.editor.store.getExtension('cms');\n        const pagesDocController = cmsExtension.getDocumentController('cms-page');\n        const pages = pagesDocController.getAllPageFilenames();\n\n        return pages.map((page) => {\n            return {\n                name: cmsExtension.removeFileExtension(page)\n            };\n        });\n    }\n\n    getAssets() {\n        const cmsExtension = $.oc.editor.store.getExtension('cms');\n        const assetDocController = cmsExtension.getDocumentController('cms-asset');\n        const assets = assetDocController.getAllAssetFilenames();\n\n        return assets.map((fileName) => {\n            return {\n                name: 'assets/' + fileName\n            };\n        });\n    }\n\n    getContentFiles() {\n        const cmsExtension = $.oc.editor.store.getExtension('cms');\n        const contentDocController = cmsExtension.getDocumentController('cms-content');\n        const content = contentDocController.getAllContentFilenames();\n\n        return content.map((fileName) => {\n            return {\n                name: fileName\n            };\n        });\n    }\n\n    makeTagDocumentationString(tag) {\n        let documentation = tag.documentation;\n\n        if (tag.docUrl) {\n            const e = this.intellisense.escapeHtml;\n            const learnMore = ' [' + e(this.intellisense.trans('cms::lang.intellisense.learn_more')) + ']';\n            documentation += '\\n' + learnMore + '(' + e(tag.docUrl) + ')';\n        }\n\n        return documentation;\n    }\n\n    textUntilPosition(model, position) {\n        return model.getValueInRange({\n            startLineNumber: position.lineNumber,\n            startColumn: 1,\n            endLineNumber: position.lineNumber,\n            endColumn: position.column\n        });\n    }\n\n    textAfterPosition(model, position) {\n        return model.getValueInRange({\n            startLineNumber: position.lineNumber,\n            startColumn: position.column,\n            endLineNumber: position.lineNumber,\n            endColumn: model.getLineLength(position.lineNumber) + 1\n        });\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/js/themelogs.templatediff.js",
    "content": "/*\n * Template Diff plugin\n *\n * Data attributes:\n * - data-control=\"template-diff\" - enables the plugin on an element\n *\n * JavaScript API:\n * $('pre').templateDiff({ option: 'value' })\n *\n * Dependencies:\n * - jsdiff (diff.js)\n */\n\n+function ($) { \"use strict\";\n\n    // TEMPALTE DIFF CLASS DEFINITION\n    // ============================\n\n    var TemplateDiff = function(element, options) {\n        this.options   = options\n        this.$el       = $(element)\n\n        // Init\n        this.init();\n    }\n\n    TemplateDiff.DEFAULTS = {\n        oldFieldName: null,\n        newFieldName: null,\n        contentTag: '',\n        diffType: 'lines' // chars, words, lines\n    }\n\n    TemplateDiff.prototype.init = function() {\n        var oldValue = $('[data-field-name=\"'+this.options.oldFieldName+'\"] .form-control '+this.options.contentTag).html(),\n            newValue = $('[data-field-name=\"'+this.options.newFieldName+'\"] .form-control '+this.options.contentTag).html();\n\n        oldValue = $('<div />').html(oldValue).text();\n        newValue = $('<div />').html(newValue).text();\n\n        this.diffStrings(oldValue, newValue);\n    }\n\n    TemplateDiff.prototype.diffStrings = function(oldValue, newValue) {\n        var result = this.$el.get(0),\n            diffType = 'diff' + this.options.diffType[0].toUpperCase() + this.options.diffType.slice(1),\n            diff = JsDiff[diffType](oldValue, newValue),\n            fragment = document.createDocumentFragment();\n\n        for (var i=0; i < diff.length; i++) {\n\n            if (diff[i].added && diff[i + 1] && diff[i + 1].removed) {\n                var swap = diff[i];\n                diff[i] = diff[i + 1];\n                diff[i + 1] = swap;\n            }\n\n            var node;\n            if (diff[i].removed) {\n                node = document.createElement('del');\n                node.appendChild(document.createTextNode(diff[i].value));\n            }\n            else if (diff[i].added) {\n                node = document.createElement('ins');\n                node.appendChild(document.createTextNode(diff[i].value));\n            }\n            else {\n                node = document.createTextNode(diff[i].value);\n            }\n            fragment.appendChild(node);\n        }\n\n        result.textContent = '';\n        result.appendChild(fragment);\n    }\n\n    // TEMPALTE DIFF PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.templateDiff\n\n    $.fn.templateDiff = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.example')\n            var options = $.extend({}, TemplateDiff.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.example', (data = new TemplateDiff(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        })\n\n        return result ? result : this\n    }\n\n    $.fn.templateDiff.Constructor = TemplateDiff\n\n    // TEMPALTE DIFF NO CONFLICT\n    // =================\n\n    $.fn.templateDiff.noConflict = function () {\n        $.fn.templateDiff = old\n        return this\n    }\n\n    // TEMPALTE DIFF DATA-API\n    // ===============\n\n    $(document).render(function () {\n        if (typeof JsDiff !== 'undefined') {\n            $('[data-control=\"template-diff\"]').templateDiff();\n        }\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/cms/assets/less/themes.less",
    "content": "@import \"../../../backend/assets/less/core/boot.less\";\n\n.theme-selector-layout {\n    .theme-item > div {\n        padding: 24px;\n        box-sizing: border-box;\n    }\n\n    .theme-thumbnail {\n        width: 288px;\n        background: @secondary-bg;\n        border-top: 1px solid @border-color;\n\n        img {\n            opacity: .6;\n            width: 240px;\n        }\n    }\n\n    .theme-description {\n        border-top: 1px solid @primary-border;\n        flex-grow: 1;\n\n        h3, p {\n            opacity: .6;\n        }\n\n        h3 {\n            margin: 0 0 25px 0;\n            font-size: 28px;\n            font-weight: 400;\n            color: @text-color;\n            display: inline-block;\n        }\n\n        p.author {\n            font-size: 13px;\n            display: inline-block;\n            color: @primary-color;\n        }\n\n        p.description {\n            color: @primary-color;\n            font-size: 14px;\n            line-height: 180%;\n            margin-bottom: 30px;\n        }\n\n        .controls {\n            .btn {\n                margin-right: 3.5px;\n            }\n\n            .btn > i {\n                margin-right: 5px;\n                font-size: 16px;\n                position: relative;\n                top: 1px;\n\n                &.icon-star {\n                    color: #f1a84e;\n                }\n            }\n\n            .dropdown {\n                display: inline-block;\n            }\n        }\n    }\n\n    .theme-item.active {\n        .theme-thumbnail {\n            background: @brand-secondary;\n            border-top-color: @border-color;\n       }\n\n       .thumbnail-container {\n            position: relative;\n\n            &:after {\n                .triangle(right, 15px, 28px, @brand-secondary);\n                position: absolute;\n                right: -35px;\n                top: 50%;\n                margin-top: -14px;\n            }\n       }\n    }\n\n    .theme-item {\n        &.active, &:hover {\n            .theme-description {\n                h3, p {\n                    opacity: 1;\n                }\n            }\n\n            .theme-thumbnail {\n                img {\n                    opacity: 1;\n                }\n            }\n        }\n\n        &:first-child, &.theme-item-links {\n            .theme-description, .theme-thumbnail {\n                border-top: none;\n            }\n        }\n\n        &.theme-item-links {\n            .theme-thumbnail {\n                border-bottom: 1px solid @border-color;\n            }\n            .theme-description {\n                border-bottom: 1px solid @primary-border;\n            }\n        }\n    }\n\n    .create-new-theme {\n        margin-bottom: 10px;\n    }\n\n    .create-new-theme,\n    .find-more-themes {\n        background: var(--oc-secondary-bg);\n        color: @emphasis-color;\n        text-decoration: none;\n        display: block;\n        padding: 20px;\n        border-radius: 4px;\n\n        &:hover {\n            background: @brand-selection;\n            color: white;\n        }\n    }\n}\n\n//\n// Screen specific\n//\n\n@media (max-width: @screen-sm) {\n    .theme-selector-layout {\n        .theme-item {\n            flex-direction: column;\n            .thumbnail-container:after {\n                display: none !important;\n            }\n        }\n\n        .theme-item > div {\n            flex-grow: 1;\n            display: block !important;\n            width: auto !important;\n            height: auto !important;\n        }\n\n        .theme-thumbnail {\n            img {\n                width: 100%;\n            }\n        }\n\n        .theme-item-links {\n            .theme-thumbnail {\n                background: transparent;\n                padding: 0;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/cms/assets/vendor/jsdiff/diff.js",
    "content": "/*!\n\n diff v3.2.0\n\nSoftware License Agreement (BSD License)\n\nCopyright (c) 2009-2015, Kevin Decker <kpdecker@gmail.com>\n\nAll rights reserved.\n\nRedistribution and use of this software in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above\n  copyright notice, this list of conditions and the\n  following disclaimer.\n\n* Redistributions in binary form must reproduce the above\n  copyright notice, this list of conditions and the\n  following disclaimer in the documentation and/or other\n  materials provided with the distribution.\n\n* Neither the name of Kevin Decker nor the names of its\n  contributors may be used to endorse or promote products\n  derived from this software without specific prior\n  written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER\nIN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\nOF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n@license\n*/\n(function webpackUniversalModuleDefinition(root, factory) {\n    if(typeof exports === 'object' && typeof module === 'object')\n        module.exports = factory();\n    else if(typeof define === 'function' && define.amd)\n        define([], factory);\n    else if(typeof exports === 'object')\n        exports[\"JsDiff\"] = factory();\n    else\n        root[\"JsDiff\"] = factory();\n})(this, function() {\nreturn (function(modules) { // webpackBootstrap\n    // The module cache\n    var installedModules = {};\n\n    // The require function\n    function __webpack_require__(moduleId) {\n\n        // Check if module is in cache\n        if(installedModules[moduleId])\n            return installedModules[moduleId].exports;\n\n        // Create a new module (and put it into the cache)\n        var module = installedModules[moduleId] = {\n            exports: {},\n            id: moduleId,\n            loaded: false\n        };\n\n        // Execute the module function\n        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n        // Flag the module as loaded\n        module.loaded = true;\n\n        // Return the exports of the module\n        return module.exports;\n    }\n\n\n    // expose the modules object (__webpack_modules__)\n    __webpack_require__.m = modules;\n\n    // expose the module cache\n    __webpack_require__.c = installedModules;\n\n    // __webpack_public_path__\n    __webpack_require__.p = \"\";\n\n    // Load entry module and return exports\n    return __webpack_require__(0);\n})\n/************************************************************************/\n([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports.canonicalize = exports.convertChangesToXML = exports.convertChangesToDMP = exports.parsePatch = exports.applyPatches = exports.applyPatch = exports.createPatch = exports.createTwoFilesPatch = exports.structuredPatch = exports.diffArrays = exports.diffJson = exports.diffCss = exports.diffSentences = exports.diffTrimmedLines = exports.diffLines = exports.diffWordsWithSpace = exports.diffWords = exports.diffChars = exports.Diff = undefined;\n    \n    var _base = __webpack_require__(1) ;\n\n    \n    var _base2 = _interopRequireDefault(_base);\n\n    \n    var _character = __webpack_require__(2) ;\n\n    var _word = __webpack_require__(3) ;\n\n    var _line = __webpack_require__(5) ;\n\n    var _sentence = __webpack_require__(6) ;\n\n    var _css = __webpack_require__(7) ;\n\n    var _json = __webpack_require__(8) ;\n\n    var _array = __webpack_require__(9) ;\n\n    var _apply = __webpack_require__(10) ;\n\n    var _parse = __webpack_require__(11) ;\n\n    var _create = __webpack_require__(13) ;\n\n    var _dmp = __webpack_require__(14) ;\n\n    var _xml = __webpack_require__(15) ;\n\n    \n    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n    exports. Diff = _base2['default'];\n    exports. diffChars = _character.diffChars;\n    exports. diffWords = _word.diffWords;\n    exports. diffWordsWithSpace = _word.diffWordsWithSpace;\n    exports. diffLines = _line.diffLines;\n    exports. diffTrimmedLines = _line.diffTrimmedLines;\n    exports. diffSentences = _sentence.diffSentences;\n    exports. diffCss = _css.diffCss;\n    exports. diffJson = _json.diffJson;\n    exports. diffArrays = _array.diffArrays;\n    exports. structuredPatch = _create.structuredPatch;\n    exports. createTwoFilesPatch = _create.createTwoFilesPatch;\n    exports. createPatch = _create.createPatch;\n    exports. applyPatch = _apply.applyPatch;\n    exports. applyPatches = _apply.applyPatches;\n    exports. parsePatch = _parse.parsePatch;\n    exports. convertChangesToDMP = _dmp.convertChangesToDMP;\n    exports. convertChangesToXML = _xml.convertChangesToXML;\n    exports. canonicalize = _json.canonicalize; /* See LICENSE file for terms of use */\n\n    /*\n     * Text diff implementation.\n     *\n     * This library supports the following APIS:\n     * JsDiff.diffChars: Character by character diff\n     * JsDiff.diffWords: Word (as defined by \\b regex) diff which ignores whitespace\n     * JsDiff.diffLines: Line based diff\n     *\n     * JsDiff.diffCss: Diff targeted at CSS content\n     *\n     * These methods are based on the implementation proposed in\n     * \"An O(ND) Difference Algorithm and its Variations\" (Myers, 1986).\n     * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927\n     */\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWdCQSxJLHlCQUFBLDhCLHdCQUFBOzs7Ozs7QUFDQSxJLHlCQUFBLHdDLHdCQUFBOztBQUNBLEkseUJBQUEsOEIsd0JBQUE7O0FBQ0EsSSx5QkFBQSw4Qix3QkFBQTs7QUFDQSxJLHlCQUFBLHNDLHdCQUFBOztBQUVBLEkseUJBQUEsNEIsd0JBQUE7O0FBQ0EsSSx5QkFBQSw4Qix3QkFBQTs7QUFFQSxJLHlCQUFBLGdDLHdCQUFBOztBQUVBLEkseUJBQUEsaUMsd0JBQUE7O0FBQ0EsSSx5QkFBQSxpQyx3QkFBQTs7QUFDQSxJLHlCQUFBLG1DLHdCQUFBOztBQUVBLEkseUJBQUEsK0Isd0JBQUE7O0FBQ0EsSSx5QkFBQSwrQix3QkFBQTs7Ozs7Z0NBR0UsSTt5REFFQSxTO3lEQUNBLFM7eURBQ0Esa0I7eURBQ0EsUzt5REFDQSxnQjt5REFDQSxhO3lEQUVBLE87eURBQ0EsUTt5REFFQSxVO3lEQUVBLGU7eURBQ0EsbUI7eURBQ0EsVzt5REFDQSxVO3lEQUNBLFk7eURBQ0EsVTt5REFDQSxtQjt5REFDQSxtQjt5REFDQSxZIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogU2VlIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMgb2YgdXNlICovXG5cbi8qXG4gKiBUZXh0IGRpZmYgaW1wbGVtZW50YXRpb24uXG4gKlxuICogVGhpcyBsaWJyYXJ5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgQVBJUzpcbiAqIEpzRGlmZi5kaWZmQ2hhcnM6IENoYXJhY3RlciBieSBjaGFyYWN0ZXIgZGlmZlxuICogSnNEaWZmLmRpZmZXb3JkczogV29yZCAoYXMgZGVmaW5lZCBieSBcXGIgcmVnZXgpIGRpZmYgd2hpY2ggaWdub3JlcyB3aGl0ZXNwYWNlXG4gKiBKc0RpZmYuZGlmZkxpbmVzOiBMaW5lIGJhc2VkIGRpZmZcbiAqXG4gKiBKc0RpZmYuZGlmZkNzczogRGlmZiB0YXJnZXRlZCBhdCBDU1MgY29udGVudFxuICpcbiAqIFRoZXNlIG1ldGhvZHMgYXJlIGJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBwcm9wb3NlZCBpblxuICogXCJBbiBPKE5EKSBEaWZmZXJlbmNlIEFsZ29yaXRobSBhbmQgaXRzIFZhcmlhdGlvbnNcIiAoTXllcnMsIDE5ODYpLlxuICogaHR0cDovL2NpdGVzZWVyeC5pc3QucHN1LmVkdS92aWV3ZG9jL3N1bW1hcnk/ZG9pPTEwLjEuMS40LjY5MjdcbiAqL1xuaW1wb3J0IERpZmYgZnJvbSAnLi9kaWZmL2Jhc2UnO1xuaW1wb3J0IHtkaWZmQ2hhcnN9IGZyb20gJy4vZGlmZi9jaGFyYWN0ZXInO1xuaW1wb3J0IHtkaWZmV29yZHMsIGRpZmZXb3Jkc1dpdGhTcGFjZX0gZnJvbSAnLi9kaWZmL3dvcmQnO1xuaW1wb3J0IHtkaWZmTGluZXMsIGRpZmZUcmltbWVkTGluZXN9IGZyb20gJy4vZGlmZi9saW5lJztcbmltcG9ydCB7ZGlmZlNlbnRlbmNlc30gZnJvbSAnLi9kaWZmL3NlbnRlbmNlJztcblxuaW1wb3J0IHtkaWZmQ3NzfSBmcm9tICcuL2RpZmYvY3NzJztcbmltcG9ydCB7ZGlmZkpzb24sIGNhbm9uaWNhbGl6ZX0gZnJvbSAnLi9kaWZmL2pzb24nO1xuXG5pbXBvcnQge2RpZmZBcnJheXN9IGZyb20gJy4vZGlmZi9hcnJheSc7XG5cbmltcG9ydCB7YXBwbHlQYXRjaCwgYXBwbHlQYXRjaGVzfSBmcm9tICcuL3BhdGNoL2FwcGx5JztcbmltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXRjaC9wYXJzZSc7XG5pbXBvcnQge3N0cnVjdHVyZWRQYXRjaCwgY3JlYXRlVHdvRmlsZXNQYXRjaCwgY3JlYXRlUGF0Y2h9IGZyb20gJy4vcGF0Y2gvY3JlYXRlJztcblxuaW1wb3J0IHtjb252ZXJ0Q2hhbmdlc1RvRE1QfSBmcm9tICcuL2NvbnZlcnQvZG1wJztcbmltcG9ydCB7Y29udmVydENoYW5nZXNUb1hNTH0gZnJvbSAnLi9jb252ZXJ0L3htbCc7XG5cbmV4cG9ydCB7XG4gIERpZmYsXG5cbiAgZGlmZkNoYXJzLFxuICBkaWZmV29yZHMsXG4gIGRpZmZXb3Jkc1dpdGhTcGFjZSxcbiAgZGlmZkxpbmVzLFxuICBkaWZmVHJpbW1lZExpbmVzLFxuICBkaWZmU2VudGVuY2VzLFxuXG4gIGRpZmZDc3MsXG4gIGRpZmZKc29uLFxuXG4gIGRpZmZBcnJheXMsXG5cbiAgc3RydWN0dXJlZFBhdGNoLFxuICBjcmVhdGVUd29GaWxlc1BhdGNoLFxuICBjcmVhdGVQYXRjaCxcbiAgYXBwbHlQYXRjaCxcbiAgYXBwbHlQYXRjaGVzLFxuICBwYXJzZVBhdGNoLFxuICBjb252ZXJ0Q2hhbmdlc1RvRE1QLFxuICBjb252ZXJ0Q2hhbmdlc1RvWE1MLFxuICBjYW5vbmljYWxpemVcbn07XG4iXX0=\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports['default'] = Diff;\n    function Diff() {}\n\n    Diff.prototype = { \n      diff: function diff(oldString, newString) {\n        var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n        var callback = options.callback;\n        if (typeof options === 'function') {\n          callback = options;\n          options = {};\n        }\n        this.options = options;\n\n        var self = this;\n\n        function done(value) {\n          if (callback) {\n            setTimeout(function () {\n              callback(undefined, value);\n            }, 0);\n            return true;\n          } else {\n            return value;\n          }\n        }\n\n        // Allow subclasses to massage the input prior to running\n        oldString = this.castInput(oldString);\n        newString = this.castInput(newString);\n\n        oldString = this.removeEmpty(this.tokenize(oldString));\n        newString = this.removeEmpty(this.tokenize(newString));\n\n        var newLen = newString.length,\n            oldLen = oldString.length;\n        var editLength = 1;\n        var maxEditLength = newLen + oldLen;\n        var bestPath = [{ newPos: -1, components: [] }];\n\n        // Seed editLength = 0, i.e. the content starts with the same values\n        var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n        if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n          // Identity per the equality and tokenizer\n          return done([{ value: this.join(newString), count: newString.length }]);\n        }\n\n        // Main worker method. checks all permutations of a given edit length for acceptance.\n        function execEditLength() {\n          for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n            var basePath = void 0 ;\n            var addPath = bestPath[diagonalPath - 1],\n                removePath = bestPath[diagonalPath + 1],\n                _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n            if (addPath) {\n              // No one else is going to attempt to use this value, clear it\n              bestPath[diagonalPath - 1] = undefined;\n            }\n\n            var canAdd = addPath && addPath.newPos + 1 < newLen,\n                canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;\n            if (!canAdd && !canRemove) {\n              // If this path is a terminal then prune\n              bestPath[diagonalPath] = undefined;\n              continue;\n            }\n\n            // Select the diagonal that we want to branch from. We select the prior\n            // path whose position in the new string is the farthest from the origin\n            // and does not pass the bounds of the diff graph\n            if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {\n              basePath = clonePath(removePath);\n              self.pushComponent(basePath.components, undefined, true);\n            } else {\n              basePath = addPath; // No need to clone, we've pulled it from the list\n              basePath.newPos++;\n              self.pushComponent(basePath.components, true, undefined);\n            }\n\n            _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath);\n\n            // If we have hit the end of both strings, then we are done\n            if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {\n              return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));\n            } else {\n              // Otherwise track this path as a potential candidate and continue.\n              bestPath[diagonalPath] = basePath;\n            }\n          }\n\n          editLength++;\n        }\n\n        // Performs the length of edit iteration. Is a bit fugly as this has to support the\n        // sync and async mode which is never fun. Loops over execEditLength until a value\n        // is produced.\n        if (callback) {\n          (function exec() {\n            setTimeout(function () {\n              // This should not happen, but we want to be safe.\n              /* istanbul ignore next */\n              if (editLength > maxEditLength) {\n                return callback();\n              }\n\n              if (!execEditLength()) {\n                exec();\n              }\n            }, 0);\n          })();\n        } else {\n          while (editLength <= maxEditLength) {\n            var ret = execEditLength();\n            if (ret) {\n              return ret;\n            }\n          }\n        }\n      },\n       pushComponent: function pushComponent(components, added, removed) {\n        var last = components[components.length - 1];\n        if (last && last.added === added && last.removed === removed) {\n          // We need to clone here as the component clone operation is just\n          // as shallow array clone\n          components[components.length - 1] = { count: last.count + 1, added: added, removed: removed };\n        } else {\n          components.push({ count: 1, added: added, removed: removed });\n        }\n      },\n       extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {\n        var newLen = newString.length,\n            oldLen = oldString.length,\n            newPos = basePath.newPos,\n            oldPos = newPos - diagonalPath,\n            commonCount = 0;\n        while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n          newPos++;\n          oldPos++;\n          commonCount++;\n        }\n\n        if (commonCount) {\n          basePath.components.push({ count: commonCount });\n        }\n\n        basePath.newPos = newPos;\n        return oldPos;\n      },\n       equals: function equals(left, right) {\n        return left === right;\n      },\n       removeEmpty: function removeEmpty(array) {\n        var ret = [];\n        for (var i = 0; i < array.length; i++) {\n          if (array[i]) {\n            ret.push(array[i]);\n          }\n        }\n        return ret;\n      },\n       castInput: function castInput(value) {\n        return value;\n      },\n       tokenize: function tokenize(value) {\n        return value.split('');\n      },\n       join: function join(chars) {\n        return chars.join('');\n      }\n    };\n\n    function buildValues(diff, components, newString, oldString, useLongestToken) {\n      var componentPos = 0,\n          componentLen = components.length,\n          newPos = 0,\n          oldPos = 0;\n\n      for (; componentPos < componentLen; componentPos++) {\n        var component = components[componentPos];\n        if (!component.removed) {\n          if (!component.added && useLongestToken) {\n            var value = newString.slice(newPos, newPos + component.count);\n            value = value.map(function (value, i) {\n              var oldValue = oldString[oldPos + i];\n              return oldValue.length > value.length ? oldValue : value;\n            });\n\n            component.value = diff.join(value);\n          } else {\n            component.value = diff.join(newString.slice(newPos, newPos + component.count));\n          }\n          newPos += component.count;\n\n          // Common case\n          if (!component.added) {\n            oldPos += component.count;\n          }\n        } else {\n          component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n          oldPos += component.count;\n\n          // Reverse add and remove so removes are output first to match common convention\n          // The diffing algorithm is tied to add then remove output and this is the simplest\n          // route to get the desired output with minimal overhead.\n          if (componentPos && components[componentPos - 1].added) {\n            var tmp = components[componentPos - 1];\n            components[componentPos - 1] = components[componentPos];\n            components[componentPos] = tmp;\n          }\n        }\n      }\n\n      // Special case handle for when one terminal is ignored. For this case we merge the\n      // terminal into the prior string and drop the change.\n      var lastComponent = components[componentLen - 1];\n      if (componentLen > 1 && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {\n        components[componentLen - 2].value += lastComponent.value;\n        components.pop();\n      }\n\n      return components;\n    }\n\n    function clonePath(path) {\n      return { newPos: path.newPos, components: path.components.slice(0) };\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OzRDQUF3QixJO0FBQVQsU0FBUyxJQUFULEdBQWdCLENBQUU7O0FBRWpDLEtBQUssU0FBTCxHQUFpQixFO3lCQUNmLElBRGUsZ0JBQ1YsU0FEVSxFQUNDLFNBREQsRUFDMEI7NkJBQUEsSSx1QkFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQ3ZDLFFBQUksV0FBVyxRQUFRLFFBQXZCO0FBQ0EsUUFBSSxPQUFPLE9BQVAsS0FBbUIsVUFBdkIsRUFBbUM7QUFDakMsaUJBQVcsT0FBWDtBQUNBLGdCQUFVLEVBQVY7QUFDRDtBQUNELFNBQUssT0FBTCxHQUFlLE9BQWY7O0FBRUEsUUFBSSxPQUFPLElBQVg7O0FBRUEsYUFBUyxJQUFULENBQWMsS0FBZCxFQUFxQjtBQUNuQixVQUFJLFFBQUosRUFBYztBQUNaLG1CQUFXLFlBQVc7QUFBRSxtQkFBUyxTQUFULEVBQW9CLEtBQXBCO0FBQTZCLFNBQXJELEVBQXVELENBQXZEO0FBQ0EsZUFBTyxJQUFQO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsZUFBTyxLQUFQO0FBQ0Q7QUFDRjs7O0FBR0QsZ0JBQVksS0FBSyxTQUFMLENBQWUsU0FBZixDQUFaO0FBQ0EsZ0JBQVksS0FBSyxTQUFMLENBQWUsU0FBZixDQUFaOztBQUVBLGdCQUFZLEtBQUssV0FBTCxDQUFpQixLQUFLLFFBQUwsQ0FBYyxTQUFkLENBQWpCLENBQVo7QUFDQSxnQkFBWSxLQUFLLFdBQUwsQ0FBaUIsS0FBSyxRQUFMLENBQWMsU0FBZCxDQUFqQixDQUFaOztBQUVBLFFBQUksU0FBUyxVQUFVLE1BQXZCO0FBQUEsUUFBK0IsU0FBUyxVQUFVLE1BQWxEO0FBQ0EsUUFBSSxhQUFhLENBQWpCO0FBQ0EsUUFBSSxnQkFBZ0IsU0FBUyxNQUE3QjtBQUNBLFFBQUksV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQVgsRUFBYyxZQUFZLEVBQTFCLEVBQUQsQ0FBZjs7O0FBR0EsUUFBSSxTQUFTLEtBQUssYUFBTCxDQUFtQixTQUFTLENBQVQsQ0FBbkIsRUFBZ0MsU0FBaEMsRUFBMkMsU0FBM0MsRUFBc0QsQ0FBdEQsQ0FBYjtBQUNBLFFBQUksU0FBUyxDQUFULEVBQVksTUFBWixHQUFxQixDQUFyQixJQUEwQixNQUExQixJQUFvQyxTQUFTLENBQVQsSUFBYyxNQUF0RCxFQUE4RDs7QUFFNUQsYUFBTyxLQUFLLENBQUMsRUFBQyxPQUFPLEtBQUssSUFBTCxDQUFVLFNBQVYsQ0FBUixFQUE4QixPQUFPLFVBQVUsTUFBL0MsRUFBRCxDQUFMLENBQVA7QUFDRDs7O0FBR0QsYUFBUyxjQUFULEdBQTBCO0FBQ3hCLFdBQUssSUFBSSxlQUFlLENBQUMsQ0FBRCxHQUFLLFVBQTdCLEVBQXlDLGdCQUFnQixVQUF6RCxFQUFxRSxnQkFBZ0IsQ0FBckYsRUFBd0Y7QUFDdEYsWUFBSSxXLHlCQUFBLE0sd0JBQUo7QUFDQSxZQUFJLFVBQVUsU0FBUyxlQUFlLENBQXhCLENBQWQ7QUFBQSxZQUNJLGFBQWEsU0FBUyxlQUFlLENBQXhCLENBRGpCO0FBQUEsWUFFSSxVQUFTLENBQUMsYUFBYSxXQUFXLE1BQXhCLEdBQWlDLENBQWxDLElBQXVDLFlBRnBEO0FBR0EsWUFBSSxPQUFKLEVBQWE7O0FBRVgsbUJBQVMsZUFBZSxDQUF4QixJQUE2QixTQUE3QjtBQUNEOztBQUVELFlBQUksU0FBUyxXQUFXLFFBQVEsTUFBUixHQUFpQixDQUFqQixHQUFxQixNQUE3QztBQUFBLFlBQ0ksWUFBWSxjQUFjLEtBQUssT0FBbkIsSUFBNkIsVUFBUyxNQUR0RDtBQUVBLFlBQUksQ0FBQyxNQUFELElBQVcsQ0FBQyxTQUFoQixFQUEyQjs7QUFFekIsbUJBQVMsWUFBVCxJQUF5QixTQUF6QjtBQUNBO0FBQ0Q7Ozs7O0FBS0QsWUFBSSxDQUFDLE1BQUQsSUFBWSxhQUFhLFFBQVEsTUFBUixHQUFpQixXQUFXLE1BQXpELEVBQWtFO0FBQ2hFLHFCQUFXLFVBQVUsVUFBVixDQUFYO0FBQ0EsZUFBSyxhQUFMLENBQW1CLFNBQVMsVUFBNUIsRUFBd0MsU0FBeEMsRUFBbUQsSUFBbkQ7QUFDRCxTQUhELE1BR087QUFDTCxxQkFBVyxPQUFYLEM7QUFDQSxtQkFBUyxNQUFUO0FBQ0EsZUFBSyxhQUFMLENBQW1CLFNBQVMsVUFBNUIsRUFBd0MsSUFBeEMsRUFBOEMsU0FBOUM7QUFDRDs7QUFFRCxrQkFBUyxLQUFLLGFBQUwsQ0FBbUIsUUFBbkIsRUFBNkIsU0FBN0IsRUFBd0MsU0FBeEMsRUFBbUQsWUFBbkQsQ0FBVDs7O0FBR0EsWUFBSSxTQUFTLE1BQVQsR0FBa0IsQ0FBbEIsSUFBdUIsTUFBdkIsSUFBaUMsVUFBUyxDQUFULElBQWMsTUFBbkQsRUFBMkQ7QUFDekQsaUJBQU8sS0FBSyxZQUFZLElBQVosRUFBa0IsU0FBUyxVQUEzQixFQUF1QyxTQUF2QyxFQUFrRCxTQUFsRCxFQUE2RCxLQUFLLGVBQWxFLENBQUwsQ0FBUDtBQUNELFNBRkQsTUFFTzs7QUFFTCxtQkFBUyxZQUFULElBQXlCLFFBQXpCO0FBQ0Q7QUFDRjs7QUFFRDtBQUNEOzs7OztBQUtELFFBQUksUUFBSixFQUFjO0FBQ1gsZ0JBQVMsSUFBVCxHQUFnQjtBQUNmLG1CQUFXLFlBQVc7OztBQUdwQixjQUFJLGFBQWEsYUFBakIsRUFBZ0M7QUFDOUIsbUJBQU8sVUFBUDtBQUNEOztBQUVELGNBQUksQ0FBQyxnQkFBTCxFQUF1QjtBQUNyQjtBQUNEO0FBQ0YsU0FWRCxFQVVHLENBVkg7QUFXRCxPQVpBLEdBQUQ7QUFhRCxLQWRELE1BY087QUFDTCxhQUFPLGNBQWMsYUFBckIsRUFBb0M7QUFDbEMsWUFBSSxNQUFNLGdCQUFWO0FBQ0EsWUFBSSxHQUFKLEVBQVM7QUFDUCxpQkFBTyxHQUFQO0FBQ0Q7QUFDRjtBQUNGO0FBQ0YsR0E5R2M7bURBZ0hmLGFBaEhlLHlCQWdIRCxVQWhIQyxFQWdIVyxLQWhIWCxFQWdIa0IsT0FoSGxCLEVBZ0gyQjtBQUN4QyxRQUFJLE9BQU8sV0FBVyxXQUFXLE1BQVgsR0FBb0IsQ0FBL0IsQ0FBWDtBQUNBLFFBQUksUUFBUSxLQUFLLEtBQUwsS0FBZSxLQUF2QixJQUFnQyxLQUFLLE9BQUwsS0FBaUIsT0FBckQsRUFBOEQ7OztBQUc1RCxpQkFBVyxXQUFXLE1BQVgsR0FBb0IsQ0FBL0IsSUFBb0MsRUFBQyxPQUFPLEtBQUssS0FBTCxHQUFhLENBQXJCLEVBQXdCLE9BQU8sS0FBL0IsRUFBc0MsU0FBUyxPQUEvQyxFQUFwQztBQUNELEtBSkQsTUFJTztBQUNMLGlCQUFXLElBQVgsQ0FBZ0IsRUFBQyxPQUFPLENBQVIsRUFBVyxPQUFPLEtBQWxCLEVBQXlCLFNBQVMsT0FBbEMsRUFBaEI7QUFDRDtBQUNGLEdBekhjO21EQTBIZixhQTFIZSx5QkEwSEQsUUExSEMsRUEwSFMsU0ExSFQsRUEwSG9CLFNBMUhwQixFQTBIK0IsWUExSC9CLEVBMEg2QztBQUMxRCxRQUFJLFNBQVMsVUFBVSxNQUF2QjtBQUFBLFFBQ0ksU0FBUyxVQUFVLE1BRHZCO0FBQUEsUUFFSSxTQUFTLFNBQVMsTUFGdEI7QUFBQSxRQUdJLFNBQVMsU0FBUyxZQUh0QjtBQUFBLFFBS0ksY0FBYyxDQUxsQjtBQU1BLFdBQU8sU0FBUyxDQUFULEdBQWEsTUFBYixJQUF1QixTQUFTLENBQVQsR0FBYSxNQUFwQyxJQUE4QyxLQUFLLE1BQUwsQ0FBWSxVQUFVLFNBQVMsQ0FBbkIsQ0FBWixFQUFtQyxVQUFVLFNBQVMsQ0FBbkIsQ0FBbkMsQ0FBckQsRUFBZ0g7QUFDOUc7QUFDQTtBQUNBO0FBQ0Q7O0FBRUQsUUFBSSxXQUFKLEVBQWlCO0FBQ2YsZUFBUyxVQUFULENBQW9CLElBQXBCLENBQXlCLEVBQUMsT0FBTyxXQUFSLEVBQXpCO0FBQ0Q7O0FBRUQsYUFBUyxNQUFULEdBQWtCLE1BQWxCO0FBQ0EsV0FBTyxNQUFQO0FBQ0QsR0E3SWM7bURBK0lmLE1BL0llLGtCQStJUixJQS9JUSxFQStJRixLQS9JRSxFQStJSztBQUNsQixXQUFPLFNBQVMsS0FBaEI7QUFDRCxHQWpKYzttREFrSmYsV0FsSmUsdUJBa0pILEtBbEpHLEVBa0pJO0FBQ2pCLFFBQUksTUFBTSxFQUFWO0FBQ0EsU0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLE1BQU0sTUFBMUIsRUFBa0MsR0FBbEMsRUFBdUM7QUFDckMsVUFBSSxNQUFNLENBQU4sQ0FBSixFQUFjO0FBQ1osWUFBSSxJQUFKLENBQVMsTUFBTSxDQUFOLENBQVQ7QUFDRDtBQUNGO0FBQ0QsV0FBTyxHQUFQO0FBQ0QsR0ExSmM7bURBMkpmLFNBM0plLHFCQTJKTCxLQTNKSyxFQTJKRTtBQUNmLFdBQU8sS0FBUDtBQUNELEdBN0pjO21EQThKZixRQTlKZSxvQkE4Sk4sS0E5Sk0sRUE4SkM7QUFDZCxXQUFPLE1BQU0sS0FBTixDQUFZLEVBQVosQ0FBUDtBQUNELEdBaEtjO21EQWlLZixJQWpLZSxnQkFpS1YsS0FqS1UsRUFpS0g7QUFDVixXQUFPLE1BQU0sSUFBTixDQUFXLEVBQVgsQ0FBUDtBQUNEO0FBbktjLENBQWpCOztBQXNLQSxTQUFTLFdBQVQsQ0FBcUIsSUFBckIsRUFBMkIsVUFBM0IsRUFBdUMsU0FBdkMsRUFBa0QsU0FBbEQsRUFBNkQsZUFBN0QsRUFBOEU7QUFDNUUsTUFBSSxlQUFlLENBQW5CO0FBQUEsTUFDSSxlQUFlLFdBQVcsTUFEOUI7QUFBQSxNQUVJLFNBQVMsQ0FGYjtBQUFBLE1BR0ksU0FBUyxDQUhiOztBQUtBLFNBQU8sZUFBZSxZQUF0QixFQUFvQyxjQUFwQyxFQUFvRDtBQUNsRCxRQUFJLFlBQVksV0FBVyxZQUFYLENBQWhCO0FBQ0EsUUFBSSxDQUFDLFVBQVUsT0FBZixFQUF3QjtBQUN0QixVQUFJLENBQUMsVUFBVSxLQUFYLElBQW9CLGVBQXhCLEVBQXlDO0FBQ3ZDLFlBQUksUUFBUSxVQUFVLEtBQVYsQ0FBZ0IsTUFBaEIsRUFBd0IsU0FBUyxVQUFVLEtBQTNDLENBQVo7QUFDQSxnQkFBUSxNQUFNLEdBQU4sQ0FBVSxVQUFTLEtBQVQsRUFBZ0IsQ0FBaEIsRUFBbUI7QUFDbkMsY0FBSSxXQUFXLFVBQVUsU0FBUyxDQUFuQixDQUFmO0FBQ0EsaUJBQU8sU0FBUyxNQUFULEdBQWtCLE1BQU0sTUFBeEIsR0FBaUMsUUFBakMsR0FBNEMsS0FBbkQ7QUFDRCxTQUhPLENBQVI7O0FBS0Esa0JBQVUsS0FBVixHQUFrQixLQUFLLElBQUwsQ0FBVSxLQUFWLENBQWxCO0FBQ0QsT0FSRCxNQVFPO0FBQ0wsa0JBQVUsS0FBVixHQUFrQixLQUFLLElBQUwsQ0FBVSxVQUFVLEtBQVYsQ0FBZ0IsTUFBaEIsRUFBd0IsU0FBUyxVQUFVLEtBQTNDLENBQVYsQ0FBbEI7QUFDRDtBQUNELGdCQUFVLFVBQVUsS0FBcEI7OztBQUdBLFVBQUksQ0FBQyxVQUFVLEtBQWYsRUFBc0I7QUFDcEIsa0JBQVUsVUFBVSxLQUFwQjtBQUNEO0FBQ0YsS0FsQkQsTUFrQk87QUFDTCxnQkFBVSxLQUFWLEdBQWtCLEtBQUssSUFBTCxDQUFVLFVBQVUsS0FBVixDQUFnQixNQUFoQixFQUF3QixTQUFTLFVBQVUsS0FBM0MsQ0FBVixDQUFsQjtBQUNBLGdCQUFVLFVBQVUsS0FBcEI7Ozs7O0FBS0EsVUFBSSxnQkFBZ0IsV0FBVyxlQUFlLENBQTFCLEVBQTZCLEtBQWpELEVBQXdEO0FBQ3RELFlBQUksTUFBTSxXQUFXLGVBQWUsQ0FBMUIsQ0FBVjtBQUNBLG1CQUFXLGVBQWUsQ0FBMUIsSUFBK0IsV0FBVyxZQUFYLENBQS9CO0FBQ0EsbUJBQVcsWUFBWCxJQUEyQixHQUEzQjtBQUNEO0FBQ0Y7QUFDRjs7OztBQUlELE1BQUksZ0JBQWdCLFdBQVcsZUFBZSxDQUExQixDQUFwQjtBQUNBLE1BQUksZUFBZSxDQUFmLEtBQ0ksY0FBYyxLQUFkLElBQXVCLGNBQWMsT0FEekMsS0FFRyxLQUFLLE1BQUwsQ0FBWSxFQUFaLEVBQWdCLGNBQWMsS0FBOUIsQ0FGUCxFQUU2QztBQUMzQyxlQUFXLGVBQWUsQ0FBMUIsRUFBNkIsS0FBN0IsSUFBc0MsY0FBYyxLQUFwRDtBQUNBLGVBQVcsR0FBWDtBQUNEOztBQUVELFNBQU8sVUFBUDtBQUNEOztBQUVELFNBQVMsU0FBVCxDQUFtQixJQUFuQixFQUF5QjtBQUN2QixTQUFPLEVBQUUsUUFBUSxLQUFLLE1BQWYsRUFBdUIsWUFBWSxLQUFLLFVBQUwsQ0FBZ0IsS0FBaEIsQ0FBc0IsQ0FBdEIsQ0FBbkMsRUFBUDtBQUNEIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaWZmKCkge31cblxuRGlmZi5wcm90b3R5cGUgPSB7XG4gIGRpZmYob2xkU3RyaW5nLCBuZXdTdHJpbmcsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBjYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBkb25lKHZhbHVlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2sodW5kZWZpbmVkLCB2YWx1ZSk7IH0sIDApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbGxvdyBzdWJjbGFzc2VzIHRvIG1hc3NhZ2UgdGhlIGlucHV0IHByaW9yIHRvIHJ1bm5pbmdcbiAgICBvbGRTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChvbGRTdHJpbmcpO1xuICAgIG5ld1N0cmluZyA9IHRoaXMuY2FzdElucHV0KG5ld1N0cmluZyk7XG5cbiAgICBvbGRTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUob2xkU3RyaW5nKSk7XG4gICAgbmV3U3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG5ld1N0cmluZykpO1xuXG4gICAgbGV0IG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGg7XG4gICAgbGV0IGVkaXRMZW5ndGggPSAxO1xuICAgIGxldCBtYXhFZGl0TGVuZ3RoID0gbmV3TGVuICsgb2xkTGVuO1xuICAgIGxldCBiZXN0UGF0aCA9IFt7IG5ld1BvczogLTEsIGNvbXBvbmVudHM6IFtdIH1dO1xuXG4gICAgLy8gU2VlZCBlZGl0TGVuZ3RoID0gMCwgaS5lLiB0aGUgY29udGVudCBzdGFydHMgd2l0aCB0aGUgc2FtZSB2YWx1ZXNcbiAgICBsZXQgb2xkUG9zID0gdGhpcy5leHRyYWN0Q29tbW9uKGJlc3RQYXRoWzBdLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgMCk7XG4gICAgaWYgKGJlc3RQYXRoWzBdLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAvLyBJZGVudGl0eSBwZXIgdGhlIGVxdWFsaXR5IGFuZCB0b2tlbml6ZXJcbiAgICAgIHJldHVybiBkb25lKFt7dmFsdWU6IHRoaXMuam9pbihuZXdTdHJpbmcpLCBjb3VudDogbmV3U3RyaW5nLmxlbmd0aH1dKTtcbiAgICB9XG5cbiAgICAvLyBNYWluIHdvcmtlciBtZXRob2QuIGNoZWNrcyBhbGwgcGVybXV0YXRpb25zIG9mIGEgZ2l2ZW4gZWRpdCBsZW5ndGggZm9yIGFjY2VwdGFuY2UuXG4gICAgZnVuY3Rpb24gZXhlY0VkaXRMZW5ndGgoKSB7XG4gICAgICBmb3IgKGxldCBkaWFnb25hbFBhdGggPSAtMSAqIGVkaXRMZW5ndGg7IGRpYWdvbmFsUGF0aCA8PSBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggKz0gMikge1xuICAgICAgICBsZXQgYmFzZVBhdGg7XG4gICAgICAgIGxldCBhZGRQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0sXG4gICAgICAgICAgICByZW1vdmVQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoICsgMV0sXG4gICAgICAgICAgICBvbGRQb3MgPSAocmVtb3ZlUGF0aCA/IHJlbW92ZVBhdGgubmV3UG9zIDogMCkgLSBkaWFnb25hbFBhdGg7XG4gICAgICAgIGlmIChhZGRQYXRoKSB7XG4gICAgICAgICAgLy8gTm8gb25lIGVsc2UgaXMgZ29pbmcgdG8gYXR0ZW1wdCB0byB1c2UgdGhpcyB2YWx1ZSwgY2xlYXIgaXRcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGggLSAxXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjYW5BZGQgPSBhZGRQYXRoICYmIGFkZFBhdGgubmV3UG9zICsgMSA8IG5ld0xlbixcbiAgICAgICAgICAgIGNhblJlbW92ZSA9IHJlbW92ZVBhdGggJiYgMCA8PSBvbGRQb3MgJiYgb2xkUG9zIDwgb2xkTGVuO1xuICAgICAgICBpZiAoIWNhbkFkZCAmJiAhY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBwYXRoIGlzIGEgdGVybWluYWwgdGhlbiBwcnVuZVxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWxlY3QgdGhlIGRpYWdvbmFsIHRoYXQgd2Ugd2FudCB0byBicmFuY2ggZnJvbS4gV2Ugc2VsZWN0IHRoZSBwcmlvclxuICAgICAgICAvLyBwYXRoIHdob3NlIHBvc2l0aW9uIGluIHRoZSBuZXcgc3RyaW5nIGlzIHRoZSBmYXJ0aGVzdCBmcm9tIHRoZSBvcmlnaW5cbiAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuICAgICAgICBpZiAoIWNhbkFkZCB8fCAoY2FuUmVtb3ZlICYmIGFkZFBhdGgubmV3UG9zIDwgcmVtb3ZlUGF0aC5uZXdQb3MpKSB7XG4gICAgICAgICAgYmFzZVBhdGggPSBjbG9uZVBhdGgocmVtb3ZlUGF0aCk7XG4gICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZVBhdGggPSBhZGRQYXRoOyAgIC8vIE5vIG5lZWQgdG8gY2xvbmUsIHdlJ3ZlIHB1bGxlZCBpdCBmcm9tIHRoZSBsaXN0XG4gICAgICAgICAgYmFzZVBhdGgubmV3UG9zKys7XG4gICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHRydWUsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBvbGRQb3MgPSBzZWxmLmV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpO1xuXG4gICAgICAgIC8vIElmIHdlIGhhdmUgaGl0IHRoZSBlbmQgb2YgYm90aCBzdHJpbmdzLCB0aGVuIHdlIGFyZSBkb25lXG4gICAgICAgIGlmIChiYXNlUGF0aC5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgICAgIHJldHVybiBkb25lKGJ1aWxkVmFsdWVzKHNlbGYsIGJhc2VQYXRoLmNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBzZWxmLnVzZUxvbmdlc3RUb2tlbikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSB0cmFjayB0aGlzIHBhdGggYXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlIGFuZCBjb250aW51ZS5cbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWRpdExlbmd0aCsrO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm1zIHRoZSBsZW5ndGggb2YgZWRpdCBpdGVyYXRpb24uIElzIGEgYml0IGZ1Z2x5IGFzIHRoaXMgaGFzIHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gc3luYyBhbmQgYXN5bmMgbW9kZSB3aGljaCBpcyBuZXZlciBmdW4uIExvb3BzIG92ZXIgZXhlY0VkaXRMZW5ndGggdW50aWwgYSB2YWx1ZVxuICAgIC8vIGlzIHByb2R1Y2VkLlxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IHdlIHdhbnQgdG8gYmUgc2FmZS5cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlmIChlZGl0TGVuZ3RoID4gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFleGVjRWRpdExlbmd0aCgpKSB7XG4gICAgICAgICAgICBleGVjKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICAgIH0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChlZGl0TGVuZ3RoIDw9IG1heEVkaXRMZW5ndGgpIHtcbiAgICAgICAgbGV0IHJldCA9IGV4ZWNFZGl0TGVuZ3RoKCk7XG4gICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHB1c2hDb21wb25lbnQoY29tcG9uZW50cywgYWRkZWQsIHJlbW92ZWQpIHtcbiAgICBsZXQgbGFzdCA9IGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXTtcbiAgICBpZiAobGFzdCAmJiBsYXN0LmFkZGVkID09PSBhZGRlZCAmJiBsYXN0LnJlbW92ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2xvbmUgaGVyZSBhcyB0aGUgY29tcG9uZW50IGNsb25lIG9wZXJhdGlvbiBpcyBqdXN0XG4gICAgICAvLyBhcyBzaGFsbG93IGFycmF5IGNsb25lXG4gICAgICBjb21wb25lbnRzW2NvbXBvbmVudHMubGVuZ3RoIC0gMV0gPSB7Y291bnQ6IGxhc3QuY291bnQgKyAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50cy5wdXNoKHtjb3VudDogMSwgYWRkZWQ6IGFkZGVkLCByZW1vdmVkOiByZW1vdmVkIH0pO1xuICAgIH1cbiAgfSxcbiAgZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCkge1xuICAgIGxldCBuZXdMZW4gPSBuZXdTdHJpbmcubGVuZ3RoLFxuICAgICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoLFxuICAgICAgICBuZXdQb3MgPSBiYXNlUGF0aC5uZXdQb3MsXG4gICAgICAgIG9sZFBvcyA9IG5ld1BvcyAtIGRpYWdvbmFsUGF0aCxcblxuICAgICAgICBjb21tb25Db3VudCA9IDA7XG4gICAgd2hpbGUgKG5ld1BvcyArIDEgPCBuZXdMZW4gJiYgb2xkUG9zICsgMSA8IG9sZExlbiAmJiB0aGlzLmVxdWFscyhuZXdTdHJpbmdbbmV3UG9zICsgMV0sIG9sZFN0cmluZ1tvbGRQb3MgKyAxXSkpIHtcbiAgICAgIG5ld1BvcysrO1xuICAgICAgb2xkUG9zKys7XG4gICAgICBjb21tb25Db3VudCsrO1xuICAgIH1cblxuICAgIGlmIChjb21tb25Db3VudCkge1xuICAgICAgYmFzZVBhdGguY29tcG9uZW50cy5wdXNoKHtjb3VudDogY29tbW9uQ291bnR9KTtcbiAgICB9XG5cbiAgICBiYXNlUGF0aC5uZXdQb3MgPSBuZXdQb3M7XG4gICAgcmV0dXJuIG9sZFBvcztcbiAgfSxcblxuICBlcXVhbHMobGVmdCwgcmlnaHQpIHtcbiAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQ7XG4gIH0sXG4gIHJlbW92ZUVtcHR5KGFycmF5KSB7XG4gICAgbGV0IHJldCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcnJheVtpXSkge1xuICAgICAgICByZXQucHVzaChhcnJheVtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG4gIGNhc3RJbnB1dCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgdG9rZW5pemUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJycpO1xuICB9LFxuICBqb2luKGNoYXJzKSB7XG4gICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBidWlsZFZhbHVlcyhkaWZmLCBjb21wb25lbnRzLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgdXNlTG9uZ2VzdFRva2VuKSB7XG4gIGxldCBjb21wb25lbnRQb3MgPSAwLFxuICAgICAgY29tcG9uZW50TGVuID0gY29tcG9uZW50cy5sZW5ndGgsXG4gICAgICBuZXdQb3MgPSAwLFxuICAgICAgb2xkUG9zID0gMDtcblxuICBmb3IgKDsgY29tcG9uZW50UG9zIDwgY29tcG9uZW50TGVuOyBjb21wb25lbnRQb3MrKykge1xuICAgIGxldCBjb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgaWYgKCFjb21wb25lbnQucmVtb3ZlZCkge1xuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQgJiYgdXNlTG9uZ2VzdFRva2VuKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKSB7XG4gICAgICAgICAgbGV0IG9sZFZhbHVlID0gb2xkU3RyaW5nW29sZFBvcyArIGldO1xuICAgICAgICAgIHJldHVybiBvbGRWYWx1ZS5sZW5ndGggPiB2YWx1ZS5sZW5ndGggPyBvbGRWYWx1ZSA6IHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4odmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgfVxuICAgICAgbmV3UG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuICAgICAgLy8gQ29tbW9uIGNhc2VcbiAgICAgIGlmICghY29tcG9uZW50LmFkZGVkKSB7XG4gICAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbihvbGRTdHJpbmcuc2xpY2Uob2xkUG9zLCBvbGRQb3MgKyBjb21wb25lbnQuY291bnQpKTtcbiAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG5cbiAgICAgIC8vIFJldmVyc2UgYWRkIGFuZCByZW1vdmUgc28gcmVtb3ZlcyBhcmUgb3V0cHV0IGZpcnN0IHRvIG1hdGNoIGNvbW1vbiBjb252ZW50aW9uXG4gICAgICAvLyBUaGUgZGlmZmluZyBhbGdvcml0aG0gaXMgdGllZCB0byBhZGQgdGhlbiByZW1vdmUgb3V0cHV0IGFuZCB0aGlzIGlzIHRoZSBzaW1wbGVzdFxuICAgICAgLy8gcm91dGUgdG8gZ2V0IHRoZSBkZXNpcmVkIG91dHB1dCB3aXRoIG1pbmltYWwgb3ZlcmhlYWQuXG4gICAgICBpZiAoY29tcG9uZW50UG9zICYmIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0uYWRkZWQpIHtcbiAgICAgICAgbGV0IHRtcCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV07XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0gPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zXSA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTcGVjaWFsIGNhc2UgaGFuZGxlIGZvciB3aGVuIG9uZSB0ZXJtaW5hbCBpcyBpZ25vcmVkLiBGb3IgdGhpcyBjYXNlIHdlIG1lcmdlIHRoZVxuICAvLyB0ZXJtaW5hbCBpbnRvIHRoZSBwcmlvciBzdHJpbmcgYW5kIGRyb3AgdGhlIGNoYW5nZS5cbiAgbGV0IGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuICBpZiAoY29tcG9uZW50TGVuID4gMVxuICAgICAgJiYgKGxhc3RDb21wb25lbnQuYWRkZWQgfHwgbGFzdENvbXBvbmVudC5yZW1vdmVkKVxuICAgICAgJiYgZGlmZi5lcXVhbHMoJycsIGxhc3RDb21wb25lbnQudmFsdWUpKSB7XG4gICAgY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAyXS52YWx1ZSArPSBsYXN0Q29tcG9uZW50LnZhbHVlO1xuICAgIGNvbXBvbmVudHMucG9wKCk7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZnVuY3Rpb24gY2xvbmVQYXRoKHBhdGgpIHtcbiAgcmV0dXJuIHsgbmV3UG9zOiBwYXRoLm5ld1BvcywgY29tcG9uZW50czogcGF0aC5jb21wb25lbnRzLnNsaWNlKDApIH07XG59XG4iXX0=\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports.characterDiff = undefined;\n    exports. diffChars = diffChars;\n\n    var _base = __webpack_require__(1) ;\n\n    \n    var _base2 = _interopRequireDefault(_base);\n\n    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n    var characterDiff = exports. characterDiff = new _base2['default']() ;\n    function diffChars(oldStr, newStr, callback) {\n      return characterDiff.diff(oldStr, newStr, callback);\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2NoYXJhY3Rlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O2dDQUdnQixTLEdBQUEsUzs7QUFIaEIsSSx5QkFBQSx5Qix3QkFBQTs7Ozs7Ozt1QkFFTyxJQUFNLGdCLHlCQUFBLFEsd0JBQUEsZ0JBQWdCLEkseUJBQUEsbUIsd0JBQXRCO0FBQ0EsU0FBUyxTQUFULENBQW1CLE1BQW5CLEVBQTJCLE1BQTNCLEVBQW1DLFFBQW5DLEVBQTZDO0FBQUUsU0FBTyxjQUFjLElBQWQsQ0FBbUIsTUFBbkIsRUFBMkIsTUFBM0IsRUFBbUMsUUFBbkMsQ0FBUDtBQUFzRCIsImZpbGUiOiJjaGFyYWN0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGlmZiBmcm9tICcuL2Jhc2UnO1xuXG5leHBvcnQgY29uc3QgY2hhcmFjdGVyRGlmZiA9IG5ldyBEaWZmKCk7XG5leHBvcnQgZnVuY3Rpb24gZGlmZkNoYXJzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykgeyByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ==\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports.wordDiff = undefined;\n    exports. diffWords = diffWords;\n    exports. diffWordsWithSpace = diffWordsWithSpace;\n\n    var _base = __webpack_require__(1) ;\n\n    \n    var _base2 = _interopRequireDefault(_base);\n\n    \n    var _params = __webpack_require__(4) ;\n\n    \n    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n    \n\n    // Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n    //\n    // Ranges and exceptions:\n    // Latin-1 Supplement, 0080–00FF\n    //  - U+00D7  × Multiplication sign\n    //  - U+00F7  ÷ Division sign\n    // Latin Extended-A, 0100–017F\n    // Latin Extended-B, 0180–024F\n    // IPA Extensions, 0250–02AF\n    // Spacing Modifier Letters, 02B0–02FF\n    //  - U+02C7  ˇ &#711;  Caron\n    //  - U+02D8  ˘ &#728;  Breve\n    //  - U+02D9  ˙ &#729;  Dot Above\n    //  - U+02DA  ˚ &#730;  Ring Above\n    //  - U+02DB  ˛ &#731;  Ogonek\n    //  - U+02DC  ˜ &#732;  Small Tilde\n    //  - U+02DD  ˝ &#733;  Double Acute Accent\n    // Latin Extended Additional, 1E00–1EFF\n    var extendedWordChars = /^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/;\n\n    var reWhitespace = /\\S/;\n\n    var wordDiff = exports. wordDiff = new _base2['default']() ;\n    wordDiff.equals = function (left, right) {\n      return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);\n    };\n    wordDiff.tokenize = function (value) {\n      var tokens = value.split(/(\\s+|\\b)/);\n\n      // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.\n      for (var i = 0; i < tokens.length - 1; i++) {\n        // If we have an empty string in the next field and we have only word chars before and after, merge\n        if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {\n          tokens[i] += tokens[i + 2];\n          tokens.splice(i + 1, 2);\n          i--;\n        }\n      }\n\n      return tokens;\n    };\n\n    function diffWords(oldStr, newStr, callback) {\n      var options = (0, _params.generateOptions) (callback, { ignoreWhitespace: true });\n      return wordDiff.diff(oldStr, newStr, options);\n    }\n    function diffWordsWithSpace(oldStr, newStr, callback) {\n      return wordDiff.diff(oldStr, newStr, callback);\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3dvcmQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztnQ0ErQ2dCLFMsR0FBQSxTO3lEQUlBLGtCLEdBQUEsa0I7O0FBbkRoQixJLHlCQUFBLHlCLHdCQUFBOzs7Ozs7QUFDQSxJLHlCQUFBLG1DLHdCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLElBQU0sb0JBQW9CLCtEQUExQjs7QUFFQSxJQUFNLGVBQWUsSUFBckI7O0FBRU8sSUFBTSxXLHlCQUFBLFEsd0JBQUEsV0FBVyxJLHlCQUFBLG1CLHdCQUFqQjtBQUNQLFNBQVMsTUFBVCxHQUFrQixVQUFTLElBQVQsRUFBZSxLQUFmLEVBQXNCO0FBQ3RDLFNBQU8sU0FBUyxLQUFULElBQW1CLEtBQUssT0FBTCxDQUFhLGdCQUFiLElBQWlDLENBQUMsYUFBYSxJQUFiLENBQWtCLElBQWxCLENBQWxDLElBQTZELENBQUMsYUFBYSxJQUFiLENBQWtCLEtBQWxCLENBQXhGO0FBQ0QsQ0FGRDtBQUdBLFNBQVMsUUFBVCxHQUFvQixVQUFTLEtBQVQsRUFBZ0I7QUFDbEMsTUFBSSxTQUFTLE1BQU0sS0FBTixDQUFZLFVBQVosQ0FBYjs7O0FBR0EsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLE9BQU8sTUFBUCxHQUFnQixDQUFwQyxFQUF1QyxHQUF2QyxFQUE0Qzs7QUFFMUMsUUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFYLENBQUQsSUFBa0IsT0FBTyxJQUFJLENBQVgsQ0FBbEIsSUFDSyxrQkFBa0IsSUFBbEIsQ0FBdUIsT0FBTyxDQUFQLENBQXZCLENBREwsSUFFSyxrQkFBa0IsSUFBbEIsQ0FBdUIsT0FBTyxJQUFJLENBQVgsQ0FBdkIsQ0FGVCxFQUVnRDtBQUM5QyxhQUFPLENBQVAsS0FBYSxPQUFPLElBQUksQ0FBWCxDQUFiO0FBQ0EsYUFBTyxNQUFQLENBQWMsSUFBSSxDQUFsQixFQUFxQixDQUFyQjtBQUNBO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLE1BQVA7QUFDRCxDQWhCRDs7QUFrQk8sU0FBUyxTQUFULENBQW1CLE1BQW5CLEVBQTJCLE1BQTNCLEVBQW1DLFFBQW5DLEVBQTZDO0FBQ2xELE1BQUksVSx5QkFBVSw0Qix3QkFBQSxDQUFnQixRQUFoQixFQUEwQixFQUFDLGtCQUFrQixJQUFuQixFQUExQixDQUFkO0FBQ0EsU0FBTyxTQUFTLElBQVQsQ0FBYyxNQUFkLEVBQXNCLE1BQXRCLEVBQThCLE9BQTlCLENBQVA7QUFDRDtBQUNNLFNBQVMsa0JBQVQsQ0FBNEIsTUFBNUIsRUFBb0MsTUFBcEMsRUFBNEMsUUFBNUMsRUFBc0Q7QUFDM0QsU0FBTyxTQUFTLElBQVQsQ0FBYyxNQUFkLEVBQXNCLE1BQXRCLEVBQThCLFFBQTlCLENBQVA7QUFDRCIsImZpbGUiOiJ3b3JkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7Z2VuZXJhdGVPcHRpb25zfSBmcm9tICcuLi91dGlsL3BhcmFtcyc7XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX3NjcmlwdF9pbl9Vbmljb2RlXG4vL1xuLy8gUmFuZ2VzIGFuZCBleGNlcHRpb25zOlxuLy8gTGF0aW4tMSBTdXBwbGVtZW50LCAwMDgw4oCTMDBGRlxuLy8gIC0gVSswMEQ3ICDDlyBNdWx0aXBsaWNhdGlvbiBzaWduXG4vLyAgLSBVKzAwRjcgIMO3IERpdmlzaW9uIHNpZ25cbi8vIExhdGluIEV4dGVuZGVkLUEsIDAxMDDigJMwMTdGXG4vLyBMYXRpbiBFeHRlbmRlZC1CLCAwMTgw4oCTMDI0RlxuLy8gSVBBIEV4dGVuc2lvbnMsIDAyNTDigJMwMkFGXG4vLyBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMsIDAyQjDigJMwMkZGXG4vLyAgLSBVKzAyQzcgIMuHICYjNzExOyAgQ2Fyb25cbi8vICAtIFUrMDJEOCAgy5ggJiM3Mjg7ICBCcmV2ZVxuLy8gIC0gVSswMkQ5ICDLmSAmIzcyOTsgIERvdCBBYm92ZVxuLy8gIC0gVSswMkRBICDLmiAmIzczMDsgIFJpbmcgQWJvdmVcbi8vICAtIFUrMDJEQiAgy5sgJiM3MzE7ICBPZ29uZWtcbi8vICAtIFUrMDJEQyAgy5wgJiM3MzI7ICBTbWFsbCBUaWxkZVxuLy8gIC0gVSswMkREICDLnSAmIzczMzsgIERvdWJsZSBBY3V0ZSBBY2NlbnRcbi8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwsIDFFMDDigJMxRUZGXG5jb25zdCBleHRlbmRlZFdvcmRDaGFycyA9IC9eW2EtekEtWlxcdXtDMH0tXFx1e0ZGfVxcdXtEOH0tXFx1e0Y2fVxcdXtGOH0tXFx1ezJDNn1cXHV7MkM4fS1cXHV7MkQ3fVxcdXsyREV9LVxcdXsyRkZ9XFx1ezFFMDB9LVxcdXsxRUZGfV0rJC91O1xuXG5jb25zdCByZVdoaXRlc3BhY2UgPSAvXFxTLztcblxuZXhwb3J0IGNvbnN0IHdvcmREaWZmID0gbmV3IERpZmYoKTtcbndvcmREaWZmLmVxdWFscyA9IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KGxlZnQpICYmICFyZVdoaXRlc3BhY2UudGVzdChyaWdodCkpO1xufTtcbndvcmREaWZmLnRva2VuaXplID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgbGV0IHRva2VucyA9IHZhbHVlLnNwbGl0KC8oXFxzK3xcXGIpLyk7XG5cbiAgLy8gSm9pbiB0aGUgYm91bmRhcnkgc3BsaXRzIHRoYXQgd2UgZG8gbm90IGNvbnNpZGVyIHRvIGJlIGJvdW5kYXJpZXMuIFRoaXMgaXMgcHJpbWFyaWx5IHRoZSBleHRlbmRlZCBMYXRpbiBjaGFyYWN0ZXIgc2V0LlxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGFuIGVtcHR5IHN0cmluZyBpbiB0aGUgbmV4dCBmaWVsZCBhbmQgd2UgaGF2ZSBvbmx5IHdvcmQgY2hhcnMgYmVmb3JlIGFuZCBhZnRlciwgbWVyZ2VcbiAgICBpZiAoIXRva2Vuc1tpICsgMV0gJiYgdG9rZW5zW2kgKyAyXVxuICAgICAgICAgICYmIGV4dGVuZGVkV29yZENoYXJzLnRlc3QodG9rZW5zW2ldKVxuICAgICAgICAgICYmIGV4dGVuZGVkV29yZENoYXJzLnRlc3QodG9rZW5zW2kgKyAyXSkpIHtcbiAgICAgIHRva2Vuc1tpXSArPSB0b2tlbnNbaSArIDJdO1xuICAgICAgdG9rZW5zLnNwbGljZShpICsgMSwgMik7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmV29yZHMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gIGxldCBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKGNhbGxiYWNrLCB7aWdub3JlV2hpdGVzcGFjZTogdHJ1ZX0pO1xuICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGlmZldvcmRzV2l0aFNwYWNlKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xufVxuIl19\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports. generateOptions = generateOptions;\n    function generateOptions(options, defaults) {\n      if (typeof options === 'function') {\n        defaults.callback = options;\n      } else if (options) {\n        for (var name in options) {\n          /* istanbul ignore else */\n          if (options.hasOwnProperty(name)) {\n            defaults[name] = options[name];\n          }\n        }\n      }\n      return defaults;\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3BhcmFtcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Z0NBQWdCLGUsR0FBQSxlO0FBQVQsU0FBUyxlQUFULENBQXlCLE9BQXpCLEVBQWtDLFFBQWxDLEVBQTRDO0FBQ2pELE1BQUksT0FBTyxPQUFQLEtBQW1CLFVBQXZCLEVBQW1DO0FBQ2pDLGFBQVMsUUFBVCxHQUFvQixPQUFwQjtBQUNELEdBRkQsTUFFTyxJQUFJLE9BQUosRUFBYTtBQUNsQixTQUFLLElBQUksSUFBVCxJQUFpQixPQUFqQixFQUEwQjs7QUFFeEIsVUFBSSxRQUFRLGNBQVIsQ0FBdUIsSUFBdkIsQ0FBSixFQUFrQztBQUNoQyxpQkFBUyxJQUFULElBQWlCLFFBQVEsSUFBUixDQUFqQjtBQUNEO0FBQ0Y7QUFDRjtBQUNELFNBQU8sUUFBUDtBQUNEIiwiZmlsZSI6InBhcmFtcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU9wdGlvbnMob3B0aW9ucywgZGVmYXVsdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGVmYXVsdHMuY2FsbGJhY2sgPSBvcHRpb25zO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICBmb3IgKGxldCBuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBkZWZhdWx0c1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWZhdWx0cztcbn1cbiJdfQ==\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports.lineDiff = undefined;\n    exports. diffLines = diffLines;\n    exports. diffTrimmedLines = diffTrimmedLines;\n\n    var _base = __webpack_require__(1) ;\n\n    \n    var _base2 = _interopRequireDefault(_base);\n\n    \n    var _params = __webpack_require__(4) ;\n\n    \n    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n    var lineDiff = exports. lineDiff = new _base2['default']() ;\n    lineDiff.tokenize = function (value) {\n      var retLines = [],\n          linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n\n      // Ignore the final empty token that occurs if the string ends with a new line\n      if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n        linesAndNewlines.pop();\n      }\n\n      // Merge the content and line separators into single tokens\n      for (var i = 0; i < linesAndNewlines.length; i++) {\n        var line = linesAndNewlines[i];\n\n        if (i % 2 && !this.options.newlineIsToken) {\n          retLines[retLines.length - 1] += line;\n        } else {\n          if (this.options.ignoreWhitespace) {\n            line = line.trim();\n          }\n          retLines.push(line);\n        }\n      }\n\n      return retLines;\n    };\n\n    function diffLines(oldStr, newStr, callback) {\n      return lineDiff.diff(oldStr, newStr, callback);\n    }\n    function diffTrimmedLines(oldStr, newStr, callback) {\n      var options = (0, _params.generateOptions) (callback, { ignoreWhitespace: true });\n      return lineDiff.diff(oldStr, newStr, options);\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2xpbmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztnQ0E4QmdCLFMsR0FBQSxTO3lEQUNBLGdCLEdBQUEsZ0I7O0FBL0JoQixJLHlCQUFBLHlCLHdCQUFBOzs7Ozs7QUFDQSxJLHlCQUFBLG1DLHdCQUFBOzs7Ozt1QkFFTyxJQUFNLFcseUJBQUEsUSx3QkFBQSxXQUFXLEkseUJBQUEsbUIsd0JBQWpCO0FBQ1AsU0FBUyxRQUFULEdBQW9CLFVBQVMsS0FBVCxFQUFnQjtBQUNsQyxNQUFJLFdBQVcsRUFBZjtBQUFBLE1BQ0ksbUJBQW1CLE1BQU0sS0FBTixDQUFZLFdBQVosQ0FEdkI7OztBQUlBLE1BQUksQ0FBQyxpQkFBaUIsaUJBQWlCLE1BQWpCLEdBQTBCLENBQTNDLENBQUwsRUFBb0Q7QUFDbEQscUJBQWlCLEdBQWpCO0FBQ0Q7OztBQUdELE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxpQkFBaUIsTUFBckMsRUFBNkMsR0FBN0MsRUFBa0Q7QUFDaEQsUUFBSSxPQUFPLGlCQUFpQixDQUFqQixDQUFYOztBQUVBLFFBQUksSUFBSSxDQUFKLElBQVMsQ0FBQyxLQUFLLE9BQUwsQ0FBYSxjQUEzQixFQUEyQztBQUN6QyxlQUFTLFNBQVMsTUFBVCxHQUFrQixDQUEzQixLQUFpQyxJQUFqQztBQUNELEtBRkQsTUFFTztBQUNMLFVBQUksS0FBSyxPQUFMLENBQWEsZ0JBQWpCLEVBQW1DO0FBQ2pDLGVBQU8sS0FBSyxJQUFMLEVBQVA7QUFDRDtBQUNELGVBQVMsSUFBVCxDQUFjLElBQWQ7QUFDRDtBQUNGOztBQUVELFNBQU8sUUFBUDtBQUNELENBeEJEOztBQTBCTyxTQUFTLFNBQVQsQ0FBbUIsTUFBbkIsRUFBMkIsTUFBM0IsRUFBbUMsUUFBbkMsRUFBNkM7QUFBRSxTQUFPLFNBQVMsSUFBVCxDQUFjLE1BQWQsRUFBc0IsTUFBdEIsRUFBOEIsUUFBOUIsQ0FBUDtBQUFpRDtBQUNoRyxTQUFTLGdCQUFULENBQTBCLE1BQTFCLEVBQWtDLE1BQWxDLEVBQTBDLFFBQTFDLEVBQW9EO0FBQ3pELE1BQUksVSx5QkFBVSw0Qix3QkFBQSxDQUFnQixRQUFoQixFQUEwQixFQUFDLGtCQUFrQixJQUFuQixFQUExQixDQUFkO0FBQ0EsU0FBTyxTQUFTLElBQVQsQ0FBYyxNQUFkLEVBQXNCLE1BQXRCLEVBQThCLE9BQTlCLENBQVA7QUFDRCIsImZpbGUiOiJsaW5lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7Z2VuZXJhdGVPcHRpb25zfSBmcm9tICcuLi91dGlsL3BhcmFtcyc7XG5cbmV4cG9ydCBjb25zdCBsaW5lRGlmZiA9IG5ldyBEaWZmKCk7XG5saW5lRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGxldCByZXRMaW5lcyA9IFtdLFxuICAgICAgbGluZXNBbmROZXdsaW5lcyA9IHZhbHVlLnNwbGl0KC8oXFxufFxcclxcbikvKTtcblxuICAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcbiAgaWYgKCFsaW5lc0FuZE5ld2xpbmVzW2xpbmVzQW5kTmV3bGluZXMubGVuZ3RoIC0gMV0pIHtcbiAgICBsaW5lc0FuZE5ld2xpbmVzLnBvcCgpO1xuICB9XG5cbiAgLy8gTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIGxpbmUgc2VwYXJhdG9ycyBpbnRvIHNpbmdsZSB0b2tlbnNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGxpbmUgPSBsaW5lc0FuZE5ld2xpbmVzW2ldO1xuXG4gICAgaWYgKGkgJSAyICYmICF0aGlzLm9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICAgIHJldExpbmVzW3JldExpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSkge1xuICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICB9XG4gICAgICByZXRMaW5lcy5wdXNoKGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXRMaW5lcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7IHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmVHJpbW1lZExpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICBsZXQgb3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucyhjYWxsYmFjaywge2lnbm9yZVdoaXRlc3BhY2U6IHRydWV9KTtcbiAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuIl19\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports.sentenceDiff = undefined;\n    exports. diffSentences = diffSentences;\n\n    var _base = __webpack_require__(1) ;\n\n    \n    var _base2 = _interopRequireDefault(_base);\n\n    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n    var sentenceDiff = exports. sentenceDiff = new _base2['default']() ;\n    sentenceDiff.tokenize = function (value) {\n      return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n    };\n\n    function diffSentences(oldStr, newStr, callback) {\n      return sentenceDiff.diff(oldStr, newStr, callback);\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3NlbnRlbmNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Z0NBUWdCLGEsR0FBQSxhOztBQVJoQixJLHlCQUFBLHlCLHdCQUFBOzs7Ozs7O3VCQUdPLElBQU0sZSx5QkFBQSxRLHdCQUFBLGVBQWUsSSx5QkFBQSxtQix3QkFBckI7QUFDUCxhQUFhLFFBQWIsR0FBd0IsVUFBUyxLQUFULEVBQWdCO0FBQ3RDLFNBQU8sTUFBTSxLQUFOLENBQVksdUJBQVosQ0FBUDtBQUNELENBRkQ7O0FBSU8sU0FBUyxhQUFULENBQXVCLE1BQXZCLEVBQStCLE1BQS9CLEVBQXVDLFFBQXZDLEVBQWlEO0FBQUUsU0FBTyxhQUFhLElBQWIsQ0FBa0IsTUFBbEIsRUFBMEIsTUFBMUIsRUFBa0MsUUFBbEMsQ0FBUDtBQUFxRCIsImZpbGUiOiJzZW50ZW5jZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cblxuZXhwb3J0IGNvbnN0IHNlbnRlbmNlRGlmZiA9IG5ldyBEaWZmKCk7XG5zZW50ZW5jZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoLyhcXFMuKz9bLiE/XSkoPz1cXHMrfCQpLyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZlNlbnRlbmNlcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHsgcmV0dXJuIHNlbnRlbmNlRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ==\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports.cssDiff = undefined;\n    exports. diffCss = diffCss;\n\n    var _base = __webpack_require__(1) ;\n\n    \n    var _base2 = _interopRequireDefault(_base);\n\n    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n    var cssDiff = exports. cssDiff = new _base2['default']() ;\n    cssDiff.tokenize = function (value) {\n      return value.split(/([{}:;,]|\\s+)/);\n    };\n\n    function diffCss(oldStr, newStr, callback) {\n      return cssDiff.diff(oldStr, newStr, callback);\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Nzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O2dDQU9nQixPLEdBQUEsTzs7QUFQaEIsSSx5QkFBQSx5Qix3QkFBQTs7Ozs7Ozt1QkFFTyxJQUFNLFUseUJBQUEsUSx3QkFBQSxVQUFVLEkseUJBQUEsbUIsd0JBQWhCO0FBQ1AsUUFBUSxRQUFSLEdBQW1CLFVBQVMsS0FBVCxFQUFnQjtBQUNqQyxTQUFPLE1BQU0sS0FBTixDQUFZLGVBQVosQ0FBUDtBQUNELENBRkQ7O0FBSU8sU0FBUyxPQUFULENBQWlCLE1BQWpCLEVBQXlCLE1BQXpCLEVBQWlDLFFBQWpDLEVBQTJDO0FBQUUsU0FBTyxRQUFRLElBQVIsQ0FBYSxNQUFiLEVBQXFCLE1BQXJCLEVBQTZCLFFBQTdCLENBQVA7QUFBZ0QiLCJmaWxlIjoiY3NzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGNzc0RpZmYgPSBuZXcgRGlmZigpO1xuY3NzRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvKFt7fTo7LF18XFxzKykvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQ3NzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykgeyByZXR1cm4gY3NzRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ==\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports.jsonDiff = undefined;\n\n    var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\n    exports. diffJson = diffJson;\n    exports. canonicalize = canonicalize;\n\n    var _base = __webpack_require__(1) ;\n\n    \n    var _base2 = _interopRequireDefault(_base);\n\n    \n    var _line = __webpack_require__(5) ;\n\n    \n    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n    \n\n    var objectPrototypeToString = Object.prototype.toString;\n\n    var jsonDiff = exports. jsonDiff = new _base2['default']() ;\n    // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n    // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n    jsonDiff.useLongestToken = true;\n\n    jsonDiff.tokenize = _line.lineDiff. tokenize;\n    jsonDiff.castInput = function (value) {\n      var undefinedReplacement = this.options.undefinedReplacement;\n\n\n      return typeof value === 'string' ? value : JSON.stringify(canonicalize(value), function (k, v) {\n        if (typeof v === 'undefined') {\n          return undefinedReplacement;\n        }\n\n        return v;\n      }, '  ');\n    };\n    jsonDiff.equals = function (left, right) {\n      return (_base2['default']. prototype.equals(left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'))\n      );\n    };\n\n    function diffJson(oldObj, newObj, options) {\n      return jsonDiff.diff(oldObj, newObj, options);\n    }\n\n    // This function handles the presence of circular references by bailing out when encountering an\n    // object that is already on the \"stack\" of items being processed.\n    function canonicalize(obj, stack, replacementStack) {\n      stack = stack || [];\n      replacementStack = replacementStack || [];\n\n      var i = void 0 ;\n\n      for (i = 0; i < stack.length; i += 1) {\n        if (stack[i] === obj) {\n          return replacementStack[i];\n        }\n      }\n\n      var canonicalizedObj = void 0 ;\n\n      if ('[object Array]' === objectPrototypeToString.call(obj)) {\n        stack.push(obj);\n        canonicalizedObj = new Array(obj.length);\n        replacementStack.push(canonicalizedObj);\n        for (i = 0; i < obj.length; i += 1) {\n          canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack);\n        }\n        stack.pop();\n        replacementStack.pop();\n        return canonicalizedObj;\n      }\n\n      if (obj && obj.toJSON) {\n        obj = obj.toJSON();\n      }\n\n      if ( (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null) {\n        stack.push(obj);\n        canonicalizedObj = {};\n        replacementStack.push(canonicalizedObj);\n        var sortedKeys = [],\n            key = void 0 ;\n        for (key in obj) {\n          /* istanbul ignore else */\n          if (obj.hasOwnProperty(key)) {\n            sortedKeys.push(key);\n          }\n        }\n        sortedKeys.sort();\n        for (i = 0; i < sortedKeys.length; i += 1) {\n          key = sortedKeys[i];\n          canonicalizedObj[key] = canonicalize(obj[key], stack, replacementStack);\n        }\n        stack.pop();\n        replacementStack.pop();\n      } else {\n        canonicalizedObj = obj;\n      }\n      return canonicalizedObj;\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2pzb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztnQ0EyQmdCLFEsR0FBQSxRO3lEQUlBLFksR0FBQSxZOztBQS9CaEIsSSx5QkFBQSx5Qix3QkFBQTs7Ozs7O0FBQ0EsSSx5QkFBQSx5Qix3QkFBQTs7Ozs7OztBQUVBLElBQU0sMEJBQTBCLE9BQU8sU0FBUCxDQUFpQixRQUFqRDs7QUFHTyxJQUFNLFcseUJBQUEsUSx3QkFBQSxXQUFXLEkseUJBQUEsbUIsd0JBQWpCOzs7QUFHUCxTQUFTLGVBQVQsR0FBMkIsSUFBM0I7O0FBRUEsU0FBUyxRQUFULEcseUJBQW9CLGUsd0JBQVMsUUFBN0I7QUFDQSxTQUFTLFNBQVQsR0FBcUIsVUFBUyxLQUFULEVBQWdCOzJCQUFBLEksdUJBQzVCLG9CQUQ0QixHQUNKLEtBQUssT0FERCxDQUM1QixvQkFENEI7OztBQUduQyxTQUFPLE9BQU8sS0FBUCxLQUFpQixRQUFqQixHQUE0QixLQUE1QixHQUFvQyxLQUFLLFNBQUwsQ0FBZSxhQUFhLEtBQWIsQ0FBZixFQUFvQyxVQUFTLENBQVQsRUFBWSxDQUFaLEVBQWU7QUFDNUYsUUFBSSxPQUFPLENBQVAsS0FBYSxXQUFqQixFQUE4QjtBQUM1QixhQUFPLG9CQUFQO0FBQ0Q7O0FBRUQsV0FBTyxDQUFQO0FBQ0QsR0FOMEMsRUFNeEMsSUFOd0MsQ0FBM0M7QUFPRCxDQVZEO0FBV0EsU0FBUyxNQUFULEdBQWtCLFVBQVMsSUFBVCxFQUFlLEtBQWYsRUFBc0I7QUFDdEMsUywwQkFBTyxrQix3QkFBSyxTQUFMLENBQWUsTUFBZixDQUFzQixLQUFLLE9BQUwsQ0FBYSxZQUFiLEVBQTJCLElBQTNCLENBQXRCLEVBQXdELE1BQU0sT0FBTixDQUFjLFlBQWQsRUFBNEIsSUFBNUIsQ0FBeEQ7QUFBUDtBQUNELENBRkQ7O0FBSU8sU0FBUyxRQUFULENBQWtCLE1BQWxCLEVBQTBCLE1BQTFCLEVBQWtDLE9BQWxDLEVBQTJDO0FBQUUsU0FBTyxTQUFTLElBQVQsQ0FBYyxNQUFkLEVBQXNCLE1BQXRCLEVBQThCLE9BQTlCLENBQVA7QUFBZ0Q7Ozs7QUFJN0YsU0FBUyxZQUFULENBQXNCLEdBQXRCLEVBQTJCLEtBQTNCLEVBQWtDLGdCQUFsQyxFQUFvRDtBQUN6RCxVQUFRLFNBQVMsRUFBakI7QUFDQSxxQkFBbUIsb0JBQW9CLEVBQXZDOztBQUVBLE1BQUksSSx5QkFBQSxNLHdCQUFKOztBQUVBLE9BQUssSUFBSSxDQUFULEVBQVksSUFBSSxNQUFNLE1BQXRCLEVBQThCLEtBQUssQ0FBbkMsRUFBc0M7QUFDcEMsUUFBSSxNQUFNLENBQU4sTUFBYSxHQUFqQixFQUFzQjtBQUNwQixhQUFPLGlCQUFpQixDQUFqQixDQUFQO0FBQ0Q7QUFDRjs7QUFFRCxNQUFJLG1CLHlCQUFBLE0sd0JBQUo7O0FBRUEsTUFBSSxxQkFBcUIsd0JBQXdCLElBQXhCLENBQTZCLEdBQTdCLENBQXpCLEVBQTREO0FBQzFELFVBQU0sSUFBTixDQUFXLEdBQVg7QUFDQSx1QkFBbUIsSUFBSSxLQUFKLENBQVUsSUFBSSxNQUFkLENBQW5CO0FBQ0EscUJBQWlCLElBQWpCLENBQXNCLGdCQUF0QjtBQUNBLFNBQUssSUFBSSxDQUFULEVBQVksSUFBSSxJQUFJLE1BQXBCLEVBQTRCLEtBQUssQ0FBakMsRUFBb0M7QUFDbEMsdUJBQWlCLENBQWpCLElBQXNCLGFBQWEsSUFBSSxDQUFKLENBQWIsRUFBcUIsS0FBckIsRUFBNEIsZ0JBQTVCLENBQXRCO0FBQ0Q7QUFDRCxVQUFNLEdBQU47QUFDQSxxQkFBaUIsR0FBakI7QUFDQSxXQUFPLGdCQUFQO0FBQ0Q7O0FBRUQsTUFBSSxPQUFPLElBQUksTUFBZixFQUF1QjtBQUNyQixVQUFNLElBQUksTUFBSixFQUFOO0FBQ0Q7O0FBRUQsTSwwQkFBSSxRLHVCQUFPLEdBQVAseUNBQU8sR0FBUCxPQUFlLFFBQWYsSUFBMkIsUUFBUSxJQUF2QyxFQUE2QztBQUMzQyxVQUFNLElBQU4sQ0FBVyxHQUFYO0FBQ0EsdUJBQW1CLEVBQW5CO0FBQ0EscUJBQWlCLElBQWpCLENBQXNCLGdCQUF0QjtBQUNBLFFBQUksYUFBYSxFQUFqQjtBQUFBLFFBQ0ksTSx5QkFBQSxNLHdCQURKO0FBRUEsU0FBSyxHQUFMLElBQVksR0FBWixFQUFpQjs7QUFFZixVQUFJLElBQUksY0FBSixDQUFtQixHQUFuQixDQUFKLEVBQTZCO0FBQzNCLG1CQUFXLElBQVgsQ0FBZ0IsR0FBaEI7QUFDRDtBQUNGO0FBQ0QsZUFBVyxJQUFYO0FBQ0EsU0FBSyxJQUFJLENBQVQsRUFBWSxJQUFJLFdBQVcsTUFBM0IsRUFBbUMsS0FBSyxDQUF4QyxFQUEyQztBQUN6QyxZQUFNLFdBQVcsQ0FBWCxDQUFOO0FBQ0EsdUJBQWlCLEdBQWpCLElBQXdCLGFBQWEsSUFBSSxHQUFKLENBQWIsRUFBdUIsS0FBdkIsRUFBOEIsZ0JBQTlCLENBQXhCO0FBQ0Q7QUFDRCxVQUFNLEdBQU47QUFDQSxxQkFBaUIsR0FBakI7QUFDRCxHQW5CRCxNQW1CTztBQUNMLHVCQUFtQixHQUFuQjtBQUNEO0FBQ0QsU0FBTyxnQkFBUDtBQUNEIiwiZmlsZSI6Impzb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGlmZiBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHtsaW5lRGlmZn0gZnJvbSAnLi9saW5lJztcblxuY29uc3Qgb2JqZWN0UHJvdG90eXBlVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5cbmV4cG9ydCBjb25zdCBqc29uRGlmZiA9IG5ldyBEaWZmKCk7XG4vLyBEaXNjcmltaW5hdGUgYmV0d2VlbiB0d28gbGluZXMgb2YgcHJldHR5LXByaW50ZWQsIHNlcmlhbGl6ZWQgSlNPTiB3aGVyZSBvbmUgb2YgdGhlbSBoYXMgYVxuLy8gZGFuZ2xpbmcgY29tbWEgYW5kIHRoZSBvdGhlciBkb2Vzbid0LiBUdXJucyBvdXQgaW5jbHVkaW5nIHRoZSBkYW5nbGluZyBjb21tYSB5aWVsZHMgdGhlIG5pY2VzdCBvdXRwdXQ6XG5qc29uRGlmZi51c2VMb25nZXN0VG9rZW4gPSB0cnVlO1xuXG5qc29uRGlmZi50b2tlbml6ZSA9IGxpbmVEaWZmLnRva2VuaXplO1xuanNvbkRpZmYuY2FzdElucHV0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgY29uc3Qge3VuZGVmaW5lZFJlcGxhY2VtZW50fSA9IHRoaXMub3B0aW9ucztcblxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkoY2Fub25pY2FsaXplKHZhbHVlKSwgZnVuY3Rpb24oaywgdikge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRSZXBsYWNlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gdjtcbiAgfSwgJyAgJyk7XG59O1xuanNvbkRpZmYuZXF1YWxzID0gZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgcmV0dXJuIERpZmYucHJvdG90eXBlLmVxdWFscyhsZWZ0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpLCByaWdodC5yZXBsYWNlKC8sKFtcXHJcXG5dKS9nLCAnJDEnKSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZkpzb24ob2xkT2JqLCBuZXdPYmosIG9wdGlvbnMpIHsgcmV0dXJuIGpzb25EaWZmLmRpZmYob2xkT2JqLCBuZXdPYmosIG9wdGlvbnMpOyB9XG5cbi8vIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcHJlc2VuY2Ugb2YgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBiYWlsaW5nIG91dCB3aGVuIGVuY291bnRlcmluZyBhblxuLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgXCJzdGFja1wiIG9mIGl0ZW1zIGJlaW5nIHByb2Nlc3NlZC5cbmV4cG9ydCBmdW5jdGlvbiBjYW5vbmljYWxpemUob2JqLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaykge1xuICBzdGFjayA9IHN0YWNrIHx8IFtdO1xuICByZXBsYWNlbWVudFN0YWNrID0gcmVwbGFjZW1lbnRTdGFjayB8fCBbXTtcblxuICBsZXQgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoc3RhY2tbaV0gPT09IG9iaikge1xuICAgICAgcmV0dXJuIHJlcGxhY2VtZW50U3RhY2tbaV07XG4gICAgfVxuICB9XG5cbiAgbGV0IGNhbm9uaWNhbGl6ZWRPYmo7XG5cbiAgaWYgKCdbb2JqZWN0IEFycmF5XScgPT09IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nLmNhbGwob2JqKSkge1xuICAgIHN0YWNrLnB1c2gob2JqKTtcbiAgICBjYW5vbmljYWxpemVkT2JqID0gbmV3IEFycmF5KG9iai5sZW5ndGgpO1xuICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjYW5vbmljYWxpemVkT2JqW2ldID0gY2Fub25pY2FsaXplKG9ialtpXSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2spO1xuICAgIH1cbiAgICBzdGFjay5wb3AoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnBvcCgpO1xuICAgIHJldHVybiBjYW5vbmljYWxpemVkT2JqO1xuICB9XG5cbiAgaWYgKG9iaiAmJiBvYmoudG9KU09OKSB7XG4gICAgb2JqID0gb2JqLnRvSlNPTigpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgIHN0YWNrLnB1c2gob2JqKTtcbiAgICBjYW5vbmljYWxpemVkT2JqID0ge307XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuICAgIGxldCBzb3J0ZWRLZXlzID0gW10sXG4gICAgICAgIGtleTtcbiAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgc29ydGVkS2V5cy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHNvcnRlZEtleXMuc29ydCgpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBzb3J0ZWRLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBrZXkgPSBzb3J0ZWRLZXlzW2ldO1xuICAgICAgY2Fub25pY2FsaXplZE9ialtrZXldID0gY2Fub25pY2FsaXplKG9ialtrZXldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjayk7XG4gICAgfVxuICAgIHN0YWNrLnBvcCgpO1xuICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IG9iajtcbiAgfVxuICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbn1cbiJdfQ==\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports.arrayDiff = undefined;\n    exports. diffArrays = diffArrays;\n\n    var _base = __webpack_require__(1) ;\n\n    \n    var _base2 = _interopRequireDefault(_base);\n\n    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n    var arrayDiff = exports. arrayDiff = new _base2['default']() ;\n    arrayDiff.tokenize = arrayDiff.join = function (value) {\n      return value.slice();\n    };\n\n    function diffArrays(oldArr, newArr, callback) {\n      return arrayDiff.diff(oldArr, newArr, callback);\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2FycmF5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Z0NBT2dCLFUsR0FBQSxVOztBQVBoQixJLHlCQUFBLHlCLHdCQUFBOzs7Ozs7O3VCQUVPLElBQU0sWSx5QkFBQSxRLHdCQUFBLFlBQVksSSx5QkFBQSxtQix3QkFBbEI7QUFDUCxVQUFVLFFBQVYsR0FBcUIsVUFBVSxJQUFWLEdBQWlCLFVBQVMsS0FBVCxFQUFnQjtBQUNwRCxTQUFPLE1BQU0sS0FBTixFQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTLFVBQVQsQ0FBb0IsTUFBcEIsRUFBNEIsTUFBNUIsRUFBb0MsUUFBcEMsRUFBOEM7QUFBRSxTQUFPLFVBQVUsSUFBVixDQUFlLE1BQWYsRUFBdUIsTUFBdkIsRUFBK0IsUUFBL0IsQ0FBUDtBQUFrRCIsImZpbGUiOiJhcnJheS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBhcnJheURpZmYgPSBuZXcgRGlmZigpO1xuYXJyYXlEaWZmLnRva2VuaXplID0gYXJyYXlEaWZmLmpvaW4gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc2xpY2UoKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQXJyYXlzKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjaykgeyByZXR1cm4gYXJyYXlEaWZmLmRpZmYob2xkQXJyLCBuZXdBcnIsIGNhbGxiYWNrKTsgfVxuIl19\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports. applyPatch = applyPatch;\n    exports. applyPatches = applyPatches;\n\n    var _parse = __webpack_require__(11) ;\n\n    var _distanceIterator = __webpack_require__(12) ;\n\n    \n    var _distanceIterator2 = _interopRequireDefault(_distanceIterator);\n\n    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n    function applyPatch(source, uniDiff) {\n      var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n      if (typeof uniDiff === 'string') {\n        uniDiff = (0, _parse.parsePatch) (uniDiff);\n      }\n\n      if (Array.isArray(uniDiff)) {\n        if (uniDiff.length > 1) {\n          throw new Error('applyPatch only works with a single input.');\n        }\n\n        uniDiff = uniDiff[0];\n      }\n\n      // Apply the diff to the input\n      var lines = source.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n          delimiters = source.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n          hunks = uniDiff.hunks,\n          compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n        return (line === patchContent\n        );\n      },\n          errorCount = 0,\n          fuzzFactor = options.fuzzFactor || 0,\n          minLine = 0,\n          offset = 0,\n          removeEOFNL = void 0 ,\n          addEOFNL = void 0 ;\n\n      /**\n       * Checks if the hunk exactly fits on the provided location\n       */\n      function hunkFits(hunk, toPos) {\n        for (var j = 0; j < hunk.lines.length; j++) {\n          var line = hunk.lines[j],\n              operation = line[0],\n              content = line.substr(1);\n\n          if (operation === ' ' || operation === '-') {\n            // Context sanity check\n            if (!compareLine(toPos + 1, lines[toPos], operation, content)) {\n              errorCount++;\n\n              if (errorCount > fuzzFactor) {\n                return false;\n              }\n            }\n            toPos++;\n          }\n        }\n\n        return true;\n      }\n\n      // Search best fit offsets for each hunk based on the previous ones\n      for (var i = 0; i < hunks.length; i++) {\n        var hunk = hunks[i],\n            maxLine = lines.length - hunk.oldLines,\n            localOffset = 0,\n            toPos = offset + hunk.oldStart - 1;\n\n        var iterator = (0, _distanceIterator2['default']) (toPos, minLine, maxLine);\n\n        for (; localOffset !== undefined; localOffset = iterator()) {\n          if (hunkFits(hunk, toPos + localOffset)) {\n            hunk.offset = offset += localOffset;\n            break;\n          }\n        }\n\n        if (localOffset === undefined) {\n          return false;\n        }\n\n        // Set lower text limit to end of the current hunk, so next ones don't try\n        // to fit over already patched text\n        minLine = hunk.offset + hunk.oldStart + hunk.oldLines;\n      }\n\n      // Apply patch hunks\n      for (var _i = 0; _i < hunks.length; _i++) {\n        var _hunk = hunks[_i],\n            _toPos = _hunk.offset + _hunk.newStart - 1;\n        if (_hunk.newLines == 0) {\n          _toPos++;\n        }\n\n        for (var j = 0; j < _hunk.lines.length; j++) {\n          var line = _hunk.lines[j],\n              operation = line[0],\n              content = line.substr(1),\n              delimiter = _hunk.linedelimiters[j];\n\n          if (operation === ' ') {\n            _toPos++;\n          } else if (operation === '-') {\n            lines.splice(_toPos, 1);\n            delimiters.splice(_toPos, 1);\n            /* istanbul ignore else */\n          } else if (operation === '+') {\n              lines.splice(_toPos, 0, content);\n              delimiters.splice(_toPos, 0, delimiter);\n              _toPos++;\n            } else if (operation === '\\\\') {\n              var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;\n              if (previousOperation === '+') {\n                removeEOFNL = true;\n              } else if (previousOperation === '-') {\n                addEOFNL = true;\n              }\n            }\n        }\n      }\n\n      // Handle EOFNL insertion/removal\n      if (removeEOFNL) {\n        while (!lines[lines.length - 1]) {\n          lines.pop();\n          delimiters.pop();\n        }\n      } else if (addEOFNL) {\n        lines.push('');\n        delimiters.push('\\n');\n      }\n      for (var _k = 0; _k < lines.length - 1; _k++) {\n        lines[_k] = lines[_k] + delimiters[_k];\n      }\n      return lines.join('');\n    }\n\n    // Wrapper that supports multiple file patches via callbacks.\n    function applyPatches(uniDiff, options) {\n      if (typeof uniDiff === 'string') {\n        uniDiff = (0, _parse.parsePatch) (uniDiff);\n      }\n\n      var currentIndex = 0;\n      function processIndex() {\n        var index = uniDiff[currentIndex++];\n        if (!index) {\n          return options.complete();\n        }\n\n        options.loadFile(index, function (err, data) {\n          if (err) {\n            return options.complete(err);\n          }\n\n          var updatedContent = applyPatch(data, index, options);\n          options.patched(index, updatedContent, function (err) {\n            if (err) {\n              return options.complete(err);\n            }\n\n            processIndex();\n          });\n        });\n      }\n      processIndex();\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9hcHBseS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Z0NBR2dCLFUsR0FBQSxVO3lEQStIQSxZLEdBQUEsWTs7QUFsSWhCLEkseUJBQUEsMkIsd0JBQUE7O0FBQ0EsSSx5QkFBQSx3RCx3QkFBQTs7Ozs7Ozt1QkFFTyxTQUFTLFVBQVQsQ0FBb0IsTUFBcEIsRUFBNEIsT0FBNUIsRUFBbUQ7MkJBQUEsSSx1QkFBZCxPQUFjLHlEQUFKLEVBQUk7O0FBQ3hELE1BQUksT0FBTyxPQUFQLEtBQW1CLFFBQXZCLEVBQWlDO0FBQy9CLGMseUJBQVUsc0Isd0JBQUEsQ0FBVyxPQUFYLENBQVY7QUFDRDs7QUFFRCxNQUFJLE1BQU0sT0FBTixDQUFjLE9BQWQsQ0FBSixFQUE0QjtBQUMxQixRQUFJLFFBQVEsTUFBUixHQUFpQixDQUFyQixFQUF3QjtBQUN0QixZQUFNLElBQUksS0FBSixDQUFVLDRDQUFWLENBQU47QUFDRDs7QUFFRCxjQUFVLFFBQVEsQ0FBUixDQUFWO0FBQ0Q7OztBQUdELE1BQUksUUFBUSxPQUFPLEtBQVAsQ0FBYSxxQkFBYixDQUFaO0FBQUEsTUFDSSxhQUFhLE9BQU8sS0FBUCxDQUFhLHNCQUFiLEtBQXdDLEVBRHpEO0FBQUEsTUFFSSxRQUFRLFFBQVEsS0FGcEI7QUFBQSxNQUlJLGNBQWMsUUFBUSxXQUFSLElBQXdCLFVBQUMsVUFBRCxFQUFhLElBQWIsRUFBbUIsU0FBbkIsRUFBOEIsWUFBOUIsRSx5QkFBQTtBQUFBLFcsd0JBQStDLFNBQVM7QUFBeEQ7QUFBQSxHQUoxQztBQUFBLE1BS0ksYUFBYSxDQUxqQjtBQUFBLE1BTUksYUFBYSxRQUFRLFVBQVIsSUFBc0IsQ0FOdkM7QUFBQSxNQU9JLFVBQVUsQ0FQZDtBQUFBLE1BUUksU0FBUyxDQVJiO0FBQUEsTUFVSSxjLHlCQUFBLE0sd0JBVko7QUFBQSxNQVdJLFcseUJBQUEsTSx3QkFYSjs7Ozs7QUFnQkEsV0FBUyxRQUFULENBQWtCLElBQWxCLEVBQXdCLEtBQXhCLEVBQStCO0FBQzdCLFNBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLEtBQUwsQ0FBVyxNQUEvQixFQUF1QyxHQUF2QyxFQUE0QztBQUMxQyxVQUFJLE9BQU8sS0FBSyxLQUFMLENBQVcsQ0FBWCxDQUFYO0FBQUEsVUFDSSxZQUFZLEtBQUssQ0FBTCxDQURoQjtBQUFBLFVBRUksVUFBVSxLQUFLLE1BQUwsQ0FBWSxDQUFaLENBRmQ7O0FBSUEsVUFBSSxjQUFjLEdBQWQsSUFBcUIsY0FBYyxHQUF2QyxFQUE0Qzs7QUFFMUMsWUFBSSxDQUFDLFlBQVksUUFBUSxDQUFwQixFQUF1QixNQUFNLEtBQU4sQ0FBdkIsRUFBcUMsU0FBckMsRUFBZ0QsT0FBaEQsQ0FBTCxFQUErRDtBQUM3RDs7QUFFQSxjQUFJLGFBQWEsVUFBakIsRUFBNkI7QUFDM0IsbUJBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFDRDtBQUNEO0FBQ0Y7O0FBRUQsV0FBTyxJQUFQO0FBQ0Q7OztBQUdELE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQ3JDLFFBQUksT0FBTyxNQUFNLENBQU4sQ0FBWDtBQUFBLFFBQ0ksVUFBVSxNQUFNLE1BQU4sR0FBZSxLQUFLLFFBRGxDO0FBQUEsUUFFSSxjQUFjLENBRmxCO0FBQUEsUUFHSSxRQUFRLFNBQVMsS0FBSyxRQUFkLEdBQXlCLENBSHJDOztBQUtBLFFBQUksVyx5QkFBVyxrQyx3QkFBQSxDQUFpQixLQUFqQixFQUF3QixPQUF4QixFQUFpQyxPQUFqQyxDQUFmOztBQUVBLFdBQU8sZ0JBQWdCLFNBQXZCLEVBQWtDLGNBQWMsVUFBaEQsRUFBNEQ7QUFDMUQsVUFBSSxTQUFTLElBQVQsRUFBZSxRQUFRLFdBQXZCLENBQUosRUFBeUM7QUFDdkMsYUFBSyxNQUFMLEdBQWMsVUFBVSxXQUF4QjtBQUNBO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJLGdCQUFnQixTQUFwQixFQUErQjtBQUM3QixhQUFPLEtBQVA7QUFDRDs7OztBQUlELGNBQVUsS0FBSyxNQUFMLEdBQWMsS0FBSyxRQUFuQixHQUE4QixLQUFLLFFBQTdDO0FBQ0Q7OztBQUdELE9BQUssSUFBSSxLQUFJLENBQWIsRUFBZ0IsS0FBSSxNQUFNLE1BQTFCLEVBQWtDLElBQWxDLEVBQXVDO0FBQ3JDLFFBQUksUUFBTyxNQUFNLEVBQU4sQ0FBWDtBQUFBLFFBQ0ksU0FBUSxNQUFLLE1BQUwsR0FBYyxNQUFLLFFBQW5CLEdBQThCLENBRDFDO0FBRUEsUUFBSSxNQUFLLFFBQUwsSUFBaUIsQ0FBckIsRUFBd0I7QUFBRTtBQUFVOztBQUVwQyxTQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksTUFBSyxLQUFMLENBQVcsTUFBL0IsRUFBdUMsR0FBdkMsRUFBNEM7QUFDMUMsVUFBSSxPQUFPLE1BQUssS0FBTCxDQUFXLENBQVgsQ0FBWDtBQUFBLFVBQ0ksWUFBWSxLQUFLLENBQUwsQ0FEaEI7QUFBQSxVQUVJLFVBQVUsS0FBSyxNQUFMLENBQVksQ0FBWixDQUZkO0FBQUEsVUFHSSxZQUFZLE1BQUssY0FBTCxDQUFvQixDQUFwQixDQUhoQjs7QUFLQSxVQUFJLGNBQWMsR0FBbEIsRUFBdUI7QUFDckI7QUFDRCxPQUZELE1BRU8sSUFBSSxjQUFjLEdBQWxCLEVBQXVCO0FBQzVCLGNBQU0sTUFBTixDQUFhLE1BQWIsRUFBb0IsQ0FBcEI7QUFDQSxtQkFBVyxNQUFYLENBQWtCLE1BQWxCLEVBQXlCLENBQXpCOztBQUVELE9BSk0sTUFJQSxJQUFJLGNBQWMsR0FBbEIsRUFBdUI7QUFDNUIsZ0JBQU0sTUFBTixDQUFhLE1BQWIsRUFBb0IsQ0FBcEIsRUFBdUIsT0FBdkI7QUFDQSxxQkFBVyxNQUFYLENBQWtCLE1BQWxCLEVBQXlCLENBQXpCLEVBQTRCLFNBQTVCO0FBQ0E7QUFDRCxTQUpNLE1BSUEsSUFBSSxjQUFjLElBQWxCLEVBQXdCO0FBQzdCLGNBQUksb0JBQW9CLE1BQUssS0FBTCxDQUFXLElBQUksQ0FBZixJQUFvQixNQUFLLEtBQUwsQ0FBVyxJQUFJLENBQWYsRUFBa0IsQ0FBbEIsQ0FBcEIsR0FBMkMsSUFBbkU7QUFDQSxjQUFJLHNCQUFzQixHQUExQixFQUErQjtBQUM3QiwwQkFBYyxJQUFkO0FBQ0QsV0FGRCxNQUVPLElBQUksc0JBQXNCLEdBQTFCLEVBQStCO0FBQ3BDLHVCQUFXLElBQVg7QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7O0FBR0QsTUFBSSxXQUFKLEVBQWlCO0FBQ2YsV0FBTyxDQUFDLE1BQU0sTUFBTSxNQUFOLEdBQWUsQ0FBckIsQ0FBUixFQUFpQztBQUMvQixZQUFNLEdBQU47QUFDQSxpQkFBVyxHQUFYO0FBQ0Q7QUFDRixHQUxELE1BS08sSUFBSSxRQUFKLEVBQWM7QUFDbkIsVUFBTSxJQUFOLENBQVcsRUFBWDtBQUNBLGVBQVcsSUFBWCxDQUFnQixJQUFoQjtBQUNEO0FBQ0QsT0FBSyxJQUFJLEtBQUssQ0FBZCxFQUFpQixLQUFLLE1BQU0sTUFBTixHQUFlLENBQXJDLEVBQXdDLElBQXhDLEVBQThDO0FBQzVDLFVBQU0sRUFBTixJQUFZLE1BQU0sRUFBTixJQUFZLFdBQVcsRUFBWCxDQUF4QjtBQUNEO0FBQ0QsU0FBTyxNQUFNLElBQU4sQ0FBVyxFQUFYLENBQVA7QUFDRDs7O0FBR00sU0FBUyxZQUFULENBQXNCLE9BQXRCLEVBQStCLE9BQS9CLEVBQXdDO0FBQzdDLE1BQUksT0FBTyxPQUFQLEtBQW1CLFFBQXZCLEVBQWlDO0FBQy9CLGMseUJBQVUsc0Isd0JBQUEsQ0FBVyxPQUFYLENBQVY7QUFDRDs7QUFFRCxNQUFJLGVBQWUsQ0FBbkI7QUFDQSxXQUFTLFlBQVQsR0FBd0I7QUFDdEIsUUFBSSxRQUFRLFFBQVEsY0FBUixDQUFaO0FBQ0EsUUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNWLGFBQU8sUUFBUSxRQUFSLEVBQVA7QUFDRDs7QUFFRCxZQUFRLFFBQVIsQ0FBaUIsS0FBakIsRUFBd0IsVUFBUyxHQUFULEVBQWMsSUFBZCxFQUFvQjtBQUMxQyxVQUFJLEdBQUosRUFBUztBQUNQLGVBQU8sUUFBUSxRQUFSLENBQWlCLEdBQWpCLENBQVA7QUFDRDs7QUFFRCxVQUFJLGlCQUFpQixXQUFXLElBQVgsRUFBaUIsS0FBakIsRUFBd0IsT0FBeEIsQ0FBckI7QUFDQSxjQUFRLE9BQVIsQ0FBZ0IsS0FBaEIsRUFBdUIsY0FBdkIsRUFBdUMsVUFBUyxHQUFULEVBQWM7QUFDbkQsWUFBSSxHQUFKLEVBQVM7QUFDUCxpQkFBTyxRQUFRLFFBQVIsQ0FBaUIsR0FBakIsQ0FBUDtBQUNEOztBQUVEO0FBQ0QsT0FORDtBQU9ELEtBYkQ7QUFjRDtBQUNEO0FBQ0QiLCJmaWxlIjoiYXBwbHkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3BhcnNlUGF0Y2h9IGZyb20gJy4vcGFyc2UnO1xuaW1wb3J0IGRpc3RhbmNlSXRlcmF0b3IgZnJvbSAnLi4vdXRpbC9kaXN0YW5jZS1pdGVyYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVBhdGNoKHNvdXJjZSwgdW5pRGlmZiwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHVuaURpZmYpKSB7XG4gICAgaWYgKHVuaURpZmYubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcHBseVBhdGNoIG9ubHkgd29ya3Mgd2l0aCBhIHNpbmdsZSBpbnB1dC4nKTtcbiAgICB9XG5cbiAgICB1bmlEaWZmID0gdW5pRGlmZlswXTtcbiAgfVxuXG4gIC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBpbnB1dFxuICBsZXQgbGluZXMgPSBzb3VyY2Uuc3BsaXQoL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdLyksXG4gICAgICBkZWxpbWl0ZXJzID0gc291cmNlLm1hdGNoKC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS9nKSB8fCBbXSxcbiAgICAgIGh1bmtzID0gdW5pRGlmZi5odW5rcyxcblxuICAgICAgY29tcGFyZUxpbmUgPSBvcHRpb25zLmNvbXBhcmVMaW5lIHx8ICgobGluZU51bWJlciwgbGluZSwgb3BlcmF0aW9uLCBwYXRjaENvbnRlbnQpID0+IGxpbmUgPT09IHBhdGNoQ29udGVudCksXG4gICAgICBlcnJvckNvdW50ID0gMCxcbiAgICAgIGZ1enpGYWN0b3IgPSBvcHRpb25zLmZ1enpGYWN0b3IgfHwgMCxcbiAgICAgIG1pbkxpbmUgPSAwLFxuICAgICAgb2Zmc2V0ID0gMCxcblxuICAgICAgcmVtb3ZlRU9GTkwsXG4gICAgICBhZGRFT0ZOTDtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBodW5rIGV4YWN0bHkgZml0cyBvbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIGh1bmtGaXRzKGh1bmssIHRvUG9zKSB7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBodW5rLmxpbmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBsZXQgbGluZSA9IGh1bmsubGluZXNbal0sXG4gICAgICAgICAgb3BlcmF0aW9uID0gbGluZVswXSxcbiAgICAgICAgICBjb250ZW50ID0gbGluZS5zdWJzdHIoMSk7XG5cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJyB8fCBvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAvLyBDb250ZXh0IHNhbml0eSBjaGVja1xuICAgICAgICBpZiAoIWNvbXBhcmVMaW5lKHRvUG9zICsgMSwgbGluZXNbdG9Qb3NdLCBvcGVyYXRpb24sIGNvbnRlbnQpKSB7XG4gICAgICAgICAgZXJyb3JDb3VudCsrO1xuXG4gICAgICAgICAgaWYgKGVycm9yQ291bnQgPiBmdXp6RmFjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRvUG9zKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBTZWFyY2ggYmVzdCBmaXQgb2Zmc2V0cyBmb3IgZWFjaCBodW5rIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBvbmVzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaHVua3MubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgaHVuayA9IGh1bmtzW2ldLFxuICAgICAgICBtYXhMaW5lID0gbGluZXMubGVuZ3RoIC0gaHVuay5vbGRMaW5lcyxcbiAgICAgICAgbG9jYWxPZmZzZXQgPSAwLFxuICAgICAgICB0b1BvcyA9IG9mZnNldCArIGh1bmsub2xkU3RhcnQgLSAxO1xuXG4gICAgbGV0IGl0ZXJhdG9yID0gZGlzdGFuY2VJdGVyYXRvcih0b1BvcywgbWluTGluZSwgbWF4TGluZSk7XG5cbiAgICBmb3IgKDsgbG9jYWxPZmZzZXQgIT09IHVuZGVmaW5lZDsgbG9jYWxPZmZzZXQgPSBpdGVyYXRvcigpKSB7XG4gICAgICBpZiAoaHVua0ZpdHMoaHVuaywgdG9Qb3MgKyBsb2NhbE9mZnNldCkpIHtcbiAgICAgICAgaHVuay5vZmZzZXQgPSBvZmZzZXQgKz0gbG9jYWxPZmZzZXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2NhbE9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU2V0IGxvd2VyIHRleHQgbGltaXQgdG8gZW5kIG9mIHRoZSBjdXJyZW50IGh1bmssIHNvIG5leHQgb25lcyBkb24ndCB0cnlcbiAgICAvLyB0byBmaXQgb3ZlciBhbHJlYWR5IHBhdGNoZWQgdGV4dFxuICAgIG1pbkxpbmUgPSBodW5rLm9mZnNldCArIGh1bmsub2xkU3RhcnQgKyBodW5rLm9sZExpbmVzO1xuICB9XG5cbiAgLy8gQXBwbHkgcGF0Y2ggaHVua3NcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBodW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBodW5rID0gaHVua3NbaV0sXG4gICAgICAgIHRvUG9zID0gaHVuay5vZmZzZXQgKyBodW5rLm5ld1N0YXJ0IC0gMTtcbiAgICBpZiAoaHVuay5uZXdMaW5lcyA9PSAwKSB7IHRvUG9zKys7IH1cblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgbGV0IGxpbmUgPSBodW5rLmxpbmVzW2pdLFxuICAgICAgICAgIG9wZXJhdGlvbiA9IGxpbmVbMF0sXG4gICAgICAgICAgY29udGVudCA9IGxpbmUuc3Vic3RyKDEpLFxuICAgICAgICAgIGRlbGltaXRlciA9IGh1bmsubGluZWRlbGltaXRlcnNbal07XG5cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuICAgICAgICB0b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICBsaW5lcy5zcGxpY2UodG9Qb3MsIDEpO1xuICAgICAgICBkZWxpbWl0ZXJzLnNwbGljZSh0b1BvcywgMSk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICcrJykge1xuICAgICAgICBsaW5lcy5zcGxpY2UodG9Qb3MsIDAsIGNvbnRlbnQpO1xuICAgICAgICBkZWxpbWl0ZXJzLnNwbGljZSh0b1BvcywgMCwgZGVsaW1pdGVyKTtcbiAgICAgICAgdG9Qb3MrKztcbiAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnXFxcXCcpIHtcbiAgICAgICAgbGV0IHByZXZpb3VzT3BlcmF0aW9uID0gaHVuay5saW5lc1tqIC0gMV0gPyBodW5rLmxpbmVzW2ogLSAxXVswXSA6IG51bGw7XG4gICAgICAgIGlmIChwcmV2aW91c09wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgcmVtb3ZlRU9GTkwgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICBhZGRFT0ZOTCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgRU9GTkwgaW5zZXJ0aW9uL3JlbW92YWxcbiAgaWYgKHJlbW92ZUVPRk5MKSB7XG4gICAgd2hpbGUgKCFsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSkge1xuICAgICAgbGluZXMucG9wKCk7XG4gICAgICBkZWxpbWl0ZXJzLnBvcCgpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhZGRFT0ZOTCkge1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGRlbGltaXRlcnMucHVzaCgnXFxuJyk7XG4gIH1cbiAgZm9yIChsZXQgX2sgPSAwOyBfayA8IGxpbmVzLmxlbmd0aCAtIDE7IF9rKyspIHtcbiAgICBsaW5lc1tfa10gPSBsaW5lc1tfa10gKyBkZWxpbWl0ZXJzW19rXTtcbiAgfVxuICByZXR1cm4gbGluZXMuam9pbignJyk7XG59XG5cbi8vIFdyYXBwZXIgdGhhdCBzdXBwb3J0cyBtdWx0aXBsZSBmaWxlIHBhdGNoZXMgdmlhIGNhbGxiYWNrcy5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVBhdGNoZXModW5pRGlmZiwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHVuaURpZmYgPT09ICdzdHJpbmcnKSB7XG4gICAgdW5pRGlmZiA9IHBhcnNlUGF0Y2godW5pRGlmZik7XG4gIH1cblxuICBsZXQgY3VycmVudEluZGV4ID0gMDtcbiAgZnVuY3Rpb24gcHJvY2Vzc0luZGV4KCkge1xuICAgIGxldCBpbmRleCA9IHVuaURpZmZbY3VycmVudEluZGV4KytdO1xuICAgIGlmICghaW5kZXgpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5sb2FkRmlsZShpbmRleCwgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICB9XG5cbiAgICAgIGxldCB1cGRhdGVkQ29udGVudCA9IGFwcGx5UGF0Y2goZGF0YSwgaW5kZXgsIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5wYXRjaGVkKGluZGV4LCB1cGRhdGVkQ29udGVudCwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9ucy5jb21wbGV0ZShlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzc0luZGV4KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBwcm9jZXNzSW5kZXgoKTtcbn1cbiJdfQ==\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports. parsePatch = parsePatch;\n    function parsePatch(uniDiff) {\n      var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n      var diffstr = uniDiff.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n          delimiters = uniDiff.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n          list = [],\n          i = 0;\n\n      function parseIndex() {\n        var index = {};\n        list.push(index);\n\n        // Parse diff metadata\n        while (i < diffstr.length) {\n          var line = diffstr[i];\n\n          // File header found, end parsing diff metadata\n          if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n            break;\n          }\n\n          // Diff index\n          var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n          if (header) {\n            index.index = header[1];\n          }\n\n          i++;\n        }\n\n        // Parse file headers if they are defined. Unified diff requires them, but\n        // there's no technical issues to have an isolated hunk without file header\n        parseFileHeader(index);\n        parseFileHeader(index);\n\n        // Parse hunks\n        index.hunks = [];\n\n        while (i < diffstr.length) {\n          var _line = diffstr[i];\n\n          if (/^(Index:|diff|\\-\\-\\-|\\+\\+\\+)\\s/.test(_line)) {\n            break;\n          } else if (/^@@/.test(_line)) {\n            index.hunks.push(parseHunk());\n          } else if (_line && options.strict) {\n            // Ignore unexpected content unless in strict mode\n            throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n          } else {\n            i++;\n          }\n        }\n      }\n\n      // Parses the --- and +++ headers, if none are found, no lines\n      // are consumed.\n      function parseFileHeader(index) {\n        var headerPattern = /^(---|\\+\\+\\+)\\s+([\\S ]*)(?:\\t(.*?)\\s*)?$/;\n        var fileHeader = headerPattern.exec(diffstr[i]);\n        if (fileHeader) {\n          var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n          index[keyPrefix + 'FileName'] = fileHeader[2];\n          index[keyPrefix + 'Header'] = fileHeader[3];\n\n          i++;\n        }\n      }\n\n      // Parses a hunk\n      // This assumes that we are at the start of a hunk.\n      function parseHunk() {\n        var chunkHeaderIndex = i,\n            chunkHeaderLine = diffstr[i++],\n            chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n\n        var hunk = {\n          oldStart: +chunkHeader[1],\n          oldLines: +chunkHeader[2] || 1,\n          newStart: +chunkHeader[3],\n          newLines: +chunkHeader[4] || 1,\n          lines: [],\n          linedelimiters: []\n        };\n\n        var addCount = 0,\n            removeCount = 0;\n        for (; i < diffstr.length; i++) {\n          // Lines starting with '---' could be mistaken for the \"remove line\" operation\n          // But they could be the header for the next file. Therefore prune such cases out.\n          if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {\n            break;\n          }\n          var operation = diffstr[i][0];\n\n          if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n            hunk.lines.push(diffstr[i]);\n            hunk.linedelimiters.push(delimiters[i] || '\\n');\n\n            if (operation === '+') {\n              addCount++;\n            } else if (operation === '-') {\n              removeCount++;\n            } else if (operation === ' ') {\n              addCount++;\n              removeCount++;\n            }\n          } else {\n            break;\n          }\n        }\n\n        // Handle the empty block count case\n        if (!addCount && hunk.newLines === 1) {\n          hunk.newLines = 0;\n        }\n        if (!removeCount && hunk.oldLines === 1) {\n          hunk.oldLines = 0;\n        }\n\n        // Perform optional sanity checking\n        if (options.strict) {\n          if (addCount !== hunk.newLines) {\n            throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n          }\n          if (removeCount !== hunk.oldLines) {\n            throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n          }\n        }\n\n        return hunk;\n      }\n\n      while (i < diffstr.length) {\n        parseIndex();\n      }\n\n      return list;\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9wYXJzZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Z0NBQWdCLFUsR0FBQSxVO0FBQVQsU0FBUyxVQUFULENBQW9CLE9BQXBCLEVBQTJDOzJCQUFBLEksdUJBQWQsT0FBYyx5REFBSixFQUFJOztBQUNoRCxNQUFJLFVBQVUsUUFBUSxLQUFSLENBQWMscUJBQWQsQ0FBZDtBQUFBLE1BQ0ksYUFBYSxRQUFRLEtBQVIsQ0FBYyxzQkFBZCxLQUF5QyxFQUQxRDtBQUFBLE1BRUksT0FBTyxFQUZYO0FBQUEsTUFHSSxJQUFJLENBSFI7O0FBS0EsV0FBUyxVQUFULEdBQXNCO0FBQ3BCLFFBQUksUUFBUSxFQUFaO0FBQ0EsU0FBSyxJQUFMLENBQVUsS0FBVjs7O0FBR0EsV0FBTyxJQUFJLFFBQVEsTUFBbkIsRUFBMkI7QUFDekIsVUFBSSxPQUFPLFFBQVEsQ0FBUixDQUFYOzs7QUFHQSxVQUFJLHdCQUF3QixJQUF4QixDQUE2QixJQUE3QixDQUFKLEVBQXdDO0FBQ3RDO0FBQ0Q7OztBQUdELFVBQUksU0FBVSwwQ0FBRCxDQUE2QyxJQUE3QyxDQUFrRCxJQUFsRCxDQUFiO0FBQ0EsVUFBSSxNQUFKLEVBQVk7QUFDVixjQUFNLEtBQU4sR0FBYyxPQUFPLENBQVAsQ0FBZDtBQUNEOztBQUVEO0FBQ0Q7Ozs7QUFJRCxvQkFBZ0IsS0FBaEI7QUFDQSxvQkFBZ0IsS0FBaEI7OztBQUdBLFVBQU0sS0FBTixHQUFjLEVBQWQ7O0FBRUEsV0FBTyxJQUFJLFFBQVEsTUFBbkIsRUFBMkI7QUFDekIsVUFBSSxRQUFPLFFBQVEsQ0FBUixDQUFYOztBQUVBLFVBQUksaUNBQWlDLElBQWpDLENBQXNDLEtBQXRDLENBQUosRUFBaUQ7QUFDL0M7QUFDRCxPQUZELE1BRU8sSUFBSSxNQUFNLElBQU4sQ0FBVyxLQUFYLENBQUosRUFBc0I7QUFDM0IsY0FBTSxLQUFOLENBQVksSUFBWixDQUFpQixXQUFqQjtBQUNELE9BRk0sTUFFQSxJQUFJLFNBQVEsUUFBUSxNQUFwQixFQUE0Qjs7QUFFakMsY0FBTSxJQUFJLEtBQUosQ0FBVSxtQkFBbUIsSUFBSSxDQUF2QixJQUE0QixHQUE1QixHQUFrQyxLQUFLLFNBQUwsQ0FBZSxLQUFmLENBQTVDLENBQU47QUFDRCxPQUhNLE1BR0E7QUFDTDtBQUNEO0FBQ0Y7QUFDRjs7OztBQUlELFdBQVMsZUFBVCxDQUF5QixLQUF6QixFQUFnQztBQUM5QixRQUFNLGdCQUFnQiwwQ0FBdEI7QUFDQSxRQUFNLGFBQWEsY0FBYyxJQUFkLENBQW1CLFFBQVEsQ0FBUixDQUFuQixDQUFuQjtBQUNBLFFBQUksVUFBSixFQUFnQjtBQUNkLFVBQUksWUFBWSxXQUFXLENBQVgsTUFBa0IsS0FBbEIsR0FBMEIsS0FBMUIsR0FBa0MsS0FBbEQ7QUFDQSxZQUFNLFlBQVksVUFBbEIsSUFBZ0MsV0FBVyxDQUFYLENBQWhDO0FBQ0EsWUFBTSxZQUFZLFFBQWxCLElBQThCLFdBQVcsQ0FBWCxDQUE5Qjs7QUFFQTtBQUNEO0FBQ0Y7Ozs7QUFJRCxXQUFTLFNBQVQsR0FBcUI7QUFDbkIsUUFBSSxtQkFBbUIsQ0FBdkI7QUFBQSxRQUNJLGtCQUFrQixRQUFRLEdBQVIsQ0FEdEI7QUFBQSxRQUVJLGNBQWMsZ0JBQWdCLEtBQWhCLENBQXNCLDRDQUF0QixDQUZsQjs7QUFJQSxRQUFJLE9BQU87QUFDVCxnQkFBVSxDQUFDLFlBQVksQ0FBWixDQURGO0FBRVQsZ0JBQVUsQ0FBQyxZQUFZLENBQVosQ0FBRCxJQUFtQixDQUZwQjtBQUdULGdCQUFVLENBQUMsWUFBWSxDQUFaLENBSEY7QUFJVCxnQkFBVSxDQUFDLFlBQVksQ0FBWixDQUFELElBQW1CLENBSnBCO0FBS1QsYUFBTyxFQUxFO0FBTVQsc0JBQWdCO0FBTlAsS0FBWDs7QUFTQSxRQUFJLFdBQVcsQ0FBZjtBQUFBLFFBQ0ksY0FBYyxDQURsQjtBQUVBLFdBQU8sSUFBSSxRQUFRLE1BQW5CLEVBQTJCLEdBQTNCLEVBQWdDOzs7QUFHOUIsVUFBSSxRQUFRLENBQVIsRUFBVyxPQUFYLENBQW1CLE1BQW5CLE1BQStCLENBQS9CLElBQ00sSUFBSSxDQUFKLEdBQVEsUUFBUSxNQUR0QixJQUVLLFFBQVEsSUFBSSxDQUFaLEVBQWUsT0FBZixDQUF1QixNQUF2QixNQUFtQyxDQUZ4QyxJQUdLLFFBQVEsSUFBSSxDQUFaLEVBQWUsT0FBZixDQUF1QixJQUF2QixNQUFpQyxDQUgxQyxFQUc2QztBQUN6QztBQUNIO0FBQ0QsVUFBSSxZQUFZLFFBQVEsQ0FBUixFQUFXLENBQVgsQ0FBaEI7O0FBRUEsVUFBSSxjQUFjLEdBQWQsSUFBcUIsY0FBYyxHQUFuQyxJQUEwQyxjQUFjLEdBQXhELElBQStELGNBQWMsSUFBakYsRUFBdUY7QUFDckYsYUFBSyxLQUFMLENBQVcsSUFBWCxDQUFnQixRQUFRLENBQVIsQ0FBaEI7QUFDQSxhQUFLLGNBQUwsQ0FBb0IsSUFBcEIsQ0FBeUIsV0FBVyxDQUFYLEtBQWlCLElBQTFDOztBQUVBLFlBQUksY0FBYyxHQUFsQixFQUF1QjtBQUNyQjtBQUNELFNBRkQsTUFFTyxJQUFJLGNBQWMsR0FBbEIsRUFBdUI7QUFDNUI7QUFDRCxTQUZNLE1BRUEsSUFBSSxjQUFjLEdBQWxCLEVBQXVCO0FBQzVCO0FBQ0E7QUFDRDtBQUNGLE9BWkQsTUFZTztBQUNMO0FBQ0Q7QUFDRjs7O0FBR0QsUUFBSSxDQUFDLFFBQUQsSUFBYSxLQUFLLFFBQUwsS0FBa0IsQ0FBbkMsRUFBc0M7QUFDcEMsV0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0Q7QUFDRCxRQUFJLENBQUMsV0FBRCxJQUFnQixLQUFLLFFBQUwsS0FBa0IsQ0FBdEMsRUFBeUM7QUFDdkMsV0FBSyxRQUFMLEdBQWdCLENBQWhCO0FBQ0Q7OztBQUdELFFBQUksUUFBUSxNQUFaLEVBQW9CO0FBQ2xCLFVBQUksYUFBYSxLQUFLLFFBQXRCLEVBQWdDO0FBQzlCLGNBQU0sSUFBSSxLQUFKLENBQVUsc0RBQXNELG1CQUFtQixDQUF6RSxDQUFWLENBQU47QUFDRDtBQUNELFVBQUksZ0JBQWdCLEtBQUssUUFBekIsRUFBbUM7QUFDakMsY0FBTSxJQUFJLEtBQUosQ0FBVSx3REFBd0QsbUJBQW1CLENBQTNFLENBQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBTyxJQUFJLFFBQVEsTUFBbkIsRUFBMkI7QUFDekI7QUFDRDs7QUFFRCxTQUFPLElBQVA7QUFDRCIsImZpbGUiOiJwYXJzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhdGNoKHVuaURpZmYsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgZGlmZnN0ciA9IHVuaURpZmYuc3BsaXQoL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdLyksXG4gICAgICBkZWxpbWl0ZXJzID0gdW5pRGlmZi5tYXRjaCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vZykgfHwgW10sXG4gICAgICBsaXN0ID0gW10sXG4gICAgICBpID0gMDtcblxuICBmdW5jdGlvbiBwYXJzZUluZGV4KCkge1xuICAgIGxldCBpbmRleCA9IHt9O1xuICAgIGxpc3QucHVzaChpbmRleCk7XG5cbiAgICAvLyBQYXJzZSBkaWZmIG1ldGFkYXRhXG4gICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgICAgbGV0IGxpbmUgPSBkaWZmc3RyW2ldO1xuXG4gICAgICAvLyBGaWxlIGhlYWRlciBmb3VuZCwgZW5kIHBhcnNpbmcgZGlmZiBtZXRhZGF0YVxuICAgICAgaWYgKC9eKFxcLVxcLVxcLXxcXCtcXCtcXCt8QEApXFxzLy50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBEaWZmIGluZGV4XG4gICAgICBsZXQgaGVhZGVyID0gKC9eKD86SW5kZXg6fGRpZmYoPzogLXIgXFx3KykrKVxccysoLis/KVxccyokLykuZXhlYyhsaW5lKTtcbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaW5kZXguaW5kZXggPSBoZWFkZXJbMV07XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBmaWxlIGhlYWRlcnMgaWYgdGhleSBhcmUgZGVmaW5lZC4gVW5pZmllZCBkaWZmIHJlcXVpcmVzIHRoZW0sIGJ1dFxuICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIGlzc3VlcyB0byBoYXZlIGFuIGlzb2xhdGVkIGh1bmsgd2l0aG91dCBmaWxlIGhlYWRlclxuICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG4gICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcblxuICAgIC8vIFBhcnNlIGh1bmtzXG4gICAgaW5kZXguaHVua3MgPSBbXTtcblxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIGxldCBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgaWYgKC9eKEluZGV4OnxkaWZmfFxcLVxcLVxcLXxcXCtcXCtcXCspXFxzLy50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICgvXkBALy50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGluZGV4Lmh1bmtzLnB1c2gocGFyc2VIdW5rKCkpO1xuICAgICAgfSBlbHNlIGlmIChsaW5lICYmIG9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICAgIC8vIElnbm9yZSB1bmV4cGVjdGVkIGNvbnRlbnQgdW5sZXNzIGluIHN0cmljdCBtb2RlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBsaW5lICcgKyAoaSArIDEpICsgJyAnICsgSlNPTi5zdHJpbmdpZnkobGluZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBhcnNlcyB0aGUgLS0tIGFuZCArKysgaGVhZGVycywgaWYgbm9uZSBhcmUgZm91bmQsIG5vIGxpbmVzXG4gIC8vIGFyZSBjb25zdW1lZC5cbiAgZnVuY3Rpb24gcGFyc2VGaWxlSGVhZGVyKGluZGV4KSB7XG4gICAgY29uc3QgaGVhZGVyUGF0dGVybiA9IC9eKC0tLXxcXCtcXCtcXCspXFxzKyhbXFxTIF0qKSg/OlxcdCguKj8pXFxzKik/JC87XG4gICAgY29uc3QgZmlsZUhlYWRlciA9IGhlYWRlclBhdHRlcm4uZXhlYyhkaWZmc3RyW2ldKTtcbiAgICBpZiAoZmlsZUhlYWRlcikge1xuICAgICAgbGV0IGtleVByZWZpeCA9IGZpbGVIZWFkZXJbMV0gPT09ICctLS0nID8gJ29sZCcgOiAnbmV3JztcbiAgICAgIGluZGV4W2tleVByZWZpeCArICdGaWxlTmFtZSddID0gZmlsZUhlYWRlclsyXTtcbiAgICAgIGluZGV4W2tleVByZWZpeCArICdIZWFkZXInXSA9IGZpbGVIZWFkZXJbM107XG5cbiAgICAgIGkrKztcbiAgICB9XG4gIH1cblxuICAvLyBQYXJzZXMgYSBodW5rXG4gIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgYSBodW5rLlxuICBmdW5jdGlvbiBwYXJzZUh1bmsoKSB7XG4gICAgbGV0IGNodW5rSGVhZGVySW5kZXggPSBpLFxuICAgICAgICBjaHVua0hlYWRlckxpbmUgPSBkaWZmc3RyW2krK10sXG4gICAgICAgIGNodW5rSGVhZGVyID0gY2h1bmtIZWFkZXJMaW5lLnNwbGl0KC9AQCAtKFxcZCspKD86LChcXGQrKSk/IFxcKyhcXGQrKSg/OiwoXFxkKykpPyBAQC8pO1xuXG4gICAgbGV0IGh1bmsgPSB7XG4gICAgICBvbGRTdGFydDogK2NodW5rSGVhZGVyWzFdLFxuICAgICAgb2xkTGluZXM6ICtjaHVua0hlYWRlclsyXSB8fCAxLFxuICAgICAgbmV3U3RhcnQ6ICtjaHVua0hlYWRlclszXSxcbiAgICAgIG5ld0xpbmVzOiArY2h1bmtIZWFkZXJbNF0gfHwgMSxcbiAgICAgIGxpbmVzOiBbXSxcbiAgICAgIGxpbmVkZWxpbWl0ZXJzOiBbXVxuICAgIH07XG5cbiAgICBsZXQgYWRkQ291bnQgPSAwLFxuICAgICAgICByZW1vdmVDb3VudCA9IDA7XG4gICAgZm9yICg7IGkgPCBkaWZmc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBMaW5lcyBzdGFydGluZyB3aXRoICctLS0nIGNvdWxkIGJlIG1pc3Rha2VuIGZvciB0aGUgXCJyZW1vdmUgbGluZVwiIG9wZXJhdGlvblxuICAgICAgLy8gQnV0IHRoZXkgY291bGQgYmUgdGhlIGhlYWRlciBmb3IgdGhlIG5leHQgZmlsZS4gVGhlcmVmb3JlIHBydW5lIHN1Y2ggY2FzZXMgb3V0LlxuICAgICAgaWYgKGRpZmZzdHJbaV0uaW5kZXhPZignLS0tICcpID09PSAwXG4gICAgICAgICAgICAmJiAoaSArIDIgPCBkaWZmc3RyLmxlbmd0aClcbiAgICAgICAgICAgICYmIGRpZmZzdHJbaSArIDFdLmluZGV4T2YoJysrKyAnKSA9PT0gMFxuICAgICAgICAgICAgJiYgZGlmZnN0cltpICsgMl0uaW5kZXhPZignQEAnKSA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbGV0IG9wZXJhdGlvbiA9IGRpZmZzdHJbaV1bMF07XG5cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICcrJyB8fCBvcGVyYXRpb24gPT09ICctJyB8fCBvcGVyYXRpb24gPT09ICcgJyB8fCBvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICBodW5rLmxpbmVzLnB1c2goZGlmZnN0cltpXSk7XG4gICAgICAgIGh1bmsubGluZWRlbGltaXRlcnMucHVzaChkZWxpbWl0ZXJzW2ldIHx8ICdcXG4nKTtcblxuICAgICAgICBpZiAob3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICBhZGRDb3VudCsrO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgICAgcmVtb3ZlQ291bnQrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuICAgICAgICAgIGFkZENvdW50Kys7XG4gICAgICAgICAgcmVtb3ZlQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSBlbXB0eSBibG9jayBjb3VudCBjYXNlXG4gICAgaWYgKCFhZGRDb3VudCAmJiBodW5rLm5ld0xpbmVzID09PSAxKSB7XG4gICAgICBodW5rLm5ld0xpbmVzID0gMDtcbiAgICB9XG4gICAgaWYgKCFyZW1vdmVDb3VudCAmJiBodW5rLm9sZExpbmVzID09PSAxKSB7XG4gICAgICBodW5rLm9sZExpbmVzID0gMDtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIG9wdGlvbmFsIHNhbml0eSBjaGVja2luZ1xuICAgIGlmIChvcHRpb25zLnN0cmljdCkge1xuICAgICAgaWYgKGFkZENvdW50ICE9PSBodW5rLm5ld0xpbmVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQWRkZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgJyArIChjaHVua0hlYWRlckluZGV4ICsgMSkpO1xuICAgICAgfVxuICAgICAgaWYgKHJlbW92ZUNvdW50ICE9PSBodW5rLm9sZExpbmVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVtb3ZlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGh1bms7XG4gIH1cblxuICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG4gICAgcGFyc2VJbmRleCgpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG4iXX0=\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n    \"use strict\";\n\n    exports.__esModule = true;\n\n    exports[\"default\"] = function (start, minLine, maxLine) {\n      var wantForward = true,\n          backwardExhausted = false,\n          forwardExhausted = false,\n          localOffset = 1;\n\n      return function iterator() {\n        if (wantForward && !forwardExhausted) {\n          if (backwardExhausted) {\n            localOffset++;\n          } else {\n            wantForward = false;\n          }\n\n          // Check if trying to fit beyond text length, and if not, check it fits\n          // after offset location (or desired location on first iteration)\n          if (start + localOffset <= maxLine) {\n            return localOffset;\n          }\n\n          forwardExhausted = true;\n        }\n\n        if (!backwardExhausted) {\n          if (!forwardExhausted) {\n            wantForward = true;\n          }\n\n          // Check if trying to fit before text beginning, and if not, check it fits\n          // before offset location\n          if (minLine <= start - localOffset) {\n            return -localOffset++;\n          }\n\n          backwardExhausted = true;\n          return iterator();\n        }\n\n        // We tried to fit hunk before text beginning and beyond text lenght, then\n        // hunk can't fit on the text. Return undefined\n      };\n    };\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7NENBR2UsVUFBUyxLQUFULEVBQWdCLE9BQWhCLEVBQXlCLE9BQXpCLEVBQWtDO0FBQy9DLE1BQUksY0FBYyxJQUFsQjtBQUFBLE1BQ0ksb0JBQW9CLEtBRHhCO0FBQUEsTUFFSSxtQkFBbUIsS0FGdkI7QUFBQSxNQUdJLGNBQWMsQ0FIbEI7O0FBS0EsU0FBTyxTQUFTLFFBQVQsR0FBb0I7QUFDekIsUUFBSSxlQUFlLENBQUMsZ0JBQXBCLEVBQXNDO0FBQ3BDLFVBQUksaUJBQUosRUFBdUI7QUFDckI7QUFDRCxPQUZELE1BRU87QUFDTCxzQkFBYyxLQUFkO0FBQ0Q7Ozs7QUFJRCxVQUFJLFFBQVEsV0FBUixJQUF1QixPQUEzQixFQUFvQztBQUNsQyxlQUFPLFdBQVA7QUFDRDs7QUFFRCx5QkFBbUIsSUFBbkI7QUFDRDs7QUFFRCxRQUFJLENBQUMsaUJBQUwsRUFBd0I7QUFDdEIsVUFBSSxDQUFDLGdCQUFMLEVBQXVCO0FBQ3JCLHNCQUFjLElBQWQ7QUFDRDs7OztBQUlELFVBQUksV0FBVyxRQUFRLFdBQXZCLEVBQW9DO0FBQ2xDLGVBQU8sQ0FBQyxhQUFSO0FBQ0Q7O0FBRUQsMEJBQW9CLElBQXBCO0FBQ0EsYUFBTyxVQUFQO0FBQ0Q7Ozs7QUFJRixHQWxDRDtBQW1DRCxDIiwiZmlsZSI6ImRpc3RhbmNlLWl0ZXJhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4vLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuLy8gc3RhcnQgb2YgMiwgdGhpcyB3aWxsIGl0ZXJhdGUgMiwgMywgMSwgNCwgMC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gIGxldCB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuXG4gIHJldHVybiBmdW5jdGlvbiBpdGVyYXRvcigpIHtcbiAgICBpZiAod2FudEZvcndhcmQgJiYgIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICBsb2NhbE9mZnNldCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZXlvbmQgdGV4dCBsZW5ndGgsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGFmdGVyIG9mZnNldCBsb2NhdGlvbiAob3IgZGVzaXJlZCBsb2NhdGlvbiBvbiBmaXJzdCBpdGVyYXRpb24pXG4gICAgICBpZiAoc3RhcnQgKyBsb2NhbE9mZnNldCA8PSBtYXhMaW5lKSB7XG4gICAgICAgIHJldHVybiBsb2NhbE9mZnNldDtcbiAgICAgIH1cblxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgaWYgKCFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgIHdhbnRGb3J3YXJkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZWZvcmUgdGV4dCBiZWdpbm5pbmcsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGJlZm9yZSBvZmZzZXQgbG9jYXRpb25cbiAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuICAgICAgfVxuXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgICByZXR1cm4gaXRlcmF0b3IoKTtcbiAgICB9XG5cbiAgICAvLyBXZSB0cmllZCB0byBmaXQgaHVuayBiZWZvcmUgdGV4dCBiZWdpbm5pbmcgYW5kIGJleW9uZCB0ZXh0IGxlbmdodCwgdGhlblxuICAgIC8vIGh1bmsgY2FuJ3QgZml0IG9uIHRoZSB0ZXh0LiBSZXR1cm4gdW5kZWZpbmVkXG4gIH07XG59XG4iXX0=\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports. structuredPatch = structuredPatch;\n    exports. createTwoFilesPatch = createTwoFilesPatch;\n    exports. createPatch = createPatch;\n\n    var _line = __webpack_require__(5) ;\n\n    \n    function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n    function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n      if (!options) {\n        options = {};\n      }\n      if (typeof options.context === 'undefined') {\n        options.context = 4;\n      }\n\n      var diff = (0, _line.diffLines) (oldStr, newStr, options);\n      diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier\n\n      function contextLines(lines) {\n        return lines.map(function (entry) {\n          return ' ' + entry;\n        });\n      }\n\n      var hunks = [];\n      var oldRangeStart = 0,\n          newRangeStart = 0,\n          curRange = [],\n          oldLine = 1,\n          newLine = 1;\n      \n      var _loop = function _loop( i) {\n        var current = diff[i],\n            lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n        current.lines = lines;\n\n        if (current.added || current.removed) {\n          \n          var _curRange;\n\n          \n          // If we have previous context, start with that\n          if (!oldRangeStart) {\n            var prev = diff[i - 1];\n            oldRangeStart = oldLine;\n            newRangeStart = newLine;\n\n            if (prev) {\n              curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n              oldRangeStart -= curRange.length;\n              newRangeStart -= curRange.length;\n            }\n          }\n\n          // Output our changes\n          (_curRange = curRange).push. apply ( _curRange , _toConsumableArray( lines.map(function (entry) {\n            return (current.added ? '+' : '-') + entry;\n          })));\n\n          // Track the updated file position\n          if (current.added) {\n            newLine += lines.length;\n          } else {\n            oldLine += lines.length;\n          }\n        } else {\n          // Identical context lines. Track line changes\n          if (oldRangeStart) {\n            // Close out any changes that have been output (or join overlapping)\n            if (lines.length <= options.context * 2 && i < diff.length - 2) {\n              \n              var _curRange2;\n\n              \n              // Overlapping\n              (_curRange2 = curRange).push. apply ( _curRange2 , _toConsumableArray( contextLines(lines)));\n            } else {\n              \n              var _curRange3;\n\n              \n              // end the range and output\n              var contextSize = Math.min(lines.length, options.context);\n              (_curRange3 = curRange).push. apply ( _curRange3 , _toConsumableArray( contextLines(lines.slice(0, contextSize))));\n\n              var hunk = {\n                oldStart: oldRangeStart,\n                oldLines: oldLine - oldRangeStart + contextSize,\n                newStart: newRangeStart,\n                newLines: newLine - newRangeStart + contextSize,\n                lines: curRange\n              };\n              if (i >= diff.length - 2 && lines.length <= options.context) {\n                // EOF is inside this hunk\n                var oldEOFNewline = /\\n$/.test(oldStr);\n                var newEOFNewline = /\\n$/.test(newStr);\n                if (lines.length == 0 && !oldEOFNewline) {\n                  // special case: old has no eol and no trailing context; no-nl can end up before adds\n                  curRange.splice(hunk.oldLines, 0, '\\\\ No newline at end of file');\n                } else if (!oldEOFNewline || !newEOFNewline) {\n                  curRange.push('\\\\ No newline at end of file');\n                }\n              }\n              hunks.push(hunk);\n\n              oldRangeStart = 0;\n              newRangeStart = 0;\n              curRange = [];\n            }\n          }\n          oldLine += lines.length;\n          newLine += lines.length;\n        }\n      };\n\n      for (var i = 0; i < diff.length; i++) {\n        \n        _loop( i);\n      }\n\n      return {\n        oldFileName: oldFileName, newFileName: newFileName,\n        oldHeader: oldHeader, newHeader: newHeader,\n        hunks: hunks\n      };\n    }\n\n    function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n      var diff = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n\n      var ret = [];\n      if (oldFileName == newFileName) {\n        ret.push('Index: ' + oldFileName);\n      }\n      ret.push('===================================================================');\n      ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n      ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n\n      for (var i = 0; i < diff.hunks.length; i++) {\n        var hunk = diff.hunks[i];\n        ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n        ret.push.apply(ret, hunk.lines);\n      }\n\n      return ret.join('\\n') + '\\n';\n    }\n\n    function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n      return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O2dDQUVnQixlLEdBQUEsZTt5REFpR0EsbUIsR0FBQSxtQjt5REF3QkEsVyxHQUFBLFc7O0FBM0hoQixJLHlCQUFBLCtCLHdCQUFBOzs7Ozt1QkFFTyxTQUFTLGVBQVQsQ0FBeUIsV0FBekIsRUFBc0MsV0FBdEMsRUFBbUQsTUFBbkQsRUFBMkQsTUFBM0QsRUFBbUUsU0FBbkUsRUFBOEUsU0FBOUUsRUFBeUYsT0FBekYsRUFBa0c7QUFDdkcsTUFBSSxDQUFDLE9BQUwsRUFBYztBQUNaLGNBQVUsRUFBVjtBQUNEO0FBQ0QsTUFBSSxPQUFPLFFBQVEsT0FBZixLQUEyQixXQUEvQixFQUE0QztBQUMxQyxZQUFRLE9BQVIsR0FBa0IsQ0FBbEI7QUFDRDs7QUFFRCxNQUFNLE8seUJBQU8sb0Isd0JBQUEsQ0FBVSxNQUFWLEVBQWtCLE1BQWxCLEVBQTBCLE9BQTFCLENBQWI7QUFDQSxPQUFLLElBQUwsQ0FBVSxFQUFDLE9BQU8sRUFBUixFQUFZLE9BQU8sRUFBbkIsRUFBVixFOztBQUVBLFdBQVMsWUFBVCxDQUFzQixLQUF0QixFQUE2QjtBQUMzQixXQUFPLE1BQU0sR0FBTixDQUFVLFVBQVMsS0FBVCxFQUFnQjtBQUFFLGFBQU8sTUFBTSxLQUFiO0FBQXFCLEtBQWpELENBQVA7QUFDRDs7QUFFRCxNQUFJLFFBQVEsRUFBWjtBQUNBLE1BQUksZ0JBQWdCLENBQXBCO0FBQUEsTUFBdUIsZ0JBQWdCLENBQXZDO0FBQUEsTUFBMEMsV0FBVyxFQUFyRDtBQUFBLE1BQ0ksVUFBVSxDQURkO0FBQUEsTUFDaUIsVUFBVSxDQUQzQjs7QUFoQnVHLDZCLHdCQWtCOUYsQ0FsQjhGO0FBbUJyRyxRQUFNLFVBQVUsS0FBSyxDQUFMLENBQWhCO0FBQUEsUUFDTSxRQUFRLFFBQVEsS0FBUixJQUFpQixRQUFRLEtBQVIsQ0FBYyxPQUFkLENBQXNCLEtBQXRCLEVBQTZCLEVBQTdCLEVBQWlDLEtBQWpDLENBQXVDLElBQXZDLENBRC9CO0FBRUEsWUFBUSxLQUFSLEdBQWdCLEtBQWhCOztBQUVBLFFBQUksUUFBUSxLQUFSLElBQWlCLFFBQVEsT0FBN0IsRUFBc0M7O0FBQUE7Ozs7QUFFcEMsVUFBSSxDQUFDLGFBQUwsRUFBb0I7QUFDbEIsWUFBTSxPQUFPLEtBQUssSUFBSSxDQUFULENBQWI7QUFDQSx3QkFBZ0IsT0FBaEI7QUFDQSx3QkFBZ0IsT0FBaEI7O0FBRUEsWUFBSSxJQUFKLEVBQVU7QUFDUixxQkFBVyxRQUFRLE9BQVIsR0FBa0IsQ0FBbEIsR0FBc0IsYUFBYSxLQUFLLEtBQUwsQ0FBVyxLQUFYLENBQWlCLENBQUMsUUFBUSxPQUExQixDQUFiLENBQXRCLEdBQXlFLEVBQXBGO0FBQ0EsMkJBQWlCLFNBQVMsTUFBMUI7QUFDQSwyQkFBaUIsU0FBUyxNQUExQjtBQUNEO0FBQ0Y7OzsrQkFHRCxhLHVCQUFBLFVBQVMsSUFBVCxDLDBCQUFBLEssd0JBQUEsQywwQkFBQSxTLHdCQUFBLEUseUJBQUEsbUIsd0JBQWtCLE1BQU0sR0FBTixDQUFVLFVBQVMsS0FBVCxFQUFnQjtBQUMxQyxlQUFPLENBQUMsUUFBUSxLQUFSLEdBQWdCLEdBQWhCLEdBQXNCLEdBQXZCLElBQThCLEtBQXJDO0FBQ0QsT0FGaUIsQ0FBbEI7OztBQUtBLFVBQUksUUFBUSxLQUFaLEVBQW1CO0FBQ2pCLG1CQUFXLE1BQU0sTUFBakI7QUFDRCxPQUZELE1BRU87QUFDTCxtQkFBVyxNQUFNLE1BQWpCO0FBQ0Q7QUFDRixLQXpCRCxNQXlCTzs7QUFFTCxVQUFJLGFBQUosRUFBbUI7O0FBRWpCLFlBQUksTUFBTSxNQUFOLElBQWdCLFFBQVEsT0FBUixHQUFrQixDQUFsQyxJQUF1QyxJQUFJLEtBQUssTUFBTCxHQUFjLENBQTdELEVBQWdFOztBQUFBOzs7O21DQUU5RCxjLHVCQUFBLFVBQVMsSUFBVCxDLDBCQUFBLEssd0JBQUEsQywwQkFBQSxVLHdCQUFBLEUseUJBQUEsbUIsd0JBQWtCLGFBQWEsS0FBYixDQUFsQjtBQUNELFNBSEQsTUFHTzs7QUFBQTs7OztBQUVMLGNBQUksY0FBYyxLQUFLLEdBQUwsQ0FBUyxNQUFNLE1BQWYsRUFBdUIsUUFBUSxPQUEvQixDQUFsQjttQ0FDQSxjLHVCQUFBLFVBQVMsSUFBVCxDLDBCQUFBLEssd0JBQUEsQywwQkFBQSxVLHdCQUFBLEUseUJBQUEsbUIsd0JBQWtCLGFBQWEsTUFBTSxLQUFOLENBQVksQ0FBWixFQUFlLFdBQWYsQ0FBYixDQUFsQjs7QUFFQSxjQUFJLE9BQU87QUFDVCxzQkFBVSxhQUREO0FBRVQsc0JBQVcsVUFBVSxhQUFWLEdBQTBCLFdBRjVCO0FBR1Qsc0JBQVUsYUFIRDtBQUlULHNCQUFXLFVBQVUsYUFBVixHQUEwQixXQUo1QjtBQUtULG1CQUFPO0FBTEUsV0FBWDtBQU9BLGNBQUksS0FBSyxLQUFLLE1BQUwsR0FBYyxDQUFuQixJQUF3QixNQUFNLE1BQU4sSUFBZ0IsUUFBUSxPQUFwRCxFQUE2RDs7QUFFM0QsZ0JBQUksZ0JBQWlCLE1BQU0sSUFBTixDQUFXLE1BQVgsQ0FBckI7QUFDQSxnQkFBSSxnQkFBaUIsTUFBTSxJQUFOLENBQVcsTUFBWCxDQUFyQjtBQUNBLGdCQUFJLE1BQU0sTUFBTixJQUFnQixDQUFoQixJQUFxQixDQUFDLGFBQTFCLEVBQXlDOztBQUV2Qyx1QkFBUyxNQUFULENBQWdCLEtBQUssUUFBckIsRUFBK0IsQ0FBL0IsRUFBa0MsOEJBQWxDO0FBQ0QsYUFIRCxNQUdPLElBQUksQ0FBQyxhQUFELElBQWtCLENBQUMsYUFBdkIsRUFBc0M7QUFDM0MsdUJBQVMsSUFBVCxDQUFjLDhCQUFkO0FBQ0Q7QUFDRjtBQUNELGdCQUFNLElBQU4sQ0FBVyxJQUFYOztBQUVBLDBCQUFnQixDQUFoQjtBQUNBLDBCQUFnQixDQUFoQjtBQUNBLHFCQUFXLEVBQVg7QUFDRDtBQUNGO0FBQ0QsaUJBQVcsTUFBTSxNQUFqQjtBQUNBLGlCQUFXLE1BQU0sTUFBakI7QUFDRDtBQXZGb0c7O0FBa0J2RyxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQzs7QUFBQSxVLHdCQUE3QixDQUE2QjtBQXNFckM7O0FBRUQsU0FBTztBQUNMLGlCQUFhLFdBRFIsRUFDcUIsYUFBYSxXQURsQztBQUVMLGVBQVcsU0FGTixFQUVpQixXQUFXLFNBRjVCO0FBR0wsV0FBTztBQUhGLEdBQVA7QUFLRDs7QUFFTSxTQUFTLG1CQUFULENBQTZCLFdBQTdCLEVBQTBDLFdBQTFDLEVBQXVELE1BQXZELEVBQStELE1BQS9ELEVBQXVFLFNBQXZFLEVBQWtGLFNBQWxGLEVBQTZGLE9BQTdGLEVBQXNHO0FBQzNHLE1BQU0sT0FBTyxnQkFBZ0IsV0FBaEIsRUFBNkIsV0FBN0IsRUFBMEMsTUFBMUMsRUFBa0QsTUFBbEQsRUFBMEQsU0FBMUQsRUFBcUUsU0FBckUsRUFBZ0YsT0FBaEYsQ0FBYjs7QUFFQSxNQUFNLE1BQU0sRUFBWjtBQUNBLE1BQUksZUFBZSxXQUFuQixFQUFnQztBQUM5QixRQUFJLElBQUosQ0FBUyxZQUFZLFdBQXJCO0FBQ0Q7QUFDRCxNQUFJLElBQUosQ0FBUyxxRUFBVDtBQUNBLE1BQUksSUFBSixDQUFTLFNBQVMsS0FBSyxXQUFkLElBQTZCLE9BQU8sS0FBSyxTQUFaLEtBQTBCLFdBQTFCLEdBQXdDLEVBQXhDLEdBQTZDLE9BQU8sS0FBSyxTQUF0RixDQUFUO0FBQ0EsTUFBSSxJQUFKLENBQVMsU0FBUyxLQUFLLFdBQWQsSUFBNkIsT0FBTyxLQUFLLFNBQVosS0FBMEIsV0FBMUIsR0FBd0MsRUFBeEMsR0FBNkMsT0FBTyxLQUFLLFNBQXRGLENBQVQ7O0FBRUEsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssS0FBTCxDQUFXLE1BQS9CLEVBQXVDLEdBQXZDLEVBQTRDO0FBQzFDLFFBQU0sT0FBTyxLQUFLLEtBQUwsQ0FBVyxDQUFYLENBQWI7QUFDQSxRQUFJLElBQUosQ0FDRSxTQUFTLEtBQUssUUFBZCxHQUF5QixHQUF6QixHQUErQixLQUFLLFFBQXBDLEdBQ0UsSUFERixHQUNTLEtBQUssUUFEZCxHQUN5QixHQUR6QixHQUMrQixLQUFLLFFBRHBDLEdBRUUsS0FISjtBQUtBLFFBQUksSUFBSixDQUFTLEtBQVQsQ0FBZSxHQUFmLEVBQW9CLEtBQUssS0FBekI7QUFDRDs7QUFFRCxTQUFPLElBQUksSUFBSixDQUFTLElBQVQsSUFBaUIsSUFBeEI7QUFDRDs7QUFFTSxTQUFTLFdBQVQsQ0FBcUIsUUFBckIsRUFBK0IsTUFBL0IsRUFBdUMsTUFBdkMsRUFBK0MsU0FBL0MsRUFBMEQsU0FBMUQsRUFBcUUsT0FBckUsRUFBOEU7QUFDbkYsU0FBTyxvQkFBb0IsUUFBcEIsRUFBOEIsUUFBOUIsRUFBd0MsTUFBeEMsRUFBZ0QsTUFBaEQsRUFBd0QsU0FBeEQsRUFBbUUsU0FBbkUsRUFBOEUsT0FBOUUsQ0FBUDtBQUNEIiwiZmlsZSI6ImNyZWF0ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGlmZkxpbmVzfSBmcm9tICcuLi9kaWZmL2xpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zLmNvbnRleHQgPSA0O1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG4gIGRpZmYucHVzaCh7dmFsdWU6ICcnLCBsaW5lczogW119KTsgICAvLyBBcHBlbmQgYW4gZW1wdHkgdmFsdWUgdG8gbWFrZSBjbGVhbnVwIGVhc2llclxuXG4gIGZ1bmN0aW9uIGNvbnRleHRMaW5lcyhsaW5lcykge1xuICAgIHJldHVybiBsaW5lcy5tYXAoZnVuY3Rpb24oZW50cnkpIHsgcmV0dXJuICcgJyArIGVudHJ5OyB9KTtcbiAgfVxuXG4gIGxldCBodW5rcyA9IFtdO1xuICBsZXQgb2xkUmFuZ2VTdGFydCA9IDAsIG5ld1JhbmdlU3RhcnQgPSAwLCBjdXJSYW5nZSA9IFtdLFxuICAgICAgb2xkTGluZSA9IDEsIG5ld0xpbmUgPSAxO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZmYubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjdXJyZW50ID0gZGlmZltpXSxcbiAgICAgICAgICBsaW5lcyA9IGN1cnJlbnQubGluZXMgfHwgY3VycmVudC52YWx1ZS5yZXBsYWNlKC9cXG4kLywgJycpLnNwbGl0KCdcXG4nKTtcbiAgICBjdXJyZW50LmxpbmVzID0gbGluZXM7XG5cbiAgICBpZiAoY3VycmVudC5hZGRlZCB8fCBjdXJyZW50LnJlbW92ZWQpIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgcHJldmlvdXMgY29udGV4dCwgc3RhcnQgd2l0aCB0aGF0XG4gICAgICBpZiAoIW9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgY29uc3QgcHJldiA9IGRpZmZbaSAtIDFdO1xuICAgICAgICBvbGRSYW5nZVN0YXJ0ID0gb2xkTGluZTtcbiAgICAgICAgbmV3UmFuZ2VTdGFydCA9IG5ld0xpbmU7XG5cbiAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICBjdXJSYW5nZSA9IG9wdGlvbnMuY29udGV4dCA+IDAgPyBjb250ZXh0TGluZXMocHJldi5saW5lcy5zbGljZSgtb3B0aW9ucy5jb250ZXh0KSkgOiBbXTtcbiAgICAgICAgICBvbGRSYW5nZVN0YXJ0IC09IGN1clJhbmdlLmxlbmd0aDtcbiAgICAgICAgICBuZXdSYW5nZVN0YXJ0IC09IGN1clJhbmdlLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPdXRwdXQgb3VyIGNoYW5nZXNcbiAgICAgIGN1clJhbmdlLnB1c2goLi4uIGxpbmVzLm1hcChmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICByZXR1cm4gKGN1cnJlbnQuYWRkZWQgPyAnKycgOiAnLScpICsgZW50cnk7XG4gICAgICB9KSk7XG5cbiAgICAgIC8vIFRyYWNrIHRoZSB1cGRhdGVkIGZpbGUgcG9zaXRpb25cbiAgICAgIGlmIChjdXJyZW50LmFkZGVkKSB7XG4gICAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElkZW50aWNhbCBjb250ZXh0IGxpbmVzLiBUcmFjayBsaW5lIGNoYW5nZXNcbiAgICAgIGlmIChvbGRSYW5nZVN0YXJ0KSB7XG4gICAgICAgIC8vIENsb3NlIG91dCBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBvdXRwdXQgKG9yIGpvaW4gb3ZlcmxhcHBpbmcpXG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0ICogMiAmJiBpIDwgZGlmZi5sZW5ndGggLSAyKSB7XG4gICAgICAgICAgLy8gT3ZlcmxhcHBpbmdcbiAgICAgICAgICBjdXJSYW5nZS5wdXNoKC4uLiBjb250ZXh0TGluZXMobGluZXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlbmQgdGhlIHJhbmdlIGFuZCBvdXRwdXRcbiAgICAgICAgICBsZXQgY29udGV4dFNpemUgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIG9wdGlvbnMuY29udGV4dCk7XG4gICAgICAgICAgY3VyUmFuZ2UucHVzaCguLi4gY29udGV4dExpbmVzKGxpbmVzLnNsaWNlKDAsIGNvbnRleHRTaXplKSkpO1xuXG4gICAgICAgICAgbGV0IGh1bmsgPSB7XG4gICAgICAgICAgICBvbGRTdGFydDogb2xkUmFuZ2VTdGFydCxcbiAgICAgICAgICAgIG9sZExpbmVzOiAob2xkTGluZSAtIG9sZFJhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSksXG4gICAgICAgICAgICBuZXdTdGFydDogbmV3UmFuZ2VTdGFydCxcbiAgICAgICAgICAgIG5ld0xpbmVzOiAobmV3TGluZSAtIG5ld1JhbmdlU3RhcnQgKyBjb250ZXh0U2l6ZSksXG4gICAgICAgICAgICBsaW5lczogY3VyUmFuZ2VcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChpID49IGRpZmYubGVuZ3RoIC0gMiAmJiBsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0KSB7XG4gICAgICAgICAgICAvLyBFT0YgaXMgaW5zaWRlIHRoaXMgaHVua1xuICAgICAgICAgICAgbGV0IG9sZEVPRk5ld2xpbmUgPSAoL1xcbiQvLnRlc3Qob2xkU3RyKSk7XG4gICAgICAgICAgICBsZXQgbmV3RU9GTmV3bGluZSA9ICgvXFxuJC8udGVzdChuZXdTdHIpKTtcbiAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT0gMCAmJiAhb2xkRU9GTmV3bGluZSkge1xuICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IG9sZCBoYXMgbm8gZW9sIGFuZCBubyB0cmFpbGluZyBjb250ZXh0OyBuby1ubCBjYW4gZW5kIHVwIGJlZm9yZSBhZGRzXG4gICAgICAgICAgICAgIGN1clJhbmdlLnNwbGljZShodW5rLm9sZExpbmVzLCAwLCAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFvbGRFT0ZOZXdsaW5lIHx8ICFuZXdFT0ZOZXdsaW5lKSB7XG4gICAgICAgICAgICAgIGN1clJhbmdlLnB1c2goJ1xcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBodW5rcy5wdXNoKGh1bmspO1xuXG4gICAgICAgICAgb2xkUmFuZ2VTdGFydCA9IDA7XG4gICAgICAgICAgbmV3UmFuZ2VTdGFydCA9IDA7XG4gICAgICAgICAgY3VyUmFuZ2UgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICBuZXdMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9sZEZpbGVOYW1lOiBvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWU6IG5ld0ZpbGVOYW1lLFxuICAgIG9sZEhlYWRlcjogb2xkSGVhZGVyLCBuZXdIZWFkZXI6IG5ld0hlYWRlcixcbiAgICBodW5rczogaHVua3NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGlmZiA9IHN0cnVjdHVyZWRQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucyk7XG5cbiAgY29uc3QgcmV0ID0gW107XG4gIGlmIChvbGRGaWxlTmFtZSA9PSBuZXdGaWxlTmFtZSkge1xuICAgIHJldC5wdXNoKCdJbmRleDogJyArIG9sZEZpbGVOYW1lKTtcbiAgfVxuICByZXQucHVzaCgnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICByZXQucHVzaCgnLS0tICcgKyBkaWZmLm9sZEZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm9sZEhlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5vbGRIZWFkZXIpKTtcbiAgcmV0LnB1c2goJysrKyAnICsgZGlmZi5uZXdGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5uZXdIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYubmV3SGVhZGVyKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmLmh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaHVuayA9IGRpZmYuaHVua3NbaV07XG4gICAgcmV0LnB1c2goXG4gICAgICAnQEAgLScgKyBodW5rLm9sZFN0YXJ0ICsgJywnICsgaHVuay5vbGRMaW5lc1xuICAgICAgKyAnICsnICsgaHVuay5uZXdTdGFydCArICcsJyArIGh1bmsubmV3TGluZXNcbiAgICAgICsgJyBAQCdcbiAgICApO1xuICAgIHJldC5wdXNoLmFwcGx5KHJldCwgaHVuay5saW5lcyk7XG4gIH1cblxuICByZXR1cm4gcmV0LmpvaW4oJ1xcbicpICsgJ1xcbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbn1cbiJdfQ==\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n    \"use strict\";\n\n    exports.__esModule = true;\n    exports. convertChangesToDMP = convertChangesToDMP;\n    // See: http://code.google.com/p/google-diff-match-patch/wiki/API\n    function convertChangesToDMP(changes) {\n      var ret = [],\n          change = void 0 ,\n          operation = void 0 ;\n      for (var i = 0; i < changes.length; i++) {\n        change = changes[i];\n        if (change.added) {\n          operation = 1;\n        } else if (change.removed) {\n          operation = -1;\n        } else {\n          operation = 0;\n        }\n\n        ret.push([operation, change.value]);\n      }\n      return ret;\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L2RtcC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Z0NBQ2dCLG1CLEdBQUEsbUI7O0FBQVQsU0FBUyxtQkFBVCxDQUE2QixPQUE3QixFQUFzQztBQUMzQyxNQUFJLE1BQU0sRUFBVjtBQUFBLE1BQ0ksUyx5QkFBQSxNLHdCQURKO0FBQUEsTUFFSSxZLHlCQUFBLE0sd0JBRko7QUFHQSxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksUUFBUSxNQUE1QixFQUFvQyxHQUFwQyxFQUF5QztBQUN2QyxhQUFTLFFBQVEsQ0FBUixDQUFUO0FBQ0EsUUFBSSxPQUFPLEtBQVgsRUFBa0I7QUFDaEIsa0JBQVksQ0FBWjtBQUNELEtBRkQsTUFFTyxJQUFJLE9BQU8sT0FBWCxFQUFvQjtBQUN6QixrQkFBWSxDQUFDLENBQWI7QUFDRCxLQUZNLE1BRUE7QUFDTCxrQkFBWSxDQUFaO0FBQ0Q7O0FBRUQsUUFBSSxJQUFKLENBQVMsQ0FBQyxTQUFELEVBQVksT0FBTyxLQUFuQixDQUFUO0FBQ0Q7QUFDRCxTQUFPLEdBQVA7QUFDRCIsImZpbGUiOiJkbXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtZGlmZi1tYXRjaC1wYXRjaC93aWtpL0FQSVxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9ETVAoY2hhbmdlcykge1xuICBsZXQgcmV0ID0gW10sXG4gICAgICBjaGFuZ2UsXG4gICAgICBvcGVyYXRpb247XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgb3BlcmF0aW9uID0gMTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICBvcGVyYXRpb24gPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3BlcmF0aW9uID0gMDtcbiAgICB9XG5cbiAgICByZXQucHVzaChbb3BlcmF0aW9uLCBjaGFuZ2UudmFsdWVdKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n    'use strict';\n\n    exports.__esModule = true;\n    exports. convertChangesToXML = convertChangesToXML;\n    function convertChangesToXML(changes) {\n      var ret = [];\n      for (var i = 0; i < changes.length; i++) {\n        var change = changes[i];\n        if (change.added) {\n          ret.push('<ins>');\n        } else if (change.removed) {\n          ret.push('<del>');\n        }\n\n        ret.push(escapeHTML(change.value));\n\n        if (change.added) {\n          ret.push('</ins>');\n        } else if (change.removed) {\n          ret.push('</del>');\n        }\n      }\n      return ret.join('');\n    }\n\n    function escapeHTML(s) {\n      var n = s;\n      n = n.replace(/&/g, '&amp;');\n      n = n.replace(/</g, '&lt;');\n      n = n.replace(/>/g, '&gt;');\n      n = n.replace(/\"/g, '&quot;');\n\n      return n;\n    }\n    //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L3htbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Z0NBQWdCLG1CLEdBQUEsbUI7QUFBVCxTQUFTLG1CQUFULENBQTZCLE9BQTdCLEVBQXNDO0FBQzNDLE1BQUksTUFBTSxFQUFWO0FBQ0EsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFFBQVEsTUFBNUIsRUFBb0MsR0FBcEMsRUFBeUM7QUFDdkMsUUFBSSxTQUFTLFFBQVEsQ0FBUixDQUFiO0FBQ0EsUUFBSSxPQUFPLEtBQVgsRUFBa0I7QUFDaEIsVUFBSSxJQUFKLENBQVMsT0FBVDtBQUNELEtBRkQsTUFFTyxJQUFJLE9BQU8sT0FBWCxFQUFvQjtBQUN6QixVQUFJLElBQUosQ0FBUyxPQUFUO0FBQ0Q7O0FBRUQsUUFBSSxJQUFKLENBQVMsV0FBVyxPQUFPLEtBQWxCLENBQVQ7O0FBRUEsUUFBSSxPQUFPLEtBQVgsRUFBa0I7QUFDaEIsVUFBSSxJQUFKLENBQVMsUUFBVDtBQUNELEtBRkQsTUFFTyxJQUFJLE9BQU8sT0FBWCxFQUFvQjtBQUN6QixVQUFJLElBQUosQ0FBUyxRQUFUO0FBQ0Q7QUFDRjtBQUNELFNBQU8sSUFBSSxJQUFKLENBQVMsRUFBVCxDQUFQO0FBQ0Q7O0FBRUQsU0FBUyxVQUFULENBQW9CLENBQXBCLEVBQXVCO0FBQ3JCLE1BQUksSUFBSSxDQUFSO0FBQ0EsTUFBSSxFQUFFLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE9BQWhCLENBQUo7QUFDQSxNQUFJLEVBQUUsT0FBRixDQUFVLElBQVYsRUFBZ0IsTUFBaEIsQ0FBSjtBQUNBLE1BQUksRUFBRSxPQUFGLENBQVUsSUFBVixFQUFnQixNQUFoQixDQUFKO0FBQ0EsTUFBSSxFQUFFLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLFFBQWhCLENBQUo7O0FBRUEsU0FBTyxDQUFQO0FBQ0QiLCJmaWxlIjoieG1sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9YTUwoY2hhbmdlcykge1xuICBsZXQgcmV0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8aW5zPicpO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8ZGVsPicpO1xuICAgIH1cblxuICAgIHJldC5wdXNoKGVzY2FwZUhUTUwoY2hhbmdlLnZhbHVlKSk7XG5cbiAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICByZXQucHVzaCgnPC9pbnM+Jyk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgcmV0LnB1c2goJzwvZGVsPicpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0LmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVIVE1MKHMpIHtcbiAgbGV0IG4gPSBzO1xuICBuID0gbi5yZXBsYWNlKC8mL2csICcmYW1wOycpO1xuICBuID0gbi5yZXBsYWNlKC88L2csICcmbHQ7Jyk7XG4gIG4gPSBuLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbiAgbiA9IG4ucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuXG4gIHJldHVybiBuO1xufVxuIl19\n\n\n/***/ }\n])\n});\n"
  },
  {
    "path": "modules/cms/classes/AjaxApiResponse.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Illuminate\\Http\\Response;\nuse October\\Rain\\Exception\\ApplicationException;\nuse October\\Rain\\Exception\\ValidationException;\nuse October\\Rain\\Exception\\ForbiddenException;\nuse October\\Rain\\Exception\\NotFoundException;\nuse Illuminate\\Http\\RedirectResponse;\nuse ArrayAccess;\n\n/**\n * AjaxResponse\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass AjaxApiResponse extends Response implements ArrayAccess\n{\n    /**\n     * @var array pageVars are variables included on the page\n     */\n    protected $pageVars = [];\n\n    /**\n     * @var string ajaxRedirectUrl\n     */\n    protected $ajaxRedirectUrl;\n\n    /**\n     * @var array ajaxFlashMessages\n     */\n    protected $ajaxFlashMessages;\n\n    /**\n     * addPageVars is used internally\n     */\n    public function addPageVars($vars): static\n    {\n        $this->pageVars = (array) $vars;\n\n        return $this;\n    }\n\n    /**\n     * withPageVars includes the page vars in the response. This does not happen by default\n     * for security reasons.\n     */\n    public function withPageVars(): static\n    {\n        $this->original['data'] = array_merge($this->original['data'] ?? [], $this->pageVars);\n\n        $this->setContent($this->original);\n\n        return $this;\n    }\n\n    /**\n     * addFlashMessages is used internally\n     */\n    public function addFlashMessages($messages): static\n    {\n        $this->ajaxFlashMessages = $messages;\n\n        return $this;\n    }\n\n    /**\n     * setContent captures the variables from a handler and merges any resulting data\n     */\n    public function setHandlerResponse($content): static\n    {\n        if ($content instanceof RedirectResponse) {\n            $this->setAjaxRedirect($content);\n        }\n\n        if (is_string($content)) {\n            $data = ['result' => $content];\n        }\n        elseif (is_array($content)) {\n            $data = $content;\n        }\n        else {\n            $data = [];\n        }\n\n        $response = [\n            'data' => $data\n        ];\n\n        if ($this->ajaxRedirectUrl) {\n            $response['redirect'] = $this->ajaxRedirectUrl;\n        }\n\n        if ($this->ajaxFlashMessages) {\n            $response['flash'] = $this->ajaxFlashMessages;\n        }\n\n        $this->setContent($response);\n\n        return $this;\n    }\n\n    /**\n     * setException\n     */\n    public function setHandlerException($exception): static\n    {\n        $this->exception = $exception;\n\n        $error = [];\n        $error['message'] = $exception->getMessage();\n\n        if ($exception instanceof ValidationException) {\n            $this->setStatusCode(422);\n            $error['fields'] = $exception->getFields();\n        }\n        elseif ($exception instanceof ApplicationException) {\n            $this->setStatusCode(400);\n        }\n        elseif ($exception instanceof ForbiddenException) {\n            $this->setStatusCode(403);\n        }\n        elseif ($exception instanceof NotFoundException) {\n            $this->setStatusCode(404);\n        }\n        else {\n            $this->setStatusCode(500);\n        }\n\n        $this->setContent([\n            'error' => $error\n        ]);\n\n        return $this;\n    }\n\n    /**\n     * isAjaxRedirect\n     */\n    public function isAjaxRedirect(): bool\n    {\n        return $this->ajaxRedirectUrl !== null;\n    }\n\n    /**\n     * getRedirectUrl\n     */\n    public function getAjaxRedirectUrl(): string\n    {\n        return $this->ajaxRedirectUrl;\n    }\n\n    /**\n     * setRedirectUrl\n     */\n    public function setAjaxRedirect($response)\n    {\n        $this->ajaxRedirectUrl = $response->getTargetUrl();\n    }\n\n    /**\n     * offsetExists implementation\n     */\n    public function offsetExists($offset): bool\n    {\n        return isset($this->original[$offset]) || isset($this->pageVars[$offset]);\n    }\n\n    /**\n     * offsetSet implementation\n     */\n    public function offsetSet($offset, $value): void\n    {\n        $this->original[$offset] = $value;\n    }\n\n    /**\n     * offsetUnset implementation\n     */\n    public function offsetUnset($offset): void\n    {\n        unset($this->original[$offset]);\n    }\n\n    /**\n     * offsetGet implementation\n     */\n    public function offsetGet($offset): mixed\n    {\n        return $this->original[$offset] ?? ($this->pageVars[$offset] ?? null);\n    }\n\n    /**\n     * withVars the given variables in to the response data.\n     */\n    public function withVars(array $vars): static\n    {\n        $this->original['data'] = array_merge($this->original['data'] ?? [], $vars);\n\n        $this->setContent($this->original);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Asset.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse File;\nuse Lang;\nuse Config;\nuse System;\nuse Request;\nuse Cms\\Helpers\\File as FileHelper;\nuse October\\Rain\\Extension\\Extendable;\nuse ApplicationException;\nuse ValidationException;\nuse DirectoryIterator;\n\n/**\n * Asset for CMS asset files\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Asset extends Extendable\n{\n    /**\n     * @var \\Cms\\Classes\\Theme A reference to the CMS theme containing the object.\n     */\n    protected $theme;\n\n    /**\n     * @var string dirName for the container name inside the theme\n     */\n    protected $dirName = 'assets';\n\n    /**\n     * @var string fileName specifies the file name corresponding the CMS object\n     */\n    public $fileName;\n\n    /**\n     * @var string Specifies the file name, the CMS object was loaded from.\n     */\n    protected $originalFileName;\n\n    /**\n     * @var string Last modified time.\n     */\n    public $mtime;\n\n    /**\n     * @var string The entire file content.\n     */\n    public $content;\n\n    /**\n     * @var array fillable attributes that are mass assignable\n     */\n    protected $fillable = [\n        'fileName',\n        'content'\n    ];\n\n    /**\n     * @var array allowedExtensions for template files\n     */\n    protected $allowedExtensions = [];\n\n    /**\n     * @var bool exists indicates if the model exists.\n     */\n    public $exists = false;\n\n    /**\n     * __construct creates an instance of the object and associates it with a CMS theme\n     */\n    public function __construct(Theme $theme)\n    {\n        $this->theme = $theme;\n\n        $this->allowedExtensions = self::getEditableExtensions();\n\n        parent::__construct();\n    }\n\n    /**\n     * load the object from a file\n     * This method is used in the CMS back-end. It doesn't use any caching.\n     * @param \\Cms\\Classes\\Theme $theme Specifies the theme the object belongs to.\n     * @param string $fileName Specifies the file name, with the extension.\n     * The file name can contain only alphanumeric symbols, dashes and dots.\n     * @return mixed Returns a CMS object instance or null if the object wasn't found.\n     */\n    public static function load($theme, $fileName)\n    {\n        return (new static($theme))->find($fileName);\n    }\n\n    /**\n     * listInTheme\n     */\n    public static function listInTheme($theme, array $options = [])\n    {\n        return static::inTheme($theme)->get($options);\n    }\n\n    /**\n     * get all assets in a theme and uses simple objects\n     *\n     * Available options:\n     * - recursive: search subfolders and place in 'assets' key\n     * - flatten: produce a flat array instead of a recursive array\n     * - filterPath: only include within an inner path\n     * - filterFiles: only include files\n     * - filterFolders: only include folders\n     * - filterEditable: only show editable assets\n     */\n    public function get(array $options = []): array\n    {\n        extract(array_merge([\n            'recursive' => true,\n            'flatten' => false,\n            'filterPath' => '',\n            'filterFiles' => false,\n            'filterFolders' => false,\n            'filterEditable' => false,\n        ], $options));\n\n        $assets = [];\n\n        $pathSuffix = $filterPath ? '/'.$filterPath : '';\n        $path = $this->theme->getPath().'/'.$this->dirName.$pathSuffix;\n        $files = $this->getInternal($path, $this->theme);\n\n        // Splice in assets of parent theme\n        if ($parentTheme = $this->theme->getParentTheme()) {\n            $parentPath = $parentTheme->getPath().'/'.$this->dirName.$pathSuffix;\n            $files = array_merge($files, $this->getInternal($parentPath, $parentTheme));\n        }\n\n        foreach ($files as $asset) {\n            if ($recursive && $asset['isFolder'] && $asset['filename']) {\n                $newFilter = $pathSuffix ? $pathSuffix.'/'.$asset['filename'] : $asset['filename'];\n\n                if ($flatten) {\n                    $assets = array_merge($assets, $this->get(['filterPath' => $newFilter] + $options));\n                }\n                else {\n                    $asset['assets'] = $this->get(['filterPath' => $newFilter] + $options);\n                }\n            }\n\n            if ($filterFolders && !$asset['isFolder']) {\n                continue;\n            }\n\n            if ($filterEditable && !$asset['isEditable']) {\n                continue;\n            }\n\n            if ($filterFiles && $asset['isFolder']) {\n                continue;\n            }\n\n            $assets[] = $asset;\n        }\n\n        return collect($assets)->keyBy('path')->all();\n    }\n\n    /**\n     * getInternal helps the get method\n     */\n    protected function getInternal(string $path, Theme $theme): array\n    {\n        if (!file_exists($path)) {\n            return [];\n        }\n\n        $result = [];\n        $iterator = new DirectoryIterator($path);\n        $editableAssetTypes = Asset::getEditableExtensions();\n\n        foreach ($iterator as $fileInfo) {\n            $fileName = $fileInfo->getFileName();\n            if (substr($fileName, 0, 1) === '.') {\n                continue;\n            }\n\n            if (!$fileInfo->isDir() && !$fileInfo->isFile()) {\n                continue;\n            }\n\n            $fileName = $fileInfo->getFileName();\n            $isFolder = $fileInfo->isDir();\n            $filePath = $this->getRelativePath($fileInfo->getPathname(), $theme);\n            $isEditable = in_array(strtolower($fileInfo->getExtension()), $editableAssetTypes);\n\n            $asset = [\n                'filename' => $fileName,\n                'isFolder' => $isFolder ? 1 : 0,\n                'isEditable' => $isEditable,\n                'path' => ltrim(File::normalizePath($filePath), '/')\n            ];\n\n            $result[] = $asset;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getRelativePath returns path relative to the theme asset directory\n     */\n    protected function getRelativePath(string $path, Theme $theme): string\n    {\n        $prefix = $theme->getPath().'/'.$this->dirName;\n\n        if (substr($path, 0, strlen($prefix)) === $prefix) {\n            $path = substr($path, strlen($prefix));\n        }\n\n        return $path;\n    }\n\n    /**\n     * inTheme prepares the theme datasource for the model.\n     */\n    public static function inTheme($theme): Asset\n    {\n        if (is_string($theme)) {\n            $theme = Theme::load($theme);\n        }\n\n        return new static($theme);\n    }\n\n    /**\n     * find a single template by its file name.\n     */\n    public function find(string $fileName)\n    {\n        $filePath = $this->getFilePath($fileName);\n\n        $foundTheme = $this->theme;\n\n        if (!File::isFile($filePath)) {\n            // Look at parent\n            if ($parentTheme = $this->theme->getParentTheme()) {\n                $foundTheme = $parentTheme;\n                $filePath = $parentTheme->getPath().'/'.$this->dirName.'/'.$fileName;\n\n                if (!File::isFile($filePath)) {\n                    return null;\n                }\n            }\n            else {\n                return null;\n            }\n        }\n\n        if (!FileHelper::validateInTheme($foundTheme, $filePath)) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.invalid_file', [\n                    'name' => $fileName\n                ])\n            ]);\n        }\n\n        if (($content = @File::get($filePath)) === false) {\n            return null;\n        }\n\n        $this->fileName = $fileName;\n        $this->originalFileName = $fileName;\n        $this->mtime = File::lastModified($filePath);\n        $this->content = $content;\n        $this->exists = true;\n\n        return $this;\n    }\n\n    /**\n     * Sets the object attributes.\n     * @param array $attributes A list of attributes to set.\n     */\n    public function fill(array $attributes)\n    {\n        foreach ($attributes as $key => $value) {\n            if (!in_array($key, $this->fillable)) {\n                throw new ApplicationException(Lang::get(\n                    'cms::lang.cms_object.invalid_property',\n                    ['name' => $key]\n                ));\n            }\n\n            $this->$key = $value;\n        }\n    }\n\n    /**\n     * save the object to the disk\n     */\n    public function save()\n    {\n        $this->validateFileName();\n\n        $fullPath = $this->getFilePath();\n\n        if (File::isFile($fullPath) && $this->originalFileName !== $this->fileName) {\n            throw new ApplicationException(Lang::get(\n                'cms::lang.cms_object.file_already_exists',\n                ['name'=>$this->fileName]\n            ));\n        }\n\n        $dirPath = $this->theme->getPath().'/'.$this->dirName;\n        if (!file_exists($dirPath) || !is_dir($dirPath)) {\n            if (!File::makeDirectory($dirPath, 0755, true, true)) {\n                throw new ApplicationException(Lang::get(\n                    'cms::lang.cms_object.error_creating_directory',\n                    ['name'=>$dirPath]\n                ));\n            }\n        }\n\n        if (($pos = strpos($this->fileName, '/')) !== false) {\n            $dirPath = dirname($fullPath);\n\n            if (!is_dir($dirPath) && !File::makeDirectory($dirPath, 0755, true, true)) {\n                throw new ApplicationException(Lang::get(\n                    'cms::lang.cms_object.error_creating_directory',\n                    ['name'=>$dirPath]\n                ));\n            }\n        }\n\n        $newFullPath = $fullPath;\n        if (@File::put($fullPath, $this->content) === false) {\n            throw new ApplicationException(Lang::get(\n                'cms::lang.cms_object.error_saving',\n                ['name'=>$this->fileName]\n            ));\n        }\n\n        if (strlen($this->originalFileName) && $this->originalFileName !== $this->fileName) {\n            $fullPath = $this->getFilePath($this->originalFileName);\n\n            if (File::isFile($fullPath)) {\n                @unlink($fullPath);\n            }\n        }\n\n        clearstatcache();\n\n        $this->mtime = @File::lastModified($newFullPath);\n        $this->originalFileName = $this->fileName;\n        $this->exists = true;\n    }\n\n    /**\n     * delete the object from disk\n     */\n    public function delete()\n    {\n        $fileName = Request::input('fileName');\n        $fullPath = $this->getFilePath($fileName);\n\n        $this->validateFileName($fileName);\n\n        if (!FileHelper::validateInTheme($this->theme, $fullPath)) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.invalid_file', [\n                    'name' => $fileName\n                ])\n            ]);\n        }\n\n        if (File::exists($fullPath)) {\n            if (!@File::delete($fullPath)) {\n                throw new ApplicationException(Lang::get(\n                    'cms::lang.asset.error_deleting_file',\n                    ['name' => $fileName]\n                ));\n            }\n        }\n    }\n\n    /**\n     * validateFileName supplied with extension and path.\n     * @param string $fileName\n     */\n    protected function validateFileName($fileName = null)\n    {\n        if ($fileName === null) {\n            $fileName = $this->fileName;\n        }\n\n        $fileName = trim($fileName);\n\n        if (!strlen($fileName)) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.file_name_required', [\n                    'allowed' => implode(', ', $this->allowedExtensions),\n                    'invalid' => pathinfo($fileName, PATHINFO_EXTENSION)\n                ])\n            ]);\n        }\n\n        if (!FileHelper::validateExtension($fileName, $this->allowedExtensions, false)) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.invalid_file_extension', [\n                    'allowed' => implode(', ', $this->allowedExtensions),\n                    'invalid' => pathinfo($fileName, PATHINFO_EXTENSION)\n                ])\n            ]);\n        }\n\n        if (!FileHelper::validatePath($fileName, null)) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.invalid_file', [\n                    'name' => $fileName\n                ])\n            ]);\n        }\n    }\n\n    /**\n     * validate object\n     */\n    public function validate()\n    {\n        $this->validateFileName();\n    }\n\n    /**\n     * getFileName\n     * @return string\n     */\n    public function getFileName()\n    {\n        return $this->fileName;\n    }\n\n    /**\n     * getFilePath returns the absolute file path of an asset\n     */\n    public function getFilePath(?string $fileName = null): string\n    {\n        if ($fileName === null) {\n            $fileName = $this->fileName;\n        }\n\n        return $this->theme->getPath().'/'.$this->dirName.'/'.$fileName;\n    }\n\n    /**\n     * getEditableExtensions returns a list of editable asset extensions\n     * The list can be overridden with the cms.editable_asset_types configuration option.\n     * @return array\n     */\n    public static function getEditableExtensions()\n    {\n        $defaultTypes =  ['css', 'js', 'less', 'sass', 'scss'];\n\n        $configTypes = Config::get('cms.editable_asset_types');\n        if ($configTypes) {\n            $defaultTypes = $configTypes;\n        }\n\n        if (System::checkSafeMode()) {\n            $defaultTypes = array_diff($defaultTypes, ['less', 'sass', 'scss']);\n        }\n\n        return array_values($defaultTypes);\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/CmsCompoundObject.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Ini;\nuse Lang;\nuse Cache;\nuse Config;\nuse System;\nuse Cms\\Twig\\Loader as TwigLoader;\nuse Cms\\Twig\\DebugExtension;\nuse Cms\\Twig\\Extension as CmsTwigExtension;\nuse Cms\\Components\\ViewBag;\nuse System\\Twig\\Extension as SystemTwigExtension;\nuse October\\Rain\\Halcyon\\Processors\\SectionParser;\nuse Twig\\Source as TwigSource;\nuse Twig\\Environment as TwigEnvironment;\nuse ApplicationException;\n\n/**\n * CmsCompoundObject base class for CMS objects that have multiple sections - pages, partials and layouts.\n * The class implements functionality for the compound object file parsing. It also provides a way\n * to access parameters defined in the INI settings section as the object properties.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsCompoundObject extends CmsObject\n{\n    /**\n     * @var array components defined in the template file\n     */\n    public $components = [];\n\n    /**\n     * @var array settings defined in the template file. Not to be confused\n     * with the attribute called settings. In this array, components are bumped\n     * to their own array inside the 'components' key.\n     */\n    public $settings = [\n        'components' => []\n    ];\n\n    /**\n     * @var array viewBag contains the view bag properties.\n     * This property is used by the page editor internally.\n     */\n    public $viewBag = [];\n\n    /**\n     * @var array fillable attributes that are mass assignable.\n     */\n    protected $fillable = [\n        'markup',\n        'settings',\n        'code'\n    ];\n\n    /**\n     * @var array passthru methods that should be returned from the collection of all objects.\n     */\n    protected $passthru = [\n        'lists',\n        'pluck',\n        'where',\n        'sortBy',\n        'whereComponent',\n        'withComponent'\n    ];\n\n    /**\n     * @var bool isCompoundObject for models that support code and settings sections.\n     */\n    protected $isCompoundObject = true;\n\n    /**\n     * @var array|null objectComponentPropertyMap cache for component properties.\n     */\n    protected static $objectComponentPropertyMap;\n\n    /**\n     * @var mixed viewBagCache store for the getViewBag method.\n     */\n    protected $viewBagCache = false;\n\n    /**\n     * afterFetch event\n     */\n    public function afterFetch()\n    {\n        $this->parseComponentSettings();\n        $this->validateSettings();\n        $this->parseSettings();\n    }\n\n    /**\n     * beforeSave event\n     */\n    public function beforeSave()\n    {\n        $this->checkSafeMode();\n    }\n\n    /**\n     * newCollection creates a new Collection instance.\n     * @return \\October\\Rain\\Halcyon\\Collection\n     */\n    public function newCollection(array $models = [])\n    {\n        return new CmsObjectCollection($models);\n    }\n\n    /**\n     * toArray returns an array representation of the object\n     * @return array\n     */\n    public function toArray()\n    {\n        $result = [];\n        foreach ($this->fillable as $property) {\n            $result[$property] = $this->$property;\n        }\n\n        return $result;\n    }\n\n    /**\n     * validateSettings if the model is loaded with an invalid INI section, the invalid content\n     * will be passed as a special attribute. Look for it, then locate the failure reason.\n     * @return void\n     */\n    protected function validateSettings()\n    {\n        if (isset($this->attributes[SectionParser::ERROR_INI])) {\n            CmsException::mask($this, 200);\n            Ini::parse($this->attributes[SectionParser::ERROR_INI]);\n            CmsException::unmask();\n        }\n    }\n\n    /**\n     * parseSettings array.\n     * Child classes can override this method in order to update the content\n     * of the $settings property after the object is loaded from a file.\n     * @return void\n     */\n    protected function parseSettings()\n    {\n        $this->fillViewBagArray();\n    }\n\n    /**\n     * checkSafeMode checks if safe mode is enabled by config, and the code\n     * attribute is modified and populated. If so an exception is thrown.\n     * @return void\n     */\n    protected function checkSafeMode()\n    {\n        $safeMode = System::checkSafeMode();\n\n        if ($safeMode && $this->isDirty('code') && strlen(trim($this->code))) {\n            throw new ApplicationException(Lang::get('cms::lang.cms_object.safe_mode_enabled'));\n        }\n    }\n\n    //\n    // Components\n    //\n\n    /**\n     * runComponents defined in the settings, this process halts\n     * if a component returns a value.\n     */\n    public function runComponents()\n    {\n        foreach ($this->components as $component) {\n            if ($result = $component->runLifeCycle()) {\n                return $result;\n            }\n        }\n    }\n\n    /**\n     * parseComponentSettings parses component sections\n     * Replace the multiple component sections with a single \"components\"\n     * element in the $settings property.\n     * @return void\n     */\n    protected function parseComponentSettings()\n    {\n        $this->settings = $this->getSettingsAttribute();\n\n        $components = [];\n        foreach ($this->settings as $setting => $value) {\n            if (!is_array($value)) {\n                continue;\n            }\n\n            $components[$setting] = $value;\n            unset($this->settings[$setting]);\n        }\n\n        $this->settings['components'] = $components;\n    }\n\n    /**\n     * getComponent returns a component by its name.\n     * This method is used only in the back-end and for internal system needs when\n     * the standard way to access components is not an option.\n     * @param string $componentName Specifies the component name.\n     * @return \\Cms\\Classes\\ComponentBase Returns the component instance or null.\n     */\n    public function getComponent($componentName)\n    {\n        if (!($componentSection = $this->hasComponent($componentName))) {\n            return null;\n        }\n\n        return ComponentManager::instance()->makeComponent(\n            $componentName,\n            null,\n            $this->settings['components'][$componentSection]\n        );\n    }\n\n    /**\n     * hasComponent checks if the object has a component with the specified name. Returns\n     * false or the full component name used on the page (it could include the alias).\n     * @param string $componentName Specifies the component name.\n     * @return string|bool\n     */\n    public function hasComponent($componentName)\n    {\n        $componentManager = ComponentManager::instance();\n        $componentName = $componentManager->resolve($componentName) ?: $componentName;\n\n        foreach ($this->settings['components'] as $sectionName => $values) {\n            $result = $sectionName;\n\n            if ($sectionName === $componentName) {\n                return $result;\n            }\n\n            $parts = explode(' ', $sectionName);\n            if (count($parts) > 1) {\n                $sectionName = trim($parts[0]);\n\n                if ($sectionName === $componentName) {\n                    return $result;\n                }\n            }\n\n            $sectionName = $componentManager->resolve($sectionName);\n            if ($sectionName === $componentName) {\n                return $result;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * getComponentProperties returns component property names and values.\n     * This method implements caching and can be used in the run-time on the front-end.\n     * @param string $componentName Specifies the component name.\n     * @return array Returns an associative array with property names in the keys and property values in the values.\n     */\n    public function getComponentProperties($componentName)\n    {\n        $key = self::makeComponentPropertyCacheKey($this->theme);\n\n        if (self::$objectComponentPropertyMap !== null) {\n            $objectComponentMap = self::$objectComponentPropertyMap;\n        }\n        else {\n            $cached = Cache::memo()->get($key, false);\n            $unserialized = $cached ? @unserialize(@base64_decode($cached)) : false;\n            $objectComponentMap = $unserialized ?: [];\n            if ($objectComponentMap) {\n                self::$objectComponentPropertyMap = $objectComponentMap;\n            }\n        }\n\n        $objectCode = $this->getBaseFileName();\n\n        if (array_key_exists($objectCode, $objectComponentMap)) {\n            if (array_key_exists($componentName, $objectComponentMap[$objectCode])) {\n                return $objectComponentMap[$objectCode][$componentName];\n            }\n\n            return [];\n        }\n\n        if (!isset($this->settings['components'])) {\n            $objectComponentMap[$objectCode] = [];\n        }\n        else {\n            foreach ($this->settings['components'] as $name => $settings) {\n                $nameParts = explode(' ', $name);\n                if (count($nameParts) > 1) {\n                    $name = trim($nameParts[0]);\n                }\n\n                $component = $this->getComponent($name);\n                if (!$component) {\n                    continue;\n                }\n\n                $componentProperties = [];\n                $propertyDefinitions = $component->defineProperties();\n                foreach ($propertyDefinitions as $propertyName => $propertyInfo) {\n                    $componentProperties[$propertyName] = $component->property($propertyName);\n                }\n\n                $objectComponentMap[$objectCode][$name] = $componentProperties;\n            }\n        }\n\n        self::$objectComponentPropertyMap = $objectComponentMap;\n\n        $expiresAt = now()->addMinutes(Config::get('cms.template_cache_ttl', 1440));\n        Cache::put($key, base64_encode(serialize($objectComponentMap)), $expiresAt);\n\n        if (array_key_exists($componentName, $objectComponentMap[$objectCode])) {\n            return $objectComponentMap[$objectCode][$componentName];\n        }\n\n        return [];\n    }\n\n    /**\n     * makeComponentPropertyCacheKey\n     */\n    protected static function makeComponentPropertyCacheKey($theme): string\n    {\n        return 'cms_component_props_' . md5($theme->getPath());\n    }\n\n    /**\n     * clearCache clears the object cache.\n     * @param \\Cms\\Classes\\Theme $theme Specifies a parent theme.\n     * @return void\n     */\n    public static function clearCache($theme)\n    {\n        Cache::forget(self::makeComponentPropertyCacheKey($theme));\n    }\n\n    //\n    // View Bag\n    //\n\n    /**\n     * getViewBag returns the configured view bag component.\n     * This method is used only in the back-end and for internal system needs when\n     * the standard way to access components is not an option.\n     * @return \\Cms\\Components\\ViewBag Returns the view bag component instance.\n     */\n    public function getViewBag()\n    {\n        if ($this->viewBagCache !== false) {\n            return $this->viewBagCache;\n        }\n\n        $componentName = 'viewBag';\n\n        if (!isset($this->settings['components'][$componentName])) {\n            $viewBag = new ViewBag(null, []);\n            $viewBag->name = $componentName;\n\n            return $this->viewBagCache = $viewBag;\n        }\n\n        return $this->viewBagCache = $this->getComponent($componentName);\n    }\n\n    /**\n     * fillViewBagArray copies view bag properties to the view bag array.\n     * This is required for the back-end editors.\n     * @return void\n     */\n    protected function fillViewBagArray()\n    {\n        $viewBag = $this->getViewBag();\n        foreach ($viewBag->getProperties() as $name => $value) {\n            $this->viewBag[$name] = $value;\n        }\n\n        $this->fireEvent('cmsObject.fillViewBagArray');\n    }\n\n    //\n    // Twig\n    //\n\n    /**\n     * getTwigContent returns the Twig content string\n     * @return string\n     */\n    public function getTwigContent()\n    {\n        return $this->markup;\n    }\n\n    /**\n     * getTwigNodeTree returns Twig node tree generated from the object's markup.\n     * This method is used by the system internally and shouldn't\n     * participate in the front-end request processing.\n     * @link http://twig.sensiolabs.org/doc/internals.html Twig internals\n     * @param mixed $markup Specifies the markup content.\n     * Use FALSE to load the content from the markup section.\n     * @return Twig\\Node\\ModuleNode A node tree\n     */\n    public function getTwigNodeTree($markup = false)\n    {\n        $loader = new TwigLoader;\n        $twig = new TwigEnvironment($loader, []);\n\n        CmsTwigExtension::addExtensionToTwig($twig);\n        SystemTwigExtension::addExtensionToTwig($twig);\n        DebugExtension::addExtensionToTwig($twig);\n\n        $stream = $twig->tokenize(new TwigSource($markup === false ? $this->markup : $markup, 'getTwigNodeTree'));\n        return $twig->parse($stream);\n    }\n\n    //\n    // Magic\n    //\n\n    /**\n     * __get functionality for visible properties defined in\n     * the settings section or view bag array.\n     */\n    public function __get($name)\n    {\n        if (is_array($this->settings) && array_key_exists($name, $this->settings)) {\n            return $this->settings[$name];\n        }\n\n        if (is_array($this->viewBag) && array_key_exists($name, $this->viewBag)) {\n            return $this->viewBag[$name];\n        }\n\n        return parent::__get($name);\n    }\n\n    /**\n     * __set dynamically sets attributes on the model.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return void\n     */\n    public function __set($key, $value)\n    {\n        parent::__set($key, $value);\n\n        if (array_key_exists($key, $this->settings)) {\n            $this->settings[$key] = $this->attributes[$key];\n        }\n    }\n\n    /**\n     * __isset determines if an attribute exists on the object.\n     *\n     * @param  string  $key\n     * @return bool\n     */\n    public function __isset($key)\n    {\n        if (parent::__isset($key) === true) {\n            return true;\n        }\n\n        if (isset($this->viewBag[$key]) === true) {\n            return true;\n        }\n\n        return isset($this->settings[$key]);\n    }\n\n    /**\n     * __call dynamically handles calls into the query instance.\n     *\n     * @param  string  $method\n     * @param  array   $parameters\n     * @return mixed\n     */\n    public function __call($method, $parameters)\n    {\n        if (in_array($method, $this->passthru)) {\n            $collection = $this->get();\n            return call_user_func_array([$collection, $method], $parameters);\n        }\n\n        return parent::__call($method, $parameters);\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/CmsController.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse App;\nuse Cms;\nuse Site;\nuse Config;\nuse Request;\nuse Redirect;\nuse Illuminate\\Routing\\Controller as ControllerBase;\nuse Closure;\n\n/**\n * CmsController is the master controller for all front-end pages.\n * All requests that have not been picked up already by the router will end up here,\n * then the URL is passed to the front-end controller for processing.\n *\n * @see Cms\\Classes\\Controller Front-end controller class\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsController extends ControllerBase\n{\n    use \\October\\Rain\\Extension\\ExtendableTrait;\n\n    /**\n     * @var array implement behaviors in this controller.\n     */\n    public $implement;\n\n    /**\n     * __construct a new CmsController instance.\n     */\n    public function __construct()\n    {\n        $this->extendableConstruct();\n    }\n\n    /**\n     * extend this object properties upon construction.\n     * @param Closure $callback\n     */\n    public static function extend(Closure $callback)\n    {\n        self::extendableExtendCallback($callback);\n    }\n\n    /**\n     * run finds and serves the request using the primary controller. Specifies the\n     * requested page URL. If the parameter is omitted, the current URL used.\n     * Returns the processed page content.\n     * @param string $url\n     * @return string\n     */\n    public function run($url = '/')\n    {\n        // Check configuration for bypass exceptions\n        if (Cms::urlHasException((string) $url, 'site')) {\n            return App::make(Controller::class)->run($url);\n        }\n\n        // Locate site\n        $site = $this->findSite(Request::root(), $url);\n\n        // Remove prefix, if applicable\n        $uri = $this->parseUri($site, $url);\n\n        // Enforce prefix, if applicable\n        if ($redirect = $this->redirectWithoutPrefix($site, $url, $uri)) {\n            return $redirect;\n        }\n\n        return App::make(Controller::class)->run($uri);\n    }\n\n    /**\n     * findSite locates the site based on the current URL\n     */\n    protected function findSite(string $rootUrl, string $url)\n    {\n        $site = Site::getSiteFromRequest($rootUrl, $url);\n\n        if (!$site || !$site->is_enabled) {\n            abort(404);\n        }\n\n        Site::applyActiveSite($site);\n\n        return $site;\n    }\n\n    /**\n     * parseUri removes the prefix from a URL\n     */\n    protected function parseUri($site, string $url): string\n    {\n        return $site ? $site->removeRoutePrefix($url) : $url;\n    }\n\n    /**\n     * redirectWithoutPrefix redirects if a prefix is enforced\n     */\n    protected function redirectWithoutPrefix($site, string $originalUrl, string $proposedUrl)\n    {\n        // Only a fallback site should redirect\n        if (!$site || !$site->is_prefixed || !$site->isFallbackMatch) {\n            return null;\n        }\n\n        // A prefix has been found and removed already\n        if ($originalUrl !== '/' && $originalUrl !== $proposedUrl) {\n            return null;\n        }\n\n        // Apply redirect policy\n        $redirectUrl = $this->determineRedirectFromPolicy($site, $originalUrl);\n        if (!$redirectUrl) {\n            abort(404);\n        }\n\n        // Preserve query string\n        if ($queryString = Request::getQueryString()) {\n            $redirectUrl .= '?'.$queryString;\n        }\n\n        // No prefix detected, attach one with redirect\n        return Redirect::to($redirectUrl, 301);\n    }\n\n    /**\n     * determineRedirectFromPolicy returns a site based on the configuration\n     */\n    protected function determineRedirectFromPolicy($originalSite, $originalUrl)\n    {\n        $policy = Config::get('cms.redirect_policy', 'detect');\n\n        // Detect site from browser locale (same site)\n        if ($policy === 'detect') {\n            return Site::getSiteFromBrowser(\n                (string) Request::server('HTTP_ACCEPT_LANGUAGE'),\n                $originalSite->group_id\n            )?->attachRoutePrefix($originalUrl);\n        }\n\n        // Use primary site\n        if ($policy === 'primary') {\n            return Site::getPrimarySite()?->base_url;\n        }\n\n        // Use a specified site ID\n        return Site::getSiteFromId($policy)?->base_url;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/CmsException.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse File;\nuse Twig\\Error\\Error as TwigError;\nuse October\\Rain\\Exception\\ApplicationException;\nuse October\\Rain\\Halcyon\\Processors\\SectionParser;\nuse ErrorException;\nuse CompileError;\nuse Throwable;\n\n/**\n * CmsException handles CMS related errors. Allows the masking of other exception types which\n * uses actual source CMS files -- instead of cached files -- for their error content.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsException extends ApplicationException\n{\n    /**\n     * @var \\Cms\\Contracts\\CmsObject compoundObject used for masking errors.\n     */\n    protected $cmsObject;\n\n    /**\n     * @var array errorCodes for each error distinction.\n     */\n    protected static $errorCodes = [\n        100 => 'General',\n        200 => 'INI Settings',\n        300 => 'PHP Content',\n        400 => 'Twig Template'\n    ];\n\n    /**\n     * __construct the CMS exception object.\n     * @param mixed $message The message to display as a string, or a CmsCompoundObject that is used\n     * for using this exception as a mask for another exception type.\n     * @param int $code Error code to specify the exception type:\n     * Error 100: A general exception.\n     * Error 200: Mask the exception as INI content.\n     * Error 300: Mask the exception as PHP content.\n     * Error 400: Mask the exception as Twig content.\n     * @param Throwable $previous Previous exception.\n     */\n    public function __construct($message = null, $code = 100, ?Throwable  $previous = null)\n    {\n        if ($message instanceof \\Cms\\Contracts\\CmsObject) {\n            $this->cmsObject = $message;\n            $message = '';\n        }\n\n        if (isset(static::$errorCodes[$code])) {\n            $this->errorType = static::$errorCodes[$code];\n        }\n\n        parent::__construct($message, $code, $previous);\n    }\n\n    /**\n     * processCompoundObject checks some conditions to confirm error has actually occurred\n     * due to the CMS template code, not some external code. If the error\n     * has occurred in external code, the function will return false. Otherwise return\n     * true and modify the exception by overriding it's content, line and message values\n     * to be accurate against a CMS object properties.\n     * @param Throwable $exception The exception to modify.\n     * @return bool\n     */\n    public function processCompoundObject(Throwable $exception)\n    {\n        switch ($this->code) {\n            case 200:\n                $result = $this->processIni($exception);\n                break;\n\n            case 300:\n                $result = $this->processPhp($exception);\n                break;\n\n            case 400:\n                $result = $this->processTwig($exception);\n                break;\n        }\n        if ($result !== false) {\n            $this->file = $this->cmsObject->getFilePath();\n\n            if (File::isFile($this->file) && is_readable($this->file)) {\n                $this->fileContent = @file($this->file);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * processIni overrides properties of an exception specific to the INI section\n     * of a CMS object.\n     * @param Throwable $exception The exception to modify.\n     * @return bool\n     */\n    protected function processIni(Throwable $exception)\n    {\n        $message = $exception->getMessage();\n\n        // Expecting: syntax error, unexpected '!' in Unknown on line 4\n        if (!starts_with($message, 'syntax error')) {\n            return false;\n        }\n        if (strpos($message, 'Unknown') === false) {\n            return false;\n        }\n        if (strpos($exception->getFile(), 'Ini.php') === false) {\n            return false;\n        }\n\n        // Line number from parse_ini_string() error.\n        // The last word should contain the line number.\n        $parts = explode(' ', $message);\n        $line = array_pop($parts);\n        $this->line = (int) $line;\n\n        // Find where the ini settings section begins\n        $offsetArray = SectionParser::parseOffset($this->cmsObject->getContent());\n        $this->line += $offsetArray['settings'];\n\n        $this->message = $message;\n\n        // Account for line 0\n        $this->line--;\n\n        return true;\n    }\n\n    /**\n     * processPhp override properties of an exception specific to the PHP section\n     * of a CMS object.\n     * @param Throwable $exception The exception to modify.\n     * @return bool\n     */\n    protected function processPhp(Throwable $exception)\n    {\n        // Default offset for the php namespace and bracket tag\n        $lineOffset = -2;\n\n        // Fatal or Compiler Error\n        if ($exception instanceof ErrorException || $exception instanceof CompileError) {\n            $check = false;\n            $lineOffset++;\n\n            // Expected: */modules/cms/classes/CodeParser.php(165) : eval()'d code line 7\n            if (strpos($exception->getFile(), 'CodeParser.php')) {\n                $check = true;\n            }\n\n            // Expected: */storage/cms/cache/39/05/home.htm.php\n            if (strpos($exception->getFile(), $this->cmsObject->getFileName() . '.php')) {\n                $check = true;\n            }\n\n            if (!$check) {\n                return false;\n            }\n        }\n        // Errors occurring the PHP code base class (Cms\\Classes\\CodeBase)\n        else {\n            $trace = $exception->getTrace();\n            if ($class = $trace[0]['class'] ?? null) {\n                if (!is_subclass_of($class, CodeBase::class)) {\n                    return false;\n                }\n            }\n        }\n\n        // Fetch message and calculate line number\n        $this->message = $exception->getMessage();\n        $this->line = $exception->getLine() + $lineOffset;\n\n        // Find where the php code section begins\n        $offsetArray = SectionParser::parseOffset($this->cmsObject->getContent());\n        $this->line += $offsetArray['code'];\n\n        // Account for line 0\n        $this->line--;\n\n        return true;\n    }\n\n    /**\n     * processTwig overrides properties of an exception specific to the Twig section\n     * of a CMS object.\n     * @param Throwable $exception The exception to modify.\n     * @return bool\n     */\n    protected function processTwig(Throwable $exception)\n    {\n        // Must be a Twig related exception\n        if (!$exception instanceof TwigError) {\n            return false;\n        }\n\n        $this->message = $exception->getRawMessage();\n        $this->line = $exception->getTemplateLine();\n\n        // Find where the twig markup section begins\n        $offsetArray = SectionParser::parseOffset($this->cmsObject->getContent());\n        $this->line += $offsetArray['markup'];\n\n        // Account for line 0\n        $this->line--;\n\n        return true;\n    }\n\n    /**\n     * applyMask masks this exception with the details of the supplied. The error code for\n     * this exception object will determine how the supplied exception is used.\n     * Error 100: A general exception. Inherits \\System\\Classes\\ExceptionBase::applyMask()\n     * Error 200: Mask the exception as INI content.\n     * Error 300: Mask the exception as PHP content.\n     * Error 400: Mask the exception as Twig content.\n     * @param Throwable $exception The exception to modify.\n     * @return void\n     */\n    public function applyMask(Throwable $exception)\n    {\n        if ($this->code === 100 || $this->processCompoundObject($exception) === false) {\n            parent::applyMask($exception);\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/CmsObject.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse App;\nuse Lang;\nuse Event;\nuse October\\Rain\\Halcyon\\Model as HalcyonModel;\nuse Cms\\Contracts\\CmsObject as CmsObjectContract;\nuse ValidationException;\nuse Exception;\n\n/**\n * This is a base class for all CMS objects - content files, pages, partials and layouts.\n * The class implements basic operations with file-based templates.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsObject extends HalcyonModel implements CmsObjectContract\n{\n    use \\October\\Rain\\Halcyon\\Traits\\Validation;\n\n    /**\n     * @var array The rules to be applied to the data.\n     */\n    public $rules = [];\n\n    /**\n     * @var array The array of custom attribute names.\n     */\n    public $attributeNames = [];\n\n    /**\n     * @var array The array of custom error messages.\n     */\n    public $customMessages = [];\n\n    /**\n     * @var array The attributes that are mass assignable.\n     */\n    protected $fillable = [\n        'content'\n    ];\n\n    /**\n     * @var bool Model supports code and settings sections.\n     */\n    protected $isCompoundObject = false;\n\n    /**\n     * @var \\Cms\\Classes\\Theme A reference to the CMS theme containing the object.\n     */\n    protected $themeCache;\n\n    /**\n     * boot the model.\n     * @return void\n     */\n    protected static function boot()\n    {\n        parent::boot();\n        static::bootDefaultTheme();\n    }\n\n    /**\n     * bootDefaultTheme and all of the bootable traits on the model.\n     * @return void\n     */\n    protected static function bootDefaultTheme()\n    {\n        $resolver = static::getDatasourceResolver();\n        if ($resolver->getDefaultDatasource()) {\n            return;\n        }\n\n        $defaultTheme = App::runningInBackend()\n            ? Theme::getEditThemeCode()\n            : Theme::getActiveThemeCode();\n\n        Theme::load($defaultTheme);\n\n        $resolver->setDefaultDatasource($defaultTheme);\n    }\n\n    /**\n     * load the object from a file.\n     * This method is used in the CMS back-end. It doesn't use any caching.\n     * @param mixed $theme Specifies the theme the object belongs to.\n     * @param string $fileName Specifies the file name, with the extension.\n     * The file name can contain only alphanumeric symbols, dashes and dots.\n     * @return mixed Returns a CMS object instance or null if the object wasn't found.\n     */\n    public static function load($theme, $fileName)\n    {\n        try {\n            return static::inTheme($theme)->find($fileName);\n        }\n        catch (Exception $ex) {\n            static::throwHalcyonException($ex);\n        }\n    }\n\n    /**\n     * loadCached loads the object from a cache\n     * This method is used by the CMS in the runtime. If the cache is not found, it is created.\n     * @param \\Cms\\Classes\\Theme $theme Specifies the theme the object belongs to.\n     * @param string $fileName Specifies the file name, with the extension.\n     * @return mixed Returns a CMS object instance or null if the object wasn't found.\n     */\n    public static function loadCached($theme, $fileName)\n    {\n        try {\n            return CmsObjectCache::lookup(static::inTheme($theme), $fileName);\n        }\n        catch (Exception $ex) {\n            static::throwHalcyonException($ex);\n        }\n    }\n\n    /**\n     * listInTheme returns the list of objects in the specified theme.\n     * This method is used internally by the system.\n     * @param \\Cms\\Classes\\Theme $theme Specifies a parent theme.\n     * @param boolean $skipCache Indicates if objects should be reloaded from the disk bypassing the cache.\n     * @return Collection Returns a collection of CMS objects.\n     */\n    public static function listInTheme($theme, $skipCache = false)\n    {\n        $result = [];\n        $instance = static::inTheme($theme);\n\n        if ($skipCache) {\n            $result = $instance->get();\n        }\n        else {\n            $items = $instance->newQuery()->lists('fileName');\n\n            $loadedItems = [];\n            foreach ($items as $item) {\n                $loadedItems[] = static::loadCached($theme, $item);\n            }\n\n            $result = $instance->newCollection($loadedItems);\n        }\n\n        /**\n         * @event cms.object.listInTheme\n         * Provides opportunity to filter the items returned by a call to CmsObject::listInTheme()\n         *\n         * Parameters provided are `$cmsObject` (the object being listed) and `$objectList` (a collection of the CmsObjects being returned).\n         * > Note: The `$objectList` provided is an object reference to a CmsObjectCollection, to make changes you must use object modifying methods.\n         *\n         * Example usage (filters all pages except for the 404 page on the CMS Maintenance mode settings page):\n         *\n         *     // Extend only the Settings Controller\n         *     \\System\\Controllers\\Settings::extend(function ($controller) {\n         *         // Listen for the cms.object.listInTheme event\n         *         \\Event::listen('cms.object.listInTheme', function ($cmsObject, $objectList) {\n         *             // Get the current context of the Settings Manager to ensure we only affect what we need to affect\n         *             $context = \\System\\Classes\\SettingsManager::instance()->getContext();\n         *             if ($context->owner === 'october.cms' && $context->itemCode === 'maintenance_settings') {\n         *                 // Double check that this is a Page List that we're modifying\n         *                 if ($cmsObject instanceof \\Cms\\Classes\\Page) {\n         *                     // Perform filtering with an original-object modifying method as $objectList is passed by reference (being that it's an object)\n         *                     foreach ($objectList as $index => $page) {\n         *                         if ($page->url !== '/404') {\n         *                             $objectList->forget($index);\n         *                         }\n         *                     }\n         *                 }\n         *             }\n         *         });\n         *     });\n         */\n        Event::fire('cms.object.listInTheme', [$instance, $result]);\n\n        return $result;\n    }\n\n    /**\n     * inTheme prepares the theme datasource for the model.\n     * @param \\Cms\\Classes\\Theme $theme Specifies a parent theme.\n     * @return $this\n     */\n    public static function inTheme($theme)\n    {\n        if (is_string($theme)) {\n            $theme = Theme::load($theme);\n        }\n\n        return static::on($theme->getDirName());\n    }\n\n    /**\n     * save the object to the theme.\n     * @param  array  $options\n     * @return bool\n     */\n    public function save(?array $options = null)\n    {\n        try {\n            parent::save($options);\n        }\n        catch (Exception $ex) {\n            static::throwHalcyonException($ex);\n        }\n    }\n\n    /**\n     * Returns the CMS theme this object belongs to.\n     * @return \\Cms\\Classes\\Theme\n     */\n    public function getThemeAttribute()\n    {\n        if ($this->themeCache !== null) {\n            return $this->themeCache;\n        }\n\n        $themeName = $this->getDatasourceName()\n            ?: static::getDatasourceResolver()->getDefaultDatasource();\n\n        return $this->themeCache = Theme::load($themeName);\n    }\n\n    /**\n     * Returns the full path to the template file corresponding to this object.\n     * @param  string  $fileName\n     * @return string\n     */\n    public function getFilePath($fileName = null)\n    {\n        if ($fileName === null) {\n            $fileName = $this->fileName;\n        }\n\n        return $this->theme->getPath().'/'.$this->getObjectTypeDirName().'/'.$fileName;\n    }\n\n    /**\n     * Returns the file name.\n     * @return string\n     */\n    public function getFileName()\n    {\n        return $this->fileName;\n    }\n\n    /**\n     * Returns the file name without the extension.\n     * @return string\n     */\n    public function getBaseFileName()\n    {\n        $pos = strrpos($this->fileName, '.');\n        if ($pos === false) {\n            return $this->fileName;\n        }\n\n        return substr($this->fileName, 0, $pos);\n    }\n\n    /**\n     * Helper for {{ page.id }} or {{ layout.id }} twig vars\n     * Returns a unique string for this object.\n     * @return string\n     */\n    public function getId()\n    {\n        return str_replace('/', '-', $this->getBaseFileName());\n    }\n\n    /**\n     * Returns the file content.\n     * @return string\n     */\n    public function getContent()\n    {\n        return $this->content;\n    }\n\n    /**\n     * Returns the Twig content string.\n     * @return string\n     */\n    public function getTwigContent()\n    {\n        return $this->content;\n    }\n\n    /**\n     * Returns the key used by the Twig cache.\n     * @return string\n     */\n    public function getTwigCacheKey()\n    {\n        $key = $this->theme->getDirName().'/'.$this->getObjectTypeDirName().'/'.$this->fileName;\n\n        if ($event = $this->fireEvent('cmsObject.getTwigCacheKey', $key, true)) {\n            $key = $event;\n        }\n\n        return $key;\n    }\n\n    //\n    // Internals\n    //\n\n    /**\n     * Converts an exception type thrown by Halcyon to a native CMS exception.\n     * @param Exception $ex\n     */\n    protected static function throwHalcyonException(Exception $ex)\n    {\n        if ($ex instanceof \\October\\Rain\\Halcyon\\Exception\\MissingFileNameException) {\n            throw new ValidationException([\n                'fileName' => Lang::get('cms::lang.cms_object.file_name_required')\n            ]);\n        }\n        elseif ($ex instanceof \\October\\Rain\\Halcyon\\Exception\\InvalidExtensionException) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.invalid_file_extension', [\n                    'allowed' => implode(', ', $ex->getAllowedExtensions()),\n                    'invalid' => $ex->getInvalidExtension()\n                ])\n            ]);\n        }\n        elseif ($ex instanceof \\October\\Rain\\Halcyon\\Exception\\InvalidFileNameException) {\n            throw new ValidationException([\n               'fileName' => Lang::get('cms::lang.cms_object.invalid_file', ['name'=>$ex->getInvalidFileName()])\n            ]);\n        }\n        elseif ($ex instanceof \\October\\Rain\\Halcyon\\Exception\\InvalidDirectoryNameException) {\n            throw new ValidationException([\n               'fileName' => Lang::get('cms::lang.cms_object.invalid_file', ['name'=>$ex->getInvalidDirectoryName()])\n            ]);\n        }\n        elseif ($ex instanceof \\October\\Rain\\Halcyon\\Exception\\FileExistsException) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.file_already_exists', ['name' => $ex->getInvalidPath()])\n            ]);\n        }\n        elseif ($ex instanceof \\October\\Rain\\Halcyon\\Exception\\CreateDirectoryException) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.error_creating_directory', ['name' => $ex->getInvalidPath()])\n            ]);\n        }\n        elseif ($ex instanceof \\October\\Rain\\Halcyon\\Exception\\CreateFileException) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.error_saving', ['name' => $ex->getInvalidPath()])\n            ]);\n        }\n        else {\n            throw $ex;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/CmsObjectCache.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse App;\nuse Config;\n\n/**\n * CmsObjectCache provides a simple request-level cache for CMS objects\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsObjectCache\n{\n    /**\n     * @var array cache collection\n     */\n    protected static $cache = [];\n\n    /**\n     * lookup\n     */\n    public static function lookup($instance, $fileName)\n    {\n        $cacheKey = self::makeCacheKey($instance, $fileName);\n\n        if (self::has($cacheKey)) {\n            return self::get($cacheKey);\n        }\n\n        $result = $instance\n            ->remember(Config::get('cms.template_cache_ttl', 1440))\n            ->find($fileName)\n        ;\n\n        self::put($cacheKey, $result);\n\n        return $result;\n    }\n\n    /**\n     * has\n     */\n    protected static function has($cacheKey): bool\n    {\n        if (App::runningInConsole() || App::runningUnitTests()) {\n            return false;\n        }\n\n        return array_key_exists($cacheKey, static::$cache);\n    }\n\n    /**\n     * get\n     */\n    protected static function get($cacheKey): ?CmsObject\n    {\n        return static::$cache[$cacheKey];\n    }\n\n    /**\n     * put\n     */\n    protected static function put($cacheKey, ?CmsObject $obj)\n    {\n        static::$cache[$cacheKey] = $obj;\n    }\n\n    /**\n     * makeCacheKey makes a unique key for this object\n     */\n    protected static function makeCacheKey($instance, string $fileName): string\n    {\n        $instance->fileName = $fileName;\n\n        return 'cms_object_'.$instance->getTwigCacheKey();\n    }\n\n    /**\n     * flush\n     */\n    public static function flush()\n    {\n        static::$cache = [];\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/CmsObjectCollection.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse October\\Rain\\Support\\Collection as CollectionBase;\n\n/**\n * CmsObjectCollection represents a collection of Cms Objects\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsObjectCollection extends CollectionBase\n{\n    /**\n     * withComponent returns objects that use the supplied component\n     * @param  string|array $components\n     * @param null|callable $callback\n     * @return static\n     */\n    public function withComponent($components, $callback = null)\n    {\n        return $this->filter(function ($object) use ($components, $callback) {\n            $hasComponent = false;\n\n            foreach ((array) $components as $componentName) {\n                if (!$callback && $object->hasComponent($componentName)) {\n                    $hasComponent = true;\n                }\n\n                if ($callback && ($component = $object->getComponent($componentName))) {\n                    $hasComponent = call_user_func($callback, $component) ?: $hasComponent;\n                }\n            }\n\n            return $hasComponent;\n        });\n    }\n\n    /**\n     * where objects whose properties match the supplied value.\n     * @param string $property\n     * @param string $value\n     * @param bool $strict\n     * @return static\n     */\n    public function where($property, $value = null, $strict = null)\n    {\n        return $this->filter(function ($object) use ($property, $value, $strict) {\n            if (!array_key_exists($property, $object->settings)) {\n                return false;\n            }\n\n            return $strict\n                ? $object->settings[$property] === $value\n                : $object->settings[$property] == $value;\n        });\n    }\n\n    /**\n     * whereComponent objects whose component properties match the supplied value.\n     * @param mixed $components\n     * @param string $property\n     * @param string $value\n     * @param bool $strict\n     * @return static\n     */\n    public function whereComponent($components, $property, $value = null, $strict = false)\n    {\n        $properties = is_array($property) ? $property : [$property => $value];\n        $strictMode = (bool) (is_array($property) ? $value : $strict);\n\n        $checkFunc = function($settings) use ($properties, $strictMode) {\n            foreach ($properties as $property => $value) {\n                if (!array_key_exists($property, $settings)) {\n                    return false;\n                }\n\n                if ($strictMode && $settings[$property] !== $value) {\n                    return false;\n                }\n\n                if (!$strictMode && $settings[$property] != $value) {\n                    return false;\n                }\n            }\n\n            return true;\n        };\n\n        return $this->filter(function($object) use ($components, $checkFunc) {\n            $hasComponent = false;\n\n            foreach ((array) $components as $componentName) {\n                if (!$componentAlias = $object->hasComponent($componentName)) {\n                    continue;\n                }\n\n                $componentSettings = array_get($object->settings, 'components', []);\n                if (!array_key_exists($componentAlias, $componentSettings)) {\n                    continue;\n                }\n\n                $settings = $componentSettings[$componentAlias];\n                if ($checkFunc($settings)) {\n                    $hasComponent = true;\n                }\n            }\n\n            return $hasComponent;\n        });\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/CodeBase.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse ArrayAccess;\nuse October\\Rain\\Extension\\Extendable;\n\n/**\n * CodeBase is a parent class for PHP classes created for layout and page code sections.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CodeBase extends Extendable implements ArrayAccess\n{\n    /**\n     * @var \\Cms\\Classes\\Page page object\n     */\n    public $page;\n\n    /**\n     * @var \\Cms\\Classes\\Layout layout object\n     */\n    public $layout;\n\n    /**\n     * @var \\Cms\\Classes\\controller controller object\n     */\n    public $controller;\n\n    /**\n     * @var array vars is a list of variables passed to the page.\n     */\n    public $vars = [];\n\n    /**\n     * __construct the object instance.\n     * @param \\Cms\\Classes\\Page $page Specifies the CMS page.\n     * @param \\Cms\\Classes\\Layout $layout Specifies the CMS layout.\n     * @param \\Cms\\Classes\\Controller $controller Specifies the CMS controller.\n     */\n    public function __construct($page, $layout, $controller)\n    {\n        $this->page = $page;\n        $this->layout = $layout;\n        $this->controller = $controller;\n\n        parent::__construct();\n    }\n\n    /**\n     * onInit is triggered when all components are initialized and before AJAX is handled.\n     * The layout's onInit method triggers before the page's onInit method.\n     */\n    public function onInit()\n    {\n    }\n\n    /**\n     * onStart is triggered in the beginning of the execution cycle.\n     * The layout's onStart method triggers before the page's onStart method.\n     */\n    public function onStart()\n    {\n    }\n\n    /**\n     * onEnd is triggered in the end of the execution cycle, but before the page is displayed.\n     * The layout's onEnd method triggers after the page's onEnd method.\n     */\n    public function onEnd()\n    {\n    }\n\n    /**\n     * offsetExists implementation\n     */\n    public function offsetExists($offset): bool\n    {\n        return isset($this->controller->vars[$offset]);\n    }\n\n    /**\n     * offsetSet implementation\n     */\n    public function offsetSet($offset, $value): void\n    {\n        $this->controller->vars[$offset] = $this->vars[$offset] = $value;\n    }\n\n    /**\n     * offsetUnset implementation\n     */\n    public function offsetUnset($offset): void\n    {\n        unset($this->controller->vars[$offset]);\n    }\n\n    /**\n     * offsetGet implementation\n     */\n    public function offsetGet($offset): mixed\n    {\n        return $this->controller->vars[$offset] ?? null;\n    }\n\n    /**\n     * __call dynamically handles calls to this classes behaviors, the page and layout\n     * object methods, and finally the controller instance.\n     * @param string $method\n     * @param array $parameters\n     * @return mixed\n     */\n    public function __call($method, $parameters)\n    {\n        if ($this->methodExists($method)) {\n            return $this->$method(...$parameters);\n        }\n\n        if (($pageObj = $this->controller->getPageObject()) && $pageObj !== $this && $pageObj->methodExists($method)) {\n            return $pageObj->$method(...$parameters);\n        }\n\n        if (($layoutObj = $this->controller->getLayoutObject()) && $layoutObj !== $this && $layoutObj->methodExists($method)) {\n            return $layoutObj->$method(...$parameters);\n        }\n\n        return $this->controller->$method(...$parameters);\n    }\n\n    /**\n     * __get is referenced as $this->page in Cms\\Classes\\ComponentBase,\n     * so to avoid $this->page->page this method will proxy there. This is also\n     * used as a helper for accessing controller variables/components easier\n     * in the page code, eg. $this->foo instead of $this['foo']\n     * @param  string  $name\n     * @return void\n     */\n    public function __get($name)\n    {\n        if (isset($this->page->components[$name]) || isset($this->layout->components[$name])) {\n            return $this[$name];\n        }\n\n        if (($value = $this->page->{$name}) !== null) {\n            return $value;\n        }\n\n        if (array_key_exists($name, $this->controller->vars)) {\n            return $this[$name];\n        }\n\n        return null;\n    }\n\n    /**\n     * __set a property on the CMS Page object.\n     * @param  string  $name\n     * @param  mixed   $value\n     * @return void\n     */\n    public function __set($name, $value)\n    {\n        return $this->page->{$name} = $value;\n    }\n\n    /**\n     * __isset checks if a property is set on the CMS Page object.\n     * @param string $name\n     * @return bool\n     */\n    public function __isset($name)\n    {\n        if (isset($this->page->components[$name]) || isset($this->layout->components[$name])) {\n            return true;\n        }\n\n        if (isset($this->page->{$name})) {\n            return true;\n        }\n\n        return array_key_exists($name, $this->controller->vars);\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/CodeParser.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse File;\nuse Lang;\nuse Cache;\nuse Config;\nuse SystemException;\nuse Exception;\n\n/**\n * CodeParser parses the PHP code section of CMS objects.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CodeParser\n{\n    /**\n     * @var \\Cms\\Classes\\CmsCompoundObject A reference to the CMS object being parsed.\n     */\n    protected $object;\n\n    /**\n     * @var string Contains a path to the CMS object's file being parsed.\n     */\n    protected $filePath;\n\n    /**\n     * @var mixed The internal cache, keeps parsed object information during a request.\n     */\n    protected static $cache = [];\n\n    /**\n     * @var string dataCacheKey is the key for the parsed PHP file information cache.\n     */\n    protected $dataCacheKey = '';\n\n    /**\n     * __construct\n     * @param \\Cms\\Classes\\CmsCompoundObject A reference to a CMS object to parse.\n     */\n    public function __construct(CmsCompoundObject $object)\n    {\n        $this->object = $object;\n        $this->filePath = $object->getFilePath();\n        $this->dataCacheKey = 'cms_code_parser_'.$object->theme->getDirName();\n    }\n\n    /**\n     * parse the CMS object's PHP code section and returns an array with the following keys:\n     * - className\n     * - filePath (path to the parsed PHP file)\n     * - offset (PHP section offset in the template file)\n     * - source ('parser', 'request-cache', or 'cache')\n     * @return array\n     */\n    public function parse()\n    {\n        // If the object has already been parsed in this request return the cached data.\n        if (array_key_exists($this->filePath, self::$cache)) {\n            self::$cache[$this->filePath]['source'] = 'request-cache';\n            return self::$cache[$this->filePath];\n        }\n\n        // Try to load the parsed data from the cache\n        $path = $this->getCacheFilePath();\n\n        $result = [\n            'filePath' => $path,\n            'className' => null,\n            'source' => null,\n            'offset' => 0\n        ];\n\n        // There are two types of possible caching scenarios, either stored\n        // in the cache itself, or stored as a cache file. In both cases,\n        // make sure the cache is not stale and use it.\n        if (is_file($path)) {\n            $cachedInfo = $this->getCachedFileInfo();\n            $hasCache = $cachedInfo !== null;\n\n            // Valid cache, return result\n            if ($hasCache && $cachedInfo['mtime'] == $this->object->mtime) {\n                $result['className'] = $cachedInfo['className'];\n                $result['source'] = 'cache';\n\n                return self::$cache[$this->filePath] = $result;\n            }\n\n            // Cache expired, cache file not stale, refresh cache and return result\n            if (!$hasCache && filemtime($path) >= $this->object->mtime) {\n                $className = $this->extractClassFromFile($path);\n                if ($className) {\n                    $result['className'] = $className;\n                    $result['source'] = 'file-cache';\n\n                    $this->storeCachedInfo($result);\n                    return $result;\n                }\n            }\n        }\n\n        $result['className'] = $this->rebuild($path);\n        $result['source'] = 'parser';\n\n        $this->storeCachedInfo($result);\n        return $result;\n    }\n\n   /**\n    * rebuild the current file cache.\n    * @param string The path in which the cached file should be stored\n    */\n    protected function rebuild($path)\n    {\n        $className = 'Cms'.hash('sha256', $path).'Class';\n\n        $count = 0;\n        while (class_exists($className)) {\n            $className = 'Cms'.hash('sha256', $path.$count).'Class';\n            if ($count++ > 100) {\n                throw new SystemException('Maximum call stack exceeded for Cms\\Classes\\CodeParser class name generation.');\n            }\n        }\n\n        $body = (string) $this->object->code;\n        $body = preg_replace('/^\\s*function/m', 'public function', $body);\n\n        $pattern = '/(use\\s+[a-z0-9_\\\\\\\\]+(\\s+as\\s+[a-z0-9_]+)?;(?:\\r?\\n)?)/mi';\n        preg_match_all($pattern, $body, $namespaces);\n        $body = preg_replace($pattern, '', $body);\n\n        $parentClass = $this->object->getCodeClassParent();\n        if ($parentClass !== null) {\n            $parentClass = ' extends '.$parentClass;\n        }\n\n        $fileContents = '<?php '.PHP_EOL;\n\n        foreach ($namespaces[0] as $namespace) {\n            $fileContents .= $namespace;\n        }\n\n        $fileContents .= 'class '.$className.$parentClass.PHP_EOL;\n        $fileContents .= '{'.PHP_EOL;\n        $fileContents .= $body.PHP_EOL;\n        $fileContents .= '}'.PHP_EOL;\n\n        $this->validate($fileContents);\n\n        $this->makeDirectorySafe(dirname($path));\n\n        $this->writeContentSafe($path, $fileContents);\n\n        return $className;\n    }\n\n    /**\n     * source runs the object's PHP file and returns the corresponding object.\n     * @param \\Cms\\Classes\\Page $page Specifies the CMS page.\n     * @param \\Cms\\Classes\\Layout $layout Specifies the CMS layout.\n     * @param \\Cms\\Classes\\Controller $controller Specifies the CMS controller.\n     * @return mixed\n     */\n    public function source($page, $layout, $controller)\n    {\n        $data = $this->parse();\n        $className = $data['className'];\n\n        if (!class_exists($className)) {\n            require_once $data['filePath'];\n        }\n\n        // Handle corrupt cache during concurrent access\n        $count = 0;\n        while (!class_exists($className)) {\n            if ($count !== 0) {\n                usleep(rand(50000, 200000));\n            }\n\n            $data = $this->handleCorruptCache($data);\n            $className = $data['className'];\n\n            if ($count++ > 10) {\n                $path = $data['filePath'] ?? $this->getCacheFilePath();\n                throw new SystemException(Lang::get('system::lang.file.create_fail', ['name'=>$path]));\n            }\n        }\n\n        return new $className($page, $layout, $controller);\n    }\n\n    /**\n     * handleCorruptCache in some rare cases the cache file will not contain the class\n     * name we expect. When this happens, destroy the corrupt file,\n     * flush the request cache, and repeat the cycle.\n     * @return void\n     */\n    protected function handleCorruptCache($data)\n    {\n        $path = $data['filePath'] ?? $this->getCacheFilePath();\n\n        if (is_file($path)) {\n            if (($className = $this->extractClassFromFile($path)) && class_exists($className)) {\n                $data['className'] = $className;\n                return $data;\n            }\n\n            @unlink($path);\n        }\n\n        unset(self::$cache[$this->filePath]);\n\n        return $this->parse();\n    }\n\n    //\n    // Cache\n    //\n\n    /**\n     * storeCachedInfo stores result data inside cache.\n     * @param array $result\n     * @return void\n     */\n    protected function storeCachedInfo($result)\n    {\n        $cacheItem = $result;\n        $cacheItem['mtime'] = $this->object->mtime;\n\n        $cached = $this->getCachedInfo() ?: [];\n        $cached[$this->filePath] = $cacheItem;\n\n        $toStore = base64_encode(serialize($cached));\n\n        $minutes = Config::get('cms.template_cache_ttl', 1440);\n        if ($minutes < 0) {\n            Cache::forever($this->dataCacheKey, $toStore);\n        }\n        else {\n            $expiresAt = now()->addMinutes($minutes);\n            Cache::put($this->dataCacheKey, $toStore, $expiresAt);\n        }\n\n        self::$cache[$this->filePath] = $result;\n    }\n\n    /**\n     * getCacheFilePath returns path to the cached parsed file\n     * @return string\n     */\n    protected function getCacheFilePath()\n    {\n        $hash = md5($this->filePath);\n        $result = storage_path().'/cms/cache/';\n        $result .= substr($hash, 0, 2).'/';\n        $result .= substr($hash, 2, 2).'/';\n        $result .= basename($this->filePath);\n        $result .= '.php';\n\n        return $result;\n    }\n\n    /**\n     * getCachedInfo returns information about all cached files.\n     * @return mixed Returns an array representing the cached data or NULL.\n     */\n    protected function getCachedInfo()\n    {\n        $cached = Cache::get($this->dataCacheKey, false);\n\n        if (\n            $cached !== false &&\n            ($cached = @unserialize(@base64_decode($cached))) !== false\n        ) {\n            return $cached;\n        }\n\n        return null;\n    }\n\n    /**\n     * getCachedFileInfo returns information about a cached file\n     * @return integer\n     */\n    protected function getCachedFileInfo()\n    {\n        $cached = $this->getCachedInfo();\n\n        if ($cached !== null && array_key_exists($this->filePath, $cached)) {\n            return $cached[$this->filePath];\n        }\n\n        return null;\n    }\n\n    //\n    // Helpers\n    //\n\n    /**\n     * validate evaluates PHP content in order to detect syntax errors.\n     * The method handles PHP errors and throws exceptions.\n     */\n    protected function validate($php)\n    {\n        eval('?>'.$php);\n    }\n\n    /**\n     * extractClassFromFile extracts the class name from a cache file\n     * @return string\n     */\n    protected function extractClassFromFile($path)\n    {\n        try {\n            $fileContent = File::sharedGet($path);\n            $matches = [];\n            $pattern = '/Cms\\S+_\\S+Class/';\n            preg_match($pattern, $fileContent, $matches);\n\n            if (!empty($matches[0])) {\n                return $matches[0];\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        return null;\n    }\n\n    /**\n     * writeContentSafe writes content with concurrency support and cache busting\n     * This work is based on the Twig\\Cache\\FilesystemCache class\n     */\n    protected function writeContentSafe($path, $content)\n    {\n        $count = 0;\n        $tmpFile = tempnam(dirname($path), basename($path));\n\n        if (@file_put_contents($tmpFile, $content) === false) {\n            throw new SystemException(Lang::get('system::lang.file.create_fail', ['name'=>$tmpFile]));\n        }\n\n        while (!@rename($tmpFile, $path)) {\n            usleep(rand(50000, 200000));\n\n            if ($count++ > 10) {\n                throw new SystemException(Lang::get('system::lang.file.create_fail', ['name'=>$path]));\n            }\n        }\n\n        File::chmod($path);\n\n        /*\n         * Compile cached file into bytecode cache\n         */\n        if (Config::get('cms.force_bytecode_invalidation', false)) {\n            if (function_exists('opcache_invalidate') && ini_get('opcache.enable')) {\n                opcache_invalidate($path, true);\n            }\n            elseif (function_exists('apc_compile_file')) {\n                apc_compile_file($path);\n            }\n        }\n    }\n\n    /**\n     * makeDirectorySafe makes a directory with concurrency support\n     */\n    protected function makeDirectorySafe($dir)\n    {\n        $count = 0;\n\n        if (is_dir($dir)) {\n            if (!is_writable($dir)) {\n                throw new SystemException(Lang::get('system::lang.directory.create_fail', ['name'=>$dir]));\n            }\n\n            return;\n        }\n\n        while (!is_dir($dir) && !@mkdir($dir, 0755, true)) {\n            usleep(rand(50000, 200000));\n\n            if ($count++ > 10) {\n                throw new SystemException(Lang::get('system::lang.directory.create_fail', ['name'=>$dir]));\n            }\n        }\n\n        File::chmodRecursive($dir);\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/ComponentBase.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Str;\nuse Lang;\nuse Config;\nuse October\\Rain\\Extension\\Extendable;\nuse October\\Contracts\\Twig\\CallsAnyMethod;\nuse Larajax\\Contracts\\ViewComponentInterface;\nuse BadMethodCallException;\n\n/**\n * ComponentBase class\n *\n * @mixin \\Cms\\Classes\\Controller\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class ComponentBase extends Extendable implements ViewComponentInterface, CallsAnyMethod\n{\n    use \\System\\Traits\\AssetMaker;\n    use \\System\\Traits\\EventEmitter;\n    use \\System\\Traits\\DependencyMaker;\n    use \\System\\Traits\\PropertyContainer;\n    use \\Larajax\\Traits\\ViewComponent;\n\n    /**\n     * @var string id is a unique identifier for this component.\n     */\n    public $id;\n\n    /**\n     * @var string name as a class name or class alias used in the component declaration in a template.\n     */\n    public $name;\n\n    /**\n     * @var boolean isHidden determines whether the component is hidden from the backend UI.\n     */\n    public $isHidden = false;\n\n    /**\n     * @var string pluginIcon of the plugin that defines the component.\n     * This field is used by the CMS internally.\n     */\n    public $pluginIcon;\n\n    /**\n     * @var string componentCssClass name for the backend page/layout component list.\n     * This field is used by the CMS internally.\n     */\n    public $componentCssClass;\n\n    /**\n     * @var boolean inspectorEnabled determines whether Inspector can be used with the component.\n     * This field is used by the CMS internally.\n     */\n    public $inspectorEnabled = true;\n\n    /**\n     * @var string dirName specifies the component directory name.\n     */\n    protected $dirName;\n\n    /**\n     * @var \\Cms\\Classes\\PageCode page object object.\n     */\n    protected $page;\n\n    /**\n     * @var array externalPropertyNames is a collection of external property names used by this component.\n     */\n    protected $externalPropertyNames = [];\n\n    /**\n     * @var string componentGetPathCache\n     */\n    protected $componentGetPathCache;\n\n    /**\n     * __construct the component, which takes in the page or layout code section object\n     * and properties set by the page or layout.\n     * @param CodeBase|null $cmsObject\n     * @param array $properties\n     */\n    public function __construct($cmsObject = null, $properties = [])\n    {\n        if ($cmsObject !== null) {\n            $this->page = $cmsObject;\n            $this->controller = $cmsObject->controller;\n        }\n\n        $this->properties = $this->validateProperties($properties);\n\n        $className = Str::normalizeClassName(get_called_class());\n        $this->dirName = strtolower(str_replace('\\\\', '/', $className));\n\n        $this->assetPath = $this->getComponentAssetRelativePath();\n        $this->assetUrlPath = $this->getComponentAssetUrlPath();\n\n        parent::__construct();\n    }\n\n    /**\n     * componentDetails returns information about this component, including name and description\n     */\n    public function componentDetails()\n    {\n        return [\n            'name' => Str::title(str_replace('_', ' ', Str::snake(class_basename(static::class)))),\n            'description' => __(\"No description provided.\")\n        ];\n    }\n\n    /**\n     * makePrimaryAccessor returns the PHP object variable for the Twig view layer.\n     */\n    public function makePrimaryAccessor()\n    {\n        return $this;\n    }\n\n    /**\n     * getPath returns the absolute component path\n     */\n    public function getPath()\n    {\n        if ($this->componentGetPathCache !== null) {\n            return $this->componentGetPathCache;\n        }\n\n        return $this->componentGetPathCache = strpos(static::class, 'App\\\\') === 0\n            ? base_path($this->dirName)\n            : plugins_path($this->dirName);\n    }\n\n    /**\n     * init is executed when this component is first initialized, before AJAX requests.\n     */\n    public function init()\n    {\n    }\n\n    /**\n     * onRun is executed when this component is bound to a page or layout, part of\n     * the page life cycle.\n     */\n    public function onRun()\n    {\n    }\n\n    /**\n     * onRender is executed when this component is rendered on a page or layout.\n     */\n    public function onRender()\n    {\n    }\n\n    /**\n     * renderPartial renders a requested partial in context of this component,\n     * see Cms\\Classes\\Controller@renderPartial for usage.\n     */\n    public function renderPartial(...$args)\n    {\n        /** @var \\Cms\\Classes\\Controller $controller */\n        $controller = $this->controller;\n\n        return $controller->inComponentContext($this, function() use ($controller, $args) {\n            return $controller->renderPartial(...$args);\n        });\n    }\n\n    /**\n     * runLifeCycle executes the life cycle for the component.\n     */\n    public function runLifeCycle()\n    {\n        if ($event = $this->fireEvent('component.beforeRun', [], true)) {\n            return $event;\n        }\n\n        if ($result = $this->onRun()) {\n            return $result;\n        }\n\n        if ($event = $this->fireEvent('component.run', [], true)) {\n            return $event;\n        }\n    }\n\n    /**\n     * runAjaxHandler executes the event cycle when running an AJAX handler.\n     * @return boolean Returns true if the handler was found. Returns false otherwise.\n     */\n    public function runAjaxHandler($handler)\n    {\n        /**\n         * @event cms.component.beforeRunAjaxHandler\n         * Provides an opportunity to modify an AJAX request to a component before it is processed by the component\n         *\n         * The parameter provided is `$handler` (the requested AJAX handler to be run)\n         *\n         * Example usage (forwards AJAX handlers to a backend widget):\n         *\n         *     Event::listen('cms.component.beforeRunAjaxHandler', function ((\\Cms\\Classes\\ComponentBase) $component, (string) $handler) {\n         *         if (strpos($handler, '::')) {\n         *             [$componentAlias, $handlerName] = explode('::', $handler);\n         *             if ($componentAlias === $this->getBackendWidgetAlias()) {\n         *                 return $this->backendControllerProxy->runAjaxHandler($handler);\n         *             }\n         *         }\n         *     });\n         *\n         * Or\n         *\n         *     $this->controller->bindEvent('component.beforeRunAjaxHandler', function ((string) $handler) {\n         *         if (strpos($handler, '::')) {\n         *             [$componentAlias, $handlerName] = explode('::', $handler);\n         *             if ($componentAlias === $this->getBackendWidgetAlias()) {\n         *                 return $this->backendControllerProxy->runAjaxHandler($handler);\n         *             }\n         *         }\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.component.beforeRunAjaxHandler', [$handler])) {\n            return $event;\n        }\n\n        $result = $this->makeCallMethod($this, $handler);\n\n        /**\n         * @event cms.component.runAjaxHandler\n         * Provides an opportunity to modify an AJAX request to a component after it is processed by the component\n         *\n         * The parameters provided are `$handler` (the requested AJAX handler to be run) and `$result` (the result of the component processing the request)\n         *\n         * Example usage (Logs requests and their response):\n         *\n         *     Event::listen('cms.component.beforeRunHandler', function ((\\Cms\\Classes\\ComponentBase) $component, (string) $handler, (mixed) $result) {\n         *         if (in_array($handler, $interceptHandlers)) {\n         *             return 'request has been intercepted, original response: ' . json_encode($result);\n         *         }\n         *     });\n         *\n         * Or\n         *\n         *     $this->controller->bindEvent('component.beforeRunAjaxHandler', function ((string) $handler, (mixed) $result) {\n         *         if (in_array($handler, $interceptHandlers)) {\n         *             return 'request has been intercepted, original response: ' . json_encode($result);\n         *         }\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.component.runAjaxHandler', [$handler, $result])) {\n            return $event;\n        }\n\n        return $result;\n    }\n\n    //\n    // External properties\n    //\n\n    /*\n     * Description on how to access external property names.\n     *\n     * # When\n     * pageNumber = \"7\"\n     * $this->propertyName('pageNumber'); // Returns NULL\n     * $this->paramName('pageNumber');    // Returns NULL\n     *\n     * # When\n     * pageNumber = \"{{ :page }}\"\n     *\n     * $this->propertyName('pageNumber'); // Returns \":page\"\n     * $this->paramName('pageNumber');    // Returns \"page\"\n     *\n     * # When\n     * pageNumber = \"{{ page }}\"\n     *\n     * $this->propertyName('pageNumber'); // Returns \"page\"\n     * $this->paramName('pageNumber');    // Returns NULL\n     */\n\n    /**\n     * setExternalPropertyNames sets names used by external properties.\n     * @param array $names The key should be the property name,\n     *                     the value should be the external property name.\n     * @return void\n     */\n    public function setExternalPropertyNames(array $names)\n    {\n        $this->externalPropertyNames = $names;\n    }\n\n    /**\n     * setExternalPropertyName sets an external property name.\n     * @param string $name Property name\n     * @param string $extName External property name\n     * @return void\n     */\n    public function setExternalPropertyName($name, $extName)\n    {\n        array_set($this->externalPropertyNames, $name, $extName);\n    }\n\n    /**\n     * propertyName returns the external property name when the property value is an external\n     * property reference. Otherwise the default value specified is returned.\n     * @param string $name\n     * @param mixed $default\n     * @return string\n     */\n    public function propertyName($name, $default = null)\n    {\n        return array_get($this->externalPropertyNames, $name, $default);\n    }\n\n    /**\n     * paramName returns the external property name when the property value is a routing\n     * parameter reference. Otherwise the default value specified is returned.\n     * @param string $name\n     * @param mixed $default\n     * @return string\n     */\n    public function paramName($name, $default = null)\n    {\n        if (($extName = $this->propertyName($name)) && substr($extName, 0, 1) === ':') {\n            return substr($extName, 1);\n        }\n\n        return $default;\n    }\n\n    /**\n     * getController returns the controller using this component.\n     */\n    public function getController()\n    {\n        return $this->controller;\n    }\n\n    //\n    // Magic methods\n    //\n\n    /**\n     * __call dynamically handles calls into the controller instance.\n     * @param string $method\n     * @param array $parameters\n     * @return mixed\n     */\n    public function __call($method, $parameters)\n    {\n        try {\n            return parent::__call($method, $parameters);\n        }\n        catch (BadMethodCallException $ex) {\n        }\n\n        if (method_exists($this->controller, $method)) {\n            return call_user_func_array([$this->controller, $method], $parameters);\n        }\n\n        throw new BadMethodCallException(Lang::get('cms::lang.component.method_not_found', [\n            'name' => get_class($this),\n            'method' => $method\n        ]));\n    }\n\n    /**\n     * __toString returns the component's alias, used by __SELF__\n     */\n    public function __toString()\n    {\n        return $this->alias;\n    }\n\n    //\n    // Internals\n    //\n\n    /**\n     * getComponentAssetRelativePath\n     */\n    protected function getComponentAssetRelativePath(): string\n    {\n        $dirName = dirname(dirname($this->dirName));\n\n        return \"/plugins/{$dirName}\";\n    }\n\n    /**\n     * getComponentAssetUrlPath returns the public directory for the component assets\n     */\n    protected function getComponentAssetUrlPath(): string\n    {\n        // Configuration for theme asset location, default to relative path\n        $assetUrl = (string) Config::get('system.plugins_asset_url') ?: '/plugins';\n\n        // Build path\n        $dirName = dirname(dirname($this->dirName));\n\n        return $assetUrl . '/' . $dirName;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/ComponentBehavior.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse October\\Rain\\Extension\\ExtensionBase;\n\n/**\n * ComponentBehavior base class\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ComponentBehavior extends ExtensionBase\n{\n    /**\n     * @var ComponentBase component class\n     */\n    protected $component;\n\n    /**\n     * @var \\Cms\\Classes\\Controller controller to CMS controller.\n     */\n    protected $controller;\n\n    /**\n     * __construct the behavior\n     */\n    public function __construct($component)\n    {\n        $this->component = $component;\n\n        $this->controller = $controller = $component->getController();\n\n        if (!$controller) {\n            return;\n        }\n\n        // Constructor logic that is protected by authentication\n        $controller->bindEvent('page.initComponents', function() {\n            $this->beforeDisplay();\n        });\n    }\n\n    /**\n     * beforeDisplay fires before the page is displayed and AJAX is executed.\n     */\n    public function beforeDisplay()\n    {\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/ComponentHelpers.php",
    "content": "<?php namespace Cms\\Classes;\n\n/**\n * @deprecated use \\Cms\\Helpers\\Component\n */\nclass ComponentHelpers extends \\Cms\\Helpers\\Component\n{\n}\n"
  },
  {
    "path": "modules/cms/classes/ComponentManager.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse App;\nuse Str;\nuse System;\nuse Config;\nuse System\\Classes\\PluginManager;\nuse SystemException;\n\n/**\n * ComponentManager\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ComponentManager\n{\n    /**\n     * @var array codeMap where keys are codes and values are class names.\n     */\n    protected $codeMap;\n\n    /**\n     * @var array classMap where keys are class names and values are codes.\n     */\n    protected $classMap;\n\n    /**\n     * @var array ownerDetailsMap with owner information about a component.\n     */\n    protected $ownerDetailsMap;\n\n    /**\n     * @var array ownerMap where keys are class name and values are owner class.\n     */\n    protected $ownerMap;\n\n    /**\n     * @var array detailsCache array of component details.\n     */\n    protected $detailsCache;\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('cms.components');\n    }\n\n    /**\n     * registerComponents manually registers a component for consideration. Usage:\n     *\n     *     ComponentManager::registerComponents(function ($manager) {\n     *         $manager->registerComponent(\\October\\Demo\\Components\\Test::class, 'testComponent');\n     *     });\n     *\n     * @deprecated this will be removed in a later version\n     * @param callable $callback A callable function.\n     */\n    public function registerComponents(callable $definitions)\n    {\n        App::extendInstance('cms.components', $definitions);\n    }\n\n    /**\n     * loadComponents scans each plugin an loads it's components.\n     */\n    protected function loadComponents()\n    {\n        // Load module items\n        foreach (System::listModules() as $module) {\n            if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                $this->loadComponentsFromArray($provider->registerComponents(), $provider);\n                $this->loadComponentsFromArray($provider->registerPageSnippets());\n            }\n        }\n\n        // Load plugin components\n        foreach (PluginManager::instance()->getPlugins() as $plugin) {\n            $this->loadComponentsFromArray($plugin->registerComponents(), $plugin);\n            $this->loadComponentsFromArray($plugin->registerPageSnippets());\n        }\n\n        // Load app items\n        if ($app = App::getProvider(\\App\\Provider::class)) {\n            $this->loadComponentsFromArray($app->registerComponents(), $app);\n            $this->loadComponentsFromArray($app->registerPageSnippets());\n        }\n    }\n\n    /**\n     * loadComponentsFromArray helper\n     */\n    protected function loadComponentsFromArray($items, $owner = null)\n    {\n        if (!is_array($items)) {\n            return;\n        }\n\n        foreach ($items as $className => $code) {\n            $this->registerComponent($className, $code, $owner);\n        }\n    }\n\n    /**\n     * registerComponent registers a single component.\n     */\n    public function registerComponent($className, $code = null, $owner = null)\n    {\n        if (!$this->classMap) {\n            $this->classMap = [];\n        }\n\n        if (!$this->codeMap) {\n            $this->codeMap = [];\n        }\n\n        if (!$code) {\n            $code = Str::getClassId($className);\n        }\n\n        if ($code === 'viewBag' && $className !== \\Cms\\Components\\ViewBag::class) {\n            throw new SystemException(sprintf(\n                'The component code viewBag is reserved. Please use another code for the component class %s.',\n                $className\n            ));\n        }\n\n        $className = Str::normalizeClassName($className);\n        $this->codeMap[$code] = $className;\n        $this->classMap[$className] = $code;\n\n        if ($owner !== null) {\n            if ($owner instanceof \\System\\Classes\\PluginBase) {\n                $this->setComponentOwnerAsPlugin($code, $className, $owner);\n            }\n            else {\n                $this->setComponentOwnerAsProvider($code, $className, $owner);\n            }\n        }\n    }\n\n    /**\n     * setComponentOwnerAsPlugin\n     */\n    protected function setComponentOwnerAsPlugin(string $code, string $className, $pluginObj): void\n    {\n        $ownerClass = get_class($pluginObj);\n\n        if (!isset($this->ownerDetailsMap[$ownerClass])) {\n            $this->ownerDetailsMap[$ownerClass] = [\n                'details' => $pluginObj->pluginDetails(),\n                'components' => []\n            ];\n        }\n\n        $this->ownerMap[$className] = $ownerClass;\n        $this->ownerDetailsMap[$ownerClass]['components'][$code] = $className;\n    }\n\n    /**\n     * setComponentOwnerAsProvider\n     */\n    protected function setComponentOwnerAsProvider(string $code, string $className, $providerObj): void\n    {\n        $ownerClass = get_class($providerObj);\n\n        if (!isset($this->ownerDetailsMap[$ownerClass])) {\n            $providerName = substr($ownerClass, 0, strrpos($ownerClass, '\\\\'));\n            $this->ownerDetailsMap[$ownerClass] = [\n                'details' => [\n                    'name' => class_basename($providerName),\n                    'icon' => 'icon-puzzle-piece'\n                ],\n                'components' => []\n            ];\n        }\n\n        $this->ownerMap[$className] = $ownerClass;\n        $this->ownerDetailsMap[$ownerClass]['components'][$code] = $className;\n    }\n\n    /**\n     * listComponents returns a list of registered components. Returns array keys\n     * as codes and values as class names.\n     * @return array\n     */\n    public function listComponents()\n    {\n        if ($this->codeMap === null) {\n            $this->loadComponents();\n        }\n\n        return $this->codeMap;\n    }\n\n    /**\n     * listComponentDetails returns an array of all component detail definitions.\n     * Returns array keys as component codes and values as the details defined\n     * in the component.\n     * @return array\n     */\n    public function listComponentDetails()\n    {\n        if ($this->detailsCache !== null) {\n            return $this->detailsCache;\n        }\n\n        $result = [];\n        foreach ($this->listComponents() as $componentAlias => $componentClass) {\n            $componentObj = $this->makeComponent($componentClass);\n            $details = $componentObj->componentDetails();\n            $details['isHidden'] = $componentObj->isHidden;\n            $result[$componentAlias] = $details;\n        }\n\n        return $this->detailsCache = $result;\n    }\n\n    /**\n     * listComponentOwnerDetails returns the components grouped by owner and injects the owner details.\n     */\n    public function listComponentOwnerDetails()\n    {\n        $details = $this->listComponentDetails();\n        if (!$this->ownerDetailsMap) {\n            return [];\n        }\n\n        $owners = $this->ownerDetailsMap;\n        foreach ($this->ownerDetailsMap as $ownerClass => $ownerArr) {\n            $components = $ownerArr['components'] ?? [];\n            foreach ($components as $code => $className) {\n                $detailsArr = $details[$code] ?? [];\n                $owners[$ownerClass]['components'][$code] = ['className' => $className] + $detailsArr;\n            }\n        }\n\n        return $owners;\n    }\n\n    /**\n     * resolve returns a class name from a component code\n     * Normalizes a class name or converts an code to it's class name.\n     * @return string The class name resolved, or null.\n     */\n    public function resolve($name)\n    {\n        $codes = $this->listComponents();\n\n        if (isset($codes[$name])) {\n            return $codes[$name];\n        }\n\n        $name = Str::normalizeClassName($name);\n        if (isset($this->classMap[$name])) {\n            return $name;\n        }\n\n        return null;\n    }\n\n    /**\n     * hasComponent checks to see if a component has been registered.\n     * @param string $name A component class name or code.\n     * @return bool Returns true if the component is registered, otherwise false.\n     */\n    public function hasComponent($name)\n    {\n        $className = $this->resolve($name);\n        if (!$className) {\n            return false;\n        }\n\n        return isset($this->classMap[$className]);\n    }\n\n    /**\n     * makeComponent object with properties set.\n     * @param string $name A component class name or code.\n     * @param CmsObject $cmsObject The Cms object that spawned this component.\n     * @param array $properties The properties set by the Page or Layout.\n     * @return ComponentBase|null The component object.\n     */\n    public function makeComponent($name, $cmsObject = null, $properties = [])\n    {\n        $className = $this->resolve($name);\n        if (!$className) {\n            $strictMode = Config::get('cms.strict_components', false);\n            if ($strictMode) {\n                throw new SystemException(sprintf(\n                    'Class name is not registered for the component \"%s\". Check the component plugin.',\n                    $name\n                ));\n            }\n            else {\n                return null;\n            }\n        }\n\n        if (!class_exists($className)) {\n            throw new SystemException(sprintf(\n                'Component class not found \"%s\". Check the component plugin.',\n                $className\n            ));\n        }\n\n        $component = App::make($className, [\n            'cmsObject' => $cmsObject,\n            'properties' => $properties\n        ]);\n\n        $component->name = $name;\n\n        return $component;\n    }\n\n    /**\n     * findComponentOwnerDetails returns details about the component owner as an array.\n     */\n    public function findComponentOwnerDetails($component): array\n    {\n        $className = Str::normalizeClassName(get_class($component));\n\n        if (isset($this->ownerMap[$className])) {\n            $ownerClass = $this->ownerMap[$className];\n            return $this->ownerDetailsMap[$ownerClass]['details'] ?? [];\n        }\n\n        return [];\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/ComponentModuleBase.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Config;\n\n/**\n * ComponentModuleBase is an internal base class used by module components\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class ComponentModuleBase extends ComponentBase\n{\n    /**\n     * getPath returns the absolute component path\n     */\n    public function getPath()\n    {\n        if ($this->componentGetPathCache !== null) {\n            return $this->componentGetPathCache;\n        }\n\n        return $this->componentGetPathCache = base_path('modules/' . $this->dirName);\n    }\n\n    /**\n     * getComponentAssetUrlPath returns the public directory for the component assets\n     */\n    protected function getComponentAssetUrlPath(): string\n    {\n        // Configuration for component asset location, default to relative path\n        $assetUrl = '/modules';\n        if ($customUrl = Config::get('app.asset_url')) {\n            $assetUrl = $customUrl . $assetUrl;\n        }\n\n        // Build path\n        $dirName = dirname(dirname($this->dirName));\n\n        return $assetUrl . '/' . $dirName;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/ComponentPartial.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse File;\nuse Lang;\nuse Cms\\Contracts\\CmsObject as CmsObjectContract;\nuse Cms\\Helpers\\File as FileHelper;\nuse October\\Rain\\Extension\\Extendable;\nuse DirectoryIterator;\nuse SystemException;\n\n/**\n * The CMS component partial class. These objects are read-only.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ComponentPartial extends Extendable implements CmsObjectContract\n{\n    /**\n     * @var \\Cms\\Classes\\ComponentBase A reference to the CMS component containing the object.\n     */\n    protected $component;\n\n    /**\n     * @var string The component partial file name.\n     */\n    public $fileName;\n\n    /**\n     * @var string Last modified time.\n     */\n    public $mtime;\n\n    /**\n     * @var string Partial content.\n     */\n    public $content;\n\n    /**\n     * @var int The maximum allowed path nesting level. The default value is 5,\n     * meaning that files can only exist in the root directory, or in a\n     * subdirectory. Set to null if any level is allowed.\n     */\n    protected $maxNesting = 5;\n\n    /**\n     * @var array Allowable file extensions.\n     */\n    protected $allowedExtensions = ['htm'];\n\n    /**\n     * @var string Default file extension.\n     */\n    protected $defaultExtension = 'htm';\n\n    /**\n     * __construct an instance of the object and associates it with a CMS component.\n     * @param \\Cms\\Classes\\ComponentBase $component Specifies the component the object belongs to.\n     */\n    public function __construct(ComponentBase $component)\n    {\n        $this->component = $component;\n\n        parent::__construct();\n    }\n\n    /**\n     * load the object from a file.\n     * This method is used in the CMS back-end. It doesn't use any caching.\n     * @param \\Cms\\Classes\\ComponentBase $component Specifies the component the object belongs to.\n     * @param string $fileName Specifies the file name, with the extension.\n     * The file name can contain only alphanumeric symbols, dashes and dots.\n     * @return mixed Returns a CMS object instance or null if the object wasn't found.\n     */\n    public static function load($component, $fileName)\n    {\n        return (new static($component))->find($fileName);\n    }\n\n    /**\n     * loadCached since there is not much point caching a component partial, so this behavior\n     * reverts to a regular load call.\n     * @param \\Cms\\Classes\\ComponentBase $component\n     * @param string $fileName\n     * @return mixed\n     */\n    public static function loadCached($component, $fileName)\n    {\n        return static::load($component, $fileName);\n    }\n\n    /**\n     * loadOverrideCached checks if a partial override exists in the supplied theme and returns it.\n     * Since the beginning of time, October inconsistently checked for overrides\n     * using the component alias exactly, resulting in a folder with uppercase\n     * characters, subsequently this method checks for both variants.\n     *\n     * @param \\Cms\\Classes\\Theme $theme\n     * @param \\Cms\\Classes\\ComponentBase $component\n     * @param string $fileName\n     * @return mixed\n     */\n    public static function loadOverrideCached($theme, $component, $fileName)\n    {\n        $partial = Partial::loadCached($theme, strtolower($component->alias) . '/' . $fileName);\n\n        // Look at second segment of component definition\n        if ($partial === null) {\n            $partial = Partial::loadCached($theme, $component->alias . '/' . $fileName);\n        }\n\n        // Look at first segment if not a PHP class\n        if ($partial === null && strpos($component->name, '\\\\') === false) {\n            $partial = Partial::loadCached($theme, $component->name . '/' . $fileName);\n        }\n\n        return $partial;\n    }\n\n    /**\n     * all loads all partials for a given component\n     */\n    public static function all($component): array\n    {\n        if (!is_dir($component->getPath())) {\n            return [];\n        }\n\n        $it = new DirectoryIterator($component->getPath());\n        $it->rewind();\n\n        $result = [];\n        foreach ($it as $fileinfo) {\n            if ($fileinfo->isDir() || $fileinfo->isDot()) {\n                continue;\n            }\n\n            $partial = static::load($component, $fileinfo->getFilename());\n            if ($partial) {\n                $result[] = $partial;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * find a single template by its file name.\n     *\n     * @param  string $fileName\n     * @return mixed|static\n     */\n    public function find($fileName)\n    {\n        $fileName = $this->validateFileName($fileName);\n\n        $filePath = $this->getFilePath($fileName);\n\n        if (!File::isFile($filePath)) {\n            return null;\n        }\n\n        if (($content = @File::get($filePath)) === false) {\n            return null;\n        }\n\n        $this->fileName = $fileName;\n        $this->mtime = File::lastModified($filePath);\n        $this->content = $content;\n\n        return $this;\n    }\n\n    /**\n     * check returns true if the specific component contains a matching partial.\n     * @param \\Cms\\Classes\\ComponentBase $component Specifies a component the file belongs to.\n     * @param string $fileName Specifies the file name to check.\n     * @return bool\n     */\n    public static function check(ComponentBase $component, $fileName)\n    {\n        $partial = new static($component);\n\n        if (!strlen(File::extension($fileName))) {\n            $fileName .= '.' . $partial->getDefaultExtension();\n        }\n\n        return File::isFile($partial->getFilePath($fileName));\n    }\n\n    /**\n     * validateFileName checks the supplied file name for validity.\n     * @param string  $fileName\n     * @return string\n     */\n    protected function validateFileName($fileName)\n    {\n        if (!FileHelper::validatePath($fileName, $this->maxNesting)) {\n            throw new SystemException(Lang::get('cms::lang.cms_object.invalid_file', [\n                'name' => $fileName\n            ]));\n        }\n\n        if (!strlen(File::extension($fileName))) {\n            $fileName .= '.'.$this->defaultExtension;\n        }\n\n        return $fileName;\n    }\n\n    /**\n     * getContent returns the file content.\n     * @return string\n     */\n    public function getContent()\n    {\n        return $this->content;\n    }\n\n    /**\n     * getTwigContent returns the Twig content string.\n     * @return string\n     */\n    public function getTwigContent()\n    {\n        return $this->content;\n    }\n\n    /**\n     * getTwigCacheKey returns the key used by the Twig cache.\n     * @return string\n     */\n    public function getTwigCacheKey()\n    {\n        return $this->getFilePath();\n    }\n\n    /**\n     * getFileName returns the file name.\n     * @return string\n     */\n    public function getFileName()\n    {\n        return $this->fileName;\n    }\n\n    /**\n     * getDefaultExtension returns the default extension used by this template.\n     * @return string\n     */\n    public function getDefaultExtension()\n    {\n        return $this->defaultExtension;\n    }\n\n    /**\n     * getBaseFileName returns the file name without the extension.\n     * @return string\n     */\n    public function getBaseFileName()\n    {\n        $pos = strrpos($this->fileName, '.');\n        if ($pos === false) {\n            return $this->fileName;\n        }\n\n        return substr($this->fileName, 0, $pos);\n    }\n\n    /**\n     * getFilePath returns the absolute file path.\n     * @param string $fileName Specifies the file name to return the path to.\n     * @return string\n     */\n    public function getFilePath($fileName = null)\n    {\n        if ($fileName === null) {\n            $fileName = $this->fileName;\n        }\n\n        $component = $this->component;\n        $path = $component->getPath().'/'.$fileName;\n\n        // Check the shared \"/partials\" directory for the partial\n        if (!File::isFile($path)) {\n            $sharedDir = dirname($component->getPath()).'/partials';\n            $sharedPath = $sharedDir.'/'.$fileName;\n            if (File::isFile($sharedPath)) {\n                return $sharedPath;\n            }\n        }\n\n        return $path;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Content.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse File;\nuse Markdown;\nuse Cms\\Classes\\PageManager;\n\n/**\n * Content file class.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Content extends CmsCompoundObject\n{\n    /**\n     * @var string dirName associated with the model, eg: pages.\n     */\n    protected $dirName = 'content';\n\n    /**\n     * @var array allowedExtensions\n     */\n    protected $allowedExtensions = ['htm', 'html', 'txt', 'md'];\n\n    /**\n     * @var array purgeable attribute names which are not considered \"settings\".\n     */\n    protected $purgeable = ['parsedMarkup'];\n\n    /**\n     * initCacheItem initializes the object properties from the cached data. The extra\n     * data set here becomes available as attributes set on the model after fetch.\n     * @param array $item\n     */\n    public static function initCacheItem(&$item)\n    {\n        $item['parsedMarkup'] = (new static($item))->parseMarkup();\n    }\n\n    /**\n     * getParsedMarkupAttribute returns a default value for parsedMarkup attribute.\n     * @return string\n     */\n    public function getParsedMarkupAttribute()\n    {\n        if (array_key_exists('parsedMarkup', $this->attributes)) {\n            return $this->attributes['parsedMarkup'];\n        }\n\n        return $this->attributes['parsedMarkup'] = $this->parseMarkup();\n    }\n\n    /**\n     * parseMarkup according to the file type.\n     * @return string\n     */\n    public function parseMarkup()\n    {\n        $extension = strtolower(File::extension($this->fileName));\n        $result = $this->markup;\n\n        switch ($extension) {\n            case 'html':\n                $result = PageManager::processMarkup($result);\n                break;\n            case 'md':\n                $result = Markdown::parse((string) $result);\n                $result = PageManager::processMarkup($result);\n                break;\n            case 'txt':\n                $result = htmlspecialchars($result);\n                break;\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Controller.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Cms;\nuse App;\nuse Url;\nuse Site;\nuse View;\nuse Lang;\nuse Config;\nuse System;\nuse Session;\nuse Request;\nuse Response;\nuse BackendAuth;\nuse Twig\\Environment as TwigEnvironment;\nuse Twig\\Cache\\FilesystemCache as TwigCacheFilesystem;\nuse Cms\\Twig\\Loader as TwigLoader;\nuse Cms\\Twig\\DebugExtension;\nuse Cms\\Twig\\Extension as CmsTwigExtension;\nuse Cms\\Models\\MaintenanceSetting;\nuse System\\Models\\RequestLog;\nuse System\\Twig\\Extension as SystemTwigExtension;\nuse System\\Twig\\SecurityPolicy as TwigSecurityPolicy;\nuse Larajax\\Contracts\\AjaxControllerInterface;\n\n/**\n * Controller finds and serves requested CMS pages.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Controller implements AjaxControllerInterface\n{\n    use \\Cms\\Classes\\Controller\\HasRenderers;\n    use \\Cms\\Classes\\Controller\\HasAjaxRequests;\n    use \\Cms\\Classes\\Controller\\HasThemeAssetMaker;\n    use \\Cms\\Classes\\Controller\\HasComponentHelpers;\n    use \\Cms\\Traits\\ParsableController;\n    use \\System\\Traits\\EventEmitter;\n    use \\System\\Traits\\ResponseMaker;\n    use \\System\\Traits\\SecurityController;\n\n    /**\n     * @var \\Cms\\Classes\\Theme theme reference to the CMS theme processed by the controller.\n     */\n    protected $theme;\n\n    /**\n     * @var \\Cms\\Classes\\Router router reference to the Router object.\n     */\n    protected $router;\n\n    /**\n     * @var \\Cms\\Twig\\Loader loader reference to the Twig template loader.\n     */\n    protected $loader;\n\n    /**\n     * @var \\Cms\\Classes\\Page page reference to the CMS page template being processed.\n     */\n    protected $page;\n\n    /**\n     * @var \\Cms\\Classes\\CodeBase pageObj reference to the CMS page code section object.\n     */\n    protected $pageObj;\n\n    /**\n     * @var \\Cms\\Classes\\Layout layout reference to the CMS layout template used by the page.\n     */\n    protected $layout;\n\n    /**\n     * @var \\Cms\\Classes\\CodeBase layoutObj reference to the CMS layout code section object.\n     */\n    protected $layoutObj;\n\n    /**\n     * @var TwigEnvironment twig environment object.\n     */\n    protected $twig;\n\n    /**\n     * @var string pageContents contains the rendered page contents string.\n     */\n    protected $pageContents;\n\n    /**\n     * @var array vars is a list of variables to pass to the page.\n     */\n    public $vars = [];\n\n    /**\n     * @var self instance is a cache of this object.\n     */\n    protected static $instance;\n\n    /**\n     * @var \\Cms\\Classes\\ComponentBase componentContext of the active component, used internally.\n     */\n    protected $componentContext;\n\n    /**\n     * @var \\Cms\\Classes\\PartialStack partialStack, used internally.\n     */\n    protected $partialStack;\n\n    /**\n     * @var \\Cms\\Classes\\PartialWatcher partialWatcher, used internally.\n     */\n    protected $partialWatcher;\n\n    /**\n     * @var bool pageCycled\n     */\n    protected $pageCycled = false;\n\n    /**\n     * __construct the controller.\n     * @param \\Cms\\Classes\\Theme $theme Specifies the CMS theme.\n     * If the theme is not specified, the current active theme used.\n     */\n    public function __construct($theme = null)\n    {\n        $this->theme = $theme ?: Theme::getActiveTheme();\n        if (!$this->theme) {\n            throw new CmsException(Lang::get('cms::lang.theme.active.not_found'));\n        }\n\n        $this->assetPath = $this->getThemeAssetRelativePath();\n        $this->assetUrlPath = $this->getThemeAssetUrl();\n        $this->router = new Router($this->theme);\n        $this->initTwigEnvironment();\n\n        self::$instance = $this;\n    }\n\n    /**\n     * run finds and serves the requested page URL.\n     * If the page cannot be found, returns the page with the URL /404.\n     * If the /404 page doesn't exist, returns the system 404 page.\n     * If the parameter is null, the current URL used. If it is not provided then '/' is used.\n     * Returns the response to the provided URL.\n     *\n     * @param string|null $url\n     * @return mixed\n     */\n    public function run($url = '/')\n    {\n        if ($url === null) {\n            $url = Request::path();\n        }\n\n        if (trim($url) === '') {\n            $url = '/';\n        }\n\n        // Hidden page\n        $page = $this->router->findByUrl($url);\n        if ($page && $page->is_hidden && !BackendAuth::getUser()) {\n            $page = null;\n        }\n\n        $originalPageFound = !!$page;\n\n        // Maintenance mode\n        if (MaintenanceSetting::isEnabled() && !Cms::urlHasException($url, 'maintenance')) {\n            if (!Request::ajax()) {\n                $this->setStatusCode(503);\n            }\n\n            $page = Page::loadCached($this->theme, MaintenanceSetting::get('cms_page'));\n        }\n\n        /**\n         * @event cms.page.beforeDisplay\n         * Provides an opportunity to swap the page that gets displayed immediately after loading the page assigned to the URL.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.beforeDisplay', function ((\\Cms\\Classes\\Controller) $controller, (string) $url, (\\Cms\\Classes\\Page) $page) {\n         *         if ($url === '/tricked-you') {\n         *             return \\Cms\\Classes\\Page::loadCached('trick-theme-code', 'page-file-name');\n         *         }\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.beforeDisplay', function ((string) $url, (\\Cms\\Classes\\Page) $page) {\n         *         if ($url === '/tricked-you') {\n         *             return \\Cms\\Classes\\Page::loadCached('trick-theme-code', 'page-file-name');\n         *         }\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.beforeDisplay', [$url, $page])) {\n            if ($event instanceof Page) {\n                $page = $event;\n            }\n            else {\n                return $event;\n            }\n        }\n\n        // If the page was not found, render the 404 page - either provided by the theme or the built-in one.\n        if (!$page || $url === '404' || ($url === 'error' && !Config::get('app.debug', false))) {\n            if (!Request::ajax()) {\n                $this->setStatusCode(404);\n            }\n\n            // Log the 404 request\n            if (!App::runningUnitTests()) {\n                RequestLog::add();\n            }\n\n            if (!$page = $this->router->findByUrl('/404')) {\n                return Response::make(View::make('cms::404'), $this->statusCode);\n            }\n        }\n\n        // Run page in capture mode\n        if ($ajaxPartial = $this->getAjaxPartialName()) {\n            $result = $this->runPageCapture($page, $ajaxPartial);\n        }\n        // Run the page\n        else {\n            $result = $this->runPage($page);\n        }\n\n        // Post-processing raw content\n        if (is_string($result)) {\n            $result = $this->postProcessResult($page, $url, $result);\n        }\n\n        /**\n         * @event cms.page.display\n         * Provides an opportunity to modify the response after the page for the URL has been processed. `$result` could be a string representing the HTML to be returned or it could be a Response instance.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.display', function ((\\Cms\\Classes\\Controller) $controller, (string) $url, (\\Cms\\Classes\\Page) $page, (mixed) $result) {\n         *         if ($url === '/tricked-you') {\n         *             return Response::make('Boo!', 200);\n         *         }\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.display', function ((string) $url, (\\Cms\\Classes\\Page) $page, (mixed) $result) {\n         *         if ($url === '/tricked-you') {\n         *             return Response::make('Boo!', 200);\n         *         }\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.display', [$url, $page, $result])) {\n            $result = $event;\n        }\n\n        // Log the pageview with dashboard module\n        if ($originalPageFound && !App::runningUnitTests() && System::hasModule('Dashboard')) {\n            \\Dashboard\\Classes\\TrafficLogger::instance()->logPageview();\n        }\n\n        // Prepare and return response\n        // @see \\System\\Traits\\ResponseMaker\n        return $this->makeResponse($result);\n    }\n\n    /**\n     * render a page in its entirety, including component initialization.\n     * AJAX will be disabled for this process.\n     * @param string $pageFile Specifies the CMS page file name to run.\n     * @param array  $parameters  Routing parameters.\n     * @param \\Cms\\Classes\\Theme  $theme  Theme object\n     */\n    public static function render($pageFile, $parameters = [], $theme = null)\n    {\n        if (!$theme && (!$theme = Theme::getActiveTheme())) {\n            throw new CmsException(Lang::get('cms::lang.theme.active.not_found'));\n        }\n\n        $controller = new static($theme);\n        $controller->getRouter()->setParameters($parameters);\n\n        if (($page = Page::load($theme, $pageFile)) === null) {\n            throw new CmsException(Lang::get('cms::lang.page.not_found_name', ['name'=>$pageFile]));\n        }\n\n        return $controller->runPage($page, ['render' => true]);\n    }\n\n    /**\n     * runPage runs a page directly from its object and supplied parameters.\n     * @param \\Cms\\Classes\\Page $page\n     * @param array $options\n     * @return string\n     */\n    public function runPage($page, $options = [])\n    {\n        // Process options\n        extract(array_merge([\n            'capture' => false,\n            'render' => false\n        ], (array) $options));\n\n        $useAjax = !($capture || $render);\n\n        // If the page doesn't refer any layout, create the fallback layout.\n        // Otherwise load the layout specified in the page.\n        if (!$page->layout) {\n            $layout = Layout::initFallback($this->theme);\n        }\n        elseif (($layout = Layout::loadCached($this->theme, $page->layout)) === null) {\n            throw new CmsException(Lang::get('cms::lang.layout.not_found_name', ['name' => $page->layout]));\n        }\n\n        $this->page = $page;\n        $this->layout = $layout;\n        $this->pageCycled = false;\n\n        // The 'this' variable is reserved for default variables.\n        $this->vars['this'] = new ThisVariable([\n            'controller' => $this,\n            'page' => $this->page,\n            'layout' => $this->layout,\n            'theme' => $this->theme,\n            'param' => $this->router->getParameters(),\n            'environment' => fn() => App::environment(),\n            'request' => fn() => App::make('request'),\n            'session' => fn() => App::make('session')->driver(),\n            'site' => fn() => Site::getActiveSite(),\n            'locale' => fn() => App::getLocale(),\n\n            // @deprecated\n            'method' => fn() => Request::method(),\n        ]);\n\n        // Check for validation errors and old input in the session.\n        $this->vars['errors'] = (Config::get('session.driver') && Session::has('errors'))\n            ? Session::get('errors')\n            : new \\Illuminate\\Support\\ViewErrorBag;\n\n        $this->vars['oldInput'] = (Config::get('session.driver') && Session::hasOldInput())\n            ? Session::getOldInput()\n            : array_get($this->vars, 'oldInput', []);\n\n        // Handle AJAX requests and execute the life cycle functions\n        $this->initCustomObjects();\n\n        $this->initComponents();\n\n        // Give the layout and page an opportunity to participate\n        // after components are initialized and before AJAX is handled.\n        if ($this->layoutObj) {\n            CmsException::mask($this->layout, 300);\n            $this->layoutObj->onInit();\n            CmsException::unmask();\n        }\n\n        CmsException::mask($this->page, 300);\n        $this->pageObj->onInit();\n        CmsException::unmask();\n\n        /**\n         * @event cms.page.init\n         * Provides an opportunity to return a custom response from Controller->runPage() before AJAX handlers are executed\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.init', function ((\\Cms\\Classes\\Controller) $controller, (\\Cms\\Classes\\Page) $page) {\n         *         return \\Cms\\Classes\\Page::loadCached('trick-theme-code', 'page-file-name');\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.init', function ((\\Cms\\Classes\\Page) $page) {\n         *         return \\Cms\\Classes\\Page::loadCached('trick-theme-code', 'page-file-name');\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.init', [$page])) {\n            return $event;\n        }\n\n        // Execute AJAX event\n        if ($useAjax && ($ajaxResponse = $this->execAjaxHandlers())) {\n            return $ajaxResponse;\n        }\n\n        // Execute postback handler\n        if ($useAjax && ($handlerResponse = $this->execPostbackHandler())) {\n            return $handlerResponse;\n        }\n\n        // Execute page lifecycle\n        if ($cycleResponse = $this->execPageCycle()) {\n            return $cycleResponse;\n        }\n\n        // Parse dynamic attributes on templates and components\n        $this->parseAllEnvironmentVars();\n\n        /**\n         * @event cms.page.beforeRenderPage\n         * Fires after AJAX handlers are dealt with and provides an opportunity to modify the page contents\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.beforeRenderPage', function ((\\Cms\\Classes\\Controller) $controller, (\\Cms\\Classes\\Page) $page) {\n         *         return 'Custom page contents';\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.beforeRenderPage', function ((\\Cms\\Classes\\Page) $page) {\n         *         return 'Custom page contents';\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.beforeRenderPage', [$this->page])) {\n            $this->pageContents = $event;\n        }\n        // Render the page\n        elseif (!$this->layout->isPriority()) {\n            $this->pageContents = $this->renderPageContents();\n        }\n\n        // Render the layout\n        $result = $this->renderLayoutContents();\n\n        if (!$capture) {\n            return $result;\n        }\n    }\n\n    /**\n     * pageCycle invokes the current page cycle without rendering the page,\n     * used by AJAX handler that may rely on the logic inside the action.\n     */\n    public function pageCycle()\n    {\n        if (!$this->pageCycled) {\n            $this->execPageCycle();\n        }\n    }\n\n    /**\n     * execPageCycle executes the page life cycle.\n     * Creates an object from the PHP sections of the page and\n     * it's layout, then executes their life cycle functions.\n     */\n    protected function execPageCycle()\n    {\n        $this->pageCycled = true;\n\n        /**\n         * @event cms.page.start\n         * Fires before all of the page & layout lifecycle handlers are run\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.start', function ((\\Cms\\Classes\\Controller) $controller) {\n         *         return Response::make('Taking over the lifecycle!', 200);\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.start', function () {\n         *         return Response::make('Taking over the lifecycle!', 200);\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.start')) {\n            return $event;\n        }\n\n        // Run layout functions\n        if ($this->layoutObj) {\n            CmsException::mask($this->layout, 300);\n            $response = (\n                ($result = $this->layoutObj->onStart()) ||\n                ($result = $this->layout->runComponents()) ||\n                ($result = $this->layoutObj->onBeforePageStart())\n            ) ? $result : null;\n            CmsException::unmask();\n\n            if ($response) {\n                return $response;\n            }\n        }\n\n        // Run page functions\n        CmsException::mask($this->page, 300);\n        $response = (\n            ($result = $this->pageObj->onStart()) ||\n            ($result = $this->page->runComponents()) ||\n            ($result = $this->pageObj->onEnd())\n        ) ? $result : null;\n        CmsException::unmask();\n\n        if ($response) {\n            return $response;\n        }\n\n        // Run remaining layout functions\n        if ($this->layoutObj) {\n            CmsException::mask($this->layout, 300);\n            $response = ($result = $this->layoutObj->onEnd()) ? $result : null;\n            CmsException::unmask();\n        }\n\n        /**\n         * @event cms.page.end\n         * Fires after all of the page & layout lifecycle handlers are run\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.end', function ((\\Cms\\Classes\\Controller) $controller) {\n         *         return Response::make('Taking over the lifecycle!', 200);\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.end', function () {\n         *         return Response::make('Taking over the lifecycle!', 200);\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.end')) {\n            return $event;\n        }\n\n        return $response;\n    }\n\n    /**\n     * postProcessResult post-processes page HTML code before it's sent to the client.\n     * Note for pre-processing see cms.template.processTwigContent event.\n     * @param \\Cms\\Classes\\Page $page Specifies the current CMS page.\n     * @param string $url Specifies the current URL.\n     * @param string $content The page markup to post-process.\n     * @return string Returns the updated result string.\n     */\n    protected function postProcessResult($page, $url, $content)\n    {\n        /**\n         * @event cms.page.postProcessContent\n         * Provides opportunity to hook into the post-processing of page HTML code before being sent to the client.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.postProcessContent', function ((\\Cms\\Classes\\Controller) $controller, (string) $url, (\\Cms\\Classes\\Page) $page, (string) &$content) {\n         *         $content = str_replace('<a href=', '<a rel=\"nofollow\" href=', $content);\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.postProcessContent', function ((string) $url, (\\Cms\\Classes\\Page) $page, (string) &$content) {\n         *         $content = 'My custom content';\n         *     });\n         *\n         */\n        $this->fireSystemEvent('cms.page.postProcessContent', [$url, $page, &$content]);\n\n        // @deprecated this event will be removed in a later version\n        $dataHolder = (object) ['content' => $content];\n        $this->fireSystemEvent('cms.page.postprocess', [$url, $page, $dataHolder]);\n        $content = $dataHolder->content;\n\n        return $content;\n    }\n\n    //\n    // Initialization\n    //\n\n    /**\n     * initTwigEnvironment initializes the Twig environment and loader.\n     * Registers the \\Cms\\Twig\\Extension object with Twig.\n     * @return void\n     */\n    protected function initTwigEnvironment()\n    {\n        $useCache = Config::get('cms.enable_twig_cache', true);\n        $isDebugMode = System::checkDebugMode();\n        $strictVariables = Config::get('cms.strict_variables', false);\n        $forceBytecode = Config::get('cms.force_bytecode_invalidation', false);\n\n        $options = [\n            'auto_reload' => true,\n            'debug' => $isDebugMode,\n            'strict_variables' => $strictVariables,\n        ];\n\n        if ($useCache) {\n            $options['cache'] = new TwigCacheFilesystem(\n                storage_path().'/cms/twig',\n                $forceBytecode ? TwigCacheFilesystem::FORCE_BYTECODE_INVALIDATION : 0\n            );\n        }\n\n        $loader = new TwigLoader;\n        $twig = new TwigEnvironment($loader, $options);\n\n        CmsTwigExtension::addExtensionToTwig($twig, $this);\n        SystemTwigExtension::addExtensionToTwig($twig);\n        TwigSecurityPolicy::addExtensionToTwig($twig);\n        DebugExtension::addExtensionToTwig($twig);\n\n        $this->loader = $loader;\n        $this->twig = $twig;\n    }\n\n    /**\n     * initCustomObjects initializes the custom layout and page objects.\n     * @return void\n     */\n    protected function initCustomObjects()\n    {\n        $this->layoutObj = null;\n\n        if (!$this->layout->isFallBack()) {\n            CmsException::mask($this->layout, 300);\n            $parser = new CodeParser($this->layout);\n            $this->layoutObj = $parser->source($this->page, $this->layout, $this);\n            CmsException::unmask();\n        }\n\n        CmsException::mask($this->page, 300);\n        $parser = new CodeParser($this->page);\n        $this->pageObj = $parser->source($this->page, $this->layout, $this);\n        CmsException::unmask();\n    }\n\n    /**\n     * initComponents initializes the components for the layout and page.\n     * @return void\n     */\n    protected function initComponents()\n    {\n        if (!$this->layout->isFallBack()) {\n            foreach ($this->layout->settings['components'] as $component => $properties) {\n                [$name, $alias] = strpos($component, ' ')\n                    ? explode(' ', $component)\n                    : [$component, $component];\n\n                $this->addComponent($name, $alias, $properties, true);\n            }\n        }\n\n        foreach ($this->page->settings['components'] as $component => $properties) {\n            [$name, $alias] = strpos($component, ' ')\n                ? explode(' ', $component)\n                : [$component, $component];\n\n            $this->addComponent($name, $alias, $properties);\n        }\n\n        /**\n         * @event cms.page.initComponents\n         * Fires after the components for the given page have been initialized\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.initComponents', function ((\\Cms\\Classes\\Controller) $controller, (\\Cms\\Classes\\Page) $page, (\\Cms\\Classes\\Layout) $layout) {\n         *         \\Log::info($page->title . ' components have been initialized');\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.initComponents', function ((\\Cms\\Classes\\Page) $page, (\\Cms\\Classes\\Layout) $layout) {\n         *         \\Log::info($page->title . ' components have been initialized');\n         *     });\n         *\n         */\n        $this->fireSystemEvent('cms.page.initComponents', [$this->page, $this->layout]);\n    }\n\n    //\n    // Page Helpers\n    //\n\n    /**\n     * pageUrl looks up the URL for a supplied page name and returns it relative to the website root,\n     * including route parameters. Parameters can be persisted from the current page parameters.\n     * @param string|null $name\n     * @param array $parameters\n     * @param bool $routePersistence\n     * @return string\n     */\n    public function pageUrl($name = null, $parameters = [], $routePersistence = true)\n    {\n        if (!$name) {\n            return $this->currentPageUrl($parameters, $routePersistence);\n        }\n\n        // Invalid input same as not found\n        if (!is_string($name)) {\n            return null;\n        }\n\n        // Second parameter can act as third\n        if (is_bool($parameters)) {\n            $routePersistence = $parameters;\n        }\n\n        if (!is_array($parameters)) {\n            $parameters = [];\n        }\n\n        if ($routePersistence) {\n            $parameters = array_merge($this->router->getParameters(), $parameters);\n        }\n\n        if (!$url = $this->router->findByFile($name, $parameters)) {\n            return null;\n        }\n\n        return Cms::url($url);\n    }\n\n    /**\n     * currentPageUrl looks up the current page URL with supplied parameters and route persistence.\n     * @param array $parameters\n     * @param bool $routePersistence\n     * @return null|string\n     */\n    public function currentPageUrl($parameters = [], $routePersistence = true)\n    {\n        if (!$currentFile = $this->page->getFileName()) {\n            return null;\n        }\n\n        return $this->pageUrl($currentFile, $parameters, $routePersistence);\n    }\n\n    /**\n     * themeUrl converts supplied URL to a theme URL relative to the website root, if the URL\n     * provided is an array then the files will be combined\n     */\n    public function themeUrl($url = null): string\n    {\n        if (is_array($url)) {\n            return $this->combineAssets($url);\n        }\n\n        $themeUrl = $this->getThemeAssetUrl($url);\n        if (Config::get('system.themes_asset_url')) {\n            return $themeUrl;\n        }\n\n        return Url::toRelative($themeUrl);\n    }\n\n    /**\n     * param returns a routing parameter.\n     * @param string $name Routing parameter name.\n     * @param string $default Default to use if none is found.\n     * @return string\n     */\n    public function param($name, $default = null)\n    {\n        return $this->router->getParameter($name, $default);\n    }\n\n    //\n    // Getters\n    //\n\n    /**\n     * getController returns an existing instance of the controller.\n     * If the controller doesn't exists, returns null.\n     * @return self|null\n     */\n    public static function getController()\n    {\n        return self::$instance;\n    }\n\n    /**\n     * getTheme returns the current CMS theme.\n     * @return \\Cms\\Classes\\Theme\n     */\n    public function getTheme()\n    {\n        return $this->theme;\n    }\n\n    /**\n     * getTwig returns the Twig environment.\n     * @return TwigEnvironment\n     */\n    public function getTwig()\n    {\n        return $this->twig;\n    }\n\n    /**\n     * getLoader returns the Twig loader.\n     * @return \\Cms\\Twig\\Loader\n     */\n    public function getLoader()\n    {\n        return $this->loader;\n    }\n\n    /**\n     * getRouter returns the routing object.\n     * @return \\Cms\\Classes\\Router\n     */\n    public function getRouter()\n    {\n        return $this->router;\n    }\n\n    /**\n     * getPageObject is intended to be called from the layout, returns the page code base object.\n     * @return \\Cms\\Classes\\CodeBase\n     */\n    public function getPageObject()\n    {\n        return $this->pageObj;\n    }\n\n    /**\n     * getPage returns the CMS page object being processed by the controller.\n     * The object is not available on the early stages of the controller\n     * initialization.\n     * @return \\Cms\\Classes\\Page Returns the Page object or null.\n     */\n    public function getPage()\n    {\n        return $this->page;\n    }\n\n    /**\n     * getLayoutObject is intended to be called from the page, returns the layout code base object.\n     * @return \\Cms\\Classes\\CodeBase\n     */\n    public function getLayoutObject()\n    {\n        return $this->layoutObj;\n    }\n\n    /**\n     * getLayout returns the CMS layout object being processed by the controller.\n     * The object is not available on the early stages of the controller\n     * initialization.\n     * @return \\Cms\\Classes\\Layout Returns the Layout object or null.\n     */\n    public function getLayout()\n    {\n        return $this->layout;\n    }\n\n    /**\n     * getPartialObject returns the active partial object from the current context\n     * @return \\Cms\\Classes\\CodeBase\n     */\n    public function getPartialObject()\n    {\n        return $this->partialStack ? $this->partialStack->getPartialObj() : null;\n    }\n\n    //\n    // Setters\n    //\n\n    /**\n     * inComponentContext runs a callback in component context\n     */\n    public function inComponentContext(?ComponentBase $component = null, ?callable $callback = null)\n    {\n        $previousContext = $this->componentContext;\n\n        $this->componentContext = $component;\n\n        $result = $callback ? $callback() : $callback;\n\n        $this->componentContext = $previousContext;\n\n        return $result;\n    }\n\n    /**\n     * @deprecated\n     */\n    public function setComponentContext(?ComponentBase $component = null)\n    {\n        $this->componentContext = $component;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/EditorExtension.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Lang;\nuse BackendAuth;\nuse SystemException;\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Asset;\nuse Editor\\Classes\\ExtensionBase;\nuse Backend\\VueComponents\\TreeView\\SectionList;\nuse Backend\\VueComponents\\DropdownMenu\\ItemDefinition;\nuse Exception;\n\n/**\n * EditorExtension adds CMS objects to October Editor IDE\n */\nclass EditorExtension extends ExtensionBase\n{\n    use \\Cms\\Classes\\EditorExtension\\HasExtensionState;\n    use \\Cms\\Classes\\EditorExtension\\HasExtensionAssetsState;\n    use \\Cms\\Classes\\EditorExtension\\HasComponentListLoader;\n    use \\Cms\\Classes\\EditorExtension\\HasExtensionCrud;\n    use \\Cms\\Classes\\EditorExtension\\HasExtensionAssetsCrud;\n    use \\Cms\\Classes\\EditorExtension\\HasIntellisense;\n    use \\Cms\\Classes\\EditorExtension\\HasExtensionThemesState;\n    use \\Cms\\Classes\\EditorExtension\\HasExtensionThemeCrud;\n    use \\Cms\\Classes\\EditorExtension\\HasExtensionExtensibility;\n\n    const DOCUMENT_TYPE_PAGE = 'cms-page';\n    const DOCUMENT_TYPE_LAYOUT = 'cms-layout';\n    const DOCUMENT_TYPE_PARTIAL = 'cms-partial';\n    const DOCUMENT_TYPE_CONTENT = 'cms-content';\n    const DOCUMENT_TYPE_ASSET = 'cms-asset';\n\n    const ICON_COLOR_PAGE = '#6A6CF7';\n    const ICON_COLOR_PARTIAL = '#9ACD43';\n    const ICON_COLOR_LAYOUT = '#5FA75F';\n    const ICON_COLOR_CONTENT = '#9D54A1';\n    const ICON_COLOR_ASSET = '#E75252';\n\n    const DOCUMENT_TYPE_PERMISSIONS = [\n        EditorExtension::DOCUMENT_TYPE_PAGE => ['editor.cms_pages'],\n        EditorExtension::DOCUMENT_TYPE_PARTIAL => ['editor.cms_partials'],\n        EditorExtension::DOCUMENT_TYPE_LAYOUT => ['editor.cms_layouts'],\n        EditorExtension::DOCUMENT_TYPE_CONTENT => ['editor.cms_content'],\n        EditorExtension::DOCUMENT_TYPE_ASSET => ['editor.cms_assets']\n    ];\n\n    /**\n     * @var bool cachedEditTheme\n     */\n    protected $cachedEditTheme = false;\n\n    /**\n     * getNamespace returns unique extension namespace\n     */\n    public function getNamespace(): string\n    {\n        return 'cms';\n    }\n\n    /**\n     * Returns a list of JavaScript files required for the extension.\n     * @return array Returns an associative array of JavaScript file paths and attributes.\n     */\n    public function listJsFiles()\n    {\n        return [\n            '/modules/cms/assets/js/cms.editor.extension.js'\n        ];\n    }\n\n    /**\n     * getClientSideLangStrings returns a list of language strings required by the\n     * client-side extension controller.\n     * @return array\n     */\n    public function getClientSideLangStrings()\n    {\n        return [\n            'cms::lang.page.editor_markup',\n            'cms::lang.page.editor_code',\n            'cms::lang.template.saved',\n            'cms::lang.template.reloaded',\n            'cms::lang.template.deleted',\n            'cms::lang.editor.preview',\n            'cms::lang.editor.layout',\n            'cms::lang.editor.page',\n            'cms::lang.editor.partial',\n            'cms::lang.editor.asset',\n            'cms::lang.page.no_layout',\n            'cms::lang.editor.info',\n            'cms::lang.template.storage_filesystem',\n            'cms::lang.template.storage_database',\n            'cms::lang.template.last_modified',\n            'cms::lang.template.storage',\n            'cms::lang.template.template_file',\n            'cms::lang.template.saved_to_db',\n            'cms::lang.template.update_file',\n            'cms::lang.template.reset_from_file',\n            'cms::lang.editor.component_list',\n            'cms::lang.template.file_updated',\n            'cms::lang.template.reset_from_template_success',\n            'cms::lang.intellisense.learn_more',\n            'cms::lang.component.expand_partial',\n            'cms::lang.content.editor_content',\n            'cms::lang.asset.rename',\n            'cms::lang.asset.delete',\n            'cms::lang.asset.new',\n            'cms::lang.asset.moving',\n            'cms::lang.asset.moved',\n            'cms::lang.asset.saved',\n            'cms::lang.asset.deleted',\n            'cms::lang.asset.upload_files',\n            'cms::lang.asset.open',\n            'cms::lang.asset.create_directory',\n            'cms::lang.editor.change_edit_theme',\n            'cms::lang.editor.edit_theme_saved_changed_tabs',\n            'cms::lang.theme.setting_edit_theme',\n            'cms::lang.theme.edit_theme_changed',\n            'backend::lang.form.save',\n            'backend::lang.form.delete',\n        ];\n    }\n\n    /**\n     * Returns a list of Vue components required for the extension.\n     * @return array Array of Vue component class names\n     */\n    public function listVueComponents()\n    {\n        return [\n            // Important - load modules that use `define()` before Monaco. Monaco pollutes\n            // the global space and breaks `define()`.\n            // See https://github.com/microsoft/vscode-loader/issues/19#issuecomment-439810640\n            //\n            \\Backend\\VueComponents\\DocumentMarkdownEditor::class,\n            \\Backend\\VueComponents\\RichEditorDocumentConnector::class,\n\n            \\Cms\\VueComponents\\PageEditor::class,\n            \\Cms\\VueComponents\\PartialEditor::class,\n            \\Cms\\VueComponents\\LayoutEditor::class,\n            \\Cms\\VueComponents\\ContentEditor::class,\n            \\Cms\\VueComponents\\AssetEditor::class,\n            \\Cms\\VueComponents\\CmsComponentListPopup::class\n        ];\n    }\n\n    /**\n     * Initializes extension's sidebar Navigator sections.\n     */\n    public function listNavigatorSections(SectionList $sectionList, $documentType = null)\n    {\n        $user = BackendAuth::getUser();\n\n        $editTheme = $this->getTheme();\n        $sectionTitle = 'CMS';\n        if ($editTheme) {\n            $sectionTitle .= ' - '.$editTheme->getConfigValue('name', $editTheme->getDirName());\n        }\n        else {\n            $sectionTitle .= ' - '.__('No themes found');\n        }\n\n        $cmsSection = $sectionList->addSection($sectionTitle, 'cms');\n\n        if (!$editTheme) {\n            return;\n        }\n\n        $this->addSectionMenuItems($cmsSection);\n\n        if (\n            EditorExtension::hasAccessToDocType($user, self::DOCUMENT_TYPE_PAGE) &&\n            (!$documentType || $documentType === self::DOCUMENT_TYPE_PAGE)\n        ) {\n            $this->addPagesNavigatorNodes($this->getTheme(), $cmsSection);\n        }\n\n        if (\n            EditorExtension::hasAccessToDocType($user, self::DOCUMENT_TYPE_PARTIAL) &&\n            (!$documentType || $documentType === self::DOCUMENT_TYPE_PARTIAL)\n        ) {\n            $this->addPartialsNavigatorNodes($this->getTheme(), $cmsSection);\n        }\n\n        if (\n            EditorExtension::hasAccessToDocType($user, self::DOCUMENT_TYPE_LAYOUT) &&\n            (!$documentType || $documentType === self::DOCUMENT_TYPE_LAYOUT)\n        ) {\n            $this->addLayoutsNavigatorNodes($this->getTheme(), $cmsSection);\n        }\n\n        if (\n            EditorExtension::hasAccessToDocType($user, self::DOCUMENT_TYPE_CONTENT) &&\n            (!$documentType || $documentType === self::DOCUMENT_TYPE_CONTENT)\n        ) {\n            $this->addContentNavigatorNodes($this->getTheme(), $cmsSection);\n        }\n\n        if (\n            EditorExtension::hasAccessToDocType($user, self::DOCUMENT_TYPE_ASSET) &&\n            (!$documentType || $documentType === self::DOCUMENT_TYPE_ASSET)\n        ) {\n            $this->addAssetsNavigatorNodes($this->getTheme(), $cmsSection);\n        }\n    }\n\n    /**\n     * getCustomData returns custom state data required for the extension client-side controller\n     */\n    public function getCustomData(): array\n    {\n        $user = BackendAuth::getUser();\n        $theme = $this->getTheme();\n\n        return [\n            'layouts' => $this->loadLayoutsForUiLists($theme, $user),\n            'partials' => $this->loadPartialsForUiLists($theme, $user),\n            'assets' => $this->loadAssetsForUiLists($theme, $user),\n            'pages' => $this->loadPagesForUiLists($theme, $user),\n            'content' => $this->loadContentForUiLists($theme, $user),\n            'components' => $this->loadComponentsForUiLists(),\n            'canManagePages' => $user->hasAnyAccess(['editor.cms_pages']),\n            'canManagePartials' => $user->hasAnyAccess(['editor.cms_partials']),\n            'canManageContent' => $user->hasAnyAccess(['editor.cms_content']),\n            'canManageAssets' => $user->hasAnyAccess(['editor.cms_assets']),\n            'editableAssetExtensions' => Asset::getEditableExtensions(),\n            'databaseTemplatesEnabled' => $theme ? $theme->secondLayerEnabled() : false,\n            'assetExtensionList' => $this->getAssetExtensionListInitialState(),\n            'intellisense' => [\n                'octoberTags' => $this->intellisenseLoadOctoberTags(),\n                'twigFilters' => $this->intellisenseLoadTwigFilters()\n            ],\n            'theme' => $theme ? $theme->getDirName() : null,\n            'customToolbarSettingsButtons' => $this->getToolbarCustomSettingsButtons()\n        ];\n    }\n\n    /**\n     * getNewDocumentsData\n     * @return array\n     */\n    public function getNewDocumentsData()\n    {\n        return [\n            EditorExtension::DOCUMENT_TYPE_PAGE => $this->getCmsPageNewDocumentData(),\n            EditorExtension::DOCUMENT_TYPE_PARTIAL => $this->getCmsPartialNewDocumentData(),\n            EditorExtension::DOCUMENT_TYPE_LAYOUT => $this->getCmsLayoutNewDocumentData(),\n            EditorExtension::DOCUMENT_TYPE_CONTENT => $this->getCmsContentNewDocumentData(),\n            EditorExtension::DOCUMENT_TYPE_ASSET => $this->getCmsAssetNewDocumentData()\n        ];\n    }\n\n    /**\n     * getSettingsForms\n     * @return array\n     */\n    public function getSettingsForms()\n    {\n        return [\n            EditorExtension::DOCUMENT_TYPE_PAGE => $this->loadAndExtendCmsSettingsFields(\\Cms\\Classes\\Page\\Fields::class, 'page'),\n            EditorExtension::DOCUMENT_TYPE_PARTIAL => $this->loadAndExtendCmsSettingsFields(\\Cms\\Classes\\Partial\\Fields::class, 'partial'),\n            EditorExtension::DOCUMENT_TYPE_LAYOUT => $this->loadAndExtendCmsSettingsFields(\\Cms\\Classes\\Layout\\Fields::class, 'layout')\n        ];\n    }\n\n    /**\n     * hasAccessToDocType\n     * @return array\n     */\n    public static function hasAccessToDocType($user, $documentType)\n    {\n        if (!array_key_exists($documentType, EditorExtension::DOCUMENT_TYPE_PERMISSIONS)) {\n            throw new SystemException(sprintf('Unknown document type: %s', $documentType));\n        }\n\n        return $user->hasAnyAccess(EditorExtension::DOCUMENT_TYPE_PERMISSIONS[$documentType]);\n    }\n\n    /**\n     * getTheme returns the theme object to use for the editor\n     */\n    protected function getTheme()\n    {\n        if ($this->cachedEditTheme !== false) {\n            return $this->cachedEditTheme;\n        }\n\n        // Locate edit theme\n        try {\n            if ($editTheme = Theme::getEditTheme()) {\n                return $this->cachedEditTheme = $editTheme;\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        // Locate active theme\n        try {\n            if ($activeTheme = Theme::getActiveTheme()) {\n                return $this->cachedEditTheme = $activeTheme;\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        // Use first theme\n        $themes = Theme::all();\n        foreach ($themes as $theme) {\n            return $this->cachedEditTheme = $theme;\n        }\n\n        // Nothing\n        return $this->cachedEditTheme = null;\n    }\n\n    private function addSectionMenuItems($section)\n    {\n        $user = BackendAuth::getUser();\n\n        $section->addMenuItem(ItemDefinition::TYPE_TEXT, Lang::get('cms::lang.editor.refresh'), 'cms:refresh-navigator')\n            ->setIcon('icon-refresh');\n\n        $createMenuItem = new ItemDefinition(ItemDefinition::TYPE_TEXT, Lang::get('cms::lang.editor.create'), 'cms:create');\n        $createMenuItem->setIcon('icon-create');\n        $menuConfiguration = [\n            'editor.cms_pages' => [\n                'label' => 'cms::lang.editor.page',\n                'document' => EditorExtension::DOCUMENT_TYPE_PAGE\n            ],\n            'editor.cms_partials' => [\n                'label' => 'cms::lang.editor.partial',\n                'document' => EditorExtension::DOCUMENT_TYPE_PARTIAL\n            ],\n            'editor.cms_layouts' => [\n                'label' => 'cms::lang.editor.layout',\n                'document' => EditorExtension::DOCUMENT_TYPE_LAYOUT\n            ],\n            'editor.cms_content' => [\n                'label' => 'cms::lang.editor.content',\n                'document' => EditorExtension::DOCUMENT_TYPE_CONTENT\n            ],\n            'editor.cms_assets' => [\n                'label' => 'cms::lang.editor.asset',\n                'document' => EditorExtension::DOCUMENT_TYPE_ASSET\n            ]\n        ];\n\n        foreach ($menuConfiguration as $permission => $itemConfig) {\n            if (!$user->hasAnyAccess([$permission])) {\n                continue;\n            }\n\n            $createMenuItem->addItemObject(\n                $section->addCreateMenuItem(\n                    ItemDefinition::TYPE_TEXT,\n                    Lang::get($itemConfig['label']),\n                    'cms:create-document@'.$itemConfig['document']\n                )\n            );\n        }\n\n        if ($createMenuItem->hasItems()) {\n            $section->addMenuItemObject($createMenuItem);\n        }\n\n        $this->createCmsSectionThemeMenuItems($section);\n    }\n\n    /**\n     * getAssetsPath returns the asset path for a theme\n     * @param $theme Theme\n     * @return string\n     */\n    public function getAssetsPath($theme = null)\n    {\n        if (!$theme) {\n            $theme = Theme::getActiveTheme();\n        }\n\n        return $theme->getPath() . '/assets';\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Layout.php",
    "content": "<?php namespace Cms\\Classes;\n\n/**\n * Layout template class\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Layout extends CmsCompoundObject\n{\n    use \\Cms\\Traits\\ParsableAttributes;\n\n    /**\n     * Fallback layout name.\n     */\n    const FALLBACK_FILE_NAME = 'fallback';\n\n    /**\n     * @var string The container name associated with the model, eg: pages.\n     */\n    protected $dirName = 'layouts';\n\n    /**\n     * @var array The attributes that are mass assignable.\n     */\n    protected $fillable = [\n        'description',\n        'is_priority',\n        'markup',\n        'settings',\n        'code'\n    ];\n\n    /**\n     * @var array parsable attributes support using parsed variables.\n     */\n    protected $parsable = [];\n\n    /**\n     * beforeValidate applies custom validation rules\n     */\n    public function beforeValidate()\n    {\n        // Wipe priority attribute from page settings\n        if (!$this->getAttribute('is_priority')) {\n            unset($this->attributes['is_priority']);\n        }\n    }\n\n    /**\n     * Initializes the fallback layout.\n     * @param \\Cms\\Classes\\Theme $theme Specifies a theme the file belongs to.\n     * @return \\Cms\\Classes\\Layout\n     */\n    public static function initFallback($theme)\n    {\n        $obj = self::inTheme($theme);\n        $obj->markup = '{% page %}';\n        $obj->fileName = self::FALLBACK_FILE_NAME;\n        return $obj;\n    }\n\n    /**\n     * isFallBack returns true if the layout is a fallback layout\n     * @return bool\n     */\n    public function isFallBack()\n    {\n        return $this->fileName === self::FALLBACK_FILE_NAME;\n    }\n\n    /**\n     * isPriority returns true if the layout should take priority in the load order\n     * @return bool\n     */\n    public function isPriority(): bool\n    {\n        return (bool) $this->is_priority;\n    }\n\n    /**\n     * Returns name of a PHP class to us a parent for the PHP class created for the object's PHP section.\n     * @return mixed Returns the class name or null.\n     */\n    public function getCodeClassParent()\n    {\n        return LayoutCode::class;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/LayoutCode.php",
    "content": "<?php namespace Cms\\Classes;\n\n/**\n * Parent class for PHP classes created for layout PHP sections.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass LayoutCode extends CodeBase\n{\n    /**\n     * This event is triggered after the layout components are executed,\n     * but before the page's onStart event.\n     */\n    public function onBeforePageStart()\n    {\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Meta.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Yaml;\n\n/**\n * Meta is used for interacting with YAML files\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges, Luke Towers\n */\nclass Meta extends CmsObject\n{\n    /**\n     * @var string dirName associated with the model, eg: pages.\n     */\n    protected $dirName = 'meta';\n\n    /**\n     * @var array contentDataCache store used by parseContent method.\n     */\n    protected $contentDataCache;\n\n    /**\n     * @var array allowedExtensions as file extensions.\n     */\n    protected $allowedExtensions = ['yaml'];\n\n    /**\n     * @var string defaultExtension as file extension.\n     */\n    protected $defaultExtension = 'yaml';\n\n    /**\n     * {@inheritDoc}\n     */\n    public function __construct()\n    {\n        parent::__construct(...func_get_args());\n\n        // Bind data processing to model events\n        $this->bindEvent('model.beforeSave', function () {\n            $this->content = $this->renderContent();\n        });\n\n        $this->bindEvent('model.afterFetch', function () {\n            $this->setRawAttributes(array_merge($this->attributes, $this->parseContent()), true);\n        });\n    }\n\n    /**\n     * parseContent processes the content attribute to an array of menu data.\n     * @return array|null\n     */\n    protected function parseContent()\n    {\n        if ($this->contentDataCache !== null) {\n            return $this->contentDataCache;\n        }\n\n        $parsedData = Yaml::parse($this->content);\n\n        if (!is_array($parsedData)) {\n            return null;\n        }\n\n        return $this->contentDataCache = $parsedData;\n    }\n\n    /**\n     * renderContent (meta data) as a content string in YAML format.\n     * @return string\n     */\n    protected function renderContent()\n    {\n        return Yaml::render($this->settings);\n    }\n\n    /**\n     * toCompiled the content for this CMS object, used by the theme logger.\n     * @return string\n     */\n    public function toCompiled()\n    {\n        return $this->renderContent();\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Page.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Cms;\nuse Site;\nuse Lang;\nuse Cms\\Models\\PageLookupItem;\nuse October\\Rain\\Router\\Helper as RouterHelper;\nuse October\\Rain\\Filesystem\\Definitions as FileDefinitions;\nuse ApplicationException;\nuse ValidationException;\n\n/**\n * Page template class\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Page extends CmsCompoundObject\n{\n    use \\Cms\\Traits\\ParsableAttributes;\n\n    /**\n     * @var string dirName associated with the model, eg: pages.\n     */\n    protected $dirName = 'pages';\n\n    /**\n     * @var array The attributes that are mass assignable.\n     */\n    protected $fillable = [\n        'url',\n        'layout',\n        'title',\n        'description',\n        'is_hidden',\n        'meta_title',\n        'meta_description',\n        'meta_image',\n        'meta_type',\n        'meta_robots',\n        'markup',\n        'settings',\n        'code'\n    ];\n\n    /**\n     * @var array parsable attributes support using parsed variables.\n     */\n    protected $parsable = [\n        'meta_title',\n        'meta_description',\n        'meta_image',\n    ];\n\n    /**\n     * @var array The API bag allows the API handler code to bind arbitrary\n     * data to the page object.\n     */\n    public $apiBag = [];\n\n    /**\n     * @var array rules to be applied to the data.\n     */\n    public $rules = [\n        'title' => 'required',\n        'url' => 'required',\n    ];\n\n    /**\n     * beforeValidate applies custom validation rules\n     */\n    public function beforeValidate()\n    {\n        if (!RouterHelper::validateUrl($this->getAttribute('url'))) {\n            throw new ValidationException(['url' => Lang::get('cms::lang.page.invalid_url')]);\n        }\n    }\n\n    /**\n     * getCodeClassParent returns name of a PHP class to us a parent for the PHP class\n     * created for the object's PHP section.\n     * @return mixed Returns the class name or null.\n     */\n    public function getCodeClassParent()\n    {\n        return PageCode::class;\n    }\n\n    /**\n     * getLayoutOptions returns a list of layouts available in the theme.\n     * This method is used by the form widget.\n     * @return array Returns an array of strings.\n     */\n    public function getLayoutOptions()\n    {\n        if (!($theme = Theme::getEditTheme())) {\n            throw new ApplicationException(Lang::get('cms::lang.theme.edit.not_found'));\n        }\n\n        $layouts = Layout::listInTheme($theme, true);\n        $result = [];\n        $result[''] = Lang::get('cms::lang.page.no_layout');\n\n        foreach ($layouts as $layout) {\n            $baseName = $layout->getBaseFileName();\n\n            if (FileDefinitions::isPathIgnored($baseName)) {\n                continue;\n            }\n\n            $result[$baseName] = strlen($layout->name) ? $layout->name : $baseName;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getNameList helper that returns a nicer list of pages for use in dropdowns.\n     * @return array\n     */\n    public static function getNameList()\n    {\n        $result = [];\n        $pages = self::sortBy('baseFileName')->all();\n        foreach ($pages as $page) {\n            $result[$page->baseFileName] = $page->title . ' (' . $page->baseFileName . ')';\n        }\n\n        return $result;\n    }\n\n    /**\n     * getMenuTypeInfo handler for the pages.menuitem.getTypeInfo event.\n     * Returns a menu item type information. The type information is returned as array\n     * with the following elements:\n     * - references - a list of the item type reference options. The options are returned in the\n     *   [\"key\"] => \"title\" format for options that don't have sub-options, and in the format\n     *   [\"key\"] => [\"title\"=>\"Option title\", \"items\"=>[...]] for options that have sub-options. Optional,\n     *   required only if the menu item type requires references.\n     * - nesting - Boolean value indicating whether the item type supports nested items. Optional,\n     *   false if omitted.\n     * - dynamicItems - Boolean value indicating whether the item type could generate new menu items.\n     *   Optional, false if omitted.\n     * - cmsPages - a list of CMS pages (objects of the Cms\\Classes\\Page class), if the item type requires\n     *   a CMS page reference to resolve the item URL.\n     * @param string $type Specifies the menu item type\n     * @return array Returns an array\n     */\n    public static function getMenuTypeInfo(string $type)\n    {\n        $result = [];\n\n        if ($type === 'cms-page') {\n            $theme = Theme::getActiveTheme();\n            $pages = self::listInTheme($theme, true);\n            $references = [];\n\n            foreach ($pages as $page) {\n                $references[$page->getBaseFileName()] = $page->title . ' (' . $page->getBaseFileName() . ')';\n            }\n\n            $result = [\n                'references' => $references,\n            ];\n        }\n\n        return $result;\n    }\n\n    /**\n     * resolveMenuItem handler for the pages.menuitem.resolveItem event.\n     * Returns information about a menu item. The result is an array\n     * with the following keys:\n     * - url - the menu item URL. Not required for menu item types that return all available records.\n     *   The URL should be returned relative to the website root and include the subdirectory, if any.\n     *   Use the Url::to() helper to generate the URLs.\n     * - isActive - determines whether the menu item is active. Not required for menu item types that\n     *   return all available records.\n     * - items - an array of arrays with the same keys (url, isActive, items) + the title key.\n     *   The items array should be added only if the $item's $nesting property value is TRUE.\n     * @param \\Cms\\Models\\PageLookupItem $item Specifies the menu item.\n     * @param string $url Specifies the current page URL, normalized, in lower case\n     * @param \\Cms\\Classes\\Theme $theme Specifies the current theme.\n     * The URL is specified relative to the website root, it includes the subdirectory name, if any.\n     * @return mixed Returns an array. Returns null if the item cannot be resolved.\n     */\n    public static function resolveMenuItem($item, string $url, Theme $theme)\n    {\n        if ($item->type !== 'cms-page' || !$item->reference) {\n            return null;\n        }\n\n        $page = self::loadCached($theme, $item->reference);\n\n        $params = PageLookupItem::extractUrlParams($item->attributes ?? []);\n\n        $pageUrl = Cms::pageUrl($item->reference, $params);\n\n        $result = [];\n        $result['url'] = $pageUrl;\n        $result['isActive'] = $pageUrl == $url;\n        $result['mtime'] = $page ? $page->mtime : null;\n\n        if ($item->sites) {\n            $sites = [];\n            if (Site::hasMultiSite()) {\n                foreach (Site::listEnabled() as $site) {\n                    $sites[] = [\n                        'url' => Cms::siteUrl($page, $site),\n                        'id' => $site->id,\n                        'code' => $site->code,\n                        'locale' => $site->hard_locale,\n                    ];\n                }\n            }\n\n            $result['sites'] = $sites;\n        }\n\n        return $result;\n    }\n\n    /**\n     * @deprecated use \\Cms::pageUrl(...)\n     */\n    public static function url($page, array $params = [])\n    {\n        return (Controller::getController() ?: new Controller)->pageUrl($page, $params, true);\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/PageCode.php",
    "content": "<?php namespace Cms\\Classes;\n\n/**\n * Parent class for PHP classes created for page PHP sections.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PageCode extends CodeBase\n{\n}\n"
  },
  {
    "path": "modules/cms/classes/PageManager.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse File;\nuse Event;\nuse Cms\\Classes\\Theme;\nuse Cms\\Models\\PageLookupItem;\nuse Cms\\Classes\\Controller as CmsController;\n\n/**\n * PageManager provides abstraction level for the page lookup operations.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PageManager\n{\n    /**\n     * url is a helper that makes a URL for a page lookup item.\n     * Optional params are merged and used during URL resolution.\n     */\n    public static function url($address, $params = []): string\n    {\n        return (string) (static::resolve($address, ['params' => $params])->url ?? '');\n    }\n\n    /**\n     * resolve is a helper that makes a page lookup item from a schema.\n     *\n     * Supported options:\n     * - nesting: Boolean value requesting nested items. Optional, false if omitted.\n     */\n    public static function resolve($address, array $options = []): ?PageLookupItem\n    {\n        if ($address instanceof PageLookupItem) {\n            return $address;\n        }\n\n        return PageLookupItem::resolveFromSchema((string) $address, $options);\n    }\n\n    /**\n     * processMarkup converts links and snippets\n     */\n    public static function processMarkup($markup): string\n    {\n        $markup = self::processLinks($markup);\n        $markup = self::processSnippets($markup);\n\n        /**\n         * @event cms.content.postProcessMarkup\n         * Provides opportunity to hook into the post-processing of content markup\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.content.postProcessMarkup', function ((string) &$content) {\n         *         $content = str_replace('<a href=', '<a rel=\"nofollow\" href=', $content);\n         *     });\n         *\n         */\n        Event::fire('cms.content.postProcessMarkup', [&$markup]);\n\n        return $markup;\n    }\n\n    /**\n     * processMarkup will replace links in content with resolved versions\n     * For example: =\"october://xxx\" → =\"https://...\"\n     */\n    public static function processLinks($markup): string\n    {\n        $searches = $replaces = [];\n        if (preg_match_all('/=\"(october:\\/\\/[^\"#]+)(#[^\"]+)?\"/i', $markup, $matches)) {\n            foreach ($matches[0] as $index => $search) {\n                $ocUrl = $matches[1][$index] ?? null;\n                if (!$ocUrl) {\n                    continue;\n                }\n\n                $url = static::url($ocUrl);\n                if (!$url) {\n                    continue;\n                }\n\n                $fragment = $matches[2][$index] ?? '';\n\n                if (in_array($search, $searches)) {\n                    continue;\n                }\n\n                $searches[] = $search;\n                $replaces[] = '=\"' . $url . $fragment . '\"';\n            }\n        }\n\n        if ($searches) {\n            $markup = str_replace($searches, $replaces, $markup);\n        }\n\n        return (string) $markup;\n    }\n\n    /**\n     * processSnippets will replace snippets in content\n     */\n    public static function processSnippets($markup): string\n    {\n        $searches = $replaces = [];\n\n        $theme = Theme::getActiveTheme();\n\n        $parsedSnippets = self::extractSnippetsFromMarkup($markup, $theme);\n\n        $snippetMap = SnippetManager::instance()->getPartialSnippetMap($theme);\n\n        foreach ($parsedSnippets as $snippetDeclaration => $snippetInfo) {\n            $snippetCode = $snippetInfo['code'] ?? '';\n\n            if ($snippetCode && isset($snippetInfo['component'])) {\n                $generatedMarkup = self::generateMarkupForComponent($snippetInfo['component'], $snippetInfo);\n            }\n            elseif ($snippetCode && isset($snippetMap[$snippetCode])) {\n                $generatedMarkup = self::generateMarkupForPartial($snippetMap[$snippetCode], $snippetInfo);\n            }\n            else {\n                $generatedMarkup = '<!-- ' . __(\"Snippet with the requested code :code was not found in the theme.\", ['code' => $snippetCode]) . ' -->';\n            }\n\n            $searches[] = $snippetDeclaration;\n            $replaces[] = $generatedMarkup;\n        }\n\n        if ($searches) {\n            $markup = str_replace($searches, $replaces, $markup);\n        }\n\n        return (string) $markup;\n    }\n\n    /**\n     * generateMarkupForPartial\n     */\n    protected static function generateMarkupForPartial($partialName, $snippetInfo)\n    {\n        $controller = CmsController::getController();\n        $partialName = File::anyname($partialName);\n        $snippetAjax = $snippetInfo['useAjax'];\n\n        $generatedMarkup = '';\n        $generatedMarkup .= $snippetAjax ? '<div data-ajax-partial=\"'.e($partialName).'\">' : '';\n        $generatedMarkup .= $controller->renderPartial($partialName, $snippetInfo['properties']);\n        $generatedMarkup .= $snippetAjax ? '</div>' : '';\n\n        return $generatedMarkup;\n    }\n\n    /**\n     * generateMarkupForPartial\n     */\n    protected static function generateMarkupForComponent($componentClass, $snippetInfo)\n    {\n        $controller = CmsController::getController();\n        $snippetCode = $snippetInfo['code'];\n        $snippetAjax = $snippetInfo['useAjax'];\n        $snippetProperties = $snippetInfo['properties'] ?? [];\n\n        if (!$controller->findComponentByName($snippetCode)) {\n            $componentObj = $controller->addComponent($componentClass, $snippetCode, $snippetProperties);\n            $componentObj->runLifeCycle();\n        }\n\n        $generatedMarkup = '';\n        $generatedMarkup .= $snippetAjax ? '<div data-ajax-partial=\"'.e($snippetCode).'::default\">' : '';\n        $generatedMarkup .= $controller->renderComponent($snippetCode);\n        $generatedMarkup .= $snippetAjax ? '</div>' : '';\n\n        return $generatedMarkup;\n    }\n\n    /**\n     * extractSnippetsFromMarkup\n     */\n    protected static function extractSnippetsFromMarkup(string $markup, $theme): array\n    {\n        $map = [];\n        $matches = [];\n\n        // Converts a json: payload from the inspector\n        $processPropertyValue = function($value) {\n            return str_starts_with($value, 'json:')\n                ? json_decode(urldecode(substr($value, 5)), true)\n                : $value;\n        };\n\n        if (preg_match_all('/\\<figure\\s+[^\\>]+\\>[^<]*\\<\\/figure\\>/i', $markup, $matches)) {\n            foreach ($matches[0] as $snippetDeclaration) {\n                $nameMatch = [];\n                if (!preg_match('/data\\-snippet\\s*=\\s*\"([^\"]+)\"/', $snippetDeclaration, $nameMatch)) {\n                    continue;\n                }\n\n                $snippetCode = $nameMatch[1];\n                $properties = [];\n                $propertyMatches = [];\n                if (preg_match_all('/data\\-property-(?<property>[^=]+)\\s*=\\s*\\\"(?<value>[^\\\"]+)\\\"/i', $snippetDeclaration, $propertyMatches)) {\n                    foreach ($propertyMatches['property'] as $index => $propertyName) {\n                        $properties[$propertyName] = $processPropertyValue($propertyMatches['value'][$index]);\n                    }\n                }\n\n                $componentMatch = [];\n                $componentClass = null;\n                if (preg_match('/data\\-component\\s*=\\s*\"([^\"]+)\"/', $snippetDeclaration, $componentMatch)) {\n                    $componentClass = $componentMatch[1];\n                }\n\n                $snippetAjaxMatches = [];\n                $snippetAjax = false;\n                if (preg_match('/data\\-ajax\\s*=\\s*\"([^\"]+)\"/', $snippetDeclaration, $snippetAjaxMatches)) {\n                    $snippetAjax = $snippetAjaxMatches[1] === 'true' || $snippetAjaxMatches[1] === '1';\n                }\n\n                // Apply default values for properties not defined in the markup\n                // and normalize property code names.\n                $properties = self::preprocessPropertyValues($theme, $snippetCode, $componentClass, $properties);\n                $map[$snippetDeclaration] = [\n                    'code' => $snippetCode,\n                    'useAjax' => $snippetAjax,\n                    'component' => $componentClass,\n                    'properties' => $properties\n                ];\n            }\n        }\n\n        return $map;\n    }\n\n    /**\n     * preprocessPropertyValues applies default property values and fixes property names.\n     *\n     * As snippet properties are defined with data attributes, they are lower case, whereas\n     * real property names are case sensitive. This method finds original property names defined\n     * in snippet classes or partials and replaces property names defined in the static page markup.\n     */\n    protected static function preprocessPropertyValues($theme, $snippetCode, $componentClass, $properties)\n    {\n        $manager = SnippetManager::instance();\n        $snippet = $manager->findByCodeOrComponent($theme, $snippetCode, $componentClass, true);\n\n        // Try without cache\n        if (!$snippet) {\n            $snippet = $manager->findByCodeOrComponent($theme, $snippetCode, $componentClass, false);\n        }\n\n        // Cannot proceed\n        if (!$snippet) {\n            return [];\n        }\n\n        $properties = array_change_key_case($properties);\n        $snippetProperties = $snippet->getProperties();\n\n        foreach ($snippetProperties as $propertyInfo) {\n            $propertyCode = $propertyInfo['property'];\n            $lowercaseCode = strtolower($propertyCode);\n\n            if (!array_key_exists($lowercaseCode, $properties)) {\n                if (array_key_exists('default', $propertyInfo)) {\n                    $properties[$propertyCode] = $propertyInfo['default'];\n                }\n            }\n            else {\n                $markupPropertyInfo = $properties[$lowercaseCode];\n                unset($properties[$lowercaseCode]);\n                $properties[$propertyCode] = $markupPropertyInfo;\n            }\n        }\n\n        return $properties;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Partial.php",
    "content": "<?php namespace Cms\\Classes;\n\n/**\n * The CMS partial class.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Partial extends CmsCompoundObject\n{\n    /**\n     * @var string The container name associated with the model, eg: pages.\n     */\n    protected $dirName = 'partials';\n\n    /**\n     * Returns name of a PHP class to us a parent for the PHP class created for the object's PHP section.\n     * @return string Returns the class name.\n     */\n    public function getCodeClassParent()\n    {\n        return PartialCode::class;\n    }\n\n    /**\n     * validateRequestName checks to see if a partial name is valid from user input.\n     */\n    public static function validateRequestName(string $name): bool\n    {\n        if (!preg_match('/^(?:\\w+\\:{2}|@)?[a-z0-9\\_\\-\\.\\/]+$/i', $name)) {\n            return false;\n        }\n\n        if (strpos($name, '..') !== false) {\n            return false;\n        }\n\n        if (strpos($name, './') !== false || strpos($name, '//') !== false) {\n            return false;\n        }\n\n        $maxNesting = (new self)->getMaxNesting();\n        $segments = explode('/', $name);\n        if ($maxNesting !== null && count($segments) > $maxNesting) {\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/PartialCode.php",
    "content": "<?php namespace Cms\\Classes;\n\n/**\n * Parent class for PHP classes created for partial PHP sections.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PartialCode extends CodeBase\n{\n}\n"
  },
  {
    "path": "modules/cms/classes/PartialStack.php",
    "content": "<?php namespace Cms\\Classes;\n\n/**\n * PartialStack manager for stacking nested partials and keeping track\n * of their components. Partial \"objects\" store the components\n * used by that partial for deferred retrieval.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PartialStack\n{\n    /**\n     * @var array activePartial object being rendered.\n     */\n    protected $activePartial;\n\n    /**\n     * @var array partialStack of previously rendered partial objects.\n     */\n    protected $partialStack = [];\n\n    /**\n     * stackPartial is the partial entry point, appends a new partial to the stack.\n     */\n    public function stackPartial()\n    {\n        if ($this->activePartial !== null) {\n            array_unshift($this->partialStack, $this->activePartial);\n        }\n\n        $this->activePartial = [\n            'components' => [],\n            'obj' => null\n        ];\n    }\n\n    /**\n     * unstackPartial is the partial exit point, removes the active partial from the stack.\n     */\n    public function unstackPartial()\n    {\n        $this->activePartial = array_shift($this->partialStack);\n    }\n\n    /**\n     * getPartialObj\n     */\n    public function getPartialObj()\n    {\n        return $this->activePartial['obj'] ?? null;\n    }\n\n    /**\n     * addPartialObj\n     */\n    public function addPartialObj($partialObj)\n    {\n        $this->activePartial['obj'] = $partialObj;\n    }\n\n    /**\n     * findHandlerFromStack\n     */\n    public function findPartialByHandler($handler)\n    {\n        if (!$this->activePartial) {\n            return null;\n        }\n\n        $partialObj = $this->activePartial['obj'] ?? null;\n        if (method_exists($partialObj, $handler)) {\n            return $partialObj;\n        }\n\n        foreach ($this->partialStack as $stack) {\n            $partialObj = $stack['obj'] ?? null;\n            if (method_exists($partialObj, $handler)) {\n                return $partialObj;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * addComponent to the active partial stack.\n     */\n    public function addComponent($alias, $componentObj)\n    {\n        array_push($this->activePartial['components'], [\n            'name' => $alias,\n            'obj' => $componentObj\n        ]);\n    }\n\n    /**\n     * getComponent returns a component by its alias from the partial stack.\n     */\n    public function getComponent($name)\n    {\n        if (!$this->activePartial) {\n            return null;\n        }\n\n        $component = $this->findComponentFromStack($name, $this->activePartial);\n        if ($component !== null) {\n            return $component;\n        }\n\n        foreach ($this->partialStack as $stack) {\n            $component = $this->findComponentFromStack($name, $stack);\n            if ($component !== null) {\n                return $component;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * getComponents returns all components registered in the partial stack\n     */\n    public function getComponents(): array\n    {\n        if (!$this->activePartial) {\n            return [];\n        }\n\n        $components = [];\n\n        $orderedStack = array_merge($this->partialStack, [$this->activePartial]);\n        foreach ($orderedStack as $stack) {\n            if (!is_array($stack['components'])) {\n                continue;\n            }\n\n            foreach ($stack['components'] as $componentInfo) {\n                if (isset($componentInfo['name']) && isset($componentInfo['obj'])) {\n                    $components[$componentInfo['name']] = $componentInfo['obj'];\n                }\n            }\n        }\n\n        return $components;\n    }\n\n    /**\n     * findComponentFromStack locates a component by its alias from the supplied stack.\n     */\n    protected function findComponentFromStack($name, $stack)\n    {\n        foreach ($stack['components'] as $componentInfo) {\n            if ($componentInfo['name'] == $name) {\n                return $componentInfo['obj'];\n            }\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/PartialWatcher.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Throwable;\n\n/**\n * PartialWatcher instructs the controller to capture output and AJAX handlers\n * from a complete page cycle. Either set to a partial name to ensure the partial\n * contents are available or true to just activate the cycle.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PartialWatcher\n{\n    /**\n     * @var bool|string partialName mode.\n     */\n    protected $partialName;\n\n    /**\n     * @var array partialList for AJAX updates.\n     */\n    protected $partialList;\n\n    /**\n     * @var array partialOutput\n     */\n    protected $partialOutput;\n\n    /**\n     * @var array handlerOutput\n     */\n    protected $handlerOutput;\n\n    /**\n     * @var Throwable handlerException\n     */\n    protected $handlerException;\n\n    /**\n     * startCapture begins capturing partial processes.\n     */\n    public function startCapture($partialName = true, $partialList = [])\n    {\n        $this->partialName = $partialName;\n        $this->partialList = $partialList;\n    }\n\n    /**\n     * isWatching checks if this partial is relevant to the request\n     */\n    public function isWatching($name)\n    {\n        return $name === $this->partialName || in_array($name, $this->partialList);\n    }\n\n    /**\n     * setPartialContents stores partials that the watcher cares about\n     */\n    public function setPartialContents($name, $contents)\n    {\n        if ($this->isWatching($name)) {\n            $this->partialOutput[$name] = $contents;\n        }\n    }\n\n    /**\n     * getPartialContents\n     */\n    public function getPartialContents($name)\n    {\n        return $this->partialOutput[$name] ?? null;\n    }\n\n    /**\n     * isWatchingHandler\n     */\n    public function isWatchingHandler($name)\n    {\n        if (!$this->isWatching($name)) {\n            return false;\n        }\n\n        return $this->handlerOutput === null;\n    }\n\n    /**\n     * setHandlerResponse\n     */\n    public function setHandlerResponse($contents)\n    {\n        $this->handlerOutput = $contents;\n    }\n\n    /**\n     * getHandlerResponse\n     */\n    public function getHandlerResponse()\n    {\n        return $this->handlerOutput;\n    }\n\n    /**\n     * setHandlerException\n     */\n    public function setHandlerException(Throwable $exception)\n    {\n        $this->handlerException = $exception;\n    }\n\n    /**\n     * getHandlerException\n     */\n    public function getHandlerException(): ?Throwable\n    {\n        return $this->handlerException;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Router.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Lang;\nuse Date;\nuse File;\nuse Cache;\nuse Event;\nuse Config;\nuse October\\Rain\\Router\\Router as RainRouter;\nuse October\\Rain\\Router\\Helper as RouterHelper;\nuse Throwable;\n\n/**\n * Router parses page URL patterns and finds pages by URLs.\n *\n * The page URL format is explained below.\n *\n *     /blog/post/:post_id\n *\n * Name of parameters should be compatible with PHP variable names. To make a parameter optional\n * add the question mark after its name:\n *\n *     /blog/post/:post_id?\n *\n * By default parameters in the middle of the URL are required, for example:\n *\n *     /blog/:post_id?/comments - although the :post_id parameter is marked as optional,\n *\n * it will be processed as required.\n *\n * Optional parameters can have default values which are used as fallback values in case if the real\n * parameter value is not presented in the URL. Default values cannot contain the pipe symbols and question marks.\n *\n * Specify the default value after the question mark:\n *\n *     /blog/category/:category_id?10 - The category_id parameter would be 10 for this URL: /blog/category\n *\n * You can also add regular expression validation to parameters. To add a validation expression\n * add the pipe symbol after the parameter name (or the question mark) and specify the expression.\n * The forward slash symbol is not allowed in the expressions. Examples:\n *\n *     /blog/:post_id|^[0-9]+$/comments - this will match /blog/post/10/comments\n *     /blog/:post_id|^[0-9]+$ - this will match /blog/post/3\n *     /blog/:post_name?|^[a-z0-9\\-]+$ - this will match /blog/my-blog-post\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Router\n{\n    /**\n     * @var \\Cms\\Classes\\Theme A reference to the CMS theme containing the object.\n     */\n    protected $theme;\n\n    /**\n     * @var string The last URL to be looked up using findByUrl().\n     */\n    protected $url;\n\n    /**\n     * @var array A list of parameters names and values extracted from the URL pattern and URL string.\n     */\n    protected $parameters = [];\n\n    /**\n     * October\\Rain\\Router\\Router Router object with routes preloaded.\n     */\n    protected $routerObj;\n\n    /**\n     * __construct the router instance.\n     * @param \\Cms\\Classes\\Theme $theme Specifies the theme being processed.\n     */\n    public function __construct(Theme $theme)\n    {\n        $this->theme = $theme;\n    }\n\n    /**\n     * build builds a rain router based on the theme\n     * @return RainRouter\n     */\n    public function build()\n    {\n        return $this->buildRouterObject();\n    }\n\n    /**\n     * findByUrl finds a page by its URL. Returns the page object and sets the $parameters property.\n     * @param string $url The requested URL string.\n     * @return \\Cms\\Classes\\Page Returns \\Cms\\Classes\\Page object or null if the page cannot be found.\n     */\n    public function findByUrl($url)\n    {\n        $this->url = $url = RouterHelper::normalizeUrl($url);\n\n        /**\n         * @event cms.router.beforeRoute\n         * Fires before the CMS Router handles a route\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.router.beforeRoute', function ((string) $url, (\\Cms\\Classes\\Router) $thisRouterInstance) {\n         *         return \\Cms\\Classes\\Page::loadCached('trick-theme-code', 'page-file-name');\n         *     });\n         *\n         */\n        $apiResult = Event::fire('cms.router.beforeRoute', [$url, $this], true);\n        if ($apiResult !== null) {\n            return $apiResult;\n        }\n\n        for ($pass = 1; $pass <= 2; $pass++) {\n            $fileName = null;\n            $urlList = [];\n\n            $cacheable = Config::get('cms.enable_route_cache');\n            if ($cacheable) {\n                $fileName = $this->getUrlRouteCache($url, $urlList);\n                if (is_array($fileName)) {\n                    [$fileName, $this->parameters] = $fileName;\n                }\n            }\n\n            // Find the page by URL and cache the route\n            //\n            if (!$fileName) {\n                $router = $this->getRouterObject();\n                if ($router->match($url)) {\n                    $this->parameters = $router->getParameters();\n                    $fileName = $router->matchedRoute();\n\n                    if ($cacheable) {\n                        $this->putUrlRouteCache($fileName, $url, $urlList);\n                    }\n                }\n            }\n\n            // Return the page\n            //\n            if ($fileName) {\n                if (($page = Page::loadCached($this->theme, $fileName)) === null) {\n                    // If the page was not found on the disk, clear the URL cache\n                    // and repeat the routing process.\n                    if ($pass === 1) {\n                        $this->clearCache();\n                        continue;\n                    }\n\n                    return null;\n                }\n\n                return $page;\n            }\n\n            return null;\n        }\n    }\n\n    /**\n     * findByFile finds a URL by its page. Returns the URL route for linking to the page and\n     * uses the supplied parameters in its address.\n     * @param string $fileName Page file name.\n     * @param array $parameters Route parameters to consider in the URL.\n     * @return string|null\n     */\n    public function findByFile($fileName, $parameters = [])\n    {\n        if (!strlen(File::extension($fileName))) {\n            $fileName .= '.htm';\n        }\n\n        $router = $this->getRouterObject();\n\n        return $router->url($fileName, $parameters);\n    }\n\n    /**\n     * setParameters sets the current routing parameters.\n     * @param  array $parameters\n     * @return array\n     */\n    public function setParameters(array $parameters)\n    {\n        $this->parameters = $parameters;\n    }\n\n    /**\n     * getParameters returns the current routing parameters.\n     * @return array\n     */\n    public function getParameters()\n    {\n        return $this->parameters;\n    }\n\n    /**\n     * getUrl returns the last URL to be looked up.\n     * @return string\n     */\n    public function getUrl()\n    {\n        return $this->url;\n    }\n\n    /**\n     * getParameter returns a routing parameter.\n     * @return array\n     */\n    public function getParameter($name, $default = null)\n    {\n        if (\n            isset($this->parameters[$name]) &&\n            ($this->parameters[$name] === '0' || !empty($this->parameters[$name]))\n        ) {\n            return $this->parameters[$name];\n        }\n\n        return $default;\n    }\n\n    /**\n     * getRouterObject autoloads the URL map only allowing a single execution.\n     * @return October\\Rain\\Router\\Router Returns the URL map.\n     */\n    protected function getRouterObject()\n    {\n        if ($this->routerObj !== null) {\n            return $this->routerObj;\n        }\n\n        return $this->routerObj = $this->buildCachedRouterObject();\n    }\n\n    /**\n     * buildRouterObject\n     */\n    protected function buildRouterObject()\n    {\n        $router = new RainRouter;\n\n        foreach ($this->theme->listPages() as $page) {\n            if ($page->url) {\n                $router->route($page->getFileName(), $page->url);\n            }\n        }\n\n        $router->sortRules();\n\n        return $router;\n    }\n\n    /**\n     * buildCachedRouterObject\n     */\n    protected function buildCachedRouterObject()\n    {\n        $router = new RainRouter;\n\n        // Use manifest cache\n        if ($this->theme->themeIsCached()) {\n            $router->fromArray($this->getManifestRouteCache());\n            return $router;\n        }\n\n        // Use dynamic cache\n        if ($cachedArr = $this->getMapRouteCache()) {\n            $router->fromArray($cachedArr);\n            return $router;\n        }\n\n        // No cache\n        $router = $this->buildRouterObject();\n\n        // Store dynamic cache\n        $this->putMapRouteCache($router->toArray());\n\n        return $router;\n    }\n\n    /**\n     * clearCache clears the router cache.\n     */\n    public function clearCache()\n    {\n        Cache::forget($this->getMapRouteCacheKey());\n        Cache::forget($this->getUrlRouteCacheKey());\n    }\n\n    /**\n     * getCacheKey returns the caching URL key depending on the theme.\n     * @param string $keyName Specifies the base key name.\n     * @return string Returns the theme-specific key name.\n     */\n    protected function getCacheKey($keyName)\n    {\n        return md5($this->theme->getPath()).$keyName.Lang::getLocale();\n    }\n\n    /**\n     * getMapRouteCacheKey returns the cache key name for the URL list.\n     * @return string\n     */\n    protected function getMapRouteCacheKey()\n    {\n        return $this->getCacheKey('page-url-map');\n    }\n\n    /**\n     * putMapRouteCache\n     */\n    protected function putMapRouteCache($urlMap)\n    {\n        $cacheKey = $this->getMapRouteCacheKey();\n        $cacheable = Config::get('cms.enable_route_cache');\n        if (!$cacheable) {\n            return;\n        }\n\n        Cache::put(\n            $cacheKey,\n            base64_encode(serialize($urlMap)),\n            Date::now()->addMinutes(Config::get('cms.url_cache_ttl', 60))\n        );\n    }\n\n    /**\n     * getMapRouteCache\n     */\n    protected function getMapRouteCache()\n    {\n        // Cache preferences\n        $cacheKey = $this->getMapRouteCacheKey();\n        $cacheable = Config::get('cms.enable_route_cache');\n        if (!$cacheable) {\n            return null;\n        }\n\n        $cached = Cache::get($cacheKey, false);\n        if (!$cached) {\n            return null;\n        }\n\n        $unserialized = @unserialize(@base64_decode($cached));\n        if (!$unserialized) {\n            return null;\n        }\n\n        return $unserialized;\n    }\n\n    /**\n     * getUrlRouteCacheKey returns the cache key name for the URL list.\n     * @return string\n     */\n    protected function getUrlRouteCacheKey()\n    {\n        return $this->getCacheKey('cms-url-list');\n    }\n\n    /**\n     * getUrlRouteCache tries to load a page file name corresponding to a specified URL\n     * from the cache. Working with the URL list loaded from the cache. Returns the page\n     * file name if the URL exists in the cache. Otherwise returns null.\n     * @param string $url\n     * @param array &$urlList\n     * @return mixed\n     */\n    protected function getUrlRouteCache($url, &$urlList)\n    {\n        $key = $this->getUrlRouteCacheKey();\n        $urlList = Cache::get($key, false);\n\n        if (!$urlList) {\n            return null;\n        }\n\n        $urlList = @unserialize(@base64_decode($urlList));\n        if (!is_array($urlList)) {\n            return null;\n        }\n\n        return $urlList[$url] ?? null;\n    }\n\n    /**\n     * putUrlRouteCache stored in cache\n     * @param string $url\n     * @param array $urlList\n     */\n    protected function putUrlRouteCache($fileName, $url, $urlList)\n    {\n        if (!$urlList || !is_array($urlList)) {\n            $urlList = [];\n        }\n\n        $urlList[$url] = !empty($this->parameters)\n            ? [$fileName, $this->parameters]\n            : $fileName;\n\n        Cache::put(\n            $this->getUrlRouteCacheKey(),\n            base64_encode(serialize($urlList)),\n            Date::now()->addMinutes(Config::get('cms.url_cache_ttl', 60))\n        );\n    }\n\n    /**\n     * getManifestRouteCache returns the cached route map from the theme\n     */\n    protected function getManifestRouteCache(): array\n    {\n        $manifestPath = $this->theme->getCachedThemePath();\n\n        if (!file_exists($manifestPath)) {\n            return [];\n        }\n\n        try {\n            if (is_array($manifest = File::getRequire($manifestPath))) {\n                return $manifest['routes'] ?? [];\n            }\n        }\n        catch (Throwable $ex) {\n        }\n\n        return [];\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Snippet.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Arr;\nuse Cms\\Helpers\\Component as ComponentHelpers;\nuse ValidationException;\n\n/**\n * Snippet represents a static page snippet.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Snippet\n{\n    /**\n     * @var string code specifies the snippet code.\n     */\n    public $code;\n\n    /**\n     * @var string description specifies the snippet description.\n     */\n    protected $description = null;\n\n    /**\n     * @var string name specifies the snippet name.\n     */\n    protected $name = null;\n\n    /**\n     * @var string properties for the snippet.\n     */\n    protected $properties;\n\n    /**\n     * @var string componentClass name for the snippet.\n     */\n    protected $componentClass = null;\n\n    /**\n     * @var bool useAjax for the snippet.\n     */\n    protected $useAjax = null;\n\n    /**\n     * @var array pageSnippetMap is an internal cache of snippet declarations defined on a page.\n     */\n    protected static $pageSnippetMap = [];\n\n    /**\n     * @var \\Cms\\Classes\\ComponentBase componentObj\n     */\n    protected $componentObj = null;\n\n    /**\n     * initFromPartial initializes the snippet from a CMS partial.\n     * @param \\Cms\\Classes\\Partial $partial A partial to load the configuration from.\n     */\n    public function initFromPartial($partial)\n    {\n        $viewBag = $partial->getViewBag();\n\n        $this->code = $viewBag->property('snippetCode');\n        $this->description = $viewBag->property('snippetDescription');\n        $this->name = $viewBag->property('snippetName');\n        $this->properties = $viewBag->property('snippetProperties', []);\n        $this->useAjax = $viewBag->property('snippetAjax', false);\n    }\n\n    /**\n     * initFromComponentInfo initializes the snippet from a CMS component information.\n     * @param string $componentClass Specifies the component class.\n     * @param string $componentCode Specifies the component code.\n     */\n    public function initFromComponentInfo($componentClass, $componentCode)\n    {\n        $this->code = $componentCode;\n        $this->componentClass = $componentClass;\n    }\n\n    /**\n     * getName returns the snippet name.\n     * This method should not be used in the front-end request handling.\n     * @return string\n     */\n    public function getName()\n    {\n        if ($this->name !== null) {\n            return $this->name;\n        }\n\n        if ($this->componentClass === null) {\n            return null;\n        }\n\n        $component = $this->getComponent();\n\n        return $this->name = ComponentHelpers::getComponentName($component);\n    }\n\n    /**\n     * getDescription returns the snippet description.\n     * This method should not be used in the front-end request handling.\n     * @return string\n     */\n    public function getDescription()\n    {\n        if ($this->description !== null) {\n            return $this->description;\n        }\n\n        if ($this->componentClass === null) {\n            return null;\n        }\n\n        $component = $this->getComponent();\n\n        return $this->description = ComponentHelpers::getComponentDescription($component);\n    }\n\n    /**\n     * useAjaxPartial determines if the snippet should have AJAX enabled.\n     * @return bool\n     */\n    public function useAjaxPartial()\n    {\n        if ($this->useAjax !== null) {\n            return $this->useAjax;\n        }\n\n        if ($this->componentClass === null) {\n            return null;\n        }\n\n        $component = $this->getComponent();\n\n        return $this->useAjax = ComponentHelpers::getComponentSnippetAjax($component);\n    }\n\n    /**\n     * getComponentClass returns the snippet component class name.\n     * If the snippet is a partial snippet, returns NULL.\n     * @return string Returns the snippet component class name\n     */\n    public function getComponentClass()\n    {\n        return $this->componentClass;\n    }\n\n    /**\n     * getProperties returns the snippet property list as array, in format\n     * compatible with Inspector.\n     */\n    public function getProperties()\n    {\n        if (!$this->componentClass) {\n            return self::getPartialSnippetPropertyConfig($this->properties);\n        }\n        else {\n            return ComponentHelpers::getComponentsPropertyConfig($this->getComponent(), false, true);\n        }\n    }\n\n    /**\n     * getComponent returns a component corresponding to the snippet.\n     * This method should not be used in the front-end request handling code.\n     * @return \\Cms\\Classes\\ComponentBase\n     */\n    protected function getComponent()\n    {\n        if ($this->componentClass === null) {\n            return null;\n        }\n\n        if ($this->componentObj !== null) {\n            return $this->componentObj;\n        }\n\n        $componentClass = $this->componentClass;\n\n        return $this->componentObj = new $componentClass();\n    }\n\n    /**\n     * processTemplateSettingsArray\n     */\n    public static function processTemplateSettingsArray($settingsArray)\n    {\n        if (!isset($settingsArray['viewBag']['snippetProperties'])) {\n            return $settingsArray;\n        }\n\n        $properties = [];\n\n        $rows = $settingsArray['viewBag']['snippetProperties'];\n        foreach ($rows as $row) {\n            $property = array_get($row, 'property');\n            $settings = array_only($row, ['title', 'type', 'default', 'options']);\n            $properties[$property] = $settings;\n        }\n\n        $settingsArray['viewBag']['snippetProperties'] = [];\n\n        foreach ($properties as $name => $value) {\n            $settingsArray['viewBag']['snippetProperties'][$name] = $value;\n        }\n\n        return $settingsArray;\n    }\n\n    /**\n     * processTemplateSettings\n     */\n    public static function processTemplateSettings($template)\n    {\n        if (!isset($template->viewBag['snippetProperties'])) {\n            return;\n        }\n\n        $parsedProperties = self::parseIniProperties($template->viewBag['snippetProperties']);\n        foreach ($parsedProperties as $index => &$property) {\n            if (isset($property['options']) && is_array($property['options'])) {\n                $property['options'] = self::dropDownOptionsToString($property['options']);\n            }\n        }\n\n        $template->viewBag['snippetProperties'] = $parsedProperties;\n\n        // Duplicate changes back to settings\n        $template->settings['components']['viewBag'] = $template->viewBag;\n    }\n\n    /**\n     * getPartialSnippetPropertyConfig\n     * @return array\n     */\n    protected static function getPartialSnippetPropertyConfig($properties)\n    {\n        foreach ($properties as &$property) {\n            if (isset($property['options']) && is_string($property['options'])) {\n                $property['options'] = self::dropDownOptionsToArray($property['options']);\n            }\n        }\n\n        $properties = self::parseIniProperties($properties);\n\n        return $properties;\n    }\n\n    /**\n     * parseIniProperties converts a keyed object to an array, converting the index to the \"property\" value.\n     * @return array\n     */\n    protected static function parseIniProperties($properties)\n    {\n        foreach ($properties as $index => $value) {\n            $properties[$index]['property'] = $index;\n        }\n\n        return array_values($properties);\n    }\n\n    /**\n     * dropDownOptionsToArray\n     */\n    protected static function dropDownOptionsToArray($optionsString)\n    {\n        if (strpos($optionsString, '::') !== false) {\n            $options = explode('::', $optionsString);\n            if (\n                count($options) === 2 &&\n                class_exists($options[0]) &&\n                method_exists($options[0], $options[1])\n            ) {\n                $result = $options[0]::{$options[1]}();\n                if (!is_array($result)) {\n                    throw new ValidationException(['snippetProperties' => sprintf(\n                        'Invalid dropdown option array returned by `%s::%s`',\n                        $options[0],\n                        $options[1]\n                    )]);\n                }\n\n                return $result;\n            }\n        }\n\n        $options = explode('|', $optionsString);\n\n        $result = [];\n        foreach ($options as $index => $optionStr) {\n            $parts = explode(':', $optionStr, 2);\n\n            if (count($parts) > 1) {\n                $key = trim($parts[0]);\n\n                if (strlen($key)) {\n                    if (!preg_match('/^[0-9a-z-_]+$/i', $key)) {\n                        throw new ValidationException(['snippetProperties' => __(\"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\", ['key'=>$key])]);\n                    }\n\n                    $result[$key] = trim($parts[1]);\n                }\n                else {\n                    $result[$index] = trim($optionStr);\n                }\n            }\n            else {\n                $result[$index] = trim($optionStr);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * dropDownOptionsToString is a helper to convert the an array to a string\n     * for the user interface in the editor\n     * @param array|mixed $optionsArray\n     * @return string\n     */\n    protected static function dropDownOptionsToString($optionsArray): string\n    {\n        if (!is_array($optionsArray)) {\n            return (string) $optionsArray;\n        }\n\n        $result = [];\n        $isAssoc = Arr::isAssoc($optionsArray);\n\n        foreach ($optionsArray as $optionIndex => $optionValue) {\n            $result[] = $isAssoc\n                ? $optionIndex.':'.$optionValue\n                : $optionValue;\n        }\n\n        return implode(' | ', $result);\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/SnippetManager.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse App;\nuse Event;\nuse Cache;\nuse Config;\nuse System;\nuse Cms\\Classes\\Partial;\nuse Cms\\Classes\\Snippet;\nuse System\\Classes\\PluginManager;\n\n/**\n * SnippetManager returns information about snippets based on partials and components.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SnippetManager\n{\n    /**\n     * @var array|null snippets\n     */\n    protected $snippets = null;\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('cms.snippets');\n    }\n\n    /**\n     * listSnippets returns a list of available snippets. Returns an unsorted array\n     * of snippet objects.\n     * @param \\Cms\\Classes\\Theme|null $theme\n     * @return array\n     */\n    public function listSnippets($theme = null)\n    {\n        if ($this->snippets !== null) {\n            return $this->snippets;\n        }\n\n        $themeSnippets = $theme ? $this->listThemeSnippets($theme) : [];\n        $componentSnippets = $this->listComponentSnippets();\n\n        $this->snippets = array_merge($themeSnippets, $componentSnippets);\n\n        /*\n         * @event pages.snippets.listSnippets\n         * Gives the ability to manage the snippet list dynamically.\n         *\n         * Example usage to add a snippet to the list:\n         *\n         * Event::listen('pages.snippets.listSnippets', function($manager) {\n         *     $snippet = new \\RainLab\\Pages\\Classes\\Snippet();\n         *     $snippet->initFromComponentInfo('\\Example\\Plugin\\Components\\ComponentClass', 'snippetCode');\n         *     $manager->addSnippet($snippet);\n         * });\n         *\n         * Example usage to remove a snippet from the list:\n         *\n         * Event::listen('pages.snippets.listSnippets', function($manager) {\n         *     $manager->removeSnippet('snippetCode');\n         * });\n         */\n        Event::fire('pages.snippets.listSnippets', [$this]);\n\n        return $this->snippets;\n    }\n\n    /**\n     * addSnippet to the list of snippets\n     * @param Snippet $snippet\n     * @return void\n     */\n    public function addSnippet(Snippet $snippet)\n    {\n        $this->snippets[] = $snippet;\n    }\n\n    /**\n     * removeSnippet with the given code from the list of snippets\n     * @param string $snippetCode\n     * @return void\n     */\n    public function removeSnippet(string $snippetCode)\n    {\n        $this->snippets = array_filter($this->snippets, function ($snippet) use ($snippetCode) {\n            return $snippet->code !== $snippetCode;\n        });\n    }\n\n    /**\n     * findByCodeOrComponent is used internally by the system.\n     * @param \\Cms\\Classes\\Theme $theme Specifies a parent theme.\n     * @param string $code Specifies the snippet code.\n     * @param string $$componentClass Specifies the snippet component class, if available.\n     * @param boolean $allowCaching Specifies whether caching is allowed for the call.\n     * @return object\n     */\n    public function findByCodeOrComponent($theme, $code, $componentClass, $allowCaching = false)\n    {\n        if (!$allowCaching) {\n            // If caching is not allowed, list all available snippets,\n            // find the snippet in the list and return it.\n            $snippets = $this->listSnippets($theme);\n\n            foreach ($snippets as $snippet) {\n                if ($componentClass && $snippet->getComponentClass() === $componentClass) {\n                    return $snippet;\n                }\n\n                if ($snippet->code == $code) {\n                    return $snippet;\n                }\n            }\n\n            return null;\n        }\n\n        // If caching is allowed, and the requested snippet is a partial snippet,\n        // try to load the partial name from the cache and initialize the snippet\n        // from the partial.\n        if (!strlen($componentClass)) {\n            $map = $this->getPartialSnippetMap($theme);\n\n            if (!array_key_exists($code, $map)) {\n                return null;\n            }\n\n            $partialName = $map[$code];\n            $partial = Partial::loadCached($theme, $partialName);\n\n            if (!$partial) {\n                return null;\n            }\n\n            $snippet = new Snippet;\n            $snippet->initFromPartial($partial);\n\n            return $snippet;\n        }\n        else {\n            // If the snippet is a component snippet, initialize it from the component\n            if (!class_exists($componentClass)) {\n                return null;\n            }\n\n            $snippet = new Snippet;\n            $snippet->initFromComponentInfo($componentClass, $code);\n\n            return $snippet;\n        }\n    }\n\n    /**\n     * clearCache clears front-end run-time cache.\n     * @param \\Cms\\Classes\\Theme $theme Specifies a parent theme.\n     */\n    public static function clearCache($theme)\n    {\n        Cache::forget(self::getPartialMapCacheKey($theme));\n    }\n\n    /**\n     * getPartialMapCacheKey returns a cache key for this record.\n     */\n    protected static function getPartialMapCacheKey($theme)\n    {\n        $key = crc32($theme->getPath()).'snippet-partial-map';\n\n        /**\n         * @event pages.snippet.getPartialMapCacheKey\n         * Enables modifying the key used to reference cached partial maps\n         *\n         * Example usage:\n         *\n         *     Event::listen('pages.snippet.getPartialMapCacheKey', function (&$key) {\n         *          $key = $key . '-' . App::getLocale();\n         *     });\n         *\n         */\n        Event::fire('pages.snippet.getPartialMapCacheKey', [&$key]);\n\n        return $key;\n    }\n\n    /**\n     * getPartialSnippetMap as a list of partial-based snippets and corresponding partial names.\n     * Returns an associative array with the snippet code in keys and partial file names in values.\n     * @param \\Cms\\Classes\\Theme $theme Specifies a parent theme.\n     * @return array\n     */\n    public function getPartialSnippetMap($theme)\n    {\n        $key = self::getPartialMapCacheKey($theme);\n\n        $result = [];\n        $cached = Cache::memo()->get($key, false);\n\n        if ($cached !== false && ($cached = @unserialize($cached)) !== false) {\n            return $cached;\n        }\n\n        $partials = Partial::listInTheme($theme);\n\n        foreach ($partials as $partial) {\n            $viewBag = $partial->getViewBag();\n\n            $snippetCode = $viewBag->property('snippetCode');\n            if (!strlen($snippetCode)) {\n                continue;\n            }\n\n            $result[$snippetCode] = $partial->getFileName();\n        }\n\n        $expiresAt = now()->addMinutes(Config::get('cms.template_cache_ttl', 10));\n        Cache::put($key, serialize($result), $expiresAt);\n\n        return $result;\n    }\n\n    /**\n     * listThemeSnippets returns a list of snippets in the specified theme.\n     * @param \\Cms\\Classes\\Theme $theme Specifies a parent theme.\n     * @return array Returns an array of Snippet objects.\n     */\n    protected function listThemeSnippets($theme)\n    {\n        $result = [];\n        $partials = Partial::listInTheme($theme, true);\n\n        foreach ($partials as $partial) {\n            $viewBag = $partial->getViewBag();\n\n            if (strlen($viewBag->property('snippetCode'))) {\n                $snippet = new Snippet;\n                $snippet->initFromPartial($partial);\n                $result[] = $snippet;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * listComponentSnippets returns a list of snippets created from components.\n     * @return array Returns an array of Snippet objects.\n     */\n    protected function listComponentSnippets()\n    {\n        $result = [];\n\n        // Load module snippets\n        foreach (System::listModules() as $module) {\n            if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                $result = $this->loadSnippetsFromArray($provider->registerPageSnippets(), $result);\n            }\n        }\n\n        // Load plugin components\n        foreach (PluginManager::instance()->getPlugins() as $plugin) {\n            $result = $this->loadSnippetsFromArray($plugin->registerPageSnippets(), $result);\n        }\n\n        // Load app items\n        if ($app = App::getProvider(\\App\\Provider::class)) {\n            $result = $this->loadSnippetsFromArray($app->registerPageSnippets(), $result);\n        }\n\n        return $result;\n    }\n\n    /**\n     * loadSnippetsFromArray helper\n     */\n    protected function loadSnippetsFromArray($snippets, array $result): array\n    {\n        if (!is_array($snippets)) {\n            return [];\n        }\n\n        foreach ($snippets as $componentClass => $componentCode) {\n            $snippet = new Snippet;\n            $snippet->initFromComponentInfo($componentClass, $componentCode);\n            $result[] = $snippet;\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/Theme.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Db;\nuse App;\nuse File;\nuse Lang;\nuse Site;\nuse Event;\nuse Config;\nuse Session;\nuse Exception;\nuse BackendAuth;\nuse SystemException;\nuse DirectoryIterator;\nuse ApplicationException;\nuse Cms\\Models\\ThemeData;\nuse Backend\\Models\\UserPreference;\nuse October\\Rain\\Halcyon\\Datasource\\DbDatasource;\nuse October\\Rain\\Halcyon\\Datasource\\AutoDatasource;\nuse October\\Rain\\Halcyon\\Datasource\\FileDatasource;\nuse October\\Rain\\Halcyon\\Datasource\\DatasourceInterface;\nuse October\\Contracts\\Twig\\CallsMethods;\n\n/**\n * Theme class represents the CMS theme\n * CMS theme is a directory that contains all CMS objects - pages, layouts, partials and asset files..\n * The theme parameters are specified in the theme.ini file in the theme root directory.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Theme implements CallsMethods\n{\n    use \\Cms\\Classes\\Theme\\HasCacheLayer;\n    use \\Cms\\Classes\\Theme\\HasConfiguration;\n\n    /**\n     * @var const keys\n     */\n    const EDIT_KEY = 'cms::theme.edit';\n\n    /**\n     * @var string dirName specifies the theme directory name\n     */\n    protected $dirName;\n\n    /**\n     * @var mixed activeThemeCache in memory\n     */\n    protected static $activeThemeCache = false;\n\n    /**\n     * @var mixed editThemeCache in memory\n     */\n    protected static $editThemeCache = false;\n\n    /**\n     * load the theme\n     */\n    public static function load($dirName): Theme\n    {\n        $theme = new static;\n\n        $theme->setDirName((string) $dirName);\n\n        $theme->registerHalcyonDatasource();\n\n        return $theme;\n    }\n\n    /**\n     * getPath returns the absolute theme path.\n     */\n    public function getPath(?string $dirName = null): string\n    {\n        if (!$dirName) {\n            $dirName = $this->getDirName();\n        }\n\n        return themes_path($dirName);\n    }\n\n    /**\n     * setDirName sets the theme directory name\n     */\n    public function setDirName(string $dirName): void\n    {\n        $this->dirName = $dirName;\n    }\n\n    /**\n     * getDirName returns the theme directory name\n     */\n    public function getDirName(): string\n    {\n        return (string) $this->dirName;\n    }\n\n    /**\n     * getId is a helper for {{ theme.id }} twig vars that returns a unique\n     * string for this theme\n     */\n    public function getId(): string\n    {\n        return snake_case(str_replace('/', '-', $this->getDirName()));\n    }\n\n    /**\n     * exists determines if a theme with given directory name exists\n     */\n    public static function exists(string $dirName): bool\n    {\n        if (strlen(trim($dirName)) === 0) {\n            return false;\n        }\n\n        $theme = static::load($dirName);\n\n        $path = $theme->getPath();\n\n        return File::isDirectory($path);\n    }\n\n    /**\n     * listPages returns a list of pages in the theme\n     * This method is used internally in the routing process and in the backend UI.\n     * Skipping cache indicates if the pages should be reloaded from the disk bypassing the cache.\n     */\n    public function listPages(bool $skipCache = false)\n    {\n        return Page::listInTheme($this, $skipCache);\n    }\n\n    /**\n     * isActiveTheme returns true if this theme is the chosen active theme\n     */\n    public function isActiveTheme(): bool\n    {\n        if ($activeThemeCode = self::getActiveThemeCode()) {\n            return $activeThemeCode === $this->getDirName();\n        }\n\n        return false;\n    }\n\n    /**\n     * getActiveThemeCode returns the active theme code.\n     *\n     * By default the active theme is loaded from the cms.active_theme config item.\n     * If there's a back-end user session, loads the theme code from the CMS Editor\n     * Edit Theme user preference.\n     *\n     * This behavior can be overridden by the cms.theme.getActiveTheme event listener.\n     */\n    public static function getActiveThemeCode(): ?string\n    {\n        /**\n         * @event cms.theme.getActiveTheme\n         * Overrides the active theme code.\n         *\n         * If a value is returned from this halting event, it will be used as the active\n         * theme code. Example usage:\n         *\n         *     Event::listen('cms.theme.getActiveTheme', function () {\n         *         return 'mytheme';\n         *     });\n         *\n         */\n        $apiResult = Event::fire('cms.theme.getActiveTheme', [], true);\n        if ($apiResult !== null) {\n            return $apiResult;\n        }\n\n        // System edit site override, used for setting the active theme in the backend\n        if (App::runningInBackend() && ($siteTheme = Config::get('cms.edit_theme'))) {\n            return $siteTheme;\n        }\n\n        // Backend preference override, used for setting the preview theme in the editor\n        // @todo add a get variable check (_editor_preview)\n        if ($prefTheme = self::getEditThemeCodeFromPreference()) {\n            return $prefTheme;\n        }\n\n        // Config value, used for rendering the frontend\n        $activeTheme = Config::get('cms.active_theme');\n        if (!$activeTheme) {\n            throw new SystemException(Lang::get('cms::lang.theme.active.not_set'));\n        }\n\n        return $activeTheme;\n    }\n\n    /**\n     * getActiveTheme returns the active theme object\n     */\n    public static function getActiveTheme(): ?Theme\n    {\n        if (self::$activeThemeCache !== false) {\n            return self::$activeThemeCache;\n        }\n\n        $theme = static::load($themeCode = static::getActiveThemeCode());\n\n        if ($theme->isLocked()) {\n            throw new ApplicationException(Lang::get('cms::lang.theme.active.is_locked', ['theme' => $themeCode]));\n        }\n\n        if (!File::isDirectory($theme->getPath())) {\n            return self::$activeThemeCache = null;\n        }\n\n        return self::$activeThemeCache = $theme;\n    }\n\n    /**\n     * setActiveTheme sets the active theme\n     *\n     * The active theme code is stored in the database and overrides the\n     * configuration cms.active_theme config item.\n     */\n    public static function setActiveTheme(string $code)\n    {\n        $theme = static::load($code);\n        if ($theme && $theme->isLocked()) {\n            throw new ApplicationException(Lang::get('cms::lang.theme.active.is_locked', ['theme' => $code]));\n        }\n\n        $site = App::runningInBackend() ? Site::getEditSite() : Site::getPrimarySite();\n        if (!$site) {\n            throw new ApplicationException(__(\"Unable to set active theme. Missing a site definition.\"));\n        }\n\n        Db::table($site->getTable())->where('id', $site->id)->update(['theme' => $code]);\n        Config::set('cms.active_theme', $code);\n\n        self::resetCache();\n\n        /**\n         * @event cms.theme.setActiveTheme\n         * Fires when the active theme has been changed.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.theme.setActiveTheme', function ($code) {\n         *         \\Log::info(\"Theme has been changed to $code\");\n         *     });\n         *\n         */\n        Event::fire('cms.theme.setActiveTheme', compact('code'));\n    }\n\n    /**\n     * getEditThemeCode returns the edit theme code\n     *\n     * There are several ways the edit theme can be set. The code loads\n     * the edit theme from the following sources:\n     * → CMS Editor edit theme for the currently authenticated back-end user, if any.\n     * → cms.edit_theme config item.\n     * → CMS Active theme.\n     * → cms.theme.getEditTheme event. The theme code returned by the\n     * event handler has the highest priority.\n     */\n    public static function getEditThemeCode(): ?string\n    {\n        /**\n         * @event cms.theme.getEditTheme\n         * Overrides the edit theme code.\n         *\n         * If a value is returned from this halting event, it will be used as the edit\n         * theme code. Example usage:\n         *\n         *     Event::listen('cms.theme.getEditTheme', function () {\n         *         return \"the-edit-theme-code\";\n         *     });\n         *\n         */\n        $apiResult = Event::fire('cms.theme.getEditTheme', [], true);\n        if ($apiResult !== null) {\n            return $apiResult;\n        }\n\n        $editTheme = self::getEditThemeCodeFromPreference();\n\n        if (!$editTheme) {\n            $editTheme = Config::get('cms.edit_theme');\n        }\n\n        if (!$editTheme) {\n            $editTheme = static::getActiveThemeCode();\n        }\n\n        if (!$editTheme) {\n            throw new SystemException(Lang::get('cms::lang.theme.edit.not_set'));\n        }\n\n        return $editTheme;\n    }\n\n    /**\n     * getEditThemeCodeFromPreference\n     */\n    protected static function getEditThemeCodeFromPreference()\n    {\n        // Check for environment\n        if (App::runningInConsole()) {\n            return null;\n        }\n\n        // Check for auth markers\n        if (!BackendAuth::hasSession() && !BackendAuth::hasRemember()) {\n            return null;\n        }\n\n        if (!App::hasDatabase() || !BackendAuth::getUser()) {\n            return null;\n        }\n\n        try {\n            $prefTheme = Session::remember(Theme::EDIT_KEY, function() {\n                return UserPreference::forUser()->get(Theme::EDIT_KEY, '');\n            });\n        }\n        catch (Exception $ex) {\n            $prefTheme = null;\n        }\n\n        if ($prefTheme && static::exists($prefTheme)) {\n            return $prefTheme;\n        }\n\n        return null;\n    }\n\n    /**\n     * getEditTheme returns the edit theme\n     */\n    public static function getEditTheme(): ?Theme\n    {\n        if (self::$editThemeCache !== false) {\n            return self::$editThemeCache;\n        }\n\n        $theme = static::load(static::getEditThemeCode());\n\n        if (!File::isDirectory($theme->getPath())) {\n            return self::$editThemeCache = null;\n        }\n\n        return self::$editThemeCache = $theme;\n    }\n\n    /**\n     * setEditTheme sets the editing theme\n     */\n    public static function setEditTheme(string $code)\n    {\n        UserPreference::forUser()->set(Theme::EDIT_KEY, $code);\n        Session::put(Theme::EDIT_KEY, $code);\n        Config::set('cms.edit_theme', $code);\n\n        self::resetCache();\n\n        /**\n         * @event cms.theme.setEditTheme\n         * Fires when the edit theme has been changed.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.theme.setEditTheme', function ($code) {\n         *         \\Log::info(\"Theme has been changed to $code\");\n         *     });\n         *\n         */\n        Event::fire('cms.theme.setEditTheme', compact('code'));\n    }\n\n    /**\n     * resetEditTheme\n     */\n    public static function resetEditTheme()\n    {\n        UserPreference::forUser()->reset(Theme::EDIT_KEY);\n        Session::forget(Theme::EDIT_KEY);\n\n        self::resetCache();\n    }\n\n    /**\n     * all returns all themes on disk\n     */\n    public static function all(): array\n    {\n        $it = new DirectoryIterator(themes_path());\n        $it->rewind();\n\n        $result = [];\n        foreach ($it as $fileinfo) {\n            if (!$fileinfo->isDir() || $fileinfo->isDot()) {\n                continue;\n            }\n\n            $theme = static::load($fileinfo->getFilename());\n\n            $result[] = $theme;\n        }\n\n        return $result;\n    }\n\n    /**\n     * allAvailable returns all available themes, those that are not locked\n     */\n    public static function allAvailable(): array\n    {\n        $themes = [];\n\n        foreach (self::all() as $theme) {\n            if ($theme->isLocked()) {\n                continue;\n            }\n            $themes[] = $theme;\n        }\n\n        return $themes;\n    }\n\n    /**\n     * isLocked returns true if the theme cannot be used\n     */\n    public function isLocked(): bool\n    {\n        return File::isFile($this->getPath().'/.themelock');\n    }\n\n    /**\n     * resetCache resets any memory or cache involved with the active or edit theme\n     */\n    public static function resetCache()\n    {\n        self::$activeThemeCache = false;\n        self::$editThemeCache = false;\n    }\n\n    /**\n     * hasCustomData returns true if this theme has form fields that supply customization data\n     */\n    public function hasCustomData(): bool\n    {\n        $form = $this->getConfigValue('form', false);\n\n        if (!$form && $this->hasParentTheme()) {\n            $form = $this->getParentTheme()->hasCustomData();\n        }\n\n        return (bool) $form;\n    }\n\n    /**\n     * getCustomData returns data specific to this theme\n     */\n    public function getCustomData(): ThemeData\n    {\n        return ThemeData::forTheme($this);\n    }\n\n    /**\n     * removeCustomData removes data specific to this theme\n     */\n    public function removeCustomData(): bool\n    {\n        if ($this->hasCustomData()) {\n            return $this->getCustomData()->delete();\n        }\n\n        return true;\n    }\n\n    /**\n     * databaseLayerEnabled checks global and local config\n     */\n    public function databaseLayerEnabled(): bool\n    {\n        // Globally\n        $enableDbLayer = Config::get('cms.database_templates', false);\n\n        // Locally\n        if (!$enableDbLayer) {\n            $enableDbLayer = $this->getConfigValue('database', false);\n        }\n\n        return $enableDbLayer && App::hasDatabase();\n    }\n\n    /**\n     * hasParentTheme checks if a parent theme is defined\n     */\n    public function hasParentTheme(): bool\n    {\n        return (bool) $this->getConfigValue('parent');\n    }\n\n    /**\n     * getParentTheme returns a parent theme, if enabled\n     */\n    public function getParentTheme(): ?Theme\n    {\n        if (!$this->hasParentTheme()) {\n            return null;\n        }\n\n        return static::load((string) $this->getConfigValue('parent'));\n    }\n\n    /**\n     * secondLayerEnabled is true if two or more datasources exist\n     */\n    public function secondLayerEnabled(): bool\n    {\n        // All changes going to the database\n        if ($this->databaseLayerEnabled()) {\n            return true;\n        }\n\n        // Has an unlocked parent\n        if (($parent = $this->getParentTheme()) && !$parent->isLocked()) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * useParentAsset determines if a parent asset should be used\n     */\n    public function useParentAsset($relativePath): bool\n    {\n        return $this->hasParentTheme() && !File::exists($this->getPath().'/'.$relativePath);\n    }\n\n    /**\n     * registerHalcyonDatasource ensures this theme is registered as a Halcyon datasource\n     */\n    public function registerHalcyonDatasource()\n    {\n        $resolver = App::make('halcyon');\n\n        // Already registered\n        if ($resolver->hasDatasource($this->dirName)) {\n            return;\n        }\n\n        $datasources = [];\n\n        // Database layer\n        if ($this->databaseLayerEnabled()) {\n            $datasources[] = new DbDatasource($this->dirName, 'cms_theme_templates');\n        }\n\n        // Current / child theme\n        $datasources[] = new FileDatasource($this->getPath(), App::make('files'));\n\n        // Parent theme\n        if ($parentTheme = $this->getParentTheme()) {\n            $datasources[] = new FileDatasource($parentTheme->getPath(), App::make('files'));\n        }\n\n        $resolver->addDatasource($this->dirName, new AutoDatasource($datasources));\n    }\n\n    /**\n     * getDatasource returns the theme's datasource\n     */\n    public function getDatasource(): DatasourceInterface\n    {\n        $resolver = App::make('halcyon');\n\n        return $resolver->datasource($this->getDirName());\n    }\n\n    /**\n     * getParentOptions returns dropdown options for a parent theme\n     */\n    public function getParentOptions(): array\n    {\n        $result = [\n            '' => __('-- no parent --'),\n        ];\n\n        foreach (static::all() as $theme) {\n            if ($theme->getDirName() === $this->getDirName()) {\n                continue;\n            }\n\n            if ($theme->isLocked()) {\n                $label = $theme->getConfigValue('name').' ('.$theme->getDirName().'*)';\n            }\n            else {\n                $label = $theme->getConfigValue('name').' ('.$theme->getDirName().')';\n            }\n\n            $result[$theme->getDirName()] = $label;\n        }\n\n        return $result;\n    }\n\n    /**\n     * hasSeedContent returns true if some seed content is available\n     */\n    public function hasSeedContent()\n    {\n        return File::exists($this->getPath() . '/seeds');\n    }\n\n    /**\n     * __get magic\n     */\n    public function __get($name)\n    {\n        if ($this->hasCustomData()) {\n            return $this->getCustomData()->{$name};\n        }\n\n        return null;\n    }\n\n    /**\n     * __isset magic\n     */\n    public function __isset($key)\n    {\n        if ($this->hasCustomData()) {\n            $theme = $this->getCustomData();\n            return $theme->offsetExists($key);\n        }\n\n        return false;\n    }\n\n    /**\n     * getTwigMethodNames returns a list of method names that can be called from Twig.\n     */\n    public function getTwigMethodNames(): array\n    {\n        return [\n            'getPath',\n            'getDirName',\n            'getId',\n            'isActiveTheme',\n            'getConfig',\n            'hasParentTheme',\n            'getParentTheme',\n            'getFormConfig',\n            'getConfigValue',\n            'getConfigArray',\n            'getPreviewImageUrl',\n            'getCustomData',\n            'hasCustomData'\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/ThemeManager.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse Db;\nuse App;\nuse Lang;\nuse Yaml;\nuse File;\nuse System;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse October\\Rain\\Composer\\ComposerManager;\nuse ApplicationException;\nuse Exception;\n\n/**\n * ThemeManager\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeManager\n{\n    /**\n     * @var array themes is for storing themes cache\n     */\n    protected $themes;\n\n    /**\n     * @var array installedThemes is for storing installed themes cache\n     */\n    protected $installedThemes;\n\n    /**\n     * @var array installedThemeDirs is for storing installed themes cache\n     */\n    protected $installedThemeDirs;\n\n    /**\n     * @var array bootedThemes is for storing themes that have been booted\n     */\n    protected $bootedThemes = [];\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        try {\n            return App::make('cms.themes');\n        }\n        catch (Exception $ex) {\n            return new static;\n        }\n    }\n\n    /**\n     * bootAll will boot language messages for the active theme as `theme.acme::lang.*`\n     * if it is in the backend\n     */\n    public function bootAll()\n    {\n        $theme = $this->getActiveTheme();\n        $this->bootTheme($theme, App::runningInBackend());\n\n        if ($parent = $theme->getParentTheme()) {\n            $this->bootTheme($parent, App::runningInBackend());\n        }\n    }\n\n    /**\n     * bootTheme boots a theme if it hasn't been booted already\n     */\n    protected function bootTheme(CmsTheme $theme, bool $isBackend = false): void\n    {\n        $themeId = $theme->getId();\n\n        if (in_array($themeId, $this->bootedThemes)) {\n            return;\n        }\n\n        $langPath = $theme->getPath() . '/lang';\n        if (is_dir($langPath)) {\n            Lang::addJsonPath($langPath);\n\n            if ($isBackend) {\n                Lang::addNamespace(\"theme.{$themeId}\", $langPath);\n            }\n        }\n\n        $this->bootedThemes[] = $themeId;\n    }\n\n    /**\n     * getActiveTheme return the active theme without affecting the internal cache\n     * since it may fire before the session driver has loaded.\n     */\n    public function getActiveTheme(): CmsTheme\n    {\n        return CmsTheme::load(CmsTheme::getActiveThemeCode());\n    }\n\n    /**\n     * getThemes returns all themes in the filesystem\n     */\n    public function getThemes(): array\n    {\n        if ($this->themes !== null) {\n            return $this->themes;\n        }\n\n        $result = [];\n        foreach (CmsTheme::all() as $theme) {\n            $dirName = $theme->getDirName();\n            $result[$dirName] = $theme;\n        }\n\n        return $this->themes = $result;\n    }\n\n    /**\n     * getInstalled returns a collection of themes installed\n     *\n     * ['RainLab.Vanilla' => '1.0.0', ...]\n     */\n    public function getInstalled(): array\n    {\n        if ($this->installedThemes !== null) {\n            return $this->installedThemes;\n        }\n\n        $result = [];\n\n        foreach ($this->getThemes() as $dirName => $theme) {\n            // Check composer file\n            if (!$octoberCode = $this->getProductCode($dirName)) {\n                continue;\n            }\n\n            // Check composer matches theme.yaml\n            $publishedCode = $theme->getConfigValue('authorCode') . '.' . $theme->getConfigValue('code');\n            if (strtolower($publishedCode) !== $octoberCode) {\n                continue;\n            }\n\n            // Check version.yaml\n            $result[$publishedCode] = $this->getLatestVersion($dirName);\n        }\n\n        return $this->installedThemes = $result;\n    }\n\n    /**\n     * getInstalled returns a collection of themes installed and their directories\n     *\n     * ['rainlab.vanilla' => 'vanilla', ...]\n     */\n    protected function getInstalledDirectories(): array\n    {\n        if ($this->installedThemeDirs !== null) {\n            return $this->installedThemeDirs;\n        }\n\n        $result = [];\n\n        foreach ($this->getThemes() as $dirName => $theme) {\n            // Check composer file\n            if (!$octoberCode = $this->getProductCode($dirName)) {\n                continue;\n            }\n\n            $result[$octoberCode] = $dirName;\n        }\n\n        return $this->installedThemeDirs = $result;\n    }\n\n    /**\n     * isInstalled checks if a theme has ever been installed\n     */\n    public function isInstalled(string $name): bool\n    {\n        return array_key_exists(strtolower($name), $this->getInstalledDirectories());\n    }\n\n    /**\n     * findDirectoryName from a code\n     */\n    public function findDirectoryName($code): ?string\n    {\n        return $this->getInstalledDirectories()[strtolower($code)] ?? null;\n    }\n\n    /**\n     * findInstalledCode returns an installed theme's code from it's dirname\n     */\n    public function findInstalledCode($dirName): ?string\n    {\n        foreach ($this->getInstalled() as $code => $name) {\n            if ($dirName === $name) {\n                return $code;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * findByIdentifier returns a theme object from a directory name\n     */\n    public function findByIdentifier(string $dirName): ?CmsTheme\n    {\n        if (!CmsTheme::exists($dirName)) {\n            return null;\n        }\n\n        return CmsTheme::load($dirName);\n    }\n\n    /**\n     * getThemePaths returns an array of themes and their paths.\n     */\n    public function getThemePaths(): array\n    {\n        $result = [];\n\n        foreach ($this->getThemes() as $dirName => $theme) {\n            $result[$dirName] = $theme->getPath();\n        }\n\n        return $result;\n    }\n\n    /**\n     * getThemePath returns the disk path for the theme\n     */\n    public function getThemePath(string $dirName): string\n    {\n        if (!$theme = $this->findByIdentifier($dirName)) {\n            return '';\n        }\n\n        return $theme->getPath();\n    }\n\n    /**\n     * getProductCode finds the product code for a theme, it relies\n     * on the composer file as the source of truth\n     * author.sometheme\n     */\n    public function getProductCode(string $dirName): string\n    {\n        $name = $this->getComposerCode($dirName);\n\n        $name = System::composerToOctoberCode($name);\n\n        return $name;\n    }\n\n    /**\n     * getComposerCode finds the composer code for a theme\n     * author/sometheme-theme\n     */\n    public function getComposerCode(string $dirName): string\n    {\n        $path = $this->getThemePath($dirName);\n        $file = $path . '/composer.json';\n\n        if (!$path || !File::exists($file)) {\n            return '';\n        }\n\n        $info = json_decode(File::get($file), true);\n\n        return $info['name'] ?? '';\n    }\n\n    /**\n     * getLatestVersion finds the latest version for a theme\n     */\n    public function getLatestVersion(string $dirName): string\n    {\n        $versionHistory = $this->getVersionHistory($dirName);\n\n        $latestVersion = array_key_first($versionHistory);\n\n        if ($latestVersion === null) {\n            return '0.0.0';\n        }\n\n        return (string) $latestVersion;\n    }\n\n    /**\n     * getVersionHistory returns the version history for a theme\n     */\n    public function getVersionHistory(string $dirName): array\n    {\n        $path = $this->getThemePath($dirName);\n\n        if (!File::exists($file = $path . '/version.yaml')) {\n            return [];\n        }\n\n        try {\n            $updates = (array) Yaml::parseFile($file);\n        }\n        catch (Exception $ex) {\n            return [];\n        }\n\n        uksort($updates, function ($a, $b) {\n            return version_compare((string) $b, (string) $a);\n        });\n\n        return $updates;\n    }\n\n    /**\n     * duplicateTheme duplicates a theme\n     */\n    public function duplicateTheme(string $dirName, ?string $newDirName = null): bool\n    {\n        if (!$dirName) {\n            return false;\n        }\n\n        if (!$newDirName) {\n            $newDirName = $dirName . '-copy';\n        }\n\n        $theme = CmsTheme::load($dirName);\n\n        $sourcePath = $theme->getPath();\n        $destinationPath = themes_path().'/'.$newDirName;\n\n        if (is_dir($destinationPath)) {\n            return false;\n        }\n\n        // Duplicate theme\n        File::copyDirectory($sourcePath, $destinationPath);\n\n        // Unlock theme (if required)\n        $this->performUnlockOnTheme($newDirName);\n\n        $newTheme = CmsTheme::load($newDirName);\n        $newName = $newTheme->getConfigValue('name') . ' - Copy';\n        $newTheme->writeConfig(['name' => $newName]);\n\n        return true;\n    }\n\n    /**\n     * createChildTheme will create a child theme\n     */\n    public function createChildTheme(string $dirName, ?string $newDirName = null): bool\n    {\n        if (!$newDirName) {\n            $newDirName = $dirName . '-child';\n        }\n\n        $themePath = themes_path($dirName);\n        $childPath = themes_path($newDirName);\n        $childYaml = $childPath . '/theme.yaml';\n\n        // Child already exists\n        if (file_exists($childPath)) {\n            return false;\n        }\n\n        // Create child\n        File::makeDirectory($childPath);\n        File::copy($themePath . '/theme.yaml', $childYaml);\n\n        $yaml = Yaml::parseFile($childYaml);\n        $yaml['parent'] = $dirName;\n        File::put($childYaml, Yaml::render($yaml));\n\n        return true;\n    }\n\n    /**\n     * importDatabaseTemplates\n     */\n    public function importDatabaseTemplates(string $dirName, ?string $srcDirName = null)\n    {\n        if (!$srcDirName) {\n            $srcDirName = $dirName;\n        }\n\n        $theme = CmsTheme::load($dirName);\n        $themePath = $theme->getPath();\n        if (!$themePath) {\n            return;\n        }\n\n        $templates = Db::table('cms_theme_templates')->where('source', $srcDirName)->get();\n\n        foreach ($templates as $template) {\n            $filePath = $themePath . '/' . $template->path;\n            if ($template->deleted_at) {\n                File::delete($filePath);\n            }\n            else {\n                File::put($filePath, $template->content);\n            }\n        }\n    }\n\n    /**\n     * purgeDatabaseTemplates\n     */\n    public function purgeDatabaseTemplates(string $dirName)\n    {\n        Db::table('cms_theme_templates')->where('source', $dirName)->delete();\n    }\n\n    /**\n     * deleteTheme completely delete a theme from the system\n     */\n    public function deleteTheme(string $theme)\n    {\n        if (!$theme) {\n            return false;\n        }\n\n        $theme = CmsTheme::load($theme);\n        if ($theme->isActiveTheme()) {\n            throw new ApplicationException(__('Cannot delete the active theme, try making another theme active first.'));\n        }\n\n        $theme->removeCustomData();\n\n        // Delete from file system\n        $themePath = $theme->getPath();\n        if (is_dir($themePath)) {\n            File::deleteDirectory($themePath);\n        }\n    }\n\n    /**\n     * findMissingDependencies scans the system plugins to locate any dependencies that\n     * are not currently installed. Returns an array of plugin codes that are needed.\n     *\n     *     ThemeManager::instance()->findMissingDependencies();\n     *\n     * @return array\n     */\n    public function findMissingDependencies(): array\n    {\n        $manager = \\System\\Classes\\PluginManager::instance();\n\n        $missing = [];\n\n        foreach ($this->getThemes() as $theme) {\n            $required = $theme->getConfigValue('require', false);\n            if (!$required || !is_array($required)) {\n                continue;\n            }\n\n            foreach ($required as $require) {\n                if (!$require || $manager->hasPlugin($require)) {\n                    continue;\n                }\n\n                if (!in_array($require, $missing)) {\n                    $missing[] = $require;\n                }\n            }\n        }\n\n        return $missing;\n    }\n\n    /**\n     * findLockableThemes returns themes that are installed via composer\n     */\n    public function findLockableThemes(): array\n    {\n        $packages = ComposerManager::instance()->listAllPackages();\n\n        $themes = [];\n\n        $crossCheckPackage = function(string $composerCode, array $packages): bool {\n            foreach ($packages as $package) {\n                $name = $package['name'] ?? null;\n                if ($name === $composerCode) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n\n        foreach ($this->getThemes() as $dirName => $theme) {\n            $composerCode = $this->getComposerCode($dirName);\n            if (!$composerCode || !$crossCheckPackage($composerCode, $packages)) {\n                continue;\n            }\n\n            $themes[$composerCode] = $dirName;\n        }\n\n        return $themes;\n    }\n\n    /**\n     * performLockOnTheme will add a lock file on a theme\n     * Returns true if the process was successful\n     */\n    public function performLockOnTheme(string $dirName): bool\n    {\n        $themePath = themes_path($dirName);\n\n        $lockFile = $themePath . '/.themelock';\n        $noLockFile = $themePath . '/.themenolock';\n        if (file_exists($lockFile) || file_exists($noLockFile)) {\n            return false;\n        }\n\n        // Lock theme\n        try {\n            File::put($lockFile, 1);\n        }\n        catch (Exception $ex) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * performUnlockOnTheme will remove the lock file on a theme\n     * Returns true if the process was successful\n     */\n    public function performUnlockOnTheme(string $dirName): bool\n    {\n        $themePath = themes_path($dirName);\n\n        $lockFile = $themePath . '/.themelock';\n        if (!file_exists($lockFile)) {\n            return false;\n        }\n\n        // Unlock theme\n        try {\n            File::delete($lockFile);\n        }\n        catch (Exception $ex) {\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/ThisVariable.php",
    "content": "<?php namespace Cms\\Classes;\n\nuse October\\Rain\\Extension\\Extendable;\nuse October\\Contracts\\Twig\\CallsAnyMethod;\nuse ArrayAccess;\n\n/**\n * ThisVariable is a read-only container for accessing `{{ this }}` in Twig\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThisVariable extends Extendable implements CallsAnyMethod, ArrayAccess\n{\n    /**\n     * @var array config values for this instance\n     */\n    public $config = [];\n\n    /**\n     * __construct\n     */\n    public function __construct($config = [])\n    {\n        $this->config = $config;\n\n        parent::__construct();\n    }\n\n    /**\n     * get an attribute from the element instance, with closure support\n     * @param  string  $key\n     * @param  mixed  $default\n     * @return mixed\n     */\n    public function get($key, $default = null)\n    {\n        if (array_key_exists($key, $this->config)) {\n            return value($this->config[$key]);\n        }\n\n        return value($default);\n    }\n\n    /**\n     * __call handles dynamic calls to the element instance to set config.\n     * @param  string  $method\n     * @param  array  $parameters\n     * @return $this\n     */\n    public function __call($method, $parameters)\n    {\n        if ($controller = $this->get('controller')) {\n            if (($partialObj = $controller->getPartialObject()) && $partialObj->methodExists($method)) {\n                return $partialObj->$method(...$parameters);\n            }\n\n            if (($pageObj = $controller->getPageObject()) && $pageObj->methodExists($method)) {\n                return $pageObj->$method(...$parameters);\n            }\n\n            if (($layoutObj = $controller->getLayoutObject()) && $layoutObj->methodExists($method)) {\n                return $layoutObj->$method(...$parameters);\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * offsetExists determines if the given offset exists.\n     * @param  string  $offset\n     * @return bool\n     */\n    public function offsetExists($offset): bool\n    {\n        return isset($this->config[$offset]);\n    }\n\n    /**\n     * offsetGet gets the value for a given offset.\n     * @param  string  $offset\n     * @return mixed\n     */\n    public function offsetGet($offset): mixed\n    {\n        return $this->get($offset);\n    }\n\n    /**\n     * offsetSet does nothing, read-only.\n     * @param  string  $offset\n     * @param  mixed  $value\n     */\n    public function offsetSet($offset, $value): void\n    {\n    }\n\n    /**\n     * offsetUnset does nothing, read-only.\n     * @param  string  $offset\n     * @return void\n     */\n    public function offsetUnset($offset): void\n    {\n    }\n\n    /**\n     * __toString as an exception handler.\n     */\n    public function __toString()\n    {\n        return '';\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/controller/HasAjaxRequests.php",
    "content": "<?php namespace Cms\\Classes\\Controller;\n\nuse Lang;\nuse Flash;\nuse Request;\nuse Response;\nuse Cms\\Classes\\CmsException;\nuse Cms\\Classes\\PartialWatcher;\nuse Cms\\Classes\\AjaxApiResponse;\nuse Cms\\Classes\\Partial;\nuse October\\Rain\\Exception\\AjaxException;\nuse October\\Rain\\Exception\\ApplicationException;\nuse October\\Rain\\Exception\\ValidationException;\nuse Illuminate\\Http\\RedirectResponse;\nuse Exception;\nuse Throwable;\n\n/**\n * HasAjaxRequests\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasAjaxRequests\n{\n    /**\n     * @var \\Larajax\\Classes\\AjaxRequest ajaxRequest\n     */\n    protected $ajaxRequest;\n\n    /**\n     * getAjaxRequest\n     */\n    public function getAjaxRequest()\n    {\n        return $this->ajaxRequest ??= ajax()->request();\n    }\n\n    /**\n     * getAjaxHandler returns the AJAX handler for the current request, if available.\n     * @return string\n     */\n    public function getAjaxHandler()\n    {\n        $request = $this->getAjaxRequest();\n\n        if ($request->hasAjaxHandler()) {\n            return $request->qualifiedHandler;\n        }\n\n        return null;\n    }\n\n    /**\n     * getAjaxPartialName returns a partial name or true\n     */\n    protected function getAjaxPartialName()\n    {\n        $request = $this->getAjaxRequest();\n\n        if ($request->hasAjaxHandler()) {\n            return $request->partial;\n        }\n\n        return null;\n    }\n\n    /**\n     * runPageCapture captures partial output and runs AJAX handlers in partials\n     * if they are seen\n     */\n    protected function runPageCapture($page, $ajaxPartial)\n    {\n        // Set up watcher\n        $this->partialWatcher = new PartialWatcher;\n        $this->partialWatcher->startCapture(\n            $ajaxPartial,\n            $this->getAjaxHandlerPartialList()\n        );\n\n        // Run page in capture mode\n        if ($result = $this->runPage($page, ['capture' => true])) {\n            return $result;\n        }\n\n        // Execute AJAX event\n        if ($ajaxResponse = $this->execAjaxHandlers()) {\n            return $ajaxResponse;\n        }\n    }\n\n    /**\n     * getAjaxHandlerPartialList\n     */\n    protected function getAjaxHandlerPartialList(): array\n    {\n        $request = $this->getAjaxRequest();\n\n        if ($request->hasAjaxHandler()) {\n            $partials = $request->partialList;\n\n            foreach ($partials as $partial) {\n                if (!Partial::validateRequestName($partial)) {\n                    throw new CmsException(Lang::get('cms::lang.partial.invalid_name', ['name'=>e($partial)]));\n                }\n            }\n\n            return $partials;\n        }\n\n        return [];\n    }\n\n    /**\n     * execAjaxHandlers executes the page, layout, component and plugin AJAX handlers.\n     * @return mixed Returns the AJAX Response object or null.\n     */\n    protected function execAjaxHandlers()\n    {\n        $handler = $this->getAjaxHandler();\n        if (!$handler) {\n            return null;\n        }\n\n        try {\n            // Validate the handler name\n            if (!preg_match('/^(?:\\w+\\:{2})?on[A-Z]{1}[\\w+]*$/', $handler)) {\n                throw new CmsException(Lang::get('cms::lang.ajax_handler.invalid_name', ['name'=>e($handler)]));\n            }\n\n            // Validates the handler partial list\n            $partialList = $this->getAjaxHandlerPartialList();\n\n            // Execute the handler\n            $result = null;\n            if ($this->partialWatcher) {\n                if ($exception = $this->partialWatcher->getHandlerException()) {\n                    throw $exception;\n                }\n\n                $result = $this->partialWatcher->getHandlerResponse();\n            }\n\n            if (!$result) {\n                $result = $this->runAjaxHandler($handler);\n            }\n\n            if (!$result) {\n                throw new CmsException(Lang::get('cms::lang.ajax_handler.not_found', ['name'=>e($handler)]));\n            }\n\n            $response = $result && $result !== true ? ajax()::wrap($result) : ajax();\n\n            // Include partials\n            if ($partialList = $this->ajaxRequest->partialList) {\n                foreach ($partialList as $partial) {\n                    $partialContents = null;\n                    if ($this->partialWatcher) {\n                        $partialContents = $this->partialWatcher->getPartialContents($partial);\n                    }\n                    if (!$partialContents) {\n                        $partialContents = $this->renderPartial($partial);\n                    }\n                    $response->partial($partial, $partialContents);\n                }\n            }\n        }\n        catch (Throwable $ex) {\n            $response = ajax()->exception($ex);\n        }\n\n        if ($this->hasAssetsDefined()) {\n            foreach ($this->getAssetPathsWithAttributes() as $type => $paths) {\n                $response->asset($type, $paths);\n            }\n        }\n\n        // Look for any flash messages, only if response is not redirecting\n        if ($this->ajaxRequest->wantsFlash && !$response->isRedirect() && Flash::check()) {\n            foreach (Flash::all() as $level => $text) {\n                $response->flash($level, $text);\n            }\n        }\n\n        return $response;\n    }\n\n    /**\n     * runAjaxHandlerResponse is used by the ajaxHandler Twig function.\n     */\n    public function runAjaxHandlerAsResponse($handler)\n    {\n        $response = new AjaxApiResponse;\n\n        try {\n            $result = $this->runAjaxHandler($handler);\n            $response->addPageVars($this->pageObj->vars);\n\n            if (Flash::check()) {\n                $response->addFlashMessages(Flash::all());\n            }\n\n            $response->setHandlerResponse($result);\n        }\n        catch (Exception $ex) {\n            $response->setHandlerException($ex);\n        }\n\n        return $response;\n    }\n\n    /**\n     * execPostbackHandler is used internally to execute a postback version of an\n     * AJAX handler. This process fails without any exceptions to keep the page\n     * cycle going.\n     */\n    protected function execPostbackHandler()\n    {\n        if (Request::method() !== 'POST') {\n            return null;\n        }\n\n        $handler = post('_handler');\n        if (!$handler) {\n            return null;\n        }\n\n        if (!$this->verifyCsrfToken()) {\n            return null;\n        }\n\n        // Validate the handler name\n        if (!preg_match('/^(?:\\w+\\:{2})?on[A-Z]{1}[\\w+]*$/', $handler)) {\n            return null;\n        }\n\n        try {\n            $handlerResponse = $this->runAjaxHandler($handler);\n            if ($handlerResponse && $handlerResponse !== true) {\n                return $handlerResponse;\n            }\n        }\n        catch (ValidationException $ex) {\n            $errors = $this->vars['errors'] ?? new \\Illuminate\\Support\\ViewErrorBag;\n            $this->vars['errors'] = $errors->put('default', $ex->getErrors());\n            Flash::error($ex->getMessage());\n        }\n        catch (ApplicationException $ex) {\n            Flash::error($ex->getMessage());\n        }\n        catch (Exception $ex) {\n            if (method_exists($ex, 'getSafeMessage')) {\n                Flash::error($ex->{'getSafeMessage'}());\n            }\n            else {\n                throw $ex;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * runAjaxHandler tries to find and run an AJAX handler in the page, layout, components and plugins.\n     * The method stops as soon as the handler is found. It will return the response from the handler,\n     * or true if the handler was found. Returns false otherwise.\n     */\n    protected function runAjaxHandler($handler)\n    {\n        /**\n         * @event cms.ajax.beforeRunHandler\n         * Provides an opportunity to modify an AJAX request\n         *\n         * The parameter provided is `$handler` (the requested AJAX handler to be run)\n         *\n         * Example usage (forwards AJAX handlers to a backend widget):\n         *\n         *     Event::listen('cms.ajax.beforeRunHandler', function ((\\Cms\\Classes\\Controller) $controller, (string) $handler) {\n         *         if (strpos($handler, '::')) {\n         *             [$componentAlias, $handlerName] = explode('::', $handler);\n         *             if ($componentAlias === $this->getBackendWidgetAlias()) {\n         *                 return $this->backendControllerProxy->runAjaxHandler($handler);\n         *             }\n         *         }\n         *     });\n         *\n         * Or\n         *\n         *     $this->controller->bindEvent('ajax.beforeRunHandler', function ((string) $handler) {\n         *         if (strpos($handler, '::')) {\n         *             [$componentAlias, $handlerName] = explode('::', $handler);\n         *             if ($componentAlias === $this->getBackendWidgetAlias()) {\n         *                 return $this->backendControllerProxy->runAjaxHandler($handler);\n         *             }\n         *         }\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.ajax.beforeRunHandler', [$handler])) {\n            return $event;\n        }\n\n        // Process Component handler\n        if (strpos($handler, '::')) {\n            [$componentName, $handlerName] = explode('::', $handler);\n            $componentObj = $this->findComponentByName($componentName);\n\n            if ($componentObj && $componentObj->methodExists($handlerName)) {\n                return $this->inComponentContext($componentObj, function() use ($componentObj, $handlerName) {\n                    return $componentObj->runAjaxHandler($handlerName) ?: true;\n                });\n            }\n\n            return false;\n        }\n\n        // Process partial code section handler\n        if ($this->partialStack && ($partialObj = $this->partialStack->findPartialByHandler($handler))) {\n            if (method_exists($partialObj, $handler)) {\n                return $partialObj->$handler() ?: true;\n            }\n        }\n\n        // Process page code section handler\n        if (method_exists($this->pageObj, $handler)) {\n            return $this->pageObj->$handler() ?: true;\n        }\n\n        // Process layout code section handler\n        if (!$this->layout->isFallBack() && method_exists($this->layoutObj, $handler)) {\n            return $this->layoutObj->$handler() ?: true;\n        }\n\n        // Cycle each component to locate a usable handler\n        if (($componentObj = $this->findComponentByHandler($handler)) !== null) {\n            return $this->inComponentContext($componentObj, function() use ($componentObj, $handler) {\n                return $componentObj->runAjaxHandler($handler) ?: true;\n            });\n        }\n\n        // Generic handler that does nothing\n        if ($handler === 'onAjax') {\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/controller/HasComponentHelpers.php",
    "content": "<?php namespace Cms\\Classes\\Controller;\n\nuse Lang;\nuse Config;\nuse Cms\\Classes\\ComponentManager;\nuse Cms\\Classes\\CmsException;\nuse Cms\\Classes\\ComponentPartial;\nuse Cms\\Classes\\ComponentBase;\nuse Larajax\\Contracts\\ViewComponentInterface;\nuse Throwable;\n\n/**\n * HasComponentHelpers\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasComponentHelpers\n{\n    /**\n     * addComponentInstance\n     */\n    public function addComponentInstance(string $alias, ViewComponentInterface $instance)\n    {\n        $this->page->components[$alias] = $instance;\n    }\n\n    /**\n     * getComponentInstance returns an instance of a component based on its alias\n     */\n    public function getComponentInstance(string $alias): ViewComponentInterface\n    {\n        return $this->findComponentByName($alias);\n    }\n\n    /**\n     * addComponent class or short name to the page or layout object, assigning\n     * it an alias with configuration as properties.\n     * @param mixed  $name\n     * @param string $alias\n     * @param array  $properties\n     * @param bool   $addToLayout\n     * @return ComponentBase|null\n     */\n    public function addComponent($name, $alias, $properties = [], $addToLayout = false)\n    {\n        $manager = ComponentManager::instance();\n\n        if ($addToLayout) {\n            $componentObj = $manager->makeComponent($name, $this->layoutObj, $properties);\n        }\n        else {\n            $componentObj = $manager->makeComponent($name, $this->pageObj, $properties);\n        }\n\n        if (!$componentObj) {\n            $strictMode = Config::get('cms.strict_components', false);\n            if ($strictMode) {\n                throw new CmsException(Lang::get('cms::lang.component.not_found', ['name' => $name]));\n            }\n            else {\n                return $this->vars[$alias] = null;\n            }\n        }\n\n        $componentObj->alias = $alias;\n\n        if ($addToLayout) {\n            $this->layout->components[$alias] = $componentObj;\n        }\n        else {\n            $this->page->components[$alias] = $componentObj;\n        }\n\n        $this->vars[$alias] = $componentObj->makePrimaryAccessor();\n\n        $this->parseRouteParamsOnComponent($componentObj, $this->router->getParameters());\n\n        try {\n            $componentObj->init();\n        }\n        catch (Throwable $e) {\n            unset($this->vars[$alias]);\n\n            if ($addToLayout) {\n                unset($this->layout->components[$alias]);\n            }\n            else {\n                unset($this->page->components[$alias]);\n            }\n\n            throw $e;\n        }\n\n        return $componentObj;\n    }\n\n    /**\n     * addPartialComponent adds a component to a partial object, used internally by\n     * the public renderPartial method\n     */\n    protected function addPartialComponent($partial, &$vars, $name, $alias, $properties = [])\n    {\n        $manager = ComponentManager::instance();\n\n        $componentObj = $manager->makeComponent($name, $this->pageObj, $properties);\n\n        if (!$componentObj) {\n            $strictMode = Config::get('cms.strict_components', false);\n            if ($strictMode) {\n                throw new CmsException(Lang::get('cms::lang.component.not_found', ['name' => $name]));\n            }\n            else {\n                return $vars[$alias] = null;\n            }\n        }\n\n        $componentObj->alias = $alias;\n\n        $partial->components[$alias] = $componentObj;\n\n        $vars[$alias] = $componentObj->makePrimaryAccessor();\n\n        $this->partialStack->addComponent($alias, $componentObj);\n\n        $this->parseRouteParamsOnComponent($componentObj, $this->router->getParameters());\n\n        $componentObj->init();\n\n        $this->parseEnvironmentVarsOnComponent($componentObj, $vars + $this->vars);\n\n        return $componentObj;\n    }\n\n    /**\n     * findComponentByName searches the layout and page components by an alias\n     * and returns the component object if found.\n     * @param $name\n     * @return ComponentBase|null\n     */\n    public function findComponentByName($name)\n    {\n        if (isset($this->page->components[$name])) {\n            return $this->page->components[$name];\n        }\n\n        if (isset($this->layout->components[$name])) {\n            return $this->layout->components[$name];\n        }\n\n        if ($this->partialStack) {\n            $partialComponent = $this->partialStack->getComponent($name);\n            if ($partialComponent !== null) {\n                return $partialComponent;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * findComponentByHandler searches the layout and page components by an AJAX handler\n     * and returns the component object if found.\n     * @param string $handler\n     * @return ComponentBase|null\n     */\n    public function findComponentByHandler($handler)\n    {\n        foreach ($this->page->components as $component) {\n            if ($component->methodExists($handler)) {\n                return $component;\n            }\n        }\n\n        foreach ($this->layout->components as $component) {\n            if ($component->methodExists($handler)) {\n                return $component;\n            }\n        }\n\n        if ($this->partialStack) {\n            foreach ($this->partialStack->getComponents() as $component) {\n                if ($component->methodExists($handler)) {\n                    return $component;\n                }\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * findComponentByPartial searches the layout and page components by a partial file\n     * and returns the component object if found.\n     * @param string $partial\n     * @return ComponentBase|null\n     */\n    public function findComponentByPartial($partial)\n    {\n        foreach ($this->page->components as $component) {\n            if (ComponentPartial::check($component, $partial)) {\n                return $component;\n            }\n        }\n\n        foreach ($this->layout->components as $component) {\n            if (ComponentPartial::check($component, $partial)) {\n                return $component;\n            }\n        }\n\n        if ($this->partialStack) {\n            foreach ($this->partialStack->getComponents() as $component) {\n                if (ComponentPartial::check($component, $partial)) {\n                    return $component;\n                }\n            }\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/controller/HasRenderers.php",
    "content": "<?php namespace Cms\\Classes\\Controller;\n\nuse Lang;\nuse Config;\nuse Cms\\Classes\\Partial;\nuse Cms\\Classes\\Content;\nuse Cms\\Classes\\CodeParser;\nuse Cms\\Classes\\PartialStack;\nuse Cms\\Classes\\CmsException;\nuse Cms\\Classes\\ComponentPartial;\nuse Cms\\Classes\\ComponentManager;\nuse System\\Helpers\\View as ViewHelper;\nuse October\\Rain\\Parse\\Bracket as TextParser;\nuse Exception;\n\n/**\n * HasRenderers\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasRenderers\n{\n    /**\n     * renderPage renders a requested page.\n     * The framework uses this method internally.\n     */\n    public function renderPage()\n    {\n        // Prevents infinite loop by setting to empty string first\n        if ($this->pageContents === null) {\n            $this->pageContents = '';\n            $this->pageContents = $this->renderPageContents();\n        }\n\n        $contents = $this->pageContents;\n\n        /**\n         * @event cms.page.render\n         * Provides an opportunity to manipulate the page's rendered contents\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.render', function ((\\Cms\\Classes\\Controller) $controller, (string) $pageContents) {\n         *         return 'My custom contents';\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.render', function ((string) $pageContents) {\n         *         return 'My custom contents';\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.render', [&$contents])) {\n            return $event;\n        }\n\n        return $contents;\n    }\n\n    /**\n     * renderLayoutContents\n     */\n    protected function renderLayoutContents()\n    {\n        CmsException::mask($this->layout, 400);\n        $this->loader->setObject($this->layout);\n        $template = $this->twig->load($this->layout->getFilePath());\n        $result = $template->render($this->vars);\n        CmsException::unmask();\n        return $result;\n    }\n\n    /**\n     * renderPageContents with exception masking\n     */\n    protected function renderPageContents()\n    {\n        CmsException::mask($this->page, 400);\n        $this->loader->setObject($this->page);\n        $template = $this->twig->load($this->page->getFilePath());\n        $pageContents = $template->render($this->vars);\n        CmsException::unmask();\n        return $pageContents;\n    }\n\n    /**\n     * loadPartialObject loads a partial for rendering.\n     * @return Partial|false\n     */\n    public function loadPartialObject($name)\n    {\n        // Alias @ symbol for ::\n        if (substr($name, 0, 1) === '@') {\n            $name = '::' . substr($name, 1);\n        }\n\n        // Process Component partial\n        if (strpos($name, '::') !== false) {\n            [$componentAlias, $partialName] = explode('::', $name);\n\n            // Component alias not supplied\n            if (!strlen($componentAlias)) {\n                if ($this->componentContext !== null) {\n                    $componentObj = $this->componentContext;\n                }\n                elseif (($componentObj = $this->findComponentByPartial($partialName)) === null) {\n                    return false;\n                }\n            }\n            // Component alias is supplied\n            elseif (($componentObj = $this->findComponentByName($componentAlias)) === null) {\n                return false;\n            }\n\n            $this->componentContext = $componentObj;\n\n            // Check if the theme has an override\n            $partial = ComponentPartial::loadOverrideCached($this->theme, $componentObj, $partialName);\n\n            // Check the component partial\n            if ($partial === null) {\n                $partial = ComponentPartial::loadCached($componentObj, $partialName);\n            }\n\n            if ($partial === null) {\n                return false;\n            }\n\n            // Set context for self access\n            $this->vars['__SELF__'] = $componentObj;\n        }\n        // Process theme partial\n        elseif (($partial = Partial::loadCached($this->theme, $name)) === null) {\n            return false;\n        }\n\n        return $partial;\n    }\n\n    /**\n     * renderPartial renders a requested partial. The framework uses this method internally.\n     * @param string $name The view to load.\n     * @param array $parameters Parameter variables to pass to the view.\n     * @param bool $throwException Throw an exception if the partial is not found.\n     * @return mixed Partial contents or false if not throwing an exception.\n     */\n    public function renderPartial($name, $parameters = [], $throwException = true)\n    {\n        $vars = $this->vars;\n        $this->vars = array_merge($this->vars, $parameters);\n\n        /**\n         * @event cms.page.beforeRenderPartial\n         * Provides an opportunity to manipulate the name of the partial being rendered before it renders\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.beforeRenderPartial', function ((\\Cms\\Classes\\Controller) $controller, (string) $partialName) {\n         *         return Cms\\Classes\\Partial::loadCached($theme, 'custom-partial-name');\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.beforeRenderPartial', function ((string) $partialName) {\n         *         return Cms\\Classes\\Partial::loadCached($theme, 'custom-partial-name');\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.beforeRenderPartial', [$name])) {\n            $partial = $event;\n        }\n        else {\n            $partial = $this->loadPartialObject($name, $throwException);\n        }\n\n        if ($partial === false) {\n            if ($throwException) {\n                throw new CmsException(Lang::get('cms::lang.partial.not_found_name', ['name'=>$name]));\n            }\n            else {\n                return false;\n            }\n        }\n\n        // Run functions for CMS partials only (Cms\\Classes\\Partial)\n        if ($partial instanceof Partial) {\n            if (!$this->partialStack) {\n                $this->partialStack = new PartialStack;\n            }\n            $this->partialStack->stackPartial();\n\n            foreach ($partial->settings['components'] as $component => $properties) {\n                // Do not inject the viewBag component to the environment.\n                // Not sure if they're needed there by the requirements,\n                // but there were problems with array-typed properties used by Static Pages\n                // snippets and parseRouteParamsOnComponent(). --ab\n                // @deprecated check if this is still needed --sg\n                if ($component === 'viewBag') {\n                    continue;\n                }\n\n                [$componentName, $alias] = strpos($component, ' ')\n                    ? explode(' ', $component)\n                    : [$component, $component];\n\n                $this->addPartialComponent($partial, $parameters, $componentName, $alias, $properties);\n            }\n\n            CmsException::mask($this->page, 300);\n            $parser = new CodeParser($partial);\n            $partialObj = $parser->source($this->page, $this->layout, $this);\n            $this->partialStack->addPartialObj($partialObj);\n            CmsException::unmask();\n\n            CmsException::mask($partial, 300);\n            $partialObj->onStart();\n            $partial->runComponents();\n            $partialObj->onEnd();\n            CmsException::unmask();\n\n            // This call intentionally placed after the lifecycle events to mimic\n            // the page action call found in backend ajax. Often we will want the\n            // state accessible after everything runs, instead of reverting state\n            if ($this->partialWatcher && $this->partialWatcher->isWatchingHandler($name)) {\n                try {\n                    if ($result = $this->runAjaxHandler($this->getAjaxHandler())) {\n                        $this->partialWatcher->setHandlerResponse($result);\n                    }\n                }\n                catch (Exception $ex) {\n                    $this->partialWatcher->setHandlerException($ex);\n                }\n            }\n        }\n\n        // Render the partial\n        CmsException::mask($partial, 400);\n        $this->loader->setObject($partial);\n        $template = $this->twig->load($partial->getFilePath());\n        $partialContent = $template->render(array_merge($this->vars, $parameters));\n        CmsException::unmask();\n\n        if ($partial instanceof Partial) {\n            $this->partialStack->unstackPartial();\n        }\n\n        $this->vars = $vars;\n\n        /**\n         * @event cms.page.renderPartial\n         * Provides an opportunity to manipulate the output of a partial after being rendered\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.renderPartial', function ((\\Cms\\Classes\\Controller) $controller, (string) $partialName, (string) &$partialContent) {\n         *         return \"Overriding content\";\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.renderPartial', function ((string) $partialName, (string) &$partialContent) {\n         *         return \"Overriding content\";\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.renderPartial', [$name, &$partialContent])) {\n            return $event;\n        }\n\n        // Record event\n        if ($this->partialWatcher) {\n            $this->partialWatcher->setPartialContents($name, $partialContent);\n        }\n\n        return $partialContent;\n    }\n\n    /**\n     * loadContentObject loads content for rendering.\n     * @return Content|false\n     */\n    public function loadContentObject($name)\n    {\n        // Load content from theme\n        if (($content = Content::loadCached($this->theme, $name)) === null) {\n            return false;\n        }\n\n        return $content;\n    }\n\n    /**\n     * renderContent renders a requested content file. The framework uses this method internally.\n     * @param string $name The content view to load.\n     * @param array $parameters Parameter variables to pass to the view.\n     * @return mixed Contents or false if now throwing an exception.\n     */\n    public function renderContent($name, $parameters = [], $throwException = true)\n    {\n        /**\n         * @event cms.page.beforeRenderContent\n         * Provides an opportunity to manipulate the name of the content file being rendered before it renders\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.beforeRenderContent', function ((\\Cms\\Classes\\Controller) $controller, (string) $contentName) {\n         *         return Cms\\Classes\\Content::loadCached($theme, 'custom-content-name');\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.beforeRenderContent', function ((string) $contentName) {\n         *         return Cms\\Classes\\Content::loadCached($theme, 'custom-content-name');\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.beforeRenderContent', [$name])) {\n            $content = $event;\n        }\n        else {\n            $content = $this->loadContentObject($name);\n        }\n\n        if ($content === false) {\n            if ($throwException) {\n                throw new CmsException(Lang::get('cms::lang.content.not_found_name', ['name'=>$name]));\n            }\n            else {\n                return false;\n            }\n        }\n\n        $fileContent = $content->parsedMarkup;\n\n        // Inject global view variables\n        $globalVars = ViewHelper::getGlobalVars();\n        if (!empty($globalVars)) {\n            $parameters = (array) $parameters + $globalVars;\n        }\n\n        // Parse basic template variables\n        if (!empty($parameters)) {\n            $fileContent = TextParser::parse($fileContent, $parameters);\n        }\n\n        /**\n         * @event cms.page.renderContent\n         * Provides an opportunity to manipulate the output of a content file after being rendered\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.page.renderContent', function ((\\Cms\\Classes\\Controller) $controller, (string) $contentName, (string) &$fileContent) {\n         *         return \"Overriding content\";\n         *     });\n         *\n         * Or\n         *\n         *     $controller->bindEvent('page.renderContent', function ((string) $contentName, (string) &$fileContent) {\n         *         return \"Overriding content\";\n         *     });\n         *\n         */\n        if ($event = $this->fireSystemEvent('cms.page.renderContent', [$name, &$fileContent])) {\n            return $event;\n        }\n\n        return $fileContent;\n    }\n\n    /**\n     * renderComponent renders a component's default content, preserves the previous component context.\n     * @param $name\n     * @param array $parameters\n     * @return string Returns the component default contents.\n     */\n    public function renderComponent($name, $parameters = [])\n    {\n        $result = null;\n        $previousContext = $this->componentContext;\n\n        if ($componentObj = $this->findComponentByName($name)) {\n            $componentObj->id = uniqid($name);\n            $componentObj->setProperties(array_merge($componentObj->getProperties(), $parameters));\n            $this->componentContext = $componentObj;\n            $result = $componentObj->onRender();\n        }\n\n        if (!$result) {\n            $result = $this->renderPartial($name.'::default', [], false);\n        }\n\n        $this->componentContext = $previousContext;\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/controller/HasThemeAssetMaker.php",
    "content": "<?php namespace Cms\\Classes\\Controller;\n\nuse Url;\nuse File;\nuse Config;\nuse System\\Classes\\CombineAssets;\n\n/**\n * ThemeAssetMaker adds theme-based asset methods to a class\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasThemeAssetMaker\n{\n    use \\System\\Traits\\AssetMaker;\n\n    /**\n     * combineAssets\n     * @inheritDoc\n     */\n    public function combineAssets(array $assets, $localPath = ''): string\n    {\n        if (empty($assets)) {\n            return '';\n        }\n\n        $assetPath = $localPath ?: base_path($this->assetPath);\n\n        return CombineAssets::combine(\n            $this->getMultipleThemeAssetPaths($assets),\n            $assetPath\n        );\n    }\n\n    /**\n     * getAssetPath\n     * @inheritDoc\n     */\n    public function getAssetPath($fileName, $assetPath = null)\n    {\n        if (starts_with($fileName, ['//', 'http://', 'https://'])) {\n            return $fileName;\n        }\n\n        if (!$assetPath) {\n            $assetPath = $this->assetPath;\n        }\n\n        if (\n            $assetPath === null ||\n            substr($fileName, 0, 1) === '/' ||\n            File::isPathSymbol($fileName)\n        ) {\n            return $fileName;\n        }\n\n        return $this->getThemeAssetRelativePath($fileName);\n    }\n\n    /**\n     * getMultipleThemeAssetPaths checks combiner paths in the theme\n     * and rewrites them to parent assets, if necessary\n     */\n    protected function getMultipleThemeAssetPaths(array $paths): array\n    {\n        $theme = $this->getTheme();\n\n        if (!$theme->hasParentTheme()) {\n            return $paths;\n        }\n\n        foreach ($paths as &$path) {\n            // Combiner alias\n            if (substr($path, 0, 1) === '@') {\n                continue;\n            }\n\n            // Path symbol\n            if (File::isPathSymbol($path)) {\n                continue;\n            }\n\n            // Fully qualified local path\n            if (file_exists($path)) {\n                continue;\n            }\n\n            // Parent asset\n            if ($theme->useParentAsset($path)) {\n                $path = $theme->getParentTheme()->getPath().'/'.$path;\n            }\n        }\n\n        return $paths;\n    }\n\n    /**\n     * getThemeAssetPath\n     */\n    protected function getThemeAssetRelativePath(?string $relativePath = null): string\n    {\n        $dirName = $this->getTheme()->getDirName();\n\n        // Build path\n        $path = \"/themes/{$dirName}\";\n        if ($relativePath !== null) {\n            $path .= '/' . $relativePath;\n        }\n\n        return $path;\n    }\n\n    /**\n     * getThemeAssetUrl returns the public directory for theme assets\n     */\n    protected function getThemeAssetUrl(?string $relativePath = null): string\n    {\n        // Determine directory name for asset\n        $theme = $this->getTheme();\n        $dirName = $theme->getDirName();\n\n        if (\n            $relativePath !== null &&\n            $theme->useParentAsset($relativePath) &&\n            ($parentTheme = $theme->getParentTheme())\n        ) {\n            $dirName = $parentTheme->getDirName();\n        }\n\n        // Configuration for theme asset location, default to relative path\n        $assetUrl = (string) Config::get('system.themes_asset_url') ?: '/themes';\n\n        // Build path\n        $path = $assetUrl . '/' . $dirName;\n        if ($relativePath !== null) {\n            $path .= '/' . $relativePath;\n        }\n\n        return $path;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/HasComponentListLoader.php",
    "content": "<?php namespace Cms\\Classes\\EditorExtension;\n\nuse Cms\\Components\\ViewBag;\nuse Cms\\Classes\\ComponentManager;\nuse Cms\\Classes\\CmsCompoundObject;\nuse Cms\\Helpers\\Component as ComponentHelpers;\nuse Exception;\n\n/**\n * HasComponentListLoader loads components the CMS Editor Extension\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasComponentListLoader\n{\n    /**\n     * loadTemplateComponents\n     */\n    private function loadTemplateComponents(CmsCompoundObject $template)\n    {\n        $manager = ComponentManager::instance();\n\n        $result = [];\n        $viewBagFound = false;\n        foreach ($template->settings['components'] as $name => $properties) {\n            [$name, $alias] = strpos($name, ' ') ? explode(' ', $name) : [$name, $name];\n\n            try {\n                $templateComponent = $this->makeTemplateComponent($manager, $name, $properties, $alias);\n                $result[] = $templateComponent;\n\n                $viewBagFound = $viewBagFound || $templateComponent['className'] == ViewBag::class;\n            }\n            catch (Exception $ex) {\n                $propertyValues = $this->makePropertiesForUnknownComponent($properties, $alias);\n                $propertyValues = json_encode($propertyValues, JSON_UNESCAPED_SLASHES);\n\n                $result[] = [\n                    'title' => $name,\n                    'alias' => $alias,\n                    'icon' => 'icon-bug',\n                    'description' => $ex->getMessage(),\n                    'isUnknownComponent' => true,\n                    'inspectorEnabled' => false,\n                    'className' => '',\n                    'propertyValues' => $propertyValues,\n                    'name' => $name\n                ];\n            }\n        }\n\n        if (!$viewBagFound) {\n            // Always inject a view bag so that custom template properties\n            // defined using the CMS extensibility API can use it.\n            // Empty view bags get automatically removed from templates\n            // before they are saved.\n            //\n            $result[] = $this->makeTemplateComponent($manager, 'viewBag', [], 'viewBag');\n        }\n\n        return $result;\n    }\n\n    /**\n     * Used to inject ViewBag to new CMS document templates\n     */\n    private function getViewBagComponent()\n    {\n        $manager = ComponentManager::instance();\n        return $this->makeTemplateComponent($manager, 'viewBag', [], 'viewBag');\n    }\n\n    /**\n     * getComponentPluginIcon\n     */\n    private function getComponentPluginIcon($manager, $componentObj)\n    {\n        if ($icon = ComponentHelpers::getComponentIcon($componentObj)) {\n            return $icon;\n        }\n\n        return $manager->findComponentOwnerDetails($componentObj)['icon'] ?? 'icon-puzzle-piece';\n    }\n\n    /**\n     * makePropertiesForUnknownComponent\n     */\n    private function makePropertiesForUnknownComponent($properties, $alias)\n    {\n        $properties['oc.alias'] = $alias;\n\n        return $properties;\n    }\n\n    /**\n     * makeTemplateComponent\n     */\n    private function makeTemplateComponent($manager, $name, $properties, $alias)\n    {\n        $componentObj = $manager->makeComponent($name, null, $properties);\n        if (!$componentObj) {\n            throw new Exception('Component not found');\n        }\n\n        $componentObj->alias = $alias;\n\n        $propertyConfig = ComponentHelpers::getComponentsPropertyConfig($componentObj, true, true);\n        $propertyConfig = json_encode($propertyConfig, JSON_UNESCAPED_SLASHES);\n\n        $propertyValues = ComponentHelpers::getComponentPropertyValues($componentObj, true);\n        $propertyValues = json_encode($propertyValues, JSON_UNESCAPED_SLASHES);\n\n        return [\n            'alias' => $alias,\n            'name' => $componentObj->name,\n            'title' => ComponentHelpers::getComponentName($componentObj),\n            'icon' => $this->getComponentPluginIcon($manager, $componentObj),\n            'className' => get_class($componentObj),\n            'description' => ComponentHelpers::getComponentDescription($componentObj),\n            'inspectorEnabled' => $componentObj->inspectorEnabled,\n            'propertyConfig' => $propertyConfig,\n            'propertyValues' => $propertyValues,\n            'isHidden' => $componentObj->isHidden\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/HasExtensionAssetsCrud.php",
    "content": "<?php namespace Cms\\Classes\\EditorExtension;\n\nuse System;\nuse Request;\nuse Editor\\Classes\\ApiHelpers;\nuse Cms\\Classes\\EditorExtension;\nuse October\\Rain\\Filesystem\\Definitions as FileDefinitions;\n\n/**\n * HasExtensionAssetsCrud implements Assets CRUD operations for the CMS Editor Extension\n */\ntrait HasExtensionAssetsCrud\n{\n    /**\n     * command_onAssetCreateDirectory\n     */\n    protected function command_onAssetCreateDirectory()\n    {\n        $this->assertDocumentTypePermissions(EditorExtension::DOCUMENT_TYPE_ASSET);\n\n        $documentData = $this->getRequestDocumentData();\n        $metadata = $this->getRequestMetadata();\n        $this->validateRequestTheme($metadata);\n\n        $newName = trim(ApiHelpers::assertGetKey($documentData, 'name'));\n        $parent = ApiHelpers::assertGetKey($documentData, 'parent');\n\n        $this->editorCreateDirectory($this->getAssetsPath($this->getTheme()), $newName, $parent);\n    }\n\n    /**\n     * command_onAssetDelete\n     */\n    protected function command_onAssetDelete()\n    {\n        $this->assertDocumentTypePermissions(EditorExtension::DOCUMENT_TYPE_ASSET);\n\n        $metadata = $this->getRequestMetadata();\n        $this->validateRequestTheme($metadata);\n\n        $documentData = $this->getRequestDocumentData();\n        $fileList = ApiHelpers::assertGetKey($documentData, 'files');\n        ApiHelpers::assertIsArray($fileList);\n\n        $this->editorDeleteFileOrDirectory($this->getAssetsPath($this->getTheme()), $fileList);\n    }\n\n    /**\n     * command_onAssetRename\n     */\n    protected function command_onAssetRename()\n    {\n        $this->assertDocumentTypePermissions(EditorExtension::DOCUMENT_TYPE_ASSET);\n\n        $metadata = $this->getRequestMetadata();\n        $documentData = $this->getRequestDocumentData();\n        $this->validateRequestTheme($metadata);\n\n        $newName = trim(ApiHelpers::assertGetKey($documentData, 'name'));\n        $originalPath = trim(ApiHelpers::assertGetKey($documentData, 'originalPath'));\n        $assetExtensions = $this->getSafeAssetExtensions();\n\n        $this->editorRenameFileOrDirectory($this->getAssetsPath($this->getTheme()), $newName, $originalPath, $assetExtensions);\n    }\n\n    /**\n     * command_onAssetMove\n     */\n    protected function command_onAssetMove()\n    {\n        $this->assertDocumentTypePermissions(EditorExtension::DOCUMENT_TYPE_ASSET);\n\n        $metadata = $this->getRequestMetadata();\n        $documentData = $this->getRequestDocumentData();\n        $this->validateRequestTheme($metadata);\n\n        $selectedList = ApiHelpers::assertGetKey($documentData, 'source');\n        $destinationDir = ApiHelpers::assertGetKey($documentData, 'destination');\n        $this->editorMoveFilesOrDirectories($this->getAssetsPath($this->getTheme()), $selectedList, $destinationDir);\n    }\n\n    /**\n     * command_onAssetUpload\n     */\n    protected function command_onAssetUpload()\n    {\n        $this->assertDocumentTypePermissions(EditorExtension::DOCUMENT_TYPE_ASSET);\n\n        $metadata = [\n            'theme' => Request::input('theme')\n        ];\n        $this->validateRequestTheme($metadata);\n\n        $assetExtensions = $this->getSafeAssetExtensions();\n        $this->editorUploadFiles($this->getAssetsPath($this->getTheme()), $assetExtensions);\n    }\n\n    /**\n     * getAssetFullPath returns the full path for the current theme\n     * @param $path string\n     */\n    protected function getAssetFullPath($path): string\n    {\n        return $this->getAssetsPath($this->getTheme()).'/'.ltrim($path, '/');\n    }\n\n    /**\n     * getSafeAssetExtensions returns asset extensions with preprocessor\n     * types removed when safe mode is enabled.\n     */\n    protected function getSafeAssetExtensions(): array\n    {\n        $extensions = FileDefinitions::get('asset_extensions');\n\n        if (System::checkSafeMode()) {\n            $extensions = array_diff($extensions, ['less', 'sass', 'scss']);\n        }\n\n        return array_values($extensions);\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/HasExtensionAssetsState.php",
    "content": "<?php namespace Cms\\Classes\\EditorExtension;\n\nuse Url;\nuse Lang;\nuse Cms\\Classes\\Asset;\nuse Cms\\Classes\\EditorExtension;\nuse Backend\\VueComponents\\TreeView\\NodeDefinition;\nuse Backend\\VueComponents\\DropdownMenu\\ItemDefinition;\nuse October\\Rain\\Filesystem\\Definitions as FileDefinitions;\nuse Editor\\Classes\\NewDocumentDescription;\n\n/**\n * HasExtensionAssetsState assets state for the CMS Editor Extension\n */\ntrait HasExtensionAssetsState\n{\n    /**\n     * addAssetsNavigatorNodes\n     */\n    protected function addAssetsNavigatorNodes($theme, $rootNode)\n    {\n        $assetsNode = $rootNode->addNode(Lang::get('cms::lang.asset.editor_node_name'), EditorExtension::DOCUMENT_TYPE_ASSET);\n        $assetsNode\n            ->setSortBy('isFolder:desc,filename')\n            ->setDragAndDropMode([NodeDefinition::DND_MOVE, NodeDefinition::DND_CUSTOM_EXTERNAL])\n            ->setDisplayMode(NodeDefinition::DISPLAY_MODE_TREE)\n            ->setChildKeyPrefix(EditorExtension::DOCUMENT_TYPE_ASSET.':')\n            ->setMultiSelect(true)\n            ->setUserData([\n                'path' => '/'\n            ])\n        ;\n\n        $assetsNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.asset.new'),\n            'cms:create-document@'.EditorExtension::DOCUMENT_TYPE_ASSET\n        )->setIcon('icon-create');\n\n        $assetsNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.asset.upload_files'),\n            'cms:cms-asset-upload@'.EditorExtension::DOCUMENT_TYPE_ASSET\n        )->setIcon('icon-upload');\n\n        $assetsNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.asset.create_directory'),\n            'cms:cms-asset-create-directory'\n        )->setIcon('icon-folder');\n\n        $this->addDirectoryAssetsNodes('', $assetsNode, $theme);\n    }\n\n    /**\n     * addDirectoryAssetsNodes\n     */\n    protected function addDirectoryAssetsNodes(string $path, $parentNode, $theme)\n    {\n        $assets = Asset::listInTheme($theme, [\n            'recursive' => false,\n            'filterPath' => $path\n        ]);\n\n        foreach ($assets as $asset) {\n            if (!$asset['isEditable'] && !$asset['isFolder']) {\n                $asset['url'] = Url::to('themes/'.$theme->getDirName().'/assets/'.$asset['path']);\n            }\n\n            $node = $parentNode\n                ->addNode($asset['filename'], $asset['path'])\n                ->setHasApiMenuItems(true)\n                ->setUserData($asset)\n            ;\n\n            if ($asset['isFolder']) {\n                $node->setFolderIcon();\n                $innerPath = $path ? $path.'/'.$asset['filename'] : $asset['filename'];\n                $this->addDirectoryAssetsNodes($innerPath, $node, $theme);\n            }\n            else {\n                $node->setHideInQuickAccess(!$asset['isEditable']);\n                $node->setNoMoveDrop(true);\n                $node->setIcon(EditorExtension::ICON_COLOR_ASSET, 'backend-icon-background entity-small cms-asset');\n            }\n        }\n    }\n\n    /**\n     * getCmsAssetNewDocumentData\n     */\n    protected function getCmsAssetNewDocumentData()\n    {\n        $description = new NewDocumentDescription(\n            trans('cms::lang.asset.new'),\n            $this->makeMetadataForNewTemplate(EditorExtension::DOCUMENT_TYPE_ASSET)\n        );\n\n        $description->setIcon(EditorExtension::ICON_COLOR_ASSET, 'backend-icon-background entity-small cms-asset');\n        $description->setInitialDocumentData([\n            'fileName' => 'new-asset-file.js',\n            'content' => ''\n        ]);\n\n        return $description;\n    }\n\n    /**\n     * getAssetExtensionListInitialState\n     */\n    protected function getAssetExtensionListInitialState()\n    {\n        $extensions = FileDefinitions::get('asset_extensions');\n\n        $result = [];\n        foreach ($extensions as $extension) {\n            if (preg_match('/^[0-9a-z]+$/i', $extension)) {\n                $result[] = '.'.$extension;\n            }\n        }\n\n        return implode(',', $result);\n    }\n\n    /**\n     * loadAssetsForUiLists\n     */\n    protected function loadAssetsForUiLists($theme, $user)\n    {\n        // Use asset list from Navigator\n        if ($user->hasAnyAccess(['editor.cms_assets'])) {\n            return [];\n        }\n\n        $result = [];\n\n        $assets = Asset::listInTheme($theme, [\n            'filterFiles' => true,\n            'flatten' => true\n        ]);\n\n        foreach ($assets as $asset) {\n            $result[] = $asset['path'];\n        }\n\n        sort($result);\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/HasExtensionCrud.php",
    "content": "<?php namespace Cms\\Classes\\EditorExtension;\n\nuse Url;\nuse Lang;\nuse Config;\nuse Request;\nuse BackendAuth;\nuse SystemException;\nuse ApplicationException;\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\Asset;\nuse Cms\\Classes\\Layout;\nuse Cms\\Classes\\Partial;\nuse Cms\\Classes\\Snippet;\nuse Cms\\Classes\\Content;\nuse Cms\\Classes\\Router;\nuse Cms\\Classes\\SnippetManager;\nuse Cms\\Classes\\CmsCompoundObject;\nuse Cms\\Classes\\ComponentManager;\nuse Cms\\Classes\\ComponentPartial;\nuse Cms\\Classes\\EditorExtension;\nuse October\\Rain\\Halcyon\\Model as HalcyonModel;\nuse October\\Rain\\Router\\Router as RainRouter;\nuse Editor\\Classes\\ApiHelpers;\n\n/**\n * HasExtensionCrud implements CRUD operations for the CMS Editor Extension\n */\ntrait HasExtensionCrud\n{\n    /**\n     * command_onOpenDocument\n     */\n    protected function command_onOpenDocument()\n    {\n        $documentData = post('documentData');\n        if (!is_array($documentData)) {\n            throw new SystemException('Document data is not provided');\n        }\n\n        $key = ApiHelpers::assertGetKey($documentData, 'key');\n        $documentType = ApiHelpers::assertGetKey($documentData, 'type');\n        $this->assertDocumentTypePermissions($documentType);\n\n        $extraData = $this->getRequestExtraData();\n\n        $isResetFromTemplateFileRequest = isset($extraData['resetFromTemplateFile']);\n        if ($isResetFromTemplateFileRequest) {\n            $this->resetFromTemplateFile($documentType, $key);\n        }\n\n        $template = $this->loadTemplate($documentType, $key);\n        if ($documentType !== EditorExtension::DOCUMENT_TYPE_ASSET) {\n            $templateData = $template->toArray();\n        }\n        else {\n            $templateData = [\n                'content' => $template->content\n            ];\n        }\n\n        $templateData['fileName'] = ltrim($template->getFileName(), '/');\n\n        if ($template instanceof CmsCompoundObject) {\n            $templateData['components'] = $this->loadTemplateComponents($template);\n        }\n\n        if ($template instanceof Layout && isset($templateData['settings']['description'])) {\n            $templateData['description'] = $templateData['settings']['description'];\n        }\n\n        $templateData = $this->handleEmptyValuesOnLoad($template, $templateData);\n\n        $result = [\n            'document' => $templateData,\n            'metadata' => $this->loadTemplateMetadata($template, $documentData)\n        ];\n\n        if ($documentType == EditorExtension::DOCUMENT_TYPE_PAGE) {\n            $result['previewUrl'] = $this->getPagePreviewUrl($template);\n        }\n\n        return $result;\n    }\n\n    /**\n     * command_onSaveDocument\n     */\n    protected function command_onSaveDocument()\n    {\n        $documentData = $this->getRequestDocumentData();\n        $metadata = $this->getRequestMetadata();\n        $extraData = $this->getRequestExtraData();\n\n        $isUpdateTemplateRequest = isset($extraData['updateTemplateFile']);\n\n        $this->validateRequestTheme($metadata);\n\n        $documentType = ApiHelpers::assertGetKey($metadata, 'type');\n        $this->assertDocumentTypePermissions($documentType);\n\n        $templatePath = trim(ApiHelpers::assertGetKey($metadata, 'path'));\n        $template = $this->loadOrCreateTemplate($documentType, $templatePath);\n        $templateData = [];\n\n        if ($isUpdateTemplateRequest) {\n            return $this->updateTemplateFile($template, $documentType, $templatePath);\n        }\n\n        $settings = $this->upgradeSettings($documentData, $documentType);\n        if ($settings) {\n            $templateData['settings'] = $settings;\n        }\n\n        $fields = ['markup', 'code', 'fileName', 'content'];\n        foreach ($fields as $field) {\n            if (array_key_exists($field, $documentData)) {\n                $templateData[$field] = $documentData[$field];\n            }\n        }\n\n        $templateData = $this->handleLineEndings($templateData);\n        $templateData = $this->handleEmptyValuesOnSave($template, $templateData);\n\n        if ($response = $this->handleMtimeMismatch($template, $metadata)) {\n            return $response;\n        }\n\n        if (!$template instanceof Asset) {\n            $template->attributes = [];\n        }\n\n        $template->fill($templateData);\n\n        // Call validate() explicitly because of\n        // the `force` flag in save().\n        $template->validate();\n\n        // Forcing the operation is required. Failing to\n        // do so results in components removed in the UI\n        // to persist in the template if there are no\n        // other changed attributes.\n        $template->save(['force' => true]);\n\n        /**\n         * @event cms.template.save\n         * Fires after a CMS template (page|partial|layout|content|asset) has been saved.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.template.save', function ((\\Cms\\Classes\\EditorExtension) $editorExtension, (mixed) $templateObject, (string) $type) {\n         *         \\Log::info(\"A $type has been saved\");\n         *     });\n         */\n        $this->fireSystemEvent('cms.template.save', [$template, $documentType]);\n\n        return $this->getUpdateResponse($template, $documentType, $templateData);\n    }\n\n    /**\n     * command_onDeleteDocument\n     */\n    protected function command_onDeleteDocument()\n    {\n        [$template, $documentType] = $this->loadRequestedTemplate();\n        $this->assertDocumentTypePermissions($documentType);\n\n        $template->delete();\n\n        /**\n         * @event cms.template.delete\n         * Fires after a CMS template (page|partial|layout|content|asset) has been deleted.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.template.delete', function ((\\Cms\\Classes\\EditorExtension) $editorExtension, (string) $type) {\n         *         \\Log::info(\"A $type has been deleted\");\n         *     });\n         */\n        $this->fireSystemEvent('cms.template.delete', [$documentType]);\n    }\n\n    /**\n     * command_onExpandCmsComponent\n     */\n    protected function command_onExpandCmsComponent()\n    {\n        if (!$componentAlias = post('componentAlias')) {\n            throw new ApplicationException(trans('cms::lang.component.no_records'));\n        }\n\n        $documentData = $this->getRequestDocumentData();\n        $componentClass = $this->findComponentClassByAlias($componentAlias, $documentData);\n        if (!$componentClass) {\n            throw new ApplicationException(trans('cms::lang.component.not_found', ['name' => $componentAlias]));\n        }\n\n        $manager = ComponentManager::instance();\n        $componentObj = $manager->makeComponent($componentClass);\n        $partial = ComponentPartial::load($componentObj, 'default');\n        if (!$partial) {\n            throw new ApplicationException(__('Component does use a default partial'));\n        }\n\n        $content = $partial->getContent();\n        $content = str_replace('__SELF__', $componentAlias, $content);\n\n        return [\n            'content' => $content\n        ];\n    }\n\n    /**\n     * loadTemplate returns an existing template of a given type\n     * @param string $documentType\n     * @param string $path\n     * @return mixed\n     */\n    private function loadTemplate($documentType, $path)\n    {\n        $class = $this->resolveTypeClassName($documentType);\n\n        if (!($template = call_user_func([$class, 'load'], $this->getTheme(), $path))) {\n            throw new ApplicationException(trans('cms::lang.template.not_found'));\n        }\n\n        // Handle snippets\n        if ($documentType === EditorExtension::DOCUMENT_TYPE_PARTIAL) {\n            Snippet::processTemplateSettings($template);\n        }\n\n        /**\n         * @event cms.template.processSettingsAfterLoad\n         * Fires immediately after a CMS template (page|partial|layout|content|asset) has been loaded and provides an opportunity to interact with it.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.template.processSettingsAfterLoad', function ((\\Cms\\Classes\\EditorExtension) $extension, (mixed) $templateObject) {\n         *         // Make some modifications to the $template object\n         *     });\n         *\n         * @deprecated remove second arg 'editor', context no longer used\n         */\n        $this->fireSystemEvent('cms.template.processSettingsAfterLoad', [$template, 'editor']);\n\n        return $template;\n    }\n\n    /**\n     * resolveTypeClassName resolves a template type to its class name\n     * @param string $documentType\n     * @return string\n     */\n    private function resolveTypeClassName($documentType)\n    {\n        $types = [\n            EditorExtension::DOCUMENT_TYPE_PAGE => Page::class,\n            EditorExtension::DOCUMENT_TYPE_PARTIAL => Partial::class,\n            EditorExtension::DOCUMENT_TYPE_LAYOUT => Layout::class,\n            EditorExtension::DOCUMENT_TYPE_CONTENT => Content::class,\n            EditorExtension::DOCUMENT_TYPE_ASSET => Asset::class\n        ];\n\n        if (!array_key_exists($documentType, $types)) {\n            throw new SystemException(trans('cms::lang.template.invalid_type'));\n        }\n\n        return $types[$documentType];\n    }\n\n    /**\n     * makeMetadataForNewTemplate builds meta data for new templates\n     */\n    protected function makeMetadataForNewTemplate(string $documentType): array\n    {\n        return [\n            'mtime' => null,\n            'path' => null,\n            'theme' => ($theme = $this->getTheme()) ? $theme->getDirName() : null,\n            'type' => $documentType,\n            'isNewDocument' => true\n        ];\n    }\n\n    /**\n     * loadTemplateMetadata\n     */\n    private function loadTemplateMetadata($template, $documentData)\n    {\n        $theme = $this->getTheme();\n        $themeDirName = $theme->getDirName();\n\n        $typeNames = [\n            EditorExtension::DOCUMENT_TYPE_PAGE => Lang::get('cms::lang.editor.page'),\n            EditorExtension::DOCUMENT_TYPE_LAYOUT => Lang::get('cms::lang.editor.layout'),\n            EditorExtension::DOCUMENT_TYPE_PARTIAL => Lang::get('cms::lang.editor.partial'),\n            EditorExtension::DOCUMENT_TYPE_CONTENT => Lang::get('cms::lang.editor.content'),\n            EditorExtension::DOCUMENT_TYPE_ASSET => Lang::get('cms::lang.editor.asset')\n        ];\n\n        $documentType = $documentData['type'];\n        if (!array_key_exists($documentType, $typeNames)) {\n            throw new SystemException(sprintf('Document type name is not defined: %s', $documentData['type']));\n        }\n\n        $typeDirName = $this->getDocumentTypeDirName($template);\n        $fileName = ltrim($template->fileName, '/');\n\n        $result = [\n            'mtime' => $template->mtime,\n            'path' => $fileName,\n            'theme' => $themeDirName,\n            'canUpdateTemplateFile' => $this->canUpdateTemplateFile($template),\n            'canResetFromTemplateFile' => $this->canResetFromTemplateFile($template),\n            'fullPath' => $typeDirName.'/'.$fileName,\n            'type' => $documentType,\n            'typeName' => $typeNames[$documentType]\n        ];\n\n        return $result;\n    }\n\n    /**\n     * canUpdateTemplateFile returns true if the template file can be updated with the database\n     * content. Only available in debug mode, the database templates must be enabled, and the\n     * template must exist in the database.\n     */\n    protected function canUpdateTemplateFile($template): bool\n    {\n        if (!Config::get('app.debug', false)) {\n            return false;\n        }\n\n        if (!$template instanceof HalcyonModel) {\n            return false;\n        }\n\n        if (!$this->getTheme()->secondLayerEnabled()) {\n            return false;\n        }\n\n        return $this->getThemeDatasource()->hasModelAtIndex(1, $template);\n    }\n\n    /**\n     * updateTemplateFile\n     */\n    protected function updateTemplateFile($template, $documentType, $templatePath)\n    {\n        if (!$this->canUpdateTemplateFile($template)) {\n            throw new ApplicationException('The template cannot be updated.');\n        }\n\n        // Update second layer, then delete first layer\n        $datasource = $this->getThemeDatasource();\n        $datasource->updateModelAtIndex(1, $template);\n        $datasource->forceDeleteModelAtIndex(0, $template);\n\n        $template = $this->loadTemplate($documentType, $templatePath);\n        return [\n            'metadata' => $this->loadTemplateMetadata($template, ['type'=>$documentType]),\n            'templateFileUpdated' => true\n        ];\n    }\n\n    /**\n     * canResetFromTemplateFile returns true if the database template can be reloaded from the\n     * template file. Only available when the database templates are enabled, and the template\n     * exists in both the database and filesystem.\n     */\n    protected function canResetFromTemplateFile($template): bool\n    {\n        if (!$template instanceof HalcyonModel) {\n            return false;\n        }\n\n        if (!$this->getTheme()->secondLayerEnabled()) {\n            return false;\n        }\n\n        $datasource = $this->getThemeDatasource();\n        return $datasource->hasModelAtIndex(0, $template) &&\n            $datasource->hasModelAtIndex(1, $template);\n    }\n\n    /**\n     * resetFromTemplateFile\n     */\n    protected function resetFromTemplateFile($documentType, $templatePath)\n    {\n        $template = $this->loadTemplate($documentType, $templatePath);\n        if (!$this->canResetFromTemplateFile($template)) {\n            throw new ApplicationException('Cannot reset template from file.');\n        }\n\n        // Delete first layer\n        $datasource = $this->getThemeDatasource();\n        $datasource->forceDeleteModelAtIndex(0, $template);\n    }\n\n    /**\n     * getThemeDatasource returns a theme datasource object\n     */\n    protected function getThemeDatasource()\n    {\n        return $this->getTheme()->getDatasource();\n    }\n\n    /**\n     * getRequestMetadata\n     */\n    private function getRequestMetadata()\n    {\n        $metadata = Request::input('documentMetadata');\n        if (!is_array($metadata)) {\n            throw new SystemException('Invalid documentMetadata');\n        }\n\n        return $metadata;\n    }\n\n    /**\n     * getRequestExtraData\n     */\n    private function getRequestExtraData()\n    {\n        $extraData = Request::input('extraData');\n        if (!is_array($extraData)) {\n            return [];\n        }\n\n        return $extraData;\n    }\n\n    /**\n     * getRequestDocumentData\n     */\n    private function getRequestDocumentData()\n    {\n        $documentData = Request::input('documentData');\n        if (!is_array($documentData)) {\n            throw new SystemException('Invalid documentData');\n        }\n\n        return $documentData;\n    }\n\n    /**\n     * createTemplate\n     */\n    private function createTemplate($documentType)\n    {\n        $class = $this->resolveTypeClassName($documentType);\n\n        if (!($template = $class::inTheme($this->getTheme()))) {\n            throw new ApplicationException(trans('cms::lang.template.not_found'));\n        }\n\n        return $template;\n    }\n\n    /**\n     * loadOrCreateTemplate\n     */\n    private function loadOrCreateTemplate($documentType, $templatePath)\n    {\n        if ($templatePath) {\n            return $this->loadTemplate($documentType, $templatePath);\n        }\n\n        return $this->createTemplate($documentType);\n    }\n\n    /**\n     * upgradeSettings processes the component settings so they are ready to be saved\n     * @param array $settings\n     * @param string $documentType\n     * @return array\n     */\n    private function upgradeSettings($documentData, $documentType)\n    {\n        $settings = array_key_exists('settings', $documentData)\n            ?  $documentData['settings']\n            : [];\n\n        if (array_key_exists('components', $documentData)) {\n            $components = ApiHelpers::assertIsArray($documentData['components']);\n            foreach ($components as $component) {\n                $component = ApiHelpers::assertIsArray($component);\n                $name = ApiHelpers::assertGetKey($component, 'name');\n                $alias = ApiHelpers::assertGetKey($component, 'alias');\n                $propertyValues = ApiHelpers::assertGetKey($component, 'propertyValues');\n\n                $properties = json_decode($propertyValues, true);\n                unset(\n                    $properties['oc.alias'],\n                    $properties['inspectorProperty'],\n                    $properties['inspectorClassName']\n                );\n\n                $section = $name;\n                if ($alias != $name) {\n                    $section .= ' '.$alias;\n                }\n\n                $settings[$section] = $properties;\n            }\n        }\n\n        // Handle view bag\n        if (isset($documentData['viewBag'])) {\n            $settings['viewBag'] = $documentData['viewBag'];\n        }\n\n        if (isset($settings['viewBag']) && count($settings['viewBag']) === 0) {\n            unset($settings['viewBag']);\n        }\n\n        // This fixes a problem where a partial with PHP code and Twig markup is saved without\n        // any section data. This creates a template with the PHP code defined in the first\n        // section, which is expected to be INI.\n        if (isset($documentData['code']) && strlen($documentData['code']) && !$settings) {\n            $settings['viewBag'] = [];\n        }\n\n        // Handle snippets\n        if ($documentType === EditorExtension::DOCUMENT_TYPE_PARTIAL) {\n            $settings = Snippet::processTemplateSettingsArray($settings);\n        }\n\n        /**\n         * @event cms.template.processSettingsBeforeSave\n         * Fires before a CMS template (page|partial|layout|content|asset) is saved and provides an opportunity to interact with the settings data. `$dataHolder` = {settings: []}\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.template.processSettingsBeforeSave', function ((\\Cms\\Classes\\EditorExtension) $editorExtension, (object) $dataHolder) {\n         *         // Make some modifications to the $dataHolder object\n         *     });\n         */\n        $dataHolder = (object) ['settings' => $settings, 'documentType' => $documentType];\n        $this->fireSystemEvent('cms.template.processSettingsBeforeSave', [$dataHolder]);\n\n        return $dataHolder->settings;\n    }\n\n    /**\n     * validateRequestTheme validates that the current request is within the active theme\n     * @return void\n     */\n    private function validateRequestTheme($metadata)\n    {\n        if ($this->getTheme()->getDirName() != $metadata['theme']) {\n            throw new ApplicationException(trans('cms::lang.theme.edit.not_match'));\n        }\n    }\n\n    /**\n     * handleLineEndings\n     */\n    protected function handleLineEndings($templateData)\n    {\n        $convertLineEndings = Config::get('system.convert_line_endings', false) === true;\n        if (!$convertLineEndings) {\n            return $templateData;\n        }\n\n        if (!empty($templateData['markup'])) {\n            $templateData['markup'] = $this->convertLineEndings($templateData['markup']);\n        }\n\n        if (!empty($templateData['code'])) {\n            $templateData['code'] = $this->convertLineEndings($templateData['code']);\n        }\n\n        return $templateData;\n    }\n\n    /**\n     * handleEmptyValuesOnSave\n     */\n    protected function handleEmptyValuesOnSave($template, $templateData)\n    {\n        if ($template instanceof Page || $template instanceof Layout || $template instanceof Partial) {\n            if (!array_key_exists('components', $templateData)) {\n                $templateData['components'] = [];\n            }\n        }\n\n        return $templateData;\n    }\n\n    /**\n     * handleEmptyValuesOnLoad\n     */\n    protected function handleEmptyValuesOnLoad($template, $templateData)\n    {\n        if ($template instanceof Page || $template instanceof Layout || $template instanceof Partial) {\n            // On the client side empty markup and code values\n            // are strings. By converting nulls to strings we\n            // avoid the false positive \"document changed\" state\n            // in the editor.\n            $properties = ['markup', 'code'];\n            foreach ($properties as $property) {\n                if (array_key_exists($property, $templateData) && $templateData[$property] === null) {\n                    $templateData[$property] = '';\n                }\n            }\n        }\n\n        return $templateData;\n    }\n\n    /**\n     * convertLineEndings replaces Windows style (/r/n) line endings with unix style (/n)\n     * line endings.\n     * @param string $markup The markup to convert to unix style endings\n     * @return string\n     */\n    private function convertLineEndings($markup)\n    {\n        $markup = str_replace([\"\\r\\n\", \"\\r\"], \"\\n\", $markup);\n\n        return $markup;\n    }\n\n    /**\n     * handleMtimeMismatch\n     */\n    private function handleMtimeMismatch($template, $metadata)\n    {\n        $requestMtime = ApiHelpers::assertGetKey($metadata, 'mtime');\n\n        if (!$template->mtime) {\n            return;\n        }\n\n        if (post('documentForceSave')) {\n            return;\n        }\n\n        if ($requestMtime != $template->mtime) {\n            return ['mtimeMismatch' => true];\n        }\n    }\n\n    /**\n     * getUpdateResponse\n     */\n    private function getUpdateResponse($template, $documentType, $templateData)\n    {\n        $navigatorPath = dirname($template->fileName);\n        if ($navigatorPath == '.') {\n            $navigatorPath = \"\";\n        }\n\n        if ($template instanceof Page) {\n            $theme = $this->getTheme();\n            $router = new Router($theme);\n            $router->clearCache();\n            CmsCompoundObject::clearCache($theme);\n\n            if (class_exists(\\Tailor\\Behaviors\\PreviewController::class)) {\n                \\Tailor\\Behaviors\\PreviewController::clearCache($theme);\n            }\n        }\n        elseif ($template instanceof Partial) {\n            $theme = $this->getTheme();\n            SnippetManager::clearCache($theme);\n        }\n\n        $typeDirName = $this->getDocumentTypeDirName($template);\n\n        $result = [\n            'metadata' => [\n                'mtime' => $template->mtime,\n                'path' => $template->fileName,\n                'fileName' => basename($template->fileName),\n                'fullPath' => $typeDirName.'/'.$template->fileName,\n                'navigatorPath' => $navigatorPath,\n                'uniqueKey' => $template->getFileName(),\n                'canUpdateTemplateFile' => $this->canUpdateTemplateFile($template),\n                'canResetFromTemplateFile' => $this->canResetFromTemplateFile($template)\n            ]\n        ];\n\n        if ($documentType == EditorExtension::DOCUMENT_TYPE_PAGE) {\n            $result['previewUrl'] = $this->getPagePreviewUrl($template, $templateData);\n        }\n\n        if ($documentType == EditorExtension::DOCUMENT_TYPE_ASSET) {\n            $result['fileName'] = $template->fileName;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getPagePreviewUrl\n     */\n    private function getPagePreviewUrl($template, $templateData = null)\n    {\n        $router = new RainRouter();\n        $url = isset($templateData['settings']['url']) ?\n            $templateData['settings']['url'] :\n            $template->url;\n\n        return Url::to($router->urlFromPattern($url));\n    }\n\n    /**\n     * loadRequestedTemplate\n     */\n    private function loadRequestedTemplate()\n    {\n        $metadata = $this->getRequestMetadata();\n\n        $documentType = ApiHelpers::assertGetKey($metadata, 'type');\n        $templatePath = trim(ApiHelpers::assertGetKey($metadata, 'path'));\n\n        return [\n            $this->loadTemplate($documentType, $templatePath),\n            $documentType\n        ];\n    }\n\n    /**\n     * findComponentClassByAlias\n     */\n    private function findComponentClassByAlias($componentAlias, $documentData)\n    {\n        $components = ApiHelpers::assertIsArray($documentData['components']);\n        foreach ($components as $component) {\n            $component = ApiHelpers::assertIsArray($component);\n            $className = ApiHelpers::assertGetKey($component, 'className');\n            $alias = ApiHelpers::assertGetKey($component, 'alias');\n\n            if ($componentAlias === $alias) {\n                return $className;\n            }\n        }\n    }\n\n    /**\n     * getDocumentTypeDirName\n     */\n    private function getDocumentTypeDirName($template)\n    {\n        if ($template instanceof Asset) {\n            return '/assets';\n        }\n\n        return $template->getObjectTypeDirName();\n    }\n\n    /**\n     * assertDocumentTypePermissions\n     */\n    private function assertDocumentTypePermissions($documentType)\n    {\n        $user = BackendAuth::getUser();\n\n        if (!EditorExtension::hasAccessToDocType($user, $documentType)) {\n            throw new ApplicationException(Lang::get(\n                'cms::lang.editor.error_no_doctype_permissions',\n                ['doctype' => $documentType]\n            ));\n        }\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/HasExtensionExtensibility.php",
    "content": "<?php namespace Cms\\Classes\\EditorExtension;\n\nuse Cms\\Classes\\EditorExtension;\nuse Backend\\Helpers\\Inspector as InspectorHelper;\n\n/**\n * HasExtensionExtensibility implements CMS extensibility features\n */\ntrait HasExtensionExtensibility\n{\n    /**\n     * loadAndExtendCmsSettingsFields\n     */\n    protected function loadAndExtendCmsSettingsFields($fieldsClass, $entityName)\n    {\n        $settings = $this->loadSettingsFields($fieldsClass);\n\n        $dataHolder = (object) ['settings' => [], 'templateType' => $entityName];\n\n        /**\n         * @event cms.template.extendTemplateSettingsFields\n         * Fires after CMS Editor (page|partial|layout) Settings configuration is loaded and provides an opportunity to extend the standard template Settings popup. `$dataHolder` = {settings: [], templateType: string}\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.template.extendTemplateSettingsFields', function ((\\Cms\\Classes\\EditorExtension) $extension, (object) $dataHolder) {\n         *         // Make some modifications to the $dataHolder->settings array\n         *     });\n         */\n        $this->fireSystemEvent('cms.template.extendTemplateSettingsFields', [$dataHolder]);\n\n        array_walk_recursive($dataHolder->settings, function(&$value, $key) {\n            if (is_string($value)) {\n                $value = trans($value);\n            }\n        });\n\n        foreach ($dataHolder->settings as $propertyDefinition) {\n            $propertyDefinition['property'] = 'settings.'.$propertyDefinition['property'];\n            $settings[] = $propertyDefinition;\n        }\n\n        return $settings;\n    }\n\n    /**\n     * getToolbarCustomSettingsButtons\n     */\n    protected function getToolbarCustomSettingsButtons()\n    {\n        return [\n            EditorExtension::DOCUMENT_TYPE_PAGE => $this->getTemplateToolbarCustomSettingsButtons('page'),\n            EditorExtension::DOCUMENT_TYPE_PARTIAL => $this->getTemplateToolbarCustomSettingsButtons('partial'),\n            EditorExtension::DOCUMENT_TYPE_LAYOUT => $this->getTemplateToolbarCustomSettingsButtons('layout')\n        ];\n    }\n\n    /**\n     * getTemplateToolbarCustomSettingsButtons\n     */\n    protected function getTemplateToolbarCustomSettingsButtons($entityName)\n    {\n        $buttons = [];\n        if ($entityName === 'partial') {\n            $buttons = $this->loadCustomSettingsButtons(\\Cms\\Classes\\Partial\\Fields::class);\n        }\n\n        $dataHolder = (object) ['buttons' => [], 'templateType' => $entityName];\n\n        /**\n         * @event cms.template.getTemplateToolbarSettingsButtons\n         * Provides an opportunity to extend a CMS template toolbar with custom settings buttons. `$dataHolder` = {buttons: [], templateType: string}\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.template.getTemplateToolbarSettingsButtons', function ((\\Cms\\Classes\\EditorExtension) $extension, (object) $dataHolder) {\n         *         // Make some modifications to the $dataHolder->buttons array\n         *     });\n         */\n        $this->fireSystemEvent('cms.template.getTemplateToolbarSettingsButtons', [$dataHolder]);\n\n        array_walk_recursive($dataHolder->buttons, function(&$value, $key) {\n            if (is_string($value)) {\n                $value = trans($value);\n            }\n        });\n\n        foreach ($dataHolder->buttons as &$buttonDefinition) {\n            if (!array_key_exists('useViewBag', $buttonDefinition)) {\n                $buttonDefinition['useViewBag'] = true;\n            }\n\n            if ($buttonDefinition['useViewBag']) {\n                continue;\n            }\n\n            if (!is_array($buttonDefinition['properties'])) {\n                continue;\n            }\n\n            foreach ($buttonDefinition['properties'] as &$property) {\n                $property['property'] = 'settings.'.$property['property'];\n            }\n        }\n\n        foreach ($dataHolder->buttons as &$buttonDefinition) {\n            $buttons[] = $buttonDefinition;\n        }\n\n        return $buttons;\n    }\n\n    /**\n     * loadCustomSettingsButtons\n     * @see \\Editor\\Classes\\ExtensionBase::loadSettingsFields()\n     */\n    protected function loadCustomSettingsButtons(string $fieldsClass): array\n    {\n        $buttons = (new $fieldsClass)->defineSettingsButtons();\n\n        foreach ($buttons as &$button) {\n            $button['properties'] = InspectorHelper::getPropertyConfig($button['properties'] ?? []);\n        }\n\n        return $buttons;\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/HasExtensionState.php",
    "content": "<?php namespace Cms\\Classes\\EditorExtension;\n\nuse Lang;\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\Partial;\nuse Cms\\Classes\\Content;\nuse Cms\\Classes\\Layout;\nuse Cms\\Classes\\EditorExtension;\nuse Cms\\Classes\\ComponentManager;\nuse Cms\\Helpers\\Component as ComponentHelpers;\nuse Backend\\VueComponents\\TreeView\\NodeDefinition;\nuse Backend\\VueComponents\\DropdownMenu\\ItemDefinition;\nuse Editor\\Classes\\NewDocumentDescription;\n\n/**\n * HasExtensionState initializes state for the CMS Editor Extension\n */\ntrait HasExtensionState\n{\n    /**\n     * getCmsPageNewDocumentData\n     */\n    private function getCmsPageNewDocumentData()\n    {\n        $description = new NewDocumentDescription(\n            trans('cms::lang.page.new'),\n            $this->makeMetadataForNewTemplate(EditorExtension::DOCUMENT_TYPE_PAGE)\n        );\n\n        // Always inject a view bag so that custom template properties\n        // defined using the CMS extensibility API can use it.\n        // Empty view bags get automatically removed from templates\n        // before they are saved.\n        //\n        $manager = ComponentManager::instance();\n        $viewBagComponent = $this->makeTemplateComponent($manager, 'viewBag', [], 'viewBag');\n\n        $description->setIcon(EditorExtension::ICON_COLOR_PAGE, 'backend-icon-background entity-small cms-page');\n        $description->setInitialDocumentData([\n            'title' => trans('cms::lang.page.new'),\n            'components' => [\n                $viewBagComponent\n            ],\n            'code' => '',\n            'markup' => ''\n        ]);\n\n        return $description;\n    }\n\n    /**\n     * getCmsPartialNewDocumentData\n     */\n    private function getCmsPartialNewDocumentData()\n    {\n        $description = new NewDocumentDescription(\n            trans('cms::lang.partial.new'),\n            $this->makeMetadataForNewTemplate(EditorExtension::DOCUMENT_TYPE_PARTIAL)\n        );\n\n        $description->setIcon(EditorExtension::ICON_COLOR_PARTIAL, 'backend-icon-background entity-small cms-partial');\n        $description->setInitialDocumentData([\n            'fileName' => 'new-partial.htm',\n            'components' => [\n                $this->getViewBagComponent()\n            ],\n            'code' => '',\n            'markup' => ''\n        ]);\n\n        return $description;\n    }\n\n    /**\n     * getCmsLayoutNewDocumentData\n     */\n    private function getCmsLayoutNewDocumentData()\n    {\n        $description = new NewDocumentDescription(\n            trans('cms::lang.layout.new'),\n            $this->makeMetadataForNewTemplate(EditorExtension::DOCUMENT_TYPE_LAYOUT)\n        );\n\n        $description->setIcon(EditorExtension::ICON_COLOR_LAYOUT, 'backend-icon-background entity-small cms-layout');\n        $description->setInitialDocumentData([\n            'fileName' => 'new-layout.htm',\n            'components' => [],\n            'code' => '',\n            'markup' => ''\n        ]);\n\n        return $description;\n    }\n\n    /**\n     * getCmsContentNewDocumentData\n     */\n    private function getCmsContentNewDocumentData()\n    {\n        $description = new NewDocumentDescription(\n            trans('cms::lang.content.new'),\n            $this->makeMetadataForNewTemplate(EditorExtension::DOCUMENT_TYPE_CONTENT)\n        );\n\n        $description->setIcon(EditorExtension::ICON_COLOR_CONTENT, 'backend-icon-background entity-small cms-content');\n        $description->setInitialDocumentData([\n            'fileName' => 'new-content.html',\n            'components' => [],\n            'markup' => ''\n        ]);\n\n        return $description;\n    }\n\n    /**\n     * addPagesNavigatorNodes\n     */\n    private function addPagesNavigatorNodes($theme, $section)\n    {\n        $pages = Page::listInTheme($theme, true);\n        $pagesNode = $section->addNode(Lang::get('cms::lang.page.editor_node_name'), EditorExtension::DOCUMENT_TYPE_PAGE);\n        $pagesNode\n            ->setSortBy('title')\n            ->setGroupBy('path')\n            ->setGroupByMode(NodeDefinition::GROUP_BY_MODE_FOLDERS)\n            ->setChildKeyPrefix(EditorExtension::DOCUMENT_TYPE_PAGE.':')\n        ;\n\n        $pagesNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.page.create_new'),\n            'cms:create-document@'.EditorExtension::DOCUMENT_TYPE_PAGE\n        )->setIcon('icon-create');\n\n        $pagesNode->addRootMenuItem(ItemDefinition::TYPE_SEPARATOR);\n\n        $sortingItem = $pagesNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.page.editor_sorting'),\n            'sorting'\n        );\n\n        $sortingItem->addItem(\n            ItemDefinition::TYPE_RADIOBUTTON,\n            Lang::get('cms::lang.page.editor_sort_by_title'),\n            'cms:sort-pages@title'\n        )->setChecked(true);\n\n        $sortingItem->addItem(\n            ItemDefinition::TYPE_RADIOBUTTON,\n            Lang::get('cms::lang.page.editor_sort_by_url'),\n            'cms:sort-pages@url'\n        );\n\n        $sortingItem->addItem(\n            ItemDefinition::TYPE_RADIOBUTTON,\n            Lang::get('cms::lang.page.editor_sort_by_file_name'),\n            'cms:sort-pages@filename'\n        );\n\n        $groupingItem = $pagesNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.page.editor_grouping'),\n            'grouping'\n        );\n\n        $groupingItem->addItem(\n            ItemDefinition::TYPE_RADIOBUTTON,\n            Lang::get('cms::lang.page.editor_group_by_filepath'),\n            'cms:group-pages@path'\n        )->setChecked(true);\n\n        $groupingItem->addItem(\n            ItemDefinition::TYPE_RADIOBUTTON,\n            Lang::get('cms::lang.page.editor_group_by_url'),\n            'cms:group-pages@url'\n        );\n\n        $displayItem = $pagesNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.page.editor_display'),\n            'display'\n        );\n\n        $displayItem->addItem(\n            ItemDefinition::TYPE_RADIOBUTTON,\n            Lang::get('cms::lang.page.editor_display_title'),\n            'cms:display-pages@title'\n        )->setChecked(true);\n\n        $displayItem->addItem(\n            ItemDefinition::TYPE_RADIOBUTTON,\n            Lang::get('cms::lang.page.editor_display_url'),\n            'cms:display-pages@url'\n        );\n\n        $displayItem->addItem(\n            ItemDefinition::TYPE_RADIOBUTTON,\n            Lang::get('cms::lang.page.editor_display_file'),\n            'cms:display-pages@filename'\n        );\n\n        foreach ($pages as $page) {\n            $pagePath = dirname($page->fileName);\n            if ($pagePath === '.') {\n                $pagePath = \"\";\n            }\n\n            $title = strlen($page->title) ? $page->title : __(\"No Title\");\n\n            $pagesNode\n                ->addNode($title, $page->getFileName())\n                ->setIcon(EditorExtension::ICON_COLOR_PAGE, 'backend-icon-background entity-small cms-page')\n                ->setUserData([\n                    'title' => $title,\n                    'url' => $page->url,\n                    'filename' => $page->fileName,\n                    'path' => $pagePath\n                ])\n            ;\n        }\n    }\n\n    /**\n     * addLayoutsNavigatorNodes\n     */\n    private function addLayoutsNavigatorNodes($theme, $section)\n    {\n        $layouts = Layout::listInTheme($theme, true);\n        $layoutsNode = $section->addNode(Lang::get('cms::lang.layout.editor_node_name'), EditorExtension::DOCUMENT_TYPE_LAYOUT);\n        $layoutsNode\n            ->setSortBy('filename')\n            ->setGroupBy('path')\n            ->setGroupByMode(NodeDefinition::GROUP_BY_MODE_FOLDERS)\n            ->setChildKeyPrefix(EditorExtension::DOCUMENT_TYPE_LAYOUT.':')\n        ;\n\n        $layoutsNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.layout.create_new'),\n            'cms:create-document@'.EditorExtension::DOCUMENT_TYPE_LAYOUT\n        )->setIcon('icon-create');\n\n        foreach ($layouts as $layout) {\n            $layoutPath = dirname($layout->fileName);\n            if ($layoutPath == '.') {\n                $layoutPath = \"\";\n            }\n\n            $layoutsNode\n                ->addNode($layout->getFileName(), $layout->getFileName())\n                ->setIcon(EditorExtension::ICON_COLOR_LAYOUT, 'backend-icon-background entity-small cms-layout')\n                ->setUserData([\n                    'title' => $layout->getFileName(),\n                    'filename' => $layout->fileName,\n                    'path' => $layoutPath\n                ])\n            ;\n        }\n    }\n\n    /**\n     * addPartialsNavigatorNodes\n     */\n    private function addPartialsNavigatorNodes($theme, $section)\n    {\n        $partials = Partial::listInTheme($theme, true);\n        $partialsNode = $section->addNode(Lang::get('cms::lang.partial.editor_node_name'), EditorExtension::DOCUMENT_TYPE_PARTIAL);\n        $partialsNode\n            ->setSortBy('filename')\n            ->setGroupBy('path')\n            ->setGroupByMode(NodeDefinition::GROUP_BY_MODE_FOLDERS)\n            ->setChildKeyPrefix(EditorExtension::DOCUMENT_TYPE_PARTIAL.':');\n\n        $partialsNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.partial.create_new'),\n            'cms:create-document@'.EditorExtension::DOCUMENT_TYPE_PARTIAL\n        )->setIcon('icon-create');\n\n        foreach ($partials as $partial) {\n            $partialPath = dirname($partial->fileName);\n            if ($partialPath == '.') {\n                $partialPath = \"\";\n            }\n\n            $partialsNode\n                ->addNode($partial->getFileName(), $partial->getFileName())\n                ->setIcon(EditorExtension::ICON_COLOR_PARTIAL, 'backend-icon-background entity-small cms-partial')\n                ->setUserData([\n                    'title' => $partial->getFileName(),\n                    'filename' => $partial->fileName,\n                    'path' => $partialPath\n                ])\n            ;\n        }\n    }\n\n    /**\n     * addContentNavigatorNodes\n     */\n    private function addContentNavigatorNodes($theme, $section)\n    {\n        $contents = Content::listInTheme($theme, true);\n        $contentNode = $section->addNode(Lang::get('cms::lang.content.editor_node_name'), EditorExtension::DOCUMENT_TYPE_CONTENT);\n        $contentNode\n            ->setSortBy('filename')\n            ->setGroupBy('path')\n            ->setGroupByMode(NodeDefinition::GROUP_BY_MODE_FOLDERS)\n            ->setChildKeyPrefix(EditorExtension::DOCUMENT_TYPE_CONTENT.':');\n\n        $contentNode->addRootMenuItem(\n            ItemDefinition::TYPE_TEXT,\n            Lang::get('cms::lang.content.new'),\n            'cms:create-document@'.EditorExtension::DOCUMENT_TYPE_CONTENT\n        )->setIcon('icon-create');\n\n        foreach ($contents as $contentFile) {\n            $contentPath = dirname($contentFile->fileName);\n            if ($contentPath == '.') {\n                $contentPath = \"\";\n            }\n\n            $contentNode\n                ->addNode($contentFile->getFileName(), $contentFile->getFileName())\n                ->setIcon(EditorExtension::ICON_COLOR_CONTENT, 'backend-icon-background entity-small cms-content')\n                ->setUserData([\n                    'title' => $contentFile->getFileName(),\n                    'filename' => $contentFile->fileName,\n                    'path' => $contentPath\n                ]);\n        }\n    }\n\n    /**\n     * loadLayoutsForUiLists\n     */\n    private function loadLayoutsForUiLists($theme, $user)\n    {\n        if ($user->hasAnyAccess(['editor.cms_layouts'])) {\n            // Use layout list from Navigator\n            return [];\n        }\n\n        $layouts = Layout::listInTheme($theme, true);\n\n        $result = [];\n        foreach ($layouts as $layout) {\n            $result[] = $layout->fileName;\n        }\n\n        return $result;\n    }\n\n    /**\n     * loadPartialsForUiLists\n     */\n    private function loadPartialsForUiLists($theme, $user)\n    {\n        if ($user->hasAnyAccess(['editor.cms_partials'])) {\n            // Use partial list from Navigator\n            return [];\n        }\n\n        $partials = Partial::listInTheme($theme, true);\n\n        $result = [];\n        foreach ($partials as $partial) {\n            $result[] = $partial->fileName;\n        }\n\n        return $result;\n    }\n\n    /**\n     * loadContentForUiLists\n     */\n    private function loadContentForUiLists($theme, $user)\n    {\n        if ($user->hasAnyAccess(['editor.cms_content'])) {\n            // Use content file list from Navigator\n            return [];\n        }\n\n        $contentFiles = Content::listInTheme($theme, true);\n\n        $result = [];\n        foreach ($contentFiles as $contentFile) {\n            $result[] = $contentFile->fileName;\n        }\n\n        return $result;\n    }\n\n    /**\n     * loadPagesForUiLists\n     */\n    private function loadPagesForUiLists($theme, $user)\n    {\n        if ($user->hasAnyAccess(['editor.cms_pages'])) {\n            // Use page list from Navigator\n            return [];\n        }\n\n        $pages = Page::listInTheme($theme, true);\n\n        $result = [];\n        foreach ($pages as $page) {\n            $result[] = $page->fileName;\n        }\n\n        return $result;\n    }\n\n    /**\n     * loadComponentsForUiLists\n     */\n    private function loadComponentsForUiLists()\n    {\n        $rootNode = new NodeDefinition('Components', 'cms-components');\n        $rootNode->setGroupBy('owner');\n\n        $componentManager = ComponentManager::instance();\n        $knownAliases = [];\n\n        foreach ($componentManager->listComponentOwnerDetails() as $ownerClass => $owner) {\n            $detailsArr = $owner['details'] ?? [];\n            $components = $owner['components'] ?? [];\n\n            $ownerName = trans($detailsArr['name']) ?? trans('system::lang.plugin.unnamed');\n            $ownerIcon = $detailsArr['icon'] ?? 'icon-puzzle-piece';\n\n            $ownerNode = $rootNode->addNode($ownerName, $ownerClass);\n            $ownerNode\n                ->setSelectable(false)\n                ->setDisplayMode(NodeDefinition::DISPLAY_MODE_LIST)\n                ->setDragAndDropMode([NodeDefinition::DND_CUSTOM]);\n\n            foreach ($components as $alias => $componentArr) {\n                if ($componentArr['isHidden']) {\n                    continue;\n                }\n\n                $componentName = trans($componentArr['name'] ?? '');\n                $componentIcon = $componentArr['icon'] ?? $ownerIcon;\n                $componentClassName = $componentArr['className'];\n                $componentDescription = trans($componentArr['description'] ?? '');\n\n                $componentNode = $ownerNode->addNode($componentName, $componentClassName);\n                $componentNode\n                    ->setDescription($componentDescription)\n                    ->setSelectable(false);\n\n                $component = $componentManager->makeComponent($componentClassName);\n                $duplicateAlias = array_key_exists($alias, $knownAliases);\n                $userData = [\n                    'owner' => $ownerName,\n                    'nodeSearchData' => $componentName.' '.$ownerName.' '.$componentDescription,\n                    'componentData' => [\n                        'alias' => $alias,\n                        'name' => $duplicateAlias ? $componentClassName : $alias,\n                        'title' => $componentName,\n                        'icon' => $componentIcon,\n                        'className' => $componentClassName,\n                        'description' => $componentDescription,\n                        'inspectorEnabled' => true,\n                        'propertyConfig' => ComponentHelpers::getComponentsPropertyConfig($component),\n                        'propertyValues' => ComponentHelpers::getComponentPropertyValues($component, true)\n                    ]\n                ];\n\n                $knownAliases[$alias] = 1;\n                $componentNode->setUserData($userData);\n            }\n        }\n\n        return $rootNode->toArray()['nodes'];\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/HasExtensionThemeCrud.php",
    "content": "<?php namespace Cms\\Classes\\EditorExtension;\n\nuse Cms\\Classes\\Theme;\nuse Editor\\Classes\\ApiHelpers;\nuse ApplicationException;\n\n/**\n * HasExtensionThemeCrud implements Theme CRUD operations for the CMS Editor Extension\n */\ntrait HasExtensionThemeCrud\n{\n    /**\n     * command_onSetEditTheme sets the editing theme for the user\n     */\n    protected function command_onSetEditTheme()\n    {\n        $metadata = $this->getRequestMetadata();\n\n        $selectedTheme = ApiHelpers::assertGetKey($metadata, 'theme');\n\n        $this->assertCmsThemeExists($selectedTheme);\n\n        Theme::setEditTheme($selectedTheme);\n    }\n\n    /**\n     * assertCmsThemeExists ensures a theme directory exists\n     */\n    protected function assertCmsThemeExists(string $themeDir)\n    {\n        $themes = Theme::all();\n        foreach ($themes as $theme) {\n            if ($theme->getDirName() === $themeDir) {\n                return true;\n            }\n        }\n\n        throw new ApplicationException(__(\"The theme ':name' is not found.\", ['name' => $themeDir]));\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/HasExtensionThemesState.php",
    "content": "<?php namespace Cms\\Classes\\EditorExtension;\n\nuse Lang;\nuse Backend;\nuse BackendAuth;\nuse Cms\\Classes\\Theme;\nuse Backend\\VueComponents\\DropdownMenu\\ItemDefinition;\n\n/**\n * HasExtensionThemesState initializes themes state for the CMS Editor Extension\n */\ntrait HasExtensionThemesState\n{\n    /**\n     * createCmsSectionThemeMenuItems\n     */\n    private function createCmsSectionThemeMenuItems($section)\n    {\n        $user = BackendAuth::getUser();\n\n        $currentEditTheme = $this->getTheme();\n        $currentEditThemeDirName = $currentEditTheme ? $currentEditTheme->getDirName() : null;\n\n        $themeMenuItem = new ItemDefinition(ItemDefinition::TYPE_TEXT, Lang::get('cms::lang.editor.edit_theme'), 'cms:edit_theme');\n        $themes = Theme::allAvailable();\n        $themesFound = false;\n        foreach ($themes as $theme) {\n            $themesFound = true;\n            $themeDir = $theme->getDirName();\n            $themeName = $theme->getConfigValue('name') ?: $theme->getDirName();\n\n            $themeMenuItem\n                ->addItem(ItemDefinition::TYPE_RADIOBUTTON, $themeName, 'cms:set-edit-theme@'.$themeDir)\n                ->setChecked($themeDir == $currentEditThemeDirName);\n        }\n\n        if ($user->hasAnyAccess(['cms.themes', 'cms.theme_customize'])) {\n            if ($themesFound) {\n                $themeMenuItem->addItem(ItemDefinition::TYPE_SEPARATOR);\n            }\n\n            $themeMenuItem\n                ->addItem(ItemDefinition::TYPE_TEXT, Lang::get('cms::lang.editor.manage_themes'), 'cms:manage-themes')\n                ->setLinkHref(Backend::url('cms/themes'))\n                ->setLinkTarget('_blank');\n        }\n\n        $section->addMenuItemObject($themeMenuItem);\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/HasIntellisense.php",
    "content": "<?php namespace Cms\\Classes\\EditorExtension;\n\n/**\n * HasIntellisense provides data for the front-end CMS IntelliSense feature.\n */\ntrait HasIntellisense\n{\n    /**\n     * intellisenseLoadOctoberTags\n     */\n    protected function intellisenseLoadOctoberTags()\n    {\n        return $this->loadAndLocalizeJsonFile(__DIR__.'/editorintellisense/octobertags.json');\n    }\n\n    /**\n     * intellisenseLoadTwigFilters\n     */\n    protected function intellisenseLoadTwigFilters()\n    {\n        return $this->loadAndLocalizeJsonFile(__DIR__.'/editorintellisense/twigfilters.json');\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/editorextension/editorintellisense/octobertags.json",
    "content": "[\n    {\n        \"label\": \"{% page %}\",\n        \"hoverKeyword\": \"page\",\n        \"documentation\": \"cms::lang.intellisense.docs.page\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/page.html\",\n        \"insertText\": \"page\"\n    },\n    {\n        \"label\": \"{% partial %}\",\n        \"hoverKeyword\": \"partial\",\n        \"documentation\": \"cms::lang.intellisense.docs.partial\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/partial.html\",\n        \"insertText\": \"partial \\\"${1{partial-list}}\\\"\",\n        \"customData\": {\n            \"isPartialTag\": true\n        }\n    },\n    {\n        \"label\": \"{% ajaxPartial %}\",\n        \"hoverKeyword\": \"ajaxPartial\",\n        \"documentation\": \"cms::lang.intellisense.docs.ajaxpartial\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/ajax-partial.html\",\n        \"insertText\": \"ajaxPartial \\\"${1{partial-list}}\\\"\",\n        \"customData\": {\n            \"isPartialTag\": true\n        }\n    },\n    {\n        \"label\": \"{% content %}\",\n        \"hoverKeyword\": \"content\",\n        \"documentation\": \"cms::lang.intellisense.docs.partial\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/content.html\",\n        \"insertText\": \"content \\\"${1{content-list}}\\\"\"\n    },\n\n    {\n        \"label\": \"{% component %}\",\n        \"hoverKeyword\": \"component\",\n        \"documentation\": \"cms::lang.intellisense.docs.component\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/component.html\",\n        \"insertText\": \"component \\\"${1:name}\\\"\"\n    },\n    {\n        \"label\": \"{% placeholder %}\",\n        \"hoverKeyword\": \"placeholder\",\n        \"documentation\": \"cms::lang.intellisense.docs.placeholder\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/placeholder.html\",\n        \"insertText\": \"placeholder ${1:name}\"\n    },\n    {\n        \"label\": \"{% scripts %}\",\n        \"hoverKeyword\": \"scripts\",\n        \"documentation\": \"cms::lang.intellisense.docs.scripts\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/placeholder.html\",\n        \"insertText\": \"scripts$0\"\n    },\n    {\n        \"label\": \"{% styles %}\",\n        \"hoverKeyword\": \"styles\",\n        \"documentation\": \"cms::lang.intellisense.docs.styles\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/placeholder.html\",\n        \"insertText\": \"styles$0\"\n    },\n    {\n        \"label\": \"{% meta %}\",\n        \"hoverKeyword\": \"meta\",\n        \"documentation\": \"cms::lang.intellisense.docs.meta\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/placeholder.html\",\n        \"insertText\": \"meta$0\"\n    },\n    {\n        \"label\": \"{% flash %}\",\n        \"hoverKeyword\": [\"flash\", \"endflash\"],\n        \"documentation\": \"cms::lang.intellisense.docs.flash\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/flash.html\",\n        \"insertText\": \"{% flash %}$0{{ message }}{% endflash %}\"\n    },\n    {\n        \"label\": \"{% verbatim %}\",\n        \"hoverKeyword\": [\"verbatim\", \"endverbatim\"],\n        \"documentation\": \"cms::lang.intellisense.docs.verbatim\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/verbatim.html\",\n        \"insertText\": \"{% verbatim %}$0{% endverbatim %}\"\n    },\n    {\n        \"label\": \"{% macro %}\",\n        \"hoverKeyword\": [\"macro\", \"endmacro\"],\n        \"documentation\": \"cms::lang.intellisense.docs.macro\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/macro.html\",\n        \"insertText\": \"{% macro ${1:name}(${2:argument}) %}$0{% endmacro %}\"\n    },\n    {\n        \"label\": \"{% for %}\",\n        \"hoverKeyword\": [\"for\", \"endfor\"],\n        \"documentation\": \"cms::lang.intellisense.docs.for\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/for.html\",\n        \"insertText\": \"{% for ${1:item} in ${2:collection} %}\\n\\t$0\\n{% endfor %}\"\n    },\n    {\n        \"label\": \"{% if %}\",\n        \"hoverKeyword\": [\"if\", \"endif\", \"else\", \"elseif\"],\n        \"documentation\": \"cms::lang.intellisense.docs.if\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/if.html\",\n        \"insertText\": \"{% if ${1:condition} %}\\n\\t$0\\n{% endif %}\"\n    }\n]\n"
  },
  {
    "path": "modules/cms/classes/editorextension/editorintellisense/twigfilters.json",
    "content": "[\n    {\n        \"label\": \"abs\",\n        \"hoverKeyword\": \"abs\",\n        \"documentation\": \"cms::lang.intellisense.docs.abs_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/abs.html\",\n        \"insertText\": \"abs\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"batch\",\n        \"hoverKeyword\": \"batch\",\n        \"documentation\": \"cms::lang.intellisense.docs.batch_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/batch.html\",\n        \"insertText\": \"batch(${1:size}, ${2:fill}, ${3:preserve_keys})\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"capitalize\",\n        \"hoverKeyword\": \"capitalize\",\n        \"documentation\": \"cms::lang.intellisense.docs.capitalize_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/capitalize.html\",\n        \"insertText\": \"capitalize\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"column\",\n        \"hoverKeyword\": \"column\",\n        \"documentation\": \"cms::lang.intellisense.docs.column_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/column.html\",\n        \"insertText\": \"column(\\\"${1:name}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"convert_encoding\",\n        \"hoverKeyword\": \"convert_encoding\",\n        \"documentation\": \"cms::lang.intellisense.docs.convert_encoding_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/convert_encoding.html\",\n        \"insertText\": \"convert_encoding(\\\"${1:to}\\\", \\\"${2:from}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"country_name\",\n        \"hoverKeyword\": \"country_name\",\n        \"documentation\": \"cms::lang.intellisense.docs.country_name_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/country_name.html\",\n        \"insertText\": \"country_name\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"currency_name\",\n        \"hoverKeyword\": \"currency_name\",\n        \"documentation\": \"cms::lang.intellisense.docs.currency_name_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/currency_name.html\",\n        \"insertText\": \"currency_name\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"currency_symbol\",\n        \"hoverKeyword\": \"currency_symbol\",\n        \"documentation\": \"cms::lang.intellisense.docs.currency_symbol_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/currency_symbol.html\",\n        \"insertText\": \"currency_symbol\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"data_uri\",\n        \"hoverKeyword\": \"data_uri\",\n        \"documentation\": \"cms::lang.intellisense.docs.data_uri_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/data_uri.html\",\n        \"insertText\": \"data_uri\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"date\",\n        \"hoverKeyword\": \"date\",\n        \"documentation\": \"cms::lang.intellisense.docs.date_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/date.html\",\n        \"insertText\": \"date(\\\"${1:format}\\\", \\\"${2:timezone}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"date_modify\",\n        \"hoverKeyword\": \"date_modify\",\n        \"documentation\": \"cms::lang.intellisense.docs.date_modify_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/date_modify.html\",\n        \"insertText\": \"date_modify(\\\"${1:modifier}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"default\",\n        \"hoverKeyword\": \"default\",\n        \"documentation\": \"cms::lang.intellisense.docs.default_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/default.html\",\n        \"insertText\": \"default(\\\"${1:default}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"escape\",\n        \"hoverKeyword\": \"escape\",\n        \"documentation\": \"cms::lang.intellisense.docs.escape_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/escape.html\",\n        \"insertText\": \"escape\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"e\",\n        \"hoverKeyword\": \"e\",\n        \"documentation\": \"cms::lang.intellisense.docs.escape_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/escape.html\",\n        \"insertText\": \"e\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"filter\",\n        \"hoverKeyword\": \"filter\",\n        \"documentation\": \"cms::lang.intellisense.docs.filter_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/filter.html\",\n        \"insertText\": \"filter(${1:item} => $0})\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"first\",\n        \"hoverKeyword\": \"first\",\n        \"documentation\": \"cms::lang.intellisense.docs.first_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/first.html\",\n        \"insertText\": \"first\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"format\",\n        \"hoverKeyword\": \"format\",\n        \"documentation\": \"cms::lang.intellisense.docs.format_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/format.html\",\n        \"insertText\": \"format(\\\"${1:foo}\\\", \\\"${2:bar}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"format_currency\",\n        \"hoverKeyword\": \"format_currency\",\n        \"documentation\": \"cms::lang.intellisense.docs.format_currency_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/format_currency.html\",\n        \"insertText\": \"format_currency(\\\"${1:EUR}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"join\",\n        \"hoverKeyword\": \"join\",\n        \"documentation\": \"cms::lang.intellisense.docs.join_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/join.html\",\n        \"insertText\": \"join(\\\"${1:, }\\\", \\\"${2: and }\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"json_encode\",\n        \"hoverKeyword\": \"json_encode\",\n        \"documentation\": \"cms::lang.intellisense.docs.json_encode_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/json_encode.html\",\n        \"insertText\": \"json_encode\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"keys\",\n        \"hoverKeyword\": \"keys\",\n        \"documentation\": \"cms::lang.intellisense.docs.keys_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/keys.html\",\n        \"insertText\": \"keys\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"last\",\n        \"hoverKeyword\": \"last\",\n        \"documentation\": \"cms::lang.intellisense.docs.last_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/last.html\",\n        \"insertText\": \"last\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"length\",\n        \"hoverKeyword\": \"length\",\n        \"documentation\": \"cms::lang.intellisense.docs.length_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/length.html\",\n        \"insertText\": \"length\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"lower\",\n        \"hoverKeyword\": \"lower\",\n        \"documentation\": \"cms::lang.intellisense.docs.lower_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/lower.html\",\n        \"insertText\": \"lower\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"map\",\n        \"hoverKeyword\": \"map\",\n        \"documentation\": \"cms::lang.intellisense.docs.map_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/map.html\",\n        \"insertText\": \"map(${1:item} => $0)\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"merge\",\n        \"hoverKeyword\": \"merge\",\n        \"documentation\": \"cms::lang.intellisense.docs.merge_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/merge.html\",\n        \"insertText\": \"merge(${1:items})\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"nl2br\",\n        \"hoverKeyword\": \"nl2br\",\n        \"documentation\": \"cms::lang.intellisense.docs.nl2br_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/nl2br.html\",\n        \"insertText\": \"nl2br\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"number_format\",\n        \"hoverKeyword\": \"number_format\",\n        \"documentation\": \"cms::lang.intellisense.docs.number_format_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/number_format.html\",\n        \"insertText\": \"number_format(${1:2}, \\\"${2:.}\\\", \\\"${3:,}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"reduce\",\n        \"hoverKeyword\": \"reduce\",\n        \"documentation\": \"cms::lang.intellisense.docs.reduce_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/reduce.html\",\n        \"insertText\": \"reduce((${1:carry}, ${2:value}) => $0)\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"replace\",\n        \"hoverKeyword\": \"replace\",\n        \"documentation\": \"cms::lang.intellisense.docs.replace_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/reduce.html\",\n        \"insertText\": \"replace({\\\"${1:from}\\\": \\\"${2:to}\\\"})\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"reverse\",\n        \"hoverKeyword\": \"reverse\",\n        \"documentation\": \"cms::lang.intellisense.docs.reverse_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/reverse.html\",\n        \"insertText\": \"reverse\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"round\",\n        \"hoverKeyword\": \"round\",\n        \"documentation\": \"cms::lang.intellisense.docs.round_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/round.html\",\n        \"insertText\": \"round(${1:1}, \\\"${2:floor}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"slice\",\n        \"hoverKeyword\": \"slice\",\n        \"documentation\": \"cms::lang.intellisense.docs.slice_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/slice.html\",\n        \"insertText\": \"slice(${1:0}, ${2:5})\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"sort\",\n        \"hoverKeyword\": \"sort\",\n        \"documentation\": \"cms::lang.intellisense.docs.sort_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/sort.html\",\n        \"insertText\": \"sort\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"spaceless\",\n        \"hoverKeyword\": \"spaceless\",\n        \"documentation\": \"cms::lang.intellisense.docs.spaceless_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/spaceless.html\",\n        \"insertText\": \"spaceless\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"split\",\n        \"hoverKeyword\": \"split\",\n        \"documentation\": \"cms::lang.intellisense.docs.split_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/split.html\",\n        \"insertText\": \"split(\\\"${1:,}\\\")\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"striptags\",\n        \"hoverKeyword\": \"striptags\",\n        \"documentation\": \"cms::lang.intellisense.docs.striptags_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/striptags.html\",\n        \"insertText\": \"striptags\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"title\",\n        \"hoverKeyword\": \"title\",\n        \"documentation\": \"cms::lang.intellisense.docs.title_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/title.html\",\n        \"insertText\": \"title\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"trim\",\n        \"hoverKeyword\": \"trim\",\n        \"documentation\": \"cms::lang.intellisense.docs.trim_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/trim.html\",\n        \"insertText\": \"trim\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"upper\",\n        \"hoverKeyword\": \"upper\",\n        \"documentation\": \"cms::lang.intellisense.docs.upper_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/upper.html\",\n        \"insertText\": \"upper\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"url_encode\",\n        \"hoverKeyword\": \"url_encode\",\n        \"documentation\": \"cms::lang.intellisense.docs.url_encode_filter\",\n        \"docUrl\": \"https://twig.symfony.com/doc/2.x/filters/url_encode.html\",\n        \"insertText\": \"url_encode\",\n        \"isNativeTwigFilter\": true\n    },\n    {\n        \"label\": \"page\",\n        \"hoverKeyword\": \"page\",\n        \"documentation\": \"cms::lang.intellisense.docs.page_filter\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/filter/page.html\",\n        \"insertText\": \"page\",\n        \"isNativeTwigFilter\": false\n    },\n    {\n        \"label\": \"theme\",\n        \"hoverKeyword\": \"theme\",\n        \"documentation\": \"cms::lang.intellisense.docs.theme_filter\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/filter/theme.html\",\n        \"insertText\": \"theme\",\n        \"isNativeTwigFilter\": false\n    },\n    {\n        \"label\": \"app\",\n        \"hoverKeyword\": \"app\",\n        \"documentation\": \"cms::lang.intellisense.docs.app_filter\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/filter/app.html\",\n        \"insertText\": \"app\",\n        \"isNativeTwigFilter\": false\n    },\n    {\n        \"label\": \"media\",\n        \"hoverKeyword\": \"media\",\n        \"documentation\": \"cms::lang.intellisense.docs.media_filter\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/filter/media.html\",\n        \"insertText\": \"media\",\n        \"isNativeTwigFilter\": false\n    },\n    {\n        \"label\": \"md\",\n        \"hoverKeyword\": \"md\",\n        \"documentation\": \"cms::lang.intellisense.docs.md_filter\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/filter/md.html\",\n        \"insertText\": \"md\",\n        \"isNativeTwigFilter\": false\n    },\n    {\n        \"label\": \"raw\",\n        \"hoverKeyword\": \"raw\",\n        \"documentation\": \"cms::lang.intellisense.docs.raw_filter\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/filter/raw.html\",\n        \"insertText\": \"raw\",\n        \"isNativeTwigFilter\": false\n    },\n    {\n        \"label\": \"content\",\n        \"hoverKeyword\": \"content\",\n        \"documentation\": \"cms::lang.intellisense.docs.content_filter\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/tag/content.html\",\n        \"insertText\": \"content\",\n        \"isNativeTwigFilter\": false\n    },\n    {\n        \"label\": \"link\",\n        \"hoverKeyword\": \"link\",\n        \"documentation\": \"cms::lang.intellisense.docs.link_filter\",\n        \"docUrl\": \"https://docs.octobercms.com/4.x/markup/filter/link.html\",\n        \"insertText\": \"link\",\n        \"isNativeTwigFilter\": false\n    }\n]\n"
  },
  {
    "path": "modules/cms/classes/layout/Fields.php",
    "content": "<?php namespace Cms\\Classes\\Layout;\n\n/**\n * Fields\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Fields\n{\n    /**\n     * defineSettingsFields\n     */\n    public function defineSettingsFields(): array\n    {\n        return [\n            'is_priority' => [\n                'type' => \"checkbox\",\n                'title' => \"cms::lang.editor.priority\",\n                'description' => \"cms::lang.editor.priority_comment\",\n            ]\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/page/Fields.php",
    "content": "<?php namespace Cms\\Classes\\Page;\n\n/**\n * Fields\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Fields\n{\n    /**\n     * defineSettingsFields\n     */\n    public function defineSettingsFields(): array\n    {\n        return [\n            'title' => [\n                'title' => \"cms::lang.editor.title\",\n                'placeholder' => \"cms::lang.editor.new_title\",\n                'type' => 'string'\n            ],\n            'url' => [\n                'title' => \"cms::lang.editor.url\",\n                'placeholder' => \"/\",\n                'type' => 'string',\n                'preset' => [\n                    'property' => \"title\",\n                    'type' => 'url'\n                ],\n                'validation' => [\n                    'required' => [\n                        'message' => \"cms::lang.page.url_required\"\n                    ],\n                    'regex' => [\n                        'message' => \"cms::lang.page.invalid_url\",\n                        'pattern' => '^/[a-zA-Z0-9/\\\\:_\\\\-\\\\*\\\\[\\\\]\\\\+\\\\?\\\\|\\\\.\\\\^\\\\\\\\$]*$'\n                    ]\n                ]\n            ],\n            'fileName' => [\n                'title' => \"cms::lang.editor.filename\",\n                'type' => 'string',\n                'preset' => [\n                    'property' => \"title\",\n                    'type' => 'file'\n                ],\n                'validation' => [\n                    'required' => [\n                        'message' => \"cms::lang.cms_object.file_name_required\"\n                    ],\n                    'regex' => [\n                        'message' => \"cms::lang.cms_object.invalid_file_inspector\",\n                        'pattern' => '^[a-z0-9\\\\_\\\\-\\\\.\\\\/]+$'\n                    ]\n                ]\n            ],\n            'layout' => [\n                'type' => 'dropdown',\n                'title' => \"cms::lang.editor.layout\"\n            ],\n            'is_hidden' => [\n                'type' => 'checkbox',\n                'title' => \"cms::lang.editor.hidden\",\n                'description' => \"cms::lang.editor.hidden_comment\"\n            ],\n            'description' => [\n                'title' => \"cms::lang.editor.description\",\n                'description' => \"cms::lang.page.description_hint\",\n                'type' => 'text',\n                'size' => 'medium'\n            ],\n            'meta_title' => [\n                'type' => 'string',\n                'title' => \"cms::lang.editor.meta_title\",\n                'tab' =>  \"cms::lang.editor.meta\"\n            ],\n            'meta_description' => [\n                'title' => \"cms::lang.editor.meta_description\",\n                'type' => 'text',\n                'size' => 'medium',\n                'tab' =>  \"cms::lang.editor.meta\"\n            ],\n            'meta_image' => [\n                'type' => 'string',\n                'title' => \"cms::lang.editor.meta_image\",\n                'description' => \"cms::lang.editor.meta_image_comment\",\n                'tab' => \"cms::lang.editor.meta\"\n            ],\n            'meta_type' => [\n                'type' => 'dropdown',\n                'title' => \"cms::lang.editor.meta_type\",\n                'tab' => \"cms::lang.editor.meta\",\n                'default' => 'website',\n                'options' => [\n                    'website' => \"cms::lang.editor.meta_type_website\",\n                    'article' => \"cms::lang.editor.meta_type_article\",\n                    'product' => \"cms::lang.editor.meta_type_product\"\n                ]\n            ],\n            'meta_robots' => [\n                'type' => 'dropdown',\n                'title' => \"cms::lang.editor.meta_robots\",\n                'tab' => \"cms::lang.editor.meta\",\n                'options' => [\n                    '' => \"cms::lang.editor.meta_robots_default\",\n                    'noindex,follow' => \"cms::lang.editor.meta_robots_noindex_follow\",\n                    'noindex,nofollow' => \"cms::lang.editor.meta_robots_noindex_nofollow\"\n                ]\n            ]\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/partial/Fields.php",
    "content": "<?php namespace Cms\\Classes\\Partial;\n\n/**\n * Fields\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Fields\n{\n    /**\n     * defineSettingsFields\n     */\n    public function defineSettingsFields(): array\n    {\n        return [];\n    }\n\n    /**\n     * defineSettingsButtons\n     */\n    public function defineSettingsButtons(): array\n    {\n        return [\n            [\n                'button' => \"Snippet\",\n                'icon' => 'icon-code-snippet',\n                'popupTitle' => \"Define a Snippet Partial\",\n                'useViewBag' => true,\n                'properties' => $this->defineSnippetFields()\n            ]\n        ];\n    }\n\n    /**\n     * defineSnippetFields\n     */\n    public function defineSnippetFields(): array\n    {\n        return [\n            'snippetCode' => [\n                'title' => \"Snippet Code\",\n                'description' => \"Enter a code to make this partial available as a snippet in content editors.\",\n                'type' => 'string',\n                'validation' => [\n                    'required' => [\n                        'message' => \"Please enter the snippet code\"\n                    ]\n                ]\n            ],\n            'snippetName' => [\n                'title' => \"Name\",\n                'description' => \"The name is displayed in the snippet list in the editor when a snippet is added.\",\n                'type' => 'string',\n                'validation' => [\n                    'required' => [\n                        'message' => \"Please enter the snippet name\"\n                    ]\n                ],\n                'tab' => \"Details\"\n            ],\n            'snippetDescription' => [\n                'title' => \"Description\",\n                'description' => \"The description is displayed in the snippet list in the editor when a snippet is added.\",\n                'type' => 'string',\n                'tab' => \"Details\"\n            ],\n            // 'snippetIcon' => [\n            //     'title' => \"Icon\",\n            //     'description' => \"xxx\",\n            //     'type' => 'dropdown',\n            //     'optionsPreset' => 'icons'\n            //     'tab' => \"Details\"\n            // ],\n            'snippetAjax' => [\n                'title' => \"AJAX Enabled\",\n                'description' => \"Check this box to enable an AJAX requests for this snippet.\",\n                'type' => 'checkbox',\n                'default' => false,\n                'tab' => \"Details\"\n            ],\n            'snippetProperties' => [\n                'title' => '',\n                'type' => 'table',\n                'tab' => \"Properties\",\n                'columns' => [\n                    'title' => [\n                        'type' => 'string',\n                        'title' => \"Property Title\",\n                        'validation' => [\n                            'required' => [\n                                'message' => \"Please provide the property title\"\n                            ]\n                        ]\n                    ],\n                    'property' => [\n                        'type' => 'string',\n                        'title' => \"Code\",\n                        'validation' => [\n                            'required' => [\n                                'message' => \"Please provide the property name\"\n                            ],\n                            'regex' => [\n                                'pattern' => '^[a-z][a-z0-9\\\\_]*$',\n                                'modifiers' => 'i',\n                                'message' => \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\"\n                            ]\n                        ]\n                    ],\n                    'type' => [\n                        'title' => \"Type\",\n                        'type' => 'dropdown',\n                        'placeholder' => \"Select\",\n                        'options' => [\n                            'string' => \"String\",\n                            'checkbox' => \"Checkbox\",\n                            'dropdown' => \"Dropdown\"\n                        ],\n                        'validation' => [\n                            'required' => [\n                                'message' => \"Please select the property type\"\n                            ]\n                        ]\n                    ],\n                    'default' => [\n                        'type' => 'string',\n                        'title' => \"Default\"\n                    ],\n                    'options' => [\n                        'type' => 'string',\n                        'title' => \"Options\"\n                    ]\n                ]\n            ]\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/theme/HasCacheLayer.php",
    "content": "<?php namespace Cms\\Classes\\Theme;\n\nuse File;\n\n/**\n * HasCacheLayer for themes\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasCacheLayer\n{\n    /**\n     * getCachedThemePath\n     */\n    public function getCachedThemePath(): string\n    {\n        if (!$this->dirName) {\n            return cache_path(\"cms/theme.php\");\n        }\n\n        return cache_path(\"cms/theme-{$this->dirName}.php\");\n    }\n\n    /**\n     * themeIsCached\n     */\n    public function themeIsCached(): bool\n    {\n        return File::exists($this->getCachedThemePath());\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/theme/HasConfiguration.php",
    "content": "<?php namespace Cms\\Classes\\Theme;\n\nuse Url;\nuse File;\nuse Yaml;\nuse Event;\nuse Exception;\nuse ApplicationException;\n\n/**\n * HasConfiguration for themes\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasConfiguration\n{\n    /**\n     * @var mixed configCache keeps the cached configuration file values\n     */\n    protected $configCache;\n\n    /**\n     * getConfig reads the theme.yaml file and returns the theme configuration values\n     */\n    public function getConfig(): array\n    {\n        if ($this->configCache !== null) {\n            return $this->configCache;\n        }\n\n        $path = $this->getPath().'/theme.yaml';\n        if (!File::exists($path)) {\n            $config = [];\n        }\n        else {\n            $config = (array) Yaml::parseFileCached($path);\n        }\n\n        /**\n         * @event cms.theme.extendConfig\n         * Extend basic theme configuration supplied by the theme by returning an array.\n         *\n         * Note if planning on extending form fields, use the `cms.theme.extendFormConfig`\n         * event instead.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.theme.extendConfig', function ($themeCode, &$config) {\n         *          $config['name'] = 'October Theme';\n         *          $config['description'] = 'Another great theme from October CMS';\n         *     });\n         *\n         */\n        Event::fire('cms.theme.extendConfig', [$this->getDirName(), &$config]);\n\n        return $this->configCache = $config;\n    }\n\n    /**\n     * getFormConfig returns the dedicated `form` option that provide form fields\n     * for customization, this is an immutable accessor for that and also an\n     * solid anchor point for extension\n     */\n    public function getFormConfig(): array\n    {\n        if ($this->hasParentTheme()) {\n            $parentTheme = $this->getParentTheme();\n\n            try {\n                $config = $this->getConfigArray('form') ?: $parentTheme->getFormConfig();\n            }\n            catch (Exception $ex) {\n                $config = $parentTheme->getFormConfig();\n            }\n        }\n        else {\n            $config = $this->getConfigArray('form');\n        }\n\n        /**\n         * @event cms.theme.extendFormConfig\n         * Extend form field configuration supplied by the theme by returning an array.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.theme.extendFormConfig', function ($themeCode, &$config) {\n         *          array_set($config, 'tabs.fields.header_color', [\n         *              'label' => 'Header Colour',\n         *              'type' => 'colorpicker',\n         *              'availableColors' => [#34495e, #708598, #3498db],\n         *              'assetVar' => 'header-bg',\n         *              'tab' => 'Global'\n         *          ]);\n         *     });\n         *\n         */\n        Event::fire('cms.theme.extendFormConfig', [$this->getDirName(), &$config]);\n\n        return $config;\n    }\n\n    /**\n     * getConfigValue returns a value from the theme configuration file by its name\n     */\n    public function getConfigValue(string $name, $default = null)\n    {\n        return array_get($this->getConfig(), $name, $default);\n    }\n\n    /**\n     * getConfigArray returns an array value from the theme configuration file by its name\n     *\n     * If the value is a string, it is treated as a YAML file and loaded.\n     */\n    public function getConfigArray(string $name): array\n    {\n        $result = array_get($this->getConfig(), $name, []);\n\n        if (is_string($result)) {\n            $fileName = File::symbolizePath($result);\n\n            if (File::isLocalPath($fileName)) {\n                $path = $fileName;\n            }\n            else {\n                $path = $this->getPath().'/'.$result;\n            }\n\n            if (!File::exists($path)) {\n                throw new ApplicationException('Path does not exist: '.$path);\n            }\n\n            $result = Yaml::parseFileCached($path);\n        }\n\n        return (array) $result;\n    }\n\n    /**\n     * getPreviewImageUrl returns the theme preview image URL\n     *\n     * If the image file doesn't exist returns the placeholder image URL.\n     */\n    public function getPreviewImageUrl(): string\n    {\n        $previewPath = $this->getConfigValue('previewImage', 'assets/images/theme-preview.png');\n\n        if (File::exists($this->getPath().'/'.$previewPath)) {\n            return Url::asset('themes/'.$this->getDirName().'/'.$previewPath);\n        }\n\n        if ($this->hasParentTheme()) {\n            return $this->getParentTheme()->getPreviewImageUrl();\n        }\n\n        return Url::asset('modules/cms/assets/images/default-theme-preview.png');\n    }\n\n    /**\n     * writeConfig to the theme.yaml file with the supplied array values\n     */\n    public function writeConfig(array $values = [], bool $overwrite = false)\n    {\n        if (!$overwrite) {\n            $values = $values + (array) $this->getConfig();\n        }\n\n        $path = $this->getPath().'/theme.yaml';\n\n        if (!File::exists($path)) {\n            throw new ApplicationException('Path does not exist: '.$path);\n        }\n\n        $contents = Yaml::render($values);\n\n        File::put($path, $contents);\n\n        $this->writeComposerFile($values);\n\n        $this->configCache = $values;\n    }\n\n    /**\n     * writeComposerFile writes to a composer file for a theme\n     */\n    protected function writeComposerFile(array $data)\n    {\n        $author = strtolower(trim($data['authorCode'] ?? ''));\n        $code = strtolower(trim($data['code'] ?? ''));\n        $description = $data['description'] ?? null;\n        $path = $this->getPath();\n\n        if (!$description) {\n            $description = $data['name'] ?? '';\n        }\n\n        // Abort\n        if (!$path || !$author || !$code) {\n            return;\n        }\n\n        $composerArr = [\n            'name' => $author.'/'.$code.'-theme',\n            'type' => 'october-theme',\n            'description' => $description,\n            'require' => [\n                'composer/installers' => '~1.0'\n            ]\n        ];\n\n        File::put(\n            $path.'/composer.json',\n            json_encode($composerArr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT)\n        );\n    }\n}\n"
  },
  {
    "path": "modules/cms/classes/theme/fields.yaml",
    "content": "# ===================================\n#  Form Field Definitions\n# ===================================\n\ntabs:\n    defaultTab: Properties\n    fields:\n\n        name:\n            label: Name\n            placeholder: New theme name\n            span: auto\n            required: true\n            attributes:\n                default-focus: 1\n\n        dir_name@create:\n            label: Directory Name\n            placeholder: The destination theme directory\n            span: auto\n            preset: name\n            required: true\n\n        dir_name@update:\n            label: Directory Name\n            disabled: true\n            span: auto\n\n        description:\n            label: Description\n            placeholder: Theme description\n            type: textarea\n            size: tiny\n\n        author:\n            label: Author Name\n            placeholder: Person or company name\n            span: auto\n            tab: Publish\n\n        homepage:\n            label: Homepage\n            placeholder: Website URL\n            span: auto\n            tab: Publish\n\n        authorCode:\n            label: Author Code\n            placeholder: A unique code for the author used for distribution\n            span: auto\n            tab: Publish\n\n        code:\n            label: Theme Code\n            placeholder: A unique code for this theme used for distribution\n            span: auto\n            tab: Publish\n\n        parent:\n            label: Parent Theme\n            type: dropdown\n            tab: Advanced\n\n        database:\n            label: Database Mode\n            comment: Save changes to this theme in the database instead of the filesystem\n            type: checkbox\n            tab: Advanced\n"
  },
  {
    "path": "modules/cms/components/Resources.php",
    "content": "<?php namespace Cms\\Components;\n\nuse File;\nuse Cms\\Classes\\ComponentModuleBase;\n\n/**\n * Resources component\n */\nclass Resources extends ComponentModuleBase\n{\n    /**\n     * @var string jsDir for JavaScript files.\n     */\n    public $jsDir = 'js';\n\n    /**\n     * @var string cssDir for CSS files.\n     */\n    public $cssDir = 'css';\n\n    /**\n     * @var string lessDir for LESS files.\n     */\n    public $lessDir = 'less';\n\n    /**\n     * @var string scssDir for SCSS files.\n     */\n    public $scssDir = 'scss';\n\n    /**\n     * componentDetails\n     * @return array\n     */\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Resources',\n            'description' => 'Reference assets and variables included on this page.',\n            'icon' => 'icon-cubes'\n        ];\n    }\n\n    /**\n     * defineProperties\n     * @return array\n     */\n    public function defineProperties()\n    {\n        return [\n            'js' => [\n                'title' => 'JavaScript',\n                'description' => 'JavaScript file(s) in the assets/js folder',\n                'type' => 'stringList',\n                'showExternalParam' => false\n            ],\n            'module' => [\n                'title' => 'JS Module',\n                'description' => 'JavaScript module file(s) in the assets/js folder',\n                'type' => 'stringList',\n                'showExternalParam' => false\n            ],\n            'less' => [\n                'title' => 'LESS',\n                'description' => 'LESS file(s) in the assets/less folder',\n                'type' => 'stringList',\n                'showExternalParam' => false\n            ],\n            'scss' => [\n                'title' => 'SCSS',\n                'description' => 'SCSS file(s) in the assets/scss folder',\n                'type' => 'stringList',\n                'showExternalParam' => false\n            ],\n            'css' => [\n                'title' => 'CSS',\n                'description' => 'Stylesheet file(s) in the assets/css folder',\n                'type' => 'stringList',\n                'showExternalParam' => false\n            ],\n            'vars' => [\n                'title' => 'Variables',\n                'description' => 'Page variables name(s) and value(s)',\n                'type' => 'dictionary',\n                'showExternalParam' => false\n            ],\n            'headers' => [\n                'title' => 'Headers',\n                'description' => 'Page header name(s) and value(s)',\n                'type' => 'dictionary',\n                'showExternalParam' => false\n            ]\n        ];\n    }\n\n    /**\n     * init\n     */\n    public function init()\n    {\n        $this->assetPath = $this->controller->assetPath;\n        $this->assetUrlPath = $this->controller->assetUrlPath;\n        $this->jsDir = $this->guessAssetDirectory(['js', 'javascript'], $this->jsDir);\n        $this->scssDir = $this->guessAssetDirectory(['scss', 'sass'], $this->scssDir);\n    }\n\n    /**\n     * onRun\n     */\n    public function onRun()\n    {\n        // JavaScript\n        if ($assets = $this->property('js')) {\n            foreach ((array) $assets as $asset) {\n                $this->controller->addJsBundle($this->prefixJs($asset), 'cms-js');\n            }\n        }\n\n        // JS Modules\n        if ($assets = $this->property('module')) {\n            foreach ((array) $assets as $asset) {\n                $this->controller->addJs($this->prefixJs($asset), ['type' => 'module']);\n            }\n        }\n\n        // LESS\n        if ($assets = $this->property('less')) {\n            foreach ((array) $assets as $asset) {\n                $this->controller->addCssBundle($this->prefixLess($asset), 'cms-less');\n            }\n        }\n\n        // SCSS\n        if ($assets = $this->property('scss')) {\n            foreach ((array) $assets as $asset) {\n                $this->controller->addCssBundle($this->prefixScss($asset), 'cms-scss');\n            }\n        }\n\n        // CSS\n        if ($assets = $this->property('css')) {\n            foreach ((array) $assets as $asset) {\n                $this->controller->addCssBundle($this->prefixCss($asset), 'cms-css');\n            }\n        }\n\n        // Variables and Headers\n        $this->controller->bindEvent('page.beforeRenderPage', function ($page) {\n            if ($vars = $this->property('vars')) {\n                foreach ((array) $vars as $key => $value) {\n                    $this->page[$key] = $value;\n                }\n            }\n\n            if ($headers = $this->property('headers')) {\n                foreach ((array) $headers as $key => $value) {\n                    $this->controller->setResponseHeader($key, $value);\n                }\n            }\n        });\n    }\n\n    /**\n     * prefixJs\n     */\n    protected function prefixJs($value)\n    {\n        $path = 'assets/'.$this->jsDir.'/'.trim($value);\n\n        if (($theme = $this->getTheme()) && $theme->useParentAsset($path)) {\n            return '#/'.$theme->getParentTheme()->getDirName().'/'.$path;\n        }\n\n        return $path;\n    }\n\n    /**\n     * prefixCss\n     */\n    protected function prefixCss($value)\n    {\n        $path = 'assets/'.$this->cssDir.'/'.trim($value);\n\n        if (($theme = $this->getTheme()) && $theme->useParentAsset($path)) {\n            return '#/'.$theme->getParentTheme()->getDirName().'/'.$path;\n        }\n\n        return $path;\n    }\n\n    /**\n     * prefixLess\n     */\n    protected function prefixLess($value)\n    {\n        $path = 'assets/'.$this->lessDir.'/'.trim($value);\n\n        if (($theme = $this->getTheme()) && $theme->useParentAsset($path)) {\n            return '#/'.$theme->getParentTheme()->getDirName().'/'.$path;\n        }\n\n        return $path;\n    }\n\n    /**\n     * prefixScss\n     */\n    protected function prefixScss($value)\n    {\n        $path = 'assets/'.$this->scssDir.'/'.trim($value);\n\n        if (($theme = $this->getTheme()) && $theme->useParentAsset($path)) {\n            return '#/'.$theme->getParentTheme()->getDirName().'/'.$path;\n        }\n\n        return $path;\n    }\n\n    /**\n     * guessAssetDirectory determines an inner asset directory, eg: scss or sass\n     */\n    protected function guessAssetDirectory(array $possible, $default = null)\n    {\n        $themeDir = $this->getTheme()->getDirName();\n        foreach ($possible as $option) {\n            if (File::isDirectory(themes_path($themeDir.'/assets/'.$option))) {\n                return $option;\n            }\n        }\n\n        return $default;\n    }\n}\n"
  },
  {
    "path": "modules/cms/components/SitePicker.php",
    "content": "<?php namespace Cms\\Components;\n\nuse Cms;\nuse Site;\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\ComponentModuleBase;\nuse Exception;\n\n/**\n * SitePicker component\n */\nclass SitePicker extends ComponentModuleBase\n{\n    /**\n     * @var array sitesCache for multiple calls\n     */\n    protected $sitesCache;\n\n    /**\n     * @var array allSitesCache for multiple calls\n     */\n    protected $allSitesCache;\n\n    /**\n     * componentDetails\n     * @return array\n     */\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Site Picker',\n            'description' => 'Displays links for selecting a different site.',\n            'icon' => 'icon-globe'\n        ];\n    }\n\n    /**\n     * isEnabled returns true if the site picker should be displayed\n     */\n    public function isEnabled()\n    {\n        return Site::hasMultiSite();\n    }\n\n    /**\n     * sites lazily loads the available sites\n     */\n    public function sites()\n    {\n        return $this->sitesCache ??= $this->allSites()->inSiteGroup();\n    }\n\n    /**\n     * allSites lazily loads the available sites\n     */\n    public function allSites()\n    {\n        if ($this->allSitesCache !== null) {\n            return $this->allSitesCache;\n        }\n\n        $sites = Site::listEnabled();\n\n        foreach ($sites as $site) {\n            $site->setUrlOverride(Cms::siteUrl(\n                $this->getPage(),\n                $site,\n                $this->getRouter()->getParameters()\n            ));\n        }\n\n        return $this->allSitesCache = $sites;\n    }\n\n    /**\n     * pageSites returns a CMS page for all available sites\n     */\n    public function pageSites($pageName, $params = [])\n    {\n        try {\n            $page = Page::loadCached($this->getTheme(), $pageName);\n            if (!$page) {\n                return [];\n            }\n        }\n        catch (Exception $ex) {\n            return [];\n        }\n\n        $sites = Site::listEnabled();\n\n        foreach ($sites as $site) {\n            $site->setUrlOverride(Cms::siteUrl($page, $site, (array) $params));\n        }\n\n        return $sites;\n    }\n}\n"
  },
  {
    "path": "modules/cms/components/UnknownComponent.php",
    "content": "<?php namespace Cms\\Components;\n\nuse Cms\\Classes\\ComponentModuleBase;\n\nclass UnknownComponent extends ComponentModuleBase\n{\n    /**\n     * @var string errorMessage that is shown with this error component.\n     */\n    protected $errorMessage;\n\n    /**\n     * __construct\n     */\n    public function __construct($cmsObject, $properties, $errorMessage)\n    {\n        $this->errorMessage = $errorMessage;\n        $this->componentCssClass = 'error-component';\n        $this->inspectorEnabled = false;\n\n        parent::__construct($cmsObject, $properties);\n    }\n\n    /**\n     * componentDetails\n     * @return array\n     */\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Unknown component',\n            'description' => $this->errorMessage\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/cms/components/ViewBag.php",
    "content": "<?php namespace Cms\\Components;\n\nuse Cms\\Classes\\ComponentModuleBase;\n\n/**\n * ViewBag stores custom template properties, hidden in the backend.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ViewBag extends ComponentModuleBase\n{\n    /**\n     * @var bool isHidden from the backend UI.\n     */\n    public $isHidden = true;\n\n    /**\n     * componentDetails\n     * @return array\n     */\n    public function componentDetails()\n    {\n        return [\n            'name' => 'View Bag',\n            'description' => 'Stores custom template properties.'\n        ];\n    }\n\n    /**\n     * validateProperties\n     * @param array $properties\n     * @return array\n     */\n    public function validateProperties(array $properties)\n    {\n        return $properties;\n    }\n\n    /**\n     * __get implements the getter functionality.\n     * @param  string  $name\n     * @return void\n     */\n    public function __get($name)\n    {\n        if (array_key_exists($name, $this->properties)) {\n            return $this->properties[$name];\n        }\n\n        return null;\n    }\n\n    /**\n     * __isset determine if an attribute exists on the object.\n     * @param  string $key\n     * @return bool\n     */\n    public function __isset($key)\n    {\n        if (array_key_exists($key, $this->properties)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * defineProperties\n     * @return array\n     */\n    public function defineProperties()\n    {\n        $result = [];\n\n        foreach ($this->properties as $name => $value) {\n            $result[$name] = [\n                'title' => $name,\n                'type' => 'string'\n            ];\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/cms/components/sitepicker/default.htm",
    "content": "<select class=\"form-control\" onchange=\"window.location.assign(this.value)\">\n    {% for site in __SELF__.sites %}\n        <option value=\"{{ site.url }}\" {{ this.site.code == site.code ? 'selected' }}>{{ site.name }}</option>\n    {% endfor %}\n</select>\n"
  },
  {
    "path": "modules/cms/composer.json",
    "content": "{\n    \"name\": \"october/cms\",\n    \"type\": \"october-module\",\n    \"description\": \"CMS module for October CMS\",\n    \"homepage\": \"https://octobercms.com\",\n    \"keywords\": [\"october cms\", \"october\", \"cms\"],\n    \"authors\": [\n        {\n            \"name\": \"Alexey Bobkov\",\n            \"email\": \"aleksey.bobkov@gmail.com\"\n        },\n        {\n            \"name\": \"Samuel Georges\",\n            \"email\": \"daftspunky@gmail.com\"\n        }\n    ]\n}\n"
  },
  {
    "path": "modules/cms/console/ThemeCache.php",
    "content": "<?php namespace Cms\\Console;\n\nuse File;\nuse Cms\\Classes\\Router as CmsRouter;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse Illuminate\\Console\\Command;\n\n/**\n * ThemeCache caches the system themes\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeCache extends Command\n{\n     /**\n     * @var string name of console command\n     */\n    protected $name = 'theme:cache';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Create theme cache files for faster registration.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->callSilent('theme:clear');\n\n        foreach (CmsTheme::all() as $theme) {\n            $this->handleTheme($theme);\n        }\n\n        $this->components->info('Themes cached successfully.');\n    }\n\n    /**\n     * handleTheme command\n     */\n    public function handleTheme(CmsTheme $theme)\n    {\n        $router = $this->getFreshThemeRouter($theme);\n\n        File::put(\n            $theme->getCachedThemePath(),\n            $this->buildThemeCacheFile($router)\n        );\n    }\n\n    /**\n     * buildThemeCacheFile\n     */\n    protected function buildThemeCacheFile($router)\n    {\n        $manifest = [\n            'routes' => $router->toArray()\n        ];\n\n        return '<?php return '.var_export($manifest, true).';';\n    }\n\n    /**\n     * getFreshThemeRoutes\n     */\n    protected function getFreshThemeRouter(CmsTheme $theme)\n    {\n        return (new CmsRouter($theme))->build();\n    }\n}\n"
  },
  {
    "path": "modules/cms/console/ThemeCheck.php",
    "content": "<?php namespace Cms\\Console;\n\nuse Cms\\Classes\\ThemeManager;\nuse Illuminate\\Console\\Command;\n\n/**\n * ThemeCheck checks for themes installed with composer and locks them\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeCheck extends Command\n{\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'theme:check';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Checks for themes installed with composer and locks them.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->line('Checking Themes...');\n\n        $this->lockReadonlyThemes();\n    }\n\n    /**\n     * lockReadonlyThemes\n     */\n    protected function lockReadonlyThemes()\n    {\n        $manager = ThemeManager::instance();\n        $lockable = $manager->findLockableThemes();\n\n        foreach ($lockable as $dirName) {\n            if ($manager->createChildTheme($dirName)) {\n                $this->output->success(\"Created '{$dirName}' child theme\");\n            }\n\n            if ($manager->performLockOnTheme($dirName)) {\n                $this->output->success(\"Theme '{$dirName}' locked\");\n            }\n        }\n\n        $this->info('All themes checked');\n    }\n}\n"
  },
  {
    "path": "modules/cms/console/ThemeClear.php",
    "content": "<?php namespace Cms\\Console;\n\nuse System\\Helpers\\Cache as CacheHelper;\nuse Illuminate\\Console\\Command;\n\n/**\n * ThemeClear caches the system themes\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeClear extends Command\n{\n     /**\n     * @var string name of console command\n     */\n    protected $name = 'theme:clear';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Remove theme cache files.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        CacheHelper::instance()->clearThemeCache();\n\n        $this->components->info('Theme cache cleared successfully.');\n    }\n}\n"
  },
  {
    "path": "modules/cms/console/ThemeCopy.php",
    "content": "<?php namespace Cms\\Console;\n\nuse Cms\\Classes\\Theme as CmsTheme;\nuse Cms\\Classes\\ThemeManager;\nuse Illuminate\\Console\\Command;\n\n/**\n * ThemeCopy will duplicate a specified theme\n *\n * theme:copy theme-name new-theme-name\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeCopy extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'theme:copy\n        {name : The name of the theme (directory name) to duplicate.}\n        {new-name? : The desired name for the new theme (directory name).}\n        {--f|force : Force the operation to run.}\n        {--c|child : Create a child theme.}\n        {--import-db : Includes the database templates in the copy.}\n        {--purge-db : Deletes all templates from the database.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Duplicates an existing theme';\n\n    /**\n     * @var \\Cms\\Classes\\ThemeManager themeManager\n     */\n    protected $themeManager;\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->themeManager = ThemeManager::instance();\n\n        $sourceDir = $this->argument('name');\n        $targetDir = $this->argument('new-name');\n\n        if (!CmsTheme::exists($sourceDir)) {\n            $this->output->error(\"Theme '{$sourceDir}' could not be found\");\n            exit(1);\n        }\n\n        if ($targetDir) {\n            $this->handleDuplicateTheme($sourceDir, $targetDir);\n        }\n\n        if ($this->option('import-db')) {\n            $this->handleImportDatabase($sourceDir, $targetDir);\n        }\n\n        if ($this->option('purge-db')) {\n            $this->handlePurgeDatabase($sourceDir, $targetDir);\n        }\n    }\n\n    /**\n     * handleDuplicateTheme\n     */\n    protected function handleDuplicateTheme($sourceDir, $targetDir)\n    {\n        $this->info(\"Duplicating Theme [{$sourceDir}] to [{$targetDir}]...\");\n\n        if ($this->option('child')) {\n            $result = $this->themeManager->createChildTheme($sourceDir, $targetDir);\n        }\n        else {\n            $result = $this->themeManager->duplicateTheme($sourceDir, $targetDir);\n        }\n\n        if ($result) {\n            $this->output->success(\"Theme '{$targetDir}' duplicated\");\n        }\n        else {\n            $this->output->error(\"Theme '{$targetDir}' already exists\");\n            exit(1);\n        }\n    }\n\n    /**\n     * handleImportDatabase\n     */\n    protected function handleImportDatabase($sourceDir, $targetDir = null)\n    {\n        $dirName = $targetDir ?: $sourceDir;\n\n        $this->info(\"Importing database contents from '{$sourceDir}' to '{$dirName}'\");\n\n        $this->themeManager->importDatabaseTemplates($dirName, $sourceDir);\n    }\n\n    /**\n     * handlePurgeDatabase\n     */\n    protected function handlePurgeDatabase($sourceDir, $targetDir = null)\n    {\n        if (!$this->option('import-db')) {\n            $this->error('The --purge-db flag must be used with the --import-db flag.');\n            exit(1);\n        }\n\n        $dirName = $targetDir ?: $sourceDir;\n\n        if (!$this->confirmToProceed(\"This will DESTROY database templates for theme '{$dirName}'.\")) {\n            return;\n        }\n\n        $this->info(\"Deleting database contents from '{$dirName}'\");\n\n        $this->themeManager->purgeDatabaseTemplates($dirName);\n    }\n\n    /**\n     * getDefaultConfirmCallback specifies the default confirmation callback\n     */\n    protected function getDefaultConfirmCallback()\n    {\n        return function () {\n            return true;\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/console/ThemeInstall.php",
    "content": "<?php namespace Cms\\Console;\n\nuse System;\nuse Cms\\Classes\\ThemeManager;\nuse System\\Classes\\UpdateManager;\nuse System\\Helpers\\Cache as CacheHelper;\nuse October\\Rain\\Composer\\ComposerManager;\nuse Illuminate\\Console\\Command;\nuse Exception;\n\n/**\n * Console command to install a new theme.\n *\n * This adds a new theme by requesting it from the October marketplace.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeInstall extends Command\n{\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'theme:install\n        {name : The name of the theme. Eg: AuthorName.ThemeName}\n        {--oc : Package uses the oc- prefix.}\n        {--f|from= : Provide a custom source.}\n        {--w|want= : Provide a custom version.}\n        {--no-lock : Do not lock the provided theme.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Install a theme from the October marketplace or custom source.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->line('Installing Theme...');\n\n        $name = $this->argument('name');\n\n        $this->assertCanInstallTheme();\n\n        if ($src = $this->option('from')) {\n            $this->info(\"Added Repo: {$src}\");\n            $composerCode = System::octoberToComposerCode(\n                $name,\n                'theme',\n                (bool) $this->option('oc')\n            );\n            $composerVersion = '*';\n\n            $this->addRepoFromSource($composerCode, $src);\n        }\n        else {\n            $info = UpdateManager::instance()->requestThemeDetails($name);\n            $composerCode = array_get($info, 'composer_code');\n            $composerVersion = '^'.array_get($info, 'composer_version');\n        }\n\n        // Splice in version\n        if ($requireVersion = $this->getWantOption()) {\n            $composerVersion = $requireVersion;\n        }\n\n        // Composer require\n        $this->comment(\"Executing: composer require {$composerCode} {$composerVersion}\");\n        $this->line('');\n\n        $composer = ComposerManager::instance();\n        $composer->setOutputCommand($this, $this->input);\n        $composer->require([$composerCode => $composerVersion]);\n\n        // Clear meta cache\n        CacheHelper::instance()->clearMeta();\n\n        // Lock theme\n        if (!$this->option('no-lock')) {\n            $this->performLockOnTheme();\n        }\n\n        // Check dependencies\n        passthru('\"'.PHP_BINARY.'\" artisan plugin:check');\n\n        $this->output->success(\"Theme '{$name}' installed\");\n    }\n\n    /**\n     * assertCanInstallTheme makes sure the theme isn't in use\n     */\n    protected function assertCanInstallTheme()\n    {\n        $name = strtolower($this->argument('name'));\n\n        $parts = explode('.', $name);\n        $themeFolder = $parts[1] ?? null;\n        $themePath = themes_path($themeFolder);\n\n        // Ensure a theme does not already exist\n        if ($themeFolder && file_exists($themePath)) {\n            throw new Exception(\"A theme already exists at '{$themeFolder}' please rename this folder and try again.\");\n        }\n    }\n\n    /**\n     * performLockOnTheme locks the theme and creates a child theme\n     */\n    protected function performLockOnTheme()\n    {\n        $name = strtolower($this->argument('name'));\n\n        // Legacy composer installers\n        $parts = explode('.', $name);\n        $themeFolder = $parts[1] ?? null;\n        $themePath = $themeFolder ? themes_path($themeFolder) : null;\n\n        // New composer installers\n        if (!$themePath || !file_exists($themePath)) {\n            $themeFolder = strtolower(str_replace('.', '-', $name));\n        }\n\n        if (!$themeFolder) {\n            return;\n        }\n\n        // Lock and create child theme\n        $manager = ThemeManager::instance();\n        $manager->createChildTheme((string) $themeFolder);\n        $manager->performLockOnTheme((string) $themeFolder);\n    }\n\n    /**\n     * addRepoFromSource adds a plugin to composer's repositories\n     */\n    protected function addRepoFromSource($composerCode, $src)\n    {\n        if (file_exists(base_path($src))) {\n            if (file_exists(base_path($src . '/.git'))) {\n                $srcType = 'git';\n            }\n            else {\n                $srcType = 'path';\n            }\n        }\n        else {\n            $srcType = 'git';\n        }\n\n        ComposerManager::instance()->addRepository($composerCode, $srcType, $src);\n    }\n\n    /**\n     * removeRepoFromSource removes a plugin from composer's repo\n     */\n    protected function removeRepoFromSource($composerCode)\n    {\n        ComposerManager::instance()->removeRepository($composerCode);\n    }\n\n    /**\n     * getWantOption adds the ^ character to a standard version number (1.0)\n     */\n    protected function getWantOption()\n    {\n        $want = $this->option('want');\n\n        $parts = explode('.', $want);\n        if (count($parts) === 2 && is_numeric($parts[0]) && is_numeric($parts[1])) {\n            $want = '^'.$want;\n        }\n\n        return $want;\n    }\n}\n"
  },
  {
    "path": "modules/cms/console/ThemeList.php",
    "content": "<?php namespace Cms\\Console;\n\nuse Illuminate\\Console\\Command;\nuse Cms\\Classes\\ThemeManager;\nuse Cms\\Classes\\Theme;\n\n/**\n * ThemeList lists themes.\n *\n * This lists all the available themes in the system. It also shows the active theme.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeList extends Command\n{\n    /**\n     * @var string name of console command\n     */\n    protected $name = 'theme:list';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'List available themes.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $themeManager = ThemeManager::instance();\n\n        foreach (Theme::all() as $theme) {\n            $flag = $theme->isActiveTheme() ? '[*] ' : '[-] ';\n            $themeId = $theme->getId();\n            $themeName = $themeManager->findInstalledCode($themeId) ?: $themeId;\n            $this->info($flag . $themeName);\n        }\n\n        $this->info(PHP_EOL.\"[*] Active    [-] Installed    [ ] Not installed\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/console/ThemeRemove.php",
    "content": "<?php namespace Cms\\Console;\n\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\ThemeManager;\nuse System\\Classes\\UpdateManager;\nuse System\\Helpers\\Cache as CacheHelper;\nuse Illuminate\\Console\\Command;\n\n/**\n * ThemeRemove removes a theme.\n *\n * This completely deletes an existing theme, including all files and directories.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeRemove extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'theme:remove\n        {name : The directory name of the theme.}\n        {--f|force : Force the operation to run.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Delete an existing theme.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $manager = ThemeManager::instance();\n        $name = $suppliedName = (string) $this->argument('name');\n        $themeExists = Theme::exists($name);\n\n        if (!$themeExists) {\n            $name = (string) $manager->findDirectoryName($name);\n            $themeExists = Theme::exists($name);\n        }\n\n        $this->line('Removing Theme...');\n\n        if (!$themeExists || !$name) {\n            return $this->output->error(\"Unable to find theme [{$suppliedName}]\");\n        }\n\n        if (!$this->confirmToProceed(\"This will DELETE theme [$name] from the filesystem and database.\")) {\n            return;\n        }\n\n        // Remove via composer\n        if ($composerCode = $manager->getComposerCode($name)) {\n            $this->comment(\"Executing: composer remove {$composerCode}\");\n            $this->newLine();\n            UpdateManager::instance()->uninstallTheme($name);\n        }\n        // Remove via filesystem\n        else {\n            $manager->deleteTheme($name);\n        }\n\n        // Clear meta cache\n        CacheHelper::instance()->clearMeta();\n\n        $this->output->success(\"Theme [{$name}] removed\");\n    }\n\n    /**\n     * getDefaultConfirmCallback specifies the default confirmation callback\n     */\n    protected function getDefaultConfirmCallback()\n    {\n        return function () {\n            return true;\n        };\n    }\n}\n"
  },
  {
    "path": "modules/cms/console/ThemeSeed.php",
    "content": "<?php namespace Cms\\Console;\n\nuse Cms\\Classes\\Theme;\nuse Illuminate\\Console\\Command;\nuse Cms\\Models\\ThemeSeed as ThemeSeedModel;\n\n/**\n * ThemeSeed imports blueprints and seed files from a theme\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeSeed extends Command\n{\n     /**\n     * @var string signature of console command\n     */\n    protected $signature = 'theme:seed\n        {name : The directory name of the theme.}\n        {--root : Copy blueprints to root directory.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Seed the specified theme with blueprints, translations and data.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->info('Seeding Theme...');\n\n        $themeName = $this->argument('name');\n        $theme = Theme::load($themeName);\n\n        if (!$theme->exists($themeName)) {\n            return $this->error(sprintf('The theme %s does not exist.', $themeName));\n        }\n\n        $themeSeed = new ThemeSeedModel;\n        $themeSeed->setNotesCommand($this);\n        $themeSeed->seed($theme, [\n            'useRoot' => $this->option('root', false)\n        ]);\n    }\n}\n"
  },
  {
    "path": "modules/cms/console/ThemeUse.php",
    "content": "<?php namespace Cms\\Console;\n\nuse Cms\\Classes\\Theme;\nuse Illuminate\\Console\\Command;\n\n/**\n * ThemeUse switches the active theme to another one, saved to the database.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeUse extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature of console command\n     */\n    protected $signature = 'theme:use\n        {name : The directory name of the theme.}\n        {--F|force : Force the operation to run.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Switch the active theme.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        if (!$this->confirmToProceed('Change the active theme?')) {\n            return;\n        }\n\n        $newThemeName = $this->argument('name');\n        $newTheme = Theme::load($newThemeName);\n\n        if (!$newTheme->exists($newThemeName)) {\n            return $this->error(sprintf('The theme %s does not exist.', $newThemeName));\n        }\n\n        if ($newTheme->isActiveTheme()) {\n            return $this->error(sprintf('%s is already the active theme.', $newTheme->getId()));\n        }\n\n        $from = Theme::getActiveThemeCode() ?: 'nothing';\n        $this->info(sprintf('Switching theme from %s to %s', $from, $newTheme->getId()));\n\n        Theme::setActiveTheme($newThemeName);\n    }\n}\n"
  },
  {
    "path": "modules/cms/contracts/CmsObject.php",
    "content": "<?php namespace Cms\\Contracts;\n\ninterface CmsObject\n{\n    /**\n     * Loads the template.\n     *\n     * @param  string  $hostObj\n     * @param  string  $fileName\n     * @return mixed\n     */\n    public static function load($hostObj, $fileName);\n\n    /**\n     * Loads and caches the template.\n     *\n     * @param  string  $hostObj\n     * @param  string  $fileName\n     * @return mixed\n     */\n    public static function loadCached($hostObj, $fileName);\n\n    /**\n     * Returns the local file path to the template.\n     *\n     * @param  string  $fileName\n     * @return string\n     */\n    public function getFilePath($fileName = null);\n\n    /**\n     * Returns the file name.\n     * @return string\n     */\n    public function getFileName();\n\n    /**\n     * Returns the file name without the extension.\n     * @return string\n     */\n    public function getBaseFileName();\n\n    /**\n     * Returns the file content.\n     * @return string\n     */\n    public function getContent();\n\n    /**\n     * Returns the Twig content string.\n     *\n     * @return string\n     */\n    public function getTwigContent();\n\n    /**\n     * Returns the key used by the Twig cache.\n     * @return string\n     */\n    public function getTwigCacheKey();\n}\n"
  },
  {
    "path": "modules/cms/controllers/ThemeLogs.php",
    "content": "<?php namespace Cms\\Controllers;\n\nuse Lang;\nuse Flash;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\SettingsManager;\nuse Cms\\Models\\ThemeLog;\n\n/**\n * ThemeLogs controller\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeLogs extends Controller\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n        \\Backend\\Behaviors\\ListController::class\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array Permissions required to view this page.\n     */\n    public $requiredPermissions = ['utilities.logs'];\n\n    /**\n     * Constructor.\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.Cms', 'theme_logs');\n    }\n\n    public function index_onRefresh()\n    {\n        return $this->listRefresh();\n    }\n\n    public function index_onEmptyLog()\n    {\n        ThemeLog::truncate();\n        Flash::success(Lang::get('cms::lang.theme_log.empty_success'));\n        return $this->listRefresh();\n    }\n\n    public function index_onDelete()\n    {\n        if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) {\n            foreach ($checkedIds as $recordId) {\n                if (!$record = ThemeLog::find($recordId)) {\n                    continue;\n                }\n                $record->delete();\n            }\n\n            Flash::success(Lang::get('backend::lang.list.delete_selected_success'));\n        }\n        else {\n            Flash::error(Lang::get('backend::lang.list.delete_selected_empty'));\n        }\n\n        return $this->listRefresh();\n    }\n\n    public function preview($id)\n    {\n        $this->addCss('/modules/cms/assets/css/themelogs.css');\n        $this->addJs('/modules/cms/assets/vendor/jsdiff/diff.js');\n        $this->addJs('/modules/cms/assets/js/themelogs.templatediff.js');\n\n        return $this->asExtension('FormController')->preview($id);\n    }\n}\n"
  },
  {
    "path": "modules/cms/controllers/ThemeOptions.php",
    "content": "<?php namespace Cms\\Controllers;\n\nuse Backend;\nuse BackendMenu;\nuse ApplicationException;\nuse Cms\\Models\\ThemeData;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse System\\Classes\\SettingsManager;\nuse Backend\\Classes\\Controller;\nuse Exception;\n\n/**\n * ThemeOptions customization controller\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass ThemeOptions extends Controller\n{\n    /**\n     * @var array implement extensions for this controller\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class\n    ];\n\n    /**\n     * @var array formConfig `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array requiredPermissions to view this page\n     */\n    public $requiredPermissions = ['cms.theme_customize'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        $this->pageTitle = 'Site Theme';\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.Cms', 'theme');\n    }\n\n    /**\n     * formCreateModelObject\n     */\n    public function formCreateModelObject()\n    {\n        return ThemeData::createThemeDataModel();\n    }\n\n    /**\n     * update\n     */\n    public function update($dirName = null)\n    {\n        $dirName = $this->getDirName($dirName);\n\n        try {\n            $model = $this->getThemeData($dirName);\n\n            $this->asExtension('FormController')->update($model->id);\n\n            $this->vars['hasCustomData'] = $this->hasThemeData($dirName);\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n    }\n\n    /**\n     * update_onSave\n     */\n    public function update_onSave($dirName = null)\n    {\n        $model = $this->getThemeData($this->getDirName($dirName));\n        $result = $this->asExtension('FormController')->update_onSave($model->id);\n\n        // Redirect close requests to the settings index when user doesn't have access\n        // to go back to the theme selection page\n        if (!$this->user->hasAccess('cms.themes') && input('close')) {\n            $result = Backend::redirect('system/settings');\n        }\n\n        return $result;\n    }\n\n    /**\n     * update_onResetDefault\n     */\n    public function update_onResetDefault($dirName = null)\n    {\n        $model = $this->getThemeData($this->getDirName($dirName));\n        $model->delete();\n\n        return Backend::redirect('cms/themeoptions/update/'.$dirName);\n    }\n\n    /**\n     * formExtendFieldsBefore will add form fields defined in theme.yaml\n     */\n    public function formExtendFieldsBefore($form)\n    {\n        $model = $form->model;\n        $theme = $this->findThemeObject($model->theme);\n        $form->config = $this->mergeConfig($form->config, $theme->getFormConfig());\n        $form->init();\n    }\n\n    //\n    // Helpers\n    //\n\n    /**\n     * getDirName defaults to the active theme if user doesn't have access to manage all themes\n     */\n    protected function getDirName($dirName = null)\n    {\n        // Only the active theme can be managed without this permission\n        if ($dirName && !$this->user->hasAccess('cms.themes')) {\n            $dirName = null;\n        }\n\n        if ($dirName === null) {\n            $dirName = CmsTheme::getActiveThemeCode();\n        }\n\n        return $dirName;\n    }\n\n    /**\n     * hasThemeData\n     */\n    protected function hasThemeData($dirName)\n    {\n        return $this->findThemeObject($dirName)->hasCustomData();\n    }\n\n    /**\n     * getThemeData\n     */\n    protected function getThemeData($dirName)\n    {\n        $theme = $this->findThemeObject($dirName);\n\n        return ThemeData::forTheme($theme);\n    }\n\n    /**\n     * findThemeObject\n     */\n    protected function findThemeObject($name = null)\n    {\n        if ($name === null) {\n            $name = post('theme');\n        }\n\n        if (!$name || (!$theme = CmsTheme::load($name))) {\n            throw new ApplicationException(__(\"The theme ':name' is not found.\", ['name' => $name]));\n        }\n\n        return $theme;\n    }\n}\n"
  },
  {
    "path": "modules/cms/controllers/Themes.php",
    "content": "<?php namespace Cms\\Controllers;\n\nuse File;\nuse Lang;\nuse Flash;\nuse System;\nuse Backend;\nuse Redirect;\nuse BackendMenu;\nuse BackendAuth;\nuse ValidationException;\nuse ApplicationException;\nuse Cms\\Models\\ThemeSeed;\nuse Cms\\Models\\ThemeExport;\nuse Cms\\Models\\ThemeImport;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse Cms\\Classes\\ThemeManager;\nuse System\\Classes\\SettingsManager;\nuse Backend\\Classes\\Controller;\nuse ForbiddenException;\nuse Exception;\n\n/**\n * Themes selector controller\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass Themes extends Controller\n{\n    /**\n     * @var array requiredPermissions to view this page\n     */\n    public $requiredPermissions = ['cms.themes', 'cms.theme_customize'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        $this->addCss('/modules/cms/assets/css/themes.css');\n\n        $this->pageTitle = 'Site Theme';\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.Cms', 'theme');\n\n        // Enable AJAX for Form widgets\n        if (post('mode') === 'import') {\n            $this->makeImportFormWidget($this->findThemeObject())->bindToController();\n        }\n    }\n\n    /**\n     * beforeDisplay\n     */\n    public function beforeDisplay()\n    {\n        // Custom redirect for unauthorized request\n        if (!$this->user->hasAccess('cms.themes')) {\n            return Backend::redirect('cms/themeoptions/update');\n        }\n    }\n\n    /**\n     * index\n     */\n    public function index()\n    {\n        $this->bodyClass = 'compact-container';\n\n        $this->vars['themes'] = CmsTheme::allAvailable();\n    }\n\n    /**\n     * index_onSetActiveTheme\n     */\n    public function index_onSetActiveTheme()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.activate')) {\n            throw new ForbiddenException;\n        }\n\n        $themeCode = post('theme');\n\n        // For the frontend\n        CmsTheme::setActiveTheme($themeCode);\n\n        // For the backend\n        CmsTheme::setEditTheme($themeCode);\n\n        return [\n            '#theme-list' => $this->makePartial('theme_list')\n        ];\n    }\n\n    /**\n     * index_onDelete\n     */\n    public function index_onDelete()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.delete')) {\n            throw new ForbiddenException;\n        }\n\n        ThemeManager::instance()->deleteTheme(post('theme'));\n\n        Flash::success(__('Theme deleted!'));\n        return Redirect::refresh();\n    }\n\n    //\n    // Theme properties\n    //\n\n    /**\n     * index_onLoadFieldsForm\n     */\n    public function index_onLoadFieldsForm()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        $theme = $this->findThemeObject();\n        $this->vars['widget'] = $this->makeFieldsFormWidget($theme);\n        $this->vars['themeDir'] = $theme->getDirName();\n\n        return $this->makePartial('theme_fields_form');\n    }\n\n    /**\n     * index_onSaveFields\n     */\n    public function index_onSaveFields()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        $theme = $this->findThemeObject();\n        $widget = $this->makeFieldsFormWidget($theme);\n        $theme->writeConfig($widget->getSaveData());\n\n        return ['#themeListItem-'.$theme->getId() => $this->makePartial('theme_list_item', ['theme' => $theme])];\n    }\n\n    /**\n     * makeFieldsFormWidget\n     */\n    protected function makeFieldsFormWidget($theme)\n    {\n        $widgetConfig = $this->makeConfig('~/modules/cms/classes/theme/fields.yaml');\n        $widgetConfig->alias = 'form'.studly_case($theme->getDirName());\n        $widgetConfig->model = $theme;\n        $widgetConfig->data = $theme->getConfig();\n        $widgetConfig->data['dir_name'] = $theme->getDirName();\n        $widgetConfig->arrayName = 'Theme';\n        $widgetConfig->context = 'update';\n\n        return $this->makeWidget(\\Backend\\Widgets\\Form::class, $widgetConfig);\n    }\n\n    //\n    // Create theme\n    //\n\n    /**\n     * index_onLoadCreateForm\n     */\n    public function index_onLoadCreateForm()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        $this->vars['widget'] = $this->makeCreateFormWidget();\n        return $this->makePartial('theme_create_form');\n    }\n\n    /**\n     * index_onCreate\n     */\n    public function index_onCreate()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        $widget = $this->makeCreateFormWidget();\n        $data = $widget->getSaveData();\n        $newDirName = trim($data['dir_name'] ?? '');\n        $destinationPath = themes_path().'/'.$newDirName;\n\n        $data = array_except($data, 'dir_name');\n\n        if (!strlen(trim($data['name'] ?? ''))) {\n            throw new ValidationException(['name' => __('Please specify a name for the theme.')]);\n        }\n\n        if (!preg_match('/^[a-z0-9\\_\\-]+$/i', $newDirName)) {\n            throw new ValidationException(['dir_name' => __('Name can contain only digits, Latin letters and the following symbols: _-')]);\n        }\n\n        if (File::isDirectory($destinationPath)) {\n            throw new ValidationException(['dir_name' => __('Desired theme directory already exists.')]);\n        }\n\n        File::makeDirectory($destinationPath);\n        File::makeDirectory($destinationPath.'/assets');\n        File::makeDirectory($destinationPath.'/content');\n        File::makeDirectory($destinationPath.'/layouts');\n        File::makeDirectory($destinationPath.'/pages');\n        File::makeDirectory($destinationPath.'/partials');\n        File::put($destinationPath.'/theme.yaml', '');\n\n        $theme = CmsTheme::load($newDirName);\n        $theme->writeConfig($data);\n\n        Flash::success(__('Theme Created!'));\n        return Redirect::refresh();\n    }\n\n    /**\n     * makeCreateFormWidget\n     */\n    protected function makeCreateFormWidget()\n    {\n        $widgetConfig = $this->makeConfig('~/modules/cms/classes/theme/fields.yaml');\n        $widgetConfig->alias = 'formCreateTheme';\n        $widgetConfig->model = new CmsTheme;\n        $widgetConfig->arrayName = 'Theme';\n        $widgetConfig->context = 'create';\n\n        return $this->makeWidget(\\Backend\\Widgets\\Form::class, $widgetConfig);\n    }\n\n    //\n    // Duplicate\n    //\n\n    /**\n     * index_onLoadDuplicateForm\n     */\n    public function index_onLoadDuplicateForm()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        $theme = $this->findThemeObject();\n        $this->vars['themeDir'] = $theme->getDirName();\n\n        return $this->makePartial('theme_duplicate_form');\n    }\n\n    /**\n     * index_onDuplicateTheme\n     */\n    public function index_onDuplicateTheme()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        $theme = $this->findThemeObject();\n        $newDirName = trim(post('new_dir_name'));\n\n        if (!preg_match('/^[a-z0-9\\_\\-]+$/i', $newDirName)) {\n            throw new ValidationException(['new_dir_name' => __('Name can contain only digits, Latin letters and the following symbols: _-')]);\n        }\n\n        if (!ThemeManager::instance()->duplicateTheme($theme->getDirName(), $newDirName)) {\n            throw new ValidationException(['new_dir_name' => __('Desired theme directory already exists.')]);\n        }\n\n        Flash::success(__('Theme Duplicated!'));\n\n        return Redirect::refresh();\n    }\n\n    //\n    // Theme export\n    //\n\n    /**\n     * index_onLoadExportForm\n     */\n    public function index_onLoadExportForm()\n    {\n        $theme = $this->findThemeObject();\n        $this->vars['widget'] = $this->makeExportFormWidget($theme);\n        $this->vars['themeDir'] = $theme->getDirName();\n\n        return $this->makePartial('theme_export_form');\n    }\n\n    /**\n     * index_onExport\n     */\n    public function index_onExport()\n    {\n        $theme = $this->findThemeObject();\n        $widget = $this->makeExportFormWidget($theme);\n\n        $model = new ThemeExport;\n        $file = $model->export($theme, $widget->getSaveData());\n\n        return Backend::redirect('cms/themes/download/'.$file.'/'.$theme->getDirName().'.zip');\n    }\n\n    /**\n     * download\n     */\n    public function download($name, $outputName = null)\n    {\n        try {\n            $this->pageTitle = 'Download theme export archive';\n            return ThemeExport::download($name, $outputName);\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n    }\n\n    /**\n     * makeExportFormWidget\n     */\n    protected function makeExportFormWidget($theme)\n    {\n        $widgetConfig = $this->makeConfig('~/modules/cms/models/themeexport/fields.yaml');\n        $widgetConfig->alias = 'form'.studly_case($theme->getDirName());\n        $widgetConfig->model = new ThemeExport;\n        $widgetConfig->model->theme = $theme;\n        $widgetConfig->arrayName = 'ThemeExport';\n\n        return $this->makeWidget(\\Backend\\Widgets\\Form::class, $widgetConfig);\n    }\n\n    //\n    // Theme import\n    //\n\n    /**\n     * index_onLoadImportForm\n     */\n    public function index_onLoadImportForm()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        if (System::checkSafeMode()) {\n            throw new ApplicationException(Lang::get('cms::lang.cms_object.safe_mode_enabled'));\n        }\n\n        $theme = $this->findThemeObject();\n        $this->vars['widget'] = $this->makeImportFormWidget($theme);\n        $this->vars['themeDir'] = $theme->getDirName();\n\n        return $this->makePartial('theme_import_form');\n    }\n\n    /**\n     * index_onImport\n     */\n    public function index_onImport()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        if (System::checkSafeMode()) {\n            throw new ApplicationException(Lang::get('cms::lang.cms_object.safe_mode_enabled'));\n        }\n\n        $theme = $this->findThemeObject();\n        $widget = $this->makeImportFormWidget($theme);\n\n        $model = new ThemeImport;\n        $model->import($theme, $widget->getSaveData(), $widget->getSessionKey());\n\n        Flash::success(__('Theme Imported!'));\n        return Redirect::refresh();\n    }\n\n    /**\n     * makeImportFormWidget\n     */\n    protected function makeImportFormWidget($theme)\n    {\n        $widgetConfig = $this->makeConfig('~/modules/cms/models/themeimport/fields.yaml');\n        $widgetConfig->alias = 'form'.studly_case($theme->getDirName());\n        $widgetConfig->model = new ThemeImport;\n        $widgetConfig->model->theme = $theme;\n        $widgetConfig->arrayName = 'ThemeImport';\n\n        return $this->makeWidget(\\Backend\\Widgets\\Form::class, $widgetConfig);\n    }\n\n    //\n    // Theme seed\n    //\n\n    /**\n     * index_onLoadSeedForm\n     */\n    public function index_onLoadSeedForm()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        if (System::checkSafeMode()) {\n            throw new ApplicationException(Lang::get('cms::lang.cms_object.safe_mode_enabled'));\n        }\n\n        $theme = $this->findThemeObject();\n        $this->vars['widget'] = $this->makeSeedFormWidget($theme);\n        $this->vars['themeDir'] = $theme->getDirName();\n\n        return $this->makePartial('theme_seed_form');\n    }\n\n    /**\n     * index_onSeed\n     */\n    public function index_onSeed()\n    {\n        if (!BackendAuth::userHasAccess('cms.themes.create')) {\n            throw new ForbiddenException;\n        }\n\n        if (System::checkSafeMode()) {\n            throw new ApplicationException(Lang::get('cms::lang.cms_object.safe_mode_enabled'));\n        }\n\n        $theme = $this->findThemeObject();\n        $widget = $this->makeSeedFormWidget($theme);\n\n        $model = new ThemeSeed;\n        $model->seed($theme, $widget->getSaveData());\n\n        Flash::success(__('Theme Seeded!'));\n        return Redirect::refresh();\n    }\n\n\n    /**\n     * makeSeedFormWidget\n     */\n    protected function makeSeedFormWidget($theme)\n    {\n        $widgetConfig = $this->makeConfig('~/modules/cms/models/themeseed/fields.yaml');\n        $widgetConfig->alias = 'form'.studly_case($theme->getDirName());\n        $widgetConfig->model = new ThemeSeed;\n        $widgetConfig->model->theme = $theme;\n        $widgetConfig->arrayName = 'ThemeSeed';\n\n        return $this->makeWidget(\\Backend\\Widgets\\Form::class, $widgetConfig);\n    }\n\n    //\n    // Util\n    //\n\n    /**\n     * findThemeObject\n     */\n    protected function findThemeObject($name = null)\n    {\n        if ($name === null) {\n            $name = post('theme');\n        }\n\n        if (!$name || (!$theme = CmsTheme::load($name))) {\n            throw new ApplicationException(__(\"The theme ':name' is not found.\", ['name' => $name]));\n        }\n\n        return $theme;\n    }\n}\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/_field_content.php",
    "content": "<div class=\"form-control\">\n    <pre><?= e($value.PHP_EOL) ?></pre>\n</div>\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/_field_diff_content.php",
    "content": "<div class=\"form-control\">\n    <pre\n        data-control=\"template-diff\"\n        data-old-field-name=\"old_content\"\n        data-new-field-name=\"content\"\n        data-content-tag=\"pre\"></pre>\n</div>\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/_field_diff_template.php",
    "content": "<div\n    class=\"form-control\"\n    data-control=\"template-diff\"\n    data-old-field-name=\"old_template\"\n    data-diff-type=\"words\"\n    data-new-field-name=\"template\">\n</div>\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/_field_template.php",
    "content": "<div class=\"form-control\"><?= e($value) ?></div>\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/_hint.php",
    "content": "\n<p>\n    <?= e(trans('cms::lang.theme_log.hint')) ?>\n</p>"
  },
  {
    "path": "modules/cms/controllers/themelogs/_hint_preview.php",
    "content": "<?php if ($formModel->type == $formModel::TYPE_DELETE): ?>\n    <div class=\"callout fade show callout-danger no-subheader m-b\">\n        <div class=\"header\">\n            <i class=\"icon-minus\"></i>\n            <h3><?= e(trans('cms::lang.theme_log.template_deleted')) ?></h3>\n        </div>\n    </div>\n<?php elseif ($formModel->type == $formModel::TYPE_CREATE): ?>\n    <div class=\"callout fade show callout-success no-subheader m-b\">\n        <div class=\"header\">\n            <i class=\"icon-plus\"></i>\n            <h3><?= e(trans('cms::lang.theme_log.template_created')) ?></h3>\n        </div>\n    </div>\n<?php else: ?>\n    <div class=\"callout fade show callout-info no-subheader\">\n        <div class=\"header\">\n            <i class=\"icon-pencil\"></i>\n            <h3><?= e(trans('cms::lang.theme_log.template_updated')) ?></h3>\n        </div>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::ajaxButton(\n        label: __(\"Refresh\"),\n        handler: 'onRefresh',\n        icon: 'oc-icon-refresh',\n        primary: true,\n        dataRequestMessage: __(\"Updating...\")\n    ) ?>\n    <?= Ui::ajaxButton(\n        label: __(\"Empty Theme Log\"),\n        handler: 'onEmptyLog',\n        icon: 'oc-icon-eraser',\n        secondary: true,\n        dataRequestConfirm: __(\"Are you sure?\"),\n        dataRequestMessage: __(\"Emptying log...\")\n    ) ?>\n\n    <div class=\"toolbar-divider\"></div>\n\n    <?= Ui::ajaxButton(\n        label: __(\"Delete Selected\"),\n        handler: 'onDelete',\n        icon: 'oc-icon-trash',\n        secondary: true,\n        dataListCheckedTrigger: true,\n        dataListCheckedRequest: true,\n        dataStripeLoadIndicator: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/_preview_scoreboard.php",
    "content": "<div class=\"scoreboard-item title-value\">\n    <h4><?= e(trans('cms::lang.theme_log.id_label')) ?></h4>\n    <p>#<?= e($formModel->id) ?></p>\n</div>\n<?php if ($formModel->user): ?>\n    <div class=\"scoreboard-item title-value\">\n        <h4><?= e(trans('cms::lang.theme_log.user')) ?></h4>\n        <p><?= e($formModel->user->full_name) ?></p>\n    </div>\n<?php endif ?>\n<div class=\"scoreboard-item title-value\">\n    <h4><?= e(trans('cms::lang.theme_log.created_at')) ?></h4>\n    <p><?= e($formModel->created_at->toDayDateTimeString()) ?></p>\n</div>\n<div class=\"scoreboard-item title-value\">\n    <h4><?= e(trans('cms::lang.theme_log.theme_name')) ?></h4>\n    <p><?= e($formModel->theme_name) ?></p>\n</div>\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/config_filter.yaml",
    "content": "# ===================================\n# Filter Scope Definitions\n# ===================================\n\nscopes:\n\n    created_at:\n        label: Date & Time\n        type: daterange\n        conditions: created_at >= ':after' AND created_at <= ':before'\n\n    user:\n        label: Login\n        modelClass: Backend\\Models\\User\n        conditions: user_id in (:filtered)\n        nameFrom: login\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\n# Record name\nname: \"Event Log\"\n\n# Model Form Field configuration\nform: ~/modules/cms/models/themelog/fields.yaml\n\n# Model Class name\nmodelClass: Cms\\Models\\ThemeLog\n\n# Default redirect location\ndefaultRedirect: cms/themelogs\n\n# Preview page\npreview:\n    title: cms::lang.theme_log.preview_title"
  },
  {
    "path": "modules/cms/controllers/themelogs/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: cms::lang.theme_log.menu_label\nlist: ~/modules/cms/models/themelog/columns.yaml\nmodelClass: Cms\\Models\\ThemeLog\nrecordUrl: cms/themelogs/preview/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 30\nshowSetup: true\nshowCheckboxes: true\ndefaultSort:\n    column: count\n    direction: desc\n\ntoolbar:\n    buttons: list_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n\nfilter: config_filter.yaml\n"
  },
  {
    "path": "modules/cms/controllers/themelogs/index.php",
    "content": "<div class=\"padded-container container-flush\">\n    <?= $this->makeHintPartial('system_requestlogs_hint', 'hint') ?>\n</div>\n\n<?= $this->listRender() ?>"
  },
  {
    "path": "modules/cms/controllers/themelogs/preview.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('cms/themelogs') ?>\"><?= e(trans('cms::lang.theme_log.menu_label')) ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <div class=\"scoreboard\">\n        <div data-control=\"toolbar\">\n            <?= $this->makePartial('preview_scoreboard') ?>\n        </div>\n    </div>\n\n    <div>\n        <?= $this->makePartial('hint_preview') ?>\n    </div>\n\n    <div class=\"layout-item stretch layout-column\">\n        <?= $this->formRenderPreview() ?>\n    </div>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n\n<?php endif ?>\n\n<p>\n    <a href=\"<?= Backend::url('cms/themelogs') ?>\" class=\"btn btn-default oc-icon-chevron-left\">\n        <?= e(trans('cms::lang.theme_log.return_link')) ?>\n    </a>\n</p>\n"
  },
  {
    "path": "modules/cms/controllers/themeoptions/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\n# Record name\nname: Theme\n\n# Fields are defined by extension\nform: []\n\n# Model Class name\nmodelClass: Cms\\Models\\ThemeData\n\n# Default redirect location\ndefaultRedirect: cms/themes\n\n# Update page\nupdate:\n    title: Customize Theme\n    redirect: cms/themes\n    redirectClose: cms/themes\n"
  },
  {
    "path": "modules/cms/controllers/themeoptions/update.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('cms/themes') ?>\"><?= __('Themes') ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?php if ($hasCustomData): ?>\n        <?= Form::open(['class'=>'layout']) ?>\n\n            <div class=\"layout-row\">\n                <?= $this->formRender() ?>\n            </div>\n\n            <div class=\"form-buttons\">\n                <div data-control=\"loader-container\" class=\"control-loader-container\">\n                    <?= Ui::ajaxButton(\n                        label: __(\"Save\"),\n                        handler: 'onSave',\n                        primary: true,\n                        hotkey: ['ctrl+s', 'cmd+s'],\n                        dataRequestData: \"redirect: false\",\n                        dataRequestMessage: __(\"Saving Theme...\")\n                    ) ?>\n                    <?= Ui::ajaxButton(\n                        label: __(\"Save & Close\"),\n                        handler: 'onSave',\n                        secondary: true,\n                        hotkey: ['ctrl+enter', 'cmd+enter'],\n                        dataBrowserRedirectBack: true,\n                        dataRequestData: \"close: true\",\n                        dataRequestMessage: __(\"Saving Theme...\")\n                    ) ?>\n\n                    <span class=\"btn-text\">\n                        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                        <?= Ui::ajaxButton(\n                            label: __(\"Cancel\"),\n                            handler: 'onCancel',\n                            hotkey: ['shift+option+c'],\n                            href: 'javascript:;',\n                            class: 'btn-link p-0',\n                            dataBrowserRedirectBack: true,\n                            dataRequestData: \"close: true\",\n                            dataRequestMessage: __(\"Loading...\")\n                        ) ?>\n                    </span>\n\n                    <?= Ui::ajaxButton(\n                        label: __(\"Reset to Default\"),\n                        handler: 'onResetDefault',\n                        class: 'btn-danger pull-right',\n                        dataRequestConfirm: __(\"Are you sure?\"),\n                        dataRequestMessage: __(\"Resetting...\")\n                    ) ?>\n                </div>\n            </div>\n\n        <?= Form::close() ?>\n\n    <?php else: ?>\n        <div class=\"callout callout-info no-title\">\n            <div class=\"content\">\n                <p>There are no theme options available to customize.</p>\n            </div>\n        </div>\n    <?php endif ?>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e($this->fatalError) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Themes List\"),\n            href: Backend::url('cms/themes'),\n            secondary: true\n        ) ?>\n    </p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/cms/controllers/themes/_theme_create_form.php",
    "content": "<?= Form::ajax('onCreate', [\n    'id' => 'themeCreateForm',\n    'data-popup-load-indicator' => true\n]) ?>\n\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __('Create Theme') ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n\n    <?php if (!$this->fatalError): ?>\n\n        <div class=\"modal-body\">\n            <?= $widget->render() ?>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::ajaxButton(\n                label: __(\"Create\"),\n                handler: 'onCreate',\n                primary: true,\n                dataPopupLoadIndicator: true\n            ) ?>\n\n            <?= Ui::button(\n                label: __(\"Cancel\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php else: ?>\n\n        <div class=\"modal-body\">\n            <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::button(\n                label: __(\"Close\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php endif ?>\n\n    <script>\n        setTimeout(\n            function(){ $('#themeCreateForm input.form-control:first').focus() },\n            310\n        )\n    </script>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/cms/controllers/themes/_theme_duplicate_form.php",
    "content": "<?= Form::ajax('onDuplicateTheme', [\n    'id' => 'themeDuplicateForm',\n    'data-popup-load-indicator' => true,\n]) ?>\n\n    <input type=\"hidden\" name=\"theme\" value=\"<?= $themeDir ?>\" />\n\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __('Duplicate Theme') ?>: <?= $themeDir ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n\n    <?php if (!$this->fatalError): ?>\n\n        <div class=\"modal-body\">\n\n            <div class=\"form-group text-field span-full\">\n                <label class=\"form-label\" for=\"Form-ThemeDuplicate-newDirName\">\n                    <?= __('Theme directory') ?>\n                </label>\n                <input\n                    type=\"text\"\n                    name=\"new_dir_name\"\n                    id=\"Form-ThemeDuplicate-newDirName\"\n                    value=\"<?= $themeDir ?>\"\n                    placeholder=\"\"\n                    class=\"form-control\"\n                    autocomplete=\"off\"\n                    maxlength=\"255\" />\n\n                <p class=\"form-text\">\n                    <?= __('Provide a new directory name for the duplicated theme.') ?>\n                </p>\n            </div>\n\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::ajaxButton(\n                label: __(\"Duplicate\"),\n                handler: 'onDuplicateTheme',\n                class: 'btn-success',\n                dataPopupLoadIndicator: true\n            ) ?>\n\n            <?= Ui::button(\n                label: __(\"Cancel\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php else: ?>\n\n        <div class=\"modal-body\">\n            <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::button(\n                label: __(\"Close\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php endif ?>\n\n    <script>\n        setTimeout(\n            function(){ $('#themeDuplicateForm input.form-control:first').focus() },\n            310\n        )\n    </script>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/cms/controllers/themes/_theme_export_form.php",
    "content": "<?= Form::ajax('onExport', [\n    'id' => 'themeExportForm',\n    'data-popup-load-indicator' => true,\n    'data-request-success' => 'closeExportThemePopup()'\n]) ?>\n\n    <input type=\"hidden\" name=\"theme\" value=\"<?= $themeDir ?>\" />\n\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __('Export Theme') ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n\n    <?php if (!$this->fatalError): ?>\n\n        <div class=\"modal-body\">\n            <?= $widget->render() ?>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::ajaxButton(\n                label: __(\"Export\"),\n                handler: 'onExport',\n                class: 'btn-success',\n                dataPopupLoadIndicator: true\n            ) ?>\n\n            <?= Ui::button(\n                label: __(\"Cancel\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php else: ?>\n\n        <div class=\"modal-body\">\n            <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::button(\n                label: __(\"Close\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php endif ?>\n\n    <script>\n        setTimeout(\n            function(){ $('#themeExportForm input.form-control:first').focus() },\n            310\n        )\n\n        function closeExportThemePopup() {\n            $('#themeExportForm')\n                .closest('.control-popup')\n                .popup('hideLoading')\n        }\n    </script>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/cms/controllers/themes/_theme_fields_form.php",
    "content": "<?= Form::ajax('onSaveFields', [\n    'id' => 'themeFieldsForm',\n    'data-popup-load-indicator' => true\n]) ?>\n\n    <input type=\"hidden\" name=\"theme\" value=\"<?= $themeDir ?>\" />\n\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __('Theme') ?>: <?= $themeDir ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n\n    <?php if (!$this->fatalError): ?>\n\n        <div class=\"modal-body\">\n            <?= $widget->render() ?>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::ajaxButton(\n                label: __(\"Save Properties\"),\n                handler: 'onSaveFields',\n                primary: true,\n                dataPopupLoadIndicator: true\n            ) ?>\n\n            <?= Ui::button(\n                label: __(\"Cancel\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php else: ?>\n\n        <div class=\"modal-body\">\n            <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::button(\n                label: __(\"Close\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php endif ?>\n\n    <script>\n        setTimeout(\n            function(){ $('#themeFieldsForm input.form-control:first').focus() },\n            310\n        )\n    </script>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/cms/controllers/themes/_theme_import_form.php",
    "content": "<?= Form::ajax('onImport', [\n    'id' => 'themeImportForm',\n    'data-popup-load-indicator' => true,\n]) ?>\n\n    <input type=\"hidden\" name=\"theme\" value=\"<?= $themeDir ?>\" />\n    <input type=\"hidden\" name=\"mode\" value=\"import\" />\n\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __('Import Theme') ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n\n    <?php if (!$this->fatalError): ?>\n\n        <div class=\"modal-body\">\n            <?= $widget->render() ?>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::ajaxButton(\n                label: __(\"Import\"),\n                handler: 'onImport',\n                class: 'btn-success',\n                dataPopupLoadIndicator: true\n            ) ?>\n\n            <?= Ui::button(\n                label: __(\"Cancel\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php else: ?>\n\n        <div class=\"modal-body\">\n            <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::button(\n                label: __(\"Close\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php endif ?>\n\n    <script>\n        setTimeout(\n            function(){ $('#themeImportForm input.form-control:first').focus() },\n            310\n        )\n    </script>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/cms/controllers/themes/_theme_list.php",
    "content": "<?php foreach ($themes as $index => $theme): ?>\n\n    <div id=\"themeListItem-<?= $theme->getId() ?>\" class=\"d-flex theme-item <?= $theme->isActiveTheme() ? 'active' : null ?>\">\n        <?= $this->makePartial('theme_list_item', ['theme' => $theme]) ?>\n    </div>\n\n<?php endforeach ?>\n\n<?php if (BackendAuth::userHasAccess('cms.themes.create')): ?>\n    <div class=\"d-flex theme-item theme-item-links\">\n        <div class=\"theme-thumbnail\">\n            <!-- Spacer -->\n        </div>\n        <div class=\"theme-description\">\n            <a\n                class=\"create-new-theme\"\n                data-control=\"popup\"\n                data-handler=\"onLoadCreateForm\"\n                data-size=\"huge\"\n                href=\"javascript:;\">\n                <?= __('Create a New Blank Theme') ?>\n            </a>\n            <a\n                class=\"find-more-themes\"\n                href=\"<?= Backend::url('system/market/index/themes') ?>\">\n                <?= __('Find More Themes') ?>\n            </a>\n        </div>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/cms/controllers/themes/_theme_list_item.php",
    "content": "<?php\n    $author = $theme->getConfigValue('author');\n?>\n\n<div class=\"theme-thumbnail\">\n    <div class=\"thumbnail-container\"><img src=\"<?= $theme->getPreviewImageUrl() ?>\" alt=\"\" /></div>\n</div>\n<div class=\"theme-description\">\n    <h3><?= e($theme->getConfigValue('name', $theme->getDirName())) ?></h3>\n    <?php if ($author): ?>\n        <p class=\"author\"><?= __('By :name', ['name' => e($author)]) ?></p>\n    <?php endif ?>\n    <p class=\"description\">\n        <?= e($theme->getConfigValue('description', 'The theme description is not provided.')) ?>\n    </p>\n    <div class=\"controls\">\n\n        <?php if ($theme->isActiveTheme()): ?>\n            <?= Ui::button(\n                label: __(\"Activate\"),\n                icon: 'icon-star',\n                secondary: true,\n                disabled: true\n            ) ?>\n        <?php elseif (BackendAuth::userHasAccess('cms.themes.activate')): ?>\n            <?= Ui::ajaxButton(\n                label: __(\"Activate\"),\n                handler: 'onSetActiveTheme',\n                icon: 'icon-check',\n                primary: true,\n                dataRequestData: \"theme: '\".e($theme->getDirName()).\"'\",\n                dataStripeLoadIndicator: true\n            ) ?>\n        <?php endif ?>\n        <?php if (BackendAuth::userHasAccess('cms.theme_customize') && $theme->hasCustomData()): ?>\n            <?= Ui::button(\n                label: __(\"Customize\"),\n                href: Backend::url('cms/themeoptions/update/'.$theme->getDirName()),\n                icon: 'icon-paint-brush',\n                secondary: true\n            ) ?>\n        <?php endif ?>\n\n        <?php Ui::dropdownButton(\n            label: __(\"Manage\"),\n            icon: 'icon-wrench',\n            secondary: true\n        )->slot() ?>\n\n            <?php if (BackendAuth::userHasAccess('cms.themes.create')): ?>\n                <?= Ui::dropdownItem(\n                    label: __(\"Edit Properties\"),\n                    icon: 'icon-pencil',\n                    dataControl: 'popup',\n                    dataSize: 'huge',\n                    dataHandler: 'onLoadFieldsForm',\n                    dataRequestData: \"theme: '\".e($theme->getDirName()).\"'\"\n                ) ?>\n\n                <?php if ($theme->hasSeedContent()): ?>\n                    <?= Ui::dropdownItem(\n                        label: __(\"Seed Content\"),\n                        icon: 'icon-rocket',\n                        dataControl: 'popup',\n                        dataHandler: 'onLoadSeedForm',\n                        dataRequestData: \"theme: '\".e($theme->getDirName()).\"'\"\n                    ) ?>\n                <?php endif ?>\n\n                <?= Ui::dropdownItem(\n                    label: __(\"Duplicate\"),\n                    icon: 'icon-copy',\n                    dataControl: 'popup',\n                    dataHandler: 'onLoadDuplicateForm',\n                    dataRequestData: \"theme: '\".e($theme->getDirName()).\"'\"\n                ) ?>\n\n                <?= Ui::dropdownItem(\n                    label: __(\"Import\"),\n                    icon: 'icon-upload',\n                    dataControl: 'popup',\n                    dataHandler: 'onLoadImportForm',\n                    dataRequestData: \"theme: '\".e($theme->getDirName()).\"'\"\n                ) ?>\n            <?php endif ?>\n\n            <?= Ui::dropdownItem(\n                label: __(\"Export\"),\n                icon: 'icon-download',\n                dataControl: 'popup',\n                dataHandler: 'onLoadExportForm',\n                dataRequestData: \"theme: '\".e($theme->getDirName()).\"'\"\n            ) ?>\n\n            <?php if (!$theme->isActiveTheme() && BackendAuth::userHasAccess('cms.themes.delete')): ?>\n                <?= Ui::dropdownDivider() ?>\n\n                <?= Ui::dropdownItem(\n                    label: __(\"Delete\"),\n                    icon: 'icon-delete',\n                    handler: 'onDelete',\n                    dataRequestConfirm: __(\"Delete this theme? It cannot be undone!\"),\n                    dataRequestData: \"theme: '\".e($theme->getDirName()).\"'\"\n                ) ?>\n            <?php endif ?>\n\n        <?php Ui::end() ?>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/cms/controllers/themes/_theme_seed_form.php",
    "content": "<?= Form::ajax('onSeed', [\n    'id' => 'themeSeedForm',\n    'data-popup-load-indicator' => true,\n]) ?>\n\n    <input type=\"hidden\" name=\"theme\" value=\"<?= $themeDir ?>\" />\n    <input type=\"hidden\" name=\"mode\" value=\"import\" />\n\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __('Seed Theme') ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n\n    <?php if (!$this->fatalError): ?>\n\n        <div class=\"modal-body\">\n            <?= $widget->render() ?>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::ajaxButton(\n                label: __(\"Seed Theme\"),\n                handler: 'onSeed',\n                class: 'btn-success',\n                dataPopupLoadIndicator: true\n            ) ?>\n\n            <?= Ui::button(\n                label: __(\"Cancel\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php else: ?>\n\n        <div class=\"modal-body\">\n            <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::button(\n                label: __(\"Close\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php endif ?>\n\n    <script>\n        setTimeout(\n            function(){ $('#themeSeedForm input.form-control:first').focus() },\n            310\n        )\n    </script>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/cms/controllers/themes/download.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('cms/themes') ?>\"><?= __('Themes') ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if ($this->fatalError): ?>\n\n    <p class=\"flash-message static error\"><?= e($this->fatalError) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Themes List\"),\n            href: Backend::url('cms/themes'),\n            secondary: true\n        ) ?>\n    </p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/cms/controllers/themes/index.php",
    "content": "<?= Block::put('body') ?>\n    <div class=\"layout\">\n        <div class=\"layout-row\">\n            <?= Form::open(['onsubmit'=>'return false']) ?>\n            <div class=\"layout theme-selector-layout\" id=\"theme-list\">\n                <?= $this->makePartial('theme_list') ?>\n            </div>\n            <?= Form::close() ?>\n        </div>\n    </div>\n<?= Block::endPut() ?>"
  },
  {
    "path": "modules/cms/database/migrations/2014_10_01_000001_Db_Cms_Theme_Data.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('cms_theme_data', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('theme')->nullable()->index();\n            $table->mediumText('data')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('cms_theme_data');\n    }\n};\n"
  },
  {
    "path": "modules/cms/database/migrations/2017_10_01_000003_Db_Cms_Theme_Logs.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('cms_theme_logs', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('type', 20)->index();\n            $table->string('theme')->nullable()->index();\n            $table->string('template')->nullable();\n            $table->string('old_template')->nullable();\n            $table->longText('content')->nullable();\n            $table->longText('old_content')->nullable();\n            $table->integer('user_id')->index()->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('cms_theme_logs');\n    }\n};\n"
  },
  {
    "path": "modules/cms/database/migrations/2018_11_01_000001_Db_Cms_Theme_Templates.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('cms_theme_templates', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('source')->index();\n            $table->string('path')->index();\n            $table->longText('content');\n            $table->integer('file_size')->unsigned();\n            $table->dateTime('updated_at')->nullable();\n            $table->dateTime('deleted_at')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('cms_theme_templates');\n    }\n};\n"
  },
  {
    "path": "modules/cms/facades/Cms.php",
    "content": "<?php namespace Cms\\Facades;\n\nuse October\\Rain\\Support\\Facade;\n\n/**\n * Cms facade\n *\n * @method static string url(string $path = null)\n * @method static string pageUrl(string $name, array $parameters = [])\n * @method static string fullUrl(string $path = null)\n * @method static string entryUrl(string $componentName, array $parameters = [])\n * @method static string pageNotFound()\n * @method static string pageError()\n * @method static string flashFromPost($message, $key = 'flash')\n * @method static bool urlHasException(string $url, string $type)\n * @method static \\Illuminate\\Http\\RedirectResponse|null redirectFromPost($key = 'redirect')\n * @method static \\Illuminate\\Http\\RedirectResponse|null redirectIntendedFromPost($key = 'redirect')\n * @method static \\Illuminate\\Http\\RedirectResponse redirect(string $to, array $parameters = [], int $status = 302)\n * @method static \\Carbon\\Carbon makeCarbon(mixed $value, bool $throwException = true)\n *\n * @see \\Cms\\Helpers\\Cms\n */\nclass Cms extends Facade\n{\n    /**\n     * getFacadeAccessor returns the registered name of the component\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'cms.helper';\n    }\n}\n"
  },
  {
    "path": "modules/cms/formwidgets/PageFinder.php",
    "content": "<?php namespace Cms\\FormWidgets;\n\nuse Url;\nuse Cms\\Models\\PageLookupItem;\nuse Backend\\Classes\\FormWidgetBase;\n\n/**\n * PageFinder renders a page finder field.\n *\n *    page:\n *        label: Featured Page\n *        type: pagefinder\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PageFinder extends FormWidgetBase\n{\n    use \\Backend\\Traits\\SearchableWidget;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var bool singleMode only allows items to be selected that resovle to a single URL.\n     */\n    public $singleMode = false;\n\n    /**\n     * @var bool allowCustomUrl controls whether the free-form URL option appears.\n     */\n    public $allowCustomUrl = true;\n\n    /**\n     * @var array|null allowedTypes restricts the type dropdown to these types only.\n     */\n    public $allowedTypes = null;\n\n    /**\n     * @var array|null excludedTypes removes these types from the dropdown.\n     */\n    public $excludedTypes = null;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'pagefinder';\n\n    /**\n     * @var \\Backend\\Classes\\WidgetBase selectWidget reference to the widget used for selecting a page.\n     */\n    protected $selectWidget;\n\n    /**\n     * @var PageLookupItem lookupItem\n     */\n    protected $lookupItem;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'singleMode',\n            'allowCustomUrl',\n            'allowedTypes',\n            'excludedTypes',\n        ]);\n\n        if ($this->formField->disabled || $this->formField->readOnly) {\n            $this->previewMode = true;\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/pagefinder.css');\n        $this->addJs('js/pagefinder.js');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n        return $this->makePartial('container');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['value'] = $this->getKeyValue();\n        $this->vars['field'] = $this->formField;\n        $this->vars['nameValue'] = $this->getNameValue();\n        $this->vars['descriptionValue'] = $this->getDescriptionValue();\n        $this->vars['singleMode'] = $this->singleMode;\n        $this->vars['allowCustomUrl'] = $this->allowCustomUrl;\n        $this->vars['allowedTypes'] = $this->allowedTypes;\n        $this->vars['excludedTypes'] = $this->excludedTypes;\n    }\n\n    /**\n     * onRefresh AJAX handler\n     */\n    public function onRefresh()\n    {\n        $value = post($this->getFieldName());\n\n        $this->setKeyValue($value);\n\n        $this->prepareVars();\n\n        return ['#'.$this->getId('container') => $this->makePartial('pagefinder')];\n    }\n\n    /**\n     * onClearRecord AJAX handler\n     */\n    public function onClearRecord()\n    {\n        $this->setKeyValue('');\n\n        $this->prepareVars();\n\n        return ['#'.$this->getId('container') => $this->makePartial('pagefinder')];\n    }\n\n    /**\n     * getNameValue\n     */\n    public function getNameValue()\n    {\n        $item = $this->getLookupItemValue();\n        if (!$item) {\n            return '';\n        }\n\n        $label = $item->getReferenceLabel() ?: $item->getTypeLabel();\n\n        if ($item->cmsPage) {\n            $cmsPageLabel = $item->getCmsPageOptions()[$item->cmsPage] ?? $item->cmsPage;\n            $label .= ' - ' . $cmsPageLabel;\n        }\n\n        return $label;\n    }\n\n    /**\n     * getDescriptionValue\n     */\n    public function getDescriptionValue()\n    {\n        $linkUrl = (string) $this->getKeyValue();\n        if (!$linkUrl) {\n            return '';\n        }\n\n        $item = $this->getLookupItemValue();\n        if (!$item) {\n            return '';\n        }\n\n        if (str_starts_with($linkUrl, 'october://')) {\n            return $item->getPreviewUrl();\n        }\n\n        return $item->url ?? '';\n    }\n\n    /**\n     * getLookupItemValue\n     */\n    protected function getLookupItemValue()\n    {\n        if ($this->lookupItem !== null) {\n            return $this->lookupItem;\n        }\n\n        return $this->lookupItem = PageLookupItem::fromSchema((string) $this->getKeyValue());\n    }\n\n    /**\n     * getKeyValue\n     */\n    public function getKeyValue()\n    {\n        return $this->formField->value ??= $this->getLoadValue();\n    }\n\n    /**\n     * setKeyValue\n     */\n    public function setKeyValue($value)\n    {\n        $this->formField->value = $value;\n    }\n}\n"
  },
  {
    "path": "modules/cms/formwidgets/pagefinder/assets/css/pagefinder.css",
    "content": ".field-pagefinder {\n    .pagefinder-control-container {\n        border-radius: 4px;\n        border: 1px solid var(--bs-border-color);\n        background: var(--oc-form-control-bg);\n    }\n\n    .pagefinder-control-toolbar {\n        padding: 3px;\n        font-size: 0;\n        white-space: nowrap;\n\n        .backend-toolbar-button {\n            &.populated-only {\n                display: none;\n            }\n        }\n    }\n\n    .pagefinder-record-container {\n        position: relative;\n    }\n}\n\n.field-pagefinder {\n    .record-item {\n        position: relative;\n        outline: none;\n        display: block;\n        margin: 4px;\n\n        .record-data-container {\n            padding: 4px 3px 3px;\n        }\n\n        .record-data-container-inner {\n            position: relative;\n        }\n\n        .icon-container, .info, .info h4, .info h4 p {\n            vertical-align: top;\n            display: inline-block;\n        }\n\n        .icon-container {\n            width: 20px;\n            height: 20px;\n            position: absolute;\n            margin-top: 1px;\n\n            i {\n                position: relative;\n                top: 2px;\n                left: 3px;\n            }\n        }\n\n        .info {\n            padding-left: 26px;\n        }\n\n        .recordname, .description {\n            color: var(--bs-body-color);\n            font-size: 14px;\n            word-break: break-all;\n            margin-bottom: 0;\n        }\n\n        .description {\n            font-size: .9rem;\n            color: var(--bs-secondary-color);\n        }\n    }\n}"
  },
  {
    "path": "modules/cms/formwidgets/pagefinder/assets/js/pagefinder.js",
    "content": "/*\n * PageFinder page\n */\n'use strict';\n\noc.registerControl('pagefinder', class extends oc.ControlBase {\n    init() {\n        this.$dataLocker = document.querySelector(this.config.dataLocker);\n    }\n\n    connect() {\n        this.listen('click', '.toolbar-find-button', this.onClickFindButton);\n        this.listen('dblclick', this.onDoubleClick);\n    }\n\n    onDoubleClick() {\n        this.element.querySelector('.toolbar-find-button').click();\n    }\n\n    onInsertPage(item) {\n        if (!this.$dataLocker) {\n            return;\n        }\n\n        this.$dataLocker.value = item.link;\n\n        if (!this.config.refreshHandler) {\n            return;\n        }\n\n        oc.request(this.element, this.config.refreshHandler, {\n            afterUpdate: () => {\n                $(this.config.dataLocker).trigger('change');\n            }\n        });\n    }\n\n    onClickFindButton(ev) {\n        var currentValue = this.$dataLocker ? this.$dataLocker.value : '';\n\n        oc.pageLookup.popup({\n            alias: 'ocpagelookup',\n            value: currentValue,\n            onInsert: this.proxy(this.onInsertPage),\n            includeTitle: true,\n            singleMode: this.config.singleMode,\n            allowCustomUrl: this.config.allowCustomUrl,\n            allowedTypes: this.parseJsonConfig(this.config.allowedTypes),\n            excludedTypes: this.parseJsonConfig(this.config.excludedTypes)\n        });\n    }\n\n    parseJsonConfig(value) {\n        if (!value || value === 'null') {\n            return null;\n        }\n        if (typeof value === 'string') {\n            try { return JSON.parse(value); } catch(e) { return null; }\n        }\n        return value;\n    }\n});\n"
  },
  {
    "path": "modules/cms/formwidgets/pagefinder/partials/_container.php",
    "content": "<?php if ($this->previewMode && !$value): ?>\n\n    <span class=\"form-control\" disabled=\"disabled\">\n        <?= e(trans('backend::lang.form.preview_no_record_message')) ?>\n    </span>\n\n<?php else: ?>\n\n    <div class=\"pagefinder-widget\" id=\"<?= $this->getId('container') ?>\">\n        <?= $this->makePartial('pagefinder') ?>\n    </div>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/cms/formwidgets/pagefinder/partials/_pagefinder.php",
    "content": "<?php\n    $previewMode = false;\n    if ($this->previewMode || $field->readOnly) {\n        $previewMode = true;\n    }\n?>\n<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-pagefinder loading-indicator-container size-input-text <?= $value ? 'is-populated' : '' ?> <?= $previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"pagefinder\"\n    data-refresh-handler=\"<?= $this->getEventHandler('onRefresh') ?>\"\n    data-data-locker=\"#<?= $field->getId() ?>\"\n    data-single-mode=\"<?= $singleMode ? 1 : 0 ?>\"\n    data-allow-custom-url=\"<?= $allowCustomUrl ? 1 : 0 ?>\"\n    data-allowed-types=\"<?= e(json_encode($allowedTypes)) ?>\"\n    data-excluded-types=\"<?= e(json_encode($excludedTypes)) ?>\">\n\n    <div class=\"pagefinder-control-container d-flex\">\n        <?php if ($value): ?>\n            <div class=\"pagefinder-record-container me-auto\">\n                <div class=\"record-item\">\n                    <div class=\"record-data-container\">\n                        <div class=\"record-data-container-inner\">\n                            <div class=\"icon-container\">\n                                <i class=\"icon-chain\"></i>\n                            </div>\n                            <div class=\"info\">\n                                <span class=\"recordname\"><?= e(__($nameValue)) ?: __('Link') ?></span>\n                                <?php if ($descriptionValue): ?>\n                                    <span class=\"description\"> - <?= e(__($descriptionValue)) ?></span>\n                                <?php endif ?>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        <?php endif ?>\n        <?php if (!$previewMode): ?>\n            <div class=\"pagefinder-control-toolbar\">\n                <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-find-button\">\n                    <i class=\"icon-common-file-star\"></i>\n                    <?= $value ? __(\"Replace\") : __(\"Select\") ?>\n                </a>\n                <?php if ($value): ?>\n                    <button\n                        type=\"button\"\n                        class=\"backend-toolbar-button control-button find-remove-button\"\n                        data-request=\"<?= $this->getEventHandler('onClearRecord') ?>\"\n                        data-request-confirm=\"<?= e(trans('backend::lang.form.action_confirm')) ?>\"\n                        data-request-success=\"$('#<?= $field->getId() ?>').val('').trigger('change')\"\n                        aria-label=\"Remove\">\n                        <i class=\"icon-common-file-remove\"></i>\n                        <?= __(\"Clear\") ?>\n                    </button>\n                <?php endif ?>\n            </div>\n        <?php endif ?>\n    </div>\n\n    <input\n        type=\"hidden\"\n        name=\"<?= $field->getName() ?>\"\n        id=\"<?= $field->getId() ?>\"\n        value=\"<?= e($value) ?>\"\n    />\n</div>\n"
  },
  {
    "path": "modules/cms/helpers/Cms.php",
    "content": "<?php namespace Cms\\Helpers;\n\nuse Url;\nuse Site;\nuse View;\nuse Route;\nuse Config;\nuse Request;\nuse Redirect;\nuse Response;\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\Controller;\nuse System\\Helpers\\DateTime as DateTimeHelper;\nuse Exception;\n\n/**\n * Cms Helper\n *\n * @package october\\cms\n * @see \\Cms\\Facades\\Cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Cms\n{\n    use \\Cms\\Helpers\\Cms\\HasSites;\n\n    /**\n     * @var bool actionExists determines if the run action exists\n     */\n    protected static $actionExists;\n\n    /**\n     * @var string urlPathPrefix prefixes every URL\n     */\n    protected $urlPathPrefix;\n\n    /**\n     * setUrlPrefix sets a prefix for every URL\n     */\n    public function setUrlPrefix(string $prefix)\n    {\n        $this->urlPathPrefix = trim($prefix, '/');\n    }\n\n    /**\n     * url returns a URL in context of the frontend\n     */\n    public function url($path = null)\n    {\n        // Process path\n        if (substr($path, 0, 1) === '/') {\n            $path = substr($path, 1);\n        }\n\n        if ($this->urlPathPrefix !== null) {\n            $path = $this->urlPathPrefix . '/' . $path;\n        }\n\n        // Use the router\n        $routeAction = 'Cms\\Classes\\CmsController@run';\n\n        if (self::$actionExists === null) {\n            self::$actionExists = Route::getRoutes()->getByAction($routeAction) !== null;\n        }\n\n        if (self::$actionExists) {\n            $result = Url::action($routeAction, ['slug' => $path]);\n        }\n        else {\n            $result = $path;\n        }\n\n        // Use the base URL\n        return Url::toRelative($result);\n    }\n\n    /**\n     * pageUrl returns a URL for a CMS page, this fires up the CMS controller\n     * to generate the value for maximum performance.\n     */\n    public function pageUrl($name, $parameters = [])\n    {\n        return (Controller::getController() ?: new Controller)\n            ->pageUrl($name, $parameters, false);\n    }\n\n    /**\n     * fullUrl returns a complete URL considering the current site context\n     * and base URL, including prefix and hostname.\n     */\n    public function fullUrl($path = null)\n    {\n        $path = '/' . ltrim($path, '/');\n\n        if ($site = Site::getSiteFromContext()) {\n            return rtrim($site->base_url . $path, '/');\n        }\n\n        return Url::to($path);\n    }\n\n    /**\n     * entryUrl returns an entry point URL from the CMS theme based on a component name\n     * and the isDefault component property to assign it explicitly.\n     */\n    public function entryUrl($componentName, array $parameters = [], ?array $componentProps = null)\n    {\n        // @todo check cached, if not, see \\Tailor\\Behaviors\\PreviewController for example -sg\n        $pages = $componentProps\n            ? Page::whereComponent($componentName, $componentProps)\n            : Page::withComponent($componentName);\n\n        $page = $pages->first();\n\n        if ($pages->count() > 1) {\n            $page = $pages->whereComponent($componentName, ['isDefault' => true])->first() ?: $page;\n        }\n\n        if (!$page) {\n            return null;\n        }\n\n        return $this->pageUrl($page->getBaseFileName(), $parameters);\n    }\n\n    /**\n     * redirect creates a new redirect to a CMS page or URL, the second argument\n     * contains the CMS page parameters or the status code.\n     */\n    public function redirect($to, $parameters = [], $status = 302)\n    {\n        if (is_int($parameters)) {\n            $status = $parameters;\n            $parameters = [];\n        }\n\n        $url = $this->pageUrl($to, $parameters) ?: $to;\n\n        return Redirect::to($url, $status);\n    }\n\n    /**\n     * redirectFromPost performs a redirect after an action using a \"redirect\" postback\n     * value. Setting to false or 0 will disable the redirect. This method will only\n     * redirect to a relative path for security reasons.\n     */\n    public function redirectFromPost($defaultTo = null, $key = null)\n    {\n        return $this->makePostRedirect($defaultTo, $key);\n    }\n\n    /**\n     * redirectIntendedFromPost\n     */\n    public function redirectIntendedFromPost($defaultTo = null, $key = null)\n    {\n        return $this->makePostRedirect($defaultTo, $key, 'intended');\n    }\n\n    /**\n     * makePostRedirect\n     */\n    protected function makePostRedirect($defaultTo = null, $key = null, $method = 'to')\n    {\n        if ($defaultTo === null) {\n            $defaultTo = Request::path();\n        }\n\n        if ($key === null) {\n            $key = 'redirect';\n        }\n\n        $property = post($key);\n\n        // No redirect (false)\n        if (!$property || $property === 'false') {\n            return;\n        }\n\n        // Refresh current page (true)\n        if (in_array($property, ['1', 'true'])) {\n            return Redirect::$method($defaultTo);\n        }\n\n        // Specify a CMS page name\n        if ($redirectUrl = $this->pageUrl($property)) {\n            return Redirect::$method($redirectUrl);\n        }\n\n        // Specify a relative URL\n        return Redirect::$method(Url::makeRelative($property));\n    }\n\n    /**\n     * flashFromPost requests a flash message from the \"message\" postback.\n     */\n    public function flashFromPost($message, $key = 'message')\n    {\n        $property = post($key);\n\n        if (in_array($property, ['0', 'false'])) {\n            return;\n        }\n\n        return $property ?: $message;\n    }\n\n    /**\n     * pageNotFound returns a 404 page response\n     */\n    public function pageNotFound()\n    {\n        $controller = (Controller::getController() ?: new Controller);\n\n        $router = $controller->getRouter();\n\n        if ($router->findByUrl('/404')) {\n            return $controller->run('/404');\n        }\n\n        return Response::make(View::make('cms::404'), 404);\n    }\n\n    /**\n     * pageError returns a 500 page response\n     */\n    public function pageError()\n    {\n        try {\n            $controller = (Controller::getController() ?: new Controller);\n\n            $router = $controller->getRouter();\n\n            if ($router->findByUrl('/error')) {\n                return $controller->run('/error');\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        return Response::make(View::make('cms::error'), 500);\n    }\n\n    /**\n     * makeCarbon converts mixed inputs to a Carbon object and sets the CMS timezone\n     * @return \\Carbon\\Carbon\n     */\n    public function makeCarbon($value, $throwException = true)\n    {\n        $carbon = DateTimeHelper::makeCarbon($value, $throwException);\n\n        $carbon->setTimezone(Config::get('cms.timezone', Config::get('app.timezone')));\n\n        return $carbon;\n    }\n\n    /**\n     * urlHasException checks if the url pattern has an exception for the specified type\n     */\n    public function urlHasException(string $url, string $type): bool\n    {\n        $exceptions = (array) Config::get('cms.url_exceptions', []);\n        if (!$exceptions) {\n            return false;\n        }\n\n        // Normalize URL\n        $haystack = '/' . trim($url, '/ ');\n\n        foreach ($exceptions as $urlPattern => $exceptionStr) {\n            $exceptionTypes = explode('|', $exceptionStr);\n            if (!in_array($type, $exceptionTypes)) {\n                continue;\n            }\n\n            // Normalize slash prefix, remove wildcard end\n            $needle = '/' . ltrim(rtrim($urlPattern, '*'), '/ ');\n            if (str_ends_with($urlPattern, '*') && str_starts_with($haystack, $needle)) {\n                return true;\n            }\n\n            if ($haystack === $needle) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * clearCache\n     */\n    public static function clearCache()\n    {\n        self::$actionExists = null;\n    }\n}\n"
  },
  {
    "path": "modules/cms/helpers/Component.php",
    "content": "<?php namespace Cms\\Helpers;\n\nuse Backend\\Helpers\\Inspector as InspectorHelper;\n\n/**\n * Component defines some component helpers for the CMS UI.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Component\n{\n    /**\n     * getComponentsPropertyConfig returns a component property configuration as a JSON string or array.\n     * @param mixed $component The component object\n     * @param boolean $addAliasProperty Determines if the Alias property should be added to the result.\n     * @param boolean $returnArray Determines if the method should return an array.\n     * @return string\n     */\n    public static function getComponentsPropertyConfig($component, $addAliasProperty = true, $returnArray = false)\n    {\n        $result = [];\n\n        if ($addAliasProperty) {\n            $property = [\n                'property' => 'oc.alias',\n                'title' => __(\"Alias\"),\n                'description' => __(\"A unique name given to this component when using it in the page or layout code.\"),\n                'type' => 'string',\n                'validationPattern' => '^[a-zA-Z]+[0-9a-z\\_]*$',\n                'validationMessage' => __(\"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\"),\n                'required' => true,\n                'showExternalParam' => false\n            ];\n            $result[] = $property;\n        }\n\n        $properties = $component->defineProperties();\n        if (is_array($properties)) {\n            $result = array_merge($result, InspectorHelper::getPropertyConfig($properties));\n        }\n\n        if ($returnArray) {\n            return $result;\n        }\n\n        return json_encode($result);\n    }\n\n    /**\n     * getComponentPropertyValues returns a component property values.\n     * @param mixed $component The component object\n     * @param boolean $returnArray Returns array if TRUE. Returns JSON string otherwise.\n     * @return mixed\n     */\n    public static function getComponentPropertyValues($component, $returnArray = false)\n    {\n        $result = [];\n\n        $result['oc.alias'] = $component->alias;\n\n        $properties = $component->defineProperties();\n        if (is_array($properties)) {\n            foreach ($properties as $name => $params) {\n                $result[$name] = $component->property($name);\n            }\n        }\n\n        if ($returnArray) {\n            return $result;\n        }\n\n        return json_encode($result);\n    }\n\n    /**\n     * getComponentName returns a component name.\n     * @param mixed $component The component object\n     * @return string\n     */\n    public static function getComponentName($component)\n    {\n        return __($component->componentDetails()['name'] ?? \"Unnamed\");\n    }\n\n    /**\n     * getComponentIcon returns a component icon.\n     * @param mixed $component The component object\n     * @return string\n     */\n    public static function getComponentIcon($component)\n    {\n        return $component->componentDetails()['icon'] ?? null;\n    }\n\n    /**\n     * getComponentDescription returns a component description.\n     * @param mixed $component The component object\n     * @return string\n     */\n    public static function getComponentDescription($component)\n    {\n        return __($component->componentDetails()['description'] ?? \"No description provided\");\n    }\n\n    /**\n     * getComponentSnippetAjax returns if a component should be rendered with an AJAX partial\n     * only applies when a component is used as a snippet\n     * @param mixed $component The component object\n     * @return bool\n     */\n    public static function getComponentSnippetAjax($component)\n    {\n        return (bool) array_get($component->componentDetails(), 'snippetAjax', false);\n    }\n}\n"
  },
  {
    "path": "modules/cms/helpers/File.php",
    "content": "<?php namespace Cms\\Helpers;\n\nuse Cms\\Classes\\Theme;\n\n/**\n * File defines some file-system helpers for the CMS system\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass File\n{\n    /**\n     * validateName validates a CMS object file or directory name.\n     * CMS object file names can contain only alphanumeric symbols, dashes, underscores and dots.\n     * Name can also begin with a component name, eg: MyComponent::filename.\n     * @param string $fileName Specifies a path to validate\n     * @return boolean Returns true if the file name is valid. Otherwise returns false.\n     */\n    public static function validateName($fileName)\n    {\n        return preg_match('/^[a-z0-9\\_\\s\\-\\.\\/]+$/i', $fileName) ? true : false;\n    }\n\n    /**\n     * validateExtension validates whether a file has an allowed extension.\n     * @param string $fileName Specifies a path to validate\n     * @param array $allowedExtensions A list of allowed file extensions\n     * @param boolean $allowEmpty Determines whether the file extension could be empty.\n     * @return boolean Returns true if the file extension is valid. Otherwise returns false.\n     */\n    public static function validateExtension($fileName, $allowedExtensions, $allowEmpty = true)\n    {\n        $extension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));\n        if (empty($extension)) {\n            return $allowEmpty;\n        }\n\n        return in_array($extension, $allowedExtensions);\n    }\n\n    /**\n     * validatePath of a CMS object.\n     * CMS object directory and file names can contain only alphanumeric symbols, dashes and dots.\n     * CMS objects support only a single level of subdirectories.\n     * @param string $filePath Specifies a path to validate\n     * @param integer $maxNesting Specifies the maximum allowed nesting level\n     * @return bool Returns true if the file name is valid. Otherwise returns false.\n     */\n    public static function validatePath($filePath, $maxNesting = 2): bool\n    {\n        if (strpos($filePath, '..') !== false) {\n            return false;\n        }\n\n        if (strpos($filePath, './') !== false || strpos($filePath, '//') !== false) {\n            return false;\n        }\n\n        $segments = explode('/', $filePath);\n        if ($maxNesting !== null && count($segments) > $maxNesting) {\n            return false;\n        }\n\n        foreach ($segments as $segment) {\n            if (!self::validateName($segment)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * validateInTheme checks object lives within the theme directory\n     */\n    public static function validateInTheme(Theme $theme, string $filePath): bool\n    {\n        $directory = realpath($theme->getPath());\n\n        $path = realpath($filePath);\n\n        if ($path !== false && !starts_with($path, $directory)) {\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/cms/helpers/cms/HasSites.php",
    "content": "<?php namespace Cms\\Helpers\\Cms;\n\nuse Site;\nuse Event;\nuse Cms\\Classes\\Page;\nuse System\\Models\\SiteDefinition;\nuse October\\Rain\\Router\\Router as RainRouter;\n\n/**\n * HasSites\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasSites\n{\n    /**\n     * siteUrl returns a URL for a CMS page, this is similar to pageUrl except\n     * supports a different site context.\n     */\n    public function siteUrl(Page $page, SiteDefinition $site, array $parameters = [])\n    {\n        $pattern = $this->getPatternFromPage($page, $site);\n\n        $url = $this->withPreservedQueryString(\n            $this->getUrlFromPattern($pattern, $page, $site, $parameters),\n            $page,\n            $site\n        );\n\n        return $url;\n    }\n\n    /**\n     * getPatternFromPage\n     */\n    protected function getPatternFromPage(Page $page, SiteDefinition $site): string\n    {\n        $pattern = $page->url;\n\n        /**\n         * @event cms.sitePicker.overridePattern\n         * Enables manipulating the URL route pattern\n         *\n         * You will have access to the page object, the old and new locale and the URL pattern.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.sitePicker.overridePattern', function($page, $pattern, $currentSite, $proposedSite) {\n         *        if ($page->baseFileName == 'your-page-filename') {\n         *             return YourModel::overridePattern($pattern, $currentSite, $proposedSite);\n         *         }\n         *     });\n         *\n         */\n        $translatedPattern = Event::fire('cms.sitePicker.overridePattern', [\n            $page,\n            $pattern,\n            Site::getActiveSite(),\n            $site\n        ], true);\n\n        if ($translatedPattern) {\n            $pattern = $translatedPattern;\n        }\n\n        return $pattern;\n    }\n\n    /**\n     * getUrlFromPattern\n     */\n    protected function getUrlFromPattern(string $urlPattern, Page $page, SiteDefinition $site, array $parameters): string\n    {\n        /**\n         * @event cms.sitePicker.overrideParams\n         * Enables manipulating the URL parameters\n         *\n         * You will have access to the page object, the old and new locale and the URL parameters.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.sitePicker.overrideParams', function($page, $params, $currentSite, $proposedSite) {\n         *        if ($page->baseFileName == 'your-page-filename') {\n         *             return YourModel::overrideParams($params, $currentSite, $proposedSite);\n         *         }\n         *     });\n         *\n         */\n        $translatedParams = Event::fire('cms.sitePicker.overrideParams', [\n            $page,\n            $parameters,\n            Site::getActiveSite(),\n            $site\n        ], true);\n\n        if ($translatedParams) {\n            $parameters = $translatedParams;\n        }\n\n        $router = new RainRouter;\n\n        $path = $router->urlFromPattern($urlPattern, $parameters);\n\n        return rtrim($site->base_url . $path, '/');\n    }\n\n    /**\n     * withPreservedQueryString makes sure to add any existing query string to the redirect url.\n     */\n    protected function withPreservedQueryString(string $url, Page $page, SiteDefinition $site): string\n    {\n        $query = get();\n\n        /**\n         * @event cms.sitePicker.overrideQuery\n         * Enables manipulating the URL query parameters\n         *\n         * You will have access to the page object, the old and new site and the URL query parameters.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.sitePicker.overrideQuery', function($page, $params, $currentSite, $proposedSite) {\n         *        if ($page->baseFileName == 'your-page-filename') {\n         *             return YourModel::translateQuery($params, $currentSite, $proposedSite);\n         *         }\n         *     });\n         *\n         */\n        $translatedQuery = Event::fire('cms.sitePicker.overrideQuery', [\n            $page,\n            $query,\n            Site::getActiveSite(),\n            $site\n        ], true);\n\n        if ($translatedQuery) {\n            $query = $translatedQuery;\n        }\n\n        $queryStr = http_build_query($query);\n\n        return $queryStr ? $url . '?' . $queryStr : $url;\n    }\n}\n"
  },
  {
    "path": "modules/cms/lang/ar/lang.php",
    "content": "<?php return [\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'الموقع',\n      'online' => 'أونلاين',\n      'maintenance' => 'تحت الصيانة',\n      'manage_themes' => 'إدارة القوالب',\n      'customize_theme' => 'تخصيص القالب',\n    ],\n  ],\n  'page' => [\n    'menu_label' => 'الصفحات',\n  ],\n  'layout' => [\n    'menu_label' => 'النماذج',\n  ],\n  'partial' => [\n    'menu_label' => 'الجزئيات',\n  ],\n  'content' => [\n    'menu_label' => 'المحتوى',\n  ],\n  'cms' => [\n    'menu_label' => 'المحتوى',\n  ],\n  'editor' => [\n    'settings' => 'الإعدادات',\n  ],\n  'asset' => [\n    'menu_label' => 'الأصول',\n  ],\n  'component' => [\n    'menu_label' => 'المكونات',\n  ],\n  'permissions' => [\n    'name' => 'إدارة المحتوى',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/be/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Няправільнае імя файла: \":name\". Імёны файлаў могуць утрымліваць толькі літарна-лічбавыя знакі, знакі падкрэслення, працяжнік і кропкі. Некаторыя прыклады правільных імёнаў файлаў: page.htm, page, subdirectory/page',\n    'invalid_property' => 'Ўласцівасць \":name\" не можа быць ўстаноўлена',\n    'file_already_exists' => 'Файл \":name\" ужо існуе',\n    'error_saving' => 'Памылка падчас захавання файла \":name\". Калі ласка, праверце дазволы на запіс',\n    'error_creating_directory' => 'Памылка падчас стварэння каталогу \":name\". Калі ласка, праверце дазволы на запіс',\n    'invalid_file_extension' => 'Няправільнае пашырэнне файла: :invalid. Дазволеныя пашырэнні: :allowed',\n    'error_deleting' => 'Памылка падчас выдалення файла шаблону \":name\". Калі ласка, праверце дазволы на запіс',\n    'delete_success' => 'Выдалена шаблонаў: :count',\n    'file_name_required' => 'Патрабуецца імя файла',\n    'safe_mode_enabled' => 'Бяспечны рэжым ужо уключаны',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Вэбсайт',\n      'online' => 'Анлайн',\n      'maintenance' => 'У абслугоўванні',\n      'manage_themes' => 'Кіраванне тэмамі',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Актыўная тэма не ўстаноўлена',\n      'not_found' => 'Актыўная тэма не знойдзена',\n    ],\n    'edit' => [\n      'not_set' => 'Тэма для рэдагавання не ўстаноўлена',\n      'not_found' => 'Тэма для рэдагавання не знойдзена',\n      'not_match' => 'Аб\\'ект, які Вы спрабуеце адкрыць, не належыць рэдагуемай тэме. Калі ласка, перазагрузіце старонку',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Старонка \":name\" не знойдзена',\n    'not_found' => [\n      'label' => 'Старонка не знойдзена',\n      'help' => 'Запрошаная старонка не можа быць знойдзена',\n    ],\n    'custom_error' => [\n      'label' => 'Памылка на старонцы',\n      'help' => 'Прабачце, але нешта здарылася і старонка не можа быць адлюстравана',\n    ],\n    'menu_label' => 'Старонкі',\n    'unsaved_label' => 'Незахаваныя старонкі',\n    'no_list_records' => 'Няма старонак',\n    'new' => 'Новая старонка',\n    'invalid_url' => 'Няправільны фармат URL. URL павінен пачынацца з \"\\\\/\" і складацца з лацінскіх літараў, лічбаў і наступных сімвалаў: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Выдаліць абраныя старонкі?',\n    'delete_confirm_single' => 'Выдаліць гэтую старонку?',\n    'no_layout' => '-- няма макету --',\n  ],\n  'layout' => [\n    'not_found_name' => 'Макет \":name\" не знойдзены',\n    'menu_label' => 'Макеты',\n    'unsaved_label' => 'Незахаваныя макеты',\n    'no_list_records' => 'Няма макетаў',\n    'new' => 'Новы макет',\n    'delete_confirm_multiple' => 'Выдаліць абраныя макеты?',\n    'delete_confirm_single' => 'Выдаліць гэты макет?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Частковы шаблон \":name\" не знойдзены',\n    'invalid_name' => 'Няправільная назва частковага шаблона: \":name\"',\n    'menu_label' => 'Частковыя шаблоны',\n    'unsaved_label' => 'Незахаваныя частковыя шаблоны',\n    'no_list_records' => 'Няма частковых шаблонаў',\n    'delete_confirm_multiple' => 'Выдаліць абраныя шаблоны?',\n    'delete_confirm_single' => 'Выдаліць гэты частковы шаблон?',\n    'new' => 'Новы частковы шаблон',\n  ],\n  'content' => [\n    'not_found_name' => 'Зместавы файл \":name\" не знойдзены',\n    'menu_label' => 'Змест',\n    'unsaved_label' => 'Незахаваны змест',\n    'no_list_records' => 'Зместавыя файлы не знойдзены',\n    'delete_confirm_multiple' => 'Выдаліць абраныя зместавыя файлы альбо каталогі?',\n    'delete_confirm_single' => 'Выдаліць гэты зместавы файл?',\n    'new' => 'Новы зместавы файл',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Няправільнае імя апрацоўшчыка AJAX: \":name\"',\n    'not_found' => 'AJAX апрацоўшчык \":name\" не знойдзены',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Дадаць',\n    'search' => 'Знайсці...',\n  ],\n  'editor' => [\n    'settings' => 'Налады',\n    'title' => 'Назва',\n    'new_title' => 'Назва новай старонкі',\n    'url' => 'URL',\n    'filename' => 'Імя файла',\n    'layout' => 'Макет',\n    'description' => 'Апісанне',\n    'preview' => 'Папярэдні прагляд',\n    'meta' => 'Мета',\n    'meta_title' => 'Назва мета-дадзеных',\n    'meta_description' => 'Апісанне мета-дадзеных',\n    'markup' => 'Макет',\n    'code' => 'Код',\n    'content' => 'Змест',\n    'hidden' => 'Схаваная',\n    'hidden_comment' => 'Схаваная старонка бачная толькі для карыстальнікаў панэлі кіравання, якія ўвайшлі ў сістэму',\n    'enter_fullscreen' => 'Ўключыць паўнаэкранны рэжым',\n    'exit_fullscreen' => 'Выключыць паўнаэкранны рэжым',\n    'open_searchbox' => 'Адчыніць пошук',\n    'open_replacebox' => 'Адчыніць налады для замены',\n  ],\n  'asset' => [\n    'menu_label' => 'Рэсурсы',\n    'unsaved_label' => 'Незахаваныя рэсурсы',\n    'drop_down_add_title' => 'Дадаць...',\n    'drop_down_operation_title' => 'Дзеянне...',\n    'upload_files' => 'Загрузіць файлы',\n    'create_file' => 'Стварыць файл',\n    'create_directory' => 'Стварыць каталог',\n    'directory_popup_title' => 'Новы каталог',\n    'directory_name' => 'Назва каталогу',\n    'rename' => 'Пераіменаваць',\n    'delete' => 'Выдаліць',\n    'move' => 'Перамясціць',\n    'select' => 'Выбраць',\n    'new' => 'Новы файл',\n    'rename_popup_title' => 'Пераіменаваць',\n    'rename_new_name' => 'Новае імя',\n    'invalid_path' => 'Шлях можа ўтрымліваць толькі лічбы, лацінскія літары, прабелы і наступныя сімвалы: ._-/',\n    'error_deleting_file' => 'Памылка падчас выдалення файлу \":name\"',\n    'error_deleting_dir_not_empty' => 'Памылка падчас выдалення каталогу \":name\". Каталог не пусты',\n    'error_deleting_dir' => 'Памылка падчас выдалення каталогу \":name\"',\n    'invalid_name' => 'Імя можа ўтрымліваць толькі лічбы, лацінскія літары, прабелы і наступныя сімвалы: ._-',\n    'original_not_found' => 'Арыгінальныя файл альбо каталог не былі знойдзены',\n    'already_exists' => 'Файл альбо каталог з такім імем ужо існуе',\n    'error_renaming' => 'Памылка падчас пераіменавання файла ільбо каталога',\n    'name_cant_be_empty' => 'Імя не можа быць пустым',\n    'too_large' => 'Файл занадта вялікі. Найбольы дазволеы памер :max_size',\n    'type_not_allowed' => 'Дазволеныя толькі наступныя тыпы файлаў: :allowed_types',\n    'file_not_valid' => 'Файл няправільны',\n    'error_uploading_file' => 'Памылка падчас загрузкі файла \":name\": :error',\n    'move_please_select' => 'калі ласка, выберыце',\n    'move_destination' => 'Каталог прызначэння',\n    'move_popup_title' => 'Перамясціць рэсурсы',\n    'move_button' => 'Перамясціць',\n    'selected_files_not_found' => 'Абраныя файлы не былі знойдзеныя',\n    'select_destination_dir' => 'Калі ласка, вызначце каталог прызначэння',\n    'destination_not_found' => 'Каталог прызначэння не знойдзены',\n    'error_moving_file' => 'Памылка падчас перамяшчэння файла \":file\"',\n    'error_moving_directory' => 'Памылка падчас перамяшчэння каталогу \":dir\"',\n    'error_deleting_directory' => 'Памылка падчас выдалення зыходнага каталогу \":dir\"',\n    'no_list_records' => 'Файлы не знойдзены',\n    'delete_confirm' => 'Выдаліць абраныя файлы альбо каталогі?',\n    'path' => 'Шлях',\n  ],\n  'component' => [\n    'menu_label' => 'Кампаненты',\n    'invalid_request' => 'Шаблон не можа быць захаваны з-за няправільных дадзеных кампаненту',\n    'no_records' => 'Няма кампанентаў',\n    'not_found' => 'Кампанент \":name\" не знойдзены',\n    'method_not_found' => 'Кампанент \":name\" не мае метада \":method\"',\n  ],\n  'template' => [\n    'invalid_type' => 'Невядомы тып шаблону',\n    'not_found' => 'Шаблон не знойдзены',\n    'saved' => 'Шаблон захаваны',\n    'no_list_records' => 'Запісы не знойдзены',\n    'delete_confirm' => 'Выдаліць абраныя шаблоны?',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Кіраванне зместавымі файламі сайту',\n    'manage_assets' => 'Кіраванне рэсурсамі сайту - малюнкамі, файламі JavaScript, CSS',\n    'manage_pages' => 'Стварэнне, змяненне і выдаленне старонак сайту',\n    'manage_layouts' => 'Стварэнне, змяненне і выдаленне CMS макетаў',\n    'manage_partials' => 'Стварэнне, змяненне і выдаленне частковых шаблонаў CMS',\n    'manage_themes' => 'Актывацыя, дэактывацыя і налады тэмаў CMS',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/be.json",
    "content": "{\n  \"Themes\": \"Тэмы\",\n  \"Manage Themes\": \"Кіраванне тэмамі\",\n  \"Customize Theme\": \"Наладзіць тэму\",\n  \"Manage Maintenance Mode\": \"Кіраванне рэжымам абслугоўвання\",\n  \"View Website During Maintenance\": \"Прагляд вэб-сайта падчас тэхнічнага абслугоўвання\",\n  \"Manage Content\": \"Кіраванне кантэнтам\",\n  \"Manage Asset Files\": \"Кіраванне файламі актываў\",\n  \"Manage Pages\": \"Кіраванне старонкамі\",\n  \"Manage Layouts\": \"Кіраванне макетамі\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Наладзіць старонку рэжыма абслугоўвання і пераключыць наладу\",\n  \"Maintenance Mode\": \"Рэжым абслугоўвання\",\n  \"Select the page to show when maintenance mode is activated.\": \"Выберыце старонку, якую неабходна паказваць, калі ўключаны рэжым абслугоўвання\",\n  \"Enable maintenance mode\": \"Уключыць рэжым абслугоўвання\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Рэжым абслугоўвання будзе паказваць абраную старонку наведвальнікам, якія не ўвайшлі ў панэль кіравання\",\n  \"Resources\": \"Рэсурсы\",\n  \"Reference assets and variables included on this page.\": \"Даведныя актывы і зменныя, уключаныя на гэтую старонку.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Файл(ы) JavaScript у папцы assets/js\",\n  \"LESS\": \"МЕНШ\",\n  \"LESS file(s) in the assets/less folder\": \"МЕНШ файл(аў) у тэчцы assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Файл(ы) SCSS у тэчцы assets/scss\",\n  \"Variables\": \"Пераменныя\",\n  \"Page variables name(s) and value(s)\": \"Імя(я) і значэнне(я) зменных старонкі\",\n  \"Headers\": \"Загалоўкі\",\n  \"Page header name(s) and value(s)\": \"Назва(я) загалоўка старонкі і значэнне(я)\",\n  \"Site Picker\": \"Выбар сайта\",\n  \"Displays links for selecting a different site.\": \"Адлюстроўвае спасылкі для выбару іншага сайта.\",\n  \"Unknown component\": \"Невядомы кампанент\",\n  \"View Bag\": \"Прагляд сумкі\",\n  \"Stores custom template properties.\": \"Захоўвае ўласныя ўласцівасці шаблона.\",\n  \"By :name\": \"Па: імя\",\n  \"The theme ':name' is not found.\": \"Тэма \\\":name\\\" не знойдзена\",\n  \"Manage the front-end theme and customization options.\": \"Прагляд усталяваных тэм і выбар актыўнай тэмы\",\n  \"Site Theme\": \"Інтэрфейсная тэма\",\n  \"Properties\": \"Уласцівасці\",\n  \"Publish\": \"Апублікаваць\",\n  \"Advanced\": \"Пашыраны\",\n  \"Name\": \"Імя\",\n  \"New theme name\": \"Новае імя тэмы\",\n  \"Author Name\": \"Аўтар\",\n  \"Person or company name\": \"Імя чалавека або назва кампаніі\",\n  \"Directory Name\": \"Назва каталогу\",\n  \"The destination theme directory\": \"Каталог прызначэння для тэмы\",\n  \"Description\": \"Апісанне\",\n  \"Theme description\": \"Апісанне тэмы\",\n  \"Homepage\": \"Хатняя старонка\",\n  \"Website URL\": \"Адрас вэбсайта\",\n  \"Author Code\": \"Код аўтара\",\n  \"A unique code for the author used for distribution\": \"Унікальны код аўтара, які выкарыстоўваецца для распаўсюджвання\",\n  \"Theme Code\": \"Код\",\n  \"A unique code for this theme used for distribution\": \"Унікальны код гэтай тэмы, які можа быць выкарыстаны для распаўсюджвання\",\n  \"Parent Theme\": \"Бацькоўская тэма\",\n  \"Database Mode\": \"Рэжым базы дадзеных\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Захавайце змены ў гэтай тэме ў базе дадзеных, а не ў файлавай сістэме\",\n  \"-- no parent --\": \"-- няма бацькоў --\",\n  \"Theme\": \"Тэма\",\n  \"Folders\": \"Каталогі\",\n  \"Please select the theme folders you would like to export\": \"Калі ласка, выберыце каталогі тэмы, якія Вы жадаеце экспартаваць\",\n  \"Theme archive file\": \"Архіў тэмы\",\n  \"Overwrite existing files\": \"Перапісаць файлы, што існуюць\",\n  \"Untick this box to only import new files\": \"Зніміце гэтую пазнаку, каб імпартаваць толькі новыя файлы\",\n  \"Please select the theme folders you would like to import\": \"Калі ласка, выберыце каталогі тэмы, якія Вы жадаеце імпартаваць\",\n  \"Activate\": \"Актыўная\",\n  \"Customize\": \"Налады\",\n  \"Duplicate\": \"Капіраваць\",\n  \"Duplicate Theme\": \"Скапіраваць тэму\",\n  \"Theme Duplicated!\": \"Тэма скапіравана!\",\n  \"Manage\": \"Кіраванне\",\n  \"Manage Theme\": \"Кіраваць тэмай\",\n  \"Edit Properties\": \"Рэдагаваць налады\",\n  \"Save Properties\": \"Захаваць налады\",\n  \"Import\": \"Імпарт\",\n  \"Import Theme\": \"Імпартаваць тэму\",\n  \"Theme Imported!\": \"Тэма імпартавана!\",\n  \"Export\": \"Экспарт\",\n  \"Export Theme\": \"Экспартаваць тэму\",\n  \"Delete\": \"Выдаліць\",\n  \"Delete this theme? It cannot be undone!\": \"Вы ўпэўнены, што жадаеце выдаліць гэтую тэму? Гэта нельга адмяніць!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Немагчыма выдаліць актыўную тэму, паспрабуйце спачатку зрабіць іншую тэму актыўнай\",\n  \"Theme deleted!\": \"Тэма была выдалена!\",\n  \"Create Theme\": \"Стварыць тэму\",\n  \"Create\": \"Стварыць\",\n  \"Create a New Blank Theme\": \"Стварыць новую пустую тэму\",\n  \"Theme Created!\": \"Тэма была створана!\",\n  \"Please specify a name for the theme.\": \"Калі ласка, укажыце імя тэмы\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Імя можа складацца толькі з лічбаў, лацінскіх літараў і наступных сімвалаў: _-\",\n  \"Desired theme directory already exists.\": \"Пажаданае імя ўжо існуе\",\n  \"Theme directory\": \"Каталог тэмы\",\n  \"Provide a new directory name for the duplicated theme.\": \"Вызначце новае імя каталога для скапіраванай тэмы\",\n  \"Find More Themes\": \"Знайсці больш тэм\",\n  \"Saving Theme...\": \"Захаванне тэмы...\",\n  \"Return to Themes List\": \"Вярнуцца да спісу тэм\",\n  \"No themes found\": \"Тэмы не знойдзены\",\n  \"Seed Theme\": \"Насенная тэма\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Запоўніце пазначаную тэму чарцяжамі, перакладамі і дадзенымі.\",\n  \"Theme Seeded!\": \"Тэма пасеяна!\",\n  \"Select Page Link\": \"Выберыце Спасылка на старонку\",\n  \"Search all references...\": \"Пошук ва ўсіх спасылках...\",\n  \"CMS Page\": \"Старонка CMS\",\n  \"Link\": \"Спасылка\",\n  \"Please select a CMS page\": \"Выберыце старонку CMS\",\n  \"Please select a page reference\": \"Выберыце спасылку на старонку\",\n  \"Please enter a valid URL\": \"Калі ласка, увядзіце сапраўдны URL\",\n  \"Delete Theme\": \"Выдаліць тэму\",\n  \"Activate Theme\": \"Актываваць тэму\",\n  \"Manage Partials\": \"Кіраванне часткамі\",\n  \"No Title\": \"Без назвы\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Унікальнае імя макету, каб ужываць яго на старонцы альбо ў макеце\",\n  \"Alias\": \"Псеўданім\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Псеўданімы для кампанентаў з'яўляюцца неабходнымі і могуць складацца толькі з лацінскіх сімвалаў, лічбаў і знакаў падкрэслівання. Пачынацца павінны з лацінскага сімвала\",\n  \"Unnamed\": \"Неназваны\",\n  \"No description provided\": \"Няма апісання\",\n  \"No snippets found\": \"Фрагменты не знойдзены\",\n  \"Search...\": \"Пошук...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Фрагмент з запытаным кодам :code не знойдзены ў тэме.\",\n  \"Snippet\": \"Фрагмент\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Увядзіце код, каб зрабіць гэтую частку даступнай у выглядзе фрагмента ў рэдактарах кантэнту.\",\n  \"Please enter the snippet code\": \"Калі ласка, увядзіце фрагмент кода\",\n  \"Snippet Code\": \"Фрагмент кода\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Імя адлюстроўваецца ў спісе фрагментаў у рэдактары пры даданні фрагмента.\",\n  \"Please enter the snippet name\": \"Калі ласка, увядзіце назву фрагмента\",\n  \"Property Title\": \"Назва маёмасці\",\n  \"Please provide the property title\": \"Калі ласка, укажыце назву маёмасці\",\n  \"Code\": \"Код\",\n  \"Please provide the property name\": \"Калі ласка, увядзіце назву маёмасці\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Код аб'екта павінен пачынацца з лацінскай літары і можа ўтрымліваць толькі лацінскія літары, лічбы і сімвал падкрэслівання\",\n  \"Type\": \"Тып\",\n  \"Select\": \"Выберыце\",\n  \"String\": \"радок\",\n  \"Checkbox\": \"Сцяжок\",\n  \"Dropdown\": \"Падаць\",\n  \"Please select the property type\": \"Выберыце тып уласнасці\",\n  \"Default\": \"Па змаўчанні\",\n  \"Options\": \"Параметры\",\n  \"Define a Snippet Partial\": \"Вызначэнне частковага фрагмента\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Няправільны ключ опцыі выпадальнага меню: :ключ. Клавішы опцый могуць змяшчаць толькі лічбы, лацінскія літары і сімвалы _ і -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Апісанне адлюстроўваецца ў спісе фрагментаў у рэдактары пры даданні фрагмента.\",\n  \"Details\": \"Дэталі\"\n}"
  },
  {
    "path": "modules/cms/lang/bg/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Невалидно име на файл: :name. Имената на файловете могат да съдържат само букви и символи, долни черти, тирета и точки. Някои примери за правилни имена на файлове: page.htm, страница, поддиректория / страница',\n    'invalid_property' => 'Свойство \\': name\\' не може да се сложи.',\n    'file_already_exists' => 'Файл \\':name\\' вече съществува.',\n    'error_saving' => 'Грешка при запазване на \\':name\\'. Моля, проверете правата за записване.',\n    'error_creating_directory' => 'Грешка при създаване на директория :name. Моля, проверете правата за записване.',\n    'invalid_file_extension' => 'Невалидно разширение на файл: :invalid. Позволени разширения са: :allowed.',\n    'error_deleting' => 'Грешка при изтриване на шаблонен файл \\':name\\'. Моля, проверете правата за записване.',\n    'delete_success' => 'Шаблоните са успешно изтрити: :count.',\n    'file_name_required' => 'Полето Име на Файл е задължително.',\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Активната тема не е зададена.',\n      'not_found' => 'Активната тема не е намерена.',\n    ],\n    'edit' => [\n      'not_set' => 'Темата за редактиране не е зададена.',\n      'not_found' => 'Темата за редактиране не е намерена.',\n      'not_match' => 'Обектът, който се опитвате да достъпите, не принадлежи към темата да се редактира. Моля, презаредете страницата.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Страницата \\':name\\' не намерена.',\n    'not_found' => [\n      'label' => 'Страницата не е намерена.',\n      'help' => 'Заявената страница не може да бъде намерена.',\n    ],\n    'custom_error' => [\n      'label' => 'Грешка на страницата.',\n      'help' => 'Съжаляваме, но нещо се обърка и на страницата не може да бъде показана.',\n    ],\n    'menu_label' => 'Страници',\n    'unsaved_label' => 'Незапазена страница(и)',\n    'no_list_records' => 'Няма намерени страници.',\n    'new' => 'Нова страница',\n    'invalid_url' => 'Невалиден формат за URL. Той трябва да започне със символа за наклонена черта и може да съдържат цифри, латински букви и следните символи: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Наистина ли искате да изтриете избраните страници?',\n    'delete_confirm_single' => 'Наистина ли искате да изтриете страницата?',\n    'no_layout' => '-- няма оформление --',\n  ],\n  'layout' => [\n    'not_found_name' => 'Оформлението \\':name\\' не намерено.',\n    'menu_label' => 'Оформление',\n    'unsaved_label' => 'Незапазено оформление(я)',\n    'no_list_records' => 'Няма намерени оформления',\n    'new' => 'Ново оформление',\n    'delete_confirm_multiple' => 'Наистина ли искате да изтриете избраните оформления?',\n    'delete_confirm_single' => 'Наистина ли искате да изтриете това оформление?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Частична страница \\':name\\' не е намерена.',\n    'invalid_name' => 'Невалидно име за частична страница: :name.',\n    'menu_label' => 'Частични страници',\n    'unsaved_label' => 'Незапазени частична страница(и)',\n    'no_list_records' => 'No partials found',\n    'delete_confirm_multiple' => 'Наистина ли искате да изтриете избраните частични страници?',\n    'delete_confirm_single' => 'Наистина ли искате да изтриете тази частична страница?',\n    'new' => 'Нова частична страница',\n  ],\n  'content' => [\n    'not_found_name' => 'Файлът със съдържание \\':name\\' не е намерен.',\n    'menu_label' => 'Съдържание',\n    'unsaved_label' => 'Незапазено съдържание',\n    'no_list_records' => 'Няма намерени файлове със съдържание',\n    'delete_confirm_multiple' => 'Наистина ли искате да изтриете избраните файлове със съдържание или директории?',\n    'delete_confirm_single' => 'Наистина ли искате да изтриете този файл със съдържание?',\n    'new' => 'Нов файл със съдържание',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Невалидно име на AJAX манипулатор: :name.',\n    'not_found' => 'AJAX манипулатор \\':name\\' не е намерен.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Добави',\n    'search' => 'Търсене...',\n  ],\n  'editor' => [\n    'settings' => 'Настройки',\n    'title' => 'Заглавие',\n    'new_title' => 'Ново заглавие на страница',\n    'url' => 'URL',\n    'filename' => 'Име на файл',\n    'layout' => 'Оформление',\n    'description' => 'Описание',\n    'preview' => 'Предварителен преглед',\n    'meta' => 'Мета',\n    'meta_title' => 'Мета Заглавие',\n    'meta_description' => 'Мета Описание',\n    'markup' => 'Markup',\n    'code' => 'Код',\n    'content' => 'Съдържание',\n    'hidden' => 'Скрит',\n    'hidden_comment' => 'Скрити страници са достъпни само от логнатите регистрирани потребители.',\n    'enter_fullscreen' => 'Премини в режим на цял екран',\n    'exit_fullscreen' => 'Изход от режим на цял екран',\n  ],\n  'asset' => [\n    'menu_label' => 'Ресурси',\n    'unsaved_label' => 'Незапазени ресурс(и)',\n    'drop_down_add_title' => 'Добави...',\n    'drop_down_operation_title' => 'Действие...',\n    'upload_files' => 'Качване на файл(ове)',\n    'create_file' => 'Създай файл',\n    'create_directory' => 'Създай директория',\n    'directory_popup_title' => 'Нова директория',\n    'directory_name' => 'Име на директория',\n    'rename' => 'Преименувай',\n    'delete' => 'Изтрий',\n    'move' => 'Премести',\n    'select' => 'Избери',\n    'new' => 'Нов файл',\n    'rename_popup_title' => 'Преименувай',\n    'rename_new_name' => 'Ново име',\n    'invalid_path' => 'Пътят може да съдържа само цифри, латински букви, интервали и следните символи: ._-/',\n    'error_deleting_file' => 'Грешка при изтриване на файл :name.',\n    'error_deleting_dir_not_empty' => 'грешка при изтриване на директория :name. Директорията не е празна.',\n    'error_deleting_dir' => 'Грешка при изтриване на файл :name.',\n    'invalid_name' => 'Името може да съдържа само цифри, латински букви, интервали и следните символи: ._-',\n    'original_not_found' => 'Оригиналния файл или директория не е намерен',\n    'already_exists' => 'Файл или директория с това име вече съществува',\n    'error_renaming' => 'Грешка при преименуване на файл или директория',\n    'name_cant_be_empty' => 'Името не може да е празно',\n    'too_large' => 'Каченият файл е твърде голям. Максимално допустимия размерът на файл е :max_size',\n    'type_not_allowed' => 'Разрешени са само следните типове файлове: :allowed_types',\n    'file_not_valid' => 'Файлът не е валиден',\n    'error_uploading_file' => 'Грешка при качването на файл \\':name\\': :error',\n    'move_please_select' => 'Моля изберете',\n    'move_destination' => 'Дестинационна директория',\n    'move_popup_title' => 'Преместете Ресурси',\n    'move_button' => 'Премести',\n    'selected_files_not_found' => 'Избрани файлове не са намерени',\n    'select_destination_dir' => 'Моля изберете дестинационна директория',\n    'destination_not_found' => 'Дестинационната директория не е намерена',\n    'error_moving_file' => 'Грешка при преместването на файл :file',\n    'error_moving_directory' => 'Грешка при преместването на директория :dir',\n    'error_deleting_directory' => 'Грешка при изтриване на оригинална директория :dir',\n    'path' => 'Път',\n  ],\n  'component' => [\n    'menu_label' => 'Компоненти',\n    'invalid_request' => 'Шаблонът не може да бъде спасен, защото от невалиден данни на компонент.',\n    'no_records' => 'Няма намерени компоненти',\n    'not_found' => 'Компонентът \\':name\\' не е намерен.',\n    'method_not_found' => 'Компонентът \\':name\\' не съдържа метод \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Неизвестен тип шаблон.',\n    'not_found' => 'Заявения шаблон не е намерен.',\n    'saved' => 'Шаблонът е запазен успешно.',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Управление на съдържанието',\n    'manage_assets' => 'Управление на ресурси',\n    'manage_pages' => 'Управление на страници',\n    'manage_layouts' => 'Управление на оформления',\n    'manage_partials' => 'Управление на частични страници',\n    'manage_themes' => 'Управление на теми',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/bg.json",
    "content": "{\n  \"Themes\": \"Теми\",\n  \"Manage Themes\": \"Управление на теми\",\n  \"Customize Theme\": \"Персонализирайте Тема\",\n  \"Manage Maintenance Mode\": \"Управление на режим на поддръжка\",\n  \"View Website During Maintenance\": \"Преглед на уебсайта по време на поддръжка\",\n  \"Manage Content\": \"Управление на съдържанието\",\n  \"Manage Asset Files\": \"Управление на файлове с активи\",\n  \"Manage Pages\": \"Управление на страници\",\n  \"Manage Layouts\": \"Управление на оформления\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Конфигуриране на страницата в Режим на поддръжка и превключване на настройката.\",\n  \"Maintenance Mode\": \"Режим на поддръжка\",\n  \"Select the page to show when maintenance mode is activated.\": \"Когато е активиран, посетителите на сайта ще виждат само страницата по-долу.\",\n  \"Enable maintenance mode\": \"Активиране на Режим на поддръжка\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Режимът на поддръжка ще покаже страницата за поддръжка на посетители, които не са влезли в задната част.\",\n  \"Resources\": \"Ресурси\",\n  \"Reference assets and variables included on this page.\": \"Референтни активи и променливи, включени на тази страница.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript файл(ове) в папката активи/js\",\n  \"LESS\": \"ПО-МАЛКО\",\n  \"LESS file(s) in the assets/less folder\": \"ПО-МАЛКО файл(ове) в папката активи/по-малко\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS файл(ове) в папката активи/scss\",\n  \"Variables\": \"Променливи\",\n  \"Page variables name(s) and value(s)\": \"Име(на) на променливи на страницата и стойност(и)\",\n  \"Headers\": \"Заглавки\",\n  \"Page header name(s) and value(s)\": \"Име(на) на заглавката на страницата и стойност(и)\",\n  \"Site Picker\": \"Избор на сайт\",\n  \"Displays links for selecting a different site.\": \"Показва връзки за избор на различен сайт.\",\n  \"Unknown component\": \"Неизвестен компонент\",\n  \"View Bag\": \"Вижте чанта\",\n  \"Stores custom template properties.\": \"Съхранява персонализирани свойства на шаблона.\",\n  \"By :name\": \"По име\",\n  \"The theme ':name' is not found.\": \"Темата ':name' не е намерена.\",\n  \"Manage the front-end theme and customization options.\": \"Преглед на списъка с инсталирани теми и изберете активна тема.\",\n  \"Site Theme\": \"Front-end Тема\",\n  \"Properties\": \"Свойства\",\n  \"Publish\": \"Публикувай\",\n  \"Advanced\": \"Разширено\",\n  \"Name\": \"Име\",\n  \"New theme name\": \"Ново име на тема\",\n  \"Author Name\": \"Автор\",\n  \"Person or company name\": \"Лице или име на фирма\",\n  \"Directory Name\": \"Име на директория\",\n  \"The destination theme directory\": \"Директорията на дестинация за темата\",\n  \"Description\": \"Описание\",\n  \"Theme description\": \"Описание на Темата\",\n  \"Homepage\": \"Страница\",\n  \"Website URL\": \"Сайт адрес\",\n  \"Author Code\": \"Код на автора\",\n  \"A unique code for the author used for distribution\": \"Уникален код за автора, използван за разпространение\",\n  \"Theme Code\": \"Код\",\n  \"A unique code for this theme used for distribution\": \"Уникален код на тази тема, използвана за разпространение\",\n  \"Parent Theme\": \"Родителска тема\",\n  \"Database Mode\": \"Режим на база данни\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Запазете промените в тази тема в базата данни вместо във файловата система\",\n  \"-- no parent --\": \"-- без родител --\",\n  \"Theme\": \"Теми\",\n  \"Folders\": \"Папки\",\n  \"Please select the theme folders you would like to export\": \"Моля, изберете папката на темата, която бихте искали да изнесете\",\n  \"Theme archive file\": \"Тема архивен файл\",\n  \"Overwrite existing files\": \"Презаписване съществуващите файлове\",\n  \"Untick this box to only import new files\": \"Махнете отметката в това квадратче, за да импортирате само нови файлове\",\n  \"Please select the theme folders you would like to import\": \"Моля, изберете папката на темата, която бихте искали да внесете\",\n  \"Activate\": \"Активна\",\n  \"Customize\": \"Персонализирайте\",\n  \"Duplicate\": \"Дубликиране\",\n  \"Duplicate Theme\": \"Дубликиране на Тема\",\n  \"Theme Duplicated!\": \"Темата е успешно дубликирана!\",\n  \"Manage\": \"Управление\",\n  \"Manage Theme\": \"Управление Теми\",\n  \"Edit Properties\": \"Редактиране на свойства\",\n  \"Save Properties\": \"Запазване на свойства\",\n  \"Import\": \"Внасяне\",\n  \"Import Theme\": \"Внасяне на Тема\",\n  \"Theme Imported!\": \"Успешно внесена Тема!\",\n  \"Export\": \"Изнасяне\",\n  \"Export Theme\": \"Изнасяне на Тема\",\n  \"Delete\": \"Изтриване\",\n  \"Delete this theme? It cannot be undone!\": \"Сигурни ли сте че искате да изтриете тази тема? Това не може да бъде отменено!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Не може да се изтрие активна тема, опитайте да активирате друга тема първо.\",\n  \"Theme deleted!\": \"Успешно изтрита тема!\",\n  \"Create Theme\": \"Създай Тема\",\n  \"Create\": \"Създай\",\n  \"Create a New Blank Theme\": \"Създай нова празна тема\",\n  \"Theme Created!\": \"Успешно създадена Тема!\",\n  \"Please specify a name for the theme.\": \"Моля, задайте име за темата.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Името може да съдържа само цифри, латински букви и следните символи: _-\",\n  \"Desired theme directory already exists.\": \"Желаната директория за тема вече съществува.\",\n  \"Theme directory\": \"Тема директория\",\n  \"Provide a new directory name for the duplicated theme.\": \"Представете ново име на директория за дубликата на темата.\",\n  \"Find More Themes\": \"Намери още теми\",\n  \"Saving Theme...\": \"Запазване на Тема...\",\n  \"Return to Themes List\": \"Назад към списъка с теми\",\n  \"No themes found\": \"Няма намерени теми\",\n  \"Seed Theme\": \"Тема за семена\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Заредете определената тема с чертежи, преводи и данни.\",\n  \"Theme Seeded!\": \"Темата е поставена!\",\n  \"Select Page Link\": \"Изберете Връзка към страница\",\n  \"Search all references...\": \"Търсене във всички препратки...\",\n  \"CMS Page\": \"CMS страница\",\n  \"Link\": \"Връзка\",\n  \"Please select a CMS page\": \"Моля, изберете CMS страница\",\n  \"Please select a page reference\": \"Моля, изберете препратка към страница\",\n  \"Please enter a valid URL\": \"Моля, въведете валиден URL адрес\",\n  \"Delete Theme\": \"Изтриване на тема\",\n  \"Activate Theme\": \"Активиране на темата\",\n  \"Manage Partials\": \"Управление на части\",\n  \"No Title\": \"Без заглавие\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Уникално име е дадено на този компонент, когато се използва в кода на страница или оформление.\",\n  \"Alias\": \"Псевдоним\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Компонент псевдоними са задължителни и могат да съдържат само латински символи, цифри и долна черта. Псевдонимите трябва да започнат с латински символ\",\n  \"Unnamed\": \"Без име\",\n  \"No description provided\": \"Няма дадено описание\",\n  \"No snippets found\": \"Няма намерени фрагменти\",\n  \"Search...\": \"Търсене...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Фрагментът с искания код :code не беше намерен в темата.\",\n  \"Snippet\": \"фрагмент\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Въведете код, за да направите тази част достъпна като фрагмент в редакторите на съдържание.\",\n  \"Please enter the snippet code\": \"Моля, въведете кода на фрагмента\",\n  \"Snippet Code\": \"Код на фрагмента\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Името се показва в списъка с фрагменти в редактора, когато се добави фрагмент.\",\n  \"Please enter the snippet name\": \"Моля, въведете името на фрагмента\",\n  \"Property Title\": \"Заглавие на имота\",\n  \"Please provide the property title\": \"Моля, посочете името на имота\",\n  \"Code\": \"Код\",\n  \"Please provide the property name\": \"Моля, посочете името на имота\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Кодът на имота трябва да започва с латинска буква и може да съдържа само латински букви, цифри и долна черта\",\n  \"Type\": \"Тип\",\n  \"Select\": \"Изберете\",\n  \"String\": \"низ\",\n  \"Checkbox\": \"Квадратче за отметка\",\n  \"Dropdown\": \"Падащо меню\",\n  \"Please select the property type\": \"Моля, изберете типа на имота\",\n  \"Default\": \"По подразбиране\",\n  \"Options\": \"Настроики\",\n  \"Define a Snippet Partial\": \"Дефиниране на частичен фрагмент\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Невалиден ключ за падаща опция: :ключ. Клавишите с опции могат да съдържат само цифри, латински букви и знаци _ и -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Описанието се показва в списъка с фрагменти в редактора, когато се добави фрагмент.\",\n  \"Details\": \"Подробности\",\n  \"Frontend Theme\": \"Front-end Тема\"\n}"
  },
  {
    "path": "modules/cms/lang/ca/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nom d\\'arxiu invàlid: :name. Els noms d\\'arxiu només poden contenir símbols alfanumèrics, subratllats, guions i punts. Exemples de noms d\\'arxiu correctes: pagina.htm, pagina, subdirectori/pagina',\n    'invalid_property' => 'No es pot establir a propietat \\':name\\'',\n    'file_already_exists' => 'L\\'arxiu \\':name\\' ja existeix.',\n    'error_saving' => 'Error guardant l\\'arxiu \\':name\\'. Si us plau revisa els permisos d\\'escriptura.',\n    'error_creating_directory' => 'Error creant el directori \\':name\\'. Si us plau revisa els permisos d\\'escriptura.',\n    'invalid_file_extension' => 'Extensió d\\'arxiu invàlida: :invalid. Extensions permeses: :allowed.',\n    'error_deleting' => 'Error eliminant l\\'arxiu de plantilla \\':name\\'. Si us plau revisa els permisos d\\'escriptura.',\n    'delete_success' => 'Plantilles eliminades: :count.',\n    'file_name_required' => 'El camp \\'Nom d\\'arxiu\\' és obligatori.',\n    'safe_mode_enabled' => 'El mode segur està activat.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Lloc web',\n      'online' => 'Online',\n      'maintenance' => 'En manteniment',\n      'manage_themes' => 'Gestionar temes',\n      'customize_theme' => 'Personalitzar tema',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'No s\\'ha establit un tema actiu.',\n      'not_found' => 'No s\\'ha trobat el tema actiu.',\n    ],\n    'edit' => [\n      'not_set' => 'No s\\'ha establit un tema d\\'edició.',\n      'not_found' => 'No s\\'ha trobat el tema d\\'edició.',\n      'not_match' => 'L\\'objecte al que estàs intentant accedir no pertany al tema que estàs editant. Si us plau recarrega la pàgina.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'La pàgina \\':name\\' no s\\'ha trobat',\n    'not_found' => [\n      'label' => 'Pàgina no trobada',\n      'help' => 'La pàgina demanada no es pot trobar.',\n    ],\n    'custom_error' => [\n      'label' => 'Error de pàgina',\n      'help' => 'Ens sap greu, però alguna cosa ha anat malament i la pàgina no es pot mostrar.',\n    ],\n    'menu_label' => 'Pàgines',\n    'unsaved_label' => 'Pàgines no guardades',\n    'no_list_records' => 'No s\\'han trobat pàgines',\n    'new' => 'Nova pàgina',\n    'invalid_url' => 'Format d\\'URL invàlid. La URL ha de començar amb el símbol / i pot contenir números, lletres llatines i els següents símbols: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Eliminar pàgines seleccionades?',\n    'delete_confirm_single' => 'Eliminar aquesta pàgina?',\n    'no_layout' => '-- sense plantilla --',\n    'title' => 'Títol de pàgina',\n    'url' => 'URL de pàgina',\n    'file_name' => 'Nom de l\\'arxiu de pàgina',\n  ],\n  'layout' => [\n    'not_found_name' => 'La plantilla \\':name\\' no s\\'ha trobat',\n    'menu_label' => 'Plantilles',\n    'unsaved_label' => 'Plantilles no guardades',\n    'no_list_records' => 'No s\\'han trobat plantilles',\n    'new' => 'Nova plantilla',\n    'delete_confirm_multiple' => 'Eliminar plantilles seleccionades?',\n    'delete_confirm_single' => 'Eliminar aquesta plantilla?',\n  ],\n  'partial' => [\n    'not_found_name' => 'El parcial \\':name\\' no s\\'ha trobat.',\n    'invalid_name' => 'Nom de parcial invàlid: :name.',\n    'menu_label' => 'Parcials',\n    'unsaved_label' => 'Parcials no guardats',\n    'no_list_records' => 'No s\\'han trobat parcials',\n    'delete_confirm_multiple' => 'Eliminar parcials seleccionats?',\n    'delete_confirm_single' => 'Eliminar aquest parcial?',\n    'new' => 'Nou parcial',\n  ],\n  'content' => [\n    'not_found_name' => 'L\\'arxiu de contingut \\':name\\' no s\\'ha trobat.',\n    'menu_label' => 'Contingut',\n    'unsaved_label' => 'Contingut no guardat',\n    'no_list_records' => 'No s\\'han trobat arxius de contingut',\n    'delete_confirm_multiple' => 'Eliminar arxius o directoris de contingut seleccionats?',\n    'delete_confirm_single' => 'Eliminar aquest arxiu de contingut?',\n    'new' => 'Nou arxiu de contingut',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Nom de manipulador d\\'AJAX invàlid: :name.',\n    'not_found' => 'El manipulador d\\'AJAX \\':name\\' no s\\'ha trobat.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Afegir',\n    'search' => 'Cercar...',\n  ],\n  'editor' => [\n    'settings' => 'Opcions',\n    'title' => 'Títol',\n    'new_title' => 'Nou títol de pàgina',\n    'url' => 'URL',\n    'filename' => 'Nom d\\'arxiu',\n    'layout' => 'Plantilla',\n    'description' => 'Descripció',\n    'preview' => 'Previsualitzar',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta títol',\n    'meta_description' => 'Meta descripció',\n    'markup' => 'Marcat',\n    'code' => 'Codi',\n    'content' => 'Contingut',\n    'hidden' => 'Amagat',\n    'hidden_comment' => 'Les pàgines amagades només són accessibles pels usuaris connectats a l\\'àrea d\\'administració.',\n    'enter_fullscreen' => 'Activar mode de pàgina completa',\n    'exit_fullscreen' => 'Sortir del mode de pàgina completa',\n    'open_searchbox' => 'Obrir caixa de cerca',\n    'open_replacebox' => 'Obrir caixa de substitució',\n  ],\n  'asset' => [\n    'menu_label' => 'Recursos',\n    'unsaved_label' => 'Recursos no guardats',\n    'drop_down_add_title' => 'Afegir...',\n    'drop_down_operation_title' => 'Acció...',\n    'upload_files' => 'Pujar arxius',\n    'create_file' => 'Crear arxiu',\n    'create_directory' => 'Crear directori',\n    'directory_popup_title' => 'Nou directori',\n    'directory_name' => 'Nom del directori',\n    'rename' => 'Reanomenar',\n    'delete' => 'Eliminar',\n    'move' => 'Moure',\n    'select' => 'Seleccionar',\n    'new' => 'Nou arxiu',\n    'rename_popup_title' => 'Reanomenar',\n    'rename_new_name' => 'Nou nom',\n    'invalid_path' => 'La ruta només pot contenir números, lletres llatines, espais i els símbols: ._-/',\n    'error_deleting_file' => 'Error eliminant l\\'arxiu :name.',\n    'error_deleting_dir_not_empty' => 'Error eliminant el directori :name. El directori no està buit.',\n    'error_deleting_dir' => 'Error eliminant el directori :name.',\n    'invalid_name' => 'El nom només pot contenir números, lletres llatines, espais i els símbols: ._-',\n    'original_not_found' => 'No s\\'ha trobat l\\'arxiu o directori original',\n    'already_exists' => 'Ja existeix un arxiu o directori amb aquest nom',\n    'error_renaming' => 'Error reanomenant l\\'arxiu o directori',\n    'name_cant_be_empty' => 'El nom no pot estar buit',\n    'too_large' => 'L\\'arxiu pujat és massa gran. La mida màxima d\\'arxiu és :max_size',\n    'type_not_allowed' => 'Només es permeten els següents tipus d\\'arxiu: :allowed_types',\n    'file_not_valid' => 'L\\'arxiu no és vàlid',\n    'error_uploading_file' => 'Error pujant l\\'arxiu \\':name\\': :error',\n    'move_please_select' => 'si us plau selecciona',\n    'move_destination' => 'Directori de destí',\n    'move_popup_title' => 'Moure recursos',\n    'move_button' => 'Moure',\n    'selected_files_not_found' => 'No s\\'han trobat els arxius seleccionats',\n    'select_destination_dir' => 'Si us plau selecciona un directori de destí',\n    'destination_not_found' => 'No s\\'ha trobat el directori de destí',\n    'error_moving_file' => 'Error movent l\\'arxiu :file',\n    'error_moving_directory' => 'Error movent el directori :dir',\n    'error_deleting_directory' => 'Error eliminant el directori original :dir',\n    'no_list_records' => 'No s\\'han trobat arxius',\n    'delete_confirm' => 'Eliminar els arxius o directoris seleccionats?',\n    'path' => 'Ruta',\n  ],\n  'component' => [\n    'menu_label' => 'Components',\n    'invalid_request' => 'La plantilla no es pot guardar perquè conté dades de components invàlides.',\n    'no_records' => 'No s\\'han trobat components',\n    'not_found' => 'No s\\'ha trobat el component \\':name\\'.',\n    'method_not_found' => 'El component \\':name\\' no conté un mètode \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Tipus de plantilla desconegut.',\n    'not_found' => 'No s\\'ha trobat la plantilla.',\n    'saved' => 'Plantilla guardada.',\n    'no_list_records' => 'No s\\'han trobat registres',\n    'delete_confirm' => 'Eliminar les plantilles seleccionades?',\n    'order_by' => 'Ordenar per',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Gestionar els arxius de contingut del lloc web',\n    'manage_assets' => 'Gestionar els recursos del lloc web - imatges, arxius JavaScript, arxius CSS',\n    'manage_pages' => 'Crear, modificar i eliminar pàgines del lloc web',\n    'manage_layouts' => 'Crear, modificar i eliminar plantilles del CMS',\n    'manage_partials' => 'Crear, modificar i eliminar parcials del CMS',\n    'manage_themes' => 'Activar, desactivar and configurar temes del CMS',\n    'manage_theme_options' => 'Configurar opcions de personalització pel tema actiu',\n  ],\n  'theme_log' => [\n    'hint' => 'Aquest registre mostra els canvis fets al tema des de l\\'àrea d\\'administració.',\n    'menu_label' => 'Registre del tema',\n    'menu_description' => 'Veure canvis fets al tema actiu.',\n    'empty_link' => 'Buidar registre del tema',\n    'empty_loading' => 'Buidant registre del tema...',\n    'empty_success' => 'Registre del tema buit!',\n    'return_link' => 'Tornar al registre del tema',\n    'id' => 'ID',\n    'id_label' => 'ID del registre',\n    'created_at' => 'Data i hora',\n    'user' => 'Usuari',\n    'type' => 'Tipus',\n    'type_create' => 'Crear',\n    'type_update' => 'Modificar',\n    'type_delete' => 'Eliminar',\n    'theme_name' => 'Tema',\n    'theme_code' => 'Codi del tema',\n    'old_template' => 'Plantilla (antiga)',\n    'new_template' => 'Plantilla (nova)',\n    'template' => 'Plantilla',\n    'diff' => 'Canvis',\n    'old_value' => 'Valor antic',\n    'new_value' => 'Valor nou',\n    'preview_title' => 'Canvis de la plantilla',\n    'template_updated' => 'La plantilla s\\'ha modificat',\n    'template_created' => 'La plantilla s\\'ha creat',\n    'template_deleted' => 'La plantilla s\\'ha eliminat',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/ca.json",
    "content": "{\n  \"Themes\": \"Temes\",\n  \"Manage Themes\": \"Gestionar temes\",\n  \"Customize Theme\": \"Personalitzar tema\",\n  \"Manage Maintenance Mode\": \"Gestionar el mode de manteniment\",\n  \"View Website During Maintenance\": \"Veure lloc web durant el manteniment\",\n  \"Manage Content\": \"Gestionar continguts\",\n  \"Manage Asset Files\": \"Gestionar fitxers d'actius\",\n  \"Manage Pages\": \"Gestionar pàgines\",\n  \"Manage Layouts\": \"Gestiona els dissenys\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configura el mode de manteniment i canvia l'activació.\",\n  \"Maintenance Mode\": \"Mode de manteniment\",\n  \"Select the page to show when maintenance mode is activated.\": \"Selecciona la pàgina per mostrar quan el mode de manteniment està activat.\",\n  \"Enable maintenance mode\": \"Activar el mode de manteniment\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"El mode de manteniment mostrarà la pàgina de manteniment als visitants que no hagin accedit a l'àrea d'administració.\",\n  \"Resources\": \"Recursos\",\n  \"Reference assets and variables included on this page.\": \"Actius i variables de referència inclosos en aquesta pàgina.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Fitxer(s) JavaScript a la carpeta assets/js\",\n  \"LESS\": \"MENYS\",\n  \"LESS file(s) in the assets/less folder\": \"MENYS fitxer(s) a la carpeta actius/menys\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Fitxer(s) SCSS a la carpeta assets/scss\",\n  \"Variables\": \"Les variables\",\n  \"Page variables name(s) and value(s)\": \"Nom(s) i valor(s) de les variables de pàgina\",\n  \"Headers\": \"Capçaleres\",\n  \"Page header name(s) and value(s)\": \"Nom(s) i valor(s) de la capçalera de la pàgina\",\n  \"Site Picker\": \"Selector de llocs\",\n  \"Displays links for selecting a different site.\": \"Mostra enllaços per seleccionar un lloc diferent.\",\n  \"Unknown component\": \"Component desconegut\",\n  \"View Bag\": \"Veure bossa\",\n  \"Stores custom template properties.\": \"Emmagatzema propietats de plantilla personalitzades.\",\n  \"By :name\": \"Per :name\",\n  \"The theme ':name' is not found.\": \"No s'ha trobat el tema ':name'.\",\n  \"Manage the front-end theme and customization options.\": \"Gestionar el tema de front-end i les opcions de personalització.\",\n  \"Site Theme\": \"Tema de front-end\",\n  \"Properties\": \"Propietats\",\n  \"Publish\": \"Publicar\",\n  \"Advanced\": \"Avançat\",\n  \"Name\": \"Nom\",\n  \"New theme name\": \"Nou nom del tema\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Persona o companyia\",\n  \"Directory Name\": \"Nom del directori\",\n  \"The destination theme directory\": \"El directori de destí del tema\",\n  \"Description\": \"Descripció\",\n  \"Theme description\": \"Descripció del tema\",\n  \"Homepage\": \"Lloc web\",\n  \"Website URL\": \"URL del lloc web\",\n  \"Author Code\": \"Codi d'autor\",\n  \"A unique code for the author used for distribution\": \"Un codi únic per a l'autor utilitzat per a la distribució\",\n  \"Theme Code\": \"Codi\",\n  \"A unique code for this theme used for distribution\": \"Un codi únic per aquest tema utilitzat per a la distribució\",\n  \"Parent Theme\": \"Tema principal\",\n  \"Database Mode\": \"Mode base de dades\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Deseu els canvis a aquest tema a la base de dades en lloc del sistema de fitxers\",\n  \"-- no parent --\": \"-- sense pares --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Carpetes\",\n  \"Please select the theme folders you would like to export\": \"Si us plau selecciona les carpetes del tema que vols exportar\",\n  \"Theme archive file\": \"Arxiu de tema\",\n  \"Overwrite existing files\": \"Sobreescriure arxius existents\",\n  \"Untick this box to only import new files\": \"Desmarca aquesta casella per importar només arxius nous\",\n  \"Please select the theme folders you would like to import\": \"Si us plau selecciona les carpetes del tema que vols importar\",\n  \"Activate\": \"Activar\",\n  \"Customize\": \"Personalitzar\",\n  \"Duplicate\": \"Duplicar\",\n  \"Duplicate Theme\": \"Duplicar tema\",\n  \"Theme Duplicated!\": \"Tema duplicat!\",\n  \"Manage\": \"Gestionar\",\n  \"Manage Theme\": \"Gestionar el tema\",\n  \"Edit Properties\": \"Editar propietats\",\n  \"Save Properties\": \"Guardar propietats\",\n  \"Import\": \"Importar\",\n  \"Import Theme\": \"Importar tema\",\n  \"Theme Imported!\": \"Tema importat!\",\n  \"Export\": \"Exportar\",\n  \"Export Theme\": \"Exportar tema\",\n  \"Delete\": \"Eliminar\",\n  \"Delete this theme? It cannot be undone!\": \"Eliminar aquest tema? No es pot desfer!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"No es pot eliminar el tema actiu, estableix un altre tema com a actiu primer.\",\n  \"Theme deleted!\": \"Tema eliminat!\",\n  \"Create Theme\": \"Crear tema\",\n  \"Create\": \"Crear\",\n  \"Create a New Blank Theme\": \"Crear un nou tema buit\",\n  \"Theme Created!\": \"Tema creat!\",\n  \"Please specify a name for the theme.\": \"Si us plau indica un nom pel nou tema.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"El nom només pot contenir números, lletres llatines i els següents símbols: _-\",\n  \"Desired theme directory already exists.\": \"El nom de directori desitjat ja existeix.\",\n  \"Theme directory\": \"Directori del tema\",\n  \"Provide a new directory name for the duplicated theme.\": \"Indica un nou nom de directori per al tema duplicat.\",\n  \"Find More Themes\": \"Trobar més temes\",\n  \"Saving Theme...\": \"Guardant tema...\",\n  \"Return to Themes List\": \"Tornar a la llista de temes\",\n  \"No themes found\": \"No s'han trobat temes\",\n  \"Seed Theme\": \"Tema de llavors\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Introdueix el tema especificat amb plànols, traduccions i dades.\",\n  \"Theme Seeded!\": \"Tema sembrat!\",\n  \"Select Page Link\": \"Seleccioneu Enllaç de pàgina\",\n  \"Search all references...\": \"Cerca totes les referències...\",\n  \"CMS Page\": \"Pàgina de CMS\",\n  \"Link\": \"Enllaç\",\n  \"Please select a CMS page\": \"Seleccioneu una pàgina CMS\",\n  \"Please select a page reference\": \"Seleccioneu una referència de pàgina\",\n  \"Please enter a valid URL\": \"Introduïu un URL vàlid\",\n  \"Delete Theme\": \"Suprimeix el tema\",\n  \"Activate Theme\": \"Activa el tema\",\n  \"Manage Partials\": \"Gestionar parcials\",\n  \"No Title\": \"Sense títol\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Un nom únic assignat a aquest component per utilitzar-lo al codi de la pàgina o plantilla.\",\n  \"Alias\": \"Alies\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Els àlies de components són obligatoris i només poden contenir lletres llatines, números i subratllats. Han de començar amb una lletra.\",\n  \"Unnamed\": \"Sense nom\",\n  \"No description provided\": \"No s'ha proveït una descripció\",\n  \"No snippets found\": \"No s'ha trobat cap fragment\",\n  \"Search...\": \"Cerca...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"No s'ha trobat el fragment amb el codi sol·licitat :code al tema.\",\n  \"Snippet\": \"Fragment\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Introduïu un codi per fer que aquest parcial estigui disponible com a fragment als editors de contingut.\",\n  \"Please enter the snippet code\": \"Introduïu el codi del fragment\",\n  \"Snippet Code\": \"Codi de fragment\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"El nom es mostra a la llista de fragments de l'editor quan s'afegeix un fragment.\",\n  \"Please enter the snippet name\": \"Introduïu el nom del fragment\",\n  \"Property Title\": \"Títol de la propietat\",\n  \"Please provide the property title\": \"Si us plau, proporcioneu el títol de la propietat\",\n  \"Code\": \"Codi\",\n  \"Please provide the property name\": \"Proporcioneu el nom de la propietat\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"El codi de propietat ha de començar amb una lletra llatina i només pot contenir lletres llatines, dígits i guions baixos\",\n  \"Type\": \"Tipus\",\n  \"Select\": \"Seleccioneu\",\n  \"String\": \"Corda\",\n  \"Checkbox\": \"casella de selecció\",\n  \"Dropdown\": \"Menú desplegable\",\n  \"Please select the property type\": \"Seleccioneu el tipus de propietat\",\n  \"Default\": \"Per defecte\",\n  \"Options\": \"Opcions\",\n  \"Define a Snippet Partial\": \"Definiu un fragment parcial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Clau d'opció desplegable no vàlida: :key. Les tecles d'opció només poden contenir dígits, lletres llatines i caràcters _ i -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"La descripció es mostra a la llista de fragments de l'editor quan s'afegeix un fragment.\",\n  \"Details\": \"Detalls\"\n}"
  },
  {
    "path": "modules/cms/lang/cs/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Neplatný název souboru: :name. Názvy souborů mohou obsahovat pouze alfanumerické symboly, podtržítka, pomlčky a tečky. Některé příklady správných názvů souborů: stranka.htm, stranka, adresar/stranka',\n    'invalid_property' => 'Parametr \\':name\\' není možno nastavit',\n    'file_already_exists' => 'Soubor \\':name\\' již existuje.',\n    'error_saving' => 'Chyba ukládání souboru \\':name\\'. Zkontrolujte práva k zápisu.',\n    'error_creating_directory' => 'Chyba vytváření složky :name. Zkontrolujte práva k zápisu.',\n    'invalid_file_extension' => 'Chybná přípona souboru: :invalid. Povolené přípony jsou: :allowed.',\n    'error_deleting' => 'Chyba mazání souboru s šablonou \\':name\\'. Zkontrolujte práva k zápisu.',\n    'delete_success' => 'Šablony úspěšně smazány: :count.',\n    'file_name_required' => 'Je nutno vyplnit Název souboru.',\n    'safe_mode_enabled' => 'Bezpěčný režim (safe mode) je aktivní.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Webová stránka',\n      'online' => 'Online',\n      'maintenance' => 'Probíhá údržba',\n      'manage_themes' => 'Spravovat témata vzhledu',\n      'customize_theme' => 'Upravit téma vzhledu',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktivní téma nebylo nastaveno.',\n      'not_found' => 'Aktivní téma nebylo nalezeno.',\n    ],\n    'edit' => [\n      'not_set' => 'Editované téma nebylo uloženo.',\n      'not_found' => 'Editované téma nebylo nalezeno.',\n      'not_match' => 'Objekt který chcete právě zobrazit nepatří do téma, které nyní editujete. Prosím obnovte stránku.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Stránka \\':name\\' nebyla nalezena',\n    'not_found' => [\n      'label' => 'Stránka nenalezena',\n      'help' => 'Požadovaná stránka nebyla nalezena.',\n    ],\n    'custom_error' => [\n      'label' => 'Chyba stránky',\n      'help' => 'Omlouváme se, ale požadovaná stránka nelze zobrazit z důvodu nějaké chyby.',\n    ],\n    'menu_label' => 'Stránky',\n    'unsaved_label' => 'Neuložené stránky',\n    'no_list_records' => 'Žádné stránky',\n    'new' => 'Nová stránka',\n    'invalid_url' => 'Špatný formát URL. URL musí začínat lomítkem a může obsahovat pouze číslice, písmena a následující znaky: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Opravdu chcete odstranit vybrané stránky?',\n    'delete_confirm_single' => 'Opravdu chcete odstranit tuto stránku?',\n    'no_layout' => '-- žádný layout --',\n    'title' => 'Název stránky',\n    'url' => 'URL stránky',\n    'file_name' => 'Název souboru stránky',\n  ],\n  'layout' => [\n    'not_found_name' => 'Layout \\':name\\' nebyl nalezen',\n    'menu_label' => 'Layouty',\n    'unsaved_label' => 'Neuložený layout(y)',\n    'no_list_records' => 'Žádné layouty nebyly nalezeny',\n    'new' => 'Nový layout',\n    'delete_confirm_multiple' => 'Opravdu chcete odstranit vybrané layouty?',\n    'delete_confirm_single' => 'Opravdu chcete odstranit tento layout?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Dílčí šablona \\':name\\' nebyla nalezena.',\n    'invalid_name' => 'Chybný název dílčí šablony: :name.',\n    'menu_label' => 'Dílčí šablony',\n    'unsaved_label' => 'Neuložené dílčí šablony',\n    'no_list_records' => 'Žádné dílčí šablony',\n    'delete_confirm_multiple' => 'Opravdu chcete smazat tyto dílčí šablony?',\n    'delete_confirm_single' => 'Opravdu chcete smazat tuto dílčí šablonu?',\n    'new' => 'Nová šablona',\n  ],\n  'content' => [\n    'not_found_name' => 'Obsahový soubor \\':name\\' nebyl nalezen.',\n    'menu_label' => 'Obsahy',\n    'unsaved_label' => 'Neuložený obsah',\n    'no_list_records' => 'Žádné obsahové soubory',\n    'delete_confirm_multiple' => 'Opravdu chcete smazat tyto obsahové soubory nebo složky?',\n    'delete_confirm_single' => 'Opravdu chcete smazat tento obsahový soubor?',\n    'new' => 'Žádný obsahový soubor',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Neplatný název AJAX handleru: :name.',\n    'not_found' => 'AJAX handler \\':name\\' nebyl nalezen.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Přidat',\n    'search' => 'Hledat...',\n  ],\n  'editor' => [\n    'settings' => 'Nastavení',\n    'title' => 'Název souboru',\n    'new_title' => 'Nový název souboru',\n    'url' => 'URL',\n    'filename' => 'Název souboru',\n    'layout' => 'Layout',\n    'description' => 'Popisek',\n    'preview' => 'Náhled',\n    'meta' => 'Meta údaje',\n    'meta_title' => 'Meta Nadpis (Title)',\n    'meta_description' => 'Meta Popisek (Description)',\n    'markup' => 'Kód',\n    'code' => 'PHP kód',\n    'content' => 'Obsah',\n    'hidden' => 'Skrytý',\n    'hidden_comment' => 'Skryté stránky jsou dostupné pouze přihlášeným administrátorům pro náhled.',\n    'enter_fullscreen' => 'Zapnout režim celé obrazovky',\n    'exit_fullscreen' => 'Opustit režim celé obrazovky',\n    'open_searchbox' => 'Otevřít box hledávání',\n    'open_replacebox' => 'Otevřít box nahrazování',\n  ],\n  'asset' => [\n    'menu_label' => 'Soubory',\n    'unsaved_label' => 'Neuložené soubory',\n    'drop_down_add_title' => 'Přidat...',\n    'drop_down_operation_title' => 'Akce...',\n    'upload_files' => 'Nahrát soubor(y)',\n    'create_file' => 'Vytvořit soubor',\n    'create_directory' => 'Vytvořit složku',\n    'directory_popup_title' => 'Vytvoření nové složky',\n    'directory_name' => 'Název složky',\n    'rename' => 'Přejmenovat',\n    'delete' => 'Smazat',\n    'move' => 'Přesunout',\n    'select' => 'Vybrat',\n    'new' => 'Nový soubor',\n    'rename_popup_title' => 'Přejmenovat',\n    'rename_new_name' => 'Nový název',\n    'invalid_path' => 'Cesta může obsahovat pouze číslice, písmena, mezery nebo následující znaky: ._-/',\n    'error_deleting_file' => 'Chyba mazání souboru :name.',\n    'error_deleting_dir_not_empty' => 'Chyba mazání složky :name. Složka není prázdná.',\n    'error_deleting_dir' => 'Chyba mazání souboru :name.',\n    'invalid_name' => 'Název může obsahovat pouze číslice, písmena, mezery a následující soubory: ._-',\n    'original_not_found' => 'Původní soubor nebo složka neexistují',\n    'already_exists' => 'Soubor nebo složka s tímto názvem již existují',\n    'error_renaming' => 'Chyba přejmenovávání souboru nebo složky',\n    'name_cant_be_empty' => 'Název nemůže být prázdný',\n    'too_large' => 'Nahrávaný soubor je příliš veliký. Maximální povolená velikost je :max_size',\n    'type_not_allowed' => 'Je možno nahrávat pouze tyto typy souborů: :allowed_types',\n    'file_not_valid' => 'Soubor není validní',\n    'error_uploading_file' => 'Chyba nahrávání souboru \\':name\\': :error',\n    'move_please_select' => 'prosím vyberte',\n    'move_destination' => 'Cílová složka',\n    'move_popup_title' => 'Přesunutí souborů',\n    'move_button' => 'Přesunout',\n    'selected_files_not_found' => 'Vybrané soubory nebyly nalezeny',\n    'select_destination_dir' => 'Vyberte cílovou složku',\n    'destination_not_found' => 'Cílová složka nebyla nalezena',\n    'error_moving_file' => 'Chyba přesunu souboru :file',\n    'error_moving_directory' => 'Chyba přesunu složky :dir',\n    'error_deleting_directory' => 'Chyba přesunu původní složky :dir',\n    'no_list_records' => 'Žádné soubory nebyly nalezeny',\n    'delete_confirm' => 'Opravdu chcete smazat vybrané soubory nebo adresáře?',\n    'path' => 'Cesta',\n  ],\n  'component' => [\n    'menu_label' => 'Komponenty',\n    'invalid_request' => 'Šablona nemohla být uložena, protože jedna z komponent nemá správně vyplněná data.',\n    'no_records' => 'Žádná komponenta',\n    'not_found' => 'Komponenta \\':name\\' nebyla nalezena.',\n    'method_not_found' => 'Komponenta \\':name\\' nemá metodu \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Neznámý typ šablony.',\n    'not_found' => 'Požadovaná šablona nebyla nalezena.',\n    'saved' => 'Šablona byla úspěšně uložena.',\n    'no_list_records' => 'Žádné záznamy nebyly nalezeny',\n    'delete_confirm' => 'Smazat vybraná témata?',\n    'order_by' => 'Řadit podle',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Správa obsahu',\n    'manage_assets' => 'Správa souborů',\n    'manage_pages' => 'Správa stránek',\n    'manage_layouts' => 'Správa layoutů',\n    'manage_partials' => 'Správa dílčích šablon',\n    'manage_themes' => 'Správa témat',\n    'manage_theme_options' => 'Nastavit možnosti přizpůsobení pro aktivní téma',\n  ],\n  'theme_log' => [\n    'hint' => 'Tento protokol zobrazuje změny v tématu provedené administrátory v administraci.',\n    'menu_label' => 'Protokol témat',\n    'menu_description' => 'Zobrazení změn v aktivním tématu.',\n    'empty_link' => 'Smazat protokol témat',\n    'empty_loading' => 'Mazání protokolu témat...',\n    'empty_success' => 'Protokol témat byl smazán',\n    'return_link' => 'Zpět na protokol témat',\n    'id' => 'ID',\n    'id_label' => 'ID protokolu',\n    'created_at' => 'Datum a čas',\n    'user' => 'Uživatel',\n    'type' => 'Typ',\n    'type_create' => 'Vytvořeno',\n    'type_update' => 'Změněno',\n    'type_delete' => 'Smazáno',\n    'theme_name' => 'Téma',\n    'theme_code' => 'Kód tématu',\n    'old_template' => 'Šablona (Původní)',\n    'new_template' => 'Šablona (Nová)',\n    'template' => 'Šablona',\n    'diff' => 'Změny',\n    'old_value' => 'Původní hodnota',\n    'new_value' => 'Nová hodnota',\n    'preview_title' => 'Změny šablony',\n    'template_updated' => 'Šablona byla aktualizována',\n    'template_created' => 'Šablona byla vytvořena',\n    'template_deleted' => 'Šablona byla smazána',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/cs.json",
    "content": "{\n  \"Themes\": \"Téma\",\n  \"Manage Themes\": \"Správa motivů\",\n  \"Customize Theme\": \"Přizpůsobení téma\",\n  \"Manage Maintenance Mode\": \"Správa režimu údržby\",\n  \"View Website During Maintenance\": \"Zobrazit web během údržby\",\n  \"Manage Content\": \"Správa obsahu\",\n  \"Manage Asset Files\": \"Správa souborů aktiv\",\n  \"Manage Pages\": \"Správa stránek\",\n  \"Manage Layouts\": \"Správa rozvržení\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Nastavte stránku režimu údržby a její nastavení.\",\n  \"Maintenance Mode\": \"Režim údržby\",\n  \"Select the page to show when maintenance mode is activated.\": \"Pokud je režim údržby aktivní, uživatelé uvidí stránku vybranou níže.\",\n  \"Enable maintenance mode\": \"Aktivovat režim údržby\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Režim údržby zobrazí stránku údržby návštěvníkům, kteří nejsou přihlášeni do administrace.\",\n  \"Resources\": \"Zdroje\",\n  \"Reference assets and variables included on this page.\": \"Referenční aktiva a proměnné zahrnuté na této stránce.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Soubor(y) JavaScript ve složce aktiv/js\",\n  \"LESS\": \"MÉNĚ\",\n  \"LESS file(s) in the assets/less folder\": \"MÉNĚ souborů ve složce aktiv/méně\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Soubor(y) SCSS ve složce aktiv/scss\",\n  \"Variables\": \"Proměnné\",\n  \"Page variables name(s) and value(s)\": \"Názvy a hodnoty proměnných stránky\",\n  \"Headers\": \"Záhlaví\",\n  \"Page header name(s) and value(s)\": \"Názvy a hodnoty záhlaví stránky\",\n  \"Site Picker\": \"Výběr webu\",\n  \"Displays links for selecting a different site.\": \"Zobrazí odkazy pro výběr jiného webu.\",\n  \"Unknown component\": \"Neznámá součást\",\n  \"View Bag\": \"Zobrazit tašku\",\n  \"Stores custom template properties.\": \"Ukládá vlastnosti vlastní šablony.\",\n  \"By :name\": \"Vytvořil :name\",\n  \"The theme ':name' is not found.\": \"Téma ':name' nebylo nalezeno.\",\n  \"Manage the front-end theme and customization options.\": \"Náhledy instalovaných témat a výběr aktivního téma.\",\n  \"Site Theme\": \"Témata vzhledu\",\n  \"Properties\": \"Parametry\",\n  \"Publish\": \"Publikovat\",\n  \"Advanced\": \"Pokročilý\",\n  \"Name\": \"Název\",\n  \"New theme name\": \"Název nového téma\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Jméno osoby, nebo firmy\",\n  \"Directory Name\": \"Název složky\",\n  \"The destination theme directory\": \"Název cílové složky pro uložení téma\",\n  \"Description\": \"Popisek\",\n  \"Theme description\": \"Popište svoje téma\",\n  \"Homepage\": \"Domovská stránka\",\n  \"Website URL\": \"URL domovské stránky\",\n  \"Author Code\": \"Autorský kód\",\n  \"A unique code for the author used for distribution\": \"Jedinečný kód autora použitý k distribuci\",\n  \"Theme Code\": \"Kód\",\n  \"A unique code for this theme used for distribution\": \"Unikátní kód téma pro distribuci aktualizační sítí\",\n  \"Parent Theme\": \"Nadřazené téma\",\n  \"Database Mode\": \"Režim databáze\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Uložte změny tohoto motivu do databáze místo do souborového systému\",\n  \"-- no parent --\": \"-- žádný rodič --\",\n  \"Theme\": \"Téma\",\n  \"Folders\": \"Složky\",\n  \"Please select the theme folders you would like to export\": \"Vyberte prosím složky, které chcete exportovat\",\n  \"Theme archive file\": \"Soubor s tématem\",\n  \"Overwrite existing files\": \"Přepsat existující soubory\",\n  \"Untick this box to only import new files\": \"Odškrtněte tento box pokud chcete importovat pouze nové soubory.\",\n  \"Please select the theme folders you would like to import\": \"Vyberte prosím složky, které chcete importovat\",\n  \"Activate\": \"Aktivní\",\n  \"Customize\": \"Přizpůsobit\",\n  \"Duplicate\": \"Duplikovat\",\n  \"Duplicate Theme\": \"Duplikovat téma\",\n  \"Theme Duplicated!\": \"Duplikace téma byla úspěšná!\",\n  \"Manage\": \"Správa téma\",\n  \"Manage Theme\": \"Správa témat\",\n  \"Edit Properties\": \"Nastavit\",\n  \"Save Properties\": \"Uložit nastavení\",\n  \"Import\": \"Importovat\",\n  \"Import Theme\": \"Importovat téma\",\n  \"Theme Imported!\": \"Téma úspěšně importováno!\",\n  \"Export\": \"Exportovat\",\n  \"Export Theme\": \"Exportovat téma\",\n  \"Delete\": \"Smazat\",\n  \"Delete this theme? It cannot be undone!\": \"Jste si jistí, že chcete smazat toto téma? Tuto akci nelze vrátit zpět!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Nelze smazat aktivní téma. Nejdříve aktivujte jiné téma.\",\n  \"Theme deleted!\": \"Téma úspěšně smazáno!\",\n  \"Create Theme\": \"Vytvořit téma\",\n  \"Create\": \"Vytvořit\",\n  \"Create a New Blank Theme\": \"Vytvořit nové čisté téma\",\n  \"Theme Created!\": \"Téma úspěšně vytvořeno!\",\n  \"Please specify a name for the theme.\": \"Napište jméno pro nové téma.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Název může obsahovat pouze čísla, písmena a následující symboly: _-\",\n  \"Desired theme directory already exists.\": \"Tato složka s tématem již existuje.\",\n  \"Theme directory\": \"Složka téma\",\n  \"Provide a new directory name for the duplicated theme.\": \"Zadejte název nové složky pro duplikaci téma.\",\n  \"Find More Themes\": \"Vyhledat více témat\",\n  \"Saving Theme...\": \"Ukládám téma...\",\n  \"Return to Themes List\": \"Zpět na seznam témat\",\n  \"No themes found\": \"Nebyla nalezena žádná témata\",\n  \"Seed Theme\": \"Seed Téma\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Osévejte zadané téma pomocí plánů, překladů a dat.\",\n  \"Theme Seeded!\": \"Téma nasazeno!\",\n  \"Select Page Link\": \"Vyberte Odkaz na stránku\",\n  \"Search all references...\": \"Prohledat všechny reference...\",\n  \"CMS Page\": \"CMS stránka\",\n  \"Link\": \"Odkaz\",\n  \"Please select a CMS page\": \"Vyberte stránku CMS\",\n  \"Please select a page reference\": \"Vyberte prosím odkaz na stránku\",\n  \"Please enter a valid URL\": \"Zadejte prosím platnou adresu URL\",\n  \"Delete Theme\": \"Smazat motiv\",\n  \"Activate Theme\": \"Aktivovat téma\",\n  \"Manage Partials\": \"Spravovat části\",\n  \"No Title\": \"Bez názvu\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Unikátní název komponenty pro použití ve stránkách, nebo kodéch layoutu.\",\n  \"Alias\": \"Alternativní název (alias)\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Alias komponenty je povinný a může obsahovat pouze písmena, čísla a podtržítka. Alias by měl začínat písmenem.\",\n  \"Unnamed\": \"Bez jména\",\n  \"No description provided\": \"Popis nevyplněn\",\n  \"No snippets found\": \"Snippety nenalezeny\",\n  \"Search...\": \"Hledat...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Snippet s kódem :code nebyl nalezen v rámci tématu.\",\n  \"Snippet\": \"Úryvek (snippet)\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Zadejte kód, aby tato dílčí šablona byla dostupná jako snippet v pluginu statických stránek.\",\n  \"Please enter the snippet code\": \"Zadejte kód úryvku\",\n  \"Snippet Code\": \"Kód snippetu\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Tento název bude zobrazen v seznamu snippetů v bočním menu pluginu statických stránek a přímo na stránce, když bude snippet přidán.\",\n  \"Please enter the snippet name\": \"Zadejte název úryvku\",\n  \"Property Title\": \"Název vlastnosti\",\n  \"Please provide the property title\": \"Uveďte prosím název nemovitosti\",\n  \"Code\": \"Kód\",\n  \"Please provide the property name\": \"Uveďte prosím název nemovitosti\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Kód vlastnosti by měl začínat písmenem a může obsahovat pouze písmena nebo číslice.\",\n  \"Type\": \"Vlastnosti\",\n  \"Select\": \"Vybrat\",\n  \"String\": \"Řetězec\",\n  \"Checkbox\": \"Zaškrtávací políčko\",\n  \"Dropdown\": \"Seznam\",\n  \"Please select the property type\": \"Vyberte prosím typ nemovitosti\",\n  \"Default\": \"Výchozí\",\n  \"Options\": \"Možnosti\",\n  \"Define a Snippet Partial\": \"Definujte částečný úryvek\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Neplatný klíč položky seznamu: %s. Klíč položky seznamu může obsahovat pouze písmena, číslice a znaky: _-\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Popis se po přidání úryvku zobrazí v seznamu úryvků v editoru.\",\n  \"Details\": \"Podrobnosti\",\n  \"Frontend Theme\": \"Témata vzhledu\"\n}"
  },
  {
    "path": "modules/cms/lang/da/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Ugyldigt filnavn: :name. Filnavne må kun indeholde alphanumeriske karakterer, underscores, bindestreger og punktummer. Eksempler på gyldige navne: page.htm, page, subdirectory/page',\n    'invalid_property' => '\\':name\\' kan ikke angives',\n    'file_already_exists' => 'Filen \\':name\\' eksisterer allerede.',\n    'error_saving' => 'Fejl under geming af filen \\':name\\'. Kontroller venligst skriverettigheder.',\n    'error_creating_directory' => 'Fejl ved opretning af mappe :name. Kontroller venligst skriverettigheder.',\n    'invalid_file_extension' => 'Ugyldig filendelse: :invalid. Tilladte endelser: :allowed.',\n    'error_deleting' => 'Fejl under sletning af skabelonfil \\':name\\'. Kontroller venligst skriverettigheder.',\n    'delete_success' => 'Slettede skabeloner: :count.',\n    'file_name_required' => 'Filnavnet er påkrævet.',\n    'safe_mode_enabled' => 'sikkerhedstilstand er aktiveret.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Hjemmeside',\n      'online' => 'Online',\n      'maintenance' => 'Under vedligeholdelse',\n      'manage_themes' => 'Administrer temaer',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Det aktive tema er ikke sat.',\n      'not_found' => 'Det aktive tema kunne ikke findes.',\n    ],\n    'edit' => [\n      'not_set' => 'The edit theme is not set.',\n      'not_found' => 'The edit theme is not found.',\n      'not_match' => 'The object you\\'re trying to access doesn\\'t belong to the theme being edited. Please reload the page.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Sidenavnet \\':name\\' kunne ikke findes',\n    'not_found' => [\n      'label' => 'Siden findes ikke',\n      'help' => 'Den efterspurgte side findes ikke.',\n    ],\n    'custom_error' => [\n      'label' => 'Side fejl',\n      'help' => 'Der skete desværre en fejl, og siden kan derfor ikke vises.',\n    ],\n    'menu_label' => 'Sider',\n    'unsaved_label' => 'Ugemte side(r)',\n    'no_list_records' => 'Ingen sider fundet',\n    'new' => 'Ny side',\n    'invalid_url' => 'Ugyldigt URL format. URL\\'en skal starte med en skråstreg og kan indeholde tal, latinske bogstaver og følgende symboler: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Slet de valgte sider?',\n    'delete_confirm_single' => 'Slet denne side?',\n    'no_layout' => '-- Intet layout --',\n  ],\n  'layout' => [\n    'not_found_name' => 'Layoutet \\':name\\' kunne ikke findes',\n    'menu_label' => 'Layouts',\n    'unsaved_label' => 'Ugemt(e) layout(s)',\n    'no_list_records' => 'Ingen layouts fundet',\n    'new' => 'Nyt layout',\n    'delete_confirm_multiple' => 'Slet de valgte layouts?',\n    'delete_confirm_single' => 'Slet dette layout?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Partialen \\':name\\' kunne ikke findes.',\n    'invalid_name' => 'Ugyldigt partial navn: :name.',\n    'menu_label' => 'Partials',\n    'unsaved_label' => 'Ugemt(e) partial(s)',\n    'no_list_records' => 'Ingen partials fundet',\n    'delete_confirm_multiple' => 'Slet de valgte partials?',\n    'delete_confirm_single' => 'Slet denne partial?',\n    'new' => 'Ny partial',\n  ],\n  'content' => [\n    'not_found_name' => 'Indholdsfilen \\':name\\' kunne ikke findes.',\n    'menu_label' => 'Indhold',\n    'unsaved_label' => 'Ugemt indhold',\n    'no_list_records' => 'Ingen indholdsfiler fundet',\n    'delete_confirm_multiple' => 'Slet valgte indholdsfiler eller mapper?',\n    'delete_confirm_single' => 'Slet denne indholdsfil?',\n    'new' => 'Ny indholdsfil',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Ugyldig AJAX handler navn: :name.',\n    'not_found' => 'AJAX handler \\':name\\' kunne ikke findes.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Tilføj',\n    'search' => 'Søg...',\n  ],\n  'editor' => [\n    'settings' => 'Indstillinger',\n    'title' => 'Titel',\n    'new_title' => 'Ny side titel',\n    'url' => 'URL',\n    'filename' => 'Filnavn',\n    'layout' => 'Layout',\n    'description' => 'Beskrivelse',\n    'preview' => 'Forhåndsvisning',\n    'meta' => 'Meta',\n    'meta_title' => 'Metatitel',\n    'meta_description' => 'Metabeskrivelse',\n    'markup' => 'Markup',\n    'code' => 'Kode',\n    'content' => 'Indhold',\n    'hidden' => 'Gemt',\n    'hidden_comment' => 'Gemte sider kan kun tilgås af backendbrugere.',\n    'enter_fullscreen' => 'Start fuld skærm',\n    'exit_fullscreen' => 'Afslut fuld skærm',\n    'open_searchbox' => 'Åben søgeboks',\n    'open_replacebox' => 'Åben erstartningsboks',\n  ],\n  'asset' => [\n    'menu_label' => 'Assets',\n    'unsaved_label' => 'Ugemt(e) asset(s)',\n    'drop_down_add_title' => 'Tilføj...',\n    'drop_down_operation_title' => 'Action...',\n    'upload_files' => 'Upload file(r)',\n    'create_file' => 'Opret fil',\n    'create_directory' => 'Opret mappe',\n    'directory_popup_title' => 'Ny mappe',\n    'directory_name' => 'Mappenavn',\n    'rename' => 'Omdøb',\n    'delete' => 'Slet',\n    'move' => 'Flyt',\n    'select' => 'Vælg',\n    'new' => 'Ny fil',\n    'rename_popup_title' => 'Omdøb',\n    'rename_new_name' => 'Nyt navn',\n    'invalid_path' => 'Stien må kun indeholde tal, latinske bogstaver, mellemrum og følgende tegn: ._-/',\n    'error_deleting_file' => 'Fejl ved sletning af fil :name.',\n    'error_deleting_dir_not_empty' => 'Fejl ved sletning af mappe :name. Mappen er ikke tom.',\n    'error_deleting_dir' => 'Fejl ved sletning af mappe :name.',\n    'invalid_name' => 'Navn må kun indeholde tal, latinske bogstaver, mellemrum og følgende tegn: ._-/',\n    'original_not_found' => 'Den originale fil eller mappe kunne ikke findes',\n    'already_exists' => 'Fil eller mappe med dette navn, eksisterer allerede',\n    'error_renaming' => 'Fejl ved omdøbning af fil eller mappe',\n    'name_cant_be_empty' => 'Navn skal udfyldes',\n    'too_large' => 'Den uploadede fil er for stor. Den størst tilladte filstørrelse er :max_size',\n    'type_not_allowed' => 'Kun følgende filtyper tilladt: :allowed_types',\n    'file_not_valid' => 'Filen er ikke gyldig',\n    'error_uploading_file' => 'Fejl ved upload af fil \\':name\\': :error',\n    'move_please_select' => 'Vælg venligst',\n    'move_destination' => 'Destinationsmappe',\n    'move_popup_title' => 'Flyt assets',\n    'move_button' => 'Flyt',\n    'selected_files_not_found' => 'Valgte filer ikke fundet',\n    'select_destination_dir' => 'Vælg venligst en destinationsmappe',\n    'destination_not_found' => 'Destinationsmappe ikke fundet',\n    'error_moving_file' => 'Fejl ved flytning af fil :file',\n    'error_moving_directory' => 'Fejl ved flytning af mappe :dir',\n    'error_deleting_directory' => 'Fejl ved sletning af den originale mappe :dir',\n    'path' => 'Sti',\n  ],\n  'component' => [\n    'menu_label' => 'Komponenter',\n    'invalid_request' => 'Skabelonen kan ikke gemmes, pga. ugyldigt komponentdata.',\n    'no_records' => 'Ingen komponenter fundet',\n    'not_found' => 'Komponentet \\':name\\' kunne ikke findes.',\n    'method_not_found' => 'Komponentet \\':name\\' indeholder ikke metoden \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Ukendt skabelontype.',\n    'not_found' => 'Skabelon kunne ikke findes.',\n    'saved' => 'Skabelon blev gemt.',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Administrer indholdsfiler',\n    'manage_assets' => 'Administrer assets - billeder, JavaScript filer, CSS filer',\n    'manage_pages' => 'Opret, rediger og slet CMS sider',\n    'manage_layouts' => 'Opret, rediger og slet CMS layouts',\n    'manage_partials' => 'Opret, rediger og slet CMS partials',\n    'manage_themes' => 'aktiver, deaktiver og konfigurer CMS temaer',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/da.json",
    "content": "{\n  \"Themes\": \"Temaer\",\n  \"Manage Themes\": \"Administrer temaer\",\n  \"Customize Theme\": \"Tilpas tema\",\n  \"Manage Maintenance Mode\": \"Administrer vedligeholdelsestilstand\",\n  \"View Website During Maintenance\": \"Se hjemmesiden under vedligeholdelse\",\n  \"Manage Content\": \"Administrer indhold\",\n  \"Manage Asset Files\": \"Administrer aktivfiler\",\n  \"Manage Pages\": \"Administrer sider\",\n  \"Manage Layouts\": \"Administrer layouts\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfigurer vedligeholdelsestilstand og aktiver/deaktiver.\",\n  \"Maintenance Mode\": \"Vedligeholdelsestilstand\",\n  \"Select the page to show when maintenance mode is activated.\": \"Når vedligeholdelsestilstand er aktiveret, vil gæster se den nedfor valgte side.\",\n  \"Enable maintenance mode\": \"Aktiver vedligeholdelsestilstand\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Vedligeholdelsestilstand viser vedligeholdelsessiden til besøgende, der ikke er logget ind på back-end-området.\",\n  \"Resources\": \"Ressourcer\",\n  \"Reference assets and variables included on this page.\": \"Referenceaktiver og variabler inkluderet på denne side.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript-fil(er) i mappen assets/js\",\n  \"LESS\": \"MINDRE\",\n  \"LESS file(s) in the assets/less folder\": \"MINDRE fil(er) i mappen aktiver/mindre\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS-fil(er) i mappen assets/scss\",\n  \"Variables\": \"Variabler\",\n  \"Page variables name(s) and value(s)\": \"Sidevariables navn(e) og værdi(er)\",\n  \"Headers\": \"Overskrifter\",\n  \"Page header name(s) and value(s)\": \"Sidehovednavne og værdi(er)\",\n  \"Site Picker\": \"Webstedvælger\",\n  \"Displays links for selecting a different site.\": \"Viser links til valg af et andet websted.\",\n  \"Unknown component\": \"Ukendt komponent\",\n  \"View Bag\": \"Se taske\",\n  \"Stores custom template properties.\": \"Gemmer egenskaber for tilpassede skabeloner.\",\n  \"By :name\": \"Ved navn\",\n  \"The theme ':name' is not found.\": \"Temaet ':name' blev ikke fundet.\",\n  \"Manage the front-end theme and customization options.\": \"Se oversigt over temaer, og vælg et aktivt tema.\",\n  \"Site Theme\": \"Frontend tema\",\n  \"Properties\": \"Indstillinger\",\n  \"Publish\": \"Offentliggøre\",\n  \"Advanced\": \"Fremskreden\",\n  \"Name\": \"Navn\",\n  \"New theme name\": \"Nyt temanavn\",\n  \"Author Name\": \"Skaber\",\n  \"Person or company name\": \"Person eller virksomhedsnavn\",\n  \"Directory Name\": \"Mappenavn\",\n  \"The destination theme directory\": \"Tema mappe\",\n  \"Description\": \"Beskrivelse\",\n  \"Theme description\": \"Tema beskrivelse\",\n  \"Homepage\": \"Hjemmeside\",\n  \"Website URL\": \"Hjemmeside URL\",\n  \"Author Code\": \"Forfatterkode\",\n  \"A unique code for the author used for distribution\": \"En unik kode for forfatteren, der bruges til distribution\",\n  \"Theme Code\": \"Kode\",\n  \"A unique code for this theme used for distribution\": \"En unik kode for dette tema, brugt under distribuering\",\n  \"Parent Theme\": \"Forældretema\",\n  \"Database Mode\": \"Databasetilstand\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Gem ændringer til dette tema i databasen i stedet for filsystemet\",\n  \"-- no parent --\": \"-- ingen forælder --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Mapper\",\n  \"Please select the theme folders you would like to export\": \"Vælg venligst de temamapper du vil importere\",\n  \"Theme archive file\": \"Tema arkivfil\",\n  \"Overwrite existing files\": \"Overskriv eksisterende filer\",\n  \"Untick this box to only import new files\": \"Afkryds i denne box, for kun at importere nye filer\",\n  \"Please select the theme folders you would like to import\": \"Vælg venligst temamapperne du vil importere\",\n  \"Activate\": \"Aktiver\",\n  \"Customize\": \"Tilpas\",\n  \"Duplicate\": \"Dupliker\",\n  \"Duplicate Theme\": \"Dupliker tema\",\n  \"Theme Duplicated!\": \"Tema blev duplikeret!\",\n  \"Manage\": \"Administrer\",\n  \"Manage Theme\": \"Administrer tema\",\n  \"Edit Properties\": \"Rediger indstillinger\",\n  \"Save Properties\": \"Gem indstillinger\",\n  \"Import\": \"Importer\",\n  \"Import Theme\": \"Importer tema\",\n  \"Theme Imported!\": \"Tema importeret!\",\n  \"Export\": \"Eksporter\",\n  \"Export Theme\": \"Eksporter tema\",\n  \"Delete\": \"Slet\",\n  \"Delete this theme? It cannot be undone!\": \"Er du sikker på at du vil slette dette tema? Det kan ikke fortrydes!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Kan ikke slette det aktive tema. Vælg et andet aktivt tema først.\",\n  \"Theme deleted!\": \"Tema blev slettet!\",\n  \"Create Theme\": \"Opret tema\",\n  \"Create\": \"Opret\",\n  \"Create a New Blank Theme\": \"Lav et nyt blankt tema\",\n  \"Theme Created!\": \"Theme blev oprettet!\",\n  \"Please specify a name for the theme.\": \"Vælg venligst et navn til temaet.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Navnet må kun indeholde tal, latinske bogstaver og følgende symboler: _-\",\n  \"Desired theme directory already exists.\": \"Den angivne temamappe eksisterer allerede.\",\n  \"Theme directory\": \"Temamappe\",\n  \"Provide a new directory name for the duplicated theme.\": \"Amgiv en ny mappe til det duplikerede tema.\",\n  \"Find More Themes\": \"Find flere temaer\",\n  \"Saving Theme...\": \"Gemmer tema...\",\n  \"Return to Themes List\": \"Tilbage til temaliste\",\n  \"No themes found\": \"Ingen temaer fundet\",\n  \"Seed Theme\": \"Frø tema\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seed det angivne tema med tegninger, oversættelser og data.\",\n  \"Theme Seeded!\": \"Temasået!\",\n  \"Select Page Link\": \"Vælg Sidelink\",\n  \"Search all references...\": \"Søg i alle referencer...\",\n  \"CMS Page\": \"CMS side\",\n  \"Link\": \"Link\",\n  \"Please select a CMS page\": \"Vælg venligst en CMS-side\",\n  \"Please select a page reference\": \"Vælg venligst en sidehenvisning\",\n  \"Please enter a valid URL\": \"Indtast venligst en gyldig URL\",\n  \"Delete Theme\": \"Slet tema\",\n  \"Activate Theme\": \"Aktiver tema\",\n  \"Manage Partials\": \"Administrer partialer\",\n  \"No Title\": \"Ingen titel\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Et unikt navn givet til dette komponent, ved brug på en side eller layout.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Komponent aliaser er påkrævede og må kun indeholde latinske karakterer, tal og underscores.Aliaset skal starte med et latinsk bogstav.\",\n  \"Unnamed\": \"Unavngivet\",\n  \"No description provided\": \"Ingen beskrivelse tilgængelig\",\n  \"No snippets found\": \"Ingen uddrag fundet\",\n  \"Search...\": \"Søg...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Uddrag med den anmodede kode :kode blev ikke fundet i temaet.\",\n  \"Snippet\": \"Uddrag\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Indtast en kode for at gøre denne del tilgængelig som et uddrag i indholdseditorer.\",\n  \"Please enter the snippet code\": \"Indtast venligst kodestykket\",\n  \"Snippet Code\": \"Uddragskode\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Navnet vises i uddragslisten i editoren, når et uddrag tilføjes.\",\n  \"Please enter the snippet name\": \"Indtast venligst kodestykkets navn\",\n  \"Property Title\": \"Ejendommens titel\",\n  \"Please provide the property title\": \"Angiv venligst ejendommens titel\",\n  \"Code\": \"Kode\",\n  \"Please provide the property name\": \"Angiv venligst ejendommens navn\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Ejendomskode skal starte med et latinsk bogstav og må kun indeholde latinske bogstaver, cifre og understregninger\",\n  \"Type\": \"Type\",\n  \"Select\": \"Vælg\",\n  \"String\": \"Snor\",\n  \"Checkbox\": \"Afkrydsningsfelt\",\n  \"Dropdown\": \"Dropdown\",\n  \"Please select the property type\": \"Vælg venligst ejendomstypen\",\n  \"Default\": \"Standard\",\n  \"Options\": \"Muligheder\",\n  \"Define a Snippet Partial\": \"Definer en Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Ugyldig rullemenunøgle: :key. Valgtaster kan kun indeholde cifre, latinske bogstaver og tegn _ og -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Beskrivelsen vises i uddragslisten i editoren, når et uddrag tilføjes.\",\n  \"Details\": \"detaljer\"\n}"
  },
  {
    "path": "modules/cms/lang/de/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Ungültiger Dateiname: :name. Diese dürfen nur alphanumerische Symbole, Unter- und Bindestriche sowie Punkte enthalten. Beispiele: page.htm, page, subdirectory/page',\n    'invalid_property' => 'Die Eigenschaft \":name\" kann nicht angewendet werden',\n    'file_already_exists' => 'Datei \":name\" existiert bereits.',\n    'error_saving' => 'Fehler beim Speichern von \":name\".',\n    'error_creating_directory' => 'Fehler beim Erstellen von Verzeichnis mit Namen :name',\n    'invalid_file_extension' => 'Ungültige Dateiendung: :invalid. Erlaubt sind: :allowed.',\n    'error_deleting' => 'Fehler beim Löschen der Template-Datei \":name\".',\n    'delete_success' => 'Templates wurden erfolgreich gelöscht: :count.',\n    'file_name_required' => 'Ein Dateiname ist erforderlich.',\n    'safe_mode_enabled' => 'Der abgesicherte Modus ist derzeit aktiviert. Die Bearbeitung des PHP-Codes von CMS-Templates ist deaktiviert. Um den abgesicherten Modus zu deaktivieren, setzen Sie den Konfigurationswert `cms.safe_mode` auf `false`.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Website',\n      'online' => 'Online',\n      'maintenance' => 'In der Wartung',\n      'manage_themes' => 'Themes Verwalten',\n      'customize_theme' => 'Theme anpassen',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktives Theme nicht definiert',\n      'not_found' => 'Aktives Theme wurde nicht gefunden.',\n    ],\n    'edit' => [\n      'not_set' => 'Edit Theme nicht definiert',\n      'not_found' => 'Edit Theme nicht gefunden.',\n      'not_match' => 'Das Objekt, das sie anzupassen versuchen gehört nicht zum Theme in Bearbeitung. Bitte laden Sie die Seite erneut.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Die Seite \\':name\\' konnte nicht gefunden werden',\n    'not_found' => [\n      'label' => 'Seite nicht gefunden',\n      'help' => 'Die angeforderte Seite kann nicht gefunden werden.',\n    ],\n    'custom_error' => [\n      'label' => 'Seitenfehler',\n      'help' => 'Entschuldigung, ein Fehler trat auf, sodass die gewünschte Seite nicht angezeigt werden kann.',\n    ],\n    'menu_label' => 'Seiten',\n    'unsaved_label' => 'Ungespeicherte Seite(n)',\n    'no_list_records' => 'Keine Seiten gefunden',\n    'new' => 'Neue Seite',\n    'invalid_url' => 'Ungültiges URL-Format. Die URL muss mit einem Slash beginnen und darf nur Ziffern, lateinische Zeichen und die folgenden Symbole beinhalten: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Wollen Sie die ausgewählten Seiten wirklich löschen?',\n    'delete_confirm_single' => 'Wollen Sie diese Seite wirklich löschen?',\n    'no_layout' => '-- Kein Layout --',\n    'title' => 'Seitentitel',\n    'url' => 'Seiten-URL',\n    'file_name' => 'Seiten-Dateiname',\n  ],\n  'layout' => [\n    'not_found_name' => 'Das Layout \\':name\\' wurde nicht gefunden',\n    'menu_label' => 'Layouts',\n    'unsaved_label' => 'Ungespeicherte(s) Layout(s)',\n    'no_list_records' => 'Keine Layouts gefunden',\n    'new' => 'Neues Layout',\n    'delete_confirm_multiple' => 'Wollen Sie die ausgewählten Layouts wirklich löschen?',\n    'delete_confirm_single' => 'Wollen Sie das ausgewählte Layout wirklich löschen?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Das Partial \\':name\\' wurde nicht gefunden.',\n    'invalid_name' => 'Ungültiger Partial-Name: :name.',\n    'menu_label' => 'Partials',\n    'unsaved_label' => 'Ungespeicherte(s) Partial(s)',\n    'no_list_records' => 'Keine Partials gefunden',\n    'delete_confirm_multiple' => 'Wollen Sie die ausgewählten Partials wirklich löschen?',\n    'delete_confirm_single' => 'Wollen Sie das ausgewählte Partial wirklich löschen?',\n    'new' => 'Neues Partial',\n  ],\n  'content' => [\n    'not_found_name' => 'Die Inhaltsdatei \\':name\\' wurde nicht gefunden.',\n    'menu_label' => 'Inhalt',\n    'unsaved_label' => 'Ungespeicherter Inhalt',\n    'no_list_records' => 'Keine Inhaltsdateien gefunden',\n    'delete_confirm_multiple' => 'Wollen Sie die ausgewählten Inhalte und Verzeichnisse wirklich löschen?',\n    'delete_confirm_single' => 'Wollen Sie diese Inhaltsdatei wirklich löschen?',\n    'new' => 'Neue Inhaltsdatei',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Ungültiger Name für AJAX Handler: :name.',\n    'not_found' => 'AJAX Handler \\':name\\' wurde nicht gefunden.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Hinzufügen',\n    'search' => 'Suchen...',\n  ],\n  'editor' => [\n    'settings' => 'Einstellungen',\n    'title' => 'Titel',\n    'new_title' => 'Neuer Seitentitel',\n    'url' => 'URL',\n    'filename' => 'Dateiname',\n    'layout' => 'Layout',\n    'description' => 'Beschreibung',\n    'preview' => 'Vorschau',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Titel',\n    'meta_description' => 'Meta Beschreibung',\n    'markup' => 'Markup',\n    'code' => 'Code',\n    'content' => 'Inhalt',\n    'hidden' => 'Versteckt',\n    'hidden_comment' => 'Versteckte Seiten können nur von eingeloggten Backend-Benutzern genutzt werden.',\n    'enter_fullscreen' => 'In den Vollbildmodus wechseln',\n    'exit_fullscreen' => 'Vollbildmodus beenden',\n    'open_searchbox' => 'Suchfeld öffnen',\n    'open_replacebox' => 'Ersetzen-Feld öffnen',\n    'commit' => 'Commit',\n    'reset' => 'Zurücksetzen',\n    'commit_confirm' => 'Sind Sie sicher, dass Sie Ihre Änderungen an dieser Datei auf das Dateisystem übertragen wollen? Dies wird die bestehende Datei auf dem Dateisystem überschreiben',\n    'reset_confirm' => 'Sind Sie sicher, dass Sie diese Datei auf die Kopie zurücksetzen wollen, die sich auf dem Dateisystem befindet? Dadurch wird sie vollständig durch die Datei ersetzt, die sich auf dem Dateisystem befindet.',\n    'committing' => 'Committing',\n    'resetting' => 'Zurücksetzen',\n    'commit_success' => 'Der :type wurde auf das Dateisystem übertragen',\n    'reset_success' => 'Der :type wurde auf die Dateisystemversion zurückgesetzt',\n  ],\n  'asset' => [\n    'menu_label' => 'Assets',\n    'unsaved_label' => 'Ungespeicherte(s) Asset(s)',\n    'drop_down_add_title' => 'Hinzufügen...',\n    'drop_down_operation_title' => 'Aktion...',\n    'upload_files' => 'Datei(en) hochladen',\n    'create_file' => 'Datei erstellen',\n    'create_directory' => 'Verzeichnis erstellen',\n    'directory_popup_title' => 'Neues Verzeichnis',\n    'directory_name' => 'Verzeichnisname',\n    'rename' => 'Umbenennen',\n    'delete' => 'Löschen',\n    'move' => 'Verschieben',\n    'select' => 'Auswählen',\n    'new' => 'Neue Datei',\n    'rename_popup_title' => 'Umbenennen',\n    'rename_new_name' => 'Neuer Name',\n    'invalid_path' => 'Pfade dürfen ausschließlich Ziffern, lateinische Zeichen, Leerzeichen sowie die folgenden Symbole enthalten: ._-/',\n    'error_deleting_file' => 'Fehler beim Löschen der Datei :name.',\n    'error_deleting_dir_not_empty' => 'Fehler beim Löschen des Verzeichnisses :name, da es nicht leer ist.',\n    'error_deleting_dir' => 'Fehler beim Löschen der Datei :name.',\n    'invalid_name' => 'Asset-Name darf nur Ziffern, lateinische Zeichen, Leerzeichen sowie die folgenden Symbole enthalten: ._-',\n    'original_not_found' => 'Originaldatei oder -verzeichnis wurde nicht gefunden',\n    'already_exists' => 'Datei oder Verzeichnis mit diesem Namen existiert bereits',\n    'error_renaming' => 'Fehler beim Umbenennen der Datei bzw. des Verzeichnisses',\n    'name_cant_be_empty' => 'Es muss ein Name angegeben werden',\n    'too_large' => 'Die hochzuladende Datei ist zu groß. Sie dürfen maximal Dateien der Größe :max_size hochladen',\n    'type_not_allowed' => 'Es sind ausschließlich folgende Dateiendungen erlaubt: :allowed_types',\n    'file_not_valid' => 'Datei ist ungültig',\n    'error_uploading_file' => 'Fehler beim Hochladen der Datei \":name\": :error',\n    'move_please_select' => 'Bitte auswählen',\n    'move_destination' => 'Zielverzeichnis',\n    'move_popup_title' => 'Assets verschieben',\n    'move_button' => 'Verschieben',\n    'selected_files_not_found' => 'Ausgewählte Dateien nicht gefunden',\n    'select_destination_dir' => 'Bitte wählen Sie ein Zielverzeichnis aus',\n    'destination_not_found' => 'Zielverzeichnis wurde nicht gefunden',\n    'error_moving_file' => 'Fehler beim Verschieben der Datei :file',\n    'error_moving_directory' => 'Fehler beim Verschieben des Verzeichnisses :dir',\n    'error_deleting_directory' => 'Fehler beim Löschen des Originalverzeichnisses :dir',\n    'no_list_records' => 'Keine Dateien gefunden',\n    'delete_confirm' => 'Ausgewählte Dateien oder Verzeichnisse löschen?',\n    'path' => 'Pfad',\n  ],\n  'component' => [\n    'menu_label' => 'Komponenten',\n    'invalid_request' => 'Aufgrund ungültiger Komponentendaten kann das Template nicht gespeichert werden.',\n    'no_records' => 'Keine Komponenten gefunden',\n    'not_found' => 'Die Komponente \\':name\\' wurde nicht gefunden.',\n    'no_default_partial' => 'Diese Komponente hat keinen \\'default\\' Partial',\n    'method_not_found' => 'Die Komponente \\':name\\' enthält keine Methode mit Namen \\':method\\'.',\n    'soft_component_description' => 'Diese Komponente fehlt, aber Sie ist optional.',\n  ],\n  'template' => [\n    'invalid_type' => 'Unbekannter Template-Typ.',\n    'not_found' => 'Das angeforderte Template wurde nicht gefunden.',\n    'saved' => 'Das Template wurde erfolgreich gespeichert.',\n    'no_list_records' => 'Keine Einträge gefunden',\n    'delete_confirm' => 'Ausgewählte Templates löschen?',\n    'order_by' => 'Sortieren nach',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Inhalt verwalten',\n    'manage_assets' => 'Assets verwalten',\n    'manage_pages' => 'Seiten verwalten',\n    'manage_layouts' => 'Layouts verwalten',\n    'manage_partials' => 'Partials verwalten',\n    'manage_themes' => 'Themes verwalten',\n    'manage_theme_options' => 'Konfigurieren Sie Anpassungsoptionen für das aktive Theme',\n  ],\n  'theme_log' => [\n    'hint' => 'Dieses Protokoll zeigt alle Änderungen an, die von Administratoren im Back-End-Bereich am Theme vorgenommen wurden.',\n    'menu_label' => 'Theme Protokoll',\n    'menu_description' => 'Zeigen Sie die am aktiven Theme vorgenommenen Änderungen an.',\n    'empty_link' => 'Leeres Theme Protokoll',\n    'empty_loading' => 'Leeren des Theme Protokolls...',\n    'empty_success' => 'Theme Protokoll',\n    'return_link' => 'Zurück zum Theme Protokoll',\n    'id' => 'ID',\n    'id_label' => 'Protokoll ID',\n    'created_at' => 'Datum & Zeit',\n    'user' => 'Benutzer',\n    'type' => 'Typ',\n    'type_create' => 'Erstellen',\n    'type_update' => 'Aktualisieren',\n    'type_delete' => 'Löschen',\n    'theme_name' => 'Theme',\n    'theme_code' => 'Theme Code',\n    'old_template' => 'Template (Alt)',\n    'new_template' => 'Template (Neu)',\n    'template' => 'Template',\n    'diff' => 'Änderungen',\n    'old_value' => 'Alter Wert',\n    'new_value' => 'Neuer Wert',\n    'preview_title' => 'Templateänderungen',\n    'template_updated' => 'Template wurde aktualisiert',\n    'template_created' => 'Template wurde erstellt',\n    'template_deleted' => 'Template wurde gelöscht',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/de.json",
    "content": "{\n  \"Themes\": \"Themen\",\n  \"Manage Themes\": \"Themen verwalten\",\n  \"Customize Theme\": \"Theme anpassen\",\n  \"Manage Maintenance Mode\": \"Wartungsmodus verwalten\",\n  \"View Website During Maintenance\": \"Website während der Wartung anzeigen\",\n  \"Manage Content\": \"Inhalte verwalten\",\n  \"Manage Asset Files\": \"Asset-Dateien verwalten\",\n  \"Manage Pages\": \"Seiten verwalten\",\n  \"Manage Layouts\": \"Layouts verwalten\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfigurieren Sie den Wartungsmodus.\",\n  \"Maintenance Mode\": \"Wartungsmodus\",\n  \"Select the page to show when maintenance mode is activated.\": \"Sobald aktiviert, werden Besucher die unten ausgewählte Seite sehen.\",\n  \"Enable maintenance mode\": \"Wartungsmodus aktivieren\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Im Wartungsmodus wird die Wartungsseite für Besucher angezeigt, die nicht im Back-End-Bereich angemeldet sind.\",\n  \"Resources\": \"Ressourcen\",\n  \"Reference assets and variables included on this page.\": \"Auf dieser Seite enthaltene Referenz-Assets und -Variablen.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript-Datei(en) im Ordner assets/js\",\n  \"LESS\": \"WENIGER\",\n  \"LESS file(s) in the assets/less folder\": \"LESS-Datei(en) im Ordner assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS-Datei(en) im Ordner „assets/scss“.\",\n  \"Variables\": \"Variablen\",\n  \"Page variables name(s) and value(s)\": \"Name(n) und Wert(e) der Seitenvariablen\",\n  \"Headers\": \"Überschriften\",\n  \"Page header name(s) and value(s)\": \"Name(n) und Wert(e) der Seitenkopfzeile\",\n  \"Site Picker\": \"Website-Auswahl\",\n  \"Displays links for selecting a different site.\": \"Zeigt Links zum Auswählen einer anderen Site an.\",\n  \"Unknown component\": \"Unbekannte Komponente\",\n  \"View Bag\": \"Tasche ansehen\",\n  \"Stores custom template properties.\": \"Speichert benutzerdefinierte Vorlageneigenschaften.\",\n  \"By :name\": \"Von :name\",\n  \"The theme ':name' is not found.\": \"Das Theme ':name' konnte nicht gefunden werden.\",\n  \"Manage the front-end theme and customization options.\": \"Rufe eine Liste installierter Themes auf und wähle ein aktives aus.\",\n  \"Site Theme\": \"Site Theme\",\n  \"Properties\": \"Eigenschaften\",\n  \"Publish\": \"Veröffentlichen\",\n  \"Advanced\": \"Fortgeschritten\",\n  \"Name\": \"Name\",\n  \"New theme name\": \"Neuer Themename\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Autor- oder Firmenname\",\n  \"Directory Name\": \"Verzeichnisname\",\n  \"The destination theme directory\": \"Name des Zielverzeichnisses\",\n  \"Description\": \"Beschreibung\",\n  \"Theme description\": \"Themebeschreibung\",\n  \"Homepage\": \"Homepage\",\n  \"Website URL\": \"Webseiten URL\",\n  \"Author Code\": \"Autor-Code\",\n  \"A unique code for the author used for distribution\": \"Ein eindeutiger Autoren-Code wird für die Veröffentlichung verwendet\",\n  \"Theme Code\": \"Code\",\n  \"A unique code for this theme used for distribution\": \"Ein einzigartiger Code genutzt bei der Weiterverbreitung dieses Themes\",\n  \"Parent Theme\": \"Übergeordneten Thema\",\n  \"Database Mode\": \"Datenbankmodus\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Änderungen zu diesem Theme in der Datenbank anstelle der Festplatte speichern\",\n  \"-- no parent --\": \"-- kein Elternteil --\",\n  \"Theme\": \"Theme\",\n  \"Folders\": \"Ordner\",\n  \"Please select the theme folders you would like to export\": \"Bitte wählen Sie die Ordner des Themes, die Sie exportieren wollen, aus.\",\n  \"Theme archive file\": \"Theme Archivdatei\",\n  \"Overwrite existing files\": \"Überschreibe existierende Dateien\",\n  \"Untick this box to only import new files\": \"Deaktiviere diese Option, um ausschließlich neue Dateien zu importieren\",\n  \"Please select the theme folders you would like to import\": \"Bitte wähle die Theme-Ordner zum Importieren aus\",\n  \"Activate\": \"Aktivieren\",\n  \"Customize\": \"Anpassen\",\n  \"Duplicate\": \"Duplizieren\",\n  \"Duplicate Theme\": \"Theme duplizieren\",\n  \"Theme Duplicated!\": \"Theme erfolgreich dupliziert!\",\n  \"Manage\": \"Verwalten\",\n  \"Manage Theme\": \"Theme verwalten\",\n  \"Edit Properties\": \"Eigenschaften bearbeiten\",\n  \"Save Properties\": \"Eigenschaften speichern\",\n  \"Import\": \"Importieren\",\n  \"Import Theme\": \"Theme importieren\",\n  \"Theme Imported!\": \"Theme erfolgreich importiert!\",\n  \"Export\": \"Exportieren\",\n  \"Export Theme\": \"Exportiere Theme\",\n  \"Delete\": \"Löschen\",\n  \"Delete this theme? It cannot be undone!\": \"Sind Sie sicher, dass Sie dieses Theme löschen wollen? Dies kann nicht rückgängig gemacht werden!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Das aktive Theme kann nicht gelöscht werden, aktivieren Sie zunächst ein anderes Theme.\",\n  \"Theme deleted!\": \"Theme wurde erfolgreich gelöscht!\",\n  \"Create Theme\": \"Theme erstellen\",\n  \"Create\": \"Erstellen\",\n  \"Create a New Blank Theme\": \"Erstelle ein neues (leeres) Theme\",\n  \"Theme Created!\": \"Theme erfolgreich erstellt!\",\n  \"Please specify a name for the theme.\": \"Bitte benennen Sie das Theme.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Verzeichnisnamen können nur Zahlen, lateinische Buchstaben und die folgenden Symbole enthalten: _-\",\n  \"Desired theme directory already exists.\": \"Gewünschter Verzeichnisname existiert bereits.\",\n  \"Theme directory\": \"Theme Verzeichnis\",\n  \"Provide a new directory name for the duplicated theme.\": \"Stellen Sie einen neuen Verzeichnisnamen für das duplizierte Theme bereit.\",\n  \"Find More Themes\": \"Finde weitere Themen\",\n  \"Saving Theme...\": \"Theme speichern...\",\n  \"Return to Themes List\": \"Zur Themeliste zurückkehren\",\n  \"No themes found\": \"Kein Theme gefunden\",\n  \"Seed Theme\": \"Theme seeden\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Das ausgewählte Theme mit Blueprints, Übersetzungen und Daten seeden.\",\n  \"Theme Seeded!\": \"Theme geseeded!\",\n  \"Select Page Link\": \"Seitenlink auswählen\",\n  \"Search all references...\": \"Alle Referenzen durchsuchen...\",\n  \"CMS Page\": \"CMS Seite\",\n  \"Link\": \"Link\",\n  \"Please select a CMS page\": \"Bitte wählen Sie eine Seite aus\",\n  \"Please select a page reference\": \"Bitte Seitenverweis auswählen\",\n  \"Please enter a valid URL\": \"Bitte geben Sie eine gültige URL ein\",\n  \"Delete Theme\": \"Theme löschen\",\n  \"Activate Theme\": \"Theme aktivieren\",\n  \"Manage Partials\": \"Partial verwalten\",\n  \"No Title\": \"Kein Titel\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Dieser Komponente wird ein eindeutiger Name gegeben, wenn sie im Code von Seite oder Layout benutzt wird.\",\n  \"Alias\": \"Verknüpfung\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Komponentenverknüpfungen werden benötigt und dürfen nur lateinische Zeichen, Ziffern und Unterstriche beinhalten. Die Verknüpfungen müssen mit einem lateinischen Zeichen beginnen.\",\n  \"Unnamed\": \"Unbenannt\",\n  \"No description provided\": \"Keine Beschreibung angegeben\",\n  \"No snippets found\": \"Keine Snippets gefunden\",\n  \"Search...\": \"Suche...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Das Snippet mit dem angeforderten code :code wurde nicht im Theme gefunden.\",\n  \"Snippet\": \"Snippet\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Geben Sie einen Code ein, um dieses Partial als ein Snippet für das Statische-Seiten Plugin freizugeben.\",\n  \"Please enter the snippet code\": \"Bitte Snippet-Code eingeben\",\n  \"Snippet Code\": \"Snippet code\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Der Name wird in der Snippet-Liste in der Seitenleiste der Statische-Seiten angezeigt. Außerdem auf einer Seite wenn ein Snippet angelegt wird.\",\n  \"Please enter the snippet name\": \"Bitte Snippet-Name eingeben\",\n  \"Property Title\": \"Titel für die Eigenschaft\",\n  \"Please provide the property title\": \"Bitte Eigenschaftstitel eingeben\",\n  \"Code\": \"Code\",\n  \"Please provide the property name\": \"Bitte Eigenschaftsname eingeben\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Der Code für die Eigenschaft muss mit einem Buchstaben anfangen, und darf nur Buchstaben und Zahlen enthalten\",\n  \"Type\": \"Typ\",\n  \"Select\": \"Auswählen\",\n  \"String\": \"Zeichenkette\",\n  \"Checkbox\": \"Checkbox\",\n  \"Dropdown\": \"Auswahlliste\",\n  \"Please select the property type\": \"Bitte Eigenschaftstyp auswählen\",\n  \"Default\": \"Standard\",\n  \"Options\": \"Optionen\",\n  \"Define a Snippet Partial\": \"Snippet-Partial definieren\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Ungültiger Dropdown Optionsschlüssel: %s. Optionsschlüssel dürfen nur Zahlen, Buchstaben und die Zeichen _ und - enthalten\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Die Beschreibung wird in der Snippet-Liste im Editor angezeigt, wenn ein Snippet hinzugefügt wird.\",\n  \"Details\": \"Details\",\n  \"Frontend Theme\": \"Frontend Theme\"\n}"
  },
  {
    "path": "modules/cms/lang/el/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Μη έγκυρο όνομα αρχείου: :name. Τα ονόματα αρχείων μπορούν να περιέχουν μόνο αλφαριθμητικά σύμβολα, κάτω παύλες, παύλες και τελείες. Μερικά παραδείγματα σωστών ονομάτων αρχείων: page.htm, page, subdirectory/page',\n    'invalid_property' => 'Η ιδιότητα \\':name\\' δεν μπορεί να οριστεί.',\n    'file_already_exists' => 'Το αρχείο \\':name\\' υπάρχει ήδη.',\n    'error_saving' => 'Σφάλμα κατά την αποθήκευση του αρχείου \\':name\\'. Παρακαλούμε ελέγξτε τα δικαιώματα εγγραφής.',\n    'error_creating_directory' => 'Σφάλμα δημιουργίας του καταλόγου :name. Παρακαλούμε ελέγξτε τα δικαιώματα εγγραφής.',\n    'invalid_file_extension' => 'Μη έγκυρη επέκταση αρχείου: :invalid. Οι επιτρεπόμενες επεκτάσεις είναι: :allowed.',\n    'error_deleting' => 'Σφάλμα διαγράφης του αρχείου \\':name\\' του προτύπου. Παρακαλούμε ελέγξτε τα δικαιώματα εγγραφής.',\n    'delete_success' => 'Θέματα που διαγράφηκαν: :count',\n    'file_name_required' => 'Το πεδίο του Ονόματος του Αρχείου είναι υποχρεωτικό.',\n    'safe_mode_enabled' => 'Η λειτουργία ασφαλείας ενεργοποιήθηκε',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Ιστότοπος',\n      'online' => 'Σε λειτουργία',\n      'maintenance' => 'Σε συντήρηση',\n      'manage_themes' => 'Διαχείριση θεμάτων',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Δεν έχει οριστεί το ενεργό θέμα.',\n      'not_found' => 'Δεν βρέθηκε το ενεργό θέμα.',\n    ],\n    'edit' => [\n      'not_set' => 'Δεν έχει οριστεί το θέμα επεξεργασίας.',\n      'not_found' => 'Δεν βρέθηκε το θέμα επεξεργασίας.',\n      'not_match' => 'Το αντικείμενο το οποίο προσπαθείτε να προσπελάσετε δεν ανήκει στο θέμα το οποίο επεξεργάζεστε. Παρακαλούμε φορτώστε ξανά την σελίδα.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Η σελίδα \\':name\\' δεν βρέθηκε',\n    'not_found' => [\n      'label' => 'Η σελίδα δεν βρέθηκε!',\n      'help' => 'Η σελίδα που ζητήσατε δεν μπορεί να βρεθεί.',\n    ],\n    'custom_error' => [\n      'label' => 'Σφάλμα σελίδας',\n      'help' => 'Σας ζητούμε συγνώμη, αλλά κάτι πήγε λάθος και η σελίδα δεν μπορεί να προβληθεί.',\n    ],\n    'menu_label' => 'Σελίδες',\n    'unsaved_label' => 'Μη αποθηκευμένες σελίδες',\n    'no_list_records' => 'Δεν βρέθηκαν σελίδες',\n    'new' => 'Νεα Σελιδα',\n    'invalid_url' => 'Μη έγκυρη μορφή URL. Η διεύθυνση URL πρέπει να ξεκινήσει με κανονικό slash και μπορεί να περιέχει ψηφία, Λατινικά γράμματα και τα ακόλουθα σύμβολα: ._- [] :? | / + * ^ $',\n    'delete_confirm_multiple' => 'Να διαγραφούν οι επιλεγμένες σελίδες;',\n    'delete_confirm_single' => 'Να διαγραφεί αυτή η σελίδα;',\n    'no_layout' => '-- χωρίς διάταξη --',\n  ],\n  'layout' => [\n    'not_found_name' => 'The layout \\':name\\' is not found',\n    'menu_label' => 'Διατάξεις',\n    'unsaved_label' => 'Μη αποθηκευμένες διατάξεις',\n    'no_list_records' => 'Δεν βρέθηκε η διάταξη',\n    'new' => 'Νέα Διάταξη',\n    'delete_confirm_multiple' => 'Να διαγραφούν οι επιλεγμένες διατάξεις;',\n    'delete_confirm_single' => 'Να διαγράφει αυτή η διάταξη;',\n  ],\n  'partial' => [\n    'not_found_name' => 'Το τμήμα \\':name\\' δεν βρέθηκε.',\n    'invalid_name' => 'Μη έγκυρο όνομα τμήματος: :name.',\n    'menu_label' => 'Τμήματα',\n    'unsaved_label' => 'Μη αποθηκευμένα τμήματα',\n    'no_list_records' => 'Δεν βρέθηκαν τμήματα',\n    'delete_confirm_multiple' => 'Να διαγράφουν τα επιλεγμένα τμήματα;',\n    'delete_confirm_single' => 'Να διαγράφει αυτό το τμήμα;',\n    'new' => 'Νέο Τμήμα',\n  ],\n  'content' => [\n    'not_found_name' => 'Το αρχείο περιεχομένου \\':name\\' δεν βρέθηκε.',\n    'menu_label' => 'Περιεχόμενο',\n    'unsaved_label' => 'Μη αποθηκευμένο περιεχόμενο',\n    'no_list_records' => 'Δεν βρέθηκαν αρχεία περιεχομένου.',\n    'delete_confirm_multiple' => 'Να διαγραφούν τα επιλεγμένα αρχεία περιεχόμενου ή τους καταλόγους;',\n    'delete_confirm_single' => 'Να διαγραφεί αυτό το αρχείο περιεχομένου;',\n    'new' => 'Νέο Αρχ.Περ.',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Μη έγκυρο όνομα χειριστή AJAX: :name.',\n    'not_found' => 'Ο χειρίστης AJAX \\':name\\' δεν βρέθηκε.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Προσθήκη',\n    'search' => 'Αναζήτηση...',\n  ],\n  'editor' => [\n    'settings' => 'Ρυθμίσεις',\n    'title' => 'Τίτλος',\n    'new_title' => 'Νέος τίτλος σελίδας',\n    'url' => 'URL',\n    'filename' => 'Όνομα Αρχείου',\n    'layout' => 'Διάταξη',\n    'description' => 'Περιγραφή',\n    'preview' => 'Προεπισκόπηση',\n    'meta' => 'Meta',\n    'meta_title' => 'Τίτλος Meta',\n    'meta_description' => 'Περιγραφή Meta',\n    'markup' => 'Markup',\n    'code' => 'Κώδικας',\n    'content' => 'Περιεχόμενο',\n    'hidden' => 'Κρυφό',\n    'hidden_comment' => 'Οι κρυφές σελίδες είναι προσβάσημες μόνο από τους συνδεδεμένους back-end χρήστες.',\n    'enter_fullscreen' => 'Μετάβαση σε λειτουργία πλήρους οθόνης',\n    'exit_fullscreen' => 'Έξοδος από την λειτουργία πλήρους οθόνης',\n    'open_searchbox' => 'Άνοιγμα του πλαισίου Αναζήτησης',\n    'open_replacebox' => 'Άνοιγμα του πλαισίου Αντικατάστασης',\n  ],\n  'asset' => [\n    'menu_label' => 'Πόροι',\n    'unsaved_label' => 'Μη αποθηκευμένοι πόροι',\n    'drop_down_add_title' => 'Προσθήκη...',\n    'drop_down_operation_title' => 'Ενέργια...',\n    'upload_files' => 'Ανέβασμα αρχείου(α)',\n    'create_file' => 'Δημιουργία αρχείου',\n    'create_directory' => 'Δημιουργία καταλόγου',\n    'directory_popup_title' => 'Νέος κατάλογος',\n    'directory_name' => 'Όνομα καταλόγου',\n    'rename' => 'Μετονομασία',\n    'delete' => 'Διαγραφή',\n    'move' => 'Μετακίνηση',\n    'select' => 'Επιλογή',\n    'new' => 'Νέο αρχείο',\n    'rename_popup_title' => 'Μετονομασία',\n    'rename_new_name' => 'Νέο όνομα',\n    'invalid_path' => 'Η διαδρομή μπορεί να περιέχει μόνο ψηφία, Λατινικούς χαρακτήρες, κενά και τα ακόλουθα σύμβολα: ._-/',\n    'error_deleting_file' => 'Σφάλμα κατά την διαγραφή του αρχείου :name.',\n    'error_deleting_dir_not_empty' => 'Σφάλμα κατά την διαγραφή του καταλόγου :name. Ο κατάλογος δεν είναι άδειος.',\n    'error_deleting_dir' => 'Σφάλμα κατά την διαγραφή του καταλόγου :name.',\n    'invalid_name' => 'Το όνομα μπορεί να περιέχει μόνο ψηφία, Λατινικούς χαρακτήρες, κενά και τα ακόλουθα σύμβολα: ._-',\n    'original_not_found' => 'Το αρχικό αρχείο ή κατάλογος δεν βρέθηκε',\n    'already_exists' => 'Το αρχείο ή ο κατάλογος με αυτό το όνομα υπάρχει ήδη',\n    'error_renaming' => 'Σφάλμα κατά την μετονομασία του αρχείου ή του καταλόγου',\n    'name_cant_be_empty' => 'Το όνομα δεν μπορεί να είναι άδειο',\n    'too_large' => 'Το ανεβασμένο αρχείο είναι πολύ μεγάλο. Το μέγιστο επιτρεπόμενο μέγεθος αρχείου είναι :max_size',\n    'type_not_allowed' => 'Επιτρέπονται μόνο οι επόμενοι τύποι αρχείων:allowed_types',\n    'file_not_valid' => 'Το αρχείο δεν είναι έγκυρο',\n    'error_uploading_file' => 'Σφάλμα κατά το ανέβασμα του αρχείου \\':name\\': :error',\n    'move_please_select' => 'παρακαλούμε επιλέξτε',\n    'move_destination' => 'Κατάλογος προορισμού',\n    'move_popup_title' => 'Μετακίνηση πόρων',\n    'move_button' => 'Μετακίνηση',\n    'selected_files_not_found' => 'Τα επιλεγμένα αρχεία δεν βρέθηκαν',\n    'select_destination_dir' => 'Παρακαλούμε επιλέξτε έναν κατάλογο προορισμού',\n    'destination_not_found' => 'Ο κατάλογος προορισμού δεν βρέθηκε',\n    'error_moving_file' => 'Σφάλμα κατά την μετακίνηση του αρχείου :file',\n    'error_moving_directory' => 'Σφάλμα κατά την μετακίνηση του καταλόγου :dir',\n    'error_deleting_directory' => 'Σφάλμα κατά την διαγραφή του αρχικού καταλόγου :dir',\n    'path' => 'Διαδρομή',\n  ],\n  'component' => [\n    'menu_label' => 'Συστατικά',\n    'invalid_request' => 'Το πρότυπο δεν μπορεί να σωθεί λόγω των μη έγκυρων δεδομένων του συστατικού.',\n    'no_records' => 'Δεν βρέθηκαν συστατικά',\n    'not_found' => 'Το συστατικό \\':name\\' δεν βρέθηκε.',\n    'method_not_found' => 'Το συστατικό \\':name\\' δεν περιέχει την μέθοδο \\':method\\'.',\n  ],\n  'template' => [\n    'not_found' => 'Το πρότυπο δεν βρέθηκε.',\n    'saved' => 'Το πρότυπο σώθηκε.',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Διαχείριση των αρχείων περιεχομένου του ιστότοπου,//Manage website content files',\n    'manage_assets' => 'Διαχείριση πόρων του ιστότοπου - εικόνες, αρχεία JavaScript, αρχεία CSS',\n    'manage_pages' => 'Δημιουργία, τροποποίηση και διαγραφή των σελίδων του ιστότοπου,//Create, modify and delete website pages',\n    'manage_layouts' => 'Δημιουργία, τροποποίηση και διαγραφή των διατάξεων του CMS',\n    'manage_partials' => 'Δημιουργία, τροποποίηση και διαγραφή των τμημάτων του CMS',\n    'manage_themes' => 'Ενεργοποίηση, απενεργοποίηση και ρύθμιση των θεμάτων του CMS',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/el.json",
    "content": "{\n  \"Themes\": \"Θέματα\",\n  \"Manage Themes\": \"Διαχείριση θεμάτων\",\n  \"Customize Theme\": \"Προσαρμογή Θέματος\",\n  \"Manage Maintenance Mode\": \"Διαχείριση λειτουργίας συντήρησης\",\n  \"View Website During Maintenance\": \"Προβολή ιστότοπου κατά τη διάρκεια της συντήρησης\",\n  \"Manage Content\": \"Διαχείριση Περιεχομένου\",\n  \"Manage Asset Files\": \"Διαχείριση αρχείων περιουσιακών στοιχείων\",\n  \"Manage Pages\": \"Διαχείριση Σελίδων\",\n  \"Manage Layouts\": \"Διαχείριση διατάξεων\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Διαμορφώστε τη σελίδα λειτουργίας συντήρησης και εναλλάξτε την ρύθμιση.\",\n  \"Maintenance Mode\": \"Λειτουργία συντήρησης\",\n  \"Select the page to show when maintenance mode is activated.\": \"Επιλέξτε την σελίδα που θα προβληθεί όταν η λειτουργεία συντήρησης ενεργοποιηθεί.\",\n  \"Enable maintenance mode\": \"Ενεργοποίηση λειτουργίας συντήρησης\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Η λειτουργεία συντήρησης θα εμφανίσει την σελίδα συντήρησης στους επισκέπτες που δεν είναι συνδεδεμένοι στην περιοχή του back-end.\",\n  \"Resources\": \"Πόροι\",\n  \"Reference assets and variables included on this page.\": \"Αναφορά περιουσιακών στοιχείων και μεταβλητών που περιλαμβάνονται σε αυτήν τη σελίδα.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Αρχεία JavaScript στο φάκελο assets/js\",\n  \"LESS\": \"ΠΙΟ ΛΙΓΟ\",\n  \"LESS file(s) in the assets/less folder\": \"ΛΙΓΟΤΕΡΟ αρχείο(α) στον φάκελο στοιχεία/λιγότερα\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Αρχεία SCSS στο φάκελο assets/scss\",\n  \"Variables\": \"Μεταβλητές\",\n  \"Page variables name(s) and value(s)\": \"Όνομα(τα) μεταβλητών σελίδας και τιμές\",\n  \"Headers\": \"Κεφαλίδες\",\n  \"Page header name(s) and value(s)\": \"Όνομα(α) κεφαλίδας σελίδας και τιμές\",\n  \"Site Picker\": \"Επιλογέας τοποθεσίας\",\n  \"Displays links for selecting a different site.\": \"Εμφανίζει συνδέσμους για την επιλογή διαφορετικής τοποθεσίας.\",\n  \"Unknown component\": \"Άγνωστο συστατικό\",\n  \"View Bag\": \"Δείτε την Τσάντα\",\n  \"Stores custom template properties.\": \"Αποθηκεύει τις ιδιότητες προσαρμοσμένου προτύπου.\",\n  \"By :name\": \"Από όνομα\",\n  \"The theme ':name' is not found.\": \"Το θέμα ':name' δεν βρέθηκε.\",\n  \"Manage the front-end theme and customization options.\": \"Προεπισκόπηση των εγκατεστημένων θεμάτων και επιλογή του ενεργού θέματος.\",\n  \"Site Theme\": \"Θέμα Front-End\",\n  \"Properties\": \"Ιδιότητες\",\n  \"Publish\": \"Δημοσιεύω\",\n  \"Advanced\": \"Προχωρημένος\",\n  \"Name\": \"Όνομα\",\n  \"New theme name\": \"Νέο όνομα θέματος\",\n  \"Author Name\": \"Δημιουργός\",\n  \"Person or company name\": \"Άτομο ή όνομα εταιρίας\",\n  \"Directory Name\": \"Όνομα καταλόγου\",\n  \"The destination theme directory\": \"Ο κατάλογος προορισμού του θέματος\",\n  \"Description\": \"Περιγραφή\",\n  \"Theme description\": \"Περιγραφή θέματος\",\n  \"Homepage\": \"Αρχική σελίδα\",\n  \"Website URL\": \"URL Ιστοσελίδας\",\n  \"Author Code\": \"Κωδικός συγγραφέα\",\n  \"A unique code for the author used for distribution\": \"Ένας μοναδικός κωδικός για τον συγγραφέα που χρησιμοποιείται για τη διανομή\",\n  \"Theme Code\": \"Κωδικας\",\n  \"A unique code for this theme used for distribution\": \"Ένας μοναδικός κωδικός για το θέμα ο οποίος χρησιμοποιείται για διανομή.\",\n  \"Parent Theme\": \"Θέμα γονέα\",\n  \"Database Mode\": \"Λειτουργία βάσης δεδομένων\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Αποθηκεύστε τις αλλαγές σε αυτό το θέμα στη βάση δεδομένων αντί για το σύστημα αρχείων\",\n  \"-- no parent --\": \"-- χωρίς γονέα --\",\n  \"Theme\": \"Θέμα\",\n  \"Folders\": \"Κατάλογοι\",\n  \"Please select the theme folders you would like to export\": \"Παρακαλούμε επιλέξτε τους καταλόγους του θέματος που θέλετε να εξάγετε\",\n  \"Theme archive file\": \"Αρχείο αρχειοθέτησης θέματος.\",\n  \"Overwrite existing files\": \"Αντικαταστήσετε τα υπάρχοντα αρχεία\",\n  \"Untick this box to only import new files\": \"Απόεπιλέξτε αυτό το πλαίσιο ελέγχου για την εισαγωγή μόνο των νέων αρχείων\",\n  \"Please select the theme folders you would like to import\": \"Παρακαλούμε επιλέξτε τους καταλόγους του θέματος που θέλετε να εισαγάγετε\",\n  \"Activate\": \"Ενεργοποίηση\",\n  \"Customize\": \"Προσαρμογή\",\n  \"Duplicate\": \"Διπλότυπο\",\n  \"Duplicate Theme\": \"Διπλότυπο θέματος\",\n  \"Theme Duplicated!\": \"Δημιουργήθηκε διπλότυπο του θέματος!\",\n  \"Manage\": \"Διαχείριση\",\n  \"Manage Theme\": \"Διαχείριση θέματος\",\n  \"Edit Properties\": \"Επεξεργασία ιδιοτήτων\",\n  \"Save Properties\": \"Αποθήκευση ιδιοτήτων\",\n  \"Import\": \"Εισαγωγή\",\n  \"Import Theme\": \"Εισαγωγή θέματος\",\n  \"Theme Imported!\": \"Το θεμα εισήχθη!\",\n  \"Export\": \"Εξαγωγή\",\n  \"Export Theme\": \"Εξαγωγή θέματος\",\n  \"Delete\": \"Διαγραφή\",\n  \"Delete this theme? It cannot be undone!\": \"Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το θέμα; Αυτό δεν μπορεί να ανευρεθεί!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Δεν μπορεί να διαγραφεί το ενεργό θέμα, προσπαθήστε να ενεργοποιήστε πρώτα εάν άλλο θέμα.\",\n  \"Theme deleted!\": \"Το θέμα διαγράφηκε!\",\n  \"Create Theme\": \"Δημιουργία θέματος\",\n  \"Create\": \"Δημιουργία\",\n  \"Create a New Blank Theme\": \"Δημιουργία ενός νέου κενού θέματος\",\n  \"Theme Created!\": \"Το θέμα δημιουργήθηκε!\",\n  \"Please specify a name for the theme.\": \"Παρακαλούμε ορίστε ένα όνομα για το θέμα.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Το όνομα μπορεί να περιέχει μόνο ψηφιά, Λατινικά γράμματα και τα ακόλουθα σύμβολα: _-\",\n  \"Desired theme directory already exists.\": \"Ο επιθυμητός κατάλογος για το θέμα υπάρχει ήδη.\",\n  \"Theme directory\": \"Κατάλογος θέματος\",\n  \"Provide a new directory name for the duplicated theme.\": \"Δώστε ένα νέο όνομα καταλόγου για το διπλότυπο θέμα.\",\n  \"Find More Themes\": \"Εύρεση περισσοτέρων θεμάτων\",\n  \"Saving Theme...\": \"Αποθήκευση θέματος...\",\n  \"Return to Themes List\": \"Επιστροφή στην λίστα θεμάτων\",\n  \"No themes found\": \"Δεν βρέθηκαν θέματα\",\n  \"Seed Theme\": \"Θέμα σπόρων\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Συμπληρώστε το καθορισμένο θέμα με σχεδιαγράμματα, μεταφράσεις και δεδομένα.\",\n  \"Theme Seeded!\": \"Theme Seeded!\",\n  \"Select Page Link\": \"Επιλέξτε Σύνδεσμος σελίδας\",\n  \"Search all references...\": \"Αναζήτηση όλων των παραπομπών...\",\n  \"CMS Page\": \"Σελίδα CMS\",\n  \"Link\": \"Σύνδεσμος\",\n  \"Please select a CMS page\": \"Επιλέξτε μια σελίδα CMS\",\n  \"Please select a page reference\": \"Επιλέξτε μια αναφορά σελίδας\",\n  \"Please enter a valid URL\": \"Εισαγάγετε μια έγκυρη διεύθυνση URL\",\n  \"Delete Theme\": \"Διαγραφή θέματος\",\n  \"Activate Theme\": \"Ενεργοποίηση θέματος\",\n  \"Manage Partials\": \"Διαχείριση μερικών\",\n  \"No Title\": \"Χωρίς τίτλο\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Ένα μοναδικό όνομα δίνεται σε αυτό το συστατικό όταν το χρησιμοποιείτε στον κώδικα της σελίδας ή της διάταξης.\",\n  \"Alias\": \"Ψευδώνυμο\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Τα ψευδώνυμα των συστατικών είναι υποχρεωτικά και μπορούν να περιέχουν μόνο Λατινικά σύμβολα, αριθμούς, και κάτω παύλες. Τα ψευδώνυμα θα πρέπει να αρχίζουν με ένα λατινικό σύμβολο.\",\n  \"Unnamed\": \"Χωρίς Όνομα\",\n  \"No description provided\": \"Δεν παρέχεται περιγραφή\",\n  \"No snippets found\": \"Δεν βρέθηκαν αποσπάσματα\",\n  \"Search...\": \"Αναζήτηση...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Απόσπασμα με τον ζητούμενο κωδικό :code δεν βρέθηκε στο πρότυπο θέμα.\",\n  \"Snippet\": \"Αποσπάσματα\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Εισάγετε ένα κώδικα για να κάνεται αυτό το partial διαθέσιμο σαν απόσπασμα στο πρόσθετο Στατικών Σελίδων.\",\n  \"Please enter the snippet code\": \"Εισαγάγετε τον κωδικό του αποσπάσματος\",\n  \"Snippet Code\": \"Κώδικας αποσπάσματος\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Το όνομα εμφανίζεται στην λίστα αποσπασμάτων στην πλευρική στήλη Στατικών Σελίδων και σε μία Σελίδα όταν προστίθεται ένα απόσπασμα.\",\n  \"Please enter the snippet name\": \"Εισαγάγετε το όνομα του αποσπάσματος\",\n  \"Property Title\": \"Τίτλος ιδιότητας\",\n  \"Please provide the property title\": \"Παρακαλείστε να δώσετε τον τίτλο ιδιοκτησίας\",\n  \"Code\": \"Κωδικός\",\n  \"Please provide the property name\": \"Παρακαλείστε να δώσετε το όνομα του ακινήτου\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Οι κωδικοί των ιδιοτήτων πρέπει να ξεκινούν με Λατινικά γράμματα και μπορούν να περιέχουν μόνο Λατινικά γράμματα και αριθμητικά ψηφία\",\n  \"Type\": \"Τύπος\",\n  \"Select\": \"Επιλέγω\",\n  \"String\": \"Κείμενο\",\n  \"Checkbox\": \"Πλαίσιο ελέγχου\",\n  \"Dropdown\": \"Πτυσσόμενες επιλογές\",\n  \"Please select the property type\": \"Επιλέξτε τον τύπο ακινήτου\",\n  \"Default\": \"Προκαθορισμένο\",\n  \"Options\": \"Επιλογές\",\n  \"Define a Snippet Partial\": \"Ορίστε ένα μερικό απόσπασμα\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Μή έγκυρο κλειδί πτυσσόμενης επιλογής: :key. Τα κλειδιά επιλογών μπορούνα να περιέχουν μόνο αριθμιτικά ψηφία, Λατινικά γράμματα και τους χαρακτήρες _ και -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Η περιγραφή εμφανίζεται στη λίστα αποσπασμάτων στο πρόγραμμα επεξεργασίας όταν προστίθεται ένα απόσπασμα.\",\n  \"Details\": \"Λεπτομέριες\"\n}"
  },
  {
    "path": "modules/cms/lang/en/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Invalid file name: :name. File names can contain only alphanumeric symbols, underscores, dashes and dots. Some examples of correct file names: page.htm, page, subdirectory/page',\n    'invalid_file_inspector' => 'Invalid file name. File names can contain only alphanumeric symbols, underscores, dashes and dots. Some examples of correct file names: page.htm, page, subdirectory/page',\n    'invalid_property' => 'The property \\':name\\' cannot be set',\n    'file_already_exists' => 'File \\':name\\' already exists.',\n    'error_saving' => 'Error saving file \\':name\\'. Please check write permissions.',\n    'error_creating_directory' => 'Error creating directory :name. Please check write permissions.',\n    'invalid_file_extension' => 'Invalid file extension: :invalid. Allowed extensions are: :allowed.',\n    'error_deleting' => 'Error deleting the template file \\':name\\'. Please check write permissions.',\n    'delete_success' => 'Templates deleted: :count.',\n    'file_name_required' => 'The File Name field is required.',\n    'safe_mode_enabled' => 'Safe mode is currently enabled that prevents PHP code changes.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Website',\n      'online' => 'Online',\n      'maintenance' => 'In Maintenance',\n      'manage_themes' => 'Manage Themes',\n      'customize_theme' => 'Customize Theme',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'The active theme is not set.',\n      'not_found' => 'The active theme is not found.',\n      'is_locked' => 'The theme \\':theme\\' is locked and cannot be used. Please duplicate this theme or create a child theme.',\n    ],\n    'edit' => [\n      'not_set' => 'The edit theme is not set.',\n      'not_found' => 'The edit theme is not found.',\n      'not_match' => 'The object you\\'re trying to access doesn\\'t belong to the theme being edited. Please reload the page.',\n    ],\n    'setting_edit_theme' => 'Changing edit theme',\n    'edit_theme_changed' => 'Edit theme changed',\n  ],\n  'page' => [\n    'not_found_name' => 'The page \\':name\\' is not found',\n    'not_found' => [\n      'label' => 'Page Not Found',\n      'help' => 'The requested page cannot be found.',\n    ],\n    'custom_error' => [\n      'label' => 'Page Error',\n      'help' => 'We\\'re sorry, but something went wrong and the page cannot be displayed.',\n    ],\n    'menu_label' => 'Pages',\n    'unsaved_label' => 'Unsaved page(s)',\n    'no_list_records' => 'No pages found',\n    'new' => 'New page',\n    'invalid_url' => 'Invalid URL format. The URL should start with the forward slash symbol and can contain digits, Latin letters and the following symbols: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Delete selected pages?',\n    'delete_confirm_single' => 'Delete this page?',\n    'no_layout' => '-- no layout --',\n    'title' => 'Page title',\n    'url' => 'Page URL',\n    'url_required' => 'The page URL is required.',\n    'file_name' => 'Page file name',\n    'editor_node_name' => 'Pages',\n    'editor_sorting' => 'Sort Pages',\n    'editor_sort_by_url' => 'URL',\n    'editor_sort_by_title' => 'Title',\n    'editor_sort_by_file_name' => 'File Name',\n    'editor_grouping' => 'Group Pages',\n    'editor_group_by_filepath' => 'File Path',\n    'editor_group_by_url' => 'URL',\n    'editor_display' => 'Display',\n    'editor_display_title' => 'Title',\n    'editor_display_url' => 'URL',\n    'editor_display_file' => 'File Path',\n    'editor_markup' => 'Markup',\n    'editor_code' => 'Code',\n    'description_hint' => 'The description is optional and only visible in the back-end user interface.',\n    'create_new' => 'New Page',\n  ],\n  'layout' => [\n    'not_found_name' => 'The layout \\':name\\' is not found',\n    'menu_label' => 'Layouts',\n    'unsaved_label' => 'Unsaved layout(s)',\n    'no_list_records' => 'No layouts found',\n    'new' => 'New layout',\n    'delete_confirm_multiple' => 'Delete selected layouts?',\n    'delete_confirm_single' => 'Delete this layout?',\n    'editor_node_name' => 'Layouts',\n    'create_new' => 'New Layout',\n  ],\n  'partial' => [\n    'not_found_name' => 'The partial \\':name\\' is not found.',\n    'invalid_name' => 'Invalid partial name: :name.',\n    'menu_label' => 'Partials',\n    'unsaved_label' => 'Unsaved partial(s)',\n    'no_list_records' => 'No partials found',\n    'delete_confirm_multiple' => 'Delete selected partials?',\n    'delete_confirm_single' => 'Delete this partial?',\n    'editor_node_name' => 'Partials',\n    'new' => 'New partial',\n    'create_new' => 'New Partial',\n  ],\n  'content' => [\n    'not_found_name' => 'The content file \\':name\\' is not found.',\n    'menu_label' => 'Content',\n    'unsaved_label' => 'Unsaved content',\n    'no_list_records' => 'No content files found',\n    'delete_confirm_multiple' => 'Delete selected content files or directories?',\n    'delete_confirm_single' => 'Delete this content file?',\n    'editor_node_name' => 'Content Files',\n    'new' => 'New Content File',\n    'editor_content' => 'Content',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Invalid AJAX handler name: :name.',\n    'not_found' => 'AJAX handler \\':name\\' was not found.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Add',\n    'search' => 'Search...',\n  ],\n  'editor' => [\n    'settings' => 'Settings',\n    'title' => 'Title',\n    'new_title' => 'New Page Title',\n    'url' => 'URL',\n    'filename' => 'File Name',\n    'layout' => 'CMS Layout',\n    'description' => 'Description',\n    'preview' => 'Preview',\n    'page' => 'CMS Page',\n    'edit_theme' => 'Edit Theme',\n    'change_edit_theme' => 'Change Edit Theme',\n    'edit_theme_saved_changed_tabs' => 'You have unsaved changes in open tabs. Please save them or close the tabs in order to proceed.',\n    'partial' => 'CMS Partial',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Title',\n    'meta_description' => 'Meta Description',\n    'meta_image' => 'Meta Image',\n    'meta_image_comment' => 'Image used when shared on social media, ideally 1200x630px.',\n    'meta_type' => 'Meta Type',\n    'meta_type_website' => 'Website',\n    'meta_type_article' => 'Article',\n    'meta_type_product' => 'Product',\n    'meta_robots' => 'Robot Directives',\n    'meta_robots_default' => 'Index & Follow (Default)',\n    'meta_robots_noindex_follow' => 'No Index, Follow Links',\n    'meta_robots_noindex_nofollow' => 'No Index, No Follow',\n    'markup' => 'Markup',\n    'code' => 'Code',\n    'content' => 'CMS Content File',\n    'asset' => 'Asset File',\n    'hidden' => 'Hidden',\n    'hidden_comment' => 'Hidden pages are accessible only by logged-in back-end users.',\n    'priority' => 'Priority',\n    'priority_comment' => 'Priority layouts will load their contents before the page contents.',\n    'enter_fullscreen' => 'Enter fullscreen mode',\n    'exit_fullscreen' => 'Exit fullscreen mode',\n    'open_searchbox' => 'Open Search box',\n    'open_replacebox' => 'Open Replace box',\n    'commit' => 'Commit',\n    'reset' => 'Reset',\n    'commit_confirm' => 'Are you sure you want to commit your changes to this file to the filesystem? This will overwrite the existing file on the filesystem',\n    'reset_confirm' => 'Are you sure you want to reset this file to the copy that is on the filesystem? This will completely replace it with the file that is on the filesystem',\n    'committing' => 'Committing',\n    'resetting' => 'Resetting',\n    'commit_success' => 'The :type has been committed to the filesystem',\n    'reset_success' => 'The :type has been reset to the filesystem version',\n    'error_loading_header' => 'Error loading template',\n    'component_list' => 'Components',\n    'component_list_description' => 'To add a component, click it or drag and drop to the Markup editor.',\n    'info' => 'Info',\n    'refresh' => 'Refresh',\n    'create' => 'Create',\n    'manage_themes' => 'Manage Themes',\n    'error_no_doctype_permissions' => 'You don\\'t have permission to manage the document type: :doctype',\n  ],\n  'asset' => [\n    'menu_label' => 'Assets',\n    'unsaved_label' => 'Unsaved asset(s)',\n    'drop_down_add_title' => 'Add...',\n    'drop_down_operation_title' => 'Action...',\n    'upload_files' => 'Upload File(s)',\n    'create_file' => 'Create File',\n    'create_directory' => 'New Directory',\n    'directory_popup_title' => 'New Directory',\n    'directory_name' => 'Directory Name',\n    'directory_name_required' => 'The directory name is required',\n    'rename_name_required' => 'The name is required',\n    'rename' => 'Rename',\n    'delete' => 'Delete',\n    'move' => 'Move',\n    'moving' => 'Moving selected items',\n    'moved' => 'Successfully moved',\n    'saved' => 'File saved',\n    'deleted' => 'File deleted',\n    'select' => 'Select',\n    'new' => 'New File',\n    'rename_popup_title' => 'Rename',\n    'rename_new_name' => 'New name',\n    'invalid_path' => 'Path can contain only digits, Latin letters, spaces and the following symbols: ._-@/',\n    'error_deleting_file' => 'Error deleting file :name.',\n    'error_deleting_dir_not_empty' => 'Error deleting directory :name. The directory is not empty.',\n    'error_deleting_dir' => 'Error deleting directory :name.',\n    'invalid_name' => 'Name can contain only digits, Latin letters, spaces and the following symbols: ._-@',\n    'original_not_found' => 'Original file or directory not found',\n    'already_exists' => 'File or directory with this name already exists',\n    'error_renaming' => 'Error renaming the file or directory',\n    'name_cant_be_empty' => 'The name cannot be empty',\n    'type_not_allowed' => 'Only the following file types are allowed: :allowed_types',\n    'error_uploading_file' => 'Error uploading file \\':name\\': :error',\n    'move_please_select' => 'please select',\n    'move_destination' => 'Destination Directory',\n    'move_popup_title' => 'Move Assets',\n    'move_button' => 'Move',\n    'no_list_records' => 'No files found',\n    'path' => 'Path',\n    'editor_node_name' => 'Assets',\n    'open' => 'Open',\n  ],\n  'component' => [\n    'menu_label' => 'Components',\n    'invalid_request' => 'The template cannot be saved because of invalid component data.',\n    'no_records' => 'No components found',\n    'not_found' => 'The component \\':name\\' is not found.',\n    'method_not_found' => 'The component \\':name\\' does not contain a method \\':method\\'.',\n    'expand_or_collapse' => 'Expand or collapse the component list',\n    'remove' => 'Remove component',\n    'expand_partial' => 'Expand Component Partial',\n  ],\n  'template' => [\n    'invalid_type' => 'Unknown template type.',\n    'not_found' => 'Template not found.',\n    'saved' => 'Template saved',\n    'saved_to_db' => 'Template saved to the database',\n    'file_updated' => 'Template file updated',\n    'reset_from_template_success' => 'Template was reset from file',\n    'reloaded' => 'Template reloaded',\n    'deleted' => 'Template deleted',\n    'no_list_records' => 'No records found',\n    'delete_confirm' => 'Delete selected templates?',\n    'order_by' => 'Order By',\n    'last_modified' => 'Last Modified',\n    'storage' => 'Storage',\n    'template_file' => 'Template File',\n    'storage_filesystem' => 'Filesystem',\n    'storage_database' => 'database',\n    'update_file' => 'Update template file',\n    'reset_from_file' => 'Reset from template file',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Manage website content files',\n    'manage_assets' => 'Manage website assets - images, JavaScript files, CSS files',\n    'manage_pages' => 'Create, modify and delete website pages',\n    'manage_layouts' => 'Create, modify and delete CMS layouts',\n    'manage_partials' => 'Create, modify and delete CMS partials',\n    'manage_themes' => 'Activate, deactivate and configure CMS themes',\n    'manage_theme_options' => 'Configure customization options for the active theme',\n  ],\n  'theme_log' => [\n    'hint' => 'This log displays any changes made to the theme by administrators in the back-end area.',\n    'menu_label' => 'Theme Log',\n    'menu_description' => 'View changes made to the active theme.',\n    'empty_link' => 'Empty theme log',\n    'empty_loading' => 'Emptying theme log...',\n    'empty_success' => 'Theme log emptied',\n    'return_link' => 'Return to theme log',\n    'id' => 'ID',\n    'id_label' => 'Log ID',\n    'created_at' => 'Date & Time',\n    'user' => 'User',\n    'type' => 'Type',\n    'type_create' => 'Create',\n    'type_update' => 'Update',\n    'type_delete' => 'Delete',\n    'theme_name' => 'Theme',\n    'theme_code' => 'Theme code',\n    'old_template' => 'Template (Old)',\n    'new_template' => 'Template (New)',\n    'template' => 'Template',\n    'diff' => 'Changes',\n    'old_value' => 'Old Value',\n    'new_value' => 'New Value',\n    'preview_title' => 'Template Changes',\n    'template_updated' => 'Template was updated',\n    'template_created' => 'Template was created',\n    'template_deleted' => 'Template was deleted',\n  ],\n  'intellisense' => [\n    'learn_more' => 'Learn more',\n    'docs' => [\n      'partial' => 'Renders the contents of a CMS partial.',\n      'ajaxpartial' => 'Renders the contents of a CMS partial with AJAX support.',\n      'page' => 'Renders the contents of a CMS page into a layout template.',\n      'content' => 'Renders a CMS content block.',\n      'component' => 'Renders the default markup content for a CMS component.',\n      'placeholder' => 'Renders a placeholder section.',\n      'scripts' => 'Inserts JavaScript file references to scripts injected by the application.',\n      'styles' => 'Renders CSS links to stylesheet files injected by the application.',\n      'meta' => 'Renders HTML meta tags injected by the application.',\n      'flash' => 'Renders any flash messages stored in the user session.',\n      'verbatim' => 'Marks entire sections as being raw text that should not be parsed.',\n      'macro' => 'Allows to define custom functions in a template.',\n      'for' => 'Loop over each value in a collection.',\n      'if' => 'Allows for conditional displaying of the template markup.',\n      'abs_filter' => 'The `abs` filter returns the absolute value.',\n      'batch_filter' => 'The `batch` filter \"batches\" items by returning a list of lists with the given number of items. A second parameter can be provided and used to fill in missing items.',\n      'capitalize_filter' => 'The `capitalize` filter capitalizes a value. The first character will be uppercase, all others lowercase.',\n      'column_filter' => 'The `column` filter returns the values from a single column in the input array.',\n      'convert_encoding_filter' => 'The `convert_encoding` filter converts a string from one encoding to another. The first argument is the expected output charset and the second one is the input charset.',\n      'country_name_filter' => 'The `country_name` filter returns the country name given its ISO-3166 two-letter code.',\n      'currency_name_filter' => 'The `currency_name` filter returns the currency name given its three-letter code.',\n      'currency_symbol_filter' => 'The `currency_symbol` filter returns the currency symbol given its three-letter code.',\n      'data_uri_filter' => 'The `data_uri` filter generates a URL using the data scheme as defined in RFC 2397.',\n      'date_filter' => 'The `date` filter formats a date to a given format.',\n      'date_modify_filter' => 'The `date_modify` filter modifies a date with a given modifier string.',\n      'default_filter' => 'The `default` filter returns the passed default value if the value is undefined or empty, otherwise the value of the variable.',\n      'escape_filter' => 'The `escape` filter escapes a string using strategies that depend on the context.',\n      'filter_filter' => 'The `filter` filter filters elements of a sequence or a mapping using an arrow function. The arrow function receives the value of the sequence or mapping.',\n      'first_filter' => 'The `first` filter returns the first \"element\" of a sequence, a mapping, or a string.',\n      'format_filter' => 'The `format` filter formats a given string by replacing the placeholders (placeholders follows the [sprintf](https://www.php.net/sprintf) notation).',\n      'format_currency_filter' => 'The `format_currency` filter formats a number as a currency.',\n      'join_filter' => 'The `join` filter returns a string which is the concatenation of the items of a sequence',\n      'json_encode_filter' => 'The `json_encode` filter returns the JSON representation of a value.',\n      'keys_filter' => 'The `keys` filter returns the keys of an array. It is useful when you want to iterate over the keys of an array.',\n      'last_filter' => 'The `last` filter returns the last \"element\" of a sequence, a mapping, or a string.',\n      'length_filter' => 'The `length` filter returns the number of items of a sequence or mapping, or the length of a string.',\n      'lower_filter' => 'The `lower` filter converts a value to lowercase.',\n      'map_filter' => 'The `map` filter applies an arrow function to the elements of a sequence or a mapping. The arrow function receives the value of the sequence or mapping.',\n      'merge_filter' => 'The `merge` filter merges an array with another array.',\n      'nl2br_filter' => 'The `nl2br` filter inserts HTML line breaks before all newlines in a string.',\n      'number_format_filter' => 'The `number_format` filter formats numbers. It is a wrapper around PHP’s [number_format](https://www.php.net/number_format) function.',\n      'reduce_filter' => 'The `reduce` filter iteratively reduces a sequence or a mapping to a single value using an arrow function, so as to reduce it to a single value. The arrow function receives the return value of the previous iteration and the current value of the sequence or mapping.',\n      'replace_filter' => 'The `replace` filter formats a given string by replacing the placeholders.',\n      'reverse_filter' => 'The `reverse` filter reverses a sequence, a mapping, or a string.',\n      'round_filter' => 'The `round` filter rounds a number to a given precision.',\n      'slice_filter' => 'The `slice` filter extracts a slice of a sequence, a mapping, or a string.',\n      'sort_filter' => 'The `sort` filter sorts an array.',\n      'spaceless_filter' => 'Use the `spaceless` filter to remove whitespace between HTML tags, not whitespace within HTML tags or whitespace in plain text.',\n      'split_filter' => 'The `split` filter splits a string by the given delimiter and returns a list of strings.',\n      'striptags_filter' => 'The `striptags` filter strips SGML/XML tags and replace adjacent whitespace by one space.',\n      'title_filter' => 'The `title` filter returns a titlecased version of the value. Words will start with uppercase letters, all remaining characters are lowercase.',\n      'trim_filter' => 'The `trim` filter strips whitespace (or other characters) from the beginning and end of a string.',\n      'upper_filter' => 'The `upper` filter converts a value to uppercase.',\n      'url_encode_filter' => 'The `url_encode` filter percent encodes a given string as URL segment or an array as query string.',\n      'page_filter' => 'The `page` filter creates a link to a page using a page file name, without an extension, as a parameter.',\n      'theme_filter' => 'The `theme` filter returns an address relative to the active theme path of the website. ',\n      'app_filter' => 'The `app` filter returns an address relative to the public path of the website.',\n      'media_filter' => 'The `media` filter returns an address relative to the public path of the [media manager library](https://docs.octobercms.com/4.x/cms/media/introduction.html).',\n      'md_filter' => 'The `md` filter converts the value from Markdown to HTML format.',\n      'raw_filter' => 'The `raw` filter marks the value as being \"safe\", which means that a variable will not be escaped if `raw` is the last filter applied to it.',\n      'content_filter' => 'The `content` filter converts links and snippets found within the string as content.',\n      'link_filter' => 'The `link` filter converts a link found in the supplied string.',\n    ],\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/en.json",
    "content": "{\n  \"Themes\": \"Themes\",\n  \"Manage Themes\": \"Manage Themes\",\n  \"Customize Theme\": \"Customize Theme\",\n  \"Manage Maintenance Mode\": \"Manage Maintenance Mode\",\n  \"View Website During Maintenance\": \"View Website During Maintenance\",\n  \"Manage Content\": \"Manage Content\",\n  \"Manage Asset Files\": \"Manage Asset Files\",\n  \"Manage Pages\": \"Manage Pages\",\n  \"Manage Layouts\": \"Manage Layouts\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configure the maintenance mode page and toggle the setting.\",\n  \"Maintenance Mode\": \"Maintenance Mode\",\n  \"Select the page to show when maintenance mode is activated.\": \"Select the page to show when maintenance mode is activated.\",\n  \"Enable maintenance mode\": \"Enable maintenance mode\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\",\n  \"Resources\": \"Resources\",\n  \"Reference assets and variables included on this page.\": \"Reference assets and variables included on this page.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript file(s) in the assets/js folder\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"LESS file(s) in the assets/less folder\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS file(s) in the assets/scss folder\",\n  \"Variables\": \"Variables\",\n  \"Page variables name(s) and value(s)\": \"Page variables name(s) and value(s)\",\n  \"Headers\": \"Headers\",\n  \"Page header name(s) and value(s)\": \"Page header name(s) and value(s)\",\n  \"Site Picker\": \"Site Picker\",\n  \"Displays links for selecting a different site.\": \"Displays links for selecting a different site.\",\n  \"Unknown component\": \"Unknown component\",\n  \"View Bag\": \"View Bag\",\n  \"Stores custom template properties.\": \"Stores custom template properties.\",\n  \"By :name\": \"By :name\",\n  \"The theme ':name' is not found.\": \"The theme ':name' is not found.\",\n  \"Manage the front-end theme and customization options.\": \"Manage the front-end theme and customization options.\",\n  \"Site Theme\": \"Site Theme\",\n  \"Properties\": \"Properties\",\n  \"Publish\": \"Publish\",\n  \"Advanced\": \"Advanced\",\n  \"Name\": \"Name\",\n  \"New theme name\": \"New theme name\",\n  \"Author Name\": \"Author Name\",\n  \"Person or company name\": \"Person or company name\",\n  \"Directory Name\": \"Directory Name\",\n  \"The destination theme directory\": \"The destination theme directory\",\n  \"Description\": \"Description\",\n  \"Theme description\": \"Theme description\",\n  \"Homepage\": \"Homepage\",\n  \"Website URL\": \"Website URL\",\n  \"Author Code\": \"Author Code\",\n  \"A unique code for the author used for distribution\": \"A unique code for the author used for distribution\",\n  \"Theme Code\": \"Theme Code\",\n  \"A unique code for this theme used for distribution\": \"A unique code for this theme used for distribution\",\n  \"Parent Theme\": \"Parent Theme\",\n  \"Database Mode\": \"Database Mode\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Save changes to this theme in the database instead of the filesystem\",\n  \"-- no parent --\": \"-- no parent --\",\n  \"Theme\": \"Theme\",\n  \"Folders\": \"Folders\",\n  \"Please select the theme folders you would like to export\": \"Please select the theme folders you would like to export\",\n  \"Theme archive file\": \"Theme archive file\",\n  \"Overwrite existing files\": \"Overwrite existing files\",\n  \"Untick this box to only import new files\": \"Untick this box to only import new files\",\n  \"Please select the theme folders you would like to import\": \"Please select the theme folders you would like to import\",\n  \"Activate\": \"Activate\",\n  \"Customize\": \"Customize\",\n  \"Duplicate\": \"Duplicate\",\n  \"Duplicate Theme\": \"Duplicate Theme\",\n  \"Theme Duplicated!\": \"Theme Duplicated!\",\n  \"Manage\": \"Manage\",\n  \"Manage Theme\": \"Manage Theme\",\n  \"Edit Properties\": \"Edit Properties\",\n  \"Save Properties\": \"Save Properties\",\n  \"Import\": \"Import\",\n  \"Import Theme\": \"Import Theme\",\n  \"Theme Imported!\": \"Theme Imported!\",\n  \"Export\": \"Export\",\n  \"Export Theme\": \"Export Theme\",\n  \"Delete\": \"Delete\",\n  \"Delete this theme? It cannot be undone!\": \"Delete this theme? It cannot be undone!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Cannot delete the active theme, try making another theme active first.\",\n  \"Theme deleted!\": \"Theme deleted!\",\n  \"Create Theme\": \"Create Theme\",\n  \"Create\": \"Create\",\n  \"Create a New Blank Theme\": \"Create a New Blank Theme\",\n  \"Theme Created!\": \"Theme Created!\",\n  \"Please specify a name for the theme.\": \"Please specify a name for the theme.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Name can contain only digits, Latin letters and the following symbols: _-\",\n  \"Desired theme directory already exists.\": \"Desired theme directory already exists.\",\n  \"Theme directory\": \"Theme directory\",\n  \"Provide a new directory name for the duplicated theme.\": \"Provide a new directory name for the duplicated theme.\",\n  \"Find More Themes\": \"Find More Themes\",\n  \"Saving Theme...\": \"Saving Theme...\",\n  \"Return to Themes List\": \"Return to Themes List\",\n  \"No themes found\": \"No themes found\",\n  \"Seed Theme\": \"Seed Theme\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seed the specified theme with blueprints, translations and data.\",\n  \"Theme Seeded!\": \"Theme Seeded!\",\n  \"Select Page Link\": \"Select Page Link\",\n  \"Search all references...\": \"Search all references...\",\n  \"CMS Page\": \"CMS Page\",\n  \"Link\": \"Link\",\n  \"Please select a CMS page\": \"Please select a CMS page\",\n  \"Please select a page reference\": \"Please select a page reference\",\n  \"Please enter a valid URL\": \"Please enter a valid URL\",\n  \"Delete Theme\": \"Delete Theme\",\n  \"Activate Theme\": \"Activate Theme\",\n  \"Manage Partials\": \"Manage Partials\",\n  \"No Title\": \"No Title\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"A unique name given to this component when using it in the page or layout code.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\",\n  \"Unnamed\": \"Unnamed\",\n  \"No description provided\": \"No description provided\",\n  \"No snippets found\": \"No snippets found\",\n  \"Search...\": \"Search...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Snippet with the requested code :code was not found in the theme.\",\n  \"Snippet\": \"Snippet\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Enter a code to make this partial available as a snippet in content editors.\",\n  \"Please enter the snippet code\": \"Please enter the snippet code\",\n  \"Snippet Code\": \"Snippet Code\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"The name is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Please enter the snippet name\": \"Please enter the snippet name\",\n  \"Property Title\": \"Property Title\",\n  \"Please provide the property title\": \"Please provide the property title\",\n  \"Code\": \"Code\",\n  \"Please provide the property name\": \"Please provide the property name\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\",\n  \"Type\": \"Type\",\n  \"Select\": \"Select\",\n  \"String\": \"String\",\n  \"Checkbox\": \"Checkbox\",\n  \"Dropdown\": \"Dropdown\",\n  \"Please select the property type\": \"Please select the property type\",\n  \"Default\": \"Default\",\n  \"Options\": \"Options\",\n  \"Define a Snippet Partial\": \"Define a Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"The description is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Details\": \"Details\",\n  \"City\": \"City\",\n  \"Country\": \"Country\",\n  \"Page Path\": \"Page Path\",\n  \"Referral Domain\": \"Referral Domain\",\n  \"Pageviews\": \"Pageviews\",\n  \"Unique Visitors\": \"Unique Visitors\",\n  \"Traffic Information\": \"Traffic Information\",\n  \"Website Status\": \"Website Status\",\n  \"Website status information\": \"Website status information\",\n  \"Manage status\": \"Manage status\",\n  \"Maintenance\": \"Maintenance\",\n  \"Online\": \"Online\"\n}"
  },
  {
    "path": "modules/cms/lang/es/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nombre inválido del archivo: :name. El nombre del archivo puede contener solo caracteres alfanuméricos, guiones bajos, barras y puntos. Algunos ejemplos de nombres correctos son: pagina.htm, pagina, subdirectorio/pagina',\n    'invalid_property' => 'La propiedad \\':name\\' no se puede establecer',\n    'file_already_exists' => 'El archivo \\':name\\' ya existe.',\n    'error_saving' => 'Error guardando archivo \\':name\\'. Por favor, revisa los permisos de escritura.',\n    'error_creating_directory' => 'Error creando el directorio :name. Por favor, revisa los permisos de escritura.',\n    'invalid_file_extension' => 'Extensión de archivo inválida: :invalid. Las extensiones permitidas son: :allowed.',\n    'error_deleting' => 'Error eliminando el archivo de plantilla \":name\". Por favor, revisa los permisos de escritura.',\n    'delete_success' => 'Las plantillas fueron eliminadas satisfactoriamente: :count.',\n    'file_name_required' => 'El campo Nombre es obligatorio.',\n    'safe_mode_enabled' => 'El modo seguro está activado actualmente.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Sitio Web',\n      'online' => 'en línea',\n      'maintenance' => 'en mantenimiento',\n      'manage_themes' => 'Gestionar temas',\n      'customize_theme' => 'Personalizar tema',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'El tema activo no se ha establecido.',\n      'not_found' => 'El tema activo no se encuentra.',\n    ],\n    'edit' => [\n      'not_set' => 'El tema de edición no se ha establecido.',\n      'not_found' => 'El tema de edición no se encuentra.',\n      'not_match' => 'El objeto que está intentando acceder no pertenece al tema que se está editando. Porfavor recarga la página.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'La página \\':name\\' no se encuentra',\n    'not_found' => [\n      'label' => 'Página no encontrada',\n      'help' => 'La página solicitada no se encuentra.',\n    ],\n    'custom_error' => [\n      'label' => 'Error en la página',\n      'help' => 'Lo sentimos, pero algo salió mal y la página no se puede mostrar.',\n    ],\n    'menu_label' => 'Páginas',\n    'unsaved_label' => 'Página(s) sin guardar',\n    'no_list_records' => 'No se encuentran páginas',\n    'new' => 'Nueva página',\n    'invalid_url' => 'Formato de URL incorrecto. La URL debe empezar con el símbolo de barra diagonal y puede contener dígitos, letras latinas y los siguientes símbolos: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => '¿Deseas eliminar las páginas seleccionadas?',\n    'delete_confirm_single' => '¿Deseas eliminar esta página?',\n    'no_layout' => '-- sin diseño --',\n    'title' => 'Título de página',\n    'url' => 'URL de página',\n    'file_name' => 'Nombre de archivo de página',\n  ],\n  'layout' => [\n    'not_found_name' => 'El diseño \\':name\\' no se encuentra',\n    'menu_label' => 'Diseños',\n    'unsaved_label' => 'Diseño(s) sin guardar',\n    'no_list_records' => 'No se encuentran diseños',\n    'new' => 'Nuevo diseño',\n    'delete_confirm_multiple' => '¿Deseas eliminar los diseños seleccionados?',\n    'delete_confirm_single' => '¿Deseas eliminar este diseño?',\n  ],\n  'partial' => [\n    'not_found_name' => 'El nombre de parcial \\':name\\' no se encuentra.',\n    'invalid_name' => 'Nombre de parcial inválido: :name.',\n    'menu_label' => 'Parciales',\n    'unsaved_label' => 'Parcial(es) sin guardar',\n    'no_list_records' => 'No se encontraron parciales',\n    'delete_confirm_multiple' => '¿Deseas eliminar los parciales seleccionados?',\n    'delete_confirm_single' => '¿Deseas eliminar este parcial?',\n    'new' => 'Nuevo parcial',\n  ],\n  'content' => [\n    'not_found_name' => 'El archivo de contenido \\':name\\' no se encuentra.',\n    'menu_label' => 'Contenido',\n    'unsaved_label' => 'Contenido sin guardar',\n    'no_list_records' => 'No se encuentran archivos de contenido',\n    'delete_confirm_multiple' => '¿Deseas eliminar los archivos o directorios de contenido seleccionados?',\n    'delete_confirm_single' => '¿Deseas eliminar este archivo de contenido?',\n    'new' => 'Nuevo archivo de contenido',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Manejador de AJAX inválido: :name.',\n    'not_found' => 'El manejador de AJAX \\':name\\' no se encuentra.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Agregar',\n    'search' => 'Buscar...',\n  ],\n  'editor' => [\n    'settings' => 'Configuración',\n    'title' => 'Título',\n    'new_title' => 'Título de la nueva página',\n    'url' => 'URL',\n    'filename' => 'Nombre del archivo',\n    'layout' => 'Diseño',\n    'description' => 'Descripción',\n    'preview' => 'Vista previa',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Título',\n    'meta_description' => 'Meta Descripción',\n    'markup' => 'Marcado',\n    'code' => 'Código',\n    'content' => 'Contenido',\n    'hidden' => 'Oculto',\n    'hidden_comment' => 'Las páginas ocultas sólo son accesibles por los usuarios que han iniciado sesión en el back-end.',\n    'enter_fullscreen' => 'Abrir en pantalla completa',\n    'exit_fullscreen' => 'Salir de pantalla completa',\n    'open_searchbox' => 'Abrir caja de búsqueda',\n    'open_replacebox' => 'Abrir caja de reemplazo',\n  ],\n  'asset' => [\n    'menu_label' => 'Recursos',\n    'unsaved_label' => 'Recurso(s) sin guardar',\n    'drop_down_add_title' => 'Añadir...',\n    'drop_down_operation_title' => 'Acción...',\n    'upload_files' => 'Subir archivo(s)',\n    'create_file' => 'Crear archivo',\n    'create_directory' => 'Crear directorio',\n    'directory_popup_title' => 'Nuevo directorio',\n    'directory_name' => 'Nombre del directorio',\n    'rename' => 'Renombrar',\n    'delete' => 'Borrar',\n    'move' => 'Mover',\n    'select' => 'Seleccionar',\n    'new' => 'Nuevo archivo',\n    'rename_popup_title' => 'Renombrar',\n    'rename_new_name' => 'Nuevo nombre',\n    'invalid_path' => 'La ruta sólo puede contener dígitos, letras, espacios y los símbolos siguientes: ._-/',\n    'error_deleting_file' => 'Error al borrar el archivo :name.',\n    'error_deleting_dir_not_empty' => 'Error borrando el directorio :name. El directorio no está vacío.',\n    'error_deleting_dir' => 'Error borrando el archivo :name.',\n    'invalid_name' => 'El nombre sólo puede contener dígitos, letras, espacios y los símbolos siguientes: ._-',\n    'original_not_found' => 'El archivo o directorio original no se encuentra',\n    'already_exists' => 'Un archivo o directorio con este nombre ya existe',\n    'error_renaming' => 'Error renombrando el archivo o directorio',\n    'name_cant_be_empty' => 'El nombre no puede estar vacío',\n    'too_large' => 'El archivo subido es demasiado grande. El tamaño máximo permitido es :max_size',\n    'type_not_allowed' => 'Sólo los siguientes tipos de archivos están permitidos: :allowed_types',\n    'file_not_valid' => 'El archivo no es válido',\n    'error_uploading_file' => 'Error subiendo el archivo \":name\": :error',\n    'move_please_select' => 'por favor seleccionar',\n    'move_destination' => 'Directorio de destino',\n    'move_popup_title' => 'Mover recursos',\n    'move_button' => 'Mover',\n    'selected_files_not_found' => 'Los archivos seleccionados no se encuentran',\n    'select_destination_dir' => 'Por favor seleccione un directorio de destino',\n    'destination_not_found' => 'El directorio de destino no se encuentra',\n    'error_moving_file' => 'Error moviendo el archivo :file',\n    'error_moving_directory' => 'Error moviendo el directorio :dir',\n    'error_deleting_directory' => 'Error borrando el directorio original :dir',\n    'no_list_records' => 'No se encontraron archivos',\n    'delete_confirm' => '¿Deseas eliminar los archivos o directorios seleccionados?',\n    'path' => 'Ruta',\n  ],\n  'component' => [\n    'menu_label' => 'Componentes',\n    'invalid_request' => 'La plantilla no puede ser guardada porque tiene datos de componente inválidos.',\n    'no_records' => 'No se encontraron componentes',\n    'not_found' => 'El componente \\':name\\' no se encuentra.',\n    'method_not_found' => 'El componente \\':name\\' no contiene un método \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Tipo de plantilla desconocido.',\n    'not_found' => 'No se encontró la plantilla.',\n    'saved' => 'La plantilla se guardó correctamente.',\n    'no_list_records' => 'No se encontraron registros',\n    'delete_confirm' => '¿Deseas eliminar las plantillas seleccionadas?',\n    'order_by' => 'Ordenar por',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Gestionar archivos de contenido del sitio',\n    'manage_assets' => 'Gestionar recursos del sitio - imágenes, archivos JavasCript, archivos CSS',\n    'manage_pages' => 'Crear, modificar y eliminar páginas del sitio',\n    'manage_layouts' => 'Crear, modificar y eliminar diseños del CMS',\n    'manage_partials' => 'Crear, modificar y eliminar parciales del CMS',\n    'manage_themes' => 'Activar, desactivar y configurar temas del CMS',\n  ],\n  'theme_log' => [\n    'hint' => 'Este registro muestra todos los cambios hechos al tema por los administradores en el área de back-end.',\n    'menu_label' => 'Registro del tema',\n    'menu_description' => 'Ver cambios hechos al tema activo.',\n    'empty_link' => 'Registro del tema vacío',\n    'empty_loading' => 'Vaciando registro del tema...',\n    'empty_success' => 'Registro del tema vaciado',\n    'return_link' => 'Volver al registro del tema',\n    'id' => 'ID',\n    'id_label' => 'ID de registro',\n    'created_at' => 'Fecha y hora',\n    'user' => 'Usuario',\n    'type' => 'Tipo',\n    'type_create' => 'Crear',\n    'type_update' => 'Modificar',\n    'type_delete' => 'Eliminar',\n    'theme_name' => 'Tema',\n    'theme_code' => 'Código de tema',\n    'old_template' => 'Plantilla (Antigua)',\n    'new_template' => 'Plantilla (Nueva)',\n    'template' => 'Plantilla',\n    'diff' => 'Cambios',\n    'old_value' => 'Valor antiguo',\n    'new_value' => 'Valor nuevo',\n    'preview_title' => 'Cambios de la plantilla',\n    'template_updated' => 'La plantilla se modificó',\n    'template_created' => 'La plantilla se creó',\n    'template_deleted' => 'La plantilla se eliminó',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/es-ar/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nombre inválido del archivo: :name. El nombre del archivo debe contener solamente caracteres alfanuméricos, guiones bajos, barras y puntos. Algunos ejemplos de nombres correctos son: archivo.htm, archivo, subdirectorio/archivo',\n    'invalid_property' => 'La propiedad \":name\" no puede establecerse',\n    'file_already_exists' => 'Archivo \":name\" ya existe.',\n    'error_saving' => 'Error guardando archivo \":name\". Por favor revisar los permisos de escritura.',\n    'error_creating_directory' => 'Error creando el directorio :name. Por favor revisar los permisos de escritura.',\n    'invalid_file_extension' => 'Extensión de archivo inválida: :invalid. Las extensiones permitidas son: :allowed.',\n    'error_deleting' => 'Error borrando el archivo template \":name\". Por favor revisar los permisos de escritura.',\n    'delete_success' => 'Los templates fueron borrados exitosamente: :count.',\n    'file_name_required' => 'Falta el nombre del campo del archivo.',\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'El tema activo no se ha establecido.',\n      'not_found' => 'El tema activo no se encuentra.',\n    ],\n    'edit' => [\n      'not_set' => 'El tema de edición no se ha establecido.',\n      'not_found' => 'El tema de edición no se encuentra.',\n      'not_match' => 'El objeto que está intentando acceder no pertenece al tema que se está editando. Vuelve a cargar la página.',\n    ],\n  ],\n  'page' => [\n    'not_found' => [\n      'label' => 'Página no encontrada',\n      'help' => 'La página solicitada no se puede encontrar.',\n    ],\n    'custom_error' => [\n      'label' => 'Error de página',\n      'help' => 'Lo sentimos, ha ocurrido un error y la página no se puede mostrar.',\n    ],\n    'menu_label' => 'Páginas',\n    'no_list_records' => 'No se encontraron páginas',\n    'new' => 'Nueva página',\n    'invalid_url' => 'Formato de URL inválido. El URL debe comenzar con el símbolo de barra diagonal y puede contener dígitos, letras latinas y los siguientes símbolos: _-[]:?|/+*^$',\n    'delete_confirm_multiple' => '¿Realmente quiere eliminar las páginas seleccionadas?',\n    'delete_confirm_single' => '¿Realmente quieres eliminar esta página?',\n    'no_layout' => '-- ninguna disposición --',\n  ],\n  'layout' => [\n    'not_found_name' => 'El diseño \\':name\\' no se encuentra',\n    'menu_label' => 'Diseños',\n    'no_list_records' => 'No se ecnontraron diseños',\n    'new' => 'Nuevo diseño',\n    'delete_confirm_multiple' => 'Realmente quiere borrar los diseños seleccionados?',\n    'delete_confirm_single' => 'Realmente quiere borrar este diseño?',\n  ],\n  'partial' => [\n    'not_found_name' => 'El nombre parcial \\':name\\' no se encuentra.',\n    'invalid_name' => 'Nombre parcial inválido: :name.',\n    'menu_label' => 'Parciales',\n    'no_list_records' => 'No se encontraron parciales',\n    'delete_confirm_multiple' => 'Realmente quiere borrar los parciales seleccionados?',\n    'delete_confirm_single' => 'Realmente quiere borrar este parcial?',\n    'new' => 'Nuevo parcial',\n  ],\n  'content' => [\n    'not_found_name' => 'El contenido del archivo \\':name\\' no se encuentra.',\n    'menu_label' => 'Contenido',\n    'no_list_records' => 'No se encuentra el conteinod de los archivos',\n    'delete_confirm_multiple' => 'Realmente desea borrar los contenidos seleccionados de los archivos o directorios?',\n    'delete_confirm_single' => 'Realmente desea borrar el contenido de este archivo?',\n    'new' => 'Nuevo contenido de archivo',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Manejador de AJAX inválido: :name.',\n    'not_found' => 'El manejador de AJAX \\':name\\' no se encuentra.',\n  ],\n  'cms' => [\n    'menu_label' => 'Gestión',\n  ],\n  'sidebar' => [\n    'add' => 'Agregar',\n    'search' => 'Buscar...',\n  ],\n  'editor' => [\n    'settings' => 'Configuración',\n    'title' => 'Título',\n    'new_title' => 'Nuevo título de la página',\n    'url' => 'URL',\n    'filename' => 'Nombre del archivo',\n    'layout' => 'Disposición',\n    'description' => 'Descripción',\n    'preview' => 'Vista previa',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Título',\n    'meta_description' => 'Meta Descripción',\n    'markup' => 'Marcado',\n    'code' => 'Código',\n    'content' => 'Contenido',\n    'hidden' => 'Oculto',\n    'hidden_comment' => 'A las páginas ocultas solamente pueden acceder los usuarios del back-end que se encuentren logueados.',\n    'enter_fullscreen' => 'Ingresar en el modo pantalla completa',\n    'exit_fullscreen' => 'Salir de pantalla completa',\n  ],\n  'asset' => [\n    'menu_label' => 'Assets',\n    'drop_down_add_title' => 'Add...',\n    'drop_down_operation_title' => 'Action...',\n    'upload_files' => 'Upload file(s)',\n    'create_file' => 'Create file',\n    'create_directory' => 'Create directory',\n    'directory_popup_title' => 'Nuevo directorio',\n    'directory_name' => 'Nombre del directorio',\n    'rename' => 'Renombrar',\n    'delete' => 'Borrar',\n    'move' => 'Mover',\n    'select' => 'Seleccionar',\n    'new' => 'Nuevo archivo',\n    'rename_popup_title' => 'Renombrar',\n    'rename_new_name' => 'Nuevo nombre',\n    'invalid_path' => 'El path solamente puede contener dígitos, letras, espacios y los símbolos siguientes: ._-/',\n    'error_deleting_file' => 'Error al borrar el archivo :name.',\n    'error_deleting_dir_not_empty' => 'Error borrando el directorio :name. El directorio no está vacío.',\n    'error_deleting_dir' => 'Error borrando el archivo :name.',\n    'invalid_name' => 'El nombre solamente puede contener dígitos, letras, espacios y los símbolos siguientes: ._-',\n    'original_not_found' => 'El archivo o directorio original no se encuentra',\n    'already_exists' => 'Un archivo o directorio con este nombre ya existe',\n    'error_renaming' => 'Error renombrando el archivo o directorio',\n    'name_cant_be_empty' => 'El nombre no puede estar vacío',\n    'too_large' => 'El archivo subido es demasiado pesado. El tamaño máximo permitido es :max_size',\n    'type_not_allowed' => 'Solamente los siguientes tipos de archivos están permitidos: :allowed_types',\n    'file_not_valid' => 'El archivo no es válido',\n    'error_uploading_file' => 'Error subiendo el archivo \":name\": :error',\n    'move_please_select' => 'por favor seleccionar',\n    'move_destination' => 'Directorio destino',\n    'move_popup_title' => 'Mover los títulos emergentes',\n    'move_button' => 'Mover',\n    'selected_files_not_found' => 'Los archivos seleccionados no se encuentran',\n    'select_destination_dir' => 'Por favor seleccione un directorio destino',\n    'destination_not_found' => 'El directorio destino no se encuentra',\n    'error_moving_file' => 'Error moviendo archivo :file',\n    'error_moving_directory' => 'Error moviendo el directorio :dir',\n    'error_deleting_directory' => 'Error borrando el directorio original :dir',\n    'path' => 'Path',\n  ],\n  'component' => [\n    'menu_label' => 'Componentes',\n    'invalid_request' => 'La plantilla no puede ser guardada porque tiene datos inválidos.',\n    'no_records' => 'No se encontraron componentes',\n    'not_found' => 'El componente \\':name\\' no se encuentra.',\n    'method_not_found' => 'El componente \\':name\\' no contiene un método \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Tipo de plantilla Desconocido.',\n    'not_found' => 'No se encontró la plantilla solicitada.',\n    'saved' => 'La plantilla se ha guardado correctamente.',\n  ],\n  'permissions' => [\n    'manage_content' => 'Gestionar contenido',\n    'manage_assets' => 'Gestionar archivos',\n    'manage_pages' => 'Gestionar páginas',\n    'manage_layouts' => 'Gestionar diseños',\n    'manage_partials' => 'Gestionar parciales',\n    'manage_themes' => 'Gestionar plantilla',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/es-ar.json",
    "content": "{\n  \"Manage the front-end theme and customization options.\": \"Vista previa de la lista de las plantillas instaladas.\",\n  \"Site Theme\": \"Plantilla\",\n  \"Activate\": \"Activar\",\n  \"Find More Themes\": \"Busque más Plantillas\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Se le ha asignado un nombre único a este componente cuando se lo utilizaba en la página o en el código de disposición.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"El componente alias es requerido y puede contener solamente letras, números y guión bajo. El alias debe empezar con una letra.\",\n  \"Unnamed\": \"Sin nombre\",\n  \"No description provided\": \"No se proporciona descripción\"\n}"
  },
  {
    "path": "modules/cms/lang/es.json",
    "content": "{\n  \"Themes\": \"Temas\",\n  \"Manage Themes\": \"Administrar temas\",\n  \"Customize Theme\": \"Personalizar Tema\",\n  \"Manage Maintenance Mode\": \"Administrar el modo de mantenimiento\",\n  \"View Website During Maintenance\": \"Ver sitio web durante el mantenimiento\",\n  \"Manage Content\": \"Administrar contenido\",\n  \"Manage Asset Files\": \"Administrar archivos de recursos\",\n  \"Manage Pages\": \"Administrar páginas\",\n  \"Manage Layouts\": \"Administrar diseños\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configura la página del modo de mantenimiento y cambia su configuración\",\n  \"Maintenance Mode\": \"Modo de mantenimiento\",\n  \"Select the page to show when maintenance mode is activated.\": \"Selecciona la página para mostrar cuando el modo de mantenimiento esté activado.\",\n  \"Enable maintenance mode\": \"Activar el modo de mantenimiento\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"El modo de mantenimiento mostrará la página de mantenimiento a los visitantes que no estén conectados en el área de back-end.\",\n  \"Resources\": \"Recursos\",\n  \"Reference assets and variables included on this page.\": \"Variables y recursos de referencia incluidos en esta página.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Archivo(s) JavaScript en la carpeta assets/js\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"Archivo(s) LESS en la carpeta assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Archivo(s) SCSS en la carpeta assets/scss\",\n  \"Variables\": \"Variables\",\n  \"Page variables name(s) and value(s)\": \"Variables de página nombre(s) y valor(es)\",\n  \"Headers\": \"Encabezados\",\n  \"Page header name(s) and value(s)\": \"Nombre(s) de encabezado de página y valor(es)\",\n  \"Site Picker\": \"Selector de sitios\",\n  \"Displays links for selecting a different site.\": \"Muestra enlaces para seleccionar un sitio diferente.\",\n  \"Unknown component\": \"Componente desconocido\",\n  \"View Bag\": \"Ver bolsa\",\n  \"Stores custom template properties.\": \"Almacena propiedades de plantillas personalizadas.\",\n  \"By :name\": \"Por :name\",\n  \"The theme ':name' is not found.\": \"El tema ':name' no se encuentra.\",\n  \"Manage the front-end theme and customization options.\": \"Previsualiza la lista de temas instalados y selecciona un tema activo.\",\n  \"Site Theme\": \"Tema para el Front-end\",\n  \"Properties\": \"Propiedades\",\n  \"Publish\": \"Publicar\",\n  \"Advanced\": \"Avanzado\",\n  \"Name\": \"Nombre\",\n  \"New theme name\": \"Nombre del nuevo tema\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Nombre de la persona o empresa\",\n  \"Directory Name\": \"Nombre del directorio\",\n  \"The destination theme directory\": \"El directorio de destino del tema\",\n  \"Description\": \"Descripción\",\n  \"Theme description\": \"Descripción del tema\",\n  \"Homepage\": \"Página de inicio\",\n  \"Website URL\": \"URL de la web\",\n  \"Author Code\": \"Código de autor\",\n  \"A unique code for the author used for distribution\": \"Un código único para el autor utilizado para la distribución.\",\n  \"Theme Code\": \"Código\",\n  \"A unique code for this theme used for distribution\": \"Código único para el tema usado para su distribución\",\n  \"Parent Theme\": \"Tema principal\",\n  \"Database Mode\": \"Modo de base de datos\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Guarde los cambios en este tema en la base de datos en lugar del sistema de archivos\",\n  \"-- no parent --\": \"-- sin padre --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Carpetas\",\n  \"Please select the theme folders you would like to export\": \"Por favor, selecciona las carpetas del tema que quieres exportar\",\n  \"Theme archive file\": \"Fichero de archivo de tema\",\n  \"Overwrite existing files\": \"Sobreescribir archivos existentes\",\n  \"Untick this box to only import new files\": \"Desmarca esta casilla para importar sólo los archivos nuevos\",\n  \"Please select the theme folders you would like to import\": \"Por favor, selecciona las carpetas del tema que quieres importar\",\n  \"Activate\": \"Activar\",\n  \"Customize\": \"Personalizar\",\n  \"Duplicate\": \"Duplicar\",\n  \"Duplicate Theme\": \"Duplicar tema\",\n  \"Theme Duplicated!\": \"Tema duplicado!\",\n  \"Manage\": \"Gestionar\",\n  \"Manage Theme\": \"Gestionar tema\",\n  \"Edit Properties\": \"Editar propiedades\",\n  \"Save Properties\": \"Guardar propiedades\",\n  \"Import\": \"Importar\",\n  \"Import Theme\": \"Importar tema\",\n  \"Theme Imported!\": \"Tema importado!\",\n  \"Export\": \"Exportar\",\n  \"Export Theme\": \"Exportar tema\",\n  \"Delete\": \"Eliminar\",\n  \"Delete this theme? It cannot be undone!\": \"¿Deseas eliminar este tema? Esta acción no se puede deshacer!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"No puedes eliminar el tema activo, intenta activar otro tema primero.\",\n  \"Theme deleted!\": \"Tema eliminado!\",\n  \"Create Theme\": \"Crear tema\",\n  \"Create\": \"Crear\",\n  \"Create a New Blank Theme\": \"Crear un tema en blanco\",\n  \"Theme Created!\": \"Tema creado!\",\n  \"Please specify a name for the theme.\": \"Por favor, especifica un nombre para el tema.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"El nombre sólo puede contener dígitos, letras latinas y los siguientes símbolos: _-\",\n  \"Desired theme directory already exists.\": \"Este directorio ya existe.\",\n  \"Theme directory\": \"Directorio del tema\",\n  \"Provide a new directory name for the duplicated theme.\": \"Introduce un nombre para el directorio del tema duplicado.\",\n  \"Find More Themes\": \"Buscar nuevos temas\",\n  \"Saving Theme...\": \"Guardando tema...\",\n  \"Return to Themes List\": \"Volver a la lista de temas\",\n  \"No themes found\": \"No se encontraron temas\",\n  \"Seed Theme\": \"Tema de semillas\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Genere el tema especificado con planos, traducciones y datos.\",\n  \"Theme Seeded!\": \"¡Tema sembrado!\",\n  \"Select Page Link\": \"Seleccionar enlace de página\",\n  \"Search all references...\": \"Buscar todas las referencias...\",\n  \"CMS Page\": \"Página de CMS\",\n  \"Link\": \"Enlace\",\n  \"Please select a CMS page\": \"Seleccione una página de CMS\",\n  \"Please select a page reference\": \"Seleccione una referencia de página\",\n  \"Please enter a valid URL\": \"Por favor introduzca un URL válido\",\n  \"Delete Theme\": \"Eliminar tema\",\n  \"Activate Theme\": \"Activar tema\",\n  \"Manage Partials\": \"Administrar parciales\",\n  \"No Title\": \"Sin título\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Un nombre único asignado a este componente cuando se utilice en el código de la página o del diseño.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"El alias de componente es requerido y puede contener solamente letras, números y guión bajo. El alias debe empezar con una letra.\",\n  \"Unnamed\": \"Sin nombre\",\n  \"No description provided\": \"No se proporcionó descripción\",\n  \"No snippets found\": \"No se han encontrado fragmentos\",\n  \"Search...\": \"Buscar...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"No se ha encontrado ningún fragmento con el código :code en este tema.\",\n  \"Snippet\": \"Fragmento\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Introduce un código para hacer que el fragmento esté disponible en el plugin de páginas.\",\n  \"Please enter the snippet code\": \"Por favor, introduzca el código del fragmento\",\n  \"Snippet Code\": \"Código del fragmento\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"El nombre se muestra en la lista de fragmentos, en el menu lateral del plugin de las páginas, y en cada página en la que se haya utilizado el fragmento.\",\n  \"Please enter the snippet name\": \"Ingrese el nombre del fragmento\",\n  \"Property Title\": \"Título de la propiedad\",\n  \"Please provide the property title\": \"Por favor proporcione el título de la propiedad\",\n  \"Code\": \"Código\",\n  \"Please provide the property name\": \"Proporcione el nombre de la propiedad\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"El código de propiedad debería comenzar por una letra. Sólo puede contener letras y números.\",\n  \"Type\": \"Tipo\",\n  \"Select\": \"Seleccionar\",\n  \"String\": \"String\",\n  \"Checkbox\": \"Casilla\",\n  \"Dropdown\": \"Desplegable\",\n  \"Please select the property type\": \"Por favor seleccione el tipo de propiedad\",\n  \"Default\": \"Valor Predeterminado\",\n  \"Options\": \"Opciones\",\n  \"Define a Snippet Partial\": \"Definir parcial del fragmento\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"La clave de opción del desplegable no es válida : %s. Estas claves sólo pueden contener números, letras y los símbolos _ y -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"La descripción se muestra en la lista de fragmentos en el editor cuando se agrega un fragmento.\",\n  \"Details\": \"Detalles\",\n  \"Frontend Theme\": \"Tema para el Front-end\"\n}"
  },
  {
    "path": "modules/cms/lang/et/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Invalid file name: :name. File names can contain only alphanumeric symbols, underscores, dashes and dots. Some examples of correct file names: page.htm, page, subdirectory/page',\n    'invalid_property' => 'The property \\':name\\' cannot be set',\n    'file_already_exists' => 'File \\':name\\' already exists.',\n    'error_saving' => 'Error saving file \\':name\\'. Please check write permissions.',\n    'error_creating_directory' => 'Error creating directory :name. Please check write permissions.',\n    'invalid_file_extension' => 'Invalid file extension: :invalid. Allowed extensions are: :allowed.',\n    'error_deleting' => 'Error deleting the template file \\':name\\'. Please check write permissions.',\n    'delete_success' => 'Templates deleted: :count.',\n    'file_name_required' => 'The File Name field is required.',\n    'safe_mode_enabled' => 'Safe mode is currently enabled.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Koduleht',\n      'online' => 'Online',\n      'maintenance' => 'Hooldusrežiimis',\n      'manage_themes' => 'Halda teemasid',\n      'customize_theme' => 'Kohanda teemat',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktiivset teemat pole määratud.',\n      'not_found' => 'Aktiivset teemat ei leitud.',\n    ],\n    'edit' => [\n      'not_set' => 'Muutmise teemat pole määratud.',\n      'not_found' => 'Muutmise teemat ei leitud.',\n      'not_match' => 'Objekt, mida üritad muuta ei kuulu hetkel muudetava teema alla. Palun laadi leht uuesti.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'The page \\':name\\' is not found',\n    'not_found' => [\n      'label' => 'Page not found',\n      'help' => 'The requested page cannot be found.',\n    ],\n    'custom_error' => [\n      'label' => 'Page error',\n      'help' => 'We\\'re sorry, but something went wrong and the page cannot be displayed.',\n    ],\n    'menu_label' => 'Pages',\n    'unsaved_label' => 'Unsaved page(s)',\n    'no_list_records' => 'No pages found',\n    'new' => 'New page',\n    'invalid_url' => 'Invalid URL format. The URL should start with the forward slash symbol and can contain digits, Latin letters and the following symbols: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Delete selected pages?',\n    'delete_confirm_single' => 'Delete this page?',\n    'no_layout' => '-- no layout --',\n    'title' => 'Page title',\n    'url' => 'Page URL',\n    'file_name' => 'Page file name',\n  ],\n  'layout' => [\n    'not_found_name' => 'The layout \\':name\\' is not found',\n    'menu_label' => 'Layouts',\n    'unsaved_label' => 'Unsaved layout(s)',\n    'no_list_records' => 'No layouts found',\n    'new' => 'New layout',\n    'delete_confirm_multiple' => 'Delete selected layouts?',\n    'delete_confirm_single' => 'Delete this layout?',\n  ],\n  'partial' => [\n    'not_found_name' => 'The partial \\':name\\' is not found.',\n    'invalid_name' => 'Invalid partial name: :name.',\n    'menu_label' => 'Partials',\n    'unsaved_label' => 'Unsaved partial(s)',\n    'no_list_records' => 'No partials found',\n    'delete_confirm_multiple' => 'Delete selected partials?',\n    'delete_confirm_single' => 'Delete this partial?',\n    'new' => 'New partial',\n  ],\n  'content' => [\n    'not_found_name' => 'The content file \\':name\\' is not found.',\n    'menu_label' => 'Content',\n    'unsaved_label' => 'Unsaved content',\n    'no_list_records' => 'No content files found',\n    'delete_confirm_multiple' => 'Delete selected content files or directories?',\n    'delete_confirm_single' => 'Delete this content file?',\n    'new' => 'New content file',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Invalid AJAX handler name: :name.',\n    'not_found' => 'AJAX handler \\':name\\' was not found.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Add',\n    'search' => 'Search...',\n  ],\n  'editor' => [\n    'settings' => 'Settings',\n    'title' => 'Title',\n    'new_title' => 'New page title',\n    'url' => 'URL',\n    'filename' => 'File Name',\n    'layout' => 'Layout',\n    'description' => 'Description',\n    'preview' => 'Preview',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Title',\n    'meta_description' => 'Meta Description',\n    'markup' => 'Markup',\n    'code' => 'Code',\n    'content' => 'Content',\n    'hidden' => 'Hidden',\n    'hidden_comment' => 'Hidden pages are accessible only by logged-in back-end users.',\n    'enter_fullscreen' => 'Enter fullscreen mode',\n    'exit_fullscreen' => 'Exit fullscreen mode',\n    'open_searchbox' => 'Open Search box',\n    'open_replacebox' => 'Open Replace box',\n  ],\n  'asset' => [\n    'menu_label' => 'Assets',\n    'unsaved_label' => 'Unsaved asset(s)',\n    'drop_down_add_title' => 'Add...',\n    'drop_down_operation_title' => 'Action...',\n    'upload_files' => 'Upload file(s)',\n    'create_file' => 'Create file',\n    'create_directory' => 'Create directory',\n    'directory_popup_title' => 'New directory',\n    'directory_name' => 'Directory name',\n    'rename' => 'Rename',\n    'delete' => 'Delete',\n    'move' => 'Move',\n    'select' => 'Select',\n    'new' => 'New file',\n    'rename_popup_title' => 'Rename',\n    'rename_new_name' => 'New name',\n    'invalid_path' => 'Path can contain only digits, Latin letters, spaces and the following symbols: ._-/',\n    'error_deleting_file' => 'Error deleting file :name.',\n    'error_deleting_dir_not_empty' => 'Error deleting directory :name. The directory is not empty.',\n    'error_deleting_dir' => 'Error deleting directory :name.',\n    'invalid_name' => 'Name can contain only digits, Latin letters, spaces and the following symbols: ._-',\n    'original_not_found' => 'Original file or directory not found',\n    'already_exists' => 'File or directory with this name already exists',\n    'error_renaming' => 'Error renaming the file or directory',\n    'name_cant_be_empty' => 'The name cannot be empty',\n    'too_large' => 'The uploaded file is too large. The maximum allowed file size is :max_size',\n    'type_not_allowed' => 'Only the following file types are allowed: :allowed_types',\n    'file_not_valid' => 'File is not valid',\n    'error_uploading_file' => 'Error uploading file \\':name\\': :error',\n    'move_please_select' => 'please select',\n    'move_destination' => 'Destination directory',\n    'move_popup_title' => 'Move assets',\n    'move_button' => 'Move',\n    'selected_files_not_found' => 'Selected files not found',\n    'select_destination_dir' => 'Please select a destination directory',\n    'destination_not_found' => 'Destination directory is not found',\n    'error_moving_file' => 'Error moving file :file',\n    'error_moving_directory' => 'Error moving directory :dir',\n    'error_deleting_directory' => 'Error deleting the original directory :dir',\n    'no_list_records' => 'No files found',\n    'delete_confirm' => 'Delete selected files or directories?',\n    'path' => 'Path',\n  ],\n  'component' => [\n    'menu_label' => 'Components',\n    'invalid_request' => 'The template cannot be saved because of invalid component data.',\n    'no_records' => 'No components found',\n    'not_found' => 'The component \\':name\\' is not found.',\n    'method_not_found' => 'The component \\':name\\' does not contain a method \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Unknown template type.',\n    'not_found' => 'Template not found.',\n    'saved' => 'Template saved.',\n    'no_list_records' => 'No records found',\n    'delete_confirm' => 'Delete selected templates?',\n    'order_by' => 'Order by',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Halda kodulehe sisufaile',\n    'manage_assets' => 'Manage website assets - images, JavaScript files, CSS files',\n    'manage_pages' => 'Loo, muuda ja kustuta kodulehe lehti',\n    'manage_layouts' => 'Create, modify and delete CMS layouts',\n    'manage_partials' => 'Create, modify and delete CMS partials',\n    'manage_themes' => 'Activate, deactivate and configure CMS themes',\n  ],\n  'theme_log' => [\n    'hint' => 'This log displays any changes made to the theme by administrators in the back-end area.',\n    'menu_label' => 'Theme log',\n    'menu_description' => 'View changes made to the active theme.',\n    'empty_link' => 'Empty theme log',\n    'empty_loading' => 'Emptying theme log...',\n    'empty_success' => 'Theme log emptied',\n    'return_link' => 'Return to theme log',\n    'id' => 'ID',\n    'id_label' => 'Log ID',\n    'created_at' => 'Date & Time',\n    'user' => 'User',\n    'type' => 'Type',\n    'type_create' => 'Create',\n    'type_update' => 'Update',\n    'type_delete' => 'Delete',\n    'theme_name' => 'Theme',\n    'theme_code' => 'Theme code',\n    'old_template' => 'Template (Old)',\n    'new_template' => 'Template (New)',\n    'template' => 'Template',\n    'diff' => 'Changes',\n    'old_value' => 'Old value',\n    'new_value' => 'New value',\n    'preview_title' => 'Template changes',\n    'template_updated' => 'Template was updated',\n    'template_created' => 'Template was created',\n    'template_deleted' => 'Template was deleted',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/et.json",
    "content": "{\n  \"Themes\": \"Teemad\",\n  \"Manage Themes\": \"Hallake teemasid\",\n  \"Customize Theme\": \"Kohanda teemat\",\n  \"Manage Maintenance Mode\": \"Hallake hooldusrežiimi\",\n  \"View Website During Maintenance\": \"Vaadake veebisaiti hoolduse ajal\",\n  \"Manage Content\": \"Sisu haldamine\",\n  \"Manage Asset Files\": \"Varafailide haldamine\",\n  \"Manage Pages\": \"Lehtede haldamine\",\n  \"Manage Layouts\": \"Paigutuste haldamine\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfigureeri hooldusrežiimi leht ja lülita seade ümber.\",\n  \"Maintenance Mode\": \"Maintenance mode\",\n  \"Select the page to show when maintenance mode is activated.\": \"Vali leht, mida kuvatakse, kui hooldusrežiim on aktiveeritud.\",\n  \"Enable maintenance mode\": \"Hooldusrežiimi aktiveerimine\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Hooldusrežiim kuvab hoolduslehe külastajatele, kes ei ole sisse logitud back-end piirkonda.\",\n  \"Resources\": \"Vahendid\",\n  \"Reference assets and variables included on this page.\": \"Sellel lehel sisalduvad võrdlusvarad ja muutujad.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript-fail(id) varade/js-i kaustas\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"LESS faili(d) kaustas assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS-fail(id) assets/scss-kaustas\",\n  \"Variables\": \"Muutujad\",\n  \"Page variables name(s) and value(s)\": \"Lehe muutujate nimi(d) ja väärtus(id)\",\n  \"Headers\": \"Päised\",\n  \"Page header name(s) and value(s)\": \"Lehe päise nimed ja väärtused\",\n  \"Site Picker\": \"Saidi valija\",\n  \"Displays links for selecting a different site.\": \"Kuvab lingid teise saidi valimiseks.\",\n  \"Unknown component\": \"Tundmatu komponent\",\n  \"View Bag\": \"Vaata kotti\",\n  \"Stores custom template properties.\": \"Salvestab kohandatud malli atribuudid.\",\n  \"By :name\": \"Autor: :name\",\n  \"The theme ':name' is not found.\": \"Teemat ':name' ei leitud.\",\n  \"Manage the front-end theme and customization options.\": \"Vaata paigaldatud teemasid ja vali endale sobiv.\",\n  \"Site Theme\": \"Kodulehe teema\",\n  \"Properties\": \"Seaded\",\n  \"Publish\": \"Avalda\",\n  \"Advanced\": \"Täiustatud\",\n  \"Name\": \"Nimi\",\n  \"New theme name\": \"Uus teema nimi\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Isiku või ettevõtte nimi\",\n  \"Directory Name\": \"Kataloogi nimi\",\n  \"The destination theme directory\": \"Teema kataloog\",\n  \"Description\": \"Kirjeldus\",\n  \"Theme description\": \"Teema kirjeldus\",\n  \"Homepage\": \"Koduleht\",\n  \"Website URL\": \"Kodulehe URL\",\n  \"Author Code\": \"Autori kood\",\n  \"A unique code for the author used for distribution\": \"Levitamiseks kasutatud autori kordumatu kood\",\n  \"Theme Code\": \"Kood\",\n  \"A unique code for this theme used for distribution\": \"Unikaalne teema kood, mida kasutatakse teema levitamisel\",\n  \"Parent Theme\": \"Vanemateema\",\n  \"Database Mode\": \"Andmebaasi režiim\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Salvestage selle teema muudatused failisüsteemi asemel andmebaasi\",\n  \"-- no parent --\": \"-- vanemat pole --\",\n  \"Theme\": \"Teema\",\n  \"Folders\": \"Kataloogid\",\n  \"Please select the theme folders you would like to export\": \"Palun vali teema kataloogid, mida soovid eksportida\",\n  \"Theme archive file\": \"Teema arhiivi fail\",\n  \"Overwrite existing files\": \"Kirjuta olemasolevad failid üle\",\n  \"Untick this box to only import new files\": \"Jäta see kast märgistamata, et importida ainult uued failid\",\n  \"Please select the theme folders you would like to import\": \"Palun vali teema kataloogid, mida soovid importida\",\n  \"Activate\": \"Aktiveeri\",\n  \"Customize\": \"Kohanda\",\n  \"Duplicate\": \"Kopeeri\",\n  \"Duplicate Theme\": \"Kopeeri teema\",\n  \"Theme Duplicated!\": \"Teema kopeeritud!\",\n  \"Manage\": \"Halda\",\n  \"Manage Theme\": \"Halda teemat\",\n  \"Edit Properties\": \"Muuda seadeid\",\n  \"Save Properties\": \"Salvesta seaded\",\n  \"Import\": \"Impordi\",\n  \"Import Theme\": \"Impordi teema\",\n  \"Theme Imported!\": \"Teema imporditud!\",\n  \"Export\": \"Eksport\",\n  \"Export Theme\": \"Ekspordi teema\",\n  \"Delete\": \"Kustuta\",\n  \"Delete this theme? It cannot be undone!\": \"Kustuta teema? Seda tegevust ei saa tagasi võtta!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Aktiivset teemat ei saa kustutada. Aktiveeri kõigepealt mõni teine teema.\",\n  \"Theme deleted!\": \"Teema kustutatud!\",\n  \"Create Theme\": \"Loo teema\",\n  \"Create\": \"Loo\",\n  \"Create a New Blank Theme\": \"Loo uus tühi teema\",\n  \"Theme Created!\": \"Teema loodud!\",\n  \"Please specify a name for the theme.\": \"Palun määra teemale nimi.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Nimi võib sisaldada ainult  numbreid, tähti ja järgnevaid sümboleid: _-\",\n  \"Desired theme directory already exists.\": \"Soovitud kataloog on juba olemas.\",\n  \"Theme directory\": \"Teema kataloog\",\n  \"Provide a new directory name for the duplicated theme.\": \"Sisesta kopeeritud teemale uus kataloogi nimi.\",\n  \"Find More Themes\": \"Otsi uusi teemasid\",\n  \"Saving Theme...\": \"Salvestan teemat...\",\n  \"Return to Themes List\": \"Tagasi teemade nimekirja\",\n  \"No themes found\": \"Teemasid ei leitud\",\n  \"Seed Theme\": \"Seemnete teema\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Lisage määratud teemale joonised, tõlked ja andmed.\",\n  \"Theme Seeded!\": \"Teema külvatud!\",\n  \"Select Page Link\": \"Valige Lehekülje link\",\n  \"Search all references...\": \"Otsi kõigist viidetest...\",\n  \"CMS Page\": \"CMS Leht\",\n  \"Link\": \"Viide\",\n  \"Please select a CMS page\": \"Valige CMS-i leht\",\n  \"Please select a page reference\": \"Valige lehe viide\",\n  \"Please enter a valid URL\": \"Sisestage kehtiv URL\",\n  \"Delete Theme\": \"Kustuta teema\",\n  \"Activate Theme\": \"Aktiveeri teema\",\n  \"Manage Partials\": \"Osade haldamine\",\n  \"No Title\": \"Pealkiri puudub\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Ainulaadne nimi, mis antakse sellele komponendile, kui seda kasutatakse lehe või kujunduse koodis.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Komponentide varjunimed on kohustuslikud ja võivad sisaldada ainult ladina sümboleid, numbreid ja allakriipsu. Pseudonimed peavad algama ladina sümboliga.\",\n  \"Unnamed\": \"Nimetu\",\n  \"No description provided\": \"Kirjeldus pole täidetud\",\n  \"No snippets found\": \"Ühtegi katkendit ei leitud\",\n  \"Search...\": \"Otsing...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Teemast ei leitud nõutud koodiga fragmenti :code.\",\n  \"Snippet\": \"Katkend\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Sisestage kood, et muuta see osa sisuredaktorites väljalõikena kättesaadavaks.\",\n  \"Please enter the snippet code\": \"Sisestage koodilõigu kood\",\n  \"Snippet Code\": \"Lõike kood\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Nimi kuvatakse tekstilõigu lisamisel redaktoris väljalõigete loendis.\",\n  \"Please enter the snippet name\": \"Sisestage koodilõigu nimi\",\n  \"Property Title\": \"Omandi pealkiri\",\n  \"Please provide the property title\": \"Sisestage kinnisvara pealkiri\",\n  \"Code\": \"Kood\",\n  \"Please provide the property name\": \"Sisestage kinnisvara nimi\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Atribuudikood peaks algama ladina tähega ja võib sisaldada ainult ladina tähti, numbreid ja allkriipse\",\n  \"Type\": \"Tüüp\",\n  \"Select\": \"Valige\",\n  \"String\": \"String\",\n  \"Checkbox\": \"Märkeruut\",\n  \"Dropdown\": \"Rippmenüü\",\n  \"Please select the property type\": \"Valige kinnisvara tüüp\",\n  \"Default\": \"Vaikimisi\",\n  \"Options\": \"Valikud\",\n  \"Define a Snippet Partial\": \"Määratlege osaline väljavõte\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Kehtetu rippmenüü valikuklahv: :key. Valikuteklahvid võivad sisaldada ainult numbreid, ladina tähti ja märke _ ja -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Kirjeldus kuvatakse tekstilõigu lisamisel redaktoris väljalõigete loendis.\",\n  \"Details\": \"Üksikasjad\"\n}"
  },
  {
    "path": "modules/cms/lang/fa/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'نام :name برای فایل نام معتبر است. نام فایل میتواند شامل کاراکتر انگلیسی ، خط تیره و نقطه باشد. بعنوان مثال page.htm، page و subdirectory/page',\n    'invalid_property' => 'عدم توانایی در تغییر خاصیت \":name\"',\n    'file_already_exists' => 'فایلی با نام \":name\" موجود است.',\n    'error_saving' => 'خطا در ذخیره فایل \":name\". لطفا سطح دسترسی ها را بررسی نمایید.',\n    'error_creating_directory' => 'خطا در ایجاد پوشه ی :name. لطفا سطح دسترسی ها را بررسی نمایید.',\n    'invalid_file_extension' => 'پسوند :invalid برای فایل نا معتبر است. پسوند های معتبر عبارتند از: :allowed.',\n    'error_deleting' => 'خطا در خذف فایل \":name\". لطفا سطح دسترسی ها را بررسی نمایید.',\n    'delete_success' => 'تعداد :count فایل با موفقیت حذف شد.',\n    'file_name_required' => 'نام فایل را وارد نمایید.',\n    'safe_mode_enabled' => 'حالت محافظت شده فعال می باشد.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'وب سایت',\n      'online' => 'online',\n      'maintenance' => 'در حال به روز رسانی',\n      'manage_themes' => 'مدیریت قالب ها',\n      'customize_theme' => 'سفارشی سازی قالب',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'قالب فعال انتخاب  نشده است.',\n      'not_found' => 'قالب فعال یافت نشد',\n    ],\n    'edit' => [\n      'not_set' => 'قالب ویرایش مشخص نشده است.',\n      'not_found' => 'قالب ویرایش یافت نشد.',\n      'not_match' => 'شی مورد نظر شما در قالبی که ویرایش می کنید یافت نشد. لطفا صفحه را مجددا بارگذاری نمایید.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'صفحه ای با نام \\':name\\' یافت نشد',\n    'not_found' => [\n      'label' => 'صفحه مورد نظر یافت نشد',\n      'help' => 'متاسفانه صفحه ای که شما درخواست کرده اید یافت نشد',\n    ],\n    'custom_error' => [\n      'label' => 'خطای صفحه',\n      'help' => 'متاسفانه مشکلی در نمایش صفحه مورد نظر به وجود آمده است.',\n    ],\n    'menu_label' => 'صفحات',\n    'unsaved_label' => 'صفحه(های) ذخیره نشده',\n    'no_list_records' => 'صفحه ای یافت نشد',\n    'new' => 'صفحه جدید',\n    'invalid_url' => 'قالب آدرس صحیح نمی باشد. آدرس باید با اسلش شروع شده و می تواند شامل اعداد، حروف لاتین و این کاراکتر ها باشد: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'آیا از حذف صفحات انتخاب شده اطمینان دارید؟',\n    'delete_confirm_single' => 'آیا از حذف این صفحه اطمینان دارید؟',\n    'no_layout' => '-- بدون طرح بندی --',\n    'title' => 'عنوان صفحه',\n    'url' => 'آدرس صفحه',\n    'file_name' => 'نام فایل',\n  ],\n  'layout' => [\n    'not_found_name' => 'طرح بندی ی \\':name\\' یافت نشد',\n    'menu_label' => 'طرح بندی ها',\n    'unsaved_label' => 'طرح بندی(های) ذخیره نشده',\n    'no_list_records' => 'طرح بندی یافت نشد',\n    'new' => 'طرح بندی جدید',\n    'delete_confirm_multiple' => 'آیا از حذف طرح بندی های انتخاب شده اطمینان دارید؟',\n    'delete_confirm_single' => 'آیا از حذف این طرح بندی اطمینان دارید؟',\n  ],\n  'partial' => [\n    'not_found_name' => 'بخشی با نام \\':name\\' یافت نشد.',\n    'invalid_name' => 'نام بخش نا معتبر است: :name.',\n    'menu_label' => 'بخش ها',\n    'unsaved_label' => 'بخش(های) ذخیره نشده',\n    'no_list_records' => 'بخشی وجود ندارد',\n    'delete_confirm_multiple' => 'آیا از حذف بخش های انتخاب شده اطمینان دارید؟',\n    'delete_confirm_single' => 'آیا از حذف این بخش بندی اطمینان دارید؟',\n    'new' => 'بخش بندی جدید',\n  ],\n  'content' => [\n    'not_found_name' => 'فایل محتوای \\':name\\' یافت نشد.',\n    'menu_label' => 'محتوا',\n    'unsaved_label' => 'محتوای ذخیره نشده',\n    'no_list_records' => 'هیچ فایل محتوایی وجود ندارد',\n    'delete_confirm_multiple' => 'آیا از حذف فایل ها و یا پوشه های انتخاب شده اطمینان دارید؟',\n    'delete_confirm_single' => 'آیا از حذف این فایل اطمینان دارید؟',\n    'new' => 'فایل محتوی جدید',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'نام کنترل کننده آژاکس نا معتبر است: :name.',\n    'not_found' => 'کنترل کننده آژاکس \\':name\\' یافت نشد.',\n  ],\n  'cms' => [\n    'menu_label' => 'مدیریت محتوی',\n  ],\n  'sidebar' => [\n    'add' => 'افزودن',\n    'search' => 'جستجو...',\n  ],\n  'editor' => [\n    'settings' => 'تنظیمات',\n    'title' => 'عنوان',\n    'new_title' => 'عنوان صفحه جدید',\n    'url' => 'آدرس',\n    'filename' => 'نام فایل',\n    'layout' => 'طرح بندی',\n    'description' => 'توضیحات',\n    'preview' => 'پیش نمایش',\n    'meta' => 'متا',\n    'meta_title' => 'عنوان متا',\n    'meta_description' => 'توضیحات متا',\n    'markup' => 'نشانه گذاری',\n    'code' => 'کد',\n    'content' => 'محتوی',\n    'hidden' => 'مخفی',\n    'hidden_comment' => 'صفحات مخفی فقط برای کاربران وارد شده به سیستم نمایش داده می شود.',\n    'enter_fullscreen' => 'حالت تمام صفحه',\n    'exit_fullscreen' => 'خروج از حالت تمام صفحه',\n    'open_searchbox' => 'نمایش جستجو',\n    'open_replacebox' => 'نمایش جایگزینی',\n  ],\n  'asset' => [\n    'menu_label' => 'فایلها',\n    'unsaved_label' => 'فایل(های) ذخیره نشده',\n    'drop_down_add_title' => 'افزودن...',\n    'drop_down_operation_title' => 'عملیات...',\n    'upload_files' => 'افزودن فایل(ها)',\n    'create_file' => 'ایجاد فایل',\n    'create_directory' => 'ایجاد پوشه',\n    'directory_popup_title' => 'پوشه ی جدید',\n    'directory_name' => 'نام پوشه',\n    'rename' => 'تغییر نام',\n    'delete' => 'حذف',\n    'move' => 'جابحایی',\n    'select' => 'انتخاب',\n    'new' => 'فایل جدید',\n    'rename_popup_title' => 'تغییر نام',\n    'rename_new_name' => 'نام جدید',\n    'invalid_path' => 'مسیر می تواند فقط شامل اعداد، حروف لاتین، حط فاصله و این کاراکتر ها باشد: ._-/',\n    'error_deleting_file' => 'در حذف فایل :name مشکلی به وجود آمده است.',\n    'error_deleting_dir_not_empty' => 'در حذف پوشه ی :name مشکلی به وجود آمده است. پوشه خالی نیست.',\n    'error_deleting_dir' => 'خطایی در حذف :name به وجود آمده است.',\n    'invalid_name' => 'نام میتوامد شامل اعداد، خروف لاتین، خط فاصله و این کاراکتر ها باشد: ._-',\n    'original_not_found' => 'فایل یا پوشه ی اصلی یافت نشد.',\n    'already_exists' => 'فایل یا پوشه ای با این نام وجود دارد.',\n    'error_renaming' => 'در تغییر نام فایل یا پوشه مورد نظر خطایی رخ داده است',\n    'name_cant_be_empty' => 'نام نمی تواند خالی باشد',\n    'too_large' => 'فایل ارسال شده بیش از حد مجاز است. بیشترین حجم مورد قبول :max_size می باشد',\n    'type_not_allowed' => 'فقط این نوع فایل ها قابل قبول می باشد: :allowed_types',\n    'file_not_valid' => 'فایل نامعتبر است',\n    'error_uploading_file' => 'خطا در ارسال فال \":name\": :error',\n    'move_please_select' => 'لطفا انتخاب نمایید',\n    'move_destination' => 'پوشه مورد نظر',\n    'move_popup_title' => 'جابجایی فایل',\n    'move_button' => 'جابجایی',\n    'selected_files_not_found' => 'فایل انتخاب شده یافت نشد',\n    'select_destination_dir' => 'لطفا پوشه ی مورد نظر را انتخاب نمایید',\n    'destination_not_found' => 'پوشه مورد نظر یافت نشد',\n    'error_moving_file' => 'خطایی در جابجایی :file رخ داده است',\n    'error_moving_directory' => 'خطایی در جابجایی :dir رخ داده است',\n    'error_deleting_directory' => 'خطایی در حذف :dir رخ داده است',\n    'no_list_records' => 'فایلی وجود ندارد',\n    'delete_confirm' => 'آیا از حذف فایل ها یا پوشه های انتخاب شده اطمینان دارید؟',\n    'path' => 'محل قرار گیری',\n  ],\n  'component' => [\n    'menu_label' => 'ابزارها',\n    'invalid_request' => 'بدلیل داده ی نا معتبر ابزار امکان ذخیره قالب وجود ندارد.',\n    'no_records' => 'ابزاری یافت نشد',\n    'not_found' => 'ابزار \\':name\\' یافت نشد.',\n    'method_not_found' => 'ابزار \\':name\\' شامل متدی با نام \\':method\\' نمی باشد.',\n  ],\n  'template' => [\n    'invalid_type' => 'نوع قالب معتبر نمی باشد.',\n    'not_found' => 'قالب درخواست شده یافت نشد.',\n    'saved' => 'قالب با موفقیت ذخیره شد.',\n    'no_list_records' => 'موردی یافت نشد',\n    'delete_confirm' => 'آیا از حذف قالب های انتخاب شده اطمینان دارید؟',\n    'order_by' => 'مرتب سازی با',\n  ],\n  'permissions' => [\n    'name' => 'مدیریت محتوی',\n    'manage_content' => 'مدیریت محتوی',\n    'manage_assets' => 'مدیریت فایلها',\n    'manage_pages' => 'مدیریت صفحات',\n    'manage_layouts' => 'مدیریت طرح بندی ها',\n    'manage_partials' => 'مدیریت بخش ها',\n    'manage_themes' => 'مدیریت قالب ها',\n    'manage_theme_options' => 'تنظیمات گزینه های شخصی سازی برای قالب فعلی',\n  ],\n  'theme_log' => [\n    'hint' => 'این بخش تمام تغییراتی که توسط مدیریت بر روی قالب انجام شده است را به نمایش در می آورد.',\n    'menu_label' => 'وقایع قالب',\n    'menu_description' => 'نمایش تغییرات انجام شده بر روی قالب فعلی',\n    'empty_link' => 'پاک سازی همه وقایع',\n    'empty_loading' => 'در حال پاک سازی وقایع قالب...',\n    'empty_success' => 'وقایع قالب پاک شدند',\n    'return_link' => 'بازگشت به وقایع قالب',\n    'id' => 'شناسه',\n    'id_label' => 'شناسه واقعه',\n    'created_at' => 'تاریخ و زمان',\n    'user' => 'کاربر',\n    'type' => 'نوع',\n    'type_create' => 'ایجاد',\n    'type_update' => 'به روز رسانی',\n    'type_delete' => 'حذف',\n    'theme_name' => 'قالب',\n    'theme_code' => 'کد قالب',\n    'old_template' => 'قالب (قدیمی)',\n    'new_template' => 'قالب (جدید)',\n    'template' => 'قالب',\n    'diff' => 'تغییرات',\n    'old_value' => 'مقدار قبلی',\n    'new_value' => 'مقدار جدید',\n    'preview_title' => 'تغییرات قالب',\n    'template_updated' => 'قالب به روزرسانی شد',\n    'template_created' => 'قالب جدید ایجاد شد',\n    'template_deleted' => 'قالب جذف شد',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/fa.json",
    "content": "{\n  \"Themes\": \"قالب ها\",\n  \"Manage Themes\": \"مدیریت تم ها\",\n  \"Customize Theme\": \"شخصی سازی قالب\",\n  \"Manage Maintenance Mode\": \"مدیریت حالت نگهداری\",\n  \"View Website During Maintenance\": \"مشاهده وب سایت در حین تعمیر و نگهداری\",\n  \"Manage Content\": \"مدیریت محتوا\",\n  \"Manage Asset Files\": \"مدیریت فایل های دارایی\",\n  \"Manage Pages\": \"مدیریت صفحات\",\n  \"Manage Layouts\": \"مدیریت Layouts\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"تنظیم کردن صفحه مربوط به تعمیرات و تغییر تنظیمات این حالت.\",\n  \"Maintenance Mode\": \"حالت تعمیرات\",\n  \"Select the page to show when maintenance mode is activated.\": \"اگر فعال شود کاربران به این صفحه هدایت خواهند شد.\",\n  \"Enable maintenance mode\": \"فعال سازی حالت تعمیرات\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"حالت تعمیرات کاربرانی را که در بخش مدیریت وارد نشده اند را به صفحه تعمیرات منتقل می کند.\",\n  \"Resources\": \"منابع\",\n  \"Reference assets and variables included on this page.\": \"دارایی ها و متغیرهای مرجع موجود در این صفحه.\",\n  \"JavaScript\": \"جاوا اسکریپت\",\n  \"JavaScript file(s) in the assets/js folder\": \"فایل(های) جاوا اسکریپت در پوشه assets/js\",\n  \"LESS\": \"کمتر\",\n  \"LESS file(s) in the assets/less folder\": \"فایل(های) کمتر در پوشه دارایی/کمتر\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"فایل(های) SCSS در پوشه assets/scss\",\n  \"Variables\": \"متغیرها\",\n  \"Page variables name(s) and value(s)\": \"نام(های) و مقدار(های) متغیرهای صفحه\",\n  \"Headers\": \"سرصفحه ها\",\n  \"Page header name(s) and value(s)\": \"نام(های) سرصفحه و مقدار(های)\",\n  \"Site Picker\": \"انتخاب کننده سایت\",\n  \"Displays links for selecting a different site.\": \"پیوندهایی را برای انتخاب یک سایت دیگر نمایش می دهد.\",\n  \"Unknown component\": \"جزء ناشناخته\",\n  \"View Bag\": \"مشاهده کیف\",\n  \"Stores custom template properties.\": \"ویژگی های قالب سفارشی را ذخیره می کند.\",\n  \"By :name\": \"توسط :name\",\n  \"The theme ':name' is not found.\": \"یافتن قالبی با نام  ':name یافت نشد.'\",\n  \"Manage the front-end theme and customization options.\": \"پیش نمایش قالب های موجود و انتخاب قالب فعال.\",\n  \"Site Theme\": \"قالب نمایشی\",\n  \"Properties\": \"خصوصیات\",\n  \"Publish\": \"انتشار\",\n  \"Advanced\": \"پیشرفته\",\n  \"Name\": \"نام\",\n  \"New theme name\": \"نام قالب جدید\",\n  \"Author Name\": \"تهیه کننده\",\n  \"Person or company name\": \"نام شخص یا شرکت\",\n  \"Directory Name\": \"نام پوشه\",\n  \"The destination theme directory\": \"نام پوشه قالب در دست تهیه\",\n  \"Description\": \"توضیحات\",\n  \"Theme description\": \"توضیحات قالب\",\n  \"Homepage\": \"آدرس سایت\",\n  \"Website URL\": \"آدرس سایت مربوط به قالب\",\n  \"Author Code\": \"کد نویسنده\",\n  \"A unique code for the author used for distribution\": \"یک کد منحصر به فرد برای نویسنده که برای توزیع استفاده می شود\",\n  \"Theme Code\": \"کد\",\n  \"A unique code for this theme used for distribution\": \"کد یکتای قالبی که میخواهید ایجاد نمایید\",\n  \"Parent Theme\": \"تم والدین\",\n  \"Database Mode\": \"حالت پایگاه داده\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"تغییرات این موضوع را به جای فایل سیستم در پایگاه داده ذخیره کنید\",\n  \"-- no parent --\": \"-- بدون پدر و مادر --\",\n  \"Theme\": \"قالب\",\n  \"Folders\": \"پوشه ها\",\n  \"Please select the theme folders you would like to export\": \"لطفا پوشه هایی را که میخواهید از قالب صادر کنید را انتخاب نمایید\",\n  \"Theme archive file\": \"فایل قالب\",\n  \"Overwrite existing files\": \"جایگزینی فایلها در صورت موجود بودن آنها\",\n  \"Untick this box to only import new files\": \"اگر میخواهید فقط فایل های جدید وارد شوند این گزینه را غیر فعال کنید.\",\n  \"Please select the theme folders you would like to import\": \"لطفا پوشه قالب هایی را که میخواهید وارد کنید را انتخاب نمایید\",\n  \"Activate\": \"فعال\",\n  \"Customize\": \"شخصی سازی\",\n  \"Duplicate\": \"ایجاد کپی\",\n  \"Duplicate Theme\": \"ایجاد یک کپی از قالب\",\n  \"Theme Duplicated!\": \"عملیات ایجاد کپی از قالب با موفقیت انجام شد.\",\n  \"Manage\": \"مدیریت\",\n  \"Manage Theme\": \"مدیریت قالب\",\n  \"Edit Properties\": \"ویرایش مشخصه ها\",\n  \"Save Properties\": \"ذخیره مشخصه ها\",\n  \"Import\": \"وارد کردن\",\n  \"Import Theme\": \"وارد کردن قالب\",\n  \"Theme Imported!\": \"عملیات وارد کردن قالب با موفقیت انجام شد\",\n  \"Export\": \"صادر کردن\",\n  \"Export Theme\": \"صادر کردن قالب\",\n  \"Delete\": \"حذف\",\n  \"Delete this theme? It cannot be undone!\": \"آیا از حذف این قالب اطمینان دارید؟ ان کار غیر قابل بازگشت می باشد.\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"شما نمیتوانید قالب فعال را حذف کنید. جهت حذف آن یک قالب دیگر را فعال کنید.\",\n  \"Theme deleted!\": \"حذف قالب موفقیت آمیز بود\",\n  \"Create Theme\": \"ایجاد قالب\",\n  \"Create\": \"ایجاد\",\n  \"Create a New Blank Theme\": \"ایجاد یک قالب جدید خالی\",\n  \"Theme Created!\": \"قالب با موفقیت ایجاد شد.\",\n  \"Please specify a name for the theme.\": \"لطفا نام قالب را وارد نمایید.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"نام میتواند شامل اعداد ، حروف انگلیسی و این کاراکتر ها باشد: _-\",\n  \"Desired theme directory already exists.\": \"نام پوشه وارد شده موجود است.\",\n  \"Theme directory\": \"پوشه قالب\",\n  \"Provide a new directory name for the duplicated theme.\": \"نام پوشه قالب جدید را جهت کپی کردن وارد نمایید.\",\n  \"Find More Themes\": \"نصب قالب های جدید\",\n  \"Saving Theme...\": \"درحال ذخیره سازی قالب\",\n  \"Return to Themes List\": \"بازگشت به صفحه لیست قالب ها\",\n  \"No themes found\": \"هیچ تم پیدا نشد\",\n  \"Seed Theme\": \"تم بذر\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"موضوع مشخص شده را با طرح‌ها، ترجمه‌ها و داده‌ها بکارید.\",\n  \"Theme Seeded!\": \"تم بذر!\",\n  \"Select Page Link\": \"پیوند صفحه را انتخاب کنید\",\n  \"Search all references...\": \"جستجوی همه مراجع...\",\n  \"CMS Page\": \"صفحات مدیریت محتوی\",\n  \"Link\": \"ارتباط دادن\",\n  \"Please select a CMS page\": \"لطفاً یک صفحه CMS را انتخاب کنید\",\n  \"Please select a page reference\": \"لطفاً یک مرجع صفحه را انتخاب کنید\",\n  \"Please enter a valid URL\": \"لطفا یک نشانی وب معتبر وارد کنید\",\n  \"Delete Theme\": \"حذف تم\",\n  \"Activate Theme\": \"تم را فعال کنید\",\n  \"Manage Partials\": \"مدیریت جزئی\",\n  \"No Title\": \"بدون عنوان\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"نام یکتایی که به این ابزار داده می شود تا درون صفحات و طرح بندی ها به این ابزار اشاره کند.\",\n  \"Alias\": \"نام مستعار\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"نام مستعار برای ابزار مورد نیاز بوده و می تواند شامل حروف لاتین، اعداد، و خط زیر باشد و باید با حرف لاتین شروع شود.\",\n  \"Unnamed\": \"بدون نام\",\n  \"No description provided\": \"توصیحات وجود ندارد\",\n  \"No snippets found\": \"تکه کدی یافت نشد\",\n  \"Search...\": \"جستجو...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"تکه کدی با کد یکتای :code در قالب یافت نشد.\",\n  \"Snippet\": \"تکه کد\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"نام یکتایی را جهت دسترسی به این بخش در افزونه صفحات استاتیک به عنوان تکه کد وارد نمایید.\",\n  \"Please enter the snippet code\": \"لطفا کد قطعه را وارد کنید\",\n  \"Snippet Code\": \"نام یکتای تکه کد\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"نام نمایش داده شده این تکه کد در لیست\",\n  \"Please enter the snippet name\": \"لطفا نام قطعه را وارد کنید\",\n  \"Property Title\": \"عنوان مشخصه\",\n  \"Please provide the property title\": \"لطفا عنوان ملک را بفرمایید\",\n  \"Code\": \"کد یکتا\",\n  \"Please provide the property name\": \"لطفا نام ملک را بفرمایید\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"کد مشخصه باید با یک حرف لاتین شروع شده و شامل حروف لاتین و اعداد می تواند باشد.\",\n  \"Type\": \"نوع\",\n  \"Select\": \"انتخاب کنید\",\n  \"String\": \"رشته\",\n  \"Checkbox\": \"جعبه انتخابی\",\n  \"Dropdown\": \"انتخابگر کشویی\",\n  \"Please select the property type\": \"لطفا نوع ملک را انتخاب کنید\",\n  \"Default\": \"مقدار پیشفرض\",\n  \"Options\": \"گزینه ها\",\n  \"Define a Snippet Partial\": \"یک Snippet Partial را تعریف کنید\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"کلید گزینه %s نامعتبر است. کلید گزینه انتخابگر کشویی فقط میتواند شامل اعداد، حروف لاتین وکاراکتر های _ و - باشد.\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"هنگامی که یک قطعه اضافه می شود، توضیحات در لیست قطعه در ویرایشگر نمایش داده می شود.\",\n  \"Details\": \"جزئیات\"\n}"
  },
  {
    "path": "modules/cms/lang/fi/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Virheellinen tiedostonimi: :name. nimessä voi olla vain kiraimia, numeroita, alaviivoja, viiva ja pisteitä. Esimerkkejä tiedotonimistä: page.htm, page, subdirectory/page',\n    'invalid_file_inspector' => 'Virheellinen tiedostonimi. Tiedostonimessä voi olla vain symboleja, alaviivoja, viivoja ja pisteitä. Esimerkkejä tiedotonimistä: page.htm, page, subdirectory/page',\n    'invalid_property' => 'Ominaisuutta \\':name\\' ei voida asettaa',\n    'file_already_exists' => 'Tiedosto \\':name\\' on jo olemassa.',\n    'error_saving' => 'Virhe tallennettaessa tiedostoa \\':name\\'. Tarkista kirjoitusoikeudet.',\n    'error_creating_directory' => 'Virhe luotaessa kansiota :name. Tarkista kirjoitusoikeudet.',\n    'invalid_file_extension' => 'Virheellinen tiedostopääte: :invalid. Sallitut päätteet ovat: :allowed.',\n    'error_deleting' => 'Virhe poistaessa teemaa \\':name\\'. Tarkista kirjoitusoikeudet.',\n    'delete_success' => 'Poistetut teemat: :count.',\n    'file_name_required' => 'Tiedoston nimi -kenttä on vaadittu.',\n    'safe_mode_enabled' => 'Turvatila on käytössä.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Verkkosivusto',\n      'online' => 'Online',\n      'maintenance' => 'Ylläpitotila',\n      'manage_themes' => 'Hallitse teemoja',\n      'customize_theme' => 'Kustomoi teema',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktiivista teemaa ei ole asetettu.',\n      'not_found' => 'Aktiivista teemaa ei löytynyt.',\n      'is_locked' => 'Teema \\':theme\\' on lukittu ja sitä ei voi käyttää. Ole hyvä ja tee kopio tai luo lapsiteema.',\n    ],\n    'edit' => [\n      'not_set' => 'Muokattavaa teemaa ei ole asetettu.',\n      'not_found' => 'Muokattavaa teemaa ei löydy.',\n      'not_match' => 'Objektia, jota yrität muokata, ei kuulu muokattavaan teemaan. Päivitä sivu uudelleen.',\n    ],\n    'setting_edit_theme' => 'Muutetaan teeman muokkaukset',\n    'edit_theme_changed' => 'Muokattava teema muutettu',\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Sivua \\':name\\' ei löytynyt',\n    'not_found' => [\n      'label' => 'Sivua ei löytynyt',\n      'help' => 'Haettua sivua ei löydy.',\n    ],\n    'custom_error' => [\n      'label' => 'Sivuvirhe',\n      'help' => 'Olemme pahoillamme, mutta joku meni vikaan ja sivua ei voida näyttää.',\n    ],\n    'menu_label' => 'Sivut',\n    'unsaved_label' => 'Tallenntamattomat sivu(t)',\n    'no_list_records' => 'Yhtään sivua ei löytynyt',\n    'new' => 'Uusi sivu',\n    'invalid_url' => 'Virheellinen URL-muoto. URL täytyy alkaa kauttamerkillä ja saa sisältää ainoastaan numeroita, latinalaisia kirjaimia sekä seuraavia merkkejä: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Poista valitut sivut?',\n    'delete_confirm_single' => 'Posita tämä sivu?',\n    'no_layout' => '-- ei ulkoasua --',\n    'title' => 'Sivun nimi',\n    'url' => 'Sivun URL-osoite',\n    'url_required' => 'Sivun URL on pakollinen.',\n    'file_name' => 'Sivun tiedostonimi',\n    'editor_node_name' => 'Sivut',\n    'editor_sorting' => 'Järjestä Sivut',\n    'editor_sort_by_url' => 'URL',\n    'editor_sort_by_title' => 'Otsikko',\n    'editor_sort_by_file_name' => 'Tiedostonimi',\n    'editor_grouping' => 'Ryhmitä Sivut',\n    'editor_group_by_filepath' => 'Tiedostopolku',\n    'editor_group_by_url' => 'URL',\n    'editor_display' => 'Näytä',\n    'editor_display_title' => 'Otsikko',\n    'editor_display_url' => 'URL',\n    'editor_display_file' => 'Tiedostopolku',\n    'editor_markup' => 'Markup',\n    'editor_code' => 'Koodi',\n    'description_hint' => 'Kuvaus on vaihtoehtoinen ja näkyy vain ylläpidon käyttäjille omassa käyttöliittymässä.',\n    'create_new' => 'Uusi sivu',\n  ],\n  'layout' => [\n    'not_found_name' => 'Ulkoasua \\':name\\' ei löytynyt',\n    'menu_label' => 'Ulkoasut',\n    'unsaved_label' => 'Tallentamattomat ulkoasu(t)',\n    'no_list_records' => 'Ei ulkoasuja',\n    'new' => 'Uusi ulkoasu',\n    'delete_confirm_multiple' => 'Poista valitut ulkoasut?',\n    'delete_confirm_single' => 'Poista tämä ulkoasu?',\n    'editor_node_name' => 'Asettelu',\n    'create_new' => 'Uusi Asettelu',\n  ],\n  'partial' => [\n    'not_found_name' => 'Osiota \\':name\\' ei löydy.',\n    'invalid_name' => 'Osion nimi: :name ei ole kelvollinen.',\n    'menu_label' => 'Osiot',\n    'unsaved_label' => 'Tallentamaton osio(t)',\n    'no_list_records' => 'Osioita ei löydy',\n    'delete_confirm_multiple' => 'Poista valitut osiot?',\n    'delete_confirm_single' => 'Poista tämä osio?',\n    'editor_node_name' => 'Osiot',\n    'new' => 'Uusio osio',\n    'create_new' => 'Uusi osio',\n  ],\n  'content' => [\n    'not_found_name' => 'Sisältötiedostoa \\':name\\' ei löydy.',\n    'menu_label' => 'Sisältö',\n    'unsaved_label' => 'Tallentamaton sisältö',\n    'no_list_records' => 'Sisältötiedostoja ei löydy',\n    'delete_confirm_multiple' => 'Poista valitut sisältötiedostot tai hakemistot?',\n    'delete_confirm_single' => 'Poista tämä sisältötiedosto?',\n    'editor_node_name' => 'Sisältötiedostot',\n    'new' => 'Uusi sisältötiedosto',\n    'editor_content' => 'Sisältö',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Ajax käsittelijän nimi: :name ei ole kelvollinen.',\n    'not_found' => 'AJAX käsittelijää \\':name\\' ei löydy.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Lisää',\n    'search' => 'Etsi...',\n  ],\n  'editor' => [\n    'settings' => 'Asetukset',\n    'title' => 'Nimi',\n    'new_title' => 'Uusi sivun nimi',\n    'url' => 'URL',\n    'filename' => 'Tiedostonimi',\n    'layout' => 'Ulkoasu',\n    'description' => 'Kuvaus',\n    'preview' => 'Esikatselu',\n    'page' => 'CMS sivu',\n    'edit_theme' => 'Muokkaa teemaa',\n    'change_edit_theme' => 'Muuta muokkaa teemaa',\n    'edit_theme_saved_changed_tabs' => 'Sinulla on avoimilla välilehdillä tallentamattomia muutoksia. Ole hyvä ja tallenna ne tai sulje välilehdet jatkaaksesi.',\n    'partial' => 'CMS osio',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta-otsikko',\n    'meta_description' => 'Meta-kuvaus',\n    'markup' => 'Markup-kieli',\n    'code' => 'Koodi',\n    'content' => 'Sisältö',\n    'assets' => 'Tiedostot',\n    'hidden' => 'Piilotettu',\n    'hidden_comment' => 'Piilotetut sivut ovat saatavilla ainoastaan hallintapaneeliin kirjautuneille käyttäjille.',\n    'priority' => 'Prioriteetti',\n    'priority_comment' => 'Priorisoitu ulkoasu ladataan ennen sivun muuta sisältöä.',\n    'enter_fullscreen' => 'Siirry kokoruudun tilaan',\n    'exit_fullscreen' => 'Poistu kokoruudun tilasta',\n    'open_searchbox' => 'Avaa haku',\n    'open_replacebox' => 'Avaa korvaa',\n    'commit' => 'Ota käyttöön',\n    'reset' => 'Palauta',\n    'commit_confirm' => 'Haluatko varmasti ottaa käyttöön tekemäsi muutokset tiedostojärjestelmässä? Tämä yliajaa olemassa olevat tiedostot järjestelmässä',\n    'reset_confirm' => 'Haluatko varmasti palauttaa tämän tiedoston tiedostojärjestelmässä olevaan versioon? Tämä yliajaa kokonaan tiedoston, joka on tiedostojärjestelmässä',\n    'committing' => 'Otetaan käyttöön',\n    'resetting' => 'Palautetaan',\n    'commit_success' => ':type on otettu käyttöön tiedostojärjestemässä',\n    'reset_success' => ':type on palautettu versioon tiedostojärjestelmässä',\n    'error_loading_header' => 'Virhe ladattaessa pohjaa',\n    'component_list' => 'Komponentit',\n    'component_list_description' => 'Lisätäksesi komponentin, klikkaa sitä tai raahaa ja pudota Markup-editoriin.',\n    'info' => 'Info',\n    'refresh' => 'Lataa uudelleen',\n    'create' => 'Luo',\n    'manage_themes' => 'Hallinnoi teemoja',\n    'error_no_doctype_permissions' => 'Sinulla ei ole riittäviä oikeuksia hallinnoida tiedostoa :doctype',\n  ],\n  'asset' => [\n    'menu_label' => 'Aineistot',\n    'unsaved_label' => 'Tallentamattomia aineistoja',\n    'drop_down_add_title' => 'Lisää...',\n    'drop_down_operation_title' => 'Toiminto...',\n    'upload_files' => 'Siirrä tiedoto(ja)',\n    'create_file' => 'Luo tiedosto',\n    'create_directory' => 'Luo kansio',\n    'directory_popup_title' => 'Uusi kansio',\n    'directory_name' => 'Kansion nimi',\n    'directory_name_required' => 'Kansion nimi on pakollinen',\n    'rename_name_required' => 'Nimi on pakollinen',\n    'rename' => 'Nimeä uudelleen',\n    'delete' => 'Poista',\n    'move' => 'Siirrä',\n    'moving' => 'Siirretään valittuja',\n    'moved' => 'Siirto onnistui',\n    'saved' => 'Tiedosto tallennettu',\n    'deleted' => 'Tiedosto poistettu',\n    'select' => 'Valitse',\n    'new' => 'Uusi tiedosto',\n    'rename_popup_title' => 'Nimeä uudelleen',\n    'rename_new_name' => 'Uusi nimi',\n    'invalid_path' => 'Polku voi sisältää ainoastaan numeroita, latinalaisia kirjaimia, välilyöntejä sekä seuraavia merkkejä: ._-/',\n    'error_deleting_file' => 'Virhe poistettaessa tiedostoa :name.',\n    'error_deleting_dir_not_empty' => 'Virhe poistaessa hakemistoa :name. Hakemisto ei ole tyhjä.',\n    'error_deleting_dir' => 'Virhe poistaessa hakemistoa :name.',\n    'invalid_name' => 'Nimessä voi olla vain numeroita, kirjaimia, välilyöntejä ja seuraavia merkkejä: ._-',\n    'original_not_found' => 'Alkuperäistä tiedostoa tai hakemistoa ei löydy',\n    'already_exists' => 'Tiedosto tai hakemisto tällä nimillä on jo olemassa',\n    'error_renaming' => 'Virhe tiedoston tai hakemiston uudelleennimeämisessä',\n    'name_cant_be_empty' => 'Nimi on pakollinen',\n    'too_large' => 'Tiedosto on liian iso. Suurin sallittu koko on :max_size',\n    'type_not_allowed' => 'Vain seuraavat tiedostotyypit ovat sallittuja: :allowed_types',\n    'file_not_valid' => 'Tiedosto ei kelpaa',\n    'error_uploading_file' => 'Virhe siirrettäessä tiedostoa \\':name\\': :error',\n    'move_please_select' => 'ole hyvä ja valitse',\n    'move_destination' => 'Kohdekansio',\n    'move_popup_title' => 'Siirrä aineistoja',\n    'move_button' => 'Siirrä',\n    'selected_files_not_found' => 'Valittuja tiedostoja ei löydy',\n    'select_destination_dir' => 'Valitse kohdehakemisto',\n    'destination_not_found' => 'Kohdehakemistoa ei löydy',\n    'error_moving_file' => 'Virhe siirtäessä tiedostoa :file',\n    'error_moving_directory' => 'Virhe siirrettäessä kansiota :dir',\n    'error_deleting_directory' => 'Virhe poistettaessa alkuperäinen kansio :dir',\n    'no_list_records' => 'Tiedostoja ei löytynyt',\n    'delete_confirm' => 'Poista valitut tiedostot ja/tai kansiot?',\n    'path' => 'Polku',\n    'editor_node_name' => 'Kirjasto',\n    'open' => 'Avaa',\n  ],\n  'component' => [\n    'menu_label' => 'Komponentit',\n    'unnamed' => 'Nimeämätön',\n    'no_description' => 'Ei annettua kuvausta',\n    'alias' => 'Alias',\n    'alias_description' => 'Uniikki nimi komponentille kun käytössä sivulla tai ulkoasun koodissa.',\n    'validation_message' => 'Komponentin alias on vaadittu ja se voi sisältää ainoastaan latinalaisia kirjaimia, numeroita ja alaviivoja. Aliaksien pitäisi alkaa latinalaisella kirjaisimella.',\n    'invalid_request' => 'Mallia ei voida tallentaa koska komponentin tiedot eivät ole kelvollisia.',\n    'no_records' => 'Komponentteja ei löytynyt',\n    'not_found' => 'Komponenttia \\':name\\' ei löydy.',\n    'method_not_found' => 'Komponentti \\':name\\' ei sisällä metodia \\':method\\'.',\n    'expand_or_collapse' => 'Laajenna tai sulje komponenttilista',\n    'remove' => 'Poista komponentti',\n    'expand_partial' => 'Laajenna komponentti osio',\n  ],\n  'template' => [\n    'invalid_type' => 'Tuntematon teeman tyyppi.',\n    'not_found' => 'Teemaa ei löytynyt.',\n    'saved' => 'Teema tallennettu.',\n    'saved_to_db' => 'Teema tallennettu tietokantaan',\n    'file_updated' => 'Teematiedosto päivitetty',\n    'reset_from_template_success' => 'Pohja päivitettiin tiedostosta',\n    'reloaded' => 'Pohja ladattu uudelleen',\n    'deleted' => 'Pohja poistettu',\n    'no_list_records' => 'Tietueita ei löytynyt',\n    'delete_confirm' => 'Poista valitut teemat?',\n    'order_by' => 'Järjestä',\n    'last_modified' => 'Viimeksi muokattu',\n    'storage' => 'Tallennustila',\n    'template_file' => 'Teematiedosto',\n    'storage_filesystem' => 'Tiedostojärjestelmä',\n    'storage_database' => 'tietokanta',\n    'update_file' => 'Päivitä teematiedosto',\n    'reset_from_file' => 'Nollaa teematiedostosta',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Hallinnoi sivuston sisältötiedostoja',\n    'manage_assets' => 'Hallinnoi sivuston assetteja - kuvat, JavaScript-tiedostot, CSS-tiedostot',\n    'manage_pages' => 'Luo, muokkaa ja poista sivuston sivuja',\n    'manage_layouts' => 'Luo, muokkaa ja poista sivuston ulkoasuja',\n    'manage_partials' => 'Luo, muokkaa ja poista CMS-järjestelmän osioita',\n    'manage_themes' => 'Ota käyttöön ja poista käytöstä CMS-järjestelmän teemoja',\n    'manage_media' => 'Siirrä ja hallinnoi mediatiedostoja - kuvia, videoita, ääniä, dokumentteja',\n    'manage_theme_options' => 'Muokkaa aktiivisen teeman asetuksia',\n  ],\n  'theme_log' => [\n    'hint' => 'Tämä loki näyttää muutokset teemaan järjestelmänvalvojilta hallintapaneelissa.',\n    'menu_label' => 'Teemaloki',\n    'menu_description' => 'Katso tehdyt muutokset aktiiviseen teemaan.',\n    'empty_link' => 'Tyhjennä teemaloki',\n    'empty_loading' => 'Tyhjennetään teemaloki...',\n    'empty_success' => 'Teemaloki tyhjätty',\n    'return_link' => 'Palaa teemalokiin',\n    'id' => 'ID',\n    'id_label' => 'Loki ID',\n    'created_at' => 'Pvm & aika',\n    'user' => 'Käyttäjä',\n    'type' => 'Tyyppi',\n    'type_create' => 'Luo',\n    'type_update' => 'Päivitä',\n    'type_delete' => 'Poista',\n    'theme_name' => 'Teema',\n    'theme_code' => 'Teeman koodi',\n    'old_template' => 'Teema (vanha)',\n    'new_template' => 'Teema (uusi)',\n    'template' => 'Teema',\n    'diff' => 'Muutokset',\n    'old_value' => 'Vanha arvo',\n    'new_value' => 'Uusi arvo',\n    'preview_title' => 'Teeman muutokset',\n    'template_updated' => 'Teema on päivitetty',\n    'template_created' => 'Teema on luotu',\n    'template_deleted' => 'Teema on poistettu',\n  ],\n  'intellisense' => [\n    'learn_more' => 'Learn more',\n    'docs' => [\n      'partial' => 'Muodostaa CMS-osiosta sisällön.',\n      'page' => 'Muodostaa sisällön CMS-sivusta ja sijoittaa sen taittomalliin.',\n      'content' => 'Muodostaa sisällön CMS-sisältöosiosta.',\n      'component' => 'Muodostaa sisällön oletus markup-sisällöstä CMS-komponenttiin.',\n      'placeholder' => 'Muodostaa sisällön placeholder-sisällöstä.',\n      'scripts' => 'Sijoittaa JavaScript-tiedostot haluttuun kohtaan sovelluksessa.',\n      'styles' => 'Muodostaa CSS-tyylien linkit haluttuun kohtaan sovelluksessa.',\n      'flash' => 'Muodostaa minkä tahansa pikaviestin, joka on tallennettu käyttäjän sessiossa.',\n      'verbatim' => 'Merkitsee koko osion raakatekstiksi, jota ei tulisi parseroida.',\n      'macro' => 'Sallii omien kustomoitujen toimintojen määrittelyn teemassa.',\n      'for' => 'Toistaa jokaisen arvon kokoelmassa.',\n      'if' => 'Sallii ehdot sisällön näyttämiseen teemassa.',\n      'abs_filter' => '`abs`-suodatin palauttaa itseisarvon.',\n      'batch_filter' => '`batch`-suodatin \"eräilee\" kohteita palauttamalla lista listoista annetulla lukumäärällä. Toinen parametri voidaan antaa ja sitä voidaan käyttää täyttämään puuttuvia kohteita.',\n      'capitalize_filter' => '`capitalize`-suodatin tekee arvosta ison alkukirjaimen. Ensimmäinen kirjain on suuri ja muut pieniä.',\n      'column_filter' => '`column`-suodatin palauttaa yksittäisen sarakkeen arvot syöte taulukosta.',\n      'convert_encoding_filter' => '`convert_encoding`-suodatin muuntaa merkkijonon yhdestä merkistökoodauksesta toiseen. Ensimmäinen argumentti on odotettu ulostulon merkistö ja toinen on syötteen merkistö.',\n      'country_name_filter' => '`country_name`-suodatin palauttaa maan nimen ISO-3166 kaksikirjaimisen koodin perusteella.',\n      'currency_name_filter' => '`currency_name`-suodatin palauttaa valuutan nimen sen kolmikirjaimisen koodin perusteella.',\n      'currency_symbol_filter' => '`currency_symbol`-suodatin palauttaa valuutan symbolin sen kolmikirjaimisen koodin perusteella.',\n      'data_uri_filter' => '`data_uri`-suodatin generoi URL-osoitteen käyttäen data-skeemaa kuten RFC 2397 määrittelee.',\n      'date_filter' => '`date`-suodatin muotoilee päivämäärän annetun formaatin mukaisesti.',\n      'date_modify_filter' => '`date_modify`-suodatin muokkaa päivämäärää annetun muokkausmerkkijonon mukaisesti.',\n      'default_filter' => '`default`-suodatin palauttaa annetun oletusarvon, jos arvo on määrittelemätön tai tyhjä, muuten muuttujan arvon.',\n      'escape_filter' => '`escape`-suodatin pakkaa merkkijonon käyttäen strategioita, jotka riippuvat yhteydestä.',\n      'filter_filter' => '`filter`-suodatin suodattaa sekvenssin tai taulukon elementtejä käyttäen nuolifunktiota. Nuolifunktio saa sekvenssin tai taulukon arvon.',\n      'first_filter' => '`first`-suodatin palauttaa sekvenssin, taulukon tai merkkijonon ensimmäisen \"elementin\".',\n      'format_filter' => '`format`-suodatin muotoilee annetun merkkijonon korvaamalla paikkamerkit (paikkamerkit seuraavat [sprintf](https://www.php.net/sprintf) notaatiota).',\n      'format_currency_filter' => '`format_currency`-suodatin muotoilee luvun valuutaksi.',\n      'join_filter' => '`join`-suodatin palauttaa merkkijonon, joka koostuu jonon elementtien yhdistelmästä.',\n      'json_encode_filter' => '`json_encode`-suodatin palauttaa arvon JSON-muodossa.',\n      'keys_filter' => '`keys`-suodatin palauttaa taulukon avaimet. Tämä on hyödyllinen silloin, kun haluat käydä läpi taulukon avaimet.',\n      'last_filter' => '`last`-suodatin palauttaa jonon viimeisen \"elementin\", kartan tai merkkijonon.',\n      'length_filter' => '`length`-suodatin palauttaa jonon tai kuvauksen elementtien määrän tai merkkijonon pituuden.',\n      'lower_filter' => '`lower`-suodatin muuntaa arvon pienaakkosiksi.',\n      'map_filter' => '`map`-suodatin soveltaa nuolitoimintoa jonon tai kuvauksen elementteihin. Nuolitoiminto saa jonon tai kuvauksen arvon.',\n      'merge_filter' => '`merge`-suodatin yhdistää taulukon toisen taulukon kanssa.',\n      'nl2br_filter' => '`nl2br`-suodatin lisää HTML-sisennysmerkkejä kaikkien uusien rivien edessä merkkijonossa.',\n      'number_format_filter' => '`number_format`-suodatin muotoilee numerot. Se on PHP:n [number_format](https://www.php.net/number_format) -funktion kääre.',\n      'reduce_filter' => '`reduce`-suodatin vähentää jonoa tai kuvailua toistuvasti käyttäen nuolitoimintoa yhden arvon saamiseksi. Nuolitoiminto saa edellisen iteraation paluuarvon ja jonon tai kuvailun nykyisen arvon.',\n      'replace_filter' => '`replace`-suodatin muotoilee annetun merkkijonon korvaamalla paikkamerkit.',\n      'reverse_filter' => '`reverse`-suodatin kääntää jonon, kartan tai merkkijonon.',\n      'round_filter' => '`round`-suodatin pyöristää numeron annetulla tarkkuudella.',\n      'slice_filter' => '`slice`-suodatin poimii osajoukon jonosta, kuvailusta tai merkkijonosta.',\n      'sort_filter' => '`sort`-suodatin järjestää taulukon.',\n      'spaceless_filter' => 'Käytä `spaceless`-suodatinta poistaaksesi HTML-tagien väliset välilyönnit. Tämä ei poista välilyöntejä HTML-tageissa tai tekstissä.',\n      'split_filter' => '`split`-suodatin jakaa merkkijonon annetulla erotinmerkillä ja palauttaa merkkijonojen luettelon.',\n      'striptags_filter' => '`striptags`-suodatin poistaa SGML/XML-tunnisteet ja korvaa vierekkäiset välilyönnit yhdellä välilyönnillä.',\n      'title_filter' => '`title`-suodatin palauttaa otsikon ensimmäiset kirjaimet isolla kirjaimella ja muut pienellä kirjaimella.',\n      'trim_filter' => '`trim`-suodatin poistaa välilyönnit (tai muut merkit) merkkijonon alusta ja lopusta.',\n      'upper_filter' => '`upper`-suodatin muuntaa arvon isoiksi kirjaimiksi.',\n      'url_encode_filter' => '`url_encode`-suodatin koodaa annetun merkkijonon URL-osaksi tai taulukon kyselymerkkijonoksi.',\n      'page_filter' => '`page`-suodatin luo linkin sivulle käyttäen sivutiedoston nimeä ilman tiedostotunnistetta parametrina.',\n      'theme_filter' => '`theme`-suodatin palauttaa osoitteen suhteessa sivuston aktiiviseen teeman polkuun.',\n      'app_filter' => '`app`-suodatin palauttaa osoitteen suhteessa sivuston julkiseen polkuun.',\n      'media_filter' => '`media`-suodatin palauttaa osoitteen suhteessa [mediahallintakirjaston](https://docs.octobercms.com/4.x/cms/media/introduction.html) julkiseen polkuun.',\n      'md_filter' => '`md`-suodatin muuntaa Markdown-muotoisen arvon HTML-muotoon.',\n      'raw_filter' => '`raw`-suodatin merkitsee arvon \"turvalliseksi\", mikä tarkoittaa, että muuttujaa ei koodata, jos `raw` on viimeinen siihen sovellettu suodatin.'\n    ],\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/fi.json",
    "content": "{\n  \"Themes\": \"Teemat\",\n  \"Manage Themes\": \"Hallitse teemoja\",\n  \"Customize Theme\": \"Kustomoi teema\",\n  \"Manage Maintenance Mode\": \"Hallitse ylläpitotilaa\",\n  \"View Website During Maintenance\": \"Tarkastele verkkosivustoa huollon aikana\",\n  \"Manage Content\": \"Hallitse sisältöä\",\n  \"Manage Asset Files\": \"Hallitse omaisuustiedostoja\",\n  \"Manage Pages\": \"Hallitse sivuja\",\n  \"Manage Layouts\": \"Hallitse asetteluja\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Muokkaa huoltotilan sivua ja valitse asetus.\",\n  \"Maintenance Mode\": \"Ylläpitotila\",\n  \"Select the page to show when maintenance mode is activated.\": \"Valitse sivu näytettäväksi kun huoltotila on käytössä.\",\n  \"Enable maintenance mode\": \"Ota huoltotila käyttöön\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Huoltotila näyttää huoltosivun vierailijoille, jotka eivät ole kirjautuneena hallintapaneeliin.\",\n  \"Resources\": \"Resurssit\",\n  \"Reference assets and variables included on this page.\": \"Tällä sivulla olevat viitemateriaalit ja muuttujat.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript-tiedosto(t) sisältö/js-kansiossa\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"LESS- tiedosto(t) assets/less-kansiossa\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS-tiedosto(t) assets/scss-kansiossa\",\n  \"Variables\": \"Muuttujat\",\n  \"Page variables name(s) and value(s)\": \"Sivumuuttujien nimet ja arvot\",\n  \"Headers\": \"Otsikot\",\n  \"Page header name(s) and value(s)\": \"Sivun otsikon nimet ja arvot\",\n  \"Site Picker\": \"Sivuston valitsin\",\n  \"Displays links for selecting a different site.\": \"Näyttää linkit toisen sivuston valitsemiseksi.\",\n  \"Unknown component\": \"Tuntematon komponentti\",\n  \"View Bag\": \"Näytä kori\",\n  \"Stores custom template properties.\": \"Tallentaa mukautetun mallin ominaisuudet.\",\n  \"By :name\": \"Tekijä: :name\",\n  \"The theme ':name' is not found.\": \"Teemaa ':name' ei löydy.\",\n  \"Manage the front-end theme and customization options.\": \"Hallitse sivuston teemaa ja muokkausvaihtoehtoja.\",\n  \"Site Theme\": \"Sivuston teema\",\n  \"Properties\": \"Ominaisuudet\",\n  \"Publish\": \"Julkaise\",\n  \"Advanced\": \"Edistynyt\",\n  \"Name\": \"Nimi\",\n  \"New theme name\": \"Uuden teeman nimi\",\n  \"Author Name\": \"Julkaisija\",\n  \"Person or company name\": \"Henkilön tai yrityksen nimi\",\n  \"Directory Name\": \"Hakemiston nimi\",\n  \"The destination theme directory\": \"Teeman kohdehakemisto\",\n  \"Description\": \"Kuvaus\",\n  \"Theme description\": \"Teeman kuvaus\",\n  \"Homepage\": \"Kotisivu\",\n  \"Website URL\": \"Verkkosivujen URL-osoite\",\n  \"Author Code\": \"Julkaisijan koodi\",\n  \"A unique code for the author used for distribution\": \"Uniikki julkaisijan koodi, jota käytetään jakelusssa\",\n  \"Theme Code\": \"Teeman koodi\",\n  \"A unique code for this theme used for distribution\": \"Uniikki koodi teeman jakeluun\",\n  \"Parent Theme\": \"Isäntäteema\",\n  \"Database Mode\": \"Tietokannan tila\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Tallenna teeman tiedot tietokantaan tiedostotallennuksen sijaan\",\n  \"-- no parent --\": \"-- ei isäntää --\",\n  \"Theme\": \"Teemaa\",\n  \"Folders\": \"Kansiot\",\n  \"Please select the theme folders you would like to export\": \"Valitse teeman kansiot, jotka haluat viedä\",\n  \"Theme archive file\": \"Teemaarkistotiedosto\",\n  \"Overwrite existing files\": \"Ylikirjoita olemassaolevat tiedostot\",\n  \"Untick this box to only import new files\": \"Poistä tämä käytöstä tuodaksesi vain uudet tiedostot\",\n  \"Please select the theme folders you would like to import\": \"Valitse teeman kansiot, jotka haluat tuoda.\",\n  \"Activate\": \"Aktivoi\",\n  \"Customize\": \"Kustomoi\",\n  \"Duplicate\": \"Monista\",\n  \"Duplicate Theme\": \"Monista teema\",\n  \"Theme Duplicated!\": \"Teema monistettu!\",\n  \"Manage\": \"Hallinnoi\",\n  \"Manage Theme\": \"Hallinnoi teemaa\",\n  \"Edit Properties\": \"Muokkaa ominaisuuksia\",\n  \"Save Properties\": \"Tallenna ominaisuudet\",\n  \"Import\": \"Tuo\",\n  \"Import Theme\": \"Tuo teema\",\n  \"Theme Imported!\": \"Teema tuotu!\",\n  \"Export\": \"Vie\",\n  \"Export Theme\": \"Vie teema\",\n  \"Delete\": \"Poista\",\n  \"Delete this theme? It cannot be undone!\": \"Positetaanko tämä teema? Toimintoa ei voi perua!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Aktiivista teemaa ei voida poistaa. Ota ensin toinen teema käyttöön\",\n  \"Theme deleted!\": \"Teema poistettu!\",\n  \"Create Theme\": \"Luo teema\",\n  \"Create\": \"Luo\",\n  \"Create a New Blank Theme\": \"Luo uusi tyhjä teema\",\n  \"Theme Created!\": \"Teema luotu!\",\n  \"Please specify a name for the theme.\": \"Anna teemalle nimi.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Nimi voi sisältää ainoastaan numeroja, latinalaisia kirjaimia sekä seuraavia merkkejä: _-\",\n  \"Desired theme directory already exists.\": \"Haluttu teemakansio on jo olemassa.\",\n  \"Theme directory\": \"Teemakansio\",\n  \"Provide a new directory name for the duplicated theme.\": \"Anna uusi hakemisto monistetulle teemalle.\",\n  \"Find More Themes\": \"Etsi lisää teemoja\",\n  \"Saving Theme...\": \"Tallennetaan teemaa...\",\n  \"Return to Themes List\": \"Palaa teemalistaan\",\n  \"No themes found\": \"Teemoja ei löytynyt\",\n  \"Seed Theme\": \"Jaa teema\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Jaa tietty teema blueprinttien, käännöksien ja datan kanssa.\",\n  \"Theme Seeded!\": \"Teema jaettu!\",\n  \"Select Page Link\": \"Valitse sivulinkki\",\n  \"Search all references...\": \"Etsi kaikki esiintymiset...\",\n  \"CMS Page\": \"CMS-sivu\",\n  \"Link\": \"Linkki\",\n  \"Please select a CMS page\": \"Valitse CMS-sivu\",\n  \"Please select a page reference\": \"Valitse sivureferenssi\",\n  \"Please enter a valid URL\": \"Anna URL-osoite oikeassa muodossa\",\n  \"Delete Theme\": \"Poista teema\",\n  \"Activate Theme\": \"Aktivoi teema\",\n  \"Manage Partials\": \"Hallitse osia\",\n  \"No Title\": \"Ei otsikkoa\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Uniikki nimi komponentille kun käytössä sivulla tai ulkoasun koodissa.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Komponentin alias on vaadittu ja se voi sisältää ainoastaan latinalaisia kirjaimia, numeroita ja alaviivoja. Aliaksien pitäisi alkaa latinalaisella kirjaisimella.\",\n  \"Unnamed\": \"Nimeämätön\",\n  \"No description provided\": \"Ei annettua kuvausta\",\n  \"No snippets found\": \"Osia ei löydy\",\n  \"Search...\": \"Etsi...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Osaa pyydetyllä koodilla :code ei löytynyt teemasta.\",\n  \"Snippet\": \"Osat\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Syötä koodi, jotta tämä osio on käytettävissä Staattisten sivujen -lisäosassa.\",\n  \"Please enter the snippet code\": \"Ole hyvä ja lisää koodin pätkä\",\n  \"Snippet Code\": \"Osan koodi\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Nimi näkyy osiolistassa Staattisten sivujen -sivupalkissa ja sivuilla kun osa on lisätty.\",\n  \"Please enter the snippet name\": \"Pätkällä on oltava nimi\",\n  \"Property Title\": \"Ominaisuuden otsikko\",\n  \"Please provide the property title\": \"Ole hyvä ja lisää ominaisuuden otsikko\",\n  \"Code\": \"Koodi\",\n  \"Please provide the property name\": \"Ominaisuuden nimi on pakollinen\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Ominaisuuden koodin tulisi alkaa latinalaisella kirjaimella ja voi sisältää ainoastaan latinalaisia merkkejä ja kokonaislukuja\",\n  \"Type\": \"Tyyppi\",\n  \"Select\": \"Valitse\",\n  \"String\": \"Merkkijono\",\n  \"Checkbox\": \"Valintaruutu\",\n  \"Dropdown\": \"Alasvetovalikko\",\n  \"Please select the property type\": \"Valitse ominaisuuden tyyppi\",\n  \"Default\": \"Oletus\",\n  \"Options\": \"Vaihtoehdot\",\n  \"Define a Snippet Partial\": \"Määrittele pätkäosio\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Kelvoton alasvetovalikon vaihtoehtoavain :key. Vaihtoehtojen avaimet voivat sisältää ainoastaan kokonaislukuja, latinalaisia merkkejä, ja merkkejä _ ja -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Kuvaus näytetään editorin pätkälistalla, kun pätkä on lisätty.\",\n  \"Details\": \"Yksityiskohdat\",\n  \"Frontend Theme\": \"Sivuston teema\"\n}"
  },
  {
    "path": "modules/cms/lang/fr/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nom de fichier invalide : :name. Les noms de fichiers ne peuvent contenir que des caractères alphanumériques, des tirets bas, des tirets et des points. Voici des exemples de noms de fichiers valides : page.htm, ma-page, sous_repertoire/nouvelle.page',\n    'invalid_file_inspector' => 'Nom de fichier invalide. Les noms de fichiers ne peuvent contenir seulement des caractères alphanumériques, des sous-tirets, tirets and points. Quelques exemples de noms de fichiers valides: page.htm, page, sous-repertoire/page',\n    'invalid_property' => 'L’attribut \":name\" ne peut pas être défini',\n    'file_already_exists' => 'Le fichier \":name\" existe déjà.',\n    'error_saving' => 'Erreur lors de l’enregistrement du fichier \":name\". Veuillez vérifier les permissions en écriture.',\n    'error_creating_directory' => 'Erreur lors de la création du répertoire :name. Veuillez vérifier les permissions en écriture.',\n    'invalid_file_extension' => 'Extension de fichier invalide : :invalid. Les extensions autorisées sont : :allowed.',\n    'error_deleting' => 'Erreur lors de la suppression du modèle \":name\". Veuillez vérifier les permissions en écriture.',\n    'delete_success' => 'Les modèles ont été supprimés avec succès : :count.',\n    'file_name_required' => 'Le nom du fichier est requis.',\n    'safe_mode_enabled' => 'Le mode protégé est activé.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Site Web',\n      'online' => 'En ligne',\n      'maintenance' => 'En cours de maintenance',\n      'manage_themes' => 'Gestion des thèmes',\n      'customize_theme' => 'Personnaliser le thème',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aucun thème n’est activé.',\n      'not_found' => 'Le thème activé est introuvable.',\n      'is_locked' => 'Le thème \\':theme\\' est verrouillé et ne peut pas être utilisé. Veuillez dupliquer ce thème ou créer un thème enfant.',\n    ],\n    'edit' => [\n      'not_set' => 'Le thème à modifier n’est pas activé.',\n      'not_found' => 'Le thème à modifier est introuvable.',\n      'not_match' => 'L’objet auquel vous souhaitez accéder n’appartient pas au thème en cours de modification. Veuillez recharger la page.',\n    ],\n    'setting_edit_theme' => 'Changement de thème d’édition',\n    'edit_theme_changed' => 'thème d’édition changé',\n  ],\n  'page' => [\n    'not_found_name' => 'La page \":name\" est introuvable',\n    'not_found' => [\n      'label' => 'La page est introuvable',\n      'help' => 'La page demandée est introuvable.',\n    ],\n    'custom_error' => [\n      'label' => 'Erreur sur la page',\n      'help' => 'Nous sommes désolés, un problème est survenu et la page ne peut être affichée.',\n    ],\n    'menu_label' => 'Pages',\n    'unsaved_label' => 'Page(s) non enregistrée(s)',\n    'no_list_records' => 'Aucune page n’a été trouvée',\n    'new' => 'Nouvelle page',\n    'invalid_url' => 'Format d’adresse URL invalide. L’adresse URL doit commencer par un / et ne peut contenir que des chiffres, des lettres et les symboles suivants : ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Confirmer la suppression des pages sélectionnées ?',\n    'delete_confirm_single' => 'Confirmer la suppression de cette page ?',\n    'no_layout' => '-- aucune maquette --',\n    'title' => 'Titre de la page',\n    'url' => 'URL de la page',\n    'url_required' => 'L’adresse URL de la page est requise.',\n    'file_name' => 'Nom du fichier de la page',\n    'editor_node_name' => 'Pages',\n    'editor_sorting' => 'Trier les Pages',\n    'editor_sort_by_url' => 'URL',\n    'editor_sort_by_title' => 'Titre',\n    'editor_sort_by_file_name' => 'Nom de fichier',\n    'editor_grouping' => 'Grouper les Pages',\n    'editor_group_by_filepath' => 'Emplacement du fichier',\n    'editor_group_by_url' => 'URL',\n    'editor_display' => 'Afficher',\n    'editor_display_title' => 'Titre',\n    'editor_display_url' => 'URL',\n    'editor_display_file' => 'Emplacement du fichier',\n    'editor_markup' => 'Styles',\n    'editor_code' => 'Code',\n    'description_hint' => 'Le description est optionelle et seulement visible dans l’interface d’administration.',\n    'create_new' => 'Nouvelle Page',\n  ],\n  'layout' => [\n    'not_found_name' => 'La maquette \":name\" est introuvable',\n    'menu_label' => 'Maquettes',\n    'unsaved_label' => 'Maquette(s) non enregistrée(s)',\n    'no_list_records' => 'Aucune maquette n’a été trouvée',\n    'new' => 'Nouvelle maquette',\n    'delete_confirm_multiple' => 'Confirmer la suppression des maquettes sélectionnées ?',\n    'delete_confirm_single' => 'Confirmer la suppression de cette maquette ?',\n    'editor_node_name' => 'Maquettes',\n    'create_new' => 'Nouvelle Maquette',\n  ],\n  'partial' => [\n    'not_found_name' => 'Le modèle partiel \":name\" est introuvable.',\n    'invalid_name' => 'Nom du modèle partiel invalide : :name.',\n    'menu_label' => ' Modèles partiels',\n    'unsaved_label' => 'Modèle(s) partiel(s) non enregistré(s)',\n    'no_list_records' => 'Aucun modèle partiel n’a été trouvé',\n    'delete_confirm_multiple' => 'Confirmer la suppression des modèles partiels sélectionnés ?',\n    'delete_confirm_single' => 'Confirmer la suppression de ce modèle partiel ?',\n    'editor_node_name' => 'Modèles partiels',\n    'new' => 'Nouveau modèle partiel',\n    'create_new' => 'Nouveau modèle partiel',\n  ],\n  'content' => [\n    'not_found_name' => 'Le fichier de contenu \":name\" est introuvable.',\n    'menu_label' => 'Contenu',\n    'unsaved_label' => 'Contenu non enregistré',\n    'no_list_records' => 'Aucun fichier de contenu n’a été trouvé',\n    'delete_confirm_multiple' => 'Confirmer la suppression des fichiers de contenu ou répertoires sélectionnés ?',\n    'delete_confirm_single' => 'Confirmer la suppression de ce fichier de contenu ?',\n    'editor_node_name' => 'Fichiers de contenu',\n    'new' => 'Nouveau fichier de contenu',\n    'editor_content' => 'Fichier de contenu',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Nom du gestionnaire AJAX invalide : :name.',\n    'not_found' => 'Le gestionnaire AJAX \":name\" est introuvable.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Ajouter',\n    'search' => 'Rechercher…',\n  ],\n  'editor' => [\n    'settings' => 'Configuration',\n    'title' => 'Titre',\n    'new_title' => 'Nouveau titre de la page',\n    'url' => 'Adresse URL',\n    'filename' => 'Nom du fichier',\n    'layout' => 'Maquette',\n    'description' => 'Description',\n    'preview' => 'Aperçu',\n    'page' => 'Page CMS',\n    'edit_theme' => 'Editer le Thème',\n    'change_edit_theme' => 'Changer de thème d’édition',\n    'edit_theme_saved_changed_tabs' => 'Vous avez des modifications non sauvegardées dans des onglets ouverts. Veuillez les enregistrer ou fermer ces onglets pour procéder.',\n    'partial' => 'Modèle partiel CMS',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Titre',\n    'meta_description' => 'Meta Description',\n    'markup' => 'Balisage',\n    'code' => 'Code',\n    'content' => 'Contenu',\n    'asset' => 'Fichiers sources',\n    'hidden' => 'Masquée',\n    'hidden_comment' => 'Les pages masquées sont seulement accessibles aux administrateurs connectés.',\n    'priority' => 'Priorité',\n    'priority_comment' => 'Les maquettes prioritaires chargent leurs contenus avant les contenus de la page.',\n    'enter_fullscreen' => 'Activer le mode plein écran',\n    'exit_fullscreen' => 'Annuler le mode plein écran',\n    'open_searchbox' => 'Ouvrir la boîte de dialogue Rechercher',\n    'open_replacebox' => 'Ouvrir la boîte de dialogue Remplacer',\n    'commit' => 'Envoyer',\n    'reset' => 'Rétablir',\n    'commit_confirm' => 'Êtes-vous sûr de vouloir envoyer vos changements apportés à ce fichier au système de fichier ? Cela écrasera le fichier existant sur le système de fichier',\n    'reset_confirm' => 'Êtes-vous sûr de vouloir rétablir ce fichier depuis la version présente sur le système de fichier ? Cela le remplacera totalement par la version présente sur le système de fichier',\n    'committing' => 'Envoi',\n    'resetting' => 'Rétablissement',\n    'commit_success' => 'Le :type a été envoyé au système de fichier',\n    'reset_success' => 'Le :type a été rétabli depuis la version du système de fichier',\n    'error_loading_header' => 'Erreur en chargeant la maquette',\n    'component_list' => 'Composants',\n    'component_list_description' => 'Pour ajouter un composant, cliquez-le ou traînez-le dans l’éditeur.',\n    'info' => 'Informations',\n    'refresh' => 'Rafraîchir',\n    'create' => 'Créer',\n    'manage_themes' => 'Gérer les thèmes',\n    'error_no_doctype_permissions' => 'Vous n’avez pas la permission de gérer ce type de documents: :doctype',\n  ],\n  'asset' => [\n    'menu_label' => 'Assets',\n    'unsaved_label' => 'Asset(s) non sauvegardé(s)',\n    'drop_down_add_title' => 'Ajouter…',\n    'drop_down_operation_title' => 'Action…',\n    'upload_files' => 'Déposer des fichiers',\n    'create_file' => 'Créer un fichier',\n    'create_directory' => 'Créer un répertoire',\n    'directory_popup_title' => 'Nouveau répertoire',\n    'directory_name' => 'Nom du répertoire',\n    'directory_name_required' => 'Le nom du répertoire est requis.',\n    'rename_name_required' => 'Le nom est requis',\n    'rename' => 'Renommer',\n    'delete' => 'Supprimer',\n    'move' => 'Déplacer',\n    'moving' => 'Déplacement des éléments sélectionnés',\n    'moved' => 'Déplacé avec succès',\n    'saved' => 'Fichier enregistré',\n    'deleted' => 'Fichier supprimé',\n    'select' => 'Sélectionner',\n    'new' => 'Nouveau fichier',\n    'rename_popup_title' => 'Renommer',\n    'rename_new_name' => 'Nouveau nom',\n    'invalid_path' => 'Le chemin doit contenir uniquement des chiffres, des lettres, des espaces et les symboles suivants : ._-/',\n    'error_deleting_file' => 'Erreur lors de la suppression du fichier :name.',\n    'error_deleting_dir_not_empty' => 'Erreur lors de la suppression du répertoire :name. Le répertoire n’est pas vide.',\n    'error_deleting_dir' => 'Erreur lors de la suppression du répertoire :name.',\n    'invalid_name' => 'Le nom doit contenir uniquement des chiffres, des lettres, des espaces et les symboles suivants : ._-',\n    'original_not_found' => 'Le fichier original ou son répertoire est introuvable',\n    'already_exists' => 'Un fichier ou un répertoire avec le même nom existe déjà',\n    'error_renaming' => 'Erreur lors du renommage du fichier ou du répertoire',\n    'name_cant_be_empty' => 'Le nom ne peut être vide',\n    'type_not_allowed' => 'Les types de fichiers autorisés sont les suivants : :allowed_types',\n    'error_uploading_file' => 'Erreur lors du dépôt du fichier \":name\" : :error',\n    'move_please_select' => 'Faire une sélection',\n    'move_destination' => 'Répertoire de destination',\n    'move_popup_title' => 'Déplacer les assets',\n    'move_button' => 'Déplacer',\n    'no_list_records' => 'Aucun fichier trouvé',\n    'path' => 'Chemin',\n    'editor_node_name' => 'Sources',\n    'open' => 'Ouvert',\n  ],\n  'component' => [\n    'menu_label' => 'Composants',\n    'invalid_request' => 'Le modèle ne peut être enregistré car les données d’un composant ne sont pas valides.',\n    'no_records' => 'Aucun composant n’a été trouvé',\n    'not_found' => 'Le composant \":name\" est introuvable.',\n    'method_not_found' => 'Le composant \":name\" ne contient pas de méthode \":method\".',\n    'expand_or_collapse' => 'Ouvrir ou fermer la liste des composants',\n    'remove' => 'Retirer le composant',\n    'expand_partial' => 'Ouvrir le partiel du composant',\n  ],\n  'template' => [\n    'invalid_type' => 'Type de modèle inconnu.',\n    'not_found' => 'Le modèle est introuvable.',\n    'saved' => 'Le modèle a été sauvegardé avec succès.',\n    'saved_to_db' => 'Le modèle a été sauvegardé en base de données.',\n    'file_updated' => 'Le modèle a été mis à jour.',\n    'reset_from_template_success' => 'Le modèle a été réinitialisé à partir du fichier.',\n    'reloaded' => 'Modèle rechargé.',\n    'deleted' => 'Modèle supprimé.',\n    'no_list_records' => 'Aucun enregistrement trouvé',\n    'delete_confirm' => 'Supprimer les modèles sélectionnés ?',\n    'order_by' => 'Trier par',\n    'last_modified' => 'Modifié le',\n    'storage' => 'Emplacement',\n    'template_file' => 'Nom du fichier',\n    'storage_filesystem' => 'Fichier système',\n    'storage_database' => 'Base de données',\n    'update_file' => 'Mettre à jour le fichier du modèle',\n    'reset_from_file' => 'Réinitialiser à partir du fichier',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Gérer le contenu du site web',\n    'manage_assets' => 'Gérer les assets site web - images, fichiers JavaScript et CSS',\n    'manage_pages' => 'Créer, modifier et supprimer des pages du site web',\n    'manage_layouts' => 'Créer, modifier et supprimer des maquettes du CMS',\n    'manage_partials' => 'Créer, modifier et supprimer des modèles partiels du CMS',\n    'manage_themes' => 'Activer, désactiver et configurer les thèmes',\n    'manage_theme_options' => 'Gérer les options de personnalisation du thème actif',\n  ],\n  'theme_log' => [\n    'hint' => 'Ce journal affiche tous les changements faits sur le thème actif par les administrateurs via le panneau d’administration.',\n    'menu_label' => 'Journal du thème',\n    'menu_description' => 'Affiche la liste des modifications apportées au thème actif.',\n    'empty_link' => 'Purger le journal du thème',\n    'empty_loading' => 'Purge du journal du thème...',\n    'empty_success' => 'Journal du thème purgé avec succès',\n    'return_link' => 'Retourner au journal du thème',\n    'id' => 'ID',\n    'id_label' => 'ID du journal',\n    'created_at' => 'Date & Heure',\n    'user' => 'Utilisateur',\n    'type' => 'Type',\n    'type_create' => 'Créer',\n    'type_update' => 'Modifier',\n    'type_delete' => 'Supprimer',\n    'theme_name' => 'Thème',\n    'theme_code' => 'Code du thème',\n    'old_template' => 'Modèle (Ancien)',\n    'new_template' => 'Modèle (Nouveau)',\n    'template' => 'Modèle',\n    'diff' => 'Changements',\n    'old_value' => 'Ancienne valeur',\n    'new_value' => 'Nouvelle valeur',\n    'preview_title' => 'Changement du modèle',\n    'template_updated' => 'Le modèle a été modifié',\n    'template_created' => 'Le modèle a été créé',\n    'template_deleted' => 'Le modèle a été supprimé',\n  ],\n  'intellisense' => [\n    'learn_more' => 'En savoir plus',\n    'docs' => [\n      'partial' => 'Affiche le contenu d’un partiel CMS.',\n      'ajaxpartial' => 'Affiche le contenu d’un partiel CMS avec prise en charge AJAX.',\n      'page' => 'Affiche le contenu d’une page CMS dans une maquette.',\n      'content' => 'Affiche un bloc de contenu CMS.',\n      'component' => 'Affiche le markup par défaut d’un composant CMS.',\n      'placeholder' => 'Affiche une section placeholder.',\n      'scripts' => 'Insère des références vers les scripts injectés par l’application.',\n      'styles' => 'Affiche les liens CSS vers les feuilles de style injectées par l’application.',\n      'meta' => 'Affiche les balises meta injectées par l’application.',\n      'flash' => 'Affiche les messages flash stockés en session.',\n      'verbatim' => 'Marque une section comme texte brut à ne pas interpréter.',\n      'macro' => 'Permet de définir des fonctions personnalisées dans un modèle.',\n      'for' => 'Boucle sur chaque élément d’une collection.',\n      'if' => 'Permet d’afficher conditionnellement du contenu.',\n      'abs_filter' => 'Le filtre `abs` retourne la valeur absolue.',\n      'batch_filter' => 'Le filtre `batch` regroupe des éléments en listes contenant le nombre d’éléments donné. Un second paramètre peut remplir les éléments manquants.',\n      'capitalize_filter' => 'Le filtre `capitalize` met la première lettre en majuscule et les autres en minuscule.',\n      'column_filter' => 'Le filtre `column` retourne les valeurs d’une colonne du tableau d’entrée.',\n      'convert_encoding_filter' => 'Le filtre `convert_encoding` convertit une chaîne d’un encodage à un autre.',\n      'country_name_filter' => 'Le filtre `country_name` retourne le nom d’un pays selon son code ISO-3166 à deux lettres.',\n      'currency_name_filter' => 'Le filtre `currency_name` retourne le nom d’une devise selon son code à trois lettres.',\n      'currency_symbol_filter' => 'Le filtre `currency_symbol` retourne le symbole d’une devise selon son code à trois lettres.',\n      'data_uri_filter' => 'Le filtre `data_uri` génère une URL utilisant le schéma data défini dans la RFC 2397.',\n      'date_filter' => 'Le filtre `date` formate une date selon un format donné.',\n      'date_modify_filter' => 'Le filtre `date_modify` modifie une date avec une chaîne de modification.',\n      'default_filter' => 'Le filtre `default` retourne une valeur par défaut si la variable est vide ou indéfinie.',\n      'escape_filter' => 'Le filtre `escape` échappe une chaîne selon le contexte.',\n      'filter_filter' => 'Le filtre `filter` filtre les éléments d’une séquence ou d’un tableau associatif avec une fonction fléchée.',\n      'first_filter' => 'Le filtre `first` retourne le premier élément d’une séquence, d’un tableau associatif ou d’une chaîne.',\n      'format_filter' => 'Le filtre `format` formate une chaîne en remplaçant des marqueurs (notation `sprintf`).',\n      'format_currency_filter' => 'Le filtre `format_currency` formate un nombre en devise.',\n      'join_filter' => 'Le filtre `join` concatène les éléments d’une séquence en une chaîne.',\n      'json_encode_filter' => 'Le filtre `json_encode` retourne la représentation JSON d’une valeur.',\n      'keys_filter' => 'Le filtre `keys` retourne les clés d’un tableau.',\n      'last_filter' => 'Le filtre `last` retourne le dernier élément d’une séquence, d’un tableau associatif ou d’une chaîne.',\n      'length_filter' => 'Le filtre `length` retourne le nombre d’éléments ou la longueur d’une chaîne.',\n      'lower_filter' => 'Le filtre `lower` convertit une valeur en minuscules.',\n      'map_filter' => 'Le filtre `map` applique une fonction fléchée aux éléments d’une séquence ou d’un tableau associatif.',\n      'merge_filter' => 'Le filtre `merge` fusionne deux tableaux.',\n      'nl2br_filter' => 'Le filtre `nl2br` insère des sauts de ligne HTML avant les retours à la ligne.',\n      'number_format_filter' => 'Le filtre `number_format` formate un nombre (enrobage de la fonction PHP `number_format`).',\n      'reduce_filter' => 'Le filtre `reduce` réduit une séquence ou un tableau associatif à une seule valeur.',\n      'replace_filter' => 'Le filtre `replace` remplace des marqueurs dans une chaîne.',\n      'reverse_filter' => 'Le filtre `reverse` inverse une séquence, un tableau associatif ou une chaîne.',\n      'round_filter' => 'Le filtre `round` arrondit un nombre.',\n      'slice_filter' => 'Le filtre `slice` extrait une portion d’une séquence, d’un tableau associatif ou d’une chaîne.',\n      'sort_filter' => 'Le filtre `sort` trie un tableau.',\n      'spaceless_filter' => 'Le filtre `spaceless` supprime les espaces entre les balises HTML.',\n      'split_filter' => 'Le filtre `split` découpe une chaîne selon un délimiteur.',\n      'striptags_filter' => 'Le filtre `striptags` retire les balises SGML/XML et réduit les espaces adjacents.',\n      'title_filter' => 'Le filtre `title` met chaque mot en capitale initiale.',\n      'trim_filter' => 'Le filtre `trim` retire les espaces en début et fin de chaîne.',\n      'upper_filter' => 'Le filtre `upper` convertit une valeur en majuscules.',\n      'url_encode_filter' => 'Le filtre `url_encode` encode une chaîne pour une URL ou un tableau en query string.',\n      'page_filter' => 'Le filtre `page` crée un lien vers une page CMS à partir de son nom (sans extension).',\n      'theme_filter' => 'Le filtre `theme` retourne un chemin relatif au thème actif.',\n      'app_filter' => 'Le filtre `app` retourne un chemin relatif au dossier public.',\n      'media_filter' => 'Le filtre `media` retourne un chemin relatif à la médiathèque.',\n      'md_filter' => 'Le filtre `md` convertit du Markdown en HTML.',\n      'raw_filter' => 'Le filtre `raw` marque une valeur comme non échappée.',\n      'content_filter' => 'Le filtre `content` convertit les liens et snippets présents dans une chaîne.',\n      'link_filter' => 'Le filtre `link` convertit un lien trouvé dans la chaîne.',\n    ],\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/fr.json",
    "content": "{\n  \"Themes\": \"Thèmes\",\n  \"Manage Themes\": \"Gérer les thèmes\",\n  \"Customize Theme\": \"Personnaliser le thème\",\n  \"Manage Maintenance Mode\": \"Gérer le mode maintenance\",\n  \"View Website During Maintenance\": \"Afficher le site Web pendant la maintenance\",\n  \"Manage Content\": \"Gérer le contenu\",\n  \"Manage Asset Files\": \"Gérer les fichiers d'actifs\",\n  \"Manage Pages\": \"Gérer les pages\",\n  \"Manage Layouts\": \"Gérer les mises en page\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configurer la page de maintenance et ajuster ses options.\",\n  \"Maintenance Mode\": \"Maintenance\",\n  \"Select the page to show when maintenance mode is activated.\": \"Si activé, la page choisie ci-dessous sera affichée pour les visiteurs du site Web.\",\n  \"Enable maintenance mode\": \"Activer la maintenance\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Le mode maintenance affichera la page de maintenance pour les visiteurs qui ne sont pas authentifiés dans l’interface d’administration.\",\n  \"Resources\": \"Ressources\",\n  \"Reference assets and variables included on this page.\": \"Actifs et variables de référence inclus sur cette page.\",\n  \"JavaScript\": \"Javascript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Fichier(s) JavaScript dans le dossier assets/js\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"Fichier(s) LESS dans le dossier assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Fichier(s) SCSS dans le dossier assets/scss\",\n  \"Variables\": \"Variables\",\n  \"Page variables name(s) and value(s)\": \"Nom(s) et valeur(s) des variables de page\",\n  \"Headers\": \"En-têtes\",\n  \"Page header name(s) and value(s)\": \"Nom(s) et valeur(s) d'en-tête de page\",\n  \"Site Picker\": \"Sélecteur de site\",\n  \"Displays links for selecting a different site.\": \"Affiche des liens pour sélectionner un autre site.\",\n  \"Unknown component\": \"Composant inconnu\",\n  \"View Bag\": \"Voir le sac\",\n  \"Stores custom template properties.\": \"Stocke les propriétés du modèle personnalisé.\",\n  \"By :name\": \"Par :name\",\n  \"The theme ':name' is not found.\": \"Le thème \\\":name\\\" n’a pas été trouvé.\",\n  \"Manage the front-end theme and customization options.\": \"Aperçu des thèmes installés et sélection du thème actif.\",\n  \"Site Theme\": \"Thème frontal\",\n  \"Properties\": \"Propriétés\",\n  \"Publish\": \"Publier\",\n  \"Advanced\": \"Avancé\",\n  \"Name\": \"Nom\",\n  \"New theme name\": \"Nom du nouveau thème\",\n  \"Author Name\": \"Nom de l'Auteur\",\n  \"Person or company name\": \"Nom de la personne ou de la société\",\n  \"Directory Name\": \"Nom du répertoire\",\n  \"The destination theme directory\": \"Le répertoire de destination du thème\",\n  \"Description\": \"Description\",\n  \"Theme description\": \"Description du thème\",\n  \"Homepage\": \"Page d’accueil\",\n  \"Website URL\": \"Adresse URL du site Web\",\n  \"Author Code\": \"Code de l’auteur\",\n  \"A unique code for the author used for distribution\": \"Un nom de code unique pour cet auteur\",\n  \"Theme Code\": \"Code du thème\",\n  \"A unique code for this theme used for distribution\": \"Un nom de code unique pour la distribution de ce thème\",\n  \"Parent Theme\": \"Thème parent\",\n  \"Database Mode\": \"Mode base de données\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Enregistrer les changements de ce thème dans la base de données plutôt que dans le système de fichiers\",\n  \"-- no parent --\": \"-- aucun parent --\",\n  \"Theme\": \"Thème\",\n  \"Folders\": \"Répertoires\",\n  \"Please select the theme folders you would like to export\": \"Sélectionner les répertoires du thème à exporter\",\n  \"Theme archive file\": \"Fichier archive du thème\",\n  \"Overwrite existing files\": \"Écraser les fichiers existants\",\n  \"Untick this box to only import new files\": \"Décocher cette case pour importer uniquement les nouveaux fichiers\",\n  \"Please select the theme folders you would like to import\": \"Sélectionner les répertoires du thème à importer\",\n  \"Activate\": \"Activer\",\n  \"Customize\": \"Personnaliser\",\n  \"Duplicate\": \"Dupliquer\",\n  \"Duplicate Theme\": \"Dupliquer le thème\",\n  \"Theme Duplicated!\": \"Duplication réalisée avec succès !\",\n  \"Manage\": \"Gérer\",\n  \"Manage Theme\": \"Gérer le thème\",\n  \"Edit Properties\": \"Modifier les propriétés\",\n  \"Save Properties\": \"Enregistrer les propriétés\",\n  \"Import\": \"Importer\",\n  \"Import Theme\": \"Importer le thème\",\n  \"Theme Imported!\": \"Thème importé avec succès !\",\n  \"Export\": \"Exporter\",\n  \"Export Theme\": \"Exporter le thème\",\n  \"Delete\": \"Supprimer\",\n  \"Delete this theme? It cannot be undone!\": \"Confirmer la suppression de ce thème ? Cette action est irréversible !\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Impossible de supprimer le thème actif, merci d’activer un autre thème au préalable.\",\n  \"Theme deleted!\": \"Thème supprimé avec succès !\",\n  \"Create Theme\": \"Créer un thème\",\n  \"Create\": \"Créer\",\n  \"Create a New Blank Theme\": \"Créer un nouveau thème vierge\",\n  \"Theme Created!\": \"Thème créé avec succès !\",\n  \"Please specify a name for the theme.\": \"Saisir un nom pour ce thème.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Le nom doit contenir uniquement des chiffres, des symboles latins et les symboles suivants : _-\",\n  \"Desired theme directory already exists.\": \"Le nom du répertoire indiqué existe déjà.\",\n  \"Theme directory\": \"Répertoire du thème\",\n  \"Provide a new directory name for the duplicated theme.\": \"Indiquer un nouveau nom de répertoire pour le thème en dupliqué.\",\n  \"Find More Themes\": \"Trouver davantage de thèmes sur le site du CMS October.\",\n  \"Saving Theme...\": \"Enregistrement du thème en cours…\",\n  \"Return to Themes List\": \"Retourner à la liste des thèmes\",\n  \"No themes found\": \"Aucun thème trouvé\",\n  \"Seed Theme\": \"Seed\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seeder le thème spécifié avec des Blueprints, des traductions, et des données.\",\n  \"Theme Seeded!\": \"Thème Seedé!\",\n  \"Select Page Link\": \"Sélectionner le lien de la page\",\n  \"Search all references...\": \"Chercher toutes les références...\",\n  \"CMS Page\": \"Page CMS\",\n  \"Link\": \"Lien\",\n  \"Please select a CMS page\": \"Veuillez sélectionner une page CMS\",\n  \"Please select a page reference\": \"Veuillez sélectionner une référence de page\",\n  \"Please enter a valid URL\": \"Veuillez saisir une URL valide\",\n  \"Delete Theme\": \"Supprimer le thème\",\n  \"Activate Theme\": \"Activer le thème\",\n  \"Manage Partials\": \"Gérer les models partiels\",\n  \"No Title\": \"Aucun titre\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Nom unique fourni lors de l’utilisation du composant sur une page ou une maquette.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Les alias du composant sont requis et doivent contenir uniquement des symboles latins, des chiffres et des tirets bas. Les alias doivent commencer par un symbole latin.\",\n  \"Unnamed\": \"Sans nom\",\n  \"No description provided\": \"Aucune description n’a été fournie\",\n  \"No snippets found\": \"Aucun fragment trouvé\",\n  \"Search...\": \"Rechercher...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Le fragment demandé avec le code :code n’a pas été trouvé dans le thème.\",\n  \"Snippet\": \"Fragment\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Entrez un code pour rendre ce contenu partiel disponible en tant que fragment dans le plugin des Pages Statiques.\",\n  \"Please enter the snippet code\": \"Merci d'entrer un code de Snippet\",\n  \"Snippet Code\": \"Code du fragment\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Le nom est affiché dans la liste des fragments dans le menu latéral des Pages Statiques et dans une Page lorsque qu’un fragment y est ajouté.\",\n  \"Please enter the snippet name\": \"Merci d'entrer un nom de Snippet\",\n  \"Property Title\": \"Nom de la propriété\",\n  \"Please provide the property title\": \"Merci de fournir un titre pour la propriété\",\n  \"Code\": \"Code\",\n  \"Please provide the property name\": \"Merci de fournir un nom pour la propriété\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Le code de la propriété devrait commencer par une lettre et ne peut contenir que des lettres et des chiffres\",\n  \"Type\": \"Type\",\n  \"Select\": \"Sélectionner\",\n  \"String\": \"Chaîne de caractères\",\n  \"Checkbox\": \"Case à cocher\",\n  \"Dropdown\": \"Menu déroulant\",\n  \"Please select the property type\": \"Veuillez sélectionner le type de la propriété\",\n  \"Default\": \"Valeur par défaut\",\n  \"Options\": \"Options\",\n  \"Define a Snippet Partial\": \"Définir un partial de snippet\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Clé de l’option : :key de la liste déroulante invalide. Les clés d'options ne peuvent contenir que des chiffres, des lettres et les symboles _ et -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"La description est affichée dans la liste des Snippets de l'éditeur quand un Snippet est ajouté.\",\n  \"Details\": \"Détails\",\n  \"City\": \"Ville\",\n  \"Country\": \"Pays\",\n  \"Page Path\": \"Chemin de la page\",\n  \"Referral Domain\": \"Domaine référent\",\n  \"Pageviews\": \"Pages vues\",\n  \"Unique Visitors\": \"Visiteurs uniques\",\n  \"Traffic Information\": \"Informations de trafic\",\n  \"Website Status\": \"Statut du site Web\",\n  \"Website status information\": \"Informations sur le statut du site Web\",\n  \"Manage status\": \"Gérer le statut\",\n  \"Maintenance\": \"Maintenance\",\n  \"Online\": \"En ligne\",\n  \"Frontend Theme\": \"Thème frontal\"\n}"
  },
  {
    "path": "modules/cms/lang/hu/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Érvénytelen fájlnév. Csak latin betűket, számokat, aláhúzásokat, kötőjeleket és pontokat tartalmazhat. Néhány példa a megfelelő fájlnévre: kapcsolat.htm, impresszum, konyvtar/oldalnev',\n    'invalid_file_inspector' => 'Érvénytelen fáljnév. A fájlnevek csak alfanumerikus szimbólumokat, aláhúzásokat, kötőjeleket és pontokat tartalmazhatnak. Néhány példa a helyes fájlnevekre: oldal.htm, oldal, konyvtar/oldal',\n    'invalid_property' => 'A(z) \\':name\\' tulajdonság nem állítható be.',\n    'file_already_exists' => 'Már létezik \\':name\\' nevű fájl.',\n    'error_saving' => 'Hiba a(z) \\':name\\' fájl mentésekor. Ellenőrizze az írási engedélyeket.',\n    'error_creating_directory' => 'Hiba a(z) :name könyvtár létrehozásakor. Ellenőrizze az írási engedélyeket.',\n    'invalid_file_extension' => 'Érvénytelen kiterjesztés: :invalid. Engedélyezett kiterjesztések: :allowed.',\n    'error_deleting' => 'Hiba a(z) \\':name\\' sablonfájl törlésekor. Ellenőrizze az írási engedélyeket.',\n    'delete_success' => 'A sablonok törlése sikerült: :count.',\n    'file_name_required' => 'A fájlnév mező kitöltése kötelező.',\n    'safe_mode_enabled' => 'A biztonságos mód jelenleg aktív.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Weboldal',\n      'online' => 'Online',\n      'maintenance' => 'Karbantartás alatt',\n      'manage_themes' => 'Témák kezelése',\n      'customize_theme' => 'Téma testreszabása',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Nincs beállítva az aktív téma.',\n      'not_found' => 'Az aktív téma nem található.',\n      'is_locked' => 'A(z) \\':theme\\' téma zárolva van, és nem használható. Kérjük, másolja ezt a témát, vagy hozzon létre gyermek témát.',\n    ],\n    'edit' => [\n      'not_set' => 'Nincs beállítva a szerkesztés alatt lévő téma.',\n      'not_found' => 'A szerkesztés alatt lévő téma nem található.',\n      'not_match' => 'Az objektum melyhez hozzáférni próbál, nem a szerkesztés alatt lévő témához tartozik. Töltse be újra az oldalt.',\n    ],\n    'setting_edit_theme' => 'Változtatások a szerkesztett témában',\n    'edit_theme_changed' => 'Téma változtatások módosítása',\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'A következő oldal nem található: \\':name\\'',\n    'not_found' => [\n      'label' => 'Az oldal nem található',\n      'help' => 'A kért oldal nem található.',\n    ],\n    'custom_error' => [\n      'label' => 'Oldal hiba',\n      'help' => 'Sajnos valami elromlott, ezért az oldal nem jeleníthető meg.',\n    ],\n    'menu_label' => 'Oldalak',\n    'unsaved_label' => 'Nem mentett oldal(ok)',\n    'no_list_records' => 'Nincs találat',\n    'new' => 'Új oldal',\n    'invalid_url' => 'Érvénytelen a formátum. A webcímnek perjellel kell kezdődnie, és számokat, latin betűket, valamint a következő karaktereket tartalmazhatja: ._-[]:?|/+*',\n    'delete_confirm_multiple' => 'Valóban törölni akarja a kijelölt oldalakat?',\n    'delete_confirm_single' => 'Valóban törölni akarja ezt az oldalt?',\n    'no_layout' => '-- nincs --',\n    'title' => 'Elnevezés szerint',\n    'url' => 'Webcím szerint',\n    'url_required' => 'A webcím megadása kötelező.',\n    'file_name' => 'Fájlnév szerint',\n    'editor_node_name' => 'Oldalak',\n    'editor_sorting' => 'Oldalak rendezése',\n    'editor_sort_by_url' => 'Webcím',\n    'editor_sort_by_title' => 'Cím',\n    'editor_sort_by_file_name' => 'Fájlnév',\n    'editor_grouping' => 'Könyvtárak',\n    'editor_group_by_filepath' => 'Fájl elérése',\n    'editor_group_by_url' => 'Webcím',\n    'editor_display' => 'Megjelenés',\n    'editor_display_title' => 'Cím',\n    'editor_display_url' => 'Webcím',\n    'editor_display_file' => 'Fájl elérése',\n    'editor_markup' => 'Struktúra',\n    'editor_code' => 'Kód',\n    'description_hint' => 'A leírás nem kötelező, és csak az admin felületen lesz látható.',\n    'create_new' => 'Új oldal',\n  ],\n  'layout' => [\n    'not_found_name' => 'A(z) \\':name\\' elrendezés nem található',\n    'menu_label' => 'Elrendezések',\n    'unsaved_label' => 'Nem mentett elrendezés(ek)',\n    'no_list_records' => 'Nincs találat',\n    'new' => 'Új elrendezés',\n    'delete_confirm_multiple' => 'Valóban törölni akarja a kijelölt elrendezéseket?',\n    'delete_confirm_single' => 'Valóban törölni akarja ezt az elrendezést?',\n    'editor_node_name' => 'Elrendezések',\n    'create_new' => 'Új elrendezés',\n  ],\n  'partial' => [\n    'not_found_name' => 'A(z) \\':name\\' részlap nem található.',\n    'invalid_name' => 'Érvénytelen részlapnév: :name.',\n    'menu_label' => 'Részlapok',\n    'unsaved_label' => 'Nem mentett részlap(ok)',\n    'no_list_records' => 'Nincs találat',\n    'delete_confirm_multiple' => 'Valóban törölni akarja a kijelölt részlapokat?',\n    'delete_confirm_single' => 'Valóban törölni akarja ezt a részlapot?',\n    'editor_node_name' => 'Részlapok',\n    'new' => 'Új részlap',\n    'create_new' => 'Új részlap',\n  ],\n  'content' => [\n    'not_found_name' => 'A(z) \\':name\\' tartalom nem található.',\n    'menu_label' => 'Tartalom',\n    'unsaved_label' => 'Nem mentett tartalom',\n    'no_list_records' => 'Nincs találat',\n    'delete_confirm_multiple' => 'Valóban törölni akarja a kijelölt tartalmakat vagy könyvtárakat?',\n    'delete_confirm_single' => 'Valóban törölni akarja ezt a tartalmat?',\n    'editor_node_name' => 'Tartalmak',\n    'new' => 'Új tartalom',\n    'editor_content' => 'Tartalom',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Érvénytelen AJAX kezelő név: :name.',\n    'not_found' => 'A(z) \\':name\\' AJAX kezelő nem található.',\n  ],\n  'cms' => [\n    'menu_label' => 'Testreszabás',\n  ],\n  'sidebar' => [\n    'add' => 'Hozzáadás',\n    'search' => 'Keresés...',\n  ],\n  'editor' => [\n    'settings' => 'Beállítások',\n    'title' => 'Elnevezés',\n    'new_title' => 'Az új oldal címe',\n    'url' => 'Webcím',\n    'filename' => 'Fájlnév',\n    'layout' => 'Elrendezés',\n    'description' => 'Leírás',\n    'preview' => 'Előnézet',\n    'page' => 'Oldal',\n    'edit_theme' => 'Téma szerkesztése',\n    'change_edit_theme' => 'Szerkesztett téma módosítása',\n    'edit_theme_saved_changed_tabs' => 'Nem mentett módosítások vannak a nyitott lapokon. A folytatáshoz mentse el őket, vagy zárja be a lapokat.',\n    'partial' => 'Részlap',\n    'meta' => 'Továbbiak',\n    'meta_title' => 'Keresőbarát cím',\n    'meta_description' => 'Keresőbarát leírás',\n    'markup' => 'HTML',\n    'code' => 'PHP',\n    'content' => 'Tartalom',\n    'asset' => 'Fájl',\n    'hidden' => 'Rejtett',\n    'hidden_comment' => 'Csak a bejelentkezett felhasználók láthatják.',\n    'enter_fullscreen' => 'Váltás teljes képernyőre',\n    'exit_fullscreen' => 'Kilépés a teljes képernyőből',\n    'open_searchbox' => 'Keresési panel megnyitása',\n    'open_replacebox' => 'Cserepanel megnyitása',\n    'commit' => 'Végrehajtás',\n    'reset' => 'Visszaállítás',\n    'commit_confirm' => 'Biztos, hogy végrehajtja a fájl módosításait? Ez felülírja a meglévő fájlt.',\n    'reset_confirm' => 'Biztos, hogy vissza akarja állítani ezt a fájlt a másolatra? Ez teljesen lecseréli a meglévő fájlt.',\n    'committing' => 'Végrehajtás',\n    'resetting' => 'Visszaállítás',\n    'commit_success' => 'The :type has been committed to the filesystem',\n    'reset_success' => 'The :type has been reset to the filesystem version',\n    'error_loading_header' => 'Hiba a sablon betöltésekor',\n    'component_list' => 'Komponensek',\n    'component_list_description' => 'Hozzáadásához kattintson rá, vagy húzza át a szerkesztőbe.',\n    'info' => 'Információk',\n    'refresh' => 'Újratöltés',\n    'create' => 'Létrehozás',\n    'manage_themes' => 'Témák menedzselése',\n    'error_no_doctype_permissions' => 'Nincs jogosúltsága ehhez a dokumentum típus szerkesztéséhez: :doctype',\n  ],\n  'asset' => [\n    'menu_label' => 'Fájlok',\n    'unsaved_label' => 'Nem mentett fájl(ok)',\n    'drop_down_add_title' => 'Hozzáadás...',\n    'drop_down_operation_title' => 'Művelet...',\n    'upload_files' => 'Fájl(ok) feltöltése',\n    'create_file' => 'Fájl létrehozása',\n    'create_directory' => 'Könyvtár létrehozása',\n    'directory_popup_title' => 'Új könyvtár',\n    'directory_name' => 'Könyvtár neve',\n    'directory_name_required' => 'A könyvtár nevét kötelező megadni.',\n    'rename_name_required' => 'A név megadása kötelező.',\n    'rename' => 'Átnevezés',\n    'delete' => 'Törlés',\n    'move' => 'Áthelyezés',\n    'moving' => 'Kiválasztott elemek áthelyezése',\n    'moved' => 'Sikeres áthelyezés',\n    'saved' => 'Fájl mentve',\n    'deleted' => 'Fájl törölve',\n    'select' => 'Kijelölés',\n    'new' => 'Új fájl',\n    'rename_popup_title' => 'Átnevezés',\n    'rename_new_name' => 'Új név',\n    'invalid_path' => 'Az elérési út neve csak számokat, latin betűket, szóközöket és a következő szimbólumokat tartalmazhatja: ._-/',\n    'error_deleting_file' => 'Hiba a(z) :name fájl törlésekor.',\n    'error_deleting_dir_not_empty' => 'Hiba a(z) :name könyvtár törlésekor. A könyvtár nem üres.',\n    'error_deleting_dir' => 'Hiba a(z) :name fájl törlésekor.',\n    'invalid_name' => 'A név csak számokat, latin betűket, szóközöket és a következő szimbólumokat tartalmazhatja: ._-',\n    'original_not_found' => 'Nem található az eredeti fájl vagy könyvtár.',\n    'already_exists' => 'Már létezik ilyen nevű fájl vagy könyvtár.',\n    'error_renaming' => 'Hiba a fájl vagy a könyvtár átnevezésekor.',\n    'name_cant_be_empty' => 'A név nem lehet üres.',\n    'too_large' => 'A feltöltött fájl túl nagy. A maximálisan engedélyezett fájlméret: :max_size',\n    'type_not_allowed' => 'Csak a következő fájltípusok engedélyezettek: :allowed_types',\n    'file_not_valid' => 'A fájl nem érvényes.',\n    'error_uploading_file' => 'Hiba a(z) \\':name\\' fájl feltöltésekor: :error',\n    'move_please_select' => 'válasszon',\n    'move_destination' => 'Célkönyvtár',\n    'move_popup_title' => 'Fájl(ok) áthelyezése',\n    'move_button' => 'Áthelyezés',\n    'selected_files_not_found' => 'A kijelölt fájlok nem találhatók.',\n    'select_destination_dir' => 'Válasszon egy célkönyvtárat.',\n    'destination_not_found' => 'A célkönyvtár nem található.',\n    'error_moving_file' => 'Hiba a(z) :file fájl áthelyezésekor.',\n    'error_moving_directory' => 'Hiba a(z) :dir könyvtár áthelyezésekor.',\n    'error_deleting_directory' => 'Hiba a(z) :dir eredeti könyvtár áthelyezésekor.',\n    'no_list_records' => 'Nincs találat',\n    'delete_confirm' => 'Valóban törölni akarja a fájlokat és a könyvtárakat?',\n    'delete_confirm_single' => 'Valóban törölni akarja a fájlt és a könyvtárat?',\n    'path' => 'Elérési út',\n    'editor_node_name' => 'Fájlok',\n    'open' => 'Megnyitás',\n  ],\n  'component' => [\n    'menu_label' => 'Komponensek',\n    'invalid_request' => 'A sablon érvénytelen komponens adatok miatt nem menthető.',\n    'no_records' => 'Nem találhatók komponensek',\n    'not_found' => 'A(z) \\':name\\' komponens nem található.',\n    'no_default_partial' => 'Ennek a komponensek nincs alapértelmezett részlapja.',\n    'method_not_found' => 'A(z) \\':name\\' komponens nem tartalmaz a(z) \\':method\\' metódust.',\n    'soft_component' => 'Opcionális komponens',\n    'soft_component_description' => 'Ez a komponens hiányzik, viszont nem kötelező.',\n  ],\n  'template' => [\n    'invalid_type' => 'Ismeretlen sablon típus.',\n    'not_found' => 'A kért sablon nem található.',\n    'saved' => 'A módosítások sikeresen mentésre kerültek.',\n    'saved_to_db' => 'A sablon mentésre került adatbázisba',\n    'file_updated' => 'Sablon fájl módosítva',\n    'reset_from_template_success' => 'Template was reset from file',\n    'reloaded' => 'Sablon fájl újratöltve',\n    'deleted' => 'Sablon fájl törölve',\n    'no_list_records' => 'Nincs találat',\n    'delete_confirm' => 'Valóban törölni akarja a sablont?',\n    'order_by' => 'Rendezés',\n    'last_modified' => 'Módosítva',\n    'storage' => 'Tárolás',\n    'template_file' => 'Fájlnév',\n    'storage_filesystem' => 'Fájlrendszer',\n    'storage_database' => 'adatbázis',\n    'update_file' => 'Sablon fájl frissítve',\n    'reset_from_file' => 'Visszaállítás a sablon fájlból',\n  ],\n  'permissions' => [\n    'name' => 'Testreszabás',\n    'manage_content' => 'Tartalom kezelése',\n    'manage_assets' => 'Fájlok kezelése',\n    'manage_pages' => 'Oldalak kezelése',\n    'manage_layouts' => 'Elrendezések kezelése',\n    'manage_partials' => 'Részlapok kezelése',\n    'manage_themes' => 'Témák kezelése',\n    'manage_theme_options' => 'Aktív téma testreszabása',\n  ],\n  'theme_log' => [\n    'hint' => 'Az adminok által elvégzett módosítások az aktív téma fájlaiban, amiket az admin felületen keresztül hajtottak végre.',\n    'menu_label' => 'Téma napló',\n    'menu_description' => 'Változtatások listája az aktív témánál.',\n    'empty_link' => 'Kiürítés',\n    'empty_loading' => 'A kiürítés folyamatban...',\n    'empty_success' => 'A téma napló kiürítése megtörtént.',\n    'return_link' => 'Vissza a téma naplóhoz',\n    'id' => 'ID',\n    'id_label' => 'Napló ID',\n    'created_at' => 'Dátum',\n    'user' => 'Felhasználó',\n    'type' => 'Művelet',\n    'type_create' => 'Létrehozás',\n    'type_update' => 'Módosítás',\n    'type_delete' => 'Törlés',\n    'theme_name' => 'Téma',\n    'theme_code' => 'Kódnév',\n    'old_template' => 'Fájl (régi)',\n    'new_template' => 'Fájl (új)',\n    'template' => 'Fájl',\n    'diff' => 'Változtatások',\n    'old_value' => 'Régi tartalom',\n    'new_value' => 'Új tartalom',\n    'preview_title' => 'Változtatások',\n    'template_updated' => 'A fájl frissítve lett.',\n    'template_created' => 'A fájl létre lett hozva.',\n    'template_deleted' => 'A fájl törölve lett.',\n  ],\n  'intellisense' => [\n    'learn_more' => 'Tudjon meg többet',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/hu.json",
    "content": "{\n  \"Themes\": \"Témák\",\n  \"Manage Themes\": \"Témák kezelése\",\n  \"Customize Theme\": \"Téma testreszabása\",\n  \"Manage Maintenance Mode\": \"Karbantartási mód kezelése\",\n  \"View Website During Maintenance\": \"Webhely megtekintése a karbantartás során\",\n  \"Manage Content\": \"Tartalom kezelése\",\n  \"Manage Asset Files\": \"Eszközfájlok kezelése\",\n  \"Manage Pages\": \"Oldalak kezelése\",\n  \"Manage Layouts\": \"Elrendezések kezelése\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"A weboldal ideiglenes felfüggesztése a látogatók számára.\",\n  \"Maintenance Mode\": \"Karbantartás\",\n  \"Select the page to show when maintenance mode is activated.\": \"Aktiválása esetén a weboldal látogatói csak a kiválasztott oldalt fogják látni.\",\n  \"Enable maintenance mode\": \"Karbantartás engedélyezése\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Karbantartás módban a lentebb megadott oldal fog megjelenni azon látogatók számára, akik nincsenek bejelentkezve az admin felületre.\",\n  \"Resources\": \"Erőforrások\",\n  \"Reference assets and variables included on this page.\": \"Az ezen az oldalon található referenciaeszközök és változók.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript-fájl(ok) az eszközök/js mappában\",\n  \"LESS\": \"KEVÉSBÉ\",\n  \"LESS file(s) in the assets/less folder\": \"KEVESEBB fájl(ok) az eszközök/kevesebb mappában\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS-fájl(ok) az eszközök/scss mappában\",\n  \"Variables\": \"Változók\",\n  \"Page variables name(s) and value(s)\": \"Oldalváltozók neve(i) és értéke(i)\",\n  \"Headers\": \"Fejlécek\",\n  \"Page header name(s) and value(s)\": \"Oldalfejléc neve(i) és értéke(i)\",\n  \"Site Picker\": \"Webhelyválasztó\",\n  \"Displays links for selecting a different site.\": \"Linkeket jelenít meg egy másik webhely kiválasztásához.\",\n  \"Unknown component\": \"Ismeretlen komponens\",\n  \"View Bag\": \"Táska megtekintése\",\n  \"Stores custom template properties.\": \"Egyéni sablontulajdonságokat tárol.\",\n  \"By :name\": \"Fejlesztő: :name\",\n  \"The theme ':name' is not found.\": \"A következő téma nem található: ':name'\",\n  \"Manage the front-end theme and customization options.\": \"A telepített témák listája és azok testreszabása.\",\n  \"Site Theme\": \"Megjelenés\",\n  \"Properties\": \"Tulajdonságok\",\n  \"Publish\": \"Közzétenni\",\n  \"Advanced\": \"Részletes\",\n  \"Name\": \"Név\",\n  \"New theme name\": \"Az új téma neve\",\n  \"Author Name\": \"Szerző\",\n  \"Person or company name\": \"Magánszemély vagy cég neve\",\n  \"Directory Name\": \"Könyvtár\",\n  \"The destination theme directory\": \"A célkönyvtár\",\n  \"Description\": \"Leírás\",\n  \"Theme description\": \"A téma ismertetője\",\n  \"Homepage\": \"Weboldal\",\n  \"Website URL\": \"A honlap webcíme\",\n  \"Author Code\": \"Szerző kódja\",\n  \"A unique code for the author used for distribution\": \"A terjesztéshez használt egyedi kód a szerző számára\",\n  \"Theme Code\": \"Kód\",\n  \"A unique code for this theme used for distribution\": \"Egyedi azonosító ehhez a témához\",\n  \"Parent Theme\": \"Altéma\",\n  \"Database Mode\": \"A változtatások adatbázisba mentődnek\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"A téma módosításainak tárolása az adatbázisba\",\n  \"-- no parent --\": \"-- nincs --\",\n  \"Theme\": \"Téma\",\n  \"Folders\": \"Könyvtárak\",\n  \"Please select the theme folders you would like to export\": \"Válassza ki azokat a könyvtárakat, amiket exportálni szeretne.\",\n  \"Theme archive file\": \"Téma archív fájl\",\n  \"Overwrite existing files\": \"Létező fájlok felülírása\",\n  \"Untick this box to only import new files\": \"Ne jelölje be ezt a négyzetet, ha csak új fájlokat akar importálni.\",\n  \"Please select the theme folders you would like to import\": \"Válassza ki azokat a könyvtárakat, amiket importálni szeretne.\",\n  \"Activate\": \"Aktiválva\",\n  \"Customize\": \"Testreszabás\",\n  \"Duplicate\": \"Duplikálás\",\n  \"Duplicate Theme\": \"Téma duplikálása\",\n  \"Theme Duplicated!\": \"A téma duplikálása sikeresen megtörtént!\",\n  \"Manage\": \"Műveletek\",\n  \"Manage Theme\": \"Téma menedzselése\",\n  \"Edit Properties\": \"Tulajdonságok\",\n  \"Save Properties\": \"Mentés\",\n  \"Import\": \"Importálás\",\n  \"Import Theme\": \"Téma importálása\",\n  \"Theme Imported!\": \"A téma importálása sikeresen megtörtént!\",\n  \"Export\": \"Exportálás\",\n  \"Export Theme\": \"Téma exportálása\",\n  \"Delete\": \"Törlés\",\n  \"Delete this theme? It cannot be undone!\": \"Valóban törölni akarja a témát?\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Nem lehet törölni a témát. Először tegyen aktívvá egy másik témát.\",\n  \"Theme deleted!\": \"A téma törlése sikeresen megtörtént!\",\n  \"Create Theme\": \"Sablon létrehozása\",\n  \"Create\": \"Létrehozás\",\n  \"Create a New Blank Theme\": \"Üres téma létrehozása\",\n  \"Theme Created!\": \"A téma létrehozása sikeresen megtörtént!\",\n  \"Please specify a name for the theme.\": \"Kérem adjon meg egy nevet a témának.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"A név csak számokat, latin betűket, aláhúzásokat és kötőjeleket tartalmazhat.\",\n  \"Desired theme directory already exists.\": \"A megadott könyvtár már létezik.\",\n  \"Theme directory\": \"Téma helye\",\n  \"Provide a new directory name for the duplicated theme.\": \"Adjon meg egy új könyvtárat a duplikált témának.\",\n  \"Find More Themes\": \"További témák az OctoberCMS piacterén\",\n  \"Saving Theme...\": \"Téma mentése...\",\n  \"Return to Themes List\": \"Vissza a témákhoz\",\n  \"No themes found\": \"Nem található téma\",\n  \"Seed Theme\": \"Téma tartalmi elemeinek feltöltése\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Téma felöltése tervrajzokkal, fordításokkal és adatokkal.\",\n  \"Theme Seeded!\": \"Téma tartalom feltöltve!\",\n  \"Select Page Link\": \"Oldal hivatkozás kiválasztása\",\n  \"Search all references...\": \"Minden hivatkozás keresése...\",\n  \"CMS Page\": \"Oldalak\",\n  \"Link\": \"Hivatkozás\",\n  \"Please select a CMS page\": \"Kérlek, válassz egy CMS oldalt\",\n  \"Please select a page reference\": \"Kérlek, válassz egy oldal hivatkozást\",\n  \"Please enter a valid URL\": \"Kérlek, adj meg egy érvényes URL címet\",\n  \"Delete Theme\": \"Téma törlése\",\n  \"Activate Theme\": \"Téma aktiválása\",\n  \"Manage Partials\": \"Részelemek kezelése\",\n  \"No Title\": \"Nincs cím\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Ennek a komponensnek az oldal vagy az elrendezés kódjában való használatkor adott egyedi név.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"A komponens aliasok kötelezőek, és csak latin betűket, számokat, valamint aláhúzásokat tartalmazhatnak. Az aliasoknak latin szimbólummal kell kezdődniük.\",\n  \"Unnamed\": \"Névtelen\",\n  \"No description provided\": \"Nincs megadott leírás\",\n  \"No snippets found\": \"Nincs létrehozva kódrészlet\",\n  \"Search...\": \"Keresés...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"A(z) :code nevű kódrészlet nem található a témában.\",\n  \"Snippet\": \"Kódrészlet\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Adja meg a kódot, hogy a jelenlegi részlap elérhető legyen kódrészletként a Oldalak bővítményben.\",\n  \"Please enter the snippet code\": \"Kérlek, adj meg egy kódrészletet\",\n  \"Snippet Code\": \"Kódrészlet kódja\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"A Kódrészletek listában jelenik meg a Oldalak oldalsó menüjében, valamint a Oldalak aloldalon.\",\n  \"Please enter the snippet name\": \"Kérlek, add meg a kódrészlet nevét\",\n  \"Property Title\": \"Cím\",\n  \"Please provide the property title\": \"Kérlek, add meg a beállítás címét\",\n  \"Code\": \"kód\",\n  \"Please provide the property name\": \"Kérlek, add meg a beállítás nevét\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"A kód latin karakterrel kezdődhet és csak latin karaktereket és számokat tartalmazhat.\",\n  \"Type\": \"Típus\",\n  \"Select\": \"Kiválaszt\",\n  \"String\": \"Szöveg\",\n  \"Checkbox\": \"Jelölőnégyzet\",\n  \"Dropdown\": \"Lenyíló lista\",\n  \"Please select the property type\": \"Válaszd ki a beállítás típusát\",\n  \"Default\": \"Alapértelmezett\",\n  \"Options\": \"Lehetőségek\",\n  \"Define a Snippet Partial\": \"Határozd meg egy kódrészlet részelemet\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Érvénytelen formátum: :key. Csak számokat, latin betűket és a következő szimbólumokat tartalmazhatja: _-\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"A leírás a létrehozást követően megjelenik a kódrészlet listában.\",\n  \"Details\": \"Részletek\",\n  \"Frontend Theme\": \"Megjelenés\"\n}"
  },
  {
    "path": "modules/cms/lang/id/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nama berkas: :name tidak valid. Nama berkas hanya dapat memuat angka, huruf, garis bawah, strip, dan titik. Contoh penamaan berkas yang benar: halaman.htm, halaman, subdirektori/halaman',\n    'invalid_property' => 'Properti \\':name\\' tidak dapat diatur',\n    'file_already_exists' => 'Berkas \\':name\\' sudah ada.',\n    'error_saving' => 'Eror menyimpan berkas \\':name\\'. Silakan periksa izin penulisan.',\n    'error_creating_directory' => 'Eror membuat direktori :name. Silakan periksa izin penulisan.',\n    'invalid_file_extension' => 'Ekstensi berkas: :invalid tidak valid. Ekstensi yang diperbolehkan: :allowed.',\n    'error_deleting' => 'Eror menghapus berkas templat \\':name\\'. Silakan periksa izin penulisan.',\n    'delete_success' => 'Templat: :count berhasil dihapus.',\n    'file_name_required' => 'Bidang isian nama berkas diperlukan.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'online' => 'nyala',\n      'maintenance' => 'dalam pemeliharaan',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Tema aktif tidak diatur.',\n      'not_found' => 'Tema aktif tidak ditemukan.',\n    ],\n    'edit' => [\n      'not_set' => 'Tema yang disunting tidak bisa diatur.',\n      'not_found' => 'Tema yang disunting tidak ditemukan.',\n      'not_match' => 'Objek yang Anda coba akses tidak dimiliki oleh tema yang akan diubah. Silakan muat ulang halaman.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found' => [\n      'label' => 'Halaman tidak ditemukan',\n      'help' => 'Halaman yang diminta tidak dapat ditemukan.',\n    ],\n    'custom_error' => [\n      'label' => 'Halaman Eror',\n      'help' => 'Mohon maaf, ada sesuatu yang salah dan halaman tidak dapat ditampilkan.',\n    ],\n    'menu_label' => 'Halaman',\n    'unsaved_label' => 'Halaman tak tersimpan',\n    'no_list_records' => 'Tidak ada halaman ditemukan',\n    'new' => 'Halaman baru',\n    'invalid_url' => 'Format URL tidak valid. URL harus diawali dengan garis miring terbalik dan memuat huruf latin, angka dan simbol-simbol ini: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Anda yakin akan menghapus halaman yang telah dipilih?',\n    'delete_confirm_single' => 'Anda yakin akan menghapus halaman ini?',\n    'no_layout' => '-- tanpa layout --',\n  ],\n  'layout' => [\n    'not_found' => 'Layout \\':name\\' tidak ditemukan',\n    'menu_label' => 'Layout',\n    'unsaved_label' => 'Layout tak tersimpan',\n    'no_list_records' => 'Tidak ada layout ditemukan',\n    'new' => 'Layout baru',\n    'delete_confirm_multiple' => 'Anda yakin akan menghapus layout yang telah dipilih?',\n    'delete_confirm_single' => 'Anda yakin akan menghapus layout ini?',\n  ],\n  'partial' => [\n    'invalid_name' => 'Nama Halaman parsial: :name tidak valid.',\n    'not_found' => 'Halaman parsial \\':name\\' tidak ditemukan.',\n    'menu_label' => 'Halaman parsial',\n    'unsaved_label' => 'Halaman parsial tak tersimpan',\n    'no_list_records' => 'Tidak ada halaman parsial ditemukan',\n    'delete_confirm_multiple' => 'Anda yakin akan menghapus halaman parsial yang telah dipilih?',\n    'delete_confirm_single' => 'Anda yakin akan menghapus halaman parsial ini?',\n    'new' => 'Halaman parsial baru',\n  ],\n  'content' => [\n    'not_found' => 'Konten \\':name\\' tidak ditemukan.',\n    'menu_label' => 'Konten',\n    'unsaved_label' => 'Konten tak tersimpan',\n    'no_list_records' => 'Tidak ada konten ditemukan',\n    'delete_confirm_multiple' => 'Anda yakin akan menghapus berkas atau direktori konten yang telah dipilih?',\n    'delete_confirm_single' => 'Anda yakin akan menghapus berkas konten ini?',\n    'new' => 'Konten baru',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Nama AJAX handler: :name tidak valid.',\n    'not_found' => 'AJAX handler \\':name\\' tidak ditemukan.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Tambah',\n    'search' => 'Pencarian...',\n  ],\n  'editor' => [\n    'settings' => 'Pengaturan',\n    'title' => 'Judul',\n    'new_title' => 'Judul halaman baru',\n    'url' => 'URL',\n    'filename' => 'Nama berkas',\n    'layout' => 'Layout',\n    'description' => 'Deskripsi',\n    'preview' => 'Preview',\n    'meta' => 'Meta',\n    'meta_title' => 'Judul Meta',\n    'meta_description' => 'Deskripsi Meta',\n    'markup' => 'Markup',\n    'code' => 'Kode',\n    'content' => 'Konten',\n    'hidden' => 'Tersembunyi',\n    'hidden_comment' => 'Halaman tersembunyi hanya dapat diakses oleh pengguna back-end yang telah login.',\n    'enter_fullscreen' => 'Masuk mode layar penuh',\n    'exit_fullscreen' => 'Keluar mode layar penuh',\n  ],\n  'asset' => [\n    'menu_label' => 'Aset',\n    'unsaved_label' => 'Aset tak tersimpan',\n    'drop_down_add_title' => 'Tambah...',\n    'drop_down_operation_title' => 'Aksi...',\n    'upload_files' => 'Unggah berkas',\n    'create_file' => 'Buat berkas',\n    'create_directory' => 'Buat direktori',\n    'directory_popup_title' => 'Direktori baru',\n    'directory_name' => 'Nama direktori',\n    'rename' => 'Ganti nama',\n    'delete' => 'Hapus',\n    'move' => 'Pindah',\n    'select' => 'Pilih',\n    'new' => 'Berkas baru',\n    'rename_popup_title' => 'Ganti nama',\n    'rename_new_name' => 'Nama baru',\n    'invalid_path' => 'Path hanya dapat memuat angka, huruf Latin, spasi dan simbol-simbol ini: ._-/',\n    'error_deleting_file' => 'Eror menghapus berkas :name.',\n    'error_deleting_dir_not_empty' => 'Eror menghapus direktori :name. Direktori tersebut berisi.',\n    'error_deleting_dir' => 'Eror menghapus berkas :name.',\n    'invalid_name' => 'Nama hanya dapat memuat angka, huruf Latin, spasi dan simbol-simbol ini: ._-',\n    'original_not_found' => 'Berkas atau direktori original tidak dapat ditemukan',\n    'already_exists' => 'Sudah ada berkas atau direktori dengan nama ini',\n    'error_renaming' => 'Eror ganti nama berkas atau direktori',\n    'name_cant_be_empty' => 'Nama tidak boleh kosong',\n    'too_large' => 'Ukuran berkas unggahan terlalu besar. Ukuran maksimal yang diperbolahkan adalah :max_size',\n    'type_not_allowed' => 'Hanya jenis-jenis berkas berikut yang diperbolahkan: :allowed_types',\n    'file_not_valid' => 'Berkas tidak valid',\n    'error_uploading_file' => 'Eror mengunggah berkas \\':name\\': :error',\n    'move_please_select' => 'silakan pilih',\n    'move_destination' => 'Destinasi direktori',\n    'move_popup_title' => 'Pindahkan aset',\n    'move_button' => 'Pindahkan',\n    'selected_files_not_found' => 'Berkas terpilih tidak ditemukan',\n    'select_destination_dir' => 'Silakan pilih direktori tujuan',\n    'destination_not_found' => 'Direktori tujuan tidak ditemukan',\n    'error_moving_file' => 'Eror memindahkan berkas :file',\n    'error_moving_directory' => 'Eror memindahkan direktori :dir',\n    'error_deleting_directory' => 'Eror menghapus direktori asal :dir',\n    'path' => 'Path',\n  ],\n  'component' => [\n    'menu_label' => 'Komponen',\n    'invalid_request' => 'Templat tidak dapat disimpan dikarenakan data komponen tidak valid.',\n    'no_records' => 'Tidak ada komponen ditemukan',\n    'not_found' => 'Komponen \\':name\\' tidak ditemukan.',\n    'method_not_found' => 'Komponen \\':name\\' tidak menggunakan metode \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Jenis templat tidak diketahui.',\n    'not_found' => 'Templat yang diminta tidak ditemukan.',\n    'saved' => 'Templat berhasil disimpan.',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Kelola konten',\n    'manage_assets' => 'Kelola aset',\n    'manage_pages' => 'Kelola halaman',\n    'manage_layouts' => 'Kelola layout',\n    'manage_partials' => 'Kelola halaman parsial',\n    'manage_themes' => 'Kelola tema',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/id.json",
    "content": "{\n  \"Themes\": \"Tema\",\n  \"Manage Themes\": \"Kelola Tema\",\n  \"Customize Theme\": \"Kustomisasi Tema\",\n  \"Manage Maintenance Mode\": \"Kelola Mode Pemeliharaan\",\n  \"View Website During Maintenance\": \"Lihat Situs Selama Pemeliharaan\",\n  \"Manage Content\": \"Kelola Konten\",\n  \"Manage Asset Files\": \"Kelola Berkas Aset\",\n  \"Manage Pages\": \"Kelola Halaman\",\n  \"Manage Layouts\": \"Kelola Layout\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfigurasi halaman mode perbaikan dan ubah pengaturan.\",\n  \"Maintenance Mode\": \"Mode perbaikan\",\n  \"Select the page to show when maintenance mode is activated.\": \"Bila diaktifkan, pengunjung situs akan melihat halaman terpilih berikut.\",\n  \"Enable maintenance mode\": \"Aktivasi mode perbaikan\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Mode pemeliharaan akan menampilkan halaman pemeliharaan kepada pengunjung yang tidak masuk ke area back-end.\",\n  \"Resources\": \"Sumber\",\n  \"Reference assets and variables included on this page.\": \"Aset dan variabel referensi telah disertakan di halaman ini.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"File JavaScript di folder assets/js\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"LESS file di folder assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"File SCSS di folder assets/scss\",\n  \"Variables\": \"Variabel\",\n  \"Page variables name(s) and value(s)\": \"Nama dan nilai variabel halaman\",\n  \"Headers\": \"Header\",\n  \"Page header name(s) and value(s)\": \"Nama dan nilai header halaman\",\n  \"Site Picker\": \"Pemilih Situs\",\n  \"Displays links for selecting a different site.\": \"Menampilkan tautan untuk memilih situs yang berbeda.\",\n  \"Unknown component\": \"Komponen tidak diketahui\",\n  \"View Bag\": \"Lihat Tas\",\n  \"Stores custom template properties.\": \"Menyimpan properti yang telah dikustom.\",\n  \"By :name\": \"Dengan nama\",\n  \"The theme ':name' is not found.\": \"Tema ': nama' tidak ditemukan.\",\n  \"Manage the front-end theme and customization options.\": \"Tinjau daftar instalasi tema dan pilih tema aktif.\",\n  \"Site Theme\": \"Tema front-end\",\n  \"Properties\": \"Properti\",\n  \"Publish\": \"Menerbitkan\",\n  \"Advanced\": \"Canggih\",\n  \"Name\": \"Nama\",\n  \"New theme name\": \"Nama tema baru\",\n  \"Author Name\": \"Nama Penulis\",\n  \"Person or company name\": \"Nama orang atau perusahaan\",\n  \"Directory Name\": \"Nama Direktori\",\n  \"The destination theme directory\": \"Direktori tema tujuan\",\n  \"Description\": \"Keterangan\",\n  \"Theme description\": \"Deskripsi tema\",\n  \"Homepage\": \"Beranda\",\n  \"Website URL\": \"alamat situs web\",\n  \"Author Code\": \"Kode Pengarang\",\n  \"A unique code for the author used for distribution\": \"Kode unik untuk penulis yang digunakan untuk distribusi\",\n  \"Theme Code\": \"Kode Tema\",\n  \"A unique code for this theme used for distribution\": \"Kode unik untuk tema ini digunakan untuk distribusi\",\n  \"Parent Theme\": \"Tema Induk\",\n  \"Database Mode\": \"Modus Basis Data\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Simpan perubahan pada tema ini di database, bukan di sistem file\",\n  \"-- no parent --\": \"-- tanpa orang tua --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Folder\",\n  \"Please select the theme folders you would like to export\": \"Silakan pilih folder tema yang ingin Anda ekspor\",\n  \"Theme archive file\": \"File arsip tema\",\n  \"Overwrite existing files\": \"Timpa file yang ada\",\n  \"Untick this box to only import new files\": \"Hapus centang kotak ini untuk hanya mengimpor file baru\",\n  \"Please select the theme folders you would like to import\": \"Silakan pilih folder tema yang ingin Anda impor\",\n  \"Activate\": \"Aktif\",\n  \"Customize\": \"Kustomisasi\",\n  \"Duplicate\": \"Duplikat\",\n  \"Duplicate Theme\": \"Duplikat Tema\",\n  \"Theme Duplicated!\": \"Tema Digandakan!\",\n  \"Manage\": \"Mengelola\",\n  \"Manage Theme\": \"Kelola Tema\",\n  \"Edit Properties\": \"Sunting Properti\",\n  \"Save Properties\": \"Simpan Properti\",\n  \"Import\": \"Impor\",\n  \"Import Theme\": \"Impor Tema\",\n  \"Theme Imported!\": \"Tema Diimpor!\",\n  \"Export\": \"Ekspor\",\n  \"Export Theme\": \"Ekspor Tema\",\n  \"Delete\": \"Menghapus\",\n  \"Delete this theme? It cannot be undone!\": \"Hapus tema ini? Itu tidak dapat dibatalkan!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Tidak dapat menghapus tema aktif, coba aktifkan tema lain terlebih dahulu.\",\n  \"Theme deleted!\": \"Tema dihapus!\",\n  \"Create Theme\": \"Buat Tema\",\n  \"Create\": \"Membuat\",\n  \"Create a New Blank Theme\": \"Buat Tema Kosong Baru\",\n  \"Theme Created!\": \"Tema Dibuat!\",\n  \"Please specify a name for the theme.\": \"Silakan tentukan nama untuk tema.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Nama hanya boleh berisi angka, huruf Latin, dan simbol berikut: _-\",\n  \"Desired theme directory already exists.\": \"Direktori tema yang diinginkan sudah ada.\",\n  \"Theme directory\": \"Direktori tema\",\n  \"Provide a new directory name for the duplicated theme.\": \"Berikan nama direktori baru untuk tema yang digandakan.\",\n  \"Find More Themes\": \"Temukan lebih banyak tema pada Marketplace Theme OctoberCMS.\",\n  \"Saving Theme...\": \"Menyimpan Tema...\",\n  \"Return to Themes List\": \"Kembali ke Daftar Tema\",\n  \"No themes found\": \"Tidak ada tema yang ditemukan\",\n  \"Seed Theme\": \"Tema Benih\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Benih tema yang ditentukan dengan cetak biru, terjemahan, dan data.\",\n  \"Theme Seeded!\": \"Tema Unggulan!\",\n  \"Select Page Link\": \"Pilih Tautan Halaman\",\n  \"Search all references...\": \"Cari semua referensi...\",\n  \"CMS Page\": \"Halaman CMS\",\n  \"Link\": \"Tautan\",\n  \"Please select a CMS page\": \"Pilih halaman CMS\",\n  \"Please select a page reference\": \"Silakan pilih referensi halaman\",\n  \"Please enter a valid URL\": \"Harap masukkan URL yang valid\",\n  \"Delete Theme\": \"Hapus Tema\",\n  \"Activate Theme\": \"Aktifkan Tema\",\n  \"Manage Partials\": \"Kelola Sebagian\",\n  \"No Title\": \"Tanpa judul\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Nama unik untuk komponen ini saat digunakan di dalam kode halaman atau layout.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Alias komponen diperlukan dan hanya dapat memuat simbol Latin, angka, dan garis bawah. Alias harus diawali dengan simbol Latin.\",\n  \"Unnamed\": \"Tak bernama\",\n  \"No description provided\": \"Tidak ada deskripsi\",\n  \"No snippets found\": \"Tidak ada cuplikan yang ditemukan\",\n  \"Search...\": \"Mencari...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Cuplikan dengan kode yang diminta :kode tidak ditemukan dalam tema.\",\n  \"Snippet\": \"Potongan\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Masukkan kode agar sebagian ini tersedia sebagai cuplikan di editor konten.\",\n  \"Please enter the snippet code\": \"Silakan masukkan kode cuplikan\",\n  \"Snippet Code\": \"Kode Cuplikan\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Nama ditampilkan dalam daftar cuplikan di editor saat cuplikan ditambahkan.\",\n  \"Please enter the snippet name\": \"Masukkan nama cuplikan\",\n  \"Property Title\": \"Judul Properti\",\n  \"Please provide the property title\": \"Harap berikan judul properti\",\n  \"Code\": \"Kode\",\n  \"Please provide the property name\": \"Harap berikan nama properti\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Kode properti harus dimulai dengan huruf Latin dan hanya boleh berisi huruf Latin, angka, dan garis bawah\",\n  \"Type\": \"Jenis\",\n  \"Select\": \"Pilih\",\n  \"String\": \"Rangkaian\",\n  \"Checkbox\": \"Kotak centang\",\n  \"Dropdown\": \"Drop-down\",\n  \"Please select the property type\": \"Silakan pilih jenis properti\",\n  \"Default\": \"Bawaan\",\n  \"Options\": \"Pilihan\",\n  \"Define a Snippet Partial\": \"Tentukan Cuplikan Parsial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Kunci opsi drop-down tidak valid: :key. Tombol opsi hanya boleh berisi angka, huruf Latin, dan karakter _ dan -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Deskripsi ditampilkan dalam daftar cuplikan di editor saat cuplikan ditambahkan.\",\n  \"Details\": \"Detail\"\n}"
  },
  {
    "path": "modules/cms/lang/it/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nome file non valido: :name. I nomi dei file possono contenere solo caratteri alfanumerici, underscores, trattini e punti. Alcuni esempi di nome di file corretti: page.htm, page, subdirectory/page',\n    'invalid_property' => 'La proprietà \\':name\\' non può essere impostata',\n    'file_already_exists' => 'File \\':name\\' già esistente.',\n    'error_saving' => 'Errore nel salvataggio del file \\':name\\'. Verifica le autorizzazioni di scrittura.',\n    'error_creating_directory' => 'Errore nella creazione della cartella :name. Verifica le autorizzazioni di scrittura.',\n    'invalid_file_extension' => 'Estensione del file non valida: :invalid. Le estensioni consentite sono: :allowed.',\n    'error_deleting' => 'Errore nella cancellazione del file \\':name\\'. Verifica le autorizzazioni di scrittura.',\n    'delete_success' => 'Template eliminati correttamente: :count.',\n    'file_name_required' => 'Il campo Nome file è obbligatorio.',\n    'safe_mode_enabled' => 'La modalità sicura è attualmente abilitata.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Sito web',\n      'online' => 'Online',\n      'maintenance' => 'In manutenzione',\n      'manage_themes' => 'Gestione temi',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Il tema attivo non è impostato.',\n      'not_found' => 'Il tema attivo non è stato trovato.',\n    ],\n    'edit' => [\n      'not_set' => 'Il tema modificato non è impostato.',\n      'not_found' => 'Il tema modificato non è stato trovato.',\n      'not_match' => 'L\\'oggetto a cui stai cercando di accedere non appartiene al tema che stai modificando. Si prega di ricaricare la pagina.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Pagina \\':name\\' non trovata',\n    'not_found' => [\n      'label' => 'Pagina non trovata',\n      'help' => 'La pagina richiesta non è stata trovata.',\n    ],\n    'custom_error' => [\n      'label' => 'Errore nella pagina',\n      'help' => 'Siamo spiacenti, ma qualcosa è andato storto e la pagina non può essere visualizzata.',\n    ],\n    'menu_label' => 'Pagine',\n    'unsaved_label' => 'Pagina/e non salvate',\n    'no_list_records' => 'Pagine non trovate',\n    'new' => 'Nuova pagina',\n    'invalid_url' => 'Formato URL non valido. L\\'URL deve iniziare con una barra e può contenere numeri, lettere latine e i seguenti simboli: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Sei sicuro di voler eliminare le pagine selezionate?',\n    'delete_confirm_single' => 'Sei sicuro di voler eliminare questa pagina?',\n    'no_layout' => '-- nessun layout --',\n  ],\n  'layout' => [\n    'not_found_name' => 'Il layout \\':name\\' non è stato trovato',\n    'menu_label' => 'Layout',\n    'unsaved_label' => 'Layout non salvati',\n    'no_list_records' => 'Nessun layout trovato',\n    'new' => 'Nuovo layout',\n    'delete_confirm_multiple' => 'Sei sicuro di voler eliminare i layouts selezionati?',\n    'delete_confirm_single' => 'Sei sicuro di voler eliminare questo layout?',\n  ],\n  'partial' => [\n    'not_found_name' => 'La vista parziale \\':name\\' non è stata trovata.',\n    'invalid_name' => 'Nome della vista parziale non valido: :name.',\n    'menu_label' => 'Viste parziali',\n    'unsaved_label' => 'Viste parziali non salvate',\n    'no_list_records' => 'Nessuna vista parziale trovata',\n    'delete_confirm_multiple' => 'Sei sicuro di voler eliminare le viste parziali selezionate?',\n    'delete_confirm_single' => 'Sei sicuro di voler eliminare questa vista parziale?',\n    'new' => 'Nuova vista parziale',\n  ],\n  'content' => [\n    'not_found_name' => 'Il file di contenuti \\':name\\' non è stato trovato.',\n    'menu_label' => 'Contenuti',\n    'unsaved_label' => 'Contenuti non salvati',\n    'no_list_records' => 'Nessun file di contenuto trovato',\n    'delete_confirm_multiple' => 'Sei sicuro di voler eliminare i file o le cartelle di contenuti selezionate?',\n    'delete_confirm_single' => 'Sei sicuro di voler eliminare questo file di contenuti?',\n    'new' => 'Nuovo file di contenuti',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Nome del gestore AJAX non valido: :name.',\n    'not_found' => 'Il gestore AJAX \\':name\\' non è stato trovato.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Aggiungi',\n    'search' => 'Cerca...',\n  ],\n  'editor' => [\n    'settings' => 'Impostazioni',\n    'title' => 'Titolo',\n    'new_title' => 'Titolo nuova pagina',\n    'url' => 'URL',\n    'filename' => 'Nome file',\n    'layout' => 'Layout',\n    'description' => 'Descrizione',\n    'preview' => 'Anteprima',\n    'meta' => 'Metadati',\n    'meta_title' => 'Meta Titolo',\n    'meta_description' => 'Meta Descrizione',\n    'markup' => 'Markup',\n    'code' => 'Codice',\n    'content' => 'Contenuto',\n    'hidden' => 'Nascosto',\n    'hidden_comment' => 'Le pagine nascoste sono accessibili solo dagli utenti collegati al pannello di controllo.',\n    'enter_fullscreen' => 'Visualizza a schermo intero',\n    'exit_fullscreen' => 'Esci dalla visualizzazione a schermo intero',\n    'open_searchbox' => 'Apri casella di ricerca',\n    'open_replacebox' => 'Apri casella di sostituzione',\n  ],\n  'asset' => [\n    'menu_label' => 'Assets',\n    'unsaved_label' => 'Asset(s) non salvati',\n    'drop_down_add_title' => 'Aggiungi...',\n    'drop_down_operation_title' => 'Azioni...',\n    'upload_files' => 'Carica file(s)',\n    'create_file' => 'Crea file',\n    'create_directory' => 'Crea cartella',\n    'directory_popup_title' => 'Nuova cartella',\n    'directory_name' => 'Nome della cartella',\n    'rename' => 'Rinomina',\n    'delete' => 'Elimina',\n    'move' => 'Sposta',\n    'select' => 'Seleziona',\n    'new' => 'Nuovo file',\n    'rename_popup_title' => 'Rinomina',\n    'rename_new_name' => 'Nuovo nome',\n    'invalid_path' => 'Il percorso può contenere solo numeri, lettere latine, spazi e i simboli seguenti: ._-/',\n    'error_deleting_file' => 'Errore durante l\\'eliminazione del file :name.',\n    'error_deleting_dir_not_empty' => 'Errore durante l\\'eliminazione della cartella :name. La cartella non è vuota.',\n    'error_deleting_dir' => 'Errore durante l\\'eliminazinoe della cartella :name.',\n    'invalid_name' => 'Il nome può contenere solo numeri, lettere latine, spazi e i simboli seguenti: ._-',\n    'original_not_found' => 'Il file o la cartella originali non sono stati trovati',\n    'already_exists' => 'Un file o cartella con questo nome è già esistente',\n    'error_renaming' => 'Errore nella rinominazione del file o della cartella',\n    'name_cant_be_empty' => 'Il nome non può essere vuoto',\n    'too_large' => 'Il file caricato è troppo grande. La dimensione massima consentita è :max_size',\n    'type_not_allowed' => 'Solo i seguenti tipi di file sono consentiti: :allowed_types',\n    'file_not_valid' => 'File non valido',\n    'error_uploading_file' => 'Errore durante il caricamento del file \\':name\\': :error',\n    'move_please_select' => 'seleziona',\n    'move_destination' => 'Cartella di destinazione',\n    'move_popup_title' => 'Sposta assets',\n    'move_button' => 'Sposta',\n    'selected_files_not_found' => 'Files selezionati non trovati.',\n    'select_destination_dir' => 'Seleziona una cartella di destinazione',\n    'destination_not_found' => 'Cartella di destinazione non trovata',\n    'error_moving_file' => 'Errore durante lo spostamento del file :file',\n    'error_moving_directory' => 'Errore durante lo spostamento della cartella :dir',\n    'error_deleting_directory' => 'Errore durante l\\'eliminazione della cartella originale :dir',\n    'path' => 'Percorso',\n  ],\n  'component' => [\n    'menu_label' => 'Componenti',\n    'invalid_request' => 'Il template non può essere salvato a causa di dati dei componenti non validi.',\n    'no_records' => 'Nessun componente trovato',\n    'not_found' => 'Il componente \\':name\\' non è stato trovato.',\n    'method_not_found' => 'Il componente \\':name\\' non contiene il metodo \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Tipo di template sconosciuto.',\n    'not_found' => 'Il template richiesto non è stato trovato.',\n    'saved' => 'Il template è stato salvato con successo',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Gestisci contenuti',\n    'manage_assets' => 'Gestisci assets',\n    'manage_pages' => 'Gestisci pagine',\n    'manage_layouts' => 'Gesstisci layouts',\n    'manage_partials' => 'Gestisci viste parziali',\n    'manage_themes' => 'Gestisci temi',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/it.json",
    "content": "{\n  \"Themes\": \"Temi\",\n  \"Manage Themes\": \"Gestisci temi\",\n  \"Customize Theme\": \"Personalizza tema\",\n  \"Manage Maintenance Mode\": \"Gestisci la modalità di manutenzione\",\n  \"View Website During Maintenance\": \"Visualizza il sito Web durante la manutenzione\",\n  \"Manage Content\": \"Gestisci i contenuti\",\n  \"Manage Asset Files\": \"Gestisci i file delle risorse\",\n  \"Manage Pages\": \"Gestisci pagine\",\n  \"Manage Layouts\": \"Gestisci layout\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configura la pagina da visualizzare in modalità di manutenzione e cambia l'impostazione.\",\n  \"Maintenance Mode\": \"Modalità di manutenzione\",\n  \"Select the page to show when maintenance mode is activated.\": \"Se attivo i visitatori del sito vedranno la pagina selezionata sotto.\",\n  \"Enable maintenance mode\": \"Abilita modalità di manutenzione\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"La modalità di manutenzione mostrerà la pagina di manutenzione ai visitatori che non hanno effettuato l'accesso all'area di back-end.\",\n  \"Resources\": \"Risorse\",\n  \"Reference assets and variables included on this page.\": \"Asset e variabili di riferimento inclusi in questa pagina.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"File JavaScript nella cartella asset/js\",\n  \"LESS\": \"MENO\",\n  \"LESS file(s) in the assets/less folder\": \"LESS file nella cartella asset/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"File SCSS nella cartella asset/scss\",\n  \"Variables\": \"Variabili\",\n  \"Page variables name(s) and value(s)\": \"Nome/i e valore/i delle variabili di pagina\",\n  \"Headers\": \"Intestazioni\",\n  \"Page header name(s) and value(s)\": \"Nome(i) e valore(i) dell'intestazione della pagina\",\n  \"Site Picker\": \"Selettore sito\",\n  \"Displays links for selecting a different site.\": \"Visualizza i collegamenti per la selezione di un sito diverso.\",\n  \"Unknown component\": \"Componente sconosciuto\",\n  \"View Bag\": \"Visualizza Borsa\",\n  \"Stores custom template properties.\": \"Memorizza le proprietà del modello personalizzate.\",\n  \"By :name\": \"Per nome\",\n  \"The theme ':name' is not found.\": \"Tema ':name' non trovato.\",\n  \"Manage the front-end theme and customization options.\": \"Visualizza l'anteprima dei temi installati e seleziona un tema attivo.\",\n  \"Site Theme\": \"Tema del sito\",\n  \"Properties\": \"Proprietà\",\n  \"Publish\": \"Pubblicare\",\n  \"Advanced\": \"Avanzate\",\n  \"Name\": \"Nome\",\n  \"New theme name\": \"Nome del nuovo tema\",\n  \"Author Name\": \"Autore\",\n  \"Person or company name\": \"Nome della persona o della società\",\n  \"Directory Name\": \"Nome della cartella\",\n  \"The destination theme directory\": \"La cartella di destinazione del tema\",\n  \"Description\": \"Descrizione\",\n  \"Theme description\": \"Descrizione del tema\",\n  \"Homepage\": \"Homepage\",\n  \"Website URL\": \"URL Sito web\",\n  \"Author Code\": \"Codice Autore\",\n  \"A unique code for the author used for distribution\": \"Un codice univoco per l'autore utilizzato per la distribuzione\",\n  \"Theme Code\": \"Codice\",\n  \"A unique code for this theme used for distribution\": \"Un codice univoco per questo tema, utilizzato per la distribuzione\",\n  \"Parent Theme\": \"Tema genitore\",\n  \"Database Mode\": \"Modalità banca dati\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Salva le modifiche a questo tema nel database invece che nel filesystem\",\n  \"-- no parent --\": \"-- nessun genitore --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Cartelle\",\n  \"Please select the theme folders you would like to export\": \"Seleziona le cartelle del tema che vuoi esportare\",\n  \"Theme archive file\": \"File di archivio del tema\",\n  \"Overwrite existing files\": \"Sovrascrivi file esistenti\",\n  \"Untick this box to only import new files\": \"Deseleziona per importare solamente i nuovi file\",\n  \"Please select the theme folders you would like to import\": \"Seleziona le cartelle del tema che vuoi importare\",\n  \"Activate\": \"Attivo\",\n  \"Customize\": \"Personalizza\",\n  \"Duplicate\": \"Duplica\",\n  \"Duplicate Theme\": \"Duplica tema\",\n  \"Theme Duplicated!\": \"Tema duplicato con successo!\",\n  \"Manage\": \"Gestisci\",\n  \"Manage Theme\": \"Gestisci tema\",\n  \"Edit Properties\": \"Modifica proprietà\",\n  \"Save Properties\": \"Salva proprietà\",\n  \"Import\": \"Importa\",\n  \"Import Theme\": \"Importa tema\",\n  \"Theme Imported!\": \"Tema importato con successo!\",\n  \"Export\": \"Esporta\",\n  \"Export Theme\": \"Esporta tema\",\n  \"Delete\": \"Elimina\",\n  \"Delete this theme? It cannot be undone!\": \"Sei sicuro di voler cancellare questo tema? L'operazione non può essere annullata!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Impossibile eliminare il tema attivo, prova prima ad attivare un altro tema.\",\n  \"Theme deleted!\": \"Tema eliminato con successo!\",\n  \"Create Theme\": \"Crea tema\",\n  \"Create\": \"Crea\",\n  \"Create a New Blank Theme\": \"Crea un nuovo tema vuoto\",\n  \"Theme Created!\": \"Tema creato con successo!\",\n  \"Please specify a name for the theme.\": \"Specifica un nome per il tema.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Il nome della cartella può contenere solo numeri, lettere latine e i seguenti simboli: _-\",\n  \"Desired theme directory already exists.\": \"Cartelle di destinazione del tema già esistente.\",\n  \"Theme directory\": \"Cartella di destinazione del tema\",\n  \"Provide a new directory name for the duplicated theme.\": \"Inserisci una nuova cartella per il tema duplicato.\",\n  \"Find More Themes\": \"Trova nuovi temi\",\n  \"Saving Theme...\": \"Salvataggio tema in corso...\",\n  \"Return to Themes List\": \"Ritorna all'elenco del temi\",\n  \"No themes found\": \"Nessun tema trovato\",\n  \"Seed Theme\": \"Tema del seme\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Semina il tema specificato con progetti, traduzioni e dati.\",\n  \"Theme Seeded!\": \"Tema seminato!\",\n  \"Select Page Link\": \"Seleziona Collegamento alla pagina\",\n  \"Search all references...\": \"Cerca tutti i riferimenti...\",\n  \"CMS Page\": \"Pagina CSM\",\n  \"Link\": \"Collegamento\",\n  \"Please select a CMS page\": \"Seleziona una pagina CMS\",\n  \"Please select a page reference\": \"Seleziona un riferimento alla pagina\",\n  \"Please enter a valid URL\": \"Per favore, inserisci un URL valido\",\n  \"Delete Theme\": \"Elimina tema\",\n  \"Activate Theme\": \"Attiva tema\",\n  \"Manage Partials\": \"Gestisci parziali\",\n  \"No Title\": \"Senza titolo\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Un nome univoco fornito a questo componente quando utilizzato nella pagina o nel layout.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"L'alias del componente è obbligatorio e può contenere solo lettere latine, numeri e underscores. L'alias deve iniziare con una lettera.\",\n  \"Unnamed\": \"Senza nome\",\n  \"No description provided\": \"Nessuna descrizione fornita\",\n  \"No snippets found\": \"Nessuno snippet trovato\",\n  \"Search...\": \"Cerca...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Snippet con codice :code non trovato nel tema.\",\n  \"Snippet\": \"Snippet\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Inserisci un codice per rendere questa vista parziale disponibile come snippet nel plugin Static Pages.\",\n  \"Please enter the snippet code\": \"Inserisci il codice dello snippet\",\n  \"Snippet Code\": \"Codice Snippet\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Il nome è visualizzato nella lista degli snippet nella barra laterale di Static Pages e su una Pagina quando viene aggiunto lo snippet.\",\n  \"Please enter the snippet name\": \"Inserisci il nome dello snippet\",\n  \"Property Title\": \"Titolo proprietà\",\n  \"Please provide the property title\": \"Si prega di fornire il titolo della proprietà\",\n  \"Code\": \"Codice\",\n  \"Please provide the property name\": \"Si prega di fornire il nome della proprietà\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Il codice della proprietà deve iniziare con una lettera latina e può contenere solo lettere latine e numeri\",\n  \"Type\": \"Tipo\",\n  \"Select\": \"Selezionare\",\n  \"String\": \"Testo\",\n  \"Checkbox\": \"Checkbox\",\n  \"Dropdown\": \"Menu a cascata\",\n  \"Please select the property type\": \"Si prega di selezionare il tipo di proprietà\",\n  \"Default\": \"Default\",\n  \"Options\": \"Opzioni\",\n  \"Define a Snippet Partial\": \"Definisci uno snippet parziale\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Opzione del menu a cascata non valida: %s. Le opzioni possono contenere solo numeri, lettere latine e i caratteri _ e -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"La descrizione viene visualizzata nell'elenco dei frammenti nell'editor quando viene aggiunto un frammento.\",\n  \"Details\": \"Dettagli\"\n}"
  },
  {
    "path": "modules/cms/lang/ja/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => '正しくないファイル名：:name。ファイル名は英文字、下線(_)、ダッシュ(-)、ピリオド(.)で構成されなくてはなりません。（正しいファイル名の例：page, page.htm, subdirectory/page）',\n    'invalid_property' => '\":name\"プロパティーをセットできません。',\n    'file_already_exists' => '\":name\"ファイルは既に存在しています。',\n    'error_saving' => '\":name\"ファイル保存エラー',\n    'error_creating_directory' => ':nameディレクトリー作成エラー',\n    'invalid_file_extension' => '正しくないファイル拡張子：:invalid。許されている拡張子は、:allowedです。',\n    'error_deleting' => '\":name\"一時ファイル削除エラー',\n    'delete_success' => ':count個のテンプレートを削除しました。',\n    'file_name_required' => 'ファイル名フィールドが必要です。',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'online' => 'オンライン',\n      'maintenance' => 'メンテナンスモード',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'アクティブなテーマが設定されていません。',\n      'not_found' => 'アクティブなテーマが見つかりません。',\n    ],\n    'edit' => [\n      'not_set' => '編集テーマが設定されていません。',\n      'not_found' => '編集テーマが見つかりません。',\n      'not_match' => 'アクセスしようとしてるオブジェクトは、編集中のテーマに所属していません。ページを再読み込みしてください。',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found' => [\n      'label' => 'ページが見つかりません。',\n      'help' => '要求されているページが見つかりません。',\n    ],\n    'custom_error' => [\n      'label' => 'ページエラー。',\n      'help' => '申し訳ありません。何かが間違っているようで、ページが表示できません。',\n    ],\n    'menu_label' => 'ページ',\n    'unsaved_label' => '保存されていないページ',\n    'no_list_records' => 'ページが見つかりません',\n    'new' => '新ページ',\n    'invalid_url' => '正しくないURL形式。URLはスラッシュ(/)で始まり、数字、ラテン文字、._-[]:?|/+*^$で構成します。',\n    'delete_confirm_multiple' => '指定した全ページを本当に削除しますか？',\n    'delete_confirm_single' => '本当にこのページを削除しますか？',\n    'no_layout' => '-- レイアウト無し --',\n  ],\n  'layout' => [\n    'not_found_name' => 'レイアウト\\':name\\'が見つかりません。',\n    'menu_label' => 'レイアウト',\n    'unsaved_label' => '保存されていないレイアウト',\n    'no_list_records' => 'レイアウトが見つかりません',\n    'new' => '新レイアウト',\n    'delete_confirm_multiple' => '指定した全ページを本当に削除しますか？',\n    'delete_confirm_single' => '本当にこのページを削除しますか？',\n  ],\n  'partial' => [\n    'not_found_name' => '\\':name\\'パーシャルが見つかりません。',\n    'invalid_name' => '正しくないパーシャル名：:name。',\n    'menu_label' => 'パーシャル',\n    'unsaved_label' => '保存されていないパーシャル(s)',\n    'no_list_records' => 'パーシャルが見つかりません。',\n    'delete_confirm_multiple' => '指定した全パーシャルを本当に削除しますか？',\n    'delete_confirm_single' => '本当にこのパーシャルを削除しますか？',\n    'new' => '新パーシャル',\n  ],\n  'content' => [\n    'not_found_name' => '\\':name\\'コンテンツファイルが見つかりません。',\n    'menu_label' => 'コンテンツ',\n    'unsaved_label' => '保存されていないコンテンツ',\n    'no_list_records' => 'コンテンツファイルが見つかりません',\n    'delete_confirm_multiple' => '指定した全コンテンツファイル／ディレクトリーを本当に削除しますか？',\n    'delete_confirm_single' => '本当にこのコンテンツファイルを削除しますか？',\n    'new' => '新コンテンツファイル',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => '正しくないAjaxハンドラ名：:name。',\n    'not_found' => '\\':name\\' Ajaxハンドラが見つかりません。',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => '追加',\n    'search' => '検索...',\n  ],\n  'editor' => [\n    'settings' => '設定',\n    'title' => 'タイトル',\n    'new_title' => '新ページタイトル',\n    'url' => 'URL',\n    'filename' => 'ファイル名',\n    'layout' => 'レイアウト',\n    'description' => '説明',\n    'preview' => 'プレビュー',\n    'meta' => 'メタ',\n    'meta_title' => 'メタタイトル',\n    'meta_description' => 'メタ説明',\n    'markup' => 'マークアップ',\n    'code' => 'コード',\n    'content' => 'コンテンツ',\n    'hidden' => '非表示',\n    'hidden_comment' => 'フロントエンドでページを表示しないようにします。バックエンドでのみ閲覧・編集できます。',\n    'enter_fullscreen' => '全画面モードに移行する',\n    'exit_fullscreen' => '全画面モードを解除する',\n  ],\n  'asset' => [\n    'menu_label' => 'アセット',\n    'unsaved_label' => '保存されていないアセット',\n    'drop_down_add_title' => '追加...',\n    'drop_down_operation_title' => 'アクション...',\n    'upload_files' => 'ファイルアップロード',\n    'create_file' => 'ファイル作成',\n    'create_directory' => 'ディレクトリ作成',\n    'directory_popup_title' => '新規ディレクトリ',\n    'directory_name' => 'ディレクトリ名',\n    'rename' => '名前変更',\n    'delete' => '削除',\n    'move' => '移動',\n    'select' => '選択',\n    'new' => '新ファイル',\n    'rename_popup_title' => '名前変更',\n    'rename_new_name' => '新しい名前',\n    'invalid_path' => 'パスは数字、ラテン文字、空白、._-/で構成されなくてはなりません。',\n    'error_deleting_file' => ':nameファイル削除エラー。',\n    'error_deleting_dir_not_empty' => ':nameディレクトリ削除エラー。ディレクトリが空ではありません。',\n    'error_deleting_dir' => ':nameディレクトリ削除エラー。',\n    'invalid_name' => '名前は数字、ラテン文字、空白、._-で構成されなくてはなりません。',\n    'original_not_found' => '元のファイル／ディレクトリが見つかりません',\n    'already_exists' => 'この名前のファイル／ディレクトリは既に存在します。',\n    'error_renaming' => 'ファイル／ディレクトリ名前変更エラー',\n    'name_cant_be_empty' => '名前は空白にできません',\n    'too_large' => 'アップロードファイルは大きすぎます。ファイルサイズは最大で、:max_sizeです。',\n    'type_not_allowed' => '許可されているファイルタイプは、:allowed_typesだけです。',\n    'file_not_valid' => 'ファイルが正しくありません。',\n    'error_uploading_file' => '\":name\":ファイルアップロードエラー。(:error)',\n    'move_please_select' => '選択してください',\n    'move_destination' => '移動先ディレクトリー',\n    'move_popup_title' => 'アセット移動',\n    'move_button' => '移動',\n    'selected_files_not_found' => '選択されたファイルは存在しません。',\n    'select_destination_dir' => '移動先ディレクトリーを選択してください',\n    'destination_not_found' => '移動先ディレクトリーは存在しません。',\n    'error_moving_file' => ':fileファイル移動エラー',\n    'error_moving_directory' => ':dirディレクトリー移動エラー',\n    'error_deleting_directory' => '移動元:dirディレクトリー削除エラー',\n    'path' => 'パス',\n  ],\n  'component' => [\n    'menu_label' => 'コンポーネント',\n    'invalid_request' => 'コンポーネントデータが正しくないため、テンプレートは保存できません。',\n    'no_records' => 'コンポーネントが見つかりません。',\n    'not_found' => '\\':name\\'コンポーネントが見つかりません。',\n    'method_not_found' => '\\':name\\'コンポーネントは、\\':method\\'メソッドを持っていません。',\n  ],\n  'template' => [\n    'invalid_type' => '未知のテンプレートタイプ。',\n    'not_found' => 'リクエストされたテンプレートが見つかりません。',\n    'saved' => 'テンプレートを保存しました。',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'コンテンツ管理',\n    'manage_assets' => 'アセット管理',\n    'manage_pages' => 'ページ管理',\n    'manage_layouts' => 'レイアウト管理',\n    'manage_partials' => 'パーシャル管理',\n    'manage_themes' => 'テーマ管理',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/ja.json",
    "content": "{\n  \"Themes\": \"テーマ\",\n  \"Manage Themes\": \"テーマを管理する\",\n  \"Customize Theme\": \"テーマをカスタマイズする\",\n  \"Manage Maintenance Mode\": \"メンテナンスモードの管理\",\n  \"View Website During Maintenance\": \"メンテナンス中にウェブサイトを見る\",\n  \"Manage Content\": \"コンテンツを管理する\",\n  \"Manage Asset Files\": \"アセットファイルの管理\",\n  \"Manage Pages\": \"ページの管理\",\n  \"Manage Layouts\": \"レイアウトの管理\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"メンテナンスモードページの設定と切り替えをします。\",\n  \"Maintenance Mode\": \"メンテナンスモード\",\n  \"Select the page to show when maintenance mode is activated.\": \"メンテナンスモードの時、Webサイト訪問者が見るページを選択してください。\",\n  \"Enable maintenance mode\": \"メンテナンスモードを有効にする\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"メンテナンス モードでは、バックエンド エリアにサインインしていない訪問者にメンテナンス ページが表示されます。\",\n  \"Resources\": \"資力\",\n  \"Reference assets and variables included on this page.\": \"このページに含まれるアセットと変数を参照してください。\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"assets/js フォルダー内の JavaScript ファイル\",\n  \"LESS\": \"以下\",\n  \"LESS file(s) in the assets/less folder\": \"assets/less フォルダー内の LESS ファイル\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"assets/scss フォルダー内の SCSS ファイル\",\n  \"Variables\": \"変数\",\n  \"Page variables name(s) and value(s)\": \"ページ変数の名前と値\",\n  \"Headers\": \"ヘッダー\",\n  \"Page header name(s) and value(s)\": \"ページ ヘッダーの名前と値\",\n  \"Site Picker\": \"サイトピッカー\",\n  \"Displays links for selecting a different site.\": \"別のサイトを選択するためのリンクを表示します。\",\n  \"Unknown component\": \"不明なコンポーネント\",\n  \"View Bag\": \"バッグを見る\",\n  \"Stores custom template properties.\": \"カスタム テンプレート プロパティを格納します。\",\n  \"By :name\": \"名前で\",\n  \"The theme ':name' is not found.\": \"テーマ「:name」が見つかりません。\",\n  \"Manage the front-end theme and customization options.\": \"インストール済みのテーマのプレビュー一覧とアクティブテーマの選択。\",\n  \"Site Theme\": \"フロントエンドのテーマ\",\n  \"Properties\": \"プロパティ\",\n  \"Publish\": \"公開\",\n  \"Advanced\": \"高度\",\n  \"Name\": \"名前\",\n  \"New theme name\": \"新しいテーマ名\",\n  \"Author Name\": \"著者名\",\n  \"Person or company name\": \"個人名または会社名\",\n  \"Directory Name\": \"ディレクトリ名\",\n  \"The destination theme directory\": \"宛先テーマディレクトリ\",\n  \"Description\": \"説明\",\n  \"Theme description\": \"テーマの説明\",\n  \"Homepage\": \"ホームページ\",\n  \"Website URL\": \"ウェブサイトのURL\",\n  \"Author Code\": \"著者コード\",\n  \"A unique code for the author used for distribution\": \"配布時に使用される作者固有のコード\",\n  \"Theme Code\": \"テーマコード\",\n  \"A unique code for this theme used for distribution\": \"配布に使用されるこのテーマの固有のコード\",\n  \"Parent Theme\": \"親テーマ\",\n  \"Database Mode\": \"データベースモード\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"このテーマへの変更をファイルシステムではなくデータベースに保存します\",\n  \"-- no parent --\": \"-- 親がいない --\",\n  \"Theme\": \"テーマ\",\n  \"Folders\": \"フォルダー\",\n  \"Please select the theme folders you would like to export\": \"エクスポートしたいテーマフォルダーを選択してください\",\n  \"Theme archive file\": \"テーマのアーカイブファイル\",\n  \"Overwrite existing files\": \"現在のファイルを上書きする\",\n  \"Untick this box to only import new files\": \"新しいファイルのみをインポートするには、このボックスのチェックを外します\",\n  \"Please select the theme folders you would like to import\": \"インポートしたいテーマフォルダーを選択してください\",\n  \"Activate\": \"現在アクティブ中です\",\n  \"Customize\": \"カスタマイズ\",\n  \"Duplicate\": \"複製\",\n  \"Duplicate Theme\": \"テーマの重複\",\n  \"Theme Duplicated!\": \"テーマが重複しました!\",\n  \"Manage\": \"管理\",\n  \"Manage Theme\": \"テーマの管理\",\n  \"Edit Properties\": \"プロパティの編集\",\n  \"Save Properties\": \"プロパティの保存\",\n  \"Import\": \"輸入\",\n  \"Import Theme\": \"テーマのインポート\",\n  \"Theme Imported!\": \"テーマがインポートされました!\",\n  \"Export\": \"輸出\",\n  \"Export Theme\": \"テーマのエクスポート\",\n  \"Delete\": \"消去\",\n  \"Delete this theme? It cannot be undone!\": \"このテーマを削除しますか?元に戻すことはできません!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"アクティブなテーマを削除できません。最初に別のテーマをアクティブにしてみてください。\",\n  \"Theme deleted!\": \"テーマが削除されました!\",\n  \"Create Theme\": \"テーマの作成\",\n  \"Create\": \"作成\",\n  \"Create a New Blank Theme\": \"新しい空のテーマを作成する\",\n  \"Theme Created!\": \"テーマが作成されました!\",\n  \"Please specify a name for the theme.\": \"テーマの名前を指定してください。\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"名前には、数字、ラテン文字、および次の記号のみを含めることができます: _-\",\n  \"Desired theme directory already exists.\": \"目的のテーマ ディレクトリは既に存在します。\",\n  \"Theme directory\": \"テーマディレクトリ\",\n  \"Provide a new directory name for the duplicated theme.\": \"複製したテーマの新しいディレクトリ名を指定します。\",\n  \"Find More Themes\": \"OctoberCMSマーケットプレースで、もっとテーマを探す。\",\n  \"Saving Theme...\": \"テーマを保存中...\",\n  \"Return to Themes List\": \"テーマ一覧に戻る\",\n  \"No themes found\": \"テーマが見つかりませんでした\",\n  \"Seed Theme\": \"シードのテーマ\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"指定されたテーマにブループリント、翻訳、データをシードします。\",\n  \"Theme Seeded!\": \"テーマがシードされました!\",\n  \"Select Page Link\": \"ページリンクの選択\",\n  \"Search all references...\": \"すべての参考文献を検索...\",\n  \"CMS Page\": \"CMSページ\",\n  \"Link\": \"リンク\",\n  \"Please select a CMS page\": \"CMS ページを選択してください\",\n  \"Please select a page reference\": \"ページ参照を選択してください\",\n  \"Please enter a valid URL\": \"有効なURLを入力してください\",\n  \"Delete Theme\": \"テーマの削除\",\n  \"Activate Theme\": \"テーマをアクティブ化する\",\n  \"Manage Partials\": \"パーシャルの管理\",\n  \"No Title\": \"タイトルなし\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"ページやレイアウトコードの中で使用される、一意のコンポーネント名。\",\n  \"Alias\": \"エイリアス\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"ラテン文字、数字、下線(_)で構成された、コンポーネントエイリアスが必要です。エイリアスはラテン文字で始まらなくてなりません。\",\n  \"Unnamed\": \"名前なし\",\n  \"No description provided\": \"説明なし\",\n  \"No snippets found\": \"スニペットが見つかりませんでした\",\n  \"Search...\": \"検索...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"要求されたコード :code を含むスニペットがテーマ内に見つかりませんでした。\",\n  \"Snippet\": \"スニペット\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"コードを入力して、この部分をコンテンツ エディターでスニペットとして利用できるようにします。\",\n  \"Please enter the snippet code\": \"スニペットコードを入力してください\",\n  \"Snippet Code\": \"スニペットコード\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"スニペットが追加されると、エディターのスニペット リストに名前が表示されます。\",\n  \"Please enter the snippet name\": \"スニペット名を入力してください\",\n  \"Property Title\": \"物件のタイトル\",\n  \"Please provide the property title\": \"物件タイトルを入力してください\",\n  \"Code\": \"コード\",\n  \"Please provide the property name\": \"物件名を入力してください\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"プロパティ コードはラテン文字で始まる必要があり、ラテン文字、数字、アンダースコアのみを含めることができます\",\n  \"Type\": \"タイプ\",\n  \"Select\": \"選択する\",\n  \"String\": \"弦\",\n  \"Checkbox\": \"チェックボックス\",\n  \"Dropdown\": \"落ちる\",\n  \"Please select the property type\": \"物件タイプを選択してください\",\n  \"Default\": \"デフォルト\",\n  \"Options\": \"オプション\",\n  \"Define a Snippet Partial\": \"スニペット部分を定義する\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"ドロップダウン オプション キーが無効です: :key。オプション キーには、数字、ラテン文字、_ および - のみを含めることができます。\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"スニペットが追加されると、エディターのスニペット リストに説明が表示されます。\",\n  \"Details\": \"詳細\"\n}"
  },
  {
    "path": "modules/cms/lang/kaa.json",
    "content": "{\n  \"Themes\": \"Temalar\",\n  \"Manage Themes\": \"Temalardı basqarıw\",\n  \"Customize Theme\": \"Tema sazlawı\",\n  \"Manage Maintenance Mode\": \"Xızmet kórsetiw rejimin basqarıw\",\n  \"View Website During Maintenance\": \"View Website During Maintenance\",\n  \"Manage Content\": \"Manage Content\",\n  \"Manage Asset Files\": \"Manage Asset Files\",\n  \"Manage Pages\": \"Betlerdi basqarıw\",\n  \"Manage Layouts\": \"Maketlerdi basqarıw\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configure the maintenance mode page and toggle the setting.\",\n  \"Maintenance Mode\": \"Xızmet kórsetiw rejimi\",\n  \"Select the page to show when maintenance mode is activated.\": \"Xızmet kórsetiw rejimi qosılǵanda kórsetiletuǵın betti tańlań.\",\n  \"Enable maintenance mode\": \"Xızmet kórsetiw rejimin qosıw\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\",\n  \"Resources\": \"Resurslar\",\n  \"Reference assets and variables included on this page.\": \"Reference assets and variables included on this page.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript file(s) in the assets/js folder\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"LESS file(s) in the assets/less folder\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS file(s) in the assets/scss folder\",\n  \"Variables\": \"Variables\",\n  \"Page variables name(s) and value(s)\": \"Page variables name(s) and value(s)\",\n  \"Headers\": \"Baslamalar\",\n  \"Page header name(s) and value(s)\": \"Page header name(s) and value(s)\",\n  \"Site Picker\": \"Site Picker\",\n  \"Displays links for selecting a different site.\": \"Displays links for selecting a different site.\",\n  \"Unknown component\": \"Unknown component\",\n  \"View Bag\": \"View Bag\",\n  \"Stores custom template properties.\": \"Stores custom template properties.\",\n  \"By :name\": \"Jaratıldı :name\",\n  \"The theme ':name' is not found.\": \"The theme ':name' is not found.\",\n  \"Manage the front-end theme and customization options.\": \"Manage the front-end theme and customization options.\",\n  \"Site Theme\": \"Frontend tema\",\n  \"Properties\": \"Qásiyetleri\",\n  \"Publish\": \"Publish\",\n  \"Advanced\": \"Qosımsha\",\n  \"Name\": \"Ataması\",\n  \"New theme name\": \"Jańa tema ataması\",\n  \"Author Name\": \"Avtor atı\",\n  \"Person or company name\": \"Avtor atı yamasa kompaniya ataması\",\n  \"Directory Name\": \"Katalog ataması\",\n  \"The destination theme directory\": \"The destination theme directory\",\n  \"Description\": \"Táriyp\",\n  \"Theme description\": \"Tema táriypi\",\n  \"Homepage\": \"Bas bet\",\n  \"Website URL\": \"Sayt mánzili\",\n  \"Author Code\": \"Avtor kodı\",\n  \"A unique code for the author used for distribution\": \"A unique code for the author used for distribution\",\n  \"Theme Code\": \"Tema kodı\",\n  \"A unique code for this theme used for distribution\": \"A unique code for this theme used for distribution\",\n  \"Parent Theme\": \"Parent Theme\",\n  \"Database Mode\": \"Maǵlıwmatlar bazası rejimi\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Temadaǵı ózgerislerdi maǵlıwmatlar bazasında saqlaw, fayl sisteması ornına\",\n  \"-- no parent --\": \"-- no parent --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Papkalar\",\n  \"Please select the theme folders you would like to export\": \"Please select the theme folders you would like to export\",\n  \"Theme archive file\": \"Theme archive file\",\n  \"Overwrite existing files\": \"Overwrite existing files\",\n  \"Untick this box to only import new files\": \"Untick this box to only import new files\",\n  \"Please select the theme folders you would like to import\": \"Please select the theme folders you would like to import\",\n  \"Activate\": \"Aktivlestiriw\",\n  \"Customize\": \"Sazlaw\",\n  \"Duplicate\": \"Nusqalaw\",\n  \"Duplicate Theme\": \"Temanı nusqalaw\",\n  \"Theme Duplicated!\": \"Tema nusqalandı!\",\n  \"Manage\": \"Basqarıw\",\n  \"Manage Theme\": \"Temanı basqarıw\",\n  \"Edit Properties\": \"Qásiyetlerdi ózgertiw\",\n  \"Save Properties\": \"Qásiyetlerdi saqlaw\",\n  \"Import\": \"Importlaw\",\n  \"Import Theme\": \"Temanı importlaw\",\n  \"Theme Imported!\": \"Tema tabıslı importlandı!\",\n  \"Export\": \"Eksportlaw\",\n  \"Export Theme\": \"Temanı eksportlaw\",\n  \"Delete\": \"Óshiriw\",\n  \"Delete this theme? It cannot be undone!\": \"Delete this theme? It cannot be undone!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Aktiv temanı óshiriw múmkin emes, birinshi basqa temanı aktiv qılıp kóriń.\",\n  \"Theme deleted!\": \"Tema tabıslı óshirildi!\",\n  \"Create Theme\": \"Tema jaratıw\",\n  \"Create\": \"Jaratıw\",\n  \"Create a New Blank Theme\": \"Jańa tema jaratıw\",\n  \"Theme Created!\": \"Tema tabıslı jaratıldı!\",\n  \"Please specify a name for the theme.\": \"Ótinish, tema atamasın kórsetiń.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Name can contain only digits, Latin letters and the following symbols: _-\",\n  \"Desired theme directory already exists.\": \"Kórsetilgen katalog álleqashan bar.\",\n  \"Theme directory\": \"Theme directory\",\n  \"Provide a new directory name for the duplicated theme.\": \"Provide a new directory name for the duplicated theme.\",\n  \"Find More Themes\": \"Basqa temalardı tabıw\",\n  \"Saving Theme...\": \"Tema saqlanbaqta...\",\n  \"Return to Themes List\": \"Temalar dizimine qaytıw\",\n  \"No themes found\": \"Temalar tabılmadı\",\n  \"Seed Theme\": \"Seed Theme\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seed the specified theme with blueprints, translations and data.\",\n  \"Theme Seeded!\": \"Theme Seeded!\",\n  \"Select Page Link\": \"Betke siltemeni tańlań\",\n  \"Search all references...\": \"Search all references...\",\n  \"CMS Page\": \"CMS beti\",\n  \"Link\": \"Silteme\",\n  \"Please select a CMS page\": \"CMS betin tańlań\",\n  \"Please select a page reference\": \"Ótinish, betke siltemeni tańlań\",\n  \"Please enter a valid URL\": \"Ótinish, jaramlı siltemeni kirgiziń\",\n  \"Delete Theme\": \"Temanı óshiriw\",\n  \"Activate Theme\": \"Temanı iske túsiriw\",\n  \"Manage Partials\": \"Manage Partials\",\n  \"No Title\": \"Baslamasız\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"A unique name given to this component when using it in the page or layout code.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\",\n  \"Unnamed\": \"Atamasız\",\n  \"No description provided\": \"No description provided\",\n  \"No snippets found\": \"No snippets found\",\n  \"Search...\": \"Izlew...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Snippet with the requested code :code was not found in the theme.\",\n  \"Snippet\": \"Snippet\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Enter a code to make this partial available as a snippet in content editors.\",\n  \"Please enter the snippet code\": \"Please enter the snippet code\",\n  \"Snippet Code\": \"Snippet Code\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"The name is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Please enter the snippet name\": \"Please enter the snippet name\",\n  \"Property Title\": \"Qásiyet ataması\",\n  \"Please provide the property title\": \"Qásiyet ushın baslamanı kórsetiń\",\n  \"Code\": \"Kod\",\n  \"Please provide the property name\": \"Qásiyet atamasın kórsetiń\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\",\n  \"Type\": \"Túri\",\n  \"Select\": \"Tańlaw\",\n  \"String\": \"Qatar\",\n  \"Checkbox\": \"Checkbox\",\n  \"Dropdown\": \"Dropdown\",\n  \"Please select the property type\": \"Ótinish, qásiyet túrin tańlań\",\n  \"Default\": \"Default\",\n  \"Options\": \"Options\",\n  \"Define a Snippet Partial\": \"Define a Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"The description is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Details\": \"Details\"\n}"
  },
  {
    "path": "modules/cms/lang/kk.json",
    "content": "{\n  \"Themes\": \"Themes\",\n  \"Manage Themes\": \"Manage Themes\",\n  \"Customize Theme\": \"Customize Theme\",\n  \"Manage Maintenance Mode\": \"Manage Maintenance Mode\",\n  \"View Website During Maintenance\": \"View Website During Maintenance\",\n  \"Manage Content\": \"Manage Content\",\n  \"Manage Asset Files\": \"Manage Asset Files\",\n  \"Manage Pages\": \"Manage Pages\",\n  \"Manage Layouts\": \"Manage Layouts\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configure the maintenance mode page and toggle the setting.\",\n  \"Maintenance Mode\": \"Maintenance Mode\",\n  \"Select the page to show when maintenance mode is activated.\": \"Select the page to show when maintenance mode is activated.\",\n  \"Enable maintenance mode\": \"Enable maintenance mode\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\",\n  \"Resources\": \"Resources\",\n  \"Reference assets and variables included on this page.\": \"Reference assets and variables included on this page.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript file(s) in the assets/js folder\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"LESS file(s) in the assets/less folder\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS file(s) in the assets/scss folder\",\n  \"Variables\": \"Variables\",\n  \"Page variables name(s) and value(s)\": \"Page variables name(s) and value(s)\",\n  \"Headers\": \"Headers\",\n  \"Page header name(s) and value(s)\": \"Page header name(s) and value(s)\",\n  \"Site Picker\": \"Site Picker\",\n  \"Displays links for selecting a different site.\": \"Displays links for selecting a different site.\",\n  \"Unknown component\": \"Unknown component\",\n  \"View Bag\": \"View Bag\",\n  \"Stores custom template properties.\": \"Stores custom template properties.\",\n  \"By :name\": \"By :name\",\n  \"The theme ':name' is not found.\": \"The theme ':name' is not found.\",\n  \"Manage the front-end theme and customization options.\": \"Manage the front-end theme and customization options.\",\n  \"Site Theme\": \"Site Theme\",\n  \"Properties\": \"Properties\",\n  \"Publish\": \"Publish\",\n  \"Advanced\": \"Advanced\",\n  \"Name\": \"Name\",\n  \"New theme name\": \"New theme name\",\n  \"Author Name\": \"Author Name\",\n  \"Person or company name\": \"Person or company name\",\n  \"Directory Name\": \"Directory Name\",\n  \"The destination theme directory\": \"The destination theme directory\",\n  \"Description\": \"Description\",\n  \"Theme description\": \"Theme description\",\n  \"Homepage\": \"Homepage\",\n  \"Website URL\": \"Website URL\",\n  \"Author Code\": \"Author Code\",\n  \"A unique code for the author used for distribution\": \"A unique code for the author used for distribution\",\n  \"Theme Code\": \"Theme Code\",\n  \"A unique code for this theme used for distribution\": \"A unique code for this theme used for distribution\",\n  \"Parent Theme\": \"Parent Theme\",\n  \"Database Mode\": \"Database Mode\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Save changes to this theme in the database instead of the filesystem\",\n  \"-- no parent --\": \"-- no parent --\",\n  \"Theme\": \"Theme\",\n  \"Folders\": \"Folders\",\n  \"Please select the theme folders you would like to export\": \"Please select the theme folders you would like to export\",\n  \"Theme archive file\": \"Theme archive file\",\n  \"Overwrite existing files\": \"Overwrite existing files\",\n  \"Untick this box to only import new files\": \"Untick this box to only import new files\",\n  \"Please select the theme folders you would like to import\": \"Please select the theme folders you would like to import\",\n  \"Activate\": \"Activate\",\n  \"Customize\": \"Customize\",\n  \"Duplicate\": \"Duplicate\",\n  \"Duplicate Theme\": \"Duplicate Theme\",\n  \"Theme Duplicated!\": \"Theme Duplicated!\",\n  \"Manage\": \"Manage\",\n  \"Manage Theme\": \"Manage Theme\",\n  \"Edit Properties\": \"Edit Properties\",\n  \"Save Properties\": \"Save Properties\",\n  \"Import\": \"Import\",\n  \"Import Theme\": \"Import Theme\",\n  \"Theme Imported!\": \"Theme Imported!\",\n  \"Export\": \"Export\",\n  \"Export Theme\": \"Export Theme\",\n  \"Delete\": \"Delete\",\n  \"Delete this theme? It cannot be undone!\": \"Delete this theme? It cannot be undone!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Cannot delete the active theme, try making another theme active first.\",\n  \"Theme deleted!\": \"Theme deleted!\",\n  \"Create Theme\": \"Create Theme\",\n  \"Create\": \"Create\",\n  \"Create a New Blank Theme\": \"Create a New Blank Theme\",\n  \"Theme Created!\": \"Theme Created!\",\n  \"Please specify a name for the theme.\": \"Please specify a name for the theme.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Name can contain only digits, Latin letters and the following symbols: _-\",\n  \"Desired theme directory already exists.\": \"Desired theme directory already exists.\",\n  \"Theme directory\": \"Theme directory\",\n  \"Provide a new directory name for the duplicated theme.\": \"Provide a new directory name for the duplicated theme.\",\n  \"Find More Themes\": \"Find More Themes\",\n  \"Saving Theme...\": \"Saving Theme...\",\n  \"Return to Themes List\": \"Return to Themes List\",\n  \"No themes found\": \"No themes found\",\n  \"Seed Theme\": \"Seed Theme\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seed the specified theme with blueprints, translations and data.\",\n  \"Theme Seeded!\": \"Theme Seeded!\",\n  \"Select Page Link\": \"Select Page Link\",\n  \"Search all references...\": \"Search all references...\",\n  \"CMS Page\": \"CMS Page\",\n  \"Link\": \"Link\",\n  \"Please select a CMS page\": \"Please select a CMS page\",\n  \"Please select a page reference\": \"Please select a page reference\",\n  \"Please enter a valid URL\": \"Please enter a valid URL\",\n  \"Delete Theme\": \"Delete Theme\",\n  \"Activate Theme\": \"Activate Theme\",\n  \"Manage Partials\": \"Manage Partials\",\n  \"No Title\": \"No Title\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"A unique name given to this component when using it in the page or layout code.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\",\n  \"Unnamed\": \"Unnamed\",\n  \"No description provided\": \"No description provided\",\n  \"No snippets found\": \"No snippets found\",\n  \"Search...\": \"Search...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Snippet with the requested code :code was not found in the theme.\",\n  \"Snippet\": \"Snippet\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Enter a code to make this partial available as a snippet in content editors.\",\n  \"Please enter the snippet code\": \"Please enter the snippet code\",\n  \"Snippet Code\": \"Snippet Code\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"The name is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Please enter the snippet name\": \"Please enter the snippet name\",\n  \"Property Title\": \"Property Title\",\n  \"Please provide the property title\": \"Please provide the property title\",\n  \"Code\": \"Code\",\n  \"Please provide the property name\": \"Please provide the property name\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\",\n  \"Type\": \"Type\",\n  \"Select\": \"Select\",\n  \"String\": \"String\",\n  \"Checkbox\": \"Checkbox\",\n  \"Dropdown\": \"Dropdown\",\n  \"Please select the property type\": \"Please select the property type\",\n  \"Default\": \"Default\",\n  \"Options\": \"Options\",\n  \"Define a Snippet Partial\": \"Define a Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"The description is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Details\": \"Details\"\n}"
  },
  {
    "path": "modules/cms/lang/ko/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => '올바르지않은 파일명: :name .파일명은 영문자, 언더스코어(_), 하이픈(-), 피리오드(.) 로만 구성되어야 합니다. (올바른파일명예: page, page.htm, subdirectory/page)',\n    'invalid_property' => '\":name\" 속성(Property)을 할당할 수 없습니다.',\n    'file_already_exists' => '이미 \":name\"이 존재합니다.',\n    'error_saving' => '\":name\" 파일 저장 오류',\n    'error_creating_directory' => ':name 디렉토리 작성 오류',\n    'invalid_file_extension' => '올바르지 않은 파일 확장자: :invalid. 허가된 확장자는 :allowed 입니다.',\n    'error_deleting' => '\":name\" 파일 삭제 오류',\n    'delete_success' => ':count 개의 템플릿을 삭제했습니다.',\n    'file_name_required' => '파일명 필드가 필요합니다.',\n    'safe_mode_enabled' => '안전모드가 활성화 되었습니다.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => '웹사이트',\n      'online' => '온라인',\n      'maintenance' => '유지보수중',\n      'manage_themes' => '테마관리',\n      'customize_theme' => '테마변경',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => '활성 테마가 설정되어 있지 않습니다.',\n      'not_found' => '활성 테마를 발견할 수 없습니다.',\n    ],\n    'edit' => [\n      'not_set' => '편집 테마가 설정되어있지 않습니다.',\n      'not_found' => '편집 테마를 발견할 수 없습니다.',\n      'not_match' => '접근하려는 오브젝트는 편집 테마에 속할 수 없습니다. 페이지를 다시 로드해주세요.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => '\\':name\\' 페이지가 없습니다.',\n    'not_found' => [\n      'label' => '페이지를 찾을 수 없습니다.',\n      'help' => '요청 페이지를 찾을 수 없었습니다.',\n    ],\n    'custom_error' => [\n      'label' => '페이지 오류',\n      'help' => '죄송합니다. 뭔가 문제가 있는것 같아 페이지를 표시할 수 없습니다.',\n    ],\n    'menu_label' => '페이지',\n    'unsaved_label' => '저장안한 페이지',\n    'no_list_records' => '페이지를 찾을 수 없습니다',\n    'new' => '신규 페이지',\n    'invalid_url' => '올바르지 않은 URL형식。URL은 슬래쉬(/)로 시작 숫자, 알파벳, ._-[]:?|/+*^$ 로 구성됩니다.',\n    'delete_confirm_multiple' => '선택하신 페이지 전체를 정말로 삭제하시겠습니까?',\n    'delete_confirm_single' => '선택하신 페이지를 삭제하시겠습니까?',\n    'no_layout' => '-- 레이아웃 없음 --',\n    'title' => '페이지 제목',\n    'url' => '페이지 URL',\n    'file_name' => '페이지 파일 이름',\n  ],\n  'layout' => [\n    'not_found_name' => '\\':name\\' 레이아웃이 없습니다.',\n    'menu_label' => '레이아웃',\n    'unsaved_label' => '저장하지 않은 레이아웃',\n    'no_list_records' => '레이아웃을 발견할 수 없습니다',\n    'new' => '신규 레이아웃',\n    'delete_confirm_multiple' => '선택하신 레이아웃 전체를 정말로 삭제하시겠습니까?',\n    'delete_confirm_single' => '선택하신 레이아웃을 삭제하시겠씁니까?',\n  ],\n  'partial' => [\n    'not_found_name' => '\\':name\\' 파셜이 없습니다.',\n    'invalid_name' => '올바르지 않은 파셜명: :name',\n    'menu_label' => '파셜',\n    'unsaved_label' => '저장하지 않은 파셜',\n    'no_list_records' => '파셜을 발견할 수 없습니다',\n    'delete_confirm_multiple' => '선택하신 파셜 전체를 정말로 삭제하시겠습니까?',\n    'delete_confirm_single' => '선택하신 파셜을 삭제하시겠습니까?',\n    'new' => '신규 파셜',\n  ],\n  'content' => [\n    'not_found_name' => '\\':name\\' 콘텐츠 파일이 없습니다.',\n    'menu_label' => '콘텐츠',\n    'unsaved_label' => '저장하지 않은 콘텐츠',\n    'no_list_records' => '콘텐츠 파일을 발견할 수 없습니다',\n    'delete_confirm_multiple' => '선택하신 콘텐츠/디렉토리 전체를 정말로 삭제하시겠습니까?',\n    'delete_confirm_single' => '선택하신 콘첸츠 파일을 삭제하시겠습니까?',\n    'new' => '신규 콘텐츠 파일',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => '올바르지 않은 Ajax핸들러이름: :name',\n    'not_found' => '\\':name\\' Ajax핸들러를 찾을 수 없습니다.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => '추가',\n    'search' => '검색...',\n  ],\n  'editor' => [\n    'settings' => '설정',\n    'title' => '타이틀',\n    'new_title' => '신규 페이지 타이틀',\n    'url' => 'URL',\n    'filename' => '파일명',\n    'layout' => '레이아웃',\n    'description' => '설명',\n    'preview' => '미리보기',\n    'meta' => '메타',\n    'meta_title' => '메타 타이틀',\n    'meta_description' => '메타 설명',\n    'markup' => '마크업',\n    'code' => '코드',\n    'content' => '콘텐츠',\n    'hidden' => '표시안함',\n    'hidden_comment' => '프론트엔드에 페이지를 표시하지 않습니다. 백엔드에서 보기/편집이 가능합니다.',\n    'enter_fullscreen' => '전체화면모드',\n    'exit_fullscreen' => '전체화면모드 해제',\n    'open_searchbox' => '검색 열기',\n    'open_replacebox' => '교체 열기',\n  ],\n  'asset' => [\n    'menu_label' => '자산',\n    'unsaved_label' => '저장하지 않은 자산',\n    'drop_down_add_title' => '추가...',\n    'drop_down_operation_title' => '동작...',\n    'upload_files' => '파일 업로드',\n    'create_file' => '파일 작성',\n    'create_directory' => '디렉토리 작성',\n    'directory_popup_title' => '신규 디렉토리',\n    'directory_name' => '디렉토리명',\n    'rename' => '이름변경',\n    'delete' => '삭제',\n    'move' => '이동',\n    'select' => '선택',\n    'new' => '신규 파일',\n    'rename_popup_title' => '이름변경',\n    'rename_new_name' => '새 이름',\n    'invalid_path' => '경로는 숫자, 알파벳, 공백, ._-/로 구성되어야 합니다.',\n    'error_deleting_file' => ':name 파일 삭제 오류',\n    'error_deleting_dir_not_empty' => ':name 디렉토리 삭제 오류. 디렉토리가 비어있지 않습니다.',\n    'error_deleting_dir' => ':name 디렉토리 삭제 오류.',\n    'invalid_name' => '이름은 숫자, 알파벳, 공백, ._-로 구성되어야 합니다.',\n    'original_not_found' => '본래의 파일/디렉토리를 발견할 수 없습니다',\n    'already_exists' => '이 이름의 파일/디렉토리가 이미 존재합니다.',\n    'error_renaming' => '파일/디렉토리 이름변경 오류',\n    'name_cant_be_empty' => '이름은 공백으로만 할 수 없습니다',\n    'too_large' => '업로드 파일이 너무 큽니다. 파일 사이즈는 최대 :max_size 입니다.',\n    'type_not_allowed' => '허가된 파일타입은  :allowed_types 입니다.',\n    'file_not_valid' => '파일이 올바르지 않습니다.',\n    'error_uploading_file' => '파일 업로드 오류: \":name\"',\n    'move_please_select' => '선택해 주세요',\n    'move_destination' => '목표 디렉토리',\n    'move_popup_title' => '자산 이동',\n    'move_button' => '이동',\n    'selected_files_not_found' => '선택한 파일이 존재하지 않습니다.',\n    'select_destination_dir' => '이동 목적지 디렉토리를 선택해주세요.',\n    'destination_not_found' => '이동 목적지 디렉토리가 존재하지 않습니다.',\n    'error_moving_file' => ':file 파일 이동 오류',\n    'error_moving_directory' => ':dir 디렉토리 이동 오류',\n    'error_deleting_directory' => ':dir 디렉토리 삭제 오류',\n    'no_list_records' => '파일을 발견할 수 없습니다',\n    'delete_confirm' => '선택한 파일이나 폴더를 삭제하시겠습니까?',\n    'path' => '경로',\n  ],\n  'component' => [\n    'menu_label' => '컴포넌트',\n    'invalid_request' => '컴포넌트 데이터가 올바르지 않아서 템플릿을 저장할 수 없습니다.',\n    'no_records' => '컴포넌트가 없습니다.',\n    'not_found' => '\\':name\\' 컴포넌트를 발견할 수 없습니다.',\n    'method_not_found' => '\\':name\\' 컴포넌트는 \\':method\\' 메소드를 가지고있지 않습니다.',\n  ],\n  'template' => [\n    'invalid_type' => '알수없는 템플릿 타입',\n    'not_found' => '요청한 템플릿이 없습니다.',\n    'saved' => '템플릿을 저장합니다.',\n    'no_list_records' => '템플릿을 찾을 수 없습니다',\n    'delete_confirm' => '선택한 템플릿을 삭제하시겠습니까?',\n    'order_by' => '정렬방법',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => '콘텐츠 관리',\n    'manage_assets' => '자산 관리',\n    'manage_pages' => '페이지 관리',\n    'manage_layouts' => '레이아웃 관리',\n    'manage_partials' => '파셜 관리',\n    'manage_themes' => '테마 관리',\n  ],\n  'theme_log' => [\n    'hint' => '백엔드에서 관리자에 의해 변경된 테마의 변경사항에 대한 로그를 표시합니다.',\n    'menu_label' => '테마 로그',\n    'menu_description' => '활성 테마 변경 표시',\n    'empty_link' => '테마 로그 비우기',\n    'empty_loading' => '테마 로그 비우는 중...',\n    'empty_success' => '테마 로그를 비웠습니다',\n    'return_link' => '테마 로그로 돌아가기',\n    'id' => 'ID',\n    'id_label' => '로그 ID',\n    'created_at' => '날짜 & 시간',\n    'user' => '유저',\n    'type' => '타입',\n    'type_create' => '생성',\n    'type_update' => '변경',\n    'type_delete' => '삭제',\n    'theme_name' => '테마명',\n    'theme_code' => '테마코드',\n    'old_template' => '템플릿(이전)',\n    'new_template' => '템플릿(신규)',\n    'template' => '템플릿',\n    'diff' => '변경점',\n    'old_value' => '이전 값',\n    'new_value' => '신규 값',\n    'preview_title' => '템플릿 변경',\n    'template_updated' => '템플릿이 변경되었습니다',\n    'template_created' => '템플릿이 생성되었습니다',\n    'template_deleted' => '템플릿이 삭제되었습니다',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/ko.json",
    "content": "{\n  \"Themes\": \"테마목록\",\n  \"Manage Themes\": \"테마 관리\",\n  \"Customize Theme\": \"테마 변경\",\n  \"Manage Maintenance Mode\": \"유지 관리 모드 관리\",\n  \"View Website During Maintenance\": \"유지보수 중 웹사이트 보기\",\n  \"Manage Content\": \"콘텐츠 관리\",\n  \"Manage Asset Files\": \"자산 파일 관리\",\n  \"Manage Pages\": \"페이지 관리\",\n  \"Manage Layouts\": \"레이아웃 관리\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"유지보수모드 페이지의 설정과 변경을 합니다.\",\n  \"Maintenance Mode\": \"유지보수모드\",\n  \"Select the page to show when maintenance mode is activated.\": \"유지보수모드일때 웹사이트 방문자가 보는 페이지를 선택해주세요.\",\n  \"Enable maintenance mode\": \"유지보수모드 활성화\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"유지보수모드는 백엔드에 로그인하지않은 방문자에 유지보수안내 페이지를 표시합니다.\",\n  \"Resources\": \"자원\",\n  \"Reference assets and variables included on this page.\": \"이 페이지에 포함된 참조 자산 및 변수.\",\n  \"JavaScript\": \"자바스크립트\",\n  \"JavaScript file(s) in the assets/js folder\": \"assets/js 폴더의 JavaScript 파일\",\n  \"LESS\": \"더 적은\",\n  \"LESS file(s) in the assets/less folder\": \"assets/less 폴더의 LESS 파일\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"assets/scss 폴더의 SCSS 파일\",\n  \"Variables\": \"변수\",\n  \"Page variables name(s) and value(s)\": \"페이지 변수 이름 및 값\",\n  \"Headers\": \"헤더\",\n  \"Page header name(s) and value(s)\": \"페이지 헤더 이름 및 값\",\n  \"Site Picker\": \"사이트 선택기\",\n  \"Displays links for selecting a different site.\": \"다른 사이트를 선택하기 위한 링크를 표시합니다.\",\n  \"Unknown component\": \"알 수 없는 구성 요소\",\n  \"View Bag\": \"가방 보기\",\n  \"Stores custom template properties.\": \"사용자 지정 템플릿 속성을 저장합니다.\",\n  \"By :name\": \"By :name\",\n  \"The theme ':name' is not found.\": \"':name' 테마를 찾을 수 없습니다.\",\n  \"Manage the front-end theme and customization options.\": \"설치된 테마와 활성 테마 목록의 미리보기.\",\n  \"Site Theme\": \"프론트엔드 테마\",\n  \"Properties\": \"속성\",\n  \"Publish\": \"게시\",\n  \"Advanced\": \"고급의\",\n  \"Name\": \"이름\",\n  \"New theme name\": \"신규 테마명\",\n  \"Author Name\": \"작성자\",\n  \"Person or company name\": \"개인/회사 이름\",\n  \"Directory Name\": \"디렉토리 이름\",\n  \"The destination theme directory\": \"목표 테마 디렉토리\",\n  \"Description\": \"설명\",\n  \"Theme description\": \"테마 설명\",\n  \"Homepage\": \"홈페이지\",\n  \"Website URL\": \"웹사이트 URL\",\n  \"Author Code\": \"작성자 코드\",\n  \"A unique code for the author used for distribution\": \"배포에 사용되는 저자 고유 코드\",\n  \"Theme Code\": \"코드\",\n  \"A unique code for this theme used for distribution\": \"배포를 위한 고유한 코드\",\n  \"Parent Theme\": \"상위 테마\",\n  \"Database Mode\": \"데이터베이스 모드\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"파일 시스템 대신 데이터베이스에 이 테마에 대한 변경 사항을 저장합니다.\",\n  \"-- no parent --\": \"-- 부모 없음 --\",\n  \"Theme\": \"속성 변경\",\n  \"Folders\": \"폴더목록\",\n  \"Please select the theme folders you would like to export\": \"내보내기 원하는 테마 폴더를 선택하세요.\",\n  \"Theme archive file\": \"테마 보관 파일\",\n  \"Overwrite existing files\": \"현재 파일 덮어쓰기\",\n  \"Untick this box to only import new files\": \"없는 파일판 가져오기 원할경우 체크 해제\",\n  \"Please select the theme folders you would like to import\": \"가져오기 원하는 테마 폴더를 선택하세요.\",\n  \"Activate\": \"활성화\",\n  \"Customize\": \"테마변경\",\n  \"Duplicate\": \"테마복사\",\n  \"Duplicate Theme\": \"테마 복사\",\n  \"Theme Duplicated!\": \"테마가 복사되었습니다!\",\n  \"Manage\": \"테마관리\",\n  \"Manage Theme\": \"테마 관리\",\n  \"Edit Properties\": \"속성변경\",\n  \"Save Properties\": \"속성 저장\",\n  \"Import\": \"가져오기\",\n  \"Import Theme\": \"테마 가져오기\",\n  \"Theme Imported!\": \"테마 가져오기가 완료되었습니다!\",\n  \"Export\": \"내보내기\",\n  \"Export Theme\": \"테마 내보내기\",\n  \"Delete\": \"삭제\",\n  \"Delete this theme? It cannot be undone!\": \"이 테마를 삭제하시겠습니까? 되돌릴 수 없습니다!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"활성 테마는 삭제할 수 없습니다. 다른 테마를 활성상태로 변경하세요.\",\n  \"Theme deleted!\": \"테마가 삭제되었습니다!\",\n  \"Create Theme\": \"테마 생성\",\n  \"Create\": \"생성\",\n  \"Create a New Blank Theme\": \"신규 테마 생성\",\n  \"Theme Created!\": \"테마가 생성되었습니다!\",\n  \"Please specify a name for the theme.\": \"테마 이름을 설정하세요.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"디렉토리 이름은 오직 숫자, 알파벳, 언더스코어와 하이픈(_,-)만 가능합니다.\",\n  \"Desired theme directory already exists.\": \"원하는 디렉토리가 이미 있습니다.\",\n  \"Theme directory\": \"테마 디렉토리\",\n  \"Provide a new directory name for the duplicated theme.\": \"복제된 테마를 위한 신규 디렉토리 이름을 설정하세요.\",\n  \"Find More Themes\": \"테마 더 찾아보기\",\n  \"Saving Theme...\": \"테마를 저장하는 중입니다...\",\n  \"Return to Themes List\": \"테마 목록으로 돌아가기\",\n  \"No themes found\": \"테마를 찾을 수 없습니다.\",\n  \"Seed Theme\": \"씨앗 테마\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"청사진, 번역 및 데이터로 지정된 테마를 시드합니다.\",\n  \"Theme Seeded!\": \"테마 시드!\",\n  \"Select Page Link\": \"페이지 링크 선택\",\n  \"Search all references...\": \"모든 참조 검색...\",\n  \"CMS Page\": \"CMS 페이지\",\n  \"Link\": \"링크\",\n  \"Please select a CMS page\": \"CMS 페이지를 선택하십시오\",\n  \"Please select a page reference\": \"페이지 참조를 선택하십시오\",\n  \"Please enter a valid URL\": \"유효한 URL을 입력 해주세요\",\n  \"Delete Theme\": \"테마 삭제\",\n  \"Activate Theme\": \"테마 활성화\",\n  \"Manage Partials\": \"부분 관리\",\n  \"No Title\": \"제목 없음\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"페이지나 레이아웃 코드에서 사용하는 고유 컴포넌트 이름.\",\n  \"Alias\": \"별칭\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"알파벳, 숫자, 언더스코어(_)로 구성한 컴포넌트 별칭이 필요합니다. 별칭은 알파벳으로 시작해야 합니다.\",\n  \"Unnamed\": \"이름없음\",\n  \"No description provided\": \"설명없음\",\n  \"No snippets found\": \"스니펫을 찾을 수 없습니다.\",\n  \"Search...\": \"찾다...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"요청된 코드가 포함된 스니펫 :code를 테마에서 찾을 수 없습니다.\",\n  \"Snippet\": \"단편\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"콘텐츠 편집기에서 이 부분을 스니펫으로 사용할 수 있도록 코드를 입력하세요.\",\n  \"Please enter the snippet code\": \"스니펫 코드를 입력하세요.\",\n  \"Snippet Code\": \"스니펫 코드\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"스니펫이 추가되면 편집기의 스니펫 목록에 이름이 표시됩니다.\",\n  \"Please enter the snippet name\": \"스니펫 이름을 입력하세요.\",\n  \"Property Title\": \"부동산 제목\",\n  \"Please provide the property title\": \"부동산 제목을 입력하세요.\",\n  \"Code\": \"암호\",\n  \"Please provide the property name\": \"속성 이름을 입력하세요.\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"속성 코드는 라틴 문자로 시작해야 하며 라틴 문자, 숫자 및 밑줄만 포함할 수 있습니다.\",\n  \"Type\": \"유형\",\n  \"Select\": \"선택하다\",\n  \"String\": \"끈\",\n  \"Checkbox\": \"체크박스\",\n  \"Dropdown\": \"쓰러지 다\",\n  \"Please select the property type\": \"속성 유형을 선택하세요.\",\n  \"Default\": \"기본\",\n  \"Options\": \"옵션\",\n  \"Define a Snippet Partial\": \"스니펫 부분 정의\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"잘못된 드롭다운 옵션 키: :key. 옵션 키는 숫자, 라틴 문자 및 문자 _ 및 -만 포함할 수 있습니다.\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"스니펫이 추가되면 편집기의 스니펫 목록에 설명이 표시됩니다.\",\n  \"Details\": \"세부\"\n}"
  },
  {
    "path": "modules/cms/lang/lt/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Netinkamas failo pavadinimas: :name. Failo pavadinimą gali sudaryti tik skaičiai, raidės, brūkšneliai bei taškai. Keletas pavyzdžių: puslapis.htm, puslapis, direktorija/puslapis, puslapis_2, naujas-puslapis',\n    'invalid_property' => 'Savybės \\':name\\' negalima nustatyti',\n    'file_already_exists' => 'Failas pavadinimu \\':name\\' jau yra.',\n    'error_saving' => 'Klaida išsaugant failą \\':name\\'. Patikrinkite katalogo įrašymo nustatymus serveryje.',\n    'error_creating_directory' => 'Nepavyko sukurti direktorijos :name. Patikrinkite katalogo įrašymo nustatymus serveryje.',\n    'invalid_file_extension' => 'Netinkama failo galūnė: :invalid. Leistinos galūnės yra: :allowed.',\n    'error_deleting' => 'Nepavyko ištrinti šablono \\':name\\'. Patikrinkite katalogo įrašymo nustatymus serveryje.',\n    'delete_success' => 'Ištrinta šablonų: :count.',\n    'file_name_required' => 'Failko pavadinimo laukelis yra būtinas.',\n    'safe_mode_enabled' => 'Saugusis režimas šiuo metu įjungtas.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Tinklalapis',\n      'online' => 'Įjungtas',\n      'maintenance' => 'Aptarnavimo režime',\n      'manage_themes' => 'Tvarkyti dizainus',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktyvusis dizainas yra nenustatytas.',\n      'not_found' => 'Aktyvusis dizainas nerastas.',\n    ],\n    'edit' => [\n      'not_set' => 'Redaguojamas dizainas nenustatytas.',\n      'not_found' => 'Redaguojamas dizainas nerastas.',\n      'not_match' => 'Objektas, kurį bandote prieiti nepriklauso redaguojamam dizainui. Perkraukite puslapį.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Puslapis \\':name\\' nerastas',\n    'not_found' => [\n      'label' => 'Puslapis nerstas',\n      'help' => 'Negalime rasti užklaustojo puslapio.',\n    ],\n    'custom_error' => [\n      'label' => 'Puslapio klaida',\n      'help' => 'Atsiprašome, tačiau dėl galimų klaidų užklaustojo puslapio rodyti nepavyko.',\n    ],\n    'menu_label' => 'Puslapiai',\n    'unsaved_label' => 'Neišsaugoti puslapiai',\n    'no_list_records' => 'Puslapių nėra',\n    'new' => 'Naujas puslapis',\n    'invalid_url' => 'Netinkamas URL formatas. URL turėtų prasidėti simboliu / ir susidaryti iš skaitmenų, Lotyniškų raidžių bei šių simbolių: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Trinti pasirinktus puslapius?',\n    'delete_confirm_single' => 'Trinti šį puslapį?',\n    'no_layout' => '-- be šablono --',\n    'title' => 'Puslapio pavadinimas',\n    'url' => 'Puslapio URL',\n    'file_name' => 'Puslapio failo pavadinimas',\n  ],\n  'layout' => [\n    'not_found_name' => 'Šablonas \\':name\\' nerastas',\n    'menu_label' => 'Šablonai',\n    'unsaved_label' => 'Neišsaugoti šablonai',\n    'no_list_records' => 'Šablonų nėra',\n    'new' => 'Naujas šablonas',\n    'delete_confirm_multiple' => 'Trinti pasirinktus šablonus?',\n    'delete_confirm_single' => 'Trinti šį šabloną?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Priedėlis \\':name\\' nerastas.',\n    'invalid_name' => 'Netinkamas priedėlio pavadinimas: :name.',\n    'menu_label' => 'Priedėliai',\n    'unsaved_label' => 'Neišsaugoti priedėliai',\n    'no_list_records' => 'Priedėlių nėra',\n    'delete_confirm_multiple' => 'Trinti pasirinktus priedėlius?',\n    'delete_confirm_single' => 'Trinti šį priedėlį?',\n    'new' => 'Naujas priedėlis',\n  ],\n  'content' => [\n    'not_found_name' => 'Turinio failas \\':name\\' nerastas.',\n    'menu_label' => 'Turinys',\n    'unsaved_label' => 'Neišsaugotas turinys',\n    'no_list_records' => 'Turinio failų nėra',\n    'delete_confirm_multiple' => 'Trinti pasirinktus turinio failus ar direktorijas?',\n    'delete_confirm_single' => 'Trinti šį turinio failą?',\n    'new' => 'Nauajs turinio failas',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Netinkamas AJAX tvarkiklis pavadinimas: :name.',\n    'not_found' => 'AJAX tvarkiklis \\':name\\' nerastas.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Pridėti',\n    'search' => 'Ieškoti...',\n  ],\n  'editor' => [\n    'settings' => 'Nustatymai',\n    'title' => 'Pavadinimas',\n    'new_title' => 'Naujas puslapio pavadinimas',\n    'url' => 'URL',\n    'filename' => 'Failo pavadinimas',\n    'layout' => 'Šablonas',\n    'description' => 'Aprašymas',\n    'preview' => 'Peržiūra',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Pavadinimas',\n    'meta_description' => 'Meta Aprašymas',\n    'markup' => 'Aprašas (markup)',\n    'code' => 'Kodas',\n    'content' => 'Turinys',\n    'hidden' => 'Paslėptas',\n    'hidden_comment' => 'paslėptus puslapius gali matyti tik į administracinę zoną prisijungę nariai.',\n    'enter_fullscreen' => 'Eiti į pilno ekrano vaizdą',\n    'exit_fullscreen' => 'Išeiti iš pilno ekrano vaizdo',\n    'open_searchbox' => 'Atidaryti paieškos laukelį',\n    'open_replacebox' => 'Atidaryti pakeitimo laukelį',\n  ],\n  'asset' => [\n    'menu_label' => 'Aktyvai',\n    'unsaved_label' => 'Neišsaugoti aktyvai',\n    'drop_down_add_title' => 'Pridėti...',\n    'drop_down_operation_title' => 'Veiksmas...',\n    'upload_files' => 'Įkelti failus',\n    'create_file' => 'Sukurti failą',\n    'create_directory' => 'Sukurti direktoriją',\n    'directory_popup_title' => 'Nauja direktorija',\n    'directory_name' => 'Direktorijos pavadinimas',\n    'rename' => 'Pervadinti',\n    'delete' => 'Ištrinti',\n    'move' => 'Perkelti',\n    'select' => 'Pasirinkti',\n    'new' => 'Naujas failas',\n    'rename_popup_title' => 'Pervadinti',\n    'rename_new_name' => 'Naujas pavadinimas',\n    'invalid_path' => 'Kelią gali sudaryti tik skaitmenys, Lotyniškos raidės, tarpeliai bei šie simboliai: ._-/',\n    'error_deleting_file' => 'Klaida trinant failą :name.',\n    'error_deleting_dir_not_empty' => 'Klaida trinant direktoriją :name. Direktorija nėra tuščia.',\n    'error_deleting_dir' => 'Klaida trinant direktoriją :name.',\n    'invalid_name' => 'Pavadinimą gali sudaryti tik skaitmenys, Lotyniškos raidės, tarpeliai bei šie simboliai: ._-',\n    'original_not_found' => 'Nerandame pirminio failo ar direktorijos',\n    'already_exists' => 'Failas ar direktorija šiuo pavadinimu jau yra',\n    'error_renaming' => 'Klaida pervadinant failą ar direktoriją',\n    'name_cant_be_empty' => 'Pavadinimas negali būti tuščias',\n    'too_large' => 'Įkeliamas failas yra per didelis. Leistinas failo dydis yra :max_size',\n    'type_not_allowed' => 'Tik šie failų tipai yra leistini: :allowed_types',\n    'file_not_valid' => 'Netinkamas failas',\n    'error_uploading_file' => 'Klaida įkeliant failą \\':name\\': :error',\n    'move_please_select' => 'prašome pasirinkti',\n    'move_destination' => 'Direktorija',\n    'move_popup_title' => 'Perkelti aktyvus',\n    'move_button' => 'Perkelti',\n    'selected_files_not_found' => 'Neradome pasirinktų failų',\n    'select_destination_dir' => 'Pasirinkite direktoriją',\n    'destination_not_found' => 'Direktorijos neradome',\n    'error_moving_file' => 'Klaida perkeliant failą :file',\n    'error_moving_directory' => 'Klaida perkeliant direktoriją :dir',\n    'error_deleting_directory' => 'Klaida trinant pirminę direktoriją :dir',\n    'no_list_records' => 'Failų nėra',\n    'delete_confirm' => 'Trinti pasirinktus failus ar direktorijas?',\n    'path' => 'Kelias',\n  ],\n  'component' => [\n    'menu_label' => 'Komponentai',\n    'invalid_request' => 'Šablono išsaugoti nepavyko dėl netinkamų komponento savybių.',\n    'no_records' => 'Komponentų nėra',\n    'not_found' => 'Komponento \\':name\\' neradome.',\n    'method_not_found' => 'Komponente \\':name\\' nėra metodo \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Nežinomas šablono tipas.',\n    'not_found' => 'Šablonas nerastas.',\n    'saved' => 'Šablonas išsaugotas.',\n    'no_list_records' => 'Įrašų nėra',\n    'delete_confirm' => 'Ištrinti pasirinktus šablonus?',\n    'order_by' => 'Rūšiuoti pagal',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Tvarkyti svetainės turinio failus',\n    'manage_assets' => 'Tvarkyti svetainės aktyvus - paveiksliukus, JavaScript failus, CSS failus',\n    'manage_pages' => 'Kurti, redaguoti ir trinti svetainės puslapius',\n    'manage_layouts' => 'Kurti, redaguoti ir trinti CMS išvaizdos šablonus',\n    'manage_partials' => 'Kurti, redaguoti ir trinti CMS priedėlius',\n    'manage_themes' => 'Aktyvuoti, deaktyvuoti bei konfigūruoti CMS dizainus',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/lt.json",
    "content": "{\n  \"Themes\": \"Dizainai\",\n  \"Manage Themes\": \"Tvarkyti temas\",\n  \"Customize Theme\": \"Modifikuoti Dizainą\",\n  \"Manage Maintenance Mode\": \"Tvarkyti priežiūros režimą\",\n  \"View Website During Maintenance\": \"Peržiūrėkite svetainę priežiūros metu\",\n  \"Manage Content\": \"Tvarkyti turinį\",\n  \"Manage Asset Files\": \"Tvarkyti turto failus\",\n  \"Manage Pages\": \"Tvarkyti puslapius\",\n  \"Manage Layouts\": \"Tvarkyti maketus\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfigūruokite aptarnavimo režimo puslapį bei perjunkite režimo statusą.\",\n  \"Maintenance Mode\": \"Aptarnavimo režimas\",\n  \"Select the page to show when maintenance mode is activated.\": \"Parinkite kurį puslapį rodysite lankytojams aptarnavimo režimo metu.\",\n  \"Enable maintenance mode\": \"Įjungti aptarnavimo režimą\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Aptarnavimo režimo metu lankytojams, kurie nėra prisijungę į administracinę zoną, bus rodomas Jūsų nustatytas puslapis.\",\n  \"Resources\": \"Ištekliai\",\n  \"Reference assets and variables included on this page.\": \"Šiame puslapyje esantys nuorodos ištekliai ir kintamieji.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"„JavaScript“ failas (-ai) išteklių / js aplanke\",\n  \"LESS\": \"MAŽIAU\",\n  \"LESS file(s) in the assets/less folder\": \"MAžiau failo (-ų) aplanke išteklių / mažiau\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS failą (-ius) išteklių / scss aplanke\",\n  \"Variables\": \"Kintamieji\",\n  \"Page variables name(s) and value(s)\": \"Puslapio kintamųjų pavadinimas (-ai) ir reikšmė (-ės)\",\n  \"Headers\": \"Antraštės\",\n  \"Page header name(s) and value(s)\": \"Puslapio antraštės pavadinimas (-ai) ir reikšmė (-ės)\",\n  \"Site Picker\": \"Svetainės parinkiklis\",\n  \"Displays links for selecting a different site.\": \"Rodomos kitos svetainės pasirinkimo nuorodos.\",\n  \"Unknown component\": \"Nežinomas komponentas\",\n  \"View Bag\": \"Žiūrėti krepšį\",\n  \"Stores custom template properties.\": \"Saugo tinkintų šablonų ypatybes.\",\n  \"By :name\": \"Pagal vardą\",\n  \"The theme ':name' is not found.\": \"Dizainas ':name' nerastas.\",\n  \"Manage the front-end theme and customization options.\": \"Peržiūrėkite įdiegtų dizainų sąrašą ir pasirinkite aktyvųjį dizainą.\",\n  \"Site Theme\": \"Svetainės dizainas\",\n  \"Properties\": \"Savybės\",\n  \"Publish\": \"Paskelbti\",\n  \"Advanced\": \"Išplėstinė\",\n  \"Name\": \"Pavadinimas\",\n  \"New theme name\": \"Naujo dizaino pavadinimas\",\n  \"Author Name\": \"Autorius\",\n  \"Person or company name\": \"Asmuo arba įmonė\",\n  \"Directory Name\": \"Direktorijos pavadinimas\",\n  \"The destination theme directory\": \"Kelias į dizaino direktoriją\",\n  \"Description\": \"Aprašymas\",\n  \"Theme description\": \"Dizaino aprašymas\",\n  \"Homepage\": \"Tinklalapis\",\n  \"Website URL\": \"Svetainės URL\",\n  \"Author Code\": \"Autoriaus kodas\",\n  \"A unique code for the author used for distribution\": \"Unikalus autoriaus kodas, naudojamas platinimui\",\n  \"Theme Code\": \"Kodas\",\n  \"A unique code for this theme used for distribution\": \"Unikalus dizaino kodas naudojamas platinant\",\n  \"Parent Theme\": \"Tėvų tema\",\n  \"Database Mode\": \"Duomenų bazės režimas\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Išsaugokite šios temos pakeitimus duomenų bazėje, o ne failų sistemoje\",\n  \"-- no parent --\": \"-- nėra tėvų --\",\n  \"Theme\": \"Dizainas\",\n  \"Folders\": \"Katalogai\",\n  \"Please select the theme folders you would like to export\": \"Pasirinkite katalogus, kuriuos norite eksportuoti\",\n  \"Theme archive file\": \"Dizaino archyvas\",\n  \"Overwrite existing files\": \"Perrašyti esančius failus\",\n  \"Untick this box to only import new files\": \"Nuimkite varnelę jei norite įkelti tik naujus failus\",\n  \"Please select the theme folders you would like to import\": \"Pasirinkite katalogus, kuriuos norite importuoti\",\n  \"Activate\": \"Aktyvuoti\",\n  \"Customize\": \"Modifikuoti\",\n  \"Duplicate\": \"Duplikuoti\",\n  \"Duplicate Theme\": \"Duplikuoti dizainą\",\n  \"Theme Duplicated!\": \"Dizainą duplikavome!\",\n  \"Manage\": \"Tvarkyti\",\n  \"Manage Theme\": \"Tvarkyti dizainą\",\n  \"Edit Properties\": \"Redaguoti nustatymus\",\n  \"Save Properties\": \"Išsaugoti nustatymus\",\n  \"Import\": \"Importuoti\",\n  \"Import Theme\": \"Importuoti dizainą\",\n  \"Theme Imported!\": \"Dizainą importavome!\",\n  \"Export\": \"Eksportuoti\",\n  \"Export Theme\": \"Eksportuoti dizainą\",\n  \"Delete\": \"Trinti\",\n  \"Delete this theme? It cannot be undone!\": \"Ar tikrai norite ištrinti šį dizainą? Atstatyti nebus įmanoma!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Negalime ištrinti aktyviojo dizaino. Priskirkite kitą dizainą kaip aktyvųjį ir bandykite dar kartą.\",\n  \"Theme deleted!\": \"Dizainą ištrynėme!\",\n  \"Create Theme\": \"Kurti dizainą\",\n  \"Create\": \"Kurti\",\n  \"Create a New Blank Theme\": \"Kurti naują tuščią dizainą\",\n  \"Theme Created!\": \"Dizainas sukurtas!\",\n  \"Please specify a name for the theme.\": \"Nurodykite dizaino pavadinimą.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Pavadinimą gali sudaryti tik skaičiai, Lotyniškos raidės bei simboliai: _-\",\n  \"Desired theme directory already exists.\": \"Norimo dizaino direktorija jau egzistuoja.\",\n  \"Theme directory\": \"Dizaino direktorija\",\n  \"Provide a new directory name for the duplicated theme.\": \"Nurodykite naujos direktorijos pavadinimą duplikuojamam dizainui.\",\n  \"Find More Themes\": \"Raskite daugiau dizainų\",\n  \"Saving Theme...\": \"Išsaugome dizainą...\",\n  \"Return to Themes List\": \"Grįžti į dizainų sąrašą\",\n  \"No themes found\": \"Nerasta jokių temų\",\n  \"Seed Theme\": \"Sėklų tema\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Pateikite nurodytą temą su brėžiniais, vertimais ir duomenimis.\",\n  \"Theme Seeded!\": \"Išsėta tema!\",\n  \"Select Page Link\": \"Pasirinkite Puslapio nuoroda\",\n  \"Search all references...\": \"Ieškoti visose nuorodose...\",\n  \"CMS Page\": \"CMS puslapis\",\n  \"Link\": \"Nuoroda\",\n  \"Please select a CMS page\": \"Pasirinkite TVS puslapį\",\n  \"Please select a page reference\": \"Pasirinkite puslapio nuorodą\",\n  \"Please enter a valid URL\": \"Prašome įvesti teisingą URL adresą\",\n  \"Delete Theme\": \"Ištrinti temą\",\n  \"Activate Theme\": \"Suaktyvinti temą\",\n  \"Manage Partials\": \"Tvarkyti dalines dalis\",\n  \"No Title\": \"Be pavadinimo\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Unikalus vardas skiriamas šiam komponentui kai naudojate jį puslapyje ar šablone.\",\n  \"Alias\": \"Užvadintas\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Komponentų užvadiniai yra būtini ir gali susidaryti tik iš Lotyniškų raidžių, skaitmenų bei _. Užvadiniai turi prasidėti Lotyniška reide.\",\n  \"Unnamed\": \"Neužvadintas\",\n  \"No description provided\": \"Nėra aprašymo\",\n  \"No snippets found\": \"Fragmentų nerasta\",\n  \"Search...\": \"Paieška...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Temoje nerastas fragmentas su prašomu kodu :code.\",\n  \"Snippet\": \"Fragmentas\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Įveskite kodą, kad ši dalis būtų pasiekiama kaip fragmentas turinio rengyklėse.\",\n  \"Please enter the snippet code\": \"Įveskite fragmento kodą\",\n  \"Snippet Code\": \"Fragmento kodas\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Pridėjus fragmentą, pavadinimas rodomas redaktoriaus fragmentų sąraše.\",\n  \"Please enter the snippet name\": \"Įveskite fragmento pavadinimą\",\n  \"Property Title\": \"Nuosavybės pavadinimas\",\n  \"Please provide the property title\": \"Nurodykite nuosavybės pavadinimą\",\n  \"Code\": \"Kodas\",\n  \"Please provide the property name\": \"Nurodykite nuosavybės pavadinimą\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Nuosavybės kodas turi prasidėti lotyniška raide ir jame gali būti tik lotyniškos raidės, skaitmenys ir apatiniai brūkšniai\",\n  \"Type\": \"Tipas\",\n  \"Select\": \"Pasirinkite\",\n  \"String\": \"Styga\",\n  \"Checkbox\": \"Žymimasis langelis\",\n  \"Dropdown\": \"Išskleidžiamasis meniu\",\n  \"Please select the property type\": \"Pasirinkite nuosavybės tipą\",\n  \"Default\": \"Numatytas\",\n  \"Options\": \"Galimybės\",\n  \"Define a Snippet Partial\": \"Apibrėžkite dalinį fragmentą\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Neteisingas išskleidžiamojo meniu parinkties raktas: :key. Parinkčių klavišus gali sudaryti tik skaitmenys, lotyniškos raidės ir simboliai _ ir -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Pridedant fragmentą aprašas rodomas redagavimo priemonės fragmentų sąraše.\",\n  \"Details\": \"Detalės\"\n}"
  },
  {
    "path": "modules/cms/lang/lv/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nederīgs faila nosaukums: :name. Failu nosaukumi drīkst sastāvēt tikai no cipariem/burtiem, apakšsvītrām, šķērssvītrām un punktiem. Daži pareizi piemēri: lapa.htm, lapa, direktorija/lapa',\n    'invalid_property' => 'Īpašuma nosaukums \\':name\\' nevar tikt iestatīts',\n    'file_already_exists' => 'Fails \\':name\\' jau eksistē.',\n    'error_saving' => 'Kļūda saglabājot failu \\':name\\'. Lūdzu pārbaudiet rakstīšanas tiesības.',\n    'error_creating_directory' => 'Kļūda izveidojot direktoriju :name. Lūdzu pārbaudiet rakstīšanas tiesības.',\n    'invalid_file_extension' => 'Nederīgs faila tips: :invalid. Atļautie tipi: :allowed.',\n    'error_deleting' => 'Kūda dzēšot veidnes failu \\':name\\'. Lūdzu pārbaudiet rakstīšanas tiesības.',\n    'delete_success' => 'Tika veiksmīgi izdzēstas veidnes: :count.',\n    'file_name_required' => 'Faila nosaukuma lauks ir obligāts.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'online' => 'online',\n      'maintenance' => 'atkopšana',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktīvā tēma netika iestatīta.',\n      'not_found' => 'Aktīvā tēma netika atrasta.',\n    ],\n    'edit' => [\n      'not_set' => 'Labotā tēma netika iestatīta.',\n      'not_found' => 'Labotā tēma netika atrasta.',\n      'not_match' => 'Objekts, kuru mēģinat labot nepieder tēmai, kuru šobrīd labojat. Lūdzu pārlādējiet lapu.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Lapa \\':name\\' netika atrasta',\n    'not_found' => [\n      'label' => 'Lapa nav atrasta',\n      'help' => 'Pieprasītā lapa nav atrasta.',\n    ],\n    'custom_error' => [\n      'label' => 'Lapas kļūda',\n      'help' => 'Mums žēl, bet kaut kas nogāja greizi un lapa nevar tikt attēlota.',\n    ],\n    'menu_label' => 'Lapas',\n    'unsaved_label' => 'Nesaglabāta lapa(s)',\n    'no_list_records' => 'Nav lapu',\n    'new' => 'Jauna lapa',\n    'invalid_url' => 'Nederīgs URL formāts. URL vajadzētu sākties ar šķērssvītras simbolu un tā var saturēt skaitļus, Latīņu burtus un sekojošos simbolus: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Vai tiešām vēlaties idzēst izvēlētās lapas?',\n    'delete_confirm_single' => 'Vai tiešām vēlaties dzēst šo lapu?',\n    'no_layout' => '-- bez izkārtojuma --',\n  ],\n  'layout' => [\n    'not_found_name' => 'Izkārtojums \\':name\\' netika atrasts',\n    'menu_label' => 'Izkārtojumi',\n    'unsaved_label' => 'Nesaglabāts izkārtojums(i)',\n    'no_list_records' => 'Nav izkārtojumu',\n    'new' => 'Jauns izkārtojums',\n    'delete_confirm_multiple' => 'Vai tiešām vēlaties izdzēst izvēlētos izkārtojumus?',\n    'delete_confirm_single' => 'Vai tiešām vēlaties dzēst šo izkārtojumu?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Daļa \\':name\\' netika atrasta.',\n    'invalid_name' => 'Nederīgs daļas nosaukums: :name.',\n    'menu_label' => 'Daļas',\n    'unsaved_label' => 'Nesaglabāta daļa(s)',\n    'no_list_records' => 'Daļas nav atrastas',\n    'delete_confirm_multiple' => 'Vai tiešām vēlaties izdzēst izvēlētās daļas?',\n    'delete_confirm_single' => 'Vai tiešām vēlaties dzēst šo daļu?',\n    'new' => 'Jauna daļa',\n  ],\n  'content' => [\n    'not_found_name' => 'Satura fails \\':name\\' netika atrasts.',\n    'menu_label' => 'Saturs',\n    'unsaved_label' => 'Nesaglabāts saturs',\n    'no_list_records' => 'Nav satura failu',\n    'delete_confirm_multiple' => 'Vai tiešām vēlaties izdzēst izbēlētos satura failus vai mapes?',\n    'delete_confirm_single' => 'Vai tiešām vēlaties dzēst šo satura failu?',\n    'new' => 'Jauns satura fails',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Nederīgs AJAX handler nosaukums: :name.',\n    'not_found' => 'AJAX handler \\':name\\' netika atrasts.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Pievienot',\n    'search' => 'Meklēt...',\n  ],\n  'editor' => [\n    'settings' => 'Iestatījumi',\n    'title' => 'Virsraksts',\n    'new_title' => 'Jauns lapas virsraksts',\n    'url' => 'URL',\n    'filename' => 'Faila nosaukums',\n    'layout' => 'Izkārtojums',\n    'description' => 'Apraksts',\n    'preview' => 'Priekšskatījums',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Virsraksts',\n    'meta_description' => 'Meta Apraksts',\n    'markup' => 'Markup',\n    'code' => 'Code',\n    'content' => 'Saturs',\n    'hidden' => 'Paslēpt',\n    'hidden_comment' => 'Paslēptās lapas ir pieejamas tikai autorizētiem back-end lietotājiem.',\n    'enter_fullscreen' => 'Pilnkekrāna režīms',\n    'exit_fullscreen' => 'Iziet no pilnekrāna režīma',\n  ],\n  'asset' => [\n    'menu_label' => 'Papildinājumi',\n    'unsaved_label' => 'Nesaglabāts papildinājums(i)',\n    'drop_down_add_title' => 'Pievienot...',\n    'drop_down_operation_title' => 'Daarbība...',\n    'upload_files' => 'Augšupielādēt failu(us)',\n    'create_file' => 'Izveidot failu',\n    'create_directory' => 'Izveidot mapi',\n    'directory_popup_title' => 'Jauna mape',\n    'directory_name' => 'Mapes nosaukums',\n    'rename' => 'Pārsaukt',\n    'delete' => 'Dzēst',\n    'move' => 'Pārvietot',\n    'select' => 'Izvēlēties',\n    'new' => 'Jauns fails',\n    'rename_popup_title' => 'Pārsaukt',\n    'rename_new_name' => 'Jauns nosaukums',\n    'invalid_path' => 'Ceļš var saturēt tikai skaitļus, Latīņu burtus, atstarpes un sekojošos simbolus: ._-/',\n    'error_deleting_file' => 'Kļūda dzēšot failu :name.',\n    'error_deleting_dir_not_empty' => 'Kļūda dzēšot mapi :name. Mape nav tukša.',\n    'error_deleting_dir' => 'Kļūda dzēšot failu :name.',\n    'invalid_name' => 'Nosaukums var saturēt tikai skaitļus, Latīņu burtus, atstarpes un sekojošos simbolus: ._-',\n    'original_not_found' => 'Oriģinālais fails vai mape netika atrasts',\n    'already_exists' => 'Fails vai mape ar šo nosaukumu jau eksistē',\n    'error_renaming' => 'Kļūda pārdēvējot failu vai mapi',\n    'name_cant_be_empty' => 'Nosaukums nevar būt tukšums',\n    'too_large' => 'Augšupielādētais fails ir pārāk liels. Maksimālais atļautais faila izmērs :max_size',\n    'type_not_allowed' => 'Tikai sekojošie failu tipi ir atļauti: :allowed_types',\n    'file_not_valid' => 'Fails nav derīgs',\n    'error_uploading_file' => 'Kļūda augšupielādējot failu \\':name\\': :error',\n    'move_please_select' => 'lūdzu izvēlieties',\n    'move_destination' => 'Mērķa mape',\n    'move_popup_title' => 'Pārvietot papildinājumus',\n    'move_button' => 'Pārvietot',\n    'selected_files_not_found' => 'Izvēlētie faili nav atrasti',\n    'select_destination_dir' => 'Lūdzu izvēlieties mērķdirektoriju',\n    'destination_not_found' => 'Mērķdirektorija nav atrasta',\n    'error_moving_file' => 'Kļūda pārvietojot failu :file',\n    'error_moving_directory' => 'Kļūda pārvietojot mapi :dir',\n    'error_deleting_directory' => 'Kļūda dzēšot oriģinālo mapi :dir',\n    'path' => 'Ceļš',\n  ],\n  'component' => [\n    'menu_label' => 'Komponenti',\n    'invalid_request' => 'The template cannot be saved because of invalid component data.',\n    'no_records' => 'Nav komponentu',\n    'not_found' => 'Komponents \\':name\\' netika atrasts.',\n    'method_not_found' => 'Komponents \\':name\\' nesatur metodi \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Nezināms veidnes tips.',\n    'not_found' => 'Pieprasītā veidne nav atrasta.',\n    'saved' => 'Fails tika veiksmīgi saglabāts.',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Pārvaldīt saturu',\n    'manage_assets' => 'Pārvaldīt papildinājumus',\n    'manage_pages' => 'Pārvaldīt lapas',\n    'manage_layouts' => 'Pārvaldīt izkārtojumus',\n    'manage_partials' => 'Pārvaldīt daļas',\n    'manage_themes' => 'Pārvaldīt tēmas',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/lv.json",
    "content": "{\n  \"Themes\": \"Tēmas\",\n  \"Manage Themes\": \"Pārvaldīt motīvus\",\n  \"Customize Theme\": \"Pielāgot tēmu\",\n  \"Manage Maintenance Mode\": \"Pārvaldīt uzturēšanas režīmu\",\n  \"View Website During Maintenance\": \"Apkopes laikā skatiet vietni\",\n  \"Manage Content\": \"Pārvaldīt saturu\",\n  \"Manage Asset Files\": \"Pārvaldīt līdzekļu failus\",\n  \"Manage Pages\": \"Pārvaldīt lapas\",\n  \"Manage Layouts\": \"Pārvaldīt izkārtojumus\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfigurējiet apkopes režīma lapu un pielāgojiet iestatījumus.\",\n  \"Maintenance Mode\": \"Apkopes režīms\",\n  \"Select the page to show when maintenance mode is activated.\": \"Kad aktivizēts mājaslapas apmeklētāji redzēs zemāk izvēlēto lapu.\",\n  \"Enable maintenance mode\": \"Iespējot apkopes režīmu\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Apkopes režīmā apkopes lapa tiks rādīta apmeklētājiem, kuri nav pierakstījušies aizmugures apgabalā.\",\n  \"Resources\": \"Resursi\",\n  \"Reference assets and variables included on this page.\": \"Šajā lapā iekļautie atsauces līdzekļi un mainīgie.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript fails(-i) aktīvu/js mapē\",\n  \"LESS\": \"MAZĀK\",\n  \"LESS file(s) in the assets/less folder\": \"MAZĀK failu(-u) mapē līdzekļi/mazāk\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS fails(-i) aktīvu/scss mapē\",\n  \"Variables\": \"Mainīgie\",\n  \"Page variables name(s) and value(s)\": \"Lapas mainīgo nosaukums(-i) un vērtība(-s)\",\n  \"Headers\": \"Virsraksti\",\n  \"Page header name(s) and value(s)\": \"Lapas galvenes nosaukums(-i) un vērtība(-as)\",\n  \"Site Picker\": \"Vietnes atlasītājs\",\n  \"Displays links for selecting a different site.\": \"Parāda saites, lai atlasītu citu vietni.\",\n  \"Unknown component\": \"Nezināms komponents\",\n  \"View Bag\": \"Skatīt somu\",\n  \"Stores custom template properties.\": \"Saglabā pielāgotas veidnes rekvizītus.\",\n  \"By :name\": \"Autors: vārds\",\n  \"The theme ':name' is not found.\": \"Tēma ':name' netika atrasta.\",\n  \"Manage the front-end theme and customization options.\": \"Priekšskatiet instalētās tēmas un izvēlieties aktīvo tēmu.\",\n  \"Site Theme\": \"Front-end tēma\",\n  \"Properties\": \"Rekvizīti\",\n  \"Publish\": \"Publicēt\",\n  \"Advanced\": \"Papildu\",\n  \"Name\": \"Nosaukums\",\n  \"New theme name\": \"Jaunas tēmas nosaukums\",\n  \"Author Name\": \"Autors\",\n  \"Person or company name\": \"Personas vai kompānijas nosaukums\",\n  \"Directory Name\": \"Direktorijas nosaukums\",\n  \"The destination theme directory\": \"Tēmas mērķdirektorija\",\n  \"Description\": \"Apraksts\",\n  \"Theme description\": \"Tēmas apraksts\",\n  \"Homepage\": \"Mājaslapa\",\n  \"Website URL\": \"Mājaslapas URL\",\n  \"Author Code\": \"Autora kods\",\n  \"A unique code for the author used for distribution\": \"Izplatīšanai izmantots unikāls autora kods\",\n  \"Theme Code\": \"Kods\",\n  \"A unique code for this theme used for distribution\": \"Unikāls kods šai tēmai, tiek lietots pārdošanai\",\n  \"Parent Theme\": \"Vecāku tēma\",\n  \"Database Mode\": \"Datu bāzes režīms\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Saglabājiet izmaiņas šajā motīvā datu bāzē, nevis failu sistēmā\",\n  \"-- no parent --\": \"-- nav vecāku --\",\n  \"Theme\": \"Tēma\",\n  \"Folders\": \"Mapes\",\n  \"Please select the theme folders you would like to export\": \"Lūdzu izvēlieties tēmas mapes, kuras vēlaties eksportēt\",\n  \"Theme archive file\": \"Tēmas arhivētais fails\",\n  \"Overwrite existing files\": \"Pārrakstīt esošos failus\",\n  \"Untick this box to only import new files\": \"Izņemiet ķeksi, lai importētu tikai jaunos failus\",\n  \"Please select the theme folders you would like to import\": \"Lūdzu izvēlieties tēmas mapes, kuras vēlaties importēt\",\n  \"Activate\": \"Aktivizēt\",\n  \"Customize\": \"Pielāgot\",\n  \"Duplicate\": \"Dublēt\",\n  \"Duplicate Theme\": \"Dublēt tēmu\",\n  \"Theme Duplicated!\": \"Tēmas dublēšana notika veiksmīgi!\",\n  \"Manage\": \"Pārvaldīt\",\n  \"Manage Theme\": \"Pārvaldīt tēmu\",\n  \"Edit Properties\": \"Labot iestatījumus\",\n  \"Save Properties\": \"Saglabāt iestatījumus\",\n  \"Import\": \"Importēt\",\n  \"Import Theme\": \"Importēt tēmu\",\n  \"Theme Imported!\": \"Tēmas importēšanas notika veiksmīgi!\",\n  \"Export\": \"Eksportēt\",\n  \"Export Theme\": \"Eksportēt tēmu\",\n  \"Delete\": \"Dzēst\",\n  \"Delete this theme? It cannot be undone!\": \"Vai esat pārliecināts, ka vēlaties dzēst šo tēmu? Izmaiņas nevarēs atcelt!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Aktīvo tēmu nevar idzēst, vispirms padariet citu tēmu par aktīvo.\",\n  \"Theme deleted!\": \"Tēma veiksmīgi izdzēsta!\",\n  \"Create Theme\": \"Izveidot tēmu\",\n  \"Create\": \"Izveidot\",\n  \"Create a New Blank Theme\": \"Izveidot jaunu tukšu tēmu\",\n  \"Theme Created!\": \"Tēma tika veiksmīgi izveidota!\",\n  \"Please specify a name for the theme.\": \"Lūdzu norādiet tēmas nosaukumu.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Nosaukums drīkst saturēt tikai skaitļus, Latīņu burtus un sekojošos simbolus: _-\",\n  \"Desired theme directory already exists.\": \"Izvēlētā tēmas mape jau pastāv.\",\n  \"Theme directory\": \"Tēmas mape\",\n  \"Provide a new directory name for the duplicated theme.\": \"Norādiet mapi priekš dublētās tēmas.\",\n  \"Find More Themes\": \"Atrodast vairāk tēmas\",\n  \"Saving Theme...\": \"Saglabājam tēmu...\",\n  \"Return to Themes List\": \"Atgriezties tēmu sarakstā\",\n  \"No themes found\": \"Nav atrasta neviena tēma\",\n  \"Seed Theme\": \"Sēklu tēma\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Iesējiet norādīto tēmu ar rasējumiem, tulkojumiem un datiem.\",\n  \"Theme Seeded!\": \"Tēma Izsēta!\",\n  \"Select Page Link\": \"Atlasiet Lapas saite\",\n  \"Search all references...\": \"Meklēt visās atsaucēs...\",\n  \"CMS Page\": \"CMS lapa\",\n  \"Link\": \"Saite\",\n  \"Please select a CMS page\": \"Lūdzu, atlasiet SPS lapu\",\n  \"Please select a page reference\": \"Lūdzu, atlasiet lapas atsauci\",\n  \"Please enter a valid URL\": \"Lūdzu, ievadiet derīgu URL\",\n  \"Delete Theme\": \"Dzēst motīvu\",\n  \"Activate Theme\": \"Aktivizējiet motīvu\",\n  \"Manage Partials\": \"Pārvaldīt daļas\",\n  \"No Title\": \"Nav virsraksta\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Unikāls nosaukums šim komponentam kad tas tiek izmantots lapas vai izkārtojuma kodā.\",\n  \"Alias\": \"Saīsinājums\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Komponenta saīsinājums ir obligāts un var sastāvēt tikai no Latīņu simboliem, skaitļiem un apakšsvītrām. Saīsinājumiem vajadzētu sākties ar Latīņu simbolu.\",\n  \"Unnamed\": \"Nenosaukts\",\n  \"No description provided\": \"Apraksts nav norādīts\",\n  \"No snippets found\": \"Koda fragmenti netika atrasti\",\n  \"Search...\": \"Meklēt...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Koda fragments ar pieprasīto kodu :code netika atrasts tēmā.\",\n  \"Snippet\": \"Koda fragmenti\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Ievadi kodu, lai padarītu šo partialu par koda fragmentu.\",\n  \"Please enter the snippet code\": \"Lūdzu, ievadiet fragmenta kodu\",\n  \"Snippet Code\": \"Koda fragmenta kods\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Nosaukums tiks rādīts koda fragmentu sarakstā.\",\n  \"Please enter the snippet name\": \"Lūdzu, ievadiet fragmenta nosaukumu\",\n  \"Property Title\": \"Nosaukums\",\n  \"Please provide the property title\": \"Lūdzu, norādiet īpašuma nosaukumu\",\n  \"Code\": \"Kods\",\n  \"Please provide the property name\": \"Lūdzu, norādiet īpašuma nosaukumu\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Kodam vajadzētu sākties ar latīņu alfabēta burtu un tas var saturēt latīņu alfabēta burtus un ciparus\",\n  \"Type\": \"Tips\",\n  \"Select\": \"Izvēlieties\",\n  \"String\": \"Teksts\",\n  \"Checkbox\": \"Checkboksis\",\n  \"Dropdown\": \"Dropdowns\",\n  \"Please select the property type\": \"Lūdzu, atlasiet īpašuma veidu\",\n  \"Default\": \"Noklusējuma vērtība\",\n  \"Options\": \"Opcijas\",\n  \"Define a Snippet Partial\": \"Definējiet daļēju fragmentu\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Nekorekta dropdowna vērtība: :key.\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Pievienojot fragmentu, apraksts tiek parādīts redaktora fragmentu sarakstā.\",\n  \"Details\": \"Sīkāka informācija\"\n}"
  },
  {
    "path": "modules/cms/lang/nb-no/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Ugyldig filnavn: :name. Filnavn kan kun inneholde alfanumeriske tegn, understrek, bindestrek og punktum. Eksempel: page.htm, page, subdirectory/page',\n    'invalid_property' => 'Egenskapen \\':name\\' kan ikke settes',\n    'file_already_exists' => 'Filen \\':name\\' eksisterer allerede.',\n    'error_saving' => 'Kunne ikke lagre filen \\':name\\'. Vennligst sjekk skriverettigheter på serveren.',\n    'error_creating_directory' => 'Kunne ikke opprette mappen :name. Vennligst sjekk skriverettigheter på serveren.',\n    'invalid_file_extension' => 'Ugyldig filtype: :invalid. Tillatte filtyper er: :allowed.',\n    'error_deleting' => 'Kunne ikke slette filen \\':name\\'. Vennligst sjekk skriverettigheter på serveren.',\n    'delete_success' => 'Templates som ble slettet: :count.',\n    'file_name_required' => 'Filnavnfeltet er obligatorisk.',\n    'safe_mode_enabled' => 'Sikkert modus er aktivert.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Website',\n      'online' => 'Online',\n      'maintenance' => 'Vedlikeholdsmodus',\n      'manage_themes' => 'Administrer temaer',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktivt tema er ikke valgt.',\n      'not_found' => 'Aktivt tema ikke funnet.',\n    ],\n    'edit' => [\n      'not_set' => 'Redigeringstema er ikke valgt.',\n      'not_found' => 'Redigeringstema ikke funnet.',\n      'not_match' => 'Objektet du prøver å åpne tilhører ikke temaet som endres. Vennligst oppdater siden.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Siden \\':name\\' ble ikke funnet',\n    'not_found' => [\n      'label' => 'Side ikke funnet',\n      'help' => 'Den forespurte siden ble ikke funnet.',\n    ],\n    'custom_error' => [\n      'label' => 'Side-feil',\n      'help' => 'Noe gikk galt. Siden kan ikke vises.',\n    ],\n    'menu_label' => 'Sider',\n    'unsaved_label' => 'Ulagrede sider',\n    'no_list_records' => 'Ingen sider funnet',\n    'new' => 'Ny side',\n    'invalid_url' => 'Ugyldig URL-format. URL-en skal starte med skråstrek og kan inneholde tall, latinske bokstaver og følgende symbol: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Vil du virkelig slette valgte sider?',\n    'delete_confirm_single' => 'Vil du virkelig slette denne siden?',\n    'no_layout' => '-- ingen layout --',\n  ],\n  'layout' => [\n    'not_found_name' => 'Layouten \\':name\\' ble ikke funnet',\n    'menu_label' => 'Layouts',\n    'unsaved_label' => 'Ulagrede layouts',\n    'no_list_records' => 'Ingen layouts funnet',\n    'new' => 'Ny layout',\n    'delete_confirm_multiple' => 'Vil du virkelig slette valgte layouts?',\n    'delete_confirm_single' => 'Vil du virkelig slette denne layout?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Partial \\':name\\' ble ikke funnet.',\n    'invalid_name' => 'Ugyldig partial navn: :name.',\n    'menu_label' => 'Partials',\n    'unsaved_label' => 'Ulagrede partials',\n    'no_list_records' => 'Ingen partials funnet',\n    'delete_confirm_multiple' => 'Vil du virkelig slette valgte partials?',\n    'delete_confirm_single' => 'Vil du virkelig slette denne partialen?',\n    'new' => 'Ny partial',\n  ],\n  'content' => [\n    'not_found_name' => 'Innholdsfilen \\':name\\' ble ikke funnet.',\n    'menu_label' => 'Innhold',\n    'unsaved_label' => 'Ulagret innhold',\n    'no_list_records' => 'No content files found',\n    'delete_confirm_multiple' => 'Vil du virkelig slette valgte innholdsfiler eller -mapper?',\n    'delete_confirm_single' => 'Vil du virkelig slette denne innholdsfilen eller -mappen?',\n    'new' => 'Ny innholdsfil',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Ugyldig AJAX handler navn: :name.',\n    'not_found' => 'AJAX handler \\':name\\' ble ikke funnet.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Legg til',\n    'search' => 'Søk...',\n  ],\n  'editor' => [\n    'settings' => 'Innstillinger',\n    'title' => 'Tittel',\n    'new_title' => 'Ny side tittel',\n    'url' => 'URL',\n    'filename' => 'Filnavn',\n    'layout' => 'Layout',\n    'description' => 'Beskrivelse',\n    'preview' => 'Forhåndsvis',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta-tittel',\n    'meta_description' => 'Meta-beskrivelse',\n    'markup' => 'Markup',\n    'code' => 'Kode',\n    'content' => 'Innhold',\n    'hidden' => 'Skjult',\n    'hidden_comment' => 'Kun backend-brukere har tilgang til skjulte sider.',\n    'enter_fullscreen' => 'Fullskjermmodus',\n    'exit_fullscreen' => 'Avslutt fullskjermmodus',\n    'open_searchbox' => 'Vis søkefelt',\n    'open_replacebox' => 'Vis erstatt-felt',\n  ],\n  'asset' => [\n    'menu_label' => 'Ressurser',\n    'unsaved_label' => 'Ulagrede ressurser',\n    'drop_down_add_title' => 'Legg til...',\n    'drop_down_operation_title' => 'Handling...',\n    'upload_files' => 'Last opp fil(er)',\n    'create_file' => 'Opprett fil',\n    'create_directory' => 'Opprett mappe',\n    'directory_popup_title' => 'Ny mappe',\n    'directory_name' => 'Mappenavn',\n    'rename' => 'Nytt navn',\n    'delete' => 'Slett',\n    'move' => 'Flytt',\n    'select' => 'Velg',\n    'new' => 'Ny fil',\n    'rename_popup_title' => 'Nytt navn',\n    'rename_new_name' => 'Nytt navn',\n    'invalid_path' => 'Mappestien kan kun inneholde tall, latinske bokstaver, mellomrom og følgende symbol: ._-/',\n    'error_deleting_file' => 'Kunne ikke slette :name.',\n    'error_deleting_dir_not_empty' => 'Kunne ikke slette :name. Mappen er ikke tom.',\n    'error_deleting_dir' => 'Kunne ikke slette :name.',\n    'invalid_name' => 'Navnet kan kun inneholde tall, latinske bokstaver, mellomrom og følgende symbol: ._-',\n    'original_not_found' => 'Original fil eller mappe ikke funnet',\n    'already_exists' => 'Fil eller mappe med samme navn eksiterer allerede',\n    'error_renaming' => 'Kunne ikke gi filen eller mappen nytt navn',\n    'name_cant_be_empty' => 'Navnet kan ikke være tomt',\n    'too_large' => 'Opplastet fil er for stor. Maksimum filstørrelse er :max_size',\n    'type_not_allowed' => 'Kun følgende filtyper er tillat: :allowed_types',\n    'file_not_valid' => 'Filen er ugyldig',\n    'error_uploading_file' => 'Kunne ikke laste opp filen \\':name\\': :error',\n    'move_please_select' => 'velg',\n    'move_destination' => 'Målmappe',\n    'move_popup_title' => 'Flytt ressurser',\n    'move_button' => 'Flytt',\n    'selected_files_not_found' => 'Valgte filer ikke funnet',\n    'select_destination_dir' => 'Vennligst velg en målmappe',\n    'destination_not_found' => 'Målmappe ikke funnet',\n    'error_moving_file' => 'Kunne ikke flytte filen :file',\n    'error_moving_directory' => 'Kunne ikke flytte mappen :dir',\n    'error_deleting_directory' => 'Kunne ikke slette original mappe :dir',\n    'path' => 'Mål',\n  ],\n  'component' => [\n    'menu_label' => 'Komponenter',\n    'invalid_request' => 'Templaten kan ikke lagres på grunn av ugyldig komponentdata.',\n    'no_records' => 'Ingen komponenter funnet',\n    'not_found' => 'Komponenten \\':name\\' ble ikke funnet.',\n    'method_not_found' => 'Komponenten \\':name\\' inneholder ikke en metode \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Ukjent template-type.',\n    'not_found' => 'Forespurt template ikke funnet.',\n    'saved' => 'Templaten har blitt lagret.',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Administrer innholdsfiler',\n    'manage_assets' => 'Administrer ressurser',\n    'manage_pages' => 'Administrer sider',\n    'manage_layouts' => 'Administrer layouts',\n    'manage_partials' => 'Administrer partials',\n    'manage_themes' => 'Administrer maler',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/nb-no.json",
    "content": "{\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfigurer vedlikeholdsmodussiden og endre innstillinger.\",\n  \"Maintenance Mode\": \"Vedlikeholdsmodus\",\n  \"Select the page to show when maintenance mode is activated.\": \"Når aktivert, vil besøkende se følgende side:\",\n  \"Enable maintenance mode\": \"Aktivér vedlikeholdsmodus\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Vedlikeholdsmodus vil vise vedlikehodsmodussiden til besøkende som ikke er logget inn.\",\n  \"The theme ':name' is not found.\": \"Tema ':name' ble ikke funnet.\",\n  \"Manage the front-end theme and customization options.\": \"Forhåndsvis en liste over installerte temaer og velg et aktivt tema.\",\n  \"Site Theme\": \"Frontend tema\",\n  \"Properties\": \"Egenskaper\",\n  \"Name\": \"Navn\",\n  \"New theme name\": \"Temanavn\",\n  \"Author Name\": \"Forfatter\",\n  \"Person or company name\": \"Person eller bedrift\",\n  \"Directory Name\": \"Mappenavn\",\n  \"The destination theme directory\": \"Temaets mappenavn\",\n  \"Description\": \"Beskrivelse\",\n  \"Theme description\": \"Temabeskrivelse\",\n  \"Homepage\": \"Hjemmeside\",\n  \"Website URL\": \"Nettside-URL\",\n  \"Theme Code\": \"Kode\",\n  \"A unique code for this theme used for distribution\": \"En unik kode som brukes for distribusjon\",\n  \"Theme\": \"Tema\",\n  \"Customize Theme\": \"Tilpass tema\",\n  \"Folders\": \"Mapper\",\n  \"Please select the theme folders you would like to export\": \"Vennligst velg mappene du vil eksportere\",\n  \"Theme archive file\": \"Temaets arkivfil\",\n  \"Overwrite existing files\": \"Overskriv eksisterende filer\",\n  \"Untick this box to only import new files\": \"Fjern kryss for å kun importere nye filer\",\n  \"Please select the theme folders you would like to import\": \"Vennligst velg mappene du vil importere\",\n  \"Themes\": \"Temaer\",\n  \"Activate\": \"Aktivér\",\n  \"Customize\": \"Tilpass\",\n  \"Duplicate\": \"Duplisér\",\n  \"Duplicate Theme\": \"Duplisér tema\",\n  \"Theme Duplicated!\": \"Temaet har blitt duplisert!\",\n  \"Manage\": \"Administrer\",\n  \"Manage Theme\": \"Administrer tema\",\n  \"Edit Properties\": \"Endre egenskaper\",\n  \"Save Properties\": \"Lagre egenskaper\",\n  \"Import\": \"Importér\",\n  \"Import Theme\": \"Importér tema\",\n  \"Theme Imported!\": \"Temaet har blitt importert!\",\n  \"Export\": \"Eksportér\",\n  \"Export Theme\": \"Eksportér tema\",\n  \"Delete\": \"Slett\",\n  \"Delete this theme? It cannot be undone!\": \"Vil du virkelig slette dette temaet? Handlingen kan ikke angres!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Kan ikke slette det aktive temaet. Gjør et annet tema aktivt først.\",\n  \"Theme deleted!\": \"Temaet har blitt slettet!\",\n  \"Create Theme\": \"Opprett tema\",\n  \"Create\": \"Opprett\",\n  \"Create a New Blank Theme\": \"Lag et nytt blankt tema\",\n  \"Theme Created!\": \"Temaet har blitt opprettet!\",\n  \"Please specify a name for the theme.\": \"Vennligst gi temaet et navn.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Navnet kan kun inneholde tall, latinske bokstaver og følgende symbol: _-\",\n  \"Desired theme directory already exists.\": \"Temamappen eksiterer allerede.\",\n  \"Theme directory\": \"Temamappe\",\n  \"Provide a new directory name for the duplicated theme.\": \"Oppgi en ny mappe for det dupliserte temaet.\",\n  \"Find More Themes\": \"Finn flere temaer på OctoberCMS Theme Marketplace\",\n  \"Saving Theme...\": \"Lagrer tema...\",\n  \"Return to Themes List\": \"Tilbake til temaliste\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Et unikt navn gitt til komponenten for å benytte den i sider og layouts.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Komponentaliaser kan kun inneholde latinske symboler, tall og understreker. Aliaser skal starte med et latinsk symbol.\",\n  \"Unnamed\": \"Navnløs\",\n  \"No description provided\": \"Ingen beskrivelse spesifisert\",\n  \"No snippets found\": \"Ingen snippets funnet\",\n  \"Search...\": \"Søk...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"En snippet med koden :code ble ikke funnet.\",\n  \"Snippet\": \"Snippet\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Fyll inn en kode for å gjøre denne tilgjengelig som en snippet i Static Pages.\",\n  \"Snippet Code\": \"Snippet-kode\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Navnet som blir presentert i snippetlisten i Static Pages-menyen og når snippeten er lagt inn på en side.\",\n  \"Property Title\": \"Egenskap\",\n  \"Code\": \"Kode\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Egenskapkoden skal starte med en latinsk bokstav og kan kun inneholde bokstver og tall.\",\n  \"Type\": \"Type\",\n  \"String\": \"String\",\n  \"Checkbox\": \"Checkbox\",\n  \"Dropdown\": \"Dropdown\",\n  \"Default\": \"Standard\",\n  \"Options\": \"Alternativer\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Ugyldig dropdown-alternativ kode: %s. Alternativkoder kan bare inneholde tall, latinske bokstaver, _ og -\"\n}"
  },
  {
    "path": "modules/cms/lang/nl/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Ongeldige bestandsnaam: :name. Bestandsnamen mogen enkel bestaan uit letters, cijfers, underscores, streepjes en punten. Voorbeelden van correcte bestandsnamen: pagina.htm, pagina, map/pagina',\n    'invalid_file_inspector' => 'Ongeldige bestandsnaam. Bestandsnamen mogen enkel bestaan uit letters, cijfers, underscores, streepjes en punten. Voorbeelden van correcte bestandsnamen: pagina.htm, pagina, map/pagina',\n    'invalid_property' => 'Parameter \":name\" kan niet worden gewijzigd',\n    'file_already_exists' => 'Bestand \":name\" bestaat al.',\n    'error_saving' => 'Bestand opslaan mislukt: \":name\". Controleer de schrijfrechten.',\n    'error_creating_directory' => 'Map aanmaken mislukt: \":name\". Controleer de schrijfrechten.',\n    'invalid_file_extension' => 'Ongeldige bestandsextensie: :invalid. Toegestane extensies zijn: :allowed.',\n    'error_deleting' => 'Fout bij het verwijderen van template: \":name\". Controleer de schrijfrechten.',\n    'delete_success' => 'Templates zijn succesvol verwijderd: :count.',\n    'file_name_required' => 'Het invullen van een bestandsnaam is verplicht.',\n    'safe_mode_enabled' => 'Veilige modus is op dit moment ingeschakeld.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Website',\n      'online' => 'online',\n      'maintenance' => 'in onderhoud',\n      'manage_themes' => 'Beheer thema\\'s',\n      'customize_theme' => 'Thema aanpassen',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Er is geen actief thema geselecteerd.',\n      'not_found' => 'Het actieve thema is niet gevonden.',\n      'is_locked' => 'Het thema \\':theme\\' is geblokkeerd en kan niet worden gebruikt. Dupliceer het thema, of maak een child-thema.',\n    ],\n    'edit' => [\n      'not_set' => 'Er is geen thema ingesteld om te kunnen bewerken.',\n      'not_found' => 'Het te bewerken thema is niet gevonden.',\n      'not_match' => 'Het object dat je probeert te openen behoort niet tot het te bewerken thema. Herlaad de pagina.',\n    ],\n    'setting_edit_theme' => 'Wijzig bewerk-thema',\n    'edit_theme_changed' => 'Bewerk-thema is gewijzigd',\n  ],\n  'page' => [\n    'not_found_name' => 'De pagina \\':name\\' is niet gevonden.',\n    'not_found' => [\n      'label' => 'Pagina niet gevonden',\n      'help' => 'De opgevraagde pagina kan niet worden gevonden.',\n    ],\n    'custom_error' => [\n      'label' => 'Paginafout',\n      'help' => 'Onze excuses, er is iets mis gegaan. De opgevraagde pagina kan niet worden getoond.',\n    ],\n    'menu_label' => 'Pagina\\'s',\n    'unsaved_label' => 'Niet opgeslagen pagina\\'s',\n    'no_list_records' => 'Geen pagina\\'s gevonden',\n    'new' => 'Nieuwe pagina',\n    'invalid_url' => 'Ongeldig URL formaat. De URL moet beginnen met een schuine streep en mag enkel bestaan uit letters, cijfers en de volgende tekens: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Weet je zeker dat je de geselecteerde pagina\\'s wilt verwijderen?',\n    'delete_confirm_single' => 'Weet je zeker dat je deze pagina wilt verwijderen?',\n    'no_layout' => '-- geen layout --',\n    'title' => 'Paginatitel',\n    'url' => 'Pagina URL',\n    'url_required' => 'De pagina URL is verplicht.',\n    'file_name' => 'Pagina bestandsnaam',\n    'editor_node_name' => 'Pagina\\'s',\n    'editor_sorting' => 'Rangschik pagina\\'s',\n    'editor_sort_by_url' => 'URL',\n    'editor_sort_by_title' => 'Titel',\n    'editor_sort_by_file_name' => 'Bestandsnaam',\n    'editor_grouping' => 'Groupeer pagina\\'s',\n    'editor_group_by_filepath' => 'Bestandspad',\n    'editor_group_by_url' => 'URL',\n    'editor_display' => 'Weergave',\n    'editor_display_title' => 'Titel',\n    'editor_display_url' => 'URL',\n    'editor_display_file' => 'Bestandspad',\n    'editor_markup' => 'Opmaak',\n    'editor_code' => 'Code',\n    'description_hint' => 'De omschrijving is optioneel en alleen zichtbaar in de back-end.',\n    'create_new' => 'Nieuwe pagina',\n  ],\n  'layout' => [\n    'not_found_name' => 'De layout \\':name\\' is niet gevonden',\n    'menu_label' => 'Layouts',\n    'unsaved_label' => 'Niet opgeslagen layouts',\n    'no_list_records' => 'Geen layouts gevonden',\n    'new' => 'Nieuwe layout',\n    'delete_confirm_multiple' => 'Weet je zeker dat je de geselecteerde layouts wilt verwijderen?',\n    'delete_confirm_single' => 'Weet je zeker dat je deze layout wilt verwijderen?',\n    'editor_node_name' => 'Layouts',\n    'create_new' => 'Nieuwe layout',\n  ],\n  'partial' => [\n    'not_found_name' => 'Het partial \\':name\\' is niet gevonden.',\n    'invalid_name' => 'Ongeldige naam voor patial \\':name\\'.',\n    'menu_label' => 'Partials',\n    'unsaved_label' => 'Niet opgeslagen partials',\n    'no_list_records' => 'Geen partials gevonden',\n    'delete_confirm_multiple' => 'Weet je zeker dat je het geselecteerde partial wilt verwijderen?',\n    'delete_confirm_single' => 'Weet je zeker dat je deze partial wilt verwijderen?',\n    'editor_node_name' => 'Partials',\n    'new' => 'Nieuw partial',\n    'create_new' => 'Nieuw partial',\n  ],\n  'content' => [\n    'not_found_name' => 'Content \\':name\\' is niet gevonden.',\n    'menu_label' => 'Content',\n    'unsaved_label' => 'Niet opgeslagen content',\n    'no_list_records' => 'Geen content gevonden',\n    'delete_confirm_multiple' => 'Weet je zeker dat je de geselecteerde content of mappen wilt verwijderen?',\n    'delete_confirm_single' => 'Weet je zeker dat je deze content wilt verwijderen?',\n    'editor_node_name' => 'Content',\n    'new' => 'Nieuwe content',\n    'editor_content' => 'Content',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Ongeldige AJAX handlernaam: :name.',\n    'not_found' => 'AJAX handler \\':name\\' is niet gevonden.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Toevoegen',\n    'search' => 'Zoeken...',\n  ],\n  'editor' => [\n    'settings' => 'Instellingen',\n    'title' => 'Titel',\n    'new_title' => 'Nieuwe paginatitel',\n    'url' => 'URL',\n    'filename' => 'Bestandsnaam',\n    'layout' => 'CMS Layout',\n    'description' => 'Omschrijving',\n    'preview' => 'Voorbeeld',\n    'page' => 'CMS Pagina',\n    'edit_theme' => 'Bewerk-thema',\n    'change_edit_theme' => 'Wijzig bewerk-thema',\n    'edit_theme_saved_changed_tabs' => 'Je heb niet-opgeslagen wijzigingen in openstaande tabbladen. Sla de wijzigingen op of sluit de tabbladen om verder te gaan.',\n    'partial' => 'CMS Partial',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta titel',\n    'meta_description' => 'Meta omschrijving',\n    'markup' => 'Opmaak',\n    'code' => 'Code',\n    'content' => 'CMS Content',\n    'asset' => 'Asset',\n    'hidden' => 'Verborgen',\n    'hidden_comment' => 'Verborgen pagina zijn alleen toegankelijk voor ingelogde gebruikers.',\n    'priority' => 'Prioriteit',\n    'priority_comment' => 'Prioriteit Layouts laden de inhoud voor de pagina inhoud.',\n    'enter_fullscreen' => 'Volledig scherm starten',\n    'exit_fullscreen' => 'Volledig scherm afsluiten',\n    'open_searchbox' => 'Open zoekveld',\n    'open_replacebox' => 'Open vervang veld',\n    'commit' => 'Commit',\n    'reset' => 'Reset',\n    'commit_confirm' => 'Weet je zeker dat je je wijzigingen wilt opslaan op het bestandssysteem? Deze actie zal het huidige bestand overschrijven.',\n    'reset_confirm' => 'Weet je zeker dat je wilt terugkeren naar de vorige versie? Deze actie zal de vorige versie terugzetten en je wijzigingen zullen verloren gaan.',\n    'committing' => 'Committen',\n    'resetting' => 'Resetten',\n    'commit_success' => ':type is ge-commit naar het bestandssysteem',\n    'reset_success' => ':type is ge-reset op het bestandssysteem',\n    'error_loading_header' => 'Fout bij het laden van template',\n    'component_list' => 'Componenten',\n    'component_list_description' => 'Klik of sleep het component naar de editor om deze toe te voegen.',\n    'info' => 'Info',\n    'refresh' => 'Vernieuwen',\n    'create' => 'Maak nieuwe',\n    'manage_themes' => 'Beheer thema\\'s',\n    'error_no_doctype_permissions' => 'Je hebt onvoldoende rechten om het documenttype :doctype te beheren.',\n  ],\n  'asset' => [\n    'menu_label' => 'Assets',\n    'unsaved_label' => 'Niet opgeslagen assets',\n    'drop_down_add_title' => 'Toevoegen...',\n    'drop_down_operation_title' => 'Actie...',\n    'upload_files' => 'Bestand(en) uploaden',\n    'create_file' => 'Nieuw bestand',\n    'create_directory' => 'Nieuwe map',\n    'directory_popup_title' => 'Nieuwe map',\n    'directory_name' => 'Mapnaam',\n    'directory_name_required' => 'De mapnaam is vereist',\n    'rename_name_required' => 'De naam is vereist',\n    'rename' => 'Hernoemen',\n    'delete' => 'Verwijderen',\n    'move' => 'Verplaatsen',\n    'moving' => 'Verplaats geselecteerde items',\n    'moved' => 'Succesvol verplaatst',\n    'saved' => 'Bestand opgeslagen',\n    'deleted' => 'Bestand verwijderd',\n    'select' => 'Selecteren',\n    'new' => 'Nieuw bestand',\n    'rename_popup_title' => 'Hernoemen',\n    'rename_new_name' => 'Nieuwe naam',\n    'invalid_path' => 'Pad mag enkel bestaan uit letters, cijfers, spaties en de volgende tekens: ._-/',\n    'error_deleting_file' => 'Fout bij verwijderen van het bestand :name.',\n    'error_deleting_dir_not_empty' => 'Fout bij verwijderen van map :name. De map is niet leeg.',\n    'error_deleting_dir' => 'Fout bij verwijderen van de map :name.',\n    'invalid_name' => 'Naam mag enkel bestaan uit letters, cijfers, spaties en de volgende tekens: ._-',\n    'original_not_found' => 'Oorspronkelijke bestand of map is niet gevonden',\n    'already_exists' => 'Bestand of map met deze naam bestaat al',\n    'error_renaming' => 'Fout bij hernoemen van bestand of map',\n    'name_cant_be_empty' => 'De naam mag niet leeg zijn',\n    'type_not_allowed' => 'Enkel de volgende bestandstypen zijn toegestaand: :allowed_types',\n    'error_uploading_file' => 'Fout tijdens uploaden bestand \":name\": :error',\n    'move_please_select' => 'selecteer',\n    'move_destination' => 'Doelmap',\n    'move_popup_title' => 'Verplaats assets',\n    'move_button' => 'Verplaats',\n    'no_list_records' => 'Geen bestanden gevonden',\n    'path' => 'Pad',\n    'editor_node_name' => 'Assets',\n    'open' => 'Openen',\n  ],\n  'component' => [\n    'menu_label' => 'Componenten',\n    'invalid_request' => 'De template kan niet worden opgeslagen vanwege ongeldige componentgegevens.',\n    'no_records' => 'Geen componenten gevonden',\n    'not_found' => 'De component \\':name\\' is niet gevonden.',\n    'method_not_found' => 'De component \\':name\\' bevat geen \\':method\\' methode.',\n    'expand_or_collapse' => 'Componentenlijst in- of uitklappen',\n    'remove' => 'Verwijder component',\n    'expand_partial' => 'Uitklappen Component partial',\n  ],\n  'template' => [\n    'invalid_type' => 'Onbekend type template.',\n    'not_found' => 'De opgevraagde template is niet gevonden.',\n    'saved' => 'Template opgeslagen',\n    'saved_to_db' => 'De template is opgeslagen in de database',\n    'file_updated' => 'Template bestand is bijgewerkt',\n    'reset_from_template_success' => 'Template is hersteld vanuit bestand',\n    'reloaded' => 'Template opnieuw ingeladen',\n    'deleted' => 'Template verwijderd',\n    'no_list_records' => 'Geen records gevonden',\n    'delete_confirm' => 'Verwijder geselecteerde templates?',\n    'order_by' => 'Sorteer op',\n    'last_modified' => 'Gewijzigd op',\n    'storage' => 'Opslagmedium',\n    'template_file' => 'Bestand',\n    'storage_filesystem' => 'Bestandssysteem',\n    'storage_database' => 'Database',\n    'update_file' => 'Template bestand wijzigen',\n    'reset_from_file' => 'Herstel op basis van template bestand',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Beheer website content bestanden',\n    'manage_assets' => 'Beheer website assets - afbeeldingen, JavaScript bestanden, CSS bestanden',\n    'manage_pages' => 'Beheer pagina\\'s',\n    'manage_layouts' => 'Beheer layouts',\n    'manage_partials' => 'Beheer partials',\n    'manage_themes' => 'Beheer thema\\'s',\n    'manage_theme_options' => 'Beheer maatwerk instellingen voor het huidige thema',\n  ],\n  'theme_log' => [\n    'hint' => 'Dit logboek laat alle wijzigingen in het thema zien die aangebracht zijn door de beheerders in de back-end omgeving.',\n    'menu_label' => 'Thema logboek',\n    'menu_description' => 'Toon wijzigingen op het actieve thema.',\n    'empty_link' => 'Thema logboek legen',\n    'empty_loading' => 'Bezig met legen van thema logboek...',\n    'empty_success' => 'Thema logboek is geleegd',\n    'return_link' => 'Terug naar thema logboek',\n    'id' => 'ID',\n    'id_label' => 'Logboek ID',\n    'created_at' => 'Datum & Tijd',\n    'user' => 'Gebruiker',\n    'type' => 'Type',\n    'type_create' => 'Aanmaken',\n    'type_update' => 'Wijzigen',\n    'type_delete' => 'Verwijderen',\n    'theme_name' => 'Thema',\n    'theme_code' => 'Thema code',\n    'old_template' => 'Template (Oud)',\n    'new_template' => 'Template (Nieuw)',\n    'template' => 'Template',\n    'diff' => 'Wijzigingen',\n    'old_value' => 'Oude waarde',\n    'new_value' => 'Nieuwe waarde',\n    'preview_title' => 'Template wijzigingen',\n    'template_updated' => 'Template is gewijzigd',\n    'template_created' => 'Template is aangemaakt',\n    'template_deleted' => 'Template is verwijderd',\n  ],\n  'intellisense' => [\n    'learn_more' => 'Lees meer',\n    'docs' => [\n      'partial' => 'Renders the contents of a CMS partial.',\n      'page' => 'Renders the contents of a CMS page into a layout template.',\n      'content' => 'Renders a CMS content block.',\n      'component' => 'Renders the default markup content for a CMS component.',\n      'placeholder' => 'Renders a placeholder section.',\n      'scripts' => 'Inserts JavaScript file references to scripts injected by the application.',\n      'styles' => 'Renders CSS links to stylesheet files injected by the application.',\n      'flash' => 'Renders any flash messages stored in the user session.',\n      'verbatim' => 'Marks entire sections as being raw text that should not be parsed.',\n      'macro' => 'Allows to define custom functions in a template.',\n      'for' => 'Loop over each value in a collection.',\n      'if' => 'Allows for conditional displaying of the template markup.',\n      'abs_filter' => 'The `abs` filter returns the absolute value.',\n      'batch_filter' => 'The `batch` filter \"batches\" items by returning a list of lists with the given number of items. A second parameter can be provided and used to fill in missing items.',\n      'capitalize_filter' => 'The `capitalize` filter capitalizes a value. The first character will be uppercase, all others lowercase.',\n      'column_filter' => 'The `column` filter returns the values from a single column in the input array.',\n      'convert_encoding_filter' => 'The `convert_encoding` filter converts a string from one encoding to another. The first argument is the expected output charset and the second one is the input charset.',\n      'country_name_filter' => 'The `country_name` filter returns the country name given its ISO-3166 two-letter code.',\n      'currency_name_filter' => 'The `currency_name` filter returns the currency name given its three-letter code.',\n      'currency_symbol_filter' => 'The `currency_symbol` filter returns the currency symbol given its three-letter code.',\n      'data_uri_filter' => 'The `data_uri` filter generates a URL using the data scheme as defined in RFC 2397.',\n      'date_filter' => 'The `date` filter formats a date to a given format.',\n      'date_modify_filter' => 'The `date_modify` filter modifies a date with a given modifier string.',\n      'default_filter' => 'The `default` filter returns the passed default value if the value is undefined or empty, otherwise the value of the variable.',\n      'escape_filter' => 'The `escape` filter escapes a string using strategies that depend on the context.',\n      'filter_filter' => 'The `filter` filter filters elements of a sequence or a mapping using an arrow function. The arrow function receives the value of the sequence or mapping.',\n      'first_filter' => 'The `first` filter returns the first \"element\" of a sequence, a mapping, or a string.',\n      'format_filter' => 'The `format` filter formats a given string by replacing the placeholders (placeholders follows the [sprintf](https://www.php.net/sprintf) notation).',\n      'format_currency_filter' => 'The `format_currency` filter formats a number as a currency.',\n      'join_filter' => 'The `join` filter returns a string which is the concatenation of the items of a sequence',\n      'json_encode_filter' => 'The `json_encode` filter returns the JSON representation of a value.',\n      'keys_filter' => 'The `keys` filter returns the keys of an array. It is useful when you want to iterate over the keys of an array.',\n      'last_filter' => 'The `last` filter returns the last \"element\" of a sequence, a mapping, or a string.',\n      'length_filter' => 'The `length` filter returns the number of items of a sequence or mapping, or the length of a string.',\n      'lower_filter' => 'The `lower` filter converts a value to lowercase.',\n      'map_filter' => 'The `map` filter applies an arrow function to the elements of a sequence or a mapping. The arrow function receives the value of the sequence or mapping.',\n      'merge_filter' => 'The `merge` filter merges an array with another array.',\n      'nl2br_filter' => 'The `nl2br` filter inserts HTML line breaks before all newlines in a string.',\n      'number_format_filter' => 'The `number_format` filter formats numbers. It is a wrapper around PHP’s [number_format](https://www.php.net/number_format) function.',\n      'reduce_filter' => 'The `reduce` filter iteratively reduces a sequence or a mapping to a single value using an arrow function, so as to reduce it to a single value. The arrow function receives the return value of the previous iteration and the current value of the sequence or mapping.',\n      'replace_filter' => 'The `replace` filter formats a given string by replacing the placeholders.',\n      'reverse_filter' => 'The `reverse` filter reverses a sequence, a mapping, or a string.',\n      'round_filter' => 'The `round` filter rounds a number to a given precision.',\n      'slice_filter' => 'The `slice` filter extracts a slice of a sequence, a mapping, or a string.',\n      'sort_filter' => 'The `sort` filter sorts an array.',\n      'spaceless_filter' => 'Use the `spaceless` filter to remove whitespace between HTML tags, not whitespace within HTML tags or whitespace in plain text.',\n      'split_filter' => 'The `split` filter splits a string by the given delimiter and returns a list of strings.',\n      'striptags_filter' => 'The `striptags` filter strips SGML/XML tags and replace adjacent whitespace by one space.',\n      'title_filter' => 'The `title` filter returns a titlecased version of the value. Words will start with uppercase letters, all remaining characters are lowercase.',\n      'trim_filter' => 'The `trim` filter strips whitespace (or other characters) from the beginning and end of a string.',\n      'upper_filter' => 'The `upper` filter converts a value to uppercase.',\n      'url_encode_filter' => 'The `url_encode` filter percent encodes a given string as URL segment or an array as query string.',\n      'page_filter' => 'The `page` filter creates a link to a page using a page file name, without an extension, as a parameter.',\n      'theme_filter' => 'The `theme` filter returns an address relative to the active theme path of the website. ',\n      'app_filter' => 'The `app` filter returns an address relative to the public path of the website.',\n      'media_filter' => 'The `media` filter returns an address relative to the public path of the [media manager library](https://docs.octobercms.com/4.x/cms/media/introduction.html).',\n      'md_filter' => 'The `md` filter converts the value from Markdown to HTML format.',\n      'raw_filter' => 'The `raw` filter marks the value as being \"safe\", which means that a variable will not be escaped if `raw` is the last filter applied to it.',\n    ],\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/nl.json",
    "content": "{\n  \"Themes\": \"Thema's\",\n  \"Manage Themes\": \"Thema's beheren\",\n  \"Customize Theme\": \"Thema personaliseren\",\n  \"Manage Maintenance Mode\": \"Beheer Onderhoudsmodus\",\n  \"View Website During Maintenance\": \"Website weergeven tijdens onderhoud\",\n  \"Manage Content\": \"Inhoud beheren\",\n  \"Manage Asset Files\": \"Beheer assets\",\n  \"Manage Pages\": \"Pagina's beheren\",\n  \"Manage Layouts\": \"Lay-outs beheren\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Instellingen voor de onderhoudsmodus pagina.\",\n  \"Maintenance Mode\": \"Onderhoudsmodus\",\n  \"Select the page to show when maintenance mode is activated.\": \"Toon de volgende pagina als onderhoudsmodus is ingeschakeld:\",\n  \"Enable maintenance mode\": \"Onderhoudsmodus inschakelen\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Onderhoudsmodus zal de onderhoudspagina tonen aan bezoekers die niet ingelogd zijn in het CMS.\",\n  \"Resources\": \"Bronnen\",\n  \"Reference assets and variables included on this page.\": \"Referentie-items en variabelen op deze pagina.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript bestand(en) in de map assets/js\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"LESS bestand(en) in de map assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS-bestand(en) in de map assets/scss\",\n  \"Variables\": \"Variabelen\",\n  \"Page variables name(s) and value(s)\": \"Naam/namen en waarde(n) van paginavariabelen\",\n  \"Headers\": \"Kopteksten\",\n  \"Page header name(s) and value(s)\": \"Naam/namen en waarde(n) van de paginakoptekst\",\n  \"Site Picker\": \"Site kiezer\",\n  \"Displays links for selecting a different site.\": \"Geeft links weer voor het selecteren van een andere site.\",\n  \"Unknown component\": \"Onbekend component\",\n  \"View Bag\": \"View Bag\",\n  \"Stores custom template properties.\": \"Slaat aangepaste sjabloon eigenschappen op.\",\n  \"By :name\": \"Door :name\",\n  \"The theme ':name' is not found.\": \"Het thema ':name' is niet gevonden.\",\n  \"Manage the front-end theme and customization options.\": \"Bekijk de lijst met geïnstalleerde thema's en selecteer een beschikbaar thema.\",\n  \"Site Theme\": \"Frontend thema\",\n  \"Properties\": \"Eigenschappen\",\n  \"Publish\": \"Publiceren\",\n  \"Advanced\": \"Geavanceerd\",\n  \"Name\": \"Naam\",\n  \"New theme name\": \"Thema naam\",\n  \"Author Name\": \"Auteur\",\n  \"Person or company name\": \"Naam of bedrijfsnaam\",\n  \"Directory Name\": \"Mapnaam\",\n  \"The destination theme directory\": \"Mapnaam van het thema\",\n  \"Description\": \"Omschrijving\",\n  \"Theme description\": \"Thema omschrijving\",\n  \"Homepage\": \"Website\",\n  \"Website URL\": \"Website URL\",\n  \"Author Code\": \"Auteur code\",\n  \"A unique code for the author used for distribution\": \"Een unieke code voor de auteur (voor distributie)\",\n  \"Theme Code\": \"Thema code\",\n  \"A unique code for this theme used for distribution\": \"Een unieke code voor dit thema (voor distributie)\",\n  \"Parent Theme\": \"Parent thema\",\n  \"Database Mode\": \"Wijzigingen opslaan in database\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Sla wijzigingen aan dit thema op in de database\",\n  \"-- no parent --\": \"-- geen parent --\",\n  \"Theme\": \"Thema\",\n  \"Folders\": \"Mappen\",\n  \"Please select the theme folders you would like to export\": \"Selecteer de mappen die je wilt exporteren:\",\n  \"Theme archive file\": \"Thema archiefbestand\",\n  \"Overwrite existing files\": \"Overschijf bestaande bestanden\",\n  \"Untick this box to only import new files\": \"Vink uit om alleen nieuwe bestanden te importeren\",\n  \"Please select the theme folders you would like to import\": \"Selecteer de mappen die je wilt importeren:\",\n  \"Activate\": \"Activeren\",\n  \"Customize\": \"Aanpassen\",\n  \"Duplicate\": \"Dupliceren\",\n  \"Duplicate Theme\": \"Dupliceer thema\",\n  \"Theme Duplicated!\": \"Thema succesvol gedupliceerd!\",\n  \"Manage\": \"Beheer\",\n  \"Manage Theme\": \"Beheer thema\",\n  \"Edit Properties\": \"Wijzig eigenschappen\",\n  \"Save Properties\": \"Eigenschappen opslaan\",\n  \"Import\": \"Importeren\",\n  \"Import Theme\": \"Importeer thema\",\n  \"Theme Imported!\": \"Thema succesvol geïmporteerd!\",\n  \"Export\": \"Exporteren\",\n  \"Export Theme\": \"Exporteer thema\",\n  \"Delete\": \"Verwijderen\",\n  \"Delete this theme? It cannot be undone!\": \"Weet je zeker dat je dit thema wilt verwijderen? Dit kan niet ongedaan worden gemaakt!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Kan het actieve thema niet verwijderen, maak eerst een ander thema actief.\",\n  \"Theme deleted!\": \"Thema succesvol verwijderd!\",\n  \"Create Theme\": \"Thema aanmaken\",\n  \"Create\": \"Aanmaken\",\n  \"Create a New Blank Theme\": \"Maak een nieuw leeg thema\",\n  \"Theme Created!\": \"Thema succesvol aangemaakt!\",\n  \"Please specify a name for the theme.\": \"Geef a.u.b. een naam op voor dit thema.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Naam mag alleen cijfers, letters en de volgende symbolen bevatten: _-\",\n  \"Desired theme directory already exists.\": \"Opgegeven mapnaam bestaat reeds.\",\n  \"Theme directory\": \"Thema mapnaam\",\n  \"Provide a new directory name for the duplicated theme.\": \"Geef een nieuwe mapnaam op voor het gedupliceerde thema.\",\n  \"Find More Themes\": \"Zoek meer thema's\",\n  \"Saving Theme...\": \"Thema opslaan...\",\n  \"Return to Themes List\": \"Terug naar thema lijst\",\n  \"No themes found\": \"Geen thema's gevonden\",\n  \"Seed Theme\": \"Vul thema\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Vul het gespecificeerde thema met blauwdrukken, vertalingen en data.\",\n  \"Theme Seeded!\": \"Thema gevuld!\",\n  \"Select Page Link\": \"Selecteer pagina link\",\n  \"Search all references...\": \"Doorzoek alle referenties...\",\n  \"CMS Page\": \"CMS pagina\",\n  \"Link\": \"Link\",\n  \"Please select a CMS page\": \"Selecteer een CMS pagina\",\n  \"Please select a page reference\": \"Selecteer een pagina referentie\",\n  \"Please enter a valid URL\": \"Voer een geldige URL in\",\n  \"Delete Theme\": \"Verwijder thema\",\n  \"Activate Theme\": \"Activeer thema\",\n  \"Manage Partials\": \"Beheer partials\",\n  \"No Title\": \"Geen titel\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Een unieke naam voor dit component voor gebruik in de code van een pagina of layout.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Een alias voor de component is verplicht en mag alleen bestaan uit letters, cijfers en underscores. De alias moet beginnen met een letter.\",\n  \"Unnamed\": \"Naamloos\",\n  \"No description provided\": \"Geen beschrijving opgegeven\",\n  \"No snippets found\": \"Geen blokken gevonden\",\n  \"Search...\": \"Zoeken...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Blok met de gevraagde code :code is niet gevonden in het thema.\",\n  \"Snippet\": \"Blokken\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Voer een code in om dit fragment beschikbaar the maken in de Static Pages plugin.\",\n  \"Please enter the snippet code\": \"Geef de snippet een code\",\n  \"Snippet Code\": \"Blok code\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"De naam wordt weergegeven in de blokkenlijst in de zijbalk en op de pagina waar dit blok wordt toegevoegd.\",\n  \"Please enter the snippet name\": \"Geef de snippet een naam\",\n  \"Property Title\": \"Eigenschap naam\",\n  \"Please provide the property title\": \"Geef de eigenschap titel op\",\n  \"Code\": \"Code\",\n  \"Please provide the property name\": \"Geef de eigenschap naam op\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"De naam van de eigenschap moet beginnen met een letter en kan alleen letters en cijfers bevatten.\",\n  \"Type\": \"Type\",\n  \"Select\": \"Selectie\",\n  \"String\": \"Tekst\",\n  \"Checkbox\": \"keuzeveld\",\n  \"Dropdown\": \"Keuzelijst\",\n  \"Please select the property type\": \"Selecteer het eigenschap type\",\n  \"Default\": \"Standaardwaarde\",\n  \"Options\": \"Opties\",\n  \"Define a Snippet Partial\": \"Definieer snippet\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Ongeldige selectlijst waarde: %s. Deze waarden mogen alleen cijfers, letters of de karakters _- bevatten.\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"De beschrijving wordt getoond in de snippetlijst in de editor zodra een snippet wordt toegevoegd.\",\n  \"Details\": \"Details\",\n  \"Frontend Theme\": \"Frontend thema\"\n}"
  },
  {
    "path": "modules/cms/lang/pl/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nieprawidłowa nazwa pliku: :name. Nazwy pliku mogą zawierać tylko symbole alfanumeryczne, podkreślenia, kreski i kropki. Przykłady prawidłowych nazw: strona.htm, strona, podfolder/strona',\n    'invalid_property' => 'Własność \\':name\\' nie może zostać ustawiona.',\n    'file_already_exists' => 'Plik o nazwie \\':name\\' już istnieje.',\n    'error_saving' => 'Błąd przy zapisywaniu pliku \\':name\\'. Proszę sprawdzić uprawnienia zapisu/modyfikacji.',\n    'error_creating_directory' => 'Błąd przy tworzeniu folderu :name. Proszę sprawdzić uprawnienia zapisu/modyfikacji.',\n    'invalid_file_extension' => 'Nieprawidłowe rozszerzenie pliku: :invalid. Dozwolone rozszerzenia to: :allowed.',\n    'error_deleting' => 'Błąd przy usuwaniu pliku szablonu \\':name\\'. Proszę sprawdzić uprawnienia zapisu/modyfikacji.',\n    'delete_success' => 'Szablony zostały prawidłowo usunięte: :count.',\n    'file_name_required' => 'Pole Nazwa Pliku jest wymagane.',\n    'safe_mode_enabled' => 'Safe mode jest obecnie włączony.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Strona',\n      'online' => 'Online',\n      'maintenance' => 'W konserwacji',\n      'manage_themes' => 'Zarządzaj motywami',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Brak aktywnego motywu.',\n      'not_found' => 'Aktywny motyw nie został odnaleziony.',\n    ],\n    'edit' => [\n      'not_set' => 'Edytowany motyw nie jest ustawiony.',\n      'not_found' => 'Edytowany motyw nie został znaleziony.',\n      'not_match' => 'Obiekt który próbujesz edytować nie należy do wybranego motywu. Proszę przeładować stronę.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Strona \\':name\\' nie została znaleziona',\n    'not_found' => [\n      'label' => 'Nie znaleziono strony',\n      'help' => 'Żądana strona nie została znaleziona.',\n    ],\n    'custom_error' => [\n      'label' => 'Błąd strony',\n      'help' => 'Bardzo przepraszamy, jednak coś poszło nie tak i strona nie może zostać wyświetlona.',\n    ],\n    'menu_label' => 'Strony',\n    'unsaved_label' => 'Niezapisane strony',\n    'no_list_records' => 'Nie znaleziono stron',\n    'new' => 'Nowa strona',\n    'invalid_url' => 'Nieprawidłowy format URL. Powinien rozpoczynać się od ukośnika (/) i może zawierać cyfry, znaki oraz następujące symbole: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Czy na pewno chcesz usunąć zaznaczone strony?',\n    'delete_confirm_single' => 'Czy na pewno chcesz usunąć tę stronę?',\n    'no_layout' => '-- brak układu --',\n  ],\n  'layout' => [\n    'not_found_name' => 'Nie znaleziono układu \\':name\\'',\n    'menu_label' => 'Układy',\n    'unsaved_label' => 'Niezapisane układy',\n    'no_list_records' => 'Nie znaleziono układów',\n    'new' => 'Nowy układ',\n    'delete_confirm_multiple' => 'Czy na pewno chcesz usunąć zaznaczone układy?',\n    'delete_confirm_single' => 'Czy na pewno chcesz usunąć ten układ?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Fragment \\':name\\' nie został znaleziony.',\n    'invalid_name' => 'Nieprawidłowa nazwa fragmentu: :name.',\n    'menu_label' => 'Fragmenty',\n    'unsaved_label' => 'Niezapisane fragmenty',\n    'no_list_records' => 'Nie znaleziono fragmentów',\n    'delete_confirm_multiple' => 'Czy na pewno chcesz usunąć zaznaczone fragmenty?',\n    'delete_confirm_single' => 'Czy na pewno chcesz usunąć ten fragment?',\n    'new' => 'Nowy fragment',\n  ],\n  'content' => [\n    'not_found_name' => 'Plik treści \\':name\\' nie został znaleziony.',\n    'menu_label' => 'Treść',\n    'unsaved_label' => 'Niezapisana treść',\n    'no_list_records' => 'Nie znaleziono plików treści',\n    'delete_confirm_multiple' => 'Czy na pewno chcesz usunąć zaznaczone pliki treści?',\n    'delete_confirm_single' => 'Czy na pewno chcesz usunąć ten plik treści?',\n    'new' => 'Nowy plik treści',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Nieprawidłowa nazwa handlera AJAX: :name.',\n    'not_found' => 'Handler AJAX \\':name\\' nie został znaleziony.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Dodaj',\n    'search' => 'Szukaj...',\n  ],\n  'editor' => [\n    'settings' => 'Ustawienia',\n    'title' => 'Tytuł',\n    'new_title' => 'Tytuł nowej strony',\n    'url' => 'URL',\n    'filename' => 'Nazwa pliku',\n    'layout' => 'Układ',\n    'description' => 'Opis',\n    'preview' => 'Podgląd',\n    'meta' => 'Meta',\n    'meta_title' => 'SEO Tytuł',\n    'meta_description' => 'SEO Opis',\n    'markup' => 'Markup',\n    'code' => 'Kod',\n    'content' => 'Treść',\n    'hidden' => 'Ukryta',\n    'hidden_comment' => 'Ukryte strony są widoczne tylko dla użytkowników panelu administracyjnego, którzy są zalogowani.',\n    'enter_fullscreen' => 'Włącz tryb pełnoekranowy',\n    'exit_fullscreen' => 'Wyłącz tryb pełnoekranowy',\n    'open_searchbox' => 'Otwórz wyszukiwanie',\n    'open_replacebox' => 'Otwórz zamienianie tekstu',\n  ],\n  'asset' => [\n    'menu_label' => 'Zasoby',\n    'unsaved_label' => 'Niezapisane zasoby',\n    'drop_down_add_title' => 'Dodaj...',\n    'drop_down_operation_title' => 'Akcja...',\n    'upload_files' => 'Wyślij plik(i)',\n    'create_file' => 'Stwórz plik',\n    'create_directory' => 'Stwórz folder',\n    'directory_popup_title' => 'Nowy folder',\n    'directory_name' => 'Nazwa folderu',\n    'rename' => 'Zmień nazwę',\n    'delete' => 'Usuń',\n    'move' => 'Przenieś',\n    'select' => 'Wybierz',\n    'new' => 'Nowy plik',\n    'rename_popup_title' => 'Zmień nazwę',\n    'rename_new_name' => 'Nowa nazwa',\n    'invalid_path' => 'Ścieżka może zawierać tylko cyfry, litery alfabetu łacińskiego, spacje oraz następujące znaki: ._-/',\n    'error_deleting_file' => 'Błąd przy usuwaniu pliku :name.',\n    'error_deleting_dir_not_empty' => 'Błąd przy usuwaniu folderu :name. Katalog nie jest pusty.',\n    'error_deleting_dir' => 'Błąd przy usuwaniu pliku :name.',\n    'invalid_name' => 'Nazwa może zawierać tylko cyfry, litery alfabetu łacińskiego, spacje oraz następujące znaki: ._-',\n    'original_not_found' => 'Oryginalny plik lub ścieżka nie zostały odnalezione',\n    'already_exists' => 'Plik lub folder o tej samej nazwie już istnieją',\n    'error_renaming' => 'Błąd przy zmianie nazwy pliku lub folderu',\n    'name_cant_be_empty' => 'Nazwa nie może być pusta',\n    'too_large' => 'Wyślany plik jest zbyt duży. Maksymalny dopuszczalny rozmiar pliku to :max_size',\n    'type_not_allowed' => 'Dopuszczalne są tylko następujące formaty plików: :allowed_types',\n    'file_not_valid' => 'Plik jest nieprawidłowy',\n    'error_uploading_file' => 'Błąd przy wysyłaniu pliku \\':name\\': :error',\n    'move_please_select' => 'proszę wybierz',\n    'move_destination' => 'Katalog docelowy',\n    'move_popup_title' => 'Przenieś zasoby',\n    'move_button' => 'Przenieś',\n    'selected_files_not_found' => 'Nie znaleziono wybranych plików',\n    'select_destination_dir' => 'Proszę wybrać folder docelowy',\n    'destination_not_found' => 'Folder docelowy nie został znaleziony',\n    'error_moving_file' => 'Błąd przy przenoszeniu pliku :file',\n    'error_moving_directory' => 'Błąd przy przenoszeniu folderu :dir',\n    'error_deleting_directory' => 'Błąd przy usuwaniu oryginalnego folderu :dir',\n    'path' => 'Ścieżka',\n  ],\n  'component' => [\n    'menu_label' => 'Komponenty',\n    'invalid_request' => 'The template cannot be saved because of invalid component data.',\n    'no_records' => 'Nie znaleziono komponentów',\n    'not_found' => 'Komponent \\':name\\' nie został znaleziony.',\n    'method_not_found' => 'Komponent \\':name\\' nie zawiera metody \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Nieznany typ szablonu.',\n    'not_found' => 'Szablon nie został znaleziony.',\n    'saved' => 'Szablon został zapisany pomyślnie.',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Zarządzaj treścią',\n    'manage_assets' => 'Zarządzaj zasobami',\n    'manage_pages' => 'Zarządzaj stronami',\n    'manage_layouts' => 'Zarządzaj układami',\n    'manage_partials' => 'Zarządzaj blokami',\n    'manage_themes' => 'Zarządzaj motywami',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/pl.json",
    "content": "{\n  \"Themes\": \"Motywy\",\n  \"Manage Themes\": \"Zarządzaj motywami\",\n  \"Customize Theme\": \"Personalizuj Motyw\",\n  \"Manage Maintenance Mode\": \"Zarządzaj trybem konserwacji\",\n  \"View Website During Maintenance\": \"Wyświetl witrynę podczas konserwacji\",\n  \"Manage Content\": \"Zarządzaj treścią\",\n  \"Manage Asset Files\": \"Zarządzaj plikami zasobów\",\n  \"Manage Pages\": \"Zarządzaj stronami\",\n  \"Manage Layouts\": \"Zarządzaj układami\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfiguruj oraz włącz tryb konserwacji strony.\",\n  \"Maintenance Mode\": \"Tryb konserwacji\",\n  \"Select the page to show when maintenance mode is activated.\": \"Kiedy włączony odwiedzający zamiast normalnej strony zobaczą stronę wybraną poniżej.\",\n  \"Enable maintenance mode\": \"Włącz tryb konserwacji\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Tryb konserwacji wyświetli stronę konserwacji dla odwiedzających, którzy nie są zalogowani do panelu administracyjnego.\",\n  \"Resources\": \"Zasoby\",\n  \"Reference assets and variables included on this page.\": \"Zasoby i zmienne referencyjne zawarte na tej stronie.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Plik(i) JavaScript w folderze asset/js\",\n  \"LESS\": \"MNIEJ\",\n  \"LESS file(s) in the assets/less folder\": \"Mniej plików w folderze asset/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Plik(i) SCSS w folderze asset/scss\",\n  \"Variables\": \"Zmienne\",\n  \"Page variables name(s) and value(s)\": \"Nazwy i wartości zmiennych strony\",\n  \"Headers\": \"Nagłówki\",\n  \"Page header name(s) and value(s)\": \"Nazwy i wartości nagłówków strony\",\n  \"Site Picker\": \"Selektor witryn\",\n  \"Displays links for selecting a different site.\": \"Wyświetla łącza umożliwiające wybór innej witryny.\",\n  \"Unknown component\": \"Nieznany składnik\",\n  \"View Bag\": \"Zobacz torbę\",\n  \"Stores custom template properties.\": \"Przechowuje niestandardowe właściwości szablonu.\",\n  \"By :name\": \"By :name\",\n  \"The theme ':name' is not found.\": \"Motyw ':name' nie został odnaleziony.\",\n  \"Manage the front-end theme and customization options.\": \"Zobacz listę zainstalowanych motywów i wybierz, który aktywować.\",\n  \"Site Theme\": \"Motyw strony\",\n  \"Properties\": \"Właściwości\",\n  \"Publish\": \"Publish\",\n  \"Advanced\": \"Advanced\",\n  \"Name\": \"Nazwa\",\n  \"New theme name\": \"Nowa nazwa motywu\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Osoba lub nazwa firmy\",\n  \"Directory Name\": \"Nazwa katalogu\",\n  \"The destination theme directory\": \"Docelowy katalog motywu\",\n  \"Description\": \"Opis\",\n  \"Theme description\": \"Opis motywu\",\n  \"Homepage\": \"Strona domowa\",\n  \"Website URL\": \"URL strony domowej\",\n  \"Author Code\": \"Author Code\",\n  \"A unique code for the author used for distribution\": \"A unique code for the author used for distribution\",\n  \"Theme Code\": \"Kod\",\n  \"A unique code for this theme used for distribution\": \"Unikalny kod motywu używany do dystrybucji\",\n  \"Parent Theme\": \"Parent Theme\",\n  \"Database Mode\": \"Database Mode\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Save changes to this theme in the database instead of the filesystem\",\n  \"-- no parent --\": \"-- no parent --\",\n  \"Theme\": \"Motyw\",\n  \"Folders\": \"Foldery\",\n  \"Please select the theme folders you would like to export\": \"Proszę zaznaczyć foldery do eksportu\",\n  \"Theme archive file\": \"Plik archiwum motywu\",\n  \"Overwrite existing files\": \"Nadpisz istniejące pliki\",\n  \"Untick this box to only import new files\": \"Odznacz aby zaimportować tylko nowe pliki\",\n  \"Please select the theme folders you would like to import\": \"Proszę zaznaczyć foldery do importu\",\n  \"Activate\": \"Aktywuj\",\n  \"Customize\": \"Personalizuj\",\n  \"Duplicate\": \"Duplikuj\",\n  \"Duplicate Theme\": \"Duplikuj motyw\",\n  \"Theme Duplicated!\": \"Pomyślnie utworzono kopię motywu!\",\n  \"Manage\": \"Zarządzaj\",\n  \"Manage Theme\": \"Zarządzaj motywem\",\n  \"Edit Properties\": \"Edytuj właściwości\",\n  \"Save Properties\": \"Zapisz właściwości\",\n  \"Import\": \"Zaimportuj\",\n  \"Import Theme\": \"Zaimportuj motyw\",\n  \"Theme Imported!\": \"Pomyślnie zaimportowano motyw!\",\n  \"Export\": \"Eksportuj\",\n  \"Export Theme\": \"Eksportuj motyw\",\n  \"Delete\": \"Usuń\",\n  \"Delete this theme? It cannot be undone!\": \"Czy na pewno usunąć ten motyw? Tej operacji nie można cofnąć!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Nie można usunąć aktywnego motywu. Spróbuj zmienić aktywny motyw na inny.\",\n  \"Theme deleted!\": \"Pomyślnie usunięto motyw!\",\n  \"Create Theme\": \"Utwórz motyw\",\n  \"Create\": \"Utwórz\",\n  \"Create a New Blank Theme\": \"Utwórz nowy pusty motyw\",\n  \"Theme Created!\": \"Pomyślnie utworzono motyw!\",\n  \"Please specify a name for the theme.\": \"Proszę podać nazwę nowego motywu.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Nazwa może zawierać tylko cyfry, znaki łacińskie oraz następujące znaki: _-\",\n  \"Desired theme directory already exists.\": \"Żądany katalog motywu już istnieje.\",\n  \"Theme directory\": \"Katalog motywu\",\n  \"Provide a new directory name for the duplicated theme.\": \"Podaj nazwę nowego katalogu dla kopii motywu.\",\n  \"Find More Themes\": \"Znajdź więcej motywów\",\n  \"Saving Theme...\": \"Zapisywanie motywu...\",\n  \"Return to Themes List\": \"Wróć do listy motywów\",\n  \"No themes found\": \"No themes found\",\n  \"Seed Theme\": \"Seed Theme\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seed the specified theme with blueprints, translations and data.\",\n  \"Theme Seeded!\": \"Theme Seeded!\",\n  \"Select Page Link\": \"Select Page Link\",\n  \"Search all references...\": \"Search all references...\",\n  \"CMS Page\": \"CMS Page\",\n  \"Link\": \"Link\",\n  \"Please select a CMS page\": \"Please select a CMS page\",\n  \"Please select a page reference\": \"Please select a page reference\",\n  \"Please enter a valid URL\": \"Please enter a valid URL\",\n  \"Delete Theme\": \"Delete Theme\",\n  \"Activate Theme\": \"Activate Theme\",\n  \"Manage Partials\": \"Manage Partials\",\n  \"No Title\": \"No Title\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"A unique name given to this component when using it in the page or layout code.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\",\n  \"Unnamed\": \"Bez nazwy\",\n  \"No description provided\": \"Brak opisu\",\n  \"No snippets found\": \"Nie znaleziono\",\n  \"Search...\": \"Szukaj...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Fragment o podanym kodzie systemowym :code nie został znaleziony.\",\n  \"Snippet\": \"Fragment\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Dodaj kod systemowy aby ten fragment był dostępny do użycia w treści stron statycznych.\",\n  \"Please enter the snippet code\": \"Please enter the snippet code\",\n  \"Snippet Code\": \"Kod systemowy\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Nazwa będzie się wyświetlać w menu obok stron statycznych.\",\n  \"Please enter the snippet name\": \"Please enter the snippet name\",\n  \"Property Title\": \"Nazwa parametru\",\n  \"Please provide the property title\": \"Please provide the property title\",\n  \"Code\": \"Kod systemowy\",\n  \"Please provide the property name\": \"Please provide the property name\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Nazwa parametru musi się zaczynać od litery i może zawierać tylko litery oraz liczby\",\n  \"Type\": \"Typ\",\n  \"Select\": \"Select\",\n  \"String\": \"Tekst\",\n  \"Checkbox\": \"Checkbox\",\n  \"Dropdown\": \"Lista rozwijana\",\n  \"Please select the property type\": \"Please select the property type\",\n  \"Default\": \"Domyślny\",\n  \"Options\": \"Opcje\",\n  \"Define a Snippet Partial\": \"Define a Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Nieprawidłowa opcja: :key. Opcja wyboru może zawierać tylko litery, cyfry, myślnik i podkreślnik\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"The description is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Details\": \"Details\",\n  \"Frontend Theme\": \"Motyw strony\"\n}"
  },
  {
    "path": "modules/cms/lang/pt-br/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nome de arquivo inválido: \":name\". Os nomes de arquivos podem conter apenas letras, números, sublinhados, traços e pontos. Veja alguns exemplos de nomes de arquivos corretos: pagina.htm, pagina, subdiretorio/pagina',\n    'invalid_file_inspector' => 'Nome de arquivo inválido. Os nomes dos arquivos podem conter apenas símbolos alfanuméricos, sublinhados, traços e pontos. Alguns exemplos de nomes de arquivos: pagina.htm, pagina, subdiretorio/pagina',\n    'invalid_property' => 'A propriedade \":name\" não pode ser definida',\n    'file_already_exists' => 'Arquivo \":name\" já existe.',\n    'error_saving' => 'Erro ao salvar arquivo \":name\". Verifique as permissões de escrita.',\n    'error_creating_directory' => 'Erro ao criar o diretório :name. Verifique as permissões de escrita.',\n    'invalid_file_extension' => 'Extensão de arquivo inválida: :invalid. Extensões válidas: :allowed.',\n    'error_deleting' => 'Erro ao excluir o arquivo de modelo \":name\". Verifique as permissões de escrita.',\n    'delete_success' => 'Modelos excluídos com sucesso: :count.',\n    'file_name_required' => 'O campo de Nome do Arquivo é necessário.',\n    'safe_mode_enabled' => 'Modo de segurança está ativado.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Site',\n      'online' => 'online',\n      'maintenance' => 'em manutenção',\n      'manage_themes' => 'Gerenciar temas',\n      'customize_theme' => 'Customizar tema',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'O tema ativo não foi definido.',\n      'not_found' => 'O tema ativo não foi encontrado.',\n      'is_locked' => 'O tema \\':theme\\' está bloqueado e não pode ser usado. Por favor, duplique este tema ou crie um tema filho.',\n    ],\n    'edit' => [\n      'not_set' => 'O tema de edição não foi definido.',\n      'not_found' => 'O tema de edição não foi encontrado.',\n      'not_match' => 'O objeto que você está tentando acessar não pertence ao tema que está sendo editado. Por favor, recarregue a página.',\n    ],\n    'setting_edit_theme' => 'Mudando o tema de edição',\n    'edit_theme_changed' => 'Tema dde edição alterado',\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'A página \":name\" não foi encontrada',\n    'not_found' => [\n      'label' => 'Página não encontrada',\n      'help' => 'A página solicitada não pode ser encontrada.',\n    ],\n    'custom_error' => [\n      'label' => 'Erro na página',\n      'help' => 'Lamentamos, mas algo deu errado e que a página não pode ser exibida.',\n    ],\n    'menu_label' => 'Páginas',\n    'unsaved_label' => 'Página(s) não salva(s)',\n    'no_list_records' => 'Nenhuma página encontrada',\n    'new' => 'Nova página',\n    'invalid_url' => 'Formato de URL inválido. A URL deve começar com uma barra e pode conter letras, números e os símbolos: _-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Você realmente deseja excluir as páginas selecionadas?',\n    'delete_confirm_single' => 'Você realmente deseja excluir esta página?',\n    'no_layout' => '-- sem esboço --',\n    'title' => 'Título da página',\n    'url' => 'URL da página',\n    'url_required' => 'A URL da página é obrigatório.',\n    'file_name' => 'Nome do arquivo da página',\n    'editor_node_name' => 'Páginas',\n    'editor_sorting' => 'Ordenar Páginas',\n    'editor_sort_by_url' => 'URL',\n    'editor_sort_by_title' => 'Título',\n    'editor_sort_by_file_name' => 'Nome do arquivo',\n    'editor_grouping' => 'Grupo de Páginas',\n    'editor_group_by_filepath' => 'Caminho de arquivo',\n    'editor_group_by_url' => 'URL',\n    'editor_display' => 'Exibição',\n    'editor_display_title' => 'Título',\n    'editor_display_url' => 'URL',\n    'editor_display_file' => 'Caminho de arquivo',\n    'editor_markup' => 'Marcação',\n    'editor_code' => 'Código',\n    'description_hint' => 'A descrição é opcional e visível apenas na interface do usuário do painel.',\n    'create_new' => 'Nova Página',\n  ],\n  'layout' => [\n    'not_found_name' => 'O esboço \":name\" não foi encontrado',\n    'menu_label' => 'Esboços',\n    'unsaved_label' => 'Esboço(s) não salvo(s)',\n    'no_list_records' => 'Nenhum esboço encontrado',\n    'new' => 'Novo esboço',\n    'delete_confirm_multiple' => 'Você realmente deseja excluir os esboços selecionados?',\n    'delete_confirm_single' => 'Você realmente deseja excluir este esboço?',\n    'editor_node_name' => 'Layouts',\n    'create_new' => 'Novo Layout',\n  ],\n  'partial' => [\n    'not_found_name' => 'O bloco \":name\" não foi encontrado.',\n    'invalid_name' => 'Nome de bloco inválido: :name.',\n    'menu_label' => 'Blocos',\n    'unsaved_label' => 'Bloco(s) não salvo(s)',\n    'no_list_records' => 'Nenhum bloco encontrado',\n    'delete_confirm_multiple' => 'Você realmente deseja apagar os blocos selecionados?',\n    'delete_confirm_single' => 'Você realmente deseja apagar este bloco?',\n    'editor_node_name' => 'Blocos',\n    'new' => 'Novo bloco',\n    'create_new' => 'Novo bloco',\n  ],\n  'content' => [\n    'not_found_name' => 'O arquivo de conteúdo \":name\" não foi encontrado.',\n    'menu_label' => 'Conteúdo',\n    'unsaved_label' => 'Conteúdo não salvo',\n    'no_list_records' => 'Nenhum arquivo de conteúdo encontrado',\n    'delete_confirm_multiple' => 'Você realmente deseja apagar arquivos ou diretórios de conteúdo selecionados?',\n    'delete_confirm_single' => 'Você realmente deseja apagar este arquivo de conteúdo?',\n    'editor_node_name' => 'Arquivos de conteúdo',\n    'new' => 'Novo arquivo de conteúdo',\n    'editor_content' => 'Conteúdo',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'O nome do manipulador AJAX é inválido: :name.',\n    'not_found' => 'Manipulador AJAX \":name\" não encontrado.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Adicionar',\n    'search' => 'Buscar...',\n  ],\n  'editor' => [\n    'settings' => 'Configurações',\n    'title' => 'Título',\n    'new_title' => 'Título da nova página',\n    'url' => 'URL',\n    'filename' => 'Nome do Arquivo',\n    'layout' => 'Esboço',\n    'description' => 'Descrição',\n    'preview' => 'Visualizar',\n    'page' => 'Página CMS',\n    'edit_theme' => 'Editar Tema',\n    'change_edit_theme' => 'Alterar tema',\n    'edit_theme_saved_changed_tabs' => 'Você tem alterações não salvas em guias abertas. Salve-as ou feche as guias para continuar.',\n    'partial' => 'Bloco CMS',\n    'meta' => 'Meta',\n    'meta_title' => 'Título Meta',\n    'meta_description' => 'Descrição Meta',\n    'markup' => 'Edição',\n    'code' => 'Código',\n    'content' => 'Conteúdo',\n    'asset' => 'Arquivo de recursos',\n    'hidden' => 'Oculta',\n    'hidden_comment' => 'Páginas ocultas são acessíveis somente para administradores.',\n    'enter_fullscreen' => 'Entrar no modo de tela cheia',\n    'exit_fullscreen' => 'Sair do modo de tela cheia',\n    'open_searchbox' => 'Abrir caixa de busca',\n    'open_replacebox' => 'Abrir caixa de substituição',\n    'commit' => 'Persistir',\n    'reset' => 'Redefinir',\n    'commit_confirm' => 'Tem certeza de que deseja enviar suas alterações para este arquivo no sistema de arquivos? Isso sobrescreverá o arquivo existente no sistema de arquivos',\n    'reset_confirm' => 'Tem certeza de que deseja redefinir este arquivo para a cópia que está no sistema de arquivos? Isso irá substituí-lo completamente com o arquivo que está no sistema de arquivos',\n    'committing' => 'Persistindo',\n    'resetting' => 'Redefinindo',\n    'commit_success' => 'O :type foi confirmado no sistema de arquivos',\n    'reset_success' => 'O :type foi redefinido para a versão do sistema de arquivos',\n    'error_loading_header' => 'Erro ao carregar o template',\n    'component_list' => 'Componentes',\n    'component_list_description' => 'Para adicionar um componente, clique nele ou arraste e solte no editor.',\n    'info' => 'Infomação',\n    'refresh' => 'Atualizar',\n    'create' => 'Criar',\n    'manage_themes' => 'Gerenciar Temas',\n    'error_no_doctype_permissions' => 'Você não tem permissão para gerenciar o tipo de documento: :doctype',\n  ],\n  'asset' => [\n    'menu_label' => 'Arquivos',\n    'unsaved_label' => 'Arquivo(s) não salvo(s)',\n    'drop_down_add_title' => 'Adicionar...',\n    'drop_down_operation_title' => 'Ação...',\n    'upload_files' => 'Enviar arquivo(s)',\n    'create_file' => 'Criar arquivo',\n    'create_directory' => 'Criar diretório',\n    'directory_popup_title' => 'Novo diretório',\n    'directory_name' => 'Nome do diretório',\n    'directory_name_required' => 'O nome do diretório é obrigatório',\n    'rename_name_required' => 'O nome é obrigatório',\n    'rename' => 'Renomear',\n    'delete' => 'Excluir',\n    'move' => 'Mover',\n    'moved' => 'Movido com sucesso',\n    'moving' => 'Movendo itens selecionados',\n    'saved' => 'Arquivo salvo',\n    'deleted' => 'Arquivo excluído',\n    'select' => 'Selecionar',\n    'new' => 'Novo arquivo',\n    'rename_popup_title' => 'Renomear',\n    'rename_new_name' => 'Novo nome',\n    'invalid_path' => 'O caminho pode conter apenas letras, números, espaços e os símbolos: ._-/',\n    'error_deleting_file' => 'Erro ao excluir arquivo :name.',\n    'error_deleting_dir_not_empty' => 'Erro ao excluir diretório :name. O diretório não está vazio.',\n    'error_deleting_dir' => 'Erro ao excluir diretório :name.',\n    'invalid_name' => 'O nome pode conter apenas letras, números, espaços e os símbolos: ._-',\n    'original_not_found' => 'Arquivo ou diretório original não encontrado',\n    'already_exists' => 'Um arquivo ou diretório com este nome já existe',\n    'error_renaming' => 'Erro ao renomear o arquivo ou diretório',\n    'name_cant_be_empty' => 'O nome não pode estar vazio',\n    'too_large' => 'O arquivo enviado é muito grande. O tamanho máximo permitido é :max_size',\n    'type_not_allowed' => 'Apenas os seguintes tipos de arquivos são permitidos: :allowed_types',\n    'file_not_valid' => 'O arquivo não é válido',\n    'error_uploading_file' => 'Error uploading file \":name\": :error',\n    'move_please_select' => 'por favor selecione',\n    'move_destination' => 'Diretório de destino',\n    'move_popup_title' => 'Mover arquivos',\n    'move_button' => 'Mover',\n    'selected_files_not_found' => 'Arquivos selecionados não encontrados',\n    'select_destination_dir' => 'Por favor, selecione um diretório de destino',\n    'destination_not_found' => 'Diretório de destino não encontrado',\n    'error_moving_file' => 'Erro ao mover arquivo :file',\n    'error_moving_directory' => 'Erro ao mover diretório :dir',\n    'error_deleting_directory' => 'Erro ao excluir o diretório original :dir',\n    'no_list_records' => 'Nenhum arquivo encontrado',\n    'delete_confirm' => 'Excluir arquivos ou diretórios selecionados?',\n    'path' => 'Caminho',\n    'editor_node_name' => 'Recursos',\n    'open' => 'Abrir',\n  ],\n  'component' => [\n    'menu_label' => 'Componentes',\n    'invalid_request' => 'O modelo não pode ser salvo devido a dados inválidos nos componentes.',\n    'no_records' => 'Nenhum componente encontrado',\n    'not_found' => 'O componente \":name\" não foi encontrado.',\n    'no_default_partial' => 'Este componente não tem um bloco \\'padrão\\'',\n    'method_not_found' => 'O componente \":name\" não tem um método \":method\".',\n    'soft_component' => 'Componente Soft',\n    'soft_component_description' => 'Este componente está faltando, mas é opcional.',\n    'expand_or_collapse' => 'Expandir ou recolher a lista de componentes',\n    'remove' => 'Remover componente',\n    'expand_partial' => 'Expandir Bloco do Componente',\n  ],\n  'template' => [\n    'invalid_type' => 'Tipo de modelo desconhecido.',\n    'not_found' => 'O modelo solicitado não foi encontrado.',\n    'saved' => 'O modelo foi salvo com sucesso.',\n    'saved_to_db' => 'Modelo salvo no banco de dados',\n    'file_updated' => 'Arquivo de modelo atualizado',\n    'reset_from_template_success' => 'O modelo foi redefinido do arquivo',\n    'reloaded' => 'Modelo recarregado',\n    'deleted' => 'Modelo excluído',\n    'no_list_records' => 'Nenhum registro foi encontrado',\n    'delete_confirm' => 'Excluir modelos selecionados?',\n    'order_by' => 'Ordenar por',\n    'last_modified' => 'Último modificado',\n    'storage' => 'Armazenamento',\n    'template_file' => 'Arquivo de modelo',\n    'storage_filesystem' => 'Sistema de arquivo',\n    'storage_database' => 'base de dados',\n    'update_file' => 'Atualizar arquivo de modelo',\n    'reset_from_file' => 'Redefinir do arquivo de modelo',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Gerenciar conteúdo',\n    'manage_assets' => 'Gerenciar arquivos',\n    'manage_pages' => 'Gerenciar páginas',\n    'manage_layouts' => 'Gerenciar esboços',\n    'manage_partials' => 'Gerenciar blocos',\n    'manage_themes' => 'Gerenciar temas',\n    'manage_theme_options' => 'Configure as opções de personalização para o tema ativo',\n  ],\n  'theme_log' => [\n    'hint' => 'Esses registros exibe as alterações feitas no tema pelos administradores na área de backend.',\n    'menu_label' => 'Registros do tema',\n    'menu_description' => 'Veja as alterações feitas no tema ativo.',\n    'empty_link' => 'Registros do tema vazio',\n    'empty_loading' => 'Esvaziando registros de tema...',\n    'empty_success' => 'Registros do tema esvaziado',\n    'return_link' => 'Retornar aos registros deo tema',\n    'id' => 'ID',\n    'id_label' => 'Registro ID',\n    'created_at' => 'Data & Hora',\n    'user' => 'Usuário',\n    'type' => 'Tipo',\n    'type_create' => 'Criado',\n    'type_update' => 'Atualizado',\n    'type_delete' => 'Apagado',\n    'theme_name' => 'Tema',\n    'theme_code' => 'Código do tema',\n    'old_template' => 'Modelo (antigo)',\n    'new_template' => 'Template (novo)',\n    'template' => 'Modelo',\n    'diff' => 'Mudanças',\n    'old_value' => 'Valor antigo',\n    'new_value' => 'Novo valor',\n    'preview_title' => 'Mudanças no modelo',\n    'template_updated' => 'Modelo foi atualizado',\n    'template_created' => 'Modelo foi criado',\n    'template_deleted' => 'O modelo foi apagado',\n  ],\n  'intellisense' => [\n    'learn_more' => 'Saiba mais',\n    'docs' => [\n      'partial' => 'Renderiza o conteúdo de um bloco do CMS.',\n      'page' => 'Renderiza o conteúdo de uma página CMS em um modelo de layout.',\n      'content' => 'Renderiza um bloco de conteúdo do CMS.',\n      'component' => 'Renderiza o conteúdo de marcação padrão para um componente CMS.',\n      'placeholder' => 'Renderiza uma seção de espaço reservado.',\n      'scripts' => 'Insere referências de arquivo JavaScript a scripts injetados pela aplicação.',\n      'styles' => 'Renderiza links CSS para arquivos de folha de estilo injetados pela aplicação.',\n      'flash' => 'Renderiza qualquer mensagem flash armazenada na sessão do usuário.',\n      'verbatim' => 'Marca as seções inteiras como sendo texto bruto que não deve ser analisado.',\n      'macro' => 'Permite definir funções personalizadas em um modelo.',\n      'for' => 'Faça um loop sobre cada valor em uma coleção.',\n      'if' => 'Permite a exibição condicional da marcação do modelo.',\n      'abs_filter' => 'O filtro `abs` retorna o valor absoluto.',\n      'batch_filter' => 'O filtro `batch` \"agrupa\" os itens retornando uma lista de listas com o número de itens fornecido. Um segundo parâmetro pode ser fornecido e usado para preencher itens ausentes.',\n      'capitalize_filter' => 'O filtro `capitalize` capitaliza um valor. O primeiro caractere será maiúsculo, todos os outros minúsculos.',\n      'column_filter' => 'O filtro `column` retorna os valores de uma única coluna na matriz de entrada.',\n      'convert_encoding_filter' => 'O filtro `convert_encoding` converte uma string de uma codificação para outra. O primeiro argumento é o conjunto de caracteres de saída esperado e o segundo é o conjunto de caracteres de entrada.',\n      'country_name_filter' => 'O filtro `country_name` retorna o nome do país dado seu código de duas letras ISO-3166.',\n      'currency_name_filter' => 'O filtro `currency_name` retorna o nome da moeda dado seu código de três letras.',\n      'currency_symbol_filter' => 'O filtro `currency_symbol` retorna o símbolo da moeda dado seu código de três letras.',\n      'data_uri_filter' => 'O filtro `data_uri` gera uma URL usando o esquema de dados conforme definido na RFC 2397.',\n      'date_filter' => 'O filtro `date` formata uma data para um determinado formato.',\n      'date_modify_filter' => 'O filtro `date_modify` modifica uma data com uma determinada string modificadora.',\n      'default_filter' => 'O filtro `default` retorna o valor padrão passado se o valor for indefinido ou vazio, caso contrário o valor da variável.',\n      'escape_filter' => 'O filtro `escape` escapa uma string usando estratégias que dependem do contexto.',\n      'filter_filter' => 'O filtro `filter` filtra elementos de uma sequência ou mapeamento usando uma função de seta. A função de seta recebe o valor da sequência ou mapeamento.',\n      'first_filter' => 'O filtro `first` retorna o primeiro \"elemento\" de uma sequência, um mapeamento ou uma string.',\n      'format_filter' => 'O filtro `format` formata uma determinada string substituindo os espaços reservados (os espaços reservados seguem a notação [sprintf](https://www.php.net/sprintf)).',\n      'format_currency_filter' => 'O filtro `format_currency` formata um número como moeda.',\n      'join_filter' => 'O filtro `join` retorna uma string que é a concatenação dos itens de uma sequência',\n      'json_encode_filter' => 'O filtro `json_encode` retorna a representação JSON de um valor.',\n      'keys_filter' => 'O filtro `keys` retorna as chaves de um array. É útil quando você deseja iterar sobre as chaves de um array.',\n      'last_filter' => 'O filtro `last` retorna o último \"elemento\" de uma sequência, mapeamento ou string.',\n      'length_filter' => 'O filtro `length` retorna o número de itens de uma sequência ou mapeamento, ou o comprimento de uma string.',\n      'lower_filter' => 'O filtro `lower` converte um valor para minúsculas.',\n      'map_filter' => 'O filtro `map` aplica uma função de seta aos elementos de uma sequência ou mapeamento. A função de seta recebe o valor da sequência ou mapeamento.',\n      'merge_filter' => 'O filtro `merge` mescla um array com outro array.',\n      'nl2br_filter' => 'O filtro `nl2br` insere quebras de linha HTML antes de todas as novas linhas em uma string.',\n      'number_format_filter' => 'O filtro `number_format` formata números. É um wrapper em torno da função [number_format](https://www.php.net/number_format) do PHP.',\n      'reduce_filter' => 'O filtro `reduce` reduz iterativamente uma sequência ou um mapeamento para um único valor usando uma função de seta, de modo a reduzi-lo a um único valor. A função de seta recebe o valor de retorno da iteração anterior e o valor atual da sequência ou mapeamento.',\n      'replace_filter' => 'O filtro `replace` formata uma determinada string substituindo os espaços reservados.',\n      'reverse_filter' => 'O filtro `reverse` reverte uma sequência, um mapeamento ou uma string.',\n      'round_filter' => 'O filtro `round` arredonda um número para uma determinada precisão.',\n      'slice_filter' => 'O filtro `slice` extrai uma fatia de uma sequência, um mapeamento ou uma string.',\n      'sort_filter' => 'O filtro `sort` ordena um array.',\n      'spaceless_filter' => 'Use o filtro `spaceless` para remover espaços em branco entre tags HTML, não espaços em branco dentro de tags HTML ou espaços em branco em texto simples.',\n      'split_filter' => 'O filtro `split` divide uma string pelo delimitador dado e retorna uma lista de strings.',\n      'striptags_filter' => 'O filtro `striptags` remove as tags SGML/XML e substitui o espaço em branco adjacente por um espaço.',\n      'title_filter' => 'O filtro `title` retorna uma versão em maiúsculas do valor. As palavras começam com letras maiúsculas, todos os caracteres restantes são minúsculos.',\n      'trim_filter' => 'O filtro `trim` retira espaços em branco (ou outros caracteres) do início e do fim de uma string.',\n      'upper_filter' => 'O filtro `upper` converte um valor para maiúscula.',\n      'url_encode_filter' => 'A porcentagem do filtro `url_encode` codifica uma determinada string como segmento de URL ou uma matriz como string de consulta.',\n      'page_filter' => 'O filtro `page` cria um link para uma página usando um nome de arquivo de página, sem extensão, como parâmetro.',\n      'theme_filter' => 'O filtro `theme` retorna um endereço relativo ao caminho do tema ativo do site. ',\n      'app_filter' => 'O filtro `app` retorna um endereço relativo ao caminho público do site.',\n      'media_filter' => 'O filtro `media` retorna um endereço relativo ao caminho público da [biblioteca do gerenciador de mídia](https://docs.octobercms.com/4.x/cms/media/introduction.html).',\n      'md_filter' => 'O filtro `md` converte o valor do Markdown para o formato HTML.',\n      'raw_filter' => 'O filtro `raw` marca o valor como \"seguro\", o que significa que uma variável não será escapada se `raw` for o último filtro aplicado a ela.',\n    ],\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/pt-br.json",
    "content": "{\n  \"Themes\": \"Temas\",\n  \"Manage Themes\": \"Gerenciar Temas\",\n  \"Customize Theme\": \"Personalizar Tema\",\n  \"Manage Maintenance Mode\": \"Gerenciar modo de manutenção\",\n  \"View Website During Maintenance\": \"Visualizar o site durante a manutenção\",\n  \"Manage Content\": \"Gerenciar conteúdo\",\n  \"Manage Asset Files\": \"Gerenciar arquivos dos recursos\",\n  \"Manage Pages\": \"Gerenciar páginas\",\n  \"Manage Layouts\": \"Gerenciar layouts\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configurar modo de manutenção e a página exibida.\",\n  \"Maintenance Mode\": \"Modo de manutenção\",\n  \"Select the page to show when maintenance mode is activated.\": \"Quando ativado visitantes do site vão ver a página selecionada.\",\n  \"Enable maintenance mode\": \"Ativar modo de manutenção\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"O modo de manutenção exibirá a página de manutenção para visitantes que não estão conectados à área de back-end.\",\n  \"Resources\": \"Recursos\",\n  \"Reference assets and variables included on this page.\": \"Recursos de referência e variáveis incluídas nesta página.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Arquivo(s) JavaScript na pasta assets/js\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"Arquivo(s) LESS na pasta assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Arquivo(s) SCSS na pasta assets/scss\",\n  \"Variables\": \"Variáveis\",\n  \"Page variables name(s) and value(s)\": \"Nome(s) e valor(es) das variáveis da página\",\n  \"Headers\": \"Cabeçalhos\",\n  \"Page header name(s) and value(s)\": \"Nome(s) e valor(es) do cabeçalho da página\",\n  \"Site Picker\": \"Seletor de Site\",\n  \"Displays links for selecting a different site.\": \"Exibe links para selecionar um site diferente.\",\n  \"Unknown component\": \"Componente desconhecido\",\n  \"View Bag\": \"View Bag\",\n  \"Stores custom template properties.\": \"Stores custom template properties.\",\n  \"By :name\": \"Por :name\",\n  \"The theme ':name' is not found.\": \"O tema \\\":name\\\" não foi encontrado.\",\n  \"Manage the front-end theme and customization options.\": \"Veja a lista de temas instalados e selecione o tema ativo.\",\n  \"Site Theme\": \"Temas\",\n  \"Properties\": \"Propriedades\",\n  \"Publish\": \"Publicar\",\n  \"Advanced\": \"Avançado\",\n  \"Name\": \"Nome\",\n  \"New theme name\": \"Nome do novo tema\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Nome do autor\",\n  \"Directory Name\": \"Nome do diretório\",\n  \"The destination theme directory\": \"O diretório-alvo de temas\",\n  \"Description\": \"Descrição\",\n  \"Theme description\": \"Descrição do tema\",\n  \"Homepage\": \"Site\",\n  \"Website URL\": \"URL do site\",\n  \"Author Code\": \"Código do autor\",\n  \"A unique code for the author used for distribution\": \"Um código exclusivo para o autor usado para distribuição\",\n  \"Theme Code\": \"Código\",\n  \"A unique code for this theme used for distribution\": \"Um código exclusivo para esse tema a ser usado para distribuição\",\n  \"Parent Theme\": \"Tema pai\",\n  \"Database Mode\": \"Modo de banco de dados\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Salve as alterações deste tema no banco de dados em vez nos arquivos\",\n  \"-- no parent --\": \"-- nenhum pai --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Pastas\",\n  \"Please select the theme folders you would like to export\": \"Por favor selecione as pastas de temas que deseja exportar\",\n  \"Theme archive file\": \"Arquivo de tema\",\n  \"Overwrite existing files\": \"Sobrescrever arquivos existentes\",\n  \"Untick this box to only import new files\": \"Desmarque para importar apenas arquivos novos\",\n  \"Please select the theme folders you would like to import\": \"Por favor selecione as pastas de temas que deseja importar\",\n  \"Activate\": \"Ativado\",\n  \"Customize\": \"Personalizar\",\n  \"Duplicate\": \"Duplicar\",\n  \"Duplicate Theme\": \"Duplicar tema\",\n  \"Theme Duplicated!\": \"Tema duplicado com sucesso!\",\n  \"Manage\": \"Gerenciar\",\n  \"Manage Theme\": \"Gerenciar tema\",\n  \"Edit Properties\": \"Editar propriedades\",\n  \"Save Properties\": \"Salvar propriedades\",\n  \"Import\": \"Importar\",\n  \"Import Theme\": \"Importar tema\",\n  \"Theme Imported!\": \"Tema importado com sucesso!\",\n  \"Export\": \"Exportar\",\n  \"Export Theme\": \"Exportar tema\",\n  \"Delete\": \"Excluir\",\n  \"Delete this theme? It cannot be undone!\": \"Tem certeza que deseja excluir este tema? Isto não pode ser revertido!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Não é possível excluir o tema ativo, torne outro tema ativo antes.\",\n  \"Theme deleted!\": \"Tema excluído com sucesso!\",\n  \"Create Theme\": \"Criar tema\",\n  \"Create\": \"Criar\",\n  \"Create a New Blank Theme\": \"Criar novo tema em branco\",\n  \"Theme Created!\": \"Tema criado com sucesso!\",\n  \"Please specify a name for the theme.\": \"Por favor forneça um nome para o tema.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"O nome só pode conter letras, números, e os símbolos: _-\",\n  \"Desired theme directory already exists.\": \"Diretório de tema escolhido já existe.\",\n  \"Theme directory\": \"Diretório do tema\",\n  \"Provide a new directory name for the duplicated theme.\": \"Forneça um novo nome de diretório para o tema duplicado.\",\n  \"Find More Themes\": \"Encontrar mais temas.\",\n  \"Saving Theme...\": \"Salvando tema...\",\n  \"Return to Themes List\": \"Retornar à lista de temas\",\n  \"No themes found\": \"Nenhum tema encontrado\",\n  \"Seed Theme\": \"Tema inicial\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seed the specified theme with blueprints, translations and data.\",\n  \"Theme Seeded!\": \"Theme Seeded!\",\n  \"Select Page Link\": \"Selecione o Link da Página\",\n  \"Search all references...\": \"Pesquisar todas as referências...\",\n  \"CMS Page\": \"Página do CMS\",\n  \"Link\": \"Link\",\n  \"Please select a CMS page\": \"Por favor, selecione uma página\",\n  \"Please select a page reference\": \"Por favor, selecione uma referência de página\",\n  \"Please enter a valid URL\": \"Por favor, insira uma URL válida\",\n  \"Delete Theme\": \"Excluir Tema\",\n  \"Activate Theme\": \"Ativar tema\",\n  \"Manage Partials\": \"Gerenciar Blocos\",\n  \"No Title\": \"Sem título\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Um nome exclusivo dado a este componente quando usá-lo no código de uma página ou esboço.\",\n  \"Alias\": \"Apelido\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Apelidos de componentes são necessários e podem conter letras, números e sublinhados. Os apelidos devem começar com uma letra.\",\n  \"Unnamed\": \"Sem nome\",\n  \"No description provided\": \"Nenhuma descrição fornecida\",\n  \"No snippets found\": \"Nenhum fragmento encontrado\",\n  \"Search...\": \"Buscar...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Fragmento com o código :code não foi encontrado.\",\n  \"Snippet\": \"Fragmentos\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Entre com o código para disponibilizar este bloco como um fragmento nas páginas estáticas.\",\n  \"Please enter the snippet code\": \"Please enter the snippet code\",\n  \"Snippet Code\": \"Código do fragmento\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"O nome é exibido na lista de fragmentos no menu lateral na área de páginas estáticas e nas páginas em que o fragmento é adicionado.\",\n  \"Please enter the snippet name\": \"Please enter the snippet name\",\n  \"Property Title\": \"Título da propriedade\",\n  \"Please provide the property title\": \"Por favor, forneça o título da propriedade\",\n  \"Code\": \"Código\",\n  \"Please provide the property name\": \"Por favor, forneça o nome da propriedade\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Código da propriedade deve iniciar com uma letra latina e pode conter apenas letras latinas e dígitos\",\n  \"Type\": \"Tipo\",\n  \"Select\": \"Selecionar\",\n  \"String\": \"Texto\",\n  \"Checkbox\": \"Caixa de seleção\",\n  \"Dropdown\": \"Caixa de seleção suspensa\",\n  \"Please select the property type\": \"Por favor, selecione o tipo da propriedade\",\n  \"Default\": \"Padrão\",\n  \"Options\": \"Opções\",\n  \"Define a Snippet Partial\": \"Define a Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Chave de opção inválida: %s. Chaves de opção podem conter apenas dígitos, letras latinas e os caracteres _ e -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"The description is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Details\": \"Detalhes\"\n}"
  },
  {
    "path": "modules/cms/lang/pt-pt/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nome de ficheiro inválido: \":name\". Os nomes de ficheiros podem conter apenas letras, números, sublinhados, traços e pontos. Veja alguns exemplos de nomes de ficheiros correctos: pagina.htm, pagina, subdiretoria/pagina',\n    'invalid_property' => 'A propriedade \":name\" não pode ser definida',\n    'file_already_exists' => 'O ficheiro \":name\" já existe.',\n    'error_saving' => 'Erro ao guardar ficheiro \":name\". Verifique as permissões de escrita.',\n    'error_creating_directory' => 'Erro ao criar a diretória :name. Verifique as permissões de escrita.',\n    'invalid_file_extension' => 'Extensão de ficheiro inválida: :invalid. Extensões válidas: :allowed.',\n    'error_deleting' => 'Erro ao apagar o ficheiro de modelo \":name\". Verifique as permissões de escrita.',\n    'delete_success' => 'Modelos excluídos com sucesso: :count.',\n    'file_name_required' => 'O campo de nome do ficheiro é necessário.',\n    'safe_mode_enabled' => 'Modo de segurança está activado.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Sitio',\n      'online' => 'Online',\n      'maintenance' => 'em manutenção',\n      'manage_themes' => 'Gerir temas',\n      'customize_theme' => 'Personalizar tema',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'O tema activo não foi definido.',\n      'not_found' => 'O tema activo não foi encontrado.',\n    ],\n    'edit' => [\n      'not_set' => 'O tema de edição não foi definido.',\n      'not_found' => 'O tema de edição não foi encontrado.',\n      'not_match' => 'O objeto que está tentando aceder não pertence ao tema que está sendo editado. Por favor, recarregue a página.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'A página \":name\" não foi encontrada',\n    'not_found' => [\n      'label' => 'Página não encontrada',\n      'help' => 'A página solicitada não pode ser encontrada.',\n    ],\n    'custom_error' => [\n      'label' => 'Erro na página',\n      'help' => 'Lamentamos, mas algo deu errado, a página não pode ser exibida.',\n    ],\n    'menu_label' => 'Páginas',\n    'unsaved_label' => 'Página(s) por guardar',\n    'no_list_records' => 'Nenhuma página encontrada',\n    'new' => 'Nova página',\n    'invalid_url' => 'Formato de URL inválido. A URL deve começar com uma barra e pode conter letras, números e os símbolos: _-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Deseja excluir as páginas selecionadas?',\n    'delete_confirm_single' => 'Deseja excluir esta página?',\n    'no_layout' => '-- sem esboço --',\n    'title' => 'Título da página',\n    'url' => 'URL da página',\n    'file_name' => 'Nome ficheiro da página',\n  ],\n  'layout' => [\n    'not_found_name' => 'O esboço \":name\" não foi encontrado',\n    'menu_label' => 'Esboços',\n    'unsaved_label' => 'Esboço(s) por guardar',\n    'no_list_records' => 'Nenhum esboço encontrado',\n    'new' => 'Novo esboço',\n    'delete_confirm_multiple' => 'Deseja excluir os esboços selecionados?',\n    'delete_confirm_single' => 'Deseja excluir este esboço?',\n  ],\n  'partial' => [\n    'not_found_name' => 'O bloco \":name\" não foi encontrado.',\n    'invalid_name' => 'Nome de bloco inválido: :name.',\n    'menu_label' => 'Blocos',\n    'unsaved_label' => 'Bloco(s) por guardar',\n    'no_list_records' => 'Nenhum bloco encontrado',\n    'delete_confirm_multiple' => 'Deseja apagar os blocos selecionados?',\n    'delete_confirm_single' => 'Deseja apagar este bloco?',\n    'new' => 'Novo bloco',\n  ],\n  'content' => [\n    'not_found_name' => 'O ficheiro de conteúdo \":name\" não foi encontrado.',\n    'menu_label' => 'Conteúdo',\n    'unsaved_label' => 'Conteúdo por guardar',\n    'no_list_records' => 'Nenhum ficheiro de conteúdo encontrado',\n    'delete_confirm_multiple' => 'Deseja apagar ficheiros ou diretórios de conteúdo selecionados?',\n    'delete_confirm_single' => 'Deseja apagar este ficheiro de conteúdo?',\n    'new' => 'Novo ficheiro de conteúdo',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'O nome do manipulador AJAX é inválido: :name.',\n    'not_found' => 'Manipulador AJAX \":name\" não encontrado.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Adicionar',\n    'search' => 'Pesquisar...',\n  ],\n  'editor' => [\n    'settings' => 'Configurações',\n    'title' => 'Título',\n    'new_title' => 'Título da nova página',\n    'url' => 'URL',\n    'filename' => 'Nome do ficheiro',\n    'layout' => 'Esboço',\n    'description' => 'Descrição',\n    'preview' => 'Visualizar',\n    'meta' => 'Meta',\n    'meta_title' => 'Título Meta',\n    'meta_description' => 'Descrição Meta',\n    'markup' => 'Edição',\n    'code' => 'Código',\n    'content' => 'Conteúdo',\n    'hidden' => 'Oculta',\n    'hidden_comment' => 'Páginas ocultas são acessíveis apenas para administradores.',\n    'enter_fullscreen' => 'Entrar no modo de tela cheia',\n    'exit_fullscreen' => 'Sair do modo de tela cheia',\n    'open_searchbox' => 'Abrir caixa de pesquisa',\n    'open_replacebox' => 'Abrir caixa de substituição',\n  ],\n  'asset' => [\n    'menu_label' => 'Ficheiros',\n    'unsaved_label' => 'Ficheiro(s) por guardar',\n    'drop_down_add_title' => 'Adicionar...',\n    'drop_down_operation_title' => 'Acção...',\n    'upload_files' => 'Enviar ficheiro(s)',\n    'create_file' => 'Criar ficheiro',\n    'create_directory' => 'Criar diretoria',\n    'directory_popup_title' => 'Novo diretoria',\n    'directory_name' => 'Nome do diretoria',\n    'rename' => 'Renomear',\n    'delete' => 'Apagar',\n    'move' => 'Mover',\n    'select' => 'Selecionar',\n    'new' => 'Novo ficheiro',\n    'rename_popup_title' => 'Renomear',\n    'rename_new_name' => 'Novo nome',\n    'invalid_path' => 'O caminho pode conter apenas letras, números, espaços e os símbolos: ._-/',\n    'error_deleting_file' => 'Erro ao apagar ficheiro :name.',\n    'error_deleting_dir_not_empty' => 'Erro ao apagar diretoria :name. A diretoria não está vazia.',\n    'error_deleting_dir' => 'Erro ao apagar diretoria :name.',\n    'invalid_name' => 'O nome pode conter apenas letras, números, espaços e os símbolos: ._-',\n    'original_not_found' => 'ficheiro ou diretoria original não encontrado',\n    'already_exists' => 'Um ficheiro ou diretoria com este nome já existe',\n    'error_renaming' => 'Erro ao renomear o ficheiro ou diretoria',\n    'name_cant_be_empty' => 'O nome não pode estar vazio',\n    'too_large' => 'O ficheiro enviado é muito grande. O tamanho máximo permitido é :max_size',\n    'type_not_allowed' => 'Apenas os seguintes tipos de ficheiros são permitidos: :allowed_types',\n    'file_not_valid' => 'O ficheiro não é válido',\n    'error_uploading_file' => 'Erro carregando ficheiro \":name\": :error',\n    'move_please_select' => 'por favor selecione',\n    'move_destination' => 'Diretoria de destino',\n    'move_popup_title' => 'Mover ficheiros',\n    'move_button' => 'Mover',\n    'selected_files_not_found' => 'ficheiros selecionados não encontrados',\n    'select_destination_dir' => 'Por favor, selecione uma diretoria de destino',\n    'destination_not_found' => 'Diretoria de destino não encontrada',\n    'error_moving_file' => 'Erro ao mover ficheiro :file',\n    'error_moving_directory' => 'Erro ao mover diretoria :dir',\n    'error_deleting_directory' => 'Erro ao apagar o diretoria original :dir',\n    'no_list_records' => 'Não foram encontrados ficheiros',\n    'delete_confirm' => 'Apagar ficheiros ou directorias selecionadas?',\n    'path' => 'Caminho',\n  ],\n  'component' => [\n    'menu_label' => 'Componentes',\n    'invalid_request' => 'O modelo não pode ser guardado devido a dados inválidos nos componentes.',\n    'no_records' => 'Nenhum componente encontrado',\n    'not_found' => 'O componente \":name\" não foi encontrado.',\n    'method_not_found' => 'O componente \":name\" não tem um método \":method\".',\n  ],\n  'template' => [\n    'invalid_type' => 'Tipo de modelo desconhecido.',\n    'not_found' => 'O modelo solicitado não foi encontrado.',\n    'saved' => 'O modelo foi salvo com sucesso.',\n    'no_list_records' => 'Não foram encontrados registos',\n    'delete_confirm' => 'Apagar modelos selecionados?',\n    'order_by' => 'Ordenar por',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Gerir conteúdo',\n    'manage_assets' => 'Gerir ficheiros',\n    'manage_pages' => 'Gerir páginas',\n    'manage_layouts' => 'Gerir esboços',\n    'manage_partials' => 'Gerir blocos',\n    'manage_themes' => 'Gerir temas',\n  ],\n  'theme_log' => [\n    'hint' => 'Este registo mostra as alterações efectuadas ao tema por administradores na área de backend.',\n    'menu_label' => 'Registo de tema',\n    'menu_description' => 'Ver alterações ao tema activo.',\n    'empty_link' => 'Registo de tema vazio',\n    'empty_loading' => 'Esvaziar registos de tema...',\n    'empty_success' => 'Registo de temas vazio',\n    'return_link' => 'Regressar ao registo de temas',\n    'id' => 'ID',\n    'id_label' => 'Registo ID',\n    'created_at' => 'Data & Hora',\n    'user' => 'Utilizador',\n    'type' => 'Tipo',\n    'type_create' => 'Criar',\n    'type_update' => 'Alterar',\n    'type_delete' => 'Apagar',\n    'theme_name' => 'Tema',\n    'theme_code' => 'Código de tema',\n    'old_template' => 'Modelo (antigo)',\n    'new_template' => 'Modelo (novo)',\n    'template' => 'Modelo',\n    'diff' => 'Alterações',\n    'old_value' => 'Valor antigo',\n    'new_value' => 'Novo valor',\n    'preview_title' => 'Modelo alterado',\n    'template_updated' => 'O modelo foi actualizado',\n    'template_created' => 'O modelo foi criado',\n    'template_deleted' => 'O modelo foi apagado',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/pt-pt.json",
    "content": "{\n  \"Themes\": \"Temas\",\n  \"Manage Themes\": \"Manage Themes\",\n  \"Customize Theme\": \"Personalizar Tema\",\n  \"Manage Maintenance Mode\": \"Manage Maintenance Mode\",\n  \"View Website During Maintenance\": \"View Website During Maintenance\",\n  \"Manage Content\": \"Manage Content\",\n  \"Manage Asset Files\": \"Manage Asset Files\",\n  \"Manage Pages\": \"Manage Pages\",\n  \"Manage Layouts\": \"Manage Layouts\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configurar modo de manutenção e a página exibida.\",\n  \"Maintenance Mode\": \"Modo de manutenção\",\n  \"Select the page to show when maintenance mode is activated.\": \"Quando activado visitantes do site vão ver a página selecionada.\",\n  \"Enable maintenance mode\": \"Activar modo de manutenção\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Modo de manutenção mostra a página de manutenção aos visitantes que não tenham feito acesso na área de backend.\",\n  \"Resources\": \"Resources\",\n  \"Reference assets and variables included on this page.\": \"Reference assets and variables included on this page.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript file(s) in the assets/js folder\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"LESS file(s) in the assets/less folder\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS file(s) in the assets/scss folder\",\n  \"Variables\": \"Variables\",\n  \"Page variables name(s) and value(s)\": \"Page variables name(s) and value(s)\",\n  \"Headers\": \"Headers\",\n  \"Page header name(s) and value(s)\": \"Page header name(s) and value(s)\",\n  \"Site Picker\": \"Site Picker\",\n  \"Displays links for selecting a different site.\": \"Displays links for selecting a different site.\",\n  \"Unknown component\": \"Unknown component\",\n  \"View Bag\": \"View Bag\",\n  \"Stores custom template properties.\": \"Stores custom template properties.\",\n  \"By :name\": \"By :name\",\n  \"The theme ':name' is not found.\": \"O tema \\\":name\\\" não foi encontrado.\",\n  \"Manage the front-end theme and customization options.\": \"Veja a lista de temas instalados e selecione o tema acivo.\",\n  \"Site Theme\": \"Tema de front-end\",\n  \"Properties\": \"Propriedades\",\n  \"Publish\": \"Publish\",\n  \"Advanced\": \"Advanced\",\n  \"Name\": \"Nome\",\n  \"New theme name\": \"Nome do novo tema\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Nome do autor\",\n  \"Directory Name\": \"Nome da diretória\",\n  \"The destination theme directory\": \"A diretória-alvo do tema\",\n  \"Description\": \"Descrição\",\n  \"Theme description\": \"Descrição do tema\",\n  \"Homepage\": \"Sitio\",\n  \"Website URL\": \"URL do sitio\",\n  \"Author Code\": \"Author Code\",\n  \"A unique code for the author used for distribution\": \"A unique code for the author used for distribution\",\n  \"Theme Code\": \"Código\",\n  \"A unique code for this theme used for distribution\": \"Um código exclusivo para distribuição deste tema\",\n  \"Parent Theme\": \"Parent Theme\",\n  \"Database Mode\": \"Database Mode\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Save changes to this theme in the database instead of the filesystem\",\n  \"-- no parent --\": \"-- no parent --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Pastas\",\n  \"Please select the theme folders you would like to export\": \"Por favor selecione as pastas de temas que deseja exportar\",\n  \"Theme archive file\": \"Ficheiro de tema\",\n  \"Overwrite existing files\": \"Sobrescrever ficheiros existentes\",\n  \"Untick this box to only import new files\": \"Desmarque para importar apenas ficheiros novos\",\n  \"Please select the theme folders you would like to import\": \"Por favor selecione as pastas de temas que deseja importar\",\n  \"Activate\": \"Activado\",\n  \"Customize\": \"Personalizar\",\n  \"Duplicate\": \"Duplicar\",\n  \"Duplicate Theme\": \"Duplicar tema\",\n  \"Theme Duplicated!\": \"Tema duplicado com sucesso!\",\n  \"Manage\": \"Gerir\",\n  \"Manage Theme\": \"Gerir tema\",\n  \"Edit Properties\": \"Editar propriedades\",\n  \"Save Properties\": \"Guardar propriedades\",\n  \"Import\": \"Importar\",\n  \"Import Theme\": \"Importar tema\",\n  \"Theme Imported!\": \"Tema importado com sucesso!\",\n  \"Export\": \"Exportar\",\n  \"Export Theme\": \"Exportar tema\",\n  \"Delete\": \"Apagar\",\n  \"Delete this theme? It cannot be undone!\": \"Tem certeza que deseja apagar este tema? Isto não pode ser revertido!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Não é possível apagar o tema activo, torne outro tema activo antes.\",\n  \"Theme deleted!\": \"Tema apagado com sucesso!\",\n  \"Create Theme\": \"Criar tema\",\n  \"Create\": \"Criar\",\n  \"Create a New Blank Theme\": \"Criar novo tema em branco\",\n  \"Theme Created!\": \"Tema criado com sucesso!\",\n  \"Please specify a name for the theme.\": \"Por favor forneça um nome para o tema.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"O nome só pode conter letras, números, e os símbolos: _-\",\n  \"Desired theme directory already exists.\": \"Diretoria de tema escolhido já existe.\",\n  \"Theme directory\": \"Diretoria do tema\",\n  \"Provide a new directory name for the duplicated theme.\": \"Forneça um novo nome de diretoria para o tema duplicado.\",\n  \"Find More Themes\": \"Encontrar mais temas.\",\n  \"Saving Theme...\": \"Guardando tema...\",\n  \"Return to Themes List\": \"Regressar à lista de temas\",\n  \"No themes found\": \"No themes found\",\n  \"Seed Theme\": \"Seed Theme\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seed the specified theme with blueprints, translations and data.\",\n  \"Theme Seeded!\": \"Theme Seeded!\",\n  \"Select Page Link\": \"Select Page Link\",\n  \"Search all references...\": \"Search all references...\",\n  \"CMS Page\": \"Página do CMS\",\n  \"Link\": \"Link\",\n  \"Please select a CMS page\": \"Please select a CMS page\",\n  \"Please select a page reference\": \"Please select a page reference\",\n  \"Please enter a valid URL\": \"Please enter a valid URL\",\n  \"Delete Theme\": \"Delete Theme\",\n  \"Activate Theme\": \"Activate Theme\",\n  \"Manage Partials\": \"Manage Partials\",\n  \"No Title\": \"No Title\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Um nome exclusivo dado a este componente quando utilizado no código de uma página ou esboço.\",\n  \"Alias\": \"Apelido\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Apelidos de componentes são necessários e podem conter letras, números e sublinhados. Os apelidos devem começar com uma letra.\",\n  \"Unnamed\": \"Sem nome\",\n  \"No description provided\": \"Nenhuma descrição fornecida\",\n  \"No snippets found\": \"No snippets found\",\n  \"Search...\": \"Search...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Snippet with the requested code :code was not found in the theme.\",\n  \"Snippet\": \"Snippet\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Enter a code to make this partial available as a snippet in content editors.\",\n  \"Please enter the snippet code\": \"Please enter the snippet code\",\n  \"Snippet Code\": \"Snippet Code\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"The name is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Please enter the snippet name\": \"Please enter the snippet name\",\n  \"Property Title\": \"Property Title\",\n  \"Please provide the property title\": \"Please provide the property title\",\n  \"Code\": \"Code\",\n  \"Please provide the property name\": \"Please provide the property name\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\",\n  \"Type\": \"Type\",\n  \"Select\": \"Select\",\n  \"String\": \"String\",\n  \"Checkbox\": \"Checkbox\",\n  \"Dropdown\": \"Dropdown\",\n  \"Please select the property type\": \"Please select the property type\",\n  \"Default\": \"Default\",\n  \"Options\": \"Options\",\n  \"Define a Snippet Partial\": \"Define a Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"The description is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Details\": \"Details\"\n}"
  },
  {
    "path": "modules/cms/lang/ro/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Nume de fisier invalid: :name. Numele de fisiere pot sa contina doar caractere alfanumerice, linii si puncte. Unele exemple de nume de fisiere corecte: pagina_1.htm, pagina-2, subdirector/pagina',\n    'invalid_property' => 'Proprietatea \":name\" nu poate fi setata',\n    'file_already_exists' => 'Fisierul \":name\" deja exista.',\n    'error_saving' => 'Eroare la salvarea fisierului \":name\". Verificati permisiunile de scriere.',\n    'error_creating_directory' => 'Eroare la crearea directorului :name. Verificati permisiunile de scriere.',\n    'invalid_file_extension' => 'Extensie de fisier invalida: :invalid. Extensiile permise sunt: :allowed.',\n    'error_deleting' => 'Eroare la stergerea fisierului sablon \":name\". Verificati permisiunile de scriere.',\n    'delete_success' => 'Sabloanele au fost sterse cu succes, in total: :count.',\n    'file_name_required' => 'Campul nume fisier este necesar.',\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Tema activa nu este setata.',\n      'not_found' => 'Tema activa nu a fost gasita.',\n    ],\n    'edit' => [\n      'not_set' => 'Tema de editare nu este setata.',\n      'not_found' => 'Tema de editare nu a fost gasita.',\n      'not_match' => 'Obiectul pe care incercati sa-l accesati nu apartine temei care este in curs de editare. Va rugam reincarcati pagina.',\n    ],\n  ],\n  'page' => [\n    'not_found' => [\n      'label' => 'Pagina negasita',\n      'help' => 'Pagina cautata nu a putut fi gasita.',\n    ],\n    'custom_error' => [\n      'label' => 'Eroare pagina',\n      'help' => 'Ne cerem scuze, dar a aparut o problema si pagina nu poate fi afisata.',\n    ],\n    'menu_label' => 'Pagini',\n    'no_list_records' => 'Nu au fost gasite pagini',\n    'new' => 'Pagina noua',\n    'invalid_url' => 'Format URL invalid. URL-ul ar trebui sa inceapa cu un slash ( / ) si poate sa contina cifre, caractere latine si urmatoarele simboluri: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Vreti sa stergeti paginile selectate?',\n    'delete_confirm_single' => 'Vreti sa stergeti aceasta pagina?',\n    'no_layout' => '-- fara macheta --',\n  ],\n  'layout' => [\n    'not_found_name' => 'Macheta \\':name\\' nu a fost gasita',\n    'menu_label' => 'Machete',\n    'no_list_records' => 'Nu au fost gasite machete',\n    'new' => 'Macheta noua',\n    'delete_confirm_multiple' => 'Vreti sa stergeti machetele selectate?',\n    'delete_confirm_single' => 'Vreti sa stergeti macheta selectata?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Componenta partiala \\':name\\' nu a fost gasita.',\n    'invalid_name' => 'Nume invalid pentru componenta partiala: :name.',\n    'menu_label' => 'Componente partiale',\n    'no_list_records' => 'Nu au fost gasite componente partiale',\n    'delete_confirm_multiple' => 'Vreti sa stergeti componentele partiale selectate?',\n    'delete_confirm_single' => 'Vreti sa stergeti aceasta componenta partiala?',\n    'new' => 'Componenta partiala noua',\n  ],\n  'content' => [\n    'not_found_name' => 'Fisierul de continut \\':name\\' nu a fost gasit.',\n    'menu_label' => 'Continut',\n    'no_list_records' => 'Nu au fost gasite fisiere de continut',\n    'delete_confirm_multiple' => 'Vreti sa stergeti fisierele si directoarele cu continut?',\n    'delete_confirm_single' => 'Vreti sa stergeti acest fisier cu continut?',\n    'new' => 'Fisier nou cu continut',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Nume Functie AJAX invalid: :name.',\n    'not_found' => 'Functia AJAX \\':name\\' nu a fost gasita.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Adaugare',\n    'search' => 'Cautare...',\n  ],\n  'editor' => [\n    'settings' => 'Setari',\n    'title' => 'Titlu',\n    'new_title' => 'Titlu de pagina noua',\n    'url' => 'URL',\n    'filename' => 'Nume fisier',\n    'layout' => 'Macheta',\n    'description' => 'Descriere',\n    'preview' => 'Previzualizare',\n    'meta' => 'Meta',\n    'meta_title' => 'Titlu Meta',\n    'meta_description' => 'Descriere Meta',\n    'markup' => 'Markup',\n    'code' => 'Cod',\n    'content' => 'Continut',\n    'hidden' => 'Ascuns',\n    'hidden_comment' => 'Fisierele ascunse sunt vizibile doar administratorilor logati in sistem',\n    'enter_fullscreen' => 'Intrare in mod ecran complet',\n    'exit_fullscreen' => 'Iesire din mod ecran complet',\n  ],\n  'asset' => [\n    'menu_label' => 'Fisiere design',\n    'drop_down_add_title' => 'Adaure...',\n    'drop_down_operation_title' => 'Actiune...',\n    'upload_files' => 'Incarcare fisier(e)',\n    'create_file' => 'Creare fisier',\n    'create_directory' => 'Creare director',\n    'rename' => 'Redenumire',\n    'delete' => 'Stergere',\n    'move' => 'Mutare',\n    'new' => 'Fisier nou',\n    'rename_popup_title' => 'Redenumire',\n    'rename_new_name' => 'Nume nou',\n    'invalid_path' => 'Calea poate sa contina doar cifre, caractere latine, spatii si urmatoarele simboluri: ._-/',\n    'error_deleting_file' => 'Eroare la stergerea fisierului :name.',\n    'error_deleting_dir_not_empty' => 'Eroare la stergerea directorului :name. Directorul nu este gol.',\n    'error_deleting_dir' => 'Eroare la stergerea fisierului :name.',\n    'invalid_name' => 'Numele poate sa contina doar cifre, caractere latine si urmatoarele simboluri: ._-',\n    'original_not_found' => 'Fisierul sau directorul original nu a fost gasit',\n    'already_exists' => 'Fisierul sau directorul cu acest nume exista deja',\n    'error_renaming' => 'Eroare la redenumirea fisierului sau directorului',\n    'name_cant_be_empty' => 'Numele nu poate fi gol',\n    'too_large' => 'Fisierul incarcat este prea mare. Dimensiunea maxima permisa este: :max_size',\n    'type_not_allowed' => 'Doar urmatoarele tipuri de fisiere sunt permise: :allowed_types',\n    'file_not_valid' => 'Fisierul nu este valid',\n    'error_uploading_file' => 'Eroare la incarcarea fisierului \":name\", eroare: :error',\n    'move_please_select' => 'selectati',\n    'move_destination' => 'Director destinatie',\n    'move_popup_title' => 'Mutare fisiere',\n    'move_button' => 'Mutare',\n    'selected_files_not_found' => 'Fisierele selectate nu au fost gasite',\n    'select_destination_dir' => 'Selectati un director pentru destinatie',\n    'destination_not_found' => 'Directorul destinatie nu a fost gasit',\n    'error_moving_file' => 'Eroare la mutarea fisierului :file',\n    'error_moving_directory' => 'Eroare la mutarea directorului :dir',\n    'error_deleting_directory' => 'Eroare la stergerea directorului original :dir',\n    'path' => 'Cale',\n  ],\n  'component' => [\n    'menu_label' => 'Componente',\n    'invalid_request' => 'Sablonul nu a putut fi salvat din cauza datelor invalide ale componentei.',\n    'no_records' => 'Nicio componenta nu a fost gasita',\n    'not_found' => 'Componenta \\':name\\' nu a fost gasita.',\n    'method_not_found' => 'Componenta \\':name\\' nu contine nicio metoda \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Tip de sablon necunoscut.',\n    'not_found' => 'Sablonul solicitat nu a fost gasit.',\n    'saved' => 'Sablonul a fost salvat cu succes.',\n  ],\n  'permissions' => [\n    'manage_content' => 'Gestioneaza continut',\n    'manage_assets' => 'Gestioneaza fisiere design',\n    'manage_pages' => 'Gestioneaza pagini',\n    'manage_layouts' => 'Gestioneaza machete',\n    'manage_partials' => 'Gestioneaza componente partiale',\n    'manage_themes' => 'Gestioneaza teme',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/ro.json",
    "content": "{\n  \"Themes\": \"Teme\",\n  \"Manage Themes\": \"Gestionați teme\",\n  \"Customize Theme\": \"Personalizați tema\",\n  \"Manage Maintenance Mode\": \"Gestionați modul de mentenanță\",\n  \"View Website During Maintenance\": \"Vizualizați site-ul în timpul mentenanței\",\n  \"Manage Content\": \"Gestionați conținutul\",\n  \"Manage Asset Files\": \"Gestionați fișierele cu active\",\n  \"Manage Pages\": \"Gestionați paginile\",\n  \"Manage Layouts\": \"Gestionați aspectele\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Configurați pagina modului de întreținere și comutați setarea.\",\n  \"Maintenance Mode\": \"modul de întreținere\",\n  \"Select the page to show when maintenance mode is activated.\": \"Selectați pagina pentru a afișa când modul de întreținere este activat.\",\n  \"Enable maintenance mode\": \"Activați modul de întreținere\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Modul de întreținere va afișa pagina de întreținere vizitatorilor care nu sunt conectați în zona de back-end.\",\n  \"Resources\": \"Resurse\",\n  \"Reference assets and variables included on this page.\": \"Referiți active și variabile incluse pe această pagină.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Fișier(e) JavaScript în folderul assets/js\",\n  \"LESS\": \"MAI PUȚIN\",\n  \"LESS file(s) in the assets/less folder\": \"LESS fișier(e) în folderul assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Fișier(e) SCSS în folderul assets/scss\",\n  \"Variables\": \"Variabile\",\n  \"Page variables name(s) and value(s)\": \"Numele și valoarea (valorile) ale variabilelor de pagină\",\n  \"Headers\": \"Anteturi\",\n  \"Page header name(s) and value(s)\": \"Numele și valoarea(ele) antetului paginii\",\n  \"Site Picker\": \"Selector de site\",\n  \"Displays links for selecting a different site.\": \"Afișează linkuri pentru selectarea unui alt site.\",\n  \"Unknown component\": \"Componentă necunoscută\",\n  \"View Bag\": \"Vezi geanta\",\n  \"Stores custom template properties.\": \"Stochează proprietăți personalizate ale șablonului.\",\n  \"By :name\": \"Dupa nume\",\n  \"The theme ':name' is not found.\": \"Tema „:nume” nu este găsită.\",\n  \"Manage the front-end theme and customization options.\": \"Previzualizati lista de teme instalate si selectati o tema activa.\",\n  \"Site Theme\": \"Tema Front-end\",\n  \"Properties\": \"Proprietăți\",\n  \"Publish\": \"Publica\",\n  \"Advanced\": \"Avansat\",\n  \"Name\": \"Nume\",\n  \"New theme name\": \"Nume nou temei\",\n  \"Author Name\": \"Numele autorului\",\n  \"Person or company name\": \"Nume persoană sau companie\",\n  \"Directory Name\": \"Nume director\",\n  \"The destination theme directory\": \"Directorul cu teme de destinație\",\n  \"Description\": \"Descriere\",\n  \"Theme description\": \"Descrierea temei\",\n  \"Homepage\": \"Pagina principala\",\n  \"Website URL\": \"URL Website\",\n  \"Author Code\": \"Cod de autor\",\n  \"A unique code for the author used for distribution\": \"Un cod unic pentru autor folosit pentru distribuire\",\n  \"Theme Code\": \"Cod temă\",\n  \"A unique code for this theme used for distribution\": \"Un cod unic pentru această temă folosit pentru distribuție\",\n  \"Parent Theme\": \"Tema părintelui\",\n  \"Database Mode\": \"Modul bază de date\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Salvați modificările aduse acestei teme în baza de date în loc de sistemul de fișiere\",\n  \"-- no parent --\": \"-- nici un părinte --\",\n  \"Theme\": \"Temă\",\n  \"Folders\": \"Foldere\",\n  \"Please select the theme folders you would like to export\": \"Vă rugăm să selectați dosarele cu teme pe care doriți să le exportați\",\n  \"Theme archive file\": \"Fișier de arhivă a temei\",\n  \"Overwrite existing files\": \"suprascrie fișierele existente\",\n  \"Untick this box to only import new files\": \"Debifați această casetă pentru a importa numai fișiere noi\",\n  \"Please select the theme folders you would like to import\": \"Vă rugăm să selectați dosarele cu teme pe care doriți să le importați\",\n  \"Activate\": \"Activare\",\n  \"Customize\": \"Personalizați\",\n  \"Duplicate\": \"Duplicat\",\n  \"Duplicate Theme\": \"Temă duplicat\",\n  \"Theme Duplicated!\": \"Tema duplicat!\",\n  \"Manage\": \"Administra\",\n  \"Manage Theme\": \"Gestionați tema\",\n  \"Edit Properties\": \"Editați proprietăți\",\n  \"Save Properties\": \"Salvați proprietăți\",\n  \"Import\": \"Importă\",\n  \"Import Theme\": \"Importa temă\",\n  \"Theme Imported!\": \"Tema importată!\",\n  \"Export\": \"Exportă\",\n  \"Export Theme\": \"Exportați tema\",\n  \"Delete\": \"Șterge\",\n  \"Delete this theme? It cannot be undone!\": \"Ștergeți această temă? Nu poate fi anulat!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Nu se poate șterge tema activă, încercați mai întâi să activați o altă temă.\",\n  \"Theme deleted!\": \"Tema a fost ștearsă!\",\n  \"Create Theme\": \"Creați o temă\",\n  \"Create\": \"Crea\",\n  \"Create a New Blank Theme\": \"Creați o nouă temă goală\",\n  \"Theme Created!\": \"Tema creată!\",\n  \"Please specify a name for the theme.\": \"Vă rugăm să specificați un nume pentru temă.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Numele poate conține doar cifre, litere latine și următoarele simboluri: _-\",\n  \"Desired theme directory already exists.\": \"Directorul de teme dorit există deja.\",\n  \"Theme directory\": \"Director de teme\",\n  \"Provide a new directory name for the duplicated theme.\": \"Furnizați un nou nume de director pentru tema duplicată.\",\n  \"Find More Themes\": \"Gasiti mai multe teme in \\\"Piata OctoberCMS\\\".\",\n  \"Saving Theme...\": \"Se salvează tema...\",\n  \"Return to Themes List\": \"Reveniți la Lista de teme\",\n  \"No themes found\": \"Nu s-au găsit teme\",\n  \"Seed Theme\": \"Tema semințelor\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Semănați tema specificată cu planuri, traduceri și date.\",\n  \"Theme Seeded!\": \"Tema Seeded!\",\n  \"Select Page Link\": \"Selectați Link-ul paginii\",\n  \"Search all references...\": \"Căutați toate referințele...\",\n  \"CMS Page\": \"Pagina CMS\",\n  \"Link\": \"Legătură\",\n  \"Please select a CMS page\": \"Vă rugăm să selectați o pagină CMS\",\n  \"Please select a page reference\": \"Vă rugăm să selectați o referință de pagină\",\n  \"Please enter a valid URL\": \"Vă rugăm să introduceți o adresă URL validă\",\n  \"Delete Theme\": \"Șterge tema\",\n  \"Activate Theme\": \"Activați tema\",\n  \"Manage Partials\": \"Gestionați parțiale\",\n  \"No Title\": \"Fara titlu\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Numele unic dat acestei componente atunci cand este folosita intr-o pagina sau intr-o macheta.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Aliasul componentei este necesar si poate sa contina doar caractere latine, cifre si caractere underscore. Denumirile are trebui sa inceapa cu un caracter latin.\",\n  \"Unnamed\": \"Fara nume\",\n  \"No description provided\": \"Nicio descriere furnizata\",\n  \"No snippets found\": \"Nu s-au găsit fragmente\",\n  \"Search...\": \"Căutare...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Fragmentul cu codul solicitat :code nu a fost găsit în temă.\",\n  \"Snippet\": \"Fragment\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Introduceți un cod pentru a face acest parțial disponibil ca fragment în editorii de conținut.\",\n  \"Please enter the snippet code\": \"Vă rugăm să introduceți codul fragmentului\",\n  \"Snippet Code\": \"Cod fragment\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Numele este afișat în lista de fragmente din editor atunci când este adăugat un fragment.\",\n  \"Please enter the snippet name\": \"Introduceți numele fragmentului\",\n  \"Property Title\": \"Titlul de proprietate\",\n  \"Please provide the property title\": \"Vă rugăm să furnizați titlul de proprietate\",\n  \"Code\": \"Cod\",\n  \"Please provide the property name\": \"Vă rugăm să furnizați numele proprietății\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Codul proprietății ar trebui să înceapă cu o literă latină și poate conține numai litere, cifre și liniuțe latine\",\n  \"Type\": \"Tip\",\n  \"Select\": \"Selectați\",\n  \"String\": \"Şir\",\n  \"Checkbox\": \"Caseta de bifat\",\n  \"Dropdown\": \"Scapă jos\",\n  \"Please select the property type\": \"Vă rugăm să selectați tipul de proprietate\",\n  \"Default\": \"Mod implicit\",\n  \"Options\": \"Opțiuni\",\n  \"Define a Snippet Partial\": \"Definiți un fragment parțial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Cheie de opțiune derulantă nevalidă: :key. Tastele de opțiuni pot conține doar cifre, litere latine și caractere _ și -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Descrierea este afișată în lista de fragmente din editor atunci când este adăugat un fragment.\",\n  \"Details\": \"Detalii\",\n  \"Frontend Theme\": \"Tema Front-end\"\n}"
  },
  {
    "path": "modules/cms/lang/rs/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Naziv fajla nije validan: :name. Nazivi fajlova mogu sadržati samo alfanumeričke simbole, donje crte, povlake i tačke. Validni primeri su: strana.htm, strana, direktorijum/strana',\n    'invalid_property' => 'Svojstvo \\':name\\' se ne može postaviti',\n    'file_already_exists' => 'Fajl \\':name\\' već postoji.',\n    'error_saving' => 'Greška pri čuvanju fajla \\':name\\'. Proveri dozvole na sistemu.',\n    'error_creating_directory' => 'Greška pri pravljenju direktorijuma :name. Proveri dozvole na sistemu.',\n    'invalid_file_extension' => 'Ekstenzija fajla nije validna: :invalid. Dozvoljene ekstenzije su: :allowed.',\n    'error_deleting' => 'Greška pri brisanju šablonskog fajla \\':name\\'. Proveri dozvole na sistemu.',\n    'delete_success' => 'Izbrisani šabloni: :count.',\n    'file_name_required' => 'Polje za naziv fajla je obavezno.',\n    'safe_mode_enabled' => 'Signurni režim je trenutno omogućen. Izmena PHP koda u CMS šablonima je trenutno onemogućena. Da isključiš siguran režim rada, izmeni vrednost konfiguracione promenljive `cms.safe_mode` u `false`.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Sajt',\n      'online' => 'Na mreži',\n      'maintenance' => 'U fazi održavanju',\n      'manage_themes' => 'Upravljaj temama',\n      'customize_theme' => 'Izmeni temu',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktivna tema nije postavljena.',\n      'not_found' => 'Aktivna tema nije pronađena.',\n    ],\n    'edit' => [\n      'not_set' => 'Tema za izmenu nije postavljena.',\n      'not_found' => 'Tema za izmenu nije pronađena.',\n      'not_match' => 'Objekat kojem pokušavaš da pristupiš ne pripada temi koju menjaš. Osveži stranicu.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Strana \\':name\\' nije pronađena',\n    'not_found' => [\n      'label' => 'Strana nije pronađena',\n      'help' => 'Tražena strana nije pronađena.',\n    ],\n    'custom_error' => [\n      'label' => 'Greška sa stranom',\n      'help' => 'Žao nam je, nešto je pošlo po zlu pa strana ne može biti prikazana.',\n    ],\n    'menu_label' => 'Strane',\n    'unsaved_label' => 'Nesačuvana strana(e)',\n    'no_list_records' => 'Nema pronađenih strana',\n    'new' => 'Nova strana',\n    'invalid_url' => 'Format URL-a nije validan. URL treba početi sa kosom crtom i može sadržati brojeve, latinska slova, kao i sledeće simbole: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Izbriši odabrane strane?',\n    'delete_confirm_single' => 'Izbriši ovu stranu?',\n    'no_layout' => '-- nema plana --',\n    'title' => 'Naslov strane',\n    'url' => 'URL strane',\n    'file_name' => 'Naziv fajla strane',\n  ],\n  'layout' => [\n    'not_found_name' => 'Plan \\':name\\' nije pronađen',\n    'menu_label' => 'Planovi',\n    'unsaved_label' => 'Nesačuvani plan(ovi)',\n    'no_list_records' => 'Nema pronađenih planova',\n    'new' => 'Novi plan',\n    'delete_confirm_multiple' => 'Izbriši izabrane planove?',\n    'delete_confirm_single' => 'Izbriši ovaj plan?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Parcijal \\':name\\' nije pronađen',\n    'invalid_name' => 'Naziv parcijala nije validan: :name.',\n    'menu_label' => 'Parcijal',\n    'unsaved_label' => 'Nesačuvan parcijal(i)',\n    'no_list_records' => 'Nema pronađenih parcijala',\n    'delete_confirm_multiple' => 'Izbriši izabrane parcijale?',\n    'delete_confirm_single' => 'Izbriši ovaj parcijal?',\n    'new' => 'Novi parcijal',\n  ],\n  'content' => [\n    'not_found_name' => 'Fajl sadržaja \\':name\\' nije pronađen',\n    'menu_label' => 'Sadržaj',\n    'unsaved_label' => 'Nesačuvani sadržaj',\n    'no_list_records' => 'Fajlovi za sardžaj nisu pronađeni',\n    'delete_confirm_multiple' => 'Izbriši odabrane fajlove ili direktorijume za sadržaj?',\n    'delete_confirm_single' => 'Izbriši ovaj fajl za sadržaj?',\n    'new' => 'Novi fajl za sadržaj',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Naziv za AJAX rukovatelja nije validan: :name.',\n    'not_found' => 'AJAX rukovatelj \\':name\\' nije pronađen.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Dodaj',\n    'search' => 'Traži...',\n  ],\n  'editor' => [\n    'settings' => 'Podešavanja',\n    'title' => 'Naslov',\n    'new_title' => 'Naslov nove strane',\n    'url' => 'URL',\n    'filename' => 'Naziv fajla',\n    'layout' => 'Plan',\n    'description' => 'Opis',\n    'preview' => 'Pregled',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Naslov',\n    'meta_description' => 'Meta Opis',\n    'markup' => 'Označavanje',\n    'code' => 'Kod',\n    'content' => 'Sadržaj',\n    'hidden' => 'Skrivena',\n    'hidden_comment' => 'Skrivena stranica je dostupna samo korisnicima koji su ulogovani na pozadinski sistem.',\n    'enter_fullscreen' => 'Uđite u režim punog ekrana',\n    'exit_fullscreen' => 'Izađite iz režima punog ekrana',\n    'open_searchbox' => 'Otvori polje za pretragu',\n    'open_replacebox' => 'Otvori polje za zamenu',\n    'commit' => 'Izvrši',\n    'reset' => 'Resetuj',\n    'commit_confirm' => 'Da li zaista želite da izvršite promene nad ovim fajlom? Ovo će pregaziti postojeći',\n    'reset_confirm' => 'Da li zaista želite da resetujete ovaj fajl? Ovo će u potpunosti zameniti trenutni sa onim koji je na sistemu',\n    'committing' => 'Izvršavanje',\n    'resetting' => 'Resetovanje',\n    'commit_success' => 'Izvršenje :type je uspešno.',\n    'reset_success' => 'Resetovanje :type je uspešno.',\n  ],\n  'asset' => [\n    'menu_label' => 'Sredstva',\n    'unsaved_label' => 'Nesačuvano sredstvo(a)',\n    'drop_down_add_title' => 'Dodaj...',\n    'drop_down_operation_title' => 'Radnja...',\n    'upload_files' => 'Otpremi fajl(ove)',\n    'create_file' => 'Napravi fajl',\n    'create_directory' => 'Napravi direktorijum',\n    'directory_popup_title' => 'Novi direktorijum',\n    'directory_name' => 'Naziv direktorijuma',\n    'rename' => 'Promeni naziv',\n    'delete' => 'Izbriši',\n    'move' => 'Pomeri',\n    'select' => 'Izaberi',\n    'new' => 'Novi fajl',\n    'rename_popup_title' => 'Promeni naziv',\n    'rename_new_name' => 'Novi naziv',\n    'invalid_path' => 'Putanja može sadržati samo brojeve, latinska slova, razmake, kao i sledeće simbole: ._-/',\n    'error_deleting_file' => 'Greška pri brisanju fajla :name.',\n    'error_deleting_dir_not_empty' => 'Greška pri brisanju direktorijuma :name. Direktorijum nije prazan.',\n    'error_deleting_dir' => 'Greška pri brisanju direktorijuma :name.',\n    'invalid_name' => 'Naziv može sadržati samo brojeve, latinska slova, razmake, kao i sledeće simbole: ._-',\n    'original_not_found' => 'Originalni fajl ili direktorijum nije pronađen',\n    'already_exists' => 'Fajl ili direktorijum sa ovim nazivom već postoji',\n    'error_renaming' => 'Greška pri promeni naziva fajla ili direktorijuma',\n    'name_cant_be_empty' => 'Naziv ne može biti prazan',\n    'too_large' => 'Otpremljeni fajl je previše velik. Maksimalna dozvoljena veličina je :max_size',\n    'type_not_allowed' => 'Samo sledeći tipovi fajla su dozvoljeni: :allowed_types',\n    'file_not_valid' => 'Fajl nije validan',\n    'error_uploading_file' => 'Greška pri otpremanju fajla \\':name\\': :error',\n    'move_please_select' => 'Izaberi',\n    'move_destination' => 'Odredište direktorijuma',\n    'move_popup_title' => 'Pomeri sredstva',\n    'move_button' => 'Pomeri',\n    'selected_files_not_found' => 'Izabrani fajlovi nisu pronađeni',\n    'select_destination_dir' => 'Izaberi odredišni direktorijum',\n    'destination_not_found' => 'Odredišni direktorijum nije pronađen',\n    'error_moving_file' => 'Greška pri pomeranju fajla :file',\n    'error_moving_directory' => 'Greška pri pomeranju direktorijuma :dir',\n    'error_deleting_directory' => 'Greška pri brisanju originalnog direktorijuma :dir',\n    'no_list_records' => 'Nema pronađenih fajlova',\n    'delete_confirm' => 'Izbriši izabrane fajlove ili direktorijume?',\n    'path' => 'Putanja',\n  ],\n  'component' => [\n    'menu_label' => 'Komponente',\n    'invalid_request' => 'Šablon ne može biti sačuvan zbog podataka koji nisu validni.',\n    'no_records' => 'Nema pronađenih komponenti',\n    'not_found' => 'Komponenta \\':name\\' nije pronađena.',\n    'method_not_found' => 'Komponenta \\':name\\' ne sadrži \\':method\\'.',\n    'soft_component' => 'Opciona komponenta',\n    'soft_component_description' => 'Ova komponenta nedostaje ali je opciona.',\n  ],\n  'template' => [\n    'invalid_type' => 'Nepoznati tip šablona.',\n    'not_found' => 'Šablon nije pronađen.',\n    'saved' => 'Šablon sačuvan.',\n    'no_list_records' => 'Zapisi nisu pronađeni',\n    'delete_confirm' => 'Izbriši izabrane šablone?',\n    'order_by' => 'Sortiraj po',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Upravljaj sadržajem sajta',\n    'manage_assets' => 'Upravljaj slikama, JS i CSS fajlovima sajta',\n    'manage_pages' => 'Napravi, modifikuj i izbriši stranice sajta',\n    'manage_layouts' => 'Napravi, modifikuj i izbriši planove CMS-a',\n    'manage_partials' => 'Napravi, modifikuj i izbriši parcijale CMS-a',\n    'manage_themes' => 'Aktiviraj, deaktiviraj i konfiguriši teme CMS-a',\n    'manage_theme_options' => 'Konfiguriši opcije izmena za aktivnu temu',\n  ],\n  'theme_log' => [\n    'hint' => 'Ovaj log prikazuje promene načinjene nad temom od strane administratora u pozadinskom delu sistema.',\n    'menu_label' => 'Log teme',\n    'menu_description' => 'Prikaži promene načinjene nad aktivnom temom.',\n    'empty_link' => 'Isprazni log teme',\n    'empty_loading' => 'Pražnjenje loga teme...',\n    'empty_success' => 'Log teme je ispražnjen',\n    'return_link' => 'Vrati se na logove teme',\n    'id' => 'ID',\n    'id_label' => 'ID loga',\n    'created_at' => 'Datum & vreme',\n    'user' => 'Korisnik',\n    'type' => 'Tip',\n    'type_create' => 'Napravi',\n    'type_update' => 'Ažuriraj',\n    'type_delete' => 'Izbriši',\n    'theme_name' => 'Tema',\n    'theme_code' => 'Kod teme',\n    'old_template' => 'Šablon (Stari)',\n    'new_template' => 'Šablon (Novi)',\n    'template' => 'Šablon',\n    'diff' => 'Izmene',\n    'old_value' => 'Stara vrednost',\n    'new_value' => 'Nova vrednost',\n    'preview_title' => 'Izmene šablona',\n    'template_updated' => 'Šablon je ažuriran',\n    'template_created' => 'Šablon je napravljen',\n    'template_deleted' => 'Šablon je izbrisan',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/rs.json",
    "content": "{\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfiguriši mod održavanja stranice i uključi/isključi isti.\",\n  \"Maintenance Mode\": \"Mod održavanja\",\n  \"Select the page to show when maintenance mode is activated.\": \"Izaberi stranicu za prikazivanje kada je mod održavanja uključen.\",\n  \"Enable maintenance mode\": \"Uključi mod održavanja\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Mod održavanja će prikazati odabranu stranicu korisnicima koji nisu ulogovani preko pozadinskog sistema.\",\n  \"By :name\": \"Autor: :name\",\n  \"The theme ':name' is not found.\": \"Tema ':name' nije pronađena.\",\n  \"Manage the front-end theme and customization options.\": \"Upravljaj temama i opcijama prilagođavanja.\",\n  \"Site Theme\": \"Teme\",\n  \"Properties\": \"Svojstva\",\n  \"Name\": \"Naziv\",\n  \"New theme name\": \"Naziv nove teme\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Pravno ili privatno lice\",\n  \"Directory Name\": \"Naziv direktorijuma\",\n  \"The destination theme directory\": \"Odredišni direktorijum za temu\",\n  \"Description\": \"Opis\",\n  \"Theme description\": \"Opis teme\",\n  \"Homepage\": \"Početna stranica\",\n  \"Website URL\": \"URL sajta\",\n  \"Theme Code\": \"Kod\",\n  \"A unique code for this theme used for distribution\": \"Jedinstveni kod ove teme za distribuciju\",\n  \"The path of theme preview image.\": \"Putanja za sliku pregleda teme.\",\n  \"Preview image\": \"Slika pregleda\",\n  \"Theme\": \"Tema\",\n  \"Customize Theme\": \"Izmeni temu\",\n  \"Folders\": \"Direktorijumi\",\n  \"Please select the theme folders you would like to export\": \"Odaberi direktorijume teme koje želiš da izvezeš\",\n  \"Theme archive file\": \"Arhivni fajl teme\",\n  \"Overwrite existing files\": \"Pregazi postojeće fajlove\",\n  \"Untick this box to only import new files\": \"Nemoj čekirati ovo polje ako želiš samo da uvezeš nove fajlove\",\n  \"Please select the theme folders you would like to import\": \"Odaberi direktorijume teme koje želiš da uvezeš\",\n  \"Themes\": \"Teme\",\n  \"Activate\": \"Aktiviraj\",\n  \"Customize\": \"Izmeni\",\n  \"Duplicate\": \"Duplikat\",\n  \"Duplicate Theme\": \"Dupliraj temu\",\n  \"Theme Duplicated!\": \"Tema duplirana!\",\n  \"Manage\": \"Upravljaj\",\n  \"Manage Theme\": \"Upravljaj temom\",\n  \"Edit Properties\": \"Izmeni svojstva\",\n  \"Save Properties\": \"Snimi svojstva\",\n  \"Import\": \"Uvezi\",\n  \"Import Theme\": \"Uvezi temu\",\n  \"Theme Imported!\": \"Tema uvežena!\",\n  \"Export\": \"Eksportuj\",\n  \"Export Theme\": \"Eksportuj temu\",\n  \"Delete\": \"Izbriši\",\n  \"Delete this theme? It cannot be undone!\": \"Izbriši ovu temu? Ova radnja se ne može poništiti.\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Aktivna tema se ne može izbrisati, pokušaj prvo da napraviš i aktiviraš drugu.\",\n  \"Theme deleted!\": \"Tema izbrisana!\",\n  \"Create Theme\": \"Napravi temu\",\n  \"Create\": \"Napravi\",\n  \"Create a New Blank Theme\": \"Napravi novu praznu temu\",\n  \"Theme Created!\": \"Tema napravljena!\",\n  \"Please specify a name for the theme.\": \"Odaberi naziv za temu.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Naziv može sadržati samo brojeve, latinska slova, kao i sledeće simbole: _-\",\n  \"Desired theme directory already exists.\": \"Direktorijum za željenu temu postoji.\",\n  \"Theme directory\": \"Direktorijum teme\",\n  \"Provide a new directory name for the duplicated theme.\": \"Odaberi drugi naziv za direktorijum teme koja je duplikat.\",\n  \"Find More Themes\": \"Pronađi još tema\",\n  \"Saving Theme...\": \"Čuvanje tema...\",\n  \"Return to Themes List\": \"Nazad na listu tema\",\n  \"Close Search box\": \"Zatvori polje za pretragu\",\n  \"Close Replace box\": \"Zatvori polje za zamenu\",\n  \"CMS Page\": \"CMS strana\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Jedinstven naziv koji je dat komponenti kada se koristi u stranici ili kodu plana.\",\n  \"Alias\": \"Pseudonim\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Pseudonimi komponente su neophodni i mogu sadržati samo latinske simbole, brojeve i donje crte. Pseudonimi bi trebalo da počinju latinskim simbolom.\",\n  \"Unnamed\": \"Bez naziva\",\n  \"No description provided\": \"Opis nije dat\"\n}"
  },
  {
    "path": "modules/cms/lang/ru/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Ошибка в имени файла: :name. Имена файлов могут содержать только латинские буквы, цифры, знаки подчеркивания и точки. Пример правильных имен файлов: page.htm, page, subdirectory/page',\n    'invalid_file_inspector' => 'Неверное имя файла. Имена файлов могут содержать только буквенно-цифровые символы, подчеркивания, тире и точки. Некоторые примеры правильных имен файлов: page.htm, page, subdirectory/page',\n    'invalid_property' => 'Параметр \\':name\\' нельзя изменить.',\n    'file_already_exists' => 'Файл \\':name\\' уже существует.',\n    'error_saving' => 'Ошибка сохранения файла \\':name\\'. Пожалуйста, проверьте права на запись.',\n    'error_creating_directory' => 'Ошибка создания директории :name. Пожалуйста, проверьте права на запись.',\n    'invalid_file_extension' => 'Указано неправильное расширение файла: :invalid. Разрешенные расширения: :allowed.',\n    'error_deleting' => 'Невозможно удалить файл шаблона \\':name\\'. Пожалуйста, проверьте права на запись.',\n    'delete_success' => 'Шаблоны были успешно удалены: :count.',\n    'file_name_required' => 'Пожалуйста, укажите имя файла шаблона.',\n    'safe_mode_enabled' => 'В настоящий момент включен безопасный режим.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Веб-сайт',\n      'online' => 'Онлайн',\n      'maintenance' => 'в разработке',\n      'manage_themes' => 'Управление шаблонами',\n      'customize_theme' => 'Настройка шаблона',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Активный шаблон не установлен.',\n      'not_found' => 'Активный шаблон не найден.',\n      'is_locked' => 'Шаблон \\':theme\\' заблокирован, и его нельзя использовать. Пожалуйста сделайте дубликат шаблона или сделайте дочерний шаблон.',\n    ],\n    'edit' => [\n      'not_set' => 'Шаблон для редактирования не установлен.',\n      'not_found' => 'Шаблон для редактирования не найден.',\n      'not_match' => 'Объект, который вы пытаетесь открыть, не принадлежит редактируему шаблону. Пожалуйста, обновите страницу.',\n    ],\n    'setting_edit_theme' => 'Изменение редактируемого шаблона',\n    'edit_theme_changed' => 'Редактируемый шаблон изменен',\n  ],\n  'page' => [\n    'not_found_name' => 'Страница \\':name\\' не найдена',\n    'not_found' => [\n      'label' => 'Страница не найдена',\n      'help' => 'Запрошенная страница не найдена.',\n    ],\n    'custom_error' => [\n      'label' => 'Ошибка на странице',\n      'help' => 'К сожалению, страница не может быть отображена из-за ошибки.',\n    ],\n    'menu_label' => 'Страницы',\n    'unsaved_label' => 'Несохранённая(е) страница(ы)',\n    'no_list_records' => 'Страницы не найдены',\n    'new' => 'Новая страница',\n    'invalid_url' => 'Неверный формат адреса. Адрес страницы должен начинаться со знака / и может содержать цифры, латинские буквы, и следующие знаки: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Вы действительно хотите удалить выделенные страницы?',\n    'delete_confirm_single' => 'Вы действительно хотите удалить эту страницу?',\n    'no_layout' => '-- без шаблона --',\n    'title' => 'Заголовок страницы',\n    'url' => 'Адрес страницы',\n    'url_required' => 'Адрес страницы обязателен',\n    'file_name' => 'Имя файла страницы',\n    'editor_node_name' => 'Страницы',\n    'editor_sorting' => 'Сортировать страницы',\n    'editor_sort_by_url' => 'По URL адресу',\n    'editor_sort_by_title' => 'По заголовоку',\n    'editor_sort_by_file_name' => 'По названию файла',\n    'editor_grouping' => 'Группировать страницы',\n    'editor_group_by_filepath' => 'По пути файла',\n    'editor_group_by_url' => 'По URL адресу',\n    'editor_display' => 'Отображение',\n    'editor_display_title' => 'Заголовок',\n    'editor_display_url' => 'Адрес',\n    'editor_display_file' => 'Путь файла',\n    'editor_markup' => 'Редактор',\n    'editor_code' => 'Код',\n    'description_hint' => 'Описание является необязательным и отображается только в панели управления.',\n    'create_new' => 'Новая страница',\n  ],\n  'layout' => [\n    'not_found_name' => 'Не удалось найти шаблон (layout) с именем :name.',\n    'menu_label' => 'Макеты',\n    'unsaved_label' => 'Несохранённый(е) макет(ы)',\n    'no_list_records' => 'Макеты не найдены',\n    'new' => 'Новый макет',\n    'delete_confirm_multiple' => 'Вы действительно хотите удалить выделенные макеты?',\n    'delete_confirm_single' => 'Вы действительно хотите удалить этот макет?',\n    'editor_node_name' => 'Макеты',\n    'create_new' => 'Создать новый макет',\n  ],\n  'partial' => [\n    'not_found_name' => 'Не удалось найти шаблон (partial) с именем :name.',\n    'invalid_name' => 'Ошибка в имени шаблона (partial) :name.',\n    'menu_label' => 'Фрагменты',\n    'unsaved_label' => 'Несохранённый(е) фрагмент(ы)',\n    'no_list_records' => 'Фрагменты не найдены',\n    'delete_confirm_multiple' => 'Вы действительно хотите удалить выделенные фрагменты?',\n    'delete_confirm_single' => 'Вы действительно хотите удалить этот фрагмент?',\n    'editor_node_name' => 'Фрагменты',\n    'new' => 'Новый фрагмент',\n    'create_new' => 'Создать новый фрагмент',\n  ],\n  'content' => [\n    'not_found_name' => 'Не удалось найти файл содержимого (content file): \\':name\\'.',\n    'menu_label' => 'Содержимое',\n    'unsaved_label' => 'Несохранённый контент',\n    'no_list_records' => 'Файлы с контентом не найдены',\n    'delete_confirm_multiple' => 'Вы действительно хотите удалить выделенные файлы?',\n    'delete_confirm_single' => 'Вы действительно хотите удалить этот файл?',\n    'editor_node_name' => 'Контент',\n    'new' => 'Новый файл контента',\n    'editor_content' => 'Контент',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Ошибка в имени обработчика AJAX: :name.',\n    'not_found' => 'Обработчик AJAX не найден: \\':name\\'.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Добавить',\n    'search' => 'Поиск...',\n  ],\n  'editor' => [\n    'settings' => 'Настройки',\n    'title' => 'Заголовок',\n    'new_title' => 'Заголовок страницы',\n    'url' => 'Адрес',\n    'filename' => 'Имя файла',\n    'layout' => 'Макет',\n    'description' => 'Описание',\n    'preview' => 'Предпросмотр',\n    'page' => 'Страница',\n    'edit_theme' => 'Переключить шаблон',\n    'change_edit_theme' => 'Переключить шаблон',\n    'edit_theme_saved_changed_tabs' => 'У вас есть несохраненные изменения на открытых вкладках. Сохраните их или закройте вкладки, чтобы продолжить.',\n    'partial' => 'Фрагмент',\n    'meta' => 'Метатеги',\n    'meta_title' => 'Заголовок (meta title)',\n    'meta_description' => 'Описание (meta description)',\n    'markup' => 'Разметка',\n    'code' => 'Код',\n    'content' => 'Контент',\n    'asset' => 'Ассетный файл',\n    'hidden' => 'Скрытая страница',\n    'hidden_comment' => 'Скрытые страницы доступны только для вошедших в систему пользователей.',\n    'enter_fullscreen' => 'Перейти в полноэкранный режим',\n    'exit_fullscreen' => 'Выйти из полноэкранного режима',\n    'open_searchbox' => 'Открыть окно поиска',\n    'open_replacebox' => 'Открыть экран замены',\n    'commit' => 'Сохранить (commit)',\n    'reset' => 'Сбросить',\n    'commit_confirm' => 'Вы уверены, что хотите сохранить (commit) изменения этого файла в файловой системе? Это перезапишет существующий файл в файловой системе.',\n    'reset_confirm' => 'Вы уверены, что хотите сбросить этот файл до копии, которая находится в файловой системе? Это полностью заменит его файлом, который находится в файловой системе.',\n    'committing' => 'Сохранение (committing)',\n    'resetting' => 'Сброс',\n    'commit_success' => ':type был успшено сохранен (committed) в файловой системе',\n    'reset_success' => ':type был успешно сброшен до версии, которая сохранена в файловой системе.',\n    'error_loading_header' => 'Ошибка загрузки шаблона',\n    'component_list' => 'Компоненты',\n    'component_list_description' => 'Чтобы добавить компонент, щелкните по нему или перетащите в редактор.',\n    'info' => 'Информация',\n    'refresh' => 'Обновить',\n    'create' => 'Создать',\n    'manage_themes' => 'Управление шаблонами',\n    'error_no_doctype_permissions' => 'У вас нет разрешения на управление файлами формата: :doctype',\n  ],\n  'asset' => [\n    'menu_label' => 'Ресурсы',\n    'unsaved_label' => 'Несохранённый(е) файл(ы)',\n    'drop_down_add_title' => 'Добавить...',\n    'drop_down_operation_title' => 'Действие...',\n    'upload_files' => 'Загрузить файл(ы)',\n    'create_file' => 'Создать файл',\n    'create_directory' => 'Создать директорию',\n    'directory_popup_title' => 'Новая директория',\n    'directory_name' => 'Имя директории',\n    'directory_name_required' => 'Название папки обязательно',\n    'rename_name_required' => 'Название обязательно',\n    'rename' => 'Переименовать',\n    'delete' => 'Удалить',\n    'move' => 'Переместить',\n    'moving' => 'Перемещение выбранных элементов',\n    'moved' => 'Перемещение успешно',\n    'saved' => 'Файл сохранен',\n    'deleted' => 'Файл удален',\n    'select' => 'Выбрать',\n    'new' => 'Новый файл',\n    'rename_popup_title' => 'Переименовать',\n    'rename_new_name' => 'Новое имя',\n    'invalid_path' => 'Путь может содержать только цифры, латинские буквы, пробелы и следующие символы: ._-/',\n    'error_deleting_file' => 'Ошибка удаления файла :name.',\n    'error_deleting_dir_not_empty' => 'Невозможно удалить директорию :name. Директория содержит файлы или поддиректории.',\n    'error_deleting_dir' => 'Ошибка удаления директории :name.',\n    'invalid_name' => 'Имя может содержать только цифры, латинские буквы, пробелы и следующие символы: ._-',\n    'original_not_found' => 'Оригинальный файл или директория не найдена',\n    'already_exists' => 'Файл или директория с таким именем уже существует',\n    'error_renaming' => 'Невозможно переименовать файл или директорию',\n    'name_cant_be_empty' => 'Имя не может быть пустым',\n    'type_not_allowed' => 'Разрешены только файлы следующих типов: :allowed_types',\n    'error_uploading_file' => 'Ошибка загрузки файла \\':name\\': :error',\n    'move_please_select' => 'пожалуйста, выберите директорию',\n    'move_destination' => 'Папка назначения',\n    'move_popup_title' => 'Переместить файлы',\n    'move_button' => 'Переместить',\n    'no_list_records' => 'Файлы не найдены',\n    'path' => 'Путь',\n    'editor_node_name' => 'Ассеты',\n    'open' => 'Открыть',\n  ],\n  'component' => [\n    'menu_label' => 'Компоненты',\n    'invalid_request' => 'Шаблон не может быть сохранен, так как запрос содержит поврежденную информацию о компонентах.',\n    'no_records' => 'Компоненты не найдены',\n    'not_found' => 'Компонент \\':name\\' не найден.',\n    'method_not_found' => 'Компонент \\':name\\' не содержит метод \\':method\\'.',\n    'expand_or_collapse' => 'Раскрыть или скрыть список компонентов',\n    'remove' => 'Удалить компонент',\n    'expand_partial' => 'Расркыть фрагмент компонента',\n  ],\n  'template' => [\n    'invalid_type' => 'Неизвестный тип шаблона',\n    'not_found' => 'Шаблон не найден',\n    'saved' => 'Шаблон сохранен',\n    'saved_to_db' => 'Шаблон сохранен в базу данных',\n    'file_updated' => 'Шаблон обновлен',\n    'reset_from_template_success' => 'Шаблон восстановлен из файла',\n    'reloaded' => 'Шаблон перезагружен',\n    'deleted' => 'Шаблон удален',\n    'no_list_records' => 'Записей не найдено',\n    'delete_confirm' => 'Удалить выбранные шаблоны?',\n    'order_by' => 'Сортировать по',\n    'last_modified' => 'Изменен',\n    'storage' => 'Хранилище',\n    'template_file' => 'Файл шаблона',\n    'storage_filesystem' => 'Файловая система',\n    'storage_database' => 'база данных',\n    'update_file' => 'Обновить файл шаблона',\n    'reset_from_file' => 'Восстановить из файла шаблона',\n  ],\n  'permissions' => [\n    'name' => 'Управление CMS',\n    'manage_content' => 'Управление контентом',\n    'manage_assets' => 'Управление файлами',\n    'manage_pages' => 'Управление страницами',\n    'manage_layouts' => 'Управление шаблонами',\n    'manage_partials' => 'Управление фрагментами',\n    'manage_themes' => 'Управление шаблонами',\n    'manage_theme_options' => 'Настроить текущий шаблон CMS',\n  ],\n  'theme_log' => [\n    'hint' => 'В этом журнале отображаются изменения, внесенные в шаблон администраторами во внутренней области CMS.',\n    'menu_label' => 'Журнал изменений шаблона',\n    'menu_description' => 'Просмотр изменений, внесенных в активный шаблон.',\n    'empty_link' => 'Очистить журнал',\n    'empty_loading' => 'Очистка журнала...',\n    'empty_success' => 'Журнал очищен',\n    'return_link' => 'Вернуться к журналу',\n    'id' => 'ID',\n    'id_label' => 'ID записи журнала',\n    'created_at' => 'Дата & Время',\n    'user' => 'Пользователь',\n    'type' => 'Тип',\n    'type_create' => 'Создайте',\n    'type_update' => 'Обновить',\n    'type_delete' => 'Удалить',\n    'theme_name' => 'Шаблон',\n    'theme_code' => 'Код шаблона',\n    'old_template' => 'Шаблон (старый)',\n    'new_template' => 'Шаблон (новый)',\n    'template' => 'Шаблон',\n    'diff' => 'Изменения',\n    'old_value' => 'Старое значение',\n    'new_value' => 'Новое значение',\n    'preview_title' => 'Изменение шаблона',\n    'template_updated' => 'Шаблон обновлен',\n    'template_created' => 'Шаблон был создан',\n    'template_deleted' => 'Шаблон был удален',\n  ],\n  'intellisense' => [\n    'learn_more' => 'Подробнее',\n    'docs' => [\n      'partial' => 'Вывод содерджимого фрагмента.',\n      'page' => 'Вывод содержимого страницы, котрорая использует этот макет.',\n      'content' => 'Вывод содержимого контентного блока.',\n      'component' => 'Вывод содержимого стандартного фрагмента компонента.',\n      'placeholder' => 'Вывод секции плейсхолдер.',\n      'scripts' => 'Вывод JavaScript файлов или скриптов, которые динамически добавлены в шаблоне или приложении.',\n      'styles' => 'Вывод CSS файлов или inline-секций, которые динамически добавлены в шаблоне или приложении.',\n      'flash' => 'Вывод флеш сообщений, которые хранятся в сессии пользователя.',\n      'verbatim' => 'Помечает секцию, колторый не должен обрабатываться как Twig.',\n      'macro' => 'Позволяет задать пользовательские функции в шаблоне.',\n      'for' => 'Цикл по значениям внутри коллекции.',\n      'if' => 'Оператор условия отображения контента внутри шаблона.',\n      'abs_filter' => 'Фильтр `abs` возвращает абсолютное значение.',\n      'batch_filter' => '`Batch` фильтрует элементы, возвращая список списков с заданным количеством элементов. Второй параметр может быть указан для заполнения недостающих элементов.',\n      'capitalize_filter' => 'Фильтр `capitalize` делает строку заглавной. Первый символ будет заглавным, все остальные - строчными.',\n      'column_filter' => 'Фильтр `column` возвращает значения из столбца входного массива.',\n      'convert_encoding_filter' => 'Фильтр `convert_encoding` преобразует строку из одной кодировки в другую. Первый аргумент - это ожидаемая кодировка вывода, а второй - кодировка ввода.',\n      'country_name_filter' => 'Фильтр `country_name` возвращает название страны с учетом ее двухбуквенного кода ISO-3166.',\n      'currency_name_filter' => 'Фильтр `currency_name` возвращает название валюты с учетом ее трехбуквенного кода.',\n      'currency_symbol_filter' => 'Фильтр `currency_symbol` возвращает символ валюты с учетом его трехбуквенного кода.',\n      'data_uri_filter' => 'Фильтр `data_uri` генерирует URL, используя схему данных, как определено в RFC 2397.',\n      'date_filter' => 'Фильтр `date` форматирует дату в заданный формат.',\n      'date_modify_filter' => 'Фильтр `date_modify` изменяет дату с заданной строкой модификатора.',\n      'default_filter' => 'Фильтр `default` возвращает значение по умолчанию, если переменная не определена или пуста, в противном случае - значение переменной.',\n      'escape_filter' => 'Фильтр `escape` экранирует строку, используя стратегии, зависящие от контекста.',\n      'filter_filter' => 'Фильтр `filter` фильтрует элементы последовательности или отображения с помощью стрелочной функции. Стрелочная функция получает значение последовательности или отображения.',\n      'first_filter' => 'Фильтр `first` возвращает первый \"элемент\" последовательности, отображения или строки.',\n      'format_filter' => 'Фильтр `format` форматирует заданную строку, заменяя заполнители (документация по заполнителям [sprintf](https://www.php.net/sprintf)).',\n      'format_currency_filter' => 'Фильтр `format_currency` форматирует число как валюту.',\n      'join_filter' => 'Фильтр `join` возвращает строку, которая является конкатенацией элементов последовательности.',\n      'json_encode_filter' => 'Фильтр `json_encode` возвращает JSON-представление значения.',\n      'keys_filter' => 'Фильтр `keys` возвращает ключи массива. Это полезно, когда вы хотите перебирать ключи массива.',\n      'last_filter' => 'Фильтр `last` возвращает последний \"элемент\" последовательности, отображения или строки.',\n      'length_filter' => 'Фильтр `length` возвращает количество элементов последовательности или отображения или длину строки.',\n      'lower_filter' => 'Фильтр `lower` преобразует значение в нижний регистр.',\n      'map_filter' => 'Фильтр `map` применяет стрелочную функцию к элементам последовательности или сопоставления. Стрелочная функция получает значение последовательности или отображения.',\n      'merge_filter' => 'Фильтр `merge` объединяет массив с другим массивом.',\n      'nl2br_filter' => 'Фильтр `nl2br` конвертирует системные разрывы строки в <br> тег.',\n      'number_format_filter' => 'Фильтр `number_format` форматирует числа. Документация по функции [number_format](https://www.php.net/number_format).',\n      'reduce_filter' => 'Фильтр `reduce` итеративно сокращает последовательность или отображение до одного значения с помощью стрелочной функции, чтобы уменьшить его до одного значения. Стрелочная функция получает возвращаемое значение предыдущей итерации и текущее значение последовательности или отображения.',\n      'replace_filter' => 'Фильтр `replace` форматирует заданную строку, заменяя заполнители.',\n      'reverse_filter' => 'Фильтр `reverse` переворачивает последовательность, отображение или строку.',\n      'round_filter' => 'Фильтр `round` округляет число до заданной точности.',\n      'slice_filter' => 'Фильтр `slice` извлекает фрагмент последовательности, сопоставления или строки.',\n      'sort_filter' => 'Фильтр `sort` сортирует массив.',\n      'spaceless_filter' => 'Используйте фильтр `spaceless` для удаления пробелов между тегами HTML, а не пробелов внутри тегов HTML или пробелов в простом тексте.',\n      'split_filter' => 'Фильтр `split` разбивает строку по заданному разделителю и возвращает список строк.',\n      'striptags_filter' => 'Фильтр `striptags` удаляет теги SGML/XML и заменяет соседние пробелы одним пробелом.',\n      'title_filter' => 'Фильтр `title` возвращает версию значения в регистре заголовка. Слова будут начинаться с заглавных букв, все остальные символы в нижнем регистре.',\n      'trim_filter' => 'Фильтр `trim` удаляет пробелы (или другие символы) в начале и в конце строки.',\n      'upper_filter' => 'Фильтр `upper` преобразует значение в верхний регистр.',\n      'url_encode_filter' => 'Фильтр `url_encode` кодирует заданную строку как сегмент URL или массив как строку запроса.',\n      'page_filter' => 'Фильтр `page` создает ссылку на страницу, используя имя файла страницы без расширения в качестве параметра.',\n      'theme_filter' => 'Фильтр `theme` возвращает адрес относительно пути активной темы веб-сайта.',\n      'app_filter' => 'Фильтр `app` возвращает адрес относительно общедоступного пути к веб-сайту.',\n      'media_filter' => 'Фильтр `media` возвращает адрес относительно публичного пути к [библиотеке медиафайлов] (https://docs.octobercms.com/4.x/cms/media/introduction.html).',\n      'md_filter' => 'Фильтр `md` преобразует значение из формата Markdown в формат HTML.',\n      'raw_filter' => 'Фильтр `raw` отмечает значение как \"безопасное\", что означает, что переменная не будет экранирована, если `raw` является последним примененным к ней фильтром.',\n    ],\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/ru.json",
    "content": "{\n  \"Themes\": \"Темы\",\n  \"Manage Themes\": \"Управление темами\",\n  \"Customize Theme\": \"Настройка темы\",\n  \"Manage Maintenance Mode\": \"Управление режимом обслуживания\",\n  \"View Website During Maintenance\": \"Просмотр веб-сайта во время обслуживания\",\n  \"Manage Content\": \"Управление контентом\",\n  \"Manage Asset Files\": \"Управление файлами ресурсов\",\n  \"Manage Pages\": \"Управление страницами\",\n  \"Manage Layouts\": \"Управление макетами\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Управление режимом работы сайта.\",\n  \"Maintenance Mode\": \"Режим обслуживания\",\n  \"Select the page to show when maintenance mode is activated.\": \"Выберите страницу, которая будет отображаться при включении режима обслуживания.\",\n  \"Enable maintenance mode\": \"Включить режим обслуживания\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Режим обслуживания покажет страницу обслуживания для посетителей, которые не авторизовались в панели администратора.\",\n  \"Resources\": \"Ресурсы\",\n  \"Reference assets and variables included on this page.\": \"Ссылочные ресурсы и переменные, включенные в эту страницу.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Файл(ы) JavaScript в папке assets/js\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"Файл(ы) LESS в папке assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Файл(ы) SCSS в папке assets/scss\",\n  \"Variables\": \"Переменные\",\n  \"Page variables name(s) and value(s)\": \"Название переменных страницы и значение\",\n  \"Headers\": \"Заголовки\",\n  \"Page header name(s) and value(s)\": \"Название(я) заголовка страницы и значение(я)\",\n  \"Site Picker\": \"Выбор сайта\",\n  \"Displays links for selecting a different site.\": \"Отображает ссылки для выбора другого сайта.\",\n  \"Unknown component\": \"Неизвестный компонент\",\n  \"View Bag\": \"Посмотреть содержимое\",\n  \"Stores custom template properties.\": \"Сохраняет пользовательские свойства шаблона.\",\n  \"By :name\": \"Создано :name\",\n  \"The theme ':name' is not found.\": \"Тема ':name' не найдена.\",\n  \"Manage the front-end theme and customization options.\": \"Управление темами и настройками кастомизации.\",\n  \"Site Theme\": \"Фронтенд темы\",\n  \"Properties\": \"Свойства\",\n  \"Publish\": \"Публикация\",\n  \"Advanced\": \"Дополнительно\",\n  \"Name\": \"Название\",\n  \"New theme name\": \"Название новой темы\",\n  \"Author Name\": \"Автор\",\n  \"Person or company name\": \"Имя автора или название компании\",\n  \"Directory Name\": \"Имя каталога\",\n  \"The destination theme directory\": \"Название директории темы\",\n  \"Description\": \"Описание\",\n  \"Theme description\": \"Описание темы\",\n  \"Homepage\": \"Главная страница\",\n  \"Website URL\": \"URL сайта\",\n  \"Author Code\": \"Код автора (латиницей)\",\n  \"A unique code for the author used for distribution\": \"Уникальный код автора для публикации в маркетплейсе\",\n  \"Theme Code\": \"Код темы (латиницей)\",\n  \"A unique code for this theme used for distribution\": \"Уникальный код темы для публикации в маркетплейсе\",\n  \"Parent Theme\": \"Родительская тема\",\n  \"Database Mode\": \"Сохранять изменения в базу данных\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Сохранять изменения темы в базе данных вместо файловой системы\",\n  \"-- no parent --\": \"-- Без родительской темы --\",\n  \"Theme\": \"Тема\",\n  \"Folders\": \"Директории\",\n  \"Please select the theme folders you would like to export\": \"Пожалуйста, выберите темы, которые вы хотите экспортировать\",\n  \"Theme archive file\": \"Файл архива темы\",\n  \"Overwrite existing files\": \"Перезаписывать существующие файлы\",\n  \"Untick this box to only import new files\": \"Отключите эту опцию, чтобы импортировать только новые файлы\",\n  \"Please select the theme folders you would like to import\": \"Пожалуйста, выберите темы, которые вы хотели бы импортировать\",\n  \"Activate\": \"Активировать\",\n  \"Customize\": \"Настроить\",\n  \"Duplicate\": \"Дублировать\",\n  \"Duplicate Theme\": \"Дублировать тему\",\n  \"Theme Duplicated!\": \"Дублирование темы завершено!\",\n  \"Manage\": \"Управление\",\n  \"Manage Theme\": \"Управление темой\",\n  \"Edit Properties\": \"Настройки\",\n  \"Save Properties\": \"Сохранить\",\n  \"Import\": \"Импортировать\",\n  \"Import Theme\": \"Импортировать тему\",\n  \"Theme Imported!\": \"Импортирование темы завершено!\",\n  \"Export\": \"Экспортировать\",\n  \"Export Theme\": \"Экспортировать тему\",\n  \"Delete\": \"Удалить\",\n  \"Delete this theme? It cannot be undone!\": \"Вы уверены, что хотите удалить эту тему? Операция не может быть отменена!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Невозможно удалить активную тему, попробуйте сделать сначала другую тему активной.\",\n  \"Theme deleted!\": \"Удаление темы завершено!\",\n  \"Create Theme\": \"Создать тему\",\n  \"Create\": \"Создать\",\n  \"Create a New Blank Theme\": \"Создать новую тему\",\n  \"Theme Created!\": \"Создание темы завершено!\",\n  \"Please specify a name for the theme.\": \"Пожалуйста, укажите имя темы.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Имя может содержать только цифры, латинские буквы и следующие символы: _ -\",\n  \"Desired theme directory already exists.\": \"Указанный директория темы уже существует.\",\n  \"Theme directory\": \"Директория темы\",\n  \"Provide a new directory name for the duplicated theme.\": \"Укажите новое имя директории для дубликата темы.\",\n  \"Find More Themes\": \"Найти темы в маркетплейсе\",\n  \"Saving Theme...\": \"Сохранение темы...\",\n  \"Return to Themes List\": \"Вернуться к списку тем\",\n  \"No themes found\": \"Темы не найдены\",\n  \"Seed Theme\": \"Сидинг темы\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Сидинг выбранной темы создаст все необходимые чертежи, переводы и демо-данные.\",\n  \"Theme Seeded!\": \"Сидинг выполнен успешно!\",\n  \"Select Page Link\": \"Выберите ссылку на страницу\",\n  \"Search all references...\": \"Поиск по всем ссылкам...\",\n  \"CMS Page\": \"CMS страница\",\n  \"Link\": \"Ссылка\",\n  \"Please select a CMS page\": \"Выберете CMS страницу\",\n  \"Please select a page reference\": \"Пожалуйста, выберите ссылку на страницу\",\n  \"Please enter a valid URL\": \"Введите корректный URL\",\n  \"Delete Theme\": \"Удалить тему\",\n  \"Activate Theme\": \"Активировать тему\",\n  \"Manage Partials\": \"Управление фрагментами\",\n  \"No Title\": \"Без заголовка\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Уникальное имя, присваиваемое этому компоненту при его использовании в коде страницы или макета.\",\n  \"Alias\": \"Псевдоним\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Псевдонимы компонентов обязательны и могут содержать только латинские буквы, цифры и знаки подчеркивания. Псевдонимы должны начинаться с латинской буквы.\",\n  \"Unnamed\": \"Безымянный\",\n  \"No description provided\": \"Описание отсутствует\",\n  \"No snippets found\": \"Сниппеты не найдены\",\n  \"Search...\": \"Поиск...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Фрагмент с запрошенным кодом :code не был найден в теме.\",\n  \"Snippet\": \"Сниппеты\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Укажите код, чтобы сделать этот фрагмент доступным как сниппет в редакторе.\",\n  \"Please enter the snippet code\": \"Пожалуйста, введите код фрагмента\",\n  \"Snippet Code\": \"Код фрагмента\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Название отображается в списке сниппетов в редакторе при добавлении сниппета.\",\n  \"Please enter the snippet name\": \"Введите название сниппета\",\n  \"Property Title\": \"Название свойства\",\n  \"Please provide the property title\": \"Пожалуйста, укажите название для свойства\",\n  \"Code\": \"Код\",\n  \"Please provide the property name\": \"Пожалуйста, укажите название свойства\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Код свойства должен начинаться с латинской буквы и может содержать только латинские буквы, цифры и нижние подчеркивания\",\n  \"Type\": \"Тип\",\n  \"Select\": \"Выбрать\",\n  \"String\": \"Строка\",\n  \"Checkbox\": \"Чекбокс\",\n  \"Dropdown\": \"Выпадающий список\",\n  \"Please select the property type\": \"Пожалуйста, выберите тип свойства\",\n  \"Default\": \"По умолчанию\",\n  \"Options\": \"Опции\",\n  \"Define a Snippet Partial\": \"Задайте фрагмент сниппета\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Некорректный ключ выпадающего списка: %s. Ключ может содержать только цифры, латинские буквы и символы _ и -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Описание отображается в списке фрагментов в редакторе при добавлении фрагмента.\",\n  \"Details\": \"Подробности\",\n  \"Frontend Theme\": \"Фронтенд темы\"\n}"
  },
  {
    "path": "modules/cms/lang/sk/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Neplatný názov súboru: :name. Názvy súboru môžu obsahovať iba alfanumerické symboly, podtržítka, pomlčky a bodky. Príklady správnych názvov súborov: stranka.htm, stranka, priecinok/stranka',\n    'invalid_file_inspector' => 'Neplatný názov súboru. Názvy súborov môžu obsahovať iba alfanumerické symboly, podčiarkovníky, pomlčky a bodky. Niekoľko príkladov správnych názvov súborov: stránka.htm, stránka, podadresár/stránka',\n    'invalid_property' => 'Parameter \\':name\\' meno nie je možné nastaviť',\n    'file_already_exists' => 'Súbor \\':name\\' už existuje.',\n    'error_saving' => 'Chyba pri ukladaní súboru \\':name\\'. Skontrolujte oprávnenia na zápis.',\n    'error_creating_directory' => 'Chyba pri vytváraní zložky :name. Skontrolujte oprávnenia na zápis.',\n    'invalid_file_extension' => 'Chybná prípona súboru: :invalid. Povolené prípony sú: :allowed.',\n    'error_deleting' => 'Chyba pri mazaní šablony \\':name\\'. kontrolujte oprávnenia na zápis.',\n    'delete_success' => 'Šablony zmazané: :count.',\n    'file_name_required' => 'Je nutné vyplniť Meno súboru.',\n    'safe_mode_enabled' => 'Bezpečný režim (Safe mode) je aktívny.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Webová stránka',\n      'online' => 'Online',\n      'maintenance' => 'Prebieha údržba',\n      'manage_themes' => 'Spravovať témy',\n      'customize_theme' => 'Prispôsobiť tému',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktívna téma nie je nastavená.',\n      'not_found' => 'Aktívna téma nebola nájdená.',\n    ],\n    'edit' => [\n      'not_set' => 'Editovaná téma nie je nastavená.',\n      'not_found' => 'Editovaná téma nebola nájdená.',\n      'not_match' => 'Objekt, ktorý chcete práve zobraziť nepatrí k upravovanej téme. Prosím obnovte stránku.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Stránka \\':name\\' nebola nájdená',\n    'not_found' => [\n      'label' => 'Stránka nenájdená',\n      'help' => 'Požadovaná stránka nebola nájdená.',\n    ],\n    'custom_error' => [\n      'label' => 'Chyba stránky',\n      'help' => 'Ospravedlňujeme sa, niečo sa pokazilo a stránka nemôže byť zobrazená.',\n    ],\n    'menu_label' => 'Stránky',\n    'unsaved_label' => 'Neuložené stránky',\n    'no_list_records' => 'Žiadne stránky',\n    'new' => 'Nová stránka',\n    'invalid_url' => 'Neplatný formát URL. URL musí začínať lomítkom a môže obsahovať čísla, písmená a nasledujúce znaky: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Skutočne zmazazať vybrané stránky?',\n    'delete_confirm_single' => 'Skutočne zmazať túto stránku?',\n    'no_layout' => '-- žiadny layout --',\n    'title' => 'Názov stránky',\n    'url' => 'URL stránky',\n    'file_name' => 'Názov súboru stránky',\n  ],\n  'layout' => [\n    'not_found_name' => 'Layout \\':name\\' nebol nájdený',\n    'menu_label' => 'Layouty',\n    'unsaved_label' => 'Neuložené layouty',\n    'no_list_records' => 'Žiadne layouty',\n    'new' => 'Nový layout',\n    'delete_confirm_multiple' => 'Skutočne zmazať zvolené layouty?',\n    'delete_confirm_single' => 'Skutočne zmazať tento layout?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Čiastková šablóna \\':name\\' nebola nájdená.',\n    'invalid_name' => 'Neplatný názov čiastkovej šablóny: :name.',\n    'menu_label' => 'Čiastkové šablóny',\n    'unsaved_label' => 'Neuložené čiastkové šablóny',\n    'no_list_records' => 'Žiadne čiastkové šablóny',\n    'delete_confirm_multiple' => 'Skutočne zmazať zvolené čiastkové šablóny?',\n    'delete_confirm_single' => 'Skutočne zmazať túto čiastkovú šablónu?',\n    'new' => 'Nová čiastková šablóna',\n  ],\n  'content' => [\n    'not_found_name' => 'Obsahový súbor \\':name\\' nebol nájdený.',\n    'menu_label' => 'Obsah',\n    'unsaved_label' => 'Neuložený obsah',\n    'no_list_records' => 'Žiadne obsahové súbory',\n    'delete_confirm_multiple' => 'Skutočne zmazať zvolené obsahové súbory alebo priečinky?',\n    'delete_confirm_single' => 'Skutočne zmazať tento obsahový súbor?',\n    'new' => 'Nový obsahový súbor',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Neplatný názov AJAX handlera: :name.',\n    'not_found' => 'AJAX handler \\':name\\' nebol nájdený.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Pridať',\n    'search' => 'Hľadať...',\n  ],\n  'editor' => [\n    'settings' => 'Nastavenia',\n    'title' => 'Názov',\n    'new_title' => 'Nový názov stránky',\n    'url' => 'URL',\n    'filename' => 'Názov súboru',\n    'layout' => 'Layout',\n    'description' => 'Popis',\n    'preview' => 'Náhľad',\n    'meta' => 'Meta údaje',\n    'meta_title' => 'Meta názov',\n    'meta_description' => 'Meta popis',\n    'markup' => 'Kód',\n    'code' => 'PHP kód',\n    'content' => 'Obsah',\n    'hidden' => 'Skrytá',\n    'hidden_comment' => 'Skryté stránky sú dostupne iba pre užívateľov prihlásených do administrácie.',\n    'enter_fullscreen' => 'Zapnúť režim celej obrazovky',\n    'exit_fullscreen' => 'Vypnúť režim celej obrazovky',\n    'open_searchbox' => 'Otvoriť box hľadania',\n    'open_replacebox' => 'Otvoriť box nahradzovania',\n  ],\n  'asset' => [\n    'menu_label' => 'Súbory',\n    'unsaved_label' => 'Neuložené súbory',\n    'drop_down_add_title' => 'Pridať...',\n    'drop_down_operation_title' => 'Akcia...',\n    'upload_files' => 'Nahrať súbor(y)',\n    'create_file' => 'Vytvoriť súbor',\n    'create_directory' => 'Vytvoriť priečinok',\n    'directory_popup_title' => 'Nový priečinok',\n    'directory_name' => 'Názov priečinka',\n    'rename' => 'Premenovať',\n    'delete' => 'Zmazať',\n    'move' => 'Presunúť',\n    'select' => 'Vybrať',\n    'new' => 'Nový súbor',\n    'rename_popup_title' => 'Premenovať',\n    'rename_new_name' => 'Nový názov',\n    'invalid_path' => 'Cesta môže obsahovať iba čísla, písmená, medzery a nasledujúce znaky: ._-/',\n    'error_deleting_file' => 'Chyba pri mazaní súboru :name.',\n    'error_deleting_dir_not_empty' => 'Chyba pri mazaní priečinka :name. Priečinok nie je prázdny.',\n    'error_deleting_dir' => 'Chyba pri mazaní priečinku :name.',\n    'invalid_name' => 'Názov môže obsahovať iba čísla, písmená, medzery a nasledujúce znaky: ._-',\n    'original_not_found' => 'Pôvodný súbor alebo priečinok nebol nájdený',\n    'already_exists' => 'Súbor alebo priečinok s týmto názvom už existuje',\n    'error_renaming' => 'Chyba pri premenovávaní súboru alebo priečinka',\n    'name_cant_be_empty' => 'Názov nemôže byť prázdny',\n    'too_large' => 'Nahrávaný súbor je príliš veľký. Maximálna povolená veľkosť súboru je :max_size',\n    'type_not_allowed' => 'Iba nasledovné typy súborov sú povolené: :allowed_types',\n    'file_not_valid' => 'Súbor nie je validný',\n    'error_uploading_file' => 'Chyba pri nahrávaní súboru \\':name\\': :error',\n    'move_please_select' => 'prosím vyberte',\n    'move_destination' => 'Cieľový priečinok',\n    'move_popup_title' => 'Presunúť súbory',\n    'move_button' => 'Presunúť',\n    'selected_files_not_found' => 'Vybrané súbory neboli nájdené',\n    'select_destination_dir' => 'Prosím zvoľte cieľový priečinok',\n    'destination_not_found' => 'Cieľový priešinok nebol nájdený',\n    'error_moving_file' => 'Chyba pri presúvaní súboru :file',\n    'error_moving_directory' => 'Chyba pri presúvaní priečinka :dir',\n    'error_deleting_directory' => 'Chyba pri mazaní pôvodného priečinka :dir',\n    'no_list_records' => 'Žiadne súbory',\n    'delete_confirm' => 'Skutočne zmazať vybrané súbory alebo priečinky?',\n    'path' => 'Cesta',\n  ],\n  'component' => [\n    'menu_label' => 'Komponenty',\n    'invalid_request' => 'Šablóna nemôže byť uložená kvôli neplatným dátam kompentntu.',\n    'no_records' => 'Žiadne komponenty',\n    'not_found' => 'Komponent \\':name\\' nebol nájdený.',\n    'method_not_found' => 'Komponent \\':name\\' neobsahuje metódu \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Neznámy typ šablóny.',\n    'not_found' => 'Šablóna nenájdená.',\n    'saved' => 'Šablóna uložená.',\n    'no_list_records' => 'Žiadne záznamy',\n    'delete_confirm' => 'Skutočne zmazať vybrané šablóny?',\n    'order_by' => 'Zoradiť podľa',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Správa obsahu stránky',\n    'manage_assets' => 'Správa súborov stránky - obrázky, JavaScript súbory, CSS súbory',\n    'manage_pages' => 'Tvorba, úpravy a mazanie stránok',\n    'manage_layouts' => 'Tvorba, úpravy a mazanie CMS layoutov',\n    'manage_partials' => 'Tvorba, úpravy a mazanie čiastkových súborov CMS',\n    'manage_themes' => 'Aktivácia, deaktiácia a nastavenia tém',\n    'manage_theme_options' => 'Nsatavenia aktívnej témy',\n  ],\n  'theme_log' => [\n    'hint' => 'Tento záznam zobrazuje všetky zmeny témy urobené adminstrátormi v administrácií.',\n    'menu_label' => 'Záznam tém',\n    'menu_description' => 'Zobraziť zmeny v aktívnej téme.',\n    'empty_link' => 'Vyprázdniť záznam tém',\n    'empty_loading' => 'Vyprázdňovnie záznamu tém...',\n    'empty_success' => 'Záznam tém vyprázdený',\n    'return_link' => 'Návrat na záznam tém',\n    'id' => 'ID',\n    'id_label' => 'ID záznamu',\n    'created_at' => 'Čas a dátum',\n    'user' => 'Užívateľ',\n    'type' => 'Typ',\n    'type_create' => 'Vytvorené',\n    'type_update' => 'Upravené',\n    'type_delete' => 'Zmazané',\n    'theme_name' => 'Téma',\n    'theme_code' => 'Kód témy',\n    'old_template' => 'Šablóna (Pôvodná)',\n    'new_template' => 'Šablóna (Nová)',\n    'template' => 'Šablóna',\n    'diff' => 'Zmeny',\n    'old_value' => 'Pôvodná hodnota',\n    'new_value' => 'Nová hodnota',\n    'preview_title' => 'Zmeny šablóny',\n    'template_updated' => 'Šablóna bola upravená',\n    'template_created' => 'Šablóna bola vytvorená',\n    'template_deleted' => 'Šablóna bola zmazaná',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/sk.json",
    "content": "{\n  \"Themes\": \"Témy\",\n  \"Manage Themes\": \"Spravovať témy\",\n  \"Customize Theme\": \"Prispôsobiť tému\",\n  \"Manage Maintenance Mode\": \"Spravovať režim údržby\",\n  \"View Website During Maintenance\": \"Zobraziť webovú stránku počas údržby\",\n  \"Manage Content\": \"Správa obsahu\",\n  \"Manage Asset Files\": \"Spravovať súbory aktív\",\n  \"Manage Pages\": \"Spravovať stránky\",\n  \"Manage Layouts\": \"Spravovať rozloženia\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Nastavte stránku režimu údržby a jej nastavenia.\",\n  \"Maintenance Mode\": \"Režim údržby\",\n  \"Select the page to show when maintenance mode is activated.\": \"Zvoľte stránku, ktorá bude zobrazená pri aktivovanom režime údržby.\",\n  \"Enable maintenance mode\": \"Aktivovať režim údržby\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Režim údržby zobrazí stránku údržby návštevníkom, ktorí nie sú prihlásení do adminstrácie.\",\n  \"Resources\": \"Zdroje\",\n  \"Reference assets and variables included on this page.\": \"Referenčné aktíva a premenné zahrnuté na tejto stránke.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Súbory JavaScript v priečinku aktív/js\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"LESS súborov v priečinku aktív/menej\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS súbor(y) v priečinku aktív/scss\",\n  \"Variables\": \"Premenné\",\n  \"Page variables name(s) and value(s)\": \"Názvy a hodnoty premenných stránky\",\n  \"Headers\": \"Hlavičky\",\n  \"Page header name(s) and value(s)\": \"Názvy hlavičiek stránky a hodnoty\",\n  \"Site Picker\": \"Výber lokality\",\n  \"Displays links for selecting a different site.\": \"Zobrazí odkazy na výber inej lokality.\",\n  \"Unknown component\": \"Neznámy komponent\",\n  \"View Bag\": \"Zobraziť tašku\",\n  \"Stores custom template properties.\": \"Ukladá vlastnosti vlastnej šablóny.\",\n  \"By :name\": \"Vytvoril :name\",\n  \"The theme ':name' is not found.\": \"Téma ':name' nebola nájdená.\",\n  \"Manage the front-end theme and customization options.\": \"Spravujte témy vzhľadu a možnosti prispôsobenia.\",\n  \"Site Theme\": \"Téma vzhľadu\",\n  \"Properties\": \"Parametre\",\n  \"Publish\": \"Publikovať\",\n  \"Advanced\": \"Pokročilé\",\n  \"Name\": \"Názov\",\n  \"New theme name\": \"Názov novej témy\",\n  \"Author Name\": \"Autor\",\n  \"Person or company name\": \"Osoba alebo názov spoločnosti\",\n  \"Directory Name\": \"Názov priečinka\",\n  \"The destination theme directory\": \"Cieľová zložka témy\",\n  \"Description\": \"Popis\",\n  \"Theme description\": \"Popis témy\",\n  \"Homepage\": \"Domovská stránka\",\n  \"Website URL\": \"URL domovskej stránky\",\n  \"Author Code\": \"Kód autora\",\n  \"A unique code for the author used for distribution\": \"Jedinečný kód autora použitý na distribúciu\",\n  \"Theme Code\": \"Kód\",\n  \"A unique code for this theme used for distribution\": \"Unikátny kód pre distribúciu tejto témy\",\n  \"Parent Theme\": \"Nadradená téma\",\n  \"Database Mode\": \"Databázový mód\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Save changes to this theme in the database instead of the filesystem\",\n  \"-- no parent --\": \"-- no parent --\",\n  \"Theme\": \"Téma\",\n  \"Folders\": \"Priečinky\",\n  \"Please select the theme folders you would like to export\": \"Prosím zvoľte priečinky témy, ktoré chcete exportovať\",\n  \"Theme archive file\": \"Súbor s témou\",\n  \"Overwrite existing files\": \"Prepísať existujúce súbory\",\n  \"Untick this box to only import new files\": \"Odškrtnite tento box pokiaľ chcete iba importovať nové súbory\",\n  \"Please select the theme folders you would like to import\": \"Prosím zvoľte priečinky témy, ktoré chcete importovať\",\n  \"Activate\": \"Aktívna\",\n  \"Customize\": \"Upraviť\",\n  \"Duplicate\": \"Duplikovať\",\n  \"Duplicate Theme\": \"Duplikovať tému\",\n  \"Theme Duplicated!\": \"Téma duplikovaná!\",\n  \"Manage\": \"Spravovať\",\n  \"Manage Theme\": \"Spravovať tému\",\n  \"Edit Properties\": \"Nastaviť\",\n  \"Save Properties\": \"Uložiť nastavenia\",\n  \"Import\": \"Importovať\",\n  \"Import Theme\": \"Importovať tému\",\n  \"Theme Imported!\": \"Téma úspešne importovaná!\",\n  \"Export\": \"Exportovať\",\n  \"Export Theme\": \"Exportovať tému\",\n  \"Delete\": \"Zmazať\",\n  \"Delete this theme? It cannot be undone!\": \"Zmazať túto tému? Túto akciu nejde vrátiť späť!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Aktívnu tému nie je možné zmazať, aktivujte najprv inú tému.\",\n  \"Theme deleted!\": \"Téma úspešne zmazaná!\",\n  \"Create Theme\": \"Vytvoriť tému\",\n  \"Create\": \"Vytvoriť\",\n  \"Create a New Blank Theme\": \"Vytvoriť novú prázdnu tému\",\n  \"Theme Created!\": \"Téma úspešne vytvorená!\",\n  \"Please specify a name for the theme.\": \"Prosím zvoľte názov novej témy.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Názov môže obashovať iba čísla, písmená a nasledujúce znaky: _-\",\n  \"Desired theme directory already exists.\": \"Zadaný priečinok s témou už existuje.\",\n  \"Theme directory\": \"Priečinok témy\",\n  \"Provide a new directory name for the duplicated theme.\": \"Zadajte nový názov priečinku pre duplikovanú tému.\",\n  \"Find More Themes\": \"Vyhľadať ďalšie témy\",\n  \"Saving Theme...\": \"Ukladám tému...\",\n  \"Return to Themes List\": \"Návrat na zoznam tém\",\n  \"No themes found\": \"Nebola nájdená žiadna téma\",\n  \"Seed Theme\": \"Seed Theme\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seed the specified theme with blueprints, translations and data.\",\n  \"Theme Seeded!\": \"Theme Seeded!\",\n  \"Select Page Link\": \"Select Page Link\",\n  \"Search all references...\": \"Search all references...\",\n  \"CMS Page\": \"CMS stránka\",\n  \"Link\": \"Odkaz\",\n  \"Please select a CMS page\": \"Prosím vyberte CMS stránku\",\n  \"Please select a page reference\": \"Vyberte referečnú stránku\",\n  \"Please enter a valid URL\": \"Prosím, zadajte platnú adresu URL\",\n  \"Delete Theme\": \"Odstrániť tému\",\n  \"Activate Theme\": \"Aktitovať tému\",\n  \"Manage Partials\": \"Manage Partials\",\n  \"No Title\": \"Bez názvu\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Unikátny názov komponentu pri použití v kóde na stránke alebo layoute.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Aliasy komponentov sú povinné a môžu obsahovať iba písmená, čísla a podtržítka. Aliasy by mali začínať písmenom.\",\n  \"Unnamed\": \"Bez názvu\",\n  \"No description provided\": \"Nebol poskytnutý žiadny popis\",\n  \"No snippets found\": \"Neboli nájdené žiadne snippety\",\n  \"Search...\": \"Hľadať...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Snippet s požadovaným kódom :code nebol nájdený v téme.\",\n  \"Snippet\": \"Úryvok\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Zadajte kód, aby táto čiastková šablóna bola dostupná ako snippet v plugine statických stránok.\",\n  \"Please enter the snippet code\": \"Please enter the snippet code\",\n  \"Snippet Code\": \"Kód snippetu\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Tento názov sa zobrazí v zozname snippetov v bočnom menu pluginu statických stránok a priamo na stránke, keď bude snippet pridaný.\",\n  \"Please enter the snippet name\": \"Please enter the snippet name\",\n  \"Property Title\": \"Názov vlastnosti\",\n  \"Please provide the property title\": \"Please provide the property title\",\n  \"Code\": \"Kód\",\n  \"Please provide the property name\": \"Please provide the property name\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Kód vlastnosti by mal začínať latinským písmenom a môže obsahovať len latinské písmená a číslice\",\n  \"Type\": \"Typ\",\n  \"Select\": \"Vybrať\",\n  \"String\": \"Reťazec\",\n  \"Checkbox\": \"Zaškrtávacie pole\",\n  \"Dropdown\": \"Rozbaľovací zoznam\",\n  \"Please select the property type\": \"Please select the property type\",\n  \"Default\": \"Predvolená hodnota\",\n  \"Options\": \"Možnosti\",\n  \"Define a Snippet Partial\": \"Define a Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Neplatný kľúč položky rozbaľovacieho zoznamu: :key. Kľúč položky rozbaľovacieho zoznamu môže obsahovať iba písmená, číslice a znaky: _-\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"The description is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Details\": \"Detaily\",\n  \"Frontend Theme\": \"Téma vzhľadu\"\n}"
  },
  {
    "path": "modules/cms/lang/sl/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Neveljavno ime datoteke :name. Imena datotek lahko vsebujejo le alfa-numerične simbole, podčrtaje, pomišljaje in pike. Nekaj primerov pravilnih imen datotek: page.htm, page, subdirectory/page',\n    'invalid_property' => 'Lastnost \\':name\\' ne more biti nastavljena',\n    'file_already_exists' => 'Datoteka \\':name\\' že obstaja',\n    'error_saving' => 'Napaka pri shranjevanju datoteke \\':name\\'. Prosimo, preverite vaša uporabniška dovoljenja.',\n    'error_creating_directory' => 'Napaka pri ustvarjanju mape :name. Prosimo, preverite vaša uporabniška dovoljenja.',\n    'invalid_file_extension' => 'Neveljaven format datoteke :invalid\\'. Veljavni formati so :allowed.',\n    'error_deleting' => 'Napaka pri brisanju predloge \\':name\\'. Prosimo, preverite vaša uporabniška dovoljenja.',\n    'delete_success' => 'Izbrisanih predlog: :count.',\n    'file_name_required' => 'Obvezno polje: Ime datoteke',\n    'safe_mode_enabled' => 'Varnostni način je trenutno vključen.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Spletna stran',\n      'online' => 'Aktivna',\n      'maintenance' => 'V vzdrževanju',\n      'manage_themes' => 'Upravljaj teme',\n      'customize_theme' => 'Prilagodi temo',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktivna tema ni nastavljena.',\n      'not_found' => 'Aktivne teme ni mogoče najti.',\n    ],\n    'edit' => [\n      'not_set' => 'Urejana tema ni nastavljena.',\n      'not_found' => 'Urejane teme ni mogoče najti.',\n      'not_match' => 'Objekt, do katerega poskušate dostopati, ne pripada urejani temi. Prosimo, osvežite stran.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Strani \\':name\\' ni mogoče najti.',\n    'not_found' => [\n      'label' => 'Stran ne obstaja',\n      'help' => 'Zahtevane strani ni bilo mogoče najti.',\n    ],\n    'custom_error' => [\n      'label' => 'Napaka strani',\n      'help' => 'Žal je prišlo do napake in strani ni mogoče prikazati.',\n    ],\n    'menu_label' => 'Strani',\n    'unsaved_label' => 'Neshranjene strani',\n    'no_list_records' => 'Ni najdenih strani.',\n    'new' => 'Nova stran',\n    'invalid_url' => 'Neveljavna oblika URL formata. URL se mora začeti z znakom za desno poševnico in lahko vsebuje številke, latinične črke in naslednje znake: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Želite izbrisati izbrane strani?',\n    'delete_confirm_single' => 'Želite izbrisati to stran?',\n    'no_layout' => '-- brez postavitve --',\n    'title' => 'Naslov strani',\n    'url' => 'URL strani',\n    'file_name' => 'Ime datoteke strani',\n  ],\n  'layout' => [\n    'not_found_name' => 'Postavitve \\':name\\' ni mogoče najti.',\n    'menu_label' => 'Postavitve',\n    'unsaved_label' => 'Neshranjene postavitve',\n    'no_list_records' => 'Ni najdenih postavitev.',\n    'new' => 'Nova postavitev',\n    'delete_confirm_multiple' => 'Želite izbrisati izbrane postavitve?',\n    'delete_confirm_single' => 'Želite izbrisati to postavitev?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Predloge \\':name\\' ni mogoče najti.',\n    'invalid_name' => 'Neveljavno ime predloge :name.',\n    'menu_label' => 'Predloge',\n    'unsaved_label' => 'Neshranjene predloge',\n    'no_list_records' => 'Ni najdenih predlog.',\n    'delete_confirm_multiple' => 'Želite izbrisati izbrane predloge?',\n    'delete_confirm_single' => 'Želite izbrisati to predlogo?',\n    'new' => 'Nova predloga',\n  ],\n  'content' => [\n    'not_found_name' => 'Datoteke z vsebino \\':name\\' ni mogoče najti.',\n    'menu_label' => 'Vsebine',\n    'unsaved_label' => 'Neshranjena vsebina',\n    'no_list_records' => 'Ni najdenih datotek z vsebino.',\n    'delete_confirm_multiple' => 'Ali želite izbrisati izbrane datoteke ali mape z vsebino?',\n    'delete_confirm_single' => 'Želite izbrisati to datoteko z vsebino?',\n    'new' => 'Nova datoteka z vsebino',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Neveljavno ime AJAX akcije: :name',\n    'not_found' => 'Ni mogoče najti AJAX akcije \\':name\\'.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Dodaj',\n    'search' => 'Iskanje...',\n  ],\n  'editor' => [\n    'settings' => 'Nastavitve',\n    'title' => 'Naslov',\n    'new_title' => 'Nov naslov strani',\n    'url' => 'URL',\n    'filename' => 'Ime datoteke',\n    'layout' => 'Postavitev',\n    'description' => 'Opis',\n    'preview' => 'Predogled',\n    'meta' => 'Meta podatki',\n    'meta_title' => 'Meta naslov',\n    'meta_description' => 'Meta opis',\n    'markup' => 'Označevalni jezik',\n    'code' => 'Koda',\n    'content' => 'Vsebina',\n    'hidden' => 'Skrito',\n    'hidden_comment' => 'Skrite strani so dostopne le uporabnikom, ki so prijavljeni v administracijo.',\n    'enter_fullscreen' => 'Celozaslonski način',\n    'exit_fullscreen' => 'Zapri celozaslonski način',\n    'open_searchbox' => 'Odpri iskalnik',\n    'open_replacebox' => 'Odpri \"Najdi in zamenjaj\"',\n    'commit' => 'Shrani spremembe',\n    'reset' => 'Ponastavi',\n    'commit_confirm' => 'Ali ste prepričani, da želite shraniti spremembe datoteke v datotečni sistem? To bo prepisalo obstoječo datoteko v datotečnem sistemu.',\n    'reset_confirm' => 'Ali ste prepričani, da želite datoteko ponastaviti na kopijo, ki se nahaja v datotečnem sistemu? To bo datoteko v celoti nadomestilo z datoteko, ki se nahaja v datotečnem sistemu.',\n    'committing' => 'Shranjujem spremembe',\n    'resetting' => 'Ponastavljam',\n    'commit_success' => 'Sprememba :type je bila shranjena v datotečni sistem.',\n    'reset_success' => 'Sprememba :type je bila ponastavljena na različico iz datotečnega sistema.',\n  ],\n  'asset' => [\n    'menu_label' => 'Oblikovne datoteke',\n    'unsaved_label' => 'Neshranjene datoteke',\n    'drop_down_add_title' => 'Dodaj...',\n    'drop_down_operation_title' => 'Dejanje...',\n    'upload_files' => 'Naloži datoteke',\n    'create_file' => 'Ustvari datoteko',\n    'create_directory' => 'Ustvari mapo',\n    'directory_popup_title' => 'Nova mapa',\n    'directory_name' => 'Ime mape',\n    'rename' => 'Preimenuj',\n    'delete' => 'Izbriši',\n    'move' => 'Premakni',\n    'select' => 'Izberi',\n    'new' => 'Nova datoteka',\n    'rename_popup_title' => 'Preimenuj',\n    'rename_new_name' => 'Novo ime',\n    'invalid_path' => 'Lokacija lahko vsebuje le številke, latinične črke, presledke in naslednje znake: ._-/',\n    'error_deleting_file' => 'Napaka pri brisanju datoteke :name.',\n    'error_deleting_dir_not_empty' => 'Napaka pri brisanju mape :name. Mapa ni prazna.',\n    'error_deleting_dir' => 'Napaka pri brisanju mape :name.',\n    'invalid_name' => 'Ime lahko vsebuje le številke, latinične črke, presledke in naslednje znake: ._-',\n    'original_not_found' => 'Originalne datoteke oziroma mape ni mogoče najti.',\n    'already_exists' => 'Datoteka oziroma mapa s tem imenom že obstaja.',\n    'error_renaming' => 'Napaka pri preimenovanju datoteke oziroma mape.',\n    'name_cant_be_empty' => 'Ime ne more biti prazno.',\n    'too_large' => 'Naložena datoteka je prevelika. Največja dovoljena velikost datoteke je :max_size.',\n    'type_not_allowed' => 'Dovoljeni so le formati datotek: :alowed_types',\n    'file_not_valid' => 'Neveljavna datoteka',\n    'error_uploading_file' => 'Napaka pri nalaganju datoteke \\':name\\': :error',\n    'move_please_select' => 'izberite',\n    'move_destination' => 'Ciljna mapa',\n    'move_popup_title' => 'Premakni oblikovne datoteke',\n    'move_button' => 'Premakni',\n    'selected_files_not_found' => 'Izbranih datotek ni mogoče najti.',\n    'select_destination_dir' => 'Prosimo, izberite ciljno mapo.',\n    'destination_not_found' => 'Ciljne mape ni mogoče najti.',\n    'error_moving_file' => 'Napaka pri premikanju datoteke :file.',\n    'error_moving_directory' => 'Napaka pri premikanju mape :dir.',\n    'error_deleting_directory' => 'Napaka pri brisanju originalne mape :dir.',\n    'no_list_records' => 'Ni najdenih datotek.',\n    'delete_confirm' => 'Želite izbrisati izbrane datoteke ali mape?',\n    'path' => 'Lokacija',\n  ],\n  'component' => [\n    'menu_label' => 'Komponente',\n    'invalid_request' => 'Predloge ni bilo mogoče shraniti zaradi neveljavnih podatkov komponente.',\n    'no_records' => 'Ni najdenih komponent.',\n    'not_found' => 'Komponente :name ni mogoče najti.',\n    'method_not_found' => 'Komponenta \\':name\\' ne vsebuje metode \\':method\\'.',\n    'soft_component' => 'Mehka komponenta',\n    'soft_component_description' => 'Ta komponenta manjka, vendar ni obvezna.',\n  ],\n  'template' => [\n    'invalid_type' => 'Neznan format predloge.',\n    'not_found' => 'Predloge ni mogoče najti.',\n    'saved' => 'Predloga je shranjena.',\n    'no_list_records' => 'Ni najdenih zapisov.',\n    'delete_confirm' => 'Želite izbrisati izbrane predloge?',\n    'order_by' => 'Razvrsti po',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Upravljanje datotek z vsebino spletne strani',\n    'manage_assets' => 'Upravljanje z oblikovnimi datotekami - slike, JavaScript, CSS datoteke',\n    'manage_pages' => 'Ustvarjanje, spreminjanje ali brisanje strani',\n    'manage_layouts' => 'Ustvarjanje, spreminjanje ali brisanje CMS postavitev',\n    'manage_partials' => 'Ustvarjanje, spreminjanje ali brisanje CMS predlog',\n    'manage_themes' => 'Aktiviranje, de-aktiviranje ali konfiguriranje CMS tem',\n    'manage_theme_options' => 'Konfiguriranje možnosti prilagajanja za aktivno temo',\n  ],\n  'theme_log' => [\n    'hint' => 'V tem dnevniku so prikazane vse spremembe teme, ki so jih naredili administratorji v administraciji.',\n    'menu_label' => 'Dnevnik sprememb teme',\n    'menu_description' => 'Pokaži spremembe aktivne teme.',\n    'empty_link' => 'Sprazni dnevnik sprememb teme',\n    'empty_loading' => 'Praznjenje dnevnika sprememb...',\n    'empty_success' => 'Dnevnik sprememb je izpraznjen.',\n    'return_link' => 'Vrni se na dnevnik sprememb teme',\n    'id' => 'ID',\n    'id_label' => 'ID dnevnika',\n    'created_at' => 'Čas in datum',\n    'user' => 'Uporabnik',\n    'type' => 'Tip',\n    'type_create' => 'Ustvari',\n    'type_update' => 'Posodobi',\n    'type_delete' => 'Izbriši',\n    'theme_name' => 'Tema',\n    'theme_code' => 'Koda teme',\n    'old_template' => 'Predloga (stara)',\n    'new_template' => 'Predloga (nova)',\n    'template' => 'Predloga',\n    'diff' => 'Spremembe',\n    'old_value' => 'Stara vrednost',\n    'new_value' => 'Nova vrednost',\n    'preview_title' => 'Spremembe predloge',\n    'template_updated' => 'Predloga je posodobljena.',\n    'template_created' => 'Predloga je ustvarjena.',\n    'template_deleted' => 'Predloga je izbrisana.',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/sl.json",
    "content": "{\n  \"Themes\": \"Teme\",\n  \"Manage Themes\": \"Upravljajte teme\",\n  \"Customize Theme\": \"Prilagodi temo\",\n  \"Manage Maintenance Mode\": \"Upravljanje načina vzdrževanja\",\n  \"View Website During Maintenance\": \"Ogled spletnega mesta med vzdrževanjem\",\n  \"Manage Content\": \"Upravljajte vsebino\",\n  \"Manage Asset Files\": \"Upravljanje datotek sredstev\",\n  \"Manage Pages\": \"Upravljanje strani\",\n  \"Manage Layouts\": \"Upravljajte postavitve\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Nastavitve načina vzdrževanja in preklop na način vzdrževanja.\",\n  \"Maintenance Mode\": \"Način vzdrževanja\",\n  \"Select the page to show when maintenance mode is activated.\": \"Izberite stran, ki bo prikazana ob vključenem načinu vzdrževanja.\",\n  \"Enable maintenance mode\": \"Omogoči način vzdrževanja\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"V načinu vzdrževanja bo stran o vzdrževanju prikazana obiskovalcem, ki niso prijavljeni v administracijo.\",\n  \"Resources\": \"Viri\",\n  \"Reference assets and variables included on this page.\": \"Referenčna sredstva in spremenljivke, vključene na tej strani.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Datoteke JavaScript v mapi assets/js\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"Datoteke LESS v mapi assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Datoteke SCSS v mapi assets/scss\",\n  \"Variables\": \"Spremenljivke\",\n  \"Page variables name(s) and value(s)\": \"Imena in vrednosti spremenljivk strani\",\n  \"Headers\": \"Glave\",\n  \"Page header name(s) and value(s)\": \"Ime(-na) in vrednost(-i) glave strani\",\n  \"Site Picker\": \"Izbirnik mesta\",\n  \"Displays links for selecting a different site.\": \"Prikaže povezave za izbiro drugega mesta.\",\n  \"Unknown component\": \"Neznana komponenta\",\n  \"View Bag\": \"Ogled torbe\",\n  \"Stores custom template properties.\": \"Shranjuje lastnosti predloge po meri.\",\n  \"By :name\": \"Avtor :name\",\n  \"The theme ':name' is not found.\": \"Teme ':name' ni bilo mogoče najti.\",\n  \"Manage the front-end theme and customization options.\": \"Upravljanje s temo spletne strani in možnostmi prilagoditve.\",\n  \"Site Theme\": \"Tema spletne strani\",\n  \"Properties\": \"Lastnosti\",\n  \"Publish\": \"Objavi\",\n  \"Advanced\": \"Napredno\",\n  \"Name\": \"Ime\",\n  \"New theme name\": \"Novo ime teme\",\n  \"Author Name\": \"Avtor\",\n  \"Person or company name\": \"Oseba ali ime podjetja\",\n  \"Directory Name\": \"Ime mape\",\n  \"The destination theme directory\": \"Ciljna mapa teme\",\n  \"Description\": \"Opis\",\n  \"Theme description\": \"Opis teme\",\n  \"Homepage\": \"Domača stran\",\n  \"Website URL\": \"URL spletne strani\",\n  \"Author Code\": \"Koda avtorja\",\n  \"A unique code for the author used for distribution\": \"Unikatna koda avtorja, ki se uporablja za distribucijo.\",\n  \"Theme Code\": \"Koda teme\",\n  \"A unique code for this theme used for distribution\": \"Unikatna koda teme, ki se uporablja za distribucijo.\",\n  \"Parent Theme\": \"Nadrejena tema\",\n  \"Database Mode\": \"Način baze podatkov\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Shranite spremembe te teme v bazo podatkov namesto v datotečni sistem.\",\n  \"-- no parent --\": \"-- ni nadrejenega --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Mape\",\n  \"Please select the theme folders you would like to export\": \"Prosimo, izberite mape teme, ki jih želite izvoziti.\",\n  \"Theme archive file\": \"Datoteka z arhivom teme\",\n  \"Overwrite existing files\": \"Prepiši obstoječe datoteke\",\n  \"Untick this box to only import new files\": \"Odkljukajte to polje, če želite uvoziti le nove datoteke.\",\n  \"Please select the theme folders you would like to import\": \"Prosimo, izberite mape teme, ki jih želite uvoziti.\",\n  \"Activate\": \"Aktiviraj\",\n  \"Customize\": \"Prilagodi\",\n  \"Duplicate\": \"Podvoji\",\n  \"Duplicate Theme\": \"Podvoji temo\",\n  \"Theme Duplicated!\": \"Tema je podvojena!\",\n  \"Manage\": \"Upravljanje\",\n  \"Manage Theme\": \"Upravljanje s temo\",\n  \"Edit Properties\": \"Uredi lastnosti\",\n  \"Save Properties\": \"Shrani lastnosti\",\n  \"Import\": \"Uvozi\",\n  \"Import Theme\": \"Uvozi temo\",\n  \"Theme Imported!\": \"Tema je uvožena!\",\n  \"Export\": \"Izvozi\",\n  \"Export Theme\": \"Izvozi temo\",\n  \"Delete\": \"Izbriši\",\n  \"Delete this theme? It cannot be undone!\": \"Želite izbrisati to temo? Ukaza ni mogoče razveljaviti!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Aktivne teme ni mogoče izbrisati. Najprej je potrebno zamenjati aktivno temo.\",\n  \"Theme deleted!\": \"Tema je izbrisana!\",\n  \"Create Theme\": \"Ustvari temo\",\n  \"Create\": \"Ustvari\",\n  \"Create a New Blank Theme\": \"Ustvari novo prazno temo\",\n  \"Theme Created!\": \"Tema je ustvarjena!\",\n  \"Please specify a name for the theme.\": \"Prosimo, navedite ime teme.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Ime lahko vsebuje samo številke, latinične črke in naslednje simbole: _-\",\n  \"Desired theme directory already exists.\": \"Želena mapa za temo že obstaja.\",\n  \"Theme directory\": \"Mapa za temo\",\n  \"Provide a new directory name for the duplicated theme.\": \"Podajte novo ime mape za podvojeno temo.\",\n  \"Find More Themes\": \"Poišči več tem\",\n  \"Saving Theme...\": \"Shranjevanje teme...\",\n  \"Return to Themes List\": \"Nazaj na seznam tem\",\n  \"No themes found\": \"Ni najdenih tem\",\n  \"Seed Theme\": \"Zapolni temo\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Zapolni določeno temo z načrti, prevodi in podatki.\",\n  \"Theme Seeded!\": \"Tema zapolnjena!\",\n  \"Select Page Link\": \"Izberite povezavo do strani\",\n  \"Search all references...\": \"Iskanje po vseh referencah...\",\n  \"CMS Page\": \"CMS stran\",\n  \"Link\": \"Povezava\",\n  \"Please select a CMS page\": \"Izberite CMS stran\",\n  \"Please select a page reference\": \"Izberite referenco strani\",\n  \"Please enter a valid URL\": \"Vnesite veljaven URL\",\n  \"Delete Theme\": \"Izbriši temo\",\n  \"Activate Theme\": \"Aktiviraj temo\",\n  \"Manage Partials\": \"Upravljajte delce\",\n  \"No Title\": \"Brez naslova\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Unikatno ime komponente, ki se uporablja na strani ali v kodi postavitve.\",\n  \"Alias\": \"Vzdevek\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Vzdevki komponent so obvezni in lahko vsebujejo le latinične znake, številke in podčrtaje. Vzdevki naj se začnejo z latiničnim znakom.\",\n  \"Unnamed\": \"Neimenovano\",\n  \"No description provided\": \"Opis ni podan\",\n  \"No snippets found\": \"Ni najdenih gradnikov.\",\n  \"Search...\": \"Išči...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Gradnika s kodo :code v trenutni temi ni mogoče najti.\",\n  \"Snippet\": \"Gradniki\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Vnesite kodo, s katero bo ta predloga na voljo kot gradnik v vtičniku za statične strani.\",\n  \"Please enter the snippet code\": \"Please enter the snippet code\",\n  \"Snippet Code\": \"Koda gradnika\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Ime se prikaže na seznamu gradnikov, na stranskem meniju statičnih strani in na vsebini strani, na katero je dodan gradnik.\",\n  \"Please enter the snippet name\": \"Please enter the snippet name\",\n  \"Property Title\": \"Naslov lastnosti\",\n  \"Please provide the property title\": \"Please provide the property title\",\n  \"Code\": \"Koda\",\n  \"Please provide the property name\": \"Please provide the property name\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Koda lastnosti se mora začeti z latinično črko in lahko vsebuje samo latinične črke in številke.\",\n  \"Type\": \"Tip\",\n  \"Select\": \"Select\",\n  \"String\": \"Niz znakov\",\n  \"Checkbox\": \"Potrditveno polje\",\n  \"Dropdown\": \"Spustni meni\",\n  \"Please select the property type\": \"Please select the property type\",\n  \"Default\": \"Privzeto\",\n  \"Options\": \"Možnosti\",\n  \"Define a Snippet Partial\": \"Define a Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Neveljaven ključ elementa spustnega seznama: :key. Ključi lahko vsebujejo le številke, latinične črke in znaka _ ter -.\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"The description is displayed in the snippet list in the editor when a snippet is added.\",\n  \"Details\": \"Details\",\n  \"Frontend Theme\": \"Tema spletne strani\"\n}"
  },
  {
    "path": "modules/cms/lang/sv/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Felaktigt filnamn: :name. Filnamn kan endast innehålla alfanumeriska tecken, understreck, streck och punkter. Några exempel på korrekta filnamn är: sida.htm, sida, undermapp/sida',\n    'invalid_property' => 'Egenskapen \":name\" kunde inte sättas',\n    'file_already_exists' => 'Filen \":name\" finns redan',\n    'error_saving' => 'Ett fel inträffade när \":name\" skulle sparas',\n    'error_creating_directory' => 'Ett fel inträffade när mappen :name skulle skapas',\n    'invalid_file_extension' => 'Felaktig filändelse: :invalid. Tillåtna filändelser är: :allowed.',\n    'error_deleting' => 'Det gick inte att radera mallfilen: \":name\".',\n    'delete_success' => 'Mallarna är nu raderade: :count.',\n    'file_name_required' => 'Filnamnsfältet är obligatoriskt.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'online' => 'online',\n      'maintenance' => 'i underhåll',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Ett aktivt tema är ej valt',\n      'not_found' => 'Kunde inte hitta det aktiva temat.',\n    ],\n    'edit' => [\n      'not_set' => 'Redigeringstemat är ej valt',\n      'not_found' => 'Redigeringstemat kunde ej hittas',\n      'not_match' => 'Objektet du försöker komma åt tillhör inte det tema som för håller på att redigeras. Var god ladda om sidan',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'The page \\':name\\' is not found',\n    'not_found' => [\n      'label' => 'Sidan kunde ej hittas',\n      'help' => 'Den begärda sidan kunde ej hittas',\n    ],\n    'custom_error' => [\n      'label' => 'Sidfel',\n      'help' => 'Tyvärr kan inte sidan visas',\n    ],\n    'menu_label' => 'Sidor',\n    'unsaved_label' => 'Osparade sidor',\n    'no_list_records' => 'Inga sidor funna',\n    'new' => 'Ny sida',\n    'invalid_url' => 'Felaktigt URL-format. URLen skall starta med ett / och kan innehålla siffror, bokstäver och följande tecken: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Vill du verkligen radera markerade sidor?',\n    'delete_confirm_single' => 'Vill du verkligen radera denna sida?',\n    'no_layout' => '-- ingen layout --',\n  ],\n  'layout' => [\n    'not_found_name' => 'Layouten \\':name\\' hittades ej',\n    'menu_label' => 'Layouter',\n    'unsaved_label' => 'Osparade layouter',\n    'no_list_records' => 'Inga layouter funna',\n    'new' => 'Ny layout',\n    'delete_confirm_multiple' => 'Vill du verkligen radera valda layouter?',\n    'delete_confirm_single' => 'Vill du verkligen radera denna layouter?',\n  ],\n  'partial' => [\n    'not_found_name' => 'En partial med namnet \\':name\\' kunde ej hittas',\n    'invalid_name' => 'Felaktigt partialnamn: :name',\n    'menu_label' => 'Partials',\n    'unsaved_label' => 'Osparade partials',\n    'no_list_records' => 'Inga partials funna',\n    'delete_confirm_multiple' => 'Vill du verkligen radera markerade partials?',\n    'delete_confirm_single' => 'Vill du verkligen radera denna partial?',\n    'new' => 'Ny partial',\n  ],\n  'content' => [\n    'not_found_name' => 'Innehållet \\':name\\' kunde ej hittas',\n    'menu_label' => 'Innehåll',\n    'unsaved_label' => 'Osparat innehåll',\n    'no_list_records' => 'Inga innehållsfiler funna',\n    'delete_confirm_multiple' => 'Vill du verkligen radera markerade filer eller mappar?',\n    'delete_confirm_single' => 'Vill du verkligen radera detta innehållsfil?',\n    'new' => 'Ny innehållsfil',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Felaktig AJAX-hanterare: :name',\n    'not_found' => 'AJAX-hanterare \\':name\\' kunde ej hittas',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Lägg till',\n    'search' => 'Sök...',\n  ],\n  'editor' => [\n    'settings' => 'Inställningar',\n    'title' => 'Titel',\n    'new_title' => 'Ny sidtitel',\n    'url' => 'URL',\n    'filename' => 'Filnamn',\n    'layout' => 'Layout',\n    'description' => 'Beskrivning',\n    'preview' => 'Förhandsgranska',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta-titel',\n    'meta_description' => 'Meta-beskrivning',\n    'markup' => 'Markup',\n    'code' => 'Kod',\n    'content' => 'Innehåll',\n    'hidden' => 'Dold',\n    'hidden_comment' => 'Dolda sidor är endast tillgängliga genom inloggade back-end användare.',\n    'enter_fullscreen' => 'Starta helskärmsläge',\n    'exit_fullscreen' => 'Avsluta helskärmsläge',\n  ],\n  'asset' => [\n    'menu_label' => 'Filsystem',\n    'unsaved_label' => 'Osparade filer',\n    'drop_down_add_title' => 'Lägg till...',\n    'drop_down_operation_title' => 'Åtgärd...',\n    'upload_files' => 'Ladda upp fil(er)',\n    'create_file' => 'Skapa fil',\n    'create_directory' => 'Skapa mapp',\n    'directory_popup_title' => 'Ny mapp',\n    'directory_name' => 'Mappnamn',\n    'rename' => 'Döp om',\n    'delete' => 'Radera',\n    'move' => 'Flytta',\n    'select' => 'Välj',\n    'new' => 'Ny fil',\n    'rename_popup_title' => 'Byt namn',\n    'rename_new_name' => 'Nytt namn',\n    'invalid_path' => 'Sökvägen kan endast innehålla siffror, bokstäver, mellanslag och följande tecken: ._-/',\n    'error_deleting_file' => 'Kunde inte radera filen :name.',\n    'error_deleting_dir_not_empty' => 'Ett fel uppstod vid försök att radera :name. Mappen är ej tom',\n    'error_deleting_dir' => 'Kunde inte radera filen :name.',\n    'invalid_name' => 'Namn kan endast innehålla siffror, bokstäver, mellanslag och följande tecken: ._-',\n    'original_not_found' => 'Orginalfilen eller mappen kunde ej hittas',\n    'already_exists' => 'En fil eller mapp med detta namn finns redan',\n    'error_renaming' => 'Ett fel uppstod vid namnbyte på filen eller mappen',\n    'name_cant_be_empty' => 'Namn får ej vara tomt',\n    'too_large' => 'Den uppladdade filen är för stor. Tillåten filstorlek är :max_size',\n    'type_not_allowed' => 'Endast följande filtyper är tillåtna: :allowed_types',\n    'file_not_valid' => 'Filen är inte korrekt',\n    'error_uploading_file' => 'Ett fel uppstod vid uppladdning av \":name\" :error',\n    'move_please_select' => 'Var god välj',\n    'move_destination' => 'Destionationsmapp',\n    'move_popup_title' => 'Flytta objekt',\n    'move_button' => 'Flytta',\n    'selected_files_not_found' => 'Valda filer kunde ej hittas',\n    'select_destination_dir' => 'Var god välj en destinationsmapp',\n    'destination_not_found' => 'Destinationsmappen kunde ej hittas',\n    'error_moving_file' => 'Ett fel uppstod vid flytt av fil :file',\n    'error_moving_directory' => 'Ett fel uppstod vid flytt av mapp :dir',\n    'error_deleting_directory' => 'Ett fel uppstod vid radering av orginalmapp :dir',\n    'path' => 'Sökväg',\n  ],\n  'component' => [\n    'menu_label' => 'Komponenter',\n    'invalid_request' => 'Mallen kunde inte sparas pga felaktig komponentdata',\n    'no_records' => 'Inga komponenter funna',\n    'not_found' => 'Komponenten \\':name\\' kunde ej hittas',\n    'method_not_found' => 'Komponenten \\':name\\' saknar metoden \\':method\\'',\n  ],\n  'template' => [\n    'invalid_type' => 'Felaktig malltyp',\n    'not_found' => 'Den angivna mallen kunde ej hittas',\n    'saved' => 'Mallen har sparats',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => 'Hantera innehåll',\n    'manage_assets' => 'Hantera filer',\n    'manage_pages' => 'Hantera sidor',\n    'manage_layouts' => 'Hantera layouts',\n    'manage_partials' => 'Hantera partials',\n    'manage_themes' => 'Hantera teman',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/sv.json",
    "content": "{\n  \"Themes\": \"Teman\",\n  \"Manage Themes\": \"Hantera teman\",\n  \"Customize Theme\": \"Anpassa tema\",\n  \"Manage Maintenance Mode\": \"Hantera underhållsläge\",\n  \"View Website During Maintenance\": \"Se webbplatsen under underhåll\",\n  \"Manage Content\": \"Hantera innehåll\",\n  \"Manage Asset Files\": \"Hantera tillgångsfiler\",\n  \"Manage Pages\": \"Hantera sidor\",\n  \"Manage Layouts\": \"Hantera layouter\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Konfigurera underhållsläge-sidan och växla inställningen.\",\n  \"Maintenance Mode\": \"Underhållsläge\",\n  \"Select the page to show when maintenance mode is activated.\": \"När den är aktiverad så kommer besökare att se sidan som väljs nedan.\",\n  \"Enable maintenance mode\": \"Akrivera underhållsläge-läget\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Underhållsläget visar underhållssidan för besökare som inte är inloggade på back-end-området.\",\n  \"Resources\": \"Resurser\",\n  \"Reference assets and variables included on this page.\": \"Referenstillgångar och variabler inkluderade på denna sida.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"JavaScript-fil(er) i assets/js-mappen\",\n  \"LESS\": \"MINDRE\",\n  \"LESS file(s) in the assets/less folder\": \"MINDRE fil(er) i mappen assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"SCSS-fil(er) i mappen assets/scss\",\n  \"Variables\": \"Variabler\",\n  \"Page variables name(s) and value(s)\": \"Sidvariablernas namn och värden\",\n  \"Headers\": \"Rubriker\",\n  \"Page header name(s) and value(s)\": \"Sidhuvudnamn och värden\",\n  \"Site Picker\": \"Webbplatsväljare\",\n  \"Displays links for selecting a different site.\": \"Visar länkar för att välja en annan webbplats.\",\n  \"Unknown component\": \"Okänd komponent\",\n  \"View Bag\": \"Visa väska\",\n  \"Stores custom template properties.\": \"Lagrar anpassade mallegenskaper.\",\n  \"By :name\": \"Vid namn\",\n  \"The theme ':name' is not found.\": \"Kunde inte hitta temat ':name'.\",\n  \"Manage the front-end theme and customization options.\": \"Förhandsgranska listan av installerade teman och välj ett aktivt tema.\",\n  \"Site Theme\": \"Front-end tema\",\n  \"Properties\": \"Egenskaper\",\n  \"Publish\": \"Publicera\",\n  \"Advanced\": \"Avancerad\",\n  \"Name\": \"Namn\",\n  \"New theme name\": \"Nytt tema namn\",\n  \"Author Name\": \"Författare\",\n  \"Person or company name\": \"Person eller företagsnamn\",\n  \"Directory Name\": \"Katalognamn\",\n  \"The destination theme directory\": \"Destinationen för temakatalogen\",\n  \"Description\": \"Beskrivning\",\n  \"Theme description\": \"Tema beskrivning\",\n  \"Homepage\": \"Hemsida\",\n  \"Website URL\": \"Webbadress\",\n  \"Author Code\": \"Författarkod\",\n  \"A unique code for the author used for distribution\": \"En unik kod för författaren som används för distribution\",\n  \"Theme Code\": \"Kod\",\n  \"A unique code for this theme used for distribution\": \"En unik kod för detta tema som används för distribution\",\n  \"Parent Theme\": \"Föräldratema\",\n  \"Database Mode\": \"Databasläge\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Spara ändringar av detta tema i databasen istället för filsystemet\",\n  \"-- no parent --\": \"-- ingen förälder --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Mappar\",\n  \"Please select the theme folders you would like to export\": \"Vänligen välj temamappen du vill importera\",\n  \"Theme archive file\": \"Tema akrivfil\",\n  \"Overwrite existing files\": \"Skriv över befintliga filer\",\n  \"Untick this box to only import new files\": \"Avmarkera rutan för att endast importera nya filer\",\n  \"Please select the theme folders you would like to import\": \"Vänligen ange temamappen som du vill importera\",\n  \"Activate\": \"Aktivera\",\n  \"Customize\": \"Anpassa\",\n  \"Duplicate\": \"Duplicera\",\n  \"Duplicate Theme\": \"Duplicera temat\",\n  \"Theme Duplicated!\": \"Lyckades duplicera temat!\",\n  \"Manage\": \"Hantera\",\n  \"Manage Theme\": \"Hantera teman\",\n  \"Edit Properties\": \"Redigera egenskaper\",\n  \"Save Properties\": \"Spara egenskaperna\",\n  \"Import\": \"Importera\",\n  \"Import Theme\": \"Importera tema\",\n  \"Theme Imported!\": \"Lyckades importera temat!\",\n  \"Export\": \"Exportera\",\n  \"Export Theme\": \"Exportera tema\",\n  \"Delete\": \"Radera\",\n  \"Delete this theme? It cannot be undone!\": \"Är du säker på att du vill readera detta tema?? Det kan inte bli ogjort!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Du kan inte att readera det akriva temat, försök markera ett annat tema som aktivt först.\",\n  \"Theme deleted!\": \"Lyckades radera temat!\",\n  \"Create Theme\": \"Skapa tema\",\n  \"Create\": \"Skapa\",\n  \"Create a New Blank Theme\": \"Skapa ett nytt blankt tema\",\n  \"Theme Created!\": \"Lyckades skapa temat!\",\n  \"Please specify a name for the theme.\": \"Vänligen ange ett namn för temat.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Namn kan bara innehålla siffror, latinska bokstäver och följande symboler: _-\",\n  \"Desired theme directory already exists.\": \"Den önskade temakatalogen finns redan.\",\n  \"Theme directory\": \"Temamappen\",\n  \"Provide a new directory name for the duplicated theme.\": \"Ange ett nytt katalognamn för det duplicerade temat.\",\n  \"Find More Themes\": \"Hitta fler teman på OctoberCMS Theme Marketplace\",\n  \"Saving Theme...\": \"Sparar tema...\",\n  \"Return to Themes List\": \"Återvänd till temalistan\",\n  \"No themes found\": \"Inga teman hittades\",\n  \"Seed Theme\": \"Frötema\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Seed det angivna temat med ritningar, översättningar och data.\",\n  \"Theme Seeded!\": \"Temasådd!\",\n  \"Select Page Link\": \"Välj Sidlänk\",\n  \"Search all references...\": \"Sök i alla referenser...\",\n  \"CMS Page\": \"CMS sida\",\n  \"Link\": \"Länk\",\n  \"Please select a CMS page\": \"Välj en CMS-sida\",\n  \"Please select a page reference\": \"Välj en sidhänvisning\",\n  \"Please enter a valid URL\": \"Var god och skriv in en giltig url\",\n  \"Delete Theme\": \"Ta bort tema\",\n  \"Activate Theme\": \"Aktivera tema\",\n  \"Manage Partials\": \"Hantera partialer\",\n  \"No Title\": \"Ingen titel\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Ett unikt namn för denna komponent, när den skall användas i sid- eller layoutkod\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Komponentalias är obligatoriska och får endast innehålla bokstäver, siffror, och understreck. De måste börja med en bokstav\",\n  \"Unnamed\": \"Ej namngiven\",\n  \"No description provided\": \"Ingen beskrivning\",\n  \"No snippets found\": \"Inga stumpar hittades\",\n  \"Search...\": \"Sök...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"En stump med den begärda koden :code kunde inte hittas i temat.\",\n  \"Snippet\": \"Stump\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Skriv in en kod som gör att denna sidurklipp är tillgänglig som en stump i tillägget för statiska sidor.\",\n  \"Please enter the snippet code\": \"Vänligen ange kodavsnittet\",\n  \"Snippet Code\": \"Stumpkod\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Namnet visas i listan med stumpar i sidopanelen och på en sida när stumpen är tillagd.\",\n  \"Please enter the snippet name\": \"Ange kodavsnittets namn\",\n  \"Property Title\": \"Egenskapsrubrik\",\n  \"Please provide the property title\": \"Vänligen ange fastighetens titel\",\n  \"Code\": \"Kod\",\n  \"Please provide the property name\": \"Ange fastighetens namn\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Egenskapskoden ska börja med en latisk bokstav kan bara innehålla latinska bokstäver samt siffror\",\n  \"Type\": \"Typ\",\n  \"Select\": \"Välj\",\n  \"String\": \"Sträng\",\n  \"Checkbox\": \"Kryssruta\",\n  \"Dropdown\": \"Rullgardinsmeny\",\n  \"Please select the property type\": \"Välj fastighetstyp\",\n  \"Default\": \"Standard\",\n  \"Options\": \"Alternativ\",\n  \"Define a Snippet Partial\": \"Definiera en Snippet Partial\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Nyckeln: %s, i Rullgardinsmenyn är ogiltig. Alternativnycklarna kan bara innehålla siffror, latinska bokstäver och karaktärerna _ samt -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Beskrivningen visas i utdragslistan i editorn när ett utdrag läggs till.\",\n  \"Details\": \"Detaljer\"\n}"
  },
  {
    "path": "modules/cms/lang/th/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'ชื่อไฟล์ไม่ถูกต้อง: :name ชื่อไฟล์สามารถใส่ ตัวอักษรภาษาอังกฤษ ตัวเลข และสัญลักษณ์ _-. ตัวอย่างชื่อไฟล์ที่ถูกต้อง: page.htm, page, subdirectory/page',\n    'invalid_property' => 'คุณสมบัติ \\':name\\' ไม่สามารถตั้งค่าได้',\n    'file_already_exists' => 'ไฟล์ \\':name\\' มีอยู่แล้ว',\n    'error_saving' => 'การบันทึกไฟล์ผิดพลาด \\':name\\' กรุณาตรวจสอบสิทธิ์การเขียนไฟล์',\n    'error_creating_directory' => 'การสร้างโฟลเดอร์ผิดพลาด :name. กรุณาตรวจสอบสิทธิ์การเขียนไฟล์',\n    'invalid_file_extension' => 'นามสกุลไฟล์ไม่ถูกต้อง: :invalid นามสกุลที่อนุญาตให้ใช้ได้มีดังนี้: :allowed',\n    'error_deleting' => 'การลบไฟล์แม่แบบผิดพลาด \\':name\\' กรุณาตรวจสอบสิทธิ์การเขียนไฟล์',\n    'delete_success' => 'ลบแม่แบบจำนวน: :count แม่แบบ',\n    'file_name_required' => 'ต้องใส่ช่องชื่อไฟล์',\n    'safe_mode_enabled' => 'โหมดความปลอดภัยกำลังถูกใช้งาน',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'เว็บไซต์',\n      'online' => 'ออนไลน์',\n      'maintenance' => 'กำลังปรับปรุง',\n      'manage_themes' => 'จัดการธีม',\n      'customize_theme' => 'ปรับแก้ธีม',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'ยังไม่ได้เปิดใช้งานธีม',\n      'not_found' => 'ไม่พบธีมที่เปิดใช้งาน',\n    ],\n    'edit' => [\n      'not_set' => 'ธีมที่แก้ไขไม่สามารถตั้งค่าได้',\n      'not_found' => 'หาธีมที่แก้ไขไม่พบ',\n      'not_match' => 'สิ่งที่คุณกำลังพยายามเข้าถึงไม่อยู่ในธีมที่กำลังแก้ไขอยู่ กรุณารีโหลดหน้าเว็บ',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'หาหน้าเว็บ \\':name\\' ไม่พบ',\n    'not_found' => [\n      'label' => 'ไม่พบหน้าเว็บ',\n      'help' => 'หาหน้าเว็บที่ร้องขอไม่พบ',\n    ],\n    'custom_error' => [\n      'label' => 'หน้าเว็บผิดพลาด',\n      'help' => 'ขอโทษครับ, มีบางอย่างผิดพลาดและไม่สามารถแสดงหน้าเว็บได้',\n    ],\n    'menu_label' => 'หน้าเว็บ',\n    'unsaved_label' => 'หน้าเว็บที่ยังไม่บันทึก',\n    'no_list_records' => 'ไม่พบหน้าเว็บ',\n    'new' => 'หน้าใหม่',\n    'invalid_url' => 'รูปแบบ URL ไม่ถูกต้อง, URL ควรเริ่มต้นด้วยเครื่องหมาย / และสามารถมีตัวเลข, ตัวอักษรภาษาอังกฤษและเครื่องหมาย: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'ลบหน้าที่ถูกเลือกไว้?',\n    'delete_confirm_single' => 'ลบหน้านี้?',\n    'no_layout' => '-- ไม่มีโครงร่าง --',\n    'title' => 'หัวเรื่องหน้าเว็บ',\n    'url' => 'URL หน้าเว็บ',\n    'file_name' => 'ชื่อไฟล์หน้าเว็บ',\n  ],\n  'layout' => [\n    'not_found_name' => 'หาโครงร่าง \\':name\\' ไม่พบ',\n    'menu_label' => 'โครงร่าง (Layout)',\n    'unsaved_label' => 'โครงร่างที่ยังไม่บันทึก',\n    'no_list_records' => 'ไม่พบโครงร่าง',\n    'new' => 'โครงร่างใหม่',\n    'delete_confirm_multiple' => 'ลบโครงร่างที่เลือกไว้?',\n    'delete_confirm_single' => 'ลบโครงร่างนี้?',\n  ],\n  'partial' => [\n    'not_found_name' => 'ไม่พบส่วนย่อย \\':name\\'',\n    'invalid_name' => 'ส่วนย่อยชื่อ: :name ไม่ถูกต้อง',\n    'menu_label' => 'ส่วนย่อย',\n    'unsaved_label' => 'ส่วนย่อยที่ยังไม่บันทึก',\n    'no_list_records' => 'ไม่พบส่วนย่อย',\n    'delete_confirm_multiple' => 'ลบส่วนย่อยที่เลือกไว้?',\n    'delete_confirm_single' => 'ลบส่วนย่อยนี้?',\n    'new' => 'ส่วนย่อยใหม่',\n  ],\n  'content' => [\n    'not_found_name' => 'ไม่พบไฟล์เนื้อหา \\':name\\'',\n    'menu_label' => 'เนื้อหา',\n    'unsaved_label' => 'เนื้อหาที่ยังไม่ได้บันทึก',\n    'no_list_records' => 'หาไฟล์เนื้อหาไม่พบ',\n    'delete_confirm_multiple' => 'ลบไฟล์เนื้อหาหรือโฟลเดอร์ที่เลือกไว้?',\n    'delete_confirm_single' => 'ลบไฟล์เนื้อหานี้?',\n    'new' => 'ไฟล์เนื้อหาใหม่',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'ชื่อผู้จัดการ AJAX: :name ไม่ถูกต้อง',\n    'not_found' => 'หาผู้จัดการ AJAX \\':name\\' ไม่พบ',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'เพิ่ม',\n    'search' => 'ค้นหา...',\n  ],\n  'editor' => [\n    'settings' => 'การตั้งค่า',\n    'title' => 'หัวเรื่อง',\n    'new_title' => 'หัวเรื่องหน้าใหม่',\n    'url' => 'URL',\n    'filename' => 'ชื่อไฟล์',\n    'layout' => 'โครงร่าง',\n    'description' => 'รายละเอียด',\n    'preview' => 'ดูตัวอย่าง',\n    'meta' => 'ข้อมูลย่อย',\n    'meta_title' => 'หัวเรื่อง',\n    'meta_description' => 'รายละเอียด',\n    'markup' => 'Markup',\n    'code' => 'Code',\n    'content' => 'เนื้อหา',\n    'hidden' => 'ซ่อน',\n    'hidden_comment' => 'เพจที่ถูกซ่อนสามารถเข้าถึงได้โดยผู้ใช้หลังบ้านที่ล็อกอินเท่านั้น',\n    'enter_fullscreen' => 'เข้าสู่โหมดเต็มหน้าจอ',\n    'exit_fullscreen' => 'ออกโหมดเต็มหน้าจอ',\n    'open_searchbox' => 'เปิดกล่องค้นหา',\n    'open_replacebox' => 'เปลี่ยนกล่องแทนที่',\n    'reset' => 'ตั้งค่าเริ่มต้น',\n    'reset_confirm' => 'คุณแน่ใจว่าต้องการตั้งค่าเริ่มต้นไฟล์นี้ตามข้อมูลที่อยู่ในระบบไฟล์? ไฟล์นี้จะถูกเขียนทับด้วยไฟล์ที่อยู่ในระบบไฟล์',\n    'resetting' => 'กำลังตั้งค่าเริ่มต้น',\n  ],\n  'asset' => [\n    'menu_label' => 'สินทรัพย์',\n    'unsaved_label' => 'สินทรัพย์ที่ยังไม่ได้บันทึก',\n    'drop_down_add_title' => 'เพิ่ม...',\n    'drop_down_operation_title' => 'การทำงาน...',\n    'upload_files' => 'อัพโหลดไฟล์',\n    'create_file' => 'สร้างไฟล์',\n    'create_directory' => 'สร้างโฟลเดอร์',\n    'directory_popup_title' => 'โฟลเดอร์ใหม่',\n    'directory_name' => 'ชื่อโฟลเดอร์',\n    'rename' => 'เปลี่ยนชื่อ',\n    'delete' => 'ลบ',\n    'move' => 'ย้าย',\n    'select' => 'เลือก',\n    'new' => 'ไฟล์ใหม่',\n    'rename_popup_title' => 'เปลี่ยนชื่อ',\n    'rename_new_name' => 'ชื่อใหม่',\n    'invalid_path' => 'path สามารถใส่ได้เฉพาะ ตัวเลข ตัวอักษรภาษาอังกฤษ ช่องว่าง และสัญลักษณ์ต่อไปนี้: ._-/',\n    'error_deleting_file' => 'การลบไฟล์ :name ผิดพลาด',\n    'error_deleting_dir_not_empty' => 'การลบโฟลเดอร์ผิดพลาด :name โฟลเดอร์นี้ไม่ว่างเปล่า',\n    'error_deleting_dir' => 'การลบโฟลเดอร์ :name ผิดพลาด',\n    'invalid_name' => 'ชื่อ สามารถใส่ได้เฉพาะ ตัวเลข ตัวอักษรภาษาอังกฤษ ช่องว่าง และสัญลักษณ์ต่อไปนี้: ._-',\n    'original_not_found' => 'หาไฟล์หรือโฟลเดอร์ต้นทางไม่พบ',\n    'already_exists' => 'ชื่อไฟล์หรือโฟลเดอร์นี้มีอยู่แล้ว',\n    'error_renaming' => 'การเปลี่ยนชื่อไฟล์หรือโฟลเดอร์ผิดพลาด',\n    'name_cant_be_empty' => 'ให้ชื่อว่างเปล่าไม่ได้',\n    'too_large' => 'ไฟล์ที่ต้องการอัพโหลดใหญ่เกินไป ขนาดไฟล์สูงสุดที่อนุญาตคือ :max_size',\n    'type_not_allowed' => 'อนุญาตเฉพาะประเภทไฟล์ต่อไปนี้: :allowed_types',\n    'file_not_valid' => 'ไฟล์ไม่ถูกต้อง',\n    'error_uploading_file' => 'อัพโหลดไฟล์ \\':name\\' ผิดพลาด: :error',\n    'move_please_select' => 'กรุณาเลือก',\n    'move_destination' => 'โฟลเดอร์ปลายทาง',\n    'move_popup_title' => 'ย้ายสินทรัพย์',\n    'move_button' => 'ย้าย',\n    'selected_files_not_found' => 'ไม่พบไฟล์ที่เลือกไว้',\n    'select_destination_dir' => 'กรุณาเลือกโฟลเดอร์ปลายทาง',\n    'destination_not_found' => 'ไม่พบโฟลเดอร์ปลายทาง',\n    'error_moving_file' => 'การย้ายไฟล์ :file ผิดพลาด',\n    'error_moving_directory' => 'การย้ายโฟลเดอร์ :dir ผิดพลาด',\n    'error_deleting_directory' => 'การลบโฟลเดอร์ต้นทาง :dir ผิดพลาด',\n    'no_list_records' => 'ไม่พบไฟล์',\n    'delete_confirm' => 'ลบไฟล์หรือโฟลเดอร์ที่เลือกไว้?',\n    'path' => 'Path',\n  ],\n  'component' => [\n    'menu_label' => 'ส่วนประกอบ',\n    'invalid_request' => 'แม่แบบไม่สามารถถูกบันทึกเนื่องจากข้อมูลส่วนประกอบไม่ถูกต้อง',\n    'no_records' => 'ไม่พบส่วนประกอบ',\n    'not_found' => 'หาส่วนประกอบ \\':name\\' ไม่พบ',\n    'method_not_found' => 'ส่วนประกอบ \\':name\\' ไม่มี method ชื่อ \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'ไม่รู้จักประเภทแม่แบบ',\n    'not_found' => 'ไม่พบแม่แบบ',\n    'saved' => 'บันทึกแม่แบบแล้ว',\n    'no_list_records' => 'ไม่พบข้อมูล',\n    'delete_confirm' => 'ลบแม่แบบที่เลือกไว้?',\n    'order_by' => 'เรียงลำดับโดย',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'จัดการไฟล์เนื้อหาเว็บไซต์',\n    'manage_assets' => 'จัดการสินทรัพย์ของเว็บไซต์ - รูปภาพ, ไฟล์ JavaScript, ไฟล์ CSS',\n    'manage_pages' => 'สร้าง, แก้ไข และลบ หน้าเว็บไซต์',\n    'manage_layouts' => 'สร้าง, แก้ไข และลบ โครงร่าง',\n    'manage_partials' => 'สร้าง, แก้ไข และลบ ส่วนย่อย',\n    'manage_themes' => 'เปิด, ปิดการใช้งาน และปรับแต่งค่า ธีม',\n    'manage_theme_options' => 'ปรับแต่งค่าตัวเลือกต่างๆ สำหรับธีมที่ใช้งานอยู่',\n  ],\n  'theme_log' => [\n    'hint' => 'บันทึกนี้แสดงการเปลี่ยนแปลงที่เกี่ยวกับธีมโดยผู้ดูแลระบบในส่วนหน้าเว็บหลังบ้าน',\n    'menu_label' => 'บันทึกธีม',\n    'menu_description' => 'ดูการเปลี่ยนแปลงของธีมที่กำลังใช้งานอยู่',\n    'empty_link' => 'ลบบันทึกธีมทั้งหมด',\n    'empty_loading' => 'กำลังลบบันทึกธีม...',\n    'empty_success' => 'ลบบันทึกธีมเรียบร้อยแล้ว',\n    'return_link' => 'กลับสู่หน้าบันทึกธีม',\n    'id' => 'ไอดี',\n    'id_label' => 'ไอดีบันทึก',\n    'created_at' => 'วันเวลา',\n    'user' => 'ผู้ใช้',\n    'type' => 'ประเภท',\n    'type_create' => 'สร้าง',\n    'type_update' => 'อัพเดท',\n    'type_delete' => 'ลบ',\n    'theme_name' => 'ชื่อธีม',\n    'theme_code' => 'รหัสธีม',\n    'old_template' => 'แม่แบบเก่า',\n    'new_template' => 'แม่แบบใหม่',\n    'template' => 'แม่แบบ (Template)',\n    'diff' => 'การเปลี่ยนแปลง',\n    'old_value' => 'ค่าเก่า',\n    'new_value' => 'ค่าใหม่',\n    'preview_title' => 'Template changes',\n    'template_updated' => 'อัพเดทแม่แบบแล้ว',\n    'template_created' => 'สร้างแม่แบบแล้ว',\n    'template_deleted' => 'ลบแม่แบบแล้ว',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/th.json",
    "content": "{\n  \"Themes\": \"ธีม\",\n  \"Manage Themes\": \"จัดการธีม\",\n  \"Customize Theme\": \"ปรับแก้ธีม\",\n  \"Manage Maintenance Mode\": \"จัดการโหมดการบำรุงรักษา\",\n  \"View Website During Maintenance\": \"ดูเว็บไซต์ระหว่างการบำรุงรักษา\",\n  \"Manage Content\": \"จัดการเนื้อหา\",\n  \"Manage Asset Files\": \"จัดการไฟล์สินทรัพย์\",\n  \"Manage Pages\": \"จัดการเพจ\",\n  \"Manage Layouts\": \"จัดการเค้าโครง\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"ปรับแก้หน้าโหมดการบำรุงรักษา และเลือกการตั้งค่า\",\n  \"Maintenance Mode\": \"โหมดการบำรุงรักษา\",\n  \"Select the page to show when maintenance mode is activated.\": \"เลือกหน้าที่ต้องการให้แสดงเมื่อเปิดใช้งานโหมดการบำรุงรักษา\",\n  \"Enable maintenance mode\": \"เปิดใช้โหมดการบำรุงรักษา\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"โหลดการบำรุงรักษาจะแสดงหน้าบำรุงรักษาสำหรับผู้เยี่ยมชมที่ไม่ได้ลงชื่อเข้าใช้หน้าเว็บหลังบ้าน\",\n  \"Resources\": \"ทรัพยากร\",\n  \"Reference assets and variables included on this page.\": \"เนื้อหาอ้างอิงและตัวแปรที่รวมอยู่ในหน้านี้\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"ไฟล์ JavaScript ในโฟลเดอร์ asset/js\",\n  \"LESS\": \"น้อย\",\n  \"LESS file(s) in the assets/less folder\": \"LESS ไฟล์ในโฟลเดอร์ทรัพย์สิน/น้อย\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"ไฟล์ SCSS ในโฟลเดอร์ asset/scss\",\n  \"Variables\": \"ตัวแปร\",\n  \"Page variables name(s) and value(s)\": \"ชื่อตัวแปรหน้าและค่า\",\n  \"Headers\": \"ส่วนหัว\",\n  \"Page header name(s) and value(s)\": \"ชื่อส่วนหัวของหน้าและค่า\",\n  \"Site Picker\": \"เครื่องมือเลือกไซต์\",\n  \"Displays links for selecting a different site.\": \"แสดงลิงค์สำหรับเลือกไซต์อื่น\",\n  \"Unknown component\": \"องค์ประกอบที่ไม่รู้จัก\",\n  \"View Bag\": \"ดูกระเป๋า\",\n  \"Stores custom template properties.\": \"จัดเก็บคุณสมบัติของเทมเพลตแบบกำหนดเอง\",\n  \"By :name\": \"โดย :name\",\n  \"The theme ':name' is not found.\": \"ไม่พบธีม ':name'\",\n  \"Manage the front-end theme and customization options.\": \"จัดการธีมหน้าบ้าน และตัวเลือกในการปรับแก้อื่นๆ\",\n  \"Site Theme\": \"ธีมหน้าบ้าน (Theme)\",\n  \"Properties\": \"คุณสมบัติ\",\n  \"Publish\": \"เผยแพร่\",\n  \"Advanced\": \"ขั้นสูง\",\n  \"Name\": \"ชื่อ\",\n  \"New theme name\": \"ชื่อธีมใหม่\",\n  \"Author Name\": \"ผู้สร้าง\",\n  \"Person or company name\": \"ชื่อบุคคลหรือบริษัท\",\n  \"Directory Name\": \"ชื่อโฟลเดอร์\",\n  \"The destination theme directory\": \"ชื่อโฟลเดอร์ของธีม\",\n  \"Description\": \"รายละเอียด\",\n  \"Theme description\": \"รายละเอียดธีม\",\n  \"Homepage\": \"โฮมเพจ\",\n  \"Website URL\": \"URL ของเว็บไซต์\",\n  \"Author Code\": \"รหัสผู้แต่ง\",\n  \"A unique code for the author used for distribution\": \"รหัสเฉพาะสำหรับผู้เขียนที่ใช้สำหรับการแจกจ่าย\",\n  \"Theme Code\": \"รหัส\",\n  \"A unique code for this theme used for distribution\": \"รหัสที่ไม่ซ้ำสำหรับเอาธีมไปแจกจ่าย\",\n  \"Parent Theme\": \"ธีมผู้ปกครอง\",\n  \"Database Mode\": \"โหมดฐานข้อมูล\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"บันทึกการเปลี่ยนแปลงธีมนี้ในฐานข้อมูลแทนระบบไฟล์\",\n  \"-- no parent --\": \"-- ไม่มีผู้ปกครอง --\",\n  \"Theme\": \"ธีม\",\n  \"Folders\": \"โฟลเดอร์\",\n  \"Please select the theme folders you would like to export\": \"กรุณาเลือกโฟลเดอร์ของธีมที่ท่านต้องการเอ็กซพอร์ต\",\n  \"Theme archive file\": \"ไฟล์ธีม\",\n  \"Overwrite existing files\": \"เขียนทับไฟล์ที่มีอยู่แล้ว\",\n  \"Untick this box to only import new files\": \"เอาติ๊กออกจะอิมพอร์ทเฉพาะไฟล์ใหม่\",\n  \"Please select the theme folders you would like to import\": \"กรุณาเลือกโฟลเดอร์ของธีมที่คุณต้องการอิมพอร์ท\",\n  \"Activate\": \"ใช้งานอยู่\",\n  \"Customize\": \"ปรับแก้\",\n  \"Duplicate\": \"ทำซ้ำ\",\n  \"Duplicate Theme\": \"ทำซ้ำธีม\",\n  \"Theme Duplicated!\": \"ทำซ้ำธีมแล้ว!\",\n  \"Manage\": \"จัดการ\",\n  \"Manage Theme\": \"จัดการธีม\",\n  \"Edit Properties\": \"แก้ไขคุณสมบัติ\",\n  \"Save Properties\": \"บันทึกคุณสมบัติ\",\n  \"Import\": \"อิมพอร์ต\",\n  \"Import Theme\": \"อิมพอร์ตธีม\",\n  \"Theme Imported!\": \"อิมพอร์ดธีมแล้ว!\",\n  \"Export\": \"เอ็กซพอร์ต\",\n  \"Export Theme\": \"เอ็กซพอร์ตธีม\",\n  \"Delete\": \"ลบ\",\n  \"Delete this theme? It cannot be undone!\": \"ลบธีมนี้? ไม่สามารถย้อนกลับได้!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"ไม่สามารถลบธีมที่กำลังใช้งานอยู่, เปิดการใช้งานธีมอื่นก่อนลบ\",\n  \"Theme deleted!\": \"ลบธีมแล้ว!\",\n  \"Create Theme\": \"สร้างธีม\",\n  \"Create\": \"สร้าง\",\n  \"Create a New Blank Theme\": \"สร้างธีมใหม่\",\n  \"Theme Created!\": \"สร้างธีมแล้ว!\",\n  \"Please specify a name for the theme.\": \"กรุณากำหนดชื่อธีม\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"ชื่อโฟลเดอร์ธีม สามารถใช้ตัวเลข อักษรภาษาอังกฤษและเครื่องหมาย: _-\",\n  \"Desired theme directory already exists.\": \"ชื่อโฟลเดอร์ธีมมีอยู่แล้ว\",\n  \"Theme directory\": \"ชื่อโฟลเดอร์ธีม\",\n  \"Provide a new directory name for the duplicated theme.\": \"กำหนดโฟลเดอร์ใหม่สำหรับธีมที่จะทำซ้ำ\",\n  \"Find More Themes\": \"หาธีมอื่นๆ\",\n  \"Saving Theme...\": \"กำลังบันทึกธีม...\",\n  \"Return to Themes List\": \"กลับสู่หน้ารายการธีม\",\n  \"No themes found\": \"ไม่พบธีม\",\n  \"Seed Theme\": \"ธีมเมล็ดพันธุ์\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"จัดชุดรูปแบบที่ระบุด้วยพิมพ์เขียว การแปล และข้อมูล\",\n  \"Theme Seeded!\": \"ธีมซี้ด!\",\n  \"Select Page Link\": \"เลือกลิงค์หน้า\",\n  \"Search all references...\": \"ค้นหาข้อมูลอ้างอิงทั้งหมด...\",\n  \"CMS Page\": \"หน้าเว็บ CMS\",\n  \"Link\": \"ลิงค์\",\n  \"Please select a CMS page\": \"กรุณาเลือกหน้า CMS\",\n  \"Please select a page reference\": \"โปรดเลือกการอ้างอิงหน้า\",\n  \"Please enter a valid URL\": \"โปรดป้อน URL ที่ถูกต้อง\",\n  \"Delete Theme\": \"ลบธีม\",\n  \"Activate Theme\": \"เปิดใช้งานธีม\",\n  \"Manage Partials\": \"จัดการบางส่วน\",\n  \"No Title\": \"ไม่มีชื่อเรื่อง\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"ชื่อที่ไม่ซ้ำที่กำหนดให้กับส่วนประกอบนี้สำหรับใช้ในโค้ดหน้าเว็บหรือโครงร่าง\",\n  \"Alias\": \"นามแฝง\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"ต้องใส่นามแฝงส่วนประกอบ และสามารถใส่ได้เฉพาะ ตัวอักษรภาษาอังกฤษ ตัวเลข และเครื่องหมาย _  นามแฝงควรเริ่มต้นด้วยตัวอักษรภาษาอังกฤษ\",\n  \"Unnamed\": \"ไม่มีชื่อ\",\n  \"No description provided\": \"ไม่มีรายละเอียดมาด้วย\",\n  \"No snippets found\": \"ไม่พบตัวอย่าง\",\n  \"Search...\": \"ค้นหา...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"ตัวอย่างรหัสที่ร้องขอ :code ไม่พบในธีม\",\n  \"Snippet\": \"ตัวอย่าง\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"ป้อนรหัสเพื่อทำให้ส่วนนี้พร้อมใช้งานเป็นส่วนย่อยในเครื่องมือแก้ไขเนื้อหา\",\n  \"Please enter the snippet code\": \"โปรดป้อนรหัสตัวอย่าง\",\n  \"Snippet Code\": \"รหัสตัวอย่าง\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"ชื่อจะแสดงในรายการส่วนย่อยในตัวแก้ไขเมื่อมีการเพิ่มส่วนย่อย\",\n  \"Please enter the snippet name\": \"โปรดป้อนชื่อตัวอย่าง\",\n  \"Property Title\": \"ชื่อเรื่องทรัพย์สิน\",\n  \"Please provide the property title\": \"โปรดระบุชื่อสถานที่ให้บริการ\",\n  \"Code\": \"รหัส\",\n  \"Please provide the property name\": \"กรุณาระบุชื่อสถานที่ให้บริการ\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"รหัสคุณสมบัติควรขึ้นต้นด้วยตัวอักษรละตินและสามารถมีได้เฉพาะตัวอักษรละติน ตัวเลข และขีดล่าง\",\n  \"Type\": \"พิมพ์\",\n  \"Select\": \"เลือก\",\n  \"String\": \"สตริง\",\n  \"Checkbox\": \"ช่องทำเครื่องหมาย\",\n  \"Dropdown\": \"หล่นลง\",\n  \"Please select the property type\": \"กรุณาเลือกประเภททรัพย์สิน\",\n  \"Default\": \"ค่าเริ่มต้น\",\n  \"Options\": \"ตัวเลือก\",\n  \"Define a Snippet Partial\": \"กำหนด Snippet บางส่วน\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"คีย์ตัวเลือกแบบเลื่อนลงไม่ถูกต้อง: :key ปุ่มตัวเลือกมีได้เฉพาะตัวเลข ตัวอักษรละติน และอักขระ _ และ -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"คำอธิบายจะแสดงในรายการส่วนย่อยในเครื่องมือแก้ไขเมื่อมีการเพิ่มส่วนย่อย\",\n  \"Details\": \"รายละเอียด\"\n}"
  },
  {
    "path": "modules/cms/lang/tr/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Hatalı dosya adı: :name. Dosya isimleri sadece alfanümerik semboller, alt çizgiler, tire ve nokta içerebilir. Bazı doğru dosya adı örnekleri: sayfa.htm, sayfa, altdizin/sayfa',\n    'invalid_property' => '\":name\" özelliği ayarlanamadı',\n    'file_already_exists' => '\":name\" isimli dosya mevcut.',\n    'error_saving' => '\":name\" kaydedilirken hatayla oluştu.',\n    'error_creating_directory' => ':name klasörü oluşturulurken hata oluştu',\n    'invalid_file_extension' => 'Hatalı dosya uzantısı: :invalid. İzin verilen uzantılar: :allowed.',\n    'error_deleting' => '\":name\" şablon dosyası silinirken hatayla karşılaşıldı.',\n    'delete_success' => ':count şablon başarıyla silindi.',\n    'file_name_required' => 'Dosya adı alanı gereklidir.',\n    'safe_mode_enabled' => 'Güvenli mod şuan aktif.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Website',\n      'online' => 'yayında',\n      'maintenance' => 'bakım modunda',\n      'manage_themes' => 'Temaları yönet',\n      'customize_theme' => 'Tema özelleştir',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Aktif tema belirtilmedi.',\n      'not_found' => 'Aktif tema bulunamadı.',\n    ],\n    'edit' => [\n      'not_set' => 'Düzenlenecek tema belirtilmedi.',\n      'not_found' => 'Düzenlenecek tema bulunamadı.',\n      'not_match' => 'Ulaşmaya çalıştığınız nesne düzenlenecek temaya ait değil. Lütfen sayfayı yenileyin.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => '\\':name\\' sayfası bulunamadı',\n    'not_found' => [\n      'label' => 'Sayfa bulunamadı',\n      'help' => 'İstenilen sayfa bulunamadı.',\n    ],\n    'custom_error' => [\n      'label' => 'Sayfa hatası',\n      'help' => 'Üzgünüz, bir şeyler ters gitti ve sayfa görüntülenemiyor.',\n    ],\n    'menu_label' => 'Sayfalar',\n    'unsaved_label' => 'Kaydedilmemiş sayfa(lar)',\n    'no_list_records' => 'Hiç sayfa yok.',\n    'new' => 'Sayfa oluştur',\n    'invalid_url' => 'Hatalı URL formatı. URL eğik çizgi ile başlamalı ve sayı, Latin harfleri ve aşağıdaki sembolleri içerebilir: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Seçili sayfaları silmek istediğinize emin misiniz?',\n    'delete_confirm_single' => 'Bu sayfayı silmek istediğinize emin misiniz?',\n    'no_layout' => '-- şablon yok --',\n    'title' => 'Sayfa başlığı',\n    'url' => 'Sayfa URL',\n    'file_name' => 'Sayfa dosyası adı',\n  ],\n  'layout' => [\n    'not_found_name' => '\\':name\\' isimli şablon bulunamadı',\n    'menu_label' => 'Şablonlar',\n    'unsaved_label' => 'Kaydedilmemiş şablon(lar)',\n    'no_list_records' => 'Şablon bulunamadı',\n    'new' => 'Şablon oluştur',\n    'delete_confirm_multiple' => 'Seçili şablonları silmek istediğinize emin misiniz?',\n    'delete_confirm_single' => 'Seçili şablonu silmek istediğinize emin misiniz?',\n  ],\n  'partial' => [\n    'not_found_name' => '\\':name\\' bölümü bulunamadı.',\n    'invalid_name' => 'Hatalı bölüm adı: :name.',\n    'menu_label' => 'Bölümler',\n    'unsaved_label' => 'Kaydedilmemiş bölüm(ler)',\n    'no_list_records' => 'Bölüm bulunamadı.',\n    'delete_confirm_multiple' => 'Seçili bölümleri silmek istediğinize emin misiniz?',\n    'delete_confirm_single' => 'Bu bölümü silmek istediğinize emin misiniz?',\n    'new' => 'Bölüm Oluştur',\n  ],\n  'content' => [\n    'not_found_name' => '\\':name\\' isminde içerik dosyası bulunamadı.',\n    'menu_label' => 'İçerik',\n    'unsaved_label' => 'Kaydedilmemiş içerik',\n    'no_list_records' => 'İçerik dosyası bulunamadı.',\n    'delete_confirm_multiple' => 'Seçili içerik dosyaları veya klasörlerini silmek istediğinize emin misiniz?',\n    'delete_confirm_single' => 'Bu içerik dosyasını silmek istediğinize emin misiniz?',\n    'new' => 'Yeni İçerik',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Hatalı AJAX işleyici adı: :name.',\n    'not_found' => '\\':name\\' isimli AJAX işleyici bulunamadı.',\n  ],\n  'cms' => [\n    'menu_label' => 'Tasarım Ayarları',\n  ],\n  'sidebar' => [\n    'add' => 'Ekle',\n    'search' => 'Ara...',\n  ],\n  'editor' => [\n    'settings' => 'Ayarlar',\n    'title' => 'Başlık',\n    'new_title' => 'Yeni sayfa başlığı',\n    'url' => 'URL',\n    'filename' => 'Dosya Adı',\n    'layout' => 'Düzen',\n    'description' => 'Tanım',\n    'preview' => 'Önizleme',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Başlık',\n    'meta_description' => 'Meta Tanım',\n    'markup' => 'Biçimlendirme',\n    'code' => 'Kod',\n    'content' => 'İçerik',\n    'hidden' => 'Gizli',\n    'hidden_comment' => 'Gizli sayfalara yalnızca Yönetim Paneline giriş yapmış kullanıcılar erişilebilir.',\n    'enter_fullscreen' => 'Tam Ekran moduna geç',\n    'exit_fullscreen' => 'Tam Ekran modundan çık',\n    'open_searchbox' => 'Arama kutusunu aç',\n    'open_replacebox' => 'Düzenleme kutusunu aç',\n  ],\n  'asset' => [\n    'menu_label' => 'Dosyalar',\n    'unsaved_label' => 'Kaydedilmemiş dosya(lar)',\n    'drop_down_add_title' => 'Ekle...',\n    'drop_down_operation_title' => 'İşlemler...',\n    'upload_files' => 'Dosya(lar) yükle',\n    'create_file' => 'Dosya oluştur',\n    'create_directory' => 'Klasör oluştur',\n    'directory_popup_title' => 'Yeni klasör',\n    'directory_name' => 'Klasör ismi',\n    'rename' => 'Yeniden isimlendir',\n    'delete' => 'Sil',\n    'move' => 'Taşı',\n    'select' => 'Seç',\n    'new' => 'Yeni dosya',\n    'rename_popup_title' => 'Yeniden isimlendir',\n    'rename_new_name' => 'Yeni isim',\n    'invalid_path' => 'Yol sadece sayı, Latin harfleri, boşluk ve şu sembolleri içerebilir: ._-/',\n    'error_deleting_file' => ':name dosyası silinirken hatayla karşılaşıldı.',\n    'error_deleting_dir_not_empty' => ':name klasörü silinemedi. Klasör boş değil.',\n    'error_deleting_dir' => ':name dosyası silinirken hatayla karşılaşıldı.',\n    'invalid_name' => 'İsim sadece sayı, Latin harfleri, boşluk ve şu sembolleri içerebilir: ._-',\n    'original_not_found' => 'Orjinal dosya veya dizin bulunamadı',\n    'already_exists' => 'Bu isimde dosya veya dizin zaten var',\n    'error_renaming' => 'Dosya veya dizin ismi düzenlenemedi',\n    'name_cant_be_empty' => 'İsim alanı boş bırakılamaz.',\n    'too_large' => 'Yüklenen dosya çok büyük. İzin verilen maksimum boyut :max_size',\n    'type_not_allowed' => 'İzin verilen dosya tipleri: :allowed_types',\n    'file_not_valid' => 'Dosya geçerli değil',\n    'error_uploading_file' => '\":name\" yüklenirken hatayla karşılaşıldı: :error',\n    'move_please_select' => 'lütfen seçiniz',\n    'move_destination' => 'Hedef klasör',\n    'move_popup_title' => 'Assets\\'i taşı',\n    'move_button' => 'Taşı',\n    'selected_files_not_found' => 'Seçilen dosyalar bulunamadı.',\n    'select_destination_dir' => 'Lütfen hedef klasör seçiniz',\n    'destination_not_found' => 'Hedef klasör bulunamadı',\n    'error_moving_file' => ':file dosyası taşınırken hatayla karşılaşıldı',\n    'error_moving_directory' => ':dir klasörü taşınırken hatayla karşılaşıldı',\n    'error_deleting_directory' => ':dir klasörü silinirken hatayla karşılaşıldı',\n    'no_list_records' => 'Dosya bulunamadı',\n    'delete_confirm' => 'Seçilen dosyalar veya dizinler silinsin mi?',\n    'path' => 'Yol',\n  ],\n  'component' => [\n    'menu_label' => 'Bileşenler',\n    'invalid_request' => 'Şablonda hatalı bileşen verisi olduğu için kaydedilemedi.',\n    'no_records' => 'Bileşen bulunamadı.',\n    'not_found' => '\\':name\\' isimli bileşen bulunamadı.',\n    'method_not_found' => '\\':name\\' isimli bileşen \\':method\\'unu içermiyor.',\n  ],\n  'template' => [\n    'invalid_type' => 'Hatalı şablon tipi.',\n    'not_found' => 'İstenilen şablon bulunamadı.',\n    'saved' => 'Şablon başarıyla kaydedildi.',\n    'no_list_records' => 'Kayıt bulunamadı',\n    'delete_confirm' => 'Seçilen şablonlar silinsin mi?',\n    'order_by' => 'Sırala',\n  ],\n  'permissions' => [\n    'name' => 'CMS Sistemi',\n    'manage_content' => 'İçerikleri düzenleyebilsin',\n    'manage_assets' => 'Dosyaları düzenleyebilsin',\n    'manage_pages' => 'Sayfaları düzenleyebilsin',\n    'manage_layouts' => 'Şablonları düzenleyebilsin',\n    'manage_partials' => 'Parça Kodları düzenleyebilsin',\n    'manage_themes' => 'Temaları düzenleyebilsin',\n    'manage_theme_options' => 'Aktif tema için özelleştirme seçeneklerini yapılandırın',\n  ],\n  'theme_log' => [\n    'hint' => 'Bu kayıtlar, backend yöneticileri tarafından temada yapılan değişiklikleri görüntüler.',\n    'menu_label' => 'Tema log',\n    'menu_description' => 'Aktif temada yapılan değişiklikleri görüntüleyin.',\n    'empty_link' => 'Tema loglarını temizle',\n    'empty_loading' => 'Tema logları temizleniyor...',\n    'empty_success' => 'Tema log temizlendi',\n    'return_link' => 'Tema loglarına dön',\n    'id' => 'ID',\n    'id_label' => 'Log ID',\n    'created_at' => 'Tarih ve Saat',\n    'user' => 'Kişi',\n    'type' => 'Tipi',\n    'type_create' => 'Oluştur',\n    'type_update' => 'Güncelle',\n    'type_delete' => 'Sil',\n    'theme_name' => 'Tema',\n    'theme_code' => 'Tema kodu',\n    'old_template' => 'Şablon (Eski)',\n    'new_template' => 'Şablon (Yeni)',\n    'template' => 'Şablon',\n    'diff' => 'Değişiklikler',\n    'old_value' => 'Eski değer',\n    'new_value' => 'Yeni değer',\n    'preview_title' => 'Şablon değişiklikleri',\n    'template_updated' => 'Şablon güncellendi',\n    'template_created' => 'Şablon oluşturuldu',\n    'template_deleted' => 'Şablon silindi',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/tr.json",
    "content": "{\n  \"Themes\": \"Temalar\",\n  \"Manage Themes\": \"Temaları Yönet\",\n  \"Customize Theme\": \"Temayı Özelleştir\",\n  \"Manage Maintenance Mode\": \"Bakım Modunu Yönet\",\n  \"View Website During Maintenance\": \"Bakım Sırasında Web Sitesini Görüntüle\",\n  \"Manage Content\": \"İçeriği Yönet\",\n  \"Manage Asset Files\": \"Varlık Dosyalarını Yönet\",\n  \"Manage Pages\": \"Sayfaları yönet\",\n  \"Manage Layouts\": \"Düzenleri Yönet\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Bakım modu ayarlarını düzenleyip bakım sayfasını yapılandırabilirsiniz.\",\n  \"Maintenance Mode\": \"Bakım modu\",\n  \"Select the page to show when maintenance mode is activated.\": \"Aktifleştirildiğinde, web sitesi ziyaretçileri aşağıdaki seçtiğiniz sayfayı görecektir.\",\n  \"Enable maintenance mode\": \"Bakım modunu aktifleştir\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Bakımda sayfası, yönetim paneli girişi yapmamış tüm ziyaretçilere seçilen bakımda sayfasını gösterir.\",\n  \"Resources\": \"Kaynaklar\",\n  \"Reference assets and variables included on this page.\": \"Bu sayfada yer alan referans varlıklar ve değişkenler.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"varlıklar/js klasöründeki JavaScript dosyaları\",\n  \"LESS\": \"AZ\",\n  \"LESS file(s) in the assets/less folder\": \"Varlıklar/daha az klasöründeki KÜÇÜK dosya(lar)\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"varlıklar/scss klasöründeki SCSS dosyaları\",\n  \"Variables\": \"Değişkenler\",\n  \"Page variables name(s) and value(s)\": \"Sayfa değişkenleri adları ve değerleri\",\n  \"Headers\": \"Başlıklar\",\n  \"Page header name(s) and value(s)\": \"Sayfa başlığı adları ve değerleri\",\n  \"Site Picker\": \"Site Seçici\",\n  \"Displays links for selecting a different site.\": \"Farklı bir site seçmek için bağlantıları görüntüler.\",\n  \"Unknown component\": \"Bilinmeyen bileşen\",\n  \"View Bag\": \"Çantayı Gör\",\n  \"Stores custom template properties.\": \"Özel şablon özelliklerini depolar.\",\n  \"By :name\": \":name ile filtrele\",\n  \"The theme ':name' is not found.\": \"':name' isimli tema bulunamadı.\",\n  \"Manage the front-end theme and customization options.\": \"Yüklü temalar listesini önizleyebilir, bir tema seçip aktifleştirebilirsiniz.\",\n  \"Site Theme\": \"Temalar\",\n  \"Properties\": \"Özellikler\",\n  \"Publish\": \"Yayınla\",\n  \"Advanced\": \"Gelişmiş\",\n  \"Name\": \"İsim\",\n  \"New theme name\": \"Yeni tema ismi\",\n  \"Author Name\": \"Yazar\",\n  \"Person or company name\": \"Kişi yada şirket ismi\",\n  \"Directory Name\": \"Klasör ismi\",\n  \"The destination theme directory\": \"Hedef tema dizini\",\n  \"Description\": \"Açıklama\",\n  \"Theme description\": \"Tema açıklaması\",\n  \"Homepage\": \"Anasayfa\",\n  \"Website URL\": \"Anasayfa Adresi(URL)\",\n  \"Author Code\": \"Yazar Kodu\",\n  \"A unique code for the author used for distribution\": \"Dağıtım için kullanılan yazar için benzersiz bir kod\",\n  \"Theme Code\": \"Kod\",\n  \"A unique code for this theme used for distribution\": \"Temanın dağıtımında kullanılmak üzere benzersiz bir kod.\",\n  \"Parent Theme\": \"Ana Tema\",\n  \"Database Mode\": \"Veritabanı Modu\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Bu temada yapılan değişiklikleri dosya sistemi yerine veritabanına kaydedin\",\n  \"-- no parent --\": \"-- ebeveyn yok --\",\n  \"Theme\": \"Tema\",\n  \"Folders\": \"Klasörler\",\n  \"Please select the theme folders you would like to export\": \"Lütfen dışa aktarmak istediğiniz tema klasörlerini seçiniz\",\n  \"Theme archive file\": \"Tema arşiv dosyası\",\n  \"Overwrite existing files\": \"Mevcut dosyaların üstüne yaz\",\n  \"Untick this box to only import new files\": \"Sadece yeni dosyaları almak için bu kutucuğu boşaltın\",\n  \"Please select the theme folders you would like to import\": \"Lütfen içe aktarmak istediğiniz tema klasörlerini seçiniz.\",\n  \"Activate\": \"Aktifleştir\",\n  \"Customize\": \"Düzenle\",\n  \"Duplicate\": \"Kopyala\",\n  \"Duplicate Theme\": \"Temayı kopyala\",\n  \"Theme Duplicated!\": \"Tema başarıyla kopyalandı!\",\n  \"Manage\": \"Yönet\",\n  \"Manage Theme\": \"Temayı yönet\",\n  \"Edit Properties\": \"Özellikleri düzenle\",\n  \"Save Properties\": \"Özellikleri kaydet\",\n  \"Import\": \"İçe aktar\",\n  \"Import Theme\": \"Temayı içe aktar\",\n  \"Theme Imported!\": \"Tema başarıyla içe aktarıldı!\",\n  \"Export\": \"Dışa aktar\",\n  \"Export Theme\": \"Temayı dışa aktar\",\n  \"Delete\": \"Sil\",\n  \"Delete this theme? It cannot be undone!\": \"Bu temayı silmek istediniğize emin misiniz? Bu işlem geri alınamaz!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Aktif tema silinemez. Lütfen başka bir temayı aktif tema olarak seçiniz.\",\n  \"Theme deleted!\": \"Tema başarıyla silindi!\",\n  \"Create Theme\": \"Tema oluştur\",\n  \"Create\": \"Oluştur\",\n  \"Create a New Blank Theme\": \"Yeni boş bir tema oluştur\",\n  \"Theme Created!\": \"Tema başarıyla oluşturuldu!\",\n  \"Please specify a name for the theme.\": \"Please specify a name for the theme.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"İsim sadece sayı, latin harfleri ve şu sembolleri içerebilir: _- \",\n  \"Desired theme directory already exists.\": \"İstenen tema dizini zaten mevcut.\",\n  \"Theme directory\": \"Tema dizini\",\n  \"Provide a new directory name for the duplicated theme.\": \"Kopyalanacak tema için yeni bir tema dizini giriniz.\",\n  \"Find More Themes\": \"Daha fazla tema bulun\",\n  \"Saving Theme...\": \"Tema kaydediliyor...\",\n  \"Return to Themes List\": \"Tema listesine geri dön\",\n  \"No themes found\": \"tema bulunamadı\",\n  \"Seed Theme\": \"Tohum Teması\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Planlar, çeviriler ve verilerle belirtilen temayı tohumlayın.\",\n  \"Theme Seeded!\": \"Tema Tohumlandı!\",\n  \"Select Page Link\": \"Sayfa Bağlantısını Seçin\",\n  \"Search all references...\": \"Tüm referansları ara...\",\n  \"CMS Page\": \"CMS sayfa\",\n  \"Link\": \"Bağlantı\",\n  \"Please select a CMS page\": \"Lütfen bir CMS sayfası seçin\",\n  \"Please select a page reference\": \"Lütfen bir sayfa referansı seçin\",\n  \"Please enter a valid URL\": \"Lütfen geçerli bir adres girin\",\n  \"Delete Theme\": \"Temayı Sil\",\n  \"Activate Theme\": \"Temayı Etkinleştir\",\n  \"Manage Partials\": \"Kısmi Ürünleri Yönet\",\n  \"No Title\": \"Başlık yok\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Bu bileşen için benzersiz bir isim. Sayfa veya şablonda kullanırken bu isim gerekecektir.\",\n  \"Alias\": \"Takma ad\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Bileşen isimleri gerkelidir ve sadece Latin semboller, sayılar, ve alt çizgi içerebilir. Bileşen ismi ayrıca Latin harfle başlamalı.\",\n  \"Unnamed\": \"İsimsiz\",\n  \"No description provided\": \"Açıklama girilmedi.\",\n  \"No snippets found\": \"Snippet bulunamadı\",\n  \"Search...\": \"Ara...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Tema için :code kodu ile istenilen snippet bulunamadı.\",\n  \"Snippet\": \"Snippet\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Sayfalar eklentisinde snippet olarak kullanabilmek için bir kod tanımlayın.\",\n  \"Please enter the snippet code\": \"Lütfen snippet kodunu girin\",\n  \"Snippet Code\": \"Snippet kodu\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Sol snippet listesinde görüntülenecek ismi girin.\",\n  \"Please enter the snippet name\": \"Lütfen snippet adını girin\",\n  \"Property Title\": \"Property başlığı\",\n  \"Please provide the property title\": \"Lütfen mülkün adını girin\",\n  \"Code\": \"Kod\",\n  \"Please provide the property name\": \"Lütfen mülk adını girin\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Kod sadece latin karakterle başlamalı ve latin karakter veya sayı içermelidir\",\n  \"Type\": \"Tip\",\n  \"Select\": \"Seçme\",\n  \"String\": \"Metin (string)\",\n  \"Checkbox\": \"Seçmeli (checkbox)\",\n  \"Dropdown\": \"Açılır liste (dropdown)\",\n  \"Please select the property type\": \"Lütfen emlak tipini seçin\",\n  \"Default\": \"Ön tanımlı (default)\",\n  \"Options\": \"Seçenekler (options)\",\n  \"Define a Snippet Partial\": \"Parça Parçası Tanımlayın\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Seçenek key i geçersiz: :key. Seçenek keyleri sadece sayı, Latin harfler ve karakter _ ve - içerebilir\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Açıklama, bir parçacık eklendiğinde düzenleyicideki parçacık listesinde görüntülenir.\",\n  \"Details\": \"Detaylar\"\n}"
  },
  {
    "path": "modules/cms/lang/uk/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Помилка в імені файлу: :name. Імена файлів можуть містити тільки латинські букви, цифри, знаки підкреслення і точки. Приклад правильних імен файлів: page.htm, page, subdirectory/page',\n    'invalid_property' => 'Параметр \\':name\\' не можна змінити.',\n    'file_already_exists' => 'Файл \\':name\\' вже існує.',\n    'error_saving' => 'Помилка збереження файлу \\':name\\'. Будь ласка, перевірте права на запис.',\n    'error_creating_directory' => 'Помилка створення директорії :name. Будь ласка, перевірте права на запис.',\n    'invalid_file_extension' => 'Зазначено неправильне розширення файлу: :invalid. Дозволені розширення: :allowed.',\n    'error_deleting' => 'Неможливо видалити файл шаблону \\':name\\'. Будь ласка, перевірте права на запис.',\n    'delete_success' => 'Шаблони були успішно видалені: :count.',\n    'file_name_required' => 'Будь ласка, вкажіть ім\\'я файлу шаблону.',\n    'safe_mode_enabled' => 'Безпечний режим в даний момент включений.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Веб-сайт',\n      'online' => 'Онлайн',\n      'maintenance' => 'В розробці',\n      'manage_themes' => 'Керування темами',\n      'customize_theme' => 'Налаштування теми',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Активна тема не встановлена.',\n      'not_found' => 'Активна тема не знайдена.',\n    ],\n    'edit' => [\n      'not_set' => 'Тема для редагування не встановлена.',\n      'not_found' => 'Тема для редагування не знайдена.',\n      'not_match' => 'Об\\'єкт, який ви намагаєтеся відкрити, не належить редагованої темі. Будь ласка, оновіть сторінку.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Сторінка \\':name\\' не знайдена',\n    'not_found' => [\n      'label' => 'Сторінка не знайдена',\n      'help' => 'Запрошення сторінка не знайдена.',\n    ],\n    'custom_error' => [\n      'label' => 'Помилка на сторінці',\n      'help' => 'На жаль, сторінка не може бути відображена через помилку.',\n    ],\n    'menu_label' => 'Сторінки',\n    'unsaved_label' => 'Незбережена(і) сторінка(и)',\n    'no_list_records' => 'Сторінки не знайденi',\n    'new' => 'Нова сторінка',\n    'invalid_url' => 'Невірний формат адреси. Адреса сторінки повинен починатися зі знака / і може містити цифри, латинські літери, і такі знаки: ._- [] :? | / + * ^ $',\n    'delete_confirm_multiple' => 'Ви дійсно хочете видалити виділені сторінки?',\n    'delete_confirm_single' => 'Ви дійсно хочете видалити цю сторінку?',\n    'no_layout' => '-- без шаблону --',\n    'title' => 'Заголовок сторінки',\n    'url' => 'URL сторінки',\n    'file_name' => 'Файл сторінки',\n  ],\n  'layout' => [\n    'not_found_name' => 'Не вдалося знайти шаблон (layout) з ім\\'ям :name.',\n    'menu_label' => 'Шаблони',\n    'unsaved_label' => 'Незбережений(і) макет(и)',\n    'no_list_records' => 'Шаблони не знайдені',\n    'new' => 'Новий шаблон',\n    'delete_confirm_multiple' => 'Ви дійсно хочете видалити виділені шаблони?',\n    'delete_confirm_single' => 'Ви дійсно хочете видалити цей шаблон?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Не вдалося знайти шаблон (partial) з ім\\'ям :name.',\n    'invalid_name' => 'Помилка в імені шаблону (partial) :name.',\n    'menu_label' => 'Фрагменти',\n    'unsaved_label' => 'Незбережений(і) фрагмент(и)',\n    'no_list_records' => 'Фрагменти не знайдені',\n    'delete_confirm_multiple' => 'Ви дійсно хочете видалити виділені фрагменти?',\n    'delete_confirm_single' => 'Ви дійсно хочете видалити цей фрагмент?',\n    'new' => 'Новий фрагмент',\n  ],\n  'content' => [\n    'not_found_name' => 'Не вдалося знайти файл вмісту (content file): \\':name\\'.',\n    'menu_label' => 'Вміст',\n    'unsaved_label' => 'Незбережені файли',\n    'no_list_records' => 'Файли з вмістом не знайдені',\n    'delete_confirm_multiple' => 'Ви дійсно хочете видалити виділені файли?',\n    'delete_confirm_single' => 'Ви дійсно хочете видалити цей файл?',\n    'new' => 'Новий файл вмісту',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Помилка в імені обробника AJAX: :name.',\n    'not_found' => 'Обробник AJAX не найден: \\':name\\'.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Створити',\n    'search' => 'Пошук...',\n  ],\n  'editor' => [\n    'settings' => 'Налаштування',\n    'title' => 'Заголовок',\n    'new_title' => 'Заголовок сторінки',\n    'url' => 'Адреса',\n    'filename' => 'Ім\\'я файлу',\n    'layout' => 'Шаблон',\n    'description' => 'Опис',\n    'preview' => 'Переглянути',\n    'meta' => 'Метатеги',\n    'meta_title' => 'Заголовок (meta title)',\n    'meta_description' => 'Опис (meta description)',\n    'markup' => 'Шаблон',\n    'code' => 'Код',\n    'content' => 'Зміст',\n    'hidden' => 'Прихована сторінка',\n    'hidden_comment' => 'Приховані сторінки доступні тільки для авторизованих в системі користувачів.',\n    'enter_fullscreen' => 'Увійти в повноекранний режим',\n    'exit_fullscreen' => 'Вийти з повноекранного режиму',\n    'open_searchbox' => 'Відкрити вікно пошуку',\n    'open_replacebox' => 'Відкрито вікно замінити',\n  ],\n  'asset' => [\n    'menu_label' => 'Ресурси',\n    'unsaved_label' => 'Незбережений(і) файл(и)',\n    'drop_down_add_title' => 'Додати...',\n    'drop_down_operation_title' => 'Дія...',\n    'upload_files' => 'Завантажити файли',\n    'create_file' => 'Створити файл',\n    'create_directory' => 'Створити директорію',\n    'directory_popup_title' => 'Нова директорія',\n    'directory_name' => 'Назва директорії',\n    'rename' => 'Перейменувати',\n    'delete' => 'Видалити',\n    'move' => 'Перемістити',\n    'select' => 'Обрати',\n    'new' => 'Новий файл',\n    'rename_popup_title' => 'Перейменувати',\n    'rename_new_name' => 'Нове ім\\'я',\n    'invalid_path' => 'Шлях може містити тільки цифри, латинські літери, пробіли і наступні символи: ._- /',\n    'error_deleting_file' => 'Помилка видалення файлу :name.',\n    'error_deleting_dir_not_empty' => 'Неможливо видалити директорію :name. Директорія містить файли або піддиректорії.',\n    'error_deleting_dir' => 'Помилка видалення директорії:name.',\n    'invalid_name' => 'Назва може містити тільки цифри, латинські літери, пробіли і наступні символи: ._-',\n    'original_not_found' => 'Оригінальний файл або директорія не знайдено',\n    'already_exists' => 'Файл або директорія з таким ім\\'ям вже існує',\n    'error_renaming' => 'Неможливо перейменувати файл або директорію',\n    'name_cant_be_empty' => 'Назва не може бути порожньою',\n    'too_large' => 'Завантажений файл занадто великий. Максимальний допустимий розмір файлу складає :max_size',\n    'type_not_allowed' => 'Дозволені файли лише наступних типів: :allowed_types',\n    'file_not_valid' => 'Файл не може бути збережений',\n    'error_uploading_file' => 'Помилка завантаження файлу \\':name\\': :error',\n    'move_please_select' => 'будь ласка, оберіть директорію',\n    'move_destination' => 'Папка призначення',\n    'move_popup_title' => 'Перемістити файли',\n    'move_button' => 'Перемістити',\n    'selected_files_not_found' => 'Вибрані файли не знайдені',\n    'select_destination_dir' => 'Будь ласка, оберіть директорію',\n    'destination_not_found' => 'Кінцева директорія не знайдена',\n    'error_moving_file' => 'Не вдалося перемістити файл :file',\n    'error_moving_directory' => 'Не вдалося перемістити директорію :dir',\n    'error_deleting_directory' => 'Не вдалося видалити директорію :dir',\n    'no_list_records' => 'Файли не знайдені',\n    'delete_confirm' => 'Видалити обрані файли або каталоги?',\n    'path' => 'Шлях',\n  ],\n  'component' => [\n    'menu_label' => 'Компоненти',\n    'invalid_request' => 'Шаблон не може бути збережений, так як містить пошкоджену інформацію про компоненти.',\n    'no_records' => 'Компоненти не знайдені',\n    'not_found' => 'Компонент \\':name\\' не знайдено.',\n    'method_not_found' => 'Компонент \\':name\\' не містить метод \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Невідомий тип шаблону.',\n    'not_found' => 'Запитаний шаблон не найден.',\n    'saved' => 'Шаблон був успішно збережений.',\n    'no_list_records' => 'Записів не знайдено',\n    'delete_confirm' => 'Видалити вибрані шаблони?',\n    'order_by' => 'Сортувати за',\n  ],\n  'permissions' => [\n    'name' => 'Керування CMS',\n    'manage_content' => 'Керування контентом',\n    'manage_assets' => 'Керування файлами',\n    'manage_pages' => 'Керування сторінками',\n    'manage_layouts' => 'Керування шаблонами',\n    'manage_partials' => 'Керування фрагментами',\n    'manage_themes' => 'Керування темами',\n    'manage_theme_options' => 'Налаштувати поточну тему CMS',\n  ],\n  'theme_log' => [\n    'hint' => 'Цей журнал відображає будь-які зміни, внесені до теми адміністраторами в задній частині області CMS.',\n    'menu_label' => 'Журнал змін тем',\n    'menu_description' => 'Переглянути зміни, внесені до активної теми.',\n    'empty_link' => 'Очистити журнал',\n    'empty_loading' => 'Очищення журналу...',\n    'empty_success' => 'Журнал очищено',\n    'return_link' => 'Повернутися до журналу',\n    'id' => 'ID',\n    'id_label' => 'ID запису журналу',\n    'created_at' => 'Дата, час',\n    'user' => 'Користувач',\n    'type' => 'Тип',\n    'type_create' => 'Створити',\n    'type_update' => 'Оновити',\n    'type_delete' => 'Видалити',\n    'theme_name' => 'Тема',\n    'theme_code' => 'Код теми',\n    'old_template' => 'Шаблон (старий)',\n    'new_template' => 'Шаблон (новий)',\n    'template' => 'Шаблон',\n    'diff' => 'Зміни',\n    'old_value' => 'Старе значення',\n    'new_value' => 'Нове значення',\n    'preview_title' => 'Зміни в шаблоні',\n    'template_updated' => 'Шаблон було оновлено',\n    'template_created' => 'Шаблон був створений',\n    'template_deleted' => 'Шаблон був видалений',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/uk.json",
    "content": "{\n  \"Themes\": \"Теми\",\n  \"Manage Themes\": \"Управління темами\",\n  \"Customize Theme\": \"Налаштування теми\",\n  \"Manage Maintenance Mode\": \"Управління режимом обслуговування\",\n  \"View Website During Maintenance\": \"Перегляд сайту під час технічного обслуговування\",\n  \"Manage Content\": \"Управління вмістом\",\n  \"Manage Asset Files\": \"Управління ассетами\",\n  \"Manage Pages\": \"Управління сторінками\",\n  \"Manage Layouts\": \"Управління макетами\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"Налаштуйте режим обслуговування та увімкніть цю опцію.\",\n  \"Maintenance Mode\": \"Режим обслуговування\",\n  \"Select the page to show when maintenance mode is activated.\": \"При активації цього режиму відвідувачі сайту побачать сторінку обрану нижче.\",\n  \"Enable maintenance mode\": \"Увімкнути режим обслуговування\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Режим обслуговування покаже сторінку обслуговування для відвідувачів, що не авторизувалися в CMS.\",\n  \"Resources\": \"Ресурси\",\n  \"Reference assets and variables included on this page.\": \"Довідкові активи та змінні, включені на цю сторінку.\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"Файли JavaScript у папці assets/js\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"Файли LESS у папці assets/less\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"Файли SCSS у папці assets/scss\",\n  \"Variables\": \"Змінні\",\n  \"Page variables name(s) and value(s)\": \"Назви та значення змінних сторінки\",\n  \"Headers\": \"Заголовки\",\n  \"Page header name(s) and value(s)\": \"Назви заголовку сторінки та значення\",\n  \"Site Picker\": \"Вибір сайту\",\n  \"Displays links for selecting a different site.\": \"Відображає посилання для вибору іншого сайту.\",\n  \"Unknown component\": \"Невідомий компонент\",\n  \"View Bag\": \"Переглянути сумку\",\n  \"Stores custom template properties.\": \"Зберігає власні властивості шаблону.\",\n  \"By :name\": \"Автор :name\",\n  \"The theme ':name' is not found.\": \"Тема ':name' не знайдена.\",\n  \"Manage the front-end theme and customization options.\": \"Управління темою сайту та персоналізація налаштувань.\",\n  \"Site Theme\": \"Фронтенд теми\",\n  \"Properties\": \"Властивості\",\n  \"Publish\": \"Опублікувати\",\n  \"Advanced\": \"Розширені\",\n  \"Name\": \"Назва\",\n  \"New theme name\": \"Назва нової теми\",\n  \"Author Name\": \"Автор\",\n  \"Person or company name\": \"Ім'я автора або назва компанії\",\n  \"Directory Name\": \"Назва каталогу\",\n  \"The destination theme directory\": \"Каталог теми\",\n  \"Description\": \"Опис\",\n  \"Theme description\": \"Опис теми\",\n  \"Homepage\": \"Домашня сторінка\",\n  \"Website URL\": \"Адреса сайту\",\n  \"Author Code\": \"Код автора\",\n  \"A unique code for the author used for distribution\": \"Унікальний код автора для поширення його робіт\",\n  \"Theme Code\": \"Унікальний код\",\n  \"A unique code for this theme used for distribution\": \"Унікальний код теми, який використовуються для її поширення\",\n  \"Parent Theme\": \"Батьківська тема\",\n  \"Database Mode\": \"Режим бази даних\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"Зберегти зміни до цієї теми в базі даних замість файлової системи\",\n  \"-- no parent --\": \"-- без батьківського елемента --\",\n  \"Theme\": \"Тема\",\n  \"Folders\": \"Папки\",\n  \"Please select the theme folders you would like to export\": \"Будь ласка, оберіть папки теми, які ви хотіли б експортувати\",\n  \"Theme archive file\": \"Файл архіву теми\",\n  \"Overwrite existing files\": \"Перезаписувати існуючі файли\",\n  \"Untick this box to only import new files\": \"Вимкніть цю опцію, щоб імпортувати тільки нові файли\",\n  \"Please select the theme folders you would like to import\": \"Будь ласка, оберіть папки теми, які ви хотіли б імпортувати\",\n  \"Activate\": \"Активувати\",\n  \"Customize\": \"Налаштувати тему\",\n  \"Duplicate\": \"Дублювати\",\n  \"Duplicate Theme\": \"Дублювати тему\",\n  \"Theme Duplicated!\": \"Дублювання теми успішно завершено!\",\n  \"Manage\": \"Управління\",\n  \"Manage Theme\": \"Управління темою\",\n  \"Edit Properties\": \"Редагування властивостей\",\n  \"Save Properties\": \"Зберегти властивості\",\n  \"Import\": \"Імпортувати\",\n  \"Import Theme\": \"Імпортувати тему\",\n  \"Theme Imported!\": \"Імпорт теми успішно завершено!\",\n  \"Export\": \"Експорт\",\n  \"Export Theme\": \"Експортувати тему\",\n  \"Delete\": \"Видалити\",\n  \"Delete this theme? It cannot be undone!\": \"Ви впевнені, що хочете видалити цю тему? Ця дія є незворотною!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Неможливо видалити активну тему, активуйте спочатку будь-яку іншу і повторіть спробу.\",\n  \"Theme deleted!\": \"Тему успішно видалено!\",\n  \"Create Theme\": \"Створити тему\",\n  \"Create\": \"Створити\",\n  \"Create a New Blank Theme\": \"Створити нову тему з нуля\",\n  \"Theme Created!\": \"Тему успішно створено!\",\n  \"Please specify a name for the theme.\": \"Будь ласка, вкажіть назву для теми.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Назва може містити тільки цифри, латинські літери й такі символи: _ -\",\n  \"Desired theme directory already exists.\": \"Зазначений каталог вже існує.\",\n  \"Theme directory\": \"Каталог теми\",\n  \"Provide a new directory name for the duplicated theme.\": \"Вкажіть нову назву папки для дубліката теми.\",\n  \"Find More Themes\": \"Знайти нові теми\",\n  \"Saving Theme...\": \"Збереження теми...\",\n  \"Return to Themes List\": \"Повернутися до списку тем\",\n  \"No themes found\": \"Тем не знайдено\",\n  \"Seed Theme\": \"Сідінг теми\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"Сідінг вказаної теми файлами blueprints, перекладами та контентом.\",\n  \"Theme Seeded!\": \"Тема сідована!\",\n  \"Select Page Link\": \"Виберіть посилання на сторінку\",\n  \"Search all references...\": \"Пошук всіх посилань...\",\n  \"CMS Page\": \"CMS сторінка\",\n  \"Link\": \"Посилання\",\n  \"Please select a CMS page\": \"Оберіть сторінку CMS\",\n  \"Please select a page reference\": \"Оберіть посилання на сторінку\",\n  \"Please enter a valid URL\": \"Введіть правильний URL\",\n  \"Delete Theme\": \"Видалити тему\",\n  \"Activate Theme\": \"Активувати тему\",\n  \"Manage Partials\": \"Управління елементами коду\",\n  \"No Title\": \"Без назви\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Назва компонента визначає його ім'я, під яким він доступний в коді сторінки або шаблону.\",\n  \"Alias\": \"Назва компонента\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Псевдонім обов'язковий та може містити тільки латинські букви, цифри й знаки підкреслення. Псевдоніми повинні починатися з літери.\",\n  \"Unnamed\": \"Без назви\",\n  \"No description provided\": \"Без опису\",\n  \"No snippets found\": \"Сніппети не знайдені\",\n  \"Search...\": \"Пошук...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"Сніппет з запитаним кодом %s не знайдений в темі.\",\n  \"Snippet\": \"Сніппети\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"Введіть код, щоб зробити цей фрагмент доступним як сніппет в розширенні Сторінки.\",\n  \"Please enter the snippet code\": \"Введіть код сніпету\",\n  \"Snippet Code\": \"Код сніппета\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"Ім'я відображається в списку фрагментів розширення Сторінки і на сторінці, коли сніппет доданий.\",\n  \"Please enter the snippet name\": \"Введіть назву сніпету\",\n  \"Property Title\": \"Назва властивості\",\n  \"Please provide the property title\": \"Вкажіть правильну назву\",\n  \"Code\": \"Код\",\n  \"Please provide the property name\": \"Вкажіть правильне ім'я\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"Код властивості повинен починатися з літери та може містити тільки латинські букви та цифри\",\n  \"Type\": \"Тип\",\n  \"Select\": \"Обрати\",\n  \"String\": \"Рядок\",\n  \"Checkbox\": \"Чекбокс\",\n  \"Dropdown\": \"Список, що випадає\",\n  \"Please select the property type\": \"Оберіть тип властивості\",\n  \"Default\": \"За замовчуванням\",\n  \"Options\": \"Опції\",\n  \"Define a Snippet Partial\": \"Задати фрагмент сніппету\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"Неправильний ключ списку: %s. Ключ може містити тільки цифри, латинські літери і символи _ і -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"Опис відображається у списку сніпетів в редакторі при додаванні сніпету.\",\n  \"Details\": \"Деталі\",\n  \"Frontend Theme\": \"Фронтенд теми\"\n}"
  },
  {
    "path": "modules/cms/lang/vn/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => 'Tên tệp không hợp lệ :name. Tên tệp có thể chứa chỉ các ký tự chữ và số, dấu gạch dưới, dấu gạch ngang và dấu chấm. Ví dụ: page.htm, page, subdirectory/page',\n    'invalid_property' => 'Khổng thể cài thuộc tính \\':name\\'',\n    'file_already_exists' => 'Tệp tin \\':name\\' đã tồn tại.',\n    'error_saving' => 'Lỗi lưu file \\':name\\'. Vui lòng kiểm tra write permission.',\n    'error_creating_directory' => 'Không thể tạo thư mục :name. Vui lòng kiểm tra write permission.',\n    'invalid_file_extension' => 'Extension không hợp lệ: :invalid. Extensions hợp lệ: :allowed.',\n    'error_deleting' => 'Không thể xóa template file \\':name\\'. Vui lòng kiểm tra write permission.',\n    'delete_success' => 'Đã xóa template: :count.',\n    'file_name_required' => 'Tên file là bắt buộc.',\n    'safe_mode_enabled' => 'Safe mode đã được bật.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => 'Giao diện web',\n      'online' => 'Trực tuyến',\n      'maintenance' => 'Đang bảo trì',\n      'manage_themes' => 'Quản lý giao diện',\n      'customize_theme' => 'Tùy chỉnh giao diện',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => 'Giao diện đang kích hoạt chưa được cài đặt.',\n      'not_found' => 'Không tìm thấy giao diện đang kích hoạt.',\n    ],\n    'edit' => [\n      'not_set' => 'Giao diện chưa được cài đặt.',\n      'not_found' => 'Không tìm thấy giao diện.',\n      'not_match' => 'Giao diện này đang trong chế độ chỉnh sửa. Vui lòng tải lại trang',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => 'Trang \\':name\\' không tồn tại',\n    'not_found' => [\n      'label' => 'Trang không tồn tại',\n      'help' => 'Không tìm thấy trang bạn yêu cầu.',\n    ],\n    'custom_error' => [\n      'label' => 'Lỗi trang',\n      'help' => 'Có lỗi xảy ra khiến trang này không thể hiển thị',\n    ],\n    'menu_label' => 'Danh sách trang',\n    'unsaved_label' => 'Trang chưa được lưu',\n    'no_list_records' => 'Không tìm thấy trang',\n    'new' => 'Trang mới',\n    'invalid_url' => 'Định dạng URL không hợp lệ. URL phải bắt đầu bằng biểu tượng dấu gạch chéo và có thể chứa chữ số, chữ cái Latinh và ký hiệu sau đây: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => 'Xóa các trang đang chọn?',\n    'delete_confirm_single' => 'Xóa trang này?',\n    'no_layout' => '-- Không chọn --',\n    'title' => 'Tiêu đề trang',\n    'url' => 'URL trang',\n    'file_name' => 'Tên file của trang',\n  ],\n  'layout' => [\n    'not_found_name' => 'Mẫu giao diện \\':name\\' không tìm thấy',\n    'menu_label' => 'Các mẫu',\n    'unsaved_label' => 'Mẫu giao diện chưa được lưu',\n    'no_list_records' => 'Không tìm thấy mẫu giao diện nào',\n    'new' => 'Mẫu giao diện mới',\n    'delete_confirm_multiple' => 'Xóa các mẫu giao diện đã chọn?',\n    'delete_confirm_single' => 'Xóa mẫu giao diện này?',\n  ],\n  'partial' => [\n    'not_found_name' => 'Không tìm thấy partial \\':name\\'.',\n    'invalid_name' => 'Partial không hợp lệ: :name.',\n    'menu_label' => 'Partials',\n    'unsaved_label' => 'Chưa lưu partial(s)',\n    'no_list_records' => 'Không tìm thấy partial nào',\n    'delete_confirm_multiple' => 'Xóa các Partital đã chọn?',\n    'delete_confirm_single' => 'Xóa partial này?',\n    'new' => 'Partital mới',\n  ],\n  'content' => [\n    'not_found_name' => 'Không tìm thấy tệp tin nội dung \\':name\\'.',\n    'menu_label' => 'Nội dung',\n    'unsaved_label' => 'Chưa lưu nội dung',\n    'no_list_records' => 'Không tìm thấy tệp tin nội dung nào',\n    'delete_confirm_multiple' => 'Xóa các tệp tin nội dung hoặc đường dẫn đã chọn?',\n    'delete_confirm_single' => 'Xóa tệp tin nội dung này?',\n    'new' => 'Tẹo tệp mới',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => 'Tên AJAX handler không hợp lệ: :name.',\n    'not_found' => 'Không tìm thấy AJAX handler \\':name\\'',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => 'Thêm mới',\n    'search' => 'Tìm kiếm...',\n  ],\n  'editor' => [\n    'settings' => 'Cài đặt',\n    'title' => 'Tiêu đề',\n    'new_title' => 'Tiêu đề trang',\n    'url' => 'URL',\n    'filename' => 'Tên file',\n    'layout' => 'Giao diện mẫu',\n    'description' => 'Mô tả',\n    'preview' => 'Xem trước',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta Title',\n    'meta_description' => 'Meta Description',\n    'markup' => 'Markup',\n    'code' => 'Code',\n    'content' => 'Nội dung',\n    'hidden' => 'Ẩn',\n    'hidden_comment' => 'Ẩn trang này, và chỉ hiển thị đối với những người đã đăng nhập trang quản trị',\n    'enter_fullscreen' => 'Toàn màn hình',\n    'exit_fullscreen' => 'Thoát toàn màn hình',\n    'open_searchbox' => 'Mở hộp tìm kiếm',\n    'open_replacebox' => 'Mở hộp Replace',\n  ],\n  'asset' => [\n    'menu_label' => 'Assets',\n    'unsaved_label' => 'Chưa lưu asset(s)',\n    'drop_down_add_title' => 'Thêm mới...',\n    'drop_down_operation_title' => 'Hành động...',\n    'upload_files' => 'Upload file(s)',\n    'create_file' => 'Tạo mới file',\n    'create_directory' => 'Tạo mới thư mục',\n    'directory_popup_title' => 'Thư mục mới',\n    'directory_name' => 'Tên thư mục',\n    'rename' => 'Đổi tên',\n    'delete' => 'Xóa',\n    'move' => 'Di chuyển ra chỗ khác',\n    'select' => 'Lựa chọn',\n    'new' => 'Tệp mới',\n    'rename_popup_title' => 'Đổi tên',\n    'rename_new_name' => 'Tên mới',\n    'invalid_path' => 'Đường dẫn chỉ có thể chứa chữ số, chữ cái Latinh, dấu cách và các ký hiệu sau đây: ._-/',\n    'error_deleting_file' => 'Lỗi xóa tệp tin :name.',\n    'error_deleting_dir_not_empty' => 'Lỗi xóa thư mục :name. Thư mục phải trống mới xóa được.',\n    'error_deleting_dir' => 'Lỗi xóa thư mục :name.',\n    'invalid_name' => 'Tên chỉ có thể chứa chữ số, chữ cái Latinh, dấu cách và các ký hiệu sau đây: ._-',\n    'original_not_found' => 'Tệp gốc hoặc đường dẫn không tồn tại',\n    'already_exists' => 'Tên tệp tin hoặc đường dẫn đã tồn tại',\n    'error_renaming' => 'Lỗi sửa tên tệp tin hoặc thư mục',\n    'name_cant_be_empty' => 'Tên không được để trống',\n    'too_large' => 'Kích thước tệp tin quá lớn. Kích thước tệp tin không được vượt quá :max_size',\n    'type_not_allowed' => 'Chỉ chấp nhận các loại tệp tin sau: :allowed_types',\n    'file_not_valid' => 'File không hợp lệ',\n    'error_uploading_file' => 'Lỗi upload tệp tin \\':name\\': :error',\n    'move_please_select' => 'Vui lòng chọn',\n    'move_destination' => 'Thư mục cần chuyển đến',\n    'move_popup_title' => 'Di chuyển assets',\n    'move_button' => 'Di chuyển',\n    'selected_files_not_found' => 'Không tìm thấy tệp tin đã chọn',\n    'select_destination_dir' => 'Vui lòng chọn thư mục cần di chuyển đến',\n    'destination_not_found' => 'Thư mục cần chuyển đến không tồn tại',\n    'error_moving_file' => 'Lỗi di chuyển tệp tin :file',\n    'error_moving_directory' => 'Lỗi di chuyển thư mục :dir',\n    'error_deleting_directory' => 'Lỗi xóa thư mục gốc :dir',\n    'no_list_records' => 'Không tìm thấy tệp tin nào',\n    'delete_confirm' => 'Xóa các tệp tin hoặc thư mục đã chọn?',\n    'path' => 'Path',\n  ],\n  'component' => [\n    'menu_label' => 'Components',\n    'invalid_request' => 'Không thể lưu template vì chứa component không hợp lệ.',\n    'no_records' => 'Không tìm thấy components nào',\n    'not_found' => 'Component \\':name\\' không tồn tại.',\n    'method_not_found' => 'Component \\':name\\' không có method \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => 'Không xác định được định dạng template.',\n    'not_found' => 'Không tìm thấy Template.',\n    'saved' => 'Đã lưu template.',\n    'no_list_records' => 'Không có kết quả',\n    'delete_confirm' => 'Xóa các template đã chọn?',\n    'order_by' => 'Order by',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => 'Quản lý các tệp content của website',\n    'manage_assets' => 'Quản lý các thư mục và tệp assets - images, JavaScript files, CSS',\n    'manage_pages' => 'Tạo mới, chỉnh sửa và xóa các trang của website',\n    'manage_layouts' => 'Tạo mới, chỉnh sửa và xóa các CMS layout',\n    'manage_partials' => 'Tạo mới, chỉnh sửa và xóa các CMS partial',\n    'manage_themes' => 'Kích hoạt, bỏ kích hoạt và cấu hình CMS theme',\n    'manage_theme_options' => 'Lựa chọn các cấu hình tùy chỉnh cho theme đang được kích hoạt',\n  ],\n  'theme_log' => [\n    'hint' => 'Bản ghi những thay đổi của giao diện được thực hiện trong trang quản trị',\n    'menu_label' => 'Nhật ký giao diện',\n    'menu_description' => 'Xem những thay đổi của giao diện đang được kích hoạt.',\n    'empty_link' => 'Xóa hết nhật ký về thay đổi giao diện',\n    'empty_loading' => 'Đang xóa nhật ký giao diện...',\n    'empty_success' => 'Đã xóa hết nhật ký',\n    'return_link' => 'Quay lại trang nhật ký giao diện',\n    'id' => 'ID',\n    'id_label' => 'Log ID',\n    'created_at' => 'Thời gian',\n    'user' => 'Người dùng',\n    'type' => 'Loại',\n    'type_create' => 'Ngày tạo',\n    'type_update' => 'Ngày cập nhật',\n    'type_delete' => 'Ngày xóa',\n    'theme_name' => 'Giao diện',\n    'theme_code' => 'Mã giao diện',\n    'old_template' => 'Giao diện mẫu (Cũ)',\n    'new_template' => 'Giao diện mẫu (Mới)',\n    'template' => 'Giao diện mẫu',\n    'diff' => 'Thay đổi',\n    'old_value' => 'Giá trị cũ',\n    'new_value' => 'Giá trị mới',\n    'preview_title' => 'Thay đổi giao diện mẫu',\n    'template_updated' => 'Giao diện mẫu đã được cập nhật',\n    'template_created' => 'Giao diện mẫu đã được tạo',\n    'template_deleted' => 'Giao diện mẫu đã xóa',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/vn.json",
    "content": "{\n  \"Configure the maintenance mode page and toggle the setting.\": \"Bật chế độ bảo trì và chỉ định trang sẽ hiển thị ở chế độ bảo trì.\",\n  \"Maintenance Mode\": \"Chế độ bảo trì\",\n  \"Select the page to show when maintenance mode is activated.\": \"Chọn trang sẽ hiển thị ở chế độ bảo trì.\",\n  \"Enable maintenance mode\": \"Bật chế độ bảo trì\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"Chế độ bảo trì sẽ hiển thị trang bảo trì đối với khách truy cập trang\",\n  \"By :name\": \"Tạo bởi :name\",\n  \"The theme ':name' is not found.\": \"Giao diện ':name' không tồn tại\",\n  \"Manage the front-end theme and customization options.\": \"Cấu hình giao diện website và các tùy chỉnh\",\n  \"Site Theme\": \"Giao diện website\",\n  \"Properties\": \"Các thuộc tính\",\n  \"Name\": \"Tên\",\n  \"New theme name\": \"Tên giao diện\",\n  \"Author Name\": \"Tác giả\",\n  \"Person or company name\": \"Tên cá nhân hoặc công ty\",\n  \"Directory Name\": \"Tên đường dẫn\",\n  \"The destination theme directory\": \"Đường dẫn chứa giao diện\",\n  \"Description\": \"Mô tả\",\n  \"Theme description\": \"Mô tả giao diện\",\n  \"Homepage\": \"Trang chủ\",\n  \"Website URL\": \"Đường dẫn trang chủ tác giả\",\n  \"Theme Code\": \"Code\",\n  \"A unique code for this theme used for distribution\": \"Tạo mã code duy nhất để phân phối giao diện của bạn\",\n  \"Theme\": \"giao diện\",\n  \"Customize Theme\": \"Tùy chỉnh giao diện\",\n  \"Folders\": \"Các thư mục\",\n  \"Please select the theme folders you would like to export\": \"Vui lòng chọn các mục bạn muốn export\",\n  \"Theme archive file\": \"Tệp tin giao diện\",\n  \"Overwrite existing files\": \"Ghi đè file\",\n  \"Untick this box to only import new files\": \"Bỏ check để chỉ nhập tệp mới ( không ghi đè)\",\n  \"Please select the theme folders you would like to import\": \"Vuui lòng chọn các thư mục bạn muốn import\",\n  \"Themes\": \"Themes\",\n  \"Activate\": \"Kích hoạt\",\n  \"Customize\": \"Tùy chỉnh\",\n  \"Duplicate\": \"Nhân đôi\",\n  \"Duplicate Theme\": \"Nhân đôi giao diện\",\n  \"Theme Duplicated!\": \"Nhân đôi giao diện thành công!\",\n  \"Manage\": \"Quản lý\",\n  \"Manage Theme\": \"Quản lý giao diện\",\n  \"Edit Properties\": \"Chỉnh sửa các thuộc tính\",\n  \"Save Properties\": \"Lưu lại thuộc tính\",\n  \"Import\": \"Import\",\n  \"Import Theme\": \"Import giao diện\",\n  \"Theme Imported!\": \"Nhập thành công giao diện!\",\n  \"Export\": \"Export\",\n  \"Export Theme\": \"Xuất giao diện\",\n  \"Delete\": \"Xóa\",\n  \"Delete this theme? It cannot be undone!\": \"Xóa giao diện. Sau khi xóa không thể khôi phục lại\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"Không thể xóa giao diện đang được kích hoạt. Vui lòng kích hoạt 1 giao diện khác và thử lại\",\n  \"Theme deleted!\": \"Xóa thành công!\",\n  \"Create Theme\": \"Tạo theme mới\",\n  \"Create\": \"Tạo mới\",\n  \"Create a New Blank Theme\": \"Tạo một giao diện trống\",\n  \"Theme Created!\": \"Giao diện đã được tạo!\",\n  \"Please specify a name for the theme.\": \"Vui lòng điền tên gaio diện\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"Tên chỉ có thể chứa chữ số, chữ cái Latinh và các ký hiệu sau: _-\",\n  \"Desired theme directory already exists.\": \"Đường dẫn này đã tồn tại.\",\n  \"Theme directory\": \"Đường dẫn của giao diện\",\n  \"Provide a new directory name for the duplicated theme.\": \"Nhập vào đường dẫn cho giao diện mới.\",\n  \"Find More Themes\": \"Tìm kiếm giao diện\",\n  \"Saving Theme...\": \"Đang lưu giao diện...\",\n  \"Return to Themes List\": \"Quay lại trang quản lý giao diện\",\n  \"CMS Page\": \"CMS Page\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"Chọn 1 mã duy nhất để phân biệt các component khi được dùng ở front-end.\",\n  \"Alias\": \"Alias\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"Component aliases là bắt buộc và chỉ có thể chứa các ký hiệu Latin, chữ số và dấu gạch dưới. Các bí danh nên bắt đầu bằng một biểu tượng Latin.\",\n  \"Unnamed\": \"Không có tên\",\n  \"No description provided\": \"Không có mô tả\"\n}"
  },
  {
    "path": "modules/cms/lang/zh-cn/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => '非法文件名： :name。文件名中只能包括字母或数字下划线、破折号和点。 正确的文件名: page.htm, page, subdirectory/page',\n    'invalid_file_inspector' => '文件名无效。文件名只能包含字母数字符号、下划线、破折号和点。一些正确文件名的例子: page.htm, page, subdirectory/page',\n    'invalid_property' => '无法设置属性 \\':name\\' ',\n    'file_already_exists' => '文件 \\':name\\' 已存在.',\n    'error_saving' => '保存文件 \\':name\\' 错误。请检查写权限。',\n    'error_creating_directory' => '创建文件夹 :name 错误。请检查写权限。',\n    'invalid_file_extension' => '非法文件扩展名: :invalid. 允许的扩展名: :allowed.',\n    'error_deleting' => '删除模板文件 \\':name\\' 错误. 请检查写权限.',\n    'delete_success' => '成功删除模板: :count.',\n    'file_name_required' => '需要文件名字段.',\n    'safe_mode_enabled' => '已启用安全模式.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'widget_title_default' => '网站',\n      'online' => '在线',\n      'maintenance' => '维护',\n      'manage_themes' => '管理主题',\n      'customize_theme' => '自定义主题',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => '未设置活动主题',\n      'not_found' => '无法找到活动主题',\n      'is_locked' => '主题 \\':theme\\' 被锁定，无法使用。 请复制此主题或创建一个子主题。 ',\n    ],\n    'edit' => [\n      'not_set' => '未设置编辑主题.',\n      'not_found' => '无法找到编辑主题',\n      'not_match' => '您所尝试访问的对象不属于正在编辑的主题。请重载页面。',\n    ],\n    'setting_edit_theme' => '更改编辑主题',\n    'edit_theme_changed' => '编辑主题已更改',\n  ],\n  'page' => [\n    'not_found_name' => '无法找到页面 \\':name\\'',\n    'not_found' => [\n      'label' => '无法找到页面',\n      'help' => '无法找到所请求的页面',\n    ],\n    'custom_error' => [\n      'label' => '页面错误',\n      'help' => '很抱歉，发生了错误导致页面不能显示.',\n    ],\n    'menu_label' => '页面',\n    'unsaved_label' => '未保存页面',\n    'no_list_records' => '找不到页面',\n    'new' => '新页面',\n    'invalid_url' => '不合法的URL格式. URL可以以正斜杠开头, 包含数字, 拉丁字母和下面的字符: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => '真的想要删除选择的页面吗?',\n    'delete_confirm_single' => '真的想要删除这个页面吗?',\n    'no_layout' => '-- 无布局 --',\n    'title' => '页面标题',\n    'url' => '页面地址',\n    'url_required' => '页面 URL 是必需的。',\n    'file_name' => '页面文件名',\n    'editor_node_name' => '页面',\n    'editor_sorting' => '页面排序',\n    'editor_sort_by_url' => 'URL',\n    'editor_sort_by_title' => '标题',\n    'editor_sort_by_file_name' => '文件名',\n    'editor_grouping' => '群组页面',\n    'editor_group_by_filepath' => '文件路径',\n    'editor_group_by_url' => 'URL',\n    'editor_display' => '显示',\n    'editor_display_title' => '标题',\n    'editor_display_url' => 'URL',\n    'editor_display_file' => '文件路径',\n    'editor_markup' => '标记',\n    'editor_code' => '代码',\n    'description_hint' => '描述是可选的，仅在后端用户界面中可见。',\n    'create_new' => '新页面',\n  ],\n  'layout' => [\n    'not_found_name' => '布局 \\':name\\' 找不到',\n    'menu_label' => '布局',\n    'unsaved_label' => '未保存布局',\n    'no_list_records' => '找不到布局',\n    'new' => '新布局',\n    'delete_confirm_multiple' => '您真的想要删除选中的布局?',\n    'delete_confirm_single' => '您真的想要删除这个布局?',\n    'editor_node_name' => '布局',\n    'create_new' => '新布局',\n  ],\n  'partial' => [\n    'not_found_name' => '部件 \\':name\\' 找不到.',\n    'invalid_name' => '非法的部件名: :name.',\n    'menu_label' => '部件',\n    'unsaved_label' => '未保存的部件',\n    'no_list_records' => '无法找到部件',\n    'delete_confirm_multiple' => '您真的想要删除选择的部件?',\n    'delete_confirm_single' => '您真的想要删除这个部件?',\n    'editor_node_name' => '部件',\n    'new' => '新的部件',\n    'create_new' => '新建部件',\n  ],\n  'content' => [\n    'not_found_name' => '无法找到内容文件 \\':name\\'',\n    'menu_label' => '内容',\n    'unsaved_label' => '未保存内容',\n    'no_list_records' => '无法找到内容文件',\n    'delete_confirm_multiple' => '您真的想要删除选中的文件或目录吗?',\n    'delete_confirm_single' => '您真的想要删除这个内容文件?',\n    'editor_node_name' => '内容文件',\n    'new' => '新内容文件',\n    'editor_content' => '内容',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => '非法 AJAX 处理器: :name.',\n    'not_found' => '无法找到 AJAX 处理器 \\':name\\' ',\n  ],\n  'cms' => [\n    'menu_label' => '内容管理系统',\n  ],\n  'sidebar' => [\n    'add' => '增加',\n    'search' => '搜索...',\n  ],\n  'editor' => [\n    'settings' => '设置',\n    'title' => '标题',\n    'new_title' => '新页面标题',\n    'url' => '网址',\n    'filename' => '文件名',\n    'layout' => 'CMS 布局',\n    'description' => '说明',\n    'preview' => '预览',\n    'page' => '内容管理页面',\n    'edit_theme' => '编辑主题',\n    'change_edit_theme' => '更改编辑主题',\n    'edit_theme_saved_changed_tabs' => '您在打开的选项卡中有未保存的更改。请保存它们或关闭标签以继续。',\n    'partial' => 'CMS 部分',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta标题',\n    'meta_description' => 'Meta描述',\n    'markup' => '标记',\n    'code' => '代码',\n    'content' => 'CMS 内容文件',\n    'asset' => '资产文件',\n    'hidden' => '隐藏',\n    'hidden_comment' => '隐藏页面只能由登录的后端用户访问。',\n    'enter_fullscreen' => '进入全屏模式',\n    'exit_fullscreen' => '退出全屏模式',\n    'open_searchbox' => '打开搜索框',\n    'open_replacebox' => '打开替换框',\n    'commit' => '提交',\n    'reset' => '重置',\n    'commit_confirm' => '您是否确认保存对文件的修改?这将会对原有的文件内容进行覆盖',\n    'reset_confirm' => '您是否确认重置对文件的修改?这将会完全恢复文件到原来的内容',\n    'committing' => '提交中...',\n    'resetting' => '重置中...',\n    'commit_success' => ' :type 保存成功',\n    'reset_success' => ' :type 重置成功',\n    'error_loading_header' => '加载模板时出错',\n    'component_list' => '组件',\n    'component_list_description' => '要添加一个组件，点击它或拖放到标记编辑器。',\n    'info' => '信息',\n    'refresh' => '刷新',\n    'create' => '创建',\n    'manage_themes' => '管理主题',\n    'error_no_doctype_permissions' => '您没有权限管理文档类型：:doctype',\n  ],\n  'asset' => [\n    'menu_label' => '资产',\n    'unsaved_label' => '未保存的资源',\n    'drop_down_add_title' => '添加...',\n    'drop_down_operation_title' => '动作...',\n    'upload_files' => '上传文件',\n    'create_file' => '创建文件',\n    'create_directory' => '新建目录',\n    'directory_popup_title' => '新建目录',\n    'directory_name' => '目录名',\n    'directory_name_required' => '目录名必填',\n    'rename_name_required' => '名称为必填',\n    'rename' => '重命名',\n    'delete' => '删除',\n    'move' => '移动',\n    'moving' => '移动所选项目',\n    'moved' => '移动成功',\n    'saved' => '文件已保存',\n    'deleted' => '文件已删除',\n    'select' => '选择',\n    'new' => '新文件',\n    'rename_popup_title' => '重命名',\n    'rename_new_name' => '新名称',\n    'invalid_path' => '路径只能包含数字、拉丁字母、空格和以下符号：._-@/',\n    'error_deleting_file' => '删除文件时出错 :name。',\n    'error_deleting_dir_not_empty' => '删除目录时出错 :name。目录不为空。',\n    'error_deleting_dir' => '删除目录时出错 :name。',\n    'invalid_name' => '名称只能包含数字、拉丁字母、空格和以下符号：._-@',\n    'original_not_found' => '未找到原始文件或目录',\n    'already_exists' => '同名的文件或目录已经存在',\n    'error_renaming' => '重命名文件或目录时出错',\n    'name_cant_be_empty' => '名称不能为空',\n    'type_not_allowed' => '只允许以下文件类型: :allowed_types',\n    'error_uploading_file' => '上传文件 \\':name\\' 时出错：:error',\n    'move_please_select' => '请选择',\n    'move_destination' => '目标目录',\n    'move_popup_title' => '移动资源',\n    'move_button' => '移动',\n    'no_list_records' => '没有找到文件',\n    'path' => '路径',\n    'editor_node_name' => '资产',\n    'open' => '打开',\n  ],\n  'component' => [\n    'menu_label' => '组件',\n    'invalid_request' => '组件数据非法，无法保存',\n    'no_records' => '无法找到找不到',\n    'not_found' => '无法找到组件 \\':name\\'',\n    'method_not_found' => '组件 \\':name\\' 中无方法 \\':method\\'.',\n    'expand_or_collapse' => '展开或折叠组件列表',\n    'remove' => '移除组件',\n    'expand_partial' => '展开组件部分',\n  ],\n  'template' => [\n    'invalid_type' => '未知模板类型。',\n    'not_found' => '未找到模板。',\n    'saved' => '模板已保存',\n    'saved_to_db' => '模板保存到数据库',\n    'file_updated' => '模板文件已更新',\n    'reset_from_template_success' => '模板已从文件中重置',\n    'reloaded' => '重新加载模板',\n    'deleted' => '模板已删除',\n    'no_list_records' => '没有找到记录',\n    'delete_confirm' => '删除选定的模板？',\n    'order_by' => '排序',\n    'last_modified' => '最后修改',\n    'storage' => '存储',\n    'template_file' => '模板文件',\n    'storage_filesystem' => '文件系统',\n    'storage_database' => '数据库',\n    'update_file' => '更新模板文件',\n    'reset_from_file' => '从模板文件重置',\n  ],\n  'permissions' => [\n    'name' => 'CMS',\n    'manage_content' => '管理内容',\n    'manage_assets' => '管理资源',\n    'manage_pages' => '管理页面',\n    'manage_layouts' => '管理布局',\n    'manage_partials' => '管理部件',\n    'manage_themes' => '管理主题',\n    'manage_theme_options' => '管理主题的自定义选项',\n  ],\n  'theme_log' => [\n    'hint' => '显示管理员在后台对主题的所有操作日志',\n    'menu_label' => '主题操作日志',\n    'menu_description' => '查看对激活主题的操作日志.',\n    'empty_link' => '清空操作日志',\n    'empty_loading' => '清空主题操作日志中...',\n    'empty_success' => '主题操作日志清空成功',\n    'return_link' => '返回主题操作日志',\n    'id' => '序号',\n    'id_label' => '日志 序号',\n    'created_at' => '日志生成时间',\n    'user' => '用户名',\n    'type' => '操作类型',\n    'type_create' => '创建',\n    'type_update' => '更新',\n    'type_delete' => '删除',\n    'theme_name' => '主题名',\n    'theme_code' => '主题code',\n    'old_template' => '文件名 (旧)',\n    'new_template' => '文件名 (新)',\n    'template' => '文件名',\n    'diff' => '文件修改对比',\n    'old_value' => '文件修改前',\n    'new_value' => '文件修改后',\n    'preview_title' => '文件修改详情',\n    'template_updated' => '文件已更新',\n    'template_created' => '文件已创建',\n    'template_deleted' => '文件已删除',\n  ],\n  'intellisense' => [\n    'learn_more' => '了解更多',\n    'docs' => [\n      'partial' => '渲染 CMS 部分的内容。',\n      'page' => '将 CMS 页面的内容呈现到布局模板中。',\n      'content' => '渲染一个 CMS 内容块。',\n      'component' => '渲染 CMS 组件的默认标记内容。',\n      'placeholder' => '渲染一个占位符部分。',\n      'scripts' => '向应用程序注入的脚本插入 JavaScript 文件引用。',\n      'styles' => '渲染 CSS 链接到应用程序注入的样式表文件。',\n      'flash' => '渲染存储在用户会话中的任何 flash 消息。',\n      'verbatim' => '将整个部分标记为不应被解析的原始文本。',\n      'macro' => '允许在模板中定义自定义函数。',\n      'for' => '循环遍历集合中的每个值。',\n      'if' => '允许有条件地显示模板标记。',\n      'abs_filter' => 'abs 过滤器返回绝对值。',\n      'batch_filter' => 'batch 过滤器通过返回具有给定项目数的列表列表来“批处理”项目。可以提供第二个参数并用于填充缺失的项目。',\n      'capitalize_filter' => '`capitalize` 过滤器将一个值设为大写。第一个字符将大写，所有其他字符小写。',\n      'column_filter' => '`column` 过滤器返回输入数组中单列的值。',\n      'convert_encoding_filter' => '`convert_encoding` 过滤器将字符串从一种编码转换为另一种编码。第一个参数是预期的输出字符集，第二个参数是输入字符集。',\n      'country_name_filter' => '`country_name` 过滤器根据 ISO-3166 两字母代码返回国家名称。',\n      'currency_name_filter' => '`currency_name` 过滤器根据三个字母的代码返回货币名称。',\n      'currency_symbol_filter' => '`currency_symbol` 过滤器返回给定三字母代码的货币符号。',\n      'data_uri_filter' => '`data_uri` 过滤器使用 RFC 2397 中定义的数据方案生成一个 URL。',\n      'date_filter' => 'date 过滤器将日期格式化为给定的格式。',\n      'date_modify_filter' => '`date_modify` 过滤器使用给定的修饰符字符串修改日期。',\n      'default_filter' => '如果值未定义或为空，`default` 过滤器返回传递的默认值，否则返回变量的值。',\n      'escape_filter' => '`escape` 过滤器使用依赖于上下文的策略对字符串进行转义。',\n      'filter_filter' => '过滤器过滤器使用箭头函数过滤序列或映射的元素。箭头函数接收序列或映射的值。',\n      'first_filter' => 'first 过滤器返回序列、映射或字符串的第一个“元素”。',\n      'format_filter' => '`format` 过滤器通过替换占位符来格式化给定的字符串（占位符遵循 [sprintf](https://www.php.net/sprintf) 符号）。',\n      'format_currency_filter' => '`format_currency` 过滤器将数字格式化为货币。',\n      'join_filter' => 'join 过滤器返回一个字符串，它是一个序列项目的串联',\n      'json_encode_filter' => '`json_encode` 过滤器返回一个值的 JSON 表示。',\n      'keys_filter' => '`keys` 过滤器返回数组的键。当您想遍历数组的键时，它很有用。',\n      'last_filter' => '`last` 过滤器返回序列、映射或字符串的最后一个“元素”。',\n      'length_filter' => '`length` 过滤器返回序列或映射的项数，或字符串的长度。',\n      'lower_filter' => '`lower` 过滤器将值转换为小写。',\n      'map_filter' => 'map 过滤器将箭头函数应用于序列或映射的元素。箭头函数接收序列或映射的值。',\n      'merge_filter' => '`merge` 过滤器将一个数组与另一个数组合并。',\n      'nl2br_filter' => '`nl2br` 过滤器在字符串中的所有换行符之前插入 HTML 换行符。',\n      'number_format_filter' => 'number_format 过滤器格式化数字。它是 PHP 的 [number_format](https://www.php.net/number_format) 函数的包装器。',\n      'reduce_filter' => '`reduce`过滤器使用箭头函数迭代地将序列或映射减少到单个值，从而将其减少到单个值。箭头函数接收前一次迭代的返回值和序列或映射的当前值。',\n      'replace_filter' => '`replace` 过滤器通过替换占位符来格式化给定的字符串。',\n      'reverse_filter' => '`reverse` 过滤器反转序列、映射或字符串。',\n      'round_filter' => '`round` 过滤器将数字四舍五入到给定的精度。',\n      'slice_filter' => '`slice` 过滤器提取序列、映射或字符串的切片。',\n      'sort_filter' => '`sort` 过滤器对数组进行排序。',\n      'spaceless_filter' => '使用 `spaceless` 过滤器去除 HTML 标签之间的空白，而不是 HTML 标签内的空白或纯文本中的空白。',\n      'split_filter' => '`split` 过滤器通过给定的分隔符分割一个字符串并返回一个字符串列表。',\n      'striptags_filter' => '`striptags` 过滤器去除 SGML/XML 标签并用一个空格替换相邻的空格。',\n      'title_filter' => '`title` 过滤器返回值的标题版本。单词将以大写字母开头，其余所有字符均为小写。',\n      'trim_filter' => '`trim` 过滤器从字符串的开头和结尾去除空格（或其他字符）。',\n      'upper_filter' => '`upper` 过滤器将一个值转换为大写。',\n      'url_encode_filter' => '`url_encode` 过滤器百分比将给定的字符串编码为 URL 段或将数组编码为查询字符串。',\n      'page_filter' => '`page` 过滤器使用页面文件名创建一个指向页面的链接，没有扩展名，作为参数。',\n      'theme_filter' => '`theme` 过滤器返回一个相对于网站活动主题路径的地址。 ',\n      'app_filter' => '`app` 过滤器返回一个相对于网站公共路径的地址。',\n      'media_filter' => '`media` 过滤器返回一个相对于 [媒体管理器库](https://docs.octobercms.com/4.x/cms/media/introduction.html) 公共路径的地址。',\n      'md_filter' => '`md` 过滤器将值从 Markdown 转换为 HTML 格式。',\n      'raw_filter' => '`raw` 过滤器将值标记为“安全”，这意味着如果`raw` 是最后一个应用于它的过滤器，则该变量不会被转义。',\n    ],\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/zh-cn.json",
    "content": "{\n  \"Themes\": \"主题\",\n  \"Manage Themes\": \"管理主题\",\n  \"Customize Theme\": \"自定义主题\",\n  \"Manage Maintenance Mode\": \"管理维护模式\",\n  \"View Website During Maintenance\": \"在维护期间查看网站\",\n  \"Manage Content\": \"管理内容\",\n  \"Manage Asset Files\": \"管理资产文件\",\n  \"Manage Pages\": \"管理页面\",\n  \"Manage Layouts\": \"管理布局\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"配置维护模式页面和开关设置.\",\n  \"Maintenance Mode\": \"维护模式\",\n  \"Select the page to show when maintenance mode is activated.\": \"当启用时, 网站访问者会看到下述页面.\",\n  \"Enable maintenance mode\": \"启用维护模式\",\n  \"Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\": \"维护模式将对未登陆后台的访客展示维护页面.\",\n  \"Resources\": \"资源\",\n  \"Reference assets and variables included on this page.\": \"参考本页中包含的资产和变量。\",\n  \"JavaScript\": \"JavaScript\",\n  \"JavaScript file(s) in the assets/js folder\": \"assets/js文件夹中的JavaScript文件\",\n  \"LESS\": \"LESS\",\n  \"LESS file(s) in the assets/less folder\": \"assets/less文件夹中的LESS文件\",\n  \"SCSS\": \"SCSS\",\n  \"SCSS file(s) in the assets/scss folder\": \"assets/scss文件夹中的SCSS文件\",\n  \"Variables\": \"变量\",\n  \"Page variables name(s) and value(s)\": \"页面变量名称和值\",\n  \"Headers\": \"Headers\",\n  \"Page header name(s) and value(s)\": \"Headers名称和值\",\n  \"Site Picker\": \"网站选择器\",\n  \"Displays links for selecting a different site.\": \"显示用于选择其他站点的链接。\",\n  \"Unknown component\": \"未知组件\",\n  \"View Bag\": \"查看包\",\n  \"Stores custom template properties.\": \"存储自定义模板属性。\",\n  \"By :name\": \"作者 :name\",\n  \"The theme ':name' is not found.\": \"未找到主题 ':name'\",\n  \"Manage the front-end theme and customization options.\": \"管理前端主题和自定义选项。\",\n  \"Site Theme\": \"前端主题\",\n  \"Properties\": \"属性\",\n  \"Publish\": \"发布\",\n  \"Advanced\": \"高级\",\n  \"Name\": \"名称\",\n  \"New theme name\": \"新主题名称\",\n  \"Author Name\": \"作者姓名\",\n  \"Person or company name\": \"个人或公司名称\",\n  \"Directory Name\": \"目录名\",\n  \"The destination theme directory\": \"目标主题目录\",\n  \"Description\": \"描述\",\n  \"Theme description\": \"主题描述\",\n  \"Homepage\": \"主页\",\n  \"Website URL\": \"网站网址\",\n  \"Author Code\": \"作者代码\",\n  \"A unique code for the author used for distribution\": \"用于分发的作者的唯一代码\",\n  \"Theme Code\": \"主题代码\",\n  \"A unique code for this theme used for distribution\": \"此主题用于分发的唯一代码\",\n  \"Parent Theme\": \"父主题\",\n  \"Database Mode\": \"保存数据库中的更改\",\n  \"Save changes to this theme in the database instead of the filesystem\": \"在数据库中存储对该主题的更改\",\n  \"-- no parent --\": \"-- 没有父级 --\",\n  \"Theme\": \"主题\",\n  \"Folders\": \"文件夹\",\n  \"Please select the theme folders you would like to export\": \"请选择您要导出的主题文件夹\",\n  \"Theme archive file\": \"主题存档文件\",\n  \"Overwrite existing files\": \"覆盖已存在的文件\",\n  \"Untick this box to only import new files\": \"取消勾选以仅导入新文件\",\n  \"Please select the theme folders you would like to import\": \"请选择你想要导入的主题文件夹\",\n  \"Activate\": \"激活\",\n  \"Customize\": \"自定义\",\n  \"Duplicate\": \"复制\",\n  \"Duplicate Theme\": \"复制主题\",\n  \"Theme Duplicated!\": \"复制主题成功！\",\n  \"Manage\": \"管理\",\n  \"Manage Theme\": \"管理主题\",\n  \"Edit Properties\": \"编辑属性\",\n  \"Save Properties\": \"保存属性\",\n  \"Import\": \"导入\",\n  \"Import Theme\": \"导入主题\",\n  \"Theme Imported!\": \"成功导入主题\",\n  \"Export\": \"导出\",\n  \"Export Theme\": \"导出主题\",\n  \"Delete\": \"删除\",\n  \"Delete this theme? It cannot be undone!\": \"要删除这个主题吗？此操作不能被撤销！\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"无法删除活动主题，请先尝试激活另一个主题。\",\n  \"Theme deleted!\": \"主题已删除！\",\n  \"Create Theme\": \"创建主题\",\n  \"Create\": \"创建\",\n  \"Create a New Blank Theme\": \"创建一个新的空白主题\",\n  \"Theme Created!\": \"主题创建！\",\n  \"Please specify a name for the theme.\": \"请指定主题名称。\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"名称只能包含数字、拉丁字母和以下符号：_-\",\n  \"Desired theme directory already exists.\": \"所需的主题目录已经存在。\",\n  \"Theme directory\": \"主题目录\",\n  \"Provide a new directory name for the duplicated theme.\": \"为重复的主题提供一个新的目录名。\",\n  \"Find More Themes\": \"查找更多主题\",\n  \"Saving Theme...\": \"保存主题...\",\n  \"Return to Themes List\": \"返回主题列表\",\n  \"No themes found\": \"没有找到主题\",\n  \"Seed Theme\": \"迁移主题\",\n  \"Seed the specified theme with blueprints, translations and data.\": \"用蓝图、翻译和数据为指定主题迁移。\",\n  \"Theme Seeded!\": \"主题迁移完成！\",\n  \"Select Page Link\": \"选择页面链接\",\n  \"Search all references...\": \"搜索所有引用...\",\n  \"CMS Page\": \"CMS页面\",\n  \"Link\": \"链接\",\n  \"Please select a CMS page\": \"请选择CMS页面\",\n  \"Please select a page reference\": \"请选择页面引用\",\n  \"Please enter a valid URL\": \"请输入有效的URL\",\n  \"Delete Theme\": \"删除主题\",\n  \"Activate Theme\": \"激活主题\",\n  \"Manage Partials\": \"管理部件\",\n  \"No Title\": \"无标题\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"在页面或者布局代码中组件的唯一名称\",\n  \"Alias\": \"别名\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"需要组件别名, 且只能包含拉丁字符, 数字和下划线. 别名必须以拉丁字符开头.\",\n  \"Unnamed\": \"未命名\",\n  \"No description provided\": \"没有描述\",\n  \"No snippets found\": \"找不到代码片段\",\n  \"Search...\": \"检索...\",\n  \"Snippet with the requested code :code was not found in the theme.\": \"代码段与请求的 code:code 没有在主题中找到。\",\n  \"Snippet\": \"代码片段\",\n  \"Enter a code to make this partial available as a snippet in content editors.\": \"输入一个代码，使其部分可用作“静态页面”插件中的代码段。\",\n  \"Please enter the snippet code\": \"请输入代码片段代码\",\n  \"Snippet Code\": \"Snippet code\",\n  \"The name is displayed in the snippet list in the editor when a snippet is added.\": \"该名称显示在“静态页面”侧边栏的代码段列表中，并在添加代码段时显示在该页面上。\",\n  \"Please enter the snippet name\": \"请输入代码片段名称\",\n  \"Property Title\": \"性质\",\n  \"Please provide the property title\": \"请输入属性标题\",\n  \"Code\": \"编码\",\n  \"Please provide the property name\": \"请输入属性名称\",\n  \"Property code should start with a Latin letter and can contain only Latin letters, digits and underscores\": \"属性代码应以字母开头，只能包含字母和数字\",\n  \"Type\": \"类型\",\n  \"Select\": \"选择\",\n  \"String\": \"字符串\",\n  \"Checkbox\": \"检查框\",\n  \"Dropdown\": \"下拉框\",\n  \"Please select the property type\": \"请选择问题类型\",\n  \"Default\": \"默认\",\n  \"Options\": \"选项\",\n  \"Define a Snippet Partial\": \"定义代码片段\",\n  \"Invalid drop-down option key: :key. Option keys can contain only digits, Latin letters and characters _ and -\": \"无效的下拉选项 key: :key。 选项键只能包含数字，字母和字符 _ 和 -\",\n  \"The description is displayed in the snippet list in the editor when a snippet is added.\": \"当添加代码片段时，描述会显示在编辑器中的代码片段列表。\",\n  \"Details\": \"详情\"\n}"
  },
  {
    "path": "modules/cms/lang/zh-tw/lang.php",
    "content": "<?php return [\n  'cms_object' => [\n    'invalid_file' => '不合法的檔案名: :name. 檔案名只能包括字母或數字, _, - 和 .. 一些正確的檔案名: page.htm, page, subdirectory/page',\n    'invalid_property' => '屬性 \\':name\\' 不能設定',\n    'file_already_exists' => '檔案 \\':name\\' 已經存在.',\n    'error_saving' => '保存檔案 \\':name\\' 錯誤. 請檢查寫權限.',\n    'error_creating_directory' => '建立檔案夾 :name 錯誤. 請檢查寫權限.',\n    'invalid_file_extension' => '不合法的檔案擴展: :invalid. 允許的擴展: :allowed.',\n    'error_deleting' => '刪除模板檔案 \\':name\\' 錯誤. 請檢查寫權限.',\n    'delete_success' => '模板成功刪除: :count.',\n    'file_name_required' => '需要檔案名字串.',\n  ],\n  'dashboard' => [\n    'active_theme' => [\n      'online' => '在線',\n      'maintenance' => '維護中',\n    ],\n  ],\n  'theme' => [\n    'active' => [\n      'not_set' => '活動主題沒設定.',\n      'not_found' => '活動主題找不到.',\n    ],\n    'edit' => [\n      'not_set' => '編輯主題沒設定.',\n      'not_found' => '編輯主題沒找到.',\n      'not_match' => '您嘗試訪問的對象不屬於正在編輯的主題. 請重載頁面.',\n    ],\n  ],\n  'maintenance' => [],\n  'page' => [\n    'not_found_name' => '頁面 \\':name\\' 找不到',\n    'not_found' => [\n      'label' => '頁面找不到',\n      'help' => '請求的頁面找不到.',\n    ],\n    'custom_error' => [\n      'label' => '頁面錯誤',\n      'help' => '很抱歉, 有一些地方發生了錯誤導致頁面不能顯示.',\n    ],\n    'menu_label' => '頁面',\n    'unsaved_label' => '未保存頁面',\n    'no_list_records' => '找不到頁面',\n    'new' => '新頁面',\n    'invalid_url' => '不合法的URL格式. URL可以正斜槓開頭, 包含數字, 拉丁字母和下面的字元: ._-[]:?|/+*^$',\n    'delete_confirm_multiple' => '真的想要刪除選擇的頁面嗎?',\n    'delete_confirm_single' => '真的想要刪除這個頁面嗎?',\n    'no_layout' => '-- 沒有佈局 --',\n    'title' => '頁面標題',\n    'url' => '頁面網址',\n    'file_name' => '頁面檔案名稱',\n  ],\n  'layout' => [\n    'not_found_name' => '佈局 \\':name\\' 找不到',\n    'menu_label' => '佈局',\n    'unsaved_label' => '未保存佈局',\n    'no_list_records' => '找不到佈局',\n    'new' => '新佈局',\n    'delete_confirm_multiple' => '您真的想要刪除選取的佈局?',\n    'delete_confirm_single' => '您真的想要刪除這個佈局?',\n  ],\n  'partial' => [\n    'not_found_name' => '部件 \\':name\\' 找不到.',\n    'invalid_name' => '不合法的部件名: :name.',\n    'menu_label' => '部件',\n    'unsaved_label' => '未保存的部件',\n    'no_list_records' => '找不到部件',\n    'delete_confirm_multiple' => '您真的想要刪除選擇的部件?',\n    'delete_confirm_single' => '您真的想要刪除這個部件?',\n    'new' => '新部件',\n  ],\n  'content' => [\n    'not_found_name' => '內容檔案 \\':name\\' 找不到.',\n    'menu_label' => '內容',\n    'unsaved_label' => '未保存內容',\n    'no_list_records' => '找不到內容檔案',\n    'delete_confirm_multiple' => '您真的想要刪除選取的檔案或目錄嗎?',\n    'delete_confirm_single' => '您真的想要刪除這個內容檔案?',\n    'new' => '新內容檔案',\n  ],\n  'ajax_handler' => [\n    'invalid_name' => '不合法的 AJAX 處理器: :name.',\n    'not_found' => ' AJAX 處理器 \\':name\\' 找不到.',\n  ],\n  'cms' => [\n    'menu_label' => 'CMS',\n  ],\n  'sidebar' => [\n    'add' => '增加',\n    'search' => '搜尋...',\n  ],\n  'editor' => [\n    'settings' => '設定',\n    'title' => '標題',\n    'new_title' => '新檔案標題',\n    'url' => 'URL',\n    'filename' => '檔案名',\n    'layout' => '佈局',\n    'description' => '描述',\n    'preview' => '預覽',\n    'meta' => 'Meta',\n    'meta_title' => 'Meta 標題',\n    'meta_description' => 'Meta 描述',\n    'markup' => 'Markup',\n    'code' => '代碼',\n    'content' => '內容',\n    'hidden' => '隱藏',\n    'hidden_comment' => '隱藏頁面只能被登錄的後台使用者訪問.',\n    'enter_fullscreen' => '進入全螢幕模式',\n    'exit_fullscreen' => '退出全螢幕模式',\n  ],\n  'asset' => [\n    'menu_label' => '資源',\n    'unsaved_label' => '未保存的資源',\n    'drop_down_add_title' => '增加...',\n    'drop_down_operation_title' => '動作...',\n    'upload_files' => '上傳檔案',\n    'create_file' => '新建檔案',\n    'create_directory' => '新建目錄',\n    'directory_popup_title' => '新目錄',\n    'directory_name' => '目錄名',\n    'rename' => '重新命名',\n    'delete' => '刪除',\n    'move' => '移動',\n    'select' => '選擇',\n    'new' => '新檔案',\n    'rename_popup_title' => '重新命名',\n    'rename_new_name' => '新名稱',\n    'invalid_path' => '路徑名稱只能包含數字, 拉丁字母和以下字元: _-/',\n    'error_deleting_file' => '刪除檔案 :name 錯誤.',\n    'error_deleting_dir_not_empty' => '刪除目錄 :name 錯誤. 目錄不為空.',\n    'error_deleting_dir' => '刪除檔案 :name 錯誤.',\n    'invalid_name' => '名稱只能包含數字, 拉丁字母, 空格和以下字元: _-',\n    'original_not_found' => '原始檔案或目錄找不到',\n    'already_exists' => '檔案或目錄已存在',\n    'error_renaming' => '重新命名檔案或目錄錯誤',\n    'name_cant_be_empty' => '名稱不能為空',\n    'too_large' => '上傳的檔案太大. 最大檔案大小是 :max_size',\n    'type_not_allowed' => '只有下面的檔案類型是允許的: :allowed_types',\n    'file_not_valid' => '檔案不合法',\n    'error_uploading_file' => '上傳檔案錯誤 \\':name\\': :error',\n    'move_please_select' => '請選擇',\n    'move_destination' => '目標目錄',\n    'move_popup_title' => '移動資源',\n    'move_button' => '移動',\n    'selected_files_not_found' => '選擇的檔案找不到',\n    'select_destination_dir' => '請選擇目標目錄',\n    'destination_not_found' => '目標目錄找不到',\n    'error_moving_file' => '移動檔案 :file 錯誤',\n    'error_moving_directory' => '移動目錄 :dir 錯誤',\n    'error_deleting_directory' => '刪除原始目錄 :dir 錯誤',\n    'path' => '路徑',\n  ],\n  'component' => [\n    'menu_label' => '組件',\n    'invalid_request' => '模板不能保存, 因為非法組件數據.',\n    'no_records' => '找不到組件',\n    'not_found' => '組件 \\':name\\' 找不到.',\n    'method_not_found' => '組件 \\':name\\' 不包含方法 \\':method\\'.',\n  ],\n  'template' => [\n    'invalid_type' => '未知模板類型.',\n    'not_found' => '請求模板找不到.',\n    'saved' => '模板保存成功.',\n  ],\n  'permissions' => [\n    'name' => 'Cms',\n    'manage_content' => '管理內容',\n    'manage_assets' => '管理資源',\n    'manage_pages' => '管理頁面',\n    'manage_layouts' => '管理佈局',\n    'manage_partials' => '管理部件',\n    'manage_themes' => '管理主題',\n  ],\n];\n"
  },
  {
    "path": "modules/cms/lang/zh-tw.json",
    "content": "{\n  \"Themes\": \"主題\",\n  \"Manage Themes\": \"管理主題\",\n  \"Customize Theme\": \"自訂主題\",\n  \"Manage Maintenance Mode\": \"管理維護模式\",\n  \"View Website During Maintenance\": \"在維護期間查看網站\",\n  \"Manage Content\": \"管理內容\",\n  \"Manage Asset Files\": \"管理資產文件\",\n  \"Manage Pages\": \"管理頁面\",\n  \"Manage Layouts\": \"管理佈局\",\n  \"Configure the maintenance mode page and toggle the setting.\": \"設定維護模式頁面和開關設定.\",\n  \"Maintenance Mode\": \"維護模式\",\n  \"Select the page to show when maintenance mode is activated.\": \"當啟用時, 網站訪問者會看到下述頁面.\",\n  \"Enable maintenance mode\": \"啟用維護模式\",\n  \"The theme ':name' is not found.\": \"主題 ':name' 沒找到.\",\n  \"Manage the front-end theme and customization options.\": \"預覽安裝的主題, 選擇一個活動主題.\",\n  \"Site Theme\": \"前端主題\",\n  \"Properties\": \"屬性\",\n  \"Name\": \"名稱\",\n  \"New theme name\": \"新主題名稱\",\n  \"Author Name\": \"作者\",\n  \"Person or company name\": \"人或公司名\",\n  \"Directory Name\": \"目錄名\",\n  \"The destination theme directory\": \"目標主題目錄\",\n  \"Description\": \"描述\",\n  \"Theme description\": \"主題描述\",\n  \"Homepage\": \"主頁\",\n  \"Website URL\": \"網站地址\",\n  \"Theme Code\": \"代碼\",\n  \"A unique code for this theme used for distribution\": \"發行主題的唯一碼\",\n  \"Theme\": \"主題\",\n  \"Folders\": \"檔案夾\",\n  \"Please select the theme folders you would like to export\": \"請選擇您想要導入的主題檔案夾\",\n  \"Theme archive file\": \"主題存檔檔案\",\n  \"Overwrite existing files\": \"覆蓋已經存在的檔案\",\n  \"Untick this box to only import new files\": \"取消勾選, 只導入新檔案\",\n  \"Please select the theme folders you would like to import\": \"請選擇您想要導入的主題檔案夾\",\n  \"Activate\": \"啟用\",\n  \"Customize\": \"自訂\",\n  \"Duplicate\": \"複製\",\n  \"Duplicate Theme\": \"複製主題\",\n  \"Theme Duplicated!\": \"複製主題成功!\",\n  \"Manage\": \"管理\",\n  \"Manage Theme\": \"管理主題\",\n  \"Edit Properties\": \"編輯屬性\",\n  \"Save Properties\": \"保存屬性\",\n  \"Import\": \"導入\",\n  \"Import Theme\": \"導入主題\",\n  \"Theme Imported!\": \"成功導入主題!\",\n  \"Export\": \"導出\",\n  \"Export Theme\": \"導出主題\",\n  \"Delete\": \"刪除\",\n  \"Delete this theme? It cannot be undone!\": \"您確定刪除這個主題嗎? 這個操作不能撤銷!\",\n  \"Cannot delete the active theme, try making another theme active first.\": \"不能刪除活動主題, 請先嘗試另外一個主題.\",\n  \"Theme deleted!\": \"刪除主題成功!\",\n  \"Create Theme\": \"建立主題\",\n  \"Create\": \"建立\",\n  \"Create a New Blank Theme\": \"建立新的空白主題\",\n  \"Theme Created!\": \"建立主題成功!\",\n  \"Please specify a name for the theme.\": \"請指點主題名.\",\n  \"Name can contain only digits, Latin letters and the following symbols: _-\": \"名稱只能包含數字, 拉丁字母和以下字元: _-\",\n  \"Desired theme directory already exists.\": \"主題目錄已存在.\",\n  \"Theme directory\": \"主題目錄\",\n  \"Provide a new directory name for the duplicated theme.\": \"提供複製主題的新聞目錄名.\",\n  \"Find More Themes\": \"在 OctoberCMS 主題商店中搜尋更多主題\",\n  \"Saving Theme...\": \"保存主題...\",\n  \"Return to Themes List\": \"返回主題列表\",\n  \"A unique name given to this component when using it in the page or layout code.\": \"這個組件的唯一名稱, 在頁面或者佈局代碼中.\",\n  \"Alias\": \"別名\",\n  \"Component aliases are required and can contain only Latin symbols, digits, and underscores. The aliases should start with a Latin symbol.\": \"需要組件別名, 且只能包含拉丁字元, 數字和下劃線. 別名必須以拉丁字元開頭.\",\n  \"Unnamed\": \"未命名的\",\n  \"No description provided\": \"沒有描述\"\n}"
  },
  {
    "path": "modules/cms/models/MaintenanceSetting.php",
    "content": "<?php namespace Cms\\Models;\n\nuse Site;\nuse System;\nuse BackendAuth;\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\Theme;\nuse ApplicationException;\nuse System\\Models\\SettingModel;\nuse Exception;\n\n/**\n * MaintenanceSetting for maintenance mode\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MaintenanceSetting extends SettingModel\n{\n    use \\October\\Rain\\Database\\Traits\\Multisite;\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string settingsCode is a unique code\n     */\n    public $settingsCode = 'cms_maintenance_settings';\n\n    /**\n     * @var mixed settingsFields definitions\n     */\n    public $settingsFields = 'fields.yaml';\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [];\n\n    /**\n     * @var array propagatable fields\n     */\n    protected $propagatable = [];\n\n    /**\n     * initSettingsData initializes the seed data for this model. This only executes when the\n     * model is first created or reset to default.\n     * @return void\n     */\n    public function initSettingsData()\n    {\n        $this->is_enabled = false;\n    }\n\n    /**\n     * isEnabled returns true if maintenance mode should be used\n     */\n    public static function isEnabled(): bool\n    {\n        if (!System::hasDatabase()) {\n            return false;\n        }\n\n        if (BackendAuth::userHasAccess('general.view_offline')) {\n            return false;\n        }\n\n        return self::get('is_enabled', false);\n    }\n\n    /**\n     * isEnabledForBackend\n     */\n    public static function isEnabledForBackend(): bool\n    {\n        if (!System::hasDatabase()) {\n            return false;\n        }\n\n        if (BackendAuth::userHasAccess('general.backend.view_offline')) {\n            return false;\n        }\n\n        return self::get('is_enabled', false);\n    }\n\n    /**\n     * getCmsPageOptions\n     */\n    public function getCmsPageOptions()\n    {\n        if (!$theme = $this->findTargetTheme()) {\n            throw new ApplicationException('Unable to find the active theme.');\n        }\n\n        return array_map(function($code) use ($theme) {\n            return \"{$theme->getDirName()}/{$code}\";\n        }, Page::listInTheme($theme)->lists('fileName', 'fileName'));\n    }\n\n    /**\n     * beforeValidate ensures each theme has its own CMS page, store it inside a mapping array.\n     */\n    public function beforeValidate()\n    {\n        if (!$theme = $this->findTargetTheme()) {\n            throw new ApplicationException('Unable to find the active theme.');\n        }\n\n        $themeMap = (array) $this->theme_map;\n        $themeMap[$theme->getDirName()] = $this->cms_page;\n        $this->theme_map = $themeMap;\n    }\n\n    /**\n     * afterFetch restores the CMS page found in the mapping array.\n     */\n    public function afterFetch()\n    {\n        if (\n            ($theme = $this->findTargetTheme())\n            && ($themeMap = array_get($this->attributes, 'theme_map'))\n            && ($cmsPage = array_get($themeMap, $theme->getDirName()))\n        ) {\n            $this->cms_page = $cmsPage;\n        }\n    }\n\n    /**\n     * findTargetTheme will attempt to use the edit theme, with active theme fallback.\n     */\n    protected function findTargetTheme()\n    {\n        try {\n            return Theme::getEditTheme();\n        }\n        catch (Exception $ex) {\n            return Theme::getActiveTheme();\n        }\n    }\n\n    /**\n     * isMultisiteEnabled allows for programmatic toggling\n     * @return bool\n     */\n    public function isMultisiteEnabled()\n    {\n        return Site::hasFeature('cms_maintenance_setting');\n    }\n}\n"
  },
  {
    "path": "modules/cms/models/PageLookupItem.php",
    "content": "<?php namespace Cms\\Models;\n\nuse App;\nuse Url;\nuse Event;\nuse Model;\nuse Request;\nuse October\\Contracts\\Element\\FormElement;\nuse Cms\\Classes\\Theme;\n\n/**\n * PageLookupItem used by the pagefinder form widget\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PageLookupItem extends Model\n{\n    /**\n     * @var bool singleMode only allows items to be selected that resolve to a single URL.\n     */\n    public $singleMode = false;\n\n    /**\n     * @var bool allowCustomUrl controls whether the free-form URL option appears.\n     */\n    public $allowCustomUrl = true;\n\n    /**\n     * @var array|null allowedTypes restricts the type dropdown to these types only.\n     */\n    public $allowedTypes = null;\n\n    /**\n     * @var array|null excludedTypes removes these types from the dropdown.\n     */\n    public $excludedTypes = null;\n\n    /**\n     * @var bool nesting determines if auto-generated menu items could have subitems.\n     */\n    public $nesting = false;\n\n    /**\n     * @var array|bool sites includes a lookup for other sites.\n     */\n    public $sites = false;\n\n    /**\n     * @var array pageTypeInfoCache\n     */\n    protected static $pageTypeInfoCache = [];\n\n    /**\n     * SCHEMA_METADATA_KEYS are attribute keys used internally by the schema\n     * and should not be treated as URL parameters.\n     */\n    const SCHEMA_METADATA_KEYS = ['type', 'reference', 'url', 'cms_page', 'title', 'search'];\n\n    /**\n     * defineFormFields\n     */\n    public function defineFormFields(FormElement $host)\n    {\n        $host->addFormField('search')->displayAs('partial')->path('field_page_search');\n        $host->addFormField('type', 'Type')->displayAs('dropdown')->span('row')->spanClass('col-4');\n        $host->addFormField('url', 'URL')->dependsOn('type')->span('row')->spanClass('col-8');\n        $host->addFormField('reference', 'Reference')->displayAs('dropdown')->dependsOn('type')->span('row')->spanClass('col-8');\n        $host->addFormField('cms_page', 'CMS Page')->displayAs('dropdown')->dependsOn('type');\n    }\n\n    /**\n     * filterFields used by the form controller\n     */\n    public function filterFields($fields)\n    {\n        if ($this->type === 'url') {\n            $fields->reference->hidden();\n            $fields->cms_page->hidden();\n        }\n        elseif ($this->type === 'cms-page') {\n            $fields->url->hidden();\n            $fields->cms_page->hidden();\n        }\n        else {\n            $fields->url->hidden();\n        }\n\n        if (!$this->typeInfoHasCmsPages()) {\n            $fields->cms_page->hidden();\n        }\n\n        if (!$this->typeInfoHasAttribute('references')) {\n            $fields->reference->disabled();\n        }\n    }\n\n    /**\n     * typeInfoHasAttribute\n     */\n    protected function typeInfoHasAttribute($attribute): bool\n    {\n        return array_key_exists($attribute, $this->getTypeInfo((string) $this->type));\n    }\n\n    /**\n     * typeInfoHasCmsPages checks if type info has non-empty cmsPages\n     */\n    protected function typeInfoHasCmsPages(): bool\n    {\n        return !empty($this->getTypeInfo((string) $this->type)['cmsPages']);\n    }\n\n    /**\n     * getCmsPageAttribute allows access to cms_page and cmsPage\n     */\n    public function getCmsPageAttribute()\n    {\n        return $this->attributes['cms_page'] ?? null;\n    }\n\n    /**\n     * getTypeOptions\n     */\n    public function getTypeOptions()\n    {\n        $result = [\n            'url' => 'URL',\n        ];\n\n        /**\n         * @event cms.pageLookup.listTypes\n         * Lists available types for locating CMS pages.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.pageLookup.listTypes', function() {\n         *         return [\n         *             'blog-post' => 'Blog Post',\n         *             'blog-category' => 'Blog Category',\n         *             'blog-posts' => ['label' => 'All Blog Posts', 'nesting' => true],\n         *         ];\n         *     });\n         *\n         */\n        $apiResult = Event::fire('cms.pageLookup.listTypes');\n\n        if (is_array($apiResult)) {\n            foreach ($apiResult as $typeList) {\n                if (!is_array($typeList)) {\n                    continue;\n                }\n\n                foreach ($typeList as $typeCode => $typeName) {\n                    $isNested = false;\n\n                    if (is_array($typeName)) {\n                        // Named-key format: ['label' => '...', 'nesting' => true]\n                        if (isset($typeName['label'])) {\n                            $isNested = $typeName['nesting'] ?? false;\n                            $typeName = $typeName['label'];\n                        }\n                        // Legacy format: ['Label', true]\n                        elseif (\n                            count($typeName) > 1 &&\n                            is_bool($typeName[array_key_last($typeName)])\n                        ) {\n                            $isNested = array_pop($typeName);\n                            $typeName = array_shift($typeName);\n                        }\n                    }\n\n                    if (!$typeName) {\n                        continue;\n                    }\n\n                    if ($this->singleMode && $isNested) {\n                        continue;\n                    }\n\n                    $result[$typeCode] = $typeName;\n                }\n            }\n        }\n\n        // Filter out types that require CMS pages but have none available\n        foreach ($result as $typeCode => $typeName) {\n            if ($typeCode === 'url') {\n                continue;\n            }\n\n            $typeInfo = $this->getTypeInfo($typeCode);\n            if (array_key_exists('cmsPages', $typeInfo) && empty($typeInfo['cmsPages'])) {\n                unset($result[$typeCode]);\n            }\n        }\n\n        // Remove URL type if custom URLs are disabled\n        if (!$this->allowCustomUrl) {\n            unset($result['url']);\n        }\n\n        // Apply type whitelist\n        if ($this->allowedTypes !== null) {\n            $result = array_intersect_key($result, array_flip($this->allowedTypes));\n        }\n\n        // Apply type blacklist\n        if ($this->excludedTypes !== null) {\n            $result = array_diff_key($result, array_flip($this->excludedTypes));\n        }\n\n        return $result;\n    }\n\n    /**\n     * getTypeLabel\n     */\n    public function getTypeLabel()\n    {\n        return $this->getTypeOptions()[$this->type] ?? '';\n    }\n\n    /**\n     * getReferenceOptions\n     */\n    public function getReferenceOptions()\n    {\n        return $this->buildReferenceOptions(\n            $this->getTypeInfo((string) $this->type)['references'] ?? []\n        );\n    }\n\n    /**\n     * getReferenceLabel\n     */\n    public function getReferenceLabel()\n    {\n        $label = $this->getReferenceOptions()[$this->reference] ?? '';\n        $label = str_replace('&nbsp;', '', $label);\n        return $label;\n    }\n\n    /**\n     * getCmsPageOptions\n     */\n    public function getCmsPageOptions()\n    {\n        return $this->getTypeInfo((string) $this->type)['cmsPages'] ?? [];\n    }\n\n    /**\n     * buildReferenceOptions handles reference options where outcome can be a single\n     * dimension array or an array with [title, items]\n     */\n    protected function buildReferenceOptions($references)\n    {\n        if (count($references) === count($references, COUNT_RECURSIVE)) {\n            return $references;\n        }\n\n        $indent = '&nbsp;&nbsp;&nbsp;';\n        $options = [];\n\n        $iterator = function($items, $depth = 0) use (&$iterator, &$options, $indent) {\n            foreach ($items as $code => $itemData) {\n                if (is_array($itemData)) {\n                    $options[$code] = str_repeat($indent, $depth) . ($itemData['title'] ?? '');\n                    if (!empty($itemData['items'])) {\n                        $iterator($itemData['items'], $depth + 1);\n                    }\n                }\n                elseif (is_string($itemData)) {\n                    $options[$code] = str_repeat($indent, $depth) . $itemData;\n                }\n            }\n\n            return $options;\n        };\n\n        return $iterator($references);\n    }\n\n    /**\n     * getTypeInfo\n     */\n    public function getTypeInfo(string $type): array\n    {\n        if (!$type) {\n            return [];\n        }\n\n        if (array_key_exists($type, static::$pageTypeInfoCache)) {\n            return static::$pageTypeInfoCache[$type];\n        }\n\n        if ($type === 'url') {\n            $result = [];\n        }\n        else {\n            $result = $this->getTypeInfoFromEvent($type);\n        }\n\n        return static::$pageTypeInfoCache[$type] = $result;\n    }\n\n    /**\n     * getTypeInfoFromEvent\n     */\n    protected function getTypeInfoFromEvent(string $type): array\n    {\n        $result = [];\n        $apiResult = Event::fire('cms.pageLookup.getTypeInfo', [$type]);\n\n        if (!is_array($apiResult)) {\n            return $result;\n        }\n\n        foreach ($apiResult as $typeInfo) {\n            if (!is_array($typeInfo)) {\n                continue;\n            }\n\n            foreach ($typeInfo as $name => $value) {\n                // Convert Page object to key value pair\n                if ($name === 'cmsPages') {\n                    $cmsPages = [];\n\n                    foreach ($value as $page) {\n                        $baseName = $page->getBaseFileName();\n                        $pos = strrpos($baseName, '/');\n\n                        $dir = $pos !== false ? substr($baseName, 0, $pos).' / ' : null;\n                        $cmsPages[$baseName] = strlen($page->title)\n                            ? $dir . $page->title\n                            : $baseName;\n                    }\n\n                    $value = $cmsPages;\n                }\n\n                $result[$name] = $value;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * resolveItem resolves the page link by firing the cms.pageLookup.resolveItem\n     * event. Listeners should return null if they do not handle the given type.\n     *\n     * Expected return array keys:\n     * - url (string) - the resolved URL\n     * - isActive (bool) - whether the item matches the current page\n     * - title (string) - display title override\n     * - mtime (mixed) - last modification time\n     * - code (string) - page code identifier\n     * - viewBag (array) - view bag data\n     * - sites (array) - multi-site URL alternatives\n     * - items (array) - child items for nested types\n     *\n     * Additional keys are stored as item attributes.\n     */\n    public function resolveItem()\n    {\n        if ($this->type === 'url') {\n            return $this;\n        }\n\n        $currentUrl = mb_strtolower(Url::to(Request::path()));\n        $defaultTheme = App::runningInBackend()\n            ? Theme::getEditTheme()\n            : Theme::getActiveTheme();\n\n        $apiResult = Event::fire('cms.pageLookup.resolveItem', [\n            $this->type,\n            $this,\n            $currentUrl,\n            $defaultTheme\n        ]);\n\n        if (!is_array($apiResult)) {\n            return $this;\n        }\n\n        foreach ($apiResult as $itemInfo) {\n            if (!is_array($itemInfo)) {\n                continue;\n            }\n\n            $this->title = $itemInfo['title'] ?? $this->title;\n            $this->url = $itemInfo['url'] ?? $this->url;\n            $this->isActive = $itemInfo['isActive'] ?? false;\n            $this->viewBag = $itemInfo['viewBag'] ?? [];\n            $this->code = $itemInfo['code'] ?? null;\n            $this->mtime = $itemInfo['mtime'] ?? null;\n            $this->sites = $itemInfo['sites'] ?? null;\n\n            if (isset($itemInfo['items']) && is_array($itemInfo['items'])) {\n                $this->items = $this->buildChildItems($itemInfo['items']);\n            }\n\n            // Merge only extra keys (not handled above) into attributes\n            $knownKeys = ['title', 'url', 'isActive', 'viewBag', 'code', 'mtime', 'sites', 'items'];\n            $this->attributes = array_merge(\n                $this->attributes,\n                array_diff_key($itemInfo, array_flip($knownKeys))\n            );\n        }\n\n        return $this;\n    }\n\n    /**\n     * buildChildItems\n     */\n    protected function buildChildItems($items)\n    {\n        $result = [];\n\n        foreach ($items as $item) {\n            $reference = new static;\n            $reference->type = $item['type'] ?? null;\n            $reference->title = $item['title'] ?? '-- no title --';\n            $reference->url = $item['url'] ?? '#';\n            $reference->isActive = $item['isActive'] ?? false;\n            $reference->viewBag = $item['viewBag'] ?? [];\n            $reference->code = $item['code'] ?? null;\n            $reference->mtime = $item['mtime'] ?? null;\n            $reference->sites = $item['sites'] ?? null;\n\n            if (isset($item['items'])) {\n                $reference->items = $this->buildChildItems($item['items']);\n            }\n\n            $result[] = $reference;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getPreviewUrl returns a URL suitable for display in the backend.\n     * Shows stored param values where available, :paramName placeholders otherwise.\n     */\n    public function getPreviewUrl(): string\n    {\n        if ($this->type === 'url') {\n            return $this->url ?? '';\n        }\n\n        $pageCode = $this->cmsPage ?: ($this->type === 'cms-page' ? $this->reference : null);\n        if (!$pageCode) {\n            return '';\n        }\n\n        $theme = App::runningInBackend()\n            ? Theme::getEditTheme()\n            : Theme::getActiveTheme();\n\n        $page = \\Cms\\Classes\\Page::loadCached($theme, $pageCode);\n        if (!$page || !$page->url) {\n            return '';\n        }\n\n        $segments = \\October\\Rain\\Router\\Helper::segmentizeUrl($page->url);\n        $params = $this->getSchemaParams();\n\n        $result = [];\n        foreach ($segments as $segment) {\n            if (strpos($segment, ':') !== 0) {\n                $result[] = $segment;\n                continue;\n            }\n\n            $paramName = \\October\\Rain\\Router\\Helper::getParameterName($segment);\n\n            if (isset($params[$paramName]) && strlen($params[$paramName])) {\n                $result[] = $params[$paramName];\n            }\n            else {\n                $result[] = ':' . $paramName;\n            }\n        }\n\n        return '/' . implode('/', $result);\n    }\n\n    /**\n     * getSchemaParams returns the URL params stored in the october:// schema,\n     * filtering out known metadata keys.\n     */\n    public function getSchemaParams(): array\n    {\n        return static::extractUrlParams($this->attributes);\n    }\n\n    /**\n     * extractUrlParams returns URL-relevant parameters from an attributes\n     * array, filtering out known schema metadata keys.\n     */\n    public static function extractUrlParams(array $attributes): array\n    {\n        $params = [];\n        foreach ($attributes as $key => $value) {\n            if (!in_array($key, static::SCHEMA_METADATA_KEYS) && is_scalar($value)) {\n                $params[$key] = $value;\n            }\n        }\n        return $params;\n    }\n\n    /**\n     * resolveFromSchema\n     */\n    public static function resolveFromSchema(string $address, array $options = []): ?PageLookupItem\n    {\n        $item = static::fromSchema($address);\n        if (!$item) {\n            return null;\n        }\n\n        $item->nesting = (bool) array_get($options, 'nesting', false);\n        $item->sites = (bool) array_get($options, 'sites', false);\n\n        // Merge runtime params into attributes\n        if ($runtimeParams = array_get($options, 'params', [])) {\n            $item->attributes = array_merge($item->attributes, $runtimeParams);\n        }\n\n        $item->resolveItem();\n\n        // Append fragment to resolved URL\n        if ($item->fragment && $item->url) {\n            $item->url .= '#' . $item->fragment;\n        }\n\n        return $item;\n    }\n\n    /**\n     * fromSchema\n     */\n    public static function fromSchema(string $address): ?PageLookupItem\n    {\n        $decoded = self::decodeSchema($address);\n        if (!$decoded) {\n            return null;\n        }\n\n        $item = new static;\n        $item->type = $decoded['type'];\n\n        if ($item->type === 'url') {\n            $item->url = $decoded['url'] ?? '';\n        }\n        else {\n            $item->reference = $decoded['reference'];\n            $item->fragment = $decoded['fragment'] ?? null;\n            $item->attributes = array_merge($decoded['params'], $item->attributes);\n        }\n\n        return $item;\n    }\n\n    /**\n     * decodeSchema will decode an October CMS protocol, e.g.\n     * `october://cms-page/about/home/index?target=_blank`\n     */\n    public static function decodeSchema(string $address): array\n    {\n        $parts = parse_url($address);\n        $schema = $parts['scheme'] ?? null;\n        $target = $parts['host'] ?? null;\n        $type = $parts['user'] ?? '';\n        parse_str($parts['query'] ?? '', $params);\n\n        if ($schema === 'october' && $target === 'link') {\n            return [\n                'type' => $type,\n                'reference' => ltrim($parts['path'] ?? '', '/'),\n                'params' => $params,\n                'fragment' => $parts['fragment'] ?? null,\n            ];\n        }\n\n        if (self::isValidUrl($address)) {\n            return [\n                'type' => 'url',\n                'url' => $address,\n            ];\n        }\n\n        return [];\n    }\n\n    /**\n     * isValidUrl determines if the given path is a valid URL, similar to Laravel's\n     * except it accepts relative paths. Eg: /contact\n     * @param  string  $path\n     * @return bool\n     */\n    public static function isValidUrl($path)\n    {\n        if (!preg_match('~^(#|/|https?://|(mailto|tel|sms):)~', $path)) {\n            return filter_var($path, FILTER_VALIDATE_URL) !== false;\n        }\n\n        return true;\n    }\n\n    /**\n     * encodeSchema will encode a link using the `october://` October CMS protocol schema, e.g.\n     *\n     *     PageLookupItem::encodeSchema('cms-page', 'about/home/index', ['target' => '_blank']);\n     */\n    public static function encodeSchema(string $type, string $reference = '', array $params = []): string\n    {\n        if ($type === 'url') {\n            return $params['url'] ?? '';\n        }\n\n        $query = is_array($params) && $params ? '?' . http_build_query($params) : '';\n\n        return \"october://{$type}@link/{$reference}{$query}\";\n    }\n}\n"
  },
  {
    "path": "modules/cms/models/ThemeData.php",
    "content": "<?php namespace Cms\\Models;\n\nuse Lang;\nuse Model;\nuse Event;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse System\\Classes\\CombineAssets;\nuse System\\Models\\File;\nuse Exception;\nuse PhpParser\\Node\\Stmt\\Else_;\n\n/**\n * ThemeData for theme customization\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeData extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'cms_theme_data';\n\n    /**\n     * @var array guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array jsonable attribute names that are json encoded and decoded from the database\n     */\n    protected $jsonable = ['data'];\n\n    /**\n     * @var array rules to be applied to the data.\n     */\n    public $rules = [];\n\n    /**\n     * @var array customMessages to be applied to the data.\n     */\n    public $customMessages = [];\n\n    /**\n     * @var array attributeNames to be applied to the data.\n     */\n    public $attributeNames = [];\n\n    /**\n     * @var array attachOne relations\n     */\n    public $attachOne = [];\n\n    /**\n     * @var ThemeData instances of cached objects\n     */\n    protected static $instances = [];\n\n    /**\n     * beforeSave the model, strip dynamic attributes applied from config.\n     */\n    public function beforeSave()\n    {\n        /*\n         * Dynamic attributes are stored in the jsonable attribute 'data'.\n         */\n        $staticAttributes = ['id', 'theme', 'data', 'created_at', 'updated_at'];\n        $dynamicAttributes = array_except($this->getAttributes(), $staticAttributes);\n\n        $this->data = $dynamicAttributes;\n        $this->setRawAttributes(array_only($this->getAttributes(), $staticAttributes));\n    }\n\n    /**\n     * afterSave clears asset cache after saving to ensure `assetVar` form fields take\n     * immediate effect.\n     */\n    public function afterSave()\n    {\n        try {\n            CombineAssets::resetCache();\n        }\n        catch (Exception $ex) {\n        }\n    }\n\n    /**\n     * forTheme returns a cached version of this model, based on a Theme object\n     */\n    public static function forTheme(CmsTheme $theme): ThemeData\n    {\n        $dirName = $theme->getDirName();\n        if ($themeData = array_get(self::$instances, $dirName)) {\n            return $themeData;\n        }\n\n        try {\n            $themeData = static::createThemeDataModel()->firstOrCreate(['theme' => $dirName]);\n        }\n        catch (Exception $ex) {\n            // Database failed\n            $themeData = static::createThemeDataModel(['theme' => $dirName]);\n        }\n\n        $themeData->initFormFields();\n\n        return self::$instances[$dirName] = $themeData;\n    }\n\n    /**\n     * afterFetch the model, intiialize model relationships based on form field definitions.\n     */\n    public function afterFetch()\n    {\n        $this->initFormFields();\n\n        // Fill this model with the jsonable attributes kept in 'data' and\n        // purge the relations that don't need to exist as local attributes\n        $data = (array) $this->data + $this->getDefaultValues();\n\n        $toPurge = ['fileupload'];\n        foreach ($this->getFormFields() as $id => $field) {\n            if (isset($field['type']) && in_array($field['type'], $toPurge)) {\n                unset($data[$id]);\n            }\n        }\n\n        $this->setRawAttributes((array) $this->getAttributes() + $data, true);\n    }\n\n    /**\n     * beforeValidate set the default values.\n     */\n    public function beforeValidate()\n    {\n        if (!$this->exists) {\n            $this->setDefaultValues();\n        }\n    }\n\n    /**\n     * initFormFields sets relations and others based on field definitions.\n     */\n    public function initFormFields()\n    {\n        foreach ($this->getFormFields() as $id => $field) {\n            if (strpos($id, '[') !== false) {\n                $idSeg = HtmlHelper::nameToArray($id)[0];\n                if (!$this->isJsonable($idSeg)) {\n                    $this->addJsonable($idSeg);\n                }\n\n                continue;\n            }\n\n            if (!isset($field['type'])) {\n                continue;\n            }\n\n            if (in_array($field['type'], ['repeater', 'nestedform'])) {\n                if (!$this->isJsonable($id)) {\n                    $this->addJsonable($id);\n                }\n            }\n            elseif ($field['type'] === 'mediafinder' && isset($field['maxItems'])) {\n                $maxItems = (int) $field['maxItems'];\n                if ($maxItems !== 1 && !$this->isJsonable($id)) {\n                    $this->addJsonable($id);\n                }\n            }\n            elseif ($field['type'] === 'fileupload') {\n                $this->attachOne[$id] = File::class;\n            }\n        }\n    }\n\n    /**\n     * setDefaultValues on this model based on form field definitions.\n     */\n    public function setDefaultValues()\n    {\n        foreach ($this->getDefaultValues() as $attribute => $value) {\n            $this->{$attribute} = $value;\n        }\n    }\n\n    /**\n     * getDefaultValues for this model based on form field definitions.\n     * @return array\n     */\n    public function getDefaultValues()\n    {\n        $result = [];\n\n        foreach ($this->getFormFields() as $attribute => $field) {\n            if (($value = array_get($field, 'default')) === null) {\n                continue;\n            }\n\n            $result[$attribute] = $value;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getFormFields defined for this model, based on form field definitions.\n     * @return array\n     */\n    public function getFormFields()\n    {\n        if (!$theme = CmsTheme::load($this->theme)) {\n            throw new Exception(Lang::get('Unable to find theme with name :name', $this->theme));\n        }\n\n        $config = $theme->getFormConfig();\n\n        return (array) array_get($config, 'fields') +\n            (array) array_get($config, 'tabs.fields') +\n            (array) array_get($config, 'secondaryTabs.fields');\n    }\n\n    /**\n     * getAssetVariables returns variables that should be passed to the asset combiner.\n     * @return array\n     */\n    public function getAssetVariables()\n    {\n        $result = [];\n\n        foreach ($this->getFormFields() as $attribute => $field) {\n            if (!$varName = array_get($field, 'assetVar')) {\n                continue;\n            }\n\n            $result[$varName] = $this->{$attribute};\n        }\n\n        return $result;\n    }\n\n    /**\n     * applyAssetVariablesToCombinerFilters that support it\n     */\n    public static function applyAssetVariablesToCombinerFilters($filters)\n    {\n        $theme = CmsTheme::getActiveTheme();\n\n        if (!$theme || !$theme->hasCustomData()) {\n            return;\n        }\n\n        $assetVars = $theme->getCustomData()->getAssetVariables();\n\n        foreach ($filters as $filter) {\n            if (method_exists($filter, 'setPresets')) {\n                $filter->setPresets($assetVars);\n            }\n        }\n    }\n\n    /**\n     * getCombinerCacheKey generates a cache key for the combiner, this allows variables to\n     * bust the cache.\n     * @return string\n     */\n    public static function getCombinerCacheKey()\n    {\n        $theme = CmsTheme::getActiveTheme();\n\n        if (!$theme || !$theme->hasCustomData()) {\n            return '';\n        }\n\n        $customData = $theme->getCustomData();\n\n        return (string) $customData->updated_at ?: '';\n    }\n\n    /**\n     * createThemeDataModel is an opportunity to override the theme data model\n     */\n    public static function createThemeDataModel(array $attributes = []): ThemeData\n    {\n        /**\n         * @event cms.theme.createThemeDataModel\n         * Overrides the theme data model used by the system, which must inherit the main model\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.theme.createThemeDataModel', function (array $attributes) {\n         *         return new MyCustomThemeDataModel($attributes);\n         *     });\n         */\n        if ($newModel = Event::fire('cms.theme.createThemeDataModel', [$attributes], true)) {\n            if ($newModel instanceof ThemeData) {\n                return $newModel;\n            }\n        }\n\n        return new static($attributes);\n    }\n}\n"
  },
  {
    "path": "modules/cms/models/ThemeExport.php",
    "content": "<?php namespace Cms\\Models;\n\nuse File;\nuse Model;\nuse Response;\nuse ApplicationException;\nuse October\\Rain\\Filesystem\\Zip;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse Exception;\n\n/**\n * Theme export model\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeExport extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string table in database used by the model.\n     */\n    public $table = 'cms_theme_data';\n\n    /**\n     * @var array rules to be applied to the data.\n     */\n    public $rules = [];\n\n    /**\n     * @var array guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array attributes used\n     */\n    public $attributes = [\n        'theme' => null,\n        'themeName' => null,\n        'dirName' => null,\n        'folders' => [\n            'assets',\n            'pages',\n            'layouts',\n            'partials',\n            'content',\n        ]\n    ];\n\n    /**\n     * Import / Export model classes are helpers and are not to write to the database\n     *\n     * @return void\n     */\n    public function save(?array $options = null, $sessionKey = null)\n    {\n        throw new ApplicationException(sprintf(\"The % model is not intended to be saved, please use %s instead\", get_class($this), 'ThemeData'));\n    }\n\n    /**\n     * getFoldersOptions\n     */\n    public function getFoldersOptions()\n    {\n        return [\n            'assets' => 'Assets',\n            'pages' => 'Pages',\n            'layouts' => 'Layouts',\n            'partials' => 'Partials',\n            'content' => 'Content',\n        ];\n    }\n\n    /**\n     * setThemeAttribute\n     */\n    public function setThemeAttribute($theme)\n    {\n        if (!$theme instanceof CmsTheme) {\n            return;\n        }\n\n        $this->attributes['themeName'] = $theme->getConfigValue('name', $theme->getDirName());\n        $this->attributes['dirName'] = $theme->getDirName();\n        $this->attributes['theme'] = $theme;\n    }\n\n    /**\n     * export\n     */\n    public function export($theme, $data = [])\n    {\n        $this->theme = $theme;\n        $this->fill($data);\n\n        try {\n            $themePath = $this->theme->getPath();\n            $tempPath = temp_path() . '/'.uniqid('oc');\n            $zipName = uniqid('oc');\n            $zipPath = temp_path().'/'.$zipName;\n\n            if (!File::makeDirectory($tempPath)) {\n                throw new ApplicationException('Unable to create directory '.$tempPath);\n            }\n\n            if (!File::makeDirectory($metaPath = $tempPath . '/meta')) {\n                throw new ApplicationException('Unable to create directory '.$metaPath);\n            }\n\n            File::copy($themePath.'/theme.yaml', $tempPath.'/theme.yaml');\n            File::copyDirectory($themePath.'/meta', $metaPath);\n\n            foreach ($this->folders as $folder) {\n                if (!array_key_exists($folder, $this->getFoldersOptions())) {\n                    continue;\n                }\n\n                File::copyDirectory($themePath.'/'.$folder, $tempPath.'/'.$folder);\n            }\n\n            Zip::make($zipPath, $tempPath);\n            File::deleteDirectory($tempPath);\n        }\n        catch (Exception $ex) {\n            if (strlen($tempPath) && File::isDirectory($tempPath)) {\n                File::deleteDirectory($tempPath);\n            }\n\n            if (strlen($zipPath) && File::isFile($zipPath)) {\n                File::delete($zipPath);\n            }\n\n            throw $ex;\n        }\n\n        return $zipName;\n    }\n\n    /**\n     * download\n     */\n    public static function download($name, $outputName = null)\n    {\n        if (!preg_match('/^oc[0-9a-z]*$/i', $name)) {\n            throw new ApplicationException('File not found');\n        }\n\n        $zipPath = temp_path() . '/' . $name;\n        if (!file_exists($zipPath)) {\n            throw new ApplicationException('File not found');\n        }\n\n        $headers = Response::download($zipPath, $outputName)->headers->all();\n        $result = Response::make(File::get($zipPath), 200, $headers);\n\n        @File::delete($zipPath);\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/cms/models/ThemeImport.php",
    "content": "<?php namespace Cms\\Models;\n\nuse File;\nuse Model;\nuse ApplicationException;\nuse October\\Rain\\Filesystem\\Zip;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse FilesystemIterator;\nuse Exception;\n\n/**\n * Theme import model\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeImport extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'cms_theme_data';\n\n    /**\n     * @var array The rules to be applied to the data.\n     */\n    public $rules = [];\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array Fillable fields\n     */\n    protected $fillable = [];\n\n    public $attachOne = [\n        'uploaded_file' => \\System\\Models\\File::class\n    ];\n\n    /**\n     * @var array Make the model's attributes public so behaviors can modify them.\n     */\n    public $attributes = [\n        'theme' => null,\n        'themeName' => null,\n        'dirName' => null,\n        'overwrite' => true,\n        'folders' => [\n            'assets',\n            'pages',\n            'layouts',\n            'partials',\n            'content',\n        ]\n    ];\n\n    /**\n     * Import / Export model classes are helpers and are not to write to the database\n     *\n     * @return void\n     */\n    public function save(?array $options = null, $sessionKey = null)\n    {\n        throw new ApplicationException(sprintf(\"The % model is not intended to be saved, please use %s instead\", get_class($this), 'ThemeData'));\n    }\n\n    /**\n     * getFoldersOptions\n     */\n    public function getFoldersOptions()\n    {\n        return [\n            'assets' => 'Assets',\n            'pages' => 'Pages',\n            'layouts' => 'Layouts',\n            'partials' => 'Partials',\n            'content' => 'Content',\n        ];\n    }\n\n    /**\n     * setThemeAttribute\n     */\n    public function setThemeAttribute($theme)\n    {\n        if (!$theme instanceof CmsTheme) {\n            return;\n        }\n\n        $this->attributes['themeName'] = $theme->getConfigValue('name', $theme->getDirName());\n        $this->attributes['dirName'] = $theme->getDirName();\n        $this->attributes['theme'] = $theme;\n    }\n\n    /**\n     * import\n     */\n    public function import($theme, $data = [], $sessionKey = null)\n    {\n        @set_time_limit(3600);\n\n        $this->theme = $theme;\n        $this->fill($data);\n\n        try {\n            $file = $this->uploaded_file()->withDeferred($sessionKey)->first();\n            if (!$file) {\n                throw new ApplicationException('There is no file attached to import!');\n            }\n\n            $themePath = $this->theme->getPath();\n            $tempPath = temp_path() . '/'.uniqid('oc');\n            $zipName = uniqid('oc');\n            $zipPath = temp_path().'/'.$zipName;\n\n            File::put($zipPath, $file->getContents());\n\n            if (!File::makeDirectory($tempPath)) {\n                throw new ApplicationException('Unable to create directory '.$tempPath);\n            }\n\n            Zip::extract($zipPath, $tempPath);\n\n            if (File::isDirectory($tempPath.'/meta')) {\n                $this->copyDirectory($tempPath.'/meta', $themePath.'/meta');\n            }\n\n            foreach ($this->folders as $folder) {\n                if (!array_key_exists($folder, $this->getFoldersOptions())) {\n                    continue;\n                }\n\n                $this->copyDirectory($tempPath.'/'.$folder, $themePath.'/'.$folder);\n            }\n\n            File::deleteDirectory($tempPath);\n            File::delete($zipPath);\n            $file->delete();\n        }\n        catch (Exception $ex) {\n            if (!empty($tempPath) && File::isDirectory($tempPath)) {\n                File::deleteDirectory($tempPath);\n            }\n\n            if (!empty($zipPath) && File::isFile($zipPath)) {\n                File::delete($zipPath);\n            }\n\n            throw $ex;\n        }\n    }\n\n    /**\n     * copyDirectory helper for copying directories that supports the ability\n     * to not overwrite existing files. Inherited from File::copyDirectory\n     *\n     * @param  string  $directory\n     * @param  string  $destination\n     * @return bool\n     */\n    protected function copyDirectory($directory, $destination)\n    {\n        // Preference is to overwrite existing files\n        if ($this->overwrite) {\n            return File::copyDirectory($directory, $destination);\n        }\n\n        if (!File::isDirectory($directory)) {\n            return false;\n        }\n\n        $options = FilesystemIterator::SKIP_DOTS;\n\n        if (!File::isDirectory($destination)) {\n            File::makeDirectory($destination, 0755, true);\n        }\n\n        $items = new FilesystemIterator($directory, $options);\n\n        foreach ($items as $item) {\n            $target = $destination.'/'.$item->getBasename();\n\n            if ($item->isDir()) {\n                $path = $item->getPathname();\n\n                if (!$this->copyDirectory($path, $target)) {\n                    return false;\n                }\n            }\n            else {\n                // Do not overwrite existing files\n                if (File::isFile($target)) {\n                    continue;\n                }\n\n                if (!File::copy($item->getPathname(), $target)) {\n                    return false;\n                }\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/cms/models/ThemeLog.php",
    "content": "<?php namespace Cms\\Models;\n\nuse App;\nuse Model;\nuse BackendAuth;\nuse Cms\\Classes\\Theme;\nuse System\\Models\\LogSetting;\nuse October\\Rain\\Halcyon\\Model as HalcyonModel;\nuse Exception;\n\n/**\n * ThemeLog logs changes made to the theme\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeLog extends Model\n{\n    const TYPE_CREATE = 'create';\n    const TYPE_UPDATE = 'update';\n    const TYPE_DELETE = 'delete';\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'cms_theme_logs';\n\n    /**\n     * @var array belongsTo relation\n     */\n    public $belongsTo = [\n        'user' => \\Backend\\Models\\User::class\n    ];\n\n    /**\n     * @var array themeCache\n     */\n    protected $themeCache;\n\n    /**\n     * bindEventsToModel adds observers to the model for logging purposes.\n     */\n    public static function bindEventsToModel(HalcyonModel $template)\n    {\n        $template->bindEvent('model.beforeDelete', function () use ($template) {\n            self::add($template, self::TYPE_DELETE);\n        });\n\n        $template->bindEvent('model.beforeSave', function () use ($template) {\n            self::add($template, $template->exists ? self::TYPE_UPDATE : self::TYPE_CREATE);\n        });\n    }\n\n    /**\n     * add a new log record\n     * @return self\n     */\n    public static function add(HalcyonModel $template, $type = null)\n    {\n        if (!App::hasDatabase()) {\n            return;\n        }\n\n        if (!LogSetting::get('log_theme')) {\n            return;\n        }\n\n        if (!$type) {\n            $type = self::TYPE_UPDATE;\n        }\n\n        $isDelete = $type === self::TYPE_DELETE;\n        $dirName = $template->getObjectTypeDirName();\n        $templateName = $template->fileName;\n        $oldTemplateName = $template->getOriginal('fileName');\n        $newContent = $template->toCompiled();\n        $oldContent = $template->getOriginal('content');\n\n        // Content not dirty\n        if ($newContent === $oldContent && $templateName === $oldTemplateName && !$isDelete) {\n            return;\n        }\n\n        $record = new self;\n        $record->type = $type;\n        $record->theme = Theme::getEditThemeCode();\n        $record->template = $isDelete ? '' : $dirName.'/'.$templateName;\n        $record->old_template = $oldTemplateName ? $dirName.'/'.$oldTemplateName : '';\n        $record->content = $isDelete ? '' : $newContent;\n        $record->old_content = $oldContent;\n\n        if ($user = BackendAuth::getUser()) {\n            $record->user_id = $user->id;\n        }\n\n        try {\n            $record->save();\n        }\n        catch (Exception $ex) {\n        }\n\n        return $record;\n    }\n\n    /**\n     * getThemeNameAttribute\n     */\n    public function getThemeNameAttribute()\n    {\n        $code = $this->theme;\n\n        if (!isset($this->themeCache[$code])) {\n            $this->themeCache[$code] = Theme::load($code);\n        }\n\n        $theme = $this->themeCache[$code];\n\n        return $theme->getConfigValue('name', $theme->getDirName());\n    }\n\n    /**\n     * getTypeOptions\n     */\n    public function getTypeOptions()\n    {\n        return [\n            self::TYPE_CREATE => 'cms::lang.theme_log.type_create',\n            self::TYPE_UPDATE => 'cms::lang.theme_log.type_update',\n            self::TYPE_DELETE => 'cms::lang.theme_log.type_delete'\n        ];\n    }\n\n    /**\n     * getAnyTemplateAttribute\n     */\n    public function getAnyTemplateAttribute()\n    {\n        return $this->template ?: $this->old_template;\n    }\n\n    /**\n     * getTypeNameAttribute\n     */\n    public function getTypeNameAttribute()\n    {\n        return array_get($this->getTypeOptions(), $this->type);\n    }\n}\n"
  },
  {
    "path": "modules/cms/models/ThemeSeed.php",
    "content": "<?php namespace Cms\\Models;\n\nuse File;\nuse Yaml;\nuse Model;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse ApplicationException;\nuse SystemException;\nuse Exception;\n\n/**\n * ThemeSeed model\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeSeed extends Model\n{\n    use \\System\\Traits\\NoteMaker;\n\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'cms_theme_data';\n\n    /**\n     * @var array The rules to be applied to the data.\n     */\n    public $rules = [];\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array Fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array Make the model's attributes public so behaviors can modify them.\n     */\n    public $attributes = [\n        'theme' => null,\n        'themeName' => null,\n        'dirName' => null,\n        'useRoot' => false,\n        'folders' => [\n            'blueprints',\n            'data',\n            'lang',\n        ]\n    ];\n\n    /**\n     * Import / Export model classes are helpers and are not to write to the database\n     *\n     * @return void\n     */\n    public function save(?array $options = null, $sessionKey = null)\n    {\n        throw new ApplicationException(sprintf(\"The % model is not intended to be saved, please use %s instead\", get_class($this), 'ThemeData'));\n    }\n\n    /**\n     * getFoldersOptions\n     */\n    public function getFoldersOptions()\n    {\n        return [\n            'blueprints' => 'Blueprints',\n            'data' => 'Data',\n            'lang' => 'Translations',\n        ];\n    }\n\n    /**\n     * setThemeAttribute\n     */\n    public function setThemeAttribute($theme)\n    {\n        if (!$theme instanceof CmsTheme) {\n            return;\n        }\n\n        $this->attributes['themeName'] = $theme->getConfigValue('name', $theme->getDirName());\n        $this->attributes['dirName'] = $theme->getDirName();\n        $this->attributes['themePath'] = $theme->getPath();\n        $this->attributes['theme'] = $theme;\n    }\n\n    /**\n     * seed\n     */\n    public function seed($theme, $data = [])\n    {\n        @set_time_limit(3600);\n\n        $this->theme = $theme;\n        $this->fill($data);\n\n        foreach ($this->folders as $folder) {\n            if (!array_key_exists($folder, $this->getFoldersOptions())) {\n                continue;\n            }\n\n            $methodName = 'importSeed'.ucfirst($folder);\n            $this->$methodName();\n        }\n    }\n\n    /**\n     * importSeedBlueprints\n     */\n    protected function importSeedBlueprints()\n    {\n        // Importing blueprints\n        $appBpPath = $this->useRoot\n            ? app_path('blueprints')\n            : app_path('blueprints/' . $this->dirName);\n\n        // Import and migrate blueprints\n        $themeBpPath = $this->themePath . '/seeds/blueprints';\n        if (File::isDirectory($themeBpPath)) {\n            $this->note('Importing Blueprints');\n            File::copyDirectory($themeBpPath, $appBpPath);\n        }\n\n        BlueprintIndexer::instance()->setNotesOutput($this->getNotesOutput())->migrate();\n    }\n\n    /**\n     * importSeedData\n     */\n    protected function importSeedData()\n    {\n        // Importing seed data\n        $importFile = $this->themePath . '/seeds/data.yaml';\n        if (File::isFile($importFile)) {\n            $this->note('Importing Data');\n            $instructions = Yaml::parseFile($importFile);\n\n            try {\n                $this->processSeedInstructions($instructions);\n            }\n            catch (Exception $ex) {\n                throw new SystemException(\"[{$importFile}] \" . $ex->getMessage(), 0, $ex);\n            }\n        }\n    }\n\n    /**\n     * importSeedLang\n     */\n    protected function importSeedLang()\n    {\n        // Import language files\n        $themeLangPath = $this->themePath . '/seeds/lang';\n        $appLangPath = app_path('lang');\n        if (File::isDirectory($themeLangPath)) {\n            $this->note('Importing Translations');\n\n            if (!File::exists($appLangPath)) {\n                File::makeDirectory($appLangPath);\n            }\n\n            foreach (File::files($themeLangPath) as $file) {\n                $filename = $file->getFilename();\n                $srcPath = $themeLangPath.\"/$filename\";\n                $destPath = $appLangPath.\"/$filename\";\n                if (File::exists($destPath)) {\n                    $oldLang = json_decode(file_get_contents($destPath), true);\n                    $newLang = json_decode(file_get_contents($srcPath), true);\n                    $updated = array_merge($oldLang, $newLang);\n                    File::put($destPath, json_encode($updated, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE));\n                }\n                else {\n                    File::copy($themeLangPath.\"/$filename\", $destPath);\n                }\n\n                $this->note(\"- <info>Imported</info>: $filename\");\n            }\n        }\n    }\n\n    /**\n     * processSeedInstructions\n     */\n    protected function processSeedInstructions($instructions)\n    {\n        if (!is_array($instructions)) {\n            return;\n        }\n\n        foreach ($instructions as $instruction) {\n            $this->processSeedInstruction($instruction);\n        }\n    }\n\n    /**\n     * processSeedInstruction\n     */\n    protected function processSeedInstruction($instruction)\n    {\n        $importName = $instruction['name'] ?? 'Import Data';\n        $className = $instruction['class'] ?? null;\n        $fileName = $instruction['file'] ?? null;\n        $attributes = $instruction['attributes'] ?? null;\n        $matches = $instruction['matches'] ?? null;\n\n        if (!$className) {\n            throw new SystemException(\"Import script is missing definition for 'class'\");\n        }\n        if (!$fileName) {\n            throw new SystemException(\"Import script is missing definition for 'file'\");\n        }\n        if (!$attributes || !is_array($attributes)) {\n            throw new SystemException(\"Import script is missing definition for 'attributes'\");\n        }\n\n        if (!class_exists($className)) {\n            throw new SystemException(\"Import class '{$className}' does not exist.\");\n        }\n\n        $importFile = $this->themePath . '/' . $fileName;\n        if (!File::exists($importFile)) {\n            throw new SystemException(\"Import file '{$fileName}' does not exist.\");\n        }\n\n        $importModel = new $className;\n        $importModel->forceFill($attributes);\n\n        if (method_exists($importModel, 'setSourcePrefix')) {\n            $importModel->setSourcePrefix($this->themePath);\n        }\n\n        $importModel->importFile($importFile, ['matches' => $matches, 'sessionKey' => str_random(40)]);\n\n        $stats = $importModel->getResultStats();\n        $this->note(\"- <info>{$importName}</info>: {$stats->created} Created / {$stats->updated} Updated / {$stats->skippedCount} Skipped\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/models/maintenancesetting/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n\n    hint:\n        type: hint\n        mode: tip\n        label: Maintenance mode will display the maintenance page to visitors who are not signed in to the back-end area.\n\n    is_enabled:\n        label: Enable maintenance mode\n        comment: Select the page to show when maintenance mode is activated.\n        type: checkbox\n\n    cms_page:\n        type: dropdown\n        cssClass: checkbox-align\n"
  },
  {
    "path": "modules/cms/models/themeexport/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n\n    themeName:\n        label: Theme\n        disabled: true\n\n    folders:\n        label: Folders\n        commentAbove: Please select the theme folders you would like to export\n        type: checkboxlist\n"
  },
  {
    "path": "modules/cms/models/themeimport/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n\n    themeName:\n        label: Theme\n        disabled: true\n\n    uploaded_file:\n        label: Theme archive file\n        type: fileupload\n        mode: file\n        fileTypes: zip\n\n    overwrite:\n        label: Overwrite existing files\n        comment: Untick this box to only import new files\n        type: checkbox\n\n    folders:\n        label: Folders\n        commentAbove: Please select the theme folders you would like to import\n        type: checkboxlist\n"
  },
  {
    "path": "modules/cms/models/themelog/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    id:\n        label: cms::lang.theme_log.id\n        searchable: true\n        invisible: true\n        width: 75px\n\n    created_at:\n        label: cms::lang.theme_log.created_at\n        searchable: true\n        width: 160px\n        type: timetense\n\n    type:\n        label: cms::lang.theme_log.type\n        invisible: true\n\n    any_template:\n        label: cms::lang.theme_log.template\n        searchable: false\n        sortable: false\n\n    template:\n        label: cms::lang.theme_log.new_template\n        searchable: true\n        invisible: true\n\n    old_template:\n        label: cms::lang.theme_log.old_template\n        searchable: true\n        invisible: true\n\n    user:\n        label: cms::lang.theme_log.user\n        relation: user\n        select: concat(first_name, ' ', last_name)\n\n    theme_name:\n        label: cms::lang.theme_log.theme_name\n        sortable: false\n\n    theme:\n        label: cms::lang.theme_log.theme_code\n        searchable: true\n        invisible: true\n"
  },
  {
    "path": "modules/cms/models/themelog/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    fields:\n\n        diff_template:\n            tab: cms::lang.theme_log.diff\n            type: partial\n            path: field_diff_template\n\n        diff_content:\n            tab: cms::lang.theme_log.diff\n            type: partial\n            path: field_diff_content\n\n        template:\n            tab: cms::lang.theme_log.new_value\n            type: partial\n            path: field_template\n\n        content:\n            tab: cms::lang.theme_log.new_value\n            type: partial\n            path: field_content\n\n        old_template:\n            tab: cms::lang.theme_log.old_value\n            type: partial\n            path: field_template\n\n        old_content:\n            tab: cms::lang.theme_log.old_value\n            type: partial\n            path: field_content\n"
  },
  {
    "path": "modules/cms/models/themeseed/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n\n    themeName:\n        label: Seed the specified theme with blueprints, translations and data.\n        disabled: true\n\n    folders:\n        label: Folders\n        type: checkboxlist\n"
  },
  {
    "path": "modules/cms/reportwidgets/ActiveTheme.php",
    "content": "<?php namespace Cms\\ReportWidgets;\n\nuse BackendAuth;\nuse Cms\\Classes\\Theme;\nuse Cms\\Models\\MaintenanceSetting;\nuse Backend\\Classes\\ReportWidgetBase;\nuse ApplicationException;\nuse Exception;\n\n/**\n * ActiveTheme report widget.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ActiveTheme extends ReportWidgetBase\n{\n    /**\n     * @var string defaultAlias to identify this widget.\n     */\n    protected $defaultAlias = 'activetheme';\n\n    /**\n     * render the widget.\n     */\n    public function render()\n    {\n        try {\n            $this->loadData();\n        }\n        catch (Exception $ex) {\n            $this->vars['error'] = $ex->getMessage();\n        }\n\n        return $this->makePartial('widget');\n    }\n\n    /**\n     * defineProperties\n     */\n    public function defineProperties()\n    {\n        return [\n            'title' => [\n                'title' => \"Widget title\",\n                'default' => \"Website\",\n                'type' => 'string',\n                'validationPattern' => '^.+$',\n                'validationMessage' => \"The Widget Title is required.\",\n            ]\n        ];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/activetheme.css');\n    }\n\n    /**\n     * loadData\n     */\n    protected function loadData()\n    {\n        if (!$theme = Theme::getActiveTheme()) {\n            throw new ApplicationException(__(\"The theme ':name' is not found.\", ['name'=>Theme::getActiveThemeCode()]));\n        }\n\n        $this->vars['theme'] = $theme;\n        $this->vars['inMaintenance'] = MaintenanceSetting::get('is_enabled');\n        $this->vars['canManage'] = BackendAuth::userHasAccess('cms.themes');\n        $this->vars['canConfig'] = BackendAuth::userHasAccess('cms.theme_customize');\n    }\n}\n"
  },
  {
    "path": "modules/cms/reportwidgets/activetheme/assets/css/activetheme.css",
    "content": ".widget-activetheme .theme-thumbnail {\n    margin-top: 0;\n    margin-bottom: 15px;\n}\n"
  },
  {
    "path": "modules/cms/reportwidgets/activetheme/partials/_widget.php",
    "content": "<div class=\"report-widget widget-activetheme\">\n    <h3><?= e(__($this->property('title'))) ?></h3>\n\n    <?php if (!isset($error)): ?>\n        <div class=\"theme-thumbnail\">\n            <img src=\"<?= $theme->getPreviewImageUrl() ?>\" alt=\"\" class=\"img-fluid\" />\n        </div>\n        <ul class=\"list-inline\">\n            <li class=\"list-inline-item\">\n            <?php if ($canManage): ?>\n                <a href=\"<?= Backend::url('system/settings/update/october/cms/maintenance_settings') ?>\">\n            <?php endif ?>\n                <?php if ($inMaintenance): ?>\n                    <i class=\"icon-circle-full warning\"></i>\n                    <span class=\"text-warning\">\n                        <?= e(trans('cms::lang.dashboard.active_theme.maintenance')) ?>\n                    </span>\n                <?php else: ?>\n                    <i class=\"icon-circle-full success\"></i>\n                    <span class=\"text-success\">\n                        <?= e(trans('cms::lang.dashboard.active_theme.online')) ?>\n                    </span>\n                <?php endif ?>\n            <?php if ($canManage): ?>\n                </a>\n            <?php endif ?>\n            </li>\n        <?php if ($canManage): ?>\n            <li class=\"list-inline-item\">\n                <a href=\"<?= Backend::url('cms/themes') ?>\">\n                    <?= e(trans('cms::lang.dashboard.active_theme.manage_themes')) ?>\n                </a>\n            </li>\n        <?php endif ?>\n        <?php if ($canConfig && $theme->hasCustomData()): ?>\n            <li class=\"list-inline-item\">\n                <a href=\"<?= Backend::url('cms/themeoptions/update/'.$theme->getDirName()) ?>\">\n                    <?= e(trans('cms::lang.dashboard.active_theme.customize_theme')) ?>\n                </a>\n            </li>\n        <?php endif ?>\n        </ul>\n    <?php else: ?>\n        <div class=\"callout callout-warning no-title\">\n            <div class=\"content\"><?= e($error) ?></div>\n        </div>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/cms/routes.php",
    "content": "<?php\n\n/**\n * Register CMS routes before all user routes.\n */\nApp::before(function ($request) {\n    /**\n     * @event cms.beforeRoute\n     * Fires before cms routes get added\n     *\n     * Example usage:\n     *\n     *     Event::listen('cms.beforeRoute', function () {\n     *         // your code here\n     *     });\n     *\n     */\n    Event::fire('cms.beforeRoute');\n\n    /*\n     * The CMS module intercepts all URLs that were not\n     * handled by the back-end modules.\n     */\n    Route::any('{slug?}', [\\Cms\\Classes\\CmsController::class, 'run'])\n        ->where('slug', '(.*)?')\n        ->middleware(Config::get('cms.middleware_group', 'web'))\n    ;\n\n    /**\n     * @event cms.route\n     * Fires after cms routes get added\n     *\n     * Example usage:\n     *\n     *     Event::listen('cms.route', function () {\n     *         // your code here\n     *     });\n     *\n     */\n    Event::fire('cms.route');\n});\n"
  },
  {
    "path": "modules/cms/tests/classes/CmsCompoundObjectTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\CmsObject;\nuse Cms\\Classes\\CmsCompoundObject;\nuse October\\Rain\\Halcyon\\Model;\n\nclass TestCmsCompoundObject extends CmsCompoundObject\n{\n    protected $dirName = 'testobjects';\n\n    protected function parseSettings()\n    {\n    }\n}\n\nclass TestParsedCmsCompoundObject extends CmsCompoundObject\n{\n    protected $dirName = 'testobjects';\n}\n\nclass TestTemporaryCmsCompoundObject extends CmsCompoundObject\n{\n    protected $dirName = 'temporary';\n\n    protected function parseSettings()\n    {\n    }\n}\n\nclass CmsCompoundObjectTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n        Model::clearBootedModels();\n        Model::flushEventListeners();\n        require_once base_path('/modules/system/tests/fixtures/plugins/october/tester/components/Archive.php');\n        require_once base_path('/modules/system/tests/fixtures/plugins/october/tester/components/Post.php');\n    }\n\n    public function testLoadFile()\n    {\n        $theme = Theme::load('test');\n\n        $obj = TestCmsCompoundObject::load($theme, 'compound.htm');\n        $this->assertStringContainsString(\"\\$controller->data['something'] = 'some value'\", $obj->code);\n        $this->assertEquals('<p>This is a paragraph</p>', $obj->markup);\n        $this->assertIsArray($obj->settings);\n        $this->assertArrayHasKey('var', $obj->settings);\n        $this->assertEquals('value', $obj->settings['var']);\n\n        $this->assertArrayHasKey('components', $obj->settings);\n\n        $this->assertArrayHasKey('section', $obj->settings['components']);\n        $this->assertIsArray($obj->settings['components']['section']);\n        $this->assertArrayHasKey('version', $obj->settings['components']['section']);\n        $this->assertEquals(10, $obj->settings['components']['section']['version']);\n\n        $this->assertEquals('value', $obj->var);\n\n        $this->assertArrayHasKey('version', $obj->settings['components']['section']);\n        $this->assertEquals(10, $obj->settings['components']['section']['version']);\n    }\n\n    public function testParseComponentSettings()\n    {\n        $theme = Theme::load('test');\n\n        $obj = TestCmsCompoundObject::load($theme, 'component.htm');\n        $this->assertArrayHasKey('components', $obj->settings);\n        $this->assertIsArray($obj->settings['components']);\n        $this->assertArrayHasKey('testArchive', $obj->settings['components']);\n        $this->assertArrayHasKey('posts-per-page', $obj->settings['components']['testArchive']);\n        $this->assertEquals(10, $obj->settings['components']['testArchive']['posts-per-page']);\n    }\n\n    public function testHasComponent()\n    {\n        $theme = Theme::load('test');\n\n        $obj = TestCmsCompoundObject::load($theme, 'components.htm');\n        $this->assertArrayHasKey('components', $obj->settings);\n\n        $this->assertIsArray($obj->settings['components']);\n        $this->assertArrayHasKey('testArchive firstAlias', $obj->settings['components']);\n        $this->assertArrayHasKey('October\\Tester\\Components\\Post secondAlias', $obj->settings['components']);\n\n        // Explicit\n        $this->assertEquals('testArchive firstAlias', $obj->hasComponent('testArchive'));\n        $this->assertEquals('October\\Tester\\Components\\Post secondAlias', $obj->hasComponent('October\\Tester\\Components\\Post'));\n\n        // Resolved\n        $this->assertEquals('testArchive firstAlias', $obj->hasComponent('October\\Tester\\Components\\Archive'));\n        $this->assertEquals('October\\Tester\\Components\\Post secondAlias', $obj->hasComponent('testPost'));\n\n        // Negative test\n        $this->assertFalse($obj->hasComponent('yooHooBigSummerBlowOut'));\n        $this->assertFalse($obj->hasComponent('October\\Tester\\Components\\BigSummer'));\n    }\n\n    public function testGetComponentProperties()\n    {\n        $theme = Theme::load('test');\n\n        $obj = TestCmsCompoundObject::load($theme, 'components.htm');\n\n        $properties = $obj->getComponentProperties('October\\Tester\\Components\\Post');\n        $emptyProperties = $obj->getComponentProperties('October\\Tester\\Components\\Archive');\n        $notExistingProperties = $obj->getComponentProperties('This\\Is\\Not\\Component');\n        $this->assertIsArray($properties);\n        $this->assertArrayHasKey('show-featured', $properties);\n        $this->assertTrue((bool)$properties['show-featured']);\n        $this->assertEquals('true', $properties['show-featured']);\n        $this->assertCount(1, $properties);\n        $this->assertCount(0, $emptyProperties);\n        $this->assertCount(0, $notExistingProperties);\n    }\n\n    public function testCache()\n    {\n        $theme = Theme::load('test');\n        $themePath = $theme->getPath();\n\n        /*\n         * Prepare the test file\n         */\n\n        $srcPath = $themePath.'/testobjects/compound.htm';\n        $this->assertFileExists($srcPath);\n        $testContent = file_get_contents($srcPath);\n        $this->assertNotEmpty($testContent);\n\n        $filePath = $themePath .= '/temporary/testcompound.htm';\n        if (file_exists($filePath)) {\n            @unlink($filePath);\n        }\n\n        $this->assertFileNotExists($filePath);\n        file_put_contents($filePath, $testContent);\n\n        /*\n         * Load the test object to initialize the cache\n         */\n\n        $obj = TestTemporaryCmsCompoundObject::loadCached($theme, 'testcompound.htm');\n        $this->assertFalse($obj->isLoadedFromCache());\n        $this->assertEquals($testContent, $obj->getContent());\n        $this->assertEquals('testcompound.htm', $obj->getFileName());\n        $this->assertEquals('<p>This is a paragraph</p>', $obj->markup);\n        $this->assertIsArray($obj->settings);\n        $this->assertArrayHasKey('var', $obj->settings);\n        $this->assertEquals('value', $obj->settings['var']);\n\n        $this->assertArrayHasKey('components', $obj->settings);\n\n        $this->assertIsArray($obj->settings['components']['section']);\n        $this->assertArrayHasKey('version', $obj->settings['components']['section']);\n        $this->assertEquals(10, $obj->settings['components']['section']['version']);\n\n        $this->assertEquals('value', $obj->var);\n        $this->assertIsArray($obj->settings['components']['section']);\n        $this->assertArrayHasKey('version', $obj->settings['components']['section']);\n        $this->assertEquals(10, $obj->settings['components']['section']['version']);\n\n        /*\n         * Load the test object again, it should be loaded from the cache this time\n         */\n\n        $obj = TestTemporaryCmsCompoundObject::loadCached($theme, 'testcompound.htm');\n        $this->assertTrue($obj->isLoadedFromCache());\n        $this->assertEquals($testContent, $obj->getContent());\n        $this->assertEquals('testcompound.htm', $obj->getFileName());\n        $this->assertEquals('<p>This is a paragraph</p>', $obj->markup);\n        $this->assertIsArray($obj->settings);\n        $this->assertArrayHasKey('var', $obj->settings);\n        $this->assertEquals('value', $obj->settings['var']);\n\n        $this->assertArrayHasKey('components', $obj->settings);\n\n        $this->assertIsArray($obj->settings['components']['section']);\n        $this->assertArrayHasKey('version', $obj->settings['components']['section']);\n        $this->assertEquals(10, $obj->settings['components']['section']['version']);\n\n        $this->assertEquals('value', $obj->var);\n        $this->assertIsArray($obj->settings['components']['section']);\n        $this->assertArrayHasKey('version', $obj->settings['components']['section']);\n        $this->assertEquals(10, $obj->settings['components']['section']['version']);\n    }\n\n    public function testUndefinedProperty()\n    {\n        $obj = new TestCmsCompoundObject;\n        $this->assertNull($obj->something);\n    }\n\n    public function testSaveMarkup()\n    {\n        $theme = Theme::load('apitest');\n\n        $destFilePath = $theme->getPath().'/testobjects/compound-markup.htm';\n        if (file_exists($destFilePath)) {\n            unlink($destFilePath);\n        }\n\n        $this->assertFileNotExists($destFilePath);\n\n        $obj = TestCmsCompoundObject::inTheme($theme);\n        $obj->fill([\n            'markup' => '<p>Hello, world!</p>',\n            'fileName'=>'compound-markup'\n        ]);\n        $obj->save();\n\n        $referenceFilePath = base_path('/modules/cms/tests/fixtures/reference/compound-markup.htm');\n        $this->assertFileExists($referenceFilePath);\n\n        $this->assertFileExists($destFilePath);\n        $this->assertFileEqualsNormalized($referenceFilePath, $destFilePath);\n    }\n\n    public function testSaveMarkupAndSettings()\n    {\n        $theme = Theme::load('apitest');\n\n        $destFilePath = $theme->getPath().'/testobjects/compound-markup-settings.htm';\n        if (file_exists($destFilePath)) {\n            unlink($destFilePath);\n        }\n\n        $this->assertFileNotExists($destFilePath);\n\n        $obj = TestCmsCompoundObject::inTheme($theme);\n        $obj->fill([\n            'settings'=>['var'=>'value'],\n            'markup' => '<p>Hello, world!</p>',\n            'fileName'=>'compound-markup-settings'\n        ]);\n        $obj->save();\n\n        $referenceFilePath = base_path('/modules/cms/tests/fixtures/reference/compound-markup-settings.htm');\n        $this->assertFileExists($referenceFilePath);\n\n        $this->assertFileExists($destFilePath);\n        $this->assertFileEqualsNormalized($referenceFilePath, $destFilePath);\n    }\n\n    public function testSaveFull()\n    {\n        $theme = Theme::load('apitest');\n\n        $destFilePath = $theme->getPath().'/testobjects/compound.htm';\n        if (file_exists($destFilePath)) {\n            unlink($destFilePath);\n        }\n\n        $this->assertFileNotExists($destFilePath);\n\n        $obj = TestCmsCompoundObject::inTheme($theme);\n        $obj->fill([\n            'fileName'=>'compound',\n            'settings'=>['var'=>'value'],\n            'code' => 'function a() {return true;}',\n            'markup' => '<p>Hello, world!</p>'\n        ]);\n        $obj->save();\n\n        $referenceFilePath = base_path('/modules/cms/tests/fixtures/reference/compound-full.htm');\n        $this->assertFileExists($referenceFilePath);\n\n        $this->assertFileExists($destFilePath);\n        $this->assertFileEqualsNormalized($referenceFilePath, $destFilePath);\n    }\n\n    public function testGetViewBagPopulated()\n    {\n        $theme = Theme::load('test');\n\n        $obj = TestParsedCmsCompoundObject::load($theme, 'viewbag.htm');\n        $this->assertNull($obj->code);\n        $this->assertEquals('<p>Chop Suey!</p>', $obj->markup);\n        $this->assertIsArray($obj->settings);\n        $this->assertArrayHasKey('var', $obj->settings);\n        $this->assertEquals('value', $obj->settings['var']);\n\n        $this->assertArrayHasKey('components', $obj->settings);\n\n        $this->assertArrayHasKey('viewBag', $obj->settings['components']);\n        $this->assertIsArray($obj->settings['components']['viewBag']);\n        $this->assertArrayHasKey('title', $obj->settings['components']['viewBag']);\n        $this->assertEquals('Toxicity', $obj->settings['components']['viewBag']['title']);\n\n        $viewBag = $obj->getViewBag();\n        $properties = $viewBag->getProperties();\n        $this->assertCount(1, $properties);\n        $this->assertEquals($obj->viewBag, $properties);\n        $this->assertInstanceOf('Cms\\Components\\ViewBag', $viewBag);\n        $this->assertArrayHasKey('title', $properties);\n        $this->assertEquals('Toxicity', $properties['title']);\n    }\n\n    public function testGetViewBagEmpty()\n    {\n        $theme = Theme::load('test');\n\n        $obj = TestParsedCmsCompoundObject::load($theme, 'compound.htm');\n\n        $viewBag = $obj->getViewBag();\n        $this->assertInstanceOf('Cms\\Components\\ViewBag', $viewBag);\n        $properties = $viewBag->getProperties();\n        $this->assertEmpty($properties);\n        $this->assertEquals($obj->viewBag, $properties);\n    }\n\n    //\n    // Helpers\n    //\n\n    protected function assertFileEqualsNormalized($expected, $actual)\n    {\n        $expected = file_get_contents($expected);\n        $expected = preg_replace('~\\R~u', PHP_EOL, $expected); // Normalize EOL\n\n        $actual = file_get_contents($actual);\n        $actual = preg_replace('~\\R~u', PHP_EOL, $actual); // Normalize EOL\n\n        $this->assertEquals($expected, $actual);\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/CmsExceptionTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Router;\nuse Cms\\Classes\\CmsException;\nuse October\\Rain\\Exception\\SystemException;\n\nclass CmsExceptionTest extends TestCase\n{\n    //\n    // Tests\n    //\n\n    public function testExceptionMask()\n    {\n        $foreignException = new \\Exception('This is a general error');\n        $exceptionMask = new SystemException('This is a system exception');\n        $exceptionMask->setMask($foreignException);\n\n        $this->assertEquals('This is a general error', $exceptionMask->getMessage());\n    }\n\n    public function testCmsExceptionPhp()\n    {\n        $theme = Theme::load('test');\n        $router = new Router($theme);\n        $page = $router->findByUrl('/throw-php');\n\n        $foreignException = new ErrorException('This is a general error', 100, 1, 'test.php', 20);\n        $this->setProtectedProperty($foreignException, 'file', \"/modules/cms/classes/CodeParser.php(165) : eval()'d code line 7\");\n        $this->setProtectedProperty($foreignException, 'line', 20);\n\n        $exception = new CmsException($page, 300);\n        $exception->setMask($foreignException);\n\n        $this->assertEquals($page->getFilePath(), $exception->getFile());\n        $this->assertEquals('PHP Content', $exception->getErrorType());\n        $this->assertEquals('This is a general error', $exception->getMessage());\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/CmsObjectQueryTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Layout;\nuse October\\Rain\\Halcyon\\Model;\n\nclass CmsObjectQueryTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Model::clearBootedModels();\n        Model::flushEventListeners();\n    }\n\n    public function testWhere()\n    {\n        $page = Page::where('layout', 'caramba')->first();\n        $this->assertEquals('/no-layout', $page->url);\n    }\n\n    public function testWhereComponent()\n    {\n        $pages = Page::whereComponent('testArchive', 'posts-per-page', '6');\n        $this->assertCount(1, $pages->all());\n\n        $page = $pages->first();\n        $this->assertEquals('/with-components', $page->url);\n    }\n\n    public function testWithComponent()\n    {\n        $pages = Page::withComponent('testArchive')->all();\n        $this->assertCount(2, $pages);\n        foreach ($pages as $page) {\n            $this->assertTrue(!!$page->hasComponent('testArchive'));\n        }\n    }\n\n    public function testWithComponentCallback()\n    {\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Archive.php';\n\n        $pages = Page::withComponent('testArchive', function ($component) {\n            return $component->property('posts-per-page') == '69';\n        })->all();\n\n        $this->assertCount(1, $pages);\n    }\n\n    public function testLists()\n    {\n        // Default theme: test\n        $pages = Page::lists('baseFileName');\n        sort($pages);\n\n        $this->assertEquals([\n            \"404\",\n            \"a/a-page\",\n            \"ajax-test\",\n            \"authors\",\n            \"b/b-page\",\n            \"b/c/c-page\",\n            \"blog-archive\",\n            \"blog-category\",\n            \"blog-post\",\n            \"code-namespaces\",\n            \"code-namespaces-aliases\",\n            \"component-custom-render\",\n            \"component-partial\",\n            \"component-partial-alias-override\",\n            \"component-partial-nesting\",\n            \"component-partial-override\",\n            \"cycle-test\",\n            \"index\",\n            \"no-component\",\n            \"no-component-class\",\n            \"no-layout\",\n            \"no-partial\",\n            \"optional-full-php-tags\",\n            \"optional-short-php-tags\",\n            \"throw-php\",\n            \"with-component\",\n            \"with-components\",\n            \"with-content\",\n            \"with-layout\",\n            \"with-partials\",\n            \"with-placeholder\",\n        ], $pages);\n\n        $layouts = Layout::lists('baseFileName');\n        sort($layouts);\n\n        $this->assertEquals([\n            \"a/a-layout\",\n            \"ajax-test\",\n            \"content\",\n            \"cycle-test\",\n            \"no-php\",\n            \"partials\",\n            \"php-parser-test\",\n            \"placeholder\",\n            \"sidebar\",\n        ], $layouts);\n    }\n\n    public function testListsNonExistentTheme()\n    {\n        $pages = Page::inTheme('NON_EXISTENT_THEME')->lists('baseFileName');\n        $this->assertEmpty($pages);\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/CmsObjectTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\CmsObject;\nuse Cms\\Classes\\Theme;\n\nclass TestCmsObject extends CmsObject\n{\n    protected $dirName = 'testobjects';\n\n    protected $allowedExtensions = ['htm', 'html'];\n}\n\nclass TestTemporaryCmsObject extends CmsObject\n{\n    protected $dirName = 'temporary';\n}\n\nclass CmsObjectTest extends TestCase\n{\n    public function testLoad()\n    {\n        $theme = Theme::load('test');\n\n        $obj = TestCmsObject::load($theme, 'plain.html');\n        $this->assertEquals('<p>This is a test HTML content file.</p>', $obj->getContent());\n        $this->assertEquals('plain.html', $obj->getFileName());\n\n        $path = $theme->getPath().'/testobjects/plain.html';\n        $this->assertEquals($path, $obj->getFilePath());\n        $this->assertEquals(filemtime($path), $obj->mtime);\n    }\n\n    public function testLoadFromSubdirectory()\n    {\n        $theme = Theme::load('test');\n\n        $obj = TestCmsObject::load($theme, 'subdir/obj.html');\n        $this->assertEquals('<p>This is an object in a subdirectory.</p>', $obj->getContent());\n        $this->assertEquals('subdir/obj.html', $obj->getFileName());\n\n        $path = $theme->getPath().'/testobjects/subdir/obj.html';\n        $this->assertEquals($path, $obj->getFilePath());\n        $this->assertEquals(filemtime($path), $obj->mtime);\n    }\n\n    public function testValidateLoadInvalidTheme()\n    {\n        $theme = Theme::load('none');\n\n        $this->assertNull(TestCmsObject::load($theme, 'plain.html'));\n    }\n\n    public function testValidateLoadInvalidFile()\n    {\n        $theme = Theme::load('test');\n\n        $this->assertNull(TestCmsObject::load($theme, 'none'));\n    }\n\n    public function testCache()\n    {\n        $theme = Theme::load('test');\n        $themePath = $theme->getPath();\n\n        $filePath = $themePath .= '/temporary/test.htm';\n        if (file_exists($filePath)) {\n            @unlink($filePath);\n        }\n\n        $this->assertFileNotExists($filePath);\n\n        file_put_contents($filePath, '<p>Test content</p>');\n\n        /*\n         * First try - the object should be loaded from the file\n         */\n        $obj = TestTemporaryCmsObject::loadCached($theme, 'test.htm');\n        $this->assertFalse($obj->isLoadedFromCache());\n        $this->assertEquals('<p>Test content</p>', $obj->getContent());\n        $this->assertEquals('test.htm', $obj->getFileName());\n        $this->assertEquals(filemtime($filePath), $obj->mtime);\n\n        /*\n         * Second try - the object should be loaded from the cache\n         */\n        $obj = TestTemporaryCmsObject::loadCached($theme, 'test.htm');\n        $this->assertTrue($obj->isLoadedFromCache());\n        $this->assertEquals('<p>Test content</p>', $obj->getContent());\n        $this->assertEquals('test.htm', $obj->getFileName());\n        $this->assertEquals(filemtime($filePath), $obj->mtime);\n\n        /*\n         * Modify the file. The object should be loaded from the disk and re-cached.\n         */\n        sleep(1); // Sleep a second in order to have the update file modification time\n        file_put_contents($filePath, '<p>Updated test content</p>');\n        clearstatcache(); // The filemtime() function caches its value within a request, so we should clear its cache.\n\n        $obj = TestTemporaryCmsObject::loadCached($theme, 'test.htm');\n        $this->assertFalse($obj->isLoadedFromCache());\n        $this->assertEquals('<p>Updated test content</p>', $obj->getContent());\n        $this->assertEquals(filemtime($filePath), $obj->mtime);\n\n        $obj = TestTemporaryCmsObject::loadCached($theme, 'test.htm');\n        $this->assertTrue($obj->isLoadedFromCache());\n        $this->assertEquals('<p>Updated test content</p>', $obj->getContent());\n        $this->assertEquals(filemtime($filePath), $obj->mtime);\n\n        /*\n         * Delete the file. The loadCached() should return null\n         */\n        @unlink($filePath);\n        $this->assertFileNotExists($filePath);\n\n        $obj = TestTemporaryCmsObject::loadCached($theme, 'test.htm');\n        $this->assertNull($obj);\n    }\n\n    public function testFillFillable()\n    {\n        $theme = Theme::load('apitest');\n\n        $testContents = 'mytestcontent';\n        $obj = TestCmsObject::inTheme($theme);\n        $obj->fill([\n            'fileName' => 'mytestobj',\n            'content' => $testContents\n        ]);\n\n        $this->assertEquals($testContents, $obj->getContent());\n        $this->assertEquals('mytestobj.htm', $obj->getFileName());\n    }\n\n    public function testFillNotFillable()\n    {\n        $theme = Theme::load('apitest');\n\n        $testContents = 'mytestcontent';\n        $obj = TestCmsObject::inTheme($theme);\n        $obj->fill([\n            'something' => 'mytestobj',\n            'content' => $testContents\n        ]);\n\n        $this->assertNull($obj->something);\n    }\n\n    public function testFillInvalidFileNameSymbol()\n    {\n        $this->expectException(\\October\\Rain\\Exception\\ValidationException::class);\n        $this->expectExceptionMessage('Invalid file name');\n\n        $theme = Theme::load('apitest');\n\n        $testContents = 'mytestcontent';\n        $obj = TestCmsObject::inTheme($theme);\n        $obj->fill([\n            'fileName' => '@name'\n        ]);\n        $obj->save();\n    }\n\n    public function testFillInvalidFileNamePath()\n    {\n        $this->expectException(\\October\\Rain\\Exception\\ValidationException::class);\n        $this->expectExceptionMessage('Invalid file name');\n\n        $theme = Theme::load('apitest');\n\n        $testContents = 'mytestcontent';\n        $obj = TestCmsObject::inTheme($theme);\n        $obj->fill([\n            'fileName' => '../somefile'\n        ]);\n        $obj->save();\n    }\n\n    public function testFillInvalidFileSlash()\n    {\n        $this->expectException(\\October\\Rain\\Exception\\ValidationException::class);\n        $this->expectExceptionMessage('Invalid file name');\n\n        $theme = Theme::load('apitest');\n\n        $testContents = 'mytestcontent';\n        $obj = TestCmsObject::inTheme($theme);\n        $obj->fill([\n            'fileName' => '/somefile'\n        ]);\n        $obj->save();\n    }\n\n    public function testFillEmptyFileName()\n    {\n        $this->expectException(\\October\\Rain\\Exception\\ValidationException::class);\n        $this->expectExceptionMessage('The File Name field is required');\n\n        $theme = Theme::load('apitest');\n\n        $testContents = 'mytestcontent';\n        $obj = TestCmsObject::inTheme($theme);\n        $obj->fill([\n            'fileName' => ' '\n        ]);\n        $obj->save();\n    }\n\n    public function testSave()\n    {\n        $theme = Theme::load('apitest');\n\n        $destFilePath = $theme->getPath().'/testobjects/mytestobj.htm';\n        if (file_exists($destFilePath)) {\n            unlink($destFilePath);\n        }\n\n        $this->assertFileNotExists($destFilePath);\n\n        $testContents = 'mytestcontent';\n        $obj = TestCmsObject::inTheme($theme);\n        $obj->fill([\n            'fileName' => 'mytestobj',\n            'content' => $testContents\n        ]);\n        $obj->save();\n\n        $this->assertFileExists($destFilePath);\n        $this->assertEquals($testContents, file_get_contents($destFilePath));\n    }\n\n    /**\n     * @depends testSave\n     */\n    public function testRename()\n    {\n        $theme = Theme::load('apitest');\n\n        $srcFilePath = $theme->getPath().'/testobjects/mytestobj.htm';\n        $this->assertFileExists($srcFilePath);\n\n        $destFilePath = $theme->getPath().'/testobjects/anotherobj.htm';\n        if (file_exists($destFilePath)) {\n            unlink($destFilePath);\n        }\n\n        $testContents = 'mytestcontent';\n        $obj = TestCmsObject::load($theme, 'mytestobj.htm');\n        $this->assertEquals($testContents, $obj->getContent());\n\n        $obj->fill([\n            'fileName' => 'anotherobj'\n        ]);\n        $obj->save();\n\n        $this->assertFileNotExists($srcFilePath);\n        $this->assertFileExists($destFilePath);\n        $this->assertEquals($testContents, file_get_contents($destFilePath));\n    }\n\n    /**\n     * @depends testRename\n     */\n    public function testRenameToExistingFile()\n    {\n        $this->expectException(\\October\\Rain\\Exception\\ValidationException::class);\n        $this->expectExceptionMessage('already exists');\n\n        $theme = Theme::load('apitest');\n\n        $srcFilePath = $theme->getPath().'/testobjects/anotherobj.htm';\n        $this->assertFileExists($srcFilePath);\n\n        $destFilePath = $theme->getPath().'/testobjects/existingobj.htm';\n        if (!file_exists($destFilePath)) {\n            file_put_contents($destFilePath, 'str');\n        }\n        $this->assertFileExists($destFilePath);\n\n        $obj = TestCmsObject::load($theme, 'anotherobj.htm');\n        $obj->fill(['fileName' => 'existingobj']);\n        $obj->save();\n    }\n\n    /**\n     * @depends testRename\n     */\n    public function testSaveSameName()\n    {\n        $theme = Theme::load('apitest');\n\n        $filePath = $theme->getPath().'/testobjects/anotherobj.htm';\n        $this->assertFileExists($filePath);\n\n        $testContents = 'new content';\n        $obj = TestCmsObject::load($theme, 'anotherobj.htm');\n\n        $obj->fill([\n            'fileName' => 'anotherobj',\n            'content' => $testContents\n        ]);\n        $obj->save();\n\n        $this->assertFileExists($filePath);\n        $this->assertEquals($testContents, file_get_contents($filePath));\n    }\n\n    public function testSaveNewDir()\n    {\n        $theme = Theme::load('apitest');\n\n        $destFilePath = $theme->getPath().'/testobjects/testsubdir/mytestobj.htm';\n        if (file_exists($destFilePath)) {\n            unlink($destFilePath);\n        }\n\n        $destDirPath = dirname($destFilePath);\n        if (file_exists($destDirPath) && is_dir($destDirPath)) {\n            rmdir($destDirPath);\n        }\n\n        $this->assertFileNotExists($destFilePath);\n        $this->assertFileNotExists($destDirPath);\n\n        $testContents = 'mytestcontent';\n        $obj = TestCmsObject::inTheme($theme);\n        $obj->fill([\n            'fileName' => 'testsubdir/mytestobj.htm',\n            'content' => $testContents\n        ]);\n        $obj->save();\n\n        $this->assertFileExists($destFilePath);\n        $this->assertEquals($testContents, file_get_contents($destFilePath));\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/CodeParserTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\PageCode;\nuse Cms\\Classes\\LayoutCode;\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Layout;\nuse Cms\\Classes\\CodeParser;\nuse Cms\\Classes\\Controller;\n\nclass CodeParserTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setup();\n\n        /*\n         * Clear cache\n         */\n        foreach (File::directories(storage_path() . '/cms/cache') as $directory) {\n            File::deleteDirectory($directory);\n        }\n    }\n\n    public static function getProperty($name)\n    {\n        $class = new ReflectionClass(CodeParser::class);\n        $property = $class->getProperty($name);\n\n        return $property;\n    }\n\n    public function testParser()\n    {\n        $theme = Theme::load('test');\n\n        $layout = Layout::load($theme, 'php-parser-test.htm');\n        $this->assertNotEmpty($layout);\n\n        $parser = new CodeParser($layout);\n        $info = $parser->parse();\n\n        $this->assertIsArray($info);\n        $this->assertArrayHasKey('filePath', $info);\n        $this->assertArrayHasKey('className', $info);\n        $this->assertArrayHasKey('source', $info);\n\n        $this->assertFileExists($info['filePath']);\n\n        $controller = new Controller($theme);\n        $obj = $parser->source(null, $layout, $controller);\n        $this->assertInstanceOf(LayoutCode::class, $obj);\n\n        /*\n         * Test the file contents\n         */\n\n        $body = preg_replace('/^\\s*function/m', 'public function', $layout->code);\n        $expectedContent = '<?php ' . PHP_EOL;\n\n        $expectedContent .= 'class ' . $info['className'] . ' extends ' . LayoutCode::class . PHP_EOL;\n        $expectedContent .= '{' . PHP_EOL;\n        $expectedContent .= $body . PHP_EOL;\n        $expectedContent .= '}' . PHP_EOL;\n\n        $this->assertEquals($expectedContent, file_get_contents($info['filePath']));\n\n        /*\n         * Test caching - the first time the file should be parsed\n         */\n\n        $this->assertEquals('parser', $info['source']);\n\n        /*\n         * Test caching - the second time the file should be loaded from the request-wide cache\n         */\n\n        $parser = new CodeParser($layout);\n        $info = $parser->parse();\n        $this->assertIsArray($info);\n        $this->assertEquals('request-cache', $info['source']);\n        $this->assertFileExists($info['filePath']);\n\n        /*\n         * Test caching - reset the request-wide cache and let the parser to load the file from the cache\n         */\n\n        $property = $this->getProperty('cache');\n        $property->setValue($parser, []);\n\n        $parser = new CodeParser($layout);\n        $info = $parser->parse();\n        $this->assertIsArray($info);\n        $this->assertEquals('cache', $info['source']);\n        $this->assertFileExists($info['filePath']);\n\n        /*\n         * Test caching - the cached data should now be stored in the request-wide cache again\n         */\n\n        $parser = new CodeParser($layout);\n        $info = $parser->parse();\n        $this->assertIsArray($info);\n        $this->assertEquals('request-cache', $info['source']);\n        $this->assertFileExists($info['filePath']);\n\n        /*\n         * Test caching - update the file modification time and reset the internal cache. The file should be parsed.\n         */\n\n        $this->assertTrue(@touch($layout->getFilePath()));\n        $layout = Layout::load($theme, 'php-parser-test.htm');\n        $this->assertNotEmpty($layout);\n        $parser = new CodeParser($layout);\n        $property->setValue($parser, []);\n\n        $info = $parser->parse();\n        $this->assertIsArray($info);\n        $this->assertEquals('parser', $info['source']);\n        $this->assertFileExists($info['filePath']);\n    }\n\n    public function testParseNoPhp()\n    {\n        $theme = Theme::load('test');\n\n        $layout = Layout::load($theme, 'no-php.htm');\n        $this->assertNotEmpty($layout);\n\n        $parser = new CodeParser($layout);\n        $info = $parser->parse();\n\n        $this->assertIsArray($info);\n        $this->assertArrayHasKey('filePath', $info);\n        $this->assertArrayHasKey('className', $info);\n        $this->assertArrayHasKey('source', $info);\n\n        $this->assertFileExists($info['filePath']);\n\n        $expectedContent = '<?php ' . PHP_EOL;\n        $expectedContent .= 'class ' . $info['className'] . ' extends ' . LayoutCode::class . PHP_EOL;\n        $expectedContent .= '{' . PHP_EOL;\n        $expectedContent .= PHP_EOL;\n        $expectedContent .= '}' . PHP_EOL;\n\n        $this->assertEquals($expectedContent, file_get_contents($info['filePath']));\n    }\n\n    public function testParsePage()\n    {\n        $theme = Theme::load('test');\n\n        $page = Page::load($theme, 'cycle-test.htm');\n        $this->assertNotEmpty($page);\n\n        $parser = new CodeParser($page);\n        $info = $parser->parse();\n\n        $this->assertIsArray($info);\n        $this->assertArrayHasKey('filePath', $info);\n        $this->assertArrayHasKey('className', $info);\n        $this->assertArrayHasKey('source', $info);\n\n        $this->assertFileExists($info['filePath']);\n        $controller = new Controller($theme);\n        $obj = $parser->source($page, null, $controller);\n        $this->assertInstanceOf(PageCode::class, $obj);\n\n        $body = preg_replace('/^\\s*function/m', 'public function', $page->code);\n        $expectedContent = '<?php ' . PHP_EOL;\n        $expectedContent .= 'class ' . $info['className'] . ' extends ' . PageCode::class . PHP_EOL;\n        $expectedContent .= '{' . PHP_EOL;\n        $expectedContent .= $body . PHP_EOL;\n        $expectedContent .= '}' . PHP_EOL;\n\n        $this->assertEquals($expectedContent, file_get_contents($info['filePath']));\n    }\n\n    public function testOptionalPhpTags()\n    {\n        $theme = Theme::load('test');\n\n        /*\n         * Test short PHP tags\n         */\n\n        $page = Page::load($theme, 'optional-short-php-tags.htm');\n        $this->assertNotEmpty($page);\n\n        $parser = new CodeParser($page);\n        $info = $parser->parse();\n\n        $this->assertIsArray($info);\n        $this->assertArrayHasKey('filePath', $info);\n        $this->assertArrayHasKey('className', $info);\n        $this->assertArrayHasKey('source', $info);\n\n        $this->assertFileExists($info['filePath']);\n        $controller = new Controller($theme);\n        $obj = $parser->source($page, null, $controller);\n        $this->assertInstanceOf('\\Cms\\Classes\\PageCode', $obj);\n\n        $body = preg_replace('/^\\s*function/m', 'public function', $page->code);\n        $expectedContent = '<?php ' . PHP_EOL;\n        $expectedContent .= 'class ' . $info['className'] . ' extends ' . PageCode::class . PHP_EOL;\n        $expectedContent .= '{' . PHP_EOL;\n        $expectedContent .= $body . PHP_EOL;\n        $expectedContent .= '}' . PHP_EOL;\n\n        $this->assertEquals($expectedContent, file_get_contents($info['filePath']));\n\n        /*\n         * Test full PHP tags\n         */\n\n        $page = Page::load($theme, 'optional-full-php-tags.htm');\n        $this->assertNotEmpty($page);\n\n        $parser = new CodeParser($page);\n        $info = $parser->parse();\n\n        $this->assertIsArray($info);\n        $this->assertArrayHasKey('filePath', $info);\n        $this->assertArrayHasKey('className', $info);\n        $this->assertArrayHasKey('source', $info);\n\n        $this->assertFileExists($info['filePath']);\n        $controller = new Controller($theme);\n        $obj = $parser->source($page, null, $controller);\n        $this->assertInstanceOf(PageCode::class, $obj);\n\n        $body = preg_replace('/^\\s*function/m', 'public function', $page->code);\n        $expectedContent = '<?php ' . PHP_EOL;\n        $expectedContent .= 'class ' . $info['className'] . ' extends ' . PageCode::class . PHP_EOL;\n        $expectedContent .= '{' . PHP_EOL;\n        $expectedContent .= $body . PHP_EOL;\n        $expectedContent .= '}' . PHP_EOL;\n\n        $this->assertEquals($expectedContent, file_get_contents($info['filePath']));\n    }\n\n    // public function testSyntaxErrors()\n    // {\n    //     $this->markTestIncomplete('Test PHP parsing errors here.');\n    // }\n\n    public function testNamespaces()\n    {\n        $theme = Theme::load('test');\n\n        $page = Page::load($theme, 'code-namespaces.htm');\n        $this->assertNotEmpty($page);\n\n        $parser = new CodeParser($page);\n        $info = $parser->parse();\n\n        $this->assertIsArray($info);\n        $this->assertArrayHasKey('filePath', $info);\n        $this->assertArrayHasKey('className', $info);\n        $this->assertArrayHasKey('source', $info);\n\n        $this->assertFileExists($info['filePath']);\n        $controller = new Controller($theme);\n        $obj = $parser->source($page, null, $controller);\n        $this->assertInstanceOf(PageCode::class, $obj);\n\n        $referenceFilePath = base_path('/modules/cms/tests/fixtures/reference/namespaces.php.stub');\n        $this->assertFileExists($referenceFilePath);\n        $referenceContents = $this->getContents($referenceFilePath);\n\n        $referenceContents = str_replace('{className}', $info['className'], $referenceContents);\n\n        $this->assertEquals($referenceContents, $this->getContents($info['filePath']));\n    }\n\n    public function testNamespacesAliases()\n    {\n        $theme = Theme::load('test');\n\n        $page = Page::load($theme, 'code-namespaces-aliases.htm');\n        $this->assertNotEmpty($page);\n\n        $parser = new CodeParser($page);\n        $info = $parser->parse();\n\n        $this->assertIsArray($info);\n        $this->assertArrayHasKey('filePath', $info);\n        $this->assertArrayHasKey('className', $info);\n        $this->assertArrayHasKey('source', $info);\n\n        $this->assertFileExists($info['filePath']);\n        $controller = new Controller($theme);\n        $obj = $parser->source($page, null, $controller);\n        $this->assertInstanceOf(PageCode::class, $obj);\n\n        $referenceFilePath = base_path('/modules/cms/tests/fixtures/reference/namespaces-aliases.php.stub');\n        $this->assertFileExists($referenceFilePath);\n        $referenceContents = $this->getContents($referenceFilePath);\n\n        $referenceContents = str_replace('{className}', $info['className'], $referenceContents);\n\n        $this->assertEquals($referenceContents, $this->getContents($info['filePath']));\n    }\n\n    //\n    // Helpers\n    //\n\n    protected function getContents($path)\n    {\n        $content = file_get_contents($path);\n        $content = preg_replace('~\\R~u', PHP_EOL, $content); // Normalize EOL\n        return $content;\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/ComponentManagerTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Layout;\nuse Cms\\Classes\\Controller;\nuse Cms\\Classes\\CodeParser;\nuse Cms\\Classes\\ComponentManager;\n\nclass ComponentManagerTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Archive.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Post.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/MainMenu.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/ContentBlock.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Comments.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/classes/Users.php';\n    }\n\n\n    public function testListComponents()\n    {\n        $manager = ComponentManager::instance();\n        $components = $manager->listComponents();\n\n        $this->assertArrayHasKey('testArchive', $components);\n        $this->assertArrayHasKey('testPost', $components);\n    }\n\n    public function testListComponentDetails()\n    {\n        $manager = ComponentManager::instance();\n        $components = $manager->listComponentDetails();\n\n        $this->assertArrayHasKey('testArchive', $components);\n        $this->assertArrayHasKey('name', $components['testArchive']);\n        $this->assertArrayHasKey('description', $components['testArchive']);\n        $this->assertEquals('Blog Archive Dummy Component', $components['testArchive']['name']);\n        $this->assertEquals('Displays an archive of blog posts.', $components['testArchive']['description']);\n\n        $this->assertArrayHasKey('testPost', $components);\n        $this->assertArrayHasKey('name', $components['testPost']);\n        $this->assertArrayHasKey('description', $components['testPost']);\n        $this->assertEquals('Blog Post Dummy Component', $components['testPost']['name']);\n        $this->assertEquals('Displays a blog post.', $components['testPost']['description']);\n    }\n\n    public function testGetComponentWithFactoryUsingAutomaticResolution()\n    {\n        $manager = ComponentManager::instance();\n        $components = $manager->listComponentDetails();\n\n        $this->assertArrayHasKey('testComments', $components);\n        $this->assertArrayHasKey('name', $components['testComments']);\n        $this->assertArrayHasKey('description', $components['testComments']);\n        $this->assertEquals('Blog Comments Dummy Component', $components['testComments']['name']);\n        $this->assertEquals('Displays the list of comments on a post.', $components['testComments']['description']);\n\n        $comments = $manager->makeComponent('testComments', $this->spoofPageCode(), []);\n        $users = $comments->getUsers()->getUsers();\n\n        $this->assertArrayHasKey('Art Vandelay', $users);\n        $this->assertArrayHasKey('Carl', $users);\n        $this->assertEquals('Arquitecht and Importer/Exporter', $users['Art Vandelay']);\n        $this->assertEquals('where is he?', $users['Carl']);\n    }\n\n    public function testFindByAlias()\n    {\n        $manager = ComponentManager::instance();\n\n        $component = $manager->resolve('testArchive');\n        $this->assertEquals('October\\Tester\\Components\\Archive', $component);\n\n        $component = $manager->resolve('testPost');\n        $this->assertEquals('October\\Tester\\Components\\Post', $component);\n    }\n\n    public function testHasComponent()\n    {\n        $manager = ComponentManager::instance();\n        $result = $manager->hasComponent('testArchive');\n        $this->assertTrue($result);\n\n        $result = $manager->hasComponent('October\\Tester\\Components\\Archive');\n        $this->assertTrue($result);\n\n        $result = $manager->hasComponent('October\\Tester\\Components\\Post');\n        $this->assertTrue($result);\n    }\n\n    public function testMakeComponent()\n    {\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Archive.php';\n\n        $pageObj = $this->spoofPageCode();\n\n        // Test a defined property\n        $manager = ComponentManager::instance();\n        $object = $manager->makeComponent('testArchive', $pageObj, ['posts-per-page' => 20]);\n        $this->assertNotNull($object);\n        $this->assertEquals(20, $object->property('posts-per-page'));\n\n        // Test an undefined property with default\n        $object = $manager->makeComponent('testArchive', $pageObj);\n        $this->assertNotNull($object);\n        $this->assertEquals(10, $object->property('posts-per-page'));\n        $this->assertEquals(2020, $object->property('undefined-property', 2020));\n    }\n\n    public function testDefineProperties()\n    {\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Archive.php';\n        $manager = ComponentManager::instance();\n        $object = $manager->makeComponent('testArchive');\n        $details = $object->componentDetails();\n        $this->assertCount(2, $details);\n        $this->assertNotNull($details);\n        $this->assertArrayHasKey('name', $details);\n        $this->assertArrayHasKey('description', $details);\n        $this->assertEquals('Blog Archive Dummy Component', $details['name']);\n    }\n\n    private function spoofPageCode()\n    {\n        // Spoof all the objects we need to make a page object\n        $theme = Theme::load('test');\n        $page = Page::load($theme, 'index.htm');\n        $layout = Layout::load($theme, 'content.htm');\n        $controller = new Controller($theme);\n        $parser = new CodeParser($page);\n        $pageObj = $parser->source($page, $layout, $controller);\n        return $pageObj;\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/ContentTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Content;\n\nclass ContentTest extends TestCase\n{\n\n    public function testMarkdownContent()\n    {\n        $theme = Theme::load('test');\n        $content = Content::load($theme, 'markdown-content.md');\n\n        $this->assertEquals('Be brave, be **bold**, live *italic*', $content->markup);\n        $this->assertEquals('<p>Be brave, be <strong>bold</strong>, live <em>italic</em></p>', $content->parsedMarkup);\n    }\n\n    public function testTextContent()\n    {\n        $theme = Theme::load('test');\n        $content = Content::load($theme, 'text-content.txt');\n\n        $this->assertEquals('Pen is <mightier> than the sword, HTML is <richer> than the text', $content->markup);\n        $this->assertEquals('Pen is &lt;mightier&gt; than the sword, HTML is &lt;richer&gt; than the text', $content->parsedMarkup);\n    }\n\n    public function testHtmlContent()\n    {\n        $theme = Theme::load('test');\n        $content = Content::load($theme, 'html-content.htm');\n\n        $this->assertEquals('<a href=\"#\">Stephen Saucier</a> changed his profile picture &mdash; <small>7 hrs ago</small></div>', $content->markup);\n        $this->assertEquals('<a href=\"#\">Stephen Saucier</a> changed his profile picture &mdash; <small>7 hrs ago</small></div>', $content->parsedMarkup);\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/ControllerTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Controller;\nuse October\\Rain\\Halcyon\\Model;\n\nclass ControllerTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Model::clearBootedModels();\n        Model::flushEventListeners();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Archive.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Post.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/MainMenu.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/ContentBlock.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Comments.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/classes/Users.php';\n    }\n\n    /**\n     * normalizeLineEndings for cross-platform test compatibility\n     */\n    protected function normalizeLineEndings($string)\n    {\n        return str_replace(\"\\r\\n\", \"\\n\", $string);\n    }\n\n    public function testThemeUrl()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n\n        $url = $controller->themeUrl();\n        $this->assertEquals(url('/themes/test'), $url);\n\n        $url = $controller->themeUrl('foo/bar.css');\n        $this->assertEquals(url('/themes/test/foo/bar.css'), $url);\n\n        //\n        // These tests seem to bear different results\n        //\n\n        // $url = $controller->themeUrl(['assets/css/style1.css', 'assets/css/style2.css']);\n        // $url = substr($url, 0, strpos($url, '-'));\n        // $this->assertEquals('/combine/88634b8fa6f4f6442ce830d38296640a', $url);\n\n        // $url = $controller->themeUrl(['assets/js/script1.js', 'assets/js/script2.js']);\n        // $url = substr($url, 0, strpos($url, '-'));\n        // $this->assertEquals('/combine/860afc990164a60a8e90682d04da27ee', $url);\n    }\n\n    public function test404()\n    {\n        /*\n         * Test the built-in 404 page\n         */\n        $theme = Theme::load('apitest');\n        $controller = new Controller($theme);\n        $response = $controller->run('/some-page-that-doesnt-exist');\n        $this->assertNotEmpty($response);\n        $this->assertInstanceOf('\\Illuminate\\Http\\Response', $response);\n        ob_start();\n        include base_path().'/modules/cms/views/404.php';\n        $page404Content = ob_get_contents();\n        ob_end_clean();\n        $this->assertEquals($page404Content, $response->getContent());\n\n        /*\n         * Test the theme 404 page\n         */\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/some-page-that-doesnt-exist');\n        $this->assertInstanceOf('Symfony\\Component\\HttpFoundation\\Response', $response);\n        $content = $response->getContent();\n        $this->assertIsString($content);\n        $this->assertEquals('<p>Page not found</p>', $content);\n    }\n\n    public function testRoot()\n    {\n        /*\n         * Test the / route and the fallback layout\n         */\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/');\n        $this->assertInstanceOf('Symfony\\Component\\HttpFoundation\\Response', $response);\n        $content = $response->getContent();\n        $this->assertIsString($content);\n        $this->assertEquals('<h1>My Webpage</h1>', trim($content));\n    }\n\n    public function testLayoutNotFound()\n    {\n        $this->expectException(\\Cms\\Classes\\CmsException::class);\n        $this->expectExceptionMessageMatches('/is\\snot\\sfound/');\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/no-layout');\n    }\n\n    public function testExistingLayout()\n    {\n        /*\n         * Test existing layout\n         */\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/with-layout');\n        $this->assertInstanceOf('Symfony\\Component\\HttpFoundation\\Response', $response);\n        $content = $response->getContent();\n        $this->assertEquals('<div><p>Hey</p></div>', $content);\n    }\n\n    public function testPartials()\n    {\n        /*\n         * Test partials referred in the layout and page\n         */\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/with-partials')->getContent();\n        $this->assertEquals('<div>LAYOUT PARTIAL<p>Hey PAGE PARTIAL Homer Simpson The body value is \"foobar\" A partial</p></div>', $response);\n    }\n\n    public function testContent()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/with-content')->getContent();\n        $this->assertEquals('<div>LAYOUT CONTENT<p>Hey PAGE CONTENT A content</p></div>', $response);\n    }\n\n    public function testBlocks()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/with-placeholder')->getContent();\n        $this->assertEquals(\"<div>LAYOUT CONTENT <span>BLOCK\\n  DEFAULT</span> <p>Hey PAGE CONTENT</p></div><p>SECOND BLOCK</p>THIRD VARIABLE\", $response);\n    }\n\n    public function testLayoutInSubdirectory()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/apage')->getContent();\n        $this->assertEquals(\"<div>LAYOUT CONTENT <h1>This page is a subdirectory</h1></div>\", $response);\n    }\n\n    public function testPartialNotFound()\n    {\n        $this->expectException(\\Twig\\Error\\RuntimeError::class);\n        $this->expectExceptionMessageMatches('/is\\snot\\sfound/');\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/no-partial')->getContent();\n    }\n\n    public function testPageLifeCycle()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/cycle-test')->getContent();\n        $this->assertEquals('12345', $response);\n    }\n\n    protected function configAjaxRequestMock($handler, $partials = false)\n    {\n        // Create a partial mock that initializes properly for PHP 8.5+ typed properties\n        $requestMock = $this->getMockBuilder(\\Illuminate\\Http\\Request::class)\n            ->setConstructorArgs([[], [], [], [], [], ['REQUEST_METHOD' => 'POST']])\n            ->onlyMethods(['ajax', 'header'])\n            ->getMock();\n\n        $requestMock->expects($this->any())\n            ->method('ajax')\n            ->willReturn(true);\n\n        $requestMock->expects($this->any())\n            ->method('header')\n            ->willReturnCallback(function ($key, $default = null) use ($handler, $partials) {\n                return match ($key) {\n                    'X-AJAX-HANDLER' => $handler,\n                    'X-AJAX-PARTIALS' => $partials ?: '',\n                    'X-AJAX-FLASH' => null,\n                    'X-AJAX-PARTIAL' => null,\n                    default => $default,\n                };\n            });\n\n        return $requestMock;\n    }\n\n    public function testAjaxHandlerNotFound()\n    {\n        Request::swap($this->configAjaxRequestMock('onNoHandler', ''));\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/ajax-test');\n\n        $this->assertInstanceOf(\\Larajax\\Classes\\AjaxResponse::class, $response);\n        $httpResponse = $response->toResponse(request());\n        $content = $httpResponse->getOriginalContent();\n        $this->assertArrayHasKey('__ajax', $content);\n        $this->assertFalse($content['__ajax']['ok']);\n        $this->assertStringContainsString('onNoHandler', $content['__ajax']['message']);\n    }\n\n    public function testAjaxInvalidHandlerName()\n    {\n        Request::swap($this->configAjaxRequestMock('delete'));\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/ajax-test');\n\n        // Invalid handler name is not an AJAX request, returns normal page\n        $this->assertInstanceOf('Symfony\\Component\\HttpFoundation\\Response', $response);\n    }\n\n    public function testAjaxInvalidPartial()\n    {\n        Request::swap($this->configAjaxRequestMock('onTest', 'p:artial'));\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/ajax-test');\n\n        $this->assertInstanceOf(\\Larajax\\Classes\\AjaxResponse::class, $response);\n        $httpResponse = $response->toResponse(request());\n        $content = $httpResponse->getOriginalContent();\n        $this->assertArrayHasKey('__ajax', $content);\n        $this->assertFalse($content['__ajax']['ok']);\n        $this->assertStringContainsString('p:artial', $content['__ajax']['message']);\n    }\n\n    public function testAjaxPartialNotFound()\n    {\n        Request::swap($this->configAjaxRequestMock('onTest', 'partial'));\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/ajax-test');\n\n        $this->assertInstanceOf(\\Larajax\\Classes\\AjaxResponse::class, $response);\n        $httpResponse = $response->toResponse(request());\n        $content = $httpResponse->getOriginalContent();\n        $this->assertArrayHasKey('__ajax', $content);\n        $this->assertFalse($content['__ajax']['ok']);\n        $this->assertStringContainsString('partial', $content['__ajax']['message']);\n    }\n\n    public function testPageAjax()\n    {\n        Request::swap($this->configAjaxRequestMock('onTest', 'ajax-result'));\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/ajax-test');\n        $this->assertInstanceOf(\\Larajax\\Classes\\AjaxResponse::class, $response);\n\n        $httpResponse = $response->toResponse(request());\n        $content = $httpResponse->getOriginalContent();\n        $this->assertIsArray($content);\n        $this->assertEquals(200, $httpResponse->getStatusCode());\n        $this->assertArrayHasKey('__ajax', $content);\n        $this->assertTrue($content['__ajax']['ok']);\n\n        // Check partials in ops array\n        $partials = array_filter($content['__ajax']['ops'], fn($op) => $op['op'] === 'partial');\n        $partial = array_values($partials)[0] ?? null;\n        $this->assertNotNull($partial);\n        $this->assertEquals('ajax-result', $partial['name']);\n        $this->assertEquals('page', $partial['html']);\n    }\n\n    public function testLayoutAjax()\n    {\n        Request::swap($this->configAjaxRequestMock('onTestLayout', 'ajax-result'));\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/ajax-test');\n        $this->assertInstanceOf(\\Larajax\\Classes\\AjaxResponse::class, $response);\n\n        $httpResponse = $response->toResponse(request());\n        $content = $httpResponse->getOriginalContent();\n        $this->assertIsArray($content);\n        $this->assertEquals(200, $httpResponse->getStatusCode());\n        $this->assertArrayHasKey('__ajax', $content);\n        $this->assertTrue($content['__ajax']['ok']);\n\n        // Check partials in ops array\n        $partials = array_filter($content['__ajax']['ops'], fn($op) => $op['op'] === 'partial');\n        $partial = array_values($partials)[0] ?? null;\n        $this->assertNotNull($partial);\n        $this->assertEquals('ajax-result', $partial['name']);\n        $this->assertEquals('layout-test', $partial['html']);\n    }\n\n    public function testAjaxMultiplePartials()\n    {\n        Request::swap($this->configAjaxRequestMock('onTest', 'ajax-result&ajax-second-result'));\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/ajax-test');\n        $this->assertInstanceOf(\\Larajax\\Classes\\AjaxResponse::class, $response);\n\n        $httpResponse = $response->toResponse(request());\n        $content = $httpResponse->getOriginalContent();\n        $this->assertIsArray($content);\n        $this->assertEquals(200, $httpResponse->getStatusCode());\n        $this->assertArrayHasKey('__ajax', $content);\n        $this->assertTrue($content['__ajax']['ok']);\n\n        // Check partials in ops array\n        $partials = array_filter($content['__ajax']['ops'], fn($op) => $op['op'] === 'partial');\n        $partialsByName = array_column($partials, 'html', 'name');\n        $this->assertArrayHasKey('ajax-result', $partialsByName);\n        $this->assertArrayHasKey('ajax-second-result', $partialsByName);\n        $this->assertEquals('page', $partialsByName['ajax-result']);\n        $this->assertEquals('second', $partialsByName['ajax-second-result']);\n    }\n\n    public function testBasicComponents()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/with-component')->getContent();\n        $page = self::getProtectedProperty($controller, 'page');\n        $this->assertArrayHasKey('testArchive', $page->components);\n\n        $component = $page->components['testArchive'];\n        $details = $component->componentDetails();\n\n        $content = <<<ESC\n<div>LAYOUT CONTENT<p>This page uses components.</p>\n    <h3>Lorum ipsum</h3>\n    <p>Post Content #1</p>\n    <h3>La Playa Nudista</h3>\n    <p>Second Post Content</p>\n</div>\nESC;\n\n        $this->assertEquals($this->normalizeLineEndings($content), $this->normalizeLineEndings($response));\n        $this->assertEquals(69, $component->property('posts-per-page'));\n        $this->assertEquals('Blog Archive Dummy Component', $details['name']);\n        $this->assertEquals('Displays an archive of blog posts.', $details['description']);\n    }\n\n    public function testComponentAliases()\n    {\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/components/Archive.php';\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/with-components')->getContent();\n        $page = self::getProtectedProperty($controller, 'page');\n\n        $this->assertArrayHasKey('firstAlias', $page->components);\n        $this->assertArrayHasKey('secondAlias', $page->components);\n\n        $component = $page->components['firstAlias'];\n        $component2 = $page->components['secondAlias'];\n\n        $content = <<<ESC\n<div>LAYOUT CONTENT<p>This page uses components.</p>\n    <h3>Lorum ipsum</h3>\n    <p>Post Content #1</p>\n    <h3>La Playa Nudista</h3>\n    <p>Second Post Content</p>\n</div>\nESC;\n\n        $this->assertEquals($this->normalizeLineEndings($content), $this->normalizeLineEndings($response));\n        $this->assertEquals(6, $component->property('posts-per-page'));\n        $this->assertEquals(9, $component2->property('posts-per-page'));\n    }\n\n    public function testComponentAjax()\n    {\n        Request::swap($this->configAjaxRequestMock('testArchive::onTestAjax', 'ajax-result'));\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/with-component');\n        $this->assertInstanceOf(\\Larajax\\Classes\\AjaxResponse::class, $response);\n\n        $httpResponse = $response->toResponse(request());\n        $content = $httpResponse->getOriginalContent();\n        $this->assertIsArray($content);\n        $this->assertEquals(200, $httpResponse->getStatusCode());\n        $this->assertArrayHasKey('__ajax', $content);\n        $this->assertTrue($content['__ajax']['ok']);\n\n        // Check partials in ops array\n        $partials = array_filter($content['__ajax']['ops'], fn($op) => $op['op'] === 'partial');\n        $partial = array_values($partials)[0] ?? null;\n        $this->assertNotNull($partial);\n        $this->assertEquals('ajax-result', $partial['name']);\n        $this->assertEquals('page', $partial['html']);\n    }\n\n    public function testComponentAjaxDependencyInjection()\n    {\n        Request::swap($this->configAjaxRequestMock('testArchive::onTestDependencyInjection'));\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/with-component');\n\n        $this->assertInstanceOf(\\Larajax\\Classes\\AjaxResponse::class, $response);\n        $httpResponse = $response->toResponse(request());\n        $content = $httpResponse->getOriginalContent();\n        $this->assertArrayHasKey('result', $content);\n        $this->assertEquals('POST', $content['result']);\n    }\n\n    public function testComponentClassNotFound()\n    {\n        Config::set('cms.strict_components', true);\n\n        $this->expectException(\\October\\Rain\\Exception\\SystemException::class);\n        $this->expectExceptionMessageMatches('/is\\snot\\sregistered\\sfor\\sthe\\scomponent/');\n\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/no-component-class')->getContent();\n    }\n\n    public function testComponentNotFound()\n    {\n        //\n        // This test should probably be throwing an exception... -sg\n        //\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/no-component')->getContent();\n\n        $this->assertEquals('<p>Hey</p>', $response);\n    }\n\n    public function testComponentPartial()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/component-partial')->getContent();\n\n        $this->assertEquals('<p>DEFAULT MARKUP: I am a post yay</p>', $response);\n    }\n\n    public function testComponentPartialAliasOverride()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/component-partial-alias-override')->getContent();\n\n        //\n        // Testing case sensitivity\n        //\n        // Component alias: overRide1\n        // Target path: partials\\override1\\default.htm\n        //\n        $this->assertEquals('<p>I am an override alias partial! Yay</p>', $response);\n    }\n\n    public function testComponentPartialOverride()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/component-partial-override')->getContent();\n\n        //\n        // Testing case sensitivity\n        //\n        // Component code: testPost\n        // Target path: partials\\testpost\\default.htm\n        //\n        $this->assertEquals('<p>I am an override partial! Yay</p>', $response);\n    }\n\n    public function testComponentPartialNesting()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/component-partial-nesting')->getContent();\n\n        $content = <<<ESC\n<h1>Level 1</h1>\n<ul>\n    <strong>Home</strong>\n    <strong>Blog</strong>\n    <strong>About</strong>\n    <strong>Contact</strong>\n    <strong>Home</strong>\n    <strong>Blog</strong>\n    <strong>About</strong>\n    <strong>Contact</strong>\n    <strong>Home</strong>\n    <strong>Blog</strong>\n    <strong>About</strong>\n    <strong>Contact</strong>\n</ul>\n\n<h1>Level 2</h1>\n<p>DEFAULT MARKUP: I am a post yay</p><p>I am another post, deep down</p>\n\n<h1>Level 3</h1>\n<h4>DEFAULT MARKUP: Menu</h4>\n<ul>\n    <li>DEFAULT: Home</li>\n    <li>DEFAULT: Blog</li>\n    <li>DEFAULT: About</li>\n    <li>DEFAULT: Contact</li>\n</ul>\n<p>Insert post here</p>\nESC;\n\n        $this->assertEquals($this->normalizeLineEndings($content), $this->normalizeLineEndings($response));\n    }\n\n    public function testComponentWithOnRender()\n    {\n        $theme = Theme::load('test');\n        $controller = new Controller($theme);\n        $response = $controller->run('/component-custom-render')->getContent();\n\n        $content = <<<ESC\nPass\nCustom output: Would you look over Picasso's shoulder\nCustom output: And tell him about his brush strokes?\nESC;\n        $this->assertEquals($this->normalizeLineEndings($content), $this->normalizeLineEndings($response));\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/PartialStackTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\PartialStack;\n\n/**\n * PartialStackTest\n */\nclass PartialStackTest extends TestCase\n{\n    public function testStackPartials()\n    {\n        $stack = new PartialStack;\n\n        // Stack em up\n        $stack->stackPartial();\n            $stack->addComponent('override1', 'October\\Tester\\Components\\MainMenu');\n            $stack->addComponent('override2', 'October\\Tester\\Components\\ContentBlock');\n\n            $stack->stackPartial();\n                $stack->addComponent('override3', 'October\\Tester\\Components\\Post');\n                $stack->addComponent('post', 'October\\Tester\\Components\\Post');\n\n                $stack->stackPartial();\n                    $stack->addComponent('mainMenu', 'October\\Tester\\Components\\MainMenu');\n\n        // Knock em down\n        $this->assertEquals('October\\Tester\\Components\\MainMenu', $stack->getComponent('mainMenu'));\n        $this->assertEquals('October\\Tester\\Components\\MainMenu', $stack->getComponent('override1'));\n\n        $stack->unstackPartial();\n\n        $this->assertNull($stack->getComponent('mainMenu'));\n        $this->assertEquals('October\\Tester\\Components\\ContentBlock', $stack->getComponent('override2'));\n        $this->assertEquals('October\\Tester\\Components\\Post', $stack->getComponent('override3'));\n\n        $stack->unstackPartial();\n\n        $this->assertNull($stack->getComponent('mainMenu'));\n        $this->assertNull($stack->getComponent('post'));\n        $this->assertEquals('October\\Tester\\Components\\MainMenu', $stack->getComponent('override1'));\n\n        $stack->unstackPartial();\n\n        $this->assertNull($stack->getComponent('post'));\n        $this->assertNull($stack->getComponent('mainMenu'));\n        $this->assertNull($stack->getComponent('override1'));\n        $this->assertNull($stack->getComponent('override2'));\n        $this->assertNull($stack->getComponent('override3'));\n    }\n\n    public function testEmptyStack()\n    {\n        $stack = new PartialStack;\n        $this->assertNull($stack->getComponent('xxx'));\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/RouterTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\Router;\nuse Cms\\Classes\\Theme;\n\nclass RouterTest extends TestCase\n{\n    protected static $theme = null;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        self::$theme = Theme::load('test');\n    }\n\n    protected static function getMethod($name)\n    {\n        $class = new ReflectionClass('\\Cms\\Classes\\Router');\n        $method = $class->getMethod($name);\n        return $method;\n    }\n\n    public static function getProperty($name)\n    {\n        $class = new ReflectionClass('\\Cms\\Classes\\Router');\n        $property = $class->getProperty($name);\n        return $property;\n    }\n\n    public function testUrlListCaching()\n    {\n        $router = new Router(self::$theme);\n        $method = self::getMethod('getUrlRouteCache');\n        $urlList = [];\n\n        /*\n         * The first time the page should be loaded from the disk.\n         */\n        $result = $method->invokeArgs($router, ['/', &$urlList]);\n        $this->assertNull($result);\n\n        /*\n         * Resolve the page to initialize the cache\n         */\n        $page = $router->findByUrl('/');\n        $this->assertNotEmpty($page);\n        $this->assertEquals('index.htm', $page->getFileName());\n\n        /*\n         * The second time the page should be loaded from the cache.\n         */\n        $result = $method->invokeArgs($router, ['/', &$urlList]);\n        $this->assertEquals('index.htm', $result);\n\n        /*\n         * Clear the cache\n         */\n        $router->clearCache();\n        $result = $method->invokeArgs($router, ['/', &$urlList]);\n        $this->assertNull($result);\n    }\n\n    public function testFindPageByUrl()\n    {\n        $router = new Router(self::$theme);\n        $page = $router->findByUrl('/');\n        $this->assertNotEmpty($page);\n        $this->assertEquals('index.htm', $page->getFileName());\n\n        $page = $router->findByUrl('blog/post');\n        $this->assertEmpty($page);\n\n        $page = $router->findByUrl('blog/post/my-post-title');\n        $parameters = $router->getParameters();\n        $this->assertNotEmpty($page);\n        $this->assertEquals('blog-post.htm', $page->getFileName());\n        $this->assertCount(1, $parameters);\n        $this->assertArrayHasKey('url_title', $parameters);\n        $this->assertEquals('my-post-title', $parameters['url_title']);\n\n        // Test cached\n        $page = $router->findByUrl('blog/post/my-post-title');\n        $parameters = $router->getParameters();\n        $this->assertNotEmpty($page);\n        $this->assertEquals('blog-post.htm', $page->getFileName());\n        $this->assertCount(1, $parameters);\n        $this->assertArrayHasKey('url_title', $parameters);\n        $this->assertEquals('my-post-title', $parameters['url_title']);\n\n        $page = $router->findByUrl('AuthOrs');\n        $parameters = $router->getParameters();\n        $this->assertNotEmpty($page);\n        $this->assertEquals('authors.htm', $page->getFileName());\n        $this->assertCount(1, $parameters);\n        $this->assertArrayHasKey('author_id', $parameters);\n        $this->assertEquals('no-author', $parameters['author_id']);\n\n        $page = $router->findByUrl('AuthOrs/test');\n        $this->assertEmpty($page);\n\n        $page = $router->findByUrl('AuthOrs/test/12');\n        $this->assertEmpty($page);\n\n        $page = $router->findByUrl('AuthOrs/44/');\n        $parameters = $router->getParameters();\n        $this->assertNotEmpty($page);\n        $this->assertEquals('authors.htm', $page->getFileName());\n        $this->assertCount(1, $parameters);\n        $this->assertArrayHasKey('author_id', $parameters);\n        $this->assertEquals('44', $parameters['author_id']);\n\n        $page = $router->findByUrl('blog/archive-page');\n        $parameters = $router->getParameters();\n        $this->assertNotEmpty($page);\n        $this->assertEquals('blog-archive.htm', $page->getFileName());\n        $this->assertCount(1, $parameters);\n\n        $page = $router->findByUrl('blog/category-page');\n        $parameters = $router->getParameters();\n        $this->assertNotEmpty($page);\n        $this->assertEquals('blog-category.htm', $page->getFileName());\n        $this->assertCount(1, $parameters);\n        $this->assertEquals(array_keys($parameters)[0], 'category_name');\n        $this->assertEmpty($parameters[array_keys($parameters)[0]]);\n\n        $page = $router->findByUrl('blog/category-page/categoryName');\n        $parameters = $router->getParameters();\n        $this->assertNotEmpty($page);\n        $this->assertEquals('blog-category.htm', $page->getFileName());\n        $this->assertCount(1, $parameters);\n\n        $page = $router->findByUrl('blog/category-page/categoryName/subCategoryName');\n        $parameters = $router->getParameters();\n        $this->assertNotEmpty($page);\n        $this->assertEquals('blog-category.htm', $page->getFileName());\n        $this->assertCount(1, $parameters);\n    }\n\n    public function testFindPageFromSubdirectory()\n    {\n        $router = new Router(self::$theme);\n        $page = $router->findByUrl('/apage');\n        $this->assertNotEmpty($page);\n        $this->assertEquals('a/a-page.htm', $page->getFileName());\n\n        $page = $router->findByUrl('/bpage');\n        $this->assertNotEmpty($page);\n        $this->assertEquals('b/b-page.htm', $page->getFileName());\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/ThemeCombineAssetsTest.php",
    "content": "<?php\n\nuse System\\Classes\\CombineAssets;\n\nclass ThemeCombineAssetsTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        CombineAssets::resetCache();\n    }\n\n    //\n    // Tests\n    //\n\n    public function testCombiner()\n    {\n        $combiner = CombineAssets::instance();\n\n        /*\n         * Supported file extensions should exist\n         */\n        $jsExt = $cssExt = self::getProtectedProperty($combiner, 'jsExtensions');\n        $this->assertIsArray($jsExt);\n\n        $cssExt = self::getProtectedProperty($combiner, 'cssExtensions');\n        $this->assertIsArray($cssExt);\n\n        /*\n         * Check service methods\n         */\n        $this->assertTrue(method_exists($combiner, 'combine'));\n        $this->assertTrue(method_exists($combiner, 'resetCache'));\n    }\n\n    public function testCombine()\n    {\n        $combiner = CombineAssets::instance();\n\n        $url = $combiner->combine(\n            [\n                'assets/css/style1.css',\n                'assets/css/style2.css'\n            ],\n            base_path().'/modules/cms/tests/fixtures/themes/test'\n        );\n        $this->assertNotNull($url);\n        $this->assertRegExp('/\\w+[-]\\d+/i', $url); // Must contain hash-number\n\n        $url = $combiner->combine(\n            [\n                'assets/js/script1.js',\n                'assets/js/script2.js'\n            ],\n            base_path().'/modules/cms/tests/fixtures/themes/test'\n        );\n        $this->assertNotNull($url);\n        $this->assertRegExp('/\\w+[-]\\d+/i', $url); // Must contain hash-number\n    }\n\n    public function testPutCache()\n    {\n        $sampleId = md5('testhash');\n        $sampleStore = ['version' => 12345678];\n        $samplePath = '/tests/fixtures/Cms/themes/test';\n\n        $combiner = CombineAssets::instance();\n        $value = self::callProtectedMethod($combiner, 'putCache', [$sampleId, $sampleStore]);\n\n        $this->assertTrue($value);\n    }\n\n    public function testGetTargetPath()\n    {\n        $combiner = CombineAssets::instance();\n\n        $value = self::callProtectedMethod($combiner, 'getTargetPath', ['/combine']);\n        $this->assertEquals('combine/', $value);\n\n        $value = self::callProtectedMethod($combiner, 'getTargetPath', ['/index.php/combine']);\n        $this->assertEquals('index-php/combine/', $value);\n    }\n\n    public function testMakeCacheId()\n    {\n        $sampleResources = ['assets/css/style1.css', 'assets/css/style2.css'];\n        $samplePath = base_path('/modules/cms/tests/fixtures/themes/test');\n\n        $combiner = CombineAssets::instance();\n        self::setProtectedProperty($combiner, 'localPath', $samplePath);\n\n        $value = self::callProtectedMethod($combiner, 'getCacheKey', [$sampleResources]);\n        $this->assertEquals(md5($samplePath.implode('|', $sampleResources)), $value);\n    }\n\n    public function testResetCache()\n    {\n        $combiner = CombineAssets::instance();\n        $this->assertNull($combiner->resetCache());\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/ThemeDataTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\Theme;\n\nclass ThemeDataTest extends TestCase\n{\n    /**\n     * testAutoJsonable\n     */\n    public function testAutoJsonable()\n    {\n        $theme = Theme::load('test')->getCustomData();\n\n        $this->assertTrue($theme->isJsonable('nestedform'));\n        $this->assertTrue($theme->isJsonable('breakdown'));\n        $this->assertTrue($theme->isJsonable('nested'));\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/classes/ThemeTest.php",
    "content": "<?php\n\nuse Cms\\Classes\\Theme;\n\nclass ThemeTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Config::set('cms.active_theme', 'test');\n        Event::forget('cms.theme.getActiveTheme');\n        Theme::resetCache();\n    }\n\n    protected function countThemePages($path)\n    {\n        $result = 0;\n        $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));\n        $it->setMaxDepth(5);\n        $it->rewind();\n\n        while ($it->valid()) {\n            if (!$it->isDot() && !$it->isDir() && $it->getExtension() == 'htm') {\n                $result++;\n            }\n\n            $it->next();\n        }\n\n        return $result;\n    }\n\n    public function testGetPath()\n    {\n        $theme = Theme::load('test');\n\n        $this->assertEquals(base_path('modules/cms/tests/fixtures/themes/test'), $theme->getPath());\n    }\n\n    public function testListPages()\n    {\n        $theme = Theme::load('test');\n\n        $pageCollection = $theme->listPages();\n        $pages = array_values($pageCollection->all());\n        $this->assertIsArray($pages);\n\n        $expectedPageNum = $this->countThemePages(base_path().'/modules/cms/tests/fixtures/themes/test/pages');\n        $this->assertCount($expectedPageNum, $pages);\n\n        $this->assertInstanceOf(\\Cms\\Classes\\Page::class, $pages[0]);\n        $this->assertNotEmpty($pages[0]->url);\n        $this->assertInstanceOf(\\Cms\\Classes\\Page::class, $pages[1]);\n        $this->assertNotEmpty($pages[1]->url);\n    }\n\n    public function testGetActiveTheme()\n    {\n        $activeTheme = Theme::getActiveTheme();\n\n        $this->assertNotNull($activeTheme);\n        $this->assertEquals('test', $activeTheme->getDirName());\n    }\n\n    public function testNoActiveTheme()\n    {\n        $this->expectException(\\October\\Rain\\Exception\\SystemException::class);\n        $this->expectExceptionMessage('The active theme is not set.');\n\n        Config::set('cms.active_theme', null);\n        Theme::getActiveTheme();\n    }\n\n    public function testApiTheme()\n    {\n        Event::forget('cms.theme.getActiveTheme');\n        Event::listen('cms.theme.getActiveTheme', function () {\n            return 'apitest';\n        });\n\n        $activeTheme = Theme::getActiveTheme();\n        $this->assertNotNull($activeTheme);\n        $this->assertEquals('apitest', $activeTheme->getDirName());\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/fixtures/reference/compound-full.htm",
    "content": "var = \"value\"\n==\n<?php\nfunction a() {return true;}\n?>\n==\n<p>Hello, world!</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/reference/compound-markup-settings.htm",
    "content": "var = \"value\"\n==\n<p>Hello, world!</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/reference/compound-markup.htm",
    "content": "<p>Hello, world!</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/reference/namespaces-aliases.php.stub",
    "content": "<?php \nuse Cms\\Classes\\Theme as MyTheme;\nuse Cms\\Classes\\Router as MyRouter;\nclass {className} extends Cms\\Classes\\PageCode\n{\npublic function onStart() {\n    $this['pageStartVar'] = 3;\n}\n}\n"
  },
  {
    "path": "modules/cms/tests/fixtures/reference/namespaces.php.stub",
    "content": "<?php \nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Router;\nclass {className} extends Cms\\Classes\\PageCode\n{\npublic function onStart() {\n    $this['pageStartVar'] = 3;\n}\n}\n"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/apitest/.gitignore",
    "content": "*.htm\ntestobjects/*.htm"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/assets/css/style1.css",
    "content": ""
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/assets/css/style2.css",
    "content": ""
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/assets/js/script1.js",
    "content": ""
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/assets/js/script2.js",
    "content": ""
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/content/a/a-content.htm",
    "content": "A content"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/content/html-content.htm",
    "content": "<a href=\"#\">Stephen Saucier</a> changed his profile picture &mdash; <small>7 hrs ago</small></div>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/content/layout-content.txt",
    "content": "LAYOUT CONTENT"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/content/markdown-content.md",
    "content": "Be brave, be **bold**, live *italic*"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/content/page-content.htm",
    "content": "PAGE CONTENT"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/content/text-content.txt",
    "content": "Pen is <mightier> than the sword, HTML is <richer> than the text"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/layouts/a/a-layout.htm",
    "content": "<div>LAYOUT CONTENT {{ page() }}</div>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/layouts/ajax-test.htm",
    "content": "description = \"This layout tests the AJAX events\"\n==\nfunction onTest() {\n    $this['var'] = 'layout';\n}\nfunction onTestLayout() {\n    $this['var'] = 'layout-test';\n}\n==\n{{ page() }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/layouts/content.htm",
    "content": "<div>{{ content('layout-content.txt') }}{{ page() }}</div>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/layouts/cycle-test.htm",
    "content": "description = \"This layout tests the page life cycle\"\n==\nfunction onStart() {\n    $this['layoutStartVar'] = 1;\n}\n\nfunction onBeforePageStart() {\n    $this['layoutBeforePageStartVar'] = 2;\n}\n\nfunction onEnd() {\n    $this['layoutEndVar'] = 5;\n}\n==\n{{ page() }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/layouts/no-php.htm",
    "content": "<div>{{ page() }}</div>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/layouts/partials.htm",
    "content": "<div>{{ partial('layout-partial') }}{{ page() }}</div>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/layouts/php-parser-test.htm",
    "content": "description = \"Layout for testing the CMS PHP parser\"\n==\nfunction onStart() {\n\n}\n\nfunction onEnd() {\n}\n==\n{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/layouts/placeholder.htm",
    "content": "{% set third = placeholder('third') %}<div>LAYOUT CONTENT <span>{% placeholder test default %}DEFAULT{% endplaceholder %}</span> {{ page() }}</div><p>{% placeholder second %}</p>{{ third }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/layouts/sidebar.htm",
    "content": "<div>{% page %}</div>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/404.htm",
    "content": "url = \"404\"\n==\n<p>Page not found</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/a/a-page.htm",
    "content": "url = \"/apage\"\nlayout = \"a/a-layout\"\n==\n<h1>This page is a subdirectory</h1> "
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/ajax-test.htm",
    "content": "url = \"/ajax-test\"\nlayout = \"ajax-test\"\n==\nfunction onTest() {\n    $this['var'] = 'page';\n}\n==\n{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/authors.htm",
    "content": "url = \"/authors/:author_id?no-author|^[0-9]+$\"\n==\n<h1>Authors page</h1>\n<p>This is the Authors page</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/b/b-page.htm",
    "content": "url = \"/bpage\"\n==\n<h1>This page is a subdirectory</h1> "
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/b/c/c-page.htm",
    "content": "url = \"/cpage\"\n==\n<h1>This page is a subdirectory</h1> "
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/blog-archive.htm",
    "content": "url = \"/blog/archive-page/:page?1\"\n==\n<h1>Blog Archive</h1> \n<p>Hi there!</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/blog-category.htm",
    "content": "url = \"/blog/category-page/:category_name?*\"\n==\n<h1>Blog category</h1>\n<p>This is a blog category page</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/blog-post.htm",
    "content": "url = \"/blog/post/:url_title\"\n==\n<h1>Blog post</h1>\n<p>This is a blog post page</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/code-namespaces-aliases.htm",
    "content": "url = \"/code-namespaces\"\n==\n<?php\n\nuse Cms\\Classes\\Theme as MyTheme;\nuse Cms\\Classes\\Router as MyRouter;\n\nfunction onStart() {\n    $this['pageStartVar'] = 3;\n}\n?>\n==\n<p>Page</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/code-namespaces.htm",
    "content": "url = \"/code-namespaces\"\n==\n<?php\n\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Router;\n\nfunction onStart() {\n    $this['pageStartVar'] = 3;\n}\n?>\n==\n<p>Page</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/component-custom-render.htm",
    "content": "url = \"/component-custom-render\"\n\n[October\\Tester\\Components\\ContentBlock theblock]\n==\n\n{% component 'theblock' %}\n\n{% component 'theblock' output=\"Would you look over Picasso's shoulder\" %}\n\n{% component 'theblock' output='And tell him about his brush strokes?' %}\n"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/component-partial-alias-override.htm",
    "content": "url = \"/component-partial-alias-override\"\n\n[October\\Tester\\Components\\Post overRide1]\n==\n{% component 'overRide1' %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/component-partial-nesting.htm",
    "content": "url = \"/component-partial-nesting\"\n==\n{% partial 'nesting/level1' %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/component-partial-override.htm",
    "content": "url = \"/component-partial-override\"\n\n[testPost]\n==\n{% component 'testPost' %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/component-partial.htm",
    "content": "url = \"/component-partial\"\n\n[October\\Tester\\Components\\Post post]\n==\n{% component 'post' %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/cycle-test.htm",
    "content": "url = \"/cycle-test\"\nlayout = \"cycle-test\"\n==\nfunction onStart() {\n    $this['pageStartVar'] = 3;\n}\n\nfunction onEnd() {\n    $this['pageEndVar'] = 4;\n}\n==\n{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/index.htm",
    "content": "url = \"/\"\n==\n<h1>My Webpage</h1> "
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/no-component-class.htm",
    "content": "url = \"/no-component-class\"\n\n[PeterPan\\Nevernever\\Land noComponentExist]\n==\n<p>Hey</p>\n"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/no-component.htm",
    "content": "url = \"/no-component\"\n==\n<p>Hey</p>{% component 'noComponentExist' %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/no-layout.htm",
    "content": "url = \"/no-layout\"\nlayout = \"caramba\"\n==\n<p>Hey</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/no-partial.htm",
    "content": "url = \"/no-partial\"\n==\n<p>Hey</p>\n{% partial 'caramba' %}\n"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/optional-full-php-tags.htm",
    "content": "url = \"/cycle-test\"\nlayout = \"cycle-test\"\n==\n<?php\nfunction onStart() {\n    $this['pageStartVar'] = 3;\n}\n\nfunction onEnd() {\n    $this['pageEndVar'] = 4;\n}\n?>\n==\n{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/optional-short-php-tags.htm",
    "content": "url = \"/cycle-test\"\nlayout = \"cycle-test\"\n==\n<?\nfunction onStart() {\n    $this['pageStartVar'] = 3;\n}\n\nfunction onEnd() {\n    $this['pageEndVar'] = 4;\n}\n?>\n==\n{{ layoutStartVar }}{{ layoutBeforePageStartVar }}{{ pageStartVar }}{{ pageEndVar }}{{ layoutEndVar }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/throw-php.htm",
    "content": "url = \"/throw-php\"\n==\nfunction onStart() {\n    test();\n}\n==\n<h1>This page will throw an exception</h1> "
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/with-component.htm",
    "content": "url = \"/with-component\"\nlayout = \"content\"\n\n[testArchive]\nposts-per-page = \"69\"\n==\n<p>This page uses components.</p>\n{% for post in testArchive.posts %}\n    <h3>{{ post.title }}</h3>\n    <p>{{ post.content }}</p>\n{% endfor %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/with-components.htm",
    "content": "url = \"/with-components\"\nlayout = \"content\"\n\n[testArchive firstAlias]\nposts-per-page = \"6\"\n\n[October\\Tester\\Components\\Archive secondAlias]\nposts-per-page = \"9\"\n==\n<p>This page uses components.</p>\n{% for post in secondAlias.posts %}\n    <h3>{{ post.title }}</h3>\n    <p>{{ post.content }}</p>\n{% endfor %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/with-content.htm",
    "content": "url = \"/with-content\"\nlayout = \"content\"\n==\n<p>Hey {% content \"page-content.htm\" %} {% content \"a/a-content.htm\" %}</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/with-layout.htm",
    "content": "url = \"/with-layout\"\nlayout = \"sidebar\"\n==\n<p>Hey</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/with-partials.htm",
    "content": "url = \"/with-partials\"\nlayout = \"partials\"\n==\n<p>Hey {% partial \"page-partial\" firstName=\"Homer\" lastName=\"Simpson\" %} {% partial \"page-partial-body\" body %}foobar{% endpartial %} {% partial \"a/a-partial\" %}</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/pages/with-placeholder.htm",
    "content": "url = \"/with-placeholder\"\nlayout = \"placeholder\"\n==\n{% put test %}\n  BLOCK\n  {% default %}\n{% endput %}\n{% put second %}\n  SECOND BLOCK\n{% endput %}\n{% put third = 'THIRD VARIABLE' %}\n<p>Hey PAGE CONTENT</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/a/a-partial.htm",
    "content": "A partial"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/ajax-result.htm",
    "content": "{{ var }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/ajax-second-result.htm",
    "content": "second"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/layout-partial.htm",
    "content": "LAYOUT PARTIAL"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/nesting/level1.htm",
    "content": "[October\\Tester\\Components\\MainMenu override2]\n[October\\Tester\\Components\\Post override3]\n==\n<h1>Level 1</h1>\n{% component 'override2' %}\n{% component 'override3' %}\n"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/nesting/level2.htm",
    "content": "[October\\Tester\\Components\\Post post]\n[October\\Tester\\Components\\Post override4]\n==\n<h1>Level 2</h1>\n{% component 'post' %}\n{% component 'override4' %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/nesting/level3.htm",
    "content": "[October\\Tester\\Components\\MainMenu mainMenu]\n==\n<h1>Level 3</h1>\n{% component 'mainMenu' %}\n"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/override1/default.htm",
    "content": "<p>I am an override alias partial! Yay</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/override2/default.htm",
    "content": "<ul>\n{% partial __SELF__ ~ \"::items\" items=__SELF__.menuItems %}\n{% partial __SELF__ ~ \"::items\" items=__SELF__.menuItems %}\n{% partial __SELF__ ~ \"::items\" items=__SELF__.menuItems %}\n</ul>\n\n{% partial 'nesting/level2' %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/override2/items.htm",
    "content": "{% for item in items %}\n    <strong>{{ item }}</strong>\n{% endfor %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/override3/default.htm",
    "content": "<p>Insert post here</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/override4/default.htm",
    "content": "<p>I am another post, deep down</p>\n\n{% partial 'nesting/level3' %}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/page-partial-body.htm",
    "content": "The body value is \"{{ body|raw }}\""
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/page-partial.htm",
    "content": "PAGE PARTIAL {{ firstName }} {{ lastName }}"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/partials/testpost/default.htm",
    "content": "<p>I am an override partial! Yay</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/temporary/.gitignore",
    "content": "*\n!.gitignore"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/testobjects/component.htm",
    "content": "var = value\n[testArchive]\nposts-per-page = 10\n==\n<p>This is a paragraph</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/testobjects/components.htm",
    "content": "var = value\n[testArchive firstAlias]\nposts-per-page = \"6\"\n\n[October\\Tester\\Components\\Post secondAlias]\nshow-featured = \"true\"\n==\n<p>This is a paragraph</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/testobjects/compound.htm",
    "content": "var = value\n[section]\nversion = 10\n==\nfunction onBeforeDisplay($controller)\n{\n    $controller->data['something'] = 'some value';\n}\n==\n<p>This is a paragraph</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/testobjects/plain.html",
    "content": "<p>This is a test HTML content file.</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/testobjects/subdir/obj.html",
    "content": "<p>This is an object in a subdirectory.</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/testobjects/viewbag.htm",
    "content": "var = value\n[viewBag]\ntitle = \"Toxicity\"\n==\n<p>Chop Suey!</p>"
  },
  {
    "path": "modules/cms/tests/fixtures/themes/test/theme.yaml",
    "content": "name: Test\ndescription: 'Test October CMS theme.'\nauthor: October CMS\nhomepage: 'https://octobercms.com'\ncode: ''\n\nform:\n    fields:\n        nested[field]:\n            label: Nested Field\n\n        nested[field2]:\n            label: Second Field\n\n        nestedform:\n            label: Nested Form\n            type: nestedform\n            form:\n                fields:\n                    position:\n                        label: Position\n                        type: radio\n                        options:\n                            top: At the top\n                            left: At the left\n\n        position:\n            label: Position\n            type: radio\n            options:\n                top: At the top\n                left: At the left\n            assetVar: 'nav-position'\n\n        breakdown:\n            tab: Breakdown\n            type: repeater\n            prompt: Add a new point summary\n            form:\n                fields:\n                    point_summary:\n                        label: Point\n                        placeholder: What points are you trying to make\n                        type: text\n"
  },
  {
    "path": "modules/cms/tests/helpers/CmsTest.php",
    "content": "<?php\n\nuse Cms\\Helpers\\Cms as CmsHelper;\n\nclass CmsTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        Config::set('cms.url_exceptions', [\n            '/api/*' => 'maintenance',\n            '/sitemap.xml' => 'site|maintenance',\n            '/landing-page' => 'site',\n        ]);\n    }\n\n    public function testMatchUrlException()\n    {\n        $helper = new CmsHelper;\n        $this->assertFalse($helper->urlHasException('/api/ping', 'site'));\n        $this->assertTrue($helper->urlHasException('/api/ping', 'maintenance'));\n        $this->assertFalse($helper->urlHasException('api/users', 'site'));\n        $this->assertTrue($helper->urlHasException('api/users', 'maintenance'));\n        $this->assertTrue($helper->urlHasException('api/users/', 'maintenance'));\n        $this->assertFalse($helper->urlHasException('/api', 'maintenance'));\n        $this->assertFalse($helper->urlHasException('api', 'maintenance'));\n        $this->assertFalse($helper->urlHasException('/landing-page', 'maintenance'));\n        $this->assertTrue($helper->urlHasException('/landing-page', 'site'));\n        $this->assertFalse($helper->urlHasException('/landing-page/foobar', 'site'));\n        $this->assertTrue($helper->urlHasException('/sitemap.xml', 'site'));\n        $this->assertTrue($helper->urlHasException('/sitemap.xml', 'maintenance'));\n        $this->assertFalse($helper->urlHasException('/sitemap.xml', 'foobar'));\n    }\n}\n"
  },
  {
    "path": "modules/cms/tests/helpers/FileTest.php",
    "content": "<?php\n\nuse Cms\\Helpers\\File as FileHelper;\n\nclass FileTest extends TestCase\n{\n    public function testValidateName()\n    {\n        $this->assertFalse(FileHelper::validateName(''));\n        $this->assertTrue(FileHelper::validateName('01test-testdat'));\n        $this->assertTrue(FileHelper::validateName('test/testdat'));\n        $this->assertFalse(FileHelper::validateName('test\\testdat'));\n        $this->assertTrue(FileHelper::validateName('01test-test.dat'));\n        $this->assertFalse(FileHelper::validateName('test@test.dat'));\n        $this->assertFalse(FileHelper::validateName('test::test'));\n        $this->assertFalse(FileHelper::validateName('@test'));\n    }\n}\n"
  },
  {
    "path": "modules/cms/traits/ParsableAttributes.php",
    "content": "<?php namespace Cms\\Traits;\n\n/**\n * ParsableAttributes allows CMS templates to use dynamic attributes\n *\n *     meta_title = \"Blog - {{ post.title }}\"\n *\n */\ntrait ParsableAttributes\n{\n    /**\n     * @var array parsable attributes support using twig code.\n     *\n     * public $parsable = [];\n     */\n\n    /**\n     * @var array parsableAttributes contains the translated attributes\n     */\n    protected $parsableAttributes = [];\n\n    /**\n     * __get with parsable attribute override.\n     */\n    public function __get($key)\n    {\n        if (\n            in_array($key, $this->parsable) &&\n            isset($this->parsableAttributes[$key])\n        ) {\n            return $this->parsableAttributes[$key];\n        }\n\n        return parent::__get($key);\n    }\n\n    /**\n     * addParsable attributes for the model\n     */\n    public function addParsable(...$attributes)\n    {\n        if (is_array($attributes[0])) {\n            $attributes = $attributes[0];\n        }\n\n        $this->parsable = array_merge($this->parsable, $attributes);\n    }\n\n    /**\n     * setParsableAttribute\n     */\n    public function setParsableAttribute(string $key, $value): void\n    {\n        array_set($this->parsableAttributes, $key, $value);\n    }\n\n    /**\n     * getParsableAttributes\n     */\n    public function getParsableAttributeValues(): array\n    {\n        $values = [];\n\n        foreach ($this->parsable as $key) {\n            $values[$key] = $this->$key;\n        }\n\n        return $values;\n    }\n}\n"
  },
  {
    "path": "modules/cms/traits/ParsableController.php",
    "content": "<?php namespace Cms\\Traits;\n\nuse Cms\\Classes\\CmsObject;\nuse Cms\\Classes\\ComponentBase;\n\n/**\n * ParsableController adds property and attribute parsing logic to the CMS controller\n */\ntrait ParsableController\n{\n    /**\n     * parseAllEnvironmentVars parses vars for all relevant objects.\n     */\n    protected function parseAllEnvironmentVars()\n    {\n        $this->parseEnvironmentVarsOnTemplate($this->page, $this->vars);\n        $this->parseEnvironmentVarsOnTemplate($this->layout, $this->vars);\n\n        foreach ($this->layout->components as $component) {\n            $this->parseEnvironmentVarsOnComponent($component, $this->vars);\n        }\n\n        foreach ($this->page->components as $component) {\n            $this->parseEnvironmentVarsOnComponent($component, $this->vars);\n        }\n    }\n\n    /**\n     * parseRouteParamsOnComponent where property values should be defined as {{ :param }}.\n     */\n    protected function parseRouteParamsOnComponent(ComponentBase $component, array $params = [], ?array $properties = null, string $propPrefix = '')\n    {\n        $properties = $properties !== null ? $properties : $component->getProperties();\n\n        foreach ($properties as $propName => $propValue) {\n            if (is_array($propValue)) {\n                $this->parseRouteParamsOnComponent($component, $params, $propValue, $propName.'.');\n                continue;\n            }\n\n            if ($override = $this->makeRouterPropertyReplacement($propValue, $params)) {\n                [$paramName, $newValue] = $override;\n                $component->setProperty($propPrefix.$propName, $newValue);\n                $component->setExternalPropertyName($propPrefix.$propName, $paramName);\n            }\n        }\n    }\n\n    /**\n     * parseEnvironmentVarsOnComponent where property values should be defined as {{ param }}.\n     */\n    protected function parseEnvironmentVarsOnComponent(ComponentBase $component, array $vars = [], ?array $properties = null, string $propPrefix = '')\n    {\n        $properties = $properties !== null ? $properties : $component->getProperties();\n\n        foreach ($properties as $propName => $propValue) {\n            if (is_array($propValue)) {\n                $this->parseEnvironmentVarsOnComponent($component, $vars, $propValue, $propName.'.');\n                continue;\n            }\n\n            if ($override = $this->makeDynamicAttributeReplacement($propValue, $vars)) {\n                [$paramName, $newValue] = $override;\n                $component->setProperty($propPrefix.$propName, $newValue);\n                $component->setExternalPropertyName($propPrefix.$propName, $paramName);\n            }\n        }\n    }\n\n    /**\n     * parseEnvironmentVarsOnTemplate where property values should be defined as {{ param }}.\n     */\n    protected function parseEnvironmentVarsOnTemplate(CmsObject $template, array $vars = [], ?array $attributes = null, string $attrPrefix = '')\n    {\n        $attributes = $attributes !== null ? $attributes : $template->getParsableAttributeValues();\n\n        foreach ($attributes as $attrName => $attrValue) {\n            if (is_array($attrValue)) {\n                $this->parseEnvironmentVarsOnTemplate($template, $vars, $attrValue, $attrName.'.');\n                continue;\n            }\n\n            if ($override = $this->makeDynamicAttributeReplacement($attrValue, $vars)) {\n                [$paramName, $newValue] = $override;\n                $template->setParsableAttribute($attrPrefix.$attrName, $newValue);\n            }\n        }\n    }\n\n    /**\n     * makeRouterPropertyReplacement will look inside property values to replace any\n     * Twig-like variables with values from the route parameters.\n     *\n     *     {{ :post }}\n     */\n    protected function makeRouterPropertyReplacement($propertyValue, array $routerParameters = []): ?array\n    {\n        if (!is_string($propertyValue)) {\n            return null;\n        }\n\n        $matches = [];\n        if (preg_match('/^\\{\\{(\\s*:[^\\}]+)\\}\\}$/', $propertyValue, $matches)) {\n            $paramName = trim($matches[1]);\n            $routeParamName = substr($paramName, 1);\n            $newPropertyValue = $routerParameters[$routeParamName] ?? null;\n            return [$paramName, $newPropertyValue];\n        }\n\n        return null;\n    }\n\n    /**\n     * makeDynamicAttributeReplacement will look inside attribute values to replace any\n     * Twig-like variables with the values inside the parameters.\n     *\n     *     {{ post.title }}\n     */\n    protected function makeDynamicAttributeReplacement($attrValue, array $parameters = []): ?array\n    {\n        if (!is_string($attrValue)) {\n            return null;\n        }\n\n        $matches = [];\n        if (preg_match_all('/\\{\\{([^:\\}]+)\\}\\}/', $attrValue, $matches)) {\n            $newAttrValue = $attrValue;\n            $lastParamName = null;\n\n            foreach ($matches[1] as $key => $paramName) {\n                $paramName = $lastParamName = trim($paramName);\n                $replaceWith = (string) array_get($parameters, $paramName);\n                $toReplace = $matches[0][$key];\n                $newAttrValue = str_replace($toReplace, $replaceWith, $newAttrValue);\n            }\n\n            return [$lastParamName, $newAttrValue];\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "modules/cms/traits/UrlMaker.php",
    "content": "<?php namespace Cms\\Traits;\n\nuse File;\nuse Cache;\nuse Config;\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\Controller;\nuse ApplicationException;\n\n/**\n * URL Maker Trait\n *\n * Useful in models for generating a \"url\" attribute, automatically linked\n * to a primary component used in the active theme. For example:\n *\n *     use \\Cms\\Traits\\UrlMaker;\n *\n *     protected $urlComponentName = 'blogPost';\n *\n * When declared in a model, the above will result in `$model->url` magically\n * linking to the component that declares `isPrimary = 1` in configuration.\n *\n *     [blogPost]\n *     isPrimary = \"1\"\n *\n * The parameters passed to the component are supplied when overriding the\n * method `getUrlParams` also within the model.\n *\n *     public function getUrlParams()\n *     {\n *         return [\n *             'id' => $this->id,\n *             'hash' => $this->hash,\n *         ];\n *     }\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait UrlMaker\n{\n    //\n    // Properties to declare\n    //\n\n    /**\n     * @var string The component to use for generating URLs.\n     */\n    // protected $urlComponentName = 'testArchive';\n\n    /**\n     * @var string The property name to determine a primary component.\n     */\n    // protected $urlComponentProperty = 'isPrimary';\n\n    /**\n     * Returns an array of values to use in URL generation.\n     * @return @array\n     */\n    // public function getUrlParams()\n    // {\n    //     return [\n    //         'id' => $this->id,\n    //         'slug' => $this->slug\n    //     ];\n    // }\n\n    //\n    // Internal properties\n    //\n\n    /**\n     * @var string URL cache\n     */\n    protected $url;\n\n    /**\n     * @var string Page where detected component is found.\n     */\n    protected static $urlPageName;\n\n    /**\n     * Changes the component used for generating the URLs dynamically.\n     *\n     * @param string $name\n     * @param string $property\n     * @return void\n     */\n    public function resetUrlComponent($name, $property = null)\n    {\n        $this->urlComponentName = $name;\n\n        if ($property) {\n            $this->urlComponentProperty = $property;\n        }\n\n        static::$urlPageName = $this->url = null;\n    }\n\n    /**\n     * Mutator for the \"url\" attribute. Returns the URL detected by the component.\n     * @return string\n     */\n    public function getUrlAttribute()\n    {\n        if ($this->url === null) {\n            $this->url = $this->makeUrl();\n        }\n\n        return $this->url;\n    }\n\n    /**\n     * Explicitly set the URL for this model.\n     * @param string $value\n     * @return void\n     */\n    public function setUrlAttribute($value)\n    {\n        $this->url = $value;\n    }\n\n    /**\n     * Explicitly set the CMS Page to link to.\n     * @param string $pageName\n     * @return void\n     */\n    public function setUrlPageName($pageName)\n    {\n        static::$urlPageName = $pageName;\n    }\n\n    /**\n     * Locates the page name where the detected component is found. This method\n     * uses the Cache service to improve performance.\n     * @return string\n     */\n    public function getUrlPageName()\n    {\n        if (static::$urlPageName !== null) {\n            return static::$urlPageName;\n        }\n\n        // Cache\n        //\n        $key = 'cms_url_maker_'.$this->urlComponentName.crc32(get_class($this));\n\n        $cached = Cache::memo()->get($key, false);\n        if ($cached !== false && ($cached = @unserialize($cached)) !== false) {\n            $filePath = array_get($cached, 'path');\n            $mtime = array_get($cached, 'mtime');\n            if (!File::isFile($filePath) || ($mtime != File::lastModified($filePath))) {\n                $cached = false;\n            }\n        }\n\n        if ($cached !== false) {\n            return static::$urlPageName = array_get($cached, 'fileName');\n        }\n\n        // Fallback\n        //\n        $page = null;\n        $useProperty = property_exists($this, 'urlComponentProperty');\n\n        if ($useProperty) {\n            $page = Page::whereComponent($this->urlComponentName, $this->urlComponentProperty, '1')->first();\n        }\n\n        if (!$useProperty || !$page) {\n            $page = Page::withComponent($this->urlComponentName)->first();\n        }\n\n        if (!$page) {\n            throw new ApplicationException(sprintf(\n                'Unable to a find a primary component \"%s\" for generating a URL in %s.',\n                $this->urlComponentName,\n                get_class($this)\n            ));\n        }\n\n        $baseFileName = $page->getBaseFileName();\n        $filePath = $page->getFilePath();\n\n        $cached = [\n            'path' => $filePath,\n            'fileName' => $baseFileName,\n            'mtime' => @File::lastModified($filePath)\n        ];\n\n        $expiresAt = now()->addMinutes(Config::get('cms.template_cache_ttl', 1440));\n        Cache::put($key, serialize($cached), $expiresAt);\n\n        return static::$urlPageName = $baseFileName;\n    }\n\n    /**\n     * Generates a real URL based on the page, detected by the primary component.\n     * The CMS Controller is used for this process passing the declared params.\n     * @return string\n     */\n    protected function makeUrl()\n    {\n        $controller = Controller::getController() ?: new Controller;\n\n        return $controller->pageUrl($this->getUrlPageName(), $this->getUrlParams());\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/DebugExtension.php",
    "content": "<?php namespace Cms\\Twig;\n\nuse System;\nuse Cms\\Classes\\Controller;\nuse Cms\\Classes\\ComponentBase;\nuse October\\Rain\\Database\\Model;\nuse October\\Rain\\Support\\Debug\\HtmlDumper;\nuse Twig\\Template as TwigTemplate;\nuse Twig\\Environment as TwigEnvironment;\nuse Twig\\TwigFunction as TwigSimpleFunction;\nuse Twig\\Extension\\AbstractExtension as TwigExtension;\nuse Symfony\\Component\\VarDumper\\Cloner\\VarCloner;\nuse Illuminate\\Pagination\\Paginator;\nuse Illuminate\\Support\\Collection;\nuse ReflectionClass;\n\n/**\n * DebugExtension for Twig\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DebugExtension extends TwigExtension\n{\n    const PAGE_CAPTION = 'Page variables';\n    const ARRAY_CAPTION = 'Array variables';\n    const OBJECT_CAPTION = 'Object variables';\n    const COMPONENT_CAPTION = 'Component variables';\n\n    /**\n     * @var \\Cms\\Classes\\Controller controller reference.\n     */\n    protected $controller;\n\n    /**\n     * @var integer zebra is a helper for rendering table row styles.\n     */\n    protected $zebra = 1;\n\n    /**\n     * @var boolean variablePrefix is true if no variable is passed.\n     */\n    protected $variablePrefix = false;\n\n    /**\n     * @var array commentMap of method/property comments.\n     */\n    protected $commentMap = [];\n\n    /**\n     * @var array blockMethods that should not be included in the dump.\n     */\n    protected $blockMethods = [\n        'componentDetails',\n        'defineProperties',\n        'getPropertyOptions',\n        'offsetExists',\n        'offsetGet',\n        'offsetSet',\n        'offsetUnset'\n    ];\n\n    /**\n     * __construct the extension instance.\n     */\n    public function __construct(?Controller $controller = null)\n    {\n        $this->controller = $controller;\n    }\n\n    /**\n     * addExtensionToTwig adds this extension to the Twig environment and ensures\n     * it cannot be used in safe mode.\n     */\n    public static function addExtensionToTwig(TwigEnvironment $twig)\n    {\n        if (System::checkSafeMode()) {\n            return;\n        }\n\n        $twig->addExtension(new static);\n    }\n\n    /**\n     * getFunctions returns a list of global functions to add to the existing list.\n     * @return array An array of global functions\n     */\n    public function getFunctions()\n    {\n        return [\n            new TwigSimpleFunction('dump', [$this, 'runDump'], [\n                'is_safe' => ['html'],\n                'needs_context' => true,\n                'needs_environment' => true\n            ]),\n            new TwigSimpleFunction('d', [$this, 'dumpVars'], [\n                'is_safe' => ['html'],\n            ]),\n            new TwigSimpleFunction('dd', [$this, 'dumpVarsAndDie'], [\n                'is_safe' => ['html'],\n            ]),\n        ];\n    }\n\n    /**\n     * dumpVars returns dumped variables\n     */\n    public function dumpVars(...$vars)\n    {\n        return implode(PHP_EOL, array_map(function($var) {\n            return $this->variableToDump($var);\n        }, $vars));\n    }\n\n    /**\n     * dumpVarsAndDie outputs dumped variables and then dies\n     */\n    public function dumpVarsAndDie(...$vars)\n    {\n        if (!in_array(\\PHP_SAPI, ['cli', 'phpdbg'], true) && !headers_sent()) {\n            header('HTTP/1.1 500 Internal Server Error');\n        }\n\n        echo $this->dumpVars(...$vars);\n        exit(1);\n    }\n\n    /**\n     * runDump processes the dump variables, if none is supplied, all the twig\n     * template variables are used\n     * @param  TwigEnvironment $env\n     * @param  array $context\n     * @return string\n     */\n    public function runDump(TwigEnvironment $env, $context)\n    {\n        if (!$env->isDebug()) {\n            return;\n        }\n\n        $result = '';\n\n        $count = func_num_args();\n        if ($count == 2) {\n            $this->variablePrefix = true;\n            $vars = [];\n            foreach ($context as $key => $value) {\n                if (!$value instanceof TwigTemplate) {\n                    $vars[$key] = $value;\n                }\n            }\n\n            $result .= $this->dump($vars, static::PAGE_CAPTION);\n        }\n        else {\n            $this->variablePrefix = false;\n            for ($i = 2; $i < $count; $i++) {\n                $var = func_get_arg($i);\n\n                if ($var instanceof ComponentBase) {\n                    $caption = [static::COMPONENT_CAPTION, get_class($var)];\n                }\n                elseif (is_array($var)) {\n                    $caption = static::ARRAY_CAPTION;\n                }\n                elseif (is_object($var)) {\n                    $caption = [static::OBJECT_CAPTION, get_class($var)];\n                }\n                else {\n                    $caption = [static::OBJECT_CAPTION, gettype($var)];\n                }\n\n                $result .= $this->dump($var, $caption);\n            }\n        }\n        return $result;\n    }\n\n    /**\n     * dump information about a variable\n     * @param mixed $variables Variable to dump\n     * @param mixed $caption Caption [and subcaption] of the dump\n     * @return void\n     */\n    public function dump($variables = null, $caption = null)\n    {\n        $this->commentMap = [];\n        $this->zebra = 1;\n        $info = [];\n\n        if (!is_array($variables)) {\n            if ($variables instanceof Paginator) {\n                $variables = $this->paginatorToArray($variables);\n            }\n            elseif (is_object($variables)) {\n                $variables = $this->objectToArray($variables);\n            }\n            else {\n                $variables = [$variables];\n            }\n        }\n\n        $output = [];\n        $output[] = '<table>';\n\n        if ($caption) {\n            $output[] = $this->makeTableHeader($caption);\n        }\n\n        $output[] = '<tbody>';\n        foreach ($variables as $key => $item) {\n            $output[] = $this->makeTableRow($key, $item);\n        }\n        $output[] = '</tbody>';\n        $output[] = '</table>';\n\n        $html = implode(PHP_EOL, $output);\n\n        return '<pre class=\"twig-dump-container\" style=\"' . $this->getContainerCss() . '\">' . $html . '</pre>';\n    }\n\n    /**\n     * makeTableHeader builds the HTML used for the table header.\n     * @param mixed $caption Caption [and subcaption] of the dump\n     * @return string\n     */\n    protected function makeTableHeader($caption)\n    {\n        if (is_array($caption)) {\n            [$caption, $subcaption] = $caption;\n        }\n\n        $output = [];\n        $output[] = '<thead>';\n        $output[] = '<tr>';\n        $output[] = '<th colspan=\"3\" style=\"'.$this->getHeaderCss().'\">';\n        $output[] = $caption;\n\n        if (isset($subcaption)) {\n            $output[] = '<div style=\"'.$this->getSubheaderCss().'\">'.$subcaption.'</div>';\n        }\n\n        $output[] = '</th>';\n        $output[] = '</tr>';\n        $output[] = '</thead>';\n        return implode(PHP_EOL, $output);\n    }\n\n    /**\n     * makeTableRow builds the HTML used for each table row.\n     * @param  mixed $key\n     * @param  mixed $variable\n     * @return string\n     */\n    protected function makeTableRow($key, $variable)\n    {\n        $this->zebra = $this->zebra ? 0 : 1;\n        $css = $this->getDataCss($variable);\n        $output = [];\n        $output[] = '<tr>';\n        $output[] = '<td style=\"'.$css.';cursor:pointer\" onclick=\"'.$this->evalToggleDumpOnClick().'\">'.$this->evalKeyLabel($key).'</td>';\n        $output[] = '<td style=\"'.$css.'\">'.$this->evalVarLabel($variable).'</td>';\n        $output[] = '<td style=\"'.$css.'\">'.$this->evalVarDesc($variable, $key).'</td>';\n        $output[] = '</tr>';\n        $output[] = '<tr>';\n        $output[] = '<td colspan=\"3\">'.$this->evalVarDump($variable).'</td>';\n        $output[] = '</tr>';\n        return implode(PHP_EOL, $output);\n    }\n\n    /**\n     * evalToggleDumpOnClick builds JavaScript for toggling the dump container\n     * @return string\n     */\n    protected function evalToggleDumpOnClick()\n    {\n        $output = \"var d=this.parentElement.nextElementSibling.getElementsByTagName('div')[0];\";\n        $output .= \"d.style.display=='none'?d.style.display='block':d.style.display='none'\";\n        return $output;\n    }\n\n    /**\n     * evalVarDump dumps a variable using HTML Dumper, wrapped in a hidden DIV element.\n     * @param  mixed $variable\n     * @return string\n     */\n    protected function evalVarDump($variable)\n    {\n        $output = '<div style=\"display:none\">';\n        $output .= $this->variableToDump($variable);\n        $output .= '</div>';\n        return $output;\n    }\n\n    /**\n     * evalKeyLabel returns a variable name as HTML friendly.\n     * @param  string $key\n     * @return string\n     */\n    protected function evalKeyLabel($key)\n    {\n        if ($this->variablePrefix === true) {\n            $output = '{{ <span>%s</span> }}';\n        }\n        elseif (is_array($this->variablePrefix)) {\n            $prefix = implode('.', $this->variablePrefix);\n            $output = '{{ <span>'.$prefix.'.%s</span> }}';\n        }\n        elseif ($this->variablePrefix) {\n            $output = '{{ <span>'.$this->variablePrefix.'.%s</span> }}';\n        }\n        else {\n            $output = '%s';\n        }\n\n        return sprintf($output, $key);\n    }\n\n    /**\n     * evalVarLabel evaluates the variable description\n     * @param  mixed $variable\n     * @return string\n     */\n    protected function evalVarLabel($variable)\n    {\n        $type = $this->getType($variable);\n        switch ($type) {\n            case 'object':\n                return $this->evalObjLabel($variable);\n\n            case 'array':\n                return $type . '('.count($variable).')';\n\n            default:\n                return $type;\n        }\n    }\n\n    /**\n     * getType evaluates an object type for label\n     * @param  mixed $variable\n     * @return string\n     */\n    protected function getType($variable)\n    {\n        $type = gettype($variable);\n        if ($type === 'string' && substr($variable, 0, 12) === '___METHOD___') {\n            return 'method';\n        }\n\n        return $type;\n    }\n\n    /**\n     * evalObjLabel evaluates an object type for label\n     * @param  object $variable\n     * @return string\n     */\n    protected function evalObjLabel($variable)\n    {\n        $class = get_class($variable);\n        $label = class_basename($variable);\n\n        if ($variable instanceof ComponentBase) {\n            $label = '<strong>Component</strong>';\n        }\n        elseif ($variable instanceof Collection) {\n            $label = 'Collection('.$variable->count().')';\n        }\n        elseif ($variable instanceof Paginator) {\n            $label = 'Paged Collection('.$variable->count().')';\n        }\n        elseif ($variable instanceof Model) {\n            $label = 'Model';\n        }\n\n        return '<abbr title=\"'.e($class).'\">'.$label.'</abbr>';\n    }\n\n    /**\n     * evalVarDesc evaluates the variable description\n     * @param  mixed $variable\n     * @return string\n     */\n    protected function evalVarDesc($variable, $key)\n    {\n        $type = $this->getType($variable);\n\n        if ($type == 'method') {\n            return $this->evalMethodDesc($variable);\n        }\n\n        if (isset($this->commentMap[$key])) {\n            return $this->commentMap[$key];\n        }\n\n        if ($type == 'array') {\n            return $this->evalArrDesc($variable);\n        }\n\n        if ($type == 'object') {\n            return $this->evalObjDesc($variable);\n        }\n\n        return '';\n    }\n\n    /**\n     * evalMethodDesc evaluates an method type for description\n     * @param  string $variable\n     * @return string\n     */\n    protected function evalMethodDesc($variable)\n    {\n        $parts = explode('|', $variable);\n        if (count($parts) < 2) {\n            return null;\n        }\n\n        $method = $parts[1];\n        return $this->commentMap[$method] ?? null;\n    }\n\n    /**\n     * evalArrDesc evaluates an array type for description\n     * @param  array $variable\n     * @return string\n     */\n    protected function evalArrDesc($variable)\n    {\n        $output = [];\n        foreach ($variable as $key => $value) {\n            $output[] = '<abbr title=\"'.e(gettype($value)).'\">'.$key.'</abbr>';\n        }\n\n        return implode(', ', $output);\n    }\n\n    /**\n     * evalObjDesc evaluates an object type for description\n     * @param  array $variable\n     * @return string\n     */\n    protected function evalObjDesc($variable)\n    {\n        $output = [];\n        if ($variable instanceof ComponentBase) {\n            $details = $variable->componentDetails();\n            $output[] = '<abbr title=\"'.array_get($details, 'description').'\">';\n            $output[] = array_get($details, 'name');\n            $output[] = '</abbr>';\n        }\n\n        return implode('', $output);\n    }\n\n    //\n    // Object helpers\n    //\n\n    /**\n     * paginatorToArray returns default comment information for a paginator object.\n     * @param  Illuminate\\Pagination\\Paginator $paginator\n     * @return array\n     */\n    protected function paginatorToArray(Paginator $paginator)\n    {\n        $this->commentMap = [\n            'links()' => 'Renders links for navigating the collection',\n            'currentPage' => 'Get the current page for the request.',\n            'lastPage' => 'Get the last page that should be available.',\n            'perPage' => 'Get the number of items to be displayed per page.',\n            'total' => 'Get the total number of items in the complete collection.',\n            'from' => 'Get the number of the first item on the paginator.',\n            'to' => 'Get the number of the last item on the paginator.',\n            'count' => 'Returns the number of items in this collection',\n        ];\n\n        return [\n            'links' => '___METHOD___|links()',\n            'currentPage' => '___METHOD___|currentPage',\n            'lastPage' => '___METHOD___|lastPage',\n            'perPage' => '___METHOD___|perPage',\n            'total' => '___METHOD___|total',\n            'from' => '___METHOD___|from',\n            'to' => '___METHOD___|to',\n            'count' => '___METHOD___|count',\n        ];\n    }\n\n    /**\n     * objectToArray returns a map of an object as an array, containing methods and properties.\n     * @param  mixed $object\n     * @return array\n     */\n    protected function objectToArray($object)\n    {\n        $class = get_class($object);\n        $info = new ReflectionClass($object);\n\n        $this->commentMap[$class] = [];\n\n        $methods = [];\n        foreach ($info->getMethods() as $method) {\n            // Only public\n            if (!$method->isPublic()) {\n                continue;\n            }\n            // Only locals\n            if ($method->class != $class) {\n                continue;\n            }\n            $name = $method->getName();\n            // Blocked methods\n            if (in_array($name, $this->blockMethods)) {\n                continue;\n            }\n            // AJAX methods\n            if (preg_match('/^on[A-Z]{1}[\\w+]*$/', $name)) {\n                continue;\n            }\n            // getSomethingOptions\n            if (preg_match('/^get[A-Z]{1}[\\w+]*Options$/', $name)) {\n                continue;\n            }\n            // Magic/hidden method\n            if (substr($name, 0, 1) == '_') {\n                continue;\n            }\n            $name .= '()';\n            $methods[$name] = '___METHOD___|'.$name;\n            $this->commentMap[$name] = $this->evalDocBlock($method);\n        }\n\n        $vars = [];\n        foreach ($info->getProperties() as $property) {\n            // Only non-static\n            if ($property->isStatic()) {\n                continue;\n            }\n            // Only public\n            if (!$property->isPublic()) {\n                continue;\n            }\n            // Only locals\n            if ($property->class != $class) {\n                continue;\n            }\n            $name = $property->getName();\n            $vars[$name] = $object->{$name};\n            $this->commentMap[$name] = $this->evalDocBlock($property);\n        }\n\n        return $methods + $vars;\n    }\n\n    /**\n     * evalDocBlock extracts the comment from a DocBlock\n     * @param  ReflectionClass $reflectionObj\n     * @return string\n     */\n    protected function evalDocBlock($reflectionObj)\n    {\n        $comment = $reflectionObj->getDocComment();\n        $comment = substr($comment, 3, -2);\n\n        $parts = explode('@', $comment);\n        $comment = array_shift($parts);\n        $comment = trim(trim($comment), '*');\n        $comment = implode(' ', array_map('trim', explode('*', $comment)));\n\n        return $comment;\n    }\n\n    //\n    // Style helpers\n    //\n\n    /**\n     * getDataCss gets the CSS string for the output data\n     * @param  mixed $variable\n     * @return string\n     */\n    protected function getDataCss($variable)\n    {\n        $css = [\n            'padding' => '7px',\n            'background-color' => $this->zebra ? '#D8D9DB' : '#FFF',\n            'color' => '#405261',\n        ];\n\n        $type = gettype($variable);\n        if ($type == 'NULL') {\n            $css['color'] = '#999';\n        }\n\n        return $this->arrayToCss($css);\n    }\n\n    /**\n     * getContainerCss gets the CSS string for the output container\n     * @return string\n     */\n    protected function getContainerCss()\n    {\n        return $this->arrayToCss([\n            'background-color' => '#F3F3F3',\n            'border' => '1px solid #bbb',\n            'border-radius' => '4px',\n            'font-size' => '12px',\n            'line-height' => '18px',\n            'margin' => '20px',\n            'padding' => '7px',\n            'display' => 'inline-block',\n        ]);\n    }\n\n    /**\n     * getHeaderCss gets the CSS string for the output header\n     * @return string\n     */\n    protected function getHeaderCss()\n    {\n        return $this->arrayToCss([\n            'font-size' => '18px',\n            'font-weight' => 'normal',\n            'margin' => '0',\n            'padding' => '10px',\n            'background-color' => '#7B8892',\n            'color' => '#FFF',\n        ]);\n    }\n\n    /**\n     * getSubheaderCss gets the CSS string for the output subheader\n     * @return string\n     */\n    protected function getSubheaderCss()\n    {\n        return $this->arrayToCss([\n            'font-size' => '12px',\n            'font-weight' => 'normal',\n            'font-style' => 'italic',\n            'margin' => '0',\n            'padding' => '0',\n            'background-color' => '#7B8892',\n            'color' => '#FFF',\n        ]);\n    }\n\n    /**\n     * arrayToCss converts a key/value pair array into a CSS string\n     * @param array $rules List of rules to process\n     * @return string\n     */\n    protected function arrayToCss(array $rules)\n    {\n        $strings = [];\n\n        foreach ($rules as $key => $value) {\n            $strings[] = $key . ': ' . $value;\n        }\n\n        return implode('; ', $strings);\n    }\n\n    /**\n     * variableToDump converts a variable to a HTML dumped version\n     */\n    protected function variableToDump($variable)\n    {\n        $dumper = new HtmlDumper;\n        $cloner = new VarCloner;\n\n        return $dumper->dump($cloner->cloneVar($variable), true);\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/Extension.php",
    "content": "<?php namespace Cms\\Twig;\n\nuse App;\nuse Cms;\nuse Flash;\nuse Cache;\nuse Block;\nuse Event;\nuse Request;\nuse Response;\nuse Cms\\Classes\\PageManager;\nuse Cms\\Classes\\Controller;\nuse Cms\\Classes\\ThisVariable;\nuse Twig\\Environment as TwigEnvironment;\nuse Twig\\TwigFilter as TwigSimpleFilter;\nuse Twig\\TwigFunction as TwigSimpleFunction;\nuse Twig\\Extension\\AbstractExtension as TwigExtension;\nuse Illuminate\\Http\\Exceptions\\HttpResponseException;\nuse Symfony\\Component\\HttpKernel\\Exception\\HttpException;\nuse Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException;\nuse Closure;\n\n/**\n * Extension implements the basic CMS Twig functions and filters.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Extension extends TwigExtension\n{\n    /**\n     * @var \\Cms\\Classes\\Controller controller reference\n     */\n    protected $controller;\n\n    /**\n     * @var array putOnceCache stores the cache for yieldBlockOnce\n     */\n    protected $putOnceCache = [];\n\n    /**\n     * __construct the extension instance.\n     */\n    public function __construct(?Controller $controller = null)\n    {\n        $this->controller = $controller;\n    }\n\n    /**\n     * addExtensionToTwig adds this extension to the Twig environment and also\n     * creates a hook for others.\n     */\n    public static function addExtensionToTwig(TwigEnvironment $twig, ?Controller $controller = null)\n    {\n        $twig->addExtension(new static($controller));\n\n        /**\n         * @event cms.extendTwig\n         * Provides an opportunity to extend the Twig environment used by the CMS\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.extendTwig', function ((Twig\\Environment) $twig) {\n         *         $twig->addExtension(new \\Twig\\Extension\\StringLoaderExtension);\n         *     });\n         *\n         */\n        Event::fire('cms.extendTwig', [$twig]);\n    }\n\n    /**\n     * getFunctions returns a list of functions to add to the existing list.\n     * @return array\n     */\n    public function getFunctions()\n    {\n        return [\n            new TwigSimpleFunction('page', [$this, 'pageFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('partial', [$this, 'partialFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('hasPartial', [$this, 'hasPartialFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('content', [$this, 'contentFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('hasContent', [$this, 'hasContentFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('component', [$this, 'componentFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('placeholder', [$this, 'placeholderFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('hasPlaceholder', [$this, 'hasPlaceholderFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('ajaxHandler', [$this, 'ajaxHandlerFunction'], []),\n            new TwigSimpleFunction('response', [$this, 'responseFunction'], []),\n            new TwigSimpleFunction('redirect', [$this, 'redirectFunction'], []),\n            new TwigSimpleFunction('abort', [$this, 'abortFunction'], []),\n            new TwigSimpleFunction('flash', [$this, 'flashFunction'], []),\n        ];\n    }\n\n    /**\n     * getFilters returns a list of filters this extension provides.\n     * @return array\n     */\n    public function getFilters()\n    {\n        return [\n            new TwigSimpleFilter('page', [$this, 'pageFilter'], ['is_safe' => ['html']]),\n            new TwigSimpleFilter('theme', [$this, 'themeFilter'], ['is_safe' => ['html']]),\n            new TwigSimpleFilter('content', [$this, 'contentFilter'], ['is_safe' => ['html']]),\n        ];\n    }\n\n    /**\n     * getTokenParsers returns a list of token parsers this extension provides.\n     * @return array\n     */\n    public function getTokenParsers()\n    {\n        return [\n            new \\Cms\\Twig\\TokenParser\\PageTokenParser,\n            new \\Cms\\Twig\\TokenParser\\PartialTokenParser,\n            new \\Cms\\Twig\\TokenParser\\AjaxPartialTokenParser,\n            new \\Cms\\Twig\\TokenParser\\ContentTokenParser,\n            new \\Cms\\Twig\\TokenParser\\PutTokenParser,\n            new \\Cms\\Twig\\TokenParser\\PlaceholderTokenParser,\n            new \\Cms\\Twig\\TokenParser\\DefaultTokenParser,\n            new \\Cms\\Twig\\TokenParser\\FrameworkTokenParser,\n            new \\Cms\\Twig\\TokenParser\\ComponentTokenParser,\n            new \\Cms\\Twig\\TokenParser\\FlashTokenParser,\n            new \\Cms\\Twig\\TokenParser\\ScriptsTokenParser,\n            new \\Cms\\Twig\\TokenParser\\StylesTokenParser,\n            new \\Cms\\Twig\\TokenParser\\MetaTokenParser,\n            new \\Cms\\Twig\\TokenParser\\CacheTokenParser,\n            new \\Cms\\Twig\\TokenParser\\PropsTokenParser,\n        ];\n    }\n\n    /**\n     * getNodeVisitors returns a list of node visitors this extension provides.\n     * @return array\n     */\n    public function getNodeVisitors()\n    {\n        return [\n            new \\System\\Twig\\GetAttrAdjuster\n        ];\n    }\n\n    /**\n     * pageFunction renders a page.\n     * This function should be used in the layout code to output the requested page.\n     * @param array|null $context\n     * @return string\n     */\n    public function pageFunction($context = null)\n    {\n        if ($this->controller->getLayout()->isPriority() && is_array($context)) {\n            $this->controller->vars += $context;\n        }\n\n        return $this->controller->renderPage();\n    }\n\n    /**\n     * partialFunction renders a partial based on the partial name. The parameters\n     * are an optional list of view variables. An exception can be thrown if\n     * nothing is found.\n     * @return string\n     */\n    public function partialFunction($name, $parameters = [], $throwException = false)\n    {\n        return $this->controller->renderPartial($name, $parameters, $throwException);\n    }\n\n    /**\n     * hasPartialFunction checks the partials existence without rendering it.\n     * @return bool\n     */\n    public function hasPartialFunction($name)\n    {\n        return (bool) $this->controller->loadPartialObject($name);\n    }\n\n    /**\n     * contentFunction renders a partial based on the file name. The parameters\n     * are an optional list of view variables, otherwise pass false to render nothing\n     * and check the existence. An exception can be thrown if nothing is found.\n     * @return string\n     */\n    public function contentFunction($name, $parameters = [], $throwException = false)\n    {\n        return $this->controller->renderContent($name, $parameters, $throwException);\n    }\n\n    /**\n     * hasContentFunction checks the content existence without rendering it.\n     * @return bool\n     */\n    public function hasContentFunction($name)\n    {\n        return (bool) $this->controller->loadContentObject($name);\n    }\n\n    /**\n     * componentFunction renders a component's default content.\n     * @param string $name Specifies the component name.\n     * @param array $parameters A optional list of parameters to pass to the component.\n     * @return string\n     */\n    public function componentFunction($name, $parameters = [])\n    {\n        return $this->controller->renderComponent($name, $parameters);\n    }\n\n    /**\n     * assetsFunction renders registered assets of a given type\n     * @return string\n     */\n    public function assetsFunction($type = null)\n    {\n        $result = $this->controller->makeAssets($type);\n\n        Event::fire('cms.assets.render', [$type, &$result]);\n\n        return $result;\n    }\n\n    /**\n     * placeholderFunction renders a placeholder content, without removing the block,\n     * must be called before the placeholder tag itself\n     * @return string\n     */\n    public function placeholderFunction($name, $default = null)\n    {\n        if (($result = Block::get($name)) === null) {\n            return null;\n        }\n\n        if (is_string($result)) {\n            $result = str_replace(\n                '<!-- X_OCTOBER_DEFAULT_BLOCK_CONTENT -->',\n                trim((string) $default),\n                $result\n            );\n        }\n\n        return $result;\n    }\n\n    /**\n     * hasPlaceholderFunction checks that a placeholder exists without rendering it\n     */\n    public function hasPlaceholderFunction($name)\n    {\n        return Block::has($name);\n    }\n\n    /**\n     * ajaxHandlerFunction runs an ajax handler\n     * @param string $name\n     * @param array|null $postVars\n     */\n    public function ajaxHandlerFunction($name = '', $postVars = null)\n    {\n        if (is_array($postVars)) {\n            Request::merge($postVars);\n        }\n\n        return $this->controller->runAjaxHandlerAsResponse($name);\n    }\n\n    /**\n     * flashFunction returns flash messages as an object\n     * @param string $type\n     */\n    public function flashFunction($type = null)\n    {\n        if ($type === 'all') {\n            return Flash::messages();\n        }\n\n        if ($type) {\n            return array_first(Flash::{$type}());\n        }\n\n        return Flash::all();\n    }\n\n    /**\n     * responseFunction returns a new response from the application.\n     * @param \\Illuminate\\Contracts\\View\\View|string|array|null $content\n     * @param int|null $status\n     * @param array $headers\n     */\n    public function responseFunction($content = '', $status = null, array $headers = [])\n    {\n        if ($content instanceof \\Illuminate\\Contracts\\Support\\Responsable) {\n            $response = $content->toResponse(App::make('request'));\n        }\n        elseif ($content instanceof \\Symfony\\Component\\HttpFoundation\\Response) {\n            $response = $content;\n        }\n        else {\n            $response = Response::make($content, $status ?: 200, $headers);\n        }\n\n        if ($status !== null) {\n            $response->setStatusCode($status);\n        }\n\n        // Allow headers and interception from Response Maker\n        $response = $this->controller->makeResponse($response);\n\n        throw new HttpResponseException($response);\n    }\n\n    /**\n     * redirectFunction will redirect the response to a theme page or URL\n     * @param string $to\n     * @param int $code\n     */\n    public function redirectFunction($to, $parameters = [], $code = 302)\n    {\n        throw new HttpResponseException(Cms::redirect($to, $parameters, $code));\n    }\n\n    /**\n     * abortFunction will abort the successful page cycle\n     * @param int $code\n     * @param string|false $message\n     */\n    public function abortFunction($code, $message = '')\n    {\n        if ($message === false) {\n            $this->controller->setStatusCode($code);\n            return;\n        }\n\n        if ($code == 404) {\n            throw new NotFoundHttpException($message);\n        }\n\n        throw new HttpException($code, $message);\n    }\n\n    /**\n     * pageFilter looks up the URL for a supplied page name and returns it relative to the website root,\n     * including route parameters. Parameters can be persisted from the current page parameters.\n     * @param mixed $name\n     * @param array $parameters\n     * @param bool $routePersistence\n     * @return string\n     */\n    public function pageFilter($name, $parameters = [], $routePersistence = true)\n    {\n        if ($name instanceof ThisVariable) {\n            $name = '';\n        }\n\n        return $this->controller->pageUrl($name, $parameters, $routePersistence);\n    }\n\n    /**\n     * themeFilter converts supplied URL to a theme URL relative to the website root. If the URL provided is an\n     * array then the files will be combined.\n     * @param mixed $url Specifies the theme-relative URL\n     * @return string\n     */\n    public function themeFilter($url)\n    {\n        return $this->controller->themeUrl($url);\n    }\n\n    /**\n     * contentFilter processes content for links and snippets\n     * @param string $content\n     * @return string\n     */\n    public function contentFilter($content)\n    {\n        return PageManager::processMarkup($content);\n    }\n\n    /**\n     * displayBlock returns a layout block contents and removes the block.\n     * @param string $name Specifies the block name\n     * @param string $default The default placeholder contents.\n     * @return string|null\n     */\n    public function displayBlock($name, $default = null)\n    {\n        if (($result = Block::placeholder($name)) === null) {\n            return $default;\n        }\n\n        /**\n         * @event cms.block.render\n         * Provides an opportunity to modify the rendered block content\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.block.render', function ((string) $name, (string) $result) {\n         *         if ($name === 'myBlockName') {\n         *             return 'my custom content';\n         *         }\n         *     });\n         *\n         */\n        if ($event = Event::fire('cms.block.render', [$name, $result], true)) {\n            $result = $event;\n        }\n\n        $result = str_replace(\n            '<!-- X_OCTOBER_DEFAULT_BLOCK_CONTENT -->',\n            trim((string) $default),\n            $result\n        );\n\n        return $result;\n    }\n\n    /**\n     * setBlock sets a block name as a variable value.\n     */\n    public function setBlock(string $name, $value)\n    {\n        Block::set($name, $value);\n    }\n\n    /**\n     * yieldBlock yields the contents of a block by appending or overwriting,\n     * and storing its name alongside the content.\n     */\n    public function yieldBlock(string $name, $callable, $append = true)\n    {\n        $content = '';\n        foreach ($callable() as $value) {\n            $content .= $value;\n        }\n\n        if ($append) {\n            Block::append($name, $content);\n        }\n        else {\n            Block::set($name, $content);\n        }\n    }\n\n    /**\n     * yieldBlockOnce will append or set some content once per template (partial)\n     */\n    public function yieldBlockOnce(string $templateName, $placeholderName, $callable, $append = false)\n    {\n        $cacheKey = \"{$templateName}-{$placeholderName}\";\n\n        if (!isset($this->putOnceCache[$cacheKey])) {\n            $this->yieldBlock($placeholderName, $callable, $append);\n\n            $this->putOnceCache[$cacheKey] = true;\n        }\n    }\n\n    /**\n     * setCache\n     */\n    public function setCache(string $key, $ttl, $callable): string\n    {\n        $repo = Cache::store(config('cache.twig', config('cache.default')));\n\n        $themeCode = $this->controller->getTheme()?->getDirName();\n\n        $cacheKey = \"cms_twig_{$themeCode}_cache_{$key}\";\n\n        if ($ttl === null) {\n            $value = $repo->rememberForever($cacheKey, $callable);\n        }\n        else {\n            if ($ttl instanceof \\DateTimeInterface) {\n                $expiresAt = $ttl;\n            }\n            elseif ($ttl instanceof \\DateInterval) {\n                $expiresAt = now()->add($ttl);\n            }\n            else {\n                $expiresAt = now()->addMinutes((int) $ttl);\n            }\n            $value = $repo->remember($cacheKey, $expiresAt, $callable);\n        }\n\n        return is_string($value) ? $value : (string) $value;\n    }\n\n    /**\n     * @deprecated use yieldBlock\n     */\n    public function endBlock($append = true)\n    {\n        Block::endBlock($append);\n    }\n\n    /**\n     * @deprecated use yieldBlock\n     */\n    public function startBlock($name)\n    {\n        Block::startBlock($name);\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/Loader.php",
    "content": "<?php namespace Cms\\Twig;\n\nuse Event;\nuse Twig\\Source as TwigSource;\nuse Twig\\Loader\\LoaderInterface as TwigLoaderInterface;\nuse Cms\\Contracts\\CmsObject;\nuse System\\Twig\\Loader as LoaderBase;\nuse Cms\\Classes\\Partial as CmsPartial;\nuse Exception;\n\n/**\n * Loader implements a Twig template loader for the CMS.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Loader extends LoaderBase implements TwigLoaderInterface\n{\n    /**\n     * @var \\Cms\\Classes\\CmsCompoundObject obj is the CMS object to load the template from.\n     */\n    protected $obj;\n\n    /**\n     * @var array fallbackCache for fallback objects.\n     */\n    protected $fallbackCache = [];\n\n    /**\n     * setObject sets a CMS object to load the template from.\n     */\n    public function setObject(CmsObject $obj)\n    {\n        $this->obj = $obj;\n    }\n\n    /**\n     * getSourceContext returns the Twig content string.\n     * This step is cached internally by Twig.\n     */\n    public function getSourceContext(string $name): TwigSource\n    {\n        if (!$this->validateCmsObject($name)) {\n            return parent::getSourceContext($name);\n        }\n\n        $content = $this->obj->getTwigContent();\n\n        /**\n         * @event cms.template.processTwigContent\n         * Provides an opportunity to modify Twig content before being processed by Twig. `$dataHolder` = {content: $twigContent}\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.template.processTwigContent', function ((\\Cms\\Classes\\CmsObject) $thisObject, (object) $dataHolder) {\n         *         $dataHolder->content = \"New content\";\n         *     });\n         *\n         */\n        $dataHolder = (object) ['content' => $content];\n        Event::fire('cms.template.processTwigContent', [$this->obj, $dataHolder]);\n\n        return new TwigSource((string) $dataHolder->content, $name);\n    }\n\n    /**\n     * getCacheKey returns the Twig cache key.\n     */\n    public function getCacheKey(string $name): string\n    {\n        if (!$this->validateCmsObject($name)) {\n            return parent::getCacheKey($name);\n        }\n\n        return $this->obj->getTwigCacheKey();\n    }\n\n    /**\n     * isFresh determines if the content is fresh.\n     */\n    public function isFresh(string $name, int $time): bool\n    {\n        if (!$this->validateCmsObject($name)) {\n            return parent::isFresh($name, $time);\n        }\n\n        return $this->obj->mtime <= $time;\n    }\n\n    /**\n     * getFilename returns the file name of the loaded template.\n     */\n    public function getFilename($name)\n    {\n        if (!$this->validateCmsObject($name)) {\n            return parent::getFilename($name);\n        }\n\n        return $this->obj->getFilePath();\n    }\n\n    /**\n     * exists checks that the template exists.\n     */\n    public function exists(string $name)\n    {\n        if (!$this->validateCmsObject($name)) {\n            return parent::exists($name);\n        }\n\n        return $this->obj->exists;\n    }\n\n    /**\n     * validateCmsObject is an internal method that checks if the template name matches\n     * the loaded object, with fallback support to partials.\n     */\n    protected function validateCmsObject($name): bool\n    {\n        if ($this->obj && $this->obj->getFilePath() === $name) {\n            return true;\n        }\n\n        if ($fallbackObj = $this->findFallbackObject($name)) {\n            $this->obj = $fallbackObj;\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * findFallbackObject looks up a fallback CMS partial object.\n     * @return Cms\\Classes\\Partial\n     */\n    protected function findFallbackObject($name)\n    {\n        if (strpos($name, '::') !== false) {\n            return false;\n        }\n\n        if (array_key_exists($name, $this->fallbackCache)) {\n            return $this->fallbackCache[$name];\n        }\n\n        try {\n            return $this->fallbackCache[$name] = CmsPartial::find($name);\n        }\n        catch (Exception $ex) {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/CacheNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Compiler;\nuse Twig\\Node\\CaptureNode;\nuse Twig\\Node\\Expression\\AbstractExpression;\nuse Twig\\Node\\Node;\n\n/**\n * CacheNode\n */\nclass CacheNode extends AbstractExpression\n{\n    /**\n     * __construct\n     */\n    public function __construct(AbstractExpression $key, ?AbstractExpression $ttl, Node $body, int $lineno)\n    {\n        $body = new CaptureNode($body, $lineno);\n        $body->setAttribute('raw', true);\n\n        $nodes = ['key' => $key, 'body' => $body];\n        if (null !== $ttl) {\n            $nodes['ttl'] = $ttl;\n        }\n\n        parent::__construct($nodes, [], $lineno);\n    }\n\n    /**\n     * compile\n     */\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->addDebugInfo($this)\n            // compile as a single expression (IIFE) that returns the cached string\n            ->raw('(function () use ($context, $macros, $blocks) {' . \"\\n\")\n            ->indent()\n\n            // body renderer\n            ->write('$__cmsClosure = function () use ($context, $macros, $blocks) {' . \"\\n\")\n            ->indent()\n                ->write('return ')\n                ->subcompile($this->getNode('body'))\n                ->raw(\";\\n\")\n            ->outdent()\n            ->write(\"};\\n\");\n\n        // ttl\n        if ($this->hasNode('ttl')) {\n            $compiler\n                ->write('$__cmsTtl = ')\n                ->subcompile($this->getNode('ttl'))\n                ->raw(\";\\n\");\n        } else {\n            $compiler->write('$__cmsTtl = null;' . \"\\n\");\n        }\n\n        // single proxy call to the extension (handles prefix, ttl normalization, store, tags, etc.)\n        $compiler\n            ->write('return $this->env->getExtension(\\\\Cms\\\\Twig\\\\Extension::class)->setCache(')\n            ->subcompile($this->getNode('key'))\n            ->raw(', $__cmsTtl, $__cmsClosure);' . \"\\n\")\n            ->outdent()\n            ->raw('})()');\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/ComponentNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * ComponentNode represents a \"component\" node\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass ComponentNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(array $nodes, array $paramNames, int $lineno)\n    {\n        // Store each node individually, avoiding \"nodes\" wrapper issue\n        parent::__construct($nodes, ['paramNames' => $paramNames], $lineno);\n    }\n\n    /**\n     * compile the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $compiler->addDebugInfo($this);\n\n        // Initialize component parameters array\n        $compiler->write(\"\\$context['__cms_component_params'] = [];\\n\");\n\n        // Process parameters\n        foreach ($this->getAttribute('paramNames') as $paramName) {\n            if ($this->hasNode($paramName)) {\n                $compiler->write(\"\\$context['__cms_component_params']['\".$paramName.\"'] = \");\n                $compiler->subcompile($this->getNode($paramName));\n                $compiler->write(\";\\n\");\n            }\n        }\n\n        // Call the component function\n        $compiler\n            ->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->componentFunction(\")\n            ->subcompile($this->getNode('__component_name'))\n            ->write(\", \\$context['__cms_component_params']\")\n            ->write(\");\\n\");\n\n        // Cleanup\n        $compiler->write(\"unset(\\$context['__cms_component_params']);\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/ContentNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * ContentNode represents a `{% content %}` tag in Twig.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass ContentNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(array $nodes, array $paramNames, int $lineno)\n    {\n        parent::__construct($nodes, ['paramNames' => $paramNames], $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $compiler->addDebugInfo($this);\n\n        // Initialize content parameters array\n        $compiler->write(\"\\$context['__cms_content_params'] = [];\\n\");\n\n        // Process parameters\n        foreach ($this->getAttribute('paramNames') as $paramName) {\n            if ($this->hasNode($paramName)) {\n                $compiler->write(\"\\$context['__cms_content_params']['\".$paramName.\"'] = \");\n                $compiler->write('$this->env->getRuntime(\\Twig\\Runtime\\EscaperRuntime::class)->escape(');\n                $compiler->subcompile($this->getNode($paramName));\n                $compiler->write(\");\\n\");\n            }\n        }\n\n        // Call the content function\n        $compiler\n            ->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->contentFunction(\")\n            ->subcompile($this->getNode('__content_name')) // Get content name\n            ->write(\", \\$context['__cms_content_params']\")\n            ->write(\", true\")\n            ->write(\");\\n\");\n\n        // Cleanup\n        $compiler->write(\"unset(\\$context['__cms_content_params']);\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/DefaultNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * DefaultNode represents a \"default\" node\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass DefaultNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(array $nodes = [], array $attributes = [], int $lineno = 0)\n    {\n        parent::__construct($nodes, $attributes, $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"yield '<!-- X_OCTOBER_DEFAULT_BLOCK_CONTENT -->';\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/FlashNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * FlashNode represents a \"flash\" node\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass FlashNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(string $name, TwigNode $body, int $lineno)\n    {\n        parent::__construct(['body' => $body], ['name' => $name], $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $attrib = $this->getAttribute('name');\n\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"\\$_type = \\$context['type'] ?? null;\\n\")\n            ->write(\"\\$_message = \\$context['message'] ?? null;\\n\");\n\n        if ($attrib === 'all') {\n            $compiler\n                ->write(\"foreach (Flash::messages() as \\$type => \\$messages) {\\n\")\n                ->indent()\n                    ->write(\"foreach (\\$messages as \\$message) {\\n\")\n                    ->indent()\n                        ->write(\"\\$context['type'] = \\$type;\\n\")\n                        ->write(\"\\$context['message'] = \\$message;\\n\")\n                        ->subcompile($this->getNode('body'))\n                    ->outdent()\n                    ->write(\"}\\n\")\n                ->outdent()\n                ->write(\"}\\n\");\n        }\n        else {\n            $compiler\n                ->write(\"\\$context['type'] = '\")\n                ->raw($attrib)\n                ->write(\"';\\n\")\n                ->write(\"foreach (Flash::\")\n                ->raw($attrib)\n                ->write(\"() as \\$message) {\\n\")\n                ->indent()\n                    ->write(\"\\$context['message'] = \\$message;\\n\")\n                    ->subcompile($this->getNode('body'))\n                ->outdent()\n                ->write(\"}\\n\");\n        }\n\n        $compiler\n            ->write(\"\\$context['type'] = \\$_type;\\n\")\n            ->write(\"\\$context['message'] = \\$_message;\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/FrameworkNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * FrameworkNode represents a \"framework\" node\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass FrameworkNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(array $options, int $lineno)\n    {\n        parent::__construct([], ['options' => $options], $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $options = $this->getAttribute('options');\n        $includeExtras = in_array('extras', $options, true);\n        $includeTurbo = in_array('turbo', $options, true);\n\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"\\$_minify = System\\\\Classes\\\\CombineAssets::instance()->useMinify;\\n\");\n\n        // Default\n        $cssFile = null;\n        $jsScript = 'framework';\n\n        // Options\n        if ($includeExtras || $includeTurbo) {\n            $jsScript = 'framework-bundle';\n            $cssFile = 'framework-extras';\n        }\n\n        $compiler->write(\"yield '<script src=\\\"' . Request::getBasePath() . '/modules/system/assets/js/\".$jsScript.\"'.(\\$_minify ? '.min' : '').'.js\\\"></script>' . PHP_EOL;\\n\");\n\n        if ($cssFile) {\n            $compiler->write(\"yield '<link rel=\\\"stylesheet\\\" property=\\\"stylesheet\\\" href=\\\"' . Request::getBasePath() .'/modules/system/assets/css/\".$cssFile.\".css\\\">' . PHP_EOL;\\n\");\n        }\n\n        $compiler->write(\"unset(\\$_minify);\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/MetaNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * MetaNode represents a \"meta\" node\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass MetaNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(int $lineno)\n    {\n        parent::__construct([], [], $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->displayBlock('meta');\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/PageNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * PageNode represents a \"page\" node\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass PageNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(int $lineno)\n    {\n        parent::__construct([], [], $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->pageFunction(\\$context);\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/PartialNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Node\\Expression\\Filter\\RawFilter;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * PartialNode represents a \"partial\" node\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass PartialNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(array $nodes, ?TwigNode $body, array $options, int $lineno)\n    {\n        if ($body) {\n            $nodes['__body'] = $body;\n        }\n\n        parent::__construct($nodes, ['options' => $options], $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $options = $this->getAttribute('options');\n\n        $compiler->addDebugInfo($this);\n\n        // Initialize parameters array\n        $compiler->write(\"\\$cmsPartialParams = [];\\n\");\n\n        // Handle body block\n        if ($this->hasNode('__body')) {\n            $compiler\n                ->write(\"\\$cmsPartialParams['body'] = implode('', iterator_to_array((function() use (\\$context, \\$blocks, \\$macros) {\")\n                ->subcompile($this->getNode('__body'))\n                ->write(\" return; yield ''; })()));\\n\");\n        }\n\n        // Compile parameters, tracking which ones are marked as raw\n        $rawParams = [];\n        foreach ($options['paramNames'] as $paramName) {\n            if ($this->hasNode($paramName)) {\n                if ($this->getNode($paramName) instanceof RawFilter) {\n                    $rawParams[] = $paramName;\n                }\n                $compiler\n                    ->write(\"\\$cmsPartialParams['\" . $paramName . \"'] = \")\n                    ->subcompile($this->getNode($paramName))\n                    ->write(\";\\n\");\n            }\n        }\n\n        if ($rawParams) {\n            $compiler->write(\"\\$cmsPartialParams['__cms_partial_raw_params'] = \" . var_export($rawParams, true) . \";\\n\");\n        }\n\n        // Handle AJAX mode\n        if ($options['isAjax']) {\n            $compiler\n                ->write(\"yield '<div data-ajax-partial=\\\"'.\")\n                ->subcompile($this->getNode('__partial_name'))\n                ->write(\".'\\\">';\\n\");\n        }\n\n        // Handle Lazy mode\n        if ($options['hasLazy']) {\n            $compiler->write(\"yield '<div data-request=\\\"onAjax\\\" data-request-update=\\\"_self: true\\\" data-auto-submit>'.(\\$cmsPartialParams['body'] ?? '').'</div>';\\n\");\n        }\n        else {\n            // Render Partial\n            $compiler\n                ->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->partialFunction(\")\n                ->subcompile($this->getNode('__partial_name'));\n\n            if ($options['hasOnly']) {\n                $compiler->write(\", array_merge(['__cms_partial_params' => \\$cmsPartialParams], \\$cmsPartialParams)\");\n            }\n            else {\n                $compiler->write(\", array_merge(\\$context, ['__cms_partial_params' => \\$cmsPartialParams], \\$cmsPartialParams)\");\n            }\n\n            $compiler->write(\", true);\\n\");\n        }\n\n        // Close AJAX wrapper\n        if ($options['isAjax']) {\n            $compiler->write(\"yield '</div>';\\n\");\n        }\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/PlaceholderNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * PlaceholderNode represents a \"placeholder\" node.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass PlaceholderNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(?TwigNode $body, string $name, array $paramValues, int $lineno)\n    {\n        $nodes = [];\n        if ($body) {\n            $nodes['default'] = $body;\n        }\n\n        $attributes = $paramValues;\n        $attributes['name'] = $name;\n\n        parent::__construct($nodes, $attributes, $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $hasBody = $this->hasNode('default');\n        $varId = '__placeholder_' . $this->getAttribute('name') . '_default_contents';\n\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"\\$context['\" . $varId . \"'] = null;\\n\");\n\n        if ($hasBody) {\n            $compiler\n                ->write(\"\\$context['\" . $varId . \"'] = implode('', iterator_to_array((function() use (\\$context, \\$blocks, \\$macros) {\\n\")\n                ->subcompile($this->getNode('default'))\n                ->write(\" return; yield ''; })()));\\n\");\n        }\n\n        $isText = $this->hasAttribute('type') && $this->getAttribute('type') === 'text';\n\n        $compiler->addDebugInfo($this);\n        if (!$isText) {\n            $compiler->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->displayBlock(\");\n        }\n        else {\n            $compiler->write(\"yield \\$this->env->getRuntime(\\Twig\\Runtime\\EscaperRuntime::class)->escape(\\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->displayBlock(\");\n        }\n\n        $compiler\n            ->string($this->getAttribute('name'))\n            ->write(\", \\$context['\" . $varId . \"']\");\n\n        if (!$isText) {\n            $compiler->write(\");\\n\");\n        }\n        else {\n            $compiler->write(\"));\\n\");\n        }\n\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"unset(\\$context['\" . $varId . \"']);\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/PropsNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Node\\Expression\\AbstractExpression;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * PropsNode represents a \"props\" node that separates partial parameters\n * into props (template variables) and attributes (ComponentAttributeBag).\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass PropsNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(AbstractExpression $propsExpression, int $lineno)\n    {\n        parent::__construct(['props_expression' => $propsExpression], [], $lineno);\n    }\n\n    /**\n     * compile the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $compiler->addDebugInfo($this);\n\n        // Evaluate the hash expression to get declared props with defaults\n        $compiler\n            ->write(\"\\$__propsDefinition = \")\n            ->subcompile($this->getNode('props_expression'))\n            ->write(\";\\n\");\n\n        // Get all params the caller passed\n        $compiler->write(\"\\$__allParams = \\$context['__cms_partial_params'] ?? [];\\n\");\n        $compiler->write(\"\\$__rawParams = \\$__allParams['__cms_partial_raw_params'] ?? [];\\n\");\n        $compiler->write(\"unset(\\$__allParams['__cms_partial_raw_params']);\\n\");\n\n        // Set props as context variables (caller value overrides default)\n        // Wrap raw-marked props in Twig\\Markup so {{ }} auto-escaping is skipped\n        $compiler->write(\"foreach (\\$__propsDefinition as \\$__key => \\$__default) {\\n\");\n        $compiler->write(\"    \\$__val = array_key_exists(\\$__key, \\$__allParams) ? \\$__allParams[\\$__key] : \\$__default;\\n\");\n        $compiler->write(\"    if (in_array(\\$__key, \\$__rawParams) && is_string(\\$__val)) {\\n\");\n        $compiler->write(\"        \\$__val = new \\\\Twig\\\\Markup(\\$__val, \\$this->env->getCharset());\\n\");\n        $compiler->write(\"    }\\n\");\n        $compiler->write(\"    \\$context[\\$__key] = \\$__val;\\n\");\n        $compiler->write(\"}\\n\");\n\n        // Create attribute bag from remaining params (exclude props, body, and internal keys)\n        // Escape attribute values using Twig's escaper to prevent XSS, skip raw params\n        $compiler->write(\"\\$__attrValues = array_diff_key(\\$__allParams, \\$__propsDefinition);\\n\");\n        $compiler->write(\"unset(\\$__attrValues['body']);\\n\");\n        $compiler->write(\"\\$__escaper = \\$this->env->getRuntime(\\\\Twig\\\\Runtime\\\\EscaperRuntime::class);\\n\");\n        $compiler->write(\"foreach (\\$__attrValues as \\$__key => \\$__val) {\\n\");\n        $compiler->write(\"    if (!in_array(\\$__key, \\$__rawParams)) {\\n\");\n        $compiler->write(\"        \\$__attrValues[\\$__key] = \\$__escaper->escape(\\$__val, 'html', null, true);\\n\");\n        $compiler->write(\"    }\\n\");\n        $compiler->write(\"}\\n\");\n        $compiler->write(\"\\$context['attributes'] = new \\\\Illuminate\\\\View\\\\ComponentAttributeBag(\\$__attrValues);\\n\");\n\n        // Cleanup temp variables\n        $compiler->write(\"unset(\\$__propsDefinition, \\$__allParams, \\$__attrValues, \\$__key, \\$__default, \\$__val, \\$__rawParams, \\$__escaper);\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/PutNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * PutNode represents a \"put\" node.\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass PutNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(bool $capture, TwigNode $names, TwigNode $values, array $options, int $lineno)\n    {\n        parent::__construct(['names' => $names, 'values' => $values], ['capture' => $capture, 'options' => $options], $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $names = $this->getNode('names');\n        $values = $this->getNode('values');\n        $isCapture = $this->getAttribute('capture');\n\n        if ($isCapture) {\n            $options = (array) $this->getAttribute('options');\n\n            // @deprecated using \"overwrite\" is deprecated\n            $isReplace = in_array('replace', $options, true) || in_array('overwrite', $options, true);\n            $isOnce = in_array('once', $options, true);\n\n            $blockName = $names->getNode(0);\n            $compiler->addDebugInfo($this);\n\n            if ($isOnce) {\n                $compiler\n                    ->write(\"\\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->yieldBlockOnce(\")\n                    ->string($this->getTemplateName())\n                    ->write(\", \");\n            }\n            else {\n                $compiler->write(\"\\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->yieldBlock(\");\n            }\n\n            $compiler\n                ->string($blockName->getAttribute('name'))\n                ->write(\", function() use (\\$context, \\$blocks, \\$macros) {\\n\")\n                ->subcompile($this->getNode('values'))\n                ->write(\"return; yield '';}, \")\n                ->raw($isReplace ? 'false' : 'true')\n                ->write(\");\\n\");\n        }\n        else {\n            foreach ($names as $key => $name) {\n                if (!$values->hasNode($key)) {\n                    continue;\n                }\n\n                $value = $values->getNode($key);\n\n                $compiler\n                    ->addDebugInfo($this)\n                    ->write(\"\\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->setBlock(\")\n                    ->string($name->getAttribute('name'))\n                    ->write(\", \")\n                    ->subcompile($value)\n                    ->write(\");\\n\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/ScriptsNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * ScriptsNode represents a \"scripts\" node\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass ScriptsNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct($lineno)\n    {\n        parent::__construct([], [], $lineno);\n    }\n\n    /**\n     * compile the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->assetsFunction('js');\\n\")\n            ->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->displayBlock('scripts');\\n\")\n        ;\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/node/StylesNode.php",
    "content": "<?php namespace Cms\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * StylesNode represents a \"styles\" node\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass StylesNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct($lineno)\n    {\n        parent::__construct([], [], $lineno);\n    }\n\n    /**\n     * compile the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->assetsFunction('css');\\n\")\n            ->write(\"yield \\$this->env->getExtension(\\Cms\\Twig\\Extension::class)->displayBlock('styles');\\n\")\n        ;\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/AjaxPartialTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\n/**\n * AjaxPartialTokenParser for the `{% ajaxPartial %}` Twig tag.\n *\n *     {% ajaxPartial \"sidebar\" %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass AjaxPartialTokenParser extends PartialTokenParser\n{\n    /**\n     * getTag name associated with this token parser\n     */\n    public function getTag()\n    {\n        return 'ajaxPartial';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/CacheTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\TokenParser\\AbstractTokenParser;\nuse Twig\\Node\\Expression\\Filter\\RawFilter;\nuse Cms\\Twig\\Node\\CacheNode;\nuse Twig\\Error\\SyntaxError;\nuse Twig\\Node\\PrintNode;\nuse Twig\\Node\\Node;\nuse Twig\\Token;\n\n/**\n * CacheTokenParser\n */\nclass CacheTokenParser extends AbstractTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return PartialNode\n     */\n    public function parse(Token $token): Node\n    {\n        $stream = $this->parser->getStream();\n        $key = $this->parser->parseExpression();\n\n        $ttl = null;\n        while ($stream->test(Token::NAME_TYPE)) {\n            $k = $stream->getCurrent()->getValue();\n            if (!in_array($k, ['ttl'], true)) {\n                throw new SyntaxError(sprintf('Unknown \"%s\" configuration.', $k), $stream->getCurrent()->getLine(), $stream->getSourceContext());\n            }\n\n            $stream->next();\n            $stream->expect(Token::OPERATOR_TYPE, '(');\n            $line = $stream->getCurrent()->getLine();\n            if ($stream->test(Token::PUNCTUATION_TYPE, ')')) {\n                throw new SyntaxError(sprintf('The \"%s\" modifier takes exactly one argument (0 given).', $k), $line, $stream->getSourceContext());\n            }\n\n            $arg = $this->parser->parseExpression();\n            if ($stream->test(Token::PUNCTUATION_TYPE, ',')) {\n                throw new SyntaxError(sprintf('The \"%s\" modifier takes exactly one argument (2 given).', $k), $line, $stream->getSourceContext());\n            }\n            $stream->expect(Token::PUNCTUATION_TYPE, ')');\n\n            if ($k === 'ttl') {\n                $ttl = $arg;\n            }\n        }\n\n        $stream->expect(Token::BLOCK_END_TYPE);\n        $body = $this->parser->subparse([$this, 'decideCacheEnd'], true);\n        $stream->expect(Token::BLOCK_END_TYPE);\n\n        $body = new CacheNode($key, $ttl, $body, $token->getLine());\n\n        return new PrintNode(new RawFilter($body), $token->getLine());\n    }\n\n    /**\n     * Determines if the token marks the end of the partial block.\n     */\n    public function decideCacheEnd(Token $token): bool\n    {\n        return $token->test('endcache');\n    }\n\n    /**\n     * Returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag(): string\n    {\n        return 'cache';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/ComponentTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Twig\\Error\\SyntaxError as TwigErrorSyntax;\nuse Cms\\Twig\\Node\\ComponentNode;\n\n/**\n * ComponentTokenParser for the `{% component %}` Twig tag.\n *\n *     {% component \"pluginComponent\" %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ComponentTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return TwigNode A TwigNode instance\n     */\n    public function parse(TwigToken $token)\n    {\n        $lineno = $token->getLine();\n        $stream = $this->parser->getStream();\n\n        $nodes = [];\n        $paramNames = [];\n\n        // Parse component name\n        $nodes['__component_name'] = $this->parser->parseExpression();\n\n        // Parse parameters\n        while (!$stream->test(TwigToken::BLOCK_END_TYPE)) {\n            $current = $stream->next();\n\n            if ($current->test(TwigToken::NAME_TYPE)) {\n                $paramName = $current->getValue();\n                $stream->expect(TwigToken::OPERATOR_TYPE, '=');\n                $nodes[$paramName] = $this->parser->parseExpression();\n                $paramNames[] = $paramName;\n            }\n            else {\n                throw new TwigErrorSyntax(\n                    sprintf('Invalid syntax in the component tag. Line %s', $lineno),\n                    $stream->getCurrent()->getLine(),\n                    $stream->getSourceContext()\n                );\n            }\n        }\n\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        // Pass nodes directly without wrapping inside 'nodes'\n        return new ComponentNode($nodes, $paramNames, $lineno, $this->getTag());\n    }\n\n    /**\n     * getTag name associated with this token parser.\n     * @return string The tag name\n     */\n    public function getTag()\n    {\n        return 'component';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/ContentTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Twig\\Error\\SyntaxError as TwigErrorSyntax;\nuse Cms\\Twig\\Node\\ContentNode;\n\n/**\n * ContentTokenParser for the `{% content %}` Twig tag.\n *\n * Examples:\n *\n *     {% content \"intro.htm\" %}\n *     {% content \"intro.md\" name='John' %}\n *     {% content \"intro/txt\" name='John', year=2013 %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ContentTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return ContentNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $lineno = $token->getLine();\n        $stream = $this->parser->getStream();\n\n        $nodes = [];\n        $paramNames = [];\n\n        // Parse content name (first argument)\n        $nodes['__content_name'] = $this->parser->parseExpression();\n\n        // Parse optional parameters\n        while (!$stream->test(TwigToken::BLOCK_END_TYPE)) {\n            $current = $stream->next();\n\n            if ($current->test(TwigToken::NAME_TYPE)) {\n                $paramName = $current->getValue();\n                $stream->expect(TwigToken::OPERATOR_TYPE, '=');\n                $nodes[$paramName] = $this->parser->parseExpression();\n                $paramNames[] = $paramName;\n            }\n            else {\n                throw new TwigErrorSyntax(\n                    sprintf('Invalid syntax in the content tag. Line %s', $lineno),\n                    $stream->getCurrent()->getLine(),\n                    $stream->getSourceContext()\n                );\n            }\n        }\n\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        // Pass individual nodes instead of wrapping in a 'nodes' array\n        return new ContentNode($nodes, $paramNames, $lineno, $this->getTag());\n    }\n\n    /**\n     * Returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'content';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/DefaultTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Cms\\Twig\\Node\\DefaultNode;\n\n/**\n * DefaultTokenParser for the `{% default %}` Twig tag.\n *\n * Example usage:\n *\n *     {% put head %}\n *         <link href=\"//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css\" rel=\"stylesheet\"/>\n *         {% default %}\n *     {% endput %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DefaultTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return DefaultNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $stream = $this->parser->getStream();\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        return new DefaultNode([], [], $token->getLine());\n    }\n\n    /**\n     * Gets the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'default';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/FlashTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Cms\\Twig\\Node\\FlashNode;\n\n/**\n * FlashTokenParser for the `{% flash %}` Twig tag.\n *\n * Example usage:\n *     {% flash %}\n *         {{ type }}: {{ message }}\n *     {% endflash %}\n *\n *     {% flash success %}\n *         {{ message }}\n *     {% endflash %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FlashTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return FlashNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $lineno = $token->getLine();\n        $stream = $this->parser->getStream();\n\n        // Default flash type is \"all\"\n        $name = 'all';\n\n        if ($stream->test(TwigToken::NAME_TYPE)) {\n            $name = $stream->next()->getValue();\n        }\n\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        // Parse body content\n        $body = $this->parser->subparse([$this, 'decideIfEnd'], true);\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        return new FlashNode($name, $body, $lineno, $this->getTag());\n    }\n\n    /**\n     * Determines if the token marks the end of the flash block.\n     */\n    public function decideIfEnd(TwigToken $token)\n    {\n        return $token->test(['endflash']);\n    }\n\n    /**\n     * Returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'flash';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/FrameworkTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Twig\\Error\\SyntaxError as TwigErrorSyntax;\nuse Cms\\Twig\\Node\\FrameworkNode;\n\n/**\n * FrameworkTokenParser for the `{% framework %}` Twig tag.\n *\n * Example usage:\n *     {% framework %}\n *     {% framework extras %}\n *     {% framework turbo %}\n *     {% framework extras turbo %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FrameworkTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return FrameworkNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $lineno = $token->getLine();\n        $stream = $this->parser->getStream();\n\n        $options = [];\n\n        while (!$stream->test(TwigToken::BLOCK_END_TYPE)) {\n            if ($stream->test(TwigToken::NAME_TYPE)) {\n                $options[] = strtolower(trim($stream->next()->getValue()));\n            }\n            else {\n                throw new TwigErrorSyntax(\n                    sprintf('Invalid syntax in the framework tag. Line %s', $lineno),\n                    $stream->getCurrent()->getLine(),\n                    $stream->getSourceContext()\n                );\n            }\n        }\n\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        return new FrameworkNode($options, $lineno, $this->getTag());\n    }\n\n    /**\n     * Returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'framework';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/MetaTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Cms\\Twig\\Node\\MetaNode;\n\n/**\n * MetaTokenParser for the `{% meta %}` Twig tag.\n *\n * Example usage:\n *\n *     {% meta %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MetaTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return MetaNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $stream = $this->parser->getStream();\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        return new MetaNode($token->getLine(), $this->getTag());\n    }\n\n    /**\n     * Returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'meta';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/PageTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Cms\\Twig\\Node\\PageNode;\n\n/**\n * PageTokenParser for the `{% page %}` Twig tag.\n *\n * Example usage:\n *\n *     {% page %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PageTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return PageNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $stream = $this->parser->getStream();\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        return new PageNode($token->getLine(), $this->getTag());\n    }\n\n    /**\n     * Returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'page';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/PartialTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Twig\\Error\\SyntaxError as TwigErrorSyntax;\nuse Cms\\Twig\\Node\\PartialNode;\n\n/**\n * PartialTokenParser for the `{% partial %}` Twig tag.\n *\n * Example usage:\n *\n *     {% partial \"sidebar\" %}\n *     {% partial \"sidebar\" name='John' %}\n *     {% partial \"sidebar\" name='John' year=2013 %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PartialTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return PartialNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $lineno = $token->getLine();\n        $stream = $this->parser->getStream();\n\n        $nodes = [];\n        $paramNames = [];\n        $hasBody = $hasOnly = $hasLazy = false;\n        $body = null;\n\n        $isAjax = $this->getTag() === 'ajaxPartial';\n\n        // Parse partial name (first argument)\n        $nodes['__partial_name'] = $this->parser->parseExpression();\n\n        // Parse optional parameters\n        while (!$stream->test(TwigToken::BLOCK_END_TYPE)) {\n            $current = $stream->next();\n\n            if ($current->test(TwigToken::NAME_TYPE, 'lazy') && !$stream->test(TwigToken::OPERATOR_TYPE, '=')) {\n                if (!$isAjax) {\n                    throw new TwigErrorSyntax(\n                        'Cannot use lazy mode with partial tag. Did you mean ajaxPartial?',\n                        $stream->getCurrent()->getLine(),\n                        $stream->getSourceContext()\n                    );\n                }\n                $hasLazy = true;\n                continue;\n            }\n\n            if ($current->test(TwigToken::NAME_TYPE, 'body') && !$stream->test(TwigToken::OPERATOR_TYPE, '=')) {\n                $hasBody = true;\n                continue;\n            }\n\n            if ($current->test(TwigToken::NAME_TYPE, 'only') && !$stream->test(TwigToken::OPERATOR_TYPE, '=')) {\n                $hasOnly = true;\n                continue;\n            }\n\n            if ($current->test(TwigToken::NAME_TYPE)) {\n                $paramName = $current->getValue();\n                $stream->expect(TwigToken::OPERATOR_TYPE, '=');\n                $nodes[$paramName] = $this->parser->parseExpression();\n                $paramNames[] = $paramName;\n            }\n            else {\n                throw new TwigErrorSyntax(\n                    sprintf('Invalid syntax in the partial tag. Line %s', $lineno),\n                    $stream->getCurrent()->getLine(),\n                    $stream->getSourceContext()\n                );\n            }\n        }\n\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        if ($hasBody) {\n            $body = $this->parser->subparse([$this, 'decidePartialEnd'], true);\n            $stream->expect(TwigToken::BLOCK_END_TYPE);\n        }\n\n        $options = [\n            'paramNames' => $paramNames,\n            'hasOnly' => $hasOnly,\n            'hasLazy' => $hasLazy,\n            'isAjax' => $isAjax\n        ];\n\n        return new PartialNode($nodes, $body, $options, $lineno, $this->getTag());\n    }\n\n    /**\n     * Determines if the token marks the end of the partial block.\n     */\n    public function decidePartialEnd(TwigToken $token)\n    {\n        return $token->test('endpartial');\n    }\n\n    /**\n     * Returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'partial';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/PlaceholderTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Twig\\Error\\SyntaxError as TwigErrorSyntax;\nuse Cms\\Twig\\Node\\PlaceholderNode;\n\n/**\n * PlaceholderTokenParser for the `{% placeholder %}` Twig tag.\n *\n * Example usage:\n *\n *     {% placeholder head %}\n *\n * Using default content:\n *\n *     {% placeholder head default %}\n *         <link href=\"//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css\" rel=\"stylesheet\"/>\n *     {% endplaceholder %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PlaceholderTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return PlaceholderNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $stream = $this->parser->getStream();\n        $name = $stream->expect(TwigToken::NAME_TYPE)->getValue();\n        $body = null;\n        $params = [];\n\n        if ($stream->test(TwigToken::NAME_TYPE, 'default')) {\n            $stream->next();\n            $params = $this->loadParams($stream);\n\n            $body = $this->parser->subparse([$this, 'decidePlaceholderEnd'], true);\n            $stream->expect(TwigToken::BLOCK_END_TYPE);\n        }\n        else {\n            $params = $this->loadParams($stream);\n        }\n\n        return new PlaceholderNode($body, $name, $params, $token->getLine(), $this->getTag());\n    }\n\n    /**\n     * Determines if the token marks the end of the placeholder block.\n     */\n    public function decidePlaceholderEnd(TwigToken $token)\n    {\n        return $token->test('endplaceholder');\n    }\n\n    /**\n     * Loads parameters from the stream.\n     */\n    protected function loadParams($stream)\n    {\n        $params = [];\n\n        while (!$stream->test(TwigToken::BLOCK_END_TYPE)) {\n            $paramName = $stream->expect(TwigToken::NAME_TYPE)->getValue();\n            $stream->expect(TwigToken::OPERATOR_TYPE, '=');\n            $params[$paramName] = $stream->expect(TwigToken::STRING_TYPE)->getValue();\n        }\n\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n        return $params;\n    }\n\n    /**\n     * Returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'placeholder';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/PropsTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Cms\\Twig\\Node\\PropsNode;\n\n/**\n * PropsTokenParser for the `{% props %}` Twig tag.\n *\n * Declares which parameters are props (component data) vs attributes\n * (HTML pass-through). Parameters not listed in props flow into\n * an `attributes` variable (ComponentAttributeBag).\n *\n * Example usage:\n *\n *     {% props {title: null, size: 'md'} %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PropsTokenParser extends TwigTokenParser\n{\n    /**\n     * parse a token and returns a node.\n     * @return PropsNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $lineno = $token->getLine();\n        $stream = $this->parser->getStream();\n\n        // Parse the hash expression: {title: null, size: 'md'}\n        $propsExpression = $this->parser->parseExpression();\n\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        return new PropsNode($propsExpression, $lineno, $this->getTag());\n    }\n\n    /**\n     * getTag returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'props';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/PutTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Node\\Nodes;\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Twig\\Error\\SyntaxError as TwigErrorSyntax;\nuse Cms\\Twig\\Node\\PutNode;\n\n/**\n * PutTokenParser for the `{% put %}` Twig tag.\n *\n * Example usage:\n *\n *     {% put head %}\n *         <link href=\"//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css\" rel=\"stylesheet\"/>\n *     {% endput %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PutTokenParser extends TwigTokenParser\n{\n    /**\n     * parse a token and returns a node.\n     * @return PutNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $lineno = $token->getLine();\n        $stream = $this->parser->getStream();\n        $names = $this->parseAssignmentExpression();\n\n        $capture = false;\n        $options = [];\n\n        if ($stream->nextIf(TwigToken::OPERATOR_TYPE, '=')) {\n            // Direct assignment mode\n            $values = $this->parseMultitargetExpression();\n            $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n            if (count($names) !== count($values)) {\n                throw new TwigErrorSyntax(\n                    'When using put, you must have the same number of variables and assignments.',\n                    $stream->getCurrent()->getLine(),\n                    $stream->getSourceContext()\n                );\n            }\n        }\n        else {\n            // Capture mode\n            $capture = true;\n\n            if (count($names) > 1) {\n                throw new TwigErrorSyntax(\n                    'When using put with a block, you cannot have multiple targets.',\n                    $stream->getCurrent()->getLine(),\n                    $stream->getSourceContext()\n                );\n            }\n\n            while (!$stream->test(TwigToken::BLOCK_END_TYPE)) {\n                $current = $stream->next();\n                if ($current->test(TwigToken::NAME_TYPE)) {\n                    $options[] = strtolower(trim($current->getValue()));\n                }\n                else {\n                    throw new TwigErrorSyntax(\n                        sprintf('Invalid syntax in the put tag. Line %s', $lineno),\n                        $stream->getCurrent()->getLine(),\n                        $stream->getSourceContext()\n                    );\n                }\n            }\n\n            $stream->expect(TwigToken::BLOCK_END_TYPE);\n            $values = $this->parser->subparse([$this, 'decidePutEnd'], true);\n\n            // Deprecated usage: {% endput overwrite %}\n            if ($stream->test(TwigToken::NAME_TYPE)) {\n                $options[] = $stream->next()->getValue();\n            }\n\n            $stream->expect(TwigToken::BLOCK_END_TYPE);\n        }\n\n        return new PutNode($capture, $names, $values, $options, $lineno, $this->getTag());\n    }\n\n    /**\n     * decidePutEnd determines if the token marks the end of the put block.\n     */\n    public function decidePutEnd(TwigToken $token)\n    {\n        return $token->test('endput');\n    }\n\n    /**\n     * getTag returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'put';\n    }\n\n    /**\n     * parseMultitargetExpression\n     */\n    protected function parseMultitargetExpression(): Nodes\n    {\n        $targets = [];\n\n        while (true) {\n            $targets[] = $this->parser->parseExpression();\n            if (!$this->parser->getStream()->nextIf(TwigToken::PUNCTUATION_TYPE, ',')) {\n                break;\n            }\n        }\n\n        return new Nodes($targets);\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/ScriptsTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Cms\\Twig\\Node\\ScriptsNode;\n\n/**\n * ScriptsTokenParser for the `{% scripts %}` Twig tag.\n *\n *     {% scripts %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ScriptsTokenParser extends TwigTokenParser\n{\n    /**\n     * parse a token and returns a node.\n     * @return \\Twig\\Node\\Node A Twig\\Node\\Node instance\n     */\n    public function parse(TwigToken $token)\n    {\n        $stream = $this->parser->getStream();\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n        return new ScriptsNode($token->getLine(), $this->getTag());\n    }\n\n    /**\n     * getTag name associated with this token parser.\n     * @return string The tag name\n     */\n    public function getTag()\n    {\n        return 'scripts';\n    }\n}\n"
  },
  {
    "path": "modules/cms/twig/tokenparser/StylesTokenParser.php",
    "content": "<?php namespace Cms\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Cms\\Twig\\Node\\StylesNode;\n\n/**\n * StylesTokenParser for the `{% styles %}` Twig tag.\n *\n *     {% styles %}\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass StylesTokenParser extends TwigTokenParser\n{\n    /**\n     * parse a token and returns a node.\n     * @return Twig\\Node\\Node A Twig\\Node\\Node instance\n     */\n    public function parse(TwigToken $token)\n    {\n        $stream = $this->parser->getStream();\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n        return new StylesNode($token->getLine(), $this->getTag());\n    }\n\n    /**\n     * getTag name associated with this token parser.\n     * @return string The tag name\n     */\n    public function getTag()\n    {\n        return 'styles';\n    }\n}\n"
  },
  {
    "path": "modules/cms/views/404.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\">\n    <head>\n        <title><?= Lang::get('cms::lang.page.not_found.label') ?></title>\n        <link href=\"<?= Url::asset('/modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <h1><i class=\"icon-chain-broken warning\"></i> <?= Lang::get('cms::lang.page.not_found.label') ?></h1>\n            <p class=\"lead\"><?= Lang::get('cms::lang.page.not_found.help') ?></p>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/cms/views/error.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\">\n    <head>\n        <title><?= Lang::get('cms::lang.page.custom_error.label') ?></title>\n        <link href=\"<?= Url::asset('/modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <h1><i class=\"icon-power-off warning\"></i> <?= Lang::get('cms::lang.page.custom_error.label') ?></h1>\n            <p class=\"lead\"><?= Lang::get('cms::lang.page.custom_error.help') ?></p>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/cms/vuecomponents/AssetEditor.php",
    "content": "<?php namespace Cms\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * CMS asset editor Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass AssetEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'cms-editor-component-asset-editor';\n\n    protected $require = [\n        \\Backend\\VueComponents\\MonacoEditor::class\n    ];\n}\n"
  },
  {
    "path": "modules/cms/vuecomponents/CmsComponentListPopup.php",
    "content": "<?php namespace Cms\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * CMS component list popup - Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsComponentListPopup extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'cms-component-cmscomponentlistpopup';\n}\n"
  },
  {
    "path": "modules/cms/vuecomponents/CmsObjectComponentList.php",
    "content": "<?php namespace Cms\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * CmsObjectComponentList is a Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsObjectComponentList extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'cms-component-cmsobjectcomponentlist';\n\n    /**\n     * registerSubcomponents\n     */\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('component');\n    }\n}\n"
  },
  {
    "path": "modules/cms/vuecomponents/ContentEditor.php",
    "content": "<?php namespace Cms\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * CMS content block editor Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ContentEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'cms-editor-component-content-editor';\n\n    protected $require = [\n        \\Backend\\VueComponents\\MonacoEditor::class,\n        \\Cms\\VueComponents\\CmsObjectComponentList::class,\n        \\Backend\\VueComponents\\RichEditorDocumentConnector::class,\n        \\Backend\\VueComponents\\DocumentMarkdownEditor::class\n    ];\n}\n"
  },
  {
    "path": "modules/cms/vuecomponents/LayoutEditor.php",
    "content": "<?php namespace Cms\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * CMS layout editor Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass LayoutEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'cms-editor-component-layout-editor';\n\n    protected $require = [\n        \\Backend\\VueComponents\\MonacoEditor::class,\n        \\Cms\\VueComponents\\CmsObjectComponentList::class\n    ];\n}\n"
  },
  {
    "path": "modules/cms/vuecomponents/PageEditor.php",
    "content": "<?php namespace Cms\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * CMS page editor Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PageEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'cms-editor-component-page-editor';\n\n    protected $require = [\n        \\Backend\\VueComponents\\MonacoEditor::class,\n        \\Cms\\VueComponents\\CmsObjectComponentList::class\n    ];\n}\n"
  },
  {
    "path": "modules/cms/vuecomponents/PartialEditor.php",
    "content": "<?php namespace Cms\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * CMS partial editor Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PartialEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'cms-editor-component-partial-editor';\n\n    protected $require = [\n        \\Backend\\VueComponents\\MonacoEditor::class,\n        \\Cms\\VueComponents\\CmsObjectComponentList::class\n    ];\n}\n"
  },
  {
    "path": "modules/cms/vuecomponents/asseteditor/assets/js/asseteditor.js",
    "content": "import { CmsDocumentComponentBase } from '../../../../assets/js/cms.editor.extension.documentcomponent.base.js';\nimport EditorModelDefinition from '../../../../../backend/vuecomponents/monacoeditor/assets/js/modeldefinition.js';\n\nexport default {\n    extends: CmsDocumentComponentBase,\n    data: function() {\n        const defMarkup = new EditorModelDefinition(\n            'html',\n            this.trans('cms::lang.content.editor_content'),\n            {},\n            'content',\n            'backend-icon-background monaco-document html'\n        );\n\n        defMarkup.setModelTags(['cms-asset-contents']);\n\n        return {\n            documentData: {\n                content: '',\n                components: []\n            },\n            documentSettingsPopupTitle: this.trans('cms::lang.editor.asset'),\n            documentDeletedMessage: this.trans('cms::lang.asset.deleted'),\n            documentTitleProperty: 'fileName',\n            codeEditorModelDefinitions: [defMarkup],\n            defMarkup: defMarkup,\n            autoUpdateNavigatorNodeLabel: false\n        };\n    },\n    computed: {\n        toolbarElements: function computeToolbarElements() {\n            return this.postProcessToolbarElements(\n                [\n                    {\n                        type: 'button',\n                        icon: 'icon-save-cloud',\n                        label: this.trans('backend::lang.form.save'),\n                        hotkey: 'ctrl+s, cmd+s',\n                        tooltip: this.trans('backend::lang.form.save'),\n                        tooltipHotkey: '⌃S, ⌘S',\n                        command: 'save'\n                    },\n                    {\n                        type: 'button',\n                        icon: 'icon-settings',\n                        label: this.trans('editor::lang.common.settings'),\n                        command: 'settings',\n                        hidden: !this.hasSettingsForm\n                    },\n                    {\n                        type: 'separator'\n                    },\n                    {\n                        type: 'button',\n                        icon: 'icon-info-circle',\n                        label: this.trans('cms::lang.editor.info'),\n                        command: 'show-template-info',\n                        disabled: this.isNewDocument\n                    },\n                    {\n                        type: 'separator'\n                    },\n                    {\n                        type: 'button',\n                        icon: 'icon-delete',\n                        disabled: this.isNewDocument,\n                        command: 'delete',\n                        hotkey: 'shift+option+d',\n                        tooltip: this.trans('backend::lang.form.delete'),\n                        tooltipHotkey: '⇧⌥D'\n                    },\n                    {\n                        type: 'button',\n                        icon: this.documentHeaderCollapsed ? 'icon-angle-down' : 'icon-angle-up',\n                        command: 'document:toggleToolbar',\n                        fixedRight: true,\n                        tooltip: this.trans('editor::lang.common.toggle_document_header')\n                    }\n                ],\n                true // No database template features\n            );\n        }\n    },\n    methods: {\n        getRootProperties: function() {\n            return ['fileName', 'content'];\n        },\n\n        getMainUiDocumentProperties: function getMainUiDocumentProperties() {\n            return ['fileName', 'content'];\n        },\n\n        updateNavigatorNodeUserData: function updateNavigatorNodeUserData(title) {\n            this.documentNavigatorNode.userData.filename = this.documentMetadata.fileName;\n            this.documentNavigatorNode.userData.path = this.documentMetadata.navigatorPath;\n        },\n\n        getDocumentSavedMessage: function getDocumentSavedMessage(responseData) {\n            return this.trans('cms::lang.asset.saved');\n        },\n\n        documentLoaded: function documentLoaded(data) {\n            if (this.$refs.editor) {\n                this.$refs.editor.updateValue(this.defMarkup, this.documentData.content);\n                this.$refs.editor.updateLanguage(this.defMarkup, this.getDocumentLanguage(this.documentData.fileName));\n                this.$refs.editor.setModelCustomAttribute(this.defMarkup, 'filePath', this.documentData.fileName);\n            }\n            else {\n                this.defMarkup.setModelCustomAttribute('filePath', this.documentData.fileName);\n            }\n        },\n\n        documentSaved: function documentSaved(data, prevData) {\n            if (this.$refs.editor) {\n                this.$refs.editor.updateLanguage(this.defMarkup, this.getDocumentLanguage(this.documentData.fileName));\n            }\n\n            if (prevData && prevData.fileName != data.fileName) {\n                this.store.refreshExtensionNavigatorNodes(this.namespace, this.documentType);\n                this.$refs.editor.setModelCustomAttribute(this.defMarkup, 'filePath', data.fileName);\n            }\n        },\n\n        getDocumentLanguage: function getDocumentLanguage(fileName) {\n            if (!fileName) {\n                return 'plaintext';\n            }\n\n            if (fileName.endsWith('.css')) {\n                return 'css';\n            }\n\n            if (fileName.endsWith('.js')) {\n                return 'javascript';\n            }\n\n            if (fileName.endsWith('.less')) {\n                return 'less';\n            }\n\n            if (fileName.endsWith('.sass') || fileName.endsWith('.scss')) {\n                return 'scss';\n            }\n\n            return 'plaintext';\n        },\n\n        documentCreatedOrLoaded: function documentCreatedOrLoaded() {\n            this.defMarkup.setHolderObject(this.documentData);\n        },\n\n        monacoLoaded: function monacoLoaded() {\n            this.$refs.editor.updateLanguage(this.defMarkup, this.getDocumentLanguage(this.documentData.fileName));\n            this.$refs.editor.setModelCustomAttribute(this.defMarkup, 'filePath', this.documentData.fileName);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/cms/vuecomponents/asseteditor/partials/_asseteditor.php",
    "content": "<backend-document\n    :header-collapsed=\"documentHeaderCollapsed\"\n    :full-screen=\"documentFullScreen\"\n    :loading=\"initializing\"\n    :processing=\"processing\"\n    :error-loading-document=\"errorLoadingDocument\"\n    error-loading-document-header=\"<?= e(trans('cms::lang.editor.error_loading_header')) ?>\"\n    container-css-class=\"fill-container\"\n>\n    <template v-slot:header>\n        <backend-document-header\n            title-property=\"fileName\"\n            ref=\"documentHeader\"\n            :data=\"documentData\"\n            :disabled=\"processing\"\n        ></backend-document-header>\n    </template>\n\n    <template v-slot:toolbar>\n        <backend-document-toolbar\n            :elements=\"toolbarElements\"\n            @command=\"onToolbarCommand\"\n            :disabled=\"processing\"\n        ></backend-document-toolbar>\n    </template>\n\n    <template v-slot:content>\n        <div class=\"flex-layout-column fill-container\">\n            <div class=\"flex-layout-item stretch editor-panel relative\">\n                <backend-monacoeditor\n                    ref=\"editor\"\n                    container-css-class=\"fill-container\"\n                    :model-definitions=\"codeEditorModelDefinitions\"\n                    @monacoloaded=\"onMonacoLoaded\"\n                    @dispose=\"onMonacoDispose\"\n                    @contextmenu=\"onEditorContextMenu\"\n                    @filtersupportedactions=\"onEditorFilterSupportedActions\"\n                >\n                </backend-monacoeditor>\n            </div>\n\n            <editor-component-editorconflictresolver\n                ref=\"conflictResolver\"\n            ></editor-component-editorconflictresolver>\n        </div>\n    </template>\n</backend-document>"
  },
  {
    "path": "modules/cms/vuecomponents/cmscomponentlistpopup/assets/css/cmscomponentlistpopup.css",
    "content": ".cms-component-list-popup-treeview {\n    .component-backend-treeview {\n        &,\n        .scrollable-panel-container {\n            background-color: var(--oc-popup-bg);\n        }\n\n        &,\n        .treeview-search-control {\n            border-bottom-left-radius: 8px;\n            border-bottom-right-radius: 8px;\n        }\n    }\n\n    ul ul ul {\n        li {\n            .item-label-outer-container:hover:before {\n                display: none !important;\n            }\n\n            .item-label-container {\n                cursor: pointer !important;\n                padding: 0px 5px 5px;\n                background: var(--oc-editor-bg);\n                margin-bottom: 5px;\n                border-radius: 4px;\n\n                .node-label + .node-label {\n                    white-space: normal;\n                    line-height: 150%;\n                    margin-top: -3px;\n                    font-size: 12px;\n                }\n\n                &:hover {\n                    background: var(--bs-primary);\n                    .node-label {\n                        color: white;\n                    }\n                }\n            }\n\n            &:last-child {\n                .item-label-container {\n                    margin-bottom: 0;\n                }\n            }\n        }\n    }\n}\n\n.cms-component-ghost-image-container {\n    top: 0;\n    left: 0;\n    z-index: 0;\n    position: absolute;\n\n    &.snapshot {\n        z-index: 1;\n    }\n}\n"
  },
  {
    "path": "modules/cms/vuecomponents/cmscomponentlistpopup/assets/js/cmscomponentlistpopup.js",
    "content": "export default {\n    props: {\n        components: Array\n    },\n    data: function() {\n        return {\n            visible: false\n        };\n    },\n    computed: {\n        componentListNodes: function computeComponentListNodes() {\n            return [\n                {\n                    label: 'Components',\n                    uniqueKey: 'components',\n                    nodes: $.oc.editor.store.getExtension('cms').componentList\n                }\n            ];\n        }\n    },\n    methods: {\n        show: function show() {\n            if (!this.$refs.modal.isVisible) {\n                this.$refs.modal.show();\n            }\n        },\n\n        hide: function hide() {\n            if (this.$refs.modal && this.$refs.modal.isVisible) {\n                this.$refs.modal.hide();\n            }\n        },\n\n        onNodeClick: function onNodeClick(ev) {\n            var nodeData = ev.treeviewData.nodeData;\n            if (!nodeData.userData || !nodeData.userData.componentData) {\n                return;\n            }\n\n            var componentData = $.oc.vueUtils.getCleanObject(nodeData.userData.componentData);\n            $.oc.editor.store.dispatchCommand('cms:add-component', componentData);\n        },\n\n        onCustomDragStart: function onCustomDragStart(ev) {\n            var nodeData = ev.treeNodeData,\n                componentData = JSON.stringify(nodeData.userData.componentData);\n\n            ev.dataTransfer.setData('application/october-component', componentData);\n            ev.dataTransfer.setData('text/plain', nodeData.uniqueKey);\n            ev.dataTransfer.dropEffect = 'move';\n            if (!/Edge/.test(navigator.userAgent)) {\n                $(this.$refs.componentDragHostImageContainer).addClass('snapshot');\n                ev.dataTransfer.setDragImage(this.$refs.componentDragHostImage, 0, 28);\n                $(this.$refs.componentDragHostImageContainer).removeClass('snapshot');\n            }\n        }\n    },\n    mounted: function mounted() {},\n    beforeUnmount: function beforeUnmount() {}\n};\n"
  },
  {
    "path": "modules/cms/vuecomponents/cmscomponentlistpopup/partials/_cmscomponentlistpopup.php",
    "content": "<div>\n    <backend-modal\n        ref=\"modal\"\n        unique-key=\"cms-component-list-popup\"\n        aria-labeled-by=\"cms-component-list-popup-title\"\n        content-css-class=\"flex-layout-column\"\n        :resize-min-height=\"350\"\n        :close-by-esc=\"false\"\n        :resizable=\"true\"\n        :is-modal=\"false\"\n        :base-z-index=\"500\"\n    >\n        <template v-slot:content>\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"cms-component-list-popup-title\"><?= e(trans('cms::lang.editor.component_list')) ?></h4>\n                <button\n                    @click.prevent=\"$refs.modal.hide()\"\n                    type=\"button\"\n                    class=\"btn-close\"\n                    aria-label=\"<?= __(\"Close\") ?>\"\n                    tabindex=\"0\"\n                ></button>\n            </div>\n            <div>\n                <p class=\"px-4 py-2 m-0 text-muted\">\n                    <small><?= e(trans('cms::lang.editor.component_list_description')) ?></small>\n                </p>\n            </div>\n            <div class=\"flex-layout-item stretch relative cms-component-list-popup-treeview\">\n                <div ref=\"componentDragHostImageContainer\" class=\"cms-component-ghost-image-container\">\n                    <img\n                        ref=\"componentDragHostImage\"\n                        src=\"<?= Url::asset('/modules/cms/assets/images/component-drag-image.svg') ?>\" />\n                </div>\n                <backend-treeview\n                    aria-label=\"<?= e(trans('cms::lang.editor.component_list')) ?>\"\n                    :sections=\"componentListNodes\"\n                    :searchable=\"true\"\n                    :hide-sections=\"true\"\n                    :container-css-class=\"'layout-fill-container'\"\n                    unique-key=\"cms-component-list-popup-tree\"\n                    @nonselectablenodeclick=\"onNodeClick\"\n                    @customdragstart=\"onCustomDragStart\"\n                    ref=\"treeView\"\n                >\n                </backend-treeview>\n            </div>\n        </template>\n    </backend-modal>\n</div>\n"
  },
  {
    "path": "modules/cms/vuecomponents/cmsobjectcomponentlist/assets/css/cmsobjectcomponentlist.css",
    "content": ".component-cms-object-component-list {\n    padding: 5px;\n\n    .components-scrollable {\n        width: 100%;\n        overflow: hidden;\n        border-radius: 2px;\n    }\n\n    ul {\n        list-style: none;\n        margin: 0;\n        padding: 0;\n        white-space: nowrap;\n        font-size: 0;\n\n        li {\n            margin: 0 5px 0 0;\n            position: relative;\n            background-color: var(--bs-secondary);\n            padding: 4px 26px 5px 10px;\n            border-radius: 20px;\n            color: white;\n\n            &.unknown {\n                background-color: #7f8c8d;\n                cursor: default;\n            }\n\n            &:not(.unknown):hover {\n                background-color: var(--bs-primary);\n            }\n\n            &:last-child {\n                margin-right: 0;\n            }\n\n            &.inspector-enabled {\n                cursor: pointer;\n            }\n\n            &.popover-highlight {\n                background-color: var(--bs-primary);\n            }\n\n            .component-header {\n                position: relative;\n                padding-left: 20px;\n\n                i {\n                    font-size: 14px;\n                    position: absolute;\n                    left: 0;\n                    top: 4px;\n                }\n            }\n\n            h3,\n            p {\n                font-size: 14px;\n                padding: 0;\n                margin: 0;\n            }\n\n            h3 {\n                overflow: hidden;\n                text-overflow: ellipsis;\n                line-height: 150%;\n                font-weight: 400;\n                color: white;\n\n                > span:first-child {\n                    display: none;\n                }\n                > span:last-child {\n                    display: block;\n                }\n            }\n\n            p {\n                white-space: normal;\n                margin-top: 5px;\n                font-weight: 100;\n                font-size: 12px;\n                display: none;\n\n                &.component-alias {\n                    position: absolute;\n                    bottom: 7px;\n                    left: 9px;\n                    right: 9px;\n                    text-overflow: ellipsis;\n                    overflow: hidden;\n                    font-weight: 600;\n                    white-space: nowrap;\n\n                    &:before {\n                        margin-right: 4px;\n                    }\n                }\n            }\n\n            .remove-component {\n                border: none;\n                background: transparent;\n                -webkit-appearance: none;\n                position: absolute;\n                outline: none;\n                width: 15px;\n                height: 15px;\n                right: 7px;\n                top: 9px;\n\n                &:before {\n                    position: absolute;\n                    left: 4px;\n                    top: 4px;\n                    width: 7px;\n                    height: 7px;\n                    background-position: -156px -10px;\n                    opacity: 0.5;\n                    display: block;\n                }\n\n                &:hover:before {\n                    opacity: 1;\n                }\n            }\n        }\n    }\n\n    .list-control-buttons {\n        padding-left: 15px;\n        font-size: 0;\n\n        .expand-collapse-button {\n            margin: 6px 4px 0 0;\n\n            &:before {\n                width: 16px;\n                height: 16px;\n                left: 2px;\n                top: 2px;\n            }\n\n            &:focus {\n                background: transparent !important;\n            }\n\n            &.expand-list {\n                &:before {\n                    background-position: -95px -15px;\n                }\n            }\n\n            &.collapse-list {\n                &:before {\n                    background-position: -116px -15px;\n                }\n            }\n        }\n    }\n\n    &.expanded {\n        ul li {\n            min-width: 170px;\n            max-width: 340px;\n            padding: 4px 26px 30px 10px;\n            border-radius: 4px;\n\n            p {\n                display: block;\n                overflow-wrap: anywhere;\n            }\n        }\n\n        h3 {\n            > span:first-child {\n                display: block;\n            }\n            > span:last-child {\n                display: none;\n            }\n        }\n    }\n}\n\ndiv.cms-transition-component-list-enter-active {\n    transition: opacity 0.3s;\n}\n\ndiv.cms-transition-component-list-enter {\n    opacity: 0;\n}\n\nli.cms-transition-component-list-enter-active {\n    transition: transform 0.3s, opacity 0.3s;\n}\n\nli.cms-transition-component-list-enter {\n    opacity: 0;\n    transform: scale(1.1);\n}\n\nbody.popover-open .remove-component {\n    pointer-events: none !important;\n}\n"
  },
  {
    "path": "modules/cms/vuecomponents/cmsobjectcomponentlist/assets/js/cmsobjectcomponentlist.js",
    "content": "export default {\n    props: {\n        components: Array\n    },\n    data: function() {\n        return {\n            expanded: false\n        };\n    },\n    computed: {\n        storageKey: function computeStorageKey() {\n            return 'cms-object-component-list-expanded';\n        }\n    },\n    methods: {\n        onToggleCollapse: function onToggleCollapse() {\n            this.expanded = !this.expanded;\n\n            if (this.expanded) {\n                localStorage.setItem(this.storageKey, '1');\n            }\n            else {\n                localStorage.removeItem(this.storageKey);\n            }\n        },\n\n        onRemoveComponentClick: function onRemoveComponentClick(index) {\n            this.$emit('remove', this.components[index]);\n            this.components.splice(index, 1);\n        },\n\n        onInspectorHiding: function(eventData, componentIndex) {\n            for (var index = 0; index < this.components.length; index++) {\n                if (index == componentIndex) {\n                    continue;\n                }\n\n                var alias = eventData.values.values['oc.alias'];\n                if (this.components[index].alias == alias) {\n                    eventData.ev.preventDefault();\n                    alert('The component alias \"' + alias + '\" is already used.');\n                    return;\n                }\n            }\n        }\n    },\n    mounted: function mounted() {\n        $(this.$refs.scrollable).dragScroll({\n            useDrag: true,\n            useNative: false,\n            noScrollClasses: true\n        });\n\n        this.expanded = localStorage.getItem(this.storageKey) == '1';\n    },\n    beforeUnmount: function beforeUnmount() {\n        $(this.$refs.scrollable).dragScroll('dispose');\n    }\n};\n"
  },
  {
    "path": "modules/cms/vuecomponents/cmsobjectcomponentlist/assets/js/component.js",
    "content": "export default {\n    props: {\n        component: Object\n    },\n    computed: {\n        isInspectable: function computeIsInspectable() {\n            if (this.component.inspectorEnabled) {\n                return true;\n            }\n        },\n\n        componentIcon: function computeComponentIcon() {\n            return this.component.icon;\n        },\n\n        inspectorTitle: function computeInspectorTitle() {\n            if (!this.component.inspectorEnabled) {\n                return null;\n            }\n\n            return this.component.title;\n        },\n\n        inspectorDescription: function computeInspectorDescription() {\n            if (!this.component.inspectorEnabled) {\n                return null;\n            }\n\n            return this.component.description;\n        },\n\n        inspectorConfig: function computeInspectorConfig() {\n            if (!this.component.inspectorEnabled) {\n                return null;\n            }\n\n            return this.component.propertyConfig;\n        },\n\n        inspectorClass: function computeInspectorClass() {\n            if (!this.component.inspectorEnabled) {\n                return null;\n            }\n\n            return this.component.className;\n        }\n    },\n    methods: {\n        onInspectorHidden: function onInspectorHidden(ev) {\n            var values = this.$refs.component_properties.value;\n            this.component.propertyValues = values;\n\n            values = JSON.parse(values);\n            this.component.alias = values['oc.alias'];\n            this.$emit('inspectorhidden');\n        },\n\n        onInspectorHiding: function onInspectorHiding(ev, values) {\n            this.$emit('inspectorhiding', { ev: ev, values: values });\n        },\n\n        onInspectorShowed: function onInspectorShowed() {\n            this.$emit('inspectorshowed');\n        }\n    },\n    mounted: function mounted() {\n        $(this.$el).on('hidden.oc.inspector', this.onInspectorHidden);\n        $(this.$el).on('showed.oc.inspector', this.onInspectorShowed);\n        $(this.$el).on('hiding.oc.inspector', this.onInspectorHiding);\n    },\n    beforeUnmount: function beforeUnmount() {\n        $(this.$el).off('hidden.oc.inspector', this.onInspectorHidden);\n        $(this.$el).off('showed.oc.inspector', this.onInspectorShowed);\n        $(this.$el).off('hiding.oc.inspector', this.onInspectorHiding);\n    }\n};\n"
  },
  {
    "path": "modules/cms/vuecomponents/cmsobjectcomponentlist/partials/_cmsobjectcomponentlist.php",
    "content": "<div\n    class=\"component-cms-object-component-list flex-layout-row\"\n    :class=\"{expanded: expanded}\"\n>\n    <div class=\"components-scrollable flex-layout-item stretch\" ref=\"scrollable\">\n        <transition-group name=\"cms-transition-component-list\" class=\"flex-layout-row\" tag=\"ul\">\n            <template v-for=\"(component, index) in components\" :key=\"component.alias\">\n                <cms-component-cmsobjectcomponentlist-component\n                    v-if=\"!component.isHidden\"\n                    :component=\"component\"\n                    @removecomponent=\"onRemoveComponentClick(index)\"\n                    @inspectorhiding=\"onInspectorHiding($event, index)\"\n                    @inspectorhidden=\"$emit('inspectorhidden')\"\n                    @inspectorshowed=\"$emit('inspectorshowed')\"\n                ></cms-component-cmsobjectcomponentlist-component>\n            </template>\n        </transition-group>\n    </div>\n    <div class=\"flex-layout-item fix list-control-buttons\">\n        <button\n            class=\"expand-collapse-button editor-icon-button backend-icon-background-pseudo\"\n            :class=\"{'expand-list': !expanded, 'collapse-list': expanded}\" \n            title=\"<?= e(trans('cms::lang.component.expand_or_collapse')) ?>\"\n            @click.prevent=\"onToggleCollapse\"\n        ><?= e(trans('cms::lang.component.expand_or_collapse')) ?></button>\n    </div>\n</div>"
  },
  {
    "path": "modules/cms/vuecomponents/cmsobjectcomponentlist/partials/_component.php",
    "content": "<li\n    class=\"flex-layout-item\"\n    :class=\"{'unknown': component.isUnknownComponent, 'inspector-enabled': component.inspectorEnabled}\"\n    :data-inspectable=\"isInspectable\"\n    :data-inspector-title=\"inspectorTitle\"\n    :data-inspector-description=\"inspectorDescription\"\n    :data-inspector-config=\"inspectorConfig\"\n    :data-inspector-class=\"inspectorClass\"\n    data-inspector-external-parameters=\"true\"\n>\n    <div class=\"component-header\">\n        <i :class=\"componentIcon\"></i>\n        <h3>\n            <span v-text=\"component.title\"></span>\n            <span v-text=\"component.alias\"></span>\n        </h3>\n    </div>\n    <p v-text=\"component.description\"></p>\n    <p class=\"component-alias oc-icon-code\" v-text=\"component.alias\"></p>\n    <button\n        class=\"backend-icon-background-pseudo remove-component\"\n        title=\"<?= e(trans('cms::lang.component.remove')) ?>\"\n        @click.stop.prevent=\"$emit('removecomponent')\"\n    ></button>\n\n    <input\n        type=\"hidden\"\n        ref=\"component_properties\"\n        data-inspector-values\n        v-bind:value=\"component.propertyValues\"\n    />\n</li>"
  },
  {
    "path": "modules/cms/vuecomponents/contenteditor/assets/js/contenteditor.js",
    "content": "import { CmsDocumentComponentBase } from '../../../../assets/js/cms.editor.extension.documentcomponent.base.js';\nimport EditorModelDefinition from '../../../../../backend/vuecomponents/monacoeditor/assets/js/modeldefinition.js';\n\nexport default {\n    extends: CmsDocumentComponentBase,\n    data: function() {\n        const defMarkup = new EditorModelDefinition(\n            'html',\n            this.trans('cms::lang.content.editor_content'),\n            {},\n            'markup',\n            'backend-icon-background monaco-document html'\n        );\n\n        return {\n            documentData: {\n                markup: '',\n                components: []\n            },\n            documentSettingsPopupTitle: this.trans('cms::lang.editor.content'),\n            documentTitleProperty: 'fileName',\n            codeEditorModelDefinitions: [defMarkup],\n            savedDocumentLanguage: '',\n            defMarkup: defMarkup,\n            toolbarExtensionPoint: []\n        };\n    },\n    computed: {\n        toolbarElements: function computeToolbarElements() {\n            return this.postProcessToolbarElements([\n                {\n                    type: 'button',\n                    icon: 'icon-save-cloud',\n                    label: this.trans('backend::lang.form.save'),\n                    hotkey: 'ctrl+s, cmd+s',\n                    tooltip: this.trans('backend::lang.form.save'),\n                    tooltipHotkey: '⌃S, ⌘S',\n                    command: 'save'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-settings',\n                    label: this.trans('editor::lang.common.settings'),\n                    command: 'settings',\n                    hidden: !this.hasSettingsForm\n                },\n                {\n                    type: 'separator'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-info-circle',\n                    label: this.trans('cms::lang.editor.info'),\n                    command: 'show-template-info',\n                    disabled: this.isNewDocument\n                },\n                {\n                    type: 'separator',\n                    visibilityTag: 'hide-for-direct-document'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-delete',\n                    disabled: this.isNewDocument,\n                    command: 'delete',\n                    hotkey: 'shift+option+d',\n                    tooltip: this.trans('backend::lang.form.delete'),\n                    tooltipHotkey: '⇧⌥D'\n                },\n                this.toolbarExtensionPoint,\n                {\n                    type: 'button',\n                    icon: this.documentHeaderCollapsed ? 'icon-angle-down' : 'icon-angle-up',\n                    command: 'document:toggleToolbar',\n                    fixedRight: true,\n                    tooltip: this.trans('editor::lang.common.toggle_document_header')\n                }\n            ]);\n        },\n\n        isRicheditorDocument: function computeIsRicheditorDocument() {\n            return this.savedDocumentLanguage === 'richeditor';\n        },\n\n        isMarkdownDocument: function isMarkdownDocument() {\n            return this.savedDocumentLanguage === 'markdown';\n        }\n    },\n    methods: {\n        getRootProperties: function() {\n            return ['components', 'fileName', 'markup'];\n        },\n\n        getMainUiDocumentProperties: function getMainUiDocumentProperties() {\n            return ['fileName', 'markup', 'description', 'components'];\n        },\n\n        updateNavigatorNodeUserData: function updateNavigatorNodeUserData(title) {\n            this.documentNavigatorNode.userData.filename = this.documentMetadata.path;\n            this.documentNavigatorNode.userData.path = this.documentMetadata.navigatorPath;\n        },\n\n        updateDocumentLanguage: function updateDocumentLanguage() {\n            this.savedDocumentLanguage = this.getDocumentLanguage(this.documentData.fileName);\n            this.$refs.editor.updateLanguage(this.defMarkup, this.savedDocumentLanguage);\n        },\n\n        documentLoaded: function documentLoaded(data) {\n            if (this.$refs.editor) {\n                this.$refs.editor.updateValue(this.defMarkup, this.documentData.markup);\n                this.updateDocumentLanguage();\n            }\n        },\n\n        documentSaved: function documentSaved() {\n            if (this.$refs.editor) {\n                this.updateDocumentLanguage();\n            }\n        },\n\n        getDocumentLanguage: function getDocumentLanguage(fileName) {\n            if (!fileName) {\n                return 'html';\n            }\n\n            if (fileName.endsWith('.txt')) {\n                return 'plaintext';\n            }\n\n            if (fileName.endsWith('.html')) {\n                return 'richeditor';\n            }\n\n            if (fileName.endsWith('.md')) {\n                return 'markdown';\n            }\n\n            return 'html';\n        },\n\n        documentCreatedOrLoaded: function documentCreatedOrLoaded() {\n            this.defMarkup.setHolderObject(this.documentData);\n        },\n\n        monacoLoaded: function monacoLoaded() {\n            this.updateDocumentLanguage();\n        },\n\n        onParentTabSelected: function onParentTabSelected() {\n            if (this.$refs.editor) {\n                this.$nextTick(() => this.$refs.editor.layout());\n            }\n\n            if (this.$refs.markdownEditor) {\n                this.$nextTick(() => this.$refs.markdownEditor.refresh());\n            }\n        }\n    },\n    watch: {\n        isRicheditorDocument: function watchIsHtmlDocument(value) {\n            if (!value) {\n                this.toolbarExtensionPoint = [];\n            }\n        },\n\n        isMarkdownDocument: function watchIsMarkdownDocument(value) {\n            if (!value) {\n                this.toolbarExtensionPoint = [];\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/cms/vuecomponents/contenteditor/partials/_contenteditor.php",
    "content": "<backend-document\n    :header-collapsed=\"documentHeaderCollapsed\"\n    :full-screen=\"documentFullScreen\"\n    :loading=\"initializing\"\n    :processing=\"processing\"\n    :error-loading-document=\"errorLoadingDocument\"\n    error-loading-document-header=\"<?= e(trans('cms::lang.editor.error_loading_header')) ?>\"\n    container-css-class=\"fill-container\"\n>\n    <template v-slot:header>\n        <backend-document-header\n            title-property=\"fileName\"\n            ref=\"documentHeader\"\n            :data=\"documentData\"\n            :disabled=\"isDirectDocumentMode || processing\"\n            :document-icon=\"directDocumentIcon\"\n            :show-close-icon=\"isDirectDocumentMode\"\n            @documentcloseclick=\"onDocumentCloseClick\"\n        ></backend-document-header>\n    </template>\n\n    <template v-slot:toolbar>\n        <backend-document-toolbar\n            :elements=\"toolbarElements\"\n            @command=\"onToolbarCommand\"\n            :disabled=\"processing\"\n        ></backend-document-toolbar>\n    </template>\n\n    <template v-slot:content>\n        <div class=\"flex-layout-column fill-container\">\n            <div class=\"flex-layout-item stretch editor-panel relative\">\n                <backend-monacoeditor\n                    v-show=\"!isRicheditorDocument && !isMarkdownDocument\"\n                    ref=\"editor\"\n                    container-css-class=\"fill-container\"\n                    :model-definitions=\"codeEditorModelDefinitions\"\n                    @monacoloaded=\"onMonacoLoaded\"\n                    @dispose=\"onMonacoDispose\"\n                    @contextmenu=\"onEditorContextMenu\"\n                    @filtersupportedactions=\"onEditorFilterSupportedActions\"\n                >\n                </backend-monacoeditor>\n\n                <backend-richeditor-document-connector\n                    :allow-resizing=\"true\"\n                    :toolbar-container=\"toolbarExtensionPoint\"\n                    :use-media-manager=\"editorUserData.useMediaManager\"\n                    unique-key=\"content-html-editor\"\n                    container-css-class=\"fill-container\"\n                    v-if=\"isRicheditorDocument\"\n                >\n                    <backend-richeditor\n                        v-model=\"documentData.markup\"\n                    >\n                    </backend-richeditor>\n                </backend-richeditor-document-connector>\n\n                <backend-document-markdowneditor\n                    v-if=\"isMarkdownDocument\"\n                    v-model=\"documentData.markup\"\n                    ref=\"markdownEditor\"\n                    container-css-class=\"fill-container\"\n                    :toolbar-container=\"toolbarExtensionPoint\"\n                    :use-media-manager=\"editorUserData.useMediaManager\"\n                >\n                </backend-document-markdowneditor>\n            </div>\n\n            <editor-component-editorconflictresolver\n                ref=\"conflictResolver\"\n            ></editor-component-editorconflictresolver>\n        </div>\n    </template>\n</backend-document>"
  },
  {
    "path": "modules/cms/vuecomponents/layouteditor/assets/js/layouteditor.js",
    "content": "import { CmsDocumentComponentBase } from '../../../../assets/js/cms.editor.extension.documentcomponent.base.js';\nimport EditorModelDefinition from '../../../../../backend/vuecomponents/monacoeditor/assets/js/modeldefinition.js';\n\nexport default {\n    extends: CmsDocumentComponentBase,\n    data: function() {\n        const defMarkup = new EditorModelDefinition(\n            'twig',\n            this.trans('cms::lang.page.editor_markup'),\n            {},\n            'markup',\n            'backend-icon-background monaco-document html'\n        );\n\n        defMarkup.setModelTags(['cms-markup']);\n\n        const defCode = new EditorModelDefinition(\n            'php',\n            this.trans('cms::lang.page.editor_code'),\n            {},\n            'code',\n            'backend-icon-background monaco-document php'\n        );\n\n        defCode.setAutoPrefix('<?php\\n\\n', /^\\s*\\<\\?(php)?\\n*/);\n\n        return {\n            documentData: {\n                markup: '',\n                code: '',\n                components: []\n            },\n            documentSettingsPopupTitle: this.trans('cms::lang.editor.layout'),\n            documentTitleProperty: 'fileName',\n            codeEditorModelDefinitions: [defMarkup, defCode],\n            defMarkup: defMarkup,\n            defCode: defCode\n        };\n    },\n    computed: {\n        toolbarElements: function computeToolbarElements() {\n            return this.postProcessToolbarElements([\n                {\n                    type: 'button',\n                    icon: 'icon-save-cloud',\n                    label: this.trans('backend::lang.form.save'),\n                    hotkey: 'ctrl+s, cmd+s',\n                    tooltip: this.trans('backend::lang.form.save'),\n                    tooltipHotkey: '⌃S, ⌘S',\n                    command: 'save'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-settings',\n                    label: this.trans('editor::lang.common.settings'),\n                    command: 'settings',\n                    hidden: !this.hasSettingsForm\n                },\n                this.customToolbarButtons,\n                {\n                    type: 'button',\n                    icon: 'icon-components',\n                    label: this.trans('cms::lang.editor.component_list'),\n                    command: 'show-components'\n                },\n                {\n                    type: 'separator'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-info-circle',\n                    label: this.trans('cms::lang.editor.info'),\n                    command: 'show-template-info',\n                    disabled: this.isNewDocument\n                },\n                {\n                    type: 'separator'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-delete',\n                    disabled: this.isNewDocument,\n                    command: 'delete',\n                    hotkey: 'shift+option+d',\n                    tooltip: this.trans('backend::lang.form.delete'),\n                    tooltipHotkey: '⇧⌥D'\n                },\n                {\n                    type: 'button',\n                    icon: this.documentHeaderCollapsed ? 'icon-angle-down' : 'icon-angle-up',\n                    command: 'document:toggleToolbar',\n                    fixedRight: true,\n                    tooltip: this.trans('editor::lang.common.toggle_document_header')\n                }\n            ]);\n        }\n    },\n    methods: {\n        getRootProperties: function() {\n            return ['components', 'fileName', 'markup', 'code'];\n        },\n\n        getMainUiDocumentProperties: function getMainUiDocumentProperties() {\n            return ['fileName', 'markup', 'description', 'code', 'components'];\n        },\n\n        updateNavigatorNodeUserData: function updateNavigatorNodeUserData(title) {\n            this.documentNavigatorNode.userData.filename = this.documentMetadata.path;\n            this.documentNavigatorNode.userData.path = this.documentMetadata.navigatorPath;\n        },\n\n        documentLoaded: function documentLoaded(data) {\n            if (this.$refs.editor) {\n                this.$refs.editor.updateValue(this.defMarkup, this.documentData.markup);\n                this.$refs.editor.updateValue(this.defCode, this.documentData.code);\n            }\n        },\n\n        documentCreatedOrLoaded: function documentCreatedOrLoaded() {\n            this.defMarkup.setHolderObject(this.documentData);\n            this.defCode.setHolderObject(this.documentData);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/cms/vuecomponents/layouteditor/partials/_layouteditor.php",
    "content": "<backend-document\n    :header-collapsed=\"documentHeaderCollapsed\"\n    :full-screen=\"documentFullScreen\"\n    :loading=\"initializing\"\n    :processing=\"processing\"\n    :error-loading-document=\"errorLoadingDocument\"\n    error-loading-document-header=\"<?= e(trans('cms::lang.editor.error_loading_header')) ?>\"\n    container-css-class=\"fill-container\"\n>\n    <template v-slot:header>\n        <backend-document-header\n            title-property=\"fileName\"\n            subtitle-property=\"description\"\n            subtitle-label=\"<?= e(trans('cms::lang.editor.description')) ?>\"\n            ref=\"documentHeader\"\n            :data=\"documentData\"\n            :disable-title-editor=\"isDirectDocumentMode\"\n            :document-icon=\"directDocumentIcon\"\n            :show-close-icon=\"isDirectDocumentMode\"\n            :disabled=\"processing\"\n            @documentcloseclick=\"onDocumentCloseClick\"\n        ></backend-document-header>\n    </template>\n\n    <template v-slot:toolbar>\n        <backend-document-toolbar\n            :elements=\"toolbarElements\"\n            @command=\"onToolbarCommand\"\n            :disabled=\"processing || toolbarDisabled\"\n        ></backend-document-toolbar>\n    </template>\n\n    <template v-slot:content>\n        <div class=\"flex-layout-column fill-container\">\n            <div class=\"flex-layout-item fix\">\n                <cms-component-cmsobjectcomponentlist\n                    v-if=\"hasVisibleComponents\"\n                    :components=\"documentData.components\"\n                    @remove=\"onComponentRemove\"\n                    @inspectorshowed=\"onInspectorShowed\"\n                    @inspectorhidden=\"onInspectorHidden\"\n                ></cms-component-cmsobjectcomponentlist>\n            </div>\n            <div class=\"flex-layout-item stretch editor-panel relative\">\n                <backend-monacoeditor\n                    ref=\"editor\"\n                    container-css-class=\"fill-container\"\n                    :model-definitions=\"codeEditorModelDefinitions\"\n                    :support-drag-events=\"true\"\n                    @monacoloaded=\"onMonacoLoaded\"\n                    @dispose=\"onMonacoDispose\"\n                    @drop=\"onEditorDragDrop\"\n                    @contextmenu=\"onEditorContextMenu\"\n                    @filtersupportedactions=\"onEditorFilterSupportedActions\"\n                    @customevent=\"onEditorCustomEvent\"\n                >\n                </backend-monacoeditor>\n            </div>\n\n            <editor-component-editorconflictresolver\n                ref=\"conflictResolver\"\n            ></editor-component-editorconflictresolver>\n        </div>\n    </template>\n</backend-document>"
  },
  {
    "path": "modules/cms/vuecomponents/pageeditor/assets/js/pageeditor.js",
    "content": "import { CmsDocumentComponentBase } from '../../../../assets/js/cms.editor.extension.documentcomponent.base.js';\nimport EditorModelDefinition from '../../../../../backend/vuecomponents/monacoeditor/assets/js/modeldefinition.js';\n\nexport default {\n    extends: CmsDocumentComponentBase,\n    data: function() {\n        const defMarkup = new EditorModelDefinition(\n            'twig',\n            this.trans('cms::lang.page.editor_markup'),\n            {},\n            'markup',\n            'backend-icon-background monaco-document html'\n        );\n\n        defMarkup.setModelTags(['cms-markup']);\n\n        const defCode = new EditorModelDefinition(\n            'php',\n            this.trans('cms::lang.page.editor_code'),\n            {},\n            'code',\n            'backend-icon-background monaco-document php'\n        );\n\n        defCode.setAutoPrefix('<?php\\n\\n', /^\\s*\\<\\?(php)?\\n*/);\n\n        return {\n            documentData: {\n                markup: '',\n                code: ''\n            },\n            documentSettingsPopupTitle: this.trans('cms::lang.editor.page'),\n            previewUrl: null,\n            codeEditorModelDefinitions: [defMarkup, defCode],\n            defMarkup: defMarkup,\n            defCode: defCode\n        };\n    },\n    computed: {\n        toolbarElements: function computeToolbarElements() {\n            return this.postProcessToolbarElements([\n                {\n                    type: 'button',\n                    icon: 'icon-save-cloud',\n                    label: this.trans('backend::lang.form.save'),\n                    hotkey: 'ctrl+s, cmd+s',\n                    tooltip: this.trans('backend::lang.form.save'),\n                    tooltipHotkey: '⌃S, ⌘S',\n                    command: 'save'\n                },\n                {\n                    type: 'button',\n                    target: '_blank',\n                    href: this.previewUrl,\n                    disabled: this.previewUrl === null,\n                    icon: 'icon-location-target',\n                    label: this.trans('cms::lang.editor.preview'),\n                    tooltip: this.trans('cms::lang.editor.preview'),\n                    hotkey: 'shift+ctrl+p, shift+cmd+p',\n                    tooltipHotkey: '⇧⌃P, ⇧⌘P',\n                    command: 'preview',\n                    visibilityTag: 'hide-for-direct-document'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-settings',\n                    label: this.trans('editor::lang.common.settings'),\n                    command: 'settings',\n                    hidden: !this.hasSettingsForm\n                },\n                this.customToolbarButtons,\n                {\n                    type: 'button',\n                    icon: 'icon-components',\n                    label: this.trans('cms::lang.editor.component_list'),\n                    command: 'show-components'\n                },\n                {\n                    type: 'separator'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-info-circle',\n                    label: this.trans('cms::lang.editor.info'),\n                    command: 'show-template-info',\n                    disabled: this.isNewDocument\n                },\n                {\n                    type: 'separator'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-delete',\n                    disabled: this.isNewDocument,\n                    command: 'delete',\n                    hotkey: 'shift+option+d',\n                    tooltip: this.trans('backend::lang.form.delete'),\n                    tooltipHotkey: '⇧⌥D'\n                },\n                {\n                    type: 'button',\n                    icon: this.documentHeaderCollapsed ? 'icon-angle-down' : 'icon-angle-up',\n                    command: 'document:toggleToolbar',\n                    fixedRight: true,\n                    tooltip: this.trans('editor::lang.common.toggle_document_header')\n                }\n            ]);\n        }\n    },\n    methods: {\n        getRootProperties: function() {\n            return ['components', 'fileName', 'markup', 'code'];\n        },\n\n        getMainUiDocumentProperties: function getMainUiDocumentProperties() {\n            return ['title', 'url', 'markup', 'code', 'components'];\n        },\n\n        documentLoaded: function documentLoaded(data) {\n            this.previewUrl = data.previewUrl;\n\n            if (this.$refs.editor) {\n                this.$refs.editor.updateValue(this.defMarkup, this.documentData.markup);\n                this.$refs.editor.updateValue(this.defCode, this.documentData.code);\n            }\n        },\n\n        documentCreatedOrLoaded: function documentCreatedOrLoaded() {\n            this.defMarkup.setHolderObject(this.documentData);\n            this.defCode.setHolderObject(this.documentData);\n        },\n\n        documentSaved: function documentSaved(data) {\n            if (data.previewUrl !== undefined) {\n                this.previewUrl = data.previewUrl;\n            }\n        },\n\n        updateNavigatorNodeUserData: function updateNavigatorNodeUserData(title) {\n            this.documentNavigatorNode.userData.title = title;\n            this.documentNavigatorNode.userData.url = this.documentData.url;\n            this.documentNavigatorNode.userData.filename = this.documentMetadata.path;\n            this.documentNavigatorNode.userData.path = this.documentMetadata.navigatorPath;\n        },\n\n        onTitleInput: function onTitleInput() {\n            // This flag is set until the document is first saved.\n            //\n            if (!this.documentMetadata.isNewDocument) {\n                return;\n            }\n\n            const path = oc.InputPresetEngine.formatValue(\n                {\n                    inputPresetType: 'file',\n                    inputPresetRemoveWords: true\n                },\n                this.documentData.title\n            );\n\n            // Vue 3: Direct assignment is reactive\n            this.documentData.fileName = path;\n        }\n    }\n};\n"
  },
  {
    "path": "modules/cms/vuecomponents/pageeditor/partials/_pageeditor.php",
    "content": "<backend-document\n    :header-collapsed=\"documentHeaderCollapsed\"\n    :full-screen=\"documentFullScreen\"\n    :loading=\"initializing\"\n    :processing=\"processing\"\n    :error-loading-document=\"errorLoadingDocument\"\n    error-loading-document-header=\"<?= e(trans('cms::lang.editor.error_loading_header')) ?>\"\n    container-css-class=\"fill-container\"\n>\n    <template v-slot:header>\n        <backend-document-header\n            title-property=\"title\"\n            :hide-subtitle-editor=\"isDirectDocumentMode\"\n            subtitle-property=\"url\"\n            subtitle-label=\"<?= e(trans('cms::lang.editor.url')) ?>\"\n            subtitle-preset-type=\"url\"\n            ref=\"documentHeader\"\n            :subtitle-preset-remove-words=\"true\"\n            :data=\"documentData\"\n            :is-new-document=\"isNewDocument\"\n            :document-icon=\"directDocumentIcon\"\n            :show-close-icon=\"isDirectDocumentMode\"\n            :disabled=\"processing\"\n            @documentcloseclick=\"onDocumentCloseClick\"\n            @titleinput=\"onTitleInput\"\n        ></backend-document-header>\n    </template>\n\n    <template v-slot:toolbar>\n        <backend-document-toolbar\n            :elements=\"toolbarElements\"\n            @command=\"onToolbarCommand\"\n            :disabled=\"processing || toolbarDisabled\"\n        ></backend-document-toolbar>\n    </template>\n\n    <template v-slot:content>\n        <div class=\"flex-layout-column fill-container\">\n            <div class=\"flex-layout-item fix\">\n                <transition name=\"cms-transition-component-list\">\n                    <cms-component-cmsobjectcomponentlist\n                        v-if=\"hasVisibleComponents\"\n                        :components=\"documentData.components\"\n                        @remove=\"onComponentRemove\"\n                        @inspectorshowed=\"onInspectorShowed\"\n                        @inspectorhidden=\"onInspectorHidden\"\n                    ></cms-component-cmsobjectcomponentlist>\n                </transition>\n            </div>\n            <div class=\"flex-layout-item stretch editor-panel relative\">\n                <backend-monacoeditor\n                    ref=\"editor\"\n                    container-css-class=\"fill-container\"\n                    :model-definitions=\"codeEditorModelDefinitions\"\n                    :support-drag-events=\"true\"\n                    @monacoloaded=\"onMonacoLoaded\"\n                    @dispose=\"onMonacoDispose\"\n                    @drop=\"onEditorDragDrop\"\n                    @contextmenu=\"onEditorContextMenu\"\n                    @filtersupportedactions=\"onEditorFilterSupportedActions\"\n                    @customevent=\"onEditorCustomEvent\"\n                >\n                </backend-monacoeditor>\n            </div>\n\n            <editor-component-editorconflictresolver\n                ref=\"conflictResolver\"\n            ></editor-component-editorconflictresolver>\n        </div>\n    </template>\n</backend-document>"
  },
  {
    "path": "modules/cms/vuecomponents/partialeditor/assets/js/partialeditor.js",
    "content": "import { CmsDocumentComponentBase } from '../../../../assets/js/cms.editor.extension.documentcomponent.base.js';\nimport EditorModelDefinition from '../../../../../backend/vuecomponents/monacoeditor/assets/js/modeldefinition.js';\n\nexport default {\n    extends: CmsDocumentComponentBase,\n    data: function() {\n        const defMarkup = new EditorModelDefinition(\n            'twig',\n            this.trans('cms::lang.page.editor_markup'),\n            {},\n            'markup',\n            'backend-icon-background monaco-document html'\n        );\n\n        defMarkup.setModelTags(['cms-markup']);\n\n        const defCode = new EditorModelDefinition(\n            'php',\n            this.trans('cms::lang.page.editor_code'),\n            {},\n            'code',\n            'backend-icon-background monaco-document php'\n        );\n\n        defCode.setAutoPrefix('<?php\\n\\n', /^\\s*\\<\\?(php)?\\n*/);\n\n        return {\n            documentData: {\n                markup: '',\n                code: ''\n            },\n            documentSettingsPopupTitle: this.trans('cms::lang.editor.partial'),\n            documentTitleProperty: 'fileName',\n            codeEditorModelDefinitions: [defMarkup, defCode],\n            defMarkup: defMarkup,\n            defCode: defCode\n        };\n    },\n    computed: {\n        toolbarElements: function computeToolbarElements() {\n            return this.postProcessToolbarElements([\n                {\n                    type: 'button',\n                    icon: 'icon-save-cloud',\n                    label: this.trans('backend::lang.form.save'),\n                    hotkey: 'ctrl+s, cmd+s',\n                    tooltip: this.trans('backend::lang.form.save'),\n                    tooltipHotkey: '⌃S, ⌘S',\n                    command: 'save'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-settings',\n                    label: this.trans('editor::lang.common.settings'),\n                    command: 'settings',\n                    hidden: !this.hasSettingsForm\n                },\n                this.customToolbarButtons,\n                {\n                    type: 'button',\n                    icon: 'icon-components',\n                    label: this.trans('cms::lang.editor.component_list'),\n                    command: 'show-components'\n                },\n                {\n                    type: 'separator'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-info-circle',\n                    label: this.trans('cms::lang.editor.info'),\n                    command: 'show-template-info',\n                    disabled: this.isNewDocument\n                },\n                {\n                    type: 'separator'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-delete',\n                    disabled: this.isNewDocument,\n                    command: 'delete',\n                    hotkey: 'shift+option+d',\n                    tooltip: this.trans('backend::lang.form.delete'),\n                    tooltipHotkey: '⇧⌥D'\n                },\n                {\n                    type: 'button',\n                    icon: this.documentHeaderCollapsed ? 'icon-angle-down' : 'icon-angle-up',\n                    command: 'document:toggleToolbar',\n                    fixedRight: true,\n                    tooltip: this.trans('editor::lang.common.toggle_document_header')\n                }\n            ]);\n        }\n    },\n    methods: {\n        getRootProperties: function() {\n            return ['components', 'fileName', 'markup', 'code'];\n        },\n\n        getMainUiDocumentProperties: function getMainUiDocumentProperties() {\n            return ['fileName', 'markup', 'code', 'components'];\n        },\n\n        updateNavigatorNodeUserData: function updateNavigatorNodeUserData(title) {\n            this.documentNavigatorNode.userData.filename = this.documentMetadata.path;\n            this.documentNavigatorNode.userData.path = this.documentMetadata.navigatorPath;\n        },\n\n        documentLoaded: function documentLoaded(data) {\n            if (this.$refs.editor) {\n                this.$refs.editor.updateValue(this.defMarkup, this.documentData.markup);\n                this.$refs.editor.updateValue(this.defCode, this.documentData.code);\n            }\n        },\n\n        documentCreatedOrLoaded: function documentCreatedOrLoaded() {\n            this.defMarkup.setHolderObject(this.documentData);\n            this.defCode.setHolderObject(this.documentData);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/cms/vuecomponents/partialeditor/partials/_partialeditor.php",
    "content": "<backend-document\n    :header-collapsed=\"documentHeaderCollapsed\"\n    :full-screen=\"documentFullScreen\"\n    :loading=\"initializing\"\n    :processing=\"processing\"\n    :error-loading-document=\"errorLoadingDocument\"\n    error-loading-document-header=\"<?= e(trans('cms::lang.editor.error_loading_header')) ?>\"\n    container-css-class=\"fill-container\"\n>\n    <template v-slot:header>\n        <backend-document-header\n            title-property=\"fileName\"\n            ref=\"documentHeader\"\n            :disabled=\"isDirectDocumentMode || processing\"\n            :data=\"documentData\"\n            :document-icon=\"directDocumentIcon\"\n            :show-close-icon=\"isDirectDocumentMode\"\n            @documentcloseclick=\"onDocumentCloseClick\"\n        ></backend-document-header>\n    </template>\n\n    <template v-slot:toolbar>\n        <backend-document-toolbar\n            :elements=\"toolbarElements\"\n            @command=\"onToolbarCommand\"\n            :disabled=\"processing || toolbarDisabled\"\n        ></backend-document-toolbar>\n    </template>\n\n    <template v-slot:content>\n        <div class=\"flex-layout-column fill-container\">\n            <div class=\"flex-layout-item fix\">\n                <cms-component-cmsobjectcomponentlist\n                    v-if=\"hasVisibleComponents\"\n                    :components=\"documentData.components\"\n                    @remove=\"onComponentRemove\"\n                    @inspectorshowed=\"onInspectorShowed\"\n                    @inspectorhidden=\"onInspectorHidden\"\n                ></cms-component-cmsobjectcomponentlist>\n            </div>\n            <div class=\"flex-layout-item stretch editor-panel relative\">\n                <backend-monacoeditor\n                    ref=\"editor\"\n                    container-css-class=\"fill-container\"\n                    :model-definitions=\"codeEditorModelDefinitions\"\n                    :support-drag-events=\"true\"\n                    @monacoloaded=\"onMonacoLoaded\"\n                    @dispose=\"onMonacoDispose\"\n                    @drop=\"onEditorDragDrop\"\n                    @contextmenu=\"onEditorContextMenu\"\n                    @filtersupportedactions=\"onEditorFilterSupportedActions\"\n                    @customevent=\"onEditorCustomEvent\"\n                >\n                </backend-monacoeditor>\n            </div>\n\n            <editor-component-editorconflictresolver\n                ref=\"conflictResolver\"\n            ></editor-component-editorconflictresolver>\n        </div>\n    </template>\n</backend-document>"
  },
  {
    "path": "modules/cms/widgets/PageLookup.php",
    "content": "<?php namespace Cms\\Widgets;\n\nuse Redirect;\nuse Cms\\Models\\PageLookupItem;\nuse Backend\\Classes\\WidgetBase;\nuse ValidationException;\n\n/**\n * PageLookup widget\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PageLookup extends WidgetBase\n{\n    use \\Backend\\Traits\\SearchableWidget;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string title text to display for the title of the popup list form\n     */\n    public $title = 'Select Page Link';\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @var string defaultAlias to identify this widget.\n     */\n    protected $defaultAlias = 'pagemanager';\n\n    /**\n     * @var \\Backend\\Classes\\WidgetBase selectWidget reference to the widget used for selecting a page.\n     */\n    protected $selectFormWidget;\n\n    /**\n     * bindToController\n     */\n    public function bindToController()\n    {\n        parent::bindToController();\n\n        if ($redirect = $this->handleResolverRedirect()) {\n            $this->controller->setResponse($redirect);\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'title',\n        ]);\n\n        if (post('pagelookup_flag')) {\n            $this->getSelectFormWidget();\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/pagelookup.js', ['type' => 'module']);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        return $this->makePartial('lookup_form');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['value'] = $this->getLoadValue();\n        $this->vars['title'] = $this->title;\n        $this->vars['selectWidget'] = $this->getSelectFormWidget();\n        $this->vars['includeTitle'] = $this->shouldIncludeTitle();\n        $this->vars['singleMode'] = $this->isSingleMode();\n        $this->vars['allowCustomUrl'] = $this->isAllowCustomUrl();\n        $this->vars['allowedTypes'] = $this->getAllowedTypes();\n        $this->vars['excludedTypes'] = $this->getExcludedTypes();\n    }\n\n    /**\n     * getLoadValue\n     */\n    public function getLoadValue()\n    {\n        return post('value');\n    }\n\n    /**\n     * onLoadPopup AJAX handler\n     */\n    public function onLoadPopup()\n    {\n        // Disable asset broadcasting\n        $this->controller->flushAssets();\n\n        return $this->render();\n    }\n\n    /**\n     * onSearchReference AJAX handler\n     */\n    public function onSearchReference()\n    {\n        // Disable asset broadcasting\n        $this->controller->flushAssets();\n\n        $this->setSearchTerm(post('term'));\n\n        return ['results' => $this->getMatches()];\n    }\n\n    /**\n     * onRefreshReference AJAX handler\n     */\n    public function onRefreshReference()\n    {\n        $data = post('PageLookupItem');\n        if (array_get($data, 'type') === 'url') {\n            $data['url'] = base64_decode(array_pull($data, 'reference', ''));\n        }\n\n        $form = $this->getSelectFormWidget();\n        $form->setFormValues($data);\n\n        return ['#'.$this->getId('selectWidget') => $form->render()];\n    }\n\n    /**\n     * onInsertReference\n     */\n    public function onInsertReference()\n    {\n        // Disable asset broadcasting\n        $this->controller->flushAssets();\n\n        $widget = $this->getSelectFormWidget();\n\n        $data = $widget->getSaveData();\n        $type = array_pull($data, 'type', '');\n        $reference = array_pull($data, 'reference', '');\n\n        // Validate\n        if (!$type) {\n            throw new ValidationException(['type' => 'Missing type!']);\n        }\n\n        if (!$widget->getField('cms_page')->hidden && !isset($data['cms_page'])) {\n            throw new ValidationException(['cms_page' => __('Please select a CMS page')]);\n        }\n\n        if (!$widget->getField('reference')->hidden && !$widget->getField('reference')->disabled && !$reference) {\n            throw new ValidationException(['reference' => __('Please select a page reference')]);\n        }\n\n        if ($type === 'url' && (!isset($data['url']) || !PageLookupItem::isValidUrl($data['url']))) {\n            throw new ValidationException(['reference' => __('Please enter a valid URL')]);\n        }\n\n        // Determine reference title\n        $model = $widget->model;\n        $model->type = $type;\n        $model->reference = $reference;\n\n        // Split params and data\n        $params = $data;\n        if ($title = $model->getReferenceLabel()) {\n            $params['title'] = $title;\n\n            if ($this->shouldIncludeTitle()) {\n                $data['title'] = $title;\n            }\n        }\n\n        return [\n            'type' => $type,\n            'reference' => $reference,\n            'params' => $params,\n            'link' => PageLookupItem::encodeSchema($type, $reference, $data)\n        ];\n    }\n\n    /**\n     * getSelectFormWidget\n     */\n    protected function getSelectFormWidget()\n    {\n        if ($this->selectFormWidget) {\n            return $this->selectFormWidget;\n        }\n\n        $model = new PageLookupItem;\n        $model->type = 'url';\n        $model->singleMode = $this->isSingleMode();\n        $model->allowCustomUrl = $this->isAllowCustomUrl();\n        $model->allowedTypes = $this->getAllowedTypes();\n        $model->excludedTypes = $this->getExcludedTypes();\n\n        if ($value = $this->getLoadValue()) {\n            $model = PageLookupItem::fromSchema($value) ?: $model;\n            $model->singleMode = $this->isSingleMode();\n            $model->allowCustomUrl = $this->isAllowCustomUrl();\n            $model->allowedTypes = $this->getAllowedTypes();\n            $model->excludedTypes = $this->getExcludedTypes();\n        }\n\n        $config = $this->makeConfig();\n        $config->model = $model;\n        $config->alias = $this->alias . 'Select';\n        $config->arrayName = 'PageLookupItem';\n\n        $form = $this->makeWidget(\\Backend\\Widgets\\Form::class, $config);\n        $form->bindEvent('form.extendFields', function() use ($form) {\n            $form->getField('search')->searchHandler($this->getEventHandler('onSearchReference'));\n        });\n        $form->bindToController();\n\n        return $this->selectFormWidget = $form;\n    }\n\n    /**\n     * getMatches\n     */\n    protected function getMatches()\n    {\n        $searchTerm = mb_strtolower($this->getSearchTerm());\n        if (!strlen($searchTerm)) {\n            return [];\n        }\n\n        $words = explode(' ', $searchTerm);\n\n        $iterator = function ($type, $references) use (&$iterator, $words) {\n            $typeMatches = [];\n\n            foreach ($references as $key => $referenceInfo) {\n                $title = is_array($referenceInfo) ? $referenceInfo['title'] : $referenceInfo;\n                if ($this->textMatchesSearch($words, $title)) {\n                    $typeMatches[] = [\n                        'id' => \"$type::$key\",\n                        'text' => $title\n                    ];\n                }\n\n                if (isset($referenceInfo['items']) && count($referenceInfo['items'])) {\n                    $typeMatches = array_merge($typeMatches, $iterator($type, $referenceInfo['items']));\n                }\n            }\n\n            return $typeMatches;\n        };\n\n        $types = [];\n        $item = new PageLookupItem;\n        $item->singleMode = $this->isSingleMode();\n        $item->allowCustomUrl = $this->isAllowCustomUrl();\n        $item->allowedTypes = $this->getAllowedTypes();\n        $item->excludedTypes = $this->getExcludedTypes();\n        foreach ($item->getTypeOptions() as $type => $typeTitle) {\n            $typeInfo = $item->getTypeInfo($type);\n            if (empty($typeInfo['references'])) {\n                continue;\n            }\n\n            $typeMatches = $iterator($type, $typeInfo['references']);\n            if (!empty($typeMatches)) {\n                $types[] = [\n                    'text' => __($typeTitle),\n                    'children' => $typeMatches\n                ];\n            }\n        }\n\n        if ($this->isAllowCustomUrl() && PageLookupItem::isValidUrl($searchTerm)) {\n            $types[] = [\n                'text' => __('URL'),\n                'children' => [[\n                    'id' => \"url::\".base64_encode($searchTerm),\n                    'text' => $searchTerm\n                ]]\n            ];\n        }\n\n        return $types;\n    }\n\n    /**\n     * handleResolverRedirect\n     */\n    protected function handleResolverRedirect()\n    {\n        $address = get('_lookup_link');\n        if (!$address || !is_string($address) || !str_starts_with($address, 'october://')) {\n            return;\n        }\n\n        $item = PageLookupItem::resolveFromSchema($address);\n        if (!$item) {\n            return;\n        }\n\n        return Redirect::to($item->url);\n    }\n\n    /**\n     * shouldIncludeTitle\n     */\n    protected function shouldIncludeTitle(): bool\n    {\n        return (bool) post('pagelookup_title');\n    }\n\n    /**\n     * isSingleMode\n     */\n    protected function isSingleMode(): bool\n    {\n        return (bool) post('pagelookup_single');\n    }\n\n    /**\n     * isAllowCustomUrl\n     */\n    protected function isAllowCustomUrl(): bool\n    {\n        $value = post('pagelookup_allow_custom_url');\n        return $value === null ? true : (bool) $value;\n    }\n\n    /**\n     * getAllowedTypes\n     */\n    protected function getAllowedTypes(): ?array\n    {\n        $types = post('pagelookup_allowed_types');\n        if (!$types || $types === 'null') {\n            return null;\n        }\n        return is_array($types) ? $types : json_decode($types, true);\n    }\n\n    /**\n     * getExcludedTypes\n     */\n    protected function getExcludedTypes(): ?array\n    {\n        $types = post('pagelookup_excluded_types');\n        if (!$types || $types === 'null') {\n            return null;\n        }\n        return is_array($types) ? $types : json_decode($types, true);\n    }\n}\n"
  },
  {
    "path": "modules/cms/widgets/SnippetLookup.php",
    "content": "<?php namespace Cms\\Widgets;\n\nuse Str;\nuse Input;\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\SnippetManager;\nuse Backend\\Classes\\WidgetBase;\nuse ApplicationException;\n\n/**\n * SnippetLookup widget\n *\n * @package october\\cms\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SnippetLookup extends WidgetBase\n{\n    use \\Backend\\Traits\\SearchableWidget;\n    use \\Backend\\Traits\\InspectableContainer;\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string title text to display for the title of the popup list form\n     */\n    public $title = 'Insert Snippet';\n\n    /**\n     * @var string defaultAlias to identify this widget.\n     */\n    protected $defaultAlias = 'ocsnippetlookup';\n\n    /**\n     * @var string noRecordsMessage\n     */\n    public $noRecordsMessage = \"No snippets found\";\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'title',\n        ]);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/snippetlookup.css');\n        $this->addJs('js/snippetlookup.js', ['type' => 'module']);\n        $this->addJs('js/snippetlookup-control.js', ['type' => 'module']);\n        $this->addJs('js/snippet-control.js', ['type' => 'module']);\n    }\n\n    /**\n     * Renders the widget.\n     * @return string\n     */\n    public function render()\n    {\n        return $this->makePartial('body', [\n            'data' => $this->getData()\n        ]);\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['title'] = $this->title;\n    }\n\n    /**\n     * onLoadPopup AJAX handler\n     */\n    public function onLoadPopup()\n    {\n        // Disable asset broadcasting\n        $this->controller->flushAssets();\n\n        $this->prepareVars();\n\n        return $this->makePartial('lookup_form');\n    }\n\n    /**\n     * onSearch\n     */\n    public function onSearch()\n    {\n        $this->setSearchTerm(Input::get('search'));\n\n        return $this->updateList();\n    }\n\n    /**\n     * onGetInspectorConfiguration\n     */\n    public function onGetInspectorConfiguration()\n    {\n        $configuration = [];\n        $snippetCode = post('snippet');\n        $componentClass = post('component');\n\n        if ($componentClass && !class_exists($componentClass)) {\n            throw new ApplicationException(__(\"Snippet with the requested code :code was not found in the theme.\", ['code' => $componentClass]));\n        }\n\n        if (strlen($snippetCode)) {\n            $snippet = SnippetManager::instance()->findByCodeOrComponent($this->getTheme(), $snippetCode, $componentClass);\n            if (!$snippet) {\n                throw new ApplicationException(__(\"Snippet with the requested code :code was not found in the theme.\", ['code' => $snippetCode]));\n            }\n\n            $configuration = $snippet->getProperties();\n        }\n\n        return [\n            'configuration' => [\n                'properties' => $configuration,\n                'title' => $snippet->getName(),\n                'description' => $snippet->getDescription()\n            ]\n        ];\n    }\n\n    /**\n     * onLoadSnippetDetails\n     */\n    public function onLoadSnippetDetails()\n    {\n        $this->controller->flushAssets();\n\n        $codes = array_unique((array) post('codes'));\n        $result = [];\n\n        foreach ($codes as $snippetCode) {\n            $parts = explode('|', $snippetCode);\n            $componentClass = null;\n\n            if (count($parts) > 1) {\n                $snippetCode = $parts[0];\n                $componentClass = $parts[1];\n            }\n\n            $snippet = SnippetManager::instance()->findByCodeOrComponent($this->getTheme(), $snippetCode, $componentClass);\n            if (!$snippet) {\n                $result[$snippetCode] = [\n                    'name' => __(\"Snippet with the requested code :code was not found in the theme.\", ['code' => $snippetCode]),\n                    'error' => true\n                ];\n            }\n            else {\n                $result[$snippetCode] = [\n                    'name' => $snippet->getName()\n                ];\n            }\n        }\n\n        return [\n            'details' => $result\n        ];\n    }\n\n    /**\n     * getData\n     */\n    protected function getData()\n    {\n        $manager = SnippetManager::instance();\n        $snippets = $manager->listSnippets($this->getTheme());\n\n        $searchTerm = Str::lower($this->getSearchTerm());\n\n        if (strlen($searchTerm)) {\n            $words = explode(' ', $searchTerm);\n            $filteredSnippets = [];\n\n            foreach ($snippets as $snippet) {\n                if ($this->textMatchesSearch($words, $snippet->getName().' '.$snippet->code.' '.$snippet->getDescription())) {\n                    $filteredSnippets[] = $snippet;\n                }\n            }\n\n            $snippets = $filteredSnippets;\n        }\n\n        usort($snippets, function($a, $b) {\n            return strcmp($a->getName(), $b->getName());\n        });\n\n        return $snippets;\n    }\n\n    /**\n     * updateList\n     */\n    protected function updateList()\n    {\n        return ['#'.$this->getId('snippet-list') => $this->makePartial('items', ['items' => $this->getData()])];\n    }\n\n    /**\n     * getTheme returns the theme to source snippets\n     */\n    protected function getTheme()\n    {\n        return Theme::getEditTheme() ?: Theme::getActiveTheme();\n    }\n\n    /**\n     * getThemeSessionKey\n     */\n    protected function getThemeSessionKey($prefix)\n    {\n        $theme = $this->getTheme();\n        if (!$theme) {\n            return $prefix . 'unknown';\n        }\n\n        return $prefix . $theme->getDirName();\n    }\n\n    /**\n     * getSession\n     */\n    protected function getSession($key = null, $default = null)\n    {\n        $key = strlen($key) ? $this->getThemeSessionKey($key) : $key;\n\n        return parent::getSession($key, $default);\n    }\n\n    /**\n     * putSession\n     */\n    protected function putSession($key, $value)\n    {\n        return parent::putSession($this->getThemeSessionKey($key), $value);\n    }\n}\n"
  },
  {
    "path": "modules/cms/widgets/pagelookup/assets/js/pagelookup.js",
    "content": "/*\n * PageLookup page\n *\n * Config:\n * - alias: null\n * - value: ''\n * - onInsert: null\n * - onShown: null\n * - singleMode: false\n * - includeTitle: false\n */\n\n//\n// Resolver logic\n//\n\nfunction processResolverLink(url) {\n    return window.location.origin + window.location.pathname +'?_lookup_link='+encodeURIComponent(url);\n}\n\nfunction processResolverLinks(content) {\n    return processResolverLinksForHtml(\n        processResolverLinksForMarkdown(content)\n    );\n}\n\n// [a link](october://static-pages@link/some/reference?cmsPage=foobar)\nfunction processResolverLinksForMarkdown(markdownText) {\n    const elements = markdownText.match(/\\[.*?\\]\\(october:\\/\\/.*?\\)/g);\n    if (elements != null && elements.length > 0) {\n        for (const el of elements) {\n            const txt = el.match(/\\[(.*?)\\]/);\n            const url = el.match(/\\((october:\\/\\/.*?)\\)/);\n            if (txt !== null && url !== null) {\n                const processedUrl = processResolverLink(url[1]);\n                markdownText = markdownText.replace(el,'['+txt[1]+']('+processedUrl+')');\n            }\n        }\n    }\n    return markdownText;\n}\n\n// <a href=\"october://static-pages@link/some/reference?cmsPage=foobar\"></a>\nfunction processResolverLinksForHtml(htmlText) {\n    const elements = htmlText.match(/(<a.*?october:\\/\\/.*?[^a]>)+?/g);\n    if (elements != null && elements.length > 0) {\n        for (const el of elements) {\n            const url = el.match(/href=\"(.*?)\"/);\n            if (url !== null) {\n                const processedUrl = processResolverLink(url[1]);\n                htmlText = htmlText.replace(el, el.replace(url[1], processedUrl));\n            }\n        }\n    }\n    return htmlText;\n}\n\nclass PageLookupWidget {\n    static proxyCounter = 0;\n\n    constructor(config) {\n        this.config = this.getConfig(config);\n        this.proxiedMethods = {};\n\n        if (this.config.alias === null) {\n            throw new Error('Page Lookup popup option \"alias\" is not set.');\n        }\n\n        this.$rootElement = $('<div />');\n        this.$rootElement.one('hide.oc.popup', this.proxy(this.onPopupHidden));\n        this.$rootElement.one('shown.oc.popup', this.proxy(this.onPopupShown));\n\n        this.show();\n    }\n\n    dispose() {\n        for (const key in this.proxiedMethods) {\n            this.proxiedMethods[key] = null;\n        }\n\n        for (const propertyName of Object.getOwnPropertyNames(this)) {\n            this[propertyName] = null;\n        }\n    }\n\n    static processLink(url) {\n        return processResolverLink(url);\n    }\n\n    static processLinks(content) {\n        return processResolverLinks(content);\n    }\n\n    static popup(config) {\n        return new this(config);\n    }\n\n    static get DEFAULTS() {\n        return {\n            alias: null,\n            value: '',\n            onInsert: null,\n            onShown: null,\n            singleMode: false,\n            includeTitle: false,\n            allowCustomUrl: true,\n            allowedTypes: null,\n            excludedTypes: null\n        }\n    }\n\n    onRefreshReference = function(event) {\n        var $select = $(event.target),\n            val = $select.val();\n\n        if (!val) {\n            return;\n        }\n\n        // type::reference ID\n        var parts = val.split('::', 2);\n        var extraData = {\n            type: parts[0],\n            reference: parts[1]\n        };\n\n        oc.request(this.$popupElement.get(0), this.config.alias + '::onRefreshReference', {\n            data: {\n                PageLookupItem: extraData\n            }\n        });\n\n        $select.empty().trigger('change.select2');\n    }\n\n    onInsertReference = function(event) {\n        const { data, context } = event.detail;\n\n        if (context.handler !== this.config.alias + '::onInsertReference') {\n            return;\n        }\n\n        if (!data) {\n            return;\n        }\n\n        if (this.config.onInsert) {\n            this.config.onInsert.call(this, data);\n        }\n    }\n\n    onPopupShown = function(event, element, popup) {\n        this.$popupElement = popup;\n        oc.Events.on(this.$popupElement.get(0), 'change', 'select[name=referenceSearch]', this.proxy(this.onRefreshReference));\n        oc.Events.on(this.$popupElement.get(0), 'ajax:done', 'form', this.proxy(this.onInsertReference));\n\n        if (this.config.onShown) {\n            this.config.onShown.call(this);\n        }\n    }\n\n    onPopupHidden = function(event, element, popup) {\n        oc.Events.off(this.$popupElement.get(0), 'change', 'select[name=referenceSearch]', this.proxy(this.onRefreshReference));\n        oc.Events.off(this.$popupElement.get(0), 'ajax:done', 'form', this.proxy(this.onInsertReference));\n\n        this.dispose();\n    }\n\n    show() {\n        var data = {\n            pagelookup_flag: true,\n            pagelookup_title: this.config.includeTitle,\n            pagelookup_single: this.config.singleMode,\n            pagelookup_allow_custom_url: this.config.allowCustomUrl,\n            pagelookup_allowed_types: JSON.stringify(this.config.allowedTypes),\n            pagelookup_excluded_types: JSON.stringify(this.config.excludedTypes),\n            value: this.config.value\n        };\n\n        this.$rootElement.popup({\n            extraData: data,\n            size: 'large',\n            handler: this.config.alias + '::onLoadPopup'\n        });\n    }\n\n    hide() {\n        if (this.$rootElement) {\n            this.$rootElement.trigger('close.oc.popup');\n        }\n    }\n\n    // Private\n    proxy(method) {\n        if (method.ocProxyId === undefined) {\n            PageLookupWidget.proxyCounter++;\n            method.ocProxyId = PageLookupWidget.proxyCounter;\n        }\n\n        if (this.proxiedMethods[method.ocProxyId] !== undefined) {\n            return this.proxiedMethods[method.ocProxyId];\n        }\n\n        this.proxiedMethods[method.ocProxyId] = method.bind(this);\n\n        return this.proxiedMethods[method.ocProxyId];\n    }\n\n    getConfig(config) {\n        return {\n            ...this.constructor.DEFAULTS,\n            ...(typeof config === 'object' ? config : {})\n        }\n    }\n}\n\noc.pageLookup = PageLookupWidget;\n\nif ($.FE) {\n    $.FE.RegisterInsertPageLinkCommand();\n}\n"
  },
  {
    "path": "modules/cms/widgets/pagelookup/partials/_field_page_search.php",
    "content": "<select\n    name=\"referenceSearch\"\n    class=\"form-control custom-select\"\n    autocomplete=\"off\"\n    data-placeholder=\"<?= __(\"Search all references...\") ?>\"\n    data-handler=\"<?= $field->searchHandler ?>\"\n    data-minimum-input-length=\"2\"\n    data-ajax--delay=\"300\"\n></select>\n"
  },
  {
    "path": "modules/cms/widgets/pagelookup/partials/_lookup_form.php",
    "content": "<div id=\"<?= $this->getId('popup') ?>\" class=\"pagefinder-popup\">\n    <?= Form::ajax($this->getEventHandler('onInsertReference'), [\n        'data-popup-load-indicator' => true,\n    ]) ?>\n        <input type=\"hidden\" name=\"pagelookup_flag\" value=\"1\" />\n        <input type=\"hidden\" name=\"pagelookup_title\" value=\"<?= $includeTitle ? 1 : 0 ?>\" />\n        <input type=\"hidden\" name=\"pagelookup_single\" value=\"<?= $singleMode ? 1 : 0 ?>\" />\n        <input type=\"hidden\" name=\"pagelookup_allow_custom_url\" value=\"<?= $allowCustomUrl ? 1 : 0 ?>\" />\n        <input type=\"hidden\" name=\"pagelookup_allowed_types\" value=\"<?= e(json_encode($allowedTypes)) ?>\" />\n        <input type=\"hidden\" name=\"pagelookup_excluded_types\" value=\"<?= e(json_encode($excludedTypes)) ?>\" />\n\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e(__($title)) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n\n        <div class=\"modal-body\">\n            <div class=\"pagefinder-form\" id=\"<?= $this->getId('selectWidget') ?>\">\n                <?= $selectWidget->render() ?>\n            </div>\n        </div>\n\n        <div class=\"modal-footer\">\n            <button\n                type=\"submit\"\n                class=\"btn btn-primary\"\n                data-control=\"apply-btn\">\n                <?= e(trans('backend::lang.form.insert')) ?>\n            </button>\n            <button\n                type=\"button\"\n                class=\"btn btn-default\"\n                data-dismiss=\"popup\">\n                <?= e(trans('backend::lang.form.cancel')) ?>\n            </button>\n        </div>\n    <?= Form::close() ?>\n</div>\n\n<?php if (!$value): ?>\n    <script>\n        setTimeout(function() {\n            $('#<?= $this->getId('popup') ?> input[name=\"PageLookupItem[url]\"]:first').focus();\n        }, 500);\n    </script>\n<?php endif ?>\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/assets/css/snippetlookup.css",
    "content": "[data-control=snippet]{background:var(--oc-form-control-bg);border:1px dashed #bdc3c7;color:var(--bs-heading-color);cursor:pointer;display:inline-block;font-size:15px;font-weight:600;font-weight:400;line-height:150%;margin:0 0 15px;padding:10px 10px 10px 36px;position:relative;width:100%}[data-control=snippet].has-error{border-color:var(--bs-danger);border-style:solid;cursor:default;outline:none}[data-control=snippet].inspector-open,[data-control=snippet]:focus{border-color:var(--bs-primary);border-style:solid;outline:none}[data-control=snippet]:before{content:attr(data-name)}[data-control=snippet]:after{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:\"\\e94b\";font-family:octo-icon!important;font-size:19.5px;font-style:normal;font-variant:normal;font-weight:400;height:19px;left:11px;line-height:1;position:absolute;text-transform:none;top:12px;width:17px}[data-control=snippet].loading:after{animation:spin 1s linear infinite;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='41' height='41' viewBox='134 73 41 41' xml:space='preserve'%3E%3Cpath fill='none' stroke='%235FB6F5' stroke-width='5.28' stroke-linecap='round' stroke-linejoin='round' d='M142.114 105.059c-4.002-4.376-5.601-10.721-3.64-16.765a16.977 16.977 0 0 1 7.39-9.312'/%3E%3C/svg%3E\");background-position:50% 50%;background-size:15px 15px;content:\" \";height:15px;position:absolute;top:13px;width:15px}\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/assets/js/snippet-control.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\nimport SnippetMarkdownContext from './snippet-control.markdown.js';\nimport SnippetRicheditorContext from './snippet-control.richeditor.js';\n\n/*\n * Snippet Control\n *\n * Manages the interactive figure state, if you add the control tag to this it will create\n * a snippet manager.\n *\n * <figure data-snippet=\"someSnippetCode\" data-snippet-properties=\"{json}\"></figure>\n */\nregisterControl('snippet', class extends ControlBase\n{\n    static defaultWidgetAlias = 'ocsnippetlookup';\n\n    init() {\n        this.snippetCode = this.config.snippet;\n        this.componentClass = this.config.component;\n    }\n\n    connect() {\n        this.snippetContext = this.guessSnippetContext();\n        if (this.snippetContext) {\n            this.snippetContext.onConnect();\n        }\n\n        this.constructor.blessSnippet(this.element);\n\n        this.listen('click', this.createInspector);\n        $(this.element).on('hidden.oc.inspector', this.proxy(this.closedInspector));\n        $(this.element).on('error.oc.inspector', this.proxy(this.erroredInspector));\n\n        this.loadSnippetDetails();\n    }\n\n    disconnect() {\n        $(this.element).off('hidden.oc.inspector', this.proxy(this.closedInspector));\n        $(this.element).off('error.oc.inspector', this.proxy(this.erroredInspector));\n\n        this.constructor.cleanSnippet(this.element);\n\n        $.oc.foundation.controlUtils.disposeControls(this.element);\n\n        if (this.snippetContext) {\n            this.snippetContext.onDisconnect();\n            this.snippetContext = null;\n        }\n    }\n\n    loadSnippetDetails() {\n        this.element.dataset.name = 'Loading...';\n        this.element.classList.add('loading');\n\n        oc.snippetLookup.getSnippetDetails(this.snippetCode, this.componentClass).then((data) => {\n            if (data) {\n                this.element.dataset.name = data.name;\n                this.element.classList.remove('loading');\n\n                if (data.error) {\n                    this.element.classList.add('has-error');\n                }\n            }\n        });\n    }\n\n    guessSnippetContext() {\n        const markdownEl = this.element.closest('[data-control=\"markdowneditor\"]');\n        if (markdownEl) {\n            return new SnippetMarkdownContext(this, markdownEl, this.element);\n        }\n\n        const richeditorEl = this.element.closest('[data-control=\"richeditor\"]');\n        if (richeditorEl) {\n            return new SnippetRicheditorContext(this, richeditorEl, this.element);\n        }\n    }\n\n    closedInspector() {\n        oc.snippetLookup.pauseRendering = false;\n\n        if (this.snippetContext) {\n            this.snippetContext.onInspectorClosed();\n        }\n    }\n\n    erroredInspector() {\n        oc.snippetLookup.pauseRendering = false;\n\n        this.element.classList.remove('inspector-open');\n        this.element.classList.add('has-error');\n    }\n\n    createInspector(ev) {\n        if (this.element.classList.contains('has-error')) {\n            return;\n        }\n\n        oc.snippetLookup.pauseRendering = true;\n        $.oc.inspector.manager.createInspector(ev.target);\n        return false;\n    }\n\n    static blessSnippet(el) {\n        el.setAttribute('data-inspector-handler-alias', this.defaultWidgetAlias);\n\n        if (el.dataset.component) {\n            el.setAttribute('data-inspector-class', el.dataset.component);\n        }\n    }\n\n    static cleanSnippet(el) {\n        var removeAttrs = [\n            'data-name',\n            'data-inspector-handler-alias',\n            'data-inspector-id',\n            'data-inspector-class',\n            'data-inspector-css-class',\n            'data-property-inspectorclassname',\n            'data-property-inspectorproperty'\n        ];\n\n        removeAttrs.forEach(attr => el.removeAttribute(attr));\n    }\n});\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/assets/js/snippet-control.markdown.js",
    "content": "/*\n * Snippet Markdown Context\n */\n\nexport default class SnippetMarkdownContext\n{\n    constructor(delegate, control, element) {\n        this.delegate = delegate;\n        this.control = control;\n        this.element = element;\n        this.textarea = this.findTextareaForControl();\n    }\n\n    findTextareaForControl() {\n        return this.control.querySelector('.editor-write > textarea');\n    }\n\n    findPreviewForControl() {\n        return this.element.closest('.editor-preview-side');\n    }\n\n    onInspectorClosed() {\n        if (!this.textarea) {\n            return;\n        }\n\n        this.textarea.value = this.replaceSnippetAtIndex(\n            this.findSnippetIndex(),\n            this.element.outerHTML,\n            this.textarea.value\n        );\n\n        oc.Events.dispatch('change', { target: this.textarea });\n    }\n\n    onConnect() {\n        //\n    }\n\n    onDisconnect() {\n        //\n    }\n\n    findSnippetIndex() {\n        var preview = this.findPreviewForControl();\n        if (!preview) {\n            return;\n        }\n\n        var snippet = this.element,\n            foundIndex = null;\n\n\n        preview.querySelectorAll('figure[data-snippet]').forEach(function(otherSnippet, index) {\n            if (otherSnippet === snippet) {\n                foundIndex = index;\n            }\n        });\n\n        return foundIndex;\n    }\n\n    replaceSnippetAtIndex(index, newSnippet, textareaContent) {\n        const figures = textareaContent.match(/\\<figure[^\\>]+data-snippet[^\\>]+\\>[^<]*\\<\\/figure\\>/g);\n\n        if (figures && figures[index]) {\n            textareaContent = textareaContent.replace(figures[index], this.cleanSnippetContent(newSnippet))\n        }\n\n        return textareaContent;\n    }\n\n    cleanSnippetContent(html) {\n        var $domTree = $('<div>'+html+'</div>');\n\n        $('[data-snippet]', $domTree).each(function(){\n            var $snippet = $(this);\n\n            oc.importControl('snippet').cleanSnippet($snippet.get(0));\n\n            $snippet.removeAttr('class data-control data-inspector-id');\n        });\n\n        return $domTree.html();\n    }\n}\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/assets/js/snippet-control.richeditor.js",
    "content": "/*\n * Snippet Rich Editor Context\n */\n\nexport default class SnippetRicheditorContext\n{\n    constructor(delegate, control, element) {\n        this.delegate = delegate;\n        this.control = control;\n        this.element = element;\n    }\n\n    onInspectorClosed() {\n        //\n    }\n\n    onConnect() {\n        this.element.contentEditable = false;\n        this.element.classList.add('fr-draggable');\n        this.element.setAttribute('tabindex', '0');\n        this.element.setAttribute('draggable', 'true');\n        this.element.setAttribute('contenteditable', 'false');\n        this.element.setAttribute('data-ui-block', 'true');\n    }\n\n    onDisconnect() {\n        var removeAttrs = [\n            'class',\n            'draggable',\n            'tabindex',\n            'contenteditable',\n            'data-ui-block',\n            'data-name',\n            'data-inspector-css-class',\n            'data-inspector-class',\n            'data-inspector-handler-alias',\n            'data-property-inspectorclassname',\n            'data-property-inspectorproperty',\n        ];\n\n        removeAttrs.forEach(attr => this.element.removeAttribute(attr));\n    }\n}\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/assets/js/snippetlookup-control.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\n\n/*\n * SnippetLookupWidget\n */\nregisterControl('snippetlookup', class extends ControlBase\n{\n    init() {\n        this.$popupElement = null;\n        this.insertCallback = null;\n    }\n\n    connect() {\n        this.element.snippetLookupInstance = this;\n        this.listen('click', '[data-snippet]', this.onClickSnippet)\n        this.dispatch('ready');\n    }\n\n    disconnect() {\n        this.element.snippetLookupInstance = null;\n        this.$popupElement = null;\n        this.insertCallback = null;\n    }\n\n    hide() {\n        $(this.element).trigger('close.oc.popup');\n    }\n\n    onClickSnippet(ev) {\n        var $item = ev.target.closest('li');\n        if (this.insertCallback) {\n            this.insertCallback.bind(this)($item.dataset);\n        }\n    }\n\n    setContext(insertCallback) {\n        this.insertCallback = insertCallback;\n    }\n});\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/assets/js/snippetlookup.js",
    "content": "/*\n * SnippetLookupWidget\n */\n\nclass SnippetLookup\n{\n    static defaultWidgetAlias = 'ocsnippetlookup';\n\n    // Open snippet selection popup\n    static popup(config) {\n        $.popup({\n            adaptiveHeight: true,\n            handler: this.defaultWidgetAlias + '::onLoadPopup'\n        });\n\n        // Queue for the next control found in the popup\n        addEventListener('snippetlookup:ready', function(ev) {\n            if (ev.target.snippetLookupInstance) {\n                ev.target.snippetLookupInstance.setContext(config.onInsert);\n            }\n        }, { once: true });\n    }\n\n    static generateSnippetHtml(snippet) {\n        let snippetCode = snippet.snippet,\n            componentClass = snippet.componentClass,\n            useAjax = snippet.useAjax === 'true';\n\n        var template = [];\n\n        if (componentClass) {\n            snippetCode = this._generateUniqueComponentSnippetCode(snippetCode);\n            template.push('<figure data-snippet=\"'+snippetCode+'\"');\n            template.push(' data-component=\"'+componentClass+'\"');\n        }\n        else {\n            template.push('<figure data-snippet=\"'+snippetCode+'\"');\n        }\n\n        if (useAjax) {\n            template.push(' data-ajax=\"true\"');\n        }\n\n        template.push('>&nbsp;</figure>');\n\n        return template.join('');\n    }\n\n    // If a component-based snippet was added, make sure that its code is unique,\n    // as it will be used as a component alias.\n    static _generateUniqueComponentSnippetCode(originalCode) {\n        var updatedCode = originalCode,\n            counter = 1,\n            snippetFound = false;\n\n        do {\n            snippetFound = false;\n            $('[data-control=\"richeditor\"] textarea, [data-control=\"markdowneditor\"] textarea').each(function() {\n                var $textarea = $(this),\n                    $codeDom = $('<div>' + $textarea.val() + '</div>');\n\n                if ($('[data-snippet=\"'+updatedCode+'\"][data-component]', $codeDom).length > 0) {\n                    snippetFound = true;\n                    updatedCode = originalCode + counter;\n                    counter++;\n\n                    return false;\n                }\n            })\n\n        } while (snippetFound);\n\n        return updatedCode;\n    }\n\n    // Used by markdown editor to attach snippet controls\n    static processSnippets(content) {\n        const figures = content.match(/\\<figure[^\\>]+data-snippet[^\\>]+\\>[^<]*\\<\\/figure\\>/g);\n\n        if (figures != null && figures.length > 0) {\n            for (const figure of figures) {\n                content = content.replace(figure, figure.replace('data-snippet=\"', 'data-control=\"snippet\" data-snippet=\"'));\n            }\n        }\n\n        return content;\n    }\n\n    // Snippet Detail Manager\n    static snippetDetails = {};\n    static snippetDetailQueue = [];\n    static snippetDetailLoading = false;\n    static snippetDetailTimer;\n\n    static getSnippetDetails(code, componentClass) {\n        const fullCode = componentClass\n            ? code + '|' + componentClass\n            : code;\n\n        return new Promise((resolve) => {\n            if (this.snippetDetails[code]) {\n                resolve(this.snippetDetails[code]);\n                return;\n            }\n\n            this.snippetDetailQueue.push([fullCode, code, resolve]);\n\n            if (this.dataTrackInputTimer !== undefined) {\n                clearTimeout(this.dataTrackInputTimer);\n            }\n\n            const requestDetails = () => {\n                if (this.snippetDetailLoading) {\n                    return;\n                }\n\n                const resolveQueue = [...this.snippetDetailQueue],\n                    wantSnippets = resolveQueue.map(item => item[0]);\n\n                this.snippetDetailLoading = true;\n                this.snippetDetailQueue = [];\n\n                oc.ajax(this.defaultWidgetAlias + '::onLoadSnippetDetails', {\n                    data: {\n                        codes: wantSnippets\n                    }\n                })\n                .done((data) => {\n                    if (data.details) {\n                        Object.assign(this.snippetDetails, data.details);\n                        this.snippetDetailLoading = false;\n\n                        resolveQueue.forEach((item, key) => {\n                            item[2](this.snippetDetails[item[1]]);\n                        });\n\n                        // Request queued items that were added during a pending request\n                        if (this.snippetDetailQueue.length) {\n                            requestDetails();\n                        }\n                    }\n                });\n            };\n\n            this.dataTrackInputTimer = setTimeout(requestDetails, 100);\n        });\n    }\n}\n\noc.snippetLookup = SnippetLookup;\n\nif ($.FE) {\n    $.FE.RegisterInsertSnippetCommand();\n}\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/assets/less/snippetlookup.less",
    "content": "@import \"../../../../../backend/assets/less/core/boot.less\";\n\n[data-control=\"snippet\"] {\n    display: inline-block;\n    width: 100%;\n    margin: 0 0 15px 0;\n    padding: 10px 10px 10px 36px;\n    border: 1px dashed #bdc3c7;\n    background: @input-bg;\n    position: relative;\n    color: @heading-color;\n    font-size: 15px;\n    font-weight: 600;\n    line-height: 150%;\n    font-weight: normal;\n    cursor: pointer;\n\n    &.has-error {\n        border-color: @brand-danger;\n        border-style: solid;\n        outline: none;\n        cursor: default;\n    }\n\n    &:focus,\n    &.inspector-open {\n        border-color: @brand-primary;\n        border-style: solid;\n        outline: none;\n    }\n\n    &:before {\n        content: attr(data-name);\n    }\n\n    &:after {\n        .icon-OctoFont();\n        content: @icon-code-snippet;\n        font-size: 19.5px;\n\n        position: absolute;\n        width: 17px;\n        height: 19px;\n        left: 11px;\n        top: 12px;\n    }\n\n    &.loading:after {\n        background-image: url('data:image/svg+xml,<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:a=\"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/\" x=\"0px\" y=\"0px\" width=\"41px\" height=\"41px\" viewBox=\"134 73 41 41\" enable-background=\"new 134 73 41 41\" xml:space=\"preserve\"><defs></defs><rect x=\"0.5\" y=\"0.5\" display=\"none\" fill=\"%23B8CC44\" stroke=\"%23FFFFFF\" width=\"315\" height=\"291\"/><path id=\"bg_1_\" opacity=\"0\" fill=\"%23FFFFFF\" d=\"M135.015,93.554c0.002-10.854,8.8-19.653,19.654-19.655c10.856,0.002,19.653,8.802,19.655,19.657c-0.001,6.679-3.331,12.577-8.422,16.129c-3.184,2.223-7.056,3.525-11.232,3.526C143.815,113.209,135.016,104.41,135.015,93.554z\"/><path opacity=\"0\" fill=\"none\" stroke=\"%232A98DB\" stroke-width=\"6\" d=\"M137.644,93.554c0.001-9.402,7.623-17.024,17.025-17.026c9.404,0.002,17.025,7.625,17.026,17.028c0,5.785-2.886,10.896-7.295,13.972c-2.758,1.925-6.112,3.054-9.73,3.055C145.267,110.58,137.645,102.959,137.644,93.554z\"/><path fill=\"none\" stroke=\"%235FB6F5\" stroke-width=\"5.28\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M142.114,105.059c-4.002-4.376-5.601-10.721-3.64-16.765c1.318-4.052,4.011-7.271,7.39-9.312\"/></svg>');\n        background-size: 15px 15px;\n        background-position: 50% 50%;\n        position: absolute;\n        width: 15px;\n        height: 15px;\n        top: 13px;\n        content: ' ';\n        .animation(spin 1s linear infinite);\n    }\n}\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/partials/_items.php",
    "content": "<?php if ($items): ?>\n    <ul>\n        <?php foreach ($items as $item): ?>\n            <?php\n                $dataId = 'snippet-'.$item->code;\n            ?>\n            <li class=\"item\"\n                data-id=\"<?= e($dataId) ?>\"\n                data-snippet=\"<?= e($item->code) ?>\"\n                data-snippet-name=\"<?= e($item->getName()) ?>\"\n                data-type=\"snippet\"\n                data-description=\"<?= e($item->getDescription()) ?>\"\n                data-component-class=\"<?= e($item->getComponentClass()) ?>\"\n                data-use-ajax=\"<?= $item->useAjaxPartial() ? 'true' : 'false' ?>\"\n            >\n                <a href=\"javascript:;\">\n                    <span class=\"title\"><?= e($item->getName()) ?></span>\n                    <span class=\"description\">\n                        <?= e($item->getDescription()) ?>\n                    </span>\n                    <span class=\"borders\"></span>\n                </a>\n            </li>\n        <?php endforeach ?>\n    </ul>\n<?php else: ?>\n    <p class=\"no-data\"><?= e(trans($this->noRecordsMessage)) ?></p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/partials/_lookup_form.php",
    "content": "<div id=\"<?= $this->getId('popup') ?>\" data-control=\"snippetlookup\" class=\"snippetlookup-popup h-100\">\n    <form class=\"d-flex flex-column h-100\" onsubmit=\"return false\">\n        <input type=\"hidden\" name=\"snippetmanager_flag\" value=\"1\" />\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e(__($title)) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n        <div>\n            <?= $this->makePartial('toolbar') ?>\n        </div>\n        <div class=\"flex-grow-1 position-relative\">\n            <?= $this->makePartial('snippets', [\n                'data' => $this->getData()\n            ]) ?>\n        </div>\n    </form>\n</div>\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/partials/_snippets.php",
    "content": "<div class=\"control-scrollbar position-absolute top-0 start-0 end-0 bottom-0\" data-control=\"scrollbar\">\n    <div\n        class=\"control-filelist filelist-hero snippet-list\"\n        id=\"<?= $this->getId('snippet-list') ?>\"\n        data-control=\"filelist\">\n        <?= $this->makePartial('items', ['items' => $data]) ?>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/cms/widgets/snippetlookup/partials/_toolbar.php",
    "content": "<div class=\"toolbar-item loading-indicator-container size-input-text\">\n    <?= Ui::searchInput(\n        name: 'search',\n        value: $this->getSearchTerm(),\n        placeholder: __(\"Search...\"),\n        handler: $this->getEventHandler('onSearch'),\n        outerClass: 'is-modal-search'\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/dashboard/ServiceProvider.php",
    "content": "<?php namespace Dashboard;\n\nuse Backend;\nuse Dashboard\\Models\\Dashboard;\nuse October\\Rain\\Support\\ModuleServiceProvider;\nuse Dashboard\\Classes\\CmsReportDataSource;\nuse Dashboard\\Classes\\CmsStatusDataSource;\nuse Dashboard\\Classes\\SystemReportDataSource;\nuse System\\Classes\\SettingsManager;\n\n/**\n * ServiceProvider for Backend module\n */\nclass ServiceProvider extends ModuleServiceProvider\n{\n    /**\n     * register the service provider.\n     */\n    public function register()\n    {\n        parent::register('dashboard');\n\n        $this->registerSingletons();\n\n        // Backend specific\n        if ($this->app->runningInBackend() || $this->app->runningInOctane()) {\n            $this->registerDashboardDatasource();\n        }\n    }\n\n    /**\n     * boot the module events.\n     */\n    public function boot()\n    {\n        parent::boot('backend');\n    }\n\n    /**\n     * registerSingletons\n     */\n    protected function registerSingletons()\n    {\n        $this->app->singleton('dashboard.dashboards', \\Dashboard\\Classes\\DashManager::class);\n        $this->app->singleton('dashboard.demos.traffic', \\Dashboard\\Classes\\CmsDemoTrafficDataGenerator::class);\n        $this->app->singleton('dashboard.traffic.logger', \\Dashboard\\Classes\\TrafficLogger::class);\n    }\n\n    /**\n     * registerNavigation\n     */\n    public function registerNavigation()\n    {\n        return [\n            'dashboard' => [\n                'label' => \"Dashboard\",\n                'icon' => 'icon-dashboard',\n                'iconSvg' => 'modules/backend/assets/images/dashboard-icon.svg',\n                'url' => Backend::url('dashboard'),\n                'permissions' => ['dashboard.*', 'dashboard'],\n                'order' => 10\n            ]\n        ];\n    }\n\n    /**\n     * registerPermissions\n     */\n    public function registerPermissions()\n    {\n        return [\n            // Dashboard\n            'dashboard' => [\n                'label' => \"Access the Dashboard\",\n                'comment' => 'backend::lang.permissions.access_dashboard',\n                'tab' => \"Dashboard\",\n                'order' => 600\n            ],\n            'dashboard.manage' => [\n                'label' => \"Manage Dashboards\",\n                'comment' => 'backend::lang.permissions.create_edit_dashboards',\n                'tab' => \"Dashboard\",\n                'order' => 600\n            ],\n            'dashboard.internal_traffic_statistics' => [\n                'label' => \"Manage Traffic Settings and Data\",\n                'tab' => \"Internal Traffic Statistics\",\n                'order' => 1000\n            ]\n        ];\n    }\n\n    /**\n     * registerSettings\n     */\n    public function registerSettings()\n    {\n        return [\n            'dash_settings' => [\n                'label' => \"Internal Traffic Statistics\",\n                'description' => \"Manage the Internal Traffic Statistics data\",\n                'category' => SettingsManager::CATEGORY_CMS,\n                'icon' => 'icon-line-chart',\n                'url' => Backend::url('dashboard/dashboardsettings'),\n                'permissions' => ['dashboard.internal_traffic_statistics'],\n                'order' => 1000\n            ],\n        ];\n    }\n\n    /**\n     * registerDashboardDatasource\n     */\n    protected function registerDashboardDatasource()\n    {\n        $this->callAfterResolving('dashboard.dashboards', function($manager) {\n            $manager->registerDataSourceClass(\n                SystemReportDataSource::class,\n                'system::lang.dashboard.report_data_source.data_source_name'\n            );\n\n            $manager->registerDataSourceClass(\n                CmsReportDataSource::class,\n                \"Traffic Information\"\n            );\n\n            $manager->registerDataSourceClass(\n                CmsStatusDataSource::class,\n                \"Website Status\"\n            );\n        });\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/assets/js/classes/Calendar.js",
    "content": "'use strict';\n\n/**\n * Calendar class for dashboard date range picker.\n */\nexport default class Calendar\n{\n    constructor(element, locale) {\n        this.element = element;\n        this.locale = locale;\n\n        const start = moment().subtract(29, 'days');\n        const end = moment();\n\n        $(this.element).daterangepicker({\n            startDate: start,\n            endDate: end,\n            opens: 'left',\n            alwaysShowCalendars: true,\n            ranges: {\n                [oc.t(\"Today\")]: [moment(), moment()],\n                [oc.t(\"This week\")]: [moment().isoWeekday(1), moment()],\n                // [oc.t(\"Yesterday\")]: [moment().subtract(1, 'days'), moment().subtract(1, 'days')],\n                // [oc.t(\"Last 7 days\")]: [moment().subtract(6, 'days'), moment()],\n                // [oc.t(\"Last 30 days\")]: [moment().subtract(29, 'days'), moment()],\n                [oc.t(\"This month\")]: [moment().startOf('month'), moment().endOf('month')],\n                // [oc.t(\"Last month\")]: [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')],\n                [oc.t(\"This quarter\")]: [moment().startOf('quarter'), moment()],\n                [oc.t(\"This year\")]: [moment().startOf('year'), moment()],\n            }\n        })\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/assets/js/classes/Dragging.js",
    "content": "'use strict';\n\nimport Sizing from './sizing.js';\n\n/**\n * Dragging class for dashboard widget drag-and-drop.\n */\nexport default class Dragging\n{\n    constructor() {\n        document.addEventListener('dragend', (ev) => this.onDragEnd(ev));\n        this.boundDragEnd = this.onDragEnd.bind(this);\n        this.store = null;\n        this.sizing = Sizing.instance();\n    }\n\n    static instance() {\n        return this.$instance || (this.$instance = new this);\n    }\n\n    setStore(store) {\n        this.store = store;\n    }\n\n    onDragStart(ev, widget, widgetIndexInRow, rows, row) {\n        this.dragState = {\n            rowWithWidget: row,\n            widgetIndexInRow: widgetIndexInRow,\n\n            draggedWidget: widget,\n            originalWidth: widget.width,\n            originalRows: rows,\n            originalRowsCopy: JSON.parse(JSON.stringify(rows)),\n            dropOccurred: false\n        };\n\n        this.store.setSystemDataFlag(widget, 'dragged', true);\n        $(ev.target)\n            .closest('[data-report-container]')\n            .addClass('dragging');\n\n        this.createDragClone(ev);\n        document.addEventListener('mouseup', this.boundDragEnd);\n    }\n\n    onDragOverWidget(ev, targetIndexInRow, row) {\n        if (!this.dragState) {\n            return;\n        }\n        ev.preventDefault();\n        this.putWidgetAtRowIndex(row, targetIndexInRow);\n    }\n\n    onDragOverRow(ev, row) {\n        if (!this.dragState) {\n            return;\n        }\n\n        ev.preventDefault();\n\n        const sourceRow = this.dragState.rowWithWidget;\n        const isSameRow = sourceRow === row;\n        const rowWidgetsLen = row.widgets.length;\n\n        if (isSameRow && rowWidgetsLen > 0 && row.widgets[rowWidgetsLen-1] === this.dragState.draggedWidget) {\n            return;\n        }\n\n        this.putWidgetAtRowIndex(row, row.widgets.length, true);\n    }\n\n    onDragEnd(ev) {\n        ev.preventDefault();\n\n        if (!this.dragState) {\n            return;\n        }\n\n        document.removeEventListener('mouseup', this.boundDragEnd);\n\n        if (!this.dragState.dropOccurred) {\n            this.restoreRows();\n        }\n\n        this.store.setSystemDataFlag(this.dragState.draggedWidget, 'dragged', false);\n        this.dragState = null;\n        $('[data-report-container]').removeClass('dragging');\n    }\n\n    onDrop(ev) {\n        if (!this.dragState) {\n            return;\n        }\n\n        this.dragState.draggedWidget.width = this.dragState.originalWidth;\n        this.dragState.dropOccurred = true;\n\n        this.onDragEnd(ev)\n    }\n\n    restoreRows() {\n        this.dragState.originalRows.splice(0);\n        for (let i = 0; i < this.dragState.originalRowsCopy.length; i++) {\n            this.dragState.originalRows.push(this.dragState.originalRowsCopy[i]);\n        }\n    }\n\n    putWidgetAtRowIndex(row, targetIndexInRow, droppingAtRow) {\n        const sourceRow = this.dragState.rowWithWidget;\n        const isSameRow = sourceRow === row;\n        if (isSameRow && targetIndexInRow === this.dragState.widgetIndexInRow) {\n            return;\n        }\n\n        if (!isSameRow && !this.sizing.canFitNewWidget(row.widgets, this.dragState.originalWidth)) {\n            if (this.store.getSystemDataFlag(row, 'widgetDoesntFit')) {\n                return;\n            }\n\n            this.store.setSystemDataFlag(row, 'widgetDoesntFit', true);\n            setTimeout(() => {\n                this.store.setSystemDataFlag(row, 'widgetDoesntFit', false);\n            }, 2000);\n\n            return;\n        }\n\n        const widget = sourceRow.widgets.splice(this.dragState.widgetIndexInRow, 1)[0];\n        if (isSameRow && droppingAtRow) {\n            targetIndexInRow--;\n        }\n\n        if (row.widgets && targetIndexInRow >= 0 && row.widgets.length > targetIndexInRow) {\n            const targetWidgetWidth = row.widgets[targetIndexInRow].width;\n            // Match the width to avoid flickering\n            // when swapping widgets.\n            widget.width = targetWidgetWidth;\n        }\n\n        row.widgets.splice(targetIndexInRow, 0, widget);\n        this.dragState.widgetIndexInRow = targetIndexInRow;\n        this.dragState.rowWithWidget = row;\n    }\n\n    createDragClone(ev) {\n        const draggedNode = ev.target;\n        const clone = draggedNode.cloneNode(true);\n        clone.style.width = draggedNode.offsetWidth + 'px';\n        clone.classList.add('widget-clone');\n        draggedNode.parentNode.appendChild(clone);\n        this.draggedWidgetWidth = draggedNode.offsetWidth;\n\n        const rect = draggedNode.getBoundingClientRect();\n        ev.dataTransfer.effectAllowed = 'move';\n        ev.dataTransfer.setDragImage(clone, ev.clientX - rect.left, ev.clientY - rect.top);\n\n        setTimeout(function () {\n            draggedNode.parentNode.removeChild(clone);\n        }, 0);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/assets/js/classes/Helpers.js",
    "content": "'use strict';\n\n/**\n * Helpers class for dashboard utility functions.\n */\nexport default class Helpers\n{\n    constructor() {\n        this.lastKnownKey = 0;\n    }\n\n    static instance() {\n        return this.$instance || (this.$instance = new this);\n    }\n\n    dashboardHasUniqueKey(rows, key) {\n        return rows.some((row) => {\n            return row._unique_key === key || this.hasUniqueKey(row.widgets, key);\n        })\n    }\n\n    hasUniqueKey(objects, key) {\n        return objects.some(function(object) {\n            return object._unique_key === key;\n        });\n    }\n\n    makeUniqueKey(rows) {\n        let uniqueKey = rows.length + this.lastKnownKey;\n\n        while (this.dashboardHasUniqueKey(rows, uniqueKey)) {\n            uniqueKey++;\n        }\n\n        this.lastKnownKey = uniqueKey;\n\n        return uniqueKey;\n    }\n\n    makeCustomReportName() {\n        return 'custom_report_' + Math.random().toString(36).slice(2, 16);\n    }\n\n    setUniqueKeysForDashboard(rows) {\n        rows.forEach(row => {\n            row._unique_key = this.makeUniqueKey(rows);\n\n            row.widgets.forEach(widget => {\n                widget._unique_key = this.makeUniqueKey(rows);\n            })\n        });\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/assets/js/classes/Reordering.js",
    "content": "'use strict';\n\n/**\n * Reordering class for dashboard row drag-and-drop reordering.\n */\nexport default class Reordering\n{\n    static instance() {\n        return this.$instance || (this.$instance = new this);\n    }\n\n    onMouseDown(ev, row, rows) {\n        const rowElement = ev.target.closest('[data-report-row]');\n        const buttonElement = ev.target.closest('[data-edit-row-button]');\n        const rowsContainerElement = ev.target.closest('.rows-container');\n\n        this.dragState = {\n            startY: ev.pageY,\n            rowElement,\n            buttonElement,\n            rowsContainerElement,\n            row: row,\n            rows: rows,\n            paused: false\n        };\n\n        document.addEventListener('mousemove', (ev) => this.onMouseMove(ev), { passive: true });\n        document.addEventListener('mouseup', (ev) => this.onMouseUp(ev));\n    }\n\n    onMouseMove(ev) {\n        if (ev.buttons != 1) {\n            // Handle the case when the button was released\n            // outside of the viewport. mouseup doesn't fire\n            // in that case.\n            //\n            this.onMouseUp();\n        }\n\n        if (!this.dragState) {\n            return;\n        }\n\n        const dy = this.updateButtonPosition(ev);\n\n        if (this.dragState.paused) {\n            return;\n        }\n\n        const { rowElement, rows, row, buttonElement } = this.dragState;\n        rowElement.classList.add('reordering');\n        buttonElement.blur();\n        const box = rowElement.getBoundingClientRect();\n\n        let swapIndex = this.shouldSwap(box.top + dy, rows.indexOf(row));\n        if (swapIndex !== -1) {\n            const thisIndex = rows.indexOf(row);\n            if (this.swapRows(thisIndex, swapIndex)) {\n                this.dragState.startY = ev.pageY;\n                if (thisIndex > swapIndex) {\n                    this.dragState.startY -= box.height;\n                }\n\n                this.dragState.paused = true;\n\n                // Let the transition finish before resuming\n                this.updateButtonPosition(ev);\n                setTimeout(() => {\n                    if (this.dragState) {\n                        this.dragState.paused = false;\n                    }\n                }, 210);\n            }\n        }\n    }\n\n    onMouseUp() {\n        if (this.dragState) {\n            // Suppress the context menu\n            const { rowElement, buttonElement } = this.dragState;\n            setTimeout(() => rowElement.classList.remove('reordering'), 0);\n            buttonElement.style.transform = `translateY(0)`;\n        }\n\n        this.dragState = null;\n    }\n\n    updateButtonPosition(ev) {\n        const { startY, buttonElement } = this.dragState;\n        const dy = ev.pageY - startY;\n        buttonElement.style.transform = `translateY(${dy}px)`;\n        return dy;\n    }\n\n    shouldSwap(newY, currentIndex) {\n        const { rowsContainerElement } = this.dragState;\n        const rows = Array.from(rowsContainerElement.querySelectorAll('[data-report-row]'));\n        let newRow = null;\n        let newRowIndex = -1;\n\n        rows.forEach((row, index) => {\n            const box = row.getBoundingClientRect();\n            if (newY > box.top && newY < box.bottom && index !== currentIndex) {\n                newRow = row;\n                newRowIndex = index;\n            }\n        });\n\n        return newRowIndex;\n    }\n\n    swapRows(rowIndex1, rowIndex2) {\n        const { rows } = this.dragState;\n        if (rowIndex1 < 0 || rowIndex2 < 0 || rowIndex1 >= rows.length || rowIndex2 >= rows.length) {\n            // One or both row indexes are out of bounds\n            return false;\n        }\n\n        // Swap rows - Vue 3: Direct array index assignment is reactive\n        const temp = rows[rowIndex1];\n        rows[rowIndex1] = rows[rowIndex2];\n        rows[rowIndex2] = temp;\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/assets/js/classes/Sizing.js",
    "content": "'use strict';\n\n/**\n * Sizing class for dashboard widget column calculations.\n */\nexport default class Sizing\n{\n    constructor() {\n        this.totalColumns = 20;\n        this.minWidth = 3;\n    }\n\n    static instance() {\n        return this.$instance || (this.$instance = new this);\n    }\n\n    canFitNewWidget(widgets, newWidgetWidth) {\n        let result = 0;\n        widgets.forEach((widget) => {\n            result += widget.width;\n        });\n\n        return newWidgetWidth <= (this.totalColumns - result);\n    }\n\n    canFitNewMinSizeWidget(widgets) {\n        return this.canFitNewWidget(widgets, this.minWidth);\n    }\n\n    totalWidgetsWidth(widgets) {\n        let result = 0;\n        widgets.forEach((widget) => {\n            result += widget.width;\n        });\n\n        return result;\n    }\n\n    calculateColumnsAvailableForWidget(widgets, currentWidgetIndex) {\n        let remainingColumns = this.totalColumns;\n        widgets.forEach((widget, index) => {\n            if (index === currentWidgetIndex) {\n                return;\n            }\n\n            remainingColumns -= widget.width;\n        });\n\n        return Math.max(this.minWidth, remainingColumns);\n    }\n\n    calculateColumnWidth(rowElement) {\n        const elementWidth = $(rowElement).width();\n\n        return Math.round(elementWidth / this.totalColumns);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/assets/js/classes/data-helper.js",
    "content": "'use strict';\n\n/**\n * DataHelper class for dashboard data formatting.\n */\nexport default class DataHelper\n{\n    constructor() {\n        this.numberFormats = {};\n    }\n\n    static instance() {\n        return this.$instance || (this.$instance = new this);\n    }\n\n    pushChartData(data, loadedData, metricNames, nullAsZero, notSetLabel) {\n        data.labels.splice(0, data.labels.length);\n        for (let metricIndex = 0; metricIndex < metricNames.length; metricIndex++) {\n            const metricName = metricNames[metricIndex];\n            const dataset = data.datasets[metricIndex];\n            const fullMetricName = 'oc_metric_' + metricName;\n            const formattedMetricName = fullMetricName + '_formatted';\n            dataset.data.splice(0, dataset.data.length);\n\n            // Initialize array for formatted values (used by tooltips)\n            if (!dataset.formattedData) {\n                dataset.formattedData = [];\n            }\n            dataset.formattedData.splice(0, dataset.formattedData.length);\n\n            loadedData.forEach(dataPoint => {\n                let value = dataPoint[fullMetricName];\n                if (value === null && nullAsZero) {\n                    value = 0;\n                }\n\n                let dimensionValue = dataPoint.oc_dimension;\n                if (dataPoint.oc_dimension_label) {\n                    dimensionValue = dataPoint.oc_dimension_label;\n                }\n\n                if (dimensionValue === null) {\n                    dimensionValue = notSetLabel;\n                }\n\n                // dataset.data.push({\n                //     x: dimensionValue,\n                //     y: value,\n                // });\n\n                if (metricIndex === 0) {\n                    data.labels.push(dimensionValue);\n                }\n\n                dataset.data.push(value);\n\n                // Store formatted value if available (from server-side displayFormatter)\n                dataset.formattedData.push(dataPoint[formattedMetricName] ?? null);\n            });\n        }\n    }\n\n    hexToRgbaBackground(hex) {\n        hex = hex.startsWith('#') ? hex.slice(1) : hex;\n\n        const r = parseInt(hex.substring(0, 2), 16);\n        const g = parseInt(hex.substring(2, 4), 16);\n        const b = parseInt(hex.substring(4, 6), 16);\n\n        return `rgba(${r}, ${g}, ${b}, 0.1)`;\n    }\n\n    formatValue(value, formatOptions, locale) {\n        const cacheKey = JSON.stringify([locale, formatOptions]);\n        if (!(cacheKey in this.numberFormats)) {\n            this.numberFormats[cacheKey] = new Intl.NumberFormat(locale ?? undefined, formatOptions ?? undefined);\n        }\n\n        return this.numberFormats[cacheKey].format(value);\n    }\n\n    /**\n     * Formats a value for display, preferring server-side formatted values when available.\n     * Used for non-graph displays (tables, indicators) where custom formatting may be needed.\n     * @param {*} value The raw value\n     * @param {*} formattedValue The server-side formatted value (or undefined if not available)\n     * @param {Object} formatOptions Intl.NumberFormat options for client-side fallback\n     * @param {string} locale The locale to use for formatting\n     * @returns {string} The formatted display string\n     */\n    formatDisplayValue(value, formattedValue, formatOptions, locale) {\n        if (formattedValue !== undefined && formattedValue !== null) {\n            return formattedValue;\n        }\n\n        return this.formatValue(value, formatOptions, locale);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/assets/js/classes/data-source.js",
    "content": "import PQueue from 'p-queue';\n\n/**\n * DataSource class for dashboard data fetching.\n */\nexport default class DataSource\n{\n    constructor(delegate) {\n        this.delegate = delegate;\n        this.queue = new PQueue({ concurrency: 4 });\n        this.datasourceMetricCache = {};\n    }\n\n    loadData(dateRange, aggregationInterval, dimension, metrics, widgetConfig, resetCache, extraData, compare) {\n        return this.queue.add(() => {\n            return oc.ajax(this.delegate.getEventHandler('onGetWidgetData'), {\n                progressBar: false,\n                handleErrorMessage: function(message) {},\n                data: {\n                    _dash_definition: this.delegate.getCurrentDashboard().code,\n                    widget_config: widgetConfig,\n                    date_start: dateRange.dateStart,\n                    date_end: dateRange.dateEnd,\n                    dimension: dimension,\n                    metrics: metrics,\n                    aggregation_interval: aggregationInterval,\n                    reset_cache: resetCache,\n                    compare: compare ?? '',\n                    extra_data: extraData ?? {}\n                }\n            });\n        });\n    }\n\n    loadCustomData(dateRange, aggregationInterval, widgetConfig, resetCache, extraData, compare) {\n        return this.queue.add(() => {\n            return oc.ajax(this.delegate.getEventHandler('onGetWidgetCustomData'), {\n                progressBar: false,\n                handleErrorMessage: function(message) {},\n                data: {\n                    _dash_definition: this.delegate.getCurrentDashboard().code,\n                    widget_config: widgetConfig,\n                    date_start: dateRange.dateStart,\n                    date_end: dateRange.dateEnd,\n                    aggregation_interval: aggregationInterval,\n                    reset_cache: resetCache,\n                    compare: compare ?? '',\n                    extra_data: extraData ?? {}\n                }\n            });\n        });\n    }\n\n    loadStaticContent(dateRange, aggregationInterval, widgetConfig, resetCache, extraData, compare) {\n        return this.queue.add(() => {\n            return oc.ajax(this.delegate.getEventHandler('onGetWidgetStaticContent'), {\n                progressBar: false,\n                handleErrorMessage: function(message) {},\n                data: {\n                    _dash_definition: this.delegate.getCurrentDashboard().code,\n                    widget_config: widgetConfig,\n                    date_start: dateRange.dateStart,\n                    date_end: dateRange.dateEnd,\n                    aggregation_interval: aggregationInterval,\n                    reset_cache: resetCache,\n                    compare: compare ?? '',\n                    extra_data: extraData ?? {}\n                }\n            });\n        });\n    }\n\n    runDataSourceHandler(handlerName, widgetConfig, extraData) {\n        return this.queue.add(() => {\n            return oc.ajax(this.delegate.getEventHandler('onRunDataSourceHandler'), {\n                progressBar: true,\n                data: Object.assign({}, {\n                    _dash_definition: this.delegate.getCurrentDashboard().code,\n                    handler: handlerName,\n                    widget_config: widgetConfig\n                }, extraData)\n            });\n        })\n    }\n\n    runCustomWidgetHandler(handlerName, widgetConfig, extraData) {\n        return this.queue.add(() => {\n            return oc.ajax(this.delegate.getEventHandler('onRunCustomWidgetHandler'), {\n                progressBar: true,\n                data: {\n                    _dash_definition: this.delegate.getCurrentDashboard().code,\n                    handler: handlerName,\n                    widget_config: widgetConfig,\n                    extra_data: extraData\n                }\n            });\n        })\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/assets/js/classes/inspector-configurator.js",
    "content": "'use strict';\n\nimport { dataLoader } from '../../../../backend/vuecomponents/inspector/assets/js/classes/index.js';\n\n/**\n * InspectorConfigurator class for dashboard widget configuration.\n */\nexport default class InspectorConfigurator\n{\n    constructor($el, translationFn, store) {\n        this.trans = translationFn;\n        this.store = store;\n        this.$el = $el;\n\n        this.filterAttributeCacheKey = 'ds-filter-attribute';\n        this.filterAttributeCachePropertyNames = ['dataSource', 'dimension'];\n        this.metricsCacheKey = 'ds-metrics';\n        this.metricsCachePropertyNames = ['dataSource', 'dimension'];\n\n        this.dataLoader = dataLoader;\n    }\n\n    get filterOperations() {\n        return {\n            '=': oc.t(\"Equal to\"),\n            '>=': oc.t(\"Greater or equal to\"),\n            '<=': oc.t(\"Less or equal to\"),\n            '>': oc.t(\"Greater than\"),\n            '<': oc.t(\"Less than\"),\n            'string_starts_with': oc.t(\"Starts with\"),\n            'string_includes': oc.t(\"Includes\"),\n            'one_of': oc.t(\"One of\"),\n        }\n    }\n\n    defineDataSource(configuration, tab, allowedDimensionTypes) {\n        const getDynamicOptionsExtraData = () => {\n            const result = {};\n            if (Array.isArray(allowedDimensionTypes)) {\n                result.allowed_dimension_types = allowedDimensionTypes.join(',');\n            }\n\n            return result;\n        };\n\n        configuration.push({\n            property: 'dataSource',\n            tab: tab,\n            title: oc.t(\"Data source\"),\n            getDynamicOptionsExtraData: getDynamicOptionsExtraData,\n            type: 'dropdown',\n            validation: {\n                required: {\n                    message: oc.t(\"Please select a data source\"),\n                }\n            }\n        });\n\n        configuration.push({\n            property: 'dimension',\n            tab: tab,\n            title: oc.t(\"Dimension\"),\n            getDynamicOptionsExtraData: getDynamicOptionsExtraData,\n            type: 'dropdown',\n            depends: ['dataSource'],\n            dataCacheKeyName: 'ds-dimensions',\n            dataCacheKeyPropertyNames: ['dataSource'],\n            validation: {\n                required: {\n                    message: oc.t(\"Please select a dimension\"),\n                }\n            }\n        });\n    }\n\n    propVisible(filter, suppress, propName) {\n        const result = !filter.length || filter.includes(propName);\n        if (!result) {\n            return result;\n        }\n\n        return !suppress.includes(propName);\n    }\n\n    deletePropertyByName(props, name) {\n        const index = props.findIndex(obj => obj.property === name);\n        if (index > -1) {\n            props.splice(index, 1);\n        }\n    }\n\n    defineDataSourceProperties(configuration, filter = [], suppress = []) {\n        this.propVisible(filter, suppress, 'metrics') && configuration.push({\n            property: 'metrics',\n            title: oc.t(\"Metrics\"),\n            tab: oc.t(\"General\"),\n            type: 'objectList',\n            titleProperty: 'metric',\n            formatItemTitle: async (item, obj, parentObj) => this.formatMetricItemTitle(item, obj, parentObj),\n            colorProperty: 'color',\n            depends: ['dataSource', 'dimension'],\n            itemProperties: [\n                {\n                    property: 'metric',\n                    title: oc.t(\"Metric\"),\n                    type: 'dropdown',\n                    dataCacheKeyName: this.metricsCacheKey,\n                    dataCacheKeyPropertyNames: this.metricsCachePropertyNames,\n                    validation: {\n                        required: {\n                            message: oc.t(\"Please select metric(s).\"),\n                        }\n                    }\n                },\n                {\n                    property: 'color',\n                    title: oc.t(\"Color\"),\n                    type: 'dropdown',\n                    options: this.store.state.colors,\n                    useValuesAsColors: true,\n                    validation: {\n                        required: {\n                            message: oc.t(\"Select the metric color\"),\n                        }\n                    }\n                },\n                {\n                    property: 'displayTotals',\n                    title: oc.t(\"Display totals\"),\n                    type: 'checkbox'\n                },\n            ],\n            validation: {\n                required: {\n                    message: oc.t(\"Please select metric(s).\"),\n                }\n            }\n        });\n\n        this.propVisible(filter, suppress, 'limit') && configuration.push({\n            tab: oc.t(\"Sorting & Filtering\"),\n            property: 'limit',\n            title: oc.t(\"Limit\"),\n            placeholder: oc.t(\"Display all records\"),\n            type: 'string',\n            validation: {\n                integer: {\n                    allowNegative: false,\n                    message: oc.t(\"Enter a positive number or leave empty to display all records.\"),\n                    min: {\n                        value: 1,\n                        message: oc.t(\"The limit value must be at least 1\")\n                    }\n                }\n            }\n        });\n\n        this.propVisible(filter, suppress, 'empty_dimension_values') && configuration.push({\n            tab: oc.t(\"Sorting & Filtering\"),\n            property: 'empty_dimension_values',\n            group: oc.t(\"Empty values\"),\n            title: oc.t(\"Dimension\"),\n            default: 'not-set',\n            type: 'dropdown',\n            options: {\n                'not-set': oc.t(\"Display [not set]\"),\n                'hide': oc.t(\"Hide\")\n            }\n        });\n\n        this.propVisible(filter, suppress, 'sortBy') && configuration.push({\n            tab: oc.t(\"Sorting & Filtering\"),\n            property: 'sortBy',\n            group: oc.t(\"Sorting\"),\n            title: oc.t(\"Sort by\"),\n            type: 'dropdown',\n            default: 'oc_dimension',\n            placeholder: oc.t(\"Select a dimension and metrics\"),\n            depends: ['dataSource', 'dimension', 'metrics'],\n            dataCacheKeyName: 'ds-sort-by',\n            dataCacheKeyPropertyNames: ['dataSource', 'dimension', 'metrics'],\n            validation: {\n                required: {\n                    message: oc.t(\"Select sorting metric or dimension\"),\n                }\n            }\n        });\n\n        this.propVisible(filter, suppress, 'sortOrder') && configuration.push({\n            tab: oc.t(\"Sorting & Filtering\"),\n            property: 'sortOrder',\n            group: oc.t(\"Sorting\"),\n            title: oc.t(\"Order\"),\n            type: 'dropdown',\n            default: 'asc',\n            options: {\n                asc: oc.t(\"Ascending\"),\n                desc: oc.t(\"Descending\")\n            }\n        });\n\n        this.propVisible(filter, suppress, 'date_interval') && configuration.push({\n            tab: oc.t(\"Sorting & Filtering\"),\n            property: 'date_interval',\n            group: oc.t(\"Date interval\"),\n            title: oc.t(\"Display\"),\n            type: 'dropdown',\n            default: 'dashboard',\n            options: {\n                dashboard: oc.t(\"Dashboard interval\"),\n                year: oc.t(\"This year\"),\n                quarter: oc.t(\"This quarter\"),\n                month: oc.t(\"This month\"),\n                week: oc.t(\"This week\"),\n                hour: oc.t(\"Past hour\"),\n                days: oc.t(\"Past X days\")\n            }\n        });\n\n        this.propVisible(filter, suppress, 'date_interval') && configuration.push({\n            tab: oc.t(\"Sorting & Filtering\"),\n            property: 'date_interval_days',\n            title: oc.t(\"Number of days\"),\n            group: oc.t(\"Date interval\"),\n            placeholder: oc.t(\"1 day (today) if not set\"),\n            type: 'string',\n            visibility: {\n                source_property: 'date_interval',\n                value: 'days'\n            },\n            validation: {\n                integer: {\n                    allowNegative: false,\n                    message: oc.t(\"Enter a positive number\"),\n                    min: {\n                        value: 1,\n                        message: oc.t(\"Enter a positive number\")\n                    }\n                }\n            }\n        });\n\n        this.propVisible(filter, suppress, 'auto_update') && configuration.push({\n            tab: oc.t(\"Sorting & Filtering\"),\n            property: 'auto_update',\n            title: oc.t(\"Refresh every minute\"),\n            type: 'checkbox',\n        });\n\n        this.propVisible(filter, suppress, 'filters') && configuration.push({\n            tab: oc.t(\"Sorting & Filtering\"),\n            property: 'filters',\n            title: oc.t(\"Filters\"),\n            type: 'objectList',\n            titleProperty: 'filter_attribute',\n            formatItemTitle: async (item, obj, parentObj) => this.formatFilterItemTitle(item, obj, parentObj),\n            depends: ['dataSource', 'dimension'],\n            itemProperties: [\n                {\n                    property: 'filter_attribute',\n                    title: oc.t(\"Attribute\"),\n                    type: 'dropdown',\n                    dataCacheKeyName: this.filterAttributeCacheKey,\n                    dataCacheKeyPropertyNames: this.filterAttributeCachePropertyNames,\n                    validation: {\n                        required: {\n                            message: oc.t(\"Select an attribute\")\n                        }\n                    }\n                },\n                {\n                    property: 'operation',\n                    title: oc.t(\"Operation\"),\n                    type: 'dropdown',\n                    options: this.filterOperations,\n                    validation: {\n                        required: {\n                            message: oc.t(\"Select an operation\")\n                        }\n                    }\n                },\n                {\n                    property: 'value_scalar',\n                    title: oc.t(\"Value\"),\n                    type: 'string',\n                    visibility: {\n                        source_property: 'operation',\n                        value: 'one_of',\n                        inverse: true\n                    }\n                },\n                {\n                    property: 'value_array',\n                    title: oc.t(\"Values\"),\n                    type: 'text',\n                    description: oc.t(\"One value per line\"),\n                    visibility: {\n                        source_property: 'operation',\n                        value: 'one_of'\n                    }\n                }\n            ]\n        });\n    }\n\n    async requestOptions(obj, parentObj, property, cacheKey, cachePropertyNames) {\n        var data = Object.assign({}, $.oc.vueUtils.getCleanObject(parentObj), $.oc.vueUtils.getCleanObject(obj));\n        data.inspectorProperty = property;\n\n        const responseData = await this.dataLoader.requestOptions(\n            this.$el,\n            null,\n            this.store.getEventHandler('onInspectableGetOptions'),\n            data,\n            cacheKey,\n            cachePropertyNames\n        );\n\n        if (!Array.isArray(responseData.options)) {\n            throw new Error('onInspectableGetOptions must return an array');\n        }\n\n        const result = {};\n        responseData.options.forEach(item => {\n            result[item.value] = item.title;\n        })\n\n        return result;\n    }\n\n    async formatFilterItemTitle(item, obj, parentObj) {\n        const options = await this.requestOptions(\n            obj,\n            parentObj,\n            'filter_attribute',\n            this.filterAttributeCacheKey,\n            this.filterAttributeCachePropertyNames\n        );\n\n        const attributeName = options[item.filter_attribute];\n        let operationName = this.filterOperations[item.operation];\n        if (typeof operationName === \"string\") {\n            operationName = operationName.toLowerCase();\n        }\n\n        if (item.operation !== 'one_of') {\n            return attributeName + ' ' + operationName + ' \"' + item.value_scalar + '\"';\n        }\n\n        const valueArray = item.value_array\n            .split('\\n')\n            .map(item => item.trim())\n            .filter((item) => item.length > 0);\n\n        return attributeName + ' ' + operationName + ' ' + '[\"'+valueArray.join('\", \"')+'\"]';\n    }\n\n    async formatMetricItemTitle(item, obj, parentObj) {\n        const options = await this.requestOptions(\n            obj,\n            parentObj,\n            'metric',\n            this.metricsCacheKey,\n            this.metricsCachePropertyNames\n        );\n\n        return options[item.metric];\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/assets/js/classes/widget-manager.js",
    "content": "'use strict';\n\nimport Sizing from './sizing.js';\nimport Helpers from './helpers.js';\n\n/**\n * WidgetManager class for dashboard widget creation.\n */\nexport default class WidgetManager\n{\n    constructor() {\n        this.sizing = Sizing.instance();\n        this.helpers = Helpers.instance();\n    }\n\n    static instance() {\n        return this.$instance || (this.$instance = new this);\n    }\n\n    createWidget(store, rows, row, type, defaultConfig, fullWidth) {\n        if (fullWidth && row.widgets.length > 0) {\n            return false;\n        }\n\n        const totalRowWidgetsWidth = this.sizing.totalWidgetsWidth(row.widgets);\n        const availableWidth = this.sizing.totalColumns - totalRowWidgetsWidth;\n\n        if (availableWidth < this.sizing.minWidth) {\n            return false;\n        }\n\n        const newWidgetWidth = fullWidth\n            ? this.sizing.totalColumns\n            : Math.min(availableWidth, 4);\n\n        const configuration = {\n            type: type,\n            reportName: this.helpers.makeCustomReportName()\n        };\n\n        if (typeof defaultConfig === 'object') {\n            Object.assign(configuration, defaultConfig);\n        }\n\n        const newWidget = {\n            _unique_key: this.helpers.makeUniqueKey(rows),\n            configuration: configuration,\n            width: newWidgetWidth,\n        };\n\n        row.widgets.push(newWidget);\n        store.setSystemDataFlag(newWidget, 'needsConfiguration', true)\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/behaviors/DashController.php",
    "content": "<?php namespace Dashboard\\Behaviors;\n\nuse Backend;\nuse BackendAuth;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse Backend\\Classes\\ControllerBehavior;\nuse ApplicationException;\n\n/**\n * DashController adds features for working with dashboard reports. This behavior will include\n * methods for rendering registered dashboards to the controller along with some relevant\n * AJAX handlers.\n *\n * This behavior is implemented in the controller like so:\n *\n *     public $implement = [\n *         \\Dashboard\\Behaviors\\DashController::class,\n *     ];\n *\n *     public $dashConfig = 'config_dash.yaml';\n *\n * The `$dashConfig` property makes reference to the form configuration\n * values as either a YAML file, located in the controller view directory,\n * or directly as a PHP array.\n *\n * @see https://docs.octobercms.com/4.x/extend/dashboards/dash-controller.html Dash Controller Documentation\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DashController extends ControllerBehavior\n{\n    /**\n     * @var const PARAM_DEFINITION postback parameter for the active dashboard name\n     */\n    const PARAM_DEFINITION = '_dash_definition';\n\n    /**\n     * @var string definition code for the active dashboard\n     */\n    protected $definition;\n\n    /**\n     * @var array dashDefinitions are keys for alias and value for configuration.\n     */\n    protected $dashDefinitions;\n\n    /**\n     * @var array dashConfig are keys for alias and value for config objects.\n     */\n    protected $dashConfig = [];\n\n    /**\n     * @var \\Backend\\Classes\\WidgetBase dashWidget reference to the dash widget object.\n     */\n    protected $dashWidget = [];\n\n    /**\n     * @var array requiredProperties in the controller\n     */\n    protected $requiredProperties = ['dashConfig'];\n\n    /**\n     * @var array requiredDashProperties that must exist for each dashboard definition\n     */\n    protected $requiredDashProperties = [];\n\n    /**\n     * @var array requiredConfig values that must exist when applying the primary config file.\n     */\n    protected $requiredConfig = [];\n\n    /**\n     * @var object originalConfig values\n     */\n    protected $originalConfig;\n\n    /**\n     * __construct the behavior\n     * @param \\Backend\\Classes\\Controller $controller\n     */\n    public function __construct($controller)\n    {\n        parent::__construct($controller);\n\n        // Build configuration\n        $this->setConfig($controller->dashConfig ?? [], $this->requiredConfig);\n    }\n\n    /**\n     * validateDash validates the supplied field and initializes the dashboard.\n     * @param string $definition\n     * @return string\n     */\n    protected function validateDash($definition)\n    {\n        $definition = $definition ?: post(self::PARAM_DEFINITION);\n\n        if ($definition && $definition !== $this->definition) {\n            $this->initDash($definition);\n        }\n\n        if (!$definition && !$this->definition) {\n            throw new ApplicationException(__(\"Dash behavior does not contain a definition for [:field]\", ['field' => $definition]));\n        }\n\n        return $definition ?: $this->definition;\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['dashDefinition'] = $this->definition;\n        $this->vars['dashWidget'] = $this->dashWidget;\n    }\n\n    /**\n     * initDash\n     */\n    public function initDash($definition = null)\n    {\n        if ($this->originalConfig === null) {\n            $this->originalConfig = $this->controller->dashGetConfig();\n        }\n\n        if ($definition === null) {\n            $definition = post(self::PARAM_DEFINITION);\n        }\n\n        $this->config = $this->originalConfig;\n        $this->definition = $definition;\n\n        if (!$definition) {\n            return;\n        }\n\n        // Configuration details\n        if (!$this->dashHasDefinition($definition)) {\n            throw new ApplicationException(__(\"Dash behavior does not contain a definition for [:field]\", ['field' => $definition]));\n        }\n\n        $this->config = $this->makeConfig($this->originalConfig->{$definition}, $this->requiredDashProperties);\n\n        // Dash widget\n        if ($this->dashWidget = $this->makeDashWidget()) {\n            $this->dashWidget->bindToController();\n        }\n    }\n\n    /**\n     * dashHasDefinition\n     */\n    public function dashHasDefinition(string $definition): bool\n    {\n        if ($this->originalConfig === null) {\n            $this->config = $this->originalConfig = $this->controller->dashGetConfig();\n        }\n\n        return (bool) ($this->originalConfig->{$definition} ?? false);\n    }\n\n    /**\n     * dashRegisterDefinition registers a new dash dynamically\n     */\n    public function dashRegisterDefinition(string $dashName, array $config)\n    {\n        if ($this->originalConfig === null) {\n            $this->config = $this->originalConfig = $this->controller->dashGetConfig();\n        }\n\n        $this->originalConfig->{$dashName} = $config;\n    }\n\n    /**\n     * dashRender the prepared form markup. This method is usually called from a view file.\n     *\n     *     <?= $this->dashRender('system') ?>\n     *\n     * The first argument supports an array of render options. The supported\n     * options can be found via the `render` method of the Dash widget class.\n     *\n     *     <?= $this->dashRender('system', ['preview' => true]) ?>\n     *\n     * @see Backend\\Widgets\\Form\n     * @param array $options Render options\n     * @return string Rendered HTML for the form.\n     */\n    public function dashRender($definition, $options = [])\n    {\n        if ($definition === null) {\n            $definition = $this->definition;\n        }\n\n        // Initialize\n        $this->validateDash($definition);\n        $this->prepareVars();\n\n        return $this->dashMakePartial('container');\n    }\n\n    /**\n     * dashMakePartial is a controller accessor for making partials within this behavior.\n     * @param string $partial\n     * @param array $params\n     * @return string Partial contents\n     */\n    public function dashMakePartial($partial, $params = [])\n    {\n        $contents = $this->controller->makePartial('dash_'.$partial, $params + $this->vars, false);\n        if (!$contents) {\n            $contents = $this->makePartial($partial, $params);\n        }\n\n        return $contents;\n    }\n\n    /**\n     * dashGetId returns a unique ID for this dash and field combination.\n     * @param string $suffix A suffix to use with the identifier.\n     * @return string\n     */\n    public function dashGetId($suffix = null)\n    {\n        $id = class_basename($this);\n        if ($this->definition) {\n            $id .= '-' . HtmlHelper::nameToId($this->definition);\n        }\n\n        if ($suffix !== null) {\n            $id .= '-' . $suffix;\n        }\n\n        return $this->controller->getId($id);\n    }\n\n    /**\n     * dashGetConfig returns the configuration used by this behavior. You may override this\n     * method in your controller as an alternative to defining a dashConfig property.\n     * @return object|null\n     */\n    public function dashGetConfig()\n    {\n        return $this->config;\n    }\n\n    /**\n     * makeDash prepares the widgets used by this action\n     * @return \\Backend\\Classes\\WidgetBase\n     */\n    protected function makeDashWidget()\n    {\n        $widgetConfig = $this->config;\n        $widgetConfig->canCreateAndEdit = BackendAuth::userHasAccess('dashboard.manage');\n        $widgetConfig->alias = camel_case('dash '.HtmlHelper::nameToId($this->definition));\n        $widgetConfig->code = $this->definition;\n\n        $widget = $this->makeWidget(\\Dashboard\\Widgets\\Dash::class, $widgetConfig);\n\n        return $widget;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/behaviors/dashcontroller/partials/_container.php",
    "content": "<div id=\"<?= $this->dashGetId() ?>\">\n    <input type=\"hidden\" name=\"_dash_definition\" value=\"<?= $dashDefinition ?>\" />\n\n    <?= $dashWidget->render() ?>\n</div>\n"
  },
  {
    "path": "modules/dashboard/classes/CmsDemoTrafficDataGenerator.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Str;\nuse App;\nuse Carbon\\Carbon;\nuse Dashboard\\Models\\TrafficStatisticsPageview;\n\n/**\n * CmsDemoTrafficDataGenerator generates CMS demo traffic data\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsDemoTrafficDataGenerator\n{\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('dashboard.demos.traffic');\n    }\n\n    /**\n     * generate the demo traffic\n     */\n    public function generate()\n    {\n        for ($i = 0; $i < 40; $i++) {\n            $date = Carbon::now()->subDays($i);\n\n            $sineWaveValue = sin((($i % 7) / 7) * 2 * M_PI)*0.3 + rand(10, 20) / 100;\n            $maxPageViews = (int) round((($sineWaveValue + 1) / 2) * 100);\n\n            $randomFactor = rand(95, 105) / 100;\n            $maxPageViews = (int) round($maxPageViews * $randomFactor);\n\n            $recordsExists = TrafficStatisticsPageview::where('ev_date', $date->format('Y-m-d'))->count() > 0;\n            if ($recordsExists) {\n                continue;\n            }\n\n            for ($j = 0; $j < $maxPageViews; $j++) {\n                $pageview = new TrafficStatisticsPageview();\n                $pageview->ev_datetime = $date->format('Y-m-d H:i:s');\n                $pageview->ev_date = $date->toDateString();\n                $pageview->ev_year_month_day = $date->toDateString();\n                $pageview->ev_year = $date->copy()->startOfYear()->toDateString();\n                $pageview->ev_year_quarter  = $date->copy()->startOfQuarter()->toDateString();\n                $pageview->ev_year_month  = $date->copy()->startOfMonth()->toDateString();\n                $pageview->ev_year_week  = $date->copy()->startOfWeek(Carbon::MONDAY)->toDateString();\n                $pageview->ev_timestamp = $date->format('Y-m-d H:i:s');\n                $pageview->user_authenticated = $this->randomBoolean();\n                $pageview->client_id = $this->getClientId();\n                $pageview->first_time_visit = $this->randomBoolean();\n                $pageview->user_agent = $this->randomUserAgent();\n                $pageview->page_path = $this->getPagePath();\n                $pageview->ip = '192.168.1.' . rand(1, 255);\n                list($pageview->country, $pageview->city) = $this->getCountryAndCity();\n                $pageview->referral_domain = $this->getReferralDomain();\n                $pageview->save();\n            }\n        }\n    }\n\n    private function randomBoolean()\n    {\n        return rand(0, 1) === 1;\n    }\n\n    private function randomUserAgent()\n    {\n        $userAgents = [\n            'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0',\n            'Mozilla/5.0 (Macintosh; Intel Mac OS X 13.5; rv:109.0) Gecko/20100101 Firefox/116.0',\n            'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',\n            'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15',\n            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.188'\n        ];\n\n        return $userAgents[array_rand($userAgents)];\n    }\n\n    private function getPagePath()\n    {\n        $paths = [\"/\", \"blog\", \"products/phone\", \"about\", \"contact\"];\n\n        return $this->getWeightedRandom($paths);\n    }\n\n    private function getClientId()\n    {\n        $fixedClientIds = array_map(function ($i) {\n            return 'fixed-client-id' . $i;\n        }, range(1, 20));\n\n        if (rand(1, 100) <= 80) {\n            // 20% of the time, return a pseudo-unique ID\n            return Str::random(64);\n        }\n\n        // 80% of the time, return one of the fixed client IDs\n        return $fixedClientIds[array_rand($fixedClientIds)];\n    }\n\n    private function getCountryAndCity()\n    {\n        $countriesAndCities = [\n            'France' => ['Paris', 'Lyon', 'Marseille'],\n            'Germany' => ['Berlin', 'Munich', 'Hamburg'],\n            'Italy' => ['Rome', 'Milan', 'Naples'],\n            'Spain' => ['Madrid', 'Barcelona', 'Valencia'],\n            'Netherlands' => ['Amsterdam', 'Rotterdam', 'The Hague'],\n            'Sweden' => ['Stockholm', 'Gothenburg', 'Malmo'],\n            'Poland' => ['Warsaw', 'Krakow', 'Lodz'],\n        ];\n\n        $country = $this->getWeightedRandom(array_keys($countriesAndCities));\n        $city = $this->getWeightedRandom($countriesAndCities[$country]);\n\n        return [$country, $city];\n    }\n\n    private function getReferralDomain()\n    {\n        if (!$this->randomBoolean()) {\n            return null;\n        }\n\n        $domains = [\n            'facebook.com', 'twitter.com', 'linkedin.com',\n            'instagram.com', 'nytimes.com', 'bbc.co.uk'\n        ];\n\n        return $domains[array_rand($domains)];\n    }\n\n    private function getWeightedRandom($array)\n    {\n        $weights = [];\n        $totalWeight = 0;\n        foreach ($array as $index => $item) {\n            $weight = count($array) - $index; // More weight for earlier entries\n            $weights[$index] = $weight;\n            $totalWeight += $weight;\n        }\n\n        $randomWeight = mt_rand(1, $totalWeight);\n        $selectedKey = null;\n        foreach ($weights as $key => $weight) {\n            $randomWeight -= $weight;\n            if ($randomWeight <= 0) {\n                $selectedKey = $key;\n                break;\n            }\n        }\n\n        return $array[$selectedKey];\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/CmsReportDataSource.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Db;\nuse Site;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse Dashboard\\Classes\\ReportDataOrderRule;\nuse Dashboard\\Classes\\ReportDataQueryBuilder;\nuse Dashboard\\Classes\\ReportDimension;\nuse Dashboard\\Classes\\ReportDataPaginationParams;\nuse Dashboard\\Classes\\ReportFetchData;\nuse Dashboard\\Classes\\ReportFetchDataResult;\nuse Dashboard\\Classes\\ReportMetric;\nuse Illuminate\\Database\\Query\\Builder;\nuse Carbon\\Carbon;\n\n/**\n * CmsReportDataSource providing information about the website traffic.\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsReportDataSource extends ReportDataSourceBase\n{\n    const DIMENSION_DATE = 'date';\n    const DIMENSION_CITY = 'city';\n    const DIMENSION_PAGE_PATH = 'page_path';\n    const DIMENSION_REFERRAL_DOMAIN = 'referral_domain';\n    const METRIC_PAGEVIEWS = 'pageviews';\n    const METRIC_UNIQUE_VISITORS = 'unique_visitors';\n\n    /**\n     * __construct the data source\n     */\n    public function __construct()\n    {\n        $this->registerDimension(new ReportDimension(\n            ReportDimension::CODE_DATE,\n            'ev_date',\n            \"Date\"\n        ))->setDateIntervalGroupingFields(\n            'ev_year_week',\n            'ev_year_month',\n            'ev_year_quarter',\n            'ev_year'\n        );\n\n        /*\n        $this->registerDimension(new ReportDimension(\n            CmsReportDataSource::DIMENSION_CITY,\n            'city',\n            \"City\"\n        ))->addDimensionField(new ReportDimensionField(\n            'oc_field_country',\n            \"Country\",\n            'country',\n            true,\n            true\n        ));\n        */\n\n        $this->registerDimension(new ReportDimension(\n            CmsReportDataSource::DIMENSION_PAGE_PATH,\n            'page_path',\n            \"Page Path\"\n        ));\n\n        $this->registerDimension(new ReportDimension(\n            CmsReportDataSource::DIMENSION_REFERRAL_DOMAIN,\n            'referral_domain',\n            \"Referral Domain\"\n        ));\n\n        $this->registerMetric(new ReportMetric(\n            self::METRIC_PAGEVIEWS,\n            'id',\n            \"Pageviews\",\n            ReportMetric::AGGREGATE_COUNT\n        ));\n\n        $this->registerMetric(new ReportMetric(\n            self::METRIC_UNIQUE_VISITORS,\n            'client_id',\n            \"Unique Visitors\",\n            ReportMetric::AGGREGATE_COUNT_DISTINCT\n        ));\n    }\n\n    /**\n     * fetchData\n     */\n    protected function fetchData(ReportFetchData $data): ReportFetchDataResult\n    {\n        $reportQueryBuilder = ReportDataQueryBuilder::fromFetchData(\n            $data,\n            'dashboard_traffic_stats_pageviews',\n            'ev_date',\n            'ev_timestamp'\n        );\n\n        $reportQueryBuilder->onConfigureQuery(\n            function(Builder $query, ReportDimension $dimension, array $metrics) {\n                if ($dimension->getCode() === CmsReportDataSource::DIMENSION_CITY) {\n                    $query->addSelect([\n                        Db::raw('max(dashboard_traffic_stats_pageviews.country) as oc_field_country')\n                    ]);\n                }\n\n                if (Site::hasFeature('dashboard_traffic_statistics')) {\n                    $siteId = Site::getEditSite()?->id;\n                    if ($siteId) {\n                        $query->where('dashboard_traffic_stats_pageviews.site_id', $siteId);\n                    }\n                }\n            }\n        );\n\n        return $reportQueryBuilder->getFetchDataResult($data->metricsConfiguration);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/CmsStatusDataSource.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Cms\\Models\\MaintenanceSetting;\nuse Dashboard\\Classes\\ReportData;\nuse Dashboard\\Classes\\ReportFetchDataResult;\nuse Dashboard\\Classes\\ReportFetchData;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse BackendAuth;\nuse Backend;\n\n/**\n * CmsStatusDataSource providing information about the website status.\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CmsStatusDataSource extends ReportDataSourceBase\n{\n    /**\n     * @var string DIMENSION_CMS_INFORMATION\n     */\n    const DIMENSION_CMS_INFORMATION = 'indicator@cms_information';\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        ReportData::addIndicatorMetrics(\n            $this\n                ->addCalculatedDimension(\n                    self::DIMENSION_CMS_INFORMATION,\n                    \"Website status information\"\n                )\n                ->setDefaultWidgetConfig([\n                    'icon' => 'ph ph-power',\n                    'title' => __(\"Website Status\"),\n                    'link_text' => __(\"Manage status\")\n                ])\n        );\n    }\n\n    /**\n     * fetchData\n     */\n    protected function fetchData(ReportFetchData $data): ReportFetchDataResult\n    {\n        $maintenance = MaintenanceSetting::get('is_enabled');\n        $value = $maintenance\n            ? __(\"Maintenance\")\n            : __(\"Online\");\n\n        $iconStatus = $maintenance\n            ? ReportData::INDICATOR_ICON_STATUS_IMPORTANT\n            : ReportData::INDICATOR_ICON_STATUS_SUCCESS;\n\n        $row = $this->makeResultRow($data->dimension, [\n            ReportData::METRIC_VALUE => $value,\n            ReportData::METRIC_INDICATOR_ICON_STATUS => $iconStatus,\n            ReportData::METRIC_LINK_ENABLED => BackendAuth::userHasAccess('cms.themes'),\n            ReportData::METRIC_LINK_HREF => Backend::url('system/settings/update/october/cms/maintenance_settings')\n        ]);\n\n        return new ReportFetchDataResult($row);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/DashManager.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse App;\nuse Backend\\Classes\\WidgetManager;\nuse SystemException;\n\n/**\n * DashManager manages report data sources and widgets.\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DashManager\n{\n    use \\Dashboard\\Classes\\DashManager\\HasDataSources;\n    use \\Dashboard\\Classes\\DashManager\\HasVueReportWidgets;\n\n    /**\n     * @var \\System\\Classes\\WidgetManager widgetManager\n     */\n    protected $widgetManager;\n\n    /**\n     * __construct this class\n     */\n    public function __construct()\n    {\n        $this->widgetManager = WidgetManager::instance();\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('dashboard.dashboards');\n    }\n\n    /**\n     * listAllReportWidgetGroups\n     */\n    public function listAllReportWidgetGroups()\n    {\n        $groups = [];\n        foreach ($this->widgetManager->listReportWidgets() as $className => $widgetInfo) {\n            $group = __($widgetInfo['group'] ?? \"Widgets\");\n            $groups[$group] ??= [];\n\n            $isVueReport = is_subclass_of($className, \\Dashboard\\Classes\\VueReportWidgetBase::class);\n            if ($isVueReport) {\n                $componentName = strtolower(str_replace('\\\\', '-', $className));\n                $groups[$group][] = [\n                    'type' => 'widget',\n                    'label' => __($widgetInfo['label'] ?? \"Unknown\"),\n                    'widgetClass' => $className,\n                    'componentName' => $componentName\n                ];\n            }\n            else {\n                $groups[$group][] = [\n                    'type' => 'static',\n                    'label' => __($widgetInfo['label'] ?? \"Unknown\"),\n                    'widgetClass' => $className\n                ];\n            }\n        }\n\n        return $groups;\n    }\n\n    /**\n     * resolveReportWidget returns a class name from a report widget code\n     * Normalizes a class name or converts an code to its class name.\n     * Returns the class name resolved, or the original name.\n     * @param string $name\n     * @return string\n     */\n    public function resolveReportWidget($name)\n    {\n        return $this->widgetManager->resolveReportWidget($name);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/DashReport.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse October\\Rain\\Element\\Dash\\ReportDefinition;\n\n/**\n * DashReport definition is a translation of the dashboard report configuration\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DashReport extends ReportDefinition\n{\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportData.php",
    "content": "<?php namespace Dashboard\\Classes;\n\n/**\n * ReportData defines common report metrics and helpers\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ReportData\n{\n    const INDICATOR_ICON_STATUS_INFO = 'info';\n    const INDICATOR_ICON_STATUS_SUCCESS = 'success';\n    const INDICATOR_ICON_STATUS_IMPORTANT = 'important';\n    const INDICATOR_ICON_STATUS_DISABLED = 'disabled';\n    const INDICATOR_ICON_STATUS_WARNING = 'warning';\n\n    const METRIC_INDICATOR_ICON_STATUS = 'icon_status';\n    const METRIC_INDICATOR_ICON_COMPLICATION = 'icon_complication';\n\n    const METRIC_VALUE = 'value';\n    const METRIC_LINK_ENABLED = 'link_enabled';\n    const METRIC_LINK_HREF = 'link_href';\n\n    /**\n     * @var string INDICATOR_HREF_POPUP specifies a special type of the Indicator widget link which opens a popup.\n     * The data for the popup is requested from the data source's onGetPopupData\n     * method, which must return an array with the `title` and `content` elements.\n     */\n    const INDICATOR_HREF_POPUP = 'popup';\n\n    const INDICATOR_ICON_COMPLICATION_UP = 'up';\n\n    /**\n     * addIndicatorMetrics adds common indicator widget metrics to a dimension.\n     */\n    public static function addIndicatorMetrics(ReportDimension $dimension)\n    {\n        $dimension\n            ->addCalculatedMetric(ReportData::METRIC_VALUE, \"Value\")\n            ->addCalculatedMetric(ReportData::METRIC_INDICATOR_ICON_STATUS, \"Indicator Icon Status\")\n            ->addCalculatedMetric(ReportData::METRIC_INDICATOR_ICON_COMPLICATION, \"Indicator Icon Complication\")\n            ->addCalculatedMetric(ReportData::METRIC_LINK_ENABLED, \"Link Enabled\")\n            ->addCalculatedMetric(ReportData::METRIC_LINK_HREF, \"Link URL\");\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportDataCacheHelper.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonPeriod;\n\n/**\n * Manages the report data cache.\n */\nclass ReportDataCacheHelper\n{\n    private $nonCacheableFunctions = [\n        ReportMetric::AGGREGATE_AVG,\n        ReportMetric::AGGREGATE_COUNT_DISTINCT\n    ];\n\n    /**\n     * Determines where cache aggregation can be used for the given dimension and metrics.\n     * @param ReportDimension $dimension Specifies the dimension.\n     * @param array $metrics Specifies the metrics.\n     */\n    public function canAggregateCache(ReportDimension $dimension, array $metrics): bool\n    {\n        if ($dimension->getCode() !== ReportDimension::CODE_DATE) {\n            return false;\n        }\n\n        foreach ($metrics as $metric) {\n            if (in_array($metric->getAggregateFunction(), $this->nonCacheableFunctions)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Generates a sequence of date ranges to comprehensively cover the provided date span.\n     * Takes into account existing dates within the range, excluding them and generating\n     * sub-ranges accordingly.\n     *\n     * @param Carbon $dateStart The starting date of the range.\n     * @param Carbon $dateEnd The ending date of the range.\n     * @param array $existingDates An array of date strings that already exist within the date range.\n     * @return CarbonPeriod[] An array of CarbonPeriod objects.\n     */\n    public function generateRanges(Carbon $dateStart, Carbon $dateEnd, $existingDates): array\n    {\n        $ranges = [];\n\n        $period = CarbonPeriod::create($dateStart, $dateEnd);\n        $rangeStartDate = null;\n        foreach ($period as $date) {\n            $dateString = $date->toDateString();\n\n            if (!in_array($dateString, $existingDates)) {\n                if ($rangeStartDate === null) {\n                    $rangeStartDate = $date;\n                }\n            }\n            else {\n                if ($rangeStartDate !== null) {\n                    $ranges[] = CarbonPeriod::create($rangeStartDate, $date->subDay());\n                    $rangeStartDate = null;\n                }\n            }\n        }\n\n        if ($rangeStartDate !== null) {\n            $ranges[] = CarbonPeriod::create($rangeStartDate, $date);\n        }\n\n        return $ranges;\n    }\n\n    /**\n     * Creates a cache key for the given dimension, metrics and dimension filters.\n     * @param string $dataSourceClassName Specifies the data source class name.\n     * @param ReportDimension $dimension Specifies the dimension.\n     * @param ReportMetric[] $metrics Specifies the metrics.\n     * @param array $dimensionFilters Specifies the dimension filters.\n     * @return string The cache key.\n     */\n    public function makeCacheKey(string $dataSourceClassName, ReportDimension $dimension, array $metrics, ?array $dimensionFilters): string\n    {\n        $keys = [];\n        $keys[] = $dataSourceClassName;\n        $keys[] = $dimension->getCacheUniqueCode();\n        foreach ($metrics as $metric) {\n            $keys[] = $metric->getCacheUniqueCode();\n        }\n\n        if ($dimensionFilters !== null) {\n            foreach ($dimensionFilters as $filter) {\n                $keys[] = $filter->getCacheUniqueCode();\n            }\n        }\n\n        return md5(implode('-', $keys));\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportDataOrderRule.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Str;\nuse SystemException;\n\n/**\n * ReportDataOrderRule represents a report data order rule.\n */\nclass ReportDataOrderRule\n{\n    const ATTR_TYPE_DIMENSION = 'dimension';\n    const ATTR_TYPE_METRIC = 'metric';\n    const ATTR_TYPE_DIMENSION_FIELD = 'dimension_field';\n\n    private $dataAttributeType;\n    private $attributeName;\n    private $isAscending;\n\n    /**\n     * __construct a report data order rule.\n     * @param string $dataAttributeType Specifies the data attribute type.\n     * One of the ATTR_TYPE_* constants.\n     * @param string $attributeName Specifies the attribute name, e.g. a metric code.\n     * Must not be null if the data attribute type is ATTR_TYPE_DIMENSION_FIELD or ATTR_TYPE_METRIC.\n     * Must be null if the data attribute type is ATTR_TYPE_DIMENSION.\n     * @param bool $isAscending Specifies if the order is ascending or descending.\n     */\n    public function __construct(string $dataAttributeType, ?string $attributeName = null, bool $isAscending = true)\n    {\n        $knownAttributeTypes = [\n            self::ATTR_TYPE_DIMENSION,\n            self::ATTR_TYPE_METRIC,\n            self::ATTR_TYPE_DIMENSION_FIELD\n        ];\n        if (!in_array($dataAttributeType, $knownAttributeTypes)) {\n            throw new SystemException('Invalid data attribute type. Supported types: ' . implode(', ', $knownAttributeTypes));\n        }\n\n        if (!$attributeName && $dataAttributeType !== self::ATTR_TYPE_DIMENSION) {\n            throw new SystemException('Attribute name cannot be empty for ' . $dataAttributeType . ' data attribute type.');\n        }\n\n        if ($attributeName && $dataAttributeType === self::ATTR_TYPE_DIMENSION) {\n            throw new SystemException('Attribute name must be empty for ' . self::ATTR_TYPE_DIMENSION . ' data attribute type.');\n        }\n\n        if ($dataAttributeType === self::ATTR_TYPE_DIMENSION_FIELD) {\n            ReportDimensionField::validateCode($attributeName);\n        }\n\n        $this->dataAttributeType = $dataAttributeType;\n        $this->attributeName = $attributeName;\n        $this->isAscending = $isAscending;\n    }\n\n    /**\n     * Creates the order rule from a widget configuration.\n     * @param string $sortOrder Specifies the sort order, the allowed values are \"asc\", \"desc\".\n     * @param string $sortBy Specifies the data attribute type and code, e.g. \"oc_dimension\" or \"oc_metric-[metric-code]\"\n     */\n    public static function createFromWidgetConfig(string $sortOrder, string $sortBy)\n    {\n        $isAscending = $sortOrder === 'asc';\n        $dataAttributeType = self::ATTR_TYPE_DIMENSION;\n        $attributeName = null;\n\n        if (Str::startsWith($sortBy, 'oc_metric-')) {\n            $dataAttributeType = self::ATTR_TYPE_METRIC;\n            $attributeName = substr($sortBy, 10);\n        }\n\n        if (Str::startsWith($sortBy, 'oc_field_')) {\n            $dataAttributeType = self::ATTR_TYPE_DIMENSION_FIELD;\n            $attributeName = $sortBy;\n        }\n\n        return new self($dataAttributeType, $attributeName, $isAscending);\n    }\n\n    /**\n     * Returns the data attribute type.\n     * @return string\n     */\n    public function getDataAttributeType()\n    {\n        return $this->dataAttributeType;\n    }\n\n    /**\n     * Returns the attribute name.\n     * @return string\n     */\n    public function getAttributeName()\n    {\n        return $this->attributeName;\n    }\n\n    /**\n     * Returns if the order is ascending or descending.\n     * @return bool\n     */\n    public function isAscending()\n    {\n        return $this->isAscending;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportDataPaginationParams.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse SystemException;\n\n/**\n * ReportDataPaginationParams defines pagination parameters for a data source query\n */\nclass ReportDataPaginationParams\n{\n    private $recordsPerPage;\n    private $currentPage;\n\n    /**\n     * Creates a pagination parameters object.\n     * @param int $recordsPerPage Specifies the number of records per page.\n     * @param int $currentPage Specifies the current page index.\n     */\n    public function __construct(int $recordsPerPage, int $currentPage)\n    {\n        if ($recordsPerPage <= 0) {\n            throw new SystemException('Records per page must be a positive integer');\n        }\n\n        if ($currentPage < 0) {\n            throw new SystemException('Current page must be zero or a positive integer');\n        }\n\n        $this->recordsPerPage = $recordsPerPage;\n        $this->currentPage = $currentPage;\n    }\n\n    /**\n     * Returns the records per page value\n     * @return int\n     */\n    public function getRecordsPerPage(): int\n    {\n        return $this->recordsPerPage;\n    }\n\n    /**\n     * Returns the current page value\n     * @return int\n     */\n    public function getCurrentPage(): int\n    {\n        return $this->currentPage;\n    }\n\n    /**\n     * Returns the first record offset for building an SQL query.\n     * @return int\n     */\n    public function getOffset(): int\n    {\n        return $this->currentPage * $this->recordsPerPage;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportDataQueryBuilder.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Db;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse Illuminate\\Database\\Query\\Builder as QueryBuilder;\nuse Carbon\\Carbon;\nuse SystemException;\n\n/**\n * ReportDataQueryBuilder helps building queries for report data sources.\n *\n * @deprecated Use ReportQueryBuilder instead, which provides a cleaner fluent interface.\n *\n * Example migration:\n *\n * Before:\n *     $builder = new ReportDataQueryBuilder(\n *         'table', $dimension, $metrics, $orderRule, $filters, $limit,\n *         $pagination, $interval, $hideEmpty, $dateStart, $dateEnd,\n *         $timestamp, 'date_col', null, $totalsOnly\n *     );\n *     return $builder->getFetchDataResult($config);\n *\n * After:\n *     return ReportQueryBuilder::fromFetchData($data, 'table')\n *         ->dateColumn('date_col')\n *         ->get($config);\n *\n * @see ReportQueryBuilder\n */\nclass ReportDataQueryBuilder\n{\n    /**\n     * @var string\n     */\n    private $tableName;\n\n    /**\n     * @var ReportDimension\n     */\n    private $dimension;\n\n    /**\n     * @var ReportMetric[]\n     */\n    private $metrics;\n\n    /**\n     * @var ?int\n     */\n    private $limit;\n\n    /**\n     * @var ReportDataOrderRule\n     */\n    private $orderRule;\n\n    /**\n     * @var callable\n     */\n    private $metricsConfigurationCallback;\n\n    /**\n     * @var callable\n     */\n    private $metricConfigurationCallback;\n\n    /**\n     * @var callable\n     */\n    private $configureQueryCallback;\n\n    /**\n     * @var ?ReportDimensionFilter[]\n     */\n    private $dimensionFilters;\n\n    /**\n     * @var ?string\n     */\n    private $groupInterval;\n\n    /**\n     * @var bool\n     */\n    private $hideEmptyDimensionValues;\n\n    /**\n     * @var ?ReportDataPaginationParams\n     */\n    private $paginationParams;\n\n    /**\n     * @var ?Carbon\n     */\n    private $startDate;\n\n    /**\n     * @var ?Carbon\n     */\n    private $endDate;\n\n    /**\n     * @var ?int\n     */\n    private $startTimestamp;\n\n    /**\n     * @var ?string\n     */\n    private $dateColumnName;\n\n    /**\n     * @var ?string\n     */\n    private $timestampColumnName;\n\n    /**\n     * @var bool\n     */\n    private $totalsOnly;\n\n    /**\n     * Creates a new instance of the query builder.\n     * @param string $tableName Specifies the data source table name.\n     * @param ReportDimension $dimension Specifies the dimension.\n     * @param ReportMetric[] $metrics Specifies the metrics.\n     * @param ReportDataOrderRule $orderRule Specifies the data ordering rule.\n     * @param ?ReportDimensionFilter[] $dimensionFilters Specifies the filters to apply to the dimension values.\n     * @param int $limit Specifies the maximum number of records.\n     * @param ?ReportDataPaginationParams $paginationParams Specifies the pagination parameters.\n     * Either $limit or $paginationParams or none can be set.\n     * @param string $groupInterval Specifies the group interval.\n     * One of the ReportDataSourceBase::GROUP_INTERVAL_* constants.\n     * Only applies if the dimension is a date dimension.\n     * If not specified, the default group interval GROUP_INTERVAL_DAY\n     * will be used.\n     * @param bool $hideEmptyDimensionValues Indicates whether empty dimension values must be removed from the dataset.\n     * @param ?Carbon $startDate Specifies the start date.\n     * @param ?Carbon $endDate Specifies the end date.\n     * @param ?int $startTimestamp Optional. Specifies the starting timestamp for relative intervals.\n     * Either $startTimestamp must be set, or both $startDate and $endDate.\n     * @param ?string $dateColumnName Specifies the date column name in $tableName to apply the date interval filter.\n     * If the parameter is null, the date interval filter won't be applied.\n     * @param ?string $timestampColumnName Specifies the timestamp column name in $tableName to apply the relative time filter.\n     * If the parameter is null, the relative time filter won't be applied.\n     * @param bool $totalsOnly Indicates that the method should only return total values for metrics, and not rows.\n     */\n    public function __construct(\n        string $tableName,\n        ReportDimension $dimension,\n        array $metrics,\n        ReportDataOrderRule $orderRule,\n        ?array $dimensionFilters,\n        ?int $limit,\n        ?ReportDataPaginationParams $paginationParams,\n        ?string $groupInterval,\n        bool $hideEmptyDimensionValues,\n        ?Carbon $startDate,\n        ?Carbon $endDate,\n        ?int $startTimestamp,\n        ?string $dateColumnName,\n        ?string $timestampColumnName,\n        bool $totalsOnly\n    ) {\n        if (($startDate || $endDate) && $startTimestamp !== null) {\n            throw new SystemException('Start and end dates cannot be set if the start timestamp is also set.');\n        }\n\n        if (!$startDate && $startTimestamp === null) {\n            throw new SystemException('Either the start and end dates or the start timestamp must be set.');\n        }\n\n        $this->tableName = $tableName;\n        $this->metrics = $metrics;\n        $this->dimension = $dimension;\n        $this->limit = $limit;\n        $this->orderRule = $orderRule;\n        $this->dimensionFilters = $dimensionFilters;\n        $this->groupInterval = $groupInterval;\n        $this->hideEmptyDimensionValues = $hideEmptyDimensionValues;\n        $this->paginationParams = $paginationParams;\n        $this->startDate = $startDate;\n        $this->endDate = $endDate;\n        $this->dateColumnName = $dateColumnName;\n        $this->totalsOnly = $totalsOnly;\n        $this->startTimestamp = $startTimestamp;\n        $this->timestampColumnName = $timestampColumnName;\n    }\n\n    /**\n     * fromFetchData creates a new instance from ReportFetchData.\n     * @param ReportFetchData $data The fetch data containing dimension, metrics, and query parameters.\n     * @param string $tableName Specifies the data source table name.\n     * @param ?string $dateColumnName Specifies the date column name in $tableName to apply the date interval filter.\n     * @param ?string $timestampColumnName Specifies the timestamp column name in $tableName to apply the relative time filter.\n     * @return static\n     */\n    public static function fromFetchData(\n        ReportFetchData $data,\n        string $tableName,\n        ?string $dateColumnName = null,\n        ?string $timestampColumnName = null\n    ): static {\n        return new static(\n            $tableName,\n            $data->dimension,\n            $data->metrics,\n            $data->orderRule,\n            $data->dimensionFilters,\n            $data->limit,\n            $data->paginationParams,\n            $data->groupInterval,\n            $data->hideEmptyDimensionValues,\n            $data->dateStart,\n            $data->dateEnd,\n            $data->startTimestamp,\n            $dateColumnName,\n            $timestampColumnName,\n            $data->totalsOnly\n        );\n    }\n\n    /**\n     * initQuery initializes a Laravel query based on the provided configuration.\n     */\n    public function initQuery(): QueryBuilder\n    {\n        $query = $this->createQueryBuilder();\n\n        if ($this->paginationParams) {\n            $query->limit($this->paginationParams->getRecordsPerPage());\n            $query->offset($this->paginationParams->getOffset());\n        }\n\n        $this->applyOrderRule($query);\n\n        return $query;\n    }\n\n    /**\n     * Fetches the report data based on the initialized query and configuration.\n     *\n     * This method does the following:\n     * 1. Initializes a query using the initQuery method.\n     * 2. Executes the database queries and constructs a ReportFetchDataResult object.\n     * 3. If pagination is set, it also calculates the total number of records.\n     * 4. Computes metric totals based on the given metric configuration.\n     *\n     * This method should be used if no extra configuration is required on the query\n     * returned by the initQuery method. If additional configurations are needed,\n     * create and configure the ReportFetchDataResult object directly, instead of using this method.\n     *\n     * @param ReportMetricConfiguration[] $metricsConfiguration The configuration for the metrics to be fetched.\n     * @param ?string $recordUrlTemplate An optional template for record URLs.\n     * Record URLs are formatted based on the `id` column value of the table specified in the query builder constructor.\n     * A format must have the {id} placeholder, for example, /admin/author/plugin/records/preview/{id}.\n     * The template is used to create the `record_url` column in the result dataset.\n     * @return ReportFetchDataResult A configured object containing the fetched data and additional information about the metrics.\n     */\n    public function getFetchDataResult(array $metricsConfiguration, ?string $recordUrlTemplate = null): ReportFetchDataResult\n    {\n        $query = $this->initQuery();\n\n        if ($recordUrlTemplate) {\n            $tableName = $this->evalDbObjectName($this->tableName);\n            // Using the MAX here to avoid the only_full_group_by error when the\n            // id column is not functionally dependent on columns in GROUP BY clause\n            $query->addSelect(Db::raw(\"MAX({$tableName}.id) as oc_id\"));\n        }\n\n        $records = [];\n        if (!$this->totalsOnly) {\n            $records = $query->get()->toArray();\n\n            if ($recordUrlTemplate) {\n                foreach ($records as $record) {\n                    $record->oc_record_url = str_replace('{id}', $record->oc_id, $recordUrlTemplate);\n                }\n            }\n        }\n\n        $result = new ReportFetchDataResult($records);\n        if ($this->paginationParams) {\n            $result->setTotalRecords($this->getTotalRecords());\n        }\n\n        $result->setMetricTotals($this->getMetricTotals($metricsConfiguration));\n\n        return $result;\n    }\n\n    /**\n     * getTotalRecords returns the total number of unpaginated records.\n     */\n    public function getTotalRecords(): int\n    {\n        $query = $this->createQueryBuilder();\n\n        $wrappedQuery = Db::table(Db::raw(\"({$query->toSql()}) as subquery\"))\n            ->mergeBindings($query)\n        ;\n\n        return $wrappedQuery->count();\n    }\n\n    /**\n     * getMetricTotals returns totals for metric with the metric totals or the relative bar enabled.\n     * @param ReportMetricConfiguration[] $metricsConfiguration\n     * @return array Returns an array of metric total values\n     */\n    public function getMetricTotals(array $metricsConfiguration): array\n    {\n        // Totals use the same query as for dimensions but without grouping or pagination.\n\n        $metrics = [];\n        foreach ($metricsConfiguration as $metricCode => $configuration) {\n            if ($configuration->getDisplayTotals() || $configuration->getDisplayRelativeBar()) {\n                $metric = ReportMetric::findMetricByCode($this->metrics, $metricCode);\n                if (!$metric) {\n                    throw new SystemException(\"Metric not found: $metricCode\");\n                }\n\n                $metrics[] = $metric;\n            }\n        }\n\n        if (!count($metrics)) {\n            return [];\n        }\n\n        $query = $this->createQueryBuilder(true, $metrics);\n        $rows = $query->get()->toArray();\n        if (!count($rows)) {\n            return [];\n        }\n\n        $row = $rows[0];\n        $result = [];\n        foreach ($metrics as $metric) {\n            $columnName = $metric->getDataSetColumName();\n            $result[$metric->getCode()] = $row->{$columnName};\n        }\n\n        return $result;\n    }\n\n    /**\n     * Registers a callback to be called when the query is being built to configure metrics.\n     * Use this method to add joins to the query for metrics that belong to\n     * tables other than the one specified in the constructor.\n     *\n     * @param callable $callback The callback function to register.\n     * The function should have the following signature:\n     *   function(\n     *      Illuminate\\Database\\Query\\Builder $query,\n     *      Backend\\Classes\\ReportDimension $dimension,\n     *      array $metrics\n     *  ): void\n     */\n    public function onConfigureMetrics(callable $callback)\n    {\n        $this->metricsConfigurationCallback = $callback;\n    }\n\n    /**\n     * Registers a callback to be called when the query is being built to configure a specific metric.\n     * Use this method to a metric column to the query. The added metric column name\n     * must have the format oc_metric_[metric code]\n     *\n     * If the callback returns true, the report data query builder doesn't add\n     * any additional SQL for the metric.\n     *\n     * @param callable $callback The callback function to register.\n     * The function should have the following signature:\n     *   function(\n     *      Illuminate\\Database\\Query\\Builder $query,\n     *      Illuminate\\Database\\Query\\ReportMetric $metric,\n     *      Backend\\Classes\\ReportDimension $dimension,\n     *      array $metrics\n     *  ): bool\n     */\n    public function onConfigureMetric(callable $callback)\n    {\n        $this->metricConfigurationCallback = $callback;\n    }\n\n    /**\n     * Registers a callback for the final query configuration.\n     * Use this method to add dimension fields or filters to the query.\n     * The callback must not add pagination filters. The same callback\n     * is used for calculating the total number of unpaginated records.\n     *\n     * @param callable $callback The callback function to register.\n     * The function should have the following signature:\n     *   function(\n     *      Illuminate\\Database\\Query\\Builder $query,\n     *      Backend\\Classes\\ReportDimension $dimension,\n     *      array $metrics\n     *  ): void\n     */\n    public function onConfigureQuery(callable $callback)\n    {\n        $this->configureQueryCallback = $callback;\n    }\n\n    /**\n     * aggregateFunctionToSql\n     */\n    protected function aggregateFunctionToSql(string $function): string\n    {\n        switch ($function) {\n            case ReportMetric::AGGREGATE_AVG:\n                return 'avg(%1$s)';\n                break;\n            case ReportMetric::AGGREGATE_COUNT:\n                return 'count(%1$s)';\n                break;\n            case ReportMetric::AGGREGATE_MAX:\n                return 'max(%1$s)';\n                break;\n            case ReportMetric::AGGREGATE_MIN:\n                return 'min(%1$s)';\n                break;\n            case ReportMetric::AGGREGATE_SUM:\n                return 'sum(%1$s)';\n                break;\n            case ReportMetric::AGGREGATE_COUNT_DISTINCT:\n                return 'count(distinct %1$s)';\n                break;\n            case ReportMetric::AGGREGATE_COUNT_DISTINCT_NOT_NULL:\n                return 'count(distinct case when %1$s is not null then %1$s end)';\n                break;\n            case ReportMetric::AGGREGATE_NONE:\n                return '%1$s';\n                break;\n            default:\n                throw new SystemException('Invalid aggregate function: ' . $function);\n        }\n    }\n\n    /**\n     * evalDbObjectName is a point to check object names for validity\n     */\n    protected function evalDbObjectName(string $name)\n    {\n        return trim($name);\n    }\n\n    /**\n     * applyOrderRule\n     */\n    protected function applyOrderRule(QueryBuilder $query)\n    {\n        $columnName = null;\n        $dataAttributeType = $this->orderRule->getDataAttributeType();\n        switch ($dataAttributeType) {\n            case ReportDataOrderRule::ATTR_TYPE_DIMENSION:\n                $columnName = $this->dimension->getLabelColumnName() ?: $this->dimension->getDatabaseColumnName();\n\n                // In case date grouping is used we need to use the aliased column name (i.e. oc_dimension)\n                if ($this->dimension->isDate() && $this->groupInterval !== ReportDataSourceBase::GROUP_INTERVAL_FULL) {\n                    $columnName = $this->dimension->getDataSetColumName();\n                }\n                break;\n            case ReportDataOrderRule::ATTR_TYPE_METRIC:\n                $metric = ReportMetric::findMetricByCodeStrict(\n                    $this->metrics,\n                    $this->orderRule->getAttributeName()\n                );\n                $columnName = $metric->getDataSetColumName();\n                break;\n            case ReportDataOrderRule::ATTR_TYPE_DIMENSION_FIELD:\n                $field = $this->dimension->findDimensionFieldByCode(\n                    $this->orderRule->getAttributeName()\n                );\n\n                $columnName = $field->getCode();\n\n                break;\n            default:\n                throw new SystemException('Invalid order rule data attribute type: ' . $dataAttributeType);\n                break;\n        }\n\n        $query->orderBy($this->evalDbObjectName($columnName), $this->orderRule->isAscending() ? 'asc' : 'desc');\n    }\n\n    /**\n     * applyFilters\n     */\n    protected function applyFilters(QueryBuilder $query)\n    {\n        if (!$this->dimensionFilters) {\n            return;\n        }\n\n        foreach ($this->dimensionFilters as $dimensionFilter) {\n            $this->applyFilter($query, $dimensionFilter);\n        }\n    }\n\n    /**\n     * applyFilter\n     */\n    protected function applyFilter(QueryBuilder $query, ReportDimensionFilter $dimensionFilter)\n    {\n        $columnName = null;\n        switch ($dimensionFilter->getDataAttributeType()) {\n            case ReportDimensionFilter::ATTR_TYPE_DIMENSION:\n                $columnName = $this->dimension->getLabelColumnName();\n                if ($columnName === null) {\n                    $columnName = $this->dimension->getDatabaseColumnName();\n                }\n\n                break;\n            case ReportDimensionFilter::ATTR_TYPE_DIMENSION_FIELD:\n                $field = $this->dimension->findDimensionFieldByCode(\n                    $dimensionFilter->getAttributeName()\n                );\n\n                $fieldDbColumnName = $field->getColumnName();\n                if ($fieldDbColumnName === null) {\n                    $fieldDbColumnName = $field->getCode();\n                }\n\n                $columnName = $fieldDbColumnName;\n                break;\n        }\n\n        $columnName = $this->evalDbObjectName($columnName);\n        $operation = $dimensionFilter->getOperation();\n\n        $relationalOperations = [\n            ReportDimensionFilter::OPERATION_EQUALS,\n            ReportDimensionFilter::OPERATION_MORE_OR_EQUALS,\n            ReportDimensionFilter::OPERATION_LESS_OR_EQUALS,\n            ReportDimensionFilter::OPERATION_MORE,\n            ReportDimensionFilter::OPERATION_LESS,\n        ];\n\n        if (in_array($operation, $relationalOperations)) {\n            $query->where($columnName, $operation, $dimensionFilter->getValue());\n            return;\n        }\n\n        if ($operation === ReportDimensionFilter::OPERATION_STARTS_WITH) {\n            $query->where($columnName, 'like', $dimensionFilter->getValue() . '%');\n            return;\n        }\n\n        if ($operation === ReportDimensionFilter::OPERATION_STRING_INCLUDES) {\n            $query->where($columnName, 'like', '%' . $dimensionFilter->getValue() . '%');\n            return;\n        }\n\n        if ($operation === ReportDimensionFilter::OPERATION_ONE_OF) {\n            $query->whereIn($columnName, $dimensionFilter->getValue());\n            return;\n        }\n\n        throw new SystemException('Invalid filter operation: ' . $operation);\n    }\n\n    /**\n     * createQueryBuilder\n     */\n    protected function createQueryBuilder(bool $forceSkipGrouping = false, array $forceMetrics = []): QueryBuilder\n    {\n        $query = Db::table($this->tableName);\n\n        $skipGrouping =\n            $forceSkipGrouping ||\n            ($this->dimension->isDate() && $this->groupInterval === ReportDataSourceBase::GROUP_INTERVAL_FULL);\n\n        $columns = [];\n        if (!$skipGrouping) {\n            $dimensionColumnName = $this->dimension->getDatabaseColumnName();\n            $dimensionColumnName = $this->evalDbObjectName($dimensionColumnName);\n            $dimensionColumnName = $this->makeDateDimensionGroupingColumnName($dimensionColumnName);\n\n            $columns[] = Db::raw(\n                $dimensionColumnName . ' AS ' . $this->dimension->getDataSetColumName()\n            );\n\n            if ($this->hideEmptyDimensionValues) {\n                // We need to use whereRaw here to avoid escaping the column name in case it is a complex expression (e.g. when date grouping is used)\n                $query->whereRaw(\"$dimensionColumnName is not null\");\n            }\n\n            $dimensionLabelColumnName = $this->dimension->getLabelColumnName();\n            if ($dimensionLabelColumnName !== null) {\n                $dimensionLabelColumnName = $this->evalDbObjectName($dimensionLabelColumnName);\n\n                // For date dimensions with interval grouping, wrap in MAX() to avoid\n                // ONLY_FULL_GROUP_BY error since the label column isn't in GROUP BY\n                if ($this->dimension->isDate() && $this->groupInterval !== ReportDataSourceBase::GROUP_INTERVAL_FULL) {\n                    $columns[] = Db::raw(\n                        'MAX(' . $dimensionLabelColumnName . ') AS oc_dimension_label'\n                    );\n                }\n                else {\n                    $columns[] = Db::raw(\n                        $dimensionLabelColumnName . ' AS oc_dimension_label'\n                    );\n                }\n            }\n        }\n\n        $metrics = $forceMetrics ? $forceMetrics : $this->metrics;\n\n        foreach ($metrics as $metric) {\n            $metricConfiguredManually = false;\n            if ($this->metricConfigurationCallback) {\n                $metricConfiguredManually = call_user_func(\n                    $this->metricConfigurationCallback,\n                    $query,\n                    $metric,\n                    $this->dimension,\n                    $this->metrics\n                );\n            }\n\n            if ($metricConfiguredManually) {\n                continue;\n            }\n\n            $aggregateFunction = $this->aggregateFunctionToSql($metric->getAggregateFunction());\n            $columnName = $metric->getDatabaseColumnName();\n            $columnName = $this->evalDbObjectName($columnName);\n            $metricColumnName = $this->evalDbObjectName($metric->getDataSetColumName());\n            $aggregateFunctionFinal = sprintf($aggregateFunction, $columnName);\n            $columns[] = Db::raw(\n                sprintf(\n                    '%s as %s',\n                    $aggregateFunctionFinal,\n                    $metricColumnName\n                )\n            );\n        }\n\n        if ($this->metricsConfigurationCallback) {\n            call_user_func($this->metricsConfigurationCallback, $query, $this->dimension, $this->metrics);\n        }\n\n        if ($this->configureQueryCallback) {\n            call_user_func($this->configureQueryCallback, $query, $this->dimension, $this->metrics);\n        }\n\n        $query->addSelect($columns);\n\n        if (!$skipGrouping) {\n            $query->groupBy(Db::raw($this->dimension->getDataSetColumName()));\n        }\n\n        if ($this->limit !== null && $this->paginationParams) {\n            throw new SystemException('Limit and pagination parameters cannot be both set.');\n        }\n\n        if ($this->limit) {\n            $query->limit($this->limit);\n        }\n\n        $this->applyFilters($query);\n\n        if ($this->dateColumnName && $this->startDate !== null) {\n            $query->whereBetween($this->dateColumnName, [\n                $this->startDate->startOfDay()->toDateTimeString(),\n                $this->endDate->endOfDay()->toDateTimeString()\n            ]);\n        }\n\n        if ($this->timestampColumnName && $this->startTimestamp !== null) {\n            $startTimestampDate = gmdate('Y-m-d H:i:s', $this->startTimestamp);\n            $query->where($this->timestampColumnName, '>=', $startTimestampDate);\n        }\n\n        return $query;\n    }\n\n    /**\n     * makeDateDimensionGroupingColumnName\n     */\n    protected function makeDateDimensionGroupingColumnName(string $dimensionColumnName): string\n    {\n        if (!$this->dimension->isDate()) {\n            return $dimensionColumnName;\n        }\n\n        $driver = Db::getDriverName();\n\n        switch ($this->groupInterval) {\n            case ReportDataSourceBase::GROUP_INTERVAL_DAY:\n                return $driver === 'pgsql'\n                    ?  \"$dimensionColumnName::date\"\n                    : \"DATE(`$dimensionColumnName`)\";\n\n            case ReportDataSourceBase::GROUP_INTERVAL_WEEK:\n                $field = $this->dimension->getWeekGroupingField();\n                if ($field !== null) {\n                    return $this->evalDbObjectName($field);\n                }\n                return \"DATE_FORMAT(DATE_ADD(`$dimensionColumnName`, INTERVAL -WEEKDAY(`$dimensionColumnName`) DAY), '%Y-%m-%d')\";\n\n            case ReportDataSourceBase::GROUP_INTERVAL_MONTH:\n                $field = $this->dimension->getMonthGroupingField();\n                if ($field !== null) {\n                    return $this->evalDbObjectName($field);\n                }\n                return \"DATE_FORMAT(`$dimensionColumnName`, '%Y-%m-01')\";\n\n            case ReportDataSourceBase::GROUP_INTERVAL_QUARTER:\n                $field = $this->dimension->getQuarterGroupingField();\n                if ($field !== null) {\n                    return $this->evalDbObjectName($field);\n                }\n                return \"MAKEDATE(YEAR(`$dimensionColumnName`), 1) + INTERVAL (QUARTER(`$dimensionColumnName`) - 1) QUARTER\";\n\n            case ReportDataSourceBase::GROUP_INTERVAL_YEAR:\n                $field = $this->dimension->getYearGroupingField();\n                if ($field !== null) {\n                    return $this->evalDbObjectName($field);\n                }\n                return \"DATE_FORMAT(`$dimensionColumnName`, '%Y-01-01')\";\n        }\n\n        return $dimensionColumnName;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportDataSourceBase.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Dashboard\\Classes\\ReportDataOrderRule;\nuse Dashboard\\Classes\\ReportDataPaginationParams;\nuse Dashboard\\Classes\\ReportDateDataSet;\nuse Dashboard\\Classes\\ReportDimension;\nuse Dashboard\\Classes\\ReportDimensionFilter;\nuse Dashboard\\Classes\\ReportFetchDataResult;\nuse Dashboard\\Classes\\ReportFetchData;\nuse Dashboard\\Classes\\ReportMetric;\nuse Dashboard\\Classes\\ReportMetricConfiguration;\nuse Dashboard\\Models\\ReportDataCache;\nuse Carbon\\CarbonPeriod;\nuse Carbon\\Carbon;\nuse SystemException;\n\n/**\n * ReportDataSourceBase class are used by report widgets to get their data.\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class ReportDataSourceBase\n{\n    use \\System\\Traits\\ViewMaker;\n\n    const GROUP_INTERVAL_DAY = 'day';\n    const GROUP_INTERVAL_WEEK = 'week';\n    const GROUP_INTERVAL_MONTH = 'month';\n    const GROUP_INTERVAL_QUARTER = 'quarter';\n    const GROUP_INTERVAL_YEAR = 'year';\n    const GROUP_INTERVAL_FULL = 'full';\n\n    private $knownGroupIntervals = [\n        self::GROUP_INTERVAL_DAY,\n        self::GROUP_INTERVAL_WEEK,\n        self::GROUP_INTERVAL_MONTH,\n        self::GROUP_INTERVAL_QUARTER,\n        self::GROUP_INTERVAL_YEAR,\n        self::GROUP_INTERVAL_FULL\n    ];\n\n    /**\n     * @var ReportDimension[]|null Cache of registered dimensions.\n     */\n    private $dimensions = null;\n\n    /**\n     * @var ReportMetric[] Cache of common registered metrics.\n     */\n    private $metrics = [];\n\n    /**\n     * getData returns the data for the specified report.\n     */\n    public function getData(ReportFetchData $data): ReportFetchDataResult\n    {\n        if ($data->limit !== null && $data->paginationParams) {\n            throw new SystemException('Limit and pagination parameters cannot be both set.');\n        }\n\n        if (($data->dateStart || $data->dateEnd) && $data->startTimestamp !== null) {\n            throw new SystemException('Start and end dates cannot be set if the start timestamp is also set.');\n        }\n\n        if (!$data->dateStart && $data->startTimestamp === null) {\n            throw new SystemException('Either the start and end dates or the start timestamp must be set.');\n        }\n\n        $dimension = ReportDimension::findDimensionByCode(\n            $this->getAvailableDimensions(),\n            $data->dimensionCode\n        );\n\n        $metrics = [];\n        foreach ($data->metricCodes as $metricCode) {\n            $metric = ReportMetric::findMetricByCodeStrict(\n                $dimension->getAvailableMetrics(),\n                $metricCode,\n                false\n            );\n\n            if (!$metric) {\n                $metric = ReportMetric::findMetricByCodeStrict(\n                    $this->getAvailableMetrics(),\n                    $metricCode\n                );\n            }\n\n            $metrics[] = $metric;\n        }\n\n        $this->assertValidOrderRule($data->orderRule, $dimension);\n        $this->assertValidFilters($data->dimensionFilters, $dimension);\n\n        $groupInterval = $this->validateDateGroupInterval($data->groupInterval, $dimension);\n\n        $data->metrics = $metrics;\n        $data->dimension = $dimension;\n        $data->groupInterval = $groupInterval;\n\n        $fetchResult = $this->fetchData($data);\n\n        if ($dimension->isDate() && $data->dateStart) {\n            $range = CarbonPeriod::create($data->dateStart, $data->dateEnd);\n            $dataset = new ReportDateDataSet($dimension, $metrics, $range, $data->orderRule, $groupInterval, $fetchResult->getRows());\n            $rows = $dataset->aggregateData($groupInterval);\n            $fetchResult->setRows($rows);\n        }\n\n        return $fetchResult;\n    }\n\n    /**\n     * getAvailableDimensions returns the available dimensions for this data source.\n     * Dimensions are attributes of data, e.g. date or \"page_path\".\n     * @return ReportDimension[]\n     */\n    public function getAvailableDimensions(): array\n    {\n        if ($this->dimensions === null) {\n            throw new SystemException('The dimensions are not registered in ' . get_class($this));\n        }\n\n        return $this->dimensions;\n    }\n\n    /**\n     * getAvailableMetrics returns the available metrics for this data source.\n     * Metrics are measures of data, e.g. \"page views\".\n     * @return ReportMetric[]\n     */\n    public function getAvailableMetrics(): array\n    {\n        return $this->metrics;\n    }\n\n    /**\n     * runHandler runs a data source event handler.\n     * @param string $handlerName The name of the handler.\n     * @return mixed The data to pass to the client-side handler caller.\n     */\n    public function runHandler(string $handlerName)\n    {\n        if (!preg_match('/^on/i', $handlerName)) {\n            throw new SystemException('Invalid data source handler name ' . $handlerName);\n        }\n\n        if (!method_exists($this, $handlerName)) {\n            throw new SystemException('Data source handler method doesn\\'t exist ' . $handlerName);\n        }\n\n        return $this->$handlerName();\n    }\n\n    /**\n     * registerDimension registers a new dimension.\n     * @param ReportDimension $dimension Dimension to register\n     * @return ReportDimension Returns the added dimension, for chaining\n     */\n    protected function registerDimension(ReportDimension $dimension): ReportDimension\n    {\n        if ($this->dimensions === null) {\n            $this->dimensions = [];\n        }\n\n        $knownDimension = array_filter(\n            $this->dimensions,\n            fn ($item) => $item->getCode() === $dimension->getCode()\n        );\n\n        if (count($knownDimension)) {\n            throw new SystemException('The dimension is already registered: ' . $dimension->getCode());\n        }\n\n        return $this->dimensions[] = $dimension;\n    }\n\n    /**\n     * addCalculatedDimension is a shorthand version of registerDimension.\n     * Adds a calculated dimension that doesn't have a corresponding database column.\n     * @param string $code Specifies the dimension referral code.\n     * For special dimension types, the code should begin with the respective type prefix,\n     * for instance, `indicator@`. These special dimension types are defined by the\n     * ReportDimension::TYPE_XXX constants.\n     * @param string $displayName Specifies the dimension name used in reports.\n     * @return ReportDimension Returns the added dimension, for chaining.\n     */\n    protected function addCalculatedDimension(string $code, string $displayName)\n    {\n        return $this->registerDimension(new ReportDimension(\n            $code,\n            $code,\n            $displayName\n        ));\n    }\n\n    /**\n     * registerMetric registers a new common metric.\n     * Common metrics can be used with any dimension provided by the data source.\n     */\n    protected function registerMetric(ReportMetric $metric)\n    {\n        $knownMetric = array_filter(\n            $this->metrics,\n            fn ($item) => $item->getCode() === $metric->getCode()\n        );\n\n        if (count($knownMetric)) {\n            throw new SystemException('The metric is already registered: ' . $metric->getCode());\n        }\n\n        $this->metrics[] = $metric;\n    }\n\n    /**\n     * fetchData returns the data for the specified report.\n     */\n    abstract protected function fetchData(ReportFetchData $data): ReportFetchDataResult;\n\n    /**\n     * makeResultRow helps format a result row expected in the fetchData return value.\n     * @param ReportDimension $dimension Dimension corresponding to the data row.\n     * @param array $metricsAndValues An associative array of metric codes and values.\n     * The array key is the metric code. The method doesn't check if dimensions exist\n     * in the data source.\n     * @return array Returns a properly formatted data row\n     */\n    protected function makeResultRow(ReportDimension $dimension, array $metricsAndValues)\n    {\n        $result = [\n            'oc_dimension' => $dimension->getCode()\n        ];\n\n        foreach ($metricsAndValues as $metricCode => $value) {\n            if (!is_string($metricCode)) {\n                throw new SystemException('Metric code must be a string.');\n            }\n\n            $result['oc_metric_'.$metricCode] = $value;\n        }\n\n        return [(object) $result];\n    }\n\n    /**\n     * Validates the specified group interval.\n     * @param string $groupInterval Specifies the group interval.\n     * @param ReportDimension $dimension Specifies the dimension to group the data by.\n     * @return ?string Returns the validated group interval.\n     */\n    private function validateDateGroupInterval(?string $groupInterval, ReportDimension $dimension): ?string\n    {\n        if (!$groupInterval && $dimension->isDate()) {\n            $groupInterval = self::GROUP_INTERVAL_DAY;\n        }\n\n        if ($groupInterval && !$dimension->isDate()) {\n            return null;\n        }\n\n        if ($groupInterval && !in_array($groupInterval, $this->knownGroupIntervals)) {\n            throw new SystemException(\"Invalid group interval: {$groupInterval}\");\n        }\n\n        return $groupInterval;\n    }\n\n    /**\n     * assertValidOrderRule\n     */\n    private function assertValidOrderRule(?ReportDataOrderRule $orderRule, ReportDimension $dimension)\n    {\n        if ($orderRule && $orderRule->getDataAttributeType() === ReportDataOrderRule::ATTR_TYPE_DIMENSION_FIELD) {\n            $dimensionField = $dimension->findDimensionFieldByCode($orderRule->getAttributeName());\n            if (!$dimensionField->getIsSortable()) {\n                $fieldCode = $dimensionField->getCode();\n                throw new SystemException(\"Dimension field {$fieldCode} is not sortable.\");\n            }\n        }\n    }\n\n    /**\n     * assertValidFilters\n     */\n    private function assertValidFilters(array $filters, ReportDimension $dimension)\n    {\n        foreach ($filters as $filter) {\n            if ($filter->getDataAttributeType() !== ReportDataOrderRule::ATTR_TYPE_DIMENSION_FIELD) {\n                continue;\n            }\n\n            $dimensionField = $dimension->findDimensionFieldByCode($filter->getAttributeName());\n            if (!$dimensionField->getIsFilterable()) {\n                $fieldCode = $dimensionField->getCode();\n                throw new SystemException(\"Dimension field {$fieldCode} is not filterable.\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportDateDataSet.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse Carbon\\CarbonPeriod;\nuse Carbon\\Carbon;\nuse SystemException;\nuse stdClass;\n\n/**\n * ReportDateDataSet represents a data set for a date dimension.\n */\nclass ReportDateDataSet\n{\n    /**\n     * @var ReportDimension\n     */\n    private $dimension;\n\n    /**\n     * @var ReportMetric[]\n     */\n    private $metrics;\n\n    /**\n     * @var CarbonPeriod\n     */\n    private $range;\n\n    /**\n     * @var array\n     */\n    private $values;\n\n    /**\n     * @var ?ReportDataOrderRule\n     */\n    private $orderRule;\n\n    /**\n     * @var string\n     */\n    private $groupInterval;\n\n    /**\n     * @param ReportDimension $dimension Specifies the dimension of the data set.\n     * @param ReportMetric[] $metrics Specifies the data metrics.\n     * @param CarbonPeriod $range Specifies the date range.\n     * @param string $groupInterval Specifies the group interval.\n     * One of the ReportDataSourceBase::GROUP_INTERVAL_* constants.\n     * @param array $values Data values.\n     * @param ?ReportDataOrderRule $orderRule Specifies the data ordering rule.\n     */\n    public function __construct(\n        ReportDimension $dimension,\n        array $metrics,\n        CarbonPeriod $range,\n        ?ReportDataOrderRule $orderRule,\n        string $groupInterval,\n        array $values\n    ) {\n        $this->dimension = $dimension;\n        $this->metrics = $metrics;\n        $this->range = $range;\n        $this->values = $values;\n        $this->orderRule = $orderRule;\n        $this->groupInterval = $groupInterval;\n    }\n\n    /**\n     * Adds values to the dataset\n     * @param array $values Data values to add.\n     */\n    public function addValues(array $values)\n    {\n        $this->values = [...$this->values, ...$values];\n    }\n\n    /**\n     * Adds values loaded from a cache\n     * @param array $values Values to add\n     */\n    public function addValuesFromCache(array $values)\n    {\n        foreach ($values as $valueArray) {\n            $this->values[] = (object)$valueArray;\n        }\n    }\n\n    /**\n     * Adds missing data points and properties.\n     * @return array Returns the normalized data.\n     */\n    public function getNormalizedData(): array\n    {\n        $result = [];\n\n        $columnNames = $this->getColumnNames();\n\n        foreach ($this->range as $date) {\n            $reportDate = $date->toDateString();\n            $dataPoint = $this->getDataPoint($reportDate);\n\n            if ($dataPoint) {\n                $dataPoint = $this->addMissingColumns($dataPoint, $columnNames);\n            }\n            else {\n                if (!$this->isStartOfGroupInterval($date)) {\n                    continue;\n                }\n\n                $dataPoint = $this->makeNoDataObject($columnNames, $reportDate);\n            }\n\n            $result[$reportDate] = $dataPoint;\n        }\n\n        if ($this->orderRule && $this->orderRule->getDataAttributeType() === ReportDataOrderRule::ATTR_TYPE_DIMENSION) {\n            $orderRule = $this->orderRule;\n            $dimensionColumnName = $this->dimension->getDataSetColumName();\n            usort($result, function ($a, $b) use ($orderRule, $dimensionColumnName) {\n                $valueA = $a->$dimensionColumnName;\n                $valueB = $b->$dimensionColumnName;\n\n                $result = strcmp($valueA, $valueB);\n                if (!$orderRule->isAscending()) {\n                    $result *= -1;\n                }\n\n                return $result;\n            });\n        }\n\n        $this->sortDataArray($result);\n        return $result;\n    }\n\n    /**\n     * Aggregates metric values in the dataset.\n     * @param string $groupInterval Specifies the group interval.\n     * One of the ReportDataSourceBase::GROUP_INTERVAL_* constants.\n     */\n    public function aggregateData(string $groupInterval): array\n    {\n        $values = $this->getNormalizedData();\n        if ($groupInterval === ReportDataSourceBase::GROUP_INTERVAL_DAY) {\n            // Values are already aggregated by day.\n            return $values;\n        }\n\n        $dimensionColumnName = $this->dimension->getDataSetColumName();\n        $columnNames = $this->getColumnNames(true);\n        $metricAggregateFunctions = $this->getMetricAggregateFunctions();\n\n        $result = [];\n        foreach ($values as $dataPoint) {\n            $dimensionValue = $dataPoint->$dimensionColumnName;\n            $dimensionDate = Carbon::parse($dimensionValue);\n            $aggregationSetName = $this->getAggregationSetName($dimensionDate, $groupInterval);\n\n            if (!array_key_exists($aggregationSetName, $result)) {\n                $result[$aggregationSetName] = $this->makeNoDataObject($columnNames, $aggregationSetName);\n            }\n\n            $this->addMetricValuesToAggregationSet(\n                $result[$aggregationSetName],\n                $columnNames,\n                $metricAggregateFunctions,\n                $dataPoint\n            );\n        }\n\n        return array_values($result);\n    }\n\n    private function getDataPoint(string $dimensionValue): ?object\n    {\n        $columnName = $this->dimension->getDataSetColumName();\n        foreach ($this->values as $valueObject) {\n            if ($valueObject->$columnName === $dimensionValue) {\n                return $valueObject;\n            }\n        }\n\n        return null;\n    }\n\n    private function getColumnNames($excludeDimension = false): array\n    {\n        $result = [];\n        if (!$excludeDimension) {\n            $result[] = $this->dimension->getDataSetColumName();\n        }\n\n        foreach ($this->metrics as $metric) {\n            $result[] = $metric->getDataSetColumName();\n        }\n\n        return $result;\n    }\n\n    private function addMissingColumns(object $value, array $columnNames): object\n    {\n        $result = $value;\n\n        foreach ($columnNames as $columnName) {\n            if (!property_exists($value, $columnName)) {\n                $result->$columnName = null;\n            }\n        }\n\n        return $result;\n    }\n\n    private function makeNoDataObject(array $columnNames, string $dimensionValue): object\n    {\n        $result = new stdClass();\n        foreach ($columnNames as $column) {\n            $result->$column = null;\n        }\n\n        $dimensionColumnName = $this->dimension->getDataSetColumName();\n        $result->$dimensionColumnName = $dimensionValue;\n\n        return $result;\n    }\n\n    private function sortDataArray(array &$result)\n    {\n        if (!$this->orderRule || $this->orderRule->getDataAttributeType() !== ReportDataOrderRule::ATTR_TYPE_DIMENSION) {\n            return;\n        }\n\n        $orderRule = $this->orderRule;\n        $dimensionColumnName = $this->dimension->getDataSetColumName();\n        usort($result, function ($a, $b) use ($orderRule, $dimensionColumnName) {\n            $valueA = $a->$dimensionColumnName;\n            $valueB = $b->$dimensionColumnName;\n\n            $cmp = strcmp($valueA, $valueB);\n            if (!$orderRule->isAscending()) {\n                $cmp *= -1;\n            }\n\n            return $cmp;\n        });\n    }\n\n    private function getAggregationSetName(Carbon $date, string $interval)\n    {\n        switch ($interval) {\n            case ReportDataSourceBase::GROUP_INTERVAL_FULL:\n                return 'all';\n            case ReportDataSourceBase::GROUP_INTERVAL_DAY:\n                return $date->toDateString();\n            case ReportDataSourceBase::GROUP_INTERVAL_WEEK:\n                $date->startOfWeek(Carbon::MONDAY);\n                return $date->toDateString();\n            case ReportDataSourceBase::GROUP_INTERVAL_MONTH:\n                return $date->startOfMonth()->toDateString();\n            case ReportDataSourceBase::GROUP_INTERVAL_QUARTER:\n                return $date->startOfQuarter()->toDateString();\n            case ReportDataSourceBase::GROUP_INTERVAL_YEAR:\n                return $date->startOfYear()->toDateString();\n            default:\n                throw new SystemException('Invalid interval: '.$interval);\n        }\n    }\n\n    private function getMetricAggregateFunctions(): array\n    {\n        $result = [];\n        foreach ($this->metrics as $metric) {\n            $function = $metric->getAggregateFunction();\n            $result[$metric->getDataSetColumName()] = $function;\n        }\n\n        return $result;\n    }\n\n    private function addMetricValuesToAggregationSet(\n        object $aggregationSet,\n        array $columnNames,\n        array $metricAggregateFunctions,\n        object $dataPoint\n    ) {\n        foreach ($columnNames as $columnName) {\n            $aggregatedValue = $aggregationSet->$columnName;\n            $metricValue = $dataPoint->$columnName;\n\n            if (!array_key_exists($columnName, $metricAggregateFunctions)) {\n                throw new SystemException('Invalid metric column name: '.$columnName);\n            }\n\n            $aggregateFunction = $metricAggregateFunctions[$columnName];\n            switch ($aggregateFunction) {\n                case ReportMetric::AGGREGATE_COUNT:\n                    if ($metricValue !== null) {\n                        $aggregatedValue = $aggregatedValue === null ? 1 : $aggregatedValue + 1;\n                    }\n                    break;\n                case ReportMetric::AGGREGATE_MAX:\n                        $aggregatedValue = $aggregatedValue === null ? $metricValue : max($aggregatedValue, $metricValue);\n                    break;\n                case ReportMetric::AGGREGATE_MIN:\n                        $aggregatedValue = $aggregatedValue === null ? $metricValue : min($aggregatedValue, $metricValue);\n                    break;\n                case ReportMetric::AGGREGATE_SUM:\n                        $aggregatedValue = $aggregatedValue === null ? $metricValue : $aggregatedValue + $metricValue;\n                    break;\n                default:\n                    throw new SystemException('Invalid aggregate function: '.$aggregateFunction);\n            }\n\n            $aggregationSet->$columnName = $aggregatedValue;\n        }\n    }\n\n    private function isStartOfGroupInterval(Carbon $date): bool\n    {\n        if ($this->groupInterval === ReportDataSourceBase::GROUP_INTERVAL_WEEK) {\n            return $date->dayOfWeek === Carbon::MONDAY;\n        }\n\n        if ($this->groupInterval === ReportDataSourceBase::GROUP_INTERVAL_MONTH) {\n            return $date->day === 1;\n        }\n\n        if ($this->groupInterval === ReportDataSourceBase::GROUP_INTERVAL_QUARTER) {\n            return $date->day == 1 && in_array($date->month, [1, 4, 7, 10]);\n        }\n\n        if ($this->groupInterval === ReportDataSourceBase::GROUP_INTERVAL_YEAR) {\n            return $date->month === 1 && $date->day === 1;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportDimension.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse SystemException;\n\n/**\n * ReportDimension represents a report data source dimension.\n */\nclass ReportDimension\n{\n    /**\n     * @var string CODE_DATE date code must be used for date-based dimensions\n     */\n    const CODE_DATE = 'date';\n\n    /**\n     * @var string TYPE_INDICATOR defines a dimension to be used with the Indicator dashboard widget.\n     * Dimensions of this type have metrics that can fully configure the Indicator widget.\n     * Indicator dimensions cannot be used with widget types other than the Indicator.\n     */\n    const TYPE_INDICATOR = 'indicator';\n\n    /**\n     * @var string Specifies the dimension referral code.\n     */\n    private $code;\n\n    /**\n     * @var string Specifies the column name in the data source table.\n     */\n    private $databaseColumnName;\n\n    /**\n     * @var string Specifies the dimension name used in reports.\n     */\n    private $displayName;\n\n    /**\n     * @var ReportDimensionField[] Specifies the fields in this dimension.\n     */\n    private $dimensionFields = [];\n\n    /**\n     * @var ReportMetric[] Metrics belonging to the data source.\n     */\n    private $metrics = [];\n\n    /**\n     * @var ?string Optional dimension type\n     */\n    private $dimensionType;\n\n    /**\n     * The name of the column containing week start dates.\n     *\n     * @var ?string\n     */\n    private $weekGroupingField;\n\n    /**\n     * The name of the column containing month start dates.\n     *\n     * @var ?string\n     */\n    private $monthGroupingField;\n\n    /**\n     * The name of the column containing quarter start dates.\n     *\n     * @var ?string\n     */\n    private $quarterGroupingField;\n\n    /**\n     * The name of the column containing year start dates.\n     *\n     * @var ?string\n     */\n    private $yearGroupingField;\n\n    /**\n     * Holds the default configuration values for widgets.\n     *\n     * @var array\n     */\n    private $defaultWidgetConfig = [];\n\n    /**\n     * @var ?string Specifies the dimension label column name.\n     */\n    private $labelColumnName;\n\n    /**\n     * Creates a new dimension instance.\n     * @param string $code Specifies the dimension referral code.\n     * For special dimension types, the code should begin with the respective type prefix,\n     * for instance, `indicator@`. These special dimension types are defined by the\n     * ReportDimension::TYPE_XXX constants.\n     * @param string $databaseColumnName Specifies the column name in the data source table.\n     * Dimension columns typically match the primary key in the dimension table.\n     * @param string $displayName Specifies the dimension name used in reports, e.g., \"Product\".\n     * @param ?string $labelColumnName Specifies the name of the column for the dimension label.\n     * Use this column to provide a user-friendly label for the dimension, e.g., \"product_name\".\n     * If this argument is not provided, the value of $databaseColumnName is used as the dimension label.\n     */\n    public function __construct(\n        string $code,\n        string $databaseColumnName,\n        string $displayName,\n        ?string $labelColumnName = null\n    ) {\n        if (!strlen($code)) {\n            throw new SystemException('The dimension code cannot be empty.');\n        }\n\n        if (!strlen($databaseColumnName)) {\n            throw new SystemException('The database column name cannot be empty.');\n        }\n\n        if (!strlen($displayName)) {\n            throw new SystemException('The display name cannot be empty.');\n        }\n\n        $knownTypes = [\n            ReportDimension::TYPE_INDICATOR\n        ];\n\n        $dimensionType = null;\n        $codeParts = explode('@', $code);\n        if (count($codeParts) === 2) {\n            $dimensionType = $codeParts[0];\n        }\n\n        if ($dimensionType !== null && !in_array($dimensionType, $knownTypes)) {\n            throw new SystemException('Unknown dimension type: ' . $dimensionType);\n        }\n\n        $this->code = $code;\n        $this->databaseColumnName = $databaseColumnName;\n        $this->displayName = $displayName;\n        $this->dimensionType = $dimensionType;\n        $this->labelColumnName = $labelColumnName;\n    }\n\n    /**\n     * Adds a field to this dimension.\n     * @param ReportDimensionField $field Specifies the field to add.\n     * @return $this Returns the dimension object for method chaining.\n     */\n    public function addDimensionField(ReportDimensionField $field): ReportDimension\n    {\n        if ($this->isDate()) {\n            throw new SystemException('Date dimensions cannot have fields.');\n        }\n\n        $this->dimensionFields[] = $field;\n        return $this;\n    }\n\n    /**\n     * Allows setting of custom field names for building queries that group data by week, month, quarter, and year intervals.\n     * If the fields are not set, ReportDataQueryBuilder will use SQL functions to deduce interval start dates\n     * from the dimension column value. This approach is less efficient than using indexed columns.\n     * The names specified in the arguments must refer to columns containing start dates for the corresponding\n     * intervals in the YYYY-MM-DD format. For example, the year column should contain values like 2023-01-01, 2024-01-01, etc.\n     *\n     * @param string $weekField The name of the column containing week start dates.\n     * @param string $monthField The name of the column containing month start dates.\n     * @param string $quarterField The name of the column containing quarter start dates.\n     * @param string $yearField The name of the column containing year start dates.\n     */\n    public function setDateIntervalGroupingFields(string $weekField, string $monthField, string $quarterField, string $yearField)\n    {\n        $this->weekGroupingField = $weekField;\n        $this->monthGroupingField = $monthField;\n        $this->quarterGroupingField = $quarterField;\n        $this->yearGroupingField = $yearField;\n    }\n\n    /**\n     * Gets the name of the column containing week start dates.\n     *\n     * @return string\n     */\n    public function getWeekGroupingField(): ?string\n    {\n        return $this->weekGroupingField;\n    }\n\n    /**\n     * Gets the name of the column containing month start dates.\n     *\n     * @return string\n     */\n    public function getMonthGroupingField(): ?string\n    {\n        return $this->monthGroupingField;\n    }\n\n    /**\n     * Gets the name of the column containing quarter start dates.\n     *\n     * @return string\n     */\n    public function getQuarterGroupingField(): ?string\n    {\n        return $this->quarterGroupingField;\n    }\n\n    /**\n     * Gets the name of the column containing year start dates.\n     *\n     * @return string\n     */\n    public function getYearGroupingField(): ?string\n    {\n        return $this->yearGroupingField;\n    }\n\n    /**\n     * Registers a dimension metric.\n     * @param ReportMetric $metric A metric to add.\n     * @return ReportDimension Returns the dimension object for chaining.\n     */\n    public function addDimensionMetric(ReportMetric $metric): ReportDimension\n    {\n        $knownMetric = array_filter(\n            $this->metrics,\n            fn ($item) => $item->getCode() === $metric->getCode()\n        );\n\n        if (count($knownMetric)) {\n            throw new SystemException('The dimension metric is already registered: ' . $metric->getCode());\n        }\n\n        $this->metrics[] = $metric;\n        return $this;\n    }\n\n    /**\n     * A shorthand version of addDimensionMetric.\n     * Adds a calculated metric that doesn't work with the database.\n     * @param string $displayName Metric display name for the UI.\n     * @return ReportDimension Returns the dimension object for chaining.\n     */\n    public function addCalculatedMetric(string $metricCode, string $displayName): ReportDimension\n    {\n        return $this->addDimensionMetric(new ReportMetric(\n            $metricCode,\n            $metricCode,\n            $displayName,\n            ReportMetric::AGGREGATE_NONE\n        ));\n    }\n\n    /**\n     * Returns the available metrics for this dimension.\n     * @return ReportMetric[]\n     */\n    public function getAvailableMetrics(): array\n    {\n        return $this->metrics;\n    }\n\n    /**\n     * Returns the dimension display name.\n     * @return string\n     */\n    public function getDisplayName(): string\n    {\n        return $this->displayName;\n    }\n\n    /**\n     * Returns the dimension type.\n     * @return ?string\n     */\n    public function getDimensionType(): ?string\n    {\n        return $this->dimensionType;\n    }\n\n    /**\n     * Returns fields of the dimension.\n     * @return ReportDimensionField[] Returns fields of the dimension.\n     */\n    public function getDimensionFields(): array\n    {\n        return $this->dimensionFields;\n    }\n\n    /**\n     * Returns the dimension code.\n     * @return string Returns the dimension code.\n     */\n    public function getCode(): string\n    {\n        return $this->code;\n    }\n\n    /**\n     * Checks if this is a date dimension.\n     * @return bool Returns true if this is a date dimension.\n     */\n    public function isDate(): bool\n    {\n        return $this->code === self::CODE_DATE;\n    }\n\n    /**\n     * Returns the database column name for this dimension.\n     * @return string Returns the database column name.\n     */\n    public function getDatabaseColumnName(): string\n    {\n        return $this->databaseColumnName;\n    }\n\n    /**\n     * Returns the dimension label column name.\n     * @return ?string Returns the dimension label column name.\n     */\n    public function getLabelColumnName(): ?string\n    {\n        return $this->labelColumnName;\n    }\n\n    /**\n     * Finds a dimension by its code.\n     * @param ReportDimension[] $availableDimensions Specifies the list of available dimensions.\n     * @param string $dimensionCode The code of the dimension to find.\n     * @param ?bool $strict If true, throws an exception when the dimension cannot be found. Defaults to true.\n     * @return ?ReportDimension Returns the found dimension.\n     */\n    public static function findDimensionByCode(array $availableDimensions, string $dimensionCode, ?bool $strict = true): ?ReportDimension\n    {\n        $dimension = array_filter(\n            $availableDimensions,\n            fn($item) => $item->getCode() === $dimensionCode\n        );\n\n        if (!count($dimension)) {\n            if ($strict) {\n                throw new SystemException('Unknown dimension specified: '.$dimensionCode);\n            }\n\n            return null;\n        }\n\n        return array_shift($dimension);\n    }\n\n    /**\n     * Finds a dimension field by its code.\n     * @param string $dimensionFieldCode\n     * @return ReportDimensionField\n     */\n    public function findDimensionFieldByCode(string $dimensionFieldCode): ReportDimensionField\n    {\n        $dimension = array_filter(\n            $this->dimensionFields,\n            fn($item) => $item->getCode() === $dimensionFieldCode\n        );\n\n        if (!count($dimension)) {\n            throw new SystemException('Unknown dimension field specified: '.$dimensionFieldCode);\n        }\n\n        return array_shift($dimension);\n    }\n\n    /**\n     * Returns code unique for this dimension to be used as a part of a cache key.\n     * @return string\n     */\n    public function getCacheUniqueCode(): string\n    {\n        $result = $this->getCode() . $this->getDatabaseColumnName();\n        foreach ($this->dimensionFields as $field) {\n            $result .= $field->getCode();\n        }\n\n        return $result;\n    }\n\n    /**\n     * Returns a query column name corresponding to this dimension.\n     * @return string\n     */\n    public function getDataSetColumnName(): string\n    {\n        return 'oc_dimension';\n    }\n\n    /**\n     * @deprecated Use getDataSetColumnName() instead\n     */\n    public function getDataSetColumName(): string\n    {\n        return $this->getDataSetColumnName();\n    }\n\n    /**\n     * Allows setting default widget configuration values.\n     * The configuration is used for widgets created from this dimension\n     * through the quick widget creation feature. Currently, the future supports\n     * indicator-type dimensions only.\n     *\n     * @param array $config A name-value list of configuration parameters.\n     * All property names should be strings, and values should be scalar. The currently\n     * supported parameters are:\n     * - icon: Sets the default indicator icon CSS class.\n     * - title: Sets the default widget title.\n     * - link_text: Sets the default indicator link text.\n     * @return ReportDimension Returns the dimension object for chaining.\n     */\n    public function setDefaultWidgetConfig(array $config)\n    {\n        foreach ($config as $key => $value) {\n            if (!is_string($key) || empty($key) || !is_scalar($value)) {\n                throw new SystemException(\"Invalid configuration. All keys must be non-empty strings and values must be scalar.\");\n            }\n        }\n\n        $this->defaultWidgetConfig = $config;\n        return $this;\n    }\n\n    /**\n     * getDefaultWidgetConfig returns the default widget configuration.\n     */\n    public function getDefaultWidgetConfig(): array\n    {\n        return $this->defaultWidgetConfig;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportDimensionField.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse SystemException;\n\n/**\n * ReportDimensionField represents a report data source dimension field.\n */\nclass ReportDimensionField\n{\n    /**\n     * @var string Specifies the field referral code.\n     */\n    private $code;\n\n    /**\n     * @var string Specifies the field name to use in reports.\n     */\n    private $displayName;\n\n    /**\n     * @var ?string Optional database column name.\n     */\n    private $columnName;\n\n    /**\n     * @var bool Specifies if the field is sortable.\n     */\n    private $sortable;\n\n    /**\n     * @var bool Specifies if the field is filterable\n     */\n    private $filterable;\n\n    /**\n     * Creates a new dimension field.\n     * @param string $code Specifies the field referral code.\n     * @param string $displayName Specifies the field name to use in reports.\n     * @param ?string $columnName Optional database column name for filtering or sorting.\n     * Provide the column name if the column added to the SELECT statement cannot be\n     * used directly, such as when it involves an aggregation function.\n     * @param bool $sortable Specifies if the field is sortable.\n     * @param bool $filterable Specifies if the field is filterable.\n     */\n    public function __construct(\n        string $code,\n        string $displayName,\n        ?string $columnName = null,\n        bool $sortable = false,\n        bool $filterable = false\n    ) {\n        if (!strlen($code)) {\n            throw new SystemException('The dimension field code cannot be empty.');\n        }\n\n        self::validateCode($code);\n\n        if (!strlen($displayName)) {\n            throw new SystemException('Display name cannot be empty.');\n        }\n\n        $this->displayName = $displayName;\n        $this->sortable = $sortable;\n        $this->filterable = $filterable;\n        $this->code = $code;\n        $this->columnName = $columnName;\n    }\n\n    /**\n     * Returns the dimension field code.\n     * @return string Returns the dimension field code.\n     */\n    public function getCode(): string\n    {\n        return $this->code;\n    }\n\n    /**\n     * Returns a query column name corresponding to this dimension field.\n     * @return string\n     */\n    public function getDataSetColumnName(): string\n    {\n        return $this->getCode();\n    }\n\n    /**\n     * @deprecated Use getDataSetColumnName() instead\n     */\n    public function getDataSetColumName(): string\n    {\n        return $this->getDataSetColumnName();\n    }\n\n    /**\n     * Returns the database column name if it was provided in the constructor.\n     * @return ?string\n     */\n    public function getColumnName(): ?string\n    {\n        return $this->columnName;\n    }\n\n    /**\n     * Validates a dimension field code.\n     * @throws SystemException if the code is invalid.\n     */\n    public static function validateCode(string $code)\n    {\n        if (!preg_match('/^oc_field_[a-z][a-zA-Z0-9_]*$/', $code)) {\n            throw new SystemException('The dimension field code must have the oc_field_ prefix\n                and can only contain Latin letters, numbers and underscores.');\n        }\n    }\n\n    /**\n     * Determines if the field is sortable\n     * @return bool Returns true if the field is sortable.\n     */\n    public function getIsSortable()\n    {\n        return $this->sortable;\n    }\n\n    /**\n     * Determines if the field is filterable\n     * @return bool Returns true if the field is filterable\n     */\n    public function getIsFilterable()\n    {\n        return $this->filterable;\n    }\n\n    /**\n     * Returns the dimension field display name.\n     * @return string\n     */\n    public function getDisplayName(): string\n    {\n        return $this->displayName;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportDimensionFilter.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse SystemException;\n\n/**\n * ReportDimensionFilter represents a report data source dimension filter.\n *\n * Dimension filters allow to limit the data source results by applying\n * a filter to a specific dimension or a dimension field values.\n */\nclass ReportDimensionFilter\n{\n    const ATTR_TYPE_DIMENSION = 'dimension';\n    const ATTR_TYPE_DIMENSION_FIELD = 'dimension_field';\n\n    const OPERATION_EQUALS = '=';\n    const OPERATION_MORE_OR_EQUALS = '>=';\n    const OPERATION_LESS_OR_EQUALS = '<=';\n    const OPERATION_MORE = '>';\n    const OPERATION_LESS = '<';\n    const OPERATION_STARTS_WITH = 'string_starts_with';\n    const OPERATION_STRING_INCLUDES = 'string_includes';\n    const OPERATION_ONE_OF = 'one_of';\n\n    private $dataAttributeType;\n    private $attributeName;\n    private $operation;\n    private $value;\n\n    /**\n     * Creates a report data dimension filter.\n     * @param string $dataAttributeType Specifies the data attribute type.\n     * One of the ATTR_TYPE_* constants.\n     * @param ?string $attributeName Specifies the attribute name, e.g. a dimension field code.\n     * Must not be null if the data attribute type is ATTR_TYPE_DIMENSION_FIELD.\n     * Must be null if the data attribute type is ATTR_TYPE_DIMENSION.\n     * @param bool $operation Specifies the filter operation.\n     * One of the OPERATION_* constants.\n     * @param string|array|int|float|bool $value Specifies the filter value.\n     */\n    public function __construct(string $dataAttributeType, ?string $attributeName, string $operation, string|array|int|float|bool $value)\n    {\n        $knownAttributeTypes = [\n            self::ATTR_TYPE_DIMENSION,\n            self::ATTR_TYPE_DIMENSION_FIELD\n        ];\n        if (!in_array($dataAttributeType, $knownAttributeTypes)) {\n            throw new SystemException('Invalid data attribute type. Supported types: ' . implode(', ', $knownAttributeTypes));\n        }\n\n        if (!strlen($attributeName) && $dataAttributeType !== self::ATTR_TYPE_DIMENSION) {\n            throw new SystemException('Attribute name cannot be empty for ' . $dataAttributeType . ' data attribute type.');\n        }\n\n        if (strlen($attributeName) && $dataAttributeType === self::ATTR_TYPE_DIMENSION) {\n            throw new SystemException('Attribute name must be empty for ' . self::ATTR_TYPE_DIMENSION . ' data attribute type.');\n        }\n\n        if ($dataAttributeType === self::ATTR_TYPE_DIMENSION_FIELD) {\n            ReportDimensionField::validateCode($attributeName);\n        }\n\n        $knownOperations = [\n            self::OPERATION_EQUALS,\n            self::OPERATION_MORE_OR_EQUALS,\n            self::OPERATION_LESS_OR_EQUALS,\n            self::OPERATION_MORE,\n            self::OPERATION_LESS,\n            self::OPERATION_STARTS_WITH,\n            self::OPERATION_STRING_INCLUDES,\n            self::OPERATION_ONE_OF\n        ];\n\n        if (!in_array($operation, $knownOperations)) {\n            throw new SystemException('Invalid filter operation. Supported types: ' . implode(', ', $knownOperations));\n        }\n\n        if ($operation === self::OPERATION_ONE_OF && !is_array($value)) {\n            throw new SystemException('Value must be of type array for ' . self::OPERATION_ONE_OF . ' operation.');\n        } elseif ($operation !== self::OPERATION_ONE_OF && is_array($value)) {\n            throw new SystemException('Value cannot be of type array for ' . $operation . ' operation.');\n        }\n\n        $this->dataAttributeType = $dataAttributeType;\n        $this->attributeName = $attributeName;\n        $this->operation = $operation;\n        $this->value = $value;\n    }\n\n    /**\n     * Get the data attribute type\n     *\n     * @return string\n     */\n    public function getDataAttributeType(): string\n    {\n        return $this->dataAttributeType;\n    }\n\n    /**\n     * Get the attribute name\n     *\n     * @return string\n     */\n    public function getAttributeName(): ?string\n    {\n        return $this->attributeName;\n    }\n\n    /**\n     * Get the operation\n     *\n     * @return string\n     */\n    public function getOperation(): string\n    {\n        return $this->operation;\n    }\n\n    /**\n     * Get the value\n     *\n     * @return string|array\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Returns code unique for this filter to be used as a part of a cache key.\n     * @return string\n     */\n    public function getCacheUniqueCode(): string\n    {\n        $result = $this->getDataAttributeType() . $this->getDataAttributeType() . $this->getOperation();\n\n        if (!is_array($this->value)) {\n            $result .= $this->value;\n        }\n        else {\n            foreach ($this->value as $value) {\n                $result .= $value;\n            }\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportFetchData.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Dashboard\\Widgets\\Dash;\nuse Dashboard\\Classes\\DashReport;\nuse Dashboard\\Classes\\ReportDataOrderRule;\nuse Dashboard\\Classes\\ReportDataPaginationParams;\nuse Dashboard\\Classes\\ReportDateDataSet;\nuse Dashboard\\Classes\\ReportDimension;\nuse Dashboard\\Classes\\ReportDimensionFilter;\nuse Dashboard\\Classes\\ReportPeriodCalculator;\nuse Dashboard\\Classes\\ReportFetchDataResult;\nuse Dashboard\\Classes\\ReportMetric;\nuse Dashboard\\Classes\\ReportMetricConfiguration;\nuse Dashboard\\Models\\ReportDataCache;\nuse Carbon\\CarbonPeriod;\nuse Carbon\\Carbon;\nuse SystemException;\n\n/**\n * ReportFetchData represents the report data for fetching.\n */\nclass ReportFetchData\n{\n    /**\n     * @var DashReport dashReport element\n     */\n    public $dashReport;\n\n    /**\n     * @var array widgetConfig\n     */\n    public $widgetConfig;\n\n    /**\n     * @var array extraData\n     */\n    public $extraData;\n\n    /**\n     * @var ReportDimension dimension specifies the dimension to group the data by.\n     */\n    public $dimension;\n\n    /**\n     * @var string dimensionCode specifies the dimension to group the data by.\n     */\n    public $dimensionCode;\n\n    /**\n     * @var ReportMetric[] metrics specifies the metrics to return.\n     */\n    public $metrics;\n\n    /**\n     * @var array metricCodes specifies the metrics to return.\n     */\n    public $metricCodes;\n\n    /**\n     * @var ReportMetricConfiguration[] metricsConfiguration specifies the report metrics configuration.\n     */\n    public $metricsConfiguration;\n\n    /**\n     * @var Carbon dateStart specifies the start date.\n     */\n    public $dateStart;\n\n    /**\n     * @var Carbon dateEnd specifies the end date.\n     */\n    public $dateEnd;\n\n    /**\n     * @var Carbon dateStart specifies the start date.\n     */\n    public $compareDateStart;\n\n    /**\n     * @var Carbon dateEnd Specifies the end date.\n     */\n    public $compareDateEnd;\n\n    /**\n     * @var int startTimestamp Optional. Specifies the starting timestamp for relative intervals.\n     * Either $startTimestamp must be set, or both $dateStart and $dateEnd.\n     */\n    public $startTimestamp;\n\n    /**\n     * @var ReportDimensionFilter[] dimensionFilters specifies the filters to apply to the dimension values.\n     */\n    public $dimensionFilters;\n\n    /**\n     * @var string groupInterval specifies the group interval.\n     * One of the GROUP_INTERVAL_* constants.\n     * Only applies if the dimension is a date dimension.\n     * If not specified, the default group interval GROUP_INTERVAL_DAY will be used.\n     */\n    public $groupInterval;\n\n    /**\n     * @var ReportDataOrderRule orderRule specifies the data ordering rule.\n     */\n    public $orderRule;\n\n    /**\n     * @var int limit specifies the maximum number of records to return.\n     */\n    public $limit;\n\n    /**\n     * @var ReportDataPaginationParams paginationParams specifies the pagination parameters.\n     * Either $limit or $paginationParams or none can be set.\n     */\n    public $paginationParams;\n\n    /**\n     * @var bool hideEmptyDimensionValues indicates whether empty dimension values must be\n     * removed from the dataset.\n     */\n    public $hideEmptyDimensionValues;\n\n    /**\n     * @var ReportDataCache reportDataCache specifies the cache to use.\n     */\n    public $reportDataCache;\n\n    /**\n     * @var bool totalsOnly indicates that the method should only return total values\n     * for metrics, and not rows.\n     */\n    public $totalsOnly = false;\n\n    /**\n     * @var bool resetCache indicates that the cache should be reset.\n     */\n    public $resetCache = false;\n\n    /**\n     * fillFromPost\n     */\n    public function fillFromPost()\n    {\n        $this->widgetConfig = (array) post('widget_config');\n        $this->extraData = (array) post('extra_data', []);\n\n        $this->dimensionCode = post('dimension');\n        $this->metricCodes = post('metrics');\n        $this->groupInterval = post('aggregation_interval');\n        $this->resetCache = (bool) post('reset_cache');\n\n        $this->limit = !empty($this->widgetConfig['limit']) ? (int) $this->widgetConfig['limit'] : null;\n        $this->hideEmptyDimensionValues = $this->widgetConfig['empty_dimension_values'] ?? null === 'hide';\n\n        [$this->dateStart, $this->dateEnd, $this->startTimestamp] = $this->getRequestedDateInterval(post('date_start'), post('date_end'));\n        [$this->compareDateStart, $this->compareDateEnd] = $this->getRequestedCompareInterval(post('compare'));\n\n        $this->orderRule = $this->makeRequestedOrderRule();\n        $this->paginationParams = $this->getRequestedPaginationParams();\n        $this->metricsConfiguration = $this->getRequestedMetricsConfiguration();\n        $this->dimensionFilters = $this->getRequestedWidgetFilters();\n\n        $this->reportDataCache = new ReportDataCache;\n    }\n\n    /**\n     * makeCompareData\n     */\n    public function makeCompareData()\n    {\n        if (!$this->compareDateStart || !$this->compareDateEnd) {\n            return null;\n        }\n\n        $compare = clone $this;\n        $compare->dateStart = $this->compareDateStart;\n        $compare->dateEnd = $this->compareDateEnd;\n        return $compare;\n    }\n\n    /**\n     * getRequestedDateInterval\n     */\n    protected function getRequestedDateInterval(?string $dashboardDateStart, ?string $dashboardDateEnd): array\n    {\n        $widgetInterval = isset($this->widgetConfig['date_interval'])\n            ? $this->widgetConfig['date_interval']\n            : Dash::INTERVAL_TYPE_DASHBOARD;\n\n        $dateStart = null;\n        $startTimestamp = null;\n        $dateEnd = Carbon::now();\n\n        switch ($widgetInterval) {\n            case Dash::INTERVAL_TYPE_DASHBOARD:\n                $dateStart = Carbon::parse($dashboardDateStart);\n                $dateEnd = Carbon::parse($dashboardDateEnd);\n                break;\n            case Dash::INTERVAL_TYPE_YEAR:\n                $dateStart = Carbon::now()->startOfYear();\n                break;\n            case Dash::INTERVAL_TYPE_QUARTER:\n                $dateStart = Carbon::now()->startOfQuarter();\n                break;\n            case Dash::INTERVAL_TYPE_MONTH:\n                $dateStart = Carbon::now()->startOfMonth();\n                break;\n            case Dash::INTERVAL_TYPE_WEEK:\n                $dateStart = Carbon::now()->startOfWeek(Carbon::MONDAY); // TODO\n                break;\n            case Dash::INTERVAL_TYPE_HOUR:\n                $dateEnd = null;\n                $startTimestamp = time() - 3600;\n                break;\n            case Dash::INTERVAL_TYPE_DAYS:\n                $days = isset($this->widgetConfig['date_interval_days'])\n                    ? $this->widgetConfig['date_interval_days']\n                    : 1;\n                $dateStart = Carbon::now()->subDays($days - 1);\n                break;\n            default:\n                throw new SystemException(\"Unknown widget report interval {$widgetInterval}\");\n        }\n\n        return [\n            $dateStart,\n            $dateEnd,\n            $startTimestamp\n        ];\n    }\n\n    /**\n     * getRequestedCompareInterval\n     */\n    protected function getRequestedCompareInterval(?string $compare): array\n    {\n        if (!$compare) {\n            return [null, null];\n        }\n\n        if (!$this->dateStart && $this->dateEnd) {\n            return [null, null];\n        }\n\n        if (!in_array($compare, ['prev-period', 'prev-year'])) {\n            throw new SystemException('Invalid compare specifier');\n        }\n\n        $periodCalculator = new ReportPeriodCalculator;\n\n        if ($compare === 'prev-period') {\n            $range = $periodCalculator->getPreviousPeriod($this->dateStart, $this->dateEnd);\n        }\n        else {\n            $range = $periodCalculator->getPreviousPeriodLastYear($this->dateStart, $this->dateEnd);\n        }\n\n        if (!$range) {\n            return [null, null];\n        }\n\n        return [$range->getStartDate(), $range->getEndDate()];\n    }\n\n    /**\n     * makeRequestedOrderRule\n     */\n    protected function makeRequestedOrderRule(): ReportDataOrderRule\n    {\n        if (\n            !array_key_exists('sortBy', $this->widgetConfig) ||\n            !array_key_exists('sortOrder', $this->widgetConfig)\n        ) {\n            return new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION);\n        }\n\n        $sortBy = $this->widgetConfig['sortBy'];\n        $sortOrder = $this->widgetConfig['sortOrder'];\n        return ReportDataOrderRule::createFromWidgetConfig($sortOrder, $sortBy);\n    }\n\n    /**\n     * getRequestedPaginationParams\n     */\n    protected function getRequestedPaginationParams(): ?ReportDataPaginationParams\n    {\n        if (empty($this->widgetConfig['records_per_page'])) {\n            return null;\n        }\n\n        if (!array_key_exists('current_page', $this->extraData)) {\n            throw new SystemException('Current page is not set for a paginated query');\n        }\n\n        return new ReportDataPaginationParams(\n            (int) $this->widgetConfig['records_per_page'],\n            (int) $this->extraData['current_page']\n        );\n    }\n\n    /**\n     * getRequestedMetricsConfiguration\n     */\n    protected function getRequestedMetricsConfiguration(): array\n    {\n        if (!$this->metricCodes) {\n            return [];\n        }\n\n        $result = [];\n\n        foreach ($this->metricCodes as $metricCode) {\n            $result[$metricCode] = $this->findMetricInWidgetConfig($metricCode, $this->widgetConfig);\n        }\n\n        return $result;\n    }\n\n    /**\n     * findMetricInWidgetConfig\n     */\n    protected function findMetricInWidgetConfig(string $code): ?ReportMetricConfiguration\n    {\n        if (!isset($this->widgetConfig['metrics'])) {\n            return new ReportMetricConfiguration(false, false);\n        }\n\n        foreach ($this->widgetConfig['metrics'] as $metricData) {\n            $metricCode = isset($metricData['metric']) ? $metricData['metric'] : null;\n            if (!$metricCode || $metricCode !== $code) {\n                continue;\n            }\n\n            $displayTotals = isset($metricData['displayTotals']) ? $metricData['displayTotals'] : false;\n            $displayRelativeBar = isset($metricData['displayRelativeBar']) ? $metricData['displayRelativeBar'] : false;\n\n            return new ReportMetricConfiguration($displayTotals, $displayRelativeBar);\n        }\n\n        return new ReportMetricConfiguration(false, false);\n    }\n\n    /**\n     * getRequestedWidgetFilters\n     */\n    protected function getRequestedWidgetFilters(): array\n    {\n        if (!array_key_exists('filters', $this->widgetConfig)) {\n            return [];\n        }\n\n        $filters = $this->widgetConfig['filters'];\n        if (!is_array($filters)) {\n            return [];\n        }\n\n        $result = [];\n        foreach ($filters as $filterConfig) {\n            $attribute = $filterConfig['filter_attribute'];\n            $attributeType = $attribute === 'oc_dimension'\n                ? ReportDimensionFilter::ATTR_TYPE_DIMENSION\n                : ReportDimensionFilter::ATTR_TYPE_DIMENSION_FIELD;\n\n            $attrName = $attributeType !== ReportDimensionFilter::ATTR_TYPE_DIMENSION\n                ? $attribute\n                : null;\n\n            $operation = $filterConfig['operation'];\n            $value = null;\n            if ($operation !== ReportDimensionFilter::OPERATION_ONE_OF) {\n                $value = $filterConfig['value_scalar'];\n            }\n            else {\n                $value = $filterConfig['value_array'];\n                $value = array_filter(array_map('trim', explode(\"\\n\", $value)), 'strlen');\n            }\n\n            $filter = new ReportDimensionFilter(\n                $attributeType,\n                $attrName,\n                $operation,\n                $value\n            );\n\n            $result[] = $filter;\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportFetchDataResult.php",
    "content": "<?php namespace Dashboard\\Classes;\n\n/**\n * Represents the result of fetching report data.\n */\nclass ReportFetchDataResult\n{\n    /**\n     * @var int totalRecords specifies the number of records on all pages of a paginated data set.\n     */\n    private $totalRecords = 0;\n\n    /**\n     * @var array rows contains objects representing the data.\n     */\n    private $rows = [];\n\n    /**\n     * @var array metricTotals holds metric codes in keys and totals in values.\n     */\n    private $metricTotals = [];\n\n    /**\n     * Constructs a new ReportFetchDataResult instance.\n     * @param array $rows An array of row objects to initialize the result dataset\n     */\n    public function __construct(array $rows = [])\n    {\n        $this->setRows($rows);\n    }\n\n    /**\n     * Sets the number of records on all pages of a paginated data set.\n     * @param int $totalRecords\n     * @return ReportFetchDataResult The current instance of the class\n     */\n    public function setTotalRecords(int $totalRecords): ReportFetchDataResult\n    {\n        $this->totalRecords = $totalRecords;\n        return $this;\n    }\n\n    /**\n     * Sets metric totals.\n     * @param array $metricTotals An array containing metric codes in keys and totals in values.\n     */\n    public function setMetricTotals(array $metricTotals): void\n    {\n        $this->metricTotals = $metricTotals;\n    }\n\n    /**\n     * Sets the result dataset rows.\n     * This method overrides rows set previously.\n     * @param array $rows Array of row objects\n     * The expected row object properties are:\n     * - oc_dimension - dimension value\n     * - oc_metric_[metric_code] - metric value\n     * - oc_field_[field_code] - dimension field value\n     * - oc_record_url - optional URL for table row links\n     * @return ReportFetchDataResult The current instance of the class\n     */\n    public function setRows(array $rows): ReportFetchDataResult\n    {\n        $this->rows = array_map([$this, 'normalizeRow'], $rows);\n        return $this;\n    }\n\n    /**\n     * Adds a row to the result dataset.\n     * @param object $row Specifies the row object.\n     * The expected row object properties are:\n     * - oc_dimension - dimension value\n     * - oc_metric_[metric_code] - metric value\n     * - oc_field_[field_code] - dimension field value\n     * - oc_record_url - optional URL for table row links\n     * @return ReportFetchDataResult The current instance of the class\n     */\n    public function addRow(object $row): ReportFetchDataResult\n    {\n        $this->rows[] = $this->normalizeRow($row);\n        return $this;\n    }\n\n    /**\n     * Returns the dataset rows.\n     * @return array Array of row objects\n     */\n    public function getRows(): array\n    {\n        return $this->rows;\n    }\n\n    /**\n     * Returns the number of records on all pages of a paginated data set.\n     * @return int\n     */\n    public function getTotalRecords(): int\n    {\n        return $this->totalRecords;\n    }\n\n    /**\n     * Retrieves metric totals.\n     * @return array An array containing metric codes as keys and totals as values.\n     */\n    public function getMetricTotals(): array\n    {\n        return $this->metricTotals;\n    }\n\n    /**\n     * Normalizes a row, ensuring it is an object.\n     * @param mixed $row The row to normalize\n     * @return object The normalized row object\n     */\n    private function normalizeRow(mixed $row)\n    {\n        if (is_object($row)) {\n            return $row;\n        }\n\n        return (object) $row;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportMetric.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse SystemException;\n\n/**\n * ReportMetric represents a report data source metric.\n */\nclass ReportMetric\n{\n    const AGGREGATE_SUM = 'sum';\n    const AGGREGATE_AVG = 'avg';\n    const AGGREGATE_MIN = 'min';\n    const AGGREGATE_MAX = 'max';\n    const AGGREGATE_COUNT = 'count';\n    const AGGREGATE_NONE = 'none';\n    const AGGREGATE_COUNT_DISTINCT = 'count_distinct';\n    const AGGREGATE_COUNT_DISTINCT_NOT_NULL = 'count_distinct_not_null';\n\n    /**\n     * @var string Specifies the metric referral code.\n     */\n    private $code;\n\n    /**\n     * @var string Specifies the column name in the data source table.\n     */\n    private $databaseColumnName;\n\n    /**\n     * @var string Specifies the report metric name used in reports.\n     */\n    private $displayName;\n\n    /**\n     * @var string Specifies the aggregate function for the metric.\n     * One of the AGGREGATE_* constants.\n     */\n    private $aggregateFunction;\n\n    /**\n     * @var ?array Client-side data formatting options.\n     */\n    private $intlFormatOptions;\n\n    /**\n     * @var ?callable Server-side formatter for human-readable display values.\n     */\n    private $displayFormatter;\n\n    /**\n     * __construct a new metric instance.\n     * @param string $code Specifies the metric referral code.\n     * @param string $databaseColumnName Specifies the column name in the data source table.\n     * @param string $displayName Specifies the metric name used in reports.\n     * @param string $aggregateFunction Specifies the aggregate function for the metric.\n     * @param ?array $intlFormatOptions Client-side formatting options, compatible with the Intl.NumberFormat() constructor options argument.\n     * Skip the argument to use the default formatting options.\n     */\n    public function __construct(string $code, string $databaseColumnName, string $displayName, string $aggregateFunction, ?array $intlFormatOptions = null)\n    {\n        if (!strlen($code)) {\n            throw new SystemException('The metric code cannot be empty.');\n        }\n\n        if (!preg_match('/^[a-z][a-z0-9_]+$/i', $code)) {\n            throw new SystemException('The metric code can only contain Latin letters, numbers and underscore. The first character must be a letter');\n        }\n\n        if (!strlen($databaseColumnName)) {\n            throw new SystemException('The database column name cannot be empty.');\n        }\n\n        if (!strlen($displayName)) {\n            throw new SystemException('The display name cannot be empty.');\n        }\n\n        if (!strlen($aggregateFunction)) {\n            throw new SystemException('The aggregate function cannot be empty.');\n        }\n\n        $knownAggregateFunctions = [\n            self::AGGREGATE_SUM,\n            self::AGGREGATE_AVG,\n            self::AGGREGATE_MIN,\n            self::AGGREGATE_MAX,\n            self::AGGREGATE_COUNT,\n            self::AGGREGATE_NONE,\n            self::AGGREGATE_COUNT_DISTINCT,\n            self::AGGREGATE_COUNT_DISTINCT_NOT_NULL\n        ];\n\n        if (!in_array($aggregateFunction, $knownAggregateFunctions)) {\n            throw new SystemException('The aggregate function is not supported: ' . $aggregateFunction);\n        }\n\n        $this->code = $code;\n        $this->databaseColumnName = $databaseColumnName;\n        $this->displayName = $displayName;\n        $this->aggregateFunction = $aggregateFunction;\n        $this->intlFormatOptions = $intlFormatOptions;\n    }\n\n    /**\n     * Returns the metric code.\n     * @return string Returns the metric code.\n     */\n    public function getCode(): string\n    {\n        return $this->code;\n    }\n\n    /**\n     * Returns the metric display name.\n     * @return string\n     */\n    public function getDisplayName(): string\n    {\n        return $this->displayName;\n    }\n\n    /**\n     * Returns the metric aggregate function.\n     * @return string Returns the metric aggregate function, one of the AGGREGATE_* constants.\n     */\n    public function getAggregateFunction(): string\n    {\n        return $this->aggregateFunction;\n    }\n\n    /**\n     * Returns client-side data formatting options.\n     * @return ?array\n     */\n    public function getIntlFormatOptions(): ?array\n    {\n        return $this->intlFormatOptions;\n    }\n\n    /**\n     * Sets a server-side display formatter callback for human-readable display strings.\n     * The callback receives the raw value and should return a formatted string.\n     * Used for non-graph displays (tables, indicators) where custom formatting is needed (e.g., durations).\n     * @param callable $formatter The formatter callback\n     * @return static\n     */\n    public function setDisplayFormatter(callable $formatter): static\n    {\n        $this->displayFormatter = $formatter;\n        return $this;\n    }\n\n    /**\n     * Returns whether this metric has a custom display formatter.\n     * @return bool\n     */\n    public function hasDisplayFormatter(): bool\n    {\n        return $this->displayFormatter !== null;\n    }\n\n    /**\n     * Formats a value using the display formatter callback.\n     * Returns null if no formatter is set.\n     * @param mixed $value The raw value to format\n     * @return ?string The formatted display string or null\n     */\n    public function formatDisplayValue($value): ?string\n    {\n        if ($this->displayFormatter === null) {\n            return null;\n        }\n\n        return ($this->displayFormatter)($value);\n    }\n\n    /**\n     * Returns the database column name for this metric.\n     * @return string Returns the database column name.\n     */\n    public function getDatabaseColumnName(): string\n    {\n        return $this->databaseColumnName;\n    }\n\n    /**\n     * Finds a metric by its code.\n     * @param ReportMetric[] $availableMetrics\n     * @param string $metricCode\n     * @return ReportMetric|null Returns the metric or null if not found.\n     */\n    public static function findMetricByCode(array $availableMetrics, string $metricCode)\n    {\n        $metric = array_filter(\n            $availableMetrics,\n            fn($item) => $item->getCode() === $metricCode\n        );\n\n        if (!count($metric)) {\n            return null;\n        }\n\n        return end($metric);\n    }\n\n    /**\n     * Finds a metric by its code. Throws an exception if the metric is not found.\n     * @param ReportMetric[] $availableMetrics\n     * @param string $metricCode\n     * @param bool $throw Throw exception if the metric doesn't exist.\n     * @return ?ReportMetric\n     */\n    public static function findMetricByCodeStrict(array $availableMetrics, string $metricCode, $throw = true): ?ReportMetric\n    {\n        $metric = self::findMetricByCode($availableMetrics, $metricCode);\n        if (!$metric && $throw) {\n            throw new SystemException('Unknown metric: '.$metricCode);\n        }\n\n        return $metric;\n    }\n\n    /**\n     * Returns code unique for this metric to be used as a part of a cache key.\n     * @return string\n     */\n    public function getCacheUniqueCode(): string\n    {\n        return $this->getCode() . $this->getDatabaseColumnName() . $this->getAggregateFunction();\n    }\n\n    /**\n     * Returns a query column name corresponding to this metric.\n     * @return string\n     */\n    public function getDataSetColumnName(): string\n    {\n        return 'oc_metric_' . $this->getCode();\n    }\n\n    /**\n     * @deprecated Use getDataSetColumnName() instead\n     */\n    public function getDataSetColumName(): string\n    {\n        return $this->getDataSetColumnName();\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportMetricConfiguration.php",
    "content": "<?php namespace Dashboard\\Classes;\n\n/**\n * Carries information about a report metric configuration.\n */\nclass ReportMetricConfiguration\n{\n    /**\n     * @var bool Indicates whether the metric totals should be displayed in the report.\n     */\n    private $displayTotals;\n\n    /**\n     * @var bool Indicates whether a relative or proportional bar should be displayed.\n     */\n    private $displayRelativeBar;\n\n    /**\n     * Constructor to initialize the metric configuration.\n     *\n     * @param bool $displayTotals Specifies whether to display totals.\n     * @param bool $displayRelativeBar Specifies whether to display a relative/proportional bar.\n     */\n    public function __construct(bool $displayTotals, bool $displayRelativeBar)\n    {\n        $this->displayTotals = $displayTotals;\n        $this->displayRelativeBar = $displayRelativeBar;\n    }\n\n    /**\n     * Retrieves the display setting for totals.\n     * @return bool True if totals should be displayed, false otherwise.\n     */\n    public function getDisplayTotals(): bool\n    {\n        return $this->displayTotals;\n    }\n\n    /**\n     * Retrieves the display setting for the relative or proportional bars.\n     * @return bool True if the relative/proportional bars should be displayed, false otherwise.\n     */\n    public function getDisplayRelativeBar(): bool\n    {\n        return $this->displayRelativeBar;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportPeriodCalculator.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonPeriod;\n\n/**\n * ReportPeriodCalculator is a utility class for calculating previous time periods based on given start and end dates.\n * The class can handle periods defined as multiples of full years, full quarters,\n * full months, full weeks, and full days. It calculates the start and end dates of\n * the corresponding previous period.\n */\nclass ReportPeriodCalculator\n{\n    /**\n     * getPreviousPeriod gets the start and end dates for the previous period based on the given period.\n     *\n     * This method identifies if the current period represents a multiple of full years,\n     * full quarters, full months, full weeks, or full days. It then calculates the\n     * corresponding previous period, taking into account the same multiple.\n     *\n     * @param Carbon $startDate Start date of the current period.\n     * @param Carbon $endDate End date of the current period.\n     * @return ?CarbonPeriod Returns a CarbonPeriod object representing the previous period.\n     * Returns null if the previous period cannot be calculated.\n     */\n    public function getPreviousPeriod(Carbon $startDate, Carbon $endDate): ?CarbonPeriod\n    {\n        $startDate = clone $startDate;\n        $endDate = clone $endDate;\n\n        $years = (int) $startDate->diffInYears($endDate) + 1;\n        $quarters = (int) $startDate->diffInQuarters($endDate) + 1;\n        $months = (int) $startDate->diffInMonths($endDate) + 1;\n        $weeks = (int) $startDate->diffInWeeks($endDate) + 1;\n        $days = (int) $startDate->diffInDays($endDate) + 1;\n\n        $prevPeriodEndDate = $startDate->copy()->subDay();\n\n        if ($years >= 1 && $startDate->day === 1 &&\n            $startDate->month === 1 && $endDate->day === 31 && $endDate->month === 12) {\n            return new CarbonPeriod($startDate->copy()->subYears($years), $prevPeriodEndDate);\n        }\n        elseif ($this->isFullQuarter($startDate, $endDate)) {\n            return new CarbonPeriod($startDate->copy()->subQuarters($quarters), $prevPeriodEndDate);\n        }\n        elseif ($this->isFullMonth($startDate, $endDate)) {\n            return new CarbonPeriod($startDate->copy()->subMonths($months), $prevPeriodEndDate);\n        }\n        elseif ($this->isFullWeek($startDate, $endDate)) {\n            return new CarbonPeriod($startDate->copy()->subWeeks($weeks), $prevPeriodEndDate);\n        }\n        elseif ($days >= 1) {\n            return new CarbonPeriod($startDate->copy()->subDays($days), $prevPeriodEndDate);\n        }\n\n        return null;\n    }\n\n    /**\n     * getPreviousPeriodLastYear gets the start and end dates for the previous period of the last year based on the given period.\n     *\n     * This method identifies if the current period represents a multiple of full years,\n     * full quarters, full months, full weeks, or full days. It then calculates the\n     * corresponding previous period for the last year, taking into account the same multiple.\n     *\n     * @param Carbon $startDate Start date of the current period.\n     * @param Carbon $endDate End date of the current period.\n     * @return ?CarbonPeriod Returns a CarbonPeriod object representing the previous period for the last year.\n     * Returns null if the previous period cannot be calculated.\n     */\n    public function getPreviousPeriodLastYear(Carbon $startDate, Carbon $endDate): ?CarbonPeriod\n    {\n        $startDate = clone $startDate;\n        $endDate = clone $endDate;\n\n        $years = (int) $startDate->diffInYears($endDate) + 1;\n        $weeks = (int) $startDate->diffInWeeks($endDate) + 1;\n        $days = (int) $startDate->diffInDays($endDate) + 1;\n\n        if ($this->isFullYear($startDate, $endDate)) {\n            $prevEndDate = $startDate->copy()->subDay();\n            return new CarbonPeriod($startDate->copy()->subYears($years), $prevEndDate);\n        }\n        elseif ($this->isFullQuarter($startDate, $endDate)) {\n            $prevStartDate = $startDate->copy()->subYears($years);\n            $prevEndDate = $endDate->copy()->subYears($years);\n\n            return new CarbonPeriod($prevStartDate, $prevEndDate);\n        }\n        elseif ($this->isFullMonth($startDate, $endDate)) {\n            $prevStartDate = $startDate->copy()->subYears($years);\n            $prevEndDate = Carbon::create($endDate->year - $years, $endDate->month, 1)->endOfMonth();\n            return new CarbonPeriod($prevStartDate, $prevEndDate);\n        }\n        elseif ($this->isFullWeek($startDate, $endDate)) {\n            $startWeek = $startDate->weekOfYear;\n            $prevStartDate = Carbon::create($startDate->year - $years, 1, 1)->addWeeks($startWeek)->startOfWeek();\n            $prevEndDate = $prevStartDate->copy()->addWeeks($weeks - 1)->endOfWeek();\n\n            return new CarbonPeriod($prevStartDate, $prevEndDate);\n        }\n        elseif ($days >= 1) {\n            $prevStartDate = $startDate->copy()->subYears($years);\n            $prevEndDate = $endDate->copy()->subYears($years);\n\n            return new CarbonPeriod($prevStartDate, $prevEndDate);\n        }\n\n        return null;\n    }\n\n    /**\n     * isFullYear\n     */\n    private function isFullYear(Carbon $startDate, Carbon $endDate): bool\n    {\n        return $startDate->day === 1 && $startDate->month === 1 && $endDate->day === 31 && $endDate->month === 12;\n    }\n\n    /**\n     * isFullQuarter\n     */\n    private function isFullQuarter(Carbon $startDate, Carbon $endDate): bool\n    {\n        return $startDate->day === 1 &&\n               in_array($startDate->month, [1, 4, 7, 10]) &&\n               in_array($endDate->month, [3, 6, 9, 12]) &&\n               $endDate->day === $endDate->endOfMonth()->day;\n    }\n\n    /**\n     * isFullMonth\n     */\n    private function isFullMonth(Carbon $startDate, Carbon $endDate): bool\n    {\n        return $startDate->day === 1 && $endDate->day === $endDate->endOfMonth()->day;\n    }\n\n    /**\n     * isFullWeek\n     */\n    private function isFullWeek(Carbon $startDate, Carbon $endDate): bool\n    {\n        return $startDate->dayOfWeekIso === 1 && $endDate->dayOfWeekIso === 7;\n    }\n\n    /**\n     * isFullDay\n     */\n    private function isFullDay(Carbon $startDate, Carbon $endDate): bool\n    {\n        return $startDate->diffInDays($endDate) >= 0;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportQueryBuilder.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Db;\nuse Carbon\\Carbon;\nuse SystemException;\nuse Illuminate\\Database\\Query\\Builder as QueryBuilder;\n\n/**\n * ReportQueryBuilder provides a fluent interface for building dashboard report queries.\n *\n * This is the recommended way to build report queries. For backward compatibility,\n * the original ReportDataQueryBuilder class is still available.\n *\n * ## Basic Usage\n *\n * ```php\n * $result = ReportQueryBuilder::table('orders')\n *     ->dimension($dimension)\n *     ->metrics($metrics)\n *     ->orderBy($orderRule)\n *     ->groupByYear()\n *     ->hideEmptyValues()\n *     ->dateRange(Carbon::parse('2020-01-01'), now(), 'order_date')\n *     ->get($metricsConfiguration);\n * ```\n *\n * ## Using fromFetchData (recommended for data sources)\n *\n * ```php\n * protected function fetchData(ReportFetchData $data): ReportFetchDataResult\n * {\n *     return ReportQueryBuilder::fromFetchData($data, 'my_table')\n *         ->dateColumn('created_at')\n *         ->get($data->metricsConfiguration);\n * }\n * ```\n *\n * ## With Custom Query Logic\n *\n * ```php\n * $result = ReportQueryBuilder::fromFetchData($data, 'orders')\n *     ->dateColumn('order_date')\n *     ->onConfigureQuery(function ($query, $dimension, $metrics) {\n *         $query->where('status', 'completed');\n *         $query->join('customers', 'orders.customer_id', '=', 'customers.id');\n *     })\n *     ->get($data->metricsConfiguration);\n * ```\n *\n * ## Comparison with ReportDataQueryBuilder\n *\n * Old approach (15 constructor parameters):\n * ```php\n * $builder = new ReportDataQueryBuilder(\n *     'orders', $dimension, $metrics, $orderRule, $filters, 100, null,\n *     'year', true, Carbon::parse('2020-01-01'), now(), null, 'order_date', null, false\n * );\n * ```\n *\n * New approach (fluent interface):\n * ```php\n * $builder = ReportQueryBuilder::table('orders')\n *     ->dimension($dimension)\n *     ->metrics($metrics)\n *     ->orderBy($orderRule)\n *     ->filters($filters)\n *     ->limit(100)\n *     ->groupByYear()\n *     ->hideEmptyValues()\n *     ->dateRange(Carbon::parse('2020-01-01'), now(), 'order_date');\n * ```\n *\n * @package october\\dashboard\n * @author Responsiv Pty Ltd\n */\nclass ReportQueryBuilder\n{\n    //\n    // Properties (grouped logically)\n    //\n\n    /**\n     * @var string Table name for the query\n     */\n    protected $tableName;\n\n    /**\n     * @var ReportDimension The dimension to query\n     */\n    protected $dimension;\n\n    /**\n     * @var ReportMetric[] Metrics to aggregate\n     */\n    protected $metrics = [];\n\n    /**\n     * @var ReportDataOrderRule|null Ordering rule\n     */\n    protected $orderRule;\n\n    /**\n     * @var ReportDimensionFilter[]|null Filters to apply\n     */\n    protected $filters;\n\n    /**\n     * @var int|null Result limit\n     */\n    protected $limit;\n\n    /**\n     * @var ReportDataPaginationParams|null Pagination parameters\n     */\n    protected $pagination;\n\n    /**\n     * @var string Group interval (day, week, month, quarter, year, full)\n     */\n    protected $groupInterval = ReportDataSourceBase::GROUP_INTERVAL_DAY;\n\n    /**\n     * @var bool Whether to hide null dimension values\n     */\n    protected $hideEmptyValues = false;\n\n    /**\n     * @var bool Only return totals, not rows\n     */\n    protected $totalsOnly = false;\n\n    /**\n     * @var Carbon|null Date range start\n     */\n    protected $dateStart;\n\n    /**\n     * @var Carbon|null Date range end\n     */\n    protected $dateEnd;\n\n    /**\n     * @var string|null Date column name for filtering\n     */\n    protected $dateColumn;\n\n    /**\n     * @var int|null Timestamp for relative intervals\n     */\n    protected $startTimestamp;\n\n    /**\n     * @var string|null Timestamp column for relative filtering\n     */\n    protected $timestampColumn;\n\n    /**\n     * @var callable|null Query configuration callback\n     */\n    protected $queryCallback;\n\n    /**\n     * @var callable|null Metrics configuration callback\n     */\n    protected $metricsCallback;\n\n    /**\n     * @var callable|null Single metric configuration callback\n     */\n    protected $metricCallback;\n\n    //\n    // Static Constructors\n    //\n\n    /**\n     * table creates a new builder instance for the given table\n     *\n     * @param string $tableName\n     * @return static\n     */\n    public static function table(string $tableName): static\n    {\n        $builder = new static;\n        $builder->tableName = $tableName;\n        return $builder;\n    }\n\n    /**\n     * fromFetchData creates builder from ReportFetchData (backward compatible shorthand)\n     *\n     * @param ReportFetchData $data\n     * @param string $tableName\n     * @return static\n     */\n    public static function fromFetchData(ReportFetchData $data, string $tableName): static\n    {\n        return static::table($tableName)\n            ->dimension($data->dimension)\n            ->metrics($data->metrics)\n            ->orderBy($data->orderRule)\n            ->filters($data->dimensionFilters)\n            ->when($data->limit, fn($b) => $b->limit($data->limit))\n            ->when($data->paginationParams, fn($b) => $b->paginate($data->paginationParams))\n            ->groupInterval($data->groupInterval)\n            ->hideEmptyValues($data->hideEmptyDimensionValues)\n            ->totalsOnly($data->totalsOnly)\n            ->when($data->dateStart && $data->dateEnd, fn($b) => $b->dateRange($data->dateStart, $data->dateEnd))\n            ->when($data->startTimestamp, fn($b) => $b->sinceTimestamp($data->startTimestamp));\n    }\n\n    //\n    // Fluent Configuration Methods\n    //\n\n    /**\n     * dimension sets the dimension to group by\n     *\n     * @param ReportDimension $dimension\n     * @return $this\n     */\n    public function dimension(ReportDimension $dimension): static\n    {\n        $this->dimension = $dimension;\n        return $this;\n    }\n\n    /**\n     * metrics sets the metrics to aggregate\n     *\n     * @param ReportMetric[] $metrics\n     * @return $this\n     */\n    public function metrics(array $metrics): static\n    {\n        $this->metrics = $metrics;\n        return $this;\n    }\n\n    /**\n     * addMetric adds a single metric\n     *\n     * @param ReportMetric $metric\n     * @return $this\n     */\n    public function addMetric(ReportMetric $metric): static\n    {\n        $this->metrics[] = $metric;\n        return $this;\n    }\n\n    /**\n     * orderBy sets the ordering rule\n     *\n     * @param ReportDataOrderRule|null $rule\n     * @return $this\n     */\n    public function orderBy(?ReportDataOrderRule $rule): static\n    {\n        $this->orderRule = $rule;\n        return $this;\n    }\n\n    /**\n     * filters sets dimension filters\n     *\n     * @param ReportDimensionFilter[]|null $filters\n     * @return $this\n     */\n    public function filters(?array $filters): static\n    {\n        $this->filters = $filters;\n        return $this;\n    }\n\n    /**\n     * limit sets the maximum number of results\n     *\n     * @param int $limit\n     * @return $this\n     */\n    public function limit(int $limit): static\n    {\n        $this->limit = $limit;\n        return $this;\n    }\n\n    /**\n     * paginate sets pagination parameters\n     *\n     * @param ReportDataPaginationParams $params\n     * @return $this\n     */\n    public function paginate(ReportDataPaginationParams $params): static\n    {\n        $this->pagination = $params;\n        return $this;\n    }\n\n    //\n    // Group Interval Methods (semantic shortcuts)\n    //\n\n    /**\n     * groupInterval sets the grouping interval\n     *\n     * @param string|null $interval One of GROUP_INTERVAL_* constants\n     * @return $this\n     */\n    public function groupInterval(?string $interval): static\n    {\n        $this->groupInterval = $interval ?? ReportDataSourceBase::GROUP_INTERVAL_DAY;\n        return $this;\n    }\n\n    /**\n     * groupByDay groups results by day\n     * @return $this\n     */\n    public function groupByDay(): static\n    {\n        return $this->groupInterval(ReportDataSourceBase::GROUP_INTERVAL_DAY);\n    }\n\n    /**\n     * groupByWeek groups results by week\n     * @return $this\n     */\n    public function groupByWeek(): static\n    {\n        return $this->groupInterval(ReportDataSourceBase::GROUP_INTERVAL_WEEK);\n    }\n\n    /**\n     * groupByMonth groups results by month\n     * @return $this\n     */\n    public function groupByMonth(): static\n    {\n        return $this->groupInterval(ReportDataSourceBase::GROUP_INTERVAL_MONTH);\n    }\n\n    /**\n     * groupByQuarter groups results by quarter\n     * @return $this\n     */\n    public function groupByQuarter(): static\n    {\n        return $this->groupInterval(ReportDataSourceBase::GROUP_INTERVAL_QUARTER);\n    }\n\n    /**\n     * groupByYear groups results by year\n     * @return $this\n     */\n    public function groupByYear(): static\n    {\n        return $this->groupInterval(ReportDataSourceBase::GROUP_INTERVAL_YEAR);\n    }\n\n    /**\n     * withoutGrouping disables grouping (full interval)\n     * @return $this\n     */\n    public function withoutGrouping(): static\n    {\n        return $this->groupInterval(ReportDataSourceBase::GROUP_INTERVAL_FULL);\n    }\n\n    //\n    // Date Range Methods\n    //\n\n    /**\n     * dateRange sets the date range and column for filtering\n     *\n     * @param Carbon $start\n     * @param Carbon $end\n     * @param string|null $column Column name to filter on\n     * @return $this\n     */\n    public function dateRange(Carbon $start, Carbon $end, ?string $column = null): static\n    {\n        $this->dateStart = $start;\n        $this->dateEnd = $end;\n\n        if ($column !== null) {\n            $this->dateColumn = $column;\n        }\n\n        return $this;\n    }\n\n    /**\n     * dateColumn sets the date column name\n     *\n     * @param string $column\n     * @return $this\n     */\n    public function dateColumn(string $column): static\n    {\n        $this->dateColumn = $column;\n        return $this;\n    }\n\n    /**\n     * sinceTimestamp sets relative timestamp filtering\n     *\n     * @param int $timestamp\n     * @param string|null $column Column name to filter on\n     * @return $this\n     */\n    public function sinceTimestamp(int $timestamp, ?string $column = null): static\n    {\n        $this->startTimestamp = $timestamp;\n\n        if ($column !== null) {\n            $this->timestampColumn = $column;\n        }\n\n        return $this;\n    }\n\n    /**\n     * timestampColumn sets the timestamp column name\n     *\n     * @param string $column\n     * @return $this\n     */\n    public function timestampColumn(string $column): static\n    {\n        $this->timestampColumn = $column;\n        return $this;\n    }\n\n    //\n    // Boolean Flags\n    //\n\n    /**\n     * hideEmptyValues hides null dimension values from results\n     *\n     * @param bool $hide\n     * @return $this\n     */\n    public function hideEmptyValues(bool $hide = true): static\n    {\n        $this->hideEmptyValues = $hide;\n        return $this;\n    }\n\n    /**\n     * totalsOnly returns only aggregated totals, no rows\n     *\n     * @param bool $totals\n     * @return $this\n     */\n    public function totalsOnly(bool $totals = true): static\n    {\n        $this->totalsOnly = $totals;\n        return $this;\n    }\n\n    //\n    // Callback Registration (kept for advanced customization)\n    //\n\n    /**\n     * onConfigureQuery registers a callback for query customization\n     *\n     * @param callable $callback fn(QueryBuilder $query, ReportDimension $dimension, array $metrics): void\n     * @return $this\n     */\n    public function onConfigureQuery(callable $callback): static\n    {\n        $this->queryCallback = $callback;\n        return $this;\n    }\n\n    /**\n     * onConfigureMetrics registers a callback for metrics customization\n     *\n     * @param callable $callback fn(QueryBuilder $query, ReportDimension $dimension, array $metrics): void\n     * @return $this\n     */\n    public function onConfigureMetrics(callable $callback): static\n    {\n        $this->metricsCallback = $callback;\n        return $this;\n    }\n\n    /**\n     * onConfigureMetric registers a callback for individual metric customization\n     *\n     * @param callable $callback fn(QueryBuilder $query, ReportMetric $metric, ReportDimension $dimension, array $metrics): bool\n     * @return $this\n     */\n    public function onConfigureMetric(callable $callback): static\n    {\n        $this->metricCallback = $callback;\n        return $this;\n    }\n\n    //\n    // Conditional Helper\n    //\n\n    /**\n     * when conditionally applies configuration\n     *\n     * @param mixed $condition\n     * @param callable $callback fn(static $builder): void\n     * @return $this\n     */\n    public function when($condition, callable $callback): static\n    {\n        if ($condition) {\n            $callback($this);\n        }\n        return $this;\n    }\n\n    //\n    // Query Execution\n    //\n\n    /**\n     * get executes the query and returns results\n     *\n     * @param array $metricsConfiguration\n     * @param string|null $recordUrlTemplate\n     * @return ReportFetchDataResult\n     */\n    public function get(array $metricsConfiguration = [], ?string $recordUrlTemplate = null): ReportFetchDataResult\n    {\n        $this->validate();\n\n        $query = $this->buildQuery();\n\n        if ($recordUrlTemplate) {\n            $tableName = $this->evalDbObjectName($this->tableName);\n            $query->addSelect(Db::raw(\"MAX({$tableName}.id) as oc_id\"));\n        }\n\n        $records = [];\n        if (!$this->totalsOnly) {\n            $records = $query->get()->toArray();\n\n            if ($recordUrlTemplate) {\n                foreach ($records as $record) {\n                    $record->oc_record_url = str_replace('{id}', $record->oc_id, $recordUrlTemplate);\n                }\n            }\n        }\n\n        $result = new ReportFetchDataResult($records);\n\n        if ($this->pagination) {\n            $result->setTotalRecords($this->getTotalRecords());\n        }\n\n        $result->setMetricTotals($this->getMetricTotals($metricsConfiguration));\n\n        return $result;\n    }\n\n    /**\n     * toQuery returns the underlying Laravel query builder\n     *\n     * Use this for advanced customization or when you need direct access\n     * to the query. For most cases, use get() instead.\n     *\n     * @return QueryBuilder\n     */\n    public function toQuery(): QueryBuilder\n    {\n        $this->validate();\n        return $this->buildQuery();\n    }\n\n    /**\n     * toSql returns the SQL query string (for debugging)\n     *\n     * @return string\n     */\n    public function toSql(): string\n    {\n        return $this->buildQuery()->toSql();\n    }\n\n    /**\n     * getTotalRecords returns the total unpaginated count\n     *\n     * @return int\n     */\n    public function getTotalRecords(): int\n    {\n        $query = $this->buildQuery(skipPagination: true);\n\n        $wrappedQuery = Db::table(Db::raw(\"({$query->toSql()}) as subquery\"))\n            ->mergeBindings($query);\n\n        return $wrappedQuery->count();\n    }\n\n    /**\n     * getMetricTotals returns totals for specified metrics\n     *\n     * @param ReportMetricConfiguration[] $metricsConfiguration\n     * @return array\n     */\n    public function getMetricTotals(array $metricsConfiguration): array\n    {\n        $metricsForTotals = [];\n        foreach ($metricsConfiguration as $metricCode => $configuration) {\n            if ($configuration->getDisplayTotals() || $configuration->getDisplayRelativeBar()) {\n                $metric = ReportMetric::findMetricByCode($this->metrics, $metricCode);\n                if ($metric) {\n                    $metricsForTotals[] = $metric;\n                }\n            }\n        }\n\n        if (empty($metricsForTotals)) {\n            return [];\n        }\n\n        $query = $this->buildQuery(skipGrouping: true, forceMetrics: $metricsForTotals);\n        $rows = $query->get()->toArray();\n\n        if (empty($rows)) {\n            return [];\n        }\n\n        $row = $rows[0];\n        $result = [];\n        foreach ($metricsForTotals as $metric) {\n            $columnName = $metric->getDataSetColumName();\n            $result[$metric->getCode()] = $row->{$columnName};\n        }\n\n        return $result;\n    }\n\n    //\n    // Internal Query Building\n    //\n\n    /**\n     * validate ensures required properties are set\n     *\n     * @throws SystemException\n     */\n    protected function validate(): void\n    {\n        if (!$this->tableName) {\n            throw new SystemException('Table name is required.');\n        }\n\n        if (!$this->dimension) {\n            throw new SystemException('Dimension is required.');\n        }\n\n        if (($this->dateStart || $this->dateEnd) && $this->startTimestamp !== null) {\n            throw new SystemException('Cannot use both date range and timestamp filtering.');\n        }\n\n        if (!$this->dateStart && $this->startTimestamp === null) {\n            throw new SystemException('Either date range or start timestamp is required.');\n        }\n\n        if ($this->limit !== null && $this->pagination !== null) {\n            throw new SystemException('Cannot use both limit and pagination.');\n        }\n    }\n\n    /**\n     * buildQuery constructs the query builder\n     *\n     * @param bool $skipGrouping\n     * @param bool $skipPagination\n     * @param array $forceMetrics\n     * @return QueryBuilder\n     */\n    protected function buildQuery(\n        bool $skipGrouping = false,\n        bool $skipPagination = false,\n        array $forceMetrics = []\n    ): QueryBuilder {\n        $query = Db::table($this->tableName);\n\n        $shouldSkipGrouping = $skipGrouping ||\n            ($this->dimension->isDate() && $this->groupInterval === ReportDataSourceBase::GROUP_INTERVAL_FULL);\n\n        $columns = [];\n\n        if (!$shouldSkipGrouping) {\n            $columns = array_merge($columns, $this->buildDimensionColumns($query));\n        }\n\n        $columns = array_merge($columns, $this->buildMetricColumns($query, $forceMetrics ?: $this->metrics));\n\n        // Apply callbacks\n        if ($this->metricsCallback) {\n            call_user_func($this->metricsCallback, $query, $this->dimension, $this->metrics);\n        }\n\n        if ($this->queryCallback) {\n            call_user_func($this->queryCallback, $query, $this->dimension, $this->metrics);\n        }\n\n        $query->addSelect($columns);\n\n        // Grouping\n        if (!$shouldSkipGrouping) {\n            $query->groupBy(Db::raw($this->dimension->getDataSetColumName()));\n        }\n\n        // Pagination / Limit\n        if (!$skipPagination) {\n            if ($this->pagination) {\n                $query->limit($this->pagination->getRecordsPerPage());\n                $query->offset($this->pagination->getOffset());\n            } elseif ($this->limit) {\n                $query->limit($this->limit);\n            }\n        }\n\n        // Filtering\n        $this->applyFilters($query);\n        $this->applyDateFilters($query);\n\n        // Ordering\n        if ($this->orderRule && !$skipPagination) {\n            $this->applyOrderRule($query);\n        }\n\n        return $query;\n    }\n\n    /**\n     * buildDimensionColumns builds dimension select columns\n     *\n     * @param QueryBuilder $query\n     * @return array\n     */\n    protected function buildDimensionColumns(QueryBuilder $query): array\n    {\n        $columns = [];\n\n        $dimensionColumnName = $this->dimension->getDatabaseColumnName();\n        $dimensionColumnName = $this->evalDbObjectName($dimensionColumnName);\n        $dimensionColumnName = $this->makeDateGroupingExpression($dimensionColumnName);\n\n        $columns[] = Db::raw($dimensionColumnName . ' AS ' . $this->dimension->getDataSetColumName());\n\n        if ($this->hideEmptyValues) {\n            $query->whereRaw(\"$dimensionColumnName is not null\");\n        }\n\n        // Handle dimension label column\n        $labelColumn = $this->dimension->getLabelColumnName();\n        if ($labelColumn !== null) {\n            $labelColumn = $this->evalDbObjectName($labelColumn);\n\n            // For date dimensions with grouping, wrap in MAX() to avoid GROUP BY error\n            if ($this->dimension->isDate() && $this->groupInterval !== ReportDataSourceBase::GROUP_INTERVAL_FULL) {\n                $columns[] = Db::raw('MAX(' . $labelColumn . ') AS oc_dimension_label');\n            } else {\n                $columns[] = Db::raw($labelColumn . ' AS oc_dimension_label');\n            }\n        }\n\n        return $columns;\n    }\n\n    /**\n     * buildMetricColumns builds metric select columns\n     *\n     * @param QueryBuilder $query\n     * @param array $metrics\n     * @return array\n     */\n    protected function buildMetricColumns(QueryBuilder $query, array $metrics): array\n    {\n        $columns = [];\n\n        foreach ($metrics as $metric) {\n            // Allow callback to handle metric manually\n            if ($this->metricCallback) {\n                $handled = call_user_func(\n                    $this->metricCallback,\n                    $query,\n                    $metric,\n                    $this->dimension,\n                    $this->metrics\n                );\n                if ($handled) {\n                    continue;\n                }\n            }\n\n            $aggregateFunction = $this->getAggregateSql($metric->getAggregateFunction());\n            $columnName = $this->evalDbObjectName($metric->getDatabaseColumnName());\n            $metricColumnName = $this->evalDbObjectName($metric->getDataSetColumName());\n            $aggregateExpression = sprintf($aggregateFunction, $columnName);\n\n            $columns[] = Db::raw(sprintf('%s as %s', $aggregateExpression, $metricColumnName));\n        }\n\n        return $columns;\n    }\n\n    /**\n     * makeDateGroupingExpression creates SQL expression for date grouping\n     *\n     * @param string $column\n     * @return string\n     */\n    protected function makeDateGroupingExpression(string $column): string\n    {\n        if (!$this->dimension->isDate()) {\n            return $column;\n        }\n\n        $driver = Db::getDriverName();\n\n        return match ($this->groupInterval) {\n            ReportDataSourceBase::GROUP_INTERVAL_DAY => $driver === 'pgsql'\n                ? \"$column::date\"\n                : \"DATE(`$column`)\",\n\n            ReportDataSourceBase::GROUP_INTERVAL_WEEK => $this->dimension->getWeekGroupingField()\n                ?? \"DATE_FORMAT(DATE_ADD(`$column`, INTERVAL -WEEKDAY(`$column`) DAY), '%Y-%m-%d')\",\n\n            ReportDataSourceBase::GROUP_INTERVAL_MONTH => $this->dimension->getMonthGroupingField()\n                ?? \"DATE_FORMAT(`$column`, '%Y-%m-01')\",\n\n            ReportDataSourceBase::GROUP_INTERVAL_QUARTER => $this->dimension->getQuarterGroupingField()\n                ?? \"MAKEDATE(YEAR(`$column`), 1) + INTERVAL (QUARTER(`$column`) - 1) QUARTER\",\n\n            ReportDataSourceBase::GROUP_INTERVAL_YEAR => $this->dimension->getYearGroupingField()\n                ?? \"DATE_FORMAT(`$column`, '%Y-01-01')\",\n\n            default => $column\n        };\n    }\n\n    /**\n     * getAggregateSql returns SQL template for aggregate function\n     *\n     * @param string $function\n     * @return string\n     */\n    protected function getAggregateSql(string $function): string\n    {\n        return match ($function) {\n            ReportMetric::AGGREGATE_AVG => 'avg(%1$s)',\n            ReportMetric::AGGREGATE_COUNT => 'count(%1$s)',\n            ReportMetric::AGGREGATE_MAX => 'max(%1$s)',\n            ReportMetric::AGGREGATE_MIN => 'min(%1$s)',\n            ReportMetric::AGGREGATE_SUM => 'sum(%1$s)',\n            ReportMetric::AGGREGATE_COUNT_DISTINCT => 'count(distinct %1$s)',\n            ReportMetric::AGGREGATE_COUNT_DISTINCT_NOT_NULL => 'count(distinct case when %1$s is not null then %1$s end)',\n            ReportMetric::AGGREGATE_NONE => '%1$s',\n            default => throw new SystemException('Invalid aggregate function: ' . $function)\n        };\n    }\n\n    /**\n     * applyDateFilters applies date range or timestamp filtering\n     *\n     * @param QueryBuilder $query\n     */\n    protected function applyDateFilters(QueryBuilder $query): void\n    {\n        if ($this->dateColumn && $this->dateStart !== null) {\n            $query->whereBetween($this->dateColumn, [\n                $this->dateStart->startOfDay()->toDateTimeString(),\n                $this->dateEnd->endOfDay()->toDateTimeString()\n            ]);\n        }\n\n        if ($this->timestampColumn && $this->startTimestamp !== null) {\n            $startTimestampDate = gmdate('Y-m-d H:i:s', $this->startTimestamp);\n            $query->where($this->timestampColumn, '>=', $startTimestampDate);\n        }\n    }\n\n    /**\n     * applyFilters applies dimension filters\n     *\n     * @param QueryBuilder $query\n     */\n    protected function applyFilters(QueryBuilder $query): void\n    {\n        if (!$this->filters) {\n            return;\n        }\n\n        foreach ($this->filters as $filter) {\n            $this->applyFilter($query, $filter);\n        }\n    }\n\n    /**\n     * applyFilter applies a single filter\n     *\n     * @param QueryBuilder $query\n     * @param ReportDimensionFilter $filter\n     */\n    protected function applyFilter(QueryBuilder $query, ReportDimensionFilter $filter): void\n    {\n        $columnName = match ($filter->getDataAttributeType()) {\n            ReportDimensionFilter::ATTR_TYPE_DIMENSION =>\n                $this->dimension->getLabelColumnName() ?? $this->dimension->getDatabaseColumnName(),\n            ReportDimensionFilter::ATTR_TYPE_DIMENSION_FIELD =>\n                $this->dimension->findDimensionFieldByCode($filter->getAttributeName())->getColumnName()\n                    ?? $filter->getAttributeName(),\n            default => throw new SystemException('Invalid filter attribute type')\n        };\n\n        $columnName = $this->evalDbObjectName($columnName);\n        $operation = $filter->getOperation();\n        $value = $filter->getValue();\n\n        match ($operation) {\n            ReportDimensionFilter::OPERATION_EQUALS,\n            ReportDimensionFilter::OPERATION_MORE_OR_EQUALS,\n            ReportDimensionFilter::OPERATION_LESS_OR_EQUALS,\n            ReportDimensionFilter::OPERATION_MORE,\n            ReportDimensionFilter::OPERATION_LESS => $query->where($columnName, $operation, $value),\n\n            ReportDimensionFilter::OPERATION_STARTS_WITH => $query->where($columnName, 'like', $value . '%'),\n            ReportDimensionFilter::OPERATION_STRING_INCLUDES => $query->where($columnName, 'like', '%' . $value . '%'),\n            ReportDimensionFilter::OPERATION_ONE_OF => $query->whereIn($columnName, $value),\n\n            default => throw new SystemException('Invalid filter operation: ' . $operation)\n        };\n    }\n\n    /**\n     * applyOrderRule applies ordering\n     *\n     * @param QueryBuilder $query\n     */\n    protected function applyOrderRule(QueryBuilder $query): void\n    {\n        $columnName = match ($this->orderRule->getDataAttributeType()) {\n            ReportDataOrderRule::ATTR_TYPE_DIMENSION =>\n                ($this->dimension->isDate() && $this->groupInterval !== ReportDataSourceBase::GROUP_INTERVAL_FULL)\n                    ? $this->dimension->getDataSetColumName()\n                    : ($this->dimension->getLabelColumnName() ?? $this->dimension->getDatabaseColumnName()),\n\n            ReportDataOrderRule::ATTR_TYPE_METRIC =>\n                ReportMetric::findMetricByCodeStrict($this->metrics, $this->orderRule->getAttributeName())\n                    ->getDataSetColumName(),\n\n            ReportDataOrderRule::ATTR_TYPE_DIMENSION_FIELD =>\n                $this->dimension->findDimensionFieldByCode($this->orderRule->getAttributeName())->getCode(),\n\n            default => throw new SystemException('Invalid order rule type')\n        };\n\n        $query->orderBy(\n            $this->evalDbObjectName($columnName),\n            $this->orderRule->isAscending() ? 'asc' : 'desc'\n        );\n    }\n\n    /**\n     * evalDbObjectName validates and trims a database object name\n     *\n     * @param string $name\n     * @return string\n     */\n    protected function evalDbObjectName(string $name): string\n    {\n        return trim($name);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/ReportWidgetBase.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Backend\\Classes\\WidgetBase;\nuse Dashboard\\Classes\\DashReport;\n\n/**\n * ReportWidgetBase is a base class for static widgets used on dashboards\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class ReportWidgetBase extends WidgetBase\n{\n    use \\System\\Traits\\PropertyContainer;\n\n    /**\n     * @var DashReport dashReport object containing general dash report information.\n     */\n    protected $dashReport;\n\n    /**\n     * __construct\n     */\n    public function __construct($controller, $dashReport, $properties = [])\n    {\n        $this->dashReport = $dashReport;\n        $this->properties = $this->validateProperties($properties);\n\n        // Ensure the provided alias (if present) takes effect as the widget configuration is\n        // not passed to the WidgetBase constructor which would normally take care of that\n        if (!isset($this->alias)) {\n            $this->alias = $properties['alias'] ?? $this->defaultAlias;\n        }\n\n        parent::__construct($controller);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/StaticReportWidgetContainer.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Dashboard\\Classes\\ReportWidgetBase;\nuse Backend\\Classes\\Controller;\nuse SystemException;\n\n/**\n * StaticReportWidgetContainer renders static report widgets.\n *\n * @deprecated\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass StaticReportWidgetContainer\n{\n    /**\n     * @var \\Backend\\Classes\\Controller controller for the backend.\n     */\n    protected $controller;\n\n    /**\n     * __construct\n     */\n    public function __construct(Controller $controller)\n    {\n        $this->controller = $controller;\n    }\n\n    /**\n     * Renders a static widget.\n     * @param string $widgetClass Specifies the widget class name.\n     * Widget classes must extend Backend\\Classes\\ReportWidgetBase.\n     * @param array $widgetConfig Widget properties\n     * @return string Returns the rendered widget string\n     */\n    public function renderWidget(string $widgetClass, array $widgetConfig): string\n    {\n        $widget = $this->makeWidget($widgetClass);\n        $widget->setProperties($widgetConfig);\n\n        return $widget->render();\n    }\n\n    /**\n     * makeWidget\n     */\n    private function makeWidget(string $widgetClass)\n    {\n        if (!is_subclass_of($widgetClass, ReportWidgetBase::class)) {\n            throw new SystemException(\"The provided class is not a report widget: \" . $widgetClass);\n        }\n\n        return new $widgetClass($this->controller);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/SystemReportDataSource.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Db;\nuse Config;\nuse System;\nuse Backend;\nuse BackendAuth;\nuse Dashboard\\Classes\\ReportDimension;\nuse Dashboard\\Classes\\ReportData;\nuse Dashboard\\Classes\\ReportFetchDataResult;\nuse Dashboard\\Classes\\ReportFetchData;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse System\\Classes\\PluginManager;\nuse System\\Classes\\UpdateManager;\nuse System\\Models\\RequestLog;\nuse System\\Models\\LogSetting;\nuse System\\Models\\EventLog;\n\n/**\n * SystemReportDataSource providing the system information.\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SystemReportDataSource extends ReportDataSourceBase\n{\n    /**\n     * @var string DIMENSION_VERSION_INFORMATION\n     */\n    const DIMENSION_VERSION_INFORMATION = 'indicator@version_information';\n\n    /**\n     * @var string DIMENSION_SYSTEM_ISSUES\n     */\n    const DIMENSION_SYSTEM_ISSUES = 'indicator@system_issues';\n\n    /**\n     * @var string DIMENSION_EVENT_LOG\n     */\n    const DIMENSION_EVENT_LOG = 'indicator@event_log';\n\n    /**\n     * @var string DIMENSION_REQUEST_LOG\n     */\n    const DIMENSION_REQUEST_LOG = 'indicator@request_log';\n\n    /**\n     * __construct the data source\n     */\n    public function __construct()\n    {\n        ReportData::addIndicatorMetrics(\n            $this->addCalculatedDimension(\n                self::DIMENSION_VERSION_INFORMATION,\n                \"Core version information\"\n            )\n            ->setDefaultWidgetConfig([\n                'icon' => 'ph ph-package',\n                'link_text' => __(\"View Available Updates\"),\n                'title' => __(\"System Build\")\n            ])\n        );\n\n        ReportData::addIndicatorMetrics(\n            $this->addCalculatedDimension(\n                self::DIMENSION_SYSTEM_ISSUES,\n                \"System Issues\"\n            )\n            ->setDefaultWidgetConfig([\n                'icon' => 'ph ph-gear-fine',\n                'link_text' => __(\"View issues\"),\n                'title' => __(\"Configuration\")\n            ])\n        );\n\n        ReportData::addIndicatorMetrics(\n            $this->addCalculatedDimension(\n                self::DIMENSION_EVENT_LOG,\n                \"Event Log\"\n            )\n            ->setDefaultWidgetConfig([\n                'icon' => 'ph ph-bell-ringing',\n                'link_text' => __(\"View event log\"),\n                'title' => __(\"Event Log\")\n            ])\n        );\n\n        ReportData::addIndicatorMetrics(\n            $this->addCalculatedDimension(\n                self::DIMENSION_REQUEST_LOG,\n                \"Request log\"\n            )\n            ->setDefaultWidgetConfig([\n                'icon' => 'ph ph-signpost',\n                'link_text' => __(\"Bad requests\"),\n                'title' => __(\"Request Log\")\n            ])\n        );\n    }\n\n    /**\n     * onGetPopupData\n     */\n    protected function onGetPopupData()\n    {\n        return [\n            'title' => __(\"System Issues\"),\n            'content' => $this->makePartial('warnings', ['warnings' => $this->getSystemWarnings()])\n        ];\n    }\n\n    /**\n     * fetchData\n     */\n    protected function fetchData(ReportFetchData $data): ReportFetchDataResult\n    {\n        $result = new ReportFetchDataResult;\n\n        if ($data->dimension->getCode() === self::DIMENSION_VERSION_INFORMATION) {\n            return $this->getVersionInformationData($data->dimension, $result);\n        }\n\n        if ($data->dimension->getCode() === self::DIMENSION_SYSTEM_ISSUES) {\n            return $this->getSystemIssuesData($data->dimension, $result);\n        }\n\n        if ($data->dimension->getCode() === self::DIMENSION_EVENT_LOG) {\n            return $this->getEventLogData($data->dimension, $result);\n        }\n\n        if ($data->dimension->getCode() === self::DIMENSION_REQUEST_LOG) {\n            return $this->getRequestLogData($data->dimension, $result);\n        }\n\n        return $result;\n    }\n\n    /**\n     * getVersionInformationData\n     */\n    protected function getVersionInformationData(ReportDimension $dimension, ReportFetchDataResult $result): ReportFetchDataResult\n    {\n        $updatesAvailable = UpdateManager::instance()->check() > 0;\n        $iconStatus = $updatesAvailable\n            ? ReportData::INDICATOR_ICON_STATUS_IMPORTANT\n            : ReportData::INDICATOR_ICON_STATUS_INFO;\n\n        $iconComplication = $updatesAvailable\n            ? ReportData::INDICATOR_ICON_COMPLICATION_UP\n            : null;\n\n        $linkEnabled = BackendAuth::userHasAccess('general.backend.perform_updates');\n\n        return $result->setRows($this->makeResultRow($dimension, [\n            ReportData::METRIC_VALUE => UpdateManager::instance()->getCurrentVersion(),\n            ReportData::METRIC_INDICATOR_ICON_STATUS => $iconStatus,\n            ReportData::METRIC_INDICATOR_ICON_COMPLICATION => $iconComplication,\n            ReportData::METRIC_LINK_ENABLED => $linkEnabled,\n            ReportData::METRIC_LINK_HREF => Backend::url('system/updates')\n        ]));\n    }\n\n    /**\n     * getSystemIssuesData\n     */\n    protected function getSystemIssuesData(ReportDimension $dimension, ReportFetchDataResult $result)\n    {\n        $hasIssues = count($this->getSystemWarnings()) > 0;\n        $value = $hasIssues\n            ? __(\"Issues found\")\n            : __(\"No issues\");\n\n        $iconStatus = $hasIssues\n            ? ReportData::INDICATOR_ICON_STATUS_IMPORTANT\n            : ReportData::INDICATOR_ICON_STATUS_INFO;\n\n        $user = BackendAuth::getUser();\n\n        return $result->setRows($this->makeResultRow($dimension, [\n            ReportData::METRIC_VALUE => $value,\n            ReportData::METRIC_INDICATOR_ICON_STATUS => $iconStatus,\n            ReportData::METRIC_LINK_ENABLED => $user->isSuperUser() && $hasIssues,\n            ReportData::METRIC_LINK_HREF => ReportData::INDICATOR_HREF_POPUP\n        ]));\n    }\n\n    /**\n     * getEventLogData\n     */\n    protected function getEventLogData(ReportDimension $dimension, ReportFetchDataResult $result)\n    {\n        $logEnabled = (bool)LogSetting::get('log_events', false);\n        $recordCnt = $logEnabled ? EventLog::count() : 0;\n\n        $recordCnt = $recordCnt >= 1000\n            ? round($recordCnt / 1000) . 'K'\n            : number_format($recordCnt, 0);\n\n        $logHasRecords = $logEnabled\n            ? $recordCnt\n            : __(\"Disabled\");\n\n        $iconStatus = $logEnabled\n            ? ReportData::INDICATOR_ICON_STATUS_INFO\n            : ReportData::INDICATOR_ICON_STATUS_DISABLED;\n\n        return $result->setRows($this->makeResultRow($dimension, [\n            ReportData::METRIC_VALUE => $logHasRecords,\n            ReportData::METRIC_INDICATOR_ICON_STATUS => $iconStatus,\n            ReportData::METRIC_LINK_ENABLED => BackendAuth::userHasAccess('utilities.logs'),\n            ReportData::METRIC_LINK_HREF => Backend::url('system/eventlogs')\n        ]));\n    }\n\n    /**\n     * getRequestLogData\n     */\n    protected function getRequestLogData(ReportDimension $dimension, ReportFetchDataResult $result)\n    {\n        $logEnabled = (bool)LogSetting::get('log_requests', false);\n        $recordCnt = $logEnabled ? RequestLog::count() : 0;\n\n        $iconStatus = ReportData::INDICATOR_ICON_STATUS_INFO;\n\n        if (!$logEnabled) {\n            $iconStatus = ReportData::INDICATOR_ICON_STATUS_DISABLED;\n        }\n        elseif ($recordCnt > 0) {\n            $iconStatus = ReportData::INDICATOR_ICON_STATUS_IMPORTANT;\n        }\n\n        $recordCnt = $recordCnt >= 1000 ? round($recordCnt / 1000) . 'K' : number_format($recordCnt, 0);\n\n        $logHasRecords = $logEnabled\n            ? $recordCnt\n            : __(\"Disabled\");\n\n        return $result->setRows($this->makeResultRow($dimension, [\n            ReportData::METRIC_VALUE => $logHasRecords,\n            ReportData::METRIC_INDICATOR_ICON_STATUS => $iconStatus,\n            ReportData::METRIC_LINK_ENABLED => BackendAuth::userHasAccess('utilities.logs'),\n            ReportData::METRIC_LINK_HREF => Backend::url('system/requestlogs')\n        ]));\n    }\n\n    /**\n     * getSystemWarnings\n     */\n    protected function getSystemWarnings()\n    {\n        return array_merge(\n            $this->getSecurityWarnings(),\n            $this->getExtensionWarnings(),\n            $this->getPluginWarnings(),\n            $this->getPathWarnings()\n        );\n    }\n\n    /**\n     * getSecurityWarnings\n     */\n    protected function getSecurityWarnings(): array\n    {\n        $warnings = [];\n\n        if (Config::get('app.debug', true)) {\n            $warnings[] = __(\"Debug mode is enabled. This is not recommended for production installations.\");\n        }\n\n        $backendUris = [\n            'backend',\n            'back-end',\n            'login',\n            'admin',\n            'administration',\n        ];\n\n\n        $configUri = trim(ltrim((string) Config::get('backend.uri'), '/'));\n        foreach ($backendUris as $uri) {\n            if ($uri === $configUri) {\n                $warnings[] = __(\"The backend URL :name is too generic. Please set to something more unique.\", ['name' => '<strong>/'.$configUri.'</strong>']);\n                break;\n            }\n        }\n\n        $backendLogins = [\n            'guest',\n            'admin',\n            'administrator',\n            'root',\n            'user'\n        ];\n\n        $foundLogins = Db::table('backend_users')->whereIn('login', $backendLogins)->pluck('login')->all();\n        foreach ($foundLogins as $login) {\n            $warnings[] = __(\"An account with a generic login :name was found. Please rename this administrator account.\", ['name' => '<strong>'.$login.'</strong>']);\n        }\n\n        return $warnings;\n    }\n\n    /**\n     * getExtensionWarnings\n     */\n    protected function getExtensionWarnings(): array\n    {\n        $warnings = [];\n        $requiredExtensions = [\n            'GD' => extension_loaded('gd'),\n            'fileinfo' => extension_loaded('fileinfo'),\n            'Zip' => class_exists('ZipArchive'),\n            'cURL' => function_exists('curl_init') && defined('CURLOPT_FOLLOWLOCATION'),\n            'OpenSSL' => function_exists('openssl_random_pseudo_bytes'),\n        ];\n\n        foreach ($requiredExtensions as $extension => $installed) {\n            if (!$installed) {\n                $warnings[] = __(\"The PHP extension :name is not installed. Please install this library and activate the extension.\", ['name' => '<strong>'.$extension.'</strong>']);\n            }\n        }\n\n        return $warnings;\n    }\n\n    /**\n     * getPluginWarnings\n     */\n    protected function getPluginWarnings(): array\n    {\n        $warnings = [];\n        $missingPlugins = PluginManager::instance()->findMissingDependencies();\n\n        foreach ($missingPlugins as $pluginCode) {\n            $warnings[] = __(\"The plugin :name is a dependency but is not installed. Please install this plugin.\", ['name' => '<strong>'.$pluginCode.'</strong>']);\n        }\n\n        return $warnings;\n    }\n\n    /**\n     * getPathWarnings\n     */\n    protected function getPathWarnings(): array\n    {\n        $warnings = [];\n        $writablePaths = [\n            temp_path(),\n            storage_path(),\n            storage_path('app'),\n            storage_path('logs'),\n            storage_path('framework'),\n            storage_path('cms'),\n            storage_path('cms/cache'),\n            storage_path('cms/twig'),\n            storage_path('cms/combiner'),\n        ];\n\n        if (System::hasModule('Cms')) {\n            $writablePaths[] = themes_path();\n        }\n\n        foreach ($writablePaths as $path) {\n            if (!is_writable($path)) {\n                $warnings[] = __(\"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\", ['name' => '<strong>'.$path.'</strong>']);\n            }\n        }\n\n        return $warnings;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/TrafficLogger.php",
    "content": "<?php\n\nnamespace Dashboard\\Classes;\n\nuse App;\nuse Str;\nuse Site;\nuse Event;\nuse Config;\nuse Cookie;\nuse Request;\nuse BackendAuth;\nuse Dashboard\\Models\\DashboardSetting;\nuse Dashboard\\Models\\TrafficStatisticsPageview;\nuse Carbon\\Carbon;\n\n/**\n * TrafficLogger logs pageviews for Internal Traffic Statistics.\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass TrafficLogger\n{\n    /**\n     * @var \\Dashboard\\Models\\DashboardSetting settingModel\n     */\n    protected $settingModel;\n\n    /**\n     * __construct this class\n     */\n    public function __construct()\n    {\n        $this->settingModel = DashboardSetting::instance();\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('dashboard.traffic.logger');\n    }\n\n    /**\n     * isEnabled checks if the Internal Traffic Statistics feature is enabled.\n     * Returns true if the feature is enabled, and false otherwise.\n     */\n    public function isEnabled(): bool\n    {\n        return (bool) $this->settingModel->traffic_stats_enabled;\n    }\n\n    /**\n     * getTimezone retrieves the timezone setting for the Internal Traffic Statistics feature.\n     * If no specific timezone is set for the feature, it defaults to the general CMS timezone.\n     * Returns the timezone identifier string.\n     */\n    public function getTimezone(): string\n    {\n        $result = $this->settingModel->traffic_stats_timezone;\n\n        if (!$result) {\n            $result = Config::get('cms.timezone') ?? Config::get('app.timezone');\n        }\n\n        return (string) $result;\n    }\n\n    /**\n     * getRetentionMonths returns data retention, in months.\n     * Returns the number of months or null for indefinite retention.\n     */\n    public function getRetentionMonths(): ?int\n    {\n        $retention = $this->settingModel->traffic_stats_retention;\n\n        if ($retention && strlen($retention) && is_int($retention)) {\n            return (int) $retention;\n        }\n\n        return null;\n    }\n\n    /**\n     * logPageview logs a pageview for the Internal Traffic Statistics.\n     * This method should be called whenever a page is viewed\n     * to keep the statistics up-to-date. Creates a client\n     * ID cookie if it doesn't exist.\n     */\n    public function logPageview()\n    {\n        if (!self::isEnabled()) {\n            return;\n        }\n\n        if (Request::method() !== 'GET') {\n            return;\n        }\n\n        if (Request::ajax() && !Request::pjax()) {\n            return;\n        }\n\n        if ($this->settingModel->filter_exclude_bots && Request::isCrawler()) {\n            return;\n        }\n\n        if ($this->isAdminRoleExcluded()) {\n            return;\n        }\n\n        $referrer = Request::header('X-PJAX-REFERRER');\n        if (!$referrer) {\n            $referrer = Request::header('Referer');\n        }\n\n        $clientId = $this->getClientId();\n        $firstTimeVisit = false;\n        if (!$clientId) {\n            $clientId = $this->generateClientId();\n            $firstTimeVisit = true;\n        }\n\n        $evDateTime = $this->makeEventDateTime();\n\n        $pageview = new TrafficStatisticsPageview;\n        $pageview->user_authenticated = $this->isUserAuthenticated();\n        $pageview->ev_datetime = $evDateTime->toDateTimeString();\n        $pageview->ev_date = $evDateTime->toDateString();\n\n        $pageview->ev_year_month_day = $evDateTime->toDateString();\n        $pageview->ev_year = $evDateTime->copy()->startOfYear()->toDateString();\n        $pageview->ev_year_quarter  = $evDateTime->copy()->startOfQuarter()->toDateString();\n        $pageview->ev_year_month  = $evDateTime->copy()->startOfMonth()->toDateString();\n        $pageview->ev_year_week  = $evDateTime->copy()->startOfWeek(Carbon::MONDAY)->toDateString();\n\n        $pageview->client_id = $clientId;\n        $pageview->first_time_visit = $firstTimeVisit;\n        $pageview->user_agent = Str::substr((string) Request::header('User-Agent'), 0, 255);\n        $pageview->ip = Str::substr((string) Request::ip(), 0, 255);\n        $pageview->page_path = Str::substr((string) Request::path(), 0, 255);\n        $pageview->referral_domain = Str::substr((string) parse_url($referrer ?: '', PHP_URL_HOST), 0, 255);\n        $pageview->ev_timestamp = gmdate('Y-m-d H:i:s', time());\n\n        if (Site::hasFeature('dashboard_traffic_statistics')) {\n            $pageview->site_id = Site::getActiveSite()?->id;\n        }\n\n        $pageview->save();\n\n        if (rand(1, 100) === 1) {\n            TrafficStatisticsPageview::purgeOldRecords();\n        }\n    }\n\n    /**\n     * makeEventDateTime returns the current event date and time in the configured timezone.\n     * Returns the event date and time string.\n     */\n    protected function makeEventDateTime(): Carbon\n    {\n        return Carbon::now($this->getTimezone());\n    }\n\n    /**\n     * getClientId retrieves the client ID from the cookie. The client ID must have\n     * a maximum length of 64, as enforced by the database.\n     */\n    protected function getClientId()\n    {\n        $value = Cookie::get('oc_clid');\n\n        if (is_string($value)) {\n            return substr($value, 0, 64);\n        }\n\n        return null;\n    }\n\n    /**\n     * generateClientId generates a random client ID string.\n     */\n    protected function generateClientId(): string\n    {\n        $result = Str::random(32);\n\n        Cookie::queue('oc_clid', $result, 60 * 24 * 365 * 5); // 5 years\n\n        return $result;\n    }\n\n    /**\n     * isUserAuthenticated checks if the user is currently authenticated. Returns\n     * true if the user is authenticated, and false otherwise.\n     */\n    protected function isUserAuthenticated(): bool\n    {\n        /**\n         * @event cms.internalTrafficStatistics.isUserAuthenticated\n         * Verifies if there's a currently authenticated user.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.internalTrafficStatistics.isUserAuthenticated', function() {\n         *         return true;\n         *     });\n         *\n         */\n        $result = Event::fire('cms.internalTrafficStatistics.isUserAuthenticated', [], true);\n        if ($result === true) {\n            return $result;\n        }\n\n        return false;\n    }\n\n    /**\n     * isAdminRoleExcluded determines if an administrator role is excluded\n     */\n    protected function isAdminRoleExcluded(): bool\n    {\n        if (!$this->settingModel->filter_exclude_roles) {\n            return false;\n        }\n\n        $user = BackendAuth::getUser();\n        if (!$user) {\n            return false;\n        }\n\n        foreach ((array) $this->settingModel->filter_exclude_roles as $roleId) {\n            if ($roleId === '*') {\n                return true;\n            }\n\n            if ((int) $user->role_id === (int) $roleId) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/VueReportWidgetBase.php",
    "content": "<?php namespace Dashboard\\Classes;\n\nuse Backend\\Classes\\VueComponentBase;\nuse Dashboard\\Classes\\ReportFetchData;\nuse SystemException;\n\n/**\n * VueReportWidgetBase is a base class for Vue-based dashboard widgets\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class VueReportWidgetBase extends VueComponentBase\n{\n    use \\System\\Traits\\PropertyContainer;\n\n    /**\n     * @var DashReport dashReport object containing general dash report information.\n     */\n    protected $dashReport;\n\n    /**\n     * @var string alias defined for this widget.\n     */\n    public $alias;\n\n    /**\n     * @var string defaultAlias to identify this widget.\n     */\n    protected $defaultAlias = 'widget';\n\n    /**\n     * __construct\n     */\n    public function __construct($controller, $dashReport = null, $properties = [])\n    {\n        $this->dashReport = $dashReport;\n        $this->properties = $this->validateProperties($properties);\n\n        // Ensure the provided alias (if present) takes effect as the widget configuration is\n        // not passed to the WidgetBase constructor which would normally take care of that\n        if (!isset($this->alias)) {\n            $this->alias = $properties['alias'] ?? $this->defaultAlias;\n        }\n\n        parent::__construct($controller);\n    }\n\n    /**\n     * bindToController binds a widget to the controller for safe use.\n     * @return void\n     */\n    public function bindToController()\n    {\n        $this->controller->registerVueComponent($this::class);\n    }\n\n    /**\n     * getData\n     */\n    abstract public function getData(ReportFetchData $data): mixed;\n\n    /**\n     * runHandler\n     */\n    public function runHandler(array $widgetConfig, string $handlerName, array $extraData): mixed\n    {\n        if (!preg_match('/^on[a-z0-9_]+/i', $handlerName)) {\n            throw new SystemException('Invalid handler name');\n        }\n\n        if (!method_exists($this, $handlerName)) {\n            throw new SystemException('Handler does not exist');\n        }\n\n        return $this->{$handlerName}($widgetConfig, $extraData);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/dashmanager/HasDataSources.php",
    "content": "<?php namespace Dashboard\\Classes\\DashManager;\n\nuse Lang;\nuse SystemException;\nuse Dashboard\\Classes\\ReportDataSourceBase;\n\n/**\n * HasDataSources\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasDataSources\n{\n    /**\n     * @var string[]\n     */\n    protected $dataSources = [];\n\n    /**\n     * registerDataSourceClass registers a report data source.\n     * @param string $className A class name of a data source.\n     * The class must extend Dashboard\\Classes\\ReportDataSourceBase\n     * @param string $displayName The data source name to display in the user interface.\n     */\n    public function registerDataSourceClass(string $className, string $displayName): void\n    {\n        $this->dataSources[$className] = [\n            'displayName' => $displayName\n        ];\n    }\n\n    /**\n     * getDataSource returns a data source instance by its class name.\n     * @throws SystemException if the provided class name is not a subclass Dashboard\\Classes\\ReportDataSourceBase.\n     * @param string $className A data source class name.\n     * @return ?ReportDataSourceBase Returns the data source instance or null.\n     */\n    public function getDataSource(string $className): ?ReportDataSourceBase\n    {\n        if (!array_key_exists($className, $this->dataSources)) {\n            return null;\n        }\n\n        if (!is_subclass_of($className, ReportDataSourceBase::class)) {\n            throw new SystemException(\"The provided class is not a report data source: \" . $className);\n        }\n\n        return new $className();\n    }\n\n    /**\n     * listDataSourceClasses returns class and display names of registered data sources.\n     * @return array\n     */\n    public function listDataSourceClasses(): array\n    {\n        $result = [];\n        foreach ($this->dataSources as $className => $info) {\n            $result[$className] = $info['displayName'];\n        }\n        return $result;\n    }\n\n    /**\n     * getDefaultWidgetConfigs returns the default widget configuration for data source dimensions that have a defined type.\n     * @return array\n     */\n    public function getDefaultWidgetConfigs(): array\n    {\n        $result = [];\n        $dataSourceClasses = $this->listDataSourceClasses();\n        foreach ($dataSourceClasses as $className => $displayName) {\n            $dataSource = $this->getDataSource($className);\n            if (!$dataSource) {\n                continue;\n            }\n\n            $dimensions = $dataSource->getAvailableDimensions();\n\n            foreach ($dimensions as $dimension) {\n                $type = $dimension->getDimensionType();\n                if (!$type) {\n                    continue;\n                }\n\n                $defaultConfig = $dimension->getDefaultWidgetConfig();\n                $defaultConfig['dimension'] = $dimension->getCode();\n                $defaultConfig['dataSource'] = $className;\n\n                $dataSourceName = Lang::get($displayName);\n                $menuItemData = [\n                    'config' => $defaultConfig,\n                    'dimension' => Lang::get($dimension->getDisplayName()),\n                ];\n\n                $result[$type] ??= [];\n                $result[$type][$dataSourceName] ??= [];\n                $result[$type][$dataSourceName][] = $menuItemData;\n            }\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/dashmanager/HasVueReportWidgets.php",
    "content": "<?php namespace Dashboard\\Classes\\DashManager;\n\nuse SystemException;\nuse Backend\\Classes\\Controller;\nuse Dashboard\\Classes\\VueReportWidgetBase;\n\n/**\n * HasVueReportWidgets\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasVueReportWidgets\n{\n    /**\n     * @var array vueReportWidgets\n     */\n    protected $vueReportWidgets;\n\n    /**\n     * listVueReportWidgetClasses returns class names and registration parameters of registered dashboard widgets.\n     */\n    public function listVueReportWidgetClasses(): array\n    {\n        if ($this->vueReportWidgets === null) {\n            $this->listVueReportWidgets();\n        }\n\n        return array_keys($this->vueReportWidgets);\n    }\n\n    /**\n     * listReportWidgets returns a list of registered report widgets.\n     * @return array Array keys are class names.\n     */\n    public function listVueReportWidgets()\n    {\n        if ($this->vueReportWidgets !== null) {\n            return $this->vueReportWidgets;\n        }\n\n        $widgets = [];\n        foreach ($this->widgetManager->listReportWidgets() as $className => $widgetInfo) {\n            if (is_subclass_of($className, VueReportWidgetBase::class)) {\n                $widgets[$className] = $widgetInfo;\n            }\n        }\n\n        return $this->vueReportWidgets = $widgets;\n    }\n\n    /**\n     * isVueReportWidget\n     */\n    public function isVueReportWidget($widgetCodeOrClass): bool\n    {\n        $widgetClass = $this->widgetManager->resolveReportWidget($widgetCodeOrClass);\n\n        return is_subclass_of($widgetClass, VueReportWidgetBase::class);\n    }\n\n    /**\n     * getWidget returns a dashboard widget instance by its class name.\n     * @throws SystemException if the provided class name is not a subclass Dashboard\\Classes\\VueReportWidgetBase.\n     * @param string $className A dashboard widget class name.\n     * @param Controller $controller Parent controller instance.\n     * @return ?VueReportWidgetBase Returns the dashboard widget instance or null.\n     */\n    public function getVueReportWidget(string $className, Controller $controller): ?VueReportWidgetBase\n    {\n        if ($this->vueReportWidgets === null) {\n            $this->listVueReportWidgets();\n        }\n\n        if (!array_key_exists($className, $this->vueReportWidgets)) {\n            return null;\n        }\n\n        if (!is_subclass_of($className, VueReportWidgetBase::class)) {\n            throw new SystemException(\"The provided class is not a dashboard widget: {$className}\");\n        }\n\n        return new $className($controller);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/classes/systemreportdatasource/_warnings.php",
    "content": "<div class=\"modal-body\">\n    <p><?= e(trans('backend::lang.warnings.tips_description')) ?></p>\n\n    <div class=\"control-simplelist with-icons is-divided\">\n        <ul class=\"mb-0\">\n            <?php foreach ($warnings as $warning): ?>\n                <li class=\"py-2\">\n                    <?= $warning ?>\n                </li>\n            <?php endforeach ?>\n        </ul>\n    </div>\n</div>\n<div class=\"modal-footer\">\n    <button\n        type=\"button\"\n        class=\"btn btn-primary btn-default-action\"\n        data-default-focus\n        data-close-popup=\"close\"\n    >Close</button>\n</div>"
  },
  {
    "path": "modules/dashboard/composer.json",
    "content": "{\n    \"name\": \"october/dashboard\",\n    \"type\": \"october-module\",\n    \"description\": \"Dashboard module for October CMS\",\n    \"homepage\": \"https://octobercms.com\",\n    \"keywords\": [\"october cms\", \"october\", \"dashboard\"],\n    \"authors\": [\n        {\n            \"name\": \"Alexey Bobkov\",\n            \"email\": \"aleksey.bobkov@gmail.com\"\n        },\n        {\n            \"name\": \"Samuel Georges\",\n            \"email\": \"daftspunky@gmail.com\"\n        }\n    ]\n}\n"
  },
  {
    "path": "modules/dashboard/controllers/DashboardSettings.php",
    "content": "<?php namespace Dashboard\\Controllers;\n\nuse Str;\nuse Lang;\nuse Flash;\nuse Backend;\nuse Backend\\Classes\\SettingsController;\nuse Dashboard\\Models\\TrafficStatisticsPageview;\nuse Dashboard\\Classes\\TrafficLogger;\nuse Dashboard\\Classes\\CmsDemoTrafficDataGenerator;\nuse Dashboard\\Models\\DashboardSetting;\n\n/**\n * DashboardSettings controller\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DashboardSettings extends SettingsController\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array requiredPermissions required to view this page.\n     */\n    public $requiredPermissions = ['dashboard.internal_traffic_statistics'];\n\n    /**\n     * @var string settingsItemCode determines the settings code\n     */\n    public $settingsItemCode = 'dash_settings';\n\n    /**\n     * index\n     */\n    public function index()\n    {\n        $this->pageTitle = \"Internal Traffic Statistics\";\n        $this->pageSize = Backend::sizeToPixels('large') ?: null;\n\n        $this->vars['recordsTotal'] = Str::shortNumber(TrafficStatisticsPageview::count());\n\n        $this->update();\n    }\n\n    /**\n     * index_onSave\n     */\n    public function index_onSave()\n    {\n        return $this->update_onSave();\n    }\n\n    /**\n     * index_onPurgeData\n     */\n    public function index_onPurgeData()\n    {\n        TrafficStatisticsPageview::purgeAllRecords();\n\n        $this->vars['recordsTotal'] = 0;\n\n        Flash::success(__(\"Internal Traffic Statistics data purged\"));\n    }\n\n    /**\n     * update_onResetDefault AJAX handler\n     */\n    public function index_onResetDefault()\n    {\n        DashboardSetting::instance()->resetDefault();\n\n        Flash::success(Lang::get('backend::lang.form.reset_success'));\n\n        return Backend::redirect('dashboard/dashboardsettings');\n    }\n\n    /**\n     * index_onGenerateDemoData AJAX handler\n     */\n    public function index_onGenerateDemoData()\n    {\n        CmsDemoTrafficDataGenerator::instance()->generate();\n\n        Flash::success(\"Demo Traffic Data has been generated\");\n\n        return Backend::redirect('dashboard/dashboardsettings');\n    }\n\n    /**\n     * formFindModelObject always returns the dash setting instance\n     */\n    public function formFindModelObject($recordId)\n    {\n        return DashboardSetting::instance();\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/controllers/Dashboards.php",
    "content": "<?php namespace Dashboard\\Controllers;\n\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse Dashboard\\Models\\Dashboard;\nuse ForbiddenException;\n\n/**\n * Dashboards controller for the dashboard\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass Dashboards extends Controller\n{\n    use \\Backend\\Traits\\InspectableContainer;\n\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n        \\Backend\\Behaviors\\ListController::class\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    public $requiredPermissions = ['dashboard.manage'];\n\n    /**\n     * __construct the controller\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.Dashboard', 'dashboard');\n    }\n\n    /**\n     * index\n     */\n    public function index()\n    {\n        $this->asExtension('ListController')->index();\n\n        $this->bodyClass = 'compact-container sidenav-responsive';\n\n        $this->vars['dashboards'] = Dashboard::listDashboards(\\Dashboard\\Controllers\\Index::class);\n    }\n\n    /**\n     * formBeforeSave\n     */\n    public function formBeforeSave($model)\n    {\n        $model->is_custom = true;\n        $model->owner_type = \\Dashboard\\Controllers\\Index::class;\n\n        if ($model->owner_field) {\n            $model->code = $model->owner_field;\n        }\n    }\n\n    /**\n     * onResetDefault\n     */\n    public function onResetDefault()\n    {\n        if (!$this->formCheckPermission('modelDelete')) {\n            throw new ForbiddenException;\n        }\n\n        if ($model = $this->formFindModelObject(post('form_record_id'))) {\n            $model->is_custom = false;\n            $model->definition = null;\n            $model->save();\n        }\n\n        return $this->listRefresh();\n    }\n\n    /**\n     * formExtendFields\n     */\n    public function formExtendFields($form)\n    {\n        $model = $form->getModel();\n\n        if ($model->is_system) {\n            $form->getField('code')->disabled();\n            $form->getField('is_global')->disabled();\n            $form->getField('is_interval_hidden')->disabled();\n        }\n        else {\n            $form->getField('_system_definition_hint')->hidden();\n        }\n    }\n\n    /**\n     * listExtendQuery\n     */\n    public function listExtendQuery($query)\n    {\n        $query->applyOwner(Index::class)->applyCreatedUserOrSystem();\n    }\n\n    /**\n     * formExtendQuery\n     */\n    public function formExtendQuery($query)\n    {\n        $query->applyOwner(Index::class)->applyCreatedUserOrSystem();\n    }\n\n    /**\n     * listExtendRefreshResults refreshes the sidenav on every list update\n     */\n    public function listExtendRefreshResults($host, $result, $definition = null)\n    {\n        $this->vars['dashboards'] = Dashboard::listDashboards(Index::class);\n\n        return ['#dashboardSidenav' => $this->makePartial('~/modules/dashboard/controllers/index/_dash_sidenav.php')];\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/controllers/Index.php",
    "content": "<?php namespace Dashboard\\Controllers;\n\nuse Backend;\nuse Request;\nuse Redirect;\nuse BackendAuth;\nuse BackendMenu;\nuse Backend\\Classes\\WildcardController;\nuse Dashboard\\Models\\Dashboard;\n\n/**\n * Index controller for the dashboard\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Index extends WildcardController\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Dashboard\\Behaviors\\DashController::class,\n    ];\n\n    /**\n     * @var array `DashController` configuration.\n     */\n    public $dashConfig = 'config_dash.yaml';\n\n    /**\n     * @var array requiredPermissions to view this page.\n     * @see checkPermissionRedirect()\n     */\n    public $requiredPermissions = [];\n\n    /**\n     * @var string turboRouter\n     */\n    public $turboRouter = 'reload';\n\n    /**\n     * @var object listAllDashboardsCache\n     */\n    protected $listAllDashboardsCache;\n\n    /**\n     * __construct the controller\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.Dashboard', 'dashboard');\n    }\n\n    /**\n     * index controller action\n     */\n    public function index($code = null)\n    {\n        if ($redirect = $this->checkPermissionRedirect()) {\n            return $redirect;\n        }\n\n        $this->bodyClass = 'compact-container sidenav-responsive';\n        $this->pageTitle = \"Dashboard\";\n\n        $this->syncAllDashboards();\n\n        $dashboards = $this->listAllDashboards();\n        $this->vars['dashboards'] = $dashboards;\n        $this->vars['dashboard'] = $code\n            ? $dashboards->where('code', $code)->first()\n            : $this->resolveDefaultDashboard($dashboards);\n\n        $this->initDash();\n    }\n\n    /**\n     * checkPermissionRedirect custom permissions check that will redirect to the next\n     * available menu item, if permission to this page is denied.\n     */\n    protected function checkPermissionRedirect()\n    {\n        if ($this->user->hasAnyAccess(['dashboard', 'dashboard.*'])) {\n            return;\n        }\n\n        if ($first = array_first(BackendMenu::listMainMenuItems())) {\n            return Redirect::intended($first->url);\n        }\n    }\n\n    /**\n     * syncAllDashboards\n     */\n    protected function syncAllDashboards()\n    {\n        if (!Request::ajax()) {\n            Dashboard::syncAll(\n                $this,\n                (array) $this->asExtension('DashController')->dashGetConfig()\n            );\n        }\n    }\n\n    /**\n     * dashGetConfig dynamically specifies the dash widget config from the dashboard\n     * model configuration.\n     */\n    public function dashGetConfig()\n    {\n        $allDashboards = $this->listAllDashboards()->keyBy('code')->all();\n\n        $config = $this->mergeConfig(\n            array_fill_keys(array_keys($allDashboards), []),\n            $this->makeConfig($this->dashConfig)\n        );\n\n        // Post processing\n        foreach ($config as &$definition) {\n            $definition['manageUrl'] = BackendAuth::userHasAccess('dashboard.manage') ? Backend::url('dashboard/dashboards') : null;\n        }\n\n        // Transfer dynamic config\n        foreach ($allDashboards as $code => $dashboard) {\n            $config->$code['name'] = $dashboard->name;\n            $config->$code['showInterval'] = !$dashboard->is_interval_hidden;\n\n            // Allow personalization of global and role-based dashboards\n            if ($dashboard->is_global || $dashboard->roles->isNotEmpty()) {\n                $config->$code['canMakeDefault'] = true;\n                $config->$code['canResetLayout'] = true;\n            }\n        }\n\n        return $config;\n    }\n\n    /**\n     * resolveDefaultDashboard applies 3-tier resolution:\n     * 1. User's personal dashboard\n     * 2. Role-based dashboard\n     * 3. Global/system dashboard (fallback)\n     */\n    protected function resolveDefaultDashboard($dashboards)\n    {\n        $user = BackendAuth::user();\n        $userRoleId = $user?->role_id;\n\n        // Tier 1: User's own personal dashboard\n        $personal = $dashboards->first(function($d) use ($user) {\n            return $d->created_user_id === $user?->id\n                && !$d->is_global\n                && !$d->is_system;\n        });\n\n        if ($personal) {\n            return $personal;\n        }\n\n        // Tier 2: Role-based dashboard\n        if ($userRoleId) {\n            $roleBased = $dashboards->first(function($d) use ($userRoleId) {\n                return $d->roles->contains('id', $userRoleId);\n            });\n\n            if ($roleBased) {\n                return $roleBased;\n            }\n        }\n\n        // Tier 3: First available (global/system)\n        return $dashboards->first();\n    }\n\n    /**\n     * listAllDashboards\n     */\n    protected function listAllDashboards()\n    {\n        return $this->listAllDashboardsCache ??= Dashboard::listDashboards($this);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/controllers/dashboards/_form_popup_buttons.php",
    "content": "<?php\n    $isPreview = $this->formGetWidget()->previewMode;\n?>\n<div>\n    <?php if ($isPreview): ?>\n        <?= Ui::button(\n            label: __(\"Close\"),\n            dataDismiss: 'popup'\n        ) ?>\n    <?php else: ?>\n        <?php if (!$this->formGetModel()->exists): ?>\n            <?= Ui::ajaxButton(\n                label: __(\"Create\"),\n                handler: 'onPopupSave',\n                primary: true,\n                hotkey: ['ctrl+s', 'cmd+s'],\n                dataRequestData: \"redirect: false\",\n                dataPopupLoadIndicator: true\n            ) ?>\n        <?php else: ?>\n            <?= Ui::ajaxButton(\n                label: __(\"Save\"),\n                handler: 'onPopupSave',\n                primary: true,\n                hotkey: ['ctrl+s', 'cmd+s'],\n                dataRequestData: \"redirect: false\",\n                dataPopupLoadIndicator: true\n            ) ?>\n\n            <?php if ($formModel->is_system): ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Reset to Default\"),\n                    handler: 'onResetDefault',\n                    class: 'btn-link p-0 pull-right mt-3',\n                    dataRequestConfirm: __(\"Are you sure?\"),\n                    dataPopupLoadIndicator: true\n                ) ?>\n            <?php else: ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Delete\"),\n                    handler: 'onPopupDelete',\n                    class: 'btn-danger pull-right',\n                    icon: 'icon-delete',\n                    dataRequestConfirm: __(\"Delete this record?\"),\n                    dataPopupLoadIndicator: true\n                ) ?>\n            <?php endif ?>\n        <?php endif ?>\n\n        <span class=\"btn-text\">\n            <span class=\"button-separator\"><?= __(\"or\") ?></span>\n            <?= Ui::ajaxButton(\n                label: __(\"Cancel\"),\n                handler: 'onPopupCancel',\n                class: 'btn-link p-0',\n                dataBrowserRedirectBack: true,\n                dataRequestData: \"close: true\",\n                dataDismiss: 'popup'\n            ) ?>\n        </span>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/dashboard/controllers/dashboards/_list_toolbar.php",
    "content": "<div data-control=\"toolbar loader-container\">\n    <?= Ui::popupButton(\n        label: __(\"New :name\", ['name' => 'Dashboard']),\n        handler: 'onLoadPopupForm',\n        icon: 'icon-plus',\n        primary: true\n    ) ?>\n\n    <div class=\"toolbar-divider\"></div>\n\n    <?= Ui::ajaxButton(\n        label: __(\"Delete\"),\n        handler: 'onDelete',\n        icon: 'icon-delete',\n        secondary: true,\n        dataRequestConfirm: __(\"Are you sure?\"),\n        dataRequestMessage: __(\"Deleting...\"),\n        dataListCheckedTrigger: true,\n        dataListCheckedRequest: true,\n        disabled: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/dashboard/controllers/dashboards/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\n# Record name\nname: Dashboard\n\n# Model Form Field configuration\nform: ~/modules/dashboard/models/dashboard/fields.yaml\n\n# Model Class name\nmodelClass: Dashboard\\Models\\Dashboard\n\n# Form Design\ndesign:\n    displayMode: popup\n"
  },
  {
    "path": "modules/dashboard/controllers/dashboards/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\n# Model List Column configuration\nlist: ~/modules/dashboard/models/dashboard/columns.yaml\n\n# Model Class name\nmodelClass: Dashboard\\Models\\Dashboard\n\n# List Title\ntitle: Manage Dashboards\n\n# Link each record to popup form design\nrecordOnClick: popup\n\n# Message to display if the list is empty\nnoRecordsMessage: backend::lang.list.no_records\n\n# Records to display per page\nrecordsPerPage: 20\n\n# Display page numbers with pagination, disable to improve performance\nshowPageNumbers: true\n\n# Displays the list column set up button\nshowSetup: true\n\n# Displays the sorting link on each column\nshowSorting: true\n\n# Default sorting column\ndefaultSort:\n    column: id\n    direction: asc\n\n# Display checkboxes next to each record\nshowCheckboxes: true\n\n# Structure config\nstructure:\n    showTree: false\n    showReorder: true\n    maxDepth: 1\n\n# Toolbar widget configuration\ntoolbar:\n    # Partial for toolbar buttons\n    buttons: list_toolbar\n\n    # Search widget configuration\n    search:\n        prompt: backend::lang.list.search_prompt\n\n"
  },
  {
    "path": "modules/dashboard/controllers/dashboards/index.php",
    "content": "<?php if (count($dashboards) > 1): ?>\n    <?= $this->makePartial('~/modules/dashboard/controllers/index/_dash_sidenav.php') ?>\n<?php endif ?>\n\n<div class=\"pt-4\">\n    <?= $this->listRender() ?>\n</div>\n"
  },
  {
    "path": "modules/dashboard/controllers/dashboardsettings/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\n# Record name\nname: \"Dashboard Settings\"\n\n# Fields are defined by extension\nform: ~/modules/dashboard/models/dashboardsetting/fields.yaml\n\n# Model Class name\nmodelClass: Dashboard\\Models\\DashboardSetting\n\n# Default redirect location\ndefaultRedirect: system/settings\n"
  },
  {
    "path": "modules/dashboard/controllers/dashboardsettings/index.php",
    "content": "<?php if (!$this->fatalError): ?>\n\n<?= Form::open(['class'=>'d-flex flex-column h-100 design-settings']) ?>\n    <div>\n        <div class=\"scoreboard\">\n            <div data-control=\"toolbar\">\n                <div class=\"scoreboard-item title-value\">\n                    <h4>Traffic Records</h4>\n                    <p><?= e($recordsTotal) ?></p>\n                    <p class=\"description\">\n                        <a\n                            href=\"javascript:;\"\n                            data-request=\"onPurgeData\"\n                            data-request-message=\"<?= e(__(\"Purging the data...\")) ?>\"\n                            data-request-confirm=\"<?= e(__(\"Do you really want to purge the Internal Traffic Statistics data?\")) ?>\"\n                        ><?= e(__(\"Purge Data\")) ?></a>\n                    </p>\n                </div>\n                <div class=\"scoreboard-item title-value\">\n                    <h4>Sample Traffic Data</h4>\n                    <p>Seed</p>\n                    <p class=\"description\">\n                        <a\n                            href=\"javascript:;\"\n                            data-request=\"onGenerateDemoData\"\n                            data-request-message=\"Generating data...\"\n                            data-request-confirm=\"Do you really want to generate the demo traffic data? This could take a few minutes...\"\n                        ><?= __(\"Generate Data\") ?></a>\n                    </p>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"flex-grow-1\">\n        <?= $this->formRender() ?>\n    </div>\n\n    <div class=\"form-buttons\">\n        <div data-control=\"loader-container\" class=\"control-loader-container\">\n            <?= Ui::ajaxButton(\n                label: __(\"Save\"),\n                handler: 'onSave',\n                primary: true,\n                hotkey: ['ctrl+s', 'cmd+s'],\n                dataRequestData: \"redirect: false\",\n                dataRequestMessage: __(\"Saving...\")\n            ) ?>\n\n            <?= Ui::ajaxButton(\n                label: __(\"Save & Close\"),\n                handler: 'onSave',\n                secondary: true,\n                hotkey: ['ctrl+enter', 'cmd+enter'],\n                dataRequestData: \"close: true\",\n                dataRequestMessage: __(\"Saving...\")\n            ) ?>\n\n            <span class=\"btn-text\">\n                <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                <?= Ui::button(\n                    label: __(\"Cancel\"),\n                    href: Backend::url('system/settings'),\n                    class: 'btn-link p-0'\n                ) ?>\n            </span>\n\n            <span class=\"pull-right btn-text\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Reset to Default\"),\n                    handler: 'onResetDefault',\n                    href: 'javascript:;',\n                    class: 'btn-link p-0',\n                    dataRequestData: \"redirect: false\",\n                    dataRequestConfirm: __(\"Are you sure?\"),\n                    dataRequestMessage: __(\"Resetting...\")\n                ) ?>\n            </span>\n        </div>\n    </div>\n\n<?= Form::close() ?>\n\n<?php else: ?>\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to System Settings\"),\n            href: Backend::url('system/settings'),\n            secondary: true\n        ) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/dashboard/controllers/index/_dash_sidenav.php",
    "content": "<?php\n    $dashboard = $dashboard ?? null;\n?>\n<div id=\"dashboardSidenav\" class=\"secondary-nav\">\n    <div class=\"control-toolbar responsive-sidebar-toolbar\" role=\"navigation\">\n        <div data-control=\"toolbar\" data-disposable=\"\">\n            <nav class=\"layout-sidenav sidenav-responsive\">\n                <ul class=\"mainmenu-items\">\n                    <?php foreach ($dashboards as $item): ?>\n                        <?php\n                            $isActive = $dashboard && $dashboard->code == $item->code;\n                        ?>\n                        <li class=\"mainmenu-item <?= $isActive ? 'active' : '' ?>\">\n                            <a href=\"<?= Backend::url('dashboard/index/'. e($item->code)) ?>\">\n                                <span class=\"nav-icon\">\n                                    <i class=\"<?= e($item->icon) ?>\"></i>\n                                </span>\n                                <span class=\"nav-label\"><?= e($item->name) ?></span>\n                            </a>\n                        </li>\n                    <?php endforeach ?>\n                </ul>\n            </nav>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/dashboard/controllers/index/config_dash.yaml",
    "content": "# ===================================\n#  Dash Behavior Config\n# ===================================\n\nsystem:\n    name: System Dashboard\n    icon: ph ph-globe\n    # canCreateAndEdit: true\n    # showInterval: false\n    # defaultStart: month\n    # defaultEnd: today\n    # defaultInterval: day\n    # defaultCompare: none\n    reports:\n        cms_information:\n            row: 2\n            width: 4\n            type: indicator\n            icon: ph ph-power\n            title: Manage Status\n            linkText: Manage Status\n            dimension: indicator@cms_information\n            dataSource: Dashboard\\Classes\\CmsStatusDataSource\n\n        version_information:\n            row: 2\n            width: 4\n            type: indicator\n            icon: ph ph-package\n            title: System Build\n            linkText: View Available Updates\n            dimension: indicator@version_information\n            dataSource: Dashboard\\Classes\\SystemReportDataSource\n\n        system_issues:\n            row: 2\n            width: 4\n            type: indicator\n            icon: ph ph-gear-fine\n            title: Configuration\n            linkText: View Issues\n            dimension: indicator@system_issues\n            dataSource: Dashboard\\Classes\\SystemReportDataSource\n\n        event_log:\n            row: 2\n            width: 4\n            type: indicator\n            icon: ph ph-bell-ringing\n            title: Event Log\n            linkText: View Event Log\n            dimension: indicator@event_log\n            dataSource: Dashboard\\Classes\\SystemReportDataSource\n\n        request_log:\n            row: 2\n            width: 4\n            type: indicator\n            icon: ph ph-signpost\n            title: Bad requests\n            linkText: Request Log\n            dimension: indicator@request_log\n            dataSource: Dashboard\\Classes\\SystemReportDataSource\n\n        traffic_title:\n            row: 1\n            width: 20\n            type: section-title\n            title: Traffic\n            showInterval: true\n\n        visitor_chart:\n            row: 3\n            width: 20\n            type: chart\n            chartType: line\n            dimension: date\n            sortOrder: asc\n            sortBy: oc_dimension\n            dataSource: Dashboard\\Classes\\CmsReportDataSource\n            metrics:\n                pageviews:\n                    color: \"#84cc16\"\n                    displayTotals: true\n                unique_visitors:\n                    color: \"#0ea5e9\"\n                    displayTotals: true\n\n        top_pages_table:\n            row: 4\n            width: 10\n            type: table\n            title: Top Pages\n            limit: 10\n            dimension: page_path\n            sortOrder: desc\n            sortBy: oc_metric-pageviews\n            dataSource: Dashboard\\Classes\\CmsReportDataSource\n            metrics:\n                pageviews:\n                    color: \"#84cc16\"\n                    displayTotals: true\n                    displayRelativeBar: true\n                unique_visitors:\n                    color: \"#06b6d4\"\n                    displayTotals: true\n                    displayRelativeBar: true\n\n        top_referrals_table:\n            row: 4\n            width: 10\n            type: table\n            title: Top Referral Domains\n            limit: 10\n            dimension: referral_domain\n            sortOrder: desc\n            sortBy: oc_metric-pageviews\n            dataSource: Dashboard\\Classes\\CmsReportDataSource\n            metrics:\n                pageviews:\n                    color: \"#84cc16\"\n                    displayTotals: true\n                    displayRelativeBar: true\n                unique_visitors:\n                    color: \"#06b6d4\"\n                    displayTotals: true\n                    displayRelativeBar: true\n\n# classic:\n#     name: Classic Dashboard\n#     icon: ph ph-airplane\n#     reports:\n#         welcome:\n#             row: 1\n#             width: 20\n#             title: Welcome\n#             type: Backend\\ReportWidgets\\Welcome\n\n#         system_status:\n#             row: 2\n#             width: 12\n#             title: System Status\n#             type: System\\ReportWidgets\\Status\n\n#         active_theme:\n#             row: 2\n#             width: 8\n#             title: Website\n#             type: Cms\\ReportWidgets\\ActiveTheme\n\n#         my_custom_vue_widget:\n#             title: My Custom Vue Widget\n#             row: 3\n#             width: 20\n#             type: October\\Test\\VueComponents\\MyCustomWidget\n\n#         my_custom_widget:\n#             title: My Custom Widget\n#             row: 4\n#             width: 20\n#             type: October\\Test\\ReportWidgets\\ClearCache\n"
  },
  {
    "path": "modules/dashboard/controllers/index/index.php",
    "content": "<?php if (count($dashboards) > 1): ?>\n    <?= $this->makePartial('dash_sidenav') ?>\n<?php endif ?>\n\n<?php if ($dashboard): ?>\n    <form>\n        <div class=\"padded-container\">\n            <?= $this->dashRender($dashboard->code) ?>\n        </div>\n    </form>\n<?php else: ?>\n    <div class=\"padded-container\">\n        <p class=\"flash-message static error\">\n            <?= __(\"The requested dashboard could not be found.\") ?>\n        </p>\n        <p>\n            <a href=\"<?= Backend::url('backend') ?>\" class=\"btn btn-default\">\n                <?= __(\"Return to Dashboard\") ?>\n            </a>\n        </p>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/dashboard/database/migrations/2025_10_01_000001_Db_Dashboard_Dashboards.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('dashboard_dashboards', function(Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('name')->nullable();\n            $table->string('code')->nullable();\n            $table->string('icon')->nullable();\n            $table->string('owner_type')->nullable();\n            $table->string('owner_field')->nullable();\n            $table->mediumText('definition')->nullable();\n            $table->boolean('is_custom')->default(false);\n            $table->boolean('is_global')->default(false);\n            $table->integer('sort_order')->nullable();\n            $table->bigInteger('updated_user_id')->unsigned()->nullable();\n            $table->bigInteger('created_user_id')->unsigned()->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('dashboard_dashboards');\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/database/migrations/2025_10_01_000002_Db_Dashboard_Report_Data_Cache.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('dashboard_report_data_cache', function($table) {\n            $table->increments('id');\n            $table->string('key')->index();\n            $table->mediumText('value');\n            $table->timestamps();\n            $table->date('value_date');\n            $table->index('created_at');\n            $table->index(['key', 'value_date']);\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('dashboard_report_data_cache');\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/database/migrations/2025_10_01_000003_Db_Dashboard_Traffic_Stats_Pageviews.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('dashboard_traffic_stats_pageviews', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->dateTime('ev_datetime')->nullable()->index();\n            $table->date('ev_date')->nullable()->index();\n            $table->string('ev_year_month_day', 10)->nullable()->index();\n            $table->string('ev_year_month', 10)->nullable()->index();\n            $table->string('ev_year_quarter', 10)->nullable()->index();\n            $table->string('ev_year_week', 10)->nullable()->index();\n            $table->string('ev_year', 10)->nullable()->index();\n            $table->timestamp('ev_timestamp')->useCurrent()->index();\n            $table->boolean('user_authenticated')->nullable()->index();\n            $table->string('client_id', 64)->nullable()->index();\n            $table->boolean('first_time_visit')->default(false)->index();\n            $table->string('user_agent')->nullable()->index();\n            $table->string('page_path')->nullable()->index();\n            $table->string('ip')->nullable();\n            $table->string('city', 64)->nullable()->index();\n            $table->string('country', 64)->nullable()->index();\n            $table->string('referral_domain')->nullable()->index();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('dashboard_traffic_stats_pageviews');\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/database/migrations/2025_10_01_000004_Db_Add_Dashboard_Overrides.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::table('dashboard_dashboards', function (Blueprint $table) {\n            $table->boolean('is_interval_hidden')->default(false);\n            $table->boolean('is_system')->default(false);\n        });\n\n        // Patch existing tables\n        Db::table('dashboard_dashboards')\n            ->whereNotNull('owner_field')\n            ->update(['is_system' => true])\n        ;\n    }\n\n    public function down()\n    {\n        if (Schema::hasColumn('dashboard_dashboards', 'is_interval_hidden')) {\n            Schema::dropColumns('dashboard_dashboards', 'is_interval_hidden');\n        }\n\n        if (Schema::hasColumn('dashboard_dashboards', 'is_system')) {\n            Schema::dropColumns('dashboard_dashboards', 'is_system');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/database/migrations/2025_10_01_000005_Db_Dashboard_Traffic_Stats_Add_Site.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::table('dashboard_traffic_stats_pageviews', function (Blueprint $table) {\n            $table->integer('site_id')->nullable()->index()->after('id');\n        });\n    }\n\n    public function down()\n    {\n        Schema::table('dashboard_traffic_stats_pageviews', function (Blueprint $table) {\n            $table->dropColumn('site_id');\n        });\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/database/migrations/2026_10_01_000006_Db_Dashboard_Roles.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('dashboard_dashboards_roles', function(Blueprint $table) {\n            $table->bigInteger('dashboard_id')->unsigned();\n            $table->integer('role_id')->unsigned();\n            $table->primary(['dashboard_id', 'role_id']);\n        });\n\n        Schema::table('dashboard_dashboards', function(Blueprint $table) {\n            $table->boolean('is_hidden')->default(false);\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('dashboard_dashboards_roles');\n\n        if (Schema::hasColumn('dashboard_dashboards', 'is_hidden')) {\n            Schema::dropColumns('dashboard_dashboards', 'is_hidden');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/lang/ar.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"تسجل ميزة إحصائيات حركة المرور الداخلية عدد مرات مشاهدة الصفحة وعناوين IP وبيانات المستخدم الأساسية المجهولة الأخرى في قاعدة البيانات.\",\n  \"Internal Traffic Statistics\": \"إحصائيات حركة المرور الداخلية\",\n  \"Purge the Internal Traffic Statistics data\": \"مسح بيانات إحصائيات حركة المرور الداخلية\",\n  \"Manage Traffic Settings and Data\": \"إدارة إعدادات حركة المرور والبيانات\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"تُسجِّل إحصاءات حركة المرور الداخلية عدد مرات مشاهدة الصفحات وعناوين IP وبيانات المستخدمين المجهولين الأساسية الأخرى في قاعدة البيانات، وتُقدِّم تقارير للوحة المعلومات. عند تعطيل هذه الميزة، لا تُسجَّل البيانات في قاعدة البيانات.\",\n  \"Traffic Statistics\": \"إحصائيات المرور\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"المنطقة الزمنية لتسجيل مشاهدات الصفحات. تغيير المنطقة الزمنية لن يُحدِّث البيانات الحالية. إذا غيَّرتَ المنطقة الزمنية دون حذف البيانات الحالية، فقد تعرض التقارير أوقاتًا غير صحيحة للأيام المسجلة سابقًا.\",\n  \"Retention Period (Months)\": \"فترة الاحتفاظ (أشهر)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"يُحدد مدة تخزين بيانات إحصاءات حركة المرور في قاعدة البيانات. عند انتهاء هذه المدة، تُحذف البيانات المقابلة تلقائيًا من قاعدة البيانات. اضبط القيمة على 0 أو اتركها فارغة للاحتفاظ بالسجلات للأبد.\",\n  \"Data Filters\": \"مرشحات البيانات\",\n  \"Exclude Bots\": \"استبعاد الروبوتات\",\n  \"Automatically ignores known bots using the detection library.\": \"يتجاهل تلقائيًا الروبوتات المعروفة باستخدام مكتبة الكشف.\",\n  \"Exclude Administrator Roles\": \"استبعاد أدوار المسؤول\",\n  \"Ignores traffic from selected roles.\": \"يتجاهل حركة المرور من الأدوار المحددة.\",\n  \"Exclude IP Addresses\": \"استبعاد عناوين IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"سيتم تجاهل الطلبات من هذه العناوين في الإحصائيات.\",\n  \"Exclude Paths\": \"استبعاد المسارات\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"أدخل مسارًا أو نمطًا واحدًا لكل صف لتجاهل عناوين URL المطابقة.\",\n  \"Access the Dashboard\": \"الوصول إلى لوحة التحكم\",\n  \"Manage Dashboards\": \"إدارة لوحات المعلومات\",\n  \"Dashboard\": \"لوحة التحكم\",\n  \"Manage the Internal Traffic Statistics data\": \"إدارة بيانات إحصاءات حركة المرور الداخلية\",\n  \"Date\": \"تاريخ\",\n  \"Page Path\": \"مسار الصفحة\",\n  \"Referral Domain\": \"مجال الإحالة\",\n  \"Pageviews\": \"عدد مشاهدات الصفحة\",\n  \"Unique Visitors\": \"زوار فريدون\",\n  \"Traffic Information\": \"معلومات المرور\",\n  \"Website Status\": \"حالة الموقع الإلكتروني\",\n  \"Core version information\": \"معلومات الإصدار الأساسي\",\n  \"System Issues\": \"مشاكل النظام\",\n  \"Event Log\": \"سجل الأحداث\",\n  \"Request log\": \"سجل الطلبات\",\n  \"Request Log\": \"سجل الطلبات\",\n  \"Website status information\": \"معلومات حالة الموقع الإلكتروني\",\n  \"Add Row\": \"إضافة صف\",\n  \"Edit Row\": \"تعديل الصف\",\n  \"Edit Widget\": \"أداة التحرير\",\n  \"No Value\": \"لا قيمة\",\n  \"Section\": \"قسم\",\n  \"This is a text notice widget.\": \"هذه أداة إشعار نصي.\",\n  \"My Custom Widget\": \"أداة مخصصة\",\n  \"Chart\": \"جدول\",\n  \"Indicator\": \"مؤشر\",\n  \"Table\": \"طاولة\",\n  \"Text Notice\": \"إشعار نصي\",\n  \"Widget Configuration\": \"إعدادات الأداة\",\n  \"Configure the report widget\": \"قم بتهيئة أداة التقرير\",\n  \"Width :columns\": \"العرض: أعمدة\",\n  \"The widget width, a number between 1 and 10.\": \"عرض الأداة، وهو رقم بين 1 و 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"يرجى إدخال عرض الأداة كرقم بين 1 و 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} عمود | [2، ∞] أعمدة\",\n  \"Force new row\": \"فرض صف جديد\",\n  \"Put the widget in a new row.\": \"ضع الأداة في صف جديد.\",\n  \"Widget title\": \"عنوان الأداة\",\n  \"The Widget Title is required.\": \"عنوان الأداة مطلوب.\",\n  \"Layout has been reset\": \"تمت إعادة ضبط التخطيط\",\n  \"Current layout is now the default\": \"أصبح التخطيط الحالي هو التخطيط الافتراضي الآن\",\n  \"System status\": \"حالة النظام\",\n  \"Pending Software Updates\": \"تحديثات البرامج المعلقة\",\n  \"Software is Up to Date\": \"البرنامج محدّث\",\n  \"Update\": \"تحديث\",\n  \"Some Issues Need Attention\": \"بعض القضايا تحتاج إلى اهتمام\",\n  \"No Warnings to Display\": \"لا توجد تحذيرات لعرضها\",\n  \"View\": \"منظر\",\n  \"System Build\": \"بناء النظام\",\n  \"Online Since\": \"متصل بالإنترنت منذ\",\n  \"Welcome\": \"مرحباً\",\n  \"Welcome back to :app, :name.\": \"مرحباً بكم مجدداً في :app، :name.\",\n  \"Welcome to :app, :name.\": \"مرحباً بكم في :app، :name.\",\n  \"This is the first time you have signed in.\": \"هذه هي المرة الأولى التي تقوم فيها بتسجيل الدخول.\",\n  \"Your last sign in was\": \"آخر تسجيل دخول لك كان\",\n  \"View Access Logs\": \"عرض سجلات الوصول\",\n  \"Have a great day!\": \"أتمنى لك يوماً عظيماً!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"لا يمكن العثور على لوحة معلومات بالاسم المختصر المحدد: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"إدارة إعدادات إحصائيات حركة المرور الداخلية\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"تم تعطيل إحصائيات حركة المرور الداخلية. لتفعيلها، عدّل الإعدادات في ملف config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"إحصائيات حركة المرور الداخلية مُفعّلة حاليًا. يمكنك تعديل فترة الاحتفاظ والمنطقة الزمنية، أو تعطيل هذه الميزة، من خلال تعديل الإعدادات في ملف config/cms.php.\",\n  \"Purging the data...\": \"جارٍ حذف البيانات...\",\n  \"Purge Data\": \"حذف البيانات\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"هل تريد حقاً حذف بيانات إحصاءات حركة المرور الداخلية؟\",\n  \"Data retention period\": \"فترة الاحتفاظ بالبيانات\",\n  \"Time zone\": \"المنطقة الزمنية\",\n  \":retention month(s)\": \"شهر/أشهر الاحتفاظ\",\n  \"Indefinite\": \"غير محدد\",\n  \"Internal Traffic Statistics data purged\": \"تم حذف بيانات إحصاءات حركة المرور الداخلية\",\n  \"[not set]\": \"[غير محدد]\",\n  \"1 day (today) if not set\": \"يوم واحد (اليوم) إذا لم يتم تحديده\",\n  \"Apply\": \"يتقدم\",\n  \"Ascending\": \"صعوداً\",\n  \"Attribute\": \"يصف\",\n  \"Bar\": \"حاجِز\",\n  \"Chart type\": \"نوع الرسم البياني\",\n  \"Color\": \"لون\",\n  \"Compare Totals\": \"قارن الإجماليات\",\n  \"Configure\": \"تكوين\",\n  \"Custom\": \"مخصص\",\n  \"Dashboard interval\": \"فاصل لوحة المعلومات\",\n  \"Data source\": \"مصدر البيانات\",\n  \"Date interval\": \"الفترة الزمنية\",\n  \"Day\": \"يوم\",\n  \"Delete\": \"يمسح\",\n  \"Delete Dashboard\": \"حذف لوحة التحكم\",\n  \"Delete row\": \"حذف الصف\",\n  \"Descending\": \"نزولاً\",\n  \"Dimension\": \"الأبعاد\",\n  \"Direction\": \"اتجاه\",\n  \"Disabled\": \"عاجز\",\n  \"Display\": \"عرض\",\n  \"Display [not set]\": \"العرض [غير محدد]\",\n  \"Display all records\": \"عرض جميع السجلات\",\n  \"Display relative bars\": \"عرض الأشرطة النسبية\",\n  \"Display totals\": \"عرض الإجماليات\",\n  \"Edit Dashboard\": \"تعديل لوحة التحكم\",\n  \"Empty values\": \"القيم الفارغة\",\n  \"Enter a positive number\": \"أدخل رقمًا موجبًا\",\n  \"Enter a positive number or leave empty to display all records.\": \"أدخل رقمًا موجبًا أو اتركه فارغًا لعرض جميع السجلات.\",\n  \"Equal to\": \"يساوي\",\n  \"Export Dashboard\": \"لوحة معلومات التصدير\",\n  \"Extra table fields\": \"حقول جدول إضافية\",\n  \"Filters\": \"الفلاتر\",\n  \"General\": \"عام\",\n  \"Greater or equal to\": \"أكبر من أو يساوي\",\n  \"Greater than\": \"أكبر من\",\n  \"Hide\": \"يخفي\",\n  \"Horizontal\": \"أفقي\",\n  \"Icon\": \"رمز\",\n  \"Icon Status\": \"حالة الأيقونة\",\n  \"Important\": \"مهم\",\n  \"Includes\": \"يشمل\",\n  \"Information\": \"معلومة\",\n  \"Last 30 days\": \"آخر 30 يومًا\",\n  \"Last 7 days\": \"آخر 7 أيام\",\n  \"Last month\": \"الشهر الماضي\",\n  \"Leave empty to disable pagination\": \"اترك هذا الحقل فارغًا لتعطيل الترقيم.\",\n  \"Leave empty to hide the title\": \"اترك هذا الحقل فارغًا لإخفاء العنوان\",\n  \"Less or equal to\": \"أقل من أو يساوي\",\n  \"Less than\": \"أقل من\",\n  \"Limit\": \"حد\",\n  \"Line\": \"خط\",\n  \"Link Text\": \"نص الرابط\",\n  \"Link URL\": \"رابط URL\",\n  \"Make Default\": \"الافتراضي\",\n  \"Metric\": \"متري\",\n  \"Metrics\": \"المقاييس\",\n  \"Month\": \"شهر\",\n  \"Notice text\": \"نص الإشعار\",\n  \"Number of days\": \"عدد الأيام\",\n  \"One of\": \"أحد\",\n  \"One value per line\": \"قيمة واحدة لكل سطر\",\n  \"Operation\": \"عملية\",\n  \"Order\": \"طلب\",\n  \"Past hour\": \"الساعة الماضية\",\n  \"Past X days\": \"الأيام الـ X الماضية\",\n  \"Please provide the widget title\": \"يرجى تقديم عنوان الأداة\",\n  \"Please select a data source\": \"الرجاء تحديد مصدر البيانات\",\n  \"Please select a dimension\": \"الرجاء اختيار بُعد\",\n  \"Please select an icon\": \"الرجاء اختيار رمز\",\n  \"Please select metric(s).\": \"يرجى تحديد المقياس (المقاييس).\",\n  \"Prev period\": \"الفترة السابقة\",\n  \"Quarter\": \"ربع\",\n  \"Records per page\": \"عدد السجلات في الصفحة\",\n  \"Refresh every minute\": \"قم بتحديث كل دقيقة\",\n  \"Rename Dashboard\": \"إعادة تسمية لوحة التحكم\",\n  \"Reset Layout\": \"إعادة ضبط التخطيط\",\n  \"Reset layout back to default?\": \"هل تريد إعادة ضبط التخطيط إلى الوضع الافتراضي؟\",\n  \"Same period last year\": \"نفس الفترة من العام الماضي\",\n  \"Section Title\": \"عنوان القسم\",\n  \"Select a dimension and metrics\": \"حدد بُعدًا ومقاييس\",\n  \"Select an attribute\": \"حدد سمة\",\n  \"Select an operation\": \"اختر عملية\",\n  \"Select sorting metric or dimension\": \"حدد مقياس الفرز أو البُعد\",\n  \"Select the metric color\": \"حدد اللون المتري\",\n  \"Set the current layout as the default?\": \"هل تريد تعيين التخطيط الحالي كتخطيط افتراضي؟\",\n  \"Show Date Interval\": \"عرض الفترة الزمنية\",\n  \"Sort by\": \"فرز حسب\",\n  \"Sorting\": \"فرز\",\n  \"Sorting & Filtering\": \"الفرز والتصفية\",\n  \"Stacked Bar\": \"بار مكدس\",\n  \"Starts with\": \"يبدأ بـ\",\n  \"Success\": \"نجاح\",\n  \"The dashboard layout has been reset to default.\": \"تمت إعادة ضبط تخطيط لوحة التحكم إلى الوضع الافتراضي.\",\n  \"The dashboard was successfully updated.\": \"تم تحديث لوحة التحكم بنجاح.\",\n  \"The limit value must be at least 1\": \"يجب أن تكون قيمة الحد الأدنى 1\",\n  \"This dashboard is now the default layout.\": \"أصبحت لوحة التحكم هذه هي التصميم الافتراضي الآن.\",\n  \"This month\": \"هذا الشهر\",\n  \"This quarter\": \"هذا الربع\",\n  \"This week\": \"هذا الاسبوع\",\n  \"This year\": \"هذا العام\",\n  \"Title\": \"عنوان\",\n  \"Today\": \"اليوم\",\n  \"Value\": \"قيمة\",\n  \"Values\": \"قيم\",\n  \"Vertical\": \"رَأسِيّ\",\n  \"Warning\": \"تحذير\",\n  \"Week\": \"أسبوع\",\n  \"Year\": \"سنة\",\n  \"Yesterday\": \"أمس\"\n}"
  },
  {
    "path": "modules/dashboard/lang/be.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Функцыя статыстыкі ўнутранага трафіку запісвае ў базу дадзеных прагляды старонак, IP-адрасы і іншыя асноўныя ананімныя дадзеныя карыстальнікаў.\",\n  \"Internal Traffic Statistics\": \"Статыстыка ўнутранага трафіку\",\n  \"Purge the Internal Traffic Statistics data\": \"Ачысціць дадзеныя статыстыкі ўнутранага трафіку\",\n  \"Manage Traffic Settings and Data\": \"Кіраванне наладамі і дадзенымі аб трафіку\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Статыстыка ўнутранага трафіку запісвае прагляды старонак, IP-адрасы і іншыя асноўныя ананімныя дадзеныя карыстальнікаў у базу дадзеных і стварае справаздачы для панэлі кіравання. Калі функцыя адключана, дадзеныя не запісваюцца ў базу дадзеных.\",\n  \"Traffic Statistics\": \"Статыстыка трафіку\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Гадзінны пояс для рэгістрацыі праглядаў старонак. Змена гадзіннага пояса не абновіць існуючыя даныя. Калі вы зменіце гадзінны пояс, не выдаляючы існуючыя даныя, у справаздачах можа адлюстроўвацца няправільны час для раней зарэгістраваных дзён.\",\n  \"Retention Period (Months)\": \"Тэрмін захоўвання (месяцы)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Вызначае працягласць захоўвання дадзеных статыстыкі трафіку ў базе дадзеных. Пасля заканчэння ўстаноўленага перыяду адпаведныя дадзеныя аўтаматычна выдаляюцца з базы дадзеных. Усталюйце значэнне 0 або пустое, каб запісы захоўваліся вечна.\",\n  \"Data Filters\": \"Фільтры дадзеных\",\n  \"Exclude Bots\": \"Выключыць ботаў\",\n  \"Automatically ignores known bots using the detection library.\": \"Аўтаматычна ігнаруе вядомых ботаў з дапамогай бібліятэкі выяўлення.\",\n  \"Exclude Administrator Roles\": \"Выключыць ролі адміністратара\",\n  \"Ignores traffic from selected roles.\": \"Ігнаруе трафік ад выбраных роляў.\",\n  \"Exclude IP Addresses\": \"Выключыць IP-адрасы\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Запыты з гэтых адрасоў будуць ігнаравацца ў статыстыцы.\",\n  \"Exclude Paths\": \"Выключыць шляхі\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Увядзіце адзін шлях або шаблон у кожны радок, каб ігнараваць супадаючыя URL-адрасы.\",\n  \"Access the Dashboard\": \"Доступ да панэлі кіравання\",\n  \"Manage Dashboards\": \"Кіраванне панэлямі кіравання\",\n  \"Dashboard\": \"Панэль кіравання\",\n  \"Manage the Internal Traffic Statistics data\": \"Кіраванне дадзенымі статыстыкі ўнутранага трафіку\",\n  \"Date\": \"Дата\",\n  \"Page Path\": \"Шлях старонкі\",\n  \"Referral Domain\": \"Рэферальны дамен\",\n  \"Pageviews\": \"Прагляды старонак\",\n  \"Unique Visitors\": \"Унікальныя наведвальнікі\",\n  \"Traffic Information\": \"Інфармацыя пра дарожны рух\",\n  \"Website Status\": \"Стан вэб-сайта\",\n  \"Core version information\": \"Інфармацыя пра асноўную версію\",\n  \"System Issues\": \"Праблемы з сістэмай\",\n  \"Event Log\": \"Журнал падзей\",\n  \"Request log\": \"Журнал запытаў\",\n  \"Request Log\": \"Журнал запытаў\",\n  \"Website status information\": \"Інфармацыя пра стан вэб-сайта\",\n  \"Add Row\": \"Дадаць радок\",\n  \"Edit Row\": \"Рэдагаваць радок\",\n  \"Edit Widget\": \"Рэдагаваць віджэт\",\n  \"No Value\": \"Няма значэння\",\n  \"Section\": \"Раздзел\",\n  \"This is a text notice widget.\": \"Гэта віджэт тэкставых апавяшчэнняў.\",\n  \"My Custom Widget\": \"Мой карыстальніцкі віджэт\",\n  \"Chart\": \"Дыяграма\",\n  \"Indicator\": \"Індыкатар\",\n  \"Table\": \"Табліца\",\n  \"Text Notice\": \"Тэкставае паведамленне\",\n  \"Widget Configuration\": \"Канфігурацыя віджэта\",\n  \"Configure the report widget\": \"Наладзьце віджэт справаздачы\",\n  \"Width :columns\": \"Шырыня: слупкі\",\n  \"The widget width, a number between 1 and 10.\": \"Шырыня віджэта, лік ад 1 да 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Калі ласка, увядзіце шырыню віджэта ў выглядзе ліку ад 1 да 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} слупок|[2,Inf] слупкі\",\n  \"Force new row\": \"Прымусовае стварэнне новага радка\",\n  \"Put the widget in a new row.\": \"Змясціце віджэт у новы радок.\",\n  \"Widget title\": \"Назва віджэта\",\n  \"The Widget Title is required.\": \"Патрабуецца поле «Назва віджэта».\",\n  \"Layout has been reset\": \"Макет быў скінуты\",\n  \"Current layout is now the default\": \"Цяпер бягучая раскладка з'яўляецца раскладкай па змаўчанні\",\n  \"System status\": \"Стан сістэмы\",\n  \"Pending Software Updates\": \"Чакаюцца абнаўленні праграмнага забеспячэння\",\n  \"Software is Up to Date\": \"Праграмнае забеспячэнне абноўлена\",\n  \"Update\": \"Абнаўленне\",\n  \"Some Issues Need Attention\": \"Некаторыя праблемы патрабуюць увагі\",\n  \"No Warnings to Display\": \"Няма папярэджанняў для адлюстравання\",\n  \"View\": \"Прагляд\",\n  \"System Build\": \"Зборка сістэмы\",\n  \"Online Since\": \"У інтэрнэце з\",\n  \"Welcome\": \"Сардэчна запрашаем\",\n  \"Welcome back to :app, :name.\": \"Сардэчна запрашаем назад у :app, :name.\",\n  \"Welcome to :app, :name.\": \"Вітаем у :app, :name.\",\n  \"This is the first time you have signed in.\": \"Вы ўпершыню ўвайшлі ў сістэму.\",\n  \"Your last sign in was\": \"Ваш апошні ўваход быў\",\n  \"View Access Logs\": \"Праглядзець журналы доступу\",\n  \"Have a great day!\": \"Жадаю вам цудоўнага дня!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Немагчыма знайсці панэль кіравання з указаным slug-файлам: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Кіраванне наладамі статыстыкі ўнутранага трафіку\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Статыстыка ўнутранага трафіку адключана. Каб уключыць яе, адрэдагуйце канфігурацыю ў config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Унутраная статыстыка трафіку ўключана. Вы можаце змяніць перыяд захоўвання і гадзінны пояс або адключыць гэту функцыю, змяніўшы налады ў config/cms.php.\",\n  \"Purging the data...\": \"Ачышчэнне дадзеных...\",\n  \"Purge Data\": \"Ачысціць даныя\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Вы сапраўды хочаце ачысціць дадзеныя статыстыкі ўнутранага трафіку?\",\n  \"Data retention period\": \"Тэрмін захоўвання дадзеных\",\n  \"Time zone\": \"Гадзінны пояс\",\n  \":retention month(s)\": \"месяц(ы) захоўвання\",\n  \"Indefinite\": \"Нявызначаны\",\n  \"Internal Traffic Statistics data purged\": \"Даныя ўнутранай статыстыкі трафіку выдалены\",\n  \"[not set]\": \"[не зададзена]\",\n  \"1 day (today) if not set\": \"1 дзень (сёння), калі не зададзена\",\n  \"Apply\": \"Ужыць\",\n  \"Ascending\": \"Узыходзячы\",\n  \"Attribute\": \"Атрыбут\",\n  \"Bar\": \"Бар\",\n  \"Chart type\": \"Тып дыяграмы\",\n  \"Color\": \"Колер\",\n  \"Compare Totals\": \"Параўнаць вынікі\",\n  \"Configure\": \"Наладзіць\",\n  \"Custom\": \"Карыстальніцкі\",\n  \"Dashboard interval\": \"Інтэрвал панэлі кіравання\",\n  \"Data source\": \"Крыніца дадзеных\",\n  \"Date interval\": \"Інтэрвал дат\",\n  \"Day\": \"Дзень\",\n  \"Delete\": \"Выдаліць\",\n  \"Delete Dashboard\": \"Выдаліць панэль кіравання\",\n  \"Delete row\": \"Выдаліць радок\",\n  \"Descending\": \"Па змяншэнні\",\n  \"Dimension\": \"Вымярэнне\",\n  \"Direction\": \"Кірунак\",\n  \"Disabled\": \"Інвалід\",\n  \"Display\": \"Дысплей\",\n  \"Display [not set]\": \"Дысплей [не зададзена]\",\n  \"Display all records\": \"Паказаць усе запісы\",\n  \"Display relative bars\": \"Паказаць адносныя слупкі\",\n  \"Display totals\": \"Паказаць агульныя сумы\",\n  \"Edit Dashboard\": \"Рэдагаваць панэль кіравання\",\n  \"Empty values\": \"Пустыя значэнні\",\n  \"Enter a positive number\": \"Увядзіце дадатны лік\",\n  \"Enter a positive number or leave empty to display all records.\": \"Увядзіце дадатны лік або пакіньце поле пустым, каб адлюстраваць усе запісы.\",\n  \"Equal to\": \"Роўна\",\n  \"Export Dashboard\": \"Экспартаваць панэль кіравання\",\n  \"Extra table fields\": \"Дадатковыя палі табліцы\",\n  \"Filters\": \"Фільтры\",\n  \"General\": \"Агульныя\",\n  \"Greater or equal to\": \"Больш або роўна\",\n  \"Greater than\": \"Больш за\",\n  \"Hide\": \"Схаваць\",\n  \"Horizontal\": \"Гарызантальны\",\n  \"Icon\": \"Значок\",\n  \"Icon Status\": \"Стан значка\",\n  \"Important\": \"Важна\",\n  \"Includes\": \"Уключае\",\n  \"Information\": \"Інфармацыя\",\n  \"Last 30 days\": \"Апошнія 30 дзён\",\n  \"Last 7 days\": \"Апошнія 7 дзён\",\n  \"Last month\": \"У мінулым месяцы\",\n  \"Leave empty to disable pagination\": \"Пакіньце поле пустым, каб адключыць пагінацыю\",\n  \"Leave empty to hide the title\": \"Пакіньце поле пустым, каб схаваць загаловак\",\n  \"Less or equal to\": \"Менш або роўна\",\n  \"Less than\": \"Менш чым\",\n  \"Limit\": \"Ліміт\",\n  \"Line\": \"Лінія\",\n  \"Link Text\": \"Тэкст спасылкі\",\n  \"Link URL\": \"URL-адрас спасылкі\",\n  \"Make Default\": \"Зрабіць па змаўчанні\",\n  \"Metric\": \"Метрыка\",\n  \"Metrics\": \"Паказчыкі\",\n  \"Month\": \"Месяц\",\n  \"Notice text\": \"Тэкст паведамлення\",\n  \"Number of days\": \"Колькасць дзён\",\n  \"One of\": \"Адзін з\",\n  \"One value per line\": \"Адно значэнне ў радку\",\n  \"Operation\": \"Аперацыя\",\n  \"Order\": \"Заказ\",\n  \"Past hour\": \"Мінулая гадзіна\",\n  \"Past X days\": \"Апошнія X дзён\",\n  \"Please provide the widget title\": \"Калі ласка, укажыце назву віджэта\",\n  \"Please select a data source\": \"Калі ласка, выберыце крыніцу дадзеных\",\n  \"Please select a dimension\": \"Калі ласка, выберыце памер\",\n  \"Please select an icon\": \"Калі ласка, выберыце значок\",\n  \"Please select metric(s).\": \"Калі ласка, выберыце паказчык(ы).\",\n  \"Prev period\": \"Папярэдні перыяд\",\n  \"Quarter\": \"Чвэрць\",\n  \"Records per page\": \"Запісаў на старонку\",\n  \"Refresh every minute\": \"Абнаўляць кожную хвіліну\",\n  \"Rename Dashboard\": \"Перайменаваць панэль кіравання\",\n  \"Reset Layout\": \"Скінуць макет\",\n  \"Reset layout back to default?\": \"Скінуць макет да стандартнага?\",\n  \"Same period last year\": \"Аналагічны перыяд мінулага года\",\n  \"Section Title\": \"Назва раздзела\",\n  \"Select a dimension and metrics\": \"Выберыце вымярэнне і паказчыкі\",\n  \"Select an attribute\": \"Выберыце атрыбут\",\n  \"Select an operation\": \"Выберыце аперацыю\",\n  \"Select sorting metric or dimension\": \"Выберыце паказчык або вымярэнне сартавання\",\n  \"Select the metric color\": \"Выберыце колер метрыкі\",\n  \"Set the current layout as the default?\": \"Устанавіць бягучы макет па змаўчанні?\",\n  \"Show Date Interval\": \"Паказаць інтэрвал дат\",\n  \"Sort by\": \"Сартаваць па\",\n  \"Sorting\": \"Сартаванне\",\n  \"Sorting & Filtering\": \"Сартаванне і фільтраванне\",\n  \"Stacked Bar\": \"Слупковая дыяграма\",\n  \"Starts with\": \"Пачынаецца з\",\n  \"Success\": \"Поспех\",\n  \"The dashboard layout has been reset to default.\": \"Макет панэлі кіравання быў скінуты да значэнняў па змаўчанні.\",\n  \"The dashboard was successfully updated.\": \"Панэль кіравання была паспяхова абноўлена.\",\n  \"The limit value must be at least 1\": \"Гранічнае значэнне павінна быць не менш за 1\",\n  \"This dashboard is now the default layout.\": \"Гэтая панэль кіравання цяпер мае макет па змаўчанні.\",\n  \"This month\": \"У гэтым месяцы\",\n  \"This quarter\": \"У гэтым квартале\",\n  \"This week\": \"На гэтым тыдні\",\n  \"This year\": \"У гэтым годзе\",\n  \"Title\": \"Назва\",\n  \"Today\": \"Сёння\",\n  \"Value\": \"Значэнне\",\n  \"Values\": \"Значэнні\",\n  \"Vertical\": \"Вертыкальны\",\n  \"Warning\": \"Папярэджанне\",\n  \"Week\": \"Тыдзень\",\n  \"Year\": \"Год\",\n  \"Yesterday\": \"Учора\"\n}"
  },
  {
    "path": "modules/dashboard/lang/bg.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Функцията за вътрешна статистика на трафика регистрира преглеждания на страници, IP адреси и други основни анонимни потребителски данни в базата данни.\",\n  \"Internal Traffic Statistics\": \"Статистика за вътрешен трафик\",\n  \"Purge the Internal Traffic Statistics data\": \"Изчистване на данните от вътрешната статистика за трафика\",\n  \"Manage Traffic Settings and Data\": \"Управление на настройките и данните за трафика\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Статистиката за вътрешен трафик регистрира преглеждания на страници, IP адреси и други основни анонимни потребителски данни в базата данни и предоставя отчети за таблото за управление. Когато функцията е деактивирана, данните не се записват в базата данни.\",\n  \"Traffic Statistics\": \"Статистика за трафика\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Часова зона за регистриране на преглежданията на страници. Промяната на часовата зона няма да актуализира съществуващите данни. Ако промените часовата зона, без да изтриете съществуващите данни, отчетите е възможно да показват неправилни часове за регистрирани преди това дни.\",\n  \"Retention Period (Months)\": \"Период на съхранение (месеци)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Определя продължителността, за която данните за статистиката на трафика трябва да се съхраняват в базата данни. Когато зададеният период изтече, съответните данни се изчистват автоматично от базата данни. Задайте на 0 или празно, за да запазите записите завинаги.\",\n  \"Data Filters\": \"Филтри за данни\",\n  \"Exclude Bots\": \"Изключване на ботове\",\n  \"Automatically ignores known bots using the detection library.\": \"Автоматично игнорира известни ботове, използвайки библиотеката за откриване.\",\n  \"Exclude Administrator Roles\": \"Изключване на администраторски роли\",\n  \"Ignores traffic from selected roles.\": \"Игнорира трафика от избрани роли.\",\n  \"Exclude IP Addresses\": \"Изключване на IP адреси\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Заявките от тези адреси ще бъдат игнорирани в статистиката.\",\n  \"Exclude Paths\": \"Изключване на пътища\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Въведете по един път или шаблон на ред, за да игнорирате съвпадащите URL адреси.\",\n  \"Access the Dashboard\": \"Достъп до таблото за управление\",\n  \"Manage Dashboards\": \"Управление на табла за управление\",\n  \"Dashboard\": \"Табло за управление\",\n  \"Manage the Internal Traffic Statistics data\": \"Управлявайте данните от вътрешната статистика за трафика\",\n  \"Date\": \"Дата\",\n  \"Page Path\": \"Път на страницата\",\n  \"Referral Domain\": \"Реферален домейн\",\n  \"Pageviews\": \"Преглеждания на страници\",\n  \"Unique Visitors\": \"Уникални посетители\",\n  \"Traffic Information\": \"Информация за трафика\",\n  \"Website Status\": \"Състояние на уебсайта\",\n  \"Core version information\": \"Информация за основната версия\",\n  \"System Issues\": \"Системни проблеми\",\n  \"Event Log\": \"Дневник на събитията\",\n  \"Request log\": \"Дневник на заявките\",\n  \"Request Log\": \"Дневник на заявките\",\n  \"Website status information\": \"Информация за състоянието на уебсайта\",\n  \"Add Row\": \"Добавяне на ред\",\n  \"Edit Row\": \"Редактиране на ред\",\n  \"Edit Widget\": \"Редактиране на уиджет\",\n  \"No Value\": \"Няма стойност\",\n  \"Section\": \"Раздел\",\n  \"This is a text notice widget.\": \"Това е уиджет за текстови известия.\",\n  \"My Custom Widget\": \"Моят персонализиран уиджет\",\n  \"Chart\": \"Диаграма\",\n  \"Indicator\": \"Индикатор\",\n  \"Table\": \"Таблица\",\n  \"Text Notice\": \"Текстово известие\",\n  \"Widget Configuration\": \"Конфигурация на джаджа\",\n  \"Configure the report widget\": \"Конфигуриране на виджета за отчети\",\n  \"Width :columns\": \"Ширина: колони\",\n  \"The widget width, a number between 1 and 10.\": \"Ширината на уиджета, число между 1 и 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Моля, въведете ширината на уиджета като число между 1 и 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} колона|[2,Inf] колони\",\n  \"Force new row\": \"Принудително създаване на нов ред\",\n  \"Put the widget in a new row.\": \"Поставете джаджата на нов ред.\",\n  \"Widget title\": \"Заглавие на уиджета\",\n  \"The Widget Title is required.\": \"Заглавието на уиджета е задължително.\",\n  \"Layout has been reset\": \"Оформлението е нулирано\",\n  \"Current layout is now the default\": \"Текущото оформление вече е по подразбиране\",\n  \"System status\": \"Състояние на системата\",\n  \"Pending Software Updates\": \"Чакащи актуализации на софтуера\",\n  \"Software is Up to Date\": \"Софтуерът е актуален\",\n  \"Update\": \"Актуализация\",\n  \"Some Issues Need Attention\": \"Някои проблеми изискват внимание\",\n  \"No Warnings to Display\": \"Няма предупреждения за показване\",\n  \"View\": \"Преглед\",\n  \"System Build\": \"Изграждане на система\",\n  \"Online Since\": \"Онлайн от\",\n  \"Welcome\": \"Добре дошли\",\n  \"Welcome back to :app, :name.\": \"Добре дошли отново в :app, :name.\",\n  \"Welcome to :app, :name.\": \"Добре дошли в :app, :name.\",\n  \"This is the first time you have signed in.\": \"Това е първият път, когато влизате в профила си.\",\n  \"Your last sign in was\": \"Последното ви влизане беше\",\n  \"View Access Logs\": \"Преглед на регистрационните файлове за достъп\",\n  \"Have a great day!\": \"Приятен ден!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Не може да се намери табло за управление с посочения пълзящ код: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Управление на настройките за вътрешна статистика за трафика\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Статистиката за вътрешен трафик е деактивирана. За да я активирате, редактирайте конфигурацията в config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Статистиката за вътрешния трафик е активирана в момента. Можете да коригирате периода на запазване и часовата зона или да деактивирате тази функция, като редактирате настройките в config/cms.php.\",\n  \"Purging the data...\": \"Изчистване на данните...\",\n  \"Purge Data\": \"Изчистване на данни\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Наистина ли искате да изчистите данните от вътрешната статистика за трафика?\",\n  \"Data retention period\": \"Период на съхранение на данни\",\n  \"Time zone\": \"Часова зона\",\n  \":retention month(s)\": \"месец(ове) на задържане\",\n  \"Indefinite\": \"Неопределен\",\n  \"Internal Traffic Statistics data purged\": \"Данните от вътрешната статистика за трафика са изчистени\",\n  \"[not set]\": \"[не е зададено]\",\n  \"1 day (today) if not set\": \"1 ден (днес), ако не е зададено\",\n  \"Apply\": \"Приложи\",\n  \"Ascending\": \"Възходящ\",\n  \"Attribute\": \"Атрибут\",\n  \"Bar\": \"Бар\",\n  \"Chart type\": \"Тип диаграма\",\n  \"Color\": \"Цвят\",\n  \"Compare Totals\": \"Сравнете общите суми\",\n  \"Configure\": \"Конфигуриране\",\n  \"Custom\": \"Персонализирано\",\n  \"Dashboard interval\": \"Интервал на таблото за управление\",\n  \"Data source\": \"Източник на данни\",\n  \"Date interval\": \"Интервал от дати\",\n  \"Day\": \"Ден\",\n  \"Delete\": \"Изтриване\",\n  \"Delete Dashboard\": \"Изтриване на таблото за управление\",\n  \"Delete row\": \"Изтриване на ред\",\n  \"Descending\": \"Низходящо\",\n  \"Dimension\": \"Размер\",\n  \"Direction\": \"Посока\",\n  \"Disabled\": \"За хора с увреждания\",\n  \"Display\": \"Дисплей\",\n  \"Display [not set]\": \"Показване [не е зададено]\",\n  \"Display all records\": \"Показване на всички записи\",\n  \"Display relative bars\": \"Показване на относителни ленти\",\n  \"Display totals\": \"Показване на общи суми\",\n  \"Edit Dashboard\": \"Редактиране на таблото за управление\",\n  \"Empty values\": \"Празни стойности\",\n  \"Enter a positive number\": \"Въведете положително число\",\n  \"Enter a positive number or leave empty to display all records.\": \"Въведете положително число или оставете празно, за да се покажат всички записи.\",\n  \"Equal to\": \"Равно на\",\n  \"Export Dashboard\": \"Експортиране на табло за управление\",\n  \"Extra table fields\": \"Допълнителни полета в таблицата\",\n  \"Filters\": \"Филтри\",\n  \"General\": \"Общи\",\n  \"Greater or equal to\": \"По-голямо или равно на\",\n  \"Greater than\": \"По-голямо от\",\n  \"Hide\": \"Скриване\",\n  \"Horizontal\": \"Хоризонтално\",\n  \"Icon\": \"Икона\",\n  \"Icon Status\": \"Икона Състояние\",\n  \"Important\": \"Важно\",\n  \"Includes\": \"Включва\",\n  \"Information\": \"Информация\",\n  \"Last 30 days\": \"Последните 30 дни\",\n  \"Last 7 days\": \"Последните 7 дни\",\n  \"Last month\": \"Миналия месец\",\n  \"Leave empty to disable pagination\": \"Оставете празно, за да деактивирате номерирането\",\n  \"Leave empty to hide the title\": \"Оставете празно, за да скриете заглавието\",\n  \"Less or equal to\": \"По-малко или равно на\",\n  \"Less than\": \"По-малко от\",\n  \"Limit\": \"Лимит\",\n  \"Line\": \"Линия\",\n  \"Link Text\": \"Текст на връзката\",\n  \"Link URL\": \"URL адрес на връзката\",\n  \"Make Default\": \"Задай по подразбиране\",\n  \"Metric\": \"Метричен\",\n  \"Metrics\": \"Метрики\",\n  \"Month\": \"Месец\",\n  \"Notice text\": \"Текст на известието\",\n  \"Number of days\": \"Брой дни\",\n  \"One of\": \"Един от\",\n  \"One value per line\": \"Една стойност на ред\",\n  \"Operation\": \"Операция\",\n  \"Order\": \"Поръчка\",\n  \"Past hour\": \"Миналият час\",\n  \"Past X days\": \"Минали X дни\",\n  \"Please provide the widget title\": \"Моля, посочете заглавието на уиджета\",\n  \"Please select a data source\": \"Моля, изберете източник на данни\",\n  \"Please select a dimension\": \"Моля, изберете измерение\",\n  \"Please select an icon\": \"Моля, изберете икона\",\n  \"Please select metric(s).\": \"Моля, изберете показател(и).\",\n  \"Prev period\": \"Prev period\",\n  \"Quarter\": \"Четвърт\",\n  \"Records per page\": \"Записи на страница\",\n  \"Refresh every minute\": \"Обновяване всяка минута\",\n  \"Rename Dashboard\": \"Преименуване на таблото за управление\",\n  \"Reset Layout\": \"Нулиране на оформлението\",\n  \"Reset layout back to default?\": \"Възстановяване на оформлението към стандартното?\",\n  \"Same period last year\": \"Същият период на миналата година\",\n  \"Section Title\": \"Заглавие на раздела\",\n  \"Select a dimension and metrics\": \"Изберете измерение и показатели\",\n  \"Select an attribute\": \"Изберете атрибут\",\n  \"Select an operation\": \"Изберете операция\",\n  \"Select sorting metric or dimension\": \"Изберете показател или измерение за сортиране\",\n  \"Select the metric color\": \"Изберете цвета на метриката\",\n  \"Set the current layout as the default?\": \"Да се зададе ли текущото оформление като такова по подразбиране?\",\n  \"Show Date Interval\": \"Показване на интервала от дати\",\n  \"Sort by\": \"Сортиране по\",\n  \"Sorting\": \"Сортиране\",\n  \"Sorting & Filtering\": \"Сортиране и филтриране\",\n  \"Stacked Bar\": \"Наслагван бар\",\n  \"Starts with\": \"Започва с\",\n  \"Success\": \"Успех\",\n  \"The dashboard layout has been reset to default.\": \"Оформлението на таблото е върнато към фабричните настройки.\",\n  \"The dashboard was successfully updated.\": \"Таблото за управление беше успешно актуализирано.\",\n  \"The limit value must be at least 1\": \"Граничната стойност трябва да бъде поне 1\",\n  \"This dashboard is now the default layout.\": \"Това табло за управление вече е оформлението по подразбиране.\",\n  \"This month\": \"Този месец\",\n  \"This quarter\": \"Това тримесечие\",\n  \"This week\": \"Тази седмица\",\n  \"This year\": \"Тази година\",\n  \"Title\": \"Заглавие\",\n  \"Today\": \"Днес\",\n  \"Value\": \"Стойност\",\n  \"Values\": \"Ценности\",\n  \"Vertical\": \"Вертикално\",\n  \"Warning\": \"Предупреждение\",\n  \"Week\": \"Седмица\",\n  \"Year\": \"Година\",\n  \"Yesterday\": \"Вчера\"\n}"
  },
  {
    "path": "modules/dashboard/lang/ca.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"La funció d'estadístiques de trànsit intern registra les visites a la pàgina, les adreces IP i altres dades bàsiques d'usuaris anònims a la base de dades.\",\n  \"Internal Traffic Statistics\": \"Estadístiques de trànsit intern\",\n  \"Purge the Internal Traffic Statistics data\": \"Purgar les dades d'estadístiques de trànsit intern\",\n  \"Manage Traffic Settings and Data\": \"Gestiona la configuració i les dades del trànsit\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Les estadístiques de trànsit intern registren les visites a la pàgina, les adreces IP i altres dades bàsiques d'usuaris anònims a la base de dades i proporcionen informes per al tauler de control. Quan la funció està desactivada, les dades no s'escriuen a la base de dades.\",\n  \"Traffic Statistics\": \"Estadístiques de trànsit\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Fus horari per registrar les visualitzacions de pàgina. Canviar el fus horari no actualitzarà les dades existents. Si canvieu el fus horari sense esborrar les dades existents, els informes poden mostrar hores incorrectes dels dies registrats anteriorment.\",\n  \"Retention Period (Months)\": \"Període de retenció (mesos)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Determina la durada durant la qual les dades d'estadístiques de trànsit s'han d'emmagatzemar a la base de dades. Quan caduca el període establert, les dades corresponents es purguen automàticament de la base de dades. Establiu-ho a 0 o en blanc per conservar els registres per sempre.\",\n  \"Data Filters\": \"Filtres de dades\",\n  \"Exclude Bots\": \"Exclou els bots\",\n  \"Automatically ignores known bots using the detection library.\": \"Ignora automàticament els bots coneguts mitjançant la biblioteca de detecció.\",\n  \"Exclude Administrator Roles\": \"Exclou els rols d'administrador\",\n  \"Ignores traffic from selected roles.\": \"Ignora el trànsit dels rols seleccionats.\",\n  \"Exclude IP Addresses\": \"Exclou les adreces IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Les sol·licituds d'aquestes adreces s'ignoraran a les estadístiques.\",\n  \"Exclude Paths\": \"Exclou camins\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Introduïu una ruta o patró per fila per ignorar les URL coincidents.\",\n  \"Access the Dashboard\": \"Accedir al tauler de control\",\n  \"Manage Dashboards\": \"Gestiona els taulers de control\",\n  \"Dashboard\": \"Tauler de control\",\n  \"Manage the Internal Traffic Statistics data\": \"Gestiona les dades d'estadístiques de trànsit intern\",\n  \"Date\": \"Data\",\n  \"Page Path\": \"Camí de pàgina\",\n  \"Referral Domain\": \"Domini de referència\",\n  \"Pageviews\": \"Visualitzacions de pàgina\",\n  \"Unique Visitors\": \"Visitants únics\",\n  \"Traffic Information\": \"Informació de trànsit\",\n  \"Website Status\": \"Estat del lloc web\",\n  \"Core version information\": \"Informació de la versió principal\",\n  \"System Issues\": \"Problemes del sistema\",\n  \"Event Log\": \"Registre d'esdeveniments\",\n  \"Request log\": \"Registre de sol·licituds\",\n  \"Request Log\": \"Registre de sol·licituds\",\n  \"Website status information\": \"Informació sobre l'estat del lloc web\",\n  \"Add Row\": \"Afegeix una fila\",\n  \"Edit Row\": \"Edita la fila\",\n  \"Edit Widget\": \"Edita el widget\",\n  \"No Value\": \"Sense valor\",\n  \"Section\": \"Secció\",\n  \"This is a text notice widget.\": \"Aquest és un widget d'avís de text.\",\n  \"My Custom Widget\": \"El meu widget personalitzat\",\n  \"Chart\": \"Gràfic\",\n  \"Indicator\": \"Indicador\",\n  \"Table\": \"Taula\",\n  \"Text Notice\": \"Avís per SMS\",\n  \"Widget Configuration\": \"Configuració del widget\",\n  \"Configure the report widget\": \"Configura el widget d'informes\",\n  \"Width :columns\": \"Amplada: columnes\",\n  \"The widget width, a number between 1 and 10.\": \"L'amplada del widget, un número entre 1 i 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Si us plau, introduïu l'amplada del widget com un número entre 1 i 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} columna|[2,Inf] columnes\",\n  \"Force new row\": \"Forçar una nova fila\",\n  \"Put the widget in a new row.\": \"Poseu el widget en una nova fila.\",\n  \"Widget title\": \"Títol del widget\",\n  \"The Widget Title is required.\": \"El títol del widget és obligatori.\",\n  \"Layout has been reset\": \"S'ha restablert el disseny\",\n  \"Current layout is now the default\": \"El disseny actual ara és el predeterminat\",\n  \"System status\": \"Estat del sistema\",\n  \"Pending Software Updates\": \"Actualitzacions de programari pendents\",\n  \"Software is Up to Date\": \"El programari està actualitzat\",\n  \"Update\": \"Actualització\",\n  \"Some Issues Need Attention\": \"Alguns problemes requereixen atenció\",\n  \"No Warnings to Display\": \"No hi ha avisos per mostrar\",\n  \"View\": \"Vista\",\n  \"System Build\": \"Construcció del sistema\",\n  \"Online Since\": \"En línia des de\",\n  \"Welcome\": \"Benvingut/da\",\n  \"Welcome back to :app, :name.\": \"Benvingut/da de nou a :app, :name.\",\n  \"Welcome to :app, :name.\": \"Benvingut/da a :app, :name.\",\n  \"This is the first time you have signed in.\": \"Aquesta és la primera vegada que inicies la sessió.\",\n  \"Your last sign in was\": \"El teu darrer inici de sessió va ser\",\n  \"View Access Logs\": \"Veure registres d'accés\",\n  \"Have a great day!\": \"Que tinguis un bon dia!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"No es pot trobar un quadre de comandament amb l'slug especificat: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Gestiona la configuració de les estadístiques de trànsit intern\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Les estadístiques de trànsit intern estan desactivades. Per activar-les, editeu la configuració a config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Les estadístiques de trànsit intern estan actualment habilitades. Podeu ajustar el període de retenció i la zona horària, o desactivar aquesta funció, editant la configuració a config/cms.php.\",\n  \"Purging the data...\": \"Purgant les dades...\",\n  \"Purge Data\": \"Purgar dades\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Realment voleu purgar les dades d'estadístiques de trànsit intern?\",\n  \"Data retention period\": \"Període de retenció de dades\",\n  \"Time zone\": \"Zona horària\",\n  \":retention month(s)\": \"mes(os) de retenció\",\n  \"Indefinite\": \"Indefinit\",\n  \"Internal Traffic Statistics data purged\": \"Dades d'estadístiques de trànsit intern eliminades\",\n  \"[not set]\": \"[no definit]\",\n  \"1 day (today) if not set\": \"1 dia (avui) si no s'ha definit\",\n  \"Apply\": \"Aplica\",\n  \"Ascending\": \"Ascendent\",\n  \"Attribute\": \"Atribut\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Tipus de gràfic\",\n  \"Color\": \"Color\",\n  \"Compare Totals\": \"Comparar totals\",\n  \"Configure\": \"Configura\",\n  \"Custom\": \"Personalitzat\",\n  \"Dashboard interval\": \"Interval del tauler de control\",\n  \"Data source\": \"Font de dades\",\n  \"Date interval\": \"Interval de dates\",\n  \"Day\": \"Dia\",\n  \"Delete\": \"Suprimeix\",\n  \"Delete Dashboard\": \"Suprimeix el tauler de control\",\n  \"Delete row\": \"Suprimeix la fila\",\n  \"Descending\": \"Descendent\",\n  \"Dimension\": \"Dimensió\",\n  \"Direction\": \"Direcció\",\n  \"Disabled\": \"Discapacitat\",\n  \"Display\": \"Pantalla\",\n  \"Display [not set]\": \"Pantalla [no configurada]\",\n  \"Display all records\": \"Mostra tots els registres\",\n  \"Display relative bars\": \"Mostra les barres relatives\",\n  \"Display totals\": \"Mostra els totals\",\n  \"Edit Dashboard\": \"Edita el tauler de control\",\n  \"Empty values\": \"Valors buits\",\n  \"Enter a positive number\": \"Introdueix un nombre positiu\",\n  \"Enter a positive number or leave empty to display all records.\": \"Introduïu un número positiu o deixeu-ho en blanc per mostrar tots els registres.\",\n  \"Equal to\": \"Igual a\",\n  \"Export Dashboard\": \"Exporta el tauler de control\",\n  \"Extra table fields\": \"Camps de taula addicionals\",\n  \"Filters\": \"Filtres\",\n  \"General\": \"General\",\n  \"Greater or equal to\": \"Més gran o igual a\",\n  \"Greater than\": \"Més gran que\",\n  \"Hide\": \"Amaga\",\n  \"Horizontal\": \"Horitzontal\",\n  \"Icon\": \"Icona\",\n  \"Icon Status\": \"Estat de la icona\",\n  \"Important\": \"Important\",\n  \"Includes\": \"Inclou\",\n  \"Information\": \"Informació\",\n  \"Last 30 days\": \"darrers 30 dies\",\n  \"Last 7 days\": \"Últims 7 dies\",\n  \"Last month\": \"El mes passat\",\n  \"Leave empty to disable pagination\": \"Deixeu-ho en blanc per desactivar la paginació\",\n  \"Leave empty to hide the title\": \"Deixeu-ho en blanc per ocultar el títol\",\n  \"Less or equal to\": \"Menys o igual a\",\n  \"Less than\": \"Menys de\",\n  \"Limit\": \"Límit\",\n  \"Line\": \"Línia\",\n  \"Link Text\": \"Text de l'enllaç\",\n  \"Link URL\": \"URL de l'enllaç\",\n  \"Make Default\": \"Estableix com a predeterminat\",\n  \"Metric\": \"Mètrica\",\n  \"Metrics\": \"Mètriques\",\n  \"Month\": \"Mes\",\n  \"Notice text\": \"Text d'avís\",\n  \"Number of days\": \"Nombre de dies\",\n  \"One of\": \"Un de\",\n  \"One value per line\": \"Un valor per línia\",\n  \"Operation\": \"Operació\",\n  \"Order\": \"Comanda\",\n  \"Past hour\": \"Hora passada\",\n  \"Past X days\": \"Darrers X dies\",\n  \"Please provide the widget title\": \"Si us plau, proporcioneu el títol del widget\",\n  \"Please select a data source\": \"Seleccioneu una font de dades\",\n  \"Please select a dimension\": \"Si us plau, seleccioneu una dimensió\",\n  \"Please select an icon\": \"Si us plau, seleccioneu una icona\",\n  \"Please select metric(s).\": \"Seleccioneu mètriques.\",\n  \"Prev period\": \"Període anterior\",\n  \"Quarter\": \"Trimestre\",\n  \"Records per page\": \"Registres per pàgina\",\n  \"Refresh every minute\": \"Actualitza cada minut\",\n  \"Rename Dashboard\": \"Canvia el nom del tauler de control\",\n  \"Reset Layout\": \"Restableix el disseny\",\n  \"Reset layout back to default?\": \"Voleu restablir el disseny per defecte?\",\n  \"Same period last year\": \"El mateix període de l'any passat\",\n  \"Section Title\": \"Títol de la secció\",\n  \"Select a dimension and metrics\": \"Seleccioneu una dimensió i unes mètriques\",\n  \"Select an attribute\": \"Selecciona un atribut\",\n  \"Select an operation\": \"Selecciona una operació\",\n  \"Select sorting metric or dimension\": \"Seleccioneu la mètrica o la dimensió d'ordenació\",\n  \"Select the metric color\": \"Seleccioneu el color de la mètrica\",\n  \"Set the current layout as the default?\": \"Voleu establir el disseny actual com a predeterminat?\",\n  \"Show Date Interval\": \"Mostra l'interval de dates\",\n  \"Sort by\": \"Ordena per\",\n  \"Sorting\": \"Ordenació\",\n  \"Sorting & Filtering\": \"Ordenació i filtratge\",\n  \"Stacked Bar\": \"Barra apilada\",\n  \"Starts with\": \"Comença amb\",\n  \"Success\": \"Èxit\",\n  \"The dashboard layout has been reset to default.\": \"El disseny del tauler de control s'ha restablert a la configuració predeterminada.\",\n  \"The dashboard was successfully updated.\": \"El tauler de control s'ha actualitzat correctament.\",\n  \"The limit value must be at least 1\": \"El valor límit ha de ser com a mínim 1\",\n  \"This dashboard is now the default layout.\": \"Aquest tauler de control ara té el disseny per defecte.\",\n  \"This month\": \"Aquest mes\",\n  \"This quarter\": \"Aquest trimestre\",\n  \"This week\": \"Aquesta setmana\",\n  \"This year\": \"Aquest any\",\n  \"Title\": \"Títol\",\n  \"Today\": \"Avui\",\n  \"Value\": \"Valor\",\n  \"Values\": \"Valors\",\n  \"Vertical\": \"Vertical\",\n  \"Warning\": \"Avís\",\n  \"Week\": \"Setmana\",\n  \"Year\": \"Any\",\n  \"Yesterday\": \"Ahir\"\n}"
  },
  {
    "path": "modules/dashboard/lang/cs.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Funkce statistiky interní návštěvnosti zaznamenává do databáze zobrazení stránek, IP adresy a další základní anonymní uživatelská data.\",\n  \"Internal Traffic Statistics\": \"Statistiky interní návštěvnosti\",\n  \"Purge the Internal Traffic Statistics data\": \"Vymazání dat ze statistik interní návštěvnosti\",\n  \"Manage Traffic Settings and Data\": \"Správa nastavení a dat o provozu\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Statistiky interní návštěvnosti zaznamenávají zobrazení stránek, IP adresy a další základní anonymní uživatelská data do databáze a poskytují reporty pro dashboard. Pokud je tato funkce zakázána, data se do databáze nezapisují.\",\n  \"Traffic Statistics\": \"Statistiky provozu\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Časové pásmo pro zaznamenávání zobrazení stránek. Změna časového pásma neaktualizuje stávající data. Pokud změníte časové pásmo bez smazání stávajících dat, mohou se v přehledech zobrazovat nesprávné časy pro dříve zaznamenané dny.\",\n  \"Retention Period (Months)\": \"Doba uchovávání (měsíce)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Určuje dobu, po kterou mají být data statistik provozu ukládána v databázi. Po uplynutí nastavené doby se odpovídající data z databáze automaticky smažou. Nastavením na 0 nebo prázdné pole se záznamy uchovávají navždy.\",\n  \"Data Filters\": \"Datové filtry\",\n  \"Exclude Bots\": \"Vyloučit boty\",\n  \"Automatically ignores known bots using the detection library.\": \"Automaticky ignoruje známé boty pomocí detekční knihovny.\",\n  \"Exclude Administrator Roles\": \"Vyloučit role správce\",\n  \"Ignores traffic from selected roles.\": \"Ignoruje provoz z vybraných rolí.\",\n  \"Exclude IP Addresses\": \"Vyloučit IP adresy\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Požadavky z těchto adres budou ve statistikách ignorovány.\",\n  \"Exclude Paths\": \"Vyloučit cesty\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Zadejte jednu cestu nebo vzor na řádek, chcete-li ignorovat odpovídající adresy URL.\",\n  \"Access the Dashboard\": \"Přístup k řídicímu panelu\",\n  \"Manage Dashboards\": \"Správa řídicích panelů\",\n  \"Dashboard\": \"Plocha\",\n  \"Manage the Internal Traffic Statistics data\": \"Správa dat statistik interní návštěvnosti\",\n  \"Date\": \"Datum\",\n  \"Page Path\": \"Cesta ke stránce\",\n  \"Referral Domain\": \"Referenční doména\",\n  \"Pageviews\": \"Zobrazení stránek\",\n  \"Unique Visitors\": \"Unikátní návštěvníci\",\n  \"Traffic Information\": \"Dopravní informace\",\n  \"Website Status\": \"Stav webových stránek\",\n  \"Core version information\": \"Informace o základní verzi\",\n  \"System Issues\": \"Problémy se systémem\",\n  \"Event Log\": \"Protokol událostí\",\n  \"Request log\": \"protokol žádostí\",\n  \"Request Log\": \"Protokol požadavků\",\n  \"Website status information\": \"Informace o stavu webových stránek\",\n  \"Add Row\": \"Přidat řádek\",\n  \"Edit Row\": \"Upravit řádek\",\n  \"Edit Widget\": \"Upravit widget\",\n  \"No Value\": \"Žádná hodnota\",\n  \"Section\": \"Sekce\",\n  \"This is a text notice widget.\": \"Toto je widget s textovými oznámeními.\",\n  \"My Custom Widget\": \"Můj vlastní widget\",\n  \"Chart\": \"Schéma\",\n  \"Indicator\": \"Indikátor\",\n  \"Table\": \"Tabulka\",\n  \"Text Notice\": \"Textové oznámení\",\n  \"Widget Configuration\": \"Konfigurace widgetu\",\n  \"Configure the report widget\": \"Konfigurace widgetu sestavy\",\n  \"Width :columns\": \"Šířka: sloupce\",\n  \"The widget width, a number between 1 and 10.\": \"Šířka widgetu, číslo mezi 1 a 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Zadejte šířku widgetu jako číslo mezi 1 a 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} sloupec|[2,Inf] sloupce\",\n  \"Force new row\": \"Vynutit nový řádek\",\n  \"Put the widget in a new row.\": \"Vložte widget do nového řádku.\",\n  \"Widget title\": \"Název widgetu\",\n  \"The Widget Title is required.\": \"Název widgetu je povinný.\",\n  \"Layout has been reset\": \"Rozvržení bylo resetováno\",\n  \"Current layout is now the default\": \"Aktuální rozvržení je nyní výchozí\",\n  \"System status\": \"Stav systému\",\n  \"Pending Software Updates\": \"Čekající aktualizace softwaru\",\n  \"Software is Up to Date\": \"Software je aktuální\",\n  \"Update\": \"Aktualizovat\",\n  \"Some Issues Need Attention\": \"Některé problémy vyžadují pozornost\",\n  \"No Warnings to Display\": \"Žádná varování k zobrazení\",\n  \"View\": \"Pohled\",\n  \"System Build\": \"Sestavení systému\",\n  \"Online Since\": \"Online od\",\n  \"Welcome\": \"Vítejte\",\n  \"Welcome back to :app, :name.\": \"Vítejte zpět v :app, :name.\",\n  \"Welcome to :app, :name.\": \"Vítejte v :app, :name.\",\n  \"This is the first time you have signed in.\": \"Toto je vaše první přihlášení.\",\n  \"Your last sign in was\": \"Vaše poslední přihlášení bylo\",\n  \"View Access Logs\": \"Zobrazit protokoly přístupu\",\n  \"Have a great day!\": \"Přeji krásný den!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Nelze najít dashboard se zadaným slugem: „:slug“.\",\n  \"Manage Internal Traffic Statistics settings\": \"Správa nastavení statistik interní návštěvnosti\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Statistiky interní návštěvnosti jsou zakázány. Chcete-li je povolit, upravte konfiguraci v souboru config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Interní statistiky návštěvnosti jsou aktuálně povoleny. Dobu uchování a časové pásmo můžete upravit nebo tuto funkci zakázat úpravou nastavení v souboru config/cms.php.\",\n  \"Purging the data...\": \"Mazání dat...\",\n  \"Purge Data\": \"Vymazat data\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Opravdu chcete vymazat data ze statistik interní návštěvnosti?\",\n  \"Data retention period\": \"Doba uchovávání údajů\",\n  \"Time zone\": \"Časové pásmo\",\n  \":retention month(s)\": \"měsíc(y) uchování\",\n  \"Indefinite\": \"Neurčitý\",\n  \"Internal Traffic Statistics data purged\": \"Data interních statistik návštěvnosti byla vymazána\",\n  \"[not set]\": \"[není nastaveno]\",\n  \"1 day (today) if not set\": \"1 den (dnes), pokud není nastaveno\",\n  \"Apply\": \"Použít\",\n  \"Ascending\": \"Vzestupně\",\n  \"Attribute\": \"Atribut\",\n  \"Bar\": \"Sloupec\",\n  \"Chart type\": \"Typ grafu\",\n  \"Color\": \"Barva\",\n  \"Compare Totals\": \"Porovnat součty\",\n  \"Configure\": \"Konfigurovat\",\n  \"Custom\": \"Zvyk\",\n  \"Dashboard interval\": \"Interval řídicí desky\",\n  \"Data source\": \"Zdroj dat\",\n  \"Date interval\": \"Interval data\",\n  \"Day\": \"Den\",\n  \"Delete\": \"Vymazat\",\n  \"Delete Dashboard\": \"Smazat řídicí panel\",\n  \"Delete row\": \"Smazat řádek\",\n  \"Descending\": \"Klesající\",\n  \"Dimension\": \"Dimenze\",\n  \"Direction\": \"Směr\",\n  \"Disabled\": \"Zakázáno\",\n  \"Display\": \"Zobrazit\",\n  \"Display [not set]\": \"Displej [nenastaveno]\",\n  \"Display all records\": \"Zobrazit všechny záznamy\",\n  \"Display relative bars\": \"Zobrazit relativní sloupce\",\n  \"Display totals\": \"Zobrazit součty\",\n  \"Edit Dashboard\": \"Upravit řídicí panel\",\n  \"Empty values\": \"Prázdné hodnoty\",\n  \"Enter a positive number\": \"Zadejte kladné číslo\",\n  \"Enter a positive number or leave empty to display all records.\": \"Zadejte kladné číslo nebo nechte pole prázdné pro zobrazení všech záznamů.\",\n  \"Equal to\": \"Rovné\",\n  \"Export Dashboard\": \"Exportovat řídicí panel\",\n  \"Extra table fields\": \"Další pole tabulky\",\n  \"Filters\": \"Filtry\",\n  \"General\": \"Generál\",\n  \"Greater or equal to\": \"Větší nebo rovno\",\n  \"Greater than\": \"Větší než\",\n  \"Hide\": \"Skrýt\",\n  \"Horizontal\": \"Horizontální\",\n  \"Icon\": \"Ikona\",\n  \"Icon Status\": \"Ikona Stav\",\n  \"Important\": \"Důležité\",\n  \"Includes\": \"Zahrnuje\",\n  \"Information\": \"Informace\",\n  \"Last 30 days\": \"Posledních 30 dní\",\n  \"Last 7 days\": \"Posledních 7 dní\",\n  \"Last month\": \"Minulý měsíc\",\n  \"Leave empty to disable pagination\": \"Pro vypnutí stránkování ponechte prázdné.\",\n  \"Leave empty to hide the title\": \"Pro skrytí názvu ponechte prázdné.\",\n  \"Less or equal to\": \"Menší nebo rovno\",\n  \"Less than\": \"Méně než\",\n  \"Limit\": \"Omezit\",\n  \"Line\": \"Čára\",\n  \"Link Text\": \"Text odkazu\",\n  \"Link URL\": \"URL odkazu\",\n  \"Make Default\": \"Nastavit jako výchozí\",\n  \"Metric\": \"Metrický\",\n  \"Metrics\": \"Metriky\",\n  \"Month\": \"Měsíc\",\n  \"Notice text\": \"Text oznámení\",\n  \"Number of days\": \"Počet dní\",\n  \"One of\": \"Jeden z\",\n  \"One value per line\": \"Jedna hodnota na řádek\",\n  \"Operation\": \"Operace\",\n  \"Order\": \"Objednávka\",\n  \"Past hour\": \"Poslední hodina\",\n  \"Past X days\": \"Posledních X dní\",\n  \"Please provide the widget title\": \"Prosím, uveďte název widgetu\",\n  \"Please select a data source\": \"Vyberte zdroj dat\",\n  \"Please select a dimension\": \"Vyberte prosím dimenzi\",\n  \"Please select an icon\": \"Vyberte prosím ikonu\",\n  \"Please select metric(s).\": \"Vyberte prosím metriku(y).\",\n  \"Prev period\": \"Předchozí období\",\n  \"Quarter\": \"Čtvrtletí\",\n  \"Records per page\": \"Záznamů na stránku\",\n  \"Refresh every minute\": \"Obnovovat každou minutu\",\n  \"Rename Dashboard\": \"Přejmenovat řídicí panel\",\n  \"Reset Layout\": \"Obnovit rozvržení\",\n  \"Reset layout back to default?\": \"Obnovit rozvržení zpět na výchozí?\",\n  \"Same period last year\": \"Stejné období loňského roku\",\n  \"Section Title\": \"Název sekce\",\n  \"Select a dimension and metrics\": \"Vyberte dimenzi a metriky\",\n  \"Select an attribute\": \"Vyberte atribut\",\n  \"Select an operation\": \"Vyberte operaci\",\n  \"Select sorting metric or dimension\": \"Vyberte metriku nebo dimenzi řazení\",\n  \"Select the metric color\": \"Vyberte barvu metriky\",\n  \"Set the current layout as the default?\": \"Nastavit aktuální rozvržení jako výchozí?\",\n  \"Show Date Interval\": \"Zobrazit interval dat\",\n  \"Sort by\": \"Seřadit podle\",\n  \"Sorting\": \"Řazení\",\n  \"Sorting & Filtering\": \"Řazení a filtrování\",\n  \"Stacked Bar\": \"Skládaný sloupcový graf\",\n  \"Starts with\": \"Začíná s\",\n  \"Success\": \"Úspěch\",\n  \"The dashboard layout has been reset to default.\": \"Rozvržení řídicí desky bylo obnoveno na výchozí nastavení.\",\n  \"The dashboard was successfully updated.\": \"Řídicí panel byl úspěšně aktualizován.\",\n  \"The limit value must be at least 1\": \"Limitní hodnota musí být alespoň 1\",\n  \"This dashboard is now the default layout.\": \"Tento řídicí panel má nyní výchozí rozvržení.\",\n  \"This month\": \"Tento měsíc\",\n  \"This quarter\": \"Toto čtvrtletí\",\n  \"This week\": \"Tento týden\",\n  \"This year\": \"Letos\",\n  \"Title\": \"Titul\",\n  \"Today\": \"Dnes\",\n  \"Value\": \"Hodnota\",\n  \"Values\": \"Hodnoty\",\n  \"Vertical\": \"Vertikální\",\n  \"Warning\": \"Varování\",\n  \"Week\": \"Týden\",\n  \"Year\": \"Rok\",\n  \"Yesterday\": \"Včera\"\n}"
  },
  {
    "path": "modules/dashboard/lang/da.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Funktionen Intern trafikstatistik logger sidevisninger, IP-adresser og andre grundlæggende anonyme brugerdata i databasen.\",\n  \"Internal Traffic Statistics\": \"Intern trafikstatistik\",\n  \"Purge the Internal Traffic Statistics data\": \"Ryd de interne trafikstatistikdata\",\n  \"Manage Traffic Settings and Data\": \"Administrer trafikindstillinger og data\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Intern trafikstatistik logger sidevisninger, IP-adresser og andre grundlæggende anonyme brugerdata i databasen og leverer rapporter til dashboardet. Når funktionen er deaktiveret, skrives dataene ikke til databasen.\",\n  \"Traffic Statistics\": \"Trafikstatistik\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Tidszone til at logge sidevisninger i. Ændring af tidszonen opdaterer ikke de eksisterende data. Hvis du ændrer tidszonen uden at slette de eksisterende data, kan rapporter potentielt vise forkerte tidspunkter for tidligere registrerede dage.\",\n  \"Retention Period (Months)\": \"Opbevaringsperiode (måneder)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Bestemmer, hvor længe trafikstatistikdata skal gemmes i databasen. Når den angivne periode udløber, slettes de tilsvarende data automatisk fra databasen. Indstil til 0 eller tom for at bevare poster for altid.\",\n  \"Data Filters\": \"Datafiltre\",\n  \"Exclude Bots\": \"Udeluk bots\",\n  \"Automatically ignores known bots using the detection library.\": \"Ignorerer automatisk kendte bots ved hjælp af detektionsbiblioteket.\",\n  \"Exclude Administrator Roles\": \"Udeluk administratorroller\",\n  \"Ignores traffic from selected roles.\": \"Ignorerer trafik fra valgte roller.\",\n  \"Exclude IP Addresses\": \"Udeluk IP-adresser\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Anmodninger fra disse adresser vil blive ignoreret i statistikken.\",\n  \"Exclude Paths\": \"Udeluk stier\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Indtast én sti eller et mønster pr. række for at ignorere matchende webadresser.\",\n  \"Access the Dashboard\": \"Få adgang til dashboardet\",\n  \"Manage Dashboards\": \"Administrer dashboards\",\n  \"Dashboard\": \"Dashboard\",\n  \"Manage the Internal Traffic Statistics data\": \"Administrer de interne trafikstatistikdata\",\n  \"Date\": \"Dato\",\n  \"Page Path\": \"Sidesti\",\n  \"Referral Domain\": \"Henvisningsdomæne\",\n  \"Pageviews\": \"Sidevisninger\",\n  \"Unique Visitors\": \"Unikke besøgende\",\n  \"Traffic Information\": \"Trafikinformation\",\n  \"Website Status\": \"Hjemmesidestatus\",\n  \"Core version information\": \"Oplysninger om kerneversion\",\n  \"System Issues\": \"Systemproblemer\",\n  \"Event Log\": \"Hændelseslog\",\n  \"Request log\": \"Anmodningslog\",\n  \"Request Log\": \"Anmodningslog\",\n  \"Website status information\": \"Oplysninger om webstedsstatus\",\n  \"Add Row\": \"Tilføj række\",\n  \"Edit Row\": \"Rediger række\",\n  \"Edit Widget\": \"Rediger widget\",\n  \"No Value\": \"Ingen værdi\",\n  \"Section\": \"Afsnit\",\n  \"This is a text notice widget.\": \"Dette er en widget til tekstbeskeder.\",\n  \"My Custom Widget\": \"Min brugerdefinerede widget\",\n  \"Chart\": \"Diagram\",\n  \"Indicator\": \"Indikator\",\n  \"Table\": \"Tabel\",\n  \"Text Notice\": \"Tekstmeddelelse\",\n  \"Widget Configuration\": \"Widget-konfiguration\",\n  \"Configure the report widget\": \"Konfigurer rapportwidgetten\",\n  \"Width :columns\": \"Bredde: kolonner\",\n  \"The widget width, a number between 1 and 10.\": \"Widgetens bredde, et tal mellem 1 og 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Indtast venligst widgetens bredde som et tal mellem 1 og 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} kolonne|[2,Inf] kolonner\",\n  \"Force new row\": \"Tving ny række\",\n  \"Put the widget in a new row.\": \"Sæt widgetten i en ny række.\",\n  \"Widget title\": \"Widgettitel\",\n  \"The Widget Title is required.\": \"Widget-titlen er påkrævet.\",\n  \"Layout has been reset\": \"Layoutet er blevet nulstillet\",\n  \"Current layout is now the default\": \"Nuværende layout er nu standard\",\n  \"System status\": \"Systemstatus\",\n  \"Pending Software Updates\": \"Ventende softwareopdateringer\",\n  \"Software is Up to Date\": \"Softwaren er opdateret\",\n  \"Update\": \"Opdatering\",\n  \"Some Issues Need Attention\": \"Nogle problemer kræver opmærksomhed\",\n  \"No Warnings to Display\": \"Ingen advarsler at vise\",\n  \"View\": \"Udsigt\",\n  \"System Build\": \"Systemopbygning\",\n  \"Online Since\": \"Online siden\",\n  \"Welcome\": \"Velkomst\",\n  \"Welcome back to :app, :name.\": \"Velkommen tilbage til :app, :name.\",\n  \"Welcome to :app, :name.\": \"Velkommen til :app, :name.\",\n  \"This is the first time you have signed in.\": \"Dette er første gang, du er logget ind.\",\n  \"Your last sign in was\": \"Dit sidste login var\",\n  \"View Access Logs\": \"Se adgangslogfiler\",\n  \"Have a great day!\": \"Hav en god dag!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Kan ikke finde et dashboard med den angivne slug: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Administrer indstillinger for intern trafikstatistik\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Intern trafikstatistik er deaktiveret. For at aktivere det skal du redigere konfigurationen i config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Intern trafikstatistik er i øjeblikket aktiveret. Du kan justere opbevaringsperioden og tidszonen eller deaktivere denne funktion ved at redigere indstillingerne i config/cms.php.\",\n  \"Purging the data...\": \"Rydder dataene...\",\n  \"Purge Data\": \"Ryd data\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Vil du virkelig slette de interne trafikstatistikdata?\",\n  \"Data retention period\": \"Dataopbevaringsperiode\",\n  \"Time zone\": \"Tidszone\",\n  \":retention month(s)\": \":opbevaringsmåned(er)\",\n  \"Indefinite\": \"Ubestemt\",\n  \"Internal Traffic Statistics data purged\": \"Data om intern trafikstatistik er slettet\",\n  \"[not set]\": \"[ikke indstillet]\",\n  \"1 day (today) if not set\": \"1 dag (i dag) hvis ikke angivet\",\n  \"Apply\": \"Anvende\",\n  \"Ascending\": \"Stigende\",\n  \"Attribute\": \"Attribut\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Diagramtype\",\n  \"Color\": \"Farve\",\n  \"Compare Totals\": \"Sammenlign totaler\",\n  \"Configure\": \"Konfigurér\",\n  \"Custom\": \"Skik\",\n  \"Dashboard interval\": \"Dashboard-interval\",\n  \"Data source\": \"Datakilde\",\n  \"Date interval\": \"Datointerval\",\n  \"Day\": \"Dag\",\n  \"Delete\": \"Slet\",\n  \"Delete Dashboard\": \"Slet dashboard\",\n  \"Delete row\": \"Slet række\",\n  \"Descending\": \"Faldende\",\n  \"Dimension\": \"Dimension\",\n  \"Direction\": \"Retning\",\n  \"Disabled\": \"Handicappet\",\n  \"Display\": \"Vise\",\n  \"Display [not set]\": \"Vis [ikke indstillet]\",\n  \"Display all records\": \"Vis alle poster\",\n  \"Display relative bars\": \"Vis relative søjler\",\n  \"Display totals\": \"Vis totaler\",\n  \"Edit Dashboard\": \"Rediger dashboard\",\n  \"Empty values\": \"Tomme værdier\",\n  \"Enter a positive number\": \"Indtast et positivt tal\",\n  \"Enter a positive number or leave empty to display all records.\": \"Indtast et positivt tal, eller lad feltet stå tomt for at vise alle poster.\",\n  \"Equal to\": \"Lig med\",\n  \"Export Dashboard\": \"Eksportér dashboard\",\n  \"Extra table fields\": \"Ekstra tabelfelter\",\n  \"Filters\": \"Filtre\",\n  \"General\": \"Generel\",\n  \"Greater or equal to\": \"Større end eller lig med\",\n  \"Greater than\": \"Større end\",\n  \"Hide\": \"Skjule\",\n  \"Horizontal\": \"Vandret\",\n  \"Icon\": \"Ikon\",\n  \"Icon Status\": \"Ikonstatus\",\n  \"Important\": \"Vigtig\",\n  \"Includes\": \"Inkluderer\",\n  \"Information\": \"Information\",\n  \"Last 30 days\": \"De sidste 30 dage\",\n  \"Last 7 days\": \"Sidste 7 dage\",\n  \"Last month\": \"Sidste måned\",\n  \"Leave empty to disable pagination\": \"Lad feltet stå tomt for at deaktivere paginering\",\n  \"Leave empty to hide the title\": \"Lad feltet stå tomt for at skjule titlen\",\n  \"Less or equal to\": \"Mindre eller lig med\",\n  \"Less than\": \"Mindre end\",\n  \"Limit\": \"Begrænse\",\n  \"Line\": \"Linje\",\n  \"Link Text\": \"Linktekst\",\n  \"Link URL\": \"Link-URL\",\n  \"Make Default\": \"Gør til standard\",\n  \"Metric\": \"Metrisk\",\n  \"Metrics\": \"Målinger\",\n  \"Month\": \"Måned\",\n  \"Notice text\": \"Meddelelsestekst\",\n  \"Number of days\": \"Antal dage\",\n  \"One of\": \"En af\",\n  \"One value per line\": \"Én værdi pr. linje\",\n  \"Operation\": \"Operation\",\n  \"Order\": \"Bestille\",\n  \"Past hour\": \"Sidste time\",\n  \"Past X days\": \"Sidste X dage\",\n  \"Please provide the widget title\": \"Angiv venligst widgetens titel\",\n  \"Please select a data source\": \"Vælg venligst en datakilde\",\n  \"Please select a dimension\": \"Vælg venligst en dimension\",\n  \"Please select an icon\": \"Vælg venligst et ikon\",\n  \"Please select metric(s).\": \"Vælg venligst måleenhed(er).\",\n  \"Prev period\": \"Forrige periode\",\n  \"Quarter\": \"Kvarter\",\n  \"Records per page\": \"Optegnelser pr. side\",\n  \"Refresh every minute\": \"Opdater hvert minut\",\n  \"Rename Dashboard\": \"Omdøb dashboard\",\n  \"Reset Layout\": \"Nulstil layout\",\n  \"Reset layout back to default?\": \"Nulstil layoutet til standard?\",\n  \"Same period last year\": \"Samme periode sidste år\",\n  \"Section Title\": \"Sektionstitel\",\n  \"Select a dimension and metrics\": \"Vælg en dimension og metrics\",\n  \"Select an attribute\": \"Vælg en attribut\",\n  \"Select an operation\": \"Vælg en handling\",\n  \"Select sorting metric or dimension\": \"Vælg sorteringsmetrik eller dimension\",\n  \"Select the metric color\": \"Vælg den metriske farve\",\n  \"Set the current layout as the default?\": \"Vil du indstille det aktuelle layout som standard?\",\n  \"Show Date Interval\": \"Vis datointerval\",\n  \"Sort by\": \"Sortér efter\",\n  \"Sorting\": \"Sortering\",\n  \"Sorting & Filtering\": \"Sortering og filtrering\",\n  \"Stacked Bar\": \"Stablet bar\",\n  \"Starts with\": \"Starter med\",\n  \"Success\": \"Succes\",\n  \"The dashboard layout has been reset to default.\": \"Dashboardlayoutet er blevet nulstillet til standard.\",\n  \"The dashboard was successfully updated.\": \"Dashboardet blev opdateret.\",\n  \"The limit value must be at least 1\": \"Grænseværdien skal være mindst 1\",\n  \"This dashboard is now the default layout.\": \"Dette dashboard er nu standardlayoutet.\",\n  \"This month\": \"Denne måned\",\n  \"This quarter\": \"Dette kvartal\",\n  \"This week\": \"Denne uge\",\n  \"This year\": \"I år\",\n  \"Title\": \"Titel\",\n  \"Today\": \"I dag\",\n  \"Value\": \"Værdi\",\n  \"Values\": \"Værdier\",\n  \"Vertical\": \"Lodret\",\n  \"Warning\": \"Advarsel\",\n  \"Week\": \"Uge\",\n  \"Year\": \"År\",\n  \"Yesterday\": \"I går\"\n}"
  },
  {
    "path": "modules/dashboard/lang/de.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Die Funktion „Interne Verkehrsstatistik“ protokolliert Seitenaufrufe, IP-Adressen und andere grundlegende anonyme Benutzerdaten in der Datenbank.\",\n  \"Internal Traffic Statistics\": \"Interne Verkehrsstatistiken\",\n  \"Purge the Internal Traffic Statistics data\": \"Löschen Sie die internen Verkehrsstatistikdaten.\",\n  \"Manage Traffic Settings and Data\": \"Verkehrseinstellungen und Daten verwalten\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Die Funktion „Interne Verkehrsstatistik“ protokolliert Seitenaufrufe, IP-Adressen und andere grundlegende anonyme Nutzerdaten in der Datenbank und erstellt Berichte für das Dashboard. Wenn diese Funktion deaktiviert ist, werden keine Daten in die Datenbank geschrieben.\",\n  \"Traffic Statistics\": \"Verkehrsstatistik\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Zeitzone für die Protokollierung von Seitenaufrufen. Durch Ändern der Zeitzone werden die vorhandenen Daten nicht aktualisiert. Wenn Sie die Zeitzone ändern, ohne die vorhandenen Daten zu löschen, können Berichte unter Umständen falsche Zeiten für zuvor protokollierte Tage anzeigen.\",\n  \"Retention Period (Months)\": \"Aufbewahrungsfrist (Monate)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Legt die Speicherdauer der Verkehrsstatistikdaten in der Datenbank fest. Nach Ablauf der festgelegten Frist werden die entsprechenden Daten automatisch aus der Datenbank gelöscht. Bei Angabe von 0 oder einem leeren Feld werden die Datensätze unbegrenzt gespeichert.\",\n  \"Data Filters\": \"Datenfilter\",\n  \"Exclude Bots\": \"Bots ausschließen\",\n  \"Automatically ignores known bots using the detection library.\": \"Ignoriert automatisch bekannte Bots mithilfe der Erkennungsbibliothek.\",\n  \"Exclude Administrator Roles\": \"Administratorrollen ausschließen\",\n  \"Ignores traffic from selected roles.\": \"Ignoriert den Datenverkehr von ausgewählten Rollen.\",\n  \"Exclude IP Addresses\": \"IP-Adressen ausschließen\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Anfragen von diesen Adressen werden in der Statistik nicht berücksichtigt.\",\n  \"Exclude Paths\": \"Pfade ausschließen\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Geben Sie pro Zeile einen Pfad oder ein Muster ein, um übereinstimmende URLs zu ignorieren.\",\n  \"Access the Dashboard\": \"Zum Dashboard gelangen\",\n  \"Manage Dashboards\": \"Dashboards verwalten\",\n  \"Dashboard\": \"Armaturenbrett\",\n  \"Manage the Internal Traffic Statistics data\": \"Verwalten Sie die Daten der internen Verkehrsstatistik.\",\n  \"Date\": \"Datum\",\n  \"Page Path\": \"Seitenpfad\",\n  \"Referral Domain\": \"Referral-Domain\",\n  \"Pageviews\": \"Seitenaufrufe\",\n  \"Unique Visitors\": \"Einzigartige Besucher\",\n  \"Traffic Information\": \"Verkehrsinformationen\",\n  \"Website Status\": \"Website-Status\",\n  \"Core version information\": \"Informationen zur Core-Version\",\n  \"System Issues\": \"Systemprobleme\",\n  \"Event Log\": \"Ereignisprotokoll\",\n  \"Request log\": \"Anforderungsprotokoll\",\n  \"Request Log\": \"Anforderungsprotokoll\",\n  \"Website status information\": \"Website-Statusinformationen\",\n  \"Add Row\": \"Zeile hinzufügen\",\n  \"Edit Row\": \"Zeile bearbeiten\",\n  \"Edit Widget\": \"Widget bearbeiten\",\n  \"No Value\": \"Kein Wert\",\n  \"Section\": \"Abschnitt\",\n  \"This is a text notice widget.\": \"Dies ist ein Textbenachrichtigungs-Widget.\",\n  \"My Custom Widget\": \"Mein benutzerdefiniertes Widget\",\n  \"Chart\": \"Diagramm\",\n  \"Indicator\": \"Indikator\",\n  \"Table\": \"Tisch\",\n  \"Text Notice\": \"Textbenachrichtigung\",\n  \"Widget Configuration\": \"Widget-Konfiguration\",\n  \"Configure the report widget\": \"Konfigurieren Sie das Berichts-Widget.\",\n  \"Width :columns\": \"Breite :Spalten\",\n  \"The widget width, a number between 1 and 10.\": \"Die Widget-Breite, eine Zahl zwischen 1 und 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Bitte geben Sie die Widget-Breite als Zahl zwischen 1 und 10 ein.\",\n  \"{1} column|[2,Inf] columns\": \"{1} Spalte|[2,Inf] Spalten\",\n  \"Force new row\": \"Neue Zeile erzwingen\",\n  \"Put the widget in a new row.\": \"Platzieren Sie das Widget in einer neuen Zeile.\",\n  \"Widget title\": \"Widget-Titel\",\n  \"The Widget Title is required.\": \"Der Widget-Titel ist erforderlich.\",\n  \"Layout has been reset\": \"Das Layout wurde zurückgesetzt\",\n  \"Current layout is now the default\": \"Das aktuelle Layout ist jetzt die Standardeinstellung.\",\n  \"System status\": \"Systemstatus\",\n  \"Pending Software Updates\": \"Ausstehende Software-Updates\",\n  \"Software is Up to Date\": \"Die Software ist auf dem neuesten Stand.\",\n  \"Update\": \"Aktualisieren\",\n  \"Some Issues Need Attention\": \"Einige Punkte erfordern Aufmerksamkeit\",\n  \"No Warnings to Display\": \"Es werden keine Warnungen angezeigt\",\n  \"View\": \"Sicht\",\n  \"System Build\": \"Systemaufbau\",\n  \"Online Since\": \"Online seit\",\n  \"Welcome\": \"Willkommen\",\n  \"Welcome back to :app, :name.\": \"Willkommen zurück bei :app, :name.\",\n  \"Welcome to :app, :name.\": \"Willkommen bei :app, :name.\",\n  \"This is the first time you have signed in.\": \"Dies ist Ihre erste Anmeldung.\",\n  \"Your last sign in was\": \"Ihr letzter Login war\",\n  \"View Access Logs\": \"Zugriffsprotokolle anzeigen\",\n  \"Have a great day!\": \"Ich wünsche ihnen einen wunderbaren Tag!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Es konnte kein Dashboard mit dem angegebenen Slug gefunden werden: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Einstellungen für die Verwaltung der internen Verkehrsstatistik\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Die interne Verkehrsstatistik ist deaktiviert. Um sie zu aktivieren, bearbeiten Sie die Konfiguration in config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Die interne Verkehrsstatistik ist aktuell aktiviert. Sie können die Aufbewahrungsdauer und die Zeitzone anpassen oder diese Funktion deaktivieren, indem Sie die Einstellungen in config/cms.php bearbeiten.\",\n  \"Purging the data...\": \"Daten werden gelöscht...\",\n  \"Purge Data\": \"Daten löschen\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Wollen Sie die Daten der internen Verkehrsstatistik wirklich löschen?\",\n  \"Data retention period\": \"Datenaufbewahrungsdauer\",\n  \"Time zone\": \"Zeitzone\",\n  \":retention month(s)\": \":Retention-Monat(e)\",\n  \"Indefinite\": \"Unbestimmt\",\n  \"Internal Traffic Statistics data purged\": \"Interne Verkehrsstatistikdaten gelöscht\",\n  \"[not set]\": \"[nicht festgelegt]\",\n  \"1 day (today) if not set\": \"1 Tag (heute), falls nicht anders eingestellt\",\n  \"Apply\": \"Anwenden\",\n  \"Ascending\": \"Aufsteigend\",\n  \"Attribute\": \"Attribut\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Diagrammtyp\",\n  \"Color\": \"Farbe\",\n  \"Compare Totals\": \"Vergleich der Summen\",\n  \"Configure\": \"Konfigurieren\",\n  \"Custom\": \"Brauch\",\n  \"Dashboard interval\": \"Dashboard-Intervall\",\n  \"Data source\": \"Datenquelle\",\n  \"Date interval\": \"Datumsintervall\",\n  \"Day\": \"Tag\",\n  \"Delete\": \"Löschen\",\n  \"Delete Dashboard\": \"Dashboard löschen\",\n  \"Delete row\": \"Zeile löschen\",\n  \"Descending\": \"Absteigend\",\n  \"Dimension\": \"Dimension\",\n  \"Direction\": \"Richtung\",\n  \"Disabled\": \"Deaktiviert\",\n  \"Display\": \"Anzeige\",\n  \"Display [not set]\": \"Anzeige [nicht eingestellt]\",\n  \"Display all records\": \"Alle Datensätze anzeigen\",\n  \"Display relative bars\": \"Relative Balken anzeigen\",\n  \"Display totals\": \"Summen anzeigen\",\n  \"Edit Dashboard\": \"Dashboard bearbeiten\",\n  \"Empty values\": \"Leere Werte\",\n  \"Enter a positive number\": \"Geben Sie eine positive Zahl ein\",\n  \"Enter a positive number or leave empty to display all records.\": \"Geben Sie eine positive Zahl ein oder lassen Sie das Feld leer, um alle Datensätze anzuzeigen.\",\n  \"Equal to\": \"Gleichwertig\",\n  \"Export Dashboard\": \"Dashboard exportieren\",\n  \"Extra table fields\": \"Zusätzliche Tabellenfelder\",\n  \"Filters\": \"Filter\",\n  \"General\": \"Allgemein\",\n  \"Greater or equal to\": \"Größer oder gleich\",\n  \"Greater than\": \"Größer als\",\n  \"Hide\": \"Verstecken\",\n  \"Horizontal\": \"Horizontal\",\n  \"Icon\": \"Symbol\",\n  \"Icon Status\": \"Symbolstatus\",\n  \"Important\": \"Wichtig\",\n  \"Includes\": \"Beinhaltet\",\n  \"Information\": \"Information\",\n  \"Last 30 days\": \"Letzte 30 Tage\",\n  \"Last 7 days\": \"Letzte 7 Tage\",\n  \"Last month\": \"Letzten Monat\",\n  \"Leave empty to disable pagination\": \"Lassen Sie das Feld leer, um die Paginierung zu deaktivieren.\",\n  \"Leave empty to hide the title\": \"Lassen Sie das Feld leer, um den Titel auszublenden.\",\n  \"Less or equal to\": \"Kleiner oder gleich\",\n  \"Less than\": \"Weniger als\",\n  \"Limit\": \"Limit\",\n  \"Line\": \"Linie\",\n  \"Link Text\": \"Linktext\",\n  \"Link URL\": \"Link-URL\",\n  \"Make Default\": \"Als Standard festlegen\",\n  \"Metric\": \"Metrisch\",\n  \"Metrics\": \"Kennzahlen\",\n  \"Month\": \"Monat\",\n  \"Notice text\": \"Hinweistext\",\n  \"Number of days\": \"Anzahl der Tage\",\n  \"One of\": \"Einer von\",\n  \"One value per line\": \"Ein Wert pro Zeile\",\n  \"Operation\": \"Betrieb\",\n  \"Order\": \"Befehl\",\n  \"Past hour\": \"vergangene Stunde\",\n  \"Past X days\": \"Letzte X Tage\",\n  \"Please provide the widget title\": \"Bitte geben Sie den Widget-Titel an.\",\n  \"Please select a data source\": \"Bitte wählen Sie eine Datenquelle aus.\",\n  \"Please select a dimension\": \"Bitte wählen Sie eine Dimension aus.\",\n  \"Please select an icon\": \"Bitte wählen Sie ein Symbol aus.\",\n  \"Please select metric(s).\": \"Bitte wählen Sie die Kennzahl(en) aus.\",\n  \"Prev period\": \"Vorheriger Zeitraum\",\n  \"Quarter\": \"Quartal\",\n  \"Records per page\": \"Datensätze pro Seite\",\n  \"Refresh every minute\": \"Jede Minute aktualisieren\",\n  \"Rename Dashboard\": \"Dashboard umbenennen\",\n  \"Reset Layout\": \"Layout zurücksetzen\",\n  \"Reset layout back to default?\": \"Layout auf Standard zurücksetzen?\",\n  \"Same period last year\": \"Gleicher Zeitraum im Vorjahr\",\n  \"Section Title\": \"Abschnittstitel\",\n  \"Select a dimension and metrics\": \"Wählen Sie eine Dimension und Kennzahlen aus.\",\n  \"Select an attribute\": \"Wählen Sie ein Attribut aus\",\n  \"Select an operation\": \"Wählen Sie eine Operation aus\",\n  \"Select sorting metric or dimension\": \"Sortieren Sie die Metrik oder Dimension aus.\",\n  \"Select the metric color\": \"Wählen Sie die metrische Farbe aus\",\n  \"Set the current layout as the default?\": \"Das aktuelle Layout als Standard festlegen?\",\n  \"Show Date Interval\": \"Datumsintervall anzeigen\",\n  \"Sort by\": \"Sortieren nach\",\n  \"Sorting\": \"Sortierung\",\n  \"Sorting & Filtering\": \"Sortieren & Filtern\",\n  \"Stacked Bar\": \"Gestapelter Balken\",\n  \"Starts with\": \"Beginnt mit\",\n  \"Success\": \"Erfolg\",\n  \"The dashboard layout has been reset to default.\": \"Das Dashboard-Layout wurde auf die Standardeinstellungen zurückgesetzt.\",\n  \"The dashboard was successfully updated.\": \"Das Dashboard wurde erfolgreich aktualisiert.\",\n  \"The limit value must be at least 1\": \"Der Grenzwert muss mindestens 1 betragen.\",\n  \"This dashboard is now the default layout.\": \"Dieses Dashboard ist nun das Standardlayout.\",\n  \"This month\": \"Diesen Monat\",\n  \"This quarter\": \"Dieses Quartal\",\n  \"This week\": \"Diese Woche\",\n  \"This year\": \"Dieses Jahr\",\n  \"Title\": \"Titel\",\n  \"Today\": \"Heute\",\n  \"Value\": \"Wert\",\n  \"Values\": \"Werte\",\n  \"Vertical\": \"Vertikal\",\n  \"Warning\": \"Warnung\",\n  \"Week\": \"Woche\",\n  \"Year\": \"Jahr\",\n  \"Yesterday\": \"Gestern\"\n}"
  },
  {
    "path": "modules/dashboard/lang/el.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Η λειτουργία Στατιστικών Εσωτερικής Επισκεψιμότητας καταγράφει προβολές σελίδων, διευθύνσεις IP και άλλα βασικά δεδομένα ανώνυμων χρηστών στη βάση δεδομένων.\",\n  \"Internal Traffic Statistics\": \"Στατιστικά εσωτερικής επισκεψιμότητας\",\n  \"Purge the Internal Traffic Statistics data\": \"Εκκαθάριση των δεδομένων Εσωτερικών Στατιστικών Επισκεψιμότητας\",\n  \"Manage Traffic Settings and Data\": \"Διαχείριση ρυθμίσεων και δεδομένων κυκλοφορίας\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Τα εσωτερικά στατιστικά στοιχεία επισκεψιμότητας καταγράφουν προβολές σελίδων, διευθύνσεις IP και άλλα βασικά δεδομένα ανώνυμων χρηστών στη βάση δεδομένων και παρέχουν αναφορές για τον πίνακα ελέγχου. Όταν η λειτουργία είναι απενεργοποιημένη, τα δεδομένα δεν εγγράφονται στη βάση δεδομένων.\",\n  \"Traffic Statistics\": \"Στατιστικά στοιχεία επισκεψιμότητας\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Ζώνη ώρας για την καταγραφή προβολών σελίδας. Η αλλαγή της ζώνης ώρας δεν θα ενημερώσει τα υπάρχοντα δεδομένα. Εάν αλλάξετε τη ζώνη ώρας χωρίς να διαγράψετε τα υπάρχοντα δεδομένα, οι αναφορές ενδέχεται να εμφανίζουν λανθασμένες ώρες για ημέρες που έχουν καταγραφεί προηγουμένως.\",\n  \"Retention Period (Months)\": \"Περίοδος Διατήρησης (Μήνες)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Καθορίζει τη διάρκεια αποθήκευσης των δεδομένων στατιστικών επισκεψιμότητας στη βάση δεδομένων. Όταν λήξει η καθορισμένη περίοδος, τα αντίστοιχα δεδομένα διαγράφονται αυτόματα από τη βάση δεδομένων. Ορίστε την τιμή σε 0 ή κενή για να διατηρήσετε τις εγγραφές για πάντα.\",\n  \"Data Filters\": \"Φίλτρα δεδομένων\",\n  \"Exclude Bots\": \"Εξαίρεση Bots\",\n  \"Automatically ignores known bots using the detection library.\": \"Αγνοεί αυτόματα γνωστά bots χρησιμοποιώντας τη βιβλιοθήκη ανίχνευσης.\",\n  \"Exclude Administrator Roles\": \"Εξαίρεση ρόλων διαχειριστή\",\n  \"Ignores traffic from selected roles.\": \"Αγνοεί την επισκεψιμότητα από επιλεγμένους ρόλους.\",\n  \"Exclude IP Addresses\": \"Εξαίρεση διευθύνσεων IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Τα αιτήματα από αυτές τις διευθύνσεις θα αγνοηθούν στα στατιστικά στοιχεία.\",\n  \"Exclude Paths\": \"Εξαίρεση διαδρομών\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Εισαγάγετε μία διαδρομή ή μοτίβο ανά γραμμή για να αγνοήσετε τις αντίστοιχες διευθύνσεις URL.\",\n  \"Access the Dashboard\": \"Πρόσβαση στον Πίνακα Ελέγχου\",\n  \"Manage Dashboards\": \"Διαχείριση πινάκων ελέγχου\",\n  \"Dashboard\": \"Ταμπλό\",\n  \"Manage the Internal Traffic Statistics data\": \"Διαχείριση δεδομένων Στατιστικών Εσωτερικής Επισκεψιμότητας\",\n  \"Date\": \"Ημερομηνία\",\n  \"Page Path\": \"Διαδρομή σελίδας\",\n  \"Referral Domain\": \"Τομέας παραπομπής\",\n  \"Pageviews\": \"Προβολές σελίδας\",\n  \"Unique Visitors\": \"Μοναδικοί Επισκέπτες\",\n  \"Traffic Information\": \"Πληροφορίες κυκλοφορίας\",\n  \"Website Status\": \"Κατάσταση ιστότοπου\",\n  \"Core version information\": \"Πληροφορίες βασικής έκδοσης\",\n  \"System Issues\": \"Προβλήματα συστήματος\",\n  \"Event Log\": \"Αρχείο καταγραφής συμβάντων\",\n  \"Request log\": \"Αρχείο καταγραφής αιτημάτων\",\n  \"Request Log\": \"Αρχείο καταγραφής αιτημάτων\",\n  \"Website status information\": \"Πληροφορίες κατάστασης ιστότοπου\",\n  \"Add Row\": \"Προσθήκη γραμμής\",\n  \"Edit Row\": \"Επεξεργασία γραμμής\",\n  \"Edit Widget\": \"Επεξεργασία γραφικού στοιχείου\",\n  \"No Value\": \"Χωρίς αξία\",\n  \"Section\": \"Τμήμα\",\n  \"This is a text notice widget.\": \"Αυτό είναι ένα γραφικό στοιχείο ειδοποίησης κειμένου.\",\n  \"My Custom Widget\": \"Το προσαρμοσμένο γραφικό μου στοιχείο\",\n  \"Chart\": \"Διάγραμμα\",\n  \"Indicator\": \"Δείκτης\",\n  \"Table\": \"Τραπέζι\",\n  \"Text Notice\": \"Ειδοποίηση κειμένου\",\n  \"Widget Configuration\": \"Ρύθμιση παραμέτρων γραφικού στοιχείου\",\n  \"Configure the report widget\": \"Ρύθμιση παραμέτρων του γραφικού στοιχείου αναφοράς\",\n  \"Width :columns\": \"Πλάτος: στήλες\",\n  \"The widget width, a number between 1 and 10.\": \"Το πλάτος του γραφικού στοιχείου, ένας αριθμός μεταξύ 1 και 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Παρακαλώ εισάγετε το πλάτος του γραφικού στοιχείου ως αριθμό μεταξύ 1 και 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} στήλη|[2,Πληροφορίες] στήλες\",\n  \"Force new row\": \"Επιβολή νέας γραμμής\",\n  \"Put the widget in a new row.\": \"Τοποθετήστε το γραφικό στοιχείο σε μια νέα σειρά.\",\n  \"Widget title\": \"Τίτλος γραφικού στοιχείου\",\n  \"The Widget Title is required.\": \"Ο τίτλος του γραφικού στοιχείου είναι υποχρεωτικός.\",\n  \"Layout has been reset\": \"Η διάταξη έχει επαναφερθεί\",\n  \"Current layout is now the default\": \"Η τρέχουσα διάταξη είναι πλέον η προεπιλεγμένη\",\n  \"System status\": \"Κατάσταση συστήματος\",\n  \"Pending Software Updates\": \"Εκκρεμείς ενημερώσεις λογισμικού\",\n  \"Software is Up to Date\": \"Το λογισμικό είναι ενημερωμένο\",\n  \"Update\": \"Εκσυγχρονίζω\",\n  \"Some Issues Need Attention\": \"Ορισμένα ζητήματα χρειάζονται προσοχή\",\n  \"No Warnings to Display\": \"Δεν υπάρχουν προειδοποιήσεις για εμφάνιση\",\n  \"View\": \"Θέα\",\n  \"System Build\": \"Κατασκευή συστήματος\",\n  \"Online Since\": \"Διαδικτυακά από\",\n  \"Welcome\": \"Καλωσόρισμα\",\n  \"Welcome back to :app, :name.\": \"Καλώς ήρθατε πίσω στο :app, :name.\",\n  \"Welcome to :app, :name.\": \"Καλώς ορίσατε στο :app, :name.\",\n  \"This is the first time you have signed in.\": \"Αυτή είναι η πρώτη φορά που συνδέεστε.\",\n  \"Your last sign in was\": \"Η τελευταία σας σύνδεση ήταν\",\n  \"View Access Logs\": \"Προβολή αρχείων καταγραφής πρόσβασης\",\n  \"Have a great day!\": \"Να έχεις μια υπέροχη μέρα!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Δεν είναι δυνατή η εύρεση ενός πίνακα ελέγχου με το καθορισμένο slug: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Διαχείριση ρυθμίσεων στατιστικών εσωτερικής επισκεψιμότητας\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Τα Στατιστικά Εσωτερικής Επισκεψιμότητας είναι απενεργοποιημένα. Για να τα ενεργοποιήσετε, επεξεργαστείτε τη διαμόρφωση στο config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Τα Στατιστικά Εσωτερικής Επισκεψιμότητας είναι αυτήν τη στιγμή ενεργοποιημένα. Μπορείτε να προσαρμόσετε την περίοδο διατήρησης και τη ζώνη ώρας ή να απενεργοποιήσετε αυτήν τη λειτουργία, επεξεργάζοντας τις ρυθμίσεις στο config/cms.php.\",\n  \"Purging the data...\": \"Εκκαθάριση δεδομένων...\",\n  \"Purge Data\": \"Εκκαθάριση δεδομένων\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Θέλετε πραγματικά να διαγράψετε τα δεδομένα Στατιστικών Εσωτερικής Επισκεψιμότητας;\",\n  \"Data retention period\": \"Περίοδος διατήρησης δεδομένων\",\n  \"Time zone\": \"Ζώνη ώρας\",\n  \":retention month(s)\": \":μήνας(-οι) διατήρησης\",\n  \"Indefinite\": \"Αόριστος\",\n  \"Internal Traffic Statistics data purged\": \"Τα δεδομένα εσωτερικών στατιστικών επισκεψιμότητας διαγράφηκαν\",\n  \"[not set]\": \"[δεν έχει οριστεί]\",\n  \"1 day (today) if not set\": \"1 ημέρα (σήμερα) εάν δεν έχει οριστεί\",\n  \"Apply\": \"Εφαρμόζω\",\n  \"Ascending\": \"Αύξουσα\",\n  \"Attribute\": \"Ιδιότης\",\n  \"Bar\": \"Μπαρ\",\n  \"Chart type\": \"Τύπος γραφήματος\",\n  \"Color\": \"Χρώμα\",\n  \"Compare Totals\": \"Σύγκριση Συνόλων\",\n  \"Configure\": \"Ρύθμιση παραμέτρων\",\n  \"Custom\": \"Εθιμο\",\n  \"Dashboard interval\": \"Διάστημα πίνακα ελέγχου\",\n  \"Data source\": \"Πηγή δεδομένων\",\n  \"Date interval\": \"Διάστημα ημερομηνίας\",\n  \"Day\": \"Ημέρα\",\n  \"Delete\": \"Διαγράφω\",\n  \"Delete Dashboard\": \"Διαγραφή Πίνακα Ελέγχου\",\n  \"Delete row\": \"Διαγραφή σειράς\",\n  \"Descending\": \"Φθίνων\",\n  \"Dimension\": \"Διάσταση\",\n  \"Direction\": \"Κατεύθυνση\",\n  \"Disabled\": \"Ανάπηρος\",\n  \"Display\": \"Επίδειξη\",\n  \"Display [not set]\": \"Εμφάνιση [δεν έχει οριστεί]\",\n  \"Display all records\": \"Εμφάνιση όλων των εγγραφών\",\n  \"Display relative bars\": \"Εμφάνιση σχετικών γραμμών\",\n  \"Display totals\": \"Εμφάνιση συνόλων\",\n  \"Edit Dashboard\": \"Επεξεργασία πίνακα ελέγχου\",\n  \"Empty values\": \"Κενές τιμές\",\n  \"Enter a positive number\": \"Εισαγάγετε έναν θετικό αριθμό\",\n  \"Enter a positive number or leave empty to display all records.\": \"Εισαγάγετε έναν θετικό αριθμό ή αφήστε το κενό για να εμφανιστούν όλες οι εγγραφές.\",\n  \"Equal to\": \"Εφάμιλλος\",\n  \"Export Dashboard\": \"Πίνακας ελέγχου εξαγωγής\",\n  \"Extra table fields\": \"Επιπλέον πεδία πίνακα\",\n  \"Filters\": \"Φίλτρα\",\n  \"General\": \"Γενικός\",\n  \"Greater or equal to\": \"Μεγαλύτερο ή ίσο με\",\n  \"Greater than\": \"Μεγαλύτερο από\",\n  \"Hide\": \"Κρύβω\",\n  \"Horizontal\": \"Οριζόντιος\",\n  \"Icon\": \"Εικόνισμα\",\n  \"Icon Status\": \"Κατάσταση εικονιδίου\",\n  \"Important\": \"Σπουδαίος\",\n  \"Includes\": \"Περιλαμβάνει\",\n  \"Information\": \"Πληροφορίες\",\n  \"Last 30 days\": \"Τελευταίες 30 ημέρες\",\n  \"Last 7 days\": \"Τελευταίες 7 ημέρες\",\n  \"Last month\": \"Τον περασμένο μήνα\",\n  \"Leave empty to disable pagination\": \"Αφήστε κενό για να απενεργοποιήσετε την σελιδοποίηση\",\n  \"Leave empty to hide the title\": \"Αφήστε το κενό για να αποκρύψετε τον τίτλο\",\n  \"Less or equal to\": \"Μικρότερο ή ίσο με\",\n  \"Less than\": \"Λιγότερο από\",\n  \"Limit\": \"Οριο\",\n  \"Line\": \"Γραμμή\",\n  \"Link Text\": \"Κείμενο συνδέσμου\",\n  \"Link URL\": \"URL συνδέσμου\",\n  \"Make Default\": \"Ορισμός προεπιλογής\",\n  \"Metric\": \"Μετρικός\",\n  \"Metrics\": \"Μετρήσεις\",\n  \"Month\": \"Μήνας\",\n  \"Notice text\": \"Κείμενο ειδοποίησης\",\n  \"Number of days\": \"Αριθμός ημερών\",\n  \"One of\": \"Ένα από\",\n  \"One value per line\": \"Μία τιμή ανά γραμμή\",\n  \"Operation\": \"Λειτουργία\",\n  \"Order\": \"Παραγγελία\",\n  \"Past hour\": \"Τελευταία ώρα\",\n  \"Past X days\": \"Τελευταίες X ημέρες\",\n  \"Please provide the widget title\": \"Παρακαλώ δώστε τον τίτλο του γραφικού στοιχείου\",\n  \"Please select a data source\": \"Επιλέξτε μια πηγή δεδομένων\",\n  \"Please select a dimension\": \"Επιλέξτε μια διάσταση\",\n  \"Please select an icon\": \"Επιλέξτε ένα εικονίδιο\",\n  \"Please select metric(s).\": \"Επιλέξτε μετρήσεις.\",\n  \"Prev period\": \"Προηγούμενη περίοδος\",\n  \"Quarter\": \"Συνοικία\",\n  \"Records per page\": \"Εγγραφές ανά σελίδα\",\n  \"Refresh every minute\": \"Ανανέωση κάθε λεπτό\",\n  \"Rename Dashboard\": \"Μετονομασία Πίνακα Ελέγχου\",\n  \"Reset Layout\": \"Επαναφορά διάταξης\",\n  \"Reset layout back to default?\": \"Επαναφορά διάταξης στην προεπιλεγμένη τιμή;\",\n  \"Same period last year\": \"Ίδια περίοδος πέρυσι\",\n  \"Section Title\": \"Τίτλος ενότητας\",\n  \"Select a dimension and metrics\": \"Επιλέξτε μια ιδιότητα και μετρήσεις\",\n  \"Select an attribute\": \"Επιλέξτε ένα χαρακτηριστικό\",\n  \"Select an operation\": \"Επιλέξτε μια λειτουργία\",\n  \"Select sorting metric or dimension\": \"Επιλέξτε μέτρηση ή ιδιότητα ταξινόμησης\",\n  \"Select the metric color\": \"Επιλέξτε το χρώμα της μέτρησης\",\n  \"Set the current layout as the default?\": \"Ορισμός της τρέχουσας διάταξης ως προεπιλογής;\",\n  \"Show Date Interval\": \"Εμφάνιση διαστήματος ημερομηνίας\",\n  \"Sort by\": \"Ταξινόμηση κατά\",\n  \"Sorting\": \"Ταξινόμηση\",\n  \"Sorting & Filtering\": \"Ταξινόμηση & Φιλτράρισμα\",\n  \"Stacked Bar\": \"Στοιβαγμένη ράβδος\",\n  \"Starts with\": \"Ξεκινά με\",\n  \"Success\": \"Επιτυχία\",\n  \"The dashboard layout has been reset to default.\": \"Η διάταξη του πίνακα ελέγχου έχει επανέλθει στις προεπιλεγμένες ρυθμίσεις.\",\n  \"The dashboard was successfully updated.\": \"Ο πίνακας ελέγχου ενημερώθηκε με επιτυχία.\",\n  \"The limit value must be at least 1\": \"Η οριακή τιμή πρέπει να είναι τουλάχιστον 1\",\n  \"This dashboard is now the default layout.\": \"Αυτός ο πίνακας ελέγχου είναι πλέον η προεπιλεγμένη διάταξη.\",\n  \"This month\": \"Αυτόν τον μήνα\",\n  \"This quarter\": \"Αυτό το τρίμηνο\",\n  \"This week\": \"Αυτή την εβδομάδα\",\n  \"This year\": \"Φέτος\",\n  \"Title\": \"Τίτλος\",\n  \"Today\": \"Σήμερα\",\n  \"Value\": \"Αξία\",\n  \"Values\": \"Αξίες\",\n  \"Vertical\": \"Κατακόρυφος\",\n  \"Warning\": \"Προειδοποίηση\",\n  \"Week\": \"Εβδομάδα\",\n  \"Year\": \"Ετος\",\n  \"Yesterday\": \"Εχθές\"\n}"
  },
  {
    "path": "modules/dashboard/lang/en/client-export.php",
    "content": "<?php return [\n    \"[not set]\",\n    \"1 day (today) if not set\",\n    \"Apply\",\n    \"Ascending\",\n    \"Attribute\",\n    \"Bar\",\n    \"Chart\",\n    \"Chart type\",\n    \"Color\",\n    \"Compare Totals\",\n    \"Configure\",\n    \"Custom\",\n    \"Dashboard interval\",\n    \"Data source\",\n    \"Date interval\",\n    \"Day\",\n    \"Delete\",\n    \"Delete Dashboard\",\n    \"Delete row\",\n    \"Descending\",\n    \"Dimension\",\n    \"Direction\",\n    \"Disabled\",\n    \"Display\",\n    \"Display [not set]\",\n    \"Display all records\",\n    \"Display relative bars\",\n    \"Display totals\",\n    \"Edit Dashboard\",\n    \"Empty values\",\n    \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\",\n    \"Export Dashboard\",\n    \"Extra table fields\",\n    \"Filters\",\n    \"General\",\n    \"Greater or equal to\",\n    \"Greater than\",\n    \"Hide\",\n    \"Horizontal\",\n    \"Icon\",\n    \"Icon Status\",\n    \"Important\",\n    \"Includes\",\n    \"Indicator\",\n    \"Information\",\n    \"Last 30 days\",\n    \"Last 7 days\",\n    \"Last month\",\n    \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\",\n    \"Less or equal to\",\n    \"Less than\",\n    \"Limit\",\n    \"Line\",\n    \"Link Text\",\n    \"Link URL\",\n    \"Make Default\",\n    \"Manage Dashboards\",\n    \"Metric\",\n    \"Metrics\",\n    \"Month\",\n    \"My Custom Widget\",\n    \"No Value\",\n    \"Notice text\",\n    \"Number of days\",\n    \"One of\",\n    \"One value per line\",\n    \"Operation\",\n    \"Order\",\n    \"Past hour\",\n    \"Past X days\",\n    \"Please provide the widget title\",\n    \"Please select a data source\",\n    \"Please select a dimension\",\n    \"Please select an icon\",\n    \"Please select metric(s).\",\n    \"Prev period\",\n    \"Quarter\",\n    \"Records per page\",\n    \"Refresh every minute\",\n    \"Rename Dashboard\",\n    \"Reset Layout\",\n    \"Reset layout back to default?\",\n    \"Same period last year\",\n    \"Section\",\n    \"Section Title\",\n    \"Select a dimension and metrics\",\n    \"Select an attribute\",\n    \"Select an operation\",\n    \"Select sorting metric or dimension\",\n    \"Select the metric color\",\n    \"Set the current layout as the default?\",\n    \"Show Date Interval\",\n    \"Sort by\",\n    \"Sorting\",\n    \"Sorting & Filtering\",\n    \"Stacked Bar\",\n    \"Starts with\",\n    \"Success\",\n    \"Table\",\n    \"Text Notice\",\n    \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\",\n    \"This month\",\n    \"This quarter\",\n    \"This week\",\n    \"This year\",\n    \"Title\",\n    \"Today\",\n    \"Value\",\n    \"Values\",\n    \"Vertical\",\n    \"Warning\",\n    \"Week\",\n    \"Year\",\n    \"Yesterday\",\n];\n"
  },
  {
    "path": "modules/dashboard/lang/en.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\",\n  \"Internal Traffic Statistics\": \"Internal Traffic Statistics\",\n  \"Purge the Internal Traffic Statistics data\": \"Purge the Internal Traffic Statistics data\",\n  \"Manage Traffic Settings and Data\": \"Manage Traffic Settings and Data\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\",\n  \"Traffic Statistics\": \"Traffic Statistics\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\",\n  \"Retention Period (Months)\": \"Retention Period (Months)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\",\n  \"Data Filters\": \"Data Filters\",\n  \"Exclude Bots\": \"Exclude Bots\",\n  \"Automatically ignores known bots using the detection library.\": \"Automatically ignores known bots using the detection library.\",\n  \"Exclude Administrator Roles\": \"Exclude Administrator Roles\",\n  \"Ignores traffic from selected roles.\": \"Ignores traffic from selected roles.\",\n  \"Exclude IP Addresses\": \"Exclude IP Addresses\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Requests from these addresses will be ignored in statistics.\",\n  \"Exclude Paths\": \"Exclude Paths\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Enter one path or pattern per row to ignore matching URLs.\",\n  \"Access the Dashboard\": \"Access the Dashboard\",\n  \"Manage Dashboards\": \"Manage Dashboards\",\n  \"Dashboard\": \"Dashboard\",\n  \"Manage the Internal Traffic Statistics data\": \"Manage the Internal Traffic Statistics data\",\n  \"Date\": \"Date\",\n  \"Page Path\": \"Page Path\",\n  \"Referral Domain\": \"Referral Domain\",\n  \"Pageviews\": \"Pageviews\",\n  \"Unique Visitors\": \"Unique Visitors\",\n  \"Traffic Information\": \"Traffic Information\",\n  \"Website Status\": \"Website Status\",\n  \"Core version information\": \"Core version information\",\n  \"System Issues\": \"System Issues\",\n  \"Event Log\": \"Event Log\",\n  \"Request log\": \"Request log\",\n  \"Request Log\": \"Request Log\",\n  \"Website status information\": \"Website status information\",\n  \"Add Row\": \"Add Row\",\n  \"Edit Row\": \"Edit Row\",\n  \"Edit Widget\": \"Edit Widget\",\n  \"No Value\": \"No Value\",\n  \"Section\": \"Section\",\n  \"This is a text notice widget.\": \"This is a text notice widget.\",\n  \"My Custom Widget\": \"My Custom Widget\",\n  \"Chart\": \"Chart\",\n  \"Indicator\": \"Indicator\",\n  \"Table\": \"Table\",\n  \"Text Notice\": \"Text Notice\",\n  \"Widget Configuration\": \"Widget Configuration\",\n  \"Configure the report widget\": \"Configure the report widget\",\n  \"Width :columns\": \"Width :columns\",\n  \"The widget width, a number between 1 and 10.\": \"The widget width, a number between 1 and 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Please enter the widget width as a number between 1 and 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} column|[2,Inf] columns\",\n  \"Force new row\": \"Force new row\",\n  \"Put the widget in a new row.\": \"Put the widget in a new row.\",\n  \"Widget title\": \"Widget title\",\n  \"The Widget Title is required.\": \"The Widget Title is required.\",\n  \"Layout has been reset\": \"Layout has been reset\",\n  \"Current layout is now the default\": \"Current layout is now the default\",\n  \"System status\": \"System status\",\n  \"Pending Software Updates\": \"Pending Software Updates\",\n  \"Software is Up to Date\": \"Software is Up to Date\",\n  \"Update\": \"Update\",\n  \"Some Issues Need Attention\": \"Some Issues Need Attention\",\n  \"No Warnings to Display\": \"No Warnings to Display\",\n  \"View\": \"View\",\n  \"System Build\": \"System Build\",\n  \"Online Since\": \"Online Since\",\n  \"Welcome\": \"Welcome\",\n  \"Welcome back to :app, :name.\": \"Welcome back to :app, :name.\",\n  \"Welcome to :app, :name.\": \"Welcome to :app, :name.\",\n  \"This is the first time you have signed in.\": \"This is the first time you have signed in.\",\n  \"Your last sign in was\": \"Your last sign in was\",\n  \"View Access Logs\": \"View Access Logs\",\n  \"Have a great day!\": \"Have a great day!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Manage Internal Traffic Statistics settings\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\",\n  \"Purging the data...\": \"Purging the data...\",\n  \"Purge Data\": \"Purge Data\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Do you really want to purge the Internal Traffic Statistics data?\",\n  \"Data retention period\": \"Data retention period\",\n  \"Time zone\": \"Time zone\",\n  \":retention month(s)\": \":retention month(s)\",\n  \"Indefinite\": \"Indefinite\",\n  \"Internal Traffic Statistics data purged\": \"Internal Traffic Statistics data purged\",\n  \"[not set]\": \"[not set]\",\n  \"1 day (today) if not set\": \"1 day (today) if not set\",\n  \"Apply\": \"Apply\",\n  \"Ascending\": \"Ascending\",\n  \"Attribute\": \"Attribute\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Chart type\",\n  \"Color\": \"Color\",\n  \"Compare Totals\": \"Compare Totals\",\n  \"Configure\": \"Configure\",\n  \"Custom\": \"Custom\",\n  \"Dashboard interval\": \"Dashboard interval\",\n  \"Data source\": \"Data source\",\n  \"Date interval\": \"Date interval\",\n  \"Day\": \"Day\",\n  \"Delete\": \"Delete\",\n  \"Delete Dashboard\": \"Delete Dashboard\",\n  \"Delete row\": \"Delete row\",\n  \"Descending\": \"Descending\",\n  \"Dimension\": \"Dimension\",\n  \"Direction\": \"Direction\",\n  \"Disabled\": \"Disabled\",\n  \"Display\": \"Display\",\n  \"Display [not set]\": \"Display [not set]\",\n  \"Display all records\": \"Display all records\",\n  \"Display relative bars\": \"Display relative bars\",\n  \"Display totals\": \"Display totals\",\n  \"Edit Dashboard\": \"Edit Dashboard\",\n  \"Empty values\": \"Empty values\",\n  \"Enter a positive number\": \"Enter a positive number\",\n  \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n  \"Equal to\": \"Equal to\",\n  \"Export Dashboard\": \"Export Dashboard\",\n  \"Extra table fields\": \"Extra table fields\",\n  \"Filters\": \"Filters\",\n  \"General\": \"General\",\n  \"Greater or equal to\": \"Greater or equal to\",\n  \"Greater than\": \"Greater than\",\n  \"Hide\": \"Hide\",\n  \"Horizontal\": \"Horizontal\",\n  \"Icon\": \"Icon\",\n  \"Icon Status\": \"Icon Status\",\n  \"Important\": \"Important\",\n  \"Includes\": \"Includes\",\n  \"Information\": \"Information\",\n  \"Last 30 days\": \"Last 30 days\",\n  \"Last 7 days\": \"Last 7 days\",\n  \"Last month\": \"Last month\",\n  \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n  \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n  \"Less or equal to\": \"Less or equal to\",\n  \"Less than\": \"Less than\",\n  \"Limit\": \"Limit\",\n  \"Line\": \"Line\",\n  \"Link Text\": \"Link Text\",\n  \"Link URL\": \"Link URL\",\n  \"Make Default\": \"Make Default\",\n  \"Metric\": \"Metric\",\n  \"Metrics\": \"Metrics\",\n  \"Month\": \"Month\",\n  \"Notice text\": \"Notice text\",\n  \"Number of days\": \"Number of days\",\n  \"One of\": \"One of\",\n  \"One value per line\": \"One value per line\",\n  \"Operation\": \"Operation\",\n  \"Order\": \"Order\",\n  \"Past hour\": \"Past hour\",\n  \"Past X days\": \"Past X days\",\n  \"Please provide the widget title\": \"Please provide the widget title\",\n  \"Please select a data source\": \"Please select a data source\",\n  \"Please select a dimension\": \"Please select a dimension\",\n  \"Please select an icon\": \"Please select an icon\",\n  \"Please select metric(s).\": \"Please select metric(s).\",\n  \"Prev period\": \"Prev period\",\n  \"Quarter\": \"Quarter\",\n  \"Records per page\": \"Records per page\",\n  \"Refresh every minute\": \"Refresh every minute\",\n  \"Rename Dashboard\": \"Rename Dashboard\",\n  \"Reset Layout\": \"Reset Layout\",\n  \"Reset layout back to default?\": \"Reset layout back to default?\",\n  \"Same period last year\": \"Same period last year\",\n  \"Section Title\": \"Section Title\",\n  \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n  \"Select an attribute\": \"Select an attribute\",\n  \"Select an operation\": \"Select an operation\",\n  \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n  \"Select the metric color\": \"Select the metric color\",\n  \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n  \"Show Date Interval\": \"Show Date Interval\",\n  \"Sort by\": \"Sort by\",\n  \"Sorting\": \"Sorting\",\n  \"Sorting & Filtering\": \"Sorting & Filtering\",\n  \"Stacked Bar\": \"Stacked Bar\",\n  \"Starts with\": \"Starts with\",\n  \"Success\": \"Success\",\n  \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n  \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n  \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n  \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n  \"This month\": \"This month\",\n  \"This quarter\": \"This quarter\",\n  \"This week\": \"This week\",\n  \"This year\": \"This year\",\n  \"Title\": \"Title\",\n  \"Today\": \"Today\",\n  \"Value\": \"Value\",\n  \"Values\": \"Values\",\n  \"Vertical\": \"Vertical\",\n  \"Warning\": \"Warning\",\n  \"Week\": \"Week\",\n  \"Year\": \"Year\",\n  \"Yesterday\": \"Yesterday\"\n}\n"
  },
  {
    "path": "modules/dashboard/lang/es.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"La función de estadísticas de tráfico interno registra las páginas vistas, las direcciones IP y otros datos básicos de usuario anónimos en la base de datos.\",\n  \"Internal Traffic Statistics\": \"Estadísticas de tráfico interno\",\n  \"Purge the Internal Traffic Statistics data\": \"Eliminar los datos de estadísticas de tráfico interno\",\n  \"Manage Traffic Settings and Data\": \"Gestionar la configuración de tráfico y los datos\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Las estadísticas de tráfico interno registran las páginas vistas, las direcciones IP y otros datos básicos de usuario anónimos en la base de datos y generan informes para el panel de control. Cuando esta función está desactivada, los datos no se escriben en la base de datos.\",\n  \"Traffic Statistics\": \"Estadísticas de tráfico\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Zona horaria para registrar las visitas a la página. Cambiar la zona horaria no actualizará los datos existentes. Si cambia la zona horaria sin borrar los datos existentes, los informes podrían mostrar horas incorrectas para los días registrados anteriormente.\",\n  \"Retention Period (Months)\": \"Periodo de retención (meses)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Determina la duración durante la cual se almacenarán los datos estadísticos de tráfico en la base de datos. Cuando finaliza el período establecido, los datos correspondientes se eliminan automáticamente de la base de datos. Si se establece en 0 o se deja vacío, los registros se conservarán indefinidamente.\",\n  \"Data Filters\": \"Filtros de datos\",\n  \"Exclude Bots\": \"Excluir bots\",\n  \"Automatically ignores known bots using the detection library.\": \"Ignora automáticamente los bots conocidos utilizando la biblioteca de detección.\",\n  \"Exclude Administrator Roles\": \"Excluir roles de administrador\",\n  \"Ignores traffic from selected roles.\": \"Ignora el tráfico procedente de los roles seleccionados.\",\n  \"Exclude IP Addresses\": \"Excluir direcciones IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Las solicitudes procedentes de estas direcciones se ignorarán en las estadísticas.\",\n  \"Exclude Paths\": \"Excluir rutas\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Introduzca una ruta o patrón por fila para ignorar las URL coincidentes.\",\n  \"Access the Dashboard\": \"Acceder al panel de control\",\n  \"Manage Dashboards\": \"Administrar paneles de control\",\n  \"Dashboard\": \"Panel\",\n  \"Manage the Internal Traffic Statistics data\": \"Gestionar los datos de estadísticas de tráfico interno\",\n  \"Date\": \"Fecha\",\n  \"Page Path\": \"Ruta de la página\",\n  \"Referral Domain\": \"Dominio de referencia\",\n  \"Pageviews\": \"Páginas vistas\",\n  \"Unique Visitors\": \"Visitantes únicos\",\n  \"Traffic Information\": \"Información de tráfico\",\n  \"Website Status\": \"Estado del sitio web\",\n  \"Core version information\": \"Información de la versión principal\",\n  \"System Issues\": \"Problemas del sistema\",\n  \"Event Log\": \"Registro de eventos\",\n  \"Request log\": \"Registro de solicitudes\",\n  \"Request Log\": \"Registro de solicitudes\",\n  \"Website status information\": \"Información sobre el estado del sitio web\",\n  \"Add Row\": \"Agregar fila\",\n  \"Edit Row\": \"Editar fila\",\n  \"Edit Widget\": \"Editar widget\",\n  \"No Value\": \"Sin valor\",\n  \"Section\": \"Sección\",\n  \"This is a text notice widget.\": \"Este es un widget de aviso de texto.\",\n  \"My Custom Widget\": \"Mi widget personalizado\",\n  \"Chart\": \"Cuadro\",\n  \"Indicator\": \"Indicador\",\n  \"Table\": \"Mesa\",\n  \"Text Notice\": \"Aviso de texto\",\n  \"Widget Configuration\": \"Configuración del widget\",\n  \"Configure the report widget\": \"Configurar el widget de informe\",\n  \"Width :columns\": \"Ancho: columnas\",\n  \"The widget width, a number between 1 and 10.\": \"El ancho del widget, un número entre 1 y 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Introduzca el ancho del widget como un número entre 1 y 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} columna|[2,Inf] columnas\",\n  \"Force new row\": \"Forzar nueva fila\",\n  \"Put the widget in a new row.\": \"Coloque el widget en una nueva fila.\",\n  \"Widget title\": \"Título del widget\",\n  \"The Widget Title is required.\": \"El título del widget es obligatorio.\",\n  \"Layout has been reset\": \"El diseño se ha restablecido\",\n  \"Current layout is now the default\": \"El diseño actual es ahora el predeterminado\",\n  \"System status\": \"Estado del sistema\",\n  \"Pending Software Updates\": \"Actualizaciones de software pendientes\",\n  \"Software is Up to Date\": \"El software está actualizado\",\n  \"Update\": \"Actualizar\",\n  \"Some Issues Need Attention\": \"Algunos problemas necesitan atención\",\n  \"No Warnings to Display\": \"No hay advertencias para mostrar\",\n  \"View\": \"Vista\",\n  \"System Build\": \"Compilación del sistema\",\n  \"Online Since\": \"En línea desde\",\n  \"Welcome\": \"Bienvenido\",\n  \"Welcome back to :app, :name.\": \"Bienvenido de nuevo a :app, :name.\",\n  \"Welcome to :app, :name.\": \"Bienvenido a :app, :name.\",\n  \"This is the first time you have signed in.\": \"Esta es la primera vez que inicias sesión.\",\n  \"Your last sign in was\": \"Su último inicio de sesión fue\",\n  \"View Access Logs\": \"Ver registros de acceso\",\n  \"Have a great day!\": \"¡Qué tengas un lindo día!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"No se puede encontrar un tablero con el slug especificado: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Administrar la configuración de las estadísticas de tráfico interno\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Las estadísticas de tráfico interno están deshabilitadas. Para habilitarlas, edite la configuración en config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Las estadísticas de tráfico interno están habilitadas. Puede ajustar el periodo de retención y la zona horaria, o desactivar esta función, editando la configuración en config/cms.php.\",\n  \"Purging the data...\": \"Purgando los datos...\",\n  \"Purge Data\": \"Purgar datos\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"¿Realmente desea purgar los datos de estadísticas de tráfico interno?\",\n  \"Data retention period\": \"Periodo de conservación de datos\",\n  \"Time zone\": \"Huso horario\",\n  \":retention month(s)\": \":mes(es) de retención\",\n  \"Indefinite\": \"Indefinido\",\n  \"Internal Traffic Statistics data purged\": \"Datos de estadísticas de tráfico interno depurados\",\n  \"[not set]\": \"[no establecido]\",\n  \"1 day (today) if not set\": \"1 día (hoy) si no se establece\",\n  \"Apply\": \"Aplicar\",\n  \"Ascending\": \"Ascendente\",\n  \"Attribute\": \"Atributo\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Tipo de gráfico\",\n  \"Color\": \"Color\",\n  \"Compare Totals\": \"Comparar totales\",\n  \"Configure\": \"Configurar\",\n  \"Custom\": \"Costumbre\",\n  \"Dashboard interval\": \"Intervalo del tablero de instrumentos\",\n  \"Data source\": \"Fuente de datos\",\n  \"Date interval\": \"Intervalo de fechas\",\n  \"Day\": \"Día\",\n  \"Delete\": \"Borrar\",\n  \"Delete Dashboard\": \"Eliminar el panel de control\",\n  \"Delete row\": \"Eliminar fila\",\n  \"Descending\": \"Descendiendo\",\n  \"Dimension\": \"Dimensión\",\n  \"Direction\": \"Dirección\",\n  \"Disabled\": \"Desactivado\",\n  \"Display\": \"Mostrar\",\n  \"Display [not set]\": \"Pantalla [no establecida]\",\n  \"Display all records\": \"Mostrar todos los registros\",\n  \"Display relative bars\": \"Mostrar barras relativas\",\n  \"Display totals\": \"Mostrar totales\",\n  \"Edit Dashboard\": \"Editar el panel de control\",\n  \"Empty values\": \"Valores vacíos\",\n  \"Enter a positive number\": \"Introduzca un número positivo\",\n  \"Enter a positive number or leave empty to display all records.\": \"Introduzca un número positivo o déjelo vacío para mostrar todos los registros.\",\n  \"Equal to\": \"Igual a\",\n  \"Export Dashboard\": \"Panel de exportación\",\n  \"Extra table fields\": \"Campos de tabla adicionales\",\n  \"Filters\": \"Filtros\",\n  \"General\": \"General\",\n  \"Greater or equal to\": \"Mayor o igual a\",\n  \"Greater than\": \"Más que\",\n  \"Hide\": \"Esconder\",\n  \"Horizontal\": \"Horizontal\",\n  \"Icon\": \"Icono\",\n  \"Icon Status\": \"Estado del icono\",\n  \"Important\": \"Importante\",\n  \"Includes\": \"Incluye\",\n  \"Information\": \"Información\",\n  \"Last 30 days\": \"Últimos 30 días\",\n  \"Last 7 days\": \"Últimos 7 días\",\n  \"Last month\": \"Mes pasado\",\n  \"Leave empty to disable pagination\": \"Déjelo vacío para deshabilitar la paginación\",\n  \"Leave empty to hide the title\": \"Déjelo vacío para ocultar el título\",\n  \"Less or equal to\": \"Menor o igual a\",\n  \"Less than\": \"Menos que\",\n  \"Limit\": \"Límite\",\n  \"Line\": \"Línea\",\n  \"Link Text\": \"Texto del enlace\",\n  \"Link URL\": \"URL del enlace\",\n  \"Make Default\": \"Establecer como predeterminado\",\n  \"Metric\": \"Métrico\",\n  \"Metrics\": \"Métrica\",\n  \"Month\": \"Mes\",\n  \"Notice text\": \"Texto del aviso\",\n  \"Number of days\": \"Número de días\",\n  \"One of\": \"Uno de\",\n  \"One value per line\": \"Un valor por línea\",\n  \"Operation\": \"Operación\",\n  \"Order\": \"Orden\",\n  \"Past hour\": \"Pasada la hora\",\n  \"Past X days\": \"Últimos X días\",\n  \"Please provide the widget title\": \"Proporcione el título del widget\",\n  \"Please select a data source\": \"Por favor seleccione una fuente de datos\",\n  \"Please select a dimension\": \"Por favor seleccione una dimensión\",\n  \"Please select an icon\": \"Por favor seleccione un icono\",\n  \"Please select metric(s).\": \"Seleccione la(s) métrica(s).\",\n  \"Prev period\": \"Periodo anterior\",\n  \"Quarter\": \"Cuarto\",\n  \"Records per page\": \"Registros por página\",\n  \"Refresh every minute\": \"Actualizar cada minuto\",\n  \"Rename Dashboard\": \"Cambiar el nombre del panel\",\n  \"Reset Layout\": \"Restablecer diseño\",\n  \"Reset layout back to default?\": \"¿Restablecer el diseño a los valores predeterminados?\",\n  \"Same period last year\": \"Mismo período del año pasado\",\n  \"Section Title\": \"Título de la sección\",\n  \"Select a dimension and metrics\": \"Seleccione una dimensión y métricas\",\n  \"Select an attribute\": \"Seleccione un atributo\",\n  \"Select an operation\": \"Seleccione una operación\",\n  \"Select sorting metric or dimension\": \"Seleccionar métrica o dimensión de ordenación\",\n  \"Select the metric color\": \"Seleccione el color métrico\",\n  \"Set the current layout as the default?\": \"¿Establecer el diseño actual como predeterminado?\",\n  \"Show Date Interval\": \"Mostrar intervalo de fecha\",\n  \"Sort by\": \"Ordenar por\",\n  \"Sorting\": \"Clasificación\",\n  \"Sorting & Filtering\": \"Ordenar y filtrar\",\n  \"Stacked Bar\": \"Barra apilada\",\n  \"Starts with\": \"Comienza con\",\n  \"Success\": \"Éxito\",\n  \"The dashboard layout has been reset to default.\": \"El diseño del tablero se ha restablecido a los valores predeterminados.\",\n  \"The dashboard was successfully updated.\": \"El panel de control se actualizó exitosamente.\",\n  \"The limit value must be at least 1\": \"El valor límite debe ser al menos 1\",\n  \"This dashboard is now the default layout.\": \"Este panel es ahora el diseño predeterminado.\",\n  \"This month\": \"Este mes\",\n  \"This quarter\": \"Este trimestre\",\n  \"This week\": \"Esta semana\",\n  \"This year\": \"Este año\",\n  \"Title\": \"Título\",\n  \"Today\": \"Hoy\",\n  \"Value\": \"Valor\",\n  \"Values\": \"Valores\",\n  \"Vertical\": \"Vertical\",\n  \"Warning\": \"Advertencia\",\n  \"Week\": \"Semana\",\n  \"Year\": \"Año\",\n  \"Yesterday\": \"Ayer\"\n}"
  },
  {
    "path": "modules/dashboard/lang/et.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Sisemise liikluse statistika funktsioon logib andmebaasi lehevaatamisi, IP-aadresse ja muid anonüümseid kasutajaandmeid.\",\n  \"Internal Traffic Statistics\": \"Sisemine liiklusstatistika\",\n  \"Purge the Internal Traffic Statistics data\": \"Sisemise liiklusstatistika andmete kustutamine\",\n  \"Manage Traffic Settings and Data\": \"Liikluse seadete ja andmete haldamine\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Sisemine liiklusstatistika logib lehevaatamisi, IP-aadresse ja muid anonüümseid kasutajaandmeid andmebaasi ning pakub armatuurlauale aruandeid. Kui funktsioon on keelatud, siis andmeid andmebaasi ei kirjutata.\",\n  \"Traffic Statistics\": \"Liiklusstatistika\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Lehevaatamiste logimise ajavöönd. Ajavööndi muutmine ei värskenda olemasolevaid andmeid. Kui muudate ajavööndit olemasolevaid andmeid kustutamata, võivad aruanded kuvada eelnevalt logitud päevade valesid kellaaegu.\",\n  \"Retention Period (Months)\": \"Säilitusperiood (kuudes)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Määrab liiklusstatistika andmete andmebaasis säilitamise aja. Kui määratud periood möödub, kustutatakse vastavad andmed andmebaasist automaatselt. Kirjete igaveseks säilitamiseks määrake väärtuseks 0 või tühjendage väli.\",\n  \"Data Filters\": \"Andmefiltrid\",\n  \"Exclude Bots\": \"Välista robotid\",\n  \"Automatically ignores known bots using the detection library.\": \"Ignoreerib automaatselt teadaolevaid roboteid, kasutades tuvastusteegi.\",\n  \"Exclude Administrator Roles\": \"Administraatori rollide välistamine\",\n  \"Ignores traffic from selected roles.\": \"Ignoreerib valitud rollide liiklust.\",\n  \"Exclude IP Addresses\": \"IP-aadresside välistamine\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Nendelt aadressidelt saabunud päringuid statistikas ignoreeritakse.\",\n  \"Exclude Paths\": \"Välista teed\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Sisestage iga rea kohta üks tee või muster, et ignoreerida vastavaid URL-e.\",\n  \"Access the Dashboard\": \"Juurdepääs armatuurlauale\",\n  \"Manage Dashboards\": \"Armatuurlaudade haldamine\",\n  \"Dashboard\": \"Armatuurlaud\",\n  \"Manage the Internal Traffic Statistics data\": \"Sisemise liiklusstatistika andmete haldamine\",\n  \"Date\": \"Kuupäev\",\n  \"Page Path\": \"Lehe tee\",\n  \"Referral Domain\": \"Soovitusdomeen\",\n  \"Pageviews\": \"Lehevaatamisi\",\n  \"Unique Visitors\": \"Unikaalsed külastajad\",\n  \"Traffic Information\": \"Liiklusteave\",\n  \"Website Status\": \"Veebisaidi olek\",\n  \"Core version information\": \"Põhiversiooni teave\",\n  \"System Issues\": \"Süsteemiprobleemid\",\n  \"Event Log\": \"Sündmuste logi\",\n  \"Request log\": \"Päringute logi\",\n  \"Request Log\": \"Päringute logi\",\n  \"Website status information\": \"Veebisaidi oleku teave\",\n  \"Add Row\": \"Lisa rida\",\n  \"Edit Row\": \"Redigeeri rida\",\n  \"Edit Widget\": \"Vidina muutmine\",\n  \"No Value\": \"Väärtuseta\",\n  \"Section\": \"Jaotis\",\n  \"This is a text notice widget.\": \"See on tekstiteadete vidin.\",\n  \"My Custom Widget\": \"Minu kohandatud vidin\",\n  \"Chart\": \"Diagramm\",\n  \"Indicator\": \"Indikaator\",\n  \"Table\": \"Tabel\",\n  \"Text Notice\": \"Tekstiteade\",\n  \"Widget Configuration\": \"Vidina konfiguratsioon\",\n  \"Configure the report widget\": \"Aruande vidina seadistamine\",\n  \"Width :columns\": \"Laius: veerud\",\n  \"The widget width, a number between 1 and 10.\": \"Vidina laius, arv vahemikus 1 kuni 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Palun sisesta vidina laius numbrina vahemikus 1 kuni 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} veerg|[2,Inf] veerud\",\n  \"Force new row\": \"Sunni uus rida\",\n  \"Put the widget in a new row.\": \"Pane vidin uude ritta.\",\n  \"Widget title\": \"Vidina pealkiri\",\n  \"The Widget Title is required.\": \"Vidina pealkiri on kohustuslik.\",\n  \"Layout has been reset\": \"Paigutus on lähtestatud\",\n  \"Current layout is now the default\": \"Praegune paigutus on nüüd vaikimisi\",\n  \"System status\": \"Süsteemi olek\",\n  \"Pending Software Updates\": \"Ootel tarkvarauuendused\",\n  \"Software is Up to Date\": \"Tarkvara on ajakohane\",\n  \"Update\": \"Värskendus\",\n  \"Some Issues Need Attention\": \"Mõned probleemid vajavad tähelepanu\",\n  \"No Warnings to Display\": \"Hoiatusi pole kuvada\",\n  \"View\": \"Vaade\",\n  \"System Build\": \"Süsteemi loomine\",\n  \"Online Since\": \"Veebis alates\",\n  \"Welcome\": \"Tere tulemast\",\n  \"Welcome back to :app, :name.\": \"Tere tulemast tagasi :app, :name'i.\",\n  \"Welcome to :app, :name.\": \"Tere tulemast :app, :name'i.\",\n  \"This is the first time you have signed in.\": \"See on teie esimene sisselogimine.\",\n  \"Your last sign in was\": \"Teie viimane sisselogimine oli\",\n  \"View Access Logs\": \"Juurdepääsulogide vaatamine\",\n  \"Have a great day!\": \"Ilusat päeva!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Määratud plokiahelaga \\\":slug\\\" ei leitud armatuurlauda.\",\n  \"Manage Internal Traffic Statistics settings\": \"Sisemise liiklusstatistika sätete haldamine\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Sisemise liikluse statistika on keelatud. Selle lubamiseks muutke konfiguratsiooni failis config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Sisemise liikluse statistika on hetkel lubatud. Saate säilitusperioodi ja ajavööndit muuta või selle funktsiooni keelata, muutes sätteid failis config/cms.php.\",\n  \"Purging the data...\": \"Andmete kustutamine...\",\n  \"Purge Data\": \"Andmete kustutamine\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Kas sa tõesti tahad sisemise liiklusstatistika andmed kustutada?\",\n  \"Data retention period\": \"Andmete säilitamise periood\",\n  \"Time zone\": \"Ajavöönd\",\n  \":retention month(s)\": \"säilitamiskuu(d)\",\n  \"Indefinite\": \"Määramata\",\n  \"Internal Traffic Statistics data purged\": \"Sisemise liikluse statistika andmed kustutatud\",\n  \"[not set]\": \"[pole määratud]\",\n  \"1 day (today) if not set\": \"1 päev (täna), kui pole määratud\",\n  \"Apply\": \"Kandideeri\",\n  \"Ascending\": \"Kasvav\",\n  \"Attribute\": \"Atribuut\",\n  \"Bar\": \"Baar\",\n  \"Chart type\": \"Diagrammi tüüp\",\n  \"Color\": \"Värv\",\n  \"Compare Totals\": \"Võrdle kogusummasid\",\n  \"Configure\": \"Konfigureeri\",\n  \"Custom\": \"Kohandatud\",\n  \"Dashboard interval\": \"Armatuurlaua intervall\",\n  \"Data source\": \"Andmeallikas\",\n  \"Date interval\": \"Kuupäevavahemik\",\n  \"Day\": \"Päev\",\n  \"Delete\": \"Kustuta\",\n  \"Delete Dashboard\": \"Kustuta armatuurlaud\",\n  \"Delete row\": \"Kustuta rida\",\n  \"Descending\": \"Kahanev\",\n  \"Dimension\": \"Mõõtme\",\n  \"Direction\": \"Suund\",\n  \"Disabled\": \"Puudega\",\n  \"Display\": \"Ekraan\",\n  \"Display [not set]\": \"Ekraan [pole määratud]\",\n  \"Display all records\": \"Kuva kõik kirjed\",\n  \"Display relative bars\": \"Kuva suhtelised ribad\",\n  \"Display totals\": \"Kuva kogusummad\",\n  \"Edit Dashboard\": \"Redigeeri armatuurlauda\",\n  \"Empty values\": \"Tühjad väärtused\",\n  \"Enter a positive number\": \"Sisesta positiivne arv\",\n  \"Enter a positive number or leave empty to display all records.\": \"Sisestage positiivne arv või jätke tühjaks, et kuvada kõik kirjed.\",\n  \"Equal to\": \"Võrdne\",\n  \"Export Dashboard\": \"Ekspordi armatuurlaud\",\n  \"Extra table fields\": \"Lisatabeli väljad\",\n  \"Filters\": \"Filtrid\",\n  \"General\": \"Üldine\",\n  \"Greater or equal to\": \"Suurem või võrdne\",\n  \"Greater than\": \"Suurem kui\",\n  \"Hide\": \"Peida\",\n  \"Horizontal\": \"Horisontaalne\",\n  \"Icon\": \"Ikoon\",\n  \"Icon Status\": \"Ikooni olek\",\n  \"Important\": \"Oluline\",\n  \"Includes\": \"Sisaldab\",\n  \"Information\": \"Teave\",\n  \"Last 30 days\": \"Viimased 30 päeva\",\n  \"Last 7 days\": \"Viimased 7 päeva\",\n  \"Last month\": \"Eelmisel kuul\",\n  \"Leave empty to disable pagination\": \"Lehekülgede nummerdamise keelamiseks jätke tühjaks\",\n  \"Leave empty to hide the title\": \"Pealkirja peitmiseks jätke tühjaks\",\n  \"Less or equal to\": \"Väiksem või võrdne\",\n  \"Less than\": \"Vähem kui\",\n  \"Limit\": \"Limiit\",\n  \"Line\": \"Joon\",\n  \"Link Text\": \"Lingi tekst\",\n  \"Link URL\": \"Lingi URL\",\n  \"Make Default\": \"Määra vaikeseadeks\",\n  \"Metric\": \"Mõõdik\",\n  \"Metrics\": \"Mõõdikud\",\n  \"Month\": \"Kuu\",\n  \"Notice text\": \"Teate tekst\",\n  \"Number of days\": \"Päevade arv\",\n  \"One of\": \"Üks\",\n  \"One value per line\": \"Üks väärtus rea kohta\",\n  \"Operation\": \"Operatsioon\",\n  \"Order\": \"Telli\",\n  \"Past hour\": \"Viimase tunni\",\n  \"Past X days\": \"Viimase X päeva\",\n  \"Please provide the widget title\": \"Palun sisestage vidina pealkiri\",\n  \"Please select a data source\": \"Palun valige andmeallikas\",\n  \"Please select a dimension\": \"Palun valige mõõde\",\n  \"Please select an icon\": \"Palun valige ikoon\",\n  \"Please select metric(s).\": \"Palun vali mõõdik(ud).\",\n  \"Prev period\": \"Eelmine periood\",\n  \"Quarter\": \"Kvartal\",\n  \"Records per page\": \"Kirjeid lehekülje kohta\",\n  \"Refresh every minute\": \"Värskenda iga minuti järel\",\n  \"Rename Dashboard\": \"Armatuurlaua ümbernimetamine\",\n  \"Reset Layout\": \"Lähtesta paigutus\",\n  \"Reset layout back to default?\": \"Kas lähtestada paigutus vaikesätetele?\",\n  \"Same period last year\": \"Sama periood eelmisel aastal\",\n  \"Section Title\": \"Jaotise pealkiri\",\n  \"Select a dimension and metrics\": \"Valige mõõde ja mõõdikud\",\n  \"Select an attribute\": \"Valige atribuut\",\n  \"Select an operation\": \"Valige toiming\",\n  \"Select sorting metric or dimension\": \"Valige sortimismõõdik või -mõõde\",\n  \"Select the metric color\": \"Valige mõõdiku värv\",\n  \"Set the current layout as the default?\": \"Kas määrata praegune paigutus vaikeseadeks?\",\n  \"Show Date Interval\": \"Näita kuupäevade intervalli\",\n  \"Sort by\": \"Sorteeri\",\n  \"Sorting\": \"Sorteerimine\",\n  \"Sorting & Filtering\": \"Sorteerimine ja filtreerimine\",\n  \"Stacked Bar\": \"Virnastatud riba\",\n  \"Starts with\": \"Algab\",\n  \"Success\": \"Edu\",\n  \"The dashboard layout has been reset to default.\": \"Armatuurlaua paigutus on lähtestatud vaikesätetele.\",\n  \"The dashboard was successfully updated.\": \"Armatuurlauda on edukalt värskendatud.\",\n  \"The limit value must be at least 1\": \"Piirväärtus peab olema vähemalt 1\",\n  \"This dashboard is now the default layout.\": \"See armatuurlaud on nüüd vaikepaigutus.\",\n  \"This month\": \"Sel kuul\",\n  \"This quarter\": \"See kvartal\",\n  \"This week\": \"Sel nädalal\",\n  \"This year\": \"Sel aastal\",\n  \"Title\": \"Pealkiri\",\n  \"Today\": \"Täna\",\n  \"Value\": \"Väärtus\",\n  \"Values\": \"Väärtused\",\n  \"Vertical\": \"Vertikaalne\",\n  \"Warning\": \"Hoiatus\",\n  \"Week\": \"Nädal\",\n  \"Year\": \"Aasta\",\n  \"Yesterday\": \"Eile\"\n}"
  },
  {
    "path": "modules/dashboard/lang/fa.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"ویژگی آمار ترافیک داخلی، تعداد بازدید صفحات، آدرس‌های IP و سایر داده‌های اولیه کاربر ناشناس را در پایگاه داده ثبت می‌کند.\",\n  \"Internal Traffic Statistics\": \"آمار ترافیک داخلی\",\n  \"Purge the Internal Traffic Statistics data\": \"داده‌های آمار ترافیک داخلی را پاک کنید\",\n  \"Manage Traffic Settings and Data\": \"مدیریت تنظیمات ترافیک و داده‌ها\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"آمار ترافیک داخلی، تعداد بازدید صفحات، آدرس‌های IP و سایر داده‌های اولیه کاربر ناشناس را در پایگاه داده ثبت می‌کند و گزارش‌هایی را برای داشبورد ارائه می‌دهد. وقتی این ویژگی غیرفعال است، داده‌ها در پایگاه داده نوشته نمی‌شوند.\",\n  \"Traffic Statistics\": \"آمار ترافیک\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"منطقه زمانی برای ثبت بازدیدهای صفحه. تغییر منطقه زمانی، داده‌های موجود را به‌روزرسانی نمی‌کند. اگر منطقه زمانی را بدون پاک کردن داده‌های موجود تغییر دهید، گزارش‌ها می‌توانند زمان‌های نادرستی را برای روزهای ثبت‌شده قبلی نمایش دهند.\",\n  \"Retention Period (Months)\": \"دوره نگهداری (ماه)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"مدت زمانی که داده‌های آمار ترافیک باید در پایگاه داده ذخیره شوند را تعیین می‌کند. هنگامی که مدت زمان تعیین شده منقضی شود، داده‌های مربوطه به طور خودکار از پایگاه داده پاک می‌شوند. برای حفظ دائمی رکوردها، روی ۰ یا خالی تنظیم کنید.\",\n  \"Data Filters\": \"فیلترهای داده\",\n  \"Exclude Bots\": \"ربات‌ها را مستثنی کنید\",\n  \"Automatically ignores known bots using the detection library.\": \"با استفاده از کتابخانه تشخیص، ربات‌های شناخته شده را به طور خودکار نادیده می‌گیرد.\",\n  \"Exclude Administrator Roles\": \"حذف نقش‌های مدیر\",\n  \"Ignores traffic from selected roles.\": \"ترافیک ناشی از نقش‌های انتخاب‌شده را نادیده می‌گیرد.\",\n  \"Exclude IP Addresses\": \"آدرس‌های IP را حذف کنید\",\n  \"Requests from these addresses will be ignored in statistics.\": \"درخواست‌های این آدرس‌ها در آمار نادیده گرفته می‌شوند.\",\n  \"Exclude Paths\": \"مسیرها را حذف کنید\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"برای نادیده گرفتن URL های منطبق، در هر سطر یک مسیر یا الگو وارد کنید.\",\n  \"Access the Dashboard\": \"دسترسی به داشبورد\",\n  \"Manage Dashboards\": \"مدیریت داشبوردها\",\n  \"Dashboard\": \"داشبورد\",\n  \"Manage the Internal Traffic Statistics data\": \"مدیریت داده‌های آمار ترافیک داخلی\",\n  \"Date\": \"تاریخ\",\n  \"Page Path\": \"مسیر صفحه\",\n  \"Referral Domain\": \"دامنه ارجاع\",\n  \"Pageviews\": \"بازدیدهای صفحه\",\n  \"Unique Visitors\": \"بازدیدکنندگان منحصر به فرد\",\n  \"Traffic Information\": \"اطلاعات ترافیک\",\n  \"Website Status\": \"وضعیت وب‌سایت\",\n  \"Core version information\": \"اطلاعات نسخه اصلی\",\n  \"System Issues\": \"مشکلات سیستم\",\n  \"Event Log\": \"گزارش رویداد\",\n  \"Request log\": \"گزارش درخواست\",\n  \"Request Log\": \"گزارش درخواست\",\n  \"Website status information\": \"اطلاعات وضعیت وب‌سایت\",\n  \"Add Row\": \"اضافه کردن ردیف\",\n  \"Edit Row\": \"ویرایش ردیف\",\n  \"Edit Widget\": \"ویرایش ویجت\",\n  \"No Value\": \"بدون ارزش\",\n  \"Section\": \"بخش\",\n  \"This is a text notice widget.\": \"این یک ابزارک اعلان متنی است.\",\n  \"My Custom Widget\": \"ابزارک سفارشی من\",\n  \"Chart\": \"نمودار\",\n  \"Indicator\": \"شاخص\",\n  \"Table\": \"میز\",\n  \"Text Notice\": \"اطلاعیه متنی\",\n  \"Widget Configuration\": \"پیکربندی ویجت\",\n  \"Configure the report widget\": \"پیکربندی ابزارک گزارش\",\n  \"Width :columns\": \"عرض: ستون‌ها\",\n  \"The widget width, a number between 1 and 10.\": \"عرض ویجت، عددی بین ۱ تا ۱۰.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"لطفا عرض ابزارک را به صورت عددی بین ۱ تا ۱۰ وارد کنید.\",\n  \"{1} column|[2,Inf] columns\": \"{1} ستون|[2,Inf] ستون\",\n  \"Force new row\": \"اجبار به ایجاد ردیف جدید\",\n  \"Put the widget in a new row.\": \"ویجت را در یک ردیف جدید قرار دهید.\",\n  \"Widget title\": \"عنوان ابزارک\",\n  \"The Widget Title is required.\": \"عنوان ابزارک الزامی است.\",\n  \"Layout has been reset\": \"طرح‌بندی دوباره تنظیم شده است\",\n  \"Current layout is now the default\": \"طرح فعلی اکنون پیش‌فرض است\",\n  \"System status\": \"وضعیت سیستم\",\n  \"Pending Software Updates\": \"به‌روزرسانی‌های نرم‌افزاری در انتظار\",\n  \"Software is Up to Date\": \"نرم‌افزار به‌روز است\",\n  \"Update\": \"به‌روزرسانی\",\n  \"Some Issues Need Attention\": \"برخی مسائل نیاز به توجه دارند\",\n  \"No Warnings to Display\": \"هیچ هشداری برای نمایش وجود ندارد\",\n  \"View\": \"مشاهده\",\n  \"System Build\": \"ساخت سیستم\",\n  \"Online Since\": \"آنلاین از\",\n  \"Welcome\": \"خوش آمدید\",\n  \"Welcome back to :app, :name.\": \"به :app و :name خوش آمدید.\",\n  \"Welcome to :app, :name.\": \"به :app و :name خوش آمدید.\",\n  \"This is the first time you have signed in.\": \"این اولین باری است که وارد سیستم می‌شوید.\",\n  \"Your last sign in was\": \"آخرین ورود شما\",\n  \"View Access Logs\": \"مشاهده گزارش‌های دسترسی\",\n  \"Have a great day!\": \"روز خوبی داشته باشید!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"نمی‌توان داشبوردی با slug مشخص‌شده پیدا کرد: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"مدیریت تنظیمات آمار ترافیک داخلی\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"آمار ترافیک داخلی غیرفعال است. برای فعال کردن آن، پیکربندی را در config/cms.php ویرایش کنید.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"آمار ترافیک داخلی در حال حاضر فعال است. می‌توانید مدت زمان نگهداری و منطقه زمانی را تنظیم کنید یا این ویژگی را با ویرایش تنظیمات در config/cms.php غیرفعال کنید.\",\n  \"Purging the data...\": \"پاکسازی داده‌ها...\",\n  \"Purge Data\": \"پاکسازی داده‌ها\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"آیا واقعاً می‌خواهید داده‌های آمار ترافیک داخلی را پاک کنید؟\",\n  \"Data retention period\": \"دوره نگهداری داده‌ها\",\n  \"Time zone\": \"منطقه زمانی\",\n  \":retention month(s)\": \":ماه(های) نگهداری\",\n  \"Indefinite\": \"نامحدود\",\n  \"Internal Traffic Statistics data purged\": \"داده‌های آمار ترافیک داخلی پاک‌سازی شدند\",\n  \"[not set]\": \"[تنظیم نشده]\",\n  \"1 day (today) if not set\": \"۱ روز (امروز) اگر تنظیم نشده باشد\",\n  \"Apply\": \"اعمال کردن\",\n  \"Ascending\": \"صعودی\",\n  \"Attribute\": \"ویژگی\",\n  \"Bar\": \"بار\",\n  \"Chart type\": \"نوع نمودار\",\n  \"Color\": \"رنگ\",\n  \"Compare Totals\": \"مقایسه مجموع‌ها\",\n  \"Configure\": \"پیکربندی\",\n  \"Custom\": \"سفارشی\",\n  \"Dashboard interval\": \"فاصله داشبورد\",\n  \"Data source\": \"منبع داده\",\n  \"Date interval\": \"فاصله زمانی تاریخ\",\n  \"Day\": \"روز\",\n  \"Delete\": \"حذف\",\n  \"Delete Dashboard\": \"حذف داشبورد\",\n  \"Delete row\": \"حذف ردیف\",\n  \"Descending\": \"نزولی\",\n  \"Dimension\": \"ابعاد\",\n  \"Direction\": \"جهت\",\n  \"Disabled\": \"معلول\",\n  \"Display\": \"نمایش\",\n  \"Display [not set]\": \"نمایش [تنظیم نشده]\",\n  \"Display all records\": \"نمایش همه رکوردها\",\n  \"Display relative bars\": \"نمایش میله‌های نسبی\",\n  \"Display totals\": \"نمایش مجموع\",\n  \"Edit Dashboard\": \"ویرایش داشبورد\",\n  \"Empty values\": \"مقادیر خالی\",\n  \"Enter a positive number\": \"یک عدد مثبت وارد کنید\",\n  \"Enter a positive number or leave empty to display all records.\": \"یک عدد مثبت وارد کنید یا برای نمایش همه رکوردها، آن را خالی بگذارید.\",\n  \"Equal to\": \"برابر با\",\n  \"Export Dashboard\": \"داشبورد خروجی\",\n  \"Extra table fields\": \"فیلدهای جدول اضافی\",\n  \"Filters\": \"فیلترها\",\n  \"General\": \"عمومی\",\n  \"Greater or equal to\": \"بزرگتر یا مساوی\",\n  \"Greater than\": \"بزرگتر از\",\n  \"Hide\": \"پنهان کردن\",\n  \"Horizontal\": \"افقی\",\n  \"Icon\": \"آیکون\",\n  \"Icon Status\": \"وضعیت آیکون\",\n  \"Important\": \"مهم\",\n  \"Includes\": \"شامل می‌شود\",\n  \"Information\": \"اطلاعات\",\n  \"Last 30 days\": \"۳۰ روز گذشته\",\n  \"Last 7 days\": \"۷ روز گذشته\",\n  \"Last month\": \"ماه گذشته\",\n  \"Leave empty to disable pagination\": \"برای غیرفعال کردن صفحه‌بندی، خالی بگذارید\",\n  \"Leave empty to hide the title\": \"برای مخفی کردن عنوان، خالی بگذارید\",\n  \"Less or equal to\": \"کمتر یا مساوی\",\n  \"Less than\": \"کمتر از\",\n  \"Limit\": \"حد\",\n  \"Line\": \"خط\",\n  \"Link Text\": \"متن پیوند\",\n  \"Link URL\": \"آدرس لینک\",\n  \"Make Default\": \"پیش‌فرض قرار دهید\",\n  \"Metric\": \"متریک\",\n  \"Metrics\": \"معیارها\",\n  \"Month\": \"ماه\",\n  \"Notice text\": \"متن اطلاعیه\",\n  \"Number of days\": \"تعداد روزها\",\n  \"One of\": \"یکی از\",\n  \"One value per line\": \"یک مقدار در هر خط\",\n  \"Operation\": \"عملیات\",\n  \"Order\": \"سفارش دهید\",\n  \"Past hour\": \"ساعت گذشته\",\n  \"Past X days\": \"X روز گذشته\",\n  \"Please provide the widget title\": \"لطفا عنوان ابزارک را وارد کنید\",\n  \"Please select a data source\": \"لطفا یک منبع داده انتخاب کنید\",\n  \"Please select a dimension\": \"لطفا یک بعد انتخاب کنید\",\n  \"Please select an icon\": \"لطفا یک آیکون انتخاب کنید\",\n  \"Please select metric(s).\": \"لطفا معیار(های) مورد نظر را انتخاب کنید.\",\n  \"Prev period\": \"دوره قبلی\",\n  \"Quarter\": \"ربع\",\n  \"Records per page\": \"رکوردها در هر صفحه\",\n  \"Refresh every minute\": \"هر دقیقه تازه کنید\",\n  \"Rename Dashboard\": \"تغییر نام داشبورد\",\n  \"Reset Layout\": \"تنظیم مجدد طرح‌بندی\",\n  \"Reset layout back to default?\": \"طرح‌بندی به حالت پیش‌فرض برگردانده شود؟\",\n  \"Same period last year\": \"مدت مشابه سال گذشته\",\n  \"Section Title\": \"عنوان بخش\",\n  \"Select a dimension and metrics\": \"انتخاب ابعاد و معیارها\",\n  \"Select an attribute\": \"یک ویژگی را انتخاب کنید\",\n  \"Select an operation\": \"انتخاب یک عملیات\",\n  \"Select sorting metric or dimension\": \"انتخاب معیار یا بُعد مرتب‌سازی\",\n  \"Select the metric color\": \"رنگ متریک را انتخاب کنید\",\n  \"Set the current layout as the default?\": \"طرح فعلی را به عنوان طرح پیش‌فرض تنظیم کنید؟\",\n  \"Show Date Interval\": \"نمایش بازه زمانی تاریخ\",\n  \"Sort by\": \"مرتب سازی بر اساس\",\n  \"Sorting\": \"مرتب‌سازی\",\n  \"Sorting & Filtering\": \"مرتب‌سازی و فیلتر کردن\",\n  \"Stacked Bar\": \"میله انباشته\",\n  \"Starts with\": \"شروع می‌شود با\",\n  \"Success\": \"موفقیت\",\n  \"The dashboard layout has been reset to default.\": \"طرح داشبورد به حالت پیش‌فرض بازنشانی شد.\",\n  \"The dashboard was successfully updated.\": \"داشبورد با موفقیت به‌روزرسانی شد.\",\n  \"The limit value must be at least 1\": \"مقدار حد باید حداقل ۱ باشد\",\n  \"This dashboard is now the default layout.\": \"این داشبورد اکنون طرح پیش‌فرض است.\",\n  \"This month\": \"این ماه\",\n  \"This quarter\": \"این سه ماهه\",\n  \"This week\": \"این هفته\",\n  \"This year\": \"امسال\",\n  \"Title\": \"عنوان\",\n  \"Today\": \"امروز\",\n  \"Value\": \"ارزش\",\n  \"Values\": \"ارزش‌ها\",\n  \"Vertical\": \"عمودی\",\n  \"Warning\": \"هشدار\",\n  \"Week\": \"هفته\",\n  \"Year\": \"سال\",\n  \"Yesterday\": \"دیروز\"\n}"
  },
  {
    "path": "modules/dashboard/lang/fi.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Sisäisen liikenteen tilastot -ominaisuus kirjaa sivulataukset, IP-osoitteet ja muut anonyymit käyttäjätiedot tietokantaan.\",\n  \"Internal Traffic Statistics\": \"Sisäiset liikennetilastot\",\n  \"Purge the Internal Traffic Statistics data\": \"Tyhjennä sisäiset liikennetilastot\",\n  \"Manage Traffic Settings and Data\": \"Liikenneasetusten ja -tietojen hallinta\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Sisäiset liikennetilastot kirjaavat sivulataukset, IP-osoitteet ja muut anonyymit käyttäjätiedot tietokantaan ja tarjoavat raportteja kojelautaan. Kun ominaisuus on poistettu käytöstä, tietoja ei kirjoiteta tietokantaan.\",\n  \"Traffic Statistics\": \"Liikennetilastot\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Aikavyöhyke sivulatausten kirjaamiseen. Aikavyöhykkeen muuttaminen ei päivitä olemassa olevia tietoja. Jos muutat aikavyöhykettä poistamatta olemassa olevia tietoja, raportit saattavat näyttää virheellisiä aiempiin kirjattuihin päiviin liittyviä aikoja.\",\n  \"Retention Period (Months)\": \"Säilytysaika (kuukausia)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Määrittää, kuinka kauan liikennetilastotietoja säilytetään tietokannassa. Kun asetettu ajanjakso umpeutuu, vastaavat tiedot poistetaan tietokannasta automaattisesti. Aseta arvoksi 0 tai tyhjäksi, jos haluat säilyttää tiedot ikuisesti.\",\n  \"Data Filters\": \"Tietosuodattimet\",\n  \"Exclude Bots\": \"Sulje pois botit\",\n  \"Automatically ignores known bots using the detection library.\": \"Ohittaa automaattisesti tunnetut botit tunnistuskirjaston avulla.\",\n  \"Exclude Administrator Roles\": \"Jätä pois järjestelmänvalvojan roolit\",\n  \"Ignores traffic from selected roles.\": \"Ohittaa valituista rooleista tulevan liikenteen.\",\n  \"Exclude IP Addresses\": \"Sulje pois IP-osoitteet\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Näistä osoitteista tulevia pyyntöjä ei huomioida tilastoissa.\",\n  \"Exclude Paths\": \"Poissuljetut reitit\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Syötä yksi polku tai malli riviä kohden ohittaaksesi vastaavat URL-osoitteet.\",\n  \"Access the Dashboard\": \"Käytä Koontinäkymää\",\n  \"Manage Dashboards\": \"Hallitse koontinäkymiä\",\n  \"Dashboard\": \"Koontinäkymä\",\n  \"Manage the Internal Traffic Statistics data\": \"Hallinnoi sisäisiä liikennetilastoja\",\n  \"Date\": \"Päivämäärä\",\n  \"Page Path\": \"Sivupolku\",\n  \"Referral Domain\": \"Viittausverkkotunnus\",\n  \"Pageviews\": \"Sivulataukset\",\n  \"Unique Visitors\": \"Yksittäiset kävijät\",\n  \"Traffic Information\": \"Liikennetiedot\",\n  \"Website Status\": \"Verkkosivuston tila\",\n  \"Core version information\": \"Ydinversion tiedot\",\n  \"System Issues\": \"Järjestelmäongelmat\",\n  \"Event Log\": \"Tapahtumaloki\",\n  \"Request log\": \"Pyyntöloki\",\n  \"Request Log\": \"Pyyntöloki\",\n  \"Website status information\": \"Verkkosivuston tilatiedot\",\n  \"Add Row\": \"Lisää rivi\",\n  \"Edit Row\": \"Muokkaa riviä\",\n  \"Edit Widget\": \"Muokkaa widgetiä\",\n  \"No Value\": \"Ei arvoa\",\n  \"Section\": \"Osio\",\n  \"This is a text notice widget.\": \"Tämä on tekstiviesti-ilmoituswidget.\",\n  \"My Custom Widget\": \"Oma mukautettu widget\",\n  \"Chart\": \"Kuvaaja\",\n  \"Indicator\": \"Indikaattori\",\n  \"Table\": \"Taulukko\",\n  \"Text Notice\": \"Tekstiviesti-ilmoitus\",\n  \"Widget Configuration\": \"Widget-määritykset\",\n  \"Configure the report widget\": \"Raporttiwidgetin määrittäminen\",\n  \"Width :columns\": \"Leveys: sarakkeet\",\n  \"The widget width, a number between 1 and 10.\": \"Widgetin leveys, luku väliltä 1–10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Anna widgetin leveys numerona väliltä 1–10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} sarake|[2,Inf] sarakkeet\",\n  \"Force new row\": \"Pakota uusi rivi\",\n  \"Put the widget in a new row.\": \"Sijoita widget uudelle riville.\",\n  \"Widget title\": \"Widgetin otsikko\",\n  \"The Widget Title is required.\": \"Widgetin otsikko on pakollinen.\",\n  \"Layout has been reset\": \"Asettelu on nollattu\",\n  \"Current layout is now the default\": \"Nykyinen asettelu on nyt oletusarvoinen\",\n  \"System status\": \"Järjestelmän tila\",\n  \"Pending Software Updates\": \"Odottavat ohjelmistopäivitykset\",\n  \"Software is Up to Date\": \"Ohjelmisto on ajan tasalla\",\n  \"Update\": \"Päivittää\",\n  \"Some Issues Need Attention\": \"Jotkin ongelmat vaativat huomiota\",\n  \"No Warnings to Display\": \"Ei näytettäviä varoituksia\",\n  \"View\": \"Näytä\",\n  \"System Build\": \"Järjestelmän ylösajo\",\n  \"Online Since\": \"Verkossa vuodesta\",\n  \"Welcome\": \"Tervetuloa\",\n  \"Welcome back to :app, :name.\": \"Tervetuloa takaisin :app, :name -palveluun.\",\n  \"Welcome to :app, :name.\": \"Tervetuloa :app, :name -palveluun.\",\n  \"This is the first time you have signed in.\": \"Tämä on ensimmäinen kerta, kun kirjaudut sisään.\",\n  \"Your last sign in was\": \"Viimeisin kirjautumisesi oli\",\n  \"View Access Logs\": \"Näytä käyttölokit\",\n  \"Have a great day!\": \"Hyvää päivänjatkoa!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Määritettyä slug-arvoa \\\":slug\\\" vastaavaa koontinäkymää ei löydy.\",\n  \"Manage Internal Traffic Statistics settings\": \"Hallinnoi sisäisen liikenteen tilastoasetuksia\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Sisäiset liikennetilastot on poistettu käytöstä. Voit ottaa ne käyttöön muokkaamalla asetuksia tiedostossa config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Sisäiset liikennetilastot ovat tällä hetkellä käytössä. Voit säätää säilytysaikaa ja aikavyöhykettä tai poistaa tämän ominaisuuden käytöstä muokkaamalla asetuksia config/cms.php-tiedostossa.\",\n  \"Purging the data...\": \"Tietojen tyhjennys...\",\n  \"Purge Data\": \"Tyhjennä tiedot\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Haluatko todella tyhjentää sisäisen liikenteen tilastotiedot?\",\n  \"Data retention period\": \"Tietojen säilytysaika\",\n  \"Time zone\": \"Aikavyöhyke\",\n  \":retention month(s)\": \"säilytyskuukausi(a)\",\n  \"Indefinite\": \"Määrittelemätön\",\n  \"Internal Traffic Statistics data purged\": \"Sisäiset liikennetilastot tyhjennetty\",\n  \"[not set]\": \"[ei asetettu]\",\n  \"1 day (today) if not set\": \"1 päivä (tänään), jos ei asetettu\",\n  \"Apply\": \"Käytä\",\n  \"Ascending\": \"Nouseva\",\n  \"Attribute\": \"Ominaisuus\",\n  \"Bar\": \"Palkki\",\n  \"Chart type\": \"Kaaviotyyppi\",\n  \"Color\": \"Väri\",\n  \"Compare Totals\": \"Vertaa kokonaissummia\",\n  \"Configure\": \"Määritä\",\n  \"Custom\": \"Mukautettu\",\n  \"Dashboard interval\": \"Koontinäkymän aikaväli\",\n  \"Data source\": \"Tietolähde\",\n  \"Date interval\": \"Päivämääräväli\",\n  \"Day\": \"Päivä\",\n  \"Delete\": \"Poistaa\",\n  \"Delete Dashboard\": \"Poista koontinäkymä\",\n  \"Delete row\": \"Poista rivi\",\n  \"Descending\": \"Laskeva\",\n  \"Dimension\": \"Ulottuvuus\",\n  \"Direction\": \"Suunta\",\n  \"Disabled\": \"Pois käytöstä\",\n  \"Display\": \"Näyttö\",\n  \"Display [not set]\": \"Näyttö [ei asetettu]\",\n  \"Display all records\": \"Näytä kaikki tietueet\",\n  \"Display relative bars\": \"Näytä suhteelliset palkit\",\n  \"Display totals\": \"Näytä kokonaissummat\",\n  \"Edit Dashboard\": \"Muokkaa koontinäkymää\",\n  \"Empty values\": \"Tyhjät arvot\",\n  \"Enter a positive number\": \"Anna positiivinen luku\",\n  \"Enter a positive number or leave empty to display all records.\": \"Syötä positiivinen luku tai jätä tyhjäksi, jos haluat näyttää kaikki tietueet.\",\n  \"Equal to\": \"Yhtä suuri kuin\",\n  \"Export Dashboard\": \"Vientihallintapaneeli\",\n  \"Extra table fields\": \"Lisätaulukon kentät\",\n  \"Filters\": \"Suodattimet\",\n  \"General\": \"Yleinen\",\n  \"Greater or equal to\": \"Suurempi tai yhtä suuri kuin\",\n  \"Greater than\": \"Suurempi kuin\",\n  \"Hide\": \"Piilottaa\",\n  \"Horizontal\": \"Vaakasuora\",\n  \"Icon\": \"Kuvake\",\n  \"Icon Status\": \"Kuvakkeen tila\",\n  \"Important\": \"Tärkeää\",\n  \"Includes\": \"Sisältää\",\n  \"Information\": \"Tiedot\",\n  \"Last 30 days\": \"Viimeiset 30 päivää\",\n  \"Last 7 days\": \"Viimeiset 7 päivää\",\n  \"Last month\": \"Viime kuussa\",\n  \"Leave empty to disable pagination\": \"Jätä tyhjäksi poistaaksesi sivutuksen käytöstä\",\n  \"Leave empty to hide the title\": \"Jätä tyhjäksi, jos haluat piilottaa otsikon\",\n  \"Less or equal to\": \"Pienempi tai yhtä suuri kuin\",\n  \"Less than\": \"Alle\",\n  \"Limit\": \"Rajoittaa\",\n  \"Line\": \"Linja\",\n  \"Link Text\": \"Linkin teksti\",\n  \"Link URL\": \"Linkin URL-osoite\",\n  \"Make Default\": \"Aseta oletukseksi\",\n  \"Metric\": \"Metrinen\",\n  \"Metrics\": \"Mittarit\",\n  \"Month\": \"Kuukausi\",\n  \"Notice text\": \"Ilmoitusteksti\",\n  \"Number of days\": \"Päivien lukumäärä\",\n  \"One of\": \"Yksi\",\n  \"One value per line\": \"Yksi arvo riviä kohden\",\n  \"Operation\": \"Operaatio\",\n  \"Order\": \"Järjestys\",\n  \"Past hour\": \"Viimeisin tunti\",\n  \"Past X days\": \"Viimeiset X päivää\",\n  \"Please provide the widget title\": \"Anna widgetin otsikko\",\n  \"Please select a data source\": \"Valitse tietolähde\",\n  \"Please select a dimension\": \"Valitse mittasuhde\",\n  \"Please select an icon\": \"Valitse kuvake\",\n  \"Please select metric(s).\": \"Valitse mittari(t).\",\n  \"Prev period\": \"Edellinen ajanjakso\",\n  \"Quarter\": \"Neljännes\",\n  \"Records per page\": \"Tietueita sivulla\",\n  \"Refresh every minute\": \"Päivitä joka minuutti\",\n  \"Rename Dashboard\": \"Nimeä koontinäkymä uudelleen\",\n  \"Reset Layout\": \"Palauta asettelu\",\n  \"Reset layout back to default?\": \"Palautetaanko asettelu oletusasetuksiin?\",\n  \"Same period last year\": \"Sama ajanjakso viime vuonna\",\n  \"Section Title\": \"Osion otsikko\",\n  \"Select a dimension and metrics\": \"Valitse ulottuvuus ja mittarit\",\n  \"Select an attribute\": \"Valitse ominaisuus\",\n  \"Select an operation\": \"Valitse toiminto\",\n  \"Select sorting metric or dimension\": \"Valitse lajittelumittari tai ulottuvuus\",\n  \"Select the metric color\": \"Valitse metrijärjestelmän väri\",\n  \"Set the current layout as the default?\": \"Asetetaanko nykyinen asettelu oletukseksi?\",\n  \"Show Date Interval\": \"Näytä päivämääräväli\",\n  \"Sort by\": \"Lajittele\",\n  \"Sorting\": \"Lajittelu\",\n  \"Sorting & Filtering\": \"Lajittelu ja suodatus\",\n  \"Stacked Bar\": \"Pinottu palkki\",\n  \"Starts with\": \"Alkaa\",\n  \"Success\": \"Onnistui\",\n  \"The dashboard layout has been reset to default.\": \"Koontinäkymän asettelu on palautettu oletusasetuksiin.\",\n  \"The dashboard was successfully updated.\": \"Koontinäkymän päivitys onnistui.\",\n  \"The limit value must be at least 1\": \"Raja-arvon on oltava vähintään 1\",\n  \"This dashboard is now the default layout.\": \"Tämä koontinäkymä on nyt oletusasetteluna.\",\n  \"This month\": \"Tässä kuussa\",\n  \"This quarter\": \"Tämä neljännes\",\n  \"This week\": \"Tällä viikolla\",\n  \"This year\": \"Tänä vuonna\",\n  \"Title\": \"Otsikko\",\n  \"Today\": \"Tänään\",\n  \"Value\": \"Arvo\",\n  \"Values\": \"Arvot\",\n  \"Vertical\": \"Pystysuora\",\n  \"Warning\": \"Varoitus\",\n  \"Week\": \"Viikko\",\n  \"Year\": \"Vuosi\",\n  \"Yesterday\": \"Eilen\"\n}"
  },
  {
    "path": "modules/dashboard/lang/fr.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"La fonctionnalité Statistiques de trafic interne enregistre les pages vues, les adresses IP et autres données utilisateur anonymes de base dans la base de données.\",\n  \"Internal Traffic Statistics\": \"Statistiques de trafic interne\",\n  \"Purge the Internal Traffic Statistics data\": \"Purger les données des Statistiques de trafic interne\",\n  \"Manage Traffic Settings and Data\": \"Gérer les paramètres de trafic et les données\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Les statistiques de trafic interne enregistrent les pages vues, les adresses IP et d'autres données utilisateur anonymes de base dans la base de données et génèrent des rapports pour le tableau de bord. Lorsque cette fonctionnalité est désactivée, les données ne sont pas enregistrées dans la base de données.\",\n  \"Traffic Statistics\": \"Statistiques de trafic\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Fuseau horaire utilisé pour l'enregistrement des pages vues. Modifier le fuseau horaire ne mettra pas à jour les données existantes. Si vous modifiez le fuseau horaire sans effacer les données existantes, les rapports risquent d'afficher des heures incorrectes pour les jours précédemment enregistrés.\",\n  \"Retention Period (Months)\": \"Période de rétention (mois)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Détermine la durée de conservation des données statistiques de trafic dans la base de données. À l'expiration de cette période, les données correspondantes sont automatiquement supprimées. Indiquez 0 ou laissez ce champ vide pour conserver les enregistrements indéfiniment.\",\n  \"Data Filters\": \"Filtres de données\",\n  \"Exclude Bots\": \"Exclure les bots\",\n  \"Automatically ignores known bots using the detection library.\": \"Ignore automatiquement les bots connus grâce à la bibliothèque de détection.\",\n  \"Exclude Administrator Roles\": \"Exclure les rôles d'administrateur\",\n  \"Ignores traffic from selected roles.\": \"Ignore le trafic provenant des rôles sélectionnés.\",\n  \"Exclude IP Addresses\": \"Exclure les adresses IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Les requêtes provenant de ces adresses seront ignorées dans les statistiques.\",\n  \"Exclude Paths\": \"Exclure les chemins\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Saisissez un chemin ou un modèle par ligne pour ignorer les URL correspondantes.\",\n  \"Access the Dashboard\": \"Accéder au tableau de bord\",\n  \"Manage Dashboards\": \"Gérer les tableaux de bord\",\n  \"Dashboard\": \"Tableau de bord\",\n  \"Manage the Internal Traffic Statistics data\": \"Gérer les données statistiques du trafic interne\",\n  \"Date\": \"Date\",\n  \"Page Path\": \"Chemin de la page\",\n  \"Referral Domain\": \"Domaine de référence\",\n  \"Pageviews\": \"Pages vues\",\n  \"Unique Visitors\": \"Visiteurs uniques\",\n  \"Traffic Information\": \"Informations routières\",\n  \"Website Status\": \"État du site Web\",\n  \"Core version information\": \"Informations sur la version principale\",\n  \"System Issues\": \"Problèmes système\",\n  \"Event Log\": \"Journal des évènements\",\n  \"Request log\": \"Journal des requêtes\",\n  \"Request Log\": \"Journal des requêtes\",\n  \"Website status information\": \"Informations sur l'état du site Web\",\n  \"Add Row\": \"Ajouter une ligne\",\n  \"Edit Row\": \"Modifier la ligne\",\n  \"Edit Widget\": \"Modifier le widget\",\n  \"No Value\": \"Aucune valeur\",\n  \"Section\": \"Section\",\n  \"This is a text notice widget.\": \"Ceci est un widget d'avertissement texte.\",\n  \"My Custom Widget\": \"Mon Widget personnalisé\",\n  \"Chart\": \"Graphique\",\n  \"Indicator\": \"Indicateur\",\n  \"Table\": \"Tableau\",\n  \"Text Notice\": \"Texte d'avertissement\",\n  \"Widget Configuration\": \"Configuration du Widget\",\n  \"Configure the report widget\": \"Configurer le Widget\",\n  \"Width :columns\": \"Largeur en nombre de colonnes :columns\",\n  \"The widget width, a number between 1 and 10.\": \"La largeur du Widget doit être comprise entre 1 et 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Veuillez définir la largeur du Widget avec un nombre compris entre 1 et 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} colonne|[2,Inf] colonnes\",\n  \"Force new row\": \"Forcer l'affichage sur une nouvelle ligne\",\n  \"Put the widget in a new row.\": \"Placer le Widget sur une nouvelle ligne.\",\n  \"Widget title\": \"Titre du Widget\",\n  \"The Widget Title is required.\": \"Le titre du Widget est obligatoire.\",\n  \"Layout has been reset\": \"La maquette a été réinitialisée\",\n  \"Current layout is now the default\": \"La maquette actuelle est définie comme celle par défaut\",\n  \"System status\": \"État du système\",\n  \"Pending Software Updates\": \"Mises à jour du logiciel en attente\",\n  \"Software is Up to Date\": \"Le logiciel est à jour\",\n  \"Update\": \"Mettre à jour\",\n  \"Some Issues Need Attention\": \"Certaines anomalies méritent votre attention\",\n  \"No Warnings to Display\": \"Aucun avertissement à afficher\",\n  \"View\": \"Voir\",\n  \"System Build\": \"Version du système\",\n  \"Online Since\": \"En ligne depuis\",\n  \"Welcome\": \"Bienvenue\",\n  \"Welcome back to :app, :name.\": \"Bienvenue sur :app, :name.\",\n  \"Welcome to :app, :name.\": \"Bienvenue sur :app, :name.\",\n  \"This is the first time you have signed in.\": \"C'est la première fois que vous vous connectez.\",\n  \"Your last sign in was\": \"Votre dernière connexion remonte au\",\n  \"View Access Logs\": \"Consulter le journal des accès\",\n  \"Have a great day!\": \"Passez une agréable journée !\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Impossible de trouver un tableau de bord avec le slug : \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Gérer les paramètres des Statistiques de trafic interne\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Les Statistiques de trafic interne sont désactivées. Pour les activer, modifiez la configuration dans config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Les Statistiques de trafic interne sont actuellement activées. Vous pouvez ajuster la période de rétention et le fuseau horaire, ou désactiver cette fonctionnalité, en modifiant les paramètres dans config/cms.php.\",\n  \"Purging the data...\": \"Purge des données en cours...\",\n  \"Purge Data\": \"Purger les Données\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Voulez-vous vraiment purger les données des Statistiques de trafic interne ?\",\n  \"Data retention period\": \"Période de rétention des données\",\n  \"Time zone\": \"Fuseau horaire\",\n  \":retention month(s)\": \":retention mois\",\n  \"Indefinite\": \"Indéfinie\",\n  \"Internal Traffic Statistics data purged\": \"Données des Statistiques de trafic interne purgées\",\n  \"[not set]\": \"[non défini]\",\n  \"1 day (today) if not set\": \"1 jour (aujourd'hui) si non défini\",\n  \"Apply\": \"Appliquer\",\n  \"Ascending\": \"Ascendant\",\n  \"Attribute\": \"Attribut\",\n  \"Bar\": \"Barre\",\n  \"Chart type\": \"Type de graphique\",\n  \"Color\": \"Couleur\",\n  \"Compare Totals\": \"Comparer les totaux\",\n  \"Configure\": \"Configurer\",\n  \"Custom\": \"Personnalisé\",\n  \"Dashboard interval\": \"Intervalle du tableau de bord\",\n  \"Data source\": \"Source de données\",\n  \"Date interval\": \"Intervalle de dates\",\n  \"Day\": \"Jour\",\n  \"Delete\": \"Supprimer\",\n  \"Delete Dashboard\": \"Supprimer le tableau de bord\",\n  \"Delete row\": \"Supprimer la ligne\",\n  \"Descending\": \"Descendant\",\n  \"Dimension\": \"Dimension\",\n  \"Direction\": \"Direction\",\n  \"Disabled\": \"Désactivé\",\n  \"Display\": \"Afficher\",\n  \"Display [not set]\": \"Afficher [non défini]\",\n  \"Display all records\": \"Afficher tous les enregistrements\",\n  \"Display relative bars\": \"Afficher les barres relatives\",\n  \"Display totals\": \"Afficher les totaux\",\n  \"Edit Dashboard\": \"Modifier le tableau de bord\",\n  \"Empty values\": \"Valeurs vides\",\n  \"Enter a positive number\": \"Saisir un nombre positif\",\n  \"Enter a positive number or leave empty to display all records.\": \"Saisir un nombre positif ou laisser vide pour afficher tous les enregistrements.\",\n  \"Equal to\": \"Égal à\",\n  \"Export Dashboard\": \"Exporter le tableau de bord\",\n  \"Extra table fields\": \"Champs supplémentaires du tableau\",\n  \"Filters\": \"Filtres\",\n  \"General\": \"Général\",\n  \"Greater or equal to\": \"Supérieur ou égal à\",\n  \"Greater than\": \"Supérieur à\",\n  \"Hide\": \"Masquer\",\n  \"Horizontal\": \"Horizontale\",\n  \"Icon\": \"Icône\",\n  \"Icon Status\": \"État de l'icône\",\n  \"Important\": \"Important\",\n  \"Includes\": \"Contient\",\n  \"Information\": \"Information\",\n  \"Last 30 days\": \"30 derniers jours\",\n  \"Last 7 days\": \"7 derniers jours\",\n  \"Last month\": \"Mois dernier\",\n  \"Leave empty to disable pagination\": \"Laisser vide pour désactiver la pagination\",\n  \"Leave empty to hide the title\": \"Laisser vide pour masquer le titre\",\n  \"Less or equal to\": \"Inférieur ou égal à\",\n  \"Less than\": \"Inférieur à\",\n  \"Limit\": \"Limite\",\n  \"Line\": \"Ligne\",\n  \"Link Text\": \"Texte du lien\",\n  \"Link URL\": \"Lien URL\",\n  \"Make Default\": \"Définir par défaut\",\n  \"Metric\": \"Métrique\",\n  \"Metrics\": \"Métriques\",\n  \"Month\": \"Mois\",\n  \"Notice text\": \"Texte de l'avertissement\",\n  \"Number of days\": \"Nombre de jours\",\n  \"One of\": \"Parmi\",\n  \"One value per line\": \"Une valeur par ligne\",\n  \"Operation\": \"Opération\",\n  \"Order\": \"Ordre\",\n  \"Past hour\": \"Dernière heure\",\n  \"Past X days\": \"Derniers X jours\",\n  \"Please provide the widget title\": \"Veuillez fournir le titre du Widget\",\n  \"Please select a data source\": \"Veuillez sélectionner une source de données\",\n  \"Please select a dimension\": \"Veuillez sélectionner une dimension\",\n  \"Please select an icon\": \"Veuillez sélectionner une icône\",\n  \"Please select metric(s).\": \"Veuillez sélectionner une ou plusieurs métriques.\",\n  \"Prev period\": \"Période précédente\",\n  \"Quarter\": \"Trimestre\",\n  \"Records per page\": \"Enregistrements par page\",\n  \"Refresh every minute\": \"Actualiser toutes les minutes\",\n  \"Rename Dashboard\": \"Renommer le tableau de bord\",\n  \"Reset Layout\": \"Réinitialiser la mise en page\",\n  \"Reset layout back to default?\": \"Réinitialiser la mise en page aux valeurs par défaut ?\",\n  \"Same period last year\": \"Même période l'année dernière\",\n  \"Section Title\": \"Titre de section\",\n  \"Select a dimension and metrics\": \"Sélectionnez une dimension et des métriques\",\n  \"Select an attribute\": \"Sélectionner un attribut\",\n  \"Select an operation\": \"Sélectionner une opération\",\n  \"Select sorting metric or dimension\": \"Sélectionnez une métrique ou dimension pour le tri\",\n  \"Select the metric color\": \"Sélectionner la couleur de la métrique\",\n  \"Set the current layout as the default?\": \"Définir la mise en page actuelle comme mise en page par défaut ?\",\n  \"Show Date Interval\": \"Afficher l'intervalle de dates\",\n  \"Sort by\": \"Trier par\",\n  \"Sorting\": \"Tri\",\n  \"Sorting & Filtering\": \"Tri et filtres\",\n  \"Stacked Bar\": \"Barre empilée\",\n  \"Starts with\": \"Commence par\",\n  \"Success\": \"Succès\",\n  \"The dashboard layout has been reset to default.\": \"La mise en page du tableau de bord a été réinitialisée aux valeurs par défaut.\",\n  \"The dashboard was successfully updated.\": \"Le tableau de bord a été mis à jour avec succès.\",\n  \"The limit value must be at least 1\": \"La valeur de la limite doit être au moins de 1\",\n  \"This dashboard is now the default layout.\": \"Ce tableau de bord est désormais la mise en page par défaut.\",\n  \"This month\": \"Ce mois\",\n  \"This quarter\": \"Ce trimestre\",\n  \"This week\": \"Cette semaine\",\n  \"This year\": \"Cette année\",\n  \"Title\": \"Titre\",\n  \"Today\": \"Aujourd'hui\",\n  \"Value\": \"Valeur\",\n  \"Values\": \"Valeurs\",\n  \"Vertical\": \"Verticale\",\n  \"Warning\": \"Avertissement\",\n  \"Week\": \"Semaine\",\n  \"Year\": \"Année\",\n  \"Yesterday\": \"Hier\"\n}"
  },
  {
    "path": "modules/dashboard/lang/hu.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"A belső forgalmi statisztikák funkció naplózza az oldalmegtekintéseket, az IP-címeket és más alapvető névtelen felhasználói adatokat az adatbázisba.\",\n  \"Internal Traffic Statistics\": \"Belső forgalmi statisztikák\",\n  \"Purge the Internal Traffic Statistics data\": \"A belső forgalmi statisztikai adatok törlése\",\n  \"Manage Traffic Settings and Data\": \"Forgalmi beállítások és adatok kezelése\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"A belső forgalmi statisztikák naplózzák az oldalmegtekintéseket, az IP-címeket és más alapvető névtelen felhasználói adatokat az adatbázisba, és jelentéseket biztosítanak az irányítópult számára. Ha a funkció le van tiltva, az adatok nem kerülnek be az adatbázisba.\",\n  \"Traffic Statistics\": \"Forgalmi statisztikák\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Időzóna az oldalmegtekintések naplózásához. Az időzóna módosítása nem frissíti a meglévő adatokat. Ha az időzónát a meglévő adatok törlése nélkül módosítja, a jelentések potenciálisan helytelen időpontokat jeleníthetnek meg a korábban naplózott napokra vonatkozóan.\",\n  \"Retention Period (Months)\": \"Megőrzési időszak (hónap)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Meghatározza azt az időtartamot, ameddig a forgalmi statisztikai adatokat tárolni kell az adatbázisban. Amikor a beállított időszak lejár, a megfelelő adatok automatikusan törlődnek az adatbázisból. Állítsa 0-ra vagy üresen a rekordok örök megőrzéséhez.\",\n  \"Data Filters\": \"Adatszűrők\",\n  \"Exclude Bots\": \"Botok kizárása\",\n  \"Automatically ignores known bots using the detection library.\": \"Automatikusan figyelmen kívül hagyja az ismert botokat az észlelési könyvtár használatával.\",\n  \"Exclude Administrator Roles\": \"Adminisztrátori szerepkörök kizárása\",\n  \"Ignores traffic from selected roles.\": \"Figyelmen kívül hagyja a kiválasztott szerepkörökből érkező forgalmat.\",\n  \"Exclude IP Addresses\": \"IP-címek kizárása\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Az ezekről a címekről érkező kéréseket a statisztikák figyelmen kívül hagyják.\",\n  \"Exclude Paths\": \"Útvonalak kizárása\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Soronként egy elérési utat vagy mintát adjon meg az egyező URL-ek figyelmen kívül hagyásához.\",\n  \"Access the Dashboard\": \"Hozzáférés az irányítópulthoz\",\n  \"Manage Dashboards\": \"Irányítópultok kezelése\",\n  \"Dashboard\": \"Műszerfal\",\n  \"Manage the Internal Traffic Statistics data\": \"Belső forgalmi statisztikai adatok kezelése\",\n  \"Date\": \"Dátum\",\n  \"Page Path\": \"Oldalútvonal\",\n  \"Referral Domain\": \"Ajánló domain\",\n  \"Pageviews\": \"Oldalmegtekintések\",\n  \"Unique Visitors\": \"Egyedi látogatók\",\n  \"Traffic Information\": \"Közlekedési információk\",\n  \"Website Status\": \"Weboldal állapota\",\n  \"Core version information\": \"Alapverzió információk\",\n  \"System Issues\": \"Rendszerproblémák\",\n  \"Event Log\": \"Eseménynapló\",\n  \"Request log\": \"Kérelemnapló\",\n  \"Request Log\": \"Kérelemnapló\",\n  \"Website status information\": \"Webhely állapotinformációi\",\n  \"Add Row\": \"Sor hozzáadása\",\n  \"Edit Row\": \"Sor szerkesztése\",\n  \"Edit Widget\": \"Widget szerkesztése\",\n  \"No Value\": \"Nincs érték\",\n  \"Section\": \"Szakasz\",\n  \"This is a text notice widget.\": \"Ez egy szöveges értesítési widget.\",\n  \"My Custom Widget\": \"Saját widget\",\n  \"Chart\": \"Diagram\",\n  \"Indicator\": \"Indikátor\",\n  \"Table\": \"Táblázat\",\n  \"Text Notice\": \"Szöveges értesítés\",\n  \"Widget Configuration\": \"Widget konfiguráció\",\n  \"Configure the report widget\": \"A jelentés widget konfigurálása\",\n  \"Width :columns\": \"Szélesség: oszlopok\",\n  \"The widget width, a number between 1 and 10.\": \"A widget szélessége, egy 1 és 10 közötti szám.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Kérjük, adja meg a widget szélességét 1 és 10 közötti számként.\",\n  \"{1} column|[2,Inf] columns\": \"{1} oszlop|[2,Inf] oszlopok\",\n  \"Force new row\": \"Új sor kényszerítése\",\n  \"Put the widget in a new row.\": \"Helyezze a widgetet egy új sorba.\",\n  \"Widget title\": \"Widget címe\",\n  \"The Widget Title is required.\": \"A widget címének megadása kötelező.\",\n  \"Layout has been reset\": \"Az elrendezés visszaállítva\",\n  \"Current layout is now the default\": \"A jelenlegi elrendezés mostantól az alapértelmezett\",\n  \"System status\": \"Rendszerállapot\",\n  \"Pending Software Updates\": \"Füőben lévő szoftverfrissítések\",\n  \"Software is Up to Date\": \"A szoftver naprakész\",\n  \"Update\": \"Frissítés\",\n  \"Some Issues Need Attention\": \"Néhány probléma figyelmet igényel\",\n  \"No Warnings to Display\": \"Nincsenek megjelenítendő figyelmeztetések\",\n  \"View\": \"Kilátás\",\n  \"System Build\": \"Rendszerépítés\",\n  \"Online Since\": \"Online óta\",\n  \"Welcome\": \"Üdvözöljük\",\n  \"Welcome back to :app, :name.\": \"Üdv ismét a :app, :name oldalon.\",\n  \"Welcome to :app, :name.\": \"Üdvözlünk a :app, :name oldalon.\",\n  \"This is the first time you have signed in.\": \"Ez az első alkalom, hogy bejelentkezett.\",\n  \"Your last sign in was\": \"Az utolsó bejelentkezésed ekkor volt:\",\n  \"View Access Logs\": \"Hozzáférési naplók megtekintése\",\n  \"Have a great day!\": \"Legyen szép napod!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Nem található műszerfal a megadott sluggal: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Belső forgalmi statisztikák beállításainak kezelése\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"A belső forgalmi statisztikák le vannak tiltva. Engedélyezéséhez szerkessze a konfigurációt a config/cms.php fájlban.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"A belső forgalmi statisztikák jelenleg engedélyezve vannak. A megőrzési időszakot és az időzónát módosíthatja, vagy letilthatja ezt a funkciót a config/cms.php fájlban található beállítások szerkesztésével.\",\n  \"Purging the data...\": \"Adatok törlése...\",\n  \"Purge Data\": \"Adatok törlése\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Biztosan törölni szeretné a belső forgalmi statisztikai adatokat?\",\n  \"Data retention period\": \"Adatmegőrzési időszak\",\n  \"Time zone\": \"Időzóna\",\n  \":retention month(s)\": \":megtartási hónap(ok)\",\n  \"Indefinite\": \"Határozatlan\",\n  \"Internal Traffic Statistics data purged\": \"Belső forgalmi statisztikai adatok törölve\",\n  \"[not set]\": \"[nincs beállítva]\",\n  \"1 day (today) if not set\": \"1 nap (ma), ha nincs beállítva\",\n  \"Apply\": \"Jelentkezés\",\n  \"Ascending\": \"Növekvő\",\n  \"Attribute\": \"Attribútum\",\n  \"Bar\": \"Bár\",\n  \"Chart type\": \"Diagram típusa\",\n  \"Color\": \"Szín\",\n  \"Compare Totals\": \"Összesítések összehasonlítása\",\n  \"Configure\": \"Konfigurálás\",\n  \"Custom\": \"Szokás\",\n  \"Dashboard interval\": \"Műszerfal intervallum\",\n  \"Data source\": \"Adatforrás\",\n  \"Date interval\": \"Dátumintervallum\",\n  \"Day\": \"Nap\",\n  \"Delete\": \"Töröl\",\n  \"Delete Dashboard\": \"Irányítópult törlése\",\n  \"Delete row\": \"Sor törlése\",\n  \"Descending\": \"Csökkenő\",\n  \"Dimension\": \"Dimenzió\",\n  \"Direction\": \"Irány\",\n  \"Disabled\": \"Mozgáskorlátozott\",\n  \"Display\": \"Kijelző\",\n  \"Display [not set]\": \"Kijelző [nincs beállítva]\",\n  \"Display all records\": \"Az összes rekord megjelenítése\",\n  \"Display relative bars\": \"Relatív sávok megjelenítése\",\n  \"Display totals\": \"Összesítések megjelenítése\",\n  \"Edit Dashboard\": \"Irányítópult szerkesztése\",\n  \"Empty values\": \"Üres értékek\",\n  \"Enter a positive number\": \"Adjon meg egy pozitív számot\",\n  \"Enter a positive number or leave empty to display all records.\": \"Adjon meg egy pozitív számot, vagy hagyja üresen az összes rekord megjelenítéséhez.\",\n  \"Equal to\": \"Egyenlő\",\n  \"Export Dashboard\": \"Exportálási irányítópult\",\n  \"Extra table fields\": \"Extra táblamezők\",\n  \"Filters\": \"Szűrők\",\n  \"General\": \"Általános\",\n  \"Greater or equal to\": \"Nagyobb vagy egyenlő\",\n  \"Greater than\": \"Nagyobb, mint\",\n  \"Hide\": \"Elrejt\",\n  \"Horizontal\": \"Vízszintes\",\n  \"Icon\": \"Ikon\",\n  \"Icon Status\": \"Ikon Állapot\",\n  \"Important\": \"Fontos\",\n  \"Includes\": \"Tartalmazza\",\n  \"Information\": \"Információ\",\n  \"Last 30 days\": \"Utolsó 30 nap\",\n  \"Last 7 days\": \"Utolsó 7 nap\",\n  \"Last month\": \"Múlt hónap\",\n  \"Leave empty to disable pagination\": \"Hagyja üresen a lapozás letiltásához\",\n  \"Leave empty to hide the title\": \"Hagyja üresen a cím elrejtéséhez\",\n  \"Less or equal to\": \"Kisebb vagy egyenlő\",\n  \"Less than\": \"Kevesebb, mint\",\n  \"Limit\": \"Határ\",\n  \"Line\": \"Vonal\",\n  \"Link Text\": \"Hivatkozás szövege\",\n  \"Link URL\": \"Link URL-címe\",\n  \"Make Default\": \"Alapértelmezetté tétel\",\n  \"Metric\": \"Metrika\",\n  \"Metrics\": \"Metrikák\",\n  \"Month\": \"Hónap\",\n  \"Notice text\": \"Közlemény szövege\",\n  \"Number of days\": \"Napok száma\",\n  \"One of\": \"Az egyik\",\n  \"One value per line\": \"Egy érték soronként\",\n  \"Operation\": \"Művelet\",\n  \"Order\": \"Rendelés\",\n  \"Past hour\": \"Múlt óra\",\n  \"Past X days\": \"Az elmúlt X napban\",\n  \"Please provide the widget title\": \"Kérjük, adja meg a widget címét\",\n  \"Please select a data source\": \"Kérjük, válasszon ki egy adatforrást\",\n  \"Please select a dimension\": \"Kérjük, válasszon egy dimenziót\",\n  \"Please select an icon\": \"Válasszon egy ikont\",\n  \"Please select metric(s).\": \"Kérjük, válasszon mutató(ka)t.\",\n  \"Prev period\": \"Előző időszak\",\n  \"Quarter\": \"Negyed\",\n  \"Records per page\": \"Rekordok oldalonként\",\n  \"Refresh every minute\": \"Frissítés percenként\",\n  \"Rename Dashboard\": \"Irányítópult átnevezése\",\n  \"Reset Layout\": \"Elrendezés visszaállítása\",\n  \"Reset layout back to default?\": \"Visszaállítja az elrendezést az alapértelmezettre?\",\n  \"Same period last year\": \"Tavaly év azonos időszakában\",\n  \"Section Title\": \"Szakasz címe\",\n  \"Select a dimension and metrics\": \"Válasszon ki egy dimenziót és mutatókat\",\n  \"Select an attribute\": \"Válasszon ki egy attribútumot\",\n  \"Select an operation\": \"Válasszon ki egy műveletet\",\n  \"Select sorting metric or dimension\": \"Rendezési mutató vagy dimenzió kiválasztása\",\n  \"Select the metric color\": \"Válassza ki a metrikus színt\",\n  \"Set the current layout as the default?\": \"Beállítja az aktuális elrendezést alapértelmezettként?\",\n  \"Show Date Interval\": \"Dátumintervallum megjelenítése\",\n  \"Sort by\": \"Rendezés\",\n  \"Sorting\": \"Osztályozás\",\n  \"Sorting & Filtering\": \"Rendezés és szűrés\",\n  \"Stacked Bar\": \"Halmozott sáv\",\n  \"Starts with\": \"Kezdődik ezzel\",\n  \"Success\": \"Siker\",\n  \"The dashboard layout has been reset to default.\": \"A műszerfal elrendezése visszaállt az alapértelmezettre.\",\n  \"The dashboard was successfully updated.\": \"A műszerfal frissítése sikeresen megtörtént.\",\n  \"The limit value must be at least 1\": \"A határértéknek legalább 1-nek kell lennie\",\n  \"This dashboard is now the default layout.\": \"Ez az irányítópult mostantól az alapértelmezett elrendezés.\",\n  \"This month\": \"Ebben a hónapban\",\n  \"This quarter\": \"Ebben a negyedévben\",\n  \"This week\": \"Ezen a héten\",\n  \"This year\": \"Idén\",\n  \"Title\": \"Cím\",\n  \"Today\": \"Ma\",\n  \"Value\": \"Érték\",\n  \"Values\": \"Értékek\",\n  \"Vertical\": \"Függőleges\",\n  \"Warning\": \"Figyelmeztetés\",\n  \"Week\": \"Hét\",\n  \"Year\": \"Év\",\n  \"Yesterday\": \"Tegnap\"\n}"
  },
  {
    "path": "modules/dashboard/lang/id.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Fitur Statistik Lalu Lintas Internal mencatat tampilan halaman, alamat IP, dan data pengguna anonim dasar lainnya ke dalam basis data.\",\n  \"Internal Traffic Statistics\": \"Statistik Lalu Lintas Internal\",\n  \"Purge the Internal Traffic Statistics data\": \"Hapus data Statistik Lalu Lintas Internal\",\n  \"Manage Traffic Settings and Data\": \"Kelola Pengaturan dan Data Lalu Lintas\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Statistik Lalu Lintas Internal mencatat tampilan halaman, alamat IP, dan data pengguna anonim dasar lainnya ke dalam basis data dan menyediakan laporan untuk dasbor. Ketika fitur ini dinonaktifkan, data tidak akan ditulis ke dalam basis data.\",\n  \"Traffic Statistics\": \"Statistik Lalu Lintas\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Zona waktu untuk mencatat kunjungan halaman. Mengubah zona waktu tidak akan memperbarui data yang ada. Jika Anda mengubah zona waktu tanpa menghapus data yang ada, laporan berpotensi menampilkan waktu yang salah untuk hari yang dicatat sebelumnya.\",\n  \"Retention Period (Months)\": \"Periode Retensi (Bulan)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Menentukan durasi penyimpanan data statistik lalu lintas dalam basis data. Setelah periode yang ditentukan berakhir, data terkait akan otomatis dihapus dari basis data. Atur ke 0 atau kosong untuk menyimpan data selamanya.\",\n  \"Data Filters\": \"Filter Data\",\n  \"Exclude Bots\": \"Kecualikan Bot\",\n  \"Automatically ignores known bots using the detection library.\": \"Secara otomatis mengabaikan bot yang diketahui menggunakan pustaka deteksi.\",\n  \"Exclude Administrator Roles\": \"Kecualikan Peran Administrator\",\n  \"Ignores traffic from selected roles.\": \"Mengabaikan lalu lintas dari peran yang dipilih.\",\n  \"Exclude IP Addresses\": \"Kecualikan Alamat IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Permintaan dari alamat ini akan diabaikan dalam statistik.\",\n  \"Exclude Paths\": \"Kecualikan Jalur\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Masukkan satu jalur atau pola per baris untuk mengabaikan URL yang cocok.\",\n  \"Access the Dashboard\": \"Akses Dasbor\",\n  \"Manage Dashboards\": \"Kelola Dasbor\",\n  \"Dashboard\": \"Dasbor\",\n  \"Manage the Internal Traffic Statistics data\": \"Kelola data Statistik Lalu Lintas Internal\",\n  \"Date\": \"Tanggal\",\n  \"Page Path\": \"Jalur Halaman\",\n  \"Referral Domain\": \"Domain Rujukan\",\n  \"Pageviews\": \"Tampilan halaman\",\n  \"Unique Visitors\": \"Pengunjung Unik\",\n  \"Traffic Information\": \"Informasi Lalu Lintas\",\n  \"Website Status\": \"Status Situs Web\",\n  \"Core version information\": \"Informasi versi inti\",\n  \"System Issues\": \"Masalah Sistem\",\n  \"Event Log\": \"Log Peristiwa\",\n  \"Request log\": \"Log permintaan\",\n  \"Request Log\": \"Log Permintaan\",\n  \"Website status information\": \"Informasi status situs web\",\n  \"Add Row\": \"Tambahkan Baris\",\n  \"Edit Row\": \"Edit Baris\",\n  \"Edit Widget\": \"Edit Widget\",\n  \"No Value\": \"Tidak Bernilai\",\n  \"Section\": \"Bagian\",\n  \"This is a text notice widget.\": \"Ini adalah widget pemberitahuan teks.\",\n  \"My Custom Widget\": \"Widget Kustom Saya\",\n  \"Chart\": \"Bagan\",\n  \"Indicator\": \"Indikator\",\n  \"Table\": \"Meja\",\n  \"Text Notice\": \"Pemberitahuan Teks\",\n  \"Widget Configuration\": \"Konfigurasi Widget\",\n  \"Configure the report widget\": \"Konfigurasikan widget laporan.\",\n  \"Width :columns\": \"Lebar :kolom\",\n  \"The widget width, a number between 1 and 10.\": \"Lebar widget, sebuah angka antara 1 dan 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Silakan masukkan lebar widget sebagai angka antara 1 dan 10.\",\n  \"{1} column|[2,Inf] columns\": \"kolom {1}|[2,Inf] kolom\",\n  \"Force new row\": \"Memaksa baris baru\",\n  \"Put the widget in a new row.\": \"Letakkan widget di baris baru.\",\n  \"Widget title\": \"Judul widget\",\n  \"The Widget Title is required.\": \"Judul Widget wajib diisi.\",\n  \"Layout has been reset\": \"Tata letak telah diatur ulang\",\n  \"Current layout is now the default\": \"Tata letak saat ini sekarang menjadi tata letak default.\",\n  \"System status\": \"Status sistem\",\n  \"Pending Software Updates\": \"Pembaruan Perangkat Lunak yang Tertunda\",\n  \"Software is Up to Date\": \"Perangkat Lunak Sudah Diperbarui\",\n  \"Update\": \"Memperbarui\",\n  \"Some Issues Need Attention\": \"Beberapa Masalah Perlu Diperhatikan\",\n  \"No Warnings to Display\": \"Tidak Ada Peringatan yang Perlu Ditampilkan\",\n  \"View\": \"Melihat\",\n  \"System Build\": \"Pembangunan Sistem\",\n  \"Online Since\": \"Online Sejak\",\n  \"Welcome\": \"Selamat datang\",\n  \"Welcome back to :app, :name.\": \"Selamat datang kembali di :app, :name.\",\n  \"Welcome to :app, :name.\": \"Selamat datang di :app, :name.\",\n  \"This is the first time you have signed in.\": \"Ini adalah kali pertama Anda masuk.\",\n  \"Your last sign in was\": \"Login terakhir Anda adalah\",\n  \"View Access Logs\": \"Lihat Log Akses\",\n  \"Have a great day!\": \"Semoga harimu menyenangkan!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Tidak dapat menemukan dasbor dengan slug yang ditentukan: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Kelola pengaturan Statistik Lalu Lintas Internal\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Statistik Lalu Lintas Internal dinonaktifkan. Untuk mengaktifkannya, edit konfigurasi di config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Statistik Lalu Lintas Internal saat ini diaktifkan. Anda dapat menyesuaikan periode penyimpanan dan zona waktu, atau menonaktifkan fitur ini, dengan mengedit pengaturan di config/cms.php.\",\n  \"Purging the data...\": \"Menghapus data...\",\n  \"Purge Data\": \"Hapus Data\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Apakah Anda benar-benar ingin menghapus data Statistik Lalu Lintas Internal?\",\n  \"Data retention period\": \"Periode penyimpanan data\",\n  \"Time zone\": \"Zona waktu\",\n  \":retention month(s)\": \"bulan retensi\",\n  \"Indefinite\": \"Tak terbatas\",\n  \"Internal Traffic Statistics data purged\": \"Data Statistik Lalu Lintas Internal telah dihapus.\",\n  \"[not set]\": \"[belum diatur]\",\n  \"1 day (today) if not set\": \"1 hari (hari ini) jika belum diatur\",\n  \"Apply\": \"Menerapkan\",\n  \"Ascending\": \"Naik\",\n  \"Attribute\": \"Atribut\",\n  \"Bar\": \"Batang\",\n  \"Chart type\": \"Jenis grafik\",\n  \"Color\": \"Warna\",\n  \"Compare Totals\": \"Bandingkan Total\",\n  \"Configure\": \"Konfigurasi\",\n  \"Custom\": \"Kebiasaan\",\n  \"Dashboard interval\": \"Interval dasbor\",\n  \"Data source\": \"Sumber data\",\n  \"Date interval\": \"Interval tanggal\",\n  \"Day\": \"Hari\",\n  \"Delete\": \"Menghapus\",\n  \"Delete Dashboard\": \"Hapus Dasbor\",\n  \"Delete row\": \"Hapus baris\",\n  \"Descending\": \"Menurun\",\n  \"Dimension\": \"Dimensi\",\n  \"Direction\": \"Arah\",\n  \"Disabled\": \"Dengan disabilitas\",\n  \"Display\": \"Menampilkan\",\n  \"Display [not set]\": \"Tampilan [belum diatur]\",\n  \"Display all records\": \"Tampilkan semua catatan\",\n  \"Display relative bars\": \"Tampilkan batang relatif\",\n  \"Display totals\": \"Tampilkan total\",\n  \"Edit Dashboard\": \"Edit Dasbor\",\n  \"Empty values\": \"Nilai kosong\",\n  \"Enter a positive number\": \"Masukkan angka positif\",\n  \"Enter a positive number or leave empty to display all records.\": \"Masukkan angka positif atau biarkan kosong untuk menampilkan semua data.\",\n  \"Equal to\": \"Sama dengan\",\n  \"Export Dashboard\": \"Ekspor Dasbor\",\n  \"Extra table fields\": \"Kolom tabel tambahan\",\n  \"Filters\": \"Filter\",\n  \"General\": \"Umum\",\n  \"Greater or equal to\": \"Lebih besar atau sama dengan\",\n  \"Greater than\": \"Lebih besar dari\",\n  \"Hide\": \"Bersembunyi\",\n  \"Horizontal\": \"Horisontal\",\n  \"Icon\": \"Ikon\",\n  \"Icon Status\": \"Status Ikon\",\n  \"Important\": \"Penting\",\n  \"Includes\": \"Termasuk\",\n  \"Information\": \"Informasi\",\n  \"Last 30 days\": \"30 hari terakhir\",\n  \"Last 7 days\": \"7 hari terakhir\",\n  \"Last month\": \"Bulan lalu\",\n  \"Leave empty to disable pagination\": \"Biarkan kosong untuk menonaktifkan paginasi.\",\n  \"Leave empty to hide the title\": \"Biarkan kosong untuk menyembunyikan judul.\",\n  \"Less or equal to\": \"Kurang dari atau sama dengan\",\n  \"Less than\": \"Kurang dari\",\n  \"Limit\": \"Membatasi\",\n  \"Line\": \"Garis\",\n  \"Link Text\": \"Teks Tautan\",\n  \"Link URL\": \"Tautan URL\",\n  \"Make Default\": \"Jadikan Default\",\n  \"Metric\": \"Metrik\",\n  \"Metrics\": \"Metrik\",\n  \"Month\": \"Bulan\",\n  \"Notice text\": \"Teks pemberitahuan\",\n  \"Number of days\": \"Jumlah hari\",\n  \"One of\": \"Salah satu\",\n  \"One value per line\": \"Satu nilai per baris\",\n  \"Operation\": \"Operasi\",\n  \"Order\": \"Memesan\",\n  \"Past hour\": \"Satu jam yang lalu\",\n  \"Past X days\": \"X hari terakhir\",\n  \"Please provide the widget title\": \"Mohon berikan judul widgetnya.\",\n  \"Please select a data source\": \"Silakan pilih sumber data.\",\n  \"Please select a dimension\": \"Silakan pilih dimensi\",\n  \"Please select an icon\": \"Silakan pilih ikon\",\n  \"Please select metric(s).\": \"Silakan pilih metrik.\",\n  \"Prev period\": \"Periode sebelumnya\",\n  \"Quarter\": \"Seperempat\",\n  \"Records per page\": \"Jumlah catatan per halaman\",\n  \"Refresh every minute\": \"Segarkan setiap menit\",\n  \"Rename Dashboard\": \"Ganti nama Dasbor\",\n  \"Reset Layout\": \"Atur Ulang Tata Letak\",\n  \"Reset layout back to default?\": \"Apakah tata letak perlu dikembalikan ke pengaturan default?\",\n  \"Same period last year\": \"Periode yang sama tahun lalu\",\n  \"Section Title\": \"Judul Bagian\",\n  \"Select a dimension and metrics\": \"Pilih dimensi dan metrik\",\n  \"Select an attribute\": \"Pilih atribut\",\n  \"Select an operation\": \"Pilih operasi\",\n  \"Select sorting metric or dimension\": \"Pilih metrik atau dimensi pengurutan\",\n  \"Select the metric color\": \"Pilih warna metrik\",\n  \"Set the current layout as the default?\": \"Jadikan tata letak saat ini sebagai tata letak default?\",\n  \"Show Date Interval\": \"Tampilkan Interval Tanggal\",\n  \"Sort by\": \"Urutkan berdasarkan\",\n  \"Sorting\": \"Penyortiran\",\n  \"Sorting & Filtering\": \"Pengurutan & Pemfilteran\",\n  \"Stacked Bar\": \"Batang Bertumpuk\",\n  \"Starts with\": \"Dimulai dengan\",\n  \"Success\": \"Kesuksesan\",\n  \"The dashboard layout has been reset to default.\": \"Tata letak dasbor telah diatur ulang ke pengaturan default.\",\n  \"The dashboard was successfully updated.\": \"Dasbor berhasil diperbarui.\",\n  \"The limit value must be at least 1\": \"Nilai batasnya harus minimal 1.\",\n  \"This dashboard is now the default layout.\": \"Dasbor ini sekarang menjadi tata letak default.\",\n  \"This month\": \"Bulan ini\",\n  \"This quarter\": \"Kuartal ini\",\n  \"This week\": \"Minggu ini\",\n  \"This year\": \"tahun ini\",\n  \"Title\": \"Judul\",\n  \"Today\": \"Hari ini\",\n  \"Value\": \"Nilai\",\n  \"Values\": \"Nilai-nilai\",\n  \"Vertical\": \"Vertikal\",\n  \"Warning\": \"Peringatan\",\n  \"Week\": \"Pekan\",\n  \"Year\": \"Tahun\",\n  \"Yesterday\": \"Kemarin\"\n}"
  },
  {
    "path": "modules/dashboard/lang/it.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"La funzione Statistiche sul traffico interno registra nel database le visualizzazioni di pagina, gli indirizzi IP e altri dati anonimi di base degli utenti.\",\n  \"Internal Traffic Statistics\": \"Statistiche sul traffico interno\",\n  \"Purge the Internal Traffic Statistics data\": \"Elimina i dati delle statistiche sul traffico interno\",\n  \"Manage Traffic Settings and Data\": \"Gestisci le impostazioni e i dati del traffico\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Le statistiche sul traffico interno registrano le visualizzazioni di pagina, gli indirizzi IP e altri dati anonimi di base degli utenti nel database e forniscono report per la dashboard. Quando la funzionalità è disattivata, i dati non vengono scritti nel database.\",\n  \"Traffic Statistics\": \"Statistiche sul traffico\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Fuso orario per registrare le visualizzazioni di pagina. La modifica del fuso orario non aggiornerà i dati esistenti. Se modifichi il fuso orario senza cancellare i dati esistenti, i report potrebbero visualizzare orari errati per i giorni registrati in precedenza.\",\n  \"Retention Period (Months)\": \"Periodo di conservazione (mesi)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Determina la durata di conservazione dei dati statistici sul traffico nel database. Allo scadere del periodo impostato, i dati corrispondenti vengono automaticamente eliminati dal database. Impostare su 0 o vuoto per conservare i record per sempre.\",\n  \"Data Filters\": \"Filtri dati\",\n  \"Exclude Bots\": \"Escludi bot\",\n  \"Automatically ignores known bots using the detection library.\": \"Ignora automaticamente i bot noti utilizzando la libreria di rilevamento.\",\n  \"Exclude Administrator Roles\": \"Escludi ruoli di amministratore\",\n  \"Ignores traffic from selected roles.\": \"Ignora il traffico proveniente dai ruoli selezionati.\",\n  \"Exclude IP Addresses\": \"Escludi indirizzi IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Le richieste provenienti da questi indirizzi verranno ignorate nelle statistiche.\",\n  \"Exclude Paths\": \"Escludi percorsi\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Inserisci un percorso o un modello per riga per ignorare gli URL corrispondenti.\",\n  \"Access the Dashboard\": \"Accedi alla Dashboard\",\n  \"Manage Dashboards\": \"Gestisci dashboard\",\n  \"Dashboard\": \"Pannello di controllo\",\n  \"Manage the Internal Traffic Statistics data\": \"Gestire i dati delle statistiche sul traffico interno\",\n  \"Date\": \"Data\",\n  \"Page Path\": \"Percorso della pagina\",\n  \"Referral Domain\": \"Dominio di riferimento\",\n  \"Pageviews\": \"Visualizzazioni di pagina\",\n  \"Unique Visitors\": \"Visitatori unici\",\n  \"Traffic Information\": \"Informazioni sul traffico\",\n  \"Website Status\": \"Stato del sito web\",\n  \"Core version information\": \"Informazioni sulla versione principale\",\n  \"System Issues\": \"Problemi di sistema\",\n  \"Event Log\": \"Registro eventi\",\n  \"Request log\": \"Registro delle richieste\",\n  \"Request Log\": \"Registro delle richieste\",\n  \"Website status information\": \"Informazioni sullo stato del sito web\",\n  \"Add Row\": \"Aggiungi riga\",\n  \"Edit Row\": \"Modifica riga\",\n  \"Edit Widget\": \"Modifica widget\",\n  \"No Value\": \"Nessun valore\",\n  \"Section\": \"Sezione\",\n  \"This is a text notice widget.\": \"Questo è un widget di avviso di testo.\",\n  \"My Custom Widget\": \"Il mio widget personalizzato\",\n  \"Chart\": \"Grafico\",\n  \"Indicator\": \"Indicatore\",\n  \"Table\": \"Tavolo\",\n  \"Text Notice\": \"Avviso di testo\",\n  \"Widget Configuration\": \"Configurazione del widget\",\n  \"Configure the report widget\": \"Configurare il widget del report\",\n  \"Width :columns\": \"Larghezza: colonne\",\n  \"The widget width, a number between 1 and 10.\": \"Larghezza del widget, un numero compreso tra 1 e 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Inserisci la larghezza del widget come numero compreso tra 1 e 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} colonna|[2,Inf] colonne\",\n  \"Force new row\": \"Forza nuova riga\",\n  \"Put the widget in a new row.\": \"Posiziona il widget in una nuova riga.\",\n  \"Widget title\": \"Titolo del widget\",\n  \"The Widget Title is required.\": \"Il titolo del widget è obbligatorio.\",\n  \"Layout has been reset\": \"Il layout è stato ripristinato\",\n  \"Current layout is now the default\": \"Il layout corrente è ora quello predefinito\",\n  \"System status\": \"Stato del sistema\",\n  \"Pending Software Updates\": \"Aggiornamenti software in sospeso\",\n  \"Software is Up to Date\": \"Il software è aggiornato\",\n  \"Update\": \"Aggiornamento\",\n  \"Some Issues Need Attention\": \"Alcune questioni richiedono attenzione\",\n  \"No Warnings to Display\": \"Nessun avviso da visualizzare\",\n  \"View\": \"Visualizzazione\",\n  \"System Build\": \"Costruzione del sistema\",\n  \"Online Since\": \"Online da\",\n  \"Welcome\": \"Benvenuto\",\n  \"Welcome back to :app, :name.\": \"Bentornati su :app, :name.\",\n  \"Welcome to :app, :name.\": \"Benvenuti su :app, :name.\",\n  \"This is the first time you have signed in.\": \"Questa è la prima volta che effettui l'accesso.\",\n  \"Your last sign in was\": \"Il tuo ultimo accesso è stato\",\n  \"View Access Logs\": \"Visualizza i registri di accesso\",\n  \"Have a great day!\": \"Vi auguro una buona giornata!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Impossibile trovare una dashboard con lo slug specificato: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Gestisci le impostazioni delle statistiche sul traffico interno\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Le statistiche sul traffico interno sono disabilitate. Per abilitarle, modifica la configurazione in config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Le statistiche sul traffico interno sono attualmente abilitate. È possibile modificare il periodo di conservazione e il fuso orario, oppure disattivare questa funzionalità, modificando le impostazioni in config/cms.php.\",\n  \"Purging the data...\": \"Eliminazione dei dati...\",\n  \"Purge Data\": \"Elimina dati\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Vuoi davvero eliminare i dati delle statistiche sul traffico interno?\",\n  \"Data retention period\": \"Periodo di conservazione dei dati\",\n  \"Time zone\": \"Fuso orario\",\n  \":retention month(s)\": \":mese/i di conservazione\",\n  \"Indefinite\": \"Indefinito\",\n  \"Internal Traffic Statistics data purged\": \"Dati delle statistiche sul traffico interno eliminati\",\n  \"[not set]\": \"[non impostato]\",\n  \"1 day (today) if not set\": \"1 giorno (oggi) se non impostato\",\n  \"Apply\": \"Fare domanda a\",\n  \"Ascending\": \"Ascendente\",\n  \"Attribute\": \"Attributo\",\n  \"Bar\": \"Sbarra\",\n  \"Chart type\": \"Tipo di grafico\",\n  \"Color\": \"Colore\",\n  \"Compare Totals\": \"Confronta i totali\",\n  \"Configure\": \"Configurare\",\n  \"Custom\": \"Costume\",\n  \"Dashboard interval\": \"Intervallo del cruscotto\",\n  \"Data source\": \"Fonte dei dati\",\n  \"Date interval\": \"Intervallo di date\",\n  \"Day\": \"Giorno\",\n  \"Delete\": \"Eliminare\",\n  \"Delete Dashboard\": \"Elimina Dashboard\",\n  \"Delete row\": \"Elimina riga\",\n  \"Descending\": \"Discendente\",\n  \"Dimension\": \"Dimensione\",\n  \"Direction\": \"Direzione\",\n  \"Disabled\": \"Disabili\",\n  \"Display\": \"Display\",\n  \"Display [not set]\": \"Visualizza [non impostato]\",\n  \"Display all records\": \"Visualizza tutti i record\",\n  \"Display relative bars\": \"Visualizza barre relative\",\n  \"Display totals\": \"Visualizza i totali\",\n  \"Edit Dashboard\": \"Modifica Dashboard\",\n  \"Empty values\": \"Valori vuoti\",\n  \"Enter a positive number\": \"Inserisci un numero positivo\",\n  \"Enter a positive number or leave empty to display all records.\": \"Inserisci un numero positivo o lascia vuoto per visualizzare tutti i record.\",\n  \"Equal to\": \"Uguale a\",\n  \"Export Dashboard\": \"Dashboard di esportazione\",\n  \"Extra table fields\": \"Campi tabella aggiuntivi\",\n  \"Filters\": \"Filtri\",\n  \"General\": \"Generale\",\n  \"Greater or equal to\": \"Maggiore o uguale a\",\n  \"Greater than\": \"Maggiore di\",\n  \"Hide\": \"Nascondere\",\n  \"Horizontal\": \"Orizzontale\",\n  \"Icon\": \"Icona\",\n  \"Icon Status\": \"Stato dell'icona\",\n  \"Important\": \"Importante\",\n  \"Includes\": \"Include\",\n  \"Information\": \"Informazioni\",\n  \"Last 30 days\": \"Ultimi 30 giorni\",\n  \"Last 7 days\": \"Ultimi 7 giorni\",\n  \"Last month\": \"Il mese scorso\",\n  \"Leave empty to disable pagination\": \"Lasciare vuoto per disabilitare la paginazione\",\n  \"Leave empty to hide the title\": \"Lascia vuoto per nascondere il titolo\",\n  \"Less or equal to\": \"Minore o uguale a\",\n  \"Less than\": \"Meno di\",\n  \"Limit\": \"Limite\",\n  \"Line\": \"Linea\",\n  \"Link Text\": \"Testo del collegamento\",\n  \"Link URL\": \"URL del collegamento\",\n  \"Make Default\": \"Rendi predefinito\",\n  \"Metric\": \"Metrico\",\n  \"Metrics\": \"Metrica\",\n  \"Month\": \"Mese\",\n  \"Notice text\": \"Testo dell'avviso\",\n  \"Number of days\": \"Numero di giorni\",\n  \"One of\": \"Uno di\",\n  \"One value per line\": \"Un valore per riga\",\n  \"Operation\": \"Operazione\",\n  \"Order\": \"Ordine\",\n  \"Past hour\": \"Ultima ora\",\n  \"Past X days\": \"Ultimi X giorni\",\n  \"Please provide the widget title\": \"Si prega di fornire il titolo del widget\",\n  \"Please select a data source\": \"Seleziona una fonte dati\",\n  \"Please select a dimension\": \"Seleziona una dimensione\",\n  \"Please select an icon\": \"Seleziona un'icona\",\n  \"Please select metric(s).\": \"Seleziona la/le metrica/e.\",\n  \"Prev period\": \"Periodo precedente\",\n  \"Quarter\": \"Trimestre\",\n  \"Records per page\": \"Record per pagina\",\n  \"Refresh every minute\": \"Aggiorna ogni minuto\",\n  \"Rename Dashboard\": \"Rinomina Dashboard\",\n  \"Reset Layout\": \"Ripristina layout\",\n  \"Reset layout back to default?\": \"Ripristinare il layout predefinito?\",\n  \"Same period last year\": \"Stesso periodo dell'anno scorso\",\n  \"Section Title\": \"Titolo della sezione\",\n  \"Select a dimension and metrics\": \"Seleziona una dimensione e le metriche\",\n  \"Select an attribute\": \"Seleziona un attributo\",\n  \"Select an operation\": \"Seleziona un'operazione\",\n  \"Select sorting metric or dimension\": \"Seleziona la metrica o la dimensione di ordinamento\",\n  \"Select the metric color\": \"Seleziona il colore della metrica\",\n  \"Set the current layout as the default?\": \"Impostare il layout corrente come predefinito?\",\n  \"Show Date Interval\": \"Mostra intervallo di data\",\n  \"Sort by\": \"Ordina per\",\n  \"Sorting\": \"Ordinamento\",\n  \"Sorting & Filtering\": \"Ordinamento e filtraggio\",\n  \"Stacked Bar\": \"Barra impilata\",\n  \"Starts with\": \"Inizia con\",\n  \"Success\": \"Successo\",\n  \"The dashboard layout has been reset to default.\": \"Il layout della dashboard è stato ripristinato ai valori predefiniti.\",\n  \"The dashboard was successfully updated.\": \"La dashboard è stata aggiornata con successo.\",\n  \"The limit value must be at least 1\": \"Il valore limite deve essere almeno 1\",\n  \"This dashboard is now the default layout.\": \"Questa dashboard è ora il layout predefinito.\",\n  \"This month\": \"Questo mese\",\n  \"This quarter\": \"Questo trimestre\",\n  \"This week\": \"Questa settimana\",\n  \"This year\": \"Quest'anno\",\n  \"Title\": \"Titolo\",\n  \"Today\": \"Oggi\",\n  \"Value\": \"Valore\",\n  \"Values\": \"Valori\",\n  \"Vertical\": \"Verticale\",\n  \"Warning\": \"Avvertimento\",\n  \"Week\": \"Settimana\",\n  \"Year\": \"Anno\",\n  \"Yesterday\": \"Ieri\"\n}"
  },
  {
    "path": "modules/dashboard/lang/ja.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"内部トラフィック統計機能は、ページビュー、IP アドレス、その他の基本的な匿名ユーザー データをデータベースに記録します。\",\n  \"Internal Traffic Statistics\": \"内部トラフィック統計\",\n  \"Purge the Internal Traffic Statistics data\": \"内部トラフィック統計データを消去する\",\n  \"Manage Traffic Settings and Data\": \"トラフィック設定とデータの管理\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"内部トラフィック統計は、ページビュー、IPアドレス、その他の基本的な匿名ユーザーデータをデータベースに記録し、ダッシュボードにレポートを提供します。この機能が無効になっている場合、データはデータベースに書き込まれません。\",\n  \"Traffic Statistics\": \"交通統計\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"ページビューを記録するタイムゾーン。タイムゾーンを変更しても既存のデータは更新されません。既存のデータを消去せずにタイムゾーンを変更すると、以前に記録された日付のレポートに誤った時刻が表示される可能性があります。\",\n  \"Retention Period (Months)\": \"保存期間（月）\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"トラフィック統計データをデータベースに保存する期間を指定します。設定期間が経過すると、対応するデータはデータベースから自動的に削除されます。レコードを無期限に保持するには、0または空の値を設定します。\",\n  \"Data Filters\": \"データフィルター\",\n  \"Exclude Bots\": \"ボットを除外\",\n  \"Automatically ignores known bots using the detection library.\": \"検出ライブラリを使用して既知のボットを自動的に無視します。\",\n  \"Exclude Administrator Roles\": \"管理者ロールを除外する\",\n  \"Ignores traffic from selected roles.\": \"選択したロールからのトラフィックを無視します。\",\n  \"Exclude IP Addresses\": \"IPアドレスを除外する\",\n  \"Requests from these addresses will be ignored in statistics.\": \"これらのアドレスからのリクエストは統計では無視されます。\",\n  \"Exclude Paths\": \"除外パス\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"一致する URL を無視するには、行ごとに 1 つのパスまたはパターンを入力します。\",\n  \"Access the Dashboard\": \"ダッシュボードにアクセスする\",\n  \"Manage Dashboards\": \"ダッシュボードの管理\",\n  \"Dashboard\": \"ダッシュボード\",\n  \"Manage the Internal Traffic Statistics data\": \"内部トラフィック統計データの管理\",\n  \"Date\": \"日付\",\n  \"Page Path\": \"ページパス\",\n  \"Referral Domain\": \"紹介ドメイン\",\n  \"Pageviews\": \"ページビュー\",\n  \"Unique Visitors\": \"ユニークビジター数\",\n  \"Traffic Information\": \"交通情報\",\n  \"Website Status\": \"ウェブサイトのステータス\",\n  \"Core version information\": \"コアバージョン情報\",\n  \"System Issues\": \"システムの問題\",\n  \"Event Log\": \"イベントログ\",\n  \"Request log\": \"リクエストログ\",\n  \"Request Log\": \"リクエストログ\",\n  \"Website status information\": \"ウェブサイトのステータス情報\",\n  \"Add Row\": \"行を追加\",\n  \"Edit Row\": \"行を編集\",\n  \"Edit Widget\": \"ウィジェットを編集\",\n  \"No Value\": \"価値なし\",\n  \"Section\": \"セクション\",\n  \"This is a text notice widget.\": \"テキスト通知ウィジェットです。\",\n  \"My Custom Widget\": \"カスタムウィジェット\",\n  \"Chart\": \"チャート\",\n  \"Indicator\": \"インジケータ\",\n  \"Table\": \"テーブル\",\n  \"Text Notice\": \"テキスト通知\",\n  \"Widget Configuration\": \"ウィジェットの設定\",\n  \"Configure the report widget\": \"レポートウィジェットを設定する\",\n  \"Width :columns\": \"幅:列\",\n  \"The widget width, a number between 1 and 10.\": \"ウィジェットの幅。1 から 10 までの数値。\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"ウィジェットの幅を1〜10の数値で入力してください。\",\n  \"{1} column|[2,Inf] columns\": \"{1} 列|[2,Inf] 列\",\n  \"Force new row\": \"新しい行を強制する\",\n  \"Put the widget in a new row.\": \"ウィジェットを新しい行に配置します。\",\n  \"Widget title\": \"ウィジェットのタイトル\",\n  \"The Widget Title is required.\": \"ウィジェットのタイトルは必須です。\",\n  \"Layout has been reset\": \"レイアウトがリセットされました\",\n  \"Current layout is now the default\": \"現在のレイアウトがデフォルトになりました\",\n  \"System status\": \"システムステータス\",\n  \"Pending Software Updates\": \"保留中のソフトウェア更新\",\n  \"Software is Up to Date\": \"ソフトウェアは最新です\",\n  \"Update\": \"アップデート\",\n  \"Some Issues Need Attention\": \"注意が必要な問題\",\n  \"No Warnings to Display\": \"表示する警告はありません\",\n  \"View\": \"ビュー\",\n  \"System Build\": \"システム構築\",\n  \"Online Since\": \"オンライン開始\",\n  \"Welcome\": \"いらっしゃいませ\",\n  \"Welcome back to :app, :name.\": \":app、:name へようこそ。\",\n  \"Welcome to :app, :name.\": \":app、:name へようこそ。\",\n  \"This is the first time you have signed in.\": \"初めてサインインします。\",\n  \"Your last sign in was\": \"前回のサインインは\",\n  \"View Access Logs\": \"アクセスログを表示\",\n  \"Have a great day!\": \"すてきな一日を！\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"指定されたスラッグ: \\\":slug\\\" を持つダッシュボードが見つかりません。\",\n  \"Manage Internal Traffic Statistics settings\": \"内部トラフィック統計設定を管理する\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"内部トラフィック統計は無効になっています。有効にするには、config/cms.php の設定を編集してください。\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"内部トラフィック統計は現在有効になっています。config/cms.php の設定を編集することで、保存期間とタイムゾーンを調整したり、この機能を無効にしたりできます。\",\n  \"Purging the data...\": \"データを消去しています...\",\n  \"Purge Data\": \"データの消去\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"本当に内部トラフィック統計データを消去しますか?\",\n  \"Data retention period\": \"データ保持期間\",\n  \"Time zone\": \"タイムゾーン\",\n  \":retention month(s)\": \":保存期間(月)\",\n  \"Indefinite\": \"不定\",\n  \"Internal Traffic Statistics data purged\": \"内部トラフィック統計データが削除されました\",\n  \"[not set]\": \"[未設定]\",\n  \"1 day (today) if not set\": \"設定されていない場合は1日（今日）\",\n  \"Apply\": \"適用する\",\n  \"Ascending\": \"上昇\",\n  \"Attribute\": \"属性\",\n  \"Bar\": \"バー\",\n  \"Chart type\": \"チャートの種類\",\n  \"Color\": \"色\",\n  \"Compare Totals\": \"合計を比較する\",\n  \"Configure\": \"設定\",\n  \"Custom\": \"カスタム\",\n  \"Dashboard interval\": \"ダッシュボード間隔\",\n  \"Data source\": \"データソース\",\n  \"Date interval\": \"日付間隔\",\n  \"Day\": \"日\",\n  \"Delete\": \"消去\",\n  \"Delete Dashboard\": \"ダッシュボードを削除\",\n  \"Delete row\": \"行を削除\",\n  \"Descending\": \"降順\",\n  \"Dimension\": \"寸法\",\n  \"Direction\": \"方向\",\n  \"Disabled\": \"無効\",\n  \"Display\": \"画面\",\n  \"Display [not set]\": \"表示 [未設定]\",\n  \"Display all records\": \"すべてのレコードを表示\",\n  \"Display relative bars\": \"相対バーを表示\",\n  \"Display totals\": \"合計を表示\",\n  \"Edit Dashboard\": \"ダッシュボードを編集\",\n  \"Empty values\": \"空の値\",\n  \"Enter a positive number\": \"正の数を入力してください\",\n  \"Enter a positive number or leave empty to display all records.\": \"正の数を入力するか、空白のままにしてすべてのレコードを表示します。\",\n  \"Equal to\": \"等しい\",\n  \"Export Dashboard\": \"ダッシュボードのエクスポート\",\n  \"Extra table fields\": \"追加のテーブルフィールド\",\n  \"Filters\": \"フィルター\",\n  \"General\": \"一般的な\",\n  \"Greater or equal to\": \"より大きいか等しい\",\n  \"Greater than\": \"より大きい\",\n  \"Hide\": \"隠れる\",\n  \"Horizontal\": \"水平\",\n  \"Icon\": \"アイコン\",\n  \"Icon Status\": \"アイコンのステータス\",\n  \"Important\": \"重要\",\n  \"Includes\": \"含まれるもの\",\n  \"Information\": \"情報\",\n  \"Last 30 days\": \"過去30日間\",\n  \"Last 7 days\": \"過去7日間\",\n  \"Last month\": \"先月\",\n  \"Leave empty to disable pagination\": \"ページ区切りを無効にするには空白のままにしてください\",\n  \"Leave empty to hide the title\": \"タイトルを非表示にするには空白のままにしてください\",\n  \"Less or equal to\": \"以下\",\n  \"Less than\": \"未満\",\n  \"Limit\": \"制限\",\n  \"Line\": \"ライン\",\n  \"Link Text\": \"リンクテキスト\",\n  \"Link URL\": \"リンクURL\",\n  \"Make Default\": \"デフォルトにする\",\n  \"Metric\": \"メトリック\",\n  \"Metrics\": \"メトリクス\",\n  \"Month\": \"月\",\n  \"Notice text\": \"通知テキスト\",\n  \"Number of days\": \"日数\",\n  \"One of\": \"1つ\",\n  \"One value per line\": \"1行に1つの値\",\n  \"Operation\": \"手術\",\n  \"Order\": \"注文\",\n  \"Past hour\": \"過去1時間\",\n  \"Past X days\": \"過去X日間\",\n  \"Please provide the widget title\": \"ウィジェットのタイトルを入力してください\",\n  \"Please select a data source\": \"データソースを選択してください\",\n  \"Please select a dimension\": \"寸法を選択してください\",\n  \"Please select an icon\": \"アイコンを選択してください\",\n  \"Please select metric(s).\": \"メトリックを選択してください。\",\n  \"Prev period\": \"前期\",\n  \"Quarter\": \"四半期\",\n  \"Records per page\": \"ページあたりのレコード数\",\n  \"Refresh every minute\": \"1分ごとに更新\",\n  \"Rename Dashboard\": \"ダッシュボードの名前を変更する\",\n  \"Reset Layout\": \"レイアウトをリセット\",\n  \"Reset layout back to default?\": \"レイアウトをデフォルトに戻しますか?\",\n  \"Same period last year\": \"前年同期\",\n  \"Section Title\": \"セクションタイトル\",\n  \"Select a dimension and metrics\": \"ディメンションと指標を選択する\",\n  \"Select an attribute\": \"属性を選択\",\n  \"Select an operation\": \"操作を選択\",\n  \"Select sorting metric or dimension\": \"並べ替えの指標またはディメンションを選択\",\n  \"Select the metric color\": \"メトリックの色を選択\",\n  \"Set the current layout as the default?\": \"現在のレイアウトをデフォルトとして設定しますか?\",\n  \"Show Date Interval\": \"日付間隔を表示\",\n  \"Sort by\": \"並べ替え\",\n  \"Sorting\": \"ソート\",\n  \"Sorting & Filtering\": \"並べ替えとフィルタリング\",\n  \"Stacked Bar\": \"積み上げ棒グラフ\",\n  \"Starts with\": \"始まりは\",\n  \"Success\": \"成功\",\n  \"The dashboard layout has been reset to default.\": \"ダッシュボードのレイアウトがデフォルトにリセットされました。\",\n  \"The dashboard was successfully updated.\": \"ダッシュボードは正常に更新されました。\",\n  \"The limit value must be at least 1\": \"制限値は少なくとも1である必要があります\",\n  \"This dashboard is now the default layout.\": \"このダッシュボードがデフォルトのレイアウトになりました。\",\n  \"This month\": \"今月\",\n  \"This quarter\": \"今四半期\",\n  \"This week\": \"今週\",\n  \"This year\": \"今年\",\n  \"Title\": \"タイトル\",\n  \"Today\": \"今日\",\n  \"Value\": \"価値\",\n  \"Values\": \"価値観\",\n  \"Vertical\": \"垂直\",\n  \"Warning\": \"警告\",\n  \"Week\": \"週\",\n  \"Year\": \"年\",\n  \"Yesterday\": \"昨日\"\n}"
  },
  {
    "path": "modules/dashboard/lang/lt.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Vidinio srauto statistikos funkcija registruoja puslapių peržiūras, IP adresus ir kitus pagrindinius anoniminius naudotojų duomenis duomenų bazėje.\",\n  \"Internal Traffic Statistics\": \"Vidinio srauto statistika\",\n  \"Purge the Internal Traffic Statistics data\": \"Išvalyti vidinius srauto statistikos duomenis\",\n  \"Manage Traffic Settings and Data\": \"Eismo nustatymų ir duomenų tvarkymas\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Vidinio srauto statistikos funkcija registruoja peržiūrėtų puslapių skaičių, IP adresus ir kitus pagrindinius anoniminius naudotojų duomenis duomenų bazėje ir teikia ataskaitas ataskaitų suvestinei. Kai ši funkcija išjungta, duomenys į duomenų bazę neįrašomi.\",\n  \"Traffic Statistics\": \"Eismo statistika\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Laiko juosta, kurioje registruojamos peržiūrų puslapiai. Pakeitus laiko juostą, esami duomenys nebus atnaujinti. Jei pakeisite laiko juostą neištrindami esamų duomenų, ataskaitose gali būti rodomas neteisingas anksčiau registruotų dienų laikas.\",\n  \"Retention Period (Months)\": \"Saugojimo laikotarpis (mėnesiais)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Nustato, kiek laiko srauto statistikos duomenys turėtų būti saugomi duomenų bazėje. Pasibaigus nustatytam laikotarpiui, atitinkami duomenys automatiškai ištrinami iš duomenų bazės. Nustatykite reikšmę 0 arba tuščią, kad įrašai būtų saugomi visam laikui.\",\n  \"Data Filters\": \"Duomenų filtrai\",\n  \"Exclude Bots\": \"Išskirti robotus\",\n  \"Automatically ignores known bots using the detection library.\": \"Automatiškai ignoruoja žinomus robotus naudodamas aptikimo biblioteką.\",\n  \"Exclude Administrator Roles\": \"Išskirti administratoriaus vaidmenis\",\n  \"Ignores traffic from selected roles.\": \"Ignoruoja srautą iš pasirinktų vaidmenų.\",\n  \"Exclude IP Addresses\": \"Neįtraukti IP adresų\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Užklausos iš šių adresų statistikoje bus ignoruojamos.\",\n  \"Exclude Paths\": \"Išskirti kelius\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Įveskite po vieną kelią arba šabloną kiekvienoje eilutėje, kad nepaisytumėte sutampančių URL.\",\n  \"Access the Dashboard\": \"Prieiga prie prietaisų skydelio\",\n  \"Manage Dashboards\": \"Valdyti ataskaitų sritis\",\n  \"Dashboard\": \"Prietaisų skydelis\",\n  \"Manage the Internal Traffic Statistics data\": \"Tvarkyti vidinio srauto statistikos duomenis\",\n  \"Date\": \"Data\",\n  \"Page Path\": \"Puslapio kelias\",\n  \"Referral Domain\": \"Nukreipimo domenas\",\n  \"Pageviews\": \"Puslapių peržiūros\",\n  \"Unique Visitors\": \"Unikalūs lankytojai\",\n  \"Traffic Information\": \"Eismo informacija\",\n  \"Website Status\": \"Svetainės būsena\",\n  \"Core version information\": \"Pagrindinės versijos informacija\",\n  \"System Issues\": \"Sistemos problemos\",\n  \"Event Log\": \"Įvykių žurnalas\",\n  \"Request log\": \"Užklausų žurnalas\",\n  \"Request Log\": \"Užklausų žurnalas\",\n  \"Website status information\": \"Svetainės būsenos informacija\",\n  \"Add Row\": \"Pridėti eilutę\",\n  \"Edit Row\": \"Redaguoti eilutę\",\n  \"Edit Widget\": \"Redaguoti valdiklį\",\n  \"No Value\": \"Nėra vertės\",\n  \"Section\": \"Skyrius\",\n  \"This is a text notice widget.\": \"Tai tekstinių pranešimų valdiklis.\",\n  \"My Custom Widget\": \"Mano pasirinktinis valdiklis\",\n  \"Chart\": \"Diagrama\",\n  \"Indicator\": \"Indikatorius\",\n  \"Table\": \"Lentelė\",\n  \"Text Notice\": \"Tekstinis pranešimas\",\n  \"Widget Configuration\": \"Valdiklio konfigūracija\",\n  \"Configure the report widget\": \"Ataskaitos valdiklio konfigūravimas\",\n  \"Width :columns\": \"Plotis: stulpeliai\",\n  \"The widget width, a number between 1 and 10.\": \"Valdiklio plotis, skaičius nuo 1 iki 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Įveskite valdiklio plotį skaičiumi nuo 1 iki 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} stulpelis|[2,Inf] stulpeliai\",\n  \"Force new row\": \"Priverstinai sukurti naują eilutę\",\n  \"Put the widget in a new row.\": \"Įdėkite valdiklį į naują eilutę.\",\n  \"Widget title\": \"Valdiklio pavadinimas\",\n  \"The Widget Title is required.\": \"Būtinas valdiklio pavadinimas.\",\n  \"Layout has been reset\": \"Išdėstymas buvo nustatytas iš naujo\",\n  \"Current layout is now the default\": \"Dabartinis išdėstymas dabar yra numatytasis\",\n  \"System status\": \"Sistemos būsena\",\n  \"Pending Software Updates\": \"Laukiami programinės įrangos atnaujinimai\",\n  \"Software is Up to Date\": \"Programinė įranga yra atnaujinta\",\n  \"Update\": \"Atnaujinimas\",\n  \"Some Issues Need Attention\": \"Kai kuriems klausimams reikia skirti dėmesio\",\n  \"No Warnings to Display\": \"Nėra įspėjimų, kuriuos reikėtų rodyti\",\n  \"View\": \"Peržiūrėti\",\n  \"System Build\": \"Sistemos kūrimas\",\n  \"Online Since\": \"Prisijungęs nuo\",\n  \"Welcome\": \"Sveiki atvykę\",\n  \"Welcome back to :app, :name.\": \"Sveiki sugrįžę į :app, :name.\",\n  \"Welcome to :app, :name.\": \"Sveiki atvykę į :app, :name.\",\n  \"This is the first time you have signed in.\": \"Tai pirmas kartas, kai prisijungiate.\",\n  \"Your last sign in was\": \"Jūsų paskutinis prisijungimas buvo\",\n  \"View Access Logs\": \"Peržiūrėti prieigos žurnalus\",\n  \"Have a great day!\": \"Geros dienos!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Nepavyksta rasti ataskaitų srities su nurodytu slug kodu: „:slug“.\",\n  \"Manage Internal Traffic Statistics settings\": \"Tvarkyti vidinio srauto statistikos nustatymus\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Vidinio srauto statistika išjungta. Norėdami ją įjungti, redaguokite konfigūraciją faile config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Vidinio srauto statistika šiuo metu įjungta. Galite koreguoti saugojimo laikotarpį ir laiko juostą arba išjungti šią funkciją redaguodami nustatymus faile config/cms.php.\",\n  \"Purging the data...\": \"Valomi duomenys...\",\n  \"Purge Data\": \"Išvalyti duomenis\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Ar tikrai norite išvalyti vidinio srauto statistikos duomenis?\",\n  \"Data retention period\": \"Duomenų saugojimo laikotarpis\",\n  \"Time zone\": \"Laiko juosta\",\n  \":retention month(s)\": \":saugojimo mėnuo(-iai)\",\n  \"Indefinite\": \"Neribotas\",\n  \"Internal Traffic Statistics data purged\": \"Vidiniai srauto statistikos duomenys išvalyti\",\n  \"[not set]\": \"[nenustatyta]\",\n  \"1 day (today) if not set\": \"1 diena (šiandien), jei nenustatyta\",\n  \"Apply\": \"Taikyti\",\n  \"Ascending\": \"Didėjančia tvarka\",\n  \"Attribute\": \"Atributas\",\n  \"Bar\": \"Baras\",\n  \"Chart type\": \"Diagramos tipas\",\n  \"Color\": \"Spalva\",\n  \"Compare Totals\": \"Palyginti sumas\",\n  \"Configure\": \"Konfigūruoti\",\n  \"Custom\": \"Pasirinktinis\",\n  \"Dashboard interval\": \"Prietaisų skydelio intervalas\",\n  \"Data source\": \"Duomenų šaltinis\",\n  \"Date interval\": \"Datos intervalas\",\n  \"Day\": \"Diena\",\n  \"Delete\": \"Ištrinti\",\n  \"Delete Dashboard\": \"Ištrinti prietaisų skydelį\",\n  \"Delete row\": \"Ištrinti eilutę\",\n  \"Descending\": \"Mažėjanti\",\n  \"Dimension\": \"Matmuo\",\n  \"Direction\": \"Kryptis\",\n  \"Disabled\": \"Neįgalus\",\n  \"Display\": \"Ekranas\",\n  \"Display [not set]\": \"Rodyti [nenustatyta]\",\n  \"Display all records\": \"Rodyti visus įrašus\",\n  \"Display relative bars\": \"Rodyti santykinius stulpelius\",\n  \"Display totals\": \"Rodyti bendras sumas\",\n  \"Edit Dashboard\": \"Redaguoti prietaisų skydelį\",\n  \"Empty values\": \"Tuščios reikšmės\",\n  \"Enter a positive number\": \"Įveskite teigiamą skaičių\",\n  \"Enter a positive number or leave empty to display all records.\": \"Įveskite teigiamą skaičių arba palikite lauką tuščią, kad būtų rodomi visi įrašai.\",\n  \"Equal to\": \"Lygus\",\n  \"Export Dashboard\": \"Eksportuoti ataskaitų suvestinę\",\n  \"Extra table fields\": \"Papildomi lentelės laukai\",\n  \"Filters\": \"Filtrai\",\n  \"General\": \"Bendra\",\n  \"Greater or equal to\": \"Didesnis arba lygus\",\n  \"Greater than\": \"Didesnis nei\",\n  \"Hide\": \"Slėpti\",\n  \"Horizontal\": \"Horizontaliai\",\n  \"Icon\": \"Piktograma\",\n  \"Icon Status\": \"Piktograma Būsena\",\n  \"Important\": \"Svarbu\",\n  \"Includes\": \"Įskaitant\",\n  \"Information\": \"Informacija\",\n  \"Last 30 days\": \"Paskutinės 30 dienų\",\n  \"Last 7 days\": \"Paskutinės 7 dienos\",\n  \"Last month\": \"Praėjusį mėnesį\",\n  \"Leave empty to disable pagination\": \"Palikite tuščią, jei norite išjungti puslapiavimą\",\n  \"Leave empty to hide the title\": \"Palikite tuščią, jei norite paslėpti pavadinimą\",\n  \"Less or equal to\": \"Mažesnis arba lygus\",\n  \"Less than\": \"Mažiau nei\",\n  \"Limit\": \"Riba\",\n  \"Line\": \"Linija\",\n  \"Link Text\": \"Nuorodos tekstas\",\n  \"Link URL\": \"Nuorodos URL\",\n  \"Make Default\": \"Nustatyti kaip numatytąjį\",\n  \"Metric\": \"Metrika\",\n  \"Metrics\": \"Metrika\",\n  \"Month\": \"Mėnuo\",\n  \"Notice text\": \"Pranešimo tekstas\",\n  \"Number of days\": \"Dienų skaičius\",\n  \"One of\": \"Vienas iš\",\n  \"One value per line\": \"Viena reikšmė eilutėje\",\n  \"Operation\": \"Operacija\",\n  \"Order\": \"Užsakymas\",\n  \"Past hour\": \"Praėjusią valandą\",\n  \"Past X days\": \"Pastarosios X dienos\",\n  \"Please provide the widget title\": \"Pateikite valdiklio pavadinimą\",\n  \"Please select a data source\": \"Pasirinkite duomenų šaltinį\",\n  \"Please select a dimension\": \"Pasirinkite aspektą\",\n  \"Please select an icon\": \"Pasirinkite piktogramą\",\n  \"Please select metric(s).\": \"Pasirinkite metriką (-as).\",\n  \"Prev period\": \"Ankstesnis laikotarpis\",\n  \"Quarter\": \"Ketvirtis\",\n  \"Records per page\": \"Įrašai puslapyje\",\n  \"Refresh every minute\": \"Atnaujinkite kas minutę\",\n  \"Rename Dashboard\": \"Pervardyti prietaisų skydelį\",\n  \"Reset Layout\": \"Atstatyti išdėstymą\",\n  \"Reset layout back to default?\": \"Atkurti numatytuosius išdėstymo parametrus?\",\n  \"Same period last year\": \"Tuo pačiu laikotarpiu praėjusiais metais\",\n  \"Section Title\": \"Skyriaus pavadinimas\",\n  \"Select a dimension and metrics\": \"Pasirinkite aspektą ir metriką\",\n  \"Select an attribute\": \"Pasirinkite atributą\",\n  \"Select an operation\": \"Pasirinkite operaciją\",\n  \"Select sorting metric or dimension\": \"Pasirinkite rūšiavimo metriką arba aspektą\",\n  \"Select the metric color\": \"Pasirinkite metrikos spalvą\",\n  \"Set the current layout as the default?\": \"Nustatyti dabartinį išdėstymą kaip numatytąjį?\",\n  \"Show Date Interval\": \"Rodyti datos intervalą\",\n  \"Sort by\": \"Rūšiuoti pagal\",\n  \"Sorting\": \"Rūšiavimas\",\n  \"Sorting & Filtering\": \"Rūšiavimas ir filtravimas\",\n  \"Stacked Bar\": \"Sudėtinė juosta\",\n  \"Starts with\": \"Prasideda nuo\",\n  \"Success\": \"Sėkmė\",\n  \"The dashboard layout has been reset to default.\": \"Prietaisų skydelio išdėstymas buvo atstatytas į numatytuosius nustatymus.\",\n  \"The dashboard was successfully updated.\": \"Prietaisų skydelis sėkmingai atnaujintas.\",\n  \"The limit value must be at least 1\": \"Ribinė vertė turi būti bent 1\",\n  \"This dashboard is now the default layout.\": \"Ši ataskaitų sritis dabar yra numatytasis išdėstymas.\",\n  \"This month\": \"Šį mėnesį\",\n  \"This quarter\": \"Šį ketvirtį\",\n  \"This week\": \"Šią savaitę\",\n  \"This year\": \"Šiais metais\",\n  \"Title\": \"Pavadinimas\",\n  \"Today\": \"Šiandien\",\n  \"Value\": \"Vertė\",\n  \"Values\": \"Vertybės\",\n  \"Vertical\": \"Vertikalus\",\n  \"Warning\": \"Įspėjimas\",\n  \"Week\": \"Savaitė\",\n  \"Year\": \"Metai\",\n  \"Yesterday\": \"Vakar\"\n}"
  },
  {
    "path": "modules/dashboard/lang/lv.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Iekšējās datplūsmas statistikas funkcija datubāzē reģistrē lapu skatījumus, IP adreses un citus anonīmus lietotāju pamatdatus.\",\n  \"Internal Traffic Statistics\": \"Iekšējās datplūsmas statistika\",\n  \"Purge the Internal Traffic Statistics data\": \"Notīrīt iekšējās datplūsmas statistikas datus\",\n  \"Manage Traffic Settings and Data\": \"Pārvaldīt satiksmes iestatījumus un datus\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Iekšējās datplūsmas statistika reģistrē lapu skatījumus, IP adreses un citus anonīmus lietotāju pamatdatus datubāzē un sniedz pārskatus informācijas panelim. Ja šī funkcija ir atspējota, dati datubāzē netiek ierakstīti.\",\n  \"Traffic Statistics\": \"Satiksmes statistika\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Laika josla, kurā reģistrēt lapu skatījumus. Laika joslas maiņa neatjauninās esošos datus. Ja maināt laika joslu, neizdzēšot esošos datus, pārskatos var tikt parādīts nepareizs laiks iepriekš reģistrētajām dienām.\",\n  \"Retention Period (Months)\": \"Saglabāšanas periods (mēneši)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Nosaka laiku, cik ilgi datplūsmas statistikas dati jāglabā datubāzē. Kad iestatītais periods beidzas, atbilstošie dati tiek automātiski dzēsti no datubāzes. Iestatiet vērtību 0 vai tukšu lauku, lai ierakstus saglabātu mūžīgi.\",\n  \"Data Filters\": \"Datu filtri\",\n  \"Exclude Bots\": \"Izslēgt robotprogrammatūras\",\n  \"Automatically ignores known bots using the detection library.\": \"Automātiski ignorē zināmos robotus, izmantojot noteikšanas bibliotēku.\",\n  \"Exclude Administrator Roles\": \"Izslēgt administratora lomas\",\n  \"Ignores traffic from selected roles.\": \"Ignorē datplūsmu no atlasītajām lomām.\",\n  \"Exclude IP Addresses\": \"Izslēgt IP adreses\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Pieprasījumi no šīm adresēm statistikā tiks ignorēti.\",\n  \"Exclude Paths\": \"Izslēgt ceļus\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Ievadiet vienu ceļu vai rakstu katrā rindā, lai ignorētu atbilstošos URL.\",\n  \"Access the Dashboard\": \"Piekļūstiet informācijas panelim\",\n  \"Manage Dashboards\": \"Pārvaldīt informācijas paneļus\",\n  \"Dashboard\": \"Informācijas panelis\",\n  \"Manage the Internal Traffic Statistics data\": \"Pārvaldiet iekšējās datplūsmas statistikas datus\",\n  \"Date\": \"Datums\",\n  \"Page Path\": \"Lapas ceļš\",\n  \"Referral Domain\": \"Ieteikuma domēns\",\n  \"Pageviews\": \"Lapu skatījumi\",\n  \"Unique Visitors\": \"Unikāli apmeklētāji\",\n  \"Traffic Information\": \"Satiksmes informācija\",\n  \"Website Status\": \"Tīmekļa vietnes statuss\",\n  \"Core version information\": \"Informācija par galveno versiju\",\n  \"System Issues\": \"Sistēmas problēmas\",\n  \"Event Log\": \"Notikumu žurnāls\",\n  \"Request log\": \"Pieprasījumu žurnāls\",\n  \"Request Log\": \"Pieprasījumu žurnāls\",\n  \"Website status information\": \"Tīmekļa vietnes statusa informācija\",\n  \"Add Row\": \"Pievienot rindu\",\n  \"Edit Row\": \"Rediģēt rindu\",\n  \"Edit Widget\": \"Rediģēt logrīku\",\n  \"No Value\": \"Nav vērtības\",\n  \"Section\": \"Sadaļa\",\n  \"This is a text notice widget.\": \"Šis ir teksta paziņojumu logrīks.\",\n  \"My Custom Widget\": \"Mans pielāgotais logrīks\",\n  \"Chart\": \"Diagramma\",\n  \"Indicator\": \"Indikators\",\n  \"Table\": \"Galds\",\n  \"Text Notice\": \"Teksta paziņojums\",\n  \"Widget Configuration\": \"Logrīka konfigurācija\",\n  \"Configure the report widget\": \"Konfigurēt atskaites logrīku\",\n  \"Width :columns\": \"Platums: kolonnas\",\n  \"The widget width, a number between 1 and 10.\": \"Logrīka platums, skaitlis no 1 līdz 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Lūdzu, ievadiet logrīka platumu kā skaitli no 1 līdz 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} kolonna|[2,Inf] kolonnas\",\n  \"Force new row\": \"Piespiedu kārtā izveidot jaunu rindu\",\n  \"Put the widget in a new row.\": \"Ievietojiet logrīku jaunā rindā.\",\n  \"Widget title\": \"Logrīka nosaukums\",\n  \"The Widget Title is required.\": \"Logrīka nosaukums ir obligāts.\",\n  \"Layout has been reset\": \"Izkārtojums ir atiestatīts\",\n  \"Current layout is now the default\": \"Pašreizējais izkārtojums tagad ir noklusējuma iestatījums.\",\n  \"System status\": \"Sistēmas statuss\",\n  \"Pending Software Updates\": \"Gaidāmie programmatūras atjauninājumi\",\n  \"Software is Up to Date\": \"Programmatūra ir atjaunināta\",\n  \"Update\": \"Atjauninājums\",\n  \"Some Issues Need Attention\": \"Dažas problēmas, kurām jāpievērš uzmanība\",\n  \"No Warnings to Display\": \"Nav brīdinājumu, ko parādīt\",\n  \"View\": \"Skatīt\",\n  \"System Build\": \"Sistēmas izveide\",\n  \"Online Since\": \"Tiešsaistē kopš\",\n  \"Welcome\": \"Laipni lūdzam\",\n  \"Welcome back to :app, :name.\": \"Laipni lūdzam atpakaļ lietotnē :app, :name.\",\n  \"Welcome to :app, :name.\": \"Laipni lūdzam lietotnē :app, :name.\",\n  \"This is the first time you have signed in.\": \"Šī ir pirmā reize, kad esat pierakstījies.\",\n  \"Your last sign in was\": \"Jūsu pēdējā pierakstīšanās bija\",\n  \"View Access Logs\": \"Skatīt piekļuves žurnālus\",\n  \"Have a great day!\": \"Lai jums lieliska diena!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Nevar atrast informācijas paneli ar norādīto slug: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Pārvaldīt iekšējās datplūsmas statistikas iestatījumus\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Iekšējās datplūsmas statistika ir atspējota. Lai to iespējotu, rediģējiet konfigurāciju failā config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Iekšējās datplūsmas statistika pašlaik ir iespējota. Varat pielāgot saglabāšanas periodu un laika joslu vai atspējot šo funkciju, rediģējot iestatījumus failā config/cms.php.\",\n  \"Purging the data...\": \"Notiek datu tīrīšana...\",\n  \"Purge Data\": \"Dzēst datus\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Vai tiešām vēlaties dzēst iekšējās datplūsmas statistikas datus?\",\n  \"Data retention period\": \"Datu glabāšanas periods\",\n  \"Time zone\": \"Laika josla\",\n  \":retention month(s)\": \"saglabāšanas mēnesis(-i)\",\n  \"Indefinite\": \"Nenoteikts\",\n  \"Internal Traffic Statistics data purged\": \"Iekšējās datplūsmas statistikas dati ir iztīrīti.\",\n  \"[not set]\": \"[nav iestatīts]\",\n  \"1 day (today) if not set\": \"1 diena (šodien), ja nav iestatīta\",\n  \"Apply\": \"Pieteikties\",\n  \"Ascending\": \"Augošā secībā\",\n  \"Attribute\": \"Atribūts\",\n  \"Bar\": \"Bārs\",\n  \"Chart type\": \"Diagrammas veids\",\n  \"Color\": \"Krāsa\",\n  \"Compare Totals\": \"Salīdzināt kopsummas\",\n  \"Configure\": \"Konfigurēt\",\n  \"Custom\": \"Pielāgots\",\n  \"Dashboard interval\": \"Informācijas paneļa intervāls\",\n  \"Data source\": \"Datu avots\",\n  \"Date interval\": \"Datumu intervāls\",\n  \"Day\": \"Diena\",\n  \"Delete\": \"Dzēst\",\n  \"Delete Dashboard\": \"Dzēst informācijas paneli\",\n  \"Delete row\": \"Dzēst rindu\",\n  \"Descending\": \"Dilstošā secībā\",\n  \"Dimension\": \"Izmērs\",\n  \"Direction\": \"Virziens\",\n  \"Disabled\": \"Invalīdi\",\n  \"Display\": \"Reklāmas displejs\",\n  \"Display [not set]\": \"Reklāmas [nav iestatīts]\",\n  \"Display all records\": \"Rādīt visus ierakstus\",\n  \"Display relative bars\": \"Rādīt relatīvās joslas\",\n  \"Display totals\": \"Rādīt kopsummas\",\n  \"Edit Dashboard\": \"Rediģēt informācijas paneli\",\n  \"Empty values\": \"Tukšas vērtības\",\n  \"Enter a positive number\": \"Ievadiet pozitīvu skaitli\",\n  \"Enter a positive number or leave empty to display all records.\": \"Ievadiet pozitīvu skaitli vai atstājiet tukšu, lai tiktu parādīti visi ieraksti.\",\n  \"Equal to\": \"Vienāds ar\",\n  \"Export Dashboard\": \"Eksportēt informācijas paneli\",\n  \"Extra table fields\": \"Papildu tabulas lauki\",\n  \"Filters\": \"Filtri\",\n  \"General\": \"Vispārīgi\",\n  \"Greater or equal to\": \"Lielāks vai vienāds ar\",\n  \"Greater than\": \"Lielāks nekā\",\n  \"Hide\": \"Slēpt\",\n  \"Horizontal\": \"Horizontāli\",\n  \"Icon\": \"Ikona\",\n  \"Icon Status\": \"Ikona Statuss\",\n  \"Important\": \"Svarīgi\",\n  \"Includes\": \"Ietver\",\n  \"Information\": \"Informācija\",\n  \"Last 30 days\": \"Pēdējās 30 dienas\",\n  \"Last 7 days\": \"Pēdējās 7 dienas\",\n  \"Last month\": \"Pagājušajā mēnesī\",\n  \"Leave empty to disable pagination\": \"Atstājiet tukšu, lai atspējotu lappušu numerāciju\",\n  \"Leave empty to hide the title\": \"Atstājiet tukšu, lai paslēptu nosaukumu\",\n  \"Less or equal to\": \"Mazāks vai vienāds ar\",\n  \"Less than\": \"Mazāk nekā\",\n  \"Limit\": \"Limits\",\n  \"Line\": \"Līnija\",\n  \"Link Text\": \"Saites teksts\",\n  \"Link URL\": \"Saites URL\",\n  \"Make Default\": \"Padarīt par noklusējuma vērtību\",\n  \"Metric\": \"Metrika\",\n  \"Metrics\": \"Metrika\",\n  \"Month\": \"Mēnesis\",\n  \"Notice text\": \"Paziņojuma teksts\",\n  \"Number of days\": \"Dienu skaits\",\n  \"One of\": \"Viens no\",\n  \"One value per line\": \"Viena vērtība katrā rindā\",\n  \"Operation\": \"Darbība\",\n  \"Order\": \"Pasūtījums\",\n  \"Past hour\": \"Pagājušās stundas laikā\",\n  \"Past X days\": \"Pēdējās X dienas\",\n  \"Please provide the widget title\": \"Lūdzu, norādiet logrīka nosaukumu.\",\n  \"Please select a data source\": \"Lūdzu, atlasiet datu avotu\",\n  \"Please select a dimension\": \"Lūdzu, atlasiet dimensiju\",\n  \"Please select an icon\": \"Lūdzu, atlasiet ikonu\",\n  \"Please select metric(s).\": \"Lūdzu, atlasiet metriku(-as).\",\n  \"Prev period\": \"Iepriekšējais periods\",\n  \"Quarter\": \"Ceturtdaļa\",\n  \"Records per page\": \"Ieraksti lapā\",\n  \"Refresh every minute\": \"Atsvaidziniet katru minūti\",\n  \"Rename Dashboard\": \"Pārdēvēt informācijas paneli\",\n  \"Reset Layout\": \"Atiestatīt izkārtojumu\",\n  \"Reset layout back to default?\": \"Vai atiestatīt izkārtojumu uz noklusējuma vērtībām?\",\n  \"Same period last year\": \"Tas pats periods pagājušajā gadā\",\n  \"Section Title\": \"Sadaļas nosaukums\",\n  \"Select a dimension and metrics\": \"Atlasiet dimensiju un metriku\",\n  \"Select an attribute\": \"Atlasiet atribūtu\",\n  \"Select an operation\": \"Atlasiet darbību\",\n  \"Select sorting metric or dimension\": \"Atlasiet kārtošanas metriku vai dimensiju\",\n  \"Select the metric color\": \"Izvēlieties metrikas krāsu\",\n  \"Set the current layout as the default?\": \"Vai iestatīt pašreizējo izkārtojumu kā noklusējuma izkārtojumu?\",\n  \"Show Date Interval\": \"Rādīt datumu intervālu\",\n  \"Sort by\": \"Kārtot pēc\",\n  \"Sorting\": \"Kārtošana\",\n  \"Sorting & Filtering\": \"Kārtošana un filtrēšana\",\n  \"Stacked Bar\": \"Sakrauta josla\",\n  \"Starts with\": \"Sākas ar\",\n  \"Success\": \"Panākumi\",\n  \"The dashboard layout has been reset to default.\": \"Informācijas paneļa izkārtojums ir atiestatīts uz noklusējuma iestatījumiem.\",\n  \"The dashboard was successfully updated.\": \"Informācijas panelis ir veiksmīgi atjaunināts.\",\n  \"The limit value must be at least 1\": \"Robežvērtībai jābūt vismaz 1\",\n  \"This dashboard is now the default layout.\": \"Šis informācijas panelis tagad ir noklusējuma izkārtojums.\",\n  \"This month\": \"Šomēnes\",\n  \"This quarter\": \"Šajā ceturksnī\",\n  \"This week\": \"Šonedēļ\",\n  \"This year\": \"Šogad\",\n  \"Title\": \"Nosaukums\",\n  \"Today\": \"Šodien\",\n  \"Value\": \"Vērtība\",\n  \"Values\": \"Vērtības\",\n  \"Vertical\": \"Vertikāli\",\n  \"Warning\": \"Brīdinājums\",\n  \"Week\": \"Nedēļa\",\n  \"Year\": \"Gads\",\n  \"Yesterday\": \"Vakar\"\n}"
  },
  {
    "path": "modules/dashboard/lang/nl.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Met de functie Interne verkeersstatistieken worden paginaweergaven, IP-adressen en andere anonieme gebruikersgegevens vastgelegd in de database.\",\n  \"Internal Traffic Statistics\": \"Interne verkeersstatistieken\",\n  \"Purge the Internal Traffic Statistics data\": \"De interne verkeersstatistiekgegevens opschonen\",\n  \"Manage Traffic Settings and Data\": \"Beheer verkeersinstellingen en gegevens\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Interne verkeersstatistieken registreren paginaweergaven, IP-adressen en andere anonieme gebruikersgegevens in de database en leveren rapporten voor het dashboard. Wanneer de functie is uitgeschakeld, worden de gegevens niet naar de database geschreven.\",\n  \"Traffic Statistics\": \"Verkeersstatistieken\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Tijdzone waarin paginaweergaven worden geregistreerd. Het wijzigen van de tijdzone werkt de bestaande gegevens niet bij. Als u de tijdzone wijzigt zonder de bestaande gegevens te wissen, kunnen rapporten mogelijk onjuiste tijden weergeven voor eerder geregistreerde dagen.\",\n  \"Retention Period (Months)\": \"Bewaartermijn (maanden)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Bepaalt hoe lang verkeersstatistieken in de database moeten worden opgeslagen. Wanneer de ingestelde periode verstrijkt, worden de bijbehorende gegevens automatisch uit de database verwijderd. Stel in op 0 of leeg om records permanent te bewaren.\",\n  \"Data Filters\": \"Gegevensfilters\",\n  \"Exclude Bots\": \"Bots uitsluiten\",\n  \"Automatically ignores known bots using the detection library.\": \"Negeert automatisch bekende bots met behulp van de detectiebibliotheek.\",\n  \"Exclude Administrator Roles\": \"Beheerdersrollen uitsluiten\",\n  \"Ignores traffic from selected roles.\": \"Negeert verkeer van geselecteerde rollen.\",\n  \"Exclude IP Addresses\": \"IP-adressen uitsluiten\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Verzoeken van deze adressen worden in de statistieken genegeerd.\",\n  \"Exclude Paths\": \"Paden uitsluiten\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Voer één pad of patroon per rij in om overeenkomende URL's te negeren.\",\n  \"Access the Dashboard\": \"Toegang tot het dashboard\",\n  \"Manage Dashboards\": \"Dashboards beheren\",\n  \"Dashboard\": \"Overzicht\",\n  \"Manage the Internal Traffic Statistics data\": \"Beheer de interne verkeersstatistiekgegevens\",\n  \"Date\": \"Datum\",\n  \"Page Path\": \"Paginapad\",\n  \"Referral Domain\": \"Verwijzend domein\",\n  \"Pageviews\": \"Paginaweergaven\",\n  \"Unique Visitors\": \"Unieke bezoekers\",\n  \"Traffic Information\": \"Verkeersinformatie\",\n  \"Website Status\": \"Websitestatus\",\n  \"Core version information\": \"Kernversie-informatie\",\n  \"System Issues\": \"Systeemproblemen\",\n  \"Event Log\": \"Gebeurtenis logboek\",\n  \"Request log\": \"Verzoek logboek\",\n  \"Request Log\": \"Verzoek logboek\",\n  \"Website status information\": \"Websitestatusinformatie\",\n  \"Add Row\": \"Rij toevoegen\",\n  \"Edit Row\": \"Rij bewerken\",\n  \"Edit Widget\": \"Widget bewerken\",\n  \"No Value\": \"Geen waarde\",\n  \"Section\": \"Sectie\",\n  \"This is a text notice widget.\": \"Dit is een tekstmelding widget.\",\n  \"My Custom Widget\": \"Mijn aangepaste widget\",\n  \"Chart\": \"Grafiek\",\n  \"Indicator\": \"Indicator\",\n  \"Table\": \"Tabel\",\n  \"Text Notice\": \"Tekstmelding\",\n  \"Widget Configuration\": \"Widget configuratie\",\n  \"Configure the report widget\": \"Configureer de rapportage widget\",\n  \"Width :columns\": \"Breedte :columns\",\n  \"The widget width, a number between 1 and 10.\": \"De widget breedte, een getal tussen 1 en 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Voer een getal tussen 1 en 10 in als widget breedte.\",\n  \"{1} column|[2,Inf] columns\": \"{1} kolom|[2,Inf] kolommen\",\n  \"Force new row\": \"Forceer nieuwe rij\",\n  \"Put the widget in a new row.\": \"Plaats de widget in een nieuwe rij.\",\n  \"Widget title\": \"Widget titel\",\n  \"The Widget Title is required.\": \"Een widget titel is verplicht.\",\n  \"Layout has been reset\": \"Layout is ge-reset\",\n  \"Current layout is now the default\": \"Huidige layout is nu als standaard ingesteld.\",\n  \"System status\": \"Systeemstatus\",\n  \"Pending Software Updates\": \"Er staan updates klaar\",\n  \"Software is Up to Date\": \"De software is up-to-date\",\n  \"Update\": \"Updates installeren\",\n  \"Some Issues Need Attention\": \"Sommige problemen hebben aandacht nodig\",\n  \"No Warnings to Display\": \"Alles OK\",\n  \"View\": \"Weergeven\",\n  \"System Build\": \"Systeem build\",\n  \"Online Since\": \"Online sinds\",\n  \"Welcome\": \"Welkom\",\n  \"Welcome back to :app, :name.\": \"Welkom terug bij :app, :name.\",\n  \"Welcome to :app, :name.\": \"Welkom bij :app, :name.\",\n  \"This is the first time you have signed in.\": \"Dit is de eerste keer dat je bent ingelogd.\",\n  \"Your last sign in was\": \"Je laatste login was\",\n  \"View Access Logs\": \"Toon toegangslogboek\",\n  \"Have a great day!\": \"Een fijne dag!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Kan geen dashboard vinden met de opgegeven slug: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Instellingen voor het beheren van interne verkeersstatistieken\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"De interne verkeersstatistieken zijn uitgeschakeld. Om ze in te schakelen, bewerk je de configuratie in config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"De functie 'Interne verkeersstatistieken' is momenteel ingeschakeld. U kunt de bewaartermijn en tijdzone aanpassen of deze functie uitschakelen door de instellingen in config/cms.php te bewerken.\",\n  \"Purging the data...\": \"De gegevens worden verwijderd...\",\n  \"Purge Data\": \"Gegevens wissen\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Wilt u de interne verkeersstatistieken echt verwijderen?\",\n  \"Data retention period\": \"Bewaartermijn van gegevens\",\n  \"Time zone\": \"Tijdzone\",\n  \":retention month(s)\": \":retentiemaand(en)\",\n  \"Indefinite\": \"Onbepaalde tijd\",\n  \"Internal Traffic Statistics data purged\": \"Interne verkeersstatistieken verwijderd\",\n  \"[not set]\": \"[niet ingesteld]\",\n  \"1 day (today) if not set\": \"1 dag (vandaag) indien niet ingesteld\",\n  \"Apply\": \"Toepassen\",\n  \"Ascending\": \"Oplopend\",\n  \"Attribute\": \"Attribuut\",\n  \"Bar\": \"Staafdiagram\",\n  \"Chart type\": \"Grafiektype\",\n  \"Color\": \"Kleur\",\n  \"Compare Totals\": \"Totalen vergelijken\",\n  \"Configure\": \"Configureren\",\n  \"Custom\": \"Aangepast\",\n  \"Dashboard interval\": \"Dashboardbereik\",\n  \"Data source\": \"Gegevensbron\",\n  \"Date interval\": \"Datumbereik\",\n  \"Day\": \"Dag\",\n  \"Delete\": \"Verwijderen\",\n  \"Delete Dashboard\": \"Dashboard verwijderen\",\n  \"Delete row\": \"Rij verwijderen\",\n  \"Descending\": \"Aflopend\",\n  \"Dimension\": \"Dimensie\",\n  \"Direction\": \"Richting\",\n  \"Disabled\": \"Uitgeschakeld\",\n  \"Display\": \"Weergave\",\n  \"Display [not set]\": \"Toon [niet ingesteld]\",\n  \"Display all records\": \"Alle records weergeven\",\n  \"Display relative bars\": \"Relatieve balken weergeven\",\n  \"Display totals\": \"Totalen weergeven\",\n  \"Edit Dashboard\": \"Dashboard bewerken\",\n  \"Empty values\": \"Lege waarden\",\n  \"Enter a positive number\": \"Voer een positief getal in\",\n  \"Enter a positive number or leave empty to display all records.\": \"Voer een positief getal in of laat leeg om alle records weer te geven.\",\n  \"Equal to\": \"Gelijk aan\",\n  \"Export Dashboard\": \"Dashboard exporteren\",\n  \"Extra table fields\": \"Extra tabelvelden\",\n  \"Filters\": \"Filters\",\n  \"General\": \"Algemeen\",\n  \"Greater or equal to\": \"Groter of gelijk aan\",\n  \"Greater than\": \"Groter dan\",\n  \"Hide\": \"Verbergen\",\n  \"Horizontal\": \"Horizontaal\",\n  \"Icon\": \"Pictogram\",\n  \"Icon Status\": \"Pictogramstatus\",\n  \"Important\": \"Belangrijk\",\n  \"Includes\": \"Bevat\",\n  \"Information\": \"Informatie\",\n  \"Last 30 days\": \"Afgelopen 30 dagen\",\n  \"Last 7 days\": \"Afgelopen 7 dagen\",\n  \"Last month\": \"Vorige maand\",\n  \"Leave empty to disable pagination\": \"Laat leeg om paginering uit te schakelen\",\n  \"Leave empty to hide the title\": \"Laat leeg om de titel te verbergen\",\n  \"Less or equal to\": \"Kleiner of gelijk aan\",\n  \"Less than\": \"Kleiner dan\",\n  \"Limit\": \"Limiet\",\n  \"Line\": \"Lijngrafiek\",\n  \"Link Text\": \"Linktekst\",\n  \"Link URL\": \"Link-URL\",\n  \"Make Default\": \"Als standaard instellen\",\n  \"Metric\": \"Metriek\",\n  \"Metrics\": \"Metrieken\",\n  \"Month\": \"Maand\",\n  \"Notice text\": \"Meldingstekst\",\n  \"Number of days\": \"Aantal dagen\",\n  \"One of\": \"Eén van\",\n  \"One value per line\": \"Eén waarde per regel\",\n  \"Operation\": \"Bewerking\",\n  \"Order\": \"Volgorde\",\n  \"Past hour\": \"Afgelopen uur\",\n  \"Past X days\": \"Afgelopen X dagen\",\n  \"Please provide the widget title\": \"Voer de widgettitel in\",\n  \"Please select a data source\": \"Selecteer een gegevensbron\",\n  \"Please select a dimension\": \"Selecteer een dimensie\",\n  \"Please select an icon\": \"Selecteer een pictogram\",\n  \"Please select metric(s).\": \"Selecteer metriek(en).\",\n  \"Prev period\": \"Vorige periode\",\n  \"Quarter\": \"Kwartaal\",\n  \"Records per page\": \"Records per pagina\",\n  \"Refresh every minute\": \"Elke minuut vernieuwen\",\n  \"Rename Dashboard\": \"Dashboard hernoemen\",\n  \"Reset Layout\": \"Layout herstellen\",\n  \"Reset layout back to default?\": \"Layout terugzetten naar standaard?\",\n  \"Same period last year\": \"Zelfde periode vorig jaar\",\n  \"Section Title\": \"Sectietitel\",\n  \"Select a dimension and metrics\": \"Selecteer een dimensie en metrieken\",\n  \"Select an attribute\": \"Selecteer een attribuut\",\n  \"Select an operation\": \"Selecteer een bewerking\",\n  \"Select sorting metric or dimension\": \"Selecteer sorteermetriek of dimensie\",\n  \"Select the metric color\": \"Selecteer de metriek-kleur\",\n  \"Set the current layout as the default?\": \"De huidige layout als standaard instellen?\",\n  \"Show Date Interval\": \"Toon datumbereik\",\n  \"Sort by\": \"Sorteren op\",\n  \"Sorting\": \"Sorteren\",\n  \"Sorting & Filtering\": \"Sorteren & Filteren\",\n  \"Stacked Bar\": \"Gestapeld staafdiagram\",\n  \"Starts with\": \"Begint met\",\n  \"Success\": \"Succes\",\n  \"The dashboard layout has been reset to default.\": \"De dashboard layout is hersteld naar standaard.\",\n  \"The dashboard was successfully updated.\": \"Het dashboard is succesvol bijgewerkt.\",\n  \"The limit value must be at least 1\": \"De limietwaarde moet minimaal 1 zijn\",\n  \"This dashboard is now the default layout.\": \"Dit dashboard is nu de standaard layout.\",\n  \"This month\": \"Deze maand\",\n  \"This quarter\": \"Dit kwartaal\",\n  \"This week\": \"Deze week\",\n  \"This year\": \"Dit jaar\",\n  \"Title\": \"Titel\",\n  \"Today\": \"Vandaag\",\n  \"Value\": \"Waarde\",\n  \"Values\": \"Waarden\",\n  \"Vertical\": \"Verticaal\",\n  \"Warning\": \"Waarschuwing\",\n  \"Week\": \"Week\",\n  \"Year\": \"Jaar\",\n  \"Yesterday\": \"Gisteren\"\n}"
  },
  {
    "path": "modules/dashboard/lang/pl.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Funkcja statystyk ruchu wewnętrznego rejestruje w bazie danych liczbę wyświetleń stron, adresy IP i inne podstawowe anonimowe dane użytkownika.\",\n  \"Internal Traffic Statistics\": \"Statystyki ruchu wewnętrznego\",\n  \"Purge the Internal Traffic Statistics data\": \"Wyczyść dane statystyk ruchu wewnętrznego\",\n  \"Manage Traffic Settings and Data\": \"Zarządzaj ustawieniami ruchu i danymi\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Statystyki ruchu wewnętrznego rejestrują liczbę odsłon, adresy IP i inne podstawowe anonimowe dane użytkowników w bazie danych i generują raporty dla pulpitu nawigacyjnego. Po wyłączeniu tej funkcji dane nie są zapisywane w bazie danych.\",\n  \"Traffic Statistics\": \"Statystyki ruchu\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Strefa czasowa do rejestrowania wyświetleń stron. Zmiana strefy czasowej nie spowoduje aktualizacji istniejących danych. Jeśli zmienisz strefę czasową bez usunięcia istniejących danych, raporty mogą potencjalnie wyświetlać nieprawidłowe godziny dla wcześniej zarejestrowanych dni.\",\n  \"Retention Period (Months)\": \"Okres przechowywania (miesiące)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Określa okres przechowywania danych statystycznych dotyczących ruchu w bazie danych. Po upływie ustawionego okresu odpowiednie dane są automatycznie usuwane z bazy danych. Ustaw wartość 0 lub pustą, aby zachować rekordy na zawsze.\",\n  \"Data Filters\": \"Filtry danych\",\n  \"Exclude Bots\": \"Wyklucz boty\",\n  \"Automatically ignores known bots using the detection library.\": \"Automatycznie ignoruje znane boty korzystając z biblioteki wykrywania.\",\n  \"Exclude Administrator Roles\": \"Wyklucz role administratora\",\n  \"Ignores traffic from selected roles.\": \"Ignoruje ruch z wybranych ról.\",\n  \"Exclude IP Addresses\": \"Wyklucz adresy IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Żądania z tych adresów będą ignorowane w statystykach.\",\n  \"Exclude Paths\": \"Wyklucz ścieżki\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Aby zignorować pasujące adresy URL, wprowadź jedną ścieżkę lub wzorzec w każdym wierszu.\",\n  \"Access the Dashboard\": \"Uzyskaj dostęp do pulpitu nawigacyjnego\",\n  \"Manage Dashboards\": \"Zarządzaj pulpitami nawigacyjnymi\",\n  \"Dashboard\": \"Panel\",\n  \"Manage the Internal Traffic Statistics data\": \"Zarządzaj danymi statystyk ruchu wewnętrznego\",\n  \"Date\": \"Data\",\n  \"Page Path\": \"Ścieżka strony\",\n  \"Referral Domain\": \"Domena polecająca\",\n  \"Pageviews\": \"Wyświetlenia stron\",\n  \"Unique Visitors\": \"Unikalni goście\",\n  \"Traffic Information\": \"Informacje o ruchu drogowym\",\n  \"Website Status\": \"Status witryny\",\n  \"Core version information\": \"Informacje o wersji podstawowej\",\n  \"System Issues\": \"Problemy systemowe\",\n  \"Event Log\": \"Dziennik zdarzeń\",\n  \"Request log\": \"Dziennik żądań\",\n  \"Request Log\": \"Dziennik żądań\",\n  \"Website status information\": \"Informacje o stanie witryny\",\n  \"Add Row\": \"Dodaj wiersz\",\n  \"Edit Row\": \"Edytuj wiersz\",\n  \"Edit Widget\": \"Edytuj widżet\",\n  \"No Value\": \"Brak wartości\",\n  \"Section\": \"Sekcja\",\n  \"This is a text notice widget.\": \"To jest widget powiadomień tekstowych.\",\n  \"My Custom Widget\": \"Mój niestandardowy widget\",\n  \"Chart\": \"Wykres\",\n  \"Indicator\": \"Wskaźnik\",\n  \"Table\": \"Tabela\",\n  \"Text Notice\": \"Powiadomienie tekstowe\",\n  \"Widget Configuration\": \"Konfiguracja widżetu\",\n  \"Configure the report widget\": \"Skonfiguruj widżet raportu\",\n  \"Width :columns\": \"Szerokość: kolumny\",\n  \"The widget width, a number between 1 and 10.\": \"Szerokość widżetu, liczba pomiędzy 1 a 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Proszę wprowadzić szerokość widgetu jako liczbę od 1 do 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} kolumna|[2,Inf] kolumny\",\n  \"Force new row\": \"Wymuś nowy wiersz\",\n  \"Put the widget in a new row.\": \"Umieść widget w nowym wierszu.\",\n  \"Widget title\": \"Tytuł widżetu\",\n  \"The Widget Title is required.\": \"Tytuł widżetu jest wymagany.\",\n  \"Layout has been reset\": \"Układ został zresetowany\",\n  \"Current layout is now the default\": \"Obecny układ jest teraz domyślny\",\n  \"System status\": \"Status systemu\",\n  \"Pending Software Updates\": \"Oczekujące aktualizacje oprogramowania\",\n  \"Software is Up to Date\": \"Oprogramowanie jest aktualne\",\n  \"Update\": \"Aktualizacja\",\n  \"Some Issues Need Attention\": \"Niektóre kwestie wymagają uwagi\",\n  \"No Warnings to Display\": \"Brak ostrzeżeń do wyświetlenia\",\n  \"View\": \"Pogląd\",\n  \"System Build\": \"Budowa systemu\",\n  \"Online Since\": \"Online od\",\n  \"Welcome\": \"Powitanie\",\n  \"Welcome back to :app, :name.\": \"Witamy ponownie w :app, :name.\",\n  \"Welcome to :app, :name.\": \"Witamy w :app, :name.\",\n  \"This is the first time you have signed in.\": \"To jest Twoje pierwsze logowanie.\",\n  \"Your last sign in was\": \"Twoje ostatnie logowanie miało miejsce:\",\n  \"View Access Logs\": \"Wyświetl dzienniki dostępu\",\n  \"Have a great day!\": \"Miłego dnia!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Nie można znaleźć pulpitu nawigacyjnego ze wskazanym ślimakiem: „:slug”.\",\n  \"Manage Internal Traffic Statistics settings\": \"Zarządzaj ustawieniami statystyk ruchu wewnętrznego\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Statystyki ruchu wewnętrznego są wyłączone. Aby je włączyć, edytuj konfigurację w pliku config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Statystyki ruchu wewnętrznego są obecnie włączone. Możesz dostosować okres przechowywania i strefę czasową lub wyłączyć tę funkcję, edytując ustawienia w pliku config/cms.php.\",\n  \"Purging the data...\": \"Czyszczenie danych...\",\n  \"Purge Data\": \"Wyczyść dane\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Czy na pewno chcesz usunąć dane statystyk ruchu wewnętrznego?\",\n  \"Data retention period\": \"Okres przechowywania danych\",\n  \"Time zone\": \"Strefa czasowa\",\n  \":retention month(s)\": \":miesiąc(e) retencji\",\n  \"Indefinite\": \"Nieokreślony\",\n  \"Internal Traffic Statistics data purged\": \"Usunięto dane statystyk ruchu wewnętrznego\",\n  \"[not set]\": \"[nie ustawiono]\",\n  \"1 day (today) if not set\": \"1 dzień (dzisiaj), jeśli nie ustawiono\",\n  \"Apply\": \"Stosować\",\n  \"Ascending\": \"Rosnąco\",\n  \"Attribute\": \"Atrybut\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Typ wykresu\",\n  \"Color\": \"Kolor\",\n  \"Compare Totals\": \"Porównaj sumy\",\n  \"Configure\": \"Konfiguruj\",\n  \"Custom\": \"Zwyczaj\",\n  \"Dashboard interval\": \"Interwał pulpitu nawigacyjnego\",\n  \"Data source\": \"Źródło danych\",\n  \"Date interval\": \"Przedział dat\",\n  \"Day\": \"Dzień\",\n  \"Delete\": \"Usuwać\",\n  \"Delete Dashboard\": \"Usuń pulpit nawigacyjny\",\n  \"Delete row\": \"Usuń wiersz\",\n  \"Descending\": \"Zstępujący\",\n  \"Dimension\": \"Wymiar\",\n  \"Direction\": \"Kierunek\",\n  \"Disabled\": \"Wyłączony\",\n  \"Display\": \"Wyświetlacz\",\n  \"Display [not set]\": \"Wyświetl [nie ustawiono]\",\n  \"Display all records\": \"Wyświetl wszystkie rekordy\",\n  \"Display relative bars\": \"Wyświetl względne słupki\",\n  \"Display totals\": \"Wyświetl sumy\",\n  \"Edit Dashboard\": \"Edytuj pulpit nawigacyjny\",\n  \"Empty values\": \"Puste wartości\",\n  \"Enter a positive number\": \"Wprowadź liczbę dodatnią\",\n  \"Enter a positive number or leave empty to display all records.\": \"Wprowadź liczbę dodatnią lub pozostaw puste pole, aby wyświetlić wszystkie rekordy.\",\n  \"Equal to\": \"Równy\",\n  \"Export Dashboard\": \"Panel eksportu\",\n  \"Extra table fields\": \"Dodatkowe pola tabeli\",\n  \"Filters\": \"Filtry\",\n  \"General\": \"Ogólny\",\n  \"Greater or equal to\": \"Większy lub równy\",\n  \"Greater than\": \"Większy niż\",\n  \"Hide\": \"Ukrywać\",\n  \"Horizontal\": \"Poziomy\",\n  \"Icon\": \"Ikona\",\n  \"Icon Status\": \"Status ikony\",\n  \"Important\": \"Ważny\",\n  \"Includes\": \"Zawiera\",\n  \"Information\": \"Informacja\",\n  \"Last 30 days\": \"Ostatnie 30 dni\",\n  \"Last 7 days\": \"Ostatnie 7 dni\",\n  \"Last month\": \"W zeszłym miesiącu\",\n  \"Leave empty to disable pagination\": \"Pozostaw puste, aby wyłączyć paginację\",\n  \"Leave empty to hide the title\": \"Pozostaw puste, aby ukryć tytuł\",\n  \"Less or equal to\": \"Mniejsze lub równe\",\n  \"Less than\": \"Mniej niż\",\n  \"Limit\": \"Limit\",\n  \"Line\": \"Linia\",\n  \"Link Text\": \"Tekst linku\",\n  \"Link URL\": \"Adres URL łącza\",\n  \"Make Default\": \"Ustaw jako domyślne\",\n  \"Metric\": \"Metryczny\",\n  \"Metrics\": \"Metryka\",\n  \"Month\": \"Miesiąc\",\n  \"Notice text\": \"Tekst powiadomienia\",\n  \"Number of days\": \"Liczba dni\",\n  \"One of\": \"Jeden z\",\n  \"One value per line\": \"Jedna wartość na wiersz\",\n  \"Operation\": \"Działanie\",\n  \"Order\": \"Zamówienie\",\n  \"Past hour\": \"Ostatnia godzina\",\n  \"Past X days\": \"Ostatnie X dni\",\n  \"Please provide the widget title\": \"Proszę podać tytuł widżetu\",\n  \"Please select a data source\": \"Proszę wybrać źródło danych\",\n  \"Please select a dimension\": \"Proszę wybrać wymiar\",\n  \"Please select an icon\": \"Proszę wybrać ikonę\",\n  \"Please select metric(s).\": \"Proszę wybrać jednostkę(y) metryczną(e).\",\n  \"Prev period\": \"Poprzedni okres\",\n  \"Quarter\": \"Kwartał\",\n  \"Records per page\": \"Rekordy na stronę\",\n  \"Refresh every minute\": \"Odświeżaj co minutę\",\n  \"Rename Dashboard\": \"Zmień nazwę pulpitu nawigacyjnego\",\n  \"Reset Layout\": \"Resetuj układ\",\n  \"Reset layout back to default?\": \"Przywrócić układ do ustawień domyślnych?\",\n  \"Same period last year\": \"Ten sam okres w zeszłym roku\",\n  \"Section Title\": \"Tytuł sekcji\",\n  \"Select a dimension and metrics\": \"Wybierz wymiar i metryki\",\n  \"Select an attribute\": \"Wybierz atrybut\",\n  \"Select an operation\": \"Wybierz operację\",\n  \"Select sorting metric or dimension\": \"Wybierz metrykę lub wymiar sortowania\",\n  \"Select the metric color\": \"Wybierz kolor metryki\",\n  \"Set the current layout as the default?\": \"Ustawić obecny układ jako domyślny?\",\n  \"Show Date Interval\": \"Pokaż interwał dat\",\n  \"Sort by\": \"Sortuj według\",\n  \"Sorting\": \"Sortowanie\",\n  \"Sorting & Filtering\": \"Sortowanie i filtrowanie\",\n  \"Stacked Bar\": \"Stacked Bar\",\n  \"Starts with\": \"Zaczyna się od\",\n  \"Success\": \"Sukces\",\n  \"The dashboard layout has been reset to default.\": \"Przywrócono domyślny układ pulpitu nawigacyjnego.\",\n  \"The dashboard was successfully updated.\": \"Panel został pomyślnie zaktualizowany.\",\n  \"The limit value must be at least 1\": \"Wartość graniczna musi wynosić co najmniej 1\",\n  \"This dashboard is now the default layout.\": \"Ten panel jest teraz układem domyślnym.\",\n  \"This month\": \"W tym miesiącu\",\n  \"This quarter\": \"W tym kwartale\",\n  \"This week\": \"W tym tygodniu\",\n  \"This year\": \"W tym roku\",\n  \"Title\": \"Tytuł\",\n  \"Today\": \"Dzisiaj\",\n  \"Value\": \"Wartość\",\n  \"Values\": \"Wartości\",\n  \"Vertical\": \"Pionowy\",\n  \"Warning\": \"Ostrzeżenie\",\n  \"Week\": \"Tydzień\",\n  \"Year\": \"Rok\",\n  \"Yesterday\": \"Wczoraj\"\n}"
  },
  {
    "path": "modules/dashboard/lang/ro.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Funcția Statistici trafic intern înregistrează în baza de date vizualizările de pagină, adresele IP și alte date anonime de bază ale utilizatorilor.\",\n  \"Internal Traffic Statistics\": \"Statistici de trafic intern\",\n  \"Purge the Internal Traffic Statistics data\": \"Ștergeți datele din statisticile de trafic intern\",\n  \"Manage Traffic Settings and Data\": \"Gestionați setările și datele de trafic\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Statisticile de trafic intern înregistrează vizualizările de pagină, adresele IP și alte date anonime de bază ale utilizatorilor în baza de date și furnizează rapoarte pentru tabloul de bord. Când funcția este dezactivată, datele nu sunt scrise în baza de date.\",\n  \"Traffic Statistics\": \"Statistici de trafic\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Fus orar pentru înregistrarea vizualizărilor de pagină. Modificarea fusului orar nu va actualiza datele existente. Dacă modificați fusul orar fără a șterge datele existente, rapoartele pot afișa ore incorecte pentru zilele înregistrate anterior.\",\n  \"Retention Period (Months)\": \"Perioada de păstrare (luni)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Determină durata pentru care datele statistice de trafic ar trebui stocate în baza de date. Când perioada setată expiră, datele corespunzătoare sunt șterse automat din baza de date. Setați la 0 sau goliți câmpul pentru a păstra înregistrările pentru totdeauna.\",\n  \"Data Filters\": \"Filtre de date\",\n  \"Exclude Bots\": \"Excludeți roboții\",\n  \"Automatically ignores known bots using the detection library.\": \"Ignoră automat roboții cunoscuți folosind biblioteca de detectare.\",\n  \"Exclude Administrator Roles\": \"Excludeți rolurile de administrator\",\n  \"Ignores traffic from selected roles.\": \"Ignoră traficul de la rolurile selectate.\",\n  \"Exclude IP Addresses\": \"Excludeți adresele IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Cererile de la aceste adrese vor fi ignorate în statistici.\",\n  \"Exclude Paths\": \"Excludeți căile\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Introduceți o cale sau un model pe rând pentru a ignora adresele URL potrivite.\",\n  \"Access the Dashboard\": \"Accesați tabloul de bord\",\n  \"Manage Dashboards\": \"Gestionați tablourile de bord\",\n  \"Dashboard\": \"Bord\",\n  \"Manage the Internal Traffic Statistics data\": \"Gestionați datele statistice privind traficul intern\",\n  \"Date\": \"Data\",\n  \"Page Path\": \"Calea paginii\",\n  \"Referral Domain\": \"Domeniu de referință\",\n  \"Pageviews\": \"Vizualizări de pagină\",\n  \"Unique Visitors\": \"Vizitatori unici\",\n  \"Traffic Information\": \"Informații despre trafic\",\n  \"Website Status\": \"Starea site-ului web\",\n  \"Core version information\": \"Informații despre versiunea de bază\",\n  \"System Issues\": \"Probleme de sistem\",\n  \"Event Log\": \"Jurnal de evenimente\",\n  \"Request log\": \"Jurnal de solicitări\",\n  \"Request Log\": \"Jurnal de solicitări\",\n  \"Website status information\": \"Informații despre starea site-ului web\",\n  \"Add Row\": \"Adăugați un rând\",\n  \"Edit Row\": \"Editați rândul\",\n  \"Edit Widget\": \"Editare widget\",\n  \"No Value\": \"Fără valoare\",\n  \"Section\": \"Secțiune\",\n  \"This is a text notice widget.\": \"Acesta este un widget de notificare text.\",\n  \"My Custom Widget\": \"Widgetul meu personalizat\",\n  \"Chart\": \"Diagramă\",\n  \"Indicator\": \"Indicator\",\n  \"Table\": \"Masă\",\n  \"Text Notice\": \"Notificare prin SMS\",\n  \"Widget Configuration\": \"Configurarea widgetului\",\n  \"Configure the report widget\": \"Configurați widgetul raportului\",\n  \"Width :columns\": \"Lățime: coloane\",\n  \"The widget width, a number between 1 and 10.\": \"Lățimea widgetului, un număr între 1 și 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Introduceți lățimea widgetului ca număr între 1 și 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} coloană|[2,Inf] coloane\",\n  \"Force new row\": \"Forțează un rând nou\",\n  \"Put the widget in a new row.\": \"Pune widgetul într-un rând nou.\",\n  \"Widget title\": \"Titlul widgetului\",\n  \"The Widget Title is required.\": \"Titlul widgetului este obligatoriu.\",\n  \"Layout has been reset\": \"Aspectul a fost resetat\",\n  \"Current layout is now the default\": \"Aspectul curent este acum implicit\",\n  \"System status\": \"Starea sistemului\",\n  \"Pending Software Updates\": \"Actualizări software în așteptare\",\n  \"Software is Up to Date\": \"Software-ul este actualizat\",\n  \"Update\": \"Actualizare\",\n  \"Some Issues Need Attention\": \"Unele probleme necesită atenție\",\n  \"No Warnings to Display\": \"Nicio avertizare de afișat\",\n  \"View\": \"Vedere\",\n  \"System Build\": \"Construcția sistemului\",\n  \"Online Since\": \"Online din\",\n  \"Welcome\": \"Bun venit\",\n  \"Welcome back to :app, :name.\": \"Bine ați revenit la :app, :name.\",\n  \"Welcome to :app, :name.\": \"Bun venit la :app, :name.\",\n  \"This is the first time you have signed in.\": \"Aceasta este prima dată când te-ai conectat.\",\n  \"Your last sign in was\": \"Ultima ta conectare a fost\",\n  \"View Access Logs\": \"Vizualizați jurnalele de acces\",\n  \"Have a great day!\": \"O zi bună!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Nu se poate găsi un tablou de bord cu slug-ul specificat: „:slug”.\",\n  \"Manage Internal Traffic Statistics settings\": \"Gestionați setările Statisticilor de trafic intern\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Statisticile de trafic intern sunt dezactivate. Pentru a le activa, editați configurația în config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Statisticile de trafic intern sunt activate în prezent. Puteți ajusta perioada de păstrare și fusul orar sau puteți dezactiva această funcție editând setările din config/cms.php.\",\n  \"Purging the data...\": \"Se șterg datele...\",\n  \"Purge Data\": \"Ștergeți datele\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Chiar doriți să ștergeți datele din Statisticile de trafic intern?\",\n  \"Data retention period\": \"Perioada de păstrare a datelor\",\n  \"Time zone\": \"Fus orar\",\n  \":retention month(s)\": \"lună(e) de retenție\",\n  \"Indefinite\": \"Nedefinit\",\n  \"Internal Traffic Statistics data purged\": \"Datele statistice interne privind traficul au fost eliminate\",\n  \"[not set]\": \"[nesetat]\",\n  \"1 day (today) if not set\": \"1 zi (astăzi) dacă nu este setată\",\n  \"Apply\": \"Aplică\",\n  \"Ascending\": \"Ascendent\",\n  \"Attribute\": \"Atribut\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Tipul de diagramă\",\n  \"Color\": \"Culoare\",\n  \"Compare Totals\": \"Comparați totalurile\",\n  \"Configure\": \"Configurați\",\n  \"Custom\": \"Personalizat\",\n  \"Dashboard interval\": \"Intervalul tabloului de bord\",\n  \"Data source\": \"Sursă de date\",\n  \"Date interval\": \"Interval de date\",\n  \"Day\": \"Zi\",\n  \"Delete\": \"Şterge\",\n  \"Delete Dashboard\": \"Ștergeți tabloul de bord\",\n  \"Delete row\": \"Ștergeți rândul\",\n  \"Descending\": \"Descendent\",\n  \"Dimension\": \"Dimensiune\",\n  \"Direction\": \"Direcţie\",\n  \"Disabled\": \"Persoane cu dizabilități\",\n  \"Display\": \"Afişa\",\n  \"Display [not set]\": \"Afișare [nesetat]\",\n  \"Display all records\": \"Afișați toate înregistrările\",\n  \"Display relative bars\": \"Afișați barele relative\",\n  \"Display totals\": \"Afișați totalurile\",\n  \"Edit Dashboard\": \"Editați tabloul de bord\",\n  \"Empty values\": \"Valori goale\",\n  \"Enter a positive number\": \"Introduceți un număr pozitiv\",\n  \"Enter a positive number or leave empty to display all records.\": \"Introduceți un număr pozitiv sau lăsați câmpul gol pentru a afișa toate înregistrările.\",\n  \"Equal to\": \"Egal cu\",\n  \"Export Dashboard\": \"Exportați tabloul de bord\",\n  \"Extra table fields\": \"Câmpuri suplimentare în tabel\",\n  \"Filters\": \"Filtre\",\n  \"General\": \"General\",\n  \"Greater or equal to\": \"Mai mare sau egal cu\",\n  \"Greater than\": \"Mai mare decât\",\n  \"Hide\": \"Ascunde\",\n  \"Horizontal\": \"Orizontală\",\n  \"Icon\": \"Pictogramă\",\n  \"Icon Status\": \"Stare pictogramă\",\n  \"Important\": \"Important\",\n  \"Includes\": \"Include\",\n  \"Information\": \"Informaţii\",\n  \"Last 30 days\": \"Ultimele 30 de zile\",\n  \"Last 7 days\": \"Ultimele 7 zile\",\n  \"Last month\": \"Luna trecută\",\n  \"Leave empty to disable pagination\": \"Lăsați gol pentru a dezactiva paginarea\",\n  \"Leave empty to hide the title\": \"Lăsați gol pentru a ascunde titlul\",\n  \"Less or equal to\": \"Mai mic sau egal cu\",\n  \"Less than\": \"Mai puțin decât\",\n  \"Limit\": \"Limită\",\n  \"Line\": \"Linia\",\n  \"Link Text\": \"Textul linkului\",\n  \"Link URL\": \"URL-ul linkului\",\n  \"Make Default\": \"Setare implicită\",\n  \"Metric\": \"Metric\",\n  \"Metrics\": \"Metrici\",\n  \"Month\": \"Lună\",\n  \"Notice text\": \"Textul notificării\",\n  \"Number of days\": \"Număr de zile\",\n  \"One of\": \"Unul dintre\",\n  \"One value per line\": \"O valoare pe linie\",\n  \"Operation\": \"Operațiune\",\n  \"Order\": \"Comanda\",\n  \"Past hour\": \"Ora trecută\",\n  \"Past X days\": \"Ultimele X zile\",\n  \"Please provide the widget title\": \"Vă rugăm să furnizați titlul widgetului\",\n  \"Please select a data source\": \"Vă rugăm să selectați o sursă de date\",\n  \"Please select a dimension\": \"Vă rugăm să selectați o dimensiune\",\n  \"Please select an icon\": \"Selectați o pictogramă\",\n  \"Please select metric(s).\": \"Vă rugăm să selectați metrica(ele).\",\n  \"Prev period\": \"Perioada anterioară\",\n  \"Quarter\": \"Trimestru\",\n  \"Records per page\": \"Înregistrări pe pagină\",\n  \"Refresh every minute\": \"Reîmprospătează în fiecare minut\",\n  \"Rename Dashboard\": \"Redenumiți tabloul de bord\",\n  \"Reset Layout\": \"Resetare aspect\",\n  \"Reset layout back to default?\": \"Resetare aspect la valorile implicite?\",\n  \"Same period last year\": \"Aceeași perioadă a anului trecut\",\n  \"Section Title\": \"Titlul secțiunii\",\n  \"Select a dimension and metrics\": \"Selectați o dimensiune și valori\",\n  \"Select an attribute\": \"Selectați un atribut\",\n  \"Select an operation\": \"Selectați o operațiune\",\n  \"Select sorting metric or dimension\": \"Selectați o metrică sau o dimensiune de sortare\",\n  \"Select the metric color\": \"Selectați culoarea metricii\",\n  \"Set the current layout as the default?\": \"Setează aspectul curent ca implicit?\",\n  \"Show Date Interval\": \"Afișați intervalul de date\",\n  \"Sort by\": \"Filtrează după\",\n  \"Sorting\": \"Triere\",\n  \"Sorting & Filtering\": \"Sortare și filtrare\",\n  \"Stacked Bar\": \"Bară stivuită\",\n  \"Starts with\": \"Începe cu\",\n  \"Success\": \"Succes\",\n  \"The dashboard layout has been reset to default.\": \"Aspectul tabloului de bord a fost resetat la setările implicite.\",\n  \"The dashboard was successfully updated.\": \"Tabloul de bord a fost actualizat cu succes.\",\n  \"The limit value must be at least 1\": \"Valoarea limită trebuie să fie cel puțin 1\",\n  \"This dashboard is now the default layout.\": \"Acest tablou de bord are acum aspectul implicit.\",\n  \"This month\": \"Luna aceasta\",\n  \"This quarter\": \"Acest trimestru\",\n  \"This week\": \"În această săptămână\",\n  \"This year\": \"Anul acesta\",\n  \"Title\": \"Titlu\",\n  \"Today\": \"Astăzi\",\n  \"Value\": \"Valoare\",\n  \"Values\": \"Valori\",\n  \"Vertical\": \"Vertical\",\n  \"Warning\": \"Avertizare\",\n  \"Week\": \"Săptămână\",\n  \"Year\": \"An\",\n  \"Yesterday\": \"Ieri\"\n}"
  },
  {
    "path": "modules/dashboard/lang/ru.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Функция внутренней статистики трафика регистрирует просмотры страниц, IP-адреса и другие основные данные анонимных пользователей в базе данных.\",\n  \"Internal Traffic Statistics\": \"Статистика внутреннего трафика\",\n  \"Purge the Internal Traffic Statistics data\": \"Очистить данные статистики внутреннего трафика\",\n  \"Manage Traffic Settings and Data\": \"Управление настройками и данными трафика\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Функция внутренней статистики трафика регистрирует просмотры страниц, IP-адреса и другие основные данные об анонимных пользователях в базе данных и предоставляет отчёты для панели управления. Если эта функция отключена, данные не записываются в базу данных.\",\n  \"Traffic Statistics\": \"Статистика трафика\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Часовой пояс для регистрации просмотров страниц. Изменение часового пояса не обновит существующие данные. Если изменить часовой пояс, не удалив существующие данные, в отчётах может отображаться неверное время для ранее зарегистрированных дней.\",\n  \"Retention Period (Months)\": \"Срок хранения (месяцы)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Определяет продолжительность хранения данных статистики трафика в базе данных. По истечении заданного срока соответствующие данные автоматически удаляются из базы данных. Установите значение 0 или пустое значение, чтобы сохранить записи навсегда.\",\n  \"Data Filters\": \"Фильтры данных\",\n  \"Exclude Bots\": \"Исключить ботов\",\n  \"Automatically ignores known bots using the detection library.\": \"Автоматически игнорирует известных ботов с помощью библиотеки обнаружения.\",\n  \"Exclude Administrator Roles\": \"Исключить роли администратора\",\n  \"Ignores traffic from selected roles.\": \"Игнорирует трафик с выбранных ролей.\",\n  \"Exclude IP Addresses\": \"Исключить IP-адреса\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Запросы с этих адресов будут игнорироваться в статистике.\",\n  \"Exclude Paths\": \"Исключить пути\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Введите один путь или шаблон в каждой строке, чтобы игнорировать соответствующие URL-адреса.\",\n  \"Access the Dashboard\": \"Перейдите на панель управления\",\n  \"Manage Dashboards\": \"Управление панелями мониторинга\",\n  \"Dashboard\": \"Панель управления\",\n  \"Manage the Internal Traffic Statistics data\": \"Управление данными внутренней статистики трафика\",\n  \"Date\": \"Дата\",\n  \"Page Path\": \"Путь к странице\",\n  \"Referral Domain\": \"Реферальный домен\",\n  \"Pageviews\": \"Просмотры страниц\",\n  \"Unique Visitors\": \"Уникальные посетители\",\n  \"Traffic Information\": \"Информация о дорожном движении\",\n  \"Website Status\": \"Статус сайта\",\n  \"Core version information\": \"Информация о базовой версии\",\n  \"System Issues\": \"Системные проблемы\",\n  \"Event Log\": \"Журнал событий\",\n  \"Request log\": \"Журнал запросов\",\n  \"Request Log\": \"Журнал запросов\",\n  \"Website status information\": \"Информация о состоянии веб-сайта\",\n  \"Add Row\": \"Добавить строку\",\n  \"Edit Row\": \"Редактировать строку\",\n  \"Edit Widget\": \"Редактировать виджет\",\n  \"No Value\": \"Нет ценности\",\n  \"Section\": \"Раздел\",\n  \"This is a text notice widget.\": \"Это виджет текстовых уведомлений.\",\n  \"My Custom Widget\": \"Мой пользовательский виджет\",\n  \"Chart\": \"Диаграмма\",\n  \"Indicator\": \"Индикатор\",\n  \"Table\": \"Стол\",\n  \"Text Notice\": \"Текстовое уведомление\",\n  \"Widget Configuration\": \"Настройка виджета\",\n  \"Configure the report widget\": \"Настройте виджет отчета.\",\n  \"Width :columns\": \"Ширина: столбцы\",\n  \"The widget width, a number between 1 and 10.\": \"Ширина виджета — число от 1 до 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Пожалуйста, введите ширину виджета в виде числа от 1 до 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} столбец|[2,Inf] столбцов\",\n  \"Force new row\": \"Принудительное создание новой строки\",\n  \"Put the widget in a new row.\": \"Разместите виджет в новой строке.\",\n  \"Widget title\": \"Заголовок виджета\",\n  \"The Widget Title is required.\": \"Заголовок виджета обязателен.\",\n  \"Layout has been reset\": \"Макет был сброшен.\",\n  \"Current layout is now the default\": \"Текущая раскладка теперь является раскладкой по умолчанию.\",\n  \"System status\": \"Состояние системы\",\n  \"Pending Software Updates\": \"Ожидаются обновления программного обеспечения\",\n  \"Software is Up to Date\": \"Программное обеспечение обновлено.\",\n  \"Update\": \"Обновлять\",\n  \"Some Issues Need Attention\": \"Некоторые вопросы требуют внимания.\",\n  \"No Warnings to Display\": \"Предупреждения не отображаются\",\n  \"View\": \"Вид\",\n  \"System Build\": \"Сборка системы\",\n  \"Online Since\": \"В сети с\",\n  \"Welcome\": \"Добро пожаловать\",\n  \"Welcome back to :app, :name.\": \"Снова добро пожаловать в :app, :name.\",\n  \"Welcome to :app, :name.\": \"Добро пожаловать в :app, :name.\",\n  \"This is the first time you have signed in.\": \"Вы впервые вошли в систему.\",\n  \"Your last sign in was\": \"Ваш последний вход в систему был\",\n  \"View Access Logs\": \"Просмотреть журналы доступа\",\n  \"Have a great day!\": \"Хорошего дня!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Не удалось найти панель мониторинга с указанным идентификатором: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Управление настройками внутренней статистики трафика\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Внутренняя статистика трафика отключена. Чтобы включить её, отредактируйте конфигурационный файл config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"В настоящее время включена функция внутренней статистики трафика. Вы можете изменить период хранения и часовой пояс, или отключить эту функцию, отредактировав настройки в файле config/cms.php.\",\n  \"Purging the data...\": \"Очистка данных...\",\n  \"Purge Data\": \"Очистка данных\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Вы действительно хотите удалить данные внутренней статистики трафика?\",\n  \"Data retention period\": \"Срок хранения данных\",\n  \"Time zone\": \"Часовой пояс\",\n  \":retention month(s)\": \":месяц(ы) удержания\",\n  \"Indefinite\": \"Неопределенный\",\n  \"Internal Traffic Statistics data purged\": \"Данные внутренней статистики трафика удалены.\",\n  \"[not set]\": \"[не задано]\",\n  \"1 day (today) if not set\": \"1 день (сегодня), если не задано\",\n  \"Apply\": \"Применять\",\n  \"Ascending\": \"Восходящий\",\n  \"Attribute\": \"Атрибут\",\n  \"Bar\": \"Бар\",\n  \"Chart type\": \"Тип диаграммы\",\n  \"Color\": \"Цвет\",\n  \"Compare Totals\": \"Сравнить итоговые суммы\",\n  \"Configure\": \"Настройка\",\n  \"Custom\": \"Обычай\",\n  \"Dashboard interval\": \"Интервал панели мониторинга\",\n  \"Data source\": \"Источник данных\",\n  \"Date interval\": \"Интервал дат\",\n  \"Day\": \"День\",\n  \"Delete\": \"Удалить\",\n  \"Delete Dashboard\": \"Удалить панель управления\",\n  \"Delete row\": \"Удалить строку\",\n  \"Descending\": \"Спуск\",\n  \"Dimension\": \"Измерение\",\n  \"Direction\": \"Направление\",\n  \"Disabled\": \"Неполноценный\",\n  \"Display\": \"Отображать\",\n  \"Display [not set]\": \"Отображение [не задано]\",\n  \"Display all records\": \"Показать все записи\",\n  \"Display relative bars\": \"Отображение относительных полос\",\n  \"Display totals\": \"Показать итоговые суммы\",\n  \"Edit Dashboard\": \"Редактировать панель управления\",\n  \"Empty values\": \"Пустые значения\",\n  \"Enter a positive number\": \"Введите положительное число\",\n  \"Enter a positive number or leave empty to display all records.\": \"Введите положительное число или оставьте поле пустым, чтобы отобразить все записи.\",\n  \"Equal to\": \"Равно\",\n  \"Export Dashboard\": \"Панель управления экспортом\",\n  \"Extra table fields\": \"Дополнительные поля таблицы\",\n  \"Filters\": \"Фильтры\",\n  \"General\": \"Общий\",\n  \"Greater or equal to\": \"Больше или равно\",\n  \"Greater than\": \"Больше чем\",\n  \"Hide\": \"Скрывать\",\n  \"Horizontal\": \"Горизонтальный\",\n  \"Icon\": \"Икона\",\n  \"Icon Status\": \"Статус значка\",\n  \"Important\": \"Важный\",\n  \"Includes\": \"Включает\",\n  \"Information\": \"Информация\",\n  \"Last 30 days\": \"Последние 30 дней\",\n  \"Last 7 days\": \"Последние 7 дней\",\n  \"Last month\": \"В прошлом месяце\",\n  \"Leave empty to disable pagination\": \"Оставьте поле пустым, чтобы отключить постраничную навигацию.\",\n  \"Leave empty to hide the title\": \"Оставьте поле пустым, чтобы скрыть заголовок.\",\n  \"Less or equal to\": \"Меньше или равно\",\n  \"Less than\": \"Меньше, чем\",\n  \"Limit\": \"Лимит\",\n  \"Line\": \"Линия\",\n  \"Link Text\": \"Текст ссылки\",\n  \"Link URL\": \"URL-адрес ссылки\",\n  \"Make Default\": \"Сделать по умолчанию\",\n  \"Metric\": \"Метрическая система\",\n  \"Metrics\": \"Метрики\",\n  \"Month\": \"Месяц\",\n  \"Notice text\": \"Текст уведомления\",\n  \"Number of days\": \"Количество дней\",\n  \"One of\": \"Один из\",\n  \"One value per line\": \"Одно значение на строку\",\n  \"Operation\": \"Операция\",\n  \"Order\": \"Заказ\",\n  \"Past hour\": \"Прошедший час\",\n  \"Past X days\": \"За последние X дней\",\n  \"Please provide the widget title\": \"Пожалуйста, укажите название виджета.\",\n  \"Please select a data source\": \"Пожалуйста, выберите источник данных.\",\n  \"Please select a dimension\": \"Пожалуйста, выберите размер.\",\n  \"Please select an icon\": \"Пожалуйста, выберите значок.\",\n  \"Please select metric(s).\": \"Пожалуйста, выберите метрику(и).\",\n  \"Prev period\": \"Предыдущий период\",\n  \"Quarter\": \"Четверть\",\n  \"Records per page\": \"Записей на странице\",\n  \"Refresh every minute\": \"Обновлять каждую минуту\",\n  \"Rename Dashboard\": \"Переименовать панель управления\",\n  \"Reset Layout\": \"Сбросить расположение элементов\",\n  \"Reset layout back to default?\": \"Как вернуть раскладку по умолчанию?\",\n  \"Same period last year\": \"Аналогичный период прошлого года.\",\n  \"Section Title\": \"Заголовок раздела\",\n  \"Select a dimension and metrics\": \"Выберите измерение и показатели.\",\n  \"Select an attribute\": \"Выберите атрибут\",\n  \"Select an operation\": \"Выберите операцию\",\n  \"Select sorting metric or dimension\": \"Выберите метрику или измерение сортировки.\",\n  \"Select the metric color\": \"Выберите метрический цвет\",\n  \"Set the current layout as the default?\": \"Установить текущий макет в качестве макета по умолчанию?\",\n  \"Show Date Interval\": \"Показать интервал дат\",\n  \"Sort by\": \"Сортировать по\",\n  \"Sorting\": \"Сортировка\",\n  \"Sorting & Filtering\": \"Сортировка и фильтрация\",\n  \"Stacked Bar\": \"Многоярусная барная стойка\",\n  \"Starts with\": \"Начинается с\",\n  \"Success\": \"Успех\",\n  \"The dashboard layout has been reset to default.\": \"Макет панели управления сброшен до значений по умолчанию.\",\n  \"The dashboard was successfully updated.\": \"Панель управления успешно обновлена.\",\n  \"The limit value must be at least 1\": \"Предельное значение должно быть не менее 1.\",\n  \"This dashboard is now the default layout.\": \"Эта панель мониторинга теперь является макетом по умолчанию.\",\n  \"This month\": \"В этом месяце\",\n  \"This quarter\": \"В этом квартале\",\n  \"This week\": \"На этой неделе\",\n  \"This year\": \"В этом году\",\n  \"Title\": \"Заголовок\",\n  \"Today\": \"Сегодня\",\n  \"Value\": \"Ценить\",\n  \"Values\": \"Ценности\",\n  \"Vertical\": \"Вертикальный\",\n  \"Warning\": \"Предупреждение\",\n  \"Week\": \"Неделя\",\n  \"Year\": \"Год\",\n  \"Yesterday\": \"Вчера\"\n}"
  },
  {
    "path": "modules/dashboard/lang/sk.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Funkcia štatistiky internej návštevnosti zaznamenáva zobrazenia stránok, IP adresy a ďalšie základné anonymné údaje o používateľoch do databázy.\",\n  \"Internal Traffic Statistics\": \"Štatistiky internej návštevnosti\",\n  \"Purge the Internal Traffic Statistics data\": \"Vymažte údaje zo štatistík internej návštevnosti\",\n  \"Manage Traffic Settings and Data\": \"Správa nastavení a údajov o premávke\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Štatistika internej návštevnosti zaznamenáva zobrazenia stránok, IP adresy a ďalšie základné anonymné údaje o používateľoch do databázy a poskytuje prehľady pre dashboard. Keď je táto funkcia vypnutá, údaje sa do databázy nezapisujú.\",\n  \"Traffic Statistics\": \"Štatistiky návštevnosti\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Časové pásmo na zaznamenávanie zobrazení stránok. Zmena časového pásma neaktualizuje existujúce údaje. Ak zmeníte časové pásmo bez vymazania existujúcich údajov, prehľady môžu potenciálne zobrazovať nesprávne časy pre predtým zaznamenané dni.\",\n  \"Retention Period (Months)\": \"Doba uchovávania (mesiace)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Určuje dobu, počas ktorej sa majú štatistické údaje o návštevnosti ukladať do databázy. Po uplynutí nastaveného obdobia sa príslušné údaje z databázy automaticky vymažú. Nastavte na 0 alebo prázdne, ak chcete záznamy uchovávať navždy.\",\n  \"Data Filters\": \"Filtre údajov\",\n  \"Exclude Bots\": \"Vylúčiť botov\",\n  \"Automatically ignores known bots using the detection library.\": \"Automaticky ignoruje známe boty pomocou detekčnej knižnice.\",\n  \"Exclude Administrator Roles\": \"Vylúčiť role správcu\",\n  \"Ignores traffic from selected roles.\": \"Ignoruje návštevnosť z vybraných rolí.\",\n  \"Exclude IP Addresses\": \"Vylúčiť IP adresy\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Žiadosti z týchto adries budú v štatistikách ignorované.\",\n  \"Exclude Paths\": \"Vylúčiť cesty\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Zadajte jednu cestu alebo vzor do každého riadka, aby sa ignorovali zhodné adresy URL.\",\n  \"Access the Dashboard\": \"Prístup k ovládaciemu panelu\",\n  \"Manage Dashboards\": \"Spravovať dashboardy\",\n  \"Dashboard\": \"Prístrojová doska\",\n  \"Manage the Internal Traffic Statistics data\": \"Spravujte údaje o štatistike internej návštevnosti\",\n  \"Date\": \"Dátum\",\n  \"Page Path\": \"Cesta k stránke\",\n  \"Referral Domain\": \"Referenčná doména\",\n  \"Pageviews\": \"Zobrazenia stránok\",\n  \"Unique Visitors\": \"Jedineční návštevníci\",\n  \"Traffic Information\": \"Informácie o doprave\",\n  \"Website Status\": \"Stav webovej stránky\",\n  \"Core version information\": \"Informácie o základnej verzii\",\n  \"System Issues\": \"Problémy so systémom\",\n  \"Event Log\": \"Denník udalostí\",\n  \"Request log\": \"Denník žiadostí\",\n  \"Request Log\": \"Denník žiadostí\",\n  \"Website status information\": \"Informácie o stave webovej stránky\",\n  \"Add Row\": \"Pridať riadok\",\n  \"Edit Row\": \"Upraviť riadok\",\n  \"Edit Widget\": \"Upraviť widget\",\n  \"No Value\": \"Žiadna hodnota\",\n  \"Section\": \"Sekcia\",\n  \"This is a text notice widget.\": \"Toto je widget s textovými upozorneniami.\",\n  \"My Custom Widget\": \"Môj vlastný widget\",\n  \"Chart\": \"Graf\",\n  \"Indicator\": \"Indikátor\",\n  \"Table\": \"Tabuľka\",\n  \"Text Notice\": \"Textové oznámenie\",\n  \"Widget Configuration\": \"Konfigurácia widgetu\",\n  \"Configure the report widget\": \"Konfigurácia widgetu prehľadu\",\n  \"Width :columns\": \"Šírka: stĺpce\",\n  \"The widget width, a number between 1 and 10.\": \"Šírka widgetu, číslo medzi 1 a 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Zadajte šírku widgetu ako číslo od 1 do 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} stĺpec|[2,Inf] stĺpce\",\n  \"Force new row\": \"Vynútiť nový riadok\",\n  \"Put the widget in a new row.\": \"Vložte widget do nového riadku.\",\n  \"Widget title\": \"Názov widgetu\",\n  \"The Widget Title is required.\": \"Názov widgetu je povinný.\",\n  \"Layout has been reset\": \"Rozloženie bolo resetované\",\n  \"Current layout is now the default\": \"Aktuálne rozloženie je teraz predvolené\",\n  \"System status\": \"Stav systému\",\n  \"Pending Software Updates\": \"Čakajúce aktualizácie softvéru\",\n  \"Software is Up to Date\": \"Softvér je aktuálny\",\n  \"Update\": \"Aktualizácia\",\n  \"Some Issues Need Attention\": \"Niektoré problémy si vyžadujú pozornosť\",\n  \"No Warnings to Display\": \"Žiadne upozornenia na zobrazenie\",\n  \"View\": \"Zobraziť\",\n  \"System Build\": \"Zostavenie systému\",\n  \"Online Since\": \"Online od\",\n  \"Welcome\": \"Vitajte\",\n  \"Welcome back to :app, :name.\": \"Vitajte späť v :app, :name.\",\n  \"Welcome to :app, :name.\": \"Vitajte v :app, :name.\",\n  \"This is the first time you have signed in.\": \"Toto je vaše prvé prihlásenie.\",\n  \"Your last sign in was\": \"Vaše posledné prihlásenie bolo\",\n  \"View Access Logs\": \"Zobraziť protokoly prístupu\",\n  \"Have a great day!\": \"Prajem pekný deň!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Nepodarilo sa nájsť dashboard so zadaným slugom: „:slug“.\",\n  \"Manage Internal Traffic Statistics settings\": \"Spravovať nastavenia štatistík internej návštevnosti\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Štatistiky internej návštevnosti sú vypnuté. Ak ich chcete povoliť, upravte konfiguráciu v súbore config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Štatistiky internej návštevnosti sú momentálne povolené. Dobu uchovávania a časové pásmo môžete upraviť alebo túto funkciu vypnúť úpravou nastavení v súbore config/cms.php.\",\n  \"Purging the data...\": \"Vymazanie údajov...\",\n  \"Purge Data\": \"Vymazať údaje\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Naozaj chcete vymazať údaje zo štatistík internej návštevnosti?\",\n  \"Data retention period\": \"Doba uchovávania údajov\",\n  \"Time zone\": \"Časové pásmo\",\n  \":retention month(s)\": \"mesiac(e) uchovávania\",\n  \"Indefinite\": \"Neurčitý\",\n  \"Internal Traffic Statistics data purged\": \"Údaje zo štatistík internej návštevnosti boli vymazané\",\n  \"[not set]\": \"[nie je nastavené]\",\n  \"1 day (today) if not set\": \"1 deň (dnes), ak nie je nastavený\",\n  \"Apply\": \"Použiť\",\n  \"Ascending\": \"Vzostupne\",\n  \"Attribute\": \"Atribút\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Typ grafu\",\n  \"Color\": \"Farba\",\n  \"Compare Totals\": \"Porovnať súčty\",\n  \"Configure\": \"Konfigurovať\",\n  \"Custom\": \"Vlastné\",\n  \"Dashboard interval\": \"Interval dashboardu\",\n  \"Data source\": \"Zdroj údajov\",\n  \"Date interval\": \"Interval dátumu\",\n  \"Day\": \"Deň\",\n  \"Delete\": \"Odstrániť\",\n  \"Delete Dashboard\": \"Odstrániť informačný panel\",\n  \"Delete row\": \"Odstrániť riadok\",\n  \"Descending\": \"Zostupne\",\n  \"Dimension\": \"Rozmer\",\n  \"Direction\": \"Smer\",\n  \"Disabled\": \"Zakázané\",\n  \"Display\": \"Displej\",\n  \"Display [not set]\": \"Displej [nie je nastavené]\",\n  \"Display all records\": \"Zobraziť všetky záznamy\",\n  \"Display relative bars\": \"Zobraziť relatívne stĺpce\",\n  \"Display totals\": \"Zobraziť súčty\",\n  \"Edit Dashboard\": \"Upraviť ovládací panel\",\n  \"Empty values\": \"Prázdne hodnoty\",\n  \"Enter a positive number\": \"Zadajte kladné číslo\",\n  \"Enter a positive number or leave empty to display all records.\": \"Zadajte kladné číslo alebo nechajte pole prázdne, ak chcete zobraziť všetky záznamy.\",\n  \"Equal to\": \"Rovné\",\n  \"Export Dashboard\": \"Exportovať dashboard\",\n  \"Extra table fields\": \"Doplnkové polia tabuľky\",\n  \"Filters\": \"Filtre\",\n  \"General\": \"Všeobecné\",\n  \"Greater or equal to\": \"Väčšie alebo rovné\",\n  \"Greater than\": \"Väčšie ako\",\n  \"Hide\": \"Skryť\",\n  \"Horizontal\": \"Horizontálne\",\n  \"Icon\": \"Ikona\",\n  \"Icon Status\": \"Stav ikony\",\n  \"Important\": \"Dôležité\",\n  \"Includes\": \"Zahŕňa\",\n  \"Information\": \"Informácie\",\n  \"Last 30 days\": \"Posledných 30 dní\",\n  \"Last 7 days\": \"Posledných 7 dní\",\n  \"Last month\": \"Minulý mesiac\",\n  \"Leave empty to disable pagination\": \"Pre vypnutie stránkovania nechajte pole prázdne.\",\n  \"Leave empty to hide the title\": \"Ak chcete skryť názov, nechajte pole prázdne.\",\n  \"Less or equal to\": \"Menšie alebo rovné\",\n  \"Less than\": \"Menej ako\",\n  \"Limit\": \"Limit\",\n  \"Line\": \"Čiara\",\n  \"Link Text\": \"Text odkazu\",\n  \"Link URL\": \"URL adresa odkazu\",\n  \"Make Default\": \"Nastaviť ako predvolené\",\n  \"Metric\": \"Metrika\",\n  \"Metrics\": \"Metriky\",\n  \"Month\": \"Mesiac\",\n  \"Notice text\": \"Text oznámenia\",\n  \"Number of days\": \"Počet dní\",\n  \"One of\": \"Jeden z\",\n  \"One value per line\": \"Jedna hodnota na riadok\",\n  \"Operation\": \"Prevádzka\",\n  \"Order\": \"Objednávka\",\n  \"Past hour\": \"Posledná hodina\",\n  \"Past X days\": \"Posledných X dní\",\n  \"Please provide the widget title\": \"Prosím, uveďte názov widgetu\",\n  \"Please select a data source\": \"Vyberte zdroj údajov\",\n  \"Please select a dimension\": \"Vyberte dimenziu\",\n  \"Please select an icon\": \"Vyberte ikonu\",\n  \"Please select metric(s).\": \"Vyberte metriku(y).\",\n  \"Prev period\": \"Predchádzajúce obdobie\",\n  \"Quarter\": \"Štvrťrok\",\n  \"Records per page\": \"Záznamy na stránku\",\n  \"Refresh every minute\": \"Obnoviť každú minútu\",\n  \"Rename Dashboard\": \"Premenovať dashboard\",\n  \"Reset Layout\": \"Obnoviť rozloženie\",\n  \"Reset layout back to default?\": \"Obnoviť rozloženie späť na predvolené?\",\n  \"Same period last year\": \"Rovnaké obdobie minulého roka\",\n  \"Section Title\": \"Názov sekcie\",\n  \"Select a dimension and metrics\": \"Vyberte dimenziu a metriky\",\n  \"Select an attribute\": \"Vyberte atribút\",\n  \"Select an operation\": \"Vyberte operáciu\",\n  \"Select sorting metric or dimension\": \"Vyberte metriku alebo dimenziu zoradenia\",\n  \"Select the metric color\": \"Vyberte farbu metriky\",\n  \"Set the current layout as the default?\": \"Nastaviť aktuálne rozloženie ako predvolené?\",\n  \"Show Date Interval\": \"Zobraziť interval dátumu\",\n  \"Sort by\": \"Zoradiť podľa\",\n  \"Sorting\": \"Triedenie\",\n  \"Sorting & Filtering\": \"Triedenie a filtrovanie\",\n  \"Stacked Bar\": \"Skladaný pruhový graf\",\n  \"Starts with\": \"Začína sa s\",\n  \"Success\": \"Úspech\",\n  \"The dashboard layout has been reset to default.\": \"Rozloženie ovládacieho panela bolo obnovené na predvolené hodnoty.\",\n  \"The dashboard was successfully updated.\": \"Ovládací panel bol úspešne aktualizovaný.\",\n  \"The limit value must be at least 1\": \"Limitná hodnota musí byť aspoň 1\",\n  \"This dashboard is now the default layout.\": \"Tento dashboard má teraz predvolené rozloženie.\",\n  \"This month\": \"Tento mesiac\",\n  \"This quarter\": \"Tento štvrťrok\",\n  \"This week\": \"Tento týždeň\",\n  \"This year\": \"Tento rok\",\n  \"Title\": \"Názov\",\n  \"Today\": \"Dnes\",\n  \"Value\": \"Hodnota\",\n  \"Values\": \"Hodnoty\",\n  \"Vertical\": \"Vertikálne\",\n  \"Warning\": \"POZOR\",\n  \"Week\": \"Týždeň\",\n  \"Year\": \"Rok\",\n  \"Yesterday\": \"Včera\"\n}"
  },
  {
    "path": "modules/dashboard/lang/sl.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Funkcija statistike notranjega prometa beleži oglede strani, naslove IP in druge osnovne anonimne uporabniške podatke v bazo podatkov.\",\n  \"Internal Traffic Statistics\": \"Statistika notranjega prometa\",\n  \"Purge the Internal Traffic Statistics data\": \"Izbrišite podatke statistike notranjega prometa\",\n  \"Manage Traffic Settings and Data\": \"Upravljanje nastavitev in podatkov o prometu\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Statistika notranjega prometa beleži oglede strani, naslove IP in druge osnovne anonimne uporabniške podatke v zbirko podatkov ter zagotavlja poročila za nadzorno ploščo. Ko je funkcija onemogočena, se podatki ne zapisujejo v zbirko podatkov.\",\n  \"Traffic Statistics\": \"Statistika prometa\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Časovni pas za beleženje ogledov strani. Sprememba časovnega pasu ne bo posodobila obstoječih podatkov. Če spremenite časovni pas, ne da bi izbrisali obstoječe podatke, lahko poročila prikazujejo napačne čase za prej zabeležene dni.\",\n  \"Retention Period (Months)\": \"Obdobje hrambe (meseci)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Določa trajanje shranjevanja statističnih podatkov o prometu v zbirki podatkov. Ko nastavljeno obdobje poteče, se ustrezni podatki samodejno izbrišejo iz zbirke podatkov. Nastavite na 0 ali prazno, da zapise ohranite za vedno.\",\n  \"Data Filters\": \"Filtri podatkov\",\n  \"Exclude Bots\": \"Izključi bote\",\n  \"Automatically ignores known bots using the detection library.\": \"Samodejno ignorira znane bote z uporabo knjižnice za zaznavanje.\",\n  \"Exclude Administrator Roles\": \"Izključi skrbniške vloge\",\n  \"Ignores traffic from selected roles.\": \"Ignorira promet iz izbranih vlog.\",\n  \"Exclude IP Addresses\": \"Izključi naslove IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Zahteve s teh naslovov bodo v statistiki prezrte.\",\n  \"Exclude Paths\": \"Izključi poti\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"V vsako vrstico vnesite eno pot ali vzorec, da prezrete ujemajoče se URL-je.\",\n  \"Access the Dashboard\": \"Dostop do nadzorne plošče\",\n  \"Manage Dashboards\": \"Upravljanje nadzornih plošč\",\n  \"Dashboard\": \"Nadzorna plošča\",\n  \"Manage the Internal Traffic Statistics data\": \"Upravljanje podatkov statistike internega prometa\",\n  \"Date\": \"Datum\",\n  \"Page Path\": \"Pot strani\",\n  \"Referral Domain\": \"Referenčna domena\",\n  \"Pageviews\": \"Ogledi strani\",\n  \"Unique Visitors\": \"Edinstveni obiskovalci\",\n  \"Traffic Information\": \"Prometne informacije\",\n  \"Website Status\": \"Stanje spletnega mesta\",\n  \"Core version information\": \"Informacije o osnovni različici\",\n  \"System Issues\": \"Težave s sistemom\",\n  \"Event Log\": \"Dnevnik dogodkov\",\n  \"Request log\": \"Dnevnik zahtev\",\n  \"Request Log\": \"Dnevnik zahtev\",\n  \"Website status information\": \"Informacije o stanju spletnega mesta\",\n  \"Add Row\": \"Dodaj vrstico\",\n  \"Edit Row\": \"Uredi vrstico\",\n  \"Edit Widget\": \"Urejanje pripomočka\",\n  \"No Value\": \"Brez vrednosti\",\n  \"Section\": \"Oddelek\",\n  \"This is a text notice widget.\": \"To je pripomoček za besedilna obvestila.\",\n  \"My Custom Widget\": \"Moj pripomoček po meri\",\n  \"Chart\": \"Grafikon\",\n  \"Indicator\": \"Kazalnik\",\n  \"Table\": \"Tabela\",\n  \"Text Notice\": \"Besedilno obvestilo\",\n  \"Widget Configuration\": \"Konfiguracija gradnika\",\n  \"Configure the report widget\": \"Konfigurirajte pripomoček za poročila\",\n  \"Width :columns\": \"Širina: stolpci\",\n  \"The widget width, a number between 1 and 10.\": \"Širina gradnika, število med 1 in 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Prosimo, vnesite širino gradnika kot število med 1 in 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} stolpec|[2,Inf] stolpcev\",\n  \"Force new row\": \"Vsili novo vrstico\",\n  \"Put the widget in a new row.\": \"Postavite pripomoček v novo vrstico.\",\n  \"Widget title\": \"Naslov gradnika\",\n  \"The Widget Title is required.\": \"Naslov gradnika je obvezen.\",\n  \"Layout has been reset\": \"Postavitev je bila ponastavljena\",\n  \"Current layout is now the default\": \"Trenutna postavitev je zdaj privzeta\",\n  \"System status\": \"Stanje sistema\",\n  \"Pending Software Updates\": \"Čakajoče posodobitve programske opreme\",\n  \"Software is Up to Date\": \"Programska oprema je posodobljena\",\n  \"Update\": \"Posodobitev\",\n  \"Some Issues Need Attention\": \"Nekatera vprašanja zahtevajo pozornost\",\n  \"No Warnings to Display\": \"Ni opozoril za prikaz\",\n  \"View\": \"Ogled\",\n  \"System Build\": \"Zgradba sistema\",\n  \"Online Since\": \"Na spletu od\",\n  \"Welcome\": \"Dobrodošli\",\n  \"Welcome back to :app, :name.\": \"Dobrodošli nazaj v :app, :name.\",\n  \"Welcome to :app, :name.\": \"Dobrodošli v :app, :name.\",\n  \"This is the first time you have signed in.\": \"To je prvič, da ste se prijavili.\",\n  \"Your last sign in was\": \"Vaša zadnja prijava je bila\",\n  \"View Access Logs\": \"Ogled dnevnikov dostopa\",\n  \"Have a great day!\": \"Želim vam lep dan!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Nadzorne plošče z navedenim slugom ni mogoče najti: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Upravljanje nastavitev statistike notranjega prometa\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Statistika notranjega prometa je onemogočena. Če jo želite omogočiti, uredite konfiguracijo v datoteki config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Statistika notranjega prometa je trenutno omogočena. Obdobje hrambe in časovni pas lahko prilagodite ali pa to funkcijo onemogočite z urejanjem nastavitev v datoteki config/cms.php.\",\n  \"Purging the data...\": \"Brisanje podatkov ...\",\n  \"Purge Data\": \"Izbriši podatke\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Ali res želite izbrisati podatke statistike notranjega prometa?\",\n  \"Data retention period\": \"Obdobje hrambe podatkov\",\n  \"Time zone\": \"Časovni pas\",\n  \":retention month(s)\": \":mesec(i) hrambe\",\n  \"Indefinite\": \"Nedoločen\",\n  \"Internal Traffic Statistics data purged\": \"Podatki interne statistike prometa so bili izbrisani\",\n  \"[not set]\": \"[ni nastavljeno]\",\n  \"1 day (today) if not set\": \"1 dan (danes), če ni nastavljeno\",\n  \"Apply\": \"Uporabi\",\n  \"Ascending\": \"Naraščajoče\",\n  \"Attribute\": \"Atribut\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Vrsta grafikona\",\n  \"Color\": \"Barva\",\n  \"Compare Totals\": \"Primerjaj skupne zneske\",\n  \"Configure\": \"Konfiguriraj\",\n  \"Custom\": \"Po meri\",\n  \"Dashboard interval\": \"Interval nadzorne plošče\",\n  \"Data source\": \"Vir podatkov\",\n  \"Date interval\": \"Datumski interval\",\n  \"Day\": \"Dan\",\n  \"Delete\": \"Izbriši\",\n  \"Delete Dashboard\": \"Izbriši nadzorno ploščo\",\n  \"Delete row\": \"Izbriši vrstico\",\n  \"Descending\": \"Padajoče\",\n  \"Dimension\": \"Dimenzija\",\n  \"Direction\": \"Smer\",\n  \"Disabled\": \"Onemogočeno\",\n  \"Display\": \"Prikaz\",\n  \"Display [not set]\": \"Prikaz [ni nastavljeno]\",\n  \"Display all records\": \"Prikaži vse zapise\",\n  \"Display relative bars\": \"Prikaz relativnih stolpcev\",\n  \"Display totals\": \"Prikaži skupne zneske\",\n  \"Edit Dashboard\": \"Uredi nadzorno ploščo\",\n  \"Empty values\": \"Prazne vrednosti\",\n  \"Enter a positive number\": \"Vnesite pozitivno število\",\n  \"Enter a positive number or leave empty to display all records.\": \"Vnesite pozitivno število ali pustite prazno, da prikažete vse zapise.\",\n  \"Equal to\": \"Enako kot\",\n  \"Export Dashboard\": \"Izvozi nadzorno ploščo\",\n  \"Extra table fields\": \"Dodatna polja tabele\",\n  \"Filters\": \"Filtri\",\n  \"General\": \"Splošno\",\n  \"Greater or equal to\": \"Večje ali enako kot\",\n  \"Greater than\": \"Večje kot\",\n  \"Hide\": \"Skrij\",\n  \"Horizontal\": \"Vodoravno\",\n  \"Icon\": \"Ikona\",\n  \"Icon Status\": \"Ikona Stanje\",\n  \"Important\": \"Pomembno\",\n  \"Includes\": \"Vključuje\",\n  \"Information\": \"Informacije\",\n  \"Last 30 days\": \"Zadnjih 30 dni\",\n  \"Last 7 days\": \"Zadnjih 7 dni\",\n  \"Last month\": \"Prejšnji mesec\",\n  \"Leave empty to disable pagination\": \"Pustite prazno, če želite onemogočiti oštevilčenje strani.\",\n  \"Leave empty to hide the title\": \"Pustite prazno, če želite skriti naslov\",\n  \"Less or equal to\": \"Manjše ali enako\",\n  \"Less than\": \"Manj kot\",\n  \"Limit\": \"Omejitev\",\n  \"Line\": \"Črta\",\n  \"Link Text\": \"Besedilo povezave\",\n  \"Link URL\": \"URL povezave\",\n  \"Make Default\": \"Nastavi kot privzeto\",\n  \"Metric\": \"Metrika\",\n  \"Metrics\": \"Metrike\",\n  \"Month\": \"Mesec\",\n  \"Notice text\": \"Besedilo obvestila\",\n  \"Number of days\": \"Število dni\",\n  \"One of\": \"Eden od\",\n  \"One value per line\": \"Ena vrednost na vrstico\",\n  \"Operation\": \"Operacija\",\n  \"Order\": \"Naročilo\",\n  \"Past hour\": \"Pretekla ura\",\n  \"Past X days\": \"Preteklih X dni\",\n  \"Please provide the widget title\": \"Prosimo, navedite naslov gradnika\",\n  \"Please select a data source\": \"Izberite vir podatkov\",\n  \"Please select a dimension\": \"Izberite dimenzijo\",\n  \"Please select an icon\": \"Izberite ikono\",\n  \"Please select metric(s).\": \"Izberite metriko(-e).\",\n  \"Prev period\": \"Prejšnje obdobje\",\n  \"Quarter\": \"Četrt\",\n  \"Records per page\": \"Zapisov na stran\",\n  \"Refresh every minute\": \"Osveži vsako minuto\",\n  \"Rename Dashboard\": \"Preimenuj nadzorno ploščo\",\n  \"Reset Layout\": \"Ponastavi postavitev\",\n  \"Reset layout back to default?\": \"Ponastavitev postavitve nazaj na privzeto?\",\n  \"Same period last year\": \"Enako obdobje lani\",\n  \"Section Title\": \"Naslov razdelka\",\n  \"Select a dimension and metrics\": \"Izberite dimenzijo in meritve\",\n  \"Select an attribute\": \"Izberite atribut\",\n  \"Select an operation\": \"Izberite operacijo\",\n  \"Select sorting metric or dimension\": \"Izberite metriko ali dimenzijo razvrščanja\",\n  \"Select the metric color\": \"Izberite barvo metrike\",\n  \"Set the current layout as the default?\": \"Naj trenutno postavitev nastavim kot privzeto?\",\n  \"Show Date Interval\": \"Prikaži datumski interval\",\n  \"Sort by\": \"Razvrsti po\",\n  \"Sorting\": \"Razvrščanje\",\n  \"Sorting & Filtering\": \"Razvrščanje in filtriranje\",\n  \"Stacked Bar\": \"Zložena črtna grafika\",\n  \"Starts with\": \"Začne se z\",\n  \"Success\": \"Uspeh\",\n  \"The dashboard layout has been reset to default.\": \"Postavitev nadzorne plošče je bila ponastavljena na privzete nastavitve.\",\n  \"The dashboard was successfully updated.\": \"Nadzorna plošča je bila uspešno posodobljena.\",\n  \"The limit value must be at least 1\": \"Mejna vrednost mora biti vsaj 1\",\n  \"This dashboard is now the default layout.\": \"Ta nadzorna plošča je zdaj privzeta postavitev.\",\n  \"This month\": \"Ta mesec\",\n  \"This quarter\": \"To četrtletje\",\n  \"This week\": \"Ta teden\",\n  \"This year\": \"Letos\",\n  \"Title\": \"Naslov\",\n  \"Today\": \"Danes\",\n  \"Value\": \"Vrednost\",\n  \"Values\": \"Vrednote\",\n  \"Vertical\": \"Navpično\",\n  \"Warning\": \"Opozorilo\",\n  \"Week\": \"Teden\",\n  \"Year\": \"Leto\",\n  \"Yesterday\": \"Včeraj\"\n}"
  },
  {
    "path": "modules/dashboard/lang/sv.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Funktionen Intern trafikstatistik loggar sidvisningar, IP-adresser och annan grundläggande anonym användardata i databasen.\",\n  \"Internal Traffic Statistics\": \"Intern trafikstatistik\",\n  \"Purge the Internal Traffic Statistics data\": \"Rensa den interna trafikstatistikdatan\",\n  \"Manage Traffic Settings and Data\": \"Hantera trafikinställningar och data\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Intern trafikstatistik loggar sidvisningar, IP-adresser och annan grundläggande anonym användardata i databasen och tillhandahåller rapporter för instrumentpanelen. När funktionen är inaktiverad skrivs inte informationen till databasen.\",\n  \"Traffic Statistics\": \"Trafikstatistik\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Tidszon för att logga sidvisningar. Att ändra tidszonen uppdaterar inte befintlig data. Om du ändrar tidszonen utan att radera befintlig data kan rapporter potentiellt visa felaktiga tider för tidigare loggade dagar.\",\n  \"Retention Period (Months)\": \"Lagringsperiod (månader)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Bestämmer hur länge trafikstatistikdata ska lagras i databasen. När den angivna perioden löper ut rensas motsvarande data automatiskt från databasen. Ställ in på 0 eller tomt för att behålla poster för alltid.\",\n  \"Data Filters\": \"Datafilter\",\n  \"Exclude Bots\": \"Uteslut botar\",\n  \"Automatically ignores known bots using the detection library.\": \"Ignorerar automatiskt kända botar med hjälp av detekteringsbiblioteket.\",\n  \"Exclude Administrator Roles\": \"Exkludera administratörsroller\",\n  \"Ignores traffic from selected roles.\": \"Ignorerar trafik från valda roller.\",\n  \"Exclude IP Addresses\": \"Exkludera IP-adresser\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Förfrågningar från dessa adresser kommer att ignoreras i statistiken.\",\n  \"Exclude Paths\": \"Uteslut sökvägar\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Ange en sökväg eller ett mönster per rad för att ignorera matchande webbadresser.\",\n  \"Access the Dashboard\": \"Åtkomst till instrumentpanelen\",\n  \"Manage Dashboards\": \"Hantera instrumentpaneler\",\n  \"Dashboard\": \"Instrumentpanel\",\n  \"Manage the Internal Traffic Statistics data\": \"Hantera intern trafikstatistik\",\n  \"Date\": \"Datum\",\n  \"Page Path\": \"Sidsökväg\",\n  \"Referral Domain\": \"Referensdomän\",\n  \"Pageviews\": \"Sidvisningar\",\n  \"Unique Visitors\": \"Unika besökare\",\n  \"Traffic Information\": \"Trafikinformation\",\n  \"Website Status\": \"Webbplatsstatus\",\n  \"Core version information\": \"Information om kärnversionen\",\n  \"System Issues\": \"Systemproblem\",\n  \"Event Log\": \"Händelselogg\",\n  \"Request log\": \"Begäranlogg\",\n  \"Request Log\": \"Begäranlogg\",\n  \"Website status information\": \"Information om webbplatsens status\",\n  \"Add Row\": \"Lägg till rad\",\n  \"Edit Row\": \"Redigera rad\",\n  \"Edit Widget\": \"Redigera widget\",\n  \"No Value\": \"Inget värde\",\n  \"Section\": \"Avsnitt\",\n  \"This is a text notice widget.\": \"Detta är en widget för textmeddelanden.\",\n  \"My Custom Widget\": \"Min anpassade widget\",\n  \"Chart\": \"Diagram\",\n  \"Indicator\": \"Indikator\",\n  \"Table\": \"Tabell\",\n  \"Text Notice\": \"Textmeddelande\",\n  \"Widget Configuration\": \"Widgetkonfiguration\",\n  \"Configure the report widget\": \"Konfigurera rapportwidgeten\",\n  \"Width :columns\": \"Bredd: kolumner\",\n  \"The widget width, a number between 1 and 10.\": \"Widgetens bredd, ett tal mellan 1 och 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Ange widgetens bredd som ett tal mellan 1 och 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} kolumn|[2,Inf] kolumner\",\n  \"Force new row\": \"Tvinga fram ny rad\",\n  \"Put the widget in a new row.\": \"Placera widgeten på en ny rad.\",\n  \"Widget title\": \"Widgettitel\",\n  \"The Widget Title is required.\": \"Widgettiteln är obligatorisk.\",\n  \"Layout has been reset\": \"Layouten har återställts\",\n  \"Current layout is now the default\": \"Nuvarande layout är nu standard\",\n  \"System status\": \"Systemstatus\",\n  \"Pending Software Updates\": \"Väntande programuppdateringar\",\n  \"Software is Up to Date\": \"Programvaran är uppdaterad\",\n  \"Update\": \"Uppdatera\",\n  \"Some Issues Need Attention\": \"Vissa problem behöver uppmärksammas\",\n  \"No Warnings to Display\": \"Inga varningar att visa\",\n  \"View\": \"Se\",\n  \"System Build\": \"Systembygge\",\n  \"Online Since\": \"Online sedan\",\n  \"Welcome\": \"Välkomna\",\n  \"Welcome back to :app, :name.\": \"Välkommen tillbaka till :app, :name.\",\n  \"Welcome to :app, :name.\": \"Välkommen till :app, :name.\",\n  \"This is the first time you have signed in.\": \"Det här är första gången du har loggat in.\",\n  \"Your last sign in was\": \"Din senaste inloggning var\",\n  \"View Access Logs\": \"Visa åtkomstloggar\",\n  \"Have a great day!\": \"Ha en bra dag!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Det går inte att hitta en instrumentpanel med den angivna slug: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Hantera inställningar för intern trafikstatistik\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Intern trafikstatistik är inaktiverad. För att aktivera den, redigera konfigurationen i config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Intern trafikstatistik är för närvarande aktiverad. Du kan justera lagringsperioden och tidszonen, eller inaktivera den här funktionen, genom att redigera inställningarna i config/cms.php.\",\n  \"Purging the data...\": \"Rensar data...\",\n  \"Purge Data\": \"Rensa data\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Vill du verkligen rensa den interna trafikstatistikdatan?\",\n  \"Data retention period\": \"Datalagringsperiod\",\n  \"Time zone\": \"Tidszon\",\n  \":retention month(s)\": \":kvarhållningsmånad(er)\",\n  \"Indefinite\": \"Obestämd\",\n  \"Internal Traffic Statistics data purged\": \"Intern trafikstatistik har rensats\",\n  \"[not set]\": \"[ej inställd]\",\n  \"1 day (today) if not set\": \"1 dag (idag) om inte angivet\",\n  \"Apply\": \"Tillämpas\",\n  \"Ascending\": \"Stigande\",\n  \"Attribute\": \"Attribut\",\n  \"Bar\": \"Bar\",\n  \"Chart type\": \"Diagramtyp\",\n  \"Color\": \"Färg\",\n  \"Compare Totals\": \"Jämför summor\",\n  \"Configure\": \"Konfigurera\",\n  \"Custom\": \"Beställnings\",\n  \"Dashboard interval\": \"Intervall för instrumentpanelen\",\n  \"Data source\": \"Datakälla\",\n  \"Date interval\": \"Datumintervall\",\n  \"Day\": \"Dag\",\n  \"Delete\": \"Radera\",\n  \"Delete Dashboard\": \"Ta bort instrumentpanelen\",\n  \"Delete row\": \"Ta bort rad\",\n  \"Descending\": \"Fallande\",\n  \"Dimension\": \"Dimensionera\",\n  \"Direction\": \"Riktning\",\n  \"Disabled\": \"Funktionshindrad\",\n  \"Display\": \"Visa\",\n  \"Display [not set]\": \"Visa [ej inställd]\",\n  \"Display all records\": \"Visa alla poster\",\n  \"Display relative bars\": \"Visa relativa staplar\",\n  \"Display totals\": \"Visa totalsummor\",\n  \"Edit Dashboard\": \"Redigera instrumentpanel\",\n  \"Empty values\": \"Tomma värden\",\n  \"Enter a positive number\": \"Ange ett positivt tal\",\n  \"Enter a positive number or leave empty to display all records.\": \"Ange ett positivt tal eller lämna tomt för att visa alla poster.\",\n  \"Equal to\": \"Lika med\",\n  \"Export Dashboard\": \"Exportera instrumentpanelen\",\n  \"Extra table fields\": \"Extra tabellfält\",\n  \"Filters\": \"Filter\",\n  \"General\": \"Allmän\",\n  \"Greater or equal to\": \"Större än eller lika med\",\n  \"Greater than\": \"Större än\",\n  \"Hide\": \"Dölja\",\n  \"Horizontal\": \"Horisontell\",\n  \"Icon\": \"Ikon\",\n  \"Icon Status\": \"Ikonstatus\",\n  \"Important\": \"Viktig\",\n  \"Includes\": \"Inkluderar\",\n  \"Information\": \"Information\",\n  \"Last 30 days\": \"Senaste 30 dagarna\",\n  \"Last 7 days\": \"Senaste 7 dagarna\",\n  \"Last month\": \"Förra månaden\",\n  \"Leave empty to disable pagination\": \"Lämna tomt för att inaktivera paginering\",\n  \"Leave empty to hide the title\": \"Lämna tomt för att dölja titeln\",\n  \"Less or equal to\": \"Mindre eller lika med\",\n  \"Less than\": \"Mindre än\",\n  \"Limit\": \"Begränsa\",\n  \"Line\": \"Linje\",\n  \"Link Text\": \"Länktext\",\n  \"Link URL\": \"Länk-URL\",\n  \"Make Default\": \"Gör till standard\",\n  \"Metric\": \"Metrisk\",\n  \"Metrics\": \"Metrik\",\n  \"Month\": \"Månad\",\n  \"Notice text\": \"Meddelandetext\",\n  \"Number of days\": \"Antal dagar\",\n  \"One of\": \"En av\",\n  \"One value per line\": \"Ett värde per rad\",\n  \"Operation\": \"Drift\",\n  \"Order\": \"Beställa\",\n  \"Past hour\": \"Senaste timmen\",\n  \"Past X days\": \"Senaste X dagar\",\n  \"Please provide the widget title\": \"Ange widgetens titel\",\n  \"Please select a data source\": \"Välj en datakälla\",\n  \"Please select a dimension\": \"Vänligen välj en dimension\",\n  \"Please select an icon\": \"Välj en ikon\",\n  \"Please select metric(s).\": \"Välj mätvärde/mått.\",\n  \"Prev period\": \"Föregående period\",\n  \"Quarter\": \"Kvartal\",\n  \"Records per page\": \"Poster per sida\",\n  \"Refresh every minute\": \"Uppdatera varje minut\",\n  \"Rename Dashboard\": \"Byt namn på instrumentpanelen\",\n  \"Reset Layout\": \"Återställ layout\",\n  \"Reset layout back to default?\": \"Återställa layouten till standard?\",\n  \"Same period last year\": \"Samma period förra året\",\n  \"Section Title\": \"Avsnittstitel\",\n  \"Select a dimension and metrics\": \"Välj en dimension och mätvärden\",\n  \"Select an attribute\": \"Välj ett attribut\",\n  \"Select an operation\": \"Välj en operation\",\n  \"Select sorting metric or dimension\": \"Välj sorteringsmått eller dimension\",\n  \"Select the metric color\": \"Välj metrikfärg\",\n  \"Set the current layout as the default?\": \"Ange den aktuella layouten som standard?\",\n  \"Show Date Interval\": \"Visa datumintervall\",\n  \"Sort by\": \"Sortera efter\",\n  \"Sorting\": \"Sortering\",\n  \"Sorting & Filtering\": \"Sortering och filtrering\",\n  \"Stacked Bar\": \"Staplad bar\",\n  \"Starts with\": \"Börjar med\",\n  \"Success\": \"Framgång\",\n  \"The dashboard layout has been reset to default.\": \"Instrumentpanelens layout har återställts till standard.\",\n  \"The dashboard was successfully updated.\": \"Instrumentpanelen har uppdaterats.\",\n  \"The limit value must be at least 1\": \"Gränsvärdet måste vara minst 1\",\n  \"This dashboard is now the default layout.\": \"Den här instrumentpanelen är nu standardlayouten.\",\n  \"This month\": \"Denna månad\",\n  \"This quarter\": \"Detta kvartal\",\n  \"This week\": \"Denna vecka\",\n  \"This year\": \"I år\",\n  \"Title\": \"Titel\",\n  \"Today\": \"I dag\",\n  \"Value\": \"Värde\",\n  \"Values\": \"Värden\",\n  \"Vertical\": \"Vertikal\",\n  \"Warning\": \"Varning\",\n  \"Week\": \"Vecka\",\n  \"Year\": \"År\",\n  \"Yesterday\": \"I går\"\n}"
  },
  {
    "path": "modules/dashboard/lang/th.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"ฟีเจอร์สถิติการเข้าชมภายในจะบันทึกการดูเพจ ที่อยู่ IP และข้อมูลผู้ใช้ที่ไม่ระบุตัวตนพื้นฐานอื่นๆ ลงในฐานข้อมูล\",\n  \"Internal Traffic Statistics\": \"สถิติการเข้าชมภายใน\",\n  \"Purge the Internal Traffic Statistics data\": \"ล้างข้อมูลสถิติการเข้าชมภายใน\",\n  \"Manage Traffic Settings and Data\": \"จัดการการตั้งค่าข้อมูลการจราจร\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"สถิติการเข้าชมภายในจะบันทึกจำนวนการดูเพจ ที่อยู่ IP และข้อมูลผู้ใช้ที่ไม่ระบุตัวตนพื้นฐานอื่นๆ ลงในฐานข้อมูล และจัดทำรายงานสำหรับแดชบอร์ด เมื่อปิดใช้งานฟีเจอร์นี้ ข้อมูลจะไม่ถูกเขียนลงในฐานข้อมูล\",\n  \"Traffic Statistics\": \"สถิติการเข้าชม\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"เขตเวลาสำหรับบันทึกจำนวนการดูหน้าเว็บ การเปลี่ยนเขตเวลาจะไม่อัปเดตข้อมูลที่มีอยู่ หากคุณเปลี่ยนเขตเวลาโดยไม่ลบข้อมูลที่มีอยู่ รายงานอาจแสดงเวลาที่ไม่ถูกต้องสำหรับวันที่บันทึกไว้ก่อนหน้านี้\",\n  \"Retention Period (Months)\": \"ระยะเวลาเก็บรักษา (เดือน)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"กำหนดระยะเวลาในการจัดเก็บข้อมูลสถิติการเข้าชมในฐานข้อมูล เมื่อระยะเวลาที่กำหนดหมดลง ข้อมูลที่เกี่ยวข้องจะถูกลบออกจากฐานข้อมูลโดยอัตโนมัติ ตั้งค่าเป็น 0 หรือเว้นว่างไว้เพื่อเก็บรักษาข้อมูลไว้ตลอดไป\",\n  \"Data Filters\": \"ตัวกรองข้อมูล\",\n  \"Exclude Bots\": \"ไม่รวมบอท\",\n  \"Automatically ignores known bots using the detection library.\": \"ละเว้นบอทที่รู้จักโดยอัตโนมัติโดยใช้ไลบรารีการตรวจจับ\",\n  \"Exclude Administrator Roles\": \"ไม่รวมบทบาทผู้ดูแลระบบ\",\n  \"Ignores traffic from selected roles.\": \"ละเว้นการรับส่งข้อมูลจากบทบาทที่เลือก\",\n  \"Exclude IP Addresses\": \"ไม่รวมที่อยู่ IP\",\n  \"Requests from these addresses will be ignored in statistics.\": \"คำขอจากที่อยู่เหล่านี้จะถูกละเว้นในสถิติ\",\n  \"Exclude Paths\": \"ไม่รวมเส้นทาง\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"ป้อนเส้นทางหรือรูปแบบหนึ่งต่อแถวเพื่อละเว้น URL ที่ตรงกัน\",\n  \"Access the Dashboard\": \"เข้าสู่แดชบอร์ด\",\n  \"Manage Dashboards\": \"จัดการแดชบอร์ด\",\n  \"Dashboard\": \"แดชบอร์ด\",\n  \"Manage the Internal Traffic Statistics data\": \"จัดการข้อมูลสถิติการเข้าชมภายใน\",\n  \"Date\": \"วันที่\",\n  \"Page Path\": \"เส้นทางหน้า\",\n  \"Referral Domain\": \"โดเมนอ้างอิง\",\n  \"Pageviews\": \"จำนวนการเข้าชมหน้าเว็บ\",\n  \"Unique Visitors\": \"ผู้เข้าชมที่ไม่ซ้ำกัน\",\n  \"Traffic Information\": \"ข้อมูลการจราจร\",\n  \"Website Status\": \"สถานะเว็บไซต์\",\n  \"Core version information\": \"ข้อมูลเวอร์ชันหลัก\",\n  \"System Issues\": \"ปัญหาของระบบ\",\n  \"Event Log\": \"บันทึกเหตุการณ์\",\n  \"Request log\": \"บันทึกคำขอ\",\n  \"Request Log\": \"บันทึกคำขอ\",\n  \"Website status information\": \"ข้อมูลสถานะเว็บไซต์\",\n  \"Add Row\": \"เพิ่มแถว\",\n  \"Edit Row\": \"แก้ไขแถว\",\n  \"Edit Widget\": \"แก้ไขวิดเจ็ต\",\n  \"No Value\": \"ไม่มีค่า\",\n  \"Section\": \"ส่วน\",\n  \"This is a text notice widget.\": \"นี่คือวิดเจ็ตแจ้งเตือนข้อความ\",\n  \"My Custom Widget\": \"วิดเจ็ตแบบกำหนดเองของฉัน\",\n  \"Chart\": \"แผนภูมิ\",\n  \"Indicator\": \"ตัวบ่งชี้\",\n  \"Table\": \"โต๊ะ\",\n  \"Text Notice\": \"ข้อความแจ้งเตือน\",\n  \"Widget Configuration\": \"การกำหนดค่าวิดเจ็ต\",\n  \"Configure the report widget\": \"ตั้งค่าวิดเจ็ตรายงาน\",\n  \"Width :columns\": \"ความกว้าง :คอลัมน์\",\n  \"The widget width, a number between 1 and 10.\": \"ความกว้างของวิดเจ็ต ซึ่งเป็นตัวเลขระหว่าง 1 ถึง 10\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"โปรดป้อนความกว้างของวิดเจ็ตเป็นตัวเลขระหว่าง 1 ถึง 10\",\n  \"{1} column|[2,Inf] columns\": \"คอลัมน์ {1} | คอลัมน์ [2,Inf]\",\n  \"Force new row\": \"บังคับแถวใหม่\",\n  \"Put the widget in a new row.\": \"วางวิดเจ็ตไว้ในแถวใหม่\",\n  \"Widget title\": \"ชื่อวิดเจ็ต\",\n  \"The Widget Title is required.\": \"จำเป็นต้องระบุชื่อวิดเจ็ต\",\n  \"Layout has been reset\": \"การจัดวางถูกรีเซ็ตแล้ว\",\n  \"Current layout is now the default\": \"รูปแบบปัจจุบันถือเป็นค่าเริ่มต้น\",\n  \"System status\": \"สถานะของระบบ\",\n  \"Pending Software Updates\": \"การอัปเดตซอฟต์แวร์ที่รอดำเนินการ\",\n  \"Software is Up to Date\": \"ซอฟต์แวร์ได้รับการอัปเดตแล้ว\",\n  \"Update\": \"อัปเดต\",\n  \"Some Issues Need Attention\": \"บางประเด็นจำเป็นต้องได้รับการใส่ใจ\",\n  \"No Warnings to Display\": \"ไม่มีคำเตือนใดๆ ให้แสดง\",\n  \"View\": \"ดู\",\n  \"System Build\": \"การสร้างระบบ\",\n  \"Online Since\": \"ออนไลน์ตั้งแต่\",\n  \"Welcome\": \"ยินดีต้อนรับ\",\n  \"Welcome back to :app, :name.\": \"ยินดีต้อนรับกลับสู่ :app, :name\",\n  \"Welcome to :app, :name.\": \"ยินดีต้อนรับสู่ :app, :name\",\n  \"This is the first time you have signed in.\": \"นี่เป็นครั้งแรกที่คุณเข้าสู่ระบบ\",\n  \"Your last sign in was\": \"คุณเข้าสู่ระบบครั้งล่าสุดเมื่อ\",\n  \"View Access Logs\": \"ดูบันทึกการเข้าถึง\",\n  \"Have a great day!\": \"ขอให้เป็นวันที่ดี!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"ไม่พบแดชบอร์ดที่มี slug ที่ระบุ: \\\":slug\\\"\",\n  \"Manage Internal Traffic Statistics settings\": \"จัดการการตั้งค่าสถิติการเข้าชมภายใน\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"สถิติการเข้าชมภายในถูกปิดใช้งาน หากต้องการเปิดใช้งาน ให้แก้ไขการตั้งค่าในไฟล์ config/cms.php\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"สถิติการเข้าชมภายในเปิดใช้งานอยู่ คุณสามารถปรับระยะเวลาการเก็บรักษาและเขตเวลา หรือปิดใช้งานคุณสมบัตินี้ได้โดยแก้ไขการตั้งค่าในไฟล์ config/cms.php\",\n  \"Purging the data...\": \"กำลังล้างข้อมูล...\",\n  \"Purge Data\": \"ล้างข้อมูล\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"คุณต้องการล้างข้อมูลสถิติการเข้าชมภายในจริงๆ หรือไม่?\",\n  \"Data retention period\": \"ระยะเวลาการเก็บรักษาข้อมูล\",\n  \"Time zone\": \"เขตเวลา\",\n  \":retention month(s)\": \"ระยะเวลาการรักษาลูกค้า (เดือน)\",\n  \"Indefinite\": \"ไม่จำกัดระยะเวลา\",\n  \"Internal Traffic Statistics data purged\": \"ข้อมูลสถิติการจราจรภายในถูกลบออก\",\n  \"[not set]\": \"[ไม่ได้ตั้งค่า]\",\n  \"1 day (today) if not set\": \"1 วัน (วันนี้) หากยังไม่ได้ตั้งค่า\",\n  \"Apply\": \"นำมาใช้\",\n  \"Ascending\": \"ขึ้นไป\",\n  \"Attribute\": \"คุณลักษณะ\",\n  \"Bar\": \"บาร์\",\n  \"Chart type\": \"ประเภทแผนภูมิ\",\n  \"Color\": \"สี\",\n  \"Compare Totals\": \"เปรียบเทียบยอดรวม\",\n  \"Configure\": \"กำหนดค่า\",\n  \"Custom\": \"กำหนดเอง\",\n  \"Dashboard interval\": \"ช่วงเวลาแดชบอร์ด\",\n  \"Data source\": \"แหล่งข้อมูล\",\n  \"Date interval\": \"ช่วงเวลาวันที่\",\n  \"Day\": \"วัน\",\n  \"Delete\": \"ลบ\",\n  \"Delete Dashboard\": \"ลบแดชบอร์ด\",\n  \"Delete row\": \"ลบแถว\",\n  \"Descending\": \"ลง\",\n  \"Dimension\": \"มิติ\",\n  \"Direction\": \"ทิศทาง\",\n  \"Disabled\": \"พิการ\",\n  \"Display\": \"แสดง\",\n  \"Display [not set]\": \"แสดงผล [ไม่ได้ตั้งค่า]\",\n  \"Display all records\": \"แสดงข้อมูลทั้งหมด\",\n  \"Display relative bars\": \"แสดงแท่งกราฟแสดงความสัมพันธ์\",\n  \"Display totals\": \"แสดงผลรวม\",\n  \"Edit Dashboard\": \"แก้ไขแดชบอร์ด\",\n  \"Empty values\": \"ค่าว่าง\",\n  \"Enter a positive number\": \"ป้อนตัวเลขบวก\",\n  \"Enter a positive number or leave empty to display all records.\": \"ป้อนตัวเลขบวก หรือเว้นว่างไว้เพื่อแสดงข้อมูลทั้งหมด\",\n  \"Equal to\": \"เท่ากับ\",\n  \"Export Dashboard\": \"แดชบอร์ดส่งออก\",\n  \"Extra table fields\": \"ช่องตารางเพิ่มเติม\",\n  \"Filters\": \"ตัวกรอง\",\n  \"General\": \"ทั่วไป\",\n  \"Greater or equal to\": \"มากกว่าหรือเท่ากับ\",\n  \"Greater than\": \"มากกว่า\",\n  \"Hide\": \"ซ่อน\",\n  \"Horizontal\": \"แนวนอน\",\n  \"Icon\": \"ไอคอน\",\n  \"Icon Status\": \"สถานะไอคอน\",\n  \"Important\": \"สำคัญ\",\n  \"Includes\": \"รวมถึง\",\n  \"Information\": \"ข้อมูล\",\n  \"Last 30 days\": \"30 วันที่ผ่านมา\",\n  \"Last 7 days\": \"7 วันที่ผ่านมา\",\n  \"Last month\": \"เดือนที่แล้ว\",\n  \"Leave empty to disable pagination\": \"เว้นว่างไว้เพื่อปิดใช้งานการแบ่งหน้า\",\n  \"Leave empty to hide the title\": \"เว้นว่างไว้เพื่อซ่อนชื่อเรื่อง\",\n  \"Less or equal to\": \"น้อยกว่าหรือเท่ากับ\",\n  \"Less than\": \"น้อยกว่า\",\n  \"Limit\": \"ขีดจำกัด\",\n  \"Line\": \"เส้น\",\n  \"Link Text\": \"ข้อความลิงก์\",\n  \"Link URL\": \"ลิงก์ URL\",\n  \"Make Default\": \"ตั้งค่าเริ่มต้น\",\n  \"Metric\": \"เมตริก\",\n  \"Metrics\": \"ตัวชี้วัด\",\n  \"Month\": \"เดือน\",\n  \"Notice text\": \"ข้อความแจ้งเตือน\",\n  \"Number of days\": \"จำนวนวัน\",\n  \"One of\": \"หนึ่งใน\",\n  \"One value per line\": \"หนึ่งค่าต่อบรรทัด\",\n  \"Operation\": \"การดำเนินการ\",\n  \"Order\": \"คำสั่ง\",\n  \"Past hour\": \"ชั่วโมงที่ผ่านมา\",\n  \"Past X days\": \"ช่วง X วันที่ผ่านมา\",\n  \"Please provide the widget title\": \"โปรดระบุชื่อวิดเจ็ต\",\n  \"Please select a data source\": \"โปรดเลือกแหล่งข้อมูล\",\n  \"Please select a dimension\": \"โปรดเลือกขนาด\",\n  \"Please select an icon\": \"โปรดเลือกไอคอน\",\n  \"Please select metric(s).\": \"โปรดเลือกตัวชี้วัด\",\n  \"Prev period\": \"ช่วงเวลาก่อนหน้า\",\n  \"Quarter\": \"หนึ่งในสี่\",\n  \"Records per page\": \"บันทึกต่อหน้า\",\n  \"Refresh every minute\": \"รีเฟรชทุกนาที\",\n  \"Rename Dashboard\": \"เปลี่ยนชื่อแดชบอร์ด\",\n  \"Reset Layout\": \"รีเซ็ตเค้าโครง\",\n  \"Reset layout back to default?\": \"ตั้งค่าเค้าโครงกลับเป็นค่าเริ่มต้นหรือไม่?\",\n  \"Same period last year\": \"ช่วงเวลาเดียวกันของปีที่แล้ว\",\n  \"Section Title\": \"หัวข้อส่วน\",\n  \"Select a dimension and metrics\": \"เลือกมิติและตัวชี้วัด\",\n  \"Select an attribute\": \"เลือกคุณลักษณะ\",\n  \"Select an operation\": \"เลือกการดำเนินการ\",\n  \"Select sorting metric or dimension\": \"เลือกตัวชี้วัดหรือมิติการเรียงลำดับ\",\n  \"Select the metric color\": \"เลือกสีเมตริก\",\n  \"Set the current layout as the default?\": \"ตั้งค่าเค้าโครงปัจจุบันเป็นค่าเริ่มต้นหรือไม่?\",\n  \"Show Date Interval\": \"แสดงช่วงเวลาวันที่\",\n  \"Sort by\": \"เรียงลำดับตาม\",\n  \"Sorting\": \"การเรียงลำดับ\",\n  \"Sorting & Filtering\": \"การจัดเรียงและการกรอง\",\n  \"Stacked Bar\": \"บาร์ซ้อน\",\n  \"Starts with\": \"เริ่มต้นด้วย\",\n  \"Success\": \"ความสำเร็จ\",\n  \"The dashboard layout has been reset to default.\": \"รูปแบบแดชบอร์ดถูกรีเซ็ตเป็นค่าเริ่มต้นแล้ว\",\n  \"The dashboard was successfully updated.\": \"แดชบอร์ดได้รับการอัปเดตเรียบร้อยแล้ว\",\n  \"The limit value must be at least 1\": \"ค่าจำกัดต้องมีอย่างน้อย 1\",\n  \"This dashboard is now the default layout.\": \"ขณะนี้แดชบอร์ดนี้ถูกกำหนดให้เป็นรูปแบบเริ่มต้นแล้ว\",\n  \"This month\": \"เดือนนี้\",\n  \"This quarter\": \"ไตรมาสนี้\",\n  \"This week\": \"สัปดาห์นี้\",\n  \"This year\": \"ปีนี้\",\n  \"Title\": \"ชื่อ\",\n  \"Today\": \"วันนี้\",\n  \"Value\": \"ค่า\",\n  \"Values\": \"ค่านิยม\",\n  \"Vertical\": \"แนวตั้ง\",\n  \"Warning\": \"คำเตือน\",\n  \"Week\": \"สัปดาห์\",\n  \"Year\": \"ปี\",\n  \"Yesterday\": \"เมื่อวาน\"\n}"
  },
  {
    "path": "modules/dashboard/lang/tr.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Dahili Trafik İstatistikleri özelliği, sayfa görüntülemelerini, IP adreslerini ve diğer temel anonim kullanıcı verilerini veritabanına kaydeder.\",\n  \"Internal Traffic Statistics\": \"Dahili Trafik İstatistikleri\",\n  \"Purge the Internal Traffic Statistics data\": \"Dahili Trafik İstatistikleri verilerini temizleyin\",\n  \"Manage Traffic Settings and Data\": \"Trafik Ayarlarını ve Verilerini Yönetin\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Dahili Trafik İstatistikleri, sayfa görüntülemelerini, IP adreslerini ve diğer temel anonim kullanıcı verilerini veritabanına kaydeder ve pano için raporlar sağlar. Bu özellik devre dışı bırakıldığında, veriler veritabanına yazılmaz.\",\n  \"Traffic Statistics\": \"Trafik İstatistikleri\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Sayfa görüntülemelerini kaydetmek için saat dilimi. Saat dilimini değiştirmek mevcut verileri güncellemez. Mevcut verileri silmeden saat dilimini değiştirirseniz, raporlar daha önce kaydedilen günler için hatalı saatler gösterebilir.\",\n  \"Retention Period (Months)\": \"Saklama Süresi (Ay)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Trafik istatistikleri verilerinin veritabanında saklanacağı süreyi belirler. Belirlenen süre dolduğunda, ilgili veriler veritabanından otomatik olarak silinir. Kayıtları sonsuza kadar saklamak için 0 veya boş olarak ayarlayın.\",\n  \"Data Filters\": \"Veri Filtreleri\",\n  \"Exclude Bots\": \"Botları Hariç Tut\",\n  \"Automatically ignores known bots using the detection library.\": \"Algılama kütüphanesini kullanarak bilinen botları otomatik olarak yok sayar.\",\n  \"Exclude Administrator Roles\": \"Yönetici Rollerini Hariç Tut\",\n  \"Ignores traffic from selected roles.\": \"Seçili rollerden gelen trafiği yok sayar.\",\n  \"Exclude IP Addresses\": \"IP Adreslerini Hariç Tut\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Bu adreslerden gelen istekler istatistiklerde dikkate alınmayacaktır.\",\n  \"Exclude Paths\": \"Yolları Hariç Tut\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Eşleşen URL'leri yoksaymak için satır başına bir yol veya desen girin.\",\n  \"Access the Dashboard\": \"Kontrol Paneline Erişim\",\n  \"Manage Dashboards\": \"Kontrol Panellerini Yönetin\",\n  \"Dashboard\": \"Kontrol Paneli\",\n  \"Manage the Internal Traffic Statistics data\": \"Dahili Trafik İstatistikleri verilerini yönetin\",\n  \"Date\": \"Tarih\",\n  \"Page Path\": \"Sayfa Yolu\",\n  \"Referral Domain\": \"Yönlendirme Alanı\",\n  \"Pageviews\": \"Sayfa görüntülemeleri\",\n  \"Unique Visitors\": \"Eşsiz Ziyaretçiler\",\n  \"Traffic Information\": \"Trafik Bilgileri\",\n  \"Website Status\": \"Web Sitesi Durumu\",\n  \"Core version information\": \"Çekirdek sürüm bilgileri\",\n  \"System Issues\": \"Sistem Sorunları\",\n  \"Event Log\": \"Olay Günlüğü\",\n  \"Request log\": \"İstek günlüğü\",\n  \"Request Log\": \"İstek Günlüğü\",\n  \"Website status information\": \"Web sitesi durumu bilgileri\",\n  \"Add Row\": \"Satır Ekle\",\n  \"Edit Row\": \"Satırı Düzenle\",\n  \"Edit Widget\": \"Widget'ı Düzenle\",\n  \"No Value\": \"Değeri Yok\",\n  \"Section\": \"Bölüm\",\n  \"This is a text notice widget.\": \"Bu bir metin bildirim widget'ıdır.\",\n  \"My Custom Widget\": \"Özel Widget'ım\",\n  \"Chart\": \"Çizelge\",\n  \"Indicator\": \"Gösterge\",\n  \"Table\": \"Masa\",\n  \"Text Notice\": \"Metin Bildirimi\",\n  \"Widget Configuration\": \"Widget Yapılandırması\",\n  \"Configure the report widget\": \"Rapor aracını yapılandırın\",\n  \"Width :columns\": \"Genişlik :sütunlar\",\n  \"The widget width, a number between 1 and 10.\": \"Pencere öğesinin genişliği, 1 ile 10 arasında bir sayı.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Lütfen widget genişliğini 1 ile 10 arasında bir sayı olarak girin.\",\n  \"{1} column|[2,Inf] columns\": \"{1} sütun|[2,Sonsuz] sütun\",\n  \"Force new row\": \"Yeni satırı zorla\",\n  \"Put the widget in a new row.\": \"Widget'ı yeni bir satıra yerleştirin.\",\n  \"Widget title\": \"Widget başlığı\",\n  \"The Widget Title is required.\": \"Widget başlığı zorunludur.\",\n  \"Layout has been reset\": \"Yerleşim sıfırlandı.\",\n  \"Current layout is now the default\": \"Mevcut düzen artık varsayılan ayardır.\",\n  \"System status\": \"Sistem durumu\",\n  \"Pending Software Updates\": \"Bekleyen Yazılım Güncellemeleri\",\n  \"Software is Up to Date\": \"Yazılım günceldir.\",\n  \"Update\": \"Güncelleme\",\n  \"Some Issues Need Attention\": \"Bazı Konulara Dikkat Edilmesi Gerekiyor\",\n  \"No Warnings to Display\": \"Görüntülenecek Uyarı Yok\",\n  \"View\": \"Görüş\",\n  \"System Build\": \"Sistem Derlemesi\",\n  \"Online Since\": \"Çevrimiçi Olduğu Tarihten Beri\",\n  \"Welcome\": \"Hoş geldin\",\n  \"Welcome back to :app, :name.\": \":app, :name'e tekrar hoş geldiniz.\",\n  \"Welcome to :app, :name.\": \":app, :name'e hoş geldiniz.\",\n  \"This is the first time you have signed in.\": \"Bu, ilk kez oturum açışınız.\",\n  \"Your last sign in was\": \"Son girişiniz şuydu:\",\n  \"View Access Logs\": \"Erişim Kayıtlarını Görüntüle\",\n  \"Have a great day!\": \"İyi günler!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Belirtilen slug ile bir kontrol paneli bulunamadı: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Dahili Trafik İstatistikleri ayarlarını yönetin\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Dahili Trafik İstatistikleri devre dışı bırakılmıştır. Etkinleştirmek için config/cms.php dosyasındaki yapılandırmayı düzenleyin.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Dahili Trafik İstatistikleri şu anda etkinleştirilmiştir. Saklama süresini ve saat dilimini ayarlayabilir veya bu özelliği config/cms.php dosyasındaki ayarları düzenleyerek devre dışı bırakabilirsiniz.\",\n  \"Purging the data...\": \"Veriler siliniyor...\",\n  \"Purge Data\": \"Verileri Temizle\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Dahili Trafik İstatistikleri verilerini gerçekten silmek istiyor musunuz?\",\n  \"Data retention period\": \"Veri saklama süresi\",\n  \"Time zone\": \"Saat dilimi\",\n  \":retention month(s)\": \":tutma ayı(ları)\",\n  \"Indefinite\": \"Belirsiz\",\n  \"Internal Traffic Statistics data purged\": \"Dahili Trafik İstatistikleri verileri silindi.\",\n  \"[not set]\": \"[ayarlanmadı]\",\n  \"1 day (today) if not set\": \"Ayarlanmamışsa 1 gün (bugün)\",\n  \"Apply\": \"Uygula\",\n  \"Ascending\": \"Yükselen\",\n  \"Attribute\": \"Bağlanmak\",\n  \"Bar\": \"Çubuk\",\n  \"Chart type\": \"Grafik türü\",\n  \"Color\": \"Renk\",\n  \"Compare Totals\": \"Toplamları Karşılaştır\",\n  \"Configure\": \"Yapılandır\",\n  \"Custom\": \"Gelenek\",\n  \"Dashboard interval\": \"Gösterge paneli aralığı\",\n  \"Data source\": \"Veri kaynağı\",\n  \"Date interval\": \"Tarih aralığı\",\n  \"Day\": \"Gün\",\n  \"Delete\": \"Silmek\",\n  \"Delete Dashboard\": \"Kontrol Panelini Sil\",\n  \"Delete row\": \"Satırı sil\",\n  \"Descending\": \"İnen\",\n  \"Dimension\": \"Boyut\",\n  \"Direction\": \"Yön\",\n  \"Disabled\": \"Engelli\",\n  \"Display\": \"Görüntülemek\",\n  \"Display [not set]\": \"[Ayarlanmadı]\",\n  \"Display all records\": \"Tüm kayıtları görüntüle\",\n  \"Display relative bars\": \"Göreli çubukları göster\",\n  \"Display totals\": \"Toplamları göster\",\n  \"Edit Dashboard\": \"Kontrol Panelini Düzenle\",\n  \"Empty values\": \"Boş değerler\",\n  \"Enter a positive number\": \"Pozitif bir sayı girin\",\n  \"Enter a positive number or leave empty to display all records.\": \"Pozitif bir sayı girin veya tüm kayıtları görüntülemek için boş bırakın.\",\n  \"Equal to\": \"Eşittir\",\n  \"Export Dashboard\": \"Dışa Aktarma Kontrol Paneli\",\n  \"Extra table fields\": \"Ek tablo alanları\",\n  \"Filters\": \"Filtreler\",\n  \"General\": \"Genel\",\n  \"Greater or equal to\": \"Daha büyük veya eşit\",\n  \"Greater than\": \"Daha büyük\",\n  \"Hide\": \"Saklamak\",\n  \"Horizontal\": \"Yatay\",\n  \"Icon\": \"Simge\",\n  \"Icon Status\": \"Simge Durumu\",\n  \"Important\": \"Önemli\",\n  \"Includes\": \"İçerir\",\n  \"Information\": \"Bilgi\",\n  \"Last 30 days\": \"Son 30 gün\",\n  \"Last 7 days\": \"Son 7 gün\",\n  \"Last month\": \"Geçen ay\",\n  \"Leave empty to disable pagination\": \"Sayfalama özelliğini devre dışı bırakmak için boş bırakın.\",\n  \"Leave empty to hide the title\": \"Başlığı gizlemek için boş bırakın.\",\n  \"Less or equal to\": \"Daha az veya eşit\",\n  \"Less than\": \"Daha az\",\n  \"Limit\": \"Sınır\",\n  \"Line\": \"Astar\",\n  \"Link Text\": \"Bağlantı Metni\",\n  \"Link URL\": \"Bağlantı URL'si\",\n  \"Make Default\": \"Varsayılanı Ayarla\",\n  \"Metric\": \"Metrik\",\n  \"Metrics\": \"Metrikler\",\n  \"Month\": \"Ay\",\n  \"Notice text\": \"Bildirim metni\",\n  \"Number of days\": \"Gün sayısı\",\n  \"One of\": \"Bir tanesi\",\n  \"One value per line\": \"Her satırda bir değer\",\n  \"Operation\": \"Operasyon\",\n  \"Order\": \"Emir\",\n  \"Past hour\": \"Geçtiğimiz saat\",\n  \"Past X days\": \"Geçtiğimiz X gün\",\n  \"Please provide the widget title\": \"Lütfen widget başlığını belirtin.\",\n  \"Please select a data source\": \"Lütfen bir veri kaynağı seçin.\",\n  \"Please select a dimension\": \"Lütfen bir boyut seçin.\",\n  \"Please select an icon\": \"Lütfen bir simge seçin.\",\n  \"Please select metric(s).\": \"Lütfen ölçüt(ler)i seçin.\",\n  \"Prev period\": \"Önceki dönem\",\n  \"Quarter\": \"Çeyrek\",\n  \"Records per page\": \"Sayfa başına kayıt sayısı\",\n  \"Refresh every minute\": \"Her dakika yenileyin\",\n  \"Rename Dashboard\": \"Kontrol Panelini Yeniden Adlandır\",\n  \"Reset Layout\": \"Düzeni Sıfırla\",\n  \"Reset layout back to default?\": \"Düzeni varsayılan ayarlara sıfırla?\",\n  \"Same period last year\": \"Geçen yılın aynı dönemi\",\n  \"Section Title\": \"Bölüm Başlığı\",\n  \"Select a dimension and metrics\": \"Bir boyut ve ölçüt seçin.\",\n  \"Select an attribute\": \"Bir özellik seçin\",\n  \"Select an operation\": \"Bir işlem seçin\",\n  \"Select sorting metric or dimension\": \"Sıralama ölçütünü veya boyutunu seçin\",\n  \"Select the metric color\": \"Metrik rengi seçin\",\n  \"Set the current layout as the default?\": \"Geçerli düzeni varsayılan olarak ayarla?\",\n  \"Show Date Interval\": \"Tarih Aralığını Göster\",\n  \"Sort by\": \"Göre sırala\",\n  \"Sorting\": \"Sıralama\",\n  \"Sorting & Filtering\": \"Sıralama ve Filtreleme\",\n  \"Stacked Bar\": \"Üst Üste Dizilmiş Bar\",\n  \"Starts with\": \"Şununla başlar:\",\n  \"Success\": \"Başarı\",\n  \"The dashboard layout has been reset to default.\": \"Kontrol paneli düzeni varsayılan ayarlara sıfırlandı.\",\n  \"The dashboard was successfully updated.\": \"Kontrol paneli başarıyla güncellendi.\",\n  \"The limit value must be at least 1\": \"Sınır değeri en az 1 olmalıdır.\",\n  \"This dashboard is now the default layout.\": \"Bu kontrol paneli artık varsayılan düzen olarak ayarlanmıştır.\",\n  \"This month\": \"Bu ay\",\n  \"This quarter\": \"Bu çeyrek\",\n  \"This week\": \"Bu hafta\",\n  \"This year\": \"Bu yıl\",\n  \"Title\": \"Başlık\",\n  \"Today\": \"Bugün\",\n  \"Value\": \"Değer\",\n  \"Values\": \"Değerler\",\n  \"Vertical\": \"Dikey\",\n  \"Warning\": \"Uyarı\",\n  \"Week\": \"Hafta\",\n  \"Year\": \"Yıl\",\n  \"Yesterday\": \"Dün\"\n}"
  },
  {
    "path": "modules/dashboard/lang/uk.json",
    "content": "{\n  \"The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\": \"Функція статистики внутрішнього трафіку реєструє перегляди сторінок, IP-адреси та інші основні анонімні дані користувачів у базі даних.\",\n  \"Internal Traffic Statistics\": \"Статистика внутрішнього трафіку\",\n  \"Purge the Internal Traffic Statistics data\": \"Очистити дані внутрішньої статистики трафіку\",\n  \"Manage Traffic Settings and Data\": \"Керування налаштуваннями та даними трафіку\",\n  \"Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\": \"Статистика внутрішнього трафіку реєструє перегляди сторінок, IP-адреси та інші основні анонімні дані користувачів у базі даних і надає звіти для панелі інструментів. Коли цю функцію вимкнено, дані не записуються в базу даних.\",\n  \"Traffic Statistics\": \"Статистика трафіку\",\n  \"Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\": \"Часовий пояс для реєстрації переглядів сторінок. Зміна часового поясу не оновить існуючі дані. Якщо змінити часовий пояс, не видаляючи існуючі дані, у звітах може відображатися неправильний час для раніше зареєстрованих днів.\",\n  \"Retention Period (Months)\": \"Період зберігання (місяці)\",\n  \"Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\": \"Визначає тривалість зберігання даних статистики трафіку в базі даних. Після закінчення встановленого періоду відповідні дані автоматично видаляються з бази даних. Встановіть значення 0 або зробіть порожнім, щоб записи зберігалися назавжди.\",\n  \"Data Filters\": \"Фільтри даних\",\n  \"Exclude Bots\": \"Виключити ботів\",\n  \"Automatically ignores known bots using the detection library.\": \"Автоматично ігнорує відомих ботів за допомогою бібліотеки виявлення.\",\n  \"Exclude Administrator Roles\": \"Виключити адміністраторів\",\n  \"Ignores traffic from selected roles.\": \"Ігнорує трафік від вибраних ролей.\",\n  \"Exclude IP Addresses\": \"Виключити IP-адреси\",\n  \"Requests from these addresses will be ignored in statistics.\": \"Запити з цих адрес будуть ігноруватися в статистиці.\",\n  \"Exclude Paths\": \"Виключити шляхи\",\n  \"Enter one path or pattern per row to ignore matching URLs.\": \"Введіть один шлях або шаблон у кожному рядку, щоб ігнорувати відповідні URL-адреси.\",\n  \"Access the Dashboard\": \"Доступ до панелі інструментів\",\n  \"Manage Dashboards\": \"Керування інформаційними панелями\",\n  \"Dashboard\": \"Інформаційна панель\",\n  \"Manage the Internal Traffic Statistics data\": \"Керування даними внутрішньої статистики трафіку\",\n  \"Date\": \"Дата\",\n  \"Page Path\": \"Шлях сторінки\",\n  \"Referral Domain\": \"Домен рефералу\",\n  \"Pageviews\": \"Перегляди сторінок\",\n  \"Unique Visitors\": \"Унікальні відвідувачі\",\n  \"Traffic Information\": \"Інформація про дорожній рух\",\n  \"Website Status\": \"Статус сайту\",\n  \"Core version information\": \"Інформація про основну версію\",\n  \"System Issues\": \"Проблеми з системою\",\n  \"Event Log\": \"Журнал подій\",\n  \"Request log\": \"Журнал запитів\",\n  \"Request Log\": \"Журнал запитів\",\n  \"Website status information\": \"Інформація про стан сайту\",\n  \"Add Row\": \"Додати рядок\",\n  \"Edit Row\": \"Редагувати рядок\",\n  \"Edit Widget\": \"Редагувати віджет\",\n  \"No Value\": \"Без значення\",\n  \"Section\": \"Розділ\",\n  \"This is a text notice widget.\": \"Це віджет текстових сповіщень.\",\n  \"My Custom Widget\": \"Мій власний віджет\",\n  \"Chart\": \"Діаграма\",\n  \"Indicator\": \"Індикатор\",\n  \"Table\": \"Таблиця\",\n  \"Text Notice\": \"Текстове повідомлення\",\n  \"Widget Configuration\": \"Конфігурація віджета\",\n  \"Configure the report widget\": \"Налаштування віджета звіту\",\n  \"Width :columns\": \"Ширина: :columns\",\n  \"The widget width, a number between 1 and 10.\": \"Ширина віджета, число від 1 до 10.\",\n  \"Please enter the widget width as a number between 1 and 10.\": \"Будь ласка, введіть ширину віджета числом від 1 до 10.\",\n  \"{1} column|[2,Inf] columns\": \"{1} стовпець|[2,Inf] стовпці\",\n  \"Force new row\": \"Примусово створити новий рядок\",\n  \"Put the widget in a new row.\": \"Розмістіть віджет у новому рядку.\",\n  \"Widget title\": \"Назва віджета\",\n  \"The Widget Title is required.\": \"Обов'язкове поле «Назва віджета».\",\n  \"Layout has been reset\": \"Макет скинуто\",\n  \"Current layout is now the default\": \"Поточний макет тепер є стандартним\",\n  \"System status\": \"Стан системи\",\n  \"Pending Software Updates\": \"Оновлення програмного забезпечення, що очікують на розгляд\",\n  \"Software is Up to Date\": \"Програмне забезпечення оновлене\",\n  \"Update\": \"Оновлення\",\n  \"Some Issues Need Attention\": \"Деякі питання потребують уваги\",\n  \"No Warnings to Display\": \"Немає попереджень для відображення\",\n  \"View\": \"Переглянути\",\n  \"System Build\": \"Збірка системи\",\n  \"Online Since\": \"Онлайн з\",\n  \"Welcome\": \"Ласкаво просимо\",\n  \"Welcome back to :app, :name.\": \"Ласкаво просимо назад до :app, :name.\",\n  \"Welcome to :app, :name.\": \"Ласкаво просимо до :app, :name.\",\n  \"This is the first time you have signed in.\": \"Ви вперше входите в систему.\",\n  \"Your last sign in was\": \"Ваш останній вхід був\",\n  \"View Access Logs\": \"Переглянути журнали доступу\",\n  \"Have a great day!\": \"Гарного дня!\",\n  \"Cannot find a dashboard with the specified slug: \\\":slug\\\".\": \"Не вдається знайти панель із зазначеним посиланням: \\\":slug\\\".\",\n  \"Manage Internal Traffic Statistics settings\": \"Керування налаштуваннями статистики внутрішнього трафіку\",\n  \"Internal Traffic Statistics is disabled. To enable it, edit configuration in config/cms.php.\": \"Статистика внутрішнього трафіку вимкнена. Щоб увімкнути її, відредагуйте конфігурацію в config/cms.php.\",\n  \"Internal Traffic Statistics is currently enabled. You can adjust the retention period and time zone, or disable this feature, by editing the settings in config/cms.php.\": \"Статистика внутрішнього трафіку наразі ввімкнена. Ви можете налаштувати період зберігання та часовий пояс або вимкнути цю функцію, відредагувавши налаштування у файлі config/cms.php.\",\n  \"Purging the data...\": \"Очищення даних...\",\n  \"Purge Data\": \"Очистити дані\",\n  \"Do you really want to purge the Internal Traffic Statistics data?\": \"Ви дійсно хочете очистити дані внутрішньої статистики трафіку?\",\n  \"Data retention period\": \"Термін зберігання даних\",\n  \"Time zone\": \"Часовий пояс\",\n  \":retention month(s)\": \"місяць(и) зберігання\",\n  \"Indefinite\": \"Невизначений\",\n  \"Internal Traffic Statistics data purged\": \"Дані внутрішньої статистики трафіку видалено\",\n  \"[not set]\": \"[не встановлено]\",\n  \"1 day (today) if not set\": \"1 день (сьогодні), якщо не встановлено\",\n  \"Apply\": \"Застосувати\",\n  \"Ascending\": \"Зростаючий\",\n  \"Attribute\": \"Атрибут\",\n  \"Bar\": \"Панель\",\n  \"Chart type\": \"Тип діаграми\",\n  \"Color\": \"Колір\",\n  \"Compare Totals\": \"Порівняти підсумки\",\n  \"Configure\": \"Налаштувати\",\n  \"Custom\": \"Користувацька\",\n  \"Dashboard interval\": \"Інтервал панелі інструментів\",\n  \"Data source\": \"Джерело даних\",\n  \"Date interval\": \"Інтервал дат\",\n  \"Day\": \"День\",\n  \"Delete\": \"Видалити\",\n  \"Delete Dashboard\": \"Видалити інформаційну панель\",\n  \"Delete row\": \"Видалити рядок\",\n  \"Descending\": \"Спадання\",\n  \"Dimension\": \"Вимір\",\n  \"Direction\": \"Напрямок\",\n  \"Disabled\": \"Інвалід\",\n  \"Display\": \"Показ\",\n  \"Display [not set]\": \"Показ [не встановлено]\",\n  \"Display all records\": \"Показати всі записи\",\n  \"Display relative bars\": \"Відображення відносних стовпчиків\",\n  \"Display totals\": \"Відобразити загальні суми\",\n  \"Edit Dashboard\": \"Редагувати інформаційну панель\",\n  \"Empty values\": \"Порожні значення\",\n  \"Enter a positive number\": \"Введіть додатне число\",\n  \"Enter a positive number or leave empty to display all records.\": \"Введіть додатне число або залиште поле порожнім, щоб відобразити всі записи.\",\n  \"Equal to\": \"Дорівнює\",\n  \"Export Dashboard\": \"Експорт панелі інструментів\",\n  \"Extra table fields\": \"Додаткові поля таблиці\",\n  \"Filters\": \"Фільтри\",\n  \"General\": \"Загальне\",\n  \"Greater or equal to\": \"Більше або дорівнює\",\n  \"Greater than\": \"Більше ніж\",\n  \"Hide\": \"Приховати\",\n  \"Horizontal\": \"Горизонтальний\",\n  \"Icon\": \"Значок\",\n  \"Icon Status\": \"Стан піктограми\",\n  \"Important\": \"Важливо\",\n  \"Includes\": \"Включає\",\n  \"Information\": \"Інформація\",\n  \"Last 30 days\": \"Останні 30 днів\",\n  \"Last 7 days\": \"Останні 7 днів\",\n  \"Last month\": \"Минулого місяця\",\n  \"Leave empty to disable pagination\": \"Залиште поле порожнім, щоб вимкнути пагінацію\",\n  \"Leave empty to hide the title\": \"Залиште поле порожнім, щоб приховати заголовок\",\n  \"Less or equal to\": \"Менше або дорівнює\",\n  \"Less than\": \"Менше ніж\",\n  \"Limit\": \"Ліміт\",\n  \"Line\": \"Лінія\",\n  \"Link Text\": \"Текст посилання\",\n  \"Link URL\": \"URL-адреса посилання\",\n  \"Make Default\": \"Зробити за замовчуванням\",\n  \"Metric\": \"Метрика\",\n  \"Metrics\": \"Метрики\",\n  \"Month\": \"Місяць\",\n  \"Notice text\": \"Текст повідомлення\",\n  \"Number of days\": \"Кількість днів\",\n  \"One of\": \"Один з\",\n  \"One value per line\": \"Одне значення на рядок\",\n  \"Operation\": \"Операція\",\n  \"Order\": \"Замовлення\",\n  \"Past hour\": \"Минула година\",\n  \"Past X days\": \"Минулі X днів\",\n  \"Please provide the widget title\": \"Будь ласка, вкажіть назву віджета\",\n  \"Please select a data source\": \"Будь ласка, виберіть джерело даних\",\n  \"Please select a dimension\": \"Будь ласка, виберіть вимір\",\n  \"Please select an icon\": \"Будь ласка, виберіть значок\",\n  \"Please select metric(s).\": \"Будь ласка, виберіть показники.\",\n  \"Prev period\": \"Попередній період\",\n  \"Quarter\": \"Чверть\",\n  \"Records per page\": \"Записів на сторінці\",\n  \"Refresh every minute\": \"Оновлювати щохвилини\",\n  \"Rename Dashboard\": \"Перейменувати інформаційну панель\",\n  \"Reset Layout\": \"Скинути макет\",\n  \"Reset layout back to default?\": \"Скинути макет до заводських значень?\",\n  \"Same period last year\": \"Аналогічний період минулого року\",\n  \"Section Title\": \"Назва розділу\",\n  \"Select a dimension and metrics\": \"Виберіть параметр і показники\",\n  \"Select an attribute\": \"Виберіть атрибут\",\n  \"Select an operation\": \"Виберіть операцію\",\n  \"Select sorting metric or dimension\": \"Виберіть показник або вимір сортування\",\n  \"Select the metric color\": \"Виберіть колір метрики\",\n  \"Set the current layout as the default?\": \"Встановити поточний макет як стандартний?\",\n  \"Show Date Interval\": \"Показати інтервал дат\",\n  \"Sort by\": \"Сортувати за\",\n  \"Sorting\": \"Сортування\",\n  \"Sorting & Filtering\": \"Сортування та фільтрація\",\n  \"Stacked Bar\": \"Стовпчаста гістограма\",\n  \"Starts with\": \"Починається з\",\n  \"Success\": \"Успіх\",\n  \"The dashboard layout has been reset to default.\": \"Макет панелі інструментів скинуто до налаштувань за замовчуванням.\",\n  \"The dashboard was successfully updated.\": \"Панель інструментів успішно оновлено.\",\n  \"The limit value must be at least 1\": \"Граничне значення має бути щонайменше 1\",\n  \"This dashboard is now the default layout.\": \"Ця панель інструментів тепер використовується за замовчуванням.\",\n  \"This month\": \"Цього місяця\",\n  \"This quarter\": \"У цьому кварталі\",\n  \"This week\": \"Цього тижня\",\n  \"This year\": \"Цього року\",\n  \"Title\": \"Назва\",\n  \"Today\": \"Сьогодні\",\n  \"Value\": \"Значення\",\n  \"Values\": \"Цінності\",\n  \"Vertical\": \"Вертикальний\",\n  \"Warning\": \"Увага\",\n  \"Week\": \"Тиждень\",\n  \"Year\": \"Рік\",\n  \"Yesterday\": \"Вчора\"\n}"
  },
  {
    "path": "modules/dashboard/models/Dashboard.php",
    "content": "<?php namespace Dashboard\\Models;\n\nuse Str;\nuse Lang;\nuse Model;\nuse Cache;\nuse BackendAuth;\nuse SystemException;\nuse ApplicationException;\nuse Backend\\Models\\UserRole;\nuse Backend\\Models\\UserPreference;\n\n/**\n * Dashboard definition\n *\n * @property int $id\n * @property string $name\n * @property string $icon\n * @property string $owner_type\n * @property string $owner_field\n * @property string $definition\n * @property bool $is_global\n * @property bool $is_custom\n * @property int $updated_user_id\n * @property int $created_user_id\n * @property \\Illuminate\\Support\\Carbon $updated_at\n * @property \\Illuminate\\Support\\Carbon $created_at\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Dashboard extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\Sortable;\n    use \\October\\Rain\\Database\\Traits\\Validation;\n    use \\October\\Rain\\Database\\Traits\\UserFootprints;\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'dashboard_dashboards';\n\n    /**\n     * @var array jsonable attribute names that are json encoded and decoded from the database\n     */\n    protected $jsonable = ['definition'];\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [\n        'name' => 'required',\n        'code' => 'required|unique:dashboard_dashboards',\n        // 'definition' => 'required'\n    ];\n\n    /**\n     * @var array belongsToMany relation\n     */\n    public $belongsToMany = [\n        'roles' => [\n            UserRole::class,\n            'table' => 'dashboard_dashboards_roles',\n            'key' => 'dashboard_id',\n            'otherKey' => 'role_id'\n        ]\n    ];\n\n    /**\n     * getCodeAttribute\n     */\n    public function getCodeAttribute()\n    {\n        return $this->attributes['code'] ?? $this->owner_field;\n    }\n\n    /**\n     * getCreatedByNameAttribute\n     */\n    public function getCreatedByNameAttribute()\n    {\n        if ($this->is_system) {\n            return \"System\";\n        }\n\n        return $this->created_user?->full_name;\n    }\n\n    /**\n     * fetchDashboard\n     */\n    public function fetchDashboard($owner, $field)\n    {\n        $dashboard = self::applyOwner($owner)->where('code', $field)->first();\n\n        if ($userPref = $this->fetchDashboardPreference($owner, $field)) {\n            $dashboard->definition = $userPref;\n        }\n\n        return $dashboard;\n    }\n\n    /**\n     * fetchDashboardPreference\n     */\n    public function fetchDashboardPreference($owner, $field)\n    {\n        return UserPreference::forUser()->get($this->getUserPreferencesKey($owner, $field));\n    }\n\n    /**\n     * updateDashboardPreference\n     */\n    public function updateDashboardPreference($owner, $field, $definition)\n    {\n        UserPreference::forUser()->set($this->getUserPreferencesKey($owner, $field), $definition);\n    }\n\n    /**\n     * resetDashboardPreference\n     */\n    public function resetDashboardPreference($owner, $field)\n    {\n        UserPreference::forUser()->reset($this->getUserPreferencesKey($owner, $field));\n    }\n\n    /**\n     * updateDashboard\n     */\n    public function updateDashboard($owner, $field, $definition)\n    {\n        $field = strtolower($field);\n        if (!strlen($field)) {\n            throw new SystemException('Slug must not be empty');\n        }\n\n        $dashboard = self::applyOwner($owner)->where('code', $field)->first();\n        if (!$dashboard) {\n            throw new ApplicationException(\n                __(\"Cannot find a dashboard with the specified slug: \\\":slug\\\".\", ['slug' => $field])\n            );\n        }\n\n        $dashboard->is_custom = true;\n        $dashboard->definition = $definition;\n        $dashboard->save();\n    }\n\n    /**\n     * scopeListDashboards\n     */\n    public function scopeListDashboards($query, $owner)\n    {\n        $dashboards = $query->applyOwner($owner)->with('roles')->get();\n\n        $user = BackendAuth::user();\n        $userRoleId = $user?->role_id;\n\n        $dashboards = $dashboards->reject(function($dashboard) use ($user, $userRoleId) {\n            if ($dashboard->is_hidden) {\n                return true;\n            }\n\n            if ($dashboard->created_user_id === $user?->id) {\n                return false;\n            }\n\n            if ($dashboard->is_global) {\n                return false;\n            }\n\n            if ($userRoleId && $dashboard->roles->contains('id', $userRoleId)) {\n                return false;\n            }\n\n            return true;\n        });\n\n        return $dashboards;\n    }\n\n    /**\n     * getRolesOptions\n     */\n    public function getRolesOptions()\n    {\n        return UserRole::pluck('name', 'id')->all();\n    }\n\n    /**\n     * syncAll dashboard definitions. This will check if the supplied definitions\n     * can be customized and then creates an entry for each dashboard in the\n     * database.\n     */\n    public static function syncAll($owner, array $dashboards)\n    {\n        // @todo check if all dashboard definitions can be customized\n        // and if not, halt the process, there is nothing to capture\n        // or perhaps checking the \"scoreboardMode\" property\n\n        $ownerQuery = static::applyOwner($owner);\n        $dbDashboards = $ownerQuery\n            ->pluck('is_custom', 'owner_field')\n            ->all();\n\n        $newDashboards = array_diff_key($dashboards, $dbDashboards);\n\n        // Clean up non-customized templates\n        foreach ($dbDashboards as $code => $isCustom) {\n            if (!$isCustom && !array_key_exists($code, $dashboards)) {\n                $ownerQuery->where('owner_field', $code)->delete();\n            }\n        }\n\n        // Create new dashboards\n        foreach ($newDashboards as $field => $definition) {\n            $dashboard = new static;\n            $dashboard->owner_type = get_class($owner);\n            $dashboard->owner_field = $field;\n            $dashboard->is_custom = false;\n            $dashboard->is_global = true;\n            $dashboard->is_system = true;\n            $dashboard->code = $field;\n            $dashboard->name = $definition['name'] ?? 'Unknown';\n            $dashboard->icon = $definition['icon'] ?? 'icon-globe';\n            $dashboard->is_interval_hidden = !($definition['showInterval'] ?? 1) ? 1 : 0;\n            $dashboard->forceSave();\n        }\n    }\n\n    /**\n     * scopeApplyOwner\n     */\n    public function scopeApplyOwner($query, $owner)\n    {\n        if (!is_string($owner)) {\n            $owner = get_class($owner);\n        }\n\n        return $query->where('owner_type', $owner);\n    }\n\n    /**\n     * scopeApplyCreatedUserOrSystem\n     */\n    public function scopeApplyCreatedUserOrSystem($query, $user = null)\n    {\n        if ($user === null) {\n            $user = BackendAuth::user();\n        }\n\n        return $query->where(function($query) use ($user) {\n            $query\n                ->where('created_user_id', $user->getKey())\n                ->orWhere('is_system', true)\n            ;\n        });\n    }\n\n    /**\n     * getUserPreferencesKey\n     */\n    protected function getUserPreferencesKey($owner, $field)\n    {\n        if (!is_string($owner)) {\n            $owner = Str::getClassId($owner);\n        }\n\n        return \"dashboard::layout.{$owner}.{$field}\";\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/models/DashboardSetting.php",
    "content": "<?php namespace Dashboard\\Models;\n\nuse App;\nuse Backend\\Models\\UserRole;\nuse System\\Models\\SettingModel;\nuse System\\Helpers\\Preset as PresetHelper;\n\n/**\n * DashboardSetting model\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DashboardSetting extends SettingModel\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string settingsCode is a unique code for these settings\n     */\n    public $settingsCode = 'dashboard_settings';\n\n    /**\n     * @var array jsonable are json encoded attributes\n     */\n    protected $jsonable = ['filter_exclude_roles', 'filter_exclude_ips', 'filter_exclude_paths'];\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [];\n\n    /**\n     * initSettingsData for this model. This only executes when the\n     * model is first created or reset to default.\n     * @return void\n     */\n    public function initSettingsData()\n    {\n        $config = App::make('config');\n        $this->traffic_stats_enabled = $config->get('dashboard.internal_traffic_statistics.enabled', true);\n        $this->traffic_stats_timezone = $config->get('dashboard.internal_traffic_statistics.timezone');\n        $this->traffic_stats_retention = $config->get('dashboard.internal_traffic_statistics.retention');\n        $this->filter_exclude_bots = $config->get('dashboard.internal_traffic_statistics.filter_exclude_bots', true);\n    }\n\n    /**\n     * getTimezoneOptions returns all available timezone options.\n     * @return array\n     */\n    public function getTrafficStatsTimezoneOptions()\n    {\n        return [\n            '' => '- '.__('Use Default').' -',\n        ] + PresetHelper::timezones();\n    }\n\n    /**\n     * getFilterExcludeRolesOptions\n     */\n    public function getFilterExcludeRolesOptions()\n    {\n        $result = [\n            '*' => __(\"All Roles\")\n        ];\n\n        foreach (UserRole::all() as $role) {\n            $result[$role->id] = $role->name;\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/models/ReportDataCache.php",
    "content": "<?php\n\nnamespace Dashboard\\Models;\n\nuse Db;\nuse Model;\nuse Carbon\\Carbon;\n\n/**\n * ReportDataCache manages the back-end report data database cache\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ReportDataCache extends Model\n{\n    /**\n     * @var string table associated with the model\n     */\n    public $table = 'backend_report_data_cache';\n\n    /**\n     * getRanges\n     */\n    public function getRanges(string $key, Carbon $dateStart, Carbon $dateEnd): array\n    {\n        self::deleteOldItems();\n\n        $values = self::select('value', 'value_date')\n            ->where('value_date', '>=', $dateStart->toDateString())\n            ->where('value_date', '<=', $dateEnd->toDateString())\n            ->where('key', $key)\n            ->orderBy('value_date')\n            ->get();\n\n        $result = [];\n        foreach ($values as $obj) {\n            $result[$obj->value_date] = json_decode($obj->value, false);\n        }\n\n        return $result;\n    }\n\n    /**\n     * putRange\n     */\n    public function putRange(string $key, array $dataPoints, bool $excludeTodayDate = true)\n    {\n        Db::transaction(function () use ($key, $dataPoints, $excludeTodayDate) {\n            $todayDate = Carbon::now()->toDateString();\n\n            foreach ($dataPoints as $dataPoint) {\n                $dateString = $dataPoint->oc_dimension;\n                $value = $dataPoint;\n\n                if ($excludeTodayDate && $todayDate == $dateString) {\n                    continue;\n                }\n\n                $existing = self::where('key', $key)\n                    ->where('value_date', $dateString)\n                    ->first();\n\n                if ($existing) {\n                    $existing->delete();\n                }\n\n                $obj = new self();\n                $obj->key = $key;\n                $obj->value = json_encode($value);\n                $obj->value_date = $dateString;\n                $obj->save();\n            }\n        });\n    }\n\n    /**\n     * deleteOldItems\n     */\n    public static function deleteOldItems()\n    {\n        $latestDate = new Carbon();\n        $latestDate->subDays(30);\n\n        self::where('created_at', '<', $latestDate->toDateTimeString())->delete();\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/models/TrafficStatisticsPageview.php",
    "content": "<?php namespace Dashboard\\Models;\n\nuse Site;\nuse Model;\nuse Dashboard\\Classes\\TrafficLogger;\n\n/**\n * TrafficStatisticsPageview for capturing page views\n *\n * @property string ev_datetime\n * @property string ev_date\n * @property string ev_year_month_day\n * @property string ev_year_month\n * @property string ev_year_quarter\n * @property string ev_year_week\n * @property string ev_year\n * @property string ev_timestamp\n * @property bool user_authenticated\n * @property string client_id\n * @property bool first_time_visit\n * @property string user_agent\n * @property string page_path\n * @property string ip\n * @property string city\n * @property string country\n * @property string referral_domain\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass TrafficStatisticsPageview extends Model\n{\n    /**\n     * @var string table associated with the model\n     */\n    public $table = 'dashboard_traffic_stats_pageviews';\n\n    /**\n     * @var bool timestamps enabled\n     */\n    public $timestamps = false;\n\n    /**\n     * purgeOldRecords destroys traffic data beyond the configured retention period\n     */\n    public static function purgeOldRecords()\n    {\n        $months = TrafficLogger::instance()->getRetentionMonths();\n        if (!$months) {\n            return;\n        }\n\n        $query = (new static)->where('ev_datetime', '<', now()->subMonths($months)->toDateTimeString());\n\n        if (Site::hasFeature('dashboard_traffic_statistics')) {\n            $siteId = Site::getEditSite()?->id;\n            if ($siteId) {\n                $query->where('site_id', $siteId);\n            }\n        }\n\n        $query->delete();\n    }\n\n    /**\n     * purgeAllRecords destroys all traffic data\n     */\n    public static function purgeAllRecords()\n    {\n        TrafficStatisticsPageview::truncate();\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/models/dashboard/columns.yaml",
    "content": "columns:\n    name:\n        label: Name\n\n    code:\n        label: Code\n        sortable: false\n\n    is_global:\n        label: Global\n        type: switch\n\n    is_hidden:\n        label: Hidden\n        type: switch\n\n    roles:\n        label: Roles\n        relation: roles\n        select: name\n        sortable: false\n\n    created_by_name:\n        label: Created By\n        relationWith: created_user\n\n    open_link:\n        label: Open Link\n        shortLabel: ''\n        sortable: false\n        type: linkage\n        linkText: View\n        linkUrl: dashboard/index/:code\n        align: right\n"
  },
  {
    "path": "modules/dashboard/models/dashboard/fields.yaml",
    "content": "fields:\n    _system_definition_hint:\n        type: hint\n        comment: This is a system generated dashboard and cannot be deleted.\n\n    name:\n        label: Dashboard Name\n        type: text\n        span: auto\n\n    icon:\n        label: Icon\n        type: dropdown\n        optionsPreset: icons@phosphor\n        span: auto\n\n    is_global:\n        label: Global Access\n        comment: Dashboards with Global Access enabled can be viewed by other users.\n        type: checkbox\n        span: left\n\n    is_interval_hidden:\n        label: Hide Interval\n        comment: Check this if the dashboard does not use the date range picker.\n        type: checkbox\n        span: right\n\n    roles:\n        label: Assigned Roles\n        comment: Users with the selected roles will see this dashboard. Leave empty and enable Global Access for all users.\n        type: checkboxlist\n        span: full\n        trigger:\n            action: show\n            field: is_global\n            condition: unchecked\n\n    code:\n        label: API Code\n        commentAbove: A unique code to refer to this dashboard using external systems.\n        type: text\n        preset: name\n\n    is_hidden:\n        label: Hidden\n        comment: Hidden dashboards will not appear for any user.\n        type: checkbox\n        span: full"
  },
  {
    "path": "modules/dashboard/models/dashboardsetting/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    fields:\n\n        _traffic_stats_hint:\n            comment: The Internal Traffic Statistics feature logs pageviews, IP addresses, and other basic anonymous user data into the database.\n            type: hint\n            tab: Traffic Statistics\n\n        traffic_stats_enabled:\n            label: Internal Traffic Statistics\n            comment: Internal Traffic Statistics logs pageviews, IP addresses, and other basic anonymous user data into the database and provides reports for the dashboard. When the feature is disabled, the data is not written to the database.\n            tab: Traffic Statistics\n            type: switch\n\n        traffic_stats_timezone:\n            label: Timezone\n            type: dropdown\n            comment: Timezone to log pageviews in. Changing the timezone won't update the existing data. If you change the timezone without erasing the existing data, reports can potentially display incorrect times for previously logged days.\n            tab: Traffic Statistics\n            span: auto\n\n        traffic_stats_retention:\n            label: Retention Period (Months)\n            comment: Determines the duration for which traffic statistics data should be stored in the database. When the set period expires, the corresponding data is automatically purged from the database. Set to 0 or empty to retain records forever.\n            tab: Traffic Statistics\n            type: number\n            span: auto\n\n        filter_exclude_bots:\n            label: Exclude Bots\n            tab: Data Filters\n            comment: Automatically ignores known bots using the detection library.\n            type: switch\n\n        filter_exclude_roles:\n            label: Exclude Administrator Roles\n            commentAbove: Ignores traffic from selected roles.\n            tab: Data Filters\n            type: taglist\n            options: true\n            useKey: true\n\n        # filter_exclude_ips:\n        #     label: Exclude IP Addresses\n        #     commentAbove: Requests from these addresses will be ignored in statistics.\n        #     tooltip: \"Supports IPv4, IPv6, and CIDR notation (e.g. `192.168.0.0/24`).\"\n        #     tab: Data Filters\n        #     span: auto\n        #     type: datatable\n        #     columns:\n        #         ip_address:\n        #             title: IP / CIDR\n\n        # filter_exclude_paths:\n        #     label: Exclude Paths\n        #     commentAbove: Enter one path or pattern per row to ignore matching URLs.\n        #     tooltip: \"Supports wildcards (`*`) and regular expressions (`^/admin.*`). For example: `/admin*`, `/backend*`.\"\n        #     tab: Data Filters\n        #     span: auto\n        #     type: datatable\n        #     columns:\n        #         ip_address:\n        #             title: URI\n"
  },
  {
    "path": "modules/dashboard/tests/classes/DashboardManagerTest.php",
    "content": "<?php\n\nuse Dashboard\\Classes\\DashManager;\n\nclass DashManagerTest extends TestCase\n{\n    public function testPlaceholder()\n    {\n        $this->assertTrue(true);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/tests/classes/ReportDataCacheHelperTest.php",
    "content": "<?php\n\nuse Carbon\\Carbon;\nuse Dashboard\\Classes\\ReportMetric;\nuse Dashboard\\Classes\\ReportDimension;\nuse Dashboard\\Classes\\ReportDataCacheHelper;\n\nclass ReportDataCacheHelperTest extends TestCase\n{\n    public function testCanAggregateCache()\n    {\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date', 'Date');\n        $metrics = [\n            new ReportMetric('metric_1', 'metric_1', 'Metric 1', ReportMetric::AGGREGATE_SUM),\n            new ReportMetric('metric_1', 'metric_1', 'Metric 1', ReportMetric::AGGREGATE_MIN),\n            new ReportMetric('metric_1', 'metric_1', 'Metric 1', ReportMetric::AGGREGATE_MAX),\n            new ReportMetric('metric_1', 'metric_1', 'Metric 1', ReportMetric::AGGREGATE_COUNT),\n        ];\n\n        $manager = new ReportDataCacheHelper();\n        $this->assertTrue($manager->canAggregateCache($dimension, $metrics));\n    }\n\n    public function testCantAggregateCacheMetric()\n    {\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date', 'Date');\n        $metrics = [\n            new ReportMetric('metric_1', 'metric_1', 'Metric 1', ReportMetric::AGGREGATE_SUM),\n            new ReportMetric('metric_1', 'metric_1', 'Metric 1', ReportMetric::AGGREGATE_AVG)\n        ];\n\n        $manager = new ReportDataCacheHelper();\n        $this->assertFalse($manager->canAggregateCache($dimension, $metrics));\n    }\n\n    public function testCantAggregateCacheDimension()\n    {\n        $dimension = new ReportDimension('product', 'product', 'Product');\n        $metrics = [\n            new ReportMetric('metric_1', 'metric_1', 'Metric 1', ReportMetric::AGGREGATE_SUM)\n        ];\n\n        $manager = new ReportDataCacheHelper();\n        $this->assertFalse($manager->canAggregateCache($dimension, $metrics));\n    }\n\n    public function testRangeWithoutExistingDates() {\n        $manager = new ReportDataCacheHelper();\n\n        $dateStart = new Carbon('2023-01-01');\n        $dateEnd = new Carbon('2023-01-05');\n\n        $ranges = $manager->generateRanges($dateStart, $dateEnd, []);\n\n        $this->assertCount(1, $ranges);\n        $this->assertEquals($dateStart, $ranges[0]->getStartDate());\n        $this->assertEquals($dateEnd, $ranges[0]->getEndDate());\n    }\n\n    public function testRangeWithExistingDates() {\n        $manager = new ReportDataCacheHelper();\n\n        $dateStart = new Carbon('2023-01-01');\n        $dateEnd = new Carbon('2023-01-05');\n        $existingDates = ['2023-01-02', '2023-01-04'];\n\n        $ranges = $manager->generateRanges($dateStart, $dateEnd, $existingDates);\n\n        $this->assertCount(3, $ranges);\n\n        $this->assertEquals(new Carbon('2023-01-01'), $ranges[0]->getStartDate());\n        $this->assertEquals(new Carbon('2023-01-01'), $ranges[0]->getEndDate());\n\n        $this->assertEquals(new Carbon('2023-01-03'), $ranges[1]->getStartDate());\n        $this->assertEquals(new Carbon('2023-01-03'), $ranges[1]->getEndDate());\n\n        $this->assertEquals(new Carbon('2023-01-05'), $ranges[2]->getStartDate());\n        $this->assertEquals(new Carbon('2023-01-05'), $ranges[2]->getEndDate());\n    }\n\n    public function testSingleDateRangeWithoutExistingDates()\n    {\n        $dateStart = Carbon::create('2023-01-01');\n        $dateEnd = Carbon::create('2023-01-01');\n        $existingDates = [];\n\n        $manager = new ReportDataCacheHelper();\n        $ranges = $manager->generateRanges($dateStart, $dateEnd, $existingDates);\n\n        $this->assertCount(1, $ranges);\n        $this->assertTrue($ranges[0]->getStartDate()->equalTo($dateStart));\n        $this->assertTrue($ranges[0]->getEndDate()->equalTo($dateEnd));\n    }\n\n    public function testSingleDayRangeWithExistingDate()\n    {\n        $dateStart = Carbon::create('2023-01-01');\n        $dateEnd = Carbon::create('2023-01-01');\n\n        $manager = new ReportDataCacheHelper();\n        $ranges = $manager->generateRanges($dateStart, $dateEnd, ['2023-01-01']);\n\n        $this->assertCount(0, $ranges);\n    }\n\n    public function testAllDatesAreExistingDates() {\n        $dateStart = Carbon::create('2023-01-01');\n        $dateEnd = Carbon::create('2023-01-03');\n\n        $manager = new ReportDataCacheHelper();\n        $ranges = $manager->generateRanges($dateStart, $dateEnd, ['2023-01-01', '2023-01-02', '2023-01-03']);\n\n        $this->assertCount(0, $ranges);\n    }\n\n    public function testStartAndEndDatesAreExistingDates()\n    {\n        $dateStart = Carbon::create('2023-06-01');\n        $dateEnd = Carbon::create('2023-06-30');\n        $existingDates = [$dateStart->toDateString(), $dateEnd->toDateString()];\n\n        $manager = new ReportDataCacheHelper();\n        $ranges = $manager->generateRanges($dateStart, $dateEnd, $existingDates);\n\n        $this->assertCount(1, $ranges);\n\n        $this->assertTrue($ranges[0]->getStartDate()->equalTo($dateStart->addDay()));\n        $this->assertTrue($ranges[0]->getEndDate()->equalTo($dateEnd->subDay()));\n    }\n}"
  },
  {
    "path": "modules/dashboard/tests/classes/ReportDataSourceBaseTest.php",
    "content": "<?php\n\nuse Dashboard\\Models\\ReportDataCache;\nuse Dashboard\\Classes\\ReportMetric;\nuse Dashboard\\Classes\\ReportDimension;\nuse Dashboard\\Classes\\ReportDataOrderRule;\nuse Dashboard\\Classes\\ReportDataPaginationParams;\nuse Dashboard\\Classes\\ReportFetchData;\nuse Dashboard\\Classes\\ReportFetchDataResult;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse Carbon\\CarbonPeriod;\nuse Carbon\\Carbon;\n\nclass ReportDataSourceBaseTest extends TestCase\n{\n    public function testNonCacheableData()\n    {\n        $startDate = new Carbon('2023-01-01');\n        $endDate = new Carbon('2023-01-03');\n\n        $dsRange = CarbonPeriod::create($startDate, $endDate);\n        $values = [\n            (object)['oc_dimension' => 'product-1', 'oc_metric_metric_1' => 1],\n            (object)['oc_dimension' => 'product-2', 'oc_metric_metric_1' => 2],\n            (object)['oc_dimension' => 'product-3', 'oc_metric_metric_1' => 3]\n        ];\n\n        $rangesAndValues = [\n            ['range' => $dsRange, 'values' => $values]\n        ];\n\n        $reportDataCacheMock = $this->mockReportDataCache();\n\n        $reportDataCacheMock->expects($this->never())->method('getRanges');\n        $reportDataCacheMock->expects($this->never())->method('putRange');\n\n        $dataSource = $this->getDataSource(\n            new ReportDimension('product', 'product', 'Product'),\n            $rangesAndValues\n        );\n\n        $data = new ReportFetchData;\n        $data->dimensionCode = 'product';\n        $data->metricCodes = ['metric_1'];\n        $data->metricsConfiguration = [];\n        $data->dateStart = $startDate;\n        $data->dateEnd = $endDate;\n        $data->startTimestamp = null;\n        $data->dimensionFilters = [];\n        $data->groupInterval = null;\n        $data->orderRule = new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION);\n        $data->limit = null;\n        $data->paginationParams = null;\n        $data->hideEmptyDimensionValues = false;\n        $data->reportDataCache = $reportDataCacheMock;\n        $data->totalsOnly = false;\n\n        $result = $dataSource->getData($data);\n\n        $this->assertInstanceOf(ReportFetchDataResult::class, $result);\n        $rows = $result->getRows();\n        $this->assertIsArray($rows);\n        $this->assertCount(3, $rows);\n        $this->assertEquals($values, $rows);\n    }\n\n    private function getDataSource(ReportDimension $dimension, array $rangesAndValues): ReportDataSourceBase\n    {\n        return new class ($rangesAndValues, $dimension) extends ReportDataSourceBase\n        {\n            private $rangesAndValues;\n\n            public function __construct($rangesAndValues, $dimension)\n            {\n                $this->registerDimension($dimension);\n                $this->registerMetric(\n                    new ReportMetric('metric_1', 'metric_1', 'Metric 1', ReportMetric::AGGREGATE_SUM)\n                );\n                $this->rangesAndValues = $rangesAndValues;\n            }\n\n            protected function fetchData(ReportFetchData $data): ReportFetchDataResult\n            {\n                foreach ($this->rangesAndValues as $rangeAndValues) {\n                    $range = $rangeAndValues['range'];\n                    $values = $rangeAndValues['values'];\n\n                    if ($range->getStartDate()->eq($data->dateStart)) {\n                        return new ReportFetchDataResult($values);\n                    }\n                }\n\n                return new ReportFetchDataResult;\n            }\n        };\n    }\n\n    private function mockReportDataCache(): ReportDataCache\n    {\n        return $this->getMockBuilder(ReportDataCache::class)\n            ->disableOriginalConstructor()\n            ->getMock();\n    }\n}"
  },
  {
    "path": "modules/dashboard/tests/classes/ReportDateDataSetTest.php",
    "content": "<?php\n\nuse Dashboard\\Classes\\ReportDataOrderRule;\nuse Dashboard\\Classes\\ReportDateDataSet;\nuse Dashboard\\Classes\\ReportDimension;\nuse Dashboard\\Classes\\ReportMetric;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse Carbon\\CarbonPeriod;\nuse Carbon\\Carbon;\n\nclass ReportDateDataSetTest extends TestCase\n{\n    public function testGetNormalizedDataSortAsc()\n    {\n        $dataSet = $this->makeDataSet(true, null, null, null);\n        $result = $dataSet->getNormalizedData();\n        $this->assertIsArray($result);\n        $this->assertCount(5, $result);\n\n        $this->assertEquals('2023-01-01', $result[0]->oc_dimension);\n        $this->assertEquals('2023-01-02', $result[1]->oc_dimension);\n        $this->assertEquals('2023-01-03', $result[2]->oc_dimension);\n        $this->assertEquals('2023-01-04', $result[3]->oc_dimension);\n        $this->assertEquals('2023-01-05', $result[4]->oc_dimension);\n\n        $this->assertEquals(1, $result[0]->oc_metric_total);\n        $this->assertEquals(2, $result[3]->oc_metric_total);\n\n        $this->assertNull($result[1]->oc_metric_total);\n    }\n\n    public function testAddMissingWeeks()\n    {\n        $values = $values = $values ?? [\n            (object)[\n                'oc_dimension' => '2023-01-02',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-01-16',\n                'oc_metric_total' => 1\n            ]\n        ];\n\n        $dataSet = $this->makeDataSet(\n            true,\n            $values,\n            Carbon::create('2023-01-02'),\n            Carbon::create('2023-01-16'),\n            ReportMetric::AGGREGATE_SUM,\n            ReportDataSourceBase::GROUP_INTERVAL_WEEK\n        );\n        $result = $dataSet->getNormalizedData();\n        $this->assertIsArray($result);\n        $this->assertCount(3, $result);\n\n        $this->assertEquals('2023-01-02', $result[0]->oc_dimension);\n        $this->assertEquals('2023-01-09', $result[1]->oc_dimension);\n        $this->assertEquals('2023-01-16', $result[2]->oc_dimension);\n\n        $this->assertEquals(2, $result[0]->oc_metric_total);\n        $this->assertEquals(1, $result[2]->oc_metric_total);\n        $this->assertNull($result[1]->oc_metric_total);\n    }\n\n    public function testAddMissingMonths()\n    {\n        $values = $values = $values ?? [\n            (object)[\n                'oc_dimension' => '2023-02-01',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-04-01',\n                'oc_metric_total' => 1\n            ]\n        ];\n\n        $dataSet = $this->makeDataSet(\n            true,\n            $values,\n            Carbon::create('2023-01-01'),\n            Carbon::create('2023-04-01'),\n            ReportMetric::AGGREGATE_SUM,\n            ReportDataSourceBase::GROUP_INTERVAL_MONTH\n        );\n        $result = $dataSet->getNormalizedData();\n        $this->assertIsArray($result);\n        $this->assertCount(4, $result);\n\n        $this->assertEquals('2023-01-01', $result[0]->oc_dimension);\n        $this->assertEquals('2023-02-01', $result[1]->oc_dimension);\n        $this->assertEquals('2023-03-01', $result[2]->oc_dimension);\n        $this->assertEquals('2023-04-01', $result[3]->oc_dimension);\n\n        $this->assertEquals(2, $result[1]->oc_metric_total);\n        $this->assertEquals(1, $result[3]->oc_metric_total);\n        $this->assertNull($result[0]->oc_metric_total);\n        $this->assertNull($result[2]->oc_metric_total);\n    }\n\n    public function testAddMissingQuarters()\n    {\n        $values = $values = $values ?? [\n            (object)[\n                'oc_dimension' => '2023-04-01',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-10-01',\n                'oc_metric_total' => 1\n            ]\n        ];\n\n        $dataSet = $this->makeDataSet(\n            true,\n            $values,\n            Carbon::create('2023-01-01'),\n            Carbon::create('2023-12-01'),\n            ReportMetric::AGGREGATE_SUM,\n            ReportDataSourceBase::GROUP_INTERVAL_QUARTER\n        );\n        $result = $dataSet->getNormalizedData();\n        $this->assertIsArray($result);\n        $this->assertCount(4, $result);\n\n        $this->assertEquals('2023-01-01', $result[0]->oc_dimension);\n        $this->assertEquals('2023-04-01', $result[1]->oc_dimension);\n        $this->assertEquals('2023-07-01', $result[2]->oc_dimension);\n        $this->assertEquals('2023-10-01', $result[3]->oc_dimension);\n\n        $this->assertEquals(2, $result[1]->oc_metric_total);\n        $this->assertEquals(1, $result[3]->oc_metric_total);\n        $this->assertNull($result[0]->oc_metric_total);\n        $this->assertNull($result[2]->oc_metric_total);\n    }\n\n    public function testAddMissingYears()\n    {\n        $values = $values = $values ?? [\n            (object)[\n                'oc_dimension' => '2023-01-01',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2025-01-01',\n                'oc_metric_total' => 1\n            ]\n        ];\n\n        $dataSet = $this->makeDataSet(\n            true,\n            $values,\n            Carbon::create('2022-01-01'),\n            Carbon::create('2026-01-01'),\n            ReportMetric::AGGREGATE_SUM,\n            ReportDataSourceBase::GROUP_INTERVAL_YEAR\n        );\n        $result = $dataSet->getNormalizedData();\n        $this->assertIsArray($result);\n        $this->assertCount(5, $result);\n\n        $this->assertEquals('2022-01-01', $result[0]->oc_dimension);\n        $this->assertEquals('2023-01-01', $result[1]->oc_dimension);\n        $this->assertEquals('2024-01-01', $result[2]->oc_dimension);\n        $this->assertEquals('2025-01-01', $result[3]->oc_dimension);\n        $this->assertEquals('2026-01-01', $result[4]->oc_dimension);\n\n        $this->assertEquals(2, $result[1]->oc_metric_total);\n        $this->assertEquals(1, $result[3]->oc_metric_total);\n        $this->assertNull($result[0]->oc_metric_total);\n        $this->assertNull($result[2]->oc_metric_total);\n        $this->assertNull($result[4]->oc_metric_total);\n    }\n\n    public function testGetNormalizedDataSortDesc()\n    {\n        $dataSet = $this->makeDataSet(false, null, null, null);\n        $result = $dataSet->getNormalizedData();\n        $this->assertEquals('2023-01-01', $result[4]->oc_dimension);\n        $this->assertEquals('2023-01-02', $result[3]->oc_dimension);\n        $this->assertEquals('2023-01-03', $result[2]->oc_dimension);\n        $this->assertEquals('2023-01-04', $result[1]->oc_dimension);\n        $this->assertEquals('2023-01-05', $result[0]->oc_dimension);\n    }\n\n    public function testAggregateByDay()\n    {\n        $dateStart = Carbon::create('2023-01-01');\n        $dateEnd = Carbon::create('2023-01-03');\n\n        $values = [\n            (object)[\n                'oc_dimension' => '2023-01-02',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-01-01',\n                'oc_metric_total' => 1\n            ]\n        ];\n\n        $ds = $this->makeDataSet(true, $values, $dateStart, $dateEnd);\n        $aggregated = $ds->aggregateData(ReportDataSourceBase::GROUP_INTERVAL_DAY);\n        $this->assertIsArray($aggregated);\n        $this->assertCount(3, $aggregated);\n        $this->assertEquals('2023-01-01', $aggregated[0]->oc_dimension);\n        $this->assertEquals('2023-01-02', $aggregated[1]->oc_dimension);\n        $this->assertEquals('2023-01-03', $aggregated[2]->oc_dimension);\n\n        $this->assertEquals(1, $aggregated[0]->oc_metric_total);\n        $this->assertEquals(2, $aggregated[1]->oc_metric_total);\n        $this->assertNull($aggregated[2]->oc_metric_total);\n    }\n\n    public function testAggregateByWeekSum()\n    {\n        $dateStart = Carbon::create('2023-01-07'); // Saturday\n        $dateEnd = Carbon::create('2023-01-10');   // Tuesday\n\n        $values = $this->makeWeeklyData();\n\n        $ds = $this->makeDataSet(true, $values, $dateStart, $dateEnd);\n        $aggregated = $ds->aggregateData(ReportDataSourceBase::GROUP_INTERVAL_WEEK);\n        $this->assertIsArray($aggregated);\n        $this->assertCount(2, $aggregated);\n        $this->assertEquals('2023-01-02', $aggregated[0]->oc_dimension);\n        $this->assertEquals('2023-01-09', $aggregated[1]->oc_dimension);\n\n        $this->assertEquals(5, $aggregated[0]->oc_metric_total);\n        $this->assertEquals(4, $aggregated[1]->oc_metric_total);\n    }\n\n    public function testAggregateByWeekCount()\n    {\n        $dateStart = Carbon::create('2023-01-07'); // Saturday\n        $dateEnd = Carbon::create('2023-01-10');   // Tuesday\n\n        $values = $this->makeWeeklyData();\n\n        $ds = $this->makeDataSet(true, $values, $dateStart, $dateEnd, ReportMetric::AGGREGATE_COUNT);\n        $aggregated = $ds->aggregateData(ReportDataSourceBase::GROUP_INTERVAL_WEEK);\n        $this->assertIsArray($aggregated);\n        $this->assertCount(2, $aggregated);\n        $this->assertEquals('2023-01-02', $aggregated[0]->oc_dimension);\n        $this->assertEquals('2023-01-09', $aggregated[1]->oc_dimension);\n\n        $this->assertEquals(2, $aggregated[0]->oc_metric_total);\n        $this->assertEquals(1, $aggregated[1]->oc_metric_total);\n    }\n\n    public function testAggregateByWeekMin()\n    {\n        $dateStart = Carbon::create('2023-01-07'); // Saturday\n        $dateEnd = Carbon::create('2023-01-10');   // Tuesday\n\n        $values = $this->makeWeeklyData();\n\n        $ds = $this->makeDataSet(true, $values, $dateStart, $dateEnd, ReportMetric::AGGREGATE_MIN);\n        $aggregated = $ds->aggregateData(ReportDataSourceBase::GROUP_INTERVAL_WEEK);\n        $this->assertIsArray($aggregated);\n        $this->assertCount(2, $aggregated);\n        $this->assertEquals('2023-01-02', $aggregated[0]->oc_dimension);\n        $this->assertEquals('2023-01-09', $aggregated[1]->oc_dimension);\n\n        $this->assertEquals(2, $aggregated[0]->oc_metric_total);\n        $this->assertEquals(4, $aggregated[1]->oc_metric_total);\n    }\n\n    public function testAggregateByWeekMax()\n    {\n        $dateStart = Carbon::create('2023-01-07'); // Saturday\n        $dateEnd = Carbon::create('2023-01-10');   // Tuesday\n\n        $values = $this->makeWeeklyData();\n\n        $ds = $this->makeDataSet(true, $values, $dateStart, $dateEnd, ReportMetric::AGGREGATE_MAX);\n        $aggregated = $ds->aggregateData(ReportDataSourceBase::GROUP_INTERVAL_WEEK);\n        $this->assertIsArray($aggregated);\n        $this->assertCount(2, $aggregated);\n        $this->assertEquals('2023-01-02', $aggregated[0]->oc_dimension);\n        $this->assertEquals('2023-01-09', $aggregated[1]->oc_dimension);\n\n        $this->assertEquals(3, $aggregated[0]->oc_metric_total);\n        $this->assertEquals(4, $aggregated[1]->oc_metric_total);\n    }\n\n    public function testAggregateByMonthSum()\n    {\n        $dateStart = Carbon::create('2023-01-30');\n        $dateEnd = Carbon::create('2023-02-10');\n\n        $values = [\n            (object)[\n                'oc_dimension' => '2023-01-31',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-02-02',\n                'oc_metric_total' => 3\n            ],\n            (object)[\n                'oc_dimension' => '2023-02-04',\n                'oc_metric_total' => 4\n            ]\n        ];\n\n        $ds = $this->makeDataSet(true, $values, $dateStart, $dateEnd);\n        $aggregated = $ds->aggregateData(ReportDataSourceBase::GROUP_INTERVAL_MONTH);\n        $this->assertIsArray($aggregated);\n        $this->assertCount(2, $aggregated);\n        $this->assertEquals('2023-01-01', $aggregated[0]->oc_dimension);\n        $this->assertEquals('2023-02-01', $aggregated[1]->oc_dimension);\n\n        $this->assertEquals(2, $aggregated[0]->oc_metric_total);\n        $this->assertEquals(7, $aggregated[1]->oc_metric_total);\n    }\n\n    public function testAggregateByQuarterSum()\n    {\n        $dateStart = Carbon::create('2023-03-30');\n        $dateEnd = Carbon::create('2023-04-10');\n\n        $values = [\n            (object)[\n                'oc_dimension' => '2023-03-31',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-04-02',\n                'oc_metric_total' => 3\n            ],\n            (object)[\n                'oc_dimension' => '2023-04-04',\n                'oc_metric_total' => 4\n            ]\n        ];\n\n        $ds = $this->makeDataSet(true, $values, $dateStart, $dateEnd);\n        $aggregated = $ds->aggregateData(ReportDataSourceBase::GROUP_INTERVAL_QUARTER);\n        $this->assertIsArray($aggregated);\n        $this->assertCount(2, $aggregated);\n        $this->assertEquals('2023-01-01', $aggregated[0]->oc_dimension);\n        $this->assertEquals('2023-04-01', $aggregated[1]->oc_dimension);\n\n        $this->assertEquals(2, $aggregated[0]->oc_metric_total);\n        $this->assertEquals(7, $aggregated[1]->oc_metric_total);\n    }\n\n    public function testAggregateByYearSum()\n    {\n        $dateStart = Carbon::create('2022-12-30');\n        $dateEnd = Carbon::create('2023-01-10');\n\n        $values = [\n            (object)[\n                'oc_dimension' => '2022-12-31',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-01-02',\n                'oc_metric_total' => 3\n            ],\n            (object)[\n                'oc_dimension' => '2023-01-04',\n                'oc_metric_total' => 4\n            ]\n        ];\n\n        $ds = $this->makeDataSet(true, $values, $dateStart, $dateEnd);\n        $aggregated = $ds->aggregateData(ReportDataSourceBase::GROUP_INTERVAL_YEAR);\n        $this->assertIsArray($aggregated);\n        $this->assertCount(2, $aggregated);\n        $this->assertEquals('2022-01-01', $aggregated[0]->oc_dimension);\n        $this->assertEquals('2023-01-01', $aggregated[1]->oc_dimension);\n\n        $this->assertEquals(2, $aggregated[0]->oc_metric_total);\n        $this->assertEquals(7, $aggregated[1]->oc_metric_total);\n    }\n\n    public function testAggregateFullSum()\n    {\n        $dateStart = Carbon::create('2022-12-30');\n        $dateEnd = Carbon::create('2023-01-10');\n\n        $values = [\n            (object)[\n                'oc_dimension' => '2022-12-31',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-01-02',\n                'oc_metric_total' => 3\n            ],\n            (object)[\n                'oc_dimension' => '2023-01-04',\n                'oc_metric_total' => 4\n            ]\n        ];\n\n        $ds = $this->makeDataSet(true, $values, $dateStart, $dateEnd);\n        $aggregated = $ds->aggregateData(ReportDataSourceBase::GROUP_INTERVAL_FULL);\n        $this->assertIsArray($aggregated);\n        $this->assertCount(1, $aggregated);\n        $this->assertEquals(9, $aggregated[0]->oc_metric_total);\n    }\n\n    private function makeDataSet(\n        bool $ascending,\n        ?array $values,\n        ?Carbon $dateStart,\n        ?Carbon $dateEnd,\n        string $aggregateFunction = ReportMetric::AGGREGATE_SUM,\n        string $groupInterval = ReportDataSourceBase::GROUP_INTERVAL_DAY\n    ): ReportDateDataSet {\n        $dateStart = $dateStart ?? Carbon::create('2023-01-01');\n        $dateEnd = $dateEnd ?? Carbon::create('2023-01-05');\n\n        $values = $values ?? [\n            (object)[\n                'oc_dimension' => '2023-01-04',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-01-01',\n                'oc_metric_total' => 1\n            ]\n        ];\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date', 'Date');\n\n        return new ReportDateDataSet(\n            $dimension,\n            [\n                new ReportMetric('total', 'total', 'Total', $aggregateFunction)\n            ],\n            new CarbonPeriod($dateStart, $dateEnd),\n            new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION, null, $ascending),\n            $groupInterval,\n            $values\n        );\n    }\n\n    private function makeWeeklyData()\n    {\n        return [\n            (object)[\n                'oc_dimension' => '2023-01-07',\n                'oc_metric_total' => 2\n            ],\n            (object)[\n                'oc_dimension' => '2023-01-08',\n                'oc_metric_total' => 3\n            ],\n            (object)[\n                'oc_dimension' => '2023-01-10',\n                'oc_metric_total' => 4\n            ]\n        ];\n    }\n}"
  },
  {
    "path": "modules/dashboard/tests/classes/ReportPeriodCalculatorTest.php",
    "content": "<?php\n\nuse Carbon\\Carbon;\nuse Dashboard\\Classes\\ReportPeriodCalculator;\n\nclass ReportPeriodCalculatorTest extends TestCase\n{\n    public function testFullYears()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        $startDate = Carbon::create(2020, 1, 1);\n        $endDate = Carbon::create(2022, 12, 31);\n\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2017-01-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2019-12-31', $result->getEndDate()->toDateString());\n    }\n\n    public function testPartialYears()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        $startDate = Carbon::create(2020, 2, 1);\n        $endDate = Carbon::create(2022, 12, 31);\n\n        // This must fall back to months\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2017-03-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2020-01-31', $result->getEndDate()->toDateString());\n    }\n\n    public function testFullMonths()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        $startDate = Carbon::create(2022, 1, 1);\n        $endDate = Carbon::create(2022, 2, 28);\n\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2021-11-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-12-31', $result->getEndDate()->toDateString());\n\n        $startDate = Carbon::create(2022, 6, 1);\n        $endDate = Carbon::create(2022, 6, 30);\n\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2022-05-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2022-05-31', $result->getEndDate()->toDateString());\n    }\n\n    public function testPartialMonths()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        $startDate = Carbon::create(2022, 2, 15);\n        $endDate = Carbon::create(2022, 2, 25);\n\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2022-02-04', $result->getStartDate()->toDateString());\n        $this->assertEquals('2022-02-14', $result->getEndDate()->toDateString());\n    }\n\n    public function testFullWeeks()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        $startDate = Carbon::create(2022, 2, 14);\n        $endDate = Carbon::create(2022, 2, 20);\n\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2022-02-07', $result->getStartDate()->toDateString());\n        $this->assertEquals('2022-02-13', $result->getEndDate()->toDateString());\n    }\n\n    public function testPartialWeeks()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        $startDate = Carbon::create(2022, 2, 13);\n        $endDate = Carbon::create(2022, 2, 20);\n\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2022-02-05', $result->getStartDate()->toDateString());\n        $this->assertEquals('2022-02-12', $result->getEndDate()->toDateString());\n    }\n\n    public function testFullQuarters()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        $startDate = Carbon::create(2022, 1, 1);\n        $endDate = Carbon::create(2022, 3, 31);\n\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2021-10-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-12-31', $result->getEndDate()->toDateString());\n\n        $startDate = Carbon::create(2022, 4, 1);\n        $endDate = Carbon::create(2022, 6, 30);\n\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2022-01-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2022-03-31', $result->getEndDate()->toDateString());\n    }\n\n    public function testDays()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        $startDate = Carbon::create(2021, 12, 30);\n        $endDate = Carbon::create(2022, 1, 5);\n\n        $result = $calculator->getPreviousPeriod($startDate, $endDate);\n\n        $this->assertEquals('2021-12-23', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-12-29', $result->getEndDate()->toDateString());\n    }\n\n    public function testFullYearsLastYear()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        $startDate = Carbon::create(2020, 1, 1);\n        $endDate = Carbon::create(2022, 12, 31);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2017-01-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2019-12-31', $result->getEndDate()->toDateString());\n\n        $startDate = Carbon::create(2022, 1, 1);\n        $endDate = Carbon::create(2022, 12, 31);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2021-01-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-12-31', $result->getEndDate()->toDateString());\n    }\n\n    public function testFullQuartersLastYear()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        // One quarter\n        $startDate = Carbon::create(2022, 4, 1);\n        $endDate = Carbon::create(2022, 6, 30);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2021-04-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-06-30', $result->getEndDate()->toDateString());\n\n        // Three quarters, same year\n        $startDate = Carbon::create(2022, 4, 1);\n        $endDate = Carbon::create(2022, 12, 31);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2021-04-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-12-31', $result->getEndDate()->toDateString());\n\n        // Two quarters, spanning two years\n        $startDate = Carbon::create(2021, 10, 1);\n        $endDate = Carbon::create(2022, 3, 31);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2020-10-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-03-31', $result->getEndDate()->toDateString());\n\n        // Five quarters, spanning two years\n        $startDate = Carbon::create(2021, 1, 1);\n        $endDate = Carbon::create(2022, 3, 31);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2019-01-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2020-03-31', $result->getEndDate()->toDateString());\n    }\n\n    public function testFullMonthsLastYear()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        // One month\n        $startDate = Carbon::create(2022, 5, 1);\n        $endDate = Carbon::create(2022, 5, 31);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2021-05-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-05-31', $result->getEndDate()->toDateString());\n\n        // Two months, leap year\n        $startDate = Carbon::create(2024, 1, 1);\n        $endDate = Carbon::create(2024, 2, 29);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2023-01-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2023-02-28', $result->getEndDate()->toDateString());\n\n        // Two months, spanning two years\n        $startDate = Carbon::create(2021, 12, 1);\n        $endDate = Carbon::create(2022, 1, 31);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2020-12-01', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-01-31', $result->getEndDate()->toDateString());\n    }\n\n    public function testFullWeeksLastYear()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        // One week\n        $startDate = Carbon::create(2022, 1, 3);\n        $endDate = Carbon::create(2022, 1, 9);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2021-01-04', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-01-10', $result->getEndDate()->toDateString());\n\n        // One week, spanning two years\n        $startDate = Carbon::create(2021, 12, 27);\n        $endDate = Carbon::create(2022, 1, 2);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2020-12-28', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-01-03', $result->getEndDate()->toDateString());\n\n        // One week, last week of the year\n        $startDate = Carbon::create(2023, 12, 25);\n        $endDate = Carbon::create(2023, 12, 31);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2022-12-26', $result->getStartDate()->toDateString());\n        $this->assertEquals('2023-01-01', $result->getEndDate()->toDateString());\n\n        // Three weeks\n        $startDate = Carbon::create(2022, 2, 7);\n        $endDate = Carbon::create(2022, 2, 27);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n        $this->assertEquals('2021-02-08', $result->getStartDate()->toDateString());\n        $this->assertEquals('2021-02-28', $result->getEndDate()->toDateString());\n    }\n\n    public function testDaysLastYear()\n    {\n        $calculator = new ReportPeriodCalculator();\n\n        // Days in the same year\n        $startDate = Carbon::create(2023, 1, 10);\n        $endDate = Carbon::create(2023, 1, 17);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2022-01-10', $result->getStartDate()->toDateString());\n        $this->assertEquals('2022-01-17', $result->getEndDate()->toDateString());\n\n        // Days spanning two years\n        $startDate = Carbon::create(2022, 12, 29);\n        $endDate = Carbon::create(2023, 1, 3);\n\n        $result = $calculator->getPreviousPeriodLastYear($startDate, $endDate);\n\n        $this->assertEquals('2021-12-29', $result->getStartDate()->toDateString());\n        $this->assertEquals('2022-01-03', $result->getEndDate()->toDateString());\n    }\n}"
  },
  {
    "path": "modules/dashboard/tests/classes/ReportQueryBuilderTest.php",
    "content": "<?php\n\nuse Dashboard\\Classes\\ReportMetric;\nuse Dashboard\\Classes\\ReportDimension;\nuse Dashboard\\Classes\\ReportDataOrderRule;\nuse Dashboard\\Classes\\ReportDimensionField;\nuse Dashboard\\Classes\\ReportQueryBuilder;\nuse Dashboard\\Classes\\ReportDimensionFilter;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse Illuminate\\Database\\Query\\Builder;\nuse Carbon\\Carbon;\n\nclass ReportQueryBuilderTest extends TestCase\n{\n    // Daily data\n    private $dailyData = [\n        ['date_dimension' => '2023-01-01', 'int_metric' => 1, 'float_metric' => 1.1], // day 1\n        ['date_dimension' => '2023-01-01', 'int_metric' => 2, 'float_metric' => 2.1], // day 1\n        ['date_dimension' => '2023-01-02', 'int_metric' => 4, 'float_metric' => 3.3], // day 2\n        ['date_dimension' => '2023-01-02', 'int_metric' => 3, 'float_metric' => 1.1], // day 2\n    ];\n\n    // Weekly data (Week 1 and Week 2 of January)\n    private $weeklyData = [\n        ['date_dimension' => '2023-01-03', 'int_metric' => 5, 'float_metric' => 4.5], // week 1\n        ['date_dimension' => '2023-01-04', 'int_metric' => 6, 'float_metric' => 5.5], // week 1\n        ['date_dimension' => '2023-01-08', 'int_metric' => 7, 'float_metric' => 6.5], // week 1\n        ['date_dimension' => '2023-01-09', 'int_metric' => 8, 'float_metric' => 7.5], // week 2\n    ];\n\n    // Monthly data (January and February)\n    private $monthlyData = [\n        ['date_dimension' => '2023-01-10', 'int_metric' => 10, 'float_metric' => 8.5], // january\n        ['date_dimension' => '2023-02-15', 'int_metric' => 12, 'float_metric' => 9.5], // feburary\n        ['date_dimension' => '2023-02-28', 'int_metric' => 14, 'float_metric' => 10.5], // february\n    ];\n\n    // Quarterly data (Q1 and Q2)\n    private $quarterlyData = [\n        ['date_dimension' => '2023-03-01', 'int_metric' => 16, 'float_metric' => 11.5], // Q1\n        ['date_dimension' => '2023-03-15', 'int_metric' => 18, 'float_metric' => 12.5], // Q1\n        ['date_dimension' => '2023-04-01', 'int_metric' => 20, 'float_metric' => 13.5], // Q2\n        ['date_dimension' => '2023-06-30', 'int_metric' => 22, 'float_metric' => 14.5], // Q2\n    ];\n\n    // Yearly data (2023 and 2024)\n    private $yearlyData = [\n        ['date_dimension' => '2023-02-01', 'int_metric' => 24, 'float_metric' => 15.5], // year 1\n        ['date_dimension' => '2023-05-31', 'int_metric' => 26, 'float_metric' => 16.5], // year 1\n        ['date_dimension' => '2024-07-01', 'int_metric' => 28, 'float_metric' => 17.5], // year 2\n        ['date_dimension' => '2024-12-31', 'int_metric' => 30, 'float_metric' => 18.5], // year 2\n    ];\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->createApplication();\n\n        Schema::dropIfExists('test_report_data');\n        Schema::create('test_report_data', function($table)\n        {\n            $table->increments('id');\n            $table->date('date_dimension');\n            $table->integer('int_metric');\n            $table->decimal('float_metric',  10, 2);\n        });\n    }\n\n    public function testGetSingleMetricData()\n    {\n        Db::table('test_report_data')->insert($this->dailyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n        $metric = new ReportMetric('max_int', 'int_metric', 'Metric 1', ReportMetric::AGGREGATE_MAX);\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([$metric])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_max_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_dimension'));\n\n        $this->assertEquals(2, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals('2023-01-01', $dataArray[0]->oc_dimension);\n        $this->assertEquals(4, $dataArray[1]->oc_metric_max_int);\n        $this->assertEquals('2023-01-02', $dataArray[1]->oc_dimension);\n        $this->assertEquals(2, $builder->getTotalRecords());\n    }\n\n    public function testFullDateGrouping()\n    {\n        Db::table('test_report_data')->insert($this->dailyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([\n                new ReportMetric('max_int', 'int_metric', 'Metric 1', ReportMetric::AGGREGATE_MAX),\n                new ReportMetric('total_int', 'int_metric', 'Total integer', ReportMetric::AGGREGATE_SUM)\n            ])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->withoutGrouping()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(1, $dataArray);\n\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_max_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_total_int'));\n        $this->assertFalse(property_exists($dataArray[0], 'oc_dimension'));\n\n        $this->assertEquals(4, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals(10, $dataArray[0]->oc_metric_total_int);\n        $this->assertEquals(1, $builder->getTotalRecords());\n    }\n\n    public function testWeeklyGrouping()\n    {\n        if (env('DB_CONNECTION') === \"sqlite\") {\n            $this->markTestSkipped('Date aggregation functions are not supported in SQLite');\n        }\n\n        Db::table('test_report_data')->insert($this->weeklyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([\n                new ReportMetric('max_int', 'int_metric', 'Max integer', ReportMetric::AGGREGATE_MAX),\n                new ReportMetric('total_int', 'int_metric', 'Total integer', ReportMetric::AGGREGATE_SUM)\n            ])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByWeek()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_max_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_total_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_dimension'));\n\n        $this->assertEquals(7, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals(18, $dataArray[0]->oc_metric_total_int);\n        $this->assertEquals('2023-01-02', $dataArray[0]->oc_dimension);\n\n        $this->assertEquals(8, $dataArray[1]->oc_metric_max_int);\n        $this->assertEquals(8, $dataArray[1]->oc_metric_total_int);\n        $this->assertEquals('2023-01-09', $dataArray[1]->oc_dimension);\n    }\n\n    public function testMonthlyGrouping()\n    {\n        if (env('DB_CONNECTION') === \"sqlite\") {\n            $this->markTestSkipped('Date aggregation functions are not supported in SQLite');\n        }\n\n        Db::table('test_report_data')->insert($this->monthlyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([\n                new ReportMetric('max_int', 'int_metric', 'Max integer', ReportMetric::AGGREGATE_MAX),\n                new ReportMetric('total_int', 'int_metric', 'Total integer', ReportMetric::AGGREGATE_SUM)\n            ])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByMonth()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-02-28'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_max_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_total_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_dimension'));\n\n        $this->assertEquals(10, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals(10, $dataArray[0]->oc_metric_total_int);\n        $this->assertEquals('2023-01-01', $dataArray[0]->oc_dimension);\n\n        $this->assertEquals(14, $dataArray[1]->oc_metric_max_int);\n        $this->assertEquals(26, $dataArray[1]->oc_metric_total_int);\n        $this->assertEquals('2023-02-01', $dataArray[1]->oc_dimension);\n    }\n\n    public function testQuarterlyGrouping()\n    {\n        if (env('DB_CONNECTION') === \"sqlite\") {\n            $this->markTestSkipped('Date aggregation functions are not supported in SQLite');\n        }\n\n        Db::table('test_report_data')->insert($this->quarterlyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([\n                new ReportMetric('max_int', 'int_metric', 'Max integer', ReportMetric::AGGREGATE_MAX),\n                new ReportMetric('total_int', 'int_metric', 'Total integer', ReportMetric::AGGREGATE_SUM)\n            ])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByQuarter()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-06-30'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_max_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_total_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_dimension'));\n\n        $this->assertEquals(18, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals(34, $dataArray[0]->oc_metric_total_int);\n        $this->assertEquals('2023-01-01', $dataArray[0]->oc_dimension);\n\n        $this->assertEquals(22, $dataArray[1]->oc_metric_max_int);\n        $this->assertEquals(42, $dataArray[1]->oc_metric_total_int);\n        $this->assertEquals('2023-04-01', $dataArray[1]->oc_dimension);\n    }\n\n    public function testYearlyGrouping()\n    {\n        if (env('DB_CONNECTION') === \"sqlite\") {\n            $this->markTestSkipped('Date aggregation functions are not supported in SQLite');\n        }\n\n        Db::table('test_report_data')->insert($this->yearlyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([\n                new ReportMetric('max_int', 'int_metric', 'Max integer', ReportMetric::AGGREGATE_MAX),\n                new ReportMetric('total_int', 'int_metric', 'Total integer', ReportMetric::AGGREGATE_SUM)\n            ])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByYear()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2024-12-31'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_max_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_total_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_dimension'));\n\n        $this->assertEquals(26, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals(50, $dataArray[0]->oc_metric_total_int);\n        $this->assertEquals('2023-01-01', $dataArray[0]->oc_dimension);\n\n        $this->assertEquals(30, $dataArray[1]->oc_metric_max_int);\n        $this->assertEquals(58, $dataArray[1]->oc_metric_total_int);\n        $this->assertEquals('2024-01-01', $dataArray[1]->oc_dimension);\n    }\n\n    public function testGetMultipleMetricData()\n    {\n        Db::table('test_report_data')->insert($this->dailyData);\n        Db::table('test_report_data')->insert(\n            ['date_dimension' => '2023-01-02', 'int_metric' => 5, 'float_metric' => 1.1]\n        );\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([\n                new ReportMetric('max_int', 'int_metric', 'Max integer', ReportMetric::AGGREGATE_MAX),\n                new ReportMetric('min_int', 'int_metric', 'Min integer', ReportMetric::AGGREGATE_MIN),\n                new ReportMetric('total_int', 'int_metric', 'Total integer', ReportMetric::AGGREGATE_SUM),\n                new ReportMetric('max_float', 'float_metric', 'Max float', ReportMetric::AGGREGATE_MAX),\n                new ReportMetric('record_count', 'id', 'Record count', ReportMetric::AGGREGATE_COUNT),\n                new ReportMetric('distinct_floats', 'float_metric', 'Distinct floats', ReportMetric::AGGREGATE_COUNT_DISTINCT),\n            ])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertTrue(property_exists($dataArray[0], 'oc_dimension'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_max_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_min_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_total_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_max_float'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_record_count'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_distinct_floats'));\n\n        $this->assertEquals(2, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals(1, $dataArray[0]->oc_metric_min_int);\n        $this->assertEquals(3, $dataArray[0]->oc_metric_total_int);\n        $this->assertEquals(2.1, $dataArray[0]->oc_metric_max_float);\n        $this->assertEquals(2, $dataArray[0]->oc_metric_record_count);\n        $this->assertEquals(2, $dataArray[0]->oc_metric_distinct_floats);\n        $this->assertEquals('2023-01-01', $dataArray[0]->oc_dimension);\n\n        $this->assertEquals(5, $dataArray[1]->oc_metric_max_int);\n        $this->assertEquals(3, $dataArray[1]->oc_metric_min_int);\n        $this->assertEquals(12, $dataArray[1]->oc_metric_total_int);\n        $this->assertEquals(3.3, $dataArray[1]->oc_metric_max_float);\n        $this->assertEquals(3, $dataArray[1]->oc_metric_record_count);\n        $this->assertEquals(2, $dataArray[1]->oc_metric_distinct_floats);\n        $this->assertEquals('2023-01-02', $dataArray[1]->oc_dimension);\n        $this->assertEquals(2, $builder->getTotalRecords());\n    }\n\n    public function testDescendingSortByDimension()\n    {\n        Db::table('test_report_data')->insert($this->dailyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n        $metric = new ReportMetric('max_int', 'int_metric', 'Metric 1', ReportMetric::AGGREGATE_MAX);\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([$metric])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION, null, false))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertEquals(2, $dataArray[1]->oc_metric_max_int);\n        $this->assertEquals('2023-01-01', $dataArray[1]->oc_dimension);\n        $this->assertEquals(4, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals('2023-01-02', $dataArray[0]->oc_dimension);\n        $this->assertEquals(2, $builder->getTotalRecords());\n    }\n\n    public function testSortByMetric()\n    {\n        Db::table('test_report_data')->insert($this->dailyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n        $metric = new ReportMetric('max_int', 'int_metric', 'Metric 1', ReportMetric::AGGREGATE_MAX);\n\n        // Ascending\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([$metric])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_METRIC, 'max_int', true))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertEquals(2, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals('2023-01-01', $dataArray[0]->oc_dimension);\n        $this->assertEquals(4, $dataArray[1]->oc_metric_max_int);\n        $this->assertEquals('2023-01-02', $dataArray[1]->oc_dimension);\n        $this->assertEquals(2, $builder->getTotalRecords());\n\n        // Descending\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([$metric])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_METRIC, 'max_int', false))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertEquals(2, $dataArray[1]->oc_metric_max_int);\n        $this->assertEquals('2023-01-01', $dataArray[1]->oc_dimension);\n        $this->assertEquals(4, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals('2023-01-02', $dataArray[0]->oc_dimension);\n        $this->assertEquals(2, $builder->getTotalRecords());\n    }\n\n    public function testDimensionFields()\n    {\n        $builder = $this->makeBuilderWithDimensionFields([]);\n        $query = $builder->toQuery();\n\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(3, $dataArray); // We have 3 products and 4 sales\n        $this->assertTrue(property_exists($dataArray[0], 'oc_dimension'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_field_product_name'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_field_product_code'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_sales_total'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_sales_count'));\n\n        // The rows must be sorted by product name, descending\n        $this->assertEquals(3, $dataArray[0]->oc_dimension);\n        $this->assertEquals(2, $dataArray[1]->oc_dimension);\n        $this->assertEquals(1, $dataArray[2]->oc_dimension);\n\n        $this->assertEquals('Product 3 - pants', $dataArray[0]->oc_field_product_name);\n        $this->assertEquals('Product 2 - t-shirt', $dataArray[1]->oc_field_product_name);\n        $this->assertEquals('Product 1 - hoodie', $dataArray[2]->oc_field_product_name);\n\n        $this->assertEquals('P3', $dataArray[0]->oc_field_product_code);\n        $this->assertEquals('P2', $dataArray[1]->oc_field_product_code);\n        $this->assertEquals('P1', $dataArray[2]->oc_field_product_code);\n\n        $this->assertEquals(33, $dataArray[0]->oc_metric_sales_total);\n        $this->assertEquals(44, $dataArray[1]->oc_metric_sales_total);\n        $this->assertEquals(11, $dataArray[2]->oc_metric_sales_total);\n\n        $this->assertEquals(1, $dataArray[0]->oc_metric_sales_count);\n        $this->assertEquals(2, $dataArray[1]->oc_metric_sales_count);\n        $this->assertEquals(1, $dataArray[2]->oc_metric_sales_count);\n\n        $this->assertEquals(3, $builder->getTotalRecords());\n    }\n\n    public function testMetricsFromAnotherTable()\n    {\n        $this->makeSalesData();\n\n        $builder = ReportQueryBuilder::table('test_sales_products_data')\n            ->dimension(new ReportDimension('product', 'test_sales_products_data.id', 'Product ID'))\n            ->metrics([\n                new ReportMetric('sales_total', 'total', 'Sales total', ReportMetric::AGGREGATE_SUM),\n            ])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION, null, true))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'))\n            ->onConfigureMetrics(function(Builder $query, ReportDimension $dimension, array $metrics) {\n                if (ReportMetric::findMetricByCode($metrics, 'sales_total')) {\n                    $query->leftJoin('test_sales_report_data', function($join) {\n                        $join->on('product_id', '=', 'test_sales_products_data.id')\n                            ->where('test_sales_report_data.completed', '=', 1);\n                    });\n                }\n            });\n\n        $query = $builder->toQuery();\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(3, $dataArray);\n        $this->assertTrue(property_exists($dataArray[0], 'oc_dimension'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_sales_total'));\n\n        $this->assertEquals(1, $dataArray[0]->oc_dimension);\n        $this->assertEquals(2, $dataArray[1]->oc_dimension);\n        $this->assertEquals(3, $dataArray[2]->oc_dimension);\n\n        $this->assertEquals(11, $dataArray[0]->oc_metric_sales_total);\n        $this->assertEquals(44, $dataArray[1]->oc_metric_sales_total);\n        $this->assertEquals(33, $dataArray[2]->oc_metric_sales_total);\n    }\n\n    public function testManualMetrics()\n    {\n        $this->makeSalesData();\n\n        $salesDataJoinAdded = new SplObjectStorage();\n\n        $builder = ReportQueryBuilder::table('test_sales_products_data')\n            ->dimension(new ReportDimension('product', 'test_sales_products_data.id', 'Product ID'))\n            ->metrics([\n                new ReportMetric('completed_sales_total', 'total_completed', 'Completed sales total', ReportMetric::AGGREGATE_SUM),\n                new ReportMetric('abandoned_sales_total', 'total_abandoned', 'Abandoned sales total', ReportMetric::AGGREGATE_SUM),\n            ])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION, null, true))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'))\n            ->onConfigureMetric(function(Builder $query, ReportMetric $metric, ReportDimension $dimension, array $metrics)\n                use (&$salesDataJoinAdded)\n            {\n                $isCompletedSales = $metric->getCode() === 'completed_sales_total';\n                $isAbandonedSales = $metric->getCode() === 'abandoned_sales_total';\n\n                $joinAdded = $salesDataJoinAdded->offsetExists($query);\n                if (($isCompletedSales || $isAbandonedSales) && !$joinAdded) {\n                    $query->join('test_sales_report_data as tsrd', 'tsrd.product_id', '=', 'test_sales_products_data.id');\n                    $salesDataJoinAdded[$query] = true;\n                }\n\n                if ($isCompletedSales) {\n                    $query->addSelect(\n                        Db::raw('SUM(CASE WHEN tsrd.completed = 1 THEN tsrd.total ELSE 0 END) as oc_metric_completed_sales_total')\n                    );\n                    return true;\n                }\n\n                if ($isAbandonedSales) {\n                    $query->addSelect(\n                        Db::raw('SUM(CASE WHEN tsrd.completed = 0 THEN tsrd.total ELSE 0 END) as oc_metric_abandoned_sales_total')\n                    );\n                    return true;\n                }\n            });\n\n        $query = $builder->toQuery();\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(3, $dataArray);\n        $this->assertTrue(property_exists($dataArray[0], 'oc_dimension'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_completed_sales_total'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_abandoned_sales_total'));\n\n        $this->assertEquals(1, $dataArray[0]->oc_dimension);\n        $this->assertEquals(2, $dataArray[1]->oc_dimension);\n        $this->assertEquals(3, $dataArray[2]->oc_dimension);\n\n        $this->assertEquals(11, $dataArray[0]->oc_metric_completed_sales_total);\n        $this->assertEquals(44, $dataArray[1]->oc_metric_completed_sales_total);\n        $this->assertEquals(33, $dataArray[2]->oc_metric_completed_sales_total);\n\n        $this->assertEquals(11, $dataArray[0]->oc_metric_abandoned_sales_total);\n        $this->assertEquals(22, $dataArray[1]->oc_metric_abandoned_sales_total);\n        $this->assertEquals(0, $dataArray[2]->oc_metric_abandoned_sales_total);\n        $this->assertEquals(3, $builder->getTotalRecords());\n    }\n\n    public function testDimensionFilterEquals()\n    {\n        $builder = $this->makeBuilderWithDimensionFields(\n            [$this->makeDimensionFilter(ReportDimensionFilter::OPERATION_EQUALS, 1)]\n        );\n        $query = $builder->toQuery();\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(1, $dataArray);\n        $this->assertEquals(1, $dataArray[0]->oc_dimension);\n        $this->assertEquals(1, $builder->getTotalRecords());\n    }\n\n    public function testDimensionFilterMoreOrEquals()\n    {\n        $builder = $this->makeBuilderWithDimensionFields(\n            [$this->makeDimensionFilter(ReportDimensionFilter::OPERATION_MORE_OR_EQUALS, 2)]\n        );\n        $query = $builder->toQuery();\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(2, $dataArray);\n        $this->assertEquals(3, $dataArray[0]->oc_dimension);\n        $this->assertEquals(2, $dataArray[1]->oc_dimension);\n        $this->assertEquals(2, $builder->getTotalRecords());\n    }\n\n    public function testDimensionFilterLessOrEquals()\n    {\n        $builder = $this->makeBuilderWithDimensionFields(\n            [$this->makeDimensionFilter(ReportDimensionFilter::OPERATION_LESS_OR_EQUALS, 2)]\n        );\n        $query = $builder->toQuery();\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(2, $dataArray);\n        $this->assertEquals(2, $dataArray[0]->oc_dimension);\n        $this->assertEquals(1, $dataArray[1]->oc_dimension);\n        $this->assertEquals(2, $builder->getTotalRecords());\n    }\n\n    public function testDimensionFilterMore()\n    {\n        $builder = $this->makeBuilderWithDimensionFields(\n            [$this->makeDimensionFilter(ReportDimensionFilter::OPERATION_MORE, 2)]\n        );\n        $query = $builder->toQuery();\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(1, $dataArray);\n        $this->assertEquals(3, $dataArray[0]->oc_dimension);\n        $this->assertEquals(1, $builder->getTotalRecords());\n    }\n\n    public function testDimensionFilterLess()\n    {\n        $builder = $this->makeBuilderWithDimensionFields(\n            [$this->makeDimensionFilter(ReportDimensionFilter::OPERATION_LESS, 2)]\n        );\n        $query = $builder->toQuery();\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(1, $dataArray);\n        $this->assertEquals(1, $dataArray[0]->oc_dimension);\n        $this->assertEquals(1, $builder->getTotalRecords());\n    }\n\n    public function testDimensionFilterOneOf()\n    {\n        $builder = $this->makeBuilderWithDimensionFields(\n            [$this->makeDimensionFilter(ReportDimensionFilter::OPERATION_ONE_OF, [1, 3])]\n        );\n        $query = $builder->toQuery();\n\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(2, $dataArray);\n        $this->assertEquals(3, $dataArray[0]->oc_dimension);\n        $this->assertEquals(1, $dataArray[1]->oc_dimension);\n        $this->assertEquals(2, $builder->getTotalRecords());\n    }\n\n    public function testDimensionFieldFilterStringStartsWith()\n    {\n        $builder = $this->makeBuilderWithDimensionFields(\n            [$this->makeDimensionFieldFilter(ReportDimensionFilter::OPERATION_STARTS_WITH, 'Product 1 - hood')]\n        );\n        $query = $builder->toQuery();\n\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(1, $dataArray);\n        $this->assertEquals(1, $dataArray[0]->oc_dimension);\n        $this->assertEquals(1, $builder->getTotalRecords());\n    }\n\n    public function testDimensionFieldFilterStringIncludes()\n    {\n        $builder = $this->makeBuilderWithDimensionFields(\n            [$this->makeDimensionFieldFilter(ReportDimensionFilter::OPERATION_STRING_INCLUDES, 't-shirt')]\n        );\n        $query = $builder->toQuery();\n\n        $dataArray = $query->get()->toArray();\n\n        $this->assertCount(1, $dataArray);\n        $this->assertEquals(2, $dataArray[0]->oc_dimension);\n        $this->assertEquals(1, $builder->getTotalRecords());\n    }\n\n    public function testWhenConditional()\n    {\n        Db::table('test_report_data')->insert($this->dailyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n        $metric = new ReportMetric('max_int', 'int_metric', 'Metric 1', ReportMetric::AGGREGATE_MAX);\n\n        // Test when condition is true\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([$metric])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'))\n            ->when(true, fn($b) => $b->limit(1));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(1, $dataArray);\n\n        // Test when condition is false\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([$metric])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'))\n            ->when(false, fn($b) => $b->limit(1));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n    }\n\n    public function testAddMetric()\n    {\n        Db::table('test_report_data')->insert($this->dailyData);\n\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->addMetric(new ReportMetric('max_int', 'int_metric', 'Max integer', ReportMetric::AGGREGATE_MAX))\n            ->addMetric(new ReportMetric('min_int', 'int_metric', 'Min integer', ReportMetric::AGGREGATE_MIN))\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'));\n\n        $dataArray = $builder->toQuery()->get()->toArray();\n        $this->assertCount(2, $dataArray);\n\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_max_int'));\n        $this->assertTrue(property_exists($dataArray[0], 'oc_metric_min_int'));\n\n        $this->assertEquals(2, $dataArray[0]->oc_metric_max_int);\n        $this->assertEquals(1, $dataArray[0]->oc_metric_min_int);\n    }\n\n    public function testToSql()\n    {\n        $dimension = new ReportDimension(ReportDimension::CODE_DATE, 'date_dimension', 'Date');\n        $metric = new ReportMetric('max_int', 'int_metric', 'Metric 1', ReportMetric::AGGREGATE_MAX);\n\n        $builder = ReportQueryBuilder::table('test_report_data')\n            ->dimension($dimension)\n            ->metrics([$metric])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION))\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'));\n\n        $sql = $builder->toSql();\n\n        $this->assertIsString($sql);\n        $this->assertStringContainsString('test_report_data', $sql);\n        $this->assertStringContainsString('max', $sql);\n    }\n\n    private function makeSalesData()\n    {\n        Schema::dropIfExists('test_sales_report_data');\n        Schema::create('test_sales_report_data', function($table)\n        {\n            $table->increments('id');\n            $table->integer('product_id');\n            $table->date('date_dimension');\n            $table->boolean('completed');\n            $table->decimal('total',  10, 2);\n        });\n\n        Schema::dropIfExists('test_sales_products_data');\n        Schema::create('test_sales_products_data', function($table)\n        {\n            $table->increments('id');\n            $table->string('name');\n            $table->string('sku');\n            $table->decimal('price',  10, 2);\n        });\n\n        Db::table('test_sales_products_data')->insert([\n            ['name' => 'Product 1 - hoodie', 'sku' => 'P1', 'price' => 10, 'id' => 1],\n            ['name' => 'Product 2 - t-shirt', 'sku' => 'P2', 'price' => 20, 'id' => 2],\n            ['name' => 'Product 3 - pants', 'sku' => 'P3', 'price' => 30, 'id' => 3]\n        ]);\n\n        Db::table('test_sales_report_data')->insert([\n            ['product_id' => 1, 'date_dimension' => '2020-01-01', 'total' => 11, 'completed' => 1],\n            ['product_id' => 2, 'date_dimension' => '2020-01-02', 'total' => 22, 'completed' => 1],\n            ['product_id' => 2, 'date_dimension' => '2020-01-02', 'total' => 22, 'completed' => 1],\n            ['product_id' => 3, 'date_dimension' => '2020-01-03', 'total' => 33, 'completed' => 1],\n            ['product_id' => 1, 'date_dimension' => '2020-01-04', 'total' => 11, 'completed' => 0],\n            ['product_id' => 2, 'date_dimension' => '2020-01-04', 'total' => 22, 'completed' => 0]\n        ]);\n    }\n\n    private function makeBuilderWithDimensionFields(array $filters)\n    {\n        $this->makeSalesData();\n\n        $dimension = new ReportDimension('product', 'product_id', 'Product');\n        $dimension->addDimensionField(\n            new ReportDimensionField('oc_field_product_name', 'Product name', null, true, false),\n            new ReportDimensionField('oc_field_product_sku', 'Product SKU', null, true, false),\n        );\n\n        return ReportQueryBuilder::table('test_sales_report_data')\n            ->dimension($dimension)\n            ->metrics([\n                new ReportMetric('sales_total', 'total', 'Sales total', ReportMetric::AGGREGATE_SUM),\n                new ReportMetric('sales_count', 'product_id', 'Quantity', ReportMetric::AGGREGATE_COUNT)\n            ])\n            ->orderBy(new ReportDataOrderRule(ReportDataOrderRule::ATTR_TYPE_DIMENSION_FIELD, 'oc_field_product_name', false))\n            ->filters($filters)\n            ->groupByDay()\n            ->dateRange(new Carbon('2023-01-01'), new Carbon('2023-01-31'))\n            ->onConfigureQuery(function(Builder $query, ReportDimension $dimension, array $metrics) {\n                // The report query builder doesn't load dimension fields\n                // automatically, so we need to manually add them.\n                $query->join(\n                    'test_sales_products_data',\n                    'test_sales_products_data.id',\n                    '=',\n                    'test_sales_report_data.product_id');\n\n                $query->addSelect([\n                    'test_sales_products_data.name as oc_field_product_name',\n                    'test_sales_products_data.sku as oc_field_product_code'\n                ]);\n\n                $query->where('test_sales_report_data.completed', true);\n            });\n    }\n\n    private function makeDimensionFilter(string $operation, string|array|int|float|bool $value)\n    {\n        return new ReportDimensionFilter(\n            ReportDimensionFilter::ATTR_TYPE_DIMENSION,\n            null,\n            $operation,\n            $value\n        );\n    }\n\n    private function makeDimensionFieldFilter(string $operation, string|array|int|float|bool $value)\n    {\n        return new ReportDimensionFilter(\n            ReportDimensionFilter::ATTR_TYPE_DIMENSION_FIELD,\n            'oc_field_product_name',\n            $operation,\n            $value\n        );\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/Dashboard.php",
    "content": "<?php namespace Dashboard\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Dashboard top-level component\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Dashboard extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'dashboard-component-dashboard';\n\n    /**\n     * @var array require other components\n     */\n    protected $require = [\n        \\Backend\\VueComponents\\DropdownMenu::class,\n        \\Backend\\VueComponents\\Modal::class,\n        \\Backend\\VueComponents\\LoadingIndicator::class\n    ];\n\n    /**\n     * registerSubcomponents\n     */\n    protected function registerSubcomponents()\n    {\n        $this->registerSubcomponent('dashboard-selector');\n        $this->registerSubcomponent('interval-selector');\n        $this->registerSubcomponent('report');\n        $this->registerSubcomponent('report-row');\n        $this->registerSubcomponent('report-diff');\n        $this->registerSubcomponent('report-widget');\n\n        $this->registerSubcomponent('widget-static');\n        $this->registerSubcomponent('widget-indicator');\n        $this->registerSubcomponent('widget-chart');\n        $this->registerSubcomponent('widget-table');\n        $this->registerSubcomponent('widget-section-title');\n        $this->registerSubcomponent('widget-text-notice');\n        $this->registerSubcomponent('widget-error');\n    }\n\n    /**\n     * loadAssets adds component specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * The default component script and CSS file are loaded automatically.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('/modules/backend/assets/js/ph-icons-list.js', ['type' => 'module']);\n        // $this->addJs('/modules/system/assets/vendor/chartjs/chart.umd.js');\n        // $this->addJs('/modules/system/assets/vendor/chartjs/chartjs-adapter-moment.min.js');\n\n        // $this->addJs('/modules/dashboard/assets/js/classes/Helpers.js', ['type' => 'module']);\n        // $this->addJs('/modules/dashboard/assets/js/classes/DataSource.js', ['type' => 'module']);\n        // $this->addJs('/modules/dashboard/assets/js/classes/Calendar.js', ['type' => 'module']);\n        // $this->addJs('/modules/dashboard/assets/js/classes/InspectorConfigurator.js', ['type' => 'module']);\n        // $this->addJs('/modules/dashboard/assets/js/classes/Sizing.js', ['type' => 'module']);\n        // $this->addJs('/modules/dashboard/assets/js/classes/Dragging.js', ['type' => 'module']);\n        // $this->addJs('/modules/dashboard/assets/js/classes/Reordering.js', ['type' => 'module']);\n        // $this->addJs('/modules/dashboard/assets/js/classes/DataHelper.js', ['type' => 'module']);\n        // $this->addJs('/modules/dashboard/assets/js/classes/WidgetManager.js', ['type' => 'module']);\n\n        $this->addJs('js/widget-base.js', ['type' => 'module']);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_daterangepicker.css",
    "content": ".daterangepicker {\n    background: var(--bs-modal-bg);\n    border: var(--oc-popup-border) !important;\n\n    .drp-buttons {\n        border-top: var(--oc-popup-border);\n    }\n\n    .ranges li:hover {\n        background-color: var(--bs-secondary);\n        color: white;\n    }\n\n    &.show-ranges.ltr .drp-calendar.left {\n        border-left: var(--oc-popup-border);\n    }\n\n    &:before, &:after {\n        display: none!important;\n    }\n\n    .calendar-table {\n        background-color: transparent;\n        border-color: transparent;\n    }\n\n    td.off, td.off.in-range, td.off.start-date, td.off.end-date {\n        background-color: transparent;\n        color: inherit;\n    }\n\n    td.in-range:not(.active) {\n        background-color: var(--bs-secondary);\n    }\n\n    td.available, th.available {\n        &:hover {\n            background-color: var(--bs-secondary);\n            color: inherit;\n        }\n    }\n\n    .calendar-table {\n        .prev span, .next span {\n            border-color: var(--bs-body-color);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_report-container.css",
    "content": ".oc-dashboard .dashboard-report-container {\n    transition: margin 0.1s;\n    margin: 0;\n    position: relative;\n\n    &:before {\n        content: '';\n        position: absolute;\n        opacity: 0;\n        left: -25px;\n        top: 15px;\n        bottom: -30px;\n        border-left: 1px dashed var(--oc-color-control-border);\n    }\n\n    &.edit-mode {\n        margin-left: 40px;\n\n        &::before {\n            opacity: 100%;\n        }\n    }\n\n    .rows-container {\n        margin: 0 calc((var(--oc-dashboard-gap-size) / 2) * -1);\n    }\n\n    .row-controls {\n        position: absolute;\n\n        .edit-row-button {\n            width: 35px;\n            height: 35px;\n            user-select: none;\n            cursor: pointer;\n            border-radius: 38px;\n            border: 1px solid var(--oc-toolbar-border);\n            background-color: var(--oc-toolbar-bg);\n            position: absolute;\n            left: -32px;\n            top: 0;\n            transition: transform 0.05s;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n\n            &:focus {\n                border-color: var(--oc-border-focus);\n            }\n\n            &.add-row i {\n                font-size: 22px;\n                color: #5F6368;\n            }\n        }\n    }\n\n    > .row-controls {\n        padding-bottom: 50px;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_row.css",
    "content": ".oc-dashboard .report-row {\n    margin-bottom: 0;\n\n    &.no-widgets {\n        margin-bottom: var(--oc-dashboard-gap-size);\n    }\n\n    &.equal-height-widgets {\n        align-items: stretch;\n    }\n\n    &.widget-doesnt-fit-animation {\n        -webkit-animation: shake-horizontal 0.8s cubic-bezier(0.455, 0.030, 0.515, 0.955) both;\n        animation: shake-horizontal 0.8s cubic-bezier(0.455, 0.030, 0.515, 0.955) both;\n    }\n\n    .row-widgets {\n        margin: 0 -(calc(var(--oc-dashboard-gap-size) / 2));\n        display: flex;\n        flex-wrap: wrap;\n        align-items: flex-start;\n        transition: transform 0.2s;\n    }\n\n    &.reordering {\n        .row-widgets {\n            transform: scale(1.002);\n        }\n    }\n\n    .add-widget-button {\n        border-radius: 10px;\n        border: 1px solid var(--oc-toolbar-border);\n        background-color: var(--oc-toolbar-bg);\n        height: 58px;\n        margin: 19px;\n        display: flex;\n        gap: 5px;\n        padding: 0 10px;\n        justify-content: center;\n        align-items: center;\n        cursor: pointer;\n\n        > i {\n            font-size: 28px;\n            color: #5F6368;\n        }\n\n        > span {\n\n        }\n    }\n}\n\n.oc-dashboard {\n    .reorder-row-list-move {\n        transition: transform 0.2s;\n    }\n\n    .edit-mode {\n        .report-row {\n            &.no-widgets {\n                .row-widgets {\n                    margin: 0 (calc(var(--oc-dashboard-gap-size) / 2));\n                    min-height: 100px;\n                    border-radius: 10px;\n                    border: 2px dashed #ECF0F1;\n                }\n            }\n        }\n    }\n\n    .responsive-mode {\n        .report-row {\n\n        }\n    }\n}\n\n@keyframes shake-horizontal {\n    0%,\n    100% {\n        -webkit-transform: translateX(0);\n        transform: translateX(0);\n    }\n    10%,\n    30%,\n    50%,\n    70% {\n        -webkit-transform: translateX(-10px);\n        transform: translateX(-10px);\n    }\n    20%,\n    40%,\n    60% {\n        -webkit-transform: translateX(10px);\n        transform: translateX(10px);\n    }\n    80% {\n        -webkit-transform: translateX(8px);\n        transform: translateX(8px);\n    }\n    90% {\n        -webkit-transform: translateX(-8px);\n        transform: translateX(-8px);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_toolbar.css",
    "content": ".oc-dashboard .dashboard-toolbar-container {\n    padding-bottom: 20px;\n    display: flex;\n    gap: 20px;\n    justify-content: space-between;\n    align-items: flex-start;\n\n    .dashboards {\n        flex: 1;\n        min-width: 0;\n    }\n\n    /*\n    .dashboard-list {\n        position: relative;\n\n        .dropdown-items {\n            padding: 10px 0;\n            position: absolute;\n            z-index: @zindex-dropdown;\n\n            .items-container {\n                box-shadow: @mobile-dropdown-shadow;\n                border-radius: 10px;\n                background: var(--bs-modal-bg);\n                border: @popup-border;\n                overflow: hidden;\n\n                a.dashboard-dropdown-item {\n                    padding: 10px 15px;\n                    text-decoration: none;\n                    display: flex;\n                    color: var(--bs-body-color);\n                    align-items: center;\n                    border-bottom: 1px solid var(--oc-primary-border);\n                    min-height: 36px;\n                    gap: 10px;\n                    white-space: nowrap;\n\n                    i {\n                        font-size: 22px;\n                    }\n\n                    &:last-child {\n                        border-bottom: 0;\n                    }\n\n                    &:hover {\n                        color: var(--oc-dropdown-hover-color);\n                        background-color: var(--oc-dropdown-hover-bg);\n                    }\n\n                    &.selected {\n                        background-color: var(--oc-selection);\n                        color: white;\n                        border-color: var(--oc-selection);\n                    }\n                }\n            }\n        }\n    }\n    */\n\n    .dashboard-toolbar-button {\n        padding: 7px 10px;\n        text-decoration: none;\n        display: flex;\n        color: var(--oc-toolbar-color);\n        align-items: center;\n        background-color: var(--oc-toolbar-bg);\n        border: 1px solid var(--oc-primary-border);\n        min-height: 36px;\n        -webkit-appearance: none;\n        white-space: nowrap;\n\n        &[disabled] {\n            opacity: 0.6;\n        }\n\n        &.selected {\n            background-color: var(--oc-selection);\n            color: white;\n            border-color: var(--oc-selection);\n        }\n\n        &.primary {\n            background-color: var(--bs-primary);\n            border-color: var(--bs-primary);\n            color: white;\n        }\n\n        i {\n            font-size: 18px;\n\n            &:first-child {\n                margin-right: 5px;\n            }\n\n            &:last-child {\n                margin-left: 5px;\n            }\n\n            &:first-child:last-child {\n                margin-left: 0;\n                margin-right: 0;\n            }\n        }\n\n        &.dropdown {\n            i {\n                font-size: 14px;\n            }\n        }\n\n        &.stack {\n            text-align: left;\n            align-items: start;\n            flex-direction: column;\n\n            > div {\n                color: var(--bs-secondary-color);\n                font-weight: 500;\n            }\n        }\n    }\n\n    .dashboard-button-set {\n        display: flex;\n\n        .dashboard-toolbar-button {\n            margin: 0 0 0 -1px;\n\n            &.selected, &.primary {\n                z-index: 1;\n                position: relative;\n            }\n\n            &:first-child {\n                margin-left: 0;\n                border-top-left-radius: 10px;\n                border-bottom-left-radius: 10px;\n            }\n\n            &:last-of-type {\n                border-top-right-radius: 10px;\n                border-bottom-right-radius: 10px;\n            }\n        }\n    }\n\n    .dashboard-selector {\n        display: flex;\n        gap: 15px;\n        margin-top: 10px;\n\n        h2 {\n            font-size: 24px;\n            margin: 0;\n            line-height: 1.4;\n        }\n    }\n\n    @media (max-width: 768px) {\n        display: block;\n\n        .dashboard-selector {\n            justify-content: space-between;\n            margin-bottom: 20px;\n        }\n    }\n\n    @media (max-width: 576px) {\n        .manage-dashboard-controls {\n            .dashboard-toolbar-button {\n                flex: 1;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_widget-chart.css",
    "content": ".oc-dashboard .dashboard-report-widget .dashboard-report-widget-chart {\n    .widget-chart-container {\n        position: relative;\n        width: 100%;\n        height: 250px;\n\n        &.error {\n            display: none !important;\n        }\n\n        canvas {\n            height: 250px !important;\n            width: 100% !important;\n        }\n    }\n\n    &.loading {\n        .widget-chart-container {\n            canvas {\n                display: none !important;\n            }\n\n            &:before, &:after {\n                content: '';\n                position: absolute;\n                width: 200%;\n                height: 100%;\n                top: 0;\n                z-index: 0;\n            }\n\n            &:before {\n                background: transparent url('../../../../assets/images/dashboard/graph-loading-1.svg') repeat-x 0 50%;\n                animation: board-widget-graph-animation 8s infinite alternate ease-in-out;\n            }\n\n            &:after {\n                background: transparent url('../../../../assets/images/dashboard/graph-loading-2.svg') repeat-x 0 50%;\n                animation: board-widget-graph-animation 8s infinite alternate-reverse ease-in-out;\n            }\n        }\n    }\n\n    .widget-error {\n        margin: 30px auto;\n        max-width: 400px;\n        text-align: center;\n\n        span.ph {\n            display: inline-block;\n            margin-bottom: 15px;\n            font-size: 56px;\n        }\n    }\n\n    .totals {\n        display: flex;\n        gap: 25px;\n        flex-direction: row;\n\n        .total-cell {\n            text-align: right;\n\n            .total-name {\n                font-weight: 500;\n                display: flex;\n                gap: 5px;\n                align-items: center;\n                justify-content: flex-end;\n\n                .total-color {\n                    width: 10px;\n                    height: 10px;\n                    border-radius: 6px;\n                    border: 1px solid white;\n                }\n            }\n\n            .skeleton-container {\n                display: flex;\n                flex-direction: column;\n                align-items: flex-end;\n\n                .data-skeleton {\n                    background-color: var(--oc-color-widget-skeleton);\n                    opacity: var(--oc-opacity-widget-skeleton);\n                    border-radius: 40px;\n\n                    &.skeleton-name {\n                        height: 14px;\n                        margin: 3px 0;\n                        width: 60px;\n                        margin-bottom: 9px;\n                    }\n\n                    &.skeleton-value {\n                        height: 28px;\n                        width: 40px;\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_widget-indicator.css",
    "content": ".oc-dashboard .dashboard-report-widget .dashboard-report-widget-indicator {\n    display: flex;\n    flex-direction: column;\n\n    .indicator-body {\n        padding: var(--oc-widget-body-padding) var(--oc-widget-body-padding) 11px;\n        display: flex;\n        flex-direction: row;\n        gap: 15px;\n\n        .indicator-details {\n            min-width: 0;\n        }\n\n        p {\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n        }\n\n        h3 {\n            margin: -1px 0 0 0;\n        }\n\n        p {\n            color: inherit;\n            font-size: 24px;\n            margin: -4px 0 0 0;\n        }\n\n        .widget-error {\n            display: flex;\n            max-width: 100%;\n\n            span.ph {\n                display: inline-block;\n                margin-right: 15px;\n                font-size: 40px;\n            }\n\n            p {\n                font-size: 14px;\n                white-space: normal;\n            }\n        }\n    }\n\n    .indicator-icon {\n        width: 40px;\n        height: 40px;\n        border-radius: 8px;\n        flex-shrink: 0;\n        color: white;\n        display: flex;\n        align-items: center;\n        position: relative;\n        justify-content: center;\n\n        i:before {\n            font-size: 32px;\n        }\n\n        &.status-info {\n            background-color: #6A6CF7;\n        }\n\n        &.status-important {\n            background-color: #F1C40F;\n        }\n\n        &.status-success {\n            background-color: #87C00D;\n        }\n\n        &.status-warning {\n            background-color: #D6301D;\n        }\n\n        &.status-disabled {\n            background-color: #BDC3C7;\n        }\n\n        .icon-complication {\n            position: absolute;\n\n            &.up {\n                width: 18px;\n                height: 18px;\n                top: -9px;\n                right: -9px;\n                display: block;\n                background: url('../../../../assets/images/dashboard/complication-level-up.svg') no-repeat;\n            }\n        }\n    }\n\n    .indicator-link-container {\n        padding: 10px 17px;\n        background-color: var(--oc-sidebar-bg);\n        white-space: nowrap;\n        overflow: hidden;\n        text-overflow: ellipsis;\n\n        &.disabled {\n            color: #BDC3C7;\n        }\n    }\n\n    &.loading {\n        .indicator-icon {\n            background-color: var(--oc-color-widget-skeleton);\n            opacity: var(--oc-opacity-widget-skeleton);\n            i {\n                display: none;\n            }\n        }\n\n        .indicator-link {\n            > span {\n                display: flex;\n\n                &:before {\n                    content: '';\n                    margin: 3px 0;\n                    border-radius: 40px;\n                    width: 60%;\n                    background-color: var(--oc-color-widget-skeleton);\n                    opacity: var(--oc-opacity-widget-skeleton);\n                }\n            }\n        }\n\n        .indicator-body {\n            .indicator-details {\n                width: 100%;\n\n                h3, p {\n                    position: relative;\n                    display: flex;\n                    flex-direction: row;\n\n                    &:before, &:after {\n                        border-radius: 40px;\n                        background-color: var(--oc-color-widget-skeleton);\n                        opacity: var(--oc-opacity-widget-skeleton);\n                    }\n\n                    &:before {\n                        content: '';\n                        width: 30%;\n                    }\n                }\n\n                h3:after {\n                    content: '';\n                    width: 20%;\n                }\n\n                p {\n                    &:before {\n                        width: 80%;\n                        margin: 10px 0 6px 0;\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_widget-notice.css",
    "content": ".oc-dashboard .dashboard-report-widget .dashboard-report-widget-notice {\n    background-color: var(--oc-popup-bg);\n    p {\n        margin-bottom: 0;\n    }\n\n    h3:last-child {\n        margin-bottom: 0;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_widget-sectiontitle.css",
    "content": ".oc-dashboard .dashboard-report-widget {\n    h3.dashboard-section {\n        font-size: 22px;\n        margin: 10px 0 0 0;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_widget-static.css",
    "content": ".oc-dashboard .dashboard-report-widget .dashboard-report-widget-static {\n    .static-body {\n        padding: var(--oc-widget-body-padding) var(--oc-widget-body-padding) 11px;\n    }\n\n    h3.widget-title {\n        margin-bottom: 15px;\n    }\n\n    .table-container {\n        margin-top: 0;\n    }\n\n    &.loading {\n        .static-body {\n            > span {\n                display: flex;\n\n                &:before {\n                    content: '';\n                    margin: 3px 0;\n                    border-radius: 40px;\n                    width: 60%;\n                    background-color: var(--oc-color-widget-skeleton);\n                    opacity: var(--oc-opacity-widget-skeleton);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_widget-table.css",
    "content": ".oc-dashboard .dashboard-report-widget .dashboard-report-widget-table {\n    .table-widget-data {\n        display: grid;\n        width: 100%;\n\n        .header, .row, .totals {\n            display: contents;\n        }\n\n        .header .cell {\n            font-weight: 500;\n        }\n\n        .cell {\n            padding: 6px;\n            border-bottom: 1px solid var(--oc-toolbar-border);\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n            position: relative;\n            color: inherit;\n\n            &:first-child {\n                padding-left: 0;\n            }\n\n            &:last-child {\n                padding-right: 0;\n            }\n\n            &.hide_link {\n                cursor: default;\n                &:hover {\n                    text-decoration: none;\n                }\n            }\n\n            .cell-data-container {\n                position: relative;\n                overflow: hidden;\n                text-overflow: ellipsis;\n            }\n\n            .cell-data {\n                overflow: hidden;\n                text-overflow: ellipsis;\n            }\n\n            .data-skeleton {\n                display: none;\n\n                &.force {\n                    display: block;\n                }\n            }\n\n            &.paginating {\n                text-overflow: clip;\n\n                .cell-data-container {\n                    text-overflow: clip;\n                }\n\n                span.cell-data {\n                    visibility: hidden;\n                    text-overflow: clip;\n                }\n\n                .data-skeleton {\n                    display: block;\n                    position: absolute;\n                    /* width: 100%; */\n                    top: 0;\n                }\n\n                .relative-bar {\n                    visibility: hidden;\n                }\n            }\n\n            &.metric {\n                text-align: right;\n\n                &.header-loading {\n                    display: flex;\n                    justify-content: flex-end;\n                }\n\n                &.has-relative-bar {\n                    grid-column: span 2;\n                }\n\n                .metric-total {\n                    font-size: 12px;\n                    color: #7F8C8D;\n                }\n\n                &.relative-bar-container {\n                    width: 50px;\n                    display: flex;\n                    justify-content: flex-end;\n                    align-items: center;\n                    padding-right: 0;\n\n                    .relative-bar {\n                        display: block;\n                        border-radius: 6px;\n                        height: 6px;\n                    }\n                }\n\n                .metric-data-container {\n                    position: relative;\n                    display: flex;\n                    align-items: center;\n                    justify-content: flex-end;\n                    gap: 5px;\n                }\n            }\n\n            &.paginating {\n                /* font-size: 0; */\n            }\n        }\n\n        .row {\n            &:last-child .cell {\n                border-bottom: none;\n            }\n        }\n    }\n\n    .data-skeleton {\n        border-radius: 40px;\n        display: inline-block;\n        width: 60%;\n        height: 14px;\n        margin: 3px 0;\n        max-width: 200px;\n        min-width: 20px;\n        background-color: var(--oc-color-widget-skeleton);\n        opacity: var(--oc-opacity-widget-skeleton);\n\n        &.pagination {\n            width: 40%;\n        }\n    }\n\n    .totals.loading {\n        .cell {\n            font-size: 0;\n        }\n\n        .data-skeleton {\n            height: 28px;\n        }\n    }\n\n    .dimension-skeleton {\n        display: flex;\n        gap: 5px;\n\n        .data-skeleton {\n            &:first-child {\n                width: 30%;\n            }\n\n            &:last-child {\n                width: 50%;\n            }\n        }\n    }\n\n    .pagination-skeleton {\n        display: flex;\n        gap: 5px;\n        width: 100%;\n\n        .data-skeleton {\n            min-width: 0;\n            max-width: none;\n            margin: 6px 0;\n\n            &:first-child {\n                width: 60%;\n            }\n\n            &:nth-child(2) {\n                width: 14px;\n            }\n\n            &:nth-child(3) {\n                width: 14px;\n            }\n        }\n    }\n\n    .table-widget-pages {\n        font-size: 14px;\n        color: #5F6368;\n        margin-top: 10px;\n        display: flex;\n        align-items: center;\n\n        > div {\n            margin-right: 5px;\n            white-space: nowrap;\n            overflow: hidden;\n            text-overflow: ellipsis;\n        }\n\n        button.table-pagination {\n            -webkit-appearance: none;\n            width: 26px;\n            height: 26px;\n            border-radius: 100%;\n            display: inline-flex;\n            justify-content: center;\n            align-items: center;\n            border: none;\n            background-color: white;\n            font-size: 16px;\n\n            &:hover {\n                background-color: #F4F5F5;\n            }\n        }\n    }\n\n    .widget-error {\n        margin: 30px auto;\n        max-width: 400px;\n        text-align: center;\n\n        span.ph {\n            display: inline-block;\n            margin-bottom: 15px;\n            font-size: 56px;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/_widget.css",
    "content": ".oc-dashboard .dashboard-report-widget {\n    min-width: 0;\n    position: relative;\n    margin-bottom: var(--oc-dashboard-gap-size);\n\n    &.fixed-width-1 { width: 5%; }\n    &.fixed-width-2 { width: 10%; }\n    &.fixed-width-3 { width: 15%; }\n    &.fixed-width-4 { width: 20%; }\n    &.fixed-width-5 { width: 25%; }\n    &.fixed-width-6 { width: 30%; }\n    &.fixed-width-7 { width: 35%; }\n    &.fixed-width-8 { width: 40%; }\n    &.fixed-width-9 { width: 45%; }\n    &.fixed-width-10 { width: 50%; }\n    &.fixed-width-11 { width: 55%; }\n    &.fixed-width-12 { width: 60%; }\n    &.fixed-width-13 { width: 65%; }\n    &.fixed-width-14 { width: 70%; }\n    &.fixed-width-15 { width: 75%; }\n    &.fixed-width-16 { width: 80%; }\n    &.fixed-width-17 { width: 85%; }\n    &.fixed-width-18 { width: 90%; }\n    &.fixed-width-19 { width: 95%; }\n    &.fixed-width-20 { width: 100%; }\n\n    &:first-child {\n        margin-left: 0;\n    }\n\n    &:last-child {\n        margin-right: 0;\n    }\n\n    .widget-inner-container {\n        margin: 0 calc(var(--oc-dashboard-gap-size) / 2);\n        border-radius: 10px;\n        border: 1px solid var(--oc-toolbar-border);\n        background-color: var(--oc-toolbar-bg);\n        overflow: hidden;\n        height: 100%;\n        transition: box-shadow 0.2s;\n        position: relative;\n    }\n\n    &.frameless {\n        .widget-inner-container {\n            border-radius: 0;\n            background-color: transparent;\n            border: none;\n            padding: 0;\n            transition: padding 0.2s, background-color 0.2s;\n        }\n\n        &.edit-mode {\n            .widget-inner-container {\n                padding: 5px 50px 15px 15px;\n                border-radius: 10px;\n                background-color: #F4F5F5;\n            }\n\n            .widget-controls {\n                .edit-widget-button {\n                    top: 12px;\n                }\n            }\n        }\n    }\n\n    &.dragged {\n        .widget-inner-container {\n            position: relative;\n\n            &:after {\n                content: '';\n                position: absolute;\n                inset: 0;\n                z-index: 1;\n                background-color: #ECF0F1;\n            }\n        }\n    }\n\n    .resize-handle {\n        position: absolute;\n        width: 5px;\n        right: calc((-2px + var(--oc-dashboard-gap-size)) / 2);\n        top: 10px;\n        bottom: 10px;\n        border-radius: 5px;\n        background-color: var(--bs-secondary);\n        cursor: col-resize;\n        user-select: none;\n        opacity: 1;\n        transition: opacity 0.4s;\n        z-index: 2;\n    }\n\n    &.widget-clone {\n        position: fixed;\n        top: -1000px;\n        left: -1000px;\n\n        .resize-handle {\n            opacity: 0;\n        }\n    }\n\n    .widget-controls {\n        .edit-widget-button {\n            width: 33px;\n            height: 33px;\n            user-select: none;\n            cursor: pointer;\n            background-color: var(--oc-toolbar-bg);\n            border-radius: 35px;\n            position: absolute;\n            right: 18px;\n            top: 10px;\n            transition: transform 0.05s;\n            z-index: 1;\n\n            &:hover > img path {\n                fill: red;\n            }\n\n            &:focus {\n                border-color: var(--oc-border-focus);\n            }\n\n            > img {\n                position: absolute;\n                left: 15px;\n                top: 9px;\n            }\n        }\n    }\n\n    .widget-error {\n        span.ph {\n            color: #95A5A6;\n            font-size: 46px;\n            padding-bottom: 10px;\n        }\n\n        p {\n            margin-bottom: 0;\n        }\n    }\n\n    .generic-widget-error {\n        padding: 15px;\n        color: var(--bs-danger-text-emphasis);\n\n        span {\n            color: var(--bs-danger);\n        }\n    }\n\n    h3.widget-title {\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        font-size: 14px;\n        color: var(--bs-secondary-color);\n        font-weight: normal;\n    }\n\n    div.widget-body {\n        padding: var(--oc-widget-body-padding);\n    }\n\n    .dashboard-total-value {\n        font-size: 24px;\n    }\n\n    .total-container {\n        display: flex;\n        gap: 5px;\n        align-items: center;\n        justify-content: right;\n\n        &.align-left {\n            justify-content: left;\n        }\n    }\n\n    .prev-period-marker {\n        font-size: 12px;\n        display: inline-block;\n        padding: 1px 4px 1px 2px;\n        border-radius: 6px;\n        background-color: #F1F8E3;\n        color: #77AC06;\n        display: inline-flex;\n        align-items: center;\n\n        &.negative {\n            background-color: #FCEBE9;\n            color: #C0392B;\n        }\n\n        &.neutral {\n            background-color: #F9F9F9;\n            color: inherit;\n            padding-left: 4px;\n        }\n    }\n}\n\n.oc-dashboard {\n    [data-report-container].dragging {\n        .dashboard-report-widget {\n            .resize-handle {\n                opacity: 0;\n            }\n        }\n    }\n\n    .report-row.reordering {\n        .dashboard-report-widget {\n            .widget-inner-container {\n                box-shadow: 0 0 25px rgba(0, 0, 0, 0.11);\n            }\n        }\n    }\n\n    /* // 1200px\n    .responsive-point-1 .report-row.widgets-5 .row-widgets {\n        display: block;\n        .dashboard-report-widget {\n            width: 100%;\n        }\n    }\n\n    // 992px\n    .responsive-point-2 .report-row.widgets-4 .row-widgets {\n        display: block;\n        .dashboard-report-widget {\n            width: 100%;\n        }\n    }\n\n    // 768px\n    .responsive-point-3 .report-row.widgets-3 .row-widgets {\n        display: block;\n        .dashboard-report-widget {\n            width: 100%;\n        }\n    }\n\n    // 576px\n    .responsive-point-3 .report-row .row-widgets {\n        display: block;\n        .dashboard-report-widget {\n            width: 100%;\n        }\n    } */\n\n    /* 1200px */\n    .responsive-point-1 .report-row {\n        &.widgets-5 {\n            .row-widgets .dashboard-report-widget {\n                width: 33.3%;\n            }\n        }\n        &.widgets-4,\n        &.widgets-3 {\n            .row-widgets .dashboard-report-widget {\n                width: 50%;\n            }\n        }\n        &.widgets-2,\n        &.widgets-1 {\n            .row-widgets .dashboard-report-widget {\n                width: 100%;\n            }\n        }\n    }\n\n    /* 992px */\n    .responsive-point-2 .report-row {\n        &.widgets-4,\n        &.widgets-5 {\n            .row-widgets .dashboard-report-widget {\n                width: 50%;\n            }\n        }\n\n        &.widgets-3,\n        &.widgets-2,\n        &.widgets-1 {\n            .row-widgets .dashboard-report-widget {\n                width: 100%;\n            }\n        }\n    }\n\n    /* 768px */\n    .responsive-point-3 .report-row {\n        &.widgets-5 {\n            .row-widgets .dashboard-report-widget {\n                width: 50%;\n            }\n        }\n\n        &.widgets-4,\n        &.widgets-3,\n        &.widgets-2,\n        &.widgets-1 {\n            .row-widgets .dashboard-report-widget {\n                width: 100%;\n            }\n        }\n    }\n\n    /* 576px */\n    .responsive-point-4 .report-row {\n        &,\n        &.widgets-5,\n        &.widgets-4,\n        &.widgets-3,\n        &.widgets-2,\n        &.widgets-1 {\n            .row-widgets .dashboard-report-widget {\n                width: 100%;\n            }\n        }\n    }\n\n    .dashboard-widget-loading-pulse {\n        animation: dashboard-widget-pulse 1.5s cubic-bezier(.4,0,.6,1) infinite;\n    }\n}\n\n@keyframes dashboard-widget-pulse {\n    50% {\n        opacity: .3;\n    }\n}\n\n@keyframes board-widget-graph-animation {\n    from {\n        left: -100%;\n    }\n\n    to {\n        left: 0;\n    }\n}\n\n\n/* @deprecated with reportwidgets.less */\n.oc-dashboard .dashboard-report-widget {\n    .report-widget {\n        padding: 0;\n        h3 {\n            display: none;\n        }\n    }\n}\n\n[data-bs-theme=dark] .oc-dashboard .dashboard-report-widget .report-widget {\n    background: var(--oc-toolbar-bg);\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/css/dashboard.css",
    "content": "@import \"_daterangepicker.css\";\n@import \"_report-container.css\";\n@import \"_toolbar.css\";\n@import \"_row.css\";\n@import \"_widget.css\";\n@import \"_widget-indicator.css\";\n@import \"_widget-chart.css\";\n@import \"_widget-table.css\";\n@import \"_widget-notice.css\";\n@import \"_widget-static.css\";\n@import \"_widget-sectiontitle.css\";\n\n.oc-dashboard {\n    --oc-color-widget-skeleton:      var(--bs-secondary-color);\n    --oc-opacity-widget-skeleton:    0.5;\n    --oc-color-control-border:       #bdc3c7;\n    --oc-dashboard-max-row-widgets:  20;\n    --oc-dashboard-gap-size:         20px;\n    --oc-widget-body-padding:        17px;\n}\n\nbody.reportwidget-resize {\n    * {\n        user-select: none;\n    }\n\n    cursor: col-resize;\n}\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/dashboard-selector.js",
    "content": "export default {\n    props: {\n        store: Object,\n        embeddedInDashboard: Boolean\n    },\n    computed: {\n        canCreateAndEdit: function () {\n            return this.store.state.canCreateAndEdit;\n        },\n\n        currentDashboard: function () {\n            return this.store.getCurrentDashboard();\n        }\n    },\n    data: function () {\n        return {\n            editMenuItems: [],\n        };\n    },\n    methods: {\n        setEditMenuItems: function () {\n            this.editMenuItems = [];\n\n            this.editMenuItems.push(\n                {\n                    type: 'text',\n                    command: 'edit',\n                    label: oc.t(\"Edit Dashboard\")\n                }\n            );\n\n            if (this.store.state.canMakeDefault || this.store.state.canResetLayout) {\n                this.editMenuItems.push(\n                    {\n                        type: 'separator'\n                    }\n                );\n\n                if (this.store.state.canMakeDefault) {\n                    this.editMenuItems.push(\n                        {\n                            type: 'text',\n                            command: 'make-default',\n                            label: oc.t(\"Make Default\")\n                        }\n                    );\n                }\n\n                if (this.store.state.canResetLayout) {\n                    this.editMenuItems.push(\n                        {\n                            type: 'text',\n                            command: 'reset-layout',\n                            label: oc.t(\"Reset Layout\")\n                        }\n                    );\n                }\n            }\n\n            // {\n            //     type: 'text',\n            //     command: 'rename',\n            //     label: oc.t(\"Rename Dashboard\")\n            // },\n            // {\n            //     type: 'text',\n            //     command: 'delete',\n            //     label: oc.t(\"Delete Dashboard\")\n            // },\n            // {\n            //     type: 'text',\n            //     href: '/export/url/here' + this.store.state.dashboardCode,\n            //     target: '_blank',\n            //     label: oc.t(\"Export Dashboard\")\n            // }\n\n            if (this.store.manageUrl) {\n                this.editMenuItems.push(\n                    {\n                        type: 'separator'\n                    },\n                    {\n                        type: 'text',\n                        href: this.store.manageUrl,\n                        label: oc.t(\"Manage Dashboards\")\n                    }\n                );\n            }\n        },\n\n        onEditClick: function (ev) {\n            this.setEditMenuItems();\n            this.$refs.editMenu.showMenu(ev);\n        },\n\n        onEditMenuItemCommand: function (command) {\n            // Let the dropdown menu hide before\n            // running the next operation.\n            Vue.nextTick(() => {\n                if (command === 'edit') {\n                    this.store.startEditing();\n                    return;\n                }\n\n                if (command === 'reset-layout') {\n                    this.store.resetLayout();\n                    return;\n                }\n\n                if (command === 'make-default') {\n                    this.store.makeDefault();\n                    return;\n                }\n            })\n        },\n\n        onKeyDown: function onKeyDown(ev) {\n            if (ev.keyCode == 27) {\n                this.hideDropdown();\n            }\n        },\n    },\n    mounted: function onMounted() {\n    },\n    watch: {\n    },\n    beforeUnmount: function beforeUnmount() {\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/dashboard.js",
    "content": "export default {\n    props: {\n        store: Object\n    },\n    data: function () {\n        return {\n            saving: false\n        };\n    },\n    computed: {\n        currentDashboard: function () {\n            return this.store.getCurrentDashboard();\n        }\n    },\n    methods: {\n        async onApplyChanges() {\n            this.saving = true;\n            try {\n                await oc.ajax(this.store.getEventHandler('onSaveDashboard'), {\n                    progressBar: true,\n                    data: {\n                        _dash_definition: this.currentDashboard.code,\n                        definition: JSON.stringify(this.currentDashboard.rows)\n                    }\n                });\n\n                this.store.state.editMode = false;\n                oc.snackbar.show(oc.t(\"The dashboard was successfully updated.\"));\n            }\n            catch (err) {\n                oc.alert(err.message);\n            }\n            finally {\n                this.saving = false;\n            }\n        },\n\n        onCancelChanges: function () {\n            this.store.cancelEditing();\n        }\n    },\n    mounted: function onMounted() {\n    },\n    watch: {\n    },\n    beforeUnmount: function beforeUnmount() {\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/interval-selector.js",
    "content": "import Calendar from '../../../../assets/js/classes/calendar.js';\n\nexport default {\n    props: {\n        store: Object\n    },\n    data: function () {\n        return {\n            intervalMenuItems: [],\n            compareMenuItems: [],\n            groupingIntervalName: '',\n            compareOptionName: ''\n        }\n    },\n    computed: {\n        intervalName: function () {\n            return this.store.state.intervalName;\n        },\n\n        intervals: function () {\n            const intervalLabels = {\n                'day': oc.t(\"Day\"),\n                'week': oc.t(\"Week\"),\n                'month': oc.t(\"Month\"),\n                'quarter': oc.t(\"Quarter\"),\n                'year': oc.t(\"Year\")\n            };\n            const result = {};\n            const codes = this.store.getValidIntervalCodes();\n            codes.forEach((code) => {\n                result[code] = intervalLabels[code] || code;\n            });\n\n            return result;\n        },\n\n        compareOptions: function() {\n            const compareLabels = {\n                'totals': oc.t(\"Compare Totals\"),\n                'prev-period': oc.t(\"Prev period\"),\n                'prev-year': oc.t(\"Same period last year\"),\n                'none': oc.t(\"Disabled\")\n            };\n            const result = {};\n            const codes = this.store.getValidCompareCodes();\n            codes.forEach((code) => {\n                result[code] = compareLabels[code] || code;\n            });\n\n            return result;\n        },\n\n        rangeGroupingInterval: function () {\n            return this.store.state.range.interval;\n        },\n\n        compareOption: function () {\n            return this.store.state.compareMode;\n        }\n    },\n    methods: {\n        getStartDateObj: function () {\n            return moment(this.store.state.range.dateStart, 'YYYY-MM-DD').toDate();\n        },\n\n        setIntervalMenuItems: function () {\n            this.intervalMenuItems = [];\n\n            for (let intervalCode in this.intervals) {\n                this.intervalMenuItems.push({\n                    type: 'radiobutton',\n                    command: intervalCode,\n                    label: this.intervals[intervalCode],\n                    checked: this.store.state.range.interval === intervalCode\n                });\n            }\n        },\n\n        setCompareMenuItems: function () {\n            this.compareMenuItems = [];\n            for (let optionCode in this.compareOptions) {\n                this.compareMenuItems.push({\n                    type: 'radiobutton',\n                    command: optionCode,\n                    label: this.compareOptions[optionCode],\n                    checked: this.store.state.compareMode === optionCode\n                });\n            }\n        },\n\n        onSelectIntervalClick: function (ev) {\n            this.setIntervalMenuItems();\n            this.$refs.intervalMenu.showMenu(ev);\n        },\n\n        onSelectCompareClick: function (ev) {\n            this.setCompareMenuItems();\n            this.$refs.compareMenu.showMenu(ev);\n        },\n\n        onIntervalMenuItemCommand: function (command) {\n            this.store.setIntervalState({\n                interval: command\n            });\n        },\n\n        getEndDateObj: function () {\n            return moment(this.store.state.range.dateEnd, 'YYYY-MM-DD').toDate();\n        },\n\n        updateCalendarRange: function () {\n            var pickerControl = $(this.$refs.calendarControl).data('daterangepicker');\n            pickerControl.setStartDate(this.getStartDateObj());\n            pickerControl.setEndDate(this.getEndDateObj());\n        },\n\n        onCompareMenuItemCommand: function (command) {\n            this.store.setIntervalState({\n                compare: command\n            });\n        },\n\n        onApplyRange: function (ev, picker) {\n            this.store.setIntervalState({\n                start: picker.startDate.format('YYYY-MM-DD'),\n                end: picker.endDate.format('YYYY-MM-DD')\n            });\n        }\n    },\n    mounted: function onMounted() {\n        new Calendar(this.$refs.calendarControl, this.store.state.locale);\n        $(this.$refs.calendarControl).on('apply.daterangepicker', this.onApplyRange);\n        this.updateCalendarRange();\n    },\n    watch: {\n        intervalName: function() {\n            this.updateCalendarRange();\n        },\n        rangeGroupingInterval: {\n            immediate: true,\n            handler(value) {\n                Vue.nextTick(() => {\n                    const interval = this.intervals[value];\n                    if (interval) {\n                        this.groupingIntervalName = interval;\n                    }\n                })\n            }\n        },\n        compareOption: {\n            immediate: true,\n            handler(value) {\n                Vue.nextTick(() => {\n                    const option = this.compareOptions[value];\n                    if (option) {\n                        this.compareOptionName = option;\n                    }\n                })\n            }\n        }\n    },\n    beforeUnmount: function beforeUnmount() {\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/report-diff.js",
    "content": "import DataHelper from '../../../../assets/js/classes/data-helper.js';\n\nexport default {\n    props: {\n        prevValue: Number,\n        currentValue: Number,\n        formattingOptions: Object,\n        store: Object\n    },\n    methods: {\n        formatValue: function (value) {\n            return DataHelper\n                .instance()\n                .formatValue(\n                    value,\n                    this.formattingOptions,\n                    this.store.state.locale\n                );\n        }\n    },\n    computed: {\n        diff: function () {\n            return this.currentValue - this.prevValue;\n        },\n\n        diffFormattedAbs: function () {\n            return this.formatValue(Math.abs(this.diff));\n        },\n\n        diffFormatted: function () {\n            return this.formatValue(this.diff);\n        }\n    },\n    mounted: function mounted() {\n    },\n    beforeUnmount: function beforeUnmount() {\n    },\n    watch: {\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/report-row.js",
    "content": "import WidgetManager from '../../../../assets/js/classes/widget-manager.js';\nimport Dragging from '../../../../assets/js/classes/dragging.js';\nimport Sizing from '../../../../assets/js/classes/sizing.js';\nimport Reordering from '../../../../assets/js/classes/reordering.js';\n\nexport default {\n    props: {\n        row: Object,\n        rows: Array,\n        store: Object,\n        rowIndex: Number\n    },\n    data: function () {\n        return {\n            addWidgetItems: [],\n            menuItems: [],\n            widgetManager: null,\n            dashboardDragging: null,\n            dashboardSizing: null,\n            dashboardReordering: null\n        };\n    },\n    methods: {\n        makeAddWidgetsMenuItems: function (result) {\n            const defaultConfigs = this.store.state.defaultWidgetConfigs;\n            const widgetTypes = this.store.getAvailableWidgetTypes();\n\n            widgetTypes.forEach((widgetType) => {\n                if (widgetType.type in defaultConfigs) {\n                    const typeConfigs = defaultConfigs[widgetType.type];\n                    const widgetTypeItems = [];\n                    widgetTypeItems.push({\n                        type: 'text',\n                        disabled: !this.addWidgetEnabled || (this.hasWidgets && widgetType.fullWidth),\n                        command: {\n                            command: 'add-widget',\n                            type: widgetType.type\n                        },\n                        label: oc.t(\"Custom\")\n                    });\n\n                    widgetTypeItems.push({\n                        type: 'separator'\n                    });\n\n                    Object.keys(typeConfigs).forEach((dsName) => {\n                        const dimensions = typeConfigs[dsName];\n                        const dimensionItems = [];\n                        dimensions.forEach((dimensionInfo) => {\n                            dimensionItems.push({\n                                type: 'text',\n                                command: {\n                                    command: 'add-widget',\n                                    type: widgetType.type,\n                                    config: dimensionInfo.config,\n                                    fullWidth: widgetType.fullWidth\n                                },\n                                label: dimensionInfo.dimension\n                            });\n                        });\n\n                        widgetTypeItems.push({\n                            type: 'text',\n                            label: dsName,\n                            items: dimensionItems\n                        });\n                    });\n\n                    result.push({\n                        type: 'text',\n                        disabled: !this.addWidgetEnabled,\n                        items: widgetTypeItems,\n                        label: widgetType.label\n                    });\n                }\n                else {\n                    result.push({\n                        type: 'text',\n                        disabled: !this.addWidgetEnabled || (this.hasWidgets && widgetType.fullWidth),\n                        command: {\n                            command: 'add-widget',\n                            type: widgetType.type,\n                            fullWidth: widgetType.fullWidth\n                        },\n                        label: widgetType.label\n                    });\n                }\n            });\n\n            const customGroupNames = Object.keys(this.store.state.customWidgetGroups);\n            customGroupNames.forEach(groupName => {\n                const groupWidgets = this.store.state.customWidgetGroups[groupName];\n\n                const groupItems = [];\n                groupWidgets.forEach(widgetData => {\n                    groupItems.push({\n                        type: 'text',\n                        disabled: !this.addWidgetEnabled,\n                        command: {\n                            command: 'add-widget',\n                            type: widgetData.type,\n                            config: {\n                                widgetClass: widgetData.widgetClass,\n                                componentName: widgetData.componentName\n                            }\n                        },\n                        label: widgetData.label\n                    });\n                });\n\n                result.push({\n                    type: 'text',\n                    label: groupName,\n                    items: groupItems\n                });\n            });\n        },\n\n        makeAddWidgetsMenu: function () {\n            this.addWidgetItems = [];\n            this.makeAddWidgetsMenuItems(this.addWidgetItems);\n        },\n\n        makeMenuItems: function () {\n            this.menuItems = []\n            this.makeAddWidgetsMenuItems(this.menuItems);\n            this.menuItems.push({\n                type: 'separator'\n            });\n\n            this.menuItems.push({\n                type: 'text',\n                command: 'delete',\n                label: oc.t(\"Delete row\")\n            });\n        },\n\n        onMenuItemCommand: function (command) {\n            // Let the context menu hide before deleting the row\n            Vue.nextTick(() => {\n                if (typeof command === 'object' && command.command === 'add-widget') {\n                    this.widgetManager.createWidget(this.store, this.rows, this.row, command.type, command.config, command.fullWidth);\n                }\n\n                if (command === 'delete') {\n                    this.$emit('deleteRow');\n                }\n            });\n        },\n\n        onContextMenu: function (ev) {\n            ev.preventDefault();\n            if (this.$el.classList.contains('reordering')) {\n                return;\n            }\n\n            this.makeMenuItems();\n            this.$refs.menu.showMenu(ev);\n        },\n        onDrop: function (ev) {\n            this.dashboardDragging.onDrop(ev);\n        },\n        onDragEnd: function (ev) {\n            this.dashboardDragging.onDragEnd(this.$el);\n        },\n        onDragOver: function (ev) {\n            this.dashboardDragging.onDragOverRow(ev, this.row);\n        },\n        onRowButtonMouseDown: function (ev) {\n            this.dashboardReordering.onMouseDown(ev, this.row, this.rows);\n        },\n        onAddWidgetClick: function (ev) {\n            ev.preventDefault();\n            this.makeAddWidgetsMenu();\n            this.$refs.addWidgetMenu.showMenu(ev);\n        },\n        onAddWidgetMenuItemCommand: function (command) {\n            if (typeof command === 'object' && command.command === 'add-widget') {\n                this.widgetManager.createWidget(this.store, this.rows, this.row, command.type, command.config, command.fullWidth);\n            }\n        }\n    },\n    computed: {\n        systemFlags: function () {\n            return this.store.state.systemDataFlags[this.row._unique_key];\n        },\n\n        cssClass: function () {\n            const result = [];\n\n            if (this.row.settings && this.row.settings.equal_height_widgets) {\n                result.push('equal-height-widgets');\n            }\n\n            if (this.row.widgets) {\n                result.push(!this.row.widgets.length ? 'no-widgets' : 'widgets-' + this.row.widgets.length);\n            }\n\n            if (this.systemFlags && this.systemFlags.widgetDoesntFit) {\n                result.push('widget-doesnt-fit-animation');\n            }\n\n            return result.join(' ');\n        },\n\n        addWidgetEnabled: function () {\n            return this.dashboardSizing.canFitNewMinSizeWidget(this.row.widgets);\n        },\n\n        hasWidgets: function () {\n            return !!this.row.widgets.length;\n        }\n    },\n    mounted: function mounted() {\n        this.widgetManager = WidgetManager.instance();\n        this.dashboardDragging = Dragging.instance();\n        this.dashboardSizing = Sizing.instance();\n        this.dashboardReordering = Reordering.instance();\n    },\n    beforeUnmount: function beforeUnmount() {\n        this.widgetManager = null;\n        this.dashboardDragging = null;\n        this.dashboardSizing = null;\n        this.dashboardReordering = null;\n    },\n    watch: {\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/report-widget.js",
    "content": "import Sizing from '../../../../assets/js/classes/sizing.js';\nimport Dragging from '../../../../assets/js/classes/dragging.js';\nimport { host as inspectorHost } from '../../../../../backend/vuecomponents/inspector/assets/js/classes/index.js';\n\nconst dashboardSizing = Sizing.instance();\nconst dashboardDragging = Dragging.instance();\n\nexport default {\n    props: {\n        widget: Object,\n        store: Object,\n        row: Object,\n        rows: Array,\n        widgetIndexInRow: Number,\n        rowIndex: Number\n    },\n    data: function () {\n        return {\n            loadingPromises: [],\n            loading: true,\n            autoUpdating: false,\n            error: false,\n            noData: false,\n            menuItems: [],\n            autoUpdateTimerId: null,\n\n            // Resizing\n            columnsAvailableForWidget: null,\n            columnWidth: null,\n            initialWidth: null,\n            initialHandlePos: null\n        }\n    },\n    methods: {\n        cancelLoading: function () {\n            this.loadingPromises.forEach(function (tracker) {\n                tracker.cancelled = true;\n            });\n            this.loadingPromises = [];\n        },\n        hasActiveLoadingPromise: function () {\n            return this.loadingPromises.some(function (tracker) {\n                return tracker.pending;\n            });\n        },\n        load: function (resetCache) {\n            const widgetImplementation = this.$refs.widgetImplementation;\n            if (!widgetImplementation) {\n                return;\n            }\n\n            if (!widgetImplementation.useCustomData() && !widgetImplementation.isConfigured) {\n                return;\n            }\n\n            this.stopAutoUpdate();\n\n            const extraData = widgetImplementation.getRequestExtraData();\n\n            this.cancelLoading();\n            this.loading = true;\n            this.error = false;\n            const range = this.store.state.range;\n            const widgetConfiguration = $.oc.vueUtils.getCleanObject(this.widget.configuration);\n            widgetImplementation.extendConfigurationBeforeDataFetch(widgetConfiguration);\n            let compare = this.store.state.compareMode;\n            if (compare === 'none') {\n                compare = undefined;\n            }\n\n            const aggregationInterval = widgetImplementation.getRequestInterval(range.interval);\n\n            let loadingPromise = null;\n            if (widgetConfiguration.type === 'static') {\n                loadingPromise = this.store.dataSource.loadStaticContent(\n                    this.store.state.range,\n                    aggregationInterval,\n                    widgetConfiguration,\n                    resetCache ? 1 : 0,\n                    extraData,\n                    compare\n                );\n            }\n            else if (!widgetImplementation.useCustomData()) {\n                loadingPromise = this.store.dataSource.loadData(\n                    this.store.state.range,\n                    aggregationInterval,\n                    widgetImplementation.getRequestDimension(),\n                    widgetImplementation.getRequestMetrics(),\n                    widgetConfiguration,\n                    resetCache ? 1 : 0,\n                    extraData,\n                    compare\n                );\n            }\n            else {\n                loadingPromise = this.store.dataSource.loadCustomData(\n                    this.store.state.range,\n                    aggregationInterval,\n                    widgetConfiguration,\n                    resetCache ? 1 : 0,\n                    extraData,\n                    compare\n                );\n            }\n\n            const tracker = { pending: true, cancelled: false };\n            this.loadingPromises.push(tracker);\n\n            loadingPromise\n                .then((data) => {\n                    if (!tracker.cancelled) {\n                        this.applyData(data);\n                        if (widgetConfiguration.auto_update) {\n                            this.startAutoUpdate();\n                        }\n                    }\n                })\n                .catch((err) => {\n                    if (!tracker.cancelled) {\n                        console.error(err);\n                        this.error = true;\n                    }\n                })\n                .finally(() => {\n                    tracker.pending = false;\n                    if (!tracker.cancelled) {\n                        this.autoUpdating = false;\n                        this.loading = this.hasActiveLoadingPromise();\n                        this.showInspectorWhenLoaded();\n                    }\n                });\n        },\n        applyData: function (data) {\n            const state = this.store.state;\n            const dashboard = this.store.getCurrentDashboard();\n            const dashboardKey = dashboard._unique_key;\n            if (dashboardKey === undefined) {\n                throw new Error(\"Dashboard unique key is undefined\");\n            }\n\n            if (state.widgetData[dashboardKey] === undefined) {\n                // Vue 3: Direct assignment is reactive\n                state.widgetData[dashboardKey] = {};\n            }\n\n            // Vue 3: Direct assignment is reactive\n            state.widgetData[dashboardKey][this.widget._unique_key] = data;\n        },\n        makeMenuItems: function () {\n            const widgetImplementation = this.$refs.widgetImplementation;\n            this.menuItems = [];\n            if (widgetImplementation) {\n                this.menuItems.push({\n                    type: 'text',\n                    command: 'configure',\n                    label: oc.t(\"Configure\")\n                });\n            }\n\n            this.menuItems.push({\n                type: 'text',\n                command: 'delete',\n                label: oc.t(\"Delete\")\n            });\n        },\n        showInspectorWhenLoaded() {\n            if (this.systemFlags && this.systemFlags.needsConfiguration) {\n                this.store.unsetSystemDataFlag(this.widget, 'needsConfiguration');\n                const widgetImplementation = this.$refs.widgetImplementation;\n\n                if (widgetImplementation) {\n                    widgetImplementation.makeDefaultConfigAndData();\n\n                    this.showInspector();\n                }\n            }\n        },\n        showInspector: function () {\n            const dataHolder = this.widget.configuration;\n            const widgetImplementation = this.$refs.widgetImplementation;\n\n            dataHolder['_dash_definition'] = this.store.getCurrentDashboard().code;\n\n            inspectorHost\n                .showModal(\n                    oc.t(\"Configure\"),\n                    dataHolder,\n                    widgetImplementation.getSettingsConfiguration(),\n                    'widget-configuration',\n                    {\n                        handlerAlias: this.store.state.alias,\n                        buttonText: oc.t(\"Apply\"),\n                        resizableWidth: true\n                    }\n                )\n                .then($.noop, $.noop);\n        },\n        isComponentRegistered: function(componentName) {\n            return !!Vue.options.components[componentName];\n        },\n        isKnownWidgetType: function(widgetType) {\n            return [\n                'static',\n                'indicator',\n                'chart',\n                'table',\n                'notice',\n                'section-title',\n                'widget'\n            ].includes(widgetType);\n        },\n        startAutoUpdate: function() {\n            this.autoUpdateTimerId = setTimeout(() => {\n                this.autoUpdating = true;\n                this.load();\n            }, 1000);\n        },\n        stopAutoUpdate: function() {\n            if (this.autoUpdateTimerId !== null) {\n                clearTimeout(this.autoUpdateTimerId);\n                this.autoUpdateTimerId = null;\n            }\n        },\n        onHandleMouseDown: function(ev) {\n            this.columnsAvailableForWidget = dashboardSizing.calculateColumnsAvailableForWidget(\n                this.row.widgets,\n                this.widgetIndexInRow\n            );\n\n            const rowElement = $(this.$el).closest('[data-report-row]').get(0);\n            this.columnWidth = dashboardSizing.calculateColumnWidth(rowElement);\n            this.initialWidth = this.widget.width;\n            this.initialHandlePos = $(this.$refs.resizeHandle).offset().left;\n\n            $(document.body).addClass('reportwidget-resize');\n\n            document.addEventListener('mousemove', this.onHandleMouseMove, { passive: true });\n            document.addEventListener('mouseup', this.onHandleMouseUp);\n        },\n        onHandleMouseMove: function(ev) {\n            if (ev.buttons != 1) {\n                // Handle the case when the button was released\n                // outside of the viewport. mouseup doesn't fire\n                // in that case.\n                //\n                this.onHandleMouseUp();\n            }\n\n            const delta = ev.pageX - this.initialHandlePos;\n            const sign = delta < 0 ? -1 : 1;\n            const deltaInColumns = Math.floor(Math.abs(delta) / this.columnWidth) * sign;\n\n            if (Math.abs(deltaInColumns) > 0) {\n                const newWidth = Math.min(this.columnsAvailableForWidget, Math.max(dashboardSizing.minWidth, this.initialWidth + deltaInColumns));\n                this.row.widgets[this.widgetIndexInRow].width = newWidth;\n\n                Vue.nextTick(() => {\n                    this.initialHandlePos = $(this.$refs.resizeHandle).offset().left;\n                    this.initialWidth = newWidth;\n                });\n            }\n\n        },\n        onHandleMouseUp: function () {\n            document.removeEventListener('mousemove', this.onHandleMouseMove, { passive: true });\n            document.removeEventListener('mouseup', this.onHandleMouseUp);\n\n            $(document.body).removeClass('reportwidget-resize');\n        },\n        onDragStart: function (ev) {\n            if (this.loading || !this.store.state.editMode) {\n                ev.preventDefault();\n                return;\n            }\n\n            dashboardDragging.onDragStart(ev, this.widget, this.widgetIndexInRow, this.rows, this.row);\n        },\n        onDragOver: function (ev) {\n            dashboardDragging.onDragOverWidget(ev, this.widgetIndexInRow, this.row);\n        },\n        onDragEnd: function (ev) {\n            dashboardDragging.onDragEnd(ev, this.rows);\n        },\n        onDrop: function (ev) {\n            dashboardDragging.onDrop(ev);\n        },\n        onClick: function (ev) {\n            if (this.store.state.editMode) {\n                ev.preventDefault();\n            }\n        },\n        onContextMenu: function (ev) {\n            this.makeMenuItems();\n            ev.preventDefault();\n            this.$refs.menu.showMenu(ev);\n        },\n        onMenuItemCommand: function (command) {\n            if (command === 'configure') {\n                this.showInspector();\n                return;\n            }\n\n            if (command === 'delete') {\n                this.row.widgets.splice(this.widgetIndexInRow, 1);\n                return;\n            }\n        },\n    },\n    computed: {\n        loadedValue: function () {\n            return this.store.getWidgetDataForDashboard(\n                this.store.getCurrentDashboard(),\n                this.widget._unique_key\n            );\n        },\n\n        systemFlags: function () {\n            return this.store.state.systemDataFlags[this.widget._unique_key];\n        },\n\n        configuration: function () {\n            return this.widget.configuration;\n        },\n\n        width: function () {\n            if (this.isFrameless) {\n                return dashboardSizing.totalColumns;\n            }\n\n            return this.widget.width;\n        },\n\n        isFrameless: function () {\n            return this.widget.configuration.type === 'section-title';\n        },\n\n        cssClass: function () {\n            let result = [\n                'fixed-width-' + this.width\n            ];\n\n            if (this.widget.configuration.reportName) {\n                result.push(this.widget.configuration.reportName);\n            }\n\n            if (this.store.state.editMode) {\n                result.push('edit-mode');\n            }\n\n            if (this.systemFlags && this.systemFlags.dragged) {\n                result.push('dragged')\n            }\n\n            if (this.isFrameless) {\n                result.push('frameless');\n            }\n\n            return result;\n        },\n\n        editMode: function () {\n            return this.store.state.editMode;\n        },\n\n        rangeInterval: function () {\n            return this.store.state.range.dateStart +\n                this.store.state.range.dateEnd +\n                this.store.state.compareMode;\n        },\n\n        rangeGroupInterval: function () {\n            return this.store.state.range.interval;\n        }\n    },\n    mounted: function mounted() {\n        // Widgets are dragged together with their data.\n        // No need to reload the widget if its data is\n        // already loaded.\n        if (this.loadedValue === undefined) {\n            this.load();\n        }\n        else {\n            this.showInspectorWhenLoaded();\n            this.loading = false;\n        }\n    },\n    beforeUnmount: function beforeUnmount() {\n        this.stopAutoUpdate();\n    },\n    watch: {\n        configuration: {\n            handler(newVal, oldVal) {\n                const widgetImplementation = this.$refs.widgetImplementation;\n                widgetImplementation.onConfigurationUpdated();\n\n                this.load();\n            },\n            deep: true\n        },\n\n        rangeInterval: function () {\n            if (!this.loading) {\n                this.load();\n            }\n        },\n\n        rangeGroupInterval: function () {\n            const widgetImplementation = this.$refs.widgetImplementation;\n            if (widgetImplementation.reloadOnGroupIntervalChange()) {\n                this.load();\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/report.js",
    "content": "import Helpers from '../../../../assets/js/classes/helpers.js';\nimport Dragging from '../../../../assets/js/classes/dragging.js';\n\nexport default {\n    props: {\n        rows: Array,\n        store: Object\n    },\n    methods: {\n        onAddRowClick: function () {\n            const uniqueKey = Helpers\n                .instance()\n                .makeUniqueKey(this.rows);\n\n            this.rows.push({\n                _unique_key: uniqueKey,\n                widgets: []\n            });\n        },\n\n        onDeleteRow: function (index) {\n            this.rows.splice(index, 1);\n        }\n    },\n    data: function () {\n        return {\n            rowCounter: 0,\n            activeResponsivePoints: [],\n            responsivePoints: null,\n            resizeObserver: null\n        }\n    },\n    computed: {\n        cssClass: function () {\n            const result = [];\n\n            if (this.store.state.editMode) {\n                result.push('edit-mode');\n            }\n            else {\n                this.activeResponsivePoints.forEach((value) => {\n                    result.push('responsive-point-' + value);\n                });\n            }\n\n            return result;\n        }\n    },\n    mounted: function mounted() {\n        Dragging\n            .instance()\n            .setStore(this.store);\n\n        this.responsivePoints = {\n            1200: 1,\n            992: 2,\n            768: 3,\n            576: 4\n        };\n\n        this.resizeObserver = new ResizeObserver(entries => {\n            for (let entry of entries) {\n                const { width } = entry.contentRect;\n                this.activeResponsivePoints.splice(0);\n                Object.keys(this.responsivePoints).forEach((pointWidth) => {\n                    if (pointWidth >= width) {\n                        this.activeResponsivePoints.push(this.responsivePoints[pointWidth]);\n                    }\n                });\n            }\n        });\n\n        this.resizeObserver.observe(this.$el);\n    },\n    beforeUnmount: function beforeUnmount() {\n        if (this.resizeObserver) {\n            this.resizeObserver.disconnect();\n        }\n\n        this.resizeObserver = null;\n        this.responsivePoints = null;\n    },\n    watch: {}\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/widget-base.js",
    "content": "import DataHelper from '../../../../assets/js/classes/data-helper.js';\nimport InspectorConfigurator from '../../../../assets/js/classes/inspector-configurator.js';\n\nexport default {\n    props: {\n        error: Boolean,\n        widget: Object,\n        store: Object,\n        loading: Boolean,\n        autoUpdating: Boolean\n    },\n    computed: {\n        isConfigured: function () {\n            return !!this.widget.configuration.dataSource;\n        },\n\n        loadedValue: function () {\n            return this.fullWidgetData ? this.fullWidgetData.current.widget_data : undefined;\n        },\n\n        totalRecords: function () {\n            return this.fullWidgetData ? this.fullWidgetData.current.total_records : 0;\n        },\n\n        loadedValuePrev: function () {\n            return this.fullWidgetData && this.fullWidgetData.previous\n                ? this.fullWidgetData.previous.widget_data\n                : undefined;\n        },\n\n        metricsData: function () {\n            return this.fullWidgetData ? this.fullWidgetData.metrics_data : undefined;\n        },\n\n        dimensionFieldsData: function () {\n            return this.fullWidgetData ? this.fullWidgetData.dimension_fields_data : undefined;\n        },\n\n        metricsTotals: function () {\n            return this.fullWidgetData ? this.fullWidgetData.current.metric_totals : undefined;\n        },\n\n        metricsTotalsPrev: function () {\n            return this.fullWidgetData && this.fullWidgetData.previous\n                ? this.fullWidgetData.previous.metric_totals\n                : undefined;\n        },\n\n        metricsTotalsFormatted: function () {\n            return this.fullWidgetData ? this.fullWidgetData.current.metric_totals_formatted : undefined;\n        },\n\n        metricsTotalsFormattedPrev: function () {\n            return this.fullWidgetData && this.fullWidgetData.previous\n                ? this.fullWidgetData.previous.metric_totals_formatted\n                : undefined;\n        },\n\n        dimensionData: function () {\n            return this.fullWidgetData ? this.fullWidgetData.dimension_data : undefined;\n        },\n\n        fullWidgetData: function () {\n            return this.store.getWidgetDataForDashboard(\n                this.store.getCurrentDashboard(),\n                this.widget._unique_key\n            );\n        },\n\n        configuration: function () {\n            return this.widget.configuration;\n        },\n\n        showMetricsTotalRow: function () {\n            if (!this.configuration.metrics) {\n                return;\n            }\n\n            let result = false;\n            this.configuration.metrics.forEach(metricConfig => {\n                if (metricConfig.displayTotals) {\n                    result = true;\n                }\n            });\n\n            return result;\n        },\n\n        explicitLoading: function () {\n            return this.loading && !this.autoUpdating;\n        }\n    },\n    methods: {\n        runDataSourceHandler(handlerName, extraData = {}) {\n            const widgetConfiguration = $.oc.vueUtils.getCleanObject(this.widget.configuration);\n            this.extendConfigurationBeforeDataFetch(widgetConfiguration);\n\n            return this.store.dataSource.runDataSourceHandler(handlerName, widgetConfiguration, extraData);\n        },\n\n        request(handlerName, extraData = {}) {\n            const widgetConfiguration = $.oc.vueUtils.getCleanObject(this.widget.configuration);\n            this.extendConfigurationBeforeDataFetch(widgetConfiguration);\n\n            return this.store.dataSource.runCustomWidgetHandler(handlerName, widgetConfiguration, extraData);\n        },\n\n        getRequestDimension: function () {\n            throw new Error('getRequestDimension is not implemented');\n        },\n\n        getRequestMetrics: function () {\n            throw new Error('getRequestMetrics is not implemented');\n        },\n\n        getRequestInterval: function (defaultInterval) {\n            return defaultInterval;\n        },\n\n        extendConfigurationBeforeDataFetch: function (widgetConfiguration) {},\n\n        getWidgetDataForMetricPeriod: function (metricCode, defaultValue, prefix, periodData) {\n            if (!this.widget || !Array.isArray(periodData) || periodData.length < 1) {\n                return defaultValue;\n            }\n\n            let result = periodData[0]['oc_metric_' + metricCode];\n            if (prefix) {\n                result = prefix + result;\n            }\n\n            return result;\n        },\n\n        getWidgetDataForMetric: function (metricCode, defaultValue, prefix) {\n            return this.getWidgetDataForMetricPeriod(metricCode, defaultValue, prefix, this.loadedValue);\n        },\n\n        getWidgetDataForMetricPrev: function (metricCode, defaultValue, prefix) {\n            return this.getWidgetDataForMetricPeriod(metricCode, defaultValue, prefix, this.loadedValuePrev);\n        },\n\n        getDimensionFieldName: function (dimensionFieldCode) {\n            if (!this.dimensionFieldsData) {\n                return \"\";\n            }\n\n            return this.dimensionFieldsData[dimensionFieldCode];\n        },\n\n        getDimensionFieldValue: function (record, dimensionFieldCode) {\n            return record[dimensionFieldCode];\n        },\n\n        reloadOnGroupIntervalChange: function () {\n            return false;\n        },\n\n        getRequestExtraData: function () {\n            return {\n                current_page: 0\n            };\n        },\n\n        getSettingsConfiguration: function () {\n            throw new Error('getSettingsConfiguration is not implemented');\n        },\n\n        useCustomData: function () {\n            return false;\n        },\n\n        makeDefaultConfigAndData: function () {\n            throw new Error('makeDefaultConfigAndData is not implemented');\n        },\n\n        getMetricTotalClean: function (metricCode, prevPeriod = false) {\n            const totals = prevPeriod ? this.metricsTotalsPrev : this.metricsTotals;\n\n            if (!totals || totals[metricCode] === null || totals[metricCode] === undefined) {\n                return null;\n            }\n\n            return parseFloat(totals[metricCode]);\n        },\n\n        formatMetricValue: function (metricCode, value) {\n            return DataHelper\n                .instance()\n                .formatValue(\n                    value,\n                    this.getMetricIntlFormatOptions(metricCode),\n                    this.store.state.locale\n                );\n        },\n\n        getMetricTotal: function (metricCode, prevPeriod = false) {\n            const total = this.getMetricTotalClean(metricCode, prevPeriod);\n            if (total === null) {\n                return null;\n            }\n\n            return this.formatMetricValue(metricCode, total);\n        },\n\n        /**\n         * Gets the formatted total for a metric, preferring server-side formatted values.\n         * Use this for non-graph displays (tables, indicators) where custom formatting may be needed.\n         */\n        getMetricTotalFormatted: function (metricCode, prevPeriod = false) {\n            const total = this.getMetricTotalClean(metricCode, prevPeriod);\n            if (total === null) {\n                return null;\n            }\n\n            const formattedTotals = prevPeriod ? this.metricsTotalsFormattedPrev : this.metricsTotalsFormatted;\n            const formattedValue = formattedTotals ? formattedTotals[metricCode] : undefined;\n\n            return DataHelper\n                .instance()\n                .formatDisplayValue(\n                    total,\n                    formattedValue,\n                    this.getMetricIntlFormatOptions(metricCode),\n                    this.store.state.locale\n                );\n        },\n\n        /**\n         * Checks if a metric has a server-side display formatter.\n         */\n        metricHasDisplayFormatter: function (metricCode) {\n            if (!this.metricsData) {\n                return false;\n            }\n\n            const metric = this.metricsData[metricCode];\n            return metric ? !!metric.has_display_formatter : false;\n        },\n\n        /**\n         * Formats a record's metric value, preferring server-side formatted values.\n         * Use this for table displays where custom formatting may be needed.\n         */\n        formatRecordMetricValue: function (metricCode, record) {\n            const columnName = 'oc_metric_' + metricCode;\n            const formattedColumnName = columnName + '_formatted';\n            const value = record[columnName];\n            const formattedValue = record[formattedColumnName];\n\n            return DataHelper\n                .instance()\n                .formatDisplayValue(\n                    value,\n                    formattedValue,\n                    this.getMetricIntlFormatOptions(metricCode),\n                    this.store.state.locale\n                );\n        },\n\n        getMetricIntlFormatOptions: function (metricCode) {\n            if (!this.metricsData) {\n                return;\n            }\n\n            const metric = this.metricsData[metricCode];\n            if (!metric) {\n                return undefined;\n            }\n\n            return metric.format_options;\n        },\n\n        makeRandomWidth: function () {\n            return Math.floor((0.3 + Math.random()*0.3) * 100) + '%';\n        },\n\n        // @deprecated\n        trans(key) {\n            const fullKey = 'data-lang-' + key;\n            const result = this.$el.getAttribute(fullKey);\n            if (typeof result === 'string') {\n                return result;\n            }\n\n            const parent = this.$el.closest('[data-report-widget]');\n            if (parent) {\n                return parent.getAttribute(fullKey);\n            }\n\n            return null;\n        },\n\n        addTitleConfigurationProp: function (configuration, optional) {\n            const prop = {\n                property: 'title',\n                title: oc.t(\"Title\"),\n                type: 'string'\n            };\n\n            if (!optional) {\n                prop.validation = {\n                    required: {\n                        message: oc.t(\"Please provide the widget title\"),\n                    }\n                }\n            }\n            else {\n                prop.placeholder = oc.t(\"Leave empty to hide the title\")\n            }\n\n            configuration.push(prop);\n        },\n\n        addDataSourceProps: function (configuration, tab, allowedDimensionTypes) {\n            const configurator = new InspectorConfigurator(this.$el, this.trans, this.store);\n            configurator.defineDataSource(configuration, tab, allowedDimensionTypes);\n        },\n\n        addDataSourceConfigurationProps: function(configuration, filter = [], suppress = []) {\n            const configurator = new InspectorConfigurator(this.$el, this.trans, this.store);\n            configurator.defineDataSourceProperties(configuration, filter, suppress);\n        },\n\n        getConfigurationPropIndex: function(configuration, propertyName) {\n            return configuration.findIndex(obj => obj.property === propertyName);\n        },\n\n        findConfigurationProp: function(configuration, propertyName) {\n            const index = this.getConfigurationPropIndex(configuration, propertyName)\n            if (index !== -1) {\n                return configuration[index];\n            }\n\n            return null;\n        },\n\n        onConfigurationUpdated: function() {},\n\n        addConfigurationPropAfter: function(configuration, afterProperty, propConfiguration) {\n            const index = this.getConfigurationPropIndex(configuration, afterProperty)\n\n            if (index !== -1) {\n                configuration.splice(index + 1, 0, propConfiguration);\n            } else {\n                throw new Error('Property ' + afterProperty + ' not found in the Inspector configuration');\n            }\n        },\n\n        addConfigurationPropBefore: function(configuration, beforeProperty, propConfiguration) {\n            const index = this.getConfigurationPropIndex(configuration, beforeProperty)\n\n            if (index !== -1) {\n                configuration.splice(index, 0, propConfiguration);\n            } else {\n                throw new Error('Property ' + afterProperty + ' not found in the Inspector configuration');\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/widget-chart.js",
    "content": "import DataHelper from '../../../../assets/js/classes/data-helper.js';\nimport WidgetBase from './widget-base.js';\n\nconst dataHelper = DataHelper.instance();\n\nfunction formatInterval(interval, date) {\n    if (interval === 'month') {\n        return date.format('MMM, YYYY');\n    }\n\n    if (interval === 'quarter') {\n        return date.format('[Q]Q YYYY');\n    }\n\n    if (interval === 'year') {\n        return date.format('YYYY');\n    }\n\n    return date.format('MMM D, YYYY');\n}\n\nexport default {\n    extends: WidgetBase,\n    data: function () {\n        return {\n            chart: null,\n            lastGroupInterval: null\n        }\n    },\n    methods: {\n        getChartConfig: function () {\n            const theme = $('html').data('bs-theme');\n            const axisColor = theme === 'dark' ? '#6C757D' : '#E3EAEC';\n\n            const interval = this.store.state.range.interval;\n            const isDateDimension = this.configuration.dimension === 'date';\n            let xAxisType = isDateDimension ? 'time' : 'category';\n            // if (isDateDimension && this.store.state.range.interval !== 'day') {\n                xAxisType = 'category';\n            // }\n\n            const reverseXAxis = xAxisType === 'time' &&\n                this.configuration.sortBy === 'oc_dimension' &&\n                this.configuration.sortOrder === 'desc';\n\n            const metricsData = this.metricsData;\n            const chartType = this.configuration.chartType;\n            const barChartType = chartType === 'bar' || chartType === 'stacked-bar';\n            let chartJsType = 'line';\n            if (barChartType) {\n                chartJsType = 'bar';\n            }\n\n            let indexAxis = 'x';\n            if (barChartType && this.configuration.barDirection === 'horizontal') {\n                indexAxis = 'y';\n            }\n\n            const metrics = this.getRequestMetrics();\n            const datasets = [];\n\n            metrics.forEach(metric => {\n                const metricConfiguration = this.getMetricConfigurationByCode(metric);\n                const lineColor = metricConfiguration ? metricConfiguration.color : '#6A6CF7';\n                const bgColor = barChartType ? lineColor : dataHelper.hexToRgbaBackground(lineColor);\n\n                datasets.push({\n                    axis: indexAxis,\n                    data: [],\n                    label: metricsData[metric].label,\n                    pointBackgroundColor: lineColor,\n                    backgroundColor: bgColor,\n                    borderColor: lineColor,\n                    tension: 0.3,\n                    formatting: this.getMetricIntlFormatOptions(metric)\n                });\n            })\n\n            const result = {\n                type: chartJsType,\n                data: {\n                    labels: [],\n                    datasets: datasets\n                },\n                options: {\n                    indexAxis: indexAxis,\n                    datasets: {\n                        line: {\n                            fill: true,\n                            pointRadius: 2,\n                            borderWidth: 2,\n                            spanGaps: true,\n                        },\n                        bar: {\n                            borderRadius: 5,\n                            borderWidth: 1,\n                        }\n                    },\n                    maintainAspectRatio: false,\n                    animation: false,\n                    responsive: true,\n                    layout: {\n                        padding: {\n                            top: 30\n                        }\n                    },\n                    plugins: {\n                        legend: {\n                            display: false\n                        },\n                        tooltip: {\n                            cornerRadius: 2,\n                            callbacks: {\n                                title: function (tooltipItem) {\n                                    if (isDateDimension) {\n                                        return formatInterval(interval, moment(tooltipItem[0].label));\n                                    }\n\n                                    return tooltipItem[0].label;\n                                },\n                                labelColor: function(tooltipItem, chart) {\n                                    return {\n                                        borderWidth: 0,\n                                        backgroundColor: datasets[tooltipItem.datasetIndex].borderColor,\n                                        borderRadius: 2\n                                    };\n                                },\n                                label: (context) => {\n                                    // Never display a label for null values.\n                                    if (!context.parsed.y) {\n                                        return null\n                                    }\n\n                                    let label = context.dataset.label || '';\n                                    if (label) {\n                                        label += ': ';\n                                    }\n\n                                    const valueAxis = indexAxis === 'x' ? 'y' : 'x';\n                                    const formattedValue = context.dataset.formattedData\n                                        ? context.dataset.formattedData[context.dataIndex]\n                                        : null;\n\n                                    label += dataHelper.formatDisplayValue(\n                                        context.parsed[valueAxis],\n                                        formattedValue,\n                                        context.dataset.formatting,\n                                        this.store.state.locale\n                                    )\n\n                                    return label;\n                                }\n                            }\n                        }\n                    },\n                    scales: {\n                        x: {\n                            border: {\n                                color: axisColor,\n                                dash: [2, 2]\n                            },\n                            time: {\n                                parser: 'YYYY-MM-DD',\n                                displayFormats: {\n                                    day: 'MMM D, YYYY'\n                                }\n                            },\n                            ticks: {\n                                autoSkip: true,\n                                maxRotation: 0,\n                                minRotation: 0,\n                                callback: function (value, index, values) {\n                                    if (!isDateDimension) {\n                                        return this.getLabelForValue(value);\n                                    }\n\n                                    let date = xAxisType === 'time' ?\n                                        moment(value) :\n                                        moment(this.getLabelForValue(value), \"YYYY-MM-DD\");\n\n                                    return formatInterval(interval, date);\n                                }\n                            },\n                            stacked: chartType === 'stacked-bar'\n                        },\n                        y: {\n                            border: {\n                                color: axisColor,\n                                dash: [2, 2]\n                            },\n                            beginAtZero: true,\n                            ticks: {\n                                maxTicksLimit: 5,\n                            },\n                            stacked: chartType === 'stacked-bar'\n                        }\n                    }\n                }\n            };\n\n            result.options.scales[indexAxis].type = xAxisType;\n            result.options.scales[indexAxis].reverse = reverseXAxis;\n\n            if (indexAxis === 'x') {\n                result.options.plugins.tooltip.mode = 'index';\n                result.options.plugins.tooltip.intersect = false;\n            }\n\n            return result;\n        },\n\n        getRequestDimension: function () {\n            return this.widget.configuration.dimension;\n        },\n\n        reloadOnGroupIntervalChange: function () {\n            return true;\n        },\n\n        getRequestMetrics: function () {\n            if (!Array.isArray(this.widget.configuration.metrics)) {\n                return [];\n            }\n\n            return this.widget.configuration.metrics.map(item => item.metric)\n        },\n\n        makeDefaultConfigAndData: function () {\n            // Vue 3: Direct assignment is reactive\n            this.widget.configuration.title = oc.t(\"Chart\");\n        },\n\n        getMetricConfigurationByCode: function (metricCode) {\n            if (!Array.isArray(this.widget.configuration.metrics)) {\n                return null;\n            }\n\n            const metrics = this.widget.configuration.metrics;\n            for (let metricIndex = 0; metricIndex < metrics.length; metricIndex++) {\n                if (metrics[metricIndex].metric === metricCode) {\n                    return metrics[metricIndex];\n                }\n            }\n\n            return null;\n        },\n\n        getSettingsConfiguration: function () {\n            const result = [];\n            this.addTitleConfigurationProp(result, true);\n\n            result.push({\n                property: 'chartType',\n                tab: oc.t(\"General\"),\n                title: oc.t(\"Chart type\"),\n                type: 'dropdown',\n                options: {\n                    'bar': oc.t(\"Bar\"),\n                    'stacked-bar': oc.t(\"Stacked Bar\"),\n                    'line': oc.t(\"Line\")\n                }\n            });\n\n            result.push({\n                property: 'barDirection',\n                tab: oc.t(\"General\"),\n                title: oc.t(\"Direction\"),\n                type: 'dropdown',\n                default: 'vertical',\n                options: {\n                    vertical: oc.t(\"Vertical\"),\n                    horizontal: oc.t(\"Horizontal\"),\n                },\n                visibility: {\n                    source_property: 'chartType',\n                    value: ['bar', 'stacked-bar']\n                },\n            });\n\n            this.addDataSourceProps(result, oc.t(\"General\"));\n            this.addDataSourceConfigurationProps(result, [], ['auto_update']);\n\n            return result;\n        },\n\n        buildChart: function () {\n            const ctx = this.$refs.canvas.getContext('2d');\n            this.chart = Vue.markRaw(new Chart(ctx, this.getChartConfig()));\n        },\n\n        populateChart: function () {\n            dataHelper.pushChartData(\n                this.chart.data,\n                this.loadedValue,\n                this.getRequestMetrics(),\n                false, // Keep null values to create gaps in the chart\n                oc.t(\"[not set]\")\n            );\n            this.chart.update();\n        }\n    },\n    mounted: function () {\n        if (this.isConfigured && this.metricsData) {\n            this.buildChart();\n\n            // If the data already exists, which can happen if\n            // the chart was moved, populate the chart immediately.\n            if (this.loadedValue) {\n                this.populateChart()\n            }\n        }\n    },\n    watch: {\n        loadedValue: function () {\n            if (!this.chart) {\n                this.buildChart();\n            } else {\n                if (this.lastGroupInterval !== this.store.state.range.interval) {\n                    this.chart.destroy();\n                    this.buildChart();\n                }\n            }\n\n            this.lastGroupInterval = this.store.state.range.interval;\n\n            this.populateChart();\n        },\n        configuration: {\n            handler(newVal, oldVal) {\n                if (this.chart && this.isConfigured) {\n                    this.chart.destroy();\n                    this.buildChart();\n                }\n            },\n            deep: true\n        }\n    },\n    beforeUnmount: function() {\n        if (this.chart) {\n            this.chart.destroy();\n            this.chart = null;\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/widget-error.js",
    "content": "export default {\n    props: {\n        store: Object,\n    },\n    data: function () {\n        return {\n        }\n    },\n    methods: {\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/widget-indicator.js",
    "content": "import phosphorIconList from '../../../../../backend/assets/js/ph-icons-list.js';\nimport WidgetBase from './widget-base.js';\nimport { utils as inspectorUtils } from '../../../../../backend/vuecomponents/inspector/assets/js/classes/index.js';\nimport { modalUtils } from '../../../../../backend/vuecomponents/modal/assets/js/classes/index.js';\n\nexport default {\n    extends: WidgetBase,\n    data: function () {\n        return {\n            loadingPopupData: false\n        }\n    },\n    computed: {\n        isIndicatorDimension: function () {\n            return typeof this.widget.configuration.dimension === 'string' &&\n                this.widget.configuration.dimension.startsWith('indicator@');\n        },\n\n        valueMetric: function () {\n            return this.widget.configuration.metric ?? 'value';\n        },\n\n        iconStatusClass: function () {\n            if (this.isIndicatorDimension) {\n                return this.getWidgetDataForMetric('icon_status', 'status-success', 'status-');\n            }\n\n            return this.configuration.icon_status;\n        },\n\n        linkEnabled: function () {\n            if (this.store.state.editMode) {\n                return false;\n            }\n\n            if (this.isIndicatorDimension) {\n                return this.getWidgetDataForMetric('link_enabled', false);\n            }\n\n            return true;\n        },\n\n        valueText: function () {\n            const result = this.getWidgetDataForMetric(this.valueMetric, '');\n            if (this.isIndicatorDimension) {\n                return result;\n            }\n\n            return this.getMetricTotalFormatted(this.valueMetric);\n        },\n\n        prevPeriodDiff: function () {\n            if (this.isIndicatorDimension) {\n                return null;\n            }\n\n            const currentTotal = this.getMetricTotalClean(this.valueMetric);\n            const prevTotal = this.getMetricTotalClean(this.valueMetric, true);\n            if (prevTotal === null) {\n                return null;\n            }\n\n            return currentTotal - prevTotal;\n        },\n\n        prevPeriodDiffFormatted: function () {\n            return this.formatMetricValue(this.valueMetric, this.prevPeriodDiff);\n        },\n\n        prevPeriodDiffFormattedAbs: function () {\n            return this.formatMetricValue(this.valueMetric, Math.abs(this.prevPeriodDiff));\n        },\n\n        linkHref: function () {\n            if (this.isIndicatorDimension) {\n                return this.getWidgetDataForMetric('link_href', '');\n            }\n\n            return this.configuration.linkHref;\n        },\n\n        linkHrefProcessed: function () {\n            if (this.linkHref === 'popup') {\n                return '#';\n            }\n\n            return this.linkHref;\n        },\n\n        complicationClass: function () {\n            if (this.isIndicatorDimension) {\n                return this.getWidgetDataForMetric('icon_complication', '');\n            }\n\n            return null;\n        }\n    },\n    methods: {\n        getRequestDimension: function () {\n            return this.widget.configuration.dimension;\n        },\n\n        extendConfigurationBeforeDataFetch: function (widgetConfiguration) {\n            if (this.isIndicatorDimension) {\n                return;\n            }\n\n            // In the indicator widget we rely on metric totals\n            //\n            widgetConfiguration.metrics = [\n                {\n                    metric: this.valueMetric,\n                    displayTotals: 1\n                }\n            ];\n\n            widgetConfiguration.records_per_page = 1;\n        },\n\n        getRequestMetrics: function () {\n            if (this.isIndicatorDimension) {\n                return [\n                    'icon_status',\n                    'icon_complication',\n                    'value',\n                    'link_enabled',\n                    'link_href'\n                ];\n            }\n            else {\n                return [\n                    this.valueMetric\n                ]\n            }\n        },\n\n        makeDefaultConfigAndData: function () {\n            // Vue 3: Direct assignment is reactive\n            if (this.widget.configuration.title === undefined) {\n                this.widget.configuration.title = oc.t(\"Indicator\");\n            }\n\n            if (this.widget.configuration.icon === undefined) {\n                this.widget.configuration.icon = 'ph ph-sun';\n            }\n\n            this.widget.loadedValue = {\n                oc_metric_value: oc.t(\"No Value\"),\n                icon_status: 'disabled'\n            };\n        },\n\n        getSettingsConfiguration: function () {\n            const result = [];\n            this.addTitleConfigurationProp(result);\n\n            const metricsVisibility = (obj) => {\n                return !String(obj.dimension).startsWith('indicator@') &&\n                    !inspectorUtils.isValueEmpty(obj.dimension);\n            }\n\n            const linkTextVisibility = (obj) => {\n                if (!metricsVisibility(obj)) {\n                    return false;\n                }\n\n                return !inspectorUtils.isValueEmpty(obj.linkText);\n            }\n\n            result.push({\n                property: 'icon',\n                title: oc.t(\"Icon\"),\n                tab: oc.t(\"General\"),\n                type: 'dropdown',\n                options: phosphorIconList,\n                useValuesAsIcons: true,\n                validation: {\n                    required: {\n                        message: oc.t(\"Please select an icon\"),\n                    }\n                }\n            });\n\n            this.addDataSourceProps(result, oc.t(\"General\"), ['indicator']);\n            this.addDataSourceConfigurationProps(result, ['auto_update']);\n\n            const metricsCacheKey = 'ds-metrics';\n            const metricsCachePropertyNames = ['dataSource', 'dimension'];\n\n            result.push({\n                property: 'metric',\n                title: oc.t(\"Value\"),\n                tab: oc.t(\"General\"),\n                default: 'value',\n                type: 'dropdown',\n                dataCacheKeyName: metricsCacheKey,\n                dataCacheKeyPropertyNames: metricsCachePropertyNames,\n                depends: ['dataSource', 'dimension'],\n                visibility: metricsVisibility\n            });\n\n            result.push({\n                property: 'icon_status',\n                default: 'icon_status',\n                title: oc.t(\"Icon Status\"),\n                tab: oc.t(\"General\"),\n                type: 'dropdown',\n                options: {\n                    'status-info': oc.t(\"Information\"),\n                    'status-important': oc.t(\"Important\"),\n                    'status-success': oc.t(\"Success\"),\n                    'status-warning': oc.t(\"Warning\"),\n                    'status-disabled': oc.t(\"Disabled\"),\n                },\n                visibility: metricsVisibility\n            });\n\n            result.push({\n                property: 'linkText',\n                title: oc.t(\"Link Text\"),\n                tab: oc.t(\"General\"),\n                type: 'string'\n            });\n\n            result.push({\n                property: 'linkHref',\n                default: '',\n                title: oc.t(\"Link URL\"),\n                tab: oc.t(\"General\"),\n                type: 'string',\n                visibility: linkTextVisibility,\n                no_focus_on_visible: true\n            });\n\n            this.addDataSourceConfigurationProps(result, ['filters', 'date_interval']);\n\n            return result;\n        },\n\n        loadAndDisplayPopup: async function () {\n            this.loadingPopupData = true;\n            const responseData = await this.runDataSourceHandler('onGetPopupData');\n            this.loadingPopupData = false;\n\n            try {\n                await modalUtils.showBasic(\n                    responseData.title,\n                    responseData.content\n                );\n            }\n            catch (err) {}\n        },\n\n        onLinkClick: function (ev) {\n            if (this.linkHref === 'popup') {\n                ev.preventDefault();\n                ev.stopPropagation();\n                this.loadAndDisplayPopup();\n                return;\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/widget-section-title.js",
    "content": "import Sizing from '../../../../assets/js/classes/sizing.js';\nimport WidgetBase from './widget-base.js';\n\nexport default {\n    extends: WidgetBase,\n    data: function () {\n        return {\n        }\n    },\n    computed: {\n        title: function () {\n            let result = this.widget.configuration.title;\n\n            if (this.widget.configuration.showInterval) {\n                result += ': ' + this.store.state.intervalName;\n            }\n\n            return result;\n        }\n    },\n    methods: {\n        makeDefaultConfigAndData: function () {\n            const sizing = Sizing.instance();\n            // Vue 3: Direct assignment is reactive\n            this.widget.configuration.title = oc.t(\"Section\");\n            this.widget.configuration.showInterval = false;\n            this.widget.configuration.width = sizing.totalColumns;\n        },\n\n        getSettingsConfiguration: function () {\n            const result = [{\n                property: 'title',\n                title: oc.t(\"Title\"),\n                type: 'string',\n                validation: {\n                    required: {\n                        message: oc.t(\"Please provide the widget title\"),\n                    }\n                }\n            }];\n\n            result.push({\n                property: 'showInterval',\n                title: oc.t(\"Show Date Interval\"),\n                type: 'checkbox'\n            });\n\n            return result;\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/widget-static.js",
    "content": "import WidgetBase from './widget-base.js';\n\nexport default {\n    extends: WidgetBase,\n    data: function () {\n        return {\n        }\n    },\n    computed: {\n        loadedValue: function () {\n            return this.fullWidgetData ? this.fullWidgetData : undefined;\n        },\n    },\n    methods: {\n        getRequestDimension: function () {\n            return 'none';\n        },\n\n        getRequestMetrics: function () {\n            return [];\n        },\n\n        useCustomData: function () {\n            return true;\n        },\n\n        makeDefaultConfigAndData: function () {\n            let defaultTitle = oc.t(\"My Custom Widget\");\n\n            if (this.loadedValue && this.loadedValue.properties) {\n                const titleProp = this.loadedValue.properties.find((p) => p.property === 'title');\n\n                // Apply the default title from loaded properties if it exists\n                if (titleProp && titleProp.default) {\n                    defaultTitle = titleProp.default;\n                }\n            }\n\n            // Vue 3: Direct assignment is reactive\n            this.widget.configuration.title = defaultTitle;\n        },\n\n        getSettingsConfiguration: function () {\n            return this.loadedValue && this.loadedValue.properties;\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/widget-table.js",
    "content": "import WidgetBase from './widget-base.js';\n\nexport default {\n    extends: WidgetBase,\n    data: function () {\n        return {\n            paginating: false\n        }\n    },\n    computed: {\n        metricColumnCount: function () {\n            let columnCount = 0;\n            if (this.configuration && this.configuration.metrics) {\n                this.configuration.metrics.forEach(metric => {\n                    columnCount += metric.displayRelativeBar ? 2 : 1;\n                })\n            }\n\n            return columnCount;\n        },\n\n        dimensionFieldColumnCount: function () {\n            let dimensionFieldColumnCount = 0;\n            if (this.configuration && this.configuration.dimension_fields) {\n                dimensionFieldColumnCount = this.configuration.dimension_fields.length;\n            }\n\n            return dimensionFieldColumnCount;\n        },\n\n        tableStyle: function () {\n            let columnCount = this.metricColumnCount;\n            const metricsColumns = 'auto '.repeat(columnCount);\n\n            let dimensionFieldColumnCount = this.dimensionFieldColumnCount;\n            const dimensionFieldColumns = '1fr '.repeat(dimensionFieldColumnCount);\n\n            const dimensionColumnWidth = dimensionFieldColumnCount > 0 ? 'auto' : '1fr';\n            return {\n                'grid-template-columns': dimensionColumnWidth + ' ' + dimensionFieldColumns + ' ' + metricsColumns\n            };\n        },\n\n        fullWidthColumnStyle: function () {\n            let columnCount = 1 + this.metricColumnCount + this.dimensionFieldColumnCount;\n\n            return {\n                'grid-column': 'span ' + columnCount\n            };\n        },\n\n        currentPage: function () {\n            const result = this.store.getSystemDataFlag(this.widget, 'current_page');\n            if (result === undefined) {\n                return 0;\n            }\n\n            return result;\n        },\n\n        startRecordDisplayIndex: function () {\n            return this.currentPage * this.configuration.records_per_page + 1;\n        },\n\n        endRecordDisplayIndex: function () {\n            return this.startRecordDisplayIndex + this.loadedValue.length - 1;\n        },\n\n        totalPages: function () {\n            if (!this.configuration.records_per_page) {\n                return 0;\n            }\n\n            return Math.ceil(this.totalRecords / this.configuration.records_per_page);\n        },\n    },\n    methods: {\n        getRequestDimension: function () {\n            return this.widget.configuration.dimension;\n        },\n\n        getRequestMetrics: function () {\n            if (!Array.isArray(this.widget.configuration.metrics)) {\n                return [];\n            }\n\n            return this.widget.configuration.metrics.map(item => item.metric)\n        },\n\n        getRequestExtraData: function () {\n            return {\n                current_page: this.currentPage\n            }\n        },\n\n        makeDefaultConfigAndData: function () {\n            // Vue 3: Direct assignment is reactive\n            this.widget.configuration.title = oc.t(\"Table\");\n            this.widget.configuration.metrics = [];\n        },\n\n        getDimensionText: function (text) {\n            if (text === null || text === undefined) {\n                return oc.t(\"[not set]\");\n            }\n\n            const str = String(text);\n            if (!str.length) {\n                return oc.t(\"[not set]\");\n            }\n\n            return str;\n        },\n\n        extendConfigurationBeforeDataFetch: function (widgetConfiguration) {\n            if (!widgetConfiguration.metrics) {\n                return;\n            }\n        },\n\n        getSettingsConfiguration: function () {\n            const suppress = [];\n            const result = [];\n            this.addTitleConfigurationProp(result, true);\n            this.addDataSourceProps(result, oc.t(\"General\"));\n            this.addDataSourceConfigurationProps(result, [], suppress);\n\n            const limitProp = this.findConfigurationProp(result, 'limit');\n            Object.assign(limitProp, {\n                type: 'string',\n                visibility: {\n                    source_property: 'records_per_page',\n                    inverse: true,\n                    value: '--any--'\n                }\n            });\n\n            const metricsProp = this.findConfigurationProp(result, 'metrics');\n            metricsProp.itemProperties.push({\n                property: 'displayRelativeBar',\n                title: oc.t(\"Display relative bars\"),\n                type: 'checkbox'\n            })\n\n            this.addConfigurationPropBefore(result, 'limit', {\n                property: 'records_per_page',\n                tab: oc.t(\"Sorting & Filtering\"),\n                title: oc.t(\"Records per page\"),\n                type: 'string',\n                placeholder: oc.t(\"Leave empty to disable pagination\"),\n                validation: {\n                    integer: {\n                        allowNegative: false,\n                        message: oc.t(\"Enter a positive number or leave empty to display all records.\"),\n                        min: {\n                            value: 1,\n                            message: oc.t(\"Enter a positive number or leave empty to display all records.\")\n                        }\n                    }\n                }\n            });\n\n            result.push({\n                property: 'dimension_fields',\n                tab: oc.t(\"General\"),\n                title: oc.t(\"Extra table fields\"),\n                type: 'set',\n                depends: ['dataSource', 'dimension'],\n                dataCacheKeyName: 'ds-dimension-fields',\n                dataCacheKeyPropertyNames: ['dataSource', 'dimension'],\n            });\n\n            return result;\n        },\n\n        getRecordValueClean: function (metricCode, record) {\n            return record['oc_metric_' + metricCode];\n        },\n\n        getRecordValue: function (metricCode, record) {\n            return this.formatRecordMetricValue(metricCode, record);\n        },\n\n        getRecordCssClass(paginating, record) {\n            return {\n                paginating: !!paginating,\n                hide_link: typeof record.oc_record_url !== 'string'\n            };\n        },\n\n        getRecordTotalRelativeValueClean: function (metricCode, record) {\n            const recordValue = this.getRecordValueClean(metricCode, record);\n            const total = this.getMetricTotalClean(metricCode);\n\n            if (total === null) {\n                return null;\n            }\n\n            if (total !== 0 && !isNaN(total) && !isNaN(recordValue)) {\n                const result = (recordValue / total * 100).toFixed(2);\n                return result;\n            }\n\n            return null;\n        },\n\n        getRecordTotalRelativeValue: function (metricCode, record) {\n            const result = this.getRecordTotalRelativeValueClean(metricCode, record);\n            if (result === null) {\n                return '';\n            }\n\n            return '(' + result + '%)';\n        },\n\n        getRelativeBarStyle: function (metricCode, record, color) {\n            const relativeValue = this.getRecordTotalRelativeValueClean(metricCode, record);\n            if (relativeValue === null) {\n                return {};\n            }\n\n            return {\n                width: relativeValue + '%',\n                background: color\n            };\n        },\n\n        onConfigurationUpdated: function () {\n            this.store.setSystemDataFlag(this.widget, 'current_page', 0);\n        },\n\n        onPrevPageClick: function () {\n            if (this.currentPage <= 0) {\n                return;\n            }\n\n            this.paginating = true;\n            this.store.setSystemDataFlag(this.widget, 'current_page', this.currentPage - 1);\n            this.$emit('reload');\n        },\n\n        onNextPageClick: function () {\n            if (this.currentPage >= this.totalPages - 1) {\n                return;\n            }\n\n            this.paginating = true;\n            this.store.setSystemDataFlag(this.widget, 'current_page', this.currentPage + 1);\n            this.$emit('reload');\n        }\n    },\n    mounted: function () {\n    },\n    watch: {\n        loading: function (newValue, oldValue) {\n            if (!newValue) {\n                this.paginating = false;\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/assets/js/widget-text-notice.js",
    "content": "import WidgetBase from './widget-base.js';\n\nexport default {\n    extends: WidgetBase,\n    data: function () {\n        return {\n        }\n    },\n    computed: {\n    },\n    methods: {\n        makeDefaultConfigAndData: function () {\n            // Vue 3: Direct assignment is reactive\n            this.widget.configuration.title = oc.t(\"Text Notice\");\n            this.widget.configuration.notice = oc.t(\"This is a text notice widget.\");\n        },\n\n        getSettingsConfiguration: function () {\n            const result = [{\n                property: 'title',\n                title: oc.t(\"Title\"),\n                type: 'string',\n                validation: {\n                    required: {\n                        message: oc.t(\"Please provide the widget title\"),\n                    }\n                }\n            }];\n\n            result.push({\n                property: 'notice',\n                title: oc.t(\"Notice text\"),\n                type: 'text',\n            });\n\n            return result;\n        }\n    }\n};\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_dashboard-selector.php",
    "content": "<div class=\"dashboard-selector\">\n    <h2 v-text=\"currentDashboard.name\"></h2>\n    <div v-if=\"canCreateAndEdit\" class=\"dashboard-button-set\">\n        <button\n            v-if=\"embeddedInDashboard\"\n            class=\"dashboard-toolbar-button\"\n            @click.stop.prevent=\"onEditClick\"\n            aria-label=\"<?= __(\"Edit Dashboard\") ?>\"\n            title=\"<?= __(\"Edit Dashboard\") ?>\"\n        ><i class=\"ph ph-gear\"></i></button>\n        <backend-dropdown-menu\n            :items=\"editMenuItems\"\n            ref=\"editMenu\"\n            @command=\"onEditMenuItemCommand\"\n        ></backend-dropdown-menu>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_dashboard.php",
    "content": "<div class=\"oc-dashboard\">\n     <div class=\"dashboard-toolbar-container\">\n        <div class=\"dashboards\">\n            <dashboard-component-dashboard-dashboard-selector\n                v-if=\"!store.state.editMode\"\n                :store=\"store\"\n                :embeddedInDashboard=\"true\"\n            ></dashboard-component-dashboard-dashboard-selector>\n\n            <div v-if=\"store.state.editMode\" class=\"dashboard-manage-controls\">\n                <div class=\"dashboard-button-set interval-selector\">\n                    <button class=\"dashboard-toolbar-button primary\" :disabled=\"saving\" @click.prevent=\"onApplyChanges\"><?= __(\"Apply Changes\") ?></button>\n                    <button class=\"dashboard-toolbar-button\" :disabled=\"saving\" @click.prevent=\"onCancelChanges\"><?= __(\"Cancel\") ?></button>\n                </div>\n            </div>\n        </div>\n        <dashboard-component-dashboard-interval-selector\n            v-if=\"!store.state.editMode && store.state.showInterval\"\n            :store=\"store\"\n        ></dashboard-component-dashboard-interval-selector>\n    </div>\n\n    <dashboard-component-dashboard-report\n        :rows=\"currentDashboard.rows\"\n        :store=store\n    ></dashboard-component-dashboard-report>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_interval-selector.php",
    "content": "<div class=\"dashboard-button-set manage-dashboard-controls\">\n    <button @click.stop.prevent=\"onSelectIntervalClick\" class=\"dashboard-toolbar-button stack\">\n        <div><?= __(\"Group\") ?></div>\n        <span v-text=\"groupingIntervalName\"></span>\n    </button>\n    <button @click.stop.prevent=\"onSelectCompareClick\" class=\"dashboard-toolbar-button stack\">\n        <div><?= __(\"Compare Totals\") ?></div>\n        <span v-text=\"compareOptionName\"></span>\n    </button>\n    <button @click.stop.prevent class=\"dashboard-toolbar-button stack\" ref=\"calendarControl\">\n        <div><?= __(\"Interval\") ?></div>\n        <span v-text=\"intervalName\"></span>\n    </button>\n\n    <backend-dropdown-menu\n        :items=\"intervalMenuItems\"\n        ref=\"intervalMenu\"\n        @command=\"onIntervalMenuItemCommand\"\n    ></backend-dropdown-menu>\n\n    <backend-dropdown-menu\n        :items=\"compareMenuItems\"\n        ref=\"compareMenu\"\n        @command=\"onCompareMenuItemCommand\"\n    ></backend-dropdown-menu>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_report-diff.php",
    "content": "<span\n    v-if=\"prevValue !== null\"\n    title=\"<?= __(\"Difference with the previous period\") ?>\"\n    class=\"prev-period-marker\"\n    :class=\"{'negative': diff < 0, 'neutral': diff === 0}\"\n>\n    <i class=\"ph ph-arrow-up\" v-if=\"diff > 0\"></i>\n    <i class=\"ph ph-arrow-down\" v-if=\"diff < 0\"></i>\n    <span\n        v-text=\"diffFormattedAbs\"\n        v-bind:aria-label=\"diffFormatted\"\n    ></span>\n</span>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_report-row.php",
    "content": "<div\n    class=\"report-row\"\n    :class=\"cssClass\"\n    data-report-row\n    @drop.stop=\"onDrop\"\n    @dragover.stop=\"onDragOver\"\n>\n    <div v-if=\"store.state.editMode\" class=\"row-controls\" @dragstart.stop.prevent=\"\">\n        <div\n            class=\"edit-row-button\"\n            data-edit-row-button\n            role=\"button\"\n            tabindex=\"0\"\n            aria-label=\"<?= __(\"Edit Row\") ?>\"\n            @mousedown=\"onRowButtonMouseDown\"\n            @contextmenu.stop=\"onContextMenu($event)\"\n            @click.stop=\"onContextMenu($event)\"\n            v-on:keyup.enter=\"onContextMenu($event)\"\n        >\n            <img src=\"<?= Url::asset('/modules/dashboard/assets/images/dashboard/edit-dots.svg') ?>\"/>\n        </div>\n\n        <backend-dropdown-menu\n            :items=\"menuItems\"\n            ref=\"menu\"\n            @command=\"onMenuItemCommand\"\n        ></backend-dropdown-menu>\n    </div>\n\n    <div class=\"row-widgets\" >\n        <div\n            v-if=\"store.state.editMode && !hasWidgets\"\n            class=\"add-widget-button\"\n            @click.stop=\"onAddWidgetClick($event)\"\n        >\n            <i class=\"ph ph-plus\"></i>\n            <span><?= __(\"Add Widget\") ?></span>\n        </div>\n\n        <backend-dropdown-menu\n            :items=\"addWidgetItems\"\n            ref=\"addWidgetMenu\"\n            @command=\"onAddWidgetMenuItemCommand\"\n        ></backend-dropdown-menu>\n\n        <template v-for=\"(widget, index) in row.widgets\" :key=\"widget._unique_key\">\n            <dashboard-component-dashboard-report-widget\n                :widget=\"widget\"\n                :row=\"row\"\n                :rows=\"rows\"\n                :widget-index-in-row=\"index\"\n                :row-index=\"rowIndex\"\n                :store=store\n            ></dashboard-component-dashboard-report-widget>\n        </template>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_report-widget.php",
    "content": "<div\n    class=\"dashboard-report-widget\"\n    :draggable=\"editMode\"\n    data-report-widget\n    :class=\"cssClass\"\n    @dragstart.stop=\"onDragStart\"\n    @drop.stop=\"onDrop\"\n    @click=\"onClick\"\n    @dragover.stop=\"onDragOver\"\n>\n    <div v-if=\"editMode && !isFrameless\" class=\"resize-handle\" @dragstart.stop.prevent=\"\" @mousedown.stop.prevent=\"onHandleMouseDown\" ref=\"resizeHandle\"></div>\n\n    <div v-show=\"editMode\" class=\"widget-controls\" @dragstart.stop.prevent=\"\">\n        <div\n            class=\"edit-widget-button\"\n            role=\"button\"\n            tabindex=\"0\"\n            aria-label=\"<?= __(\"Edit Widget\") ?>\"\n            @click.stop=\"onContextMenu($event)\"\n            @keyup.enter=\"onContextMenu($event)\"\n        >\n            <img src=\"<?= Url::asset('/modules/dashboard/assets/images/dashboard/edit-dots.svg') ?>\"/>\n        </div>\n\n        <backend-dropdown-menu\n            :items=\"menuItems\"\n            ref=\"menu\"\n            @command=\"onMenuItemCommand\"\n        ></backend-dropdown-menu>\n    </div>\n\n    <div class=\"widget-inner-container\" @dragstart.stop.prevent=\"\">\n        <div class=\"widget-size-container\">\n            <dashboard-component-dashboard-widget-static\n                v-if=\"widget.configuration.type == 'static'\"\n                :widget=\"widget\"\n                :store=\"store\"\n                :loading=\"loading\"\n                :autoUpdating=\"autoUpdating\"\n                :error=\"error\"\n                ref=\"widgetImplementation\"\n                @configure=\"showInspector\"\n                @reload=\"load\"\n            ></dashboard-component-dashboard-widget-static>\n            <dashboard-component-dashboard-widget-indicator\n                v-if=\"widget.configuration.type == 'indicator'\"\n                :widget=\"widget\"\n                :store=\"store\"\n                :loading=\"loading\"\n                :autoUpdating=\"autoUpdating\"\n                :error=\"error\"\n                ref=\"widgetImplementation\"\n                @configure=\"showInspector\"\n                @reload=\"load\"\n            ></dashboard-component-dashboard-widget-indicator>\n            <dashboard-component-dashboard-widget-chart\n                v-if=\"widget.configuration.type == 'chart'\"\n                :widget=\"widget\"\n                :store=\"store\"\n                :loading=\"loading\"\n                :autoUpdating=\"autoUpdating\"\n                :error=\"error\"\n                ref=\"widgetImplementation\"\n                @configure=\"showInspector\"\n                @reload=\"load\"\n            ></dashboard-component-dashboard-widget-chart>\n            <dashboard-component-dashboard-widget-table\n                v-if=\"widget.configuration.type == 'table'\"\n                :widget=\"widget\"\n                :store=\"store\"\n                :loading=\"loading\"\n                :autoUpdating=\"autoUpdating\"\n                :error=\"error\"\n                ref=\"widgetImplementation\"\n                @configure=\"showInspector\"\n                @reload=\"load\"\n            ></dashboard-component-dashboard-widget-table>\n            <dashboard-component-dashboard-widget-section-title\n                v-if=\"widget.configuration.type == 'section-title'\"\n                :widget=\"widget\"\n                :store=\"store\"\n                :loading=\"loading\"\n                :error=\"error\"\n                ref=\"widgetImplementation\"\n            ></dashboard-component-dashboard-widget-section-title>\n            <dashboard-component-dashboard-widget-text-notice\n                v-if=\"widget.configuration.type == 'notice'\"\n                :widget=\"widget\"\n                :store=\"store\"\n                :loading=\"loading\"\n                :error=\"error\"\n                ref=\"widgetImplementation\"\n            ></dashboard-component-dashboard-widget-text-notice>\n            <template v-if=\"widget.configuration.type == 'widget'\">\n                <component\n                    v-if=\"isComponentRegistered(widget.configuration.componentName)\"\n                    :is=\"widget.configuration.componentName\"\n                    :widget=\"widget\"\n                    :store=\"store\"\n                    :loading=\"loading\"\n                    :autoUpdating=\"autoUpdating\"\n                    :error=\"error\"\n                    ref=\"widgetImplementation\"\n                    @configure=\"showInspector\"\n                    @reload=\"load\"\n                ></component>\n                <div v-else>\n                    <div class=\"generic-widget-error\">\n                        Component not registered: <span v-text=\"widget.configuration.widgetClass\"></span>\n                    </div>\n                </div>\n            </template>\n            <template v-if=\"!isKnownWidgetType(widget.configuration.type)\">\n                <div class=\"generic-widget-error\">\n                    Component not found: <span v-text=\"widget.configuration.type\"></span>\n                </div>\n            </template>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_report.php",
    "content": "<div class=\"dashboard-report-container\" :class=\"cssClass\" data-report-container>\n    <transition-group\n        name=\"reorder-row-list\"\n        tag=\"div\"\n        class=\"rows-container\"\n    >\n        <dashboard-component-dashboard-report-row\n            v-for=\"(row, index) in rows\"\n            :key=\"row._unique_key\"\n            :row=\"row\"\n            :row-index=\"index\"\n            :rows=\"rows\"\n            :store=\"store\"\n            @deleteRow=\"onDeleteRow(index)\"\n        ></dashboard-component-dashboard-report-row>\n    </transition-group>\n\n    <div v-if=\"store.state.editMode\" class=\"row-controls\">\n        <div\n            class=\"edit-row-button add-row\"\n            data-edit-row-button\n            role=\"button\"\n            tabindex=\"0\"\n            aria-label=\"<?= __(\"Add Row\") ?>\"\n            @click.prevent=\"onAddRowClick\"\n        >\n            <i class=\"ph ph-plus\"></i>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_widget-chart.php",
    "content": "<div\n    class=\"dashboard-report-widget-chart\"\n    :class=\"{'loading': loading}\"\n>\n    <div class=\"widget-body\">\n        <h3 class=\"widget-title\" v-if=\"widget.configuration.title\" v-text=\"widget.configuration.title\"></h3>\n\n        <div v-if=\"showMetricsTotalRow\" class=\"totals\">\n            <template v-for=\"metricData in configuration.metrics\" :key=\"metricData.metric\">\n            <div\n                class=\"total-cell\"\n                v-if=\"metricData.displayTotals\"\n            >\n                <div v-if=\"loading\" class=\"skeleton-container\">\n                    <div class=\"skeleton-name data-skeleton dashboard-widget-loading-pulse\"></div>\n                    <div class=\"skeleton-value data-skeleton dashboard-widget-loading-pulse\"></div>\n                </div>\n                <div v-else>\n                    <div class=\"total-name\">\n                        <div class=\"total-color\" :style=\"{'background-color': metricData.color}\"></div>\n                        <span v-text=\"metricsData[metricData.metric].label\"></span>\n                    </div>\n                    <div class=\"total-container\">\n                        <div class=\"dashboard-total-value\" v-text=\"getMetricTotalFormatted(metricData.metric)\"></div>\n                        <dashboard-component-dashboard-report-diff\n                            :prevValue=\"getMetricTotalClean(metricData.metric, true)\"\n                            :currentValue=\"getMetricTotalClean(metricData.metric)\"\n                            :formattingOptions=\"getMetricIntlFormatOptions(metricData.metric)\"\n                            :store=\"store\"\n                        >\n                        </dashboard-component-dashboard-report-diff>\n                    </div>\n                </div>\n            </div>\n            </template>\n        </div>\n\n        <div class=\"widget-chart-container\" :class=\"{'error': error}\">\n            <canvas ref=\"canvas\"></canvas>\n        </div>\n\n        <dashboard-component-dashboard-widget-error\n            v-if=\"error\"\n            :store=\"store\"\n            @configure=\"$emit('configure')\"\n        ></dashboard-component-dashboard-widget-error>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_widget-error.php",
    "content": "<div class=\"widget-error\">\n    <span class=\"ph ph-warning\"></span>\n    <p>\n        <?= __(\"Error loading the widget data. See the browser error console for details.\") ?>\n        <template v-if=\"store.state.canCreateAndEdit\">\n            <a href=\"javascript:;\" @click.stop.prevent=\"$emit('configure')\"><?= __(\"Configure the widget\") ?></a>\n            <?= __(\"to manage its settings.\") ?>\n        </template>\n    </p>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_widget-indicator.php",
    "content": "<div\n    class=\"dashboard-report-widget-indicator\"\n    :class=\"{'loading': explicitLoading}\"\n>\n    <div class=\"indicator-body\" :class=\"{'dashboard-widget-loading-pulse': explicitLoading && isConfigured}\">\n        <dashboard-component-dashboard-widget-error\n            v-if=\"error\"\n            :store=\"store\"\n            @configure=\"$emit('configure')\"\n        ></dashboard-component-dashboard-widget-error>\n\n        <template v-if=\"!error\">\n            <div class=\"indicator-icon\" :class=\"iconStatusClass\">\n                <i :class=\"widget.configuration.icon\"></i>\n                <span v-if=\"complicationClass\" class=\"icon-complication\" :class=\"complicationClass\"></span>\n            </div>\n            <div class=\"indicator-details\">\n                <h3 class=\"widget-title\">\n                    <span v-if=\"explicitLoading\">&nbsp;</span>\n                    <span v-else v-text=\"widget.configuration.title\"></span>\n                </h3>\n                <p :class=\"{'total-container align-left': !explicitLoading}\">\n                    <span v-if=\"explicitLoading\">&nbsp;</span>\n                    <template v-else>\n                        <span v-text=\"valueText\"></span>\n                        <template v-if=\"prevPeriodDiff !== null\">\n                            <span\n                                title=\"<?= __(\"Difference with the previous period\") ?>\"\n                                class=\"prev-period-marker\"\n                                :class=\"{'negative': prevPeriodDiff < 0, 'neutral': prevPeriodDiff === 0}\"\n                            >\n                                <i class=\"ph ph-arrow-up\" v-if=\"prevPeriodDiff > 0\"></i>\n                                <i class=\"ph ph-arrow-down\" v-if=\"prevPeriodDiff < 0\"></i>\n                                <span\n                                    v-text=\"prevPeriodDiffFormattedAbs\"\n                                    v-bind:aria-label=\"prevPeriodDiffFormatted\"\n                                ></span>\n                            </span>\n                        </template>\n                    </template>\n                </p>\n            </div>\n        </template>\n    </div>\n    <template v-if=\"widget.configuration.linkText && !error\">\n        <div class=\"indicator-link-container\" v-if=\"linkEnabled\">\n            <a\n                class=\"indicator-link\"\n                draggable=\"false\"\n                v-if=\"!loadingPopupData\"\n                :href=\"linkHrefProcessed\"\n                @click=\"onLinkClick\"\n            >\n                <span v-if=\"explicitLoading\" class=\"dashboard-widget-loading-pulse\">&nbsp;</span>\n                <span v-else v-text=\"widget.configuration.linkText\"></span>\n            </a>\n            <backend-loading-indicator\n                v-else\n                size=\"tiny\"\n            ></backend-loading-indicator>\n        </div>\n        <div\n            class=\"indicator-link-container disabled\"\n            v-else\n        >\n            <span v-if=\"explicitLoading\" class=\"dashboard-widget-loading-pulse\">&nbsp;</span>\n            <span v-else v-text=\"widget.configuration.linkText\"></span>\n        </div>\n    </template>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_widget-section-title.php",
    "content": "<div\n    class=\"dashboard-report-widget-indicator\"\n    :class=\"{'loading': loading}\"\n>\n    <h3 class=\"dashboard-section\" v-text=\"title\"></h3>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_widget-static.php",
    "content": "<div\n    class=\"dashboard-report-widget-static\"\n    :class=\"{'loading': explicitLoading}\"\n>\n    <div class=\"static-body\" :class=\"{'dashboard-widget-loading-pulse': explicitLoading && isConfigured}\">\n        <dashboard-component-dashboard-widget-error\n            v-if=\"error\"\n            :store=\"store\"\n            @configure=\"$emit('configure')\"\n        ></dashboard-component-dashboard-widget-error>\n\n        <template v-if=\"!error\">\n            <h3 class=\"widget-title\" v-if=\"widget.configuration.title\" v-text=\"widget.configuration.title\"></h3>\n            <span v-if=\"explicitLoading\" class=\"dashboard-widget-loading-pulse\">&nbsp;</span>\n            <template v-else>\n                <div v-html=\"loadedValue.result\"></div>\n            </template>\n        </template>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_widget-table.php",
    "content": "<div\n    class=\"dashboard-report-widget-table\"\n    :class=\"{'loading': explicitLoading}\"\n>\n    <div class=\"widget-body\">\n        <h3 class=\"widget-title\" v-if=\"widget.configuration.title\" v-text=\"widget.configuration.title\"></h3>\n\n        <div class=\"widget-table-container\" v-if=\"!error\">\n            <div class=\"table-widget-data\" :style=\"tableStyle\">\n                <div class=\"header\">\n                    <div class=\"cell\">\n                        <div class=\"dimension-skeleton dashboard-widget-loading-pulse\" v-if=\"explicitLoading && !paginating\">\n                            <span class=\"data-skeleton force\" :style=\"{width: makeRandomWidth()}\"></span>\n                            <span class=\"data-skeleton force\" :style=\"{width: makeRandomWidth()}\"></span>\n                        </div>\n                        <span v-else v-text=\"dimensionData.oc_dimension\"></span>\n                    </div>\n                    <div class=\"cell\" v-for=\"dimensionField in configuration.dimension_fields\">\n                        <div class=\"dimension-skeleton dashboard-widget-loading-pulse\" v-if=\"explicitLoading && !paginating\">\n                                <span class=\"data-skeleton force\" :style=\"{width: makeRandomWidth()}\"></span>\n                            </div>\n                            <span v-else v-text=\"getDimensionFieldName(dimensionField)\"></span>\n                    </div>\n                    <div\n                        class=\"cell metric\"\n                        v-for=\"metricData in configuration.metrics\"\n                        :class=\"{'has-relative-bar': metricData.displayRelativeBar, 'header-loading': explicitLoading && !paginating}\"\n                    >\n                        <span v-if=\"explicitLoading && !paginating\" class=\"data-skeleton force metric dashboard-widget-loading-pulse\" :style=\"{width: makeRandomWidth()}\"></span>\n                        <span v-else v-text=\"metricsData[metricData.metric].label\"></span>\n                    </div>\n                </div>\n\n                <div class=\"totals\" v-if=\"showMetricsTotalRow && loadedValue && loadedValue.length > 0\" :class=\"{loading: explicitLoading && !paginating}\">\n                    <div class=\"cell\"></div>\n                    <div class=\"cell\" v-for=\"dimensionField in configuration.dimension_fields\"></div>\n                    <div\n                        class=\"cell metric dashboard-total-value\"\n                        v-for=\"metricData in configuration.metrics\"\n                        :class=\"{'has-relative-bar': metricData.displayRelativeBar, 'header-loading': explicitLoading && !paginating}\"\n                    >\n                        <template v-if=\"metricData.displayTotals\">\n                            <span v-if=\"explicitLoading && !paginating\" class=\"data-skeleton force metric dashboard-widget-loading-pulse\" :style=\"{width: makeRandomWidth()}\"></span>\n                            <div class=\"total-container\" v-else>\n                                <span v-text=\"getMetricTotalFormatted(metricData.metric)\"></span>\n                                <dashboard-component-dashboard-report-diff\n                                    :prevValue=\"getMetricTotalClean(metricData.metric, true)\"\n                                    :currentValue=\"getMetricTotalClean(metricData.metric)\"\n                                    :formattingOptions=\"getMetricIntlFormatOptions(metricData.metric)\"\n                                    :store=\"store\"\n                                >\n                                </dashboard-component-dashboard-report-diff>\n                            </div>\n                        </template>\n                    </div>\n                </div>\n\n                <template v-if=\"!explicitLoading || paginating\">\n                    <div class=\"row\" v-for=\"record in loadedValue\">\n                        <a :href=\"record.oc_record_url\" target=\"_blank\" class=\"cell\" :class=\"getRecordCssClass(paginating, record)\">\n                            <div class=\"cell-data-container\">\n                                <span class=\"cell-data\" v-text=\"getDimensionText(record.oc_dimension_label || record.oc_dimension)\"></span>\n                                <span class=\"data-skeleton dimension dashboard-widget-loading-pulse\" :style=\"{width: makeRandomWidth()}\"></span>\n                            </div>\n                        </a>\n                        <a :href=\"record.oc_record_url\" target=\"_blank\" class=\"cell\" :class=\"getRecordCssClass(paginating, record)\" v-for=\"dimensionField in configuration.dimension_fields\">\n                            <div class=\"cell-data-container\">\n                                <span class=\"cell-data\" v-text=\"getDimensionFieldValue(record, dimensionField)\"></span>\n                                <span class=\"data-skeleton dimension dashboard-widget-loading-pulse\" :style=\"{width: makeRandomWidth()}\"></span>\n                            </div>\n                        </a>\n                        <template\n                            v-for=\"metricData in configuration.metrics\"\n                        >\n                            <a :href=\"record.oc_record_url\" target=\"_blank\" class=\"cell metric relative-bar-container\" :class=\"getRecordCssClass(paginating, record)\" v-if=\"metricData.displayRelativeBar\">\n                                <span class=\"relative-bar\" :style=\"getRelativeBarStyle(metricData.metric, record, metricData.color)\"></span>\n                            </a>\n                            <a\n                                :href=\"record.oc_record_url\"\n                                target=\"_blank\"\n                                class=\"cell metric\"\n                                :class=\"getRecordCssClass(paginating, record)\"\n                            >\n                                <span class=\"metric-data-container\">\n                                    <span v-text=\"getRecordValue(metricData.metric, record)\" class=\"cell-data\"></span>\n                                    <span v-if=\"metricData.displayTotals\" class=\"metric-total cell-data\" v-text=\"getRecordTotalRelativeValue(metricData.metric, record)\"></span>\n                                    <span class=\"data-skeleton metric dashboard-widget-loading-pulse\" :style=\"{width: makeRandomWidth()}\"></span>\n                                </span>\n                            </a>\n                        </template>\n                    </div>\n\n                    <div class=\"row\" v-if=\"loadedValue && loadedValue && !loadedValue.length\">\n                        <div class=\"cell\" :style=\"fullWidthColumnStyle\" :class=\"{paginating: paginating}\" >\n                            <div class=\"cell-data-container\">\n                                <span class=\"cell-data\">\n                                    <?= __(\"No records found\") ?>\n                                </span>\n                                <span class=\"data-skeleton dimension dashboard-widget-loading-pulse\" :style=\"{width: makeRandomWidth()}\"></span>\n                            </div>\n                        </div>\n                    </div>\n                </template>\n                <template v-else>\n                    <div class=\"row\" v-for=\"n in 3\">\n                        <div class=\"cell\">\n                            <span class=\"data-skeleton force dimension dashboard-widget-loading-pulse\" :style=\"{width: makeRandomWidth()}\"></span>\n                        </div>\n                        <div class=\"cell\" v-for=\"dimensionField in configuration.dimension_fields\">\n                            <span class=\"data-skeleton force dimension dashboard-widget-loading-pulse\" :style=\"{width: makeRandomWidth()}\"></span>\n                        </div>\n                        <template v-for=\"metricData in configuration.metrics\">\n                            <div class=\"cell metric relative-bar-container\" v-if=\"metricData.displayRelativeBar\">\n                            </div>\n                            <div\n                                class=\"cell metric\"\n                            >\n                                <span class=\"data-skeleton force metric dashboard-widget-loading-pulse\" :style=\"{width: makeRandomWidth()}\"></span>\n                            </div>\n                        </template>\n                    </div>\n                </template>\n            </div>\n\n            <div class=\"table-widget-pages\" v-if=\"configuration.records_per_page\">\n                <template v-if=\"!explicitLoading\">\n                    <div>\n                        <?= e(trans('system::lang.pagination.records')) ?> <span v-text=\"startRecordDisplayIndex + '-' + endRecordDisplayIndex\"></span>\n                        <?= e(trans('system::lang.pagination.of')) ?> <span v-text=\"totalRecords\"></span>.\n                        <?= e(trans('system::lang.pagination.page')) ?> <span v-text=\"currentPage+1\"></span>\n                        <?= e(trans('system::lang.pagination.of')) ?> <span v-text=\"totalPages\"></span>\n                    </div>\n                    <button\n                        class=\"table-pagination\"\n                        title=\"<?= e(trans('system::lang.pagination.prev_page')) ?>\"\n                        @click.prevent=\"onPrevPageClick\"\n                        :disabled=\"currentPage <= 0\"\n                    >\n                        <i class=\"ph ph-arrow-left\"></i>\n                    </button>\n                    <button\n                        class=\"table-pagination\"\n                        title=\"<?= e(trans('system::lang.pagination.next_page')) ?>\"\n                        @click.prevent=\"onNextPageClick\"\n                        :disabled=\"currentPage+1 >= totalPages\"\n                    >\n                        <i class=\"ph ph-arrow-right\"></i>\n                    </button>\n                </template>\n                <div v-else class=\"pagination-skeleton dashboard-widget-loading-pulse\">\n                    <span class=\"data-skeleton\"></span>\n                    <span class=\"data-skeleton\"></span>\n                    <span class=\"data-skeleton\"></span>\n                </div>\n            </div>\n        </div>\n\n        <dashboard-component-dashboard-widget-error\n            v-if=\"error\"\n            :store=\"store\"\n            @configure=\"$emit('configure')\"\n        ></dashboard-component-dashboard-widget-error>\n    </div>\n</div>"
  },
  {
    "path": "modules/dashboard/vuecomponents/dashboard/partials/_widget-text-notice.php",
    "content": "<div\n    class=\"dashboard-report-widget-notice\"\n    :class=\"{'loading': loading}\"\n>\n    <div class=\"widget-body\">\n        <h3 v-text=\"widget.configuration.title\"></h3>\n        <p v-if=\"widget.configuration.notice\" v-text=\"widget.configuration.notice\"></p>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/dashboard/widgets/Dash.php",
    "content": "<?php namespace Dashboard\\Widgets;\n\nuse App;\nuse Lang;\nuse Backend\\Classes\\WidgetBase;\nuse Dashboard\\Classes\\DashReport;\nuse Dashboard\\Classes\\DashManager;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse Dashboard\\Classes\\ReportDimension;\nuse Dashboard\\Classes\\ReportMetric;\nuse Dashboard\\Models\\Dashboard as DashboardModel;\nuse October\\Rain\\Element\\ElementHolder;\nuse SystemException;\n\n/**\n * Dash widget for building dashboards\n *\n * @package october\\dashboard\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Dash extends WidgetBase\n{\n    use \\Dashboard\\Widgets\\Dash\\HasWidgetData;\n    use \\Dashboard\\Widgets\\Dash\\HasPropertyOptions;\n    use \\Dashboard\\Widgets\\Dash\\ReportProcessor;\n    use \\Dashboard\\Widgets\\Dash\\HasReportWidgets;\n\n    const INTERVAL_TYPE_DASHBOARD = 'dashboard';\n    const INTERVAL_TYPE_YEAR = 'year';\n    const INTERVAL_TYPE_QUARTER = 'quarter';\n    const INTERVAL_TYPE_MONTH = 'month';\n    const INTERVAL_TYPE_WEEK = 'week';\n    const INTERVAL_TYPE_DAYS = 'days';\n    const INTERVAL_TYPE_HOUR = 'hour';\n\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var array name for the dash\n     */\n    public $name;\n\n    /**\n     * @var array code as a unique identifier for the dash\n     */\n    public $code;\n\n    /**\n     * @var array reports configuration\n     */\n    public $reports;\n\n    /**\n     * @var bool canCreateAndEdit the dash\n     */\n    public $canCreateAndEdit;\n\n    /**\n     * @var bool manageUrl for updating the dash\n     */\n    public $manageUrl;\n\n    /**\n     * @var bool showInterval toggles the interval selector for date ranges\n     */\n    public $showInterval = true;\n\n    /**\n     * @var string defaultStart specifies default start keyword: today, week, month, quarter, year\n     */\n    public $defaultStart = 'month';\n\n    /**\n     * @var string defaultEnd specifies default end keyword: today, week, month, quarter, year\n     */\n    public $defaultEnd = 'today';\n\n    /**\n     * @var string defaultInterval specifies default grouping interval: day, week, month, quarter, year\n     */\n    public $defaultInterval = 'day';\n\n    /**\n     * @var string defaultCompare specifies default compare mode: none, prev-period, prev-year\n     */\n    public $defaultCompare = 'none';\n\n    /**\n     * @var bool canMakeDefault\n     */\n    public $canMakeDefault;\n\n    /**\n     * @var bool canResetLayout\n     */\n    public $canResetLayout;\n\n    /**\n     * @var bool isCustom is true when the reports configuration has come from\n     * a saved/custom data source.\n     */\n    public $isCustom = false;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'dash';\n\n    /**\n     * @var boolean reportsDefined determines if report definitions have been created.\n     */\n    protected $reportsDefined = false;\n\n    /**\n     * @var array allReports used in this dash.\n     * @see \\Backend\\Classes\\DashReport\n     */\n    protected $allReports = [];\n\n    /**\n     * @var ?array allRows used in this dash.\n     */\n    protected $allRows = null;\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'name',\n            'code',\n            'reports',\n            'isCustom',\n            'manageUrl',\n            'showInterval',\n            'defaultStart',\n            'defaultEnd',\n            'defaultInterval',\n            'defaultCompare',\n            'canCreateAndEdit',\n            'canMakeDefault',\n            'canResetLayout',\n        ]);\n\n        $this->controller->registerVueComponent(\\Backend\\VueComponents\\Inspector::class);\n        $this->controller->registerVueComponent(\\Dashboard\\VueComponents\\Dashboard::class);\n\n        $widgetClasses = DashManager::instance()->listVueReportWidgetClasses();\n        foreach ($widgetClasses as $widgetClassName) {\n            $this->controller->registerVueComponent($widgetClassName);\n        }\n\n        $this->initReportWidgetsConcern();\n    }\n\n    /**\n     * bindToController ensure reports are defined and report widgets are registered so they\n     * can also be bound to the controller this allows their AJAX features to operate.\n     * @return void\n     */\n    public function bindToController()\n    {\n        $this->defineDashReports();\n        parent::bindToController();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/controls/control-dashwidget.js', ['type' => 'module']);\n        $this->addJs('/modules/backend/assets/vendor/daterangepicker/daterangepicker.js');\n        $this->addCss('/modules/backend/assets/vendor/daterangepicker/daterangepicker.css');\n    }\n\n    /**\n     * render this widget along with its collection of report widgets.\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        return $this->makePartial('dash');\n    }\n\n    /**\n     * prepareVars prepares the dash data\n     */\n    protected function prepareVars()\n    {\n        $this->vars['initialState'] = $this->loadInitialState();\n    }\n\n    /**\n     * defineDashReports creates a flat array of dash reports from the configuration\n     * and slots reports in to their respective tabs\n     */\n    protected function defineDashReports()\n    {\n        if ($this->reportsDefined) {\n            return;\n        }\n\n        /**\n         * @event backend.dash.extendReportsBefore\n         * Called before the dash reports are defined\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.dash.extendReportsBefore', function ((\\Dashboard\\Widgets\\Dash) $widget) {\n         *         // You should always check to see if you're extending correct model/controller\n         *         if (!$widget->model instanceof \\Foo\\Example\\Models\\Bar) {\n         *             return;\n         *         }\n         *\n         *         // Add a new report named example_report\n         *         $widget->addReport('example_report', [\n         *             'label' => 'Example report',\n         *             'type' => 'text'\n         *         ]);\n         *     });\n         *\n         * Or\n         *\n         *     $dashWidget->bindEvent('dash.extendReportsBefore', function () use ((\\Dashboard\\Widgets\\Dash $dashWidget)) {\n         *         // You should always check to see if you're extending correct model/controller\n         *         if (!$widget->model instanceof \\Foo\\Example\\Models\\Bar) {\n         *             return;\n         *         }\n         *\n         *         // Add a new report named example_report\n         *         $widget->addReport('example_report', [\n         *             'label' => 'Example report',\n         *             'type' => 'text'\n         *         ]);\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.dash.extendReportsBefore');\n\n        if (!isset($this->reports) || !is_array($this->reports)) {\n            $this->reports = [];\n        }\n\n        $this->processOverrideFromDatabase();\n\n        if ($this->isCustom) {\n            $this->addReportsFromCustomDataSource($this->reports);\n        }\n        else {\n            $this->addReports($this->reports);\n        }\n\n        /**\n         * @event backend.dash.extendReports\n         * Called after the dash reports are defined\n         *\n         * Example usage:\n         *\n         *     Event::listen('backend.dash.extendReports', function ((\\Dashboard\\Widgets\\Dash) $widget) {\n         *         // Only for the User controller\n         *         if (!$widget->getController() instanceof \\RainLab\\User\\Controllers\\Users) {\n         *             return;\n         *         }\n         *\n         *         // Only for the User model\n         *         if (!$widget->model instanceof \\RainLab\\User\\Models\\User) {\n         *             return;\n         *         }\n         *\n         *         // Add an extra birthday report\n         *         $widget->addReports([\n         *             'birthday' => [\n         *                 'label'   => 'Birthday',\n         *                 'type'    => 'datepicker'\n         *             ]\n         *         ]);\n         *\n         *         // Remove a Surname report\n         *         $widget->removeReport('surname');\n         *     });\n         *\n         * Or\n         *\n         *     $dashWidget->bindEvent('dash.extendReports', function () use ((\\Dashboard\\Widgets\\Dash $dashWidget)) {\n         *         // Only for the User controller\n         *         if (!$widget->getController() instanceof \\RainLab\\User\\Controllers\\Users) {\n         *             return;\n         *         }\n         *\n         *         // Only for the User model\n         *         if (!$widget->model instanceof \\RainLab\\User\\Models\\User) {\n         *             return;\n         *         }\n         *\n         *         // Add an extra birthday report\n         *         $widget->addReports([\n         *             'birthday' => [\n         *                 'label'   => 'Birthday',\n         *                 'type'    => 'datepicker'\n         *             ]\n         *         ]);\n         *\n         *         // Remove a Surname report\n         *         $widget->removeReport('surname');\n         *     });\n         *\n         */\n        $this->fireSystemEvent('backend.dash.extendReports', [$this->allReports]);\n\n        // Apply post processing\n        $this->processPermissionCheck($this->allReports);\n        $this->processDashWidgetReports($this->allReports);\n        $this->processReportRows($this->allReports);\n\n        $this->reportsDefined = true;\n    }\n\n    /**\n     * addReports programmatically, used internally and for extensibility\n     * @param array $reports\n     */\n    public function addReports(array $reports): ElementHolder\n    {\n        $built = [];\n\n        foreach ($reports as $name => $config) {\n            $reportObj = $built[$name] = $this->makeDashReport($name, $config);\n\n            $this->allReports[$name] = $reportObj;\n        }\n\n        return new ElementHolder($built);\n    }\n\n    /**\n     * removeReport programmatically\n     */\n    public function removeReport($name): bool\n    {\n        if (!isset($this->allReports[$name])) {\n            return false;\n        }\n\n        unset($this->allReports[$name]);\n\n        // Also remove from allRows for custom dashboards\n        if ($this->allRows !== null) {\n            foreach ($this->allRows as $rowIndex => &$row) {\n                if (!isset($row['widgets']) || !is_array($row['widgets'])) {\n                    continue;\n                }\n\n                foreach ($row['widgets'] as $widgetIndex => $widget) {\n                    $widgetName = $widget['reportName'] ?? null;\n                    if ($widgetName === $name) {\n                        unset($this->allRows[$rowIndex]['widgets'][$widgetIndex]);\n                    }\n                }\n\n                // Re-index widgets array\n                $this->allRows[$rowIndex]['widgets'] = array_values($this->allRows[$rowIndex]['widgets']);\n            }\n\n            // Remove empty rows\n            $this->allRows = array_values(array_filter($this->allRows, function ($row) {\n                return !empty($row['widgets']);\n            }));\n        }\n\n        return true;\n    }\n\n    /**\n     * removeField programmatically\n     * @deprecated Use removeReport() instead\n     */\n    public function removeField($name): bool\n    {\n        return $this->removeReport($name);\n    }\n\n    /**\n     * addReportsFromCustomDataSource extracts the reports from a custom data source\n     */\n    protected function addReportsFromCustomDataSource(array $reports)\n    {\n        foreach ($reports as $reportRow) {\n            $widgets = $reportRow['widgets'] ?? [];\n            foreach ($widgets as $widget) {\n                $name = $widget['reportName'] ?? 'custom_report_' . str_random();\n                $this->allReports[$name] = $this->makeDashReport((string) $name, $widget);\n            }\n        }\n    }\n\n    /**\n     * makeDashReport creates a dash report object from name and configuration\n     */\n    protected function makeDashReport(string $name, $config = []): DashReport\n    {\n        $report = new DashReport([\n            'reportName' => $name,\n            'label' => $config['label'] ?? null,\n        ]);\n\n        $reportType = $config['type'] ?? null;\n        if (!is_string($reportType) && $reportType !== null) {\n            throw new SystemException(Lang::get(\n                'backend::lang.field.invalid_type',\n                ['type' => gettype($reportType)]\n            ));\n        }\n\n        if ($config) {\n            $report->useConfig($config);\n        }\n\n        if ($reportType) {\n            $report->displayAs($reportType);\n        }\n\n        return $report;\n    }\n\n    /**\n     * loadInitialState for the dashboards\n     */\n    protected function loadInitialState()\n    {\n        $widgetManager = DashManager::instance();\n        $defaultWidgetConfigs = $widgetManager->getDefaultWidgetConfigs();\n\n        return [\n            'locale' => App::getLocale(),\n            'alias' => $this->alias,\n            'colors' => [\n                '#ef4444' => Lang::get('system::lang.colors.red'),\n                '#f97316' => Lang::get('system::lang.colors.orange'),\n                '#f59e0b' => Lang::get('system::lang.colors.amber'),\n                '#84cc16' => Lang::get('system::lang.colors.lime'),\n                '#22c55e' => Lang::get('system::lang.colors.green'),\n                '#14b8a6' => Lang::get('system::lang.colors.teal'),\n                '#06b6d4' => Lang::get('system::lang.colors.cyan'),\n                '#0ea5e9' => Lang::get('system::lang.colors.sky'),\n                '#3b82f6' => Lang::get('system::lang.colors.blue'),\n                '#6366f1' => Lang::get('system::lang.colors.indigo'),\n                '#8b5cf6' => Lang::get('system::lang.colors.violet'),\n                '#ec4899' => Lang::get('system::lang.colors.pink'),\n                '#f43f5e' => Lang::get('system::lang.colors.rose'),\n                '#64748b' => Lang::get('system::lang.colors.slate')\n            ],\n            'dashboard' => [\n                'name' => $this->name,\n                'code' => $this->code,\n                'rows' => $this->allRows,\n            ],\n            'manageUrl' => $this->manageUrl,\n            'showInterval' => $this->showInterval,\n            'defaultStart' => $this->defaultStart,\n            'defaultEnd' => $this->defaultEnd,\n            'defaultInterval' => $this->defaultInterval,\n            'defaultCompare' => $this->defaultCompare,\n            'canCreateAndEdit' => $this->canCreateAndEdit,\n            'canMakeDefault' => $this->canMakeDefault,\n            'canResetLayout' => $this->canResetLayout,\n            'defaultWidgetConfigs' => $defaultWidgetConfigs,\n            'customWidgetGroups' => $widgetManager->listAllReportWidgetGroups(),\n        ];\n    }\n\n    /**\n     * onSaveDashboard handler\n     */\n    public function onSaveDashboard()\n    {\n        $definition = json_decode(post('definition'), true);\n        if (!$definition) {\n            return;\n        }\n\n        $definition = $this->cleanDefinitionForSave($definition);\n\n        (new DashboardModel)->updateDashboardPreference(\n            $this->controller,\n            $this->code,\n            $definition\n        );\n    }\n\n    /**\n     * onResetDashboard handler\n     */\n    public function onResetDashboard()\n    {\n        (new DashboardModel)->resetDashboardPreference(\n            $this->controller,\n            $this->code,\n        );\n\n        // Reset state\n        $this->reports = $this->getConfig('reports', $this->reports);\n        $this->allReports = [];\n        $this->reportsDefined = false;\n        $this->defineDashReports();\n\n        return [\n            'initialState' => $this->loadInitialState()\n        ];\n    }\n\n    /**\n     * onCommitDashboard handler\n     */\n    public function onCommitDashboard()\n    {\n        $definition = json_decode(post('definition'), true);\n        if (!$definition) {\n            return;\n        }\n\n        $definition = $this->cleanDefinitionForSave($definition);\n\n        (new DashboardModel)->updateDashboard(\n            $this->controller,\n            $this->code,\n            $definition\n        );\n    }\n\n    /**\n     * onRunDataSourceHandler handler\n     */\n    public function onRunDataSourceHandler()\n    {\n        $handlerName = (string) post('handler');\n        $widgetConfig = (array) post('widget_config');\n\n        $dataSource = $this->getRequestedDataSource($widgetConfig);\n\n        return $dataSource->runHandler($handlerName);\n    }\n\n    /**\n     * onRunCustomWidgetHandler handler\n     */\n    public function onRunCustomWidgetHandler()\n    {\n        $handlerName = post('handler');\n        $widgetConfig = post('widget_config');\n        $extraData = post('extra_data', []);\n\n        $widgetClass = $widgetConfig['widgetClass'];\n        if (!$widgetClass) {\n            throw new SystemException(\"Custom widget class [{$widgetClass}] is not set.\");\n        }\n\n        $widget = DashManager::instance()->getVueReportWidget($widgetClass, $this->controller);\n        if (!$widget) {\n            throw new SystemException(\"Widget class [{$widgetClass}] not registered.\");\n        }\n\n        $result = $widget->runHandler(\n            $widgetConfig,\n            $handlerName,\n            $extraData\n        );\n\n        return $result;\n    }\n\n    /**\n     * makeDataSource\n     */\n    protected function makeDataSource(string $dataSourceClass): ReportDataSourceBase\n    {\n        $dataSourceManager = DashManager::instance();\n        $dataSource = $dataSourceManager->getDataSource($dataSourceClass);\n        if (!$dataSource) {\n            throw new SystemException(\"Data source [{$dataSourceClass}] class is not registered.\");\n        }\n\n        return $dataSource;\n    }\n\n    /**\n     * findDimension\n     */\n    protected function findDimension(ReportDataSourceBase $dataSource, string $dimensionCode, bool $strict): ?ReportDimension\n    {\n        return ReportDimension::findDimensionByCode($dataSource->getAvailableDimensions(), $dimensionCode, $strict);\n    }\n\n    /**\n     * listAllMetrics\n     */\n    protected function listAllMetrics(ReportDataSourceBase $dataSource, string $dimensionCode): array\n    {\n        $metrics = $dataSource->getAvailableMetrics();\n        if (strlen($dimensionCode)) {\n            $dimension = $this->findDimension($dataSource, $dimensionCode, false);\n            if ($dimension) {\n                $dimensionMetrics = $dimension->getAvailableMetrics();\n                $metrics = array_merge($metrics, $dimensionMetrics);\n            }\n        }\n\n        return $metrics;\n    }\n\n    /**\n     * findMetric\n     */\n    protected function findMetric(ReportDataSourceBase $dataSource, ReportDimension $dimension, string $metricCode): ReportMetric\n    {\n        $metric = ReportMetric::findMetricByCodeStrict($dimension->getAvailableMetrics(), $metricCode, false);\n        if ($metric) {\n            return $metric;\n        }\n\n        return ReportMetric::findMetricByCodeStrict($dataSource->getAvailableMetrics(), $metricCode, true);\n    }\n\n    /**\n     * cleanDefinitionForSave removes meta data from the definition\n     * since it is not needed for storage\n     */\n    protected function cleanDefinitionForSave($definition)\n    {\n        foreach ($definition as &$row) {\n            unset($row['_unique_key']);\n\n            if (isset($row['widgets']) && is_array($row['widgets'])) {\n                foreach ($row['widgets'] as &$widget) {\n                    unset($widget['_unique_key']);\n                    unset($widget['configuration']['_dash_definition']);\n                }\n            }\n        }\n\n        return $definition;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/widgets/dash/HasPropertyOptions.php",
    "content": "<?php namespace Dashboard\\Widgets\\Dash;\n\nuse Str;\nuse Lang;\nuse Dashboard\\Classes\\DashManager;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse ApplicationException;\n\n/**\n * HasPropertyOptions concern\n */\ntrait HasPropertyOptions\n{\n    /**\n     * onInspectableGetOptions\n     */\n    public function onInspectableGetOptions()\n    {\n        // Disable asset broadcasting\n        $this->flushAssets();\n\n        $property = trim(post('inspectorProperty'));\n        if (!$property) {\n            throw new ApplicationException('The property name is not specified.');\n        }\n\n        $options = $this->getPropertyOptions($property);\n\n        // Convert to array to retain the sort order in JavaScript\n        $optionsArray = [];\n        foreach ((array) $options as $value => $title) {\n            $optionsArray[] = ['value' => $value, 'title' => Lang::get($title)];\n        }\n\n        return [\n            'options' => $optionsArray\n        ];\n    }\n\n    /**\n     * getPropertyOptions returns options for multi-option properties (drop-downs, etc.)\n     * @param string $property Specifies the property name\n     * @return array Return an array of option values and descriptions\n     */\n    public function getPropertyOptions($property)\n    {\n        $allowedDimensionTypes = post('allowed_dimension_types');\n        $allowedDimensionTypesArray = [];\n        if (strlen($allowedDimensionTypes)) {\n            $allowedDimensionTypesArray = explode(',', $allowedDimensionTypes);\n        }\n\n        if ($property === 'dataSource') {\n            return $this->getDataSources($allowedDimensionTypesArray);\n        }\n\n        if ($property === 'dimension') {\n            return $this->getDataSourceDimensions($allowedDimensionTypesArray);\n        }\n\n        if ($property === 'metric' || Str::endsWith($property, '_metric')) {\n            return $this->getRequestedDataSourceDimensionMetrics();\n        }\n\n        if ($property === 'sortBy') {\n            return $this->getDataSourceSortByOptions();\n        }\n\n        if ($property === 'dimension_fields') {\n            return $this->getRequestedDataSourceDimensionFields();\n        }\n\n        if ($property === 'filter_attribute') {\n            return $this->getRequestedDataSourceFilterAttributes();\n        }\n\n        return [];\n    }\n\n    /**\n     * getDataSources\n     */\n    private function getDataSources(array $allowedDimensionTypesArray)\n    {\n        $dataSourceManager = DashManager::instance();\n        $dataSourceClasses = $dataSourceManager->listDataSourceClasses();\n\n        $result = [];\n        foreach ($dataSourceClasses as $className => $displayName) {\n            $allowedDimensions = $this->getDataSourceDimensions($allowedDimensionTypesArray, $className);\n            if (!count($allowedDimensions)) {\n                continue;\n            }\n\n            $result[$className] = $displayName;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getDataSourceDimensions\n     */\n    private function getDataSourceDimensions(array $allowedDimensionTypesArray, ?string $dataSourceClass = null)\n    {\n        $dataSourceClass = $dataSourceClass ?? post('dataSource');\n        if (!strlen($dataSourceClass)) {\n            return [];\n        }\n\n        $dimensionsLimited = count($allowedDimensionTypesArray) > 0;\n        $dataSource = $this->makeDataSource($dataSourceClass);\n        $dimensions = $dataSource->getAvailableDimensions();\n        $result = [];\n        foreach ($dimensions as $dimension) {\n            $dimensionType = $dimension->getDimensionType();\n            if (\n                $dimensionsLimited &&\n                (strlen($dimensionType) && !in_array($dimensionType, $allowedDimensionTypesArray))\n            ) {\n                continue;\n            }\n\n            if (!$dimensionsLimited && strlen($dimensionType)) {\n                continue;\n            }\n\n            $result[$dimension->getCode()] = $dimension->getDisplayName();\n        }\n\n        return $result;\n    }\n\n    /**\n     * getRequestedDataSourceDimensionMetrics\n     */\n    private function getRequestedDataSourceDimensionMetrics()\n    {\n        $dataSourceClass = post('dataSource');\n        $dimensionCode = post('dimension');\n\n        if (!strlen($dataSourceClass) || !strlen($dimensionCode)) {\n            return [];\n        }\n\n        $dataSource = $this->makeDataSource($dataSourceClass);\n        return $this->getDataSourceDimensionMetrics($dataSource, $dimensionCode);\n    }\n\n    /**\n     * getDataSourceDimensionMetrics\n     */\n    private function getDataSourceDimensionMetrics(ReportDataSourceBase $dataSource, string $dimensionCode): array\n    {\n        $allMetrics = $this->listAllMetrics($dataSource, $dimensionCode);\n        $result = [];\n        foreach ($allMetrics as $metric) {\n            $result[$metric->getCode()] = Lang::get($metric->getDisplayName());\n        }\n\n        return $result;\n    }\n\n    /**\n     * getDataSourceSortByOptions\n     */\n    private function getDataSourceSortByOptions()\n    {\n        $dimensionCode = post('dimension');\n        $metricsConfig = post('metrics');\n        $dataSourceClass = post('dataSource');\n\n        if (!$dimensionCode || !$metricsConfig) {\n            return [];\n        }\n\n        $dataSource = $this->makeDataSource($dataSourceClass);\n        $dimension = $this->findDimension($dataSource, $dimensionCode, false);\n        if (!$dimension) {\n            return [];\n        }\n\n        $result = [\n            'oc_dimension' => Lang::get($dimension->getDisplayName()),\n        ];\n\n        if ($dimension->isDate()) {\n            return $result;\n        }\n\n        foreach ($metricsConfig as $metricConfig) {\n            $metric = $this->findMetric($dataSource, $dimension, $metricConfig['metric']);\n            $result['oc_metric-' . $metric->getCode()] = Lang::get($metric->getDisplayName());\n        }\n\n        $fields = $dimension->getDimensionFields();\n        foreach ($fields as $field) {\n            $result[$field->getCode()] = Lang::get($field->getDisplayName());\n        }\n\n        return $result;\n    }\n\n\n    /**\n     * getRequestedDataSourceFilterAttributes\n     */\n    private function getRequestedDataSourceFilterAttributes()\n    {\n        $dataSourceClass = post('dataSource');\n        $dimensionCode = post('dimension');\n        $dataSource = $this->makeDataSource($dataSourceClass);\n        $dimension = $this->findDimension($dataSource, $dimensionCode, false);\n        if (!$dimension) {\n            return [];\n        }\n\n        $result = [];\n        if (!$dimension->isDate()) {\n            // Date dimensions can't be filtered. They must use the\n            // dashboard or widget interval settings.\n            $result['oc_dimension'] = Lang::get($dimension->getDisplayName());\n        }\n\n        $dimensionFields = $this->getRequestedDataSourceDimensionFields(true);\n        foreach ($dimensionFields as $code => $title) {\n            $result[$code] = $title;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getRequestedDataSourceDimensionFields\n     */\n    private function getRequestedDataSourceDimensionFields($filterableOnly = false)\n    {\n        $dataSourceClass = post('dataSource');\n        $dimensionCode = post('dimension');\n\n        if (!strlen($dataSourceClass) || !strlen($dimensionCode)) {\n            return [];\n        }\n\n        $dataSource = $this->makeDataSource($dataSourceClass);\n        $dimension = $this->findDimension($dataSource, $dimensionCode, false);\n        if (!$dimension) {\n            return [];\n        }\n\n        $fields = $dimension->getDimensionFields();\n        $result = [];\n        foreach ($fields as $field) {\n            if (!($filterableOnly && !$field->getIsFilterable())) {\n                $result[$field->getCode()] = Lang::get($field->getDisplayName());\n            }\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/widgets/dash/HasReportWidgets.php",
    "content": "<?php namespace Dashboard\\Widgets\\Dash;\n\nuse Lang;\nuse Dashboard\\Classes\\DashReport;\nuse Dashboard\\Classes\\DashManager;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\nuse SystemException;\n\n/**\n * HasDashWidgets concern\n */\ntrait HasReportWidgets\n{\n    /**\n     * @var array reportWidgets collection of all reports widgets used in this dash.\n     */\n    protected $reportWidgets = [];\n\n    /**\n     * @var \\Backend\\Classes\\DashManager dashManager\n     */\n    protected $dashManager;\n\n    /**\n     * initReportWidgetsConcern\n     */\n    protected function initReportWidgetsConcern()\n    {\n        $this->dashManager = DashManager::instance();\n    }\n\n    /**\n     * makeDashReportWidget object from a dash report object\n     */\n    protected function makeDashReportWidget(DashReport $report)\n    {\n        if (isset($this->reportWidgets[$report->reportName])) {\n            return $this->reportWidgets[$report->reportName];\n        }\n\n        // Create dash widget instance\n        $widgetProps = $report->config;\n        $widgetProps['alias'] = $this->alias . studly_case($this->nameToId($report->reportName));\n\n        $widgetClass = $widgetProps['widget'] ?? ($widgetProps['widgetClass'] ?? null);\n        $widgetClass = $this->dashManager->resolveReportWidget($widgetClass);\n        if (!class_exists($widgetClass)) {\n            throw new SystemException(Lang::get(\n                'backend::lang.widget.not_registered',\n                ['name' => $widgetClass]\n            ));\n        }\n\n        $widget = new $widgetClass($this->controller, $report, $widgetProps);\n\n        return $this->reportWidgets[$report->reportName] = $widget;\n    }\n\n    /**\n     * isReportWidget checks if a report type is a widget or not\n     */\n    protected function isReportWidget(string $reportType): bool\n    {\n        if (!$reportType) {\n            return false;\n        }\n\n        if (strpos($reportType, '\\\\')) {\n            return true;\n        }\n\n        $widgetClass = $this->dashManager->resolveReportWidget($reportType);\n        if (!class_exists($widgetClass)) {\n            return false;\n        }\n\n        if (\n            is_subclass_of($widgetClass, \\Dashboard\\Classes\\ReportWidgetBase::class) ||\n            is_subclass_of($widgetClass, \\Dashboard\\Classes\\VueReportWidgetBase::class)\n        ) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * isVueReportWidget returns true if the widget is a vue report widget\n     */\n    protected function isVueReportWidget(string $reportType): bool\n    {\n        return $this->isReportWidget($reportType) &&\n            $this->dashManager->isVueReportWidget($reportType);\n    }\n\n    /**\n     * getReportWidgets for the instance\n     */\n    public function getReportWidgets(): array\n    {\n        return $this->reportWidgets;\n    }\n\n    /**\n     * getReportWidget returns a specified report widget\n     * @param string $report\n     */\n    public function getReportWidget($report)\n    {\n        if (isset($this->reportWidgets[$report])) {\n            return $this->reportWidgets[$report];\n        }\n\n        return null;\n    }\n\n    /**\n     * nameToId is a helper method to convert a report name to a valid ID attribute\n     * @param $input\n     * @return string\n     */\n    public function nameToId($input)\n    {\n        return HtmlHelper::nameToId($input);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/widgets/dash/HasWidgetData.php",
    "content": "<?php namespace Dashboard\\Widgets\\Dash;\n\nuse Str;\nuse Lang;\nuse Dashboard\\Classes\\DashReport;\nuse Dashboard\\Classes\\DashManager;\nuse Dashboard\\Classes\\ReportFetchData;\nuse Dashboard\\Classes\\ReportDataSourceBase;\nuse SystemException;\n\n/**\n * HasWidgetData concern\n */\ntrait HasWidgetData\n{\n    /**\n     * onGetWidgetData\n     */\n    public function onGetWidgetData()\n    {\n        $fetchData = new ReportFetchData;\n        $fetchData->fillFromPost();\n\n        $dataSource = $this->getRequestedDataSource(post('widget_config'));\n        $fetchDataResult = $dataSource->getData($fetchData);\n\n        $prevIntervalFetchDataResult = null;\n        if ($compareData = $fetchData->makeCompareData()) {\n            $prevIntervalFetchDataResult = $dataSource->getData($compareData);\n        }\n\n        $metricsData = $this->getDataSourceDimensionMetricData($dataSource, $fetchData->dimensionCode);\n        $dimensionData = $this->getDataSourceDimensionAndFields($dataSource, $fetchData->dimensionCode);\n        $dimensionFieldsData = $this->getDataSourceDimensionFieldsData($dataSource, $fetchData->dimensionCode);\n\n        $currentMetricTotals = $fetchDataResult->getMetricTotals();\n        $formattedTotals = $this->formatMetricTotals($dataSource, $fetchData->dimensionCode, $currentMetricTotals);\n        $formattedRows = $this->formatRowMetricValues($dataSource, $fetchData->dimensionCode, $fetchDataResult->getRows());\n\n        $result = [\n            'current' => [\n                'widget_data' => $formattedRows,\n                'total_records' => $fetchDataResult->getTotalRecords(),\n                'metric_totals' => $currentMetricTotals,\n                'metric_totals_formatted' => $formattedTotals,\n            ],\n            'metrics_data' => $metricsData,\n            'dimension_fields_data' => $dimensionFieldsData,\n            'dimension_data' => $dimensionData\n        ];\n\n        if ($prevIntervalFetchDataResult) {\n            $prevMetricTotals = $prevIntervalFetchDataResult->getMetricTotals();\n            $result['previous'] = [\n                // 'widget_data' => $prevIntervalFetchDataResult->getRows(), // Not yet supported\n                'total_records' => $prevIntervalFetchDataResult->getTotalRecords(),\n                'metric_totals' => $prevMetricTotals,\n                'metric_totals_formatted' => $this->formatMetricTotals($dataSource, $fetchData->dimensionCode, $prevMetricTotals),\n            ];\n\n            $result['prev_date_start'] = $fetchData->compareDateStart->toDateString();\n            $result['prev_date_end'] = $fetchData->compareDateEnd->toDateString();\n        }\n\n        return ajax()->force($result);\n    }\n\n    /**\n     * onGetWidgetCustomData\n     */\n    public function onGetWidgetCustomData()\n    {\n        $fetchData = new ReportFetchData;\n        $fetchData->fillFromPost();\n\n        $widgetClass = post('widget_config[widgetClass]');\n        if (!$widgetClass) {\n            throw new SystemException(\"Custom widget class [{$widgetClass}] is not set.\");\n        }\n\n        $widget = DashManager::instance()->getVueReportWidget(\n            $widgetClass,\n            $this->controller\n        );\n\n        if (!$widget) {\n            throw new SystemException(\"Widget class [{$widgetClass}] not registered.\");\n        }\n\n        $data = $widget->getData($fetchData);\n\n        return ajax()->force(['data' => $data]);\n    }\n\n    /**\n     * onGetWidgetStaticContent\n     */\n    public function onGetWidgetStaticContent()\n    {\n        $widgetConfig = (array) post('widget_config');\n        $reportName = $widgetConfig['reportName'] ?? null;\n        if (!isset($widgetConfig['type']) || $widgetConfig['type'] !== 'static') {\n            return false;\n        }\n\n        $widget = $this->getConfiguredReportWidget();\n        if (!$widget) {\n            $reportName = post('widget_config.reportName');\n            throw new SystemException(\"Report [{$reportName}] is not registered\");\n        }\n\n        $properties = $this->getWidgetPropertiesForBrowser($widget);\n\n        return ajax()->force([\n            'result' => $widget->render(),\n            'properties' => $properties\n        ]);\n    }\n\n    /**\n     * getWidgetPropertiesForBrowser\n     */\n    protected function getWidgetPropertiesForBrowser($widget): array\n    {\n        $result = [];\n        $properties = $widget->defineProperties();\n\n        foreach ($properties as $name => $params) {\n            $property = [\n                'property' => $name,\n                'title' => isset($params['title']) ? __($params['title']) : $name,\n                'type' => $params['type'] ?? 'string'\n            ];\n\n            foreach ($params as $name => $value) {\n                if (isset($property[$name])) {\n                    continue;\n                }\n\n                $property[$name] = !is_array($value) ? __($value) : $value;\n            }\n\n            $result[] = $property;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getConfiguredReportWidget\n     */\n    protected function getConfiguredReportWidget()\n    {\n        $widgetConfig = (array) post('widget_config');\n\n        $reportName = $widgetConfig['reportName']\n            ?? 'custom_report_'.post('_unique_key', Str::random());\n\n        $widget = $this->getReportWidget($reportName);\n\n        if (!$widget) {\n            $widget = $this->makeDashReportWidget(new DashReport([\n                'reportName' => $reportName\n            ] + $widgetConfig));\n        }\n        else {\n            $widgetProps = array_except($widgetConfig, [\n                'type',\n                'reportName',\n                'widgetClass',\n                '_dash_definition'\n            ]);\n            $widget->setProperties($widgetProps);\n        }\n\n        return $widget;\n    }\n\n    /**\n     * getDataSourceDimensionMetricData\n     */\n    private function getDataSourceDimensionMetricData(ReportDataSourceBase $dataSource, string $dimensionCode): array\n    {\n        $result = [];\n        $allMetrics = $this->listAllMetrics($dataSource, $dimensionCode);\n        foreach ($allMetrics as $metric) {\n            $result[$metric->getCode()] = [\n                'label' => Lang::get($metric->getDisplayName()),\n                'format_options' => $metric->getIntlFormatOptions(),\n                'has_display_formatter' => $metric->hasDisplayFormatter()\n            ];\n        }\n\n        return $result;\n    }\n\n    /**\n     * formatMetricTotals applies display formatters to metric totals\n     */\n    private function formatMetricTotals(ReportDataSourceBase $dataSource, string $dimensionCode, array $metricTotals): array\n    {\n        $result = [];\n        $allMetrics = $this->listAllMetrics($dataSource, $dimensionCode);\n\n        foreach ($metricTotals as $metricCode => $value) {\n            $metric = \\Dashboard\\Classes\\ReportMetric::findMetricByCode($allMetrics, $metricCode);\n            if ($metric && $metric->hasDisplayFormatter() && $value !== null) {\n                $result[$metricCode] = $metric->formatDisplayValue($value);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * formatRowMetricValues adds formatted display values to rows for metrics with display formatters\n     */\n    private function formatRowMetricValues(ReportDataSourceBase $dataSource, string $dimensionCode, array $rows): array\n    {\n        $allMetrics = $this->listAllMetrics($dataSource, $dimensionCode);\n        $metricsWithFormatter = [];\n\n        foreach ($allMetrics as $metric) {\n            if ($metric->hasDisplayFormatter()) {\n                $metricsWithFormatter[$metric->getCode()] = $metric;\n            }\n        }\n\n        if (empty($metricsWithFormatter)) {\n            return $rows;\n        }\n\n        foreach ($rows as $row) {\n            foreach ($metricsWithFormatter as $metricCode => $metric) {\n                $columnName = 'oc_metric_' . $metricCode;\n                if (property_exists($row, $columnName) && $row->$columnName !== null) {\n                    $formattedColumnName = $columnName . '_formatted';\n                    $row->$formattedColumnName = $metric->formatDisplayValue($row->$columnName);\n                }\n            }\n        }\n\n        return $rows;\n    }\n\n    /**\n     * getDataSourceDimensionFieldsData\n     */\n    private function getDataSourceDimensionFieldsData($dataSource, $dimensionCode)\n    {\n        $dimension = $this->findDimension($dataSource, $dimensionCode, false);\n        if (!$dimension) {\n            return [];\n        }\n\n        $fields = $dimension->getDimensionFields();\n        $result = [];\n        foreach ($fields as $field) {\n            $result[$field->getCode()] = Lang::get($field->getDisplayName());\n        }\n\n        return $result;\n    }\n\n    /**\n     * getDataSourceDimensionAndFields\n     */\n    private function getDataSourceDimensionAndFields(ReportDataSourceBase $dataSource, string $dimensionCode): array\n    {\n        $result = [];\n\n        $dimension = $this->findDimension($dataSource, $dimensionCode, false);\n        if ($dimension) {\n            $result[$dimension->getDataSetColumName()] = Lang::get($dimension->getDisplayName());\n        }\n\n        return $result;\n    }\n\n    /**\n     * getRequestedDataSource\n     */\n    protected function getRequestedDataSource(array $widgetConfig): ReportDataSourceBase\n    {\n        if (!isset($widgetConfig['dataSource'])) {\n            throw new SystemException('Report widget data source class is not set');\n        }\n\n        return $this->makeDataSource($widgetConfig['dataSource']);\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/widgets/dash/ReportProcessor.php",
    "content": "<?php namespace Dashboard\\Widgets\\Dash;\n\nuse BackendAuth;\nuse Backend\\Classes\\WidgetManager;\nuse Dashboard\\Models\\Dashboard as DashboardModel;\n\n/**\n * ReportProcessor concern\n */\ntrait ReportProcessor\n{\n    /**\n     * processOverrideFromDatabase\n     */\n    protected function processOverrideFromDatabase()\n    {\n        // @todo check if dash can be customized, if this is actually\n        // enabled and allowed i.e not a static dash\n\n        $this->isCustom = false;\n        $this->allRows = null;\n\n        $savedDash = (new DashboardModel)->fetchDashboard(\n            $this->controller,\n            $this->code\n        );\n\n        if ($savedDash && $savedDash->definition) {\n            $this->reports = $this->allRows = $savedDash->definition;\n            $this->isCustom = true;\n        }\n    }\n\n    /**\n     * processPermissionCheck check if user has permissions to show the report\n     * and removes it if permission is denied\n     */\n    protected function processPermissionCheck(array $reports)\n    {\n        // For custom dashboards, get the list of permitted widgets once\n        // listReportWidgets() filters widgets by permission\n        $permittedWidgets = $this->isCustom\n            ? WidgetManager::instance()->listReportWidgets()\n            : null;\n\n        foreach ($reports as $reportName => $report) {\n            // Check explicit report permissions\n            if (\n                $report->permissions &&\n                !BackendAuth::userHasAccess($report->permissions, false)\n            ) {\n                $this->removeReport($reportName);\n                continue;\n            }\n\n            // For custom dashboards, also check widget class permissions\n            if ($permittedWidgets !== null) {\n                $widgetClass = $report->configuration['widgetClass'] ?? null;\n                if ($widgetClass && !isset($permittedWidgets[$widgetClass])) {\n                    $this->removeReport($reportName);\n                }\n            }\n        }\n    }\n\n    /**\n     * processDashWidgetReports processes dash widgets from flexible source (yaml or custom)\n     */\n    protected function processDashWidgetReports(array $reports)\n    {\n        if ($this->isCustom) {\n            $this->processDashWidgetReportsFromCustomData($reports);\n        }\n        else {\n            $this->processDashWidgetReportsFromYaml($reports);\n        }\n    }\n\n    /**\n     * processDashWidgetReportsFromCustom locates dash widgets from a custom data source\n     */\n    protected function processDashWidgetReportsFromCustomData(array $reports)\n    {\n        foreach ($reports as $report) {\n            $newConfig = [\n                'label' => $report->configuration['title'] ?? null,\n                ...(array) $report->configuration\n            ];\n\n            $report->useConfig($newConfig);\n\n            if (!in_array((string) $report->type, ['static', 'widget'])) {\n                continue;\n            }\n\n            // Create form widget instance and bind to controller\n            $this->makeDashReportWidget($report)->bindToController();\n        }\n    }\n\n    /**\n     * processDashWidgetReports will mutate reports types that are registered as widgets,\n     * convert their type to 'widget' and internally allocate the widget object\n     */\n    protected function processDashWidgetReportsFromYaml(array $reports)\n    {\n        foreach ($reports as $report) {\n            // Types static and widget are reserved\n            if (\n                in_array($report->type, ['static', 'widget']) ||\n                !$this->isReportWidget((string) $report->type)\n            ) {\n                continue;\n            }\n\n            $newConfig = ['widget' => $report->type];\n\n            if (is_array($report->config)) {\n                $newConfig += $report->config;\n            }\n\n            $widgetType = $this->isVueReportWidget($report->type)\n                ? 'widget'\n                : 'static';\n\n            $report->useConfig($newConfig)->displayAs($widgetType);\n\n            // Create form widget instance and bind to controller\n            $this->makeDashReportWidget($report)->bindToController();\n        }\n    }\n\n    /**\n     * processReportRows\n     */\n    protected function processReportRows(array $reports)\n    {\n        // Already loaded from saved dash\n        if ($this->allRows) {\n            return;\n        }\n\n        $rows = [];\n\n        foreach ($reports as $report) {\n            $extraConfig = [\n                'metrics' => $this->processReportRowWidgetMetrics((array) $report->metrics),\n                'widgetClass' => $report->widget,\n            ];\n\n            if ($report->type === 'widget') {\n                $extraConfig['componentName'] = strtolower(str_replace('\\\\', '-', $report->widget));\n            }\n\n            $report->configuration($extraConfig + $report->config);\n\n            $rows[$report->row]['widgets'][] = $report;\n        }\n\n        $this->allRows = array_values($rows);\n    }\n\n    /**\n     * processReportRowWidgetMetrics\n     */\n    protected function processReportRowWidgetMetrics($metrics)\n    {\n        $result = [];\n\n        foreach ($metrics as $name => $config) {\n            $result[] = ['metric' => $name] + $config;\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/widgets/dash/assets/js/classes/dash-store.js",
    "content": "import Helpers from '../../../../../assets/js/classes/helpers.js';\nimport DataSource from '../../../../../assets/js/classes/data-source.js';\n\n/**\n * DashStore class for dashboard state management.\n */\nexport default class DashStore\n{\n    state = {};\n\n    constructor(delegate) {\n        this.delegate = delegate;\n        this.dashHelpers = new Helpers;\n        this.dataSource = Vue.markRaw(new DataSource(this));\n\n        this.state = {\n            locale: '',\n            alias: null,\n            dashboard: null,\n            colors: {},\n            range: {\n                dateStart: null,\n                dateEnd: null,\n                interval: 'day'\n            },\n            showInterval: true,\n            intervalName: null,\n            compareMode: 'none',\n            editMode: false,\n            canCreateAndEdit: false,\n            canMakeDefault: false,\n            canResetLayout: false,\n            defaultWidgetConfigs: {},\n            customWidgetGroups: {},\n            dashboardListScrollX: null,\n\n            widgetData: {},\n            systemDataFlags: {}\n        };\n\n        this.manageUrl = null;\n        this.dashboardUniqueKey = 0;\n        this.dashboardBackup = null;\n    }\n\n    setInitialState(initialState) {\n        this.manageUrl = initialState.manageUrl;\n\n        this.state.alias = initialState.alias;\n        this.state.locale = initialState.locale;\n        this.state.colors = initialState.colors;\n        this.state.showInterval = initialState.showInterval;\n        this.state.defaultStart = initialState.defaultStart || 'month';\n        this.state.defaultEnd = initialState.defaultEnd || 'today';\n        this.state.defaultInterval = initialState.defaultInterval || 'day';\n        this.state.defaultCompare = initialState.defaultCompare || 'none';\n        this.state.canCreateAndEdit = initialState.canCreateAndEdit;\n        this.state.canMakeDefault = initialState.canMakeDefault;\n        this.state.canResetLayout = initialState.canResetLayout;\n        this.state.defaultWidgetConfigs = initialState.defaultWidgetConfigs;\n        this.state.customWidgetGroups = initialState.customWidgetGroups;\n        this.setDashboard(initialState.dashboard);\n    }\n\n    setIntervalState(intervalState) {\n        this.setQueryParams(intervalState);\n        this.delegate.setIntervalRange();\n    }\n\n    getEventHandler(name) {\n        return this.state.alias + '::' + name;\n    }\n\n    getQueryParam(name) {\n        return new URLSearchParams(window.location.search).get(name);\n    }\n\n    // setQueryParams where params can be an object or an instance of URLSearchParams\n    setQueryParams(params) {\n        var searchParams = params;\n        if (params.constructor === {}.constructor) {\n            searchParams = new URLSearchParams(window.location.search);\n            for (const [key, val] of Object.entries(params)) {\n                searchParams.set(key, val);\n            }\n        }\n\n        var newUrl = window.location.pathname,\n            queryStr = searchParams.toString();\n\n        if (queryStr) {\n            newUrl += '?' + queryStr;\n        }\n\n        if (oc.useTurbo()) {\n            oc.visit(newUrl, { action: 'swap', scroll: false });\n        }\n        else {\n            history.replaceState(null, '', newUrl);\n        }\n    }\n\n    setDashboard(dashboard) {\n        this.state.dashboard = dashboard;\n        this.initDashboardKey(dashboard);\n    }\n\n    initDashboardKey(dashboard) {\n        dashboard._unique_key = this.dashboardUniqueKey++;\n        this.dashHelpers.setUniqueKeysForDashboard(dashboard.rows);\n    }\n\n    getAvailableWidgetTypes() {\n        const result = [];\n        result.push({\n            type: 'indicator',\n            label: oc.t(\"Indicator\")\n        },\n        {\n            type: 'section-title',\n            label: oc.t(\"Section Title\"),\n            fullWidth: true\n        },\n        {\n            type: 'notice',\n            label: oc.t(\"Text Notice\"),\n            fullWidth: true\n        },\n        {\n            type: 'chart',\n            label: oc.t(\"Chart\"),\n        },\n        {\n            type: 'table',\n            label: oc.t(\"Table\"),\n        });\n\n        return result;\n    }\n\n    getValidIntervalCodes() {\n        return ['day', 'week', 'month', 'quarter', 'year'];\n    }\n\n    getValidCompareCodes() {\n        return ['prev-period', 'prev-year', 'none'];\n    }\n\n    isIntervalCodeValid(code) {\n        return this.getValidIntervalCodes().includes(code);\n    }\n\n    isCompareModeValid(mode) {\n        return this.getValidCompareCodes().includes(mode);\n    }\n\n    getCurrentDashboard() {\n        return this.state.dashboard;\n    }\n\n    setSystemDataFlag(widgetOrRow, flag, value) {\n        const uniqueKey = widgetOrRow._unique_key;\n        if (typeof this.state.systemDataFlags[uniqueKey] !== 'object') {\n            // Vue 3: Direct assignment is reactive\n            this.state.systemDataFlags[uniqueKey] = {};\n        }\n\n        // Vue 3: Direct assignment is reactive\n        this.state.systemDataFlags[uniqueKey][flag] = value;\n    }\n\n    getSystemDataFlag(widgetOrRow, flag) {\n        const uniqueKey = widgetOrRow._unique_key;\n        if (typeof this.state.systemDataFlags[uniqueKey] !== 'object') {\n            return undefined;\n        }\n\n        return this.state.systemDataFlags[uniqueKey][flag];\n    }\n\n    resetData() {\n        // this.state.widgetData = {};\n        this.state.systemDataFlags = {};\n    }\n\n    getWidgetDataForDashboard(dashboard, widgetKey) {\n        const dashboardKey = dashboard._unique_key;\n        if (dashboardKey === undefined) {\n            throw new Error(\"Dashboard unique key is undefined\");\n        }\n\n        if (this.state.widgetData[dashboardKey] === undefined) {\n            return undefined;\n        }\n\n        return this.state.widgetData[dashboardKey][widgetKey];\n    }\n\n    unsetSystemDataFlag(widgetOrRow, flag) {\n        const uniqueKey = widgetOrRow._unique_key;\n        if (typeof this.state.systemDataFlags[uniqueKey] !== 'object') {\n            return;\n        }\n\n        delete this.state.systemDataFlags[uniqueKey][flag];\n    }\n\n    startEditing() {\n        this.dashboardBackup = $.oc.vueUtils.getCleanObject(this.getCurrentDashboard());\n        this.state.editMode = true;\n    }\n\n    async resetLayout() {\n        try {\n            await oc.confirmPromise(oc.t(\"Reset layout back to default?\"));\n        }\n        catch (error) {\n            return;\n        }\n\n        // Request initial state again from server\n        const currentDashboard = this.getCurrentDashboard();\n        const response = await oc.ajax(this.getEventHandler('onResetDashboard'), {\n            progressBar: true,\n            data: {\n                _dash_definition: currentDashboard.code\n            }\n        });\n\n        this.setInitialState(response.initialState);\n\n        oc.snackbar.show(oc.t(\"The dashboard layout has been reset to default.\"));\n    }\n\n    async makeDefault() {\n        try {\n            await oc.confirmPromise(oc.t(\"Set the current layout as the default?\"));\n        }\n        catch (error) {\n            return;\n        }\n\n        // Submit this to server\n        const currentDashboard = this.getCurrentDashboard();\n        await oc.ajax(this.getEventHandler('onCommitDashboard'), {\n            progressBar: true,\n            data: {\n                _dash_definition: currentDashboard.code,\n                definition: JSON.stringify(currentDashboard.rows)\n            }\n        });\n\n        oc.snackbar.show(oc.t(\"This dashboard is now the default layout.\"));\n    }\n\n    cancelEditing() {\n        const currentDashboard = this.getCurrentDashboard();\n        if (this.dashboardBackup && this.dashboardBackup.rows && currentDashboard) {\n            // Vue 3: Direct assignment is reactive\n            currentDashboard.rows = this.dashboardBackup.rows;\n        }\n        this.state.editMode = false;\n    }\n}\n"
  },
  {
    "path": "modules/dashboard/widgets/dash/assets/js/controls/control-dashwidget.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\nimport DashStore from '../classes/dash-store.js';\n\nregisterControl('dashwidget', class extends ControlBase\n{\n    connect() {\n        this.universalDateFormat = 'YYYY-MM-DD';\n        this.vueElement = this.element.querySelector('[data-vue-template]');\n        this.store = this.createStore();\n\n        this.initDefaultQueryParameters();\n        this.setIntervalRange();\n        this.initVue();\n    }\n\n    disconnect() {\n        this.store = null;\n        if (this.app) {\n            this.app.unmount();\n        }\n    }\n\n    initVue() {\n        const { app, vm } = oc.mountVueApp(this.vueElement, {\n            data: () => ({\n                store: this.store\n            })\n        });\n\n        this.app = app;\n        this.vm = vm;\n    }\n\n    createStore() {\n        const initialState = this.element.querySelector('[data-vue-state=initial]').innerHTML;\n        const store = new DashStore(this);\n        store.setInitialState(JSON.parse(initialState));\n        return store;\n    }\n\n    initDefaultQueryParameters() {\n        // Skip interval parameters if interval is hidden\n        if (!this.store.state.showInterval) {\n            return;\n        }\n\n        const searchParams = new URLSearchParams(window.location.search);\n\n        // Validate and clean parameters\n        if (!moment(this.store.getQueryParam('start'), this.universalDateFormat, true).isValid()) {\n            searchParams.delete('start');\n        }\n\n        if (!moment(this.store.getQueryParam('end'), this.universalDateFormat, true).isValid()) {\n            searchParams.delete('end');\n        }\n\n        if (!this.store.isIntervalCodeValid(this.store.getQueryParam('interval'))) {\n            searchParams.delete('interval');\n        }\n\n        if (!this.store.isCompareModeValid(this.store.getQueryParam('compare'))) {\n            searchParams.delete('compare');\n        }\n\n        // Set defaults from dashboard configuration\n        const requiredQueryParams = {\n            start: this.resolveRangeKeyword(this.store.state.defaultStart),\n            end: this.resolveRangeKeyword(this.store.state.defaultEnd),\n            interval: this.store.state.defaultInterval,\n            compare: this.store.state.defaultCompare\n        };\n\n        let isDirty = false;\n        for (const [key, defaultValue] of Object.entries(requiredQueryParams)) {\n            if (!searchParams.has(key)) {\n                searchParams.append(key, defaultValue);\n                isDirty = true;\n            }\n        }\n\n        // Update URL if it has changed\n        if (isDirty) {\n            this.store.setQueryParams(searchParams);\n        }\n    }\n\n    setIntervalRange() {\n        let dateStart, dateEnd, interval, compareMode;\n\n        if (this.store.state.showInterval) {\n            dateStart = moment(this.store.getQueryParam('start'), this.universalDateFormat, true);\n            dateEnd = moment(this.store.getQueryParam('end'), this.universalDateFormat, true);\n            interval = this.store.getQueryParam('interval');\n            compareMode = this.store.getQueryParam('compare');\n        }\n        else {\n            dateStart = moment(this.resolveRangeKeyword(this.store.state.defaultStart), this.universalDateFormat, true);\n            dateEnd = moment(this.resolveRangeKeyword(this.store.state.defaultEnd), this.universalDateFormat, true);\n            interval = this.store.state.defaultInterval;\n            compareMode = this.store.state.defaultCompare;\n        }\n\n        this.store.state.range.dateStart = dateStart.format(this.universalDateFormat);\n        this.store.state.range.dateEnd = dateEnd.format(this.universalDateFormat);\n        this.store.state.range.interval = interval;\n        this.store.state.intervalName = this.makeIntervalName(dateStart.toDate(), dateEnd.toDate());\n        this.store.state.compareMode = compareMode;\n        this.store.resetData();\n    }\n\n    resolveRangeKeyword(keyword) {\n        switch (keyword) {\n            case 'today': return moment().format(this.universalDateFormat);\n            case 'week': return moment().startOf('isoWeek').format(this.universalDateFormat);\n            case 'month': return moment().startOf('month').format(this.universalDateFormat);\n            case 'quarter': return moment().startOf('quarter').format(this.universalDateFormat);\n            case 'year': return moment().startOf('year').format(this.universalDateFormat);\n            default: return keyword;\n        }\n    }\n\n    makeIntervalName(startDate, endDate) {\n        const startYear = startDate.getFullYear();\n        const endYear = endDate.getFullYear();\n\n        let formatterWithoutYear = new Intl.DateTimeFormat(this.store.state.locale, {\n            month: 'short',\n            day: 'numeric'\n        });\n\n        let formatterWithYear = new Intl.DateTimeFormat(this.store.state.locale, {\n            year: 'numeric',\n            month: 'short',\n            day: 'numeric'\n        });\n\n        const startFormatted = startYear === endYear\n            ? formatterWithoutYear.format(startDate)\n            : formatterWithYear.format(startDate);\n\n        const endFormatted = formatterWithYear.format(endDate);\n\n        return startFormatted + ' - ' + endFormatted;\n    }\n});\n"
  },
  {
    "path": "modules/dashboard/widgets/dash/partials/_dash.php",
    "content": "<div\n    id=\"dashboard-container\"\n    class=\"oc-dashboard-container\"\n>\n    <div\n        class=\"flex-layout-column full-height\"\n        data-control=\"dashwidget\"\n    >\n        <div data-vue-template>\n            <dashboard-component-dashboard :store=\"store\"></dashboard-component-dashboard>\n        </div>\n        <script type=\"text/template\" data-vue-state=\"initial\">\n            <?= json_encode($initialState) ?>\n        </script>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/editor/README.md",
    "content": "This document is work in progress.\n\n# Creating Editor extensions\n\nExtensions are registered using the `editor.extension.register` event in PHP:\n\n```\nEvent::listen('editor.extension.register', function () {\n    return YourEditorExtension::class;\n});\n```\n\nThe event handler must return an extension class name. Extension classes must extend the `Editor\\Classes\\ExtensionBase` class and implement all its abstract methods. The two important extension features are the **namespace** and **document types**. The namespace is a string that must uniquely identify the extension. For example \"cms\". Document types are strings which are strings describing document types the extension can handle. For example, the CMS Editor extension provides management for the `cms-page`, `cms-partial`, and other document types.\n\n## Client-side editor extensions\n\nOn the client side every extension is represented with a class which must extend the `editor.extension.base` class. The class must be registered in the `editor.extension.extension.main` module, for example `editor.extension.cms.main`.\n\nFor every document type, a client-side extension code must provide at least two classes:\n\n* document controller,\n* document editor Vue component class.\n\nDocument controllers provide client-side features specific to a single document type supported by the extension. The client-side extension class must return the list of the supported document controllers using the `listDocumentControllerClasses()` method:\n\n```\noc.Modules.register('editor.extension.cms.main', function() {\n    'use strict';\n\n    const { ExtensionBase } = oc.Modules.import('editor.extension.base');\n\n    class CmsEditorExtension extends ExtensionBase {\n        listDocumentControllerClasses() {\n            const { DocumentControllerPage } = oc.Modules.import('cms.editor.extension.documentcontroller.page');\n\n            return [DocumentControllerPage];\n        }\n    }\n\n    return CmsEditorExtension;\n});\n```\n\nDocument controller classes must extend the `editor.extension.documentcontroller.base`. Document controller classes must return the document type name they handle, and the name of the Vue component class. Example:\n\n```\noc.Modules.register('cms.editor.extension.documentcontroller.layout', function() {\n    'use strict';\n\n    const DocumentControllerBase = oc.Modules.import('editor.extension.documentcontroller.base');\n\n    class DocumentControllerPage extends DocumentControllerBase {\n        get documentType() {\n            return 'cms-page';\n        }\n\n        get vueEditorComponentName() {\n            return 'cms-editor-component-page-editor';\n        }\n    }\n```\n\nUseful methods defined in the base document controller class:\n\n* `trans(key)` - returns a translated string. Translatable strings must be registered in the Editor Extension PHP class.\n\n### Command system\n\nEditor-wide commands can be dispatched using the `store.dispatchCommand` method:\n\n```\nvar cmd = 'cms:navigator-context-menu-display';\n$.oc.editor.store.dispatchCommand(cmd, nodeData, menuItems);\n```\n\nCommands are dispatched to a document controller registered by an extension specified with the command namespace (`cms` in the example above). Document controllers can register command listeners in the `initListeners` method:\n\n```\n    initListeners() {\n        this.on(this.editorNamespace + ':navigator-context-menu-display', this.onNavigatorContextMenuDisplay);\n    }\n```\n\n### Document editor Vue components\n\nBase Vue component: 'editor.extension.documentcomponent.base'\n\nUseful computed properties of the base component:\n\n* `namespace` - namespace of the Editor extension the component belongs to, for example \"cms\".\n* `extension` - a reference to the Editor extension the component belongs to.\n* `documentType` - name of the document type the component handles.\n* `documentUri` - an instance of the editor.documenturi class. Document URIs are fully qualified document identifiers, for example \"cms:cms-page:index.htm\".\n* `store` - a reference to the Editor Store object.\n* `application` - a reference to the Editor Application object.\n\nUseful methods defined in the base component:\n\n* `ajaxRequest(handler, requestData)` - executes an AJAX request. Requests issued by component editors use a queue defined in the component. If the component Editor tab closes, all unsettled promises in the queue get cancelled.\n* `trans(key)` - returns a translated string. Translatable strings must be registered in the Editor Extension PHP class.\n\n### Accessing global Editor objects\n\n* `$.oc.editor.application` - Editor Application component\n* `$.oc.editor.store` - Editor Store object"
  },
  {
    "path": "modules/editor/ServiceProvider.php",
    "content": "<?php namespace Editor;\n\nuse Backend;\nuse Backend\\Models\\UserRole;\nuse October\\Rain\\Support\\ModuleServiceProvider;\n\n/**\n * ServiceProvider for Editor module\n */\nclass ServiceProvider extends ModuleServiceProvider\n{\n    /**\n     * register the service provider.\n     */\n    public function register()\n    {\n        parent::register('editor');\n\n        $this->registerSingletons();\n    }\n\n    /**\n     * boot the module events.\n     */\n    public function boot()\n    {\n        parent::boot('editor');\n    }\n\n    /**\n     * registerSingletons\n     */\n    protected function registerSingletons()\n    {\n        $this->app->singleton('editor.extensions', \\Editor\\Classes\\ExtensionManager::class);\n    }\n\n    /**\n     * registerNavigation\n     */\n    public function registerNavigation()\n    {\n        return [\n            'editor' => [\n                'label' => 'editor::lang.editor.menu_label',\n                'icon' => 'icon-pencil',\n                'iconSvg' => 'modules/editor/assets/images/editor-icon.svg',\n                'url' => Backend::url('editor'),\n                'order' => 90,\n                'permissions' => [\n                    'editor'\n                ]\n            ]\n        ];\n    }\n\n    /**\n     * registerPermissions\n     */\n    public function registerPermissions()\n    {\n        return [\n            'editor' => [\n                'label' => 'Access the Editor Tool',\n                'comment' => 'editor::lang.permissions.access_editor',\n                'tab' => 'Editor',\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 100\n            ],\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/editor/assets/css/editor.css",
    "content": ".editor-page .editor-panel{padding:20px}.editor-page .editor-padding-top{padding-top:20px}.editor-page .editor-margin-top{margin-top:20px}.editor-page .editor-min-document-content-height{min-height:500px}.editor-page .component-backend-document.full-screen{z-index:5}.editor-icon-button{-webkit-appearance:none;background:transparent;border:none;border-radius:4px;color:transparent;font-size:0;height:20px;margin:0;outline:none;padding:0;position:relative;width:20px}.editor-icon-button:before{position:absolute}@media (hover:hover){.editor-icon-button:focus{background:var(--oc-toolbar-hover-bg)}}\n"
  },
  {
    "path": "modules/editor/assets/js/editor.command.js",
    "content": "/**\n * Represents Editor client-side commands.\n * Command syntax: \"namespace:command@parameter\". The namespace\n * and parameter parts are optional.\n */\nexport class EditorCommand {\n    namespace;\n    command;\n    parameter;\n    fullCommand;\n    userData;\n\n    constructor(commandString, userData) {\n        if (typeof commandString === 'object' && commandString instanceof EditorCommand) {\n            return commandString;\n        }\n\n        const re = /^(([^:]+):)?([^@]+)(@(.*))?$/;\n        const matchData = commandString.match(re);\n\n        if (!matchData.length) {\n            throw new Error(\n                `Editor commands must have format \"command\", \"namespace:command\" or \"namespace:command@parameter\". Invalid command string: ${commandString}`\n            );\n        }\n\n        this.fullCommand = commandString;\n        this.namespace = matchData[2] || null;\n        this.parameter = matchData[5] || null;\n        this.command = matchData[3];\n        this.userData = userData === undefined ? {} : userData;\n    }\n\n    get hasParameter() {\n        return this.parameter != null;\n    }\n\n    get basePart() {\n        if (this.namespace === null) {\n            return this.command;\n        }\n\n        return this.namespace + ':' + this.command;\n    }\n\n    matches(commandObject) {\n        if (commandObject.fullCommand == this.fullCommand) {\n            return true;\n        }\n\n        if (commandObject.hasParameter) {\n            return false;\n        }\n\n        return this.basePart == commandObject.basePart;\n    }\n}\n"
  },
  {
    "path": "modules/editor/assets/js/editor.documenturi.js",
    "content": "/**\n * Represents Editor document URI. Document URIs are fully qualified document identifiers.\n * URI syntax: \"namespace:document-type:document-unique-key\".\n * URI example:\"cms:cms-page:index.htm\".\n *\n * The document unique key can be empty, which corresponds to root\n * Navigator nodes.\n */\nexport class DocumentUri {\n    namespace;\n    documentType;\n    uniqueKey;\n\n    constructor(namespace, documentType, uniqueKey) {\n        this.namespace = namespace;\n        this.documentType = documentType;\n        this.uniqueKey = uniqueKey;\n    }\n\n    static parse(uriString, silent) {\n        const re = /^([^:]+):([^:]+):?([^:]*)$/;\n        const matchData = uriString.match(re);\n\n        if (!matchData || !matchData.length) {\n            if (silent) {\n                return false;\n            }\n\n            throw new Error(\n                `Editor document URL must have format \"namespace:document-type:document-unique-key\". Invalid URI string: ${uriString}`\n            );\n        }\n\n        return new DocumentUri(matchData[1], matchData[2], matchData[3]);\n    }\n\n    get uri() {\n        return this.namespaceAndDocType + ':' + this.uniqueKey;\n    }\n\n    get namespaceAndDocType() {\n        return this.namespace + ':' + this.documentType;\n    }\n}\n"
  },
  {
    "path": "modules/editor/assets/js/editor.extension.base.js",
    "content": "import { utils as treeviewUtils } from '../../../backend/vuecomponents/treeview/assets/js/classes/index.js';\n\nexport class ExtensionBase {\n    documentControllers = {};\n    editorNamespace;\n    state;\n\n    constructor(namespace) {\n        this.editorNamespace = namespace;\n\n        this.state = {\n            navigatorSections: [],\n            createMenuItems: [],\n            newDocumentData: {},\n            settingsForms: {},\n            customData: null\n        };\n    }\n\n    get customData() {\n        return this.state.customData;\n    }\n\n    get documentControllerArray() {\n        return Object.keys(this.documentControllers).map((key) => this.documentControllers[key]);\n    }\n\n    get editorStore() {\n        return $.oc.editor.store;\n    }\n\n    get editorApplication() {\n        return $.oc.editor.application;\n    }\n\n    setInitialState(initialState) {\n        this.state.navigatorSections = initialState.navigatorSections;\n        this.state.customData = initialState.customData;\n        this.state.createMenuItems = initialState.createMenuItems;\n        this.state.newDocumentData = initialState.newDocumentData;\n        this.state.settingsForms = initialState.settingsForms;\n        this.state.inspectorConfigurations = initialState.inspectorConfigurations;\n\n        // Document controllers require the initial state to be set first.\n        //\n        this.makeDocumentControllers();\n    }\n\n    trans(key) {\n        return $.oc.editor.getLangStr(key);\n    }\n\n    getInspectorConfiguration(name) {\n        if (!this.state.inspectorConfigurations[name]) {\n            throw new Error(`Inspector configuration ${name} not found for the extension ${this.editorNamespace}`);\n        }\n\n        return this.state.inspectorConfigurations[name];\n    }\n\n    getDocumentController(documentType) {\n        if (this.documentControllers[documentType]) {\n            return this.documentControllers[documentType];\n        }\n\n        throw new Error(`Document controller not found for the document type ${documentType}`);\n    }\n\n    listDocumentControllerClasses() {}\n\n    makeDocumentControllers() {\n        const controllerClasses = this.listDocumentControllerClasses();\n\n        controllerClasses.forEach((controllerClass) => {\n            const documentController = new controllerClass(this);\n            const documentType = documentController.documentType;\n\n            if (this.documentControllers[documentType]) {\n                throw new Error(\n                    `A controller for document type ${documentType} is already registered for the extension ${this\n                        .editorNamespace}`\n                );\n            }\n\n            this.documentControllers[documentType] = documentController;\n        });\n    }\n\n    getNewDocumentData(documentType, commandObj) {\n        if (!this.state.newDocumentData[documentType]) {\n            throw new Error(`New document data not found for the document type ${documentType}`);\n        }\n\n        const newDocumentData = this.state.newDocumentData[documentType];\n        this.getDocumentController(documentType).preprocessNewDocumentData(newDocumentData, commandObj);\n\n        return newDocumentData;\n    }\n\n    preprocessSettingsFields(settingsFields, documentType) {\n        return this.getDocumentController(documentType).preprocessSettingsFields(settingsFields);\n    }\n\n    hasSettingFormFields(documentType) {\n        return (\n            Array.isArray(this.state.settingsForms[documentType]) &&\n            this.state.settingsForms[documentType].length > 0\n        );\n    }\n\n    getSettingsFormFields(documentType) {\n        if (!this.state.settingsForms[documentType]) {\n            throw new Error(`Settings form data not found for the document type ${documentType}`);\n        }\n\n        const result = this.preprocessSettingsFields(this.state.settingsForms[documentType], documentType);\n\n        return result;\n    }\n\n    getNavigatorSections() {\n        return this.state.navigatorSections;\n    }\n\n    getCreateMenuItems() {\n        return this.state.createMenuItems;\n    }\n\n    openDocumentByUniqueKey(documentUriStr) {\n        $.oc.editor.application.openDocument(documentUriStr);\n        return false;\n    }\n\n    /**\n     * Emits an Editor command for the extension and all document controllers registered by the extension.\n     * @param {String} commandString Command string. See editor.command.js.\n     * @param {any} payload Payload.\n     */\n    onCommand(commandString, payload) {\n        this.documentControllerArray.forEach((documentController) =>\n            documentController.emit(commandString, payload)\n        );\n    }\n\n    updateNavigatorSections(sections, documentType) {\n        sections.forEach((serverSection) => {\n            const existingSection = this.state.navigatorSections.find((section) => {\n                return section.uniqueKey === serverSection.uniqueKey;\n            });\n\n            serverSection.nodes.forEach((serverNode) => {\n                const existingNode = treeviewUtils.findNodeObjectByKeyPathInSections(this.state.navigatorSections, [\n                    serverNode.uniqueKey\n                ]);\n\n                // Update only inner nodes in existing root nodes. We can't\n                // update the entire root node because it may contain\n                // configuration initialized on the client, for example CMS\n                // pages grouping, display property, sorting, etc.\n                //\n                if (existingNode) {\n                    // Vue 3: Direct assignment is reactive\n                    existingNode.nodes = serverNode.nodes;\n                }\n                else if (existingSection) {\n                    existingSection.nodes.push(serverNode);\n                }\n            });\n\n            if (!documentType) {\n                // If we are updating entire section -\n                // update the section label and menus as well.\n                //\n                if (existingSection) {\n                    existingSection.createMenuItems = serverSection.createMenuItems;\n                    existingSection.menuItems = serverSection.menuItems;\n                    existingSection.label = serverSection.label;\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "modules/editor/assets/js/editor.extension.documentcomponent.base.js",
    "content": "import PQueue from 'p-queue';\nimport { TimeoutPromise } from './editor.timeoutpromise.js';\nimport { DocumentUri } from './editor.documenturi.js';\nimport { host as inspectorHost } from '../../../backend/vuecomponents/inspector/assets/js/classes/index.js';\nimport { modalUtils } from '../../../backend/vuecomponents/modal/assets/js/classes/index.js';\n\nfunction patchDocumentMetadata(documentMetadata, responseMetadata) {\n    if (!responseMetadata) {\n        return;\n    }\n\n    Object.keys(responseMetadata).forEach((property) => {\n        documentMetadata[property] = responseMetadata[property];\n    });\n\n    // Vue 3: Use delete operator\n    delete documentMetadata.isNewDocument;\n}\n\nexport const DocumentComponentBase = {\n    mixins: [oc.vueHotkeyMixin],\n    props: {\n        componentData: Object\n    },\n    data: function () {\n        const result = {\n            initializing: true,\n            processing: false,\n            errorLoadingDocument: null,\n            documentHeaderCollapsed: false,\n            documentFullScreen: false,\n            documentData: {},\n            lastSavedDocumentData: {},\n            documentMetadata: {},\n            // Vue 3: Mark as raw to prevent reactivity breaking private class fields\n            ajaxQueue: Vue.markRaw(new PQueue({ concurrency: 1 })),\n            abortController: Vue.markRaw(new AbortController()),\n            autoUpdateNavigatorNodeLabel: true,\n\n            documentSavedMessage: $.oc.editor.getLangStr('editor::lang.common.document_saved'),\n            documentReloadedMessage: $.oc.editor.getLangStr('editor::lang.common.document_reloaded'),\n            documentDeletedMessage: $.oc.editor.getLangStr('editor::lang.common.document_deleted'),\n            documentSettingsPopupTitle: $.oc.editor.getLangStr('editor::lang.common.document'),\n            documentTitleProperty: 'title',\n\n            componentHotkeys: {\n                'shift+option+w': this.onCloseTabHotkey\n            }\n        };\n\n        if (this.componentData.metadata) {\n            result.documentMetadata = $.oc.vueUtils.getCleanObject(this.componentData.metadata);\n        }\n\n        if (this.componentData.document) {\n            result.documentData = $.oc.vueUtils.getCleanObject(this.componentData.document);\n        }\n\n        return result;\n    },\n\n    computed: {\n        isDocumentChanged: function computeIsDocumentChanged() {\n            if (this.initializing) {\n                return false;\n            }\n\n            if (this.isNewDocument) {\n                return true;\n            }\n\n            const current = JSON.stringify(this.cleanDocumentData);\n            const saved = JSON.stringify(this.lastSavedDocumentData);\n\n            return current != saved;\n        },\n\n        cleanDocumentData: function computeCleanDocumentData() {\n            return $.oc.vueUtils.getCleanObject(this.documentData);\n        },\n\n        documentNavigatorNode: function computeDocumentNavigatorNode() {\n            return this.store.findNavigatorNode(this.documentUri);\n        },\n\n        namespace: function computeNamespace() {\n            return this.componentData.namespace;\n        },\n\n        extension: function computeExtension() {\n            return this.store.getExtension(this.namespace);\n        },\n\n        documentType: function computeDocumentType() {\n            return this.componentData.documentType;\n        },\n\n        isNewDocument: function computeIsNewDocument() {\n            if (this.documentMetadata.isNewDocument) {\n                return true;\n            }\n\n            return false;\n        },\n\n        documentUriObj: function computeDocumentUriObj() {\n            return new DocumentUri(this.namespace, this.documentType, this.componentData.key);\n        },\n\n        documentUri: function computeDocumentUri() {\n            return this.documentUriObj.uri;\n        },\n\n        store: function computeStore() {\n            return $.oc.editor.store;\n        },\n\n        application: function computeApplication() {\n            return $.oc.editor.application;\n        },\n\n        hasSettingsForm: function computeHasSettingsForm() {\n            return this.extension.hasSettingFormFields(this.documentType);\n        },\n\n        editorUserData: function computeUserData() {\n            return this.store.state.userData;\n        },\n\n        isDirectDocumentMode: function computeIsDirectDocumentMode() {\n            return $.oc.editor.application.isDirectDocumentMode;\n        },\n\n        directDocumentIcon: function computeDirectDocumentIcon() {\n            return this.isDirectDocumentMode ? this.componentData.tabIcon : null\n        }\n    },\n\n    methods: {\n        ajaxRequest: function ajaxRequest(handler, requestData) {\n            const signal = this.abortController.signal;\n            return this.ajaxQueue.add(\n                () => $.oc.editor.application.ajaxRequest(handler, requestData, { signal }),\n                { signal }\n            );\n        },\n\n        trans: function trans(key) {\n            return $.oc.editor.getLangStr(key);\n        },\n\n        updateTabLabel: function updateTabLabel(label) {\n            this.store.tabManager.updateTabLabel(label, this.documentUri);\n        },\n\n        setTabHasChanges: function setTabHasChanges(hasChanges) {\n            this.store.tabManager.setTabHasChanges(hasChanges, this.documentUri);\n        },\n\n        documentLoaded: function documentLoaded(data) {},\n\n        documentCreated: function documentCreated() {},\n\n        documentCreatedOrLoaded: function documentCreatedOrLoaded() {},\n\n        documentSaved: function documentSaved(data, prevData) {},\n\n        requestDocumentFromServer: async function requestDocumentFromServer(\n            extraData,\n            suppressGlobalDocumentError\n        ) {\n            try {\n                const data = await this.loadDocument(\n                    this.namespace,\n                    {\n                        type: this.documentType,\n                        key: this.componentData.key\n                    },\n                    extraData,\n                    suppressGlobalDocumentError\n                );\n\n                // loadDocument returns the error object on failure, check for valid response\n                if (!data || data instanceof Error || data.document === undefined) {\n                    // Error was already handled in loadDocument, just return\n                    return data;\n                }\n\n                this.lastSavedDocumentData = $.oc.vueUtils.getCleanObject(data.document);\n                this.documentData = data.document;\n                this.documentMetadata = data.metadata;\n\n                return data;\n            }\n            catch (error) {\n                if (!suppressGlobalDocumentError) {\n                    this.$emit('tabfatalerror');\n                }\n                console.error(error);\n                return error;\n            }\n        },\n\n        loadDocument: async function loadDocument(extension, documentData, extraData, suppressGlobalDocumentError) {\n            const timeoutPromise = new TimeoutPromise();\n\n            try {\n                const data = await this.ajaxRequest('onCommand', {\n                    extension: extension,\n                    command: 'onOpenDocument',\n                    documentData: documentData,\n                    extraData: typeof extraData === 'object' ? extraData : {}\n                });\n\n                await timeoutPromise.make(data);\n\n                this.initializing = false;\n                this.processing = false;\n\n                return data;\n            }\n            catch (error) {\n                if (!suppressGlobalDocumentError) {\n                    if (error.status === 0) {\n                        this.errorLoadingDocument = 'Error connecting to the server.';\n                    }\n                    else {\n                        this.errorLoadingDocument = error.responseText;\n                    }\n                }\n                this.initializing = false;\n                this.processing = false;\n\n                return error;\n            }\n        },\n\n        getSaveDocumentData: function getSaveDocumentData(inspectorDocumentData) {\n            throw new Error('getSaveDocumentData must be implemented in DocumentComponentBase descendants.');\n        },\n\n        getMainUiDocumentProperties: function getMainUiDocumentProperties() {\n            throw new Error(\n                'getMainUiDocumentProperties must be implemented in DocumentComponentBase descendants. This method must return a list of properties that can be edited without opening the Settings popup.'\n            );\n        },\n\n        getConflictResolver: function getConflictResolver() {\n            if (!this.$refs.conflictResolver) {\n                throw new Error('conflictResolver reference must exist.');\n            }\n\n            return this.$refs.conflictResolver;\n        },\n\n        getDocumentSavedMessage: function getDocumentSavedMessage(responseData) {\n            return this.documentSavedMessage;\n        },\n\n        saveDocument: async function saveDocument(force, inspectorDocumentData, extraData, noSavedMessage) {\n            $(document).trigger('vue.beforeRequest');\n\n            const documentData = this.getSaveDocumentData(inspectorDocumentData);\n            const timeoutPromise = new TimeoutPromise();\n            const lastSavedData = inspectorDocumentData ? inspectorDocumentData : this.documentData;\n            const isNewDocument = this.documentMetadata.isNewDocument;\n\n            this.processing = true;\n\n            try {\n                let data = await this.ajaxRequest('onCommand', {\n                    extension: this.namespace,\n                    command: 'onSaveDocument',\n                    documentData: documentData,\n                    documentMetadata: this.documentMetadata,\n                    documentForceSave: force ? 1 : 0,\n                    extraData: typeof extraData === 'object' ? extraData : null\n                });\n\n                await timeoutPromise.make(data);\n\n                this.processing = false;\n                if (data.mtimeMismatch) {\n                    return this.handleDocumentTimeMismatch(inspectorDocumentData, extraData, noSavedMessage);\n                }\n                else {\n                    patchDocumentMetadata(this.documentMetadata, data.metadata);\n\n                    const prevDocumentData = this.lastSavedDocumentData;\n                    this.lastSavedDocumentData = $.oc.vueUtils.getCleanObject(lastSavedData);\n\n                    if (isNewDocument) {\n                        this.store.refreshExtensionNavigatorNodes(this.namespace, this.documentType).then(() => {\n                            $.oc.editor.application.revealNavigatorNode(this.documentUri);\n                        });\n                    }\n\n                    if (!noSavedMessage) {\n                        oc.snackbar.show(this.getDocumentSavedMessage(data));\n                    }\n\n                    this.documentSaved(data, prevDocumentData);\n\n                    $.oc.editor.application.postDirectDocumentSavedMessage();\n\n                    return data;\n                }\n            } catch (error) {\n                this.handleDocumentSaveError(error, inspectorDocumentData);\n                throw error;\n            }\n        },\n\n        handleDocumentTimeMismatch: async function handleDocumentTimeMismatch(inspectorDocumentData, extraData, noSavedMessage) {\n            let resolution = null;\n\n            try {\n                resolution = await this.getConflictResolver().requestResolution();\n            } catch (error) {\n                return error;\n            }\n\n            if (resolution == 'save') {\n                return this.saveDocument(true, inspectorDocumentData, extraData, noSavedMessage);\n            }\n\n            // Reloading the document\n            //\n            this.processing = true;\n            const data = await this.requestDocumentFromServer();\n            oc.snackbar.show(this.documentReloadedMessage);\n\n            // The order of these hooks are important\n            //\n            this.documentCreatedOrLoaded();\n            this.documentLoaded(data);\n            return data;\n        },\n\n        shouldDisplayDocumentSaveErrorPopup: function shouldDisplayDocumentSaveErrorPopup(error) {\n            return true;\n        },\n\n        handleDocumentSaveError: function handleDocumentSaveError(error, inspectorDocumentData) {\n            this.processing = false;\n            let errorText = error.responseText;\n\n            if (error.responseJSON) {\n                // String error message\n                if (typeof error.responseJSON === 'string') {\n                    errorText = error.responseJSON;\n                }\n                // Larajax response format\n                else if (error.responseJSON.$env) {\n                    const ajax = error.responseJSON.$env;\n\n                    // Check for validation errors\n                    if (ajax.invalid && Object.keys(ajax.invalid).length > 0) {\n                        const keys = Object.keys(ajax.invalid);\n                        const firstFieldName = keys[0];\n                        const message = ajax.invalid[firstFieldName][0];\n\n                        if (message) {\n                            errorText = message;\n                        }\n\n                        if (\n                            !inspectorDocumentData &&\n                            firstFieldName &&\n                            this.getMainUiDocumentProperties().indexOf(firstFieldName) === -1\n                        ) {\n                            this.openSettingsForm();\n                        }\n                    }\n                    // Check for general error message\n                    else if (ajax.message) {\n                        errorText = ajax.message;\n                    }\n                }\n            }\n\n            if (!errorText && error.status === 0) {\n                errorText = 'Error connecting to the server.';\n            }\n\n            if (this.shouldDisplayDocumentSaveErrorPopup(error)) {\n                modalUtils.showAlert(\n                    $.oc.editor.getLangStr('editor::lang.common.error_saving'),\n                    errorText\n                );\n            }\n        },\n\n        closeDocumentTab: function closeDocumentTab(force) {\n            if (force) {\n                this.setTabHasChanges(false);\n            }\n\n            this.store.tabManager.closeTabByKey(this.documentUri);\n        },\n\n        deleteDocument: async function deleteDocument(extension) {\n            try {\n                await modalUtils.showConfirm(\n                    $.oc.editor.getLangStr('backend::lang.form.delete'),\n                    $.oc.editor.getLangStr('editor::lang.common.confirm_delete'),\n                    {\n                        isDanger: true,\n                        buttonText: $.oc.editor.getLangStr('backend::lang.form.confirm')\n                    }\n                );\n            } catch (error) {\n                return error;\n            }\n\n            this.processing = true;\n\n            try {\n                const data = await this.ajaxRequest('onCommand', {\n                    extension: this.namespace,\n                    command: 'onDeleteDocument',\n                    documentMetadata: this.documentMetadata\n                });\n\n                this.processing = false;\n                this.closeDocumentTab(true);\n                this.store.deleteNavigatorNode(this.documentUri);\n                oc.snackbar.show(this.documentDeletedMessage);\n\n                return data;\n            } catch (error) {\n                this.processing = false;\n\n                $.oc.editor.page.showAjaxErrorAlert(\n                    error,\n                    $.oc.editor.getLangStr('editor::lang.common.error_deleting')\n                );\n\n                return error;\n            }\n        },\n\n        openSettingsForm: function openSettingsForm() {\n            const settingsFields = this.extension.getSettingsFormFields(this.documentType);\n\n            inspectorHost\n                .showModal(\n                    this.documentSettingsPopupTitle,\n                    this.documentData,\n                    settingsFields,\n                    'editor-document-settings',\n                    {\n                        buttonText: this.trans('editor::lang.common.apply_and_save'),\n                        resizableWidth: true,\n                        beforeApplyCallback: this.onBeforeSettingsInspectorApply\n                    }\n                )\n                .then($.noop, $.noop);\n        },\n\n        updateNavigatorNodeUserData: function updateNavigatorNodeUserData(title) {},\n\n        updateEditorUiForDocument: function updateEditorUiForDocument() {\n            const title =\n                this.documentData[this.documentTitleProperty].length > 0\n                    ? this.documentData[this.documentTitleProperty]\n                    : 'No name';\n            this.updateTabLabel(title);\n\n            if (this.documentNavigatorNode && this.documentMetadata.uniqueKey) {\n                if (this.autoUpdateNavigatorNodeLabel) {\n                    this.store.triggerDocumentNodesUpdatedEvent(this.documentUriObj);\n                    this.documentNavigatorNode.label = title;\n                }\n\n                this.updateNavigatorNodeUserData(title);\n            }\n\n            // This propagates the new unique key to the\n            // Navigator and Tabs.\n            //\n            if (this.documentMetadata.uniqueKey) {\n                this.componentData.key = this.documentMetadata.uniqueKey;\n            }\n        },\n\n        isDocumentTabVisible: function() {\n            return $(this.$el).is(':visible');\n        },\n\n        canHandleHotkey: function () {\n            return this.isDocumentTabVisible() && !$.oc.modalFocusManager.hasHotkeyBlockingAbove(null);\n        },\n\n        onBeforeSettingsInspectorApply: function onBeforeSettingsInspectorApply(inspectorDocumentData) {\n            return this.saveDocument(false, inspectorDocumentData);\n        },\n\n        onParentTabClose: function onParentTabClose() {\n            if (!this.isDocumentChanged || this.errorLoadingDocument) {\n                return true;\n            }\n\n            return modalUtils.showConfirm(\n                $.oc.editor.getLangStr('backend::lang.tabs.close'),\n                $.oc.editor.getLangStr('backend::lang.form.confirm_tab_close'),\n                {\n                    isDanger: true,\n                    buttonText: $.oc.editor.getLangStr('editor::lang.common.discard_changes')\n                }\n            );\n        },\n\n        onApplicationCommand: function onApplicationCommand(command, payload) {},\n\n        handleBasicDocumentCommands: function handleBasicDocumentCommands(command, isHotkey) {\n            if (isHotkey && (!this.isDocumentTabVisible() || $.oc.modalFocusManager.hasHotkeyBlockingAbove(null))) {\n                return;\n            }\n\n            if (command == 'save') {\n                this.saveDocument().then($.noop, $.noop);\n            }\n\n            if (command == 'delete') {\n                this.deleteDocument(this.namespace);\n            }\n\n            if (command == 'settings') {\n                this.openSettingsForm();\n            }\n\n            if (command == 'document:toggleToolbar') {\n                this.documentHeaderCollapsed = !this.documentHeaderCollapsed;\n            }\n\n            if (command == 'document:toggleFullscreen') {\n                this.documentFullScreen = !this.documentFullScreen;\n            }\n        },\n\n        onCloseTabHotkey: function(ev) {\n            ev.preventDefault();\n\n            if (!this.isDocumentTabVisible() || $.oc.modalFocusManager.hasHotkeyBlockingAbove(null)) {\n                return;\n            }\n\n            this.$emit('tabclose');\n        },\n\n        onDocumentCloseClick: function () {\n            $.oc.editor.application.onCloseDirectDocumentClick();\n        }\n    },\n\n    beforeUnmount: function onBeforeUnmount() {\n        this.abortController.abort();\n    },\n\n    watch: {\n        isDocumentChanged: {\n            handler: function watchIsDocumentChanged(value) {\n                this.setTabHasChanges(value);\n            },\n            immediate: true\n        },\n\n        lastSavedDocumentData: function watchSavedDocumentData(value) {\n            this.updateEditorUiForDocument(value);\n        },\n\n        'componentData.key': function watchComponentDataKey(value, oldValue) {\n            const oldUri = new DocumentUri(this.namespace, this.documentType, oldValue).uri;\n            const navigatorNode = this.store.findNavigatorNode(oldUri);\n\n            if (navigatorNode) {\n                navigatorNode.uniqueKey = this.documentUri;\n                $.oc.editor.application.navigatorNodeKeyChanged(oldUri, this.documentUri);\n            }\n\n            this.store.tabManager.setTabKey(oldUri, this.documentUri);\n            this.$emit('tabkeychanged', oldUri, this.documentUri);\n        },\n\n        initializing: function onInitializingChanged(value) {\n            if (!value) {\n                Vue.nextTick(() => {\n                    if (this.$refs.documentHeader) {\n                        this.$refs.documentHeader.focusTitle();\n                    }\n                });\n            }\n        }\n    },\n\n    mounted: function onMounted() {\n        if (!this.documentMetadata || !this.documentMetadata.isNewDocument) {\n            this.requestDocumentFromServer().then((data) => {\n                // The order of these hooks are important\n                //\n                this.documentCreatedOrLoaded();\n                this.documentLoaded(data);\n            }, $.noop);\n        }\n        else {\n            this.initializing = false;\n            // The order of these hooks are important\n            //\n            this.documentCreatedOrLoaded();\n            this.documentCreated();\n        }\n    }\n};\n"
  },
  {
    "path": "modules/editor/assets/js/editor.extension.documentcontroller.base.js",
    "content": "import { EditorCommand } from './editor.command.js';\nimport { DocumentUri } from './editor.documenturi.js';\nimport { utils as treeviewUtils } from '../../../backend/vuecomponents/treeview/assets/js/classes/index.js';\n\nexport class DocumentControllerBase {\n    parentExtension;\n    commandListeners;\n\n    constructor(parentExtension) {\n        this.parentExtension = parentExtension;\n        this.commandListeners = [];\n\n        this.initDefaultListeners();\n        this.initListeners();\n    }\n\n    /**\n     * Returns a document type name this controller can handle.\n     */\n    get documentType() {\n        throw new Error('documentType property must return string');\n    }\n\n    /**\n     * Returns name of  Vue component that edits documents of this type.\n     */\n    get vueEditorComponentName() {\n        throw new Error('vueEditorComponent property must return string');\n    }\n\n    get editorNamespace() {\n        return this.parentExtension.editorNamespace;\n    }\n\n    get editorStore() {\n        return $.oc.editor.store;\n    }\n\n    /**\n     * Adds handlers for one or more Editor commands.\n     * Handlers are automatically bound to the document controller object.\n     * If the command argument does not specify the command parameter (@xxx)\n     * explicitly, the handler will be triggered for commands with any argument,\n     * value. E.g. cms:create-document@cms-page would trigger handlers\n     * registered for both cms:create-document and cms:create-document@cms-page.\n     * @param {String} commands A list of commands separated with a comma.\n     * @param {function} callback A command handler function. Handlers receive the\n     * Editor command object and optional payload.\n     */\n    on(commands, callback) {\n        const commandNames = commands.split(',').map((command) => command.trim());\n\n        commandNames.forEach((commandName) => {\n            this.commandListeners.push({\n                command: new EditorCommand(commandName),\n                callback\n            });\n        });\n    }\n\n    /**\n     * Emits an Editor command and triggers all handlers previously registered\n     * for the command. Used by Editor internally.\n     * @param {String} commandString Command string. See editor.command.js.\n     * @param {any} payload Command payload.\n     */\n    emit(commandString, payload) {\n        var commandObj = new EditorCommand(commandString);\n\n        this.commandListeners.forEach((listenerInfo) => {\n            if (commandObj.matches(listenerInfo.command)) {\n                listenerInfo.callback.apply(this, [commandObj, payload]);\n            }\n        });\n    }\n\n    get rootNavigatorNodeKey() {\n        return `${this.editorNamespace}:${this.documentType}`;\n    }\n\n    get rootNavigatorNodeSafe() {\n        const result = treeviewUtils.findNodeObjectByKeyPathInSections(\n            this.parentExtension.state.navigatorSections,\n            [this.rootNavigatorNodeKey]\n        );\n\n        if (!result) {\n            return null;\n        }\n\n        return result;\n    }\n\n    get rootNavigatorNode() {\n        const node = this.rootNavigatorNodeSafe;\n        if (node === null) {\n            throw new Error(`Navigator node with the key ${this.documentType} is not found`);\n        }\n\n        return node;\n    }\n\n    /**\n     * Updates JSON definition of the document settings form.\n     * @param {Array} settingsFields\n     * @returns Array Returns updated JSON string\n     */\n    preprocessSettingsFields(settingsFields) {\n        return settingsFields;\n    }\n\n    /**\n     * This method can update a new document object before it is passed to the document editor component.\n     * @param {Object} newDocumentData\n     * @param {EditorCommand} commandObj\n     */\n    preprocessNewDocumentData(newDocumentData, commandObj) {}\n\n    initListeners() {}\n\n    initDefaultListeners() {\n        this.on(this.editorNamespace + ':navigator-selected', this.onNavigatorNodeSelected);\n        this.on(this.editorNamespace + ':create-document', this.onCreateDocument);\n    }\n\n    extractDocumentUniqueKeyFromNodeKey(navigatorNodeKey) {\n        // Node keys have format namespace:document-type:unique-key.\n        // When we are creating or opening documents, we are only\n        // interested in the document unique key.\n\n        const parts = navigatorNodeKey.split(':');\n        if (parts.length != 3) {\n            throw new Error('Navigator node unique keys must have format namespace:document-type:unique-key');\n        }\n\n        return parts[2];\n    }\n\n    beforeDocumentOpen(commandObj, nodeData) {\n        return true;\n    }\n\n    trans(key) {\n        return $.oc.editor.getLangStr(key);\n    }\n\n    /**\n     * This method is called before a new document tab is opened.\n     * The method can update the document data object.\n     */\n    onBeforeDocumentCreated(commandObj, payload, documentData) {}\n\n    onNavigatorNodeSelected(commandObj, nodeData) {\n        const uri = DocumentUri.parse(nodeData.uniqueKey);\n\n        if (uri.namespaceAndDocType != this.rootNavigatorNodeKey) {\n            return;\n        }\n\n        if (this.beforeDocumentOpen(commandObj, nodeData) === false) {\n            return;\n        }\n\n        $.oc.editor.application.openTab({\n            key: nodeData.uniqueKey,\n            label: nodeData.label,\n            icon: nodeData.icon,\n            component: this.vueEditorComponentName,\n            componentData: {\n                key: this.extractDocumentUniqueKeyFromNodeKey(nodeData.uniqueKey),\n                namespace: this.editorNamespace,\n                documentType: this.documentType\n            }\n        });\n    }\n\n    onCreateDocument(commandObj, payload) {\n        if (!commandObj.hasParameter) {\n            throw new Error(\n                `Invalid create-document command: ${commandObj.fullCommand}. The command parameter is missing.`\n            );\n        }\n\n        if (commandObj.parameter != this.documentType) {\n            return;\n        }\n\n        const documentKey = $.oc.domIdManager.generate(this.documentType);\n        const documentData = $.oc.vueUtils.getCleanObject(\n            this.parentExtension.getNewDocumentData(this.documentType, commandObj)\n        );\n\n        this.onBeforeDocumentCreated(commandObj, payload, documentData);\n\n        $.oc.editor.application.openTab({\n            key: `${this.editorNamespace}:${this.documentType}:${documentKey}`,\n            label: documentData.label,\n            icon: documentData.icon,\n            component: this.vueEditorComponentName,\n            componentData: {\n                key: documentKey,\n                metadata: documentData.metadata,\n                document: documentData.document,\n                namespace: this.editorNamespace,\n                documentType: this.documentType\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "modules/editor/assets/js/editor.extension.filesystemfunctions.js",
    "content": "import { host as inspectorHost } from '../../../backend/vuecomponents/inspector/assets/js/classes/index.js';\nimport { modalUtils } from '../../../backend/vuecomponents/modal/assets/js/classes/index.js';\n\nasync function onCreateDirectoryConfirmed(handlerName, name, parent, payload, metadataExtraData, documentController) {\n    metadataExtraData = metadataExtraData || {};\n\n    try {\n        await $.oc.editor.application.ajaxRequest('onCommand', {\n            extension: documentController.editorNamespace,\n            command: handlerName,\n            documentData: { name, parent },\n            documentMetadata: metadataExtraData\n        });\n\n        documentController.editorStore.refreshExtensionNavigatorNodes(documentController.editorNamespace,\n            documentController.documentType).then(() => {\n                payload.treeNode.expand();\n        });\n    }\n    catch (error) {\n        $.oc.editor.page.showAjaxErrorAlert(error, documentController.trans('editor::lang.common.error'));\n        return false;\n    }\n}\n\nasync function onRenameConfirmed(handlerName, name, originalPath, payload, metadataExtraData, documentController) {\n    metadataExtraData = metadataExtraData || {};\n\n    try {\n        await $.oc.editor.application.ajaxRequest('onCommand', {\n            extension: documentController.editorNamespace,\n            command: handlerName,\n            documentData: { name, originalPath },\n            documentMetadata: metadataExtraData\n        });\n\n        documentController.editorStore.refreshExtensionNavigatorNodes(documentController.editorNamespace, documentController.documentType);\n    }\n    catch (error) {\n        $.oc.editor.page.showAjaxErrorAlert(error, documentController.trans('editor::lang.common.error'));\n        return false;\n    }\n}\n\nasync function onFilesSelected(handlerName, input, path, documentController, requestExtraData) {\n    const uploaderUtils = oc.vueComponentHelpers.uploader.utils;\n    requestExtraData = requestExtraData || {};\n\n    try {\n        let extraData = {\n            extension: documentController.editorNamespace,\n            command: handlerName,\n            destination: path\n        };\n\n        $.extend(extraData, requestExtraData);\n\n        await uploaderUtils.uploadFile('onCommand', input.get(0).files, 'file', extraData);\n    } catch (error) {}\n\n    documentController.editorStore.refreshExtensionNavigatorNodes(documentController.editorNamespace, documentController.documentType);\n    input.remove();\n}\n\nexport class FileSystemFunctions {\n    constructor(documentController) {\n        this.documentController = documentController;\n    }\n\n    createDirectoryFromNavigatorMenu(handlerName, cmd, payload, metadataExtraData) {\n        const inspectorConfiguration = this.documentController.editorStore.getGlobalInspectorConfiguration('dir-create');\n        const data = {\n            name: ''\n        };\n        const parent = cmd.hasParameter ? cmd.parameter : '';\n\n        inspectorHost\n            .showModal(inspectorConfiguration.title, data, inspectorConfiguration.config, 'directory-name', {\n                beforeApplyCallback: (updatedData) =>\n                    onCreateDirectoryConfirmed(handlerName, updatedData.name, parent, payload, metadataExtraData, this.documentController)\n            })\n            .then($.noop, $.noop);\n    }\n\n    renameFileOrDirectoryFromNavigatorMenu(handlerName, cmd, payload, metadataExtraData) {\n        const inspectorConfiguration = this.documentController.editorStore.getGlobalInspectorConfiguration('file-dir-rename');\n        const data = {\n            name: cmd.userData.fileName\n        };\n        const originalPath = cmd.hasParameter ? cmd.parameter : '';\n\n        inspectorHost\n            .showModal(inspectorConfiguration.title, data, inspectorConfiguration.config, 'file-dir-rename', {\n                beforeApplyCallback: (updatedData) =>\n                    onRenameConfirmed(handlerName, updatedData.name, originalPath, payload, metadataExtraData, this.documentController)\n            })\n            .then($.noop, $.noop);\n    }\n\n    async deleteFileOrDirectoryFromNavigatorMenu(handlerName, cmd, payload, metadataExtraData) {\n        metadataExtraData = metadataExtraData || {};\n\n        const itemsDetails = cmd.userData.itemsDetails;\n        const files = [];\n        const deletedUris = [];\n\n        if (!itemsDetails.clickedIsSelected) {\n            files.push(itemsDetails.clickedNode.userData.path);\n            deletedUris.push(itemsDetails.clickedNode.uniqueKey);\n        }\n        else {\n            itemsDetails.selectedNodes.forEach((selectedNode) => {\n                files.push(selectedNode.nodeData.userData.path);\n                deletedUris.push(selectedNode.nodeData.uniqueKey);\n            });\n        }\n\n        const message =\n            files.length > 1\n                ? $.oc.editor.getLangStr('editor::lang.filesystem.delete_confirm')\n                : $.oc.editor.getLangStr('editor::lang.filesystem.delete_confirm_single');\n\n        try {\n            await modalUtils.showConfirm(\n                $.oc.editor.getLangStr('backend::lang.form.delete'),\n                message,\n                {\n                    isDanger: true,\n                    buttonText: $.oc.editor.getLangStr('backend::lang.form.confirm')\n                }\n            );\n        }\n        catch (error) {\n            return;\n        }\n\n        try {\n            await $.oc.editor.application.ajaxRequest('onCommand', {\n                extension: this.documentController.editorNamespace,\n                command: handlerName,\n                documentData: {\n                    files: files\n                },\n                documentMetadata: metadataExtraData\n            });\n\n            deletedUris.forEach((deletedUri) => {\n                this.documentController.editorStore.deleteNavigatorNode(deletedUri);\n                this.documentController.editorStore.tabManager.closeTabByKey(deletedUri);\n            });\n        }\n        catch (error) {\n            $.oc.editor.page.showAjaxErrorAlert(error, this.documentController.trans('editor::lang.common.error'));\n            this.documentController.editorStore.refreshExtensionNavigatorNodes(this.documentController.editorNamespace);\n        }\n    }\n\n    async handleNavigatorNodeMove(handlerName, cmd, metadataExtraData) {\n        metadataExtraData = metadataExtraData || {};\n        cmd.userData.event.preventDefault();\n\n        $.oc.editor.application.setNavigatorReadonly(true);\n        const movingMessageId = oc.snackbar.show(this.documentController.trans('editor::lang.filesystem.moving'), {\n            timeout: 5000\n        });\n\n        const movedNodePaths = [];\n\n        cmd.userData.movedNodes.map((movedNode) => {\n            movedNodePaths.push(movedNode.nodeData.userData.path);\n        });\n\n        try {\n            await $.oc.editor.application.ajaxRequest('onCommand', {\n                extension: this.documentController.editorNamespace,\n                command: handlerName,\n                documentData: {\n                    source: movedNodePaths,\n                    destination: cmd.userData.movedToNodeData.userData.path\n                },\n                documentMetadata: metadataExtraData\n            });\n\n            await this.documentController.editorStore.refreshExtensionNavigatorNodes(this.documentController.editorNamespace, this.documentController.documentType);\n            oc.snackbar.show(this.documentController.trans('editor::lang.filesystem.moved'), { replace: movingMessageId });\n            $.oc.editor.application.setNavigatorReadonly(false);\n        }\n        catch (error) {\n            await this.documentController.editorStore.refreshExtensionNavigatorNodes(this.documentController.editorNamespace, this.documentController.documentType);\n            $.oc.editor.application.setNavigatorReadonly(false);\n            oc.snackbar.hide(movingMessageId);\n            $.oc.editor.page.showAjaxErrorAlert(error, this.documentController.trans('editor::lang.common.error'));\n        }\n    }\n\n    uploadDocument(allowedExtensions, handlerName, cmd, requestExtraData) {\n        const input = $('<input type=\"file\" style=\"display:none\" name=\"file\" multiple/>');\n        input.attr('accept', allowedExtensions);\n\n        $(document.body).append(input);\n\n        input.one('change', () => {\n            onFilesSelected(handlerName, input, cmd.userData.path ? cmd.userData.path : '/', this.documentController, requestExtraData);\n        });\n\n        input.click();\n    }\n\n    handleNavigatorExternalDrop(handlerName, cmd, requestExtraData) {\n        const uploaderUtils = oc.vueComponentHelpers.uploader.utils;\n        const dataTransfer = cmd.userData.ev.dataTransfer;\n        requestExtraData = requestExtraData || {};\n\n        if (!dataTransfer || !dataTransfer.files || !dataTransfer.files.length) {\n            return;\n        }\n\n        const targetNodeData = cmd.userData.nodeData;\n        const extraData = {\n            extension: this.documentController.editorNamespace,\n            command: handlerName,\n            destination: targetNodeData.userData.path\n        };\n\n        $.extend(extraData, requestExtraData);\n\n        uploaderUtils.uploadFile('onCommand', dataTransfer.files, 'file', extraData).then(\n            () => {\n                this.documentController.editorStore.refreshExtensionNavigatorNodes(this.documentController.editorNamespace,\n                    this.documentController.documentType);\n            },\n            () => {\n                this.documentController.editorStore.refreshExtensionNavigatorNodes(this.documentController.editorNamespace,\n                    this.documentController.documentType);\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "modules/editor/assets/js/editor.page.js",
    "content": "import { EditorStore } from './editor.store.js';\nimport { modalUtils } from '../../../backend/vuecomponents/modal/assets/js/classes/index.js';\n\nclass EditorPage {\n    constructor(height, width) {\n        this.store = new EditorStore();\n\n        this.init();\n    }\n\n    init() {\n        this.initVue();\n        this.initListeners();\n    }\n\n    initVue() {\n        const initialState = $('#editor-initial-state').html();\n        this.store.setInitialState(JSON.parse(initialState));\n\n        // Components need access to the store\n        // during initialization.\n        //\n        $.oc.editor = $.oc.editor || {};\n        $.oc.editor.store = this.getStore();\n\n        const { app, vm } = oc.mountVueApp('#page-container', {\n            data: () => ({\n                store: this.store\n            })\n        });\n\n        this.app = app;\n        this.vm = vm;\n    }\n\n    initListeners() {\n        window.addEventListener('beforeunload', function(event) {\n            if ($.oc.editor.application.hasChangedTabs()) {\n                event.preventDefault();\n                event.returnValue = 'There are unsaved changes.';\n            }\n        });\n    }\n\n    getApplication() {\n        return this.vm.$refs.application;\n    }\n\n    getLangStr(str) {\n        return this.store.state.lang[str];\n    }\n\n    getStore() {\n        return this.store;\n    }\n\n    showAjaxErrorAlert(error, title) {\n        let responseText = error.responseText || error.message;\n\n        if (!responseText && error.status === 0) {\n            responseText = 'Error connecting to the server.';\n        }\n\n        modalUtils.showAlert(title, responseText);\n    }\n}\n\n$(document).ready(function() {\n    var editorPage = new EditorPage();\n\n    $.oc.editor.application = editorPage.getApplication();\n    $.oc.editor.getLangStr = editorPage.getLangStr;\n    $.oc.editor.page = editorPage;\n});\n"
  },
  {
    "path": "modules/editor/assets/js/editor.store.js",
    "content": "import { TabManager } from './editor.store.tabmanager.js';\nimport { EditorCommand } from './editor.command.js';\nimport { DocumentUri } from './editor.documenturi.js';\nimport { utils as treeviewUtils } from '../../../backend/vuecomponents/treeview/assets/js/classes/index.js';\n\n// Extension registry - extensions register themselves here\noc.editorExtensions = oc.editorExtensions || {};\n\nexport class EditorStore {\n    state = {};\n    tabManager;\n    extensions;\n\n    constructor() {\n        this.state = {\n            navigatorSections: [],\n            navigatorCreateMenuItems: [],\n            navigatorSelectedUniqueKey: '',\n            editorTabs: [],\n            userData: {},\n            params: {},\n            lang: {},\n            globalInspectorConfigurations: {}\n        };\n\n        this.tabManager = new TabManager(this);\n        this.extensions = {};\n    }\n\n    initNavigatorSections() {\n        for (let namespace in this.extensions) {\n            if (!this.extensions.hasOwnProperty(namespace)) {\n                continue;\n            }\n\n            const extensionNavigatorSections = this.extensions[namespace].getNavigatorSections();\n            this.state.navigatorSections = this.state.navigatorSections.concat(extensionNavigatorSections);\n        }\n    }\n\n    initCreateMenuItems() {\n        Object.keys(this.extensions).forEach((namespace) => {\n            const extensionMenuItems = this.extensions[namespace].getCreateMenuItems();\n            this.state.navigatorCreateMenuItems = this.state.navigatorCreateMenuItems.concat(extensionMenuItems);\n        });\n    }\n\n    getExtension(namespace) {\n        if (this.extensions[namespace] === undefined) {\n            throw new Error(`Editor extension instance not found for the namespace ${namespace}`);\n        }\n\n        return this.extensions[namespace];\n    }\n\n    triggerDocumentNodesUpdatedEvent(uri) {\n        if (!uri) {\n            return;\n        }\n\n        let commandName = uri.namespace + ':navigator-nodes-updated';\n        if (uri.documentType) {\n            commandName += '@' + uri.documentType;\n        }\n\n        this.dispatchCommand(commandName);\n    }\n\n    refreshExtensionNavigatorNodes(namespace, documentType) {\n        return $.oc.editor.application\n            .ajaxRequest('onListExtensionNavigatorSections', {\n                extension: namespace,\n                documentType: documentType ? documentType : ''\n            })\n            .then((data) => {\n                if (data.multiSections) {\n                    Object.keys(data.multiSections).forEach((namespace) => {\n                        this.getExtension(namespace).updateNavigatorSections(data.multiSections[namespace], documentType);\n                        this.triggerDocumentNodesUpdatedEvent(new DocumentUri(namespace, documentType, null));\n                    });\n                }\n                else {\n                    this.getExtension(namespace).updateNavigatorSections(data.sections, documentType);\n                    this.triggerDocumentNodesUpdatedEvent(new DocumentUri(namespace, documentType, null));\n                }\n            });\n    }\n\n    setInitialState(initialState) {\n        const extensionStates = initialState.extensions;\n\n        for (let namespace in extensionStates) {\n            if (!extensionStates.hasOwnProperty(namespace)) {\n                continue;\n            }\n\n            if (!oc.editorExtensions[namespace]) {\n                throw new Error(`Editor extension is not registered: ${namespace}`);\n            }\n\n            const ExtensionClass = oc.editorExtensions[namespace];\n            const extension = new ExtensionClass(namespace);\n            const extensionInitialState = extensionStates[namespace];\n\n            extension.setInitialState(extensionInitialState);\n            if (typeof extensionInitialState.langStrings === 'object') {\n                $.extend(this.state.lang, extensionInitialState.langStrings);\n            }\n\n            this.extensions[namespace] = extension;\n        }\n\n        $.extend(this.state.lang, initialState.langStrings);\n        $.extend(this.state.globalInspectorConfigurations, initialState.inspectorConfigs);\n        $.extend(this.state.userData, initialState.userData);\n        $.extend(this.state.params, typeof initialState.params === 'object' ? initialState.params : {});\n\n        this.initNavigatorSections();\n        this.initCreateMenuItems();\n    }\n\n    /**\n     * Dispatches Editor command for an extension.\n     * @param {String} cmd Command name or EditorCommand object. The name must start with the \"extension:\" prefix.\n     * @param {any} payload Payload\n     */\n    dispatchCommand(command, payload) {\n        let namespace = '';\n        if (typeof command === 'string') {\n            const namespaceAndCmd = command.split(':');\n\n            if (namespaceAndCmd.length < 2) {\n                throw new Error(`Cannot dispatch command without an extension namespace: ${command}`);\n            }\n\n            namespace = namespaceAndCmd[0];\n        }\n        else {\n            if (command instanceof EditorCommand) {\n                namespace = command.namespace;\n                if (!namespace) {\n                    throw new Error(\n                        `Cannot dispatch command without an extension namespace: ${command.fullCommand}`\n                    );\n                }\n            }\n            else {\n                throw new Error('store.dispatch can accept only a string or EditorCommand object');\n            }\n        }\n\n        if (namespace === 'global') {\n            Object.keys(this.extensions).forEach((namespace) => {\n                this.extensions[namespace].onCommand(command, payload);\n            });\n        }\n        else {\n            this.getExtension(namespace).onCommand(command, payload);\n        }\n    }\n\n    findNavigatorNode(key) {\n        return treeviewUtils.findNodeByKeyInSections(this.state.navigatorSections, key);\n    }\n\n    deleteNavigatorNode(key) {\n        treeviewUtils.deleteNodeByKeyInSections(this.state.navigatorSections, key);\n\n        this.triggerDocumentNodesUpdatedEvent(DocumentUri.parse(key, true));\n    }\n\n    getGlobalInspectorConfiguration(name) {\n        if (!this.state.globalInspectorConfigurations[name]) {\n            throw new Error(`Global inspector configuration ${name} not found`);\n        }\n\n        return this.state.globalInspectorConfigurations[name];\n    }\n}\n"
  },
  {
    "path": "modules/editor/assets/js/editor.store.tabmanager.js",
    "content": "export class TabManager {\n    store;\n\n    constructor(store) {\n        this.store = store;\n    }\n\n    findTab(key) {\n        const tabs = this.store.state.editorTabs;\n        const index = tabs.findIndex((tab) => tab.key == key);\n\n        if (index === -1) {\n            return null;\n        }\n\n        return {\n            index,\n            tab: tabs[index]\n        };\n    }\n\n    createTab(tabData) {\n        if (!tabData.key) {\n            throw new Error('Tab data must contain the key element');\n        }\n\n        if (!tabData.component) {\n            throw new Error('Tab data must contain the component element');\n        }\n\n        const existingTab = this.findTab(tabData.key);\n        if (existingTab) {\n            return existingTab.tab.key;\n        }\n\n        tabData.componentData = tabData.componentData || {};\n        tabData.componentData.store = this.store;\n        tabData.componentData.tabIcon = tabData.icon;\n\n        // Vue 3: Mark componentData as raw to prevent circular reactivity\n        // (componentData.store.state.editorTabs contains this tabData)\n        tabData.componentData = Vue.markRaw(tabData.componentData);\n\n        this.store.state.editorTabs.push(tabData);\n\n        return tabData.key;\n    }\n\n    closeTab(index) {\n        if (index !== null) {\n            this.store.state.editorTabs.splice(index, 1);\n            Vue.nextTick(() => {\n                oc.octoberTooltips.clear();\n            }, 1);\n        }\n    }\n\n    closeTabByKey(key) {\n        const tab = this.findTab(key);\n        if (!tab) {\n            return;\n        }\n\n        this.closeTab(tab.index);\n    }\n\n    getTabKeys() {\n        const tabs = this.store.state.editorTabs;\n        return tabs.map((tab) => tab.key);\n    }\n\n    updateTabLabel(label, key) {\n        const tab = this.findTab(key);\n        if (!tab) {\n            return;\n        }\n\n        if (typeof label !== 'string' || !label.length) {\n            label = 'No name';\n        }\n\n        tab.tab.label = label;\n    }\n\n    setTabHasChanges(hasChanges, key) {\n        const tab = this.findTab(key);\n        if (!tab) {\n            return;\n        }\n\n        // Vue 3: Direct assignment is reactive\n        tab.tab.hasChanges = hasChanges;\n    }\n\n    hasChangedTabs() {\n        return this.store.state.editorTabs.some((tab) => tab.hasChanges);\n    }\n\n    setTabKey(oldKey, newKey) {\n        const tab = this.findTab(oldKey);\n        if (!tab) {\n            return;\n        }\n\n        tab.tab.key = newKey;\n    }\n\n    storePersistentTabs(tabs) {\n        this.setPersistentTabKeys(tabs.map((tab) => tab.key));\n    }\n\n    setPersistentTabKeys(tabKeys) {\n        localStorage.setItem('editor-tabs', JSON.stringify(tabKeys));\n    }\n\n    getPersistentTabKeys() {\n        const tabsStr = localStorage.getItem('editor-tabs');\n        if (tabsStr === null) {\n            return [];\n        }\n\n        try {\n            const result = JSON.parse(tabsStr);\n            if (!result || !Array.isArray(result)) {\n                return [];\n            }\n\n            return result;\n        } catch (e) {\n            return [];\n        }\n    }\n}\n"
  },
  {
    "path": "modules/editor/assets/js/editor.timeoutpromise.js",
    "content": "/**\n * Guarantees a minimum time for executing an operation.\n */\nexport class TimeoutPromise {\n    constructor() {\n        this.startTime = new Date();\n    }\n\n    make(data) {\n        const timeElapsed = new Date() - this.startTime;\n        const remainingTime = Math.max(0, 300 - timeElapsed);\n\n        return new Promise((resolve) => {\n            setTimeout(function() {\n                resolve(data);\n            }, remainingTime);\n        });\n    }\n}\n"
  },
  {
    "path": "modules/editor/assets/less/_buttons.less",
    "content": "// TODO - decide where should it go\n\n.editor-icon-button {\n    width: 20px;\n    height: 20px;\n    position: relative;\n    border: none;\n    padding: 0;\n    margin: 0;\n    -webkit-appearance: none;\n    outline: none;\n    border-radius: 4px;\n    background: transparent;\n\n    .backend-hide-text();\n\n    &:before {\n        position: absolute;\n    }\n}\n\n@media (hover: hover) {\n    .editor-icon-button:focus {\n        background: @toolbar-focus-bg;\n    }\n}"
  },
  {
    "path": "modules/editor/assets/less/_document.less",
    "content": ".component-backend-document {\n    &.full-screen {\n        z-index: 5;\n    }\n}"
  },
  {
    "path": "modules/editor/assets/less/_layout.less",
    "content": ".editor-panel {\n    padding: @editor-ui-base-padding;\n}\n\n.editor-padding-top {\n    padding-top: @editor-ui-base-padding;\n}\n\n.editor-margin-top {\n    margin-top: @editor-ui-base-padding;\n}\n\n.editor-min-document-content-height {\n    min-height: 500px;\n}\n"
  },
  {
    "path": "modules/editor/assets/less/editor.less",
    "content": "@import \"../../../backend/assets/less/core/boot.less\";\n\n.editor-page {\n    @editor-ui-base-padding: 20px;\n\n    @import \"_layout.less\";\n    @import \"_document.less\";\n}\n\n@import \"_buttons.less\";\n"
  },
  {
    "path": "modules/editor/behaviors/StateManager.php",
    "content": "<?php namespace Editor\\Behaviors;\n\nuse Lang;\nuse BackendAuth;\nuse Editor\\Classes\\ExtensionManager;\nuse Backend\\Classes\\ControllerBehavior;\nuse Backend\\VueComponents\\TreeView\\SectionList;\n\n/**\n * StateManager manages Editor initial state\n *\n * @package october\\editor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass StateManager extends ControllerBehavior\n{\n    /**\n     * makeInitialState\n     */\n    public function makeInitialState($params)\n    {\n        $result = [\n            'extensions' => [],\n            'params' => $params\n        ];\n\n        $extensions = ExtensionManager::instance()->listExtensions();\n        foreach ($extensions as $extension) {\n            $namespace = $extension->getNamespaceNormalized();\n\n            $extensionState = [\n                'navigatorSections' => $this->listExtensionNavigatorSections($extension, $namespace),\n                'newDocumentData' => $this->getNewDocumentData($extension),\n                'langStrings' => $this->getLangStrings($extension),\n                'settingsForms' => $extension->getSettingsForms(),\n                'inspectorConfigurations' => $extension->listInspectorConfigurations(),\n                'customData' => $extension->getCustomData()\n            ];\n\n            $result['extensions'][$namespace] = $extensionState;\n        }\n\n        $result['langStrings'] = $this->getEditorLangStrings();\n        $result['userData'] = $this->loadUserData();\n        $result['inspectorConfigs'] = $this->loadGlobalInspectorConfigs();\n\n        return $result;\n    }\n\n    /**\n     * listExtensionNavigatorSections\n     */\n    public function listExtensionNavigatorSections($extension, $namespace, $documentType = null)\n    {\n        return $this->getNavigatorSections($extension, $namespace, $documentType);\n    }\n\n    /**\n     * getNavigatorSections\n     */\n    protected function getNavigatorSections($extension, $namespace, $documentType = null)\n    {\n        $sectionList = new SectionList;\n        $sectionList->setChildKeyPrefix($namespace.':');\n\n        $extension->listNavigatorSections($sectionList, $documentType);\n        $extensionSections = $sectionList->getSections();\n\n        foreach ($extensionSections as $section) {\n            foreach ($section->getNodes() as $extensionNode) {\n                $extensionNode->setUserDataElement('editorNamespace', $namespace);\n            }\n\n            $section->setUserDataElement('editorNamespace', $namespace);\n        }\n\n        return $sectionList->toArray();\n    }\n\n    /**\n     * getLangStrings\n     */\n    protected function getLangStrings($extension)\n    {\n        $strings = $extension->getClientSideLangStrings();\n        $result = [];\n        foreach ($strings as $stringCode) {\n            $result[$stringCode] = Lang::get($stringCode);\n        }\n\n        return $result;\n    }\n\n    /**\n     * getNewDocumentData\n     */\n    protected function getNewDocumentData($extension)\n    {\n        $result = [];\n\n        $newDocumentData = $extension->getNewDocumentsData();\n        foreach ($newDocumentData as $documentType => $documentData) {\n            $result[$documentType] = $documentData->toArray();\n        }\n\n        return $result;\n    }\n\n    /**\n     * getEditorLangStrings returns a list of language strings required by the\n     * client-side extension controller.\n     * @return array\n     */\n    protected function getEditorLangStrings()\n    {\n        $result = [\n            'editor::lang.common.error_saving',\n            'editor::lang.common.error_loading',\n            'editor::lang.common.error_deleting',\n            'backend::lang.form.confirm_tab_close',\n            'backend::lang.tabs.close',\n            'editor::lang.common.discard_changes',\n            'backend::lang.form.delete',\n            'backend::lang.form.confirm',\n            'backend::lang.form.apply',\n            'editor::lang.common.confirm_delete',\n            'editor::lang.common.toggle_document_header',\n            'editor::lang.common.settings',\n            'editor::lang.common.document_saved',\n            'editor::lang.common.document_reloaded',\n            'editor::lang.common.document_deleted',\n            'editor::lang.common.document',\n            'editor::lang.common.error',\n            'editor::lang.common.reveal_in_sidebar',\n            'editor::lang.common.apply_and_save',\n            'editor::lang.filesystem.delete_confirm',\n            'editor::lang.filesystem.delete_confirm_single',\n            'editor::lang.filesystem.moving',\n            'editor::lang.filesystem.moved',\n        ];\n\n        foreach ($result as $stringCode) {\n            $result[$stringCode] = Lang::get($stringCode);\n        }\n\n        return $result;\n    }\n\n    /**\n     * loadUserData\n     */\n    protected function loadUserData()\n    {\n        return [\n            'useMediaManager' => BackendAuth::userHasAccess('media.library')\n        ];\n    }\n\n    /**\n     * loadGlobalInspectorConfigs\n     */\n    protected function loadGlobalInspectorConfigs()\n    {\n        $path = __DIR__.'/statemanager/inspector-configs.json';\n        $contents = json_decode(file_get_contents($path), true);\n\n        array_walk_recursive($contents, function(&$value, $key) {\n            if (is_string($value)) {\n                $value = trans($value);\n            }\n        });\n\n        return $contents;\n    }\n}\n"
  },
  {
    "path": "modules/editor/behaviors/statemanager/inspector-configs.json",
    "content": "{\n    \"dir-create\": {\n        \"title\": \"editor::lang.filesystem.directory_popup_title\",\n        \"config\": [\n            {\n                \"property\": \"name\",\n                \"title\": \"editor::lang.filesystem.directory_name\",\n                \"type\": \"string\",\n                \"defaultFocus\": true,\n                \"validation\": {\n                    \"required\": {\n                        \"message\": \"editor::lang.filesystem.directory_name_required\"\n                    },\n                    \"regex\": {\n                        \"message\": \"editor::lang.filesystem.invalid_name\",\n                        \"pattern\": \"^[0-9a-zA-Z\\\\.\\\\s_\\\\-]+$\"\n                    }\n                }\n            }\n        ]\n    },\n    \"file-dir-rename\": {\n        \"title\": \"editor::lang.filesystem.rename_popup_title\",\n        \"config\": [\n            {\n                \"property\": \"name\",\n                \"title\": \"editor::lang.filesystem.rename_new_name\",\n                \"type\": \"string\",\n                \"defaultFocus\": true,\n                \"validation\": {\n                    \"required\": {\n                        \"message\": \"editor::lang.filesystem.rename_name_required\"\n                    },\n                    \"regex\": {\n                        \"message\": \"editor::lang.filesystem.invalid_name\",\n                        \"pattern\": \"^[0-9a-zA-Z\\\\.\\\\s_\\\\-]+$\"\n                    }\n                }\n            }\n        ]\n    }\n}\n"
  },
  {
    "path": "modules/editor/classes/ApiHelpers.php",
    "content": "<?php namespace Editor\\Classes;\n\nuse SystemException;\n\n/**\n * ApiHelpers basic functions for the Editor\n *\n * @package october\\editor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ApiHelpers\n{\n    /**\n     * assertGetKey\n     */\n    public static function assertGetKey($array, $key)\n    {\n        if (!array_key_exists($key, $array)) {\n            throw new SystemException(sprintf('Key %s not found in the array', $key));\n        }\n\n        return $array[$key];\n    }\n\n    /**\n     * assertIsArray\n     */\n    public static function assertIsArray($value)\n    {\n        if (!is_array($value)) {\n            throw new SystemException('Value is not array');\n        }\n\n        return $value;\n    }\n}\n"
  },
  {
    "path": "modules/editor/classes/ExtensionBase.php",
    "content": "<?php namespace Editor\\Classes;\n\nuse Backend\\Helpers\\Inspector as InspectorHelper;\nuse Backend\\VueComponents\\TreeView\\SectionList;\n\n/**\n * ExtensionBase is a base class for Editor extensions\n *\n * @package october\\editor\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class ExtensionBase\n{\n    use \\System\\Traits\\EventEmitter;\n    use \\Editor\\Traits\\FileSystemFunctions;\n\n    /**\n     * getNamespace returns unique extension namespace, for example 'cms'.\n     * Plugins extending Editor must also define a client-side state\n     * controller class in $.oc.editor.extension[namespace].\n     * State controller classes must extend $.oc.editor.stateController.\n     * @return string\n     */\n    abstract public function getNamespace(): string;\n\n    public function getNamespaceNormalized()\n    {\n        return trim(strtolower($this->getNamespace()));\n    }\n\n    /**\n     * listVueComponents returns a list of Vue components required for the extension.\n     * @return array Array of Vue component class names\n     */\n    public function listVueComponents()\n    {\n        return [];\n    }\n\n    /**\n     * listJsFiles returns a list of JavaScript files required for the extension.\n     * @return array Returns an associative array of JavaScript file paths and attributes.\n     */\n    public function listJsFiles()\n    {\n        return [];\n    }\n\n    /**\n     * listNavigatorSections initializes extension's sidebar Navigator sections.\n     * The sections must be added to the supplied section list.\n     */\n    public function listNavigatorSections(SectionList $sectionList, $documentType = null)\n    {\n    }\n\n    /**\n     * listInspectorConfigurations returns a list of Inspector configurations that must\n     * be available on the client side.\n     * @return array Returns an array: ['config-name'=>config]\n     */\n    public function listInspectorConfigurations()\n    {\n        return [];\n    }\n\n    /**\n     * getNewDocumentsData returns a list of new document descriptions, allowing creating\n     * documents on the client side.\n     * @return array Returns an array of NewDocumentDescription objects. The array indexes must be\n     * strings matching the corresponding document types.\n     */\n    public function getNewDocumentsData()\n    {\n        return [];\n    }\n\n    /**\n     * getSettingsForms returns a list of settings form configurations for document types\n     * supported by the extension.\n     * @return array Returns an array of JSON strings. The array indexes must be\n     * strings matching the corresponding document types.\n     */\n    public function getSettingsForms()\n    {\n        return [];\n    }\n\n    /**\n     * getClientSideLangStrings returns a list of language strings required for the\n     * client-side extension controller.\n     * @return array\n     */\n    public function getClientSideLangStrings()\n    {\n        return [];\n    }\n\n    /**\n     * getCustomData returns custom state data required for the extension client-side controller.\n     */\n    public function getCustomData()\n    {\n        return null;\n    }\n\n    /**\n     * runCommand handles client-side requests\n     */\n    public function runCommand($command, $controller)\n    {\n        $commandName = 'command_'.$command;\n        return $this->$commandName($controller);\n    }\n\n    /**\n     * getExtensionSortOrder affects the extension position in the Editor Navigator\n     */\n    public function getExtensionSortOrder()\n    {\n        return 10;\n    }\n\n    /**\n     * loadSettingsFields\n     */\n    protected function loadSettingsFields(string $fieldsClass): array\n    {\n        return InspectorHelper::getPropertyConfig(\n            (new $fieldsClass)->defineSettingsFields()\n        );\n    }\n\n    /**\n     * loadAndLocalizeJsonFile\n     */\n    protected function loadAndLocalizeJsonFile(string $path): array\n    {\n        $contents = json_decode(file_get_contents($path), true);\n\n        array_walk_recursive($contents, function(&$value, $key) {\n            if (is_string($value)) {\n                $value = trans($value);\n            }\n        });\n\n        return $contents;\n    }\n}\n"
  },
  {
    "path": "modules/editor/classes/ExtensionManager.php",
    "content": "<?php namespace Editor\\Classes;\n\nuse App;\nuse Event;\nuse SystemException;\n\n/**\n * Manages Editor extensions.\n *\n * @package october\\editor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ExtensionManager\n{\n    /**\n     * @var array extensionClassNames is a collection of registered extensions\n     */\n    protected $extensionClassNames = [];\n\n    /**\n     * @var array extensions registered by this class\n     */\n    protected $extensions = [];\n\n    /**\n     * __construct this class\n     */\n    public function __construct()\n    {\n        $this->registerExtensions();\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('editor.extensions');\n    }\n\n    /**\n     * listVueComponents\n     */\n    public function listVueComponents()\n    {\n        $extensions = $this->listExtensions();\n\n        $result = [];\n        foreach ($extensions as $extension) {\n            $result = array_merge($result, $extension->listVueComponents());\n        }\n\n        return $result;\n    }\n\n    /**\n     * listJsFiles\n     */\n    public function listJsFiles()\n    {\n        $extensions = $this->listExtensions();\n\n        $result = [];\n        foreach ($extensions as $extension) {\n            $result = array_merge($result, $extension->listJsFiles());\n        }\n\n        return $result;\n    }\n\n    /**\n     * listExtensions returns a collection of registered extension objects\n     */\n    public function listExtensions()\n    {\n        $result = [];\n        foreach ($this->extensionClassNames as $className) {\n            $result[] = $this->getExtension($className);\n        }\n\n        usort($result, function($a, $b) {\n            if ($a->getExtensionSortOrder() >= $b->getExtensionSortOrder()) {\n                return 1;\n            }\n\n            return -1;\n        });\n\n        return $result;\n    }\n\n    /**\n     * runCommand\n     */\n    public function runCommand($namespace, $command, $controller)\n    {\n        $extension = $this->getExtensionByNamespace($namespace);\n\n        return $extension->runCommand($command, $controller);\n    }\n\n    /**\n     * getExtensionByNamespace\n     */\n    public function getExtensionByNamespace($namespace)\n    {\n        $extensions = $this->listExtensions();\n        foreach ($extensions as $extension) {\n            if ($extension->getNamespaceNormalized() == $namespace) {\n                return $extension;\n            }\n        }\n\n        throw new SystemException(sprintf('Cannot find editor extension by namespace: %s', $namespace));\n    }\n\n    /**\n     * makeExtension will create an extension object from a class name\n     */\n    protected function makeExtension(string $className)\n    {\n        if (!class_exists($className)) {\n            throw new SystemException(sprintf('Editor extension class not found: %s', $className));\n        }\n\n        $extension = new $className();\n        if (!$extension instanceof ExtensionBase) {\n            throw new SystemException(\n                sprintf('Editor extension class must be a descendant of Editor\\Classes\\ExtensionBase: %s', $className)\n            );\n        }\n\n        return $extension;\n    }\n\n    /**\n     * assertNamespaceUnique\n     */\n    private function assertNamespaceUnique($namespace)\n    {\n        foreach ($this->extensions as $extension) {\n            if ($namespace == $extension->getNamespaceNormalized()) {\n                throw new SystemException(sprintf('Editor extension namespace is already in use: %s', $namespace));\n            }\n        }\n    }\n\n    /**\n     * getExtension will create and validate an extension object\n     */\n    protected function getExtension(string $className)\n    {\n        if (array_key_exists($className, $this->extensions)) {\n            return $this->extensions[$className];\n        }\n\n        $extension = $this->makeExtension($className);\n        $namespace = $extension->getNamespaceNormalized();\n\n        if (!strlen($namespace)) {\n            throw new SystemException(sprintf('Editor extension namespace must not be empty: %s', $className));\n        }\n\n        $this->assertNamespaceUnique($namespace);\n\n        return $this->extensions[$className] = $extension;\n    }\n\n    /**\n     * registerExtensions will build a collection of registered extensions\n     */\n    protected function registerExtensions()\n    {\n        $apiResult = Event::fire('editor.extension.register');\n\n        if (!is_array($apiResult)) {\n            return;\n        }\n\n        foreach ($apiResult as $extensionClassName) {\n            if (!is_string($extensionClassName)) {\n                continue;\n            }\n\n            $this->extensionClassNames[] = $extensionClassName;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/editor/classes/NewDocumentDescription.php",
    "content": "<?php namespace Editor\\Classes;\n\n/**\n * NewDocumentDescription contains information required for creating new documents in Editor.\n *\n * @package october\\editor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass NewDocumentDescription\n{\n    /**\n     * @var string label\n     */\n    protected $label;\n\n    /**\n     * @var string icon\n     */\n    protected $icon;\n\n    /**\n     * @var mixed metadata\n     */\n    protected $metadata;\n\n    /**\n     * @var mixed documentData\n     */\n    protected $documentData;\n\n    /**\n     * __construct\n     */\n    public function __construct(string $label, array $metadata)\n    {\n        $this->label = $label;\n        $this->metadata = $metadata;\n    }\n\n    /**\n     * setIcon\n     */\n    public function setIcon(string $backgroundColor, string $iconClassName)\n    {\n        $this->icon = [\n            'backgroundColor' => $backgroundColor,\n            'cssClass' => $iconClassName\n        ];\n\n        return $this;\n    }\n\n    /**\n     * setInitialDocumentData\n     */\n    public function setInitialDocumentData($documentData)\n    {\n        $this->documentData = $documentData;\n    }\n\n    /**\n     * toArray\n     */\n    public function toArray()\n    {\n        $result = [\n            'label' => $this->label,\n            'metadata' => $this->metadata\n        ];\n\n        if ($this->icon) {\n            $result['icon'] = $this->icon;\n        }\n\n        if ($this->documentData) {\n            $result['document'] = $this->documentData;\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/editor/composer.json",
    "content": "{\n    \"name\": \"october/editor\",\n    \"type\": \"october-module\",\n    \"description\": \"Editor module for October CMS\",\n    \"homepage\": \"https://octobercms.com\",\n    \"keywords\": [\"october cms\", \"october\", \"editor\"],\n    \"authors\": [\n        {\n            \"name\": \"Alexey Bobkov\",\n            \"email\": \"aleksey.bobkov@gmail.com\"\n        },\n        {\n            \"name\": \"Samuel Georges\",\n            \"email\": \"daftspunky@gmail.com\"\n        }\n    ]\n}\n"
  },
  {
    "path": "modules/editor/controllers/Index.php",
    "content": "<?php namespace Editor\\Controllers;\n\nuse Request;\nuse Response;\nuse BackendMenu;\nuse SystemException;\nuse Backend\\Classes\\Controller;\nuse Backend\\Models\\BrandSetting;\nuse Editor\\Classes\\ExtensionManager;\nuse October\\Rain\\Exception\\ValidationException;\n\n/**\n * Editor index controller\n *\n * @package october\\editor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Index extends Controller\n{\n    use \\Backend\\Traits\\InspectableContainer;\n\n    /**\n     * @var array requiredPermissions\n     */\n    public $requiredPermissions = ['editor'];\n\n    /**\n     * @var array implement\n     */\n    public $implement = [\n        \\Editor\\Behaviors\\StateManager::class\n    ];\n\n    /**\n     * @var bool turboRouter\n     */\n    public $turboRouter = false;\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.Editor', 'editor');\n\n        $this->bodyClass = 'compact-container editor-page backend-document-layout';\n        $this->pageTitle = 'editor::lang.plugin.name';\n    }\n\n    /**\n     * index\n     */\n    public function index()\n    {\n        $this->addCss('/modules/editor/assets/css/editor.css');\n        $this->addJs('/modules/editor/assets/js/editor.page.js', ['type' => 'module']);\n\n        $this->registerVueComponent(\\Backend\\VueComponents\\Document::class);\n        $this->registerVueComponent(\\Backend\\VueComponents\\Tabs::class);\n        $this->registerVueComponent(\\Backend\\VueComponents\\TreeView::class);\n        $this->registerVueComponent(\\Backend\\VueComponents\\Splitter::class);\n        $this->registerVueComponent(\\Backend\\VueComponents\\Modal::class);\n        $this->registerVueComponent(\\Backend\\VueComponents\\Inspector::class);\n        $this->registerVueComponent(\\Backend\\VueComponents\\Uploader::class);\n\n        $this->registerVueComponent(\\Editor\\VueComponents\\EditorConflictResolver::class);\n        $this->registerVueComponent(\\Editor\\VueComponents\\Application::class);\n\n        $extensionManager = ExtensionManager::instance();\n        $jsFiles = $extensionManager->listJsFiles();\n        foreach ($jsFiles as $jsFile) {\n            $this->addJs($jsFile, ['type' => 'module']);\n        }\n\n        $componentClasses = $extensionManager->listVueComponents();\n        foreach ($componentClasses as $componentClass) {\n            $this->registerVueComponent($componentClass);\n        }\n\n        $directEditDocument = Request::query('document');\n        if (strlen($directEditDocument)) {\n            $this->vars['hideMainMenu'] = true;\n        }\n\n        $this->vars['customLogo'] = BrandSetting::getLogo();\n\n        $this->vars['initialState'] = $this->makeInitialState([\n            'directModeDocument' => $directEditDocument,\n            'openDocument' => Request::query('open')\n        ]);\n    }\n\n    /**\n     * index_onCommand\n     */\n    public function index_onCommand()\n    {\n        $extension = post('extension');\n        if (!is_scalar($extension) || !strlen($extension)) {\n            throw new SystemException('Missing extension name');\n        }\n\n        $command = post('command');\n        if (!is_scalar($command) || !strlen($command)) {\n            throw new SystemException('Missing command');\n        }\n\n        return ExtensionManager::instance()->runCommand($extension, $command, $this);\n    }\n\n    /**\n     * onListExtensionNavigatorSections\n     */\n    public function onListExtensionNavigatorSections()\n    {\n        $namespace = post('extension');\n        if (!is_scalar($namespace) || !strlen($namespace)) {\n            throw new SystemException('Missing extension namespace');\n        }\n\n        $documentType = post('documentType');\n        if ($documentType && !is_scalar($documentType)) {\n            throw new SystemException('Invalid document type');\n        }\n\n        if ($namespace !== '*') {\n            $extension = ExtensionManager::instance()->getExtensionByNamespace($namespace);\n            $namespace = $extension->getNamespaceNormalized();\n\n            return [\n                'sections' => $this->listExtensionNavigatorSections($extension, $namespace, $documentType)\n            ];\n        }\n\n        $result = [];\n        $extensions = ExtensionManager::instance()->listExtensions();\n        foreach ($extensions as $extension) {\n            $namespace = $extension->getNamespaceNormalized();\n            $result[$namespace] = $this->listExtensionNavigatorSections($extension, $namespace, $documentType);\n        }\n\n        return ['multiSections' => $result];\n    }\n}\n"
  },
  {
    "path": "modules/editor/controllers/index/index.php",
    "content": "<?= Block::put('body') ?>\n    <?php if (!$this->fatalError): ?>\n        <div class=\"position-relative h-100\" id=\"page-container\">\n            <editor-component-application :store=\"store\" :custom-logo=\"'<?= e($customLogo) ?>'\" ref=\"application\">\n            </editor-component-application>\n        </div>\n\n        <script id=\"editor-initial-state\" type=\"text/template\"><?= json_encode($initialState) ?></script>\n    <?php else: ?>\n        <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <?php endif ?>\n<?= Block::endPut() ?>\n"
  },
  {
    "path": "modules/editor/lang/be.json",
    "content": "{\n  \"Editor\": \"Рэдактар\",\n  \"Access the Editor Tool\": \"Доступ да інструмента рэдактара\",\n  \"Editor Tabs\": \"Укладкі рэдактара\",\n  \"Close Tab\": \"Закрыць укладку\",\n  \"Editor Objects\": \"Рэдактар аб'ектаў\"\n}"
  },
  {
    "path": "modules/editor/lang/bg.json",
    "content": "{\n  \"Editor\": \"Редактор\",\n  \"Access the Editor Tool\": \"Достъп до инструмента за редактор\",\n  \"Editor Tabs\": \"Раздели на редактора\",\n  \"Close Tab\": \"Затваряне на раздела\",\n  \"Editor Objects\": \"Обекти на редактора\"\n}"
  },
  {
    "path": "modules/editor/lang/ca.json",
    "content": "{\n  \"Editor\": \"Editor\",\n  \"Access the Editor Tool\": \"Accediu a l'Eina Editor\",\n  \"Editor Tabs\": \"Pestanyes de l'editor\",\n  \"Close Tab\": \"Tanca la pestanya\",\n  \"Editor Objects\": \"Editor d'objectes\"\n}"
  },
  {
    "path": "modules/editor/lang/cs.json",
    "content": "{\n  \"Editor\": \"Editor\",\n  \"Access the Editor Tool\": \"Otevřete nástroj Editor\",\n  \"Editor Tabs\": \"Záložky editoru\",\n  \"Close Tab\": \"Zavřít kartu\",\n  \"Editor Objects\": \"Objekty editoru\"\n}"
  },
  {
    "path": "modules/editor/lang/da.json",
    "content": "{\n  \"Editor\": \"Redaktør\",\n  \"Access the Editor Tool\": \"Få adgang til redigeringsværktøjet\",\n  \"Editor Tabs\": \"Editor-faner\",\n  \"Close Tab\": \"Luk fanen\",\n  \"Editor Objects\": \"Editor objekter\"\n}"
  },
  {
    "path": "modules/editor/lang/de.json",
    "content": "{\n  \"Editor\": \"Editor\",\n  \"Access the Editor Tool\": \"Greifen Sie auf das Editor-Tool zu\",\n  \"Editor Tabs\": \"Editor Tabs\",\n  \"Close Tab\": \"Tab schließen\",\n  \"Editor Objects\": \"Editor Objekte\"\n}"
  },
  {
    "path": "modules/editor/lang/el.json",
    "content": "{\n  \"Editor\": \"Συντάκτης\",\n  \"Access the Editor Tool\": \"Πρόσβαση στο Εργαλείο επεξεργασίας\",\n  \"Editor Tabs\": \"Καρτέλες επεξεργασίας\",\n  \"Close Tab\": \"Κλείσιμο καρτέλας\",\n  \"Editor Objects\": \"Αντικείμενα επεξεργασίας\"\n}"
  },
  {
    "path": "modules/editor/lang/en/lang.php",
    "content": "<?php return [\n  'plugin' => [\n    'name' => 'Editor',\n  ],\n  'mainview' => [],\n  'editor' => [\n    'menu_label' => 'Editor',\n  ],\n  'permissions' => [\n    'name' => 'Editor',\n    'access_editor' => 'Access to specific editor features like editing CMS pages is managed using other plugin permissions.',\n  ],\n  'common' => [\n    'settings' => 'Settings',\n    'document_saved' => 'Document saved',\n    'document_deleted' => 'Document deleted',\n    'document' => 'Document',\n    'document_reloaded' => 'Document reloaded',\n    'error_saving' => 'Error saving document',\n    'error_loading' => 'Error loading document',\n    'error' => 'Error',\n    'discard_changes' => 'Discard Changes',\n    'confirm_delete' => 'The document will be permanently deleted.',\n    'error_deleting' => 'Error deleting document',\n    'toggle_document_header' => 'Toggle document header',\n    'reveal_in_sidebar' => 'Reveal in Sidebar',\n    'apply_and_save' => 'Apply and Save',\n    'quick_access' => 'Quick Access',\n    'toggle_sidebar' => 'Toggle Sidebar',\n    'document_not_found' => 'The requested document could not be found.',\n  ],\n  'filesystem' => [\n    'directory_name_cant_be_empty' => 'The directory name cannot be empty',\n    'invalid_path' => 'Path can contain only digits, Latin letters, spaces and the following symbols: ._-@/',\n    'invalid_name' => 'Name can contain only digits, Latin letters, spaces and the following symbols: ._-@',\n    'already_exists' => 'File or directory with this name already exists',\n    'error_creating_directory' => 'Error creating directory :name. Please check write permissions.',\n    'directory_popup_title' => 'New Directory',\n    'directory_name' => 'Directory Name',\n    'directory_name_required' => 'The directory name is required',\n    'rename_popup_title' => 'Rename',\n    'rename_new_name' => 'New name',\n    'rename_name_required' => 'The name is required',\n    'name_cant_be_empty' => 'The name cannot be empty',\n    'original_not_found' => 'Original file or directory not found',\n    'type_not_allowed' => 'Only the following file types are allowed: :allowed_types',\n    'error_renaming' => 'Error renaming the file or directory',\n    'error_deleting_file' => 'Error deleting file :name.',\n    'error_deleting_dir_not_empty' => 'Error deleting directory :name. The directory is not empty.',\n    'error_deleting_dir' => 'Error deleting directory :name.',\n    'delete_confirm' => 'Delete selected files or directories?',\n    'delete_confirm_single' => 'Delete selected file or directory?',\n    'selected_files_not_found' => 'Selected files not found',\n    'select_destination_dir' => 'Please select a destination directory',\n    'destination_not_found' => 'Destination directory is not found',\n    'error_moving_file' => 'Error moving file :file',\n    'error_moving_directory' => 'Error moving directory :dir',\n    'error_deleting_directory' => 'Error deleting the original directory :dir',\n    'moving' => 'Moving selected items',\n    'moved' => 'Successfully moved selected items',\n    'destination_exists' => 'File or directory with this name already exists: :name',\n    'file_not_valid' => 'File is not valid',\n    'too_large' => 'The uploaded file is too large. The maximum allowed file size is :max_size',\n  ],\n];\n"
  },
  {
    "path": "modules/editor/lang/en.json",
    "content": "{\n    \"Editor\": \"Editor\",\n    \"Access the Editor Tool\": \"Access the Editor Tool\",\n    \"Editor Tabs\": \"Editor Tabs\",\n    \"Close Tab\": \"Close Tab\",\n    \"Editor Objects\": \"Editor Objects\"\n}"
  },
  {
    "path": "modules/editor/lang/es-ar.json",
    "content": "{\n}"
  },
  {
    "path": "modules/editor/lang/es.json",
    "content": "{\n  \"Editor\": \"Editor\",\n  \"Access the Editor Tool\": \"Acceder a la herramienta Editor\",\n  \"Editor Tabs\": \"Pestañas del editor\",\n  \"Close Tab\": \"Cerrar pestaña\",\n  \"Editor Objects\": \"Editor de objetos\"\n}"
  },
  {
    "path": "modules/editor/lang/et.json",
    "content": "{\n    \"Editor\": \"Toimetaja\",\n    \"Access the Editor Tool\": \"Juurdepääs redaktoritööriistale\",\n    \"Editor Tabs\": \"Redaktori vahekaardid\",\n    \"Close Tab\": \"Sule vahekaart\",\n    \"Editor Objects\": \"Redigeerija objektid\"\n}"
  },
  {
    "path": "modules/editor/lang/fa.json",
    "content": "{\n  \"Editor\": \"ویرایشگر\",\n  \"Access the Editor Tool\": \"به ابزار ویرایشگر دسترسی پیدا کنید\",\n  \"Editor Tabs\": \"زبانه های ویرایشگر\",\n  \"Close Tab\": \"بستن برگه\",\n  \"Editor Objects\": \"اشیاء ویرایشگر\"\n}"
  },
  {
    "path": "modules/editor/lang/fi/lang.php",
    "content": "<?php return [\n  'plugin' => [\n    'name' => 'Editori',\n  ],\n  'mainview' => [],\n  'editor' => [\n    'menu_label' => 'Editori',\n  ],\n  'permissions' => [\n    'name' => 'Editori',\n    'access_editor' => 'Pääsy tiettyihin editorin toimintoihin, kuten sivujen muokkaukseen, hallitaan lisäosien oikeuksien kautta.',\n  ],\n  'common' => [\n    'settings' => 'Asetukset',\n    'document_saved' => 'Tiedosto tallennettu',\n    'document_deleted' => 'Tiedosto poistettu',\n    'document' => 'Tiedosto',\n    'document_reloaded' => 'Tiedosto ladattu uudelleen',\n    'error_saving' => 'Virhe tallennettaessa tiedostoa',\n    'error_loading' => 'Virhe ladattaessa tiedostoa',\n    'error' => 'Virhe',\n    'discard_changes' => 'Hylkää muutokset',\n    'confirm_delete' => 'Tiedosto poistetaan pysyvästi.',\n    'error_deleting' => 'Virhe poistettaessa tiedostoa',\n    'toggle_document_header' => 'Avaa dokumentin header',\n    'reveal_in_sidebar' => 'Avaa sivupalkisssa',\n    'apply_and_save' => 'Ota käyttöön ja tallenna',\n    'quick_access' => 'Pikapääsy',\n    'toggle_sidebar' => 'Näytä Sivuvalikko',\n    'document_not_found' => 'Pyydettyä dokumenttia ei löydy.',\n  ],\n  'filesystem' => [\n    'directory_name_cant_be_empty' => 'Hakemiston nimi ei voi olla tyhjä',\n    'invalid_path' => 'Polku voi sisältää vain numeroita, latinalaisia kirjaimia, välilyöntejä ja seuraavat symbolit: ._-@/',\n    'invalid_name' => 'Nimi voi sisältää vain numeroita, latinalaisia kirjaimia, välilyöntejä ja seuraavat symbolit: ._-@',\n    'already_exists' => 'Tiedosto tai hakemisto tällä nimellä on jo olemassa',\n    'error_creating_directory' => 'Virhe luotaessa hakemistoa :name. Tarkista kirjoitusoikeudet.',\n    'directory_popup_title' => 'Uusi hakemisto',\n    'directory_name' => 'Hakemiston nimi',\n    'directory_name_required' => 'Hakemiston nimi on pakollinen',\n    'rename_popup_title' => 'Nimeä uudelleen',\n    'rename_new_name' => 'Uusi nimi',\n    'rename_name_required' => 'Nimi on pakollinen',\n    'name_cant_be_empty' => 'Nimi ei voi olla tyhjä',\n    'original_not_found' => 'Alkuperäistä tiedostoa tai hakemistoa ei löytynyt',\n    'type_not_allowed' => 'Vain seuraavat tiedostotyypit ovat sallittuja: :allowed_types',\n    'error_renaming' => 'Virhe nimettäessä tiedostoa tai hakemistoa uudelleen',\n    'error_deleting_file' => 'Virhe tiedoston :name poistossa.',\n    'error_deleting_dir_not_empty' => 'Virhe hakemiston :name poistossa. Hakemisto ei ole tyhjä.',\n    'error_deleting_dir' => 'Virhe hakemiston :name poistossa.',\n    'delete_confirm' => 'Poista valitut tiedostot tai hakemistot?',\n    'delete_confirm_single' => 'Poista valittu tiedosto tai hakemisto?',\n    'selected_files_not_found' => 'Valittuja tiedostoja ei löytynyt',\n    'select_destination_dir' => 'Valitse kohdehakemisto',\n    'destination_not_found' => 'Kohdehakemistoa ei löydy',\n    'error_moving_file' => 'Virhe siirrettäessä tiedostoa :file',\n    'error_moving_directory' => 'Virhe siirrettäessä hakemistoa :dir',\n    'error_deleting_directory' => 'Virhe alkuperäisen hakemiston :dir poistossa',\n    'moving' => 'Siirretään valittuja kohteita',\n    'moved' => 'Kohteet onnistuneesti siirretty',\n    'destination_exists' => 'Tiedosto tai hakemisto tällä nimellä on jo olemassa: :name',\n    'file_not_valid' => 'Tiedosto ei kelpaa',\n    'too_large' => 'Ladattu tiedosto on liian suuri. Suurin sallittu tiedoston koko on :max_size'\n  ],\n];\n"
  },
  {
    "path": "modules/editor/lang/fi.json",
    "content": "{\n  \"Editor\": \"Editori\",\n  \"Access the Editor Tool\": \"Käytä muokkaustyökalua\",\n  \"Editor Tabs\": \"Editorin välilehdet\",\n  \"Close Tab\": \"Sulje välilehti\",\n  \"Editor Objects\": \"Editorin objektit\"\n}"
  },
  {
    "path": "modules/editor/lang/fr/lang.php",
    "content": "<?php return [\n  'plugin' => [\n    'name' => 'Editeur',\n  ],\n  'mainview' => [],\n  'editor' => [\n    'menu_label' => 'Editeur',\n  ],\n  'permissions' => [\n    'name' => 'Editeur',\n    'access_editor' => 'L\\'accès à des fonctionnalités spécifiques de l\\'éditeur, comme l\\'édition des pages CMS, est géré à l\\'aide d\\'autres autorisations du plugin.',\n  ],\n  'common' => [\n    'settings' => 'Paramètres',\n    'document_saved' => 'Document enregistré',\n    'document_deleted' => 'Document supprimé',\n    'document' => 'Document',\n    'document_reloaded' => 'Document rechargé',\n    'error_saving' => 'Erreur lors de l\\'enregistrement du document',\n    'error_loading' => 'Erreur lors du chargement du document',\n    'error' => 'Erreur',\n    'discard_changes' => 'Annuler les modifications',\n    'confirm_delete' => 'Le document sera supprimé définitivement.',\n    'error_deleting' => 'Erreur lors de la suppression du document',\n    'toggle_document_header' => 'Afficher/Masquer le titre du document',\n    'reveal_in_sidebar' => 'Afficher dans la barre latérale',\n    'apply_and_save' => 'Appliquer et enregistrer',\n    'quick_access' => 'Accès rapide',\n    'toggle_sidebar' => 'Afficher/Masquer la barre latérale',\n    'document_not_found' => 'Document introuvable',\n  ],\n  'filesystem' => [\n    'directory_name_cant_be_empty' => 'Le nom du répertoire ne peut pas être vide',\n    'invalid_path' => 'Chemin invalide. Les chemins peuvent contenir uniquement des chiffres, des lettres latines, des espaces et les symboles suivants : ._-@/',\n    'invalid_name' => 'Le nom peut contenir uniquement des chiffres, des lettres latines, des espaces et les symboles suivants : ._-@',\n    'already_exists' => 'Le fichier ou le répertoire existe déjà',\n    'error_creating_directory' => 'Erreur lors de la création du répertoire :name. Veuillez vérifier les autorisations d\\'écriture.',\n    'directory_popup_title' => 'Nouveau répertoire',\n    'directory_name' => 'Nom du répertoire',\n    'directory_name_required' => 'Le nom du répertoire est requis',\n    'rename_popup_title' => 'Renommer',\n    'rename_new_name' => 'Nouveau nom',\n    'rename_name_required' => 'Le nom est requis',\n    'name_cant_be_empty' => 'Le nom ne peut pas être vide',\n    'original_not_found' => 'Le fichier ou le répertoire original est introuvable',\n    'type_not_allowed' => 'L\\'extension du fichier doit être un des suivants: :allowed_types',\n    'error_renaming' => 'Erreur lors du renommage du fichier ou du répertoire',\n    'error_deleting_file' => 'Erreur lors de la suppression du fichier :name.',\n    'error_deleting_dir_not_empty' => 'Erreur lors de la suppression du répertoire :name. Le répertoire n\\'est pas vide',\n    'error_deleting_dir' => 'Erreur lors de la suppression du répertoire :name.',\n    'delete_confirm' => 'Supprimer les fichiers ou répertoires sélectionnés?',\n    'delete_confirm_single' => 'Supprimer le fichier ou le répertoire sélectionné?',\n    'selected_files_not_found' => 'Les fichiers sélectionnés sont introuvables',\n    'select_destination_dir' => 'Veuillez sélectionner le répertoire de destination',\n    'destination_not_found' => 'Le répertoire de destination est introuvable',\n    'error_moving_file' => 'Erreur lors du déplacement du fichier :file',\n    'error_moving_directory' => 'Erreur lors du déplacement du répertoire :dir',\n    'error_deleting_directory' => 'Erreur lors de la suppression du répertoire d\\'origine :dir',\n    'moving' => 'Déplacement en cours...',\n    'moved' => 'Fichier déplacé',\n    'destination_exists' => 'Un fichier ou répertoire avec ce nom esxiste déjà: :name',\n    'file_not_valid' => 'Le fichier n\\'est pas valide',\n    'too_large' => 'Le fichier est trop grand. La taille maximale autorisée est de :max_size',\n  ],\n];\n"
  },
  {
    "path": "modules/editor/lang/fr.json",
    "content": "{\n  \"Editor\": \"Éditeur\",\n  \"Access the Editor Tool\": \"Accéder à l'outil d'édition\",\n  \"Editor Tabs\": \"Onglets de l'éditeur\",\n  \"Close Tab\": \"Fermer l'onglet\",\n  \"Editor Objects\": \"Objets de l'éditeur\"\n}"
  },
  {
    "path": "modules/editor/lang/hu/lang.php",
    "content": "<?php return [\n  'plugin' => [\n    'name' => 'Szerkesztő',\n  ],\n  'mainview' => [],\n  'editor' => [\n    'menu_label' => 'Szerkesztő',\n  ],\n  'permissions' => [\n    'name' => 'Szerkesztő',\n    'access_editor' => 'Az egyes szerkesztő funkciókhoz, például a CMS oldalak szerkesztéséhez való hozzáférést más beépülő modulok engedélyeivel kezelhető.',\n  ],\n  'common' => [\n    'settings' => 'Beállítások',\n    'document_saved' => 'Dokumentum mentve',\n    'document_deleted' => 'Dokumentum törölve',\n    'document' => 'Dokumentum',\n    'document_reloaded' => 'Dokumentum újratöltve',\n    'error_saving' => 'Hiba a dokumentum mentésekor',\n    'error_loading' => 'Hiba a dokumentum betöltésekor',\n    'error' => 'Hiba',\n    'discard_changes' => 'Változtatások elvetése',\n    'confirm_delete' => 'A dokumentum véglegesen törlődik.',\n    'error_deleting' => 'Hiba a dokumentum törlésekor',\n    'toggle_document_header' => 'Fejléc bezárása / kinyitása',\n    'reveal_in_sidebar' => 'Felfedés az oldalsávon',\n    'apply_and_save' => 'Alkalmazás és mentés',\n    'quick_access' => 'Gyors elérés',\n    'toggle_sidebar' => 'Váltás az oldalsávra',\n    'document_not_found' => 'A kért dokumentum nem található.',\n  ],\n];\n"
  },
  {
    "path": "modules/editor/lang/hu.json",
    "content": "{\n  \"Editor\": \"Szerkesztő\",\n  \"Access the Editor Tool\": \"Nyissa meg a Szerkesztő eszközt\",\n  \"Editor Tabs\": \"Fülek\",\n  \"Close Tab\": \"Fül bezárása\",\n  \"Editor Objects\": \"Objektumok\"\n}"
  },
  {
    "path": "modules/editor/lang/id.json",
    "content": "{\n  \"Editor\": \"Editor\",\n  \"Access the Editor Tool\": \"Akses Alat Editor\",\n  \"Editor Tabs\": \"Tab Editor\",\n  \"Close Tab\": \"Tutup Tab\",\n  \"Editor Objects\": \"Objek Penyunting\"\n}"
  },
  {
    "path": "modules/editor/lang/it.json",
    "content": "{\n  \"Editor\": \"Editore\",\n  \"Access the Editor Tool\": \"Accedi allo strumento Editor\",\n  \"Editor Tabs\": \"Schede dell'editor\",\n  \"Close Tab\": \"Chiudi scheda\",\n  \"Editor Objects\": \"Oggetti dell'editor\"\n}"
  },
  {
    "path": "modules/editor/lang/ja.json",
    "content": "{\n  \"Editor\": \"編集者\",\n  \"Access the Editor Tool\": \"エディターツールにアクセスする\",\n  \"Editor Tabs\": \"エディターのタブ\",\n  \"Close Tab\": \"タブを閉じる\",\n  \"Editor Objects\": \"エディターオブジェクト\"\n}"
  },
  {
    "path": "modules/editor/lang/kaa.json",
    "content": "{\n    \"Editor\": \"Redaktor\",\n    \"Access the Editor Tool\": \"Access the Editor Tool\",\n    \"Editor Tabs\": \"Editor Tabs\",\n    \"Close Tab\": \"Close Tab\",\n    \"Editor Objects\": \"Editor Objects\"\n}"
  },
  {
    "path": "modules/editor/lang/kk.json",
    "content": "{\n    \"Editor\": \"Редактор\",\n    \"Access the Editor Tool\": \"Редактор Құралдарына қол жеткізу\",\n    \"Editor Tabs\": \"Редактор қойындылары\",\n    \"Close Tab\": \"Қойындыны жабу\",\n    \"Editor Objects\": \"Редактор Нысандары\"\n}"
  },
  {
    "path": "modules/editor/lang/ko.json",
    "content": "{\n  \"Editor\": \"편집자\",\n  \"Access the Editor Tool\": \"편집기 도구에 액세스\",\n  \"Editor Tabs\": \"편집기 탭\",\n  \"Close Tab\": \"탭 닫기\",\n  \"Editor Objects\": \"편집기 개체\"\n}"
  },
  {
    "path": "modules/editor/lang/lt.json",
    "content": "{\n  \"Editor\": \"redaktorius\",\n  \"Access the Editor Tool\": \"Pasiekite redaktoriaus įrankį\",\n  \"Editor Tabs\": \"Redaktorius skirtukai\",\n  \"Close Tab\": \"Uždaryti skirtuką\",\n  \"Editor Objects\": \"Redaktorius Objektai\"\n}"
  },
  {
    "path": "modules/editor/lang/lv.json",
    "content": "{\n  \"Editor\": \"Redaktors\",\n  \"Access the Editor Tool\": \"Piekļūstiet redaktora rīkam\",\n  \"Editor Tabs\": \"Redaktora cilnes\",\n  \"Close Tab\": \"Aizvērt cilni\",\n  \"Editor Objects\": \"Redaktora objekti\"\n}"
  },
  {
    "path": "modules/editor/lang/nb-no.json",
    "content": "{\n}"
  },
  {
    "path": "modules/editor/lang/nl/lang.php",
    "content": "<?php return [\n  'plugin' => [\n    'name' => 'Editor',\n  ],\n  'mainview' => [],\n  'editor' => [\n    'menu_label' => 'Editor',\n  ],\n  'permissions' => [\n    'name' => 'Editor',\n    'access_editor' => 'Toegang tot specifieke Editor-functies, zoals het bewerken van CMS pagina\\'s, wordt beheerd door permissie instellingen van andere plugins.',\n  ],\n  'common' => [\n    'settings' => 'Instellingen',\n    'document_saved' => 'Document opgeslagen',\n    'document_deleted' => 'Document verwijderd',\n    'document' => 'Document',\n    'document_reloaded' => 'Document opnieuw ingeladen',\n    'error_saving' => 'Fout bij opslaan document',\n    'error_loading' => 'Fout bij inladen document',\n    'error' => 'Fout',\n    'discard_changes' => 'Wijzigingen ongedaan maken',\n    'confirm_delete' => 'Het document wordt permanent verwijderd.',\n    'error_deleting' => 'Fout bij verwijderen document',\n    'toggle_document_header' => 'Toon of verberg document header',\n    'reveal_in_sidebar' => 'Toon in zijbalk',\n    'apply_and_save' => 'Toepassen en opslaan',\n    'quick_access' => 'Snelle toegang',\n    'toggle_sidebar' => 'In- of uitklappen zijbalk',\n    'document_not_found' => 'Het gevraagde document kan niet worden gevonden.',\n  ],\n  'filesystem' => [\n    'directory_name_cant_be_empty' => 'De naam van de map mag niet leeg zijn',\n    'invalid_path' => 'Mapnaam mag alleen cijfers, karakters (Latin), spaties en de volgende symbolen bevatten: ._-@/',\n    'invalid_name' => 'Bestandsnaam mag alleen cijfers, karakters (Latin), spaties en de volgende symbolen bevatten: ._-@',\n    'already_exists' => 'Bestand of map met deze naam bestaat reeds',\n    'error_creating_directory' => 'Fout bij het maken van map :name. Controleer schrijfrechten.',\n    'directory_popup_title' => 'Nieuwe Map',\n    'directory_name' => 'Mapnaam',\n    'directory_name_required' => 'De mapnaam is verplicht',\n    'rename_popup_title' => 'Hernoemen',\n    'rename_new_name' => 'Nieuwe naam',\n    'rename_name_required' => 'Naam is verplicht',\n    'name_cant_be_empty' => 'Naam mag niet leeg zijn',\n    'original_not_found' => 'Origineel bestand of map niet gevonden',\n    'type_not_allowed' => 'Enkel de volgende bestandstypen zijn toegestaan: :allowed_types',\n    'error_renaming' => 'Kan bestand of map niet hernoemen',\n    'error_deleting_file' => 'Kan bestand :name niet verwijderen.',\n    'error_deleting_dir_not_empty' => 'Fout bij verwijderen map :name. De map is niet leeg.',\n    'error_deleting_dir' => 'Fout bij verwijderen map :name.',\n    'delete_confirm' => 'Verwijder geselecteerde bestanden of mappen?',\n    'delete_confirm_single' => 'Verwijder geselecteerde bestand of map?',\n    'selected_files_not_found' => 'Geselecteerde bestanden niet gevonden',\n    'select_destination_dir' => 'Selecteer een doelmap',\n    'destination_not_found' => 'Doelmap is niet gevonden',\n    'error_moving_file' => 'Het bestand :file kan niet verplaatst worden',\n    'error_moving_directory' => 'De map :dir kan niet verplaatst worden',\n    'error_deleting_directory' => 'De originele map :dir kan niet verwijderd worden',\n    'moving' => 'Verplaatsen geselecteerde items',\n    'moved' => 'Geselecteerde items zijn verplaatst',\n    'destination_exists' => 'Bestand of map met deze naam bestaat reeds: name',\n    'file_not_valid' => 'Bestand is niet geldig',\n    'too_large' => 'Het bestand is te groot. De maximale bestandsgrootte is :max_size',\n  ],\n];\n"
  },
  {
    "path": "modules/editor/lang/nl.json",
    "content": "{\n  \"Editor\": \"Editor\",\n  \"Access the Editor Tool\": \"Toegang tot de Editor-tool\",\n  \"Editor Tabs\": \"Editor tabbladen\",\n  \"Close Tab\": \"Sluit tabblad\",\n  \"Editor Objects\": \"Editor objecten\"\n}"
  },
  {
    "path": "modules/editor/lang/pl.json",
    "content": "{\n  \"Editor\": \"Redaktor\",\n  \"Access the Editor Tool\": \"Uzyskaj dostęp do narzędzia edytora\",\n  \"Editor Tabs\": \"Editor Tabs\",\n  \"Close Tab\": \"Close Tab\",\n  \"Editor Objects\": \"Editor Objects\"\n}"
  },
  {
    "path": "modules/editor/lang/pt-br/lang.php",
    "content": "<?php return [\n    'plugin' => [\n        'nome' => 'Editor',\n    ],\n    'mainview' => [],\n    'editor' => [\n        'menu_label' => 'Editor',\n    ],\n    'permissions' => [\n        'nome' => 'Editor',\n        'access_editor' => 'O acesso a recursos específicos do editor, como edição de páginas do CMS, é gerenciado usando outras permissões de plug-in.',\n    ],\n    'common' => [\n        'settings' => 'Configurações',\n        'document_saved' => 'Documento salvo',\n        'document_deleted' => 'Documento excluído',\n        'document' => 'Documento',\n        'document_reloaded' => 'Documento recarregado',\n        'error_saving' => 'Erro ao salvar documento',\n        'error_loading' => 'Erro ao carregar documento',\n        'error' => 'Erro',\n        'discard_changes' => 'Descartar alterações',\n        'confirm_delete' => 'O documento será excluído permanentemente.',\n        'error_deleting' => 'Erro ao excluir documento',\n        'toggle_document_header' => 'Alternar cabeçalho do documento',\n        'reveal_in_sidebar' => 'Revelar na barra lateral',\n        'apply_and_save' => 'Aplicar e Salvar',\n        'quick_access' => 'Acesso rápido',\n        'toggle_sidebar' => 'Alternar barra lateral',\n        'document_not_found' => 'O documento solicitado não foi encontrado.',\n    ],\n    'filesystem' => [\n        'directory_name_cant_be_empty' => 'O nome do diretório não pode estar vazio',\n        'invalid_path' => 'O caminho pode conter apenas dígitos, letras latinas, espaços e os seguintes símbolos: ._-@/',\n        'invalid_name' => 'O nome pode conter apenas dígitos, letras latinas, espaços e os seguintes símbolos: ._-@',\n        'already_exists' => 'Arquivo ou diretório com este nome já existe',\n        'error_creating_directory' => 'Erro ao criar o diretório :name. Verifique as permissões de gravação.',\n        'directory_popup_title' => 'Novo diretório',\n        'directory_name' => 'Nome do diretório',\n        'directory_name_required' => 'O nome do diretório é obrigatório',\n        'rename_popup_title' => 'Renomear',\n        'rename_new_name' => 'Novo nome',\n        'rename_name_required' => 'O nome é obrigatório',\n        'name_cant_be_empty' => 'O nome não pode estar vazio',\n        'original_not_found' => 'Arquivo ou diretório original não encontrado',\n        'type_not_allowed' => 'Apenas os seguintes tipos de arquivo são permitidos: :allowed_types',\n        'error_renaming' => 'Erro ao renomear o arquivo ou diretório',\n        'error_deleting_file' => 'Erro ao excluir arquivo :name.',\n        'error_deleting_dir_not_empty' => 'Erro ao excluir o diretório :name. O diretório não está vazio.',\n        'error_deleting_dir' => 'Erro ao excluir o diretório :name.',\n        'delete_confirm' => 'Excluir arquivos ou diretórios selecionados?',\n        'delete_confirm_single' => 'Excluir arquivo ou diretório selecionado?',\n        'selected_files_not_found' => 'Arquivos selecionados não encontrados',\n        'select_destination_dir' => 'Por favor, selecione um diretório de destino',\n        'destination_not_found' => 'Diretório de destino não encontrado',\n        'error_moving_file' => 'Erro ao mover arquivo :file',\n        'error_moving_directory' => 'Erro ao mover o diretório :dir',\n        'error_deleting_directory' => 'Erro ao excluir o diretório original :dir',\n        'moving' => 'Movendo itens selecionados',\n        'moved' => 'Itens selecionados movidos com sucesso',\n        'destination_exists' => 'Arquivo ou diretório com este nome já existe: :name',\n        'file_not_valid' => 'Arquivo inválido',\n        'too_large' => 'O arquivo enviado é muito grande. O tamanho máximo de arquivo permitido é :max_size',\n    ],\n];\n"
  },
  {
    "path": "modules/editor/lang/pt-br.json",
    "content": "{\n    \"Editor\": \"Editor\",\n    \"Access the Editor Tool\": \"Acesse a ferramenta do Editor\",\n    \"Editor Tabs\": \"Abas do editor\",\n    \"Close Tab\": \"Fechar Aba\",\n    \"Editor Objects\": \"Objetos do Editor\"\n}"
  },
  {
    "path": "modules/editor/lang/pt-pt.json",
    "content": "{\n    \"Editor\": \"Editor\",\n    \"Access the Editor Tool\": \"Access the Editor Tool\",\n    \"Editor Tabs\": \"Editor Tabs\",\n    \"Close Tab\": \"Close Tab\",\n    \"Editor Objects\": \"Editor Objects\"\n}"
  },
  {
    "path": "modules/editor/lang/ro.json",
    "content": "{\n  \"Editor\": \"Editor\",\n  \"Access the Editor Tool\": \"Accesați Instrumentul Editor\",\n  \"Editor Tabs\": \"File Editor\",\n  \"Close Tab\": \"Închideți fila\",\n  \"Editor Objects\": \"Editor de obiecte\"\n}"
  },
  {
    "path": "modules/editor/lang/rs.json",
    "content": "{\n}"
  },
  {
    "path": "modules/editor/lang/ru/lang.php",
    "content": "<?php return [\n  'plugin' => [\n    'name' => 'Редактор',\n  ],\n  'mainview' => [],\n  'editor' => [\n    'menu_label' => 'Редактор',\n  ],\n  'permissions' => [\n    'name' => 'Редактор',\n    'access_editor' => 'Доступ к определенным функциям редактора, таким как редактирование страниц CMS, осуществляется с помощью других разрешений плагина.',\n  ],\n  'common' => [\n    'settings' => 'Настройки',\n    'document_saved' => 'Файл сохранен',\n    'document_deleted' => 'Файл удален',\n    'document' => 'Файл',\n    'document_reloaded' => 'Файл перезагружен',\n    'error_saving' => 'Ошибка сохранения файла',\n    'error_loading' => 'Ошибка загрузки файла',\n    'error' => 'Ошибка',\n    'discard_changes' => 'Отменить изменения',\n    'confirm_delete' => 'Файл будет удален без возможности восстановления.',\n    'error_deleting' => 'Ошибка удаления файла',\n    'toggle_document_header' => 'Переключить заголовок файла',\n    'reveal_in_sidebar' => 'Показать в боковом меню',\n    'apply_and_save' => 'Применить и сохранить',\n    'quick_access' => 'Быстрый доступ',\n    'toggle_sidebar' => 'Переключить боковое меню',\n    'document_not_found' => 'Запрошенный файл не может быть найден.',\n  ],\n  'filesystem' => [\n    'directory_name_cant_be_empty' => 'Имя директории должно быть указано',\n    'invalid_path' => 'Путь может содержать только цифры, латинские буквы, пробелы и следующие символы: ._-@/',\n    'invalid_name' => 'название может содержать только цифры, латинские буквы, пробелы и следующие символы: ._-@',\n    'already_exists' => 'Файл или директория с похожим именем уже существует.',\n    'error_creating_directory' => 'Ошибка создания директории :name. Пожалуйста проверьте права на запись.',\n    'directory_popup_title' => 'Новая директория',\n    'directory_name' => 'Название директории',\n    'directory_name_required' => 'Вы должны обязательно указать имя директории',\n    'rename_popup_title' => 'Переименовать',\n    'rename_new_name' => 'Новое имя',\n    'rename_name_required' => 'Название обязательно',\n    'name_cant_be_empty' => 'Название не может быть пустым',\n    'original_not_found' => 'Файл или директория не найдены',\n    'type_not_allowed' => 'Разрешены только следующие типы файлов: :allowed_types',\n    'error_renaming' => 'Ошибка переименования файла или директории',\n    'error_deleting_file' => 'Ошибка удаления файла :name.',\n    'error_deleting_dir_not_empty' => 'Ошибка удаления директории :name. Директория не пустая.',\n    'error_deleting_dir' => 'Ошибка удаления директории :name.',\n    'delete_confirm' => 'Удалить выбранные файлы и директории?',\n    'delete_confirm_single' => 'Удалить выбранный файл или директорию?',\n    'selected_files_not_found' => 'Выбранные файлы не найдены',\n    'select_destination_dir' => 'Пожалуйста выберите директорию',\n    'destination_not_found' => 'Директория не найдена',\n    'error_moving_file' => 'Ошибка перемещения файла :file',\n    'error_moving_directory' => 'Ошибка перемещения директории :dir',\n    'error_deleting_directory' => 'Ошибка удаления директории :dir',\n    'moving' => 'Перемещение выбранных элементов',\n    'moved' => 'Элементы успешно перемещены',\n    'destination_exists' => 'Файл или директория с похожим именем уже существуют: :name',\n    'file_not_valid' => 'Файл не корректен',\n    'too_large' => 'Загруженный файл слишком большой. Разрешенный максимальный размер файла :max_size',\n  ],\n];\n"
  },
  {
    "path": "modules/editor/lang/ru.json",
    "content": "{\n  \"Editor\": \"Редактор\",\n  \"Access the Editor Tool\": \"Доступ к инструменту редактирования\",\n  \"Editor Tabs\": \"Вкладки редактора\",\n  \"Close Tab\": \"Закрыть вкладку\",\n  \"Editor Objects\": \"Объекты редактора\"\n}"
  },
  {
    "path": "modules/editor/lang/sk/lang.php",
    "content": "<?php return [\n  'plugin' => [\n    'name' => 'Editor',\n  ],\n  'mainview' => [],\n  'editor' => [\n    'menu_label' => 'Editor',\n  ],\n  'permissions' => [\n    'name' => 'Editor',\n    'access_editor' => 'Prístup k špecifickým funkciám editora, ako je úprava stránok CMS, je spravovaný pomocou iných povolení doplnku.',\n  ],\n  'common' => [\n    'settings' => 'Nastavenia',\n    'document_saved' => 'Dokument bol uložený',\n    'document_deleted' => 'Dokument bol zmazaný',\n    'document' => 'Dokument',\n    'document_reloaded' => 'Dokument bol obnovený',\n    'error_saving' => 'Chyba pri ukladaní dokumentu',\n    'error_loading' => 'Chyba pri načítaní dokumentu',\n    'error' => 'Chyba',\n    'discard_changes' => 'Zahodiť zmeny',\n    'confirm_delete' => 'Dokument bude natrvalo odstránený.',\n    'error_deleting' => 'Chyba pri mazaní dokumentu',\n    'toggle_document_header' => 'Prepnúť hlavičku dokumentu',\n    'reveal_in_sidebar' => 'Zobraziť v postrannom paneli',\n    'apply_and_save' => 'Použiť a uložiť',\n    'quick_access' => 'Rýchly prístup',\n    'toggle_sidebar' => 'Prepnúť postrannú lištu',\n    'document_not_found' => 'Požadovaný dokument nebol nájdený.',\n  ],\n];\n"
  },
  {
    "path": "modules/editor/lang/sk.json",
    "content": "{\n  \"Editor\": \"Editor\",\n  \"Access the Editor Tool\": \"Prístup k nástroju Editor\",\n  \"Editor Tabs\": \"Editor tabs\",\n  \"Close Tab\": \"Zatvoriť tab\",\n  \"Editor Objects\": \"Editor objekty\"\n}"
  },
  {
    "path": "modules/editor/lang/sl.json",
    "content": "{\n  \"Editor\": \"Urednik\",\n  \"Access the Editor Tool\": \"Dostop do orodja za urejevalnik\",\n  \"Editor Tabs\": \"Editor Tabs\",\n  \"Close Tab\": \"Close Tab\",\n  \"Editor Objects\": \"Editor Objects\"\n}"
  },
  {
    "path": "modules/editor/lang/sv.json",
    "content": "{\n  \"Editor\": \"Redaktör\",\n  \"Access the Editor Tool\": \"Öppna redigeringsverktyget\",\n  \"Editor Tabs\": \"Redaktörsflikar\",\n  \"Close Tab\": \"Stäng flik\",\n  \"Editor Objects\": \"Redaktörsobjekt\"\n}"
  },
  {
    "path": "modules/editor/lang/th.json",
    "content": "{\n  \"Editor\": \"บรรณาธิการ\",\n  \"Access the Editor Tool\": \"เข้าถึงเครื่องมือแก้ไข\",\n  \"Editor Tabs\": \"แท็บตัวแก้ไข\",\n  \"Close Tab\": \"ปิดแท็บ\",\n  \"Editor Objects\": \"วัตถุตัวแก้ไข\"\n}"
  },
  {
    "path": "modules/editor/lang/tr.json",
    "content": "{\n  \"Editor\": \"Editör\",\n  \"Access the Editor Tool\": \"Editör Aracına Erişin\",\n  \"Editor Tabs\": \"Düzenleyici Sekmeleri\",\n  \"Close Tab\": \"Sekmeyi Kapat\",\n  \"Editor Objects\": \"Editör Nesneleri\"\n}"
  },
  {
    "path": "modules/editor/lang/uk.json",
    "content": "{\n  \"Editor\": \"Редактор\",\n  \"Access the Editor Tool\": \"Доступ до інструментів редактора\",\n  \"Editor Tabs\": \"Вкладки редактора\",\n  \"Close Tab\": \"Закрити вкладку\",\n  \"Editor Objects\": \"Об'єкти редактора\"\n}"
  },
  {
    "path": "modules/editor/lang/vn.json",
    "content": "{\n}"
  },
  {
    "path": "modules/editor/lang/zh-cn/lang.php",
    "content": "<?php return [\n  'plugin' => [\n    'name' => '编辑器',\n  ],\n  'mainview' => [],\n  'editor' => [\n    'menu_label' => '编辑器',\n  ],\n  'permissions' => [\n    'name' => '编辑',\n    'access_editor' => '对某些编辑功能的访问，例如编辑 CMS 页面，可以通过其他插件的权限进行管理',\n  ],\n  'common' => [\n    'settings' => '设置',\n    'document_saved' => '文件已保存',\n    'document_deleted' => '文档已删除',\n    'document' => '文档',\n    'document_reloaded' => '文件重新加载',\n    'error_saving' => '保存文档时出错',\n    'error_loading' => '加载文档时出错',\n    'error' => '错误',\n    'discard_changes' => '放弃更改',\n    'confirm_delete' => '文档将被永久删除。',\n    'error_deleting' => '删除文档时出错',\n    'toggle_document_header' => '显示或隐藏文档标题',\n    'reveal_in_sidebar' => '在侧边栏中显示',\n    'apply_and_save' => '应用并保存',\n    'quick_access' => '快速访问',\n    'toggle_sidebar' => '切换侧边栏',\n    'document_not_found' => '找不到请求的文档',\n  ],\n    'filesystem' => [\n    'directory_name_cant_be_empty' => '目录名不能为空',\n    'invalid_path' => '路径只能包含数字，字母，空格和以下符号：._-@/',\n    'invalid_name' => '名称只能包含数字，字母，空格和以下符号：._-@',\n    'already_exists' => '具有此名称的文件或目录已存在',\n    'error_creating_directory' => '创建目录错误： :name, 请检查写入权限。',\n    'directory_popup_title' => \"新目录\",\n    'directory_name' => '目录名称',\n    'directory_name_required' => '目录名必填',\n    'rename_popup_title' => '重命名',\n    'rename_new_name' => \"新名称\",\n    'rename_name_required' => '名字必填',\n    'name_cant_be_empty' => '名称不能为空',\n    'original_not_found' => \"未找到原始文件或目录\",\n    'type_not_allowed' => '只允许以下文件类型： :allowed_types',\n    'error_renaming' => '重命名文件或目录时出错',\n    'error_deleting_file' => '删除文件错误：名称。',\n    'error_deleting_dir_not_empty' => '错误删除目录：名称。 目录不为空。',\n    'error_deleting_dir' => '错误删除目录：:name 。',\n    'delete_confirm' => '删除选定的文件或目录？',\n    'delete_confirm_single' => '删除选定的文件或目录？',\n    'selected_files_not_found' => \"未找到选定文件\",\n    'select_destination_dir' => '请选择目标目录',\n    'destination_not_found' => '未找到目标目录',\n    'error_moving_file' => '移动文件错误：:file 。',\n    'error_moving_directory' => '移动目录错误：:dir 。',\n    'error_deleting_directory' => '删除原始目录时出错:dir',\n    'moving' => \"移动选定项目\",\n    'moved' => \"成功移动选定项目\",\n    'destination_exists' => '具有此名称的文件或目录已存在： :name',\n    'file_not_valid' => '文件无效',\n    'too_large' => '上传的文件太大了。 允许的最大文件大小为 :max_size',\n  ],\n];\n"
  },
  {
    "path": "modules/editor/lang/zh-cn.json",
    "content": "{\n    \"Editor\": \"编辑\",\n    \"Access the Editor Tool\": \"访问编辑器工具\",\n    \"Editor Tabs\": \"标签\",\n    \"Close Tab\": \"关闭标签\",\n    \"Editor Objects\": \"对象\"\n}"
  },
  {
    "path": "modules/editor/lang/zh-tw.json",
    "content": "{\n  \"Editor\": \"編輯\",\n  \"Access the Editor Tool\": \"訪問編輯器工具\"\n}"
  },
  {
    "path": "modules/editor/traits/FileSystemFunctions.php",
    "content": "<?php namespace Editor\\Traits;\n\nuse Lang;\nuse File;\nuse Input;\nuse Request;\nuse SystemException;\nuse ApplicationException;\nuse Symfony\\Component\\HttpFoundation\\File\\UploadedFile;\n\n/**\n * FileSystemFunctions implements common file and directory management functions for Tailor extensions.\n */\ntrait FileSystemFunctions\n{\n    /**\n     * editorCreateDirectory\n     */\n    protected function editorCreateDirectory($basePath, $newName, $parent)\n    {\n        if (!strlen($basePath)) {\n            throw new SystemException('The directory base path must not be empty');\n        }\n\n        if (!strlen($newName)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.directory_name_cant_be_empty'));\n        }\n\n        if (!$this->validateFileSystemPath($newName)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_path'));\n        }\n\n        if (strlen($parent) && !$this->validateFileSystemPath($parent)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_path'));\n        }\n\n        if (!$this->validateFileSystemName($newName)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_name'));\n        }\n\n        $newFullPath = $basePath.'/'.$parent.'/'.$newName;\n        if (file_exists($newFullPath) && is_dir($newFullPath)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.already_exists'));\n        }\n\n        if (!File::makeDirectory($newFullPath, 0755, true, true)) {\n            throw new ApplicationException(Lang::get(\n                'editor::lang.filesystem.error_creating_directory',\n                ['name' => $newName]\n            ));\n        }\n    }\n\n    /**\n     * editorRenameFileOrDirectory\n     */\n    protected function editorRenameFileOrDirectory($basePath, $name, $originalPath, $allowedFileExtensions)\n    {\n        $newName = trim($name);\n        if (!strlen($newName)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.name_cant_be_empty'));\n        }\n\n        if (!$this->validateFileSystemPath($newName)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_path'));\n        }\n\n        if (!$this->validateFileSystemName($newName)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_name'));\n        }\n\n        $originalPath = trim($originalPath);\n        if (!$this->validateFileSystemPath($originalPath)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_path'));\n        }\n\n        $originalFullPath = $basePath.'/'.$originalPath;\n        if (!file_exists($originalFullPath)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.original_not_found'));\n        }\n\n        if (!is_dir($originalFullPath) && !$this->validateFileSystemFileExtension($newName, $allowedFileExtensions)) {\n            throw new ApplicationException(Lang::get(\n                'editor::lang.filesystem.type_not_allowed',\n                ['allowed_types' => implode(', ', $allowedFileExtensions)]\n            ));\n        }\n\n        $newFullPath = $basePath.'/'.dirname($originalPath).'/'.$newName;\n        if (file_exists($newFullPath) && $newFullPath !== $originalFullPath) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.already_exists'));\n        }\n\n        if (!@rename($originalFullPath, $newFullPath)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.error_renaming'));\n        }\n    }\n\n    /**\n     * editorDeleteFileOrDirectory\n     */\n    protected function editorDeleteFileOrDirectory($basePath, $fileList)\n    {\n        // Delete leaves first\n        usort($fileList, function($a, $b) {\n            return strlen($b) - strlen($a);\n        });\n\n        foreach ($fileList as $path) {\n            if (!$this->validateFileSystemPath($path)) {\n                throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_path'));\n            }\n\n            $fullPath = $basePath.'/'.$path;\n            if (File::exists($fullPath)) {\n                if (!File::isDirectory($fullPath)) {\n                    if (!@File::delete($fullPath)) {\n                        throw new ApplicationException(Lang::get(\n                            'editor::lang.filesystem.error_deleting_file',\n                            ['name' => $path]\n                        ));\n                    }\n                }\n                else {\n                    $empty = File::isDirectoryEmpty($fullPath);\n                    if (!$empty) {\n                        throw new ApplicationException(Lang::get(\n                            'editor::lang.filesystem.error_deleting_dir_not_empty',\n                            ['name' => $path]\n                        ));\n                    }\n\n                    if (!@rmdir($fullPath)) {\n                        throw new ApplicationException(Lang::get(\n                            'editor::lang.filesystem.error_deleting_dir',\n                            ['name' => $path]\n                        ));\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * editorMoveFilesOrDirectories\n     */\n    protected function editorMoveFilesOrDirectories($basePath, $selectedList, $destinationDir)\n    {\n        if (!count($selectedList)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.selected_files_not_found'));\n        }\n\n        if (!strlen($destinationDir)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.select_destination_dir'));\n        }\n\n        if (!$this->validateFileSystemPath($destinationDir)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_path'));\n        }\n\n        // Ensure directory exists\n        $destinationFullPath = $basePath.'/'.$destinationDir;\n        if (!File::isDirectory($destinationFullPath)) {\n            File::makeDirectory($destinationFullPath, 0755, true, true);\n        }\n\n        // Path is gone\n        if (!file_exists($destinationFullPath) || !is_dir($destinationFullPath)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.destination_not_found'));\n        }\n\n        foreach ($selectedList as $path) {\n            if (!$this->validateFileSystemPath($path)) {\n                throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_path'));\n            }\n\n            $basename = basename($path);\n            $originalFullPath = $basePath.'/'.$path;\n            $newFullPath = rtrim($destinationFullPath, '/').'/'.$basename;\n            $safeDir = $basePath;\n\n            if ($originalFullPath == $newFullPath) {\n                continue;\n            }\n\n            if ((is_file($originalFullPath) && is_file($newFullPath))\n                || (is_dir($originalFullPath) && is_dir($newFullPath))) {\n                throw new ApplicationException(Lang::get(\n                    'editor::lang.filesystem.destination_exists',\n                    ['name' => $basename]\n                ));\n            }\n\n            if (is_file($originalFullPath)) {\n                if (!@File::move($originalFullPath, $newFullPath)) {\n                    throw new ApplicationException(Lang::get(\n                        'editor::lang.filesystem.error_moving_file',\n                        ['file' => $basename]\n                    ));\n                }\n            }\n            elseif (is_dir($originalFullPath)) {\n                if (!@File::copyDirectory($originalFullPath, $newFullPath)) {\n                    throw new ApplicationException(Lang::get(\n                        'editor::lang.filesystem.error_moving_directory',\n                        ['dir' => $basename]\n                    ));\n                }\n\n                if (strpos($originalFullPath, '../') !== false) {\n                    throw new ApplicationException(Lang::get(\n                        'editor::lang.filesystem.error_deleting_directory',\n                        ['dir' => $basename]\n                    ));\n                }\n\n                if (strpos($originalFullPath, $safeDir) !== 0) {\n                    throw new ApplicationException(Lang::get(\n                        'editor::lang.filesystem.error_deleting_directory',\n                        ['dir' => $basename]\n                    ));\n                }\n\n                if (!@File::deleteDirectory($originalFullPath)) {\n                    throw new ApplicationException(Lang::get(\n                        'editor::lang.filesystem.error_deleting_directory',\n                        ['dir' => $basename]\n                    ));\n                }\n            }\n        }\n    }\n\n    /**\n     * editorUploadFiles\n     */\n    protected function editorUploadFiles($basePath, $allowedExtensions)\n    {\n        $uploadedFile = Input::file('file');\n        if (!is_object($uploadedFile)) {\n            return;\n        }\n\n        $fileName = $uploadedFile->getClientOriginalName();\n\n        // Check valid upload\n        if (!$uploadedFile->isValid()) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.file_not_valid'));\n        }\n\n        // Check file size\n        $maxSize = UploadedFile::getMaxFilesize();\n        if ($uploadedFile->getSize() > $maxSize) {\n            throw new ApplicationException(Lang::get(\n                'editor::lang.filesystem.too_large',\n                ['max_size' => File::sizeToString($maxSize)]\n            ));\n        }\n\n        // Check for valid file extensions\n        if (!$this->validateFileSystemFileExtension($fileName, $allowedExtensions)) {\n            throw new ApplicationException(Lang::get(\n                'editor::lang.filesystem.type_not_allowed',\n                ['allowed_types' => implode(', ', $allowedExtensions)]\n            ));\n        }\n\n        // Validate destination path\n        $destinationDir = trim(Request::input('destination'));\n        if (!strlen($destinationDir)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.select_destination_dir'));\n        }\n\n        if (!$this->validateFileSystemPath($destinationDir)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.invalid_path'));\n        }\n\n        // Ensure directory exists\n        $destinationFullPath = $basePath.'/'.$destinationDir;\n        if (!File::isDirectory($destinationFullPath)) {\n            File::makeDirectory($destinationFullPath, 0755, true, true);\n        }\n\n        // Path is gone\n        if (!file_exists($destinationFullPath) || !is_dir($destinationFullPath)) {\n            throw new ApplicationException(Lang::get('editor::lang.filesystem.destination_not_found'));\n        }\n\n        // Accept the uploaded file\n        $destinationFileName = $uploadedFile->getClientOriginalName();\n        if (strtolower(File::extension($fileName)) === 'svg') {\n            $contents = \\Html::cleanVector(file_get_contents($uploadedFile->getRealPath()));\n            File::put($destinationFullPath.'/'.$destinationFileName, $contents);\n        }\n        else {\n            $uploadedFile->move($destinationFullPath, $destinationFileName);\n        }\n    }\n\n    /**\n     * validateFileSystemPath validates a file system path\n     * @param $path string\n     */\n    private function validateFileSystemPath($path): bool\n    {\n        if (!preg_match('/^[\\@0-9a-z\\.\\s_\\-\\/]+$/i', $path)) {\n            return false;\n        }\n\n        if (strpos($path, '..') !== false || strpos($path, './') !== false) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * validateFileSystemName\n     * @param $name string\n     */\n    private function validateFileSystemName($name): bool\n    {\n        if (!preg_match('/^[\\@0-9a-z\\.\\s_\\-]+$/i', $name)) {\n            return false;\n        }\n\n        if (strpos($name, '..') !== false) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * validateFileSystemFileExtension\n     */\n    private function validateFileSystemFileExtension($name, $allowedExtensions): bool\n    {\n        $extension = strtolower(File::extension($name));\n        if (!in_array($extension, $allowedExtensions)) {\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/editor/vuecomponents/Application.php",
    "content": "<?php namespace Editor\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Editor Application component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Application extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'editor-component-application';\n\n    protected $require = [\n        \\Editor\\VueComponents\\Navigator::class,\n        \\Editor\\VueComponents\\DocumentInfoPopup::class,\n        \\Backend\\VueComponents\\LoadingIndicator::class\n    ];\n}\n"
  },
  {
    "path": "modules/editor/vuecomponents/DocumentInfoPopup.php",
    "content": "<?php namespace Editor\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Editor document information popup component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DocumentInfoPopup extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'editor-document-info-popup';\n\n    protected $require = [\n        \\Backend\\VueComponents\\InfoTable::class,\n        \\Backend\\VueComponents\\Modal::class\n    ];\n}\n"
  },
  {
    "path": "modules/editor/vuecomponents/EditorConflictResolver.php",
    "content": "<?php namespace Editor\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Resolves concurrency conflicts for Editor documents\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass EditorConflictResolver extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'editor-component-editorconflictresolver';\n\n    protected $require = [\n        \\Backend\\VueComponents\\Modal::class\n    ];\n}\n"
  },
  {
    "path": "modules/editor/vuecomponents/Navigator.php",
    "content": "<?php namespace Editor\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Editor Navigator component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Navigator extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'editor-component-navigator';\n}\n"
  },
  {
    "path": "modules/editor/vuecomponents/application/assets/css/application.css",
    "content": ".editor-application-splash>div .splash-content{display:inline-block}.editor-application-splash>div .splash-content.document-not-found{text-align:center}.editor-application-splash>div .splash-content.document-not-found .october-cms-logo-grey{display:inline-block}.editor-application-splash>div .document-not-found-message{color:var(--oc-primary-color);margin:30px auto 0}.editor-application-splash>div .document-not-found-message>div{margin-top:30px}.editor-application-splash>div .october-cms-logo-grey{height:38px;width:230px}.editor-application-splash>div .editor-custom-logo>img{display:block;max-height:200px;max-width:200px}.editor-application-splash>div .editor-hotkeys{color:var(--oc-primary-color);margin:30px auto 0}.editor-application-splash>div .editor-hotkeys td,.editor-application-splash>div .editor-hotkeys th{padding-bottom:10px}.editor-application-splash>div .editor-hotkeys th{font-weight:400;padding-right:10px;text-align:right}.editor-application-splash>div .editor-hotkeys .editor-hotkey{background:var(--bs-secondary-bg);border-radius:4px;display:inline-block;padding:1px 4px}\n"
  },
  {
    "path": "modules/editor/vuecomponents/application/assets/js/application.js",
    "content": "import dropdownMenuUtils from '../../../../../backend/vuecomponents/dropdownmenu/assets/js/dropdownmenu-utils.js';\n\nexport default {\n    props: {\n        store: Object,\n        customLogo: String\n    },\n    data: function() {\n        return {\n            tabContextMenuItems: [\n                {\n                    type: 'text',\n                    command: 'reveal-in-sidebar',\n                    label: ''\n                },\n                {\n                    type: 'separator'\n                }\n            ],\n            navigatorReadonly: false,\n            sidebarHidden: false,\n            directDocumentNotFound: false,\n            quickViewHotkey: 'ctrl+shift+a',\n            toggleSidebarHotkey: 'ctrl+shift+b'\n        };\n    },\n    computed: {\n        directDocumentName: function computeDirectDocumentName() {\n            if (typeof this.store.state.params.directModeDocument !== 'string') {\n                return null;\n            }\n\n            return this.store.state.params.directModeDocument;\n        },\n\n        isDirectDocumentMode: function computeIsDirectDocumentMode() {\n            return !!this.directDocumentName;\n        },\n\n        documentNameToOpen: function computeDocumentNameToOpen() {\n            if (typeof this.store.state.params.openDocument !== 'string') {\n                return null;\n            }\n\n            return this.store.state.params.openDocument;\n        },\n\n        isDocumentNameToOpenProvided: function isDocumentNameToOpenProvided() {\n            return !!this.documentNameToOpen;\n        }\n    },\n    methods: {\n        ajaxRequest: function ajaxRequest(handler, requestData, options) {\n            options = options || {};\n            return new Promise(function(resolve, reject) {\n                const request = oc.ajax(handler, {\n                    data: requestData,\n                    success: function(data) {\n                        resolve(data);\n                    },\n                    error: function(data, statusCode, xhr) {\n                        xhr.responseJSON = data;\n                        reject(xhr);\n                    }\n                });\n\n                if (options.signal) {\n                    options.signal.addEventListener('abort', function() {\n                        request.abort();\n                    });\n                }\n            });\n        },\n\n        openTab: function openTab(tabData) {\n            const key = this.store.tabManager.createTab(tabData);\n            this.$refs.tabs.selectTab(key);\n        },\n\n        showEditorDocumentInfoPopup: function showEditorDocumentInfoPopup(items, title) {\n            this.$refs.infoPopup.show(items, title);\n        },\n\n        openDocument: function openDocument(documentUriStr) {\n            this.$refs.navigator.openDocument(documentUriStr);\n        },\n\n        setNavigatorReadonly(value) {\n            this.navigatorReadonly = value;\n        },\n\n        hasChangedTabs: function hasChangedTabs() {\n            return this.store.tabManager.hasChangedTabs();\n        },\n\n        revealNavigatorNode: function revealNavigatorNode(uniqueKey) {\n            this.$refs.navigator.reveal(uniqueKey);\n        },\n\n        getCurrentDocumentComponent: function getCurrentDocumentComponent() {\n            return this.$refs.tabs.getSelectedTabComponent();\n        },\n\n        getAllOpenDocumentComponents: function getAllOpenDocumentComponents() {\n            const tabKeys = this.store.tabManager.getTabKeys();\n            const result = [];\n\n            tabKeys.forEach((tabKey) => {\n                const component = this.$refs.tabs.getTabComponent(tabKey);\n                component && result.push(component);\n            });\n\n            return result;\n        },\n\n        navigatorNodeKeyChanged: function navigatorNodeKeyChanged(oldValue, newValue) {\n            this.$refs.navigator.navigatorNodeKeyChanged(oldValue, newValue);\n        },\n\n        runCurrentDocumentComponentCommand: function runCurrentDocumentComponentCommand(command, payload) {\n            const component = this.getCurrentDocumentComponent();\n            if (!component) {\n                return;\n            }\n\n            if (typeof component.onApplicationCommand === 'function') {\n                component.onApplicationCommand(command, payload);\n            }\n        },\n\n        closeAllTabs: function closeAllTabs(onlySaved) {\n            this.$refs.tabs.closeAllTabs(null, onlySaved);\n        },\n\n        postDirectDocumentSavedMessage: function postDirectDocumentSavedMessage() {\n            if (window.parent) {\n                window.parent.postMessage('october-editor-saved', '*');\n            }\n        },\n\n        onTabSelected: function onTabSelected(key) {\n            this.store.state.navigatorSelectedUniqueKey = key;\n\n            this.store.dispatchCommand('global:application-tab-selected', key);\n        },\n\n        onTabClose: function onTabClose(tabKey, ev) {\n            const index = this.$refs.tabs.getTabIndex(tabKey);\n            this.store.tabManager.closeTab(index);\n        },\n\n        onTabContextMenu: function onTabContextMenu(command, tab) {\n            if (command === 'reveal-in-sidebar') {\n                this.$refs.navigator.reveal(tab.key);\n            }\n        },\n\n        onShowQuickAccess: function onShowQuickAccess(ev) {\n            ev.preventDefault();\n            ev.stopPropagation();\n\n            if (!$.oc.modalFocusManager.hasHotkeyBlockingAbove(null)) {\n                this.$refs.navigator.showQuickAccess();\n            }\n        },\n\n        onToggleSidebar: function onToggleSidebar(ev) {\n            ev.preventDefault();\n            ev.stopPropagation();\n\n            this.sidebarHidden = !this.sidebarHidden;\n        },\n\n        onCloseDirectDocumentClick: function onCloseDirectDocumentClick() {\n            if (window.parent) {\n                window.parent.postMessage('october-editor-close', '*');\n            }\n        }\n    },\n    watch: {\n        'store.state.editorTabs': {\n            deep: true,\n            handler: function watchStoreTabs(value) {\n                if (!this.isDirectDocumentMode) {\n                    this.store.tabManager.storePersistentTabs(value);\n                }\n            }\n        }\n    },\n    mounted: function() {\n        Vue.nextTick(() => {\n            if (!this.isDirectDocumentMode) {\n                let tabKeys = this.store.tabManager.getPersistentTabKeys();\n                if (tabKeys.length) {\n                    tabKeys = this.$refs.navigator.openTabs(tabKeys);\n\n                    this.store.tabManager.setPersistentTabKeys(tabKeys);\n                }\n\n                if (this.isDocumentNameToOpenProvided) {\n                    if (this.$refs.navigator.openTabs([this.documentNameToOpen]).length) {\n                        this.revealNavigatorNode(this.documentNameToOpen);\n                    }\n                    let url = window.location.href;\n                    url = url.split(\"?\")[0];\n                    window.history.replaceState({}, \"\", url);\n                }\n            }\n            else {\n                if (!this.$refs.navigator.openTabs([this.directDocumentName]).length) {\n                    this.directDocumentNotFound = true;\n                }\n            }\n        });\n\n        const item = dropdownMenuUtils.findMenuItem(this.tabContextMenuItems, ['reveal-in-sidebar'], 'command');\n        if (item) {\n            item.label = this.$el.getAttribute('data-lang-reveal-in-sidebar');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/editor/vuecomponents/application/assets/less/_splash.less",
    "content": ".editor-application-splash {\n    > div {\n        .splash-content {\n            display: inline-block;\n\n            &.document-not-found {\n                text-align: center;\n\n                .october-cms-logo-grey {\n                    display: inline-block;\n                }\n            }\n        }\n\n        .document-not-found-message {\n            margin: 30px auto 0 auto;\n            color: @primary-color;\n\n            > div {\n                margin-top: 30px;\n            }\n        }\n\n        .october-cms-logo-grey {\n            width: 230px;\n            height: 38px;\n        }\n\n        .editor-custom-logo {\n            > img {\n                display: block;\n                max-width: 200px;\n                max-height: 200px;\n            }\n        }\n\n        .editor-hotkeys {\n            margin: 30px auto 0 auto;\n            color: @primary-color;\n\n            th,\n            td {\n                padding-bottom: 10px;\n            }\n\n            th {\n                font-weight: normal;\n                text-align: right;\n                padding-right: 10px;\n            }\n\n            .editor-hotkey {\n                display: inline-block;\n                padding: 1px 4px;\n                border-radius: 4px;\n                background: @secondary-bg;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/editor/vuecomponents/application/assets/less/application.less",
    "content": "@import \"../../../../../backend/assets/less/core/boot.less\";\n\n@import \"_splash.less\";\n"
  },
  {
    "path": "modules/editor/vuecomponents/application/partials/_application.php",
    "content": "<div\n    class=\"position-relative h-100\"\n    :class=\"{'application-sidebar-hidden': sidebarHidden || isDirectDocumentMode}\"\n    data-lang-reveal-in-sidebar=\"<?= e(trans('editor::lang.common.reveal_in_sidebar')) ?>\"\n    v-oc-hotkey:[quickViewHotkey]=\"onShowQuickAccess\"\n    v-oc-hotkey:[toggleSidebarHotkey]=\"onToggleSidebar\"\n>\n    <backend-splitter\n        direction=\"vertical\"\n        unique-key=\"editor-main-view\"\n        :default-size=\"400\">\n        <template v-slot:first>\n            <editor-component-navigator ref=\"navigator\" :store=\"store\" :readonly=\"navigatorReadonly\"></editor-component-navigator>\n        </template>\n\n        <template v-slot:second>\n            <div class=\"flex-layout-column fill-container\">\n                <backend-tabs\n                    ref=\"tabs\"\n                    :tabs=\"store.state.editorTabs\"\n                    :full-height=\"true\"\n                    :closeable=\"true\"\n                    :supports-full-screen=\"true\"\n                    :hide-tab-panel=\"isDirectDocumentMode\"\n                    :common-tab-context-menu-items=\"['close', 'close-all', 'close-others', 'close-saved']\"\n                    :tab-context-menu-items=\"tabContextMenuItems\"\n                    aria-label=\"<?= __('Editor Tabs') ?>\"\n                    closeTooltip=\"<?= __('Close Tab') ?>\"\n                    closeTooltipHotkey=\"⇧⌥W\"\n                    @tabclose=\"onTabClose\"\n                    @tabselected=\"onTabSelected\"\n                    @contextmenu=\"onTabContextMenu\"\n                >\n                    <template v-slot:noTabsView>\n                        <div class=\"flex-layout-item stretch relative\">\n                            <div class=\"editor-application-splash layout-fill-container flex-layout-column align-center justify-center\">\n                                <div>\n                                    <div class=\"splash-content\" :class=\"{'document-not-found': directDocumentNotFound}\">\n                                        <div v-if=\"!customLogo\" class=\"october-cms-logo-grey\"/>\n                                        <div class=\"editor-custom-logo\" v-if=\"customLogo\">\n                                            <img v-bind:src=\"customLogo\">\n                                        </div>\n\n                                        <table class=\"editor-hotkeys\" v-if=\"!isDirectDocumentMode\">\n                                            <tbody>\n                                                <tr>\n                                                    <th><?= e(trans('editor::lang.common.quick_access')) ?></th>\n                                                    <td><span class=\"editor-hotkey\" v-text=\"quickViewHotkey\"></span></td>\n                                                </tr>\n                                                <tr>\n                                                    <th><?= e(trans('editor::lang.common.toggle_sidebar')) ?></th>\n                                                    <td><span class=\"editor-hotkey\" v-text=\"toggleSidebarHotkey\"></span></td>\n                                                </tr>\n                                            </tbody>\n                                        </table>\n\n                                        <div v-if=\"directDocumentNotFound\" class=\"document-not-found-message\">\n                                            <?= e(trans('editor::lang.common.document_not_found')) ?>\n\n                                            <div>\n                                                <button class=\"btn btn-primary\" @click=\"onCloseDirectDocumentClick\"><?= e(trans('backend::lang.form.close')) ?></button>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </template>\n                </backend-tabs>\n            </div>\n        </template>\n    </backend-splitter>\n\n    <editor-document-info-popup ref=\"infoPopup\"></editor-document-info-popup>\n</div>\n"
  },
  {
    "path": "modules/editor/vuecomponents/documentinfopopup/assets/js/documentinfopopup.js",
    "content": "export default {\n    props: {},\n    data: function() {\n        return {\n            items: [],\n            title: ''\n        };\n    },\n    computed: {},\n    methods: {\n        show: function show(items, title) {\n            this.items = items;\n            this.title = title;\n            this.$refs.modal.show();\n        }\n    }\n};\n"
  },
  {
    "path": "modules/editor/vuecomponents/documentinfopopup/partials/_documentinfopopup.php",
    "content": "<backend-modal\n    ref=\"modal\"\n    resizable=\"horizontal\"\n    size=\"small\"\n    unique-key=\"editor-info-modal\"\n    aria-labeled-by=\"editor-info-modal-title\"\n>\n    <template v-slot:content>\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\" id=\"cms-info-modal-title\" v-text=\"title\"></h4>\n            <button\n                @click.prevent=\"$refs.modal.hide()\"\n                type=\"button\"\n                class=\"btn-close\"\n                aria-label=\"Close\"\n                tabindex=\"0\"></button>\n        </div>\n        <div class=\"modal-body\">\n            <backend-info-table\n                :items=items\n            >\n            </backend-info-table>\n        </div>\n        <div class=\"modal-footer\">\n            <button\n                type=\"button\"\n                class=\"btn btn-primary btn-default-action\"\n                @click.prevent=\"$refs.modal.hide()\"\n                data-default-focus\n            ><?= e(trans('backend::lang.form.close')) ?></button>\n        </div>\n    </template>\n</backend-modal>"
  },
  {
    "path": "modules/editor/vuecomponents/editorconflictresolver/assets/js/editorconflictresolver.js",
    "content": "export default {\n    props: {},\n    data: function() {\n        return {\n            uniqueKey: $.oc.domIdManager.generate('modal-alert'),\n            modalTitleId: $.oc.domIdManager.generate('modal-title'),\n            actionSelected: false,\n            resolve: null,\n            reject: null\n        };\n    },\n    computed: {},\n    methods: {\n        requestResolution: function requestResolution() {\n            var that = this;\n\n            this.actionSelected = false;\n            return new Promise(function(resolve, reject) {\n                that.resolve = resolve;\n                that.reject = reject;\n                that.$refs.modal.show();\n            });\n        },\n\n        onHidden: function onHidden() {\n            if (this.reject && !this.actionSelected) {\n                this.reject(false);\n            }\n\n            this.resolve = null;\n            this.reject = null;\n        },\n\n        onReloadClick: function onReloadClick() {\n            this.actionSelected = true;\n            this.$refs.modal.hide();\n            this.resolve('reload');\n        },\n\n        onSaveClick: function onSaveClick() {\n            this.actionSelected = true;\n            this.$refs.modal.hide();\n            this.resolve('save');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/editor/vuecomponents/editorconflictresolver/partials/_editorconflictresolver.php",
    "content": "<backend-modal\n    ref=\"modal\"\n    :store-position=\"false\"\n    unique-key=\"uniqueKey\"\n    aria-labeled-by=\"modalTitleId\"\n    @hidden=\"onHidden\"\n>\n    <template v-slot:content>\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\" v-bind:id=\"modalTitleId\"><?= e(trans('backend::lang.form.concurrency_file_changed_title')) ?></h4>\n            <button @click.prevent=\"$refs.modal.hide()\" type=\"button\" class=\"btn-close\" aria-label=\"<?= __(\"Close\") ?>\" tabindex=\"0\"></button>\n        </div>\n        <div class=\"modal-body\">\n            <p><?= e(trans('backend::lang.form.concurrency_file_changed_description')) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <button type=\"button\" class=\"btn btn-danger btn-default-action\" data-default-focus @click.prevent=\"onReloadClick\"><?= e(trans('backend::lang.form.reload')) ?></button>\n            <button type=\"button\" class=\"btn btn-primary btn-default-action\" @click.prevent=\"onSaveClick\"><?= e(trans('backend::lang.form.save')) ?></button>\n\n            <span class=\"button-separator\"><?= e(trans('backend::lang.form.or')) ?></span>\n            <button class=\"btn btn-link text-muted\" @click.prevent=\"$refs.modal.hide()\"><?= e(trans('backend::lang.form.cancel')) ?></button>\n        </div>\n    </template>\n</backend-modal>"
  },
  {
    "path": "modules/editor/vuecomponents/navigator/assets/css/navigator.css",
    "content": ".application-sidebar-hidden>.component-backend-splitter>.splitter-first-panel{width:0!important}.application-sidebar-hidden>.component-backend-splitter .splitter-handle,.application-sidebar-hidden>.component-backend-splitter>.splitter-first-panel .treeview-ghost-image-container,.application-sidebar-hidden>.component-backend-splitter>.splitter-first-panel .treeview-search-control{display:none}\n"
  },
  {
    "path": "modules/editor/vuecomponents/navigator/assets/js/navigator.js",
    "content": "import { DocumentUri } from '../../../../assets/js/editor.documenturi.js';\nimport { EditorCommand } from '../../../../assets/js/editor.command.js';\n\nexport default {\n    props: {\n        store: Object,\n        readonly: {\n            type: Boolean,\n            default: false\n        }\n    },\n    methods: {\n        navigatorNodeKeyChanged: function navigatorNodeKeyChanged(oldValue, newValue) {\n            this.$refs.treeView.nodeKeyChanged(oldValue, newValue);\n        },\n\n        openTabs: function openTabs(tabs) {\n            var that = this,\n                result = [];\n            tabs.forEach(function(tabKey) {\n                if (that.openDocument(tabKey)) {\n                    result.push(tabKey);\n                }\n            });\n\n            return result;\n        },\n\n        openDocument: function openDocument(documentUriStr) {\n            var nodeData = this.store.findNavigatorNode(documentUriStr);\n            if (nodeData) {\n                this.emitNodeClick(nodeData);\n                return true;\n            }\n\n            return false;\n        },\n\n        emitNodeClick: function emitNodeClick(nodeData) {\n            var uri = DocumentUri.parse(nodeData.uniqueKey);\n\n            var cmd = uri.namespace + ':' + 'navigator-selected';\n\n            this.store.dispatchCommand(cmd, nodeData);\n        },\n\n        reveal: function reveal(uniqueKey) {\n            this.$refs.treeView.revealNode(uniqueKey);\n        },\n\n        showQuickAccess: function showQuickAccess() {\n            this.$refs.treeView.showQuickAccess();\n        },\n\n        onNodeClick: function onNodeClick(ev) {\n            this.emitNodeClick(ev.treeviewData.nodeData);\n        },\n\n        onNodeDrop: function onNodeDrop(ev) {\n            var uri = DocumentUri.parse(ev.movedToNode.uniqueKey),\n                cmd = new EditorCommand(uri.namespace + ':' + 'navigator-node-moved', {\n                    movedNodes: ev.movedNodes,\n                    movedToNodeData: ev.movedToNode,\n                    event: ev\n                });\n\n            this.store.dispatchCommand(cmd);\n        },\n\n        onExternalDrop: function onExternalDrop(dropData) {\n            var uri = DocumentUri.parse(dropData.toUniqueKey),\n                cmd = new EditorCommand(uri.namespace + ':' + 'navigator-external-drop', dropData);\n\n            this.store.dispatchCommand(cmd);\n        },\n\n        onCommand: function onCommand(cmd, keyPath, node) {\n            this.store.dispatchCommand(cmd, { keyPath: keyPath, treeNode: node });\n        },\n\n        onNodeContextMenuDisplay: function onNodeContextMenuDisplay(nodeData, menuItems, itemsDetails) {\n            var uri = DocumentUri.parse(nodeData.uniqueKey, true);\n\n            if (!uri) {\n                return;\n            }\n\n            var cmd = uri.namespace + ':' + 'navigator-context-menu-display';\n            this.store.dispatchCommand(cmd, {\n                nodeData: nodeData,\n                menuItems: menuItems,\n                itemsDetails: itemsDetails\n            });\n        },\n\n        onCreateMenuItemCommand: function onCreateMenuItemCommand(cmd) {\n            console.log('Remove navigator.onCreateMenuItemCommand');\n            this.store.dispatchCommand(cmd);\n        }\n    },\n    mounted: function mounted() {},\n    computed: {}\n};\n"
  },
  {
    "path": "modules/editor/vuecomponents/navigator/assets/less/navigator.less",
    "content": "@import \"../../../../../backend/assets/less/core/boot.less\";\n\n.application-sidebar-hidden {\n    > .component-backend-splitter {\n        > .splitter-first-panel {\n            width: 0 !important;\n\n            .treeview-ghost-image-container,\n            .treeview-search-control {\n                display: none;\n            }\n        }\n\n        .splitter-handle {\n            display: none;\n        }\n    }\n}\n\n.editor-navigator {\n}\n"
  },
  {
    "path": "modules/editor/vuecomponents/navigator/partials/_navigator.php",
    "content": "<div class=\"flex-layout-column full-height-strict editor-navigator\">\n    <div class=\"flex-layout-item stretch relative\">\n        <backend-treeview\n            aria-label=\"<?= __('Editor Objects') ?>\"\n            :sections=\"store.state.navigatorSections\"\n            :selected-unique-key=\"store.state.navigatorSelectedUniqueKey\"\n            :searchable=\"true\"\n            :container-css-class=\"'layout-fill-container'\"\n            :readonly=\"readonly\"\n            unique-key=\"editor-navigator\"\n            @nodeclick=\"onNodeClick\"\n            @nodedrop=\"onNodeDrop\"\n            @externaldrop=\"onExternalDrop\"\n            @command=\"onCommand\"\n            @nodecontextmenudisplay=\"onNodeContextMenuDisplay\"\n\n            ref=\"treeView\"\n        >\n        </backend-treeview>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/media/ServiceProvider.php",
    "content": "<?php namespace Media;\n\nuse Event;\nuse Backend;\nuse BackendAuth;\nuse Media\\Widgets\\MediaManager;\nuse Media\\Helpers\\MediaView as MediaViewHelper;\nuse Backend\\Classes\\Controller as BackendController;\nuse October\\Rain\\Support\\ModuleServiceProvider;\n\n/**\n * ServiceProvider for Media module\n */\nclass ServiceProvider extends ModuleServiceProvider\n{\n    /**\n     * register the service provider.\n     */\n    public function register()\n    {\n        parent::register('media');\n\n        $this->registerSingletons();\n\n        // Backend specific\n        if ($this->app->runningInBackend() || $this->app->runningInOctane()) {\n            $this->registerGlobalInstance();\n        }\n    }\n\n    /**\n     * boot the module events.\n     */\n    public function boot()\n    {\n        parent::boot('media');\n\n        $this->bootMediaViewEvents();\n    }\n\n    /**\n     * registerSingletons\n     */\n    protected function registerSingletons()\n    {\n        $this->app->singleton('media.views', \\Media\\Helpers\\MediaView::class);\n        $this->app->singleton('media.library', \\Media\\Classes\\MediaLibrary::class);\n    }\n\n    /**\n     * registerNavigation\n     */\n    public function registerNavigation()\n    {\n        return [\n            'media' => [\n                'label' => 'backend::lang.media.menu_label',\n                'icon' => 'icon-image',\n                'iconSvg' => 'modules/media/assets/images/media-icon.svg',\n                'url' => Backend::url('media'),\n                'permissions' => ['media.library'],\n                'order' => 200\n            ]\n        ];\n    }\n\n    /**\n     * registerPermissions\n     */\n    public function registerPermissions()\n    {\n        return [\n            'media.library' => [\n                'label' => 'Access the Media Manager',\n                'tab' => 'Media',\n                'order' => 300\n            ],\n            'media.library.create' => [\n                'label' => 'Upload Media',\n                'comment' => 'backend::lang.permissions.manage_media',\n                'tab' => 'Media',\n                'order' => 400\n            ],\n            // 'media.library.update' => [\n            //     'label' => 'Modify Media',\n            //     'comment' => 'Change meta data and other information',\n            //     'tab' => 'Media',\n            //     'order' => 500\n            // ],\n            'media.library.delete' => [\n                'label' => 'Delete Media',\n                'tab' => 'Media',\n                'order' => 600\n            ]\n        ];\n    }\n\n    /**\n     * registerFormWidgets\n     */\n    public function registerFormWidgets()\n    {\n        return [\n            \\Media\\FormWidgets\\MediaFinder::class => 'mediafinder'\n        ];\n    }\n\n    /**\n     * registerMarkupTags\n     */\n    public function registerMarkupTags()\n    {\n        return [\n            'filters' => [\n                'media' => [\\Media\\Classes\\MediaLibrary::class, 'url', false],\n            ]\n        ];\n    }\n\n    /**\n     * bootMediaViewEvents\n     */\n    protected function bootMediaViewEvents()\n    {\n        Event::listen('cms.content.postProcessMarkup', function (&$content) {\n            $content = MediaViewHelper::instance()->processHtml($content);\n        });\n    }\n\n    /**\n     * registerGlobalInstance ensures media Manager widget is available on all backend pages\n     */\n    protected function registerGlobalInstance()\n    {\n        BackendController::extend(function($controller) {\n            if (BackendAuth::userHasAccess('media.library')) {\n                $manager = new MediaManager($controller, ['alias' => 'ocmediamanager']);\n                $manager->bindToController();\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "modules/media/classes/MediaLibrary.php",
    "content": "<?php namespace Media\\Classes;\n\nuse App;\nuse Url;\nuse Str;\nuse Lang;\nuse Cache;\nuse Config;\nuse Storage;\nuse October\\Rain\\Filesystem\\Definitions as FileDefinitions;\nuse ApplicationException;\n\n/**\n * MediaLibrary provides abstraction level for the Media Library operations.\n * Implements the library caching features and security checks.\n *\n * @package october\\media\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MediaLibrary\n{\n    const SORT_BY_TITLE = 'title';\n    const SORT_BY_SIZE = 'size';\n    const SORT_BY_MODIFIED = 'modified';\n    const SORT_DIRECTION_ASC = 'asc';\n    const SORT_DIRECTION_DESC = 'desc';\n\n    /**\n     * @var string cacheKey\n     */\n    protected $cacheKey = 'media-library-contents';\n\n    /**\n     * @var string storageUrl relative or absolute URL of the Library root folder.\n     */\n    protected $storageUrl;\n\n    /**\n     * @var mixed storageDisk is a reference to the Media Library disk.\n     */\n    protected $storageDisk;\n\n    /**\n     * @var array ignoreNames contains a list of files and directories to ignore.\n     * The list can be customized with media.ignore_files configuration option.\n     */\n    protected $ignoreNames;\n\n    /**\n     * @var array ignorePatterns contains a list of regex patterns to ignore in files and directories.\n     * The list can be customized with media.ignore_patterns configuration option.\n     */\n    protected $ignorePatterns;\n\n    /**\n     * __construct this class\n     */\n    public function __construct()\n    {\n        $this->storageUrl = rtrim(Config::get('filesystems.disks.media.url', '/storage/app/media'), '/');\n        $this->ignoreNames = FileDefinitions::get('ignore_files');\n        $this->ignorePatterns = FileDefinitions::get('ignore_patterns');\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('media.library');\n    }\n\n    /**\n     * setCacheKey as the cache key for this instance\n     */\n    public function setCacheKey(string $cacheKey)\n    {\n        $this->cacheKey = $cacheKey;\n    }\n\n    /**\n     * getCacheKey as the cache key for this instance\n     */\n    public function getCacheKey(): string\n    {\n        return $this->cacheKey;\n    }\n\n    /**\n     * listFolderContents returns a list of folders and files in a Library folder.\n     *\n     * @param string $folder Specifies the folder path relative the the Library root.\n     * @param mixed $sortBy Determines the sorting preference.\n     * Supported values are 'title', 'size', 'lastModified' (see SORT_BY_XXX class constants), FALSE (to disable sorting), or an associative array with a 'by' key and a 'direction' key: ['by' => SORT_BY_XXX, 'direction' => SORT_DIRECTION_XXX].\n     * @param string $filter Determines the document type filtering preference.\n     * Supported values are 'image', 'video', 'audio', 'document' (see FILE_TYPE_XXX constants of MediaLibraryItem class).\n     * @param bool $ignoreFolders Determines whether folders should be suppressed in the result list.\n     * @return array Returns an array of MediaLibraryItem objects.\n     */\n    public function listFolderContents($folder = '/', $sortBy = 'title', $filter = null, $ignoreFolders = false)\n    {\n        $folder = self::validatePath($folder);\n\n        // Try to load the contents from cache\n        $cached = Cache::memo()->get($this->cacheKey, false);\n        $cached = $cached ? @unserialize(@base64_decode($cached)) : [];\n\n        if (!is_array($cached)) {\n            $cached = [];\n        }\n\n        if (array_key_exists($folder, $cached)) {\n            $folderContents = $cached[$folder];\n        }\n        else {\n            $folderContents = $this->scanFolderContents($folder);\n\n            $cached[$folder] = $folderContents;\n            $expiresAt = now()->addMinutes(Config::get('media.item_cache_ttl', 10));\n            Cache::put(\n                $this->cacheKey,\n                base64_encode(serialize($cached)),\n                $expiresAt\n            );\n        }\n\n        // Sort the result and combine the file and folder lists\n        if ($sortBy !== false) {\n            $this->sortItemList($folderContents['files'], $sortBy);\n            $this->sortItemList($folderContents['folders'], $sortBy);\n        }\n\n        $this->filterItemList($folderContents['files'], $filter);\n\n        if (!$ignoreFolders) {\n            $folderContents = array_merge($folderContents['folders'], $folderContents['files']);\n        }\n        else {\n            $folderContents = $folderContents['files'];\n        }\n\n        return $folderContents;\n    }\n\n    /**\n     * findFiles in the Library.\n     *\n     * @param string $searchTerm Specifies the search term.\n     * @param mixed $sortBy Determines the sorting preference.\n     * Supported values are 'title', 'size', 'lastModified' (see SORT_BY_XXX class constants), FALSE (to disable sorting), or an associative array with a 'by' key and a 'direction' key: ['by' => SORT_BY_XXX, 'direction' => SORT_DIRECTION_XXX].\n     * @param string $filter Determines the document type filtering preference.\n     * Supported values are 'image', 'video', 'audio', 'document' (see FILE_TYPE_XXX constants of MediaLibraryItem class).\n     * @return array Returns an array of MediaLibraryItem objects.\n     */\n    public function findFiles($searchTerm, $sortBy = 'title', $filter = null)\n    {\n        $words = explode(' ', Str::lower($searchTerm));\n        $result = [];\n\n        $findInFolder = function ($folder) use (&$findInFolder, $words, &$result, $sortBy, $filter) {\n            $folderContents = $this->listFolderContents($folder, $sortBy, $filter);\n\n            foreach ($folderContents as $item) {\n                if ($item->type === MediaLibraryItem::TYPE_FOLDER) {\n                    $findInFolder($item->path);\n                }\n                elseif ($this->pathMatchesSearch($item->path, $words)) {\n                    $result[] = $item;\n                }\n            }\n        };\n\n        $findInFolder('/');\n\n        // Sort the result\n        if ($sortBy !== false) {\n            $this->sortItemList($result, $sortBy);\n        }\n\n        return $result;\n    }\n\n    /**\n     * findFile looks up a file and returns its MediaLibraryItem object\n     */\n    public function findFile($path): ?MediaLibraryItem\n    {\n        $path = self::validatePath($path);\n\n        $item = $this->initLibraryItem($path, MediaLibraryItem::TYPE_FILE);\n\n        return $item;\n    }\n\n    /**\n     * findFolder looks up a folder and returns its MediaLibraryItem object\n     */\n    public function findFolder($path): ?MediaLibraryItem\n    {\n        $path = self::validatePath($path);\n\n        $item = $this->initLibraryItem($path, MediaLibraryItem::TYPE_FOLDER);\n\n        return $item;\n    }\n\n    /**\n     * deleteFiles from the Library.\n     * @param array $paths A list of file paths relative to the Library root to delete.\n     */\n    public function deleteFiles($paths)\n    {\n        $deletePaths = [];\n        foreach ($paths as $path) {\n            $deletePaths[] = self::validatePath($path);\n        }\n        return $this->getStorageDisk()->delete($deletePaths);\n    }\n\n    /**\n     * deleteFolder from the Library.\n     * @param string $path Specifies the folder path relative to the Library root.\n     */\n    public function deleteFolder($path)\n    {\n        $path = self::validatePath($path);\n        return $this->getStorageDisk()->deleteDirectory($path);\n    }\n\n    /**\n     * exists determines if a file with the specified path exists in the library.\n     * @param string $path Specifies the file path relative the the Library root.\n     * @return bool Returns TRUE if the file exists.\n     */\n    public function exists($path)\n    {\n        $path = self::validatePath($path);\n        return $this->getStorageDisk()->exists($path);\n    }\n\n    /**\n     * folderExists determines if a folder with the specified path exists in the library.\n     * @param string $path Specifies the folder path relative the the Library root.\n     * @return bool Returns TRUE if the folder exists.\n     */\n    public function folderExists($path)\n    {\n        $folderName = basename($path);\n        $folderPath = dirname($path);\n        $path = self::validatePath($folderPath);\n\n        $folders = $this->getStorageDisk()->directories($path);\n        foreach ($folders as $folder) {\n            if (basename($folder) === $folderName) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * listAllDirectories returns a list of all directories in the Library, optionally\n     * excluding some of them.\n     * @param array $exclude A list of folders to exclude from the result list.\n     * The folder paths should be specified relative to the Library root.\n     * @return array\n     */\n    public function listAllDirectories($exclude = [])\n    {\n        $folders = $this->getStorageDisk()->allDirectories();\n\n        $folders = array_unique($folders, SORT_LOCALE_STRING);\n\n        $result = [];\n\n        foreach ($folders as $folder) {\n            $folder = self::validatePath($folder, true);\n            if (!strlen($folder)) {\n                $folder = '/';\n            }\n\n            if (Str::startsWith($folder, $exclude)) {\n                continue;\n            }\n\n            if (!$this->isVisible($folder)) {\n                $exclude[] = $folder . '/';\n                continue;\n            }\n\n            $result[] = $folder;\n        }\n\n        if (!in_array('/', $result)) {\n            array_unshift($result, '/');\n        }\n\n        return $result;\n    }\n\n    /**\n     * has checks for existence.\n     * @param string $path\n     * @return bool\n     */\n    public function has($path)\n    {\n        $path = self::validatePath($path);\n        return $this->getStorageDisk()->has($path);\n    }\n\n    /**\n     * size returns a file size in bytes.\n     * @param string $path Specifies the file path relative the the Library root.\n     * @return int Returns the file size\n     */\n    public function size($path)\n    {\n        $path = self::validatePath($path);\n        return $this->getStorageDisk()->size($path);\n    }\n\n    /**\n     * get returns a file contents.\n     * @param string $path Specifies the file path relative the the Library root.\n     * @return string Returns the file contents\n     */\n    public function get($path)\n    {\n        $path = self::validatePath($path);\n        return $this->getStorageDisk()->get($path);\n    }\n\n    /**\n     * put a file to the library.\n     * @param string $path Specifies the file path relative the the Library root.\n     * @param string $contents Specifies the file contents.\n     * @return bool\n     */\n    public function put($path, $contents)\n    {\n        $path = self::validatePath($path);\n        return $this->getStorageDisk()->put($path, $contents);\n    }\n\n    /**\n     * put a file to the library.\n     * @param string $path Specifies the file path relative the the Library root.\n     * @param string $file Specifies the file path.\n     * @return bool\n     */\n    public function putFile($path, $file)\n    {\n        $path = self::validatePath($path);\n        return $this->getStorageDisk()->putFileAs(dirname($path), $file, basename($path));\n    }\n\n    /**\n     * moveFile to another location.\n     * @param string $oldPath Specifies the original path of the file.\n     * @param string $newPath Specifies the new path of the file.\n     * @return bool\n     */\n    public function moveFile($oldPath, $newPath, $isRename = false)\n    {\n        $oldPath = self::validatePath($oldPath);\n        $newPath = self::validatePath($newPath);\n\n        return $this->getStorageDisk()->move($oldPath, $newPath);\n    }\n\n    /**\n     * copyFolder copies an original path to a newly located path.\n     * @param string $originalPath\n     * @param string $newPath\n     * @return bool\n     */\n    public function copyFolder($originalPath, $newPath)\n    {\n        $disk = $this->getStorageDisk();\n\n        $copyDirectory = function ($srcPath, $destPath) use (&$copyDirectory, $disk) {\n            $srcPath = self::validatePath($srcPath);\n            $destPath = self::validatePath($destPath);\n            if (!$disk->makeDirectory($destPath)) {\n                return false;\n            }\n\n            $folderContents = $this->scanFolderContents($srcPath);\n            foreach ($folderContents['folders'] as $dirInfo) {\n                if (!$copyDirectory($dirInfo->path, $destPath.'/'.basename($dirInfo->path))) {\n                    return false;\n                }\n            }\n\n            foreach ($folderContents['files'] as $fileInfo) {\n                if (!$disk->copy($fileInfo->path, $destPath.'/'.basename($fileInfo->path))) {\n                    return false;\n                }\n            }\n\n            return true;\n        };\n\n        return $copyDirectory($originalPath, $newPath);\n    }\n\n    /**\n     * moveFolder moves an original path to a newly located path.\n     * @param string $originalPath\n     * @param string $newPath\n     * @return bool\n     */\n    public function moveFolder($originalPath, $newPath)\n    {\n        if (Str::lower($originalPath) !== Str::lower($newPath)) {\n            // If there is no risk that the directory was renamed\n            // by just changing the letter case in the name -\n            // copy the directory to the destination path and delete\n            // the source directory.\n            if (!$this->copyFolder($originalPath, $newPath)) {\n                return false;\n            }\n\n            $this->deleteFolder($originalPath);\n        }\n        else {\n            // If there's a risk that the directory name was updated\n            // by changing the letter case - swap source and destination\n            // using a temporary directory with random name.\n            $tempraryDirPath = $this->generateRandomTmpFolderName(dirname($originalPath));\n\n            if (!$this->copyFolder($originalPath, $tempraryDirPath)) {\n                $this->deleteFolder($tempraryDirPath);\n\n                return false;\n            }\n\n            $this->deleteFolder($originalPath);\n\n            return $this->moveFolder($tempraryDirPath, $newPath);\n        }\n\n        return true;\n    }\n\n    /**\n     * makeFolder creates a folder.\n     * @param string $path Specifies the folder path.\n     * @return bool\n     */\n    public function makeFolder($path)\n    {\n        $path = self::validatePath($path);\n        return $this->getStorageDisk()->makeDirectory($path);\n    }\n\n    /**\n     * resetCache for the Library cache.\n     *\n     * The cache stores the library table of contents locally in order to optimize\n     * the performance when working with remote storages. The default cache TTL is\n     * 10 minutes. The cache is deleted automatically when an item is added, changed\n     * or deleted. This method allows to reset the cache forcibly.\n     */\n    public function resetCache()\n    {\n        Cache::forget($this->cacheKey);\n    }\n\n    /**\n     * validatePath checks if file path doesn't contain any substrings that would pose a security\n     * threat. Returns a normalized path. Throws an exception if the path is not valid. An option\n     * is provided, if only normalization is needed without validation.\n     * @param string $path\n     * @param bool $normalizeOnly\n     * @return string\n     */\n    public static function validatePath($path, $normalizeOnly = false): string\n    {\n        $path = str_replace('\\\\', '/', $path);\n        $path = '/'.trim($path, '/');\n\n        if ($normalizeOnly) {\n            return $path;\n        }\n\n        // Validate folder names\n        $regexAllowlist = [\n            '\\w', // any word character\n            preg_quote('@', '/'),\n            preg_quote('.', '/'),\n            '\\s', // whitespace character\n            preg_quote('-', '/'),\n            preg_quote('_', '/'),\n            preg_quote('/', '/'),\n            preg_quote('(', '/'),\n            preg_quote(')', '/'),\n            preg_quote('[', '/'),\n            preg_quote(']', '/'),\n            preg_quote(',', '/'),\n            preg_quote('=', '/'),\n            preg_quote(\"'\", '/'),\n            preg_quote('&', '/'),\n        ];\n\n        if (!preg_match('/^[' . implode('', $regexAllowlist) . ']+$/iu', $path)) {\n            throw new ApplicationException(Lang::get('system::lang.media.invalid_path', compact('path')));\n        }\n\n        $regexDirectorySeparator = preg_quote('/', '#');\n        $regexDot = preg_quote('.', '#');\n        $regex = [\n            // Beginning of path\n            '(^'.$regexDot.'+?'.$regexDirectorySeparator.')',\n\n            // Middle of path\n            '('.$regexDirectorySeparator.$regexDot.'+?'.$regexDirectorySeparator.')',\n\n            // End of path\n            '('.$regexDirectorySeparator.$regexDot.'+?$)',\n        ];\n\n        // Validate invalid paths\n        $regex = '#'.implode('|', $regex).'#';\n        if (preg_match($regex, $path) !== 0 || strpos($path, '//') !== false) {\n            throw new ApplicationException(Lang::get('system::lang.media.invalid_path', compact('path')));\n        }\n\n        return $path;\n    }\n\n    /**\n     * url is a helper that makes a URL for a media file.\n     * Ideally the file should be passed as a string but it will try to deal with anything.\n     * @param string $file\n     * @return string\n     */\n    public static function url($file)\n    {\n        if (is_array($file)) {\n            $file = array_first($file);\n        }\n\n        if ($file instanceof \\Illuminate\\Support\\Collection) {\n            $file = $file->first();\n        }\n\n        if ($file instanceof \\October\\Rain\\Database\\Attach\\File) {\n            return $file->getPath();\n        }\n\n        return static::instance()->getPathUrl($file);\n    }\n\n    /**\n     * getPathUrl returns a public file URL.\n     * @param string $path Specifies the file path relative the the Library root.\n     * @return string\n     */\n    public function getPathUrl($path)\n    {\n        $path = self::validatePath($path);\n\n        $fullPath = $this->storageUrl . implode('/', array_map('rawurlencode', explode('/', $path)));\n\n        // Relative links\n        if ($this->isLocalStorage() && Config::get('system.relative_links') === true) {\n            return Url::toRelative($fullPath);\n        }\n\n        return Url::asset($fullPath);\n    }\n\n    /**\n     * isVisible determines if the path should be visible and not ignored.\n     * @param string $path\n     * @return bool\n     */\n    protected function isVisible($path): bool\n    {\n        $baseName = basename($path);\n\n        if (in_array($baseName, $this->ignoreNames)) {\n            return false;\n        }\n\n        foreach ($this->ignorePatterns as $pattern) {\n            if (preg_match('/'.$pattern.'/', $baseName)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * initLibraryItem from a path relative to the storage disk root and item type constant.\n     * Returns null if the item is not visible.\n     * @param string $path\n     * @param string $itemType\n     * @return mixed\n     */\n    protected function initLibraryItem($path, $itemType): ?MediaLibraryItem\n    {\n        $path = self::validatePath($path, true);\n\n        if (!$this->isVisible($path)) {\n            return null;\n        }\n\n        // S3 doesn't allow getting the last modified timestamp for folders,\n        // so this feature is disabled - folders timestamp is always NULL.\n        $lastModified = $itemType === MediaLibraryItem::TYPE_FILE\n            ? $this->getStorageDisk()->lastModified($path)\n            : null;\n\n        // The folder size (number of items) doesn't respect filters. That\n        // could be confusing for users, but that's safer than displaying\n        // zero items for a folder that contains files not visible with a\n        // currently applied filter. -ab\n        $size = $itemType === MediaLibraryItem::TYPE_FILE\n            ? $this->getStorageDisk()->size($path)\n            : $this->getFolderItemCount($path);\n\n        $publicUrl = $this->getPathUrl($path);\n\n        return new MediaLibraryItem($path, $size, $lastModified, $itemType, $publicUrl);\n    }\n\n    /**\n     * getFolderItemCount returns a number of items on a folder.\n     * @param string $path Specifies the folder path relative to the storage disk root.\n     * @return integer Returns the number of items in the folder.\n     */\n    protected function getFolderItemCount($path)\n    {\n        $folderItems = array_merge(\n            $this->getStorageDisk()->files($path),\n            $this->getStorageDisk()->directories($path)\n        );\n\n        $size = 0;\n        foreach ($folderItems as $folderItem) {\n            if ($this->isVisible($folderItem)) {\n                $size++;\n            }\n        }\n\n        return $size;\n    }\n\n    /**\n     * scanFolderContents fetches the contents of a folder from the Library. The full folder\n     * path relative the the storage disk root. Returns an array containing two elements\n     * - 'files' and 'folders', each is an array of MediaLibraryItem objects.\n     * @param string $fullFolderPath\n     * @return array\n     */\n    protected function scanFolderContents(string $fullFolderPath): array\n    {\n        $result = [\n            'files' => [],\n            'folders' => []\n        ];\n\n        $files = $this->getStorageDisk()->files($fullFolderPath);\n        foreach ($files as $file) {\n            if ($libraryItem = $this->initLibraryItem($file, MediaLibraryItem::TYPE_FILE)) {\n                $result['files'][] = $libraryItem;\n            }\n        }\n\n        $folders = $this->getStorageDisk()->directories($fullFolderPath);\n        foreach ($folders as $folder) {\n            if ($libraryItem = $this->initLibraryItem($folder, MediaLibraryItem::TYPE_FOLDER)) {\n                $result['folders'][] = $libraryItem;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * sortItemList sorts the item list by title, size or last modified date.\n     * @param array $itemList Specifies the item list to sort.\n     * @param mixed $sortSettings Determines the sorting preference.\n     * Supported values are 'title', 'size', 'lastModified' (see SORT_BY_XXX class constants) or an associative array with a 'by' key and a 'direction' key: ['by' => SORT_BY_XXX, 'direction' => SORT_DIRECTION_XXX].\n     */\n    protected function sortItemList(&$itemList, $sortSettings)\n    {\n        // Convert string $sortBy to array\n        if (is_string($sortSettings)) {\n            $sortSettings = [\n                'by' => $sortSettings,\n                'direction' => self::SORT_DIRECTION_ASC,\n            ];\n        }\n\n        usort($itemList, function ($a, $b) use ($sortSettings) {\n            $result = 0;\n\n            switch ($sortSettings['by']) {\n                case self::SORT_BY_TITLE:\n                    $result = strcasecmp($a->path, $b->path);\n                    break;\n\n                case self::SORT_BY_SIZE:\n                    if ($a->size < $b->size) {\n                        $result = -1;\n                    }\n                    else {\n                        $result = $a->size > $b->size ? 1 : 0;\n                    }\n                    break;\n\n                case self::SORT_BY_MODIFIED:\n                    if ($a->lastModified < $b->lastModified) {\n                        $result = -1;\n                    }\n                    else {\n                        $result = $a->lastModified > $b->lastModified ? 1 : 0;\n                    }\n                    break;\n            }\n\n            // Reverse the polarity of the result to direct sorting in a descending order instead\n            if ($sortSettings['direction'] === self::SORT_DIRECTION_DESC) {\n                $result = 0 - $result;\n            }\n\n            return $result;\n        });\n    }\n\n    /**\n     * filterItemList by file type.\n     * @param array $itemList Specifies the item list to sort.\n     * @param string $filter Determines the document type filtering preference.\n     * Supported values are 'image', 'video', 'audio', 'document' (see FILE_TYPE_XXX constants of MediaLibraryItem class).\n     */\n    protected function filterItemList(&$itemList, $filter)\n    {\n        if (!$filter) {\n            return;\n        }\n\n        $result = [];\n        foreach ($itemList as $item) {\n            if ($item->getFileType() === $filter) {\n                $result[] = $item;\n            }\n        }\n\n        $itemList = $result;\n    }\n\n    /**\n     * getStorageDisk initializes and returns the Media Library disk.\n     * This method should always be used instead of trying to access the\n     * $storageDisk property directly as initializing the disc requires\n     * communicating with the remote storage.\n     * @return mixed Returns the storage disk object.\n     */\n    protected function getStorageDisk()\n    {\n        if ($this->storageDisk) {\n            return $this->storageDisk;\n        }\n\n        return $this->storageDisk = Storage::disk('media');\n    }\n\n    /**\n     * pathMatchesSearch determines if file path contains all words form the search term.\n     * @param string $path Specifies a path to examine.\n     * @param array $words A list of words to check against.\n     * @return bool\n     */\n    protected function pathMatchesSearch($path, $words)\n    {\n        $path = Str::lower($path);\n\n        foreach ($words as $word) {\n            $word = trim($word);\n            if (!strlen($word)) {\n                continue;\n            }\n\n            if (!Str::contains($path, $word)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * generateRandomTmpFolderName\n     */\n    protected function generateRandomTmpFolderName($location)\n    {\n        $temporaryDirBaseName = time();\n\n        $tmpPath = $location.'/tmp-'.$temporaryDirBaseName;\n\n        while ($this->folderExists($tmpPath)) {\n            $temporaryDirBaseName++;\n            $tmpPath = $location.'/tmp-'.$temporaryDirBaseName;\n        }\n\n        return $tmpPath;\n    }\n\n    /**\n     * isLocalStorage returns true if the storage engine is local\n     */\n    protected function isLocalStorage()\n    {\n        return Config::get('filesystems.disks.media.driver') === 'local';\n    }\n}\n"
  },
  {
    "path": "modules/media/classes/MediaLibraryItem.php",
    "content": "<?php namespace Media\\Classes;\n\nuse Date;\nuse File;\nuse Config;\nuse October\\Rain\\Filesystem\\Definitions as FileDefinitions;\n\n/**\n * MediaLibraryItem represents a file or folder in the Media Library.\n *\n * @package october\\media\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MediaLibraryItem\n{\n    const TYPE_FILE = 'file';\n    const TYPE_FOLDER = 'folder';\n\n    const FILE_TYPE_IMAGE = 'image';\n    const FILE_TYPE_VIDEO = 'video';\n    const FILE_TYPE_AUDIO = 'audio';\n    const FILE_TYPE_DOCUMENT = 'document';\n\n    /**\n     * @var string title specifies the item title.\n     */\n    public $title;\n\n    /**\n     * @var string path specifies the item path relative to the Library root.\n     */\n    public $path;\n\n    /**\n     * @var integer size specifies the item size.\n     * For files the item size is measured in bytes. For folders it\n     * contains the number of files in the folder.\n     */\n    public $size;\n\n    /**\n     * @var integer lastModified contains the last modification time (Unix timestamp).\n     */\n    public $lastModified;\n\n    /**\n     * @var string type specifies the item type.\n     */\n    public $type;\n\n    /**\n     * @var string publicUrl specifies the public URL of the item.\n     */\n    public $publicUrl;\n\n    /**\n     * @var array imageExtensions contains a default list of image files and directories to ignore.\n     * Override with config: media.image_extensions\n     */\n    protected static $imageExtensions;\n\n    /**\n     * @var array videoExtensions contains a default list of video files and directories to ignore.\n     * Override with config: media.video_extensions\n     */\n    protected static $videoExtensions;\n\n    /**\n     * @var array audioExtensions contains a default list of audio files and directories to ignore.\n     * Override with config: media.audio_extensions\n     */\n    protected static $audioExtensions;\n\n    /**\n     * __construct a library item\n     * @param string $path\n     * @param int $size\n     * @param int $lastModified\n     * @param string $type\n     * @param string $publicUrl\n     */\n    public function __construct($path, $size, $lastModified, $type, $publicUrl)\n    {\n        $this->path = $path;\n        $this->size = $size;\n        $this->lastModified = $lastModified;\n        $this->type = $type;\n        $this->publicUrl = $publicUrl;\n        $this->title = basename($path);\n    }\n\n    /**\n     * isFile\n     * @return bool\n     */\n    public function isFile()\n    {\n        return $this->type === self::TYPE_FILE;\n    }\n\n    /**\n     * getFileType returns the file type by its name. Returns the file type or NULL\n     * if the item is a folder.\n     * The known file types are: image, video, audio, document\n     * @return string\n     */\n    public function getFileType()\n    {\n        if (!$this->isFile()) {\n            return null;\n        }\n\n        if (!self::$imageExtensions) {\n            self::$imageExtensions = array_map('strtolower', FileDefinitions::get('image_extensions'));\n            self::$videoExtensions = array_map('strtolower', FileDefinitions::get('video_extensions'));\n            self::$audioExtensions = array_map('strtolower', FileDefinitions::get('audio_extensions'));\n        }\n\n        $extension = strtolower(pathinfo($this->path, PATHINFO_EXTENSION));\n        if (!strlen($extension)) {\n            return self::FILE_TYPE_DOCUMENT;\n        }\n\n        if (in_array($extension, self::$imageExtensions)) {\n            return self::FILE_TYPE_IMAGE;\n        }\n\n        if (in_array($extension, self::$videoExtensions)) {\n            return self::FILE_TYPE_VIDEO;\n        }\n\n        if (in_array($extension, self::$audioExtensions)) {\n            return self::FILE_TYPE_AUDIO;\n        }\n\n        return self::FILE_TYPE_DOCUMENT;\n    }\n\n    /**\n     * sizeToString returns the item size as string.\n     * For file-type items the size is the number of bytes. For folder-type items\n     * the size is the number of items contained by the item.\n     * @return string\n     */\n    public function sizeToString()\n    {\n        return $this->type === self::TYPE_FILE\n            ? File::sizeToString($this->size)\n            : $this->size.' '.trans('system::lang.media.folder_size_items');\n    }\n\n    /**\n     * lastModifiedAsString returns the item last modification date as string.\n     * @return string Returns the item's last modification date as string.\n     */\n    public function lastModifiedAsString()\n    {\n        if (!$date = $this->lastModified) {\n            return null;\n        }\n\n        return Date::createFromTimestamp($date)->toFormattedDateString();\n    }\n\n    /**\n     * forgetExtensions resets extensions supplied by config but stored in RAM\n     */\n    public static function forgetExtensions()\n    {\n        self::$imageExtensions = null;\n    }\n}\n"
  },
  {
    "path": "modules/media/composer.json",
    "content": "{\n    \"name\": \"october/media\",\n    \"type\": \"october-module\",\n    \"description\": \"Media module for October CMS\",\n    \"homepage\": \"https://octobercms.com\",\n    \"keywords\": [\"october cms\", \"october\", \"media\"],\n    \"authors\": [\n        {\n            \"name\": \"Alexey Bobkov\",\n            \"email\": \"aleksey.bobkov@gmail.com\"\n        },\n        {\n            \"name\": \"Samuel Georges\",\n            \"email\": \"daftspunky@gmail.com\"\n        }\n    ]\n}\n"
  },
  {
    "path": "modules/media/controllers/Index.php",
    "content": "<?php namespace Media\\Controllers;\n\nuse BackendMenu;\nuse Media\\Widgets\\MediaManager;\nuse Backend\\Classes\\Controller;\n\n/**\n * Index route for the Media Manager\n *\n * @package october\\media\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Index extends Controller\n{\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    public $requiredPermissions = ['media.library'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.Media', 'media', true);\n\n        $this->pageTitle = 'backend::lang.media.menu_label';\n    }\n\n    /**\n     * beforeDisplay\n     */\n    public function beforeDisplay()\n    {\n        $manager = new MediaManager($this, ['alias' => 'manager']);\n        $manager->bindToController();\n    }\n\n    /**\n     * index\n     */\n    public function index()\n    {\n        $this->bodyClass = 'compact-container';\n    }\n}\n"
  },
  {
    "path": "modules/media/controllers/index/index.php",
    "content": "<?= Block::put('body') ?>\n    <?= Form::open(['class'=>'layout', 'onsubmit'=>'return false']) ?>\n        <?= $this->widget->manager->render() ?>\n    <?= Form::close() ?>\n<?= Block::endPut() ?>\n"
  },
  {
    "path": "modules/media/formwidgets/MediaFinder.php",
    "content": "<?php namespace Media\\FormWidgets;\n\nuse BackendAuth;\nuse Media\\Classes\\MediaLibrary;\nuse Backend\\Classes\\FormWidgetBase;\nuse October\\Rain\\Support\\Collection;\nuse October\\Rain\\Database\\Model;\nuse Exception;\n\n/**\n * MediaFinder renders a record finder field.\n *\n *    image:\n *        label: Some image\n *        type: mediafinder\n *\n * @package october\\media\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MediaFinder extends FormWidgetBase\n{\n    //\n    // Configurable Properties\n    //\n\n    /**\n     * @var string Display mode for the selection. Values: file, image.\n     */\n    public $mode = 'file';\n\n    /**\n     * @var int imageWidth for preview\n     */\n    public $imageWidth = 190;\n\n    /**\n     * @var int imageHeight for preview\n     */\n    public $imageHeight = 190;\n\n    /**\n     * @var int|null maxItems allowed\n     */\n    public $maxItems = null;\n\n    /**\n     * @var array thumbOptions used for generating thumbnails\n     */\n    public $thumbOptions = [\n        'mode' => 'cover',\n        'extension' => 'auto'\n    ];\n\n    /**\n     * @var string Defines a mount point for the editor toolbar.\n     * Must include a module name that exports the Vue application and a state element name.\n     * Format: module.name::stateElementName\n     * Only works in Vue applications and form document layouts.\n     */\n    public $externalToolbarAppState = null;\n\n    //\n    // Object Properties\n    //\n\n    /**\n     * @inheritDoc\n     */\n    protected $defaultAlias = 'mediafinder';\n\n    /**\n     * @inheritDoc\n     */\n    public function init()\n    {\n        $this->fillFromConfig([\n            'mode',\n            'imageWidth',\n            'imageHeight',\n            'maxItems',\n            'thumbOptions',\n            'externalToolbarAppState'\n        ]);\n\n        if ($this->formField->disabled || $this->formField->readOnly) {\n            $this->previewMode = true;\n        }\n\n        if (!BackendAuth::userHasAccess('media.library')) {\n            $this->previewMode = true;\n        }\n\n        $this->processMaxItems();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function loadAssets()\n    {\n        $this->addJs('js/mediafinder.js');\n        $this->addCss('css/mediafinder.css');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        return $this->makePartial('mediafinder');\n    }\n\n    /**\n     * prepareVars for display\n     */\n    public function prepareVars()\n    {\n        $this->vars['size'] = $this->formField->size;\n        $this->vars['fileList'] = $fileList = $this->getFileList();\n        $this->vars['singleFile'] = $fileList->first();\n        $this->vars['displayMode'] = $this->getDisplayMode();\n        $this->vars['field'] = $this->formField;\n        $this->vars['maxItems'] = $this->maxItems;\n        $this->vars['imageWidth'] = $this->imageWidth;\n        $this->vars['imageHeight'] = $this->imageHeight;\n        $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState;\n    }\n\n    /**\n     * getFileList returns a list of associated files\n     */\n    protected function getFileList()\n    {\n        $value = $this->getLoadValue() ?: [];\n\n        if (!is_array($value)) {\n            $value = [$value];\n        }\n\n        // Lookup files\n        $list = [];\n        foreach ($value as $val) {\n            if ($item = $this->findItemFromMediaLibrary($val)) {\n                $list[] = $item;\n            }\n        }\n\n        // Promote to Collection\n        $list = new Collection($list);\n\n        return $list;\n    }\n\n    /**\n     * findItemFromMediaLibrary\n     */\n    protected function findItemFromMediaLibrary($val)\n    {\n        $mediaLib = MediaLibrary::instance();\n        try {\n            $item = $this->isFolderMode()\n                ? $mediaLib->findFolder($val)\n                : $mediaLib->findFile($val);\n\n            if ($item) {\n                return $this->decorateFileAttributes($item);\n            }\n        }\n        catch (Exception $ex) {\n        }\n    }\n\n    /**\n     * decorateFileAttributes adds the bespoke attributes used\n     * internally by this widget. Added attributes are:\n     * - thumbUrl\n     * @return \\Media\\Classes\\MediaLibraryItem\n     */\n    protected function decorateFileAttributes($file)\n    {\n        $thumb = $file->publicUrl;\n\n        if ($this->isFileResizable($file) && $this->shouldGenerateThumb()) {\n            $thumb = \\System\\Classes\\ResizeImages::resize($file->publicUrl, $this->imageWidth, $this->imageHeight, $this->thumbOptions);\n        }\n\n        $file->thumbUrl = $thumb;\n\n        return $file;\n    }\n\n    /**\n     * shouldGenerateThumb determines if the resizer should be used\n     */\n    protected function shouldGenerateThumb()\n    {\n        if ($this->thumbOptions === false) {\n            return false;\n        }\n\n        return $this->imageWidth || $this->imageHeight;\n    }\n\n    /**\n     * isFileResizable returns true if the file can be resized\n     */\n    protected function isFileResizable($file): bool\n    {\n        return in_array(pathinfo($file->path, PATHINFO_EXTENSION), [\n            'jpg',\n            'jpeg',\n            'bmp',\n            'png',\n            'gif'\n        ]);\n    }\n\n    /**\n     * processMaxItems\n     */\n    protected function processMaxItems()\n    {\n        if ($this->maxItems === null) {\n            if ($this->model instanceof Model) {\n                $this->maxItems = $this->model->isJsonable($this->valueFrom) ? 0 : 1;\n            }\n            else {\n                $this->maxItems = 1;\n            }\n        }\n\n        $this->maxItems = (int) $this->maxItems;\n    }\n\n    /**\n     * getDisplayMode for the file upload. Eg: file-multi, image-single, etc\n     * @return string\n     */\n    protected function getDisplayMode()\n    {\n        $mode = $this->getConfig('mode', 'file');\n        if (str_contains($mode, '-')) {\n            return $mode;\n        }\n\n        if ($this->isFolderMode()) {\n            return 'folder-single';\n        }\n\n        $isMulti = $this->maxItems !== 1;\n        if ($isMulti) {\n            return $mode . '-multi';\n        }\n\n        return $mode . '-single';\n    }\n\n    /**\n     * isFolderMode returns true if the chosen media item is a folder.\n     */\n    protected function isFolderMode()\n    {\n        return $this->getConfig('mode') === 'folder';\n    }\n}\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/assets/css/mediafinder.css",
    "content": "/*\n * Media Finder Form Widget\n */\n\n/*\n * Control UI\n */\n\n.field-mediafinder {\n    .mediafinder-control-container {\n        border-radius: var(--bs-border-radius);\n        border: 1px solid var(--bs-border-color);\n        background: var(--oc-form-control-bg);\n\n        .mediafinder-control-toolbar {\n            padding: 3px;\n            font-size: 0;\n            white-space: nowrap;\n\n            .backend-toolbar-button {\n                &.populated-only {\n                    display: none;\n                }\n            }\n        }\n\n        &.external-toolbar {\n            background: transparent;\n\n            .mediafinder-control-toolbar {\n                display: none;\n            }\n        }\n\n        .mediafinder-files-container {\n            position: relative;\n        }\n    }\n\n    &.is-populated {\n        .mediafinder-control-toolbar {\n            border-bottom: 1px solid var(--oc-toolbar-border);\n\n            .backend-toolbar-button.populated-only {\n                display: inline-block;\n            }\n        }\n    }\n\n    &:not(.is-populated) {\n        .mediafinder-files-container {\n            display: none;\n        }\n    }\n\n    &.is-preview {\n        .mediafinder-control-container {\n            background-color: var(--oc-form-control-disabled-bg);\n        }\n\n        .mediafinder-control-toolbar {\n            display: none;\n        }\n    }\n}\n\n/*\n * Size variants\n */\n\n.field-mediafinder {\n    &.size-tiny .upload-files-container {\n        max-height: 100px;\n        overflow: auto;\n    }\n\n    &.size-small .upload-files-container {\n        max-height: 200px;\n        overflow: auto;\n    }\n\n    &.size-large .upload-files-container {\n        max-height: 400px;\n        overflow: auto;\n    }\n\n    &.size-huge .upload-files-container {\n        max-height: 500px;\n        overflow: auto;\n    }\n\n    &.size-giant .upload-files-container {\n        max-height: 700px;\n        overflow: auto;\n    }\n\n    &.size-auto {\n        overflow: auto;\n    }\n\n    &.size-adaptive {\n        position: absolute;\n        height: 100%;\n        width: 100%;\n        background: var(--bs-body-bg);\n\n        .mediafinder-control-container {\n            border: none !important;\n            padding: 14px;\n        }\n    }\n}\n\n/*\n * Selected item\n */\n\n.field-mediafinder {\n    .item-object {\n        position: relative;\n        outline: none;\n        display: block;\n        margin: 4px 4px 0 4px;\n\n        &:last-child {\n            margin-bottom: 4px;\n        }\n\n        h4.filename, p {\n            color: var(--oc-toolbar-color);\n            font-size: var(--bs-body-font-size);\n            word-break: break-all;\n            line-height: 1.4;\n            margin-bottom: 8px;\n        }\n\n        h4.filename {\n            font-weight: 600;\n            margin-top: -1px;\n        }\n\n        &.item-object-image {\n            h4.filename {\n                padding-top: 10px;\n            }\n        }\n\n        .file-data-container {\n            padding: 3px;\n            border-radius: var(--bs-border-radius);\n\n            .file-data-container-inner {\n                position: relative;\n            }\n        }\n\n        &.selected {\n            .icon-container i {\n                color: white;\n            }\n\n            .file-data-container {\n                background: var(--oc-selection);\n\n                h4.filename, p {\n                    color: white;\n                }\n            }\n        }\n\n        .drag-handle {\n            position: absolute;\n            display: none;\n            color: #72809d;\n            cursor: move;\n            left: -1px;\n            top: 23px;\n            font-size: 24px;\n            text-decoration: none;\n        }\n\n        &:hover {\n            .drag-handle {\n                display: block;\n            }\n        }\n\n        .form-check {\n            position: absolute;\n            left: 3px;\n            top: 2px;\n        }\n    }\n\n    .empty-state {\n        display: none;\n    }\n\n    &.size-adaptive {\n        .empty-state {\n            display: block;\n            position: absolute;\n            left: 50%;\n            top: 50%;\n            transform: translate(-50%, -50%);\n        }\n\n        &.is-populated {\n            .empty-state {\n                display: none;\n            }\n        }\n    }\n\n    &.is-max-reached {\n        .toolbar-find-button {\n            display: none;\n        }\n    }\n\n    &.is-preview {\n        .item-object {\n            .form-check {\n                display: none;\n            }\n        }\n\n        .drag-handle {\n            display: none !important;\n        }\n    }\n\n    /* Grid mode (small screens and above) */\n    @media (min-width: 576px) {\n        &.is-grid .mediafinder-files-container {\n            display: flex;\n            flex-wrap: wrap;\n\n            .item-object {\n                width: 300px;\n\n                h4.filename, p {\n                    text-overflow: ellipsis;\n                    overflow: hidden;\n                    white-space: nowrap;\n                }\n            }\n        }\n    }\n}\n\n/*\n * Image mode\n */\n\n.field-mediafinder.is-image {\n    .item-object.item-object-image {\n        .file-data-container {\n            .file-data-container-inner {\n                padding-left: 103px;\n                min-height: 95px;\n            }\n        }\n\n        .icon-container {\n            position: absolute;\n            left: 0;\n            top: 0;\n            width: 95px;\n            height: 95px;\n            overflow: hidden;\n            border: 1px solid var(--bs-border-color);\n            border-radius: 4px;\n            background: var(--oc-primary-bg);\n            user-select: none;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n\n            img, video, audio {\n                display: block;\n                max-height: 100%;\n                max-width: 100%;\n            }\n        }\n\n        &.mode-multi {\n            .file-data-container {\n                margin-left: 23px;\n            }\n        }\n    }\n\n    &.is-preview {\n        .item-object.item-object-image {\n            &.mode-multi {\n                .file-data-container {\n                    margin-left: 0;\n                }\n            }\n        }\n    }\n}\n\n/*\n * File mode\n */\n\n.field-mediafinder.is-file {\n    .item-object.item-object-file {\n        .file-data-container-inner {\n            padding-top: 4px;\n        }\n\n        .icon-container, .info, .info h4 {\n            vertical-align: top;\n            display: inline-block;\n        }\n\n        .icon-container {\n            margin-top: -2px;\n            width: 20px;\n            height: 20px;\n            position: absolute;\n\n            i {\n                margin-top: 4px;\n                margin-left: 3px;\n                display: block;\n            }\n        }\n\n        .info {\n            padding-left: 22px;\n        }\n\n        h4 {\n            margin-bottom: 0;\n        }\n\n        .form-check {\n            top: 6px;\n        }\n\n        &.mode-multi {\n            .file-data-container {\n                margin-left: 43px;\n            }\n\n            .drag-handle {\n                display: block;\n                left: 24px;\n                top: 0;\n            }\n        }\n    }\n\n    &.is-preview {\n        .item-object.item-object-file {\n            &.mode-multi {\n                .file-data-container {\n                    margin-left: 0;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/assets/js/mediafinder.js",
    "content": "/*\n * MediaFinder plugin\n *\n * Data attributes:\n * - data-control=\"mediafinder\" - enables the plugin on an element\n * - data-option=\"value\" - an option with a value\n *\n * JavaScript API:\n * oc.fetchControl(element, 'mediafinder')\n */\n'use strict';\n\noc.registerControl('mediafinder', class extends oc.ControlBase {\n    static instanceCounter = 0;\n\n    init() {\n        this.constructor.instanceCounter++;\n        this.$el = $(this.element);\n        this.instanceNumber = this.constructor.instanceCounter;\n\n        if (this.config.isMulti === undefined) {\n            this.config.isMulti = this.$el.hasClass('is-multi');\n        }\n\n        if (this.config.isPreview === undefined) {\n            this.config.isPreview = this.$el.hasClass('is-preview');\n        }\n\n        if (this.config.isImage === undefined) {\n            this.config.isImage = this.$el.hasClass('is-image');\n        }\n\n        if (this.config.isFolder === undefined) {\n            this.config.isFolder = this.$el.hasClass('is-folder');\n        }\n\n        if (this.config.isSortable === undefined) {\n            this.config.isSortable = this.$el.hasClass('is-sortable');\n        }\n\n        this.previewTemplate = $(this.config.template).html();\n        this.$filesContainer = $('.mediafinder-files-container:first', this.$el);\n        this.$dataLocker = $('[data-data-locker]', this.$el);\n    }\n\n    connect() {\n        this.loadExistingFiles();\n\n        // Stop here for preview mode\n        if (this.config.isPreview) {\n            return;\n        }\n\n        this.listen('click', '.toolbar-find-button', this.onClickFindButton);\n        this.listen('click', '.find-remove-button', this.onClickRemoveButton);\n        this.listen('click', '.toolbar-delete-selected', this.onDeleteSelectedClick);\n        this.listen('click', 'input[data-record-selector]', this.onClickCheckbox);\n        this.listen('change', 'input[data-record-selector]', this.onSelectionChanged);\n\n        if (this.config.isSortable) {\n            this.bindSortable();\n        }\n\n        // External toolbar\n        setTimeout(() => {\n            this.initToolbarExtensionPoint();\n            this.mountExternalToolbarEventBusEvents();\n            this.extendExternalToolbar();\n        }, 0);\n    }\n\n    disconnect() {\n        this.unmountExternalToolbarEventBusEvents();\n\n        this.sortable = null;\n        this.$dataLocker = null;\n        this.$filesContainer = null;\n        this.$el = null;\n        this.toolbarExtensionPoint = null;\n        this.externalToolbarEventBusObj = null;\n    }\n\n    //\n    // External toolbar\n    //\n\n    initToolbarExtensionPoint() {\n        if (!this.config.externalToolbarAppState) {\n            return;\n        }\n\n        const point = $.oc.vueUtils.getToolbarExtensionPoint(\n            this.config.externalToolbarAppState,\n            this.element\n        );\n\n        if (point) {\n            this.toolbarExtensionPoint = point.state;\n            this.externalToolbarEventBusObj = point.bus;\n        }\n    }\n\n    mountExternalToolbarEventBusEvents() {\n        if (!this.externalToolbarEventBusObj) {\n            return;\n        }\n\n        this.externalToolbarEventBusObj.on('toolbarcmd', this.proxy(this.onToolbarExternalCommand));\n        this.externalToolbarEventBusObj.on('extendapptoolbar', this.proxy(this.extendExternalToolbar));\n    }\n\n    unmountExternalToolbarEventBusEvents() {\n        if (!this.externalToolbarEventBusObj) {\n            return;\n        }\n\n        this.externalToolbarEventBusObj.off('toolbarcmd', this.proxy(this.onToolbarExternalCommand));\n        this.externalToolbarEventBusObj.off('extendapptoolbar', this.proxy(this.extendExternalToolbar));\n    }\n\n    onToolbarExternalCommand(ev) {\n        var cmdPrefix = 'mediafinder-toolbar-' + this.instanceNumber + '-';\n\n        if (ev.command.substring(0, cmdPrefix.length) != cmdPrefix) {\n            return;\n        }\n\n        var buttonClassName = ev.command.substring(cmdPrefix.length),\n            $toolbar = this.$el.find('.mediafinder-control-toolbar'),\n            $button = $toolbar.find('[class=\"'+buttonClassName+'\"]');\n\n        $button.get(0).click(ev.ev);\n    }\n\n    extendExternalToolbar() {\n        if (!this.$el || !this.$el.is(\":visible\") || !this.toolbarExtensionPoint) {\n            return;\n        }\n\n        this.toolbarExtensionPoint.splice(0, this.toolbarExtensionPoint.length);\n\n        this.toolbarExtensionPoint.push({\n            type: 'separator'\n        });\n\n        var that = this,\n            $buttons = this.$el.find('.mediafinder-control-toolbar .backend-toolbar-button');\n\n        $buttons.each(function () {\n            var $button = $(this),\n                $icon = $button.find('i[class^=icon]');\n\n            that.toolbarExtensionPoint.push(\n                {\n                    type: 'button',\n                    icon: $icon.attr('class'),\n                    label: $button.find('.button-label').text(),\n                    command: 'mediafinder-toolbar-' + that.instanceNumber + '-' + $button.attr('class'),\n                    disabled: $button.attr('disabled') !== undefined\n                }\n            );\n        });\n    }\n\n    //\n    // Selection\n    //\n\n    onDeleteSelectedClick(ev) {\n        var $currentObjects = $('.item-object:has(input[data-record-selector]:checked)', this.$filesContainer);\n\n        $currentObjects.remove();\n\n        this.setValue();\n        this.evalIsPopulated();\n        this.evalIsMaxReached();\n        this.updateDeleteSelectedState();\n        this.extendExternalToolbar();\n\n        ev.stopPropagation();\n        ev.preventDefault();\n    }\n\n    onSelectionChanged(ev) {\n        var $object = $(ev.target).closest('.item-object');\n\n        $object.toggleClass('selected', ev.target.checked);\n\n        this.updateDeleteSelectedState();\n        this.extendExternalToolbar();\n    }\n\n    onClickCheckbox(ev) {\n        oc.checkboxRangeRegisterClick(ev, '.item-object', 'input[data-record-selector]');\n    }\n\n    updateDeleteSelectedState() {\n        var enabled = false,\n            selectedCount = this.$el.find('input[data-record-selector]:checked').length;\n\n        if (this.$el.hasClass('is-populated')) {\n            enabled = selectedCount > 0;\n        }\n\n        var $button = this.$el.find('.toolbar-delete-selected'),\n            $counter = $button.find('.button-label > span');\n\n        $button.prop('disabled', !enabled);\n\n        if (enabled) {\n            $counter.text('(' + selectedCount + ')');\n        }\n        else {\n            $counter.text('');\n        }\n    }\n\n    //\n    // Loading\n    //\n\n    loadExistingFiles() {\n        var self = this;\n\n        $('.server-file', this.$filesContainer).each(function () {\n            $(this).replaceWith(self.makeFilePreview($(this).data()));\n        });\n    }\n\n    makeFilePreview(item) {\n        var $preview = $(this.previewTemplate);\n\n        $preview.attr('data-path', item.path);\n        $preview.attr('data-folder', this.makeFolderPath(item));\n        $('[data-public-url]', $preview).attr('src', item.publicUrl);\n        $('[data-thumb-url]', $preview).attr('src', item.thumbUrl);\n        $('[data-title]', $preview).text(item.title).attr('title', item.path);\n\n        // Image is the default but can be swapped out for video and audio\n        if (['video', 'audio'].includes(item.documentType)) {\n            $('[data-document-type]', $preview).each(function() {\n                var $el = $(this).get(0);\n                if ($el.dataset.documentType !== item.documentType) {\n                    $el.remove();\n                }\n            });\n        }\n        else {\n            $('[data-document-type]', $preview).remove();\n        }\n\n        return $preview;\n    }\n\n    makeFolderPath(item) {\n        var path = item.path;\n        if (path.endsWith(item.title)) {\n            path = path.slice(0, item.title.length * -1);\n        }\n\n        if (path.length > 1 && path.endsWith('/')) {\n            path = path.slice(0, -1);\n        }\n\n        return path;\n    }\n\n    getValue() {\n        var result = [];\n\n        $('> .item-object', this.$filesContainer).each(function() {\n            result.push($(this).data('path'));\n        });\n\n        return result.length ? result : '';\n    }\n\n    setValue() {\n        var self = this,\n            currentValue = this.getValue();\n\n        this.$dataLocker.empty();\n\n        // Spin over items and set the input value\n        if (currentValue) {\n            $.each(this.getValue(), function(k, v) {\n                self.addValueToLocker(v);\n            });\n        }\n        // Empty value\n        else {\n            this.addValueToLocker('');\n        }\n\n        // Set value and trigger change event, so that wrapping implementations\n        // like mlmediafinder can listen for changes.\n        this.$dataLocker.find('input:first').trigger('change');\n    }\n\n    addValueToLocker(val) {\n        var inputName = val && this.config.isMulti\n            ? this.config.inputName + '[]'\n            : this.config.inputName;\n\n        $('<input type=\"hidden\" />')\n            .attr('name', inputName)\n            .val(val)\n            .appendTo(this.$dataLocker);\n    }\n\n    addItems(items) {\n        if (!this.$filesContainer) {\n            return;\n        }\n\n        if (!this.config.isMulti) {\n            this.$filesContainer.empty();\n        }\n\n        for (var i=0, len=items.length; i<len; i++) {\n            this.$filesContainer.append(this.makeFilePreview(items[i]));\n        }\n\n        this.extendExternalToolbar();\n    }\n\n    onClickRemoveButton(ev) {\n        if (!this.$filesContainer) {\n            return;\n        }\n\n        this.$filesContainer.empty();\n        this.setValue();\n        this.evalIsPopulated();\n        this.evalIsMaxReached();\n        this.extendExternalToolbar();\n\n        ev.preventDefault();\n        ev.stopPropagation();\n    }\n\n    onClickFindButton() {\n        var self = this;\n\n        new oc.mediaManager.popup({\n            alias: 'ocmediamanager',\n            mediaFolder: this.getCurrentFolderContext(),\n            cropAndInsertButton: true,\n            onInsert: function(items) {\n                if (!items.length) {\n                    alert('Please select image(s) to insert.');\n                    return;\n                }\n\n                // Single mode\n                if (!self.config.isMulti && items.length > 1) {\n                    alert('Please select a single item.');\n                    return;\n                }\n\n                if (!self.maxSelectionAllowed(items.length)) {\n                    alert('Too many items selected.');\n                    return;\n                }\n\n                var isHalted = false;\n                items.forEach(function(item) {\n                    if (!isHalted && self.config.isFolder && item.itemType !== 'folder') {\n                        alert('Please select a folder only.');\n                        isHalted = true;\n                    }\n\n                    if (!isHalted && !self.config.isFolder && item.itemType === 'folder') {\n                        alert('Cannot select a folder. Please select an item instead.');\n                        isHalted = true;\n                    }\n                });\n\n                if (isHalted) {\n                    return;\n                }\n\n                self.addItems(items);\n                self.setValue();\n                self.evalIsPopulated();\n                self.evalIsMaxReached();\n\n                this.hide();\n            }\n        });\n    }\n\n    evalIsPopulated() {\n        var isPopulated = !!$('>.item-object', this.$filesContainer).length;\n        this.$el.toggleClass('is-populated', isPopulated);\n        this.extendExternalToolbar();\n    }\n\n    evalIsMaxReached() {\n        var isMaxReached = false;\n\n        if (this.config.maxItems !== null) {\n            isMaxReached = $('>.item-object', this.$filesContainer).length >= this.config.maxItems;\n        }\n\n        this.$el.toggleClass('is-max-reached', isMaxReached);\n        this.extendExternalToolbar();\n    }\n\n    maxSelectionAllowed(count) {\n        if (this.config.maxItems !== null) {\n            var totalCount = $('>.item-object', this.$filesContainer).length + count;\n\n            if (totalCount > this.config.maxItems) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    getCurrentFolderContext() {\n        // Cannot determine context from multiple items\n        if (!this.config.isMulti) {\n            return $('>.item-object:first', this.$filesContainer).data('folder');\n        }\n    }\n\n    //\n    // Sorting\n    //\n\n    bindSortable() {\n        this.sortable = Sortable.create(this.$filesContainer.get(0), {\n            animation: 150,\n            draggable: 'div.item-object',\n            handle: '.drag-handle',\n            onEnd: this.proxy(this.onSortAttachments),\n\n            // Auto scroll plugin\n            forceAutoScrollFallback: true,\n            scrollSensitivity: 60,\n            scrollSpeed: 20\n        });\n    }\n\n    onSortAttachments() {\n        this.setValue();\n    }\n});\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/partials/_file_multi.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-mediafinder size-<?= $size ?> is-file is-multi is-sortable <?= $fileList->count() ? 'is-populated' : '' ?> <?= $this->previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"mediafinder\"\n    data-template=\"#<?= $this->getId('template') ?>\"\n    data-input-name=\"<?= $field->getName() ?>\"\n    <?php if ($maxItems): ?>data-max-items=\"<?= $maxItems ?>\"<?php endif ?>\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n    <?= $field->getAttributes() ?>\n>\n    <div class=\"empty-state\">\n        <img src=\"<?= Url::asset('/modules/backend/assets/images/no-files.svg') ?>\"/>\n    </div>\n\n    <div class=\"mediafinder-control-container <?= $externalToolbarAppState ? 'external-toolbar' : null ?>\">\n        <div class=\"mediafinder-control-toolbar\">\n            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-find-button\">\n                <i class=\"icon-common-file-star\"></i>\n                <span class=\"button-label\"><?= __(\"Select\") ?></span>\n            </a>\n\n            <button\n                type=\"button\"\n                class=\"backend-toolbar-button control-button toolbar-delete-selected populated-only\"\n                disabled\n            >\n                <i class=\"icon-common-file-remove\"></i>\n                <span class=\"button-label\"><?= __(\"Delete Selected\") ?> <span></span></span>\n            </button>\n        </div>\n\n        <!-- Existing file -->\n        <div class=\"mediafinder-files-container\">\n            <?php foreach ($fileList as $file): ?>\n                <div class=\"server-file\"\n                    data-public-url=\"<?= e($file->publicUrl ?? '') ?>\"\n                    data-path=\"<?= e($file->path ?? '') ?>\"\n                    data-title=\"<?= e($file->title ?? '') ?>\"\n                ></div>\n            <?php endforeach ?>\n        </div>\n    </div>\n\n    <!-- Data locker -->\n    <div id=\"<?= $field->getId() ?>\" data-data-locker>\n        <?php foreach ($fileList as $file): ?>\n            <input\n                type=\"hidden\"\n                name=\"<?= $field->getName() ?>[]\"\n                value=\"<?= e($file->path) ?>\"\n                />\n        <?php endforeach ?>\n    </div>\n</div>\n\n<?= $this->makePartial('template_file', ['modeMulti' => true]) ?>\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/partials/_file_single.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-mediafinder is-file is-single <?= $singleFile ? 'is-populated' : '' ?> <?= $this->previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"mediafinder\"\n    data-template=\"#<?= $this->getId('template') ?>\"\n    data-input-name=\"<?= $field->getName() ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n    <?= $field->getAttributes() ?>\n>\n    <div class=\"empty-state\">\n        <img src=\"<?= Url::asset('/modules/backend/assets/images/no-files.svg') ?>\"/>\n    </div>\n\n    <div class=\"mediafinder-control-container <?= $externalToolbarAppState ? 'external-toolbar' : null ?>\">\n        <div class=\"mediafinder-control-toolbar\">\n            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-find-button\">\n                <i class=\"icon-common-file-star\"></i>\n                <span class=\"button-label\"><?= $singleFile ? __(\"Replace\") : __(\"Select\") ?></span>\n            </a>\n\n            <button\n                type=\"button\"\n                class=\"backend-toolbar-button control-button find-remove-button populated-only\"\n            >\n                <i class=\"icon-common-file-remove\"></i>\n                <span class=\"button-label\"><?= __(\"Clear\") ?></span>\n            </button>\n        </div>\n\n        <!-- Existing file -->\n        <div class=\"mediafinder-files-container\">\n            <div class=\"server-file\"\n                data-public-url=\"<?= e($singleFile->publicUrl ?? '') ?>\"\n                data-path=\"<?= e($singleFile->path ?? '') ?>\"\n                data-title=\"<?= e($singleFile->title ?? '') ?>\"\n            ></div>\n        </div>\n    </div>\n\n    <!-- Data locker -->\n    <div id=\"<?= $field->getId() ?>\" data-data-locker>\n        <input\n            type=\"hidden\"\n            name=\"<?= $field->getName() ?>\"\n            value=\"<?= $singleFile ? e($singleFile->path) : '' ?>\"\n            />\n    </div>\n</div>\n\n<?= $this->makePartial('template_file') ?>\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/partials/_folder_single.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-mediafinder is-file is-folder is-single <?= $singleFile ? 'is-populated' : '' ?> <?= $this->previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"mediafinder\"\n    data-template=\"#<?= $this->getId('template') ?>\"\n    data-input-name=\"<?= $field->getName() ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n    <?= $field->getAttributes() ?>\n>\n    <div class=\"empty-state\">\n        <img src=\"<?= Url::asset('/modules/backend/assets/images/no-files.svg') ?>\"/>\n    </div>\n\n    <div class=\"mediafinder-control-container <?= $externalToolbarAppState ? 'external-toolbar' : null ?>\">\n        <div class=\"mediafinder-control-toolbar\">\n            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-find-button\">\n                <i class=\"icon-common-file-star\"></i>\n                <span class=\"button-label\"><?= $singleFile ? __(\"Replace\") : __(\"Select\") ?></span>\n            </a>\n            <button\n                type=\"button\"\n                class=\"backend-toolbar-button control-button find-remove-button populated-only\"\n            >\n                <i class=\"icon-common-file-remove\"></i>\n                <span class=\"button-label\"><?= __(\"Clear\") ?></span>\n            </button>\n        </div>\n\n        <!-- Existing file -->\n        <div class=\"mediafinder-files-container\">\n            <div class=\"server-file\"\n                data-public-url=\"<?= e($singleFile->publicUrl ?? '') ?>\"\n                data-path=\"<?= e($singleFile->path ?? '') ?>\"\n                data-title=\"<?= e($singleFile->title ?? '') ?>\"\n            ></div>\n        </div>\n    </div>\n\n    <!-- Data locker -->\n    <div id=\"<?= $field->getId() ?>\" data-data-locker>\n        <input\n            type=\"hidden\"\n            name=\"<?= $field->getName() ?>\"\n            value=\"<?= $singleFile ? e($singleFile->path) : '' ?>\"\n            />\n    </div>\n</div>\n\n<?= $this->makePartial('template_file', ['modeFolder' => true]) ?>\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/partials/_image_multi.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-mediafinder size-<?= $size ?> is-image is-multi is-grid is-sortable <?= $fileList->count() ? 'is-populated' : '' ?> <?= $this->previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"mediafinder\"\n    data-thumbnail-width=\"<?= $imageWidth ?: '0' ?>\"\n    data-thumbnail-height=\"<?= $imageHeight ?: '0' ?>\"\n    data-template=\"#<?= $this->getId('template') ?>\"\n    data-input-name=\"<?= $field->getName() ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n    <?php if ($maxItems): ?>data-max-items=\"<?= $maxItems ?>\"<?php endif ?>\n    <?= $field->getAttributes() ?>\n>\n    <div class=\"empty-state\">\n        <img src=\"<?= Url::asset('/modules/backend/assets/images/no-files.svg') ?>\"/>\n    </div>\n\n    <div class=\"mediafinder-control-container <?= $externalToolbarAppState ? 'external-toolbar' : null ?>\">\n        <div class=\"mediafinder-control-toolbar\">\n            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-find-button\">\n                <i class=\"icon-common-file-star\"></i>\n                <span class=\"button-label\"><?= __(\"Select\") ?></span>\n            </a>\n\n            <button\n                type=\"button\"\n                class=\"backend-toolbar-button control-button toolbar-delete-selected populated-only\"\n                disabled\n            >\n                <i class=\"icon-common-file-remove\"></i>\n                <span class=\"button-label\"><?= __(\"Remove Selected\") ?> <span></span></span>\n            </button>\n        </div>\n\n        <!-- Existing files -->\n        <div class=\"mediafinder-files-container\">\n            <?php foreach ($fileList as $file): ?>\n                <div class=\"server-file\"\n                    data-public-url=\"<?= e($file->publicUrl ?? '') ?>\"\n                    data-thumb-url=\"<?= $file->thumbUrl ?? '' ?>\"\n                    data-path=\"<?= e($file->path ?? '') ?>\"\n                    data-title=\"<?= e($file->title ?? '') ?>\"\n                    data-document-type=\"<?= e($file->getFileType() ?: '') ?>\"\n                ></div>\n            <?php endforeach ?>\n        </div>\n    </div>\n\n    <!-- Data locker -->\n    <div id=\"<?= $field->getId() ?>\" data-data-locker>\n        <?php foreach ($fileList as $file): ?>\n            <input\n                type=\"hidden\"\n                name=\"<?= $field->getName() ?>[]\"\n                value=\"<?= e($file->path) ?>\"\n                />\n        <?php endforeach ?>\n    </div>\n</div>\n\n<?= $this->makePartial('template_image', ['modeMulti' => true]) ?>\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/partials/_image_single.php",
    "content": "<div\n    id=\"<?= $this->getId() ?>\"\n    class=\"field-mediafinder is-image is-single <?= $singleFile ? 'is-populated' : '' ?> <?= $this->previewMode ? 'is-preview' : '' ?>\"\n    data-control=\"mediafinder\"\n    data-thumbnail-width=\"<?= $imageWidth ?: '0' ?>\"\n    data-thumbnail-height=\"<?= $imageHeight ?: '0' ?>\"\n    data-template=\"#<?= $this->getId('template') ?>\"\n    data-input-name=\"<?= $field->getName() ?>\"\n    <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state=\"<?= e($externalToolbarAppState)?>\"<?php endif ?>\n    <?= $field->getAttributes() ?>\n>\n    <div class=\"empty-state\">\n        <img src=\"<?= Url::asset('/modules/backend/assets/images/no-files.svg') ?>\"/>\n    </div>\n\n    <div class=\"mediafinder-control-container <?= $externalToolbarAppState ? 'external-toolbar' : null ?>\">\n        <div class=\"mediafinder-control-toolbar\">\n            <a href=\"javascript:;\" class=\"backend-toolbar-button control-button toolbar-find-button\">\n                <i class=\"icon-common-file-star\"></i>\n                <span class=\"button-label\"><?= $singleFile ? __(\"Replace\") : __(\"Select\") ?></span>\n            </a>\n\n            <button\n                type=\"button\"\n                class=\"backend-toolbar-button control-button find-remove-button populated-only\"\n            >\n                <i class=\"icon-common-file-remove\"></i>\n                <span class=\"button-label\"><?= __(\"Clear\") ?></span>\n            </button>\n        </div>\n\n        <!-- Existing file -->\n        <div class=\"mediafinder-files-container\">\n            <div class=\"server-file\"\n                data-public-url=\"<?= e($singleFile->publicUrl ?? '') ?>\"\n                data-thumb-url=\"<?= $singleFile->thumbUrl ?? '' ?>\"\n                data-path=\"<?= e($singleFile->path ?? '') ?>\"\n                data-title=\"<?= e($singleFile->title ?? '') ?>\"\n                data-document-type=\"<?= e($singleFile ? $singleFile->getFileType() : '') ?>\"\n            ></div>\n        </div>\n    </div>\n\n    <!-- Data locker -->\n    <div id=\"<?= $field->getId() ?>\" data-data-locker>\n        <input\n            type=\"hidden\"\n            name=\"<?= $field->getName() ?>\"\n            value=\"<?= $singleFile ? e($singleFile->path) : '' ?>\"\n            />\n    </div>\n</div>\n\n<?= $this->makePartial('template_image') ?>\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/partials/_mediafinder.php",
    "content": "<?php if ($this->previewMode && !$fileList->count()): ?>\n\n    <span class=\"form-control\" disabled=\"disabled\"><?= e(trans('backend::lang.form.preview_no_media_message')) ?></span>\n\n<?php else: ?>\n\n    <?php switch ($displayMode):\n\n        case 'image-single': ?>\n            <?= $this->makePartial('image_single') ?>\n        <?php break ?>\n\n        <?php case 'image-multi': ?>\n            <?= $this->makePartial('image_multi') ?>\n        <?php break ?>\n\n        <?php case 'file-single': ?>\n            <?= $this->makePartial('file_single') ?>\n        <?php break ?>\n\n        <?php case 'file-multi': ?>\n            <?= $this->makePartial('file_multi') ?>\n        <?php break ?>\n\n        <?php case 'folder-single': ?>\n            <?= $this->makePartial('folder_single') ?>\n        <?php break ?>\n\n    <?php endswitch ?>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/partials/_template_file.php",
    "content": "<!-- Template for new file -->\n<script type=\"text/template\" id=\"<?= $this->getId('template') ?>\">\n    <div class=\"item-object item-object-file <?= isset($modeMulti) ? 'mode-multi' : '' ?>\">\n        <?php if (isset($modeMulti)): ?>\n            <div class=\"form-check\">\n                <input\n                    class=\"form-check-input\"\n                    data-record-selector\n                    type=\"checkbox\"\n                    value=\"\"\n                />\n            </div>\n            <div class=\"drag-handle\">\n                <i class=\"icon-list-reorder\"></i>\n            </div>\n        <?php endif ?>\n\n        <div class=\"file-data-container\">\n            <div class=\"file-data-container-inner\">\n                <div class=\"icon-container\">\n                    <?php if (isset($modeFolder)): ?>\n                        <i class=\"icon-folder\"></i>\n                    <?php else: ?>\n                        <i class=\"icon-attachment\"></i>\n                    <?php endif ?>\n                </div>\n\n                <div class=\"info\">\n                    <h4 class=\"filename\">\n                        <span data-title></span>\n                    </h4>\n                </div>\n            </div>\n        </div>\n    </div>\n</script>\n"
  },
  {
    "path": "modules/media/formwidgets/mediafinder/partials/_template_image.php",
    "content": "<!-- Template for new file -->\n<script type=\"text/template\" id=\"<?= $this->getId('template') ?>\">\n    <div class=\"item-object item-object-image <?= isset($modeMulti) ? 'mode-multi' : '' ?>\">\n        <?php if (isset($modeMulti)): ?>\n            <div class=\"form-check\">\n                <input\n                    class=\"form-check-input\"\n                    data-record-selector\n                    type=\"checkbox\"\n                    value=\"\"\n                />\n            </div>\n            <div class=\"drag-handle\">\n                <i class=\"icon-list-reorder\"></i>\n            </div>\n        <?php endif ?>\n\n        <div class=\"file-data-container\">\n            <div class=\"file-data-container-inner\">\n                <div class=\"icon-container image\">\n                    <img data-thumb-url alt=\"\" />\n                    <video data-thumb-url preload=\"metadata\" data-document-type=\"video\"></video>\n                    <audio data-thumb-url controls preload=\"metadata\" data-document-type=\"audio\"></audio>\n                </div>\n                <div class=\"info\">\n                    <h4 class=\"filename\">\n                        <span data-title></span>\n                    </h4>\n                </div>\n            </div>\n        </div>\n    </div>\n</script>\n"
  },
  {
    "path": "modules/media/helpers/MediaView.php",
    "content": "<?php namespace Media\\Helpers;\n\nuse App;\nuse Cms\\Classes\\Partial;\nuse Cms\\Classes\\Controller;\nuse ApplicationException;\n\n/**\n * MediaView helpers class for processing video and audio tags inserted by the Media Manager.\n *\n * @package october\\media\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MediaView\n{\n    /**\n     * @var array playerPartialFlags\n     */\n    protected $playerPartialFlags = [];\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('media.views');\n    }\n\n    /**\n     * processHtml replaces audio and video tags inserted by the Media Manager with players markup.\n     * @param string $html Specifies the HTML string to process.\n     * @return string Returns the processed HTML string.\n     */\n    public function processHtml($html)\n    {\n        $mediaTags = $this->extractMediaTags($html);\n        foreach ($mediaTags as $tagInfo) {\n            $pattern = preg_quote($tagInfo['declaration']);\n            $generatedMarkup = $this->generateMediaTagMarkup($tagInfo['type'], $tagInfo['src']);\n            $html = mb_ereg_replace($pattern, $generatedMarkup, $html);\n        }\n\n        return $html;\n    }\n\n    /**\n     * extractMediaTags\n     */\n    protected function extractMediaTags($html)\n    {\n        $result = [];\n        $matches = [];\n\n        $tagDefinitions = [\n            'audio' => '/data\\-audio\\s*=\\s*\"([^\"]+)\"/',\n            'video' => '/data\\-video\\s*=\\s*\"([^\"]+)\"/'\n        ];\n\n        if (preg_match_all('/\\<figure\\s+[^\\>]+\\>[^\\<]*\\<\\/figure\\>/i', $html, $matches)) {\n            foreach ($matches[0] as $mediaDeclaration) {\n                foreach ($tagDefinitions as $type => $pattern) {\n                    $nameMatch = [];\n                    if (preg_match($pattern, $mediaDeclaration, $nameMatch)) {\n                        $result[] = [\n                            'declaration' => $mediaDeclaration,\n                            'type' => $type,\n                            'src' => $nameMatch[1]\n                        ];\n                    }\n                }\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * generateMediaTagMarkup\n     */\n    protected function generateMediaTagMarkup($type, $src)\n    {\n        $partialName = $type == 'audio' ? 'oc-audio-player' : 'oc-video-player';\n\n        if ($this->playerPartialExists($partialName)) {\n            return Controller::getController()->renderPartial($partialName, ['src' => $src]);\n        }\n\n        return $this->getDefaultPlayerMarkup($type, $src);\n    }\n\n    /**\n     * playerPartialExists\n     */\n    protected function playerPartialExists($name)\n    {\n        if (array_key_exists($name, $this->playerPartialFlags)) {\n            return $this->playerPartialFlags[$name];\n        }\n\n        $controller = Controller::getController();\n        if (!$controller) {\n            throw new ApplicationException('Media tags can only be processed for front-end requests.');\n        }\n\n        $partial = Partial::loadCached($controller->getTheme(), $name);\n\n        return $this->playerPartialFlags[$name] = !!$partial;\n    }\n\n    /**\n     * getDefaultPlayerMarkup\n     */\n    protected function getDefaultPlayerMarkup($type, $src)\n    {\n        switch ($type) {\n            case 'video':\n                return '<video src=\"'.e($src).'\" controls preload=\"metadata\"></video>';\n            break;\n\n            case 'audio':\n                return '<audio src=\"'.e($src).'\" controls preload=\"metadata\"></audio>';\n            break;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/media/lang/be.json",
    "content": "{\n  \"Media\": \"СМІ\",\n  \"Access the Media Manager\": \"Доступ да Media Manager\",\n  \"Upload Media\": \"Загрузіць медыя\",\n  \"Delete Media\": \"Выдаліць медыя\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Мультымедыйны файл ужо існуе ў гэтым месцы, запампуйце, выкарыстоўваючы іншую назву файла.\",\n  \"Remove Selected\": \"Выдаліць выбранае\"\n}"
  },
  {
    "path": "modules/media/lang/bg.json",
    "content": "{\n  \"Media\": \"Медия\",\n  \"Access the Media Manager\": \"Достъп до Media Manager\",\n  \"Upload Media\": \"Качване на медия\",\n  \"Delete Media\": \"Изтриване на медия\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"На това място вече съществува медиен файл, моля, качете с друго име на файл.\",\n  \"Remove Selected\": \"Премахнете избраното\"\n}"
  },
  {
    "path": "modules/media/lang/ca.json",
    "content": "{\n  \"Media\": \"Mitjans de comunicació\",\n  \"Access the Media Manager\": \"Accediu al Gestor de mitjans\",\n  \"Upload Media\": \"Carrega multimèdia\",\n  \"Delete Media\": \"Suprimeix el contingut multimèdia\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Ja hi ha un fitxer multimèdia en aquesta ubicació. Pengeu-lo amb un nom de fitxer diferent.\",\n  \"Remove Selected\": \"Elimina els seleccionats\"\n}"
  },
  {
    "path": "modules/media/lang/cs.json",
    "content": "{\n  \"Media\": \"Média\",\n  \"Access the Media Manager\": \"Otevřete Správce médií\",\n  \"Upload Media\": \"Nahrát média\",\n  \"Delete Media\": \"Smazat média\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"V tomto umístění již mediální soubor existuje, nahrajte jej prosím s jiným názvem souboru.\",\n  \"Remove Selected\": \"Odstranit vybrané\"\n}"
  },
  {
    "path": "modules/media/lang/da.json",
    "content": "{\n  \"Media\": \"Medier\",\n  \"Access the Media Manager\": \"Få adgang til Media Manager\",\n  \"Upload Media\": \"Upload medier\",\n  \"Delete Media\": \"Slet medier\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Der findes allerede en mediefil på denne placering. Upload venligst med et andet filnavn.\",\n  \"Remove Selected\": \"Fjern valgte\"\n}"
  },
  {
    "path": "modules/media/lang/de.json",
    "content": "{\n  \"Media\": \"Medien\",\n  \"Access the Media Manager\": \"Greifen Sie auf den Medien-Manager zu\",\n  \"Upload Media\": \"Medien hochladen\",\n  \"Delete Media\": \"Medien löschen\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"An diesem Ort existiert bereits eine Mediendatei. Bitte laden Sie eine Mediendatei mit einem anderen Namen hoch.\",\n  \"Remove Selected\": \"Markierte entfernen\"\n}"
  },
  {
    "path": "modules/media/lang/el.json",
    "content": "{\n  \"Media\": \"Μεσο ΜΑΖΙΚΗΣ ΕΝΗΜΕΡΩΣΗΣ\",\n  \"Access the Media Manager\": \"Πρόσβαση στο Media Manager\",\n  \"Upload Media\": \"Μεταφόρτωση πολυμέσων\",\n  \"Delete Media\": \"Διαγραφή πολυμέσων\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Υπάρχει ήδη ένα αρχείο πολυμέσων σε αυτήν την τοποθεσία, μεταφορτώστε χρησιμοποιώντας διαφορετικό όνομα αρχείου.\",\n  \"Remove Selected\": \"Αφαιρέστε τα επιλεγμένα\"\n}"
  },
  {
    "path": "modules/media/lang/en.json",
    "content": "{\n    \"Media\": \"Media\",\n    \"Access the Media Manager\": \"Access the Media Manager\",\n    \"Upload Media\": \"Upload Media\",\n    \"Delete Media\": \"Delete Media\",\n    \"A media file already exists at this location, please upload using a different filename.\": \"A media file already exists at this location, please upload using a different filename.\",\n    \"Remove Selected\": \"Remove Selected\"\n}\n"
  },
  {
    "path": "modules/media/lang/es-ar.json",
    "content": "{\n}"
  },
  {
    "path": "modules/media/lang/es.json",
    "content": "{\n  \"Media\": \"Medios\",\n  \"Access the Media Manager\": \"Acceder al Administrador de medios\",\n  \"Upload Media\": \"Subir medios\",\n  \"Delete Media\": \"Eliminar medios\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Ya existe un archivo multimedia en esta ubicación, cárguelo con un nombre de archivo diferente.\",\n  \"Remove Selected\": \"Eliminar seleccionados\"\n}"
  },
  {
    "path": "modules/media/lang/et.json",
    "content": "{\n    \"Media\": \"Meedia\",\n    \"Access the Media Manager\": \"Juurdepääs Media Managerile\",\n    \"Upload Media\": \"Laadige meedia üles\",\n    \"Delete Media\": \"Kustuta meedia\",\n    \"A media file already exists at this location, please upload using a different filename.\": \"Selles kohas on meediumifail juba olemas. Laadige üles, kasutades teist failinime.\",\n    \"Remove Selected\": \"Eemalda valitud\"\n}\n"
  },
  {
    "path": "modules/media/lang/fa.json",
    "content": "{\n  \"Media\": \"رسانه ها\",\n  \"Access the Media Manager\": \"به Media Manager دسترسی پیدا کنید\",\n  \"Upload Media\": \"آپلود رسانه\",\n  \"Delete Media\": \"حذف رسانه\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"یک فایل رسانه از قبل در این مکان وجود دارد، لطفا با استفاده از نام فایل دیگری آپلود کنید.\",\n  \"Remove Selected\": \"حذف انتخاب شده\"\n}"
  },
  {
    "path": "modules/media/lang/fi.json",
    "content": "{\n  \"Media\": \"Media\",\n  \"Access the Media Manager\": \"Käytä Media Manageria\",\n  \"Upload Media\": \"Lähetä media\",\n  \"Delete Media\": \"Poista media\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Mediatiedosto on jo olemassa tässä sijainnissa, ole hyvä ja lataa se eri tiedostonimellä.\",\n  \"Remove Selected\": \"Poista valittu\"\n}"
  },
  {
    "path": "modules/media/lang/fr.json",
    "content": "{\n  \"Media\": \"Médias\",\n  \"Access the Media Manager\": \"Accéder au gestionnaire de médias\",\n  \"Upload Media\": \"Télécharger le média\",\n  \"Delete Media\": \"Supprimer le média\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Un fichier existe déjà à cet emplacement, veuillez utiliser un autre nom de fichier.\",\n  \"Remove Selected\": \"Retirer la sélection\"\n}"
  },
  {
    "path": "modules/media/lang/hu.json",
    "content": "{\n  \"Media\": \"Média\",\n  \"Access the Media Manager\": \"Nyissa meg a Médiakezelőt\",\n  \"Upload Media\": \"Média feltöltése\",\n  \"Delete Media\": \"Média törlése\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"A megadott névvel már létezik fájl ezen a helyen, kérlek, töltsd fel más fájlnév használatával.\",\n  \"Remove Selected\": \"Kijelölt(ek) törlése\"\n}"
  },
  {
    "path": "modules/media/lang/id.json",
    "content": "{\n  \"Media\": \"Media\",\n  \"Access the Media Manager\": \"Mengakses kelola Media\",\n  \"Upload Media\": \"Unggah Media\",\n  \"Delete Media\": \"Hapus Media\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"File media sudah ada di lokasi ini, harap unggah menggunakan nama file yang berbeda.\",\n  \"Remove Selected\": \"Hapus yang Dipilih\"\n}"
  },
  {
    "path": "modules/media/lang/it.json",
    "content": "{\n  \"Media\": \"Media\",\n  \"Access the Media Manager\": \"Accedi al Gestore multimediale\",\n  \"Upload Media\": \"Carica file multimediali\",\n  \"Delete Media\": \"Elimina media\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Un file multimediale esiste già in questa posizione, caricalo utilizzando un nome file diverso.\",\n  \"Remove Selected\": \"Rimuovi i selezionati\"\n}"
  },
  {
    "path": "modules/media/lang/ja.json",
    "content": "{\n  \"Media\": \"メディア\",\n  \"Access the Media Manager\": \"メディアマネージャーにアクセスする\",\n  \"Upload Media\": \"メディアのアップロード\",\n  \"Delete Media\": \"メディアを削除\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"メディア ファイルはこの場所にすでに存在します。別のファイル名を使用してアップロードしてください。\",\n  \"Remove Selected\": \"削除選択\"\n}"
  },
  {
    "path": "modules/media/lang/kaa.json",
    "content": "{\n    \"Media\": \"Media\",\n    \"Access the Media Manager\": \"Access the Media Manager\",\n    \"Upload Media\": \"Media júklew\",\n    \"Delete Media\": \"Medianı óshiriw\",\n    \"A media file already exists at this location, please upload using a different filename.\": \"A media file already exists at this location, please upload using a different filename.\",\n    \"Remove Selected\": \"Tańlanǵanlardı óshiriw\"\n}\n"
  },
  {
    "path": "modules/media/lang/kk.json",
    "content": "{\n    \"Media\": \"Медиа\",\n    \"Access the Media Manager\": \"Медиа Менеджерге қол жеткізу\",\n    \"Upload Media\": \"Медиа жүктеу\",\n    \"Delete Media\": \"Медианы жою\",\n    \"A media file already exists at this location, please upload using a different filename.\": \"Бұл мультимедиа файлы бар, файл атауын басқаша атап жүктеңіз.\",\n    \"Remove Selected\": \"Таңдалғанды Жою\"\n}\n"
  },
  {
    "path": "modules/media/lang/ko.json",
    "content": "{\n  \"Media\": \"미디어\",\n  \"Access the Media Manager\": \"미디어 관리자에 액세스\",\n  \"Upload Media\": \"미디어 업로드\",\n  \"Delete Media\": \"미디어 삭제\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"이 위치에 이미 미디어 파일이 있습니다. 다른 파일 이름을 사용하여 업로드하십시오.\",\n  \"Remove Selected\": \"선택된 것을 지우다\"\n}"
  },
  {
    "path": "modules/media/lang/lt.json",
    "content": "{\n  \"Media\": \"Žiniasklaida\",\n  \"Access the Media Manager\": \"Pasiekite medijos tvarkyklę\",\n  \"Upload Media\": \"Įkelti mediją\",\n  \"Delete Media\": \"Ištrinti laikmeną\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Medijos failas jau yra šioje vietoje. Įkelkite naudodami kitą failo pavadinimą.\",\n  \"Remove Selected\": \"Pašalinti pasirinktą\"\n}"
  },
  {
    "path": "modules/media/lang/lv.json",
    "content": "{\n  \"Media\": \"Plašsaziņas līdzekļi\",\n  \"Access the Media Manager\": \"Piekļūstiet multivides pārvaldniekam\",\n  \"Upload Media\": \"Augšupielādēt multividi\",\n  \"Delete Media\": \"Dzēst multividi\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Šajā vietā jau pastāv multivides fails. Lūdzu, augšupielādējiet, izmantojot citu faila nosaukumu.\",\n  \"Remove Selected\": \"Noņemt atlasītos\"\n}"
  },
  {
    "path": "modules/media/lang/nb-no.json",
    "content": "{\n}"
  },
  {
    "path": "modules/media/lang/nl.json",
    "content": "{\n  \"Media\": \"Media\",\n  \"Access the Media Manager\": \"Toegang tot de Media Manager\",\n  \"Upload Media\": \"Media uploaden\",\n  \"Delete Media\": \"Media verwijderen\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Er bestaat al een media-bestand op deze locatie, upload het bestand met een andere naam.\",\n  \"Remove Selected\": \"Verwijder selectie\"\n}"
  },
  {
    "path": "modules/media/lang/pl.json",
    "content": "{\n  \"Media\": \"Głoska bezdźwięczna\",\n  \"Access the Media Manager\": \"Uzyskaj dostęp do Menedżera mediów\",\n  \"Upload Media\": \"Prześlij multimedia\",\n  \"Delete Media\": \"Usuń multimedia\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"A media file already exists at this location, please upload using a different filename.\",\n  \"Remove Selected\": \"Remove Selected\"\n}"
  },
  {
    "path": "modules/media/lang/pt-br.json",
    "content": "{\n    \"Media\": \"Mídia\",\n    \"Access the Media Manager\": \"Acesse o Gerenciador de Mídia\",\n    \"Upload Media\": \"Carregar mídia\",\n    \"Delete Media\": \"Excluir mídia\",\n    \"A media file already exists at this location, please upload using a different filename.\": \"Já existe um arquivo de mídia neste local. Faça o upload usando um nome de arquivo diferente.\",\n    \"Remove Selected\": \"Remover Seleção\"\n}\n"
  },
  {
    "path": "modules/media/lang/pt-pt.json",
    "content": "{\n    \"Media\": \"Media\",\n    \"Access the Media Manager\": \"Access the Media Manager\",\n    \"Upload Media\": \"Upload Media\",\n    \"Delete Media\": \"Delete Media\",\n    \"A media file already exists at this location, please upload using a different filename.\": \"A media file already exists at this location, please upload using a different filename.\",\n    \"Remove Selected\": \"Remove Selected\"\n}\n"
  },
  {
    "path": "modules/media/lang/ro.json",
    "content": "{\n  \"Media\": \"Mass-media\",\n  \"Access the Media Manager\": \"Accesați Media Manager\",\n  \"Upload Media\": \"Încărcați media\",\n  \"Delete Media\": \"Ștergeți media\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Un fișier media există deja în această locație, vă rugăm să încărcați folosind un alt nume de fișier.\",\n  \"Remove Selected\": \"Sterge selectia\"\n}"
  },
  {
    "path": "modules/media/lang/rs.json",
    "content": "{\n}"
  },
  {
    "path": "modules/media/lang/ru.json",
    "content": "{\n  \"Media\": \"Медиа\",\n  \"Access the Media Manager\": \"Доступ к медиа-менеджеру\",\n  \"Upload Media\": \"Загрузить медиа\",\n  \"Delete Media\": \"Удалить медиа\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Медиафайл уже существует по этому пути, пожалуйста выберите другое имя файла.\",\n  \"Remove Selected\": \"Убрать Выделенное\"\n}"
  },
  {
    "path": "modules/media/lang/sk.json",
    "content": "{\n  \"Media\": \"Médiá\",\n  \"Access the Media Manager\": \"Prístup k Správcovi médií\",\n  \"Upload Media\": \"Nahrať médiá\",\n  \"Delete Media\": \"Odstrániť médiá\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"V tejto lokácii už mediálny súbor existuje, prosím nahrajte ho s iným názvom.\",\n  \"Remove Selected\": \"Odstrániť vybrané\"\n}"
  },
  {
    "path": "modules/media/lang/sl.json",
    "content": "{\n  \"Media\": \"Mediji\",\n  \"Access the Media Manager\": \"Dostop do upravitelja medijev\",\n  \"Upload Media\": \"Nalaganje medijev\",\n  \"Delete Media\": \"Izbriši medije\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Medijska datoteka na tej lokaciji že obstaja, prosimo, da jo naložite z drugim imenom.\",\n  \"Remove Selected\": \"Odstrani izbrano\"\n}"
  },
  {
    "path": "modules/media/lang/sv.json",
    "content": "{\n  \"Media\": \"Media\",\n  \"Access the Media Manager\": \"Öppna Media Manager\",\n  \"Upload Media\": \"Ladda upp media\",\n  \"Delete Media\": \"Ta bort media\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"En mediefil finns redan på den här platsen, ladda upp med ett annat filnamn.\",\n  \"Remove Selected\": \"Ta bort valda\"\n}"
  },
  {
    "path": "modules/media/lang/th.json",
    "content": "{\n  \"Media\": \"สื่อ\",\n  \"Access the Media Manager\": \"เข้าถึงตัวจัดการสื่อ\",\n  \"Upload Media\": \"อัพโหลดสื่อ\",\n  \"Delete Media\": \"ลบสื่อ\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"มีไฟล์สื่ออยู่ในตำแหน่งนี้แล้ว โปรดอัปโหลดโดยใช้ชื่อไฟล์อื่น\",\n  \"Remove Selected\": \"ลบสิ่งที่เลือก\"\n}"
  },
  {
    "path": "modules/media/lang/tr.json",
    "content": "{\n  \"Media\": \"medya\",\n  \"Access the Media Manager\": \"Medya Yöneticisine Erişin\",\n  \"Upload Media\": \"Medya Yükle\",\n  \"Delete Media\": \"Medyayı Sil\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Bu konumda zaten bir medya dosyası var, lütfen farklı bir dosya adı kullanarak yükleyin.\",\n  \"Remove Selected\": \"Seçileni Kaldır\"\n}"
  },
  {
    "path": "modules/media/lang/uk.json",
    "content": "{\n  \"Media\": \"Медіафайли\",\n  \"Access the Media Manager\": \"Доступ до менеджера медіафайлів\",\n  \"Upload Media\": \"Додати до медіафайлів\",\n  \"Delete Media\": \"Видалити медіафайли\",\n  \"A media file already exists at this location, please upload using a different filename.\": \"Медіафайл з такою назвою вже існує на цьому місці, будь ласка, завантажте файл з іншою назвою.\",\n  \"Remove Selected\": \"Видалити позначені\"\n}"
  },
  {
    "path": "modules/media/lang/vn.json",
    "content": "{\n}"
  },
  {
    "path": "modules/media/lang/zh-cn.json",
    "content": "{\n    \"Media\": \"媒体\",\n    \"Access the Media Manager\": \"访问媒体管理器\",\n    \"Upload Media\": \"上传媒体\",\n    \"Delete Media\": \"删除媒体\",\n    \"A media file already exists at this location, please upload using a different filename.\": \"此位置已存在媒体文件，请使用其他文件名上传。\",\n    \"Remove Selected\": \"移除所选\"\n}\n"
  },
  {
    "path": "modules/media/lang/zh-tw.json",
    "content": "{\n  \"Media\": \"媒體\",\n  \"Access the Media Manager\": \"訪問媒體管理器\",\n  \"Upload Media\": \"上傳媒體\",\n  \"Delete Media\": \"刪除媒體\"\n}"
  },
  {
    "path": "modules/media/models/MediaLibraryItemImport.php",
    "content": "<?php namespace Media\\Models;\n\nuse File;\nuse Storage;\nuse Backend\\Models\\ImportModel;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FormElement;\nuse Illuminate\\Http\\File as HttpFile;\nuse Media\\Classes\\MediaLibrary;\n\n/**\n * MediaLibraryItemImport for importing media items\n *\n * @package october\\media\n * @author Samuel Georges, Alexey Bobkov\n */\nclass MediaLibraryItemImport extends ImportModel\n{\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [];\n\n    /**\n     * @var ?string pathPrefix\n     */\n    protected $pathPrefix = null;\n\n    /**\n     * defineListColumns\n     */\n    public function defineListColumns(ListElement $host)\n    {\n        $host->defineColumn('type', 'Item Type');\n        $host->defineColumn('path', 'Output Path');\n        $host->defineColumn('source', 'Source Path');\n    }\n\n    /**\n     * importData\n     */\n    public function importData($results, $sessionKey = null)\n    {\n        $disk = Storage::disk('media');\n\n        foreach ($results as $row => $item) {\n            if ($item['type'] === 'file') {\n                $target = $item['path'];\n                $target = MediaLibrary::validatePath($target);\n\n                if ($disk->exists($target)) {\n                    $this->logSkipped($row, \"File already exists\");\n                    continue;\n                }\n\n                $disk->putFileAs(\n                    dirname($target),\n                    new HttpFile($this->baseSourcePath($item['source'])),\n                    basename($target)\n                );\n\n                $this->logCreated();\n            }\n\n            if ($item['type'] === 'folder') {\n                $files = File::allFiles($this->baseSourcePath($item['source']));\n\n                foreach ($files as $iRow => $file) {\n                    $relativePath = $file->getRelativePathname();\n                    $target = $item['path'] . '/' . $relativePath;\n                    $target = MediaLibrary::validatePath($target);\n\n                    if ($disk->exists($target)) {\n                        $this->logSkipped(\"{$row}.{$iRow}\", \"File already exists\");\n                        continue;\n                    }\n\n                    $disk->putFileAs(\n                        $item['path'],\n                        new HttpFile($file->getRealPath()),\n                        $relativePath\n                    );\n\n                    $this->logCreated();\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns a base source path for 'source' definitions\n     */\n    protected function baseSourcePath($path)\n    {\n        return $this->pathPrefix ?\n            \"{$this->pathPrefix}/{$path}\"\n            : $path;\n    }\n\n    /**\n     * setSourcePrefix prefixes every source with the provided path\n     */\n    public function setSourcePrefix($pathPrefix)\n    {\n        $this->pathPrefix = $pathPrefix;\n    }\n}\n"
  },
  {
    "path": "modules/media/tests/classes/MediaLibraryItemTest.php",
    "content": "<?php\n\nuse Media\\Classes\\MediaLibraryItem;\n\n/**\n * MediaLibraryItemTest\n */\nclass MediaLibraryItemTest extends TestCase\n{\n    /**\n     * setUp test\n     */\n    public function setUp(): void\n    {\n        MediaLibraryItem::forgetExtensions();\n        parent::setUp();\n    }\n\n    /**\n     * testFileTypeImage checks standard file type\n     */\n    public function testFileTypeImage()\n    {\n        $item = new MediaLibraryItem('/demo/pictures/image19.jpg', 1000, 1654168594, MediaLibraryItem::TYPE_FILE, 'https://localhost/demo/pictures/image19.jpg');\n\n        $this->assertTrue($item->isFile());\n        $this->assertEquals(MediaLibraryItem::FILE_TYPE_IMAGE, $item->getFileType());\n        $this->assertNotEquals(MediaLibraryItem::FILE_TYPE_DOCUMENT, $item->getFileType());\n    }\n\n    /**\n     * testFileTypeCustom checks custom type registration\n     */\n    public function testFileTypeCustom()\n    {\n        $this->app['config']->set('media.video_extensions', ['xxx', 'mp4', 'avi', 'mov', 'mpg', 'mpeg', 'mkv', 'webm']);\n\n        $item = new MediaLibraryItem('/demo/pictures/video19.xxx', 1000, 1654168594, MediaLibraryItem::TYPE_FILE, 'https://localhost/demo/pictures/video19.xxx');\n\n        $this->assertTrue($item->isFile());\n        $this->assertEquals(MediaLibraryItem::FILE_TYPE_VIDEO, $item->getFileType());\n        $this->assertNotEquals(MediaLibraryItem::FILE_TYPE_DOCUMENT, $item->getFileType());\n    }\n\n    /**\n     * testItemTypeFolder\n     */\n    public function testItemTypeFolder()\n    {\n        $item = new MediaLibraryItem('/demo/pictures', 26, 1654168594, MediaLibraryItem::TYPE_FOLDER, 'https://localhost/demo/pictures');\n\n        $this->assertFalse($item->isFile());\n        $this->assertNull($item->getFileType());\n        $this->assertEquals('26 item(s)', $item->sizeToString());\n    }\n}\n"
  },
  {
    "path": "modules/media/tests/classes/MediaLibraryTest.php",
    "content": "<?php\n\nuse Illuminate\\Filesystem\\FilesystemAdapter;\nuse Media\\Classes\\MediaLibrary;\n\n/**\n * MediaLibraryTest\n */\nclass MediaLibraryTest extends TestCase\n{\n    /**\n     * testInvalidPathsOnValidatePath\n     * @dataProvider invalidPathsProvider\n     */\n    public function testInvalidPathsOnValidatePath($path)\n    {\n        $this->expectException('ApplicationException');\n        MediaLibrary::validatePath($path);\n    }\n\n    /**\n     * invalidPathsProvider\n     */\n    public function invalidPathsProvider()\n    {\n        return [\n            ['./file'],\n            ['../secret'],\n            ['.../secret'],\n            ['/../secret'],\n            ['/.../secret'],\n            ['/secret/..'],\n            ['file/../secret'],\n            ['file/..'],\n            ['......./secret'],\n            ['./file'],\n        ];\n    }\n\n    /**\n     * testValidPathsOnValidatePath\n     * @dataProvider validPathsProvider\n     */\n    public function testValidPathsOnValidatePath($path)\n    {\n        $result = MediaLibrary::validatePath($path);\n        $this->assertIsString($result);\n    }\n\n    /**\n     * validPathsProvider\n     */\n    public function validPathsProvider()\n    {\n        return [\n            ['file'],\n            ['folder/file'],\n            ['/file'],\n            ['/folder/file'],\n            ['/.file'],\n            ['/..file'],\n            ['/...file'],\n            ['file.ext'],\n            ['file..ext'],\n            ['file...ext'],\n            ['one,two.ext'],\n            ['one(two)[].ext'],\n            ['one=(two)[].ext'],\n            ['one_(two)[].ext'],\n            ['BG中国通讯期刊(Blend\\'r)创刊号.pdf'],\n        ];\n    }\n\n    /**\n     * testListAllDirectories\n     */\n    public function testListAllDirectories()\n    {\n        $disk = $this->createConfiguredMock(FilesystemAdapter::class, [\n            'allDirectories' => [\n                '/.ignore1',\n                '/.ignore2',\n                '/dir',\n                '/dir/sub',\n                '/exclude',\n                '/hidden',\n                '/hidden/sub1',\n                '/hidden/sub1/deep1',\n                '/hidden/sub2',\n                '/hidden but not really',\n                '/name'\n            ]\n        ]);\n\n        $this->app['config']->set('media.ignore_files', ['hidden']);\n        $this->app['config']->set('media.ignore_patterns', ['^\\..*']);\n        $instance = MediaLibrary::instance();\n        $this->setProtectedProperty($instance, 'storageDisk', $disk);\n\n        $expect = ['/', '/dir', '/dir/sub', '/hidden but not really', '/name'];\n        $actual = $instance->listAllDirectories(['/exclude']);\n        $this->assertEquals($expect, $actual);\n    }\n\n    /**\n     * testScanFolderContents checks the assumption that all resulting paths are normalized\n     * to include a leading slash.\n     */\n    public function testScanFolderContents()\n    {\n        $this->app['config']->set('filesystems.disks.media.root', base_path('modules/media/tests/fixtures/media'));\n\n        $instance = MediaLibrary::instance();\n        $result = self::callProtectedMethod($instance, 'scanFolderContents', ['']);\n\n        foreach ($result['files'] as $item) {\n            $this->assertTrue(starts_with($item->path, '/'), \"Path [$item->path] should start with a forward slash\");\n        }\n    }\n}\n"
  },
  {
    "path": "modules/media/tests/fixtures/media/document.txt",
    "content": "I am document"
  },
  {
    "path": "modules/media/twig/Extension.php",
    "content": "<?php namespace Media\\Twig;\n\nuse Twig\\Extension\\AbstractExtension as TwigExtension;\nuse Twig\\TwigFilter as TwigSimpleFilter;\nuse Media\\Classes\\MediaLibrary;\n\n/**\n * Extension for Twig used by the Media module\n *\n * @package october\\media\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Extension extends TwigExtension\n{\n    /**\n     * getFunctions returns a list of functions to add to the existing list.\n     * @return array\n     */\n    public function getFunctions()\n    {\n        return [];\n    }\n\n    /**\n     * getFilters returns a list of filters this extensions provides.\n     * @return array\n     */\n    public function getFilters()\n    {\n        $filters = [\n            new TwigSimpleFilter('media', [$this, 'mediaFilter'], ['is_safe' => ['html']]),\n        ];\n\n        return $filters;\n    }\n\n    /**\n     * getTokenParsers returns a list of token parsers this extensions provides.\n     * @return array\n     */\n    public function getTokenParsers()\n    {\n        return [];\n    }\n\n    /**\n     * mediaFilter converts supplied file to a URL relative to the media library.\n     * @param mixed $file\n     * @return string\n     */\n    public function mediaFilter($file)\n    {\n        return MediaLibrary::url($file);\n    }\n}\n"
  },
  {
    "path": "modules/media/widgets/MediaManager.php",
    "content": "<?php namespace Media\\Widgets;\n\nuse Url;\nuse Str;\nuse Lang;\nuse File;\nuse Html;\nuse Input;\nuse Config;\nuse System;\nuse Request;\nuse Response;\nuse Exception;\nuse BackendAuth;\nuse SystemException;\nuse ApplicationException;\nuse Backend\\Classes\\WidgetBase;\nuse Media\\Classes\\MediaLibrary;\nuse Media\\Classes\\MediaLibraryItem;\nuse October\\Rain\\Resize\\Resizer;\nuse October\\Rain\\Filesystem\\Definitions as FileDefinitions;\nuse Form as FormHelper;\nuse ForbiddenException;\n\n/**\n * MediaManager widget\n *\n * @package october\\media\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MediaManager extends WidgetBase\n{\n    const FOLDER_ROOT = '/';\n\n    const VIEW_MODE_GRID = 'grid';\n    const VIEW_MODE_LIST = 'list';\n    const VIEW_MODE_TILES = 'tiles';\n\n    const SELECTION_MODE_NORMAL = 'normal';\n    const SELECTION_MODE_FIXED_RATIO = 'fixed-ratio';\n    const SELECTION_MODE_FIXED_SIZE = 'fixed-size';\n\n    const FILTER_EVERYTHING = 'everything';\n\n    /**\n     * @var string currentFolder\n     */\n    protected $currentFolder;\n\n    /**\n     * @var string brokenImageHash string for the broken image graphic.\n     */\n    protected $brokenImageHash;\n\n    /**\n     * @var bool readOnly determines whether the widget is in readonly mode or not.\n     */\n    public $readOnly = false;\n\n    /**\n     * @var bool bottomToolbar determines whether the bottom toolbar is visible.\n     */\n    public $bottomToolbar = false;\n\n    /**\n     * @var bool cropAndInsertButton determines whether the Crop & Insert button is visible.\n     */\n    public $cropAndInsertButton = false;\n\n    /**\n     * @var string defaultAlias to identify this widget.\n     */\n    protected $defaultAlias = 'mediamanager';\n\n    /**\n     * __construct\n     */\n    public function __construct($controller, $config = [], $readOnly = false)\n    {\n        // @deprecated construct arguments should be controller, config only\n        // drop readOnly from constructor and adjust code below\n        if (is_string($config)) {\n            $config = ['alias' => $config];\n        }\n\n        $this->readOnly = $config['readOnly'] ?? $readOnly;\n\n        parent::__construct($controller, $config);\n\n        $this->checkUploadPostback();\n    }\n\n    /**\n     * loadAssets adds widget specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     * @return void\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/mediamanager.css');\n        $this->addJs('js/mediamanager.js', ['type' => 'module']);\n        $this->addJs('js/mediamanager.popup.js', ['type' => 'module']);\n    }\n\n    /**\n     * render the widget.\n     * @return string\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        return $this->makePartial('body');\n    }\n\n    //\n    // AJAX handlers\n    //\n\n    /**\n     * onSearch perform a search\n     * @return array\n     */\n    public function onSearch()\n    {\n        $this->setSearchTerm(Input::get('search'));\n\n        $this->prepareVars();\n\n        return [\n            '#'.$this->getId('item-list') => $this->makePartial('item-list'),\n            '#'.$this->getId('folder-path') => $this->makePartial('folder-path')\n        ];\n    }\n\n    /**\n     * onGoToFolder\n     * @return array\n     */\n    public function onGoToFolder()\n    {\n        $path = Input::get('path');\n\n        if (Input::get('clearCache')) {\n            MediaLibrary::instance()->resetCache();\n        }\n\n        if (Input::get('resetSearch')) {\n            $this->setSearchTerm(null);\n        }\n\n        $this->setCurrentFolder($path);\n        $this->prepareVars();\n\n        return [\n            '#'.$this->getId('item-list') => $this->makePartial('item-list'),\n            '#'.$this->getId('folder-path') => $this->makePartial('folder-path')\n        ];\n    }\n\n    /**\n     * onGenerateThumbnails\n     * @return array\n     */\n    public function onGenerateThumbnails()\n    {\n        $batch = Input::get('batch');\n        if (!is_array($batch)) {\n            return;\n        }\n\n        $result = [];\n        foreach ($batch as $thumbnailInfo) {\n            $result[] = $this->generateThumbnail($thumbnailInfo);\n        }\n\n        return [\n            'generatedThumbnails'=>$result\n        ];\n    }\n\n    /**\n     * onGetSidebarThumbnail\n     * @return array\n     */\n    public function onGetSidebarThumbnail()\n    {\n        $path = Input::get('path');\n        $lastModified = Input::get('lastModified');\n\n        $thumbnailParams = $this->getThumbnailParams();\n        $thumbnailParams['width'] = 300;\n        $thumbnailParams['height'] = 255;\n        $thumbnailParams['mode'] = 'auto';\n\n        $path = MediaLibrary::validatePath($path);\n\n        if (!is_numeric($lastModified)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        // If the thumbnail file exists, just return the thumbnail markup,\n        // otherwise generate a new thumbnail.\n        $thumbnailPath = $this->thumbnailExists($thumbnailParams, $path, $lastModified);\n        if ($thumbnailPath) {\n            return [\n                'markup' => $this->makePartial('thumbnail-image', [\n                    'isError' => $this->thumbnailIsError($thumbnailPath),\n                    'imageUrl' => $this->getThumbnailImageUrl($thumbnailPath)\n                ])\n            ];\n        }\n\n        $thumbnailInfo = $thumbnailParams;\n        $thumbnailInfo['path'] = $path;\n        $thumbnailInfo['lastModified'] = $lastModified;\n        $thumbnailInfo['id'] = 'sidebar-thumbnail';\n\n        return $this->generateThumbnail($thumbnailInfo, $thumbnailParams);\n    }\n\n    /**\n     * onChangeView preference\n     * @return array\n     */\n    public function onChangeView()\n    {\n        $viewMode = Input::get('view');\n        $path = Input::get('path');\n\n        $this->setViewMode($viewMode);\n        $this->setCurrentFolder($path);\n\n        $this->prepareVars();\n\n        return [\n            '#'.$this->getId('item-list') => $this->makePartial('item-list'),\n            '#'.$this->getId('folder-path') => $this->makePartial('folder-path'),\n            '#'.$this->getId('view-mode-buttons') => $this->makePartial('view-mode-buttons')\n        ];\n    }\n\n    /**\n     * onSetFilter preference\n     * @return array\n     */\n    public function onSetFilter()\n    {\n        $filter = Input::get('filter');\n        $path = Input::get('path');\n\n        $this->setFilter($filter);\n        $this->setCurrentFolder($path);\n\n        $this->prepareVars();\n\n        return [\n            '#'.$this->getId('item-list') => $this->makePartial('item-list'),\n            '#'.$this->getId('folder-path') => $this->makePartial('folder-path'),\n            '#'.$this->getId('filters') => $this->makePartial('filters')\n        ];\n    }\n\n    /**\n     * onSetSorting ets sorting preference\n     * @return array\n     */\n    public function onSetSorting()\n    {\n        $sortBy = Input::get('sortBy', $this->getSortBy());\n        $sortDirection = Input::get('sortDirection', $this->getSortDirection());\n        $path = Input::get('path');\n\n        $this->setSortBy($sortBy);\n        $this->setSortDirection($sortDirection);\n        $this->setCurrentFolder($path);\n\n        $this->prepareVars();\n\n        return [\n            '#'.$this->getId('item-list') => $this->makePartial('item-list'),\n            '#'.$this->getId('folder-path') => $this->makePartial('folder-path')\n        ];\n    }\n\n    /**\n     * onDeleteItem deletes a library item\n     * @return array\n     */\n    public function onDeleteItem()\n    {\n        if (!$this->checkHasPermission('mediaDelete')) {\n            throw new ForbiddenException;\n        }\n\n        $paths = Input::get('paths');\n\n        if (!is_array($paths)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $library = MediaLibrary::instance();\n\n        $filesToDelete = [];\n        foreach ($paths as $pathInfo) {\n            $path = array_get($pathInfo, 'path');\n            $type = array_get($pathInfo, 'type');\n\n            if (!$path || !$type) {\n                throw new ApplicationException('Invalid input data');\n            }\n\n            if ($type === MediaLibraryItem::TYPE_FILE) {\n                // Add to bulk collection\n                $filesToDelete[] = $path;\n            }\n            elseif ($type === MediaLibraryItem::TYPE_FOLDER) {\n                // Delete single folder\n                $library->deleteFolder($path);\n\n                /**\n                 * @event media.folder.delete\n                 * Called after a folder is deleted\n                 *\n                 * Example usage:\n                 *\n                 *     Event::listen('media.folder.delete', function ((\\Media\\Widgets\\MediaManager) $mediaWidget, (string) $path) {\n                 *         \\Log::info($path . \" was deleted\");\n                 *     });\n                 *\n                 * Or\n                 *\n                 *     $mediaWidget->bindEvent('folder.delete', function ((string) $path) {\n                 *         \\Log::info($path . \" was deleted\");\n                 *     });\n                 *\n                 */\n                $this->fireSystemEvent('media.folder.delete', [$path]);\n            }\n        }\n\n        if (count($filesToDelete) > 0) {\n            // Delete collection of files\n            $library->deleteFiles($filesToDelete);\n\n            // Extensibility\n            foreach ($filesToDelete as $path) {\n                /**\n                 * @event media.file.delete\n                 * Called after a file is deleted\n                 *\n                 * Example usage:\n                 *\n                 *     Event::listen('media.file.delete', function ((\\Media\\Widgets\\MediaManager) $mediaWidget, (string) $path) {\n                 *         \\Log::info($path . \" was deleted\");\n                 *     });\n                 *\n                 * Or\n                 *\n                 *     $mediaWidget->bindEvent('file.delete', function ((string) $path) {\n                 *         \\Log::info($path . \" was deleted\");\n                 *     });\n                 *\n                 */\n                $this->fireSystemEvent('media.file.delete', [$path]);\n            }\n        }\n\n        $library->resetCache();\n        $this->prepareVars();\n\n        return [\n            '#'.$this->getId('item-list') => $this->makePartial('item-list')\n        ];\n    }\n\n    /**\n     * onLoadRenamePopup shows the rename item popup\n     * @return array\n     */\n    public function onLoadRenamePopup()\n    {\n        if (!$this->checkHasPermission('mediaDelete')) {\n            throw new ForbiddenException;\n        }\n\n        $path = Input::get('path');\n        $path = MediaLibrary::validatePath($path);\n\n        $this->vars['originalPath'] = $path;\n        $this->vars['name'] = basename($path);\n        $this->vars['listId'] = Input::get('listId');\n        $this->vars['type'] = Input::get('type');\n\n        return $this->makePartial('rename-form');\n    }\n\n    /**\n     * onApplyName renames an item\n     * @return array\n     */\n    public function onApplyName()\n    {\n        if (!$this->checkHasPermission('mediaDelete')) {\n            throw new ForbiddenException;\n        }\n\n        $newName = trim(Input::get('name'));\n        if (!strlen($newName)) {\n            throw new ApplicationException(Lang::get('cms::lang.asset.name_cant_be_empty'));\n        }\n\n        if (!$this->validateFileName($newName)) {\n            throw new ApplicationException(Lang::get('cms::lang.asset.invalid_name'));\n        }\n\n        $originalPath = Input::get('originalPath');\n        $originalPath = MediaLibrary::validatePath($originalPath);\n        $newPath = dirname($originalPath).'/'.$newName;\n        $type = Input::get('type');\n\n        if ($type === MediaLibraryItem::TYPE_FILE) {\n            // Validate extension\n            if (!$this->validateFileType($newName)) {\n                throw new ApplicationException(Lang::get('backend::lang.media.type_blocked'));\n            }\n\n            if (Config::get('media.clean_vectors', true) && $this->isVector($newName)) {\n                throw new ApplicationException(Lang::get('backend::lang.media.type_blocked'));\n            }\n\n            // Move single file\n            MediaLibrary::instance()->moveFile($originalPath, $newPath);\n\n            /**\n             * @event media.file.rename\n             * Called after a file is renamed / moved\n             *\n             * Example usage:\n             *\n             *     Event::listen('media.file.rename', function ((\\Media\\Widgets\\MediaManager) $mediaWidget, (string) $originalPath, (string) $newPath) {\n             *         \\Log::info($originalPath . \" was moved to \" . $path);\n             *     });\n             *\n             * Or\n             *\n             *     $mediaWidget->bindEvent('file.rename', function ((string) $originalPath, (string) $newPath) {\n             *         \\Log::info($originalPath . \" was moved to \" . $path);\n             *     });\n             *\n             */\n            $this->fireSystemEvent('media.file.rename', [$originalPath, $newPath]);\n        }\n        else {\n            // Move single folder\n            MediaLibrary::instance()->moveFolder($originalPath, $newPath);\n\n            /**\n             * @event media.folder.rename\n             * Called after a folder is renamed / moved\n             *\n             * Example usage:\n             *\n             *     Event::listen('media.folder.rename', function ((\\Media\\Widgets\\MediaManager) $mediaWidget, (string) $originalPath, (string) $newPath) {\n             *         \\Log::info($originalPath . \" was moved to \" . $path);\n             *     });\n             *\n             * Or\n             *\n             *     $mediaWidget->bindEvent('folder.rename', function ((string) $originalPath, (string) $newPath) {\n             *         \\Log::info($originalPath . \" was moved to \" . $path);\n             *     });\n             *\n             */\n            $this->fireSystemEvent('media.folder.rename', [$originalPath, $newPath]);\n        }\n\n        MediaLibrary::instance()->resetCache();\n    }\n\n    /**\n     * onCreateFolder shows the create folder popup\n     * @return array\n     */\n    public function onCreateFolder()\n    {\n        if (!$this->checkHasPermission('mediaCreate')) {\n            throw new ForbiddenException;\n        }\n\n        $name = trim(Input::get('name'));\n        if (!strlen($name)) {\n            throw new ApplicationException(Lang::get('cms::lang.asset.name_cant_be_empty'));\n        }\n\n        if (!$this->validateFileName($name)) {\n            throw new ApplicationException(Lang::get('cms::lang.asset.invalid_name'));\n        }\n\n        $path = Input::get('path');\n        $path = MediaLibrary::validatePath($path);\n\n        $newFolderPath = $path.'/'.$name;\n\n        $library = MediaLibrary::instance();\n\n        if ($library->folderExists($newFolderPath)) {\n            throw new ApplicationException(Lang::get('backend::lang.media.folder_or_file_exist'));\n        }\n\n        /*\n         * Create the new folder\n         */\n        if (!$library->makeFolder($newFolderPath)) {\n            throw new ApplicationException(Lang::get('backend::lang.media.error_creating_folder'));\n        }\n\n        /**\n         * @event media.folder.create\n         * Called after a folder is created\n         *\n         * Example usage:\n         *\n         *     Event::listen('media.folder.create', function ((\\Media\\Widgets\\MediaManager) $mediaWidget, (string) $newFolderPath) {\n         *         \\Log::info($newFolderPath . \" was created\");\n         *     });\n         *\n         * Or\n         *\n         *     $mediaWidget->bindEvent('folder.create', function ((string) $newFolderPath) {\n         *         \\Log::info($newFolderPath . \" was created\");\n         *     });\n         *\n         */\n        $this->fireSystemEvent('media.folder.create', [$newFolderPath]);\n\n        $library->resetCache();\n\n        $this->prepareVars();\n\n        return [\n            '#'.$this->getId('item-list') => $this->makePartial('item-list')\n        ];\n    }\n\n    /**\n     * onLoadMovePopup shows the move item popup\n     * @return array\n     */\n    public function onLoadMovePopup()\n    {\n        if (!$this->checkHasPermission('mediaDelete')) {\n            throw new ForbiddenException;\n        }\n\n        $exclude = Input::get('exclude', []);\n        if (!is_array($exclude)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $folders = MediaLibrary::instance()->listAllDirectories($exclude);\n\n        $folderList = [];\n        foreach ($folders as $folder) {\n            $path = $folder;\n\n            if ($folder === '/') {\n                $name = Lang::get('backend::lang.media.library');\n            }\n            else {\n                $segments = explode('/', $folder);\n                $name = str_repeat('&nbsp;', (count($segments)-1)*4).basename($folder);\n            }\n\n            $folderList[$path] = $name;\n        }\n\n        $this->vars['folders'] = $folderList;\n        $this->vars['originalPath'] = Input::get('path');\n\n        return $this->makePartial('move-form');\n    }\n\n    /**\n     * onMoveItems AJAX handler\n     * @return array\n     */\n    public function onMoveItems()\n    {\n        if (!$this->checkHasPermission('mediaDelete')) {\n            throw new ForbiddenException;\n        }\n\n        $dest = trim(Input::get('dest'));\n        if (!strlen($dest)) {\n            throw new ApplicationException(Lang::get('backend::lang.media.please_select_move_dest'));\n        }\n\n        $dest = MediaLibrary::validatePath($dest);\n        if ($dest === Input::get('originalPath')) {\n            throw new ApplicationException(Lang::get('backend::lang.media.move_dest_src_match'));\n        }\n\n        $files = Input::get('files', []);\n        if (!is_array($files)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $folders = Input::get('folders', []);\n        if (!is_array($folders)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $library = MediaLibrary::instance();\n\n        foreach ($files as $path) {\n            /*\n             * Move a single file\n             */\n            $library->moveFile($path, $dest.'/'.basename($path));\n\n            /**\n             * @event media.file.move\n             * Called after a file is moved\n             *\n             * Example usage:\n             *\n             *     Event::listen('media.file.move', function ((\\Media\\Widgets\\MediaManager) $mediaWidget, (string) $path, (string) $dest) {\n             *         \\Log::info($path . \" was moved to \" . $dest);\n             *     });\n             *\n             * Or\n             *\n             *     $mediaWidget->bindEvent('file.rename', function ((string) $path, (string) $dest) {\n             *         \\Log::info($path . \" was moved to \" . $dest);\n             *     });\n             *\n             */\n            $this->fireSystemEvent('media.file.move', [$path, $dest]);\n        }\n\n        foreach ($folders as $path) {\n            /*\n             * Move a single folder\n             */\n            $library->moveFolder($path, $dest.'/'.basename($path));\n\n            /**\n             * @event media.folder.move\n             * Called after a folder is moved\n             *\n             * Example usage:\n             *\n             *     Event::listen('media.folder.move', function ((\\Media\\Widgets\\MediaManager) $mediaWidget, (string) $path, (string) $dest) {\n             *         \\Log::info($path . \" was moved to \" . $dest);\n             *     });\n             *\n             * Or\n             *\n             *     $mediaWidget->bindEvent('folder.rename', function ((string) $path, (string) $dest) {\n             *         \\Log::info($path . \" was moved to \" . $dest);\n             *     });\n             *\n             */\n            $this->fireSystemEvent('media.folder.move', [$path, $dest]);\n        }\n\n        $library->resetCache();\n\n        $this->prepareVars();\n\n        return [\n            '#'.$this->getId('item-list') => $this->makePartial('item-list')\n        ];\n    }\n\n    /**\n     * onSetSidebarVisible AJAX handler\n     * @return array\n     */\n    public function onSetSidebarVisible()\n    {\n        $visible = post('visible');\n\n        $this->setSidebarVisible($visible);\n    }\n\n    /**\n     * onLoadPopup starts the image cropping session AJAX handler\n     * @return array\n     */\n    public function onLoadPopup()\n    {\n        if ($currentFolder = post('media_folder')) {\n            $this->currentFolder = MediaLibrary::validatePath($currentFolder);\n        }\n\n        $this->bottomToolbar = post('bottom_toolbar', $this->bottomToolbar);\n\n        $this->cropAndInsertButton = post('crop_insert_button', $this->cropAndInsertButton);\n\n        return $this->makePartial('popup-body');\n    }\n\n    /**\n     * onLoadImageCropPopup for cropping AJAX handler\n     * @return array\n     */\n    public function onLoadImageCropPopup()\n    {\n        if (!$this->checkHasPermission('mediaCreate')) {\n            throw new ForbiddenException;\n        }\n\n        $path = post('path');\n        $path = MediaLibrary::validatePath($path);\n        $cropSessionKey = md5(FormHelper::getSessionKey());\n        $selectionParams = $this->getSelectionParams();\n\n        $urlAndSize = $this->getCropEditImageUrlAndSize($path, $cropSessionKey);\n        $width = $urlAndSize['dimensions'][0];\n        $height = $urlAndSize['dimensions'][1] ?: 1;\n\n        $this->vars['currentSelectionMode'] = $selectionParams['mode'];\n        $this->vars['currentSelectionWidth'] = $selectionParams['width'];\n        $this->vars['currentSelectionHeight'] = $selectionParams['height'];\n        $this->vars['cropSessionKey'] = $cropSessionKey;\n        $this->vars['imageUrl'] = $urlAndSize['url'];\n        $this->vars['dimensions'] = $urlAndSize['dimensions'];\n        $this->vars['originalRatio'] = round($width / $height, 5);\n        $this->vars['path'] = $path;\n\n        return $this->makePartial('image-crop-popup-body');\n    }\n\n    /**\n     * onEndCroppingSession AJAX handler\n     * @return array\n     */\n    public function onEndCroppingSession()\n    {\n        if (!$this->checkHasPermission('mediaCreate')) {\n            throw new ForbiddenException;\n        }\n\n        $cropSessionKey = Input::get('cropSessionKey');\n        if (!preg_match('/^[0-9a-z]+$/', $cropSessionKey)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $this->removeCropEditDir($cropSessionKey);\n    }\n\n    /**\n     * onCropImage AJAX handler\n     * @return array\n     */\n    public function onCropImage()\n    {\n        if (!$this->checkHasPermission('mediaCreate')) {\n            throw new ForbiddenException;\n        }\n\n        $imageSrcPath = trim(Input::get('img'));\n        $selectionData = Input::get('selection');\n        $cropSessionKey = Input::get('cropSessionKey');\n        $path = Input::get('path');\n        $path = MediaLibrary::validatePath($path);\n\n        if (!strlen($imageSrcPath)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        if (!preg_match('/^[0-9a-z]+$/', $cropSessionKey)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        if (!is_array($selectionData)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $result = $this->cropImage($imageSrcPath, $selectionData, $cropSessionKey, $path);\n\n        $selectionMode = Input::get('selectionMode');\n        $selectionWidth = Input::get('selectionWidth');\n        $selectionHeight = Input::get('selectionHeight');\n\n        $this->setSelectionParams($selectionMode, $selectionWidth, $selectionHeight);\n\n        return $result;\n    }\n\n    /**\n     * onResizeImage AJAX handler\n     * @return array\n     */\n    public function onResizeImage()\n    {\n        if (!$this->checkHasPermission('mediaCreate')) {\n            throw new ForbiddenException;\n        }\n\n        $cropSessionKey = Input::get('cropSessionKey');\n        if (!preg_match('/^[0-9a-z]+$/', $cropSessionKey)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $width = trim(Input::get('width'));\n        if (!strlen($width) || !ctype_digit($width)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $height = trim(Input::get('height'));\n        if (!strlen($height) || !ctype_digit($height)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $path = Input::get('path');\n        $path = MediaLibrary::validatePath($path);\n\n        $params = [\n            'width' => $width,\n            'height' => $height\n        ];\n\n        return $this->getCropEditImageUrlAndSize($path, $cropSessionKey, $params);\n    }\n\n    /**\n     * onCheckFilesExist checks which files already exist in the target folder\n     * @return array\n     */\n    public function onCheckFilesExist()\n    {\n        $fileNames = post('file_names', []);\n        $path = post('path', '/');\n        $path = MediaLibrary::validatePath($path);\n\n        $existingFiles = [];\n        foreach ($fileNames as $fileName) {\n            $filePath = rtrim($path, '/') . '/' . $fileName;\n            if (MediaLibrary::instance()->has($filePath)) {\n                $existingFiles[] = $fileName;\n            }\n        }\n\n        return ['existing' => $existingFiles];\n    }\n\n    //\n    // Methods for internal use\n    //\n\n    /**\n     * prepareVars is an internal method to prepare view variables.\n     */\n    protected function prepareVars()\n    {\n        clearstatcache();\n\n        $folder = $this->getCurrentFolder();\n        $viewMode = $this->getViewMode();\n        $filter = $this->getFilter();\n        $sortBy = $this->getSortBy();\n        $sortDirection = $this->getSortDirection();\n        $searchTerm = $this->getSearchTerm();\n        $searchMode = strlen($searchTerm) > 0;\n\n        if (!$searchMode) {\n            $this->vars['items'] = $this->listFolderItems($folder, $filter, ['by' => $sortBy, 'direction' => $sortDirection]);\n        }\n        else {\n            $this->vars['items'] = $this->findFiles($searchTerm, $filter, ['by' => $sortBy, 'direction' => $sortDirection]);\n        }\n\n        $this->vars['currentFolder'] = $folder;\n        $this->vars['isRootFolder'] = $folder === self::FOLDER_ROOT;\n        $this->vars['pathSegments'] = $this->splitPathToSegments($folder);\n        $this->vars['viewMode'] = $viewMode;\n        $this->vars['thumbnailParams'] = $this->getThumbnailParams($viewMode);\n        $this->vars['currentFilter'] = $filter;\n        $this->vars['sortBy'] = $sortBy;\n        $this->vars['sortDirection'] = $sortDirection;\n        $this->vars['searchMode'] = $searchMode;\n        $this->vars['searchTerm'] = $searchTerm;\n        $this->vars['sidebarVisible'] = $this->getSidebarVisible();\n    }\n\n    /**\n     * listFolderItems returns a list of folders and files in a Library folder.\n     * @param string $searchTerm\n     * @param string $filter\n     * @param string $sortBy\n     * @param array[Media\\Classes\\MediaLibraryItem]\n     */\n    protected function listFolderItems($folder, $filter, $sortBy)\n    {\n        $filter = $filter !== self::FILTER_EVERYTHING ? $filter : null;\n\n        return MediaLibrary::instance()->listFolderContents($folder, $sortBy, $filter);\n    }\n\n    /**\n     * findFiles from within the media library based on supplied criteria,\n     * returns an array of MediaLibraryItem objects.\n     * @param string $searchTerm\n     * @param string $filter\n     * @param string $sortBy\n     * @param array[Media\\Classes\\MediaLibraryItem]\n     */\n    protected function findFiles($searchTerm, $filter, $sortBy)\n    {\n        $filter = $filter !== self::FILTER_EVERYTHING ? $filter : null;\n\n        return MediaLibrary::instance()->findFiles($searchTerm, $sortBy, $filter);\n    }\n\n    /**\n     * setCurrentFolder sets the user current folder from the session state\n     * @param string $path\n     * @return void\n     */\n    protected function setCurrentFolder($path)\n    {\n        $path = MediaLibrary::validatePath($path);\n\n        $this->putSession('media_folder', $path);\n\n        $this->currentFolder = $path;\n    }\n\n    /**\n     * getCurrentFolder gets the user current folder from the session state\n     * @return string\n     */\n    protected function getCurrentFolder()\n    {\n        if ($this->currentFolder) {\n            return $this->currentFolder;\n        }\n\n        return $this->currentFolder = $this->getSession('media_folder', self::FOLDER_ROOT);\n    }\n\n    /**\n     * setFilter sets the user filter from the session state\n     * @param string $filter\n     * @return void\n     */\n    protected function setFilter($filter)\n    {\n        if (!in_array($filter, [\n            self::FILTER_EVERYTHING,\n            MediaLibraryItem::FILE_TYPE_IMAGE,\n            MediaLibraryItem::FILE_TYPE_AUDIO,\n            MediaLibraryItem::FILE_TYPE_DOCUMENT,\n            MediaLibraryItem::FILE_TYPE_VIDEO\n        ])) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $this->putSession('media_filter', $filter);\n    }\n\n    /**\n     * getFilter gets the user filter from the session state\n     * @return string\n     */\n    protected function getFilter()\n    {\n        return $this->getSession('media_filter', self::FILTER_EVERYTHING);\n    }\n\n    /**\n     * setSearchTerm sets the user search term from the session state\n     * @param string $searchTerm\n     * @return void\n     */\n    protected function setSearchTerm($searchTerm)\n    {\n        $this->putSession('media_search', trim($searchTerm));\n    }\n\n    /**\n     * getSearchTerm gets the user search term from the session state\n     * @return string\n     */\n    protected function getSearchTerm()\n    {\n        return $this->getSession('media_search', null);\n    }\n\n    /**\n     * setSortBy sets the user sort column from the session state\n     * @param string $sortBy\n     * @return void\n     */\n    protected function setSortBy($sortBy)\n    {\n        if (!in_array($sortBy, [\n            MediaLibrary::SORT_BY_TITLE,\n            MediaLibrary::SORT_BY_SIZE,\n            MediaLibrary::SORT_BY_MODIFIED\n        ])) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $this->putSession('media_sort_by', $sortBy);\n    }\n\n    /**\n     * getSortBy gets the user sort column from the session state\n     * @return string\n     */\n    protected function getSortBy()\n    {\n        return $this->getSession('media_sort_by', MediaLibrary::SORT_BY_TITLE);\n    }\n\n    /**\n     * setSortDirection sets the user sort direction from the session state\n     * @param string $sortDirection\n     * @return void\n     */\n    protected function setSortDirection($sortDirection)\n    {\n        if (!in_array($sortDirection, [\n            MediaLibrary::SORT_DIRECTION_ASC,\n            MediaLibrary::SORT_DIRECTION_DESC\n        ])) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $this->putSession('media_sort_direction', $sortDirection);\n    }\n\n    /**\n     * getSortDirection gets the user sort direction from the session state\n     * @return string\n     */\n    protected function getSortDirection()\n    {\n        return $this->getSession('media_sort_direction', MediaLibrary::SORT_DIRECTION_ASC);\n    }\n\n    /**\n     * getSelectionParams gets the user selection parameters from the session state\n     * @return array\n     */\n    protected function getSelectionParams()\n    {\n        $result = $this->getSession('media_crop_selection_params');\n\n        if ($result) {\n            if (!isset($result['mode'])) {\n                $result['mode'] = self::SELECTION_MODE_NORMAL;\n            }\n\n            if (!isset($result['width'])) {\n                $result['width'] = null;\n            }\n\n            if (!isset($result['height'])) {\n                $result['height'] = null;\n            }\n\n            return $result;\n        }\n\n        return [\n            'mode'   => self::SELECTION_MODE_NORMAL,\n            'width'  => null,\n            'height' => null\n        ];\n    }\n\n    /**\n     * setSelectionParams stores the user selection parameters in the session state\n     * @param string $selectionMode\n     * @param int $selectionWidth\n     * @param int $selectionHeight\n     * @return void\n     */\n    protected function setSelectionParams($selectionMode, $selectionWidth, $selectionHeight)\n    {\n        if (!in_array($selectionMode, [\n            self::SELECTION_MODE_NORMAL,\n            self::SELECTION_MODE_FIXED_RATIO,\n            self::SELECTION_MODE_FIXED_SIZE\n        ])) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        if (strlen($selectionWidth) && !ctype_digit($selectionWidth)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        if (strlen($selectionHeight) && !ctype_digit($selectionHeight)) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $this->putSession('media_crop_selection_params', [\n            'mode'   => $selectionMode,\n            'width'  => $selectionWidth,\n            'height' => $selectionHeight\n        ]);\n    }\n\n    /**\n     * setSidebarVisible state\n     * @param bool $visible\n     * @return void\n     */\n    protected function setSidebarVisible($visible)\n    {\n        $this->putSession('sidebar_visible', !!$visible);\n    }\n\n    /**\n     * getSidebarVisible checks if the sidebar is visible\n     * @return bool\n     */\n    protected function getSidebarVisible()\n    {\n        return $this->getSession('sidebar_visible', true);\n    }\n\n    /**\n     * itemTypeToIconClass returns an icon for the item type\n     * @param Media\\Classes\\MediaLibraryItem $item\n     * @param string $itemType\n     * @return string\n     */\n    protected function itemTypeToIconClass($item, $itemType)\n    {\n        if ($item->type === MediaLibraryItem::TYPE_FOLDER) {\n            return 'icon-folder';\n        }\n\n        switch ($itemType) {\n            case MediaLibraryItem::FILE_TYPE_IMAGE:\n                return \"icon-photo\";\n            case MediaLibraryItem::FILE_TYPE_VIDEO:\n                return \"icon-video-camera\";\n            case MediaLibraryItem::FILE_TYPE_AUDIO:\n                return \"icon-volume-up\";\n            default:\n                return \"icon-file\";\n        }\n    }\n\n    /**\n     * splitPathToSegments\n     * @param string $path\n     * @return array\n     */\n    protected function splitPathToSegments($path)\n    {\n        $path = MediaLibrary::validatePath($path, true);\n        $path = explode('/', ltrim($path, '/'));\n\n        $result = [];\n        while (count($path) > 0) {\n            $folder = array_pop($path);\n\n            $result[$folder] = implode('/', $path).'/'.$folder;\n            if (substr($result[$folder], 0, 1) !== '/') {\n                $result[$folder] = '/'.$result[$folder];\n            }\n        }\n\n        return array_reverse($result, true);\n    }\n\n    /**\n     * setViewMode stores a view mode in the session\n     * @param string $viewMode\n     * @return void\n     */\n    protected function setViewMode($viewMode)\n    {\n        if (!in_array($viewMode, [\n            self::VIEW_MODE_GRID,\n            self::VIEW_MODE_LIST,\n            self::VIEW_MODE_TILES\n        ])) {\n            throw new ApplicationException('Invalid input data');\n        }\n\n        $this->putSession('view_mode', $viewMode);\n    }\n\n    /**\n     * getViewMode returns the current view mode stored in the session\n     * @return string\n     */\n    protected function getViewMode()\n    {\n        return $this->getSession('view_mode', self::VIEW_MODE_GRID);\n    }\n\n    /**\n     * getThumbnailParams returns thumbnail parameters\n     * @param string $viewMode\n     * @return array\n     */\n    protected function getThumbnailParams($viewMode = null)\n    {\n        $result = [\n            'mode' => 'cover'\n        ];\n\n        if ($viewMode) {\n            if ($viewMode === self::VIEW_MODE_LIST) {\n                $result['width'] = 75;\n                $result['height'] = 75;\n            }\n            else {\n                $result['width'] = 165;\n                $result['height'] = 165;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * getThumbnailImagePath generatess a thumbnail image path\n     * @param array|null $thumbnailParams\n     * @param string $itemPath\n     * @param int $lastModified\n     * @return string\n     */\n    protected function getThumbnailImagePath($thumbnailParams, $itemPath, $lastModified)\n    {\n        $itemSignature = md5($itemPath).$lastModified;\n\n        $thumbFile = 'thumb_' .\n            $itemSignature . '_' .\n            $thumbnailParams['width'] . 'x' .\n            $thumbnailParams['height'] . '_' .\n            $thumbnailParams['mode'] . '.' .\n            $this->getThumbnailImageExtension($itemPath);\n\n        $partition = implode('/', array_slice(str_split($itemSignature, 3), 0, 3)) . '/';\n\n        return $this->getThumbnailDirectory().$partition.$thumbFile;\n    }\n\n    /**\n     * getThumbnailImageExtension\n     * @param string $itemPath\n     * @return string\n     */\n    protected function getThumbnailImageExtension($itemPath)\n    {\n        $extension = pathinfo($itemPath, PATHINFO_EXTENSION);\n\n        if (in_array($extension, ['png', 'gif', 'webp'])) {\n            return $extension;\n        }\n\n        return 'jpg';\n    }\n\n    /**\n     * getThumbnailImageUrl returns the URL to a thumbnail\n     * @param string $imagePath\n     * @return string\n     */\n    protected function getThumbnailImageUrl($imagePath)\n    {\n        $fullPath = temp_path(ltrim($imagePath, '/'));\n\n        return Config::get('system.relative_links') === true\n            ? Url::toRelative(File::localToPublic($fullPath))\n            : Url::asset(File::localToPublic($fullPath));\n    }\n\n    /**\n     * thumbnailExists checks if a thumbnail exists\n     * @param array|null $thumbnailParams\n     * @param string $itemPath\n     * @param int $lastModified\n     * @return bool\n     */\n    protected function thumbnailExists($thumbnailParams, $itemPath, $lastModified)\n    {\n        $thumbnailPath = $this->getThumbnailImagePath($thumbnailParams, $itemPath, $lastModified);\n\n        $fullPath = temp_path(ltrim($thumbnailPath, '/'));\n\n        if (File::exists($fullPath)) {\n            return $thumbnailPath;\n        }\n\n        return false;\n    }\n\n    /**\n     * thumbnailIsError checks if a thumbnail has caused an error\n     * @param string $thumbnailPath\n     * @return bool\n     */\n    protected function thumbnailIsError($thumbnailPath)\n    {\n        $fullPath = temp_path(ltrim($thumbnailPath, '/'));\n        return hash_file('crc32', $fullPath) === $this->getBrokenImageHash();\n    }\n\n    /**\n     * getLocalTempFilePath\n     * @param string $fileName\n     * @return string\n     */\n    protected function getLocalTempFilePath($fileName)\n    {\n        $fileName = md5($fileName.uniqid().microtime());\n        $path = temp_path('media');\n\n        if (!File::isDirectory($path)) {\n            File::makeDirectory($path, 0755, true, true);\n        }\n\n        return $path.'/'.$fileName;\n    }\n\n    /**\n     * getThumbnailDirectory\n     * @return string\n     */\n    protected function getThumbnailDirectory()\n    {\n        return MediaLibrary::validatePath(\n            Config::get('media.thumb_folder', 'public'),\n            true\n        ) . '/';\n    }\n\n    /**\n     * getPlaceholderId\n     * @param Media\\Classes\\MediaLibraryItem $item\n     * @return string\n     */\n    protected function getPlaceholderId($item)\n    {\n        return 'placeholder'.md5($item->path.'-'.$item->lastModified.uniqid(microtime()));\n    }\n\n    /**\n     * generateThumbnail\n     * @param array $thumbnailInfo\n     * @param array|null $thumbnailParams\n     * @return array\n     */\n    protected function generateThumbnail($thumbnailInfo, $thumbnailParams = null)\n    {\n        $tempFilePath = null;\n        $fullThumbnailPath = null;\n        $thumbnailPath = null;\n        $markup = null;\n\n        try {\n            $path = $thumbnailInfo['path'];\n\n            if ($this->isVector($path)) {\n                $markup = $this->makePartial('thumbnail-image', [\n                    'isError' => false,\n                    'imageUrl' => Url::to(Config::get('filesystems.disks.media.url') . $thumbnailInfo['path'])\n                ]);\n            }\n            else {\n                // Get and validate input data\n                $width = $thumbnailInfo['width'];\n                $height = $thumbnailInfo['height'];\n                $lastModified = $thumbnailInfo['lastModified'];\n\n                if (!is_numeric($width) || !is_numeric($height) || !is_numeric($lastModified)) {\n                    throw new ApplicationException('Invalid input data');\n                }\n\n                if (!$thumbnailParams) {\n                    $thumbnailParams = $this->getThumbnailParams();\n                    $thumbnailParams['width'] = $width;\n                    $thumbnailParams['height'] = $height;\n                }\n\n                $thumbnailPath = $this->getThumbnailImagePath($thumbnailParams, $path, $lastModified);\n                $fullThumbnailPath = temp_path(ltrim($thumbnailPath, '/'));\n\n                // Save the file locally\n                $library = MediaLibrary::instance();\n                $tempFilePath = $this->getLocalTempFilePath($path);\n\n                if (!@File::put($tempFilePath, $library->get($path))) {\n                    throw new SystemException('Error saving remote file to a temporary location');\n                }\n\n                // Resize the thumbnail and save to the thumbnails directory\n                $this->resizeImage($fullThumbnailPath, $thumbnailParams, $tempFilePath);\n\n                // Delete the temporary file\n                File::delete($tempFilePath);\n                $markup = $this->makePartial('thumbnail-image', [\n                    'isError' => false,\n                    'imageUrl' => $this->getThumbnailImageUrl($thumbnailPath)\n                ]);\n            }\n        }\n        catch (Exception $ex) {\n            if ($tempFilePath) {\n                File::delete($tempFilePath);\n            }\n\n            if ($fullThumbnailPath) {\n                $this->copyBrokenImage($fullThumbnailPath);\n            }\n\n            $markup = $this->makePartial('thumbnail-image', ['isError' => true]);\n\n            // @todo We need to log all types of exceptions here\n            traceLog($ex->getMessage());\n        }\n\n        if ($markup && ($id = $thumbnailInfo['id'])) {\n            return [\n                'id' => $id,\n                'markup' => $markup\n            ];\n        }\n    }\n\n    /**\n     * resizeImage\n     * @param string $fullThumbnailPath\n     * @param array $thumbnailParams\n     * @param string $tempFilePath\n     * @return void\n     */\n    protected function resizeImage($fullThumbnailPath, $thumbnailParams, $tempFilePath)\n    {\n        $thumbnailDir = dirname($fullThumbnailPath);\n        if (\n            !File::isDirectory($thumbnailDir)\n            && File::makeDirectory($thumbnailDir, 0755, true) === false\n        ) {\n            throw new SystemException('Error creating thumbnail directory');\n        }\n\n        $targetDimensions = $this->getTargetDimensions($thumbnailParams['width'], $thumbnailParams['height'], $tempFilePath);\n\n        $targetWidth = $targetDimensions[0];\n        $targetHeight = $targetDimensions[1];\n\n        Resizer::open($tempFilePath)\n            ->resize($targetWidth, $targetHeight, [\n                'mode' => $thumbnailParams['mode'],\n                'offset' => [0, 0]\n            ])\n            ->save($fullThumbnailPath)\n        ;\n\n        File::chmod($fullThumbnailPath);\n    }\n\n    /**\n     * getBrokenImagePath returns the path for the broken image graphic\n     * @return string\n     */\n    protected function getBrokenImagePath()\n    {\n        return __DIR__.'/mediamanager/assets/images/broken-thumbnail.gif';\n    }\n\n    /**\n     * getBrokenImageHash returns a CRC32 hash for a broken image\n     * @return string\n     */\n    protected function getBrokenImageHash()\n    {\n        if ($this->brokenImageHash) {\n            return $this->brokenImageHash;\n        }\n\n        $fullPath = $this->getBrokenImagePath();\n\n        return $this->brokenImageHash = hash_file('crc32', $fullPath);\n    }\n\n    /**\n     * copyBrokenImage to destination\n     * @param string $path\n     * @return void\n     */\n    protected function copyBrokenImage($path)\n    {\n        try {\n            $thumbnailDir = dirname($path);\n            if (!File::isDirectory($thumbnailDir) && File::makeDirectory($thumbnailDir, 0755, true) === false) {\n                return;\n            }\n\n            File::copy($this->getBrokenImagePath(), $path);\n        }\n        catch (Exception $ex) {\n            traceLog($ex->getMessage());\n        }\n    }\n\n    /**\n     * getTargetDimensions\n     * @param int $width\n     * @param int $height\n     * @param string $originalImagePath\n     * @return void\n     */\n    protected function getTargetDimensions($width, $height, $originalImagePath)\n    {\n        $originalDimensions = [$width, $height];\n\n        try {\n            $dimensions = getimagesize($originalImagePath);\n            if (!$dimensions) {\n                return $originalDimensions;\n            }\n\n            if ($dimensions[0] > $width || $dimensions[1] > $height) {\n                return $originalDimensions;\n            }\n\n            return $dimensions;\n        }\n        catch (Exception $ex) {\n            return $originalDimensions;\n        }\n    }\n\n    /**\n     * checkUploadPostback detects the upload post flag.\n     */\n    protected function checkUploadPostback()\n    {\n        if ($this->readOnly) {\n            return;\n        }\n\n        $fileName = null;\n        $quickMode = false;\n\n        if (\n            (!($uniqueId = Request::header('X-OCTOBER-FILEUPLOAD')) || $uniqueId !== $this->getId()) &&\n            (!$quickMode = post('X_OCTOBER_MEDIA_MANAGER_QUICK_UPLOAD'))\n        ) {\n            return;\n        }\n\n        // Set locale early since this runs in the widget constructor,\n        // before the controller applies the user's locale preference\n        \\Backend\\Models\\Preference::setAppLocale();\n\n        if (!$this->checkHasPermission('mediaCreate')) {\n            throw new ForbiddenException;\n        }\n\n        if (!Input::hasFile('file_data')) {\n            throw new ApplicationException('File missing from request');\n        }\n\n        try {\n            $uploadedFile = files('file_data');\n\n            /**\n             * @event media.file.beforeUpload\n             * Called before a file is uploaded\n             *\n             * Example usage:\n             *\n             *     Event::listen('media.file.beforeUpload', function ((\\Symfony\\Component\\HttpFoundation\\File\\UploadedFile) $uploadedFile) {\n             *         \\Log::info($path . \" was uploaded.\");\n             *     });\n             *\n             * Or\n             *\n             *     $mediaWidget->bindEvent('file.beforeUpload', function ((\\Symfony\\Component\\HttpFoundation\\File\\UploadedFile) $uploadedFile) {\n             *         \\Log::info($path . \" was uploaded\");\n             *     });\n             *\n             */\n            $this->fireSystemEvent('media.file.beforeUpload', [$uploadedFile]);\n\n            // Convert uppercase file extensions to lowercase\n            $fileName = $uploadedFile->getClientOriginalName();\n            $extension = strtolower($uploadedFile->getClientOriginalExtension());\n            $fileName = File::name($fileName).'.'.$extension;\n\n            // File name contains non-latin characters, attempt to slug the value\n            $autoRename = Config::get('media.auto_rename') === 'slug';\n            if ($autoRename || !$this->validateFileName($fileName)) {\n                $fileNameClean = $this->slugFileName(File::name($fileName));\n                $fileName = \"{$fileNameClean}.{$extension}\";\n            }\n\n            // Check for unsafe file extensions\n            if (!$this->validateFileType($fileName)) {\n                throw new ApplicationException(Lang::get('backend::lang.media.type_blocked'));\n            }\n\n            // See mime type handling in the asset manager\n            if (!$uploadedFile->isValid()) {\n                throw new ApplicationException($uploadedFile->getErrorMessage());\n            }\n\n            $path = $quickMode ? '/uploaded-files' : Input::get('path');\n            $path = MediaLibrary::validatePath($path);\n            $filePath = $path.'/'.$fileName;\n\n            // getRealPath() can be empty for some environments (IIS)\n            $realPath = empty(trim($uploadedFile->getRealPath()))\n                ? $uploadedFile->getPath() . DIRECTORY_SEPARATOR . $uploadedFile->getFileName()\n                : $uploadedFile->getRealPath();\n\n            // Check and clean vector files\n            // @todo use streaming like file objects\n            $contents = File::get($realPath);\n            if ($extension === 'svg' && Config::get('media.clean_vectors', true)) {\n                // @todo File::cleanVector() helper might be helpful here to clean temporary file in place\n                $contents = Html::cleanVector($contents);\n            }\n\n            // Handle duplicate files\n            if ($this->checkDuplicateFile($realPath, $filePath, $quickMode)) {\n                return;\n            }\n\n            // Write file to disk\n            MediaLibrary::instance()->put(\n                $filePath,\n                $contents\n            );\n\n            /**\n             * @event media.file.upload\n             * Called after a file is uploaded\n             *\n             * Example usage:\n             *\n             *     Event::listen('media.file.upload', function ((\\Media\\Widgets\\MediaManager) $mediaWidget, (string) &$path, (\\Symfony\\Component\\HttpFoundation\\File\\UploadedFile) $uploadedFile) {\n             *         \\Log::info($path . \" was uploaded.\");\n             *     });\n             *\n             * Or\n             *\n             *     $mediaWidget->bindEvent('file.upload', function ((string) &$path, (\\Symfony\\Component\\HttpFoundation\\File\\UploadedFile) $uploadedFile) {\n             *         \\Log::info($path . \" was uploaded\");\n             *     });\n             *\n             */\n            $this->fireSystemEvent('media.file.upload', [&$filePath, $uploadedFile]);\n\n            $response = Response::make([\n                'link' => MediaLibrary::url($filePath),\n                'result' => 'success'\n            ]);\n        }\n        catch (Exception $ex) {\n            $response = Response::make($ex->getMessage(), 400);\n        }\n\n        // Override the controller response\n        $this->controller->setResponse($response);\n    }\n\n    /**\n     * checkDuplicateFile checks if a file already exists and handles accordingly.\n     * Returns true if the upload should be halted (response already set).\n     */\n    protected function checkDuplicateFile(string $realPath, string $filePath, bool $quickMode): bool\n    {\n        if (!MediaLibrary::instance()->has($filePath)) {\n            return false;\n        }\n\n        // Specific mode for checking if the upload is happening via an editor\n        if ($quickMode) {\n            // Compare size: same name and size is close enough to consider identical\n            if (filesize($realPath) === MediaLibrary::instance()->size($filePath)) {\n                $this->controller->setResponse(Response::make([\n                    'link' => MediaLibrary::url($filePath),\n                    'result' => 'success'\n                ]));\n                return true;\n            }\n\n            // Different content with same filename: return error as HTTP 200 JSON so Froala's\n            // image.uploaded event can intercept and show a meaningful message to the user\n            $this->controller->setResponse(Response::make([\n                'error' => Lang::get('backend::lang.media.folder_or_file_exist')\n            ]));\n            return true;\n        }\n\n        $forceOverwrite = (bool) post('force_overwrite', false);\n        $canOverwrite = $this->checkHasPermission('mediaDelete');\n        if (!$canOverwrite || !$forceOverwrite) {\n            throw new ApplicationException(__('A media file already exists at this location, please upload using a different filename.'));\n        }\n\n        return false;\n    }\n\n    /**\n     * validateFileName validates a proposed media item file name.\n     * @param string $name\n     * @return bool\n     */\n    protected function validateFileName(string $name): bool\n    {\n        if (!preg_match('/^[\\w@.\\s_\\-]+$/iu', $name)) {\n            return false;\n        }\n\n        if (str_contains($name, '..')) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * validateFileType checks for blocked / unsafe file extensions\n     * @param string\n     * @return bool\n     */\n    protected function validateFileType($name)\n    {\n        $extension = strtolower(File::extension($name));\n\n        $allowedFileTypes = FileDefinitions::get('default_extensions');\n\n        if (!in_array($extension, $allowedFileTypes)) {\n            return false;\n        }\n\n        if (System::checkSafeMode() && in_array($extension, ['less', 'sass', 'scss'])) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * slugFileName creates a slug form the string. A modified version of Str::slug\n     * with the main difference that it accepts @-signs\n     * @param string $name\n     * @return string\n     */\n    protected function slugFileName(string $name): string\n    {\n        $title = Str::ascii($name);\n\n        // Convert all dashes/underscores into separator\n        $flip = $separator = '-';\n        $title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);\n\n        // Replace all underscores with the separator\n        $title = preg_replace('!['.preg_quote('_').']+!u', $separator, $title);\n\n        // Remove all characters that are not the separator, letters, numbers, whitespace or @.\n        $title = preg_replace('![^'.preg_quote($separator).'\\pL\\pN\\s@]+!u', '', mb_strtolower($title));\n\n        // Replace all separator characters and whitespace by a single separator\n        $title = preg_replace('!['.preg_quote($separator).'\\s]+!u', $separator, $title);\n\n        return trim($title, $separator);\n    }\n\n    //\n    // Cropping\n    //\n\n    /**\n     * getCropSessionDirPath returns the crop session working directory path\n     * @param string $cropSessionKey\n     * @return string\n     */\n    protected function getCropSessionDirPath($cropSessionKey)\n    {\n        return $this->getThumbnailDirectory().'edit-crop-'.$cropSessionKey;\n    }\n\n    /**\n     * getCropEditImageUrlAndSize prepares an image for cropping and returns payload containing a URL\n     * @param string $path\n     * @param string $cropSessionKey\n     * @param array $params\n     * @return array\n     */\n    protected function getCropEditImageUrlAndSize($path, $cropSessionKey, $params = null)\n    {\n        $sessionDirectoryPath = $this->getCropSessionDirPath($cropSessionKey);\n        $fullSessionDirectoryPath = temp_path($sessionDirectoryPath);\n        $sessionDirectoryCreated = false;\n\n        if (!File::isDirectory($fullSessionDirectoryPath)) {\n            File::makeDirectory($fullSessionDirectoryPath, 0755, true, true);\n            $sessionDirectoryCreated = true;\n        }\n\n        $tempFilePath = null;\n\n        try {\n            $extension = pathinfo($path, PATHINFO_EXTENSION);\n            $library = MediaLibrary::instance();\n            $originalThumbFileName = 'original.'.$extension;\n\n            // If the target dimensions are not provided, save the original image to the\n            // crop session directory and return its URL.\n            if (!$params) {\n                $tempFilePath = $fullSessionDirectoryPath.'/'.$originalThumbFileName;\n\n                if (!@File::put($tempFilePath, $library->get($path))) {\n                    throw new SystemException('Error saving remote file to a temporary location.');\n                }\n\n                $url = $this->getThumbnailImageUrl($sessionDirectoryPath.'/'.$originalThumbFileName);\n                $dimensions = getimagesize($tempFilePath);\n\n                return [\n                    'url' => $url,\n                    'dimensions' => $dimensions\n                ];\n            }\n\n            // If the target dimensions are provided, resize the original image and\n            // return its URL and dimensions.\n            $originalFilePath = $fullSessionDirectoryPath.'/'.$originalThumbFileName;\n            if (!File::isFile($originalFilePath)) {\n                throw new SystemException('The original image is not found in the cropping session directory.');\n            }\n\n            $resizedThumbFileName = 'resized-'.$params['width'].'-'.$params['height'].'.'.$extension;\n            $tempFilePath = $fullSessionDirectoryPath.'/'.$resizedThumbFileName;\n\n            Resizer::open($originalFilePath)\n                ->resize($params['width'], $params['height'], [\n                    'mode' => 'exact'\n                ])\n                ->save($tempFilePath)\n            ;\n\n            $url = $this->getThumbnailImageUrl($sessionDirectoryPath.'/'.$resizedThumbFileName);\n            $dimensions = getimagesize($tempFilePath);\n\n            return [\n                'url' => $url,\n                'dimensions' => $dimensions\n            ];\n        }\n        catch (Exception $ex) {\n            if ($sessionDirectoryCreated) {\n                @File::deleteDirectory($fullSessionDirectoryPath);\n            }\n\n            if ($tempFilePath) {\n                File::delete($tempFilePath);\n            }\n\n            throw $ex;\n        }\n    }\n\n    /**\n     * removeCropEditDir cleans up the directory used for cropping based on the session key\n     * @param string $cropSessionKey\n     * @return void\n     */\n    protected function removeCropEditDir($cropSessionKey)\n    {\n        $sessionDirectoryPath = $this->getCropSessionDirPath($cropSessionKey);\n        $fullSessionDirectoryPath = temp_path($sessionDirectoryPath);\n\n        if (File::isDirectory($fullSessionDirectoryPath)) {\n            @File::deleteDirectory($fullSessionDirectoryPath);\n        }\n    }\n\n    /**\n     * cropImage is business logic to crop a media library image\n     * @param string $imageSrcPath\n     * @param array $selectionData\n     * @param string $cropSessionKey\n     * @param string $path\n     * @return array\n     */\n    protected function cropImage($imageSrcPath, $selectionData, $cropSessionKey, $path)\n    {\n        $originalFileName = basename($path);\n\n        $path = rtrim(dirname($path), '/').'/';\n        $fileName = basename($imageSrcPath);\n\n        if (\n            strpos($fileName, '..') !== false ||\n            strpos($fileName, '/') !== false ||\n            strpos($fileName, '\\\\') !== false\n        ) {\n            throw new SystemException('Invalid image file name.');\n        }\n\n        $selectionParams = ['x', 'y', 'w', 'h'];\n\n        foreach ($selectionParams as $paramName) {\n            if (!array_key_exists($paramName, $selectionData)) {\n                throw new SystemException('Invalid selection data.');\n            }\n\n            if (!is_numeric($selectionData[$paramName])) {\n                throw new SystemException('Invalid selection data.');\n            }\n\n            $selectionData[$paramName] = (int) $selectionData[$paramName];\n        }\n\n        $sessionDirectoryPath = $this->getCropSessionDirPath($cropSessionKey);\n        $fullSessionDirectoryPath = temp_path($sessionDirectoryPath);\n\n        if (!File::isDirectory($fullSessionDirectoryPath)) {\n            throw new SystemException('The image editing session is not found.');\n        }\n\n        // Find the image on the disk and resize it\n        $imagePath = $fullSessionDirectoryPath.'/'.$fileName;\n        if (!File::isFile($imagePath)) {\n            throw new SystemException('The image is not found on the disk.');\n        }\n\n        $extension = pathinfo($originalFileName, PATHINFO_EXTENSION);\n\n        $targetImageName = basename($originalFileName, '.'.$extension).'-'\n            .$selectionData['x'].'-'\n            .$selectionData['y'].'-'\n            .$selectionData['w'].'-'\n            .$selectionData['h'].'-';\n\n        $targetImageName .= time();\n        $targetImageName .= '.'.$extension;\n\n        $targetTmpPath = $fullSessionDirectoryPath.'/'.$targetImageName;\n\n        // Crop the image, otherwise copy original to target destination.\n        if ($selectionData['w'] === 0 || $selectionData['h'] === 0) {\n            File::copy($imagePath, $targetTmpPath);\n        }\n        else {\n            Resizer::open($imagePath)\n                ->resize($selectionData['w'], $selectionData['h'], [\n                    'mode' => 'crop',\n                    'offset' => [\n                        $selectionData['x'],\n                        $selectionData['y']\n                    ]\n                ])\n                ->save($targetTmpPath)\n            ;\n        }\n\n        // Upload the cropped file to the Library\n        $targetFolder = $path.'cropped-images';\n        $targetPath = $targetFolder.'/'.$targetImageName;\n\n        $library = MediaLibrary::instance();\n        $library->putFile($targetPath, $targetTmpPath);\n\n        return [\n            'publicUrl' => $library->getPathUrl($targetPath),\n            'thumbUrl' => $library->getPathUrl($targetPath),\n            'documentType' => MediaLibraryItem::FILE_TYPE_IMAGE,\n            'itemType' => MediaLibraryItem::TYPE_FILE,\n            'path' => $targetPath,\n            'title' => $targetImageName,\n            'folder' => $targetFolder\n        ];\n    }\n\n    /**\n     * isVector detects if image is vector graphic (SVG)\n     * @param string $path\n     * @return bool\n     */\n    protected function isVector($path)\n    {\n        return strtolower(pathinfo($path, PATHINFO_EXTENSION)) === 'svg';\n    }\n\n    /**\n     * checkHasPermission checks if a custom permission has been specified\n     */\n    protected function checkHasPermission(string $name)\n    {\n        if ($this->readOnly) {\n            return false;\n        }\n\n        $foundKey = $name === 'mediaCreate' ? 'media.library.create' : 'media.library.delete';\n\n        return $foundKey ? BackendAuth::userHasAccess($foundKey) : true;\n    }\n}\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/assets/css/mediamanager.css",
    "content": "/*\n * Media Manager Styles\n */\n\n.control-media-manager {\n    --oc-media-hover-color: var(--oc-accent-text);\n    --oc-media-hover-bg: var(--oc-accent);\n    --oc-media-active-color: var(--bs-table-color);\n    --oc-media-active-bg: var(--oc-table-active-bg);\n    --oc-media-item-color: var(--oc-primary-color);\n    --oc-media-item-bg: var(--bs-table-striped-bg);\n    --oc-media-item-border: var(--bs-table-border-color);\n}\n\n.modal-content .control-media-manager {\n    border-radius: 8px;\n}\n\n.control-media-manager {\n    background-color: var(--oc-sidebar-bg);\n\n    &:focus {\n        outline: none;\n    }\n\n    audio, video {\n        width: 100%;\n    }\n\n    video {\n        background: #ecf0f1;\n        max-height: 225px;\n    }\n\n    .media-player-fallback {\n        font-size: 13px;\n        color: #95a5a6;\n        background: #ecf0f1;\n        line-height: 180%;\n\n        &.panel-embedded {\n            padding: 20px;\n            margin: -20px -20px 0 -20px;\n        }\n    }\n\n    .empty-library {\n        padding: 20px;\n        text-align: center;\n    }\n\n    p.thumbnail-error-message {\n        font-size: 12px;\n        margin: 10px;\n        line-height: 160%;\n        color: #bdc3c7;\n    }\n\n    .media-list {\n        padding: 0 0 0 20px;\n        margin: 0;\n        user-select: none;\n\n        li {\n            display: inline-block;\n            vertical-align: top;\n            margin: 0 20px 20px 0;\n            overflow: hidden;\n            cursor: pointer;\n            border-radius: 3px;\n\n            &:focus {\n                outline: none;\n            }\n\n            .icon-container {\n                display: table;\n\n                i {\n                    color: #95a5a6;\n                    display: inline-block;\n                }\n\n                div {\n                    display: table-cell;\n                    text-align: center;\n                    vertical-align: middle;\n                }\n            }\n\n            .icon-container.image {\n                > div.icon-wrapper {\n                    display: none;\n                }\n            }\n\n            h4 {\n                font-weight: 600;\n                font-size: 13px;\n                color: var(--oc-media-item-color);\n                white-space: nowrap;\n                overflow: hidden;\n                text-overflow: ellipsis;\n                line-height: 150%;\n                margin: 15px 0 5px 0;\n                padding-right: 0;\n                transition: padding 0.1s;\n                position: relative;\n\n                a {\n                    position: absolute;\n                    right: 0;\n                    top: 0;\n                    font-size: 15px;\n                    color: var(--oc-media-item-color);\n                    display: none;\n\n                    &:hover {\n                        color: var(--bs-link-color);\n                        text-decoration: none;\n                    }\n                }\n            }\n\n            p.size {\n                font-size: 12px;\n                color: #95a5a6;\n            }\n\n            .image-placeholder {\n                position: relative;\n\n                i {\n                    padding-top: 0;\n                    padding-left: 2px;\n                }\n\n                &[data-loading] {\n                    i {\n                        display: none;\n                    }\n                }\n\n                &[data-loading]:after {\n                    --loader-size: 28px;\n                    content: '';\n                    position: absolute;\n                    top: 50%;\n                    left: 50%;\n                    width: var(--loader-size);\n                    height: var(--loader-size);\n                    margin-top: calc(var(--loader-size) / -2);\n                    margin-left: calc(var(--loader-size) / -2);\n                    border: 3px solid var(--oc-primary-border);\n                    border-top-color: var(--oc-accent);\n                    border-radius: 50%;\n                    animation: spin 0.8s linear infinite;\n                }\n            }\n\n            i.icon-chain-broken {\n                padding: 0;\n                color: #bdc3c7;\n            }\n\n            &[data-item-type=folder] i {\n                color: var(--oc-media-hover-bg);\n            }\n        }\n\n        &.list {\n            li {\n                height: 75px;\n                width: 260px;\n                border: 1px solid var(--oc-media-item-border);\n                background: var(--oc-media-item-bg);\n                box-sizing: content-box;\n            }\n\n            li .icon-container {\n                border-right: 1px solid var(--oc-media-item-bg);\n                width: 75px;\n                height: 75px;\n                float: left;\n\n                img {\n                    max-height: 75px;\n                }\n\n                i {\n                    font-size: 35px;\n                }\n\n                &.image {\n                    border-right: 1px solid var(--oc-media-item-border) !important;\n                }\n\n                p.thumbnail-error-message {\n                    display: none;\n                }\n            }\n\n            .icon-wrapper {\n                width: 75px;\n            }\n\n            li .info {\n                margin-left: 90px;\n            }\n\n            li .image-placeholder {\n                width: 75px;\n                height: 75px;\n            }\n\n            li[data-root] h4 {\n                margin-top: 27px;\n            }\n\n            li.selected {\n                background: var(--oc-media-hover-bg) !important;\n\n                i, p.size {\n                    color: #ecf0f1;\n                }\n\n                h4 {\n                    color: white;\n                }\n\n                .icon-container {\n                    border-right-color: var(--oc-media-hover-bg) !important;\n                }\n            }\n\n            h4 {\n                padding-right: 15px;\n\n                a {\n                    right: 15px;\n                }\n            }\n        }\n\n        &.tiles {\n            li {\n                width: 167px;\n                margin-bottom: 25px;\n            }\n\n            .icon-wrapper {\n                width: 167px;\n            }\n\n            li .image-placeholder {\n                width: 165px;\n                height: 165px;\n\n                &[data-loading]:after {\n                    --loader-size: 55px;\n                }\n            }\n\n            li .icon-container {\n                width: 165px;\n                height: 165px;\n                border-radius: 3px;\n                border: 1px solid var(--oc-media-item-border);\n                overflow: hidden;\n                background: var(--oc-media-item-bg);\n                box-sizing: content-box;\n\n                img {\n                    max-height: 165px;\n                }\n\n                i {\n                    font-size: 55px;\n                }\n\n                p {\n                    font-family: var(--bs-body-font-family);\n                }\n            }\n\n            li.selected {\n                .icon-container {\n                    background: var(--oc-media-hover-bg) !important;\n                    border-color: var(--oc-media-hover-color);\n\n                    i, p {\n                        color: #ecf0f1;\n                    }\n                }\n\n                h4 {\n                    color: var(--oc-media-hover-color);\n                }\n            }\n\n            i.icon-chain-broken {\n                margin-top: 47px;\n            }\n\n            p.size {\n                margin-bottom: 0;\n            }\n        }\n    }\n\n    [data-media-sidebar-labels] {\n        word-wrap: break-word;\n    }\n\n    .sidebar-group {\n        margin-bottom: 20px;\n    }\n\n    .sidebar-image-placeholder-container {\n        display: table;\n        width: 100%;\n    }\n\n    .sidebar-image-placeholder {\n        display: table-cell;\n        height: 225px;\n        position: relative;\n        vertical-align: middle;\n        text-align: center;\n        border-bottom: 1px solid var(--oc-primary-border);\n        box-sizing: content-box;\n\n        &[data-loading] {\n            background: var(--oc-primary-border);\n\n            &:after {\n                --loader-size: 62px;\n                content: '';\n                position: absolute;\n                top: 50%;\n                left: 50%;\n                width: var(--loader-size);\n                height: var(--loader-size);\n                margin-top: calc(var(--loader-size) / -2);\n                margin-left: calc(var(--loader-size) / -2);\n                border: 4px solid var(--oc-primary-border);\n                border-top-color: var(--oc-accent);\n                border-radius: 50%;\n                animation: spin 0.8s linear infinite;\n            }\n        }\n\n        i.icon-chain-broken, i.icon-crop, i.icon-asterisk, i.icon-level-up {\n            color: #bdc3c7;\n            font-size: 55px;\n        }\n\n        &.no-border {\n            border-bottom: none;\n        }\n\n        p {\n            font-size: 12px;\n            margin: 10px;\n            line-height: 160%;\n            color: #bdc3c7;\n            margin-top: 25px;\n        }\n\n        img {\n            max-width: 100%;\n            max-height: 225px;\n        }\n    }\n\n    .list-container {\n        position: relative;\n        z-index: 100;\n\n        .no-data {\n            font-size: 13px;\n        }\n\n        p.no-data {\n            padding: 0 20px 20px 20px;\n        }\n\n        li.no-data {\n            padding-top: 20px;\n            display: block !important;\n            width: 100% !important;\n            border: none !important;\n            background: transparent !important;\n            cursor: default !important;\n        }\n\n        table.table.data {\n            > :not(:first-child) {\n                border-top: none;\n            }\n\n            tbody tr:not(.no-data):active td {\n                background: var(--oc-media-active-bg) !important;\n                color: var(--oc-media-active-color);\n            }\n        }\n    }\n\n    [data-media-item-list] {\n        position: relative;\n        display: table-cell;\n    }\n\n    .control-scrollpad {\n        position: absolute;\n        left: 0;\n        top: 0;\n        /* Prevents erratic rendering issues when the height is\n           sometimes calculated as 0 then repeatedly redrawn */\n        min-height: 300px;\n    }\n\n    .scroll-wrapper {\n        position: relative;\n    }\n\n    table.table {\n        table-layout: fixed;\n        margin-bottom: 0;\n        white-space: nowrap;\n\n        div.no-wrap-text {\n            overflow: hidden;\n            text-overflow: ellipsis;\n        }\n\n        div.item-title {\n            position: relative;\n            padding-right: 0;\n            transition: padding 0.1s;\n\n            a {\n                text-decoration: none;\n                position: absolute;\n                right: 0;\n                top: 0;\n                display: none;\n            }\n        }\n\n        tr:hover div.item-title {\n            padding-right: 25px;\n\n            a {\n                display: block;\n            }\n        }\n\n        tr[data-item-type=folder] i.icon-folder {\n            color: var(--oc-media-hover-bg);\n        }\n\n        tr:focus {\n            outline: none;\n        }\n    }\n\n    div[data-media-selection-marker] {\n        position: absolute;\n        z-index: 250;\n        border: 1px dashed #95a5a6;\n        background: rgba(0,0,0,0.1);\n    }\n\n    .upload-progress {\n        padding: 0 20px;\n\n        h5 {\n            margin: 0 0 10px 0;\n            font-size: 13px;\n            color: var(--oc-media-item-color);\n            font-weight: 600;\n\n            span {\n                display: inline-block;\n                margin-left: 10px;\n                color: #95a5a6;\n                font-size: 15px;\n            }\n        }\n\n        .progress-controls {\n            padding-right: 30px;\n            position: relative;\n\n            .progress {\n                --bs-progress-bg: var(--oc-highlight-color);\n            }\n\n            .controls {\n                position: absolute;\n                right: 0;\n                bottom: 0;\n\n                a {\n                    display: block;\n                    position: relative;\n                    top: 7px;\n                    right: 3px;\n                    color: #95a5a6;\n                    font-size: 16px;\n                    cursor: pointer !important;\n\n                    &:hover {\n                        text-decoration: none;\n                        color: var(--bs-link-color);\n                    }\n                }\n            }\n        }\n    }\n\n    .dz-preview {\n        display: none;\n    }\n\n    button[data-command=\"toggle-sidebar\"] {\n        &.sidebar-hidden {\n            transform: rotate(180deg) translate(0, 0);\n        }\n    }\n}\n\n[data-media-crop-tool] {\n    .image_area {\n        position: absolute;\n        width: 100%;\n        height: 100%;\n        overflow: auto;\n\n        .jcrop-holder {\n            background-color: transparent !important;\n        }\n    }\n\n    img {\n        cursor: crosshair;\n        display: block;\n    }\n\n    &.has-rulers {\n        .ruler-container {\n            .layout-relative {\n                overflow: hidden;\n            }\n\n            &.horizontal {\n                .layout-cell {\n                    height: 20px;\n                }\n\n                .layout-relative {\n                    width: 100%;\n                }\n            }\n\n            &.vertical {\n                width: 20px;\n\n                .layout-relative {\n                    height: 100%;\n                }\n            }\n        }\n\n        .ruler {\n            position: absolute;\n            height: 20px;\n            margin-left: -3px;\n            background: #555;\n\n            ul {\n                margin: 0;\n                padding: 0;\n                white-space: nowrap;\n                font-size: 0;\n            }\n\n            li {\n                margin: 0px -10px 0px -14px;\n                padding: 0 0 0 40px;\n                list-style: none;\n                display: inline-block;\n                width: 24px;\n                box-sizing: content-box;\n                text-align: left;\n                position: relative;\n                font-size: 10px;\n                line-height: 20px;\n                color: #ecf0f1;\n                font-family: Arial, sans-serif;\n\n                &:before, &:after {\n                    content: ' ';\n                    position: absolute;\n                    border-left: 1px solid #8e8e8e;\n                }\n\n                &:before {\n                    height: 20px;\n                    top: 0;\n                    left: -3px;\n                }\n\n                &:after {\n                    height: 3px;\n                    bottom: 0;\n                    left: 20px;\n                }\n\n                &:first-child:after {\n                    display: none;\n                }\n            }\n        }\n\n        .ruler[data-media-v-ruler] {\n            transform: rotateZ(90deg);\n            transform-origin: left top;\n            left: 23px;\n            top: -23px;\n\n            li:after {\n                top: 0;\n                left: auto;\n            }\n        }\n    }\n}\n\nbody:not(.no-select) {\n    .control-media-manager .media-list {\n        &.tiles {\n            li:hover {\n                .icon-container {\n                    background: var(--oc-media-hover-bg) !important;\n                    border-color: var(--oc-media-hover-color);\n\n                    i, p {\n                        color: #ecf0f1;\n                    }\n                }\n\n                h4 {\n                    color: var(--oc-media-hover-color);\n                    padding-right: 20px !important;\n                }\n            }\n        }\n\n        &.list {\n            li:hover {\n                background: var(--oc-media-hover-bg) !important;\n\n                i, p.size {\n                    color: #ecf0f1;\n                }\n\n                h4 {\n                    color: white;\n                    padding-right: 35px !important;\n                }\n\n                .icon-container {\n                    border-right-color: var(--oc-media-hover-bg) !important;\n                }\n            }\n        }\n\n        li {\n            &:hover h4 a {\n                display: block;\n            }\n        }\n    }\n}\n\n@media (max-width: 1280px) {\n    .control-media-manager {\n        .media-list {\n            &.list {\n                li {\n                    width: 230px;\n                }\n            }\n        }\n    }\n}\n\n@media (max-width: 1024px) {\n    .control-media-manager {\n        .media-list {\n            &.list {\n                li {\n                    display: block;\n                    width: auto;\n                }\n            }\n        }\n    }\n}\n\n@media (max-width: 768px) {\n    .control-media-manager {\n        [data-media-preview-sidebar],\n        [data-command=\"toggle-sidebar\"] {\n            display: none !important;\n        }\n\n        .media-list {\n            &.list {\n                padding: 0;\n\n                li {\n                    border-radius: 0;\n                    margin: 0;\n                    border-right: none;\n                    border-left: none;\n                    border-bottom: none;\n                }\n            }\n        }\n    }\n}\n\n@media (max-width: 480px) {\n    .control-media-manager {\n        [data-media-left-sidebar] {\n            display: none !important;\n        }\n    }\n}\n\n@keyframes spin {\n    to {\n        transform: rotate(360deg);\n    }\n}\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/assets/js/mediamanager.imagecroppopup.js",
    "content": "/*\n * Media manager image editor popup\n */\nexport default class MediaManagerImageCropPopup\n{\n    static DEFAULTS = {\n        alias: undefined,\n        onDone: undefined\n    };\n\n    constructor(path, options) {\n        this.$popupRootElement = null;\n        this.$popupElement = null;\n        this.selectionSizeLabel = null;\n        this.imageArea = null;\n        this.hRulerHolder = null;\n        this.vRulerHolder = null;\n\n        this.rulersVisible = false;\n        this.prevScrollTop = 0;\n        this.prevScrollLeft = 0;\n\n        this.jCrop = null;\n\n        this.options = { ...MediaManagerImageCropPopup.DEFAULTS, ...options };\n        this.path = path;\n\n        this.init();\n        this.show();\n    }\n\n    dispose() {\n        this.unregisterHandlers();\n        this.removeAttachedControls();\n\n        this.$popupRootElement.remove();\n        this.$popupRootElement = null;\n        this.$popupElement = null;\n        this.selectionSizeLabel = null;\n        this.imageArea = null;\n        this.hRulerHolder = null;\n        this.vRulerHolder = null;\n    }\n\n    init() {\n        if (this.options.alias === undefined) {\n            throw new Error('Media Manager image crop popup option \"alias\" is not set.');\n        }\n\n        this.$popupRootElement = $('<div/>');\n        this.registerHandlers();\n    }\n\n    show() {\n        const data = {\n            path: this.path\n        };\n\n        this.$popupRootElement.popup({\n            extraData: data,\n            size: 'adaptive',\n            adaptiveHeight: true,\n            handler: this.options.alias + '::onLoadImageCropPopup'\n        });\n    }\n\n    registerHandlers() {\n        this.$popupRootElement.one('hide.oc.popup', this.onPopupHidden);\n        this.$popupRootElement.one('shown.oc.popup', this.onPopupShown);\n    }\n\n    unregisterHandlers() {\n        this.$popupElement.off('change', '[data-media-selection-mode]', this.onSelectionModeChanged);\n        this.$popupElement.off('click', '[data-command]', this.onCommandClick);\n        this.$popupElement.off('shown.oc.popup', 'button[data-command=resize]', this.onResizePopupShown);\n        this.$popupElement.off('hidden.oc.popup', 'button[data-command=resize]', this.onResizePopupHidden);\n\n        if (this.rulersVisible) {\n            this.imageArea.removeEventListener('scroll', this.onImageScroll);\n        }\n\n        this.getWidthInput().off('change', this.onSizeInputChange);\n        this.getHeightInput().off('change', this.onSizeInputChange);\n    }\n\n    removeAttachedControls() {\n        if (this.$popupElement) {\n            // Note - the controls are destroyed and removed from DOM. If they're just destroyed,\n            // the JS plugins could be re-attached to them on window.onresize. -ab\n            this.$popupElement.find('[data-media-selection-mode]').select2('destroy').remove();\n            this.$popupElement.find('[data-control=toolbar]').toolbar('dispose').remove();\n\n            this.jCrop.destroy();\n        }\n\n        this.jCrop = null;\n    }\n\n    hide() {\n        if (this.$popupElement) {\n            this.$popupElement.trigger('close.oc.popup');\n        }\n    }\n\n    getSelectionMode() {\n        return this.$popupElement.find('[data-media-selection-mode]').val();\n    }\n\n    initRulers() {\n        const $cropToolRoot = this.$popupElement.find('[data-media-crop-tool]');\n        let width = $cropToolRoot.data('image-width');\n        let height = $cropToolRoot.data('image-height');\n\n        if (!width || !height) {\n            return;\n        }\n\n        if ($cropToolRoot.width() > width) {\n            width = $(window).width();\n        }\n\n        if ($cropToolRoot.height() > height) {\n            height = $(window).height();\n        }\n\n        $cropToolRoot.find('.ruler-container').removeClass('oc-hide');\n        $cropToolRoot.addClass('has-rulers');\n\n        const $hRuler = $cropToolRoot.find('[data-media-h-ruler]');\n        const $vRuler = $cropToolRoot.find('[data-media-v-ruler]');\n        const hTicks = width / 40 + 1;\n        const vTicks = height / 40 + 1;\n\n        this.createRulerTicks($hRuler, hTicks);\n        this.createRulerTicks($vRuler, vTicks);\n\n        this.rulersVisible = true;\n\n        this.imageArea.addEventListener('scroll', this.onImageScroll);\n\n        this.hRulerHolder = $cropToolRoot.find('.ruler-container.horizontal .layout-relative').get(0);\n        this.vRulerHolder = $cropToolRoot.find('.ruler-container.vertical .layout-relative').get(0);\n    }\n\n    createRulerTicks($rulerElement, count) {\n        const list = document.createElement('ul');\n\n        for (let i = 0; i <= count; i++) {\n            const li = document.createElement('li');\n            li.textContent = i * 40;\n            list.appendChild(li);\n        }\n\n        $rulerElement.append(list);\n    }\n\n    initJCrop = () => {\n        this.jCrop = $.Jcrop(this.getImageElement().get(0), {\n            shade: true,\n            onChange: this.onSelectionChanged\n        });\n    }\n\n    fixDimensionValue(value) {\n        let result = value.replace(/[^0-9]+/, '');\n\n        if (!result.length) {\n            result = 200;\n        }\n\n        if (result == '0') {\n            result = 1;\n        }\n\n        return result;\n    }\n\n    getWidthInput() {\n        return this.$popupElement.find('[data-media-crop-width-input]');\n    }\n\n    getHeightInput() {\n        return this.$popupElement.find('[data-media-crop-height-input]');\n    }\n\n    getImageElement() {\n        return $(this.imageArea).find('img');\n    }\n\n    applySelectionMode() {\n        if (!this.jCrop) {\n            return;\n        }\n\n        const $widthInput = this.getWidthInput();\n        const $heightInput = this.getHeightInput();\n        const width = this.fixDimensionValue($widthInput.val());\n        const height = this.fixDimensionValue($heightInput.val());\n        const mode = this.getSelectionMode();\n\n        switch (mode) {\n            case 'fixed-ratio':\n                this.jCrop.setOptions({\n                    aspectRatio: width / height,\n                    minSize: [0, 0],\n                    maxSize: [0, 0],\n                    allowResize: true\n                });\n                break;\n            case 'fixed-size':\n                this.jCrop.setOptions({\n                    aspectRatio: 0,\n                    minSize: [width, height],\n                    maxSize: [width, height],\n                    allowResize: false\n                });\n                break;\n            case 'normal':\n                this.jCrop.setOptions({\n                    aspectRatio: 0,\n                    minSize: [0, 0],\n                    maxSize: [0, 0],\n                    allowResize: true\n                });\n                break;\n        }\n    }\n\n    cropAndInsert() {\n        const data = {\n            img: this.getImageElement().attr('src'),\n            selection: this.jCrop.tellSelect()\n        };\n\n        $.oc.stripeLoadIndicator.show();\n\n        this.$popupElement\n            .find('form')\n            .request(this.options.alias + '::onCropImage', {\n                data: data\n            })\n            .always(() => {\n                $.oc.stripeLoadIndicator.hide();\n            })\n            .done(this.onImageCropped);\n    }\n\n    onImageCropped = (response) => {\n        this.hide();\n\n        if (this.options.onDone !== undefined) {\n            this.options.onDone(response);\n        }\n    }\n\n    showResizePopup() {\n        this.$popupElement.find('button[data-command=resize]').popup({\n            content: this.$popupElement.find('[data-media-resize-template]').html(),\n            zIndex: 1220\n        });\n    }\n\n    onResizePopupShown = (ev, button, popup) => {\n        const $popup = $(popup);\n        const $widthControl = $popup.find('input[name=width]');\n        const $heightControl = $popup.find('input[name=height]');\n        const imageWidth = this.fixDimensionValue(this.$popupElement.find('input[data-media-dimension-width]').val());\n        const imageHeight = this.fixDimensionValue(this.$popupElement.find('input[data-media-dimension-height]').val());\n\n        $widthControl.val(imageWidth);\n        $heightControl.val(imageHeight);\n\n        $widthControl.focus();\n\n        $popup.on('submit.media', 'form', this.onResizeSubmit);\n        $widthControl.on('keyup.media', this.onResizeDimensionKeyUp);\n        $heightControl.on('keyup.media', this.onResizeDimensionKeyUp);\n\n        $widthControl.on('change.media', this.onResizeDimensionChanged);\n        $heightControl.on('change.media', this.onResizeDimensionChanged);\n    }\n\n    onResizePopupHidden = (ev, button, popup) => {\n        const $popup = $(popup);\n        const $widthControl = $popup.find('input[name=width]');\n        const $heightControl = $popup.find('input[name=height]');\n\n        $popup.off('.media', 'form');\n        $widthControl.off('.media');\n        $heightControl.off('.media');\n    }\n\n    onResizeDimensionKeyUp = (ev) => {\n        const $target = $(ev.target);\n        const targetValue = this.fixDimensionValue($target.val());\n        const otherDimensionName = $target.attr('name') == 'width' ? 'height' : 'width';\n        const $otherInput = $target.closest('form').find('input[name=' + otherDimensionName + ']');\n        const ratio = this.$popupElement.find('[data-media-original-ratio]').val();\n        const value = otherDimensionName == 'height' ? targetValue / ratio : targetValue * ratio;\n\n        $otherInput.val(Math.round(value));\n    }\n\n    onResizeDimensionChanged = (ev) => {\n        const $target = $(ev.target);\n        $target.val(this.fixDimensionValue($target.val()));\n    }\n\n    onResizeSubmit = (ev) => {\n        const data = {\n            cropSessionKey: this.$popupElement.find('input[name=cropSessionKey]').val(),\n            path: this.$popupElement.find('input[name=path]').val()\n        };\n\n        $.oc.stripeLoadIndicator.show();\n        $(ev.target).request(this.options.alias + '::onResizeImage', {\n            data: data\n        }).always(() => {\n            $.oc.stripeLoadIndicator.hide();\n        }).done(this.imageResized);\n\n        ev.preventDefault();\n        return false;\n    }\n\n    imageResized = (response) => {\n        this.$popupElement.find('button[data-command=resize]').popup('hide');\n        this.updateImage(response.url, response.dimensions[0], response.dimensions[1]);\n    }\n\n    updateImage(url, width, height) {\n        this.jCrop.destroy();\n\n        this.$popupElement.find('span[data-label=width]').text(width);\n        this.$popupElement.find('span[data-label=height]').text(height);\n\n        this.$popupElement.find('input[data-media-dimension-width]').val(width);\n        this.$popupElement.find('input[data-media-dimension-height]').val(height);\n\n        const $imageArea = $(this.imageArea);\n        $imageArea.find('img').remove();\n\n        const $img = $('<img>').attr('src', url);\n        $img.one('load', this.initJCrop);\n\n        $imageArea.append($img);\n\n        this.imageArea.scrollTop = 0;\n        this.imageArea.scrollLeft = 0;\n        this.onImageScroll();\n    }\n\n    undoResizing() {\n        this.updateImage(\n            this.$popupElement.find('input[data-media-original-url]').val(),\n            this.$popupElement.find('input[data-media-original-width]').val(),\n            this.$popupElement.find('input[data-media-original-height]').val()\n        );\n    }\n\n    updateSelectionSizeLabel(width, height) {\n        if (width == 0 && height == 0) {\n            this.selectionSizeLabel.setAttribute('class', 'oc-hide');\n            return;\n        }\n\n        this.selectionSizeLabel.setAttribute('class', '');\n        this.selectionSizeLabel.querySelector('[data-label=selection-width]').textContent = parseInt(width);\n        this.selectionSizeLabel.querySelector('[data-label=selection-height]').textContent = parseInt(height);\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    onPopupHidden = (event, element, popup) => {\n        this.$popupElement.find('form').request(this.options.alias + '::onEndCroppingSession');\n\n        // Release clickedElement reference inside redactor.js\n        // If we don't do it, the image editor popup DOM elements\n        // won't be removed from the memory.\n        $(document).trigger('mousedown');\n\n        this.dispose();\n    }\n\n    onPopupShown = (event, element, popup) => {\n        this.$popupElement = popup;\n        this.$popupElement.on('change', '[data-media-selection-mode]', this.onSelectionModeChanged);\n        this.$popupElement.on('click', '[data-command]', this.onCommandClick);\n        this.$popupElement.on('shown.oc.popup', 'button[data-command=resize]', this.onResizePopupShown);\n        this.$popupElement.on('hidden.oc.popup', 'button[data-command=resize]', this.onResizePopupHidden);\n\n        this.imageArea = popup.find('[data-media-crop-tool]').get(0).querySelector('.image_area');\n        this.selectionSizeLabel = popup.find('[data-label=\"selection-size\"]').get(0);\n\n        this.getWidthInput().on('change', this.onSizeInputChange);\n        this.getHeightInput().on('change', this.onSizeInputChange);\n\n        this.initRulers();\n        this.applySelectionMode();\n\n        // Handle slow connections\n        const $img = this.getImageElement();\n        if ($img.get(0).complete) {\n            this.initJCrop();\n        }\n        else {\n            $img.one('load', this.initJCrop);\n        }\n    }\n\n    onSelectionModeChanged = () => {\n        const mode = this.getSelectionMode();\n        const $widthInput = this.getWidthInput();\n        const $heightInput = this.getHeightInput();\n\n        if (mode === 'normal') {\n            $widthInput.attr('disabled', 'disabled');\n            $heightInput.attr('disabled', 'disabled');\n        }\n        else {\n            $widthInput.removeAttr('disabled');\n            $heightInput.removeAttr('disabled');\n\n            $widthInput.val(this.fixDimensionValue($widthInput.val()));\n            $heightInput.val(this.fixDimensionValue($heightInput.val()));\n        }\n\n        this.applySelectionMode();\n    }\n\n    onImageScroll = () => {\n        const scrollTop = this.imageArea.scrollTop;\n        const scrollLeft = this.imageArea.scrollLeft;\n\n        if (this.prevScrollTop != scrollTop) {\n            this.prevScrollTop = scrollTop;\n            this.vRulerHolder.scrollTop = scrollTop;\n        }\n\n        if (this.prevScrollLeft != scrollLeft) {\n            this.prevScrollLeft = scrollLeft;\n            this.hRulerHolder.scrollLeft = scrollLeft;\n        }\n    }\n\n    onSizeInputChange = (ev) => {\n        const $target = $(ev.target);\n\n        $target.val(this.fixDimensionValue($target.val()));\n\n        this.applySelectionMode();\n    }\n\n    onCommandClick = (ev) => {\n        const command = $(ev.currentTarget).data('command');\n\n        switch (command) {\n            case 'insert':\n                this.cropAndInsert();\n                break;\n            case 'resize':\n                this.showResizePopup();\n                break;\n            case 'undo-resizing':\n                this.undoResizing();\n                break;\n        }\n    }\n\n    onSelectionChanged = (c) => {\n        this.updateSelectionSizeLabel(c.w, c.h);\n    }\n}\n\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/assets/js/mediamanager.js",
    "content": "import { ControlBase, registerControl } from 'larajax';\nimport MediaManagerImageCropPopup from './mediamanager.imagecroppopup.js';\n\n/*\n * Media manager control class\n *\n * Data attributes:\n * - data-control=\"media-manager\" - enables the plugin on an element\n *\n * JavaScript API:\n * oc.fetchControl(element, 'media-manager')\n *\n * Dependencies:\n * - Scrollpad (october.scrollpad.js)\n */\nif (oc.mediaManager === undefined) {\n    oc.mediaManager = {};\n}\n\nregisterControl('media-manager', class extends ControlBase {\n    init() {\n        this.$el = $(this.element);\n        this.$form = this.$el.closest('form');\n\n        // State properties\n        this.selectTimer = null;\n        this.sidebarPreviewElement = null;\n        this.itemListElement = null;\n        this.scrollContentElement = null;\n        this.thumbnailQueue = [];\n        this.activeThumbnailQueueLength = 0;\n        this.sidebarThumbnailAjax = null;\n        this.selectionMarker = null;\n        this.dropzone = null;\n        this.searchTrackInputTimer = null;\n        this.navigationAjax = null;\n        this.dblTouchTimer = null;\n        this.dblTouchFlag = null;\n        this.itemListPosition = null;\n\n        // Apply defaults to config\n        this.config = Object.assign({\n            url: window.location,\n            alias: '',\n            uniqueId: null,\n            deleteEmpty: 'Please select files to delete.',\n            deleteConfirm: 'Delete the selected file(s)?',\n            moveEmpty: 'Please select files to move.',\n            selectSingleImage: 'Please select a single image.',\n            selectionNotImage: 'The selected item is not an image.',\n            overwriteConfirm: 'Some files already exist. Do you want to replace them?',\n            bottomToolbar: false,\n            cropAndInsertButton: false,\n            readOnly: false\n        }, this.config);\n\n        this.itemListElement = this.$el.find('[data-media-item-list]').get(0);\n        if (this.itemListElement) {\n            this.scrollContentElement = this.itemListElement.querySelector('.scroll-wrapper');\n        }\n\n        if (this.config.bottomToolbar) {\n            this.$el.find('[data-media-bottom-toolbar]').removeClass('oc-hide');\n\n            if (this.config.cropAndInsertButton) {\n                this.$el.find('[data-popup-command=\"crop-and-insert\"]').removeClass('oc-hide');\n            }\n        }\n    }\n\n    connect() {\n        this.registerHandlers();\n\n        this.updateSidebarPreview();\n        this.generateThumbnails();\n        this.initUploader();\n        this.initScroll();\n    }\n\n    disconnect() {\n        this.unregisterHandlers();\n        this.clearSelectTimer();\n        this.destroyUploader();\n        this.clearSearchTrackInputTimer();\n        this.releaseNavigationAjax();\n        this.clearDblTouchTimer();\n        this.removeAttachedControls();\n        this.removeScroll();\n\n        this.$el = null;\n        this.$form = null;\n\n        this.sidebarPreviewElement = null;\n        this.itemListElement = null;\n        this.scrollContentElement = null;\n        this.sidebarThumbnailAjax = null;\n        this.selectionMarker = null;\n        this.thumbnailQueue = [];\n        this.navigationAjax = null;\n    }\n\n    getSelectedItems(returnNotProcessed, allowRootItem) {\n        var items = this.$el.get(0).querySelectorAll('[data-type=\"media-item\"].selected'),\n            result = [];\n\n        if (!allowRootItem) {\n            var filteredItems = [];\n\n            for (var i=0, len=items.length; i < len; i++) {\n                var item = items[i];\n                if (!item.hasAttribute('data-root')) {\n                    filteredItems.push(item);\n                }\n            }\n\n            items = filteredItems;\n        }\n\n        if (returnNotProcessed === true) {\n            return items;\n        }\n\n        for (var i=0, len=items.length; i < len; i++) {\n            var item = items[i],\n                itemDetails = {\n                    itemType: item.getAttribute('data-item-type'),\n                    path: item.getAttribute('data-path'),\n                    title: item.getAttribute('data-title'),\n                    documentType: item.getAttribute('data-document-type'),\n                    folder: item.getAttribute('data-folder'),\n                    publicUrl: item.getAttribute('data-public-url'),\n                    // @todo optimistically this should be a thumb URL for the media picker -sg\n                    thumbUrl: item.getAttribute('data-public-url')\n                };\n\n            result.push(itemDetails);\n        }\n\n        return result;\n    }\n\n    // MEDIA MANAGER INTERNAL METHODS\n    // ============================\n\n    registerHandlers() {\n        this.$el.on('dblclick', this.proxy(this.onNavigate));\n        this.$el.on('click.tree-path', 'ul.tree-path, [data-media-sidebar-labels]', this.proxy(this.onNavigate));\n\n        this.$el.on('click.command', '[data-command]', this.proxy(this.onCommandClick));\n\n        // Touch devices use double-tap for the navigation and single tap for selecting.\n        // Another option is checkboxes visible only on touch devices, but this approach\n        // will require more significant changes in the code for the touch device support.\n        this.$el.on('click.item', '[data-type=\"media-item\"]', this.proxy(this.onItemClick));\n        this.$el.on('touchend', '[data-type=\"media-item\"]', this.proxy(this.onItemTouch));\n\n        this.$el.on('change', '[data-media-sorting]', this.proxy(this.onSortingChanged));\n        this.$el.on('input', '[data-media-search]', this.proxy(this.onSearchChanged));\n        this.$el.on('mediarefresh', this.proxy(this.refresh));\n        this.$el.on('shown.oc.popup', '[data-command=\"create-folder\"]', this.proxy(this.onFolderPopupShown));\n        this.$el.on('hidden.oc.popup', '[data-command=\"create-folder\"]', this.proxy(this.onFolderPopupHidden));\n        this.$el.on('shown.oc.popup', '[data-command=\"move\"]', this.proxy(this.onMovePopupShown));\n        this.$el.on('hidden.oc.popup', '[data-command=\"move\"]', this.proxy(this.onMovePopupHidden));\n        this.$el.on('keydown', this.proxy(this.onKeyDown));\n\n        if (this.itemListElement) {\n            this.itemListElement.addEventListener('mousedown', this.proxy(this.onListMouseDown));\n        }\n    }\n\n    unregisterHandlers() {\n        this.$el.off('dblclick', this.proxy(this.onNavigate));\n        this.$el.off('click.tree-path', this.proxy(this.onNavigate));\n        this.$el.off('click.command', this.proxy(this.onCommandClick));\n\n        this.$el.off('click.item', this.proxy(this.onItemClick));\n        this.$el.off('touchend', '[data-type=\"media-item\"]', this.proxy(this.onItemTouch));\n\n        this.$el.off('change', '[data-media-sorting]', this.proxy(this.onSortingChanged));\n        this.$el.off('keyup', '[data-media-search]', this.proxy(this.onSearchChanged));\n        this.$el.off('shown.oc.popup', '[data-command=\"create-folder\"]', this.proxy(this.onFolderPopupShown));\n        this.$el.off('hidden.oc.popup', '[data-command=\"create-folder\"]', this.proxy(this.onFolderPopupHidden));\n        this.$el.off('shown.oc.popup', '[data-command=\"move\"]', this.proxy(this.onMovePopupShown));\n        this.$el.off('hidden.oc.popup', '[data-command=\"move\"]', this.proxy(this.onMovePopupHidden));\n        this.$el.off('keydown', this.proxy(this.onKeyDown));\n\n        if (this.itemListElement) {\n            this.itemListElement.removeEventListener('mousedown', this.proxy(this.onListMouseDown));\n            this.itemListElement.removeEventListener('mousemove', this.proxy(this.onListMouseMove));\n        }\n\n        document.removeEventListener('mouseup', this.proxy(this.onListMouseUp));\n    }\n\n    changeView(view) {\n        var data = {\n            view: view,\n            path: this.$el.find('[data-type=\"current-folder\"]').val()\n        };\n\n        this.execNavigationRequest('onChangeView', data);\n    }\n\n    setFilter(filter) {\n        var data = {\n            filter: filter,\n            path: this.$el.find('[data-type=\"current-folder\"]').val()\n        };\n\n        this.execNavigationRequest('onSetFilter', data);\n    }\n\n    isSearchMode() {\n        return this.$el.find('[data-type=\"search-mode\"]').val() == 'true';\n    }\n\n    initScroll() {\n        this.$el.find('.control-scrollpad').scrollpad();\n    }\n\n    updateScroll() {\n        this.$el.find('.control-scrollpad').scrollpad('update');\n    }\n\n    removeScroll() {\n        this.$el.find('.control-scrollpad').scrollpad('dispose');\n    }\n\n    scrollToTop() {\n        this.$el.find('.control-scrollpad').scrollpad('scrollToStart');\n    }\n\n    //\n    // Disposing\n    //\n\n    removeAttachedControls() {\n        this.$el.find('[data-control=toolbar]').toolbar('dispose');\n        this.$el.find('[data-media-sorting]').select2('destroy');\n    }\n\n    //\n    // Selecting\n    //\n\n    clearSelectTimer() {\n        if (this.selectTimer === null) {\n            return;\n        }\n\n        clearTimeout(this.selectTimer);\n        this.selectTimer = null;\n    }\n\n    selectItem(node, expandSelection) {\n        if (!expandSelection) {\n            var items = this.$el.get(0).querySelectorAll('[data-type=\"media-item\"].selected');\n\n            // The class attribute is used only for selecting, it's safe to clear it\n            for (var i = 0, len = items.length; i < len; i++) {\n                items[i].setAttribute('class', '');\n            }\n\n            node.setAttribute('class', 'selected');\n        }\n        else {\n            if (node.getAttribute('class') == 'selected') {\n                node.setAttribute('class', '');\n            }\n            else {\n                node.setAttribute('class', 'selected');\n            }\n        }\n\n        node.focus();\n\n        this.clearSelectTimer();\n\n        if (this.isPreviewSidebarVisible()) {\n            // Use the timeout to prevent too many AJAX requests\n            // when the selection changes too quickly (with the keyboard arrows)\n            this.selectTimer = setTimeout(this.proxy(this.updateSidebarPreview), 100);\n        }\n\n        // Disable delete and move buttons\n        if (node.hasAttribute('data-root') && !expandSelection) {\n            this.toggleMoveAndDelete(true);\n        }\n        else {\n            this.toggleMoveAndDelete(false);\n        }\n\n        // Always unselect root when selecting multiples\n        if (expandSelection) {\n            this.unselectRoot();\n        }\n    }\n\n    toggleMoveAndDelete(value) {\n        $('[data-command=delete]', this.$el).prop('disabled', value);\n        $('[data-command=move]', this.$el).prop('disabled', value);\n    }\n\n    unselectRoot() {\n        var rootItem = this.$el.get(0).querySelector('[data-type=\"media-item\"][data-root].selected');\n\n        if (rootItem) {\n            rootItem.setAttribute('class', '');\n        }\n    }\n\n    clearDblTouchTimer() {\n        if (this.dblTouchTimer === null) {\n            return;\n        }\n\n        clearTimeout(this.dblTouchTimer);\n        this.dblTouchTimer = null;\n    }\n\n    clearDblTouchFlag() {\n        this.dblTouchFlag = false;\n    }\n\n    selectFirstItem() {\n        var firstItem = this.itemListElement.querySelector('[data-type=\"media-item\"]:first-child');\n        if (firstItem) {\n            this.selectItem(firstItem);\n        }\n    }\n\n    selectRelative(next, expandSelection) {\n        var currentSelection = this.getSelectedItems(true, true);\n        if (currentSelection.length == 0) {\n            this.selectFirstItem();\n            return;\n        }\n\n        var itemToSelect = null;\n        if (next) {\n            var lastItem = currentSelection[currentSelection.length-1];\n\n            if (lastItem) {\n                itemToSelect = lastItem.nextElementSibling;\n            }\n        }\n        else {\n            var firstItem = currentSelection[0];\n            if (firstItem) {\n                itemToSelect = firstItem.previousElementSibling;\n            }\n        }\n\n        if (itemToSelect) {\n            this.selectItem(itemToSelect, expandSelection);\n        }\n    }\n\n    //\n    // Navigation\n    //\n\n    gotoFolder(path, resetSearch) {\n        var data = {\n            path: path,\n            resetSearch: resetSearch !== undefined ? 1 : 0\n        };\n\n        this.execNavigationRequest('onGoToFolder', data);\n    }\n\n    afterNavigate() {\n        this.scrollToTop();\n        this.generateThumbnails();\n        this.updateSidebarPreview(true);\n        this.selectFirstItem();\n        this.updateScroll();\n    }\n\n    refresh() {\n        var data = {\n            path: this.$el.find('[data-type=\"current-folder\"]').val(),\n            clearCache: true\n        };\n\n        this.execNavigationRequest('onGoToFolder', data);\n    }\n\n    execNavigationRequest(handler, data, element) {\n        if (element === undefined) {\n            element = this.$form;\n        }\n\n        if (this.navigationAjax !== null) {\n            try {\n                this.navigationAjax.abort();\n            }\n            catch (e) {}\n            this.releaseNavigationAjax();\n        }\n\n        $.oc.stripeLoadIndicator.show();\n        this.navigationAjax = element.request(this.config.alias+'::' + handler, {\n                data: data\n            })\n            .always(function() {\n                $.oc.stripeLoadIndicator.hide()\n            })\n            .done(this.proxy(this.afterNavigate))\n            .always(this.proxy(this.releaseNavigationAjax));\n    }\n\n    releaseNavigationAjax() {\n        this.navigationAjax = null;\n    }\n\n    navigateToItem($item) {\n        if (!$item.length || !$item.data('path').length) {\n            return;\n        }\n\n        if ($item.data('item-type') == 'folder') {\n            if (!$item.data('clear-search'))\n                this.gotoFolder($item.data('path'));\n            else {\n                this.resetSearch();\n                this.gotoFolder($item.data('path'), true);\n            }\n        }\n        else if ($item.data('item-type') == 'file') {\n            // Trigger the Insert popup command if a file item\n            // was double clicked or Enter key was pressed.\n            this.$el.trigger('popupcommand', ['insert']);\n        }\n    }\n\n    //\n    // Sidebar\n    //\n\n    isPreviewSidebarVisible() {\n        return !this.$el.find('[data-media-preview-sidebar]').hasClass('oc-hide');\n    }\n\n    toggleSidebar(ev) {\n        var isVisible = this.isPreviewSidebarVisible(),\n            $sidebar = this.$el.find('[data-media-preview-sidebar]'),\n            $button = $(ev.target);\n\n        if (!isVisible) {\n            $sidebar.removeClass('oc-hide');\n            this.updateSidebarPreview();\n            $button.removeClass('sidebar-hidden');\n        }\n        else {\n            $sidebar.addClass('oc-hide');\n            $button.addClass('sidebar-hidden');\n        }\n\n        this.$form.request(this.config.alias+'::onSetSidebarVisible', {\n            data: {\n                visible: (isVisible ? 0 : 1)\n            }\n        })\n    }\n\n    updateSidebarMediaPreview(items) {\n        var previewPanel = this.sidebarPreviewElement,\n            previewContainer = previewPanel.querySelector('[data-media-preview-container]'),\n            template = '';\n\n        for (var i = 0, len = previewContainer.children.length; i < len; i++) {\n            previewContainer.removeChild(previewContainer.children[i]);\n        }\n\n        // Single item selected\n        if (items.length == 1 && !items[0].hasAttribute('data-root')) {\n            var item = items[0],\n                documentType = item.getAttribute('data-document-type');\n\n            switch (documentType) {\n                case 'audio' :\n                    template = previewPanel.querySelector('[data-media-audio-template]').innerHTML;\n                break;\n                case 'video' :\n                    template = previewPanel.querySelector('[data-media-video-template]').innerHTML;\n                break;\n                case 'image' :\n                    template = previewPanel.querySelector('[data-media-image-template]').innerHTML;\n                break;\n            }\n\n            previewContainer.innerHTML = template\n                .replace('{src}', item.getAttribute('data-public-url'))\n                .replace('{path}', item.getAttribute('data-path'))\n                .replace('{last-modified}', item.getAttribute('data-last-modified-ts'));\n\n            if (documentType == 'image') {\n                this.loadSidebarThumbnail();\n            }\n        }\n        // \"Go up\" is selected\n        else if (items.length == 1 && items[0].hasAttribute('data-root')) {\n            template = previewPanel.querySelector('[data-media-go-up]').innerHTML;\n            previewContainer.innerHTML = template;\n        }\n        // No selection\n        else if (items.length == 0) {\n            template = previewPanel.querySelector('[data-media-no-selection-template]').innerHTML;\n            previewContainer.innerHTML = template;\n        }\n        // Multiple selection\n        else {\n            template = previewPanel.querySelector('[data-media-multi-selection-template]').innerHTML;\n            previewContainer.innerHTML = template;\n        }\n    }\n\n    updateSidebarPreview(resetSidebar) {\n        if (!this.sidebarPreviewElement) {\n            this.sidebarPreviewElement = this.$el.get(0).querySelector('[data-media-preview-sidebar]');\n        }\n\n        var items = resetSidebar === undefined ? this.$el.get(0).querySelectorAll('[data-type=\"media-item\"].selected') : [],\n            previewPanel = this.sidebarPreviewElement;\n\n        // No items are selected\n        if (items.length == 0) {\n            this.sidebarPreviewElement.querySelector('[data-media-sidebar-labels]').setAttribute('class', 'oc-hide');\n        }\n        // One item is selected - display the details\n        else if (items.length == 1 && !items[0].hasAttribute('data-root')) {\n            this.sidebarPreviewElement.querySelector('[data-media-sidebar-labels]').setAttribute('class', 'panel');\n\n            var item = items[0],\n                lastModified = item.getAttribute('data-last-modified');\n\n            previewPanel.querySelector('[data-label=\"size\"]').textContent = item.getAttribute('data-size');\n            previewPanel.querySelector('[data-label=\"title\"]').textContent = item.getAttribute('data-title');\n            previewPanel.querySelector('[data-label=\"last-modified\"]').textContent = lastModified;\n            previewPanel.querySelector('[data-label=\"public-url\"]').setAttribute('href', item.getAttribute('data-public-url'));\n\n            if (lastModified) {\n                previewPanel.querySelector('[data-media-last-modified]').setAttribute('class', '');\n            }\n            else {\n                previewPanel.querySelector('[data-media-last-modified]').setAttribute('class', 'oc-hide');\n            }\n\n            if (this.isSearchMode()) {\n                previewPanel.querySelector('[data-media-item-folder]').setAttribute('class', '');\n                var folderNode = previewPanel.querySelector('[data-label=\"folder\"]');\n                folderNode.textContent = item.getAttribute('data-folder');\n                folderNode.setAttribute('data-path', item.getAttribute('data-folder'));\n            }\n            else {\n                previewPanel.querySelector('[data-media-item-folder]').setAttribute('class', 'oc-hide');\n            }\n        }\n        // Multiple items are selected or \"Go up\" is selected\n        else {\n            this.sidebarPreviewElement.querySelector('[data-media-sidebar-labels]').setAttribute('class', 'oc-hide');\n        }\n\n        this.updateSidebarMediaPreview(items);\n    }\n\n    loadSidebarThumbnail() {\n        if (this.sidebarThumbnailAjax) {\n            try {\n                this.sidebarThumbnailAjax.abort();\n            }\n            catch (e) {}\n            this.sidebarThumbnailAjax = null;\n        }\n\n        var sidebarThumbnail = this.sidebarPreviewElement.querySelector('[data-media-sidebar-thumbnail]');\n        if (!sidebarThumbnail) {\n            return;\n        }\n\n        var data = {\n            path: sidebarThumbnail.getAttribute('data-path'),\n            lastModified: sidebarThumbnail.getAttribute('data-last-modified')\n        }\n\n        this.sidebarThumbnailAjax = this.$form.request(this.config.alias+'::onGetSidebarThumbnail', {\n                data: data\n            })\n            .done(this.proxy(this.replaceSidebarPlaceholder))\n            .always(this.proxy(this.releaseSidebarThumbnailAjax));\n    }\n\n    replaceSidebarPlaceholder(response) {\n        if (!this.sidebarPreviewElement) {\n            return;\n        }\n\n        var sidebarThumbnail = this.sidebarPreviewElement.querySelector('[data-media-sidebar-thumbnail]');\n        if (!sidebarThumbnail) {\n            return;\n        }\n\n        if (!response.markup) {\n            return;\n        }\n\n        sidebarThumbnail.innerHTML = response.markup;\n        sidebarThumbnail.removeAttribute('data-loading');\n    }\n\n    releaseSidebarThumbnailAjax() {\n        this.sidebarThumbnailAjax = null;\n    }\n\n    //\n    // Thumbnails\n    //\n\n    generateThumbnails() {\n        this.thumbnailQueue = [];\n\n        var placeholders = this.itemListElement.querySelectorAll('[data-type=\"media-item\"] div.image-placeholder')\n        for (var i = (placeholders.length-1); i >= 0; i--) {\n            this.thumbnailQueue.push({\n                id: placeholders[i].getAttribute('id'),\n                width: placeholders[i].getAttribute('data-width'),\n                height: placeholders[i].getAttribute('data-height'),\n                path: placeholders[i].getAttribute('data-path'),\n                lastModified: placeholders[i].getAttribute('data-last-modified')\n            });\n        }\n\n        this.handleThumbnailQueue();\n    }\n\n    handleThumbnailQueue() {\n        var maxThumbnailQueueLength = 2,\n            maxThumbnailBatchLength = 3;\n\n        if (this.activeThumbnailQueueLength >= maxThumbnailQueueLength) {\n            return;\n        }\n\n        for (var i = this.activeThumbnailQueueLength; i < maxThumbnailQueueLength && this.thumbnailQueue.length > 0; i++) {\n            var batch = [];\n            for (var j = 0; j < maxThumbnailBatchLength && this.thumbnailQueue.length > 0; j++) {\n                batch.push(this.thumbnailQueue.pop());\n            }\n\n            this.activeThumbnailQueueLength++;\n\n            this.handleThumbnailBatch(batch).always(this.proxy(this.placeholdersUpdated));\n        }\n    }\n\n    handleThumbnailBatch(batch) {\n        var data = {\n            batch: batch\n        };\n\n        for (var i = 0, len = batch.length; i < len; i++) {\n            var placeholder = document.getElementById(batch[i].id);\n            if (placeholder) {\n                placeholder.setAttribute('data-loading', 'true');\n            }\n        }\n\n        var promise = this.$form.request(this.config.alias+'::onGenerateThumbnails', {\n            data: data\n        });\n\n        promise.done(this.proxy(this.replacePlaceholder));\n\n        return promise;\n    }\n\n    replacePlaceholder(response) {\n        if (!response.generatedThumbnails) {\n            return;\n        }\n\n        for (var i = 0, len = response.generatedThumbnails.length; i < len; i++) {\n            var thumbnailInfo = response.generatedThumbnails[i];\n\n            if (!thumbnailInfo.id || !thumbnailInfo.markup) {\n                continue;\n            }\n\n            var node = document.getElementById(thumbnailInfo.id)\n            if (!node) {\n                continue;\n            }\n\n            var placeholderContainer = node.parentNode;\n            if (placeholderContainer) {\n                placeholderContainer.innerHTML = thumbnailInfo.markup;\n            }\n        }\n    }\n\n    placeholdersUpdated() {\n        this.activeThumbnailQueueLength--;\n\n        this.handleThumbnailQueue();\n    }\n\n    //\n    // Drag-select\n    //\n\n    getRelativePosition(element, pageX, pageY, startPosition) {\n        var absolutePosition = startPosition !== undefined\n            ? startPosition\n            : $.oc.foundation.element.absolutePosition(element, true);\n\n        return {\n            x: (pageX - absolutePosition.left), // There is no horizontal scroll\n            y: (pageY - absolutePosition.top + this.scrollContentElement.scrollTop - document.documentElement.scrollTop)\n        };\n    }\n\n    createSelectionMarker() {\n        if (this.selectionMarker) {\n            return;\n        }\n\n        this.selectionMarker = document.createElement('div');\n        this.selectionMarker.setAttribute('data-media-selection-marker', '');\n\n        this.scrollContentElement.insertBefore(this.selectionMarker, this.scrollContentElement.firstChild);\n    }\n\n    doObjectsCollide(aTop, aLeft, aWidth, aHeight, bTop, bLeft, bWidth, bHeight) {\n        return !(\n            ((aTop + aHeight) < (bTop)) ||\n            (aTop > (bTop + bHeight)) ||\n            ((aLeft + aWidth) < bLeft) ||\n            (aLeft > (bLeft + bWidth))\n        );\n    }\n\n    //\n    // Uploading\n    //\n\n    initUploader() {\n        if (!this.itemListElement || this.config.readOnly) {\n            return;\n        }\n\n        var uploaderOptions = {\n            clickable: this.$el.find('[data-media-upload]').get(0),\n            url: this.config.url,\n            paramName: 'file_data',\n            headers: {},\n            timeout: 0,\n            createImageThumbnails: false,\n            autoProcessQueue: false\n            // fallback: implement method that would set a flag that the uploader is not supported by the browser\n        };\n\n        if (this.config.uniqueId) {\n            uploaderOptions.headers['X-OCTOBER-FILEUPLOAD'] = this.config.uniqueId;\n        }\n\n        /*\n         * Add CSRF token to headers\n         */\n        var token = $('meta[name=\"csrf-token\"]').attr('content');\n        if (token) {\n            uploaderOptions.headers['X-CSRF-TOKEN'] = token;\n        }\n\n        this.dropzone = new Dropzone(this.$el.get(0), uploaderOptions);\n        this.dropzone.on('addedfile', this.proxy(this.uploadFileAdded));\n        this.dropzone.on('totaluploadprogress', this.proxy(this.uploadUpdateTotalProgress));\n        this.dropzone.on('queuecomplete', this.proxy(this.uploadQueueComplete));\n        this.dropzone.on('sending', this.proxy(this.uploadSending));\n        this.dropzone.on('error', this.proxy(this.uploadError));\n        this.dropzone.on('success', this.proxy(this.uploadSuccess));\n    }\n\n    destroyUploader() {\n        if (!this.dropzone) {\n            return;\n        }\n\n        this.dropzone.destroy();\n        this.dropzone = null;\n    }\n\n    uploadFileAdded() {\n        this.showUploadUi();\n        this.setUploadProgress(0);\n\n        this.$el.find('[data-command=\"cancel-uploading\"]').removeClass('oc-hide');\n        this.$el.find('[data-command=\"close-uploader\"]').addClass('oc-hide');\n\n        // Batch file additions and check for conflicts after a short delay\n        clearTimeout(this.uploadCheckTimeout);\n        this.uploadCheckTimeout = setTimeout(this.proxy(this.checkFilesBeforeUpload), 100);\n    }\n\n    checkFilesBeforeUpload() {\n        var self = this,\n            queuedFiles = this.dropzone.getQueuedFiles(),\n            fileNames = queuedFiles.map(function(f) { return f.name; }),\n            path = this.$el.find('[data-type=\"current-folder\"]').val();\n\n        if (queuedFiles.length === 0) {\n            return;\n        }\n\n        // Check which files already exist\n        this.$el.request('onCheckFilesExist', {\n            data: { file_names: fileNames, path: path },\n            success: function(data) {\n                if (data.existing && data.existing.length > 0) {\n                    self.showOverwriteConfirmation(data.existing, queuedFiles);\n                }\n                else {\n                    // No conflicts, proceed with upload\n                    self.dropzone.processQueue();\n                }\n            },\n            error: function() {\n                // On error, proceed anyway (server will validate)\n                self.dropzone.processQueue();\n            }\n        });\n    }\n\n    showOverwriteConfirmation(existingFiles, queuedFiles) {\n        var self = this,\n            message = this.config.overwriteConfirm + ' (' + existingFiles.join(', ') + ')';\n\n        oc.confirm(message, function(confirmed) {\n            if (confirmed) {\n                // Mark for overwrite and process queue\n                self.forceOverwrite = true;\n                self.dropzone.processQueue();\n            }\n            else {\n                // Remove conflicting files from queue, upload the rest\n                var existingSet = {};\n                existingFiles.forEach(function(name) { existingSet[name] = true; });\n\n                queuedFiles.forEach(function(file) {\n                    if (existingSet[file.name]) {\n                        self.dropzone.removeFile(file);\n                    }\n                });\n\n                // Process remaining files if any\n                if (self.dropzone.getQueuedFiles().length > 0) {\n                    self.dropzone.processQueue();\n                }\n                else {\n                    self.hideUploadUi();\n                }\n            }\n        });\n    }\n\n    showUploadUi() {\n        this.$el.find('[data-media-upload-ui]').removeClass('oc-hide');\n    }\n\n    hideUploadUi() {\n        this.$el.find('[data-media-upload-ui]').addClass('oc-hide');\n    }\n\n    uploadUpdateTotalProgress(uploadProgress, totalBytes, totalBytesSent) {\n        this.setUploadProgress(uploadProgress);\n\n        var fileNumberLabel = this.$el.get(0).querySelector('[data-label=\"file-number-and-progress\"]'),\n            messageTemplate = fileNumberLabel.getAttribute('data-message-template'),\n            fileNumber = this.dropzone.getUploadingFiles().length + this.dropzone.getQueuedFiles().length;\n\n        // Don't confuse users with displaying 100%\n        // until the operation finishes. We consider the operation\n        // finished when the Dropzone's 'compete' event triggers -\n        // when the response is received from the server.\n        if (uploadProgress >= 100) {\n            uploadProgress = 99;\n        }\n\n        fileNumberLabel.innerHTML = messageTemplate.replace(':number', fileNumber).replace(':percents', Math.round(uploadProgress) + '%');\n    }\n\n    setUploadProgress(value) {\n        var progressBar = this.$el.get(0).querySelector('[data-media-upload-progress-bar]');\n\n        progressBar.setAttribute('style', 'width: ' + value + '%');\n        progressBar.setAttribute('class', 'progress-bar');\n    }\n\n    uploadQueueComplete() {\n        this.$el.find('[data-command=\"cancel-uploading\"]').addClass('oc-hide');\n        this.$el.find('[data-command=\"close-uploader\"]').removeClass('oc-hide');\n\n        // Reset overwrite flag\n        this.forceOverwrite = false;\n\n        this.refresh();\n    }\n\n    uploadSending(file, xhr, formData) {\n        formData.append('path', this.$el.find('[data-type=\"current-folder\"]').val());\n\n        if (this.forceOverwrite) {\n            formData.append('force_overwrite', '1');\n        }\n    }\n\n    uploadCancelAll() {\n        this.dropzone.removeAllFiles(true);\n        this.hideUploadUi();\n    }\n\n    updateUploadBar(templateName, classNames) {\n        var fileNumberLabel = this.$el.get(0).querySelector('[data-label=\"file-number-and-progress\"]'),\n            successTemplate = fileNumberLabel.getAttribute('data-' + templateName + '-template'),\n            progressBar = this.$el.get(0).querySelector('[data-media-upload-progress-bar]');\n\n        fileNumberLabel.innerHTML = successTemplate;\n        progressBar.setAttribute('class', classNames);\n    }\n\n    uploadSuccess() {\n        this.updateUploadBar('success', 'progress-bar bg-success');\n\n        // Continue processing remaining files in the queue\n        this.dropzone.processQueue();\n    }\n\n    uploadError(file, message) {\n        this.updateUploadBar('error', 'progress-bar bg-danger');\n\n        if (!message) {\n            message = 'Error uploading file';\n        }\n\n        oc.alert(message);\n\n        // Continue processing remaining files in the queue despite error\n        this.dropzone.processQueue();\n    }\n\n    //\n    // Cropping images\n    //\n\n    cropSelectedImage(callback) {\n        var selectedItems = this.getSelectedItems(true);\n\n        if (selectedItems.length != 1) {\n            alert(this.config.selectSingleImage);\n            return;\n        }\n\n        if (selectedItems[0].getAttribute('data-document-type') !== 'image') {\n            alert(this.config.selectionNotImage);\n            return;\n        }\n\n        var path = selectedItems[0].getAttribute('data-path');\n\n        new MediaManagerImageCropPopup(path, {\n            alias: this.config.alias,\n            onDone: callback\n        });\n    }\n\n    onImageCropped(result) {\n        this.$el.trigger('popupcommand', ['insert-cropped', result]);\n    }\n\n    //\n    // Search\n    //\n\n    clearSearchTrackInputTimer() {\n        if (this.searchTrackInputTimer === null) {\n            return;\n        }\n\n        clearTimeout(this.searchTrackInputTimer);\n        this.searchTrackInputTimer = null;\n    }\n\n    updateSearchResults() {\n        var $searchField = this.$el.find('[data-media-search]'),\n            data = {\n                search: $searchField.val()\n            };\n\n        this.execNavigationRequest('onSearch', data, $searchField);\n    }\n\n    resetSearch() {\n        this.$el.find('[data-media-search]').val('');\n    }\n\n    onSearchChanged(ev) {\n        var value = ev.currentTarget.value;\n\n        if (this.lastSearchValue !== undefined && this.lastSearchValue == value) {\n            return;\n        }\n\n        this.lastSearchValue = value;\n\n        this.clearSearchTrackInputTimer();\n\n        this.searchTrackInputTimer = window.setTimeout(this.proxy(this.updateSearchResults), 300);\n    }\n\n    //\n    // File and folder operations\n    //\n\n    deleteItems() {\n        var items = this.$el.get(0).querySelectorAll('[data-type=\"media-item\"].selected');\n\n        if (!items.length) {\n            oc.alert(this.config.deleteEmpty);\n            return;\n        }\n\n        oc.confirm(this.config.deleteConfirm, this.proxy(this.deleteConfirmation));\n    }\n\n    deleteConfirmation(isConfirm) {\n        if (!isConfirm) {\n            return;\n        }\n\n        var items = this.$el.get(0).querySelectorAll('[data-type=\"media-item\"].selected'),\n            paths = []\n\n        for (var i=0, len=items.length; i<len; i++) {\n            // Skip the 'return to parent' item\n            if (items[i].hasAttribute('data-root')) {\n                continue;\n            }\n            paths.push({\n                'path': items[i].getAttribute('data-path'),\n                'type': items[i].getAttribute('data-item-type')\n            });\n        }\n\n        var data = {\n            paths: paths\n        };\n\n        $.oc.stripeLoadIndicator.show();\n        this.$form\n            .request(this.config.alias+'::onDeleteItem', {\n                data: data\n            })\n            .always(function() {\n                $.oc.stripeLoadIndicator.hide()\n            })\n            .done(this.proxy(this.afterNavigate));\n    }\n\n    createFolder(ev) {\n        $(ev.target).popup({\n            content: this.$el.find('[data-media-new-folder-template]').html()\n        });\n    }\n\n    onFolderPopupShown(ev, button, popup) {\n        $(popup).find('input[name=name]').focus();\n        $(popup).on('submit.media', 'form', this.proxy(this.onNewFolderSubmit));\n    }\n\n    onFolderPopupHidden(ev, button, popup) {\n        $(popup).off('.media', 'form');\n    }\n\n    onNewFolderSubmit(ev) {\n        var data = {\n            name: $(ev.target).find('input[name=name]').val(),\n            path: this.$el.find('[data-type=\"current-folder\"]').val()\n        };\n\n        $.oc.stripeLoadIndicator.show();\n        this.$form.request(this.config.alias+'::onCreateFolder', {\n            data: data\n        }).always(function() {\n            $.oc.stripeLoadIndicator.hide()\n        }).done(this.proxy(this.folderCreated));\n\n        ev.preventDefault();\n        return false;\n    }\n\n    folderCreated() {\n        this.$el.find('button[data-command=\"create-folder\"]').popup('hide');\n        this.afterNavigate();\n    }\n\n    moveItems(ev) {\n        var items = this.$el.get(0).querySelectorAll('[data-type=\"media-item\"].selected');\n\n        if (!items.length) {\n            oc.alert(this.config.moveEmpty);\n            return;\n        }\n\n        var data = {\n            exclude: [],\n            path: this.$el.find('[data-type=\"current-folder\"]').val()\n        };\n\n        for (var i = 0, len = items.length; i < len; i++) {\n            var item = items[i],\n                path = item.getAttribute('data-path');\n\n            if (item.getAttribute('data-item-type') == 'folder') {\n                data.exclude.push(path);\n            }\n        }\n\n        $(ev.target).popup({\n            handler: this.config.alias+'::onLoadMovePopup',\n            extraData: data\n        });\n    }\n\n    onMovePopupShown(ev, button, popup) {\n        $(popup).on('submit.media', 'form', this.proxy(this.onMoveItemsSubmit));\n    }\n\n    onMoveItemsSubmit(ev) {\n        var items = this.$el.get(0).querySelectorAll('[data-type=\"media-item\"].selected'),\n            data = {\n                dest: $(ev.target).find('select[name=dest]').val(),\n                originalPath: $(ev.target).find('input[name=originalPath]').val(),\n                files: [],\n                folders: []\n            };\n\n        for (var i = 0, len = items.length; i < len; i++) {\n            var item = items[i],\n                path = item.getAttribute('data-path');\n\n\n            if (item.getAttribute('data-item-type') == 'folder') {\n                data.folders.push(path);\n            }\n            else {\n                data.files.push(path);\n            }\n        }\n\n        $.oc.stripeLoadIndicator.show();\n        this.$form.request(this.config.alias+'::onMoveItems', {\n                data: data\n            })\n            .always(function() {\n                $.oc.stripeLoadIndicator.hide();\n            })\n            .done(this.proxy(this.itemsMoved));\n\n        ev.preventDefault();\n        return false;\n    }\n\n    onMovePopupHidden(ev, button, popup) {\n        $(popup).off('.media', 'form');\n    }\n\n    itemsMoved() {\n        this.$el.find('button[data-command=\"move\"]').popup('hide');\n        this.afterNavigate();\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    onNavigate(ev) {\n        var $item = $(ev.target).closest('[data-type=\"media-item\"]');\n\n        this.navigateToItem($item);\n\n        if ($(ev.target).data('label') != 'public-url') {\n            return false;\n        }\n    }\n\n    onCommandClick(ev) {\n        var command = $(ev.currentTarget).data('command');\n\n        switch (command) {\n            case 'refresh':\n                this.refresh();\n            break;\n            case 'change-view':\n                this.changeView($(ev.currentTarget).data('view'));\n            break;\n            case 'cancel-uploading':\n                this.uploadCancelAll();\n            break;\n            case 'close-uploader':\n                this.hideUploadUi();\n            break;\n            case 'set-filter':\n                this.setFilter($(ev.currentTarget).data('filter'));\n            break;\n            case 'delete':\n                this.deleteItems();\n            break;\n            case 'create-folder':\n                this.createFolder(ev);\n            break;\n            case 'move':\n                this.moveItems(ev);\n            break;\n            case 'toggle-sidebar':\n                this.toggleSidebar(ev);\n            break;\n            case 'popup-command':\n                var popupCommand = $(ev.currentTarget).data('popup-command');\n\n                if (popupCommand !== 'crop-and-insert') {\n                    this.$el.trigger('popupcommand', [popupCommand]);\n                }\n                else {\n                    this.cropSelectedImage(this.proxy(this.onImageCropped));\n                }\n            break;\n        }\n\n        return false;\n    }\n\n    onItemClick(ev) {\n        // Don't select items when the rename icon is clicked\n        if (ev.target.tagName == 'I' && ev.target.hasAttribute('data-rename-control')) {\n            return;\n        }\n\n        this.selectItem(ev.currentTarget, ev.shiftKey);\n    }\n\n    onItemTouch(ev) {\n        // The 'click' event is triggered after 'touchend',\n        // so we can prevent handling it.\n        ev.preventDefault();\n        ev.stopPropagation();\n\n        if (this.dblTouchFlag) {\n            this.onNavigate(ev);\n            this.dblTouchFlag = null;\n        }\n        else {\n            this.onItemClick(ev);\n            this.dblTouchFlag = true;\n        }\n\n        this.clearDblTouchTimer();\n\n        this.dblTouchTimer = setTimeout(this.proxy(this.clearDblTouchFlag), 300);\n    }\n\n    onListMouseDown(ev) {\n        this.itemListElement.addEventListener('mousemove', this.proxy(this.onListMouseMove));\n        document.addEventListener('mouseup', this.proxy(this.onListMouseUp));\n\n        this.itemListPosition = $.oc.foundation.element.absolutePosition(this.itemListElement, true);\n\n        var pagePosition = $.oc.foundation.event.pageCoordinates(ev),\n            relativePosition = this.getRelativePosition(this.itemListElement, pagePosition.x, pagePosition.y, this.itemListPosition);\n\n        this.selectionStartPoint = relativePosition;\n        this.selectionStarted = false;\n    }\n\n    onListMouseUp(ev) {\n        this.itemListElement.removeEventListener('mousemove', this.proxy(this.onListMouseMove));\n        document.removeEventListener('mouseup', this.proxy(this.onListMouseUp));\n        $(document.body).removeClass('no-select');\n\n        if (this.selectionStarted) {\n            this.unselectRoot();\n\n            var items = this.itemListElement.querySelectorAll('[data-type=\"media-item\"]:not([data-root])'),\n                selectionPosition = $.oc.foundation.element.absolutePosition(this.selectionMarker, true);\n\n            for (var index = 0, len = items.length; index < len; index++) {\n                var item = items[index],\n                    itemPosition = $.oc.foundation.element.absolutePosition(item, true);\n\n                if (this.doObjectsCollide(\n                    selectionPosition.top,\n                    selectionPosition.left,\n                    this.selectionMarker.offsetWidth,\n                    this.selectionMarker.offsetHeight,\n                    itemPosition.top,\n                    itemPosition.left,\n                    item.offsetWidth,\n                    item.offsetHeight\n                )) {\n                    if (!ev.shiftKey) {\n                        item.setAttribute('class', 'selected');\n                    }\n                    else {\n                        if (item.getAttribute('class') == 'selected') {\n                            item.setAttribute('class', '');\n                        }\n                        else {\n                            item.setAttribute('class', 'selected');\n                        }\n                    }\n                }\n                else if (!ev.shiftKey) {\n                    item.setAttribute('class', '');\n                }\n            }\n\n            this.updateSidebarPreview();\n            this.selectionMarker.setAttribute('class', 'oc-hide');\n        }\n\n        this.selectionStarted = false;\n    }\n\n    onListMouseMove(ev) {\n        var pagePosition = $.oc.foundation.event.pageCoordinates(ev),\n            relativePosition = this.getRelativePosition(this.itemListElement, pagePosition.x, pagePosition.y, this.itemListPosition);\n\n        var deltaX = relativePosition.x - this.selectionStartPoint.x,\n            deltaY = relativePosition.y - this.selectionStartPoint.y;\n\n        if (!this.selectionStarted && (Math.abs(deltaX) > 2 || Math.abs(deltaY) > 2)) {\n            // Start processing the selection only if the mouse was moved by at least 2 pixels.\n            this.createSelectionMarker();\n\n            this.selectionMarker.setAttribute('class', '');\n            this.selectionStarted = true;\n            $(document.body).addClass('no-select');\n        }\n\n        if (this.selectionStarted) {\n            if (deltaX >= 0) {\n                this.selectionMarker.style.left = this.selectionStartPoint.x + 'px';\n                this.selectionMarker.style.width = deltaX + 'px';\n            }\n            else {\n                this.selectionMarker.style.left = relativePosition.x + 'px';\n                this.selectionMarker.style.width = Math.abs(deltaX) + 'px';\n            }\n\n            if (deltaY >= 0) {\n                this.selectionMarker.style.height = deltaY + 'px';\n                this.selectionMarker.style.top = this.selectionStartPoint.y + 'px';\n            }\n            else {\n                this.selectionMarker.style.top = relativePosition.y + 'px';\n                this.selectionMarker.style.height = Math.abs(deltaY) + 'px';\n            }\n        }\n    }\n\n    onSortingChanged(ev) {\n        var $target = $(ev.target),\n            data = {\n                path: this.$el.find('[data-type=\"current-folder\"]').val()\n            };\n\n        if ($target.data('sort') == 'by') {\n            data.sortBy = $target.val();\n        }\n        else if ($target.data('sort') == 'direction') {\n            data.sortDirection = $target.val();\n        }\n\n        this.execNavigationRequest('onSetSorting', data);\n    }\n\n    onKeyDown(ev) {\n        var eventHandled = false;\n\n        switch (ev.key) {\n            case 'Enter':\n                var items = this.getSelectedItems(true, true);\n                if (items.length > 0) {\n                    this.navigateToItem($(items[0]));\n                }\n                eventHandled = true;\n            break;\n            case 'ArrowRight':\n            case 'ArrowDown':\n                this.selectRelative(true, ev.shiftKey);\n                eventHandled = true;\n            break;\n            case 'ArrowLeft':\n            case 'ArrowUp':\n                this.selectRelative(false, ev.shiftKey);\n                eventHandled = true;\n            break;\n        }\n\n        if (eventHandled) {\n            ev.preventDefault();\n            ev.stopPropagation();\n        }\n    }\n});\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/assets/js/mediamanager.popup.js",
    "content": "/*\n * Media manager popup\n */\nexport default class MediaManagerPopup\n{\n    static DEFAULTS = {\n        alias: undefined,\n        mediaFolder: null,\n        bottomToolbar: true,\n        cropAndInsertButton: false,\n        onInsert: undefined,\n        onClose: undefined\n    };\n\n    constructor(options) {\n        this.$popupRootElement = null;\n        this.$popupElement = null;\n\n        this.options = { ...MediaManagerPopup.DEFAULTS, ...options };\n\n        this.init();\n        this.show();\n    }\n\n    dispose() {\n        this.unregisterHandlers();\n\n        this.$popupRootElement.remove();\n        this.$popupRootElement = null;\n        this.$popupElement = null;\n    }\n\n    init() {\n        if (this.options.alias === undefined) {\n            throw new Error('Media Manager popup option \"alias\" is not set.');\n        }\n\n        this.$popupRootElement = $('<div/>');\n        this.registerHandlers();\n    }\n\n    registerHandlers() {\n        this.$popupRootElement.one('hide.oc.popup', this.onPopupHidden);\n        this.$popupRootElement.one('shown.oc.popup', this.onPopupShown);\n    }\n\n    unregisterHandlers() {\n        this.$popupElement.off('popupcommand', this.onPopupCommand);\n        this.$popupRootElement.off('popupcommand', this.onPopupCommand);\n    }\n\n    show() {\n        const data = {\n            bottom_toolbar: this.options.bottomToolbar ? 1 : 0,\n            crop_insert_button: this.options.cropAndInsertButton ? 1 : 0\n        };\n\n        if (this.options.mediaFolder) {\n            data.media_folder = this.options.mediaFolder;\n        }\n\n        this.$popupRootElement.popup({\n            extraData: data,\n            size: 'adaptive',\n            adaptiveHeight: true,\n            handler: this.options.alias + '::onLoadPopup'\n        });\n    }\n\n    hide() {\n        if (this.$popupElement) {\n            this.$popupElement.trigger('close.oc.popup');\n        }\n    }\n\n    getMediaManagerElement() {\n        return this.$popupElement.find('[data-control=\"media-manager\"]').get(0);\n    }\n\n    getMediaManagerControl() {\n        return oc.fetchControl(this.getMediaManagerElement(), 'media-manager');\n    }\n\n    insertMedia() {\n        const items = this.getMediaManagerControl().getSelectedItems();\n\n        if (this.options.onInsert !== undefined) {\n            this.options.onInsert.call(this, items);\n        }\n    }\n\n    insertCroppedImage(imageItem) {\n        if (this.options.onInsert !== undefined) {\n            this.options.onInsert.call(this, [imageItem]);\n        }\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    onPopupHidden = (event, element, popup) => {\n        const mediaManagerEl = this.getMediaManagerElement();\n\n        // Control will auto-dispose when removed from DOM\n        mediaManagerEl.remove();\n\n        // Release clickedElement reference inside redactor.js\n        // If we don't do it, the Media Manager popup DOM elements\n        // won't be removed from memory.\n        $(document).trigger('mousedown');\n\n        this.dispose();\n\n        if (this.options.onClose !== undefined) {\n            this.options.onClose.call(this);\n        }\n    }\n\n    onPopupShown = (event, element, popup) => {\n        this.$popupElement = popup;\n        this.$popupElement.on('popupcommand', this.onPopupCommand);\n\n        // Unfocus other form fields, otherwise all keyboard commands\n        // may the Media Manager popup translate to the form widget.\n        this.getMediaManagerControl().selectFirstItem();\n    }\n\n    onPopupCommand = (ev, command, param) => {\n        switch (command) {\n            case 'insert':\n                this.insertMedia();\n                break;\n\n            case 'insert-cropped':\n                this.insertCroppedImage(param);\n                break;\n        }\n\n        return false;\n    }\n}\n\noc.mediaManager.popup = MediaManagerPopup;\n\n// @deprecated\nif ($.oc === undefined) {\n    $.oc = {}\n}\n$.oc.mediaManager = oc.mediaManager;\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_body.php",
    "content": "<div\n    data-control=\"media-manager\"\n    class=\"control-media-manager layout\"\n    data-alias=\"<?= $this->alias ?>\"\n    data-unique-id=\"<?= $this->getId() ?>\"\n    data-delete-empty=\"<?= e(trans('backend::lang.media.delete_empty')) ?>\"\n    data-delete-confirm=\"<?= e(trans('backend::lang.media.delete_confirm')) ?>\"\n    data-move-empty=\"<?= e(trans('backend::lang.media.move_empty')) ?>\"\n    data-select-single-image=\"<?= e(trans('backend::lang.media.select_single_image')) ?>\"\n    data-selection-not-image=\"<?= e(trans('backend::lang.media.selection_not_image')) ?>\"\n    data-overwrite-confirm=\"<?= e(trans('backend::lang.media.overwrite_confirm')) ?>\"\n    data-bottom-toolbar=\"<?= $this->bottomToolbar ? 'true' : 'false' ?>\"\n    data-crop-and-insert-button=\"<?= $this->cropAndInsertButton ? 'true' : 'false' ?>\"\n    data-read-only=\"<?= $this->readOnly ? 'true' : 'false' ?>\"\n    tabindex=\"0\"\n>\n\n    <?= $this->makePartial('toolbar') ?>\n\n    <?php if ($this->checkHasPermission('mediaCreate')): ?>\n        <?= $this->makePartial('upload-progress') ?>\n    <?php endif ?>\n\n    <div class=\"layout-row whiteboard\">\n        <div class=\"layout\">\n            <div class=\"layout-row\">\n                <div class=\"layout-cell media-panel w-200 border-right\" data-media-left-sidebar>\n                    <?= $this->makePartial('left-sidebar') ?>\n                </div>\n                <div class=\"layout-cell\">\n                    <div class=\"layout\">\n\n                        <div class=\"layout-row min-size\">\n                            <?= $this->makePartial('folder-toolbar') ?>\n                        </div>\n                        <div class=\"layout-row\">\n                            <!-- Main area -->\n                            <div class=\"layout\">\n                                <div class=\"layout-row\">\n                                    <div class=\"layout\">\n                                        <!-- Main area - list -->\n                                        <div data-media-item-list>\n                                            <div class=\"control-scrollpad\">\n                                                <div class=\"scroll-wrapper\"> <!-- This element is required for the scrollpad control -->\n                                                    <div id=\"<?= $this->getId('item-list') ?>\" >\n                                                        <?= $this->makePartial('item-list') ?>\n                                                    </div>\n                                                </div>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"layout-cell w-300 media-panel border-left no-padding <?= !$sidebarVisible ? 'oc-hide' : null ?>\" data-media-preview-sidebar>\n                                            <!-- Right sidebar -->\n                                            <?= $this->makePartial('right-sidebar') ?>\n                                        </div>\n\n                                    </div>\n                                </div>\n\n                                <div class=\"layout-row min-size oc-hide\" data-media-bottom-toolbar>\n                                    <?= $this->makePartial('bottom-toolbar') ?>\n                                </div>\n                            </div>\n                        </div>\n\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <?= $this->makePartial('new-folder-form') ?>\n</div>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_bottom-toolbar.php",
    "content": "<div class=\"media-panel pb-0 border-top\">\n    <div class=\"form-buttons\">\n        <div class=\"pull-right\">\n            <button\n                type=\"button\"\n                data-command=\"popup-command\"\n                data-popup-command=\"insert\"\n                class=\"btn btn-primary\">\n                <?= e(trans('backend::lang.media.insert')) ?>\n            </button>\n\n            <?php if ($this->checkHasPermission('mediaCreate')): ?>\n                <button\n                    type=\"button\"\n                    data-command=\"popup-command\"\n                    data-popup-command=\"crop-and-insert\"\n                    class=\"btn btn-primary oc-hide\">\n                    <?= e(trans('backend::lang.media.crop_and_insert')) ?>\n                </button>\n            <?php endif ?>\n\n            <button\n                type=\"button\"\n                data-dismiss=\"popup\"\n                class=\"btn btn-secondary no-margin-right\">\n                <?= e(trans('backend::lang.form.cancel')) ?>\n            </button>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_crop-tool-image-area.php",
    "content": "<div class=\"layout\"\n    data-media-crop-tool\n    <?php if ($dimensions): ?>\n    data-image-width=\"<?= $dimensions[0] ?>\"\n    data-image-height=\"<?= $dimensions[1] ?>\"\n    <?php endif ?>\n>\n    <div class=\"layout-row min-size ruler-container horizontal oc-hide\">\n        <div class=\"layout-cell\">\n            <div class=\"layout-relative\">\n                <div class=\"ruler\" data-media-h-ruler></div>\n            </div>\n        </div>\n    </div>\n    <div class=\"layout-row\">\n        <div class=\"layout\">\n            <div class=\"layout-row\">\n                <div class=\"layout-cell ruler-container vertical oc-hide\">\n                    <div class=\"layout-relative\">\n                        <div class=\"ruler\" data-media-v-ruler></div>\n                    </div>\n                </div>\n                <div class=\"layout-cell\">\n                    <div class=\"layout-relative\">\n                        <div class=\"image_area\">\n                            <img src=\"<?= $imageUrl ?>\" style=\"max-width:none\" />\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_crop-toolbar.php",
    "content": "<?php\n    $selectionModes = [\n        Media\\Widgets\\MediaManager::SELECTION_MODE_NORMAL => trans('backend::lang.media.selection_mode_normal'),\n        Media\\Widgets\\MediaManager::SELECTION_MODE_FIXED_RATIO => trans('backend::lang.media.selection_mode_fixed_ratio'),\n        Media\\Widgets\\MediaManager::SELECTION_MODE_FIXED_SIZE => trans('backend::lang.media.selection_mode_fixed_size')\n    ];\n\n    $sizeDisabledAttr = $currentSelectionMode == Media\\Widgets\\MediaManager::SELECTION_MODE_NORMAL ? 'disabled=\"disabled\"' : null;\n?>\n\n<div class=\"control-toolbar toolbar-padded\">\n    <div class=\"toolbar-item toolbar-primary\">\n        <div data-control=\"toolbar\">\n            <label class=\"standalone\"><?= e(trans('backend::lang.media.image_size')) ?> <span data-label=\"width\"><?= $dimensions[0] ?></span> x <span data-label=\"height\"><?= $dimensions[1] ?></span></label>\n\n            <div class=\"btn-group offset-right\">\n                <button type=\"button\" class=\"btn btn-primary standalone\" data-command=\"resize\"\n                ><?= e(trans('backend::lang.media.resize')) ?></button>\n\n                <button type=\"button\" class=\"btn btn-secondary empty\" data-command=\"undo-resizing\">\n                    <i class=\"icon-text-undo\"></i>\n                </button>\n            </div>\n\n            <label for=\"mmcropimagewidth\"><?= e(trans('backend::lang.media.selection_mode')) ?></label>\n            <select name=\"selectionMode\" class=\"form-control custom-select w-150\" data-media-selection-mode>\n                <?php foreach ($selectionModes as $mode=>$name): ?>\n                    <option <?= $mode == $currentSelectionMode ? 'selected=\"selected\"' : null ?> value=\"<?= $mode ?>\"><?= e($name) ?></option>\n                <?php endforeach ?>\n            </select>\n\n            <label for=\"mmcropimagewidth\"><?= e(trans('backend::lang.media.width')) ?></label>\n            <input id=\"mmcropimagewidth\" type=\"text\" class=\"form-control w-60\" data-media-crop-width-input name=\"selectionWidth\" value=\"<?= e($currentSelectionWidth) ?>\" <?= $sizeDisabledAttr ?>/>\n\n            <label for=\"mmcropimageheight\"><?= e(trans('backend::lang.media.height')) ?></label>\n            <input id=\"mmcropimageheight\" type=\"text\" class=\"form-control w-60\" data-media-crop-height-input name=\"selectionHeight\" value=\"<?= e($currentSelectionHeight) ?>\" <?= $sizeDisabledAttr ?>/>\n\n            <label class=\"standalone oc-hide\" data-label=\"selection-size\"><?= e(trans('backend::lang.media.selected_size')) ?> <span data-label=\"selection-width\"></span> x <span data-label=\"selection-height\"></span></label>\n\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_filters.php",
    "content": "<h3 class=\"section\"><?= e(trans('backend::lang.media.display')) ?></h3>\n\n<ul class=\"nav flex-column selector-group\">\n    <li role=\"presentation\" class=\"nav-item <?= $currentFilter === Media\\Widgets\\MediaManager::FILTER_EVERYTHING ? 'active' : '' ?>\">\n        <a href=\"#\" class=\"nav-link\" data-command=\"set-filter\" data-filter=\"<?= Media\\Widgets\\MediaManager::FILTER_EVERYTHING ?>\">\n            <i class=\"icon-recycle\"></i>\n\n            <?= e(trans('backend::lang.media.filter_everything')) ?>\n        </a>\n    </li>\n    <li role=\"presentation\" class=\"nav-item <?= $currentFilter === Media\\Classes\\MediaLibraryItem::FILE_TYPE_IMAGE ? 'active' : '' ?>\">\n        <a href=\"#\" class=\"nav-link\" data-command=\"set-filter\" data-filter=\"<?= Media\\Classes\\MediaLibraryItem::FILE_TYPE_IMAGE ?>\">\n            <i class=\"icon-photo\"></i>\n\n            <?= e(trans('backend::lang.media.filter_images')) ?>\n        </a>\n    </li>\n    <li role=\"presentation\" class=\"nav-item <?= $currentFilter === Media\\Classes\\MediaLibraryItem::FILE_TYPE_VIDEO ? 'active' : '' ?>\">\n        <a href=\"#\" class=\"nav-link\" data-command=\"set-filter\" data-filter=\"<?= Media\\Classes\\MediaLibraryItem::FILE_TYPE_VIDEO ?>\">\n            <i class=\"icon-video-camera\"></i>\n\n            <?= e(trans('backend::lang.media.filter_video')) ?>\n        </a>\n    </li>\n    <li role=\"presentation\" class=\"nav-item <?= $currentFilter === Media\\Classes\\MediaLibraryItem::FILE_TYPE_AUDIO ? 'active' : '' ?>\">\n        <a href=\"#\" class=\"nav-link\" data-command=\"set-filter\" data-filter=\"<?= Media\\Classes\\MediaLibraryItem::FILE_TYPE_AUDIO ?>\">\n            <i class=\"icon-volume-up\"></i>\n\n            <?= e(trans('backend::lang.media.filter_audio')) ?>\n        </a>\n    </li>\n    <li role=\"presentation\" class=\"nav-item <?= $currentFilter === Media\\Classes\\MediaLibraryItem::FILE_TYPE_DOCUMENT ? 'active' : '' ?>\">\n        <a href=\"#\" class=\"nav-link\" data-command=\"set-filter\" data-filter=\"<?= Media\\Classes\\MediaLibraryItem::FILE_TYPE_DOCUMENT ?>\">\n            <i class=\"icon-file\"></i>\n\n            <?= e(trans('backend::lang.media.filter_documents')) ?>\n        </a>\n    </li>\n</ul>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_folder-path.php",
    "content": "<ul class=\"tree-path\">\n    <li class=\"root\"><a href=\"javascript:;\" data-type=\"media-item\" data-item-type=\"folder\" data-path=\"/\" data-clear-search=\"true\"><?= e(trans('backend::lang.media.library')) ?></a></li>\n\n    <?php if (!$searchMode): ?>\n        <?php foreach ($pathSegments as $folder => $path): ?>\n            <?php if ($path != '/'): ?>\n                <li><a href=\"javascript:;\" data-type=\"media-item\" data-item-type=\"folder\" data-path=\"<?= e($path) ?>\"><?= basename($folder) ?></a></li>\n            <?php endif ?>\n        <?php endforeach?>\n    <?php else: ?>\n        <li><a href=\"javascript:;\" data-type=\"media-item\"><?= e(trans('backend::lang.media.search')) ?></a></li>\n    <?php endif ?>\n</ul>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_folder-toolbar.php",
    "content": "<div class=\"media-panel padding-less border-bottom\">\n    <div class=\"layout\">\n        <div class=\"layout-cell\">\n            <div class=\"layout-row\" id=\"<?= $this->getId('folder-path') ?>\">\n                <?= $this->makePartial('folder-path') ?>\n            </div>\n        </div>\n        <div class=\"layout-cell\">\n            <button\n                type=\"button\"\n                data-command=\"toggle-sidebar\"\n                class=\"oc-icon-sign-out btn-icon pull-right larger <?= !$sidebarVisible ? 'sidebar-hidden' : null ?>\">\n            </button>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_generic-list.php",
    "content": "<?php\n    $listElementId = $this->getId('item-list');\n?>\n\n<ul class=\"media-list <?= $listClass ?>\">\n    <?php if (count($items) > 0 || !$isRootFolder): ?>\n        <?php if (!$isRootFolder && !$searchMode): ?>\n            <li tabindex=\"0\" data-type=\"media-item\" data-item-type=\"folder\" data-root data-path=\"<?= e(dirname($currentFolder)) ?>\">\n                <div class=\"icon-container folder\">\n                    <div class=\"icon-wrapper\"><i class=\"icon-folder\"></i></div>\n                </div>\n                <div class=\"info\">\n                    <h4 title=\"<?= e(trans('backend::lang.media.return_to_parent')) ?>\"><?= e(trans('backend::lang.media.return_to_parent_label')) ?></h4>\n                </div>\n            </li>\n        <?php endif ?>\n\n        <?php foreach ($items as $item): ?>\n            <?php\n                $itemType = $item->getFileType();\n            ?>\n            <li data-type=\"media-item\"\n                data-item-type=\"<?= $item->type ?>\"\n                data-path=\"<?= e($item->path) ?>\"\n                data-title=\"<?= e(basename($item->path)) ?>\"\n                data-size=\"<?= e($item->sizeToString()) ?>\"\n                data-last-modified=\"<?= e($item->lastModifiedAsString()) ?>\"\n                data-last-modified-ts=\"<?= $item->lastModified ?>\"\n                data-public-url=\"<?= e($item->publicUrl) ?>\"\n                data-document-type=\"<?= e($itemType) ?>\"\n                data-folder=\"<?= e(dirname($item->path)) ?>\"\n                tabindex=\"0\"\n            >\n                <?= $this->makePartial('item-icon', ['itemType'=>$itemType, 'item'=>$item]) ?>\n\n                <div class=\"info\">\n                    <h4 title=\"<?= e(basename($item->path)) ?>\">\n                        <?= e(basename($item->path)) ?>\n\n                        <?php if ($this->checkHasPermission('mediaDelete')): ?>\n                            <a\n                                href=\"#\"\n                                data-rename\n                                data-control=\"popup\"\n                                data-request-data=\"path: '<?= e($item->path) ?>', listId: '<?= $listElementId ?>', type: '<?= $item->type ?>'\"\n                                data-handler=\"<?= $this->getEventHandler('onLoadRenamePopup') ?>\"\n                            ><i data-rename-control class=\"icon-terminal\"></i></a>\n                        <?php endif ?>\n                    </h4>\n                    <p class=\"size\"><?= e($item->sizeToString()) ?></p>\n                </div>\n            </li>\n        <?php endforeach ?>\n    <?php endif ?>\n\n    <?php if (count($items) == 0 && $searchMode): ?>\n        <li class=\"no-data\">\n            <?= e(trans('backend::lang.media.no_files_found')) ?>\n        </li>\n    <?php endif ?>\n</ul>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_image-crop-popup-body.php",
    "content": "<?= Form::open(['class'=>'layout', 'onsubmit'=>'return false']) ?>\n    <div class=\"layout-row min-size\">\n        <?= $this->makePartial('crop-toolbar') ?>\n    </div>\n    <div class=\"layout-row whiteboard\">\n        <?= $this->makePartial('crop-tool-image-area') ?>\n    </div>\n    <div class=\"layout-row min-size whiteboard\">\n        <div class=\"media-panel pb-0 border-top\">\n            <div class=\"form-buttons\">\n                <div class=\"pull-right\">\n                    <button\n                        type=\"button\"\n                        data-command=\"insert\"\n                        class=\"btn btn-primary\">\n                        <?= e(trans('backend::lang.media.crop_and_insert')) ?>\n                    </button>\n\n                    <button\n                        type=\"button\"\n                        data-dismiss=\"popup\"\n                        class=\"btn btn-secondary no-margin-right\">\n                        <?= e(trans('backend::lang.form.cancel')) ?>\n                    </button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <input type=\"hidden\" name=\"cropSessionKey\" value=\"<?= e($cropSessionKey) ?>\">\n    <input type=\"hidden\" name=\"path\" value=\"<?= e($path) ?>\">\n\n    <input type=\"hidden\" data-media-dimension-width value=\"<?= $dimensions[0] ?>\">\n    <input type=\"hidden\" data-media-dimension-height value=\"<?= $dimensions[1] ?>\">\n\n    <input type=\"hidden\" data-media-original-width value=\"<?= $dimensions[0] ?>\">\n    <input type=\"hidden\" data-media-original-height value=\"<?= $dimensions[1] ?>\">\n\n    <input type=\"hidden\" data-media-original-ratio value=\"<?= $originalRatio ?>\">\n    <input type=\"hidden\" data-media-original-url value=\"<?= e($imageUrl) ?>\">\n\n    <?= $this->makePartial('resize-image-form') ?>\n<?= Form::close() ?>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_item-icon.php",
    "content": "<div class=\"icon-container <?= $itemType ?>\">\n    <div class=\"icon-wrapper\"><i class=\"<?= $this->itemTypeToIconClass($item, $itemType) ?>\"></i></div>\n\n    <?php if ($itemType == Media\\Classes\\MediaLibraryItem::FILE_TYPE_IMAGE):\n        $thumbnailPath = $this->thumbnailExists($thumbnailParams, $item->path, $item->lastModified);\n    ?>\n        <div>\n            <?php if (!$thumbnailPath): ?>\n                <div class=\"image-placeholder\"\n                    data-width=\"<?= $thumbnailParams['width'] ?>\"\n                    data-height=\"<?= $thumbnailParams['height'] ?>\"\n                    data-path=\"<?= e($item->path) ?>\"\n                    data-last-modified=\"<?= $item->lastModified ?>\"\n                    id=\"<?= $this->getPlaceholderId($item) ?>\"\n                >\n                    <div class=\"icon-wrapper\"><i class=\"<?= $this->itemTypeToIconClass($item, $itemType) ?>\"></i></div>\n                </div>\n            <?php else: ?>\n                <?= $this->makePartial('thumbnail-image', [\n                    'isError' => $this->thumbnailIsError($thumbnailPath),\n                    'imageUrl' => $this->getThumbnailImageUrl($thumbnailPath)\n                ]) ?>\n            <?php endif ?>\n        </div>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_item-list.php",
    "content": "<div class=\"media-panel no-padding <?= $viewMode === Media\\Widgets\\MediaManager::VIEW_MODE_GRID ? '' : 'padding-top' ?>\">\n    <input type=\"hidden\" data-type=\"current-folder\" value=\"<?= e($currentFolder) ?>\"/>\n    <input type=\"hidden\" data-type=\"search-mode\" value=\"<?= $searchMode ? 'true' : 'false' ?>\"/>\n    <div class=\"list-container\">\n        <?php if (count($items) === 0 && $isRootFolder && !$searchMode): ?>\n            <div class=\"empty-library\"><?= e(trans('backend::lang.media.empty_library')) ?></div>\n        <?php endif ?>\n\n        <?php if ($viewMode === Media\\Widgets\\MediaManager::VIEW_MODE_GRID): ?>\n            <?= $this->makePartial('list-grid') ?>\n        <?php elseif ($viewMode === Media\\Widgets\\MediaManager::VIEW_MODE_LIST): ?>\n            <?= $this->makePartial('list-list') ?>\n        <?php else: ?>\n            <?= $this->makePartial('list-tiles') ?>\n        <?php endif ?>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_item-sidebar-preview.php",
    "content": "<div data-media-preview-container></div>\n\n<script type=\"text/template\" data-media-audio-template>\n    <div class=\"media-panel pb-0\">\n        <audio src=\"{src}\" controls>\n            <div class=\"media-player-fallback panel-embedded\">Your browser doesn't support HTML5 audio.</div>\n        </audio>\n    </div>\n</script>\n\n<script type=\"text/template\" data-media-video-template>\n    <video src=\"{src}\" controls preload=\"metadata\">\n        <div class=\"media-panel media-player-fallback\">Your browser doesn't support HTML5 video.</div>\n    </video>\n</script>\n\n<script type=\"text/template\" data-media-image-template>\n    <div class=\"sidebar-image-placeholder-container\"><div class=\"sidebar-image-placeholder\" data-path=\"{path}\" data-last-modified=\"{last-modified}\" data-loading=\"true\" data-media-sidebar-thumbnail></div></div>\n</script>\n\n<script type=\"text/template\" data-media-no-selection-template>\n    <div class=\"sidebar-image-placeholder-container\">\n        <div class=\"sidebar-image-placeholder no-border\">\n            <i class=\"icon-crop\"></i>\n            <p><?= e(trans('backend::lang.media.nothing_selected')) ?></p>\n        </div>\n    </div>\n</script>\n\n<script type=\"text/template\" data-media-multi-selection-template>\n    <div class=\"sidebar-image-placeholder-container\">\n        <div class=\"sidebar-image-placeholder no-border\">\n            <i class=\"icon-asterisk\"></i>\n            <p><?= e(trans('backend::lang.media.multiple_selected')) ?></p>\n        </div>\n    </div>\n</script>\n\n<script type=\"text/template\" data-media-go-up>\n    <div class=\"sidebar-image-placeholder-container\">\n        <div class=\"sidebar-image-placeholder no-border\">\n            <i class=\"icon-level-up\"></i>\n            <p><?= e(trans('backend::lang.media.return_to_parent')) ?></p>\n        </div>\n    </div>\n</script>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_left-sidebar.php",
    "content": "<div id=\"<?= $this->getId('filters') ?>\">\n    <?= $this->makePartial('filters') ?>\n</div>\n\n<?= $this->makePartial('sorting') ?>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_list-grid.php",
    "content": "<?php\n    $listElementId = $this->getId('item-list');\n?>\n\n<table class=\"table data\">\n    <col />\n    <col width=\"130px\" />\n    <col width=\"130px\" />\n\n    <tbody class=\"icons clickable\">\n        <?php if (count($items) > 0 || !$isRootFolder): ?>\n            <?php if (!$isRootFolder && !$searchMode): ?>\n                <tr data-type=\"media-item\" data-item-type=\"folder\" data-root data-path=\"<?= e(dirname($currentFolder)) ?>\" tabindex=\"0\">\n                    <td><i class=\"icon-folder\"></i>..</td>\n                    <td></td>\n                    <td></td>\n                </tr>\n            <?php endif ?>\n\n            <?php foreach ($items as $item):\n                $itemType = $item->getFileType();\n            ?>\n                <tr data-type=\"media-item\"\n                    data-item-type=\"<?= $item->type ?>\"\n                    data-path=\"<?= e($item->path) ?>\"\n                    data-title=\"<?= e(basename($item->path)) ?>\"\n                    data-size=\"<?= e($item->sizeToString()) ?>\"\n                    data-last-modified=\"<?= e($item->lastModifiedAsString()) ?>\"\n                    data-last-modified-ts=\"<?= $item->lastModified ?>\"\n                    data-public-url=\"<?= e($item->publicUrl) ?>\"\n                    data-document-type=\"<?= e($itemType) ?>\"\n                    data-folder=\"<?= e(dirname($item->path)) ?>\"\n                    tabindex=\"0\"\n                >\n                    <td>\n                        <div class=\"item-title no-wrap-text\">\n                            <i class=\"<?= $this->itemTypeToIconClass($item, $itemType) ?>\"></i> <?= e(basename($item->path)) ?>\n\n                            <?php if ($this->checkHasPermission('mediaDelete')): ?>\n                                <a\n                                    href=\"#\"\n                                    data-rename\n                                    data-control=\"popup\"\n                                    data-request-data=\"path: '<?= e($item->path) ?>', listId: '<?= $listElementId ?>', type: '<?= $item->type ?>'\"\n                                    data-handler=\"<?= $this->getEventHandler('onLoadRenamePopup') ?>\"\n                                ><i data-rename-control class=\"icon-terminal\"></i></a>\n                            <?php endif ?>\n                        </div>\n                    </td>\n                    <td><?= e($item->sizeToString()) ?></td>\n                    <td><?= e($item->lastModifiedAsString()) ?></td>\n                    <?php if ($searchMode): ?>\n                        <td title=\"<?= e(dirname($item->path)) ?>\">\n                            <div class=\"no-wrap-text\"><?= e(dirname($item->path)) ?></div>\n                        </td>\n                    <?php endif ?>\n                </tr>\n            <?php endforeach ?>\n        <?php endif ?>\n    </tbody>\n</table>\n\n<?php if (count($items) == 0 && $searchMode): ?>\n    <p class=\"no-data\">\n        <?= e(trans('backend::lang.media.no_files_found')) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_list-list.php",
    "content": "<?= $this->makePartial('generic-list', ['listClass'=>'list']) ?>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_list-tiles.php",
    "content": "<?= $this->makePartial('generic-list', ['listClass'=>'tiles']) ?>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_move-form.php",
    "content": "<?= Form::open() ?>\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= e(trans('backend::lang.media.move_popup_title')) ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n    <div class=\"modal-body\">\n        <div class=\"form-group\">\n            <label class=\"form-label\"><?= e(trans('backend::lang.media.move_destination')) ?></label>\n            <select\n                class=\"form-control custom-select\"\n                name=\"dest\"\n                data-placeholder=\"<?= e(trans('cms::lang.asset.move_please_select')) ?>\">\n                <option></option>\n                <?php foreach ($folders as $path=>$folder):?>\n                    <option value=\"<?= e($path) ?>\"><?= e($folder) ?></option>\n                <?php endforeach ?>\n            </select>\n\n            <input type=\"hidden\" name=\"originalPath\" value=\"<?= e($originalPath) ?>\" />\n        </div>\n    </div>\n    <div class=\"modal-footer\">\n        <button\n            type=\"submit\"\n            class=\"btn btn-primary\">\n            <?= e(trans('cms::lang.asset.move_button')) ?>\n        </button>\n        <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            data-dismiss=\"popup\">\n            <?= e(trans('backend::lang.form.cancel')) ?>\n        </button>\n    </div>\n</form>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_new-folder-form.php",
    "content": "<script type=\"text/template\" data-media-new-folder-template>\n    <?= Form::open() ?>\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e(trans('backend::lang.media.new_folder_title')) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n        <div class=\"modal-body\">\n            <div class=\"form-group\">\n                <label class=\"form-label\"><?= e(trans('backend::lang.media.folder_name')) ?></label>\n                <input\n                    type=\"text\"\n                    class=\"form-control\"\n                    name=\"name\"\n                    value=\"\"\n                    autocomplete=\"off\" />\n            </div>\n        </div>\n        <div class=\"modal-footer\">\n            <button\n                type=\"submit\"\n                class=\"btn btn-primary\">\n                <?= e(trans('backend::lang.form.apply')) ?>\n            </button>\n            <button\n                type=\"button\"\n                class=\"btn btn-secondary\"\n                data-dismiss=\"popup\">\n                <?= e(trans('backend::lang.form.cancel')) ?>\n            </button>\n        </div>\n    </form>\n</script>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_popup-body.php",
    "content": "<?= Form::open(['class'=>'layout', 'onsubmit'=>'return false']) ?>\n    <?= $this->render() ?>\n<?= Form::close() ?>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_rename-form.php",
    "content": "<?= Form::ajax($this->getEventHandler('onApplyName'), [\n    'success' => \"$(this).trigger('close.oc.popup'); \\$('#\".$listId.\"').trigger('mediarefresh');\",\n    'data-stripe-load-indicator' => 1,\n    'id' => 'media-rename-popup-form'\n]) ?>\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= e(trans('cms::lang.asset.rename_popup_title')) ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n    <div class=\"modal-body\">\n        <div class=\"form-group\">\n            <label class=\"form-label\"><?= e(trans('cms::lang.asset.rename_new_name')) ?></label>\n            <input\n                type=\"text\"\n                name=\"name\"\n                value=\"<?= e($name) ?>\"\n                class=\"form-control\"\n                autocomplete=\"off\"\n                default-focus />\n        </div>\n\n        <input type=\"hidden\" name=\"originalName\" value=\"<?= e($name) ?>\" />\n        <input type=\"hidden\" name=\"type\" value=\"<?= e($type) ?>\" />\n        <input type=\"hidden\" name=\"originalPath\" value=\"<?= e($originalPath) ?>\" />\n    </div>\n    <div class=\"modal-footer\">\n        <button\n            type=\"submit\"\n            class=\"btn btn-primary\">\n            <?= e(trans('backend::lang.form.apply')) ?>\n        </button>\n        <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            data-dismiss=\"popup\">\n            <?= e(trans('backend::lang.form.cancel')) ?>\n        </button>\n    </div>\n    <script>\n        setTimeout(\n            function(){ $('#media-rename-popup-form input.form-control').focus() },\n            310\n        )\n\n        $('#media-rename-popup-form').on('oc.beforeRequest', function(ev){\n            var originalName = $('#media-rename-popup-form [name=originalName]').val(),\n                newName = $.trim($('#media-rename-popup-form [name=name]').val())\n\n            if (originalName == newName || newName.length == 0) {\n                alert('Please enter a new name')\n\n                ev.preventDefault()\n            }\n        })\n    </script>\n<?= Form::close() ?>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_resize-image-form.php",
    "content": "<script type=\"text/template\" data-media-resize-template>\n    <?= Form::open() ?>\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e(trans('backend::lang.media.resize_image')) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n        <div class=\"modal-body\">\n            <div class=\"form-group span-left\">\n                <label class=\"form-label\"><?= e(trans('backend::lang.media.width')) ?></label>\n                <input type=\"text\" class=\"form-control\" name=\"width\" value=\"\" />\n            </div>\n            <div class=\"form-group span-right\">\n                <label class=\"form-label\"><?= e(trans('backend::lang.media.height')) ?></label>\n                <input type=\"text\" class=\"form-control\" name=\"height\" value=\"\" />\n            </div>\n        </div>\n        <div class=\"modal-footer\">\n            <button\n                type=\"submit\"\n                class=\"btn btn-primary\">\n                <?= e(trans('backend::lang.form.apply')) ?>\n            </button>\n            <button\n                type=\"button\"\n                class=\"btn btn-secondary\"\n                data-dismiss=\"popup\">\n                <?= e(trans('backend::lang.form.cancel')) ?>\n            </button>\n        </div>\n    </form>\n</script>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_right-sidebar.php",
    "content": "<?= $this->makePartial('item-sidebar-preview') ?>\n\n<div class=\"media-panel oc-hide\" data-media-sidebar-labels>\n    <label><?= e(trans('backend::lang.media.title')) ?></label>\n    <p data-label=\"title\"></p>\n\n    <table class=\"name-value-list\">\n        <tr>\n            <th><?= e(trans('backend::lang.media.size')) ?></th>\n            <td data-label=\"size\"></td>\n        </tr>\n        <tr>\n            <th><?= e(trans('backend::lang.media.public_url')) ?></th>\n            <td><a href=\"#\" data-label=\"public-url\" target=\"_blank\"><?= e(trans('backend::lang.media.click_here')) ?></a></td>\n        </tr>\n        <tr data-media-last-modified>\n            <th><?= e(trans('backend::lang.media.last_modified')) ?></th>\n            <td data-label=\"last-modified\"></td>\n        </tr>\n\n        <tr data-media-item-folder class=\"oc-hide\">\n            <th><?= e(trans('backend::lang.media.folder')) ?></th>\n            <td><a href=\"#\" data-type=\"media-item\" data-item-type=\"folder\" data-label=\"folder\" data-clear-search=\"true\"></a></td>\n        </tr>\n    </table>\n</div>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_sorting.php",
    "content": "<?php\n    $sortModes = [\n        Media\\Classes\\MediaLibrary::SORT_BY_TITLE => trans('backend::lang.media.title'),\n        Media\\Classes\\MediaLibrary::SORT_BY_SIZE => trans('backend::lang.media.size'),\n        Media\\Classes\\MediaLibrary::SORT_BY_MODIFIED => trans('backend::lang.media.last_modified')\n    ];\n\n    $sortDirections = [\n        Media\\Classes\\MediaLibrary::SORT_DIRECTION_ASC => trans('backend::lang.media.direction_asc'),\n        Media\\Classes\\MediaLibrary::SORT_DIRECTION_DESC => trans('backend::lang.media.direction_desc')\n    ];\n?>\n\n<div class=\"sidebar-group\">\n    <h3 class=\"section\"><?= e(trans('backend::lang.media.order_by')) ?></h3>\n\n    <select\n        name=\"sorting\"\n        class=\"form-control custom-select select-no-search\"\n        data-media-sorting\n        data-sort=\"by\">\n        <?php foreach ($sortModes as $code=>$title): ?>\n            <option\n                <?= $code == $sortBy ? 'selected=\"selected\"' : '' ?>\n                value=\"<?= $code ?>\"\n            ><?= e($title) ?></option>\n        <?php endforeach ?>\n    </select>\n</div>\n\n<div class=\"sidebar-group\">\n    <h3 class=\"section\"><?= e(trans('backend::lang.media.direction')) ?></h3>\n\n    <select\n        name=\"sorting\"\n        class=\"form-control custom-select select-no-search\"\n        data-media-sorting\n        data-sort=\"direction\">\n        <?php foreach ($sortDirections as $code=>$title): ?>\n            <option\n                <?= $code == $sortDirection ? 'selected=\"selected\"' : '' ?>\n                value=\"<?= $code ?>\"\n            ><?= e($title) ?></option>\n        <?php endforeach ?>\n    </select>\n</div>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_thumbnail-image.php",
    "content": "<?php if (!$isError): ?>\n    <img src=\"<?= $imageUrl ?>\"/>\n<?php else: ?>\n    <i class=\"icon-chain-broken\" title=\"<?= e(trans('backend::lang.media.thumbnail_error')) ?>\"></i>\n    <p class=\"thumbnail-error-message\"><?= e(trans('backend::lang.media.thumbnail_error')) ?></p>\n<?php endif ?>"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_toolbar.php",
    "content": "<div class=\"layout-row min-size\">\n    <div class=\"control-toolbar toolbar-padded\">\n        <div class=\"toolbar-item toolbar-primary\">\n            <div data-control=\"toolbar\">\n                <?php if ($this->checkHasPermission('mediaCreate')): ?>\n                    <div class=\"btn-group offset-right\">\n                        <button type=\"button\" class=\"btn btn-primary oc-icon-upload\" data-media-upload\n                            ><?= e(trans('backend::lang.media.upload')) ?></button>\n                        <button type=\"button\" class=\"btn btn-primary oc-icon-folder\" data-command=\"create-folder\"><?= e(trans('backend::lang.media.add_folder')) ?></button>\n                    </div>\n                <?php endif ?>\n\n                <button type=\"button\" class=\"btn btn-secondary oc-icon-refresh empty offset-right\" data-command=\"refresh\"></button>\n\n                <?php if ($this->checkHasPermission('mediaDelete')): ?>\n                    <div class=\"btn-group offset-right\">\n                        <button type=\"button\" class=\"btn btn-secondary oc-icon-mail-reply-all\" data-command=\"move\"\n                            ><?= e(trans('backend::lang.media.move')) ?></button>\n                        <button type=\"button\" class=\"btn btn-secondary oc-icon-trash\" data-command=\"delete\"\n                            ><?= e(trans('backend::lang.media.delete')) ?></button>\n                    </div>\n                <?php endif ?>\n\n                <div class=\"btn-group offset-right\" id=\"<?= $this->getId('view-mode-buttons') ?>\">\n                    <?= $this->makePartial('view-mode-buttons') ?>\n                </div>\n            </div>\n        </div>\n        <div class=\"toolbar-item\" data-calculate-width>\n            <div class=\"relative loading-indicator-container size-input-text\">\n                <div class=\"search-input-container storm-icon-pseudo\">\n                    <input\n                        type=\"text\"\n                        name=\"search\"\n                        value=\"<?= e($searchTerm) ?>\"\n                        class=\"form-control is-growable is-searchable\"\n                        placeholder=\"<?= e(trans('backend::lang.media.search')) ?>\"\n                        data-media-search\n                        autocomplete=\"off\"\n                        data-load-indicator\n                        data-load-indicator-opaque\n                    />\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_upload-progress.php",
    "content": "<div class=\"layout-row min-size oc-hide\" data-media-upload-ui>\n    <div class=\"layout\">\n        <div class=\"upload-progress\">\n            <h5\n                data-label=\"file-number-and-progress\"\n                data-message-template=\"<?= e(trans('backend::lang.media.uploading_file_num')) ?> &lt;span&gt;:percents&lt;/span&gt;\"\n                data-success-template=\"<?= e(trans('backend::lang.media.uploading_complete')) ?>\"\n                data-error-template=\"<?= e(trans('backend::lang.media.uploading_error')) ?>\"\n            ></h5>\n\n            <div class=\"progress-controls\">\n                <div class=\"progress mb-4\" style=\"height: 10px\">\n                    <div class=\"progress-bar\" role=\"progressbar\" style=\"width: 0;\" data-media-upload-progress-bar>\n                    </div>\n                </div>\n\n                <div class=\"controls\">\n                    <a href=\"#\" data-command=\"cancel-uploading\"><i class=\"icon-times-circle\" title=\"\"></i></a>\n                    <a class=\"oc-hide\" href=\"#\" data-command=\"close-uploader\"><i class=\"icon-check-circle\" title=\"\"></i></a>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/media/widgets/mediamanager/partials/_view-mode-buttons.php",
    "content": "<button\n    type=\"button\"\n    class=\"btn btn-secondary oc-icon-align-justify empty <?= $viewMode == Media\\Widgets\\MediaManager::VIEW_MODE_GRID ? 'active' : '' ?>\"\n    data-command=\"change-view\"\n    data-view=\"<?= Media\\Widgets\\MediaManager::VIEW_MODE_GRID ?>\">\n</button>\n<button\n    type=\"button\"\n    class=\"btn btn-secondary oc-icon-th empty <?= $viewMode == Media\\Widgets\\MediaManager::VIEW_MODE_LIST ? 'active' : '' ?>\"\n    data-command=\"change-view\"\n    data-view=\"<?= Media\\Widgets\\MediaManager::VIEW_MODE_LIST ?>\">\n</button>\n<button\n    type=\"button\"\n    class=\"btn btn-secondary oc-icon-th-large empty <?= $viewMode == Media\\Widgets\\MediaManager::VIEW_MODE_TILES ? 'active' : '' ?>\"\n    data-command=\"change-view\"\n    data-view=\"<?= Media\\Widgets\\MediaManager::VIEW_MODE_TILES ?>\">\n</button>\n"
  },
  {
    "path": "modules/system/ServiceProvider.php",
    "content": "<?php namespace System;\n\nuse Db;\nuse Site;\nuse Event;\nuse Config;\nuse Schema;\nuse System;\nuse Backend;\nuse System\\Models\\EventLog;\nuse System\\Models\\MailSetting;\nuse System\\Classes\\MailManager;\nuse System\\Classes\\ErrorHandler;\nuse System\\Classes\\PluginManager;\nuse System\\Classes\\SettingsManager;\nuse System\\Twig\\Engine as TwigEngine;\nuse System\\Twig\\Loader as TwigLoader;\nuse System\\Twig\\Extension as TwigExtension;\nuse System\\Twig\\SecurityPolicy as TwigSecurityPolicy;\nuse October\\Rain\\Support\\ModuleServiceProvider;\nuse Illuminate\\Pagination\\Paginator;\nuse Twig\\Environment as TwigEnvironment;\n\n/**\n * ServiceProvider for System module\n */\nclass ServiceProvider extends ModuleServiceProvider\n{\n    /**\n     * register the service provider.\n     */\n    public function register()\n    {\n        parent::register('system');\n\n        $this->registerSingletons();\n        $this->registerErrorHandler();\n        $this->registerLogging();\n        $this->registerTwigParser();\n        $this->registerValidator();\n        $this->registerManifest();\n        $this->registerConsole();\n        $this->extendViewService();\n        $this->extendMailerService();\n\n        // Register other module providers\n        foreach (System::listModules() as $module) {\n            if ($module !== 'System' && class_exists($spClass = '\\\\' . $module . '\\ServiceProvider')) {\n                $this->app->register($spClass);\n            }\n        }\n\n        // Register all plugins\n        PluginManager::instance()->registerFromProvider();\n\n        // Register app service provider\n        if (class_exists(\\App\\Provider::class)) {\n            $this->app->register(\\App\\Provider::class);\n        }\n\n        // Backend specific\n        if ($this->app->runningInBackend() || $this->app->runningInOctane()) {\n            $this->extendBackendNavigation();\n            $this->extendBackendSettings();\n        }\n    }\n\n    /**\n     * boot the module events.\n     */\n    public function boot()\n    {\n        $this->bootOctaneResets();\n\n        // Fix UTF8MB4 support for MariaDB < 10.2 and MySQL < 5.7\n        $this->applyDatabaseDefaultStringLength();\n\n        // Fix use of Storage::url() for local disks that haven't been configured correctly\n        foreach (Config::get('filesystems.disks') as $key => $config) {\n            if (\n                isset($config['driver']) &&\n                $config['driver'] === 'local' &&\n                isset($config['root']) &&\n                ends_with($config['root'], '/storage/app') &&\n                empty($config['url'])\n            ) {\n                Config::set(\"filesystems.disks.$key.url\", '/storage/app');\n            }\n        }\n\n        // Set pagination views\n        Paginator::defaultView('system::pagination.default');\n        Paginator::defaultSimpleView('system::pagination.simple');\n\n        // Boot plugins\n        PluginManager::instance()->bootFromProvider();\n\n        parent::boot('system');\n    }\n\n    /**\n     * registerSingletons\n     */\n    protected function registerSingletons()\n    {\n        $this->app->singleton('system.cacher', \\System\\Helpers\\Cache::class);\n        $this->app->singleton('system.helper', \\System\\Helpers\\System::class);\n        $this->app->singleton('system.manifest', \\System\\Classes\\ManifestCache::class);\n        $this->app->singleton('system.preset', \\System\\Classes\\PresetManager::class);\n        $this->app->singleton('system.ui', \\System\\Classes\\UiFactory::class);\n        $this->app->singleton('system.sites', \\System\\Classes\\SiteManager::class);\n        $this->app->singleton('system.resizer', \\System\\Classes\\ResizeImages::class);\n        $this->app->singleton('system.combiner', \\System\\Classes\\CombineAssets::class);\n        $this->app->singleton('system.mailer', \\System\\Classes\\MailManager::class);\n        $this->app->singleton('system.updater', \\System\\Classes\\UpdateManager::class);\n        $this->app->singleton('system.versions', \\System\\Classes\\VersionManager::class);\n        $this->app->singleton('system.plugins', \\System\\Classes\\PluginManager::class);\n        $this->app->singleton('core.translate.attribute', fn() => \\System\\Models\\TranslateAttribute::class);\n        $this->app->scoped('system.markup', \\System\\Classes\\MarkupManager::class);\n        $this->app->scoped('system.settings', \\System\\Classes\\SettingsManager::class);\n    }\n\n    /**\n     * registerMarkupTags\n     */\n    public function registerMarkupTags()\n    {\n        return [\n            'functions' => [\n                // Escaped Functions\n                'input' => 'input',\n                'post' => 'post',\n                'get' => 'get',\n                'form_value' => [\\Form::class, 'value'],\n\n                // Raw Functions\n                'link_to' => ['link_to', false],\n                'link_to_asset' => ['link_to_asset', false],\n                'link_to_route' => ['link_to_route', false],\n                'link_to_action' => ['link_to_action', false],\n                'array_only' => ['array_only', false],\n                'array_except' => ['array_except', false],\n                'asset' => ['asset', false],\n                'action' => ['action', false],\n                'url' => ['url', false],\n                'route' => ['route', false],\n                'secure_url' => ['secure_url', false],\n                'secure_asset' => ['secure_asset', false],\n                'html_email' => [\\Html::class, 'email', false],\n                'html_mailto' => [\\Html::class, 'mailto', false],\n\n                // Escaped Classes\n                'str_*' => [\\Str::class, '*'],\n                'html_*' => [\\Html::class, '*'],\n\n                // Raw Classes\n                'url_*' => [\\Url::class, '*', false],\n                'form_*' => [\\Form::class, '*', false],\n                'form_macro' => [\\Form::class, '__call', false],\n            ],\n            'filters' => [\n                // Escaped Functions\n                'str_replace' => [fn(...$args) => \\Str::replace($args[1] ?? '', $args[2] ?? '', $args[0] ?? '')],\n                'str_replace_first' => [fn(...$args) => \\Str::replaceFirst($args[1] ?? '', $args[2] ?? '', $args[0] ?? '')],\n                'str_replace_last' => [fn(...$args) => \\Str::replaceLast($args[1] ?? '', $args[2] ?? '', $args[0] ?? '')],\n                'str_replace_array' => [fn(...$args) => \\Str::replaceArray($args[1] ?? '', $args[2] ?? [], $args[0] ?? '')],\n\n                // Escaped Classes\n                'str_*' => [\\Str::class, '*'],\n\n                // Raw Classes\n                'url_*' => [\\Url::class, '*', false],\n                'html_*' => [\\Html::class, '*', false],\n                'slug' => [\\Str::class, 'slug', false],\n                'plural' => [\\Str::class, 'plural', false],\n                'singular' => [\\Str::class, 'singular', false],\n                'finish' => [\\Str::class, 'finish', false],\n                'snake' => [\\Str::class, 'snake', false],\n                'camel' => [\\Str::class, 'camel', false],\n                'studly' => [\\Str::class, 'studly', false],\n                'md' => [\\Markdown::class, 'parse', false],\n                'md_safe' => [\\Markdown::class, 'parseSafe', false],\n                'md_clean' => [\\Markdown::class, 'parseClean', false],\n                'md_indent' => [\\Markdown::class, 'parseIndent', false],\n                'time_since' => [\\System\\Helpers\\DateTime::class, 'timeSince', false],\n                'time_tense' => [\\System\\Helpers\\DateTime::class, 'timeTense', false],\n            ]\n        ];\n    }\n\n    /**\n     * registerManifest\n     */\n    protected function registerManifest()\n    {\n        $this->app->after(function() {\n            $this->app->make('system.manifest')->build();\n        });\n    }\n\n    /**\n     * registerConsole command line specifics\n     */\n    protected function registerConsole()\n    {\n        // Allow app and plugins to use the scheduler\n        Event::listen('console.schedule', function ($schedule) {\n            foreach (PluginManager::instance()->getPlugins() as $plugin) {\n                $plugin->registerSchedule($schedule);\n            }\n\n            if ($app = $this->app->getProvider(\\App\\Provider::class)) {\n                $app->registerSchedule($schedule);\n            }\n        });\n\n        // Add CMS based cache clearing to native command\n        Event::listen('cache:cleared', function () {\n            \\System\\Helpers\\Cache::clearInternal();\n        });\n\n        // Auto-discover console commands\n        $this->discoverConsoleCommands('system');\n    }\n\n    /**\n     * registerErrorHandler for uncaught Exceptions\n     */\n    protected function registerErrorHandler()\n    {\n        Event::listen('exception.beforeReport', function ($exception) {\n            (new ErrorHandler)->beforeReport($exception);\n        });\n\n        Event::listen('exception.beforeRender', function ($exception, $httpCode, $request) {\n            return (new ErrorHandler)->handleException($exception);\n        });\n    }\n\n    /**\n     * registerLogging writes all log events to the database\n     */\n    protected function registerLogging()\n    {\n        Event::listen(\\Illuminate\\Log\\Events\\MessageLogged::class, function ($event) {\n            if (EventLog::useLogging()) {\n                EventLog::add($event->message, $event->level, $event->context);\n            }\n        });\n    }\n\n    /**\n     * registerTwigParser\n     */\n    protected function registerTwigParser()\n    {\n        // Register system Twig environment\n        $this->app->singleton('twig.environment', function ($app) {\n            $twig = new TwigEnvironment(new TwigLoader, ['auto_reload' => true]);\n\n            TwigExtension::addExtensionToTwig($twig);\n            TwigSecurityPolicy::addExtensionToTwig($twig);\n\n            return $twig;\n        });\n\n        // Register Twig for mailer\n        $this->app->singleton('twig.environment.mailer', function ($app) {\n            $twig = new TwigEnvironment(new TwigLoader, ['auto_reload' => true]);\n\n            TwigExtension::addExtensionToTwig($twig);\n            TwigSecurityPolicy::addExtensionToTwig($twig);\n\n            $twig->addTokenParser(new \\System\\Twig\\TokenParser\\MailPartialTokenParser);\n            return $twig;\n        });\n    }\n\n    /**\n     * registerMailLayouts\n     */\n    public function registerMailLayouts()\n    {\n        return [\n            'default' => 'system::mail.layout-default',\n            'system' => 'system::mail.layout-system',\n        ];\n    }\n\n    /**\n     * registerMailPartials\n     */\n    public function registerMailPartials()\n    {\n        return [\n            'header' => 'system::mail.partial-header',\n            'footer' => 'system::mail.partial-footer',\n            'button' => 'system::mail.partial-button',\n            'panel' => 'system::mail.partial-panel',\n            'table' => 'system::mail.partial-table',\n            'subcopy' => 'system::mail.partial-subcopy',\n            'promotion' => 'system::mail.partial-promotion',\n        ];\n    }\n\n    /**\n     * registerNavigation\n     */\n    public function registerNavigation()\n    {\n        return [\n            'system' => [\n                'label' => 'Settings',\n                'icon' => 'icon-cog',\n                'iconSvg' => 'modules/system/assets/images/cog-icon.svg',\n                'url' => Backend::url('system/settings'),\n                'permissions' => [],\n                'order' => 1000\n            ]\n        ];\n    }\n\n    /**\n     * extendBackendNavigation\n     */\n    protected function extendBackendNavigation()\n    {\n        // Register the sidebar for the System main menu\n        $this->callAfterResolving('backend.menu', function ($manager) {\n            $manager->registerContextSidenavPartial(\n                'October.System',\n                'system',\n                '~/modules/system/partials/_system_sidebar.php'\n            );\n        });\n\n        // Remove the October.System.system main menu item if there is no subpages to display\n        Event::listen('backend.menu.extendItems', function ($manager) {\n            $systemSettingItems = SettingsManager::instance()->listItems('system');\n            $systemMenuItems = $manager->listSideMenuItems('October.System', 'system');\n\n            if (empty($systemSettingItems) && empty($systemMenuItems)) {\n                $manager->removeMainMenuItem('October.System', 'system');\n            }\n        }, -1);\n    }\n\n    /**\n     * registerReportWidgets\n     */\n    public function registerReportWidgets()\n    {\n        return [\n            \\System\\ReportWidgets\\Status::class => [\n                'label' => \"System status\",\n                'context' => 'dashboard'\n            ],\n        ];\n    }\n\n    /**\n     * registerPermissions\n     */\n    public function registerPermissions()\n    {\n        return [\n            // Mail\n            'mail.templates' => [\n                'label' => 'system::lang.permissions.manage_mail_templates',\n                'tab' => 'Mail',\n                'order' => 300\n            ],\n            'mail.settings' => [\n                'label' => 'system::lang.permissions.manage_mail_settings',\n                'tab' => 'Mail',\n                'order' => 900\n            ],\n\n            // Utilities\n            'utilities.logs' => [\n                'label' => 'system::lang.permissions.access_logs',\n                'tab' => 'Utilities',\n                'order' => 400\n            ],\n\n            // Settings\n            'settings.manage_sites' => !Site::hasFeature() ? null : [\n                'label' => 'Manage Sites',\n                'tab' => 'Settings',\n                'order' => 400\n            ]\n        ];\n    }\n\n    /**\n     * registerSettings\n     */\n    public function registerSettings()\n    {\n        return [\n            'updates' => [\n                'label' => 'Software Updates',\n                'description' => 'Update the system modules and plugins.',\n                'category' => SettingsManager::CATEGORY_SYSTEM,\n                'icon' => 'ph ph-wrench',\n                'url' => Backend::url('system/updates'),\n                'permissions' => ['general.backend.perform_updates'],\n                'order' => 200\n            ],\n            // 'my_updates' => [\n            //     'label' => 'Software Updates',\n            //     'description' => 'Update the system modules and plugins.',\n            //     'category' => SettingsManager::CATEGORY_MYSETTINGS,\n            //     'icon' => 'icon-components',\n            //     'url' => Backend::url('system/updates'),\n            //     'permissions' => ['general.backend.perform_updates'],\n            //     'order' => 520,\n            //     'context' => 'mysettings'\n            // ],\n            'sites' => !Site::hasFeature() ? null : [\n                'label' => \"Site Definitions\",\n                'description' => 'Manage the websites available for this application.',\n                'category' => SettingsManager::CATEGORY_SYSTEM,\n                'icon' => 'icon-globe-site',\n                'url' => Backend::url('system/sites'),\n                'permissions' => ['settings.manage_sites'],\n                'order' => 250\n            ],\n            'mail_templates' => [\n                'label' => \"Mail Templates\",\n                'description' => \"Modify the mail templates that are sent to users and administrators, manage email layouts.\",\n                'category' => SettingsManager::CATEGORY_MAIL,\n                'icon' => 'ph ph-envelope-simple',\n                'url' => Backend::url('system/mailtemplates'),\n                'permissions' => ['mail.templates'],\n                'order' => 610\n            ],\n            'mail_settings' => Config::get('backend.force_mail_setting', false) ? [] : [\n                'label' => \"Mail Configuration\",\n                'description' => \"Manage email configuration.\",\n                'category' => SettingsManager::CATEGORY_MAIL,\n                'icon' => 'icon-mail-settings',\n                'class' => \\System\\Models\\MailSetting::class,\n                'permissions' => ['mail.settings'],\n                'order' => 620\n            ],\n            'mail_brand_settings' => [\n                'label' => \"Mail Branding\",\n                'description' => \"Modify the colors and appearance of mail templates.\",\n                'category' => SettingsManager::CATEGORY_MAIL,\n                'icon' => 'icon-mail-branding',\n                'url' => Backend::url('system/mailbrandsettings'),\n                'permissions' => ['mail.templates'],\n                'order' => 630\n            ],\n            'event_logs' => [\n                'label' => \"Event Log\",\n                'description' => \"View system log messages with their recorded time and details.\",\n                'category' => SettingsManager::CATEGORY_LOGS,\n                'icon' => 'ph ph-notepad',\n                'url' => Backend::url('system/eventlogs'),\n                'permissions' => ['utilities.logs'],\n                'order' => 900,\n                'keywords' => 'error exception'\n            ],\n            'request_logs' => [\n                'label' => \"Request Log\",\n                'description' => \"View bad or redirected requests, such as Page not found (404).\",\n                'category' => SettingsManager::CATEGORY_LOGS,\n                'icon' => 'icon-file',\n                'url' => Backend::url('system/requestlogs'),\n                'permissions' => ['utilities.logs'],\n                'order' => 910,\n                'keywords' => '404 error'\n            ],\n            'log_settings' => [\n                'label' => \"Log Settings\",\n                'description' => \"Specify which areas should use logging.\",\n                'category' => SettingsManager::CATEGORY_LOGS,\n                'icon' => 'icon-log-settings',\n                'class' => \\System\\Models\\LogSetting::class,\n                'permissions' => ['utilities.logs'],\n                'order' => 990\n            ],\n        ];\n    }\n\n    /**\n     * extendBackendSettings\n     */\n    protected function extendBackendSettings()\n    {\n        Event::listen('system.settings.extendItems', function ($manager) {\n            \\System\\Models\\LogSetting::filterSettingItems($manager);\n        });\n\n        Event::listen('backend.ajax.beforeRunHandler', function ($controller, $handler) {\n            if ($handler === 'onRenewOctoberCmsLicense') {\n                return $controller->makePartial('~/modules/system/widgets/updater/partials/_license_form.php');\n            }\n        });\n    }\n\n    /**\n     * registerValidator extends the validator with custom rules\n     */\n    protected function registerValidator()\n    {\n        $this->callAfterResolving('validator', function ($validator) {\n            // Allowed file extensions, as opposed to mime types.\n            // - extensions: png,jpg,txt\n            $validator->extend('extensions', function ($attribute, $value, $parameters) {\n                $extension = strtolower($value->getClientOriginalExtension());\n                return in_array($extension, $parameters);\n            });\n\n            $validator->replacer('extensions', function ($message, $attribute, $rule, $parameters) {\n                return strtr($message, [':values' => implode(', ', $parameters)]);\n            });\n        });\n    }\n\n    /**\n     * applyDatabaseDefaultStringLength allows the database config to specify a max length\n     * for VARCHAR. Primarily used by MariaDB (<10.2) and MySQL (<5.7)\n     * @todo This should be moved to the core library\n     */\n    protected function applyDatabaseDefaultStringLength()\n    {\n        if (Db::getDriverName() !== 'mysql') {\n            return;\n        }\n\n        $defaultStrLen = Db::getConfig('varcharmax');\n        if ($defaultStrLen === null) {\n            return;\n        }\n\n        Schema::defaultStringLength((int) $defaultStrLen);\n    }\n\n    /**\n     * extendViewService\n     */\n    protected function extendViewService()\n    {\n        $this->callAfterResolving('view', function($view) {\n            // Register .htm extension for Twig views\n            $view->addExtension('htm', 'twig', function () {\n                return new TwigEngine($this->app->make('twig.environment'));\n            });\n\n            // Share app name\n            $view->share('appName', Config::get('app.name'));\n        });\n    }\n\n    /**\n     * extendMailerService templates and settings override.\n     */\n    protected function extendMailerService()\n    {\n        // Override system mailer with mail settings\n        if (!Config::get('backend.force_mail_setting', false)) {\n            $this->callBeforeResolving('mail.manager', function() {\n                if (MailSetting::isConfigured()) {\n                    MailSetting::applyConfigValues();\n                }\n\n                if (Site::hasFeature('backend_mail_setting')) {\n                    MailSetting::enableMultisiteMailer();\n                }\n            });\n        }\n\n        // Override standard Mailer content with template\n        Event::listen('mailer.beforeAddContent', function ($mailer, $message, $view, $data, $raw, $plain) {\n            return !MailManager::instance()->addContentFromEvent($message, $view, $plain, $raw, $data);\n        });\n    }\n\n    /**\n     * bootOctaneResets resets singletons when Octane receives a new request.\n     */\n    protected function bootOctaneResets()\n    {\n        if (!class_exists(\\Laravel\\Octane\\Events\\RequestReceived::class)) {\n            return;\n        }\n\n        $this->app['events']->listen(\\Laravel\\Octane\\Events\\RequestReceived::class, function ($event) {\n            \\System\\Behaviors\\SettingsModel::clearInternalCache();\n            \\System\\Models\\SettingModel::clearInternalCache();\n            \\System\\Models\\Parameter::clearInternalCache();\n            \\October\\Rain\\Auth\\Manager::forgetInstance();\n            \\Backend\\Classes\\AuthManager::forgetInstance();\n        });\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/css/framework-extras.css",
    "content": "[data-request-validate] [data-validate-for]:not(.jax-visible),\n[data-request-validate] [data-validate-error]:not(.jax-visible) {\n    display: none;\n}\n"
  },
  {
    "path": "modules/system/assets/css/main.css",
    "content": "/* Bootstrap */\n@import \"../vendor/bootstrap/bootstrap.css\";\n@import \"../vendor/bootstrap-icons/bootstrap-icons.css\";\n\n/* Toolbox */\n@import \"../toolbox/toolbox.css\";\n\n/* Icons */\n@import \"../vendor/october-icons/icons.css\";\n@import \"../vendor/phosphor-icons/style.css\";\n\n/* Prettify */\n@import \"../vendor/prettify/prettify.css\";\n@import \"../vendor/prettify/theme-desert.css\";\n\n/* Froala */\n@import \"../vendor/froala/froala.css\";\n\n/* Handsontable */\n@import \"../vendor/handsontable/handsontable.css\";\n\n/* JCrop */\n@import \"../vendor/jcrop/css/jquery.Jcrop.min.css\";\n"
  },
  {
    "path": "modules/system/assets/css/pages/eventlogs.css",
    "content": ".plugin-exception-beautifier .beautifier-message-container {\n    display: block;\n    padding: 20px;\n    background: var(--bs-body-bg);\n}\n\n.plugin-exception-beautifier .beautifier-message {\n    display: block;\n    font-size: 1.1em;\n    word-wrap: break-word;\n    word-break: break-word;\n}\n\n.plugin-exception-beautifier .beautifier-toggle-stacktrace {\n    background: var(--oc-secondary-bg);\n    color: var(--bs-emphasis-color);\n    text-decoration: none;\n    display: block;\n    padding: 20px;\n    border-radius: 4px;\n    margin-top: 20px;\n}\n\n.plugin-exception-beautifier .beautifier-toggle-stacktrace:hover {\n    background: var(--bs-link-color);\n    color: white;\n}\n\n.plugin-exception-beautifier .beautifier-stacktrace-line {\n    display: block;\n    padding: 10px 0;\n    word-wrap: break-word;\n    word-break: break-word;\n    border-bottom: 1px solid var(--oc-primary-border);\n}\n\n.plugin-exception-beautifier .beautifier-stacktrace-line:nth-child(even) {\n    background-color: var(--bs-table-bg);\n}\n\n.plugin-exception-beautifier .beautifier-stacktrace-line:nth-child(odd) {\n    background-color: var(--bs-table-striped-bg);\n}\n\n.plugin-exception-beautifier .beautifier-stacktrace-line > * {\n    margin-left: 55px;\n    display: block;\n}\n\n.plugin-exception-beautifier .beautifier-stacktrace-line-number {\n    float: left;\n    width: 40px;\n    margin-left: 0;\n    margin-right: 15px;\n    text-align: right;\n    color: var(--bs-body-color);\n}\n\n.plugin-exception-beautifier .beautifier-stacktrace-line-internal {\n    color: #2C3E50;\n}\n\n.plugin-exception-beautifier .beautifier-stacktrace-line-function {\n    display: block;\n    margin-left: 55px;\n}\n\n.plugin-exception-beautifier .beautifier-file {\n    color: var(--bs-link-color);\n    word-wrap: break-word;\n    word-break: break-word;\n}\n\n.plugin-exception-beautifier .beautifier-line-number {\n    color: var(--bs-danger-text);\n}\n\n.plugin-exception-beautifier .beautifier-string,\n.plugin-exception-beautifier .beautifier-number,\n.plugin-exception-beautifier .beautifier-class,\n.plugin-exception-beautifier .beautifier-code,\n.plugin-exception-beautifier .beautifier-function,\n.plugin-exception-beautifier .beautifier-system-function {\n    font-family: monospace;\n}\n\n.plugin-exception-beautifier .beautifier-class,\n.plugin-exception-beautifier .beautifier-function,\n.plugin-exception-beautifier .beautifier-system-function {\n    font-weight: bold;\n}\n\n.plugin-exception-beautifier .beautifier-class {\n    color: var(--bs-body-color);\n}\n\n.plugin-exception-beautifier .beautifier-function {\n    color: var(--bs-danger-text);\n}\n\n.plugin-exception-beautifier .beautifier-system-function {\n    color: #e33a37;\n}\n\n.plugin-exception-beautifier .beautifier-code {\n    color: #736b88;\n}\n\n.plugin-exception-beautifier .beautifier-string {\n    color: var(--bs-success-text);\n}\n\n.plugin-exception-beautifier .beautifier-number {\n    color: var(--bs-info-text);\n}\n\n.plugin-exception-beautifier .beautifier-details {\n    display: block;\n    font-family: monospace;\n    font-size: 13px;\n    line-height: 1.6;\n    background: var(--oc-secondary-bg);\n    border-radius: 4px;\n    padding: 15px 20px;\n    margin-top: 15px;\n    overflow-x: auto;\n}\n\n.plugin-exception-beautifier .beautifier-formatted-content,\n.plugin-exception-beautifier .beautifier-raw-content {\n    background: var(--bs-body-bg);\n    padding: 20px;\n}\n\n.plugin-exception-beautifier .beautifier-raw-content {\n    font-family: monospace;\n    white-space: nowrap;\n    overflow: auto;\n    width: 100%;\n}\n\n.plugin-exception-beautifier .beautifier-raw-content br {\n    content: '';\n    display: block;\n    margin-bottom: 15px;\n}\n"
  },
  {
    "path": "modules/system/assets/css/pages/mailbrandsettings.css",
    "content": ".field-colorpicker {\n    float: right;\n    margin-top: -10px;\n}\n"
  },
  {
    "path": "modules/system/assets/css/pages/market.css",
    "content": "/*\n * Market Styles\n */\n\n.browse-products {\n    padding: 0;\n    margin-right: -20px;\n\n    a.product-card {\n        width: 310px;\n        min-height: 170px;\n        display: inline-block;\n        vertical-align: top;\n        border: 1px solid var(--oc-primary-border);\n        background: var(--oc-primary-bg);\n        border-radius: 4px;\n        position: relative;\n        text-decoration: none;\n        margin-right: 20px;\n        margin-bottom: 20px;\n        padding: 5px;\n\n        .details {\n            margin-right: 75px;\n            padding: 10px;\n\n            h4 {\n                font-size: 16px;\n                margin: 0;\n                padding-bottom: 5px;\n                text-overflow: ellipsis;\n                white-space: nowrap;\n                overflow: hidden;\n                color: var(--oc-primary-color);\n            }\n\n            p {\n                font-size: 13px;\n                line-height: 130%;\n                margin-bottom: 10px;\n                color: var(--bs-secondary-color);\n            }\n        }\n\n        .bottom-controls {\n            padding: 0 10px;\n            position: absolute;\n            bottom: 10px;\n            width: 100%;\n\n            .author-details {\n                color: var(--bs-secondary-color);\n                text-overflow: ellipsis;\n                white-space: nowrap;\n                overflow: hidden;\n            }\n        }\n\n        &:hover {\n            color: var(--bs-body-color);\n            border: 1px solid var(--bs-primary);\n\n            .image img {\n                opacity: .9;\n            }\n\n            .details h4 {\n                color: var(--bs-body-color);\n            }\n\n            .bottom-controls .author-details {\n                color: var(--bs-body-color);\n            }\n        }\n\n        &.product-plugin .image {\n            float: right;\n            text-align: center;\n            width: 64px;\n            margin-top: 3px;\n\n            img {\n                width: 64px;\n                height: 64px;\n                display: block;\n            }\n        }\n\n        &.product-theme {\n            .image {\n                border-bottom: 1px solid var(--oc-primary-border);\n                margin: 0;\n\n                img {\n                    max-width: 100%;\n                    width: 100%;\n                }\n            }\n\n            .details {\n                margin-bottom: 10px;\n            }\n        }\n    }\n}\n\n.action-button-wrapper {\n    padding: 1rem;\n    background-color: var(--bs-secondary-bg);\n    display: inline-block;\n    border-radius: 6px;\n\n    &.in-project {\n        background-color: transparent;\n    }\n}\n\n.project-table {\n    td {\n        background-color: transparent;\n    }\n\n    tr:last-child td {\n        border-bottom: none;\n    }\n\n    .image img {\n        max-width: 100px;\n        max-height: 64px;\n    }\n}\n\n/*\n * Typeahead\n */\n\n.product-search {\n    position: relative;\n    width: 100%;\n    margin: 0 auto 0 auto;\n    text-align: left;\n    padding-bottom: 15px;\n\n    > i.icon {\n        position: absolute;\n        top: 50%;\n        right: 15px;\n        font-size: 24px;\n        margin-top: -20px;\n        color: rgba(var(--bs-body-color-rgb), 0.35);\n\n        &.loading {\n            --loader-size: 24px;\n            display: block;\n            width: var(--loader-size);\n            height: var(--loader-size);\n            border: 3px solid var(--oc-primary-border);\n            border-top-color: var(--oc-accent);\n            border-radius: 50%;\n            animation: spin 0.8s linear infinite;\n\n            &:before {\n                display: none;\n            }\n        }\n    }\n}\n\n.twitter-typeahead {\n    width: 100%;\n}\n\n.typeahead, .tt-hint {\n    width: 100%;\n    height: 46px;\n    padding: 8px 12px;\n    font-size: 24px;\n    line-height: 30px;\n    border: 1px solid #024e6a;\n    border-radius: 3px;\n    outline: none;\n}\n\n.typeahead {\n    background-color: var(--oc-form-control-bg);\n    border-color: var(--bs-border-color);\n}\n\n.tt-input {\n    font-weight: 200;\n\n    &:focus {\n        border-color: var(--oc-border-focus);\n    }\n}\n\n.tt-hint {\n    color: #999;\n    font-weight: 200;\n}\n\n.tt-dropdown-menu {\n    width: 100%;\n    margin-top: 0;\n    background-color: var(--bs-modal-bg);\n    border: 1px solid rgba(var(--bs-body-bg-rgb), 0.2);\n    border-radius: 3px;\n    box-shadow: 0 5px 10px rgba(var(--bs-body-bg-rgb), 0.2);\n}\n\n.tt-suggestion {\n    font-size: 14px;\n    line-height: 18px;\n\n    + .tt-suggestion {\n        font-size: 14px;\n        border-top: 1px solid var(--bs-border-color);\n    }\n\n    &.tt-cursor {\n        cursor: pointer;\n\n        .product-details {\n            color: var(--oc-dropdown-hover-color);\n            background: var(--oc-dropdown-hover-bg);\n            border-color: transparent;\n\n            .product-image img {\n                opacity: .9;\n            }\n        }\n    }\n}\n\n.tt-suggestions {\n    .product-details {\n        padding: 5px;\n        overflow: hidden;\n        position: relative;\n    }\n\n    .product-image {\n        float: left;\n        margin-right: 10px;\n\n        img {\n            height: 45px;\n            width: 45px;\n        }\n    }\n\n    .product-name {\n        font-size: 20px;\n        padding-top: 5px;\n    }\n}\n\n/*\n * Plugin Details Content\n */\n\n.plugin-details-content {\n    padding: 0;\n\n    > *:first-child {\n        margin-top: 0;\n    }\n\n    h1 {\n        font-size: 28px;\n    }\n\n    h2 {\n        font-size: 24px;\n    }\n\n    h3 {\n        font-size: 20px;\n    }\n\n    h4 {\n        font-size: 17px;\n    }\n\n    h1, h2 {\n        padding-bottom: 10px;\n        border-bottom: 1px solid #ccc;\n    }\n\n    img {\n        max-width: 100%;\n    }\n\n    ul, ol {\n        padding-left: 20px;\n    }\n\n    pre {\n        display: block;\n        border: none;\n        padding: 10px;\n        font-size: 13px;\n        word-break: break-all;\n        word-wrap: break-word;\n        color: #fff;\n        background-color: #333;\n\n        code {\n            padding: 0;\n            font-size: inherit;\n            color: inherit;\n            white-space: pre-wrap;\n            background-color: transparent;\n            border-radius: 0;\n        }\n    }\n\n    ul pre,\n    ol pre {\n        padding-left: 15px;\n    }\n\n    table {\n        th {\n            font-weight: bold;\n        }\n\n        th, td {\n            padding: 6px 13px;\n            border: 1px solid #ddd;\n        }\n\n        tr {\n            background-color: #fff;\n            border-top: 1px solid #ccc;\n\n            &:nth-child(2n) {\n                background-color: #f8f8f8;\n            }\n        }\n    }\n\n    dl {\n        dt, dd {\n            margin-bottom: 10px;\n        }\n\n        dt {\n            width: 75px;\n            float: left;\n            text-align: right;\n            text-overflow: ellipsis;\n            overflow: hidden;\n            white-space: nowrap;\n        }\n\n        dd {\n            margin-left: 85px;\n        }\n    }\n}\n\n@keyframes spin {\n    to {\n        transform: rotate(360deg);\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/css/pages/settings.css",
    "content": ".control-settings {\n\n}\n"
  },
  {
    "path": "modules/system/assets/css/styles.css",
    "content": "@import \"../vendor/bootstrap/bootstrap-lite.css\";\n@import \"../vendor/october-icons/icons.css\";\n\n:root {\n    --font-family-base: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n    --color-base: #405261;\n    --color-base-light: #8a9aa8;\n    --color-warning: #c84530;\n}\n\nhtml,\nbody {\n    font-size: 14px;\n    line-height: 1.42857143;\n}\n\nbody {\n    padding-top: 40px;\n    font-family: var(--font-family-base);\n    background: #f3f3f3;\n    color: var(--color-base);\n}\n\ncode {\n    color: inherit;\n}\n\nh1, h2, h3, h4, h5 {\n    font-family: var(--font-family-base);\n    text-transform: uppercase;\n}\n\nh1 {\n    font-weight: 300;\n    font-size: 50px;\n    margin-bottom: 15px;\n\n    i[class^=\"icon-\"] {\n        &:before {\n            font-size: 46px;\n        }\n    }\n}\n\ni[class^=\"icon-\"].warning {\n    color: var(--color-warning);\n}\n\nh3 {\n    font-size: 24px;\n    font-weight: 300;\n}\n\np.lead {\n    font-size: 16px;\n    font-weight: 300;\n}\n\nul.indicators {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n\n    &::after {\n        content: \"\";\n        display: table;\n        clear: both;\n    }\n\n    li {\n        float: left;\n        margin-right: 50px;\n\n        &:last-child {\n            margin-right: 0;\n        }\n\n        h3 {\n            font-weight: 300;\n            font-size: 12px;\n            line-height: 100%;\n            margin-bottom: 7px;\n        }\n\n        p {\n            font-size: 20px;\n            font-weight: 600;\n            word-wrap: break-word;\n        }\n    }\n}\n\n/*\n * Tables\n */\n\ntable.data-table {\n    width: 100%;\n    font-size: 12px;\n    border-collapse: collapse;\n    margin-bottom: 20px;\n\n    tr {\n        &:first-child th {\n          border-top: 0;\n        }\n\n        &:last-child td {\n          border-bottom: 0;\n        }\n\n        td:first-child,\n        th:first-child {\n          border-left: 0;\n        }\n\n        td:last-child,\n        th:last-child {\n          border-right: 0;\n        }\n    }\n\n    td, th {\n        vertical-align: top;\n        text-align: left;\n        font-weight: 300;\n        border: 1px solid #fff;\n        padding: 6px 8px;\n        &.right {\n            text-align: right;\n        }\n    }\n\n    thead {\n        th, th {\n            text-transform: uppercase;\n            background: #7b8892;\n            color: white;\n        }\n    }\n\n    tbody {\n        td, th {\n            background-color: white;\n        }\n\n        td.file-column {\n            word-break: break-all;\n        }\n\n        tr:nth-child(2n) {\n            td, th {\n                background-color: #d8d9db;\n            }\n        }\n    }\n}\n\n/*\n * Error page\n */\n\n.exception-name-block {\n    margin-bottom: 15px;\n\n    div, p {\n        font-weight: 300;\n        padding: 10px 15px;\n    }\n\n    div {\n        background: var(--color-warning);\n        color: white;\n        position: relative;\n\n        &:after {\n            position: absolute;\n            display: block;\n            content: \" \";\n            bottom: -6px;\n            left: 20px;\n            width: 0px;\n            height: 0px;\n            border-style: solid;\n            border-width: 8px 8px 0 8px;\n            border-color: var(--color-warning) transparent transparent transparent;\n        }\n    }\n\n    p {\n        background: #ebebeb;\n        margin-bottom: 0;\n        span {\n            color: var(--color-base-light);\n        }\n    }\n}\n\n.syntaxhighlighter {\n    margin-bottom: 30px;\n    background: white;\n    font: 12px/170% Monaco, Menlo, 'Ubuntu Mono', 'Droid Sans Mono', 'Courier New', monospace!important;\n\n    table {\n        width: 100%;\n        table-layout: fixed;\n\n        td {\n            padding: 5px 0;\n\n            &.gutter {\n                padding: 5px 10px;\n                width: 35px;\n                background: #7b8892;\n                color: white;\n            }\n\n            &.code {\n                overflow-x: auto;\n                width: 100% !important;\n\n                .container {\n                    width: 100% !important;\n                    padding: 0;\n\n                    div.line {\n                        white-space: nowrap;\n                        padding-left: 10px;\n\n                        &.highlighted {\n                            background: var(--color-warning);\n                            color: white;\n                        }\n\n                        code {\n                            font: 12px/170% Monaco, Menlo, 'Ubuntu Mono', 'Droid Sans Mono', 'Courier New', monospace!important;\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/js/foundation.js",
    "content": "/* Javascript plotting library for jQuery, version 0.8.2-alpha.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\n*/\n\n// first an inline dependency, jquery.colorhelpers.js, we inline it here\n// for convenience\n\n/* Plugin for jQuery for working with colors.\n *\n * Version 1.1.\n *\n * Inspiration from jQuery color animation plugin by John Resig.\n *\n * Released under the MIT license by Ole Laursen, October 2009.\n *\n * Examples:\n *\n *   $.color.parse(\"#fff\").scale('rgb', 0.25).add('a', -0.5).toString()\n *   var c = $.color.extract($(\"#mydiv\"), 'background-color');\n *   console.log(c.r, c.g, c.b, c.a);\n *   $.color.make(100, 50, 25, 0.4).toString() // returns \"rgba(100,50,25,0.4)\"\n *\n * Note that .scale() and .add() return the same modified object\n * instead of making a new one.\n *\n * V. 1.1: Fix error handling so e.g. parsing an empty string does\n * produce a color rather than just crashing.\n */\n(function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]+=I}return G.normalize()};G.scale=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]*=I}return G.normalize()};G.toString=function(){if(G.a>=1){return\"rgb(\"+[G.r,G.g,G.b].join(\",\")+\")\"}else{return\"rgba(\"+[G.r,G.g,G.b,G.a].join(\",\")+\")\"}};G.normalize=function(){function H(J,K,I){return K<J?J:(K>I?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=\"\"&&E!=\"transparent\"){break}D=D.parent()}while(!B.nodeName(D.get(0),\"body\"));if(E==\"rgba(0, 0, 0, 0)\"){E=\"transparent\"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D==\"transparent\"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);\n\n// the actual Flot code\n(function($) {\n\n\t// Cache the prototype hasOwnProperty for faster access\n\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// The Canvas object is a wrapper around an HTML5 <canvas> tag.\n\t//\n\t// @constructor\n\t// @param {string} cls List of classes to apply to the canvas.\n\t// @param {element} container Element onto which to append the canvas.\n\t//\n\t// Requiring a container is a little iffy, but unfortunately canvas\n\t// operations don't work unless the canvas is attached to the DOM.\n\n\tfunction Canvas(cls, container) {\n\n\t\tvar element = container.children(\".\" + cls)[0];\n\n\t\tif (element == null) {\n\n\t\t\telement = document.createElement(\"canvas\");\n\t\t\telement.className = cls;\n\n\t\t\t$(element).css({ direction: \"ltr\", position: \"absolute\", left: 0, top: 0 })\n\t\t\t\t.appendTo(container);\n\n\t\t\t// If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas\n\n\t\t\tif (!element.getContext) {\n\t\t\t\tif (window.G_vmlCanvasManager) {\n\t\t\t\t\telement = window.G_vmlCanvasManager.initElement(element);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element = element;\n\n\t\tvar context = this.context = element.getContext(\"2d\");\n\n\t\t// Determine the screen's ratio of physical to device-independent\n\t\t// pixels.  This is the ratio between the canvas width that the browser\n\t\t// advertises and the number of pixels actually present in that space.\n\n\t\t// The iPhone 4, for example, has a device-independent width of 320px,\n\t\t// but its screen is actually 640px wide.  It therefore has a pixel\n\t\t// ratio of 2, while most normal devices have a ratio of 1.\n\n\t\tvar devicePixelRatio = window.devicePixelRatio || 1,\n\t\t\tbackingStoreRatio =\n\t\t\t\tcontext.webkitBackingStorePixelRatio ||\n\t\t\t\tcontext.mozBackingStorePixelRatio ||\n\t\t\t\tcontext.msBackingStorePixelRatio ||\n\t\t\t\tcontext.oBackingStorePixelRatio ||\n\t\t\t\tcontext.backingStorePixelRatio || 1;\n\n\t\tthis.pixelRatio = devicePixelRatio / backingStoreRatio;\n\n\t\t// Size the canvas to match the internal dimensions of its container\n\n\t\tthis.resize(container.width(), container.height());\n\n\t\t// Collection of HTML div layers for text overlaid onto the canvas\n\n\t\tthis.textContainer = null;\n\t\tthis.text = {};\n\n\t\t// Cache of text fragments and metrics, so we can avoid expensively\n\t\t// re-calculating them when the plot is re-rendered in a loop.\n\n\t\tthis._textCache = {};\n\t}\n\n\t// Resizes the canvas to the given dimensions.\n\t//\n\t// @param {number} width New width of the canvas, in pixels.\n\t// @param {number} width New height of the canvas, in pixels.\n\n\tCanvas.prototype.resize = function(width, height) {\n\n\t\tif (width <= 0 || height <= 0) {\n\t\t\tthrow new Error(\"Invalid dimensions for plot, width = \" + width + \", height = \" + height);\n\t\t}\n\n\t\tvar element = this.element,\n\t\t\tcontext = this.context,\n\t\t\tpixelRatio = this.pixelRatio;\n\n\t\t// Resize the canvas, increasing its density based on the display's\n\t\t// pixel ratio; basically giving it more pixels without increasing the\n\t\t// size of its element, to take advantage of the fact that retina\n\t\t// displays have that many more pixels in the same advertised space.\n\n\t\t// Resizing should reset the state (excanvas seems to be buggy though)\n\n\t\tif (this.width != width) {\n\t\t\telement.width = width * pixelRatio;\n\t\t\telement.style.width = width + \"px\";\n\t\t\tthis.width = width;\n\t\t}\n\n\t\tif (this.height != height) {\n\t\t\telement.height = height * pixelRatio;\n\t\t\telement.style.height = height + \"px\";\n\t\t\tthis.height = height;\n\t\t}\n\n\t\t// Save the context, so we can reset in case we get replotted.  The\n\t\t// restore ensure that we're really back at the initial state, and\n\t\t// should be safe even if we haven't saved the initial state yet.\n\n\t\tcontext.restore();\n\t\tcontext.save();\n\n\t\t// Scale the coordinate space to match the display density; so even though we\n\t\t// may have twice as many pixels, we still want lines and other drawing to\n\t\t// appear at the same size; the extra pixels will just make them crisper.\n\n\t\tcontext.scale(pixelRatio, pixelRatio);\n\t};\n\n\t// Clears the entire canvas area, not including any overlaid HTML text\n\n\tCanvas.prototype.clear = function() {\n\t\tthis.context.clearRect(0, 0, this.width, this.height);\n\t};\n\n\t// Finishes rendering the canvas, including managing the text overlay.\n\n\tCanvas.prototype.render = function() {\n\n\t\tvar cache = this._textCache;\n\n\t\t// For each text layer, add elements marked as active that haven't\n\t\t// already been rendered, and remove those that are no longer active.\n\n\t\tfor (var layerKey in cache) {\n\t\t\tif (hasOwnProperty.call(cache, layerKey)) {\n\n\t\t\t\tvar layer = this.getTextLayer(layerKey),\n\t\t\t\t\tlayerCache = cache[layerKey];\n\n\t\t\t\tlayer.hide();\n\n\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\tvar styleCache = layerCache[styleKey];\n\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\n\t\t\t\t\t\t\t\tvar positions = styleCache[key].positions;\n\n\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\tif (position.active) {\n\t\t\t\t\t\t\t\t\t\tif (!position.rendered) {\n\t\t\t\t\t\t\t\t\t\t\tlayer.append(position.element);\n\t\t\t\t\t\t\t\t\t\t\tposition.rendered = true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tpositions.splice(i--, 1);\n\t\t\t\t\t\t\t\t\t\tif (position.rendered) {\n\t\t\t\t\t\t\t\t\t\t\tposition.element.detach();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (positions.length == 0) {\n\t\t\t\t\t\t\t\t\tdelete styleCache[key];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlayer.show();\n\t\t\t}\n\t\t}\n\t};\n\n\t// Creates (if necessary) and returns the text overlay container.\n\t//\n\t// @param {string} classes String of space-separated CSS classes used to\n\t//     uniquely identify the text layer.\n\t// @return {object} The jQuery-wrapped text-layer div.\n\n\tCanvas.prototype.getTextLayer = function(classes) {\n\n\t\tvar layer = this.text[classes];\n\n\t\t// Create the text layer if it doesn't exist\n\n\t\tif (layer == null) {\n\n\t\t\t// Create the text layer container, if it doesn't exist\n\n\t\t\tif (this.textContainer == null) {\n\t\t\t\tthis.textContainer = $(\"<div class='flot-text'></div>\")\n\t\t\t\t\t.css({\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t'font-size': \"smaller\",\n\t\t\t\t\t\tcolor: \"#545454\"\n\t\t\t\t\t})\n\t\t\t\t\t.insertAfter(this.element);\n\t\t\t}\n\n\t\t\tlayer = this.text[classes] = $(\"<div></div>\")\n\t\t\t\t.addClass(classes)\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tright: 0\n\t\t\t\t})\n\t\t\t\t.appendTo(this.textContainer);\n\t\t}\n\n\t\treturn layer;\n\t};\n\n\t// Creates (if necessary) and returns a text info object.\n\t//\n\t// The object looks like this:\n\t//\n\t// {\n\t//     width: Width of the text's wrapper div.\n\t//     height: Height of the text's wrapper div.\n\t//     element: The jQuery-wrapped HTML div containing the text.\n\t//     positions: Array of positions at which this text is drawn.\n\t// }\n\t//\n\t// The positions array contains objects that look like this:\n\t//\n\t// {\n\t//     active: Flag indicating whether the text should be visible.\n\t//     rendered: Flag indicating whether the text is currently visible.\n\t//     element: The jQuery-wrapped HTML div containing the text.\n\t//     x: X coordinate at which to draw the text.\n\t//     y: Y coordinate at which to draw the text.\n\t// }\n\t//\n\t// Each position after the first receives a clone of the original element.\n\t//\n\t// The idea is that that the width, height, and general 'identity' of the\n\t// text is constant no matter where it is placed; the placements are a\n\t// secondary property.\n\t//\n\t// Canvas maintains a cache of recently-used text info objects; getTextInfo\n\t// either returns the cached element or creates a new entry.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {string} text Text string to retrieve info for.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which to rotate the text, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\t// @param {number=} width Maximum width of the text before it wraps.\n\t// @return {object} a text info object.\n\n\tCanvas.prototype.getTextInfo = function(layer, text, font, angle, width) {\n\n\t\tvar textStyle, layerCache, styleCache, info;\n\n\t\t// Cast the value to a string, in case we were given a number or such\n\n\t\ttext = \"\" + text;\n\n\t\t// If the font is a font-spec object, generate a CSS font definition\n\n\t\tif (typeof font === \"object\") {\n\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px/\" + font.lineHeight + \"px \" + font.family;\n\t\t} else {\n\t\t\ttextStyle = font;\n\t\t}\n\n\t\t// Retrieve (or create) the cache for the text's layer and styles\n\n\t\tlayerCache = this._textCache[layer];\n\n\t\tif (layerCache == null) {\n\t\t\tlayerCache = this._textCache[layer] = {};\n\t\t}\n\n\t\tstyleCache = layerCache[textStyle];\n\n\t\tif (styleCache == null) {\n\t\t\tstyleCache = layerCache[textStyle] = {};\n\t\t}\n\n\t\tinfo = styleCache[text];\n\n\t\t// If we can't find a matching element in our cache, create a new one\n\n\t\tif (info == null) {\n\n\t\t\tvar element = $(\"<div></div>\").html(text)\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t'max-width': width,\n\t\t\t\t\ttop: -9999\n\t\t\t\t})\n\t\t\t\t.appendTo(this.getTextLayer(layer));\n\n\t\t\tif (typeof font === \"object\") {\n\t\t\t\telement.css({\n\t\t\t\t\tfont: textStyle,\n\t\t\t\t\tcolor: font.color\n\t\t\t\t});\n\t\t\t} else if (typeof font === \"string\") {\n\t\t\t\telement.addClass(font);\n\t\t\t}\n\n\t\t\tinfo = styleCache[text] = {\n\t\t\t\twidth: element.outerWidth(true),\n\t\t\t\theight: element.outerHeight(true),\n\t\t\t\telement: element,\n\t\t\t\tpositions: []\n\t\t\t};\n\n\t\t\telement.detach();\n\t\t}\n\n\t\treturn info;\n\t};\n\n\t// Adds a text string to the canvas text overlay.\n\t//\n\t// The text isn't drawn immediately; it is marked as rendering, which will\n\t// result in its addition to the canvas on the next render pass.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {number} x X coordinate at which to draw the text.\n\t// @param {number} y Y coordinate at which to draw the text.\n\t// @param {string} text Text string to draw.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which to rotate the text, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\t// @param {number=} width Maximum width of the text before it wraps.\n\t// @param {string=} halign Horizontal alignment of the text; either \"left\",\n\t//     \"center\" or \"right\".\n\t// @param {string=} valign Vertical alignment of the text; either \"top\",\n\t//     \"middle\" or \"bottom\".\n\n\tCanvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {\n\n\t\tvar info = this.getTextInfo(layer, text, font, angle, width),\n\t\t\tpositions = info.positions;\n\n\t\t// Tweak the div's position to match the text's alignment\n\n\t\tif (halign == \"center\") {\n\t\t\tx -= info.width / 2;\n\t\t} else if (halign == \"right\") {\n\t\t\tx -= info.width;\n\t\t}\n\n\t\tif (valign == \"middle\") {\n\t\t\ty -= info.height / 2;\n\t\t} else if (valign == \"bottom\") {\n\t\t\ty -= info.height;\n\t\t}\n\n\t\t// Determine whether this text already exists at this position.\n\t\t// If so, mark it for inclusion in the next render pass.\n\n\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\tposition.active = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// If the text doesn't exist at this position, create a new entry\n\n\t\t// For the very first position we'll re-use the original element,\n\t\t// while for subsequent ones we'll clone it.\n\n\t\tposition = {\n\t\t\tactive: true,\n\t\t\trendered: false,\n\t\t\telement: positions.length ? info.element.clone() : info.element,\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\n\t\tpositions.push(position);\n\n\t\t// Move the element to its final position within the container\n\n\t\tposition.element.css({\n\t\t\ttop: Math.round(y),\n\t\t\tleft: Math.round(x),\n\t\t\t'text-align': halign\t// In case the text wraps\n\t\t});\n\t};\n\n\t// Removes one or more text strings from the canvas text overlay.\n\t//\n\t// If no parameters are given, all text within the layer is removed.\n\t//\n\t// Note that the text is not immediately removed; it is simply marked as\n\t// inactive, which will result in its removal on the next render pass.\n\t// This avoids the performance penalty for 'clear and redraw' behavior,\n\t// where we potentially get rid of all text on a layer, but will likely\n\t// add back most or all of it later, as when redrawing axes, for example.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {number=} x X coordinate of the text.\n\t// @param {number=} y Y coordinate of the text.\n\t// @param {string=} text Text string to remove.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which the text is rotated, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\n\tCanvas.prototype.removeText = function(layer, x, y, text, font, angle) {\n\t\tif (text == null) {\n\t\t\tvar layerCache = this._textCache[layer];\n\t\t\tif (layerCache != null) {\n\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\tvar styleCache = layerCache[styleKey];\n\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\t\t\t\t\t\t\t\tvar positions = styleCache[key].positions;\n\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\tposition.active = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar positions = this.getTextInfo(layer, text, font, angle).positions;\n\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\t\tposition.active = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// The top-level container for the entire plot.\n\n    function Plot(placeholder, data_, options_, plugins) {\n        // data is on the form:\n        //   [ series1, series2 ... ]\n        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]\n        // or { data: [ [x1, y1], [x2, y2], ... ], label: \"some label\", ... }\n\n        var series = [],\n            options = {\n                // the color theme used for graphs\n                colors: [\"#edc240\", \"#afd8f8\", \"#cb4b4b\", \"#4da74d\", \"#9440ed\"],\n                legend: {\n                    show: true,\n                    noColumns: 1, // number of colums in legend table\n                    labelFormatter: null, // fn: string -> string\n                    labelBoxBorderColor: \"#ccc\", // border color for the little label boxes\n                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph\n                    position: \"ne\", // position of default legend container within plot\n                    margin: 5, // distance from grid edge to default legend container within plot\n                    backgroundColor: null, // null means auto-detect\n                    backgroundOpacity: 0.85, // set to 0 to avoid background\n                    sorted: null    // default to no legend sorting\n                },\n                xaxis: {\n                    show: null, // null = auto-detect, true = always, false = never\n                    position: \"bottom\", // or \"top\"\n                    mode: null, // null or \"time\"\n                    font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: \"italic\", weight: \"bold\", family: \"sans-serif\", variant: \"small-caps\" }\n                    color: null, // base color, labels, ticks\n                    tickColor: null, // possibly different color of ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    transform: null, // null or f: number -> number to transform axis\n                    inverseTransform: null, // if transform is set, this should be the inverse function\n                    min: null, // min. value to show, null means set automatically\n                    max: null, // max. value to show, null means set automatically\n                    autoscaleMargin: null, // margin in % to add if auto-setting min/max\n                    ticks: null, // either [1, 3] or [[1, \"a\"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks\n                    tickFormatter: null, // fn: number -> string\n                    labelWidth: null, // size of tick labels in pixels\n                    labelHeight: null,\n                    reserveSpace: null, // whether to reserve space even if axis isn't shown\n                    tickLength: null, // size in pixels of ticks, or \"full\" for whole line\n                    alignTicksWithAxis: null, // axis number or null for no sync\n                    tickDecimals: null, // no. of decimals, null means auto\n                    tickSize: null, // number or [number, \"unit\"]\n                    minTickSize: null // number or [number, \"unit\"]\n                },\n                yaxis: {\n                    autoscaleMargin: 0.02,\n                    position: \"left\" // or \"right\"\n                },\n                xaxes: [],\n                yaxes: [],\n                series: {\n                    points: {\n                        show: false,\n                        radius: 3,\n                        lineWidth: 2, // in pixels\n                        fill: true,\n                        fillColor: \"#ffffff\",\n                        symbol: \"circle\" // or callback\n                    },\n                    lines: {\n                        // we don't put in show: false so we can see\n                        // whether lines were actively disabled\n                        lineWidth: 2, // in pixels\n                        fill: false,\n                        fillColor: null,\n                        steps: false\n                        // Omit 'zero', so we can later default its value to\n                        // match that of the 'fill' option.\n                    },\n                    bars: {\n                        show: false,\n                        lineWidth: 2, // in pixels\n                        barWidth: 1, // in units of the x axis\n                        fill: true,\n                        fillColor: null,\n                        align: \"left\", // \"left\", \"right\", or \"center\"\n                        horizontal: false,\n                        zero: true\n                    },\n                    shadowSize: 3,\n                    highlightColor: null\n                },\n                grid: {\n                    show: true,\n                    aboveData: false,\n                    color: \"#545454\", // primary color used for outline and labels\n                    backgroundColor: null, // null for transparent, else color\n                    borderColor: null, // set if different from the grid color\n                    tickColor: null, // color for the ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    margin: 0, // distance from the canvas edge to the grid\n                    labelMargin: 5, // in pixels\n                    axisMargin: 8, // in pixels\n                    borderWidth: 2, // in pixels\n                    minBorderMargin: null, // in pixels, null means taken from points radius\n                    markings: null, // array of ranges or fn: axes -> array of ranges\n                    markingsColor: \"#f4f4f4\",\n                    markingsLineWidth: 2,\n                    // interactive stuff\n                    clickable: false,\n                    hoverable: false,\n                    autoHighlight: true, // highlight in case mouse is near\n                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item\n                },\n                interaction: {\n                    redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow\n                },\n                hooks: {}\n            },\n        surface = null,     // the canvas for the plot itself\n        overlay = null,     // canvas for interactive stuff on top of plot\n        eventHolder = null, // jQuery object that events should be bound to\n        ctx = null, octx = null,\n        xaxes = [], yaxes = [],\n        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},\n        plotWidth = 0, plotHeight = 0,\n        hooks = {\n            processOptions: [],\n            processRawData: [],\n            processDatapoints: [],\n            processOffset: [],\n            drawBackground: [],\n            drawSeries: [],\n            draw: [],\n            bindEvents: [],\n            drawOverlay: [],\n            shutdown: []\n        },\n        plot = this;\n\n        // public functions\n        plot.setData = setData;\n        plot.setupGrid = setupGrid;\n        plot.draw = draw;\n        plot.getPlaceholder = function() { return placeholder; };\n        plot.getCanvas = function() { return surface.element; };\n        plot.getPlotOffset = function() { return plotOffset; };\n        plot.width = function () { return plotWidth; };\n        plot.height = function () { return plotHeight; };\n        plot.offset = function () {\n            var o = eventHolder.offset();\n            o.left += plotOffset.left;\n            o.top += plotOffset.top;\n            return o;\n        };\n        plot.getData = function () { return series; };\n        plot.getAxes = function () {\n            var res = {}, i;\n            $.each(xaxes.concat(yaxes), function (_, axis) {\n                if (axis)\n                    res[axis.direction + (axis.n != 1 ? axis.n : \"\") + \"axis\"] = axis;\n            });\n            return res;\n        };\n        plot.getXAxes = function () { return xaxes; };\n        plot.getYAxes = function () { return yaxes; };\n        plot.c2p = canvasToAxisCoords;\n        plot.p2c = axisToCanvasCoords;\n        plot.getOptions = function () { return options; };\n        plot.highlight = highlight;\n        plot.unhighlight = unhighlight;\n        plot.triggerRedrawOverlay = triggerRedrawOverlay;\n        plot.pointOffset = function(point) {\n            return {\n                left: parseInt(xaxes[axisNumber(point, \"x\") - 1].p2c(+point.x) + plotOffset.left, 10),\n                top: parseInt(yaxes[axisNumber(point, \"y\") - 1].p2c(+point.y) + plotOffset.top, 10)\n            };\n        };\n        plot.shutdown = shutdown;\n        plot.resize = function () {\n        \tvar width = placeholder.width(),\n        \t\theight = placeholder.height();\n            surface.resize(width, height);\n            overlay.resize(width, height);\n        };\n\n        // public attributes\n        plot.hooks = hooks;\n\n        // initialize\n        initPlugins(plot);\n        parseOptions(options_);\n        setupCanvases();\n        setData(data_);\n        setupGrid();\n        draw();\n        bindEvents();\n\n\n        function executeHooks(hook, args) {\n            args = [plot].concat(args);\n            for (var i = 0; i < hook.length; ++i)\n                hook[i].apply(this, args);\n        }\n\n        function initPlugins() {\n\n            // References to key classes, allowing plugins to modify them\n\n            var classes = {\n                Canvas: Canvas\n            };\n\n            for (var i = 0; i < plugins.length; ++i) {\n                var p = plugins[i];\n                p.init(plot, classes);\n                if (p.options)\n                    $.extend(true, options, p.options);\n            }\n        }\n\n        function parseOptions(opts) {\n\n            $.extend(true, options, opts);\n\n            // $.extend merges arrays, rather than replacing them.  When less\n            // colors are provided than the size of the default palette, we\n            // end up with those colors plus the remaining defaults, which is\n            // not expected behavior; avoid it by replacing them here.\n\n            if (opts && opts.colors) {\n            \toptions.colors = opts.colors;\n            }\n\n            if (options.xaxis.color == null)\n                options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n            if (options.yaxis.color == null)\n                options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n            if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility\n                options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;\n            if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility\n                options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;\n\n            if (options.grid.borderColor == null)\n                options.grid.borderColor = options.grid.color;\n            if (options.grid.tickColor == null)\n                options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n            // Fill in defaults for axis options, including any unspecified\n            // font-spec fields, if a font-spec was provided.\n\n            // If no x/y axis options were provided, create one of each anyway,\n            // since the rest of the code assumes that they exist.\n\n            var i, axisOptions, axisCount,\n                fontDefaults = {\n                    style: placeholder.css(\"font-style\"),\n                    size: Math.round(0.8 * (+placeholder.css(\"font-size\").replace(\"px\", \"\") || 13)),\n                    variant: placeholder.css(\"font-variant\"),\n                    weight: placeholder.css(\"font-weight\"),\n                    family: placeholder.css(\"font-family\")\n                };\n\n            fontDefaults.lineHeight = fontDefaults.size * 1.15;\n\n            axisCount = options.xaxes.length || 1;\n            for (i = 0; i < axisCount; ++i) {\n\n                axisOptions = options.xaxes[i];\n                if (axisOptions && !axisOptions.tickColor) {\n                    axisOptions.tickColor = axisOptions.color;\n                }\n\n                axisOptions = $.extend(true, {}, options.xaxis, axisOptions);\n                options.xaxes[i] = axisOptions;\n\n                if (axisOptions.font) {\n                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n                    if (!axisOptions.font.color) {\n                        axisOptions.font.color = axisOptions.color;\n                    }\n                }\n            }\n\n            axisCount = options.yaxes.length || 1;\n            for (i = 0; i < axisCount; ++i) {\n\n                axisOptions = options.yaxes[i];\n                if (axisOptions && !axisOptions.tickColor) {\n                    axisOptions.tickColor = axisOptions.color;\n                }\n\n                axisOptions = $.extend(true, {}, options.yaxis, axisOptions);\n                options.yaxes[i] = axisOptions;\n\n                if (axisOptions.font) {\n                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n                    if (!axisOptions.font.color) {\n                        axisOptions.font.color = axisOptions.color;\n                    }\n                }\n            }\n\n            // backwards compatibility, to be removed in future\n            if (options.xaxis.noTicks && options.xaxis.ticks == null)\n                options.xaxis.ticks = options.xaxis.noTicks;\n            if (options.yaxis.noTicks && options.yaxis.ticks == null)\n                options.yaxis.ticks = options.yaxis.noTicks;\n            if (options.x2axis) {\n                options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);\n                options.xaxes[1].position = \"top\";\n            }\n            if (options.y2axis) {\n                options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);\n                options.yaxes[1].position = \"right\";\n            }\n            if (options.grid.coloredAreas)\n                options.grid.markings = options.grid.coloredAreas;\n            if (options.grid.coloredAreasColor)\n                options.grid.markingsColor = options.grid.coloredAreasColor;\n            if (options.lines)\n                $.extend(true, options.series.lines, options.lines);\n            if (options.points)\n                $.extend(true, options.series.points, options.points);\n            if (options.bars)\n                $.extend(true, options.series.bars, options.bars);\n            if (options.shadowSize != null)\n                options.series.shadowSize = options.shadowSize;\n            if (options.highlightColor != null)\n                options.series.highlightColor = options.highlightColor;\n\n            // save options on axes for future reference\n            for (i = 0; i < options.xaxes.length; ++i)\n                getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];\n            for (i = 0; i < options.yaxes.length; ++i)\n                getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];\n\n            // add hooks from options\n            for (var n in hooks)\n                if (options.hooks[n] && options.hooks[n].length)\n                    hooks[n] = hooks[n].concat(options.hooks[n]);\n\n            executeHooks(hooks.processOptions, [options]);\n        }\n\n        function setData(d) {\n            series = parseData(d);\n            fillInSeriesOptions();\n            processData();\n        }\n\n        function parseData(d) {\n            var res = [];\n            for (var i = 0; i < d.length; ++i) {\n                var s = $.extend(true, {}, options.series);\n\n                if (d[i].data != null) {\n                    s.data = d[i].data; // move the data instead of deep-copy\n                    delete d[i].data;\n\n                    $.extend(true, s, d[i]);\n\n                    d[i].data = s.data;\n                }\n                else\n                    s.data = d[i];\n                res.push(s);\n            }\n\n            return res;\n        }\n\n        function axisNumber(obj, coord) {\n            var a = obj[coord + \"axis\"];\n            if (typeof a == \"object\") // if we got a real axis, extract number\n                a = a.n;\n            if (typeof a != \"number\")\n                a = 1; // default to first axis\n            return a;\n        }\n\n        function allAxes() {\n            // return flat array without annoying null entries\n            return $.grep(xaxes.concat(yaxes), function (a) { return a; });\n        }\n\n        function canvasToAxisCoords(pos) {\n            // return an object with x/y corresponding to all used axes\n            var res = {}, i, axis;\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used)\n                    res[\"x\" + axis.n] = axis.c2p(pos.left);\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used)\n                    res[\"y\" + axis.n] = axis.c2p(pos.top);\n            }\n\n            if (res.x1 !== undefined)\n                res.x = res.x1;\n            if (res.y1 !== undefined)\n                res.y = res.y1;\n\n            return res;\n        }\n\n        function axisToCanvasCoords(pos) {\n            // get canvas coords from the first pair of x/y found in pos\n            var res = {}, i, axis, key;\n\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used) {\n                    key = \"x\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"x\";\n\n                    if (pos[key] != null) {\n                        res.left = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used) {\n                    key = \"y\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"y\";\n\n                    if (pos[key] != null) {\n                        res.top = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            return res;\n        }\n\n        function getOrCreateAxis(axes, number) {\n            if (!axes[number - 1])\n                axes[number - 1] = {\n                    n: number, // save the number for future reference\n                    direction: axes == xaxes ? \"x\" : \"y\",\n                    options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)\n                };\n\n            return axes[number - 1];\n        }\n\n        function fillInSeriesOptions() {\n\n            var neededColors = series.length, maxIndex = -1, i;\n\n            // Subtract the number of series that already have fixed colors or\n            // color indexes from the number that we still need to generate.\n\n            for (i = 0; i < series.length; ++i) {\n                var sc = series[i].color;\n                if (sc != null) {\n                    neededColors--;\n                    if (typeof sc == \"number\" && sc > maxIndex) {\n                        maxIndex = sc;\n                    }\n                }\n            }\n\n            // If any of the series have fixed color indexes, then we need to\n            // generate at least as many colors as the highest index.\n\n            if (neededColors <= maxIndex) {\n                neededColors = maxIndex + 1;\n            }\n\n            // Generate all the colors, using first the option colors and then\n            // variations on those colors once they're exhausted.\n\n            var c, colors = [], colorPool = options.colors,\n                colorPoolSize = colorPool.length, variation = 0;\n\n            for (i = 0; i < neededColors; i++) {\n\n                c = $.color.parse(colorPool[i % colorPoolSize] || \"#666\");\n\n                // Each time we exhaust the colors in the pool we adjust\n                // a scaling factor used to produce more variations on\n                // those colors. The factor alternates negative/positive\n                // to produce lighter/darker colors.\n\n                // Reset the variation after every few cycles, or else\n                // it will end up producing only white or black colors.\n\n                if (i % colorPoolSize == 0 && i) {\n                    if (variation >= 0) {\n                        if (variation < 0.5) {\n                            variation = -variation - 0.2;\n                        } else variation = 0;\n                    } else variation = -variation;\n                }\n\n                colors[i] = c.scale('rgb', 1 + variation);\n            }\n\n            // Finalize the series options, filling in their colors\n\n            var colori = 0, s;\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                // assign colors\n                if (s.color == null) {\n                    s.color = colors[colori].toString();\n                    ++colori;\n                }\n                else if (typeof s.color == \"number\")\n                    s.color = colors[s.color].toString();\n\n                // turn on lines automatically in case nothing is set\n                if (s.lines.show == null) {\n                    var v, show = true;\n                    for (v in s)\n                        if (s[v] && s[v].show) {\n                            show = false;\n                            break;\n                        }\n                    if (show)\n                        s.lines.show = true;\n                }\n\n                // If nothing was provided for lines.zero, default it to match\n                // lines.fill, since areas by default should extend to zero.\n\n                if (s.lines.zero == null) {\n                    s.lines.zero = !!s.lines.fill;\n                }\n\n                // setup axes\n                s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, \"x\"));\n                s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, \"y\"));\n            }\n        }\n\n        function processData() {\n            var topSentry = Number.POSITIVE_INFINITY,\n                bottomSentry = Number.NEGATIVE_INFINITY,\n                fakeInfinity = Number.MAX_VALUE,\n                i, j, k, m, length,\n                s, points, ps, x, y, axis, val, f, p,\n                data, format;\n\n            function updateAxis(axis, min, max) {\n                if (min < axis.datamin && min != -fakeInfinity)\n                    axis.datamin = min;\n                if (max > axis.datamax && max != fakeInfinity)\n                    axis.datamax = max;\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                // init axis\n                axis.datamin = topSentry;\n                axis.datamax = bottomSentry;\n                axis.used = false;\n            });\n\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                s.datapoints = { points: [] };\n\n                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);\n            }\n\n            // first pass: clean and copy data\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                data = s.data;\n                format = s.datapoints.format;\n\n                if (!format) {\n                    format = [];\n                    // find out how to copy\n                    format.push({ x: true, number: true, required: true });\n                    format.push({ y: true, number: true, required: true });\n\n                    if (s.bars.show || (s.lines.show && s.lines.fill)) {\n                        var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));\n                        format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });\n                        if (s.bars.horizontal) {\n                            delete format[format.length - 1].y;\n                            format[format.length - 1].x = true;\n                        }\n                    }\n\n                    s.datapoints.format = format;\n                }\n\n                if (s.datapoints.pointsize != null)\n                    continue; // already filled in\n\n                s.datapoints.pointsize = format.length;\n\n                ps = s.datapoints.pointsize;\n                points = s.datapoints.points;\n\n                var insertSteps = s.lines.show && s.lines.steps;\n                s.xaxis.used = s.yaxis.used = true;\n\n                for (j = k = 0; j < data.length; ++j, k += ps) {\n                    p = data[j];\n\n                    var nullify = p == null;\n                    if (!nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = p[m];\n                            f = format[m];\n\n                            if (f) {\n                                if (f.number && val != null) {\n                                    val = +val; // convert to number\n                                    if (isNaN(val))\n                                        val = null;\n                                    else if (val == Infinity)\n                                        val = fakeInfinity;\n                                    else if (val == -Infinity)\n                                        val = -fakeInfinity;\n                                }\n\n                                if (val == null) {\n                                    if (f.required)\n                                        nullify = true;\n\n                                    if (f.defaultValue != null)\n                                        val = f.defaultValue;\n                                }\n                            }\n\n                            points[k + m] = val;\n                        }\n                    }\n\n                    if (nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = points[k + m];\n                            if (val != null) {\n                                f = format[m];\n                                // extract min/max info\n                                if (f.autoscale) {\n                                    if (f.x) {\n                                        updateAxis(s.xaxis, val, val);\n                                    }\n                                    if (f.y) {\n                                        updateAxis(s.yaxis, val, val);\n                                    }\n                                }\n                            }\n                            points[k + m] = null;\n                        }\n                    }\n                    else {\n                        // a little bit of line specific stuff that\n                        // perhaps shouldn't be here, but lacking\n                        // better means...\n                        if (insertSteps && k > 0\n                            && points[k - ps] != null\n                            && points[k - ps] != points[k]\n                            && points[k - ps + 1] != points[k + 1]) {\n                            // copy the point to make room for a middle point\n                            for (m = 0; m < ps; ++m)\n                                points[k + ps + m] = points[k + m];\n\n                            // middle point has same y\n                            points[k + 1] = points[k - ps + 1];\n\n                            // we've added a point, better reflect that\n                            k += ps;\n                        }\n                    }\n                }\n            }\n\n            // give the hooks a chance to run\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);\n            }\n\n            // second pass: find datamax/datamin for auto-scaling\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                points = s.datapoints.points;\n                ps = s.datapoints.pointsize;\n                format = s.datapoints.format;\n\n                var xmin = topSentry, ymin = topSentry,\n                    xmax = bottomSentry, ymax = bottomSentry;\n\n                for (j = 0; j < points.length; j += ps) {\n                    if (points[j] == null)\n                        continue;\n\n                    for (m = 0; m < ps; ++m) {\n                        val = points[j + m];\n                        f = format[m];\n                        if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)\n                            continue;\n\n                        if (f.x) {\n                            if (val < xmin)\n                                xmin = val;\n                            if (val > xmax)\n                                xmax = val;\n                        }\n                        if (f.y) {\n                            if (val < ymin)\n                                ymin = val;\n                            if (val > ymax)\n                                ymax = val;\n                        }\n                    }\n                }\n\n                if (s.bars.show) {\n                    // make sure we got room for the bar on the dancing floor\n                    var delta;\n\n                    switch (s.bars.align) {\n                        case \"left\":\n                            delta = 0;\n                            break;\n                        case \"right\":\n                            delta = -s.bars.barWidth;\n                            break;\n                        case \"center\":\n                            delta = -s.bars.barWidth / 2;\n                            break;\n                        default:\n                            throw new Error(\"Invalid bar alignment: \" + s.bars.align);\n                    }\n\n                    if (s.bars.horizontal) {\n                        ymin += delta;\n                        ymax += delta + s.bars.barWidth;\n                    }\n                    else {\n                        xmin += delta;\n                        xmax += delta + s.bars.barWidth;\n                    }\n                }\n\n                updateAxis(s.xaxis, xmin, xmax);\n                updateAxis(s.yaxis, ymin, ymax);\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                if (axis.datamin == topSentry)\n                    axis.datamin = null;\n                if (axis.datamax == bottomSentry)\n                    axis.datamax = null;\n            });\n        }\n\n        function setupCanvases() {\n\n            // Make sure the placeholder is clear of everything except canvases\n            // from a previous plot in this container that we'll try to re-use.\n\n            placeholder.css(\"padding\", 0) // padding messes up the positioning\n                .children(\":not(.flot-base,.flot-overlay)\").remove();\n\n            if (placeholder.css(\"position\") == 'static')\n                placeholder.css(\"position\", \"relative\"); // for positioning labels and overlay\n\n            surface = new Canvas(\"flot-base\", placeholder);\n            overlay = new Canvas(\"flot-overlay\", placeholder); // overlay canvas for interactive features\n\n            ctx = surface.context;\n            octx = overlay.context;\n\n            // define which element we're listening for events on\n            eventHolder = $(overlay.element).unbind();\n\n            // If we're re-using a plot object, shut down the old one\n\n            var existing = placeholder.data(\"plot\");\n\n            if (existing) {\n                existing.shutdown();\n                overlay.clear();\n            }\n\n            // save in case we get replotted\n            placeholder.data(\"plot\", plot);\n        }\n\n        function bindEvents() {\n            // bind events\n            if (options.grid.hoverable) {\n                eventHolder.mousemove(onMouseMove);\n\n                // Use bind, rather than .mouseleave, because we officially\n                // still support jQuery 1.2.6, which doesn't define a shortcut\n                // for mouseenter or mouseleave.  This was a bug/oversight that\n                // was fixed somewhere around 1.3.x.  We can return to using\n                // .mouseleave when we drop support for 1.2.6.\n\n                eventHolder.bind(\"mouseleave\", onMouseLeave);\n            }\n\n            if (options.grid.clickable)\n                eventHolder.click(onClick);\n\n            executeHooks(hooks.bindEvents, [eventHolder]);\n        }\n\n        function shutdown() {\n            if (redrawTimeout)\n                clearTimeout(redrawTimeout);\n\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n            eventHolder.unbind(\"mouseleave\", onMouseLeave);\n            eventHolder.unbind(\"click\", onClick);\n\n            executeHooks(hooks.shutdown, [eventHolder]);\n        }\n\n        function setTransformationHelpers(axis) {\n            // set helper functions on the axis, assumes plot area\n            // has been computed already\n\n            function identity(x) { return x; }\n\n            var s, m, t = axis.options.transform || identity,\n                it = axis.options.inverseTransform;\n\n            // precompute how much the axis is scaling a point\n            // in canvas space\n            if (axis.direction == \"x\") {\n                s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));\n                m = Math.min(t(axis.max), t(axis.min));\n            }\n            else {\n                s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));\n                s = -s;\n                m = Math.max(t(axis.max), t(axis.min));\n            }\n\n            // data point to canvas coordinate\n            if (t == identity) // slight optimization\n                axis.p2c = function (p) { return (p - m) * s; };\n            else\n                axis.p2c = function (p) { return (t(p) - m) * s; };\n            // canvas coordinate to data point\n            if (!it)\n                axis.c2p = function (c) { return m + c / s; };\n            else\n                axis.c2p = function (c) { return it(m + c / s); };\n        }\n\n        function measureTickLabels(axis) {\n\n            var opts = axis.options,\n                ticks = axis.ticks || [],\n                labelWidth = opts.labelWidth || 0,\n                labelHeight = opts.labelHeight || 0,\n                maxWidth = labelWidth || axis.direction == \"x\" ? Math.floor(surface.width / (ticks.length || 1)) : null,\n                legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n                layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n                font = opts.font || \"flot-tick-label tickLabel\";\n\n            for (var i = 0; i < ticks.length; ++i) {\n\n                var t = ticks[i];\n\n                if (!t.label)\n                    continue;\n\n                var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);\n\n                labelWidth = Math.max(labelWidth, info.width);\n                labelHeight = Math.max(labelHeight, info.height);\n            }\n\n            axis.labelWidth = opts.labelWidth || labelWidth;\n            axis.labelHeight = opts.labelHeight || labelHeight;\n        }\n\n        function allocateAxisBoxFirstPhase(axis) {\n            // find the bounding box of the axis by looking at label\n            // widths/heights and ticks, make room by diminishing the\n            // plotOffset; this first phase only looks at one\n            // dimension per axis, the other dimension depends on the\n            // other axes so will have to wait\n\n            var lw = axis.labelWidth,\n                lh = axis.labelHeight,\n                pos = axis.options.position,\n                tickLength = axis.options.tickLength,\n                axisMargin = options.grid.axisMargin,\n                padding = options.grid.labelMargin,\n                all = axis.direction == \"x\" ? xaxes : yaxes,\n                index, innermost;\n\n            // determine axis margin\n            var samePosition = $.grep(all, function (a) {\n                return a && a.options.position == pos && a.reserveSpace;\n            });\n            if ($.inArray(axis, samePosition) == samePosition.length - 1)\n                axisMargin = 0; // outermost\n\n            // Determine whether the axis is the first (innermost) on its side\n\n            innermost = $.inArray(axis, samePosition) == 0;\n\n            // determine tick length - if we're innermost, we can use \"full\"\n\n            if (tickLength == null) {\n                if (innermost)\n                    tickLength = \"full\";\n                else\n                    tickLength = 5;\n            }\n\n            if (!isNaN(+tickLength))\n                padding += +tickLength;\n\n            // compute box\n            if (axis.direction == \"x\") {\n                lh += padding;\n\n                if (pos == \"bottom\") {\n                    plotOffset.bottom += lh + axisMargin;\n                    axis.box = { top: surface.height - plotOffset.bottom, height: lh };\n                }\n                else {\n                    axis.box = { top: plotOffset.top + axisMargin, height: lh };\n                    plotOffset.top += lh + axisMargin;\n                }\n            }\n            else {\n                lw += padding;\n\n                if (pos == \"left\") {\n                    axis.box = { left: plotOffset.left + axisMargin, width: lw };\n                    plotOffset.left += lw + axisMargin;\n                }\n                else {\n                    plotOffset.right += lw + axisMargin;\n                    axis.box = { left: surface.width - plotOffset.right, width: lw };\n                }\n            }\n\n             // save for future reference\n            axis.position = pos;\n            axis.tickLength = tickLength;\n            axis.box.padding = padding;\n            axis.innermost = innermost;\n        }\n\n        function allocateAxisBoxSecondPhase(axis) {\n            // now that all axis boxes have been placed in one\n            // dimension, we can set the remaining dimension coordinates\n            if (axis.direction == \"x\") {\n                axis.box.left = plotOffset.left - axis.labelWidth / 2;\n                axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;\n            }\n            else {\n                axis.box.top = plotOffset.top - axis.labelHeight / 2;\n                axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;\n            }\n        }\n\n        function adjustLayoutForThingsStickingOut() {\n            // possibly adjust plot offset to ensure everything stays\n            // inside the canvas and isn't clipped off\n\n            var minMargin = options.grid.minBorderMargin,\n                margins = { x: 0, y: 0 }, i, axis;\n\n            // check stuff from the plot (FIXME: this should just read\n            // a value from the series, otherwise it's impossible to\n            // customize)\n            if (minMargin == null) {\n                minMargin = 0;\n                for (i = 0; i < series.length; ++i)\n                    minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2));\n            }\n\n            margins.x = margins.y = Math.ceil(minMargin);\n\n            // check axis labels, note we don't check the actual\n            // labels but instead use the overall width/height to not\n            // jump as much around with replots\n            $.each(allAxes(), function (_, axis) {\n                var dir = axis.direction;\n                if (axis.reserveSpace)\n                    margins[dir] = Math.ceil(Math.max(margins[dir], (dir == \"x\" ? axis.labelWidth : axis.labelHeight) / 2));\n            });\n\n            plotOffset.left = Math.max(margins.x, plotOffset.left);\n            plotOffset.right = Math.max(margins.x, plotOffset.right);\n            plotOffset.top = Math.max(margins.y, plotOffset.top);\n            plotOffset.bottom = Math.max(margins.y, plotOffset.bottom);\n        }\n\n        function setupGrid() {\n            var i, axes = allAxes(), showGrid = options.grid.show;\n\n            // Initialize the plot's offset from the edge of the canvas\n\n            for (var a in plotOffset) {\n                var margin = options.grid.margin || 0;\n                plotOffset[a] = typeof margin == \"number\" ? margin : margin[a] || 0;\n            }\n\n            executeHooks(hooks.processOffset, [plotOffset]);\n\n            // If the grid is visible, add its border width to the offset\n\n            for (var a in plotOffset) {\n                if(typeof(options.grid.borderWidth) == \"object\") {\n                    plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;\n                }\n                else {\n                    plotOffset[a] += showGrid ? options.grid.borderWidth : 0;\n                }\n            }\n\n            // init axes\n            $.each(axes, function (_, axis) {\n                axis.show = axis.options.show;\n                if (axis.show == null)\n                    axis.show = axis.used; // by default an axis is visible if it's got data\n\n                axis.reserveSpace = axis.show || axis.options.reserveSpace;\n\n                setRange(axis);\n            });\n\n            if (showGrid) {\n\n                var allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; });\n\n                $.each(allocatedAxes, function (_, axis) {\n                    // make the ticks\n                    setupTickGeneration(axis);\n                    setTicks(axis);\n                    snapRangeToTicks(axis, axis.ticks);\n                    // find labelWidth/Height for axis\n                    measureTickLabels(axis);\n                });\n\n                // with all dimensions calculated, we can compute the\n                // axis bounding boxes, start from the outside\n                // (reverse order)\n                for (i = allocatedAxes.length - 1; i >= 0; --i)\n                    allocateAxisBoxFirstPhase(allocatedAxes[i]);\n\n                // make sure we've got enough space for things that\n                // might stick out\n                adjustLayoutForThingsStickingOut();\n\n                $.each(allocatedAxes, function (_, axis) {\n                    allocateAxisBoxSecondPhase(axis);\n                });\n            }\n\n            plotWidth = surface.width - plotOffset.left - plotOffset.right;\n            plotHeight = surface.height - plotOffset.bottom - plotOffset.top;\n\n            // now we got the proper plot dimensions, we can compute the scaling\n            $.each(axes, function (_, axis) {\n                setTransformationHelpers(axis);\n            });\n\n            if (showGrid) {\n                drawAxisLabels();\n            }\n\n            insertLegend();\n        }\n\n        function setRange(axis) {\n            var opts = axis.options,\n                min = +(opts.min != null ? opts.min : axis.datamin),\n                max = +(opts.max != null ? opts.max : axis.datamax),\n                delta = max - min;\n\n            if (delta == 0.0) {\n                // degenerate case\n                var widen = max == 0 ? 1 : 0.01;\n\n                if (opts.min == null)\n                    min -= widen;\n                // always widen max if we couldn't widen min to ensure we\n                // don't fall into min == max which doesn't work\n                if (opts.max == null || opts.min != null)\n                    max += widen;\n            }\n            else {\n                // consider autoscaling\n                var margin = opts.autoscaleMargin;\n                if (margin != null) {\n                    if (opts.min == null) {\n                        min -= delta * margin;\n                        // make sure we don't go below zero if all values\n                        // are positive\n                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)\n                            min = 0;\n                    }\n                    if (opts.max == null) {\n                        max += delta * margin;\n                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)\n                            max = 0;\n                    }\n                }\n            }\n            axis.min = min;\n            axis.max = max;\n        }\n\n        function setupTickGeneration(axis) {\n            var opts = axis.options;\n\n            // estimate number of ticks\n            var noTicks;\n            if (typeof opts.ticks == \"number\" && opts.ticks > 0)\n                noTicks = opts.ticks;\n            else\n                // heuristic based on the model a*sqrt(x) fitted to\n                // some data points that seemed reasonable\n                noTicks = 0.3 * Math.sqrt(axis.direction == \"x\" ? surface.width : surface.height);\n\n            var delta = (axis.max - axis.min) / noTicks,\n                dec = -Math.floor(Math.log(delta) / Math.LN10),\n                maxDec = opts.tickDecimals;\n\n            if (maxDec != null && dec > maxDec) {\n                dec = maxDec;\n            }\n\n            var magn = Math.pow(10, -dec),\n                norm = delta / magn, // norm is between 1.0 and 10.0\n                size;\n\n            if (norm < 1.5) {\n                size = 1;\n            } else if (norm < 3) {\n                size = 2;\n                // special case for 2.5, requires an extra decimal\n                if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {\n                    size = 2.5;\n                    ++dec;\n                }\n            } else if (norm < 7.5) {\n                size = 5;\n            } else {\n                size = 10;\n            }\n\n            size *= magn;\n\n            if (opts.minTickSize != null && size < opts.minTickSize) {\n                size = opts.minTickSize;\n            }\n\n            axis.delta = delta;\n            axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);\n            axis.tickSize = opts.tickSize || size;\n\n            // Time mode was moved to a plug-in in 0.8, but since so many people use this\n            // we'll add an especially friendly make sure they remembered to include it.\n\n            if (opts.mode == \"time\" && !axis.tickGenerator) {\n                throw new Error(\"Time mode requires the flot.time plugin.\");\n            }\n\n            // Flot supports base-10 axes; any other mode else is handled by a plug-in,\n            // like flot.time.js.\n\n            if (!axis.tickGenerator) {\n\n                axis.tickGenerator = function (axis) {\n\n                    var ticks = [],\n                        start = floorInBase(axis.min, axis.tickSize),\n                        i = 0,\n                        v = Number.NaN,\n                        prev;\n\n                    do {\n                        prev = v;\n                        v = start + i * axis.tickSize;\n                        ticks.push(v);\n                        ++i;\n                    } while (v < axis.max && v != prev);\n                    return ticks;\n                };\n\n\t\t\t\taxis.tickFormatter = function (value, axis) {\n\n\t\t\t\t\tvar factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;\n\t\t\t\t\tvar formatted = \"\" + Math.round(value * factor) / factor;\n\n\t\t\t\t\t// If tickDecimals was specified, ensure that we have exactly that\n\t\t\t\t\t// much precision; otherwise default to the value's own precision.\n\n\t\t\t\t\tif (axis.tickDecimals != null) {\n\t\t\t\t\t\tvar decimal = formatted.indexOf(\".\");\n\t\t\t\t\t\tvar precision = decimal == -1 ? 0 : formatted.length - decimal - 1;\n\t\t\t\t\t\tif (precision < axis.tickDecimals) {\n\t\t\t\t\t\t\treturn (precision ? formatted : formatted + \".\") + (\"\" + factor).substr(1, axis.tickDecimals - precision);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n                    return formatted;\n                };\n            }\n\n            if ($.isFunction(opts.tickFormatter))\n                axis.tickFormatter = function (v, axis) { return \"\" + opts.tickFormatter(v, axis); };\n\n            if (opts.alignTicksWithAxis != null) {\n                var otherAxis = (axis.direction == \"x\" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];\n                if (otherAxis && otherAxis.used && otherAxis != axis) {\n                    // consider snapping min/max to outermost nice ticks\n                    var niceTicks = axis.tickGenerator(axis);\n                    if (niceTicks.length > 0) {\n                        if (opts.min == null)\n                            axis.min = Math.min(axis.min, niceTicks[0]);\n                        if (opts.max == null && niceTicks.length > 1)\n                            axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);\n                    }\n\n                    axis.tickGenerator = function (axis) {\n                        // copy ticks, scaled to this axis\n                        var ticks = [], v, i;\n                        for (i = 0; i < otherAxis.ticks.length; ++i) {\n                            v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);\n                            v = axis.min + v * (axis.max - axis.min);\n                            ticks.push(v);\n                        }\n                        return ticks;\n                    };\n\n                    // we might need an extra decimal since forced\n                    // ticks don't necessarily fit naturally\n                    if (!axis.mode && opts.tickDecimals == null) {\n                        var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),\n                            ts = axis.tickGenerator(axis);\n\n                        // only proceed if the tick interval rounded\n                        // with an extra decimal doesn't give us a\n                        // zero at end\n                        if (!(ts.length > 1 && /\\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))\n                            axis.tickDecimals = extraDec;\n                    }\n                }\n            }\n        }\n\n        function setTicks(axis) {\n            var oticks = axis.options.ticks, ticks = [];\n            if (oticks == null || (typeof oticks == \"number\" && oticks > 0))\n                ticks = axis.tickGenerator(axis);\n            else if (oticks) {\n                if ($.isFunction(oticks))\n                    // generate the ticks\n                    ticks = oticks(axis);\n                else\n                    ticks = oticks;\n            }\n\n            // clean up/labelify the supplied ticks, copy them over\n            var i, v;\n            axis.ticks = [];\n            for (i = 0; i < ticks.length; ++i) {\n                var label = null;\n                var t = ticks[i];\n                if (typeof t == \"object\") {\n                    v = +t[0];\n                    if (t.length > 1)\n                        label = t[1];\n                }\n                else\n                    v = +t;\n                if (label == null)\n                    label = axis.tickFormatter(v, axis);\n                if (!isNaN(v))\n                    axis.ticks.push({ v: v, label: label });\n            }\n        }\n\n        function snapRangeToTicks(axis, ticks) {\n            if (axis.options.autoscaleMargin && ticks.length > 0) {\n                // snap to ticks\n                if (axis.options.min == null)\n                    axis.min = Math.min(axis.min, ticks[0].v);\n                if (axis.options.max == null && ticks.length > 1)\n                    axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);\n            }\n        }\n\n        function draw() {\n\n            surface.clear();\n\n            executeHooks(hooks.drawBackground, [ctx]);\n\n            var grid = options.grid;\n\n            // draw background, if any\n            if (grid.show && grid.backgroundColor)\n                drawBackground();\n\n            if (grid.show && !grid.aboveData) {\n                drawGrid();\n            }\n\n            for (var i = 0; i < series.length; ++i) {\n                executeHooks(hooks.drawSeries, [ctx, series[i]]);\n                drawSeries(series[i]);\n            }\n\n            executeHooks(hooks.draw, [ctx]);\n\n            if (grid.show && grid.aboveData) {\n                drawGrid();\n            }\n\n            surface.render();\n\n            // A draw implies that either the axes or data have changed, so we\n            // should probably update the overlay highlights as well.\n\n            triggerRedrawOverlay();\n        }\n\n        function extractRange(ranges, coord) {\n            var axis, from, to, key, axes = allAxes();\n\n            for (var i = 0; i < axes.length; ++i) {\n                axis = axes[i];\n                if (axis.direction == coord) {\n                    key = coord + axis.n + \"axis\";\n                    if (!ranges[key] && axis.n == 1)\n                        key = coord + \"axis\"; // support x1axis as xaxis\n                    if (ranges[key]) {\n                        from = ranges[key].from;\n                        to = ranges[key].to;\n                        break;\n                    }\n                }\n            }\n\n            // backwards-compat stuff - to be removed in future\n            if (!ranges[key]) {\n                axis = coord == \"x\" ? xaxes[0] : yaxes[0];\n                from = ranges[coord + \"1\"];\n                to = ranges[coord + \"2\"];\n            }\n\n            // auto-reverse as an added bonus\n            if (from != null && to != null && from > to) {\n                var tmp = from;\n                from = to;\n                to = tmp;\n            }\n\n            return { from: from, to: to, axis: axis };\n        }\n\n        function drawBackground() {\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, \"rgba(255, 255, 255, 0)\");\n            ctx.fillRect(0, 0, plotWidth, plotHeight);\n            ctx.restore();\n        }\n\n        function drawGrid() {\n            var i, axes, bw, bc;\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // draw markings\n            var markings = options.grid.markings;\n            if (markings) {\n                if ($.isFunction(markings)) {\n                    axes = plot.getAxes();\n                    // xmin etc. is backwards compatibility, to be\n                    // removed in the future\n                    axes.xmin = axes.xaxis.min;\n                    axes.xmax = axes.xaxis.max;\n                    axes.ymin = axes.yaxis.min;\n                    axes.ymax = axes.yaxis.max;\n\n                    markings = markings(axes);\n                }\n\n                for (i = 0; i < markings.length; ++i) {\n                    var m = markings[i],\n                        xrange = extractRange(m, \"x\"),\n                        yrange = extractRange(m, \"y\");\n\n                    // fill in missing\n                    if (xrange.from == null)\n                        xrange.from = xrange.axis.min;\n                    if (xrange.to == null)\n                        xrange.to = xrange.axis.max;\n                    if (yrange.from == null)\n                        yrange.from = yrange.axis.min;\n                    if (yrange.to == null)\n                        yrange.to = yrange.axis.max;\n\n                    // clip\n                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||\n                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)\n                        continue;\n\n                    xrange.from = Math.max(xrange.from, xrange.axis.min);\n                    xrange.to = Math.min(xrange.to, xrange.axis.max);\n                    yrange.from = Math.max(yrange.from, yrange.axis.min);\n                    yrange.to = Math.min(yrange.to, yrange.axis.max);\n\n                    if (xrange.from == xrange.to && yrange.from == yrange.to)\n                        continue;\n\n                    // then draw\n                    xrange.from = xrange.axis.p2c(xrange.from);\n                    xrange.to = xrange.axis.p2c(xrange.to);\n                    yrange.from = yrange.axis.p2c(yrange.from);\n                    yrange.to = yrange.axis.p2c(yrange.to);\n\n                    if (xrange.from == xrange.to || yrange.from == yrange.to) {\n                        // draw line\n                        ctx.beginPath();\n                        ctx.strokeStyle = m.color || options.grid.markingsColor;\n                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;\n                        ctx.moveTo(xrange.from, yrange.from);\n                        ctx.lineTo(xrange.to, yrange.to);\n                        ctx.stroke();\n                    }\n                    else {\n                        // fill area\n                        ctx.fillStyle = m.color || options.grid.markingsColor;\n                        ctx.fillRect(xrange.from, yrange.to,\n                                     xrange.to - xrange.from,\n                                     yrange.from - yrange.to);\n                    }\n                }\n            }\n\n            // draw the ticks\n            axes = allAxes();\n            bw = options.grid.borderWidth;\n\n            for (var j = 0; j < axes.length; ++j) {\n                var axis = axes[j], box = axis.box,\n                    t = axis.tickLength, x, y, xoff, yoff;\n                if (!axis.show || axis.ticks.length == 0)\n                    continue;\n\n                ctx.lineWidth = 1;\n\n                // find the edges\n                if (axis.direction == \"x\") {\n                    x = 0;\n                    if (t == \"full\")\n                        y = (axis.position == \"top\" ? 0 : plotHeight);\n                    else\n                        y = box.top - plotOffset.top + (axis.position == \"top\" ? box.height : 0);\n                }\n                else {\n                    y = 0;\n                    if (t == \"full\")\n                        x = (axis.position == \"left\" ? 0 : plotWidth);\n                    else\n                        x = box.left - plotOffset.left + (axis.position == \"left\" ? box.width : 0);\n                }\n\n                // draw tick bar\n                if (!axis.innermost) {\n                    ctx.strokeStyle = axis.options.color;\n                    ctx.beginPath();\n                    xoff = yoff = 0;\n                    if (axis.direction == \"x\")\n                        xoff = plotWidth + 1;\n                    else\n                        yoff = plotHeight + 1;\n\n                    if (ctx.lineWidth == 1) {\n                        if (axis.direction == \"x\") {\n                            y = Math.floor(y) + 0.5;\n                        } else {\n                            x = Math.floor(x) + 0.5;\n                        }\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                    ctx.stroke();\n                }\n\n                // draw ticks\n\n                ctx.strokeStyle = axis.options.tickColor;\n\n                ctx.beginPath();\n                for (i = 0; i < axis.ticks.length; ++i) {\n                    var v = axis.ticks[i].v;\n\n                    xoff = yoff = 0;\n\n                    if (isNaN(v) || v < axis.min || v > axis.max\n                        // skip those lying on the axes if we got a border\n                        || (t == \"full\"\n                            && ((typeof bw == \"object\" && bw[axis.position] > 0) || bw > 0)\n                            && (v == axis.min || v == axis.max)))\n                        continue;\n\n                    if (axis.direction == \"x\") {\n                        x = axis.p2c(v);\n                        yoff = t == \"full\" ? -plotHeight : t;\n\n                        if (axis.position == \"top\")\n                            yoff = -yoff;\n                    }\n                    else {\n                        y = axis.p2c(v);\n                        xoff = t == \"full\" ? -plotWidth : t;\n\n                        if (axis.position == \"left\")\n                            xoff = -xoff;\n                    }\n\n                    if (ctx.lineWidth == 1) {\n                        if (axis.direction == \"x\")\n                            x = Math.floor(x) + 0.5;\n                        else\n                            y = Math.floor(y) + 0.5;\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                }\n\n                ctx.stroke();\n            }\n\n\n            // draw border\n            if (bw) {\n                // If either borderWidth or borderColor is an object, then draw the border\n                // line by line instead of as one rectangle\n                bc = options.grid.borderColor;\n                if(typeof bw == \"object\" || typeof bc == \"object\") {\n                    if (typeof bw !== \"object\") {\n                        bw = {top: bw, right: bw, bottom: bw, left: bw};\n                    }\n                    if (typeof bc !== \"object\") {\n                        bc = {top: bc, right: bc, bottom: bc, left: bc};\n                    }\n\n                    if (bw.top > 0) {\n                        ctx.strokeStyle = bc.top;\n                        ctx.lineWidth = bw.top;\n                        ctx.beginPath();\n                        ctx.moveTo(0 - bw.left, 0 - bw.top/2);\n                        ctx.lineTo(plotWidth, 0 - bw.top/2);\n                        ctx.stroke();\n                    }\n\n                    if (bw.right > 0) {\n                        ctx.strokeStyle = bc.right;\n                        ctx.lineWidth = bw.right;\n                        ctx.beginPath();\n                        ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);\n                        ctx.lineTo(plotWidth + bw.right / 2, plotHeight);\n                        ctx.stroke();\n                    }\n\n                    if (bw.bottom > 0) {\n                        ctx.strokeStyle = bc.bottom;\n                        ctx.lineWidth = bw.bottom;\n                        ctx.beginPath();\n                        ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);\n                        ctx.lineTo(0, plotHeight + bw.bottom / 2);\n                        ctx.stroke();\n                    }\n\n                    if (bw.left > 0) {\n                        ctx.strokeStyle = bc.left;\n                        ctx.lineWidth = bw.left;\n                        ctx.beginPath();\n                        ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom);\n                        ctx.lineTo(0- bw.left/2, 0);\n                        ctx.stroke();\n                    }\n                }\n                else {\n                    ctx.lineWidth = bw;\n                    ctx.strokeStyle = options.grid.borderColor;\n                    ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);\n                }\n            }\n\n            ctx.restore();\n        }\n\n        function drawAxisLabels() {\n\n            $.each(allAxes(), function (_, axis) {\n                if (!axis.show || axis.ticks.length == 0)\n                    return;\n\n                var box = axis.box,\n                    legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n                    layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n                    font = axis.options.font || \"flot-tick-label tickLabel\",\n                    tick, x, y, halign, valign;\n\n                surface.removeText(layer);\n\n                for (var i = 0; i < axis.ticks.length; ++i) {\n\n                    tick = axis.ticks[i];\n                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)\n                        continue;\n\n                    if (axis.direction == \"x\") {\n                        halign = \"center\";\n                        x = plotOffset.left + axis.p2c(tick.v);\n                        if (axis.position == \"bottom\") {\n                            y = box.top + box.padding;\n                        } else {\n                            y = box.top + box.height - box.padding;\n                            valign = \"bottom\";\n                        }\n                    } else {\n                        valign = \"middle\";\n                        y = plotOffset.top + axis.p2c(tick.v);\n                        if (axis.position == \"left\") {\n                            x = box.left + box.width - box.padding;\n                            halign = \"right\";\n                        } else {\n                            x = box.left + box.padding;\n                        }\n                    }\n\n                    surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);\n                }\n            });\n        }\n\n        function drawSeries(series) {\n            if (series.lines.show)\n                drawSeriesLines(series);\n            if (series.bars.show)\n                drawSeriesBars(series);\n            if (series.points.show)\n                drawSeriesPoints(series);\n        }\n\n        function drawSeriesLines(series) {\n            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    prevx = null, prevy = null;\n\n                ctx.beginPath();\n                for (var i = ps; i < points.length; i += ps) {\n                    var x1 = points[i - ps], y1 = points[i - ps + 1],\n                        x2 = points[i], y2 = points[i + 1];\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min) {\n                        if (y2 < axisy.min)\n                            continue;   // line segment is outside\n                        // compute new intersection point\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min) {\n                        if (y1 < axisy.min)\n                            continue;\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max) {\n                        if (y2 > axisy.max)\n                            continue;\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max) {\n                        if (y1 > axisy.max)\n                            continue;\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (x1 != prevx || y1 != prevy)\n                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);\n\n                    prevx = x2;\n                    prevy = y2;\n                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);\n                }\n                ctx.stroke();\n            }\n\n            function plotLineArea(datapoints, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),\n                    i = 0, top, areaOpen = false,\n                    ypos = 1, segmentStart = 0, segmentEnd = 0;\n\n                // we process each segment in two turns, first forward\n                // direction to sketch out top, then once we hit the\n                // end we go backwards to sketch the bottom\n                while (true) {\n                    if (ps > 0 && i > points.length + ps)\n                        break;\n\n                    i += ps; // ps is negative if going backwards\n\n                    var x1 = points[i - ps],\n                        y1 = points[i - ps + ypos],\n                        x2 = points[i], y2 = points[i + ypos];\n\n                    if (areaOpen) {\n                        if (ps > 0 && x1 != null && x2 == null) {\n                            // at turning point\n                            segmentEnd = i;\n                            ps = -ps;\n                            ypos = 2;\n                            continue;\n                        }\n\n                        if (ps < 0 && i == segmentStart + ps) {\n                            // done with the reverse sweep\n                            ctx.fill();\n                            areaOpen = false;\n                            ps = -ps;\n                            ypos = 1;\n                            i = segmentStart = segmentEnd + ps;\n                            continue;\n                        }\n                    }\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip x values\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (!areaOpen) {\n                        // open area\n                        ctx.beginPath();\n                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));\n                        areaOpen = true;\n                    }\n\n                    // now first check the case where both is outside\n                    if (y1 >= axisy.max && y2 >= axisy.max) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));\n                        continue;\n                    }\n                    else if (y1 <= axisy.min && y2 <= axisy.min) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));\n                        continue;\n                    }\n\n                    // else it's a bit more complicated, there might\n                    // be a flat maxed out rectangle first, then a\n                    // triangular cutout or reverse; to find these\n                    // keep track of the current x values\n                    var x1old = x1, x2old = x2;\n\n                    // clip the y values, without shortcutting, we\n                    // go through all cases in turn\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // if the x value was changed we got a rectangle\n                    // to fill\n                    if (x1 != x1old) {\n                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));\n                        // it goes to (x1, y1), but we fill that below\n                    }\n\n                    // fill triangular section, this sometimes result\n                    // in redundant points if (x1, y1) hasn't changed\n                    // from previous line to, but we just ignore that\n                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));\n                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n\n                    // fill the other rectangle if it's there\n                    if (x2 != x2old) {\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));\n                    }\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n            ctx.lineJoin = \"round\";\n\n            var lw = series.lines.lineWidth,\n                sw = series.shadowSize;\n            // FIXME: consider another form of shadow when filling is turned on\n            if (lw > 0 && sw > 0) {\n                // draw shadow as a thick and thin line with transparency\n                ctx.lineWidth = sw;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                // position shadow at angle from the mid of line\n                var angle = Math.PI/18;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);\n                ctx.lineWidth = sw/2;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);\n            if (fillStyle) {\n                ctx.fillStyle = fillStyle;\n                plotLineArea(series.datapoints, series.xaxis, series.yaxis);\n            }\n\n            if (lw > 0)\n                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function drawSeriesPoints(series) {\n            function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    var x = points[i], y = points[i + 1];\n                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                        continue;\n\n                    ctx.beginPath();\n                    x = axisx.p2c(x);\n                    y = axisy.p2c(y) + offset;\n                    if (symbol == \"circle\")\n                        ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);\n                    else\n                        symbol(ctx, x, y, radius, shadow);\n                    ctx.closePath();\n\n                    if (fillStyle) {\n                        ctx.fillStyle = fillStyle;\n                        ctx.fill();\n                    }\n                    ctx.stroke();\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            var lw = series.points.lineWidth,\n                sw = series.shadowSize,\n                radius = series.points.radius,\n                symbol = series.points.symbol;\n\n            // If the user sets the line width to 0, we change it to a very \n            // small value. A line width of 0 seems to force the default of 1.\n            // Doing the conditional here allows the shadow setting to still be \n            // optional even with a lineWidth of 0.\n\n            if( lw == 0 )\n                lw = 0.0001;\n\n            if (lw > 0 && sw > 0) {\n                // draw shadow in two steps\n                var w = sw / 2;\n                ctx.lineWidth = w;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                plotPoints(series.datapoints, radius, null, w + w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n\n                ctx.strokeStyle = \"rgba(0,0,0,0.2)\";\n                plotPoints(series.datapoints, radius, null, w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            plotPoints(series.datapoints, radius,\n                       getFillStyle(series.points, series.color), 0, false,\n                       series.xaxis, series.yaxis, symbol);\n            ctx.restore();\n        }\n\n        function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {\n            var left, right, bottom, top,\n                drawLeft, drawRight, drawTop, drawBottom,\n                tmp;\n\n            // in horizontal mode, we start the bar from the left\n            // instead of from the bottom so it appears to be\n            // horizontal rather than vertical\n            if (horizontal) {\n                drawBottom = drawRight = drawTop = true;\n                drawLeft = false;\n                left = b;\n                right = x;\n                top = y + barLeft;\n                bottom = y + barRight;\n\n                // account for negative bars\n                if (right < left) {\n                    tmp = right;\n                    right = left;\n                    left = tmp;\n                    drawLeft = true;\n                    drawRight = false;\n                }\n            }\n            else {\n                drawLeft = drawRight = drawTop = true;\n                drawBottom = false;\n                left = x + barLeft;\n                right = x + barRight;\n                bottom = b;\n                top = y;\n\n                // account for negative bars\n                if (top < bottom) {\n                    tmp = top;\n                    top = bottom;\n                    bottom = tmp;\n                    drawBottom = true;\n                    drawTop = false;\n                }\n            }\n\n            // clip\n            if (right < axisx.min || left > axisx.max ||\n                top < axisy.min || bottom > axisy.max)\n                return;\n\n            if (left < axisx.min) {\n                left = axisx.min;\n                drawLeft = false;\n            }\n\n            if (right > axisx.max) {\n                right = axisx.max;\n                drawRight = false;\n            }\n\n            if (bottom < axisy.min) {\n                bottom = axisy.min;\n                drawBottom = false;\n            }\n\n            if (top > axisy.max) {\n                top = axisy.max;\n                drawTop = false;\n            }\n\n            left = axisx.p2c(left);\n            bottom = axisy.p2c(bottom);\n            right = axisx.p2c(right);\n            top = axisy.p2c(top);\n\n            // fill the bar\n            if (fillStyleCallback) {\n                c.beginPath();\n                c.moveTo(left, bottom);\n                c.lineTo(left, top);\n                c.lineTo(right, top);\n                c.lineTo(right, bottom);\n                c.fillStyle = fillStyleCallback(bottom, top);\n                c.fill();\n            }\n\n            // draw outline\n            if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {\n                c.beginPath();\n\n                // FIXME: inline moveTo is buggy with excanvas\n                c.moveTo(left, bottom + offset);\n                if (drawLeft)\n                    c.lineTo(left, top + offset);\n                else\n                    c.moveTo(left, top + offset);\n                if (drawTop)\n                    c.lineTo(right, top + offset);\n                else\n                    c.moveTo(right, top + offset);\n                if (drawRight)\n                    c.lineTo(right, bottom + offset);\n                else\n                    c.moveTo(right, bottom + offset);\n                if (drawBottom)\n                    c.lineTo(left, bottom + offset);\n                else\n                    c.moveTo(left, bottom + offset);\n                c.stroke();\n            }\n        }\n\n        function drawSeriesBars(series) {\n            function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    if (points[i] == null)\n                        continue;\n                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // FIXME: figure out a way to add shadows (for instance along the right edge)\n            ctx.lineWidth = series.bars.lineWidth;\n            ctx.strokeStyle = series.color;\n\n            var barLeft;\n\n            switch (series.bars.align) {\n                case \"left\":\n                    barLeft = 0;\n                    break;\n                case \"right\":\n                    barLeft = -series.bars.barWidth;\n                    break;\n                case \"center\":\n                    barLeft = -series.bars.barWidth / 2;\n                    break;\n                default:\n                    throw new Error(\"Invalid bar alignment: \" + series.bars.align);\n            }\n\n            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;\n            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function getFillStyle(filloptions, seriesColor, bottom, top) {\n            var fill = filloptions.fill;\n            if (!fill)\n                return null;\n\n            if (filloptions.fillColor)\n                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);\n\n            var c = $.color.parse(seriesColor);\n            c.a = typeof fill == \"number\" ? fill : 0.4;\n            c.normalize();\n            return c.toString();\n        }\n\n        function insertLegend() {\n\n            placeholder.find(\".legend\").remove();\n\n            if (!options.legend.show)\n                return;\n\n            var fragments = [], entries = [], rowStarted = false,\n                lf = options.legend.labelFormatter, s, label;\n\n            // Build a list of legend entries, with each having a label and a color\n\n            for (var i = 0; i < series.length; ++i) {\n                s = series[i];\n                if (s.label) {\n                    label = lf ? lf(s.label, s) : s.label;\n                    if (label) {\n                        entries.push({\n                            label: label,\n                            color: s.color\n                        });\n                    }\n                }\n            }\n\n            // Sort the legend using either the default or a custom comparator\n\n            if (options.legend.sorted) {\n                if ($.isFunction(options.legend.sorted)) {\n                    entries.sort(options.legend.sorted);\n                } else if (options.legend.sorted == \"reverse\") {\n                \tentries.reverse();\n                } else {\n                    var ascending = options.legend.sorted != \"descending\";\n                    entries.sort(function(a, b) {\n                        return a.label == b.label ? 0 : (\n                            (a.label < b.label) != ascending ? 1 : -1   // Logical XOR\n                        );\n                    });\n                }\n            }\n\n            // Generate markup for the list of entries, in their final order\n\n            for (var i = 0; i < entries.length; ++i) {\n\n                var entry = entries[i];\n\n                if (i % options.legend.noColumns == 0) {\n                    if (rowStarted)\n                        fragments.push('</tr>');\n                    fragments.push('<tr>');\n                    rowStarted = true;\n                }\n\n                fragments.push(\n                    '<td class=\"legendColorBox\"><div style=\"border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px\"><div style=\"width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden\"></div></div></td>' +\n                    '<td class=\"legendLabel\">' + entry.label + '</td>'\n                );\n            }\n\n            if (rowStarted)\n                fragments.push('</tr>');\n\n            if (fragments.length == 0)\n                return;\n\n            var table = '<table style=\"font-size:smaller;color:' + options.grid.color + '\">' + fragments.join(\"\") + '</table>';\n            if (options.legend.container != null)\n                $(options.legend.container).html(table);\n            else {\n                var pos = \"\",\n                    p = options.legend.position,\n                    m = options.legend.margin;\n                if (m[0] == null)\n                    m = [m, m];\n                if (p.charAt(0) == \"n\")\n                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';\n                else if (p.charAt(0) == \"s\")\n                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';\n                if (p.charAt(1) == \"e\")\n                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';\n                else if (p.charAt(1) == \"w\")\n                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';\n                var legend = $('<div class=\"legend\">' + table.replace('style=\"', 'style=\"position:absolute;' + pos +';') + '</div>').appendTo(placeholder);\n                if (options.legend.backgroundOpacity != 0.0) {\n                    // put in the transparent background\n                    // separately to avoid blended labels and\n                    // label boxes\n                    var c = options.legend.backgroundColor;\n                    if (c == null) {\n                        c = options.grid.backgroundColor;\n                        if (c && typeof c == \"string\")\n                            c = $.color.parse(c);\n                        else\n                            c = $.color.extract(legend, 'background-color');\n                        c.a = 1;\n                        c = c.toString();\n                    }\n                    var div = legend.children();\n                    $('<div style=\"position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';\"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);\n                }\n            }\n        }\n\n\n        // interactive features\n\n        var highlights = [],\n            redrawTimeout = null;\n\n        // returns the data item the mouse is over, or null if none is found\n        function findNearbyItem(mouseX, mouseY, seriesFilter) {\n            var maxDistance = options.grid.mouseActiveRadius,\n                smallestDistance = maxDistance * maxDistance + 1,\n                item = null, foundPoint = false, i, j, ps;\n\n            for (i = series.length - 1; i >= 0; --i) {\n                if (!seriesFilter(series[i]))\n                    continue;\n\n                var s = series[i],\n                    axisx = s.xaxis,\n                    axisy = s.yaxis,\n                    points = s.datapoints.points,\n                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster\n                    my = axisy.c2p(mouseY),\n                    maxx = maxDistance / axisx.scale,\n                    maxy = maxDistance / axisy.scale;\n\n                ps = s.datapoints.pointsize;\n                // with inverse transforms, we can't use the maxx/maxy\n                // optimization, sadly\n                if (axisx.options.inverseTransform)\n                    maxx = Number.MAX_VALUE;\n                if (axisy.options.inverseTransform)\n                    maxy = Number.MAX_VALUE;\n\n                if (s.lines.show || s.points.show) {\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1];\n                        if (x == null)\n                            continue;\n\n                        // For points and lines, the cursor must be within a\n                        // certain distance to the data point\n                        if (x - mx > maxx || x - mx < -maxx ||\n                            y - my > maxy || y - my < -maxy)\n                            continue;\n\n                        // We have to calculate distances in pixels, not in\n                        // data units, because the scales of the axes may be different\n                        var dx = Math.abs(axisx.p2c(x) - mouseX),\n                            dy = Math.abs(axisy.p2c(y) - mouseY),\n                            dist = dx * dx + dy * dy; // we save the sqrt\n\n                        // use <= to ensure last point takes precedence\n                        // (last generally means on top of)\n                        if (dist < smallestDistance) {\n                            smallestDistance = dist;\n                            item = [i, j / ps];\n                        }\n                    }\n                }\n\n                if (s.bars.show && !item) { // no other point can be nearby\n                    var barLeft = s.bars.align == \"left\" ? 0 : -s.bars.barWidth/2,\n                        barRight = barLeft + s.bars.barWidth;\n\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1], b = points[j + 2];\n                        if (x == null)\n                            continue;\n\n                        // for a bar graph, the cursor must be inside the bar\n                        if (series[i].bars.horizontal ?\n                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&\n                             my >= y + barLeft && my <= y + barRight) :\n                            (mx >= x + barLeft && mx <= x + barRight &&\n                             my >= Math.min(b, y) && my <= Math.max(b, y)))\n                                item = [i, j / ps];\n                    }\n                }\n            }\n\n            if (item) {\n                i = item[0];\n                j = item[1];\n                ps = series[i].datapoints.pointsize;\n\n                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),\n                         dataIndex: j,\n                         series: series[i],\n                         seriesIndex: i };\n            }\n\n            return null;\n        }\n\n        function onMouseMove(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return s[\"hoverable\"] != false; });\n        }\n\n        function onMouseLeave(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return false; });\n        }\n\n        function onClick(e) {\n            triggerClickHoverEvent(\"plotclick\", e,\n                                   function (s) { return s[\"clickable\"] != false; });\n        }\n\n        // trigger click or hover event (they send the same parameters\n        // so we share their code)\n        function triggerClickHoverEvent(eventname, event, seriesFilter) {\n            var offset = eventHolder.offset(),\n                canvasX = event.pageX - offset.left - plotOffset.left,\n                canvasY = event.pageY - offset.top - plotOffset.top,\n            pos = canvasToAxisCoords({ left: canvasX, top: canvasY });\n\n            pos.pageX = event.pageX;\n            pos.pageY = event.pageY;\n\n            var item = findNearbyItem(canvasX, canvasY, seriesFilter);\n\n            if (item) {\n                // fill in mouse pos for any listeners out there\n                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);\n                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);\n            }\n\n            if (options.grid.autoHighlight) {\n                // clear auto-highlights\n                for (var i = 0; i < highlights.length; ++i) {\n                    var h = highlights[i];\n                    if (h.auto == eventname &&\n                        !(item && h.series == item.series &&\n                          h.point[0] == item.datapoint[0] &&\n                          h.point[1] == item.datapoint[1]))\n                        unhighlight(h.series, h.point);\n                }\n\n                if (item)\n                    highlight(item.series, item.datapoint, eventname);\n            }\n\n            placeholder.trigger(eventname, [ pos, item ]);\n        }\n\n        function triggerRedrawOverlay() {\n            var t = options.interaction.redrawOverlayInterval;\n            if (t == -1) {      // skip event queue\n                drawOverlay();\n                return;\n            }\n\n            if (!redrawTimeout)\n                redrawTimeout = setTimeout(drawOverlay, t);\n        }\n\n        function drawOverlay() {\n            redrawTimeout = null;\n\n            // draw highlights\n            octx.save();\n            overlay.clear();\n            octx.translate(plotOffset.left, plotOffset.top);\n\n            var i, hi;\n            for (i = 0; i < highlights.length; ++i) {\n                hi = highlights[i];\n\n                if (hi.series.bars.show)\n                    drawBarHighlight(hi.series, hi.point);\n                else\n                    drawPointHighlight(hi.series, hi.point);\n            }\n            octx.restore();\n\n            executeHooks(hooks.drawOverlay, [octx]);\n        }\n\n        function highlight(s, point, auto) {\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\") {\n                var ps = s.datapoints.pointsize;\n                point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n            }\n\n            var i = indexOfHighlight(s, point);\n            if (i == -1) {\n                highlights.push({ series: s, point: point, auto: auto });\n\n                triggerRedrawOverlay();\n            }\n            else if (!auto)\n                highlights[i].auto = false;\n        }\n\n        function unhighlight(s, point) {\n            if (s == null && point == null) {\n                highlights = [];\n                triggerRedrawOverlay();\n                return;\n            }\n\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\") {\n                var ps = s.datapoints.pointsize;\n                point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n            }\n\n            var i = indexOfHighlight(s, point);\n            if (i != -1) {\n                highlights.splice(i, 1);\n\n                triggerRedrawOverlay();\n            }\n        }\n\n        function indexOfHighlight(s, p) {\n            for (var i = 0; i < highlights.length; ++i) {\n                var h = highlights[i];\n                if (h.series == s && h.point[0] == p[0]\n                    && h.point[1] == p[1])\n                    return i;\n            }\n            return -1;\n        }\n\n        function drawPointHighlight(series, point) {\n            var x = point[0], y = point[1],\n                axisx = series.xaxis, axisy = series.yaxis,\n                highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();\n\n            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                return;\n\n            var pointRadius = series.points.radius + series.points.lineWidth / 2;\n            octx.lineWidth = pointRadius;\n            octx.strokeStyle = highlightColor;\n            var radius = 1.5 * pointRadius;\n            x = axisx.p2c(x);\n            y = axisy.p2c(y);\n\n            octx.beginPath();\n            if (series.points.symbol == \"circle\")\n                octx.arc(x, y, radius, 0, 2 * Math.PI, false);\n            else\n                series.points.symbol(octx, x, y, radius, false);\n            octx.closePath();\n            octx.stroke();\n        }\n\n        function drawBarHighlight(series, point) {\n            var highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),\n                fillStyle = highlightColor,\n                barLeft = series.bars.align == \"left\" ? 0 : -series.bars.barWidth/2;\n\n            octx.lineWidth = series.bars.lineWidth;\n            octx.strokeStyle = highlightColor;\n\n            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,\n                    0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);\n        }\n\n        function getColorOrGradient(spec, bottom, top, defaultColor) {\n            if (typeof spec == \"string\")\n                return spec;\n            else {\n                // assume this is a gradient spec; IE currently only\n                // supports a simple vertical gradient properly, so that's\n                // what we support too\n                var gradient = ctx.createLinearGradient(0, top, 0, bottom);\n\n                for (var i = 0, l = spec.colors.length; i < l; ++i) {\n                    var c = spec.colors[i];\n                    if (typeof c != \"string\") {\n                        var co = $.color.parse(defaultColor);\n                        if (c.brightness != null)\n                            co = co.scale('rgb', c.brightness);\n                        if (c.opacity != null)\n                            co.a *= c.opacity;\n                        c = co.toString();\n                    }\n                    gradient.addColorStop(i / (l - 1), c);\n                }\n\n                return gradient;\n            }\n        }\n    }\n\n    // Add the plot function to the top level of the jQuery object\n\n    $.plot = function(placeholder, data, options) {\n        //var t0 = new Date();\n        var plot = new Plot($(placeholder), data, options, $.plot.plugins);\n        //(window.console ? console.log : alert)(\"time used (msecs): \" + ((new Date()).getTime() - t0.getTime()));\n        return plot;\n    };\n\n    $.plot.version = \"0.8.2-alpha\";\n\n    $.plot.plugins = [];\n\n    // Also add the plot function as a chainable property\n\n    $.fn.plot = function(data, options) {\n        return this.each(function() {\n            $.plot(this, data, options);\n        });\n    };\n\n    // round to nearby lower multiple of base\n    function floorInBase(n, base) {\n        return base * Math.floor(n / base);\n    }\n\n})(jQuery);\n\n;\n/*\n * jquery.flot.tooltip\n * \n * description: easy-to-use tooltips for Flot charts\n * version: 0.6.1\n * author: Krzysztof Urbas @krzysu [myviews.pl]\n * website: https://github.com/krzysu/flot.tooltip\n * \n * build on 2013-04-12\n * released under MIT License, 2012\n*/ \n(function ($) {\n\n    // plugin options, default values\n    var defaultOptions = {\n        tooltip: false,\n        tooltipOpts: {\n            content: \"%s | X: %x | Y: %y\",\n            // allowed templates are:\n            // %s -> series label,\n            // %x -> X value,\n            // %y -> Y value,\n            // %x.2 -> precision of X value,\n            // %p -> percent\n            xDateFormat: null,\n            yDateFormat: null,\n            shifts: {\n                x: 10,\n                y: 20\n            },\n            defaultTheme: true,\n\n            // callbacks\n            onHover: function(flotItem, $tooltipEl) {}\n        }\n    };\n\n    // object\n    var FlotTooltip = function(plot) {\n\n        // variables\n        this.tipPosition = {x: 0, y: 0};\n\n        this.init(plot);\n    };\n\n    // main plugin function\n    FlotTooltip.prototype.init = function(plot) {\n\n        var that = this;\n\n        plot.hooks.bindEvents.push(function (plot, eventHolder) {\n\n            // get plot options\n            that.plotOptions = plot.getOptions();\n\n            // if not enabled return\n            if (that.plotOptions.tooltip === false || typeof that.plotOptions.tooltip === 'undefined') return;\n\n            // shortcut to access tooltip options\n            that.tooltipOptions = that.plotOptions.tooltipOpts;\n\n            // create tooltip DOM element\n            var $tip = that.getDomElement();\n\n            // bind event\n            $( plot.getPlaceholder() ).bind(\"plothover\", function (event, pos, item) {\n\n                if (item) {\n                    var tipText;\n\n                    // convert tooltip content template to real tipText\n                    tipText = that.stringFormat(that.tooltipOptions.content, item);\n\n                    $tip.html( tipText );\n                    that.updateTooltipPosition({ x: pos.pageX, y: pos.pageY });\n                    $tip.css({\n                            left: that.tipPosition.x + that.tooltipOptions.shifts.x,\n                            top: that.tipPosition.y + that.tooltipOptions.shifts.y\n                        })\n                        .show();\n\n                    // run callback\n                    if(typeof that.tooltipOptions.onHover === 'function') {\n                        that.tooltipOptions.onHover(item, $tip);\n                    }\n                }\n                else {\n                    $tip.hide().html('');\n                }\n            });\n\n            eventHolder.mousemove( function(e) {\n                var pos = {};\n                pos.x = e.pageX;\n                pos.y = e.pageY;\n                that.updateTooltipPosition(pos);\n            });\n        });\n    };\n\n    /**\n     * get or create tooltip DOM element\n     * @return jQuery object\n     */\n    FlotTooltip.prototype.getDomElement = function() {\n        var $tip;\n\n        if( $('#flotTip').length > 0 ){\n            $tip = $('#flotTip');\n        }\n        else {\n            $tip = $('<div />').attr('id', 'flotTip');\n            $tip.appendTo('body').hide().css({position: 'absolute'});\n\n            if(this.tooltipOptions.defaultTheme) {\n                $tip.css({\n                    'background': '#fff',\n                    'z-index': '100',\n                    'padding': '0.4em 0.6em',\n                    'border-radius': '0.5em',\n                    'font-size': '0.8em',\n                    'border': '1px solid #111',\n                    'display': 'inline-block',\n                    'white-space': 'nowrap'\n                });\n            }\n        }\n\n        return $tip;\n    };\n\n    // as the name says\n    FlotTooltip.prototype.updateTooltipPosition = function(pos) {\n        var totalTipWidth = $(\"#flotTip\").outerWidth() + this.tooltipOptions.shifts.x;\n        var totalTipHeight = $(\"#flotTip\").outerHeight() + this.tooltipOptions.shifts.y;\n        if ((pos.x - $(window).scrollLeft()) > ($(window).innerWidth() - totalTipWidth)) {\n            pos.x -= totalTipWidth;\n        }\n        if ((pos.y - $(window).scrollTop()) > ($(window).innerHeight() - totalTipHeight)) {\n            pos.y -= totalTipHeight;\n        }\n        this.tipPosition.x = pos.x;\n        this.tipPosition.y = pos.y;\n    };\n\n    /**\n     * core function, create tooltip content\n     * @param  {string} content - template with tooltip content\n     * @param  {object} item - Flot item\n     * @return {string} real tooltip content for current item\n     */\n    FlotTooltip.prototype.stringFormat = function(content, item) {\n\n        var percentPattern = /%p\\.{0,1}(\\d{0,})/;\n        var seriesPattern = /%s/;\n        var xPattern = /%x\\.{0,1}(\\d{0,})/;\n        var yPattern = /%y\\.{0,1}(\\d{0,})/;\n\n        // if it is a function callback get the content string\n        if( typeof(content) === 'function' ) {\n            content = content(item.series.data[item.dataIndex][0], item.series.data[item.dataIndex][1]);\n        }\n\n        // percent match for pie charts\n        if( typeof (item.series.percent) !== 'undefined' ) {\n            content = this.adjustValPrecision(percentPattern, content, item.series.percent);\n        }\n\n        // series match\n        if( typeof(item.series.label) !== 'undefined' ) {\n            content = content.replace(seriesPattern, item.series.label);\n        }\n\n        // time mode axes with custom dateFormat\n        if(this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) {\n            content = content.replace(xPattern, this.timestampToDate(item.series.data[item.dataIndex][0], this.tooltipOptions.xDateFormat));\n        }\n\n        if(this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) {\n            content = content.replace(yPattern, this.timestampToDate(item.series.data[item.dataIndex][1], this.tooltipOptions.yDateFormat));\n        }\n\n        // set precision if defined\n        if( typeof item.series.data[item.dataIndex][0] === 'number' ) {\n            content = this.adjustValPrecision(xPattern, content, item.series.data[item.dataIndex][0]);\n        }\n        if( typeof item.series.data[item.dataIndex][1] === 'number' ) {\n            content = this.adjustValPrecision(yPattern, content, item.series.data[item.dataIndex][1]);\n        }\n\n        // if no value customization, use tickFormatter by default\n        if(typeof item.series.xaxis.tickFormatter !== 'undefined') {\n            content = content.replace(xPattern, item.series.xaxis.tickFormatter(item.series.data[item.dataIndex][0], item.series.xaxis));\n        }\n        if(typeof item.series.yaxis.tickFormatter !== 'undefined') {\n            content = content.replace(yPattern, item.series.yaxis.tickFormatter(item.series.data[item.dataIndex][1], item.series.yaxis));\n        }\n\n        return content;\n    };\n\n    // helpers just for readability\n    FlotTooltip.prototype.isTimeMode = function(axisName, item) {\n        return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time');\n    };\n\n    FlotTooltip.prototype.isXDateFormat = function(item) {\n        return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null);\n    };\n\n    FlotTooltip.prototype.isYDateFormat = function(item) {\n        return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null);\n    };\n\n    //\n    FlotTooltip.prototype.timestampToDate = function(tmst, dateFormat) {\n        var theDate = new Date(tmst);\n        return $.plot.formatDate(theDate, dateFormat);\n    };\n\n    //\n    FlotTooltip.prototype.adjustValPrecision = function(pattern, content, value) {\n\n        var precision;\n        if( content.match(pattern) !== null ) {\n            if(RegExp.$1 !== '') {\n                precision = RegExp.$1;\n                value = value.toFixed(precision);\n\n                // only replace content if precision exists\n                content = content.replace(pattern, value);\n            }\n        }\n        return content;\n    };\n\n    //\n    var init = function(plot) {\n      new FlotTooltip(plot);\n    };\n\n    // define Flot plugin\n    $.plot.plugins.push({\n        init: init,\n        options: defaultOptions,\n        name: 'tooltip',\n        version: '0.6.1'\n    });\n\n})(jQuery);\n\n;\n/* Flot plugin for automatically redrawing plots as the placeholder resizes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nIt works by listening for changes on the placeholder div (through the jQuery\nresize event plugin) - if the size changes, it will redraw the plot.\n\nThere are no options. If you need to disable the plugin for some plots, you\ncan just fix the size of their placeholders.\n\n*/\n\n/* Inline dependency:\n * jQuery resize event - v1.1 - 3/14/2010\n * http://benalman.com/projects/jquery-resize-plugin/\n *\n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n\n/*\n * The plugin depends on jQuery.Resize plugin https://github.com/cowboy/jquery-resize\n * which causes the memory leaking. The plugin dependency was replaced with the native\n * window.resize event as we don't need the jQuery.Resize functionality anyways.\n * -ab March 1, 2015\n */\n\n// (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k=\"setTimeout\",j=\"resize\",d=j+\"-special-event\",b=\"delay\",f=\"throttleWindow\";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);\n\n(function ($) {\n    var options = { }; // no options\n\n    function init(plot) {\n        function onResize() {\n            var placeholder = plot.getPlaceholder();\n\n            // somebody might have hidden us and we can't plot\n            // when we don't have the dimensions\n            if (placeholder.width() == 0 || placeholder.height() == 0)\n                return;\n\n            plot.resize();\n            plot.setupGrid();\n            plot.draw();\n        }\n        \n        function bindEvents(plot, eventHolder) {\n            //plot.getPlaceholder().resize(onResize);\n\n            $(window).bind('resize', onResize)\n        }\n\n        function shutdown(plot, eventHolder) {\n            //plot.getPlaceholder().unbind(\"resize\", onResize);\n            $(window).unbind('resize', onResize)\n        }\n        \n        plot.hooks.bindEvents.push(bindEvents);\n        plot.hooks.shutdown.push(shutdown);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'resize',\n        version: '1.0'\n    });\n})(jQuery);\n\n;\n/* Pretty handling of time axes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nSet axis.mode to \"time\" to enable. See the section \"Time series data\" in\nAPI.txt for details.\n\n*/\n\n(function($) {\n\n\tvar options = {\n\t\txaxis: {\n\t\t\ttimezone: null,\t\t// \"browser\" for local to the client or timezone for timezone-js\n\t\t\ttimeformat: null,\t// format string to use\n\t\t\ttwelveHourClock: false,\t// 12 or 24 time in time mode\n\t\t\tmonthNames: null\t// list of names of months\n\t\t}\n\t};\n\n\t// round to nearby lower multiple of base\n\n\tfunction floorInBase(n, base) {\n\t\treturn base * Math.floor(n / base);\n\t}\n\n\t// Returns a string with the date d formatted according to fmt.\n\t// A subset of the Open Group's strftime format is supported.\n\n\tfunction formatDate(d, fmt, monthNames, dayNames) {\n\n\t\tif (typeof d.strftime == \"function\") {\n\t\t\treturn d.strftime(fmt);\n\t\t}\n\n\t\tvar leftPad = function(n, pad) {\n\t\t\tn = \"\" + n;\n\t\t\tpad = \"\" + (pad == null ? \"0\" : pad);\n\t\t\treturn n.length == 1 ? pad + n : n;\n\t\t};\n\n\t\tvar r = [];\n\t\tvar escape = false;\n\t\tvar hours = d.getHours();\n\t\tvar isAM = hours < 12;\n\n\t\tif (monthNames == null) {\n\t\t\tmonthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\t\t}\n\n\t\tif (dayNames == null) {\n\t\t\tdayNames = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\t\t}\n\n\t\tvar hours12;\n\n\t\tif (hours > 12) {\n\t\t\thours12 = hours - 12;\n\t\t} else if (hours == 0) {\n\t\t\thours12 = 12;\n\t\t} else {\n\t\t\thours12 = hours;\n\t\t}\n\n\t\tfor (var i = 0; i < fmt.length; ++i) {\n\n\t\t\tvar c = fmt.charAt(i);\n\n\t\t\tif (escape) {\n\t\t\t\tswitch (c) {\n\t\t\t\t\tcase 'a': c = \"\" + dayNames[d.getDay()]; break;\n\t\t\t\t\tcase 'b': c = \"\" + monthNames[d.getMonth()]; break;\n\t\t\t\t\tcase 'd': c = leftPad(d.getDate()); break;\n\t\t\t\t\tcase 'e': c = leftPad(d.getDate(), \" \"); break;\n\t\t\t\t\tcase 'h':\t// For back-compat with 0.7; remove in 1.0\n\t\t\t\t\tcase 'H': c = leftPad(hours); break;\n\t\t\t\t\tcase 'I': c = leftPad(hours12); break;\n\t\t\t\t\tcase 'l': c = leftPad(hours12, \" \"); break;\n\t\t\t\t\tcase 'm': c = leftPad(d.getMonth() + 1); break;\n\t\t\t\t\tcase 'M': c = leftPad(d.getMinutes()); break;\n\t\t\t\t\t// quarters not in Open Group's strftime specification\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\tc = \"\" + (Math.floor(d.getMonth() / 3) + 1); break;\n\t\t\t\t\tcase 'S': c = leftPad(d.getSeconds()); break;\n\t\t\t\t\tcase 'y': c = leftPad(d.getFullYear() % 100); break;\n\t\t\t\t\tcase 'Y': c = \"\" + d.getFullYear(); break;\n\t\t\t\t\tcase 'p': c = (isAM) ? (\"\" + \"am\") : (\"\" + \"pm\"); break;\n\t\t\t\t\tcase 'P': c = (isAM) ? (\"\" + \"AM\") : (\"\" + \"PM\"); break;\n\t\t\t\t\tcase 'w': c = \"\" + d.getDay(); break;\n\t\t\t\t}\n\t\t\t\tr.push(c);\n\t\t\t\tescape = false;\n\t\t\t} else {\n\t\t\t\tif (c == \"%\") {\n\t\t\t\t\tescape = true;\n\t\t\t\t} else {\n\t\t\t\t\tr.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn r.join(\"\");\n\t}\n\n\t// To have a consistent view of time-based data independent of which time\n\t// zone the client happens to be in we need a date-like object independent\n\t// of time zones.  This is done through a wrapper that only calls the UTC\n\t// versions of the accessor methods.\n\n\tfunction makeUtcWrapper(d) {\n\n\t\tfunction addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {\n\t\t\tsourceObj[sourceMethod] = function() {\n\t\t\t\treturn targetObj[targetMethod].apply(targetObj, arguments);\n\t\t\t};\n\t\t};\n\n\t\tvar utc = {\n\t\t\tdate: d\n\t\t};\n\n\t\t// support strftime, if found\n\n\t\tif (d.strftime != undefined) {\n\t\t\taddProxyMethod(utc, \"strftime\", d, \"strftime\");\n\t\t}\n\n\t\taddProxyMethod(utc, \"getTime\", d, \"getTime\");\n\t\taddProxyMethod(utc, \"setTime\", d, \"setTime\");\n\n\t\tvar props = [\"Date\", \"Day\", \"FullYear\", \"Hours\", \"Milliseconds\", \"Minutes\", \"Month\", \"Seconds\"];\n\n\t\tfor (var p = 0; p < props.length; p++) {\n\t\t\taddProxyMethod(utc, \"get\" + props[p], d, \"getUTC\" + props[p]);\n\t\t\taddProxyMethod(utc, \"set\" + props[p], d, \"setUTC\" + props[p]);\n\t\t}\n\n\t\treturn utc;\n\t};\n\n\t// select time zone strategy.  This returns a date-like object tied to the\n\t// desired timezone\n\n\tfunction dateGenerator(ts, opts) {\n\t\tif (opts.timezone == \"browser\") {\n\t\t\treturn new Date(ts);\n\t\t} else if (!opts.timezone || opts.timezone == \"utc\") {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t} else if (typeof timezoneJS != \"undefined\" && typeof timezoneJS.Date != \"undefined\") {\n\t\t\tvar d = new timezoneJS.Date();\n\t\t\t// timezone-js is fickle, so be sure to set the time zone before\n\t\t\t// setting the time.\n\t\t\td.setTimezone(opts.timezone);\n\t\t\td.setTime(ts);\n\t\t\treturn d;\n\t\t} else {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t}\n\t}\n\t\n\t// map of app. size of time units in milliseconds\n\n\tvar timeUnitSize = {\n\t\t\"second\": 1000,\n\t\t\"minute\": 60 * 1000,\n\t\t\"hour\": 60 * 60 * 1000,\n\t\t\"day\": 24 * 60 * 60 * 1000,\n\t\t\"month\": 30 * 24 * 60 * 60 * 1000,\n\t\t\"quarter\": 3 * 30 * 24 * 60 * 60 * 1000,\n\t\t\"year\": 365.2425 * 24 * 60 * 60 * 1000\n\t};\n\n\t// the allowed tick sizes, after 1 year we use\n\t// an integer algorithm\n\n\tvar baseSpec = [\n\t\t[1, \"second\"], [2, \"second\"], [5, \"second\"], [10, \"second\"],\n\t\t[30, \"second\"], \n\t\t[1, \"minute\"], [2, \"minute\"], [5, \"minute\"], [10, \"minute\"],\n\t\t[30, \"minute\"], \n\t\t[1, \"hour\"], [2, \"hour\"], [4, \"hour\"],\n\t\t[8, \"hour\"], [12, \"hour\"],\n\t\t[1, \"day\"], [2, \"day\"], [3, \"day\"],\n\t\t[0.25, \"month\"], [0.5, \"month\"], [1, \"month\"],\n\t\t[2, \"month\"]\n\t];\n\n\t// we don't know which variant(s) we'll need yet, but generating both is\n\t// cheap\n\n\tvar specMonths = baseSpec.concat([[3, \"month\"], [6, \"month\"],\n\t\t[1, \"year\"]]);\n\tvar specQuarters = baseSpec.concat([[1, \"quarter\"], [2, \"quarter\"],\n\t\t[1, \"year\"]]);\n\n\tfunction init(plot) {\n\t\tplot.hooks.processOptions.push(function (plot, options) {\n\t\t\t$.each(plot.getAxes(), function(axisName, axis) {\n\n\t\t\t\tvar opts = axis.options;\n\n\t\t\t\tif (opts.mode == \"time\") {\n\t\t\t\t\taxis.tickGenerator = function(axis) {\n\n\t\t\t\t\t\tvar ticks = [];\n\t\t\t\t\t\tvar d = dateGenerator(axis.min, opts);\n\t\t\t\t\t\tvar minSize = 0;\n\n\t\t\t\t\t\t// make quarter use a possibility if quarters are\n\t\t\t\t\t\t// mentioned in either of these options\n\n\t\t\t\t\t\tvar spec = (opts.tickSize && opts.tickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ||\n\t\t\t\t\t\t\t(opts.minTickSize && opts.minTickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ? specQuarters : specMonths;\n\n\t\t\t\t\t\tif (opts.minTickSize != null) {\n\t\t\t\t\t\t\tif (typeof opts.tickSize == \"number\") {\n\t\t\t\t\t\t\t\tminSize = opts.tickSize;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tminSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (var i = 0; i < spec.length - 1; ++i) {\n\t\t\t\t\t\t\tif (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]\n\t\t\t\t\t\t\t\t\t\t\t  + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2\n\t\t\t\t\t\t\t\t&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar size = spec[i][0];\n\t\t\t\t\t\tvar unit = spec[i][1];\n\n\t\t\t\t\t\t// special-case the possibility of several years\n\n\t\t\t\t\t\tif (unit == \"year\") {\n\n\t\t\t\t\t\t\t// if given a minTickSize in years, just use it,\n\t\t\t\t\t\t\t// ensuring that it's an integer\n\n\t\t\t\t\t\t\tif (opts.minTickSize != null && opts.minTickSize[1] == \"year\") {\n\t\t\t\t\t\t\t\tsize = Math.floor(opts.minTickSize[0]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tvar magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));\n\t\t\t\t\t\t\t\tvar norm = (axis.delta / timeUnitSize.year) / magn;\n\n\t\t\t\t\t\t\t\tif (norm < 1.5) {\n\t\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t\t} else if (norm < 3) {\n\t\t\t\t\t\t\t\t\tsize = 2;\n\t\t\t\t\t\t\t\t} else if (norm < 7.5) {\n\t\t\t\t\t\t\t\t\tsize = 5;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tsize = 10;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsize *= magn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// minimum size for years is 1\n\n\t\t\t\t\t\t\tif (size < 1) {\n\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taxis.tickSize = opts.tickSize || [size, unit];\n\t\t\t\t\t\tvar tickSize = axis.tickSize[0];\n\t\t\t\t\t\tunit = axis.tickSize[1];\n\n\t\t\t\t\t\tvar step = tickSize * timeUnitSize[unit];\n\n\t\t\t\t\t\tif (unit == \"second\") {\n\t\t\t\t\t\t\td.setSeconds(floorInBase(d.getSeconds(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"minute\") {\n\t\t\t\t\t\t\td.setMinutes(floorInBase(d.getMinutes(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"hour\") {\n\t\t\t\t\t\t\td.setHours(floorInBase(d.getHours(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"month\") {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"quarter\") {\n\t\t\t\t\t\t\td.setMonth(3 * floorInBase(d.getMonth() / 3,\n\t\t\t\t\t\t\t\ttickSize));\n\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\td.setFullYear(floorInBase(d.getFullYear(), tickSize));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset smaller components\n\n\t\t\t\t\t\td.setMilliseconds(0);\n\n\t\t\t\t\t\tif (step >= timeUnitSize.minute) {\n\t\t\t\t\t\t\td.setSeconds(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.hour) {\n\t\t\t\t\t\t\td.setMinutes(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day) {\n\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day * 4) {\n\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.month * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 3));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.quarter * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.year) {\n\t\t\t\t\t\t\td.setMonth(0);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar carry = 0;\n\t\t\t\t\t\tvar v = Number.NaN;\n\t\t\t\t\t\tvar prev;\n\n\t\t\t\t\t\tdo {\n\n\t\t\t\t\t\t\tprev = v;\n\t\t\t\t\t\t\tv = d.getTime();\n\t\t\t\t\t\t\tticks.push(v);\n\n\t\t\t\t\t\t\tif (unit == \"month\" || unit == \"quarter\") {\n\t\t\t\t\t\t\t\tif (tickSize < 1) {\n\n\t\t\t\t\t\t\t\t\t// a bit complicated - we'll divide the\n\t\t\t\t\t\t\t\t\t// month/quarter up but we need to take\n\t\t\t\t\t\t\t\t\t// care of fractions so we don't end up in\n\t\t\t\t\t\t\t\t\t// the middle of a day\n\n\t\t\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t\t\t\tvar start = d.getTime();\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\t(unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t\tvar end = d.getTime();\n\t\t\t\t\t\t\t\t\td.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);\n\t\t\t\t\t\t\t\t\tcarry = d.getHours();\n\t\t\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\ttickSize * (unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + tickSize);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\td.setTime(v + step);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while (v < axis.max && v != prev);\n\n\t\t\t\t\t\treturn ticks;\n\t\t\t\t\t};\n\n\t\t\t\t\taxis.tickFormatter = function (v, axis) {\n\n\t\t\t\t\t\tvar d = dateGenerator(v, axis.options);\n\n\t\t\t\t\t\t// first check global format\n\n\t\t\t\t\t\tif (opts.timeformat != null) {\n\t\t\t\t\t\t\treturn formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// possibly use quarters if quarters are mentioned in\n\t\t\t\t\t\t// any of these places\n\n\t\t\t\t\t\tvar useQuarters = (axis.options.tickSize &&\n\t\t\t\t\t\t\t\taxis.options.tickSize[1] == \"quarter\") ||\n\t\t\t\t\t\t\t(axis.options.minTickSize &&\n\t\t\t\t\t\t\t\taxis.options.minTickSize[1] == \"quarter\");\n\n\t\t\t\t\t\tvar t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];\n\t\t\t\t\t\tvar span = axis.max - axis.min;\n\t\t\t\t\t\tvar suffix = (opts.twelveHourClock) ? \" %p\" : \"\";\n\t\t\t\t\t\tvar hourCode = (opts.twelveHourClock) ? \"%I\" : \"%H\";\n\t\t\t\t\t\tvar fmt;\n\n\t\t\t\t\t\tif (t < timeUnitSize.minute) {\n\t\t\t\t\t\t\tfmt = hourCode + \":%M:%S\" + suffix;\n\t\t\t\t\t\t} else if (t < timeUnitSize.day) {\n\t\t\t\t\t\t\tif (span < 2 * timeUnitSize.day) {\n\t\t\t\t\t\t\t\tfmt = hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %d \" + hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (t < timeUnitSize.month) {\n\t\t\t\t\t\t\tfmt = \"%b %d\";\n\t\t\t\t\t\t} else if ((useQuarters && t < timeUnitSize.quarter) ||\n\t\t\t\t\t\t\t(!useQuarters && t < timeUnitSize.year)) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"%b\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (useQuarters && t < timeUnitSize.year) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"Q%q\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"Q%q %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfmt = \"%Y\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);\n\n\t\t\t\t\t\treturn rt;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: 'time',\n\t\tversion: '1.0'\n\t});\n\n\t// Time-axis support used to be in Flot core, which exposed the\n\t// formatDate function on the plot object.  Various plugins depend\n\t// on the function, so we need to re-expose it here.\n\n\t$.plot.formatDate = formatDate;\n\n})(jQuery);\n\n;\n/* ===================================================\n *  jquery-sortable.js v0.9.13\n *  http://johnny.github.com/jquery-sortable/\n * ===================================================\n *  Copyright (c) 2012 Jonas von Andrian\n *  All rights reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *  * The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n *  DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * ========================================================== */\n\n!function ( $, window, pluginName, undefined){\n  var containerDefaults = {\n    // If true, items can be dragged from this container\n    drag: true,\n    // If true, items can be droped onto this container\n    drop: true,\n    // Exclude items from being draggable, if the\n    // selector matches the item\n    exclude: \"\",\n    // If true, search for nested containers within an item.If you nest containers,\n    // either the original selector with which you call the plugin must only match the top containers,\n    // or you need to specify a group (see the bootstrap nav example)\n    nested: true,\n    // If true, the items are assumed to be arranged vertically\n    vertical: true\n  }, // end container defaults\n  groupDefaults = {\n    // This is executed after the placeholder has been moved.\n    // $closestItemOrContainer contains the closest item, the placeholder\n    // has been put at or the closest empty Container, the placeholder has\n    // been appended to.\n    afterMove: function ($placeholder, container, $closestItemOrContainer) {\n    },\n    // The exact css path between the container and its items, e.g. \"> tbody\"\n    containerPath: \"\",\n    // The css selector of the containers\n    containerSelector: \"ol, ul\",\n    // Distance the mouse has to travel to start dragging\n    distance: 0,\n    // Time in milliseconds after mousedown until dragging should start.\n    // This option can be used to prevent unwanted drags when clicking on an element.\n    delay: 0,\n    // The css selector of the drag handle\n    handle: \"\",\n    // The exact css path between the item and its subcontainers.\n    // It should only match the immediate items of a container.\n    // No item of a subcontainer should be matched. E.g. for ol>div>li the itemPath is \"> div\"\n    itemPath: \"\",\n    // The css selector of the items\n    itemSelector: \"li\",\n    // The class given to \"body\" while an item is being dragged\n    bodyClass: \"dragging\",\n    // The class giving to an item while being dragged\n    draggedClass: \"dragged\",\n    // Check if the dragged item may be inside the container.\n    // Use with care, since the search for a valid container entails a depth first search\n    // and may be quite expensive.\n    isValidTarget: function ($item, container) {\n      return true\n    },\n    // Executed before onDrop if placeholder is detached.\n    // This happens if pullPlaceholder is set to false and the drop occurs outside a container.\n    onCancel: function ($item, container, _super, event) {\n    },\n    // Executed at the beginning of a mouse move event.\n    // The Placeholder has not been moved yet.\n    onDrag: function ($item, position, _super, event) {\n      $item.css(position)\n      event.preventDefault()\n    },\n    // Called after the drag has been started,\n    // that is the mouse button is being held down and\n    // the mouse is moving.\n    // The container is the closest initialized container.\n    // Therefore it might not be the container, that actually contains the item.\n    onDragStart: function ($item, container, _super, event) {\n      $item.css({\n        height: $item.outerHeight(),\n        width: $item.outerWidth()\n      })\n      $item.addClass(container.group.options.draggedClass)\n      $(\"body\").addClass(container.group.options.bodyClass)\n    },\n    // Called when the mouse button is being released\n    onDrop: function ($item, container, _super, event) {\n      $item.removeClass(container.group.options.draggedClass).removeAttr(\"style\")\n      $(\"body\").removeClass(container.group.options.bodyClass)\n    },\n    // Called on mousedown. If falsy value is returned, the dragging will not start.\n    // Ignore if element clicked is input, select or textarea\n    onMousedown: function ($item, _super, event) {\n      if (!event.target.nodeName.match(/^(input|select|textarea)$/i)) {\n        if (event.type.match(/^mouse/)) event.preventDefault()\n        return true\n      }\n    },\n    // The class of the placeholder (must match placeholder option markup)\n    placeholderClass: \"placeholder\",\n    // Template for the placeholder. Can be any valid jQuery input\n    // e.g. a string, a DOM element.\n    // The placeholder must have the class \"placeholder\"\n    placeholder: '<li class=\"placeholder\"></li>',\n    // If true, the position of the placeholder is calculated on every mousemove.\n    // If false, it is only calculated when the mouse is above a container.\n    pullPlaceholder: true,\n    // Specifies serialization of the container group.\n    // The pair $parent/$children is either container/items or item/subcontainers.\n    serialize: function ($parent, $children, parentIsContainer) {\n      var result = $.extend({}, $parent.data())\n\n      if (parentIsContainer) {\n        return [$children]\n      }\n      else if ($children[0]){\n        result.children = $children\n      }\n\n      delete result.subContainers\n      delete result.sortable\n\n      return result\n    },\n    // Set tolerance while dragging. Positive values decrease sensitivity,\n    // negative values increase it.\n    tolerance: 0\n  }, // end group defaults\n  containerGroups = {},\n  groupCounter = 0,\n  emptyBox = {\n    left: 0,\n    top: 0,\n    bottom: 0,\n    right:0\n  },\n  eventNames = {\n    start: \"touchstart.sortable mousedown.sortable\",\n    drop: \"touchend.sortable touchcancel.sortable mouseup.sortable\",\n    drag: \"touchmove.sortable mousemove.sortable\",\n    scroll: \"scroll.sortable\"\n  },\n  subContainerKey = \"subContainers\"\n\n  /*\n   * a is Array [left, right, top, bottom]\n   * b is array [left, top]\n   */\n  function d(a,b) {\n    var x = Math.max(0, a[0] - b[0], b[0] - a[1]),\n    y = Math.max(0, a[2] - b[1], b[1] - a[3])\n    return x+y;\n  }\n\n  function setDimensions(array, dimensions, tolerance, useOffset) {\n    var i = array.length,\n    offsetMethod = useOffset ? \"offset\" : \"position\"\n    tolerance = tolerance || 0\n\n    while(i--){\n      var el = array[i].el ? array[i].el : $(array[i]),\n      // use fitting method\n      pos = el[offsetMethod]()\n      pos.left += parseInt(el.css('margin-left'), 10)\n      pos.top += parseInt(el.css('margin-top'),10)\n      dimensions[i] = [\n        pos.left - tolerance,\n        pos.left + el.outerWidth() + tolerance,\n        pos.top - tolerance,\n        pos.top + el.outerHeight() + tolerance\n      ]\n    }\n  }\n\n  function getRelativePosition(pointer, element) {\n    var offset = element.offset()\n    return {\n      left: pointer.left - offset.left,\n      top: pointer.top - offset.top\n    }\n  }\n\n  function sortByDistanceDesc(dimensions, pointer, lastPointer) {\n    pointer = [pointer.left, pointer.top]\n    lastPointer = lastPointer && [lastPointer.left, lastPointer.top]\n\n    var dim,\n    i = dimensions.length,\n    distances = []\n\n    while(i--){\n      dim = dimensions[i]\n      distances[i] = [i,d(dim,pointer), lastPointer && d(dim, lastPointer)]\n    }\n    distances = distances.sort(function  (a,b) {\n      return b[1] - a[1] || b[2] - a[2] || b[0] - a[0]\n    })\n\n    // last entry is the closest\n    return distances\n  }\n\n  function ContainerGroup(options) {\n    this.options = $.extend({}, groupDefaults, options)\n    this.containers = []\n\n    if(!this.options.rootGroup){\n      this.scrollProxy = $.proxy(this.scroll, this)\n      this.dragProxy = $.proxy(this.drag, this)\n      this.dropProxy = $.proxy(this.drop, this)\n      this.placeholder = $(this.options.placeholder)\n\n      if(!options.isValidTarget)\n        this.options.isValidTarget = undefined\n    }\n  }\n\n  ContainerGroup.get = function  (options) {\n    if(!containerGroups[options.group]) {\n      if(options.group === undefined)\n        options.group = groupCounter ++\n\n      containerGroups[options.group] = new ContainerGroup(options)\n    }\n\n    return containerGroups[options.group]\n  }\n\n  ContainerGroup.prototype = {\n    dragInit: function  (e, itemContainer) {\n      this.$document = $(itemContainer.el[0].ownerDocument)\n\n      // get item to drag\n      var closestItem = $(e.target).closest(this.options.itemSelector);\n      // using the length of this item, prevents the plugin from being started if there is no handle being clicked on.\n      // this may also be helpful in instantiating multidrag.\n      if (closestItem.length) {\n        this.item = closestItem;\n        this.itemContainer = itemContainer;\n        if (this.item.is(this.options.exclude) || !this.options.onMousedown(this.item, groupDefaults.onMousedown, e)) {\n          return;\n        }\n        this.setPointer(e);\n        this.toggleListeners('on');\n        this.setupDelayTimer();\n        this.dragInitDone = true;\n      }\n    },\n    drag: function  (e) {\n      if(!this.dragging){\n        if(!this.distanceMet(e) || !this.delayMet)\n          return\n\n        this.options.onDragStart(this.item, this.itemContainer, groupDefaults.onDragStart, e)\n        this.item.before(this.placeholder)\n        this.dragging = true\n      }\n\n      this.setPointer(e)\n      // place item under the cursor\n      this.options.onDrag(this.item,\n                          getRelativePosition(this.pointer, this.item.offsetParent()),\n                          groupDefaults.onDrag,\n                          e)\n\n      var p = this.getPointer(e),\n      box = this.sameResultBox,\n      t = this.options.tolerance\n\n      if(!box || box.top - t > p.top || box.bottom + t < p.top || box.left - t > p.left || box.right + t < p.left)\n        if(!this.searchValidTarget()){\n          this.placeholder.detach()\n          this.lastAppendedItem = undefined\n        }\n    },\n    drop: function  (e) {\n      this.toggleListeners('off')\n\n      this.dragInitDone = false\n\n      if(this.dragging){\n        // processing Drop, check if placeholder is detached\n        if(this.placeholder.closest(\"html\")[0]){\n          this.placeholder.before(this.item).detach()\n        } else {\n          this.options.onCancel(this.item, this.itemContainer, groupDefaults.onCancel, e)\n        }\n        this.options.onDrop(this.item, this.getContainer(this.item), groupDefaults.onDrop, e)\n\n        // cleanup\n        this.clearDimensions()\n        this.clearOffsetParent()\n        this.lastAppendedItem = this.sameResultBox = undefined\n        this.dragging = false\n      }\n    },\n    searchValidTarget: function  (pointer, lastPointer) {\n      if(!pointer){\n        pointer = this.relativePointer || this.pointer\n        lastPointer = this.lastRelativePointer || this.lastPointer\n      }\n\n      var distances = sortByDistanceDesc(this.getContainerDimensions(),\n                                         pointer,\n                                         lastPointer),\n      i = distances.length\n\n      while(i--){\n        var index = distances[i][0],\n        distance = distances[i][1]\n\n        if(!distance || this.options.pullPlaceholder){\n          var container = this.containers[index]\n          if(!container.disabled){\n            if(!this.$getOffsetParent()){\n              var offsetParent = container.getItemOffsetParent()\n              pointer = getRelativePosition(pointer, offsetParent)\n              lastPointer = getRelativePosition(lastPointer, offsetParent)\n            }\n            if(container.searchValidTarget(pointer, lastPointer))\n              return true\n          }\n        }\n      }\n      if(this.sameResultBox)\n        this.sameResultBox = undefined\n    },\n    movePlaceholder: function  (container, item, method, sameResultBox) {\n      var lastAppendedItem = this.lastAppendedItem\n      if(!sameResultBox && lastAppendedItem && lastAppendedItem[0] === item[0])\n        return;\n\n      item[method](this.placeholder)\n      this.lastAppendedItem = item\n      this.sameResultBox = sameResultBox\n      this.options.afterMove(this.placeholder, container, item)\n    },\n    getContainerDimensions: function  () {\n      if(!this.containerDimensions)\n        setDimensions(this.containers, this.containerDimensions = [], this.options.tolerance, !this.$getOffsetParent())\n      return this.containerDimensions\n    },\n    getContainer: function  (element) {\n      return element.closest(this.options.containerSelector).data(pluginName)\n    },\n    $getOffsetParent: function  () {\n      if(this.offsetParent === undefined){\n        var i = this.containers.length - 1,\n        offsetParent = this.containers[i].getItemOffsetParent()\n\n        if(!this.options.rootGroup){\n          while(i--){\n            if(offsetParent[0] != this.containers[i].getItemOffsetParent()[0]){\n              // If every container has the same offset parent,\n              // use position() which is relative to this parent,\n              // otherwise use offset()\n              // compare #setDimensions\n              offsetParent = false\n              break;\n            }\n          }\n        }\n\n        this.offsetParent = offsetParent\n      }\n      return this.offsetParent\n    },\n    setPointer: function (e) {\n      var pointer = this.getPointer(e)\n\n      if(this.$getOffsetParent()){\n        var relativePointer = getRelativePosition(pointer, this.$getOffsetParent())\n        this.lastRelativePointer = this.relativePointer\n        this.relativePointer = relativePointer\n      }\n\n      this.lastPointer = this.pointer\n      this.pointer = pointer\n    },\n    distanceMet: function (e) {\n      var currentPointer = this.getPointer(e)\n      return (Math.max(\n        Math.abs(this.pointer.left - currentPointer.left),\n        Math.abs(this.pointer.top - currentPointer.top)\n      ) >= this.options.distance)\n    },\n    getPointer: function(e) {\n      var o = e.originalEvent,\n          t = (e.originalEvent.touches && e.originalEvent.touches[0]) || {}\n      return {\n        left: e.pageX || o.pageX || t.pageX,\n        top: e.pageY || o.pageY || t.pageY\n      }\n    },\n    setupDelayTimer: function () {\n      var that = this\n      this.delayMet = !this.options.delay\n\n      // init delay timer if needed\n      if (!this.delayMet) {\n        clearTimeout(this._mouseDelayTimer);\n        this._mouseDelayTimer = setTimeout(function() {\n          that.delayMet = true\n        }, this.options.delay)\n      }\n    },\n    scroll: function  (e) {\n      this.clearDimensions()\n      this.clearOffsetParent() // TODO is this needed?\n    },\n    toggleListeners: function (method) {\n      var that = this,\n      events = ['drag','drop','scroll']\n\n      $.each(events,function  (i,event) {\n        that.$document[method](eventNames[event], that[event + 'Proxy'])\n      })\n    },\n    clearOffsetParent: function () {\n      this.offsetParent = undefined\n    },\n    // Recursively clear container and item dimensions\n    clearDimensions: function  () {\n      this.traverse(function(object){\n        object._clearDimensions()\n      })\n    },\n    traverse: function(callback) {\n      callback(this)\n      var i = this.containers.length\n      while(i--){\n        this.containers[i].traverse(callback)\n      }\n    },\n    _clearDimensions: function(){\n      this.containerDimensions = undefined\n    },\n    _destroy: function () {\n      containerGroups[this.options.group] = undefined\n    }\n  }\n\n  function Container(element, options) {\n    this.el = element\n    this.options = $.extend( {}, containerDefaults, options)\n\n    this.group = ContainerGroup.get(this.options)\n    this.rootGroup = this.options.rootGroup || this.group\n    this.handle = this.rootGroup.options.handle || this.rootGroup.options.itemSelector\n\n    var itemPath = this.rootGroup.options.itemPath\n    this.target = itemPath ? this.el.find(itemPath) : this.el\n\n    this.target.on(eventNames.start, this.handle, $.proxy(this.dragInit, this))\n\n    if(this.options.drop)\n      this.group.containers.push(this)\n  }\n\n  Container.prototype = {\n    dragInit: function  (e) {\n      var rootGroup = this.rootGroup\n\n      if( !this.disabled &&\n          !rootGroup.dragInitDone &&\n          this.options.drag &&\n          this.isValidDrag(e)) {\n        rootGroup.dragInit(e, this)\n      }\n    },\n    isValidDrag: function(e) {\n      return e.which == 1 ||\n        e.type == \"touchstart\" && e.originalEvent.touches.length == 1\n    },\n    searchValidTarget: function  (pointer, lastPointer) {\n      var distances = sortByDistanceDesc(this.getItemDimensions(),\n                                         pointer,\n                                         lastPointer),\n      i = distances.length,\n      rootGroup = this.rootGroup,\n      validTarget = !rootGroup.options.isValidTarget ||\n        rootGroup.options.isValidTarget(rootGroup.item, this)\n\n      if(!i && validTarget){\n        rootGroup.movePlaceholder(this, this.target, \"append\")\n        return true\n      } else\n        while(i--){\n          var index = distances[i][0],\n          distance = distances[i][1]\n          if(!distance && this.hasChildGroup(index)){\n            var found = this.getContainerGroup(index).searchValidTarget(pointer, lastPointer)\n            if(found)\n              return true\n          }\n          else if(validTarget){\n            this.movePlaceholder(index, pointer)\n            return true\n          }\n        }\n    },\n    movePlaceholder: function  (index, pointer) {\n      var item = $(this.items[index]),\n      dim = this.itemDimensions[index],\n      method = \"after\",\n      width = item.outerWidth(),\n      height = item.outerHeight(),\n      offset = item.offset(),\n      sameResultBox = {\n        left: offset.left,\n        right: offset.left + width,\n        top: offset.top,\n        bottom: offset.top + height\n      }\n      if(this.options.vertical){\n        var yCenter = (dim[2] + dim[3]) / 2,\n        inUpperHalf = pointer.top <= yCenter\n        if(inUpperHalf){\n          method = \"before\"\n          sameResultBox.bottom -= height / 2\n        } else\n          sameResultBox.top += height / 2\n      } else {\n        var xCenter = (dim[0] + dim[1]) / 2,\n        inLeftHalf = pointer.left <= xCenter\n        if(inLeftHalf){\n          method = \"before\"\n          sameResultBox.right -= width / 2\n        } else\n          sameResultBox.left += width / 2\n      }\n      if(this.hasChildGroup(index))\n        sameResultBox = emptyBox\n      this.rootGroup.movePlaceholder(this, item, method, sameResultBox)\n    },\n    getItemDimensions: function  () {\n      if(!this.itemDimensions){\n        this.items = this.$getChildren(this.el, \"item\").filter(\n          \":not(.\" + this.group.options.placeholderClass + \", .\" + this.group.options.draggedClass + \")\"\n        ).get()\n        setDimensions(this.items, this.itemDimensions = [], this.options.tolerance)\n      }\n      return this.itemDimensions\n    },\n    getItemOffsetParent: function  () {\n      var offsetParent,\n      el = this.el\n      // Since el might be empty we have to check el itself and\n      // can not do something like el.children().first().offsetParent()\n      if(el.css(\"position\") === \"relative\" || el.css(\"position\") === \"absolute\"  || el.css(\"position\") === \"fixed\")\n        offsetParent = el\n      else\n        offsetParent = el.offsetParent()\n      return offsetParent\n    },\n    hasChildGroup: function (index) {\n      return this.options.nested && this.getContainerGroup(index)\n    },\n    getContainerGroup: function  (index) {\n      var childGroup = $.data(this.items[index], subContainerKey)\n      if( childGroup === undefined){\n        var childContainers = this.$getChildren(this.items[index], \"container\")\n        childGroup = false\n\n        if(childContainers[0]){\n          var options = $.extend({}, this.options, {\n            rootGroup: this.rootGroup,\n            group: groupCounter ++\n          })\n          childGroup = childContainers[pluginName](options).data(pluginName).group\n        }\n        $.data(this.items[index], subContainerKey, childGroup)\n      }\n      return childGroup\n    },\n    $getChildren: function (parent, type) {\n      var options = this.rootGroup.options,\n      path = options[type + \"Path\"],\n      selector = options[type + \"Selector\"]\n\n      parent = $(parent)\n      if(path)\n        parent = parent.find(path)\n\n      return parent.children(selector)\n    },\n    _serialize: function (parent, isContainer) {\n      var that = this,\n      childType = isContainer ? \"item\" : \"container\",\n\n      children = this.$getChildren(parent, childType).not(this.options.exclude).map(function () {\n        return that._serialize($(this), !isContainer)\n      }).get()\n\n      return this.rootGroup.options.serialize(parent, children, isContainer)\n    },\n    traverse: function(callback) {\n      $.each(this.items || [], function(item){\n        var group = $.data(this, subContainerKey)\n        if(group)\n          group.traverse(callback)\n      });\n\n      callback(this)\n    },\n    _clearDimensions: function  () {\n      this.itemDimensions = undefined\n    },\n    _destroy: function() {\n      var that = this;\n\n      this.target.off(eventNames.start, this.handle);\n      this.el.removeData(pluginName)\n\n      if(this.options.drop)\n        this.group.containers = $.grep(this.group.containers, function(val){\n          return val != that\n        })\n\n      $.each(this.items || [], function(){\n        $.removeData(this, subContainerKey)\n      })\n    }\n  }\n\n  var API = {\n    enable: function() {\n      this.traverse(function(object){\n        object.disabled = false\n      })\n    },\n    disable: function (){\n      this.traverse(function(object){\n        object.disabled = true\n      })\n    },\n    serialize: function () {\n      return this._serialize(this.el, true)\n    },\n    refresh: function() {\n      this.traverse(function(object){\n        object._clearDimensions()\n      })\n    },\n    destroy: function () {\n      this.traverse(function(object){\n        object._destroy();\n      })\n    }\n  }\n\n  $.extend(Container.prototype, API)\n\n  /**\n   * jQuery API\n   *\n   * Parameters are\n   *   either options on init\n   *   or a method name followed by arguments to pass to the method\n   */\n  $.fn[pluginName] = function(methodOrOptions) {\n    var args = Array.prototype.slice.call(arguments, 1)\n\n    return this.map(function(){\n      var $t = $(this),\n      object = $t.data(pluginName)\n\n      if(object && API[methodOrOptions])\n        return API[methodOrOptions].apply(object, args) || this\n      else if(!object && (methodOrOptions === undefined ||\n                          typeof methodOrOptions === \"object\"))\n        $t.data(pluginName, new Container($t, methodOrOptions))\n\n      return this\n    });\n  };\n\n}(jQuery, window, 'jqSortable');\n\n;\n/*\n * October JavaScript foundation library.\n * \n * Base class for OctoberCMS back-end classes.\n *\n * The class defines base functionality for dealing with memory management\n * and cleaning up bound (proxied) methods.\n *\n * The base class defines the dispose method that cleans up proxied methods. \n * If child classes implement their own dispose() method, they should call \n * the base class dispose method (see the example below).\n *\n * Use the simple parasitic combination inheritance pattern to create child classes:\n * \n * var Base = $.oc.foundation.base,\n *     BaseProto = Base.prototype\n *\n * var SubClass = function(params) {\n *     // Call the parent constructor\n *     Base.call(this)\n * }\n *\n * SubClass.prototype = Object.create(BaseProto)\n * SubClass.prototype.constructor = SubClass\n *\n * // Child class methods can be defined only after the \n * // prototype is updated in the two previous lines\n *\n * SubClass.prototype.dispose = function() {\n *     // Call the parent method\n *     BaseProto.dispose.call(this)\n * };\n *\n * See: \n *\n * - https://developers.google.com/speed/articles/optimizing-javascript\n * - http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/\n * - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript\n *\n */\n+function ($) { \"use strict\";\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.foundation === undefined)\n        $.oc.foundation = {}\n\n    $.oc.foundation._proxyCounter = 0\n\n    var Base = function() {\n        this.proxiedMethods = {}\n    }\n\n    Base.prototype.dispose = function() {\n        for (var key in this.proxiedMethods) {\n            this.proxiedMethods[key] = null\n        }\n\n        this.proxiedMethods = null\n    }\n\n    /*\n     * Creates a proxied method reference or returns an existing proxied method.\n     */\n    Base.prototype.proxy = function(method) {\n        if (method.ocProxyId === undefined) {\n            $.oc.foundation._proxyCounter++\n            method.ocProxyId = $.oc.foundation._proxyCounter\n        }\n\n        if (this.proxiedMethods[method.ocProxyId] !== undefined)\n            return this.proxiedMethods[method.ocProxyId]\n\n        this.proxiedMethods[method.ocProxyId] = method.bind(this)\n        return this.proxiedMethods[method.ocProxyId]\n    }\n\n    $.oc.foundation.base = Base;\n}(window.jQuery);\n;\n/*\n * October JavaScript foundation library.\n * \n * Light-weight utility functions for working with DOM elements. The functions\n * work with elements directly, without jQuery, using the native JavaScript and DOM\n * features.\n *\n * Usage examples:\n *\n * $.oc.foundation.element.addClass(myElement, myClass)\n *\n */\n+function ($) { \"use strict\";\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.foundation === undefined)\n        $.oc.foundation = {}\n\n    var Element = {\n        hasClass: function(el, className) {\n            if (el.classList)\n                return el.classList.contains(className);\n            \n            return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);\n        },\n\n        addClass: function(el, className) {\n            var classes = className.split(' ')\n\n            for (var i = 0, len = classes.length; i < len; i++) {\n                var currentClass = classes[i].trim()\n\n                if (this.hasClass(el, currentClass))\n                    return\n\n                if (el.classList)\n                    el.classList.add(currentClass);\n                else\n                    el.className += ' ' + currentClass;\n            }\n        },\n\n        removeClass: function(el, className) {\n            if (el.classList)\n                el.classList.remove(className);\n            else\n                el.className = el.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n        },\n\n        toggleClass: function(el, className, add) {\n            if (add === undefined) {\n                if (this.hasClass(el, className)) {\n                    this.removeClass(el, className)\n                }\n                else {\n                    this.addClass(el, className)\n                }\n            }\n\n            if (add && !this.hasClass(el, className)) {\n                this.addClass(el, className)\n                return\n            }\n\n            if (!add && this.hasClass(el, className)) {\n                this.removeClass(el, className)\n                return\n            }\n        },\n\n        /*\n         * Returns element absolution position.\n         * If the second parameter value is false, the scrolling\n         * won't be added to the result (which could improve the performance).\n         */\n        absolutePosition: function(element, ignoreScrolling) {\n            var top = ignoreScrolling === true ? 0 : document.body.scrollTop,\n                left = 0\n\n            do {\n                top += element.offsetTop || 0;\n\n                if (ignoreScrolling !== true)\n                    top -= element.scrollTop || 0\n\n                left += element.offsetLeft || 0\n                element = element.offsetParent\n            } while(element)\n\n            return {\n                top: top,\n                left: left\n            }\n        },\n\n        getCaretPosition: function(input) {\n            if (document.selection) { \n               var selection = document.selection.createRange()\n\n               selection.moveStart('character', -input.value.length)\n               return selection.text.length\n            }\n\n            if (input.selectionStart !== undefined)\n               return input.selectionStart\n\n            return 0\n        },\n\n        setCaretPosition: function(input, position) {\n            if (document.selection) { \n                var range = input.createTextRange()\n\n                setTimeout(function() {\n                    // Asynchronous layout update, better performance\n                    range.collapse(true)\n                    range.moveStart(\"character\", position)\n                    range.moveEnd(\"character\", 0)\n                    range.select()\n                    range = null\n                    input = null\n                }, 0)\n            }\n\n            if (input.selectionStart !== undefined) {\n                setTimeout(function() {\n                    // Asynchronous layout update\n                    input.selectionStart = position\n                    input.selectionEnd = position\n                    input = null\n                }, 0)\n            }\n        },\n\n        elementContainsPoint: function(element, point) {\n            var elementPosition = $.oc.foundation.element.absolutePosition(element),\n                elementRight = elementPosition.left + element.offsetWidth,\n                elementBottom = elementPosition.top + element.offsetHeight\n\n            return point.x >= elementPosition.left && point.x <= elementRight \n                    && point.y >= elementPosition.top && point.y <= elementBottom\n        }\n    }\n\n    $.oc.foundation.element = Element;\n}(window.jQuery);\n;\n/*\n * October JavaScript foundation library.\n *\n * Light-weight utility functions for working with native DOM events. The functions\n * work with events directly, without jQuery, using the native JavaScript and DOM\n * features.\n *\n * Usage examples:\n *\n * $.oc.foundation.event.stop(ev)\n *\n */\n+function ($) { \"use strict\";\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.foundation === undefined)\n        $.oc.foundation = {}\n\n    var Event = {\n        /*\n         * Returns the event target element.\n         * If the second argument is provided (string), the function\n         * will try to find the first parent with the tag name matching\n         * the argument value.\n         */\n        getTarget: function(ev, tag) {\n            var target = ev.target ? ev.target : ev.srcElement;\n            if (tag === undefined) {\n                return target;\n            }\n\n            var tagName = target.tagName;\n\n            while (tagName != tag) {\n                target = target.parentNode;\n                if (!target) {\n                    return null;\n                }\n\n                tagName = target.tagName;\n            }\n\n            return target;\n        },\n\n        stop: function(ev) {\n            if (ev.stopPropagation) {\n                ev.stopPropagation();\n            }\n            else {\n                ev.cancelBubble = true;\n            }\n\n            if (ev.preventDefault) {\n                ev.preventDefault();\n            }\n            else {\n                ev.returnValue = false;\n            }\n        },\n\n        pageCoordinates: function(ev) {\n            if (ev.pageX || ev.pageY) {\n                return {\n                    x: ev.pageX,\n                    y: ev.pageY\n                };\n            }\n            else if (ev.clientX || ev.clientY) {\n                return {\n                    x: (ev.clientX + document.body.scrollLeft + document.documentElement.scrollLeft),\n                    y: (ev.clientY + document.body.scrollTop + document.documentElement.scrollTop)\n                };\n            }\n\n            return {\n                x: 0,\n                y: 0\n            };\n        }\n    }\n\n    $.oc.foundation.event = Event;\n}(window.jQuery);\n;\n/*\n * October JavaScript foundation library.\n *\n * Utility functions for working back-end client-side UI controls.\n *\n * Usage examples:\n *\n * $.oc.foundation.controlUtils.markDisposable(el)\n * $.oc.foundation.controlUtils.disposeControls(container)\n *\n */\n+function ($) { \"use strict\";\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.foundation === undefined)\n        $.oc.foundation = {}\n\n    var ControlUtils = {\n        markDisposable: function(el) {\n            el.setAttribute('data-disposable', '')\n        },\n\n        /*\n         * Destroys all disposable controls in a container.\n         * The disposable controls should watch the dispose-control\n         * event.\n         */\n        disposeControls: function(container) {\n            if (container === document) {\n                container = document.documentElement;\n            }\n\n            var controls = container.querySelectorAll('[data-disposable]')\n            for (var i=0, len=controls.length; i<len; i++) {\n                $(controls[i]).triggerHandler('dispose-control')\n            }\n\n            if (container.hasAttribute('data-disposable')) {\n                $(container).triggerHandler('dispose-control')\n            }\n        }\n    }\n\n    $.oc.foundation.controlUtils = ControlUtils;\n\n    // Automatically dispose controls in an element before the element contents is replaced.\n    // The ajaxBeforeReplace event is triggered by the AJAX framework.\n    addEventListener('page:before-render', function(ev) {\n        $.oc.foundation.controlUtils.disposeControls(ev.target);\n    });\n\n    addEventListener('ajax:before-replace', function(ev) {\n        $.oc.foundation.controlUtils.disposeControls(ev.target);\n    });\n\n}(window.jQuery);\n\n;\n/*\n * Drag Value plugin\n *\n * Uses native dragging to allow elements to be dragged in to inputs, textareas, etc\n *\n * Data attributes:\n * - data-control=\"dragvalue\" - enables the plugin on an element\n * - data-text-value=\"text to include\" - text value to include when dragging\n * - data-drag-click=\"false\" - allow click event, tries to cache the last active element\n *                             and insert the text at the current cursor position\n *\n * JavaScript API:\n * $('a#someElement').dragValue({ textValue: 'insert this text' })\n *\n */\n\n+function ($) { \"use strict\";\n\n    // DRAG VALUE CLASS DEFINITION\n    // ============================\n\n    var DragValue = function(element, options) {\n        this.options   = options\n        this.$el       = $(element)\n\n        // Init\n        this.init()\n    }\n\n    DragValue.DEFAULTS = {\n        dragClick: false\n    }\n\n    DragValue.prototype.init = function() {\n        this.$el.prop('draggable', true)\n        this.textValue = this.$el.data('textValue')\n\n        this.$el.on('dragstart', $.proxy(this.handleDragStart, this))\n        this.$el.on('drop', $.proxy(this.handleDrop, this))\n        this.$el.on('dragend', $.proxy(this.handleDragEnd, this))\n\n        if (this.options.dragClick) {\n            this.$el.on('click', $.proxy(this.handleClick, this))\n            this.$el.on('mouseover', $.proxy(this.handleMouseOver, this))\n        }\n    }\n\n    //\n    // Drag events\n    //\n\n    DragValue.prototype.handleDragStart = function(event) {\n        var e = event.originalEvent\n        e.dataTransfer.effectAllowed = 'all'\n        e.dataTransfer.setData('text/plain', this.textValue)\n\n        this.$el\n            .css({ opacity: 0.5 })\n            .addClass('dragvalue-dragging')\n    }\n\n    DragValue.prototype.handleDrop = function(event) {\n        event.stopPropagation()\n        return false\n    }\n\n    DragValue.prototype.handleDragEnd = function(event) {\n        this.$el\n            .css({ opacity: 1 })\n            .removeClass('dragvalue-dragging')\n    }\n\n    //\n    // Click events\n    //\n\n    DragValue.prototype.handleMouseOver = function(event) {\n        var el = document.activeElement\n        if (!el) return\n\n        if (el.isContentEditable || (\n            el.tagName.toLowerCase() == 'input' &&\n            el.type == 'text' ||\n            el.tagName.toLowerCase() == 'textarea'\n        )) {\n            this.lastElement = el\n        }\n    }\n\n    DragValue.prototype.handleClick = function(event) {\n        if (!this.lastElement) return\n\n        var $el = $(this.lastElement)\n\n        if ($el.hasClass('ace_text-input'))\n            return this.handleClickCodeEditor(event, $el)\n\n        if (this.lastElement.isContentEditable)\n            return this.handleClickContentEditable()\n\n        this.insertAtCaret(this.lastElement, this.textValue)\n    }\n\n    DragValue.prototype.handleClickCodeEditor = function(event, $el) {\n        var $editorArea = $el.closest('[data-control=codeeditor]')\n        if (!$editorArea.length) return\n\n        $editorArea.codeEditor('getEditorObject').insert(this.textValue)\n    }\n\n    DragValue.prototype.handleClickContentEditable = function() {\n        var sel, range, html;\n        if (window.getSelection) {\n            sel = window.getSelection();\n            if (sel.getRangeAt && sel.rangeCount) {\n                range = sel.getRangeAt(0);\n                range.deleteContents();\n                range.insertNode( document.createTextNode(this.textValue) );\n            }\n        }\n        else if (document.selection && document.selection.createRange) {\n            document.selection.createRange().text = this.textValue;\n        }\n    }\n\n    //\n    // Helpers\n    //\n\n    DragValue.prototype.insertAtCaret = function(el, insertValue) {\n        // IE\n        if (document.selection) {\n            el.focus()\n            var sel = document.selection.createRange()\n            sel.text = insertValue\n            el.focus()\n        }\n        // Real browsers\n        else if (el.selectionStart || el.selectionStart == '0') {\n            var startPos = el.selectionStart, endPos = el.selectionEnd, scrollTop = el.scrollTop\n            el.value = el.value.substring(0, startPos) + insertValue + el.value.substring(endPos, el.value.length)\n            el.focus()\n            el.selectionStart = startPos + insertValue.length\n            el.selectionEnd = startPos + insertValue.length\n            el.scrollTop = scrollTop\n        }\n        else {\n            el.value += insertValue\n            el.focus()\n        }\n    }\n\n    // DRAG VALUE PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.dragValue\n\n    $.fn.dragValue = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n        this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.dragvalue')\n            var options = $.extend({}, DragValue.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.dragvalue', (data = new DragValue(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args)\n            if (typeof result != 'undefined') return false\n        })\n\n        return result ? result : this\n    }\n\n    $.fn.dragValue.Constructor = DragValue\n\n    // DRAG VALUE NO CONFLICT\n    // =================\n\n    $.fn.dragValue.noConflict = function () {\n        $.fn.dragValue = old\n        return this\n    }\n\n    // DRAG VALUE DATA-API\n    // ===============\n\n    $(document).render(function() {\n        $('[data-control=\"dragvalue\"]').dragValue()\n    });\n\n}(window.jQuery);\n;\n/*\n * Sortable plugin.\n *\n * Documentation: ../docs/drag-sort.md\n *\n * Require:\n *  - sortable/jquery-sortable\n */\n\n +function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var Sortable = function (element, options) {\n        this.$el = $(element)\n        this.options = options || {}\n        this.cursorAdjustment = null\n\n        $.oc.foundation.controlUtils.markDisposable(element)\n        Base.call(this)\n        this.init()\n    }\n\n    Sortable.prototype = Object.create(BaseProto)\n    Sortable.prototype.constructor = Sortable\n\n    Sortable.prototype.init = function() {\n        this.$el.one('dispose-control', this.proxy(this.dispose))\n\n        var\n            self = this,\n            sortableOverrides = {},\n            sortableDefaults = {\n                onDragStart: this.proxy(this.onDragStart),\n                onDrag: this.proxy(this.onDrag),\n                onDrop: this.proxy(this.onDrop)\n            }\n\n        /*\n         * Override _super object for each option/event\n         */\n        if (this.options.onDragStart) {\n            sortableOverrides.onDragStart = function ($item, container, _super, event) {\n                self.options.onDragStart($item, container, sortableDefaults.onDragStart, event)\n            }\n        }\n\n        if (this.options.onDrag) {\n            sortableOverrides.onDrag = function ($item, position, _super, event) {\n                self.options.onDrag($item, position, sortableDefaults.onDrag, event)\n            }\n        }\n\n        if (this.options.onDrop) {\n            sortableOverrides.onDrop = function ($item, container, _super, event) {\n                self.options.onDrop($item, container, sortableDefaults.onDrop, event)\n            }\n        }\n\n        this.$el.jqSortable($.extend({}, sortableDefaults, this.options, sortableOverrides))\n    }\n\n    Sortable.prototype.dispose = function() {\n        this.$el.jqSortable('destroy')\n        this.$el.off('dispose-control', this.proxy(this.dispose))\n        this.$el.removeData('oc.sortable')\n        this.$el = null\n        this.options = null\n        this.cursorAdjustment = null\n        BaseProto.dispose.call(this)\n    }\n\n    Sortable.prototype.onDragStart = function ($item, container, _super, event) {\n        /*\n         * Relative cursor position\n         */\n        var offset = $item.offset(),\n            pointer = container.rootGroup.pointer\n\n        if (pointer) {\n            this.cursorAdjustment = {\n                left: pointer.left - offset.left,\n                top: pointer.top - offset.top\n            }\n        }\n        else {\n            this.cursorAdjustment = null\n        }\n\n        if (this.options.tweakCursorAdjustment) {\n            this.cursorAdjustment = this.options.tweakCursorAdjustment(this.cursorAdjustment)\n        }\n\n        $item.css({\n            height: $item.height(),\n            width: $item.width()\n        })\n\n        $item.addClass('dragged')\n        $('body').addClass('dragging')\n        this.$el.addClass('dragging')\n\n        /*\n         * Use animation\n         */\n        if (this.options.useAnimation) {\n            $item.data('oc.animated', true)\n        }\n\n        /*\n         * Placeholder clone\n         */\n         if (this.options.usePlaceholderClone) {\n            $(container.rootGroup.placeholder).html($item.html())\n         }\n\n         if (!this.options.useDraggingClone) {\n            $item.hide()\n         }\n    }\n\n    Sortable.prototype.onDrag = function ($item, position, _super, event) {\n        if (this.cursorAdjustment) {\n            /*\n             * Relative cursor position\n             */\n            $item.css({\n              left: position.left - this.cursorAdjustment.left,\n              top: position.top - this.cursorAdjustment.top\n            })\n        }\n        else {\n            /*\n             * Default behavior\n             */\n            $item.css(position)\n        }\n    }\n\n    Sortable.prototype.onDrop = function ($item, container, _super, event) {\n        $item.removeClass('dragged').removeAttr('style')\n        $('body').removeClass('dragging')\n        this.$el.removeClass('dragging')\n\n        if ($item.data('oc.animated')) {\n            $item\n                .hide()\n                .slideDown(200)\n        }\n    }\n\n    //\n    // Proxy API\n    //\n\n    Sortable.prototype.enable = function() {\n        this.$el.jqSortable('enable')\n    }\n\n    Sortable.prototype.disable = function() {\n        this.$el.jqSortable('disable')\n    }\n\n    Sortable.prototype.refresh = function() {\n        this.$el.jqSortable('refresh')\n    }\n\n    Sortable.prototype.serialize = function() {\n        this.$el.jqSortable('serialize')\n    }\n\n    Sortable.prototype.destroy = function() {\n        this.dispose()\n    }\n\n    // External solution for group persistence\n    // See https://github.com/johnny/jquery-sortable/pull/122\n    Sortable.prototype.destroyGroup = function() {\n        var jqSortable = this.$el.data('jqSortable')\n        if (jqSortable.group) {\n            jqSortable.group._destroy()\n        }\n    }\n\n    Sortable.DEFAULTS = {\n        useAnimation: false,\n        usePlaceholderClone: false,\n        useDraggingClone: true,\n        tweakCursorAdjustment: null\n    }\n\n    // PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.sortable\n\n    $.fn.sortable = function (option) {\n        var args = arguments;\n\n        return this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.sortable')\n            var options = $.extend({}, Sortable.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.sortable', (data = new Sortable(this, options)))\n            if (typeof option == 'string') data[option].apply(data, args)\n        })\n    }\n\n    $.fn.sortable.Constructor = Sortable\n\n    $.fn.sortable.noConflict = function () {\n        $.fn.sortable = old\n        return this\n    }\n\n}(window.jQuery);\n\n;\n/*\n * Allows to scroll an element content in the horizontal or horizontal directions. This script doesn't use\n * absolute positioning and rely on the scrollLeft/scrollTop DHTML properties. The element width should be\n * fixed with the CSS or JavaScript.\n *\n * Events triggered on the element:\n * - start.oc.dragScroll\n * - drag.oc.dragScroll\n * - stop.oc.dragScroll\n *\n * Options:\n * - start - callback function to execute when the drag starts\n * - drag - callback function to execute when the element is dragged\n * - stop - callback function to execute when the drag ends\n * - vertical - determines if the scroll direction is vertical, true by default\n * - scrollClassContainer - if specified, specifies an element or element selector to apply the 'scroll-before' and 'scroll-after' CSS classes,\n *   depending on whether the scrollable area is in its start or end\n * - scrollMarkerContainer - if specified, specifies an element or element selector to inject scroll markers (span elements that con\n *   contain the ellipses icon, indicating whether scrolling is possible)\n * - useDrag - determines if dragging is allowed support, true by default\n * - useNative - if native CSS is enabled via \"mobile\" on the HTML tag, false by default\n * - useScroll - determines if the mouse wheel scrolling is allowed, true by default\n * - useComboScroll - determines if horizontal scroll should act as vertical, and vice versa, true by default\n * - dragSelector - restrict drag events to this selector\n * - scrollSelector - restrict scroll events to this selector\n *\n * Methods:\n * - isStart - determines if the scrollable area is in its start (left or top)\n * - isEnd - determines if the scrollable area is in its end (right or bottom)\n * - goToStart - moves the scrollable area to the start (left or top)\n * - goToElement - moves the scrollable area to an element\n *\n * Require:\n * - mousewheel/mousewheel\n */\n+(function($) {\n    'use strict';\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype;\n\n    var DragScroll = function(element, options) {\n        this.options = $.extend({}, DragScroll.DEFAULTS, options);\n        this.touchDragStarted = false;\n        this.onTouchMove = onTouchMove;\n\n        var $el = $(element),\n            el = $el.get(0),\n            dragStart = 0,\n            startOffset = 0,\n            self = this,\n            dragging = false,\n            eventElementName = this.options.vertical ? 'pageY' : 'pageX',\n            isNative = this.options.useNative && $('html').hasClass('mobile');\n\n        this.el = $el;\n        this.scrollClassContainer = this.options.scrollClassContainer ? $(this.options.scrollClassContainer) : $el;\n        this.isScrollable = true;\n\n        Base.call(this);\n\n        // Inject scroll markers\n        if (this.options.scrollMarkerContainer) {\n            $(this.options.scrollMarkerContainer).append(\n                $('<span class=\"before scroll-marker\"></span><span class=\"after scroll-marker\"></span>')\n            );\n        }\n\n        // Bind events\n        var $scrollSelect = this.options.scrollSelector ? $(this.options.scrollSelector, $el) : $el;\n\n        $scrollSelect.mousewheel(function(event) {\n            if (!self.options.useScroll || self.paused) {\n                return;\n            }\n\n            var offset,\n                offsetX = event.deltaFactor * event.deltaX,\n                offsetY = event.deltaFactor * event.deltaY;\n\n            if (!offsetX && self.options.useComboScroll) {\n                offset = offsetY * -1;\n            }\n            else if (!offsetY && self.options.useComboScroll) {\n                offset = offsetX;\n            }\n            else {\n                offset = self.options.vertical ? offsetY * -1 : offsetX;\n            }\n\n            var scrolled = scrollWheel(offset);\n            if (!scrolled && self.options.noOverScroll) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            return !scrolled\n        });\n\n        if (this.options.useDrag) {\n            $el.on('mousedown.dragScroll', this.options.dragSelector, function(event) {\n                if (self.paused) {\n                    return;\n                }\n\n                // Don't prevent clicking inputs in the toolbar\n                if (event.target && event.target.tagName === 'INPUT') {\n                    return;\n                }\n\n                if (!self.isScrollable) {\n                    return;\n                }\n\n                startDrag(event);\n                return false;\n            });\n        }\n\n        if ('ontouchstart' in window || navigator.maxTouchPoints > 0) {\n            $el.on('touchstart.dragScroll', this.options.dragSelector, function (event) {\n                if (self.paused) {\n                    return;\n                }\n\n                var touchEvent = event.originalEvent;\n\n                if (touchEvent.touches.length == 1) {\n                    startDrag(touchEvent.touches[0]);\n                    self.touchDragStarted = true;\n\n                    event.stopPropagation();\n                }\n            });\n\n            window.addEventListener('touchmove', self.onTouchMove, { passive: false })\n        }\n\n        $el.on('click.dragScroll', function() {\n            // Do not handle item clicks while dragging\n            if ($(document.body).hasClass(self.options.dragClass)) {\n                return false;\n            }\n        });\n\n        if (!this.options.noScrollClasses) {\n            $(document).on('ready', this.proxy(this.fixScrollClasses));\n            $(window).on('resize', this.proxy(this.fixScrollClasses));\n            this.el.on('scroll', this.proxy(this.fixScrollClasses));\n        }\n\n        /*\n         * Internal event, drag has started\n         */\n        function startDrag(event) {\n            if (self.paused) {\n                return;\n            }\n\n            dragStart = event[eventElementName];\n            startOffset = self.options.vertical ? $el.scrollTop() : $el.scrollLeft();\n\n            if ('ontouchstart' in window || navigator.maxTouchPoints > 0) {\n                $(window).on('touchend.dragScroll', function(event) {\n                    stopDrag();\n                });\n            }\n\n            $(window).on('mousemove.dragScroll', function(event) {\n                moveDrag(event);\n                return false;\n            });\n\n            $(window).on('mouseup.dragScroll', function(mouseUpEvent) {\n                var isClick = event.pageX == mouseUpEvent.pageX && event.pageY == mouseUpEvent.pageY;\n                stopDrag(isClick);\n                return false;\n            });\n        }\n\n        function onTouchMove(event) {\n            if (!self.touchDragStarted) {\n                return;\n            }\n\n            var touchEvent = event\n            moveDrag(touchEvent.touches[0])\n            if (!isNative) {\n                event.preventDefault()\n            }\n        }\n\n        /*\n         * Internal event, drag is active\n         */\n        function moveDrag(event) {\n            var current = event[eventElementName],\n                offset = dragStart - current;\n\n            if (Math.abs(offset) > 3) {\n                if (!dragging) {\n                    dragging = true;\n                    $el.trigger('start.oc.dragScroll');\n                    self.options.start();\n                    $(document.body).addClass(self.options.dragClass);\n                }\n\n                if (!isNative) {\n                    self.options.vertical ? $el.scrollTop(startOffset + offset) : $el.scrollLeft(startOffset + offset);\n                }\n\n                self.fixScrollClasses(true);\n\n                $el.trigger('drag.oc.dragScroll');\n                self.options.drag();\n            }\n        }\n\n        /*\n         * Internal event, drag has ended\n         */\n        function stopDrag(click) {\n            $(window).off('.dragScroll');\n            self.touchDragStarted = false;\n\n            dragging = false;\n\n            if (click) {\n                $(document.body).removeClass(self.options.dragClass);\n            }\n            else {\n                self.fixScrollClasses();\n            }\n\n            window.setTimeout(function() {\n                if (!click) {\n                    $(document.body).removeClass(self.options.dragClass);\n                    $el.trigger('stop.oc.dragScroll');\n                    self.options.stop();\n                    self.fixScrollClasses();\n                }\n            }, 100);\n        }\n\n        /*\n         * Scroll wheel has moved by supplied offset\n         */\n        function scrollWheel(offset) {\n            if (self.paused) {\n                return;\n            }\n\n            startOffset = self.options.vertical ? el.scrollTop : el.scrollLeft;\n\n            self.options.vertical ? $el.scrollTop(startOffset + offset) : $el.scrollLeft(startOffset + offset);\n\n            var scrolled = self.options.vertical ? el.scrollTop != startOffset : el.scrollLeft != startOffset;\n\n            $el.trigger('drag.oc.dragScroll');\n            self.options.drag();\n\n            if (scrolled) {\n                if (self.wheelUpdateTimer !== undefined && self.wheelUpdateTimer !== false)\n                    window.clearInterval(self.wheelUpdateTimer);\n\n                self.wheelUpdateTimer = window.setTimeout(function() {\n                    self.wheelUpdateTimer = false;\n                    self.fixScrollClasses();\n                }, 100);\n            }\n\n            return scrolled;\n        }\n\n        this.fixScrollClasses();\n    };\n\n    DragScroll.prototype.dispose = function() {\n        clearTimeout(this.fixScrollClassesIntervalId);\n\n        this.scrollClassContainer = null;\n\n        if (!this.options.noScrollClasses) {\n            $(document).off('ready', this.proxy(this.fixScrollClasses));\n            $(window).off('resize', this.proxy(this.fixScrollClasses));\n            this.el.off('scroll', this.proxy(this.fixScrollClasses));\n        }\n\n        this.el.off('.dragScroll');\n\n        this.el.removeData('oc.dragScroll');\n        window.removeEventListener('touchmove', this.onTouchMove, {passive: false})\n\n        this.el = null;\n        BaseProto.dispose.call(this);\n    };\n\n    DragScroll.prototype = Object.create(BaseProto);\n    DragScroll.prototype.constructor = DragScroll;\n\n    DragScroll.DEFAULTS = {\n        vertical: false,\n        useDrag: true,\n        useScroll: true,\n        useNative: false,\n        useComboScroll: true,\n        scrollClassContainer: false,\n        scrollMarkerContainer: false,\n        scrollSelector: null,\n        dragSelector: null,\n        noOverScroll: false,\n        dragClass: 'drag',\n        start: function() {},\n        drag: function() {},\n        stop: function() {}\n    };\n\n    DragScroll.prototype.fixScrollClasses = function(isThrottle) {\n        if (this.options.noScrollClasses) {\n            return;\n        }\n\n        if (this.fixScrollClassesIntervalId) {\n            if (isThrottle) {\n                return;\n            }\n\n            clearTimeout(this.fixScrollClassesIntervalId);\n            this.fixScrollClassesIntervalId = null;\n        }\n\n        var that = this;\n        this.fixScrollClassesIntervalId = window.setTimeout(function() {\n            that.fixScrollClassesIntervalId = null;\n\n            var isStart = that.isStart(),\n                isEnd = that.isEnd();\n\n            that.scrollClassContainer.toggleClass('scroll-before', !isStart);\n            that.scrollClassContainer.toggleClass('scroll-after', !isEnd);\n\n            that.scrollClassContainer.toggleClass('scroll-active-before', that.isActiveBefore());\n            that.scrollClassContainer.toggleClass('scroll-active-after', that.isActiveAfter());\n            that.isScrollable = !isStart || !isEnd;\n        }, 30);\n    };\n\n    DragScroll.prototype.isStart = function() {\n        if (!this.options.vertical) {\n            return this.el.scrollLeft() <= 0;\n        }\n        else {\n            return this.el.scrollTop() <= 0;\n        }\n    };\n\n    DragScroll.prototype.isEnd = function() {\n        // Fudge factor for retina displays\n        var offset = 1;\n\n        if (!this.options.vertical) {\n            return this.el[0].scrollWidth - (this.el.scrollLeft() + this.el.outerWidth()) - offset <= 0;\n        }\n        else {\n            return this.el[0].scrollHeight - (this.el.scrollTop() + this.el.outerHeight()) - offset <= 0;\n        }\n    };\n\n    DragScroll.prototype.goToStart = function() {\n        if (!this.options.vertical) {\n            return this.el.scrollLeft(0);\n        }\n        else {\n            return this.el.scrollTop(0);\n        }\n    };\n\n    /*\n     * Determines if the element with the class 'active' is hidden before the viewport -\n     * on the left or on the top, depending on whether the scrollbar is horizontal or vertical.\n     */\n    DragScroll.prototype.isActiveAfter = function() {\n        var activeElement = $('.active', this.el);\n        if (activeElement.length == 0) {\n            return false;\n        }\n\n        if (!this.options.vertical) {\n            return activeElement.get(0).offsetLeft > this.el.scrollLeft() + this.el.width();\n        }\n        else {\n            return activeElement.get(0).offsetTop > this.el.scrollTop() + this.el.height();\n        }\n    };\n\n    /*\n     * Determines if the element with the class 'active' is hidden after the viewport -\n     * on the right or on the bottom, depending on whether the scrollbar is horizontal or vertical.\n     */\n    DragScroll.prototype.isActiveBefore = function() {\n        var activeElement = $('.active', this.el);\n        if (activeElement.length == 0) {\n            return false;\n        }\n\n        if (!this.options.vertical) {\n            return activeElement.get(0).offsetLeft + activeElement.width() < this.el.scrollLeft();\n        }\n        else {\n            return activeElement.get(0).offsetTop + activeElement.height() < this.el.scrollTop();\n        }\n    };\n\n    DragScroll.prototype.goToElement = function(element, callback, options) {\n        var $el = $(element);\n        if (!$el.length) return;\n\n        var self = this,\n            params = {\n                duration: 300,\n                queue: false,\n                complete: function() {\n                    self.fixScrollClasses();\n                    if (callback !== undefined) callback();\n                }\n            };\n\n        params = $.extend(params, options || {});\n\n        var offset = 0,\n            animated = false;\n\n        if (!this.options.vertical) {\n            offset = $el.get(0).offsetLeft - this.el.scrollLeft();\n\n            if (offset < 0) {\n                this.el.animate({ scrollLeft: $el.get(0).offsetLeft }, params);\n                animated = true;\n            }\n            else {\n                offset = $el.get(0).offsetLeft + $el.width() - (this.el.scrollLeft() + this.el.width());\n                if (offset > 0) {\n                    this.el.animate({ scrollLeft: $el.get(0).offsetLeft + $el.width() - this.el.width() }, params);\n                    animated = true;\n                }\n            }\n        }\n        else {\n            offset = $el.get(0).offsetTop - this.el.scrollTop();\n\n            if (offset < 0) {\n                this.el.animate({ scrollTop: $el.get(0).offsetTop }, params);\n                animated = true;\n            }\n            else {\n                var heightOffset = 0;\n                if (params.alignBottom) {\n                    heightOffset = $el.height();\n                }\n\n                offset = $el.get(0).offsetTop + heightOffset - (this.el.scrollTop() + this.el.height());\n                if (offset > 0) {\n                    this.el.animate(\n                        { scrollTop: $el.get(0).offsetTop + $el.height() - this.el.height() + heightOffset },\n                        params\n                    );\n                    animated = true;\n                }\n            }\n        }\n\n        if (!animated && callback !== undefined) {\n            callback();\n        }\n    };\n\n    DragScroll.prototype.pause = function() {\n        this.paused = true;\n    };\n\n    DragScroll.prototype.resume = function() {\n        this.paused = false;\n    };\n\n    // DRAGSCROLL PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.dragScroll;\n\n    $.fn.dragScroll = function(option) {\n        var args = arguments;\n\n        return this.each(function() {\n            var $this = $(this);\n            var data = $this.data('oc.dragScroll');\n            var options = typeof option == 'object' && option;\n\n            if (!data) $this.data('oc.dragScroll', (data = new DragScroll(this, options)));\n            if (typeof option == 'string') {\n                var methodArgs = [];\n                for (var i = 1; i < args.length; i++) methodArgs.push(args[i]);\n\n                data[option].apply(data, methodArgs);\n            }\n        });\n    };\n\n    $.fn.dragScroll.Constructor = DragScroll;\n\n    // DRAGSCROLL NO CONFLICT\n    // =================\n\n    $.fn.dragScroll.noConflict = function() {\n        $.fn.dragScroll = old;\n        return this;\n    };\n})(window.jQuery);\n\n;\n/*\n * Table row linking plugin\n *\n * Data attributes:\n * - data-control=\"rowlink\" - enables the plugin on an element\n * - data-exclude-class=\"nolink\" - disables the link for elements with this class\n * - data-linked-class=\"rowlink\" - this class is added to affected table rows\n *\n * JavaScript API:\n * $('a#someElement').rowLink()\n *\n * Dependencies:\n * - Null\n */\n\n+function ($) { \"use strict\";\n\n    // ROWLINK CLASS DEFINITION\n    // ============================\n\n    var RowLink = function(element, options) {\n        var self       = this;\n        this.options   = options;\n        this.$el       = $(element);\n\n        var tr = this.$el.prop('tagName') == 'TR'\n            ? this.$el\n            : this.$el.find('tr:has(td)');\n\n        tr.each(function() {\n            var link = $(this)\n                .find(options.target)\n                .filter(function(){\n                    return !$(this).closest('td').hasClass(options.excludeClass) &&\n                        !$(this).hasClass(options.excludeClass)\n                })\n                .first();\n\n            if (!link.length) {\n                return;\n            }\n\n            var href = link.attr('href'),\n                onclick = (typeof link.get(0).onclick == \"function\") ? link.get(0).onclick : null,\n                popup = link.is('[data-control=popup]'),\n                request = link.is('[data-request]'),\n                skipNextBubble = false;\n\n            function handleClick(e) {\n                if (skipNextBubble) {\n                    skipNextBubble = false;\n                    return;\n                }\n\n                if ($(document.body).hasClass('drag')) {\n                    return;\n                }\n\n                if (onclick) {\n                    onclick.apply(link.get(0));\n                }\n                else if (request) {\n                    link.request();\n                }\n                else if (popup) {\n                    link.popup();\n                }\n                else if (e.ctrlKey || e.metaKey) {\n                    window.open(href);\n                }\n                else {\n                    if (oc.useTurbo()) {\n                        oc.visit(href);\n                    }\n                    else {\n                        location.assign(href);\n                    }\n                }\n            }\n\n            var $row = $(this).not('.' + options.excludeClass)\n\n            $row.on('click', 'td:not(.'+options.excludeClass+') > .'+options.excludeClass, function(e) {\n                skipNextBubble = true;\n            });\n\n            $row.on('click', 'td:not(.'+options.excludeClass+')', function(e) {\n                handleClick(e);\n            })\n\n            $row.on('mousedown', 'td:not(.'+options.excludeClass+')', function(e) {\n                if (e.which == 2) {\n                    window.open(href);\n                }\n            })\n\n            $row.on('keypress', function(e) {\n                if (e.key === '(Space character)' || e.key === 'Spacebar' || e.key === ' ') {\n                    handleClick(e);\n                    return false;\n                }\n            })\n\n            $(this).addClass(options.linkedClass);\n\n            link.hide().after(link.contents());\n        })\n\n        // Add Keyboard Navigation to list rows\n        $('tr.rowlink').attr('tabindex', 0);\n    }\n\n    RowLink.DEFAULTS = {\n        target: 'a',\n        excludeClass: 'nolink',\n        linkedClass: 'rowlink'\n    }\n\n    // ROWLINK PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.rowLink\n\n    $.fn.rowLink = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1)\n        return this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('oc.rowlink')\n            var options = $.extend({}, RowLink.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.rowlink', (data = new RowLink(this, options)))\n            else if (typeof option == 'string') data[option].apply(data, args)\n        })\n    }\n\n    $.fn.rowLink.Constructor = RowLink\n\n    // ROWLINK NO CONFLICT\n    // =================\n\n    $.fn.rowLink.noConflict = function () {\n        $.fn.rowLink = old\n        return this\n    }\n\n    // ROWLINK DATA-API\n    // ===============\n\n    $(document).render(function() {\n        $('[data-control=\"rowlink\"]').rowLink()\n    })\n\n}(window.jQuery);\n\n;\n/*\n * The autcomplete plugin, a forked version of Bootstrap's original typeahead plugin.\n *\n * Data attributes:\n * - data-control=\"autocomplete\" - enables the autocomplete plugin\n *\n * JavaScript API:\n * $('input').autocomplete()\n *\n * Forked by daftspunk:\n *\n * - Source can be an object [{ value: 'something', label: 'Something' }, { value: 'else', label: 'Something Else' }]\n * - Source can also be { something: 'Something', else: 'Else' }\n */\n\n!function($){\n\n    \"use strict\"; // jshint ;_;\n\n\n    /* AUTOCOMPLETE PUBLIC CLASS DEFINITION\n     * ================================= */\n\n    var Autocomplete = function (element, options) {\n        this.$element = $(element)\n        this.options = $.extend({}, $.fn.autocomplete.defaults, options)\n        this.matcher = this.options.matcher || this.matcher\n        this.sorter = this.options.sorter || this.sorter\n        this.highlighter = this.options.highlighter || this.highlighter\n        this.updater = this.options.updater || this.updater\n        this.source = this.options.source\n        this.$menu = $(this.options.menu)\n        this.shown = false\n        this.listen()\n    }\n\n    Autocomplete.prototype = {\n\n        constructor: Autocomplete,\n\n        select: function () {\n            var val = this.$menu.find('.active').attr('data-value')\n            this.$element\n                .val(this.updater(val))\n                .change()\n            return this.hide()\n        },\n\n        updater: function (item) {\n            return item\n        },\n\n        show: function () {\n            var offset = this.options.bodyContainer ? this.$element.offset() : this.$element.position(),\n                pos = $.extend({}, offset, {\n                height: this.$element[0].offsetHeight\n            }),\n            cssOptions = {\n                top: pos.top + pos.height\n                , left: pos.left\n            }\n\n            if (this.options.matchWidth) {\n                cssOptions.width = this.$element[0].offsetWidth\n            }\n\n            this.$menu.css(cssOptions)\n\n            if (this.options.bodyContainer) {\n                $(document.body).append(this.$menu)\n            }\n            else {\n                this.$menu.insertAfter(this.$element)\n            }\n\n            this.$menu.show()\n\n            this.shown = true\n            return this\n        },\n\n        hide: function () {\n            this.$menu.hide()\n            this.shown = false\n            return this\n        },\n\n        lookup: function (event) {\n            var items\n\n            this.query = this.$element.val()\n\n            if (!this.query || this.query.length < this.options.minLength) {\n                return this.shown ? this.hide() : this\n            }\n\n            items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source\n\n            return items ? this.process(items) : this\n        },\n\n        itemValue: function (item) {\n            if (typeof item === 'object')\n                return item.value;\n\n            return item;\n        },\n\n        itemLabel: function (item) {\n            if (typeof item === 'object')\n                return item.label;\n\n            return item;\n        },\n\n        itemsToArray: function (items) {\n            var newArray = []\n            $.each(items, function(value, label){\n                newArray.push({ label: label, value: value })\n            })\n            return newArray\n        },\n\n        process: function (items) {\n            var that = this\n\n            if (typeof items == 'object')\n                items = this.itemsToArray(items)\n\n            items = $.grep(items, function (item) {\n                return that.matcher(item)\n            })\n\n            items = this.sorter(items)\n\n            if (!items.length) {\n                return this.shown ? this.hide() : this\n            }\n\n            return this.render(items.slice(0, this.options.items)).show()\n        },\n\n        matcher: function (item) {\n            return ~this.itemValue(item).toLowerCase().indexOf(this.query.toLowerCase())\n        },\n\n        sorter: function (items) {\n            var beginswith = [],\n                caseSensitive = [],\n                caseInsensitive = [],\n                item,\n                itemValue\n\n            while (item = items.shift()) {\n                itemValue = this.itemValue(item)\n                if (!itemValue.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)\n                else if (~itemValue.indexOf(this.query)) caseSensitive.push(item)\n                else caseInsensitive.push(item)\n            }\n\n            return beginswith.concat(caseSensitive, caseInsensitive)\n        },\n\n        highlighter: function (item) {\n            var query = this.query.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&')\n            return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {\n                return '<strong>' + match + '</strong>'\n            })\n        },\n\n        render: function (items) {\n            var that = this\n\n            items = $(items).map(function (i, item) {\n                i = $(that.options.item).attr('data-value', that.itemValue(item))\n                i.find('a').html(that.highlighter(that.itemLabel(item)))\n                return i[0]\n            })\n\n            items.first().addClass('active')\n            this.$menu.html(items)\n            return this\n        },\n\n        next: function (event) {\n            var active = this.$menu.find('.active').removeClass('active'),\n                next = active.next()\n\n            if (!next.length) {\n                next = $(this.$menu.find('li')[0])\n            }\n\n            next.addClass('active')\n        },\n\n        prev: function (event) {\n            var active = this.$menu.find('.active').removeClass('active'),\n                prev = active.prev()\n\n            if (!prev.length) {\n                prev = this.$menu.find('li').last()\n            }\n\n            prev.addClass('active')\n        },\n\n        listen: function () {\n            this.$element\n                .on('focus.autocomplete',    $.proxy(this.focus, this))\n                .on('blur.autocomplete',     $.proxy(this.blur, this))\n                .on('keypress.autocomplete', $.proxy(this.keypress, this))\n                .on('keyup.autocomplete',    $.proxy(this.keyup, this))\n\n            if (this.eventSupported('keydown')) {\n                this.$element.on('keydown.autocomplete', $.proxy(this.keydown, this))\n            }\n\n            this.$menu\n                .on('click.autocomplete', $.proxy(this.click, this))\n                .on('mouseenter.autocomplete', 'li', $.proxy(this.mouseenter, this))\n                .on('mouseleave.autocomplete', 'li', $.proxy(this.mouseleave, this))\n        },\n\n        eventSupported: function(eventName) {\n            var isSupported = eventName in this.$element\n            if (!isSupported) {\n                this.$element.setAttribute(eventName, 'return;')\n                isSupported = typeof this.$element[eventName] === 'function'\n            }\n            return isSupported\n        },\n\n        move: function (e) {\n            if (!this.shown) return\n\n            switch(e.key) {\n                case 'Tab':\n                case 'Enter':\n                case 'Escape':\n                    e.preventDefault()\n                    break\n\n                case 'ArrowUp':\n                    e.preventDefault()\n                    this.prev()\n                    break\n\n                case 'ArrowDown':\n                    e.preventDefault()\n                    this.next()\n                    break\n            }\n\n            e.stopPropagation()\n        },\n\n        keydown: function (e) {\n            this.suppressKeyPressRepeat = ~$.inArray(e.key, ['ArrowDown','ArrowUp','Tab','Enter','Escape'])\n            this.move(e)\n        },\n\n        keypress: function (e) {\n            if (this.suppressKeyPressRepeat) return\n            this.move(e)\n        },\n\n        keyup: function (e) {\n            switch(e.keyCode) {\n                case 40: // down arrow\n                case 38: // up arrow\n                case 16: // shift\n                case 17: // ctrl\n                case 18: // alt\n                    break\n\n                case 9: // tab\n                case 13: // enter\n                    if (!this.shown) return\n                    this.select()\n                    break\n\n                case 27: // escape\n                    if (!this.shown) return\n                    this.hide()\n                    break\n\n                default:\n                    this.lookup()\n            }\n\n            e.stopPropagation()\n            e.preventDefault()\n        },\n\n        focus: function (e) {\n            this.focused = true\n        },\n\n        blur: function (e) {\n            this.focused = false\n            if (!this.mousedover && this.shown) this.hide()\n        },\n\n        click: function (e) {\n            e.stopPropagation()\n            e.preventDefault()\n            this.select()\n            this.$element.focus()\n        },\n\n        mouseenter: function (e) {\n            this.mousedover = true\n            this.$menu.find('.active').removeClass('active')\n            $(e.currentTarget).addClass('active')\n        },\n\n        mouseleave: function (e) {\n            this.mousedover = false\n            if (!this.focused && this.shown) this.hide()\n        },\n\n        destroy: function() {\n            this.hide()\n\n            this.$element.removeData('autocomplete')\n            this.$menu.remove()\n\n            this.$element.off('.autocomplete')\n            this.$menu.off('.autocomplete')\n\n            this.$element = null\n            this.$menu = null\n        }\n    }\n\n\n    /* AUTOCOMPLETE PLUGIN DEFINITION\n     * =========================== */\n\n    var old = $.fn.autocomplete\n\n    $.fn.autocomplete = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n                , data = $this.data('autocomplete')\n                , options = typeof option == 'object' && option\n            if (!data) $this.data('autocomplete', (data = new Autocomplete(this, options)))\n            if (typeof option == 'string') data[option]()\n        })\n    }\n\n    $.fn.autocomplete.defaults = {\n        source: [],\n        items: 8,\n        menu: '<ul class=\"autocomplete dropdown-menu\"></ul>',\n        item: '<li><a href=\"#\"></a></li>',\n        minLength: 1,\n        bodyContainer: false\n    }\n\n    $.fn.autocomplete.Constructor = Autocomplete\n\n\n    /* AUTOCOMPLETE NO CONFLICT\n     * =================== */\n\n    $.fn.autocomplete.noConflict = function () {\n        $.fn.autocomplete = old\n        return this\n    }\n\n\n    /* AUTOCOMPLETE DATA-API\n     * ================== */\n\n    function paramToObj(name, value) {\n        if (value === undefined) value = ''\n        if (typeof value == 'object') return value\n\n        try {\n            return oc.parseJSON(\"{\" + value + \"}\")\n        }\n        catch (e) {\n            throw new Error('Error parsing the '+name+' attribute value. '+e)\n        }\n    }\n\n    $(document).on('focus.autocomplete.data-api', '[data-control=\"autocomplete\"]', function (e) {\n        var $this = $(this)\n        if ($this.data('autocomplete')) return\n\n        var opts = $this.data()\n\n        if (opts.source) {\n            opts.source = paramToObj('data-source', opts.source)\n        }\n\n        $this.autocomplete(opts)\n    })\n\n}(window.jQuery);\n\n\n/* =============================================================\n * bootstrap-autocomplete.js v2.3.1\n * http://twitter.github.com/bootstrap/javascript.html#autocomplete\n * =============================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n\n;\n/*\n * Balloon selector control.\n *\n * Data attributes:\n * - data-control=\"balloon-selector\" - enables the plugin\n *\n */\n+function ($) { \"use strict\";\n\n    var BalloonSelector = function (element, options) {\n\n        this.$el = $(element);\n        this.$field = $('input', this.$el);\n\n        this.options = options || {};\n        this.allowEmpty = 'selectorAllowEmpty' in this.$el.get(0).dataset;\n\n        var self = this;\n        $('li', this.$el).click(function(){\n            if (self.$el.hasClass('control-disabled')) {\n                return;\n            }\n\n            if (self.allowEmpty && $(this).hasClass('active')) {\n                $(this).removeClass('active');\n                self.$field\n                    .val('')\n                    .trigger('change');\n                return;\n            }\n\n            $('li', self.$el).removeClass('active');\n            $(this).addClass('active');\n            self.$field\n                .val($(this).data('value'))\n                .trigger('change');\n        });\n\n        oc.Events.on(this.$el.get(0), 'trigger:empty', function() {\n            $('li', self.$el).removeClass('active');\n            self.$field.val('').trigger('change');\n        });\n\n        oc.Events.on(this.$el.get(0), 'trigger:fill', function(ev) {\n            var fillValue = ev.detail.fillValue;\n            $('li', self.$el).removeClass('active');\n            $('li[data-value=\"'+fillValue+'\"]', self.$el).addClass('active');\n            self.$field.val(fillValue).trigger('change');\n        });\n\n        oc.Events.on(this.$el.get(0), 'trigger:disable', function(ev) {\n            var status = ev.detail.status;\n            self.$field.prop('disabled', status);\n        });\n    }\n\n    BalloonSelector.DEFAULTS = {}\n\n    // BALLOON SELECTOR PLUGIN DEFINITION\n    // ===================================\n\n    var old = $.fn.balloonSelector;\n\n    $.fn.balloonSelector = function (option) {\n        return this.each(function () {\n            var $this = $(this);\n            var data  = $this.data('oc.balloon-selector');\n            var options = $.extend({}, BalloonSelector.DEFAULTS, $this.data(), typeof option == 'object' && option);\n\n            if (!data) $this.data('oc.balloon-selector', (data = new BalloonSelector(this, options)));\n        });\n    }\n\n    $.fn.balloonSelector.Constructor = BalloonSelector;\n\n    // BALLOON SELECTOR NO CONFLICT\n    // ===================================\n\n    $.fn.balloonSelector.noConflict = function () {\n        $.fn.balloonSelector = old;\n        return this;\n    }\n\n    // BALLOON SELECTOR DATA-API\n    // ===================================\n\n    $(document).on('render', function(){\n        $('div[data-control=balloon-selector]').balloonSelector();\n    });\n\n}(window.jQuery);\n\n;\n/*\n * Callout\n *\n * - Documentation: ../docs/callout.md\n */\n+function ($) {\n    'use strict';\n\n    // CALLOUT CLASS DEFINITION\n    // ======================\n\n    var dismiss = '[data-dismiss=\"callout\"]';\n    var Callout = function (el) {\n        $(el).on('click', dismiss, this.close);\n    }\n\n    Callout.prototype.close = function (e) {\n        var $this    = $(this);\n        var selector = $this.attr('data-target');\n\n        if (!selector) {\n            selector = $this.attr('href');\n        }\n\n        var $parent = $(selector);\n\n        if (e) {\n            e.preventDefault();\n        }\n\n        if (!$parent.length) {\n            $parent = $this.hasClass('callout') ? $this : $this.parent();\n        }\n\n        $parent.trigger(e = $.Event('close.oc.callout'));\n\n        if (e.isDefaultPrevented()) {\n            return;\n        }\n\n        $parent.removeClass('show');\n\n        function removeElement() {\n            $parent.trigger('closed.oc.callout').remove();\n        }\n\n        $parent.hasClass('fade')\n            ? $parent.one('transitionend', removeElement)\n            : removeElement();\n    }\n\n    // CALLOUT PLUGIN DEFINITION\n    // =======================\n\n    var old = $.fn.callout\n\n    $.fn.callout = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.callout')\n\n            if (!data) $this.data('oc.callout', (data = new Callout(this)))\n            if (typeof option == 'string') data[option].call($this)\n        })\n    }\n\n    $.fn.callout.Constructor = Callout\n\n    // CALLOUT NO CONFLICT\n    // =================\n\n    $.fn.callout.noConflict = function () {\n        $.fn.callout = old;\n        return this;\n    }\n\n    // CALLOUT DATA-API\n    // ==============\n\n    $(document).on('click.oc.callout.data-api', dismiss, Callout.prototype.close);\n\n}(jQuery);\n\n;\n/*\n * Dropdown menus.\n *\n * This script customizes the Twitter Bootstrap drop-downs.\n *\n * Require:\n *  - bootstrap/dropdown\n */\n+function ($) { \"use strict\";\n\n    $(document).on('shown.bs.dropdown', '.dropdown', function(ev) {\n        $(document.body).addClass('dropdown-open');\n\n        var dropdown = $(ev.relatedTarget).siblings('.dropdown-menu'),\n            dropdownContainer = $(this).data('dropdown-container');\n\n        // The dropdown menu should be a sibling of the triggering element (above)\n        // otherwise, look for any dropdown menu within this context.\n        if (dropdown.length === 0) {\n            dropdown = $('.dropdown-menu', this);\n        }\n\n        if (!dropdown.hasClass('control-dropdown')) {\n            $('li > a', dropdown).addClass('dropdown-item');\n            $('li:first-child', dropdown).addClass('first-item');\n            $('li:last-child', dropdown).addClass('last-item');\n\n            dropdown.addClass('control-dropdown');\n        }\n\n        if (dropdownContainer !== undefined && dropdownContainer == 'body') {\n            $(this).data('oc.dropdown', dropdown);\n            $(document.body).append(dropdown);\n\n            dropdown.css({\n                'visibility': 'hidden',\n                'left': 0,\n                'top' : 0,\n                'display': 'block'\n            });\n\n            var targetOffset = $(this).offset(),\n                targetHeight = $(this).height(),\n                targetWidth = $(this).width(),\n                position = {\n                    x: targetOffset.left,\n                    y: targetOffset.top + targetHeight\n                },\n                leftOffset = targetWidth < 30 ? -16 : 0,\n                documentHeight = $(document).height(),\n                dropdownHeight = dropdown.height();\n\n            if ((dropdownHeight + position.y) > documentHeight) {\n                position.y = targetOffset.top - dropdownHeight - 12;\n                dropdown.addClass('top');\n            }\n            else {\n                dropdown.removeClass('top');\n            }\n\n            dropdown.css({\n                'left': position.x + leftOffset,\n                'top': position.y,\n                'visibility': 'visible'\n            });\n        }\n\n        if ($('.dropdown-overlay', document.body).length == 0) {\n            $(document.body).prepend($('<div/>').addClass('dropdown-overlay'));\n        }\n    })\n\n    $(document).on('hidden.bs.dropdown', '.dropdown', function() {\n        var dropdown = $(this).data('oc.dropdown');\n        if (dropdown !== undefined) {\n            dropdown.css('display', 'none');\n            $(this).append(dropdown);\n        }\n\n        $(document.body).removeClass('dropdown-open');\n    })\n\n    /*\n     * Fixed positioned dropdowns\n     * - Useful for dropdowns inside hidden overflow containers\n     */\n\n    var $dropdown, $container, $target;\n\n    function fixDropdownPosition() {\n        var position = $container.offset(),\n            top = position.top - $(window).scrollTop() + $target.outerHeight() + 1,\n            left = position.left;\n\n        // Waiting for https://github.com/twbs/bootstrap/pull/34120\n        $dropdown.css({\n            position: 'fixed',\n            inset: '0px auto auto 0px',\n            transform: 'translate('+left+'px, '+top+'px)'\n        });\n    }\n\n    $(document).on('shown.bs.dropdown', '.dropdown.dropdown-fixed', function (ev) {\n        $container = $(this);\n        $dropdown = $('.dropdown-menu', $container);\n        $target = $(ev.relatedTarget);\n        $dropdown.addClass('is-fixed');\n        $(window).on('scroll.oc.dropdown, resize.oc.dropdown', fixDropdownPosition);\n        setTimeout(fixDropdownPosition, 0);\n        fixDropdownPosition();\n    })\n\n    $(document).on('hidden.bs.dropdown', '.dropdown.dropdown-fixed', function() {\n        $(window).off('scroll.oc.dropdown, resize.oc.dropdown', fixDropdownPosition);\n    });\n\n}(window.jQuery);\n\n;\n/*\n * Popover plugin\n *\n * Documentation: ../docs/popover.md\n */\n\n+function ($) { \"use strict\";\n\n    var Popover = function (element, options) {\n        this.$el = $(element);\n        this.options = options || {};\n        this.arrowSize = 15;\n        this.docClickHandler = null;\n        this.show();\n    }\n\n    Popover.prototype.hide = function() {\n        var e = $.Event('hiding.oc.popover', { relatedTarget: this.$el });\n        this.$el.trigger(e, this);\n\n        if (e.isDefaultPrevented()) {\n            return;\n        }\n\n        this.$container.removeClass('show');\n\n        if (this.options.modal) {\n            this.$overlay.removeClass('show');\n        }\n\n        this.disposeControls();\n\n        if (this.$container.hasClass('fade')) {\n            this.$container.one('transitionend', $.proxy(this.hidePopover, this));\n        }\n        else {\n            this.hidePopover();\n        }\n    }\n\n    Popover.prototype.disposeControls = function() {\n        if (this.$container) {\n            $.oc.foundation.controlUtils.disposeControls(this.$container.get(0));\n        }\n    }\n\n    Popover.prototype.hidePopover = function() {\n        this.$container.remove();\n\n        if (this.$overlay) {\n            this.$overlay.remove();\n        }\n\n        this.$el.removeClass('popover-highlight');\n        this.$el.trigger('hide.oc.popover');\n\n        this.$overlay = false;\n        this.$container = false;\n\n        this.$el.data('oc.popover', null);\n        $(document.body).removeClass('popover-open');\n\n        $(document).unbind('mousedown', this.docClickHandler);\n        $(document).off('.oc.popover');\n\n        this.docClickHandler = null;\n        this.options.onCheckDocumentClickTarget = null;\n    }\n\n    Popover.prototype.show = function(options) {\n        var self = this;\n\n        // Trigger the show event\n        var e = $.Event('showing.oc.popover', { relatedTarget: this.$el })\n        this.$el.trigger(e, this)\n        if (e.isDefaultPrevented()) {\n            return;\n        }\n\n        // Create the popover container and overlay\n        this.$container = $('<div />').addClass('control-popover');\n\n        if (this.options.containerClass) {\n            this.$container.addClass(this.options.containerClass);\n        }\n\n        if (this.options.useAnimation) {\n            this.$container.addClass('fade');\n        }\n\n        var $content = $('<div />').html(this.getContent());\n\n        this.$container.append($content);\n\n        if (this.options.width) {\n            this.$container.width(this.options.width);\n        }\n\n        // Create overlay\n        this.$overlay = $('<div />').addClass('popover-overlay');\n        $(document.body).append(this.$overlay);\n        if (this.options.highlightModalTarget) {\n            this.$el.addClass('popover-highlight');\n            this.$el.blur();\n        }\n\n        if (this.options.container) {\n            $(this.options.container).append(this.$container);\n        }\n        else {\n            $(document.body).append(this.$container);\n        }\n\n        // Determine the popover position\n        this.reposition();\n\n        $(window).on('resize', function() {\n            if (self.$container) {\n                self.reposition();\n            }\n        });\n\n        // Display the popover\n        this.$container.addClass('show');\n        if (this.options.modal) {\n            this.$overlay.addClass('show');\n        }\n\n        $(document.body).addClass('popover-open');\n        var showEvent = jQuery.Event('show.oc.popover', { relatedTarget: this.$container.get(0) });\n        this.$el.trigger(showEvent);\n\n        // Autofocus implementation\n        $('[data-popover-autofocus]:first', this.$container).focus();\n\n        // Bind events\n        this.$container.on('close.oc.popover', function(e){\n           self.hide();\n        });\n\n        this.$container.on('click', '[data-dismiss=popover]', function(e){\n           self.hide();\n           return false;\n        });\n\n        this.docClickHandler = $.proxy(this.onDocumentClick, this);\n        $(document).bind('mousedown', this.docClickHandler);\n\n        if (this.options.closeOnEsc) {\n            $(document).on('keyup.oc.popover', function(e){\n                if ($(e.target).hasClass('select2-offscreen')) {\n                    return false;\n               }\n\n                // The value of the option could be changed after the popover is displayed\n                if (!self.options.closeOnEsc) {\n                    return false;\n                }\n\n                if (e.key === 'Escape') {\n                   self.hide();\n                   return false;\n                }\n            });\n        }\n    }\n\n    Popover.prototype.reposition = function() {\n        var\n            placement = this.calcPlacement(),\n            position = this.calcPosition(placement);\n\n        this.$container.removeClass('placement-center placement-bottom placement-top placement-left placement-right');\n\n        this.$container.css({\n            left: position.x,\n            top: position.y\n        }).addClass('placement-'+placement);\n    }\n\n    Popover.prototype.getContainer = function () {\n        return this.$container.get(0);\n    }\n\n    Popover.prototype.getContent = function () {\n        if (this.options.contentFrom) {\n            return $(this.options.contentFrom).html();\n        }\n\n        if (typeof this.options.content == 'function') {\n            return this.options.content.call(this.$el[0], this);\n        }\n\n        return this.options.content;\n    }\n\n    Popover.prototype.calcDimensions = function() {\n        var\n            documentWidth = $(document).width(),\n            documentHeight = $(document).height(),\n            targetOffset = this.$el.offset(),\n            targetWidth = this.$el.outerWidth(),\n            targetHeight = this.$el.outerHeight();\n\n        return {\n            containerWidth: this.$container.outerWidth() + this.arrowSize,\n            containerHeight: this.$container.outerHeight() + this.arrowSize,\n            targetOffset: targetOffset,\n            targetHeight: targetHeight,\n            targetWidth: targetWidth,\n            spaceLeft: targetOffset.left,\n            spaceRight: documentWidth - (targetWidth + targetOffset.left),\n            spaceTop: targetOffset.top,\n            spaceBottom: documentHeight - (targetHeight + targetOffset.top),\n            spaceHorizontalBottom: documentHeight - targetOffset.top,\n            spaceVerticalRight: documentWidth - targetOffset.left,\n            documentWidth: documentWidth\n        };\n    }\n\n    Popover.prototype.fitsLeft = function(dimensions) {\n        return dimensions.spaceLeft >= dimensions.containerWidth &&\n            dimensions.spaceHorizontalBottom >= dimensions.containerHeight;\n    }\n\n    Popover.prototype.fitsRight = function(dimensions) {\n        return dimensions.spaceRight >= dimensions.containerWidth &&\n            dimensions.spaceHorizontalBottom >= dimensions.containerHeight;\n    }\n\n    Popover.prototype.fitsBottom = function(dimensions) {\n        return dimensions.spaceBottom >= dimensions.containerHeight &&\n            dimensions.spaceVerticalRight >= dimensions.containerWidth;\n    }\n\n    Popover.prototype.fitsTop = function(dimensions) {\n        return dimensions.spaceTop >= dimensions.containerHeight &&\n            dimensions.spaceVerticalRight >= dimensions.containerWidth;\n    }\n\n    Popover.prototype.calcPlacement = function() {\n        var\n            placement = this.options.placement,\n            dimensions = this.calcDimensions();\n\n        if (placement == 'center') {\n            return placement;\n        }\n\n        if (placement != 'bottom' && placement != 'top' && placement != 'left' && placement != 'right') {\n            placement = 'bottom';\n        }\n\n        var placementFunctions = {\n            top: this.fitsTop,\n            bottom: this.fitsBottom,\n            left: this.fitsLeft,\n            right: this.fitsRight\n        };\n\n        if (placementFunctions[placement](dimensions)) {\n            return placement;\n        }\n\n        for (var index in placementFunctions) {\n            if (placementFunctions[index](dimensions)) {\n                return index;\n            }\n        }\n\n        return this.options.fallbackPlacement;\n    }\n\n    Popover.prototype.calcPosition = function(placement) {\n        var dimensions = this.calcDimensions(),\n            result;\n\n        switch (placement) {\n            case 'left':\n                var realOffset = this.options.offsetY === undefined ? this.options.offset : this.options.offsetY;\n                result = {x: (dimensions.targetOffset.left - dimensions.containerWidth), y: dimensions.targetOffset.top + realOffset};\n            break;\n            case 'top':\n                var realOffset = this.options.offsetX === undefined ? this.options.offset : this.options.offsetX;\n                result = {x: dimensions.targetOffset.left + realOffset, y: (dimensions.targetOffset.top - dimensions.containerHeight)};\n            break;\n            case 'bottom':\n                var realOffset = this.options.offsetX === undefined ? this.options.offset : this.options.offsetX;\n                result = {x: dimensions.targetOffset.left + realOffset, y: (dimensions.targetOffset.top + dimensions.targetHeight + this.arrowSize)};\n            break;\n            case 'right':\n                var realOffset = this.options.offsetY === undefined ? this.options.offset : this.options.offsetY;\n                result = {x: (dimensions.targetOffset.left + dimensions.targetWidth + this.arrowSize), y: dimensions.targetOffset.top + realOffset};\n            break;\n            case 'center' :\n                var windowHeight = $(window).height();\n                result = {x: (dimensions.documentWidth/2 - dimensions.containerWidth/2), y: (windowHeight/2 - dimensions.containerHeight/2)};\n\n                if (result.y < 40) {\n                    result.y = 40;\n                }\n            break;\n        }\n\n        if (!this.options.container) {\n            return result;\n        }\n\n        var\n            $container = $(this.options.container),\n            containerOffset = $container.offset();\n\n        result.x -= containerOffset.left;\n        result.y -= containerOffset.top;\n\n        return result;\n    }\n\n    Popover.prototype.onDocumentClick = function(e) {\n        if (!this.options.closeOnPageClick) {\n            return;\n        }\n\n        if (this.options.onCheckDocumentClickTarget && this.options.onCheckDocumentClickTarget(e.target)) {\n            return;\n        }\n\n        if ($.contains(this.$container.get(0), e.target)) {\n            return;\n        }\n\n        this.hide();\n    }\n\n    Popover.DEFAULTS = {\n        placement: 'bottom',\n        fallbackPlacement: 'bottom',\n        content: '<p>Popover content<p>',\n        contentFrom: null,\n        width: false,\n        modal: false,\n        highlightModalTarget: false,\n        closeOnPageClick: true,\n        closeOnEsc: true,\n        container: false,\n        containerClass: null,\n        offset: 15,\n        useAnimation: false,\n        onCheckDocumentClickTarget: null\n    }\n\n    // POPOVER PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.ocPopover;\n\n    $.fn.ocPopover = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1), result\n\n        this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.popover')\n            var options = $.extend({}, Popover.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.popover', (data = new Popover(this, options)))\n            if (typeof option == 'string') result = data[option].apply(data, args);\n            if (typeof result != 'undefined') return false;\n        });\n\n        return result ? result : this;\n    }\n\n    $.fn.ocPopover.Constructor = Popover;\n\n    // POPOVER NO CONFLICT\n    // =================\n\n    $.fn.ocPopover.noConflict = function () {\n        $.fn.ocPopover = old;\n        return this;\n    }\n\n    // POPOVER DATA-API\n    // ===============\n\n    $(document).on('click', '[data-control=popover]', function(e){\n        $(this).ocPopover();\n        return false;\n    })\n\n}(window.jQuery);\n\n;\n/*\n * Ajax Popup plugin\n *\n * Documentation: ../docs/popup.md\n *\n * Require:\n *  - bootstrap/modal\n */\n\n+function($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    // POPUP CLASS DEFINITION\n    // ============================\n\n    var Popup = function(element, options) {\n        this.options = options;\n        this.$el = $(element);\n        this.$container = null;\n        this.$modal = null;\n        this.$backdrop = null;\n        this.isOpen = false;\n        this.isLoading = false;\n        this.firstDiv = null;\n        this.allowHide = true;\n\n        this.$container = this.createPopupContainer()\n        this.$content = $('.modal-content:first', this.$container);\n        this.$dialog = $('.modal-dialog:first', this.$container);\n        this.$modal = this.$container.modal({\n            show: false,\n            backdrop: false,\n            keyboard: this.options.keyboard,\n            focus: false\n        });\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        Base.call(this);\n\n        this.initEvents();\n        this.init();\n    }\n\n    Popup.prototype = Object.create(BaseProto)\n    Popup.prototype.constructor = Popup\n\n    Popup.DEFAULTS = {\n        ajax: null,\n        handler: null,\n        keyboard: true,\n        extraData: {},\n        content: null,\n        size: null,\n        adaptiveHeight: false,\n        zIndex: null\n    }\n\n    Popup.prototype.init = function() {\n        var self = this;\n\n        // Do not allow the same popup to open twice\n        if (self.isOpen) {\n            return;\n        }\n\n        // Show loading panel\n        this.setBackdrop(true);\n\n        if (!this.options.content) {\n            this.setLoading(true);\n        }\n\n        // October AJAX\n        if (this.options.handler) {\n            this.$el.request(this.options.handler, {\n                data: paramToObj('data-extra-data', this.options.extraData),\n                success: function(data, statusCode, xhr) {\n                    if (data instanceof Blob) {\n                        if (self.isLoading) {\n                            self.hideLoading();\n                        }\n                        else {\n                            self.hide();\n                        }\n                        self.triggerEvent('popup:download');\n                        this.success(data, statusCode, xhr);\n                        return;\n                    }\n\n                    this.success(data, statusCode, xhr).done(function() {\n                        self.setContent(data.result);\n                        $(window).trigger('ajaxUpdateComplete', [this, data, statusCode, xhr]);\n                        self.triggerEvent('popupComplete');\n                        self.triggerEvent('complete.oc.popup');\n                    });\n                },\n                error: function(data, statusCode, xhr) {\n                    this.error(data, statusCode, xhr).done(function() {\n                        if (self.isLoading) {\n                            self.hideLoading();\n                        }\n                        else {\n                            self.hide();\n                        }\n                        self.triggerEvent('popupError');\n                        self.triggerEvent('error.oc.popup');\n                    });\n                },\n                cancel: function() {\n                    if (self.isLoading) {\n                        self.hideLoading();\n                    }\n                    else {\n                        self.hide();\n                    }\n                }\n            });\n\n        }\n        // Regular AJAX\n        else if (this.options.ajax) {\n            $.ajax({\n                url: this.options.ajax,\n                data: paramToObj('data-extra-data', this.options.extraData),\n                success: function(data) {\n                    self.setContent(data)\n                },\n                cache: false\n            });\n        }\n        // Specified content\n        else if (this.options.content) {\n            var content = typeof this.options.content == 'function'\n                ? this.options.content.call(this.$el[0], this)\n                : this.options.content;\n\n            this.setContent(content);\n        }\n    }\n\n    Popup.prototype.initEvents = function() {\n        var self = this;\n\n        // Duplicate the popup reference on the .control-popup container\n        this.$container.data('oc.popup', this);\n\n        // Hook in to BS Modal events\n        this.$modal.on('hide.bs.modal', function() {\n            self.triggerEvent('hide.oc.popup');\n            self.isOpen = false;\n            self.setBackdrop(false);\n        });\n\n        this.$modal.on('hidden.bs.modal', function() {\n            self.triggerEvent('hidden.oc.popup');\n            $.oc.foundation.controlUtils.disposeControls(self.$container.get(0));\n            self.$container.remove();\n            $(document.body).removeClass('modal-open');\n            self.dispose();\n        });\n\n        this.$modal.on('show.bs.modal', function() {\n            self.isOpen = true;\n            self.setBackdrop(true);\n            $(document.body).addClass('modal-open');\n        });\n\n        this.$modal.on('shown.bs.modal', function() {\n            self.triggerEvent('shown.oc.popup');\n        });\n\n        this.$modal.on('close.oc.popup', function() {\n            self.hide();\n            return false;\n        });\n\n        oc.Events.dispatch('popup:show');\n    }\n\n    Popup.prototype.dispose = function() {\n        this.$modal.off('hide.bs.modal');\n        this.$modal.off('hidden.bs.modal');\n        this.$modal.off('show.bs.modal');\n        this.$modal.off('shown.bs.modal');\n        this.$modal.off('close.oc.popup');\n\n        this.$el.off('dispose-control', this.proxy(this.dispose));\n        this.$el.removeData('oc.popup');\n        this.$container.removeData('oc.popup');\n\n        this.$container = null;\n        this.$content = null;\n        this.$dialog = null;\n        this.$modal = null;\n        this.$el = null;\n\n        // In some cases options could contain callbacks,\n        // so it's better to clean them up too.\n        this.options = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    Popup.prototype.createPopupContainer = function() {\n        var\n            modal = $('<div />').prop({\n                class: 'control-popup modal fade',\n                role: 'dialog',\n                tabindex: -1\n            }),\n            modalDialog = $('<div />').addClass('modal-dialog'),\n            modalContent = $('<div />').addClass('modal-content');\n\n        if (this.options.size) {\n            modalDialog.addClass('size-' + this.options.size);\n        }\n\n        if (this.options.adaptiveHeight) {\n            modalDialog.addClass('adaptive-height');\n        }\n\n        if (this.options.zIndex !== null) {\n            modal.css('z-index', this.options.zIndex + 20);\n        }\n\n        return modal.append(modalDialog.append(modalContent));\n    }\n\n    Popup.prototype.setContent = function(contents) {\n        var contentNode = $(contents);\n\n        // Set the popup size from the inner contents instead\n        // of needing it from the calling code\n        if (contentNode.data('popup-size')) {\n            this.$dialog.addClass('size-' + contentNode.data('popup-size'));\n        }\n        else {\n            var $defaultSize = $('[data-popup-size]', contentNode);\n            if ($defaultSize.length > 0) {\n                this.$dialog.addClass('size-' + $defaultSize.data('popup-size'));\n            }\n        }\n\n        this.setLoading(false);\n        this.$modal.modal('show');\n        this.$content.html(contentNode);\n        this.triggerShowEvent();\n\n        // Duplicate the popup object reference on to the first div\n        // inside the popup. Eg: $('#firstDiv').popup('hide')\n        this.firstDiv = this.$content.find('>div:first');\n        if (this.firstDiv.length > 0) {\n            this.firstDiv.data('oc.popup', this)\n        }\n\n        var $defaultFocus = $('[default-focus],[autofocus]', this.$content);\n        if ($defaultFocus.is(\":visible\")) {\n            window.setTimeout(function() {\n                $defaultFocus.focus();\n                $defaultFocus = null;\n            }, 300);\n        }\n    }\n\n    Popup.prototype.setBackdrop = function(val) {\n        if (val && !this.$backdrop) {\n            this.$backdrop = $('<div class=\"popup-backdrop fade\" />');\n\n            if (this.options.zIndex !== null) {\n                this.$backdrop.css('z-index', this.options.zIndex);\n            }\n\n            this.$backdrop.appendTo(document.body);\n\n            this.$backdrop.addClass('show');\n            this.$backdrop.append($('<div class=\"modal-content popup-loading-indicator\" />'));\n        }\n        else if (!val && this.$backdrop) {\n            this.$backdrop.remove();\n            this.$backdrop = null;\n        }\n    }\n\n    Popup.prototype.setLoading = function(val) {\n        if (!this.$backdrop) {\n            return;\n        }\n\n        this.isLoading = val;\n\n        if (val) {\n            setTimeout(() => {\n                if (this.$backdrop) {\n                    this.$backdrop.addClass('loading');\n                }\n            }, 100);\n        }\n        else {\n            setTimeout(() => {\n                if (this.$backdrop) {\n                    this.$backdrop.removeClass('loading');\n                }\n            }, 100);\n        }\n    }\n\n    Popup.prototype.setShake = function() {\n        var self = this;\n\n        this.$content.addClass('popup-shaking');\n\n        setTimeout(function() {\n            self.$content.removeClass('popup-shaking');\n        }, 1000)\n    }\n\n    Popup.prototype.hideLoading = function(val) {\n        this.setLoading(false);\n\n        // Wait for animations to complete\n        var self = this;\n        setTimeout(function() { self.setBackdrop(false) }, 250);\n        setTimeout(function() { self.hide() }, 300);\n    }\n\n    Popup.prototype.triggerEvent = function(eventName, params) {\n        if (!params) {\n            params = [this.$el, this.$modal];\n        }\n\n        var eventObject = jQuery.Event(eventName, { relatedTarget: this.$container.get(0) });\n\n        this.$el.trigger(eventObject, params);\n\n        if (this.firstDiv) {\n            this.firstDiv.trigger(eventObject, params);\n        }\n    }\n\n    Popup.prototype.reload = function() {\n        this.init();\n    }\n\n    Popup.prototype.show = function() {\n        this.$modal.modal('show');\n        this.triggerShowEvent();\n    }\n\n    Popup.prototype.triggerShowEvent = function() {\n        this.$modal.on('click.dismiss.popup', '[data-dismiss=\"popup\"]', $.proxy(this.hide, this));\n        this.triggerEvent('popupShow');\n        this.triggerEvent('show.oc.popup');\n\n        // Fixes an issue where the Modal makes `position: fixed` elements relative to itself\n        // https://github.com/twbs/bootstrap/issues/15856\n        this.$dialog.css('transform', 'inherit');\n    }\n\n    Popup.prototype.hide = function() {\n        if (!this.isOpen) return\n\n        this.triggerEvent('popupHide');\n        this.triggerEvent('hide.oc.popup');\n\n        if (this.allowHide) {\n            this.$modal.modal('hide');\n        }\n\n        // Fixes an issue where the Modal makes `position: fixed` elements relative to itself\n        // https://github.com/twbs/bootstrap/issues/15856\n        this.$dialog.css('transform', '');\n    }\n\n    /*\n     * Hide the popup without destroying it,\n     * you should call .hide() once finished\n     */\n    Popup.prototype.visible = function(val) {\n        if (val) {\n            this.$modal.addClass('show');\n        }\n        else {\n            this.$modal.removeClass('show');\n        }\n\n        this.setBackdrop(val);\n    }\n\n    Popup.prototype.toggle = function() {\n        this.triggerEvent('toggle.oc.popup', [this.$modal]);\n\n        this.$modal.modal('toggle');\n    }\n\n    /*\n     * Lock the popup from closing\n     */\n    Popup.prototype.lock = function(val) {\n        this.allowHide = !val;\n    }\n\n    // POPUP PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.popup;\n\n    $.fn.popup = function(option) {\n        var args = Array.prototype.slice.call(arguments, 1);\n        return this.each(function() {\n            var $this   = $(this)\n            var data    = $this.data('oc.popup')\n            var options = $.extend({}, Popup.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.popup', (data = new Popup(this, options)))\n            else if (typeof option == 'string') data[option].apply(data, args)\n            else data.reload()\n        });\n    }\n\n    $.fn.popup.Constructor = Popup;\n\n    $.popup = function(option) {\n        return $('<a />').popup(option);\n    }\n\n    // POPUP NO CONFLICT\n    // =================\n\n    $.fn.popup.noConflict = function() {\n        $.fn.popup = old;\n        return this;\n    }\n\n    // POPUP DATA-API\n    // ===============\n\n    function paramToObj(name, value) {\n        if (value === undefined) value = '';\n        if (typeof value == 'object') return value;\n\n        try {\n            return oc.parseJSON(\"{\" + value + \"}\");\n        }\n        catch (e) {\n            throw new Error('Error parsing the '+name+' attribute value. '+e);\n        }\n    }\n\n    $(document).on('click.oc.popup', '[data-control~=\"popup\"]', function(event) {\n        event.preventDefault();\n\n        $(this).popup();\n    });\n\n    // Popup loading indicator will only show if the handlers are an exact match.\n    $(document)\n        // Prevent subsequent requests while loading (mis-doubleclick)\n        .on('ajax:setup', '[data-popup-load-indicator]', function(event) {\n            if ($(this).data('request') !== event.detail.context.handler) return;\n            if (!$(this).closest('.control-popup').hasClass('show')) event.preventDefault();\n        })\n        // Hide popup during AJAX\n        .on('ajax:promise', '[data-popup-load-indicator]', function(event) {\n            if ($(this).data('request') !== event.detail.context.handler) return;\n            $(this).closest('.control-popup').removeClass('show').popup('setLoading', true);\n        })\n        // Request failed, show popup again\n        .on('ajax:fail', '[data-popup-load-indicator]', function(event) {\n            if ($(this).data('request') !== event.detail.context.handler) return;\n            $(this).closest('.control-popup').addClass('show').popup('setLoading', false).popup('setShake');\n        })\n        // Request complete, hide loader\n        .on('ajax:done', '[data-popup-load-indicator]', function(event) {\n            if ($(this).data('request') !== event.detail.context.handler) return;\n            $(this).closest('.control-popup').popup('hideLoading');\n        });\n\n    oc.popup = Popup;\n\n    // This function transfers the supplied variables as hidden form inputs,\n    // to any popup that is spawned within the supplied container. The spawned\n    // popup must contain a form element.\n    oc.popup.bindToPopups = (container, vars) => {\n        $(container).on('show.oc.popup', function(event, $trigger, $modal){\n            var $form = $('form', $modal)\n            $.each(vars, function(name, value){\n                $form.prepend($('<input />').attr({ type: 'hidden', name: name, value: value }));\n            });\n        });\n    };\n\n    // This will focus the first element if no other autofocus attribute is found,\n    // uses a specific delay to account for the CSS animations used by the modal.\n    oc.popup.focusFirstInput = (container) => {\n        setTimeout(function() {\n            var $container = $(container);\n            if (!$('[default-focus],[autofocus]', $container).length) {\n                $('input.form-control:first', $container).focus();\n            }\n        }, 310);\n    };\n\n}(window.jQuery);\n\n;\n+(function($) {\n    'use strict';\n\n    class PopupStacker\n    {\n        constructor() {\n            $(document).on('hidden.bs.modal', (ev) => this.onPopupHidden(ev));\n            $(document).on('shown.bs.modal', (ev) => this.onPopupShown(ev));\n            oc.Events.on(document, 'popup:show', (ev) => this.onPopupShowing(ev));\n        }\n\n        onPopupHidden(ev) {\n            this.redrawStack();\n            this.pullForward();\n        }\n\n        onPopupShowing(ev) {\n            document.activeElement && document.activeElement.blur();\n            this.redrawStack(true);\n        }\n\n        onPopupShown(ev) {\n            var el = ev.target;\n\n            if (!el.dataset.popupStackId) {\n                el.dataset.popupStackId = this.generateUniqueId();\n            }\n\n            this.redrawStack();\n        }\n\n        pullForward() {\n            const el = this.getFirstPopup();\n            if (!el) {\n                return;\n            }\n\n            const content = el.querySelector('.modal-content');\n            if (content) {\n                content.style.transform = null;\n                content.style.transformOrigin = null;\n                el.style.zIndex = null;\n\n                // Wait for transition end (.3s)\n                setTimeout(() => {\n                    if (content) {\n                        content.style.transition = null;\n                    }\n                }, 350);\n            }\n\n            const backdrop = el.previousElementSibling;\n            if (backdrop && backdrop.classList.contains('popup-backdrop')) {\n                backdrop.style.zIndex = null;\n            }\n        }\n\n        redrawStack(isEarly) {\n            let count = 0;\n\n            this.getAllPopups().forEach((el) => {\n                count++;\n\n                // Push back popups before a new popup spawns\n                let offset = count;\n                if (!isEarly) {\n                    offset--;\n\n                    if (count === 1) {\n                        return;\n                    }\n                }\n\n                const content = el.querySelector('.modal-content');\n                if (content && !content.classList.contains('popup-loading-indicator')) {\n                    content.style.transform = `scale(.9) translate(-${2*offset}rem, -${50*offset}px)`;\n                    content.style.transformOrigin = 'top left';\n                    content.style.transition = 'all .3s';\n                    el.style.zIndex = (490 - offset);\n                }\n\n                const backdrop = el.previousElementSibling;\n                if (backdrop && backdrop.classList.contains('popup-backdrop')) {\n                    backdrop.style.zIndex = (490 - offset);\n                }\n            });\n        }\n\n        getFirstPopup() {\n            return this.getAllPopups()[0];\n        }\n\n        getAllPopups() {\n            return Array.from(document.querySelectorAll('.modal.show[data-popup-stack-id]')).reverse();\n        }\n\n        generateUniqueId() {\n            return \"popupid-\" + Math.floor(Math.random() * new Date().getTime());\n        }\n    }\n\n    oc.popupStacker = new PopupStacker();\n\n})($);\n\n;\n/*\n * Toolbar control.\n *\n * Makes toolbars drag/scrollable.\n *\n * Data attributes:\n * - data-control=\"toolbar\" - enables the toolbar plugin\n * - data-no-drag-support=\"true\" - disables the drag support for the toolbar, leaving only the mouse wheel support\n * - data-use-native-drag=\"true\" - if native CSS is enabled via \"mobile\" on the HTML tag, false by default\n * - data-vertical=\"false\" - enables vertical scrolling mode for the toolbar contents\n *\n * JavaScript API:\n * $('#toolbar').toolbar()\n *\n * Require:\n * - storm/drag.scroll\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var Toolbar = function (element, options) {\n        var\n            $el = this.$el = $(element),\n            $toolbar = $el.closest('.control-toolbar');\n\n        $.oc.foundation.controlUtils.markDisposable(element);\n        this.$toolbar = $toolbar;\n\n        this.options = options || {};\n\n        var noDragSupport = options.noDragSupport !== undefined && options.noDragSupport;\n\n        Base.call(this);\n\n        var scrollClassContainer = options.scrollClassContainer !== undefined\n            ? options.scrollClassContainer\n            : $el.parent();\n\n        if (this.options.useNativeDrag) {\n            $el.addClass('is-native-drag');\n        }\n\n        $el.dragScroll({\n            scrollClassContainer: scrollClassContainer,\n            useDrag: !noDragSupport,\n            useNative: this.options.useNativeDrag,\n            vertical: this.options.vertical,\n            noOverScroll: this.options.vertical\n        });\n\n        $('.form-control.is-growable', $toolbar).on('focus.toolbar', function(){\n            update();\n        });\n\n        $('.form-control.is-growable', $toolbar).on('blur.toolbar', function(){\n            update();\n        });\n\n        this.$el.one('dispose-control', this.proxy(this.dispose));\n\n        function update() {\n            $(window).trigger('resize');\n        }\n    }\n\n    Toolbar.prototype = Object.create(BaseProto)\n    Toolbar.prototype.constructor = Toolbar\n\n    Toolbar.prototype.dispose = function() {\n        this.$el.off('dispose-control', this.proxy(this.dispose))\n        $('.form-control.is-growable', this.$toolbar).off('.toolbar')\n        this.$el.dragScroll('dispose')\n        this.$el.removeData('oc.toolbar')\n        this.$el = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    Toolbar.DEFAULTS = {\n        useNativeDrag: false,\n        vertical: false\n    }\n\n    // TOOLBAR PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.toolbar\n\n    $.fn.toolbar = function (option) {\n        var args = Array.prototype.slice.call(arguments, 1)\n\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.toolbar')\n            var options = $.extend({}, Toolbar.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data) $this.data('oc.toolbar', (data = new Toolbar(this, options)))\n            if (typeof option == 'string') data[option].apply(data, args)\n        })\n      }\n\n    $.fn.toolbar.Constructor = Toolbar\n\n    // TOOLBAR NO CONFLICT\n    // =================\n\n    $.fn.toolbar.noConflict = function () {\n        $.fn.toolbar = old\n        return this\n    }\n\n    // TOOLBAR DATA-API\n    // ===============\n\n    $(document).on('render', function(){\n        $('[data-control~=toolbar]').toolbar()\n    })\n\n}(window.jQuery);\n\n;\n/*\n * Implement the tooltip control automatically\n *\n * Usage:\n *\n *   <a\n *       href=\"javascript:;\"\n *       data-toggle=\"tooltip\"\n *       data-placement=\"left\"\n *       title=\"Tooltip content\">\n *       Some link\n *   </a>\n *\n * Require:\n *  - bootstrap/tooltip\n */\n\n(function($){\n\n    $(document).render(function() {\n        $('[data-control=\"tooltip\"], [data-bs-toggle=\"tooltip\"], [data-toggle=\"tooltip\"]').tooltip();\n    });\n\n    addEventListener('ajax:before-update', function(event) {\n        $('.tooltip.show').remove();\n    });\n\n})(jQuery);\n\n;\n/*\n * Checkbox control\n */\n\n(function($) {\n\n    //\n    // Intermediate checkboxes\n    //\n\n    $(document).render(function() {\n        $('.form-check.is-indeterminate > input').each(function() {\n            var $el = $(this),\n                checked = $el.data('checked');\n\n            switch (checked) {\n\n                // Unchecked\n                case 1:\n                    $el.prop('indeterminate', true);\n                    break;\n\n                // Checked\n                case 2:\n                    $el.prop('indeterminate', false);\n                    $el.prop('checked', true);\n                    break;\n\n                // Unchecked\n                default:\n                    $el.prop('indeterminate', false);\n                    $el.prop('checked', false);\n            }\n        })\n    })\n\n    $(document).on('click', '.form-check.is-indeterminate > input', function() {\n        var $el = $(this),\n            checked = $el.data('checked');\n\n        if (checked === undefined) {\n            checked = $el.is(':checked') ? 1 : 0;\n        }\n\n        switch (checked) {\n\n            // Unchecked, going indeterminate\n            case 0:\n                $el.data('checked', 1);\n                $el.prop('indeterminate', true);\n                break;\n\n            // Indeterminate, going checked\n            case 1:\n                $el.data('checked', 2);\n                $el.prop('indeterminate', false);\n                $el.prop('checked', true);\n                break;\n\n            // Checked, going unchecked\n            default:\n                $el.data('checked', 0);\n                $el.prop('indeterminate', false);\n                $el.prop('checked', false);\n        }\n    });\n\n    //\n    // Checkbox Ranges\n    //\n\n    oc.checkboxRangeDetail = {\n        lastCheckbox: null,\n        isLastChecked: true\n    };\n\n    oc.checkboxRangeRegisterClick = function(ev, containerSelector, checkboxSelector) {\n        var el = ev.target,\n            detail = oc.checkboxRangeDetail;\n\n        var selectCheckboxesIn = function(rows, isChecked) {\n            rows.forEach(function(row) {\n                row.querySelectorAll(checkboxSelector).forEach(function(el) {\n                    el.checked = isChecked;\n                    $(el).trigger('change'); // @todo needs triggerNativeChange?\n                });\n            });\n        }\n\n        var selectCheckboxRange = function($el, $prevEl) {\n            var $item = $el.closest(containerSelector),\n                $prevItem = $prevEl.closest(containerSelector),\n                toSelect = [];\n\n            var $nextRow = $item;\n            while ($nextRow) {\n                if ($nextRow === $prevItem) {\n                    selectCheckboxesIn(toSelect, detail.isLastChecked);\n                    return;\n                }\n\n                toSelect.push($nextRow);\n                $nextRow = $nextRow.nextElementSibling;\n            }\n\n            toSelect = [];\n            var $prevRow = $item;\n            while ($prevRow) {\n                if ($prevRow === $prevItem) {\n                    selectCheckboxesIn(toSelect, detail.isLastChecked);\n                    return;\n                }\n\n                toSelect.push($prevRow);\n                $prevRow = $prevRow.previousElementSibling;\n            }\n        }\n\n        if (detail.lastCheckbox && ev.shiftKey) {\n            selectCheckboxRange(el, detail.lastCheckbox);\n        }\n        else {\n            detail.lastCheckbox = el;\n            detail.isLastChecked = el.checked;\n        }\n    }\n\n})(jQuery);\n\n;\n/*\n * Inspector Surface class.\n *\n * The class creates Inspector user interface and all the editors\n * corresponding to the passed configuration in a specified container\n * element.\n *\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    /**\n     * Creates the Inspector surface in a container.\n     * - containerElement container DOM element\n     * - properties array (array of objects)\n     * - values - property values, an object\n     * - inspectorUniqueId - a string containing the unique inspector identifier.\n     *   The identifier should be a constant for an inspectable element. Use\n     *   $.oc.inspector.helpers.generateElementUniqueId(element) to generate a persistent ID\n     *   for an element. Use $.oc.inspector.helpers.generateUniqueId() to generate an ID\n     *   not associated with an element. Inspector uses the ID for storing configuration\n     *   related to an element in the document DOM.\n     */\n    var Surface = function(containerElement, properties, values, inspectorUniqueId, options, parentSurface, group, propertyName) {\n        if (inspectorUniqueId === undefined) {\n            throw new Error('Inspector surface unique ID should be defined.')\n        }\n\n        this.options = $.extend({}, Surface.DEFAULTS, typeof options == 'object' && options)\n        this.rawProperties = properties\n        this.parsedProperties = $.oc.inspector.engine.processPropertyGroups(properties)\n        this.container = containerElement\n        this.inspectorUniqueId = inspectorUniqueId\n        this.values = values !== null ? values : {}\n        this.originalValues = $.extend(true, {}, this.values) // Clone the values hash\n        this.idCounter = 1\n        this.popupCounter = 0\n        this.parentSurface = parentSurface\n        this.propertyName = propertyName\n\n        this.editors = []\n        this.externalParameterEditors = []\n        this.tableContainer = null\n        this.groupManager = null\n        this.group = null\n\n        if (group !== undefined) {\n            this.group = group\n        }\n\n        if (!this.parentSurface) {\n            this.groupManager = new $.oc.inspector.groupManager(this.inspectorUniqueId)\n        }\n\n        Base.call(this)\n\n        this.init()\n    }\n\n    Surface.prototype = Object.create(BaseProto)\n    Surface.prototype.constructor = Surface\n\n    Surface.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.disposeControls()\n        this.disposeEditors()\n        this.removeElements()\n        this.disposeExternalParameterEditors()\n\n        this.container = null\n        this.tableContainer = null\n        this.rawProperties = null\n        this.parsedProperties = null\n        this.editors = null\n        this.externalParameterEditors = null\n        this.values = null\n        this.originalValues = null\n        this.options.onChange = null\n        this.options.onPopupDisplayed = null\n        this.options.onPopupHidden = null\n        this.options.onGetInspectableElement = null\n        this.parentSurface = null\n        this.groupManager = null\n        this.group = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    // INTERNAL METHODS\n    // ============================\n\n    Surface.prototype.init = function() {\n        if (this.groupManager && !this.group) {\n            this.group = this.groupManager.createGroup('root')\n        }\n\n        this.build()\n\n        if (!this.parentSurface) {\n            $.oc.foundation.controlUtils.markDisposable(this.tableContainer)\n        }\n\n        this.registerHandlers()\n    }\n\n    Surface.prototype.registerHandlers = function() {\n        if (!this.parentSurface) {\n            $(this.tableContainer).one('dispose-control', this.proxy(this.dispose))\n            $(this.tableContainer).on('click', 'tr.group, tr.control-group', this.proxy(this.onGroupClick))\n            $(this.tableContainer).on('focus-control', this.proxy(this.focusFirstEditor))\n        }\n    }\n\n    Surface.prototype.unregisterHandlers = function() {\n        if (!this.parentSurface) {\n            $(this.tableContainer).off('dispose-control', this.proxy(this.dispose))\n            $(this.tableContainer).off('click', 'tr.group, tr.control-group', this.proxy(this.onGroupClick))\n            $(this.tableContainer).off('focus-control', this.proxy(this.focusFirstEditor))\n        }\n    }\n\n    Surface.prototype.getEventHandler = function(handler) {\n        return $.oc.inspector.helpers.getEventHandler(this.getInspectableElement(), handler);\n    }\n\n    //\n    // Building\n    //\n\n    /**\n     * Builds the Inspector table. The markup generated by this method looks\n     * like this:\n     *\n     * <div>\n     *     <table>\n     *         <tbody>\n     *             <tr>\n     *                 <th data-property=\"label\">\n     *                     <div>\n     *                         <div>\n     *                             <span class=\"title-element\" title=\"Label\">\n     *                                 <a href=\"javascript:;\" class=\"expandControl expanded\" data-group-index=\"1\">Expand/Collapse</a>\n     *                                 Label\n     *                             </span>\n     *                         </div>\n     *                     </div>\n     *                 </th>\n     *                 <td>\n     *                     Editor markup\n     *                 </td>\n     *             </tr>\n     *         </tbody>\n     *     </table>\n     * </div>\n     */\n    Surface.prototype.build = function() {\n        this.tableContainer = document.createElement('div')\n\n        var dataTable = document.createElement('table'),\n            tbody = document.createElement('tbody')\n\n        $.oc.foundation.element.addClass(dataTable, 'inspector-fields')\n        if (this.parsedProperties.hasGroups) {\n            $.oc.foundation.element.addClass(dataTable, 'has-groups')\n        }\n\n        var currentGroup = this.group\n\n        for (var i=0, len = this.parsedProperties.properties.length; i < len; i++) {\n            var property = this.parsedProperties.properties[i]\n\n            if (property.itemType == 'group') {\n                currentGroup = this.getGroupManager().createGroup(property.groupIndex, this.group)\n            }\n            else {\n                if (property.groupIndex === undefined) {\n                    currentGroup = this.group\n                }\n            }\n\n            var row = this.buildRow(property, currentGroup)\n\n            if (property.itemType == 'group') {\n                this.applyGroupLevelToRow(row, currentGroup.parentGroup)\n            }\n            else {\n                this.applyGroupLevelToRow(row, currentGroup)\n            }\n\n            tbody.appendChild(row)\n\n            // Editor\n            //\n            this.buildEditor(row, property, dataTable, currentGroup)\n        }\n\n        dataTable.appendChild(tbody)\n        this.tableContainer.appendChild(dataTable)\n\n        this.container.appendChild(this.tableContainer)\n\n        if (this.options.enableExternalParameterEditor) {\n            this.buildExternalParameterEditor(tbody)\n        }\n\n        if (!this.parentSurface) {\n            this.focusFirstEditor()\n        }\n    }\n\n    Surface.prototype.moveToContainer = function(newContainer) {\n        this.container = newContainer\n\n        this.container.appendChild(this.tableContainer)\n    }\n\n    Surface.prototype.buildRow = function(property, group) {\n        var row = document.createElement('tr'),\n            th = document.createElement('th'),\n            titleSpan = document.createElement('span'),\n            description = this.buildPropertyDescription(property)\n\n        // Table row\n        //\n        if (property.property) {\n            row.setAttribute('data-property', property.property)\n            row.setAttribute('data-property-path', this.getPropertyPath(property.property))\n        }\n\n        this.applyGroupIndexAttribute(property, row, group)\n        $.oc.foundation.element.addClass(row, this.getRowCssClass(property, group))\n\n        // Property head\n        //\n        this.applyHeadColspan(th, property)\n\n        titleSpan.setAttribute('class', 'title-element')\n        titleSpan.setAttribute('title', this.escapeJavascriptString(property.title))\n        this.buildGroupExpandControl(titleSpan, property, false, false, group)\n\n        titleSpan.innerHTML += this.escapeJavascriptString(property.title)\n\n        var outerDiv = document.createElement('div'),\n            innerDiv = document.createElement('div')\n\n        innerDiv.appendChild(titleSpan)\n\n        if (description) {\n            innerDiv.appendChild(description)\n        }\n\n        outerDiv.appendChild(innerDiv)\n        th.appendChild(outerDiv)\n        row.appendChild(th)\n\n        return row\n    }\n\n    Surface.prototype.focusFirstEditor = function() {\n        if (this.editors.length == 0) {\n            return\n        }\n\n        var groupManager = this.getGroupManager();\n\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i],\n                group = editor.parentGroup;\n\n            if (group && !this.groupManager.isGroupExpanded(group) ) {\n                continue;\n            }\n\n            var externalParameterEditor = this.findExternalParameterEditor(editor.getPropertyName())\n\n            if (externalParameterEditor && externalParameterEditor.isEditorVisible()) {\n                externalParameterEditor.focus();\n                return;\n            }\n\n            editor.focus();\n            return;\n        }\n    }\n\n    Surface.prototype.getRowCssClass = function(property, group) {\n        var result = property.itemType\n\n        if (property.itemType == 'property') {\n            // result += ' grouped'\n            if (group.parentGroup) {\n                result += this.getGroupManager().isGroupExpanded(group) ? ' expanded' : ' collapsed'\n            }\n        }\n\n        if (property.itemType == 'property' && !property.showExternalParam) {\n            result += ' no-external-parameter'\n        }\n\n        return result\n    }\n\n    Surface.prototype.applyHeadColspan = function(th, property) {\n        if (property.itemType == 'group') {\n            th.setAttribute('colspan',  2)\n        }\n    }\n\n    Surface.prototype.buildGroupExpandControl = function(titleSpan, property, force, hasChildSurface, group) {\n        if (property.itemType !== 'group' && !force) {\n            return\n        }\n\n        var groupIndex = this.getGroupManager().getGroupIndex(group),\n            statusClass = this.getGroupManager().isGroupExpanded(group) ? 'expanded' : '',\n            anchor = document.createElement('a')\n\n        anchor.setAttribute('class', 'expandControl ' + statusClass)\n        anchor.setAttribute('href', 'javascript:;')\n        anchor.innerHTML = '<span>Expand/collapse</span>'\n\n        titleSpan.appendChild(anchor)\n    }\n\n    Surface.prototype.buildPropertyDescription = function(property) {\n        if (property.description === undefined || property.description === null) {\n            return null;\n        }\n\n        var span = document.createElement('span');\n        span.setAttribute('data-tooltip-text', this.escapeJavascriptString(property.description));\n        span.setAttribute('class', 'info icon-info-circle-1 with-tooltip');\n\n        return span;\n    }\n\n    Surface.prototype.buildExternalParameterEditor = function(tbody) {\n        var rows = tbody.children\n\n        for (var i = 0, len = rows.length; i < len; i++) {\n            var row = rows[i],\n                property = row.getAttribute('data-property')\n\n            if ($.oc.foundation.element.hasClass(row, 'no-external-parameter') || !property) {\n                continue\n            }\n\n            var propertyEditor = this.findPropertyEditor(property)\n            if (propertyEditor && !propertyEditor.supportsExternalParameterEditor()) {\n                continue\n            }\n\n            var cell = row.querySelector('td'),\n                propertyDefinition = this.findPropertyDefinition(property),\n                initialValue = this.getPropertyValue(property)\n\n            if (initialValue === undefined) {\n                initialValue = propertyEditor.getUndefinedValue()\n            }\n\n            var editor = new $.oc.inspector.externalParameterEditor(this, propertyDefinition, cell, initialValue)\n\n            this.externalParameterEditors.push(editor)\n        }\n    }\n\n    //\n    // Field grouping\n    //\n\n    Surface.prototype.applyGroupIndexAttribute = function(property, row, group, isGroupedControl) {\n        if (property.itemType == 'group' || isGroupedControl) {\n            row.setAttribute('data-group-index', this.getGroupManager().getGroupIndex(group))\n            row.setAttribute('data-parent-group-index', this.getGroupManager().getGroupIndex(group.parentGroup))\n        }\n        else {\n            if (group.parentGroup) {\n                row.setAttribute('data-parent-group-index', this.getGroupManager().getGroupIndex(group))\n            }\n        }\n    }\n\n    Surface.prototype.applyGroupLevelToRow = function(row, group) {\n        if (row.hasAttribute('data-group-level')) {\n            return;\n        }\n\n        var th = this.getRowHeadElement(row);\n\n        if (th === null) {\n            throw new Error('Cannot find TH element for the Inspector row');\n        }\n\n        var groupLevel = group.getLevel();\n\n        row.setAttribute('data-group-level', groupLevel)\n        th.children[0].style.marginLeft = groupLevel*10 + 'px'\n    }\n\n    Surface.prototype.toggleGroup = function(row, forceExpand) {\n        var link = row.querySelector('a'),\n            groupIndex = row.getAttribute('data-group-index'),\n            table = this.getRootTable(),\n            groupManager = this.getGroupManager(),\n            collapse = true\n\n        if ($.oc.foundation.element.hasClass(link, 'expanded') && !forceExpand) {\n            $.oc.foundation.element.removeClass(link, 'expanded')\n        }\n        else {\n            $.oc.foundation.element.addClass(link, 'expanded')\n            collapse = false\n        }\n\n        var propertyRows = groupManager.findGroupRows(table, groupIndex, !collapse),\n            duration = Math.round(50 / propertyRows.length)\n\n        this.expandOrCollapseRows(propertyRows, collapse, duration, forceExpand)\n        groupManager.setGroupStatus(groupIndex, !collapse)\n    }\n\n    Surface.prototype.expandGroupParents = function(group) {\n        var groups = group.getGroupAndAllParents(),\n            table = this.getRootTable()\n\n        for (var i = groups.length-1; i >= 0; i--) {\n            var row = groups[i].findGroupRow(table)\n\n            if (row) {\n                this.toggleGroup(row, true)\n            }\n        }\n    }\n\n    Surface.prototype.expandOrCollapseRows = function(rows, collapse, duration, noAnimation) {\n        var row = rows.pop(),\n            self = this\n\n        if (row) {\n            if (!noAnimation) {\n                setTimeout(function toggleRow() {\n                    $.oc.foundation.element.toggleClass(row, 'collapsed', collapse)\n                    $.oc.foundation.element.toggleClass(row, 'expanded', !collapse)\n\n                    self.expandOrCollapseRows(rows, collapse, duration, noAnimation)\n                }, duration)\n            }\n            else {\n                $.oc.foundation.element.toggleClass(row, 'collapsed', collapse)\n                $.oc.foundation.element.toggleClass(row, 'expanded', !collapse)\n\n                self.expandOrCollapseRows(rows, collapse, duration, noAnimation)\n            }\n        }\n    }\n\n    Surface.prototype.getGroupManager = function() {\n        return this.getRootSurface().groupManager\n    }\n\n    //\n    // Editors\n    //\n\n    Surface.prototype.buildEditor = function(row, property, dataTable, group) {\n        if (property.itemType !== 'property') {\n            return\n        }\n\n        this.validateEditorType(property.type)\n\n        var cell = document.createElement('td'),\n            type = property.type\n\n        row.appendChild(cell)\n\n        if (type === undefined) {\n            type = 'string'\n        }\n\n        var editor = new $.oc.inspector.propertyEditors[type](this, property, cell, group)\n\n        if (editor.isGroupedEditor()) {\n            $.oc.foundation.element.addClass(dataTable, 'has-groups')\n            $.oc.foundation.element.addClass(row, 'control-group')\n\n            this.applyGroupIndexAttribute(property, row, editor.group, true)\n            this.buildGroupExpandControl(row.querySelector('span.title-element'), property, true, editor.hasChildSurface(), editor.group)\n\n            if (cell.children.length == 0) {\n                // If the editor hasn't added any elements to the cell,\n                // and it's a grouped control, remove the cell and\n                // make the group title full-width.\n                row.querySelector('th').setAttribute('colspan', 2)\n                row.removeChild(cell)\n            }\n        }\n\n        this.editors.push(editor)\n    }\n\n    Surface.prototype.generateSequencedId = function() {\n        this.idCounter ++\n\n        return this.inspectorUniqueId + '-' + this.idCounter\n    }\n\n    //\n    // Internal API for the editors\n    //\n\n    Surface.prototype.getPropertyValue = function(property) {\n        return this.values[property]\n    }\n\n    Surface.prototype.setPropertyValue = function(property, value, supressChangeEvents, forceEditorUpdate) {\n        if (value !== undefined) {\n            this.values[property] = value\n        }\n        else {\n            if (this.values[property] !== undefined) {\n                delete this.values[property]\n            }\n        }\n\n        if (!supressChangeEvents) {\n            if (this.originalValues[property] === undefined || !this.comparePropertyValues(this.originalValues[property], value)) {\n                this.markPropertyChanged(property, true)\n            }\n            else {\n                this.markPropertyChanged(property, false)\n            }\n\n            var propertyPath = this.getPropertyPath(property)\n            this.getRootSurface().notifyEditorsPropertyChanged(propertyPath, value)\n\n            if (this.options.onChange !== null) {\n                this.options.onChange(property, value)\n            }\n        }\n\n        if (forceEditorUpdate) {\n            var editor = this.findPropertyEditor(property)\n            if (editor) {\n                editor.updateDisplayedValue(value)\n            }\n        }\n\n        return value\n    }\n\n    Surface.prototype.notifyEditorsPropertyChanged = function(propertyPath, value) {\n        // Editors use this event to watch changes in properties\n        // they depend on. All editors should be notified, including\n        // editors in nested surfaces. The property name is passed as a\n        // path object.property (if the property is nested), so that\n        // property depenencies could be defined as\n        // ['property', 'object.property']\n\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i]\n\n            editor.onInspectorPropertyChanged(propertyPath, value)\n            editor.notifyChildSurfacesPropertyChanged(propertyPath, value)\n        }\n    }\n\n    Surface.prototype.makeCellActive = function(cell) {\n        var tbody = cell.parentNode.parentNode.parentNode, // cell / row / tbody\n            cells = tbody.querySelectorAll('tr td')\n\n        for (var i = 0, len = cells.length; i < len; i++) {\n            $.oc.foundation.element.removeClass(cells[i], 'active')\n        }\n\n        $.oc.foundation.element.addClass(cell, 'active')\n    }\n\n    Surface.prototype.markPropertyChanged = function(property, changed) {\n        var propertyPath = this.getPropertyPath(property),\n            row = this.tableContainer.querySelector('tr[data-property-path=\"'+propertyPath+'\"]')\n\n        if (changed) {\n            $.oc.foundation.element.addClass(row, 'changed')\n        }\n        else {\n            $.oc.foundation.element.removeClass(row, 'changed')\n        }\n    }\n\n    Surface.prototype.findPropertyEditor = function(property) {\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            if (this.editors[i].getPropertyName() == property) {\n                return this.editors[i]\n            }\n        }\n\n        return null\n    }\n\n    Surface.prototype.findExternalParameterEditor = function(property) {\n        for (var i = 0, len = this.externalParameterEditors.length; i < len; i++) {\n            if (this.externalParameterEditors[i].getPropertyName() == property) {\n                return this.externalParameterEditors[i]\n            }\n        }\n\n        return null\n    }\n\n    Surface.prototype.findPropertyDefinition = function(property) {\n        for (var i=0, len = this.parsedProperties.properties.length; i < len; i++) {\n            var definition = this.parsedProperties.properties[i]\n\n            if (definition.property == property) {\n                return definition\n            }\n        }\n\n        return null\n    }\n\n    Surface.prototype.validateEditorType = function(type) {\n        if (type === undefined) {\n            type = 'string'\n        }\n\n        if ($.oc.inspector.propertyEditors[type] === undefined) {\n            throw new Error('The Inspector editor class \"' + type +\n                '\" is not defined in the $.oc.inspector.propertyEditors namespace.')\n        }\n    }\n\n    Surface.prototype.popupDisplayed = function() {\n        if (this.popupCounter === 0 && this.options.onPopupDisplayed !== null) {\n            this.options.onPopupDisplayed()\n        }\n\n        this.popupCounter++\n    }\n\n    Surface.prototype.popupHidden = function() {\n        this.popupCounter--\n\n        if (this.popupCounter < 0) {\n            this.popupCounter = 0\n        }\n\n        if (this.popupCounter === 0 && this.options.onPopupHidden !== null) {\n            this.options.onPopupHidden()\n        }\n    }\n\n    Surface.prototype.getInspectableElement = function() {\n        if (this.options.onGetInspectableElement !== null) {\n            return this.options.onGetInspectableElement()\n        }\n    }\n\n    Surface.prototype.getPropertyPath = function(propertyName) {\n        var result = [],\n            current = this\n\n        result.push(propertyName)\n\n        while (current) {\n            if (current.propertyName) {\n                result.push(current.propertyName)\n            }\n\n            current = current.parentSurface\n        }\n\n        result.reverse()\n\n        return result.join('.')\n    }\n\n    Surface.prototype.findDependentProperties = function(propertyName) {\n        var dependents = []\n\n        for (var i in this.rawProperties) {\n            var property = this.rawProperties[i]\n\n            if (!property.depends) {\n                continue\n            }\n\n            if (property.depends.indexOf(propertyName) !== -1) {\n                dependents.push(property.property)\n            }\n        }\n\n        return dependents\n    }\n\n    //\n    // Nested surfaces support\n    //\n\n    Surface.prototype.mergeChildSurface = function(surface, mergeAfterRow) {\n        var rows = surface.tableContainer.querySelectorAll('table.inspector-fields > tbody > tr')\n\n        surface.tableContainer = this.getRootSurface().tableContainer\n\n        for (var i = rows.length-1; i >= 0; i--) {\n            var row = rows[i]\n\n            mergeAfterRow.parentNode.insertBefore(row, mergeAfterRow.nextSibling)\n            this.applyGroupLevelToRow(row, surface.group)\n        }\n    }\n\n    Surface.prototype.getRowHeadElement = function(row) {\n        for (var i = row.children.length-1; i >= 0; i--) {\n            var element = row.children[i]\n\n            if (element.tagName === 'TH') {\n                return element\n            }\n        }\n\n        return null\n    }\n\n    Surface.prototype.getInspectorUniqueId = function() {\n        return this.inspectorUniqueId\n    }\n\n    Surface.prototype.getRootSurface = function() {\n        var current = this\n\n        while (current) {\n            if (!current.parentSurface) {\n                return current\n            }\n\n            current = current.parentSurface\n        }\n    }\n\n    //\n    // Disposing\n    //\n\n    Surface.prototype.removeElements = function() {\n        if (!this.parentSurface) {\n            this.tableContainer.parentNode.removeChild(this.tableContainer);\n        }\n    }\n\n    Surface.prototype.disposeEditors = function() {\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i]\n\n            editor.dispose()\n        }\n    }\n\n    Surface.prototype.disposeExternalParameterEditors = function() {\n        for (var i = 0, len = this.externalParameterEditors.length; i < len; i++) {\n            var editor = this.externalParameterEditors[i]\n\n            editor.dispose()\n        }\n    }\n\n    Surface.prototype.disposeControls = function() {\n        var tooltipControls = this.tableContainer.querySelectorAll('.with-tooltip')\n\n        for (var i = 0, len = tooltipControls.length; i < len; i++) {\n            $(tooltipControls[i]).tooltip('dispose');\n        }\n    }\n\n    //\n    // Helpers\n    //\n\n    Surface.prototype.escapeJavascriptString = function(str) {\n        var div = document.createElement('div')\n        div.appendChild(document.createTextNode(str))\n        return div.innerHTML\n    }\n\n    Surface.prototype.comparePropertyValues = function(oldValue, newValue) {\n        if (oldValue === undefined && newValue !== undefined) {\n            return false\n        }\n\n        if (oldValue !== undefined && newValue === undefined) {\n            return false\n        }\n\n        if (typeof oldValue == 'object' && typeof newValue == 'object') {\n            return JSON.stringify(oldValue) == JSON.stringify(newValue)\n        }\n\n        return oldValue == newValue\n    }\n\n    Surface.prototype.getRootTable = function() {\n        return this.getRootSurface().container.querySelector('table.inspector-fields')\n    }\n\n    //\n    // External API\n    //\n\n    Surface.prototype.getValues = function() {\n        var result = {}\n\n        for (var i=0, len = this.parsedProperties.properties.length; i < len; i++) {\n            var property = this.parsedProperties.properties[i]\n\n            if (property.itemType !== 'property') {\n                continue\n            }\n\n            var value = null,\n                externalParameterEditor = this.findExternalParameterEditor(property.property)\n\n            if (!externalParameterEditor || !externalParameterEditor.isEditorVisible()) {\n                value = this.getPropertyValue(property.property)\n\n                var editor = this.findPropertyEditor(property.property)\n\n                if (value === undefined) {\n                    if (editor) {\n                        value = editor.getUndefinedValue()\n                    }\n                    else {\n                        value = property.default\n                    }\n                }\n\n                if (value === $.oc.inspector.removedProperty) {\n                    continue\n                }\n\n                if (property.ignoreIfEmpty !== undefined && (property.ignoreIfEmpty === true || property.ignoreIfEmpty === \"true\") && editor) {\n                    if (editor.isEmptyValue(value)) {\n                        continue\n                    }\n                }\n\n                if (property.ignoreIfDefault !== undefined && (property.ignoreIfDefault === true || property.ignoreIfDefault === \"true\") && editor) {\n                    if (property.default === undefined) {\n                        throw new Error('The ignoreIfDefault feature cannot be used without the default property value.')\n                    }\n\n                    if (this.comparePropertyValues(value, property.default)) {\n                        continue\n                    }\n                }\n            }\n            else {\n                value = externalParameterEditor.getValue()\n                value = '{{ ' + value + ' }}'\n            }\n\n            result[property.property] = value\n        }\n\n        return result\n    }\n\n    Surface.prototype.getValidValues = function() {\n        var allValues = this.getValues(),\n            result = {}\n\n        for (var property in allValues) {\n            var editor = this.findPropertyEditor(property)\n\n            if (!editor) {\n                throw new Error('Cannot find editor for property ' + property)\n            }\n\n            var externalEditor = this.findExternalParameterEditor(property)\n            if (externalEditor && externalEditor.isEditorVisible() && !externalEditor.validate(true)) {\n                result[property] = $.oc.inspector.invalidProperty\n                continue\n            }\n\n            if (!editor.validate(true)) {\n                result[property] = $.oc.inspector.invalidProperty\n                continue\n            }\n\n            result[property] = allValues[property]\n        }\n\n        return result\n    }\n\n    Surface.prototype.validate = function(silentMode) {\n        this.getGroupManager().unmarkInvalidGroups(this.getRootTable())\n\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i],\n                externalEditor = this.findExternalParameterEditor(editor.propertyDefinition.property)\n\n            if (externalEditor && externalEditor.isEditorVisible()) {\n                if (!externalEditor.validate(silentMode)) {\n                    if (!silentMode) {\n                        editor.markInvalid()\n                    }\n                    return false\n                }\n                else {\n                    continue\n                }\n            }\n\n            if (!editor.validate(silentMode)) {\n                if (!silentMode) {\n                    editor.markInvalid()\n                }\n                return false\n            }\n        }\n\n        return true\n    }\n\n    Surface.prototype.hasChanges = function(originalValues) {\n        var values = originalValues !== undefined ? originalValues : this.originalValues\n\n        return !this.comparePropertyValues(values, this.getValues())\n    }\n\n    // EVENT HANDLERS\n    //\n\n    Surface.prototype.onGroupClick = function(ev) {\n        var row = ev.currentTarget\n\n        this.toggleGroup(row)\n\n        $.oc.foundation.event.stop(ev)\n        return false\n    }\n\n    // DEFAULT OPTIONS\n    // ============================\n\n    Surface.DEFAULTS = {\n        enableExternalParameterEditor: false,\n        onChange: null,\n        onPopupDisplayed: null,\n        onPopupHidden: null,\n        onGetInspectableElement: null\n    }\n\n    // REGISTRATION\n    // ============================\n\n    $.oc.inspector.surface = Surface\n    $.oc.inspector.removedProperty = {removed: true}\n    $.oc.inspector.invalidProperty = {invalid: true}\n}(window.jQuery);\n\n;\n/*\n * Inspector management functions.\n *\n * Watches inspectable elements clicks and creates Inspector surfaces in popups\n * and containers.\n */\n+function ($) { \"use strict\";\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var InspectorManager = function() {\n        Base.call(this);\n\n        this.init();\n    }\n\n    InspectorManager.prototype = Object.create(BaseProto);\n    InspectorManager.prototype.constructor = Base;\n\n    InspectorManager.prototype.init = function() {\n        $(document).on('click', '[data-inspectable]', this.proxy(this.onInspectableClicked));\n    }\n\n    InspectorManager.prototype.getContainerElement = function($element) {\n        var $containerHolder = $element.closest('[data-inspector-container]');\n        if ($containerHolder.length === 0) {\n            return null;\n        }\n\n        var $container = $containerHolder.find($containerHolder.data('inspector-container'));\n        if ($container.length === 0) {\n            throw new Error('Inspector container ' + $containerHolder.data['inspector-container'] + ' element is not found.');\n        }\n\n        return $container;\n    }\n\n    InspectorManager.prototype.loadElementOptions = function($element) {\n        var options = {};\n\n        // Only specific options are allowed, don't load all options with data()\n        if ($element.data('inspector-css-class')) {\n            options.inspectorCssClass = $element.data('inspector-css-class');\n        }\n\n        return options;\n    }\n\n    InspectorManager.prototype.createInspectorPopup = function($element, containerSupported) {\n        var options = $.extend(this.loadElementOptions($element), {\n                containerSupported: containerSupported\n            });\n\n        new $.oc.inspector.wrappers.popup($element, null, options);\n    }\n\n    InspectorManager.prototype.createInspectorContainer = function($element, $container) {\n        var options = $.extend(this.loadElementOptions($element), {\n                containerSupported: true,\n                container: $container\n            });\n\n        new $.oc.inspector.wrappers.container($element, null, options);\n    }\n\n    InspectorManager.prototype.switchToPopup = function(wrapper) {\n        var options = $.extend(this.loadElementOptions(wrapper.$element), {\n                containerSupported: true\n            })\n\n        new $.oc.inspector.wrappers.popup(wrapper.$element, wrapper, options)\n\n        wrapper.cleanupAfterSwitch();\n        this.setContainerPreference(false);\n    }\n\n    InspectorManager.prototype.switchToContainer = function(wrapper) {\n        var $container = this.getContainerElement(wrapper.$element),\n            options = $.extend(this.loadElementOptions(wrapper.$element), {\n                containerSupported: true,\n                container: $container\n            });\n\n        if (!$container) {\n            throw new Error('Cannot switch to container: a container element is not found');\n        }\n\n        new $.oc.inspector.wrappers.container(wrapper.$element, wrapper, options);\n\n        wrapper.cleanupAfterSwitch();\n        this.setContainerPreference(true);\n    }\n\n    InspectorManager.prototype.createInspector = function(element) {\n        var $element = $(element);\n\n        if ($element.data('oc.inspectorVisible')) {\n            return false;\n        }\n\n        var $container = this.getContainerElement($element);\n\n        // If there's no container option, create the Inspector popup\n        if (!$container) {\n            this.createInspectorPopup($element, false);\n        }\n        else {\n            // If the container is already in use, apply values to the inspectable elements\n            if (!this.applyValuesFromContainer($container) || !this.containerHidingAllowed($container)) {\n                return;\n            }\n\n            // Dispose existing container wrapper, if any\n            $.oc.foundation.controlUtils.disposeControls($container.get(0));\n\n            if (!this.getContainerPreference()) {\n                // If container is not a preferred option, create Inspector popup\n                this.createInspectorPopup($element, true);\n            }\n            else {\n                // Otherwise, create Inspector in the container\n                this.createInspectorContainer($element, $container);\n            }\n        }\n    }\n\n    InspectorManager.prototype.getContainerPreference = function() {\n        try {\n            return localStorage.getItem('oc.inspectorUseContainer') === \"true\";\n        } catch (e) {\n            return false;\n        }\n    }\n\n    InspectorManager.prototype.setContainerPreference = function(value) {\n        try {\n            localStorage.setItem('oc.inspectorUseContainer', value ? \"true\" : \"false\");\n        } catch (e) {\n            // localStorage not available\n        }\n    }\n\n    InspectorManager.prototype.applyValuesFromContainer = function($container) {\n        var applyEvent = $.Event('apply.oc.inspector');\n\n        $container.trigger(applyEvent);\n        return !applyEvent.isDefaultPrevented();\n    }\n\n    InspectorManager.prototype.containerHidingAllowed = function($container) {\n        var allowedEvent = $.Event('beforeContainerHide.oc.inspector');\n\n        $container.trigger(allowedEvent);\n        return !allowedEvent.isDefaultPrevented();\n    }\n\n    InspectorManager.prototype.onInspectableClicked = function(ev) {\n        var $element = $(ev.currentTarget);\n\n        if (this.createInspector($element) === false) {\n            return false;\n        }\n\n        ev.stopPropagation();\n        return false;\n    }\n\n    $.oc.inspector.manager = new InspectorManager();\n\n    $.fn.inspector = function () {\n        return this.each(function () {\n            $.oc.inspector.manager.createInspector(this);\n        })\n    }\n}(window.jQuery);\n\n;\n/*\n * Inspector wrapper base class.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    if ($.oc.inspector.wrappers === undefined)\n        $.oc.inspector.wrappers = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var BaseWrapper = function($element, sourceWrapper, options) {\n        this.$element = $element\n\n        this.options = $.extend({}, BaseWrapper.DEFAULTS, typeof options == 'object' && options)\n        this.switched = false\n        this.configuration = null\n\n        Base.call(this)\n\n        if (!sourceWrapper) {\n            if (!this.triggerShowingAndInit()) {\n                // this.init() is called inside triggerShowing()\n\n                return\n            }\n\n            this.surface = null\n            this.title = null\n            this.description = null\n        }\n        else {\n            this.surface = sourceWrapper.surface\n            this.title = sourceWrapper.title\n            this.description = sourceWrapper.description\n\n            sourceWrapper = null\n\n            this.init()\n        }\n    }\n\n    BaseWrapper.prototype = Object.create(BaseProto)\n    BaseWrapper.prototype.constructor = Base\n\n    BaseWrapper.prototype.dispose = function() {\n        if (!this.switched) {\n            this.$element.removeClass('inspector-open');\n            this.setInspectorVisibleFlag(false);\n\n            this.$element.trigger('hidden.oc.inspector');\n        }\n\n        if (this.surface !== null && this.surface.options.onGetInspectableElement === this.proxy(this.onGetInspectableElement)) {\n            this.surface.options.onGetInspectableElement = null;\n        }\n\n        this.surface = null;\n        this.$element = null;\n        this.title = null;\n        this.description = null;\n        this.configuration = null;\n\n        BaseProto.dispose.call(this)\n    }\n\n    BaseWrapper.prototype.init = function() {\n        // Wrappers can create a new surface or inject an existing\n        // surface to the UI they manage.\n        //\n        // If there is no surface provided in the wrapper constructor,\n        // the wrapper first loads the Inspector configuration and values\n        // and then calls the createSurfaceAndUi() method with all information\n        // required for creating a new Inspector surface and UI.\n\n        if (!this.surface) {\n            this.loadConfiguration()\n        }\n        else {\n            this.adoptSurface()\n        }\n\n        this.$element.addClass('inspector-open')\n        this.$element.trigger('showed.oc.inspector')\n    }\n\n    //\n    // Helper methods\n    //\n\n    BaseWrapper.prototype.getElementValuesInput = function() {\n        return this.$element.find('> input[data-inspector-values]')\n    }\n\n    BaseWrapper.prototype.normalizePropertyCode = function(code, configuration) {\n        var lowerCaseCode = code.toLowerCase()\n\n        for (var index in configuration) {\n            var propertyInfo = configuration[index]\n\n            if (propertyInfo.property.toLowerCase() == lowerCaseCode) {\n                return propertyInfo.property\n            }\n        }\n\n        return code\n    }\n\n    BaseWrapper.prototype.isExternalParametersEditorEnabled = function() {\n        return this.$element.closest('[data-inspector-external-parameters]').length > 0\n    }\n\n    BaseWrapper.prototype.initSurface = function(containerElement, properties, values) {\n        var options = this.$element.data() || {}\n\n        options.enableExternalParameterEditor = this.isExternalParametersEditorEnabled()\n        options.onGetInspectableElement = this.proxy(this.onGetInspectableElement)\n\n        this.surface = new $.oc.inspector.surface(\n            containerElement,\n            properties,\n            values,\n            $.oc.inspector.helpers.generateElementUniqueId(this.$element.get(0)),\n            options)\n    }\n\n    BaseWrapper.prototype.isLiveUpdateEnabled = function() {\n        return false\n    }\n\n    //\n    // Wrapper API\n    //\n\n    BaseWrapper.prototype.createSurfaceAndUi = function(properties, values) {\n\n    }\n\n    BaseWrapper.prototype.setInspectorVisibleFlag = function(value) {\n        this.$element.data('oc.inspectorVisible', value)\n    }\n\n    BaseWrapper.prototype.adoptSurface = function() {\n        this.surface.options.onGetInspectableElement = this.proxy(this.onGetInspectableElement)\n    }\n\n    BaseWrapper.prototype.cleanupAfterSwitch = function() {\n        this.switched = true\n        this.dispose()\n    }\n\n    //\n    // Values\n    //\n\n    BaseWrapper.prototype.loadValues = function(configuration) {\n        var $valuesField = this.getElementValuesInput();\n\n        if ($valuesField.length > 0) {\n            var valuesStr = $.trim($valuesField.val());\n\n            try {\n                return valuesStr.length === 0 ? {} : JSON.parse(valuesStr);\n            }\n            catch (err) {\n                throw new Error('Error parsing Inspector field values. ' + err);\n            }\n        }\n\n        var values = {},\n            attributes = this.$element.get(0).attributes;\n\n        for (var i=0, len = attributes.length; i < len; i++) {\n            var attribute = attributes[i],\n                matches = [];\n\n            if (matches = attribute.name.match(/^data-property-(.*)$/)) {\n                // Important - values contained in data-property-xxx attributes are\n                // considered strings and only parsed with JSON when they begin with\n                // the json: protocol prefix.\n                var normalizedPropertyName = this.normalizePropertyCode(matches[1], configuration),\n                    attrVal = attribute.value;\n\n                if (attrVal.startsWith('json:')) {\n                    try {\n                        attrVal = JSON.parse(decodeURIComponent(attrVal.substring(5)));\n                    }\n                    catch (e) {\n                        attrVal = '';\n                    }\n                }\n\n                values[normalizedPropertyName] = attrVal;\n            }\n        }\n\n        return values;\n    }\n\n    BaseWrapper.prototype.applyValues = function(liveUpdateMode) {\n        var $valuesField = this.getElementValuesInput(),\n            values = liveUpdateMode\n                ? this.surface.getValidValues()\n                : this.surface.getValues();\n\n        if (liveUpdateMode) {\n            // In the live update mode, when only valid values are applied,\n            // we don't want to change all other values (invalid properties).\n            var existingValues = this.loadValues(this.configuration);\n            for (var property in values) {\n                if (values[property] !== $.oc.inspector.invalidProperty) {\n                    existingValues[property] = values[property];\n                }\n            }\n\n            // Properties that use settings like ignoreIfPropertyEmpty could\n            // be removed from the list returned by getValidValues(). Removed\n            // properties should be removed from the result list.\n            var filteredValues = {};\n\n            for (var property in existingValues) {\n                if (values.hasOwnProperty(property)) {\n                    filteredValues[property] = existingValues[property];\n                }\n            }\n\n            values = filteredValues;\n        }\n\n        if ($valuesField.length > 0) {\n            $valuesField.val(JSON.stringify(values));\n        }\n        else {\n            for (var property in values) {\n                var value = values[property];\n\n                if (Array.isArray(value) || $.isPlainObject(value)) {\n                    value = 'json:' + encodeURIComponent(JSON.stringify(value));\n                }\n\n                this.$element.attr('data-property-' + property, value);\n            }\n        }\n\n        // In the live update mode the livechange event is triggered\n        // regardless of whether Surface properties match or don't match\n        // the original properties of the inspectable element. Without it\n        // there could be undesirable side effects.\n\n        if (liveUpdateMode) {\n            this.$element.trigger('livechange');\n        }\n        else {\n            var hasChanges = false;\n\n            if (this.isLiveUpdateEnabled()) {\n                var currentValues = this.loadValues(this.configuration);\n\n                // If the Inspector setup supports the live update mode,\n                // evaluate changes as a difference between the current element\n                // properties and internal properties stored in the Surface.\n                // If there is no differences, the properties have already\n                // been applied with a preceding live update.\n                hasChanges = this.surface.hasChanges(currentValues);\n            }\n            else {\n                hasChanges = this.surface.hasChanges();\n            }\n\n            if (hasChanges) {\n                this.$element.trigger('change');\n            }\n        }\n    }\n\n    //\n    // Configuration\n    //\n\n    BaseWrapper.prototype.loadConfiguration = function() {\n        var configString = this.$element.data('inspector-config'),\n            result = {\n                properties: {},\n                title: null,\n                description: null\n            };\n\n        result.title = this.$element.data('inspector-title');\n        result.description = this.$element.data('inspector-description');\n\n        if (configString !== undefined) {\n            result.properties = this.parseConfiguration(configString);\n\n            this.configurationLoaded(result);\n            return;\n        }\n\n        var $configurationField = this.$element.find('> input[data-inspector-config]');\n\n        if ($configurationField.length > 0) {\n            result.properties = this.parseConfiguration($configurationField.val());\n            this.configurationLoaded(result);\n            return;\n        }\n\n        var $form = this.$element.closest('form'),\n            data = this.$element.data(),\n            self = this;\n\n        $.oc.stripeLoadIndicator.show();\n\n        $form.request($.oc.inspector.helpers.getEventHandler(this.$element, 'onGetInspectorConfiguration'), {\n            data: data\n        })\n        .done(function inspectorConfigurationRequestDoneClosure(data) {\n            self.onConfigurationRequestDone(data, result);\n        })\n        .fail(function inspectorConfigurationRequestErrorClosure(data) {\n            self.$element.trigger('error.oc.inspector');\n        })\n        .always(function() {\n            $.oc.stripeLoadIndicator.hide();\n        });\n    }\n\n    BaseWrapper.prototype.parseConfiguration = function(configuration) {\n        if (!Array.isArray(configuration) && !$.isPlainObject(configuration)) {\n            if ($.trim(configuration) === 0) {\n                return {};\n            }\n\n            try {\n               return JSON.parse(configuration);\n            }\n            catch(err) {\n                throw new Error('Error parsing Inspector configuration. ' + err);\n            }\n        }\n        else {\n            return configuration;\n        }\n    }\n\n    BaseWrapper.prototype.configurationLoaded = function(configuration) {\n        var values = this.loadValues(configuration.properties);\n\n        this.title = configuration.title;\n        this.description = configuration.description;\n        this.configuration = configuration;\n\n        this.createSurfaceAndUi(configuration.properties, values);\n    }\n\n    BaseWrapper.prototype.onConfigurationRequestDone = function(data, result) {\n        result.properties = this.parseConfiguration(data.configuration.properties)\n\n        if (data.configuration.title !== undefined) {\n            result.title = data.configuration.title\n        }\n\n        if (data.configuration.description !== undefined) {\n            result.description = data.configuration.description\n        }\n\n        this.configurationLoaded(result)\n    }\n\n    //\n    // Events\n    //\n\n    BaseWrapper.prototype.triggerShowingAndInit = function() {\n        var e = $.Event('showing.oc.inspector');\n\n        this.$element.trigger(e, [{callback: this.proxy(this.init)}]);\n        if (e.isDefaultPrevented()) {\n            this.$element = null;\n\n            return false;\n        }\n\n        if (!e.isPropagationStopped()) {\n            this.init();\n        }\n    }\n\n    BaseWrapper.prototype.triggerHiding = function() {\n        var hidingEvent = $.Event('hiding.oc.inspector'),\n            values = this.surface.getValues()\n\n        this.$element.trigger(hidingEvent, [{values: values}])\n        return !hidingEvent.isDefaultPrevented();\n    }\n\n    BaseWrapper.prototype.onGetInspectableElement = function() {\n        return this.$element;\n    }\n\n    BaseWrapper.DEFAULTS = {\n        containerSupported: false\n    };\n\n    $.oc.inspector.wrappers.base = BaseWrapper;\n}(window.jQuery);\n;\n/*\n * Inspector popup wrapper.\n */\n+function ($) { \"use strict\";\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.inspector.wrappers.base,\n        BaseProto = Base.prototype\n\n    var InspectorPopup = function($element, surface, options) {\n        this.$popoverContainer = null\n        this.popoverObj = null\n        this.cleaningUp = false\n\n        Base.call(this, $element, surface, options)\n    }\n\n    InspectorPopup.prototype = Object.create(BaseProto)\n    InspectorPopup.prototype.constructor = Base\n\n    InspectorPopup.prototype.dispose = function() {\n        this.unregisterHandlers();\n\n        this.$popoverContainer = null;\n        this.popoverObj = null;\n\n        BaseProto.dispose.call(this);\n    }\n\n    InspectorPopup.prototype.createSurfaceAndUi = function(properties, values, title, description) {\n        this.showPopover();\n\n        this.initSurface(this.$popoverContainer.find('[data-surface-container]').get(0), properties, values);\n        this.repositionPopover();\n\n        this.registerPopupHandlers();\n    }\n\n    InspectorPopup.prototype.adoptSurface = function() {\n        this.showPopover();\n\n        this.surface.moveToContainer(this.$popoverContainer.find('[data-surface-container]').get(0));\n        this.repositionPopover();\n\n        this.registerPopupHandlers();\n\n        BaseProto.adoptSurface.call(this);\n    }\n\n    InspectorPopup.prototype.cleanupAfterSwitch = function() {\n        this.cleaningUp = true;\n        this.switched = true;\n\n        this.forceClose();\n\n        // The parent cleanupAfterSwitch() is not called because\n        // disposing happens in onHide() triggered by forceClose()\n    }\n\n    InspectorPopup.prototype.getPopoverContents = function() {\n        return '<div class=\"popover-head\">                          \\\n                    <h3 data-inspector-title></h3>                  \\\n                    <p data-inspector-description></p>              \\\n                    <button type=\"button\" class=\"btn-close\"         \\\n                        data-dismiss=\"popover\"                      \\\n                        aria-hidden=\"true\"></button>                \\\n                </div>                                              \\\n                <form autocomplete=\"off\" onsubmit=\"return false\">   \\\n                    <div data-surface-container></div>              \\\n                <form>'\n    }\n\n    InspectorPopup.prototype.showPopover = function() {\n        var offset = this.$element.data('inspector-offset'),\n            offsetX = this.$element.data('inspector-offset-x'),\n            offsetY = this.$element.data('inspector-offset-y'),\n            placement = this.$element.data('inspector-placement'),\n            fallbackPlacement = this.$element.data('inspector-fallback-placement');\n\n        if (offset === undefined) {\n            offset = 15;\n        }\n\n        if (placement === undefined) {\n            placement = 'bottom';\n        }\n\n        if (fallbackPlacement === undefined) {\n            fallbackPlacement = 'bottom';\n        }\n\n        this.$element.ocPopover({\n            content: this.getPopoverContents(),\n            highlightModalTarget: true,\n            modal: true,\n            placement: placement,\n            fallbackPlacement: fallbackPlacement,\n            containerClass: 'control-inspector',\n            container:  this.$element.data('inspector-container'),\n            offset: offset,\n            offsetX: offsetX,\n            offsetY: offsetY,\n            width: 450\n        });\n\n        this.setInspectorVisibleFlag(true);\n\n        this.popoverObj = this.$element.data('oc.popover');\n        this.$popoverContainer = this.popoverObj.$container;\n\n        this.$popoverContainer.addClass('inspector-temporary-placement');\n\n        if (this.options.inspectorCssClass !== undefined) {\n            this.$popoverContainer.addClass(this.options.inspectorCssClass);\n        }\n\n        if (this.options.containerSupported) {\n            var moveToContainerButton = $('<span class=\"inspector-move-to-container oc-icon-download\">');\n            this.$popoverContainer.find('.popover-head').append(moveToContainerButton);\n        }\n\n        this.$popoverContainer.find('[data-inspector-title]').text(this.title);\n        this.$popoverContainer.find('[data-inspector-description]').text(this.description);\n    }\n\n    InspectorPopup.prototype.repositionPopover = function() {\n        this.popoverObj.reposition();\n        this.$popoverContainer.removeClass('inspector-temporary-placement');\n        this.$popoverContainer.find('div[data-surface-container] > div').trigger('focus-control');\n    }\n\n    InspectorPopup.prototype.forceClose = function() {\n        this.$popoverContainer.trigger('close.oc.popover')\n    }\n\n    InspectorPopup.prototype.registerPopupHandlers = function() {\n        this.surface.options.onPopupDisplayed = this.proxy(this.onPopupEditorDisplayed)\n        this.surface.options.onPopupHidden = this.proxy(this.onPopupEditorHidden)\n        this.popoverObj.options.onCheckDocumentClickTarget = this.proxy(this.onCheckDocumentClickTarget)\n\n        this.$element.on('hiding.oc.popover', this.proxy(this.onBeforeHide))\n        this.$element.on('hide.oc.popover', this.proxy(this.onHide))\n        this.$popoverContainer.on('keydown', this.proxy(this.onPopoverKeyDown))\n\n        if (this.options.containerSupported) {\n            this.$popoverContainer.on('click', 'span.inspector-move-to-container', this.proxy(this.onMoveToContainer))\n        }\n    }\n\n    InspectorPopup.prototype.unregisterHandlers = function() {\n        this.popoverObj.options.onCheckDocumentClickTarget = null\n\n        this.$element.off('hiding.oc.popover', this.proxy(this.onBeforeHide))\n        this.$element.off('hide.oc.popover', this.proxy(this.onHide))\n        this.$popoverContainer.off('keydown', this.proxy(this.onPopoverKeyDown))\n\n        if (this.options.containerSupported) {\n            this.$popoverContainer.off('click', 'span.inspector-move-to-container', this.proxy(this.onMoveToContainer))\n        }\n\n        this.surface.options.onPopupDisplayed = null\n        this.surface.options.onPopupHidden = null\n    }\n\n    InspectorPopup.prototype.onBeforeHide = function(ev) {\n        if (this.cleaningUp) {\n            return\n        }\n\n        if (!this.surface.validate()) {\n            ev.preventDefault()\n            return false\n        }\n\n        if (!this.triggerHiding()) {\n            ev.preventDefault()\n            return false\n        }\n\n        this.applyValues()\n    }\n\n    InspectorPopup.prototype.onHide = function(ev) {\n        this.dispose()\n    }\n\n    InspectorPopup.prototype.onPopoverKeyDown = function(ev) {\n        if(ev.key === 'Enter') {\n            $(ev.currentTarget).trigger('close.oc.popover')\n        }\n    }\n\n    InspectorPopup.prototype.onPopupEditorDisplayed = function() {\n        this.popoverObj.options.closeOnPageClick = false\n        this.popoverObj.options.closeOnEsc = false\n    }\n\n    InspectorPopup.prototype.onPopupEditorHidden = function() {\n        this.popoverObj.options.closeOnPageClick = true\n        this.popoverObj.options.closeOnEsc = true\n    }\n\n    InspectorPopup.prototype.onCheckDocumentClickTarget = function(element) {\n        if ($.contains(this.$element, element) || this.$element.get(0) === element) {\n            return true\n        }\n    }\n\n    InspectorPopup.prototype.onMoveToContainer = function() {\n        $.oc.inspector.manager.switchToContainer(this)\n    }\n\n    $.oc.inspector.wrappers.popup = InspectorPopup\n}(window.jQuery);\n;\n/*\n * Inspector container wrapper.\n */\n+function ($) { \"use strict\";\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.inspector.wrappers.base,\n        BaseProto = Base.prototype\n\n    var InspectorContainer = function($element, surface, options) {\n        if (!options.container) {\n            throw new Error('Cannot create Inspector container wrapper without a container element.')\n        }\n\n        this.surfaceContainer = null\n\n        Base.call(this, $element, surface, options)\n    }\n\n    InspectorContainer.prototype = Object.create(BaseProto)\n    InspectorContainer.prototype.constructor = Base\n\n    InspectorContainer.prototype.init = function() {\n        this.registerHandlers()\n\n        BaseProto.init.call(this)\n    }\n\n    InspectorContainer.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.removeControls()\n\n        this.surfaceContainer = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    InspectorContainer.prototype.createSurfaceAndUi = function(properties, values) {\n        this.buildUi()\n\n        this.initSurface(this.surfaceContainer, properties, values)\n\n        if (this.isLiveUpdateEnabled()) {\n            this.surface.options.onChange = this.proxy(this.onLiveUpdate)\n        }\n    }\n\n    InspectorContainer.prototype.adoptSurface = function() {\n        this.buildUi()\n\n        this.surface.moveToContainer(this.surfaceContainer)\n\n        if (this.isLiveUpdateEnabled()) {\n            this.surface.options.onChange = this.proxy(this.onLiveUpdate)\n        }\n\n        BaseProto.adoptSurface.call(this)\n    }\n\n    InspectorContainer.prototype.buildUi = function() {\n        var scrollable = this.isScrollable(),\n            head = this.buildHead(),\n            layoutElements = this.buildLayout()\n\n        layoutElements.headContainer.appendChild(head)\n\n        if (scrollable) {\n            var scrollpad = this.buildScrollpad()\n\n            this.surfaceContainer = scrollpad.container\n            layoutElements.bodyContainer.appendChild(scrollpad.scrollpad)\n\n            $(scrollpad.scrollpad).scrollpad()\n        }\n        else {\n            this.surfaceContainer = layoutElements.bodyContainer\n        }\n\n        this.setInspectorVisibleFlag(true)\n    }\n\n    InspectorContainer.prototype.buildHead = function() {\n        var container = document.createElement('div'),\n            header = document.createElement('h3'),\n            paragraph = document.createElement('p'),\n            detachButton = document.createElement('span'),\n            closeButton = document.createElement('span')\n\n        container.setAttribute('class', 'inspector-header')\n        detachButton.setAttribute('class', 'oc-icon-external-link-square detach')\n        closeButton.setAttribute('class', 'close')\n\n        header.textContent = this.title\n        paragraph.textContent = this.description\n        closeButton.innerHTML = '&times;';\n\n        container.appendChild(header)\n        container.appendChild(paragraph)\n        container.appendChild(detachButton)\n        container.appendChild(closeButton)\n\n        return container\n    }\n\n    InspectorContainer.prototype.buildScrollpad = function() {\n        var scrollpad = document.createElement('div'),\n            scrollWrapper = document.createElement('div'),\n            scrollableContainer = document.createElement('div')\n\n        scrollpad.setAttribute('class', 'control-scrollpad')\n        scrollpad.setAttribute('data-control', 'scrollpad')\n        scrollWrapper.setAttribute('class', 'scroll-wrapper inspector-wrapper')\n\n        scrollpad.appendChild(scrollWrapper)\n        scrollWrapper.appendChild(scrollableContainer)\n\n        return {\n            scrollpad: scrollpad,\n            container: scrollableContainer\n        }\n    }\n\n    InspectorContainer.prototype.buildLayout = function() {\n        var layout = document.createElement('div'),\n            headRow = document.createElement('div'),\n            bodyRow = document.createElement('div')\n\n        layout.setAttribute('class', 'flex-layout-column fill-container')\n        headRow.setAttribute('class', 'flex-layout-item fix')\n        bodyRow.setAttribute('class', 'flex-layout-item stretch relative')\n\n        layout.appendChild(headRow)\n        layout.appendChild(bodyRow)\n\n        this.options.container.get(0).appendChild(layout)\n\n        $.oc.foundation.controlUtils.markDisposable(layout)\n        this.registerLayoutHandlers(layout)\n  \n        return {\n            headContainer: headRow,\n            bodyContainer: bodyRow\n        }\n    }\n\n    InspectorContainer.prototype.validateAndApply = function() {\n        if (!this.surface.validate()) {\n            return false\n        }\n\n        this.applyValues()\n        return true\n    }\n\n    InspectorContainer.prototype.isScrollable = function() {\n        return this.options.container.data('inspector-scrollable') !== undefined\n    }\n\n    InspectorContainer.prototype.isLiveUpdateEnabled = function() {\n        return this.options.container.data('inspector-live-update') !== undefined\n    }\n\n    InspectorContainer.prototype.getLayout = function() {\n        return this.options.container.get(0).querySelector('div.flex-layout-column')\n    }\n\n    InspectorContainer.prototype.registerLayoutHandlers = function(layout) {\n        var $layout = $(layout)\n\n        $layout.one('dispose-control', this.proxy(this.dispose))\n        $layout.on('click', 'span.close', this.proxy(this.onClose))\n        $layout.on('click', 'span.detach', this.proxy(this.onDetach))\n    }\n\n    InspectorContainer.prototype.registerHandlers = function() {\n        this.options.container.on('apply.oc.inspector', this.proxy(this.onApplyValues))\n        this.options.container.on('beforeContainerHide.oc.inspector', this.proxy(this.onBeforeHide))\n    }\n\n    InspectorContainer.prototype.unregisterHandlers = function() {\n        var $layout = $(this.getLayout())\n\n        this.options.container.off('apply.oc.inspector', this.proxy(this.onApplyValues))\n        this.options.container.off('beforeContainerHide.oc.inspector', this.proxy(this.onBeforeHide))\n\n        $layout.off('dispose-control', this.proxy(this.dispose))\n        $layout.off('click', 'span.close', this.proxy(this.onClose))\n        $layout.off('click', 'span.detach', this.proxy(this.onDetach))\n\n        if (this.surface !== null && this.surface.options.onChange === this.proxy(this.onLiveUpdate)) {\n            this.surface.options.onChange = null\n        }\n    }\n\n    InspectorContainer.prototype.removeControls = function() {\n        if (this.isScrollable()) {\n            this.options.container.find('.control-scrollpad').scrollpad('dispose')\n        }\n\n        var layout = this.getLayout()\n        layout.parentNode.removeChild(layout)\n    }\n\n    InspectorContainer.prototype.onApplyValues = function(ev) {\n        if (!this.validateAndApply()) {\n            ev.preventDefault()\n            return false\n        }\n    }\n\n    InspectorContainer.prototype.onBeforeHide = function(ev) {\n        if (!this.triggerHiding()) {\n            ev.preventDefault()\n            return false\n        }\n    }\n\n    InspectorContainer.prototype.onClose = function(ev) {\n        if (!this.validateAndApply()) {\n            ev.preventDefault()\n            return false\n        }\n\n        if (!this.triggerHiding()) {\n            ev.preventDefault()\n            return false\n        }\n\n        this.surface.dispose()\n\n        this.dispose()\n    }\n\n    InspectorContainer.prototype.onLiveUpdate = function() {\n        this.applyValues(true)\n    }\n\n    InspectorContainer.prototype.onDetach = function() {\n        $.oc.inspector.manager.switchToPopup(this)\n    }\n\n    $.oc.inspector.wrappers.container = InspectorContainer\n}(window.jQuery);\n;\n/*\n * Inspector grouping support.\n *\n */\n+function ($) { \"use strict\";\n\n    // GROUP MANAGER CLASS\n    // ============================\n\n    var GroupManager = function(controlId) {\n        this.controlId = controlId\n        this.rootGroup = null\n        this.cachedGroupStatuses = null\n    }\n\n    GroupManager.prototype.createGroup = function(groupId, parentGroup) {\n        var group = new Group(groupId)\n\n        if (parentGroup) {\n            parentGroup.groups.push(group)\n            group.parentGroup = parentGroup // Circular reference, but memory leaks are not noticed\n        }\n        else {\n            this.rootGroup = group\n        }\n\n        return group\n    }\n\n    GroupManager.prototype.getGroupIndex = function(group) {\n        return group.getGroupIndex()\n    }\n\n    GroupManager.prototype.isParentGroupExpanded = function(group) {\n        if (!group.parentGroup) {\n            // The root group is always expanded\n            return true\n        }\n\n        return this.isGroupExpanded(group.parentGroup)\n    }\n\n    GroupManager.prototype.isGroupExpanded = function(group) {\n        if (!group.parentGroup) {\n            // The root group is always expanded\n            return true\n        }\n\n        var groupIndex = this.getGroupIndex(group),\n            statuses = this.readGroupStatuses()\n\n        if (statuses[groupIndex] !== undefined) {\n            return statuses[groupIndex]\n        }\n\n        return false\n    }\n\n    GroupManager.prototype.setGroupStatus = function(groupIndex, expanded) {\n        var statuses = this.readGroupStatuses()\n\n        statuses[groupIndex] = expanded\n\n        this.writeGroupStatuses(statuses)\n    }\n\n    GroupManager.prototype.readGroupStatuses = function() {\n        if (this.cachedGroupStatuses !== null) {\n            return this.cachedGroupStatuses\n        }\n\n        var statuses = getInspectorGroupStatuses()\n\n        if (statuses[this.controlId] !== undefined) {\n            this.cachedGroupStatuses = statuses[this.controlId]\n        }\n        else {\n            this.cachedGroupStatuses = {}\n        }\n\n        return this.cachedGroupStatuses\n    }\n\n    GroupManager.prototype.writeGroupStatuses = function(updatedStatuses) {\n        var statuses = getInspectorGroupStatuses()\n\n        statuses[this.controlId] = updatedStatuses\n        setInspectorGroupStatuses(statuses)\n\n        this.cachedGroupStatuses = updatedStatuses\n    }\n\n    GroupManager.prototype.findGroupByIndex = function(index) {\n        return this.rootGroup.findGroupByIndex(index)\n    }\n\n    GroupManager.prototype.findGroupRows = function(table, index, ignoreCollapsedSubgroups) {\n        var group = this.findGroupByIndex(index)\n\n        if (!group) {\n            throw new Error('Cannot find the requested row group.')\n        }\n\n        return group.findGroupRows(table, ignoreCollapsedSubgroups, this)\n    }\n\n    GroupManager.prototype.markGroupRowInvalid = function(group, table) {\n        var currentGroup = group\n\n        while (currentGroup) {\n            var row = currentGroup.findGroupRow(table)\n            if (row) {\n                $.oc.foundation.element.addClass(row, 'invalid')\n            }\n\n            currentGroup = currentGroup.parentGroup\n        }\n    }\n\n    GroupManager.prototype.unmarkInvalidGroups = function(table) {\n        var rows = table.querySelectorAll('tr.invalid')\n\n        for (var i = rows.length-1; i >= 0; i--) {\n            $.oc.foundation.element.removeClass(rows[i], 'invalid')\n        }\n    }\n\n    GroupManager.prototype.isRowVisible = function(table, rowGroupIndex) {\n        var group = this.findGroupByIndex(index)\n\n        if (!group) {\n            throw new Error('Cannot find the requested row group.')\n        }\n\n        var current = group\n\n        while (current) {\n            if (!this.isGroupExpanded(current)) {\n                return false\n            }\n\n            current = current.parentGroup\n        }\n\n        return true\n    }\n\n    //\n    // Internal functions\n    //\n\n    function getInspectorGroupStatuses() {\n        var statuses = document.body.getAttribute('data-inspector-group-statuses')\n\n        if (statuses !== null) {\n            return JSON.parse(statuses)\n        }\n\n        return {}\n    }\n\n    function setInspectorGroupStatuses(statuses) {\n        document.body.setAttribute('data-inspector-group-statuses', JSON.stringify(statuses))\n    }\n\n    // GROUP CLASS\n    // ============================\n\n    var Group = function(groupId) {\n        this.groupId = groupId\n        this.parentGroup = null\n        this.groupIndex = null\n\n        this.groups = []\n    }\n\n    Group.prototype.getGroupIndex = function() {\n        if (this.groupIndex !== null) {\n            return this.groupIndex\n        }\n\n        var result = '',\n            current = this\n\n        while (current) {\n            if (result.length > 0) {\n                result = current.groupId + '-' + result\n            }\n            else {\n                result = String(current.groupId)\n            }\n\n            current = current.parentGroup\n        }\n\n        this.groupIndex = result\n\n        return result\n    }\n\n    Group.prototype.findGroupByIndex = function(index) {\n        if (this.getGroupIndex() == index) {\n            return this\n        }\n\n        for (var i = this.groups.length-1; i >= 0; i--) {\n            var groupResult = this.groups[i].findGroupByIndex(index)\n            if (groupResult !== null) {\n                return groupResult\n            }\n        }\n\n        return null\n    }\n\n    Group.prototype.getLevel = function() {\n        var current = this,\n            level = -1\n\n        while (current) {\n            level++\n\n            current = current.parentGroup\n        }\n\n        return level\n    }\n\n    Group.prototype.getGroupAndAllParents = function() {\n        var current = this,\n            result = []\n\n        while (current) {\n            result.push(current)\n\n            current = current.parentGroup\n        }\n\n        return result\n    }\n\n    Group.prototype.findGroupRows = function(table, ignoreCollapsedSubgroups, groupManager) {\n        var groupIndex = this.getGroupIndex(),\n            rows = table.querySelectorAll('tr[data-parent-group-index=\"'+groupIndex+'\"]'),\n            result = Array.prototype.slice.call(rows) // Convert node list to array\n\n        for (var i = 0, len = this.groups.length; i < len; i++) {\n            var subgroup = this.groups[i]\n\n            if (ignoreCollapsedSubgroups && !groupManager.isGroupExpanded(subgroup)) {\n                continue\n            }\n\n            var subgroupRows = subgroup.findGroupRows(table, ignoreCollapsedSubgroups, groupManager)\n            for (var j = 0, subgroupLen = subgroupRows.length; j < subgroupLen; j++) {\n                result.push(subgroupRows[j])\n            }\n        }\n\n        return result\n    }\n\n    Group.prototype.findGroupRow = function(table) {\n        return table.querySelector('tr[data-group-index=\"'+this.groupIndex+'\"]')\n    }\n\n    $.oc.inspector.groupManager = GroupManager\n}(window.jQuery);\n;\n/*\n * Inspector engine helpers.\n *\n * The helpers are used mostly by the Inspector Surface.\n *\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    $.oc.inspector.engine = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    function findGroup(group, properties) {\n        for (var i = 0, len = properties.length; i < len; i++) {\n            var property = properties[i]\n\n            if (property.itemType !== undefined && property.itemType == 'group' && property.title == group) {\n                return property\n            }\n        }\n\n        return null\n    }\n\n    $.oc.inspector.engine.processPropertyGroups = function(properties) {\n        var fields = [],\n            result = {\n                hasGroups: false,\n                properties: []\n            },\n            groupIndex = 0\n\n        for (var i = 0, len = properties.length; i < len; i++) {\n            var property = properties[i]\n\n            if (property['sortOrder'] === undefined) {\n                property['sortOrder'] = (i+1)*20\n            }\n        }\n\n        properties.sort(function(a, b){\n            return a['sortOrder'] - b['sortOrder']\n        })\n\n        for (var i = 0, len = properties.length; i < len; i++) {\n            var property = properties[i]\n\n            property.itemType = 'property'\n\n            if (property.group === undefined) {\n                fields.push(property)\n            }\n            else {\n                var group = findGroup(property.group, fields)\n\n                if (!group) {\n                    group = {\n                        itemType: 'group',\n                        title: property.group,\n                        properties: [],\n                        groupIndex: groupIndex\n                    }\n\n                    groupIndex++\n                    fields.push(group)\n                }\n\n                property.groupIndex = group.groupIndex\n                group.properties.push(property)\n            }\n        }\n\n        for (var i = 0, len = fields.length; i < len; i++) {\n            var property = fields[i]\n\n            result.properties.push(property)\n\n            if (property.itemType == 'group') {\n                result.hasGroups = true\n\n                for (var j = 0, propertiesLen = property.properties.length; j < propertiesLen; j++) {\n                    result.properties.push(property.properties[j])\n                }\n\n                delete property.properties\n            }\n        }\n\n        return result\n    }\n}(window.jQuery);\n\n;\n/*\n * Inspector editor base class.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined) {\n        $.oc = {}\n    }\n\n    if ($.oc.inspector === undefined) {\n        $.oc.inspector = {}\n    }\n\n    if ($.oc.inspector.propertyEditors === undefined) {\n        $.oc.inspector.propertyEditors = {}\n    }\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var BaseEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.inspector = inspector;\n        this.propertyDefinition = propertyDefinition;\n        this.containerCell = containerCell;\n        this.containerRow = containerCell.parentNode;\n        this.parentGroup = group;\n        // Group created by a grouped editor, for example by the set editor\n        this.group = null;\n        this.childInspector = null;\n        this.validationSet = null;\n        this.disposed = false;\n\n        Base.call(this);\n\n        this.init();\n    }\n\n    BaseEditor.prototype = Object.create(BaseProto)\n    BaseEditor.prototype.constructor = Base\n\n    BaseEditor.prototype.dispose = function() {\n        // After this point editors can't rely on any DOM references\n        this.disposed = true;\n\n        this.disposeValidation();\n\n        if (this.childInspector) {\n            this.childInspector.dispose();\n        }\n\n        this.inspector = null;\n        this.propertyDefinition = null;\n        this.containerCell = null;\n        this.containerRow = null;\n        this.childInspector = null;\n        this.parentGroup = null;\n        this.group = null;\n        this.validationSet = null;\n\n        BaseProto.dispose.call(this)\n    }\n\n    BaseEditor.prototype.init = function() {\n        this.build()\n        this.registerHandlers()\n        this.initValidation()\n    }\n\n    BaseEditor.prototype.build = function() {\n        return null\n    }\n\n    BaseEditor.prototype.isDisposed = function() {\n        return this.disposed\n    }\n\n    BaseEditor.prototype.registerHandlers = function() {\n    }\n\n    BaseEditor.prototype.onInspectorPropertyChanged = function(property, value) {\n    }\n\n    BaseEditor.prototype.notifyChildSurfacesPropertyChanged = function(property, value) {\n        if (!this.hasChildSurface()) {\n            return;\n        }\n\n        this.childInspector.notifyEditorsPropertyChanged(property, value)\n    }\n\n    BaseEditor.prototype.focus = function() {\n    }\n\n    BaseEditor.prototype.hasChildSurface = function() {\n        return this.childInspector !== null\n    }\n\n    BaseEditor.prototype.getRootSurface = function() {\n        return this.inspector.getRootSurface()\n    }\n\n    BaseEditor.prototype.getPropertyPath = function() {\n        return this.inspector.getPropertyPath(this.propertyDefinition.property)\n    }\n\n    /**\n     * Updates displayed value in the editor UI. The value is already set\n     * in the Inspector and should be loaded from Inspector.\n     */\n    BaseEditor.prototype.updateDisplayedValue = function(value) {\n    }\n\n    BaseEditor.prototype.getPropertyName = function() {\n        return this.propertyDefinition.property\n    }\n\n    BaseEditor.prototype.getUndefinedValue = function() {\n        return this.propertyDefinition.default === undefined ? undefined : this.propertyDefinition.default\n    }\n\n    BaseEditor.prototype.throwError = function(errorMessage) {\n        throw new Error(errorMessage + ' Property: ' + this.propertyDefinition.property)\n    }\n\n    BaseEditor.prototype.getInspectableElement = function() {\n        return this.getRootSurface().getInspectableElement()\n    }\n\n    BaseEditor.prototype.isEmptyValue = function(value) {\n        return value === undefined\n            || value === null\n            || (typeof value == 'object' && $.isEmptyObject(value) )\n            || (typeof value == 'string' && $.trim(value).length === 0)\n            || (Object.prototype.toString.call(value) === '[object Array]' && value.length === 0)\n    }\n\n    //\n    // Validation\n    //\n\n    BaseEditor.prototype.initValidation = function() {\n        this.validationSet = new $.oc.inspector.validationSet(this.propertyDefinition, this.propertyDefinition.property)\n    }\n\n    BaseEditor.prototype.disposeValidation = function() {\n        this.validationSet.dispose()\n    }\n\n    BaseEditor.prototype.getValueToValidate = function() {\n        return this.inspector.getPropertyValue(this.propertyDefinition.property)\n    }\n\n    BaseEditor.prototype.validate = function(silentMode) {\n        var value = this.getValueToValidate()\n\n        if (value === undefined) {\n            value = this.getUndefinedValue()\n        }\n\n        var validationResult = this.validationSet.validate(value)\n        if (validationResult !== null) {\n            if (!silentMode) {\n                $.oc.flashMsg({text: validationResult, 'class': 'error', 'interval': 5})\n            }\n            return false\n        }\n\n        return true\n    }\n\n    BaseEditor.prototype.markInvalid = function() {\n        $.oc.foundation.element.addClass(this.containerRow, 'invalid');\n        this.inspector.getGroupManager().markGroupRowInvalid(this.parentGroup, this.inspector.getRootTable());\n\n        this.inspector.getRootSurface().expandGroupParents(this.parentGroup);\n        this.focus();\n    }\n\n    //\n    // External editor\n    //\n\n    BaseEditor.prototype.supportsExternalParameterEditor = function() {\n        return true\n    }\n\n    BaseEditor.prototype.onExternalPropertyEditorHidden = function() {\n    }\n\n    //\n    // Grouping\n    //\n\n    BaseEditor.prototype.isGroupedEditor = function() {\n        return false\n    }\n\n    BaseEditor.prototype.initControlGroup = function() {\n        this.group = this.inspector.getGroupManager().createGroup(this.propertyDefinition.property, this.parentGroup)\n    }\n\n    BaseEditor.prototype.createGroupedRow = function(property) {\n        var row = this.inspector.buildRow(property, this.group),\n            groupedClass = this.inspector.getGroupManager().isGroupExpanded(this.group) ? 'expanded' : 'collapsed'\n\n        this.inspector.applyGroupLevelToRow(row, this.group)\n\n        $.oc.foundation.element.addClass(row, 'property')\n        $.oc.foundation.element.addClass(row, groupedClass)\n        return row\n    }\n\n    $.oc.inspector.propertyEditors.base = BaseEditor\n}(window.jQuery);\n;\n/*\n * Inspector string editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var StringEditor = function(inspector, propertyDefinition, containerCell, group) {\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    StringEditor.prototype = Object.create(BaseProto)\n    StringEditor.prototype.constructor = Base\n\n    StringEditor.prototype.dispose = function() {\n        this.unregisterHandlers()\n\n        BaseProto.dispose.call(this)\n    }\n\n    StringEditor.prototype.build = function() {\n        var editor = document.createElement('input'),\n            placeholder = this.propertyDefinition.placeholder !== undefined ? this.propertyDefinition.placeholder : '',\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        editor.setAttribute('type', 'text')\n        editor.setAttribute('class', 'string-editor')\n        editor.setAttribute('placeholder', placeholder)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        if (value === undefined) {\n            value = ''\n        }\n\n        editor.value = value\n\n        $.oc.foundation.element.addClass(this.containerCell, 'text')\n\n        this.containerCell.appendChild(editor)\n    }\n\n    StringEditor.prototype.updateDisplayedValue = function(value) {\n        this.getInput().value = value\n    }\n\n    StringEditor.prototype.getInput = function() {\n        return this.containerCell.querySelector('input');\n    }\n\n    StringEditor.prototype.focus = function() {\n        this.getInput().focus({ preventScroll: true });\n        this.onInputFocus();\n    }\n\n    StringEditor.prototype.registerHandlers = function() {\n        var input = this.getInput();\n\n        input.addEventListener('focus', this.proxy(this.onInputFocus));\n        input.addEventListener('keyup', this.proxy(this.onInputKeyUp));\n    }\n\n    StringEditor.prototype.unregisterHandlers = function() {\n        var input = this.getInput();\n\n        input.removeEventListener('focus', this.proxy(this.onInputFocus));\n        input.removeEventListener('keyup', this.proxy(this.onInputKeyUp));\n    }\n\n    StringEditor.prototype.onInputFocus = function(ev) {\n        this.inspector.makeCellActive(this.containerCell);\n    }\n\n    StringEditor.prototype.onInputKeyUp = function() {\n        var value = $.trim(this.getInput().value);\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, value);\n    }\n\n    StringEditor.prototype.onExternalPropertyEditorHidden = function() {\n        this.focus()\n    }\n\n    $.oc.inspector.propertyEditors.string = StringEditor\n}(window.jQuery);\n;\n/*\n * Inspector checkbox editor class.\n *\n * This editor is used in $.oc.inspector.propertyEditors.set class.\n * If updates that affect references to this.inspector and propertyDefinition are done,\n * the propertyEditors.set class implementation should be reviewed.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var CheckboxEditor = function(inspector, propertyDefinition, containerCell, group) {\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    CheckboxEditor.prototype = Object.create(BaseProto)\n    CheckboxEditor.prototype.constructor = Base\n\n    CheckboxEditor.prototype.dispose = function() {\n        this.unregisterHandlers()\n\n        BaseProto.dispose.call(this)\n    }\n\n    CheckboxEditor.prototype.build = function() {\n        var editor = document.createElement('input'),\n            container = document.createElement('div'),\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property),\n            label = document.createElement('label'),\n            isChecked = false,\n            id = this.inspector.generateSequencedId();\n\n        container.setAttribute('tabindex', 0);\n        container.setAttribute('class', 'form-check');\n\n        editor.setAttribute('type', 'checkbox');\n        editor.setAttribute('value', '1');\n        editor.setAttribute('placeholder', 'placeholder');\n        editor.setAttribute('id', id);\n        editor.setAttribute('class', 'form-check-input');\n\n        container.appendChild(editor);\n\n        if (value === undefined) {\n            if (this.propertyDefinition.default !== undefined) {\n                isChecked = this.normalizeCheckedValue(this.propertyDefinition.default);\n            }\n        }\n        else {\n            isChecked = this.normalizeCheckedValue(value);\n        }\n\n        editor.checked = isChecked;\n\n        this.containerCell.appendChild(container);\n    }\n\n    CheckboxEditor.prototype.normalizeCheckedValue = function(value) {\n         if (value == '0' || value == 'false') {\n             return false;\n         }\n\n        return value;\n    }\n\n    CheckboxEditor.prototype.getInput = function() {\n        return this.containerCell.querySelector('input');\n    }\n\n    CheckboxEditor.prototype.focus = function() {\n        this.getInput().parentNode.focus({ preventScroll: true });\n    }\n\n    CheckboxEditor.prototype.updateDisplayedValue = function(value) {\n        this.getInput().checked = this.normalizeCheckedValue(value);\n    }\n\n    CheckboxEditor.prototype.isEmptyValue = function(value) {\n        if (value === 0 || value === '0' || value === 'false') {\n            return true;\n        }\n\n        return BaseProto.isEmptyValue.call(this, value);\n    }\n\n    CheckboxEditor.prototype.registerHandlers = function() {\n        var input = this.getInput()\n\n        input.addEventListener('change', this.proxy(this.onInputChange))\n    }\n\n    CheckboxEditor.prototype.unregisterHandlers = function() {\n        var input = this.getInput()\n\n        input.removeEventListener('change', this.proxy(this.onInputChange))\n    }\n\n    CheckboxEditor.prototype.onInputChange = function() {\n        var isChecked = this.getInput().checked\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, isChecked ? 1 : 0)\n    }\n\n    $.oc.inspector.propertyEditors.checkbox = CheckboxEditor\n}(window.jQuery);\n;\n/*\n * Inspector checkbox dropdown class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var DropdownEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.indicatorContainer = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    DropdownEditor.prototype = Object.create(BaseProto)\n    DropdownEditor.prototype.constructor = Base\n\n    DropdownEditor.prototype.init = function() {\n        this.dynamicOptions = this.propertyDefinition.options ? false : true\n        this.initialization = false\n\n        BaseProto.init.call(this)\n    }\n\n    DropdownEditor.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.destroyCustomSelect()\n\n        this.indicatorContainer = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    //\n    // Building\n    //\n\n    DropdownEditor.prototype.build = function() {\n        var select = document.createElement('select')\n\n        $.oc.foundation.element.addClass(this.containerCell, 'dropdown')\n        $.oc.foundation.element.addClass(select, 'custom-select')\n\n        if (!this.dynamicOptions) {\n            this.loadStaticOptions(select)\n        }\n\n        this.containerCell.appendChild(select)\n\n        this.initCustomSelect()\n\n        if (this.dynamicOptions) {\n           this.loadDynamicOptions(true)\n        }\n    }\n\n    DropdownEditor.prototype.formatSelectOption = function(state) {\n        if (!state.id)\n            return state.text; // optgroup\n\n        var option = state.element,\n            iconClass = option.getAttribute('data-icon'),\n            imageSrc = option.getAttribute('data-image')\n\n        if (iconClass) {\n            return '<i class=\"select-icon '+iconClass+'\"></i> ' + state.text\n        }\n\n        if (imageSrc) {\n            return '<img class=\"select-image\" src=\"'+imageSrc+'\" alt=\"\" /> ' + state.text\n        }\n\n        return state.text\n    }\n\n    DropdownEditor.prototype.createOption = function(select, title, value) {\n        var option = document.createElement('option')\n\n        if (title !== null) {\n            if (!Array.isArray(title)) {\n                option.textContent = title\n            }\n            else {\n                if (title[1].indexOf('.') !== -1) {\n                    option.setAttribute('data-image', title[1])\n                }\n                else {\n                    option.setAttribute('data-icon', title[1])\n                }\n\n                option.textContent = title[0]\n            }\n        }\n\n        if (value !== null) {\n            option.value = value\n        }\n\n        select.appendChild(option)\n    }\n\n    DropdownEditor.prototype.createOptions = function(select, options) {\n        for (var value in options) {\n            this.createOption(select, options[value], value)\n        }\n    }\n\n    DropdownEditor.prototype.initCustomSelect = function() {\n        var select = this.getSelect()\n\n        var options = {\n            dropdownCssClass: 'ocInspectorDropdown'\n        }\n\n        if (this.propertyDefinition.emptyOption !== undefined) {\n            options.placeholder = this.propertyDefinition.emptyOption\n        }\n\n        if (this.propertyDefinition.placeholder !== undefined) {\n            options.placeholder = this.propertyDefinition.placeholder\n        }\n\n        options.templateResult = this.formatSelectOption\n        options.templateSelection = this.formatSelectOption\n        options.escapeMarkup = function(m) {\n            return m\n        }\n\n        $(select).select2(options)\n\n        if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) {\n            this.indicatorContainer = $('.select2-container', this.containerCell)\n            this.indicatorContainer.addClass('loading-indicator-container size-small')\n        }\n    }\n\n    DropdownEditor.prototype.createPlaceholder = function(select) {\n        var placeholder = this.propertyDefinition.placeholder || this.propertyDefinition.emptyOption\n\n        var isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0\n\n        if (placeholder !== undefined && !isTouchDevice) {\n            this.createOption(select, null, null)\n        }\n\n        if (placeholder !== undefined && isTouchDevice) {\n            this.createOption(select, placeholder, null)\n        }\n    }\n\n    //\n    // Helpers\n    //\n\n    DropdownEditor.prototype.getSelect = function() {\n        return this.containerCell.querySelector('select')\n    }\n\n    DropdownEditor.prototype.clearOptions = function(select) {\n        while (select.firstChild) {\n            select.removeChild(select.firstChild)\n        }\n    }\n\n    DropdownEditor.prototype.hasOptionValue = function(select, value) {\n        var options = select.children\n\n        for (var i = 0, len = options.length; i < len; i++) {\n            if (options[i].value == value) {\n                return true\n            }\n        }\n\n        return false\n    }\n\n    DropdownEditor.prototype.normalizeValue = function(value) {\n        if (!this.propertyDefinition.booleanValues) {\n            return value\n        }\n\n        var str = String(value)\n\n        if (str.length === 0) {\n            return ''\n        }\n\n        if (str === 'true') {\n            return true\n        }\n\n        return false\n    }\n\n    //\n    // Event handlers\n    //\n\n    DropdownEditor.prototype.registerHandlers = function() {\n        var select = this.getSelect()\n\n        $(select).on('change', this.proxy(this.onSelectionChange))\n    }\n\n    DropdownEditor.prototype.onSelectionChange = function() {\n        var select = this.getSelect()\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, this.normalizeValue(select.value), this.initialization)\n    }\n\n    DropdownEditor.prototype.onInspectorPropertyChanged = function(property) {\n        if (!this.propertyDefinition.depends || this.propertyDefinition.depends.indexOf(property) === -1) {\n            return\n        }\n\n        var dependencyValues = this.getDependencyValues()\n\n        if (this.prevDependencyValues === undefined || this.prevDependencyValues != dependencyValues) {\n            this.loadDynamicOptions()\n        }\n    }\n\n    DropdownEditor.prototype.onExternalPropertyEditorHidden = function() {\n        if (this.dynamicOptions) {\n            this.loadDynamicOptions(false)\n        }\n    }\n\n    //\n    // Editor API methods\n    //\n\n    DropdownEditor.prototype.updateDisplayedValue = function(value) {\n        var select = this.getSelect()\n\n        select.value = value\n    }\n\n    DropdownEditor.prototype.getUndefinedValue = function() {\n        // Return default value if the default value is defined\n        if (this.propertyDefinition.default !== undefined) {\n            return this.propertyDefinition.default\n        }\n\n        // Return undefined if there's a placeholder value\n        if (this.propertyDefinition.placeholder !== undefined) {\n            return undefined\n        }\n\n        // Otherwise - return the first value in the list\n        var select = this.getSelect()\n\n        if (select) {\n            return this.normalizeValue(select.value)\n        }\n\n        return undefined\n    }\n\n    DropdownEditor.prototype.isEmptyValue = function(value) {\n        if (this.propertyDefinition.booleanValues) {\n            if (value === '') {\n                return true\n            }\n\n            return false\n        }\n\n        return BaseProto.isEmptyValue.call(this, value)\n    }\n\n    //\n    // Disposing\n    //\n\n    DropdownEditor.prototype.destroyCustomSelect = function() {\n        var $select = $(this.getSelect())\n\n        if ($select.data('select2') != null) {\n            $select.select2('destroy')\n        }\n    }\n\n    DropdownEditor.prototype.unregisterHandlers = function() {\n        var select = this.getSelect()\n\n        $(select).off('change', this.proxy(this.onSelectionChange))\n    }\n\n    //\n    // Static options\n    //\n\n    DropdownEditor.prototype.loadStaticOptions = function(select) {\n        var value = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        this.createPlaceholder(select)\n\n        this.createOptions(select, this.propertyDefinition.options)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        select.value = value\n    }\n\n    //\n    // Dynamic options\n    //\n\n    DropdownEditor.prototype.loadDynamicOptions = function(initialization) {\n        var currentValue = this.inspector.getPropertyValue(this.propertyDefinition.property),\n            data = this.getRootSurface().getValues(),\n            self = this,\n            $form = $(this.getSelect()).closest('form'),\n            dependents = this.inspector.findDependentProperties(this.propertyDefinition.property)\n\n        if (currentValue === undefined) {\n            currentValue = this.propertyDefinition.default\n        }\n\n        var callback = function dropdownOptionsRequestDoneClosure(data) {\n            self.hideLoadingIndicator();\n            self.optionsRequestDone(data, currentValue, true);\n\n            if (dependents.length > 0 && self.inspector) {\n                for (var i in dependents) {\n                    var editor = self.inspector.findPropertyEditor(dependents[i])\n                    if (editor && typeof editor.onInspectorPropertyChanged === 'function') {\n                        editor.onInspectorPropertyChanged(self.propertyDefinition.property)\n                    }\n                }\n            }\n        }\n\n        if (this.propertyDefinition.depends) {\n            this.saveDependencyValues();\n        }\n\n        data['inspectorProperty'] = this.getPropertyPath();\n        data['inspectorClassName'] = this.inspector.options.inspectorClass;\n\n        this.showLoadingIndicator();\n\n        if (this.triggerGetOptions(data, callback) === false) {\n            return;\n        }\n\n        $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), {\n            data: data,\n            progressBar: false\n        })\n        .done(callback).always(this.proxy(this.hideLoadingIndicator));\n    }\n\n    DropdownEditor.prototype.triggerGetOptions = function(values, callback) {\n        var $inspectable = this.getInspectableElement()\n        if (!$inspectable) {\n            return true\n        }\n\n        var optionsEvent = $.Event('dropdownoptions.oc.inspector')\n\n        $inspectable.trigger(optionsEvent, [{\n            values: values,\n            callback: callback,\n            property: this.inspector.getPropertyPath(this.propertyDefinition.property),\n            propertyDefinition: this.propertyDefinition\n        }])\n\n        if (optionsEvent.isDefaultPrevented()) {\n            return false\n        }\n\n        return true\n    }\n\n    DropdownEditor.prototype.saveDependencyValues = function() {\n        this.prevDependencyValues = this.getDependencyValues()\n    }\n\n    DropdownEditor.prototype.getDependencyValues = function() {\n        var result = ''\n\n        for (var i = 0, len = this.propertyDefinition.depends.length; i < len; i++) {\n            var property = this.propertyDefinition.depends[i],\n                value = this.inspector.getPropertyValue(property)\n\n            if (value === undefined) {\n                value = '';\n            }\n\n            result += property + ':' + value + '-'\n        }\n\n        return result\n    }\n\n    DropdownEditor.prototype.showLoadingIndicator = function() {\n        if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) {\n            this.indicatorContainer.loadIndicator()\n        }\n    }\n\n    DropdownEditor.prototype.hideLoadingIndicator = function() {\n        if (this.isDisposed()) {\n            return\n        }\n\n        if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) {\n            this.indicatorContainer.loadIndicator('hide')\n            this.indicatorContainer.loadIndicator('destroy')\n        }\n    }\n\n    DropdownEditor.prototype.optionsRequestDone = function(data, currentValue, initialization) {\n        if (this.isDisposed()) {\n            // Handle the case when the asynchronous request finishes after\n            // the editor is disposed\n            return\n        }\n\n        var select = this.getSelect()\n\n        // Without destroying and recreating the custom select\n        // there could be detached DOM nodes.\n        this.destroyCustomSelect()\n        this.clearOptions(select)\n        this.initCustomSelect()\n\n        this.createPlaceholder(select)\n\n        if (data.options) {\n            for (var i = 0, len = data.options.length; i < len; i++) {\n               this.createOption(select, data.options[i].title, data.options[i].value)\n            }\n        }\n\n        if (this.hasOptionValue(select, currentValue)) {\n            select.value = currentValue\n        }\n        else {\n            select.selectedIndex = this.propertyDefinition.placeholder === undefined ? 0 : -1\n        }\n\n        this.initialization = initialization\n        $(select).trigger('change')\n        this.initialization = false\n    }\n\n    $.oc.inspector.propertyEditors.dropdown = DropdownEditor\n}(window.jQuery);\n\n;\n/*\n * Base class for Inspector editors that create popups.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var PopupBase = function(inspector, propertyDefinition, containerCell, group) {\n        this.popup = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    PopupBase.prototype = Object.create(BaseProto)\n    PopupBase.prototype.constructor = Base\n\n    PopupBase.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.popup = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    PopupBase.prototype.build = function() {\n        var link = document.createElement('a')\n\n        $.oc.foundation.element.addClass(link, 'trigger')\n        link.setAttribute('href', '#')\n        this.setLinkText(link)\n\n        $.oc.foundation.element.addClass(this.containerCell, 'trigger-cell')\n\n        this.containerCell.appendChild(link)\n    }\n\n    PopupBase.prototype.setLinkText = function(link, value) {\n    }\n\n    PopupBase.prototype.getPopupContent = function() {\n        return '<form>                                                                                     \\\n                <div class=\"modal-header\">                                                                 \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                              \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-body\">                                                                   \\\n                    <div class=\"form-group\">                                                               \\\n                    </div>                                                                                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-footer\">                                                                 \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button> \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button>  \\\n                </div>                                                                                     \\\n            </form>'\n    }\n\n    PopupBase.prototype.updateDisplayedValue = function(value) {\n        this.setLinkText(this.getLink(), value)\n    }\n\n    PopupBase.prototype.registerHandlers = function() {\n        var link = this.getLink(),\n            $link = $(link)\n\n        link.addEventListener('click', this.proxy(this.onTriggerClick))\n        $link.on('shown.oc.popup', this.proxy(this.onPopupShown))\n        $link.on('hidden.oc.popup', this.proxy(this.onPopupHidden))\n    }\n\n    PopupBase.prototype.unregisterHandlers = function() {\n        var link = this.getLink(),\n            $link = $(link)\n\n        link.removeEventListener('click', this.proxy(this.onTriggerClick))\n        $link.off('shown.oc.popup', this.proxy(this.onPopupShown))\n        $link.off('hidden.oc.popup', this.proxy(this.onPopupHidden))\n    }\n\n    PopupBase.prototype.getLink = function() {\n        return this.containerCell.querySelector('a.trigger')\n    }\n\n    PopupBase.prototype.configurePopup = function(popup) {\n    }\n\n    PopupBase.prototype.handleSubmit = function($form) {\n    }\n\n    PopupBase.prototype.hidePopup = function() {\n        $(this.getLink()).popup('hide')\n    }\n\n    PopupBase.prototype.onTriggerClick = function(ev) {\n        $.oc.foundation.event.stop(ev)\n\n        var content = this.getPopupContent()\n\n        content = content.replace('{{property}}', this.propertyDefinition.title)\n\n        $(ev.target).popup({\n            content: content\n        })\n\n        return false\n    }\n\n    PopupBase.prototype.onPopupShown = function(ev, link, popup) {\n        $(popup).on('submit.inspector', 'form', this.proxy(this.onSubmit))\n\n        this.popup = popup.get(0)\n\n        this.configurePopup(popup)\n\n        this.getRootSurface().popupDisplayed()\n    }\n\n    PopupBase.prototype.onPopupHidden = function(ev, link, popup) {\n        $(popup).off('.inspector', 'form', this.proxy(this.onSubmit))\n        this.popup = null\n\n        this.getRootSurface().popupHidden()\n    }\n\n    PopupBase.prototype.onSubmit = function(ev) {\n        ev.preventDefault()\n\n        if (this.handleSubmit($(ev.target)) === false) {\n            return false\n        }\n\n        this.setLinkText(this.getLink())\n        this.hidePopup()\n        return false\n    }\n\n    $.oc.inspector.propertyEditors.popupBase = PopupBase\n}(window.jQuery);\n;\n/*\n * Inspector text editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.popupBase,\n        BaseProto = Base.prototype\n\n    var TextEditor = function(inspector, propertyDefinition, containerCell, group) {\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    TextEditor.prototype = Object.create(BaseProto)\n    TextEditor.prototype.constructor = Base\n\n    TextEditor.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        if (!value) {\n            value = this.propertyDefinition.placeholder\n            $.oc.foundation.element.addClass(link, 'cell-placeholder')\n        }\n        else {\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n        }\n\n        if (typeof value === 'string') {\n            value = value.replace(/(?:\\r\\n|\\r|\\n)/g, ' ');\n            value = $.trim(value)\n            value = value.substring(0, 300);\n        }\n\n        link.textContent = value\n    }\n\n    TextEditor.prototype.getPopupContent = function() {\n        return '<form>                                                                                     \\\n                <div class=\"modal-header\">                                                                 \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                              \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-body\">                                                                   \\\n                    <div class=\"form-group\">                                                               \\\n                        <p class=\"inspector-field-comment\"></p>                                            \\\n                        <textarea class=\"form-control size-small field-textarea\" name=\"name\"></textarea>   \\\n                    </div>                                                                                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-footer\">                                                                 \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button> \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button> \\\n                </div>                                                                                     \\\n            </form>'\n    }\n\n    TextEditor.prototype.configureComment = function(popup) {\n        if (!this.propertyDefinition.description) {\n            return\n        }\n\n        var descriptionElement = $(popup).find('p.inspector-field-comment')\n        descriptionElement.text(this.propertyDefinition.description)\n    }\n\n    TextEditor.prototype.configurePopup = function(popup) {\n        var $textarea = $(popup).find('textarea'),\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (this.propertyDefinition.placeholder) {\n            $textarea.attr('placeholder', this.propertyDefinition.placeholder)\n        }\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        $textarea.val(value)\n        $textarea.focus()\n\n        this.configureComment(popup)\n    }\n\n    TextEditor.prototype.handleSubmit = function($form) {\n        var $textarea = $form.find('textarea'),\n            link = this.getLink(),\n            value = $.trim($textarea.val())\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, value)\n    }\n\n    $.oc.inspector.propertyEditors.text = TextEditor\n}(window.jQuery);\n;\n/*\n * Inspector set editor class.\n *\n * This class uses $.oc.inspector.propertyEditors.checkbox editor.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var SetEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.editors = []\n        this.loadedItems = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    SetEditor.prototype = Object.create(BaseProto)\n    SetEditor.prototype.constructor = Base\n\n    SetEditor.prototype.init = function() {\n        this.initControlGroup()\n\n        BaseProto.init.call(this)\n    }\n\n    SetEditor.prototype.dispose = function() {\n        this.disposeEditors()\n        this.disposeControls()\n\n        this.editors = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    //\n    // Building\n    //\n\n    SetEditor.prototype.build = function() {\n        var link = document.createElement('a')\n\n        $.oc.foundation.element.addClass(link, 'trigger')\n        link.setAttribute('href', '#')\n        this.setLinkText(link)\n\n        $.oc.foundation.element.addClass(this.containerCell, 'trigger-cell')\n\n        this.containerCell.appendChild(link)\n\n        if (this.propertyDefinition.items !== undefined) {\n            this.loadStaticItems()\n        }\n        else {\n            this.loadDynamicItems()\n        }\n    }\n\n    SetEditor.prototype.loadStaticItems = function() {\n        var itemArray = []\n\n        for (var itemValue in this.propertyDefinition.items) {\n            itemArray.push({\n                value: itemValue,\n                title: this.propertyDefinition.items[itemValue]\n            })\n        }\n\n        for (var i = itemArray.length-1; i >=0; i--) {\n            this.buildItemEditor(itemArray[i].value, itemArray[i].title)\n        }\n    }\n\n    SetEditor.prototype.setLinkText = function(link, value) {\n        var value = (value !== undefined && value !== null) ? value\n                : this.getNormalizedValue(),\n            text = '[ ]'\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        if (value !== undefined && value.length !== undefined && value.length > 0 && typeof value !== 'string') {\n            var textValues = []\n            for (var i = 0, len = value.length; i < len; i++) {\n                textValues.push(this.valueToText(value[i]))\n            }\n\n            text = '[' + textValues.join(', ') + ']'\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n        }\n        else {\n            text = this.propertyDefinition.placeholder\n\n            if ((typeof text === 'string' && text.length == 0) || text === undefined) {\n                text = '[ ]'\n            }\n            $.oc.foundation.element.addClass(link, 'cell-placeholder')\n        }\n\n        link.textContent = text\n    }\n\n    SetEditor.prototype.buildItemEditor = function(value, text) {\n        var property = {\n                title: text,\n                itemType: 'property',\n                groupIndex: this.group.getGroupIndex()\n            },\n            newRow = this.createGroupedRow(property),\n            currentRow = this.containerCell.parentNode,\n            tbody = this.containerCell.parentNode.parentNode, // row / tbody\n            cell = document.createElement('td')\n\n        this.buildCheckbox(cell, value, text)\n\n        newRow.appendChild(cell)\n        tbody.insertBefore(newRow, currentRow.nextSibling)\n    }\n\n    SetEditor.prototype.buildCheckbox = function(cell, value, title) {\n        var property = {\n                property: value,\n                title: title,\n                default: this.isCheckedByDefault(value)\n            },\n            editor = new $.oc.inspector.propertyEditors.checkbox(this, property, cell, this.group)\n\n        this.editors.push[editor]\n    }\n\n    SetEditor.prototype.isCheckedByDefault = function(value) {\n        if (!this.propertyDefinition.default) {\n            return false\n        }\n\n        return this.propertyDefinition.default.indexOf(value) > -1\n    }\n\n    //\n    // Dynamic items\n    //\n\n    SetEditor.prototype.showLoadingIndicator = function() {\n        $(this.getLink()).loadIndicator()\n    }\n\n    SetEditor.prototype.hideLoadingIndicator = function() {\n        if (this.isDisposed()) {\n            return\n        }\n\n        var $link = $(this.getLink())\n\n        $link.loadIndicator('hide')\n        $link.loadIndicator('destroy')\n    }\n\n    SetEditor.prototype.loadDynamicItems = function() {\n        var link = this.getLink(),\n            data = this.inspector.getValues(),\n            $form = $(link).closest('form');\n\n        $.oc.foundation.element.addClass(link, 'loading-indicator-container size-small');\n        this.showLoadingIndicator();\n\n        data['inspectorProperty'] = this.getPropertyPath();\n        data['inspectorClassName'] = this.inspector.options.inspectorClass;\n\n        $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), {\n            data: data,\n            progressBar: false\n        })\n        .done(this.proxy(this.itemsRequestDone))\n        .always(this.proxy(this.hideLoadingIndicator));\n    }\n\n    SetEditor.prototype.itemsRequestDone = function(data, currentValue, initialization) {\n        if (this.isDisposed()) {\n            // Handle the case when the asynchronous request finishes after\n            // the editor is disposed\n            return\n        }\n\n        this.loadedItems = {}\n\n        if (data.options) {\n            for (var i = data.options.length-1; i >= 0; i--) {\n                this.buildItemEditor(data.options[i].value, data.options[i].title)\n\n                this.loadedItems[data.options[i].value] = data.options[i].title\n            }\n        }\n\n        this.setLinkText(this.getLink())\n    }\n\n    //\n    // Helpers\n    //\n\n    SetEditor.prototype.getLink = function() {\n        return this.containerCell.querySelector('a.trigger')\n    }\n\n    SetEditor.prototype.getItemsSource = function() {\n        if (this.propertyDefinition.items !== undefined) {\n            return this.propertyDefinition.items\n        }\n\n        return this.loadedItems\n    }\n\n    SetEditor.prototype.valueToText = function(value) {\n        var source = this.getItemsSource()\n\n        if (!source) {\n            return value\n        }\n\n        for (var itemValue in source) {\n            if (itemValue == value) {\n                return source[itemValue]\n            }\n        }\n\n        return value\n    }\n\n    /*\n     * Removes items that don't exist in the defined items from\n     * the value.\n     */\n    SetEditor.prototype.cleanUpValue = function(value) {\n        if (!value) {\n            return value\n        }\n\n        var result = [],\n            source = this.getItemsSource()\n\n        for (var i = 0, len = value.length; i < len; i++) {\n            var currentValue = value[i]\n\n            if (source[currentValue] !== undefined) {\n                result.push(currentValue)\n            }\n        }\n\n        return result\n    }\n\n    SetEditor.prototype.getNormalizedValue = function() {\n        var value = this.inspector.getPropertyValue(this.propertyDefinition.property);\n\n        if (value === null) {\n            value = undefined;\n        }\n\n        if (value === undefined) {\n            return value;\n        }\n\n        if (value.length === undefined || typeof value === 'string') {\n            return undefined;\n        }\n\n        return value;\n    }\n\n    //\n    // Editor API methods\n    //\n\n    SetEditor.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    SetEditor.prototype.isGroupedEditor = function() {\n        return true\n    }\n\n    //\n    // Inspector API methods\n    //\n    // This editor creates checkbox editor and acts as a container Inspector\n    // for them. The methods in this section emulate and proxy some functionality\n    // of the Inspector.\n    //\n\n    SetEditor.prototype.getPropertyValue = function(checkboxValue) {\n        // When a checkbox requests the property value, we return\n        // TRUE if the checkbox value is listed in the current values of\n        // the set.\n        // For example, the available set items are [create, update], the\n        // current set value is [create] and checkboxValue is \"create\".\n        // The result of the method will be TRUE.\n\n        var value = this.getNormalizedValue();\n\n        if (value === undefined) {\n            return this.isCheckedByDefault(checkboxValue);\n        }\n\n        if (!value) {\n            return false;\n        }\n\n        return value.indexOf(checkboxValue) > -1;\n    }\n\n    SetEditor.prototype.setPropertyValue = function(checkboxValue, isChecked) {\n        // In this method the Set Editor mimics the Surface.\n        // It acts as a parent surface for the children checkboxes,\n        // watching changes in them and updating the link text.\n\n        var currentValue = this.getNormalizedValue()\n\n        if (currentValue === undefined) {\n            currentValue = this.propertyDefinition.default\n        }\n\n        if (!currentValue) {\n            currentValue = []\n        }\n\n        var resultValue = [],\n            items = this.getItemsSource()\n\n        for (var itemValue in items) {\n            if (itemValue !== checkboxValue) {\n                if (currentValue.indexOf(itemValue) !== -1) {\n                    resultValue.push(itemValue)\n                }\n            }\n            else {\n                if (isChecked) {\n                    resultValue.push(itemValue);\n                }\n            }\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, this.cleanUpValue(resultValue));\n        this.setLinkText(this.getLink());\n    }\n\n    SetEditor.prototype.generateSequencedId = function() {\n        return this.inspector.generateSequencedId()\n    }\n\n    //\n    // Disposing\n    //\n\n    SetEditor.prototype.disposeEditors = function() {\n        for (var i = 0, len = this.editors.length; i < len; i++) {\n            var editor = this.editors[i]\n\n            editor.dispose()\n        }\n    }\n\n    SetEditor.prototype.disposeControls = function() {\n        var link = this.getLink()\n\n        if (this.propertyDefinition.items === undefined) {\n            $(link).loadIndicator('destroy')\n        }\n\n        link.parentNode.removeChild(link)\n    }\n\n    $.oc.inspector.propertyEditors.set = SetEditor\n}(window.jQuery);\n;\n/*\n * Inspector object list editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var ObjectListEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.currentRowInspector = null\n        this.popup = null\n\n        if (propertyDefinition.titleProperty === undefined) {\n            throw new Error('The titleProperty property should be specified in the objectList editor configuration. Property: ' + propertyDefinition.property)\n        }\n\n        if (propertyDefinition.itemProperties === undefined) {\n            throw new Error('The itemProperties property should be specified in the objectList editor configuration. Property: ' + propertyDefinition.property)\n        }\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    ObjectListEditor.prototype = Object.create(BaseProto)\n    ObjectListEditor.prototype.constructor = Base\n\n    ObjectListEditor.prototype.init = function() {\n        if (this.isKeyValueMode()) {\n            var keyProperty = this.getKeyProperty()\n\n            if (!keyProperty) {\n                throw new Error('Object list key property ' + this.propertyDefinition.keyProperty\n                    + ' is not defined in itemProperties. Property: ' + this.propertyDefinition.property)\n            }\n        }\n\n        BaseProto.init.call(this)\n    }\n\n    ObjectListEditor.prototype.dispose = function() {\n        this.unregisterHandlers()\n        this.removeControls()\n\n        this.currentRowInspector = null\n        this.popup = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    ObjectListEditor.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    //\n    // Building\n    //\n\n    ObjectListEditor.prototype.build = function() {\n        var link = document.createElement('a')\n\n        $.oc.foundation.element.addClass(link, 'trigger')\n        link.setAttribute('href', '#')\n        this.setLinkText(link)\n\n        $.oc.foundation.element.addClass(this.containerCell, 'trigger-cell')\n\n        this.containerCell.appendChild(link)\n    }\n\n    ObjectListEditor.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined && value !== null ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === null) {\n            value = undefined\n        }\n\n        if (value === undefined) {\n            var placeholder = this.propertyDefinition.placeholder\n\n            if (placeholder !== undefined) {\n                $.oc.foundation.element.addClass(link, 'cell-placeholder')\n                link.textContent = placeholder\n            }\n            else {\n                link.textContent = 'Items: 0'\n            }\n        }\n        else {\n            var itemCount = 0\n\n            if (!this.isKeyValueMode()) {\n                if (value.length === undefined) {\n                    throw new Error('Object list value should be an array. Property: ' + this.propertyDefinition.property)\n                }\n\n                itemCount = value.length\n            }\n            else {\n                if (typeof value !== 'object') {\n                    throw new Error('Object list value should be an object. Property: ' + this.propertyDefinition.property)\n                }\n\n                itemCount = this.getValueKeys(value).length\n            }\n\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n            link.textContent = 'Items: ' + itemCount\n        }\n    }\n\n    ObjectListEditor.prototype.getPopupContent = function() {\n        return '<form>                                                                                     \\\n                <div class=\"modal-header\">                                                                 \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                              \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                 \\\n                </div>                                                                                     \\\n                <div>                                                                                      \\\n                    <div class=\"layout inspector-columns-editor\">                                          \\\n                        <div class=\"layout-row\">                                                           \\\n                            <div class=\"layout-cell items-column\">                                         \\\n                                <div class=\"layout-relative\">                                              \\\n                                    <div class=\"layout\">                                                   \\\n                                        <div class=\"layout-row min-size\">                                  \\\n                                            <div class=\"control-toolbar toolbar-padded\">                   \\\n                                                <div class=\"toolbar-item\">                                 \\\n                                                    <div class=\"btn-group\">                                \\\n                                                        <button type=\"button\" class=\"btn btn-primary       \\\n                                                            oc-icon-plus\"                                  \\\n                                                            data-cmd=\"create-item\">'+oc.lang.get('inspector.add')+'</button> \\\n                                                        <button type=\"button\" class=\"btn btn-default       \\\n                                                            empty oc-icon-trash\"                         \\\n                                                            data-cmd=\"delete-item\"></button>               \\\n                                                    </div>                                                 \\\n                                                </div>                                                     \\\n                                            </div>                                                         \\\n                                        </div>                                                             \\\n                                        <div class=\"layout-row\">                                           \\\n                                            <div class=\"layout-cell\">                                      \\\n                                                <div class=\"layout-relative\">                              \\\n                                                    <div class=\"layout-absolute\">                          \\\n                                                        <div class=\"control-scrollpad\"                     \\\n                                                            data-control=\"scrollpad\">                      \\\n                                                            <div class=\"scroll-wrapper\">                   \\\n                                                                <table class=\"table data                   \\\n                                                                    no-offset-bottom                       \\\n                                                                    inspector-table-list\">                 \\\n                                                                </table>                                   \\\n                                                            </div>                                         \\\n                                                        </div>                                             \\\n                                                    </div>                                                 \\\n                                                </div>                                                     \\\n                                            </div>                                                         \\\n                                        </div>                                                             \\\n                                    </div>                                                                 \\\n                                </div>                                                                     \\\n                            </div>                                                                         \\\n                            <div class=\"layout-cell\">                                                      \\\n                                <div class=\"layout-relative\">                                              \\\n                                    <div class=\"layout-absolute\">                                          \\\n                                        <div class=\"control-scrollpad\" data-control=\"scrollpad\">           \\\n                                            <div class=\"scroll-wrapper inspector-wrapper\">                 \\\n                                                <div data-inspector-container>                             \\\n                                                </div>                                                     \\\n                                            </div>                                                         \\\n                                        </div>                                                             \\\n                                    </div>                                                                 \\\n                                </div>                                                                     \\\n                            </div>                                                                         \\\n                        </div>                                                                             \\\n                    </div>                                                                                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-footer\">                                                                 \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button> \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button> \\\n                </div>                                                                                     \\\n            </form>';\n    }\n\n    ObjectListEditor.prototype.buildPopupContents = function(popup) {\n        this.buildItemsTable(popup)\n    }\n\n    ObjectListEditor.prototype.buildItemsTable = function(popup) {\n        var table = popup.querySelector('table'),\n            tbody = document.createElement('tbody'),\n            items = this.inspector.getPropertyValue(this.propertyDefinition.property),\n            titleProperty = this.propertyDefinition.titleProperty\n\n        if (items === undefined || this.getValueKeys(items).length === 0) {\n            var row = this.buildEmptyRow()\n\n            tbody.appendChild(row)\n        }\n        else {\n            var firstRow = undefined\n\n            for (var key in items) {\n                var item = items[key],\n                    itemInspectorValue = this.addKeyProperty(key, item),\n                    itemText = item[titleProperty],\n                    row = this.buildTableRow(itemText, 'rowlink')\n\n                row.setAttribute('data-inspector-values', JSON.stringify(itemInspectorValue))\n                tbody.appendChild(row)\n\n                if (firstRow === undefined) {\n                    firstRow = row\n                }\n            }\n        }\n\n        table.appendChild(tbody)\n\n        if (firstRow !== undefined) {\n            this.selectRow(firstRow, true)\n        }\n\n        this.updateScrollpads()\n    }\n\n    ObjectListEditor.prototype.buildEmptyRow = function() {\n        return this.buildTableRow('No items found', 'no-data', 'nolink')\n    }\n\n    ObjectListEditor.prototype.removeEmptyRow = function() {\n        var tbody = this.getTableBody(),\n            row = tbody.querySelector('tr.no-data')\n\n        if (row) {\n            tbody.removeChild(row)\n        }\n    }\n\n    ObjectListEditor.prototype.buildTableRow = function(text, rowClass, cellClass) {\n        var row = document.createElement('tr'),\n            cell = document.createElement('td')\n\n        cell.textContent = text\n\n        if (rowClass !== undefined) {\n            $.oc.foundation.element.addClass(row, rowClass)\n        }\n\n        if (cellClass !== undefined) {\n            $.oc.foundation.element.addClass(cell, cellClass)\n        }\n\n        row.appendChild(cell)\n        return row\n    }\n\n    ObjectListEditor.prototype.updateScrollpads = function() {\n        $('.control-scrollpad', this.popup).scrollpad('update')\n    }\n\n    //\n    // Built-in Inspector management\n    //\n\n    ObjectListEditor.prototype.selectRow = function(row, forceSelect) {\n        var tbody = row.parentNode,\n            inspectorContainer = this.getInspectorContainer(),\n            selectedRow = this.getSelectedRow()\n\n        if (selectedRow === row && !forceSelect) {\n            return\n        }\n\n        if (selectedRow) {\n            if (!this.validateKeyValue()) {\n                return\n            }\n\n            if (this.currentRowInspector) {\n                if (!this.currentRowInspector.validate()) {\n                    return\n                }\n            }\n\n            this.applyDataToRow(selectedRow)\n            $.oc.foundation.element.removeClass(selectedRow, 'active')\n        }\n\n        this.disposeInspector()\n\n        $.oc.foundation.element.addClass(row, 'active')\n\n        this.createInspectorForRow(row, inspectorContainer)\n    }\n\n    ObjectListEditor.prototype.createInspectorForRow = function(row, inspectorContainer) {\n        var dataStr = row.getAttribute('data-inspector-values')\n\n        if (dataStr === undefined || typeof dataStr !== 'string') {\n            throw new Error('Values not found for the selected row.')\n        }\n\n        var properties = this.propertyDefinition.itemProperties,\n            values = JSON.parse(dataStr),\n            options = {\n                enableExternalParameterEditor: false,\n                onChange: this.proxy(this.onInspectorDataChange),\n                inspectorClass: this.inspector.options.inspectorClass\n            }\n\n        this.currentRowInspector = new $.oc.inspector.surface(inspectorContainer, properties, values,\n            $.oc.inspector.helpers.generateElementUniqueId(inspectorContainer), options)\n    }\n\n    ObjectListEditor.prototype.disposeInspector = function() {\n        $.oc.foundation.controlUtils.disposeControls(this.popup.querySelector('[data-inspector-container]'))\n        this.currentRowInspector = null\n    }\n\n    ObjectListEditor.prototype.applyDataToRow = function(row) {\n        if (this.currentRowInspector === null) {\n            return\n        }\n\n        var data = this.currentRowInspector.getValues()\n        row.setAttribute('data-inspector-values', JSON.stringify(data))\n    }\n\n    ObjectListEditor.prototype.updateRowText = function(property, value) {\n        var selectedRow = this.getSelectedRow()\n\n        if (!selectedRow) {\n            throw new Exception('A row is not found for the updated data')\n        }\n\n        if (property !== this.propertyDefinition.titleProperty) {\n            return\n        }\n\n        value = $.trim(value)\n\n        if (value.length === 0) {\n            value = '[No title]'\n            $.oc.foundation.element.addClass(selectedRow, 'disabled')\n        }\n        else {\n            $.oc.foundation.element.removeClass(selectedRow, 'disabled')\n        }\n\n        selectedRow.firstChild.textContent = value\n    }\n\n    ObjectListEditor.prototype.getSelectedRow = function() {\n        if (!this.popup) {\n            throw new Error('Trying to get selected row without a popup reference.')\n        }\n\n        var rows = this.getTableBody().children\n\n        for (var i = 0, len = rows.length; i < len; i++) {\n            if ($.oc.foundation.element.hasClass(rows[i], 'active')) {\n                return rows[i]\n            }\n        }\n\n        return null\n    }\n\n    ObjectListEditor.prototype.createItem = function() {\n        var selectedRow = this.getSelectedRow()\n\n        if (selectedRow) {\n            if (!this.validateKeyValue()) {\n                return\n            }\n\n            if (this.currentRowInspector) {\n                if (!this.currentRowInspector.validate()) {\n                    return\n                }\n            }\n\n            this.applyDataToRow(selectedRow)\n            $.oc.foundation.element.removeClass(selectedRow, 'active')\n        }\n\n        this.disposeInspector()\n\n        var title = 'New item',\n            row = this.buildTableRow(title, 'rowlink active'),\n            tbody = this.getTableBody(),\n            data = {}\n\n        data[this.propertyDefinition.titleProperty] = title\n\n        row.setAttribute('data-inspector-values', JSON.stringify(data))\n        tbody.appendChild(row)\n\n        this.selectRow(row, true)\n\n        this.removeEmptyRow()\n        this.updateScrollpads()\n    }\n\n    ObjectListEditor.prototype.deleteItem = function() {\n        var selectedRow = this.getSelectedRow()\n\n        if (!selectedRow) {\n            return\n        }\n\n        var nextRow = selectedRow.nextElementSibling,\n            prevRow = selectedRow.previousElementSibling,\n            tbody = this.getTableBody()\n\n        this.disposeInspector()\n        tbody.removeChild(selectedRow)\n\n        var newSelectedRow = nextRow ? nextRow : prevRow\n\n        if (newSelectedRow) {\n            this.selectRow(newSelectedRow)\n        }\n        else {\n            tbody.appendChild(this.buildEmptyRow())\n        }\n\n        this.updateScrollpads()\n    }\n\n    ObjectListEditor.prototype.applyDataToParentInspector = function() {\n        var selectedRow = this.getSelectedRow(),\n            tbody = this.getTableBody(),\n            dataRows = tbody.querySelectorAll('tr[data-inspector-values]'),\n            link = this.getLink(),\n            result = this.getEmptyValue()\n\n        if (selectedRow) {\n            if (!this.validateKeyValue()) {\n                return\n            }\n\n            if (this.currentRowInspector) {\n                if (!this.currentRowInspector.validate()) {\n                    return\n                }\n            }\n\n            this.applyDataToRow(selectedRow)\n        }\n\n        for (var i = 0, len = dataRows.length; i < len; i++) {\n            var dataRow = dataRows[i],\n                rowData = JSON.parse(dataRow.getAttribute('data-inspector-values'))\n\n            if (!this.isKeyValueMode()) {\n                result.push(rowData)\n            }\n            else {\n                var rowKey = rowData[this.propertyDefinition.keyProperty]\n\n                result[rowKey] = this.removeKeyProperty(rowData)\n            }\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, result)\n        this.setLinkText(link, result)\n\n        $(link).popup('hide')\n        return false\n    }\n\n    ObjectListEditor.prototype.validateKeyValue = function() {\n        if (!this.isKeyValueMode()) {\n            return true\n        }\n\n        if (this.currentRowInspector === null) {\n            return true\n        }\n\n        var data = this.currentRowInspector.getValues(),\n            keyProperty = this.propertyDefinition.keyProperty\n\n        if (data[keyProperty] === undefined) {\n            throw new Error('Key property ' + keyProperty + ' is not found in the Inspector data. Property: ' + this.propertyDefinition.property)\n        }\n\n        var keyPropertyValue = data[keyProperty],\n            keyPropertyTitle = this.getKeyProperty().title\n\n        if (typeof keyPropertyValue !== 'string') {\n            throw new Error('Key property (' + keyProperty + ') value should be a string. Property: ' + this.propertyDefinition.property)\n        }\n\n        if ($.trim(keyPropertyValue).length === 0) {\n            $.oc.flashMsg({text: 'The value of key property ' + keyPropertyTitle + ' cannot be empty.', 'class': 'error', 'interval': 3})\n            return false\n        }\n\n        var selectedRow = this.getSelectedRow(),\n            tbody = this.getTableBody(),\n            dataRows = tbody.querySelectorAll('tr[data-inspector-values]')\n\n        for (var i = 0, len = dataRows.length; i < len; i++) {\n            var dataRow = dataRows[i],\n                rowData = JSON.parse(dataRow.getAttribute('data-inspector-values'))\n\n            if (selectedRow == dataRow) {\n                continue\n            }\n\n            if (rowData[keyProperty] == keyPropertyValue) {\n                $.oc.flashMsg({text: 'The value of key property ' + keyPropertyTitle + ' should be unique.', 'class': 'error', 'interval': 3})\n                return false\n            }\n        }\n\n        return true\n    }\n\n    //\n    // Helpers\n    //\n\n    ObjectListEditor.prototype.getLink = function() {\n        return this.containerCell.querySelector('a.trigger')\n    }\n\n    ObjectListEditor.prototype.getPopupFormElement = function() {\n        var form = this.popup.querySelector('form')\n\n        if (!form) {\n            this.throwError('Cannot find form element in the popup window.')\n        }\n\n        return form\n    }\n\n    ObjectListEditor.prototype.getInspectorContainer = function() {\n        return this.popup.querySelector('div[data-inspector-container]')\n    }\n\n    ObjectListEditor.prototype.getTableBody = function() {\n        return this.popup.querySelector('table.inspector-table-list tbody')\n    }\n\n    ObjectListEditor.prototype.isKeyValueMode = function() {\n        return this.propertyDefinition.keyProperty !== undefined\n    }\n\n    ObjectListEditor.prototype.getKeyProperty = function() {\n        for (var i = 0, len = this.propertyDefinition.itemProperties.length; i < len; i++) {\n            var property = this.propertyDefinition.itemProperties[i]\n\n            if (property.property == this.propertyDefinition.keyProperty) {\n                return property\n            }\n        }\n    }\n\n    ObjectListEditor.prototype.getValueKeys = function(value) {\n        var result = []\n\n        for (var key in value) {\n            result.push(key)\n        }\n\n        return result\n    }\n\n    ObjectListEditor.prototype.addKeyProperty = function(key, value) {\n        if (!this.isKeyValueMode()) {\n            return value\n        }\n\n        value[this.propertyDefinition.keyProperty] = key\n\n        return value\n    }\n\n    ObjectListEditor.prototype.removeKeyProperty = function(value) {\n        if (!this.isKeyValueMode()) {\n            return value\n        }\n\n        var result = value\n\n        if (result[this.propertyDefinition.keyProperty] !== undefined) {\n            delete result[this.propertyDefinition.keyProperty]\n        }\n\n        return result\n    }\n\n    ObjectListEditor.prototype.getEmptyValue = function() {\n        if (this.isKeyValueMode()) {\n            return {}\n        }\n        else {\n            return []\n        }\n    }\n\n    //\n    // Event handlers\n    //\n\n    ObjectListEditor.prototype.registerHandlers = function() {\n        var link = this.getLink(),\n            $link = $(link)\n\n        link.addEventListener('click', this.proxy(this.onTriggerClick))\n        $link.on('shown.oc.popup', this.proxy(this.onPopupShown))\n        $link.on('hidden.oc.popup', this.proxy(this.onPopupHidden))\n    }\n\n    ObjectListEditor.prototype.unregisterHandlers = function() {\n        var link = this.getLink(),\n            $link = $(link)\n\n        link.removeEventListener('click', this.proxy(this.onTriggerClick))\n        $link.off('shown.oc.popup', this.proxy(this.onPopupShown))\n        $link.off('hidden.oc.popup', this.proxy(this.onPopupHidden))\n    }\n\n    ObjectListEditor.prototype.onTriggerClick = function(ev) {\n        $.oc.foundation.event.stop(ev)\n\n        var content = this.getPopupContent()\n\n        content = content.replace('{{property}}', this.propertyDefinition.title)\n\n        $(ev.target).popup({\n            content: content\n        })\n\n        return false\n    }\n\n    ObjectListEditor.prototype.onPopupShown = function(ev, link, popup) {\n        $(popup).on('submit.inspector', 'form', this.proxy(this.onSubmit))\n        $(popup).on('click', 'tr.rowlink', this.proxy(this.onRowClick))\n        $(popup).on('click.inspector', '[data-cmd]', this.proxy(this.onCommand))\n\n        this.popup = popup.get(0)\n\n        this.buildPopupContents(this.popup)\n        this.getRootSurface().popupDisplayed()\n    }\n\n    ObjectListEditor.prototype.onPopupHidden = function(ev, link, popup) {\n        $(popup).off('.inspector', this.proxy(this.onSubmit))\n        $(popup).off('click', 'tr.rowlink', this.proxy(this.onRowClick))\n        $(popup).off('click.inspector', '[data-cmd]', this.proxy(this.onCommand))\n\n        this.disposeInspector()\n        $.oc.foundation.controlUtils.disposeControls(this.popup)\n\n        this.popup = null\n        this.getRootSurface().popupHidden()\n    }\n\n    ObjectListEditor.prototype.onSubmit = function(ev) {\n        this.applyDataToParentInspector()\n\n        ev.preventDefault()\n        return false\n    }\n\n    ObjectListEditor.prototype.onRowClick = function(ev) {\n        this.selectRow(ev.currentTarget)\n    }\n\n    ObjectListEditor.prototype.onInspectorDataChange = function(property, value) {\n        this.updateRowText(property, value)\n    }\n\n    ObjectListEditor.prototype.onCommand = function(ev) {\n        var command = ev.currentTarget.getAttribute('data-cmd')\n\n        switch (command) {\n            case 'create-item' :\n                this.createItem()\n            break;\n            case 'delete-item' :\n                this.deleteItem()\n            break;\n        }\n    }\n\n    //\n    // Disposing\n    //\n\n    ObjectListEditor.prototype.removeControls = function() {\n        if (this.popup) {\n            this.disposeInspector(this.popup)\n        }\n    }\n\n    $.oc.inspector.propertyEditors.objectList = ObjectListEditor\n}(window.jQuery);\n;\n/*\n * Inspector object editor class.\n *\n * This class uses other editors.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.base,\n        BaseProto = Base.prototype\n\n    var ObjectEditor = function(inspector, propertyDefinition, containerCell, group) {\n        if (propertyDefinition.properties === undefined) {\n            this.throwError('The properties property should be specified in the object editor configuration.')\n        }\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    ObjectEditor.prototype = Object.create(BaseProto)\n    ObjectEditor.prototype.constructor = Base\n\n    ObjectEditor.prototype.init = function() {\n        this.initControlGroup()\n\n        BaseProto.init.call(this)\n    }\n\n    //\n    // Building\n    //\n\n    ObjectEditor.prototype.build = function() {\n        var currentRow = this.containerCell.parentNode,\n            inspectorContainer = document.createElement('div'),\n            options = {\n                enableExternalParameterEditor: false,\n                onChange: this.proxy(this.onInspectorDataChange),\n                inspectorClass: this.inspector.options.inspectorClass\n            },\n            values = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (values === undefined) {\n            values = {}\n        }\n\n        this.childInspector = new $.oc.inspector.surface(inspectorContainer, \n            this.propertyDefinition.properties, \n            values, \n            this.inspector.getInspectorUniqueId() + '-' + this.propertyDefinition.property, \n            options,\n            this.inspector,\n            this.group,\n            this.propertyDefinition.property)\n\n        this.inspector.mergeChildSurface(this.childInspector, currentRow)\n    }\n\n    //\n    // Helpers\n    //\n\n    ObjectEditor.prototype.cleanUpValue = function(value) {\n        if (value === undefined || typeof value !== 'object') {\n            return undefined\n        }\n\n        if (this.propertyDefinition.ignoreIfPropertyEmpty === undefined) {\n            return value\n        }\n\n        return this.getValueOrRemove(value)\n    }\n\n    ObjectEditor.prototype.getValueOrRemove = function(value) {\n        if (this.propertyDefinition.ignoreIfPropertyEmpty === undefined) {\n            return value\n        }\n\n        var targetProperty = this.propertyDefinition.ignoreIfPropertyEmpty,\n            targetValue = value[targetProperty]\n\n        if (this.isEmptyValue(targetValue)) {\n            return $.oc.inspector.removedProperty\n        }\n\n        return value\n    }\n\n    //\n    // Editor API methods\n    //\n\n    ObjectEditor.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    ObjectEditor.prototype.isGroupedEditor = function() {\n        return true\n    }\n\n    ObjectEditor.prototype.getUndefinedValue = function() {\n        var result = {}\n\n        for (var i = 0, len = this.propertyDefinition.properties.length; i < len; i++) {\n            var propertyName = this.propertyDefinition.properties[i].property,\n                editor = this.childInspector.findPropertyEditor(propertyName)\n\n            if (editor) {\n                result[propertyName] = editor.getUndefinedValue()\n            }\n        }\n\n        return this.getValueOrRemove(result)\n    }\n\n    ObjectEditor.prototype.validate = function(silentMode) {\n        var values = this.childInspector.getValues()\n\n        if (this.cleanUpValue(values) === $.oc.inspector.removedProperty) {\n            // Ignore any validation rules if the object's required \n            // property is empty (ignoreIfPropertyEmpty)\n\n            return true\n        }\n\n        return this.childInspector.validate(silentMode)\n    }\n\n    //\n    // Event handlers\n    //\n\n    ObjectEditor.prototype.onInspectorDataChange = function(property, value) {\n        var values = this.childInspector.getValues()\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, this.cleanUpValue(values))\n    }\n\n    $.oc.inspector.propertyEditors.object = ObjectEditor\n}(window.jQuery);\n;\n/*\n * Inspector string list editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.text,\n        BaseProto = Base.prototype\n\n    var StringListEditor = function(inspector, propertyDefinition, containerCell, group) {\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    StringListEditor.prototype = Object.create(BaseProto)\n    StringListEditor.prototype.constructor = Base\n\n    StringListEditor.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        this.checkValueType(value)\n\n        if (!value) {\n            value = this.propertyDefinition.placeholder\n            $.oc.foundation.element.addClass(link, 'cell-placeholder')\n\n            if (!value) {\n                value = '[]'\n            }\n\n            link.textContent = value\n        }\n        else {\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n\n            link.textContent = '[' + value.join(', ') + ']'\n        }\n    }\n\n    StringListEditor.prototype.checkValueType = function(value) {\n        if (value && Object.prototype.toString.call(value) !== '[object Array]') {\n            this.throwError('The string list value should be an array.')\n        }\n    }\n\n    StringListEditor.prototype.configurePopup = function(popup) {\n        var $textarea = $(popup).find('textarea'),\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (this.propertyDefinition.placeholder) {\n            $textarea.attr('placeholder', this.propertyDefinition.placeholder)\n        }\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        this.checkValueType(value)\n\n        if (value && value.length) {\n            $textarea.val(value.join('\\n'))\n        }\n\n        $textarea.focus()\n\n        this.configureComment(popup)\n    }\n\n    StringListEditor.prototype.handleSubmit = function($form) {\n        var $textarea = $form.find('textarea'),\n            link = this.getLink(),\n            value = $.trim($textarea.val()),\n            arrayValue = [],\n            resultValue = []\n\n        if (value.length) {\n            value = value.replace(/\\r\\n/g, '\\n')\n            arrayValue = value.split('\\n')\n\n            for (var i = 0, len = arrayValue.length; i < len; i++) {\n                var currentValue = $.trim(arrayValue[i])\n\n                if (currentValue.length > 0) {\n                    resultValue.push(currentValue)\n                }\n            }\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, resultValue)\n    }\n\n    $.oc.inspector.propertyEditors.stringList = StringListEditor\n}(window.jQuery);\n;\n/*\n * Inspector string list with autocompletion editor class.\n *\n * TODO: validation is not implemented in this editor. See the Dictionary editor for reference.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.popupBase,\n        BaseProto = Base.prototype\n\n    var StringListAutocomplete = function(inspector, propertyDefinition, containerCell, group) {\n        this.items = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    StringListAutocomplete.prototype = Object.create(BaseProto)\n    StringListAutocomplete.prototype.constructor = Base\n\n    StringListAutocomplete.prototype.dispose = function() {\n        BaseProto.dispose.call(this)\n    }\n\n    StringListAutocomplete.prototype.init = function() {\n        BaseProto.init.call(this)\n    }\n\n    StringListAutocomplete.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    StringListAutocomplete.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        this.checkValueType(value)\n\n        if (!value) {\n            value = this.propertyDefinition.placeholder\n            $.oc.foundation.element.addClass(link, 'cell-placeholder')\n\n            if (!value) {\n                value = '[]'\n            }\n\n            link.textContent = value\n        }\n        else {\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n\n            link.textContent = '[' + value.join(', ') + ']'\n        }\n    }\n\n    StringListAutocomplete.prototype.checkValueType = function(value) {\n        if (value && Object.prototype.toString.call(value) !== '[object Array]') {\n            this.throwError('The string list value should be an array.')\n        }\n    }\n\n    //\n    // Popup editor methods\n    //\n\n    StringListAutocomplete.prototype.getPopupContent = function() {\n        return '<form>                                                                                     \\\n                <div class=\"modal-header\">                                                                 \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                              \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-body\">                                                                   \\\n                    <div class=\"control-toolbar\">                                                          \\\n                        <div class=\"toolbar-item\">                                                         \\\n                            <div class=\"btn-group\">                                                        \\\n                                <button type=\"button\" class=\"btn btn-primary                               \\\n                                    oc-icon-plus\"                                                          \\\n                                    data-cmd=\"create-item\">'+oc.lang.get('inspector.add')+'</button>       \\\n                                <button type=\"button\" class=\"btn btn-default                               \\\n                                    empty oc-icon-trash\"                                                 \\\n                                    data-cmd=\"delete-item\"></button>                                       \\\n                            </div>                                                                         \\\n                        </div>                                                                             \\\n                    </div>                                                                                 \\\n                    <div class=\"form-group\">                                                               \\\n                        <div class=\"inspector-dictionary-container\">                                       \\\n                            <div class=\"values\">                                                           \\\n                                <div class=\"control-scrollpad\"                                             \\\n                                    data-control=\"scrollpad\">                                              \\\n                                    <div class=\"scroll-wrapper\">                                           \\\n                                        <table class=\"                                                     \\\n                                            no-offset-bottom                                               \\\n                                            inspector-dictionary-table\">                                   \\\n                                        </table>                                                           \\\n                                    </div>                                                                 \\\n                                </div>                                                                     \\\n                            </div>                                                                         \\\n                        </div>                                                                             \\\n                    </div>                                                                                 \\\n                </div>                                                                                     \\\n                <div class=\"modal-footer\">                                                                 \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button> \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button>   \\\n                </div>                                                                                     \\\n                </form>'\n    }\n\n    StringListAutocomplete.prototype.configurePopup = function(popup) {\n        this.initAutocomplete()\n\n        this.buildItemsTable(popup.get(0))\n\n        this.focusFirstInput()\n    }\n\n    StringListAutocomplete.prototype.handleSubmit = function($form) {\n        return this.applyValues()\n    }\n\n    //\n    // Building and row management\n    //\n\n    StringListAutocomplete.prototype.buildItemsTable = function(popup) {\n        var table = popup.querySelector('table.inspector-dictionary-table'),\n            tbody = document.createElement('tbody'),\n            items = this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (items === undefined) {\n            items = this.propertyDefinition.default\n        }\n\n        if (items === undefined || this.getValueKeys(items).length === 0) {\n            var row = this.buildEmptyRow()\n\n            tbody.appendChild(row)\n        }\n        else {\n            for (var key in items) {\n                var row = this.buildTableRow(items[key])\n\n                tbody.appendChild(row)\n            }\n        }\n\n        table.appendChild(tbody)\n        this.updateScrollpads()\n    }\n\n    StringListAutocomplete.prototype.buildTableRow = function(value) {\n        var row = document.createElement('tr'),\n            valueCell = document.createElement('td')\n\n        this.createInput(valueCell, value)\n\n        row.appendChild(valueCell)\n\n        return row\n    }\n\n    StringListAutocomplete.prototype.buildEmptyRow = function() {\n        return this.buildTableRow(null)\n    }\n\n    StringListAutocomplete.prototype.createInput = function(container, value) {\n        var input = document.createElement('input'),\n            controlContainer = document.createElement('div')\n\n        input.setAttribute('type', 'text')\n        input.setAttribute('class', 'form-control')\n        input.value = value\n\n        controlContainer.appendChild(input)\n        container.appendChild(controlContainer)\n    }\n\n    StringListAutocomplete.prototype.setActiveCell = function(input) {\n        var activeCells = this.popup.querySelectorAll('td.active')\n\n        for (var i = activeCells.length-1; i >= 0; i--) {\n            $.oc.foundation.element.removeClass(activeCells[i], 'active')\n        }\n\n        var activeCell = input.parentNode.parentNode // input / div / td\n        $.oc.foundation.element.addClass(activeCell, 'active')\n\n        this.buildAutoComplete(input)\n    }\n\n    StringListAutocomplete.prototype.createItem = function() {\n        var activeRow = this.getActiveRow(),\n            newRow = this.buildEmptyRow(),\n            tbody = this.getTableBody(),\n            nextSibling = activeRow ? activeRow.nextElementSibling : null\n\n        tbody.insertBefore(newRow, nextSibling)\n\n        this.focusAndMakeActive(newRow.querySelector('input'))\n        this.updateScrollpads()\n    }\n\n    StringListAutocomplete.prototype.deleteItem = function() {\n        var activeRow = this.getActiveRow(),\n            tbody = this.getTableBody()\n\n        if (!activeRow) {\n            return\n        }\n\n        var nextRow = activeRow.nextElementSibling,\n            prevRow = activeRow.previousElementSibling,\n            input = this.getRowInputByIndex(activeRow, 0)\n\n        if (input) {\n            this.removeAutocomplete(input)\n        }\n\n        tbody.removeChild(activeRow)\n\n        var newSelectedRow = nextRow ? nextRow : prevRow\n\n        if (!newSelectedRow) {\n            newSelectedRow = this.buildEmptyRow()\n            tbody.appendChild(newSelectedRow)\n        }\n\n        this.focusAndMakeActive(newSelectedRow.querySelector('input'))\n        this.updateScrollpads()\n    }\n\n    StringListAutocomplete.prototype.applyValues = function() {\n        var tbody = this.getTableBody(),\n            dataRows = tbody.querySelectorAll('tr'),\n            link = this.getLink(),\n            result = []\n\n        for (var i = 0, len = dataRows.length; i < len; i++) {\n            var dataRow = dataRows[i],\n                valueInput = this.getRowInputByIndex(dataRow, 0),\n                value = $.trim(valueInput.value)\n\n            if (value.length == 0) {\n                continue\n            }\n\n            result.push(value)\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, result)\n        this.setLinkText(link, result)\n    }\n\n    //\n    // Helpers\n    //\n\n    StringListAutocomplete.prototype.getValueKeys = function(value) {\n        var result = []\n\n        for (var key in value) {\n            result.push(key)\n        }\n\n        return result\n    }\n\n    StringListAutocomplete.prototype.getActiveRow = function() {\n        var activeCell = this.popup.querySelector('td.active')\n\n        if (!activeCell) {\n            return null\n        }\n\n        return activeCell.parentNode\n    }\n\n    StringListAutocomplete.prototype.getTableBody = function() {\n        return this.popup.querySelector('table.inspector-dictionary-table tbody')\n    }\n\n    StringListAutocomplete.prototype.updateScrollpads = function() {\n        $('.control-scrollpad', this.popup).scrollpad('update')\n    }\n\n    StringListAutocomplete.prototype.focusFirstInput = function() {\n        var input = this.popup.querySelector('td input')\n\n        if (input) {\n            input.focus()\n            this.setActiveCell(input)\n        }\n    }\n\n    StringListAutocomplete.prototype.getEditorCell = function(cell) {\n        return cell.parentNode.parentNode // cell / div / td\n    }\n\n    StringListAutocomplete.prototype.getEditorRow = function(cell) {\n        return cell.parentNode.parentNode.parentNode // cell / div / td / tr\n    }\n\n    StringListAutocomplete.prototype.focusAndMakeActive = function(input) {\n        input.focus()\n        this.setActiveCell(input)\n    }\n\n    StringListAutocomplete.prototype.getRowInputByIndex = function(row, index) {\n        return row.cells[index].querySelector('input')\n    }\n\n    //\n    // Navigation\n    //\n\n    StringListAutocomplete.prototype.navigateDown = function(ev) {\n        var cell = this.getEditorCell(ev.currentTarget),\n            row = this.getEditorRow(ev.currentTarget),\n            nextRow = row.nextElementSibling\n\n        if (!nextRow) {\n            return\n        }\n\n        var newActiveEditor = nextRow.cells[cell.cellIndex].querySelector('input')\n\n        this.focusAndMakeActive(newActiveEditor)\n    }\n\n    StringListAutocomplete.prototype.navigateUp = function(ev) {\n        var cell = this.getEditorCell(ev.currentTarget),\n            row = this.getEditorRow(ev.currentTarget),\n            prevRow = row.previousElementSibling\n\n        if (!prevRow) {\n            return\n        }\n\n        var newActiveEditor = prevRow.cells[cell.cellIndex].querySelector('input')\n\n        this.focusAndMakeActive(newActiveEditor)\n    }\n\n    //\n    // Autocomplete\n    //\n\n    StringListAutocomplete.prototype.initAutocomplete = function() {\n        if (this.propertyDefinition.items !== undefined) {\n            this.items = this.prepareItems(this.propertyDefinition.items)\n            this.initializeAutocompleteForCurrentInput()\n        }\n        else {\n            this.loadDynamicItems()\n        }\n    }\n\n    StringListAutocomplete.prototype.initializeAutocompleteForCurrentInput = function() {\n        var activeElement = document.activeElement\n\n        if (!activeElement) {\n            return\n        }\n\n        var inputs = this.popup.querySelectorAll('td input.form-control')\n\n        if (!inputs) {\n            return\n        }\n\n        for (var i=inputs.length-1; i>=0; i--) {\n            if (inputs[i] === activeElement) {\n                this.buildAutoComplete(inputs[i])\n                return\n            }\n        }\n    }\n\n    StringListAutocomplete.prototype.buildAutoComplete = function(input) {\n        if (this.items === null) {\n            return\n        }\n\n        $(input).autocomplete({\n            source: this.items,\n            matchWidth: true,\n            menu: '<ul class=\"autocomplete dropdown-menu inspector-autocomplete\"></ul>',\n            bodyContainer: true\n        })\n    }\n\n    StringListAutocomplete.prototype.removeAutocomplete = function(input) {\n        var $input = $(input)\n\n        if (!$input.data('autocomplete')) {\n            return\n        }\n\n        $input.autocomplete('destroy')\n    }\n\n    StringListAutocomplete.prototype.prepareItems = function(items) {\n        var result = {}\n\n        if (Array.isArray(items)) {\n            for (var i = 0, len = items.length; i < len; i++) {\n                result[items[i]] = items[i]\n            }\n        }\n        else {\n            result = items\n        }\n\n        return result\n    }\n\n    StringListAutocomplete.prototype.loadDynamicItems = function() {\n        if (this.isDisposed()) {\n            return;\n        }\n\n        var data = this.getRootSurface().getValues(),\n            $form = $(this.popup).find('form');\n\n        if (this.triggerGetItems(data) === false) {\n            return;\n        }\n\n        data['inspectorProperty'] = this.getPropertyPath();\n        data['inspectorClassName'] = this.inspector.options.inspectorClass;\n\n        $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), {\n            data: data,\n            progressBar: false\n        })\n        .done(this.proxy(this.itemsRequestDone));\n    }\n\n    StringListAutocomplete.prototype.triggerGetItems = function(values) {\n        var $inspectable = this.getInspectableElement()\n        if (!$inspectable) {\n            return true\n        }\n\n        var itemsEvent = $.Event('autocompleteitems.oc.inspector')\n\n        $inspectable.trigger(itemsEvent, [{\n            values: values,\n            callback: this.proxy(this.itemsRequestDone),\n            property: this.inspector.getPropertyPath(this.propertyDefinition.property),\n            propertyDefinition: this.propertyDefinition\n        }])\n\n        if (itemsEvent.isDefaultPrevented()) {\n            return false\n        }\n\n        return true\n    }\n\n    StringListAutocomplete.prototype.itemsRequestDone = function(data) {\n        if (this.isDisposed()) {\n            // Handle the case when the asynchronous request finishes after\n            // the editor is disposed\n            return\n        }\n\n        var loadedItems = {}\n\n        if (data.options) {\n            for (var i = data.options.length-1; i >= 0; i--) {\n                loadedItems[data.options[i].value] = data.options[i].title\n            }\n        }\n\n        this.items = this.prepareItems(loadedItems)\n        this.initializeAutocompleteForCurrentInput()\n    }\n\n    StringListAutocomplete.prototype.removeAutocompleteFromAllRows = function() {\n        var inputs = this.popup.querySelector('td input.form-control')\n\n        for (var i=inputs.length-1; i>=0; i--) {\n            this.removeAutocomplete(inputs[i])\n        }\n    }\n\n    //\n    // Event handlers\n    //\n\n    StringListAutocomplete.prototype.onPopupShown = function(ev, link, popup) {\n        BaseProto.onPopupShown.call(this,ev, link, popup)\n\n        popup.on('focus.inspector', 'td input', this.proxy(this.onFocus))\n        popup.on('blur.inspector', 'td input', this.proxy(this.onBlur))\n        popup.on('keydown.inspector', 'td input', this.proxy(this.onKeyDown))\n        popup.on('click.inspector', '[data-cmd]', this.proxy(this.onCommand))\n    }\n\n    StringListAutocomplete.prototype.onPopupHidden = function(ev, link, popup) {\n        popup.off('.inspector', 'td input')\n        popup.off('.inspector', '[data-cmd]', this.proxy(this.onCommand))\n\n        this.removeAutocompleteFromAllRows()\n        this.items = null\n\n        BaseProto.onPopupHidden.call(this, ev, link, popup)\n    }\n\n    StringListAutocomplete.prototype.onFocus = function(ev) {\n        this.setActiveCell(ev.currentTarget)\n    }\n\n    StringListAutocomplete.prototype.onBlur = function(ev) {\n        if ($(ev.relatedTarget).closest('ul.inspector-autocomplete').length > 0) {\n            // Do not close the autocomplete results if a drop-down\n            // menu item was clicked\n            return\n        }\n\n        this.removeAutocomplete(ev.currentTarget)\n    }\n\n    StringListAutocomplete.prototype.onCommand = function(ev) {\n        var command = ev.currentTarget.getAttribute('data-cmd')\n\n        switch (command) {\n            case 'create-item' :\n                this.createItem()\n            break;\n            case 'delete-item' :\n                this.deleteItem()\n            break;\n        }\n    }\n\n    StringListAutocomplete.prototype.onKeyDown = function(ev) {\n        if (ev.key === 'ArrowDown') {\n            return this.navigateDown(ev)\n        }\n        else if (ev.key === 'ArrowUp') {\n            return this.navigateUp(ev)\n        }\n    }\n\n    $.oc.inspector.propertyEditors.stringListAutocomplete = StringListAutocomplete\n}(window.jQuery);\n;\n/*\n * Inspector dictionary editor class.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.popupBase,\n        BaseProto = Base.prototype\n\n    var DictionaryEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.keyValidationSet = null\n        this.valueValidationSet = null\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group)\n    }\n\n    DictionaryEditor.prototype = Object.create(BaseProto)\n    DictionaryEditor.prototype.constructor = Base\n\n    DictionaryEditor.prototype.dispose = function() {\n        this.disposeValidators()\n\n        this.keyValidationSet = null\n        this.valueValidationSet = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    DictionaryEditor.prototype.init = function() {\n        this.initValidators()\n\n        BaseProto.init.call(this)\n    }\n\n    DictionaryEditor.prototype.supportsExternalParameterEditor = function() {\n        return false\n    }\n\n    //\n    // Popup editor methods\n    //\n\n    DictionaryEditor.prototype.setLinkText = function(link, value) {\n        var value = value !== undefined ? value\n                : this.inspector.getPropertyValue(this.propertyDefinition.property)\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default\n        }\n\n        if (value === undefined || $.isEmptyObject(value)) {\n            var placeholder = this.propertyDefinition.placeholder\n\n            if (placeholder !== undefined) {\n                $.oc.foundation.element.addClass(link, 'cell-placeholder')\n                link.textContent = placeholder\n            }\n            else {\n                link.textContent = 'Items: 0'\n            }\n        }\n        else {\n            if (typeof value !== 'object') {\n                this.throwError('Object list value should be an object.')\n            }\n\n            var itemCount = this.getValueKeys(value).length\n\n            $.oc.foundation.element.removeClass(link, 'cell-placeholder')\n            link.textContent = 'Items: ' + itemCount\n        }\n    }\n\n    DictionaryEditor.prototype.getPopupContent = function() {\n        return '<form>                                                                                      \\\n                <div class=\"modal-header\">                                                                  \\\n                    <h4 class=\"modal-title\">{{property}}</h4>                                               \\\n                    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>                  \\\n                </div>                                                                                      \\\n                <div class=\"modal-body\">                                                                    \\\n                    <div class=\"control-toolbar\">                                                           \\\n                        <div class=\"toolbar-item\">                                                          \\\n                            <div class=\"btn-group\">                                                         \\\n                                <button type=\"button\" class=\"btn btn-primary                                \\\n                                    oc-icon-plus\"                                                           \\\n                                    data-cmd=\"create-item\">'+oc.lang.get('inspector.add')+'</button>        \\\n                                <button type=\"button\" class=\"btn btn-default                                \\\n                                    empty oc-icon-trash\"                                                  \\\n                                    data-cmd=\"delete-item\"></button>                                        \\\n                            </div>                                                                          \\\n                        </div>                                                                              \\\n                    </div>                                                                                  \\\n                    <div class=\"form-group\">                                                                \\\n                        <div class=\"inspector-dictionary-container\">                                        \\\n                            <table class=\"headers\">                                                         \\\n                                <thead>                                                                     \\\n                                    <tr>                                                                    \\\n                                        <td>'+oc.lang.get('inspector.key')+'</td>                           \\\n                                        <td>'+oc.lang.get('inspector.value')+'</td>                         \\\n                                    </tr>                                                                   \\\n                                </thead>                                                                    \\\n                            </table>                                                                        \\\n                            <div class=\"values\">                                                            \\\n                                <div class=\"control-scrollpad\"                                              \\\n                                    data-control=\"scrollpad\">                                               \\\n                                    <div class=\"scroll-wrapper\">                                            \\\n                                        <table class=\"                                                      \\\n                                            no-offset-bottom                                                \\\n                                            inspector-dictionary-table\">                                    \\\n                                        </table>                                                            \\\n                                    </div>                                                                  \\\n                                </div>                                                                      \\\n                            </div>                                                                          \\\n                        </div>                                                                              \\\n                    </div>                                                                                  \\\n                </div>                                                                                      \\\n                <div class=\"modal-footer\">                                                                  \\\n                    <button type=\"submit\" class=\"btn btn-primary\">'+oc.lang.get('inspector.ok')+'</button>  \\\n                    <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">'+oc.lang.get('inspector.cancel')+'</button> \\\n                </div>                                                                                      \\\n            </form>'\n    }\n\n    DictionaryEditor.prototype.configurePopup = function(popup) {\n        this.buildItemsTable(popup.get(0))\n\n        this.focusFirstInput()\n    }\n\n    DictionaryEditor.prototype.handleSubmit = function($form) {\n        return this.applyValues()\n    }\n\n    //\n    // Building and row management\n    //\n\n    DictionaryEditor.prototype.buildItemsTable = function(popup) {\n        var table = popup.querySelector('table.inspector-dictionary-table'),\n            tbody = document.createElement('tbody'),\n            items = this.inspector.getPropertyValue(this.propertyDefinition.property),\n            titleProperty = this.propertyDefinition.titleProperty\n\n        if (items === undefined) {\n            items = this.propertyDefinition.default\n        }\n\n        if (items === undefined || this.getValueKeys(items).length === 0) {\n            var row = this.buildEmptyRow()\n\n            tbody.appendChild(row)\n        }\n        else {\n            for (var key in items) {\n                var row = this.buildTableRow(key, items[key])\n\n                tbody.appendChild(row)\n            }\n        }\n\n        table.appendChild(tbody)\n        this.updateScrollpads()\n    }\n\n    DictionaryEditor.prototype.buildTableRow = function(key, value) {\n        var row = document.createElement('tr'),\n            keyCell = document.createElement('td'),\n            valueCell = document.createElement('td')\n\n        this.createInput(keyCell, key)\n        this.createInput(valueCell, value)\n\n        row.appendChild(keyCell)\n        row.appendChild(valueCell)\n\n        return row\n    }\n\n    DictionaryEditor.prototype.buildEmptyRow = function() {\n        return this.buildTableRow(null, null)\n    }\n\n    DictionaryEditor.prototype.createInput = function(container, value) {\n        var input = document.createElement('input'),\n            controlContainer = document.createElement('div')\n\n        input.setAttribute('type', 'text')\n        input.setAttribute('class', 'form-control')\n        input.value = value\n\n        controlContainer.appendChild(input)\n        container.appendChild(controlContainer)\n    }\n\n    DictionaryEditor.prototype.setActiveCell = function(input) {\n        var activeCells = this.popup.querySelectorAll('td.active')\n\n        for (var i = activeCells.length-1; i >= 0; i--) {\n            $.oc.foundation.element.removeClass(activeCells[i], 'active')\n        }\n\n        var activeCell = input.parentNode.parentNode // input / div / td\n        $.oc.foundation.element.addClass(activeCell, 'active')\n    }\n\n    DictionaryEditor.prototype.createItem = function() {\n        var activeRow = this.getActiveRow(),\n            newRow = this.buildEmptyRow(),\n            tbody = this.getTableBody(),\n            nextSibling = activeRow ? activeRow.nextElementSibling : null\n\n        tbody.insertBefore(newRow, nextSibling)\n\n        this.focusAndMakeActive(newRow.querySelector('input'))\n        this.updateScrollpads()\n    }\n\n    DictionaryEditor.prototype.deleteItem = function() {\n        var activeRow = this.getActiveRow(),\n            tbody = this.getTableBody()\n\n        if (!activeRow) {\n            return\n        }\n\n        var nextRow = activeRow.nextElementSibling,\n            prevRow = activeRow.previousElementSibling\n\n        tbody.removeChild(activeRow)\n\n        var newSelectedRow = nextRow ? nextRow : prevRow\n\n        if (!newSelectedRow) {\n            newSelectedRow = this.buildEmptyRow()\n            tbody.appendChild(newSelectedRow)\n        }\n\n        this.focusAndMakeActive(newSelectedRow .querySelector('input'))\n        this.updateScrollpads()\n    }\n\n    DictionaryEditor.prototype.applyValues = function() {\n        var tbody = this.getTableBody(),\n            dataRows = tbody.querySelectorAll('tr'),\n            link = this.getLink(),\n            result = {}\n\n        for (var i = 0, len = dataRows.length; i < len; i++) {\n            var dataRow = dataRows[i],\n                keyInput = this.getRowInputByIndex(dataRow, 0),\n                valueInput = this.getRowInputByIndex(dataRow, 1),\n                key = $.trim(keyInput.value),\n                value = $.trim(valueInput.value)\n\n            if (key.length == 0 && value.length == 0) {\n                continue\n            }\n\n            if (key.length == 0) {\n                $.oc.flashMsg({text: 'The key cannot be empty.', 'class': 'error', 'interval': 3})\n                this.focusAndMakeActive(keyInput)\n                return false\n            }\n\n            if (value.length == 0) {\n                $.oc.flashMsg({text: 'The value cannot be empty.', 'class': 'error', 'interval': 3})\n                this.focusAndMakeActive(valueInput)\n                return false\n            }\n\n            if (result[key] !== undefined) {\n                $.oc.flashMsg({text: 'Keys should be unique.', 'class': 'error', 'interval': 3})\n                this.focusAndMakeActive(keyInput)\n                return false\n            }\n\n            var validationResult = this.keyValidationSet.validate(key)\n            if (validationResult !== null) {\n                $.oc.flashMsg({text: validationResult, 'class': 'error', 'interval': 5})\n                return false\n            }\n\n            validationResult = this.valueValidationSet.validate(value)\n            if (validationResult !== null) {\n                $.oc.flashMsg({text: validationResult, 'class': 'error', 'interval': 5})\n                return false\n            }\n\n            result[key] = value\n        }\n\n        this.inspector.setPropertyValue(this.propertyDefinition.property, result)\n        this.setLinkText(link, result)\n    }\n\n    //\n    // Helpers\n    //\n\n    DictionaryEditor.prototype.getValueKeys = function(value) {\n        var result = []\n\n        for (var key in value) {\n            result.push(key)\n        }\n\n        return result\n    }\n\n    DictionaryEditor.prototype.getActiveRow = function() {\n        var activeCell = this.popup.querySelector('td.active')\n\n        if (!activeCell) {\n            return null\n        }\n\n        return activeCell.parentNode\n    }\n\n    DictionaryEditor.prototype.getTableBody = function() {\n        return this.popup.querySelector('table.inspector-dictionary-table tbody')\n    }\n\n    DictionaryEditor.prototype.updateScrollpads = function() {\n        $('.control-scrollpad', this.popup).scrollpad('update')\n    }\n\n    DictionaryEditor.prototype.focusFirstInput = function() {\n        var input = this.popup.querySelector('td input')\n\n        if (input) {\n            input.focus()\n            this.setActiveCell(input)\n        }\n    }\n\n    DictionaryEditor.prototype.getEditorCell = function(cell) {\n        return cell.parentNode.parentNode // cell / div / td\n    }\n\n    DictionaryEditor.prototype.getEditorRow = function(cell) {\n        return cell.parentNode.parentNode.parentNode // cell / div / td / tr\n    }\n\n    DictionaryEditor.prototype.focusAndMakeActive = function(input) {\n        input.focus()\n        this.setActiveCell(input)\n    }\n\n    DictionaryEditor.prototype.getRowInputByIndex = function(row, index) {\n        return row.cells[index].querySelector('input')\n    }\n\n    //\n    // Navigation\n    //\n\n    DictionaryEditor.prototype.navigateDown = function(ev) {\n        var cell = this.getEditorCell(ev.currentTarget),\n            row = this.getEditorRow(ev.currentTarget),\n            nextRow = row.nextElementSibling\n\n        if (!nextRow) {\n            return\n        }\n\n        var newActiveEditor = nextRow.cells[cell.cellIndex].querySelector('input')\n\n        this.focusAndMakeActive(newActiveEditor)\n    }\n\n    DictionaryEditor.prototype.navigateUp = function(ev) {\n        var cell = this.getEditorCell(ev.currentTarget),\n            row = this.getEditorRow(ev.currentTarget),\n            prevRow = row.previousElementSibling\n\n        if (!prevRow) {\n            return\n        }\n\n        var newActiveEditor = prevRow.cells[cell.cellIndex].querySelector('input')\n\n        this.focusAndMakeActive(newActiveEditor)\n    }\n\n    //\n    // Validation\n    //\n\n    DictionaryEditor.prototype.initValidators = function() {\n        this.keyValidationSet = new $.oc.inspector.validationSet({\n            validation: this.propertyDefinition.validationKey\n        }, this.propertyDefinition.property+'.validationKey')\n\n        this.valueValidationSet = new $.oc.inspector.validationSet({\n            validation: this.propertyDefinition.validationValue\n        }, this.propertyDefinition.property+'.validationValue')\n    }\n\n    DictionaryEditor.prototype.disposeValidators = function() {\n        this.keyValidationSet.dispose()\n        this.valueValidationSet.dispose()\n    }\n\n    //\n    // Event handlers\n    //\n\n    DictionaryEditor.prototype.onPopupShown = function(ev, link, popup) {\n        BaseProto.onPopupShown.call(this,ev, link, popup )\n\n        popup.on('focus.inspector', 'td input', this.proxy(this.onFocus))\n        popup.on('keydown.inspector', 'td input', this.proxy(this.onKeyDown))\n        popup.on('click.inspector', '[data-cmd]', this.proxy(this.onCommand))\n    }\n\n    DictionaryEditor.prototype.onPopupHidden = function(ev, link, popup) {\n        popup.off('.inspector', 'td input')\n        popup.off('.inspector', '[data-cmd]', this.proxy(this.onCommand))\n\n        BaseProto.onPopupHidden.call(this, ev, link, popup)\n    }\n\n    DictionaryEditor.prototype.onFocus = function(ev) {\n        this.setActiveCell(ev.currentTarget)\n    }\n\n    DictionaryEditor.prototype.onCommand = function(ev) {\n        var command = ev.currentTarget.getAttribute('data-cmd')\n\n        switch (command) {\n            case 'create-item' :\n                this.createItem()\n            break;\n            case 'delete-item' :\n                this.deleteItem()\n            break;\n        }\n    }\n\n    DictionaryEditor.prototype.onKeyDown = function(ev) {\n        if (ev.key === 'ArrowDown') {\n            return this.navigateDown(ev)\n        }\n        else if (ev.key === 'ArrowUp') {\n            return this.navigateUp(ev)\n        }\n    }\n\n    $.oc.inspector.propertyEditors.dictionary = DictionaryEditor\n}(window.jQuery);\n;\n/*\n * Inspector autocomplete editor class.\n *\n * Depends on october.autocomplete.js\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.propertyEditors.string,\n        BaseProto = Base.prototype;\n\n    var AutocompleteEditor = function(inspector, propertyDefinition, containerCell, group) {\n        this.autoUpdateTimeout = null;\n\n        Base.call(this, inspector, propertyDefinition, containerCell, group);\n    }\n\n    AutocompleteEditor.prototype = Object.create(BaseProto);\n    AutocompleteEditor.prototype.constructor = Base;\n\n    AutocompleteEditor.prototype.dispose = function() {\n        this.clearAutoUpdateTimeout();\n        this.removeAutocomplete();\n\n        BaseProto.dispose.call(this);\n    }\n\n    AutocompleteEditor.prototype.build = function() {\n        var container = document.createElement('div'),\n            editor = document.createElement('input'),\n            placeholder = this.propertyDefinition.placeholder !== undefined ? this.propertyDefinition.placeholder : '',\n            value = this.inspector.getPropertyValue(this.propertyDefinition.property);\n\n        editor.setAttribute('type', 'text');\n        editor.setAttribute('class', 'string-editor');\n        editor.setAttribute('placeholder', placeholder);\n\n        container.setAttribute('class', 'autocomplete-container');\n\n        if (value === undefined) {\n            value = this.propertyDefinition.default;\n        }\n\n        if (value === undefined) {\n            value = '';\n        }\n\n        editor.value = value;\n\n        $.oc.foundation.element.addClass(this.containerCell, 'text autocomplete');\n\n        container.appendChild(editor);\n        this.containerCell.appendChild(container);\n\n        if (this.propertyDefinition.items !== undefined) {\n            this.buildAutoComplete(this.propertyDefinition.items);\n        }\n        else {\n            this.loadDynamicItems();\n        }\n    }\n\n    AutocompleteEditor.prototype.buildAutoComplete = function(items) {\n        var input = this.getInput()\n\n        if (items === undefined) {\n            items = [];\n        }\n\n        var $input = $(input),\n            autocomplete = $input.data('autocomplete')\n\n        if (!autocomplete) {\n            $input.autocomplete({\n                source: this.prepareItems(items),\n                matchWidth: true\n            });\n        }\n        else {\n            autocomplete.source = this.prepareItems(items);\n        }\n    }\n\n    AutocompleteEditor.prototype.removeAutocomplete = function() {\n        var input = this.getInput();\n\n        $(input).autocomplete('destroy');\n    }\n\n    AutocompleteEditor.prototype.prepareItems = function(items) {\n        var result = {};\n\n        if (Array.isArray(items)) {\n            for (var i = 0, len = items.length; i < len; i++) {\n                result[items[i]] = items[i];\n            }\n        }\n        else {\n            result = items;\n        }\n\n        return result;\n    }\n\n    AutocompleteEditor.prototype.supportsExternalParameterEditor = function() {\n        return false;\n    }\n\n    AutocompleteEditor.prototype.getContainer = function() {\n        return this.getInput().parentNode;\n    }\n\n    AutocompleteEditor.prototype.registerHandlers = function() {\n        BaseProto.registerHandlers.call(this);\n\n        $(this.getInput()).on('change', this.proxy(this.onInputKeyUp));\n    }\n\n    AutocompleteEditor.prototype.unregisterHandlers = function() {\n        BaseProto.unregisterHandlers.call(this);\n\n        $(this.getInput()).off('change', this.proxy(this.onInputKeyUp));\n    }\n\n    AutocompleteEditor.prototype.saveDependencyValues = function() {\n        this.prevDependencyValues = this.getDependencyValues();\n    }\n\n    AutocompleteEditor.prototype.getDependencyValues = function() {\n        var result = '';\n\n        for (var i = 0, len = this.propertyDefinition.depends.length; i < len; i++) {\n            var property = this.propertyDefinition.depends[i],\n                value = this.inspector.getPropertyValue(property);\n\n            if (value === undefined) {\n                value = '';\n            }\n\n            result += property + ':' + value + '-';\n        }\n\n        return result;\n    }\n\n    AutocompleteEditor.prototype.onInspectorPropertyChanged = function(property) {\n        if (!this.propertyDefinition.depends || this.propertyDefinition.depends.indexOf(property) === -1) {\n            return;\n        }\n\n        this.clearAutoUpdateTimeout();\n\n        if (this.prevDependencyValues === undefined || this.prevDependencyValues != dependencyValues) {\n            this.autoUpdateTimeout = setTimeout(this.proxy(this.loadDynamicItems), 200);\n        }\n    }\n\n    AutocompleteEditor.prototype.clearAutoUpdateTimeout = function() {\n        if (this.autoUpdateTimeout !== null) {\n            clearTimeout(this.autoUpdateTimeout);\n            this.autoUpdateTimeout = null;\n        }\n    }\n\n    //\n    // Dynamic items\n    //\n\n    AutocompleteEditor.prototype.showLoadingIndicator = function() {\n        $(this.getContainer()).loadIndicator();\n    }\n\n    AutocompleteEditor.prototype.hideLoadingIndicator = function() {\n        if (this.isDisposed()) {\n            return;\n        }\n\n        var $container = $(this.getContainer());\n\n        $container.loadIndicator('hide');\n        $container.loadIndicator('destroy');\n\n        $container.removeClass('loading-indicator-container');\n    }\n\n    AutocompleteEditor.prototype.loadDynamicItems = function() {\n        if (this.isDisposed()) {\n            return;\n        }\n\n        this.clearAutoUpdateTimeout();\n\n        var container = this.getContainer(),\n            data = this.getRootSurface().getValues(),\n            $form = $(container).closest('form');\n\n        $.oc.foundation.element.addClass(container, 'loading-indicator-container size-small');\n        this.showLoadingIndicator();\n\n        if (this.triggerGetItems(data) === false) {\n            return;\n        }\n\n        data['inspectorProperty'] = this.getPropertyPath();\n        data['inspectorClassName'] = this.inspector.options.inspectorClass;\n\n        $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), {\n            data: data,\n            progressBar: false\n        })\n        .done(this.proxy(this.itemsRequestDone))\n        .always(this.proxy(this.hideLoadingIndicator));\n    }\n\n    AutocompleteEditor.prototype.triggerGetItems = function(values) {\n        var $inspectable = this.getInspectableElement();\n        if (!$inspectable) {\n            return true;\n        }\n\n        var itemsEvent = $.Event('autocompleteitems.oc.inspector');\n\n        $inspectable.trigger(itemsEvent, [{\n            values: values,\n            callback: this.proxy(this.itemsRequestDone),\n            property: this.inspector.getPropertyPath(this.propertyDefinition.property),\n            propertyDefinition: this.propertyDefinition\n        }]);\n\n        if (itemsEvent.isDefaultPrevented()) {\n            return false;\n        }\n\n        return true;\n    }\n\n    AutocompleteEditor.prototype.itemsRequestDone = function(data) {\n        if (this.isDisposed()) {\n            // Handle the case when the asynchronous request finishes after\n            // the editor is disposed\n            return\n        }\n\n        this.hideLoadingIndicator();\n\n        var loadedItems = {};\n\n        if (data.options) {\n            for (var i = data.options.length-1; i >= 0; i--) {\n                loadedItems[data.options[i].value] = data.options[i].title;\n            }\n        }\n\n        this.buildAutoComplete(loadedItems);\n    }\n\n    $.oc.inspector.propertyEditors.autocomplete = AutocompleteEditor;\n}(window.jQuery);\n\n;\n/*\n * Inspector helper functions.\n *\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    $.oc.inspector.helpers = {}\n\n    $.oc.inspector.helpers.generateElementUniqueId = function(element) {\n        if (element.hasAttribute('data-inspector-id')) {\n            return element.getAttribute('data-inspector-id');\n        }\n\n        var id = $.oc.inspector.helpers.generateUniqueId();\n        element.setAttribute('data-inspector-id', id);\n\n        return id;\n    }\n\n    $.oc.inspector.helpers.generateUniqueId = function() {\n        return \"inspectorid-\" + Math.floor(Math.random() * new Date().getTime());\n    }\n\n    $.oc.inspector.helpers.getEventHandler = function(element, handler) {\n        if (element instanceof jQuery){\n            element = element.get(0);\n        }\n\n        var handlerAlias = element.dataset.inspectorHandlerAlias;\n        if (handlerAlias) {\n            return handlerAlias + '::' + handler;\n        }\n\n        return handler;\n    }\n\n}(window.jQuery)\n;\n/*\n * Inspector validation set class.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n      if ($.oc.inspector.validators === undefined)\n        $.oc.inspector.validators = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var ValidationSet = function(options, propertyName) {\n        this.validators = []\n\n        this.options = options\n        this.propertyName = propertyName\n        Base.call(this)\n\n        this.createValidators()\n    }\n\n    ValidationSet.prototype = Object.create(BaseProto)\n    ValidationSet.prototype.constructor = Base\n\n    ValidationSet.prototype.dispose = function() {\n        this.disposeValidators()\n        this.validators = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    ValidationSet.prototype.disposeValidators = function() {\n        for (var i = 0, len = this.validators.length; i < len; i++) {\n            this.validators[i].dispose()\n        }\n    }\n\n    ValidationSet.prototype.throwError = function(errorMessage) {\n        throw new Error(errorMessage + ' Property: ' + this.propertyName)\n    }\n\n    ValidationSet.prototype.createValidators = function() {\n        // Handle legacy validation syntax properties:\n        //\n        // - required\n        // - validationPattern\n        // - validationMessage \n\n        if ((this.options.required !== undefined ||\n            this.options.validationPattern !== undefined ||\n            this.options.validationMessage !== undefined) &&\n            this.options.validation !== undefined) {\n            this.throwError('Legacy and new validation syntax should not be mixed.')\n        }\n\n        if (this.options.required !== undefined && this.options.required) {\n            var validator = new $.oc.inspector.validators.required({\n                message: this.options.validationMessage\n            })\n\n            this.validators.push(validator)\n        }\n\n        if (this.options.validationPattern !== undefined) {\n            var validator = new $.oc.inspector.validators.regex({\n                message: this.options.validationMessage,\n                pattern: this.options.validationPattern\n            })\n\n            this.validators.push(validator)\n        }\n\n        //\n        // Handle new validation syntax\n        //\n\n        if (this.options.validation === undefined) {\n            return\n        }\n\n        for (var validatorName in this.options.validation) {\n            if ($.oc.inspector.validators[validatorName] == undefined) {\n                this.throwError('Inspector validator \"' + validatorName + '\" is not found in the $.oc.inspector.validators namespace.')\n            }\n\n            var validator = new $.oc.inspector.validators[validatorName](\n                    this.options.validation[validatorName]\n                )\n\n            this.validators.push(validator)\n        }\n    }\n\n    ValidationSet.prototype.validate = function(value) {\n        try {\n            for (var i = 0, len = this.validators.length; i < len; i++) {\n                var validator = this.validators[i],\n                    errorMessage = validator.isValid(value)\n\n                if (typeof errorMessage === 'string') {\n                    return errorMessage\n                }\n            }\n\n            return null\n        }\n        catch (err) {\n            this.throwError(err)\n        }\n    }\n\n    $.oc.inspector.validationSet = ValidationSet\n}(window.jQuery);\n;\n/*\n * Inspector validator base class.\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc.inspector.validators === undefined)\n        $.oc.inspector.validators = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var BaseValidator = function(options) {\n        this.options = options\n        this.defaultMessage = 'Invalid property value.'\n\n        Base.call(this)\n    }\n\n    BaseValidator.prototype = Object.create(BaseProto)\n    BaseValidator.prototype.constructor = Base\n\n    BaseValidator.prototype.dispose = function() {\n        this.defaultMessage = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    BaseValidator.prototype.getMessage = function(defaultMessage) {\n        if (this.options.message !== undefined) {\n            return this.options.message\n        }\n\n        if (defaultMessage !== undefined) {\n            return defaultMessage\n        }\n\n        return this.defaultMessage\n    }\n\n    BaseValidator.prototype.isScalar = function(value) {\n        if (value === undefined || value === null) {\n            return true\n        }\n\n        return !!(typeof value === 'string' || typeof value == 'number' || typeof value == 'boolean');\n    }\n\n    BaseValidator.prototype.isValid = function(value) {\n        return null\n    }\n\n    $.oc.inspector.validators.base = BaseValidator\n}(window.jQuery);\n;\n/*\n * Base class for Inspector numeric validators.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.base,\n        BaseProto = Base.prototype\n\n    var BaseNumber = function(options) {\n        Base.call(this, options)\n    }\n\n    BaseNumber.prototype = Object.create(BaseProto)\n    BaseNumber.prototype.constructor = Base\n\n    BaseNumber.prototype.doCommonChecks = function(value) {\n       if (this.options.min !== undefined || this.options.max !== undefined) {\n            if (this.options.min !== undefined) {\n                if (this.options.min.value === undefined) {\n                    throw new Error('The min.value parameter is not defined in the Inspector validator configuration')\n                }\n\n                if (value < this.options.min.value) {\n                    return this.options.min.message !== undefined ?\n                        this.options.min.message :\n                        \"The value should not be less than \" + this.options.min.value\n                }\n            }\n\n            if (this.options.max !== undefined) {\n                if (this.options.max.value === undefined) {\n                    throw new Error('The max.value parameter is not defined in the table Inspector validator configuration')\n                }\n\n                if (value > this.options.max.value) {\n                    return this.options.max.message !== undefined ?\n                        this.options.max.message :\n                        \"The value should not be greater than \" + this.options.max.value\n                }\n            }\n        }\n    }\n\n    $.oc.inspector.validators.baseNumber = BaseNumber\n}(window.jQuery);\n;\n/*\n * Inspector required validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.base,\n        BaseProto = Base.prototype\n\n    var RequiredValidator = function(options) {\n        Base.call(this, options)\n\n        this.defaultMessage = 'The property is required.'\n    }\n\n    RequiredValidator.prototype = Object.create(BaseProto)\n    RequiredValidator.prototype.constructor = Base\n\n    RequiredValidator.prototype.isValid = function(value) {\n        if (value === undefined || value === null) {\n            return this.getMessage()\n        }\n\n        if (typeof value === 'boolean') {\n            return value ? null : this.getMessage()\n        }\n\n        if (typeof value === 'object') {\n            return !$.isEmptyObject(value) ? null : this.getMessage()\n        }\n\n        return $.trim(String(value)).length > 0 ? null : this.getMessage()\n    }\n\n    $.oc.inspector.validators.required = RequiredValidator\n}(window.jQuery);\n;\n/*\n * Inspector regex validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.base,\n        BaseProto = Base.prototype\n\n    var RegexValidator = function(options) {\n        Base.call(this, options)\n    }\n\n    RegexValidator.prototype = Object.create(BaseProto)\n    RegexValidator.prototype.constructor = Base\n\n    RegexValidator.prototype.isValid = function(value) {\n        if (this.options.pattern === undefined) {\n            this.throwError('The pattern parameter is not defined in the Regex Inspector validator configuration.')\n        }\n\n        if (!this.isScalar(value)) {\n            this.throwError('The Regex Inspector validator can only be used with string values.')\n        }\n\n        if (value === undefined || value === null) {\n            return null\n        }\n\n        var string = $.trim(String(value))\n\n        if (string.length === 0) {\n            return null\n        }\n\n        var regexObj = new RegExp(this.options.pattern, this.options.modifiers)\n\n        return regexObj.test(string) ? null : this.getMessage()\n    }\n\n    $.oc.inspector.validators.regex = RegexValidator\n}(window.jQuery);\n;\n/*\n * Inspector integer validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.baseNumber,\n        BaseProto = Base.prototype\n\n    var IntegerValidator = function(options) {\n        Base.call(this, options)\n    }\n\n    IntegerValidator.prototype = Object.create(BaseProto)\n    IntegerValidator.prototype.constructor = Base\n\n    IntegerValidator.prototype.isValid = function(value) {\n        if (!this.isScalar(value) || typeof value == 'boolean') {\n            this.throwError('The Integer Inspector validator can only be used with string values.')\n        }\n\n        if (value === undefined || value === null) {\n            return null\n        }\n\n        var string = $.trim(String(value))\n\n        if (string.length === 0) {\n            return null\n        }\n\n        var testResult = this.options.allowNegative ? \n            /^\\-?[0-9]*$/.test(string) : \n            /^[0-9]*$/.test(string)\n\n        if (!testResult) {\n            var defaultMessage = this.options.allowNegative ?\n                'The value should be an integer.' :\n                'The value should be a positive integer.';\n\n            return this.getMessage(defaultMessage)\n        }\n\n        return this.doCommonChecks(parseInt(string))\n    }\n\n    $.oc.inspector.validators.integer = IntegerValidator\n}(window.jQuery);\n;\n/*\n * Inspector float validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.baseNumber,\n        BaseProto = Base.prototype\n\n    var FloatValidator = function(options) {\n        Base.call(this, options)\n    }\n\n    FloatValidator.prototype = Object.create(BaseProto)\n    FloatValidator.prototype.constructor = Base\n\n    FloatValidator.prototype.isValid = function(value) {\n        if (!this.isScalar(value) || typeof value == 'boolean') {\n            this.throwError('The Float Inspector validator can only be used with string values.')\n        }\n\n        if (value === undefined || value === null) {\n            return null\n        }\n\n        var string = $.trim(String(value))\n\n        if (string.length === 0) {\n            return null\n        }\n\n        var testResult = this.options.allowNegative ? \n            /^[-]?([0-9]+\\.[0-9]+|[0-9]+)$/.test(string) : \n            /^([0-9]+\\.[0-9]+|[0-9]+)$/.test(string)\n\n        if (!testResult) {\n            var defaultMessage = this.options.allowNegative ?\n                'The value should be a floating point number.' :\n                'The value should be a positive floating point number.';\n\n            return this.getMessage(defaultMessage)\n        }\n\n        return this.doCommonChecks(parseFloat(string))\n    }\n\n    $.oc.inspector.validators.float = FloatValidator\n}(window.jQuery);\n;\n/*\n * Inspector length validator.\n */\n+function ($) { \"use strict\";\n\n    var Base = $.oc.inspector.validators.base,\n        BaseProto = Base.prototype\n\n    var LengthValidator = function(options) {\n        Base.call(this, options)\n    }\n\n    LengthValidator.prototype = Object.create(BaseProto)\n    LengthValidator.prototype.constructor = Base\n\n    LengthValidator.prototype.isValid = function(value) {\n        if (value === undefined || value === null) {\n            return null\n        }\n\n        if (typeof value == 'boolean') {\n            this.throwError('The Length Inspector validator cannot work with Boolean values.')\n\n        }\n\n        var length = null\n\n        if(Object.prototype.toString.call(value) === '[object Array]' || typeof value === 'string') {\n            length = value.length\n        }\n        else if (typeof value === 'object') {\n            length = this.getObjectLength(value)\n        }\n\n        if (this.options.min !== undefined || this.options.max !== undefined) {\n            if (this.options.min !== undefined) {\n                if (this.options.min.value === undefined) {\n                    throw new Error('The min.value parameter is not defined in the Length Inspector validator configuration.')\n                }\n\n                if (length < this.options.min.value) {\n                    return this.options.min.message !== undefined ?\n                        this.options.min.message :\n                        \"The value should not be shorter than \" + this.options.min.value\n                }\n            }\n\n            if (this.options.max !== undefined) {\n                if (this.options.max.value === undefined)\n                    throw new Error('The max.value parameter is not defined in the Length Inspector validator configuration.')\n\n                if (length > this.options.max.value) {\n                    return this.options.max.message !== undefined ?\n                        this.options.max.message :\n                        \"The value should not be longer than \" + this.options.max.value\n                }\n            }\n        }\n    }\n\n    LengthValidator.prototype.getObjectLength = function(value) {\n        var result = 0\n\n        for (var key in value) {\n            result++\n        }\n\n        return result\n    }\n\n    $.oc.inspector.validators.length = LengthValidator\n}(window.jQuery);\n;\n/*\n * External parameter editor for Inspector.\n *\n * The external parameter editor allows to use URL and\n * other external parameters as values for the inspectable\n * properties.\n *\n */\n+function ($) { \"use strict\";\n\n    // NAMESPACES\n    // ============================\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    if ($.oc.inspector === undefined)\n        $.oc.inspector = {}\n\n    // CLASS DEFINITION\n    // ============================\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype\n\n    var ExternalParameterEditor = function(inspector, propertyDefinition, containerCell, initialValue) {\n        this.inspector = inspector\n        this.propertyDefinition = propertyDefinition\n        this.containerCell = containerCell\n        this.initialValue = initialValue\n\n        Base.call(this)\n\n        this.init()\n    }\n\n    ExternalParameterEditor.prototype = Object.create(BaseProto)\n    ExternalParameterEditor.prototype.constructor = Base\n\n    ExternalParameterEditor.prototype.dispose = function() {\n        this.disposeControls()\n        this.unregisterHandlers()\n\n        this.inspector = null\n        this.propertyDefinition = null\n        this.containerCell = null\n        this.initialValue = null\n\n        BaseProto.dispose.call(this)\n    }\n\n    ExternalParameterEditor.prototype.init = function() {\n        this.tooltipText = 'Click to enter the external parameter name to load the property value from'\n\n        this.build()\n        this.registerHandlers()\n        this.setInitialValue()\n    }\n\n    /**\n     * Builds the external parameter editor markup:\n     *\n     * <div class=\"external-param-editor-container\">\n     *     <input> <-- original property editing input/markup\n     *     <div class=\"external-editor\">\n     *         <div class=\"controls\">\n     *             <input type=\"text\" tabindex=\"-1\"/>\n     *             <a href=\"#\" tabindex=\"-1\">\n     *                 <i class=\"oc-icon-terminal\"></i>\n     *             </a>\n     *         </div>\n     *     </div>\n     * </div>\n     */\n    ExternalParameterEditor.prototype.build = function() {\n        var container = document.createElement('div'),\n            editor = document.createElement('div'),\n            controls = document.createElement('div'),\n            input = document.createElement('input'),\n            link = document.createElement('a'),\n            icon = document.createElement('i')\n\n        container.setAttribute('class', 'external-param-editor-container')\n        editor.setAttribute('class', 'external-editor')\n        controls.setAttribute('class', 'controls')\n        input.setAttribute('type', 'text')\n        input.setAttribute('tabindex', '-1')\n\n        link.setAttribute('href', '#')\n        link.setAttribute('class', 'external-editor-link')\n        link.setAttribute('tabindex', '-1')\n        link.setAttribute('title', this.tooltipText)\n        $(link).tooltip({'container': 'body', delay: 500})\n\n        icon.setAttribute('class', 'oc-icon-terminal')\n\n        link.appendChild(icon)\n        controls.appendChild(input)\n        controls.appendChild(link)\n        editor.appendChild(controls)\n\n        while (this.containerCell.firstChild) {\n            var child = this.containerCell.firstChild\n\n            container.appendChild(child)\n        }\n\n        container.appendChild(editor)\n        this.containerCell.appendChild(container)\n    }\n\n    ExternalParameterEditor.prototype.setInitialValue = function() {\n        if (!this.initialValue) {\n            return\n        }\n\n        if (typeof this.initialValue !== 'string') {\n            return\n        }\n\n        var matches = []\n        if (matches = this.initialValue.match(/^\\{\\{([^\\}]+)\\}\\}$/)) {\n            var value = $.trim(matches[1])\n\n            if (value.length > 0) {\n                this.showEditor(true)\n                this.getInput().value = value\n                this.inspector.setPropertyValue(this.propertyDefinition.property, null, true, true)\n            }\n        }\n    }\n\n    ExternalParameterEditor.prototype.showEditor = function(building) {\n        var editor = this.getEditor(),\n            input = this.getInput(),\n            container = this.getContainer(),\n            link = this.getLink()\n\n        var position = $(editor).position()\n\n        if (!building) {\n            editor.style.right = 0\n            editor.style.left = position.left + 'px'\n        }\n        else {\n            editor.style.right = 0\n        }\n\n        setTimeout(this.proxy(this.repositionEditor), 0)\n\n        $.oc.foundation.element.addClass(container, 'editor-visible')\n        link.setAttribute('data-original-title', 'Click to enter the property value')\n\n        this.toggleEditorVisibility(false)\n        input.setAttribute('tabindex', 0)\n\n        if (!building) {\n            input.focus()\n        }\n    }\n\n    ExternalParameterEditor.prototype.repositionEditor = function() {\n        this.getEditor().style.left = 0;\n        this.containerCell.scrollTop = 0;\n    }\n\n    ExternalParameterEditor.prototype.hideEditor = function() {\n        var editor = this.getEditor(),\n            container = this.getContainer();\n\n        editor.style.left = 'auto';\n        editor.style.right = '30px';\n\n        $.oc.foundation.element.removeClass(container, 'editor-visible');\n        $.oc.foundation.element.removeClass(this.containerCell, 'active');\n\n        var propertyEditor = this.inspector.findPropertyEditor(this.propertyDefinition.property);\n\n        if (propertyEditor) {\n            propertyEditor.onExternalPropertyEditorHidden();\n        }\n    }\n\n    ExternalParameterEditor.prototype.toggleEditor = function(ev) {\n        $.oc.foundation.event.stop(ev);\n\n        var link = this.getLink(),\n            container = this.getContainer(),\n            editor = this.getEditor();\n\n        $(link).tooltip('hide');\n\n        if (!this.isEditorVisible()) {\n            this.showEditor();\n            return;\n        }\n\n        var left = container.offsetWidth;\n\n        editor.style.left = left + 'px';\n        link.setAttribute('data-original-title', this.tooltipText);\n        this.getInput().setAttribute('tabindex', '-1');\n\n        this.toggleEditorVisibility(true)\n\n        setTimeout(this.proxy(this.hideEditor), 200)\n    }\n\n    ExternalParameterEditor.prototype.toggleEditorVisibility = function(show) {\n        var container = this.getContainer(),\n            children = container.children,\n            height = 0;\n\n        if (!show) {\n            height = this.containerCell.getAttribute('data-inspector-cell-height')\n\n            if (!height) {\n                height = $(this.containerCell).height()\n                this.containerCell.setAttribute('data-inspector-cell-height', height)\n            }\n        }\n\n        // Fixed value instead of trying to get the container cell height.\n        // If the editor is contained in initially hidden editor (collapsed group),\n        // the container cell will be unknown.\n\n        height = Math.max(height, 19);\n\n        for (var i = 0, len = children.length; i < len; i++) {\n            var element = children[i]\n\n            if ($.oc.foundation.element.hasClass(element, 'external-editor')) {\n                continue\n            }\n\n            if (show) {\n                $.oc.foundation.element.removeClass(element, 'oc-hide');\n            }\n            else {\n                container.style.height = height + 'px'\n                $.oc.foundation.element.addClass(element, 'oc-hide');\n            }\n        }\n    }\n\n    ExternalParameterEditor.prototype.focus = function() {\n        this.getInput().focus({ preventScroll: true });\n    }\n\n    ExternalParameterEditor.prototype.validate = function(silentMode) {\n        var value = $.trim(this.getValue());\n\n        if (value.length === 0) {\n            if (!silentMode) {\n                $.oc.flashMsg({text: 'Please enter the external parameter name.', 'class': 'error', 'interval': 5});\n                this.focus();\n            }\n\n            return false;\n        }\n\n        return true;\n    }\n\n    //\n    // Event handlers\n    //\n\n    ExternalParameterEditor.prototype.registerHandlers = function() {\n        var input = this.getInput();\n\n        this.getLink().addEventListener('click', this.proxy(this.toggleEditor));\n        input.addEventListener('focus', this.proxy(this.onInputFocus));\n        input.addEventListener('change', this.proxy(this.onInputChange));\n    }\n\n    ExternalParameterEditor.prototype.onInputFocus = function() {\n        this.inspector.makeCellActive(this.containerCell);\n    }\n\n    ExternalParameterEditor.prototype.onInputChange = function() {\n        this.inspector.markPropertyChanged(this.propertyDefinition.property, true);\n    }\n\n    //\n    // Disposing\n    //\n\n    ExternalParameterEditor.prototype.unregisterHandlers = function() {\n        var input = this.getInput()\n\n        this.getLink().removeEventListener('click', this.proxy(this.toggleEditor))\n        input.removeEventListener('focus', this.proxy(this.onInputFocus))\n        input.removeEventListener('change', this.proxy(this.onInputChange))\n    }\n\n    ExternalParameterEditor.prototype.disposeControls = function() {\n        $(this.getLink()).tooltip('dispose');\n    }\n\n    //\n    // Helpers\n    //\n\n    ExternalParameterEditor.prototype.getInput = function() {\n        return this.containerCell.querySelector('div.external-editor input')\n    }\n\n    ExternalParameterEditor.prototype.getValue = function() {\n        return this.getInput().value\n    }\n\n    ExternalParameterEditor.prototype.getLink = function() {\n        return this.containerCell.querySelector('a.external-editor-link')\n    }\n\n    ExternalParameterEditor.prototype.getContainer = function() {\n        return this.containerCell.querySelector('div.external-param-editor-container')\n    }\n\n    ExternalParameterEditor.prototype.getEditor = function() {\n        return this.containerCell.querySelector('div.external-editor')\n    }\n\n    ExternalParameterEditor.prototype.getPropertyName = function() {\n        return this.propertyDefinition.property\n    }\n\n    ExternalParameterEditor.prototype.isEditorVisible = function() {\n        return $.oc.foundation.element.hasClass(this.getContainer(), 'editor-visible')\n    }\n\n    $.oc.inspector.externalParameterEditor = ExternalParameterEditor\n}(window.jQuery);\n;\n/*\n * The bar chart plugin.\n *\n * Data attributes:\n * - data-control=\"chart-bar\" - enables the bar chart plugin\n * - data-height=\"200\" - optional, height of the graph\n * - data-full-width=\"1\" - optional, determines whether the chart should use the full width of the container\n *\n * JavaScript API:\n * $('.scoreboard .chart').barChart()\n *\n * Dependencies:\n * - Raphaël (raphael-min.js)\n */\n+function ($) { \"use strict\";\n\n    var BarChart = function (element, options) {\n        this.options = options || {}\n\n        var\n            $el = this.$el = $(element),\n            size = this.size = $el.height(),\n            self = this,\n            values = $.oc.chartUtils.loadListValues($('ul', $el)),\n            $legend = $.oc.chartUtils.createLegend($('ul', $el)),\n            indicators = $.oc.chartUtils.initLegendColorIndicators($legend),\n            isFullWidth = this.isFullWidth(),\n            chartHeight = this.options.height !== undefined ? this.options.height : size,\n            chartWidth = isFullWidth ? this.$el.width() : size,\n            barWidth = (chartWidth - (values.values.length-1)*this.options.gap)/values.values.length\n\n        var $canvas = $('<div/>').addClass('canvas').height(chartHeight).width(isFullWidth ? '100%' : chartWidth)\n        $el.prepend($canvas)\n        $el.toggleClass('full-width', isFullWidth)\n\n        Raphael($canvas.get(0), isFullWidth ? '100%' : chartWidth, chartHeight, function(){\n            self.paper = this\n            self.bars = this.set()\n\n            self.paper.customAttributes.bar = function (start, height) {\n                return {\n                    path: [\n                        [\"M\", start, chartHeight],\n                        [\"L\", start, chartHeight-height],\n                        [\"L\", start + barWidth, chartHeight-height],\n                        [\"L\", start + barWidth, chartHeight],\n                        [\"Z\"]\n                    ]\n                }\n            }\n\n            // Add bars\n            var start = 0\n            $.each(values.values, function(index, valueInfo) {\n                var color = valueInfo.color !== undefined ? valueInfo.color : $.oc.chartUtils.getColor(index),\n                    path = self.paper.path().attr({\"stroke-width\": 0}).attr({bar: [start, 0]}).attr({fill: color})\n\n                self.bars.push(path)\n                indicators[index].css('background-color', color)\n                start += barWidth + self.options.gap\n\n                path.hover(function(ev){\n                    $.oc.chartUtils.showTooltip(ev.pageX, ev.pageY,\n                        $.trim($.oc.chartUtils.getLegendLabel($legend, index)) + ': <strong>'+valueInfo.value+'</stong>')\n                }, function() {\n                    $.oc.chartUtils.hideTooltip()\n                })\n            })\n\n            // Animate bars\n            start = 0\n            $.each(values.values, function(index, valueInfo) {\n                var height = (values.max && valueInfo.value) ? chartHeight/values.max * valueInfo.value : 0\n\n                self.bars[index].animate({bar: [start, height]}, 1000, \"bounce\")\n                start += barWidth + self.options.gap\n            })\n\n            // Update the full-width chart when the window is redized\n            if (isFullWidth) {\n                $(window).on('resize', function(){\n                    chartWidth = self.$el.width()\n                    barWidth = (chartWidth - (values.values.length-1)*self.options.gap)/values.values.length\n\n                    var start = 0\n                    $.each(values.values, function(index, valueInfo) {\n                        var height = (values.max && valueInfo.value) ? chartHeight/values.max * valueInfo.value : 0\n\n                        self.bars[index].animate({bar: [start, height]}, 10, \"bounce\")\n                        start += barWidth + self.options.gap\n                    })\n                })\n            }\n        })\n    }\n\n    BarChart.prototype.isFullWidth = function() {\n        return this.options.fullWidth !== undefined && this.options.fullWidth\n    }\n\n    BarChart.DEFAULTS = {\n        gap: 2\n    }\n\n    // BARCHART PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.barChart\n\n    $.fn.barChart = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.barChart')\n            var options = $.extend({}, BarChart.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data)\n                $this.data('oc.barChart', new BarChart(this, options))\n        })\n    }\n\n    $.fn.barChart.Constructor = BarChart\n\n    // BARCHART NO CONFLICT\n    // =================\n\n    $.fn.barChart.noConflict = function () {\n        $.fn.barChart = old\n        return this\n    }\n\n    // BARCHART DATA-API\n    // ===============\n\n    $(document).render(function () {\n        $('[data-control=chart-bar]').barChart()\n    })\n\n}(window.jQuery)\n\n;\n/*\n * Line Chart Plugin\n *\n * Data attributes:\n * - data-control=\"chart-line\" - enables the line chart plugin\n * - data-reset-zoom-link=\"#reset-zoom\" - specifies a link to reset zoom\n * - data-zoomable - indicates that the chart is zoomable\n * - data-time-mode=\"weeks\" - if the \"weeks\" value is specified and the xaxis mode is \"time\", the X axis labels will be displayed as week end dates.\n * - data-chart-options=\"xaxis: {mode: 'time'}\" - specifies the Flot configuration in JSON format. See https://github.com/flot/flot/blob/master/API.md for details.\n *\n * Data sets are defined with the SPAN elements inside the chart element: <span data-chart=\"dataset\" data-set-data=\"[0,0],[1,19]\">\n * Data set elements could contain data attributes with names in the format \"data-set-color\". The names for the data set\n * attributes are described in the Flot documentation: https://github.com/flot/flot/blob/master/API.md#data-format\n *\n * JavaScript API:\n * $('.chart').chartLine({ resetZoomLink:'#reset-zoom' })\n *\n * Dependencies:\n * - Flot (jquery.flot.js)\n * - Flot Tooltip (jquery.flot.tooltip.js)\n * - Flot Resize (jquery.flot.resize.js)\n * - Flot Time (jquery.flot.time.js)\n */\n\n+function ($) { \"use strict\";\n\n    // LINE CHART CLASS DEFINITION\n    // ============================\n\n    var ChartLine = function(element, options) {\n        var self = this;\n\n        var isDark = document.documentElement.getAttribute('data-bs-theme') === 'dark';\n        var colorBackground = '#fff',\n            colorMarkings = 'rgba(0,0,0,0.02)';\n\n        if (isDark) {\n            colorBackground = '#1e2227';\n            colorMarkings = 'rgba(255,255,255,0.02)';\n        }\n\n        // Flot options\n        this.chartOptions = {\n            xaxis: {\n                mode: \"time\",\n                tickLength: 5\n            },\n            selection: { mode: \"x\" },\n            grid: {\n                markingsColor: colorMarkings,\n                backgroundColor: { colors: [colorBackground, colorBackground] },\n                borderColor: \"#7bafcc\",\n                borderWidth: 0,\n                color: colorBackground,\n                hoverable: true,\n                clickable: true,\n                labelMargin: 10\n            },\n            series: {\n                lines: {\n                    show: true,\n                    fill: true\n                },\n                points: {\n                    show: true\n                }\n            },\n            tooltip: true,\n            tooltipOpts: {\n                defaultTheme: false,\n                content: \"%x: <strong>%y</strong>\",\n                dateFormat: \"%y-%0m-%0d\",\n                shifts: {\n                    x: 10,\n                    y: 20\n                }\n            },\n            legend: {\n                show: true,\n                noColumns: 2\n            }\n        }\n\n        this.defaultDataSetOptions = {\n            shadowSize: 0\n        }\n\n        var parsedOptions = {}\n        try {\n            parsedOptions = oc.parseJSON(\"{\" + options.chartOptions + \"}\");\n        }\n        catch (e) {\n            throw new Error('Error parsing the data-chart-options attribute value. '+e);\n        }\n\n        this.chartOptions = $.extend({}, this.chartOptions, parsedOptions)\n\n        this.options = options\n        this.$el = $(element)\n        this.fullDataSet = []\n        this.resetZoomLink = $(options.resetZoomLink)\n\n        this.$el.trigger('oc.chartLineInit', [this])\n\n        /*\n         * Bind Events\n         */\n\n        this.resetZoomLink.on('click', $.proxy(this.clearZoom, this));\n\n        if (this.options.zoomable) {\n            this.$el.on(\"plotselected\", function (event, ranges) {\n                var newCoords = {\n                    xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }\n                }\n\n                $.plot(self.$el, self.fullDataSet, $.extend(true, {}, self.chartOptions, newCoords))\n                self.resetZoomLink.show()\n            });\n        }\n\n        /*\n         * Markings Helper\n         */\n\n        if (this.chartOptions.xaxis.mode == \"time\" && this.options.timeMode == \"weeks\")\n            this.chartOptions.markings = weekendAreas\n\n        function weekendAreas(axes) {\n            var markings = [],\n                d = new Date(axes.xaxis.min);\n\n            // Go to the first Saturday\n            d.setUTCDate(d.getUTCDate() - ((d.getUTCDay() + 1) % 7))\n            d.setUTCSeconds(0)\n            d.setUTCMinutes(0)\n            d.setUTCHours(0)\n            var i = d.getTime()\n\n            do {\n                // When we don't set yaxis, the rectangle automatically\n                // extends to infinity upwards and downwards\n                markings.push({ xaxis: { from: i, to: i + 2 * 24 * 60 * 60 * 1000 } })\n                i += 7 * 24 * 60 * 60 * 1000\n            } while (i < axes.xaxis.max)\n\n            return markings\n        }\n\n        /*\n         * Process the datasets\n         */\n\n        this.initializing = true\n\n        this.$el.find('>[data-chart=\"dataset\"]').each(function(){\n            var data = $(this).data(),\n                processedData = {};\n\n            for (var key in data) {\n                var normalizedKey = key.substring(3),\n                    value = data[key];\n\n                normalizedKey = normalizedKey.charAt(0).toLowerCase() + normalizedKey.slice(1);\n                if (normalizedKey == 'data')\n                    value = Array.isArray(value) ? [value] : JSON.parse('['+value+']');\n\n                processedData[normalizedKey] = value;\n            }\n\n            self.addDataSet($.extend({}, self.defaultDataSetOptions, processedData));\n        })\n\n        /*\n         * Build chart\n         */\n\n        this.initializing = false\n        this.rebuildChart()\n    }\n\n    ChartLine.DEFAULTS = {\n        chartOptions: \"\",\n        timeMode: null,\n        zoomable: false\n    }\n\n    /*\n     * Adds a data set to the chart.\n     * See https://github.com/flot/flot/blob/master/API.md#data-format for the list\n     * of supported data set options.\n     */\n    ChartLine.prototype.addDataSet = function (dataSet) {\n        this.fullDataSet.push(dataSet)\n\n        if (!this.initializing)\n            this.rebuildChart()\n    }\n\n    ChartLine.prototype.rebuildChart = function() {\n        this.$el.trigger('oc.beforeChartLineRender', [this])\n\n        $.plot(this.$el, this.fullDataSet, this.chartOptions)\n    }\n\n    ChartLine.prototype.clearZoom = function() {\n        this.rebuildChart()\n        this.resetZoomLink.hide()\n    }\n\n    // LINE CHART PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.chartLine\n\n    $.fn.chartLine = function (option) {\n        return this.each(function () {\n            var $this   = $(this)\n            var data    = $this.data('october.chartLine')\n            var options = $.extend({}, ChartLine.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('october.chartLine', (data = new ChartLine(this, options)))\n            if (typeof option == 'string') data[option].call($this)\n        })\n    }\n\n    $.fn.chartLine.Constructor = ChartLine\n\n    // LINE CHART NO CONFLICT\n    // =================\n\n    $.fn.chartLine.noConflict = function () {\n        $.fn.chartLine = old\n        return this\n    }\n\n\n    // LINE CHART DATA-API\n    // ===============\n    $(document).render(function () {\n        $('[data-control=\"chart-line\"]').chartLine()\n    })\n\n}(window.jQuery);\n\n;\n/*\n * The goal meter plugin.\n *\n * Applies the goal meter style to a scoreboard item.\n *\n * Data attributes:\n * - data-control=\"goal-meter\" - enables the goal meter plugin\n * - data-value - sets the value, in percents\n *\n * JavaScript API:\n * $('.scoreboard .goal-meter').goalMeter({value: 20})\n * $('.scoreboard .goal-meter').goalMeter(10) // Sets the current value\n */\n+function ($) { \"use strict\";\n\n    var GoalMeter = function (element, options) {\n        var\n            $el = this.$el = $(element),\n            self = this;\n\n        this.options = options || {};\n\n        // Canvas already drawn\n        var $canvas = $('span.goal-meter-indicator', $el);\n        if ($canvas.length > 0) {\n            return;\n        }\n\n        this.$indicatorBar = $('<span />').text(this.options.value + '%');\n        this.$indicatorOuter = $('<span />').addClass('goal-meter-indicator').append(this.$indicatorBar);\n\n        $('p', this.$el).first().before(this.$indicatorOuter);\n\n        window.setTimeout(function(){\n            self.update(self.options.value);\n        }, 200);\n    }\n\n    GoalMeter.prototype.update = function(value) {\n        this.$indicatorBar.css('height', value + '%');\n    }\n\n    GoalMeter.DEFAULTS = {\n        value: 50\n    }\n\n    // GOALMETER PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.goalMeter\n\n    $.fn.goalMeter = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.goalMeter')\n            var options = $.extend({}, GoalMeter.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data)\n                $this.data('oc.goalMeter', (data = new GoalMeter(this, options)))\n            else\n                data.update(option)\n        })\n    }\n\n    $.fn.goalMeter.Constructor = GoalMeter\n\n    // GOALMETER NO CONFLICT\n    // =================\n\n    $.fn.goalMeter.noConflict = function () {\n        $.fn.goalMeter = old\n        return this\n    }\n\n    // GOALMETER DATA-API\n    // ===============\n\n\n    $(document).render(function () {\n        $('[data-control=goal-meter]').goalMeter()\n    })\n\n}(window.jQuery);\n;\n/*\n * The pie chart plugin.\n *\n * Data attributes:\n * - data-control=\"chart-pie\" - enables the pie chart plugin\n * - data-size=\"200\" - optional, size of the graph\n * - data-center-text - text to display inside the graph\n *\n * JavaScript API:\n * $('.scoreboard .chart').pieChart()\n *\n * Dependencies:\n * - Raphaël (raphael-min.js)\n * - October chart utilities (chart.utils.js)\n */\n+function ($) { \"use strict\";\n\n    var PieChart = function (element, options) {\n        this.options = options || {}\n\n        var\n            $el = this.$el = $(element),\n            size = this.size = (this.options.size !== undefined ? this.options.size : $el.height()),\n            outerRadius = size/2 - 1,\n            innerRadius = outerRadius - outerRadius/3.5,\n            values = $.oc.chartUtils.loadListValues($('ul', $el)),\n            $legend = $.oc.chartUtils.createLegend($('ul', $el)),\n            indicators = $.oc.chartUtils.initLegendColorIndicators($legend),\n            self = this;\n\n        // Canvas already drawn\n        var $canvas = $('div.canvas', $el);\n        if ($canvas.length > 0) {\n            return;\n        }\n\n        var $canvas = $('<div />').addClass('canvas').width(size).height(size);\n        $el.prepend($canvas);\n\n        // Truncate scoreboard in cases where there are more than 3 items\n        $legend.height(size).css('overflow', 'hidden');\n\n        Raphael($canvas.get(0), size, size, function(){\n            self.paper = this;\n            self.segments = this.set();\n\n            self.paper.customAttributes.segment = function (startAngle, endAngle) {\n                var\n                    p1 = self.arcCoords(outerRadius, startAngle),\n                    p2 = self.arcCoords(outerRadius, endAngle),\n                    p3 = self.arcCoords(innerRadius, endAngle),\n                    p4 = self.arcCoords(innerRadius, startAngle),\n                    flag = (endAngle - startAngle) > 180,\n                    path = [\n                        [\"M\", p1.x, p1.y],\n                        [\"A\", outerRadius, outerRadius, 0, +flag, 0, p2.x, p2.y],\n                        [\"L\", p3.x, p3.y],\n                        [\"A\", innerRadius, innerRadius, 0, +flag, 1, p4.x, p4.y],\n                        [\"Z\"]\n                    ];\n\n                return {path: path};\n            };\n\n            // Draw the background\n            self.paper.circle(size/2, size/2, innerRadius + (outerRadius - innerRadius)/2)\n                .attr({\"stroke-width\": outerRadius - innerRadius - 0.5})\n                .attr({stroke: $.oc.chartUtils.defaultValueColor});\n\n            // Add segments\n            $.each(values.values, function(index, valueInfo) {\n                var color = valueInfo.color !== undefined ? valueInfo.color : $.oc.chartUtils.getColor(index),\n                    path = self.paper.path().attr({\"stroke-width\": 0}).attr({segment: [0, 0]}).attr({fill: color})\n\n                self.segments.push(path)\n                indicators[index].css('background-color', color)\n\n                path.hover(function(ev){\n                    $.oc.chartUtils.showTooltip(ev.pageX, ev.pageY,\n                        $.trim($.oc.chartUtils.getLegendLabel($legend, index)) + ': <strong>'+valueInfo.value+'</stong>')\n                }, function() {\n                    $.oc.chartUtils.hideTooltip()\n                })\n            });\n\n            // Animate segments\n            var start = self.options.startAngle\n            $.each(values.values, function(index, valueInfo) {\n                var length = (values.total && valueInfo.value) ? 360/values.total * valueInfo.value : 0\n                if (length == 360)\n                    length--\n\n                self.segments[index].animate({segment: [start, start + length]}, 1000, \"bounce\")\n                start += length\n            });\n        })\n\n        if (this.options.centerText !== undefined) {\n            var $text = $('<span>').addClass('center').html(this.options.centerText);\n            $canvas.append($text);\n        }\n    }\n\n    PieChart.prototype.arcCoords = function(radius, angle) {\n      var\n        a = Raphael.rad(angle),\n        x = this.size/2 + radius * Math.cos(a),\n        y = this.size/2 - radius * Math.sin(a);\n\n        return {'x': x, 'y': y};\n    }\n\n    PieChart.DEFAULTS = {\n        startAngle: 45\n    }\n\n    // PIECHART PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.pieChart\n\n    $.fn.pieChart = function (option) {\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.pieChart')\n            var options = $.extend({}, PieChart.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data)\n                $this.data('oc.pieChart', new PieChart(this, options))\n        })\n    }\n\n    $.fn.pieChart.Constructor = PieChart\n\n    // PIECHART NO CONFLICT\n    // =================\n\n    $.fn.pieChart.noConflict = function () {\n        $.fn.pieChart = old\n        return this\n    }\n\n    // PIECHART DATA-API\n    // ===============\n\n    $(document).render(function () {\n        $('[data-control=chart-pie]').pieChart()\n    })\n\n}(window.jQuery);\n\n;\n/*\n * October charting utilities.\n */\n\n+function ($) { \"use strict\";\n\n    var ChartUtils = function() {};\n\n    ChartUtils.prototype.defaultValueColor = '#b8b8b8';\n\n    ChartUtils.prototype.getColor = function(index) {\n        var\n            colors = [\n                '#95b753', '#cc3300', '#e5a91a', '#3366ff', '#ff0f00', '#ff6600',\n                '#ff9e01', '#fcd202', '#f8ff01', '#b0de09', '#04d215', '#0d8ecf', '#0d52d1',\n                '#2a0cd0', '#8a0ccf', '#cd0d74', '#754deb', '#dddddd', '#999999', '#333333',\n                '#000000', '#57032a', '#ca9726', '#990000', '#4b0c25'\n            ],\n            colorIndex = index % (colors.length-1);\n\n        return colors[colorIndex];\n    }\n\n    ChartUtils.prototype.loadListValues = function($list) {\n        var result = {\n            values: [],\n            total: 0,\n            max: 0\n        };\n\n        $('> li', $list).each(function() {\n            var value = $(this).data('value')\n                ? parseFloat($(this).data('value'))\n                : parseFloat($('span', this).text());\n\n            // Negative values present as positive in charts\n            if (value < 0) {\n                value = value * -1;\n            }\n\n            result.total += value;\n            result.values.push({value: value, color: $(this).data('color')});\n            result.max = Math.max(result.max, value);\n        });\n\n        return result;\n    }\n\n    ChartUtils.prototype.getLegendLabel = function($legend, index) {\n        return $('tr:eq('+index+') td:eq(1)', $legend).html();\n    }\n\n    ChartUtils.prototype.initLegendColorIndicators = function($legend) {\n        var indicators = [];\n\n        $('tr > td:first-child', $legend).each(function() {\n            var indicator = $('<i></i>');\n            $(this).prepend(indicator);\n            indicators.push(indicator);\n        });\n\n        return indicators;\n    }\n\n    ChartUtils.prototype.createLegend = function($list) {\n        var\n            $legend = $('<div>').addClass('chart-legend'),\n            $table = $('<table>')\n\n        $legend.append($table)\n\n        $('> li', $list).each(function() {\n            var label = $(this).clone().children().remove().end().html();\n\n            $table.append(\n                $('<tr>')\n                    .append($('<td class=\"indicator\">'))\n                    .append($('<td>').html(label))\n                    .append($('<td>').addClass('value').html($('span', this).html()))\n            );\n        });\n\n        $legend.insertAfter($list);\n        $list.remove();\n\n        return $legend;\n    }\n\n    ChartUtils.prototype.showTooltip = function(x, y, text) {\n        var $tooltip = $('#chart-tooltip');\n\n        if ($tooltip.length) {\n            $tooltip.remove();\n        }\n\n        $tooltip = $('<div id=\"chart-tooltip\">')\n            .html(text)\n            .css('visibility', 'hidden');\n\n        x += 10;\n        y += 10;\n\n        $(document.body).append($tooltip)\n        var tooltipWidth = $tooltip.outerWidth()\n        if ((x + tooltipWidth) > $(window).width())\n            x = $(window).width() - tooltipWidth - 10;\n\n        $tooltip.css({top: y, left: x, visibility: 'visible'});\n    }\n\n    ChartUtils.prototype.hideTooltip = function() {\n       $('#chart-tooltip').remove();\n    }\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    $.oc.chartUtils = new ChartUtils();\n}(window.jQuery);\n\n;\n/*\n * The loading indicator.\n * @deprecated this will be removed in the future\n * Consider using data-attach-loading\n *\n * The load indicator DIV is injected inside its container. The container should have\n * the relative position (use the loading-indicator-container class for it).\n *\n * Used with framework.js\n *\n * data-load-indicator=\"Message\" - displays a load indicator with a supplied message, the element\n * must be wrapped in a `<div class=\"loading-indicator-container\"></div>` container.\n *\n * JavaScript API:\n *\n * $('#buttons').loadIndicator({ text: 'Saving...', opaque: true }) - display the indicator in a solid (opaque) state\n * $('#buttons').loadIndicator({ centered: true }) - display the indicator aligned in the center horizontally\n * $('#buttons').loadIndicator({ size: small }) - display the indicator in small size\n * $('#buttons').loadIndicator({ text: 'Saving...' }) - display the indicator in a transparent state\n * $('#buttons').loadIndicator('hide') - display the indicator\n */\n+function ($) { \"use strict\";\n\n    var LoadIndicator = function (element, options) {\n        this.$el = $(element);\n\n        this.options = options || {};\n        this.tally = 0;\n        this.show();\n    }\n\n    LoadIndicator.prototype.hide = function() {\n        this.tally--;\n\n        if (this.tally <= 0) {\n            $('div.loading-indicator', this.$el).remove();\n            this.$el.removeClass('in-progress');\n        }\n    }\n\n    LoadIndicator.prototype.show = function(options) {\n        if (options) {\n            this.options = options;\n        }\n\n        this.hide();\n\n        var indicator = $('<div class=\"loading-indicator\"></div>');\n        indicator.append($('<div></div>').text(this.options.text));\n        indicator.append($('<span></span>'));\n        if (this.options.opaque !== undefined) {\n            indicator.addClass('is-opaque');\n        }\n        if (this.options.centered !== undefined) {\n            indicator.addClass('indicator-center');\n        }\n        if (this.options.size === 'small') {\n            indicator.addClass('size-small');\n        }\n\n        this.$el.prepend(indicator);\n        this.$el.addClass('in-progress');\n\n        this.tally++;\n    }\n\n    LoadIndicator.prototype.destroy = function() {\n        this.$el.removeData('oc.loadIndicator');\n        this.$el = null;\n    }\n\n    LoadIndicator.DEFAULTS = {\n        text: ''\n    }\n\n    // LOADINDICATOR PLUGIN DEFINITION\n    // ============================\n\n    var old = $.fn.loadIndicator;\n\n    $.fn.loadIndicator = function (option) {\n        var args = arguments;\n\n        return this.each(function () {\n            var $this = $(this)\n            var data  = $this.data('oc.loadIndicator')\n            var options = $.extend({}, LoadIndicator.DEFAULTS, typeof option == 'object' && option)\n\n            if (!data) {\n                if (typeof option == 'string') {\n                    return;\n                }\n\n                $this.data('oc.loadIndicator', (data = new LoadIndicator(this, options)));\n            }\n            else {\n                if (typeof option !== 'string') {\n                    data.show(options);\n                }\n                else {\n                    var methodArgs = [];\n                    for (var i=1; i<args.length; i++) {\n                        methodArgs.push(args[i]);\n                    }\n\n                    data[option].apply(data, methodArgs);\n                }\n            }\n        });\n    }\n\n    $.fn.loadIndicator.Constructor = LoadIndicator;\n\n    // LOADINDICATOR NO CONFLICT\n    // =================\n\n    $.fn.loadIndicator.noConflict = function () {\n        $.fn.loadIndicator = old;\n        return this;\n    }\n\n    // LOADINDICATOR DATA-API\n    // ==============\n\n    $(document)\n        .on('ajaxPromise', '[data-load-indicator]', function() {\n            var\n                indicatorContainer = $(this).closest('.loading-indicator-container'),\n                loadingText = $(this).data('load-indicator'),\n                options = {\n                    opaque: $(this).data('load-indicator-opaque'),\n                    centered: $(this).data('load-indicator-centered'),\n                    size: $(this).data('load-indicator-size')\n                };\n\n                if (loadingText) {\n                    options.text = loadingText;\n                }\n\n            indicatorContainer.loadIndicator(options);\n        })\n        .on('ajaxFail ajaxDone', '[data-load-indicator]', function() {\n            $(this).closest('.loading-indicator-container').loadIndicator('hide');\n        });\n\n}(window.jQuery);\n\n;\n// Deprecated reference\nwindow.assetManager = oc.AssetManager;\nwindow.ocJSON = oc.parseJSON;\n\n;\n/*\n * Checkbox control\n *\n */\n\n(function($) {\n\n    $(document).on('keypress', 'div.custom-checkbox', function(e) {\n        if (e.key === '(Space character)' || e.key === 'Spacebar' || e.key === ' ') {\n            var $cb = $('input[type=checkbox]', this)\n\n            if ($cb.data('oc-space-timestamp') == e.timeStamp)\n                return\n\n            if ($cb.get(0).disabled) {\n                return false\n            }\n\n            $cb.get(0).checked = !$cb.get(0).checked\n            $cb.data('oc-space-timestamp', e.timeStamp)\n            $cb.trigger('change')\n            return false\n        }\n    })\n\n    //\n    // Intermediate checkboxes\n    //\n\n    $(document).render(function() {\n        $('div.custom-checkbox.is-indeterminate > input').each(function() {\n            var $el = $(this),\n                checked = $el.data('checked')\n\n            switch (checked) {\n\n                // Unchecked\n                case 1:\n                    $el.prop('indeterminate', true)\n                    break\n\n                // Checked\n                case 2:\n                    $el.prop('indeterminate', false)\n                    $el.prop('checked', true)\n                    break\n\n                // Unchecked\n                default:\n                    $el.prop('indeterminate', false)\n                    $el.prop('checked', false)\n            }\n        })\n    })\n\n    $(document).on('click', 'div.custom-checkbox.is-indeterminate > label', function() {\n        var $el = $(this).parent().find('input:first'),\n            checked = $el.data('checked')\n\n        if (checked === undefined) {\n            checked = $el.is(':checked') ? 1 : 0\n        }\n\n        switch (checked) {\n\n            // Unchecked, going indeterminate\n            case 0:\n                $el.data('checked', 1)\n                $el.prop('indeterminate', true)\n                break\n\n            // Indeterminate, going checked\n            case 1:\n                $el.data('checked', 2)\n                $el.prop('indeterminate', false)\n                $el.prop('checked', true)\n                break\n\n            // Checked, going unchecked\n            default:\n                $el.data('checked', 0)\n                $el.prop('indeterminate', false)\n                $el.prop('checked', false)\n        }\n\n        $el.trigger('change')\n        return false\n    })\n\n})(jQuery);\n\n;\n//\n// BS3 adapter\n//\n\n$(document).render(function(){\n    $('[data-toggle=dropdown]:not([data-bs-toggle])').attr('data-bs-toggle', 'dropdown');\n    $('[data-toggle=modal]:not([data-bs-toggle])').attr('data-bs-toggle', 'modal');\n    $('[data-dismiss=modal]:not([data-bs-dismiss])').attr('data-bs-dismiss', 'modal');\n    $('.fade.in:not(.show)').addClass('show');\n});\n\n;\n/*\n * Sortable plugin.\n *\n * Status: experimental. The behavior is not perfect, but it's OK in terms of memory\n * usage and disposing.\n *\n * This is a lightweight, October-style implementation of the drag & drop sorting\n * functionality. The plugin uses only HTML5 Drag&Drop feature and completely\n * disposable.\n *\n * During the dragging the plugin creates a placeholder element, which should be\n * styled separately.\n *\n * Draggable elements should be marked with \"draggable\" HTML5 attribute.\n *\n * Current / planned features:\n *\n * [x] Sorting a single list.\n * [ ] Dragging items between multiple lists.\n * [ ] Sorting nested lists.\n\n * JAVASCRIPT API\n *\n * $('#list').listSortable({})\n *\n * DATA ATTRIBUTES API\n *\n * In the simplest case the plugin can be initialized like this:\n * <ul data-control=\"list-sortable\">\n *     <li draggable=\"true\">...</li>\n *\n * Multiple lists will not support this option and the plugin should be created\n * and updated by a caller code.\n *\n * Options:\n * - handle: optional selector for a drag handle element. Also available as data-handle attribute.\n * - direction: direction of the list - horizontal or vertical. Also available as data-direction attribute. Default is vertical.\n *\n * Events:\n * - dragged.list.sortable - triggered on a list element after it was moved\n */\n\n+function ($) { \"use strict\";\n\n    var Base = $.oc.foundation.base,\n        BaseProto = Base.prototype,\n        listSortableIdCounter = 0,\n        elementsIdCounter = 0\n\n    var ListSortable = function (element, options) {\n        this.lists = []\n        this.options = options\n        this.listSortableId = null\n        this.lastMousePosition = null\n\n        Base.call(this)\n\n        $.oc.foundation.controlUtils.markDisposable(element)\n        this.init()\n\n        this.addList(element)\n    }\n\n    ListSortable.prototype = Object.create(BaseProto)\n    ListSortable.prototype.constructor = ListSortable\n\n    ListSortable.prototype.init = function () {\n        listSortableIdCounter++\n\n        this.listSortableId = 'listsortable/id/' + listSortableIdCounter\n    }\n\n    ListSortable.prototype.addList = function(list) {\n        this.lists.push(list)\n        this.registerListHandlers(list)\n\n        if (this.lists.length == 1) {\n            $(list).one('dispose-control', this.proxy(this.dispose))\n        }\n    }\n\n    //\n    // Event management\n    //\n\n    ListSortable.prototype.registerListHandlers = function(list) {\n        var $list = $(list)\n\n        $list.on('dragstart', '> li', this.proxy(this.onDragStart))\n        $list.on('dragover', '> li', this.proxy(this.onDragOver))\n        $list.on('dragenter', '> li', this.proxy(this.onDragEnter))\n        $list.on('dragleave', '> li', this.proxy(this.onDragLeave))\n        $list.on('drop', '> li', this.proxy(this.onDragDrop))\n        $list.on('dragend', '> li', this.proxy(this.onDragEnd))\n    }\n\n    ListSortable.prototype.unregisterListHandlers = function(list) {\n        var $list = $(list)\n\n        $list.off('dragstart', '> li', this.proxy(this.onDragStart))\n        $list.off('dragover', '> li', this.proxy(this.onDragOver))\n        $list.off('dragenter', '> li', this.proxy(this.onDragEnter))\n        $list.off('dragleave', '> li', this.proxy(this.onDragLeave))\n        $list.off('drop', '> li', this.proxy(this.onDragDrop))\n        $list.off('dragend', '> li', this.proxy(this.onDragEnd))\n    }\n\n    ListSortable.prototype.unregisterHandlers = function() {\n        $(document).off('dragover', this.proxy(this.onDocumentDragOver))\n        $(document).off('mousemove', this.proxy(this.onDocumentMouseMove))\n        $(this.lists[0]).off('dispose-control', this.proxy(this.dispose))\n    }\n\n    //\n    // Disposing\n    //\n\n    ListSortable.prototype.unbindLists = function() {\n        for (var i=this.lists.length-1; i>0; i--) {\n            var list = this.lists[i]\n\n            this.unregisterListHandlers(this.lists[i])\n            $(list).removeData('oc.listSortable')\n        }\n    }\n\n    ListSortable.prototype.dispose = function() {\n        this.unbindLists()\n        this.unregisterHandlers()\n\n        this.options = null\n        this.lists = []\n\n        BaseProto.dispose.call(this)\n    }\n\n    //\n    // Internal helpers\n    //\n\n    ListSortable.prototype.elementBelongsToManagedList = function(element) {\n        for (var i=this.lists.length-1; i >= 0; i--) {\n            var list = this.lists[i],\n                children = [].slice.call(list.children); // Converts HTMLCollection to array\n\n            if (children.indexOf(element) !== -1) {\n                return true\n            }\n        }\n\n        return false\n    }\n\n    ListSortable.prototype.isDragStartAllowed = function(element) {\n        // TODO: if handle selector is specified - test if\n        // the element is a handle.\n\n        return true\n    }\n\n    ListSortable.prototype.elementIsPlaceholder = function(element) {\n        return element.getAttribute('class') === 'list-sortable-placeholder'\n    }\n\n    ListSortable.prototype.getElementSortableId = function(element) {\n        if (element.hasAttribute('data-list-sortable-element-id')) {\n            return element.getAttribute('data-list-sortable-element-id')\n        }\n\n        elementsIdCounter++\n        var elementId = elementsIdCounter\n\n        element.setAttribute('data-list-sortable-element-id', elementsIdCounter)\n\n        return elementsIdCounter\n    }\n\n    ListSortable.prototype.dataTransferContains = function(ev, element) {\n        if (ev.dataTransfer.types.indexOf !== undefined){\n            return ev.dataTransfer.types.indexOf(element) >= 0\n        }\n\n        return ev.dataTransfer.types.contains(element)\n    }\n\n    ListSortable.prototype.isSourceManagedList = function(ev) {\n        return this.dataTransferContains(ev, this.listSortableId)\n    }\n\n    ListSortable.prototype.removePlaceholders = function() {\n        for (var i=this.lists.length-1; i >= 0; i--) {\n            var list = this.lists[i],\n                placeholders = list.querySelectorAll('.list-sortable-placeholder')\n\n            for (var j=placeholders.length-1; j >= 0; j--) {\n                list.removeChild(placeholders[j])\n            }\n        }\n    }\n\n    ListSortable.prototype.createPlaceholder = function(element, ev) {\n        var placeholder = document.createElement('li'),\n            placement = this.getPlaceholderPlacement(element, ev)\n\n        this.removePlaceholders()\n\n        placeholder.setAttribute('class', 'list-sortable-placeholder')\n        placeholder.setAttribute('draggable', true)\n\n        if (placement == 'before') {\n            element.parentNode.insertBefore(placeholder, element)\n        }\n        else {\n            element.parentNode.insertBefore(placeholder, element.nextSibling)\n        }\n    }\n\n    ListSortable.prototype.moveElement = function(target, ev) {\n        var list = target.parentNode,\n            placeholder = list.querySelector('.list-sortable-placeholder')\n\n        if (!placeholder) {\n            return\n        }\n\n        var elementId = ev.dataTransfer.getData('listsortable/elementid')\n        if (!elementId) {\n            return\n        }\n\n        var item = this.findDraggedItem(elementId)\n        if (!item) {\n            return\n        }\n\n        placeholder.parentNode.insertBefore(item, placeholder)\n        $(item).trigger('dragged.list.sortable')\n    }\n\n    ListSortable.prototype.findDraggedItem = function(elementId) {\n        for (var i=this.lists.length-1; i >= 0; i--) {\n            var list = this.lists[i],\n                item = list.querySelector('[data-list-sortable-element-id=\"'+elementId+'\"]')\n\n            if (item) {\n                return item\n            }\n        }\n\n        return null\n    }\n\n    ListSortable.prototype.getPlaceholderPlacement = function(hoverElement, ev) {\n        var mousePosition = $.oc.foundation.event.pageCoordinates(ev),\n            elementPosition = $.oc.foundation.element.absolutePosition(hoverElement)\n\n        if (this.options.direction == 'vertical') {\n            var elementCenter = elementPosition.top + hoverElement.offsetHeight/2\n\n            return mousePosition.y <= elementCenter ? 'before' : 'after'\n        }\n        else {\n            var elementCenter = elementPosition.left + hoverElement.offsetWidth/2\n\n            return mousePosition.x <= elementCenter ? 'before' : 'after'\n        }\n    }\n\n    ListSortable.prototype.lastMousePositionChanged = function(ev) {\n        var mousePosition = $.oc.foundation.event.pageCoordinates(ev.originalEvent)\n\n        if (this.lastMousePosition === null || this.lastMousePosition.x != mousePosition.x || this.lastMousePosition.y != mousePosition.y) {\n            this.lastMousePosition = mousePosition\n            return true\n        }\n\n        return false\n    }\n\n    ListSortable.prototype.mouseOutsideLists = function(ev) {\n        var mousePosition = $.oc.foundation.event.pageCoordinates(ev)\n\n        for (var i=this.lists.length-1; i >= 0; i--) {\n            if ($.oc.foundation.element.elementContainsPoint(this.lists[i], mousePosition)) {\n                return false\n            }\n        }\n\n        return true\n    }\n\n    ListSortable.prototype.getClosestDraggableParent = function(element) {\n        var current = element\n\n        while (current) {\n            if (current.tagName === 'LI' && current.hasAttribute('draggable') ) {\n                return current\n            }\n\n            current = current.parentNode\n        }\n\n        return null\n    }\n\n    // EVENT HANDLERS\n    // ============================\n\n    ListSortable.prototype.onDragStart = function(ev) {\n        if (!this.isDragStartAllowed(ev.target)) {\n            return\n        }\n\n        ev.originalEvent.dataTransfer.effectAllowed = 'move'\n        ev.originalEvent.dataTransfer.setData('listsortable/elementid', this.getElementSortableId(ev.target))\n        ev.originalEvent.dataTransfer.setData(this.listSortableId, this.listSortableId)\n\n        // The mousemove handler is used to remove the placeholder\n        // when the drag is canceled with Escape button. We can't use\n        // the dragend for removing the placeholders because dragend\n        // is triggered before drop, but we need placeholder to exists\n        // in the drop handler.\n        //\n        // Mouse events are suppressed during the drag and drop operations,\n        // so we only need to handle it once (but we still must the handler\n        // explicitly).\n        $(document).on('mousemove', this.proxy(this.onDocumentMouseMove))\n\n        // The dragover handler is used to hide the placeholder when\n        // the mouse is outside of any known list.\n        $(document).on('dragover', this.proxy(this.onDocumentDragOver))\n    }\n\n    ListSortable.prototype.onDragOver = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        var draggable = this.getClosestDraggableParent(ev.target)\n        if (!draggable) {\n            return\n        }\n\n        if (!this.elementIsPlaceholder(draggable) && this.lastMousePositionChanged(ev)) {\n            this.createPlaceholder(draggable, ev.originalEvent)\n        }\n\n        ev.stopPropagation()\n        ev.preventDefault()\n        ev.originalEvent.dataTransfer.dropEffect = 'move'\n    }\n\n    ListSortable.prototype.onDragEnter = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        var draggable = this.getClosestDraggableParent(ev.target)\n        if (!draggable) {\n            return\n        }\n\n        if (this.elementIsPlaceholder(draggable)) {\n            return\n        }\n\n        this.createPlaceholder(draggable, ev.originalEvent)\n        ev.stopPropagation()\n        ev.preventDefault()\n    }\n\n    ListSortable.prototype.onDragLeave = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        ev.stopPropagation()\n        ev.preventDefault()\n    }\n\n    ListSortable.prototype.onDragDrop = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        var draggable = this.getClosestDraggableParent(ev.target)\n        if (!draggable) {\n            return\n        }\n\n        this.moveElement(draggable, ev.originalEvent)\n\n        this.removePlaceholders()\n    }\n\n    ListSortable.prototype.onDragEnd = function(ev) {\n        $(document).off('dragover', this.proxy(this.onDocumentDragOver))\n    }\n\n    ListSortable.prototype.onDocumentDragOver = function(ev) {\n        if (!this.isSourceManagedList(ev.originalEvent)) {\n            return\n        }\n\n        if (this.mouseOutsideLists(ev.originalEvent)) {\n            this.removePlaceholders()\n            return\n        }\n    }\n\n    ListSortable.prototype.onDocumentMouseMove = function(ev) {\n        $(document).off('mousemove', this.proxy(this.onDocumentMouseMove))\n        this.removePlaceholders()\n    }\n\n\n    // PLUGIN DEFINITION\n    // ============================\n\n    ListSortable.DEFAULTS = {\n        handle: null,\n        direction: 'vertical'\n    }\n\n    var old = $.fn.listSortable\n\n    $.fn.listSortable = function (option) {\n        var args = arguments\n\n        return this.each(function () {\n            var $this = $(this),\n                data  = $this.data('oc.listSortable'),\n                options = $.extend({}, ListSortable.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n            if (!data) {\n                $this.data('oc.listSortable', (data = new ListSortable(this, options)))\n            }\n\n            if (typeof option == 'string' && data) {\n                if (data[option]) {\n                    var methodArguments = Array.prototype.slice.call(args) // Clone the arguments array\n                    methodArguments.shift()\n\n                    data[option].apply(data, methodArguments)\n                }\n            }\n        })\n    }\n\n    $.fn.listSortable.Constructor = ListSortable\n\n    // LISTSORTABLE NO CONFLICT\n    // =================\n\n    $.fn.listSortable.noConflict = function () {\n        $.fn.listSortable = old\n        return this\n    }\n\n    $(document).render(function(){\n        $('[data-control=list-sortable]').listSortable()\n    })\n\n}(window.jQuery);"
  },
  {
    "path": "modules/system/assets/js/framework-bundle.js",
    "content": "(() => {\n  // ../../vendor/larajax/larajax/resources/src/util/index.js\n  function dispatch(eventName, { target = document, detail = {}, bubbles = true, cancelable = true } = {}) {\n    const event = new CustomEvent(eventName, { detail, bubbles, cancelable });\n    target.dispatchEvent(event);\n    return event;\n  }\n  function defer(callback) {\n    setTimeout(callback, 1);\n  }\n  function unindent(strings, ...values) {\n    const lines = trimLeft(interpolate(strings, values)).split(\"\\n\");\n    const match = lines[0].match(/^\\s+/);\n    const indent = match ? match[0].length : 0;\n    return lines.map((line) => line.slice(indent)).join(\"\\n\");\n  }\n  function trimLeft(string) {\n    return string.replace(/^\\n/, \"\");\n  }\n  function interpolate(strings, values) {\n    return strings.reduce((result, string, i) => {\n      const value = values[i] == void 0 ? \"\" : values[i];\n      return result + string + value;\n    }, \"\");\n  }\n  function array(values) {\n    return Array.prototype.slice.call(values);\n  }\n  function uuid() {\n    return Array.apply(null, { length: 36 }).map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\";\n      } else if (i == 14) {\n        return \"4\";\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16);\n      } else {\n        return Math.floor(Math.random() * 15).toString(16);\n      }\n    }).join(\"\");\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/events.js\n  var namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  var stripNameRegex = /\\..*/;\n  var stripUidRegex = /::\\d+$/;\n  var eventRegistry = {};\n  var uidEvent = 1;\n  var customEvents = {\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\"\n  };\n  var nativeEvents = /* @__PURE__ */ new Set([\n    \"click\",\n    \"dblclick\",\n    \"mouseup\",\n    \"mousedown\",\n    \"contextmenu\",\n    \"mousewheel\",\n    \"DOMMouseScroll\",\n    \"mouseover\",\n    \"mouseout\",\n    \"mousemove\",\n    \"selectstart\",\n    \"selectend\",\n    \"keydown\",\n    \"keypress\",\n    \"keyup\",\n    \"orientationchange\",\n    \"touchstart\",\n    \"touchmove\",\n    \"touchend\",\n    \"touchcancel\",\n    \"pointerdown\",\n    \"pointermove\",\n    \"pointerup\",\n    \"pointerleave\",\n    \"pointercancel\",\n    \"gesturestart\",\n    \"gesturechange\",\n    \"gestureend\",\n    \"focus\",\n    \"blur\",\n    \"change\",\n    \"reset\",\n    \"select\",\n    \"submit\",\n    \"focusin\",\n    \"focusout\",\n    \"load\",\n    \"unload\",\n    \"beforeunload\",\n    \"resize\",\n    \"move\",\n    \"DOMContentLoaded\",\n    \"readystatechange\",\n    \"error\",\n    \"abort\",\n    \"scroll\"\n  ]);\n  var Events = class {\n    static on(element, event, handler, delegationFunction, options) {\n      addHandler(element, event, handler, delegationFunction, options, false);\n    }\n    static one(element, event, handler, delegationFunction, options) {\n      addHandler(element, event, handler, delegationFunction, options, true);\n    }\n    static off(element, originalTypeEvent, handler, delegationFunction, options) {\n      if (typeof originalTypeEvent !== \"string\" || !element) {\n        return;\n      }\n      const [isDelegated, callable, typeEvent, opts] = normalizeParameters(originalTypeEvent, handler, delegationFunction, options);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getElementEvents(element);\n      const storeElementEvent = events[typeEvent] || {};\n      const isNamespace = originalTypeEvent.startsWith(\".\");\n      if (typeof callable !== \"undefined\") {\n        if (!storeElementEvent) {\n          return;\n        }\n        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null, opts);\n        return;\n      }\n      if (isNamespace) {\n        for (const elementEvent of Object.keys(events)) {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        }\n      }\n      for (const keyHandlers of Object.keys(storeElementEvent)) {\n        const handlerKey = keyHandlers.replace(stripUidRegex, \"\");\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector, opts);\n        }\n      }\n    }\n    static dispatch(eventName, { target = document, detail = {}, bubbles = true, cancelable = true } = {}) {\n      return dispatch(eventName, { target, detail, bubbles, cancelable });\n    }\n    static trigger(target, eventName, { detail = {}, bubbles = true, cancelable = true } = {}) {\n      return dispatch(eventName, { target, detail, bubbles, cancelable });\n    }\n  };\n  function makeEventUid(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n  function getElementEvents(element) {\n    const uid = makeEventUid(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n  function findHandler(events, callable, delegationSelector = null) {\n    return Object.values(events).find((event) => event.callable === callable && event.delegationSelector === delegationSelector);\n  }\n  function normalizeParameters(originalTypeEvent, handler, delegationFunction, options) {\n    const isDelegated = typeof handler === \"string\";\n    const callable = isDelegated ? delegationFunction : handler;\n    const opts = isDelegated ? options : delegationFunction;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    if (!nativeEvents.has(typeEvent)) {\n      typeEvent = originalTypeEvent;\n    }\n    return [isDelegated, callable, typeEvent, opts];\n  }\n  function addHandler(element, originalTypeEvent, handler, delegationFunction, options, oneOff) {\n    if (typeof originalTypeEvent !== \"string\" || !element) {\n      return;\n    }\n    let [isDelegated, callable, typeEvent, opts] = normalizeParameters(originalTypeEvent, handler, delegationFunction, options);\n    if (originalTypeEvent in customEvents) {\n      const wrapFunction = (fn2) => {\n        return function(event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn2.call(this, event);\n          }\n        };\n      };\n      callable = wrapFunction(callable);\n    }\n    const events = getElementEvents(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n    if (previousFunction) {\n      previousFunction.oneOff = previousFunction.oneOff && oneOff;\n      return;\n    }\n    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, \"\"));\n    const fn = isDelegated ? internalDelegationHandler(element, handler, callable) : internalHandler(element, callable);\n    fn.delegationSelector = isDelegated ? handler : null;\n    fn.callable = callable;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, opts);\n  }\n  function removeHandler(element, events, typeEvent, handler, delegationSelector, options) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n    if (!fn) {\n      return;\n    }\n    element.removeEventListener(typeEvent, fn, options);\n    delete events[typeEvent][fn.uidEvent];\n  }\n  function internalHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n      if (handler.oneOff) {\n        Events.off(element, event.type, fn);\n      }\n      return fn.apply(element, [event]);\n    };\n  }\n  function internalDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n      for (let { target } = event; target && target !== this; target = target.parentNode) {\n        for (const domElement of domElements) {\n          if (domElement !== target) {\n            continue;\n          }\n          event.delegateTarget = target;\n          if (handler.oneOff) {\n            Events.off(element, event.type, selector, fn);\n          }\n          return fn.apply(target, [event]);\n        }\n      }\n    };\n  }\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    for (const handlerKey of Object.keys(storeElementEvent)) {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  }\n  function getTypeEvent(event) {\n    event = event.replace(stripNameRegex, \"\");\n    return customEvents[event] || event;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/envelope.js\n  var Envelope = class {\n    constructor(response = {}, status = 200) {\n      const {\n        __ajax: body,\n        ...data\n      } = response;\n      this.ok = !!body.ok;\n      this.severity = body.severity || \"info\";\n      this.message = body.message ?? null;\n      this.data = data || {};\n      this.invalid = body.invalid || {};\n      this.ops = Array.isArray(body.ops) ? body.ops : [];\n      this.redirect = null;\n      this.status = status;\n    }\n    isFatal() {\n      return this.severity === \"fatal\" || this.status >= 500 && this.status <= 599;\n    }\n    isError() {\n      return this.severity === \"error\" || this.isFatal() || this.ok === false;\n    }\n    getMessage() {\n      return this.message;\n    }\n    getInvalid() {\n      return this.invalid || {};\n    }\n    getData() {\n      return this.data || {};\n    }\n    getStatus() {\n      return this.status;\n    }\n    getSeverity() {\n      return this.severity;\n    }\n    getOps(type) {\n      if (!type) {\n        return this.ops;\n      }\n      return this.ops.filter((o) => o?.op === type);\n    }\n    getFlash() {\n      return this.getOps(\"flash\").map(({ level = \"info\", text = \"\" }) => ({ level, text }));\n    }\n    getBrowserEvents() {\n      return this.getOps(\"dispatch\").map(({ selector = null, event, detail, async }) => ({\n        selector,\n        event,\n        detail,\n        async\n      }));\n    }\n    getDomPatches() {\n      return this.getOps(\"patchDom\").map(({ selector, html = \"\", swap = \"innerHTML\" }) => ({\n        selector,\n        html,\n        swap\n      }));\n    }\n    getPartials() {\n      return this.getOps(\"partial\").map(({ name, html = \"\" }) => ({ name, html }));\n    }\n    getAssets() {\n      const out = { js: [], css: [], img: [] };\n      const seen = { js: /* @__PURE__ */ new Set(), css: /* @__PURE__ */ new Set(), img: /* @__PURE__ */ new Set() };\n      for (const { type, assets = [] } of this.getOps(\"loadAssets\")) {\n        if (!out[type]) {\n          continue;\n        }\n        for (const asset of assets) {\n          if (asset.inline) {\n            out[type].push(asset);\n            continue;\n          }\n          const url = typeof asset === \"string\" ? asset : asset.url;\n          if (!seen[type].has(url)) {\n            seen[type].add(url);\n            out[type].push(typeof asset === \"string\" ? { url: asset } : asset);\n          }\n        }\n      }\n      return out;\n    }\n    getRedirectUrl() {\n      const op = this.getOps(\"redirect\")[0];\n      return op?.url || this.redirect || null;\n    }\n    getReload() {\n      return this.getOps(\"reload\")[0] || null;\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/request/options.js\n  var Options = class {\n    constructor(handler, options) {\n      if (!handler) {\n        throw new Error(\"The request handler name is not specified.\");\n      }\n      if (!handler.match(/^(?:\\w+\\:{2})?on*/)) {\n        throw new Error('Invalid handler name. The correct handler name format is: \"onEvent\".');\n      }\n      if (typeof FormData === \"undefined\") {\n        throw new Error(\"The browser does not support the FormData interface.\");\n      }\n      this.options = options;\n      this.handler = handler;\n    }\n    static fetch(handler, options) {\n      return new this(handler, options).getRequestOptions();\n    }\n    // Public\n    getRequestOptions() {\n      return {\n        method: \"POST\",\n        url: this.options.url ? this.options.url : window.location.href,\n        headers: this.buildHeaders()\n      };\n    }\n    // Private\n    buildHeaders() {\n      const { handler, options } = this;\n      const headers = {\n        \"X-Requested-With\": \"XMLHttpRequest\",\n        \"X-AJAX-HANDLER\": handler\n      };\n      if (!options.files) {\n        headers[\"Content-Type\"] = options.bulk ? \"application/json\" : \"application/x-www-form-urlencoded\";\n      }\n      if (options.flash) {\n        headers[\"X-AJAX-FLASH\"] = 1;\n      }\n      if (options.partial) {\n        headers[\"X-AJAX-PARTIAL\"] = options.partial;\n      }\n      var partials = this.extractPartials(options.update, options.partial);\n      if (partials) {\n        headers[\"X-AJAX-PARTIALS\"] = partials;\n      }\n      var xsrfToken = this.getXSRFToken();\n      if (xsrfToken) {\n        headers[\"X-XSRF-TOKEN\"] = xsrfToken;\n      }\n      var csrfToken = this.getCSRFToken();\n      if (csrfToken) {\n        headers[\"X-CSRF-TOKEN\"] = csrfToken;\n      }\n      if (options.headers && options.headers.constructor === {}.constructor) {\n        Object.assign(headers, options.headers);\n      }\n      return headers;\n    }\n    extractPartials(update = {}, selfPartial) {\n      var result = [];\n      if (update) {\n        if (typeof update !== \"object\") {\n          throw new Error(\"Invalid update value. The correct format is an object ({...})\");\n        }\n        for (var partial in update) {\n          if (partial === \"_self\" && selfPartial) {\n            result.push(selfPartial);\n          } else {\n            result.push(partial);\n          }\n        }\n      }\n      return result.join(\"&\");\n    }\n    getCSRFToken() {\n      var tag = document.querySelector('meta[name=\"csrf-token\"]');\n      return tag ? tag.getAttribute(\"content\") : null;\n    }\n    getXSRFToken() {\n      var cookieValue = null;\n      if (document.cookie && document.cookie != \"\") {\n        var cookies = document.cookie.split(\";\");\n        for (var i = 0; i < cookies.length; i++) {\n          var cookie = cookies[i].replace(/^([\\s]*)|([\\s]*)$/g, \"\");\n          if (cookie.substring(0, 11) == \"XSRF-TOKEN=\") {\n            cookieValue = decodeURIComponent(cookie.substring(11));\n            break;\n          }\n        }\n      }\n      return cookieValue;\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/request/asset-manager.js\n  var AssetManager = class _AssetManager {\n    /**\n     * Load a collection of assets.\n     * @param {{js?: Array<string|{url: string, attributes?: object}>, css?: Array<string|{url: string, attributes?: object}>, img?: Array<string|{url: string, attributes?: object}>}} collection\n     * @param {(err?: Error) => void} [callback]  // optional; called on success or with error\n     * @returns {Promise<void>}\n     */\n    static load(collection = {}, callback) {\n      const manager = new _AssetManager(), promise = manager.loadCollection(collection);\n      if (typeof callback === \"function\") {\n        promise.then(() => callback());\n      }\n      return promise;\n    }\n    async loadCollection(collection = {}) {\n      const jsList = (collection.js ?? []).map(normalizeAsset).filter((asset) => asset.inline || !document.querySelector(`head script[src=\"${htmlEscape(asset.url)}\"]`));\n      const cssList = (collection.css ?? []).map(normalizeAsset).filter((asset) => !document.querySelector(`head link[href=\"${htmlEscape(asset.url)}\"]`));\n      const imgList = (collection.img ?? []).map(normalizeAsset);\n      if (!jsList.length && !cssList.length && !imgList.length) {\n        return;\n      }\n      await Promise.all([\n        this.loadJavaScript(jsList),\n        Promise.all(cssList.map((asset) => this.loadStyleSheet(asset))),\n        this.loadImages(imgList)\n      ]);\n    }\n    loadStyleSheet(asset) {\n      const { url, attributes = {} } = asset;\n      return new Promise((resolve, reject) => {\n        const el = document.createElement(\"link\");\n        el.rel = \"stylesheet\";\n        el.type = \"text/css\";\n        el.href = url;\n        for (const [key, value] of Object.entries(attributes)) {\n          if (value === true) {\n            el.setAttribute(key, \"\");\n          } else if (value !== false && value != null) {\n            el.setAttribute(key, value);\n          }\n        }\n        el.onload = () => resolve(el);\n        el.onerror = () => reject(new Error(`Failed to load CSS: ${url}`));\n        document.head.appendChild(el);\n      });\n    }\n    // Sequential loading (safer for dependencies)\n    loadJavaScript(list) {\n      return list.reduce((p, asset) => {\n        if (asset.inline) {\n          return p.then(() => new Promise((resolve, reject) => {\n            const el = document.createElement(\"script\");\n            const attributes2 = asset.attributes || {};\n            if (attributes2.type) {\n              el.type = attributes2.type;\n            }\n            for (const [key, value] of Object.entries(attributes2)) {\n              if (key === \"type\") continue;\n              if (value === true) el.setAttribute(key, \"\");\n              else if (value !== false && value != null) el.setAttribute(key, value);\n            }\n            if (el.type === \"module\") {\n              const id = \"_lj\" + ++inlineModuleId;\n              window[id] = () => {\n                delete window[id];\n                resolve(el);\n              };\n              el.textContent = asset.inline + `\nwindow['${id}']();`;\n            } else {\n              el.textContent = asset.inline;\n            }\n            document.head.appendChild(el);\n            if (el.type !== \"module\") {\n              resolve(el);\n            }\n          }));\n        }\n        const { url, attributes = {} } = asset;\n        return p.then(() => new Promise((resolve, reject) => {\n          const el = document.createElement(\"script\");\n          if (attributes.type) {\n            el.type = attributes.type;\n          } else {\n            el.type = \"text/javascript\";\n          }\n          el.src = url;\n          for (const [key, value] of Object.entries(attributes)) {\n            if (key === \"type\") continue;\n            if (value === true) {\n              el.setAttribute(key, \"\");\n            } else if (value !== false && value != null) {\n              el.setAttribute(key, value);\n            }\n          }\n          el.onload = () => resolve(el);\n          el.onerror = () => reject(new Error(`Failed to load JS: ${url}`));\n          document.head.appendChild(el);\n        }));\n      }, Promise.resolve());\n    }\n    loadImages(list) {\n      if (!list.length) return Promise.resolve();\n      return Promise.all(list.map((asset) => new Promise((resolve, reject) => {\n        const { url } = asset;\n        const img = new Image();\n        img.onload = () => resolve(url);\n        img.onerror = () => reject(new Error(`Failed to load image: ${url}`));\n        img.src = url;\n      })));\n    }\n  };\n  var inlineModuleId = 0;\n  function normalizeAsset(asset) {\n    return typeof asset === \"string\" ? { url: asset } : asset;\n  }\n  function htmlEscape(value) {\n    return String(value).replace(/\"/g, '\\\\\"');\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/dom-patcher.js\n  var DomUpdateMode = {\n    replaceWith: \"replace\",\n    prepend: \"prepend\",\n    append: \"append\",\n    update: \"innerHTML\"\n  };\n  var DomPatcher = class {\n    constructor(envelope, partialMap, options = {}) {\n      this.options = options;\n      this.envelope = envelope;\n      this.partialMap = partialMap;\n      this.afterUpdateCallback = null;\n    }\n    apply() {\n      this.applyPartialUpdates();\n      this.applyDomUpdates();\n    }\n    afterUpdate(callback) {\n      this.afterUpdateCallback = callback;\n    }\n    // Should patch the dom using the envelope.getPartials()\n    // which is expected to be { name: partialName, html: contents }\n    applyPartialUpdates() {\n      const partials = this.envelope.getPartials();\n      partials.forEach((partial) => {\n        let selector = this.partialMap[partial.name];\n        let selectedEl = [];\n        if (this.partialMap[\"_self\"] && partial.name == this.options.partial && this.options.partialEl) {\n          selector = this.partialMap[\"_self\"];\n          selectedEl = [this.options.partialEl];\n        } else if (selector) {\n          selectedEl = resolveSelectorResponse(selector, '[data-ajax-partial=\"' + partial.name + '\"]');\n        }\n        selectedEl.forEach((el) => {\n          this.patchDom(\n            el,\n            partial.html,\n            getSelectorUpdateMode(selector, el)\n          );\n        });\n      });\n    }\n    // Should patch the dom using the envelope.getDomPatches()\n    applyDomUpdates() {\n      const updates = this.envelope.getDomPatches();\n      updates.forEach((update) => {\n        document.querySelectorAll(update.selector).forEach((el) => {\n          this.patchDom(el, update.html, update.swap);\n        });\n      });\n    }\n    patchDom(element, content, swapType) {\n      const parentEl = element.parentNode;\n      switch (swapType) {\n        case \"append\":\n        case \"beforeend\":\n          element.insertAdjacentHTML(\"beforeend\", content);\n          runScriptsOnFragment(element, content);\n          break;\n        case \"after\":\n        case \"afterend\":\n          element.insertAdjacentHTML(\"afterend\", content);\n          runScriptsOnFragment(element, content);\n          break;\n        case \"before\":\n        case \"beforebegin\":\n          element.insertAdjacentHTML(\"beforebegin\", content);\n          runScriptsOnFragment(element, content);\n          break;\n        case \"prepend\":\n        case \"afterbegin\":\n          element.insertAdjacentHTML(\"afterbegin\", content);\n          runScriptsOnFragment(element, content);\n          break;\n        case \"replace\":\n          element.replaceWith(content);\n          runScriptsOnFragment(parentEl, content);\n          break;\n        case \"outerHTML\":\n          element.outerHTML = content;\n          runScriptsOnFragment(parentEl, content);\n          break;\n        default:\n        case \"innerHTML\":\n          element.innerHTML = content;\n          runScriptsOnElement(element);\n          break;\n      }\n      if (this.afterUpdateCallback) {\n        this.afterUpdateCallback(element);\n      }\n    }\n  };\n  function resolveSelectorResponse(selector, partialSelector) {\n    if (selector === true) {\n      return document.querySelectorAll(partialSelector);\n    }\n    if (typeof selector !== \"string\") {\n      return [selector];\n    }\n    if ([\"#\", \".\", \"@\", \"^\", \"!\", \"=\"].indexOf(selector.charAt(0)) === -1) {\n      return [];\n    }\n    if ([\"@\", \"^\", \"!\", \"=\"].indexOf(selector.charAt(0)) !== -1) {\n      selector = selector.substring(1);\n    }\n    if (!selector) {\n      selector = partialSelector;\n    }\n    return document.querySelectorAll(selector);\n  }\n  function getSelectorUpdateMode(selector, el) {\n    if (typeof selector === \"string\") {\n      if (selector.charAt(0) === \"!\") {\n        return DomUpdateMode.replaceWith;\n      }\n      if (selector.charAt(0) === \"@\") {\n        return DomUpdateMode.append;\n      }\n      if (selector.charAt(0) === \"^\") {\n        return DomUpdateMode.prepend;\n      }\n    }\n    if (el.dataset.ajaxUpdateMode !== void 0) {\n      return el.dataset.ajaxUpdateMode;\n    }\n    return DomUpdateMode.update;\n  }\n  function runScriptsOnElement(el) {\n    Array.from(el.querySelectorAll(\"script\")).forEach((oldScript) => {\n      const newScript = document.createElement(\"script\");\n      Array.from(oldScript.attributes).forEach((attr) => newScript.setAttribute(attr.name, attr.value));\n      newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n      oldScript.parentNode.replaceChild(newScript, oldScript);\n    });\n  }\n  function runScriptsOnFragment(container, html) {\n    const div = document.createElement(\"div\");\n    div.innerHTML = html;\n    Array.from(div.querySelectorAll(\"script\")).forEach((oldScript) => {\n      const newScript = document.createElement(\"script\");\n      Array.from(oldScript.attributes).forEach((attr) => newScript.setAttribute(attr.name, attr.value));\n      newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n      container.appendChild(newScript);\n      container.removeChild(newScript);\n    });\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/turbo.js\n  var _turboProvider = null;\n  function registerTurbo(turbo) {\n    _turboProvider = turbo;\n  }\n  function isTurboEnabled() {\n    return _turboProvider?.isEnabled() ?? false;\n  }\n  function turboVisit(url, options) {\n    if (_turboProvider) {\n      _turboProvider.visit(url, options);\n      return true;\n    }\n    return false;\n  }\n  function getTurboController() {\n    return _turboProvider?.controller ?? null;\n  }\n  function turboPageReady() {\n    return _turboProvider?.pageReady() ?? null;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/referrer.js\n  function getReferrerUrl() {\n    const url = isTurboEnabled() ? getTurboController().getLastVisitUrl() : getReferrerFromSameOrigin();\n    if (!url || isSameBaseUrl(url)) {\n      return null;\n    }\n    return url;\n  }\n  function getReferrerFromSameOrigin() {\n    if (!document.referrer) {\n      return null;\n    }\n    try {\n      const referrer = new URL(document.referrer);\n      if (referrer.origin !== location.origin) {\n        return null;\n      }\n      const pushReferrer = localStorage.getItem(\"ocPushStateReferrer\");\n      if (pushReferrer && pushReferrer.indexOf(referrer.pathname) === 0) {\n        return pushReferrer;\n      }\n      return document.referrer;\n    } catch (e) {\n    }\n  }\n  function isSameBaseUrl(url) {\n    const givenUrl = new URL(url, window.location.origin), currentUrl = new URL(window.location.href);\n    return givenUrl.origin === currentUrl.origin && givenUrl.pathname === currentUrl.pathname;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/promise.js\n  function decoratePromiseProxy(fn, ctx = null) {\n    return (...args) => {\n      const p = Promise.resolve().then(() => fn.apply(ctx, args));\n      return decoratePromise(p);\n    };\n  }\n  function decoratePromise(promise) {\n    return Object.assign(promise, {\n      done(fn) {\n        promise.then(fn);\n        return this;\n      },\n      fail(fn) {\n        promise.catch(fn);\n        return this;\n      },\n      always(fn) {\n        promise.finally(fn);\n        return this;\n      }\n    });\n  }\n  function cancellablePromise(executor) {\n    if (!executor) {\n      executor = () => {\n      };\n    }\n    let hasCanceled = false;\n    let cancelHandler = () => {\n    };\n    let resolveFn, rejectFn;\n    const promise = new Promise((resolve, reject) => {\n      resolveFn = resolve;\n      rejectFn = reject;\n      executor(\n        (value) => {\n          if (!hasCanceled) resolve(value);\n        },\n        (error) => {\n          if (!hasCanceled) reject(error);\n        },\n        (onCancel) => {\n          cancelHandler = onCancel;\n        }\n      );\n    });\n    promise.abort = () => {\n      hasCanceled = true;\n      cancelHandler();\n    };\n    promise.cancel = promise.abort;\n    promise.onCancel = (fn) => {\n      cancelHandler = typeof fn === \"function\" ? fn : cancelHandler;\n      return promise;\n    };\n    promise.resolve = (value) => {\n      if (!hasCanceled) {\n        resolveFn(value);\n      }\n    };\n    promise.reject = (error) => {\n      if (!hasCanceled) {\n        rejectFn(error);\n      }\n    };\n    return decoratePromise(promise);\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/actions.js\n  var Actions = class {\n    constructor(delegate, context, options) {\n      this.el = delegate.el;\n      this.delegate = delegate;\n      this.context = context;\n      this.options = options;\n      this.context.start = this.start.bind(this);\n      this.context.success = decoratePromiseProxy(this.success, this);\n      this.context.error = decoratePromiseProxy(this.error, this);\n      this.context.complete = decoratePromiseProxy(this.complete, this);\n      this.context.cancel = this.cancel.bind(this);\n      this.context.handleErrorMessage = this.handleErrorMessage.bind(this);\n    }\n    // Options can override all public methods in this class\n    invoke(method, args = []) {\n      if (this.options[method]) {\n        return this.options[method].apply(this.context, args);\n      }\n      if (this[method]) {\n        return this[method](...args);\n      }\n    }\n    // Options can also specify a non-interference \"func\" method, typically\n    // used by eval-based data attributes that takes minimal arguments\n    invokeFunc(method, data = null) {\n      if (this.options[method]) {\n        return this.options[method](this.el, this.context, data);\n      }\n    }\n    // Public\n    start(xhr) {\n      this.invoke(\"markAsUpdating\", [true]);\n      if (this.delegate.options.message) {\n        this.invoke(\"handleProgressMessage\", [this.delegate.options.message, false]);\n      }\n    }\n    async success(data, responseCode, xhr) {\n      if (this.invoke(\"beforeUpdate\", [data, responseCode, xhr]) === false) {\n        return;\n      }\n      if (this.invokeFunc(\"beforeUpdateFunc\", data) === false) {\n        return;\n      }\n      if (!this.delegate.applicationAllowsUpdate(data, responseCode, xhr)) {\n        return;\n      }\n      if (data instanceof Blob) {\n        this.invoke(\"handleFileDownload\", [data, xhr]);\n        this.delegate.notifyApplicationRequestSuccess(data, responseCode, xhr);\n        this.invokeFunc(\"successFunc\", data);\n        return;\n      }\n      if (!data.$env?.isFatal()) {\n        await this.invoke(\"handleUpdateOperations\", [data, responseCode, xhr]);\n        await this.invoke(\"handleUpdateResponse\", [data, responseCode, xhr]);\n      }\n      this.delegate.notifyApplicationRequestSuccess(data, responseCode, xhr);\n      this.invokeFunc(\"successFunc\", data);\n    }\n    async error(data, responseCode, xhr) {\n      let errorMsg = data.$env?.getMessage();\n      if (window.jaxUnloading !== void 0 && window.jaxUnloading) {\n        return;\n      }\n      this.delegate.toggleRedirect(false);\n      if (!data.$env?.isFatal()) {\n        await this.invoke(\"handleUpdateOperations\", [data, responseCode, xhr]);\n        await this.invoke(\"handleUpdateResponse\", [data, responseCode, xhr]);\n      } else if (!errorMsg) {\n        if (data.constructor === {}.constructor) {\n          if (data.message) {\n            errorMsg = data.message;\n          } else {\n            errorMsg = \"Something went wrong! Check the browser console.\";\n            console.warn(data);\n          }\n        } else {\n          errorMsg = data;\n        }\n      }\n      if (this.el !== document) {\n        this.el.setAttribute(\"data-error-message\", errorMsg);\n      }\n      if (!this.delegate.applicationAllowsError(data, responseCode, xhr)) {\n        return;\n      }\n      if (this.invokeFunc(\"errorFunc\", data) === false) {\n        return;\n      }\n      this.invoke(\"handleErrorMessage\", [errorMsg, data.$env?.getSeverity()]);\n    }\n    async complete(data, responseCode, xhr) {\n      this.delegate.notifyApplicationRequestComplete(data, responseCode, xhr);\n      this.invokeFunc(\"completeFunc\", data);\n      this.invoke(\"markAsUpdating\", [false]);\n      if (this.delegate.options.message) {\n        this.invoke(\"handleProgressMessage\", [null, true]);\n      }\n    }\n    cancel() {\n      this.invokeFunc(\"cancelFunc\");\n      this.delegate.notifyApplicationRequestCancel();\n    }\n    // Custom function, requests confirmation from the user\n    handleConfirmMessage(message) {\n      let resolveFn, rejectFn;\n      const promise = new Promise((resolve, reject) => {\n        resolveFn = resolve;\n        rejectFn = reject;\n      });\n      promise.then(() => {\n        this.delegate.sendInternal();\n      }).catch(() => {\n        this.invoke(\"cancel\", []);\n      });\n      const event = this.delegate.notifyApplicationConfirmMessage(message, {\n        resolve: resolveFn,\n        reject: rejectFn\n      });\n      if (event.defaultPrevented) {\n        return false;\n      }\n      if (message) {\n        const result = confirm(message);\n        if (!result) {\n          this.invoke(\"cancel\", []);\n        }\n        return result;\n      }\n    }\n    // Custom function, display a progress message to the user\n    handleProgressMessage(message, isDone) {\n    }\n    // Custom function, display a flash message to the user\n    handleFlashMessage(message, type) {\n    }\n    // Custom function, display an error message to the user\n    handleErrorMessage(message, severity) {\n      const event = this.delegate.notifyApplicationErrorMessage(message);\n      if (event.defaultPrevented) {\n        return;\n      }\n      if (message) {\n        alert(message);\n      }\n    }\n    // Custom function, focus fields with errors\n    handleValidationMessage(message, fields) {\n      this.delegate.notifyApplicationBeforeValidate(message, fields);\n      if (!this.delegate.formEl) {\n        return;\n      }\n      var isFirstInvalidField = true;\n      for (var fieldName in fields) {\n        var fieldCheck, fieldNameOptions = [];\n        fieldCheck = fieldName.replace(/\\.(\\w+)/g, \"[$1]\");\n        fieldNameOptions.push('[name=\"' + fieldCheck + '\"]:not([disabled])');\n        fieldNameOptions.push('[name=\"' + fieldCheck + '[]\"]:not([disabled])');\n        fieldCheck = (\".\" + fieldName).replace(/\\.(\\w+)/g, \"[$1]\");\n        fieldNameOptions.push('[name$=\"' + fieldCheck + '\"]:not([disabled])');\n        fieldNameOptions.push('[name$=\"' + fieldCheck + '[]\"]:not([disabled])');\n        var fieldEmpty = fieldName.replace(/\\.[0-9]+$/g, \"\");\n        if (fieldName !== fieldEmpty) {\n          fieldCheck = fieldEmpty.replace(/\\.(\\w+)/g, \"[$1]\");\n          fieldNameOptions.push('[name=\"' + fieldCheck + '[]\"]:not([disabled])');\n          fieldCheck = (\".\" + fieldEmpty).replace(/\\.(\\w+)/g, \"[$1]\");\n          fieldNameOptions.push('[name$=\"' + fieldCheck + '[]\"]:not([disabled])');\n        }\n        var fieldElement = this.delegate.formEl.querySelector(fieldNameOptions.join(\", \"));\n        if (fieldElement) {\n          let event = this.delegate.notifyApplicationFieldInvalid(fieldElement, fieldName, fields[fieldName], isFirstInvalidField);\n          if (isFirstInvalidField) {\n            if (!event.defaultPrevented) {\n              fieldElement.focus();\n            }\n            isFirstInvalidField = false;\n          }\n        }\n      }\n    }\n    // Custom function: handle browser events coming from the server\n    async handleBrowserEvents(events = []) {\n      if (!events.length) {\n        return false;\n      }\n      let defaultPrevented = false;\n      for (const dispatched of events) {\n        const isAsync = dispatched?.async === true;\n        if (isAsync) {\n          await new Promise((outerResolve, outerReject) => {\n            let settled = false;\n            const resolve = (v) => {\n              if (!settled) {\n                settled = true;\n                outerResolve(v);\n              }\n            };\n            const reject = (e) => {\n              if (!settled) {\n                settled = true;\n                outerReject(e);\n              }\n            };\n            const event = this.delegate.notifyApplicationCustomEvent(dispatched.event, {\n              ...dispatched.detail || {},\n              context: this.context,\n              promise: { resolve, reject }\n            });\n            if (event?.defaultPrevented) {\n              defaultPrevented = true;\n            }\n          });\n        } else {\n          const event = this.delegate.notifyApplicationCustomEvent(dispatched.event, {\n            ...dispatched.detail || {},\n            context: this.context\n          });\n          if (event?.defaultPrevented) defaultPrevented = true;\n        }\n      }\n      return defaultPrevented;\n    }\n    // Custom function, redirect the browser to another location\n    handleRedirectResponse(href) {\n      const event = this.delegate.notifyApplicationBeforeRedirect();\n      if (event.defaultPrevented) {\n        return;\n      }\n      if (this.options.browserRedirectBack) {\n        href = getReferrerUrl() || href;\n      }\n      if (isTurboEnabled()) {\n        turboVisit(href);\n      } else {\n        location.assign(href);\n      }\n    }\n    // Custom function, reload the browser\n    handleReloadResponse() {\n      location.reload();\n    }\n    // Mark known elements as being updated\n    markAsUpdating(isUpdating) {\n      var updateOptions = this.options.update || {};\n      for (var partial in updateOptions) {\n        let selector = updateOptions[partial];\n        let selectedEl = [];\n        if (updateOptions[\"_self\"] && partial == this.options.partial && this.delegate.partialEl) {\n          selector = updateOptions[\"_self\"];\n          selectedEl = [this.delegate.partialEl];\n        } else {\n          selectedEl = resolveSelectorResponse(selector, '[data-ajax-partial=\"' + partial + '\"]');\n        }\n        selectedEl.forEach(function(el) {\n          if (isUpdating) {\n            el.setAttribute(\"data-ajax-updating\", \"\");\n          } else {\n            el.removeAttribute(\"data-ajax-updating\");\n          }\n        });\n      }\n    }\n    async handleUpdateResponse(data, responseCode, xhr) {\n      if (!data.$env) {\n        return;\n      }\n      const updateOptions = this.options.update || {}, domPatcher = new DomPatcher(data.$env, updateOptions, {\n        partial: this.options.partial,\n        partialEl: this.delegate.partialEl\n      });\n      domPatcher.afterUpdate((el) => {\n        this.delegate.notifyApplicationAjaxUpdate(el, data, responseCode, xhr);\n      });\n      domPatcher.apply();\n      setTimeout(() => {\n        this.delegate.notifyApplicationUpdateComplete(data, responseCode, xhr);\n        this.invoke(\"afterUpdate\", [data, responseCode, xhr]);\n        this.invokeFunc(\"afterUpdateFunc\", data);\n      }, 0);\n    }\n    async handleUpdateOperations(data, responseCode, xhr) {\n      const flashMessages = this.delegate.options.flash ? data.$env?.getFlash() : null;\n      if (flashMessages) {\n        for (const flashMessage of flashMessages) {\n          this.invoke(\"handleFlashMessage\", [flashMessage.text, flashMessage.level]);\n        }\n      }\n      const browserEvents = data.$env?.getBrowserEvents();\n      if (browserEvents && await this.invoke(\"handleBrowserEvents\", [browserEvents])) {\n        return;\n      }\n      const redirectUrl = data.$env?.getRedirectUrl();\n      if (redirectUrl) {\n        this.delegate.toggleRedirect(redirectUrl);\n      }\n      if (this.delegate.isRedirect) {\n        this.invoke(\"handleRedirectResponse\", [this.delegate.options.redirect]);\n      }\n      if (data.$env?.getReload()) {\n        this.invoke(\"handleReloadResponse\");\n      }\n      const invalidFields = data.$env?.getInvalid();\n      if (invalidFields) {\n        this.invoke(\"handleValidationMessage\", [data.$env?.getMessage(), invalidFields]);\n      }\n      const loadAssets = data.$env?.getAssets();\n      if (loadAssets) {\n        await AssetManager.load(loadAssets);\n      }\n    }\n    // Custom function, download a file response from the server\n    handleFileDownload(data, xhr) {\n      if (this.options.browserTarget) {\n        window.open(window.URL.createObjectURL(data), this.options.browserTarget);\n        return;\n      }\n      const fileName = getFilenameFromHttpResponse(xhr);\n      if (!fileName) {\n        return;\n      }\n      const anchor = document.createElement(\"a\");\n      anchor.href = window.URL.createObjectURL(data);\n      anchor.download = fileName;\n      anchor.target = \"_blank\";\n      anchor.click();\n      window.URL.revokeObjectURL(anchor.href);\n    }\n    // Custom function, adds query data to the current URL\n    applyQueryToUrl(queryData) {\n      const searchParams = new URLSearchParams(window.location.search);\n      for (const key of Object.keys(queryData)) {\n        const value = queryData[key];\n        if (Array.isArray(value)) {\n          searchParams.delete(key);\n          searchParams.delete(`${key}[]`);\n          value.forEach((val) => searchParams.append(`${key}[]`, val));\n        } else if (value === null) {\n          searchParams.delete(key);\n          searchParams.delete(`${key}[]`);\n        } else {\n          searchParams.set(key, value);\n        }\n      }\n      var newUrl = window.location.pathname, queryStr = searchParams.toString();\n      if (queryStr) {\n        newUrl += \"?\" + queryStr.replaceAll(\"%5B%5D=\", \"[]=\");\n      }\n      if (isTurboEnabled()) {\n        turboVisit(newUrl, { action: \"swap\", scroll: false });\n      } else {\n        history.replaceState(null, \"\", newUrl);\n        localStorage.setItem(\"ocPushStateReferrer\", newUrl);\n      }\n    }\n  };\n  function getFilenameFromHttpResponse(xhr) {\n    const contentDisposition = xhr.getResponseHeader(\"Content-Disposition\");\n    if (!contentDisposition) {\n      return null;\n    }\n    const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/g;\n    let match = null;\n    let tmpMatch = null;\n    while ((tmpMatch = filenameRegex.exec(contentDisposition)) !== null) {\n      match = tmpMatch;\n    }\n    if (match !== null && match[1]) {\n      return /filename[^;*=\\n]*\\*=[^']*''/.exec(match[0]) === null ? match[1].replace(/['\"]/g, \"\") : decodeURIComponent(match[1].substring(match[1].indexOf(\"''\") + 2));\n    }\n    return null;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/form-serializer.js\n  var FormSerializer = class _FormSerializer {\n    // Public\n    static assignToObj(obj, name, value) {\n      new _FormSerializer().assignObjectInternal(obj, name, value);\n    }\n    static serializeAsJSON(element) {\n      if (typeof element === \"string\") {\n        element = document.querySelector(element);\n      }\n      return new _FormSerializer().parseContainer(element);\n    }\n    // Private\n    parseContainer(element) {\n      let jsonData = {};\n      element.querySelectorAll(\"input, textarea, select\").forEach((field) => {\n        if (!field.name || field.disabled || [\"file\", \"reset\", \"submit\", \"button\"].indexOf(field.type) > -1) {\n          return;\n        }\n        if ([\"checkbox\", \"radio\"].indexOf(field.type) > -1 && !field.checked) {\n          return;\n        }\n        if (field.type === \"select-multiple\") {\n          var arr = [];\n          Array.from(field.options).forEach(function(option) {\n            if (option.selected) {\n              arr.push({\n                name: field.name,\n                value: option.value\n              });\n            }\n          });\n          this.assignObjectInternal(jsonData, field.name, arr);\n          return;\n        }\n        this.assignObjectInternal(jsonData, field.name, field.value);\n      });\n      return jsonData;\n    }\n    assignObjectInternal(obj, fieldName, fieldValue) {\n      this.assignObjectNested(\n        obj,\n        this.nameToArray(fieldName),\n        fieldValue,\n        fieldName.endsWith(\"[]\")\n      );\n    }\n    assignObjectNested(obj, fieldArr, fieldValue, isArray) {\n      var currentTarget = obj, lastIndex = fieldArr.length - 1;\n      fieldArr.forEach(function(prop, index) {\n        if (isArray && index === lastIndex) {\n          if (!Array.isArray(currentTarget[prop])) {\n            currentTarget[prop] = [];\n          }\n          if (Array.isArray(fieldValue)) {\n            currentTarget[prop].push(...fieldValue);\n          } else {\n            currentTarget[prop].push(fieldValue);\n          }\n        } else {\n          if (currentTarget[prop] === void 0 || currentTarget[prop].constructor !== {}.constructor) {\n            currentTarget[prop] = {};\n          }\n          if (index === lastIndex) {\n            currentTarget[prop] = fieldValue;\n          }\n          currentTarget = currentTarget[prop];\n        }\n      });\n    }\n    nameToArray(fieldName) {\n      var expression = /([^\\]\\[]+)/g, elements = [], searchResult;\n      while (searchResult = expression.exec(fieldName)) {\n        elements.push(searchResult[0]);\n      }\n      return elements;\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/request/data.js\n  var Data = class {\n    constructor(userData, targetEl, formEl) {\n      this.userData = userData || {};\n      this.targetEl = targetEl;\n      this.formEl = formEl;\n    }\n    // Public\n    getRequestData() {\n      let requestData;\n      if (this.formEl) {\n        requestData = new FormData(this.formEl);\n      } else {\n        requestData = new FormData();\n      }\n      this.appendSingleInputElement(requestData);\n      return requestData;\n    }\n    getAsFormData() {\n      return this.appendJsonToFormData(\n        this.getRequestData(),\n        this.userData\n      );\n    }\n    getAsQueryString() {\n      return this.convertFormDataToQuery(\n        this.getAsFormData()\n      );\n    }\n    getAsJsonData() {\n      return JSON.stringify(\n        this.convertFormDataToJson(\n          this.getAsFormData()\n        )\n      );\n    }\n    // Private\n    appendSingleInputElement(requestData) {\n      if (this.formEl || !this.targetEl || !isElementInput(this.targetEl)) {\n        return;\n      }\n      const inputName = this.targetEl.name;\n      if (!inputName || this.userData[inputName] !== void 0) {\n        return;\n      }\n      if (this.targetEl.type === \"file\") {\n        this.targetEl.files.forEach(function(value) {\n          requestData.append(inputName, value);\n        });\n      } else {\n        requestData.append(inputName, this.targetEl.value);\n      }\n    }\n    appendJsonToFormData(formData, useJson, parentKey) {\n      var self = this;\n      for (var key in useJson) {\n        var fieldKey = key;\n        if (parentKey) {\n          fieldKey = parentKey + \"[\" + key + \"]\";\n        }\n        var value = useJson[key];\n        if (value && value.constructor === {}.constructor) {\n          this.appendJsonToFormData(formData, value, fieldKey);\n        } else if (value && value.constructor === [].constructor) {\n          value.forEach(function(v, i) {\n            if (v.constructor === {}.constructor || v.constructor === [].constructor) {\n              self.appendJsonToFormData(formData, v, fieldKey + \"[\" + i + \"]\");\n            } else {\n              formData.append(fieldKey + \"[]\", self.castJsonToFormData(v));\n            }\n          });\n        } else {\n          formData.append(fieldKey, this.castJsonToFormData(value));\n        }\n      }\n      return formData;\n    }\n    convertFormDataToQuery(formData) {\n      let flatData = this.formDataToArray(formData);\n      return Object.keys(flatData).map(function(key) {\n        if (key.endsWith(\"[]\")) {\n          return flatData[key].map(function(val) {\n            return encodeURIComponent(key) + \"=\" + encodeURIComponent(val);\n          }).join(\"&\");\n        } else {\n          return encodeURIComponent(key) + \"=\" + encodeURIComponent(flatData[key]);\n        }\n      }).join(\"&\");\n    }\n    convertFormDataToJson(formData) {\n      let flatData = this.formDataToArray(formData);\n      let jsonData = {};\n      for (var key in flatData) {\n        FormSerializer.assignToObj(jsonData, key, flatData[key]);\n      }\n      return jsonData;\n    }\n    formDataToArray(formData) {\n      return Object.fromEntries(\n        Array.from(formData.keys()).map((key) => [\n          key,\n          key.endsWith(\"[]\") ? formData.getAll(key) : formData.getAll(key).pop()\n        ])\n      );\n    }\n    castJsonToFormData(val) {\n      if (val === null || val === void 0) {\n        return \"\";\n      }\n      if (val === true) {\n        return \"1\";\n      }\n      if (val === false) {\n        return \"0\";\n      }\n      return val;\n    }\n  };\n  function isElementInput(el) {\n    return [\"input\", \"select\", \"textarea\"].includes((el.tagName || \"\").toLowerCase());\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/http-request.js\n  var SystemStatusCode = {\n    networkFailure: 0,\n    timeoutFailure: -1,\n    contentTypeMismatch: -2,\n    userAborted: -3\n  };\n  var HttpRequest = class {\n    constructor(delegate, url, options) {\n      this.failed = false;\n      this.progress = 0;\n      this.sent = false;\n      this.aborted = false;\n      this.timedOut = false;\n      this.delegate = delegate;\n      this.url = url;\n      this.options = options;\n      this.headers = options.headers || {};\n      this.method = options.method || \"GET\";\n      this.data = options.data;\n      this.timeout = options.timeout || 0;\n      this.controller = new AbortController();\n      this.timeoutId = null;\n      this.xhr = this.createXhrWrapper();\n    }\n    send() {\n      if (this.sent) {\n        return;\n      }\n      this.sent = true;\n      this.notifyApplicationBeforeRequestStart();\n      this.setProgress(0);\n      this.delegate.requestStarted();\n      if (this.timeout > 0) {\n        this.timeoutId = setTimeout(() => {\n          this.timedOut = true;\n          this.controller.abort();\n        }, this.timeout * 1e3);\n      }\n      this.performFetch();\n    }\n    async performFetch() {\n      try {\n        const response = await fetch(this.url, {\n          method: this.method,\n          headers: this.headers,\n          body: this.data || null,\n          signal: this.controller.signal\n        });\n        this.clearTimeout();\n        this.updateXhrWrapper(response);\n        await this.handleResponse(response);\n      } catch (error) {\n        this.clearTimeout();\n        if (error.name === \"AbortError\") {\n          if (this.timedOut) {\n            this.handleTimeout();\n          } else {\n            this.handleAbort();\n          }\n        } else {\n          this.handleNetworkError();\n        }\n      }\n    }\n    async handleResponse(response) {\n      const contentType = response.headers.get(\"Content-Type\");\n      const contentDisposition = response.headers.get(\"Content-Disposition\") || \"\";\n      if (this.options.htmlOnly && !contentTypeIsHTML(contentType)) {\n        this.failed = true;\n        this.notifyApplicationAfterRequestEnd();\n        this.delegate.requestFailedWithStatusCode(SystemStatusCode.contentTypeMismatch);\n        this.destroy();\n        return;\n      }\n      let responseData;\n      if (contentDisposition.startsWith(\"attachment\") || contentDisposition.startsWith(\"inline\")) {\n        responseData = await response.blob();\n      } else if (contentTypeIsJSON(contentType)) {\n        responseData = await response.json();\n      } else {\n        responseData = await response.text();\n      }\n      if (response.status >= 200 && response.status < 300) {\n        this.notifyApplicationAfterRequestEnd();\n        this.delegate.requestCompletedWithResponse(\n          responseData,\n          response.status,\n          this.getRedirectLocation(response)\n        );\n        this.destroy();\n      } else {\n        this.failed = true;\n        this.notifyApplicationAfterRequestEnd();\n        this.delegate.requestFailedWithStatusCode(response.status, responseData);\n        this.destroy();\n      }\n    }\n    getRedirectLocation(response) {\n      const ajaxLocation = response.headers.get(\"X-AJAX-LOCATION\");\n      if (ajaxLocation) {\n        return ajaxLocation;\n      }\n      var anchorMatch = this.url.match(/^(.*)#/), wantUrl = anchorMatch ? anchorMatch[1] : this.url;\n      return wantUrl !== response.url ? response.url : null;\n    }\n    handleTimeout() {\n      this.failed = true;\n      this.notifyApplicationAfterRequestEnd();\n      this.delegate.requestFailedWithStatusCode(SystemStatusCode.timeoutFailure);\n      this.destroy();\n    }\n    handleAbort() {\n      if (this.options.trackAbort) {\n        this.failed = true;\n        this.notifyApplicationAfterRequestEnd();\n        this.delegate.requestFailedWithStatusCode(SystemStatusCode.userAborted);\n      } else {\n        this.notifyApplicationAfterRequestEnd();\n      }\n      this.destroy();\n    }\n    handleNetworkError() {\n      this.failed = true;\n      this.notifyApplicationAfterRequestEnd();\n      this.delegate.requestFailedWithStatusCode(SystemStatusCode.networkFailure);\n      this.destroy();\n    }\n    abort() {\n      if (this.sent && !this.aborted) {\n        this.aborted = true;\n        this.controller.abort();\n      }\n    }\n    clearTimeout() {\n      if (this.timeoutId) {\n        clearTimeout(this.timeoutId);\n        this.timeoutId = null;\n      }\n    }\n    // Application events\n    notifyApplicationBeforeRequestStart() {\n      Events.dispatch(\"ajax:request-start\", { detail: { url: this.url, xhr: this.xhr }, cancelable: false });\n    }\n    notifyApplicationAfterRequestEnd() {\n      Events.dispatch(\"ajax:request-end\", { detail: { url: this.url, xhr: this.xhr }, cancelable: false });\n    }\n    // XHR compatibility wrapper\n    createXhrWrapper() {\n      return {\n        status: 0,\n        statusText: \"\",\n        responseURL: this.url,\n        getResponseHeader: (name) => null,\n        getAllResponseHeaders: () => \"\"\n      };\n    }\n    updateXhrWrapper(response) {\n      this.xhr = {\n        status: response.status,\n        statusText: response.statusText,\n        responseURL: response.url,\n        getResponseHeader: (name) => response.headers.get(name),\n        getAllResponseHeaders: () => [...response.headers].map(([k, v]) => `${k}: ${v}`).join(\"\\r\\n\")\n      };\n    }\n    setProgress(progress) {\n      this.progress = progress;\n      this.delegate.requestProgressed(progress);\n    }\n    destroy() {\n      this.setProgress(1);\n      this.delegate.requestFinished();\n    }\n  };\n  function contentTypeIsHTML(contentType) {\n    return (contentType || \"\").match(/^text\\/html|^application\\/xhtml\\+xml/);\n  }\n  function contentTypeIsJSON(contentType) {\n    return (contentType || \"\").includes(\"application/json\");\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/extras/progress-bar.js\n  var ProgressBar = class _ProgressBar {\n    static instance = null;\n    static stylesheetReady = false;\n    static animationDuration = 300;\n    constructor() {\n      this.stylesheetElement = this.createStylesheetElement();\n      this.progressElement = this.createProgressElement();\n      this.hiding = false;\n      this.value = 0;\n      this.visible = false;\n      this.trickle = () => {\n        this.setValue(this.value + Math.random() / 100);\n      };\n    }\n    static get defaultCSS() {\n      return unindent`\n        .jax-progress-bar {\n            position: fixed;\n            display: block;\n            top: 0;\n            left: 0;\n            height: 3px;\n            background: #0076ff;\n            z-index: 9999;\n            transition:\n                width ${_ProgressBar.animationDuration}ms ease-out,\n                opacity ${_ProgressBar.animationDuration / 2}ms ${_ProgressBar.animationDuration / 2}ms ease-in;\n            transform: translate3d(0, 0, 0);\n        }\n    `;\n    }\n    static get progressBar() {\n      return {\n        show: function() {\n          const instance = getOrCreateInstance();\n          instance.setValue(0);\n          instance.show();\n        },\n        hide: function() {\n          const instance = getOrCreateInstance();\n          instance.setValue(100);\n          instance.hide();\n        }\n      };\n    }\n    show(options = {}) {\n      if (options.cssClass) {\n        this.progressElement.classList.add(options.cssClass);\n      }\n      if (!this.visible) {\n        this.visible = true;\n        this.installStylesheetElement();\n        this.installProgressElement();\n        this.startTrickling();\n      }\n    }\n    hide() {\n      if (this.visible && !this.hiding) {\n        this.hiding = true;\n        this.fadeProgressElement(() => {\n          this.uninstallProgressElement();\n          this.stopTrickling();\n          this.visible = false;\n          this.hiding = false;\n        });\n      }\n    }\n    setValue(value) {\n      this.value = value;\n      this.refresh();\n    }\n    // Private\n    installStylesheetElement() {\n      if (!_ProgressBar.stylesheetReady) {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n        _ProgressBar.stylesheetReady = true;\n      }\n    }\n    installProgressElement() {\n      this.progressElement.style.width = \"0\";\n      this.progressElement.style.opacity = \"1\";\n      document.documentElement.insertBefore(this.progressElement, document.body);\n      this.refresh();\n    }\n    fadeProgressElement(callback) {\n      this.progressElement.style.opacity = \"0\";\n      setTimeout(callback, _ProgressBar.animationDuration * 1.5);\n    }\n    uninstallProgressElement() {\n      if (this.progressElement.parentNode) {\n        document.documentElement.removeChild(this.progressElement);\n      }\n    }\n    startTrickling() {\n      if (!this.trickleInterval) {\n        this.trickleInterval = setInterval(this.trickle, _ProgressBar.animationDuration);\n      }\n    }\n    stopTrickling() {\n      clearInterval(this.trickleInterval);\n      delete this.trickleInterval;\n    }\n    refresh() {\n      requestAnimationFrame(() => {\n        this.progressElement.style.width = `${10 + this.value * 90}%`;\n      });\n    }\n    createStylesheetElement() {\n      const element = document.createElement(\"style\");\n      element.textContent = _ProgressBar.defaultCSS;\n      return element;\n    }\n    createProgressElement() {\n      const element = document.createElement(\"div\");\n      element.className = \"jax-progress-bar\";\n      return element;\n    }\n  };\n  function getOrCreateInstance() {\n    if (!ProgressBar.instance) {\n      ProgressBar.instance = new ProgressBar();\n    }\n    return ProgressBar.instance;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/request.js\n  var Request = class _Request {\n    constructor(element, handler, options) {\n      this.el = element;\n      this.handler = handler;\n      this.options = { ...this.constructor.DEFAULTS, ...options || {} };\n      this.context = { el: element, handler, options: this.options };\n      this.progressBar = new ProgressBar();\n      this.showProgressBar = () => {\n        this.progressBar.show({ cssClass: \"is-ajax\" });\n      };\n    }\n    static get DEFAULTS() {\n      return {\n        handler: null,\n        update: {},\n        files: false,\n        bulk: false,\n        browserTarget: null,\n        browserValidate: false,\n        browserRedirectBack: false,\n        progressBarDelay: 500,\n        progressBar: null\n      };\n    }\n    start() {\n      this.promise = cancellablePromise();\n      if (!this.applicationAllowsSetup()) {\n        return this.promise;\n      }\n      this.initOtherElements();\n      this.preprocessOptions();\n      this.actions = new Actions(this, this.context, this.options);\n      if (this.actions.invokeFunc(\"beforeSendFunc\") === false) {\n        return this.promise;\n      }\n      if (!this.validateClientSideForm() || !this.applicationAllowsRequest()) {\n        return this.promise;\n      }\n      if (this.options.confirm && !this.actions.invoke(\"handleConfirmMessage\", [this.options.confirm])) {\n        return this.promise;\n      }\n      this.sendInternal();\n      return this.promise;\n    }\n    sendInternal() {\n      const dataObj = new Data(this.options.data, this.el, this.formEl);\n      let data;\n      if (this.options.files) {\n        data = dataObj.getAsFormData();\n      } else if (this.options.bulk) {\n        data = dataObj.getAsJsonData();\n      } else {\n        data = dataObj.getAsQueryString();\n      }\n      if (this.options.query) {\n        this.actions.invoke(\"applyQueryToUrl\", [\n          this.options.query !== true ? this.options.query : JSON.parse(dataObj.getAsJsonData())\n        ]);\n      }\n      const { url, headers, method } = Options.fetch(this.handler, this.options);\n      this.request = new HttpRequest(this, url, { method, headers, data, trackAbort: true });\n      this.isRedirect = this.options.redirect && this.options.redirect.length > 0;\n      this.notifyApplicationBeforeSend();\n      this.notifyApplicationAjaxPromise();\n      this.promise.onCancel(() => {\n        this.request.abort();\n      }).then((data2) => {\n        if (!this.isRedirect) {\n          this.notifyApplicationAjaxDone(data2, data2.$status, data2.$xhr);\n          this.notifyApplicationAjaxAlways(data2, data2.$status, data2.$xhr);\n          this.notifyApplicationSendComplete(data2, data2.$status, data2.$xhr);\n        }\n      }).catch((data2) => {\n        if (!this.isRedirect) {\n          this.notifyApplicationAjaxFail(data2, data2.$status, data2.$xhr);\n          this.notifyApplicationAjaxAlways(data2, data2.$status, data2.$xhr);\n          this.notifyApplicationSendComplete(data2, data2.$status, data2.$xhr);\n        }\n      });\n      this.request.send();\n    }\n    static send(handler, options) {\n      return new _Request(document, handler, options).start();\n    }\n    static sendElement(element, handler, options) {\n      if (typeof element === \"string\") {\n        element = document.querySelector(element);\n      }\n      return new _Request(element, handler, options).start();\n    }\n    toggleRedirect(redirectUrl) {\n      if (!redirectUrl) {\n        this.options.redirect = null;\n        this.isRedirect = false;\n      } else {\n        this.options.redirect = redirectUrl;\n        this.isRedirect = true;\n      }\n    }\n    applicationAllowsSetup() {\n      const event = this.notifyApplicationAjaxSetup();\n      return !event.defaultPrevented;\n    }\n    applicationAllowsRequest() {\n      const event = this.notifyApplicationBeforeRequest();\n      return !event.defaultPrevented;\n    }\n    applicationAllowsUpdate(data, responseCode, xhr) {\n      const event = this.notifyApplicationBeforeUpdate(data, responseCode, xhr);\n      return !event.defaultPrevented;\n    }\n    applicationAllowsError(message, responseCode, xhr) {\n      const event = this.notifyApplicationRequestError(message, responseCode, xhr);\n      return !event.defaultPrevented;\n    }\n    // Application events\n    notifyApplicationAjaxSetup() {\n      return dispatch(\"ajax:setup\", { target: this.el, detail: { context: this.context } });\n    }\n    notifyApplicationAjaxPromise() {\n      return dispatch(\"ajax:promise\", { target: this.el, detail: { context: this.context } });\n    }\n    notifyApplicationAjaxFail(data, responseCode, xhr) {\n      return dispatch(\"ajax:fail\", { target: this.el, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationAjaxDone(data, responseCode, xhr) {\n      return dispatch(\"ajax:done\", { target: this.el, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationAjaxAlways(data, responseCode, xhr) {\n      return dispatch(\"ajax:always\", { target: this.el, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationAjaxUpdate(target, data, responseCode, xhr) {\n      return dispatch(\"ajax:update\", { target, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationBeforeRedirect() {\n      return dispatch(\"ajax:before-redirect\", { target: this.el });\n    }\n    // Container-based events\n    notifyApplicationBeforeRequest() {\n      return dispatch(\"ajax:before-request\", { target: this.triggerEl, detail: { context: this.context } });\n    }\n    notifyApplicationBeforeUpdate(data, responseCode, xhr) {\n      return dispatch(\"ajax:before-update\", { target: this.triggerEl, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationRequestSuccess(data, responseCode, xhr) {\n      return dispatch(\"ajax:request-success\", { target: this.triggerEl, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationRequestError(message, responseCode, xhr) {\n      return dispatch(\"ajax:request-error\", { target: this.triggerEl, detail: { context: this.context, message, responseCode, xhr } });\n    }\n    notifyApplicationRequestComplete(data, responseCode, xhr) {\n      return dispatch(\"ajax:request-complete\", { target: this.triggerEl, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationRequestCancel() {\n      return dispatch(\"ajax:request-cancel\", { target: this.triggerEl, detail: { context: this.context } });\n    }\n    notifyApplicationBeforeValidate(message, fields) {\n      return dispatch(\"ajax:before-validate\", { target: this.triggerEl, detail: { context: this.context, message, fields } });\n    }\n    notifyApplicationBeforeReplace(target) {\n      return dispatch(\"ajax:before-replace\", { target });\n    }\n    // Window-based events\n    notifyApplicationBeforeSend() {\n      return dispatch(\"ajax:before-send\", { target: window, detail: { context: this.context } });\n    }\n    notifyApplicationUpdateComplete(data, responseCode, xhr) {\n      return dispatch(\"ajax:update-complete\", { target: window, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationSendComplete(data, responseCode, xhr) {\n      return dispatch(\"ajax:send-complete\", { target: window, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationFieldInvalid(element, fieldName, errorMsg, isFirst) {\n      return dispatch(\"ajax:invalid-field\", { target: window, detail: { element, fieldName, errorMsg, isFirst } });\n    }\n    notifyApplicationConfirmMessage(message, promise) {\n      return dispatch(\"ajax:confirm-message\", { target: window, detail: { message, promise } });\n    }\n    notifyApplicationErrorMessage(message) {\n      return dispatch(\"ajax:error-message\", { target: window, detail: { message } });\n    }\n    notifyApplicationCustomEvent(name, data) {\n      return dispatch(name, { target: this.el, detail: data });\n    }\n    // HTTP request delegate\n    requestStarted() {\n      this.markAsProgress(true);\n      this.toggleLoadingElement(true);\n      if (this.options.progressBar) {\n        this.showProgressBarAfterDelay();\n      }\n      this.actions.invoke(\"start\", [this.request.xhr]);\n    }\n    requestProgressed(progress) {\n    }\n    async requestCompletedWithResponse(response, statusCode) {\n      const data = decorateResponse(response, statusCode, this.request.xhr);\n      await this.actions.invoke(\"success\", [data, statusCode, this.request.xhr]);\n      await this.actions.invoke(\"complete\", [data, statusCode, this.request.xhr]);\n      this.promise.resolve(data);\n    }\n    async requestFailedWithStatusCode(statusCode, response) {\n      const data = decorateResponse(response, statusCode, this.request.xhr);\n      if (statusCode == SystemStatusCode.userAborted) {\n        await this.actions.invoke(\"cancel\", []);\n      } else {\n        await this.actions.invoke(\"error\", [data, statusCode, this.request.xhr]);\n      }\n      await this.actions.invoke(\"complete\", [data, statusCode, this.request.xhr]);\n      this.promise.reject(data);\n    }\n    requestFinished() {\n      this.markAsProgress(false);\n      this.toggleLoadingElement(false);\n      if (this.options.progressBar) {\n        this.hideProgressBar();\n      }\n    }\n    // Private\n    initOtherElements() {\n      if (typeof this.options.form === \"string\") {\n        this.formEl = document.querySelector(this.options.form);\n      } else if (this.options.form) {\n        this.formEl = this.options.form;\n      } else {\n        this.formEl = this.el && this.el !== document ? this.el.closest(\"form\") : null;\n      }\n      this.triggerEl = this.formEl || this.el !== document && this.el.closest(\"[data-request-scope]\") || document.body;\n      this.partialEl = this.el && this.el !== document ? this.el.closest(\"[data-ajax-partial]\") : null;\n      this.loadingEl = typeof this.options.loading === \"string\" ? document.querySelector(this.options.loading) : this.options.loading;\n    }\n    preprocessOptions() {\n      if (this.options.partial === void 0 && this.partialEl && this.partialEl.dataset.ajaxPartial !== void 0) {\n        this.options.partial = this.partialEl.dataset.ajaxPartial || true;\n      }\n    }\n    validateClientSideForm() {\n      if (this.options.browserValidate && typeof document.createElement(\"input\").reportValidity === \"function\" && this.formEl && !this.formEl.checkValidity()) {\n        this.formEl.reportValidity();\n        return false;\n      }\n      return true;\n    }\n    toggleLoadingElement(isLoading) {\n      if (!this.loadingEl) {\n        return;\n      }\n      if (typeof this.loadingEl.show !== \"function\" || typeof this.loadingEl.hide !== \"function\") {\n        this.loadingEl.style.display = isLoading ? \"block\" : \"none\";\n        return;\n      }\n      if (isLoading) {\n        this.loadingEl.show();\n      } else {\n        this.loadingEl.hide();\n      }\n    }\n    showProgressBarAfterDelay() {\n      this.progressBar.setValue(0);\n      this.progressBarTimeout = window.setTimeout(this.showProgressBar, this.options.progressBarDelay);\n    }\n    hideProgressBar() {\n      this.progressBar.setValue(100);\n      this.progressBar.hide();\n      if (this.progressBarTimeout != null) {\n        window.clearTimeout(this.progressBarTimeout);\n        delete this.progressBarTimeout;\n      }\n    }\n    markAsProgress(isLoading) {\n      if (isLoading) {\n        document.documentElement.setAttribute(\"data-ajax-progress\", \"\");\n        if (this.formEl) {\n          this.formEl.setAttribute(\"data-ajax-progress\", this.handler);\n        }\n      } else {\n        document.documentElement.removeAttribute(\"data-ajax-progress\");\n        if (this.formEl) {\n          this.formEl.removeAttribute(\"data-ajax-progress\");\n        }\n      }\n    }\n  };\n  function decorateResponse(response, statusCode, xhr) {\n    if (!response || response.constructor !== {}.constructor || !response.__ajax) {\n      return response;\n    }\n    const { __ajax, ...data } = response, envelope = new Envelope(response, statusCode), meta = {\n      env: envelope,\n      status: statusCode,\n      xhr\n    };\n    for (const [key, value] of Object.entries(meta)) {\n      Object.defineProperty(data, `$${key}`, {\n        value,\n        enumerable: false,\n        writable: false,\n        configurable: true\n      });\n    }\n    return data;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/namespace.js\n  var namespace_default = Request;\n\n  // ../../vendor/larajax/larajax/resources/src/util/json-parser.js\n  var JsonParser = class _JsonParser {\n    // Public\n    static paramToObj(name, value) {\n      if (value === void 0) {\n        value = \"\";\n      }\n      if (typeof value === \"object\") {\n        return value;\n      }\n      if (value.charAt(0) !== \"{\") {\n        value = \"{\" + value + \"}\";\n      }\n      try {\n        return this.parseJSON(value);\n      } catch (e) {\n        throw new Error(\"Error parsing the \" + name + \" attribute value. \" + e);\n      }\n    }\n    static parseJSON(json) {\n      return JSON.parse(new _JsonParser().parseString(json));\n    }\n    // Private\n    parseString(str) {\n      str = str.trim();\n      if (!str.length) {\n        throw new Error(\"Broken JSON object.\");\n      }\n      var result = \"\";\n      while (str && str[0] === \",\") {\n        str = str.substr(1);\n      }\n      if (str[0] === '\"' || str[0] === \"'\") {\n        if (str[str.length - 1] !== str[0]) {\n          throw new Error(\"Invalid string JSON object.\");\n        }\n        var body = '\"';\n        for (var i = 1; i < str.length; i++) {\n          if (str[i] === \"\\\\\") {\n            if (str[i + 1] === \"'\") {\n              body += str[i + 1];\n            } else {\n              body += str[i];\n              body += str[i + 1];\n            }\n            i++;\n          } else if (str[i] === str[0]) {\n            body += '\"';\n            return body;\n          } else if (str[i] === '\"') {\n            body += '\\\\\"';\n          } else body += str[i];\n        }\n        throw new Error(\"Invalid string JSON object.\");\n      }\n      if (str === \"true\" || str === \"false\") {\n        return str;\n      }\n      if (str === \"null\") {\n        return \"null\";\n      }\n      var num = parseFloat(str);\n      if (!isNaN(num)) {\n        return num.toString();\n      }\n      if (str[0] === \"{\") {\n        var type = \"needKey\";\n        var result = \"{\";\n        for (var i = 1; i < str.length; i++) {\n          if (this.isBlankChar(str[i])) {\n            continue;\n          } else if (type === \"needKey\" && (str[i] === '\"' || str[i] === \"'\")) {\n            var key = this.parseKey(str, i + 1, str[i]);\n            result += '\"' + key + '\"';\n            i += key.length;\n            i += 1;\n            type = \"afterKey\";\n          } else if (type === \"needKey\" && this.canBeKeyHead(str[i])) {\n            var key = this.parseKey(str, i);\n            result += '\"';\n            result += key;\n            result += '\"';\n            i += key.length - 1;\n            type = \"afterKey\";\n          } else if (type === \"afterKey\" && str[i] === \":\") {\n            result += \":\";\n            type = \":\";\n          } else if (type === \":\") {\n            var body = this.getBody(str, i);\n            i = i + body.originLength - 1;\n            result += this.parseString(body.body);\n            type = \"afterBody\";\n          } else if (type === \"afterBody\" || type === \"needKey\") {\n            var last = i;\n            while (str[last] === \",\" || this.isBlankChar(str[last])) {\n              last++;\n            }\n            if (str[last] === \"}\" && last === str.length - 1) {\n              while (result[result.length - 1] === \",\") {\n                result = result.substr(0, result.length - 1);\n              }\n              result += \"}\";\n              return result;\n            } else if (last !== i && result !== \"{\") {\n              result += \",\";\n              type = \"needKey\";\n              i = last - 1;\n            }\n          }\n        }\n        throw new Error(\"Broken JSON object near \" + result);\n      }\n      if (str[0] === \"[\") {\n        var result = \"[\";\n        var type = \"needBody\";\n        for (var i = 1; i < str.length; i++) {\n          if (\" \" === str[i] || \"\\n\" === str[i] || \"\t\" === str[i]) {\n            continue;\n          } else if (type === \"needBody\") {\n            if (str[i] === \",\") {\n              result += \"null,\";\n              continue;\n            }\n            if (str[i] === \"]\" && i === str.length - 1) {\n              if (result[result.length - 1] === \",\") result = result.substr(0, result.length - 1);\n              result += \"]\";\n              return result;\n            }\n            var body = this.getBody(str, i);\n            i = i + body.originLength - 1;\n            result += this.parseString(body.body);\n            type = \"afterBody\";\n          } else if (type === \"afterBody\") {\n            if (str[i] === \",\") {\n              result += \",\";\n              type = \"needBody\";\n              while (str[i + 1] === \",\" || this.isBlankChar(str[i + 1])) {\n                if (str[i + 1] === \",\") result += \"null,\";\n                i++;\n              }\n            } else if (str[i] === \"]\" && i === str.length - 1) {\n              result += \"]\";\n              return result;\n            }\n          }\n        }\n        throw new Error(\"Broken JSON array near \" + result);\n      }\n    }\n    parseKey(str, pos, quote) {\n      var key = \"\";\n      for (var i = pos; i < str.length; i++) {\n        if (quote && quote === str[i]) {\n          return key;\n        } else if (!quote && (str[i] === \" \" || str[i] === \":\")) {\n          return key;\n        }\n        key += str[i];\n        if (str[i] === \"\\\\\" && i + 1 < str.length) {\n          key += str[i + 1];\n          i++;\n        }\n      }\n      throw new Error(\"Broken JSON syntax near \" + key);\n    }\n    getBody(str, pos) {\n      if (str[pos] === '\"' || str[pos] === \"'\") {\n        var body = str[pos];\n        for (var i = pos + 1; i < str.length; i++) {\n          if (str[i] === \"\\\\\") {\n            body += str[i];\n            if (i + 1 < str.length) body += str[i + 1];\n            i++;\n          } else if (str[i] === str[pos]) {\n            body += str[pos];\n            return {\n              originLength: body.length,\n              body\n            };\n          } else body += str[i];\n        }\n        throw new Error(\"Broken JSON string body near \" + body);\n      }\n      if (str[pos] === \"t\") {\n        if (str.indexOf(\"true\", pos) === pos) {\n          return {\n            originLength: \"true\".length,\n            body: \"true\"\n          };\n        }\n        throw new Error(\"Broken JSON boolean body near \" + str.substr(0, pos + 10));\n      }\n      if (str[pos] === \"f\") {\n        if (str.indexOf(\"f\", pos) === pos) {\n          return {\n            originLength: \"false\".length,\n            body: \"false\"\n          };\n        }\n        throw new Error(\"Broken JSON boolean body near \" + str.substr(0, pos + 10));\n      }\n      if (str[pos] === \"n\") {\n        if (str.indexOf(\"null\", pos) === pos) {\n          return {\n            originLength: \"null\".length,\n            body: \"null\"\n          };\n        }\n        throw new Error(\"Broken JSON boolean body near \" + str.substr(0, pos + 10));\n      }\n      if (str[pos] === \"-\" || str[pos] === \"+\" || str[pos] === \".\" || str[pos] >= \"0\" && str[pos] <= \"9\") {\n        var body = \"\";\n        for (var i = pos; i < str.length; i++) {\n          if (str[i] === \"-\" || str[i] === \"+\" || str[i] === \".\" || str[i] >= \"0\" && str[i] <= \"9\") {\n            body += str[i];\n          } else {\n            return {\n              originLength: body.length,\n              body\n            };\n          }\n        }\n        throw new Error(\"Broken JSON number body near \" + body);\n      }\n      if (str[pos] === \"{\" || str[pos] === \"[\") {\n        var stack = [str[pos]];\n        var body = str[pos];\n        for (var i = pos + 1; i < str.length; i++) {\n          body += str[i];\n          if (str[i] === \"\\\\\") {\n            if (i + 1 < str.length) body += str[i + 1];\n            i++;\n          } else if (str[i] === '\"') {\n            if (stack[stack.length - 1] === '\"') {\n              stack.pop();\n            } else if (stack[stack.length - 1] !== \"'\") {\n              stack.push(str[i]);\n            }\n          } else if (str[i] === \"'\") {\n            if (stack[stack.length - 1] === \"'\") {\n              stack.pop();\n            } else if (stack[stack.length - 1] !== '\"') {\n              stack.push(str[i]);\n            }\n          } else if (stack[stack.length - 1] !== '\"' && stack[stack.length - 1] !== \"'\") {\n            if (str[i] === \"{\") {\n              stack.push(\"{\");\n            } else if (str[i] === \"}\") {\n              if (stack[stack.length - 1] === \"{\") {\n                stack.pop();\n              } else {\n                throw new Error(\"Broken JSON \" + (str[pos] === \"{\" ? \"object\" : \"array\") + \" body near \" + body);\n              }\n            } else if (str[i] === \"[\") {\n              stack.push(\"[\");\n            } else if (str[i] === \"]\") {\n              if (stack[stack.length - 1] === \"[\") {\n                stack.pop();\n              } else {\n                throw new Error(\"Broken JSON \" + (str[pos] === \"{\" ? \"object\" : \"array\") + \" body near \" + body);\n              }\n            }\n          }\n          if (!stack.length) {\n            return {\n              originLength: i - pos,\n              body\n            };\n          }\n        }\n        throw new Error(\"Broken JSON \" + (str[pos] === \"{\" ? \"object\" : \"array\") + \" body near \" + body);\n      }\n      throw new Error(\"Broken JSON body near \" + str.substr(pos - 5 >= 0 ? pos - 5 : 0, 50));\n    }\n    canBeKeyHead(ch) {\n      if (ch[0] === \"\\\\\") return false;\n      if (ch[0] >= \"a\" && ch[0] <= \"z\" || ch[0] >= \"A\" && ch[0] <= \"Z\" || ch[0] === \"_\") return true;\n      if (ch[0] >= \"0\" && ch[0] <= \"9\") return true;\n      if (ch[0] === \"$\") return true;\n      if (ch.charCodeAt(0) > 255) return true;\n      return false;\n    }\n    isBlankChar(ch) {\n      return ch === \" \" || ch === \"\\n\" || ch === \"\t\";\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/core/request-builder.js\n  var RequestBuilder = class _RequestBuilder {\n    constructor(element, handler, options) {\n      this.options = options || {};\n      this.ogElement = element;\n      this.element = this.findElement(element);\n      if (!this.element) {\n        return namespace_default.send(\n          this.normalizeHandler(handler),\n          this.options\n        );\n      }\n      this.assignAsEval(\"beforeSendFunc\", \"requestBeforeSend\");\n      this.assignAsEval(\"beforeUpdateFunc\", \"requestBeforeUpdate\");\n      this.assignAsEval(\"afterUpdateFunc\", \"requestAfterUpdate\");\n      this.assignAsEval(\"successFunc\", \"requestSuccess\");\n      this.assignAsEval(\"errorFunc\", \"requestError\");\n      this.assignAsEval(\"cancelFunc\", \"requestCancel\");\n      this.assignAsEval(\"completeFunc\", \"requestComplete\");\n      this.assignAsData(\"progressBar\", \"requestProgressBar\");\n      this.assignAsData(\"message\", \"requestMessage\");\n      this.assignAsData(\"confirm\", \"requestConfirm\");\n      this.assignAsData(\"redirect\", \"requestRedirect\");\n      this.assignAsData(\"loading\", \"requestLoading\");\n      this.assignAsData(\"form\", \"requestForm\");\n      this.assignAsData(\"url\", \"requestUrl\");\n      this.assignAsData(\"bulk\", \"requestBulk\", { emptyAsTrue: true });\n      this.assignAsData(\"files\", \"requestFiles\", { emptyAsTrue: true });\n      this.assignAsData(\"flash\", \"requestFlash\", { emptyAsTrue: true });\n      this.assignAsData(\"update\", \"requestUpdate\", { parseJson: true });\n      this.assignAsData(\"query\", \"requestQuery\", { emptyAsTrue: true, parseJson: true });\n      this.assignAsData(\"browserTarget\", \"browserTarget\");\n      this.assignAsData(\"browserValidate\", \"browserValidate\", { emptyAsTrue: true });\n      this.assignAsData(\"browserRedirectBack\", \"browserRedirectBack\", { emptyAsTrue: true });\n      this.assignAsMetaData(\"update\", \"ajaxRequestUpdate\", { parseJson: true, mergeValue: true });\n      this.assignRequestData();\n      if (!handler) {\n        handler = this.getHandlerName();\n      }\n      return namespace_default.sendElement(\n        this.element,\n        this.normalizeHandler(handler),\n        this.options\n      );\n    }\n    static fromElement(element, handler, options) {\n      if (typeof element === \"string\") {\n        element = document.querySelector(element);\n      }\n      return new _RequestBuilder(element, handler, options);\n    }\n    // Event target may some random node inside the data-request container\n    // so it should bubble up but also capture the ogElement in case it is\n    // a button that contains data-request-data.\n    findElement(element) {\n      if (!element || element === document) {\n        return null;\n      }\n      if (element.matches(\"[data-request]\")) {\n        return element;\n      }\n      var parentEl = element.closest(\"[data-request]\");\n      if (parentEl) {\n        return parentEl;\n      }\n      return element;\n    }\n    getHandlerName() {\n      if (this.element.dataset.dataRequest) {\n        return this.element.dataset.dataRequest;\n      }\n      return this.element.getAttribute(\"data-request\");\n    }\n    normalizeHandler(handler) {\n      if (handler && !isValidHandler(handler)) {\n        if (this.options.url === void 0) {\n          this.options.url = handler;\n        }\n        return \"onAjax\";\n      }\n      return handler;\n    }\n    assignAsEval(optionName, name) {\n      if (this.options[optionName] !== void 0) {\n        return;\n      }\n      var attrVal;\n      if (this.element.dataset[name]) {\n        attrVal = this.element.dataset[name];\n      } else {\n        attrVal = this.element.getAttribute(\"data-\" + normalizeDataKey(name));\n      }\n      if (!attrVal) {\n        return;\n      }\n      this.options[optionName] = function(element, context, data) {\n        return new Function(\"context\", \"data\", attrVal).apply(element, [context, data]);\n      };\n    }\n    assignAsData(optionName, name, { parseJson = false, emptyAsTrue = false } = {}) {\n      if (this.options[optionName] !== void 0) {\n        return;\n      }\n      var attrVal;\n      if (this.element.dataset[name]) {\n        attrVal = this.element.dataset[name];\n      } else {\n        attrVal = this.element.getAttribute(\"data-\" + normalizeDataKey(name));\n      }\n      if (attrVal === null) {\n        return;\n      }\n      attrVal = this.castAttrToOption(attrVal, emptyAsTrue);\n      if (parseJson && typeof attrVal === \"string\") {\n        attrVal = JsonParser.paramToObj(\n          \"data-\" + normalizeDataKey(name),\n          attrVal\n        );\n      }\n      this.options[optionName] = attrVal;\n    }\n    assignAsMetaData(optionName, name, { mergeValue = true, parseJson = false, emptyAsTrue = false } = {}) {\n      const meta = document.documentElement.querySelector('head meta[name=\"' + normalizeDataKey(name) + '\"]');\n      if (!meta) {\n        return;\n      }\n      var attrVal = meta.getAttribute(\"content\");\n      if (parseJson) {\n        attrVal = JsonParser.paramToObj(normalizeDataKey(name), attrVal);\n      } else {\n        attrVal = this.castAttrToOption(attrVal, emptyAsTrue);\n      }\n      if (mergeValue) {\n        this.options[optionName] = {\n          ...this.options[optionName] || {},\n          ...attrVal\n        };\n      } else {\n        this.options[optionName] = attrVal;\n      }\n    }\n    castAttrToOption(val, emptyAsTrue) {\n      if (emptyAsTrue && val === \"\") {\n        return true;\n      }\n      if (val === \"true\" || val === \"1\") {\n        return true;\n      }\n      if (val === \"false\" || val === \"0\") {\n        return false;\n      }\n      return val;\n    }\n    assignRequestData() {\n      const data = {};\n      elementParents(this.ogElement, \"[data-request-data]\").forEach(function(el) {\n        Object.assign(data, JsonParser.paramToObj(\n          \"data-request-data\",\n          el.getAttribute(\"data-request-data\")\n        ));\n      });\n      const attr = this.ogElement.getAttribute(\"data-request-data\");\n      if (attr) {\n        Object.assign(data, JsonParser.paramToObj(\"data-request-data\", attr));\n      }\n      if (this.options.data) {\n        Object.assign(data, this.options.data);\n      }\n      this.options.data = data;\n    }\n  };\n  function elementParents(element, selector) {\n    const parents = [];\n    if (!element.parentNode) {\n      return parents;\n    }\n    let ancestor = element.parentNode.closest(selector);\n    while (ancestor) {\n      parents.push(ancestor);\n      ancestor = ancestor.parentNode.closest(selector);\n    }\n    return parents;\n  }\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n  }\n  function isValidHandler(str) {\n    return /^(?:\\w+\\:{2})?on[A-Z]{1}[\\w+]*$/.test(str);\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/core/trigger.js\n  var Trigger = class {\n    constructor(element) {\n      this.element = element;\n      this.config = this.parse();\n      this.timer = null;\n      this.throttleTimer = null;\n      this.lastValue = null;\n      this.fired = false;\n      this.throttled = false;\n      this.lastRequest = null;\n    }\n    /**\n     * Parse trigger configuration from element attributes\n     */\n    parse() {\n      let trigger = this.element.dataset.requestTrigger;\n      let poll = this.element.dataset.requestPoll;\n      if (!trigger && this.element.dataset.trackInput !== void 0) {\n        const delay = this.element.dataset.trackInput || 300;\n        trigger = `input changed delay:${delay}`;\n      }\n      if (!trigger && this.element.dataset.autoSubmit !== void 0) {\n        const delay = this.element.dataset.autoSubmit || 0;\n        trigger = delay > 0 ? `load delay:${delay}` : \"load\";\n      }\n      if (!trigger) {\n        trigger = this.getDefaultTrigger();\n      }\n      const config = this.parseString(trigger);\n      if (poll) {\n        config.poll = this.parseTime(poll);\n      }\n      return config;\n    }\n    /**\n     * Parse trigger string into config object\n     * Format: \"event modifier modifier:value\"\n     * Example: \"input changed delay:500\"\n     */\n    parseString(str) {\n      const parts = str.trim().split(/\\s+/);\n      const config = {\n        event: parts[0] || \"click\",\n        delay: 0,\n        throttle: 0,\n        once: false,\n        changed: false,\n        poll: 0\n      };\n      for (let i = 1; i < parts.length; i++) {\n        const part = parts[i];\n        if (part === \"once\") {\n          config.once = true;\n        } else if (part === \"changed\") {\n          config.changed = true;\n        } else if (part.startsWith(\"delay:\")) {\n          config.delay = this.parseTime(part.slice(6));\n        } else if (part.startsWith(\"throttle:\")) {\n          config.throttle = this.parseTime(part.slice(9));\n        }\n      }\n      return config;\n    }\n    /**\n     * Parse time value to milliseconds\n     * Supports: 500, 500ms, 1s, 1.5s\n     */\n    parseTime(value) {\n      if (typeof value === \"number\") {\n        return value;\n      }\n      value = String(value).trim();\n      if (value.endsWith(\"ms\")) {\n        return parseFloat(value);\n      }\n      if (value.endsWith(\"s\")) {\n        return parseFloat(value) * 1e3;\n      }\n      return parseInt(value, 10) || 0;\n    }\n    /**\n     * Get default trigger based on element type\n     */\n    getDefaultTrigger() {\n      const el = this.element;\n      const tag = el.tagName.toLowerCase();\n      const type = el.getAttribute(\"type\")?.toLowerCase();\n      if (tag === \"form\") return \"submit\";\n      if (tag === \"a\") return \"click\";\n      if (tag === \"button\") return \"click\";\n      if (tag === \"select\") return \"change\";\n      if (type === \"checkbox\" || type === \"radio\" || type === \"file\") return \"change\";\n      if (type === \"date\" || type === \"datetime-local\" || type === \"time\" || type === \"month\" || type === \"week\" || type === \"color\" || type === \"range\") return \"change\";\n      if (tag === \"input\" && (type === \"submit\" || type === \"button\")) return \"click\";\n      if (tag === \"input\") return \"click\";\n      return \"click\";\n    }\n    /**\n     * Check if element is still connected to DOM\n     */\n    isConnected() {\n      return this.element.isConnected;\n    }\n    /**\n     * Bind event listeners for invented events only.\n     * Standard DOM events (click, submit, change, input) are handled\n     * via document-level delegation in Controller.\n     */\n    bind() {\n      const { event } = this.config;\n      if (event === \"load\") {\n        dispatch(\"ajax:trigger\", { target: this.element });\n      } else if (event === \"revealed\" || event === \"intersect\") {\n        this.observeVisibility();\n      }\n    }\n    /**\n     * Handle the trigger event\n     */\n    handleEvent(event) {\n      if (!this.isConnected()) {\n        return;\n      }\n      if (event && (this.config.event === \"submit\" || this.config.event === \"click\")) {\n        event.preventDefault();\n      }\n      const { delay, throttle, once, changed } = this.config;\n      if (once && this.fired) {\n        return;\n      }\n      if (changed && !this.hasChanged()) {\n        return;\n      }\n      if (this.timer) {\n        clearTimeout(this.timer);\n        this.timer = null;\n      }\n      if (throttle > 0 && this.throttled) {\n        return;\n      }\n      if (delay > 0) {\n        this.timer = setTimeout(() => this.fire(), delay);\n      } else {\n        this.fire();\n      }\n    }\n    /**\n     * Check if the element value has changed\n     */\n    hasChanged() {\n      const value = this.element.value;\n      if (this.lastValue === value) {\n        return false;\n      }\n      this.lastValue = value;\n      return true;\n    }\n    /**\n     * Fire the actual request\n     */\n    fire() {\n      if (!this.isConnected()) {\n        return;\n      }\n      if (this.lastRequest && this.lastRequest.abort) {\n        this.lastRequest.abort();\n      }\n      this.fired = true;\n      this.lastRequest = RequestBuilder.fromElement(this.element);\n      if (this.config.throttle > 0) {\n        this.throttled = true;\n        this.throttleTimer = setTimeout(() => {\n          this.throttled = false;\n        }, this.config.throttle);\n      }\n    }\n    /**\n     * Observe element visibility for revealed/intersect events\n     */\n    observeVisibility() {\n      const observer = new IntersectionObserver((entries) => {\n        entries.forEach((entry) => {\n          if (!this.isConnected()) {\n            observer.disconnect();\n            return;\n          }\n          if (entry.isIntersecting) {\n            dispatch(\"ajax:trigger\", { target: this.element });\n            if (this.config.once || this.config.event === \"intersect\") {\n              observer.disconnect();\n            }\n          }\n        });\n      }, {\n        threshold: 0.1\n      });\n      observer.observe(this.element);\n    }\n    /**\n     * Start polling interval\n     */\n    startPolling() {\n      const intervalId = setInterval(() => {\n        if (!this.isConnected()) {\n          clearInterval(intervalId);\n          return;\n        }\n        if (!document.hidden) {\n          dispatch(\"ajax:trigger\", { target: this.element });\n        }\n      }, this.config.poll);\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/util/wait.js\n  function waitFor(predicate, timeout) {\n    return new Promise((resolve, reject) => {\n      const check = () => {\n        if (!predicate()) {\n          return;\n        }\n        clearInterval(interval);\n        resolve();\n      };\n      const interval = setInterval(check, 100);\n      check();\n      if (!timeout) {\n        return;\n      }\n      setTimeout(() => {\n        clearInterval(interval);\n        reject();\n      }, timeout);\n    });\n  }\n  function domReady() {\n    return new Promise((resolve) => {\n      if (document.readyState === \"loading\") {\n        document.addEventListener(\"DOMContentLoaded\", () => resolve());\n      } else {\n        resolve();\n      }\n    });\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/core/controller.js\n  var Controller = class {\n    constructor() {\n      this.started = false;\n      this.triggers = /* @__PURE__ */ new WeakMap();\n    }\n    start() {\n      if (!this.started) {\n        addEventListener(\"beforeunload\", this.documentOnBeforeUnload);\n        Events.on(document, \"click\", \"[data-request]\", this.onTriggerEvent);\n        Events.on(document, \"submit\", \"[data-request]\", this.onTriggerEvent);\n        Events.on(document, \"change\", \"[data-request]\", this.onTriggerEvent);\n        Events.on(document, \"input\", \"[data-request]\", this.onTriggerEvent);\n        Events.on(document, \"ajax:trigger\", \"[data-request]\", this.onTriggerEvent);\n        addEventListener(\"DOMContentLoaded\", this.onRender);\n        addEventListener(\"page:updated\", this.onRender);\n        addEventListener(\"ajax:update-complete\", this.onRender);\n        this.started = true;\n      }\n    }\n    stop() {\n      if (this.started) {\n        removeEventListener(\"beforeunload\", this.documentOnBeforeUnload);\n        Events.off(document, \"click\", \"[data-request]\", this.onTriggerEvent);\n        Events.off(document, \"submit\", \"[data-request]\", this.onTriggerEvent);\n        Events.off(document, \"change\", \"[data-request]\", this.onTriggerEvent);\n        Events.off(document, \"input\", \"[data-request]\", this.onTriggerEvent);\n        Events.off(document, \"ajax:trigger\", \"[data-request]\", this.onTriggerEvent);\n        removeEventListener(\"DOMContentLoaded\", this.onRender);\n        removeEventListener(\"page:updated\", this.onRender);\n        removeEventListener(\"ajax:update-complete\", this.onRender);\n        this.started = false;\n      }\n    }\n    onRender = () => {\n      this.render();\n    };\n    render() {\n      Events.dispatch(\"before-render\");\n      Events.dispatch(\"render\");\n      dispatchEvent(new Event(\"resize\"));\n      this.bindCustomTriggers();\n    }\n    /**\n     * Initialize triggers for custom events (load, revealed, intersect)\n     * Native events (click, submit, change, input) are handled by document delegation\n     */\n    bindCustomTriggers() {\n      document.querySelectorAll(\"[data-request]:not([data-trigger-bound])\").forEach((el) => {\n        const trigger = this.getTrigger(el);\n        const eventType = trigger.config.event;\n        if (eventType === \"load\" || eventType === \"revealed\" || eventType === \"intersect\") {\n          el.setAttribute(\"data-trigger-bound\", \"\");\n          trigger.bind();\n        }\n        if (trigger.config.poll > 0) {\n          el.setAttribute(\"data-trigger-bound\", \"\");\n          trigger.startPolling();\n        }\n      });\n    }\n    /**\n     * Get or create a Trigger instance for an element\n     */\n    getTrigger(el) {\n      let trigger = this.triggers.get(el);\n      if (!trigger) {\n        trigger = new Trigger(el);\n        this.triggers.set(el, trigger);\n      }\n      return trigger;\n    }\n    /**\n     * Handle delegated trigger events\n     */\n    onTriggerEvent = (event) => {\n      const el = event.delegateTarget;\n      const trigger = this.getTrigger(el);\n      const configEvent = trigger.config.event;\n      if (event.type === \"ajax:trigger\") {\n        trigger.handleEvent(event);\n        return;\n      }\n      if (event.type === configEvent) {\n        trigger.handleEvent(event);\n      }\n    };\n    documentOnBeforeUnload(event) {\n      window.jaxUnloading = true;\n    }\n    /**\n     * Wait for the page to be ready.\n     * Uses Turbo's pageReady if available, otherwise falls back to domReady.\n     */\n    pageReady() {\n      return turboPageReady() ?? domReady();\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/core/namespace.js\n  var controller = new Controller();\n  var namespace_default2 = {\n    controller,\n    parseJSON: JsonParser.parseJSON,\n    serializeAsJSON: FormSerializer.serializeAsJSON,\n    requestElement: RequestBuilder.fromElement,\n    pageReady() {\n      return controller.pageReady();\n    },\n    start() {\n      controller.start();\n    },\n    stop() {\n      controller.stop();\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/extras/validator.js\n  var Validator = class {\n    submit(el) {\n      var form = el.closest(\"form\");\n      if (!form) {\n        return;\n      }\n      form.querySelectorAll(\"[data-validate-for]\").forEach(function(el2) {\n        el2.classList.remove(\"jax-visible\");\n      });\n      form.querySelectorAll(\"[data-validate-error]\").forEach(function(el2) {\n        el2.classList.remove(\"jax-visible\");\n      });\n    }\n    validate(el, fields, errorMsg, allowDefault) {\n      var form = el.closest(\"form\"), messages = [];\n      if (!form) {\n        return;\n      }\n      for (var fieldName in fields) {\n        var fieldMessages = fields[fieldName];\n        messages = [...messages, ...fieldMessages];\n        var field = form.querySelector('[data-validate-for=\"' + fieldName + '\"]');\n        if (field) {\n          if (!field.innerHTML || field.dataset.emptyMode) {\n            field.dataset.emptyMode = true;\n            field.innerHTML = fieldMessages.join(\", \");\n          }\n          field.classList.add(\"jax-visible\");\n        }\n      }\n      var container = form.querySelector(\"[data-validate-error]\");\n      if (container) {\n        container.classList.add(\"jax-visible\");\n        var oldMessages = container.querySelectorAll(\"[data-message]\");\n        if (oldMessages.length > 0) {\n          var clone = oldMessages[0];\n          messages.forEach(function(message) {\n            var newNode = clone.cloneNode(true);\n            newNode.innerHTML = message;\n            clone.parentNode.insertBefore(newNode, clone.nextSibling);\n          });\n          oldMessages.forEach(function(el2) {\n            el2.remove();\n          });\n        } else {\n          container.innerHTML = errorMsg;\n        }\n      }\n      if (allowDefault) {\n        return;\n      }\n      Events.one(form, \"ajax:request-error\", function(event) {\n        event.preventDefault();\n      });\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/extras/attach-loader.js\n  var AttachLoader = class _AttachLoader {\n    static stylesheetReady = false;\n    constructor() {\n      this.stylesheetElement = this.createStylesheetElement();\n    }\n    static get defaultCSS() {\n      return unindent`\n        .jax-attach-loader:after {\n            content: '';\n            display: inline-block;\n            vertical-align: middle;\n            margin-left: .4em;\n            height: 1em;\n            width: 1em;\n            animation: jax-rotate-loader 0.8s infinite linear;\n            border: .2em solid currentColor;\n            border-right-color: transparent;\n            border-radius: 50%;\n            opacity: .5;\n        }\n        @keyframes jax-rotate-loader {\n            0% { transform: rotate(0deg); }\n            100%  { transform: rotate(360deg); }\n        }\n    `;\n    }\n    static get attachLoader() {\n      return {\n        show: function(el) {\n          new _AttachLoader().show(resolveElement(el));\n        },\n        hide: function(el) {\n          new _AttachLoader().hide(resolveElement(el));\n        },\n        hideAll: function() {\n          new _AttachLoader().hideAll();\n        }\n      };\n    }\n    // Public\n    show(el) {\n      this.installStylesheetElement();\n      if (isElementInput2(el)) {\n        const loadEl = document.createElement(\"span\");\n        loadEl.className = \"jax-attach-loader is-inline\";\n        el.parentNode.insertBefore(loadEl, el.nextSibling);\n      } else {\n        el.classList.add(\"jax-attach-loader\");\n        el.disabled = true;\n      }\n    }\n    hide(el) {\n      if (isElementInput2(el)) {\n        if (el.nextElementSibling && el.nextElementSibling.classList.contains(\"jax-attach-loader\")) {\n          el.nextElementSibling.remove();\n        }\n      } else {\n        el.classList.remove(\"jax-attach-loader\");\n        el.disabled = false;\n      }\n    }\n    hideAll() {\n      document.querySelectorAll(\".jax-attach-loader.is-inline\").forEach((el) => {\n        el.remove();\n      });\n      document.querySelectorAll(\".jax-attach-loader\").forEach((el) => {\n        el.classList.remove(\"jax-attach-loader\");\n        el.disabled = false;\n      });\n    }\n    showForm(el) {\n      if (el.dataset.attachLoading !== void 0) {\n        this.show(el);\n      }\n      if (el.matches(\"form\")) {\n        var self = this;\n        el.querySelectorAll(\"[data-attach-loading][type=submit]\").forEach(function(otherEl) {\n          if (!isElementInput2(otherEl)) {\n            self.show(otherEl);\n          }\n        });\n      }\n    }\n    hideForm(el) {\n      if (el.dataset.attachLoading !== void 0) {\n        this.hide(el);\n      }\n      if (el.matches(\"form\")) {\n        var self = this;\n        el.querySelectorAll(\"[data-attach-loading]\").forEach(function(otherEl) {\n          if (!isElementInput2(otherEl)) {\n            self.hide(otherEl);\n          }\n        });\n      }\n    }\n    // Private\n    installStylesheetElement() {\n      if (!_AttachLoader.stylesheetReady) {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n        _AttachLoader.stylesheetReady = true;\n      }\n    }\n    createStylesheetElement() {\n      const element = document.createElement(\"style\");\n      element.textContent = _AttachLoader.defaultCSS;\n      return element;\n    }\n  };\n  function isElementInput2(el) {\n    return [\"input\", \"select\", \"textarea\"].includes((el.tagName || \"\").toLowerCase());\n  }\n  function resolveElement(el) {\n    if (typeof el === \"string\") {\n      el = document.querySelector(el);\n    }\n    if (!el) {\n      throw new Error(\"Invalid element for attach loader.\");\n    }\n    return el;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/extras/flash-message.js\n  var FlashMessage = class _FlashMessage {\n    static instance = null;\n    static stylesheetReady = false;\n    constructor() {\n      this.queue = [];\n      this.lastUniqueId = 0;\n      this.displayedMessage = null;\n      this.stylesheetElement = this.createStylesheetElement();\n    }\n    static get defaultCSS() {\n      return unindent`\n        .jax-flash-message {\n            display: flex;\n            position: fixed;\n            z-index: 10300;\n            width: 500px;\n            left: 50%;\n            top: 50px;\n            margin-left: -250px;\n            color: #fff;\n            font-size: 1rem;\n            padding: 10px 15px;\n            border-radius: 5px;\n            opacity: 0;\n            transition: all 0.5s, width 0s;\n            transform: scale(0.9);\n        }\n        @media (max-width: 768px) {\n            .jax-flash-message {\n                left: 1rem;\n                right: 1rem;\n                top: 1rem;\n                margin-left: 0;\n                width: auto;\n            }\n        }\n        .jax-flash-message.flash-show {\n            opacity: 1;\n            transform: scale(1);\n        }\n        .jax-flash-message.loading {\n            transition: opacity 0.2s;\n            transform: scale(1);\n        }\n        .jax-flash-message.success {\n            background: #86cb43;\n        }\n        .jax-flash-message.error {\n            background: #cc3300;\n        }\n        .jax-flash-message.warning {\n            background: #f0ad4e;\n        }\n        .jax-flash-message.info, .jax-flash-message.loading {\n            background: #5fb6f5;\n        }\n        .jax-flash-message span.flash-message {\n            flex-grow: 1;\n        }\n        .jax-flash-message a.flash-close {\n            box-sizing: content-box;\n            width: 1em;\n            height: 1em;\n            padding: .25em .25em;\n            background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23FFF'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n            border: 0;\n            border-radius: .25rem;\n            opacity: .5;\n            text-decoration: none;\n            cursor: pointer;\n        }\n        .jax-flash-message a.flash-close:hover,\n        .jax-flash-message a.flash-close:focus {\n            opacity: 1;\n        }\n        .jax-flash-message.loading a.flash-close {\n            display: none;\n        }\n        .jax-flash-message span.flash-loader {\n            margin-right: 1em;\n        }\n        .jax-flash-message span.flash-loader:after {\n            position: relative;\n            top: 2px;\n            content: '';\n            display: inline-block;\n            height: 1.2em;\n            width: 1.2em;\n            animation: jax-flash-loader 0.8s infinite linear;\n            border: .2em solid currentColor;\n            border-right-color: transparent;\n            border-radius: 50%;\n            opacity: .5;\n        }\n        @keyframes jax-flash-loader {\n            0% { transform: rotate(0deg); }\n            100%  { transform: rotate(360deg); }\n        }\n    `;\n    }\n    static flashMsg(options) {\n      return getOrCreateInstance2().show(options);\n    }\n    runQueue() {\n      if (this.displayedMessage) {\n        return;\n      }\n      var options = this.queue.shift();\n      if (options === void 0) {\n        return;\n      }\n      this.buildFlashMessage(options);\n    }\n    clearQueue() {\n      this.queue = [];\n      if (this.displayedMessage && this.displayedMessage.uniqueId) {\n        this.hide(this.displayedMessage.uniqueId, true);\n      }\n    }\n    removeFromQueue(uniqueId) {\n      for (var index = 0; index < this.queue.length; index++) {\n        if (this.queue[index].uniqueId == uniqueId) {\n          this.queue.splice(index, 1);\n          return;\n        }\n      }\n    }\n    show(options = {}) {\n      this.installStylesheetElement();\n      let {\n        message = \"\",\n        type = \"info\",\n        replace = null,\n        hideAll = false\n      } = options;\n      if (options.text) message = options.text;\n      if (options.class) type = options.class;\n      if (hideAll || type === \"error\" || type === \"loading\") {\n        this.clearQueue();\n      }\n      if (replace) {\n        if (this.displayedMessage && replace === this.displayedMessage.uniqueId) {\n          this.hide(replace, true);\n        } else {\n          this.removeFromQueue(replace);\n        }\n      }\n      if (!message) {\n        return;\n      }\n      var uniqueId = this.makeUniqueId();\n      this.queue.push({\n        ...options,\n        uniqueId\n      });\n      this.runQueue();\n      return uniqueId;\n    }\n    makeUniqueId() {\n      return ++this.lastUniqueId;\n    }\n    buildFlashMessage(options = {}) {\n      let {\n        message = \"\",\n        type = \"info\",\n        target = null,\n        interval = 3\n      } = options;\n      if (options.text) message = options.text;\n      if (options.class) type = options.class;\n      if (target) {\n        target.removeAttribute(\"data-control\");\n      }\n      var flashElement = this.createFlashElement(message, type);\n      this.createMessagesElement().appendChild(flashElement);\n      this.displayedMessage = {\n        uniqueId: options.uniqueId,\n        element: flashElement,\n        options\n      };\n      var remove = (event) => {\n        clearInterval(timer);\n        flashElement.removeEventListener(\"click\", pause);\n        flashElement.removeEventListener(\"extras:flash-remove\", remove);\n        flashElement.querySelector(\".flash-close\").removeEventListener(\"click\", remove);\n        flashElement.classList.remove(\"flash-show\");\n        if (event && event.detail.isReplace) {\n          flashElement.remove();\n          this.displayedMessage = null;\n          this.runQueue();\n        } else {\n          setTimeout(() => {\n            flashElement.remove();\n            this.displayedMessage = null;\n            this.runQueue();\n          }, 600);\n        }\n      };\n      var pause = () => {\n        clearInterval(timer);\n      };\n      flashElement.addEventListener(\"click\", pause, { once: true });\n      flashElement.addEventListener(\"extras:flash-remove\", remove, { once: true });\n      flashElement.querySelector(\".flash-close\").addEventListener(\"click\", remove, { once: true });\n      var timer;\n      if (interval && interval !== 0) {\n        timer = setTimeout(remove, interval * 1e3);\n      }\n      setTimeout(() => {\n        flashElement.classList.add(\"flash-show\");\n      }, 20);\n    }\n    render() {\n      document.querySelectorAll(\"[data-control=flash-message]\").forEach((el) => {\n        this.show({ ...el.dataset, target: el, message: el.innerHTML });\n        el.remove();\n      });\n    }\n    hide(uniqueId, isReplace) {\n      if (this.displayedMessage && uniqueId === this.displayedMessage.uniqueId) {\n        this.displayedMessage.element.dispatchEvent(new CustomEvent(\"extras:flash-remove\", {\n          detail: { isReplace }\n        }));\n      }\n    }\n    hideAll() {\n      this.clearQueue();\n      this.displayedMessage = null;\n      document.querySelectorAll(\".jax-flash-message, [data-control=flash-message]\").forEach((el) => {\n        el.remove();\n      });\n    }\n    createFlashElement(message, type) {\n      const element = document.createElement(\"div\");\n      const loadingHtml = type === \"loading\" ? '<span class=\"flash-loader\"></span>' : \"\";\n      const closeHtml = '<a class=\"flash-close\"></a>';\n      element.className = \"jax-flash-message \" + type;\n      element.innerHTML = loadingHtml + '<span class=\"flash-message\">' + message + \"</span>\" + closeHtml;\n      return element;\n    }\n    // Private\n    installStylesheetElement() {\n      if (!_FlashMessage.stylesheetReady) {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n        _FlashMessage.stylesheetReady = true;\n      }\n    }\n    createStylesheetElement() {\n      const element = document.createElement(\"style\");\n      element.textContent = _FlashMessage.defaultCSS;\n      return element;\n    }\n    createMessagesElement() {\n      const found = document.querySelector(\".jax-flash-messages\");\n      if (found) {\n        return found;\n      }\n      const element = document.createElement(\"div\");\n      element.className = \"jax-flash-messages\";\n      document.body.appendChild(element);\n      return element;\n    }\n  };\n  function getOrCreateInstance2() {\n    if (!FlashMessage.instance) {\n      FlashMessage.instance = new FlashMessage();\n    }\n    return FlashMessage.instance;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/extras/controller.js\n  var Controller2 = class {\n    constructor() {\n      this.started = false;\n      this.enableProgressBar = function(event) {\n        const { options } = event.detail.context;\n        if (options.progressBar === null) {\n          options.progressBar = true;\n        }\n      };\n      this.showAttachLoader = (event) => {\n        this.attachLoader.showForm(event.target);\n      };\n      this.hideAttachLoader = (event) => {\n        this.attachLoader.hideForm(event.target);\n      };\n      this.hideAllAttachLoaders = (event) => {\n        this.attachLoader.hideAll();\n      };\n      this.validatorSubmit = (event) => {\n        this.validator.submit(event.target);\n      };\n      this.validatorValidate = (event) => {\n        this.validator.validate(\n          event.target,\n          event.detail.fields,\n          event.detail.message,\n          shouldShowFlashMessage(event.detail.context.options.flash, \"validate\")\n        );\n      };\n      this.flashMessageBind = (event) => {\n        const { options } = event.detail.context;\n        const requestContext = event.detail.context;\n        if (options.flash) {\n          options.handleErrorMessage = (message, severity) => {\n            if (severity === \"fatal\") {\n              return requestContext.handleErrorMessage(message, severity);\n            }\n            if (message && (shouldShowFlashMessage(options.flash, \"error\") || shouldShowFlashMessage(options.flash, \"validate\"))) {\n              this.flashMessage.show({ message, type: \"error\" });\n            }\n          };\n          options.handleFlashMessage = (message, type) => {\n            if (message && shouldShowFlashMessage(options.flash, type)) {\n              this.flashMessage.show({ message, type });\n            }\n          };\n        }\n        var context = event.detail;\n        options.handleProgressMessage = (message, isDone) => {\n          if (!isDone) {\n            context.progressMessageId = this.flashMessage.show({ message, type: \"loading\", interval: 10 });\n          } else {\n            this.flashMessage.show(context.progressMessageId ? { replace: context.progressMessageId } : { hideAll: true });\n            context = null;\n          }\n        };\n      };\n      this.flashMessageRender = (event) => {\n        this.flashMessage.render();\n      };\n      this.hideAllFlashMessages = (event) => {\n        this.flashMessage.hideAll();\n      };\n      this.handleBrowserRedirect = function(event) {\n        if (event.defaultPrevented) {\n          return;\n        }\n        const href = getReferrerUrl();\n        if (!href) {\n          return;\n        }\n        event.preventDefault();\n        if (isTurboEnabled()) {\n          turboVisit(href);\n        } else {\n          location.assign(href);\n        }\n      };\n    }\n    start() {\n      if (!this.started) {\n        addEventListener(\"ajax:setup\", this.enableProgressBar);\n        this.attachLoader = new AttachLoader();\n        Events.on(document, \"ajax:promise\", \"form, [data-attach-loading]\", this.showAttachLoader);\n        Events.on(document, \"ajax:fail\", \"form, [data-attach-loading]\", this.hideAttachLoader);\n        Events.on(document, \"ajax:done\", \"form, [data-attach-loading]\", this.hideAttachLoader);\n        this.validator = new Validator();\n        Events.on(document, \"ajax:before-validate\", \"[data-request-validate]\", this.validatorValidate);\n        Events.on(document, \"ajax:promise\", \"[data-request-validate]\", this.validatorSubmit);\n        this.flashMessage = FlashMessage.instance ?? (FlashMessage.instance = new FlashMessage());\n        addEventListener(\"render\", this.flashMessageRender);\n        addEventListener(\"ajax:setup\", this.flashMessageBind);\n        Events.on(document, \"click\", \"[data-browser-redirect-back]\", this.handleBrowserRedirect);\n        this.started = true;\n      }\n    }\n    stop() {\n      if (this.started) {\n        removeEventListener(\"ajax:setup\", this.enableProgressBar);\n        this.attachLoader = null;\n        Events.off(document, \"ajax:promise\", \"form, [data-attach-loading]\", this.showAttachLoader);\n        Events.off(document, \"ajax:fail\", \"form, [data-attach-loading]\", this.hideAttachLoader);\n        Events.off(document, \"ajax:done\", \"form, [data-attach-loading]\", this.hideAttachLoader);\n        this.validator = null;\n        Events.off(document, \"ajax:before-validate\", \"[data-request-validate]\", this.validatorValidate);\n        Events.off(document, \"ajax:promise\", \"[data-request-validate]\", this.validatorSubmit);\n        this.flashMessage = null;\n        removeEventListener(\"render\", this.flashMessageRender);\n        removeEventListener(\"ajax:setup\", this.flashMessageBind);\n        Events.off(document, \"click\", \"[data-browser-redirect-back]\", this.handleBrowserRedirect);\n        this.started = false;\n      }\n    }\n  };\n  function shouldShowFlashMessage(value, type) {\n    if (value === true) {\n      return true;\n    }\n    if (typeof value !== \"string\") {\n      return false;\n    }\n    const parts = value.split(\",\").map((p) => p.trim());\n    const hasNegation = parts.some((p) => p.startsWith(\"-\"));\n    const explicitExclude = parts.includes(\"-\" + type);\n    const explicitInclude = parts.includes(type);\n    if (hasNegation) {\n      return !explicitExclude;\n    }\n    return explicitInclude;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/extras/namespace.js\n  var controller2 = new Controller2();\n  var namespace_default3 = {\n    controller: controller2,\n    flashMsg: FlashMessage.flashMsg,\n    progressBar: ProgressBar.progressBar,\n    attachLoader: AttachLoader.attachLoader,\n    start() {\n      controller2.start();\n    },\n    stop() {\n      controller2.stop();\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/event-listener.js\n  var EventListener = class {\n    constructor(eventTarget, eventName, eventOptions) {\n      this.eventTarget = eventTarget;\n      this.eventName = eventName;\n      this.eventOptions = eventOptions;\n      this.unorderedBindings = /* @__PURE__ */ new Set();\n    }\n    connect() {\n      this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n      this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    // Binding observer delegate\n    bindingConnected(binding) {\n      this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n      this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n      const extendedEvent = extendEvent(event);\n      for (const binding of this.bindings) {\n        if (extendedEvent.immediatePropagationStopped) {\n          break;\n        } else {\n          binding.handleEvent(extendedEvent);\n        }\n      }\n    }\n    hasBindings() {\n      return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n      return Array.from(this.unorderedBindings).sort((left, right) => {\n        const leftIndex = left.index, rightIndex = right.index;\n        return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n      });\n    }\n  };\n  function extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n      return event;\n    } else {\n      const { stopImmediatePropagation } = event;\n      return Object.assign(event, {\n        immediatePropagationStopped: false,\n        stopImmediatePropagation() {\n          this.immediatePropagationStopped = true;\n          stopImmediatePropagation.call(this);\n        }\n      });\n    }\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/observe/dispatcher.js\n  var Dispatcher = class {\n    constructor(application2) {\n      this.application = application2;\n      this.eventListenerMaps = /* @__PURE__ */ new Map();\n      this.started = false;\n    }\n    start() {\n      if (!this.started) {\n        this.started = true;\n        this.eventListeners.forEach((eventListener) => eventListener.connect());\n      }\n    }\n    stop() {\n      if (this.started) {\n        this.started = false;\n        this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n      }\n    }\n    get eventListeners() {\n      return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    // Binding observer delegate\n    bindingConnected(binding) {\n      this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n      this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n      if (clearEventListeners)\n        this.clearEventListenersForBinding(binding);\n    }\n    // Error handling\n    handleError(error, message, detail = {}) {\n      this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n      const eventListener = this.fetchEventListenerForBinding(binding);\n      if (!eventListener.hasBindings()) {\n        eventListener.disconnect();\n        this.removeMappedEventListenerFor(binding);\n      }\n    }\n    removeMappedEventListenerFor(binding) {\n      const { eventTarget, eventName, eventOptions } = binding;\n      const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n      const cacheKey = this.cacheKey(eventName, eventOptions);\n      eventListenerMap.delete(cacheKey);\n      if (eventListenerMap.size == 0) {\n        this.eventListenerMaps.delete(eventTarget);\n      }\n    }\n    fetchEventListenerForBinding(binding) {\n      const { eventTarget, eventName, eventOptions } = binding;\n      return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n      const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n      const cacheKey = this.cacheKey(eventName, eventOptions);\n      let eventListener = eventListenerMap.get(cacheKey);\n      if (!eventListener) {\n        eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n        eventListenerMap.set(cacheKey, eventListener);\n      }\n      return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n      const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n      if (this.started) {\n        eventListener.connect();\n      }\n      return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n      let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n      if (!eventListenerMap) {\n        eventListenerMap = /* @__PURE__ */ new Map();\n        this.eventListenerMaps.set(eventTarget, eventListenerMap);\n      }\n      return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n      const parts = [eventName];\n      Object.keys(eventOptions).sort().forEach((key) => {\n        parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n      });\n      return parts.join(\":\");\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/context.js\n  var Context = class {\n    constructor(module, scope) {\n      this.module = module;\n      this.scope = scope;\n      this.control = new module.controlConstructor(this);\n      try {\n        this.control.initBefore();\n        this.control.init();\n        this.control.initAfter();\n      } catch (error) {\n        this.handleError(error, \"initializing control\");\n      }\n    }\n    connect() {\n      try {\n        this.control.connectBefore();\n        this.control.connect();\n        this.control.connectAfter();\n      } catch (error) {\n        this.handleError(error, \"connecting control\");\n      }\n    }\n    refresh() {\n    }\n    disconnect() {\n      try {\n        this.control.disconnectBefore();\n        this.control.disconnect();\n        this.control.disconnectAfter();\n      } catch (error) {\n        this.handleError(error, \"disconnecting control\");\n      }\n    }\n    get application() {\n      return this.module.application;\n    }\n    get identifier() {\n      return this.module.identifier;\n    }\n    get dispatcher() {\n      return this.application.dispatcher;\n    }\n    get element() {\n      return this.scope.element;\n    }\n    get parentElement() {\n      return this.element.parentElement;\n    }\n    // Error handling\n    handleError(error, message, detail = {}) {\n      const { identifier, control, element } = this;\n      detail = Object.assign({ identifier, control, element }, detail);\n      this.application.handleError(error, `Error ${message}`, detail);\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/module.js\n  var Module = class {\n    constructor(application2, definition) {\n      this.application = application2;\n      this.definition = blessDefinition(definition);\n      this.contextsByScope = /* @__PURE__ */ new WeakMap();\n      this.connectedContexts = /* @__PURE__ */ new Set();\n    }\n    get identifier() {\n      return this.definition.identifier;\n    }\n    get controlConstructor() {\n      return this.definition.controlConstructor;\n    }\n    get contexts() {\n      return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n      const context = this.fetchContextForScope(scope);\n      this.connectedContexts.add(context);\n      context.connect();\n    }\n    disconnectContextForScope(scope) {\n      const context = this.contextsByScope.get(scope);\n      if (context) {\n        this.connectedContexts.delete(context);\n        context.disconnect();\n      }\n    }\n    fetchContextForScope(scope) {\n      let context = this.contextsByScope.get(scope);\n      if (!context) {\n        context = new Context(this, scope);\n        this.contextsByScope.set(scope, context);\n      }\n      return context;\n    }\n  };\n  function blessDefinition(definition) {\n    return {\n      identifier: definition.identifier,\n      controlConstructor: definition.controlConstructor\n    };\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/observe/scope.js\n  var Scope = class _Scope {\n    constructor(element, identifier) {\n      this.element = element;\n      this.identifier = identifier;\n      this.containsElement = (element2) => {\n        return element2.closest(this.controlSelector) === this.element;\n      };\n    }\n    findElement(selector) {\n      return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n      return [\n        ...this.element.matches(selector) ? [this.element] : [],\n        ...this.queryElements(selector).filter(this.containsElement)\n      ];\n    }\n    queryElements(selector) {\n      return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controlSelector() {\n      return attributeValueContainsToken(\"data-control\", this.identifier);\n    }\n    get isDocumentScope() {\n      return this.element === document.documentElement;\n    }\n    get documentScope() {\n      return this.isDocumentScope ? this : new _Scope(document.documentElement, this.identifier);\n    }\n  };\n  function attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/observe/mutation/element-observer.js\n  var ElementObserver = class {\n    constructor(element, delegate) {\n      this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n      this.element = element;\n      this.started = false;\n      this.delegate = delegate;\n      this.elements = /* @__PURE__ */ new Set();\n      this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n      if (!this.started) {\n        this.started = true;\n        this.mutationObserver.observe(this.element, this.mutationObserverInit);\n        this.refresh();\n      }\n    }\n    pause(callback) {\n      if (this.started) {\n        this.mutationObserver.disconnect();\n        this.started = false;\n      }\n      callback();\n      if (!this.started) {\n        this.mutationObserver.observe(this.element, this.mutationObserverInit);\n        this.started = true;\n      }\n    }\n    stop() {\n      if (this.started) {\n        this.mutationObserver.takeRecords();\n        this.mutationObserver.disconnect();\n        this.started = false;\n      }\n    }\n    refresh() {\n      if (this.started) {\n        const matches = new Set(this.matchElementsInTree());\n        for (const element of Array.from(this.elements)) {\n          if (!matches.has(element)) {\n            this.removeElement(element);\n          }\n        }\n        for (const element of Array.from(matches)) {\n          this.addElement(element);\n        }\n      }\n    }\n    // Mutation record processing\n    processMutations(mutations) {\n      if (this.started) {\n        for (const mutation of mutations) {\n          this.processMutation(mutation);\n        }\n      }\n    }\n    processMutation(mutation) {\n      if (mutation.type == \"attributes\") {\n        this.processAttributeChange(mutation.target, mutation.attributeName);\n      } else if (mutation.type == \"childList\") {\n        this.processRemovedNodes(mutation.removedNodes);\n        this.processAddedNodes(mutation.addedNodes);\n      }\n    }\n    processAttributeChange(element, attributeName) {\n      if (this.elements.has(element)) {\n        if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n          this.delegate.elementAttributeChanged(element, attributeName);\n        } else {\n          this.removeElement(element);\n        }\n      } else if (this.matchElement(element)) {\n        this.addElement(element);\n      }\n    }\n    processRemovedNodes(nodes) {\n      for (const node of Array.from(nodes)) {\n        const element = this.elementFromNode(node);\n        if (element) {\n          this.processTree(element, this.removeElement);\n        }\n      }\n    }\n    processAddedNodes(nodes) {\n      for (const node of Array.from(nodes)) {\n        const element = this.elementFromNode(node);\n        if (element && this.elementIsActive(element)) {\n          this.processTree(element, this.addElement);\n        }\n      }\n    }\n    // Element matching\n    matchElement(element) {\n      return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n      return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n      for (const element of this.matchElementsInTree(tree)) {\n        processor.call(this, element);\n      }\n    }\n    elementFromNode(node) {\n      if (node.nodeType == Node.ELEMENT_NODE) {\n        return node;\n      }\n    }\n    elementIsActive(element) {\n      if (element.isConnected != this.element.isConnected) {\n        return false;\n      } else {\n        return this.element.contains(element);\n      }\n    }\n    // Element tracking\n    addElement(element) {\n      if (!this.elements.has(element)) {\n        if (this.elementIsActive(element)) {\n          this.elements.add(element);\n          if (this.delegate.elementMatched) {\n            this.delegate.elementMatched(element);\n          }\n        }\n      }\n    }\n    removeElement(element) {\n      if (this.elements.has(element)) {\n        this.elements.delete(element);\n        if (this.delegate.elementUnmatched) {\n          this.delegate.elementUnmatched(element);\n        }\n      }\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/mutation/attribute-observer.js\n  var AttributeObserver = class {\n    constructor(element, attributeName, delegate) {\n      this.delegate = delegate;\n      this.attributeName = attributeName;\n      this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n      return this.elementObserver.element;\n    }\n    get selector() {\n      return `[${this.attributeName}]`;\n    }\n    start() {\n      this.elementObserver.start();\n    }\n    pause(callback) {\n      this.elementObserver.pause(callback);\n    }\n    stop() {\n      this.elementObserver.stop();\n    }\n    refresh() {\n      this.elementObserver.refresh();\n    }\n    get started() {\n      return this.elementObserver.started;\n    }\n    // Element observer delegate\n    matchElement(element) {\n      return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n      const match = this.matchElement(tree) ? [tree] : [];\n      const matches = Array.from(tree.querySelectorAll(this.selector));\n      return match.concat(matches);\n    }\n    elementMatched(element) {\n      if (this.delegate.elementMatchedAttribute) {\n        this.delegate.elementMatchedAttribute(element, this.attributeName);\n      }\n    }\n    elementUnmatched(element) {\n      if (this.delegate.elementUnmatchedAttribute) {\n        this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n      }\n    }\n    elementAttributeChanged(element, attributeName) {\n      if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n        this.delegate.elementAttributeValueChanged(element, attributeName);\n      }\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/util/set-operations.js\n  function add(map, key, value) {\n    fetch2(map, key).add(value);\n  }\n  function del(map, key, value) {\n    fetch2(map, key).delete(value);\n    prune(map, key);\n  }\n  function fetch2(map, key) {\n    let values = map.get(key);\n    if (!values) {\n      values = /* @__PURE__ */ new Set();\n      map.set(key, values);\n    }\n    return values;\n  }\n  function prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n      map.delete(key);\n    }\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/observe/util/multimap.js\n  var Multimap = class {\n    constructor() {\n      this.valuesByKey = /* @__PURE__ */ new Map();\n    }\n    get keys() {\n      return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n      const sets = Array.from(this.valuesByKey.values());\n      return sets.reduce((values, set) => values.concat(Array.from(set)), React.createElement(V, null), [] > []);\n    }\n    get size() {\n      const sets = Array.from(this.valuesByKey.values());\n      return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n      add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n      del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n      const values = this.valuesByKey.get(key);\n      return values != null && values.has(value);\n    }\n    hasKey(key) {\n      return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n      const sets = Array.from(this.valuesByKey.values());\n      return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n      const values = this.valuesByKey.get(key);\n      return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n      return Array.from(this.valuesByKey).filter(([_key, values]) => values.has(value)).map(([key, _values]) => key);\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/mutation/token-list-observer.js\n  var TokenListObserver = class {\n    constructor(element, attributeName, delegate) {\n      this.delegate = delegate;\n      this.attributeObserver = new AttributeObserver(element, attributeName, this);\n      this.tokensByElement = new Multimap();\n    }\n    get started() {\n      return this.attributeObserver.started;\n    }\n    start() {\n      this.attributeObserver.start();\n    }\n    pause(callback) {\n      this.attributeObserver.pause(callback);\n    }\n    stop() {\n      this.attributeObserver.stop();\n    }\n    refresh() {\n      this.attributeObserver.refresh();\n    }\n    get element() {\n      return this.attributeObserver.element;\n    }\n    get attributeName() {\n      return this.attributeObserver.attributeName;\n    }\n    // Attribute observer delegate\n    elementMatchedAttribute(element) {\n      this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n      const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n      this.tokensUnmatched(unmatchedTokens);\n      this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n      this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n      tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n      tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n      this.delegate.tokenMatched(token);\n      this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n      this.delegate.tokenUnmatched(token);\n      this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n      const previousTokens = this.tokensByElement.getValuesForKey(element);\n      const currentTokens = this.readTokensForElement(element);\n      const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n      if (firstDifferingIndex == -1) {\n        return [[], []];\n      } else {\n        return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n      }\n    }\n    readTokensForElement(element) {\n      const attributeName = this.attributeName;\n      const tokenString = element.getAttribute(attributeName) || \"\";\n      return parseTokenString(tokenString, element, attributeName);\n    }\n  };\n  function parseTokenString(tokenString, element, attributeName) {\n    return tokenString.trim().split(/\\s+/).filter((content) => content.length).map((content, index) => ({ element, attributeName, content, index }));\n  }\n  function zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n  }\n  function tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/observe/mutation/value-list-observer.js\n  var ValueListObserver = class {\n    constructor(element, attributeName, delegate) {\n      this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n      this.delegate = delegate;\n      this.parseResultsByToken = /* @__PURE__ */ new WeakMap();\n      this.valuesByTokenByElement = /* @__PURE__ */ new WeakMap();\n    }\n    get started() {\n      return this.tokenListObserver.started;\n    }\n    start() {\n      this.tokenListObserver.start();\n    }\n    stop() {\n      this.tokenListObserver.stop();\n    }\n    refresh() {\n      this.tokenListObserver.refresh();\n    }\n    get element() {\n      return this.tokenListObserver.element;\n    }\n    get attributeName() {\n      return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n      const { element } = token;\n      const { value } = this.fetchParseResultForToken(token);\n      if (value) {\n        this.fetchValuesByTokenForElement(element).set(token, value);\n        this.delegate.elementMatchedValue(element, value);\n      }\n    }\n    tokenUnmatched(token) {\n      const { element } = token;\n      const { value } = this.fetchParseResultForToken(token);\n      if (value) {\n        this.fetchValuesByTokenForElement(element).delete(token);\n        this.delegate.elementUnmatchedValue(element, value);\n      }\n    }\n    fetchParseResultForToken(token) {\n      let parseResult = this.parseResultsByToken.get(token);\n      if (!parseResult) {\n        parseResult = this.parseToken(token);\n        this.parseResultsByToken.set(token, parseResult);\n      }\n      return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n      let valuesByToken = this.valuesByTokenByElement.get(element);\n      if (!valuesByToken) {\n        valuesByToken = /* @__PURE__ */ new Map();\n        this.valuesByTokenByElement.set(element, valuesByToken);\n      }\n      return valuesByToken;\n    }\n    parseToken(token) {\n      try {\n        const value = this.delegate.parseValueForToken(token);\n        return { value };\n      } catch (error) {\n        return { error };\n      }\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/scope-observer.js\n  var ScopeObserver = class {\n    constructor(element, delegate) {\n      this.element = element;\n      this.delegate = delegate;\n      this.valueListObserver = new ValueListObserver(this.element, this.controlAttribute, this);\n      this.scopesByIdentifierByElement = /* @__PURE__ */ new WeakMap();\n      this.scopeReferenceCounts = /* @__PURE__ */ new WeakMap();\n    }\n    start() {\n      this.valueListObserver.start();\n    }\n    stop() {\n      this.valueListObserver.stop();\n    }\n    get controlAttribute() {\n      return \"data-control\";\n    }\n    // Value observer delegate\n    parseValueForToken(token) {\n      const { element, content: identifier } = token;\n      const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n      let scope = scopesByIdentifier.get(identifier);\n      if (!scope) {\n        scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n        scopesByIdentifier.set(identifier, scope);\n      }\n      return scope;\n    }\n    elementMatchedValue(element, value) {\n      const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n      this.scopeReferenceCounts.set(value, referenceCount);\n      if (referenceCount == 1) {\n        this.delegate.scopeConnected(value);\n      }\n    }\n    elementUnmatchedValue(element, value) {\n      const referenceCount = this.scopeReferenceCounts.get(value);\n      if (referenceCount) {\n        this.scopeReferenceCounts.set(value, referenceCount - 1);\n        if (referenceCount == 1) {\n          this.delegate.scopeDisconnected(value);\n        }\n      }\n    }\n    fetchScopesByIdentifierForElement(element) {\n      let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n      if (!scopesByIdentifier) {\n        scopesByIdentifier = /* @__PURE__ */ new Map();\n        this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n      }\n      return scopesByIdentifier;\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/container.js\n  var Container = class {\n    constructor(application2) {\n      this.application = application2;\n      this.scopeObserver = new ScopeObserver(this.element, this);\n      this.scopesByIdentifier = new Multimap();\n      this.modulesByIdentifier = /* @__PURE__ */ new Map();\n    }\n    get element() {\n      return this.application.element;\n    }\n    get modules() {\n      return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n      return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n      this.scopeObserver.start();\n    }\n    stop() {\n      this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n      this.unloadIdentifier(definition.identifier);\n      const module = new Module(this.application, definition);\n      this.connectModule(module);\n      const afterLoad = definition.controlConstructor.afterLoad;\n      if (afterLoad) {\n        afterLoad.call(definition.controlConstructor, definition.identifier, this.application);\n      }\n    }\n    unloadIdentifier(identifier) {\n      const module = this.modulesByIdentifier.get(identifier);\n      if (module) {\n        this.disconnectModule(module);\n      }\n    }\n    getModuleForIdentifier(identifier) {\n      return this.modulesByIdentifier.get(identifier);\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n      const module = this.modulesByIdentifier.get(identifier);\n      if (module) {\n        return module.contexts.find((context) => context.element == element);\n      }\n    }\n    // Error handler delegate\n    handleError(error, message, detail) {\n      this.application.handleError(error, message, detail);\n    }\n    // Scope observer delegate\n    createScopeForElementAndIdentifier(element, identifier) {\n      return new Scope(element, identifier);\n    }\n    scopeConnected(scope) {\n      this.scopesByIdentifier.add(scope.identifier, scope);\n      const module = this.modulesByIdentifier.get(scope.identifier);\n      if (module) {\n        module.connectContextForScope(scope);\n      }\n    }\n    scopeDisconnected(scope) {\n      this.scopesByIdentifier.delete(scope.identifier, scope);\n      const module = this.modulesByIdentifier.get(scope.identifier);\n      if (module) {\n        module.disconnectContextForScope(scope);\n      }\n    }\n    // Modules\n    connectModule(module) {\n      this.modulesByIdentifier.set(module.identifier, module);\n      const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n      scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n      this.modulesByIdentifier.delete(module.identifier);\n      const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n      scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/application.js\n  var Application = class {\n    constructor() {\n      this.started = false;\n      this.element = document.documentElement;\n      this.dispatcher = new Dispatcher(this);\n      this.container = new Container(this);\n    }\n    startAsync() {\n      domReady().then(() => {\n        this.start();\n      });\n    }\n    start() {\n      if (!this.started) {\n        this.started = true;\n        this.dispatcher.start();\n        this.container.start();\n      }\n    }\n    stop() {\n      if (this.started) {\n        this.dispatcher.stop();\n        this.container.stop();\n        this.started = false;\n      }\n    }\n    register(identifier, controlConstructor) {\n      this.load({ identifier, controlConstructor });\n    }\n    observe(element, identifier) {\n      const observer = this.container.scopeObserver;\n      observer.elementMatchedValue(element, observer.parseValueForToken({\n        element,\n        content: identifier\n      }));\n      const foundControl = this.getControlForElementAndIdentifier(element, identifier);\n      if (!element.matches(`[data-control~=\"${identifier}\"]`)) {\n        element.dataset.control = ((element.dataset.control || \"\") + \" \" + identifier).trim();\n      }\n      return foundControl;\n    }\n    import(identifier) {\n      const module = this.container.getModuleForIdentifier(identifier);\n      if (!module) {\n        throw new Error(`Control is not registered [${identifier}]`);\n      }\n      return module.controlConstructor;\n    }\n    fetch(element, identifier) {\n      if (typeof element === \"string\") {\n        element = document.querySelector(element);\n      }\n      if (!identifier) {\n        identifier = element.dataset.control;\n      }\n      return element ? this.getControlForElementAndIdentifier(element, identifier) : null;\n    }\n    fetchAll(elements, identifier) {\n      if (typeof elements === \"string\") {\n        elements = document.querySelectorAll(elements);\n      }\n      const result = [];\n      elements.forEach((element) => {\n        const control = this.fetch(element, identifier);\n        if (control) {\n          result.push(control);\n        }\n      });\n      return result;\n    }\n    load(head, ...rest) {\n      const definitions = Array.isArray(head) ? head : [head, ...rest];\n      definitions.forEach((definition) => {\n        if (definition.controlConstructor.shouldLoad) {\n          this.container.loadDefinition(definition);\n        }\n      });\n    }\n    unload(head, ...rest) {\n      const identifiers = Array.isArray(head) ? head : [head, ...rest];\n      identifiers.forEach((identifier) => this.container.unloadIdentifier(identifier));\n    }\n    // Controls\n    get controls() {\n      return this.container.contexts.map((context) => context.control);\n    }\n    getControlForElementAndIdentifier(element, identifier) {\n      const context = this.container.getContextForElementAndIdentifier(element, identifier);\n      return context ? context.control : null;\n    }\n    // Error handling\n    handleError(error, message, detail) {\n      var _a;\n      console.error(`%s\n\n%o\n\n%o`, message, error, detail);\n      (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/namespace.js\n  var application = new Application();\n  var namespace_default4 = {\n    application,\n    registerControl(id, control) {\n      return application.register(id, control);\n    },\n    importControl(id) {\n      return application.import(id);\n    },\n    observeControl(element, id) {\n      return application.observe(element, id);\n    },\n    fetchControl(element, identifier) {\n      return application.fetch(element, identifier);\n    },\n    fetchControls(elements, identifier) {\n      return application.fetchAll(elements, identifier);\n    },\n    start() {\n      application.startAsync();\n    },\n    stop() {\n      application.stop();\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/browser-adapter.js\n  var BrowserAdapter = class {\n    constructor(controller4) {\n      this.progressBar = new ProgressBar();\n      this.showProgressBar = () => {\n        this.progressBar.show({ cssClass: \"is-turbo\" });\n      };\n      this.controller = controller4;\n    }\n    visitProposedToLocationWithAction(location2, action) {\n      const restorationIdentifier = uuid();\n      this.controller.startVisitToLocationWithAction(location2, action, restorationIdentifier);\n    }\n    visitStarted(visit) {\n      visit.issueRequest();\n      visit.changeHistory();\n      visit.goToSamePageAnchor();\n    }\n    visitRequestStarted(visit) {\n      this.progressBar.setValue(0);\n      this.showProgressBarAfterDelay();\n    }\n    visitRequestProgressed(visit) {\n      this.progressBar.setValue(visit.progress);\n    }\n    visitRequestCompleted(visit) {\n      visit.loadResponse();\n    }\n    visitRequestFailedWithStatusCode(visit, statusCode) {\n      switch (statusCode) {\n        case SystemStatusCode.networkFailure:\n        case SystemStatusCode.timeoutFailure:\n        case SystemStatusCode.contentTypeMismatch:\n        case SystemStatusCode.userAborted:\n          return this.reload();\n        default:\n          return visit.loadResponse();\n      }\n    }\n    visitRequestFinished(visit) {\n      this.hideProgressBar();\n    }\n    visitCompleted(visit) {\n      visit.followRedirect();\n    }\n    pageInvalidated() {\n      this.reload();\n    }\n    visitFailed(visit) {\n    }\n    visitRendered(visit) {\n    }\n    // Private\n    showProgressBarAfterDelay() {\n      if (this.controller.progressBarVisible) {\n        this.progressBarTimeout = window.setTimeout(this.showProgressBar, this.controller.progressBarDelay);\n      }\n    }\n    hideProgressBar() {\n      if (this.controller.progressBarVisible) {\n        this.progressBar.hide();\n        if (this.progressBarTimeout !== null) {\n          window.clearTimeout(this.progressBarTimeout);\n          delete this.progressBarTimeout;\n        }\n      }\n    }\n    reload() {\n      window.location.reload();\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/location.js\n  var Location = class _Location {\n    constructor(url) {\n      const linkWithAnchor = document.createElement(\"a\");\n      linkWithAnchor.href = url;\n      this.absoluteURL = linkWithAnchor.href;\n      const anchorLength = linkWithAnchor.hash.length;\n      if (anchorLength < 2) {\n        this.requestURL = this.absoluteURL;\n      } else {\n        this.requestURL = this.absoluteURL.slice(0, -anchorLength);\n        this.anchor = linkWithAnchor.hash.slice(1);\n      }\n    }\n    static get currentLocation() {\n      return this.wrap(window.location.toString());\n    }\n    static wrap(locatable) {\n      if (typeof locatable == \"string\") {\n        return new _Location(locatable);\n      } else if (locatable != null) {\n        return locatable;\n      }\n    }\n    getOrigin() {\n      return this.absoluteURL.split(\"/\", 3).join(\"/\");\n    }\n    getPath() {\n      return (this.requestURL.match(/\\/\\/[^/]*(\\/[^?;]*)/) || [])[1] || \"/\";\n    }\n    getPathComponents() {\n      return this.getPath().split(\"/\").slice(1);\n    }\n    getLastPathComponent() {\n      return this.getPathComponents().slice(-1)[0];\n    }\n    getExtension() {\n      return (this.getLastPathComponent().match(/\\.[^.]*$/) || [])[0] || \"\";\n    }\n    isHTML() {\n      return this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/);\n    }\n    isPrefixedBy(location2) {\n      const prefixURL = getPrefixURL(location2);\n      return this.isEqualTo(location2) || stringStartsWith(this.absoluteURL, prefixURL);\n    }\n    isEqualTo(location2) {\n      return location2 && this.absoluteURL === location2.absoluteURL;\n    }\n    toJSON() {\n      return this.absoluteURL;\n    }\n    toString() {\n      return this.absoluteURL;\n    }\n    valueOf() {\n      return this.absoluteURL;\n    }\n  };\n  function getPrefixURL(location2) {\n    return addTrailingSlash(location2.getOrigin() + location2.getPath());\n  }\n  function addTrailingSlash(url) {\n    return stringEndsWith(url, \"/\") ? url : url + \"/\";\n  }\n  function stringStartsWith(string, prefix) {\n    return string.slice(0, prefix.length) === prefix;\n  }\n  function stringEndsWith(string, suffix) {\n    return string.slice(-suffix.length) === suffix;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/history.js\n  var History = class {\n    constructor(delegate) {\n      this.started = false;\n      this.pageLoaded = false;\n      this.onPopState = (event) => {\n        if (!this.shouldHandlePopState()) {\n          return;\n        }\n        if (!event.state || !event.state.ajaxTurbo) {\n          return;\n        }\n        const { ajaxTurbo } = event.state;\n        const location2 = Location.currentLocation;\n        const { restorationIdentifier } = ajaxTurbo;\n        this.delegate.historyPoppedToLocationWithRestorationIdentifier(location2, restorationIdentifier);\n      };\n      this.onPageLoad = (event) => {\n        defer(() => {\n          this.pageLoaded = true;\n        });\n      };\n      this.delegate = delegate;\n    }\n    start() {\n      if (!this.started) {\n        addEventListener(\"popstate\", this.onPopState, false);\n        addEventListener(\"load\", this.onPageLoad, false);\n        this.started = true;\n      }\n    }\n    stop() {\n      if (this.started) {\n        removeEventListener(\"popstate\", this.onPopState, false);\n        removeEventListener(\"load\", this.onPageLoad, false);\n        this.started = false;\n      }\n    }\n    push(location2, restorationIdentifier) {\n      this.update(history.pushState, location2, restorationIdentifier);\n    }\n    replace(location2, restorationIdentifier) {\n      this.update(history.replaceState, location2, restorationIdentifier);\n    }\n    // Private\n    shouldHandlePopState() {\n      return this.pageIsLoaded();\n    }\n    pageIsLoaded() {\n      return this.pageLoaded || document.readyState == \"complete\";\n    }\n    update(method, location2, restorationIdentifier) {\n      const state = { ajaxTurbo: { restorationIdentifier } };\n      method.call(history, state, \"\", location2.absoluteURL);\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/scroll-manager.js\n  var ScrollManager = class {\n    constructor(delegate) {\n      this.started = false;\n      this.onScroll = () => {\n        this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n      };\n      this.delegate = delegate;\n    }\n    start() {\n      if (!this.started) {\n        addEventListener(\"scroll\", this.onScroll, false);\n        this.onScroll();\n        this.started = true;\n      }\n    }\n    stop() {\n      if (this.started) {\n        removeEventListener(\"scroll\", this.onScroll, false);\n        this.started = false;\n      }\n    }\n    scrollToElement(element) {\n      element.scrollIntoView();\n    }\n    scrollToPosition({ x, y }) {\n      window.scrollTo(x, y);\n    }\n    // Private\n    updatePosition(position) {\n      this.delegate.scrollPositionChanged(position);\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/renderer.js\n  var Renderer = class {\n    renderView(callback) {\n      const renderInterception = () => {\n        const completeRender = () => {\n          callback();\n          this.delegate.viewRendered(this.newBody);\n        };\n        if (this.willPerformViewTransition()) {\n          document.startViewTransition(() => completeRender());\n        } else {\n          completeRender();\n        }\n      };\n      const options = { resume: renderInterception };\n      const immediateRender = this.delegate.viewAllowsImmediateRender(this.newBody, options);\n      if (immediateRender) {\n        renderInterception();\n      }\n    }\n    willPerformViewTransition() {\n      return typeof document.startViewTransition === \"function\" && typeof this.delegate.viewTransitionEnabled === \"function\" && this.delegate.viewTransitionEnabled();\n    }\n    invalidateView() {\n      this.delegate.viewInvalidated();\n    }\n    createScriptElement(element) {\n      if (element.getAttribute(\"data-turbo-eval\") === \"false\" || this.delegate.applicationHasSeenInlineScript(element)) {\n        return element;\n      }\n      const createdScriptElement = document.createElement(\"script\");\n      createdScriptElement.textContent = element.textContent;\n      createdScriptElement.async = false;\n      copyElementAttributes(createdScriptElement, element);\n      return createdScriptElement;\n    }\n  };\n  function copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of array(sourceElement.attributes)) {\n      destinationElement.setAttribute(name, value);\n    }\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/error-renderer.js\n  var ErrorRenderer = class extends Renderer {\n    constructor(delegate, html) {\n      super();\n      this.delegate = delegate;\n      this.htmlElement = (() => {\n        const htmlElement = document.createElement(\"html\");\n        htmlElement.innerHTML = html;\n        return htmlElement;\n      })();\n      this.newHead = this.htmlElement.querySelector(\"head\") || document.createElement(\"head\");\n      this.newBody = this.htmlElement.querySelector(\"body\") || document.createElement(\"body\");\n    }\n    static render(delegate, callback, html) {\n      return new this(delegate, html).render(callback);\n    }\n    render(callback) {\n      this.renderView(() => {\n        this.replaceHeadAndBody();\n        this.activateBodyScriptElements();\n        callback();\n      });\n    }\n    replaceHeadAndBody() {\n      const { documentElement, head, body } = document;\n      documentElement.replaceChild(this.newHead, head);\n      documentElement.replaceChild(this.newBody, body);\n    }\n    activateBodyScriptElements() {\n      for (const replaceableElement of this.getScriptElements()) {\n        const parentNode = replaceableElement.parentNode;\n        if (parentNode) {\n          const element = this.createScriptElement(replaceableElement);\n          parentNode.replaceChild(element, replaceableElement);\n        }\n      }\n    }\n    getScriptElements() {\n      return array(document.documentElement.querySelectorAll(\"script\"));\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/head-details.js\n  var HeadDetails = class {\n    constructor(children) {\n      this.detailsByOuterHTML = children.reduce((result, element) => {\n        const { outerHTML } = element;\n        const details = outerHTML in result ? result[outerHTML] : {\n          type: elementType(element),\n          tracked: elementIsTracked(element),\n          elements: []\n        };\n        return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n      }, {});\n    }\n    static fromHeadElement(headElement) {\n      const children = headElement ? array(headElement.children) : [];\n      return new this(children);\n    }\n    getTrackedElementSignature() {\n      return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked).join(\"\");\n    }\n    getScriptElementsNotInDetails(headDetails) {\n      return this.getElementsMatchingTypeNotInDetails(\"script\", headDetails);\n    }\n    getStylesheetElementsNotInDetails(headDetails) {\n      return this.getElementsMatchingTypeNotInDetails(\"stylesheet\", headDetails);\n    }\n    getElementsMatchingTypeNotInDetails(matchedType, headDetails) {\n      return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => !(outerHTML in headDetails.detailsByOuterHTML)).map((outerHTML) => this.detailsByOuterHTML[outerHTML]).filter(({ type }) => type == matchedType).map(({ elements: [element] }) => element);\n    }\n    getProvisionalElements() {\n      return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n        const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n        if (type == null && !tracked) {\n          return [...result, ...elements];\n        } else if (elements.length > 1) {\n          return [...result, ...elements.slice(1)];\n        } else {\n          return result;\n        }\n      }, []);\n    }\n    getMetaValue(name) {\n      const element = this.findMetaElementByName(name);\n      return element ? element.getAttribute(\"content\") : null;\n    }\n    findMetaElementByName(name) {\n      return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n        const { elements: [element] } = this.detailsByOuterHTML[outerHTML];\n        return elementIsMetaElementWithName(element, name) ? element : result;\n      }, void 0);\n    }\n  };\n  function elementType(element) {\n    if (elementIsScript(element)) {\n      return \"script\";\n    } else if (elementIsStylesheet(element)) {\n      return \"stylesheet\";\n    }\n  }\n  function elementIsTracked(element) {\n    return element.getAttribute(\"data-turbo-track\") == \"reload\";\n  }\n  function elementIsScript(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"script\";\n  }\n  function elementIsStylesheet(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"style\" || tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\";\n  }\n  function elementIsMetaElementWithName(element, name) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/page.js\n  var Page = class {\n    constructor(headDetails, bodyElement) {\n      this.headDetails = headDetails;\n      this.bodyElement = bodyElement;\n    }\n    static fromHTMLString(html) {\n      const element = document.createElement(\"html\");\n      element.innerHTML = html;\n      return this.fromHTMLElement(element);\n    }\n    static fromHTMLElement(htmlElement) {\n      const headElement = htmlElement.querySelector(\"head\");\n      const bodyElement = htmlElement.querySelector(\"body\") || document.createElement(\"body\");\n      const headDetails = HeadDetails.fromHeadElement(headElement);\n      return new this(headDetails, bodyElement);\n    }\n    getRootLocation() {\n      const root = this.getSetting(\"root\", \"/\");\n      return new Location(root);\n    }\n    getElementForAnchor(anchor) {\n      try {\n        return this.bodyElement.querySelector(`[id='${anchor}'], a[name='${anchor}']`);\n      } catch (e) {\n        return null;\n      }\n    }\n    getPermanentElements() {\n      return array(this.bodyElement.querySelectorAll(\"[id][data-turbo-permanent]\"));\n    }\n    getPermanentElementById(id) {\n      return this.bodyElement.querySelector(`#${id}[data-turbo-permanent]`);\n    }\n    getPermanentElementsPresentInPage(page) {\n      return this.getPermanentElements().filter(({ id }) => page.getPermanentElementById(id));\n    }\n    findFirstAutofocusableElement() {\n      return this.bodyElement.querySelector(\"[autofocus]\");\n    }\n    isNativeError() {\n      return this.getSetting(\"visit-control\", false) != false;\n    }\n    isEnabled() {\n      return this.getSetting(\"visit-control\") != \"disable\";\n    }\n    isVisitable() {\n      return this.isEnabled() && this.getSetting(\"visit-control\") != \"reload\";\n    }\n    isViewTransitionEnabled() {\n      return this.getSetting(\"view-transition\") === \"same-origin\";\n    }\n    getSetting(name, defaultValue) {\n      const value = this.headDetails.getMetaValue(`turbo-${name}`);\n      return value == null ? defaultValue : value;\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/page-renderer.js\n  var PageRenderer = class extends Renderer {\n    constructor(delegate, currentPage, newPage) {\n      super();\n      this.delegate = delegate;\n      this.currentPage = currentPage;\n      this.currentHeadDetails = currentPage.headDetails;\n      this.newPage = newPage;\n      this.newHeadDetails = newPage.headDetails;\n      this.newBody = newPage.bodyElement;\n    }\n    static render(delegate, callback, currentPage, newPage) {\n      return new this(delegate, currentPage, newPage).render(callback);\n    }\n    render(callback) {\n      if (this.shouldRender()) {\n        this.delegate.pageIsReady = false;\n        this.countNewBodyModuleScripts();\n        this.mergeHead();\n        this.renderView(() => {\n          this.replaceBody();\n          this.focusFirstAutofocusableElement();\n          callback();\n        });\n      } else {\n        this.invalidateView();\n      }\n    }\n    mergeHead() {\n      this.copyNewHeadStylesheetElements();\n      this.copyNewHeadScriptElements();\n      this.removeCurrentHeadProvisionalElements();\n      this.copyNewHeadProvisionalElements();\n    }\n    replaceBody() {\n      const placeholders = this.relocateCurrentBodyPermanentElements();\n      this.activateNewBodyScriptElements();\n      this.assignNewBody();\n      this.replacePlaceholderElementsWithClonedPermanentElements(placeholders);\n    }\n    shouldRender() {\n      return this.currentPage.isEnabled() && this.newPage.isVisitable() && this.trackedElementsAreIdentical();\n    }\n    trackedElementsAreIdentical() {\n      return this.currentHeadDetails.getTrackedElementSignature() == this.newHeadDetails.getTrackedElementSignature();\n    }\n    copyNewHeadStylesheetElements() {\n      for (const element of this.getNewHeadStylesheetElements()) {\n        document.head.appendChild(element);\n      }\n    }\n    copyNewHeadScriptElements() {\n      for (const element of this.getNewHeadScriptElements()) {\n        document.head.appendChild(\n          this.bindPendingAssetLoadedEventOnce(\n            this.createScriptElement(element)\n          )\n        );\n      }\n    }\n    bindPendingAssetLoadedEventOnce(element) {\n      if (!element.hasAttribute(\"src\")) {\n        return element;\n      }\n      var self = this, loadEvent = function() {\n        self.delegate.decrementPendingAsset();\n        element.removeEventListener(\"load\", loadEvent);\n      };\n      element.addEventListener(\"load\", loadEvent);\n      this.delegate.incrementPendingAsset();\n      return element;\n    }\n    removeCurrentHeadProvisionalElements() {\n      for (const element of this.getCurrentHeadProvisionalElements()) {\n        document.head.removeChild(element);\n      }\n    }\n    copyNewHeadProvisionalElements() {\n      for (const element of this.getNewHeadProvisionalElements()) {\n        document.head.appendChild(element);\n      }\n    }\n    relocateCurrentBodyPermanentElements() {\n      return this.getCurrentBodyPermanentElements().reduce((placeholders, permanentElement) => {\n        const newElement = this.newPage.getPermanentElementById(permanentElement.id);\n        if (newElement) {\n          const placeholder = createPlaceholderForPermanentElement(permanentElement);\n          replaceElementWithElement(permanentElement, placeholder.element);\n          replaceElementWithElement(newElement, permanentElement);\n          return [...placeholders, placeholder];\n        } else {\n          return placeholders;\n        }\n      }, []);\n    }\n    replacePlaceholderElementsWithClonedPermanentElements(placeholders) {\n      for (const { element, permanentElement } of placeholders) {\n        const clonedElement = permanentElement.cloneNode(true);\n        replaceElementWithElement(element, clonedElement);\n      }\n    }\n    activateNewBodyScriptElements() {\n      for (const inertScriptElement of this.getNewBodyScriptElements()) {\n        const activatedScriptElement = this.createScriptElement(inertScriptElement);\n        if (activatedScriptElement.getAttribute(\"type\") === \"module\") {\n          activatedScriptElement.textContent += \"\\ndispatchEvent(new CustomEvent('turbo:module-loaded'));\";\n        }\n        replaceElementWithElement(inertScriptElement, activatedScriptElement);\n      }\n    }\n    countNewBodyModuleScripts() {\n      for (const element of this.getNewBodyScriptElements()) {\n        if (element.getAttribute(\"type\") === \"module\") {\n          this.delegate.incrementPendingAsset();\n        }\n      }\n    }\n    assignNewBody() {\n      replaceElementWithElement(document.body, this.newBody);\n    }\n    focusFirstAutofocusableElement() {\n      const element = this.newPage.findFirstAutofocusableElement();\n      if (elementIsFocusable(element)) {\n        element.focus();\n      }\n    }\n    getNewHeadStylesheetElements() {\n      return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails);\n    }\n    getNewHeadScriptElements() {\n      return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails);\n    }\n    getCurrentHeadProvisionalElements() {\n      return this.currentHeadDetails.getProvisionalElements();\n    }\n    getNewHeadProvisionalElements() {\n      return this.newHeadDetails.getProvisionalElements();\n    }\n    getCurrentBodyPermanentElements() {\n      return this.currentPage.getPermanentElementsPresentInPage(this.newPage);\n    }\n    getNewBodyScriptElements() {\n      return array(this.newBody.querySelectorAll(\"script\"));\n    }\n  };\n  function createPlaceholderForPermanentElement(permanentElement) {\n    const element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n    element.setAttribute(\"content\", permanentElement.id);\n    return { element, permanentElement };\n  }\n  function replaceElementWithElement(fromElement, toElement) {\n    const parentElement = fromElement.parentElement;\n    if (parentElement) {\n      return parentElement.replaceChild(toElement, fromElement);\n    }\n  }\n  function elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/view.js\n  var View = class {\n    constructor(delegate) {\n      this.htmlElement = document.documentElement;\n      this.delegate = delegate;\n    }\n    getRootLocation() {\n      return this.getPage().getRootLocation();\n    }\n    getElementForAnchor(anchor) {\n      return this.getPage().getElementForAnchor(anchor);\n    }\n    getPage() {\n      return Page.fromHTMLElement(this.htmlElement);\n    }\n    render({ page, error }, callback) {\n      if (page) {\n        this.renderPage(page, callback);\n      } else {\n        this.renderError(error, callback);\n      }\n    }\n    // Private\n    renderPage(page, callback) {\n      PageRenderer.render(this.delegate, callback, this.getPage(), page);\n    }\n    renderError(error, callback) {\n      ErrorRenderer.render(this.delegate, callback, error || \"\");\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/visit.js\n  var TimingMetric = {\n    visitStart: \"visitStart\",\n    requestStart: \"requestStart\",\n    requestEnd: \"requestEnd\",\n    visitEnd: \"visitEnd\"\n  };\n  var VisitState = {\n    initialized: \"initialized\",\n    started: \"started\",\n    canceled: \"canceled\",\n    failed: \"failed\",\n    completed: \"completed\"\n  };\n  var Visit = class {\n    constructor(controller4, location2, action, restorationIdentifier = uuid()) {\n      this.identifier = uuid();\n      this.timingMetrics = {};\n      this.followedRedirect = false;\n      this.historyChanged = false;\n      this.progress = 0;\n      this.scrolled = false;\n      this.state = VisitState.initialized;\n      this.performScroll = () => {\n        if (!this.scrolled) {\n          if (this.action == \"restore\") {\n            this.scrollToRestoredPosition() || this.scrollToTop();\n          } else {\n            this.scrollToAnchor() || this.scrollToTop();\n          }\n          this.scrolled = true;\n        }\n      };\n      this.controller = controller4;\n      this.location = location2;\n      this.action = action;\n      this.adapter = controller4.adapter;\n      this.restorationIdentifier = restorationIdentifier;\n      this.isSamePage = this.locationChangeIsSamePage();\n    }\n    start() {\n      if (this.state == VisitState.initialized) {\n        this.recordTimingMetric(TimingMetric.visitStart);\n        this.state = VisitState.started;\n        this.adapter.visitStarted(this);\n      }\n    }\n    cancel() {\n      if (this.state == VisitState.started) {\n        if (this.request) {\n          this.request.abort();\n        }\n        this.cancelRender();\n        this.state = VisitState.canceled;\n      }\n    }\n    complete() {\n      if (this.state == VisitState.started) {\n        this.recordTimingMetric(TimingMetric.visitEnd);\n        this.state = VisitState.completed;\n        this.adapter.visitCompleted(this);\n        this.controller.visitCompleted(this);\n      }\n    }\n    fail() {\n      if (this.state == VisitState.started) {\n        this.state = VisitState.failed;\n        this.adapter.visitFailed(this);\n      }\n    }\n    changeHistory() {\n      if (!this.historyChanged) {\n        const actionForHistory = this.location.isEqualTo(this.referrer) ? \"replace\" : this.action;\n        const method = this.getHistoryMethodForAction(actionForHistory);\n        method.call(this.controller, this.location, this.restorationIdentifier);\n        this.historyChanged = true;\n      }\n    }\n    issueRequest() {\n      if (this.shouldIssueRequest() && !this.request) {\n        const url = Location.wrap(this.location).absoluteURL;\n        const options = {\n          method: \"GET\",\n          headers: {},\n          htmlOnly: true,\n          timeout: 240\n        };\n        options.headers[\"Accept\"] = \"text/html, application/xhtml+xml\";\n        options.headers[\"X-PJAX\"] = 1;\n        if (this.referrer) {\n          options.headers[\"X-PJAX-REFERRER\"] = Location.wrap(this.referrer).absoluteURL;\n        }\n        this.progress = 0;\n        this.request = new HttpRequest(this, url, options);\n        this.request.send();\n      }\n    }\n    loadResponse() {\n      const { request, response } = this;\n      if (request && response) {\n        this.render(() => {\n          const page = Page.fromHTMLString(response);\n          if (request.failed && !page.isNativeError()) {\n            this.controller.render({ error: response }, this.performScroll);\n            this.adapter.visitRendered(this);\n            this.fail();\n          } else {\n            this.controller.render({ page }, this.performScroll);\n            this.adapter.visitRendered(this);\n            this.complete();\n          }\n        });\n      }\n    }\n    followRedirect() {\n      if (this.redirectedToLocation && !this.followedRedirect) {\n        this.location = this.redirectedToLocation;\n        this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation, this.restorationIdentifier);\n        this.followedRedirect = true;\n      }\n    }\n    goToSamePageAnchor() {\n      if (this.isSamePage) {\n        this.render(() => {\n          this.performScroll();\n          this.adapter.visitRendered(this);\n        });\n      }\n    }\n    // HTTP request delegate\n    requestStarted() {\n      this.recordTimingMetric(TimingMetric.requestStart);\n      this.adapter.visitRequestStarted(this);\n    }\n    requestProgressed(progress) {\n      this.progress = progress;\n      if (this.adapter.visitRequestProgressed) {\n        this.adapter.visitRequestProgressed(this);\n      }\n    }\n    requestCompletedWithResponse(response, statusCode, redirectedToLocation) {\n      this.response = response;\n      this.redirectedToLocation = Location.wrap(redirectedToLocation);\n      this.adapter.visitRequestCompleted(this);\n    }\n    requestFailedWithStatusCode(statusCode, response) {\n      this.response = response;\n      this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n    }\n    requestFinished() {\n      this.recordTimingMetric(TimingMetric.requestEnd);\n      this.adapter.visitRequestFinished(this);\n    }\n    scrollToRestoredPosition() {\n      const position = this.restorationData ? this.restorationData.scrollPosition : void 0;\n      if (position) {\n        this.controller.scrollToPosition(position);\n        return true;\n      }\n    }\n    scrollToAnchor() {\n      if (this.location.anchor != null) {\n        this.controller.scrollToAnchor(this.location.anchor);\n        return true;\n      }\n    }\n    scrollToTop() {\n      this.controller.scrollToPosition({ x: 0, y: 0 });\n    }\n    // Instrumentation\n    recordTimingMetric(metric) {\n      this.timingMetrics[metric] = (/* @__PURE__ */ new Date()).getTime();\n    }\n    getTimingMetrics() {\n      return Object.assign({}, this.timingMetrics);\n    }\n    // Private\n    getHistoryMethodForAction(action) {\n      switch (action) {\n        case \"swap\":\n        case \"replace\":\n          return this.controller.replaceHistoryWithLocationAndRestorationIdentifier;\n        case \"advance\":\n        case \"restore\":\n          return this.controller.pushHistoryWithLocationAndRestorationIdentifier;\n      }\n    }\n    shouldIssueRequest() {\n      return !this.isSamePage;\n    }\n    locationChangeIsSamePage() {\n      if (this.action == \"swap\") {\n        return true;\n      }\n      const lastLocation = this.action == \"restore\" && this.controller.lastRenderedLocation;\n      return this.controller.locationIsSamePageAnchor(lastLocation || this.location);\n    }\n    render(callback) {\n      this.cancelRender();\n      this.frame = requestAnimationFrame(() => {\n        delete this.frame;\n        callback.call(this);\n      });\n    }\n    cancelRender() {\n      if (this.frame) {\n        cancelAnimationFrame(this.frame);\n        delete this.frame;\n      }\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/controller.js\n  var Controller3 = class _Controller {\n    constructor() {\n      this.adapter = new BrowserAdapter(this);\n      this.history = new History(this);\n      this.restorationData = {};\n      this.restorationDataKeys = [];\n      this.restorationDataLimit = 20;\n      this.scrollManager = new ScrollManager(this);\n      this.useScroll = true;\n      this.view = new View(this);\n      this.enabled = true;\n      this.pendingAssets = 0;\n      this.progressBarDelay = 500;\n      this.progressBarVisible = true;\n      this.started = false;\n      this.uniqueInlineScripts = /* @__PURE__ */ new Set();\n      this.uniqueInlineScriptsLimit = 100;\n      this.currentVisit = null;\n      this.historyVisit = null;\n      this.pageIsReady = false;\n      this.pageLoaded = () => {\n        this.pageIsReady = true;\n        this.lastRenderedLocation = this.location;\n        this.notifyApplicationAfterPageLoad();\n        this.notifyApplicationAfterPageAndScriptsLoad();\n        this.observeInlineScripts();\n      };\n      this.moduleLoaded = () => {\n        this.decrementPendingAsset();\n      };\n      this.clickCaptured = () => {\n        removeEventListener(\"click\", this.clickBubbled, false);\n        addEventListener(\"click\", this.clickBubbled, false);\n      };\n      this.clickBubbled = (event) => {\n        if (this.enabled && this.clickEventIsSignificant(event)) {\n          const link = this.getVisitableLinkForTarget(event.target);\n          if (link) {\n            const location2 = this.getVisitableLocationForLink(link);\n            if (location2 && this.applicationAllowsFollowingLinkToLocation(link, location2)) {\n              event.preventDefault();\n              const action = this.getActionForLink(link);\n              const scroll = this.useScrollForLink(link);\n              this.visit(location2, { action, scroll });\n            }\n          }\n        }\n      };\n    }\n    start() {\n      if (_Controller.supported && !this.started) {\n        addEventListener(\"click\", this.clickCaptured, true);\n        addEventListener(\"DOMContentLoaded\", this.pageLoaded, false);\n        addEventListener(\"turbo:module-loaded\", this.moduleLoaded, false);\n        this.startHistory();\n        this.scrollManager.start();\n        this.started = true;\n        this.enabled = this.documentIsEnabled();\n      }\n    }\n    disable() {\n      this.enabled = false;\n    }\n    stop() {\n      if (this.started) {\n        removeEventListener(\"click\", this.clickCaptured, true);\n        removeEventListener(\"DOMContentLoaded\", this.pageLoaded, false);\n        removeEventListener(\"turbo:module-loaded\", this.moduleLoaded, false);\n        this.scrollManager.stop();\n        this.stopHistory();\n        this.started = false;\n      }\n    }\n    isEnabled() {\n      return this.started && this.enabled;\n    }\n    pageReady() {\n      return new Promise((resolve) => {\n        if (this.pageIsReady) {\n          resolve();\n        } else {\n          addEventListener(\"render\", () => resolve(), { once: true });\n        }\n      });\n    }\n    visit(location2, options = {}) {\n      location2 = Location.wrap(location2);\n      const action = options.action || \"advance\";\n      if (this.applicationAllowsVisitingLocation(location2, action)) {\n        if (this.locationIsVisitable(location2)) {\n          this.useScroll = options.scroll !== false;\n          this.adapter.visitProposedToLocationWithAction(location2, action);\n        } else {\n          window.location.href = location2.toString();\n        }\n      }\n    }\n    startVisitToLocationWithAction(location2, action, restorationIdentifier) {\n      if (_Controller.supported) {\n        const restorationData = this.getRestorationDataForIdentifier(restorationIdentifier);\n        this.startVisit(Location.wrap(location2), action, { restorationData });\n      } else {\n        window.location.href = location2.toString();\n      }\n    }\n    setProgressBarVisible(value) {\n      this.progressBarVisible = value;\n    }\n    setProgressBarDelay(delay) {\n      this.progressBarDelay = delay;\n    }\n    // History\n    startHistory() {\n      this.location = Location.currentLocation;\n      this.restorationIdentifier = uuid();\n      this.history.start();\n      this.history.replace(this.location, this.restorationIdentifier);\n    }\n    stopHistory() {\n      this.history.stop();\n    }\n    getLastVisitUrl() {\n      if (this.historyVisit) {\n        return this.historyVisit.referrer.absoluteURL;\n      }\n    }\n    pushHistoryWithLocationAndRestorationIdentifier(locatable, restorationIdentifier) {\n      this.historyVisit = this.currentVisit;\n      this.location = Location.wrap(locatable);\n      this.restorationIdentifier = restorationIdentifier;\n      this.history.push(this.location, this.restorationIdentifier);\n    }\n    replaceHistoryWithLocationAndRestorationIdentifier(locatable, restorationIdentifier) {\n      this.location = Location.wrap(locatable);\n      this.restorationIdentifier = restorationIdentifier;\n      this.history.replace(this.location, this.restorationIdentifier);\n    }\n    // History delegate\n    historyPoppedToLocationWithRestorationIdentifier(location2, restorationIdentifier) {\n      if (this.enabled) {\n        this.location = location2;\n        this.restorationIdentifier = restorationIdentifier;\n        const restorationData = this.getRestorationDataForIdentifier(restorationIdentifier);\n        this.startVisit(location2, \"restore\", { restorationIdentifier, restorationData, historyChanged: true });\n      } else {\n        this.adapter.pageInvalidated();\n      }\n    }\n    // Scrolling\n    scrollToAnchor(anchor) {\n      const element = this.view.getElementForAnchor(anchor);\n      if (element) {\n        this.scrollToElement(element);\n      } else {\n        this.scrollToPosition({ x: 0, y: 0 });\n      }\n    }\n    scrollToElement(element) {\n      this.scrollManager.scrollToElement(element);\n    }\n    scrollToPosition(position) {\n      this.scrollManager.scrollToPosition(position);\n    }\n    // Scroll manager delegate\n    scrollPositionChanged(position) {\n      const restorationData = this.getCurrentRestorationData();\n      restorationData.scrollPosition = position;\n    }\n    // Pending asset management\n    incrementPendingAsset() {\n      this.pendingAssets++;\n    }\n    decrementPendingAsset() {\n      this.pendingAssets--;\n      if (this.pendingAssets === 0) {\n        this.pageIsReady = true;\n        this.notifyApplicationAfterPageAndScriptsLoad();\n        this.notifyApplicationAfterLoadScripts();\n      }\n    }\n    // View\n    render(options, callback) {\n      this.view.render(options, callback);\n    }\n    viewInvalidated() {\n      this.adapter.pageInvalidated();\n    }\n    viewAllowsImmediateRender(newBody, options) {\n      this.pageIsReady = false;\n      this.notifyApplicationUnload();\n      const event = this.notifyApplicationBeforeRender(newBody, options);\n      return !event.defaultPrevented;\n    }\n    viewRendered() {\n      this.lastRenderedLocation = this.currentVisit.location;\n      this.notifyApplicationAfterRender();\n    }\n    viewTransitionEnabled() {\n      return this.view.getPage().isViewTransitionEnabled();\n    }\n    markVisitDirection(action) {\n      const direction = { advance: \"forward\", restore: \"back\" }[action] || \"none\";\n      document.documentElement.setAttribute(\"data-turbo-visit-direction\", direction);\n    }\n    unmarkVisitDirection() {\n      document.documentElement.removeAttribute(\"data-turbo-visit-direction\");\n    }\n    // Inline script monitoring\n    observeInlineScripts() {\n      document.documentElement.querySelectorAll(\"script[data-turbo-eval-once]\").forEach((el) => this.applicationHasSeenInlineScript(el));\n    }\n    applicationHasSeenInlineScript(element) {\n      const uid = element.getAttribute(\"data-turbo-eval-once\");\n      if (!uid) {\n        return false;\n      }\n      const hasSeen = this.uniqueInlineScripts.has(uid);\n      if (!hasSeen) {\n        if (this.uniqueInlineScripts.size >= this.uniqueInlineScriptsLimit) {\n          const iterator = this.uniqueInlineScripts.values();\n          this.uniqueInlineScripts.delete(iterator.next().value);\n        }\n        this.uniqueInlineScripts.add(uid);\n      }\n      return hasSeen;\n    }\n    // Application events\n    applicationAllowsFollowingLinkToLocation(link, location2) {\n      const event = this.notifyApplicationAfterClickingLinkToLocation(link, location2);\n      return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location2, action) {\n      const event = this.notifyApplicationBeforeVisitingLocation(location2, action);\n      return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location2) {\n      return dispatch(\"page:click\", { target: link, detail: { url: location2.absoluteURL } });\n    }\n    notifyApplicationBeforeVisitingLocation(location2, action) {\n      return dispatch(\"page:before-visit\", { detail: { url: location2.absoluteURL, action } });\n    }\n    notifyApplicationAfterVisitingLocation(location2) {\n      return dispatch(\"page:visit\", { detail: { url: location2.absoluteURL }, cancelable: false });\n    }\n    notifyApplicationBeforeRender(newBody, options) {\n      return dispatch(\"page:before-render\", { detail: { newBody, ...options } });\n    }\n    notifyApplicationAfterRender() {\n      return dispatch(\"page:render\", { cancelable: false });\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n      return dispatch(\"page:load\", { detail: { url: this.location.absoluteURL, timing }, cancelable: false });\n    }\n    notifyApplicationAfterPageAndScriptsLoad() {\n      return dispatch(\"page:loaded\", { cancelable: false });\n    }\n    notifyApplicationAfterLoadScripts() {\n      return dispatch(\"page:updated\", { cancelable: false });\n    }\n    notifyApplicationUnload() {\n      return dispatch(\"page:unload\", { cancelable: false });\n    }\n    // Private\n    startVisit(location2, action, properties) {\n      if (this.currentVisit) {\n        this.currentVisit.cancel();\n      }\n      this.currentVisit = this.createVisit(location2, action, properties);\n      this.currentVisit.scrolled = !this.useScroll;\n      this.markVisitDirection(action);\n      this.currentVisit.start();\n      this.notifyApplicationAfterVisitingLocation(location2);\n    }\n    createVisit(location2, action, properties) {\n      const visit = new Visit(this, location2, action, properties.restorationIdentifier);\n      visit.restorationData = Object.assign({}, properties.restorationData || {});\n      visit.historyChanged = !!properties.historyChanged;\n      visit.referrer = this.location;\n      return visit;\n    }\n    visitCompleted(visit) {\n      this.unmarkVisitDirection();\n      this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n      if (this.pendingAssets === 0) {\n        this.pageIsReady = true;\n        this.notifyApplicationAfterPageAndScriptsLoad();\n        this.notifyApplicationAfterLoadScripts();\n      }\n    }\n    clickEventIsSignificant(event) {\n      return !(event.target && event.target.isContentEditable || event.defaultPrevented || event.which > 1 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey);\n    }\n    getVisitableLinkForTarget(target) {\n      if (target instanceof Element && this.elementIsVisitable(target)) {\n        var container = target.closest(\"a[href]:not([download])\");\n        if (container && container.getAttribute(\"target\") && container.getAttribute(\"target\") != \"_self\") {\n          return null;\n        }\n        return container;\n      }\n    }\n    getVisitableLocationForLink(link) {\n      const location2 = new Location(link.getAttribute(\"href\") || \"\");\n      if (this.locationIsVisitable(location2)) {\n        return location2;\n      }\n    }\n    getActionForLink(link) {\n      const action = link.getAttribute(\"data-turbo-action\");\n      return this.isAction(action) ? action : \"advance\";\n    }\n    useScrollForLink(link) {\n      return link.getAttribute(\"data-turbo-no-scroll\") === null;\n    }\n    isAction(action) {\n      return action == \"advance\" || action == \"replace\" || action == \"restore\" || action == \"swap\";\n    }\n    documentIsEnabled() {\n      const meta = document.documentElement.querySelector('head meta[name=\"turbo-visit-control\"]');\n      if (meta) {\n        const value = meta.getAttribute(\"content\");\n        return value == \"enable\";\n      }\n      return false;\n    }\n    elementIsVisitable(element) {\n      const container = element.closest(\"[data-turbo]\");\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\";\n      } else {\n        return true;\n      }\n    }\n    locationIsVisitable(location2) {\n      return location2.isPrefixedBy(this.view.getRootLocation()) && location2.isHTML();\n    }\n    locationIsSamePageAnchor(location2) {\n      return typeof location2.anchor != \"undefined\" && location2.requestURL == this.location.requestURL;\n    }\n    getCurrentRestorationData() {\n      return this.getRestorationDataForIdentifier(this.restorationIdentifier);\n    }\n    getRestorationDataForIdentifier(identifier) {\n      if (!(identifier in this.restorationData)) {\n        this.restorationData[identifier] = {};\n        this.restorationDataKeys.push(identifier);\n        this.trimRestorationData();\n      }\n      return this.restorationData[identifier];\n    }\n    trimRestorationData() {\n      while (this.restorationDataKeys.length > this.restorationDataLimit) {\n        const oldestKey = this.restorationDataKeys.shift();\n        delete this.restorationData[oldestKey];\n      }\n    }\n  };\n  Controller3.supported = !!(window.history.pushState && window.requestAnimationFrame && window.addEventListener);\n\n  // ../../vendor/larajax/larajax/resources/src/turbo/namespace.js\n  var controller3 = new Controller3();\n  var namespace_default5 = {\n    get supported() {\n      return Controller3.supported;\n    },\n    controller: controller3,\n    visit(location2, options) {\n      if (controller3.isEnabled()) {\n        controller3.visit(location2, options);\n      } else {\n        window.location.assign(location2);\n      }\n    },\n    setProgressBarVisible(value) {\n      controller3.setProgressBarVisible(value);\n    },\n    setProgressBarDelay(delay) {\n      controller3.setProgressBarDelay(delay);\n    },\n    start() {\n      controller3.start();\n    },\n    isEnabled() {\n      return controller3.isEnabled();\n    },\n    pageReady() {\n      return controller3.pageReady();\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/observe/control-base.js\n  var ControlBase = class _ControlBase {\n    static proxyCounter = 0;\n    static get shouldLoad() {\n      return true;\n    }\n    static afterLoad(_identifier, _application) {\n      return;\n    }\n    constructor(context) {\n      this.context = context;\n      this.config = this.parseDataset(context.scope.element.dataset || {});\n    }\n    get application() {\n      return this.context.application;\n    }\n    get scope() {\n      return this.context.scope;\n    }\n    get element() {\n      return this.scope.element;\n    }\n    get identifier() {\n      return this.scope.identifier;\n    }\n    init() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    // Internal events avoid the need to call parent logic\n    initBefore() {\n      this.proxiedEvents = {};\n      this.proxiedMethods = {};\n    }\n    initAfter() {\n    }\n    connectBefore() {\n    }\n    connectAfter() {\n    }\n    disconnectBefore() {\n    }\n    disconnectAfter() {\n      for (const key in this.proxiedEvents) {\n        this.forget(...this.proxiedEvents[key]);\n        delete this.proxiedEvents[key];\n      }\n      for (const key in this.proxiedMethods) {\n        this.proxiedMethods[key] = void 0;\n      }\n    }\n    // Events\n    listen(eventName, targetOrHandler, handlerOrOptions, options) {\n      if (typeof targetOrHandler === \"string\") {\n        Events.on(this.element, eventName, targetOrHandler, this.proxy(handlerOrOptions), options);\n      } else if (targetOrHandler instanceof Element) {\n        Events.on(targetOrHandler, eventName, this.proxy(handlerOrOptions), options);\n      } else {\n        Events.on(this.element, eventName, this.proxy(targetOrHandler), handlerOrOptions);\n      }\n      _ControlBase.proxyCounter++;\n      this.proxiedEvents[_ControlBase.proxyCounter] = arguments;\n    }\n    forget(eventName, targetOrHandler, handlerOrOptions, options) {\n      if (typeof targetOrHandler === \"string\") {\n        Events.off(this.element, eventName, targetOrHandler, this.proxy(handlerOrOptions), options);\n      } else if (targetOrHandler instanceof Element) {\n        Events.off(targetOrHandler, eventName, this.proxy(handlerOrOptions), options);\n      } else {\n        Events.off(this.element, eventName, this.proxy(targetOrHandler), handlerOrOptions);\n      }\n      const compareArrays = (a, b) => {\n        if (a.length === b.length) {\n          for (var i = 0; i < a.length; i++) {\n            if (a[i] === b[i]) {\n              return true;\n            }\n          }\n        }\n        return false;\n      };\n      for (const key in this.proxiedEvents) {\n        if (compareArrays(arguments, this.proxiedEvents[key])) {\n          delete this.proxiedEvents[key];\n        }\n      }\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n      const type = prefix ? `${prefix}:${eventName}` : eventName;\n      const event = new CustomEvent(type, { detail, bubbles, cancelable });\n      target.dispatchEvent(event);\n      return event;\n    }\n    proxy(method) {\n      if (method.ocProxyId === void 0) {\n        _ControlBase.proxyCounter++;\n        method.ocProxyId = _ControlBase.proxyCounter;\n      }\n      if (this.proxiedMethods[method.ocProxyId] !== void 0) {\n        return this.proxiedMethods[method.ocProxyId];\n      }\n      this.proxiedMethods[method.ocProxyId] = method.bind(this);\n      return this.proxiedMethods[method.ocProxyId];\n    }\n    parseDataset(dataset) {\n      const result = {};\n      for (const [key, value] of Object.entries(dataset)) {\n        result[key] = this.parseValue(value);\n      }\n      return result;\n    }\n    parseValue(value) {\n      if (value === \"true\") return true;\n      if (value === \"false\") return false;\n      if (value === \"null\") return null;\n      if (value === \"undefined\") return void 0;\n      if (value !== \"\" && !isNaN(Number(value))) return Number(value);\n      return value;\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/util/jax-builder.js\n  function buildJaxObject(modules) {\n    const {\n      AjaxFramework,\n      AjaxRequest,\n      AssetManager: AssetManager2,\n      Events: Events2,\n      waitFor: waitFor2,\n      visit,\n      // Optional modules\n      AjaxExtras,\n      AjaxObserve,\n      AjaxTurbo,\n      ControlBase: ControlBase2\n    } = modules;\n    const jax = {\n      // Request\n      AjaxRequest,\n      AssetManager: AssetManager2,\n      ajax: AjaxRequest.send,\n      // Core\n      AjaxFramework,\n      request: AjaxFramework.requestElement,\n      parseJSON: AjaxFramework.parseJSON,\n      values: AjaxFramework.serializeAsJSON,\n      pageReady: AjaxFramework.pageReady,\n      // Util\n      Events: Events2,\n      dispatch: Events2.dispatch,\n      trigger: Events2.trigger,\n      on: Events2.on,\n      off: Events2.off,\n      one: Events2.one,\n      waitFor: waitFor2,\n      visit\n    };\n    if (AjaxExtras) {\n      jax.AjaxExtras = AjaxExtras;\n      jax.flashMsg = AjaxExtras.flashMsg;\n      jax.progressBar = AjaxExtras.progressBar;\n      jax.attachLoader = AjaxExtras.attachLoader;\n    }\n    if (AjaxObserve) {\n      jax.AjaxObserve = AjaxObserve;\n      jax.registerControl = AjaxObserve.registerControl;\n      jax.importControl = AjaxObserve.importControl;\n      jax.observeControl = AjaxObserve.observeControl;\n      jax.fetchControl = AjaxObserve.fetchControl;\n      jax.fetchControls = AjaxObserve.fetchControls;\n    }\n    if (ControlBase2) {\n      jax.ControlBase = ControlBase2;\n    }\n    if (AjaxTurbo) {\n      registerTurbo(AjaxTurbo);\n      jax.AjaxTurbo = AjaxTurbo;\n      jax.useTurbo = AjaxTurbo.isEnabled;\n    }\n    return jax;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/framework-bundle.js\n  if (!window.jax) {\n    window.jax = {};\n  }\n  Object.assign(window.jax, buildJaxObject({\n    AjaxFramework: namespace_default2,\n    AjaxRequest: namespace_default,\n    AssetManager,\n    Events,\n    waitFor,\n    visit: namespace_default5.visit,\n    AjaxExtras: namespace_default3,\n    AjaxObserve: namespace_default4,\n    AjaxTurbo: namespace_default5,\n    ControlBase\n  }));\n  namespace_default2.start();\n  namespace_default3.start();\n  namespace_default4.start();\n  namespace_default5.start();\n\n  // assets/vendor/larajax/migrate.js\n  window.oc = window.jax;\n  window.oc.serializeJSON = window.oc.values;\n  (function() {\n    var $ = window[\"jQuery\"];\n    if ($ === void 0) {\n      return;\n    }\n    bindRequestFunc();\n    bindRenderFunc();\n    bindjQueryEvents();\n    bindOcNamespace();\n    function bindRequestFunc() {\n      var old = $.fn.request;\n      $.fn.request = function(handler, option) {\n        var options = typeof option === \"object\" ? option : {};\n        return oc.request(this.get(0), handler, options);\n      };\n      $.fn.request.Constructor = oc.request;\n      $.request = function(handler, option) {\n        return $(document).request(handler, option);\n      };\n      $.fn.request.noConflict = function() {\n        $.fn.request = old;\n        return this;\n      };\n    }\n    function bindRenderFunc() {\n      $.fn.render = function(callback) {\n        $(document).on(\"render\", callback);\n      };\n    }\n    function bindOcNamespace() {\n      if ($.oc === void 0) {\n        $.oc = {};\n      }\n      $.oc.flashMsg = window.jax.flashMsg;\n      $.oc.stripeLoadIndicator = window.jax.progressBar;\n    }\n    function bindjQueryEvents() {\n      migratejQueryEvent(document, \"ajax:setup\", \"ajaxSetup\", [\"context\"]);\n      migratejQueryEvent(document, \"ajax:promise\", \"ajaxPromise\", [\"context\"]);\n      migratejQueryEvent(document, \"ajax:fail\", \"ajaxFail\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:done\", \"ajaxDone\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:always\", \"ajaxAlways\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:before-redirect\", \"ajaxRedirect\");\n      migratejQueryEvent(document, \"ajax:update\", \"ajaxUpdate\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:before-replace\", \"ajaxBeforeReplace\");\n      migratejQueryEvent(document, \"ajax:before-request\", \"oc.beforeRequest\", [\"context\"]);\n      migratejQueryEvent(document, \"ajax:before-update\", \"ajaxBeforeUpdate\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:request-success\", \"ajaxSuccess\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:request-complete\", \"ajaxComplete\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:request-error\", \"ajaxError\", [\"context\", \"message\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:before-validate\", \"ajaxValidation\", [\"context\", \"message\", \"fields\"]);\n      migratejQueryEvent(window, \"ajax:before-send\", \"ajaxBeforeSend\", [\"context\"]);\n      migratejQueryEvent(window, \"ajax:update-complete\", \"ajaxUpdateComplete\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(window, \"ajax:invalid-field\", \"ajaxInvalidField\", [\"element\", \"fieldName\", \"errorMsg\", \"isFirst\"]);\n      migratejQueryEvent(window, \"ajax:confirm-message\", \"ajaxConfirmMessage\", [\"message\", \"promise\"]);\n      migratejQueryEvent(window, \"ajax:error-message\", \"ajaxErrorMessage\", [\"message\"]);\n      migratejQueryAttachData(document, \"ajax:setup\", \"a[data-request], button[data-request], form[data-request], a[data-handler], button[data-handler]\");\n    }\n    function migratejQueryEvent(target, jsName, jqName, detailNames) {\n      detailNames = detailNames || [];\n      $(target).on(jsName, function(ev) {\n        triggerjQueryEvent(ev.originalEvent, jqName, detailNames);\n      });\n    }\n    function triggerjQueryEvent(ev, eventName, detailNames) {\n      detailNames = detailNames || [];\n      var jQueryEvent = $.Event(eventName), args = buildDetailArgs(ev, detailNames);\n      $(ev.target).trigger(jQueryEvent, args);\n      if (jQueryEvent.isDefaultPrevented()) {\n        ev.preventDefault();\n      }\n    }\n    function buildDetailArgs(ev, detailNames) {\n      var args = [];\n      detailNames.forEach(function(name) {\n        args.push(ev.detail[name]);\n      });\n      return args;\n    }\n    function migratejQueryAttachData(target, eventName, selector) {\n      $(target).on(eventName, selector, function(event) {\n        var dataObj = $(this).data(\"request-data\");\n        if (!dataObj) {\n          return;\n        }\n        var options = event.detail.context.options;\n        if (dataObj.constructor === {}.constructor) {\n          Object.assign(options.data, dataObj);\n        } else if (typeof dataObj === \"string\") {\n          Object.assign(options.data, paramToObj(\"request-data\", dataObj));\n        }\n      });\n    }\n    function paramToObj(name, value) {\n      if (value === void 0) {\n        value = \"\";\n      }\n      if (typeof value === \"object\") {\n        return value;\n      }\n      if (value.charAt(0) !== \"{\") {\n        value = \"{\" + value + \"}\";\n      }\n      try {\n        return oc.parseJSON(value);\n      } catch (e) {\n        throw new Error(\"Error parsing the \" + name + \" attribute value. \" + e);\n      }\n    }\n  })();\n})();\n"
  },
  {
    "path": "modules/system/assets/js/framework.esm.js",
    "content": "/**\n * Larajax ESM Wrapper\n *\n * Re-exports framework globals for use with ES module imports.\n * The framework-bundle.js must be loaded first as a regular script.\n */\n\n// Individual class exports\nexport const ControlBase = oc.ControlBase;\nexport const AjaxRequest = oc.AjaxRequest;\nexport const AssetManager = oc.AssetManager;\nexport const ProgressBar = oc.ProgressBar;\nexport const FlashMessage = oc.FlashMessage;\nexport const Events = oc.Events;\n\n// Utility exports\nexport const waitFor = oc.waitFor;\nexport const domReady = oc.domReady;\nexport const registerControl = oc.registerControl;\n\n// Namespace exports\nexport const AjaxFramework = oc.AjaxFramework;\nexport const AjaxExtras = oc.AjaxExtras;\nexport const AjaxObserve = oc.AjaxObserve;\nexport const AjaxTurbo = oc.AjaxTurbo;\n\n// Combined jax object\nexport const jax = window.jax;\n\n// Default export - the oc namespace\nexport default oc;\n"
  },
  {
    "path": "modules/system/assets/js/framework.js",
    "content": "(() => {\n  // ../../vendor/larajax/larajax/resources/src/util/index.js\n  function dispatch(eventName, { target = document, detail = {}, bubbles = true, cancelable = true } = {}) {\n    const event = new CustomEvent(eventName, { detail, bubbles, cancelable });\n    target.dispatchEvent(event);\n    return event;\n  }\n  function unindent(strings, ...values) {\n    const lines = trimLeft(interpolate(strings, values)).split(\"\\n\");\n    const match = lines[0].match(/^\\s+/);\n    const indent = match ? match[0].length : 0;\n    return lines.map((line) => line.slice(indent)).join(\"\\n\");\n  }\n  function trimLeft(string) {\n    return string.replace(/^\\n/, \"\");\n  }\n  function interpolate(strings, values) {\n    return strings.reduce((result, string, i) => {\n      const value = values[i] == void 0 ? \"\" : values[i];\n      return result + string + value;\n    }, \"\");\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/events.js\n  var namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  var stripNameRegex = /\\..*/;\n  var stripUidRegex = /::\\d+$/;\n  var eventRegistry = {};\n  var uidEvent = 1;\n  var customEvents = {\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\"\n  };\n  var nativeEvents = /* @__PURE__ */ new Set([\n    \"click\",\n    \"dblclick\",\n    \"mouseup\",\n    \"mousedown\",\n    \"contextmenu\",\n    \"mousewheel\",\n    \"DOMMouseScroll\",\n    \"mouseover\",\n    \"mouseout\",\n    \"mousemove\",\n    \"selectstart\",\n    \"selectend\",\n    \"keydown\",\n    \"keypress\",\n    \"keyup\",\n    \"orientationchange\",\n    \"touchstart\",\n    \"touchmove\",\n    \"touchend\",\n    \"touchcancel\",\n    \"pointerdown\",\n    \"pointermove\",\n    \"pointerup\",\n    \"pointerleave\",\n    \"pointercancel\",\n    \"gesturestart\",\n    \"gesturechange\",\n    \"gestureend\",\n    \"focus\",\n    \"blur\",\n    \"change\",\n    \"reset\",\n    \"select\",\n    \"submit\",\n    \"focusin\",\n    \"focusout\",\n    \"load\",\n    \"unload\",\n    \"beforeunload\",\n    \"resize\",\n    \"move\",\n    \"DOMContentLoaded\",\n    \"readystatechange\",\n    \"error\",\n    \"abort\",\n    \"scroll\"\n  ]);\n  var Events = class {\n    static on(element, event, handler, delegationFunction, options) {\n      addHandler(element, event, handler, delegationFunction, options, false);\n    }\n    static one(element, event, handler, delegationFunction, options) {\n      addHandler(element, event, handler, delegationFunction, options, true);\n    }\n    static off(element, originalTypeEvent, handler, delegationFunction, options) {\n      if (typeof originalTypeEvent !== \"string\" || !element) {\n        return;\n      }\n      const [isDelegated, callable, typeEvent, opts] = normalizeParameters(originalTypeEvent, handler, delegationFunction, options);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getElementEvents(element);\n      const storeElementEvent = events[typeEvent] || {};\n      const isNamespace = originalTypeEvent.startsWith(\".\");\n      if (typeof callable !== \"undefined\") {\n        if (!storeElementEvent) {\n          return;\n        }\n        removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null, opts);\n        return;\n      }\n      if (isNamespace) {\n        for (const elementEvent of Object.keys(events)) {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        }\n      }\n      for (const keyHandlers of Object.keys(storeElementEvent)) {\n        const handlerKey = keyHandlers.replace(stripUidRegex, \"\");\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.callable, event.delegationSelector, opts);\n        }\n      }\n    }\n    static dispatch(eventName, { target = document, detail = {}, bubbles = true, cancelable = true } = {}) {\n      return dispatch(eventName, { target, detail, bubbles, cancelable });\n    }\n    static trigger(target, eventName, { detail = {}, bubbles = true, cancelable = true } = {}) {\n      return dispatch(eventName, { target, detail, bubbles, cancelable });\n    }\n  };\n  function makeEventUid(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n  function getElementEvents(element) {\n    const uid = makeEventUid(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n  function findHandler(events, callable, delegationSelector = null) {\n    return Object.values(events).find((event) => event.callable === callable && event.delegationSelector === delegationSelector);\n  }\n  function normalizeParameters(originalTypeEvent, handler, delegationFunction, options) {\n    const isDelegated = typeof handler === \"string\";\n    const callable = isDelegated ? delegationFunction : handler;\n    const opts = isDelegated ? options : delegationFunction;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    if (!nativeEvents.has(typeEvent)) {\n      typeEvent = originalTypeEvent;\n    }\n    return [isDelegated, callable, typeEvent, opts];\n  }\n  function addHandler(element, originalTypeEvent, handler, delegationFunction, options, oneOff) {\n    if (typeof originalTypeEvent !== \"string\" || !element) {\n      return;\n    }\n    let [isDelegated, callable, typeEvent, opts] = normalizeParameters(originalTypeEvent, handler, delegationFunction, options);\n    if (originalTypeEvent in customEvents) {\n      const wrapFunction = (fn2) => {\n        return function(event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn2.call(this, event);\n          }\n        };\n      };\n      callable = wrapFunction(callable);\n    }\n    const events = getElementEvents(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n    if (previousFunction) {\n      previousFunction.oneOff = previousFunction.oneOff && oneOff;\n      return;\n    }\n    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, \"\"));\n    const fn = isDelegated ? internalDelegationHandler(element, handler, callable) : internalHandler(element, callable);\n    fn.delegationSelector = isDelegated ? handler : null;\n    fn.callable = callable;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, opts);\n  }\n  function removeHandler(element, events, typeEvent, handler, delegationSelector, options) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n    if (!fn) {\n      return;\n    }\n    element.removeEventListener(typeEvent, fn, options);\n    delete events[typeEvent][fn.uidEvent];\n  }\n  function internalHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n      if (handler.oneOff) {\n        Events.off(element, event.type, fn);\n      }\n      return fn.apply(element, [event]);\n    };\n  }\n  function internalDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n      for (let { target } = event; target && target !== this; target = target.parentNode) {\n        for (const domElement of domElements) {\n          if (domElement !== target) {\n            continue;\n          }\n          event.delegateTarget = target;\n          if (handler.oneOff) {\n            Events.off(element, event.type, selector, fn);\n          }\n          return fn.apply(target, [event]);\n        }\n      }\n    };\n  }\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    for (const handlerKey of Object.keys(storeElementEvent)) {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  }\n  function getTypeEvent(event) {\n    event = event.replace(stripNameRegex, \"\");\n    return customEvents[event] || event;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/envelope.js\n  var Envelope = class {\n    constructor(response = {}, status = 200) {\n      const {\n        __ajax: body,\n        ...data\n      } = response;\n      this.ok = !!body.ok;\n      this.severity = body.severity || \"info\";\n      this.message = body.message ?? null;\n      this.data = data || {};\n      this.invalid = body.invalid || {};\n      this.ops = Array.isArray(body.ops) ? body.ops : [];\n      this.redirect = null;\n      this.status = status;\n    }\n    isFatal() {\n      return this.severity === \"fatal\" || this.status >= 500 && this.status <= 599;\n    }\n    isError() {\n      return this.severity === \"error\" || this.isFatal() || this.ok === false;\n    }\n    getMessage() {\n      return this.message;\n    }\n    getInvalid() {\n      return this.invalid || {};\n    }\n    getData() {\n      return this.data || {};\n    }\n    getStatus() {\n      return this.status;\n    }\n    getSeverity() {\n      return this.severity;\n    }\n    getOps(type) {\n      if (!type) {\n        return this.ops;\n      }\n      return this.ops.filter((o) => o?.op === type);\n    }\n    getFlash() {\n      return this.getOps(\"flash\").map(({ level = \"info\", text = \"\" }) => ({ level, text }));\n    }\n    getBrowserEvents() {\n      return this.getOps(\"dispatch\").map(({ selector = null, event, detail, async }) => ({\n        selector,\n        event,\n        detail,\n        async\n      }));\n    }\n    getDomPatches() {\n      return this.getOps(\"patchDom\").map(({ selector, html = \"\", swap = \"innerHTML\" }) => ({\n        selector,\n        html,\n        swap\n      }));\n    }\n    getPartials() {\n      return this.getOps(\"partial\").map(({ name, html = \"\" }) => ({ name, html }));\n    }\n    getAssets() {\n      const out = { js: [], css: [], img: [] };\n      const seen = { js: /* @__PURE__ */ new Set(), css: /* @__PURE__ */ new Set(), img: /* @__PURE__ */ new Set() };\n      for (const { type, assets = [] } of this.getOps(\"loadAssets\")) {\n        if (!out[type]) {\n          continue;\n        }\n        for (const asset of assets) {\n          if (asset.inline) {\n            out[type].push(asset);\n            continue;\n          }\n          const url = typeof asset === \"string\" ? asset : asset.url;\n          if (!seen[type].has(url)) {\n            seen[type].add(url);\n            out[type].push(typeof asset === \"string\" ? { url: asset } : asset);\n          }\n        }\n      }\n      return out;\n    }\n    getRedirectUrl() {\n      const op = this.getOps(\"redirect\")[0];\n      return op?.url || this.redirect || null;\n    }\n    getReload() {\n      return this.getOps(\"reload\")[0] || null;\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/request/options.js\n  var Options = class {\n    constructor(handler, options) {\n      if (!handler) {\n        throw new Error(\"The request handler name is not specified.\");\n      }\n      if (!handler.match(/^(?:\\w+\\:{2})?on*/)) {\n        throw new Error('Invalid handler name. The correct handler name format is: \"onEvent\".');\n      }\n      if (typeof FormData === \"undefined\") {\n        throw new Error(\"The browser does not support the FormData interface.\");\n      }\n      this.options = options;\n      this.handler = handler;\n    }\n    static fetch(handler, options) {\n      return new this(handler, options).getRequestOptions();\n    }\n    // Public\n    getRequestOptions() {\n      return {\n        method: \"POST\",\n        url: this.options.url ? this.options.url : window.location.href,\n        headers: this.buildHeaders()\n      };\n    }\n    // Private\n    buildHeaders() {\n      const { handler, options } = this;\n      const headers = {\n        \"X-Requested-With\": \"XMLHttpRequest\",\n        \"X-AJAX-HANDLER\": handler\n      };\n      if (!options.files) {\n        headers[\"Content-Type\"] = options.bulk ? \"application/json\" : \"application/x-www-form-urlencoded\";\n      }\n      if (options.flash) {\n        headers[\"X-AJAX-FLASH\"] = 1;\n      }\n      if (options.partial) {\n        headers[\"X-AJAX-PARTIAL\"] = options.partial;\n      }\n      var partials = this.extractPartials(options.update, options.partial);\n      if (partials) {\n        headers[\"X-AJAX-PARTIALS\"] = partials;\n      }\n      var xsrfToken = this.getXSRFToken();\n      if (xsrfToken) {\n        headers[\"X-XSRF-TOKEN\"] = xsrfToken;\n      }\n      var csrfToken = this.getCSRFToken();\n      if (csrfToken) {\n        headers[\"X-CSRF-TOKEN\"] = csrfToken;\n      }\n      if (options.headers && options.headers.constructor === {}.constructor) {\n        Object.assign(headers, options.headers);\n      }\n      return headers;\n    }\n    extractPartials(update = {}, selfPartial) {\n      var result = [];\n      if (update) {\n        if (typeof update !== \"object\") {\n          throw new Error(\"Invalid update value. The correct format is an object ({...})\");\n        }\n        for (var partial in update) {\n          if (partial === \"_self\" && selfPartial) {\n            result.push(selfPartial);\n          } else {\n            result.push(partial);\n          }\n        }\n      }\n      return result.join(\"&\");\n    }\n    getCSRFToken() {\n      var tag = document.querySelector('meta[name=\"csrf-token\"]');\n      return tag ? tag.getAttribute(\"content\") : null;\n    }\n    getXSRFToken() {\n      var cookieValue = null;\n      if (document.cookie && document.cookie != \"\") {\n        var cookies = document.cookie.split(\";\");\n        for (var i = 0; i < cookies.length; i++) {\n          var cookie = cookies[i].replace(/^([\\s]*)|([\\s]*)$/g, \"\");\n          if (cookie.substring(0, 11) == \"XSRF-TOKEN=\") {\n            cookieValue = decodeURIComponent(cookie.substring(11));\n            break;\n          }\n        }\n      }\n      return cookieValue;\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/request/asset-manager.js\n  var AssetManager = class _AssetManager {\n    /**\n     * Load a collection of assets.\n     * @param {{js?: Array<string|{url: string, attributes?: object}>, css?: Array<string|{url: string, attributes?: object}>, img?: Array<string|{url: string, attributes?: object}>}} collection\n     * @param {(err?: Error) => void} [callback]  // optional; called on success or with error\n     * @returns {Promise<void>}\n     */\n    static load(collection = {}, callback) {\n      const manager = new _AssetManager(), promise = manager.loadCollection(collection);\n      if (typeof callback === \"function\") {\n        promise.then(() => callback());\n      }\n      return promise;\n    }\n    async loadCollection(collection = {}) {\n      const jsList = (collection.js ?? []).map(normalizeAsset).filter((asset) => asset.inline || !document.querySelector(`head script[src=\"${htmlEscape(asset.url)}\"]`));\n      const cssList = (collection.css ?? []).map(normalizeAsset).filter((asset) => !document.querySelector(`head link[href=\"${htmlEscape(asset.url)}\"]`));\n      const imgList = (collection.img ?? []).map(normalizeAsset);\n      if (!jsList.length && !cssList.length && !imgList.length) {\n        return;\n      }\n      await Promise.all([\n        this.loadJavaScript(jsList),\n        Promise.all(cssList.map((asset) => this.loadStyleSheet(asset))),\n        this.loadImages(imgList)\n      ]);\n    }\n    loadStyleSheet(asset) {\n      const { url, attributes = {} } = asset;\n      return new Promise((resolve, reject) => {\n        const el = document.createElement(\"link\");\n        el.rel = \"stylesheet\";\n        el.type = \"text/css\";\n        el.href = url;\n        for (const [key, value] of Object.entries(attributes)) {\n          if (value === true) {\n            el.setAttribute(key, \"\");\n          } else if (value !== false && value != null) {\n            el.setAttribute(key, value);\n          }\n        }\n        el.onload = () => resolve(el);\n        el.onerror = () => reject(new Error(`Failed to load CSS: ${url}`));\n        document.head.appendChild(el);\n      });\n    }\n    // Sequential loading (safer for dependencies)\n    loadJavaScript(list) {\n      return list.reduce((p, asset) => {\n        if (asset.inline) {\n          return p.then(() => new Promise((resolve, reject) => {\n            const el = document.createElement(\"script\");\n            const attributes2 = asset.attributes || {};\n            if (attributes2.type) {\n              el.type = attributes2.type;\n            }\n            for (const [key, value] of Object.entries(attributes2)) {\n              if (key === \"type\") continue;\n              if (value === true) el.setAttribute(key, \"\");\n              else if (value !== false && value != null) el.setAttribute(key, value);\n            }\n            if (el.type === \"module\") {\n              const id = \"_lj\" + ++inlineModuleId;\n              window[id] = () => {\n                delete window[id];\n                resolve(el);\n              };\n              el.textContent = asset.inline + `\nwindow['${id}']();`;\n            } else {\n              el.textContent = asset.inline;\n            }\n            document.head.appendChild(el);\n            if (el.type !== \"module\") {\n              resolve(el);\n            }\n          }));\n        }\n        const { url, attributes = {} } = asset;\n        return p.then(() => new Promise((resolve, reject) => {\n          const el = document.createElement(\"script\");\n          if (attributes.type) {\n            el.type = attributes.type;\n          } else {\n            el.type = \"text/javascript\";\n          }\n          el.src = url;\n          for (const [key, value] of Object.entries(attributes)) {\n            if (key === \"type\") continue;\n            if (value === true) {\n              el.setAttribute(key, \"\");\n            } else if (value !== false && value != null) {\n              el.setAttribute(key, value);\n            }\n          }\n          el.onload = () => resolve(el);\n          el.onerror = () => reject(new Error(`Failed to load JS: ${url}`));\n          document.head.appendChild(el);\n        }));\n      }, Promise.resolve());\n    }\n    loadImages(list) {\n      if (!list.length) return Promise.resolve();\n      return Promise.all(list.map((asset) => new Promise((resolve, reject) => {\n        const { url } = asset;\n        const img = new Image();\n        img.onload = () => resolve(url);\n        img.onerror = () => reject(new Error(`Failed to load image: ${url}`));\n        img.src = url;\n      })));\n    }\n  };\n  var inlineModuleId = 0;\n  function normalizeAsset(asset) {\n    return typeof asset === \"string\" ? { url: asset } : asset;\n  }\n  function htmlEscape(value) {\n    return String(value).replace(/\"/g, '\\\\\"');\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/dom-patcher.js\n  var DomUpdateMode = {\n    replaceWith: \"replace\",\n    prepend: \"prepend\",\n    append: \"append\",\n    update: \"innerHTML\"\n  };\n  var DomPatcher = class {\n    constructor(envelope, partialMap, options = {}) {\n      this.options = options;\n      this.envelope = envelope;\n      this.partialMap = partialMap;\n      this.afterUpdateCallback = null;\n    }\n    apply() {\n      this.applyPartialUpdates();\n      this.applyDomUpdates();\n    }\n    afterUpdate(callback) {\n      this.afterUpdateCallback = callback;\n    }\n    // Should patch the dom using the envelope.getPartials()\n    // which is expected to be { name: partialName, html: contents }\n    applyPartialUpdates() {\n      const partials = this.envelope.getPartials();\n      partials.forEach((partial) => {\n        let selector = this.partialMap[partial.name];\n        let selectedEl = [];\n        if (this.partialMap[\"_self\"] && partial.name == this.options.partial && this.options.partialEl) {\n          selector = this.partialMap[\"_self\"];\n          selectedEl = [this.options.partialEl];\n        } else if (selector) {\n          selectedEl = resolveSelectorResponse(selector, '[data-ajax-partial=\"' + partial.name + '\"]');\n        }\n        selectedEl.forEach((el) => {\n          this.patchDom(\n            el,\n            partial.html,\n            getSelectorUpdateMode(selector, el)\n          );\n        });\n      });\n    }\n    // Should patch the dom using the envelope.getDomPatches()\n    applyDomUpdates() {\n      const updates = this.envelope.getDomPatches();\n      updates.forEach((update) => {\n        document.querySelectorAll(update.selector).forEach((el) => {\n          this.patchDom(el, update.html, update.swap);\n        });\n      });\n    }\n    patchDom(element, content, swapType) {\n      const parentEl = element.parentNode;\n      switch (swapType) {\n        case \"append\":\n        case \"beforeend\":\n          element.insertAdjacentHTML(\"beforeend\", content);\n          runScriptsOnFragment(element, content);\n          break;\n        case \"after\":\n        case \"afterend\":\n          element.insertAdjacentHTML(\"afterend\", content);\n          runScriptsOnFragment(element, content);\n          break;\n        case \"before\":\n        case \"beforebegin\":\n          element.insertAdjacentHTML(\"beforebegin\", content);\n          runScriptsOnFragment(element, content);\n          break;\n        case \"prepend\":\n        case \"afterbegin\":\n          element.insertAdjacentHTML(\"afterbegin\", content);\n          runScriptsOnFragment(element, content);\n          break;\n        case \"replace\":\n          element.replaceWith(content);\n          runScriptsOnFragment(parentEl, content);\n          break;\n        case \"outerHTML\":\n          element.outerHTML = content;\n          runScriptsOnFragment(parentEl, content);\n          break;\n        default:\n        case \"innerHTML\":\n          element.innerHTML = content;\n          runScriptsOnElement(element);\n          break;\n      }\n      if (this.afterUpdateCallback) {\n        this.afterUpdateCallback(element);\n      }\n    }\n  };\n  function resolveSelectorResponse(selector, partialSelector) {\n    if (selector === true) {\n      return document.querySelectorAll(partialSelector);\n    }\n    if (typeof selector !== \"string\") {\n      return [selector];\n    }\n    if ([\"#\", \".\", \"@\", \"^\", \"!\", \"=\"].indexOf(selector.charAt(0)) === -1) {\n      return [];\n    }\n    if ([\"@\", \"^\", \"!\", \"=\"].indexOf(selector.charAt(0)) !== -1) {\n      selector = selector.substring(1);\n    }\n    if (!selector) {\n      selector = partialSelector;\n    }\n    return document.querySelectorAll(selector);\n  }\n  function getSelectorUpdateMode(selector, el) {\n    if (typeof selector === \"string\") {\n      if (selector.charAt(0) === \"!\") {\n        return DomUpdateMode.replaceWith;\n      }\n      if (selector.charAt(0) === \"@\") {\n        return DomUpdateMode.append;\n      }\n      if (selector.charAt(0) === \"^\") {\n        return DomUpdateMode.prepend;\n      }\n    }\n    if (el.dataset.ajaxUpdateMode !== void 0) {\n      return el.dataset.ajaxUpdateMode;\n    }\n    return DomUpdateMode.update;\n  }\n  function runScriptsOnElement(el) {\n    Array.from(el.querySelectorAll(\"script\")).forEach((oldScript) => {\n      const newScript = document.createElement(\"script\");\n      Array.from(oldScript.attributes).forEach((attr) => newScript.setAttribute(attr.name, attr.value));\n      newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n      oldScript.parentNode.replaceChild(newScript, oldScript);\n    });\n  }\n  function runScriptsOnFragment(container, html) {\n    const div = document.createElement(\"div\");\n    div.innerHTML = html;\n    Array.from(div.querySelectorAll(\"script\")).forEach((oldScript) => {\n      const newScript = document.createElement(\"script\");\n      Array.from(oldScript.attributes).forEach((attr) => newScript.setAttribute(attr.name, attr.value));\n      newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n      container.appendChild(newScript);\n      container.removeChild(newScript);\n    });\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/turbo.js\n  var _turboProvider = null;\n  function registerTurbo(turbo) {\n    _turboProvider = turbo;\n  }\n  function isTurboEnabled() {\n    return _turboProvider?.isEnabled() ?? false;\n  }\n  function turboVisit(url, options) {\n    if (_turboProvider) {\n      _turboProvider.visit(url, options);\n      return true;\n    }\n    return false;\n  }\n  function getTurboController() {\n    return _turboProvider?.controller ?? null;\n  }\n  function turboPageReady() {\n    return _turboProvider?.pageReady() ?? null;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/referrer.js\n  function getReferrerUrl() {\n    const url = isTurboEnabled() ? getTurboController().getLastVisitUrl() : getReferrerFromSameOrigin();\n    if (!url || isSameBaseUrl(url)) {\n      return null;\n    }\n    return url;\n  }\n  function getReferrerFromSameOrigin() {\n    if (!document.referrer) {\n      return null;\n    }\n    try {\n      const referrer = new URL(document.referrer);\n      if (referrer.origin !== location.origin) {\n        return null;\n      }\n      const pushReferrer = localStorage.getItem(\"ocPushStateReferrer\");\n      if (pushReferrer && pushReferrer.indexOf(referrer.pathname) === 0) {\n        return pushReferrer;\n      }\n      return document.referrer;\n    } catch (e) {\n    }\n  }\n  function isSameBaseUrl(url) {\n    const givenUrl = new URL(url, window.location.origin), currentUrl = new URL(window.location.href);\n    return givenUrl.origin === currentUrl.origin && givenUrl.pathname === currentUrl.pathname;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/promise.js\n  function decoratePromiseProxy(fn, ctx = null) {\n    return (...args) => {\n      const p = Promise.resolve().then(() => fn.apply(ctx, args));\n      return decoratePromise(p);\n    };\n  }\n  function decoratePromise(promise) {\n    return Object.assign(promise, {\n      done(fn) {\n        promise.then(fn);\n        return this;\n      },\n      fail(fn) {\n        promise.catch(fn);\n        return this;\n      },\n      always(fn) {\n        promise.finally(fn);\n        return this;\n      }\n    });\n  }\n  function cancellablePromise(executor) {\n    if (!executor) {\n      executor = () => {\n      };\n    }\n    let hasCanceled = false;\n    let cancelHandler = () => {\n    };\n    let resolveFn, rejectFn;\n    const promise = new Promise((resolve, reject) => {\n      resolveFn = resolve;\n      rejectFn = reject;\n      executor(\n        (value) => {\n          if (!hasCanceled) resolve(value);\n        },\n        (error) => {\n          if (!hasCanceled) reject(error);\n        },\n        (onCancel) => {\n          cancelHandler = onCancel;\n        }\n      );\n    });\n    promise.abort = () => {\n      hasCanceled = true;\n      cancelHandler();\n    };\n    promise.cancel = promise.abort;\n    promise.onCancel = (fn) => {\n      cancelHandler = typeof fn === \"function\" ? fn : cancelHandler;\n      return promise;\n    };\n    promise.resolve = (value) => {\n      if (!hasCanceled) {\n        resolveFn(value);\n      }\n    };\n    promise.reject = (error) => {\n      if (!hasCanceled) {\n        rejectFn(error);\n      }\n    };\n    return decoratePromise(promise);\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/actions.js\n  var Actions = class {\n    constructor(delegate, context, options) {\n      this.el = delegate.el;\n      this.delegate = delegate;\n      this.context = context;\n      this.options = options;\n      this.context.start = this.start.bind(this);\n      this.context.success = decoratePromiseProxy(this.success, this);\n      this.context.error = decoratePromiseProxy(this.error, this);\n      this.context.complete = decoratePromiseProxy(this.complete, this);\n      this.context.cancel = this.cancel.bind(this);\n      this.context.handleErrorMessage = this.handleErrorMessage.bind(this);\n    }\n    // Options can override all public methods in this class\n    invoke(method, args = []) {\n      if (this.options[method]) {\n        return this.options[method].apply(this.context, args);\n      }\n      if (this[method]) {\n        return this[method](...args);\n      }\n    }\n    // Options can also specify a non-interference \"func\" method, typically\n    // used by eval-based data attributes that takes minimal arguments\n    invokeFunc(method, data = null) {\n      if (this.options[method]) {\n        return this.options[method](this.el, this.context, data);\n      }\n    }\n    // Public\n    start(xhr) {\n      this.invoke(\"markAsUpdating\", [true]);\n      if (this.delegate.options.message) {\n        this.invoke(\"handleProgressMessage\", [this.delegate.options.message, false]);\n      }\n    }\n    async success(data, responseCode, xhr) {\n      if (this.invoke(\"beforeUpdate\", [data, responseCode, xhr]) === false) {\n        return;\n      }\n      if (this.invokeFunc(\"beforeUpdateFunc\", data) === false) {\n        return;\n      }\n      if (!this.delegate.applicationAllowsUpdate(data, responseCode, xhr)) {\n        return;\n      }\n      if (data instanceof Blob) {\n        this.invoke(\"handleFileDownload\", [data, xhr]);\n        this.delegate.notifyApplicationRequestSuccess(data, responseCode, xhr);\n        this.invokeFunc(\"successFunc\", data);\n        return;\n      }\n      if (!data.$env?.isFatal()) {\n        await this.invoke(\"handleUpdateOperations\", [data, responseCode, xhr]);\n        await this.invoke(\"handleUpdateResponse\", [data, responseCode, xhr]);\n      }\n      this.delegate.notifyApplicationRequestSuccess(data, responseCode, xhr);\n      this.invokeFunc(\"successFunc\", data);\n    }\n    async error(data, responseCode, xhr) {\n      let errorMsg = data.$env?.getMessage();\n      if (window.jaxUnloading !== void 0 && window.jaxUnloading) {\n        return;\n      }\n      this.delegate.toggleRedirect(false);\n      if (!data.$env?.isFatal()) {\n        await this.invoke(\"handleUpdateOperations\", [data, responseCode, xhr]);\n        await this.invoke(\"handleUpdateResponse\", [data, responseCode, xhr]);\n      } else if (!errorMsg) {\n        if (data.constructor === {}.constructor) {\n          if (data.message) {\n            errorMsg = data.message;\n          } else {\n            errorMsg = \"Something went wrong! Check the browser console.\";\n            console.warn(data);\n          }\n        } else {\n          errorMsg = data;\n        }\n      }\n      if (this.el !== document) {\n        this.el.setAttribute(\"data-error-message\", errorMsg);\n      }\n      if (!this.delegate.applicationAllowsError(data, responseCode, xhr)) {\n        return;\n      }\n      if (this.invokeFunc(\"errorFunc\", data) === false) {\n        return;\n      }\n      this.invoke(\"handleErrorMessage\", [errorMsg, data.$env?.getSeverity()]);\n    }\n    async complete(data, responseCode, xhr) {\n      this.delegate.notifyApplicationRequestComplete(data, responseCode, xhr);\n      this.invokeFunc(\"completeFunc\", data);\n      this.invoke(\"markAsUpdating\", [false]);\n      if (this.delegate.options.message) {\n        this.invoke(\"handleProgressMessage\", [null, true]);\n      }\n    }\n    cancel() {\n      this.invokeFunc(\"cancelFunc\");\n      this.delegate.notifyApplicationRequestCancel();\n    }\n    // Custom function, requests confirmation from the user\n    handleConfirmMessage(message) {\n      let resolveFn, rejectFn;\n      const promise = new Promise((resolve, reject) => {\n        resolveFn = resolve;\n        rejectFn = reject;\n      });\n      promise.then(() => {\n        this.delegate.sendInternal();\n      }).catch(() => {\n        this.invoke(\"cancel\", []);\n      });\n      const event = this.delegate.notifyApplicationConfirmMessage(message, {\n        resolve: resolveFn,\n        reject: rejectFn\n      });\n      if (event.defaultPrevented) {\n        return false;\n      }\n      if (message) {\n        const result = confirm(message);\n        if (!result) {\n          this.invoke(\"cancel\", []);\n        }\n        return result;\n      }\n    }\n    // Custom function, display a progress message to the user\n    handleProgressMessage(message, isDone) {\n    }\n    // Custom function, display a flash message to the user\n    handleFlashMessage(message, type) {\n    }\n    // Custom function, display an error message to the user\n    handleErrorMessage(message, severity) {\n      const event = this.delegate.notifyApplicationErrorMessage(message);\n      if (event.defaultPrevented) {\n        return;\n      }\n      if (message) {\n        alert(message);\n      }\n    }\n    // Custom function, focus fields with errors\n    handleValidationMessage(message, fields) {\n      this.delegate.notifyApplicationBeforeValidate(message, fields);\n      if (!this.delegate.formEl) {\n        return;\n      }\n      var isFirstInvalidField = true;\n      for (var fieldName in fields) {\n        var fieldCheck, fieldNameOptions = [];\n        fieldCheck = fieldName.replace(/\\.(\\w+)/g, \"[$1]\");\n        fieldNameOptions.push('[name=\"' + fieldCheck + '\"]:not([disabled])');\n        fieldNameOptions.push('[name=\"' + fieldCheck + '[]\"]:not([disabled])');\n        fieldCheck = (\".\" + fieldName).replace(/\\.(\\w+)/g, \"[$1]\");\n        fieldNameOptions.push('[name$=\"' + fieldCheck + '\"]:not([disabled])');\n        fieldNameOptions.push('[name$=\"' + fieldCheck + '[]\"]:not([disabled])');\n        var fieldEmpty = fieldName.replace(/\\.[0-9]+$/g, \"\");\n        if (fieldName !== fieldEmpty) {\n          fieldCheck = fieldEmpty.replace(/\\.(\\w+)/g, \"[$1]\");\n          fieldNameOptions.push('[name=\"' + fieldCheck + '[]\"]:not([disabled])');\n          fieldCheck = (\".\" + fieldEmpty).replace(/\\.(\\w+)/g, \"[$1]\");\n          fieldNameOptions.push('[name$=\"' + fieldCheck + '[]\"]:not([disabled])');\n        }\n        var fieldElement = this.delegate.formEl.querySelector(fieldNameOptions.join(\", \"));\n        if (fieldElement) {\n          let event = this.delegate.notifyApplicationFieldInvalid(fieldElement, fieldName, fields[fieldName], isFirstInvalidField);\n          if (isFirstInvalidField) {\n            if (!event.defaultPrevented) {\n              fieldElement.focus();\n            }\n            isFirstInvalidField = false;\n          }\n        }\n      }\n    }\n    // Custom function: handle browser events coming from the server\n    async handleBrowserEvents(events = []) {\n      if (!events.length) {\n        return false;\n      }\n      let defaultPrevented = false;\n      for (const dispatched of events) {\n        const isAsync = dispatched?.async === true;\n        if (isAsync) {\n          await new Promise((outerResolve, outerReject) => {\n            let settled = false;\n            const resolve = (v) => {\n              if (!settled) {\n                settled = true;\n                outerResolve(v);\n              }\n            };\n            const reject = (e) => {\n              if (!settled) {\n                settled = true;\n                outerReject(e);\n              }\n            };\n            const event = this.delegate.notifyApplicationCustomEvent(dispatched.event, {\n              ...dispatched.detail || {},\n              context: this.context,\n              promise: { resolve, reject }\n            });\n            if (event?.defaultPrevented) {\n              defaultPrevented = true;\n            }\n          });\n        } else {\n          const event = this.delegate.notifyApplicationCustomEvent(dispatched.event, {\n            ...dispatched.detail || {},\n            context: this.context\n          });\n          if (event?.defaultPrevented) defaultPrevented = true;\n        }\n      }\n      return defaultPrevented;\n    }\n    // Custom function, redirect the browser to another location\n    handleRedirectResponse(href) {\n      const event = this.delegate.notifyApplicationBeforeRedirect();\n      if (event.defaultPrevented) {\n        return;\n      }\n      if (this.options.browserRedirectBack) {\n        href = getReferrerUrl() || href;\n      }\n      if (isTurboEnabled()) {\n        turboVisit(href);\n      } else {\n        location.assign(href);\n      }\n    }\n    // Custom function, reload the browser\n    handleReloadResponse() {\n      location.reload();\n    }\n    // Mark known elements as being updated\n    markAsUpdating(isUpdating) {\n      var updateOptions = this.options.update || {};\n      for (var partial in updateOptions) {\n        let selector = updateOptions[partial];\n        let selectedEl = [];\n        if (updateOptions[\"_self\"] && partial == this.options.partial && this.delegate.partialEl) {\n          selector = updateOptions[\"_self\"];\n          selectedEl = [this.delegate.partialEl];\n        } else {\n          selectedEl = resolveSelectorResponse(selector, '[data-ajax-partial=\"' + partial + '\"]');\n        }\n        selectedEl.forEach(function(el) {\n          if (isUpdating) {\n            el.setAttribute(\"data-ajax-updating\", \"\");\n          } else {\n            el.removeAttribute(\"data-ajax-updating\");\n          }\n        });\n      }\n    }\n    async handleUpdateResponse(data, responseCode, xhr) {\n      if (!data.$env) {\n        return;\n      }\n      const updateOptions = this.options.update || {}, domPatcher = new DomPatcher(data.$env, updateOptions, {\n        partial: this.options.partial,\n        partialEl: this.delegate.partialEl\n      });\n      domPatcher.afterUpdate((el) => {\n        this.delegate.notifyApplicationAjaxUpdate(el, data, responseCode, xhr);\n      });\n      domPatcher.apply();\n      setTimeout(() => {\n        this.delegate.notifyApplicationUpdateComplete(data, responseCode, xhr);\n        this.invoke(\"afterUpdate\", [data, responseCode, xhr]);\n        this.invokeFunc(\"afterUpdateFunc\", data);\n      }, 0);\n    }\n    async handleUpdateOperations(data, responseCode, xhr) {\n      const flashMessages = this.delegate.options.flash ? data.$env?.getFlash() : null;\n      if (flashMessages) {\n        for (const flashMessage of flashMessages) {\n          this.invoke(\"handleFlashMessage\", [flashMessage.text, flashMessage.level]);\n        }\n      }\n      const browserEvents = data.$env?.getBrowserEvents();\n      if (browserEvents && await this.invoke(\"handleBrowserEvents\", [browserEvents])) {\n        return;\n      }\n      const redirectUrl = data.$env?.getRedirectUrl();\n      if (redirectUrl) {\n        this.delegate.toggleRedirect(redirectUrl);\n      }\n      if (this.delegate.isRedirect) {\n        this.invoke(\"handleRedirectResponse\", [this.delegate.options.redirect]);\n      }\n      if (data.$env?.getReload()) {\n        this.invoke(\"handleReloadResponse\");\n      }\n      const invalidFields = data.$env?.getInvalid();\n      if (invalidFields) {\n        this.invoke(\"handleValidationMessage\", [data.$env?.getMessage(), invalidFields]);\n      }\n      const loadAssets = data.$env?.getAssets();\n      if (loadAssets) {\n        await AssetManager.load(loadAssets);\n      }\n    }\n    // Custom function, download a file response from the server\n    handleFileDownload(data, xhr) {\n      if (this.options.browserTarget) {\n        window.open(window.URL.createObjectURL(data), this.options.browserTarget);\n        return;\n      }\n      const fileName = getFilenameFromHttpResponse(xhr);\n      if (!fileName) {\n        return;\n      }\n      const anchor = document.createElement(\"a\");\n      anchor.href = window.URL.createObjectURL(data);\n      anchor.download = fileName;\n      anchor.target = \"_blank\";\n      anchor.click();\n      window.URL.revokeObjectURL(anchor.href);\n    }\n    // Custom function, adds query data to the current URL\n    applyQueryToUrl(queryData) {\n      const searchParams = new URLSearchParams(window.location.search);\n      for (const key of Object.keys(queryData)) {\n        const value = queryData[key];\n        if (Array.isArray(value)) {\n          searchParams.delete(key);\n          searchParams.delete(`${key}[]`);\n          value.forEach((val) => searchParams.append(`${key}[]`, val));\n        } else if (value === null) {\n          searchParams.delete(key);\n          searchParams.delete(`${key}[]`);\n        } else {\n          searchParams.set(key, value);\n        }\n      }\n      var newUrl = window.location.pathname, queryStr = searchParams.toString();\n      if (queryStr) {\n        newUrl += \"?\" + queryStr.replaceAll(\"%5B%5D=\", \"[]=\");\n      }\n      if (isTurboEnabled()) {\n        turboVisit(newUrl, { action: \"swap\", scroll: false });\n      } else {\n        history.replaceState(null, \"\", newUrl);\n        localStorage.setItem(\"ocPushStateReferrer\", newUrl);\n      }\n    }\n  };\n  function getFilenameFromHttpResponse(xhr) {\n    const contentDisposition = xhr.getResponseHeader(\"Content-Disposition\");\n    if (!contentDisposition) {\n      return null;\n    }\n    const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/g;\n    let match = null;\n    let tmpMatch = null;\n    while ((tmpMatch = filenameRegex.exec(contentDisposition)) !== null) {\n      match = tmpMatch;\n    }\n    if (match !== null && match[1]) {\n      return /filename[^;*=\\n]*\\*=[^']*''/.exec(match[0]) === null ? match[1].replace(/['\"]/g, \"\") : decodeURIComponent(match[1].substring(match[1].indexOf(\"''\") + 2));\n    }\n    return null;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/form-serializer.js\n  var FormSerializer = class _FormSerializer {\n    // Public\n    static assignToObj(obj, name, value) {\n      new _FormSerializer().assignObjectInternal(obj, name, value);\n    }\n    static serializeAsJSON(element) {\n      if (typeof element === \"string\") {\n        element = document.querySelector(element);\n      }\n      return new _FormSerializer().parseContainer(element);\n    }\n    // Private\n    parseContainer(element) {\n      let jsonData = {};\n      element.querySelectorAll(\"input, textarea, select\").forEach((field) => {\n        if (!field.name || field.disabled || [\"file\", \"reset\", \"submit\", \"button\"].indexOf(field.type) > -1) {\n          return;\n        }\n        if ([\"checkbox\", \"radio\"].indexOf(field.type) > -1 && !field.checked) {\n          return;\n        }\n        if (field.type === \"select-multiple\") {\n          var arr = [];\n          Array.from(field.options).forEach(function(option) {\n            if (option.selected) {\n              arr.push({\n                name: field.name,\n                value: option.value\n              });\n            }\n          });\n          this.assignObjectInternal(jsonData, field.name, arr);\n          return;\n        }\n        this.assignObjectInternal(jsonData, field.name, field.value);\n      });\n      return jsonData;\n    }\n    assignObjectInternal(obj, fieldName, fieldValue) {\n      this.assignObjectNested(\n        obj,\n        this.nameToArray(fieldName),\n        fieldValue,\n        fieldName.endsWith(\"[]\")\n      );\n    }\n    assignObjectNested(obj, fieldArr, fieldValue, isArray) {\n      var currentTarget = obj, lastIndex = fieldArr.length - 1;\n      fieldArr.forEach(function(prop, index) {\n        if (isArray && index === lastIndex) {\n          if (!Array.isArray(currentTarget[prop])) {\n            currentTarget[prop] = [];\n          }\n          if (Array.isArray(fieldValue)) {\n            currentTarget[prop].push(...fieldValue);\n          } else {\n            currentTarget[prop].push(fieldValue);\n          }\n        } else {\n          if (currentTarget[prop] === void 0 || currentTarget[prop].constructor !== {}.constructor) {\n            currentTarget[prop] = {};\n          }\n          if (index === lastIndex) {\n            currentTarget[prop] = fieldValue;\n          }\n          currentTarget = currentTarget[prop];\n        }\n      });\n    }\n    nameToArray(fieldName) {\n      var expression = /([^\\]\\[]+)/g, elements = [], searchResult;\n      while (searchResult = expression.exec(fieldName)) {\n        elements.push(searchResult[0]);\n      }\n      return elements;\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/request/data.js\n  var Data = class {\n    constructor(userData, targetEl, formEl) {\n      this.userData = userData || {};\n      this.targetEl = targetEl;\n      this.formEl = formEl;\n    }\n    // Public\n    getRequestData() {\n      let requestData;\n      if (this.formEl) {\n        requestData = new FormData(this.formEl);\n      } else {\n        requestData = new FormData();\n      }\n      this.appendSingleInputElement(requestData);\n      return requestData;\n    }\n    getAsFormData() {\n      return this.appendJsonToFormData(\n        this.getRequestData(),\n        this.userData\n      );\n    }\n    getAsQueryString() {\n      return this.convertFormDataToQuery(\n        this.getAsFormData()\n      );\n    }\n    getAsJsonData() {\n      return JSON.stringify(\n        this.convertFormDataToJson(\n          this.getAsFormData()\n        )\n      );\n    }\n    // Private\n    appendSingleInputElement(requestData) {\n      if (this.formEl || !this.targetEl || !isElementInput(this.targetEl)) {\n        return;\n      }\n      const inputName = this.targetEl.name;\n      if (!inputName || this.userData[inputName] !== void 0) {\n        return;\n      }\n      if (this.targetEl.type === \"file\") {\n        this.targetEl.files.forEach(function(value) {\n          requestData.append(inputName, value);\n        });\n      } else {\n        requestData.append(inputName, this.targetEl.value);\n      }\n    }\n    appendJsonToFormData(formData, useJson, parentKey) {\n      var self = this;\n      for (var key in useJson) {\n        var fieldKey = key;\n        if (parentKey) {\n          fieldKey = parentKey + \"[\" + key + \"]\";\n        }\n        var value = useJson[key];\n        if (value && value.constructor === {}.constructor) {\n          this.appendJsonToFormData(formData, value, fieldKey);\n        } else if (value && value.constructor === [].constructor) {\n          value.forEach(function(v, i) {\n            if (v.constructor === {}.constructor || v.constructor === [].constructor) {\n              self.appendJsonToFormData(formData, v, fieldKey + \"[\" + i + \"]\");\n            } else {\n              formData.append(fieldKey + \"[]\", self.castJsonToFormData(v));\n            }\n          });\n        } else {\n          formData.append(fieldKey, this.castJsonToFormData(value));\n        }\n      }\n      return formData;\n    }\n    convertFormDataToQuery(formData) {\n      let flatData = this.formDataToArray(formData);\n      return Object.keys(flatData).map(function(key) {\n        if (key.endsWith(\"[]\")) {\n          return flatData[key].map(function(val) {\n            return encodeURIComponent(key) + \"=\" + encodeURIComponent(val);\n          }).join(\"&\");\n        } else {\n          return encodeURIComponent(key) + \"=\" + encodeURIComponent(flatData[key]);\n        }\n      }).join(\"&\");\n    }\n    convertFormDataToJson(formData) {\n      let flatData = this.formDataToArray(formData);\n      let jsonData = {};\n      for (var key in flatData) {\n        FormSerializer.assignToObj(jsonData, key, flatData[key]);\n      }\n      return jsonData;\n    }\n    formDataToArray(formData) {\n      return Object.fromEntries(\n        Array.from(formData.keys()).map((key) => [\n          key,\n          key.endsWith(\"[]\") ? formData.getAll(key) : formData.getAll(key).pop()\n        ])\n      );\n    }\n    castJsonToFormData(val) {\n      if (val === null || val === void 0) {\n        return \"\";\n      }\n      if (val === true) {\n        return \"1\";\n      }\n      if (val === false) {\n        return \"0\";\n      }\n      return val;\n    }\n  };\n  function isElementInput(el) {\n    return [\"input\", \"select\", \"textarea\"].includes((el.tagName || \"\").toLowerCase());\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/util/http-request.js\n  var SystemStatusCode = {\n    networkFailure: 0,\n    timeoutFailure: -1,\n    contentTypeMismatch: -2,\n    userAborted: -3\n  };\n  var HttpRequest = class {\n    constructor(delegate, url, options) {\n      this.failed = false;\n      this.progress = 0;\n      this.sent = false;\n      this.aborted = false;\n      this.timedOut = false;\n      this.delegate = delegate;\n      this.url = url;\n      this.options = options;\n      this.headers = options.headers || {};\n      this.method = options.method || \"GET\";\n      this.data = options.data;\n      this.timeout = options.timeout || 0;\n      this.controller = new AbortController();\n      this.timeoutId = null;\n      this.xhr = this.createXhrWrapper();\n    }\n    send() {\n      if (this.sent) {\n        return;\n      }\n      this.sent = true;\n      this.notifyApplicationBeforeRequestStart();\n      this.setProgress(0);\n      this.delegate.requestStarted();\n      if (this.timeout > 0) {\n        this.timeoutId = setTimeout(() => {\n          this.timedOut = true;\n          this.controller.abort();\n        }, this.timeout * 1e3);\n      }\n      this.performFetch();\n    }\n    async performFetch() {\n      try {\n        const response = await fetch(this.url, {\n          method: this.method,\n          headers: this.headers,\n          body: this.data || null,\n          signal: this.controller.signal\n        });\n        this.clearTimeout();\n        this.updateXhrWrapper(response);\n        await this.handleResponse(response);\n      } catch (error) {\n        this.clearTimeout();\n        if (error.name === \"AbortError\") {\n          if (this.timedOut) {\n            this.handleTimeout();\n          } else {\n            this.handleAbort();\n          }\n        } else {\n          this.handleNetworkError();\n        }\n      }\n    }\n    async handleResponse(response) {\n      const contentType = response.headers.get(\"Content-Type\");\n      const contentDisposition = response.headers.get(\"Content-Disposition\") || \"\";\n      if (this.options.htmlOnly && !contentTypeIsHTML(contentType)) {\n        this.failed = true;\n        this.notifyApplicationAfterRequestEnd();\n        this.delegate.requestFailedWithStatusCode(SystemStatusCode.contentTypeMismatch);\n        this.destroy();\n        return;\n      }\n      let responseData;\n      if (contentDisposition.startsWith(\"attachment\") || contentDisposition.startsWith(\"inline\")) {\n        responseData = await response.blob();\n      } else if (contentTypeIsJSON(contentType)) {\n        responseData = await response.json();\n      } else {\n        responseData = await response.text();\n      }\n      if (response.status >= 200 && response.status < 300) {\n        this.notifyApplicationAfterRequestEnd();\n        this.delegate.requestCompletedWithResponse(\n          responseData,\n          response.status,\n          this.getRedirectLocation(response)\n        );\n        this.destroy();\n      } else {\n        this.failed = true;\n        this.notifyApplicationAfterRequestEnd();\n        this.delegate.requestFailedWithStatusCode(response.status, responseData);\n        this.destroy();\n      }\n    }\n    getRedirectLocation(response) {\n      const ajaxLocation = response.headers.get(\"X-AJAX-LOCATION\");\n      if (ajaxLocation) {\n        return ajaxLocation;\n      }\n      var anchorMatch = this.url.match(/^(.*)#/), wantUrl = anchorMatch ? anchorMatch[1] : this.url;\n      return wantUrl !== response.url ? response.url : null;\n    }\n    handleTimeout() {\n      this.failed = true;\n      this.notifyApplicationAfterRequestEnd();\n      this.delegate.requestFailedWithStatusCode(SystemStatusCode.timeoutFailure);\n      this.destroy();\n    }\n    handleAbort() {\n      if (this.options.trackAbort) {\n        this.failed = true;\n        this.notifyApplicationAfterRequestEnd();\n        this.delegate.requestFailedWithStatusCode(SystemStatusCode.userAborted);\n      } else {\n        this.notifyApplicationAfterRequestEnd();\n      }\n      this.destroy();\n    }\n    handleNetworkError() {\n      this.failed = true;\n      this.notifyApplicationAfterRequestEnd();\n      this.delegate.requestFailedWithStatusCode(SystemStatusCode.networkFailure);\n      this.destroy();\n    }\n    abort() {\n      if (this.sent && !this.aborted) {\n        this.aborted = true;\n        this.controller.abort();\n      }\n    }\n    clearTimeout() {\n      if (this.timeoutId) {\n        clearTimeout(this.timeoutId);\n        this.timeoutId = null;\n      }\n    }\n    // Application events\n    notifyApplicationBeforeRequestStart() {\n      Events.dispatch(\"ajax:request-start\", { detail: { url: this.url, xhr: this.xhr }, cancelable: false });\n    }\n    notifyApplicationAfterRequestEnd() {\n      Events.dispatch(\"ajax:request-end\", { detail: { url: this.url, xhr: this.xhr }, cancelable: false });\n    }\n    // XHR compatibility wrapper\n    createXhrWrapper() {\n      return {\n        status: 0,\n        statusText: \"\",\n        responseURL: this.url,\n        getResponseHeader: (name) => null,\n        getAllResponseHeaders: () => \"\"\n      };\n    }\n    updateXhrWrapper(response) {\n      this.xhr = {\n        status: response.status,\n        statusText: response.statusText,\n        responseURL: response.url,\n        getResponseHeader: (name) => response.headers.get(name),\n        getAllResponseHeaders: () => [...response.headers].map(([k, v]) => `${k}: ${v}`).join(\"\\r\\n\")\n      };\n    }\n    setProgress(progress) {\n      this.progress = progress;\n      this.delegate.requestProgressed(progress);\n    }\n    destroy() {\n      this.setProgress(1);\n      this.delegate.requestFinished();\n    }\n  };\n  function contentTypeIsHTML(contentType) {\n    return (contentType || \"\").match(/^text\\/html|^application\\/xhtml\\+xml/);\n  }\n  function contentTypeIsJSON(contentType) {\n    return (contentType || \"\").includes(\"application/json\");\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/extras/progress-bar.js\n  var ProgressBar = class _ProgressBar {\n    static instance = null;\n    static stylesheetReady = false;\n    static animationDuration = 300;\n    constructor() {\n      this.stylesheetElement = this.createStylesheetElement();\n      this.progressElement = this.createProgressElement();\n      this.hiding = false;\n      this.value = 0;\n      this.visible = false;\n      this.trickle = () => {\n        this.setValue(this.value + Math.random() / 100);\n      };\n    }\n    static get defaultCSS() {\n      return unindent`\n        .jax-progress-bar {\n            position: fixed;\n            display: block;\n            top: 0;\n            left: 0;\n            height: 3px;\n            background: #0076ff;\n            z-index: 9999;\n            transition:\n                width ${_ProgressBar.animationDuration}ms ease-out,\n                opacity ${_ProgressBar.animationDuration / 2}ms ${_ProgressBar.animationDuration / 2}ms ease-in;\n            transform: translate3d(0, 0, 0);\n        }\n    `;\n    }\n    static get progressBar() {\n      return {\n        show: function() {\n          const instance = getOrCreateInstance();\n          instance.setValue(0);\n          instance.show();\n        },\n        hide: function() {\n          const instance = getOrCreateInstance();\n          instance.setValue(100);\n          instance.hide();\n        }\n      };\n    }\n    show(options = {}) {\n      if (options.cssClass) {\n        this.progressElement.classList.add(options.cssClass);\n      }\n      if (!this.visible) {\n        this.visible = true;\n        this.installStylesheetElement();\n        this.installProgressElement();\n        this.startTrickling();\n      }\n    }\n    hide() {\n      if (this.visible && !this.hiding) {\n        this.hiding = true;\n        this.fadeProgressElement(() => {\n          this.uninstallProgressElement();\n          this.stopTrickling();\n          this.visible = false;\n          this.hiding = false;\n        });\n      }\n    }\n    setValue(value) {\n      this.value = value;\n      this.refresh();\n    }\n    // Private\n    installStylesheetElement() {\n      if (!_ProgressBar.stylesheetReady) {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n        _ProgressBar.stylesheetReady = true;\n      }\n    }\n    installProgressElement() {\n      this.progressElement.style.width = \"0\";\n      this.progressElement.style.opacity = \"1\";\n      document.documentElement.insertBefore(this.progressElement, document.body);\n      this.refresh();\n    }\n    fadeProgressElement(callback) {\n      this.progressElement.style.opacity = \"0\";\n      setTimeout(callback, _ProgressBar.animationDuration * 1.5);\n    }\n    uninstallProgressElement() {\n      if (this.progressElement.parentNode) {\n        document.documentElement.removeChild(this.progressElement);\n      }\n    }\n    startTrickling() {\n      if (!this.trickleInterval) {\n        this.trickleInterval = setInterval(this.trickle, _ProgressBar.animationDuration);\n      }\n    }\n    stopTrickling() {\n      clearInterval(this.trickleInterval);\n      delete this.trickleInterval;\n    }\n    refresh() {\n      requestAnimationFrame(() => {\n        this.progressElement.style.width = `${10 + this.value * 90}%`;\n      });\n    }\n    createStylesheetElement() {\n      const element = document.createElement(\"style\");\n      element.textContent = _ProgressBar.defaultCSS;\n      return element;\n    }\n    createProgressElement() {\n      const element = document.createElement(\"div\");\n      element.className = \"jax-progress-bar\";\n      return element;\n    }\n  };\n  function getOrCreateInstance() {\n    if (!ProgressBar.instance) {\n      ProgressBar.instance = new ProgressBar();\n    }\n    return ProgressBar.instance;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/request.js\n  var Request = class _Request {\n    constructor(element, handler, options) {\n      this.el = element;\n      this.handler = handler;\n      this.options = { ...this.constructor.DEFAULTS, ...options || {} };\n      this.context = { el: element, handler, options: this.options };\n      this.progressBar = new ProgressBar();\n      this.showProgressBar = () => {\n        this.progressBar.show({ cssClass: \"is-ajax\" });\n      };\n    }\n    static get DEFAULTS() {\n      return {\n        handler: null,\n        update: {},\n        files: false,\n        bulk: false,\n        browserTarget: null,\n        browserValidate: false,\n        browserRedirectBack: false,\n        progressBarDelay: 500,\n        progressBar: null\n      };\n    }\n    start() {\n      this.promise = cancellablePromise();\n      if (!this.applicationAllowsSetup()) {\n        return this.promise;\n      }\n      this.initOtherElements();\n      this.preprocessOptions();\n      this.actions = new Actions(this, this.context, this.options);\n      if (this.actions.invokeFunc(\"beforeSendFunc\") === false) {\n        return this.promise;\n      }\n      if (!this.validateClientSideForm() || !this.applicationAllowsRequest()) {\n        return this.promise;\n      }\n      if (this.options.confirm && !this.actions.invoke(\"handleConfirmMessage\", [this.options.confirm])) {\n        return this.promise;\n      }\n      this.sendInternal();\n      return this.promise;\n    }\n    sendInternal() {\n      const dataObj = new Data(this.options.data, this.el, this.formEl);\n      let data;\n      if (this.options.files) {\n        data = dataObj.getAsFormData();\n      } else if (this.options.bulk) {\n        data = dataObj.getAsJsonData();\n      } else {\n        data = dataObj.getAsQueryString();\n      }\n      if (this.options.query) {\n        this.actions.invoke(\"applyQueryToUrl\", [\n          this.options.query !== true ? this.options.query : JSON.parse(dataObj.getAsJsonData())\n        ]);\n      }\n      const { url, headers, method } = Options.fetch(this.handler, this.options);\n      this.request = new HttpRequest(this, url, { method, headers, data, trackAbort: true });\n      this.isRedirect = this.options.redirect && this.options.redirect.length > 0;\n      this.notifyApplicationBeforeSend();\n      this.notifyApplicationAjaxPromise();\n      this.promise.onCancel(() => {\n        this.request.abort();\n      }).then((data2) => {\n        if (!this.isRedirect) {\n          this.notifyApplicationAjaxDone(data2, data2.$status, data2.$xhr);\n          this.notifyApplicationAjaxAlways(data2, data2.$status, data2.$xhr);\n          this.notifyApplicationSendComplete(data2, data2.$status, data2.$xhr);\n        }\n      }).catch((data2) => {\n        if (!this.isRedirect) {\n          this.notifyApplicationAjaxFail(data2, data2.$status, data2.$xhr);\n          this.notifyApplicationAjaxAlways(data2, data2.$status, data2.$xhr);\n          this.notifyApplicationSendComplete(data2, data2.$status, data2.$xhr);\n        }\n      });\n      this.request.send();\n    }\n    static send(handler, options) {\n      return new _Request(document, handler, options).start();\n    }\n    static sendElement(element, handler, options) {\n      if (typeof element === \"string\") {\n        element = document.querySelector(element);\n      }\n      return new _Request(element, handler, options).start();\n    }\n    toggleRedirect(redirectUrl) {\n      if (!redirectUrl) {\n        this.options.redirect = null;\n        this.isRedirect = false;\n      } else {\n        this.options.redirect = redirectUrl;\n        this.isRedirect = true;\n      }\n    }\n    applicationAllowsSetup() {\n      const event = this.notifyApplicationAjaxSetup();\n      return !event.defaultPrevented;\n    }\n    applicationAllowsRequest() {\n      const event = this.notifyApplicationBeforeRequest();\n      return !event.defaultPrevented;\n    }\n    applicationAllowsUpdate(data, responseCode, xhr) {\n      const event = this.notifyApplicationBeforeUpdate(data, responseCode, xhr);\n      return !event.defaultPrevented;\n    }\n    applicationAllowsError(message, responseCode, xhr) {\n      const event = this.notifyApplicationRequestError(message, responseCode, xhr);\n      return !event.defaultPrevented;\n    }\n    // Application events\n    notifyApplicationAjaxSetup() {\n      return dispatch(\"ajax:setup\", { target: this.el, detail: { context: this.context } });\n    }\n    notifyApplicationAjaxPromise() {\n      return dispatch(\"ajax:promise\", { target: this.el, detail: { context: this.context } });\n    }\n    notifyApplicationAjaxFail(data, responseCode, xhr) {\n      return dispatch(\"ajax:fail\", { target: this.el, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationAjaxDone(data, responseCode, xhr) {\n      return dispatch(\"ajax:done\", { target: this.el, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationAjaxAlways(data, responseCode, xhr) {\n      return dispatch(\"ajax:always\", { target: this.el, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationAjaxUpdate(target, data, responseCode, xhr) {\n      return dispatch(\"ajax:update\", { target, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationBeforeRedirect() {\n      return dispatch(\"ajax:before-redirect\", { target: this.el });\n    }\n    // Container-based events\n    notifyApplicationBeforeRequest() {\n      return dispatch(\"ajax:before-request\", { target: this.triggerEl, detail: { context: this.context } });\n    }\n    notifyApplicationBeforeUpdate(data, responseCode, xhr) {\n      return dispatch(\"ajax:before-update\", { target: this.triggerEl, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationRequestSuccess(data, responseCode, xhr) {\n      return dispatch(\"ajax:request-success\", { target: this.triggerEl, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationRequestError(message, responseCode, xhr) {\n      return dispatch(\"ajax:request-error\", { target: this.triggerEl, detail: { context: this.context, message, responseCode, xhr } });\n    }\n    notifyApplicationRequestComplete(data, responseCode, xhr) {\n      return dispatch(\"ajax:request-complete\", { target: this.triggerEl, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationRequestCancel() {\n      return dispatch(\"ajax:request-cancel\", { target: this.triggerEl, detail: { context: this.context } });\n    }\n    notifyApplicationBeforeValidate(message, fields) {\n      return dispatch(\"ajax:before-validate\", { target: this.triggerEl, detail: { context: this.context, message, fields } });\n    }\n    notifyApplicationBeforeReplace(target) {\n      return dispatch(\"ajax:before-replace\", { target });\n    }\n    // Window-based events\n    notifyApplicationBeforeSend() {\n      return dispatch(\"ajax:before-send\", { target: window, detail: { context: this.context } });\n    }\n    notifyApplicationUpdateComplete(data, responseCode, xhr) {\n      return dispatch(\"ajax:update-complete\", { target: window, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationSendComplete(data, responseCode, xhr) {\n      return dispatch(\"ajax:send-complete\", { target: window, detail: { context: this.context, data, responseCode, xhr } });\n    }\n    notifyApplicationFieldInvalid(element, fieldName, errorMsg, isFirst) {\n      return dispatch(\"ajax:invalid-field\", { target: window, detail: { element, fieldName, errorMsg, isFirst } });\n    }\n    notifyApplicationConfirmMessage(message, promise) {\n      return dispatch(\"ajax:confirm-message\", { target: window, detail: { message, promise } });\n    }\n    notifyApplicationErrorMessage(message) {\n      return dispatch(\"ajax:error-message\", { target: window, detail: { message } });\n    }\n    notifyApplicationCustomEvent(name, data) {\n      return dispatch(name, { target: this.el, detail: data });\n    }\n    // HTTP request delegate\n    requestStarted() {\n      this.markAsProgress(true);\n      this.toggleLoadingElement(true);\n      if (this.options.progressBar) {\n        this.showProgressBarAfterDelay();\n      }\n      this.actions.invoke(\"start\", [this.request.xhr]);\n    }\n    requestProgressed(progress) {\n    }\n    async requestCompletedWithResponse(response, statusCode) {\n      const data = decorateResponse(response, statusCode, this.request.xhr);\n      await this.actions.invoke(\"success\", [data, statusCode, this.request.xhr]);\n      await this.actions.invoke(\"complete\", [data, statusCode, this.request.xhr]);\n      this.promise.resolve(data);\n    }\n    async requestFailedWithStatusCode(statusCode, response) {\n      const data = decorateResponse(response, statusCode, this.request.xhr);\n      if (statusCode == SystemStatusCode.userAborted) {\n        await this.actions.invoke(\"cancel\", []);\n      } else {\n        await this.actions.invoke(\"error\", [data, statusCode, this.request.xhr]);\n      }\n      await this.actions.invoke(\"complete\", [data, statusCode, this.request.xhr]);\n      this.promise.reject(data);\n    }\n    requestFinished() {\n      this.markAsProgress(false);\n      this.toggleLoadingElement(false);\n      if (this.options.progressBar) {\n        this.hideProgressBar();\n      }\n    }\n    // Private\n    initOtherElements() {\n      if (typeof this.options.form === \"string\") {\n        this.formEl = document.querySelector(this.options.form);\n      } else if (this.options.form) {\n        this.formEl = this.options.form;\n      } else {\n        this.formEl = this.el && this.el !== document ? this.el.closest(\"form\") : null;\n      }\n      this.triggerEl = this.formEl || this.el !== document && this.el.closest(\"[data-request-scope]\") || document.body;\n      this.partialEl = this.el && this.el !== document ? this.el.closest(\"[data-ajax-partial]\") : null;\n      this.loadingEl = typeof this.options.loading === \"string\" ? document.querySelector(this.options.loading) : this.options.loading;\n    }\n    preprocessOptions() {\n      if (this.options.partial === void 0 && this.partialEl && this.partialEl.dataset.ajaxPartial !== void 0) {\n        this.options.partial = this.partialEl.dataset.ajaxPartial || true;\n      }\n    }\n    validateClientSideForm() {\n      if (this.options.browserValidate && typeof document.createElement(\"input\").reportValidity === \"function\" && this.formEl && !this.formEl.checkValidity()) {\n        this.formEl.reportValidity();\n        return false;\n      }\n      return true;\n    }\n    toggleLoadingElement(isLoading) {\n      if (!this.loadingEl) {\n        return;\n      }\n      if (typeof this.loadingEl.show !== \"function\" || typeof this.loadingEl.hide !== \"function\") {\n        this.loadingEl.style.display = isLoading ? \"block\" : \"none\";\n        return;\n      }\n      if (isLoading) {\n        this.loadingEl.show();\n      } else {\n        this.loadingEl.hide();\n      }\n    }\n    showProgressBarAfterDelay() {\n      this.progressBar.setValue(0);\n      this.progressBarTimeout = window.setTimeout(this.showProgressBar, this.options.progressBarDelay);\n    }\n    hideProgressBar() {\n      this.progressBar.setValue(100);\n      this.progressBar.hide();\n      if (this.progressBarTimeout != null) {\n        window.clearTimeout(this.progressBarTimeout);\n        delete this.progressBarTimeout;\n      }\n    }\n    markAsProgress(isLoading) {\n      if (isLoading) {\n        document.documentElement.setAttribute(\"data-ajax-progress\", \"\");\n        if (this.formEl) {\n          this.formEl.setAttribute(\"data-ajax-progress\", this.handler);\n        }\n      } else {\n        document.documentElement.removeAttribute(\"data-ajax-progress\");\n        if (this.formEl) {\n          this.formEl.removeAttribute(\"data-ajax-progress\");\n        }\n      }\n    }\n  };\n  function decorateResponse(response, statusCode, xhr) {\n    if (!response || response.constructor !== {}.constructor || !response.__ajax) {\n      return response;\n    }\n    const { __ajax, ...data } = response, envelope = new Envelope(response, statusCode), meta = {\n      env: envelope,\n      status: statusCode,\n      xhr\n    };\n    for (const [key, value] of Object.entries(meta)) {\n      Object.defineProperty(data, `$${key}`, {\n        value,\n        enumerable: false,\n        writable: false,\n        configurable: true\n      });\n    }\n    return data;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/request/namespace.js\n  var namespace_default = Request;\n\n  // ../../vendor/larajax/larajax/resources/src/util/json-parser.js\n  var JsonParser = class _JsonParser {\n    // Public\n    static paramToObj(name, value) {\n      if (value === void 0) {\n        value = \"\";\n      }\n      if (typeof value === \"object\") {\n        return value;\n      }\n      if (value.charAt(0) !== \"{\") {\n        value = \"{\" + value + \"}\";\n      }\n      try {\n        return this.parseJSON(value);\n      } catch (e) {\n        throw new Error(\"Error parsing the \" + name + \" attribute value. \" + e);\n      }\n    }\n    static parseJSON(json) {\n      return JSON.parse(new _JsonParser().parseString(json));\n    }\n    // Private\n    parseString(str) {\n      str = str.trim();\n      if (!str.length) {\n        throw new Error(\"Broken JSON object.\");\n      }\n      var result = \"\";\n      while (str && str[0] === \",\") {\n        str = str.substr(1);\n      }\n      if (str[0] === '\"' || str[0] === \"'\") {\n        if (str[str.length - 1] !== str[0]) {\n          throw new Error(\"Invalid string JSON object.\");\n        }\n        var body = '\"';\n        for (var i = 1; i < str.length; i++) {\n          if (str[i] === \"\\\\\") {\n            if (str[i + 1] === \"'\") {\n              body += str[i + 1];\n            } else {\n              body += str[i];\n              body += str[i + 1];\n            }\n            i++;\n          } else if (str[i] === str[0]) {\n            body += '\"';\n            return body;\n          } else if (str[i] === '\"') {\n            body += '\\\\\"';\n          } else body += str[i];\n        }\n        throw new Error(\"Invalid string JSON object.\");\n      }\n      if (str === \"true\" || str === \"false\") {\n        return str;\n      }\n      if (str === \"null\") {\n        return \"null\";\n      }\n      var num = parseFloat(str);\n      if (!isNaN(num)) {\n        return num.toString();\n      }\n      if (str[0] === \"{\") {\n        var type = \"needKey\";\n        var result = \"{\";\n        for (var i = 1; i < str.length; i++) {\n          if (this.isBlankChar(str[i])) {\n            continue;\n          } else if (type === \"needKey\" && (str[i] === '\"' || str[i] === \"'\")) {\n            var key = this.parseKey(str, i + 1, str[i]);\n            result += '\"' + key + '\"';\n            i += key.length;\n            i += 1;\n            type = \"afterKey\";\n          } else if (type === \"needKey\" && this.canBeKeyHead(str[i])) {\n            var key = this.parseKey(str, i);\n            result += '\"';\n            result += key;\n            result += '\"';\n            i += key.length - 1;\n            type = \"afterKey\";\n          } else if (type === \"afterKey\" && str[i] === \":\") {\n            result += \":\";\n            type = \":\";\n          } else if (type === \":\") {\n            var body = this.getBody(str, i);\n            i = i + body.originLength - 1;\n            result += this.parseString(body.body);\n            type = \"afterBody\";\n          } else if (type === \"afterBody\" || type === \"needKey\") {\n            var last = i;\n            while (str[last] === \",\" || this.isBlankChar(str[last])) {\n              last++;\n            }\n            if (str[last] === \"}\" && last === str.length - 1) {\n              while (result[result.length - 1] === \",\") {\n                result = result.substr(0, result.length - 1);\n              }\n              result += \"}\";\n              return result;\n            } else if (last !== i && result !== \"{\") {\n              result += \",\";\n              type = \"needKey\";\n              i = last - 1;\n            }\n          }\n        }\n        throw new Error(\"Broken JSON object near \" + result);\n      }\n      if (str[0] === \"[\") {\n        var result = \"[\";\n        var type = \"needBody\";\n        for (var i = 1; i < str.length; i++) {\n          if (\" \" === str[i] || \"\\n\" === str[i] || \"\t\" === str[i]) {\n            continue;\n          } else if (type === \"needBody\") {\n            if (str[i] === \",\") {\n              result += \"null,\";\n              continue;\n            }\n            if (str[i] === \"]\" && i === str.length - 1) {\n              if (result[result.length - 1] === \",\") result = result.substr(0, result.length - 1);\n              result += \"]\";\n              return result;\n            }\n            var body = this.getBody(str, i);\n            i = i + body.originLength - 1;\n            result += this.parseString(body.body);\n            type = \"afterBody\";\n          } else if (type === \"afterBody\") {\n            if (str[i] === \",\") {\n              result += \",\";\n              type = \"needBody\";\n              while (str[i + 1] === \",\" || this.isBlankChar(str[i + 1])) {\n                if (str[i + 1] === \",\") result += \"null,\";\n                i++;\n              }\n            } else if (str[i] === \"]\" && i === str.length - 1) {\n              result += \"]\";\n              return result;\n            }\n          }\n        }\n        throw new Error(\"Broken JSON array near \" + result);\n      }\n    }\n    parseKey(str, pos, quote) {\n      var key = \"\";\n      for (var i = pos; i < str.length; i++) {\n        if (quote && quote === str[i]) {\n          return key;\n        } else if (!quote && (str[i] === \" \" || str[i] === \":\")) {\n          return key;\n        }\n        key += str[i];\n        if (str[i] === \"\\\\\" && i + 1 < str.length) {\n          key += str[i + 1];\n          i++;\n        }\n      }\n      throw new Error(\"Broken JSON syntax near \" + key);\n    }\n    getBody(str, pos) {\n      if (str[pos] === '\"' || str[pos] === \"'\") {\n        var body = str[pos];\n        for (var i = pos + 1; i < str.length; i++) {\n          if (str[i] === \"\\\\\") {\n            body += str[i];\n            if (i + 1 < str.length) body += str[i + 1];\n            i++;\n          } else if (str[i] === str[pos]) {\n            body += str[pos];\n            return {\n              originLength: body.length,\n              body\n            };\n          } else body += str[i];\n        }\n        throw new Error(\"Broken JSON string body near \" + body);\n      }\n      if (str[pos] === \"t\") {\n        if (str.indexOf(\"true\", pos) === pos) {\n          return {\n            originLength: \"true\".length,\n            body: \"true\"\n          };\n        }\n        throw new Error(\"Broken JSON boolean body near \" + str.substr(0, pos + 10));\n      }\n      if (str[pos] === \"f\") {\n        if (str.indexOf(\"f\", pos) === pos) {\n          return {\n            originLength: \"false\".length,\n            body: \"false\"\n          };\n        }\n        throw new Error(\"Broken JSON boolean body near \" + str.substr(0, pos + 10));\n      }\n      if (str[pos] === \"n\") {\n        if (str.indexOf(\"null\", pos) === pos) {\n          return {\n            originLength: \"null\".length,\n            body: \"null\"\n          };\n        }\n        throw new Error(\"Broken JSON boolean body near \" + str.substr(0, pos + 10));\n      }\n      if (str[pos] === \"-\" || str[pos] === \"+\" || str[pos] === \".\" || str[pos] >= \"0\" && str[pos] <= \"9\") {\n        var body = \"\";\n        for (var i = pos; i < str.length; i++) {\n          if (str[i] === \"-\" || str[i] === \"+\" || str[i] === \".\" || str[i] >= \"0\" && str[i] <= \"9\") {\n            body += str[i];\n          } else {\n            return {\n              originLength: body.length,\n              body\n            };\n          }\n        }\n        throw new Error(\"Broken JSON number body near \" + body);\n      }\n      if (str[pos] === \"{\" || str[pos] === \"[\") {\n        var stack = [str[pos]];\n        var body = str[pos];\n        for (var i = pos + 1; i < str.length; i++) {\n          body += str[i];\n          if (str[i] === \"\\\\\") {\n            if (i + 1 < str.length) body += str[i + 1];\n            i++;\n          } else if (str[i] === '\"') {\n            if (stack[stack.length - 1] === '\"') {\n              stack.pop();\n            } else if (stack[stack.length - 1] !== \"'\") {\n              stack.push(str[i]);\n            }\n          } else if (str[i] === \"'\") {\n            if (stack[stack.length - 1] === \"'\") {\n              stack.pop();\n            } else if (stack[stack.length - 1] !== '\"') {\n              stack.push(str[i]);\n            }\n          } else if (stack[stack.length - 1] !== '\"' && stack[stack.length - 1] !== \"'\") {\n            if (str[i] === \"{\") {\n              stack.push(\"{\");\n            } else if (str[i] === \"}\") {\n              if (stack[stack.length - 1] === \"{\") {\n                stack.pop();\n              } else {\n                throw new Error(\"Broken JSON \" + (str[pos] === \"{\" ? \"object\" : \"array\") + \" body near \" + body);\n              }\n            } else if (str[i] === \"[\") {\n              stack.push(\"[\");\n            } else if (str[i] === \"]\") {\n              if (stack[stack.length - 1] === \"[\") {\n                stack.pop();\n              } else {\n                throw new Error(\"Broken JSON \" + (str[pos] === \"{\" ? \"object\" : \"array\") + \" body near \" + body);\n              }\n            }\n          }\n          if (!stack.length) {\n            return {\n              originLength: i - pos,\n              body\n            };\n          }\n        }\n        throw new Error(\"Broken JSON \" + (str[pos] === \"{\" ? \"object\" : \"array\") + \" body near \" + body);\n      }\n      throw new Error(\"Broken JSON body near \" + str.substr(pos - 5 >= 0 ? pos - 5 : 0, 50));\n    }\n    canBeKeyHead(ch) {\n      if (ch[0] === \"\\\\\") return false;\n      if (ch[0] >= \"a\" && ch[0] <= \"z\" || ch[0] >= \"A\" && ch[0] <= \"Z\" || ch[0] === \"_\") return true;\n      if (ch[0] >= \"0\" && ch[0] <= \"9\") return true;\n      if (ch[0] === \"$\") return true;\n      if (ch.charCodeAt(0) > 255) return true;\n      return false;\n    }\n    isBlankChar(ch) {\n      return ch === \" \" || ch === \"\\n\" || ch === \"\t\";\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/core/request-builder.js\n  var RequestBuilder = class _RequestBuilder {\n    constructor(element, handler, options) {\n      this.options = options || {};\n      this.ogElement = element;\n      this.element = this.findElement(element);\n      if (!this.element) {\n        return namespace_default.send(\n          this.normalizeHandler(handler),\n          this.options\n        );\n      }\n      this.assignAsEval(\"beforeSendFunc\", \"requestBeforeSend\");\n      this.assignAsEval(\"beforeUpdateFunc\", \"requestBeforeUpdate\");\n      this.assignAsEval(\"afterUpdateFunc\", \"requestAfterUpdate\");\n      this.assignAsEval(\"successFunc\", \"requestSuccess\");\n      this.assignAsEval(\"errorFunc\", \"requestError\");\n      this.assignAsEval(\"cancelFunc\", \"requestCancel\");\n      this.assignAsEval(\"completeFunc\", \"requestComplete\");\n      this.assignAsData(\"progressBar\", \"requestProgressBar\");\n      this.assignAsData(\"message\", \"requestMessage\");\n      this.assignAsData(\"confirm\", \"requestConfirm\");\n      this.assignAsData(\"redirect\", \"requestRedirect\");\n      this.assignAsData(\"loading\", \"requestLoading\");\n      this.assignAsData(\"form\", \"requestForm\");\n      this.assignAsData(\"url\", \"requestUrl\");\n      this.assignAsData(\"bulk\", \"requestBulk\", { emptyAsTrue: true });\n      this.assignAsData(\"files\", \"requestFiles\", { emptyAsTrue: true });\n      this.assignAsData(\"flash\", \"requestFlash\", { emptyAsTrue: true });\n      this.assignAsData(\"update\", \"requestUpdate\", { parseJson: true });\n      this.assignAsData(\"query\", \"requestQuery\", { emptyAsTrue: true, parseJson: true });\n      this.assignAsData(\"browserTarget\", \"browserTarget\");\n      this.assignAsData(\"browserValidate\", \"browserValidate\", { emptyAsTrue: true });\n      this.assignAsData(\"browserRedirectBack\", \"browserRedirectBack\", { emptyAsTrue: true });\n      this.assignAsMetaData(\"update\", \"ajaxRequestUpdate\", { parseJson: true, mergeValue: true });\n      this.assignRequestData();\n      if (!handler) {\n        handler = this.getHandlerName();\n      }\n      return namespace_default.sendElement(\n        this.element,\n        this.normalizeHandler(handler),\n        this.options\n      );\n    }\n    static fromElement(element, handler, options) {\n      if (typeof element === \"string\") {\n        element = document.querySelector(element);\n      }\n      return new _RequestBuilder(element, handler, options);\n    }\n    // Event target may some random node inside the data-request container\n    // so it should bubble up but also capture the ogElement in case it is\n    // a button that contains data-request-data.\n    findElement(element) {\n      if (!element || element === document) {\n        return null;\n      }\n      if (element.matches(\"[data-request]\")) {\n        return element;\n      }\n      var parentEl = element.closest(\"[data-request]\");\n      if (parentEl) {\n        return parentEl;\n      }\n      return element;\n    }\n    getHandlerName() {\n      if (this.element.dataset.dataRequest) {\n        return this.element.dataset.dataRequest;\n      }\n      return this.element.getAttribute(\"data-request\");\n    }\n    normalizeHandler(handler) {\n      if (handler && !isValidHandler(handler)) {\n        if (this.options.url === void 0) {\n          this.options.url = handler;\n        }\n        return \"onAjax\";\n      }\n      return handler;\n    }\n    assignAsEval(optionName, name) {\n      if (this.options[optionName] !== void 0) {\n        return;\n      }\n      var attrVal;\n      if (this.element.dataset[name]) {\n        attrVal = this.element.dataset[name];\n      } else {\n        attrVal = this.element.getAttribute(\"data-\" + normalizeDataKey(name));\n      }\n      if (!attrVal) {\n        return;\n      }\n      this.options[optionName] = function(element, context, data) {\n        return new Function(\"context\", \"data\", attrVal).apply(element, [context, data]);\n      };\n    }\n    assignAsData(optionName, name, { parseJson = false, emptyAsTrue = false } = {}) {\n      if (this.options[optionName] !== void 0) {\n        return;\n      }\n      var attrVal;\n      if (this.element.dataset[name]) {\n        attrVal = this.element.dataset[name];\n      } else {\n        attrVal = this.element.getAttribute(\"data-\" + normalizeDataKey(name));\n      }\n      if (attrVal === null) {\n        return;\n      }\n      attrVal = this.castAttrToOption(attrVal, emptyAsTrue);\n      if (parseJson && typeof attrVal === \"string\") {\n        attrVal = JsonParser.paramToObj(\n          \"data-\" + normalizeDataKey(name),\n          attrVal\n        );\n      }\n      this.options[optionName] = attrVal;\n    }\n    assignAsMetaData(optionName, name, { mergeValue = true, parseJson = false, emptyAsTrue = false } = {}) {\n      const meta = document.documentElement.querySelector('head meta[name=\"' + normalizeDataKey(name) + '\"]');\n      if (!meta) {\n        return;\n      }\n      var attrVal = meta.getAttribute(\"content\");\n      if (parseJson) {\n        attrVal = JsonParser.paramToObj(normalizeDataKey(name), attrVal);\n      } else {\n        attrVal = this.castAttrToOption(attrVal, emptyAsTrue);\n      }\n      if (mergeValue) {\n        this.options[optionName] = {\n          ...this.options[optionName] || {},\n          ...attrVal\n        };\n      } else {\n        this.options[optionName] = attrVal;\n      }\n    }\n    castAttrToOption(val, emptyAsTrue) {\n      if (emptyAsTrue && val === \"\") {\n        return true;\n      }\n      if (val === \"true\" || val === \"1\") {\n        return true;\n      }\n      if (val === \"false\" || val === \"0\") {\n        return false;\n      }\n      return val;\n    }\n    assignRequestData() {\n      const data = {};\n      elementParents(this.ogElement, \"[data-request-data]\").forEach(function(el) {\n        Object.assign(data, JsonParser.paramToObj(\n          \"data-request-data\",\n          el.getAttribute(\"data-request-data\")\n        ));\n      });\n      const attr = this.ogElement.getAttribute(\"data-request-data\");\n      if (attr) {\n        Object.assign(data, JsonParser.paramToObj(\"data-request-data\", attr));\n      }\n      if (this.options.data) {\n        Object.assign(data, this.options.data);\n      }\n      this.options.data = data;\n    }\n  };\n  function elementParents(element, selector) {\n    const parents = [];\n    if (!element.parentNode) {\n      return parents;\n    }\n    let ancestor = element.parentNode.closest(selector);\n    while (ancestor) {\n      parents.push(ancestor);\n      ancestor = ancestor.parentNode.closest(selector);\n    }\n    return parents;\n  }\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);\n  }\n  function isValidHandler(str) {\n    return /^(?:\\w+\\:{2})?on[A-Z]{1}[\\w+]*$/.test(str);\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/core/trigger.js\n  var Trigger = class {\n    constructor(element) {\n      this.element = element;\n      this.config = this.parse();\n      this.timer = null;\n      this.throttleTimer = null;\n      this.lastValue = null;\n      this.fired = false;\n      this.throttled = false;\n      this.lastRequest = null;\n    }\n    /**\n     * Parse trigger configuration from element attributes\n     */\n    parse() {\n      let trigger = this.element.dataset.requestTrigger;\n      let poll = this.element.dataset.requestPoll;\n      if (!trigger && this.element.dataset.trackInput !== void 0) {\n        const delay = this.element.dataset.trackInput || 300;\n        trigger = `input changed delay:${delay}`;\n      }\n      if (!trigger && this.element.dataset.autoSubmit !== void 0) {\n        const delay = this.element.dataset.autoSubmit || 0;\n        trigger = delay > 0 ? `load delay:${delay}` : \"load\";\n      }\n      if (!trigger) {\n        trigger = this.getDefaultTrigger();\n      }\n      const config = this.parseString(trigger);\n      if (poll) {\n        config.poll = this.parseTime(poll);\n      }\n      return config;\n    }\n    /**\n     * Parse trigger string into config object\n     * Format: \"event modifier modifier:value\"\n     * Example: \"input changed delay:500\"\n     */\n    parseString(str) {\n      const parts = str.trim().split(/\\s+/);\n      const config = {\n        event: parts[0] || \"click\",\n        delay: 0,\n        throttle: 0,\n        once: false,\n        changed: false,\n        poll: 0\n      };\n      for (let i = 1; i < parts.length; i++) {\n        const part = parts[i];\n        if (part === \"once\") {\n          config.once = true;\n        } else if (part === \"changed\") {\n          config.changed = true;\n        } else if (part.startsWith(\"delay:\")) {\n          config.delay = this.parseTime(part.slice(6));\n        } else if (part.startsWith(\"throttle:\")) {\n          config.throttle = this.parseTime(part.slice(9));\n        }\n      }\n      return config;\n    }\n    /**\n     * Parse time value to milliseconds\n     * Supports: 500, 500ms, 1s, 1.5s\n     */\n    parseTime(value) {\n      if (typeof value === \"number\") {\n        return value;\n      }\n      value = String(value).trim();\n      if (value.endsWith(\"ms\")) {\n        return parseFloat(value);\n      }\n      if (value.endsWith(\"s\")) {\n        return parseFloat(value) * 1e3;\n      }\n      return parseInt(value, 10) || 0;\n    }\n    /**\n     * Get default trigger based on element type\n     */\n    getDefaultTrigger() {\n      const el = this.element;\n      const tag = el.tagName.toLowerCase();\n      const type = el.getAttribute(\"type\")?.toLowerCase();\n      if (tag === \"form\") return \"submit\";\n      if (tag === \"a\") return \"click\";\n      if (tag === \"button\") return \"click\";\n      if (tag === \"select\") return \"change\";\n      if (type === \"checkbox\" || type === \"radio\" || type === \"file\") return \"change\";\n      if (type === \"date\" || type === \"datetime-local\" || type === \"time\" || type === \"month\" || type === \"week\" || type === \"color\" || type === \"range\") return \"change\";\n      if (tag === \"input\" && (type === \"submit\" || type === \"button\")) return \"click\";\n      if (tag === \"input\") return \"click\";\n      return \"click\";\n    }\n    /**\n     * Check if element is still connected to DOM\n     */\n    isConnected() {\n      return this.element.isConnected;\n    }\n    /**\n     * Bind event listeners for invented events only.\n     * Standard DOM events (click, submit, change, input) are handled\n     * via document-level delegation in Controller.\n     */\n    bind() {\n      const { event } = this.config;\n      if (event === \"load\") {\n        dispatch(\"ajax:trigger\", { target: this.element });\n      } else if (event === \"revealed\" || event === \"intersect\") {\n        this.observeVisibility();\n      }\n    }\n    /**\n     * Handle the trigger event\n     */\n    handleEvent(event) {\n      if (!this.isConnected()) {\n        return;\n      }\n      if (event && (this.config.event === \"submit\" || this.config.event === \"click\")) {\n        event.preventDefault();\n      }\n      const { delay, throttle, once, changed } = this.config;\n      if (once && this.fired) {\n        return;\n      }\n      if (changed && !this.hasChanged()) {\n        return;\n      }\n      if (this.timer) {\n        clearTimeout(this.timer);\n        this.timer = null;\n      }\n      if (throttle > 0 && this.throttled) {\n        return;\n      }\n      if (delay > 0) {\n        this.timer = setTimeout(() => this.fire(), delay);\n      } else {\n        this.fire();\n      }\n    }\n    /**\n     * Check if the element value has changed\n     */\n    hasChanged() {\n      const value = this.element.value;\n      if (this.lastValue === value) {\n        return false;\n      }\n      this.lastValue = value;\n      return true;\n    }\n    /**\n     * Fire the actual request\n     */\n    fire() {\n      if (!this.isConnected()) {\n        return;\n      }\n      if (this.lastRequest && this.lastRequest.abort) {\n        this.lastRequest.abort();\n      }\n      this.fired = true;\n      this.lastRequest = RequestBuilder.fromElement(this.element);\n      if (this.config.throttle > 0) {\n        this.throttled = true;\n        this.throttleTimer = setTimeout(() => {\n          this.throttled = false;\n        }, this.config.throttle);\n      }\n    }\n    /**\n     * Observe element visibility for revealed/intersect events\n     */\n    observeVisibility() {\n      const observer = new IntersectionObserver((entries) => {\n        entries.forEach((entry) => {\n          if (!this.isConnected()) {\n            observer.disconnect();\n            return;\n          }\n          if (entry.isIntersecting) {\n            dispatch(\"ajax:trigger\", { target: this.element });\n            if (this.config.once || this.config.event === \"intersect\") {\n              observer.disconnect();\n            }\n          }\n        });\n      }, {\n        threshold: 0.1\n      });\n      observer.observe(this.element);\n    }\n    /**\n     * Start polling interval\n     */\n    startPolling() {\n      const intervalId = setInterval(() => {\n        if (!this.isConnected()) {\n          clearInterval(intervalId);\n          return;\n        }\n        if (!document.hidden) {\n          dispatch(\"ajax:trigger\", { target: this.element });\n        }\n      }, this.config.poll);\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/util/wait.js\n  function waitFor(predicate, timeout) {\n    return new Promise((resolve, reject) => {\n      const check = () => {\n        if (!predicate()) {\n          return;\n        }\n        clearInterval(interval);\n        resolve();\n      };\n      const interval = setInterval(check, 100);\n      check();\n      if (!timeout) {\n        return;\n      }\n      setTimeout(() => {\n        clearInterval(interval);\n        reject();\n      }, timeout);\n    });\n  }\n  function domReady() {\n    return new Promise((resolve) => {\n      if (document.readyState === \"loading\") {\n        document.addEventListener(\"DOMContentLoaded\", () => resolve());\n      } else {\n        resolve();\n      }\n    });\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/core/controller.js\n  var Controller = class {\n    constructor() {\n      this.started = false;\n      this.triggers = /* @__PURE__ */ new WeakMap();\n    }\n    start() {\n      if (!this.started) {\n        addEventListener(\"beforeunload\", this.documentOnBeforeUnload);\n        Events.on(document, \"click\", \"[data-request]\", this.onTriggerEvent);\n        Events.on(document, \"submit\", \"[data-request]\", this.onTriggerEvent);\n        Events.on(document, \"change\", \"[data-request]\", this.onTriggerEvent);\n        Events.on(document, \"input\", \"[data-request]\", this.onTriggerEvent);\n        Events.on(document, \"ajax:trigger\", \"[data-request]\", this.onTriggerEvent);\n        addEventListener(\"DOMContentLoaded\", this.onRender);\n        addEventListener(\"page:updated\", this.onRender);\n        addEventListener(\"ajax:update-complete\", this.onRender);\n        this.started = true;\n      }\n    }\n    stop() {\n      if (this.started) {\n        removeEventListener(\"beforeunload\", this.documentOnBeforeUnload);\n        Events.off(document, \"click\", \"[data-request]\", this.onTriggerEvent);\n        Events.off(document, \"submit\", \"[data-request]\", this.onTriggerEvent);\n        Events.off(document, \"change\", \"[data-request]\", this.onTriggerEvent);\n        Events.off(document, \"input\", \"[data-request]\", this.onTriggerEvent);\n        Events.off(document, \"ajax:trigger\", \"[data-request]\", this.onTriggerEvent);\n        removeEventListener(\"DOMContentLoaded\", this.onRender);\n        removeEventListener(\"page:updated\", this.onRender);\n        removeEventListener(\"ajax:update-complete\", this.onRender);\n        this.started = false;\n      }\n    }\n    onRender = () => {\n      this.render();\n    };\n    render() {\n      Events.dispatch(\"before-render\");\n      Events.dispatch(\"render\");\n      dispatchEvent(new Event(\"resize\"));\n      this.bindCustomTriggers();\n    }\n    /**\n     * Initialize triggers for custom events (load, revealed, intersect)\n     * Native events (click, submit, change, input) are handled by document delegation\n     */\n    bindCustomTriggers() {\n      document.querySelectorAll(\"[data-request]:not([data-trigger-bound])\").forEach((el) => {\n        const trigger = this.getTrigger(el);\n        const eventType = trigger.config.event;\n        if (eventType === \"load\" || eventType === \"revealed\" || eventType === \"intersect\") {\n          el.setAttribute(\"data-trigger-bound\", \"\");\n          trigger.bind();\n        }\n        if (trigger.config.poll > 0) {\n          el.setAttribute(\"data-trigger-bound\", \"\");\n          trigger.startPolling();\n        }\n      });\n    }\n    /**\n     * Get or create a Trigger instance for an element\n     */\n    getTrigger(el) {\n      let trigger = this.triggers.get(el);\n      if (!trigger) {\n        trigger = new Trigger(el);\n        this.triggers.set(el, trigger);\n      }\n      return trigger;\n    }\n    /**\n     * Handle delegated trigger events\n     */\n    onTriggerEvent = (event) => {\n      const el = event.delegateTarget;\n      const trigger = this.getTrigger(el);\n      const configEvent = trigger.config.event;\n      if (event.type === \"ajax:trigger\") {\n        trigger.handleEvent(event);\n        return;\n      }\n      if (event.type === configEvent) {\n        trigger.handleEvent(event);\n      }\n    };\n    documentOnBeforeUnload(event) {\n      window.jaxUnloading = true;\n    }\n    /**\n     * Wait for the page to be ready.\n     * Uses Turbo's pageReady if available, otherwise falls back to domReady.\n     */\n    pageReady() {\n      return turboPageReady() ?? domReady();\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/core/namespace.js\n  var controller = new Controller();\n  var namespace_default2 = {\n    controller,\n    parseJSON: JsonParser.parseJSON,\n    serializeAsJSON: FormSerializer.serializeAsJSON,\n    requestElement: RequestBuilder.fromElement,\n    pageReady() {\n      return controller.pageReady();\n    },\n    start() {\n      controller.start();\n    },\n    stop() {\n      controller.stop();\n    }\n  };\n\n  // ../../vendor/larajax/larajax/resources/src/util/jax-builder.js\n  function buildJaxObject(modules) {\n    const {\n      AjaxFramework,\n      AjaxRequest,\n      AssetManager: AssetManager2,\n      Events: Events2,\n      waitFor: waitFor2,\n      visit,\n      // Optional modules\n      AjaxExtras,\n      AjaxObserve,\n      AjaxTurbo,\n      ControlBase\n    } = modules;\n    const jax = {\n      // Request\n      AjaxRequest,\n      AssetManager: AssetManager2,\n      ajax: AjaxRequest.send,\n      // Core\n      AjaxFramework,\n      request: AjaxFramework.requestElement,\n      parseJSON: AjaxFramework.parseJSON,\n      values: AjaxFramework.serializeAsJSON,\n      pageReady: AjaxFramework.pageReady,\n      // Util\n      Events: Events2,\n      dispatch: Events2.dispatch,\n      trigger: Events2.trigger,\n      on: Events2.on,\n      off: Events2.off,\n      one: Events2.one,\n      waitFor: waitFor2,\n      visit\n    };\n    if (AjaxExtras) {\n      jax.AjaxExtras = AjaxExtras;\n      jax.flashMsg = AjaxExtras.flashMsg;\n      jax.progressBar = AjaxExtras.progressBar;\n      jax.attachLoader = AjaxExtras.attachLoader;\n    }\n    if (AjaxObserve) {\n      jax.AjaxObserve = AjaxObserve;\n      jax.registerControl = AjaxObserve.registerControl;\n      jax.importControl = AjaxObserve.importControl;\n      jax.observeControl = AjaxObserve.observeControl;\n      jax.fetchControl = AjaxObserve.fetchControl;\n      jax.fetchControls = AjaxObserve.fetchControls;\n    }\n    if (ControlBase) {\n      jax.ControlBase = ControlBase;\n    }\n    if (AjaxTurbo) {\n      registerTurbo(AjaxTurbo);\n      jax.AjaxTurbo = AjaxTurbo;\n      jax.useTurbo = AjaxTurbo.isEnabled;\n    }\n    return jax;\n  }\n\n  // ../../vendor/larajax/larajax/resources/src/framework.js\n  if (!window.jax) {\n    window.jax = {};\n  }\n  Object.assign(window.jax, buildJaxObject({\n    AjaxFramework: namespace_default2,\n    AjaxRequest: namespace_default,\n    AssetManager,\n    Events,\n    waitFor,\n    visit: (url) => window.location.assign(url)\n  }));\n  namespace_default2.start();\n\n  // assets/vendor/larajax/migrate.js\n  window.oc = window.jax;\n  window.oc.serializeJSON = window.oc.values;\n  (function() {\n    var $ = window[\"jQuery\"];\n    if ($ === void 0) {\n      return;\n    }\n    bindRequestFunc();\n    bindRenderFunc();\n    bindjQueryEvents();\n    bindOcNamespace();\n    function bindRequestFunc() {\n      var old = $.fn.request;\n      $.fn.request = function(handler, option) {\n        var options = typeof option === \"object\" ? option : {};\n        return oc.request(this.get(0), handler, options);\n      };\n      $.fn.request.Constructor = oc.request;\n      $.request = function(handler, option) {\n        return $(document).request(handler, option);\n      };\n      $.fn.request.noConflict = function() {\n        $.fn.request = old;\n        return this;\n      };\n    }\n    function bindRenderFunc() {\n      $.fn.render = function(callback) {\n        $(document).on(\"render\", callback);\n      };\n    }\n    function bindOcNamespace() {\n      if ($.oc === void 0) {\n        $.oc = {};\n      }\n      $.oc.flashMsg = window.jax.flashMsg;\n      $.oc.stripeLoadIndicator = window.jax.progressBar;\n    }\n    function bindjQueryEvents() {\n      migratejQueryEvent(document, \"ajax:setup\", \"ajaxSetup\", [\"context\"]);\n      migratejQueryEvent(document, \"ajax:promise\", \"ajaxPromise\", [\"context\"]);\n      migratejQueryEvent(document, \"ajax:fail\", \"ajaxFail\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:done\", \"ajaxDone\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:always\", \"ajaxAlways\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:before-redirect\", \"ajaxRedirect\");\n      migratejQueryEvent(document, \"ajax:update\", \"ajaxUpdate\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:before-replace\", \"ajaxBeforeReplace\");\n      migratejQueryEvent(document, \"ajax:before-request\", \"oc.beforeRequest\", [\"context\"]);\n      migratejQueryEvent(document, \"ajax:before-update\", \"ajaxBeforeUpdate\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:request-success\", \"ajaxSuccess\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:request-complete\", \"ajaxComplete\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:request-error\", \"ajaxError\", [\"context\", \"message\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(document, \"ajax:before-validate\", \"ajaxValidation\", [\"context\", \"message\", \"fields\"]);\n      migratejQueryEvent(window, \"ajax:before-send\", \"ajaxBeforeSend\", [\"context\"]);\n      migratejQueryEvent(window, \"ajax:update-complete\", \"ajaxUpdateComplete\", [\"context\", \"data\", \"responseCode\", \"xhr\"]);\n      migratejQueryEvent(window, \"ajax:invalid-field\", \"ajaxInvalidField\", [\"element\", \"fieldName\", \"errorMsg\", \"isFirst\"]);\n      migratejQueryEvent(window, \"ajax:confirm-message\", \"ajaxConfirmMessage\", [\"message\", \"promise\"]);\n      migratejQueryEvent(window, \"ajax:error-message\", \"ajaxErrorMessage\", [\"message\"]);\n      migratejQueryAttachData(document, \"ajax:setup\", \"a[data-request], button[data-request], form[data-request], a[data-handler], button[data-handler]\");\n    }\n    function migratejQueryEvent(target, jsName, jqName, detailNames) {\n      detailNames = detailNames || [];\n      $(target).on(jsName, function(ev) {\n        triggerjQueryEvent(ev.originalEvent, jqName, detailNames);\n      });\n    }\n    function triggerjQueryEvent(ev, eventName, detailNames) {\n      detailNames = detailNames || [];\n      var jQueryEvent = $.Event(eventName), args = buildDetailArgs(ev, detailNames);\n      $(ev.target).trigger(jQueryEvent, args);\n      if (jQueryEvent.isDefaultPrevented()) {\n        ev.preventDefault();\n      }\n    }\n    function buildDetailArgs(ev, detailNames) {\n      var args = [];\n      detailNames.forEach(function(name) {\n        args.push(ev.detail[name]);\n      });\n      return args;\n    }\n    function migratejQueryAttachData(target, eventName, selector) {\n      $(target).on(eventName, selector, function(event) {\n        var dataObj = $(this).data(\"request-data\");\n        if (!dataObj) {\n          return;\n        }\n        var options = event.detail.context.options;\n        if (dataObj.constructor === {}.constructor) {\n          Object.assign(options.data, dataObj);\n        } else if (typeof dataObj === \"string\") {\n          Object.assign(options.data, paramToObj(\"request-data\", dataObj));\n        }\n      });\n    }\n    function paramToObj(name, value) {\n      if (value === void 0) {\n        value = \"\";\n      }\n      if (typeof value === \"object\") {\n        return value;\n      }\n      if (value.charAt(0) !== \"{\") {\n        value = \"{\" + value + \"}\";\n      }\n      try {\n        return oc.parseJSON(value);\n      } catch (e) {\n        throw new Error(\"Error parsing the \" + name + \" attribute value. \" + e);\n      }\n    }\n  })();\n})();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.ar.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/ar/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['ar'] = Object.assign(\n    window.oc.langMessages['ar'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u0627\\u0644\\u062a\\u0646\\u0633\\u064a\\u0642\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ar\",[],function(){return{errorLoading:function(){return\"لا يمكن تحميل النتائج\"},inputTooLong:function(n){return\"الرجاء حذف \"+(n.input.length-n.maximum)+\" عناصر\"},inputTooShort:function(n){return\"الرجاء إضافة \"+(n.minimum-n.input.length)+\" عناصر\"},loadingMore:function(){return\"جاري تحميل نتائج إضافية...\"},maximumSelected:function(n){return\"تستطيع إختيار \"+n.maximum+\" بنود فقط\"},noResults:function(){return\"لم يتم العثور على أي نتائج\"},searching:function(){return\"جاري البحث…\"},removeAllItems:function(){return\"قم بإزالة كل العناصر\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.be.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/be/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['be'] = Object.assign(\n    window.oc.langMessages['be'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u0424\\u0430\\u0440\\u043c\\u0430\\u0442\\u0430\\u0432\\u0430\\u043d\\u043d\\u0435\",\n        \"quote\": \"\\u0426\\u044b\\u0442\\u0430\\u0442\\u0430\",\n        \"code\": \"\\u041a\\u043e\\u0434\",\n        \"header1\": \"\\u0417\\u0430\\u0433\\u0430\\u043b\\u043e\\u0432\\u0430\\u043a 1\",\n        \"header2\": \"\\u0417\\u0430\\u0433\\u0430\\u043b\\u043e\\u0432\\u0430\\u043a 2\",\n        \"header3\": \"\\u0417\\u0430\\u0433\\u0430\\u043b\\u043e\\u0432\\u0430\\u043a 3\",\n        \"header4\": \"\\u0417\\u0430\\u0433\\u0430\\u043b\\u043e\\u0432\\u0430\\u043a 4\",\n        \"header5\": \"\\u0417\\u0430\\u0433\\u0430\\u043b\\u043e\\u0432\\u0430\\u043a 5\",\n        \"header6\": \"\\u0417\\u0430\\u0433\\u0430\\u043b\\u043e\\u0432\\u0430\\u043a 6\",\n        \"bold\": \"\\u0422\\u043e\\u045e\\u0441\\u0442\\u044b \\u0448\\u0440\\u044b\\u0444\\u0442\",\n        \"italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0456\\u045e\",\n        \"unorderedlist\": \"\\u041d\\u0435\\u0441\\u0430\\u0440\\u0442\\u0430\\u0432\\u0430\\u043d\\u044b \\u043b\\u0456\\u0441\\u0442\",\n        \"orderedlist\": \"\\u0421\\u0430\\u0440\\u0442\\u0430\\u0432\\u0430\\u043d\\u044b \\u043b\\u0456\\u0441\\u0442\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\u0412\\u0456\\u0434\\u044d\\u0430\",\n        \"image\": \"\\u0412\\u044b\\u044f\\u0432\\u0430\",\n        \"link\": \"\\u0421\\u043f\\u0430\\u0441\\u044b\\u043b\\u043a\\u0430\",\n        \"horizontalrule\": \"Insert Horizontal Rul\",\n        \"fullscreen\": \"\\u041f\\u043e\\u045e\\u043d\\u044b \\u044d\\u043a\\u0440\\u0430\\u043d\",\n        \"preview\": \"\\u041f\\u0440\\u0430\\u0434\\u043f\\u0440\\u0430\\u0433\\u043b\\u044f\\u0434\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u0423\\u0441\\u0442\\u0430\\u0432\\u0456\\u0446\\u044c \\u043c\\u0435\\u0434\\u044b\\u044f \\u0441\\u043f\\u0430\\u0441\\u044b\\u043b\\u043a\\u0443\",\n        \"insert_image\": \"\\u0423\\u0441\\u0442\\u0430\\u0432\\u0456\\u0446\\u044c \\u043c\\u0435\\u0434\\u044b\\u044f \\u0432\\u044b\\u044f\\u0432\\u0443\",\n        \"insert_video\": \"\\u0423\\u0441\\u0442\\u0430\\u0432\\u0456\\u0446\\u044c \\u043c\\u0435\\u0434\\u044b\\u044f \\u0432\\u0456\\u0434\\u044d\\u0430\",\n        \"insert_audio\": \"\\u0423\\u0441\\u0442\\u0430\\u0432\\u0456\\u0446\\u044c \\u043c\\u0435\\u0434\\u044b\\u044f \\u0430\\u045e\\u0434\\u044b\\u0451\",\n        \"invalid_file_empty_insert\": \"\\u041a\\u0430\\u043b\\u0456 \\u043b\\u0430\\u0441\\u043a\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u044b\\u0446\\u0435 \\u0444\\u0430\\u0439\\u043b, \\u043a\\u0430\\u0431 \\u0443\\u0441\\u0442\\u0430\\u0432\\u0456\\u0446\\u044c \\u0441\\u043f\\u0430\\u0441\\u044b\\u043b\\u043a\\u0443\",\n        \"invalid_file_single_insert\": \"\\u041a\\u0430\\u043b\\u0456 \\u043b\\u0430\\u0441\\u043a\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u044b\\u0446\\u0435 \\u0430\\u0434\\u0437\\u0456\\u043d \\u0444\\u0430\\u0439\\u043b\",\n        \"invalid_image_empty_insert\": \"\\u041a\\u0430\\u043b\\u0456 \\u043b\\u0430\\u0441\\u043a\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u044b\\u0446\\u0435 \\u0432\\u044b\\u044f\\u0432\\u044b, \\u043a\\u0430\\u0431 \\u0443\\u0441\\u0442\\u0430\\u0432\\u0456\\u0446\\u044c\",\n        \"invalid_video_empty_insert\": \"\\u041a\\u0430\\u043b\\u0456 \\u043b\\u0430\\u0441\\u043a\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u044b\\u0446\\u0435 \\u0432\\u0456\\u0434\\u044d\\u0430 \\u0444\\u0430\\u0439\\u043b, \\u043a\\u0430\\u0431 \\u0443\\u0441\\u0442\\u0430\\u0432\\u0456\\u0446\\u044c\",\n        \"invalid_audio_empty_insert\": \"\\u041a\\u0430\\u043b\\u0456 \\u043b\\u0430\\u0441\\u043a\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u044b\\u0446\\u0435 \\u0430\\u045e\\u0434\\u044b\\u0451 \\u0444\\u0430\\u0439\\u043b, \\u043a\\u0430\\u0431 \\u0443\\u0441\\u0442\\u0430\\u0432\\u0456\\u0446\\u044c\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"\\u0414\\u043e\\u0431\\u0440\\u0430\",\n        \"cancel_button_text\": \"\\u0410\\u0434\\u043c\\u0435\\u043d\\u0430\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\u041f\\u0430\\u043f\\u044f\\u0440\\u044d\\u0434\\u043d\\u0456 \\u043c\\u0435\\u0441\\u044f\\u0446\",\n        \"nextMonth\": \"\\u041d\\u0430\\u0441\\u0442\\u0443\\u043f\\u043d\\u044b \\u043c\\u0435\\u0441\\u044f\\u0446\",\n        \"months\": [\n            \"\\u0421\\u0442\\u0443\\u0434\\u0437\\u0435\\u043d\\u044c\",\n            \"\\u041b\\u044e\\u0442\\u044b\",\n            \"\\u0421\\u0430\\u043a\\u0430\\u0432\\u0456\\u043a\",\n            \"\\u041a\\u0440\\u0430\\u0441\\u0430\\u0432\\u0456\\u043a\",\n            \"\\u0422\\u0440\\u0430\\u0432\\u0435\\u043d\\u044c\",\n            \"\\u0427\\u044d\\u0440\\u0432\\u0435\\u043d\\u044c\",\n            \"\\u041b\\u0456\\u043f\\u0435\\u043d\\u044c\",\n            \"\\u0416\\u043d\\u0456\\u0432\\u0435\\u043d\\u044c\",\n            \"\\u0412\\u0435\\u0440\\u0430\\u0441\\u0435\\u043d\\u044c\",\n            \"\\u041a\\u0430\\u0441\\u0442\\u0440\\u044b\\u0447\\u043d\\u0456\\u043a\",\n            \"\\u041b\\u0456\\u0441\\u0442\\u0430\\u043f\\u0430\\u0434\",\n            \"\\u0421\\u043d\\u0435\\u0436\\u0430\\u043d\\u044c\"\n        ],\n        \"weekdays\": [\n            \"\\u041d\\u044f\\u0434\\u0437\\u0435\\u043b\\u044f\",\n            \"\\u041f\\u0430\\u043d\\u044f\\u0434\\u0437\\u0435\\u043b\\u0430\\u043a\",\n            \"\\u0410\\u045e\\u0442\\u043e\\u0440\\u0430\\u043a\",\n            \"\\u0421\\u0435\\u0440\\u0430\\u0434\\u0430\",\n            \"\\u0427\\u0430\\u0446\\u0432\\u0435\\u0440\",\n            \"\\u041f\\u044f\\u0442\\u043d\\u0456\\u0446\\u0430\",\n            \"\\u0421\\u0443\\u0431\\u043e\\u0442\\u0430\"\n        ],\n        \"weekdaysShort\": [\n            \"\\u041d\\u0434\",\n            \"\\u041f\\u043d\",\n            \"\\u0410\\u045e\\u0442\",\n            \"\\u0421\\u0440\",\n            \"\\u0427\\u0430\\u0446\\u0432\",\n            \"\\u041f\\u043d\",\n            \"\\u0421\\u0431\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\u045e\\u0441\\u0435\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"\\u045e\\u0441\\u0435\",\n            \"filter_button_text\": \"\\u0424\\u0456\\u043b\\u044c\\u0442\\u0440\",\n            \"reset_button_text\": \"\\u0421\\u043a\\u0456\\u043d\\u0443\\u0446\\u044c\",\n            \"date_placeholder\": \"\\u0414\\u0430\\u0442\\u0430\",\n            \"after_placeholder\": \"\\u041f\\u0430\\u043f\\u044f\\u0440\\u044d\\u0434\\u043d\\u044f\\u044f\",\n            \"before_placeholder\": \"\\u041d\\u0430\\u0441\\u0442\\u0443\\u043f\\u043d\\u0430\\u044f\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"\\u041f\\u0430\\u043a\\u0430\\u0437\\u0430\\u0446\\u044c \\u0442\\u0440\\u0430\\u0441\\u0456\\u0440\\u043e\\u045e\\u043a\\u0443 \\u0441\\u0442\\u044d\\u043a\\u0430\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"\\u0410\\u0434\\u0444\\u0430\\u0440\\u043c\\u0430\\u0442\\u0430\\u0432\\u0430\\u043d\\u0430\",\n            \"raw\": \"\\u0421\\u044b\\u0440\\u0430\"\n        },\n        \"editor\": {\n            \"title\": \"\\u0420\\u044d\\u0434\\u0430\\u043a\\u0442\\u0430\\u0440 \\u0437\\u044b\\u0445\\u043e\\u0434\\u043d\\u0430\\u0433\\u0430 \\u043a\\u043e\\u0434\\u0443\",\n            \"description\": \"\\u0412\\u0430\\u0448\\u0430 \\u0430\\u043f\\u0435\\u0440\\u0430\\u0446\\u044b\\u0439\\u043d\\u0430\\u044f \\u0441\\u0456\\u0441\\u0442\\u044d\\u043c\\u0430 \\u043f\\u0430\\u0432\\u0456\\u043d\\u043d\\u0430 \\u0431\\u044b\\u0446\\u044c \\u043d\\u0430\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d\\u0430 \\u043d\\u0430 \\u043f\\u0440\\u0430\\u0441\\u043b\\u0443\\u0445\\u043e\\u045e\\u0432\\u0430\\u043d\\u043d\\u0435 \\u0430\\u0434\\u043d\\u043e\\u0439 \\u0437 \\u0433\\u044d\\u0442\\u044b\\u0445 \\u0441\\u0445\\u0435\\u043c URL\",\n            \"openWith\": \"\\u0410\\u0434\\u0447\\u044b\\u043d\\u0456\\u0446\\u044c \\u0437 \\u0434\\u0430\\u043f\\u0430\\u043c\\u043e\\u0433\\u0430\\u0439\",\n            \"remember_choice\": \"\\u0417\\u0430\\u043f\\u043e\\u043c\\u043d\\u0456\\u0446\\u044c \\u0430\\u0431\\u0440\\u0430\\u043d\\u044b \\u0432\\u0430\\u0440\\u044b\\u044f\\u043d\\u0442 \\u0434\\u043b\\u044f \\u0433\\u044d\\u0442\\u0430\\u0439 \\u0441\\u0435\\u0441\\u0456\\u0456\",\n            \"open\": \"\\u0410\\u0434\\u0447\\u044b\\u043d\\u0456\\u0446\\u044c\",\n            \"cancel\": \"\\u0410\\u0434\\u043c\\u044f\\u043d\\u0456\\u0446\\u044c\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.bg.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/bg/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['bg'] = Object.assign(\n    window.oc.langMessages['bg'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\\u0438\\u0440\\u0430\\u043d\\u0435\",\n        \"quote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\",\n        \"code\": \"\\u041a\\u043e\\u0434\",\n        \"header1\": \"\\u0425\\u0435\\u0434\\u044a\\u0440 1\",\n        \"header2\": \"\\u0425\\u0435\\u0434\\u044a\\u0440 2\",\n        \"header3\": \"\\u0425\\u0435\\u0434\\u044a\\u0440 3\",\n        \"header4\": \"\\u0425\\u0435\\u0434\\u044a\\u0440 4\",\n        \"header5\": \"\\u0425\\u0435\\u0434\\u044a\\u0440 5\",\n        \"header6\": \"\\u0425\\u0435\\u0434\\u044a\\u0440 6\",\n        \"bold\": \"\\u041f\\u043e\\u0434\\u0447\\u0435\\u0440\\u0442\\u0430\\u043d\",\n        \"italic\": \"\\u041d\\u0430\\u043a\\u043b\\u043e\\u043d\\u0435\\u043d\",\n        \"unorderedlist\": \"\\u041d\\u0435\\u043f\\u043e\\u0434\\u0440\\u0435\\u0434\\u0435\\u043d \\u0421\\u043f\\u0438\\u0441\\u044a\\u043a\",\n        \"orderedlist\": \"\\u041f\\u043e\\u0434\\u0440\\u0435\\u0434\\u0435\\u043d \\u0421\\u043f\\u0438\\u0441\\u044a\\u043a\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\u0412\\u0438\\u0434\\u0435\\u043e\",\n        \"image\": \"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n        \"link\": \"\\u0412\\u0440\\u044a\\u0437\\u043a\\u0430\",\n        \"horizontalrule\": \"\\u0412\\u043c\\u044a\\u043a\\u0432\\u0430\\u043d\\u0435 \\u043d\\u0430 \\u0445\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u043d\\u0430 \\u043b\\u0438\\u043d\\u0438\\u044f\",\n        \"fullscreen\": \"\\u041d\\u0430 \\u0446\\u044f\\u043b \\u0435\\u043a\\u0440\\u0430\\u043d\",\n        \"preview\": \"\\u041f\\u0440\\u0435\\u0434\\u0432\\u0430\\u0440\\u0438\\u0442\\u0435\\u043b\\u0435\\u043d \\u043f\\u0440\\u0435\\u0433\\u043b\\u0435\\u0434\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u0412\\u043c\\u044a\\u043a\\u0432\\u0430\\u043d\\u0435 \\u043d\\u0430 \\u043b\\u0438\\u043d\\u043a\",\n        \"insert_image\": \"\\u0412\\u043c\\u044a\\u043a\\u0432\\u0430\\u043d\\u0435 \\u043d\\u0430 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n        \"insert_video\": \"\\u0412\\u043c\\u044a\\u043a\\u0432\\u0430\\u043d\\u0435 \\u043d\\u0430 \\u0432\\u0438\\u0434\\u0435\\u043e \\u0444\\u0430\\u0439\\u043b\",\n        \"insert_audio\": \"\\u0412\\u043c\\u044a\\u043a\\u0432\\u0430\\u043d\\u0435 \\u043d\\u0430 \\u0437\\u0432\\u0443\\u043a\\u043e\\u0432 \\u0444\\u0430\\u0439\\u043b\",\n        \"invalid_file_empty_insert\": \"\\u041c\\u043e\\u043b\\u044f, \\u0438\\u0437\\u0431\\u0435\\u0440\\u0435\\u0442\\u0435 \\u0444\\u0430\\u0439\\u043b \\u0437\\u0430 \\u0434\\u0430 \\u0433\\u043e \\u0432\\u043c\\u044a\\u043a\\u043d\\u0435\\u0442\\u0435 \\u043a\\u0430\\u0442\\u043e \\u043b\\u0438\\u043d\\u043a.\",\n        \"invalid_file_single_insert\": \"\\u041c\\u043e\\u043b\\u044f, \\u0438\\u0437\\u0431\\u0435\\u0440\\u0435\\u0442\\u0435 \\u0435\\u0434\\u0438\\u043d \\u0444\\u0430\\u0439\\u043b.\",\n        \"invalid_image_empty_insert\": \"\\u041c\\u043e\\u043b\\u044f, \\u0438\\u0437\\u0431\\u0435\\u0440\\u0435\\u0442\\u0435 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435(\\u044f) \\u0437\\u0430 \\u0434\\u0430 \\u0432\\u043c\\u044a\\u043a\\u043d\\u0435\\u0442\\u0435.\",\n        \"invalid_video_empty_insert\": \"\\u041c\\u043e\\u043b\\u044f, \\u0438\\u0437\\u0431\\u0435\\u0440\\u0435\\u0442\\u0435 \\u0432\\u0438\\u0434\\u0435\\u043e \\u0444\\u0430\\u0439\\u043b \\u0437\\u0430 \\u0432\\u043c\\u044a\\u043a\\u0432\\u0430\\u043d\\u0435.\",\n        \"invalid_audio_empty_insert\": \"\\u041c\\u043e\\u043b\\u044f, \\u0438\\u0437\\u0431\\u0435\\u0440\\u0435\\u0442\\u0435 \\u0437\\u0432\\u0443\\u043a\\u043e\\u0432 \\u0444\\u0430\\u0439\\u043b \\u0437\\u0430 \\u0432\\u043c\\u044a\\u043a\\u0432\\u0430\\u043d\\u0435.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"\\u041f\\u043e\\u0442\\u0432\\u044a\\u0440\\u0434\\u0438\",\n        \"cancel_button_text\": \"\\u041e\\u0442\\u043a\\u0430\\u0436\\u0438\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/bg\",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"Моля въведете с \"+e+\" по-малко символ\";return e>1&&(u+=\"a\"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u=\"Моля въведете още \"+e+\" символ\";return e>1&&(u+=\"a\"),u},loadingMore:function(){return\"Зареждат се още…\"},maximumSelected:function(n){var e=\"Можете да направите до \"+n.maximum+\" \";return n.maximum>1?e+=\"избора\":e+=\"избор\",e},noResults:function(){return\"Няма намерени съвпадения\"},searching:function(){return\"Търсене…\"},removeAllItems:function(){return\"Премахнете всички елементи\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.ca.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/ca/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['ca'] = Object.assign(\n    window.oc.langMessages['ca'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatar\",\n        \"quote\": \"Quota\",\n        \"code\": \"Codi\",\n        \"header1\": \"T\\u00edtol 1\",\n        \"header2\": \"T\\u00edtol 2\",\n        \"header3\": \"T\\u00edtol 3\",\n        \"header4\": \"T\\u00edtol 4\",\n        \"header5\": \"T\\u00edtol 5\",\n        \"header6\": \"T\\u00edtol 6\",\n        \"bold\": \"Negreta\",\n        \"italic\": \"Cursiva\",\n        \"unorderedlist\": \"Llista desordenada\",\n        \"orderedlist\": \"Llista ordenada\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"V\\u00eddeo\",\n        \"image\": \"Imatge\",\n        \"link\": \"Enlla\\u00e7\",\n        \"horizontalrule\": \"Inserir l\\u00ednia horitzontal\",\n        \"fullscreen\": \"Pantalla completa\",\n        \"preview\": \"Previsualitzar\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Inserir enlla\\u00e7 a m\\u00e8dia\",\n        \"insert_image\": \"Inserir imatge de m\\u00e8dia\",\n        \"insert_video\": \"Inserir v\\u00eddeo de m\\u00e8dia\",\n        \"insert_audio\": \"Inserir \\u00e0udio de m\\u00e8dia\",\n        \"invalid_file_empty_insert\": \"Si us plau selecciona l'arxiu a enlla\\u00e7ar.\",\n        \"invalid_file_single_insert\": \"Si us plau selecciona un sol arxiu.\",\n        \"invalid_image_empty_insert\": \"Si us plau selecciona imatge(s) per inserir.\",\n        \"invalid_video_empty_insert\": \"Si us plau selecciona un arxiu de v\\u00eddeo per inserir.\",\n        \"invalid_audio_empty_insert\": \"Si us plau selecciona un arxiu d'\\u00e0udio per inserir.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\\u00b7lar\",\n        \"widget_remove_confirm\": \"Eliminar aquest widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Mes anterior\",\n        \"nextMonth\": \"Mes seg\\u00fcent\",\n        \"months\": [\n            \"Gener\",\n            \"Febrer\",\n            \"Mar\\u00e7\",\n            \"Abril\",\n            \"Maig\",\n            \"Juny\",\n            \"Juliol\",\n            \"Agost\",\n            \"Setembre\",\n            \"Octubre\",\n            \"Novembre\",\n            \"Desembre\"\n        ],\n        \"weekdays\": [\n            \"Diumenge\",\n            \"Dilluns\",\n            \"Dimarts\",\n            \"Dimecres\",\n            \"Dijous\",\n            \"Divendres\",\n            \"Dissabte\"\n        ],\n        \"weekdaysShort\": [\n            \"Dg\",\n            \"Dl\",\n            \"Dm\",\n            \"Dx\",\n            \"Dj\",\n            \"Dv\",\n            \"Ds\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"tots\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"tots\",\n            \"filter_button_text\": \"Filtrar\",\n            \"reset_button_text\": \"Reiniciar\",\n            \"date_placeholder\": \"Data\",\n            \"after_placeholder\": \"Despr\\u00e9s\",\n            \"before_placeholder\": \"Abans\"\n        },\n        \"numbers\": {\n            \"all\": \"tots\",\n            \"filter_button_text\": \"Filtrar\",\n            \"reset_button_text\": \"Reiniciar\",\n            \"min_placeholder\": \"M\\u00edn\",\n            \"max_placeholder\": \"M\\u00e0x\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Mostrar l'stacktrace\",\n        \"hide_stacktrace\": \"Ocultar l'stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatat\",\n            \"raw\": \"Cru\"\n        },\n        \"editor\": {\n            \"title\": \"Editor de codi font\",\n            \"description\": \"El teu sistema operatiu hauria d'estar configurat per escoltar un d'aquests esquemes d'URL.\",\n            \"openWith\": \"Obrir amb\",\n            \"remember_choice\": \"Recordar l'opci\\u00f3 seleccionada durant aquesta sessi\\u00f3\",\n            \"open\": \"Obrir\",\n            \"cancel\": \"Cancel\\u00b7lar\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/ca\",[],function(){return{errorLoading:function(){return\"La càrrega ha fallat\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Si us plau, elimina \"+n+\" car\";return r+=1==n?\"àcter\":\"àcters\"},inputTooShort:function(e){var n=e.minimum-e.input.length,r=\"Si us plau, introdueix \"+n+\" car\";return r+=1==n?\"àcter\":\"àcters\"},loadingMore:function(){return\"Carregant més resultats…\"},maximumSelected:function(e){var n=\"Només es pot seleccionar \"+e.maximum+\" element\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No s'han trobat resultats\"},searching:function(){return\"Cercant…\"},removeAllItems:function(){return\"Treu tots els elements\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.cs.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/cs/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['cs'] = Object.assign(\n    window.oc.langMessages['cs'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Form\\u00e1tov\\u00e1n\\u00ed\",\n        \"quote\": \"Citace\",\n        \"code\": \"K\\u00f3d\",\n        \"header1\": \"Nadpis 1\",\n        \"header2\": \"Nadpis 2\",\n        \"header3\": \"Nadpis 3\",\n        \"header4\": \"Nadpis 4\",\n        \"header5\": \"Nadpis 5\",\n        \"header6\": \"Nadpis 6\",\n        \"bold\": \"Tu\\u010dn\\u011b\",\n        \"italic\": \"Kurz\\u00edvou\",\n        \"unorderedlist\": \"Ne\\u010d\\u00edslovan\\u00fd seznam\",\n        \"orderedlist\": \"\\u010c\\u00edslovan\\u00fd seznam\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Obr\\u00e1zek\",\n        \"link\": \"Odkaz\",\n        \"horizontalrule\": \"Vlo\\u017eit horizont\\u00e1ln\\u00ed linku\",\n        \"fullscreen\": \"Cel\\u00e1 obrazovka\",\n        \"preview\": \"N\\u00e1hled\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Vlo\\u017eit odkaz\",\n        \"insert_image\": \"Vlo\\u017eit obr\\u00e1zek\",\n        \"insert_video\": \"Vlo\\u017eit video\",\n        \"insert_audio\": \"Vlo\\u017eit zvuk\",\n        \"invalid_file_empty_insert\": \"Pros\\u00edm vyberte soubor, na kter\\u00fd se vlo\\u017e\\u00ed odkaz.\",\n        \"invalid_file_single_insert\": \"Vyberte jeden soubor.\",\n        \"invalid_image_empty_insert\": \"Vyberte soubor(y) pro vlo\\u017een\\u00ed.\",\n        \"invalid_video_empty_insert\": \"Vyberte video soubor pro vlo\\u017een\\u00ed.\",\n        \"invalid_audio_empty_insert\": \"Vyberte audio soubor pro vlo\\u017een\\u00ed.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Zru\\u0161it\",\n        \"widget_remove_confirm\": \"Odstranit widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"P\\u0159edchoz\\u00ed m\\u011bs\\u00edc\",\n        \"nextMonth\": \"N\\u00e1sleduj\\u00edc\\u00ed m\\u011bs\\u00edc\",\n        \"months\": [\n            \"Leden\",\n            \"\\u00danor\",\n            \"B\\u0159ezen\",\n            \"Duben\",\n            \"Kv\\u011bten\",\n            \"\\u010cerven\",\n            \"\\u010cervenec\",\n            \"Srpen\",\n            \"Z\\u00e1\\u0159\\u00ed\",\n            \"\\u0158\\u00edjen\",\n            \"Listopad\",\n            \"Prosinec\"\n        ],\n        \"weekdays\": [\n            \"Ned\\u011ble\",\n            \"Pond\\u011bl\\u00ed\",\n            \"\\u00dater\\u00fd\",\n            \"St\\u0159eda\",\n            \"\\u010ctvrtek\",\n            \"P\\u00e1tek\",\n            \"Sobota\"\n        ],\n        \"weekdaysShort\": [\n            \"Ne\",\n            \"Po\",\n            \"\\u00dat\",\n            \"St\",\n            \"\\u010ct\",\n            \"P\\u00e1\",\n            \"So\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"V\\u0161e\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Filtrovat\",\n            \"clear_button_text\": \"Zru\\u0161it\"\n        },\n        \"dates\": {\n            \"all\": \"V\\u0161e\",\n            \"filter_button_text\": \"Filtrovat\",\n            \"reset_button_text\": \"Zru\\u0161it\",\n            \"date_placeholder\": \"Datum\",\n            \"after_placeholder\": \"Po\",\n            \"before_placeholder\": \"P\\u0159ed\"\n        },\n        \"numbers\": {\n            \"all\": \"V\\u0161e\",\n            \"filter_button_text\": \"Filtrovat\",\n            \"reset_button_text\": \"Zru\\u0161it\",\n            \"min_placeholder\": \"Minimum\",\n            \"max_placeholder\": \"Maximum\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Zobrazit stacktrace\",\n        \"hide_stacktrace\": \"Skr\\u00fdt stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Form\\u00e1tov\\u00e1no\",\n            \"raw\": \"P\\u016fvodn\\u00ed (raw)\"\n        },\n        \"editor\": {\n            \"title\": \"Editor zdrojov\\u00e9ho k\\u00f3du\",\n            \"description\": \"V\\u00e1\\u0161 opera\\u010dn\\u00ed syst\\u00e9m by m\\u011bl b\\u00fdt konfigurov\\u00e1n tak, aby naslouchal jednomu z t\\u011bchto sch\\u00e9mat adres URL.\",\n            \"openWith\": \"Otev\\u0159\\u00edt v\",\n            \"remember_choice\": \"Zapamatovat si vybranou volbu pro tuto relaci\",\n            \"open\": \"Otev\\u0159\\u00edt\",\n            \"cancel\": \"Zru\\u0161it\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/cs\",[],function(){function e(e,n){switch(e){case 2:return n?\"dva\":\"dvě\";case 3:return\"tři\";case 4:return\"čtyři\"}return\"\"}return{errorLoading:function(){return\"Výsledky nemohly být načteny.\"},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?\"Prosím, zadejte o jeden znak méně.\":t<=4?\"Prosím, zadejte o \"+e(t,!0)+\" znaky méně.\":\"Prosím, zadejte o \"+t+\" znaků méně.\"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?\"Prosím, zadejte ještě jeden znak.\":t<=4?\"Prosím, zadejte ještě další \"+e(t,!0)+\" znaky.\":\"Prosím, zadejte ještě dalších \"+t+\" znaků.\"},loadingMore:function(){return\"Načítají se další výsledky…\"},maximumSelected:function(n){var t=n.maximum;return 1==t?\"Můžete zvolit jen jednu položku.\":t<=4?\"Můžete zvolit maximálně \"+e(t,!1)+\" položky.\":\"Můžete zvolit maximálně \"+t+\" položek.\"},noResults:function(){return\"Nenalezeny žádné položky.\"},searching:function(){return\"Vyhledávání…\"},removeAllItems:function(){return\"Odstraňte všechny položky\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.da.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/da/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['da'] = Object.assign(\n    window.oc.langMessages['da'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatering\",\n        \"quote\": \"Citat\",\n        \"code\": \"Kode\",\n        \"header1\": \"Overskrift 1\",\n        \"header2\": \"Overskrift 2\",\n        \"header3\": \"Overskrift 3\",\n        \"header4\": \"Overskrift 4\",\n        \"header5\": \"Overskrift 5\",\n        \"header6\": \"Overskrift 6\",\n        \"bold\": \"Fed\",\n        \"italic\": \"Skr\\u00e5\",\n        \"unorderedlist\": \"Usorteret Liste\",\n        \"orderedlist\": \"Nummereret Liste\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Billede\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Inds\\u00e6t horisontal streg\",\n        \"fullscreen\": \"Fuld sk\\u00e6rm\",\n        \"preview\": \"Forh\\u00e5ndsvisning\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Inds\\u00e6t Link\",\n        \"insert_image\": \"Inds\\u00e6t Billede\",\n        \"insert_video\": \"Inds\\u00e6t Video\",\n        \"insert_audio\": \"Inds\\u00e6t Lyd\",\n        \"invalid_file_empty_insert\": \"V\\u00e6lg venligst en fil, at inds\\u00e6tte et link til.\",\n        \"invalid_file_single_insert\": \"V\\u00e6lg venligst en enkel fil.\",\n        \"invalid_image_empty_insert\": \"V\\u00e6lg venligst et eller flere billeder, at inds\\u00e6tte.\",\n        \"invalid_video_empty_insert\": \"V\\u00e6lg venligst en videofil, at inds\\u00e6tte.\",\n        \"invalid_audio_empty_insert\": \"V\\u00e6lg venligst en lydfil, at inds\\u00e6tte.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Fortryd\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Sidste M\\u00e5ned\",\n        \"nextMonth\": \"N\\u00e6ste M\\u00e5ned\",\n        \"months\": [\n            \"Januar\",\n            \"Februar\",\n            \"Marts\",\n            \"April\",\n            \"Maj\",\n            \"Juni\",\n            \"Juli\",\n            \"August\",\n            \"September\",\n            \"Oktober\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"S\\u00f8ndag\",\n            \"Mandag\",\n            \"Tirsdag\",\n            \"Onsdag\",\n            \"Torsdag\",\n            \"Fredag\",\n            \"L\\u00f8rdag\"\n        ],\n        \"weekdaysShort\": [\n            \"S\\u00f8n\",\n            \"Man\",\n            \"Tir\",\n            \"Ons\",\n            \"Tor\",\n            \"Fre\",\n            \"L\\u00f8r\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"Alle\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"alle\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Nulstil\",\n            \"date_placeholder\": \"Dato\",\n            \"after_placeholder\": \"Efter\",\n            \"before_placeholder\": \"F\\u00f8r\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Vis stacktracen\",\n        \"hide_stacktrace\": \"Skjul stacktracen\",\n        \"tabs\": {\n            \"formatted\": \"Formateret\",\n            \"raw\": \"R\\u00e5\"\n        },\n        \"editor\": {\n            \"title\": \"Kildekode redigeringsv\\u00e6rkt\\u00f8j\",\n            \"description\": \"Dit operativsystem b\\u00f8r konfigureres til at lytte til et af disse URL-skemaer.\",\n            \"openWith\": \"\\u00c5ben med\",\n            \"remember_choice\": \"Husk valgte mulighed for denne session\",\n            \"open\": \"\\u00c5ben\",\n            \"cancel\": \"Fortryd\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/da\",[],function(){return{errorLoading:function(){return\"Resultaterne kunne ikke indlæses.\"},inputTooLong:function(e){return\"Angiv venligst \"+(e.input.length-e.maximum)+\" tegn mindre\"},inputTooShort:function(e){return\"Angiv venligst \"+(e.minimum-e.input.length)+\" tegn mere\"},loadingMore:function(){return\"Indlæser flere resultater…\"},maximumSelected:function(e){var n=\"Du kan kun vælge \"+e.maximum+\" emne\";return 1!=e.maximum&&(n+=\"r\"),n},noResults:function(){return\"Ingen resultater fundet\"},searching:function(){return\"Søger…\"},removeAllItems:function(){return\"Fjern alle elementer\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.de.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/de/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['de'] = Object.assign(\n    window.oc.langMessages['de'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatierung\",\n        \"quote\": \"Zitat\",\n        \"code\": \"Code\",\n        \"header1\": \"\\u00dcberschrift 1\",\n        \"header2\": \"\\u00dcberschrift 2\",\n        \"header3\": \"\\u00dcberschrift 3\",\n        \"header4\": \"\\u00dcberschrift 4\",\n        \"header5\": \"\\u00dcberschrift 5\",\n        \"header6\": \"\\u00dcberschrift 6\",\n        \"bold\": \"Fett\",\n        \"italic\": \"Kursiv\",\n        \"unorderedlist\": \"Normale Liste\",\n        \"orderedlist\": \"Nummerierte Liste\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Bild\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Horizontale Linie\",\n        \"fullscreen\": \"Vollbild\",\n        \"preview\": \"Vorschau\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Link aus Medienbibliothek\",\n        \"insert_image\": \"Bild aus Medienbibliothek\",\n        \"insert_video\": \"Video aus Medienbibliothek\",\n        \"insert_audio\": \"Audio aus Medienbibliothek\",\n        \"invalid_file_empty_insert\": \"Bitte Datei ausw\\u00e4hlen.\",\n        \"invalid_file_single_insert\": \"Bitte nur eine Datei w\\u00e4hlen.\",\n        \"invalid_image_empty_insert\": \"Bitte ein Bild ausw\\u00e4hlen.\",\n        \"invalid_video_empty_insert\": \"Bitte ein Video ausw\\u00e4hlen.\",\n        \"invalid_audio_empty_insert\": \"Bitte eine Audiodatei ausw\\u00e4hlen.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Abbrechen\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Vorheriger Monat\",\n        \"nextMonth\": \"N\\u00e4chsten Monat\",\n        \"months\": [\n            \"Januar\",\n            \"Februar\",\n            \"M\\u00e4rz\",\n            \"April\",\n            \"Mai\",\n            \"Juni\",\n            \"Juli\",\n            \"August\",\n            \"September\",\n            \"Oktober\",\n            \"November\",\n            \"Dezember\"\n        ],\n        \"weekdays\": [\n            \"Sonntag\",\n            \"Montag\",\n            \"Dienstag\",\n            \"Mittwoch\",\n            \"Donnerstag\",\n            \"Freitag\",\n            \"Samstag\"\n        ],\n        \"weekdaysShort\": [\n            \"So\",\n            \"Mo\",\n            \"Di\",\n            \"Mi\",\n            \"Do\",\n            \"Fr\",\n            \"Sa\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/de\",[],function(){return{errorLoading:function(){return\"Die Ergebnisse konnten nicht geladen werden.\"},inputTooLong:function(e){return\"Bitte \"+(e.input.length-e.maximum)+\" Zeichen weniger eingeben\"},inputTooShort:function(e){return\"Bitte \"+(e.minimum-e.input.length)+\" Zeichen mehr eingeben\"},loadingMore:function(){return\"Lade mehr Ergebnisse…\"},maximumSelected:function(e){var n=\"Sie können nur \"+e.maximum+\" Element\";return 1!=e.maximum&&(n+=\"e\"),n+=\" auswählen\"},noResults:function(){return\"Keine Übereinstimmungen gefunden\"},searching:function(){return\"Suche…\"},removeAllItems:function(){return\"Entferne alle Elemente\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.el.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/el/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['el'] = Object.assign(\n    window.oc.langMessages['el'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u039c\\u03bf\\u03c1\\u03c6\\u03bf\\u03c0\\u03bf\\u03af\\u03b7\\u03c3\\u03b7\",\n        \"quote\": \"\\u03a0\\u03b1\\u03c1\\u03ac\\u03b8\\u03b5\\u03c3\\u03b7\",\n        \"code\": \"\\u039a\\u03ce\\u03b4\\u03b9\\u03ba\\u03b1\\u03c2\",\n        \"header1\": \"\\u039a\\u03b5\\u03c6\\u03b1\\u03bb\\u03af\\u03b4\\u03b1 1\",\n        \"header2\": \"\\u039a\\u03b5\\u03c6\\u03b1\\u03bb\\u03af\\u03b4\\u03b1 2\",\n        \"header3\": \"\\u039a\\u03b5\\u03c6\\u03b1\\u03bb\\u03af\\u03b4\\u03b1 3\",\n        \"header4\": \"\\u039a\\u03b5\\u03c6\\u03b1\\u03bb\\u03af\\u03b4\\u03b1 4\",\n        \"header5\": \"\\u039a\\u03b5\\u03c6\\u03b1\\u03bb\\u03af\\u03b4\\u03b1 5\",\n        \"header6\": \"\\u039a\\u03b5\\u03c6\\u03b1\\u03bb\\u03af\\u03b4\\u03b1 6\",\n        \"bold\": \"\\u0388\\u03bd\\u03c4\\u03bf\\u03bd\\u03b1\",\n        \"italic\": \"\\u0399\\u03c4\\u03b1\\u03bb\\u03b9\\u03ba\\u03ac\",\n        \"unorderedlist\": \"\\u039c\\u03b7 \\u03c4\\u03b1\\u03be\\u03b9\\u03bd\\u03bf\\u03bc\\u03b7\\u03bc\\u03ad\\u03bd\\u03b7 \\u03bb\\u03af\\u03c3\\u03c4\\u03b1\",\n        \"orderedlist\": \"\\u03a4\\u03b1\\u03be\\u03b9\\u03bd\\u03bf\\u03bc\\u03b7\\u03bc\\u03ad\\u03bd\\u03b7 \\u03bb\\u03af\\u03c3\\u03c4\\u03b1\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\u0392\\u03af\\u03bd\\u03c4\\u03b5\\u03bf\",\n        \"image\": \"\\u0395\\u03b9\\u03ba\\u03cc\\u03bd\\u03b1\",\n        \"link\": \"\\u03a3\\u03cd\\u03bd\\u03b4\\u03b5\\u03c3\\u03bc\\u03bf\\u03c2\",\n        \"horizontalrule\": \"\\u0395\\u03b9\\u03c3\\u03b1\\u03b3\\u03c9\\u03b3\\u03ae \\u039f\\u03c1\\u03b9\\u03b6\\u03cc\\u03bd\\u03c4\\u03b9\\u03b1\\u03c2 \\u0393\\u03c1\\u03b1\\u03bc\\u03bc\\u03ae\\u03c2\",\n        \"fullscreen\": \"\\u03a0\\u03bb\\u03ae\\u03c1\\u03b7\\u03c2 \\u03bf\\u03b8\\u03cc\\u03bd\\u03b7\",\n        \"preview\": \"\\u03a0\\u03c1\\u03bf\\u03b5\\u03c0\\u03b9\\u03c3\\u03ba\\u03cc\\u03c0\\u03b7\\u03c3\\u03b7\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u0395\\u03b9\\u03c3\\u03b1\\u03b3\\u03c9\\u03b3\\u03ae \\u03a3\\u03c5\\u03bd\\u03b4\\u03ad\\u03c3\\u03bc\\u03bf\\u03c5 \\u03b1\\u03c0\\u03cc \\u03c4\\u03b1 \\u039c\\u03ad\\u03c3\\u03b1\",\n        \"insert_image\": \"\\u0395\\u03b9\\u03c3\\u03b1\\u03b3\\u03c9\\u03b3\\u03ae \\u0395\\u03b9\\u03ba\\u03cc\\u03bd\\u03b1\\u03c2 \\u03b1\\u03c0\\u03cc \\u03c4\\u03b1 \\u039c\\u03ad\\u03c3\\u03b1\",\n        \"insert_video\": \"\\u0395\\u03b9\\u03c3\\u03b1\\u03b3\\u03c9\\u03b3\\u03ae \\u0392\\u03af\\u03bd\\u03c4\\u03b5\\u03bf \\u03b1\\u03c0\\u03cc \\u03c4\\u03b1 \\u039c\\u03ad\\u03c3\\u03b1\",\n        \"insert_audio\": \"\\u0395\\u03b9\\u03c3\\u03b1\\u03b3\\u03c9\\u03b3\\u03ae \\u0389\\u03c7\\u03bf\\u03c5 \\u03b1\\u03c0\\u03cc \\u03c4\\u03b1 \\u039c\\u03ad\\u03c3\\u03b1\",\n        \"invalid_file_empty_insert\": \"\\u03a0\\u03b1\\u03c1\\u03b1\\u03ba\\u03b1\\u03bb\\u03bf\\u03cd\\u03bc\\u03b5 \\u03b5\\u03c0\\u03b9\\u03bb\\u03ad\\u03be\\u03c4\\u03b5 \\u03ad\\u03bd\\u03b1 \\u03b1\\u03c1\\u03c7\\u03b5\\u03af\\u03bf \\u03b3\\u03b9\\u03b1 \\u03bd\\u03b1 \\u03b5\\u03b9\\u03c3\\u03ac\\u03b3\\u03b5\\u03c4\\u03b5 \\u03c3\\u03c5\\u03bd\\u03b4\\u03ad\\u03c3\\u03bc\\u03bf\\u03c5\\u03c2 \\u03c3\\u03b5 \\u03b1\\u03c5\\u03c4\\u03cc.\",\n        \"invalid_file_single_insert\": \"\\u03a0\\u03b1\\u03c1\\u03b1\\u03ba\\u03b1\\u03bb\\u03bf\\u03cd\\u03bc\\u03b5 \\u03b5\\u03c0\\u03b9\\u03bb\\u03ad\\u03be\\u03c4\\u03b5 \\u03ad\\u03bd\\u03b1 \\u03bc\\u03bf\\u03bd\\u03b1\\u03b4\\u03b9\\u03ba\\u03cc \\u03b1\\u03c1\\u03c7\\u03b5\\u03af\\u03bf.\",\n        \"invalid_image_empty_insert\": \"\\u03a0\\u03b1\\u03c1\\u03b1\\u03ba\\u03b1\\u03bb\\u03bf\\u03cd\\u03bc\\u03b5 \\u03b5\\u03c0\\u03b9\\u03bb\\u03ad\\u03be\\u03c4\\u03b5 \\u03c4\\u03b7\\u03bd \\u03b5\\u03b9\\u03ba\\u03cc\\u03bd\\u03b1 \\u03ae \\u03c4\\u03b9\\u03c2 \\u03b5\\u03b9\\u03ba\\u03cc\\u03bd\\u03b5\\u03c2 \\u03b3\\u03b9\\u03b1 \\u03b5\\u03b9\\u03c3\\u03b1\\u03b3\\u03c9\\u03b3\\u03b7.\",\n        \"invalid_video_empty_insert\": \"\\u03a0\\u03b1\\u03c1\\u03b1\\u03ba\\u03b1\\u03bb\\u03bf\\u03cd\\u03bc\\u03b5 \\u03b5\\u03c0\\u03b9\\u03bb\\u03ad\\u03be\\u03c4\\u03b5 \\u03ad\\u03bd\\u03b1 \\u03b1\\u03c1\\u03c7\\u03b5\\u03af\\u03bf \\u03b2\\u03af\\u03bd\\u03c4\\u03b5\\u03bf \\u03b3\\u03b9\\u03b1 \\u03b5\\u03b9\\u03c3\\u03b1\\u03b3\\u03c9\\u03b3\\u03ae.\",\n        \"invalid_audio_empty_insert\": \"\\u03a0\\u03b1\\u03c1\\u03b1\\u03ba\\u03b1\\u03bb\\u03bf\\u03cd\\u03bc\\u03b5 \\u03b5\\u03c0\\u03b9\\u03bb\\u03ad\\u03be\\u03c4\\u03b5 \\u03ad\\u03bd\\u03b1 \\u03b1\\u03c1\\u03c7\\u03b5\\u03af\\u03bf \\u03ae\\u03c7\\u03bf\\u03c5 \\u03b3\\u03b9\\u03b1 \\u03b5\\u03b9\\u03c3\\u03b1\\u03b3\\u03c9\\u03b3\\u03ae.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"\\u0395\\u03bd\\u03c4\\u03ac\\u03be\\u03b5\\u03b9\",\n        \"cancel_button_text\": \"\\u0386\\u03ba\\u03c5\\u03c1\\u03bf\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\u03a0\\u03c1\\u03bf\\u03b7\\u03b3\\u03bf\\u03cd\\u03bc\\u03b5\\u03bd\\u03bf\\u03c2 \\u039c\\u03ae\\u03bd\\u03b1\\u03c2\",\n        \"nextMonth\": \"\\u0395\\u03c0\\u03cc\\u03bc\\u03b5\\u03bd\\u03bf\\u03c2 \\u039c\\u03ae\\u03bd\\u03b1\\u03c2\",\n        \"months\": [\n            \"\\u0399\\u03b1\\u03bd\\u03bf\\u03c5\\u03ac\\u03c1\\u03b9\\u03bf\\u03c2\",\n            \"\\u03a6\\u03b5\\u03b2\\u03c1\\u03bf\\u03c5\\u03ac\\u03c1\\u03b9\\u03bf\\u03c2\",\n            \"\\u039c\\u03ac\\u03c1\\u03c4\\u03b9\\u03bf\\u03c2\",\n            \"\\u0391\\u03c0\\u03c1\\u03af\\u03bb\\u03b9\\u03bf\\u03c2\",\n            \"\\u039c\\u03ac\\u03b9\\u03bf\\u03c2\",\n            \"\\u0399\\u03bf\\u03cd\\u03bd\\u03b9\\u03bf\\u03c2\",\n            \"\\u0399\\u03bf\\u03cd\\u03bb\\u03b9\\u03bf\\u03c2\",\n            \"\\u0391\\u03cd\\u03b3\\u03bf\\u03c5\\u03c3\\u03c4\\u03bf\\u03c2\",\n            \"\\u03a3\\u03b5\\u03c0\\u03c4\\u03ad\\u03bc\\u03b2\\u03c1\\u03b9\\u03bf\\u03c2\",\n            \"\\u039f\\u03ba\\u03c4\\u03ce\\u03b2\\u03c1\\u03b9\\u03bf\\u03c2\",\n            \"\\u039d\\u03bf\\u03ad\\u03bc\\u03b2\\u03c1\\u03b9\\u03bf\\u03c2\",\n            \"\\u0394\\u03b5\\u03ba\\u03ad\\u03bc\\u03b2\\u03c1\\u03b9\\u03bf\\u03c2\"\n        ],\n        \"weekdays\": [\n            \"\\u039a\\u03c5\\u03c1\\u03b9\\u03b1\\u03ba\\u03ae\",\n            \"\\u0394\\u03b5\\u03c5\\u03c4\\u03ad\\u03c1\\u03b1\",\n            \"\\u03a4\\u03c1\\u03af\\u03c4\\u03b7\",\n            \"\\u03a4\\u03b5\\u03c4\\u03ac\\u03c1\\u03c4\\u03b7\",\n            \"\\u03a0\\u03ad\\u03bc\\u03c0\\u03c4\\u03b7\",\n            \"\\u03a0\\u03b1\\u03c1\\u03b1\\u03c3\\u03ba\\u03b5\\u03c5\\u03ae\",\n            \"\\u03a3\\u03ac\\u03b2\\u03b2\\u03b1\\u03c4\\u03bf\"\n        ],\n        \"weekdaysShort\": [\n            \"\\u039a\\u03c5\\u03c1\",\n            \"\\u0394\\u03b5\\u03c5\",\n            \"\\u03a4\\u03c1\\u03b9\",\n            \"\\u03a4\\u03b5\\u03c4\",\n            \"\\u03a0\\u03b5\\u03bc\",\n            \"\\u03a0\\u03b1\\u03c1\",\n            \"\\u03a3\\u03b1\\u03b2\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\u03cc\\u03bb\\u03b1\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"\\u03cc\\u03bb\\u03b1\",\n            \"filter_button_text\": \"\\u03a6\\u03af\\u03bb\\u03c4\\u03c1\\u03bf\",\n            \"reset_button_text\": \"\\u0395\\u03c0\\u03b1\\u03bd\\u03b1\\u03c6\\u03bf\\u03c1\\u03ac\",\n            \"date_placeholder\": \"\\u0397\\u03bc\\u03b5\\u03c1\\u03bf\\u03bc\\u03b7\\u03bd\\u03af\\u03b1\",\n            \"after_placeholder\": \"\\u039c\\u03b5\\u03c4\\u03ac\",\n            \"before_placeholder\": \"\\u03a0\\u03c1\\u03af\\u03bd\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"\\u0395\\u03bc\\u03c6\\u03ac\\u03bd\\u03b9\\u03c3\\u03b7 stacktrace\",\n        \"hide_stacktrace\": \"\\u0391\\u03c0\\u03cc\\u03ba\\u03c1\\u03c5\\u03c8\\u03b7 stachtrace\",\n        \"tabs\": {\n            \"formatted\": \"\\u039c\\u03bf\\u03c1\\u03c6\\u03bf\\u03c0\\u03bf\\u03b9\\u03b7\\u03bc\\u03ad\\u03bd\\u03bf\",\n            \"raw\": \"\\u0391\\u03ba\\u03b1\\u03c4\\u03ad\\u03c1\\u03b3\\u03b1\\u03c3\\u03c4\\u03bf\"\n        },\n        \"editor\": {\n            \"title\": \"\\u0395\\u03c0\\u03b5\\u03be\\u03b5\\u03c1\\u03b3\\u03b1\\u03c3\\u03c4\\u03ae\\u03c2 \\u03c0\\u03b7\\u03b3\\u03b1\\u03af\\u03bf\\u03c5 \\u03ba\\u03ce\\u03b4\\u03b9\\u03ba\\u03b1\",\n            \"description\": \"\\u03a4\\u03bf \\u03bb\\u03b5\\u03b9\\u03c4\\u03bf\\u03c5\\u03c1\\u03b3\\u03b9\\u03ba\\u03cc \\u03c3\\u03bf\\u03c5 \\u03c3\\u03cd\\u03c3\\u03c4\\u03b7\\u03bc\\u03b1 \\u03b8\\u03b1 \\u03c0\\u03c1\\u03ad\\u03c0\\u03b5\\u03b9 \\u03bd\\u03b1 \\u03c1\\u03c5\\u03b8\\u03bc\\u03b9\\u03c3\\u03c4\\u03b5\\u03af \\u03b3\\u03b9\\u03b1 \\u03bd\\u03b1 \\u03b1\\u03bd\\u03c4\\u03b1\\u03c0\\u03bf\\u03ba\\u03c1\\u03af\\u03bd\\u03b5\\u03c4\\u03b1\\u03b9 \\u03c3\\u03b5 \\u03bc\\u03af\\u03b1 \\u03b1\\u03c0\\u03cc \\u03c4\\u03b9\\u03c2 \\u03b1\\u03ba\\u03cc\\u03bb\\u03bf\\u03c5\\u03b8\\u03b5\\u03c2 URL \\u03b1\\u03c0\\u03b5\\u03b9\\u03ba\\u03bf\\u03bd\\u03af\\u03c3\\u03b5\\u03b9\\u03c2.\",\n            \"openWith\": \"\\u0386\\u03bd\\u03bf\\u03b9\\u03b3\\u03bc\\u03b1 \\u03bc\\u03b5\",\n            \"remember_choice\": \"\\u0391\\u03c0\\u03bf\\u03bc\\u03bd\\u03b7\\u03bc\\u03cc\\u03bd\\u03b5\\u03c5\\u03c3\\u03b7 \\u03b1\\u03c5\\u03c4\\u03ae\\u03c2 \\u03c4\\u03b7\\u03c2 \\u03b5\\u03c0\\u03b9\\u03bb\\u03bf\\u03b3\\u03ae\\u03c2 \\u03b3\\u03b9\\u03b1 \\u03b1\\u03c5\\u03c4\\u03ae\\u03bd \\u03c4\\u03b7\\u03bd \\u03c0\\u03b5\\u03c1\\u03af\\u03bf\\u03b4\\u03bf \\u03bb\\u03b5\\u03b9\\u03c4\\u03bf\\u03c5\\u03c1\\u03b3\\u03af\\u03b1\\u03c2\",\n            \"open\": \"\\u0386\\u03bd\\u03bf\\u03b9\\u03b3\\u03bc\\u03b1\",\n            \"cancel\": \"\\u0386\\u03ba\\u03c5\\u03c1\\u03bf\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/el\",[],function(){return{errorLoading:function(){return\"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν.\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"Παρακαλώ διαγράψτε \"+e+\" χαρακτήρ\";return 1==e&&(u+=\"α\"),1!=e&&(u+=\"ες\"),u},inputTooShort:function(n){return\"Παρακαλώ συμπληρώστε \"+(n.minimum-n.input.length)+\" ή περισσότερους χαρακτήρες\"},loadingMore:function(){return\"Φόρτωση περισσότερων αποτελεσμάτων…\"},maximumSelected:function(n){var e=\"Μπορείτε να επιλέξετε μόνο \"+n.maximum+\" επιλογ\";return 1==n.maximum&&(e+=\"ή\"),1!=n.maximum&&(e+=\"ές\"),e},noResults:function(){return\"Δεν βρέθηκαν αποτελέσματα\"},searching:function(){return\"Αναζήτηση…\"},removeAllItems:function(){return\"Καταργήστε όλα τα στοιχεία\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.en-au.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/en-au/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['en-au'] = Object.assign(\n    window.oc.langMessages['en-au'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.en-ca.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/en-ca/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['en-ca'] = Object.assign(\n    window.oc.langMessages['en-ca'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.en-gb.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/en-gb/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['en-gb'] = Object.assign(\n    window.oc.langMessages['en-gb'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.en.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/en/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['en'] = Object.assign(\n    window.oc.langMessages['en'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Please delete \"+n+\" character\";return 1!=n&&(r+=\"s\"),r},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var n=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"},removeItem:function(){return\"Remove item\"},search:function(){return\"Search\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.es-ar.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/es-ar/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['es-ar'] = Object.assign(\n    window.oc.langMessages['es-ar'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.es.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/es/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['es'] = Object.assign(\n    window.oc.langMessages['es'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formateo\",\n        \"quote\": \"Cita\",\n        \"code\": \"C\\u00f3digo\",\n        \"header1\": \"Encabezado 1\",\n        \"header2\": \"Encabezado 2\",\n        \"header3\": \"Encabezado 3\",\n        \"header4\": \"Encabezado 4\",\n        \"header5\": \"Encabezado 5\",\n        \"header6\": \"Encabezado 6\",\n        \"bold\": \"Negrita\",\n        \"italic\": \"Cursiva\",\n        \"unorderedlist\": \"Lista Desordenada\",\n        \"orderedlist\": \"Lista Ordenada\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Imagen\",\n        \"link\": \"V\\u00ednculo\",\n        \"horizontalrule\": \"Insertar Regla Horizontal\",\n        \"fullscreen\": \"Pantalla completa\",\n        \"preview\": \"Previsualizar\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insertar Media V\\u00ednculo\",\n        \"insert_image\": \"Insertar Media Imagen\",\n        \"insert_video\": \"Insertar Media Video\",\n        \"insert_audio\": \"Insertar Media Audio\",\n        \"invalid_file_empty_insert\": \"Por favor seleccione archivo para insertar v\\u00ednculo.\",\n        \"invalid_file_single_insert\": \"Por favor seleccione un solo archivo.\",\n        \"invalid_image_empty_insert\": \"Por favor seleccione una imagen(es) para insertar.\",\n        \"invalid_video_empty_insert\": \"Por favor seleccione un archivo de video para insertar.\",\n        \"invalid_audio_empty_insert\": \"Por favor seleccione un archivo de audio para insertar.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancelar\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Mes Anterior\",\n        \"nextMonth\": \"Mes Siguiente\",\n        \"months\": [\n            \"Enero\",\n            \"Febrero\",\n            \"Marzo\",\n            \"Abril\",\n            \"Mayo\",\n            \"Junio\",\n            \"Julio\",\n            \"Agosto\",\n            \"Septiembre\",\n            \"Octubre\",\n            \"Noviembre\",\n            \"Diciembre\"\n        ],\n        \"weekdays\": [\n            \"Domingo\",\n            \"Lunes\",\n            \"Martes\",\n            \"Miercoles\",\n            \"Jueves\",\n            \"Viernes\",\n            \"Sabado\"\n        ],\n        \"weekdaysShort\": [\n            \"Dom\",\n            \"Lun\",\n            \"Mar\",\n            \"Mie\",\n            \"Jue\",\n            \"Vie\",\n            \"Sab\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"todos\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Aplicar\",\n            \"clear_button_text\": \"Limpiar\"\n        },\n        \"dates\": {\n            \"all\": \"todas\",\n            \"filter_button_text\": \"Filtrar\",\n            \"reset_button_text\": \"Restablecer\",\n            \"date_placeholder\": \"Fecha\",\n            \"after_placeholder\": \"Desde\",\n            \"before_placeholder\": \"Hasta\"\n        },\n        \"numbers\": {\n            \"all\": \"todos\",\n            \"filter_button_text\": \"Filtrar\",\n            \"reset_button_text\": \"Restablecer\",\n            \"min_placeholder\": \"M\\u00ednimo\",\n            \"max_placeholder\": \"M\\u00e1ximo\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Mostrar el seguimiento de la pila\",\n        \"hide_stacktrace\": \"Ocultar el seguimiento de la pila\",\n        \"tabs\": {\n            \"formatted\": \"Formateado\",\n            \"raw\": \"Sin formato\"\n        },\n        \"editor\": {\n            \"title\": \"Seleccione el editor de c\\u00f3digo fuente a usar\",\n            \"description\": \"Su entorno de sistema operativo debe estar configurado para escuchar a uno de estos esquemas de URL.\",\n            \"openWith\": \"Abrir con\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Abrir\",\n            \"cancel\": \"Cancelar\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/es\",[],function(){return{errorLoading:function(){return\"No se pudieron cargar los resultados\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Por favor, elimine \"+n+\" car\";return r+=1==n?\"ácter\":\"acteres\"},inputTooShort:function(e){var n=e.minimum-e.input.length,r=\"Por favor, introduzca \"+n+\" car\";return r+=1==n?\"ácter\":\"acteres\"},loadingMore:function(){return\"Cargando más resultados…\"},maximumSelected:function(e){var n=\"Sólo puede seleccionar \"+e.maximum+\" elemento\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No se encontraron resultados\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Eliminar todos los elementos\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.et.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/et/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['et'] = Object.assign(\n    window.oc.langMessages['et'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Vorming\",\n        \"quote\": \"Tsitaat\",\n        \"code\": \"Kood\",\n        \"header1\": \"Pealkiri 1\",\n        \"header2\": \"Pealkiri 2\",\n        \"header3\": \"Pealkiri 3\",\n        \"header4\": \"Pealkiri 4\",\n        \"header5\": \"Pealkiri 5\",\n        \"header6\": \"Pealkiri 6\",\n        \"bold\": \"Paks\",\n        \"italic\": \"Kursiiv\",\n        \"unorderedlist\": \"J\\u00e4rjestamata nimekiri\",\n        \"orderedlist\": \"J\\u00e4rjestatud nimekiri\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Pilt\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Sisesta horisontaaljoon\",\n        \"fullscreen\": \"T\\u00e4isekraan\",\n        \"preview\": \"Eelvaade\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Sisesta link\",\n        \"insert_image\": \"Siseta pilt\",\n        \"insert_video\": \"Sisesta video\",\n        \"insert_audio\": \"Sisesta heliklipp\",\n        \"invalid_file_empty_insert\": \"Palun vali fail, millele link lisada.\",\n        \"invalid_file_single_insert\": \"Palun vali \\u00fcks fail.\",\n        \"invalid_image_empty_insert\": \"Palun vali pildid, mida lisada.\",\n        \"invalid_video_empty_insert\": \"Palun vali videoklipp, mida lisada.\",\n        \"invalid_audio_empty_insert\": \"Palun vali heliklipp, mida lisada.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Loobu\",\n        \"widget_remove_confirm\": \"Eemalda see widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Eelmine kuu\",\n        \"nextMonth\": \"J\\u00e4rgmine kuu\",\n        \"months\": [\n            \"Jaanuar\",\n            \"Veebruar\",\n            \"M\\u00e4rts\",\n            \"Aprill\",\n            \"Mai\",\n            \"Juuni\",\n            \"Juuli\",\n            \"August\",\n            \"September\",\n            \"Oktoober\",\n            \"November\",\n            \"Detsember\"\n        ],\n        \"weekdays\": [\n            \"P\\u00fchap\\u00e4ev\",\n            \"Esmasp\\u00e4ev\",\n            \"Teisip\\u00e4ev\",\n            \"Kolmap\\u00e4ev\",\n            \"Neljap\\u00e4ev\",\n            \"Reede\",\n            \"Laup\\u00e4ev\"\n        ],\n        \"weekdaysShort\": [\n            \"P\",\n            \"E\",\n            \"T\",\n            \"K\",\n            \"N\",\n            \"R\",\n            \"L\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"k\\u00f5ik\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"k\\u00f5ik\",\n            \"filter_button_text\": \"Filtreeri\",\n            \"reset_button_text\": \"L\\u00e4htesta\",\n            \"date_placeholder\": \"Kuup\\u00e4ev\",\n            \"after_placeholder\": \"Hiljem kui\",\n            \"before_placeholder\": \"Varem kui\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"N\\u00e4ita stacktrace\",\n        \"hide_stacktrace\": \"Peida stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Kujundatud\",\n            \"raw\": \"Algne\"\n        },\n        \"editor\": {\n            \"title\": \"L\\u00e4htekoodi redaktor\",\n            \"description\": \"Sinu operatsioonis\\u00fcsteem peaks olema sedistatud \\u00fche URL skeemi jaoks.\",\n            \"openWith\": \"Ava programmiga\",\n            \"remember_choice\": \"J\\u00e4ta valik selleks sessiooniks meelde\",\n            \"open\": \"Ava\",\n            \"cancel\": \"Loobu\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/et\",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" vähem\"},inputTooShort:function(e){var n=e.minimum-e.input.length,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" rohkem\"},loadingMore:function(){return\"Laen tulemusi…\"},maximumSelected:function(e){var n=\"Saad vaid \"+e.maximum+\" tulemus\";return 1==e.maximum?n+=\"e\":n+=\"t\",n+=\" valida\"},noResults:function(){return\"Tulemused puuduvad\"},searching:function(){return\"Otsin…\"},removeAllItems:function(){return\"Eemalda kõik esemed\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.fa.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/fa/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['fa'] = Object.assign(\n    window.oc.langMessages['fa'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u0642\\u0627\\u0644\\u0628 \\u0628\\u0646\\u062f\\u06cc\",\n        \"quote\": \"\\u0646\\u0642\\u0644 \\u0642\\u0648\\u0644\",\n        \"code\": \"\\u06a9\\u062f\",\n        \"header1\": \"\\u0633\\u0631\\u062e\\u0637 1\",\n        \"header2\": \"\\u0633\\u0631\\u062e\\u0637 2\",\n        \"header3\": \"\\u0633\\u0631\\u062e\\u0637 3\",\n        \"header4\": \"\\u0633\\u0631\\u062e\\u0637 4\",\n        \"header5\": \"\\u0633\\u0631\\u062e\\u0637 5\",\n        \"header6\": \"\\u0633\\u0631\\u062e\\u0637 6\",\n        \"bold\": \"\\u0638\\u062e\\u06cc\\u0645\",\n        \"italic\": \"\\u0645\\u0648\\u0631\\u0628\",\n        \"unorderedlist\": \"\\u0644\\u06cc\\u0633\\u062a \\u0628\\u062f\\u0648\\u0646 \\u062a\\u0631\\u062a\\u06cc\\u0628\",\n        \"orderedlist\": \"\\u0644\\u06cc\\u0633\\u062a \\u0628\\u0627 \\u062a\\u0631\\u062a\\u06cc\\u0628\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\u0648\\u06cc\\u062f\\u06cc\\u0648\",\n        \"image\": \"\\u062a\\u0635\\u0648\\u06cc\\u0631\",\n        \"link\": \"\\u0644\\u06cc\\u0646\\u06a9\",\n        \"horizontalrule\": \"\\u062f\\u0631\\u062c \\u062e\\u0637 \\u0627\\u0641\\u0642\\u06cc\",\n        \"fullscreen\": \"\\u062a\\u0645\\u0627\\u0645 \\u0635\\u0641\\u062d\\u0647\",\n        \"preview\": \"\\u067e\\u06cc\\u0634 \\u0646\\u0645\\u0627\\u06cc\\u0634\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u062f\\u0631\\u062c \\u0622\\u062f\\u0631\\u0633 \\u0631\\u0633\\u0627\\u0646\\u0647\",\n        \"insert_image\": \"\\u062f\\u0631\\u062c \\u062a\\u0635\\u0648\\u06cc\\u0631\",\n        \"insert_video\": \"\\u062f\\u0631\\u062c \\u0648\\u06cc\\u062f\\u06cc\\u0648\",\n        \"insert_audio\": \"\\u062f\\u0631\\u062c \\u0635\\u0648\\u062a\",\n        \"invalid_file_empty_insert\": \"\\u0644\\u0637\\u0641\\u0627 \\u0641\\u0627\\u06cc\\u0644\\u06cc \\u0631\\u0627 \\u062c\\u0647\\u062a \\u062f\\u0631\\u062c \\u0644\\u06cc\\u0646\\u06a9 \\u0622\\u0646 \\u0648\\u0627\\u0631\\u062f \\u0646\\u0645\\u0627\\u06cc\\u06cc\\u062f\",\n        \"invalid_file_single_insert\": \"\\u0644\\u0637\\u0641\\u0627 \\u06cc\\u06a9 \\u0641\\u0627\\u06cc\\u0644 \\u0631\\u0627 \\u0648\\u0627\\u0631\\u062f \\u0646\\u0645\\u0627\\u06cc\\u06cc\\u062f\",\n        \"invalid_image_empty_insert\": \"\\u0644\\u0637\\u0641\\u0627 \\u062a\\u0635\\u0648\\u06cc\\u0631(\\u0647\\u0627) \\u0631\\u0627 \\u062c\\u0647\\u062a \\u062f\\u0631\\u062c \\u0627\\u0646\\u062a\\u062e\\u0627\\u0628 \\u0646\\u0645\\u0627\\u06cc\\u06cc\\u062f\",\n        \"invalid_video_empty_insert\": \"\\u0644\\u0637\\u0641\\u0627 \\u0648\\u06cc\\u062f\\u06cc\\u0648 \\u0631\\u0627 \\u062c\\u0647\\u062a \\u062f\\u0631\\u062c \\u0627\\u0646\\u062a\\u062e\\u0627\\u0628 \\u0646\\u0645\\u0627\\u06cc\\u06cc\\u062f.\",\n        \"invalid_audio_empty_insert\": \"\\u0644\\u0637\\u0641\\u0627 \\u0641\\u0627\\u06cc\\u0644 \\u0635\\u0648\\u062a\\u06cc \\u0631\\u0627 \\u062c\\u0647\\u062a \\u062f\\u0631\\u062c \\u0627\\u0646\\u062a\\u062e\\u0627\\u0628 \\u0646\\u0645\\u0627\\u06cc\\u06cc\\u062f\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"\\u062a\\u0627\\u06cc\\u06cc\\u062f\",\n        \"cancel_button_text\": \"\\u0627\\u0646\\u0635\\u0631\\u0627\\u0641\",\n        \"widget_remove_confirm\": \"\\u0627\\u06cc\\u0646 \\u0627\\u0628\\u0632\\u0627\\u0631\\u06a9 \\u062d\\u0630\\u0641 \\u0634\\u0648\\u062f\\u061f\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\u0645\\u0627\\u0647 \\u0642\\u0628\\u0644\",\n        \"nextMonth\": \"\\u0645\\u0627\\u0647 \\u0628\\u0639\\u062f\",\n        \"months\": [\n            \"\\u0641\\u0631\\u0648\\u0631\\u062f\\u06cc\\u0646\",\n            \"\\u0627\\u0631\\u062f\\u06cc\\u0628\\u0647\\u0634\\u062a\",\n            \"\\u062e\\u0631\\u062f\\u0627\\u062f\",\n            \"\\u062a\\u06cc\\u0631\",\n            \"\\u0645\\u0631\\u062f\\u0627\\u062f\",\n            \"\\u0634\\u0647\\u0631\\u06cc\\u0648\\u0631\",\n            \"\\u0645\\u0647\\u0631\",\n            \"\\u0622\\u0628\\u0627\\u0646\",\n            \"\\u0622\\u0630\\u0631\",\n            \"\\u062f\\u06cc\",\n            \"\\u0628\\u0647\\u0645\\u0646\",\n            \"\\u0627\\u0633\\u0641\\u0646\\u062f\"\n        ],\n        \"weekdays\": [\n            \"\\u06cc\\u06a9\\u0634\\u0646\\u0628\\u0647\",\n            \"\\u062f\\u0648\\u0634\\u0646\\u0628\\u0647\",\n            \"\\u0633\\u0647 \\u0634\\u0646\\u0628\\u0647\",\n            \"\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647\",\n            \"\\u067e\\u0646\\u062c \\u0634\\u0646\\u0628\\u0647\",\n            \"\\u062c\\u0645\\u0639\\u0647\",\n            \"\\u0634\\u0646\\u0628\\u0647\"\n        ],\n        \"weekdaysShort\": [\n            \"\\u06cc\",\n            \"\\u062f\",\n            \"\\u0633\",\n            \"\\u0686\",\n            \"\\u067e\",\n            \"\\u062c\",\n            \"\\u0634\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"\\u062a\\u0627\\u06cc\\u06cc\\u062f\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\u0647\\u0645\\u0647\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"\\u0647\\u0645\\u0647\",\n            \"filter_button_text\": \"\\u0641\\u06cc\\u0644\\u062a\\u0631\",\n            \"reset_button_text\": \"\\u0628\\u0627\\u0632\\u0646\\u0634\\u0627\\u0646\\u06cc\",\n            \"date_placeholder\": \"\\u062a\\u0627\\u0631\\u06cc\\u062e\",\n            \"after_placeholder\": \"\\u0628\\u0639\\u062f \\u0627\\u0632\",\n            \"before_placeholder\": \"\\u0642\\u0628\\u0644 \\u0627\\u0632\"\n        },\n        \"numbers\": {\n            \"all\": \"\\u0647\\u0645\\u0647\",\n            \"filter_button_text\": \"\\u0641\\u06cc\\u0644\\u062a\\u0631\",\n            \"reset_button_text\": \"\\u0628\\u0627\\u0632\\u0646\\u0634\\u0627\\u0646\\u06cc\",\n            \"min_placeholder\": \"\\u06a9\\u0645\",\n            \"max_placeholder\": \"\\u0632\\u06cc\\u0627\\u062f\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"\\u0646\\u0645\\u0627\\u06cc\\u0634 \\u0631\\u0648\\u0646\\u062f \\u0627\\u062c\\u0631\\u0627\",\n        \"hide_stacktrace\": \"\\u0645\\u062e\\u0641\\u06cc \\u0633\\u0627\\u0632\\u06cc \\u0631\\u0648\\u0646\\u062f \\u0627\\u062c\\u0631\\u0627\",\n        \"tabs\": {\n            \"formatted\": \"\\u0642\\u0627\\u0644\\u0628 \\u0628\\u0646\\u062f\\u06cc \\u0634\\u062f\\u0647\",\n            \"raw\": \"\\u062e\\u0627\\u0645\"\n        },\n        \"editor\": {\n            \"title\": \"\\u0648\\u06cc\\u0631\\u0627\\u06cc\\u0634\\u06af\\u0631 \\u06a9\\u062f\",\n            \"description\": \"\\u0633\\u06cc\\u0633\\u062a\\u0645 \\u0639\\u0627\\u0645\\u0644 \\u0634\\u0645\\u0627 \\u0628\\u0627\\u06cc\\u062f \\u0628\\u0631\\u0627\\u06cc \\u06cc\\u06a9\\u06cc \\u0627\\u0632 \\u0627\\u06cc\\u0646 \\u0634\\u0645\\u0627\\u06cc \\u0622\\u062f\\u0631\\u0633 \\u0647\\u0627 \\u067e\\u06cc\\u06a9\\u0631\\u0628\\u0646\\u062f\\u06cc \\u0634\\u062f\\u0647 \\u0628\\u0627\\u0634\\u062f.\",\n            \"openWith\": \"\\u0628\\u0627\\u0632 \\u06a9\\u0631\\u062f\\u0646 \\u062a\\u0648\\u0633\\u0637\",\n            \"remember_choice\": \"\\u06af\\u0632\\u06cc\\u0646\\u0647 \\u0627\\u0646\\u062a\\u062e\\u0627\\u0628 \\u0634\\u062f\\u0647 \\u0631\\u0627 \\u0628\\u0647 \\u062e\\u0627\\u0637\\u0631 \\u062f\\u0627\\u0634\\u062a\\u0647 \\u0628\\u0627\\u0634\",\n            \"open\": \"\\u0628\\u0627\\u0632 \\u06a9\\u0631\\u062f\\u0646\",\n            \"cancel\": \"\\u0627\\u0646\\u0635\\u0631\\u0627\\u0641\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/fa\",[],function(){return{errorLoading:function(){return\"امکان بارگذاری نتایج وجود ندارد.\"},inputTooLong:function(n){return\"لطفاً \"+(n.input.length-n.maximum)+\" کاراکتر را حذف نمایید\"},inputTooShort:function(n){return\"لطفاً تعداد \"+(n.minimum-n.input.length)+\" کاراکتر یا بیشتر وارد نمایید\"},loadingMore:function(){return\"در حال بارگذاری نتایج بیشتر...\"},maximumSelected:function(n){return\"شما تنها می‌توانید \"+n.maximum+\" آیتم را انتخاب نمایید\"},noResults:function(){return\"هیچ نتیجه‌ای یافت نشد\"},searching:function(){return\"در حال جستجو...\"},removeAllItems:function(){return\"همه موارد را حذف کنید\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.fi.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/fi/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['fi'] = Object.assign(\n    window.oc.langMessages['fi'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Muotoilu\",\n        \"quote\": \"Lainaus\",\n        \"code\": \"Koodi\",\n        \"header1\": \"Otsikko 1\",\n        \"header2\": \"Otsikko 2\",\n        \"header3\": \"Otsikko 3\",\n        \"header4\": \"Otsikko 4\",\n        \"header5\": \"Otsikko 5\",\n        \"header6\": \"Otsikko 6\",\n        \"bold\": \"Lihavointi\",\n        \"italic\": \"Kursivointi\",\n        \"unorderedlist\": \"J\\u00e4rjest\\u00e4m\\u00e4t\\u00f6n lista\",\n        \"orderedlist\": \"J\\u00e4rjestetty lista\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Kuva\",\n        \"link\": \"Linkki\",\n        \"horizontalrule\": \"Lis\\u00e4\\u00e4 horisontaalinen jakaja\",\n        \"fullscreen\": \"Kokon\\u00e4ytt\\u00f6\",\n        \"preview\": \"Esikatsele\",\n        \"strikethrough\": \"Yliviivattu\",\n        \"cleanblock\": \"Puhdas blokki\",\n        \"table\": \"Taulukko\",\n        \"sidebyside\": \"Vierekk\\u00e4in\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Lis\\u00e4\\u00e4 linkki Mediaan\",\n        \"insert_image\": \"Lis\\u00e4\\u00e4 kuva\",\n        \"insert_video\": \"Lis\\u00e4\\u00e4 video\",\n        \"insert_audio\": \"Lis\\u00e4\\u00e4 \\u00e4\\u00e4nitiedosto\",\n        \"invalid_file_empty_insert\": \"Valitse liitett\\u00e4v\\u00e4 tiedosto.\",\n        \"invalid_file_single_insert\": \"Valitse vain yksi tiedosto.\",\n        \"invalid_image_empty_insert\": \"Valitse linkitett\\u00e4v\\u00e4(t) kuva(t).\",\n        \"invalid_video_empty_insert\": \"Valitse linkitett\\u00e4v\\u00e4 videotiedosto.\",\n        \"invalid_audio_empty_insert\": \"Valitse linkitett\\u00e4v\\u00e4 \\u00e4\\u00e4nitiedosto.\"\n    },\n    \"alert\": {\n        \"error\": \"Virhe\",\n        \"confirm\": \"Vahvista\",\n        \"dismiss\": \"Poistu\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Peruuta\",\n        \"widget_remove_confirm\": \"Poista t\\u00e4m\\u00e4 vimpain?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Edellinen kuukausi\",\n        \"nextMonth\": \"Seuraava kuukausi\",\n        \"months\": [\n            \"tammikuu\",\n            \"helmikuu\",\n            \"maaliskuu\",\n            \"huhtikuu\",\n            \"toukokuu\",\n            \"kes\\u00e4kuu\",\n            \"hein\\u00e4kuu\",\n            \"elokuu\",\n            \"syyskuu\",\n            \"lokakuu\",\n            \"marraskuu\",\n            \"joulukuu\"\n        ],\n        \"weekdays\": [\n            \"sunnutai\",\n            \"maanantai\",\n            \"tiistai\",\n            \"keskiviikko\",\n            \"torstai\",\n            \"perjantai\",\n            \"lauantai\"\n        ],\n        \"weekdaysShort\": [\n            \"su\",\n            \"ma\",\n            \"ti\",\n            \"ke\",\n            \"to\",\n            \"pe\",\n            \"la\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"kaikki\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Ota k\\u00e4ytt\\u00f6\\u00f6n\",\n            \"clear_button_text\": \"Tyhjenn\\u00e4\"\n        },\n        \"dates\": {\n            \"all\": \"kaikki\",\n            \"filter_button_text\": \"Suodata\",\n            \"reset_button_text\": \"Palauta\",\n            \"date_placeholder\": \"P\\u00e4iv\\u00e4\",\n            \"after_placeholder\": \"J\\u00e4lkeen\",\n            \"before_placeholder\": \"Ennen\"\n        },\n        \"numbers\": {\n            \"all\": \"kaikki\",\n            \"filter_button_text\": \"Suodata\",\n            \"reset_button_text\": \"Palauta\",\n            \"min_placeholder\": \"V\\u00e4h.\",\n            \"max_placeholder\": \"Enint.\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"N\\u00e4yt\\u00e4 stacktrace\",\n        \"hide_stacktrace\": \"Piilota stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Muotoiltu\",\n            \"raw\": \"Raaka\"\n        },\n        \"editor\": {\n            \"title\": \"L\\u00e4hdekoodieditori\",\n            \"description\": \"K\\u00e4ytt\\u00f6j\\u00e4rjestelm\\u00e4si pit\\u00e4isi olla m\\u00e4\\u00e4ritetty kuuntelemaan jotain n\\u00e4ist\\u00e4 URL osoitteista.\",\n            \"openWith\": \"Avaa sovelluksessa\",\n            \"remember_choice\": \"Muista valittu vaihtoehto istunnon ajan\",\n            \"open\": \"Avaa\",\n            \"cancel\": \"Peruuta\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"Et voi siirt\\u00e4\\u00e4 enemp\\u00e4\\u00e4 tiedostoja.\",\n        \"invalid_file_type\": \"T\\u00e4m\\u00e4n tyypin tiedostot eiv\\u00e4t ole sallittuja.\",\n        \"file_too_big\": \"Tiedosto on liian iso ({{filesize}}MB). Suurin sallittu tiedostokoko on: {{maxFilesize}}MB.\",\n        \"response_error\": \"Palvelin vastasi koodilla {{statusCode}}.\",\n        \"remove_file\": \"Poista tiedosto\"\n    },\n    \"inspector\": {\n        \"add\": \"Lis\\u00e4\\u00e4\",\n        \"remove\": \"Poista\",\n        \"key\": \"Avain\",\n        \"value\": \"Arvo\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Peruuta\",\n        \"items\": \"Kohteet\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/fi\",[],function(){return{errorLoading:function(){return\"Tuloksia ei saatu ladattua.\"},inputTooLong:function(n){return\"Ole hyvä ja anna \"+(n.input.length-n.maximum)+\" merkkiä vähemmän\"},inputTooShort:function(n){return\"Ole hyvä ja anna \"+(n.minimum-n.input.length)+\" merkkiä lisää\"},loadingMore:function(){return\"Ladataan lisää tuloksia…\"},maximumSelected:function(n){return\"Voit valita ainoastaan \"+n.maximum+\" kpl\"},noResults:function(){return\"Ei tuloksia\"},searching:function(){return\"Haetaan…\"},removeAllItems:function(){return\"Poista kaikki kohteet\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.fr-ca.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/fr-ca/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['fr-ca'] = Object.assign(\n    window.oc.langMessages['fr-ca'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.fr.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/fr/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['fr'] = Object.assign(\n    window.oc.langMessages['fr'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatage\",\n        \"quote\": \"Citation\",\n        \"code\": \"Code\",\n        \"header1\": \"Ent\\u00eate 1\",\n        \"header2\": \"Ent\\u00eate 2\",\n        \"header3\": \"Ent\\u00eate 3\",\n        \"header4\": \"Ent\\u00eate 4\",\n        \"header5\": \"Ent\\u00eate 5\",\n        \"header6\": \"Ent\\u00eate 6\",\n        \"bold\": \"Gras\",\n        \"italic\": \"Italique\",\n        \"unorderedlist\": \"Liste non ordonn\\u00e9e\",\n        \"orderedlist\": \"Liste ordonn\\u00e9e\",\n        \"snippet\": \"Fragment\",\n        \"video\": \"Vid\\u00e9o\",\n        \"image\": \"Image\",\n        \"link\": \"Lien\",\n        \"horizontalrule\": \"Ins\\u00e9rer une ligne horizontale\",\n        \"fullscreen\": \"Plein \\u00e9cran\",\n        \"preview\": \"Aper\\u00e7u\",\n        \"strikethrough\": \"Barr\\u00e9\",\n        \"cleanblock\": \"Block propre\",\n        \"table\": \"Tableau\",\n        \"sidebyside\": \"C\\u00f4te \\u00e0 c\\u00f4te\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Ins\\u00e9rer un lien vers un fichier du gestionnaire de m\\u00e9dia\",\n        \"insert_image\": \"Ins\\u00e9rer une image du gestionnaire de m\\u00e9dia\",\n        \"insert_video\": \"Ins\\u00e9rer une vid\\u00e9o du gestionnaire de m\\u00e9dia\",\n        \"insert_audio\": \"Ins\\u00e9rer un document audio du gestionnaire de m\\u00e9dia\",\n        \"invalid_file_empty_insert\": \"Veuillez s\\u00e9lectionner un fichier \\u00e0 lier.\",\n        \"invalid_file_single_insert\": \"Veuillez s\\u00e9lectionner un seul fichier.\",\n        \"invalid_image_empty_insert\": \"Veuillez s\\u00e9lectionner au moins une image \\u00e0 ins\\u00e9rer.\",\n        \"invalid_video_empty_insert\": \"Veuillez s\\u00e9lectionner une vid\\u00e9o \\u00e0 ins\\u00e9rer.\",\n        \"invalid_audio_empty_insert\": \"Veuillez s\\u00e9lectionner un document audio \\u00e0 ins\\u00e9rer.\"\n    },\n    \"alert\": {\n        \"error\": \"Erreur\",\n        \"confirm\": \"Confirmer\",\n        \"dismiss\": \"Masquer\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Annuler\",\n        \"widget_remove_confirm\": \"Retirer ce widget ?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Mois pr\\u00e9c\\u00e9dent\",\n        \"nextMonth\": \"Mois suivant\",\n        \"months\": [\n            \"Janvier\",\n            \"F\\u00e9vrier\",\n            \"Mars\",\n            \"Avril\",\n            \"Mai\",\n            \"Juin\",\n            \"Juillet\",\n            \"Ao\\u00fbt\",\n            \"Septembre\",\n            \"Octobre\",\n            \"Novembre\",\n            \"D\\u00e9cembre\"\n        ],\n        \"weekdays\": [\n            \"Dimanche\",\n            \"Lundi\",\n            \"Mardi\",\n            \"Mercredi\",\n            \"Jeudi\",\n            \"Vendredi\",\n            \"Samedi\"\n        ],\n        \"weekdaysShort\": [\n            \"Dim\",\n            \"Lun\",\n            \"Mar\",\n            \"Mer\",\n            \"Jeu\",\n            \"Ven\",\n            \"Sam\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"tout\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Appliquer\",\n            \"clear_button_text\": \"Annuler\"\n        },\n        \"dates\": {\n            \"all\": \"toute la p\\u00e9riode\",\n            \"filter_button_text\": \"Filtrer\",\n            \"reset_button_text\": \"Effacer\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"Apr\\u00e8s le\",\n            \"before_placeholder\": \"Avant le\"\n        },\n        \"numbers\": {\n            \"all\": \"tous\",\n            \"filter_button_text\": \"Filtres\",\n            \"reset_button_text\": \"R\\u00e9initialiser\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Afficher la pile d\\u2019ex\\u00e9cution\",\n        \"hide_stacktrace\": \"Masquer la pile d\\u2019ex\\u00e9cution\",\n        \"tabs\": {\n            \"formatted\": \"Message format\\u00e9\",\n            \"raw\": \"Message brut\"\n        },\n        \"editor\": {\n            \"title\": \"S\\u00e9lectionnez l\\u2019\\u00e9diteur de code source \\u00e0 utiliser\",\n            \"description\": \"L\\u2019environnement de votre syst\\u00e8me d\\u2019exploitation doit \\u00eatre configur\\u00e9 pour ouvrir l\\u2019un des sch\\u00e9mas d\\u2019URL ci-dessous.\",\n            \"openWith\": \"Ouvrir avec\",\n            \"remember_choice\": \"Se souvenir de la s\\u00e9lection pour la dur\\u00e9e de la session dans ce navigateur\",\n            \"open\": \"Ouvrir\",\n            \"cancel\": \"Annuler\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"Vous ne pouvez plus t\\u00e9l\\u00e9charger de fichiers.\",\n        \"invalid_file_type\": \"Vous ne pouvez pas t\\u00e9l\\u00e9charger de fichiers de ce type.\",\n        \"file_too_big\": \"Le fichier est trop volumineux ({{filesize}}MB). Taille maximale du fichier: {{maxFilesize}}MB.\",\n        \"response_error\": \"Le serveur a r\\u00e9pondu avec le code {{statusCode}}.\",\n        \"remove_file\": \"Effacer le fichier\"\n    },\n    \"inspector\": {\n        \"add\": \"Ajouter\",\n        \"remove\": \"Retirer\",\n        \"key\": \"Cl\\u00e9\",\n        \"value\": \"Valeur\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Annuler\",\n        \"items\": \"El\\u00e9ments\"\n    },\n    \"[not set]\": \"[non d\\u00e9fini]\",\n    \"1 day (today) if not set\": \"1 jour (aujourd'hui) si non d\\u00e9fini\",\n    \"Apply\": \"Appliquer\",\n    \"Ascending\": \"Ascendant\",\n    \"Attribute\": \"Attribut\",\n    \"Bar\": \"Barre\",\n    \"Chart\": \"Graphique\",\n    \"Chart type\": \"Type de graphique\",\n    \"Color\": \"Couleur\",\n    \"Compare Totals\": \"Comparer les totaux\",\n    \"Configure\": \"Configurer\",\n    \"Custom\": \"Personnalis\\u00e9\",\n    \"Dashboard interval\": \"Intervalle du tableau de bord\",\n    \"Data source\": \"Source de donn\\u00e9es\",\n    \"Date interval\": \"Intervalle de dates\",\n    \"Day\": \"Jour\",\n    \"Delete\": \"Supprimer\",\n    \"Delete Dashboard\": \"Supprimer le tableau de bord\",\n    \"Delete row\": \"Supprimer la ligne\",\n    \"Descending\": \"Descendant\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"D\\u00e9sactiv\\u00e9\",\n    \"Display\": \"Afficher\",\n    \"Display [not set]\": \"Afficher [non d\\u00e9fini]\",\n    \"Display all records\": \"Afficher tous les enregistrements\",\n    \"Display relative bars\": \"Afficher les barres relatives\",\n    \"Display totals\": \"Afficher les totaux\",\n    \"Edit Dashboard\": \"Modifier le tableau de bord\",\n    \"Empty values\": \"Valeurs vides\",\n    \"Enter a positive number\": \"Saisir un nombre positif\",\n    \"Enter a positive number or leave empty to display all records.\": \"Saisir un nombre positif ou laisser vide pour afficher tous les enregistrements.\",\n    \"Equal to\": \"\\u00c9gal \\u00e0\",\n    \"Export Dashboard\": \"Exporter le tableau de bord\",\n    \"Extra table fields\": \"Champs suppl\\u00e9mentaires du tableau\",\n    \"Filters\": \"Filtres\",\n    \"General\": \"G\\u00e9n\\u00e9ral\",\n    \"Greater or equal to\": \"Sup\\u00e9rieur ou \\u00e9gal \\u00e0\",\n    \"Greater than\": \"Sup\\u00e9rieur \\u00e0\",\n    \"Hide\": \"Masquer\",\n    \"Horizontal\": \"Horizontale\",\n    \"Icon\": \"Ic\\u00f4ne\",\n    \"Icon Status\": \"\\u00c9tat de l'ic\\u00f4ne\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Contient\",\n    \"Indicator\": \"Indicateur\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"30 derniers jours\",\n    \"Last 7 days\": \"7 derniers jours\",\n    \"Last month\": \"Mois dernier\",\n    \"Leave empty to disable pagination\": \"Laisser vide pour d\\u00e9sactiver la pagination\",\n    \"Leave empty to hide the title\": \"Laisser vide pour masquer le titre\",\n    \"Less or equal to\": \"Inf\\u00e9rieur ou \\u00e9gal \\u00e0\",\n    \"Less than\": \"Inf\\u00e9rieur \\u00e0\",\n    \"Limit\": \"Limite\",\n    \"Line\": \"Ligne\",\n    \"Link Text\": \"Texte du lien\",\n    \"Link URL\": \"Lien URL\",\n    \"Make Default\": \"D\\u00e9finir par d\\u00e9faut\",\n    \"Manage Dashboards\": \"G\\u00e9rer les tableaux de bord\",\n    \"Metric\": \"M\\u00e9trique\",\n    \"Metrics\": \"M\\u00e9triques\",\n    \"Month\": \"Mois\",\n    \"My Custom Widget\": \"Mon Widget personnalis\\u00e9\",\n    \"No Value\": \"Aucune valeur\",\n    \"Notice text\": \"Texte de l'avertissement\",\n    \"Number of days\": \"Nombre de jours\",\n    \"One of\": \"Parmi\",\n    \"One value per line\": \"Une valeur par ligne\",\n    \"Operation\": \"Op\\u00e9ration\",\n    \"Order\": \"Ordre\",\n    \"Past hour\": \"Derni\\u00e8re heure\",\n    \"Past X days\": \"Derniers X jours\",\n    \"Please provide the widget title\": \"Veuillez fournir le titre du Widget\",\n    \"Please select a data source\": \"Veuillez s\\u00e9lectionner une source de donn\\u00e9es\",\n    \"Please select a dimension\": \"Veuillez s\\u00e9lectionner une dimension\",\n    \"Please select an icon\": \"Veuillez s\\u00e9lectionner une ic\\u00f4ne\",\n    \"Please select metric(s).\": \"Veuillez s\\u00e9lectionner une ou plusieurs m\\u00e9triques.\",\n    \"Prev period\": \"P\\u00e9riode pr\\u00e9c\\u00e9dente\",\n    \"Quarter\": \"Trimestre\",\n    \"Records per page\": \"Enregistrements par page\",\n    \"Refresh every minute\": \"Actualiser toutes les minutes\",\n    \"Rename Dashboard\": \"Renommer le tableau de bord\",\n    \"Reset Layout\": \"R\\u00e9initialiser la mise en page\",\n    \"Reset layout back to default?\": \"R\\u00e9initialiser la mise en page aux valeurs par d\\u00e9faut ?\",\n    \"Same period last year\": \"M\\u00eame p\\u00e9riode l'ann\\u00e9e derni\\u00e8re\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Titre de section\",\n    \"Select a dimension and metrics\": \"S\\u00e9lectionnez une dimension et des m\\u00e9triques\",\n    \"Select an attribute\": \"S\\u00e9lectionner un attribut\",\n    \"Select an operation\": \"S\\u00e9lectionner une op\\u00e9ration\",\n    \"Select sorting metric or dimension\": \"S\\u00e9lectionnez une m\\u00e9trique ou dimension pour le tri\",\n    \"Select the metric color\": \"S\\u00e9lectionner la couleur de la m\\u00e9trique\",\n    \"Set the current layout as the default?\": \"D\\u00e9finir la mise en page actuelle comme mise en page par d\\u00e9faut ?\",\n    \"Show Date Interval\": \"Afficher l'intervalle de dates\",\n    \"Sort by\": \"Trier par\",\n    \"Sorting\": \"Tri\",\n    \"Sorting & Filtering\": \"Tri et filtres\",\n    \"Stacked Bar\": \"Barre empil\\u00e9e\",\n    \"Starts with\": \"Commence par\",\n    \"Success\": \"Succ\\u00e8s\",\n    \"Table\": \"Tableau\",\n    \"Text Notice\": \"Texte d'avertissement\",\n    \"The dashboard layout has been reset to default.\": \"La mise en page du tableau de bord a \\u00e9t\\u00e9 r\\u00e9initialis\\u00e9e aux valeurs par d\\u00e9faut.\",\n    \"The dashboard was successfully updated.\": \"Le tableau de bord a \\u00e9t\\u00e9 mis \\u00e0 jour avec succ\\u00e8s.\",\n    \"The limit value must be at least 1\": \"La valeur de la limite doit \\u00eatre au moins de 1\",\n    \"This dashboard is now the default layout.\": \"Ce tableau de bord est d\\u00e9sormais la mise en page par d\\u00e9faut.\",\n    \"This is a text notice widget.\": \"Ceci est un widget d'avertissement texte.\",\n    \"This month\": \"Ce mois\",\n    \"This quarter\": \"Ce trimestre\",\n    \"This week\": \"Cette semaine\",\n    \"This year\": \"Cette ann\\u00e9e\",\n    \"Title\": \"Titre\",\n    \"Today\": \"Aujourd'hui\",\n    \"Value\": \"Valeur\",\n    \"Values\": \"Valeurs\",\n    \"Vertical\": \"Verticale\",\n    \"Warning\": \"Avertissement\",\n    \"Week\": \"Semaine\",\n    \"Year\": \"Ann\\u00e9e\",\n    \"Yesterday\": \"Hier\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/fr\",[],function(){return{errorLoading:function(){return\"Les résultats ne peuvent pas être chargés.\"},inputTooLong:function(e){var n=e.input.length-e.maximum;return\"Supprimez \"+n+\" caractère\"+(n>1?\"s\":\"\")},inputTooShort:function(e){var n=e.minimum-e.input.length;return\"Saisissez au moins \"+n+\" caractère\"+(n>1?\"s\":\"\")},loadingMore:function(){return\"Chargement de résultats supplémentaires…\"},maximumSelected:function(e){return\"Vous pouvez seulement sélectionner \"+e.maximum+\" élément\"+(e.maximum>1?\"s\":\"\")},noResults:function(){return\"Aucun résultat trouvé\"},searching:function(){return\"Recherche en cours…\"},removeAllItems:function(){return\"Supprimer tous les éléments\"},removeItem:function(){return\"Supprimer l'élément\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.hr.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/hr/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['hr'] = Object.assign(\n    window.oc.langMessages['hr'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hr\",[],function(){function n(n){var e=\" \"+n+\" znak\";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+=\"a\"):e+=\"ova\",e}return{errorLoading:function(){return\"Preuzimanje nije uspjelo.\"},inputTooLong:function(e){return\"Unesite \"+n(e.input.length-e.maximum)},inputTooShort:function(e){return\"Unesite još \"+n(e.minimum-e.input.length)},loadingMore:function(){return\"Učitavanje rezultata…\"},maximumSelected:function(n){return\"Maksimalan broj odabranih stavki je \"+n.maximum},noResults:function(){return\"Nema rezultata\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Ukloni sve stavke\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.hu.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/hu/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['hu'] = Object.assign(\n    window.oc.langMessages['hu'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Forr\\u00e1sk\\u00f3d\",\n        \"quote\": \"Id\\u00e9zet\",\n        \"code\": \"K\\u00f3d\",\n        \"header1\": \"C\\u00edmsor 1\",\n        \"header2\": \"C\\u00edmsor 2\",\n        \"header3\": \"C\\u00edmsor 3\",\n        \"header4\": \"C\\u00edmsor 4\",\n        \"header5\": \"C\\u00edmsor 5\",\n        \"header6\": \"C\\u00edmsor 6\",\n        \"bold\": \"F\\u00e9lk\\u00f6v\\u00e9r\",\n        \"italic\": \"D\\u00f6lt\",\n        \"unorderedlist\": \"Rendezett lista\",\n        \"orderedlist\": \"Sz\\u00e1mozott lista\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Vide\\u00f3\",\n        \"image\": \"K\\u00e9p\",\n        \"link\": \"Hivatkoz\\u00e1s\",\n        \"horizontalrule\": \"Vonal besz\\u00far\\u00e1sa\",\n        \"fullscreen\": \"Teljes k\\u00e9perny\\u0151\",\n        \"preview\": \"El\\u0151n\\u00e9zet\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Hivatkoz\\u00e1s besz\\u00far\\u00e1sa\",\n        \"insert_image\": \"K\\u00e9p besz\\u00far\\u00e1sa\",\n        \"insert_video\": \"Vide\\u00f3 besz\\u00far\\u00e1sa\",\n        \"insert_audio\": \"Audi\\u00f3 besz\\u00far\\u00e1sa\",\n        \"invalid_file_empty_insert\": \"Hivatkoz\\u00e1s k\\u00e9sz\\u00edt\\u00e9s\\u00e9hez jel\\u00f6lj\\u00f6n ki egy sz\\u00f6vegr\\u00e9szt.\",\n        \"invalid_file_single_insert\": \"K\\u00e9rj\\u00fck jel\\u00f6lj\\u00f6n ki egy f\\u00e1jlt.\",\n        \"invalid_image_empty_insert\": \"V\\u00e1lasszon ki legal\\u00e1bb egy k\\u00e9pet a besz\\u00far\\u00e1shoz.\",\n        \"invalid_video_empty_insert\": \"V\\u00e1lasszon ki legal\\u00e1bb egy vide\\u00f3t a besz\\u00far\\u00e1shoz.\",\n        \"invalid_audio_empty_insert\": \"V\\u00e1lasszon ki legal\\u00e1bb egy audi\\u00f3t a besz\\u00far\\u00e1shoz.\"\n    },\n    \"alert\": {\n        \"error\": \"Hiba\",\n        \"confirm\": \"Elfogad\\u00e1s\",\n        \"dismiss\": \"Elutas\\u00edt\\u00e1s\",\n        \"confirm_button_text\": \"Igen\",\n        \"cancel_button_text\": \"M\\u00e9gsem\",\n        \"widget_remove_confirm\": \"Val\\u00f3ban t\\u00f6r\\u00f6lni akarja?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"El\\u0151z\\u0151 h\\u00f3nap\",\n        \"nextMonth\": \"K\\u00f6vetkez\\u0151 h\\u00f3nap\",\n        \"months\": [\n            \"janu\\u00e1r\",\n            \"febru\\u00e1r\",\n            \"m\\u00e1rcius\",\n            \"\\u00e1prilis\",\n            \"m\\u00e1jus\",\n            \"j\\u00fanius\",\n            \"j\\u00falius\",\n            \"augusztus\",\n            \"szeptember\",\n            \"okt\\u00f3ber\",\n            \"november\",\n            \"december\"\n        ],\n        \"weekdays\": [\n            \"vas\\u00e1rnap\",\n            \"h\\u00e9tf\\u0151\",\n            \"kedd\",\n            \"szerda\",\n            \"cs\\u00fct\\u00f6rt\\u00f6k\",\n            \"p\\u00e9ntek\",\n            \"szombat\"\n        ],\n        \"weekdaysShort\": [\n            \"va\",\n            \"h\\u00e9\",\n            \"ke\",\n            \"sze\",\n            \"cs\",\n            \"p\\u00e9\",\n            \"szo\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"Ment\\u00e9s\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\u00f6sszes\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Sz\\u0171r\\u00e9s\",\n            \"clear_button_text\": \"Alaphelyzet\"\n        },\n        \"dates\": {\n            \"all\": \"\\u00f6sszes\",\n            \"filter_button_text\": \"Sz\\u0171r\\u00e9s\",\n            \"reset_button_text\": \"Alaphelyzet\",\n            \"date_placeholder\": \"D\\u00e1tum\",\n            \"after_placeholder\": \"Kezdete\",\n            \"before_placeholder\": \"V\\u00e9ge\"\n        },\n        \"numbers\": {\n            \"all\": \"\\u00f6sszes\",\n            \"filter_button_text\": \"Sz\\u0171r\\u00e9s\",\n            \"reset_button_text\": \"Alaphelyzet\",\n            \"min_placeholder\": \"Minimum\",\n            \"max_placeholder\": \"Maximum\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"R\\u00e9szletek\",\n        \"hide_stacktrace\": \"Rejt\\u00e9s\",\n        \"tabs\": {\n            \"formatted\": \"Form\\u00e1zott\",\n            \"raw\": \"T\\u00f6m\\u00f6r\\u00edtett\"\n        },\n        \"editor\": {\n            \"title\": \"Forr\\u00e1sk\\u00f3d szerkeszt\\u0151\",\n            \"description\": \"Az oper\\u00e1ci\\u00f3s rendszert \\u00fagy kell be\\u00e1ll\\u00edtani, hogy figyelembe vegye az URL s\\u00e9m\\u00e1t.\",\n            \"openWith\": \"Megnyit\\u00e1s mint\",\n            \"remember_choice\": \"Kiv\\u00e1lasztott be\\u00e1ll\\u00edt\\u00e1sok megjegyz\\u00e9se ebben a munkamenetben\",\n            \"open\": \"Megnyit\\u00e1s\",\n            \"cancel\": \"M\\u00e9gsem\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"Nem t\\u00f6lthet fel t\\u00f6bb f\\u00e1jlt.\",\n        \"invalid_file_type\": \"Ilyen t\\u00edpus\\u00fa f\\u00e1jl nem t\\u00f6lthet\\u0151 fel.\",\n        \"file_too_big\": \"A f\\u00e1jl m\\u00e9rete t\\u00fal nagy ({{filesize}}MB). Maximum ennyi lehet: {{maxFilesize}}MB.\",\n        \"response_error\": \"A szerver {{statusCode}} k\\u00f3ddal t\\u00e9rt vissza.\",\n        \"remove_file\": \"F\\u00e1jl elt\\u00e1vol\\u00edt\\u00e1sa\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/hu\",[],function(){return{errorLoading:function(){return\"Az eredmények betöltése nem sikerült.\"},inputTooLong:function(e){return\"Túl hosszú. \"+(e.input.length-e.maximum)+\" karakterrel több, mint kellene.\"},inputTooShort:function(e){return\"Túl rövid. Még \"+(e.minimum-e.input.length)+\" karakter hiányzik.\"},loadingMore:function(){return\"Töltés…\"},maximumSelected:function(e){return\"Csak \"+e.maximum+\" elemet lehet kiválasztani.\"},noResults:function(){return\"Nincs találat.\"},searching:function(){return\"Keresés…\"},removeAllItems:function(){return\"Távolítson el minden elemet\"},removeItem:function(){return\"Elem eltávolítása\"},search:function(){return\"Keresés\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.id.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/id/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['id'] = Object.assign(\n    window.oc.langMessages['id'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/id\",[],function(){return{errorLoading:function(){return\"Data tidak boleh diambil.\"},inputTooLong:function(n){return\"Hapuskan \"+(n.input.length-n.maximum)+\" huruf\"},inputTooShort:function(n){return\"Masukkan \"+(n.minimum-n.input.length)+\" huruf lagi\"},loadingMore:function(){return\"Mengambil data…\"},maximumSelected:function(n){return\"Anda hanya dapat memilih \"+n.maximum+\" pilihan\"},noResults:function(){return\"Tidak ada data yang sesuai\"},searching:function(){return\"Mencari…\"},removeAllItems:function(){return\"Hapus semua item\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.it.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/it/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['it'] = Object.assign(\n    window.oc.langMessages['it'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formattazione\",\n        \"quote\": \"Citazione\",\n        \"code\": \"Codice\",\n        \"header1\": \"Titolo 1\",\n        \"header2\": \"Titolo 2\",\n        \"header3\": \"Titolo 3\",\n        \"header4\": \"Titolo 4\",\n        \"header5\": \"Titolo 5\",\n        \"header6\": \"Titolo 6\",\n        \"bold\": \"Grassetto\",\n        \"italic\": \"Corsivo\",\n        \"unorderedlist\": \"Elenco puntato\",\n        \"orderedlist\": \"Elenco numerato\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Immagine\",\n        \"link\": \"Collegamento\",\n        \"horizontalrule\": \"Inserisci linea orizzontale\",\n        \"fullscreen\": \"Schermo intero\",\n        \"preview\": \"Anteprima\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Inserisci collegamento elemento multimediale\",\n        \"insert_image\": \"Inserisci immagine\",\n        \"insert_video\": \"Inserisci video\",\n        \"insert_audio\": \"Inserisci audio\",\n        \"invalid_file_empty_insert\": \"Si prega di selezionare un file di cui inserire il collegamento.\",\n        \"invalid_file_single_insert\": \"Si prega di selezionare un singolo file.\",\n        \"invalid_image_empty_insert\": \"Si prega di selezionare l\\\\'immagine/le immagini da inserire.\",\n        \"invalid_video_empty_insert\": \"Si prega di selezionare un file video da inserire.\",\n        \"invalid_audio_empty_insert\": \"Si prega di selezionare un file audio da inserire.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Annulla\",\n        \"widget_remove_confirm\": \"Rimuovere questo widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Mese precedente\",\n        \"nextMonth\": \"Mese successivo\",\n        \"months\": [\n            \"Gennaio\",\n            \"Febbraio\",\n            \"Marzo\",\n            \"Aprile\",\n            \"Maggio\",\n            \"Giugno\",\n            \"Luglio\",\n            \"Agosto\",\n            \"Settembre\",\n            \"Ottobre\",\n            \"Novembre\",\n            \"Dicembre\"\n        ],\n        \"weekdays\": [\n            \"Domenica\",\n            \"Luned\\u00ec\",\n            \"Marted\\u00ec\",\n            \"Mercoled\\u00ec\",\n            \"Gioved\\u00ec\",\n            \"Venerd\\u00ec\",\n            \"Sabato\"\n        ],\n        \"weekdaysShort\": [\n            \"Dom\",\n            \"Lun\",\n            \"Mar\",\n            \"Mer\",\n            \"Gio\",\n            \"Ven\",\n            \"Sab\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"tutti\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Applica\",\n            \"clear_button_text\": \"Rimuovi\"\n        },\n        \"dates\": {\n            \"all\": \"tutte\",\n            \"filter_button_text\": \"Filtra\",\n            \"reset_button_text\": \"Reimposta\",\n            \"date_placeholder\": \"Data\",\n            \"after_placeholder\": \"Dopo\",\n            \"before_placeholder\": \"Prima\"\n        },\n        \"numbers\": {\n            \"all\": \"tutti\",\n            \"filter_button_text\": \"Filtra\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Visualizza la traccia dello stack\",\n        \"hide_stacktrace\": \"Nascondi la traccia dello stack\",\n        \"tabs\": {\n            \"formatted\": \"Formattato\",\n            \"raw\": \"Grezzo\"\n        },\n        \"editor\": {\n            \"title\": \"Editor codice sorgente\",\n            \"description\": \"Il tuo sistema operativo deve essere configurato per ascoltare uno di questi schemi URL.\",\n            \"openWith\": \"Apri con\",\n            \"remember_choice\": \"Ricorda l'opzione selezionata per questa sessione\",\n            \"open\": \"Apri\",\n            \"cancel\": \"Annulla\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/it\",[],function(){return{errorLoading:function(){return\"I risultati non possono essere caricati.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Per favore cancella \"+n+\" caratter\";return t+=1!==n?\"i\":\"e\"},inputTooShort:function(e){return\"Per favore inserisci \"+(e.minimum-e.input.length)+\" o più caratteri\"},loadingMore:function(){return\"Caricando più risultati…\"},maximumSelected:function(e){var n=\"Puoi selezionare solo \"+e.maximum+\" element\";return 1!==e.maximum?n+=\"i\":n+=\"o\",n},noResults:function(){return\"Nessun risultato trovato\"},searching:function(){return\"Sto cercando…\"},removeAllItems:function(){return\"Rimuovi tutti gli oggetti\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.ja.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/ja/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['ja'] = Object.assign(\n    window.oc.langMessages['ja'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ja\",[],function(){return{errorLoading:function(){return\"結果が読み込まれませんでした\"},inputTooLong:function(n){return n.input.length-n.maximum+\" 文字を削除してください\"},inputTooShort:function(n){return\"少なくとも \"+(n.minimum-n.input.length)+\" 文字を入力してください\"},loadingMore:function(){return\"読み込み中…\"},maximumSelected:function(n){return n.maximum+\" 件しか選択できません\"},noResults:function(){return\"対象が見つかりません\"},searching:function(){return\"検索しています…\"},removeAllItems:function(){return\"すべてのアイテムを削除\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.ko.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/ko/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['ko'] = Object.assign(\n    window.oc.langMessages['ko'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\uc11c\\uc2dd\",\n        \"quote\": \"\\uc778\\uc6a9\",\n        \"code\": \"\\ucf54\\ub3c4\",\n        \"header1\": \"\\ud5e4\\ub354 1\",\n        \"header2\": \"\\ud5e4\\ub354 2\",\n        \"header3\": \"\\ud5e4\\ub354 3\",\n        \"header4\": \"\\ud5e4\\ub354 4\",\n        \"header5\": \"\\ud5e4\\ub354 5\",\n        \"header6\": \"\\ud5e4\\ub354 6\",\n        \"bold\": \"\\uc9c4\\ud558\\uac8c\",\n        \"italic\": \"\\uc774\\ud0e4\\ub9ad\",\n        \"unorderedlist\": \"\\ube44\\uc21c\\ucc28 \\ubaa9\\ub85d\",\n        \"orderedlist\": \"\\uc21c\\ucc28 \\ubaa9\\ub85d\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\ub3d9\\uc601\\uc0c1\",\n        \"image\": \"\\uc774\\ubbf8\\uc9c0\",\n        \"link\": \"\\ub9c1\\ud06c\",\n        \"horizontalrule\": \"\\uac00\\ub85c\\uc120 \\uc0bd\\uc785\",\n        \"fullscreen\": \"\\uc804\\uccb4\\ud654\\uba74\",\n        \"preview\": \"\\ubbf8\\ub9ac\\ubcf4\\uae30\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\ubbf8\\ub514\\uc5b4 \\ub9c1\\ud06c \\uc0bd\\uc785\",\n        \"insert_image\": \"\\uadf8\\ub9bc \\uc0bd\\uc785\",\n        \"insert_video\": \"\\ub3d9\\uc601\\uc0c1 \\uc0bd\\uc785\",\n        \"insert_audio\": \"\\uc18c\\ub9ac \\uc0bd\\uc785\",\n        \"invalid_file_empty_insert\": \"\\ub9c1\\ud06c\\ub97c \\uc0bd\\uc785\\ud560 \\ud30c\\uc77c\\uc744 \\uc120\\ud0dd\\ud574\\uc8fc\\uc138\\uc694.\",\n        \"invalid_file_single_insert\": \"\\ud55c\\uac1c\\uc758 \\ud30c\\uc77c\\uc744 \\uc120\\ud0dd\\ud574\\uc8fc\\uc138\\uc694.\",\n        \"invalid_image_empty_insert\": \"\\uc0bd\\uc785\\ud560 \\uadf8\\ub9bc\\uc744 \\uc120\\ud0dd\\ud574 \\uc8fc\\uc138\\uc694.\",\n        \"invalid_video_empty_insert\": \"\\uc0bd\\uc785\\ud560 \\ub3d9\\uc601\\uc0c1\\uc744 \\uc120\\ud0dd\\ud574 \\uc8fc\\uc138\\uc694.\",\n        \"invalid_audio_empty_insert\": \"\\uc0bd\\uc785\\ud560 \\uc18c\\ub9ac\\ud30c\\uc77c\\uc744 \\uc120\\ud0dd\\ud574 \\uc8fc\\uc138\\uc694.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"\\ud655\\uc778\",\n        \"cancel_button_text\": \"\\ucde8\\uc18c\",\n        \"widget_remove_confirm\": \"\\uc774 \\uc704\\uc82f\\uc744 \\uc0ad\\uc81c\\ud558\\uc2dc\\uaca0\\uc2b5\\ub2c8\\uae4c?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\uc9c0\\ub09c \\ub2ec\",\n        \"nextMonth\": \"\\ub2e4\\uc74c \\ub2ec\",\n        \"months\": [\n            \"1\\uc6d4\",\n            \"2\\uc6d4\",\n            \"3\\uc6d4\",\n            \"4\\uc6d4\",\n            \"5\\uc6d4\",\n            \"6\\uc6d4\",\n            \"7\\uc6d4\",\n            \"8\\uc6d4\",\n            \"9\\uc6d4\",\n            \"10\\uc6d4\",\n            \"11\\uc6d4\",\n            \"12\\uc6d4\"\n        ],\n        \"weekdays\": [\n            \"\\uc77c\\uc694\\uc77c\",\n            \"\\uc6d4\\uc694\\uc77c\",\n            \"\\ud654\\uc694\\uc77c\",\n            \"\\uc218\\uc694\\uc77c\",\n            \"\\ubaa9\\uc694\\uc77c\",\n            \"\\uae08\\uc694\\uc77c\",\n            \"\\ud1a0\\uc694\\uc77c\"\n        ],\n        \"weekdaysShort\": [\n            \"\\uc77c\",\n            \"\\uc6d4\",\n            \"\\ud654\",\n            \"\\uc218\",\n            \"\\ubaa9\",\n            \"\\uae08\",\n            \"\\ud1a0\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\uc804\\uccb4\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"\\uc804\\uccb4\",\n            \"filter_button_text\": \"\\ud544\\ud130\",\n            \"reset_button_text\": \"\\uc7ac\\uc124\\uc815\",\n            \"date_placeholder\": \"\\ub0a0\\uc9dc\",\n            \"after_placeholder\": \"\\uc774\\ud6c4\",\n            \"before_placeholder\": \"\\uc774\\uc804\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"\\uc2a4\\ud0dd \\ucd94\\uc801 \\ubcf4\\uae30\",\n        \"hide_stacktrace\": \"\\uc2a4\\ud0dd \\ucd94\\uc801 \\uac10\\ucd94\\uae30\",\n        \"tabs\": {\n            \"formatted\": \"\\uc815\\ub9ac\\ub41c\\ub85c\\uadf8\",\n            \"raw\": \"\\ubcf8\\ub798\\ub85c\\uadf8\"\n        },\n        \"editor\": {\n            \"title\": \"\\uc18c\\uc2a4\\ucf54\\ub4dc \\ud3b8\\uc9d1\\uae30\",\n            \"description\": \"\\uc774\\ub7f0 URL \\uc2a4\\ud0a4\\ub9c8\\ub97c \\ubc1b\\uc744 \\uc218 \\uc788\\ub3c4\\ub85d \\ub2f9\\uc2e0\\uc758 \\uc6b4\\uc601\\uccb4\\uc81c\\uac00 \\uc124\\uc815\\ub418\\uc5b4\\uc57c \\ud569\\ub2c8\\ub2e4.\",\n            \"openWith\": \"\\uac19\\uc774 \\uc5f4\\uae30\",\n            \"remember_choice\": \"\\uc774 \\uc138\\uc158\\uc758 \\uc635\\uc158\\uc744 \\uae30\\uc5b5\",\n            \"open\": \"\\uc5f4\\uae30\",\n            \"cancel\": \"\\ucde8\\uc18c\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ko\",[],function(){return{errorLoading:function(){return\"결과를 불러올 수 없습니다.\"},inputTooLong:function(n){return\"너무 깁니다. \"+(n.input.length-n.maximum)+\" 글자 지워주세요.\"},inputTooShort:function(n){return\"너무 짧습니다. \"+(n.minimum-n.input.length)+\" 글자 더 입력해주세요.\"},loadingMore:function(){return\"불러오는 중…\"},maximumSelected:function(n){return\"최대 \"+n.maximum+\"개까지만 선택 가능합니다.\"},noResults:function(){return\"결과가 없습니다.\"},searching:function(){return\"검색 중…\"},removeAllItems:function(){return\"모든 항목 삭제\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.kr.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/ko/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['ko'] = $.extend(\n    window.oc.langMessages['ko'] || {},\n    {\"markdowneditor\":{\"formatting\":\"\\uc11c\\uc2dd\",\"quote\":\"\\uc778\\uc6a9\",\"code\":\"\\ucf54\\ub3c4\",\"header1\":\"\\ud5e4\\ub354 1\",\"header2\":\"\\ud5e4\\ub354 2\",\"header3\":\"\\ud5e4\\ub354 3\",\"header4\":\"\\ud5e4\\ub354 4\",\"header5\":\"\\ud5e4\\ub354 5\",\"header6\":\"\\ud5e4\\ub354 6\",\"bold\":\"\\uc9c4\\ud558\\uac8c\",\"italic\":\"\\uc774\\ud0e4\\ub9ad\",\"unorderedlist\":\"\\ube44\\uc21c\\ucc28 \\ubaa9\\ub85d\",\"orderedlist\":\"\\uc21c\\ucc28 \\ubaa9\\ub85d\",\"snippet\":\"Snippet\",\"video\":\"\\ub3d9\\uc601\\uc0c1\",\"image\":\"\\uc774\\ubbf8\\uc9c0\",\"link\":\"\\ub9c1\\ud06c\",\"horizontalrule\":\"\\uac00\\ub85c\\uc120 \\uc0bd\\uc785\",\"fullscreen\":\"\\uc804\\uccb4\\ud654\\uba74\",\"preview\":\"\\ubbf8\\ub9ac\\ubcf4\\uae30\",\"strikethrough\":\"Strikethrough\",\"cleanblock\":\"Clean Block\",\"table\":\"Table\",\"sidebyside\":\"Side by Side\"},\"mediamanager\":{\"insert_link\":\"\\ubbf8\\ub514\\uc5b4 \\ub9c1\\ud06c \\uc0bd\\uc785\",\"insert_image\":\"\\uadf8\\ub9bc \\uc0bd\\uc785\",\"insert_video\":\"\\ub3d9\\uc601\\uc0c1 \\uc0bd\\uc785\",\"insert_audio\":\"\\uc18c\\ub9ac \\uc0bd\\uc785\",\"invalid_file_empty_insert\":\"\\ub9c1\\ud06c\\ub97c \\uc0bd\\uc785\\ud560 \\ud30c\\uc77c\\uc744 \\uc120\\ud0dd\\ud574\\uc8fc\\uc138\\uc694.\",\"invalid_file_single_insert\":\"\\ud55c\\uac1c\\uc758 \\ud30c\\uc77c\\uc744 \\uc120\\ud0dd\\ud574\\uc8fc\\uc138\\uc694.\",\"invalid_image_empty_insert\":\"\\uc0bd\\uc785\\ud560 \\uadf8\\ub9bc\\uc744 \\uc120\\ud0dd\\ud574 \\uc8fc\\uc138\\uc694.\",\"invalid_video_empty_insert\":\"\\uc0bd\\uc785\\ud560 \\ub3d9\\uc601\\uc0c1\\uc744 \\uc120\\ud0dd\\ud574 \\uc8fc\\uc138\\uc694.\",\"invalid_audio_empty_insert\":\"\\uc0bd\\uc785\\ud560 \\uc18c\\ub9ac\\ud30c\\uc77c\\uc744 \\uc120\\ud0dd\\ud574 \\uc8fc\\uc138\\uc694.\"},\"alert\":{\"error\":\"Error\",\"confirm\":\"Confirm\",\"dismiss\":\"Dismiss\",\"confirm_button_text\":\"\\ud655\\uc778\",\"cancel_button_text\":\"\\ucde8\\uc18c\",\"widget_remove_confirm\":\"\\uc774 \\uc704\\uc82f\\uc744 \\uc0ad\\uc81c\\ud558\\uc2dc\\uaca0\\uc2b5\\ub2c8\\uae4c?\"},\"datepicker\":{\"previousMonth\":\"\\uc9c0\\ub09c \\ub2ec\",\"nextMonth\":\"\\ub2e4\\uc74c \\ub2ec\",\"months\":[\"1\\uc6d4\",\"2\\uc6d4\",\"3\\uc6d4\",\"4\\uc6d4\",\"5\\uc6d4\",\"6\\uc6d4\",\"7\\uc6d4\",\"8\\uc6d4\",\"9\\uc6d4\",\"10\\uc6d4\",\"11\\uc6d4\",\"12\\uc6d4\"],\"weekdays\":[\"\\uc77c\\uc694\\uc77c\",\"\\uc6d4\\uc694\\uc77c\",\"\\ud654\\uc694\\uc77c\",\"\\uc218\\uc694\\uc77c\",\"\\ubaa9\\uc694\\uc77c\",\"\\uae08\\uc694\\uc77c\",\"\\ud1a0\\uc694\\uc77c\"],\"weekdaysShort\":[\"\\uc77c\",\"\\uc6d4\",\"\\ud654\",\"\\uc218\",\"\\ubaa9\",\"\\uae08\",\"\\ud1a0\"]},\"colorpicker\":{\"choose\":\"OK\"},\"filter\":{\"group\":{\"all\":\"\\uc804\\uccb4\"},\"scopes\":{\"apply_button_text\":\"Apply\",\"clear_button_text\":\"Clear\"},\"dates\":{\"all\":\"\\uc804\\uccb4\",\"filter_button_text\":\"\\ud544\\ud130\",\"reset_button_text\":\"\\uc7ac\\uc124\\uc815\",\"date_placeholder\":\"\\ub0a0\\uc9dc\",\"after_placeholder\":\"\\uc774\\ud6c4\",\"before_placeholder\":\"\\uc774\\uc804\"},\"numbers\":{\"all\":\"all\",\"filter_button_text\":\"Filter\",\"reset_button_text\":\"Reset\",\"min_placeholder\":\"Min\",\"max_placeholder\":\"Max\"}},\"eventlog\":{\"show_stacktrace\":\"\\uc2a4\\ud0dd \\ucd94\\uc801 \\ubcf4\\uae30\",\"hide_stacktrace\":\"\\uc2a4\\ud0dd \\ucd94\\uc801 \\uac10\\ucd94\\uae30\",\"tabs\":{\"formatted\":\"\\uc815\\ub9ac\\ub41c\\ub85c\\uadf8\",\"raw\":\"\\ubcf8\\ub798\\ub85c\\uadf8\"},\"editor\":{\"title\":\"\\uc18c\\uc2a4\\ucf54\\ub4dc \\ud3b8\\uc9d1\\uae30\",\"description\":\"\\uc774\\ub7f0 URL \\uc2a4\\ud0a4\\ub9c8\\ub97c \\ubc1b\\uc744 \\uc218 \\uc788\\ub3c4\\ub85d \\ub2f9\\uc2e0\\uc758 \\uc6b4\\uc601\\uccb4\\uc81c\\uac00 \\uc124\\uc815\\ub418\\uc5b4\\uc57c \\ud569\\ub2c8\\ub2e4.\",\"openWith\":\"\\uac19\\uc774 \\uc5f4\\uae30\",\"remember_choice\":\"\\uc774 \\uc138\\uc158\\uc758 \\uc635\\uc158\\uc744 \\uae30\\uc5b5\",\"open\":\"\\uc5f4\\uae30\",\"cancel\":\"\\ucde8\\uc18c\"}},\"upload\":{\"max_files\":\"You can not upload any more files.\",\"invalid_file_type\":\"You can't upload files of this type.\",\"file_too_big\":\"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\"response_error\":\"Server responded with {{statusCode}} code.\",\"remove_file\":\"Remove file\"},\"inspector\":{\"add\":\"Add\",\"remove\":\"Remove\",\"key\":\"Key\",\"value\":\"Value\",\"ok\":\"OK\",\"cancel\":\"Cancel\",\"items\":\"Items\"}}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.lt.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/lt/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['lt'] = Object.assign(\n    window.oc.langMessages['lt'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatavimas\",\n        \"quote\": \"Citata\",\n        \"code\": \"Kodas\",\n        \"header1\": \"Antra\\u0161t\\u0117 1\",\n        \"header2\": \"Antra\\u0161t\\u0117 2\",\n        \"header3\": \"Antra\\u0161t\\u0117 3\",\n        \"header4\": \"Antra\\u0161t\\u0117 4\",\n        \"header5\": \"Antra\\u0161t\\u0117 5\",\n        \"header6\": \"Antra\\u0161t\\u0117 6\",\n        \"bold\": \"Ry\\u0161kus\",\n        \"italic\": \"Pasvir\\u0119s\",\n        \"unorderedlist\": \"Ner\\u016b\\u0161iuotas S\\u0105ra\\u0161as\",\n        \"orderedlist\": \"R\\u016b\\u0161iuotas S\\u0105ra\\u0161as\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Paviksliukas\",\n        \"link\": \"Nuoroda\",\n        \"horizontalrule\": \"\\u012eterpti Horizontali\\u0105 Linij\\u0105\",\n        \"fullscreen\": \"Visas Ekrano Dydis\",\n        \"preview\": \"Per\\u017ei\\u016br\\u0117ti\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u012eterpti medijos nuorod\\u0105\",\n        \"insert_image\": \"\\u012eterpti Paveiksliuk\\u0105\",\n        \"insert_video\": \"\\u012eterpti Video\",\n        \"insert_audio\": \"\\u012eterpti Audio\",\n        \"invalid_file_empty_insert\": \"Pasirinkite fail\\u0105 \\u012f kur\\u012f norite \\u012fterpti nuorod\\u0105.\",\n        \"invalid_file_single_insert\": \"Pasirinkite vien\\u0105 fail\\u0105.\",\n        \"invalid_image_empty_insert\": \"Pasirinkite pavaiksliuk\\u0105(us) \\u012fterpimui.\",\n        \"invalid_video_empty_insert\": \"Pasirinkite video fail\\u0105 \\u012fterpimui.\",\n        \"invalid_audio_empty_insert\": \"Pasirinkite audio fail\\u0105 \\u012fterpimui.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"GERAI\",\n        \"cancel_button_text\": \"At\\u0161aukti\",\n        \"widget_remove_confirm\": \"Pa\\u0161alinti \\u0161\\u012f valdikl\\u012f?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Ankstenis m\\u0117nuo\",\n        \"nextMonth\": \"Sekantis M\\u0117nuo\",\n        \"months\": [\n            \"Sausis\",\n            \"Vasaris\",\n            \"Kovas\",\n            \"Balandis\",\n            \"Gegu\\u017e\\u0117\",\n            \"Bir\\u017eelis\",\n            \"Liepa\",\n            \"Rugpj\\u016btis\",\n            \"Rugs\\u0117jis\",\n            \"Spalis\",\n            \"Lapkritis\",\n            \"Gruodis\"\n        ],\n        \"weekdays\": [\n            \"Sekmadienis\",\n            \"Pirmadienis\",\n            \"Antradienis\",\n            \"Tre\\u010diadienis\",\n            \"Ketvirtadienis\",\n            \"Penktadienis\",\n            \"\\u0160e\\u0161tadienis\"\n        ],\n        \"weekdaysShort\": [\n            \"Sek\",\n            \"Pir\",\n            \"Ant\",\n            \"Tre\",\n            \"Ket\",\n            \"Pen\",\n            \"\\u0161e\\u0161\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"visos\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"visos\",\n            \"filter_button_text\": \"Filtruoti\",\n            \"reset_button_text\": \"Atstatyti\",\n            \"date_placeholder\": \"Data\",\n            \"after_placeholder\": \"Po\",\n            \"before_placeholder\": \"Prie\\u0161\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Rodyti i\\u0161klotin\\u0119\",\n        \"hide_stacktrace\": \"Sl\\u0117pti i\\u0161klotin\\u0119\",\n        \"tabs\": {\n            \"formatted\": \"Formatuota\",\n            \"raw\": \"Nepadorotas\"\n        },\n        \"editor\": {\n            \"title\": \"\\u0160altinio kodo redaktorius\",\n            \"description\": \"J\\u016bs\\u0173 operacin\\u0117 sistema tur\\u0117t\\u0173 b\\u016bti suderinta vienai i\\u0161 \\u0161i\\u0173 URL schem\\u0173 nuskaitymui.\",\n            \"openWith\": \"Atidaryti su\",\n            \"remember_choice\": \"Atsiminti pasirinkt\\u0105 parinkt\\u012f \\u0161iai sesijai\",\n            \"open\": \"Atidaryti\",\n            \"cancel\": \"At\\u0161aukti\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/lt\",[],function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum,t=\"Pašalinkite \"+i+\" simbol\";return t+=n(i,\"į\",\"ius\",\"ių\")},inputTooShort:function(e){var i=e.minimum-e.input.length,t=\"Įrašykite dar \"+i+\" simbol\";return t+=n(i,\"į\",\"ius\",\"ių\")},loadingMore:function(){return\"Kraunama daugiau rezultatų…\"},maximumSelected:function(e){var i=\"Jūs galite pasirinkti tik \"+e.maximum+\" element\";return i+=n(e.maximum,\"ą\",\"us\",\"ų\")},noResults:function(){return\"Atitikmenų nerasta\"},searching:function(){return\"Ieškoma…\"},removeAllItems:function(){return\"Pašalinti visus elementus\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.lv.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/lv/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['lv'] = Object.assign(\n    window.oc.langMessages['lv'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/lv\",[],function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i=\"Lūdzu ievadiet par  \"+u;return(i+=\" simbol\"+e(u,\"iem\",\"u\",\"iem\"))+\" mazāk\"},inputTooShort:function(n){var u=n.minimum-n.input.length,i=\"Lūdzu ievadiet vēl \"+u;return i+=\" simbol\"+e(u,\"us\",\"u\",\"us\")},loadingMore:function(){return\"Datu ielāde…\"},maximumSelected:function(n){var u=\"Jūs varat izvēlēties ne vairāk kā \"+n.maximum;return u+=\" element\"+e(n.maximum,\"us\",\"u\",\"us\")},noResults:function(){return\"Sakritību nav\"},searching:function(){return\"Meklēšana…\"},removeAllItems:function(){return\"Noņemt visus vienumus\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.nb-no.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/nb-no/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['nb-no'] = Object.assign(\n    window.oc.langMessages['nb-no'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatering\",\n        \"quote\": \"Sitat\",\n        \"code\": \"Kode\",\n        \"header1\": \"Overskrift 1\",\n        \"header2\": \"Overskrift 2\",\n        \"header3\": \"Overskrift 3\",\n        \"header4\": \"Overskrift 4\",\n        \"header5\": \"Overskrift 5\",\n        \"header6\": \"Overskrift 6\",\n        \"bold\": \"Fet\",\n        \"italic\": \"Kursiv\",\n        \"unorderedlist\": \"Punktliste\",\n        \"orderedlist\": \"Nummerert liste\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Bilde\",\n        \"link\": \"Lenke\",\n        \"horizontalrule\": \"Sett inn horisontal linje\",\n        \"fullscreen\": \"Fullskjerm\",\n        \"preview\": \"Forh\\u00e5ndsvisning\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Sett inn Media lenke\",\n        \"insert_image\": \"Sett inn Media bilde\",\n        \"insert_video\": \"Sett inn Media video\",\n        \"insert_audio\": \"Sett inn Media lyd\",\n        \"invalid_file_empty_insert\": \"Velg fil \\u00e5 sette lenken inn i.\",\n        \"invalid_file_single_insert\": \"Vennligst velg \\u00e9n enkelt fil.\",\n        \"invalid_image_empty_insert\": \"Velg bilde(r) \\u00e5 sette inn.\",\n        \"invalid_video_empty_insert\": \"Velg en video \\u00e5 sette inn.\",\n        \"invalid_audio_empty_insert\": \"Velg lyd \\u00e5 sette inn.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Avbryt\",\n        \"widget_remove_confirm\": \"Fjerne widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Forrige m\\u00e5ned\",\n        \"nextMonth\": \"Neste m\\u00e5ned\",\n        \"months\": [\n            \"januar\",\n            \"februar\",\n            \"mars\",\n            \"april\",\n            \"mai\",\n            \"juni\",\n            \"july\",\n            \"august\",\n            \"september\",\n            \"oktober\",\n            \"november\",\n            \"desember\"\n        ],\n        \"weekdays\": [\n            \"s\\u00f8ndag\",\n            \"mandag\",\n            \"tirsdag\",\n            \"onsdag\",\n            \"torsdag\",\n            \"fredag\",\n            \"l\\u00f8rdag\"\n        ],\n        \"weekdaysShort\": [\n            \"s\\u00f8n\",\n            \"man\",\n            \"tir\",\n            \"ons\",\n            \"tor\",\n            \"fre\",\n            \"l\\u00f8r\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"alle\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"alle\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Tilbakestill\",\n            \"date_placeholder\": \"Dato\",\n            \"after_placeholder\": \"Etter\",\n            \"before_placeholder\": \"F\\u00f8r\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Vis stacktrace\",\n        \"hide_stacktrace\": \"Skjul stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formattert\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Kildekodeeditor\",\n            \"description\": \"Ditt operativsystem b\\u00f8r v\\u00e6re konfigurert for \\u00e5 \\u00e5pne ett av disse URL-schemaene.\",\n            \"openWith\": \"\\u00c5pne med\",\n            \"remember_choice\": \"Husk valget for denne sesjonen\",\n            \"open\": \"\\u00c5pne\",\n            \"cancel\": \"Avbryt\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.nl.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/nl/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['nl'] = Object.assign(\n    window.oc.langMessages['nl'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Opmaak\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Koptekst 1\",\n        \"header2\": \"Koptekst 2\",\n        \"header3\": \"Koptekst 3\",\n        \"header4\": \"Koptekst 4\",\n        \"header5\": \"Koptekst 5\",\n        \"header6\": \"Koptekst 6\",\n        \"bold\": \"Vet\",\n        \"italic\": \"Cursief\",\n        \"unorderedlist\": \"Ongeordende lijst\",\n        \"orderedlist\": \"Gerangschikte lijst\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Afbeelding\",\n        \"link\": \"Hyperlink\",\n        \"horizontalrule\": \"Invoegen horizontale lijn\",\n        \"fullscreen\": \"Volledig scherm\",\n        \"preview\": \"Voorbeeldweergave\",\n        \"strikethrough\": \"Doorhalen\",\n        \"cleanblock\": \"Blok opschonen\",\n        \"table\": \"Tabel\",\n        \"sidebyside\": \"Zij aan zij\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Media Link invoegen\",\n        \"insert_image\": \"Media Afbeelding invoegen\",\n        \"insert_video\": \"Media Video invoegen\",\n        \"insert_audio\": \"Media Audio invoegen\",\n        \"invalid_file_empty_insert\": \"Selecteer bestand om een link naar te maken.\",\n        \"invalid_file_single_insert\": \"Selecteer \\u00e9\\u00e9n bestand.\",\n        \"invalid_image_empty_insert\": \"Selecteer afbeelding(en) om in te voegen.\",\n        \"invalid_video_empty_insert\": \"Selecteer een video bestand om in te voegen.\",\n        \"invalid_audio_empty_insert\": \"Selecteer een audio bestand om in te voegen.\"\n    },\n    \"alert\": {\n        \"error\": \"Fout\",\n        \"confirm\": \"Bevestigen\",\n        \"dismiss\": \"Afwijzen\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Annuleren\",\n        \"widget_remove_confirm\": \"Deze widget verwijderen?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Vorige maand\",\n        \"nextMonth\": \"Volgende maan\",\n        \"months\": [\n            \"Januari\",\n            \"Februari\",\n            \"Maart\",\n            \"April\",\n            \"Mei\",\n            \"Juni\",\n            \"Juli\",\n            \"Augustus\",\n            \"September\",\n            \"Oktober\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Zondag\",\n            \"Maandag\",\n            \"Dinsdag\",\n            \"Woensdag\",\n            \"Donderdag\",\n            \"Vrijdag\",\n            \"Zaterdag\"\n        ],\n        \"weekdaysShort\": [\n            \"Zo\",\n            \"Ma\",\n            \"Di\",\n            \"Wo\",\n            \"Do\",\n            \"Vr\",\n            \"Za\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"alle\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Toepassen\",\n            \"clear_button_text\": \"Resetten\"\n        },\n        \"dates\": {\n            \"all\": \"alle\",\n            \"filter_button_text\": \"Filteren\",\n            \"reset_button_text\": \"Resetten\",\n            \"date_placeholder\": \"Datum\",\n            \"after_placeholder\": \"Na\",\n            \"before_placeholder\": \"Voor\"\n        },\n        \"numbers\": {\n            \"all\": \"alle\",\n            \"filter_button_text\": \"Filteren\",\n            \"reset_button_text\": \"Resetten\",\n            \"min_placeholder\": \"Minimum\",\n            \"max_placeholder\": \"Maximum\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Toon stacktrace\",\n        \"hide_stacktrace\": \"Verberg stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Geformatteerd\",\n            \"raw\": \"Bronversie\"\n        },\n        \"editor\": {\n            \"title\": \"Broncode editor\",\n            \"description\": \"Je besturingssysteem moet in staat zijn om met deze URL-schema's om te kunnen gaan.\",\n            \"openWith\": \"Openen met\",\n            \"remember_choice\": \"Onthoudt de geselecteerde optie voor deze browser-sessie\",\n            \"open\": \"Openen\",\n            \"cancel\": \"Annuleren\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"Je kan niet meer bestanden uploaden.\",\n        \"invalid_file_type\": \"Je kan geen bestanden van dit type uploaden.\",\n        \"file_too_big\": \"Het bestand is te groot ({{filesize}}MB). Maximale bestandsgrootte: {{maxFilesize}}MB.\",\n        \"response_error\": \"De server reageerde met de code {{statusCode}}.\",\n        \"remove_file\": \"Verwijder bestand\"\n    },\n    \"inspector\": {\n        \"add\": \"Toevoegen\",\n        \"remove\": \"Verwijderen\",\n        \"key\": \"Sleutel\",\n        \"value\": \"Waarde\",\n        \"ok\": \"Ok\",\n        \"cancel\": \"Annuleren\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[niet ingesteld]\",\n    \"1 day (today) if not set\": \"1 dag (vandaag) indien niet ingesteld\",\n    \"Apply\": \"Toepassen\",\n    \"Ascending\": \"Oplopend\",\n    \"Attribute\": \"Attribuut\",\n    \"Bar\": \"Staafdiagram\",\n    \"Chart\": \"Grafiek\",\n    \"Chart type\": \"Grafiektype\",\n    \"Color\": \"Kleur\",\n    \"Compare Totals\": \"Totalen vergelijken\",\n    \"Configure\": \"Configureren\",\n    \"Custom\": \"Aangepast\",\n    \"Dashboard interval\": \"Dashboardbereik\",\n    \"Data source\": \"Gegevensbron\",\n    \"Date interval\": \"Datumbereik\",\n    \"Day\": \"Dag\",\n    \"Delete\": \"Verwijderen\",\n    \"Delete Dashboard\": \"Dashboard verwijderen\",\n    \"Delete row\": \"Rij verwijderen\",\n    \"Descending\": \"Aflopend\",\n    \"Dimension\": \"Dimensie\",\n    \"Direction\": \"Richting\",\n    \"Disabled\": \"Uitgeschakeld\",\n    \"Display\": \"Weergave\",\n    \"Display [not set]\": \"Toon [niet ingesteld]\",\n    \"Display all records\": \"Alle records weergeven\",\n    \"Display relative bars\": \"Relatieve balken weergeven\",\n    \"Display totals\": \"Totalen weergeven\",\n    \"Edit Dashboard\": \"Dashboard bewerken\",\n    \"Empty values\": \"Lege waarden\",\n    \"Enter a positive number\": \"Voer een positief getal in\",\n    \"Enter a positive number or leave empty to display all records.\": \"Voer een positief getal in of laat leeg om alle records weer te geven.\",\n    \"Equal to\": \"Gelijk aan\",\n    \"Export Dashboard\": \"Dashboard exporteren\",\n    \"Extra table fields\": \"Extra tabelvelden\",\n    \"Filters\": \"Filters\",\n    \"General\": \"Algemeen\",\n    \"Greater or equal to\": \"Groter of gelijk aan\",\n    \"Greater than\": \"Groter dan\",\n    \"Hide\": \"Verbergen\",\n    \"Horizontal\": \"Horizontaal\",\n    \"Icon\": \"Pictogram\",\n    \"Icon Status\": \"Pictogramstatus\",\n    \"Important\": \"Belangrijk\",\n    \"Includes\": \"Bevat\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Informatie\",\n    \"Last 30 days\": \"Afgelopen 30 dagen\",\n    \"Last 7 days\": \"Afgelopen 7 dagen\",\n    \"Last month\": \"Vorige maand\",\n    \"Leave empty to disable pagination\": \"Laat leeg om paginering uit te schakelen\",\n    \"Leave empty to hide the title\": \"Laat leeg om de titel te verbergen\",\n    \"Less or equal to\": \"Kleiner of gelijk aan\",\n    \"Less than\": \"Kleiner dan\",\n    \"Limit\": \"Limiet\",\n    \"Line\": \"Lijngrafiek\",\n    \"Link Text\": \"Linktekst\",\n    \"Link URL\": \"Link-URL\",\n    \"Make Default\": \"Als standaard instellen\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metriek\",\n    \"Metrics\": \"Metrieken\",\n    \"Month\": \"Maand\",\n    \"My Custom Widget\": \"Mijn aangepaste widget\",\n    \"No Value\": \"Geen waarde\",\n    \"Notice text\": \"Meldingstekst\",\n    \"Number of days\": \"Aantal dagen\",\n    \"One of\": \"E\\u00e9n van\",\n    \"One value per line\": \"E\\u00e9n waarde per regel\",\n    \"Operation\": \"Bewerking\",\n    \"Order\": \"Volgorde\",\n    \"Past hour\": \"Afgelopen uur\",\n    \"Past X days\": \"Afgelopen X dagen\",\n    \"Please provide the widget title\": \"Voer de widgettitel in\",\n    \"Please select a data source\": \"Selecteer een gegevensbron\",\n    \"Please select a dimension\": \"Selecteer een dimensie\",\n    \"Please select an icon\": \"Selecteer een pictogram\",\n    \"Please select metric(s).\": \"Selecteer metriek(en).\",\n    \"Prev period\": \"Vorige periode\",\n    \"Quarter\": \"Kwartaal\",\n    \"Records per page\": \"Records per pagina\",\n    \"Refresh every minute\": \"Elke minuut vernieuwen\",\n    \"Rename Dashboard\": \"Dashboard hernoemen\",\n    \"Reset Layout\": \"Layout herstellen\",\n    \"Reset layout back to default?\": \"Layout terugzetten naar standaard?\",\n    \"Same period last year\": \"Zelfde periode vorig jaar\",\n    \"Section\": \"Sectie\",\n    \"Section Title\": \"Sectietitel\",\n    \"Select a dimension and metrics\": \"Selecteer een dimensie en metrieken\",\n    \"Select an attribute\": \"Selecteer een attribuut\",\n    \"Select an operation\": \"Selecteer een bewerking\",\n    \"Select sorting metric or dimension\": \"Selecteer sorteermetriek of dimensie\",\n    \"Select the metric color\": \"Selecteer de metriek-kleur\",\n    \"Set the current layout as the default?\": \"De huidige layout als standaard instellen?\",\n    \"Show Date Interval\": \"Toon datumbereik\",\n    \"Sort by\": \"Sorteren op\",\n    \"Sorting\": \"Sorteren\",\n    \"Sorting & Filtering\": \"Sorteren & Filteren\",\n    \"Stacked Bar\": \"Gestapeld staafdiagram\",\n    \"Starts with\": \"Begint met\",\n    \"Success\": \"Succes\",\n    \"Table\": \"Tabel\",\n    \"Text Notice\": \"Tekstmelding\",\n    \"The dashboard layout has been reset to default.\": \"De dashboard layout is hersteld naar standaard.\",\n    \"The dashboard was successfully updated.\": \"Het dashboard is succesvol bijgewerkt.\",\n    \"The limit value must be at least 1\": \"De limietwaarde moet minimaal 1 zijn\",\n    \"This dashboard is now the default layout.\": \"Dit dashboard is nu de standaard layout.\",\n    \"This is a text notice widget.\": \"Dit is een tekstmelding widget.\",\n    \"This month\": \"Deze maand\",\n    \"This quarter\": \"Dit kwartaal\",\n    \"This week\": \"Deze week\",\n    \"This year\": \"Dit jaar\",\n    \"Title\": \"Titel\",\n    \"Today\": \"Vandaag\",\n    \"Value\": \"Waarde\",\n    \"Values\": \"Waarden\",\n    \"Vertical\": \"Verticaal\",\n    \"Warning\": \"Waarschuwing\",\n    \"Week\": \"Week\",\n    \"Year\": \"Jaar\",\n    \"Yesterday\": \"Gisteren\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/nl\",[],function(){return{errorLoading:function(){return\"De resultaten konden niet worden geladen.\"},inputTooLong:function(e){return\"Gelieve \"+(e.input.length-e.maximum)+\" karakters te verwijderen\"},inputTooShort:function(e){return\"Gelieve \"+(e.minimum-e.input.length)+\" of meer karakters in te voeren\"},loadingMore:function(){return\"Meer resultaten laden…\"},maximumSelected:function(e){var n=1==e.maximum?\"kan\":\"kunnen\",r=\"Er \"+n+\" maar \"+e.maximum+\" item\";return 1!=e.maximum&&(r+=\"s\"),r+=\" worden geselecteerd\"},noResults:function(){return\"Geen resultaten gevonden…\"},searching:function(){return\"Zoeken…\"},removeAllItems:function(){return\"Verwijder alle items\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.nn-no.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/nn-no/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['nn-no'] = Object.assign(\n    window.oc.langMessages['nn-no'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatting\",\n        \"quote\": \"Quote\",\n        \"code\": \"Code\",\n        \"header1\": \"Header 1\",\n        \"header2\": \"Header 2\",\n        \"header3\": \"Header 3\",\n        \"header4\": \"Header 4\",\n        \"header5\": \"Header 5\",\n        \"header6\": \"Header 6\",\n        \"bold\": \"Bold\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"Unordered List\",\n        \"orderedlist\": \"Ordered List\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Image\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Insert Horizontal Rule\",\n        \"fullscreen\": \"Full Screen\",\n        \"preview\": \"Preview\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Insert Media Link\",\n        \"insert_image\": \"Insert Media Image\",\n        \"insert_video\": \"Insert Media Video\",\n        \"insert_audio\": \"Insert Media Audio\",\n        \"invalid_file_empty_insert\": \"Please select file to insert a links to.\",\n        \"invalid_file_single_insert\": \"Please select a single file.\",\n        \"invalid_image_empty_insert\": \"Please select image(s) to insert.\",\n        \"invalid_video_empty_insert\": \"Please select a video file to insert.\",\n        \"invalid_audio_empty_insert\": \"Please select an audio file to insert.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancel\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.pl.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/pl/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['pl'] = Object.assign(\n    window.oc.langMessages['pl'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formaty\",\n        \"quote\": \"Cytat\",\n        \"code\": \"Widok kodu\",\n        \"header1\": \"Nag\\u0142\\u00f3wek 1\",\n        \"header2\": \"Nag\\u0142\\u00f3wek 2\",\n        \"header3\": \"Nag\\u0142\\u00f3wek 3\",\n        \"header4\": \"Nag\\u0142\\u00f3wek 4\",\n        \"header5\": \"Nag\\u0142\\u00f3wek 5\",\n        \"header6\": \"Nag\\u0142\\u00f3wek 6\",\n        \"bold\": \"Pogrubienie\",\n        \"italic\": \"Kursywa\",\n        \"unorderedlist\": \"\\\"Lista nieuporz\\u0105dkowana\",\n        \"orderedlist\": \"Uporz\\u0105dkowana lista\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Wideo\",\n        \"image\": \"Obrazek\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Wstaw lini\\u0119 poziom\\u0105\",\n        \"fullscreen\": \"Pe\\u0142ny ekran\",\n        \"preview\": \"Podgl\\u0105d\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Wstaw Link\",\n        \"insert_image\": \"Wstaw Obraz\",\n        \"insert_video\": \"Wstaw Wideo\",\n        \"insert_audio\": \"Wstaw Audio\",\n        \"invalid_file_empty_insert\": \"Prosimy wybra\\u0107 plik do podlinkowania.\",\n        \"invalid_file_single_insert\": \"Prosimy wybra\\u0107 pojedynczy plik.\",\n        \"invalid_image_empty_insert\": \"Prosimy wybra\\u0107 obrazy do wstawienia.\",\n        \"invalid_video_empty_insert\": \"Prosimy wybra\\u0107 wideo do wstawienia.\",\n        \"invalid_audio_empty_insert\": \"Prosimy wybra\\u0107 audio do wstawienia.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Anuluj\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Poprzedni miesi\\u0105c\",\n        \"nextMonth\": \"Nast\\u0119pny miesi\\u0105c\",\n        \"months\": [\n            \"Stycze\\u0144\",\n            \"Luty\",\n            \"Marzec\",\n            \"Kwiecie\\u0144\",\n            \"Maj\",\n            \"Czerwiec\",\n            \"Lipiec\",\n            \"Sierpie\\u0144\",\n            \"Wrzesie\\u0144\",\n            \"Pa\\u017adziernik\",\n            \"Listopad\",\n            \"Grudzie\\u0144\"\n        ],\n        \"weekdays\": [\n            \"Niedziela\",\n            \"Poniedzia\\u0142ek\",\n            \"Wtorek\",\n            \"\\u015aroda\",\n            \"Czwartek\",\n            \"Pi\\u0105tek\",\n            \"Sobota\"\n        ],\n        \"weekdaysShort\": [\n            \"Nie\",\n            \"Pn\",\n            \"Wt\",\n            \"\\u015ar\",\n            \"Czw\",\n            \"Pt\",\n            \"So\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"wszystkie\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"wszystkie\",\n            \"filter_button_text\": \"Filtruj\",\n            \"reset_button_text\": \"Resetuj\",\n            \"date_placeholder\": \"Data\",\n            \"after_placeholder\": \"Po\",\n            \"before_placeholder\": \"Przed\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Poka\\u017c stos wywo\\u0142a\\u0144\",\n        \"hide_stacktrace\": \"Ukryj stos wywo\\u0142a\\u0144\",\n        \"tabs\": {\n            \"formatted\": \"Sformatowany\",\n            \"raw\": \"Nieprzetworzony\"\n        },\n        \"editor\": {\n            \"title\": \"Edytor kodu \\u017ar\\u00f3d\\u0142owego\",\n            \"description\": \"Tw\\u00f3j system operacyjny powinien by\\u0107 skonfigurowany aby nas\\u0142uchiwa\\u0107 na jednym z podanych schemat\\u00f3w URL.\",\n            \"openWith\": \"Otw\\u00f3rz za pomoc\\u0105\",\n            \"remember_choice\": \"Zapami\\u0119taj wybran\\u0105 opcj\\u0119 dla tej sesji\",\n            \"open\": \"Otw\\u00f3rz\",\n            \"cancel\": \"Anuluj\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/pl\",[],function(){var n=[\"znak\",\"znaki\",\"znaków\"],e=[\"element\",\"elementy\",\"elementów\"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return\"Nie można załadować wyników.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Usuń \"+t+\" \"+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Podaj przynajmniej \"+t+\" \"+r(t,n)},loadingMore:function(){return\"Trwa ładowanie…\"},maximumSelected:function(n){return\"Możesz zaznaczyć tylko \"+n.maximum+\" \"+r(n.maximum,e)},noResults:function(){return\"Brak wyników\"},searching:function(){return\"Trwa wyszukiwanie…\"},removeAllItems:function(){return\"Usuń wszystkie przedmioty\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.pt-br.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/pt-br/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['pt-br'] = Object.assign(\n    window.oc.langMessages['pt-br'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatando\",\n        \"quote\": \"Cita\\u00e7\\u00e3o\",\n        \"code\": \"C\\u00f3digo\",\n        \"header1\": \"Cabe\\u00e7alho 1\",\n        \"header2\": \"Cabe\\u00e7alho 2\",\n        \"header3\": \"Cabe\\u00e7alho 3\",\n        \"header4\": \"Cabe\\u00e7alho 4\",\n        \"header5\": \"Cabe\\u00e7alho 5\",\n        \"header6\": \"Cabe\\u00e7alho 6\",\n        \"bold\": \"Negrito\",\n        \"italic\": \"It\\u00e1lico\",\n        \"unorderedlist\": \"Lista n\\u00e3o ordenada\",\n        \"orderedlist\": \"Lista ordenada\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"V\\u00eddeo\",\n        \"image\": \"Imagem\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Inserir linha horizontal\",\n        \"fullscreen\": \"Tela cheia\",\n        \"preview\": \"Visualizar\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Inserir link\",\n        \"insert_image\": \"Inserir imagem\",\n        \"insert_video\": \"Inserir v\\u00eddeo\",\n        \"insert_audio\": \"Inserir \\u00e1udio\",\n        \"invalid_file_empty_insert\": \"Por favor, selecione o arquivo para criar o link.\",\n        \"invalid_file_single_insert\": \"Por favor, selecione apenas um arquivo.\",\n        \"invalid_image_empty_insert\": \"Por favor, selecione as imagens que deseja inserir.\",\n        \"invalid_video_empty_insert\": \"Por favor, selecione os v\\u00eddeos que deseja inserir.\",\n        \"invalid_audio_empty_insert\": \"Por favor, selecione os \\u00e1udios que deseja inserir.\"\n    },\n    \"alert\": {\n        \"error\": \"Erro\",\n        \"confirm\": \"Confirmar\",\n        \"dismiss\": \"Dispensar\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancelar\",\n        \"widget_remove_confirm\": \"Remover este widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"M\\u00eas anterior\",\n        \"nextMonth\": \"Pr\\u00f3ximo m\\u00eas\",\n        \"months\": [\n            \"Janeiro\",\n            \"Fevereiro\",\n            \"Mar\\u00e7o\",\n            \"Abril\",\n            \"Maio\",\n            \"Junho\",\n            \"Julho\",\n            \"Agosto\",\n            \"Setembro\",\n            \"Outubro\",\n            \"Novembro\",\n            \"Dezembro\"\n        ],\n        \"weekdays\": [\n            \"Domingo\",\n            \"Segunda-feira\",\n            \"Ter\\u00e7a-feira\",\n            \"Quarta-feira\",\n            \"Quinta-feira\",\n            \"Sexta-feira\",\n            \"S\\u00e1bado\"\n        ],\n        \"weekdaysShort\": [\n            \"Dom\",\n            \"Seg\",\n            \"Ter\",\n            \"Qua\",\n            \"Qui\",\n            \"Sex\",\n            \"Sab\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"todos\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Aplicar\",\n            \"clear_button_text\": \"Limpar\"\n        },\n        \"dates\": {\n            \"all\": \"todas\",\n            \"filter_button_text\": \"Filtro\",\n            \"reset_button_text\": \"Reiniciar\",\n            \"date_placeholder\": \"Data\",\n            \"after_placeholder\": \"Ap\\u00f3s\",\n            \"before_placeholder\": \"Antes\"\n        },\n        \"numbers\": {\n            \"all\": \"todas\",\n            \"filter_button_text\": \"Filtar\",\n            \"reset_button_text\": \"Reiniciar\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Exibir o rastreamento\",\n        \"hide_stacktrace\": \"Ocultar o rastreamento\",\n        \"tabs\": {\n            \"formatted\": \"Formatado\",\n            \"raw\": \"Bruto\"\n        },\n        \"editor\": {\n            \"title\": \"Editor de c\\u00f3digo fonte\",\n            \"description\": \"Seu sistema operacional deve ser configurado para ouvir um desses esquemas de URL.\",\n            \"openWith\": \"Abrir com\",\n            \"remember_choice\": \"Lembrar a op\\u00e7\\u00e3o selecionada nesta sess\\u00e3o\",\n            \"open\": \"Abrir\",\n            \"cancel\": \"Cancelar\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"Voc\\u00ea n\\u00e3o pode enviar mais arquivos.\",\n        \"invalid_file_type\": \"Voc\\u00ea n\\u00e3o pode carregar arquivos deste tipo.\",\n        \"file_too_big\": \"O arquivo \\u00e9 muito grande ({{filesize}}MB). Tamanho m\\u00e1ximo do arquivo: {{maxFilesize}}MB.\",\n        \"response_error\": \"O servidor respondeu com o c\\u00f3digo {{statusCode}}.\",\n        \"remove_file\": \"Remover arquivo\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/pt-br\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Apague \"+n+\" caracter\";return 1!=n&&(r+=\"es\"),r},inputTooShort:function(e){return\"Digite \"+(e.minimum-e.input.length)+\" ou mais caracteres\"},loadingMore:function(){return\"Carregando mais resultados…\"},maximumSelected:function(e){var n=\"Você só pode selecionar \"+e.maximum+\" ite\";return 1==e.maximum?n+=\"m\":n+=\"ns\",n},noResults:function(){return\"Nenhum resultado encontrado\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Remover todos os itens\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.pt-pt.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/pt-pt/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['pt-pt'] = Object.assign(\n    window.oc.langMessages['pt-pt'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatando\",\n        \"quote\": \"Cita\\u00e7\\u00e3o\",\n        \"code\": \"C\\u00f3digo\",\n        \"header1\": \"Cabe\\u00e7alho 1\",\n        \"header2\": \"Cabe\\u00e7alho 2\",\n        \"header3\": \"Cabe\\u00e7alho 3\",\n        \"header4\": \"Cabe\\u00e7alho 4\",\n        \"header5\": \"Cabe\\u00e7alho 5\",\n        \"header6\": \"Cabe\\u00e7alho 6\",\n        \"bold\": \"Negrito\",\n        \"italic\": \"It\\u00e1lico\",\n        \"unorderedlist\": \"Lista n\\u00e3o ordenada\",\n        \"orderedlist\": \"Lista ordenada\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"V\\u00eddeo\",\n        \"image\": \"Imagem\",\n        \"link\": \"Liga\\u00e7\\u00e3o\",\n        \"horizontalrule\": \"Inserir linha horizontal\",\n        \"fullscreen\": \"Ecran cheio\",\n        \"preview\": \"Visualizar\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Inserir liga\\u00e7\\u00e3o\",\n        \"insert_image\": \"Inserir imagem\",\n        \"insert_video\": \"Inserir v\\u00eddeo\",\n        \"insert_audio\": \"Inserir \\u00e1udio\",\n        \"invalid_file_empty_insert\": \"Por favor, selecione o ficheiro para criar a liga\\u00e7\\u00e3o.\",\n        \"invalid_file_single_insert\": \"Por favor, selecione apenas um ficheiro.\",\n        \"invalid_image_empty_insert\": \"Por favor, selecione as imagens que deseja inserir.\",\n        \"invalid_video_empty_insert\": \"Por favor, selecione os v\\u00eddeos que deseja inserir.\",\n        \"invalid_audio_empty_insert\": \"Por favor, selecione os \\u00e1udios que deseja inserir.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Cancelar\",\n        \"widget_remove_confirm\": \"Remover este widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"M\\u00eas anterior\",\n        \"nextMonth\": \"M\\u00eas seguinte\",\n        \"months\": [\n            \"Janeiro\",\n            \"Fevereiro\",\n            \"Mar\\u00e7o\",\n            \"Abril\",\n            \"Maio\",\n            \"Junho\",\n            \"Julho\",\n            \"Agosto\",\n            \"Setembro\",\n            \"Outubro\",\n            \"Novembro\",\n            \"Dezembro\"\n        ],\n        \"weekdays\": [\n            \"Domingo\",\n            \"Segunda-feira\",\n            \"Ter\\u00e7a-feira\",\n            \"Quarta-feira\",\n            \"Quinta-feira\",\n            \"Sexta-feira\",\n            \"S\\u00e1bado\"\n        ],\n        \"weekdaysShort\": [\n            \"Dom\",\n            \"Seg\",\n            \"Ter\",\n            \"Qua\",\n            \"Qui\",\n            \"Sex\",\n            \"Sab\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"todos\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"todas\",\n            \"filter_button_text\": \"Filtro\",\n            \"reset_button_text\": \"Reiniciar\",\n            \"date_placeholder\": \"Data\",\n            \"after_placeholder\": \"Ap\\u00f3s\",\n            \"before_placeholder\": \"Antes\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Mostrar o rastreamento\",\n        \"hide_stacktrace\": \"Ocultar o rastreamento\",\n        \"tabs\": {\n            \"formatted\": \"Formatado\",\n            \"raw\": \"Bruto\"\n        },\n        \"editor\": {\n            \"title\": \"Editor de c\\u00f3digo fonte\",\n            \"description\": \"O sistema operativo deve ser configurado para escutar um desses esquemas de URL.\",\n            \"openWith\": \"Abrir com\",\n            \"remember_choice\": \"Lembrar a op\\u00e7\\u00e3o selecionada nesta sess\\u00e3o\",\n            \"open\": \"Abrir\",\n            \"cancel\": \"Cancelar\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.ro.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/ro/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['ro'] = Object.assign(\n    window.oc.langMessages['ro'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatare\",\n        \"quote\": \"Citat\",\n        \"code\": \"Cod\",\n        \"header1\": \"Antet 1\",\n        \"header2\": \"Antet 2\",\n        \"header3\": \"Antet 3\",\n        \"header4\": \"Antet 4\",\n        \"header5\": \"Antet 5\",\n        \"header6\": \"Antet 6\",\n        \"bold\": \"\\u00cengro\\u0219at\",\n        \"italic\": \"Italic\",\n        \"unorderedlist\": \"List\\u0103 neordonat\\u0103\",\n        \"orderedlist\": \"List\\u0103 ordonat\\u0103\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Imagine\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Introdu linie orizontal\\u0103\",\n        \"fullscreen\": \"Umple ecranul\",\n        \"preview\": \"Previzualizeaz\\u0103\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Introdu link\",\n        \"insert_image\": \"Introdu image\",\n        \"insert_video\": \"Introdu video\",\n        \"insert_audio\": \"Introdu audio\",\n        \"invalid_file_empty_insert\": \"Selecteaz\\u0103 un fi\\u0219ier c\\u0103tre care s\\u0103 se fac\\u0103 leg\\u0103tura.\",\n        \"invalid_file_single_insert\": \"Selecteaz\\u0103 un singur fi\\u0219ier.\",\n        \"invalid_image_empty_insert\": \"Alege imaginile pentru a fi introduse.\",\n        \"invalid_video_empty_insert\": \"Alege un fi\\u0219ier video pentru a fi introdus.\",\n        \"invalid_audio_empty_insert\": \"Alege un fi\\u0219ier video pentru a fi introdus.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Anuleaz\\u0103\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/ro\",[],function(){return{errorLoading:function(){return\"Rezultatele nu au putut fi incărcate.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vă rugăm să ștergeți\"+t+\" caracter\";return 1!==t&&(n+=\"e\"),n},inputTooShort:function(e){return\"Vă rugăm să introduceți \"+(e.minimum-e.input.length)+\" sau mai multe caractere\"},loadingMore:function(){return\"Se încarcă mai multe rezultate…\"},maximumSelected:function(e){var t=\"Aveți voie să selectați cel mult \"+e.maximum;return t+=\" element\",1!==e.maximum&&(t+=\"e\"),t},noResults:function(){return\"Nu au fost găsite rezultate\"},searching:function(){return\"Căutare…\"},removeAllItems:function(){return\"Eliminați toate elementele\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.ru.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/ru/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['ru'] = Object.assign(\n    window.oc.langMessages['ru'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435\",\n        \"quote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\\u0430\",\n        \"code\": \"\\u041a\\u043e\\u0434\",\n        \"header1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n        \"header2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n        \"header3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n        \"header4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n        \"header5\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 5\",\n        \"header6\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 6\",\n        \"bold\": \"\\u0416\\u0438\\u0440\\u043d\\u044b\\u0439 \\u0448\\u0440\\u0438\\u0444\\u0442\",\n        \"italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0438\\u0432\",\n        \"unorderedlist\": \"\\u041d\\u0435\\u043d\\u0443\\u043c\\u0435\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n        \"orderedlist\": \"\\u041d\\u0443\\u043c\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\u0412\\u0438\\u0434\\u0435\\u043e\",\n        \"image\": \"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n        \"link\": \"\\u0421\\u0441\\u044b\\u043b\\u043a\\u0430\",\n        \"horizontalrule\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0443\\u044e \\u0447\\u0435\\u0440\\u0442\\u0443\",\n        \"fullscreen\": \"\\u041f\\u043e\\u043b\\u043d\\u044b\\u0439 \\u044d\\u043a\\u0440\\u0430\\u043d\",\n        \"preview\": \"\\u041f\\u0440\\u0435\\u0434\\u043f\\u0440\\u043e\\u0441\\u043c\\u043e\\u0442\\u0440\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043c\\u0435\\u0434\\u0438\\u0430-\\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n        \"insert_image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043c\\u0435\\u0434\\u0438\\u0430-\\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n        \"insert_video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043c\\u0435\\u0434\\u0438\\u0430-\\u0432\\u0438\\u0434\\u0435\\u043e\",\n        \"insert_audio\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043c\\u0435\\u0434\\u0438\\u0430-\\u0430\\u0443\\u0434\\u0438\\u043e\",\n        \"invalid_file_empty_insert\": \"\\u041f\\u043e\\u0436\\u0430\\u043b\\u0443\\u0439\\u0441\\u0442\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0444\\u0430\\u0439\\u043b \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438 \\u0441\\u0441\\u044b\\u043b\\u043a\\u0438.\",\n        \"invalid_file_single_insert\": \"\\u041f\\u043e\\u0436\\u0430\\u043b\\u0443\\u0439\\u0441\\u0442\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u043e\\u0434\\u0438\\u043d \\u0444\\u0430\\u0439\\u043b.\",\n        \"invalid_image_empty_insert\": \"\\u041f\\u043e\\u0436\\u0430\\u043b\\u0443\\u0439\\u0441\\u0442\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438.\",\n        \"invalid_video_empty_insert\": \"\\u041f\\u043e\\u0436\\u0430\\u043b\\u0443\\u0439\\u0441\\u0442\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0432\\u0438\\u0434\\u0435\\u043e \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438.\",\n        \"invalid_audio_empty_insert\": \"\\u041f\\u043e\\u0436\\u0430\\u043b\\u0443\\u0439\\u0441\\u0442\\u0430, \\u0432\\u044b\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0430\\u0443\\u0434\\u0438\\u043e \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438.\"\n    },\n    \"alert\": {\n        \"error\": \"\\u041e\\u0448\\u0438\\u0431\\u043a\\u0430\",\n        \"confirm\": \"\\u041f\\u043e\\u0434\\u0442\\u0432\\u0435\\u0440\\u0434\\u0438\\u0442\\u0435\",\n        \"dismiss\": \"\\u0423\\u0431\\u0440\\u0430\\u0442\\u044c\",\n        \"confirm_button_text\": \"\\u041e\\u043a\",\n        \"cancel_button_text\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0430\",\n        \"widget_remove_confirm\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u044d\\u0442\\u043e\\u0442 \\u0432\\u0438\\u0434\\u0436\\u0435\\u0442?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\u041f\\u0440\\u0435\\u0434\\u044b\\u0434\\u0443\\u0449\\u0438\\u0439 \\u043c\\u0435\\u0441\\u044f\\u0446\",\n        \"nextMonth\": \"\\u0421\\u043b\\u0435\\u0434\\u0443\\u044e\\u0449\\u0438\\u0439 \\u043c\\u0435\\u0441\\u044f\\u0446\",\n        \"months\": [\n            \"\\u042f\\u043d\\u0432\\u0430\\u0440\\u044c\",\n            \"\\u0424\\u0435\\u0432\\u0440\\u0430\\u043b\\u044c\",\n            \"\\u041c\\u0430\\u0440\\u0442\",\n            \"\\u0410\\u043f\\u0440\\u0435\\u043b\\u044c\",\n            \"\\u041c\\u0430\\u0439\",\n            \"\\u0418\\u044e\\u043d\\u044c\",\n            \"\\u0418\\u044e\\u043b\\u044c\",\n            \"\\u0410\\u0432\\u0433\\u0443\\u0441\\u0442\",\n            \"\\u0421\\u0435\\u043d\\u0442\\u044f\\u0431\\u0440\\u044c\",\n            \"\\u041e\\u043a\\u0442\\u044f\\u0431\\u0440\\u044c\",\n            \"\\u041d\\u043e\\u044f\\u0431\\u0440\\u044c\",\n            \"\\u0414\\u0435\\u043a\\u0430\\u0431\\u0440\\u044c\"\n        ],\n        \"weekdays\": [\n            \"\\u0412\\u043e\\u0441\\u043a\\u0440\\u0435\\u0441\\u0435\\u043d\\u0438\\u0435\",\n            \"\\u041f\\u043e\\u043d\\u0435\\u0434\\u0435\\u043b\\u044c\\u043d\\u0438\\u043a\",\n            \"\\u0412\\u0442\\u043e\\u0440\\u043d\\u0438\\u043a\",\n            \"\\u0421\\u0440\\u0435\\u0434\\u0430\",\n            \"\\u0427\\u0435\\u0442\\u0432\\u0435\\u0440\\u0433\",\n            \"\\u041f\\u044f\\u0442\\u043d\\u0438\\u0446\\u0430\",\n            \"\\u0421\\u0443\\u0431\\u0431\\u043e\\u0442\\u0430\"\n        ],\n        \"weekdaysShort\": [\n            \"\\u0412\\u0441\",\n            \"\\u041f\\u043d\",\n            \"\\u0412\\u0442\",\n            \"\\u0421\\u0440\",\n            \"\\u0427\\u0442\",\n            \"\\u041f\\u0442\",\n            \"\\u0421\\u0431\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"\\u041e\\u041a\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\u0432\\u0441\\u0435\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"\\u041f\\u0440\\u0438\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n            \"clear_button_text\": \"\\u041e\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044c\"\n        },\n        \"dates\": {\n            \"all\": \"\\u0432\\u0441\\u0435\",\n            \"filter_button_text\": \"\\u0424\\u0438\\u043b\\u044c\\u0442\\u0440\",\n            \"reset_button_text\": \"\\u0421\\u0431\\u0440\\u043e\\u0441\\u0438\\u0442\\u044c\",\n            \"date_placeholder\": \"\\u0414\\u0430\\u0442\\u0430\",\n            \"after_placeholder\": \"\\u041f\\u043e\\u0441\\u043b\\u0435\",\n            \"before_placeholder\": \"\\u0414\\u043e\"\n        },\n        \"numbers\": {\n            \"all\": \"\\u0432\\u0441\\u0435\",\n            \"filter_button_text\": \"\\u0424\\u0438\\u043b\\u044c\\u0442\\u0440\",\n            \"reset_button_text\": \"\\u0421\\u0431\\u0440\\u043e\\u0441\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u0430\\u0442\\u044c \\u0442\\u0440\\u0430\\u0441\\u0441\\u0438\\u0440\\u043e\\u0432\\u043a\\u0443 \\u0441\\u0442\\u0435\\u043a\\u0430\",\n        \"hide_stacktrace\": \"\\u0421\\u043a\\u0440\\u044b\\u0442\\u044c \\u0442\\u0440\\u0430\\u0441\\u0441\\u0438\\u0440\\u043e\\u0432\\u043a\\u0443 \\u0441\\u0442\\u0435\\u043a\\u0430\",\n        \"tabs\": {\n            \"formatted\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439\",\n            \"raw\": \"\\u0418\\u0441\\u0445\\u043e\\u0434\\u043d\\u044b\\u0439\"\n        },\n        \"editor\": {\n            \"title\": \"\\u0420\\u0435\\u0434\\u0430\\u043a\\u0442\\u043e\\u0440 \\u0438\\u0441\\u0445\\u043e\\u0434\\u043d\\u043e\\u0433\\u043e \\u043a\\u043e\\u0434\\u0430\",\n            \"description\": \"\\u0412\\u0430\\u0448\\u0430 \\u043e\\u043f\\u0435\\u0440\\u0430\\u0446\\u0438\\u043e\\u043d\\u043d\\u0430\\u044f \\u0441\\u0438\\u0441\\u0442\\u0435\\u043c\\u0430 \\u0434\\u043e\\u043b\\u0436\\u043d\\u0430 \\u0431\\u044b\\u0442\\u044c \\u043d\\u0430\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d\\u0430 \\u043d\\u0430 \\u043f\\u0440\\u043e\\u0441\\u043b\\u0443\\u0448\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435 \\u043a \\u043e\\u0434\\u043d\\u043e\\u0439 \\u0438\\u0437 \\u044d\\u0442\\u0438\\u0445 \\u0441\\u0445\\u0435\\u043c URL.\",\n            \"openWith\": \"\\u041e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044c \\u0441 \\u043f\\u043e\\u043c\\u043e\\u0449\\u044c\\u044e\",\n            \"remember_choice\": \"\\u0417\\u0430\\u043f\\u043e\\u043c\\u043d\\u0438\\u0442\\u044c \\u0432\\u044b\\u0431\\u0440\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0432\\u0430\\u0440\\u0438\\u0430\\u043d\\u0442 \\u0434\\u043b\\u044f \\u044d\\u0442\\u043e\\u0439 \\u0441\\u0435\\u0441\\u0441\\u0438\\u0438\",\n            \"open\": \"\\u041e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044c\",\n            \"cancel\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0430\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"\\u0412\\u044b \\u043d\\u0435 \\u043c\\u043e\\u0436\\u0435\\u0442\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0437\\u0438\\u0442\\u044c \\u0431\\u043e\\u043b\\u044c\\u0448\\u0435 \\u0444\\u0430\\u0439\\u043b\\u043e\\u0432.\",\n        \"invalid_file_type\": \"\\u0412\\u044b \\u043d\\u0435 \\u043c\\u043e\\u0436\\u0435\\u0442\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0430\\u0442\\u044c \\u0444\\u0430\\u0439\\u043b\\u044b \\u044d\\u0442\\u043e\\u0433\\u043e \\u0442\\u0438\\u043f\\u0430.\",\n        \"file_too_big\": \"\\u0420\\u0430\\u0437\\u043c\\u0435\\u0440 \\u0444\\u0430\\u0439\\u043b\\u0430 ({{filesize}}MB) \\u0441\\u043b\\u0438\\u0448\\u043a\\u043e\\u043c \\u0431\\u043e\\u043b\\u044c\\u0448\\u043e\\u0439. \\u041c\\u0430\\u043a\\u0441\\u0438\\u043c\\u0430\\u043b\\u044c\\u043d\\u044b\\u0439 \\u0440\\u0430\\u0437\\u043c\\u0435\\u0440: {{maxFilesize}}MB.\",\n        \"response_error\": \"\\u0421\\u0435\\u0440\\u0432\\u0435\\u0440 \\u043e\\u0442\\u0432\\u0435\\u0442\\u0438\\u043b {{statusCode}} \\u043a\\u043e\\u0434\\u043e\\u043c.\",\n        \"remove_file\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0444\\u0430\\u0439\\u043b\"\n    },\n    \"inspector\": {\n        \"add\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c\",\n        \"remove\": \"\\u0423\\u0431\\u0440\\u0430\\u0442\\u044c\",\n        \"key\": \"\\u041a\\u043b\\u044e\\u0447\",\n        \"value\": \"\\u0417\\u043d\\u0430\\u0447\\u0435\\u043d\\u0438\\u0435\",\n        \"ok\": \"OK\",\n        \"cancel\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0430\",\n        \"items\": \"\\u042d\\u043b\\u0435\\u043c\\u0435\\u043d\\u0442\\u044b\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ru\",[],function(){function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}return{errorLoading:function(){return\"Невозможно загрузить результаты\"},inputTooLong:function(e){var r=e.input.length-e.maximum,u=\"Пожалуйста, введите на \"+r+\" символ\";return u+=n(r,\"\",\"a\",\"ов\"),u+=\" меньше\"},inputTooShort:function(e){var r=e.minimum-e.input.length,u=\"Пожалуйста, введите ещё хотя бы \"+r+\" символ\";return u+=n(r,\"\",\"a\",\"ов\")},loadingMore:function(){return\"Загрузка данных…\"},maximumSelected:function(e){var r=\"Вы можете выбрать не более \"+e.maximum+\" элемент\";return r+=n(e.maximum,\"\",\"a\",\"ов\")},noResults:function(){return\"Совпадений не найдено\"},searching:function(){return\"Поиск…\"},removeAllItems:function(){return\"Удалить все элементы\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.sk.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/sk/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['sk'] = Object.assign(\n    window.oc.langMessages['sk'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Form\\u00e1tovanie\",\n        \"quote\": \"Cit\\u00e1t\",\n        \"code\": \"K\\u00f3d\",\n        \"header1\": \"Nadpis 1\",\n        \"header2\": \"Nadpis 2\",\n        \"header3\": \"Nadpis 3\",\n        \"header4\": \"Nadpis 4\",\n        \"header5\": \"Nadpis 5\",\n        \"header6\": \"Nadpis 6\",\n        \"bold\": \"Tu\\u010dn\\u00e9\",\n        \"italic\": \"Kurz\\u00edva\",\n        \"unorderedlist\": \"Ne\\u010d\\u00edslovan\\u00fd zoznam\",\n        \"orderedlist\": \"\\u010c\\u00edslovan\\u00fd zoznam\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Obr\\u00e1zok\",\n        \"link\": \"Odkaz\",\n        \"horizontalrule\": \"Vlo\\u017ei\\u0165 horizont\\u00e1lnu linku\",\n        \"fullscreen\": \"Cel\\u00e1 obrazovka\",\n        \"preview\": \"N\\u00e1h\\u013ead\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Vlo\\u017ei\\u0165 odkaz\",\n        \"insert_image\": \"Vlo\\u017ei\\u0165 obr\\u00e1zok\",\n        \"insert_video\": \"Vlo\\u017ei\\u0165 video\",\n        \"insert_audio\": \"Vlo\\u017ei\\u0165 audio\",\n        \"invalid_file_empty_insert\": \"Pros\\u00edm vyberte s\\u00fabor, na ktor\\u00fd sa vlo\\u017e\\u00ed odkaz.\",\n        \"invalid_file_single_insert\": \"Pros\\u00edm vyberte jeden s\\u00fabor.\",\n        \"invalid_image_empty_insert\": \"Pros\\u00edm vyberte obr\\u00e1zky na vlo\\u017eenie.\",\n        \"invalid_video_empty_insert\": \"Pros\\u00edm vyberte video na vlo\\u017eenie.\",\n        \"invalid_audio_empty_insert\": \"Pros\\u00edm vyberte audio s\\u00fabor na vlo\\u017eenie.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Zru\\u0161i\\u0165\",\n        \"widget_remove_confirm\": \"Skuto\\u010dne zmaza\\u0165 tento widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Predch\\u00e1dzaj\\u00faci mesiac\",\n        \"nextMonth\": \"Nasleduj\\u00faci mesiac\",\n        \"months\": [\n            \"Janu\\u00e1r\",\n            \"Febru\\u00e1r\",\n            \"Marec\",\n            \"Apr\\u00edl\",\n            \"M\\u00e1j\",\n            \"J\\u00fan\",\n            \"J\\u00fal\",\n            \"August\",\n            \"September\",\n            \"Okt\\u00f3ber\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Nede\\u013ea\",\n            \"Pondelok\",\n            \"Utorok\",\n            \"Streda\",\n            \"\\u0160tvrtok\",\n            \"Piatok\",\n            \"Sobota\"\n        ],\n        \"weekdaysShort\": [\n            \"Ne\",\n            \"Po\",\n            \"Ut\",\n            \"St\",\n            \"\\u0160t\",\n            \"Pi\",\n            \"So\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"v\\u0161etko\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"v\\u0161etko\",\n            \"filter_button_text\": \"Filtrova\\u0165\",\n            \"reset_button_text\": \"Zru\\u0161i\\u0165\",\n            \"date_placeholder\": \"D\\u00e1tum\",\n            \"after_placeholder\": \"Po\",\n            \"before_placeholder\": \"Pred\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Zru\\u0161i\\u0165\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Zobrazi\\u0165 stacktrace\",\n        \"hide_stacktrace\": \"Skry\\u0165 stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Form\\u00e1tovan\\u00e9\",\n            \"raw\": \"P\\u00f4vodn\\u00e9 (raw)\"\n        },\n        \"editor\": {\n            \"title\": \"Editor zdrojov\\u00e9ho k\\u00f3du\",\n            \"description\": \"V\\u00e1\\u0161 opera\\u010dn\\u00fd syst\\u00e9m by mal by\\u0165 konfigurovan\\u00fd tak, aby po\\u010d\\u00faval jednu z t\\u00fdchto URL sh\\u00e9m.\",\n            \"openWith\": \"Otvori\\u0165 v\",\n            \"remember_choice\": \"Zapam\\u00e4ta\\u0165 si vybran\\u00fa vo\\u013ebu pre t\\u00fato rel\\u00e1ciu\",\n            \"open\": \"Otvori\\u0165\",\n            \"cancel\": \"Zru\\u0161i\\u0165\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sk\",[],function(){var e={2:function(e){return e?\"dva\":\"dve\"},3:function(){return\"tri\"},4:function(){return\"štyri\"}};return{errorLoading:function(){return\"Výsledky sa nepodarilo načítať.\"},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?\"Prosím, zadajte o jeden znak menej\":t>=2&&t<=4?\"Prosím, zadajte o \"+e[t](!0)+\" znaky menej\":\"Prosím, zadajte o \"+t+\" znakov menej\"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?\"Prosím, zadajte ešte jeden znak\":t<=4?\"Prosím, zadajte ešte ďalšie \"+e[t](!0)+\" znaky\":\"Prosím, zadajte ešte ďalších \"+t+\" znakov\"},loadingMore:function(){return\"Načítanie ďalších výsledkov…\"},maximumSelected:function(n){return 1==n.maximum?\"Môžete zvoliť len jednu položku\":n.maximum>=2&&n.maximum<=4?\"Môžete zvoliť najviac \"+e[n.maximum](!1)+\" položky\":\"Môžete zvoliť najviac \"+n.maximum+\" položiek\"},noResults:function(){return\"Nenašli sa žiadne položky\"},searching:function(){return\"Vyhľadávanie…\"},removeAllItems:function(){return\"Odstráňte všetky položky\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.sl.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/sl/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['sl'] = Object.assign(\n    window.oc.langMessages['sl'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Oblikovanje\",\n        \"quote\": \"Citat\",\n        \"code\": \"Koda\",\n        \"header1\": \"Naslov 1\",\n        \"header2\": \"Naslov 2\",\n        \"header3\": \"Naslov 3\",\n        \"header4\": \"Naslov 4\",\n        \"header5\": \"Naslov 5\",\n        \"header6\": \"Naslov 6\",\n        \"bold\": \"Krepko\",\n        \"italic\": \"Le\\u017ee\\u010de\",\n        \"unorderedlist\": \"Neo\\u0161tevil\\u010deni seznam\",\n        \"orderedlist\": \"\\u0160tevil\\u010dni seznam\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Slika\",\n        \"link\": \"Povezava\",\n        \"horizontalrule\": \"Vstavi vodoravno \\u010drto\",\n        \"fullscreen\": \"Celozaslonski na\\u010din\",\n        \"preview\": \"Predogled\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Vstavi povezavo\",\n        \"insert_image\": \"Vstavi sliko\",\n        \"insert_video\": \"Vstavi video posnetek\",\n        \"insert_audio\": \"Vstavi zvo\\u010dni posnetek\",\n        \"invalid_file_empty_insert\": \"Izberite datoteko, do katere \\u017eelite vstaviti povezavo.\",\n        \"invalid_file_single_insert\": \"Izberite eno samo datoteko.\",\n        \"invalid_image_empty_insert\": \"Izberite slike za vstavljanje.\",\n        \"invalid_video_empty_insert\": \"Izberite video posnetek za vstavljanje.\",\n        \"invalid_audio_empty_insert\": \"Izberite zvo\\u010dni posnetek za vstavljanje.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"V redu\",\n        \"cancel_button_text\": \"Prekli\\u010di\",\n        \"widget_remove_confirm\": \"Odstrani ta vti\\u010dnik?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Prej\\u0161nji mesec\",\n        \"nextMonth\": \"Naslednji mesec\",\n        \"months\": [\n            \"Januar\",\n            \"Februar\",\n            \"Marec\",\n            \"April\",\n            \"Maj\",\n            \"Junij\",\n            \"Julij\",\n            \"Avgust\",\n            \"September\",\n            \"Oktober\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Nedelja\",\n            \"Ponedeljek\",\n            \"Torek\",\n            \"Sreda\",\n            \"\\u010cetrtek\",\n            \"Petek\",\n            \"Sobota\"\n        ],\n        \"weekdaysShort\": [\n            \"Ned\",\n            \"Pon\",\n            \"Tor\",\n            \"Sre\",\n            \"\\u010cet\",\n            \"Pet\",\n            \"Sob\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"vsi\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Uporabi\",\n            \"clear_button_text\": \"Po\\u010disti\"\n        },\n        \"dates\": {\n            \"all\": \"vsi\",\n            \"filter_button_text\": \"Filtriraj\",\n            \"reset_button_text\": \"Ponastavi\",\n            \"date_placeholder\": \"Datum\",\n            \"after_placeholder\": \"Po\",\n            \"before_placeholder\": \"Pred\"\n        },\n        \"numbers\": {\n            \"all\": \"vsi\",\n            \"filter_button_text\": \"Filtriraj\",\n            \"reset_button_text\": \"Ponastavi\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Prika\\u017ei sled dogodkov\",\n        \"hide_stacktrace\": \"Skrij sled dogodkov\",\n        \"tabs\": {\n            \"formatted\": \"Oblikovano\",\n            \"raw\": \"Brez oblikovanja\"\n        },\n        \"editor\": {\n            \"title\": \"Urejevalnik izvorne kode\",\n            \"description\": \"Va\\u0161 operacijski sistem mora biti nastavljen tako, da upo\\u0161teva eno od teh URL shem.\",\n            \"openWith\": \"Za odpiranje uporabi\",\n            \"remember_choice\": \"Zapomni si izbrane nastavitve za to sejo\",\n            \"open\": \"Odpri\",\n            \"cancel\": \"Prekli\\u010di\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sl\",[],function(){return{errorLoading:function(){return\"Zadetkov iskanja ni bilo mogoče naložiti.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Prosim zbrišite \"+n+\" znak\";return 2==n?t+=\"a\":1!=n&&(t+=\"e\"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t=\"Prosim vpišite še \"+n+\" znak\";return 2==n?t+=\"a\":1!=n&&(t+=\"e\"),t},loadingMore:function(){return\"Nalagam več zadetkov…\"},maximumSelected:function(e){var n=\"Označite lahko največ \"+e.maximum+\" predmet\";return 2==e.maximum?n+=\"a\":1!=e.maximum&&(n+=\"e\"),n},noResults:function(){return\"Ni zadetkov.\"},searching:function(){return\"Iščem…\"},removeAllItems:function(){return\"Odstranite vse elemente\"}}}),e.define,e.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.stub",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/{{locale}}/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['{{locale}}'] = Object.assign(\n    window.oc.langMessages['{{locale}}'] || {},\n    {{messages}}\n);\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.sv.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/sv/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['sv'] = Object.assign(\n    window.oc.langMessages['sv'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatering\",\n        \"quote\": \"Citat\",\n        \"code\": \"Kod\",\n        \"header1\": \"Rubrik 1\",\n        \"header2\": \"Rubrik 2\",\n        \"header3\": \"Rubrik 3\",\n        \"header4\": \"Rubrik 4\",\n        \"header5\": \"Rubrik 5\",\n        \"header6\": \"Rubrik 6\",\n        \"bold\": \"Fet\",\n        \"italic\": \"Kursiv\",\n        \"unorderedlist\": \"Oordnad lista\",\n        \"orderedlist\": \"Ordnad lista\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"Bild\",\n        \"link\": \"L\\u00e4nk\",\n        \"horizontalrule\": \"Infoga horisontiell linje\",\n        \"fullscreen\": \"Fullsk\\u00e4rm\",\n        \"preview\": \"F\\u00f6rhandsgranska\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Infoga medial\\u00e4nk\",\n        \"insert_image\": \"Infoga bild\",\n        \"insert_video\": \"Infoga video\",\n        \"insert_audio\": \"Infoga ljud\",\n        \"invalid_file_empty_insert\": \"V\\u00e4nligen v\\u00e4lj en fil att infoga till l\\u00e4nken.\",\n        \"invalid_file_single_insert\": \"V\\u00e4nligen v\\u00e4lj en enskild fil.\",\n        \"invalid_image_empty_insert\": \"V\\u00e4nligen v\\u00e4lj bild(er) att infoga.\",\n        \"invalid_video_empty_insert\": \"V\\u00e4nligen v\\u00e4lj en video att infoga.\",\n        \"invalid_audio_empty_insert\": \"V\\u00e4nligen v\\u00e4lj en ljudfil att infoga.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"OK\",\n        \"cancel_button_text\": \"Avbryt\",\n        \"widget_remove_confirm\": \"Remove this widget?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Previous Month\",\n        \"nextMonth\": \"Next Month\",\n        \"months\": [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\"\n        ],\n        \"weekdays\": [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\"\n        ],\n        \"weekdaysShort\": [\n            \"Sun\",\n            \"Mon\",\n            \"Tue\",\n            \"Wed\",\n            \"Thu\",\n            \"Fri\",\n            \"Sat\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"all\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Date\",\n            \"after_placeholder\": \"After\",\n            \"before_placeholder\": \"Before\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sv\",[],function(){return{errorLoading:function(){return\"Resultat kunde inte laddas.\"},inputTooLong:function(n){return\"Vänligen sudda ut \"+(n.input.length-n.maximum)+\" tecken\"},inputTooShort:function(n){return\"Vänligen skriv in \"+(n.minimum-n.input.length)+\" eller fler tecken\"},loadingMore:function(){return\"Laddar fler resultat…\"},maximumSelected:function(n){return\"Du kan max välja \"+n.maximum+\" element\"},noResults:function(){return\"Inga träffar\"},searching:function(){return\"Söker…\"},removeAllItems:function(){return\"Ta bort alla objekt\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.th.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/th/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['th'] = Object.assign(\n    window.oc.langMessages['th'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u0e01\\u0e32\\u0e23\\u0e08\\u0e31\\u0e14\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\",\n        \"quote\": \"\\u0e2d\\u0e49\\u0e32\\u0e07\\u0e02\\u0e49\\u0e2d\\u0e04\\u0e27\\u0e32\\u0e21\",\n        \"code\": \"\\u0e42\\u0e04\\u0e49\\u0e14\",\n        \"header1\": \"\\u0e2b\\u0e31\\u0e27\\u0e40\\u0e23\\u0e37\\u0e48\\u0e2d\\u0e07 1\",\n        \"header2\": \"\\u0e2b\\u0e31\\u0e27\\u0e40\\u0e23\\u0e37\\u0e48\\u0e2d\\u0e07 2\",\n        \"header3\": \"\\u0e2b\\u0e31\\u0e27\\u0e40\\u0e23\\u0e37\\u0e48\\u0e2d\\u0e07 3\",\n        \"header4\": \"\\u0e2b\\u0e31\\u0e27\\u0e40\\u0e23\\u0e37\\u0e48\\u0e2d\\u0e07 4\",\n        \"header5\": \"\\u0e2b\\u0e31\\u0e27\\u0e40\\u0e23\\u0e37\\u0e48\\u0e2d\\u0e07 5\",\n        \"header6\": \"\\u0e2b\\u0e31\\u0e27\\u0e40\\u0e23\\u0e37\\u0e48\\u0e2d\\u0e07 6\",\n        \"bold\": \"\\u0e15\\u0e31\\u0e27\\u0e2b\\u0e19\\u0e32\",\n        \"italic\": \"\\u0e15\\u0e31\\u0e27\\u0e40\\u0e2d\\u0e35\\u0e22\\u0e07\",\n        \"unorderedlist\": \"\\u0e23\\u0e32\\u0e22\\u0e01\\u0e32\\u0e23\\u0e41\\u0e1a\\u0e1a\\u0e44\\u0e21\\u0e48\\u0e21\\u0e35\\u0e25\\u0e33\\u0e14\\u0e31\\u0e1a\",\n        \"orderedlist\": \"\\u0e23\\u0e32\\u0e22\\u0e01\\u0e32\\u0e23\\u0e41\\u0e1a\\u0e1a\\u0e21\\u0e35\\u0e25\\u0e33\\u0e14\\u0e31\\u0e1a\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\u0e27\\u0e34\\u0e14\\u0e35\\u0e42\\u0e2d\",\n        \"image\": \"\\u0e23\\u0e39\\u0e1b\\u0e20\\u0e32\\u0e1e\",\n        \"link\": \"\\u0e25\\u0e34\\u0e07\\u0e01\\u0e4c\",\n        \"horizontalrule\": \"\\u0e43\\u0e2a\\u0e48\\u0e17\\u0e35\\u0e48\\u0e04\\u0e31\\u0e48\\u0e19\\u0e1a\\u0e23\\u0e23\\u0e17\\u0e31\\u0e14\",\n        \"fullscreen\": \"\\u0e40\\u0e15\\u0e47\\u0e21\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e08\\u0e2d\",\n        \"preview\": \"\\u0e14\\u0e39\\u0e15\\u0e31\\u0e27\\u0e2d\\u0e22\\u0e48\\u0e32\\u0e07\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u0e43\\u0e2a\\u0e48\\u0e25\\u0e34\\u0e07\\u0e01\\u0e4c\",\n        \"insert_image\": \"\\u0e43\\u0e2a\\u0e48\\u0e23\\u0e39\\u0e1b\\u0e20\\u0e32\\u0e1e\",\n        \"insert_video\": \"\\u0e43\\u0e2a\\u0e48\\u0e27\\u0e34\\u0e14\\u0e35\\u0e42\\u0e2d\",\n        \"insert_audio\": \"\\u0e43\\u0e2a\\u0e48\\u0e44\\u0e1f\\u0e25\\u0e4c\\u0e40\\u0e2a\\u0e35\\u0e22\\u0e07\",\n        \"invalid_file_empty_insert\": \"\\u0e01\\u0e23\\u0e38\\u0e13\\u0e32\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e44\\u0e1f\\u0e25\\u0e4c\\u0e17\\u0e35\\u0e48\\u0e08\\u0e30\\u0e43\\u0e2a\\u0e48\\u0e25\\u0e34\\u0e07\\u0e01\\u0e4c\",\n        \"invalid_file_single_insert\": \"\\u0e01\\u0e23\\u0e38\\u0e13\\u0e32\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e44\\u0e1f\\u0e25\\u0e4c\\u0e40\\u0e14\\u0e35\\u0e22\\u0e27\",\n        \"invalid_image_empty_insert\": \"\\u0e01\\u0e23\\u0e38\\u0e13\\u0e32\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e23\\u0e39\\u0e1b\\u0e20\\u0e32\\u0e1e\\u0e17\\u0e35\\u0e48\\u0e08\\u0e30\\u0e43\\u0e2a\\u0e48\",\n        \"invalid_video_empty_insert\": \"\\u0e01\\u0e23\\u0e38\\u0e13\\u0e32\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e27\\u0e34\\u0e14\\u0e35\\u0e42\\u0e2d\\u0e17\\u0e35\\u0e48\\u0e08\\u0e30\\u0e43\\u0e2a\\u0e48\",\n        \"invalid_audio_empty_insert\": \"\\u0e01\\u0e23\\u0e38\\u0e13\\u0e32\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e44\\u0e1f\\u0e25\\u0e4c\\u0e40\\u0e2a\\u0e35\\u0e22\\u0e07\\u0e17\\u0e35\\u0e48\\u0e08\\u0e30\\u0e43\\u0e2a\\u0e48\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"\\u0e15\\u0e01\\u0e25\\u0e07\",\n        \"cancel_button_text\": \"\\u0e22\\u0e01\\u0e40\\u0e25\\u0e34\\u0e01\",\n        \"widget_remove_confirm\": \"\\u0e25\\u0e1a\\u0e27\\u0e34\\u0e14\\u0e40\\u0e08\\u0e47\\u0e17\\u0e19\\u0e35\\u0e49?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\u0e40\\u0e14\\u0e37\\u0e2d\\u0e19\\u0e01\\u0e48\\u0e2d\\u0e19\\u0e2b\\u0e19\\u0e49\\u0e32\",\n        \"nextMonth\": \"\\u0e40\\u0e14\\u0e37\\u0e2d\\u0e19\\u0e16\\u0e31\\u0e14\\u0e44\\u0e1b\",\n        \"months\": [\n            \"\\u0e21\\u0e01\\u0e23\\u0e32\\u0e04\\u0e21\",\n            \"\\u0e01\\u0e38\\u0e21\\u0e20\\u0e32\\u0e1e\\u0e31\\u0e19\\u0e18\\u0e4c\",\n            \"\\u0e21\\u0e35\\u0e19\\u0e32\\u0e04\\u0e21\",\n            \"\\u0e40\\u0e21\\u0e29\\u0e32\\u0e22\\u0e19\",\n            \"\\u0e1e\\u0e24\\u0e29\\u0e20\\u0e32\\u0e04\\u0e21\",\n            \"\\u0e21\\u0e34\\u0e16\\u0e38\\u0e19\\u0e32\\u0e22\\u0e19\",\n            \"\\u0e01\\u0e23\\u0e01\\u0e0e\\u0e32\\u0e04\\u0e21\",\n            \"\\u0e2a\\u0e34\\u0e07\\u0e2b\\u0e32\\u0e04\\u0e21\",\n            \"\\u0e01\\u0e31\\u0e19\\u0e22\\u0e32\\u0e22\\u0e19\",\n            \"\\u0e15\\u0e38\\u0e25\\u0e32\\u0e04\\u0e21\",\n            \"\\u0e1e\\u0e24\\u0e28\\u0e08\\u0e34\\u0e01\\u0e32\\u0e22\\u0e19\",\n            \"\\u0e18\\u0e31\\u0e19\\u0e27\\u0e32\\u0e04\\u0e21\"\n        ],\n        \"weekdays\": [\n            \"\\u0e2d\\u0e32\\u0e17\\u0e34\\u0e15\\u0e22\\u0e4c\",\n            \"\\u0e08\\u0e31\\u0e19\\u0e17\\u0e23\\u0e4c\",\n            \"\\u0e2d\\u0e31\\u0e07\\u0e04\\u0e32\\u0e23\",\n            \"\\u0e1e\\u0e38\\u0e18\",\n            \"\\u0e1e\\u0e24\\u0e2b\\u0e31\\u0e2a\\u0e1a\\u0e14\\u0e35\",\n            \"\\u0e28\\u0e38\\u0e01\\u0e23\\u0e4c\",\n            \"\\u0e40\\u0e2a\\u0e32\\u0e23\\u0e4c\"\n        ],\n        \"weekdaysShort\": [\n            \"\\u0e2d\\u0e32.\",\n            \"\\u0e08.\",\n            \"\\u0e2d.\",\n            \"\\u0e1e.\",\n            \"\\u0e1e\\u0e24.\",\n            \"\\u0e28.\",\n            \"\\u0e2a.\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"\\u0e15\\u0e01\\u0e25\\u0e07\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\u0e17\\u0e31\\u0e49\\u0e07\\u0e2b\\u0e21\\u0e14\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"\\u0e19\\u0e33\\u0e44\\u0e1b\\u0e43\\u0e0a\\u0e49\",\n            \"clear_button_text\": \"\\u0e40\\u0e04\\u0e25\\u0e35\\u0e22\\u0e23\\u0e4c\"\n        },\n        \"dates\": {\n            \"all\": \"\\u0e17\\u0e31\\u0e49\\u0e07\\u0e2b\\u0e21\\u0e14\",\n            \"filter_button_text\": \"\\u0e01\\u0e23\\u0e2d\\u0e07\",\n            \"reset_button_text\": \"\\u0e15\\u0e31\\u0e49\\u0e07\\u0e04\\u0e48\\u0e32\\u0e40\\u0e23\\u0e34\\u0e48\\u0e21\\u0e15\\u0e49\\u0e19\",\n            \"date_placeholder\": \"\\u0e27\\u0e31\\u0e19\\u0e17\\u0e35\\u0e48\",\n            \"after_placeholder\": \"\\u0e2b\\u0e25\\u0e31\\u0e07\\u0e08\\u0e32\\u0e01\",\n            \"before_placeholder\": \"\\u0e01\\u0e48\\u0e2d\\u0e19\"\n        },\n        \"numbers\": {\n            \"all\": \"\\u0e17\\u0e31\\u0e49\\u0e07\\u0e2b\\u0e21\\u0e14\",\n            \"filter_button_text\": \"\\u0e01\\u0e23\\u0e2d\\u0e07\",\n            \"reset_button_text\": \"\\u0e15\\u0e31\\u0e49\\u0e07\\u0e04\\u0e48\\u0e32\\u0e40\\u0e23\\u0e34\\u0e48\\u0e21\\u0e15\\u0e49\\u0e19\",\n            \"min_placeholder\": \"\\u0e19\\u0e49\\u0e2d\\u0e22\\u0e17\\u0e35\\u0e48\\u0e2a\\u0e38\\u0e14\",\n            \"max_placeholder\": \"\\u0e21\\u0e32\\u0e01\\u0e17\\u0e35\\u0e48\\u0e2a\\u0e38\\u0e14\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"\\u0e41\\u0e2a\\u0e14\\u0e07 stacktrace\",\n        \"hide_stacktrace\": \"\\u0e0b\\u0e48\\u0e2d\\u0e19 stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"\\u0e08\\u0e31\\u0e14\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\\u0e41\\u0e25\\u0e49\\u0e27\",\n            \"raw\": \"\\u0e02\\u0e49\\u0e2d\\u0e21\\u0e39\\u0e25\\u0e14\\u0e34\\u0e1a\"\n        },\n        \"editor\": {\n            \"title\": \"\\u0e15\\u0e31\\u0e27\\u0e41\\u0e01\\u0e49\\u0e44\\u0e02\\u0e0b\\u0e2d\\u0e23\\u0e4c\\u0e2a\\u0e42\\u0e04\\u0e49\\u0e14\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e14\\u0e49\\u0e27\\u0e22\",\n            \"remember_choice\": \"\\u0e08\\u0e33\\u0e15\\u0e31\\u0e27\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e17\\u0e35\\u0e48\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e44\\u0e27\\u0e49\",\n            \"open\": \"\\u0e40\\u0e1b\\u0e34\\u0e14\",\n            \"cancel\": \"\\u0e22\\u0e01\\u0e40\\u0e25\\u0e34\\u0e01\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/th\",[],function(){return{errorLoading:function(){return\"ไม่สามารถค้นข้อมูลได้\"},inputTooLong:function(n){return\"โปรดลบออก \"+(n.input.length-n.maximum)+\" ตัวอักษร\"},inputTooShort:function(n){return\"โปรดพิมพ์เพิ่มอีก \"+(n.minimum-n.input.length)+\" ตัวอักษร\"},loadingMore:function(){return\"กำลังค้นข้อมูลเพิ่ม…\"},maximumSelected:function(n){return\"คุณสามารถเลือกได้ไม่เกิน \"+n.maximum+\" รายการ\"},noResults:function(){return\"ไม่พบข้อมูล\"},searching:function(){return\"กำลังค้นข้อมูล…\"},removeAllItems:function(){return\"ลบรายการทั้งหมด\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.tr.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/tr/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['tr'] = Object.assign(\n    window.oc.langMessages['tr'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"Formatlama\",\n        \"quote\": \"Al\\u0131nt\\u0131\",\n        \"code\": \"Kod\",\n        \"header1\": \"Ba\\u015fl\\u0131k 1\",\n        \"header2\": \"Ba\\u015fl\\u0131k 2\",\n        \"header3\": \"Ba\\u015fl\\u0131k 3\",\n        \"header4\": \"Ba\\u015fl\\u0131k 4\",\n        \"header5\": \"Ba\\u015fl\\u0131k 5\",\n        \"header6\": \"Ba\\u015fl\\u0131k 6\",\n        \"bold\": \"Kal\\u0131n\",\n        \"italic\": \"\\u0130talik\",\n        \"unorderedlist\": \"S\\u0131ras\\u0131z Liste\",\n        \"orderedlist\": \"S\\u0131ral\\u0131 Liste\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"G\\u00f6rsel/Resim\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Yatay \\u00c7izgi Ekle\",\n        \"fullscreen\": \"Tam Ekran\",\n        \"preview\": \"\\u00d6nizleme\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Medya Linki Ekle\",\n        \"insert_image\": \"Medya Resim Ekle\",\n        \"insert_video\": \"Medya Video Ekle\",\n        \"insert_audio\": \"Medya Ses Ekle\",\n        \"invalid_file_empty_insert\": \"L\\u00fctfen link verilecek dosyay\\u0131 se\\u00e7in.\",\n        \"invalid_file_single_insert\": \"L\\u00fctfen tek bir dosya se\\u00e7in.\",\n        \"invalid_image_empty_insert\": \"L\\u00fctfen eklenecek resim(ler)i se\\u00e7in.\",\n        \"invalid_video_empty_insert\": \"L\\u00fctfen eklenecek video dosyas\\u0131n\\u0131 se\\u00e7in.\",\n        \"invalid_audio_empty_insert\": \"L\\u00fctfen eklenecek ses dosyas\\u0131n\\u0131 se\\u00e7in.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"Evet\",\n        \"cancel_button_text\": \"\\u0130ptal\",\n        \"widget_remove_confirm\": \"Bu eklentiyi kald\\u0131rma istedi\\u011finize emin misiniz?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\u00d6nceki Ay\",\n        \"nextMonth\": \"Sonraki Ay\",\n        \"months\": [\n            \"Ocak\",\n            \"\\u015eubat\",\n            \"Mart\",\n            \"Nisan\",\n            \"May\\u0131s\",\n            \"Haziran\",\n            \"Temmuz\",\n            \"A\\u011fustos\",\n            \"Eyl\\u00fcl\",\n            \"Ekim\",\n            \"Kas\\u0131m\",\n            \"Aral\\u0131k\"\n        ],\n        \"weekdays\": [\n            \"Pazar\",\n            \"Pazartesi\",\n            \"Sal\\u0131\",\n            \"\\u00c7ar\\u015famba\",\n            \"Per\\u015fembe\",\n            \"Cuma\",\n            \"Cumartesi\"\n        ],\n        \"weekdaysShort\": [\n            \"Paz\",\n            \"Pzt\",\n            \"Sal\",\n            \"\\u00c7ar\",\n            \"Per\",\n            \"Cum\",\n            \"Cmt\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"Se\\u00e7\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"t\\u00fcm\\u00fc\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Uygula\",\n            \"clear_button_text\": \"Temizle\"\n        },\n        \"dates\": {\n            \"all\": \"t\\u00fcm\\u00fc\",\n            \"filter_button_text\": \"Filtrele\",\n            \"reset_button_text\": \"S\\u0131f\\u0131rla\",\n            \"date_placeholder\": \"Tarih\",\n            \"after_placeholder\": \"Sonra\",\n            \"before_placeholder\": \"\\u00d6nce\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filtrele\",\n            \"reset_button_text\": \"S\\u0131f\\u0131rla\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Veri y\\u0131\\u011f\\u0131n\\u0131n\\u0131 g\\u00f6ster\",\n        \"hide_stacktrace\": \"Veri y\\u0131\\u011f\\u0131n\\u0131n\\u0131 gizle\",\n        \"tabs\": {\n            \"formatted\": \"Formatl\\u0131\",\n            \"raw\": \"Ham Veri\"\n        },\n        \"editor\": {\n            \"title\": \"Kaynak kod edit\\u00f6r\\u00fc\",\n            \"description\": \"\\u0130\\u015fletim sisteminiz URL \\u015femalar\\u0131na yan\\u0131t verecek \\u015fekilde yap\\u0131land\\u0131r\\u0131lmal\\u0131d\\u0131r.\",\n            \"openWith\": \"Birlikte a\\u00e7\",\n            \"remember_choice\": \"Bu oturum i\\u00e7in se\\u00e7enekleri hat\\u0131rla\",\n            \"open\": \"A\\u00e7\",\n            \"cancel\": \"\\u0130ptal\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/tr\",[],function(){return{errorLoading:function(){return\"Sonuç yüklenemedi\"},inputTooLong:function(n){return n.input.length-n.maximum+\" karakter daha girmelisiniz\"},inputTooShort:function(n){return\"En az \"+(n.minimum-n.input.length)+\" karakter daha girmelisiniz\"},loadingMore:function(){return\"Daha fazla…\"},maximumSelected:function(n){return\"Sadece \"+n.maximum+\" seçim yapabilirsiniz\"},noResults:function(){return\"Sonuç bulunamadı\"},searching:function(){return\"Aranıyor…\"},removeAllItems:function(){return\"Tüm öğeleri kaldır\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.uk.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/uk/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['uk'] = Object.assign(\n    window.oc.langMessages['uk'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f\",\n        \"quote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\\u0430\",\n        \"code\": \"\\u041a\\u043e\\u0434\",\n        \"header1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n        \"header2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n        \"header3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n        \"header4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n        \"header5\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 5\",\n        \"header6\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 6\",\n        \"bold\": \"\\u0416\\u0438\\u0440\\u043d\\u0438\\u0439 \\u0448\\u0440\\u0438\\u0444\\u0442\",\n        \"italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0438\\u0432\",\n        \"unorderedlist\": \"\\u041d\\u0435\\u043d\\u0443\\u043c\\u0435\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u0438\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n        \"orderedlist\": \"\\u041d\\u0443\\u043c\\u0456\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u0438\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\u0412\\u0456\\u0434\\u0435\\u043e\",\n        \"image\": \"\\u0417\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n        \"link\": \"\\u041f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n        \"horizontalrule\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0443 \\u0440\\u0438\\u0441\\u043a\\u0443\",\n        \"fullscreen\": \"\\u041f\\u043e\\u0432\\u043d\\u0438\\u0439 \\u0435\\u043a\\u0440\\u0430\\u043d\",\n        \"preview\": \"\\u041f\\u043e\\u043f\\u0435\\u0440\\u0435\\u0434\\u043d\\u0456\\u0439 \\u043f\\u0435\\u0440\\u0435\\u0433\\u043b\\u044f\\u0434\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043c\\u0435\\u0434\\u0456\\u0430-\\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n        \"insert_image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043c\\u0435\\u0434\\u0456\\u0430-\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n        \"insert_video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043c\\u0435\\u0434\\u0456\\u0430-\\u0432\\u0456\\u0434\\u0435\\u043e\",\n        \"insert_audio\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043c\\u0435\\u0434\\u0456\\u0430-\\u0430\\u0443\\u0434\\u0456\\u043e\",\n        \"invalid_file_empty_insert\": \"\\u0411\\u0443\\u0434\\u044c \\u043b\\u0430\\u0441\\u043a\\u0430, \\u043e\\u0431\\u0435\\u0440\\u0456\\u0442\\u044c \\u0444\\u0430\\u0439\\u043b \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f.\",\n        \"invalid_file_single_insert\": \"\\u0411\\u0443\\u0434\\u044c \\u043b\\u0430\\u0441\\u043a\\u0430, \\u043e\\u0431\\u0435\\u0440\\u0456\\u0442\\u044c \\u043e\\u0434\\u0438\\u043d \\u0444\\u0430\\u0439\\u043b.\",\n        \"invalid_image_empty_insert\": \"\\u0411\\u0443\\u0434\\u044c \\u043b\\u0430\\u0441\\u043a\\u0430, \\u043e\\u0431\\u0435\\u0440\\u0456\\u0442\\u044c \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438.\",\n        \"invalid_video_empty_insert\": \"\\u0411\\u0443\\u0434\\u044c \\u043b\\u0430\\u0441\\u043a\\u0430, \\u043e\\u0431\\u0435\\u0440\\u0456\\u0442\\u044c \\u0432\\u0456\\u0434\\u0435\\u043e \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438.\",\n        \"invalid_audio_empty_insert\": \"\\u0411\\u0443\\u0434\\u044c \\u043b\\u0430\\u0441\\u043a\\u0430, \\u043e\\u0431\\u0435\\u0440\\u0456\\u0442\\u044c \\u0430\\u0443\\u0434\\u0456\\u043e \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"\\u041e\\u043a\",\n        \"cancel_button_text\": \"\\u0421\\u043a\\u0430\\u0441\\u0443\\u0432\\u0430\\u0442\\u0438\",\n        \"widget_remove_confirm\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0446\\u0435\\u0439 \\u0432\\u0456\\u0434\\u0436\\u0435\\u0442?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\u041f\\u043e\\u043f\\u0435\\u0440\\u0435\\u0434\\u043d\\u0456\\u0439 \\u043c\\u0456\\u0441\\u044f\\u0446\\u044c\",\n        \"nextMonth\": \"\\u041d\\u0430\\u0441\\u0442\\u0443\\u043f\\u043d\\u0438\\u0439 \\u043c\\u0456\\u0441\\u044f\\u0446\\u044c\",\n        \"months\": [\n            \"\\u0421\\u0456\\u0447\\u0435\\u043d\\u044c\",\n            \"\\u041b\\u044e\\u0442\\u0438\\u0439\",\n            \"\\u0411\\u0435\\u0440\\u0435\\u0437\\u0435\\u043d\\u044c\",\n            \"\\u041a\\u0432\\u0456\\u0442\\u0435\\u043d\\u044c\",\n            \"\\u0422\\u0440\\u0430\\u0432\\u0435\\u043d\\u044c\",\n            \"\\u0427\\u0435\\u0440\\u0432\\u0435\\u043d\\u044c\",\n            \"\\u041b\\u0438\\u043f\\u0435\\u043d\\u044c\",\n            \"\\u0421\\u0435\\u0440\\u043f\\u0435\\u043d\\u044c\",\n            \"\\u0412\\u0435\\u0440\\u0435\\u0441\\u0435\\u043d\\u044c\",\n            \"\\u0416\\u043e\\u0432\\u0442\\u0435\\u043d\\u044c\",\n            \"\\u041b\\u0438\\u0441\\u0442\\u043e\\u043f\\u0430\\u0434\",\n            \"\\u0413\\u0440\\u0443\\u0434\\u0435\\u043d\\u044c\"\n        ],\n        \"weekdays\": [\n            \"\\u041d\\u0435\\u0434\\u0456\\u043b\\u044f\",\n            \"\\u041f\\u043e\\u043d\\u0435\\u0434\\u0456\\u043b\\u043e\\u043a\",\n            \"\\u0412\\u0456\\u0432\\u0442\\u043e\\u0440\\u043e\\u043a\",\n            \"\\u0421\\u0435\\u0440\\u0435\\u0434\\u0430\",\n            \"\\u0427\\u0435\\u0442\\u0432\\u0435\\u0440\",\n            \"\\u041f'\\u044f\\u0442\\u043d\\u0438\\u0446\\u044f\",\n            \"C\\u0443\\u0431\\u043e\\u0442\\u0430\"\n        ],\n        \"weekdaysShort\": [\n            \"\\u041d\\u0434\",\n            \"\\u041f\\u043d\",\n            \"\\u0412\\u0442\",\n            \"\\u0421\\u0440\",\n            \"\\u0427\\u0442\",\n            \"\\u041f\\u0442\",\n            \"\\u0421\\u0431\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"OK\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\u0432\\u0441\\u0456\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"\\u0432\\u0441\\u0456\",\n            \"filter_button_text\": \"\\u0424\\u0456\\u043b\\u044c\\u0442\\u0440\",\n            \"reset_button_text\": \"\\u0421\\u043a\\u0438\\u043d\\u0443\\u0442\\u0438\",\n            \"date_placeholder\": \"\\u0414\\u0430\\u0442\\u0430\",\n            \"after_placeholder\": \"\\u041f\\u0456\\u0441\\u043b\\u044f\",\n            \"before_placeholder\": \"\\u0414\\u043e\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"Filter\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Min\",\n            \"max_placeholder\": \"Max\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u0430\\u0442\\u0438 \\u0442\\u0440\\u0430\\u0441\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f \\u0441\\u0442\\u0435\\u043a\\u0430\",\n        \"hide_stacktrace\": \"\\u041f\\u0440\\u0438\\u0445\\u043e\\u0432\\u0430\\u0442\\u0438 \\u0442\\u0440\\u0430\\u0441\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f \\u0441\\u0442\\u0435\\u043a\\u0430\",\n        \"tabs\": {\n            \"formatted\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439\",\n            \"raw\": \"\\u041f\\u043e\\u0447\\u0430\\u0442\\u043a\\u043e\\u0432\\u0438\\u0439\"\n        },\n        \"editor\": {\n            \"title\": \"\\u0420\\u0435\\u0434\\u0430\\u043a\\u0442\\u043e\\u0440 \\u0432\\u0438\\u0445\\u0456\\u0434\\u043d\\u043e\\u0433\\u043e \\u043a\\u043e\\u0434\\u0443\",\n            \"description\": \"\\u0412\\u0430\\u0448\\u0430 \\u043e\\u043f\\u0435\\u0440\\u0430\\u0446\\u0456\\u0439\\u043d\\u0430 \\u0441\\u0438\\u0441\\u0442\\u0435\\u043c\\u0430 \\u043f\\u043e\\u0432\\u0438\\u043d\\u043d\\u0430 \\u0431\\u0443\\u0442\\u0438 \\u043d\\u0430\\u043b\\u0430\\u0448\\u0442\\u043e\\u0432\\u0430\\u043d\\u0430 \\u043d\\u0430 \\u043f\\u0440\\u043e\\u0441\\u043b\\u0443\\u0445\\u043e\\u0432\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f \\u0434\\u043e \\u043e\\u0434\\u043d\\u0456\\u0454\\u0457 \\u0437 \\u0446\\u0438\\u0445 \\u0441\\u0445\\u0435\\u043c URL.\",\n            \"openWith\": \"\\u0412\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438 \\u0437\\u0430 \\u0434\\u043e\\u043f\\u043e\\u043c\\u043e\\u0433\\u043e\\u044e\",\n            \"remember_choice\": \"\\u0417\\u0430\\u043f\\u0430\\u043c'\\u044f\\u0442\\u0430\\u0442\\u0438 \\u043e\\u0431\\u0440\\u0430\\u043d\\u0438\\u0439 \\u0432\\u0430\\u0440\\u0456\\u0430\\u043d\\u0442 \\u0434\\u043b\\u044f \\u0446\\u0456\\u0454\\u0457 \\u0441\\u0435\\u0441\\u0456\\u0457\",\n            \"open\": \"\\u0412\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\",\n            \"cancel\": \"\\u0421\\u043a\\u0430\\u0441\\u0443\\u0432\\u0430\\u0442\\u0438\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/uk\",[],function(){function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5?u:r}return{errorLoading:function(){return\"Неможливо завантажити результати\"},inputTooLong:function(e){return\"Будь ласка, видаліть \"+(e.input.length-e.maximum)+\" \"+n(e.maximum,\"літеру\",\"літери\",\"літер\")},inputTooShort:function(n){return\"Будь ласка, введіть \"+(n.minimum-n.input.length)+\" або більше літер\"},loadingMore:function(){return\"Завантаження інших результатів…\"},maximumSelected:function(e){return\"Ви можете вибрати лише \"+e.maximum+\" \"+n(e.maximum,\"пункт\",\"пункти\",\"пунктів\")},noResults:function(){return\"Нічого не знайдено\"},searching:function(){return\"Пошук…\"},removeAllItems:function(){return\"Видалити всі елементи\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.vn.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/vn/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['vn'] = Object.assign(\n    window.oc.langMessages['vn'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u0110\\u1ecbnh d\\u1ea1ng\",\n        \"quote\": \"\\u0110o\\u1ea1n tr\\u00edch d\\u1eabn\",\n        \"code\": \"Code\",\n        \"header1\": \"Ti\\u00eau \\u0111\\u1ec1 1\",\n        \"header2\": \"Ti\\u00eau \\u0111\\u1ec1 2\",\n        \"header3\": \"Ti\\u00eau \\u0111\\u1ec1 3\",\n        \"header4\": \"Ti\\u00eau \\u0111\\u1ec1 4\",\n        \"header5\": \"Ti\\u00eau \\u0111\\u1ec1 5\",\n        \"header6\": \"Ti\\u00eau \\u0111\\u1ec1 6\",\n        \"bold\": \"Ch\\u1eef \\u0111\\u1eadm\",\n        \"italic\": \"Ch\\u1eef nghi\\u00eang\",\n        \"unorderedlist\": \"Danh s\\u00e1ch kh\\u00f4ng th\\u1ee9 t\\u1ef1\",\n        \"orderedlist\": \"Danh s\\u00e1ch c\\u00f3 th\\u1ee9 t\\u1ef1\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"Video\",\n        \"image\": \"H\\u00ecnh \\u1ea3nh\",\n        \"link\": \"Link\",\n        \"horizontalrule\": \"Ch\\u00e8n d\\u00f2ng k\\u1ebb ngang\",\n        \"fullscreen\": \"To\\u00e0n m\\u00e0n h\\u00ecnh\",\n        \"preview\": \"Xem tr\\u01b0\\u1edbc\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"Ch\\u00e8n Link\",\n        \"insert_image\": \"Ch\\u00e8n h\\u00ecnh \\u1ea3nh\",\n        \"insert_video\": \"Ch\\u00e8n Video\",\n        \"insert_audio\": \"Ch\\u00e8n t\\u1ec7p \\u00e2m thanh\",\n        \"invalid_file_empty_insert\": \"Vui l\\u00f2ng ch\\u1ecdn file \\u0111\\u1ec3 ch\\u00e8n v\\u00e0o link.\",\n        \"invalid_file_single_insert\": \"Ch\\u1ecdn m\\u1ed9t file duy nh\\u1ea5t.\",\n        \"invalid_image_empty_insert\": \"Ch\\u1ecdn m\\u1ed9t ho\\u1eb7c nhi\\u1ec1u \\u1ea3nh \\u0111\\u1ec3 ch\\u00e8n v\\u00e0o.\",\n        \"invalid_video_empty_insert\": \"Ch\\u1ecdn video \\u0111\\u1ec3 ch\\u00e8n v\\u00e0o.\",\n        \"invalid_audio_empty_insert\": \"Ch\\u1ecdn t\\u1ec7p tin audio \\u0111\\u1ec3 ch\\u00e8n v\\u00e0o.\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"\\u0110\\u1ed3ng \\u00fd\",\n        \"cancel_button_text\": \"B\\u1ecf qua\",\n        \"widget_remove_confirm\": \"\\u0110\\u1ed3ng \\u00fd x\\u00f3a widget n\\u00e0y?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"Th\\u00e1ng tr\\u01b0\\u1edbc\",\n        \"nextMonth\": \"Th\\u00e1ng ti\\u1ebfp theo\",\n        \"months\": [\n            \"Th\\u00e1ng gi\\u00eang\",\n            \"Th\\u00e1ng 2\",\n            \"Th\\u00e1ng 3\",\n            \"Th\\u00e1ng 4\",\n            \"Th\\u00e1ng 5\",\n            \"Th\\u00e1ng 6\",\n            \"Th\\u00e1ng 7\",\n            \"Th\\u00e1ng 8\",\n            \"Th\\u00e1ng 9\",\n            \"Th\\u00e1ng 10\",\n            \"Th\\u00e1ng 11\",\n            \"Th\\u00e1ng 12\"\n        ],\n        \"weekdays\": [\n            \"Ch\\u1ee7 nh\\u1eadt\",\n            \"Th\\u1ee9 2\",\n            \"Th\\u1ee9 3\",\n            \"Th\\u1ee9 4\",\n            \"Th\\u1ee9 5\",\n            \"Th\\u1ee9 6\",\n            \"Th\\u1ee9 7\"\n        ],\n        \"weekdaysShort\": [\n            \"CN\",\n            \"T2\",\n            \"T3\",\n            \"T4\",\n            \"T5\",\n            \"T6\",\n            \"T7\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"Ch\\u1ecdn\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"t\\u1ea5t c\\u1ea3\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"Apply\",\n            \"clear_button_text\": \"Clear\"\n        },\n        \"dates\": {\n            \"all\": \"t\\u1ea5t c\\u1ea3\",\n            \"filter_button_text\": \"L\\u1ecdc\",\n            \"reset_button_text\": \"Reset\",\n            \"date_placeholder\": \"Ng\\u00e0y\",\n            \"after_placeholder\": \"Sau ng\\u00e0y\",\n            \"before_placeholder\": \"Tr\\u01b0\\u1edbc ng\\u00e0y\"\n        },\n        \"numbers\": {\n            \"all\": \"all\",\n            \"filter_button_text\": \"L\\u1ecdc\",\n            \"reset_button_text\": \"Reset\",\n            \"min_placeholder\": \"Nh\\u1ecf nh\\u1ea5t\",\n            \"max_placeholder\": \"L\\u1edbn nh\\u1ea5t\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Hi\\u1ec3n th\\u1ecb ng\\u0103n x\\u1ebfp\",\n        \"hide_stacktrace\": \"\\u1ea8n ng\\u0103n x\\u1ebfp\",\n        \"tabs\": {\n            \"formatted\": \"\\u0110\\u00e3 \\u0111\\u1ecbnh d\\u1ea1ng\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Tr\\u00ecnh so\\u1ea1n th\\u1ea3o code\",\n            \"description\": \"H\\u1ec7 th\\u1ed1ng c\\u1ee7a b\\u1ea1n c\\u1ea7n \\u0111\\u01b0\\u1ee3c c\\u1ea5u h\\u00ecnh \\u0111\\u1ec3 hi\\u1ec3u \\u0111\\u01b0\\u1ee3c m\\u1ed9t trong nh\\u1eefng c\\u1ea5u tr\\u00fac URL n\\u00e0y\",\n            \"openWith\": \"M\\u1edf b\\u1eb1ng\",\n            \"remember_choice\": \"Nh\\u1edb l\\u1ef1a ch\\u1ecdn n\\u00e0y cho c\\u00e1c l\\u1ea7n ti\\u1ebfp theo\",\n            \"open\": \"M\\u1edf ra\",\n            \"cancel\": \"B\\u1ecf qua\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.zh-cn.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/zh-cn/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['zh-cn'] = Object.assign(\n    window.oc.langMessages['zh-cn'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u683c\\u5f0f\\u5316\",\n        \"quote\": \"\\u5f15\\u7528\",\n        \"code\": \"\\u4ee3\\u7801\",\n        \"header1\": \"\\u6807\\u9898 1\",\n        \"header2\": \"\\u6807\\u9898 2\",\n        \"header3\": \"\\u6807\\u9898 3\",\n        \"header4\": \"\\u6807\\u9898 4\",\n        \"header5\": \"\\u6807\\u9898 5\",\n        \"header6\": \"\\u6807\\u9898 6\",\n        \"bold\": \"\\u7c97\\u4f53\",\n        \"italic\": \"\\u659c\\u4f53\",\n        \"unorderedlist\": \"\\u65e0\\u5e8f\\u5217\\u8868\",\n        \"orderedlist\": \"\\u6709\\u5e8f\\u5217\\u8868\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\u89c6\\u9891\",\n        \"image\": \"\\u56fe\\u7247\",\n        \"link\": \"\\u94fe\\u63a5\",\n        \"horizontalrule\": \"\\u63d2\\u5165\\u5206\\u5272\\u7ebf\",\n        \"fullscreen\": \"\\u5168\\u5c4f\",\n        \"preview\": \"\\u9884\\u89c8\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u63d2\\u5165\\u94fe\\u63a5\",\n        \"insert_image\": \"\\u63d2\\u5165\\u56fe\\u7247\",\n        \"insert_video\": \"\\u63d2\\u5165\\u89c6\\u9891\",\n        \"insert_audio\": \"\\u63d2\\u5165\\u97f3\\u9891\",\n        \"invalid_file_empty_insert\": \"\\u8bf7\\u9009\\u62e9\\u8981\\u63d2\\u5165\\u7684\\u6587\\u4ef6\\u3002\",\n        \"invalid_file_single_insert\": \"\\u8bf7\\u9009\\u62e9\\u8981\\u63d2\\u5165\\u7684\\u6587\\u4ef6\\u3002\",\n        \"invalid_image_empty_insert\": \"\\u8bf7\\u9009\\u62e9\\u8981\\u63d2\\u5165\\u7684\\u56fe\\u7247\\u6587\\u4ef6\\u3002\",\n        \"invalid_video_empty_insert\": \"\\u8bf7\\u9009\\u62e9\\u8981\\u63d2\\u5165\\u7684\\u89c6\\u9891\\u6587\\u4ef6\\u3002\",\n        \"invalid_audio_empty_insert\": \"\\u8bf7\\u9009\\u62e9\\u8981\\u63d2\\u5165\\u7684\\u97f3\\u9891\\u6587\\u4ef6\\u3002\"\n    },\n    \"alert\": {\n        \"error\": \"\\u9519\\u8bef\",\n        \"confirm\": \"\\u786e\\u8ba4\",\n        \"dismiss\": \"\\u53d6\\u6d88\",\n        \"confirm_button_text\": \"\\u786e\\u5b9a\",\n        \"cancel_button_text\": \"\\u53d6\\u6d88\",\n        \"widget_remove_confirm\": \"\\u5220\\u9664\\u8fd9\\u4e2a\\u5c0f\\u90e8\\u4ef6?\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\u4e0a\\u4e00\\u4e2a\\u6708\",\n        \"nextMonth\": \"\\u4e0b\\u4e00\\u4e2a\\u6708\",\n        \"months\": [\n            \"\\u4e00\\u6708\",\n            \"\\u4e8c\\u6708\",\n            \"\\u4e09\\u6708\",\n            \"\\u56db\\u6708\",\n            \"\\u4e94\\u6708\",\n            \"\\u516d\\u6708\",\n            \"\\u4e03\\u6708\",\n            \"\\u516b\\u6708\",\n            \"\\u4e5d\\u6708\",\n            \"\\u5341\\u6708\",\n            \"\\u5341\\u4e00\\u6708\",\n            \"\\u5341\\u4e8c\\u6708\"\n        ],\n        \"weekdays\": [\n            \"\\u5468\\u65e5\",\n            \"\\u5468\\u4e00\",\n            \"\\u5468\\u4e8c\",\n            \"\\u5468\\u4e09\",\n            \"\\u5468\\u56db\",\n            \"\\u5468\\u4e94\",\n            \"\\u5468\\u516d\"\n        ],\n        \"weekdaysShort\": [\n            \"\\u65e5\",\n            \"\\u4e00\",\n            \"\\u4e8c\",\n            \"\\u4e09\",\n            \"\\u56db\",\n            \"\\u4e94\",\n            \"\\u516d\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"\\u597d\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\u5168\\u90e8\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"\\u5e94\\u7528\",\n            \"clear_button_text\": \"\\u6e05\\u9664\"\n        },\n        \"dates\": {\n            \"all\": \"\\u5168\\u90e8\",\n            \"filter_button_text\": \"\\u7b5b\\u9009\",\n            \"reset_button_text\": \"\\u91cd\\u7f6e\",\n            \"date_placeholder\": \"\\u65e5\\u671f\",\n            \"after_placeholder\": \"\\u4e4b\\u540e\",\n            \"before_placeholder\": \"\\u4e4b\\u524d\"\n        },\n        \"numbers\": {\n            \"all\": \"\\u5168\\u90e8\",\n            \"filter_button_text\": \"\\u8fc7\\u6ee4\\u5668\",\n            \"reset_button_text\": \"\\u91cd\\u7f6e\",\n            \"min_placeholder\": \"\\u6700\\u5c0f\",\n            \"max_placeholder\": \"\\u6700\\u5927\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"\\u663e\\u793a\\u5806\\u6808\",\n        \"hide_stacktrace\": \"\\u9690\\u85cf\\u5806\\u6808\",\n        \"tabs\": {\n            \"formatted\": \"\\u683c\\u5f0f\\u5316\",\n            \"raw\": \"\\u539f\\u59cb\"\n        },\n        \"editor\": {\n            \"title\": \"\\u6e90\\u4ee3\\u7801\\u7f16\\u8f91\\u5668\",\n            \"description\": \"\\u60a8\\u7684\\u7cfb\\u7edf\\u5e94\\u914d\\u7f6e\\u4e00\\u4e2a\\u4fa6\\u542c\\u8fd9\\u4e9b URL \\u7684\\u65b9\\u6848\",\n            \"openWith\": \"\\u6253\\u5f00\\u65b9\\u5f0f\",\n            \"remember_choice\": \"\\u8bb0\\u4f4f\\u672c\\u6b21\\u4f1a\\u8bdd\\u9009\\u62e9\\u7684\\u9009\\u9879\",\n            \"open\": \"\\u6253\\u5f00\",\n            \"cancel\": \"\\u53d6\\u6d88\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"\\u60a8\\u4e0d\\u80fd\\u4e0a\\u4f20\\u4efb\\u4f55\\u6587\\u4ef6\",\n        \"invalid_file_type\": \"\\u60a8\\u4e0d\\u80fd\\u4e0a\\u4f20\\u8fd9\\u79cd\\u7c7b\\u578b\\u7684\\u6587\\u4ef6\",\n        \"file_too_big\": \"\\u6587\\u4ef6\\u592a\\u5927 ({{filesize}}MB)\\u3002 \\u6700\\u5927\\u6587\\u4ef6\\u5927\\u5c0f\\uff1a{{maxFilesize}}MB\",\n        \"response_error\": \"\\u670d\\u52a1\\u5668\\u54cd\\u5e94 {{statusCode}} \\u4ee3\\u7801\",\n        \"remove_file\": \"\\u5220\\u9664\\u6587\\u4ef6\"\n    },\n    \"inspector\": {\n        \"add\": \"\\u65b0\\u589e\",\n        \"remove\": \"\\u79fb\\u9664\",\n        \"key\": \"\\u952e\",\n        \"value\": \"\\u503c\",\n        \"ok\": \"\\u786e\\u5b9a\",\n        \"cancel\": \"\\u53d6\\u6d88\",\n        \"items\": \"\\u9879\\u76ee\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/zh-cn\",[],function(){return{errorLoading:function(){return\"无法载入结果。\"},inputTooLong:function(n){return\"请删除\"+(n.input.length-n.maximum)+\"个字符\"},inputTooShort:function(n){return\"请再输入至少\"+(n.minimum-n.input.length)+\"个字符\"},loadingMore:function(){return\"载入更多结果…\"},maximumSelected:function(n){return\"最多只能选择\"+n.maximum+\"个项目\"},noResults:function(){return\"未找到结果\"},searching:function(){return\"搜索中…\"},removeAllItems:function(){return\"删除所有项目\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/lang/lang.zh-tw.js",
    "content": "/*\n * This file has been compiled from: /modules/system/lang/zh-tw/client.php\n */\nif (!window.oc) {\n    window.oc = {};\n}\n\nif (!window.oc.langMessages) {\n    window.oc.langMessages = {};\n}\n\nwindow.oc.langMessages['zh-tw'] = Object.assign(\n    window.oc.langMessages['zh-tw'] || {},\n    {\n    \"markdowneditor\": {\n        \"formatting\": \"\\u683c\\u5f0f\",\n        \"quote\": \"\\u5f15\\u7528\",\n        \"code\": \"\\u7a0b\\u5f0f\\u78bc\",\n        \"header1\": \"\\u6a19\\u984c\\u4e00\",\n        \"header2\": \"\\u6a19\\u984c\\u4e8c\",\n        \"header3\": \"\\u6a19\\u984c\\u4e09\",\n        \"header4\": \"\\u6a19\\u984c\\u56db\",\n        \"header5\": \"\\u6a19\\u984c\\u4e94\",\n        \"header6\": \"\\u6a19\\u984c\\u516d\",\n        \"bold\": \"\\u7c97\\u9ad4\",\n        \"italic\": \"\\u659c\\u9ad4\",\n        \"unorderedlist\": \"\\u9805\\u76ee\\u6e05\\u55ae\",\n        \"orderedlist\": \"\\u6578\\u5b57\\u6e05\\u55ae\",\n        \"snippet\": \"Snippet\",\n        \"video\": \"\\u5f71\\u7247\",\n        \"image\": \"\\u5716\\u7247\",\n        \"link\": \"\\u9023\\u7d50\",\n        \"horizontalrule\": \"\\u63d2\\u5165\\u6c34\\u5e73\\u7dda\",\n        \"fullscreen\": \"\\u5168\\u87a2\\u5e55\",\n        \"preview\": \"\\u9810\\u89bd\",\n        \"strikethrough\": \"Strikethrough\",\n        \"cleanblock\": \"Clean Block\",\n        \"table\": \"Table\",\n        \"sidebyside\": \"Side by Side\"\n    },\n    \"mediamanager\": {\n        \"insert_link\": \"\\u63d2\\u5165\\u5a92\\u9ad4\\u6ac3\\u9023\\u7d50\",\n        \"insert_image\": \"\\u63d2\\u5165\\u5a92\\u9ad4\\u6ac3\\u5716\\u7247\",\n        \"insert_video\": \"\\u63d2\\u5165\\u5a92\\u9ad4\\u6ac3\\u5f71\\u7247\",\n        \"insert_audio\": \"\\u63d2\\u5165\\u5a92\\u9ad4\\u6ac3\\u97f3\\u8a0a\",\n        \"invalid_file_empty_insert\": \"\\u8acb\\u9078\\u64c7\\u6a94\\u6848\\u4ee5\\u63d2\\u5165\\u9023\\u7d50\\u3002\",\n        \"invalid_file_single_insert\": \"\\u8acb\\u9078\\u64c7\\u4e00\\u500b\\u6a94\\u6848\\u3002\",\n        \"invalid_image_empty_insert\": \"\\u8acb\\u9078\\u64c7\\u63d2\\u5165\\u7684\\u5716\\u7247\\u3002\",\n        \"invalid_video_empty_insert\": \"\\u8acb\\u9078\\u64c7\\u63d2\\u5165\\u7684\\u5f71\\u7247\\u3002\",\n        \"invalid_audio_empty_insert\": \"\\u8acb\\u9078\\u64c7\\u63d2\\u5165\\u7684\\u97f3\\u8a0a\\u3002\"\n    },\n    \"alert\": {\n        \"error\": \"Error\",\n        \"confirm\": \"Confirm\",\n        \"dismiss\": \"Dismiss\",\n        \"confirm_button_text\": \"\\u78ba\\u8a8d\",\n        \"cancel_button_text\": \"\\u53d6\\u6d88\",\n        \"widget_remove_confirm\": \"\\u78ba\\u5b9a\\u79fb\\u9664\\u6b64\\u5143\\u4ef6\\uff1f\"\n    },\n    \"datepicker\": {\n        \"previousMonth\": \"\\u4e0a\\u500b\\u6708\",\n        \"nextMonth\": \"\\u4e0b\\u500b\\u6708\",\n        \"months\": [\n            \"\\u4e00\\u6708\",\n            \"\\u4e8c\\u6708\",\n            \"\\u4e09\\u6708\",\n            \"\\u56db\\u6708\",\n            \"\\u4e94\\u6708\",\n            \"\\u516d\\u6708\",\n            \"\\u4e03\\u6708\",\n            \"\\u516b\\u6708\",\n            \"\\u4e5d\\u6708\",\n            \"\\u5341\\u6708\",\n            \"\\u5341\\u4e00\\u6708\",\n            \"\\u5341\\u4e8c\\u6708\"\n        ],\n        \"weekdays\": [\n            \"\\u661f\\u671f\\u65e5\",\n            \"\\u661f\\u671f\\u4e00\",\n            \"\\u661f\\u671f\\u4e8c\",\n            \"\\u661f\\u671f\\u4e09\",\n            \"\\u661f\\u671f\\u56db\",\n            \"\\u661f\\u671f\\u4e94\",\n            \"\\u661f\\u671f\\u516d\"\n        ],\n        \"weekdaysShort\": [\n            \"\\u9031\\u65e5\",\n            \"\\u9031\\u4e00\",\n            \"\\u9031\\u4e8c\",\n            \"\\u9031\\u4e09\",\n            \"\\u9031\\u56db\",\n            \"\\u9031\\u4e94\",\n            \"\\u9031\\u516d\"\n        ]\n    },\n    \"colorpicker\": {\n        \"choose\": \"\\u78ba\\u5b9a\"\n    },\n    \"filter\": {\n        \"group\": {\n            \"all\": \"\\u5168\\u90e8\"\n        },\n        \"scopes\": {\n            \"apply_button_text\": \"\\u78ba\\u5b9a\",\n            \"clear_button_text\": \"\\u6e05\\u9664\"\n        },\n        \"dates\": {\n            \"all\": \"\\u5168\\u90e8\",\n            \"filter_button_text\": \"\\u7be9\\u9078\",\n            \"reset_button_text\": \"\\u91cd\\u7f6e\",\n            \"date_placeholder\": \"\\u65e5\\u671f\",\n            \"after_placeholder\": \"\\u5728\\u6b64\\u4e4b\\u5f8c\",\n            \"before_placeholder\": \"\\u5728\\u6b64\\u4e4b\\u524d\"\n        },\n        \"numbers\": {\n            \"all\": \"\\u5168\\u90e8\",\n            \"filter_button_text\": \"\\u7be9\\u9078\",\n            \"reset_button_text\": \"\\u91cd\\u7f6e\",\n            \"min_placeholder\": \"\\u6700\\u5c0f\\u503c\",\n            \"max_placeholder\": \"\\u6700\\u5927\\u503c\",\n            \"number_placeholder\": \"N\\u00famero\"\n        }\n    },\n    \"eventlog\": {\n        \"show_stacktrace\": \"Show the stacktrace\",\n        \"hide_stacktrace\": \"Hide the stacktrace\",\n        \"tabs\": {\n            \"formatted\": \"Formatted\",\n            \"raw\": \"Raw\"\n        },\n        \"editor\": {\n            \"title\": \"Source Code Editor\",\n            \"description\": \"Your operating system should be configured to listen to one of these URL schemes.\",\n            \"openWith\": \"Open with\",\n            \"remember_choice\": \"Remember selected option for this session\",\n            \"open\": \"Open\",\n            \"cancel\": \"Cancel\",\n            \"rememberChoice\": \"Recuerde la opci\\u00f3n seleccionada para esta sesi\\u00f3n del navegador\"\n        }\n    },\n    \"upload\": {\n        \"max_files\": \"You can not upload any more files.\",\n        \"invalid_file_type\": \"You can't upload files of this type.\",\n        \"file_too_big\": \"File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.\",\n        \"response_error\": \"Server responded with {{statusCode}} code.\",\n        \"remove_file\": \"Remove file\"\n    },\n    \"inspector\": {\n        \"add\": \"Add\",\n        \"remove\": \"Remove\",\n        \"key\": \"Key\",\n        \"value\": \"Value\",\n        \"ok\": \"OK\",\n        \"cancel\": \"Cancel\",\n        \"items\": \"Items\"\n    },\n    \"[not set]\": \"[not set]\",\n    \"1 day (today) if not set\": \"1 day (today) if not set\",\n    \"Apply\": \"Apply\",\n    \"Ascending\": \"Ascending\",\n    \"Attribute\": \"Attribute\",\n    \"Bar\": \"Bar\",\n    \"Chart\": \"Chart\",\n    \"Chart type\": \"Chart type\",\n    \"Color\": \"Color\",\n    \"Compare Totals\": \"Compare Totals\",\n    \"Configure\": \"Configure\",\n    \"Custom\": \"Custom\",\n    \"Dashboard interval\": \"Dashboard interval\",\n    \"Data source\": \"Data source\",\n    \"Date interval\": \"Date interval\",\n    \"Day\": \"Day\",\n    \"Delete\": \"Delete\",\n    \"Delete Dashboard\": \"Delete Dashboard\",\n    \"Delete row\": \"Delete row\",\n    \"Descending\": \"Descending\",\n    \"Dimension\": \"Dimension\",\n    \"Direction\": \"Direction\",\n    \"Disabled\": \"Disabled\",\n    \"Display\": \"Display\",\n    \"Display [not set]\": \"Display [not set]\",\n    \"Display all records\": \"Display all records\",\n    \"Display relative bars\": \"Display relative bars\",\n    \"Display totals\": \"Display totals\",\n    \"Edit Dashboard\": \"Edit Dashboard\",\n    \"Empty values\": \"Empty values\",\n    \"Enter a positive number\": \"Enter a positive number\",\n    \"Enter a positive number or leave empty to display all records.\": \"Enter a positive number or leave empty to display all records.\",\n    \"Equal to\": \"Equal to\",\n    \"Export Dashboard\": \"Export Dashboard\",\n    \"Extra table fields\": \"Extra table fields\",\n    \"Filters\": \"Filters\",\n    \"General\": \"General\",\n    \"Greater or equal to\": \"Greater or equal to\",\n    \"Greater than\": \"Greater than\",\n    \"Hide\": \"Hide\",\n    \"Horizontal\": \"Horizontal\",\n    \"Icon\": \"Icon\",\n    \"Icon Status\": \"Icon Status\",\n    \"Important\": \"Important\",\n    \"Includes\": \"Includes\",\n    \"Indicator\": \"Indicator\",\n    \"Information\": \"Information\",\n    \"Last 30 days\": \"Last 30 days\",\n    \"Last 7 days\": \"Last 7 days\",\n    \"Last month\": \"Last month\",\n    \"Leave empty to disable pagination\": \"Leave empty to disable pagination\",\n    \"Leave empty to hide the title\": \"Leave empty to hide the title\",\n    \"Less or equal to\": \"Less or equal to\",\n    \"Less than\": \"Less than\",\n    \"Limit\": \"Limit\",\n    \"Line\": \"Line\",\n    \"Link Text\": \"Link Text\",\n    \"Link URL\": \"Link URL\",\n    \"Make Default\": \"Make Default\",\n    \"Manage Dashboards\": \"Manage Dashboards\",\n    \"Metric\": \"Metric\",\n    \"Metrics\": \"Metrics\",\n    \"Month\": \"Month\",\n    \"My Custom Widget\": \"My Custom Widget\",\n    \"No Value\": \"No Value\",\n    \"Notice text\": \"Notice text\",\n    \"Number of days\": \"Number of days\",\n    \"One of\": \"One of\",\n    \"One value per line\": \"One value per line\",\n    \"Operation\": \"Operation\",\n    \"Order\": \"Order\",\n    \"Past hour\": \"Past hour\",\n    \"Past X days\": \"Past X days\",\n    \"Please provide the widget title\": \"Please provide the widget title\",\n    \"Please select a data source\": \"Please select a data source\",\n    \"Please select a dimension\": \"Please select a dimension\",\n    \"Please select an icon\": \"Please select an icon\",\n    \"Please select metric(s).\": \"Please select metric(s).\",\n    \"Prev period\": \"Prev period\",\n    \"Quarter\": \"Quarter\",\n    \"Records per page\": \"Records per page\",\n    \"Refresh every minute\": \"Refresh every minute\",\n    \"Rename Dashboard\": \"Rename Dashboard\",\n    \"Reset Layout\": \"Reset Layout\",\n    \"Reset layout back to default?\": \"Reset layout back to default?\",\n    \"Same period last year\": \"Same period last year\",\n    \"Section\": \"Section\",\n    \"Section Title\": \"Section Title\",\n    \"Select a dimension and metrics\": \"Select a dimension and metrics\",\n    \"Select an attribute\": \"Select an attribute\",\n    \"Select an operation\": \"Select an operation\",\n    \"Select sorting metric or dimension\": \"Select sorting metric or dimension\",\n    \"Select the metric color\": \"Select the metric color\",\n    \"Set the current layout as the default?\": \"Set the current layout as the default?\",\n    \"Show Date Interval\": \"Show Date Interval\",\n    \"Sort by\": \"Sort by\",\n    \"Sorting\": \"Sorting\",\n    \"Sorting & Filtering\": \"Sorting & Filtering\",\n    \"Stacked Bar\": \"Stacked Bar\",\n    \"Starts with\": \"Starts with\",\n    \"Success\": \"Success\",\n    \"Table\": \"Table\",\n    \"Text Notice\": \"Text Notice\",\n    \"The dashboard layout has been reset to default.\": \"The dashboard layout has been reset to default.\",\n    \"The dashboard was successfully updated.\": \"The dashboard was successfully updated.\",\n    \"The limit value must be at least 1\": \"The limit value must be at least 1\",\n    \"This dashboard is now the default layout.\": \"This dashboard is now the default layout.\",\n    \"This is a text notice widget.\": \"This is a text notice widget.\",\n    \"This month\": \"This month\",\n    \"This quarter\": \"This quarter\",\n    \"This week\": \"This week\",\n    \"This year\": \"This year\",\n    \"Title\": \"Title\",\n    \"Today\": \"Today\",\n    \"Value\": \"Value\",\n    \"Values\": \"Values\",\n    \"Vertical\": \"Vertical\",\n    \"Warning\": \"Warning\",\n    \"Week\": \"Week\",\n    \"Year\": \"Year\",\n    \"Yesterday\": \"Yesterday\"\n}\n);\n\n\n/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/zh-tw\",[],function(){return{inputTooLong:function(n){return\"請刪掉\"+(n.input.length-n.maximum)+\"個字元\"},inputTooShort:function(n){return\"請再輸入\"+(n.minimum-n.input.length)+\"個字元\"},loadingMore:function(){return\"載入中…\"},maximumSelected:function(n){return\"你只能選擇最多\"+n.maximum+\"項\"},noResults:function(){return\"沒有找到相符的項目\"},searching:function(){return\"搜尋中…\"},removeAllItems:function(){return\"刪除所有項目\"}}}),n.define,n.require}();\n"
  },
  {
    "path": "modules/system/assets/js/main.js",
    "content": "/**\n * October CMS Vendor Loader\n * Imports vendor libraries via native ESM.\n */\n\n// ESM (bundled with esbuild)\nimport * as Vue from '../vendor/vue/vue.esm.js';\nwindow.Vue = Vue;\n\nimport * as VueRouter from '../vendor/vue-router/vue-router.esm.js';\nwindow.VueRouter = VueRouter;\n\nimport mitt from '../vendor/mitt/mitt.esm.js';\nwindow.mitt = mitt;\n\nimport * as bootstrap from '../vendor/bootstrap/bootstrap.esm.js';\nwindow.bootstrap = bootstrap;\n\nimport Cookies from '../vendor/js-cookie/js.cookie.esm.js';\nwindow.Cookies = Cookies;\n\nimport Sortable from '../vendor/sortablejs/sortable.esm.js';\nwindow.Sortable = Sortable;\n\nimport Dropzone from '../vendor/dropzone/dropzone.esm.js';\nwindow.Dropzone = Dropzone;\nDropzone.autoDiscover = false;\n\nimport Chart from '../vendor/chartjs/chart.esm.js';\nwindow.Chart = Chart;\nimport '../vendor/chartjs/chartjs-adapter-moment.esm.js';\n\n// UMD (manually maintained - depend on globals from vendor.js)\nimport '../vendor/froala/froala.js';\nimport '../vendor/handsontable/handsontable.js';\n\n// Vue plugins and configuration\nimport './vue.hotkey.js';\nimport './vue.factory.js';\n\n// Toolbox\nimport '../toolbox/toolbox.js'\n"
  },
  {
    "path": "modules/system/assets/js/pages/eventlogs.beautifier.js",
    "content": "/*\n * Exception Beautifier plugin\n */\n+function ($) {\n    \"use strict\";\n\n    var ExceptionBeautifier = function (el, options) {\n        var self = this;\n\n        self.$el = $(el);\n        self.options = options || {};\n\n        // Init\n        self.init();\n    }\n\n    ExceptionBeautifier.DEFAULTS = {};\n\n    ExceptionBeautifier.REGEX = {\n        phpline: /^(#[0-9]+)\\s+(.+\\.php)(?:\\(([0-9]+)\\))?\\s*:(.*)/,\n        artisan: /^(#[0-9]+)\\s+(.+artisan)(?:\\(([0-9]+)\\))?\\s*:(.*)/,\n        internalLine: /^(#[0-9]+)\\s+(\\[internal function\\]\\s*:)(.*)/,\n        defaultLine: /^(#[0-9]+)\\s*(.*)/,\n        className: /([a-z0-9]+\\\\[a-z0-9\\\\]+(?:\\.\\.\\.)?)/gi,\n        filePath: /((?:[A-Z]:)?(?:[\\\\\\/][\\w\\.-_~@%]+)\\.(?:php|js|css|less|yaml|txt|ini))(\\(([0-9]+)\\)|:([0-9]+)|\\s|$)/gi,\n        staticCall: /::([^( ]+)\\(([^()]*|(?:[^(]*\\(.+\\)[^)]*))\\)/,\n        functionCall: /->([^(]+)\\(([^()]*|(?:[^(]*\\(.+\\)[^)]*))\\)/,\n        closureCall: /\\{closure\\}\\(([^()]*|(?:[^(]*\\(.+\\)[^)]*))\\)/\n    };\n\n    ExceptionBeautifier.extensions = [];\n\n    ExceptionBeautifier.prototype.init = function () {\n        var self = this,\n            markup;\n\n        ExceptionBeautifier.extensions.forEach(function (extension) {\n            if (typeof extension.onInit === 'function') {\n                extension.onInit(self);\n            }\n        });\n\n        markup = self.parseSource(self.$el.html(), self.$el.text());\n\n        self.$el\n            .addClass('plugin-exception-beautifier')\n            .empty()\n            .append(markup);\n    }\n\n    ExceptionBeautifier.prototype.parseSource = function (escapedSource, rawSource) {\n        var self = this,\n            source = escapedSource,\n            markup = {lines: []},\n            start = 0,\n            end;\n\n        /*\n         * We only heavily parse stacktrace messages.\n         * Standard messages are only applied a simple transform : newline to <br> and tab/spaces indentation to &nbsp;\n         */\n        if (source.indexOf('Stack trace:') < 0) {\n            source = '{exception-beautifier-message-container}{exception-beautifier-message}' + self.formatMessage(source) + '{/exception-beautifier-message}{/exception-beautifier-message-container}';\n        }\n        else {\n            end = source.indexOf('Stack trace:', start);\n            markup.message = source.substring(start, end);\n\n            start = source.indexOf('#', end);\n            while ((end = source.indexOf('#', start + 1)) > 0) {\n                markup.lines.push(self.parseLine(source.substring(start, end)));\n                start = end;\n            }\n\n            markup.lines.push(self.parseLine(source.substring(start)));\n\n            source = '{exception-beautifier-message-container}' +\n                '{exception-beautifier-message}' + self.formatMessage(markup.message) + '{/exception-beautifier-message}' +\n                '{/exception-beautifier-message-container}' +\n                '{exception-beautifier-stacktrace#div}';\n\n            markup.lines.forEach(function (line) {\n                source += '{exception-beautifier-stacktrace-line}' + self.formatStackTraceLine(line) + '{/exception-beautifier-stacktrace-line}';\n            });\n\n            source += '{/exception-beautifier-stacktrace#div}';\n\n            ExceptionBeautifier.extensions.forEach(function (extension) {\n                if (typeof extension.onParse === 'function') {\n                    extension.onParse(self);\n                }\n            });\n        }\n\n        markup = $(self.buildMarkup('{exception-beautifier-container}' + source + '{/exception-beautifier-container}'));\n\n        return self.finalizeMarkup(markup, escapedSource, rawSource);\n    }\n\n    ExceptionBeautifier.prototype.parseLine = function (str) {\n        var line = {},\n            matches;\n\n        if ((matches = str.match(ExceptionBeautifier.REGEX.phpline)) || (matches = str.match(ExceptionBeautifier.REGEX.artisan))) {\n            line.type = 'phpline';\n            line.number = $.trim(matches[1]);\n            line.file = $.trim(matches[2]);\n            line.lineNumber = $.trim(matches[3]);\n            line.function = $.trim(matches[4]);\n        }\n        else if (matches = str.match(ExceptionBeautifier.REGEX.internalLine)) {\n            line.type = 'internal';\n            line.number = $.trim(matches[1]);\n            line.internal = $.trim(matches[2]);\n            line.function = $.trim(matches[3]);\n        }\n        else if (matches = str.match(ExceptionBeautifier.REGEX.defaultLine)) {\n            line.type = 'default';\n            line.number = $.trim(matches[1]);\n            line.function = $.trim(matches[2]);\n        }\n\n        return line;\n    }\n\n\n    ExceptionBeautifier.prototype.formatMessage = function (str) {\n        var self = this,\n            jsonMatch,\n            messagePart,\n            detailsPart;\n\n        // Detect JSON details block appended after double newline\n        jsonMatch = str.match(/^([\\s\\S]*?)(\\r?\\n\\r?\\n)([\\[{][\\s\\S]*[\\]}]\\s*)$/);\n\n        if (jsonMatch) {\n            messagePart = self.formatLineCode(\n                jsonMatch[1]\n                    .replace(/^\\s+/, '')\n                    .replace(/\\r\\n|\\r|\\n/g, '{x-newline}')\n                    .replace(/\\t| {2}/g, '{x-tabulation}')\n            );\n\n            detailsPart = self.formatJsonDetails(jsonMatch[3]);\n\n            return messagePart + detailsPart;\n        }\n\n        return self.formatLineCode(\n            str\n                .replace(/^\\s+/, '')\n                .replace(/\\r\\n|\\r|\\n/g, '{x-newline}')\n                .replace(/\\t| {2}/g, '{x-tabulation}')\n        );\n    }\n\n    ExceptionBeautifier.prototype.formatJsonDetails = function (str) {\n        var decoded;\n\n        try {\n            decoded = JSON.parse(str.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\"));\n        }\n        catch (e) {\n            return '{x-newline}{x-newline}' + str\n                .replace(/\\r\\n|\\r|\\n/g, '{x-newline}')\n                .replace(/\\t| {2}/g, '{x-tabulation}');\n        }\n\n        return '{exception-beautifier-details#div}' +\n            this.buildJsonTree(decoded, 0) +\n            '{/exception-beautifier-details#div}';\n    }\n\n    ExceptionBeautifier.prototype.buildJsonTree = function (data, depth) {\n        var self = this,\n            result = '',\n            keys,\n            isArray = Array.isArray(data),\n            indent = new Array(depth + 1).join('{x-tabulation}{x-tabulation}');\n\n        if (data === null) {\n            return '{exception-beautifier-code}null{/exception-beautifier-code}';\n        }\n\n        if (typeof data === 'string') {\n            return '{exception-beautifier-string}&quot;' + data\n                .replace(/&/g, '&amp;')\n                .replace(/</g, '&lt;')\n                .replace(/>/g, '&gt;') + '&quot;{/exception-beautifier-string}';\n        }\n\n        if (typeof data === 'number') {\n            return '{exception-beautifier-number}' + data + '{/exception-beautifier-number}';\n        }\n\n        if (typeof data === 'boolean') {\n            return '{exception-beautifier-code}' + data + '{/exception-beautifier-code}';\n        }\n\n        if (typeof data !== 'object') {\n            return String(data);\n        }\n\n        keys = Object.keys(data);\n        if (keys.length === 0) {\n            return isArray ? '[]' : '{}';\n        }\n\n        result += (isArray ? '[' : '{') + '{x-newline}';\n\n        keys.forEach(function (key, index) {\n            var childIndent = indent + '{x-tabulation}{x-tabulation}';\n            result += childIndent;\n\n            if (!isArray) {\n                result += '{exception-beautifier-code}' + key + '{/exception-beautifier-code}: ';\n            }\n\n            result += self.buildJsonTree(data[key], depth + 1);\n\n            if (index < keys.length - 1) {\n                result += ',';\n            }\n\n            result += '{x-newline}';\n        });\n\n        result += indent + (isArray ? ']' : '}');\n\n        return result;\n    }\n\n    ExceptionBeautifier.prototype.formatFilePath = function (path, line) {\n        return '{exception-beautifier-file}' + path + '{/exception-beautifier-file}';\n    }\n\n    ExceptionBeautifier.prototype.formatStackTraceLine = function (line) {\n        var self = this;\n\n        if (line.function) {\n            line.function = self.formatLineCode(line.function);\n        }\n\n        switch (line.type) {\n            case 'phpline':\n                return '{exception-beautifier-stacktrace-line-number}' + line.number + '{/exception-beautifier-stacktrace-line-number}' +\n                    self.formatFilePath(line.file, line.lineNumber) +\n                    '{exception-beautifier-line-number}(' + line.lineNumber + '):{/exception-beautifier-line-number} ' +\n                    '{exception-beautifier-stacktrace-line-function}' + line.function + '{/exception-beautifier-stacktrace-line-function}';\n\n            case 'internal':\n                return '{exception-beautifier-stacktrace-line-number}' + line.number + '{/exception-beautifier-stacktrace-line-number}' +\n                    '{exception-beautifier-stacktrace-line-internal}' + line.internal + '{/exception-beautifier-stacktrace-line-internal}' +\n                    '{exception-beautifier-stacktrace-line-function}' + line.function + '{/exception-beautifier-stacktrace-line-function}';\n\n            case 'default':\n                return '{exception-beautifier-stacktrace-line-number}' + line.number + '{/exception-beautifier-stacktrace-line-number}' +\n                    '{exception-beautifier-stacktrace-line-function}' + line.function + '{/exception-beautifier-stacktrace-line-function}';\n        }\n\n        return '';\n    }\n\n    ExceptionBeautifier.prototype.formatLineCode = function (str) {\n        var self = this;\n\n        if (str.match(/^\\s*(call_user_func|spl_autoload_call)/)) {\n            str = str.replace(/^\\s*(?:call_user_func|spl_autoload_call)([^(]*)\\((.*)\\)/, function (str, suffix, parameters) {\n                return '{exception-beautifier-system-function}call_user_func' + suffix + '({/exception-beautifier-system-function}' +\n                    self.formatFunctionParameters(parameters) +\n                    '{exception-beautifier-system-function}){/exception-beautifier-system-function}'\n            });\n        }\n        else if (str.match(ExceptionBeautifier.REGEX.closureCall)) {\n            str = str.replace(ExceptionBeautifier.REGEX.closureCall, function (str, parameters) {\n                return '{exception-beautifier-function}{closure}({/exception-beautifier-function}' +\n                    self.formatFunctionParameters(parameters) +\n                    '{exception-beautifier-function}){/exception-beautifier-function}'\n            });\n        }\n        else if (str.match(ExceptionBeautifier.REGEX.functionCall)) {\n            str = str.replace(ExceptionBeautifier.REGEX.functionCall, function (str, functionName, parameters) {\n                return '{exception-beautifier-function}→' + functionName + '({/exception-beautifier-function}' +\n                    self.formatFunctionParameters(parameters) +\n                    '{exception-beautifier-function}){/exception-beautifier-function}'\n            });\n        }\n        else if (str.match(ExceptionBeautifier.REGEX.staticCall)) {\n            str = str.replace(ExceptionBeautifier.REGEX.staticCall, function (str, functionName, parameters) {\n                return '{exception-beautifier-function}::' + functionName + '({/exception-beautifier-function}' +\n                    self.formatFunctionParameters(parameters) +\n                    '{exception-beautifier-function}){/exception-beautifier-function}'\n            });\n        }\n\n        str = str.replace(ExceptionBeautifier.REGEX.filePath, function (str, path, line, lineNumber, altLineNumber) {\n            return self.formatFilePath(path, (lineNumber || '') + (altLineNumber || '')) +\n                ($.trim(line).length > 0 ? ('{exception-beautifier-line-number}' + line + '{/exception-beautifier-line-number}') : ' ');\n        })\n\n        str = str.replace(ExceptionBeautifier.REGEX.className, function (str, name) {\n            return '{exception-beautifier-class}' + name + '{/exception-beautifier-class}';\n        })\n\n        return str;\n    }\n\n    ExceptionBeautifier.prototype.formatFunctionParameters = function (parameters) {\n        return parameters\n            .replace(/^([0-9]+)|([^a-z\\\\])([0-9]+)$|^([0-9]+)([^a-z\\\\])|([^a-z\\\\])([0-9]+)([^a-z\\\\])/g, '$2$6{exception-beautifier-number}$1$3$4$7{/exception-beautifier-number}$5$8')\n            .replace(/^Array$|([^a-z\\\\])Array$|^Array([^a-z\\\\])|([^a-z\\\\])Array([^a-z\\\\])/g, '$1$3{exception-beautifier-code}Array{/exception-beautifier-code}$2$4')\n            .replace(/^Closure$|(\\()Closure(\\))/g, '$1{exception-beautifier-code}Closure{/exception-beautifier-code}$2')\n            .replace(/Object\\(([^)]+)\\)/g, '{exception-beautifier-code}Object({/exception-beautifier-code}$1{exception-beautifier-code}){/exception-beautifier-code}')\n            .replace(/\"((?:\\\\.|[^\"])*)\"/g, '{exception-beautifier-string}\"$1\"{/exception-beautifier-string}')\n            .replace(/'((?:\\\\.|[^'])*)'/g, '{exception-beautifier-string}\\'$1\\'{/exception-beautifier-string}');\n    }\n\n    ExceptionBeautifier.prototype.buildMarkup = function (str) {\n        var self = this,\n            start = str.indexOf('{exception-beautifier-'),\n            cssOffset = 'exception-beautifier-'.length,\n            end, endtag, tmp, matches, tag, html, css, attrs, markup = '';\n\n        if (start >= 0) {\n            if (start > 0) {\n                markup += self.buildMarkup(str.substring(0, start));\n            }\n\n            while (start >= 0) {\n                end = endtag = str.indexOf('}', start);\n\n                if ((tmp = str.indexOf(' ', start)) >= 0) {\n                    end = Math.min(end, tmp);\n                }\n\n                tag = str.substring(start + 1, end);\n                end = str.indexOf('{/' + tag + '}', start);\n                start = str.indexOf('}', start);\n\n                if (end < 0) {\n                    throw 'Markup error tag {' + tag + '} not closed';\n                }\n\n                html = 'span';\n                attrs = '';\n                css = tag;\n\n                if (matches = tag.match(/(.+)#([a-z]+)$/)) {\n                    css = matches[1];\n                    html = matches[2];\n                }\n\n                css = 'beautifier-' + css.substr(cssOffset);\n\n                if (tmp >= 0 && tmp < endtag) {\n                    attrs = str.substring(tmp, endtag);\n                }\n\n                markup += '<' + html + ' class=\"' + css + '\"' + attrs + '>';\n                markup += self.buildMarkup(str.substring(start + 1, end));\n                markup += '</' + html + '>';\n\n                end = end + ('{/' + tag + '}').length;\n                start = str.indexOf('{exception-beautifier-', end);\n\n                if (start > end || start < 0) {\n                    markup += self.buildMarkup(str.substring(end, start < 0 ? undefined : start));\n                }\n            }\n        }\n        else {\n            // Allow HTML entities\n            str = str.replace(/&amp;([^\\s&;]+?);/g, '&$1;');\n\n            markup += str\n                .replace(/\\{x-newline\\}/g, '<br>')\n                .replace(/\\{x-tabulation\\}/g, '&nbsp;&nbsp;');\n        }\n\n        return markup;\n    }\n\n    ExceptionBeautifier.prototype.finalizeMarkup = function (markup, escapedSource, rawSource) {\n        var stacktrace,\n            messageContainer,\n            tabs,\n            iframe;\n\n        markup.find('.beautifier-file').each(function () {\n            $(this).find('.beautifier-class').each(function () {\n                var $el = $(this);\n                $el.replaceWith($el.text());\n            });\n        });\n\n        markup.find('.beautifier-file+.beautifier-line-number').each(function () {\n            var $el = $(this);\n            $el.appendTo($el.prev());\n        });\n\n        messageContainer = markup.find('.beautifier-message-container');\n        stacktrace = markup.find('.beautifier-stacktrace').addClass('hidden');\n\n        if (!!stacktrace.length) {\n            $('<a class=\"beautifier-toggle-stacktrace\" href=\"javascript:;\"><span>' + $.oc.lang.get('eventlog.show_stacktrace') + '</span></a>')\n                .appendTo(messageContainer)\n                .on('click', function (event) {\n                    event.preventDefault();\n                    event.stopPropagation();\n\n                    var $el = $(this);\n                    $('.beautifier-stacktrace', markup).toggleClass('hidden');\n                    $el.hide();\n                });\n        }\n\n        tabs = $('<div class=\"control-tabs content-tabs tabs-inset\">' +\n            '<ul class=\"nav nav-tabs\">' +\n            '<li class=\"active\"><a href=\"#beautifier-tab-formatted\">' + $.oc.lang.get('eventlog.tabs.formatted') + '</a></li>' +\n            '<li><a href=\"#beautifier-tab-raw\">' + $.oc.lang.get('eventlog.tabs.raw') + '</a></li>' +\n            '</ul><div class=\"tab-content\">' +\n            '<div class=\"tab-pane nohide pane-inset active\" id=\"beautifier-tab-formatted\"></div>' +\n            '<div class=\"tab-pane nohide pane-inset\" id=\"beautifier-tab-raw\"></div>' +\n            '</div></div>');\n\n        // Rude check if this is a mail message\n        if (rawSource.includes('Message-ID:') && rawSource.includes('Subject:') && rawSource.includes('From:') && rawSource.includes('To:')) {\n            markup = rawSource.trim().replace(/(?:^|<\\/html>)[^]*?(?:<html|$)/g, function(m) {\n                return m.replace(/\\r\\n|\\r|\\n/g, '<br>').replace(/ {2}/g, '&nbsp;&nbsp;')\n            });\n\n            iframe = $('<iframe id=\"#beautifier-tab-formatted-iframe\" sandbox=\"\" style=\"width: 100%; height: 500px; padding: 0\" frameborder=\"0\"></iframe>');\n        }\n\n        // Build tab content\n        if (iframe) {\n            tabs.find('#beautifier-tab-formatted').append(iframe);\n            iframe.wrap('<div class=\"beautifier-formatted-content\" />');\n            iframe.on('load', function() {\n                var $html = iframe.contents().find('html');\n                $html.html(markup);\n                $html.css({\n                    'font-family': '-apple-system,BlinkMacSystemFont,\"Segoe UI\",Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\"',\n                    'font-size': '14px',\n                    'color': '#74787e'\n                });\n                iframe.height($html.height() + 1);\n            });\n        }\n        else {\n            tabs.find('#beautifier-tab-formatted').append(markup);\n        }\n\n        tabs.find('#beautifier-tab-raw').append('<div class=\"beautifier-raw-content\">' + escapedSource.trim().replace(/\\r\\n|\\r|\\n/g, '<br>').replace(/ {2}/g, '&nbsp;&nbsp;') + '</div>');\n\n        tabs.ocTab({\n            closable: false\n        });\n\n        return tabs;\n    }\n\n    // EXCEPTION BEAUTIFIER PLUGIN DEFINITION\n    // ============================\n\n    $.fn.exceptionBeautifier = function (option) {\n        var args = arguments,\n            result;\n\n        this.each(function () {\n            var $this = $(this)\n            var data = $this.data('oc.exceptionBeautifier')\n            var options = $.extend({}, ExceptionBeautifier.DEFAULTS, $this.data(), typeof option == 'object' && option)\n            if (!data) $this.data('oc.exceptionBeautifier', (data = new ExceptionBeautifier(this, options)))\n            if (typeof option == 'string') result = data[option].call($this)\n            if (typeof result != 'undefined') return false\n        });\n\n        return result ? result : this;\n    }\n\n    $.fn.exceptionBeautifier.Constructor = ExceptionBeautifier;\n\n    $(document).render(function () {\n        $('[data-control=\"exception-beautifier\"]').exceptionBeautifier();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/system/assets/js/pages/eventlogs.beautifier.links.js",
    "content": "/*\n * Exception Beautifier plugin - Links extension\n */\n+function ($) {\n    \"use strict\";\n\n    var ExceptionBeautifier = $.fn.exceptionBeautifier.Constructor\n\n    ExceptionBeautifier.EDITORS = {\n        vscode: {scheme: 'vscode://file/%file&line=%line', name: 'VSCode (vscode://)'},\n        subl: {scheme: 'subl://open?url=file://%file&line=%line', name: 'Sublime (subl://)'},\n        txmt: {scheme: 'txmt://open/?url=file://%file&line=%line', name: 'TextMate (txmt://)'},\n        mvim: {scheme: 'mvim://open/?url=file://%file&line=%line', name: 'MacVim (mvim://)'},\n        phpstorm: {scheme: 'phpstorm://open?file=%file&line=%line', name: 'PhpStorm (phpstorm://)'},\n        editor: {scheme: 'editor://open/?file=%file&line=%line', name: 'Custom (editor://)'}\n    }\n\n    ExceptionBeautifier.REGEX.editor = /idelink:\\/\\/([^#]+)&([0-9]+)?/\n    ExceptionBeautifier.LINKER_POPUP_CONTENT = null\n\n    ExceptionBeautifier.extensions.push({\n        onInit: function (exceptionBeautfier) {\n            exceptionBeautfier.initEditorPopup()\n        },\n        onParse: function (exceptionBeautfier) {\n            exceptionBeautfier.$el.on('click', 'a[data-href]', function () {\n                exceptionBeautfier.openWithEditor($(this).data('href'))\n            })\n        }\n    })\n\n    ExceptionBeautifier.prototype.initEditorPopup = function () {\n        if (!ExceptionBeautifier.LINKER_POPUP_CONTENT) {\n            var title = $.oc.lang.get('eventlog.editor.title'),\n                description = $.oc.lang.get('eventlog.editor.description'),\n                openWith = $.oc.lang.get('eventlog.editor.openWith'),\n                rememberChoice = $.oc.lang.get('eventlog.editor.remember_choice'),\n                open = $.oc.lang.get('eventlog.editor.open'),\n                cancel = $.oc.lang.get('eventlog.editor.cancel'),\n                popup = $('                                                                                                \\\n<div>                                                                                                                      \\\n    <div class=\"modal-header\">                                                                                             \\\n        <h4 class=\"modal-title\">' + title + '</h4>                                                                         \\\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"modal\" aria-hidden=\"true\"></button>                          \\\n    </div>                                                                                                                 \\\n    <div class=\"modal-body\">                                                                                               \\\n        <p>' + description + '</p>                                                                                         \\\n        <div class=\"form-group\">                                                                                           \\\n            <label class=\"form-label\">' + openWith + '</label>                                                         \\\n            <select class=\"form-control\" name=\"select-exception-link-editor\"></select>                                     \\\n        </div>                                                                                                             \\\n        <div class=\"form-group\">                                                                                           \\\n            <div class=\"form-check\">                                                                                       \\\n                <input class=\"form-check-input\" name=\"checkbox\" value=\"1\" type=\"checkbox\" id=\"editor-remember-choice\" />   \\\n                <label class=\"form-check-label\" for=\"editor-remember-choice\">' + rememberChoice + '</label>                \\\n            </div>                                                                                                         \\\n        </div>                                                                                                             \\\n    </div>                                                                                                                 \\\n    <div class=\"modal-footer\">                                                                                             \\\n        <button type=\"button\" class=\"btn btn-primary\" data-action=\"submit\" data-dismiss=\"modal\">' + open + '</button>      \\\n        <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"popup\">' + cancel + '</button>                         \\\n    </div>                                                                                                                 \\\n</div>'\n                ),\n                select = $('select', popup)\n\n            for (var key in ExceptionBeautifier.EDITORS) {\n                if (ExceptionBeautifier.EDITORS.hasOwnProperty(key)) {\n                    select.append('<option value=\"' + key + '\">' + $.oc.escapeHtmlString(ExceptionBeautifier.EDITORS[key].name) + '</option>')\n                }\n            }\n\n            ExceptionBeautifier.LINKER_POPUP_CONTENT = popup.html()\n        }\n    }\n\n    ExceptionBeautifier.prototype.openWithEditor = function (link) {\n        var self = this,\n            matches,\n            open = function (value) {\n                window.open(link.replace(\n                    ExceptionBeautifier.REGEX.editor,\n                    ExceptionBeautifier.EDITORS[value].scheme\n                        .replace(/%file/, matches[1])\n                        .replace(/%line/, matches[2])\n                ), '_self')\n            }\n\n        if (matches = link.match(ExceptionBeautifier.REGEX.editor)) {\n            if (window.sessionStorage && window.sessionStorage['oc-exception-beautifier-editor']) {\n                open(window.sessionStorage['oc-exception-beautifier-editor'])\n            } else {\n                $.popup({content: ExceptionBeautifier.LINKER_POPUP_CONTENT})\n                    .on('shown.oc.popup', function (event, source, popup) {\n                        var select = $('select', popup)\n\n                        self.initCustomSelect(select)\n\n                        $('[data-action=\"submit\"]', popup).on('click', function () {\n                            if ($('#editor-remember-choice').prop('checked') && window.sessionStorage) {\n                                window.sessionStorage['oc-exception-beautifier-editor'] = select.val()\n                            }\n\n                            open(select.val())\n                        })\n                    })\n                    .on('hide.oc.popup', function (event, source, popup) {\n                        $('[data-action]', popup).off('click')\n                    })\n            }\n        }\n    }\n\n    ExceptionBeautifier.prototype.formatFilePath = function (path, line) {\n        var self = this\n\n        return '{exception-beautifier-file#a href=\"javascript:\" data-href=\"idelink://' + encodeURIComponent(self.rewritePath(path)) + '&' + line + '\"}' + path + '{/exception-beautifier-file#a}'\n    }\n\n    ExceptionBeautifier.prototype.rewritePath = function (path) {\n        return path.replace(/\\\\/g, '/')\n    }\n\n    ExceptionBeautifier.prototype.initCustomSelect = function (select) {\n        if ('ontouchstart' in window || navigator.maxTouchPoints > 0) {\n            return\n        }\n\n        var options = {\n            minimumResultsForSearch: Infinity,\n            escapeMarkup: function (m) {\n                return m\n            }\n        }\n\n        select.select2(options)\n    }\n\n}(window.jQuery)"
  },
  {
    "path": "modules/system/assets/js/pages/mailbrandsettings.js",
    "content": "/*\n * MailBrandSettings page\n *\n * Config:\n * - previewTemplateId: ''\n */\n'use strict';\n\noc.registerControl('mailpreview', class extends oc.ControlBase {\n    connect() {\n        this.createPreviewContainer();\n\n        // Change color picker\n        $(document).on('change', '.field-colorpicker', this.proxy(this.onChangeColorPicker));\n\n        // Auto adjust height\n        $(document).on('render', this.proxy(this.adjustPreviewHeight));\n        $(window).on('resize', this.proxy(this.adjustPreviewHeight));\n\n        setTimeout(function() {\n            $(window).trigger('resize');\n        }, 250);\n    }\n\n    disconnect() {\n        // Change color picker\n        $(document).off('change', '.field-colorpicker', this.proxy(this.onChangeColorPicker));\n\n        // Auto adjust height\n        $(document).off('render', this.proxy(this.adjustPreviewHeight));\n        $(window).off('resize', this.proxy(this.adjustPreviewHeight));\n    }\n\n    createPreviewContainer() {\n        var previewTemplate = document.querySelector('#' + (this.config.previewTemplateId || 'selector'));\n        if (!previewTemplate) {\n            console.error('Missing preview template html');\n            return;\n        }\n\n        var content = previewTemplate.innerHTML;\n        var previewIframe = this.previewIframe = document.createElement('iframe');\n\n        this.updatePreviewContent(content);\n\n        previewIframe.style.width = '100%';\n        previewIframe.setAttribute('frameborder', 0);\n        previewIframe.setAttribute('id', this.element.id);\n        previewIframe.onload = this.adjustPreviewHeight.bind(this);\n\n        this.element.appendChild(previewIframe);\n\n        return previewIframe;\n    }\n\n    onChangeColorPicker() {\n        var self = this;\n        $('#Form').request('onUpdateSampleMessage').done(function(data) {\n            self.updatePreviewContent(data.previewHtml);\n        });\n    }\n\n    updatePreviewContent(content) {\n        'srcdoc' in this.previewIframe\n            ? this.previewIframe.srcdoc = content\n            : this.previewIframe.src = 'data:text/html;charset=UTF-8,' + content;\n    }\n\n    adjustPreviewHeight() {\n        // Fudge factor for retina displays\n        var offset = 1;\n        this.previewIframe.style.height = (this.previewIframe.contentWindow.document.getElementsByTagName('body')[0].scrollHeight) +\n            offset +\n            'px';\n    }\n});\n"
  },
  {
    "path": "modules/system/assets/js/pages/market.details.js",
    "content": "/*\n * Details page\n */\n\n+function ($) { \"use strict\";\n\n    var UpdateDetails = function () {\n        this.init()\n    }\n\n    UpdateDetails.prototype.init = function() {\n\n        $(document).ready(function() {\n            $('.plugin-details-content pre').addClass('prettyprint')\n            prettyPrint()\n        })\n\n    }\n\n    if ($.oc === undefined)\n        $.oc = {}\n\n    $.oc.updateDetails = new UpdateDetails;\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/system/assets/js/pages/market.installprocess.js",
    "content": "/**\n * Installs class\n *\n * Dependencies:\n * - Waterfall plugin (waterfall.js)\n */\n\n+function ($) { \"use strict\";\n\n    var InstallProcess = function () {\n\n        // Init\n        this.init();\n    }\n\n    InstallProcess.prototype.init = function() {\n        var self = this;\n\n        this.dataSet = {};\n\n        $(document).ready(function() {\n            self.bindSearch('#pluginSearchInput');\n            self.bindSearch('#themeSearchInput');\n\n            self.bindBrowse('#browsePlugins', '#browsePluginsPagination');\n            self.bindBrowse('#browseThemes', '#browseThemesPagination');\n            self.bindManageProject('#manageProject', '#manageProjectLoader');\n        });\n    }\n\n    //\n    // Searching\n    //\n\n    InstallProcess.prototype.bindSearch = function(el) {\n        var $el = $(el),\n            $form = $el.closest('form'),\n            searchType = $el.data('searchType');\n\n        if ($el.length == 0) {\n            return;\n        }\n\n        // Template for search results\n        var template = [\n            '<div class=\"product-details\">',\n            '<div class=\"product-image\"><img src=\"{{image}}\" alt=\"\"></div>',\n            '<div class=\"product-name \">{{name}} by {{author}}</div>',\n            '<div class=\"product-description text-overflow\">{{description}}</div>',\n            '</div>'\n        ].join('');\n\n        // This operation parses the template and caches\n        // the resulting token tree. All future calls to\n        // mustache.render can now skip the parsing step.\n        Mustache.parse(template);\n\n        var mTemplate = function (view, partials) {\n            return Mustache.render(template, view, partials);\n        }\n\n        // Source for product search\n        var engine = new Bloodhound({\n            name: 'products',\n            method: 'POST',\n            remote: {\n                url: window.location.pathname + '?search=' + searchType + '&query=%QUERY',\n                ajax: {\n                    beforeSend: function() {\n                        $('.icon', $form).hide()\n                        $('.icon.loading', $form).show()\n                        $el.data('searchReady', false)\n                    },\n                    complete: function() {\n                        $('.icon', $form).show()\n                        $('.icon.loading', $form).hide()\n                        $el.data('searchReady', true)\n                    }\n                }\n            },\n            datumTokenizer: function(d) {\n                return Bloodhound.tokenizers.whitespace(d.val)\n            },\n            queryTokenizer: Bloodhound.tokenizers.whitespace,\n            limit: 5\n        });\n\n        engine.initialize();\n\n        /*\n         * Bind autocomplete to search field\n         */\n        $(el)\n            .typeahead(null, {\n                displayKey: 'code',\n                source: engine.ttAdapter(),\n                minLength: 3,\n                templates: {\n                    suggestion: mTemplate\n                }\n            })\n            .on('typeahead:opened', function(){\n                $(el + ' .tt-dropdown-menu').css('width', $(el).width() + 'px')\n            })\n            .on('typeahead:selected', function(object, datum){\n                $form.submit()\n            })\n            .on('keypress', function(e) {\n                // ENTER key\n                if (e.keyCode == 13) {\n                    $form.submit();\n                }\n            });\n    }\n\n    InstallProcess.prototype.searchSubmit = function(el) {\n        var\n            $el = $(el),\n            $input = $el.find('.product-search-input.tt-input:first');\n\n        if (!$input.data('searchReady')) {\n            return;\n        }\n\n        $el.request('onSelectProduct');\n\n        $input.typeahead('val', '');\n    }\n\n    //\n    // Manage Project\n    //\n\n    InstallProcess.prototype.bindManageProject = function(el, loaderEl) {\n        var self = this,\n            $el = $(el),\n            $loaderEl = $(loaderEl),\n            handler = $el.data('handler');\n\n        if (!handler) {\n            return;\n        }\n\n        $.request(handler).done(function(data) {\n            var result = data;\n\n            $loaderEl.hide();\n            $el.show();\n\n            if (!Array.isArray(result.products) || !result.products.length) {\n                return;\n            }\n\n            $el.empty();\n            self.renderBrowse(el, result.products);\n        });\n    }\n\n    //\n    // Browse Products\n    //\n\n    InstallProcess.prototype.bindBrowse = function(el, elPager) {\n        var self = this,\n            handler = $(el).data('handler'),\n            requestData = { type: $(el).data('view-type') };\n\n        $.request(handler, {\n            data: requestData\n        }).done(function(data) {\n            var result = data.result;\n\n            if (!Array.isArray(result.data)) {\n                return;\n            }\n\n            self.renderBrowse(el, result.data);\n            self.renderPagination(elPager, result);\n        });\n    }\n\n    InstallProcess.prototype.renderBrowse = function(el, browseProducts) {\n        var self = this,\n            $el = $(el),\n            partialView = $(el).data('view');\n\n        $.each(browseProducts, function(index, product) {\n            self.renderPartial($el, partialView, product, { append:true });\n        });\n    }\n\n    InstallProcess.prototype.renderPagination = function(el, result) {\n        var self = this,\n            $el = $(el),\n            partialView = $(el).data('view');\n\n        var data = {\n            pageCurrent: result.current_page,\n            pageCurrentGt1: result.current_page > 1,\n            pageCurrentMinus1: result.current_page - 1,\n            pageCurrentPlus1: result.current_page + 1,\n            hasMorePages: result.current_page < result.last_page\n        };\n\n        self.renderPartial($el, partialView, data);\n    }\n\n    //\n    // Helpers\n    //\n\n    InstallProcess.prototype.renderPartial = function($el, name, data, options) {\n        var container = $el,\n            template = $('[data-partial=\"' + name + '\"]'),\n            contents = Mustache.render(template.html(), data);\n\n        options = $.extend(true, {\n            append: false\n        }, options);\n\n        if (options.append) {\n            container.append(contents);\n        }\n        else {\n            container.html(contents);\n        }\n    }\n\n    if ($.oc === undefined) {\n        $.oc = {};\n    }\n\n    $.oc.installProcess = new InstallProcess;\n\n}(window.jQuery);\n\n\n/*!\n * typeahead.js 0.10.1\n * https://github.com/twitter/typeahead.js\n * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT\n */\n\n!function(a){var b={isMsie:function(){return/(msie|trident)/i.test(navigator.userAgent)?navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2]:!1},isBlankString:function(a){return!a||/^\\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\")},isString:function(a){return\"string\"==typeof a},isNumber:function(a){return\"number\"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return\"undefined\"==typeof a},bind:a.proxy,each:function(b,c){function d(a,b){return c(b,a)}a.each(b,d)},map:a.map,filter:a.grep,every:function(b,c){var d=!0;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?void 0:!1}),!!d):d},some:function(b,c){var d=!1;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?!1:void 0}),!!d):d},mixin:a.extend,getUniqueId:function(){var a=0;return function(){return a++}}(),templatify:function(b){function c(){return String(b)}return a.isFunction(b)?b:c},defer:function(a){setTimeout(a,0)},debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},throttle:function(a,b){var c,d,e,f,g,h;return g=0,h=function(){g=new Date,e=null,f=a.apply(c,d)},function(){var i=new Date,j=b-(i-g);return c=this,d=arguments,0>=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},noop:function(){}},c=\"0.10.1\",d=function(){function a(a){this.maxSize=a||100,this.size=0,this.hash={},this.list=new c}function c(){this.head=this.tail=null}function d(a,b){this.key=a,this.val=b,this.prev=this.next=null}return b.mixin(a.prototype,{set:function(a,b){var c,e=this.list.tail;this.size>=this.maxSize&&(this.list.remove(e),delete this.hash[e.key]),(c=this.hash[a])?(c.val=b,this.list.moveToFront(c)):(c=new d(a,b),this.list.add(c),this.hash[a]=c,this.size++)},get:function(a){var b=this.hash[a];return b?(this.list.moveToFront(b),b.val):void 0}}),b.mixin(c.prototype,{add:function(a){this.head&&(a.next=this.head,this.head.prev=a),this.head=a,this.tail=this.tail||a},remove:function(a){a.prev?a.prev.next=a.next:this.head=a.next,a.next?a.next.prev=a.prev:this.tail=a.prev},moveToFront:function(a){this.remove(a),this.add(a)}}),a}(this),e=function(){function a(a){this.prefix=[\"__\",a,\"__\"].join(\"\"),this.ttlKey=\"__ttl__\",this.keyMatcher=new RegExp(\"^\"+this.prefix)}function c(){return(new Date).getTime()}function d(a){return JSON.stringify(b.isUndefined(a)?null:a)}function e(a){return JSON.parse(a)}var f,g;try{f=window.localStorage,f.setItem(\"~~~\",\"!\"),f.removeItem(\"~~~\")}catch(h){f=null}return g=f&&window.JSON?{_prefix:function(a){return this.prefix+a},_ttlKey:function(a){return this._prefix(a)+this.ttlKey},get:function(a){return this.isExpired(a)&&this.remove(a),e(f.getItem(this._prefix(a)))},set:function(a,e,g){return b.isNumber(g)?f.setItem(this._ttlKey(a),d(c()+g)):f.removeItem(this._ttlKey(a)),f.setItem(this._prefix(a),d(e))},remove:function(a){return f.removeItem(this._ttlKey(a)),f.removeItem(this._prefix(a)),this},clear:function(){var a,b,c=[],d=f.length;for(a=0;d>a;a++)(b=f.key(a)).match(this.keyMatcher)&&c.push(b.replace(this.keyMatcher,\"\"));for(a=c.length;a--;)this.remove(c[a]);return this},isExpired:function(a){var d=e(f.getItem(this._ttlKey(a)));return b.isNumber(d)&&c()>d?!0:!1}}:{get:b.noop,set:b.noop,remove:b.noop,clear:b.noop,isExpired:b.noop},b.mixin(a.prototype,g),a}(),f=function(){function c(b){b=b||{},this._send=b.transport?e(b.transport):a.ajax,this._get=b.rateLimiter?b.rateLimiter(this._get):this._get}function e(c){return function(d,e){function f(a){b.defer(function(){h.resolve(a)})}function g(a){b.defer(function(){h.reject(a)})}var h=a.Deferred();return c(d,e,f,g),h}}var f=0,g={},h=6,i=new d(10);return c.setMaxPendingRequests=function(a){h=a},c.resetCache=function(){i=new d(10)},b.mixin(c.prototype,{_get:function(a,b,c){function d(b){c&&c(b),i.set(a,b)}function e(){f--,delete g[a],k.onDeckRequestArgs&&(k._get.apply(k,k.onDeckRequestArgs),k.onDeckRequestArgs=null)}var j,k=this;(j=g[a])?j.done(d):h>f?(f++,g[a]=this._send(a,b).done(d).always(e)):this.onDeckRequestArgs=[].slice.call(arguments,0)},get:function(a,c,d){var e;return b.isFunction(c)&&(d=c,c={}),(e=i.get(a))?b.defer(function(){d&&d(e)}):this._get(a,c,d),!!e}}),c}(),g=function(){function c(b){b=b||{},b.datumTokenizer&&b.queryTokenizer||a.error(\"datumTokenizer and queryTokenizer are both required\"),this.datumTokenizer=b.datumTokenizer,this.queryTokenizer=b.queryTokenizer,this.datums=[],this.trie=e()}function d(a){return a=b.filter(a,function(a){return!!a}),a=b.map(a,function(a){return a.toLowerCase()})}function e(){return{ids:[],children:{}}}function f(a){for(var b={},c=[],d=0;d<a.length;d++)b[a[d]]||(b[a[d]]=!0,c.push(a[d]));return c}function g(a,b){function c(a,b){return a-b}var d=0,e=0,f=[];for(a=a.sort(c),b=b.sort(c);d<a.length&&e<b.length;)a[d]<b[e]?d++:a[d]>b[e]?e++:(f.push(a[d]),d++,e++);return f}return b.mixin(c.prototype,{bootstrap:function(a){this.datums=a.datums,this.trie=a.trie},add:function(a){var c=this;a=b.isArray(a)?a:[a],b.each(a,function(a){var f,g;f=c.datums.push(a)-1,g=d(c.datumTokenizer(a)),b.each(g,function(a){var b,d,g;for(b=c.trie,d=a.split(\"\");g=d.shift();)b=b.children[g]||(b.children[g]=e()),b.ids.push(f)})})},get:function(a){var c,e,h=this;return c=d(this.queryTokenizer(a)),b.each(c,function(a){var b,c,d,f;if(e&&0===e.length)return!1;for(b=h.trie,c=a.split(\"\");b&&(d=c.shift());)b=b.children[d];return b&&0===c.length?(f=b.ids.slice(0),void(e=e?g(e,f):f)):(e=[],!1)}),e?b.map(f(e),function(a){return h.datums[a]}):[]},serialize:function(){return{datums:this.datums,trie:this.trie}}}),c}(),h=function(){function d(a){var c=a.local||null;return b.isFunction(c)&&(c=c.call(null)),c}function e(d){var e,f;return f={url:null,thumbprint:\"\",ttl:864e5,filter:null,ajax:{}},(e=d.prefetch||null)&&(e=b.isString(e)?{url:e}:e,e=b.mixin(f,e),e.thumbprint=c+e.thumbprint,e.ajax.type=e.ajax.type||\"GET\",e.ajax.dataType=e.ajax.dataType||\"json\",!e.url&&a.error(\"prefetch requires url to be set\")),e}function f(c){function d(a){return function(c){return b.debounce(c,a)}}function e(a){return function(c){return b.throttle(c,a)}}var f,g;return g={url:null,wildcard:\"%QUERY\",replace:null,rateLimitBy:\"debounce\",rateLimitWait:300,send:null,filter:null,ajax:{}},(f=c.remote||null)&&(f=b.isString(f)?{url:f}:f,f=b.mixin(g,f),f.rateLimiter=/^throttle$/i.test(f.rateLimitBy)?e(f.rateLimitWait):d(f.rateLimitWait),f.ajax.type=f.ajax.type||\"GET\",f.ajax.dataType=f.ajax.dataType||\"json\",delete f.rateLimitBy,delete f.rateLimitWait,!f.url&&a.error(\"remote requires url to be set\")),f}return{local:d,prefetch:e,remote:f}}(),i=(window.Bloodhound=function(){function c(b){b&&(b.local||b.prefetch||b.remote)||a.error(\"one of local, prefetch, or remote is required\"),this.limit=b.limit||5,this.sorter=d(b.sorter),this.dupDetector=b.dupDetector||i,this.local=h.local(b),this.prefetch=h.prefetch(b),this.remote=h.remote(b),this.cacheKey=this.prefetch?this.prefetch.cacheKey||this.prefetch.url:null,this.index=new g({datumTokenizer:b.datumTokenizer,queryTokenizer:b.queryTokenizer}),this.storage=this.cacheKey?new e(this.cacheKey):null}function d(a){function c(b){return b.sort(a)}function d(a){return a}return b.isFunction(a)?c:d}function i(){return!1}var j;return j={data:\"data\",protocol:\"protocol\",thumbprint:\"thumbprint\"},c.tokenizers={whitespace:function(a){return a.split(/\\s+/)},nonword:function(a){return a.split(/\\W+/)}},b.mixin(c.prototype,{_loadPrefetch:function(b){function c(a){var c;c=b.filter?b.filter(a):a,f.add(c),f._saveToStorage(f.index.serialize(),b.thumbprint,b.ttl)}var d,e,f=this;return(d=this._readFromStorage(b.thumbprint))?(this.index.bootstrap(d),e=a.Deferred().resolve()):e=a.ajax(b.url,b.ajax).done(c),e},_getFromRemote:function(a,b){function c(a){var c=f.remote.filter?f.remote.filter(a):a;b(c)}var d,e,f=this;return a=a||\"\",e=encodeURIComponent(a),d=this.remote.replace?this.remote.replace(this.remote.url,a):this.remote.url.replace(this.remote.wildcard,e),this.transport.get(d,this.remote.ajax,c)},_saveToStorage:function(a,b,c){this.storage&&(this.storage.set(j.data,a,c),this.storage.set(j.protocol,location.protocol,c),this.storage.set(j.thumbprint,b,c))},_readFromStorage:function(a){var b,c={};return this.storage&&(c.data=this.storage.get(j.data),c.protocol=this.storage.get(j.protocol),c.thumbprint=this.storage.get(j.thumbprint)),b=c.thumbprint!==a||c.protocol!==location.protocol,c.data&&!b?c.data:null},initialize:function(){function b(){d.add(d.local)}var c,d=this;return c=this.prefetch?this._loadPrefetch(this.prefetch):a.Deferred().resolve(),this.local&&c.done(b),this.transport=this.remote?new f(this.remote):null,this.initialize=function(){return c.promise()},c.promise()},add:function(a){this.index.add(a)},get:function(a,c){function d(a){var d=e.slice(0);b.each(a,function(a){var c;return c=b.some(d,function(b){return f.dupDetector(a,b)}),!c&&d.push(a),d.length<f.limit}),c&&c(f.sorter(d))}var e,f=this,g=!1;e=this.index.get(a),e=this.sorter(e).slice(0,this.limit),e.length<this.limit&&this.transport&&(g=this._getFromRemote(a,d)),!g&&c&&c(e)},ttAdapter:function(){return b.bind(this.get,this)}}),c}(),{wrapper:'<span class=\"twitter-typeahead\"></span>',dropdown:'<span class=\"tt-dropdown-menu\"></span>',dataset:'<div class=\"tt-dataset-%CLASS%\"></div>',suggestions:'<span class=\"tt-suggestions\"></span>',suggestion:'<div class=\"tt-suggestion\">%BODY%</div>'}),j={wrapper:{position:\"relative\",display:\"inline-block\"},hint:{position:\"absolute\",top:\"0\",left:\"0\",borderColor:\"transparent\",boxShadow:\"none\"},input:{position:\"relative\",verticalAlign:\"top\",backgroundColor:\"transparent\"},inputWithNoHint:{position:\"relative\",verticalAlign:\"top\"},dropdown:{position:\"absolute\",top:\"100%\",left:\"0\",zIndex:\"100\",display:\"none\"},suggestions:{display:\"block\"},suggestion:{whiteSpace:\"nowrap\",cursor:\"pointer\"},suggestionChild:{whiteSpace:\"normal\"},ltr:{left:\"0\",right:\"auto\"},rtl:{left:\"auto\",right:\" 0\"}};b.isMsie()&&b.mixin(j.input,{backgroundImage:\"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)\"}),b.isMsie()&&b.isMsie()<=7&&b.mixin(j.input,{marginTop:\"-1px\"});var k=function(){function c(b){b&&b.el||a.error(\"EventBus initialized without el\"),this.$el=a(b.el)}var d=\"typeahead:\";return b.mixin(c.prototype,{trigger:function(a){var b=[].slice.call(arguments,1);this.$el.trigger(d+a,b)}}),c}(),l=function(){function a(a,b,c,d){var e;if(!c)return this;for(b=b.split(i),c=d?h(c,d):c,this._callbacks=this._callbacks||{};e=b.shift();)this._callbacks[e]=this._callbacks[e]||{sync:[],async:[]},this._callbacks[e][a].push(c);return this}function b(b,c,d){return a.call(this,\"async\",b,c,d)}function c(b,c,d){return a.call(this,\"sync\",b,c,d)}function d(a){var b;if(!this._callbacks)return this;for(a=a.split(i);b=a.shift();)delete this._callbacks[b];return this}function e(a){var b,c,d,e,g;if(!this._callbacks)return this;for(a=a.split(i),d=[].slice.call(arguments,1);(b=a.shift())&&(c=this._callbacks[b]);)e=f(c.sync,this,[b].concat(d)),g=f(c.async,this,[b].concat(d)),e()&&j(g);return this}function f(a,b,c){function d(){for(var d,e=0;!d&&e<a.length;e+=1)d=a[e].apply(b,c)===!1;return!d}return d}function g(){var a;return a=window.setImmediate?function(a){setImmediate(function(){a()})}:function(a){setTimeout(function(){a()},0)}}function h(a,b){return a.bind?a.bind(b):function(){a.apply(b,[].slice.call(arguments,0))}}var i=/\\s+/,j=g();return{onSync:c,onAsync:b,off:d,trigger:e}}(),m=function(a){function c(a,c,d){for(var e,f=[],g=0;g<a.length;g++)f.push(b.escapeRegExChars(a[g]));return e=d?\"\\\\b(\"+f.join(\"|\")+\")\\\\b\":\"(\"+f.join(\"|\")+\")\",c?new RegExp(e):new RegExp(e,\"i\")}var d={node:null,pattern:null,tagName:\"strong\",className:null,wordsOnly:!1,caseSensitive:!1};return function(e){function f(b){var c,d;return(c=h.exec(b.data))&&(wrapperNode=a.createElement(e.tagName),e.className&&(wrapperNode.className=e.className),d=b.splitText(c.index),d.splitText(c[0].length),wrapperNode.appendChild(d.cloneNode(!0)),b.parentNode.replaceChild(wrapperNode,d)),!!c}function g(a,b){for(var c,d=3,e=0;e<a.childNodes.length;e++)c=a.childNodes[e],c.nodeType===d?e+=b(c)?1:0:g(c,b)}var h;e=b.mixin({},d,e),e.node&&e.pattern&&(e.pattern=b.isArray(e.pattern)?e.pattern:[e.pattern],h=c(e.pattern,e.caseSensitive,e.wordsOnly),g(e.node,f))}}(window.document),n=function(){function c(c){var e,f,h,i,j=this;c=c||{},c.input||a.error(\"input is missing\"),e=b.bind(this._onBlur,this),f=b.bind(this._onFocus,this),h=b.bind(this._onKeydown,this),i=b.bind(this._onInput,this),this.$hint=a(c.hint),this.$input=a(c.input).on(\"blur.tt\",e).on(\"focus.tt\",f).on(\"keydown.tt\",h),0===this.$hint.length&&(this.setHintValue=this.getHintValue=this.clearHint=b.noop),b.isMsie()?this.$input.on(\"keydown.tt keypress.tt cut.tt paste.tt\",function(a){g[a.which||a.keyCode]||b.defer(b.bind(j._onInput,j,a))}):this.$input.on(\"input.tt\",i),this.query=this.$input.val(),this.$overflowHelper=d(this.$input)}function d(b){return a('<pre aria-hidden=\"true\"></pre>').css({position:\"absolute\",visibility:\"hidden\",whiteSpace:\"nowrap\",fontFamily:b.css(\"font-family\"),fontSize:b.css(\"font-size\"),fontStyle:b.css(\"font-style\"),fontVariant:b.css(\"font-variant\"),fontWeight:b.css(\"font-weight\"),wordSpacing:b.css(\"word-spacing\"),letterSpacing:b.css(\"letter-spacing\"),textIndent:b.css(\"text-indent\"),textRendering:b.css(\"text-rendering\"),textTransform:b.css(\"text-transform\")}).insertAfter(b)}function e(a,b){return c.normalizeQuery(a)===c.normalizeQuery(b)}function f(a){return a.altKey||a.ctrlKey||a.metaKey||a.shiftKey}var g;return g={9:\"tab\",27:\"esc\",37:\"left\",39:\"right\",13:\"enter\",38:\"up\",40:\"down\"},c.normalizeQuery=function(a){return(a||\"\").replace(/^\\s*/g,\"\").replace(/\\s{2,}/g,\" \")},b.mixin(c.prototype,l,{_onBlur:function(){this.resetInputValue(),this.trigger(\"blurred\")},_onFocus:function(){this.trigger(\"focused\")},_onKeydown:function(a){var b=g[a.which||a.keyCode];this._managePreventDefault(b,a),b&&this._shouldTrigger(b,a)&&this.trigger(b+\"Keyed\",a)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(a,b){var c,d,e;switch(a){case\"tab\":d=this.getHintValue(),e=this.getInputValue(),c=d&&d!==e&&!f(b);break;case\"up\":case\"down\":c=!f(b);break;default:c=!1}c&&b.preventDefault()},_shouldTrigger:function(a,b){var c;switch(a){case\"tab\":c=!f(b);break;default:c=!0}return c},_checkInputValue:function(){var a,b,c;a=this.getInputValue(),b=e(a,this.query),c=b?this.query.length!==a.length:!1,b?c&&this.trigger(\"whitespaceChanged\",this.query):this.trigger(\"queryChanged\",this.query=a)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(a){this.query=a},getInputValue:function(){return this.$input.val()},setInputValue:function(a,b){this.$input.val(a),!b&&this._checkInputValue()},getHintValue:function(){return this.$hint.val()},setHintValue:function(a){this.$hint.val(a)},resetInputValue:function(){this.$input.val(this.query)},clearHint:function(){this.$hint.val(\"\")},getLanguageDirection:function(){return(this.$input.css(\"direction\")||\"ltr\").toLowerCase()},hasOverflow:function(){var a=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=a},isCursorAtEnd:function(){var a,c,d;return a=this.$input.val().length,c=this.$input[0].selectionStart,b.isNumber(c)?c===a:document.selection?(d=document.selection.createRange(),d.moveStart(\"character\",-a),a===d.text.length):!0},destroy:function(){this.$hint.off(\".tt\"),this.$input.off(\".tt\"),this.$hint=this.$input=this.$overflowHelper=null}}),c}(),o=function(){function c(c){c=c||{},c.templates=c.templates||{},c.source||a.error(\"missing source\"),c.name&&!f(c.name)&&a.error(\"invalid dataset name: \"+c.name),this.query=null,this.highlight=!!c.highlight,this.name=c.name||b.getUniqueId(),this.source=c.source,this.displayFn=d(c.display||c.displayKey),this.templates=e(c.templates,this.displayFn),this.$el=a(i.dataset.replace(\"%CLASS%\",this.name))}function d(a){function c(b){return b[a]}return a=a||\"value\",b.isFunction(a)?a:c}function e(a,c){function d(a){return\"<p>\"+c(a)+\"</p>\"}return{empty:a.empty&&b.templatify(a.empty),header:a.header&&b.templatify(a.header),footer:a.footer&&b.templatify(a.footer),suggestion:a.suggestion||d}}function f(a){return/^[_a-zA-Z0-9-]+$/.test(a)}var g=\"ttDataset\",h=\"ttValue\",k=\"ttDatum\";return c.extractDatasetName=function(b){return a(b).data(g)},c.extractValue=function(b){return a(b).data(h)},c.extractDatum=function(b){return a(b).data(k)},b.mixin(c.prototype,l,{_render:function(c,d){function e(){return p.templates.empty({query:c,isEmpty:!0})}function f(){function e(b){var c,d,e;return d=p.templates.suggestion(b),e=i.suggestion.replace(\"%BODY%\",d),c=a(e).data(g,p.name).data(h,p.displayFn(b)).data(k,b),c.children().each(function(){a(this).css(j.suggestionChild)}),c}var f,l;return f=a(i.suggestions).css(j.suggestions),l=b.map(d,e),f.append.apply(f,l),p.highlight&&m({node:f[0],pattern:c}),f}function l(){return p.templates.header({query:c,isEmpty:!o})}function n(){return p.templates.footer({query:c,isEmpty:!o})}if(this.$el){var o,p=this;this.$el.empty(),o=d&&d.length,!o&&this.templates.empty?this.$el.html(e()).prepend(p.templates.header?l():null).append(p.templates.footer?n():null):o&&this.$el.html(f()).prepend(p.templates.header?l():null).append(p.templates.footer?n():null),this.trigger(\"rendered\")}},getRoot:function(){return this.$el},update:function(a){function b(b){a===c.query&&c._render(a,b)}var c=this;this.query=a,this.source(a,b)},clear:function(){this._render(this.query||\"\")},isEmpty:function(){return this.$el.is(\":empty\")},destroy:function(){this.$el=null}}),c}(),p=function(){function c(c){var e,f,g,h=this;c=c||{},c.menu||a.error(\"menu is required\"),this.isOpen=!1,this.isEmpty=!0,this.datasets=b.map(c.datasets,d),e=b.bind(this._onSuggestionClick,this),f=b.bind(this._onSuggestionMouseEnter,this),g=b.bind(this._onSuggestionMouseLeave,this),this.$menu=a(c.menu).on(\"click.tt\",\".tt-suggestion\",e).on(\"mouseenter.tt\",\".tt-suggestion\",f).on(\"mouseleave.tt\",\".tt-suggestion\",g),b.each(this.datasets,function(a){h.$menu.append(a.getRoot()),a.onSync(\"rendered\",h._onRendered,h)})}function d(a){return new o(a)}return b.mixin(c.prototype,l,{_onSuggestionClick:function(b){this.trigger(\"suggestionClicked\",a(b.currentTarget))},_onSuggestionMouseEnter:function(b){this._removeCursor(),this._setCursor(a(b.currentTarget),!0)},_onSuggestionMouseLeave:function(){this._removeCursor()},_onRendered:function(){function a(a){return a.isEmpty()}this.isEmpty=b.every(this.datasets,a),this.isEmpty?this._hide():this.isOpen&&this._show(),this.trigger(\"datasetRendered\")},_hide:function(){this.$menu.hide()},_show:function(){this.$menu.css(\"display\",\"block\")},_getSuggestions:function(){return this.$menu.find(\".tt-suggestion\")},_getCursor:function(){return this.$menu.find(\".tt-cursor\").first()},_setCursor:function(a,b){a.first().addClass(\"tt-cursor\"),!b&&this.trigger(\"cursorMoved\")},_removeCursor:function(){this._getCursor().removeClass(\"tt-cursor\")},_moveCursor:function(a){var b,c,d,e;if(this.isOpen){if(c=this._getCursor(),b=this._getSuggestions(),this._removeCursor(),d=b.index(c)+a,d=(d+1)%(b.length+1)-1,-1===d)return void this.trigger(\"cursorRemoved\");-1>d&&(d=b.length-1),this._setCursor(e=b.eq(d)),this._ensureVisible(e)}},_ensureVisible:function(a){var b,c,d,e;b=a.position().top,c=b+a.outerHeight(!0),d=this.$menu.scrollTop(),e=this.$menu.height()+parseInt(this.$menu.css(\"paddingTop\"),10)+parseInt(this.$menu.css(\"paddingBottom\"),10),0>b?this.$menu.scrollTop(d+b):c>e&&this.$menu.scrollTop(d+(c-e))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger(\"closed\"))},open:function(){this.isOpen||(this.isOpen=!0,!this.isEmpty&&this._show(),this.trigger(\"opened\"))},setLanguageDirection:function(a){this.$menu.css(\"ltr\"===a?j.ltr:j.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(a){var b=null;return a.length&&(b={raw:o.extractDatum(a),value:o.extractValue(a),datasetName:o.extractDatasetName(a)}),b},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},update:function(a){function c(b){b.update(a)}b.each(this.datasets,c)},empty:function(){function a(a){a.clear()}b.each(this.datasets,a),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){function a(a){a.destroy()}this.$menu.off(\".tt\"),this.$menu=null,b.each(this.datasets,a)}}),c}(),q=function(){function c(c){var e,f,g;c=c||{},c.input||a.error(\"missing input\"),this.autoselect=!!c.autoselect,this.minLength=b.isNumber(c.minLength)?c.minLength:1,this.$node=d(c.input,c.withHint),e=this.$node.find(\".tt-dropdown-menu\"),f=this.$node.find(\".tt-input\"),g=this.$node.find(\".tt-hint\"),this.eventBus=c.eventBus||new k({el:f}),this.dropdown=new p({menu:e,datasets:c.datasets}).onSync(\"suggestionClicked\",this._onSuggestionClicked,this).onSync(\"cursorMoved\",this._onCursorMoved,this).onSync(\"cursorRemoved\",this._onCursorRemoved,this).onSync(\"opened\",this._onOpened,this).onSync(\"closed\",this._onClosed,this).onAsync(\"datasetRendered\",this._onDatasetRendered,this),this.input=new n({input:f,hint:g}).onSync(\"focused\",this._onFocused,this).onSync(\"blurred\",this._onBlurred,this).onSync(\"enterKeyed\",this._onEnterKeyed,this).onSync(\"tabKeyed\",this._onTabKeyed,this).onSync(\"escKeyed\",this._onEscKeyed,this).onSync(\"upKeyed\",this._onUpKeyed,this).onSync(\"downKeyed\",this._onDownKeyed,this).onSync(\"leftKeyed\",this._onLeftKeyed,this).onSync(\"rightKeyed\",this._onRightKeyed,this).onSync(\"queryChanged\",this._onQueryChanged,this).onSync(\"whitespaceChanged\",this._onWhitespaceChanged,this),e.on(\"mousedown.tt\",function(a){b.isMsie()&&b.isMsie()<9&&(f[0].onbeforedeactivate=function(){window.event.returnValue=!1,f[0].onbeforedeactivate=null}),a.preventDefault()})}function d(b,c){var d,f,h,k;d=a(b),f=a(i.wrapper).css(j.wrapper),h=a(i.dropdown).css(j.dropdown),k=d.clone().css(j.hint).css(e(d)),k.val(\"\").removeData().addClass(\"tt-hint\").removeAttr(\"id name placeholder\").prop(\"disabled\",!0).attr({autocomplete:\"off\",spellcheck:\"false\"}),d.data(g,{dir:d.attr(\"dir\"),autocomplete:d.attr(\"autocomplete\"),spellcheck:d.attr(\"spellcheck\"),style:d.attr(\"style\")}),d.addClass(\"tt-input\").attr({autocomplete:\"off\",spellcheck:!1}).css(c?j.input:j.inputWithNoHint);try{!d.attr(\"dir\")&&d.attr(\"dir\",\"auto\")}catch(l){}return d.wrap(f).parent().prepend(c?k:null).append(h)}function e(a){return{backgroundAttachment:a.css(\"background-attachment\"),backgroundClip:a.css(\"background-clip\"),backgroundColor:a.css(\"background-color\"),backgroundImage:a.css(\"background-image\"),backgroundOrigin:a.css(\"background-origin\"),backgroundPosition:a.css(\"background-position\"),backgroundRepeat:a.css(\"background-repeat\"),backgroundSize:a.css(\"background-size\")}}function f(a){var c=a.find(\".tt-input\");b.each(c.data(g),function(a,d){b.isUndefined(a)?c.removeAttr(d):c.attr(d,a)}),c.detach().removeData(g).removeClass(\"tt-input\").insertAfter(a),a.remove()}var g=\"ttAttrs\";return b.mixin(c.prototype,{_onSuggestionClicked:function(a,b){var c;(c=this.dropdown.getDatumForSuggestion(b))&&this._select(c)},_onCursorMoved:function(){var a=this.dropdown.getDatumForCursor();this.input.clearHint(),this.input.setInputValue(a.value,!0),this.eventBus.trigger(\"cursorchanged\",a.raw,a.datasetName)},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint()},_onDatasetRendered:function(){this._updateHint()},_onOpened:function(){this._updateHint(),this.eventBus.trigger(\"opened\")},_onClosed:function(){this.input.clearHint(),this.eventBus.trigger(\"closed\")},_onFocused:function(){this.dropdown.empty(),this.dropdown.open()},_onBlurred:function(){this.dropdown.close()},_onEnterKeyed:function(a,b){var c,d;c=this.dropdown.getDatumForCursor(),d=this.dropdown.getDatumForTopSuggestion(),c?(this._select(c),b.preventDefault()):this.autoselect&&d&&(this._select(d),b.preventDefault())},_onTabKeyed:function(a,b){var c;(c=this.dropdown.getDatumForCursor())?(this._select(c),b.preventDefault()):this._autocomplete()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var a=this.input.getQuery();!this.dropdown.isOpen&&a.length>=this.minLength&&this.dropdown.update(a),this.dropdown.open(),this.dropdown.moveCursorUp()},_onDownKeyed:function(){var a=this.input.getQuery();!this.dropdown.isOpen&&a.length>=this.minLength&&this.dropdown.update(a),this.dropdown.open(),this.dropdown.moveCursorDown()},_onLeftKeyed:function(){\"rtl\"===this.dir&&this._autocomplete()},_onRightKeyed:function(){\"ltr\"===this.dir&&this._autocomplete()},_onQueryChanged:function(a,b){this.input.clearHint(),this.dropdown.empty(),b.length>=this.minLength&&this.dropdown.update(b),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var a;this.dir!==(a=this.input.getLanguageDirection())&&(this.dir=a,this.$node.css(\"direction\",a),this.dropdown.setLanguageDirection(a))},_updateHint:function(){var a,c,d,e,f,g;a=this.dropdown.getDatumForTopSuggestion(),a&&this.dropdown.isVisible()&&!this.input.hasOverflow()&&(c=this.input.getInputValue(),d=n.normalizeQuery(c),e=b.escapeRegExChars(d),f=new RegExp(\"^(?:\"+e+\")(.*$)\",\"i\"),g=f.exec(a.value),this.input.setHintValue(c+(g?g[1]:\"\")))},_autocomplete:function(){var a,b,c;a=this.input.getHintValue(),b=this.input.getQuery(),a&&b!==a&&this.input.isCursorAtEnd()&&(c=this.dropdown.getDatumForTopSuggestion(),c&&this.input.setInputValue(c.value),this.eventBus.trigger(\"autocompleted\",c.raw,c.datasetName))},_select:function(a){this.input.clearHint(),this.input.setQuery(a.value),this.input.setInputValue(a.value,!0),this._setLanguageDirection(),this.eventBus.trigger(\"selected\",a.raw,a.datasetName),this.dropdown.close(),b.defer(b.bind(this.dropdown.empty,this.dropdown))},open:function(){this.dropdown.open()},close:function(){this.dropdown.close()},getQuery:function(){return this.input.getQuery()},setQuery:function(a){this.input.setInputValue(a)},destroy:function(){this.input.destroy(),this.dropdown.destroy(),f(this.$node),this.$node=null}}),c}();!function(){var c,d,e;c=a.fn.typeahead,d=\"ttTypeahead\",e={initialize:function(c,e){function f(){var f,g,h=a(this);b.each(e,function(a){a.highlight=!!c.highlight}),g=new q({input:h,eventBus:f=new k({el:h}),withHint:b.isUndefined(c.hint)?!0:!!c.hint,minLength:c.minLength,autoselect:c.autoselect,datasets:e}),h.data(d,g)}return e=b.isArray(e)?e:[].slice.call(arguments,1),c=c||{},this.each(f)},open:function(){function b(){var b,c=a(this);(b=c.data(d))&&b.open()}return this.each(b)},close:function(){function b(){var b,c=a(this);(b=c.data(d))&&b.close()}return this.each(b)},val:function(b){function c(){var c,e=a(this);(c=e.data(d))&&c.setQuery(b)}function e(a){var b,c;return(b=a.data(d))&&(c=b.getQuery()),c}return arguments.length?this.each(c):e(this.first())},destroy:function(){function b(){var b,c=a(this);(b=c.data(d))&&(b.destroy(),c.removeData(d))}return this.each(b)}},a.fn.typeahead=function(a){return e[a]?e[a].apply(this,[].slice.call(arguments,1)):e.initialize.apply(this,arguments)},a.fn.typeahead.noConflict=function(){return a.fn.typeahead=c,this}}()}(window.jQuery);\n"
  },
  {
    "path": "modules/system/assets/js/pages/updates.js",
    "content": "/*\n * UpdateList page\n */\n+function ($) { \"use strict\";\n\n    oc.registerControl('updatelist', class extends oc.ControlBase {\n        connect() {\n            this.listen('click', '[data-updatelist-check]', this.checkForUpdates);\n            this.checkForUpdates(true);\n        }\n\n        checkForUpdates(useCache) {\n            $('[data-plugin-latest-code], [data-core-latest-version]')\n                .text('')\n                .addClass('oc-loading')\n                .closest('tr')\n                .removeClass('positive important')\n            ;\n\n            oc.ajax('onCompareVersions', {\n                data: {\n                    force: useCache ? 0 : 1\n                }\n            }).done((data) => {\n                this.updateCoreVersion(data);\n                this.updatePluginVersions(data);\n            });\n        }\n\n        updatePluginVersions(data) {\n            $('[data-plugin-current-code]').each(function() {\n                var pluginCode = $(this).data('plugin-current-code'),\n                    $current = $(this),\n                    $latest = $('[data-plugin-latest-code=\"'+pluginCode+'\"]:first');\n\n                var latestVer = data.plugins ? data.plugins[pluginCode] : null,\n                    currentVer = $current.data('plugin-current-version');\n\n                if (latestVer) {\n                    $latest.removeClass('oc-loading').text(latestVer);\n\n                    var hasUpdates;\n                    try {\n                        hasUpdates = version_compare(latestVer, currentVer) > 0;\n                    }\n                    catch(err) {\n                        hasUpdates = 0;\n                    }\n\n                    if (hasUpdates) {\n                        $current.closest('tr').addClass('positive important');\n                    }\n                }\n                else {\n                    $latest.removeClass('oc-loading').text(currentVer);\n                }\n            })\n        }\n\n        updateCoreVersion(data) {\n            var $current = $('[data-core-current-version]:first'),\n                $latest = $('[data-core-latest-version]:first');\n\n            var currentVer = $current.data('core-current-version'),\n                latestVer = data.core;\n\n            $latest.removeClass('oc-loading').text(latestVer ? latestVer : currentVer);\n\n            var hasUpdates;\n            try {\n                hasUpdates = version_compare(latestVer, currentVer) > 0;\n            }\n            catch(err) {\n                hasUpdates = 0;\n            }\n\n            if (hasUpdates) {\n                $('[data-core-has-updates]:first').show();\n                $('[data-core-no-updates]:first').hide();\n            }\n        }\n    });\n\n    // Port of PHP version_compare\n    function version_compare(a, b) {\n        if (a === b) {\n        return 0;\n        }\n\n        var a_components = a+''.split('.');\n        var b_components = b+''.split('.');\n\n        var len = Math.min(a_components.length, b_components.length);\n\n        // Loop while the components are equal\n        for (var i = 0; i < len; i++) {\n            // A bigger than B\n            if (parseInt(a_components[i]) > parseInt(b_components[i])) {\n                return 1;\n            }\n\n            // B bigger than A\n            if (parseInt(a_components[i]) < parseInt(b_components[i])) {\n                return -1;\n            }\n        }\n\n        // If one's a prefix of the other, the longer one is greater\n        if (a_components.length > b_components.length) {\n            return 1;\n        }\n\n        if (a_components.length < b_components.length) {\n            return -1;\n        }\n\n        // Otherwise they are the same\n        return 0;\n    }\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/system/assets/js/vendor.js",
    "content": "/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(ie,e){\"use strict\";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType&&\"function\"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement(\"script\");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?n[i.call(e)]||\"object\":typeof e}var t=\"3.7.1\",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&\"length\"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],\"__proto__\"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:\"jQuery\"+(t+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==i.call(e))&&(!(t=r(e))||\"function\"==typeof(n=ue.call(t,\"constructor\")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n=\"\",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,\"string\"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||\"HTML\")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),\"function\"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){n[\"[object \"+t+\"]\"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",ve=new RegExp(\"^\"+ge+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ge+\"+$\",\"g\");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;function p(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e}ce.escapeSelector=function(e){return(e+\"\").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",t=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\"+ge+\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",p=\"\\\\[\"+ge+\"*(\"+t+\")(?:\"+ge+\"*([*^$|!~]?=)\"+ge+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+t+\"))|)\"+ge+\"*\\\\]\",g=\":(\"+t+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+p+\")*)|.*)\\\\)|)\",v=new RegExp(ge+\"+\",\"g\"),y=new RegExp(\"^\"+ge+\"*,\"+ge+\"*\"),m=new RegExp(\"^\"+ge+\"*([>+~]|\"+ge+\")\"+ge+\"*\"),x=new RegExp(ge+\"|>\"),j=new RegExp(g),A=new RegExp(\"^\"+t+\"$\"),D={ID:new RegExp(\"^#(\"+t+\")\"),CLASS:new RegExp(\"^\\\\.(\"+t+\")\"),TAG:new RegExp(\"^(\"+t+\"|[*])\"),ATTR:new RegExp(\"^\"+p),PSEUDO:new RegExp(\"^\"+g),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ge+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ge+\"*(?:([+-]|)\"+ge+\"*(\\\\d+)|))\"+ge+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+f+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ge+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ge+\"*((?:-\\\\d)?\\\\d*)\"+ge+\"*\\\\)|)(?=[^-]|$)\",\"i\")},N=/^(?:input|select|textarea|button)$/i,q=/^h\\d$/i,L=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,H=/[+~]/,O=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+ge+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),P=function(e,t){var n=\"0x\"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,\"fieldset\")},{dir:\"parentNode\",next:\"legend\"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+\" \"]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute(\"id\"))?s=ce.escapeSelector(s):e.setAttribute(\"id\",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?\"#\"+s:\":scope\")+\" \"+Q(l[o]);c=l.join(\",\")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute(\"id\")}}}return re(t.replace(ve,\"$1\"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+\" \")>b.cacheLength&&delete e[r.shift()],e[t+\" \"]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,\"input\")&&e.type===t}}function _(t){return function(e){return(fe(e,\"input\")||fe(e,\"button\"))&&e.type===t}}function z(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener(\"unload\",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,\"*\")}),le.scope=$(function(){return T.querySelectorAll(\":scope\")}),le.cssHas=$(function(){try{return T.querySelector(\":has(*,:jqfake)\"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute(\"id\")===t}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return t&&t.value===n}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML=\"<a id='\"+S+\"' href='' disabled='disabled'></a><select id='\"+S+\"-\\r\\\\' disabled='disabled'><option selected=''></option></select>\",e.querySelectorAll(\"[selected]\").length||d.push(\"\\\\[\"+ge+\"*(?:value|\"+f+\")\"),e.querySelectorAll(\"[id~=\"+S+\"-]\").length||d.push(\"~=\"),e.querySelectorAll(\"a#\"+S+\"+*\").length||d.push(\".#.+[+~]\"),e.querySelectorAll(\":checked\").length||d.push(\":checked\"),(t=T.createElement(\"input\")).setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&d.push(\":enabled\",\":disabled\"),(t=T.createElement(\"input\")).setAttribute(\"name\",\"\"),e.appendChild(t),e.querySelectorAll(\"[name='']\").length||d.push(\"\\\\[\"+ge+\"*name\"+ge+\"*=\"+ge+\"*(?:''|\\\"\\\")\")}),le.cssHas||d.push(\":has\"),d=d.length&&new RegExp(d.join(\"|\")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+\" \"]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||\"\").replace(O,P),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+\" \"];return t||(t=new RegExp(\"(^|\"+ge+\")\"+e+\"(\"+ge+\"|$)\"))&&s(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?\"!=\"===r:!r||(t+=\"\",\"=\"===r?t===i:\"!=\"===r?t!==i:\"^=\"===r?i&&0===t.indexOf(i):\"*=\"===r?i&&-1<t.indexOf(i):\"$=\"===r?i&&t.slice(-i.length)===i:\"~=\"===r?-1<(\" \"+t.replace(v,\" \")+\" \").indexOf(i):\"|=\"===r&&(t===i||t.slice(0,i.length+1)===i+\"-\"))}},CHILD:function(d,e,t,h,g){var v=\"nth\"!==d.slice(0,3),y=\"last\"!==d.slice(-4),m=\"of-type\"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?\"nextSibling\":\"previousSibling\",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u=\"only\"===d&&!s&&\"nextSibling\"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error(\"unsupported pseudo: \"+e);return a[S]?a(o):1<a.length?(t=[e,e,\"\",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,\"$1\"));return s[S]?F(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||\"\")||I.error(\"unsupported lang: \"+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(t=t.toLowerCase())===n||0===t.indexOf(n+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,\"input\")&&!!e.checked||fe(e,\"option\")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,\"input\")&&\"button\"===e.type||fe(e,\"button\")},text:function(e){var t;return fe(e,\"input\")&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+\" \"];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve,\" \")}),a=a.slice(n.length)),b.filter)!(r=D[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&\"parentNode\"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||\"*\",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[\" \"],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace(ve,\"$1\"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+\" \"];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l=\"0\",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG(\"*\",i),h=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,c=!r&&Y(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&\"ID\"===(a=o[0]).type&&9===t.nodeType&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split(\"\").sort(l).join(\"\")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement(\"fieldset\"))}),ce.find=I,ce.expr[\":\"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):\"string\"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,\"string\"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&ce(e);if(!b.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,\"parentNode\")},parentsUntil:function(e,t,n){return d(e,\"parentNode\",n)},next:function(e){return A(e,\"nextSibling\")},prev:function(e){return A(e,\"previousSibling\")},nextAll:function(e){return d(e,\"nextSibling\")},prevAll:function(e){return d(e,\"previousSibling\")},nextUntil:function(e,t,n){return d(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return d(e,\"previousSibling\",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,\"template\")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return\"Until\"!==r.slice(-5)&&(t=e),t&&\"string\"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\\x20\\t\\r\\n\\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r=\"string\"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:\"\")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&\"string\"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t=\"\",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=\"\"),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[[\"notify\",\"progress\",ce.Callbacks(\"memory\"),ce.Callbacks(\"memory\"),2],[\"resolve\",\"done\",ce.Callbacks(\"once memory\"),ce.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",ce.Callbacks(\"once memory\"),ce.Callbacks(\"once memory\"),1,\"rejected\"]],i=\"pending\",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},\"catch\":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+\"With\"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError(\"Thenable self-resolution\");t=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+\"With\"](this===s?void 0:this,arguments),this},s[t[0]+\"With\"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),\"pending\"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener(\"DOMContentLoaded\",P),ie.removeEventListener(\"load\",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)[\"catch\"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,\"complete\"===C.readyState||\"loading\"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener(\"DOMContentLoaded\",P),ie.addEventListener(\"load\",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,\"ms-\").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(U,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=\"true\"===(i=n)||\"false\"!==i&&(\"null\"===i?null:i===+i+\"\"?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=z.get(o),1===o.nodeType&&!_.get(o,\"hasDataAttrs\"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf(\"data-\")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks(\"once memory\").add(function(){_.remove(e,[t+\"queue\",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return\"string\"!=typeof t&&(n=t,t=\"fx\",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=_.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Y=new RegExp(\"^(?:([+-])=|)(\"+G+\")([a-z%]*)$\",\"i\"),Q=[\"Top\",\"Right\",\"Bottom\",\"Left\"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&K(e)&&\"none\"===ce.css(e,\"display\")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,\"\")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?\"\":\"px\"),c=e.nodeType&&(ce.cssNumber[t]||\"px\"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ne={};function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?(\"none\"===n&&(l[c]=_.get(r,\"display\")||null,l[c]||(r.style.display=\"\")),\"\"===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,\"display\"),o.parentNode.removeChild(o),\"none\"===u&&(u=\"block\"),ne[s]=u)))):\"none\"!==n&&(l[c]=\"none\",_.set(r,\"display\",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,Ce=/^$|^module$|\\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement(\"div\")),(be=C.createElement(\"input\")).setAttribute(\"type\",\"radio\"),be.setAttribute(\"checked\",\"checked\"),be.setAttribute(\"name\",\"t\"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML=\"<textarea>x</textarea>\",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML=\"<option></option>\",le.option=!!xe.lastChild;var ke={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function Se(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],\"globalEval\",!t||_.get(t[n],\"globalEval\"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);var je=/<|&#?\\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(Te.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&-1<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),\"script\"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||\"\")&&n.push(o)}return f}var De=/^([^.]*)(?:\\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){for(s in\"string\"!=typeof n&&(r=r||n,n=void 0),t)Le(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return\"undefined\"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(D)||[\"\"]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||\"\").match(D)||[\"\"]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d){f=ce.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,\"events\")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?-1<ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,\"input\")&&He(t,\"click\",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,\"input\")&&He(t,\"click\"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,\"input\")&&_.get(t,\"click\")||fe(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:\"focusin\",blur:\"focusout\"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,\"handle\"),n=ce.event.fix(e);n.type=\"focusin\"===e.type?\"focus\":\"blur\",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Me=/^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;function Re(e,t){return fe(e,\"table\")&&fe(11!==t.nodeType?t:t.firstChild,\"tr\")&&ce(e).children(\"tbody\")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function We(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,\"handle events\"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&\"string\"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,\"script\"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,\"script\"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||\"\")&&!_.access(u,\"globalEval\")&&ce.contains(l,u)&&(u.src&&\"module\"!==(u.type||\"\").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute(\"nonce\")},l):m(u.textContent.replace(Me,\"\"),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,\"script\")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,\"input\"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:\"input\"!==l&&\"textarea\"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,\"script\")).length&&Ee(a,!f&&Se(e,\"script\")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(Se(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Oe.test(e)&&!ke[(Te.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp(\"^(\"+G+\")(?!px)[a-z%]+$\",\"i\"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join(\"|\"),\"i\");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,\"$1\")||void 0),\"\"!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+\"\":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",l.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n=\"1%\"!==e.top,s=12===t(e.marginLeft),l.style.right=\"60%\",o=36===t(e.right),r=36===t(e.width),l.style.position=\"absolute\",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement(\"div\"),l=C.createElement(\"div\");l.style&&(l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",le.clearCloneStyle=\"content-box\"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement(\"table\"),t=C.createElement(\"tr\"),n=C.createElement(\"div\"),e.style.cssText=\"position:absolute;left:-11111px;border-collapse:separate\",t.style.cssText=\"box-sizing:content-box;border:1px solid\",t.style.height=\"1px\",n.style.height=\"9px\",n.style.display=\"block\",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=[\"Webkit\",\"Moz\",\"ms\"],Je=C.createElement(\"div\").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},nt={letterSpacing:\"0\",fontWeight:\"400\"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function it(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0,l=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?(\"content\"===n&&(u-=ce.css(e,\"padding\"+Q[a],!0,i)),\"margin\"!==n&&(u-=ce.css(e,\"border\"+Q[a]+\"Width\",!0,i))):(u+=ce.css(e,\"padding\"+Q[a],!0,i),\"padding\"!==n?u+=ce.css(e,\"border\"+Q[a]+\"Width\",!0,i):s+=ce.css(e,\"border\"+Q[a]+\"Width\",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&\"border-box\"===ce.css(e,\"boxSizing\",!1,r),o=i,a=Ge(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a=\"auto\"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,\"tr\")||\"auto\"===a||!parseFloat(a)&&\"inline\"===ce.css(e,\"display\",!1,r))&&e.getClientRects().length&&(i=\"border-box\"===ce.css(e,\"boxSizing\",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"===(o=typeof n)&&(i=Y.exec(n))&&i[1]&&(n=te(e,t,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?\"\":\"px\")),le.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),\"normal\"===i&&t in nt&&(i=nt[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each([\"height\",\"width\"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&\"absolute\"===i.position,a=(o||n)&&\"border-box\"===ce.css(e,\"boxSizing\",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e[\"offset\"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,\"border\",!1,i)-.5)),s&&(r=Y.exec(t))&&\"px\"!==(r[3]||\"px\")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,\"marginLeft\"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),ce.each({margin:\"\",padding:\"\",border:\"Width\"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r=\"string\"==typeof e?e.split(\" \"):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},\"margin\"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?\"\":\"px\")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=Q[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.cssHooks[r])&&\"expand\"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=[\"*\"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&ee(e),v=_.get(e,\"fxshow\");for(r in n.queue||(null==(a=ce._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,ce.queue(e,\"fx\").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,\"display\")),\"none\"===(c=ce.css(e,\"display\"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,\"display\"),re([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===ce.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?\"hidden\"in v&&(g=v.hidden):v=_.access(e,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,\"fxshow\"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&\"object\"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return\"string\"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||\"fx\",[]),this.each(function(){var e=!0,t=null!=i&&i+\"queueHooks\",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||\"fx\"),this.each(function(){var e,t=_.get(this),n=t[a+\"queue\"],r=t[a+\"queueHooks\"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),ce.each([\"toggle\",\"show\",\"hide\"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||\"boolean\"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt(\"show\"),slideUp:gt(\"hide\"),slideToggle:gt(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||\"fx\",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement(\"input\"),ct=C.createElement(\"select\").appendChild(C.createElement(\"option\")),lt.type=\"checkbox\",le.checkOn=\"\"!==lt.value,le.optSelected=ct.selected,(lt=C.createElement(\"input\")).value=\"t\",lt.type=\"radio\",le.radioValue=\"t\"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&\"radio\"===t&&fe(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(\" \")}function Ct(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function kt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,\"tabindex\");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&\" \"+Tt(r)+\" \"){for(o=0;o<e.length;o++)i=e[o],n.indexOf(\" \"+i+\" \")<0&&(n+=i+\" \");a=Tt(n),r!==a&&this.setAttribute(\"class\",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&\" \"+Tt(r)+\" \"){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(\" \"+i+\" \"))n=n.replace(\" \"+i+\" \",\" \")}a=Tt(n),r!==a&&this.setAttribute(\"class\",a)}}):this:this.attr(\"class\",\"\")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s=\"string\"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):\"boolean\"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&\"boolean\"!==a||((r=Ct(this))&&_.set(this,\"__className__\",r),this.setAttribute&&this.setAttribute(\"class\",r||!1===t?\"\":_.get(this,\"__className__\")||\"\"))}))},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&-1<(\" \"+Tt(Ct(n))+\" \").indexOf(t))return!0;return!1}});var St=/\\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t=\"\":\"number\"==typeof t?t+=\"\":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?\"\":e+\"\"})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&\"set\"in r&&void 0!==r.set(this,t,\"value\")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&\"get\"in r&&void 0!==(e=r.get(t,\"value\"))?e:\"string\"==typeof(e=t.value)?e.replace(St,\"\"):null==e?\"\":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,\"value\");return null!=t?t:Tt(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!fe(n.parentNode,\"optgroup\"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each([\"radio\",\"checkbox\"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\\?/;ce.parseXML=function(e){var t,n;if(!e||\"string\"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,\"text/xml\")}catch(e){}return n=t&&t.getElementsByTagName(\"parsererror\")[0],t&&!n||ce.error(\"Invalid XML: \"+(n?ce.map(n.childNodes,function(e){return e.textContent}).join(\"\\n\"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,\"type\")?e.type:e,h=ue.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(\".\")&&(d=(h=d.split(\".\")).shift(),h.sort()),u=d.indexOf(\":\")<0&&\"on\"+d,(e=e[ce.expando]?e:new ce.Event(d,\"object\"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,\"events\")||Object.create(null))[e.type]&&_.get(o,\"handle\"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\\[\\]$/,Lt=/\\r?\\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+\"[\"+(\"object\"==typeof t&&null!=t?e:\"\")+\"]\",t,r,i)});else if(r||\"object\"!==x(e))i(n,e);else for(t in e)Pt(n+\"[\"+t+\"]\",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join(\"&\")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,\"elements\");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(\":disabled\")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Lt,\"\\r\\n\")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\\/\\//,Bt={},_t={},zt=\"*/\".concat(\"*\"),Xt=C.createElement(\"a\");function Ut(o){return function(e,t){\"string\"!=typeof e&&(t=e,e=\"*\");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])\"+\"===n[0]?(n=n.slice(1)||\"*\",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.each(t[e]||[],function(e,t){var n=t(i,o,a);return\"string\"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s[\"*\"]&&l(\"*\")}function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":zt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks(\"once memory\"),w=v.statusCode||{},a={},s={},u=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.exec(p))n[t[1].toLowerCase()+\" \"]=(n[t[1].toLowerCase()+\" \"]||[]).concat(t[2])}t=n[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+\"\").replace($t,Et.protocol+\"//\"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||\"*\").toLowerCase().match(D)||[\"\"],null==v.crossDomain){r=C.createElement(\"a\");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+\"//\"+Xt.host!=r.protocol+\"//\"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&\"string\"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger(\"ajaxStart\"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,\"\"),v.hasContent?v.data&&v.processData&&0===(v.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(v.data=v.data.replace(Mt,\"+\")):(o=v.url.slice(f.length),v.data&&(v.processData||\"string\"==typeof v.data)&&(f+=(At.test(f)?\"&\":\"?\")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,\"$1\"),o=(At.test(f)?\"&\":\"?\")+\"_=\"+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader(\"If-Modified-Since\",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader(\"If-None-Match\",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader(\"Content-Type\",v.contentType),T.setRequestHeader(\"Accept\",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+(\"*\"!==v.dataTypes[0]?\", \"+zt+\"; q=0.01\":\"\"):v.accepts[\"*\"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u=\"abort\",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger(\"ajaxSend\",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort(\"timeout\")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,\"No Transport\");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=void 0,p=r||\"\",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<ce.inArray(\"script\",v.dataTypes)&&ce.inArray(\"json\",v.dataTypes)<0&&(v.converters[\"text script\"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader(\"Last-Modified\"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader(\"etag\"))&&(ce.etag[f]=u)),204===e||\"HEAD\"===v.type?l=\"nocontent\":304===e?l=\"notmodified\":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l=\"error\",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+\"\",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?\"ajaxSuccess\":\"ajaxError\",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger(\"ajaxComplete\",[T,v]),--ce.active||ce.event.trigger(\"ajaxStop\")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,\"json\")},getScript:function(e,t){return ce.get(e,void 0,t,\"script\")}}),ce.each([\"get\",\"post\"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)\"content-type\"===t.toLowerCase()&&(e.contentType=e.headers[t]||\"\")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&\"withCredentials\"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,\"abort\"===e?r.abort():\"error\"===e?\"number\"!=typeof r.status?t(0,\"error\"):t(r.status,r.statusText):t(Yt[r.status]||r.status,r.statusText,\"text\"!==(r.responseType||\"text\")||\"string\"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o(\"error\"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&ie.setTimeout(function(){o&&a()})},o=o(\"abort\");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),ce.ajaxTransport(\"script\",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce(\"<script>\").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(\"load error\",i=function(e){r.remove(),i=null,e&&t(\"error\"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\\?(?=&|$)|\\?\\?/;ce.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Kt.pop()||ce.expando+\"_\"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Zt.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,\"$1\"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return o||ce.error(r+\" was not called\"),o[0]},e.dataTypes[0]=\"json\",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),\"script\"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),0<a.length&&ce.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?ce(\"<div>\").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,\"position\"),c=ce(e),f={};\"static\"===l&&(e.style.position=\"relative\"),s=c.offset(),o=ce.css(e,\"top\"),u=ce.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&-1<(o+u).indexOf(\"auto\")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),\"using\"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===ce.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===ce.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,\"borderTopWidth\",!0),i.left+=ce.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-ce.css(r,\"marginTop\",!0),left:t.left-i.left-ce.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===ce.css(e,\"position\"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,i){var o=\"pageYOffset\"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each([\"top\",\"left\"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+\"px\":t})}),ce.each({Height:\"height\",Width:\"width\"},function(a,s){ce.each({padding:\"inner\"+a,content:s,\"\":\"outer\"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||\"boolean\"!=typeof e),i=r||(!0===e||!0===t?\"margin\":\"border\");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf(\"outer\")?e[\"inner\"+a]:e.document.documentElement[\"client\"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body[\"scroll\"+a],r[\"scroll\"+a],e.body[\"offset\"+a],r[\"offset\"+a],r[\"client\"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},hover:function(e,t){return this.on(\"mouseenter\",e).on(\"mouseleave\",t||e)}}),ce.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,n){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?\"\":(e+\"\").replace(en,\"$1\")},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},\"undefined\"==typeof e&&(ie.jQuery=ie.$=ce),ce});\n\n;\n(function(global,factory){typeof exports===\"object\"&&typeof module!==\"undefined\"?module.exports=factory():typeof define===\"function\"&&define.amd?define(factory):(global=global||self,global.Mustache=factory())})(this,function(){\"use strict\";var objectToString=Object.prototype.toString;var isArray=Array.isArray||function isArrayPolyfill(object){return objectToString.call(object)===\"[object Array]\"};function isFunction(object){return typeof object===\"function\"}function typeStr(obj){return isArray(obj)?\"array\":typeof obj}function escapeRegExp(string){return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\")}function hasProperty(obj,propName){return obj!=null&&typeof obj===\"object\"&&propName in obj}function primitiveHasOwnProperty(primitive,propName){return primitive!=null&&typeof primitive!==\"object\"&&primitive.hasOwnProperty&&primitive.hasOwnProperty(propName)}var regExpTest=RegExp.prototype.test;function testRegExp(re,string){return regExpTest.call(re,string)}var nonSpaceRe=/\\S/;function isWhitespace(string){return!testRegExp(nonSpaceRe,string)}var entityMap={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#x2F;\",\"`\":\"&#x60;\",\"=\":\"&#x3D;\"};function escapeHtml(string){return String(string).replace(/[&<>\"'`=\\/]/g,function fromEntityMap(s){return entityMap[s]})}var whiteRe=/\\s*/;var spaceRe=/\\s+/;var equalsRe=/\\s*=/;var curlyRe=/\\s*\\}/;var tagRe=/#|\\^|\\/|>|\\{|&|=|!/;function parseTemplate(template,tags){if(!template)return[];var lineHasNonSpace=false;var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;var indentation=\"\";var tagIndex=0;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length)delete tokens[spaces.pop()]}else{spaces=[]}hasTag=false;nonSpace=false}var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tagsToCompile){if(typeof tagsToCompile===\"string\")tagsToCompile=tagsToCompile.split(spaceRe,2);if(!isArray(tagsToCompile)||tagsToCompile.length!==2)throw new Error(\"Invalid tags: \"+tagsToCompile);openingTagRe=new RegExp(escapeRegExp(tagsToCompile[0])+\"\\\\s*\");closingTagRe=new RegExp(\"\\\\s*\"+escapeRegExp(tagsToCompile[1]));closingCurlyRe=new RegExp(\"\\\\s*\"+escapeRegExp(\"}\"+tagsToCompile[1]))}compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i<valueLength;++i){chr=value.charAt(i);if(isWhitespace(chr)){spaces.push(tokens.length);indentation+=chr}else{nonSpace=true;lineHasNonSpace=true;indentation+=\" \"}tokens.push([\"text\",chr,start,start+1]);start+=1;if(chr===\"\\n\"){stripSpace();indentation=\"\";tagIndex=0;lineHasNonSpace=false}}}if(!scanner.scan(openingTagRe))break;hasTag=true;type=scanner.scan(tagRe)||\"name\";scanner.scan(whiteRe);if(type===\"=\"){value=scanner.scanUntil(equalsRe);scanner.scan(equalsRe);scanner.scanUntil(closingTagRe)}else if(type===\"{\"){value=scanner.scanUntil(closingCurlyRe);scanner.scan(curlyRe);scanner.scanUntil(closingTagRe);type=\"&\"}else{value=scanner.scanUntil(closingTagRe)}if(!scanner.scan(closingTagRe))throw new Error(\"Unclosed tag at \"+scanner.pos);if(type==\">\"){token=[type,value,start,scanner.pos,indentation,tagIndex,lineHasNonSpace]}else{token=[type,value,start,scanner.pos]}tagIndex++;tokens.push(token);if(type===\"#\"||type===\"^\"){sections.push(token)}else if(type===\"/\"){openSection=sections.pop();if(!openSection)throw new Error('Unopened section \"'+value+'\" at '+start);if(openSection[1]!==value)throw new Error('Unclosed section \"'+openSection[1]+'\" at '+start)}else if(type===\"name\"||type===\"{\"||type===\"&\"){nonSpace=true}else if(type===\"=\"){compileTags(value)}}stripSpace();openSection=sections.pop();if(openSection)throw new Error('Unclosed section \"'+openSection[1]+'\" at '+scanner.pos);return nestTokens(squashTokens(tokens))}function squashTokens(tokens){var squashedTokens=[];var token,lastToken;for(var i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];if(token){if(token[0]===\"text\"&&lastToken&&lastToken[0]===\"text\"){lastToken[1]+=token[1];lastToken[3]=token[3]}else{squashedTokens.push(token);lastToken=token}}}return squashedTokens}function nestTokens(tokens){var nestedTokens=[];var collector=nestedTokens;var sections=[];var token,section;for(var i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];switch(token[0]){case\"#\":case\"^\":collector.push(token);sections.push(token);collector=token[4]=[];break;case\"/\":section=sections.pop();section[5]=token[2];collector=sections.length>0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}}return nestedTokens}function Scanner(string){this.string=string;this.tail=string;this.pos=0}Scanner.prototype.eos=function eos(){return this.tail===\"\"};Scanner.prototype.scan=function scan(re){var match=this.tail.match(re);if(!match||match.index!==0)return\"\";var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string};Scanner.prototype.scanUntil=function scanUntil(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail=\"\";break;case 0:match=\"\";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index)}this.pos+=match.length;return match};function Context(view,parentContext){this.view=view;this.cache={\".\":this.view};this.parent=parentContext}Context.prototype.push=function push(view){return new Context(view,this)};Context.prototype.lookup=function lookup(name){var cache=this.cache;var value;if(cache.hasOwnProperty(name)){value=cache[name]}else{var context=this,intermediateValue,names,index,lookupHit=false;while(context){if(name.indexOf(\".\")>0){intermediateValue=context.view;names=name.split(\".\");index=0;while(intermediateValue!=null&&index<names.length){if(index===names.length-1)lookupHit=hasProperty(intermediateValue,names[index])||primitiveHasOwnProperty(intermediateValue,names[index]);intermediateValue=intermediateValue[names[index++]]}}else{intermediateValue=context.view[name];lookupHit=hasProperty(context.view,name)}if(lookupHit){value=intermediateValue;break}context=context.parent}cache[name]=value}if(isFunction(value))value=value.call(this.view);return value};function Writer(){this.templateCache={_cache:{},set:function set(key,value){this._cache[key]=value},get:function get(key){return this._cache[key]},clear:function clear(){this._cache={}}}}Writer.prototype.clearCache=function clearCache(){if(typeof this.templateCache!==\"undefined\"){this.templateCache.clear()}};Writer.prototype.parse=function parse(template,tags){var cache=this.templateCache;var cacheKey=template+\":\"+(tags||mustache.tags).join(\":\");var isCacheEnabled=typeof cache!==\"undefined\";var tokens=isCacheEnabled?cache.get(cacheKey):undefined;if(tokens==undefined){tokens=parseTemplate(template,tags);isCacheEnabled&&cache.set(cacheKey,tokens)}return tokens};Writer.prototype.render=function render(template,view,partials,config){var tags=this.getConfigTags(config);var tokens=this.parse(template,tags);var context=view instanceof Context?view:new Context(view,undefined);return this.renderTokens(tokens,context,partials,template,config)};Writer.prototype.renderTokens=function renderTokens(tokens,context,partials,originalTemplate,config){var buffer=\"\";var token,symbol,value;for(var i=0,numTokens=tokens.length;i<numTokens;++i){value=undefined;token=tokens[i];symbol=token[0];if(symbol===\"#\")value=this.renderSection(token,context,partials,originalTemplate,config);else if(symbol===\"^\")value=this.renderInverted(token,context,partials,originalTemplate,config);else if(symbol===\">\")value=this.renderPartial(token,context,partials,config);else if(symbol===\"&\")value=this.unescapedValue(token,context);else if(symbol===\"name\")value=this.escapedValue(token,context,config);else if(symbol===\"text\")value=this.rawValue(token);if(value!==undefined)buffer+=value}return buffer};Writer.prototype.renderSection=function renderSection(token,context,partials,originalTemplate,config){var self=this;var buffer=\"\";var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials,config)}if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;j<valueLength;++j){buffer+=this.renderTokens(token[4],context.push(value[j]),partials,originalTemplate,config)}}else if(typeof value===\"object\"||typeof value===\"string\"||typeof value===\"number\"){buffer+=this.renderTokens(token[4],context.push(value),partials,originalTemplate,config)}else if(isFunction(value)){if(typeof originalTemplate!==\"string\")throw new Error(\"Cannot use higher-order sections without the original template\");value=value.call(context.view,originalTemplate.slice(token[3],token[5]),subRender);if(value!=null)buffer+=value}else{buffer+=this.renderTokens(token[4],context,partials,originalTemplate,config)}return buffer};Writer.prototype.renderInverted=function renderInverted(token,context,partials,originalTemplate,config){var value=context.lookup(token[1]);if(!value||isArray(value)&&value.length===0)return this.renderTokens(token[4],context,partials,originalTemplate,config)};Writer.prototype.indentPartial=function indentPartial(partial,indentation,lineHasNonSpace){var filteredIndentation=indentation.replace(/[^ \\t]/g,\"\");var partialByNl=partial.split(\"\\n\");for(var i=0;i<partialByNl.length;i++){if(partialByNl[i].length&&(i>0||!lineHasNonSpace)){partialByNl[i]=filteredIndentation+partialByNl[i]}}return partialByNl.join(\"\\n\")};Writer.prototype.renderPartial=function renderPartial(token,context,partials,config){if(!partials)return;var tags=this.getConfigTags(config);var value=isFunction(partials)?partials(token[1]):partials[token[1]];if(value!=null){var lineHasNonSpace=token[6];var tagIndex=token[5];var indentation=token[4];var indentedValue=value;if(tagIndex==0&&indentation){indentedValue=this.indentPartial(value,indentation,lineHasNonSpace)}var tokens=this.parse(indentedValue,tags);return this.renderTokens(tokens,context,partials,indentedValue,config)}};Writer.prototype.unescapedValue=function unescapedValue(token,context){var value=context.lookup(token[1]);if(value!=null)return value};Writer.prototype.escapedValue=function escapedValue(token,context,config){var escape=this.getConfigEscape(config)||mustache.escape;var value=context.lookup(token[1]);if(value!=null)return typeof value===\"number\"&&escape===mustache.escape?String(value):escape(value)};Writer.prototype.rawValue=function rawValue(token){return token[1]};Writer.prototype.getConfigTags=function getConfigTags(config){if(isArray(config)){return config}else if(config&&typeof config===\"object\"){return config.tags}else{return undefined}};Writer.prototype.getConfigEscape=function getConfigEscape(config){if(config&&typeof config===\"object\"&&!isArray(config)){return config.escape}else{return undefined}};var mustache={name:\"mustache.js\",version:\"4.2.0\",tags:[\"{{\",\"}}\"],clearCache:undefined,escape:undefined,parse:undefined,render:undefined,Scanner:undefined,Context:undefined,Writer:undefined,set templateCache(cache){defaultWriter.templateCache=cache},get templateCache(){return defaultWriter.templateCache}};var defaultWriter=new Writer;mustache.clearCache=function clearCache(){return defaultWriter.clearCache()};mustache.parse=function parse(template,tags){return defaultWriter.parse(template,tags)};mustache.render=function render(template,view,partials,config){if(typeof template!==\"string\"){throw new TypeError('Invalid template! Template should be a \"string\" '+'but \"'+typeStr(template)+'\" was given as the first '+\"argument for mustache#render(template, view, partials)\")}return defaultWriter.render(template,view,partials,config)};mustache.escape=escapeHtml;mustache.Scanner=Scanner;mustache.Context=Context;mustache.Writer=Writer;return mustache});\n\n;\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){\"use strict\";var H;function _(){return H.apply(null,arguments)}function y(e){return e instanceof Array||\"[object Array]\"===Object.prototype.toString.call(e)}function F(e){return null!=e&&\"[object Object]\"===Object.prototype.toString.call(e)}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function L(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(c(e,t))return;return 1}function g(e){return void 0===e}function w(e){return\"number\"==typeof e||\"[object Number]\"===Object.prototype.toString.call(e)}function V(e){return e instanceof Date||\"[object Date]\"===Object.prototype.toString.call(e)}function G(e,t){for(var n=[],s=e.length,i=0;i<s;++i)n.push(t(e[i],i));return n}function E(e,t){for(var n in t)c(t,n)&&(e[n]=t[n]);return c(t,\"toString\")&&(e.toString=t.toString),c(t,\"valueOf\")&&(e.valueOf=t.valueOf),e}function l(e,t,n,s){return Wt(e,t,n,s,!0).utc()}function p(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function A(e){var t,n,s=e._d&&!isNaN(e._d.getTime());return s&&(t=p(e),n=j.call(t.parsedDateParts,function(e){return null!=e}),s=t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n),e._strict)&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e)?s:(e._isValid=s,e._isValid)}function I(e){var t=l(NaN);return null!=e?E(p(t),e):p(t).userInvalidated=!0,t}var j=Array.prototype.some||function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1},Z=_.momentProperties=[],z=!1;function q(e,t){var n,s,i,r=Z.length;if(g(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),g(t._i)||(e._i=t._i),g(t._f)||(e._f=t._f),g(t._l)||(e._l=t._l),g(t._strict)||(e._strict=t._strict),g(t._tzm)||(e._tzm=t._tzm),g(t._isUTC)||(e._isUTC=t._isUTC),g(t._offset)||(e._offset=t._offset),g(t._pf)||(e._pf=p(t)),g(t._locale)||(e._locale=t._locale),0<r)for(n=0;n<r;n++)g(i=t[s=Z[n]])||(e[s]=i);return e}function $(e){q(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===z&&(z=!0,_.updateOffset(this),z=!1)}function k(e){return e instanceof $||null!=e&&null!=e._isAMomentObject}function B(e){!1===_.suppressDeprecationWarnings&&\"undefined\"!=typeof console&&console.warn&&console.warn(\"Deprecation warning: \"+e)}function e(r,a){var o=!0;return E(function(){if(null!=_.deprecationHandler&&_.deprecationHandler(null,r),o){for(var e,t,n=[],s=arguments.length,i=0;i<s;i++){if(e=\"\",\"object\"==typeof arguments[i]){for(t in e+=\"\\n[\"+i+\"] \",arguments[0])c(arguments[0],t)&&(e+=t+\": \"+arguments[0][t]+\", \");e=e.slice(0,-2)}else e=arguments[i];n.push(e)}B(r+\"\\nArguments: \"+Array.prototype.slice.call(n).join(\"\")+\"\\n\"+(new Error).stack),o=!1}return a.apply(this,arguments)},a)}var J={};function Q(e,t){null!=_.deprecationHandler&&_.deprecationHandler(e,t),J[e]||(B(t),J[e]=!0)}function a(e){return\"undefined\"!=typeof Function&&e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}function X(e,t){var n,s=E({},e);for(n in t)c(t,n)&&(F(e[n])&&F(t[n])?(s[n]={},E(s[n],e[n]),E(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)c(e,n)&&!c(t,n)&&F(e[n])&&(s[n]=E({},s[n]));return s}function K(e){null!=e&&this.set(e)}_.suppressDeprecationWarnings=!1,_.deprecationHandler=null;var ee=Object.keys||function(e){var t,n=[];for(t in e)c(e,t)&&n.push(t);return n};function r(e,t,n){var s=\"\"+Math.abs(e);return(0<=e?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,t-s.length)).toString().substr(1)+s}var te=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ne=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,se={},ie={};function s(e,t,n,s){var i=\"string\"==typeof s?function(){return this[s]()}:s;e&&(ie[e]=i),t&&(ie[t[0]]=function(){return r(i.apply(this,arguments),t[1],t[2])}),n&&(ie[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function re(e,t){return e.isValid()?(t=ae(t,e.localeData()),se[t]=se[t]||function(s){for(var e,i=s.match(te),t=0,r=i.length;t<r;t++)ie[i[t]]?i[t]=ie[i[t]]:i[t]=(e=i[t]).match(/\\[[\\s\\S]/)?e.replace(/^\\[|\\]$/g,\"\"):e.replace(/\\\\/g,\"\");return function(e){for(var t=\"\",n=0;n<r;n++)t+=a(i[n])?i[n].call(e,s):i[n];return t}}(t),se[t](e)):e.localeData().invalidDate()}function ae(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(ne.lastIndex=0;0<=n&&ne.test(e);)e=e.replace(ne,s),ne.lastIndex=0,--n;return e}var oe={D:\"date\",dates:\"date\",date:\"date\",d:\"day\",days:\"day\",day:\"day\",e:\"weekday\",weekdays:\"weekday\",weekday:\"weekday\",E:\"isoWeekday\",isoweekdays:\"isoWeekday\",isoweekday:\"isoWeekday\",DDD:\"dayOfYear\",dayofyears:\"dayOfYear\",dayofyear:\"dayOfYear\",h:\"hour\",hours:\"hour\",hour:\"hour\",ms:\"millisecond\",milliseconds:\"millisecond\",millisecond:\"millisecond\",m:\"minute\",minutes:\"minute\",minute:\"minute\",M:\"month\",months:\"month\",month:\"month\",Q:\"quarter\",quarters:\"quarter\",quarter:\"quarter\",s:\"second\",seconds:\"second\",second:\"second\",gg:\"weekYear\",weekyears:\"weekYear\",weekyear:\"weekYear\",GG:\"isoWeekYear\",isoweekyears:\"isoWeekYear\",isoweekyear:\"isoWeekYear\",w:\"week\",weeks:\"week\",week:\"week\",W:\"isoWeek\",isoweeks:\"isoWeek\",isoweek:\"isoWeek\",y:\"year\",years:\"year\",year:\"year\"};function o(e){return\"string\"==typeof e?oe[e]||oe[e.toLowerCase()]:void 0}function ue(e){var t,n,s={};for(n in e)c(e,n)&&(t=o(n))&&(s[t]=e[n]);return s}var le={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};var de=/\\d/,t=/\\d\\d/,he=/\\d{3}/,ce=/\\d{4}/,fe=/[+-]?\\d{6}/,n=/\\d\\d?/,me=/\\d\\d\\d\\d?/,_e=/\\d\\d\\d\\d\\d\\d?/,ye=/\\d{1,3}/,ge=/\\d{1,4}/,we=/[+-]?\\d{1,6}/,pe=/\\d+/,ke=/[+-]?\\d+/,Me=/Z|[+-]\\d\\d:?\\d\\d/gi,ve=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,i=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,u=/^[1-9]\\d?/,d=/^([1-9]\\d|\\d)/;function h(e,n,s){Ye[e]=a(n)?n:function(e,t){return e&&s?s:n}}function De(e,t){return c(Ye,e)?Ye[e](t._strict,t._locale):new RegExp(f(e.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function f(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function m(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function M(e){var e=+e,t=0;return t=0!=e&&isFinite(e)?m(e):t}var Ye={},Se={};function v(e,n){var t,s,i=n;for(\"string\"==typeof e&&(e=[e]),w(n)&&(i=function(e,t){t[n]=M(e)}),s=e.length,t=0;t<s;t++)Se[e[t]]=i}function Oe(e,i){v(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}function be(e){return e%4==0&&e%100!=0||e%400==0}var D=0,Y=1,S=2,O=3,b=4,T=5,Te=6,xe=7,Ne=8;function We(e){return be(e)?366:365}s(\"Y\",0,0,function(){var e=this.year();return e<=9999?r(e,4):\"+\"+e}),s(0,[\"YY\",2],0,function(){return this.year()%100}),s(0,[\"YYYY\",4],0,\"year\"),s(0,[\"YYYYY\",5],0,\"year\"),s(0,[\"YYYYYY\",6,!0],0,\"year\"),h(\"Y\",ke),h(\"YY\",n,t),h(\"YYYY\",ge,ce),h(\"YYYYY\",we,fe),h(\"YYYYYY\",we,fe),v([\"YYYYY\",\"YYYYYY\"],D),v(\"YYYY\",function(e,t){t[D]=2===e.length?_.parseTwoDigitYear(e):M(e)}),v(\"YY\",function(e,t){t[D]=_.parseTwoDigitYear(e)}),v(\"Y\",function(e,t){t[D]=parseInt(e,10)}),_.parseTwoDigitYear=function(e){return M(e)+(68<M(e)?1900:2e3)};var x,Pe=Re(\"FullYear\",!0);function Re(t,n){return function(e){return null!=e?(Ue(this,t,e),_.updateOffset(this,n),this):Ce(this,t)}}function Ce(e,t){if(!e.isValid())return NaN;var n=e._d,s=e._isUTC;switch(t){case\"Milliseconds\":return s?n.getUTCMilliseconds():n.getMilliseconds();case\"Seconds\":return s?n.getUTCSeconds():n.getSeconds();case\"Minutes\":return s?n.getUTCMinutes():n.getMinutes();case\"Hours\":return s?n.getUTCHours():n.getHours();case\"Date\":return s?n.getUTCDate():n.getDate();case\"Day\":return s?n.getUTCDay():n.getDay();case\"Month\":return s?n.getUTCMonth():n.getMonth();case\"FullYear\":return s?n.getUTCFullYear():n.getFullYear();default:return NaN}}function Ue(e,t,n){var s,i,r;if(e.isValid()&&!isNaN(n)){switch(s=e._d,i=e._isUTC,t){case\"Milliseconds\":return i?s.setUTCMilliseconds(n):s.setMilliseconds(n);case\"Seconds\":return i?s.setUTCSeconds(n):s.setSeconds(n);case\"Minutes\":return i?s.setUTCMinutes(n):s.setMinutes(n);case\"Hours\":return i?s.setUTCHours(n):s.setHours(n);case\"Date\":return i?s.setUTCDate(n):s.setDate(n);case\"FullYear\":break;default:return}t=n,r=e.month(),e=29!==(e=e.date())||1!==r||be(t)?e:28,i?s.setUTCFullYear(t,r,e):s.setFullYear(t,r,e)}}function He(e,t){var n;return isNaN(e)||isNaN(t)?NaN:(n=(t%(n=12)+n)%n,e+=(t-n)/12,1==n?be(e)?29:28:31-n%7%2)}x=Array.prototype.indexOf||function(e){for(var t=0;t<this.length;++t)if(this[t]===e)return t;return-1},s(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),s(\"MMM\",0,0,function(e){return this.localeData().monthsShort(this,e)}),s(\"MMMM\",0,0,function(e){return this.localeData().months(this,e)}),h(\"M\",n,u),h(\"MM\",n,t),h(\"MMM\",function(e,t){return t.monthsShortRegex(e)}),h(\"MMMM\",function(e,t){return t.monthsRegex(e)}),v([\"M\",\"MM\"],function(e,t){t[Y]=M(e)-1}),v([\"MMM\",\"MMMM\"],function(e,t,n,s){s=n._locale.monthsParse(e,s,n._strict);null!=s?t[Y]=s:p(n).invalidMonth=e});var Fe=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),Le=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),Ve=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,Ge=i,Ee=i;function Ae(e,t){if(e.isValid()){if(\"string\"==typeof t)if(/^\\d+$/.test(t))t=M(t);else if(!w(t=e.localeData().monthsParse(t)))return;var n=(n=e.date())<29?n:Math.min(n,He(e.year(),t));e._isUTC?e._d.setUTCMonth(t,n):e._d.setMonth(t,n)}}function Ie(e){return null!=e?(Ae(this,e),_.updateOffset(this,!0),this):Ce(this,\"Month\")}function je(){function e(e,t){return t.length-e.length}for(var t,n,s=[],i=[],r=[],a=0;a<12;a++)n=l([2e3,a]),t=f(this.monthsShort(n,\"\")),n=f(this.months(n,\"\")),s.push(t),i.push(n),r.push(n),r.push(t);s.sort(e),i.sort(e),r.sort(e),this._monthsRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\")}function Ze(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}function ze(e){var t;return e<100&&0<=e?((t=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,t)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function qe(e,t,n){n=7+t-n;return n-(7+ze(e,0,n).getUTCDay()-t)%7-1}function $e(e,t,n,s,i){var r,t=1+7*(t-1)+(7+n-s)%7+qe(e,s,i),n=t<=0?We(r=e-1)+t:t>We(e)?(r=e+1,t-We(e)):(r=e,t);return{year:r,dayOfYear:n}}function Be(e,t,n){var s,i,r=qe(e.year(),t,n),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+N(i=e.year()-1,t,n):r>N(e.year(),t,n)?(s=r-N(e.year(),t,n),i=e.year()+1):(i=e.year(),s=r),{week:s,year:i}}function N(e,t,n){var s=qe(e,t,n),t=qe(e+1,t,n);return(We(e)-s+t)/7}s(\"w\",[\"ww\",2],\"wo\",\"week\"),s(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),h(\"w\",n,u),h(\"ww\",n,t),h(\"W\",n,u),h(\"WW\",n,t),Oe([\"w\",\"ww\",\"W\",\"WW\"],function(e,t,n,s){t[s.substr(0,1)]=M(e)});function Je(e,t){return e.slice(t,7).concat(e.slice(0,t))}s(\"d\",0,\"do\",\"day\"),s(\"dd\",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s(\"ddd\",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s(\"dddd\",0,0,function(e){return this.localeData().weekdays(this,e)}),s(\"e\",0,0,\"weekday\"),s(\"E\",0,0,\"isoWeekday\"),h(\"d\",n),h(\"e\",n),h(\"E\",n),h(\"dd\",function(e,t){return t.weekdaysMinRegex(e)}),h(\"ddd\",function(e,t){return t.weekdaysShortRegex(e)}),h(\"dddd\",function(e,t){return t.weekdaysRegex(e)}),Oe([\"dd\",\"ddd\",\"dddd\"],function(e,t,n,s){s=n._locale.weekdaysParse(e,s,n._strict);null!=s?t.d=s:p(n).invalidWeekday=e}),Oe([\"d\",\"e\",\"E\"],function(e,t,n,s){t[s]=M(e)});var Qe=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),Xe=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),Ke=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),et=i,tt=i,nt=i;function st(){function e(e,t){return t.length-e.length}for(var t,n,s,i=[],r=[],a=[],o=[],u=0;u<7;u++)s=l([2e3,1]).day(u),t=f(this.weekdaysMin(s,\"\")),n=f(this.weekdaysShort(s,\"\")),s=f(this.weekdays(s,\"\")),i.push(t),r.push(n),a.push(s),o.push(t),o.push(n),o.push(s);i.sort(e),r.sort(e),a.sort(e),o.sort(e),this._weekdaysRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\")}function it(){return this.hours()%12||12}function rt(e,t){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function at(e,t){return t._meridiemParse}s(\"H\",[\"HH\",2],0,\"hour\"),s(\"h\",[\"hh\",2],0,it),s(\"k\",[\"kk\",2],0,function(){return this.hours()||24}),s(\"hmm\",0,0,function(){return\"\"+it.apply(this)+r(this.minutes(),2)}),s(\"hmmss\",0,0,function(){return\"\"+it.apply(this)+r(this.minutes(),2)+r(this.seconds(),2)}),s(\"Hmm\",0,0,function(){return\"\"+this.hours()+r(this.minutes(),2)}),s(\"Hmmss\",0,0,function(){return\"\"+this.hours()+r(this.minutes(),2)+r(this.seconds(),2)}),rt(\"a\",!0),rt(\"A\",!1),h(\"a\",at),h(\"A\",at),h(\"H\",n,d),h(\"h\",n,u),h(\"k\",n,u),h(\"HH\",n,t),h(\"hh\",n,t),h(\"kk\",n,t),h(\"hmm\",me),h(\"hmmss\",_e),h(\"Hmm\",me),h(\"Hmmss\",_e),v([\"H\",\"HH\"],O),v([\"k\",\"kk\"],function(e,t,n){e=M(e);t[O]=24===e?0:e}),v([\"a\",\"A\"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),v([\"h\",\"hh\"],function(e,t,n){t[O]=M(e),p(n).bigHour=!0}),v(\"hmm\",function(e,t,n){var s=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s)),p(n).bigHour=!0}),v(\"hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s,2)),t[T]=M(e.substr(i)),p(n).bigHour=!0}),v(\"Hmm\",function(e,t,n){var s=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s))}),v(\"Hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s,2)),t[T]=M(e.substr(i))});i=Re(\"Hours\",!0);var ot,ut={calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},longDateFormat:{LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},invalidDate:\"Invalid date\",ordinal:\"%d\",dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},months:Fe,monthsShort:Le,week:{dow:0,doy:6},weekdays:Qe,weekdaysMin:Ke,weekdaysShort:Xe,meridiemParse:/[ap]\\.?m?\\.?/i},W={},lt={};function dt(e){return e&&e.toLowerCase().replace(\"_\",\"-\")}function ht(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=dt(e[r]).split(\"-\")).length,n=(n=dt(e[r+1]))?n.split(\"-\"):null;0<t;){if(s=ct(i.slice(0,t).join(\"-\")))return s;if(n&&n.length>=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s<n;s+=1)if(e[s]!==t[s])return s;return n}(i,n)>=t-1)break;t--}r++}return ot}function ct(t){var e,n;if(void 0===W[t]&&\"undefined\"!=typeof module&&module&&module.exports&&(n=t)&&n.match(\"^[^/\\\\\\\\]*$\"))try{e=ot._abbr,require(\"./locale/\"+t),ft(e)}catch(e){W[t]=null}return W[t]}function ft(e,t){return e&&((t=g(t)?P(e):mt(e,t))?ot=t:\"undefined\"!=typeof console&&console.warn&&console.warn(\"Locale \"+e+\" not found. Did you forget to load it?\")),ot._abbr}function mt(e,t){if(null===t)return delete W[e],null;var n,s=ut;if(t.abbr=e,null!=W[e])Q(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),s=W[e]._config;else if(null!=t.parentLocale)if(null!=W[t.parentLocale])s=W[t.parentLocale]._config;else{if(null==(n=ct(t.parentLocale)))return lt[t.parentLocale]||(lt[t.parentLocale]=[]),lt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return W[e]=new K(X(s,t)),lt[e]&&lt[e].forEach(function(e){mt(e.name,e.config)}),ft(e),W[e]}function P(e){var t;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return ot;if(!y(e)){if(t=ct(e))return t;e=[e]}return ht(e)}function _t(e){var t=e._a;return t&&-2===p(e).overflow&&(t=t[Y]<0||11<t[Y]?Y:t[S]<1||t[S]>He(t[D],t[Y])?S:t[O]<0||24<t[O]||24===t[O]&&(0!==t[b]||0!==t[T]||0!==t[Te])?O:t[b]<0||59<t[b]?b:t[T]<0||59<t[T]?T:t[Te]<0||999<t[Te]?Te:-1,p(e)._overflowDayOfYear&&(t<D||S<t)&&(t=S),p(e)._overflowWeeks&&-1===t&&(t=xe),p(e)._overflowWeekday&&-1===t&&(t=Ne),p(e).overflow=t),e}var yt=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,gt=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,wt=/Z|[+-]\\d\\d(?::?\\d\\d)?/,pt=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],kt=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],Mt=/^\\/?Date\\((-?\\d+)/i,vt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,Dt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Yt(e){var t,n,s,i,r,a,o=e._i,u=yt.exec(o)||gt.exec(o),o=pt.length,l=kt.length;if(u){for(p(e).iso=!0,t=0,n=o;t<n;t++)if(pt[t][1].exec(u[1])){i=pt[t][0],s=!1!==pt[t][2];break}if(null==i)e._isValid=!1;else{if(u[3]){for(t=0,n=l;t<n;t++)if(kt[t][1].exec(u[3])){r=(u[2]||\" \")+kt[t][0];break}if(null==r)return void(e._isValid=!1)}if(s||null==r){if(u[4]){if(!wt.exec(u[4]))return void(e._isValid=!1);a=\"Z\"}e._f=i+(r||\"\")+(a||\"\"),xt(e)}else e._isValid=!1}}else e._isValid=!1}function St(e,t,n,s,i,r){e=[function(e){e=parseInt(e,10);{if(e<=49)return 2e3+e;if(e<=999)return 1900+e}return e}(e),Le.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&e.push(parseInt(r,10)),e}function Ot(e){var t,n,s=vt.exec(e._i.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\"));s?(t=St(s[4],s[3],s[2],s[5],s[6],s[7]),function(e,t,n){if(!e||Xe.indexOf(e)===new Date(t[0],t[1],t[2]).getDay())return 1;p(n).weekdayMismatch=!0,n._isValid=!1}(s[1],t,e)&&(e._a=t,e._tzm=(t=s[8],n=s[9],s=s[10],t?Dt[t]:n?0:60*(((t=parseInt(s,10))-(n=t%100))/100)+n),e._d=ze.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),p(e).rfc2822=!0)):e._isValid=!1}function bt(e,t,n){return null!=e?e:null!=t?t:n}function Tt(e){var t,n,s,i,r,a,o,u,l,d,h,c=[];if(!e._d){for(s=e,i=new Date(_.now()),n=s._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()],e._w&&null==e._a[S]&&null==e._a[Y]&&(null!=(i=(s=e)._w).GG||null!=i.W||null!=i.E?(u=1,l=4,r=bt(i.GG,s._a[D],Be(R(),1,4).year),a=bt(i.W,1),((o=bt(i.E,1))<1||7<o)&&(d=!0)):(u=s._locale._week.dow,l=s._locale._week.doy,h=Be(R(),u,l),r=bt(i.gg,s._a[D],h.year),a=bt(i.w,h.week),null!=i.d?((o=i.d)<0||6<o)&&(d=!0):null!=i.e?(o=i.e+u,(i.e<0||6<i.e)&&(d=!0)):o=u),a<1||a>N(r,u,l)?p(s)._overflowWeeks=!0:null!=d?p(s)._overflowWeekday=!0:(h=$e(r,a,o,u,l),s._a[D]=h.year,s._dayOfYear=h.dayOfYear)),null!=e._dayOfYear&&(i=bt(e._a[D],n[D]),(e._dayOfYear>We(i)||0===e._dayOfYear)&&(p(e)._overflowDayOfYear=!0),d=ze(i,0,e._dayOfYear),e._a[Y]=d.getUTCMonth(),e._a[S]=d.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=c[t]=n[t];for(;t<7;t++)e._a[t]=c[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[O]&&0===e._a[b]&&0===e._a[T]&&0===e._a[Te]&&(e._nextDay=!0,e._a[O]=0),e._d=(e._useUTC?ze:Ze).apply(null,c),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[O]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(p(e).weekdayMismatch=!0)}}function xt(e){if(e._f===_.ISO_8601)Yt(e);else if(e._f===_.RFC_2822)Ot(e);else{e._a=[],p(e).empty=!0;for(var t,n,s,i,r,a=\"\"+e._i,o=a.length,u=0,l=ae(e._f,e._locale).match(te)||[],d=l.length,h=0;h<d;h++)n=l[h],(t=(a.match(De(n,e))||[])[0])&&(0<(s=a.substr(0,a.indexOf(t))).length&&p(e).unusedInput.push(s),a=a.slice(a.indexOf(t)+t.length),u+=t.length),ie[n]?(t?p(e).empty=!1:p(e).unusedTokens.push(n),s=n,r=e,null!=(i=t)&&c(Se,s)&&Se[s](i,r._a,r,s)):e._strict&&!t&&p(e).unusedTokens.push(n);p(e).charsLeftOver=o-u,0<a.length&&p(e).unusedInput.push(a),e._a[O]<=12&&!0===p(e).bigHour&&0<e._a[O]&&(p(e).bigHour=void 0),p(e).parsedDateParts=e._a.slice(0),p(e).meridiem=e._meridiem,e._a[O]=function(e,t,n){if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((e=e.isPM(n))&&t<12&&(t+=12),t=e||12!==t?t:0):t}(e._locale,e._a[O],e._meridiem),null!==(o=p(e).era)&&(e._a[D]=e._locale.erasConvertYear(o,e._a[D])),Tt(e),_t(e)}}function Nt(e){var t,n,s,i=e._i,r=e._f;if(e._locale=e._locale||P(e._l),null===i||void 0===r&&\"\"===i)return I({nullInput:!0});if(\"string\"==typeof i&&(e._i=i=e._locale.preparse(i)),k(i))return new $(_t(i));if(V(i))e._d=i;else if(y(r)){var a,o,u,l,d,h,c=e,f=!1,m=c._f.length;if(0===m)p(c).invalidFormat=!0,c._d=new Date(NaN);else{for(l=0;l<m;l++)d=0,h=!1,a=q({},c),null!=c._useUTC&&(a._useUTC=c._useUTC),a._f=c._f[l],xt(a),A(a)&&(h=!0),d=(d+=p(a).charsLeftOver)+10*p(a).unusedTokens.length,p(a).score=d,f?d<u&&(u=d,o=a):(null==u||d<u||h)&&(u=d,o=a,h)&&(f=!0);E(c,o||a)}}else if(r)xt(e);else if(g(r=(i=e)._i))i._d=new Date(_.now());else V(r)?i._d=new Date(r.valueOf()):\"string\"==typeof r?(n=i,null!==(t=Mt.exec(n._i))?n._d=new Date(+t[1]):(Yt(n),!1===n._isValid&&(delete n._isValid,Ot(n),!1===n._isValid)&&(delete n._isValid,n._strict?n._isValid=!1:_.createFromInputFallback(n)))):y(r)?(i._a=G(r.slice(0),function(e){return parseInt(e,10)}),Tt(i)):F(r)?(t=i)._d||(s=void 0===(n=ue(t._i)).day?n.date:n.day,t._a=G([n.year,n.month,s,n.hour,n.minute,n.second,n.millisecond],function(e){return e&&parseInt(e,10)}),Tt(t)):w(r)?i._d=new Date(r):_.createFromInputFallback(i);return A(e)||(e._d=null),e}function Wt(e,t,n,s,i){var r={};return!0!==t&&!1!==t||(s=t,t=void 0),!0!==n&&!1!==n||(s=n,n=void 0),(F(e)&&L(e)||y(e)&&0===e.length)&&(e=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=i,r._l=n,r._i=e,r._f=t,r._strict=s,(i=new $(_t(Nt(i=r))))._nextDay&&(i.add(1,\"d\"),i._nextDay=void 0),i}function R(e,t,n,s){return Wt(e,t,n,s,!1)}_.createFromInputFallback=e(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(e){e._d=new Date(e._i+(e._useUTC?\" UTC\":\"\"))}),_.ISO_8601=function(){},_.RFC_2822=function(){};me=e(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=R.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:I()}),_e=e(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=R.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:I()});function Pt(e,t){var n,s;if(!(t=1===t.length&&y(t[0])?t[0]:t).length)return R();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Rt=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Ct(e){var e=ue(e),t=e.year||0,n=e.quarter||0,s=e.month||0,i=e.week||e.isoWeek||0,r=e.day||0,a=e.hour||0,o=e.minute||0,u=e.second||0,l=e.millisecond||0;this._isValid=function(e){var t,n,s=!1,i=Rt.length;for(t in e)if(c(e,t)&&(-1===x.call(Rt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<i;++n)if(e[Rt[n]]){if(s)return!1;parseFloat(e[Rt[n]])!==M(e[Rt[n]])&&(s=!0)}return!0}(e),this._milliseconds=+l+1e3*u+6e4*o+1e3*a*60*60,this._days=+r+7*i,this._months=+s+3*n+12*t,this._data={},this._locale=P(),this._bubble()}function Ut(e){return e instanceof Ct}function Ht(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){s(e,0,0,function(){var e=this.utcOffset(),t=\"+\";return e<0&&(e=-e,t=\"-\"),t+r(~~(e/60),2)+n+r(~~e%60,2)})}Ft(\"Z\",\":\"),Ft(\"ZZ\",\"\"),h(\"Z\",ve),h(\"ZZ\",ve),v([\"Z\",\"ZZ\"],function(e,t,n){n._useUTC=!0,n._tzm=Vt(ve,e)});var Lt=/([\\+\\-]|\\d\\d)/gi;function Vt(e,t){var t=(t||\"\").match(e);return null===t?null:0===(t=60*(e=((t[t.length-1]||[])+\"\").match(Lt)||[\"-\",0,0])[1]+M(e[2]))?0:\"+\"===e[0]?t:-t}function Gt(e,t){var n;return t._isUTC?(t=t.clone(),n=(k(e)||V(e)?e:R(e)).valueOf()-t.valueOf(),t._d.setTime(t._d.valueOf()+n),_.updateOffset(t,!1),t):R(e).local()}function Et(e){return-Math.round(e._d.getTimezoneOffset())}function At(){return!!this.isValid()&&this._isUTC&&0===this._offset}_.updateOffset=function(){};var It=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,jt=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function C(e,t){var n,s=e;return Ut(e)?s={ms:e._milliseconds,d:e._days,M:e._months}:w(e)||!isNaN(+e)?(s={},t?s[t]=+e:s.milliseconds=+e):(t=It.exec(e))?(n=\"-\"===t[1]?-1:1,s={y:0,d:M(t[S])*n,h:M(t[O])*n,m:M(t[b])*n,s:M(t[T])*n,ms:M(Ht(1e3*t[Te]))*n}):(t=jt.exec(e))?(n=\"-\"===t[1]?-1:1,s={y:Zt(t[2],n),M:Zt(t[3],n),w:Zt(t[4],n),d:Zt(t[5],n),h:Zt(t[6],n),m:Zt(t[7],n),s:Zt(t[8],n)}):null==s?s={}:\"object\"==typeof s&&(\"from\"in s||\"to\"in s)&&(t=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Gt(t,e),e.isBefore(t)?n=zt(e,t):((n=zt(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(R(s.from),R(s.to)),(s={}).ms=t.milliseconds,s.M=t.months),n=new Ct(s),Ut(e)&&c(e,\"_locale\")&&(n._locale=e._locale),Ut(e)&&c(e,\"_isValid\")&&(n._isValid=e._isValid),n}function Zt(e,t){e=e&&parseFloat(e.replace(\",\",\".\"));return(isNaN(e)?0:e)*t}function zt(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,\"M\").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,\"M\"),n}function qt(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(Q(i,\"moment().\"+i+\"(period, number) is deprecated. Please use moment().\"+i+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),n=e,e=t,t=n),$t(this,C(e,t),s),this}}function $t(e,t,n,s){var i=t._milliseconds,r=Ht(t._days),t=Ht(t._months);e.isValid()&&(s=null==s||s,t&&Ae(e,Ce(e,\"Month\")+t*n),r&&Ue(e,\"Date\",Ce(e,\"Date\")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s)&&_.updateOffset(e,r||t)}C.fn=Ct.prototype,C.invalid=function(){return C(NaN)};Fe=qt(1,\"add\"),Qe=qt(-1,\"subtract\");function Bt(e){return\"string\"==typeof e||e instanceof String}function Jt(e){return k(e)||V(e)||Bt(e)||w(e)||function(t){var e=y(t),n=!1;e&&(n=0===t.filter(function(e){return!w(e)&&Bt(t)}).length);return e&&n}(e)||function(e){var t,n,s=F(e)&&!L(e),i=!1,r=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],a=r.length;for(t=0;t<a;t+=1)n=r[t],i=i||c(e,n);return s&&i}(e)||null==e}function Qt(e,t){var n,s;return e.date()<t.date()?-Qt(t,e):-((n=12*(t.year()-e.year())+(t.month()-e.month()))+(t-(s=e.clone().add(n,\"months\"))<0?(t-s)/(s-e.clone().add(n-1,\"months\")):(t-s)/(e.clone().add(1+n,\"months\")-s)))||0}function Xt(e){return void 0===e?this._locale._abbr:(null!=(e=P(e))&&(this._locale=e),this)}_.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",_.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";Ke=e(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(e){return void 0===e?this.localeData():this.locale(e)});function Kt(){return this._locale}var en=126227808e5;function tn(e,t){return(e%t+t)%t}function nn(e,t,n){return e<100&&0<=e?new Date(e+400,t,n)-en:new Date(e,t,n).valueOf()}function sn(e,t,n){return e<100&&0<=e?Date.UTC(e+400,t,n)-en:Date.UTC(e,t,n)}function rn(e,t){return t.erasAbbrRegex(e)}function an(){for(var e,t,n,s=[],i=[],r=[],a=[],o=this.eras(),u=0,l=o.length;u<l;++u)e=f(o[u].name),t=f(o[u].abbr),n=f(o[u].narrow),i.push(e),s.push(t),r.push(n),a.push(e),a.push(t),a.push(n);this._erasRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\")}function on(e,t){s(0,[e,e.length],0,t)}function un(e,t,n,s,i){var r;return null==e?Be(this,s,i).year:(r=N(e,s,i),function(e,t,n,s,i){e=$e(e,t,n,s,i),t=ze(e.year,0,e.dayOfYear);return this.year(t.getUTCFullYear()),this.month(t.getUTCMonth()),this.date(t.getUTCDate()),this}.call(this,e,t=r<t?r:t,n,s,i))}s(\"N\",0,0,\"eraAbbr\"),s(\"NN\",0,0,\"eraAbbr\"),s(\"NNN\",0,0,\"eraAbbr\"),s(\"NNNN\",0,0,\"eraName\"),s(\"NNNNN\",0,0,\"eraNarrow\"),s(\"y\",[\"y\",1],\"yo\",\"eraYear\"),s(\"y\",[\"yy\",2],0,\"eraYear\"),s(\"y\",[\"yyy\",3],0,\"eraYear\"),s(\"y\",[\"yyyy\",4],0,\"eraYear\"),h(\"N\",rn),h(\"NN\",rn),h(\"NNN\",rn),h(\"NNNN\",function(e,t){return t.erasNameRegex(e)}),h(\"NNNNN\",function(e,t){return t.erasNarrowRegex(e)}),v([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],function(e,t,n,s){s=n._locale.erasParse(e,s,n._strict);s?p(n).era=s:p(n).invalidEra=e}),h(\"y\",pe),h(\"yy\",pe),h(\"yyy\",pe),h(\"yyyy\",pe),h(\"yo\",function(e,t){return t._eraYearOrdinalRegex||pe}),v([\"y\",\"yy\",\"yyy\",\"yyyy\"],D),v([\"yo\"],function(e,t,n,s){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[D]=n._locale.eraYearOrdinalParse(e,i):t[D]=parseInt(e,10)}),s(0,[\"gg\",2],0,function(){return this.weekYear()%100}),s(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100}),on(\"gggg\",\"weekYear\"),on(\"ggggg\",\"weekYear\"),on(\"GGGG\",\"isoWeekYear\"),on(\"GGGGG\",\"isoWeekYear\"),h(\"G\",ke),h(\"g\",ke),h(\"GG\",n,t),h(\"gg\",n,t),h(\"GGGG\",ge,ce),h(\"gggg\",ge,ce),h(\"GGGGG\",we,fe),h(\"ggggg\",we,fe),Oe([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(e,t,n,s){t[s.substr(0,2)]=M(e)}),Oe([\"gg\",\"GG\"],function(e,t,n,s){t[s]=_.parseTwoDigitYear(e)}),s(\"Q\",0,\"Qo\",\"quarter\"),h(\"Q\",de),v(\"Q\",function(e,t){t[Y]=3*(M(e)-1)}),s(\"D\",[\"DD\",2],\"Do\",\"date\"),h(\"D\",n,u),h(\"DD\",n,t),h(\"Do\",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),v([\"D\",\"DD\"],S),v(\"Do\",function(e,t){t[S]=M(e.match(n)[0])});ge=Re(\"Date\",!0);s(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),h(\"DDD\",ye),h(\"DDDD\",he),v([\"DDD\",\"DDDD\"],function(e,t,n){n._dayOfYear=M(e)}),s(\"m\",[\"mm\",2],0,\"minute\"),h(\"m\",n,d),h(\"mm\",n,t),v([\"m\",\"mm\"],b);var ln,ce=Re(\"Minutes\",!1),we=(s(\"s\",[\"ss\",2],0,\"second\"),h(\"s\",n,d),h(\"ss\",n,t),v([\"s\",\"ss\"],T),Re(\"Seconds\",!1));for(s(\"S\",0,0,function(){return~~(this.millisecond()/100)}),s(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),s(0,[\"SSS\",3],0,\"millisecond\"),s(0,[\"SSSS\",4],0,function(){return 10*this.millisecond()}),s(0,[\"SSSSS\",5],0,function(){return 100*this.millisecond()}),s(0,[\"SSSSSS\",6],0,function(){return 1e3*this.millisecond()}),s(0,[\"SSSSSSS\",7],0,function(){return 1e4*this.millisecond()}),s(0,[\"SSSSSSSS\",8],0,function(){return 1e5*this.millisecond()}),s(0,[\"SSSSSSSSS\",9],0,function(){return 1e6*this.millisecond()}),h(\"S\",ye,de),h(\"SS\",ye,t),h(\"SSS\",ye,he),ln=\"SSSS\";ln.length<=9;ln+=\"S\")h(ln,pe);function dn(e,t){t[Te]=M(1e3*(\"0.\"+e))}for(ln=\"S\";ln.length<=9;ln+=\"S\")v(ln,dn);fe=Re(\"Milliseconds\",!1),s(\"z\",0,0,\"zoneAbbr\"),s(\"zz\",0,0,\"zoneName\");u=$.prototype;function hn(e){return e}u.add=Fe,u.calendar=function(e,t){1===arguments.length&&(arguments[0]?Jt(arguments[0])?(e=arguments[0],t=void 0):function(e){for(var t=F(e)&&!L(e),n=!1,s=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"],i=0;i<s.length;i+=1)n=n||c(e,s[i]);return t&&n}(arguments[0])&&(t=arguments[0],e=void 0):t=e=void 0);var e=e||R(),n=Gt(e,this).startOf(\"day\"),n=_.calendarFormat(this,n)||\"sameElse\",t=t&&(a(t[n])?t[n].call(this,e):t[n]);return this.format(t||this.localeData().calendar(n,this,R(e)))},u.clone=function(){return new $(this)},u.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Gt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=o(t)){case\"year\":r=Qt(this,s)/12;break;case\"month\":r=Qt(this,s);break;case\"quarter\":r=Qt(this,s)/3;break;case\"second\":r=(this-s)/1e3;break;case\"minute\":r=(this-s)/6e4;break;case\"hour\":r=(this-s)/36e5;break;case\"day\":r=(this-s-i)/864e5;break;case\"week\":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:m(r)},u.endOf=function(e){var t,n;if(void 0!==(e=o(e))&&\"millisecond\"!==e&&this.isValid()){switch(n=this._isUTC?sn:nn,e){case\"year\":t=n(this.year()+1,0,1)-1;break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":t=n(this.year(),this.month()+1,1)-1;break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":t=this._d.valueOf(),t+=36e5-tn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case\"minute\":t=this._d.valueOf(),t+=6e4-tn(t,6e4)-1;break;case\"second\":t=this._d.valueOf(),t+=1e3-tn(t,1e3)-1;break}this._d.setTime(t),_.updateOffset(this,!0)}return this},u.format=function(e){return e=e||(this.isUtc()?_.defaultFormatUtc:_.defaultFormat),e=re(this,e),this.localeData().postformat(e)},u.from=function(e,t){return this.isValid()&&(k(e)&&e.isValid()||R(e).isValid())?C({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},u.fromNow=function(e){return this.from(R(),e)},u.to=function(e,t){return this.isValid()&&(k(e)&&e.isValid()||R(e).isValid())?C({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},u.toNow=function(e){return this.to(R(),e)},u.get=function(e){return a(this[e=o(e)])?this[e]():this},u.invalidAt=function(){return p(this).overflow},u.isAfter=function(e,t){return e=k(e)?e:R(e),!(!this.isValid()||!e.isValid())&&(\"millisecond\"===(t=o(t)||\"millisecond\")?this.valueOf()>e.valueOf():e.valueOf()<this.clone().startOf(t).valueOf())},u.isBefore=function(e,t){return e=k(e)?e:R(e),!(!this.isValid()||!e.isValid())&&(\"millisecond\"===(t=o(t)||\"millisecond\")?this.valueOf()<e.valueOf():this.clone().endOf(t).valueOf()<e.valueOf())},u.isBetween=function(e,t,n,s){return e=k(e)?e:R(e),t=k(t)?t:R(t),!!(this.isValid()&&e.isValid()&&t.isValid())&&(\"(\"===(s=s||\"()\")[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(\")\"===s[1]?this.isBefore(t,n):!this.isAfter(t,n))},u.isSame=function(e,t){var e=k(e)?e:R(e);return!(!this.isValid()||!e.isValid())&&(\"millisecond\"===(t=o(t)||\"millisecond\")?this.valueOf()===e.valueOf():(e=e.valueOf(),this.clone().startOf(t).valueOf()<=e&&e<=this.clone().endOf(t).valueOf()))},u.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},u.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},u.isValid=function(){return A(this)},u.lang=Ke,u.locale=Xt,u.localeData=Kt,u.max=_e,u.min=me,u.parsingFlags=function(){return E({},p(this))},u.set=function(e,t){if(\"object\"==typeof e)for(var n=function(e){var t,n=[];for(t in e)c(e,t)&&n.push({unit:t,priority:le[t]});return n.sort(function(e,t){return e.priority-t.priority}),n}(e=ue(e)),s=n.length,i=0;i<s;i++)this[n[i].unit](e[n[i].unit]);else if(a(this[e=o(e)]))return this[e](t);return this},u.startOf=function(e){var t,n;if(void 0!==(e=o(e))&&\"millisecond\"!==e&&this.isValid()){switch(n=this._isUTC?sn:nn,e){case\"year\":t=n(this.year(),0,1);break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3,1);break;case\"month\":t=n(this.year(),this.month(),1);break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date());break;case\"hour\":t=this._d.valueOf(),t-=tn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case\"minute\":t=this._d.valueOf(),t-=tn(t,6e4);break;case\"second\":t=this._d.valueOf(),t-=tn(t,1e3);break}this._d.setTime(t),_.updateOffset(this,!0)}return this},u.subtract=Qe,u.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},u.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},u.toDate=function(){return new Date(this.valueOf())},u.toISOString=function(e){var t;return this.isValid()?(t=(e=!0!==e)?this.clone().utc():this).year()<0||9999<t.year()?re(t,e?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):a(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace(\"Z\",re(t,\"Z\")):re(t,e?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\"):null},u.inspect=function(){var e,t,n;return this.isValid()?(t=\"moment\",e=\"\",this.isLocal()||(t=0===this.utcOffset()?\"moment.utc\":\"moment.parseZone\",e=\"Z\"),t=\"[\"+t+'(\"]',n=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",this.format(t+n+\"-MM-DD[T]HH:mm:ss.SSS\"+(e+'[\")]'))):\"moment.invalid(/* \"+this._i+\" */)\"},\"undefined\"!=typeof Symbol&&null!=Symbol.for&&(u[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),u.toJSON=function(){return this.isValid()?this.toISOString():null},u.toString=function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},u.unix=function(){return Math.floor(this.valueOf()/1e3)},u.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},u.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},u.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf(\"day\").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].name;if(t[n].until<=e&&e<=t[n].since)return t[n].name}return\"\"},u.eraNarrow=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf(\"day\").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].narrow;if(t[n].until<=e&&e<=t[n].since)return t[n].narrow}return\"\"},u.eraAbbr=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf(\"day\").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].abbr;if(t[n].until<=e&&e<=t[n].since)return t[n].abbr}return\"\"},u.eraYear=function(){for(var e,t,n=this.localeData().eras(),s=0,i=n.length;s<i;++s)if(e=n[s].since<=n[s].until?1:-1,t=this.clone().startOf(\"day\").valueOf(),n[s].since<=t&&t<=n[s].until||n[s].until<=t&&t<=n[s].since)return(this.year()-_(n[s].since).year())*e+n[s].offset;return this.year()},u.year=Pe,u.isLeapYear=function(){return be(this.year())},u.weekYear=function(e){return un.call(this,e,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)},u.isoWeekYear=function(e){return un.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},u.quarter=u.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},u.month=Ie,u.daysInMonth=function(){return He(this.year(),this.month())},u.week=u.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),\"d\")},u.isoWeek=u.isoWeeks=function(e){var t=Be(this,1,4).week;return null==e?t:this.add(7*(e-t),\"d\")},u.weeksInYear=function(){var e=this.localeData()._week;return N(this.year(),e.dow,e.doy)},u.weeksInWeekYear=function(){var e=this.localeData()._week;return N(this.weekYear(),e.dow,e.doy)},u.isoWeeksInYear=function(){return N(this.year(),1,4)},u.isoWeeksInISOWeekYear=function(){return N(this.isoWeekYear(),1,4)},u.date=ge,u.day=u.days=function(e){var t,n,s;return this.isValid()?(t=Ce(this,\"Day\"),null!=e?(n=e,s=this.localeData(),e=\"string\"!=typeof n?n:isNaN(n)?\"number\"==typeof(n=s.weekdaysParse(n))?n:null:parseInt(n,10),this.add(e-t,\"d\")):t):null!=e?this:NaN},u.weekday=function(e){var t;return this.isValid()?(t=(this.day()+7-this.localeData()._week.dow)%7,null==e?t:this.add(e-t,\"d\")):null!=e?this:NaN},u.isoWeekday=function(e){var t,n;return this.isValid()?null!=e?(t=e,n=this.localeData(),n=\"string\"==typeof t?n.weekdaysParse(t)%7||7:isNaN(t)?null:t,this.day(this.day()%7?n:n-7)):this.day()||7:null!=e?this:NaN},u.dayOfYear=function(e){var t=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==e?t:this.add(e-t,\"d\")},u.hour=u.hours=i,u.minute=u.minutes=ce,u.second=u.seconds=we,u.millisecond=u.milliseconds=fe,u.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?i:Et(this);if(\"string\"==typeof e){if(null===(e=Vt(ve,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Et(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,\"m\"),i!==e&&(!t||this._changeInProgress?$t(this,C(e-i,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,_.updateOffset(this,!0),this._changeInProgress=null)),this},u.utc=function(e){return this.utcOffset(0,e)},u.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e)&&this.subtract(Et(this),\"m\"),this},u.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):\"string\"==typeof this._i&&(null!=(e=Vt(Me,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},u.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?R(e).utcOffset():0,(this.utcOffset()-e)%60==0)},u.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},u.isLocal=function(){return!!this.isValid()&&!this._isUTC},u.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},u.isUtc=At,u.isUTC=At,u.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},u.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},u.dates=e(\"dates accessor is deprecated. Use date instead.\",ge),u.months=e(\"months accessor is deprecated. Use month instead\",Ie),u.years=e(\"years accessor is deprecated. Use year instead\",Pe),u.zone=e(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",function(e,t){return null!=e?(this.utcOffset(e=\"string\"!=typeof e?-e:e,t),this):-this.utcOffset()}),u.isDSTShifted=e(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",function(){var e,t;return g(this._isDSTShifted)&&(q(e={},this),(e=Nt(e))._a?(t=(e._isUTC?l:R)(e._a),this._isDSTShifted=this.isValid()&&0<function(e,t,n){for(var s=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),r=0,a=0;a<s;a++)(n&&e[a]!==t[a]||!n&&M(e[a])!==M(t[a]))&&r++;return r+i}(e._a,t.toArray())):this._isDSTShifted=!1),this._isDSTShifted});d=K.prototype;function cn(e,t,n,s){var i=P(),s=l().set(s,t);return i[n](s,e)}function fn(e,t,n){if(w(e)&&(t=e,e=void 0),e=e||\"\",null!=t)return cn(e,t,n,\"month\");for(var s=[],i=0;i<12;i++)s[i]=cn(e,i,n,\"month\");return s}function mn(e,t,n,s){t=(\"boolean\"==typeof e?w(t)&&(n=t,t=void 0):(t=e,e=!1,w(n=t)&&(n=t,t=void 0)),t||\"\");var i,r=P(),a=e?r._week.dow:0,o=[];if(null!=n)return cn(t,(n+a)%7,s,\"day\");for(i=0;i<7;i++)o[i]=cn(t,(i+a)%7,s,\"day\");return o}d.calendar=function(e,t,n){return a(e=this._calendar[e]||this._calendar.sameElse)?e.call(t,n):e},d.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(te).map(function(e){return\"MMMM\"===e||\"MM\"===e||\"DD\"===e||\"dddd\"===e?e.slice(1):e}).join(\"\"),this._longDateFormat[e])},d.invalidDate=function(){return this._invalidDate},d.ordinal=function(e){return this._ordinal.replace(\"%d\",e)},d.preparse=hn,d.postformat=hn,d.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return a(i)?i(e,t,n,s):i.replace(/%d/i,e)},d.pastFuture=function(e,t){return a(e=this._relativeTime[0<e?\"future\":\"past\"])?e(t):e.replace(/%s/i,t)},d.set=function(e){var t,n;for(n in e)c(e,n)&&(a(t=e[n])?this[n]=t:this[\"_\"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)},d.eras=function(e,t){for(var n,s=this._eras||P(\"en\")._eras,i=0,r=s.length;i<r;++i){switch(typeof s[i].since){case\"string\":n=_(s[i].since).startOf(\"day\"),s[i].since=n.valueOf();break}switch(typeof s[i].until){case\"undefined\":s[i].until=1/0;break;case\"string\":n=_(s[i].until).startOf(\"day\").valueOf(),s[i].until=n.valueOf();break}}return s},d.erasParse=function(e,t,n){var s,i,r,a,o,u=this.eras();for(e=e.toUpperCase(),s=0,i=u.length;s<i;++s)if(r=u[s].name.toUpperCase(),a=u[s].abbr.toUpperCase(),o=u[s].narrow.toUpperCase(),n)switch(t){case\"N\":case\"NN\":case\"NNN\":if(a===e)return u[s];break;case\"NNNN\":if(r===e)return u[s];break;case\"NNNNN\":if(o===e)return u[s];break}else if(0<=[r,a,o].indexOf(e))return u[s]},d.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?_(e.since).year():_(e.since).year()+(t-e.offset)*n},d.erasAbbrRegex=function(e){return c(this,\"_erasAbbrRegex\")||an.call(this),e?this._erasAbbrRegex:this._erasRegex},d.erasNameRegex=function(e){return c(this,\"_erasNameRegex\")||an.call(this),e?this._erasNameRegex:this._erasRegex},d.erasNarrowRegex=function(e){return c(this,\"_erasNarrowRegex\")||an.call(this),e?this._erasNarrowRegex:this._erasRegex},d.months=function(e,t){return e?(y(this._months)?this._months:this._months[(this._months.isFormat||Ve).test(t)?\"format\":\"standalone\"])[e.month()]:y(this._months)?this._months:this._months.standalone},d.monthsShort=function(e,t){return e?(y(this._monthsShort)?this._monthsShort:this._monthsShort[Ve.test(t)?\"format\":\"standalone\"])[e.month()]:y(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},d.monthsParse=function(e,t,n){var s,i;if(this._monthsParseExact)return function(e,t,n){var s,i,r,e=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=l([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,\"\").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,\"\").toLocaleLowerCase();return n?\"MMM\"===t?-1!==(i=x.call(this._shortMonthsParse,e))?i:null:-1!==(i=x.call(this._longMonthsParse,e))?i:null:\"MMM\"===t?-1!==(i=x.call(this._shortMonthsParse,e))||-1!==(i=x.call(this._longMonthsParse,e))?i:null:-1!==(i=x.call(this._longMonthsParse,e))||-1!==(i=x.call(this._shortMonthsParse,e))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=l([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp(\"^\"+this.months(i,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[s]=new RegExp(\"^\"+this.monthsShort(i,\"\").replace(\".\",\"\")+\"$\",\"i\")),n||this._monthsParse[s]||(i=\"^\"+this.months(i,\"\")+\"|^\"+this.monthsShort(i,\"\"),this._monthsParse[s]=new RegExp(i.replace(\".\",\"\"),\"i\")),n&&\"MMMM\"===t&&this._longMonthsParse[s].test(e))return s;if(n&&\"MMM\"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},d.monthsRegex=function(e){return this._monthsParseExact?(c(this,\"_monthsRegex\")||je.call(this),e?this._monthsStrictRegex:this._monthsRegex):(c(this,\"_monthsRegex\")||(this._monthsRegex=Ee),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},d.monthsShortRegex=function(e){return this._monthsParseExact?(c(this,\"_monthsRegex\")||je.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,\"_monthsShortRegex\")||(this._monthsShortRegex=Ge),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},d.week=function(e){return Be(e,this._week.dow,this._week.doy).week},d.firstDayOfYear=function(){return this._week.doy},d.firstDayOfWeek=function(){return this._week.dow},d.weekdays=function(e,t){return t=y(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?\"format\":\"standalone\"],!0===e?Je(t,this._week.dow):e?t[e.day()]:t},d.weekdaysMin=function(e){return!0===e?Je(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},d.weekdaysShort=function(e){return!0===e?Je(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},d.weekdaysParse=function(e,t,n){var s,i;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,e=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=l([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,\"\").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,\"\").toLocaleLowerCase();return n?\"dddd\"===t?-1!==(i=x.call(this._weekdaysParse,e))?i:null:\"ddd\"===t?-1!==(i=x.call(this._shortWeekdaysParse,e))?i:null:-1!==(i=x.call(this._minWeekdaysParse,e))?i:null:\"dddd\"===t?-1!==(i=x.call(this._weekdaysParse,e))||-1!==(i=x.call(this._shortWeekdaysParse,e))||-1!==(i=x.call(this._minWeekdaysParse,e))?i:null:\"ddd\"===t?-1!==(i=x.call(this._shortWeekdaysParse,e))||-1!==(i=x.call(this._weekdaysParse,e))||-1!==(i=x.call(this._minWeekdaysParse,e))?i:null:-1!==(i=x.call(this._minWeekdaysParse,e))||-1!==(i=x.call(this._weekdaysParse,e))||-1!==(i=x.call(this._shortWeekdaysParse,e))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=l([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp(\"^\"+this.weekdays(i,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[s]=new RegExp(\"^\"+this.weekdaysShort(i,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[s]=new RegExp(\"^\"+this.weekdaysMin(i,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[s]||(i=\"^\"+this.weekdays(i,\"\")+\"|^\"+this.weekdaysShort(i,\"\")+\"|^\"+this.weekdaysMin(i,\"\"),this._weekdaysParse[s]=new RegExp(i.replace(\".\",\"\"),\"i\")),n&&\"dddd\"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&\"ddd\"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&\"dd\"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},d.weekdaysRegex=function(e){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||st.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,\"_weekdaysRegex\")||(this._weekdaysRegex=et),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},d.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||st.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=tt),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},d.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||st.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=nt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},d.isPM=function(e){return\"p\"===(e+\"\").toLowerCase().charAt(0)},d.meridiem=function(e,t,n){return 11<e?n?\"pm\":\"PM\":n?\"am\":\"AM\"},ft(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===M(e%100/10)?\"th\":1==t?\"st\":2==t?\"nd\":3==t?\"rd\":\"th\")}}),_.lang=e(\"moment.lang is deprecated. Use moment.locale instead.\",ft),_.langData=e(\"moment.langData is deprecated. Use moment.localeData instead.\",P);var _n=Math.abs;function yn(e,t,n,s){t=C(t,n);return e._milliseconds+=s*t._milliseconds,e._days+=s*t._days,e._months+=s*t._months,e._bubble()}function gn(e){return e<0?Math.floor(e):Math.ceil(e)}function wn(e){return 4800*e/146097}function pn(e){return 146097*e/4800}function kn(e){return function(){return this.as(e)}}de=kn(\"ms\"),t=kn(\"s\"),ye=kn(\"m\"),he=kn(\"h\"),Fe=kn(\"d\"),_e=kn(\"w\"),me=kn(\"M\"),Qe=kn(\"Q\"),i=kn(\"y\"),ce=de;function Mn(e){return function(){return this.isValid()?this._data[e]:NaN}}var we=Mn(\"milliseconds\"),fe=Mn(\"seconds\"),ge=Mn(\"minutes\"),Pe=Mn(\"hours\"),d=Mn(\"days\"),vn=Mn(\"months\"),Dn=Mn(\"years\");var Yn=Math.round,Sn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function On(e,t,n,s){var i=C(e).abs(),r=Yn(i.as(\"s\")),a=Yn(i.as(\"m\")),o=Yn(i.as(\"h\")),u=Yn(i.as(\"d\")),l=Yn(i.as(\"M\")),d=Yn(i.as(\"w\")),i=Yn(i.as(\"y\")),r=(r<=n.ss?[\"s\",r]:r<n.s&&[\"ss\",r])||(a<=1?[\"m\"]:a<n.m&&[\"mm\",a])||(o<=1?[\"h\"]:o<n.h&&[\"hh\",o])||(u<=1?[\"d\"]:u<n.d&&[\"dd\",u]);return(r=(r=null!=n.w?r||(d<=1?[\"w\"]:d<n.w&&[\"ww\",d]):r)||(l<=1?[\"M\"]:l<n.M&&[\"MM\",l])||(i<=1?[\"y\"]:[\"yy\",i]))[2]=t,r[3]=0<+e,r[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,r)}var bn=Math.abs;function Tn(e){return(0<e)-(e<0)||+e}function xn(){var e,t,n,s,i,r,a,o,u,l,d;return this.isValid()?(e=bn(this._milliseconds)/1e3,t=bn(this._days),n=bn(this._months),(o=this.asSeconds())?(s=m(e/60),i=m(s/60),e%=60,s%=60,r=m(n/12),n%=12,a=e?e.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",u=Tn(this._months)!==Tn(o)?\"-\":\"\",l=Tn(this._days)!==Tn(o)?\"-\":\"\",d=Tn(this._milliseconds)!==Tn(o)?\"-\":\"\",(o<0?\"-\":\"\")+\"P\"+(r?u+r+\"Y\":\"\")+(n?u+n+\"M\":\"\")+(t?l+t+\"D\":\"\")+(i||s||e?\"T\":\"\")+(i?d+i+\"H\":\"\")+(s?d+s+\"M\":\"\")+(e?d+a+\"S\":\"\")):\"P0D\"):this.localeData().invalidDate()}var U=Ct.prototype;return U.isValid=function(){return this._isValid},U.abs=function(){var e=this._data;return this._milliseconds=_n(this._milliseconds),this._days=_n(this._days),this._months=_n(this._months),e.milliseconds=_n(e.milliseconds),e.seconds=_n(e.seconds),e.minutes=_n(e.minutes),e.hours=_n(e.hours),e.months=_n(e.months),e.years=_n(e.years),this},U.add=function(e,t){return yn(this,e,t,1)},U.subtract=function(e,t){return yn(this,e,t,-1)},U.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if(\"month\"===(e=o(e))||\"quarter\"===e||\"year\"===e)switch(t=this._days+s/864e5,n=this._months+wn(t),e){case\"month\":return n;case\"quarter\":return n/3;case\"year\":return n/12}else switch(t=this._days+Math.round(pn(this._months)),e){case\"week\":return t/7+s/6048e5;case\"day\":return t+s/864e5;case\"hour\":return 24*t+s/36e5;case\"minute\":return 1440*t+s/6e4;case\"second\":return 86400*t+s/1e3;case\"millisecond\":return Math.floor(864e5*t)+s;default:throw new Error(\"Unknown unit \"+e)}},U.asMilliseconds=de,U.asSeconds=t,U.asMinutes=ye,U.asHours=he,U.asDays=Fe,U.asWeeks=_e,U.asMonths=me,U.asQuarters=Qe,U.asYears=i,U.valueOf=ce,U._bubble=function(){var e=this._milliseconds,t=this._days,n=this._months,s=this._data;return 0<=e&&0<=t&&0<=n||e<=0&&t<=0&&n<=0||(e+=864e5*gn(pn(n)+t),n=t=0),s.milliseconds=e%1e3,e=m(e/1e3),s.seconds=e%60,e=m(e/60),s.minutes=e%60,e=m(e/60),s.hours=e%24,t+=m(e/24),n+=e=m(wn(t)),t-=gn(pn(e)),e=m(n/12),n%=12,s.days=t,s.months=n,s.years=e,this},U.clone=function(){return C(this)},U.get=function(e){return e=o(e),this.isValid()?this[e+\"s\"]():NaN},U.milliseconds=we,U.seconds=fe,U.minutes=ge,U.hours=Pe,U.days=d,U.weeks=function(){return m(this.days()/7)},U.months=vn,U.years=Dn,U.humanize=function(e,t){var n,s;return this.isValid()?(n=!1,s=Sn,\"object\"==typeof e&&(t=e,e=!1),\"boolean\"==typeof e&&(n=e),\"object\"==typeof t&&(s=Object.assign({},Sn,t),null!=t.s)&&null==t.ss&&(s.ss=t.s-1),e=this.localeData(),t=On(this,!n,s,e),n&&(t=e.pastFuture(+this,t)),e.postformat(t)):this.localeData().invalidDate()},U.toISOString=xn,U.toString=xn,U.toJSON=xn,U.locale=Xt,U.localeData=Kt,U.toIsoString=e(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",xn),U.lang=Ke,s(\"X\",0,0,\"unix\"),s(\"x\",0,0,\"valueOf\"),h(\"x\",ke),h(\"X\",/[+-]?\\d+(\\.\\d{1,3})?/),v(\"X\",function(e,t,n){n._d=new Date(1e3*parseFloat(e))}),v(\"x\",function(e,t,n){n._d=new Date(M(e))}),_.version=\"2.30.1\",H=R,_.fn=u,_.min=function(){return Pt(\"isBefore\",[].slice.call(arguments,0))},_.max=function(){return Pt(\"isAfter\",[].slice.call(arguments,0))},_.now=function(){return Date.now?Date.now():+new Date},_.utc=l,_.unix=function(e){return R(1e3*e)},_.months=function(e,t){return fn(e,t,\"months\")},_.isDate=V,_.locale=ft,_.invalid=I,_.duration=C,_.isMoment=k,_.weekdays=function(e,t,n){return mn(e,t,n,\"weekdays\")},_.parseZone=function(){return R.apply(null,arguments).parseZone()},_.localeData=P,_.isDuration=Ut,_.monthsShort=function(e,t){return fn(e,t,\"monthsShort\")},_.weekdaysMin=function(e,t,n){return mn(e,t,n,\"weekdaysMin\")},_.defineLocale=mt,_.updateLocale=function(e,t){var n,s;return null!=t?(s=ut,null!=W[e]&&null!=W[e].parentLocale?W[e].set(X(W[e]._config,t)):(t=X(s=null!=(n=ct(e))?n._config:s,t),null==n&&(t.abbr=e),(s=new K(t)).parentLocale=W[e],W[e]=s),ft(e)):null!=W[e]&&(null!=W[e].parentLocale?(W[e]=W[e].parentLocale,e===ft()&&ft(e)):null!=W[e]&&delete W[e]),W[e]},_.locales=function(){return ee(W)},_.weekdaysShort=function(e,t,n){return mn(e,t,n,\"weekdaysShort\")},_.normalizeUnits=o,_.relativeTimeRounding=function(e){return void 0===e?Yn:\"function\"==typeof e&&(Yn=e,!0)},_.relativeTimeThreshold=function(e,t){return void 0!==Sn[e]&&(void 0===t?Sn[e]:(Sn[e]=t,\"s\"===e&&(Sn.ss=t-1),!0))},_.calendarFormat=function(e,t){return(e=e.diff(t,\"days\",!0))<-6?\"sameElse\":e<-1?\"lastWeek\":e<0?\"lastDay\":e<1?\"sameDay\":e<2?\"nextDay\":e<7?\"nextWeek\":\"sameElse\"},_.prototype=u,_.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},_});\n//# sourceMappingURL=moment.min.js.map\n;\n!function(M,z){\"use strict\";\"object\"==typeof module&&module.exports?module.exports=z(require(\"moment\")):\"function\"==typeof define&&define.amd?define([\"moment\"],z):z(M.moment)}(this,function(O){\"use strict\";void 0===O.version&&O.default&&(O=O.default);var z,W={},A={},c={},d={},R={},M=(O&&\"string\"==typeof O.version||C(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\"),O.version.split(\".\")),b=+M[0],p=+M[1];function q(M){return 96<M?M-87:64<M?M-29:M-48}function o(M){var z=0,b=M.split(\".\"),p=b[0],O=b[1]||\"\",A=1,c=0,b=1;for(45===M.charCodeAt(0)&&(b=-(z=1));z<p.length;z++)c=60*c+q(p.charCodeAt(z));for(z=0;z<O.length;z++)A/=60,c+=q(O.charCodeAt(z))*A;return c*b}function a(M){for(var z=0;z<M.length;z++)M[z]=o(M[z])}function L(M,z){for(var b=[],p=0;p<z.length;p++)b[p]=M[z[p]];return b}function n(M){for(var M=M.split(\"|\"),z=M[2].split(\" \"),b=M[3].split(\"\"),p=M[4].split(\" \"),O=(a(z),a(b),a(p),p),A=b.length,c=0;c<A;c++)O[c]=Math.round((O[c-1]||0)+6e4*O[c]);return O[A-1]=1/0,{name:M[0],abbrs:L(M[1].split(\" \"),b),offsets:L(z,b),untils:p,population:0|M[5]}}function f(M){M&&this._set(n(M))}function N(M,z){this.name=M,this.zones=z}function B(M){var z=M.toTimeString(),b=z.match(/\\([a-z ]+\\)/i);\"GMT\"===(b=b&&b[0]?(b=b[0].match(/[A-Z]/g))?b.join(\"\"):void 0:(b=z.match(/[A-Z]{3,5}/g))?b[0]:void 0)&&(b=void 0),this.at=+M,this.abbr=b,this.offset=M.getTimezoneOffset()}function i(M){this.zone=M,this.offsetScore=0,this.abbrScore=0}function X(){for(var M,z,b,p=(new Date).getFullYear()-2,O=new B(new Date(p,0,1)),A=O.offset,c=[O],q=1;q<48;q++)(b=new Date(p,q,1).getTimezoneOffset())!==A&&(M=function(M,z){for(var b;b=6e4*((z.at-M.at)/12e4|0);)(b=new B(new Date(M.at+b))).offset===M.offset?M=b:z=b;return M}(O,z=new B(new Date(p,q,1))),c.push(M),c.push(new B(new Date(M.at+6e4))),O=z,A=b);for(q=0;q<4;q++)c.push(new B(new Date(p+q,0,1))),c.push(new B(new Date(p+q,6,1)));return c}function u(M,z){return M.offsetScore!==z.offsetScore?M.offsetScore-z.offsetScore:M.abbrScore!==z.abbrScore?M.abbrScore-z.abbrScore:M.zone.population!==z.zone.population?z.zone.population-M.zone.population:z.zone.name.localeCompare(M.zone.name)}function e(){try{var M=Intl.DateTimeFormat().resolvedOptions().timeZone;if(M&&3<M.length){var z=d[r(M)];if(z)return z;C(\"Moment Timezone found \"+M+\" from the Intl api, but did not have that data loaded.\")}}catch(M){}for(var b,p,O=X(),A=O.length,c=function(M){for(var z,b,p,O=M.length,A={},c=[],q={},o=0;o<O;o++)if(b=M[o].offset,!q.hasOwnProperty(b)){for(z in p=R[b]||{})p.hasOwnProperty(z)&&(A[z]=!0);q[b]=!0}for(o in A)A.hasOwnProperty(o)&&c.push(d[o]);return c}(O),q=[],o=0;o<c.length;o++){for(b=new i(t(c[o])),p=0;p<A;p++)b.scoreOffsetAt(O[p]);q.push(b)}return q.sort(u),0<q.length?q[0].zone.name:void 0}function r(M){return(M||\"\").toLowerCase().replace(/\\//g,\"_\")}function T(M){var z,b,p,O;for(\"string\"==typeof M&&(M=[M]),z=0;z<M.length;z++){O=r(b=(p=M[z].split(\"|\"))[0]),W[O]=M[z],d[O]=b,c=A=o=q=void 0;var A,c,q=O,o=p[2].split(\" \");for(a(o),A=0;A<o.length;A++)c=o[A],R[c]=R[c]||{},R[c][q]=!0}}function t(M,z){M=r(M);var b=W[M];return b instanceof f?b:\"string\"==typeof b?(b=new f(b),W[M]=b):A[M]&&z!==t&&(z=t(A[M],t))?((b=W[M]=new f)._set(z),b.name=d[M],b):null}function l(M){var z,b,p,O;for(\"string\"==typeof M&&(M=[M]),z=0;z<M.length;z++)p=r((b=M[z].split(\"|\"))[0]),O=r(b[1]),A[p]=O,d[p]=b[0],A[O]=p,d[O]=b[1]}function s(M){T(M.zones),l(M.links);var z,b,p,O=M.countries;if(O&&O.length)for(z=0;z<O.length;z++)b=(p=O[z].split(\"|\"))[0].toUpperCase(),p=p[1].split(\" \"),c[b]=new N(b,p);S.dataVersion=M.version}function m(M){return m.didShowError||(m.didShowError=!0,C(\"moment.tz.zoneExists('\"+M+\"') has been deprecated in favor of !moment.tz.zone('\"+M+\"')\")),!!t(M)}function E(M){var z=\"X\"===M._f||\"x\"===M._f;return!(!M._a||void 0!==M._tzm||z)}function C(M){\"undefined\"!=typeof console&&\"function\"==typeof console.error&&console.error(M)}function S(M){var z=Array.prototype.slice.call(arguments,0,-1),b=arguments[arguments.length-1],z=O.utc.apply(null,z);return!O.isMoment(M)&&E(z)&&(M=t(b))&&z.add(M.parse(z),\"minutes\"),z.tz(b),z}(b<2||2==b&&p<6)&&C(\"Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js \"+O.version+\". See momentjs.com\"),f.prototype={_set:function(M){this.name=M.name,this.abbrs=M.abbrs,this.untils=M.untils,this.offsets=M.offsets,this.population=M.population},_index:function(M){M=function(M,z){var b,p=z.length;if(M<z[0])return 0;if(1<p&&z[p-1]===1/0&&M>=z[p-2])return p-1;if(M>=z[p-1])return-1;for(var O=0,A=p-1;1<A-O;)z[b=Math.floor((O+A)/2)]<=M?O=b:A=b;return A}(+M,this.untils);if(0<=M)return M},countries:function(){var z=this.name;return Object.keys(c).filter(function(M){return-1!==c[M].zones.indexOf(z)})},parse:function(M){for(var z,b,p,O=+M,A=this.offsets,c=this.untils,q=c.length-1,o=0;o<q;o++)if(z=A[o],b=A[o+1],p=A[o&&o-1],z<b&&S.moveAmbiguousForward?z=b:p<z&&S.moveInvalidForward&&(z=p),O<c[o]-6e4*z)return A[o];return A[q]},abbr:function(M){return this.abbrs[this._index(M)]},offset:function(M){return C(\"zone.offset has been deprecated in favor of zone.utcOffset\"),this.offsets[this._index(M)]},utcOffset:function(M){return this.offsets[this._index(M)]}},i.prototype.scoreOffsetAt=function(M){this.offsetScore+=Math.abs(this.zone.utcOffset(M.at)-M.offset),this.zone.abbr(M.at).replace(/[^A-Z]/g,\"\")!==M.abbr&&this.abbrScore++},S.version=\"0.5.48\",S.dataVersion=\"\",S._zones=W,S._links=A,S._names=d,S._countries=c,S.add=T,S.link=l,S.load=s,S.zone=t,S.zoneExists=m,S.guess=function(M){return z=z&&!M?z:e()},S.names=function(){var M,z=[];for(M in d)d.hasOwnProperty(M)&&(W[M]||W[A[M]])&&d[M]&&z.push(d[M]);return z.sort()},S.Zone=f,S.unpack=n,S.unpackBase60=o,S.needsOffset=E,S.moveInvalidForward=!0,S.moveAmbiguousForward=!1,S.countries=function(){return Object.keys(c)},S.zonesForCountry=function(M,z){var b;return b=(b=M).toUpperCase(),(M=c[b]||null)?(b=M.zones.sort(),z?b.map(function(M){return{name:M,offset:t(M).utcOffset(new Date)}}):b):null};var g,M=O.fn;function P(M){return function(){return this._z?this._z.abbr(this):M.call(this)}}function D(M){return function(){return this._z=null,M.apply(this,arguments)}}O.tz=S,O.defaultZone=null,O.updateOffset=function(M,z){var b,p=O.defaultZone;void 0===M._z&&(p&&E(M)&&!M._isUTC&&M.isValid()&&(M._d=O.utc(M._a)._d,M.utc().add(p.parse(M),\"minutes\")),M._z=p),M._z&&(p=M._z.utcOffset(M),Math.abs(p)<16&&(p/=60),void 0!==M.utcOffset?(b=M._z,M.utcOffset(-p,z),M._z=b):M.zone(p,z))},M.tz=function(M,z){if(M){if(\"string\"!=typeof M)throw new Error(\"Time zone name must be a string, got \"+M+\" [\"+typeof M+\"]\");return this._z=t(M),this._z?O.updateOffset(this,z):C(\"Moment Timezone has no data for \"+M+\". See http://momentjs.com/timezone/docs/#/data-loading/.\"),this}if(this._z)return this._z.name},M.zoneName=P(M.zoneName),M.zoneAbbr=P(M.zoneAbbr),M.utc=D(M.utc),M.local=D(M.local),M.utcOffset=(g=M.utcOffset,function(){return 0<arguments.length&&(this._z=null),g.apply(this,arguments)}),O.tz.setDefault=function(M){return(b<2||2==b&&p<9)&&C(\"Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js \"+O.version+\".\"),O.defaultZone=M?t(M):null,O};M=O.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(M)?(M.push(\"_z\"),M.push(\"_a\")):M&&(M._z=null),s({version:\"2025b\",zones:[\"Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5\",\"Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5\",\"Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5\",\"Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6\",\"Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4\",\"Africa/Maputo|LMT CAT|-2a.i -20|01|-2sw2a.i|26e5\",\"Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6\",\"Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5\",\"Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3\",\"Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4\",\"Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5\",\"Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|\",\"Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5\",\"Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5\",\"Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5\",\"Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|\",\"Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5\",\"Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5\",\"Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326\",\"America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4\",\"America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5\",\"America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4\",\"America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|\",\"America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|\",\"America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|\",\"America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|\",\"America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|\",\"America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0|28e5\",\"America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5\",\"America/Bahia_Banderas|LMT MST CST MDT CDT|71 70 60 60 50|01213121313131313131313131313131313142424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3\",\"America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5\",\"America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4\",\"America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5\",\"America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3\",\"America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2\",\"America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5\",\"America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4\",\"America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2\",\"America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|LMT CST EST CDT EDT|5L.4 60 50 50 40|01213132431313131313131313131313131313131312|-1UQG0 2q3C0 2tx0 wgP0 1lb0 14p0 1lb0 14o0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5\",\"America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3\",\"America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\",\"America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|01213124242313131313131313131313131313131313131313131313131321313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5\",\"America/Coyhaique|LMT SMT -05 -04 -03|4M.g 4G.J 50 40 30|012131323232323232323434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvb.I MJbS.t fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0|\",\"America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5\",\"America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4\",\"America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8\",\"America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3\",\"America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2\",\"America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5\",\"America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5\",\"America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5\",\"America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3\",\"America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5\",\"America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mp0 8lz0 SN0 1cL0 pHB0 83r0 AU0 5MN0 1Rz0 38N0 Wn0 1qP0 11z0 1o10 11z0 3NA0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5\",\"America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5\",\"America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3\",\"America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3\",\"America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2\",\"America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2\",\"America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5\",\"America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5\",\"America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4\",\"America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4\",\"America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5\",\"America/Hermosillo|LMT MST CST MDT|7n.Q 70 60 60|01213121313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0|64e4\",\"America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2\",\"America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2\",\"America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4\",\"America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3\",\"America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5\",\"America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6\",\"America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6\",\"America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4\",\"America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5\",\"America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5\",\"America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4\",\"America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4\",\"America/Mazatlan|LMT MST CST MDT|75.E 70 60 60|01213121313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4\",\"America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2\",\"America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q3C0 24n0 wG10 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5\",\"America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2\",\"America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\",\"America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mxUf.k 2LHcf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2\",\"America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3\",\"America/Monterrey|LMT MST CST MDT CDT|6F.g 70 60 60 50|012131242424242424242424242424242424242424242424242424242424242|-1UQG0 dep0 8lz0 16p0 11z0 1dd0 2gmp0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5\",\"America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1qL0 11B0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5\",\"America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6\",\"America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2\",\"America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2\",\"America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3\",\"America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4\",\"America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4\",\"America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4\",\"America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|\",\"America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4\",\"America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2\",\"America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5\",\"America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4\",\"America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229\",\"America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4\",\"America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5\",\"America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5\",\"America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|012132323232323232323232323232323232323232323232323232323232323232323232323232323232323232121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 2pA0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452\",\"America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2\",\"America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4\",\"America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3\",\"America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5\",\"America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656\",\"America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642\",\"Antarctica/Casey|-00 +08 +11|0 -80 -b0|012121212121212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1 13bX|10\",\"Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70\",\"Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4\",\"Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1\",\"Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60\",\"Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\",\"Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"Antarctica/Rothera|-00 -03|0 30|01|gOo0|130\",\"Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5\",\"Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40\",\"Antarctica/Vostok|-00 +07 +05|0 -70 -50|01012|-tjA0 1rWh0 1Nj0 1aTv0|25\",\"Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5\",\"Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|0123232323232323232323212323232323232323232323232321|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 L4m0|15e5\",\"Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5\",\"Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3\",\"Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4\",\"Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4\",\"Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4\",\"Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|\",\"Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5\",\"Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4\",\"Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6\",\"Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|\",\"Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5\",\"Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4\",\"Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4\",\"Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6\",\"Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4\",\"Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6\",\"Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5\",\"Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6\",\"Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le80 1dnX0 1nfA0 Xld0|19e4\",\"Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5\",\"Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4\",\"Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|\",\"Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5\",\"Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4\",\"Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5c0 aVX0 BAM0|90e5\",\"Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5\",\"Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6\",\"Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4\",\"Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4\",\"Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5\",\"Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4\",\"Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6\",\"Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5\",\"Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5\",\"Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2\",\"Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5\",\"Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5\",\"Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4\",\"Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3\",\"Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5\",\"Asia/Manila|LMT LMT PST PDT JST|fU.8 -83.Q -80 -90 -90|012323432323232|-54m83.Q 2d8A3.Q 1urM0 un0 bW10 nb0 7qo0 1MM0 klB0 lz0 TwN0 1bb0 uNB0 rz0|24e6\",\"Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4\",\"Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4\",\"Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5\",\"Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5\",\"Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4\",\"Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4\",\"Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5\",\"Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 Mv90|\",\"Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4\",\"Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5\",\"Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4\",\"Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4\",\"Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6\",\"Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2\",\"Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5\",\"Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5\",\"Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5\",\"Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 Dc0 1iMu JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\",\"Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3\",\"Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6\",\"Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5\",\"Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2\",\"Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4\",\"Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5\",\"Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5\",\"Atlantic/Azores|LMT HMT -02 -01 +00 WET WEST|1G.E 1S.w 20 10 0 0 -10|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232323434343434343434343434356434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 CT90 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 Ap0 An0 wo0 Eo0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4\",\"Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3\",\"Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4\",\"Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4\",\"Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3\",\"Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 BJ90 1a00 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4\",\"Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30\",\"Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2\",\"Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5\",\"Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3\",\"Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4\",\"Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4\",\"Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368\",\"Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10\",\"Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5\",\"Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5\",\"Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5\",\"Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2\",\"Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5\",\"Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Etc/GMT-0|GMT|0|0||\",\"Etc/GMT-1|+01|-10|0||\",\"Etc/GMT-10|+10|-a0|0||\",\"Etc/GMT-11|+11|-b0|0||\",\"Etc/GMT-12|+12|-c0|0||\",\"Etc/GMT-13|+13|-d0|0||\",\"Etc/GMT-14|+14|-e0|0||\",\"Etc/GMT-2|+02|-20|0||\",\"Etc/GMT-3|+03|-30|0||\",\"Etc/GMT-4|+04|-40|0||\",\"Etc/GMT-5|+05|-50|0||\",\"Etc/GMT-6|+06|-60|0||\",\"Etc/GMT-7|+07|-70|0||\",\"Etc/GMT-8|+08|-80|0||\",\"Etc/GMT-9|+09|-90|0||\",\"Etc/GMT+1|-01|10|0||\",\"Etc/GMT+10|-10|a0|0||\",\"Etc/GMT+11|-11|b0|0||\",\"Etc/GMT+12|-12|c0|0||\",\"Etc/GMT+2|-02|20|0||\",\"Etc/GMT+3|-03|30|0||\",\"Etc/GMT+4|-04|40|0||\",\"Etc/GMT+5|-05|50|0||\",\"Etc/GMT+6|-06|60|0||\",\"Etc/GMT+7|-07|70|0||\",\"Etc/GMT+8|-08|80|0||\",\"Etc/GMT+9|-09|90|0||\",\"Etc/UTC|UTC|0|0||\",\"Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3\",\"Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5\",\"Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6\",\"Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5\",\"Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5\",\"Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5\",\"Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4\",\"Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4\",\"Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3\",\"Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4\",\"Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5\",\"Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4\",\"Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121212124121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 oiK0 1cM0 1cM0 1fB0 1cM0 1cM0 1cM0 1fA0 1a00 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5\",\"Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4\",\"Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5\",\"Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6\",\"Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6\",\"Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4\",\"Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5\",\"Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5\",\"Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|\",\"Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4\",\"Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4\",\"Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5\",\"Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5\",\"Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4\",\"Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5\",\"Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5\",\"Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4\",\"Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2\",\"Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4\",\"Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4\",\"Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3\",\"Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3\",\"Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4\",\"Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3\",\"Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1\",\"Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483\",\"Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4\",\"Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3\",\"Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3\",\"Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125\",\"Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4\",\"Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4\",\"Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2\",\"Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2\",\"Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2\",\"Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2\",\"Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3\",\"Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2\",\"Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3\",\"Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3\",\"Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56\",\"Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3\",\"Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4\",\"Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3\"],links:[\"Africa/Abidjan|Africa/Accra\",\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|Atlantic/Reykjavik\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Abidjan|Iceland\",\"Africa/Cairo|Egypt\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|US/Alaska\",\"America/Argentina/Buenos_Aires|America/Buenos_Aires\",\"America/Argentina/Catamarca|America/Argentina/ComodRivadavia\",\"America/Argentina/Catamarca|America/Catamarca\",\"America/Argentina/Cordoba|America/Cordoba\",\"America/Argentina/Cordoba|America/Rosario\",\"America/Argentina/Jujuy|America/Jujuy\",\"America/Argentina/Mendoza|America/Mendoza\",\"America/Chicago|CST6CDT\",\"America/Chicago|US/Central\",\"America/Denver|America/Shiprock\",\"America/Denver|MST7MDT\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Detroit|US/Michigan\",\"America/Edmonton|America/Yellowknife\",\"America/Edmonton|Canada/Mountain\",\"America/Fort_Wayne|America/Indiana/Indianapolis\",\"America/Fort_Wayne|America/Indianapolis\",\"America/Fort_Wayne|US/East-Indiana\",\"America/Godthab|America/Nuuk\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/Indiana/Knox|America/Knox_IN\",\"America/Indiana/Knox|US/Indiana-Starke\",\"America/Iqaluit|America/Pangnirtung\",\"America/Jamaica|Jamaica\",\"America/Kentucky/Louisville|America/Louisville\",\"America/Los_Angeles|PST8PDT\",\"America/Los_Angeles|US/Pacific\",\"America/Manaus|Brazil/West\",\"America/Mazatlan|Mexico/BajaSur\",\"America/Mexico_City|Mexico/General\",\"America/New_York|EST5EDT\",\"America/New_York|US/Eastern\",\"America/Noronha|Brazil/DeNoronha\",\"America/Panama|America/Atikokan\",\"America/Panama|America/Cayman\",\"America/Panama|America/Coral_Harbour\",\"America/Panama|EST\",\"America/Phoenix|America/Creston\",\"America/Phoenix|MST\",\"America/Phoenix|US/Arizona\",\"America/Puerto_Rico|America/Anguilla\",\"America/Puerto_Rico|America/Antigua\",\"America/Puerto_Rico|America/Aruba\",\"America/Puerto_Rico|America/Blanc-Sablon\",\"America/Puerto_Rico|America/Curacao\",\"America/Puerto_Rico|America/Dominica\",\"America/Puerto_Rico|America/Grenada\",\"America/Puerto_Rico|America/Guadeloupe\",\"America/Puerto_Rico|America/Kralendijk\",\"America/Puerto_Rico|America/Lower_Princes\",\"America/Puerto_Rico|America/Marigot\",\"America/Puerto_Rico|America/Montserrat\",\"America/Puerto_Rico|America/Port_of_Spain\",\"America/Puerto_Rico|America/St_Barthelemy\",\"America/Puerto_Rico|America/St_Kitts\",\"America/Puerto_Rico|America/St_Lucia\",\"America/Puerto_Rico|America/St_Thomas\",\"America/Puerto_Rico|America/St_Vincent\",\"America/Puerto_Rico|America/Tortola\",\"America/Puerto_Rico|America/Virgin\",\"America/Regina|Canada/Saskatchewan\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Tijuana|America/Ensenada\",\"America/Tijuana|America/Santa_Isabel\",\"America/Tijuana|Mexico/BajaNorte\",\"America/Toronto|America/Montreal\",\"America/Toronto|America/Nassau\",\"America/Toronto|America/Nipigon\",\"America/Toronto|America/Thunder_Bay\",\"America/Toronto|Canada/Eastern\",\"America/Vancouver|Canada/Pacific\",\"America/Whitehorse|Canada/Yukon\",\"America/Winnipeg|America/Rainy_River\",\"America/Winnipeg|Canada/Central\",\"Asia/Ashgabat|Asia/Ashkhabad\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Bangkok|Indian/Christmas\",\"Asia/Brunei|Asia/Kuching\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Dubai|Indian/Mahe\",\"Asia/Dubai|Indian/Reunion\",\"Asia/Ho_Chi_Minh|Asia/Saigon\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Macau|Asia/Macao\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Nicosia|Europe/Nicosia\",\"Asia/Qatar|Asia/Bahrain\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Rangoon|Indian/Cocos\",\"Asia/Riyadh|Antarctica/Syowa\",\"Asia/Riyadh|Asia/Aden\",\"Asia/Riyadh|Asia/Kuwait\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|PRC\",\"Asia/Taipei|ROC\",\"Asia/Tehran|Iran\",\"Asia/Thimphu|Asia/Thimbu\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Choibalsan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Urumqi|Asia/Kashgar\",\"Atlantic/Faroe|Atlantic/Faeroe\",\"Australia/Adelaide|Australia/South\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Broken_Hill|Australia/Yancowinna\",\"Australia/Darwin|Australia/North\",\"Australia/Hobart|Australia/Currie\",\"Australia/Hobart|Australia/Tasmania\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Melbourne|Australia/Victoria\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/NSW\",\"Etc/GMT-0|Etc/GMT\",\"Etc/GMT-0|Etc/GMT+0\",\"Etc/GMT-0|Etc/GMT0\",\"Etc/GMT-0|Etc/Greenwich\",\"Etc/GMT-0|GMT\",\"Etc/GMT-0|GMT+0\",\"Etc/GMT-0|GMT-0\",\"Etc/GMT-0|GMT0\",\"Etc/GMT-0|Greenwich\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Athens|EET\",\"Europe/Belgrade|Europe/Ljubljana\",\"Europe/Belgrade|Europe/Podgorica\",\"Europe/Belgrade|Europe/Sarajevo\",\"Europe/Belgrade|Europe/Skopje\",\"Europe/Belgrade|Europe/Zagreb\",\"Europe/Berlin|Arctic/Longyearbyen\",\"Europe/Berlin|Atlantic/Jan_Mayen\",\"Europe/Berlin|Europe/Copenhagen\",\"Europe/Berlin|Europe/Oslo\",\"Europe/Berlin|Europe/Stockholm\",\"Europe/Brussels|CET\",\"Europe/Brussels|Europe/Amsterdam\",\"Europe/Brussels|Europe/Luxembourg\",\"Europe/Brussels|MET\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Helsinki|Europe/Mariehamn\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Kiev|Europe/Kyiv\",\"Europe/Kiev|Europe/Uzhgorod\",\"Europe/Kiev|Europe/Zaporozhye\",\"Europe/Lisbon|Portugal\",\"Europe/Lisbon|WET\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|W-SU\",\"Europe/Paris|Europe/Monaco\",\"Europe/Prague|Europe/Bratislava\",\"Europe/Rome|Europe/San_Marino\",\"Europe/Rome|Europe/Vatican\",\"Europe/Warsaw|Poland\",\"Europe/Zurich|Europe/Busingen\",\"Europe/Zurich|Europe/Vaduz\",\"Indian/Maldives|Indian/Kerguelen\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Enderbury|Pacific/Kanton\",\"Pacific/Guadalcanal|Pacific/Pohnpei\",\"Pacific/Guadalcanal|Pacific/Ponape\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|HST\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kwajalein|Kwajalein\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Port_Moresby|Antarctica/DumontDUrville\",\"Pacific/Port_Moresby|Pacific/Chuuk\",\"Pacific/Port_Moresby|Pacific/Truk\",\"Pacific/Port_Moresby|Pacific/Yap\",\"Pacific/Tarawa|Pacific/Funafuti\",\"Pacific/Tarawa|Pacific/Majuro\",\"Pacific/Tarawa|Pacific/Wake\",\"Pacific/Tarawa|Pacific/Wallis\"],countries:[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Puerto_Rico America/Antigua\",\"AI|America/Puerto_Rico America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Asia/Singapore Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla Asia/Tokyo\",\"AW|America/Puerto_Rico America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Puerto_Rico America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Kuching Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Puerto_Rico America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Toronto America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston\",\"CC|Asia/Yangon Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Coyhaique America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Puerto_Rico America/Curacao\",\"CX|Asia/Bangkok Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Berlin Europe/Copenhagen\",\"DM|America/Puerto_Rico America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Puerto_Rico America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Abidjan Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Puerto_Rico America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Africa/Abidjan Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Puerto_Rico America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Puerto_Rico America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Brussels Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Paris Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Puerto_Rico America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Puerto_Rico America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana\",\"MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Brussels Europe/Amsterdam\",\"NO|Europe/Berlin Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Asia/Dubai Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Asia/Dubai Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Berlin Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Berlin Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Puerto_Rico America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Asia/Dubai Indian/Maldives Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Puerto_Rico America/Port_of_Spain\",\"TV|Pacific/Tarawa Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kyiv\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Puerto_Rico America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Puerto_Rico America/Tortola\",\"VI|America/Puerto_Rico America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Tarawa Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}),O});\n;\n/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n    'use strict';\n\n    var moment;\n    if (typeof exports === 'object') {\n        // CommonJS module\n        // Load moment.js as an optional dependency\n        try { moment = require('moment'); } catch (e) {}\n        module.exports = factory(moment);\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(function (req)\n        {\n            // Load moment.js as an optional dependency\n            var id = 'moment';\n            try { moment = req(id); } catch (e) {}\n            return factory(moment);\n        });\n    } else {\n        root.Pikaday = factory(root.moment);\n    }\n}(this, function (moment)\n{\n    'use strict';\n\n    /**\n     * feature detection and helper functions\n     */\n    var hasMoment = typeof moment === 'function',\n\n    hasEventListeners = !!window.addEventListener,\n\n    document = window.document,\n\n    sto = window.setTimeout,\n\n    addEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.addEventListener(e, callback, !!capture);\n        } else {\n            el.attachEvent('on' + e, callback);\n        }\n    },\n\n    removeEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.removeEventListener(e, callback, !!capture);\n        } else {\n            el.detachEvent('on' + e, callback);\n        }\n    },\n\n    trim = function(str)\n    {\n        return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n    },\n\n    hasClass = function(el, cn)\n    {\n        return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n    },\n\n    addClass = function(el, cn)\n    {\n        if (!hasClass(el, cn)) {\n            el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n        }\n    },\n\n    removeClass = function(el, cn)\n    {\n        el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n    },\n\n    isArray = function(obj)\n    {\n        return (/Array/).test(Object.prototype.toString.call(obj));\n    },\n\n    isDate = function(obj)\n    {\n        return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n    },\n\n    isWeekend = function(date)\n    {\n        var day = date.getDay();\n        return day === 0 || day === 6;\n    },\n\n    isLeapYear = function(year)\n    {\n        // solution lifted from date.js (MIT license): https://github.com/datejs/Datejs\n        return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n    },\n\n    getDaysInMonth = function(year, month)\n    {\n        return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n    },\n\n    setToStartOfDay = function(date)\n    {\n        if (isDate(date)) date.setHours(0,0,0,0);\n    },\n\n    compareDates = function(a,b)\n    {\n        // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n        return a.getTime() === b.getTime();\n    },\n\n    extend = function(to, from, overwrite)\n    {\n        var prop, hasProp;\n        for (prop in from) {\n            hasProp = to[prop] !== undefined;\n            if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n                if (isDate(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = new Date(from[prop].getTime());\n                    }\n                }\n                else if (isArray(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = from[prop].slice(0);\n                    }\n                } else {\n                    to[prop] = extend({}, from[prop], overwrite);\n                }\n            } else if (overwrite || !hasProp) {\n                to[prop] = from[prop];\n            }\n        }\n        return to;\n    },\n\n    fireEvent = function(el, eventName, data)\n    {\n        var ev;\n\n        if (document.createEvent) {\n            ev = document.createEvent('HTMLEvents');\n            ev.initEvent(eventName, true, false);\n            ev = extend(ev, data);\n            el.dispatchEvent(ev);\n        } else if (document.createEventObject) {\n            ev = document.createEventObject();\n            ev = extend(ev, data);\n            el.fireEvent('on' + eventName, ev);\n        }\n    },\n\n    adjustCalendar = function(calendar) {\n        if (calendar.month < 0) {\n            calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n            calendar.month += 12;\n        }\n        if (calendar.month > 11) {\n            calendar.year += Math.floor(Math.abs(calendar.month)/12);\n            calendar.month -= 12;\n        }\n        return calendar;\n    },\n\n    /**\n     * defaults and localisation\n     */\n    defaults = {\n\n        // bind the picker to a form field\n        field: null,\n\n        // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n        bound: undefined,\n\n        // data-attribute on the input field with an aria assistance text (only applied when `bound` is set)\n        ariaLabel: 'Use the arrow keys to pick a date',\n\n        // position of the datepicker, relative to the field (default to bottom & left)\n        // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n        position: 'bottom left',\n\n        // automatically fit in the viewport even if it means repositioning from the position option\n        reposition: true,\n\n        // the default output format for `.toString()` and `field` value\n        format: 'YYYY-MM-DD',\n\n        // the toString function which gets passed a current date object and format\n        // and returns a string\n        toString: null,\n\n        // used to create date object from current input string\n        parse: null,\n\n        // the initial date to view when first opened\n        defaultDate: null,\n\n        // make the `defaultDate` the initial selected value\n        setDefaultDate: false,\n\n        // first day of week (0: Sunday, 1: Monday etc)\n        firstDay: 0,\n\n        // minimum number of days in the week that gets week number one\n        // default ISO 8601, week 01 is the week with the first Thursday (4)\n        firstWeekOfYearMinDays: 4,\n\n        // the default flag for moment's strict date parsing\n        formatStrict: false,\n\n        // the minimum/earliest date that can be selected\n        minDate: null,\n        // the maximum/latest date that can be selected\n        maxDate: null,\n\n        // number of years either side, or array of upper/lower range\n        yearRange: 10,\n\n        // show week numbers at head of row\n        showWeekNumber: false,\n\n        // Week picker mode\n        pickWholeWeek: false,\n\n        // used internally (don't config outside)\n        minYear: 0,\n        maxYear: 9999,\n        minMonth: undefined,\n        maxMonth: undefined,\n\n        startRange: null,\n        endRange: null,\n\n        isRTL: false,\n\n        // Additional text to append to the year in the calendar title\n        yearSuffix: '',\n\n        // Render the month after year in the calendar title\n        showMonthAfterYear: false,\n\n        // Render days of the calendar grid that fall in the next or previous month\n        showDaysInNextAndPreviousMonths: false,\n\n        // Allows user to select days that fall in the next or previous month\n        enableSelectionDaysInNextAndPreviousMonths: false,\n\n        // how many months are visible\n        numberOfMonths: 1,\n\n        // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n        // only used for the first display or when a selected date is not visible\n        mainCalendar: 'left',\n\n        // Specify a DOM element to render the calendar in\n        container: undefined,\n\n        // Blur field when date is selected\n        blurFieldOnSelect : true,\n\n        // internationalization\n        i18n: {\n            previousMonth : 'Previous Month',\n            nextMonth     : 'Next Month',\n            months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n            weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n            weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n        },\n\n        // Theme Classname\n        theme: null,\n\n        // events array\n        events: [],\n\n        // callback function\n        onSelect: null,\n        onOpen: null,\n        onClose: null,\n        onDraw: null,\n\n        // Enable keyboard input\n        keyboardInput: true\n    },\n\n\n    /**\n     * templating functions to abstract HTML rendering\n     */\n    renderDayName = function(opts, day, abbr)\n    {\n        day += opts.firstDay;\n        while (day >= 7) {\n            day -= 7;\n        }\n        return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n    },\n\n    renderDay = function(opts)\n    {\n        var arr = [];\n        var ariaSelected = 'false';\n        if (opts.isEmpty) {\n            if (opts.showDaysInNextAndPreviousMonths) {\n                arr.push('is-outside-current-month');\n\n                if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n                    arr.push('is-selection-disabled');\n                }\n\n            } else {\n                return '<td class=\"is-empty\"></td>';\n            }\n        }\n        if (opts.isDisabled) {\n            arr.push('is-disabled');\n        }\n        if (opts.isToday) {\n            arr.push('is-today');\n        }\n        if (opts.isSelected) {\n            arr.push('is-selected');\n            ariaSelected = 'true';\n        }\n        if (opts.hasEvent) {\n            arr.push('has-event');\n        }\n        if (opts.isInRange) {\n            arr.push('is-inrange');\n        }\n        if (opts.isStartRange) {\n            arr.push('is-startrange');\n        }\n        if (opts.isEndRange) {\n            arr.push('is-endrange');\n        }\n        return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\" aria-selected=\"' + ariaSelected + '\">' +\n                 '<button class=\"pika-button pika-day\" type=\"button\" ' +\n                    'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n                        opts.day +\n                 '</button>' +\n               '</td>';\n    },\n\n    isoWeek = function(date, firstWeekOfYearMinDays) {\n        // Ensure we're at the start of the day.\n        date.setHours(0, 0, 0, 0);\n\n        // Thursday in current week decides the year because January 4th\n        // is always in the first week according to ISO8601.\n        var yearDay        = date.getDate(),\n            weekDay        = date.getDay(),\n            dayInFirstWeek = firstWeekOfYearMinDays,\n            dayShift       = dayInFirstWeek - 1, // counting starts at 0\n            daysPerWeek    = 7,\n            prevWeekDay    = function(day) { return (day + daysPerWeek - 1) % daysPerWeek; };\n\n        // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n        date.setDate(yearDay + dayShift - prevWeekDay(weekDay));\n\n        var jan4th      = new Date(date.getFullYear(), 0, dayInFirstWeek),\n            msPerDay    = 24 * 60 * 60 * 1000,\n            daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay,\n            weekNum     = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);\n\n        return weekNum;\n    },\n\n    renderWeek = function (d, m, y, firstWeekOfYearMinDays) {\n        var date = new Date(y, m, d),\n            week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);\n\n        return '<td class=\"pika-week\">' + week + '</td>';\n    },\n\n    renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n    {\n        return '<tr class=\"pika-row' + (pickWholeWeek ? ' pick-whole-week' : '') + (isRowSelected ? ' is-selected' : '') + '\">' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n    },\n\n    renderBody = function(rows)\n    {\n        return '<tbody>' + rows.join('') + '</tbody>';\n    },\n\n    renderHead = function(opts)\n    {\n        var i, arr = [];\n        if (opts.showWeekNumber) {\n            arr.push('<th></th>');\n        }\n        for (i = 0; i < 7; i++) {\n            arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n        }\n        return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n    },\n\n    renderTitle = function(instance, c, year, month, refYear, randId)\n    {\n        var i, j, arr,\n            opts = instance._o,\n            isMinYear = year === opts.minYear,\n            isMaxYear = year === opts.maxYear,\n            html = '<div id=\"' + randId + '\" class=\"pika-title\" role=\"heading\" aria-live=\"assertive\">',\n            monthHtml,\n            yearHtml,\n            prev = true,\n            next = true;\n\n        for (arr = [], i = 0; i < 12; i++) {\n            arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n                (i === month ? ' selected=\"selected\"': '') +\n                ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? ' disabled=\"disabled\"' : '') + '>' +\n                opts.i18n.months[i] + '</option>');\n        }\n\n        monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (isArray(opts.yearRange)) {\n            i = opts.yearRange[0];\n            j = opts.yearRange[1] + 1;\n        } else {\n            i = year - opts.yearRange;\n            j = 1 + year + opts.yearRange;\n        }\n\n        for (arr = []; i < j && i <= opts.maxYear; i++) {\n            if (i >= opts.minYear) {\n                arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected=\"selected\"': '') + '>' + (i) + '</option>');\n            }\n        }\n        yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (opts.showMonthAfterYear) {\n            html += yearHtml + monthHtml;\n        } else {\n            html += monthHtml + yearHtml;\n        }\n\n        if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n            prev = false;\n        }\n\n        if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n            next = false;\n        }\n\n        if (c === 0) {\n            html += '<button class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n        }\n        if (c === (instance._o.numberOfMonths - 1) ) {\n            html += '<button class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n        }\n\n        return html += '</div>';\n    },\n\n    renderTable = function(opts, data, randId)\n    {\n        return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"' + randId + '\">' + renderHead(opts) + renderBody(data) + '</table>';\n    },\n\n\n    /**\n     * Pikaday constructor\n     */\n    Pikaday = function(options)\n    {\n        var self = this,\n            opts = self.config(options);\n\n        self._onMouseDown = function(e)\n        {\n            if (!self._v) {\n                return;\n            }\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n\n            if (!hasClass(target, 'is-disabled')) {\n                if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n                    self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n                    if (opts.bound) {\n                        sto(function() {\n                            self.hide();\n                            if (opts.blurFieldOnSelect && opts.field) {\n                                opts.field.blur();\n                            }\n                        }, 100);\n                    }\n                }\n                else if (hasClass(target, 'pika-prev')) {\n                    self.prevMonth();\n                }\n                else if (hasClass(target, 'pika-next')) {\n                    self.nextMonth();\n                }\n            }\n            if (!hasClass(target, 'pika-select')) {\n                // if this is touch event prevent mouse events emulation\n                if (e.preventDefault) {\n                    e.preventDefault();\n                } else {\n                    e.returnValue = false;\n                    return false;\n                }\n            } else {\n                self._c = true;\n            }\n        };\n\n        self._onChange = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n            if (hasClass(target, 'pika-select-month')) {\n                self.gotoMonth(target.value);\n            }\n            else if (hasClass(target, 'pika-select-year')) {\n                self.gotoYear(target.value);\n            }\n        };\n\n        self._onKeyChange = function(e)\n        {\n            e = e || window.event;\n\n            if (self.isVisible()) {\n\n                switch(e.keyCode){\n                    case 13:\n                    case 27:\n                        if (opts.field) {\n                            opts.field.blur();\n                        }\n                        break;\n                    case 37:\n                        self.adjustDate('subtract', 1);\n                        break;\n                    case 38:\n                        self.adjustDate('subtract', 7);\n                        break;\n                    case 39:\n                        self.adjustDate('add', 1);\n                        break;\n                    case 40:\n                        self.adjustDate('add', 7);\n                        break;\n                    case 8:\n                    case 46:\n                        self.setDate(null);\n                        break;\n                }\n            }\n        };\n\n        self._parseFieldValue = function()\n        {\n            if (opts.parse) {\n                return opts.parse(opts.field.value, opts.format);\n            } else if (hasMoment) {\n                var date = moment(opts.field.value, opts.format, opts.formatStrict);\n                return (date && date.isValid()) ? date.toDate() : null;\n            } else {\n                return new Date(Date.parse(opts.field.value));\n            }\n        };\n\n        self._onInputChange = function(e)\n        {\n            var date;\n\n            if (e.firedBy === self) {\n                return;\n            }\n            date = self._parseFieldValue();\n            if (isDate(date)) {\n              self.setDate(date);\n            }\n            if (!self._v) {\n                self.show();\n            }\n        };\n\n        self._onInputFocus = function()\n        {\n            self.show();\n        };\n\n        self._onInputClick = function()\n        {\n            self.show();\n        };\n\n        self._onInputBlur = function()\n        {\n            // IE allows pika div to gain focus; catch blur the input field\n            var pEl = document.activeElement;\n            do {\n                if (hasClass(pEl, 'pika-single')) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n\n            if (!self._c) {\n                self._b = sto(function() {\n                    self.hide();\n                }, 50);\n            }\n            self._c = false;\n        };\n\n        self._onClick = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement,\n                pEl = target;\n            if (!target) {\n                return;\n            }\n            if (!hasEventListeners && hasClass(target, 'pika-select')) {\n                if (!target.onchange) {\n                    target.setAttribute('onchange', 'return;');\n                    addEvent(target, 'change', self._onChange);\n                }\n            }\n            do {\n                if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n                self.hide();\n            }\n        };\n\n        self.el = document.createElement('div');\n        self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n        addEvent(self.el, 'mousedown', self._onMouseDown, true);\n        addEvent(self.el, 'touchend', self._onMouseDown, true);\n        addEvent(self.el, 'change', self._onChange);\n\n        if (opts.keyboardInput) {\n            addEvent(document, 'keydown', self._onKeyChange);\n        }\n\n        if (opts.field) {\n            if (opts.container) {\n                opts.container.appendChild(self.el);\n            } else if (opts.bound) {\n                document.body.appendChild(self.el);\n            } else {\n                opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n            }\n            addEvent(opts.field, 'change', self._onInputChange);\n\n            if (!opts.defaultDate) {\n                opts.defaultDate = self._parseFieldValue();\n                opts.setDefaultDate = true;\n            }\n        }\n\n        var defDate = opts.defaultDate;\n\n        if (isDate(defDate)) {\n            if (opts.setDefaultDate) {\n                self.setDate(defDate, true);\n            } else {\n                self.gotoDate(defDate);\n            }\n        } else {\n            self.gotoDate(new Date());\n        }\n\n        if (opts.bound) {\n            this.hide();\n            self.el.className += ' is-bound';\n            addEvent(opts.trigger, 'click', self._onInputClick);\n            addEvent(opts.trigger, 'focus', self._onInputFocus);\n            addEvent(opts.trigger, 'blur', self._onInputBlur);\n        } else {\n            this.show();\n        }\n    };\n\n\n    /**\n     * public Pikaday API\n     */\n    Pikaday.prototype = {\n\n\n        /**\n         * configure functionality\n         */\n        config: function(options)\n        {\n            if (!this._o) {\n                this._o = extend({}, defaults, true);\n            }\n\n            var opts = extend(this._o, options, true);\n\n            opts.isRTL = !!opts.isRTL;\n\n            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n            opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n            opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n            opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n            opts.disableWeekends = !!opts.disableWeekends;\n\n            opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n            var nom = parseInt(opts.numberOfMonths, 10) || 1;\n            opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n            if (!isDate(opts.minDate)) {\n                opts.minDate = false;\n            }\n            if (!isDate(opts.maxDate)) {\n                opts.maxDate = false;\n            }\n            if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n                opts.maxDate = opts.minDate = false;\n            }\n            if (opts.minDate) {\n                this.setMinDate(opts.minDate);\n            }\n            if (opts.maxDate) {\n                this.setMaxDate(opts.maxDate);\n            }\n\n            if (isArray(opts.yearRange)) {\n                var fallback = new Date().getFullYear() - 10;\n                opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n                opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n            } else {\n                opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n                if (opts.yearRange > 100) {\n                    opts.yearRange = 100;\n                }\n            }\n\n            return opts;\n        },\n\n        /**\n         * return a formatted string of the current selection (using Moment.js if available)\n         */\n        toString: function(format)\n        {\n            format = format || this._o.format;\n            if (!isDate(this._d)) {\n                return '';\n            }\n            if (this._o.toString) {\n              return this._o.toString(this._d, format);\n            }\n            if (hasMoment) {\n              return moment(this._d).format(format);\n            }\n            return this._d.toDateString();\n        },\n\n        /**\n         * return a Moment.js object of the current selection (if available)\n         */\n        getMoment: function()\n        {\n            return hasMoment ? moment(this._d) : null;\n        },\n\n        /**\n         * set the current selection from a Moment.js object (if available)\n         */\n        setMoment: function(date, preventOnSelect)\n        {\n            if (hasMoment && moment.isMoment(date)) {\n                this.setDate(date.toDate(), preventOnSelect);\n            }\n        },\n\n        /**\n         * return a Date object of the current selection\n         */\n        getDate: function()\n        {\n            return isDate(this._d) ? new Date(this._d.getTime()) : null;\n        },\n\n        /**\n         * set the current selection\n         */\n        setDate: function(date, preventOnSelect)\n        {\n            if (!date) {\n                this._d = null;\n\n                if (this._o.field) {\n                    this._o.field.value = '';\n                    fireEvent(this._o.field, 'change', { firedBy: this });\n                }\n\n                return this.draw();\n            }\n            if (typeof date === 'string') {\n                date = new Date(Date.parse(date));\n            }\n            if (!isDate(date)) {\n                return;\n            }\n\n            var min = this._o.minDate,\n                max = this._o.maxDate;\n\n            if (isDate(min) && date < min) {\n                date = min;\n            } else if (isDate(max) && date > max) {\n                date = max;\n            }\n\n            this._d = new Date(date.getTime());\n            setToStartOfDay(this._d);\n            this.gotoDate(this._d);\n\n            if (this._o.field) {\n                this._o.field.value = this.toString();\n                fireEvent(this._o.field, 'change', { firedBy: this });\n            }\n            if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n                this._o.onSelect.call(this, this.getDate());\n            }\n        },\n\n        /**\n         * clear and reset the date\n         */\n        clear: function()\n        {\n            this.setDate(null);\n        },\n\n        /**\n         * change view to a specific date\n         */\n        gotoDate: function(date)\n        {\n            var newCalendar = true;\n\n            if (!isDate(date)) {\n                return;\n            }\n\n            if (this.calendars) {\n                var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n                    lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n                    visibleDate = date.getTime();\n                // get the end of the month\n                lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n                lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n                newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n            }\n\n            if (newCalendar) {\n                this.calendars = [{\n                    month: date.getMonth(),\n                    year: date.getFullYear()\n                }];\n                if (this._o.mainCalendar === 'right') {\n                    this.calendars[0].month += 1 - this._o.numberOfMonths;\n                }\n            }\n\n            this.adjustCalendars();\n        },\n\n        adjustDate: function(sign, days) {\n\n            var day = this.getDate() || new Date();\n            var difference = parseInt(days)*24*60*60*1000;\n\n            var newDay;\n\n            if (sign === 'add') {\n                newDay = new Date(day.valueOf() + difference);\n            } else if (sign === 'subtract') {\n                newDay = new Date(day.valueOf() - difference);\n            }\n\n            this.setDate(newDay);\n        },\n\n        adjustCalendars: function() {\n            this.calendars[0] = adjustCalendar(this.calendars[0]);\n            for (var c = 1; c < this._o.numberOfMonths; c++) {\n                this.calendars[c] = adjustCalendar({\n                    month: this.calendars[0].month + c,\n                    year: this.calendars[0].year\n                });\n            }\n            this.draw();\n        },\n\n        gotoToday: function()\n        {\n            this.gotoDate(new Date());\n        },\n\n        /**\n         * change view to a specific month (zero-index, e.g. 0: January)\n         */\n        gotoMonth: function(month)\n        {\n            if (!isNaN(month)) {\n                this.calendars[0].month = parseInt(month, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        nextMonth: function()\n        {\n            this.calendars[0].month++;\n            this.adjustCalendars();\n        },\n\n        prevMonth: function()\n        {\n            this.calendars[0].month--;\n            this.adjustCalendars();\n        },\n\n        /**\n         * change view to a specific full year (e.g. \"2012\")\n         */\n        gotoYear: function(year)\n        {\n            if (!isNaN(year)) {\n                this.calendars[0].year = parseInt(year, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        /**\n         * change the minDate\n         */\n        setMinDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.minDate = value;\n                this._o.minYear  = value.getFullYear();\n                this._o.minMonth = value.getMonth();\n            } else {\n                this._o.minDate = defaults.minDate;\n                this._o.minYear  = defaults.minYear;\n                this._o.minMonth = defaults.minMonth;\n                this._o.startRange = defaults.startRange;\n            }\n\n            this.draw();\n        },\n\n        /**\n         * change the maxDate\n         */\n        setMaxDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.maxDate = value;\n                this._o.maxYear = value.getFullYear();\n                this._o.maxMonth = value.getMonth();\n            } else {\n                this._o.maxDate = defaults.maxDate;\n                this._o.maxYear = defaults.maxYear;\n                this._o.maxMonth = defaults.maxMonth;\n                this._o.endRange = defaults.endRange;\n            }\n\n            this.draw();\n        },\n\n        setStartRange: function(value)\n        {\n            this._o.startRange = value;\n        },\n\n        setEndRange: function(value)\n        {\n            this._o.endRange = value;\n        },\n\n        /**\n         * refresh the HTML\n         */\n        draw: function(force)\n        {\n            if (!this._v && !force) {\n                return;\n            }\n            var opts = this._o,\n                minYear = opts.minYear,\n                maxYear = opts.maxYear,\n                minMonth = opts.minMonth,\n                maxMonth = opts.maxMonth,\n                html = '',\n                randId;\n\n            if (this._y <= minYear) {\n                this._y = minYear;\n                if (!isNaN(minMonth) && this._m < minMonth) {\n                    this._m = minMonth;\n                }\n            }\n            if (this._y >= maxYear) {\n                this._y = maxYear;\n                if (!isNaN(maxMonth) && this._m > maxMonth) {\n                    this._m = maxMonth;\n                }\n            }\n\n            for (var c = 0; c < opts.numberOfMonths; c++) {\n                randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n                html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';\n            }\n\n            this.el.innerHTML = html;\n\n            if (opts.bound) {\n                if(opts.field.type !== 'hidden') {\n                    sto(function() {\n                        opts.trigger.focus();\n                    }, 1);\n                }\n            }\n\n            if (typeof this._o.onDraw === 'function') {\n                this._o.onDraw(this);\n            }\n\n            if (opts.bound) {\n                // let the screen reader user know to use arrow keys\n                opts.field.setAttribute('aria-label', opts.ariaLabel);\n            }\n        },\n\n        adjustPosition: function()\n        {\n            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;\n\n            if (this._o.container) return;\n\n            this.el.style.position = 'absolute';\n\n            field = this._o.trigger;\n            pEl = field;\n            width = this.el.offsetWidth;\n            height = this.el.offsetHeight;\n            viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n            viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n            scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n            leftAligned = true;\n            bottomAligned = true;\n\n            if (typeof field.getBoundingClientRect === 'function') {\n                clientRect = field.getBoundingClientRect();\n                left = clientRect.left + window.pageXOffset;\n                top = clientRect.bottom + window.pageYOffset;\n            } else {\n                left = pEl.offsetLeft;\n                top  = pEl.offsetTop + pEl.offsetHeight;\n                while((pEl = pEl.offsetParent)) {\n                    left += pEl.offsetLeft;\n                    top  += pEl.offsetTop;\n                }\n            }\n\n            // default position is bottom & left\n            if ((this._o.reposition && left + width > viewportWidth) ||\n                (\n                    this._o.position.indexOf('right') > -1 &&\n                    left - width + field.offsetWidth > 0\n                )\n            ) {\n                left = left - width + field.offsetWidth;\n                leftAligned = false;\n            }\n            if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n                (\n                    this._o.position.indexOf('top') > -1 &&\n                    top - height - field.offsetHeight > 0\n                )\n            ) {\n                top = top - height - field.offsetHeight;\n                bottomAligned = false;\n            }\n\n            this.el.style.left = left + 'px';\n            this.el.style.top = top + 'px';\n\n            addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');\n            addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');\n            removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');\n            removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');\n        },\n\n        /**\n         * render HTML for a particular month\n         */\n        render: function(year, month, randId)\n        {\n            var opts   = this._o,\n                now    = new Date(),\n                days   = getDaysInMonth(year, month),\n                before = new Date(year, month, 1).getDay(),\n                data   = [],\n                row    = [];\n            setToStartOfDay(now);\n            if (opts.firstDay > 0) {\n                before -= opts.firstDay;\n                if (before < 0) {\n                    before += 7;\n                }\n            }\n            var previousMonth = month === 0 ? 11 : month - 1,\n                nextMonth = month === 11 ? 0 : month + 1,\n                yearOfPreviousMonth = month === 0 ? year - 1 : year,\n                yearOfNextMonth = month === 11 ? year + 1 : year,\n                daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n            var cells = days + before,\n                after = cells;\n            while(after > 7) {\n                after -= 7;\n            }\n            cells += 7 - after;\n            var isWeekSelected = false;\n            for (var i = 0, r = 0; i < cells; i++)\n            {\n                var day = new Date(year, month, 1 + (i - before)),\n                    isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n                    isToday = compareDates(day, now),\n                    hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n                    isEmpty = i < before || i >= (days + before),\n                    dayNumber = 1 + (i - before),\n                    monthNumber = month,\n                    yearNumber = year,\n                    isStartRange = opts.startRange && compareDates(opts.startRange, day),\n                    isEndRange = opts.endRange && compareDates(opts.endRange, day),\n                    isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n                    isDisabled = (opts.minDate && day < opts.minDate) ||\n                                 (opts.maxDate && day > opts.maxDate) ||\n                                 (opts.disableWeekends && isWeekend(day)) ||\n                                 (opts.disableDayFn && opts.disableDayFn(day));\n\n                if (isEmpty) {\n                    if (i < before) {\n                        dayNumber = daysInPreviousMonth + dayNumber;\n                        monthNumber = previousMonth;\n                        yearNumber = yearOfPreviousMonth;\n                    } else {\n                        dayNumber = dayNumber - days;\n                        monthNumber = nextMonth;\n                        yearNumber = yearOfNextMonth;\n                    }\n                }\n\n                var dayConfig = {\n                        day: dayNumber,\n                        month: monthNumber,\n                        year: yearNumber,\n                        hasEvent: hasEvent,\n                        isSelected: isSelected,\n                        isToday: isToday,\n                        isDisabled: isDisabled,\n                        isEmpty: isEmpty,\n                        isStartRange: isStartRange,\n                        isEndRange: isEndRange,\n                        isInRange: isInRange,\n                        showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n                        enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n                    };\n\n                if (opts.pickWholeWeek && isSelected) {\n                    isWeekSelected = true;\n                }\n\n                row.push(renderDay(dayConfig));\n\n                if (++r === 7) {\n                    if (opts.showWeekNumber) {\n                        row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));\n                    }\n                    data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n                    row = [];\n                    r = 0;\n                    isWeekSelected = false;\n                }\n            }\n            return renderTable(opts, data, randId);\n        },\n\n        isVisible: function()\n        {\n            return this._v;\n        },\n\n        show: function()\n        {\n            if (!this.isVisible()) {\n                this._v = true;\n                this.draw();\n                removeClass(this.el, 'is-hidden');\n                if (this._o.bound) {\n                    addEvent(document, 'click', this._onClick);\n                    this.adjustPosition();\n                }\n                if (typeof this._o.onOpen === 'function') {\n                    this._o.onOpen.call(this);\n                }\n            }\n        },\n\n        hide: function()\n        {\n            var v = this._v;\n            if (v !== false) {\n                if (this._o.bound) {\n                    removeEvent(document, 'click', this._onClick);\n                }\n\n                if (!this._o.container) {\n                    this.el.style.position = 'static'; // reset\n                    this.el.style.left = 'auto';\n                    this.el.style.top = 'auto';\n                }\n                addClass(this.el, 'is-hidden');\n                this._v = false;\n                if (v !== undefined && typeof this._o.onClose === 'function') {\n                    this._o.onClose.call(this);\n                }\n            }\n        },\n\n        /**\n         * GAME OVER\n         */\n        destroy: function()\n        {\n            var opts = this._o;\n\n            this.hide();\n            removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n            removeEvent(this.el, 'touchend', this._onMouseDown, true);\n            removeEvent(this.el, 'change', this._onChange);\n            if (opts.keyboardInput) {\n                removeEvent(document, 'keydown', this._onKeyChange);\n            }\n            if (opts.field) {\n                removeEvent(opts.field, 'change', this._onInputChange);\n                if (opts.bound) {\n                    removeEvent(opts.trigger, 'click', this._onInputClick);\n                    removeEvent(opts.trigger, 'focus', this._onInputFocus);\n                    removeEvent(opts.trigger, 'blur', this._onInputBlur);\n                }\n            }\n            if (this.el.parentNode) {\n                this.el.parentNode.removeChild(this.el);\n            }\n        }\n\n    };\n\n    return Pikaday;\n}));\n\n;\n/*!\n * Pikaday jQuery plugin.\n *\n * Copyright © 2013 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n    'use strict';\n\n    if (typeof exports === 'object') {\n        // CommonJS module\n        factory(require('jquery'), require('pikaday'));\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery', 'pikaday'], factory);\n    } else {\n        // Browser globals\n        factory(root.jQuery, root.Pikaday);\n    }\n}(this, function ($, Pikaday)\n{\n    'use strict';\n\n    $.fn.pikaday = function()\n    {\n        var args = arguments;\n\n        if (!args || !args.length) {\n            args = [{ }];\n        }\n\n        return this.each(function()\n        {\n            var self   = $(this),\n                plugin = self.data('pikaday');\n\n            if (!(plugin instanceof Pikaday)) {\n                if (typeof args[0] === 'object') {\n                    var options = $.extend({}, args[0]);\n                    options.field = self[0];\n                    self.data('pikaday', new Pikaday(options));\n                }\n            } else {\n                if (typeof args[0] === 'string' && typeof plugin[args[0]] === 'function') {\n                    plugin[args[0]].apply(plugin, Array.prototype.slice.call(args,1));\n\n                    if (args[0] === 'destroy') {\n                        self.removeData('pikaday');\n                    }\n                }\n            }\n        });\n    };\n\n}));\n\n;\n!function(){var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;\n(function(){function S(a){function d(e){var b=e.charCodeAt(0);if(b!==92)return b;var a=e.charAt(1);return(b=r[a])?b:\"0\"<=a&&a<=\"7\"?parseInt(e.substring(1),8):a===\"u\"||a===\"x\"?parseInt(e.substring(2),16):e.charCodeAt(1)}function g(e){if(e<32)return(e<16?\"\\\\x0\":\"\\\\x\")+e.toString(16);e=String.fromCharCode(e);return e===\"\\\\\"||e===\"-\"||e===\"]\"||e===\"^\"?\"\\\\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\S\\s]|[^\\\\]/g),e=[],a=\nb[0]===\"^\",c=[\"[\"];a&&c.push(\"^\");for(var a=a?1:0,f=b.length;a<f;++a){var h=b[a];if(/\\\\[bdsw]/i.test(h))c.push(h);else{var h=d(h),l;a+2<f&&\"-\"===b[a+1]?(l=d(b[a+2]),a+=2):l=h;e.push([h,l]);l<65||h>122||(l<65||h>90||e.push([Math.max(65,h)|32,Math.min(l,90)|32]),l<97||h>122||e.push([Math.max(97,h)&-33,Math.min(l,122)&-33]))}}e.sort(function(e,a){return e[0]-a[0]||a[1]-e[1]});b=[];f=[];for(a=0;a<e.length;++a)h=e[a],h[0]<=f[1]+1?f[1]=Math.max(f[1],h[1]):b.push(f=h);for(a=0;a<b.length;++a)h=b[a],c.push(g(h[0])),\nh[1]>h[0]&&(h[1]+1>h[0]&&c.push(\"-\"),c.push(g(h[1])));c.push(\"]\");return c.join(\"\")}function s(e){for(var a=e.source.match(/\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*]|\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\\\d+|\\\\[^\\dux]|\\(\\?[!:=]|[()^]|[^()[\\\\^]+/g),c=a.length,d=[],f=0,h=0;f<c;++f){var l=a[f];l===\"(\"?++h:\"\\\\\"===l.charAt(0)&&(l=+l.substring(1))&&(l<=h?d[l]=-1:a[f]=g(l))}for(f=1;f<d.length;++f)-1===d[f]&&(d[f]=++x);for(h=f=0;f<c;++f)l=a[f],l===\"(\"?(++h,d[h]||(a[f]=\"(?:\")):\"\\\\\"===l.charAt(0)&&(l=+l.substring(1))&&l<=h&&\n(a[f]=\"\\\\\"+d[l]);for(f=0;f<c;++f)\"^\"===a[f]&&\"^\"!==a[f+1]&&(a[f]=\"\");if(e.ignoreCase&&m)for(f=0;f<c;++f)l=a[f],e=l.charAt(0),l.length>=2&&e===\"[\"?a[f]=b(l):e!==\"\\\\\"&&(a[f]=l.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return\"[\"+String.fromCharCode(a&-33,a|32)+\"]\"}));return a.join(\"\")}for(var x=0,m=!1,j=!1,k=0,c=a.length;k<c;++k){var i=a[k];if(i.ignoreCase)j=!0;else if(/[a-z]/i.test(i.source.replace(/\\\\u[\\da-f]{4}|\\\\x[\\da-f]{2}|\\\\[^UXux]/gi,\"\"))){m=!0;j=!1;break}}for(var r={b:8,t:9,n:10,v:11,\nf:12,r:13},n=[],k=0,c=a.length;k<c;++k){i=a[k];if(i.global||i.multiline)throw Error(\"\"+i);n.push(\"(?:\"+s(i)+\")\")}return RegExp(n.join(\"|\"),j?\"gi\":\"g\")}function T(a,d){function g(a){var c=a.nodeType;if(c==1){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)g(c);c=a.nodeName.toLowerCase();if(\"br\"===c||\"li\"===c)s[j]=\"\\n\",m[j<<1]=x++,m[j++<<1|1]=a}}else if(c==3||c==4)c=a.nodeValue,c.length&&(c=d?c.replace(/\\r\\n?/g,\"\\n\"):c.replace(/[\\t\\n\\r ]+/g,\" \"),s[j]=c,m[j<<1]=x,x+=c.length,m[j++<<1|1]=\na)}var b=/(?:^|\\s)nocode(?:\\s|$)/,s=[],x=0,m=[],j=0;g(a);return{a:s.join(\"\").replace(/\\n$/,\"\"),d:m}}function H(a,d,g,b){d&&(a={a:d,e:a},g(a),b.push.apply(b,a.g))}function U(a){for(var d=void 0,g=a.firstChild;g;g=g.nextSibling)var b=g.nodeType,d=b===1?d?a:g:b===3?V.test(g.nodeValue)?a:d:d;return d===a?void 0:d}function C(a,d){function g(a){for(var j=a.e,k=[j,\"pln\"],c=0,i=a.a.match(s)||[],r={},n=0,e=i.length;n<e;++n){var z=i[n],w=r[z],t=void 0,f;if(typeof w===\"string\")f=!1;else{var h=b[z.charAt(0)];\nif(h)t=z.match(h[1]),w=h[0];else{for(f=0;f<x;++f)if(h=d[f],t=z.match(h[1])){w=h[0];break}t||(w=\"pln\")}if((f=w.length>=5&&\"lang-\"===w.substring(0,5))&&!(t&&typeof t[1]===\"string\"))f=!1,w=\"src\";f||(r[z]=w)}h=c;c+=z.length;if(f){f=t[1];var l=z.indexOf(f),B=l+f.length;t[2]&&(B=z.length-t[2].length,l=B-f.length);w=w.substring(5);H(j+h,z.substring(0,l),g,k);H(j+h+l,f,I(w,f),k);H(j+h+B,z.substring(B),g,k)}else k.push(j+h,w)}a.g=k}var b={},s;(function(){for(var g=a.concat(d),j=[],k={},c=0,i=g.length;c<i;++c){var r=\ng[c],n=r[3];if(n)for(var e=n.length;--e>=0;)b[n.charAt(e)]=r;r=r[1];n=\"\"+r;k.hasOwnProperty(n)||(j.push(r),k[n]=q)}j.push(/[\\S\\s]/);s=S(j)})();var x=d.length;return g}function v(a){var d=[],g=[];a.tripleQuotedStrings?d.push([\"str\",/^(?:'''(?:[^'\\\\]|\\\\[\\S\\s]|''?(?=[^']))*(?:'''|$)|\"\"\"(?:[^\"\\\\]|\\\\[\\S\\s]|\"\"?(?=[^\"]))*(?:\"\"\"|$)|'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$))/,q,\"'\\\"\"]):a.multiLineStrings?d.push([\"str\",/^(?:'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)|`(?:[^\\\\`]|\\\\[\\S\\s])*(?:`|$))/,\nq,\"'\\\"`\"]):d.push([\"str\",/^(?:'(?:[^\\n\\r'\\\\]|\\\\.)*(?:'|$)|\"(?:[^\\n\\r\"\\\\]|\\\\.)*(?:\"|$))/,q,\"\\\"'\"]);a.verbatimStrings&&g.push([\"str\",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,q]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push([\"com\",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,\"#\"]):d.push([\"com\",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\\b|[^\\n\\r]*)/,q,\"#\"]),g.push([\"str\",/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h(?:h|pp|\\+\\+)?|[a-z]\\w*)>/,q])):d.push([\"com\",\n/^#[^\\n\\r]*/,q,\"#\"]));a.cStyleComments&&(g.push([\"com\",/^\\/\\/[^\\n\\r]*/,q]),g.push([\"com\",/^\\/\\*[\\S\\s]*?(?:\\*\\/|$)/,q]));if(b=a.regexLiterals){var s=(b=b>1?\"\":\"\\n\\r\")?\".\":\"[\\\\S\\\\s]\";g.push([\"lang-regex\",RegExp(\"^(?:^^\\\\.?|[+-]|[!=]=?=?|\\\\#|%=?|&&?=?|\\\\(|\\\\*=?|[+\\\\-]=|->|\\\\/=?|::?|<<?=?|>>?>?=?|,|;|\\\\?|@|\\\\[|~|{|\\\\^\\\\^?=?|\\\\|\\\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*(\"+(\"/(?=[^/*\"+b+\"])(?:[^/\\\\x5B\\\\x5C\"+b+\"]|\\\\x5C\"+s+\"|\\\\x5B(?:[^\\\\x5C\\\\x5D\"+b+\"]|\\\\x5C\"+\ns+\")*(?:\\\\x5D|$))+/\")+\")\")])}(b=a.types)&&g.push([\"typ\",b]);b=(\"\"+a.keywords).replace(/^ | $/g,\"\");b.length&&g.push([\"kwd\",RegExp(\"^(?:\"+b.replace(/[\\s,]+/g,\"|\")+\")\\\\b\"),q]);d.push([\"pln\",/^\\s+/,q,\" \\r\\n\\t\\u00a0\"]);b=\"^.[^\\\\s\\\\w.$@'\\\"`/\\\\\\\\]*\";a.regexLiterals&&(b+=\"(?!s*/)\");g.push([\"lit\",/^@[$_a-z][\\w$@]*/i,q],[\"typ\",/^(?:[@_]?[A-Z]+[a-z][\\w$@]*|\\w+_t\\b)/,q],[\"pln\",/^[$_a-z][\\w$@]*/i,q],[\"lit\",/^(?:0x[\\da-f]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+-]?\\d+)?)[a-z]*/i,q,\"0123456789\"],[\"pln\",/^\\\\[\\S\\s]?/,\nq],[\"pun\",RegExp(b),q]);return C(d,g)}function J(a,d,g){function b(a){var c=a.nodeType;if(c==1&&!x.test(a.className))if(\"br\"===a.nodeName)s(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&g){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(j.createTextNode(d),a.nextSibling),s(a),c||a.parentNode.removeChild(a)}}function s(a){function b(a,c){var d=\nc?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=b(e,1),g=a.nextSibling;e.appendChild(d);for(var i=g;i;i=g)g=i.nextSibling,e.appendChild(i)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var x=/(?:^|\\s)nocode(?:\\s|$)/,m=/\\r\\n?|\\n/,j=a.ownerDocument,k=j.createElement(\"li\");a.firstChild;)k.appendChild(a.firstChild);for(var c=[k],i=0;i<c.length;++i)b(c[i]);d===(d|0)&&c[0].setAttribute(\"value\",d);var r=j.createElement(\"ol\");\nr.className=\"linenums\";for(var d=Math.max(0,d-1|0)||0,i=0,n=c.length;i<n;++i)k=c[i],k.className=\"L\"+(i+d)%10,k.firstChild||k.appendChild(j.createTextNode(\"\\u00a0\")),r.appendChild(k);a.appendChild(r)}function p(a,d){for(var g=d.length;--g>=0;){var b=d[g];F.hasOwnProperty(b)?D.console&&console.warn(\"cannot override language handler %s\",b):F[b]=a}}function I(a,d){if(!a||!F.hasOwnProperty(a))a=/^\\s*</.test(d)?\"default-markup\":\"default-code\";return F[a]}function K(a){var d=a.h;try{var g=T(a.c,a.i),b=g.a;\na.a=b;a.d=g.d;a.e=0;I(d,b)(a);var s=/\\bMSIE\\s(\\d+)/.exec(navigator.userAgent),s=s&&+s[1]<=8,d=/\\n/g,x=a.a,m=x.length,g=0,j=a.d,k=j.length,b=0,c=a.g,i=c.length,r=0;c[i]=m;var n,e;for(e=n=0;e<i;)c[e]!==c[e+2]?(c[n++]=c[e++],c[n++]=c[e++]):e+=2;i=n;for(e=n=0;e<i;){for(var p=c[e],w=c[e+1],t=e+2;t+2<=i&&c[t+1]===w;)t+=2;c[n++]=p;c[n++]=w;e=t}c.length=n;var f=a.c,h;if(f)h=f.style.display,f.style.display=\"none\";try{for(;b<k;){var l=j[b+2]||m,B=c[r+2]||m,t=Math.min(l,B),A=j[b+1],G;if(A.nodeType!==1&&(G=x.substring(g,\nt))){s&&(G=G.replace(d,\"\\r\"));A.nodeValue=G;var L=A.ownerDocument,o=L.createElement(\"span\");o.className=c[r+1];var v=A.parentNode;v.replaceChild(o,A);o.appendChild(A);g<l&&(j[b+1]=A=L.createTextNode(x.substring(t,l)),v.insertBefore(A,o.nextSibling))}g=t;g>=l&&(b+=2);g>=B&&(r+=2)}}finally{if(f)f.style.display=h}}catch(u){D.console&&console.log(u&&u.stack||u)}}var D=window,y=[\"break,continue,do,else,for,if,return,while\"],E=[[y,\"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"],\n\"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof\"],M=[E,\"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where\"],N=[E,\"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient\"],\nO=[N,\"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where\"],E=[E,\"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN\"],P=[y,\"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None\"],\nQ=[y,\"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END\"],W=[y,\"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use\"],y=[y,\"case,done,elif,esac,eval,fi,function,in,local,set,then,until\"],R=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)\\b/,\nV=/\\S/,X=v({keywords:[M,O,E,\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",P,Q,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),F={};p(X,[\"default-code\"]);p(C([],[[\"pln\",/^[^<?]+/],[\"dec\",/^<!\\w[^>]*(?:>|$)/],[\"com\",/^<\\!--[\\S\\s]*?(?:--\\>|$)/],[\"lang-\",/^<\\?([\\S\\s]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\S\\s]+?)(?:%>|$)/],[\"pun\",/^(?:<[%?]|[%?]>)/],[\"lang-\",\n/^<xmp\\b[^>]*>([\\S\\s]+?)<\\/xmp\\b[^>]*>/i],[\"lang-js\",/^<script\\b[^>]*>([\\S\\s]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\S\\s]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i]]),[\"default-markup\",\"htm\",\"html\",\"mxml\",\"xhtml\",\"xml\",\"xsl\"]);p(C([[\"pln\",/^\\s+/,q,\" \\t\\r\\n\"],[\"atv\",/^(?:\"[^\"]*\"?|'[^']*'?)/,q,\"\\\"'\"]],[[\"tag\",/^^<\\/?[a-z](?:[\\w-.:]*\\w)?|\\/?>$/i],[\"atn\",/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],[\"lang-uq.val\",/^=\\s*([^\\s\"'>]*(?:[^\\s\"'/>]|\\/(?=\\s)))/],[\"pun\",/^[/<->]+/],\n[\"lang-js\",/^on\\w+\\s*=\\s*\"([^\"]+)\"/i],[\"lang-js\",/^on\\w+\\s*=\\s*'([^']+)'/i],[\"lang-js\",/^on\\w+\\s*=\\s*([^\\s\"'>]+)/i],[\"lang-css\",/^style\\s*=\\s*\"([^\"]+)\"/i],[\"lang-css\",/^style\\s*=\\s*'([^']+)'/i],[\"lang-css\",/^style\\s*=\\s*([^\\s\"'>]+)/i]]),[\"in.tag\"]);p(C([],[[\"atv\",/^[\\S\\s]+/]]),[\"uq.val\"]);p(v({keywords:M,hashComments:!0,cStyleComments:!0,types:R}),[\"c\",\"cc\",\"cpp\",\"cxx\",\"cyc\",\"m\"]);p(v({keywords:\"null,true,false\"}),[\"json\"]);p(v({keywords:O,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:R}),\n[\"cs\"]);p(v({keywords:N,cStyleComments:!0}),[\"java\"]);p(v({keywords:y,hashComments:!0,multiLineStrings:!0}),[\"bash\",\"bsh\",\"csh\",\"sh\"]);p(v({keywords:P,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),[\"cv\",\"py\",\"python\"]);p(v({keywords:\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),[\"perl\",\"pl\",\"pm\"]);p(v({keywords:Q,\nhashComments:!0,multiLineStrings:!0,regexLiterals:!0}),[\"rb\",\"ruby\"]);p(v({keywords:E,cStyleComments:!0,regexLiterals:!0}),[\"javascript\",\"js\"]);p(v({keywords:\"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes\",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),[\"coffee\"]);p(v({keywords:W,cStyleComments:!0,multilineStrings:!0}),[\"rc\",\"rs\",\"rust\"]);\np(C([],[[\"str\",/^[\\S\\s]+/]]),[\"regex\"]);var Y=D.PR={createSimpleLexer:C,registerLangHandler:p,sourceDecorator:v,PR_ATTRIB_NAME:\"atn\",PR_ATTRIB_VALUE:\"atv\",PR_COMMENT:\"com\",PR_DECLARATION:\"dec\",PR_KEYWORD:\"kwd\",PR_LITERAL:\"lit\",PR_NOCODE:\"nocode\",PR_PLAIN:\"pln\",PR_PUNCTUATION:\"pun\",PR_SOURCE:\"src\",PR_STRING:\"str\",PR_TAG:\"tag\",PR_TYPE:\"typ\",prettyPrintOne:D.prettyPrintOne=function(a,d,g){var b=document.createElement(\"div\");b.innerHTML=\"<pre>\"+a+\"</pre>\";b=b.firstChild;g&&J(b,g,!0);K({h:d,j:g,c:b,i:1});\nreturn b.innerHTML},prettyPrint:D.prettyPrint=function(a,d){function g(){for(var b=D.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;i<p.length&&c.now()<b;i++){for(var d=p[i],j=h,k=d;k=k.previousSibling;){var m=k.nodeType,o=(m===7||m===8)&&k.nodeValue;if(o?!/^\\??prettify\\b/.test(o):m!==3||/\\S/.test(k.nodeValue))break;if(o){j={};o.replace(/\\b(\\w+)=([\\w%+\\-.:]+)/g,function(a,b,c){j[b]=c});break}}k=d.className;if((j!==h||e.test(k))&&!v.test(k)){m=!1;for(o=d.parentNode;o;o=o.parentNode)if(f.test(o.tagName)&&\no.className&&e.test(o.className)){m=!0;break}if(!m){d.className+=\" prettyprinted\";m=j.lang;if(!m){var m=k.match(n),y;if(!m&&(y=U(d))&&t.test(y.tagName))m=y.className.match(n);m&&(m=m[1])}if(w.test(d.tagName))o=1;else var o=d.currentStyle,u=s.defaultView,o=(o=o?o.whiteSpace:u&&u.getComputedStyle?u.getComputedStyle(d,q).getPropertyValue(\"white-space\"):0)&&\"pre\"===o.substring(0,3);u=j.linenums;if(!(u=u===\"true\"||+u))u=(u=k.match(/\\blinenums\\b(?::(\\d+))?/))?u[1]&&u[1].length?+u[1]:!0:!1;u&&J(d,u,o);r=\n{h:m,c:d,j:u,i:o};K(r)}}}i<p.length?setTimeout(g,250):\"function\"===typeof a&&a()}for(var b=d||document.body,s=b.ownerDocument||document,b=[b.getElementsByTagName(\"pre\"),b.getElementsByTagName(\"code\"),b.getElementsByTagName(\"xmp\")],p=[],m=0;m<b.length;++m)for(var j=0,k=b[m].length;j<k;++j)p.push(b[m][j]);var b=q,c=Date;c.now||(c={now:function(){return+new Date}});var i=0,r,n=/\\blang(?:uage)?-([\\w.]+)(?!\\S)/,e=/\\bprettyprint\\b/,v=/\\bprettyprinted\\b/,w=/pre|xmp/i,t=/^code$/i,f=/^(?:pre|code|xmp)$/i,\nh={};g()}};typeof define===\"function\"&&define.amd&&define(\"google-code-prettify\",[],function(){return Y})})();}()\n\n;\n(function($) {\n/**\n * Runs functions given in arguments in series, each functions passing their results to the next one.\n * Return jQuery Deferred object.\n *\n * @example\n * $.waterfall(\n *    function() { return $.ajax({url : first_url}) },\n *    function() { return $.ajax({url : second_url}) },\n *    function() { return $.ajax({url : another_url}) }\n *).fail(function() {\n *    console.log(arguments)\n *).done(function() {\n *    console.log(arguments)\n *})\n *\n * @example2\n * event_chain = [];\n * event_chain.push(function() { var deferred = $.Deferred(); deferred.resolve(); return deferred; });\n * $.waterfall.apply(this, event_chain).fail(function(){}).done(function(){});\n * \n * @author Dmitry (dio) Levashov, dio@std42.ru\n * @return jQuery.Deferred\n */\n$.waterfall = function() {\n    var steps   = [],\n        dfrd    = $.Deferred(),\n        pointer = 0;\n\n    $.each(arguments, function(i, a) {\n        steps.push(function() {\n            var args = [].slice.apply(arguments), d;\n\n            if (typeof(a) == 'function') {\n                if (!((d = a.apply(null, args)) && d.promise)) {\n                    d = $.Deferred()[d === false ? 'reject' : 'resolve'](d);\n                }\n            } else if (a && a.promise) {\n                d = a;\n            } else {\n                d = $.Deferred()[a === false ? 'reject' : 'resolve'](a);\n            }\n\n            d.fail(function() {\n                dfrd.reject.apply(dfrd, [].slice.apply(arguments));\n            })\n            .done(function(data) {\n                pointer++;\n                args.push(data);\n\n                pointer == steps.length\n                    ? dfrd.resolve.apply(dfrd, args)\n                    : steps[pointer].apply(null, args);\n            });\n        });\n    });\n\n    steps.length ? steps[0]() : dfrd.resolve();\n\n    return dfrd;\n}\n\n})(jQuery);\n;\n/**\n * jquery.Jcrop.js v0.9.12\n * jQuery Image Cropping Plugin - released under MIT License \n * Author: Kelly Hallman <khallman@gmail.com>\n * http://github.com/tapmodo/Jcrop\n * Copyright (c) 2008-2013 Tapmodo Interactive LLC {{{\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n *\n * }}}\n */\n\n(function ($) {\n\n  $.Jcrop = function (obj, opt) {\n    var options = $.extend({}, $.Jcrop.defaults),\n        docOffset,\n        _ua = navigator.userAgent.toLowerCase(),\n        is_msie = /msie/.test(_ua),\n        ie6mode = /msie [1-6]\\./.test(_ua);\n\n    // Internal Methods {{{\n    function px(n) {\n      return Math.round(n) + 'px';\n    }\n    function cssClass(cl) {\n      return options.baseClass + '-' + cl;\n    }\n    function supportsColorFade() {\n      return $.fx.step.hasOwnProperty('backgroundColor');\n    }\n    function getPos(obj) //{{{\n    {\n      var pos = $(obj).offset();\n      return [pos.left, pos.top];\n    }\n    //}}}\n    function mouseAbs(e) //{{{\n    {\n      return [(e.pageX - docOffset[0]), (e.pageY - docOffset[1])];\n    }\n    //}}}\n    function setOptions(opt) //{{{\n    {\n      if (typeof(opt) !== 'object') opt = {};\n      options = $.extend(options, opt);\n\n      $.each(['onChange','onSelect','onRelease','onDblClick'],function(i,e) {\n        if (typeof(options[e]) !== 'function') options[e] = function () {};\n      });\n    }\n    //}}}\n    function startDragMode(mode, pos, touch) //{{{\n    {\n      docOffset = getPos($img);\n      Tracker.setCursor(mode === 'move' ? mode : mode + '-resize');\n\n      if (mode === 'move') {\n        return Tracker.activateHandlers(createMover(pos), doneSelect, touch);\n      }\n\n      var fc = Coords.getFixed();\n      var opp = oppLockCorner(mode);\n      var opc = Coords.getCorner(oppLockCorner(opp));\n\n      Coords.setPressed(Coords.getCorner(opp));\n      Coords.setCurrent(opc);\n\n      Tracker.activateHandlers(dragmodeHandler(mode, fc), doneSelect, touch);\n    }\n    //}}}\n    function dragmodeHandler(mode, f) //{{{\n    {\n      return function (pos) {\n        if (!options.aspectRatio) {\n          switch (mode) {\n          case 'e':\n            pos[1] = f.y2;\n            break;\n          case 'w':\n            pos[1] = f.y2;\n            break;\n          case 'n':\n            pos[0] = f.x2;\n            break;\n          case 's':\n            pos[0] = f.x2;\n            break;\n          }\n        } else {\n          switch (mode) {\n          case 'e':\n            pos[1] = f.y + 1;\n            break;\n          case 'w':\n            pos[1] = f.y + 1;\n            break;\n          case 'n':\n            pos[0] = f.x + 1;\n            break;\n          case 's':\n            pos[0] = f.x + 1;\n            break;\n          }\n        }\n        Coords.setCurrent(pos);\n        Selection.update();\n      };\n    }\n    //}}}\n    function createMover(pos) //{{{\n    {\n      var lloc = pos;\n      KeyManager.watchKeys();\n\n      return function (pos) {\n        Coords.moveOffset([pos[0] - lloc[0], pos[1] - lloc[1]]);\n        lloc = pos;\n\n        Selection.update();\n      };\n    }\n    //}}}\n    function oppLockCorner(ord) //{{{\n    {\n      switch (ord) {\n      case 'n':\n        return 'sw';\n      case 's':\n        return 'nw';\n      case 'e':\n        return 'nw';\n      case 'w':\n        return 'ne';\n      case 'ne':\n        return 'sw';\n      case 'nw':\n        return 'se';\n      case 'se':\n        return 'nw';\n      case 'sw':\n        return 'ne';\n      }\n    }\n    //}}}\n    function createDragger(ord) //{{{\n    {\n      return function (e) {\n        if (options.disabled) {\n          return false;\n        }\n        if ((ord === 'move') && !options.allowMove) {\n          return false;\n        }\n        \n        // Fix position of crop area when dragged the very first time.\n        // Necessary when crop image is in a hidden element when page is loaded.\n        docOffset = getPos($img);\n\n        btndown = true;\n        startDragMode(ord, mouseAbs(e));\n        e.stopPropagation();\n        e.preventDefault();\n        return false;\n      };\n    }\n    //}}}\n    function presize($obj, w, h) //{{{\n    {\n      var nw = $obj.width(),\n          nh = $obj.height();\n      if ((nw > w) && w > 0) {\n        nw = w;\n        nh = (w / $obj.width()) * $obj.height();\n      }\n      if ((nh > h) && h > 0) {\n        nh = h;\n        nw = (h / $obj.height()) * $obj.width();\n      }\n      xscale = $obj.width() / nw;\n      yscale = $obj.height() / nh;\n      $obj.width(nw).height(nh);\n    }\n    //}}}\n    function unscale(c) //{{{\n    {\n      return {\n        x: c.x * xscale,\n        y: c.y * yscale,\n        x2: c.x2 * xscale,\n        y2: c.y2 * yscale,\n        w: c.w * xscale,\n        h: c.h * yscale\n      };\n    }\n    //}}}\n    function doneSelect(pos) //{{{\n    {\n      var c = Coords.getFixed();\n      if ((c.w > options.minSelect[0]) && (c.h > options.minSelect[1])) {\n        Selection.enableHandles();\n        Selection.done();\n      } else {\n        Selection.release();\n      }\n      Tracker.setCursor(options.allowSelect ? 'crosshair' : 'default');\n    }\n    //}}}\n    function newSelection(e) //{{{\n    {\n      if (options.disabled) {\n        return false;\n      }\n      if (!options.allowSelect) {\n        return false;\n      }\n      btndown = true;\n      docOffset = getPos($img);\n      Selection.disableHandles();\n      Tracker.setCursor('crosshair');\n      var pos = mouseAbs(e);\n      Coords.setPressed(pos);\n      Selection.update();\n      Tracker.activateHandlers(selectDrag, doneSelect, e.type.substring(0,5)==='touch');\n      KeyManager.watchKeys();\n\n      e.stopPropagation();\n      e.preventDefault();\n      return false;\n    }\n    //}}}\n    function selectDrag(pos) //{{{\n    {\n      Coords.setCurrent(pos);\n      Selection.update();\n    }\n    //}}}\n    function newTracker() //{{{\n    {\n      var trk = $('<div></div>').addClass(cssClass('tracker'));\n      if (is_msie) {\n        trk.css({\n          opacity: 0,\n          backgroundColor: 'white'\n        });\n      }\n      return trk;\n    }\n    //}}}\n\n    // }}}\n    // Initialization {{{\n    // Sanitize some options {{{\n    if (typeof(obj) !== 'object') {\n      obj = $(obj)[0];\n    }\n    if (typeof(opt) !== 'object') {\n      opt = {};\n    }\n    // }}}\n    setOptions(opt);\n    // Initialize some jQuery objects {{{\n    // The values are SET on the image(s) for the interface\n    // If the original image has any of these set, they will be reset\n    // However, if you destroy() the Jcrop instance the original image's\n    // character in the DOM will be as you left it.\n    var img_css = {\n      border: 'none',\n      visibility: 'visible',\n      margin: 0,\n      padding: 0,\n      position: 'absolute',\n      top: 0,\n      left: 0\n    };\n\n    var $origimg = $(obj),\n      img_mode = true;\n\n    if (obj.tagName == 'IMG') {\n      // Fix size of crop image.\n      // Necessary when crop image is within a hidden element when page is loaded.\n      if ($origimg[0].width != 0 && $origimg[0].height != 0) {\n        // Obtain dimensions from contained img element.\n        $origimg.width($origimg[0].width);\n        $origimg.height($origimg[0].height);\n      } else {\n        // Obtain dimensions from temporary image in case the original is not loaded yet (e.g. IE 7.0). \n        var tempImage = new Image();\n        tempImage.src = $origimg[0].src;\n        $origimg.width(tempImage.width);\n        $origimg.height(tempImage.height);\n      } \n\n      var $img = $origimg.clone().removeAttr('id').css(img_css).show();\n\n      $img.width($origimg.width());\n      $img.height($origimg.height());\n      $origimg.after($img).hide();\n\n    } else {\n      $img = $origimg.css(img_css).show();\n      img_mode = false;\n      if (options.shade === null) { options.shade = true; }\n    }\n\n    presize($img, options.boxWidth, options.boxHeight);\n\n    var boundx = $img.width(),\n        boundy = $img.height(),\n        \n        \n        $div = $('<div />').width(boundx).height(boundy).addClass(cssClass('holder')).css({\n        position: 'relative',\n        backgroundColor: options.bgColor\n      }).insertAfter($origimg).append($img);\n\n    if (options.addClass) {\n      $div.addClass(options.addClass);\n    }\n\n    var $img2 = $('<div />'),\n\n        $img_holder = $('<div />') \n        .width('100%').height('100%').css({\n          zIndex: 310,\n          position: 'absolute',\n          overflow: 'hidden'\n        }),\n\n        $hdl_holder = $('<div />') \n        .width('100%').height('100%').css('zIndex', 320), \n\n        $sel = $('<div />') \n        .css({\n          position: 'absolute',\n          zIndex: 600\n        }).dblclick(function(){\n          var c = Coords.getFixed();\n          options.onDblClick.call(api,c);\n        }).insertBefore($img).append($img_holder, $hdl_holder); \n\n    if (img_mode) {\n\n      $img2 = $('<img />')\n          .attr('src', $img.attr('src')).css(img_css).width(boundx).height(boundy),\n\n      $img_holder.append($img2);\n\n    }\n\n    if (ie6mode) {\n      $sel.css({\n        overflowY: 'hidden'\n      });\n    }\n\n    var bound = options.boundary;\n    var $trk = newTracker().width(boundx + (bound * 2)).height(boundy + (bound * 2)).css({\n      position: 'absolute',\n      top: px(-bound),\n      left: px(-bound),\n      zIndex: 290\n    }).mousedown(newSelection);\n\n    /* }}} */\n    // Set more variables {{{\n    var bgcolor = options.bgColor,\n        bgopacity = options.bgOpacity,\n        xlimit, ylimit, xmin, ymin, xscale, yscale, enabled = true,\n        btndown, animating, shift_down;\n\n    docOffset = getPos($img);\n    // }}}\n    // }}}\n    // Internal Modules {{{\n    // Touch Module {{{ \n    var Touch = (function () {\n      // Touch support detection function adapted (under MIT License)\n      // from code by Jeffrey Sambells - http://github.com/iamamused/\n      function hasTouchSupport() {\n        var support = {}, events = ['touchstart', 'touchmove', 'touchend'],\n            el = document.createElement('div'), i;\n\n        try {\n          for(i=0; i<events.length; i++) {\n            var eventName = events[i];\n            eventName = 'on' + eventName;\n            var isSupported = (eventName in el);\n            if (!isSupported) {\n              el.setAttribute(eventName, 'return;');\n              isSupported = typeof el[eventName] == 'function';\n            }\n            support[events[i]] = isSupported;\n          }\n          return support.touchstart && support.touchend && support.touchmove;\n        }\n        catch(err) {\n          return false;\n        }\n      }\n\n      function detectSupport() {\n        if ((options.touchSupport === true) || (options.touchSupport === false)) return options.touchSupport;\n          else return hasTouchSupport();\n      }\n      return {\n        createDragger: function (ord) {\n          return function (e) {\n            if (options.disabled) {\n              return false;\n            }\n            if ((ord === 'move') && !options.allowMove) {\n              return false;\n            }\n            docOffset = getPos($img);\n            btndown = true;\n            startDragMode(ord, mouseAbs(Touch.cfilter(e)), true);\n            e.stopPropagation();\n            e.preventDefault();\n            return false;\n          };\n        },\n        newSelection: function (e) {\n          return newSelection(Touch.cfilter(e));\n        },\n        cfilter: function (e){\n          e.pageX = e.originalEvent.changedTouches[0].pageX;\n          e.pageY = e.originalEvent.changedTouches[0].pageY;\n          return e;\n        },\n        fixTouchSupport: function(e) {\n          if ($(e.currentTarget).hasClass('jcrop-tracker')) e.stopPropagation();\n        },\n        isSupported: hasTouchSupport,\n        support: detectSupport()\n      };\n    }());\n    // }}}\n    // Coords Module {{{\n    var Coords = (function () {\n      var x1 = 0,\n          y1 = 0,\n          x2 = 0,\n          y2 = 0,\n          ox, oy;\n\n      function setPressed(pos) //{{{\n      {\n        pos = rebound(pos);\n        x2 = x1 = pos[0];\n        y2 = y1 = pos[1];\n      }\n      //}}}\n      function setCurrent(pos) //{{{\n      {\n        pos = rebound(pos);\n        ox = pos[0] - x2;\n        oy = pos[1] - y2;\n        x2 = pos[0];\n        y2 = pos[1];\n      }\n      //}}}\n      function getOffset() //{{{\n      {\n        return [ox, oy];\n      }\n      //}}}\n      function moveOffset(offset) //{{{\n      {\n        var ox = offset[0],\n            oy = offset[1];\n\n        if (0 > x1 + ox) {\n          ox -= ox + x1;\n        }\n        if (0 > y1 + oy) {\n          oy -= oy + y1;\n        }\n\n        if (boundy < y2 + oy) {\n          oy += boundy - (y2 + oy);\n        }\n        if (boundx < x2 + ox) {\n          ox += boundx - (x2 + ox);\n        }\n\n        x1 += ox;\n        x2 += ox;\n        y1 += oy;\n        y2 += oy;\n      }\n      //}}}\n      function getCorner(ord) //{{{\n      {\n        var c = getFixed();\n        switch (ord) {\n        case 'ne':\n          return [c.x2, c.y];\n        case 'nw':\n          return [c.x, c.y];\n        case 'se':\n          return [c.x2, c.y2];\n        case 'sw':\n          return [c.x, c.y2];\n        }\n      }\n      //}}}\n      function getFixed() //{{{\n      {\n        if (!options.aspectRatio) {\n          return getRect();\n        }\n        // This function could use some optimization I think...\n        var aspect = options.aspectRatio,\n            min_x = options.minSize[0] / xscale,\n            \n            \n            //min_y = options.minSize[1]/yscale,\n            max_x = options.maxSize[0] / xscale,\n            max_y = options.maxSize[1] / yscale,\n            rw = x2 - x1,\n            rh = y2 - y1,\n            rwa = Math.abs(rw),\n            rha = Math.abs(rh),\n            real_ratio = rwa / rha,\n            xx, yy, w, h;\n\n        if (max_x === 0) {\n          max_x = boundx * 10;\n        }\n        if (max_y === 0) {\n          max_y = boundy * 10;\n        }\n        if (real_ratio < aspect) {\n          yy = y2;\n          w = rha * aspect;\n          xx = rw < 0 ? x1 - w : w + x1;\n\n          if (xx < 0) {\n            xx = 0;\n            h = Math.abs((xx - x1) / aspect);\n            yy = rh < 0 ? y1 - h : h + y1;\n          } else if (xx > boundx) {\n            xx = boundx;\n            h = Math.abs((xx - x1) / aspect);\n            yy = rh < 0 ? y1 - h : h + y1;\n          }\n        } else {\n          xx = x2;\n          h = rwa / aspect;\n          yy = rh < 0 ? y1 - h : y1 + h;\n          if (yy < 0) {\n            yy = 0;\n            w = Math.abs((yy - y1) * aspect);\n            xx = rw < 0 ? x1 - w : w + x1;\n          } else if (yy > boundy) {\n            yy = boundy;\n            w = Math.abs(yy - y1) * aspect;\n            xx = rw < 0 ? x1 - w : w + x1;\n          }\n        }\n\n        // Magic %-)\n        if (xx > x1) { // right side\n          if (xx - x1 < min_x) {\n            xx = x1 + min_x;\n          } else if (xx - x1 > max_x) {\n            xx = x1 + max_x;\n          }\n          if (yy > y1) {\n            yy = y1 + (xx - x1) / aspect;\n          } else {\n            yy = y1 - (xx - x1) / aspect;\n          }\n        } else if (xx < x1) { // left side\n          if (x1 - xx < min_x) {\n            xx = x1 - min_x;\n          } else if (x1 - xx > max_x) {\n            xx = x1 - max_x;\n          }\n          if (yy > y1) {\n            yy = y1 + (x1 - xx) / aspect;\n          } else {\n            yy = y1 - (x1 - xx) / aspect;\n          }\n        }\n\n        if (xx < 0) {\n          x1 -= xx;\n          xx = 0;\n        } else if (xx > boundx) {\n          x1 -= xx - boundx;\n          xx = boundx;\n        }\n\n        if (yy < 0) {\n          y1 -= yy;\n          yy = 0;\n        } else if (yy > boundy) {\n          y1 -= yy - boundy;\n          yy = boundy;\n        }\n\n        return makeObj(flipCoords(x1, y1, xx, yy));\n      }\n      //}}}\n      function rebound(p) //{{{\n      {\n        if (p[0] < 0) p[0] = 0;\n        if (p[1] < 0) p[1] = 0;\n\n        if (p[0] > boundx) p[0] = boundx;\n        if (p[1] > boundy) p[1] = boundy;\n\n        return [Math.round(p[0]), Math.round(p[1])];\n      }\n      //}}}\n      function flipCoords(x1, y1, x2, y2) //{{{\n      {\n        var xa = x1,\n            xb = x2,\n            ya = y1,\n            yb = y2;\n        if (x2 < x1) {\n          xa = x2;\n          xb = x1;\n        }\n        if (y2 < y1) {\n          ya = y2;\n          yb = y1;\n        }\n        return [xa, ya, xb, yb];\n      }\n      //}}}\n      function getRect() //{{{\n      {\n        var xsize = x2 - x1,\n            ysize = y2 - y1,\n            delta;\n\n        if (xlimit && (Math.abs(xsize) > xlimit)) {\n          x2 = (xsize > 0) ? (x1 + xlimit) : (x1 - xlimit);\n        }\n        if (ylimit && (Math.abs(ysize) > ylimit)) {\n          y2 = (ysize > 0) ? (y1 + ylimit) : (y1 - ylimit);\n        }\n\n        if (ymin / yscale && (Math.abs(ysize) < ymin / yscale)) {\n          y2 = (ysize > 0) ? (y1 + ymin / yscale) : (y1 - ymin / yscale);\n        }\n        if (xmin / xscale && (Math.abs(xsize) < xmin / xscale)) {\n          x2 = (xsize > 0) ? (x1 + xmin / xscale) : (x1 - xmin / xscale);\n        }\n\n        if (x1 < 0) {\n          x2 -= x1;\n          x1 -= x1;\n        }\n        if (y1 < 0) {\n          y2 -= y1;\n          y1 -= y1;\n        }\n        if (x2 < 0) {\n          x1 -= x2;\n          x2 -= x2;\n        }\n        if (y2 < 0) {\n          y1 -= y2;\n          y2 -= y2;\n        }\n        if (x2 > boundx) {\n          delta = x2 - boundx;\n          x1 -= delta;\n          x2 -= delta;\n        }\n        if (y2 > boundy) {\n          delta = y2 - boundy;\n          y1 -= delta;\n          y2 -= delta;\n        }\n        if (x1 > boundx) {\n          delta = x1 - boundy;\n          y2 -= delta;\n          y1 -= delta;\n        }\n        if (y1 > boundy) {\n          delta = y1 - boundy;\n          y2 -= delta;\n          y1 -= delta;\n        }\n\n        return makeObj(flipCoords(x1, y1, x2, y2));\n      }\n      //}}}\n      function makeObj(a) //{{{\n      {\n        return {\n          x: a[0],\n          y: a[1],\n          x2: a[2],\n          y2: a[3],\n          w: a[2] - a[0],\n          h: a[3] - a[1]\n        };\n      }\n      //}}}\n\n      return {\n        flipCoords: flipCoords,\n        setPressed: setPressed,\n        setCurrent: setCurrent,\n        getOffset: getOffset,\n        moveOffset: moveOffset,\n        getCorner: getCorner,\n        getFixed: getFixed\n      };\n    }());\n\n    //}}}\n    // Shade Module {{{\n    var Shade = (function() {\n      var enabled = false,\n          holder = $('<div />').css({\n            position: 'absolute',\n            zIndex: 240,\n            opacity: 0\n          }),\n          shades = {\n            top: createShade(),\n            left: createShade().height(boundy),\n            right: createShade().height(boundy),\n            bottom: createShade()\n          };\n\n      function resizeShades(w,h) {\n        shades.left.css({ height: px(h) });\n        shades.right.css({ height: px(h) });\n      }\n      function updateAuto()\n      {\n        return updateShade(Coords.getFixed());\n      }\n      function updateShade(c)\n      {\n        shades.top.css({\n          left: px(c.x),\n          width: px(c.w),\n          height: px(c.y)\n        });\n        shades.bottom.css({\n          top: px(c.y2),\n          left: px(c.x),\n          width: px(c.w),\n          height: px(boundy-c.y2)\n        });\n        shades.right.css({\n          left: px(c.x2),\n          width: px(boundx-c.x2)\n        });\n        shades.left.css({\n          width: px(c.x)\n        });\n      }\n      function createShade() {\n        return $('<div />').css({\n          position: 'absolute',\n          backgroundColor: options.shadeColor||options.bgColor\n        }).appendTo(holder);\n      }\n      function enableShade() {\n        if (!enabled) {\n          enabled = true;\n          holder.insertBefore($img);\n          updateAuto();\n          Selection.setBgOpacity(1,0,1);\n          $img2.hide();\n\n          setBgColor(options.shadeColor||options.bgColor,1);\n          if (Selection.isAwake())\n          {\n            setOpacity(options.bgOpacity,1);\n          }\n            else setOpacity(1,1);\n        }\n      }\n      function setBgColor(color,now) {\n        colorChangeMacro(getShades(),color,now);\n      }\n      function disableShade() {\n        if (enabled) {\n          holder.remove();\n          $img2.show();\n          enabled = false;\n          if (Selection.isAwake()) {\n            Selection.setBgOpacity(options.bgOpacity,1,1);\n          } else {\n            Selection.setBgOpacity(1,1,1);\n            Selection.disableHandles();\n          }\n          colorChangeMacro($div,0,1);\n        }\n      }\n      function setOpacity(opacity,now) {\n        if (enabled) {\n          if (options.bgFade && !now) {\n            holder.animate({\n              opacity: 1-opacity\n            },{\n              queue: false,\n              duration: options.fadeTime\n            });\n          }\n          else holder.css({opacity:1-opacity});\n        }\n      }\n      function refreshAll() {\n        options.shade ? enableShade() : disableShade();\n        if (Selection.isAwake()) setOpacity(options.bgOpacity);\n      }\n      function getShades() {\n        return holder.children();\n      }\n\n      return {\n        update: updateAuto,\n        updateRaw: updateShade,\n        getShades: getShades,\n        setBgColor: setBgColor,\n        enable: enableShade,\n        disable: disableShade,\n        resize: resizeShades,\n        refresh: refreshAll,\n        opacity: setOpacity\n      };\n    }());\n    // }}}\n    // Selection Module {{{\n    var Selection = (function () {\n      var awake,\n          hdep = 370,\n          borders = {},\n          handle = {},\n          dragbar = {},\n          seehandles = false;\n\n      // Private Methods\n      function insertBorder(type) //{{{\n      {\n        var jq = $('<div />').css({\n          position: 'absolute',\n          opacity: options.borderOpacity\n        }).addClass(cssClass(type));\n        $img_holder.append(jq);\n        return jq;\n      }\n      //}}}\n      function dragDiv(ord, zi) //{{{\n      {\n        var jq = $('<div />').mousedown(createDragger(ord)).css({\n          cursor: ord + '-resize',\n          position: 'absolute',\n          zIndex: zi\n        }).addClass('ord-'+ord);\n\n        if (Touch.support) {\n          jq.bind('touchstart.jcrop', Touch.createDragger(ord));\n        }\n\n        $hdl_holder.append(jq);\n        return jq;\n      }\n      //}}}\n      function insertHandle(ord) //{{{\n      {\n        var hs = options.handleSize,\n\n          div = dragDiv(ord, hdep++).css({\n            opacity: options.handleOpacity\n          }).addClass(cssClass('handle'));\n\n        if (hs) { div.width(hs).height(hs); }\n\n        return div;\n      }\n      //}}}\n      function insertDragbar(ord) //{{{\n      {\n        return dragDiv(ord, hdep++).addClass('jcrop-dragbar');\n      }\n      //}}}\n      function createDragbars(li) //{{{\n      {\n        var i;\n        for (i = 0; i < li.length; i++) {\n          dragbar[li[i]] = insertDragbar(li[i]);\n        }\n      }\n      //}}}\n      function createBorders(li) //{{{\n      {\n        var cl,i;\n        for (i = 0; i < li.length; i++) {\n          switch(li[i]){\n            case'n': cl='hline'; break;\n            case's': cl='hline bottom'; break;\n            case'e': cl='vline right'; break;\n            case'w': cl='vline'; break;\n          }\n          borders[li[i]] = insertBorder(cl);\n        }\n      }\n      //}}}\n      function createHandles(li) //{{{\n      {\n        var i;\n        for (i = 0; i < li.length; i++) {\n          handle[li[i]] = insertHandle(li[i]);\n        }\n      }\n      //}}}\n      function moveto(x, y) //{{{\n      {\n        if (!options.shade) {\n          $img2.css({\n            top: px(-y),\n            left: px(-x)\n          });\n        }\n        $sel.css({\n          top: px(y),\n          left: px(x)\n        });\n      }\n      //}}}\n      function resize(w, h) //{{{\n      {\n        $sel.width(Math.round(w)).height(Math.round(h));\n      }\n      //}}}\n      function refresh() //{{{\n      {\n        var c = Coords.getFixed();\n\n        Coords.setPressed([c.x, c.y]);\n        Coords.setCurrent([c.x2, c.y2]);\n\n        updateVisible();\n      }\n      //}}}\n\n      // Internal Methods\n      function updateVisible(select) //{{{\n      {\n        if (awake) {\n          return update(select);\n        }\n      }\n      //}}}\n      function update(select) //{{{\n      {\n        var c = Coords.getFixed();\n\n        resize(c.w, c.h);\n        moveto(c.x, c.y);\n        if (options.shade) Shade.updateRaw(c);\n\n        awake || show();\n\n        if (select) {\n          options.onSelect.call(api, unscale(c));\n        } else {\n          options.onChange.call(api, unscale(c));\n        }\n      }\n      //}}}\n      function setBgOpacity(opacity,force,now) //{{{\n      {\n        if (!awake && !force) return;\n        if (options.bgFade && !now) {\n          $img.animate({\n            opacity: opacity\n          },{\n            queue: false,\n            duration: options.fadeTime\n          });\n        } else {\n          $img.css('opacity', opacity);\n        }\n      }\n      //}}}\n      function show() //{{{\n      {\n        $sel.show();\n\n        if (options.shade) Shade.opacity(bgopacity);\n          else setBgOpacity(bgopacity,true);\n\n        awake = true;\n      }\n      //}}}\n      function release() //{{{\n      {\n        disableHandles();\n        $sel.hide();\n\n        if (options.shade) Shade.opacity(1);\n          else setBgOpacity(1);\n\n        awake = false;\n        options.onRelease.call(api);\n      }\n      //}}}\n      function showHandles() //{{{\n      {\n        if (seehandles) {\n          $hdl_holder.show();\n        }\n      }\n      //}}}\n      function enableHandles() //{{{\n      {\n        seehandles = true;\n        if (options.allowResize) {\n          $hdl_holder.show();\n          return true;\n        }\n      }\n      //}}}\n      function disableHandles() //{{{\n      {\n        seehandles = false;\n        $hdl_holder.hide();\n      } \n      //}}}\n      function animMode(v) //{{{\n      {\n        if (v) {\n          animating = true;\n          disableHandles();\n        } else {\n          animating = false;\n          enableHandles();\n        }\n      } \n      //}}}\n      function done() //{{{\n      {\n        animMode(false);\n        refresh();\n      } \n      //}}}\n      // Insert draggable elements {{{\n      // Insert border divs for outline\n\n      if (options.dragEdges && $.isArray(options.createDragbars))\n        createDragbars(options.createDragbars);\n\n      if ($.isArray(options.createHandles))\n        createHandles(options.createHandles);\n\n      if (options.drawBorders && $.isArray(options.createBorders))\n        createBorders(options.createBorders);\n\n      //}}}\n\n      // This is a hack for iOS5 to support drag/move touch functionality\n      // Hack OctoberCMS - the event handler was moved to the Touch module.\n      // The closure used before was handling a reference to the target object,\n      // preventing it from removing from DOM after the control is destroyed.\n      $(document).bind('touchstart.jcrop-ios', Touch.fixTouchSupport);\n\n      var $track = newTracker().mousedown(createDragger('move')).css({\n        cursor: 'move',\n        position: 'absolute',\n        zIndex: 360\n      });\n\n      if (Touch.support) {\n        $track.bind('touchstart.jcrop', Touch.createDragger('move'));\n      }\n\n      $img_holder.append($track);\n      disableHandles();\n\n      return {\n        updateVisible: updateVisible,\n        update: update,\n        release: release,\n        refresh: refresh,\n        isAwake: function () {\n          return awake;\n        },\n        setCursor: function (cursor) {\n          $track.css('cursor', cursor);\n        },\n        enableHandles: enableHandles,\n        enableOnly: function () {\n          seehandles = true;\n        },\n        showHandles: showHandles,\n        disableHandles: disableHandles,\n        animMode: animMode,\n        setBgOpacity: setBgOpacity,\n        done: done\n      };\n    }());\n    \n    //}}}\n    // Tracker Module {{{\n    var Tracker = (function () {\n      var onMove = function () {},\n          onDone = function () {},\n          trackDoc = options.trackDocument;\n\n      function toFront(touch) //{{{\n      {\n        $trk.css({\n          zIndex: 450\n        });\n\n        if (touch)\n          $(document)\n            .bind('touchmove.jcrop', trackTouchMove)\n            .bind('touchend.jcrop', trackTouchEnd);\n\n        else if (trackDoc)\n          $(document)\n            .bind('mousemove.jcrop',trackMove)\n            .bind('mouseup.jcrop',trackUp);\n      } \n      //}}}\n      function toBack() //{{{\n      {\n        $trk.css({\n          zIndex: 290\n        });\n        $(document).unbind('.jcrop');\n      } \n      //}}}\n      function trackMove(e) //{{{\n      {\n        onMove(mouseAbs(e));\n        return false;\n      } \n      //}}}\n      function trackUp(e) //{{{\n      {\n        e.preventDefault();\n        e.stopPropagation();\n\n        if (btndown) {\n          btndown = false;\n\n          onDone(mouseAbs(e));\n\n          if (Selection.isAwake()) {\n            options.onSelect.call(api, unscale(Coords.getFixed()));\n          }\n\n          toBack();\n          onMove = function () {};\n          onDone = function () {};\n        }\n\n        return false;\n      }\n      //}}}\n      function activateHandlers(move, done, touch) //{{{\n      {\n        btndown = true;\n        onMove = move;\n        onDone = done;\n        toFront(touch);\n        return false;\n      }\n      //}}}\n      function trackTouchMove(e) //{{{\n      {\n        onMove(mouseAbs(Touch.cfilter(e)));\n        return false;\n      }\n      //}}}\n      function trackTouchEnd(e) //{{{\n      {\n        return trackUp(Touch.cfilter(e));\n      }\n      //}}}\n      function setCursor(t) //{{{\n      {\n        $trk.css('cursor', t);\n      }\n      //}}}\n\n      if (!trackDoc) {\n        $trk.mousemove(trackMove).mouseup(trackUp).mouseout(trackUp);\n      }\n\n      $img.before($trk);\n      return {\n        activateHandlers: activateHandlers,\n        setCursor: setCursor\n      };\n    }());\n    //}}}\n    // KeyManager Module {{{\n    var KeyManager = (function () {\n      var $keymgr = $('<input type=\"radio\" />').css({\n        position: 'fixed',\n        left: '-120px',\n        width: '12px'\n      }).addClass('jcrop-keymgr'),\n\n        $keywrap = $('<div />').css({\n          position: 'absolute',\n          overflow: 'hidden'\n        }).append($keymgr);\n\n      function watchKeys() //{{{\n      {\n        if (options.keySupport) {\n          $keymgr.show();\n          $keymgr.focus();\n        }\n      }\n      //}}}\n      function onBlur(e) //{{{\n      {\n        $keymgr.hide();\n      }\n      //}}}\n      function doNudge(e, x, y) //{{{\n      {\n        if (options.allowMove) {\n          Coords.moveOffset([x, y]);\n          Selection.updateVisible(true);\n        }\n        e.preventDefault();\n        e.stopPropagation();\n      }\n      //}}}\n      function parseKey(e) //{{{\n      {\n        if (e.ctrlKey || e.metaKey) {\n          return true;\n        }\n        shift_down = e.shiftKey ? true : false;\n        var nudge = shift_down ? 10 : 1;\n\n        switch (e.keyCode) {\n        case 37:\n          doNudge(e, -nudge, 0);\n          break;\n        case 39:\n          doNudge(e, nudge, 0);\n          break;\n        case 38:\n          doNudge(e, 0, -nudge);\n          break;\n        case 40:\n          doNudge(e, 0, nudge);\n          break;\n        case 27:\n          if (options.allowSelect) Selection.release();\n          break;\n        case 9:\n          return true;\n        }\n\n        return false;\n      }\n      //}}}\n\n      if (options.keySupport) {\n        $keymgr.keydown(parseKey).blur(onBlur);\n        if (ie6mode || !options.fixedSupport) {\n          $keymgr.css({\n            position: 'absolute',\n            left: '-20px'\n          });\n          $keywrap.append($keymgr).insertBefore($img);\n        } else {\n          $keymgr.insertBefore($img);\n        }\n      }\n\n\n      return {\n        watchKeys: watchKeys\n      };\n    }());\n    //}}}\n    // }}}\n    // API methods {{{\n    function setClass(cname) //{{{\n    {\n      $div.removeClass().addClass(cssClass('holder')).addClass(cname);\n    }\n    //}}}\n    function animateTo(a, callback) //{{{\n    {\n      var x1 = a[0] / xscale,\n          y1 = a[1] / yscale,\n          x2 = a[2] / xscale,\n          y2 = a[3] / yscale;\n\n      if (animating) {\n        return;\n      }\n\n      var animto = Coords.flipCoords(x1, y1, x2, y2),\n          c = Coords.getFixed(),\n          initcr = [c.x, c.y, c.x2, c.y2],\n          animat = initcr,\n          interv = options.animationDelay,\n          ix1 = animto[0] - initcr[0],\n          iy1 = animto[1] - initcr[1],\n          ix2 = animto[2] - initcr[2],\n          iy2 = animto[3] - initcr[3],\n          pcent = 0,\n          velocity = options.swingSpeed;\n\n      x1 = animat[0];\n      y1 = animat[1];\n      x2 = animat[2];\n      y2 = animat[3];\n\n      Selection.animMode(true);\n      var anim_timer;\n\n      function queueAnimator() {\n        window.setTimeout(animator, interv);\n      }\n      var animator = (function () {\n        return function () {\n          pcent += (100 - pcent) / velocity;\n\n          animat[0] = Math.round(x1 + ((pcent / 100) * ix1));\n          animat[1] = Math.round(y1 + ((pcent / 100) * iy1));\n          animat[2] = Math.round(x2 + ((pcent / 100) * ix2));\n          animat[3] = Math.round(y2 + ((pcent / 100) * iy2));\n\n          if (pcent >= 99.8) {\n            pcent = 100;\n          }\n          if (pcent < 100) {\n            setSelectRaw(animat);\n            queueAnimator();\n          } else {\n            Selection.done();\n            Selection.animMode(false);\n            if (typeof(callback) === 'function') {\n              callback.call(api);\n            }\n          }\n        };\n      }());\n      queueAnimator();\n    }\n    //}}}\n    function setSelect(rect) //{{{\n    {\n      setSelectRaw([rect[0] / xscale, rect[1] / yscale, rect[2] / xscale, rect[3] / yscale]);\n      options.onSelect.call(api, unscale(Coords.getFixed()));\n      Selection.enableHandles();\n    }\n    //}}}\n    function setSelectRaw(l) //{{{\n    {\n      Coords.setPressed([l[0], l[1]]);\n      Coords.setCurrent([l[2], l[3]]);\n      Selection.update();\n    }\n    //}}}\n    function tellSelect() //{{{\n    {\n      return unscale(Coords.getFixed());\n    }\n    //}}}\n    function tellScaled() //{{{\n    {\n      return Coords.getFixed();\n    }\n    //}}}\n    function setOptionsNew(opt) //{{{\n    {\n      setOptions(opt);\n      interfaceUpdate();\n    }\n    //}}}\n    function disableCrop() //{{{\n    {\n      options.disabled = true;\n      Selection.disableHandles();\n      Selection.setCursor('default');\n      Tracker.setCursor('default');\n    }\n    //}}}\n    function enableCrop() //{{{\n    {\n      options.disabled = false;\n      interfaceUpdate();\n    }\n    //}}}\n    function cancelCrop() //{{{\n    {\n      Selection.done();\n      Tracker.activateHandlers(null, null);\n    }\n    //}}}\n    function destroy() //{{{\n    {\n      $(document).unbind('touchstart.jcrop-ios', Touch.fixTouchSupport);\n      $div.remove();\n      $origimg.show();\n      $origimg.css('visibility','visible');\n      $(obj).removeData('Jcrop');\n    }\n    //}}}\n    function setImage(src, callback) //{{{\n    {\n      Selection.release();\n      disableCrop();\n      var img = new Image();\n      img.onload = function () {\n        var iw = img.width;\n        var ih = img.height;\n        var bw = options.boxWidth;\n        var bh = options.boxHeight;\n        $img.width(iw).height(ih);\n        $img.attr('src', src);\n        $img2.attr('src', src);\n        presize($img, bw, bh);\n        boundx = $img.width();\n        boundy = $img.height();\n        $img2.width(boundx).height(boundy);\n        $trk.width(boundx + (bound * 2)).height(boundy + (bound * 2));\n        $div.width(boundx).height(boundy);\n        Shade.resize(boundx,boundy);\n        enableCrop();\n\n        if (typeof(callback) === 'function') {\n          callback.call(api);\n        }\n      };\n      img.src = src;\n    }\n    //}}}\n    function colorChangeMacro($obj,color,now) {\n      var mycolor = color || options.bgColor;\n      if (options.bgFade && supportsColorFade() && options.fadeTime && !now) {\n        $obj.animate({\n          backgroundColor: mycolor\n        }, {\n          queue: false,\n          duration: options.fadeTime\n        });\n      } else {\n        $obj.css('backgroundColor', mycolor);\n      }\n    }\n    function interfaceUpdate(alt) //{{{\n    // This method tweaks the interface based on options object.\n    // Called when options are changed and at end of initialization.\n    {\n      if (options.allowResize) {\n        if (alt) {\n          Selection.enableOnly();\n        } else {\n          Selection.enableHandles();\n        }\n      } else {\n        Selection.disableHandles();\n      }\n\n      Tracker.setCursor(options.allowSelect ? 'crosshair' : 'default');\n      Selection.setCursor(options.allowMove ? 'move' : 'default');\n\n      if (options.hasOwnProperty('trueSize')) {\n        xscale = options.trueSize[0] / boundx;\n        yscale = options.trueSize[1] / boundy;\n      }\n\n      if (options.hasOwnProperty('setSelect')) {\n        setSelect(options.setSelect);\n        Selection.done();\n        delete(options.setSelect);\n      }\n\n      Shade.refresh();\n\n      if (options.bgColor != bgcolor) {\n        colorChangeMacro(\n          options.shade? Shade.getShades(): $div,\n          options.shade?\n            (options.shadeColor || options.bgColor):\n            options.bgColor\n        );\n        bgcolor = options.bgColor;\n      }\n\n      if (bgopacity != options.bgOpacity) {\n        bgopacity = options.bgOpacity;\n        if (options.shade) Shade.refresh();\n          else Selection.setBgOpacity(bgopacity);\n      }\n\n      xlimit = options.maxSize[0] || 0;\n      ylimit = options.maxSize[1] || 0;\n      xmin = options.minSize[0] || 0;\n      ymin = options.minSize[1] || 0;\n\n      if (options.hasOwnProperty('outerImage')) {\n        $img.attr('src', options.outerImage);\n        delete(options.outerImage);\n      }\n\n      Selection.refresh();\n    }\n    //}}}\n    //}}}\n\n    if (Touch.support) $trk.bind('touchstart.jcrop', Touch.newSelection);\n\n    $hdl_holder.hide();\n    interfaceUpdate(true);\n\n    var api = {\n      setImage: setImage,\n      animateTo: animateTo,\n      setSelect: setSelect,\n      setOptions: setOptionsNew,\n      tellSelect: tellSelect,\n      tellScaled: tellScaled,\n      setClass: setClass,\n\n      disable: disableCrop,\n      enable: enableCrop,\n      cancel: cancelCrop,\n      release: Selection.release,\n      destroy: destroy,\n\n      focus: KeyManager.watchKeys,\n\n      getBounds: function () {\n        return [boundx * xscale, boundy * yscale];\n      },\n      getWidgetSize: function () {\n        return [boundx, boundy];\n      },\n      getScaleFactor: function () {\n        return [xscale, yscale];\n      },\n      getOptions: function() {\n        // careful: internal values are returned\n        return options;\n      },\n\n      ui: {\n        holder: $div,\n        selection: $sel\n      }\n    };\n\n    if (is_msie) $div.bind('selectstart', function () { return false; });\n\n    $origimg.data('Jcrop', api);\n    return api;\n  };\n  $.fn.Jcrop = function (options, callback) //{{{\n  {\n    var api;\n    // Iterate over each object, attach Jcrop\n    this.each(function () {\n      // If we've already attached to this object\n      if ($(this).data('Jcrop')) {\n        // The API can be requested this way (undocumented)\n        if (options === 'api') return $(this).data('Jcrop');\n        // Otherwise, we just reset the options...\n        else $(this).data('Jcrop').setOptions(options);\n      }\n      // If we haven't been attached, preload and attach\n      else {\n        if (this.tagName == 'IMG')\n          $.Jcrop.Loader(this,function(){\n            $(this).css({display:'block',visibility:'hidden'});\n            api = $.Jcrop(this, options);\n            if ($.isFunction(callback)) callback.call(api);\n          });\n        else {\n          $(this).css({display:'block',visibility:'hidden'});\n          api = $.Jcrop(this, options);\n          if ($.isFunction(callback)) callback.call(api);\n        }\n      }\n    });\n\n    // Return \"this\" so the object is chainable (jQuery-style)\n    return this;\n  };\n  //}}}\n  // $.Jcrop.Loader - basic image loader {{{\n\n  $.Jcrop.Loader = function(imgobj,success,error){\n    var $img = $(imgobj), img = $img[0];\n\n    function completeCheck(){\n      if (img.complete) {\n        $img.unbind('.jcloader');\n        if ($.isFunction(success)) success.call(img);\n      }\n      else window.setTimeout(completeCheck,50);\n    }\n\n    $img\n      .bind('load.jcloader',completeCheck)\n      .bind('error.jcloader',function(e){\n        $img.unbind('.jcloader');\n        if ($.isFunction(error)) error.call(img);\n      });\n\n    if (img.complete && $.isFunction(success)){\n      $img.unbind('.jcloader');\n      success.call(img);\n    }\n  };\n\n  //}}}\n  // Global Defaults {{{\n  $.Jcrop.defaults = {\n\n    // Basic Settings\n    allowSelect: true,\n    allowMove: true,\n    allowResize: true,\n\n    trackDocument: true,\n\n    // Styling Options\n    baseClass: 'jcrop',\n    addClass: null,\n    bgColor: 'black',\n    bgOpacity: 0.6,\n    bgFade: false,\n    borderOpacity: 0.4,\n    handleOpacity: 0.5,\n    handleSize: null,\n\n    aspectRatio: 0,\n    keySupport: true,\n    createHandles: ['n','s','e','w','nw','ne','se','sw'],\n    createDragbars: ['n','s','e','w'],\n    createBorders: ['n','s','e','w'],\n    drawBorders: true,\n    dragEdges: true,\n    fixedSupport: true,\n    touchSupport: null,\n\n    shade: null,\n\n    boxWidth: 0,\n    boxHeight: 0,\n    boundary: 2,\n    fadeTime: 400,\n    animationDelay: 20,\n    swingSpeed: 3,\n\n    minSelect: [0, 0],\n    maxSize: [0, 0],\n    minSize: [0, 0],\n\n    // Callbacks / Event Handlers\n    onChange: function () {},\n    onSelect: function () {},\n    onDblClick: function () {},\n    onRelease: function () {}\n  };\n\n  // }}}\n}(jQuery));\n\n;\n/*!\n * Select2 4.1.0-rc.0\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id with a prefix.\n    // If an id already exists, it simply returns it with a prefix.\n\n    var select2Id = element.getAttribute('data-select2-id');\n\n    if (select2Id != null) {\n      return select2Id;\n    }\n\n    // If element has id, use it.\n    if (element.id) {\n      select2Id = 'select2-data-' + element.id;\n    } else {\n      select2Id = 'select2-data-' + (++id).toString() +\n        '-' + Utils.generateChars(4);\n    }\n\n    element.setAttribute('data-select2-id', select2Id);\n\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n\n    element.removeAttribute('data-select2-id');\n  };\n\n  Utils.copyNonInternalCssClasses = function (dest, src) {\n    var classes;\n\n    var destinationClasses = dest.getAttribute('class').trim().split(/\\s+/);\n\n    destinationClasses = destinationClasses.filter(function (clazz) {\n      // Save all Select2 classes\n      return clazz.indexOf('select2-') === 0;\n    });\n\n    var sourceClasses = src.getAttribute('class').trim().split(/\\s+/);\n\n    sourceClasses = sourceClasses.filter(function (clazz) {\n      // Only copy non-Select2 classes\n      return clazz.indexOf('select2-') !== 0;\n    });\n\n    var replacements = destinationClasses.concat(sourceClasses);\n\n    dest.setAttribute('class', replacements.join(' '));\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"alert\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option--selectable');\n\n    var $selected = $options.filter('.select2-results__option--selected');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = selected.map(function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option--selectable');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && selectedIds.indexOf(id) > -1)) {\n          this.classList.add('select2-results__option--selected');\n          $option.attr('aria-selected', 'true');\n        } else {\n          this.classList.remove('select2-results__option--selected');\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.classList.add('select2-results__option');\n    option.classList.add('select2-results__option--selectable');\n\n    var attrs = {\n      'role': 'option'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      attrs['aria-disabled'] = 'true';\n\n      option.classList.remove('select2-results__option--selectable');\n      option.classList.add('select2-results__option--disabled');\n    }\n\n    if (data.id == null) {\n      option.classList.remove('select2-results__option--selectable');\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n\n      option.classList.remove('select2-results__option--selectable');\n      option.classList.add('select2-results__option--group');\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested',\n        'role': 'none'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.hasClass('select2-results__option--selected')) {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('.select2-results__option--selectable');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('.select2-results__option--selectable');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element[0].classList.add('select2-results__option--highlighted');\n      params.element[0].setAttribute('aria-selected', 'true');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option--selectable',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.hasClass('select2-results__option--selected')) {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option--selectable',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted')\n          .attr('aria-selected', 'false');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('.select2-results__option--selectable');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n    $selection.attr('aria-disabled', 'false');\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n      self.$selection.attr('aria-disabled', 'false');\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n      self.$selection.attr('aria-disabled', 'true');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  BaseSelection.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  BaseSelection.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection[0].classList.add('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n    this.$selection.attr('aria-controls', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n\n    var title = selection.title || selection.text;\n\n    if (title) {\n      $rendered.attr('title', title);\n    } else {\n      $rendered.removeAttr('title');\n    }\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection[0].classList.add('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n    this.$selection.find('.select2-selection__rendered').attr('id', id);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.isDisabled()) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n\n    this.$selection.on(\n      'keydown',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.isDisabled()) {\n          return;\n        }\n\n        evt.stopPropagation();\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<button type=\"button\" class=\"select2-selection__choice__remove\" ' +\n        'tabindex=\"-1\">' +\n          '<span aria-hidden=\"true\">&times;</span>' +\n        '</button>' +\n        '<span class=\"select2-selection__choice__display\"></span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    var selectionIdPrefix = this.$selection.find('.select2-selection__rendered')\n      .attr('id') + '-choice-';\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      var selectionId = selectionIdPrefix + Utils.generateChars(4) + '-';\n\n      if (selection.id) {\n        selectionId += selection.id;\n      } else {\n        selectionId += Utils.generateChars(4);\n      }\n\n      $selection.find('.select2-selection__choice__display')\n        .append(formatted)\n        .attr('id', selectionId);\n\n      var title = selection.title || selection.text;\n\n      if (title) {\n        $selection.attr('title', title);\n      }\n\n      var removeItem = this.options.get('translations').get('removeItem');\n\n      var $remove = $selection.find('.select2-selection__choice__remove');\n\n      $remove.attr('title', removeItem());\n      $remove.attr('aria-label', removeItem());\n      $remove.attr('aria-describedby', selectionId);\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    $rendered.append($selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n\n], function () {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder[0].classList.add('select2-selection__placeholder');\n    $placeholder[0].classList.remove('select2-selection__choice');\n\n    var placeholderTitle = placeholder.title ||\n      placeholder.text ||\n      $placeholder.text();\n\n    this.$selection.find('.select2-selection__rendered').attr(\n      'title',\n      placeholderTitle\n    );\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.isDisabled()) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('input').trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__clear').remove();\n    this.$selection[0].classList.remove('select2-selection--clearable');\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var selectionId = this.$selection.find('.select2-selection__rendered')\n      .attr('id');\n\n    var removeAll = this.options.get('translations').get('removeAllItems');\n\n    var $remove = $(\n      '<button type=\"button\" class=\"select2-selection__clear\" tabindex=\"-1\">' +\n        '<span aria-hidden=\"true\">&times;</span>' +\n      '</button>'\n    );\n    $remove.attr('title', removeAll());\n    $remove.attr('aria-label', removeAll());\n    $remove.attr('aria-describedby', selectionId);\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.prepend($remove);\n    this.$selection[0].classList.add('select2-selection--clearable');\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var searchLabel = this.options.get('translations').get('search');\n    var $search = $(\n      '<span class=\"select2-search select2-search--inline\">' +\n        '<textarea class=\"select2-search__field\"'+\n        ' type=\"search\" tabindex=\"-1\"' +\n        ' autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" >' +\n        '</textarea>' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('textarea');\n\n    this.$search.prop('autocomplete', this.options.get('autocomplete'));\n    this.$search.attr('aria-label', searchLabel());\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n    $rendered.append(this.$searchContainer);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n    var selectionId = container.id + '-container';\n\n    decorated.call(this, container, $container);\n\n    self.$search.attr('aria-describedby', selectionId);\n\n    container.on('open', function () {\n      self.$search.attr('aria-controls', resultsId);\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.resizeSearch();\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$selection\n          .find('.select2-selection__choice').last();\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\n      if (self.$search.val()) {\n        evt.stopPropagation();\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '100%';\n\n    if (this.$search.attr('placeholder') === '') {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/selectionCss',[\n  '../utils'\n], function (Utils) {\n  function SelectionCSS () { }\n\n  SelectionCSS.prototype.render = function (decorated) {\n    var $selection = decorated.call(this);\n\n    var selectionCssClass = this.options.get('selectionCssClass') || '';\n\n    if (selectionCssClass.indexOf(':all:') !== -1) {\n      selectionCssClass = selectionCssClass.replace(':all:', '');\n\n      Utils.copyNonInternalCssClasses($selection[0], this.$element[0]);\n    }\n\n    $selection.addClass(selectionCssClass);\n\n    return $selection;\n  };\n\n  return SelectionCSS;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if (relayEvents.indexOf(name) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if (preventableEvents.indexOf(name) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var self = this;\n\n    var data = Array.prototype.map.call(\n      this.$element[0].querySelectorAll(':checked'),\n      function (selectedElement) {\n        return self.item($(selectedElement));\n      }\n    );\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if (\n      data.element != null && data.element.tagName.toLowerCase() === 'option'\n    ) {\n      data.element.selected = true;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if (val.indexOf(id) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('input').trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('input').trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if (\n      data.element != null &&\n      data.element.tagName.toLowerCase() === 'option'\n    ) {\n      data.element.selected = false;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && val.indexOf(id) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('input').trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      if (\n        this.tagName.toLowerCase() !== 'option' &&\n        this.tagName.toLowerCase() !== 'optgroup'\n      ) {\n        return;\n      }\n\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    this.$element.append($options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $(option);\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    var option = $option[0];\n\n    if (option.tagName.toLowerCase() === 'option') {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if (option.tagName.toLowerCase() === 'optgroup') {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    this._dataToConvert = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.bind = function (container, $container) {\n    ArrayAdapter.__super__.bind.call(this, container, $container);\n\n    this.addOptions(this.convertToOptions(this._dataToConvert));\n  };\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if (existingIds.indexOf(item.id) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        $option.append($children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if (typeof this._request.abort === 'function') {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !Array.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if (Array.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', 'true');\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    if (params.term == null) {\n      return null;\n    }\n\n    var term = params.term.trim();\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if (separators.indexOf(termChar) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.bind =\n    function (decorated, container, $container) {\n      var self = this;\n\n      decorated.call(this, container, $container);\n\n      container.on('select', function () {\n        self._checkIfMaximumSelected();\n      });\n  };\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this._checkIfMaximumSelected(function () {\n        decorated.call(self, params, callback);\n      });\n  };\n\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\n    function (_, successCallback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n\n        if (successCallback) {\n          successCallback();\n        }\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery'\n], function ($) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n    var searchLabel = this.options.get('translations').get('search');\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    this.$search.prop('autocomplete', this.options.get('autocomplete'));\n    this.$search.attr('aria-label', searchLabel());\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n      self.$search.attr('aria-controls', resultsId);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer[0].classList.remove('select2-search--hide');\n        } else {\n          self.$searchContainer[0].classList.add('select2-search--hide');\n        }\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"option\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      // Must bind after the results handlers to ensure correct sizing\n      self._bindContainerResultHandlers(container);\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown[0].classList.remove('select2');\n    $dropdown[0].classList.add('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._bindContainerResultHandlers =\n      function (decorated, container) {\n\n    // These should only be bound once\n    if (this._containerResultsHandlersBound) {\n      return;\n    }\n\n    var self = this;\n\n    container.on('results:all', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:append', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:message', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('select', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('unselect', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    this._containerResultsHandlersBound = true;\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown[0].classList\n      .contains('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown[0].classList\n      .contains('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = {\n      top: 0,\n      left: 0\n    };\n\n    if (\n      $.contains(document.body, $offsetParent[0]) ||\n      $offsetParent[0].isConnected\n      ) {\n      parentOffset = $offsetParent.offset();\n    }\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown[0].classList.remove('select2-dropdown--below');\n      this.$dropdown[0].classList.remove('select2-dropdown--above');\n      this.$dropdown[0].classList.add('select2-dropdown--' + newDirection);\n\n      this.$container[0].classList.remove('select2-container--below');\n      this.$container[0].classList.remove('select2-container--above');\n      this.$container[0].classList.add('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/dropdown/dropdownCss',[\n  '../utils'\n], function (Utils) {\n  function DropdownCSS () { }\n\n  DropdownCSS.prototype.render = function (decorated) {\n    var $dropdown = decorated.call(this);\n\n    var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n\n    if (dropdownCssClass.indexOf(':all:') !== -1) {\n      dropdownCssClass = dropdownCssClass.replace(':all:', '');\n\n      Utils.copyNonInternalCssClasses($dropdown[0], this.$element[0]);\n    }\n\n    $dropdown.addClass(dropdownCssClass);\n\n    return $dropdown;\n  };\n\n  return DropdownCSS;\n});\n\nS2.define('select2/dropdown/tagsSearchHighlight',[\n  '../utils'\n], function (Utils) {\n  function TagsSearchHighlight () { }\n\n  TagsSearchHighlight.prototype.highlightFirstItem = function (decorated) {\n    var $options = this.$results\n    .find(\n      '.select2-results__option--selectable' +\n      ':not(.select2-results__option--selected)'\n    );\n\n    if ($options.length > 0) {\n      var $firstOption = $options.first();\n      var data = Utils.GetData($firstOption[0], 'data');\n      var firstElement = data.element;\n\n      if (firstElement && firstElement.getAttribute) {\n        if (firstElement.getAttribute('data-select2-tag') === 'true') {\n          $firstOption.trigger('mouseenter');\n\n          return;\n        }\n      }\n    }\n\n    decorated.call(this);\n  };\n\n  return TagsSearchHighlight;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    },\n    removeItem: function () {\n      return 'Remove item';\n    },\n    search: function() {\n      return 'Search';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/selectionCss',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n  './dropdown/dropdownCss',\n  './dropdown/tagsSearchHighlight',\n\n  './i18n/en'\n], function ($,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, SelectionCSS, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n             DropdownCSS, TagsSearchHighlight,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n\n      if (options.tags) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          TagsSearchHighlight\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (options.dropdownCssClass != null) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (options.selectionCssClass != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    // If the defaults were not previously applied from an element, it is\n    // possible for the language option to have not been resolved\n    options.language = this._resolveLanguage(options.language);\n\n    // Always fall back to English since it will always be complete\n    options.language.push('en');\n\n    var uniqueLanguages = [];\n\n    for (var l = 0; l < options.language.length; l++) {\n      var language = options.language[l];\n\n      if (uniqueLanguages.indexOf(language) === -1) {\n        uniqueLanguages.push(language);\n      }\n    }\n\n    options.language = uniqueLanguages;\n\n    options.translations = this._processTranslations(\n      options.language,\n      options.debug\n    );\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if (params.term == null || params.term.trim() === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdLanguageBase: './i18n/',\n      autocomplete: 'off',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: {},\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.applyFromElement = function (options, $element) {\n    var optionLanguage = options.language;\n    var defaultLanguage = this.defaults.language;\n    var elementLanguage = $element.prop('lang');\n    var parentLanguage = $element.closest('[lang]').prop('lang');\n\n    var languages = Array.prototype.concat.call(\n      this._resolveLanguage(elementLanguage),\n      this._resolveLanguage(optionLanguage),\n      this._resolveLanguage(defaultLanguage),\n      this._resolveLanguage(parentLanguage)\n    );\n\n    options.language = languages;\n\n    return options;\n  };\n\n  Defaults.prototype._resolveLanguage = function (language) {\n    if (!language) {\n      return [];\n    }\n\n    if ($.isEmptyObject(language)) {\n      return [];\n    }\n\n    if ($.isPlainObject(language)) {\n      return [language];\n    }\n\n    var languages;\n\n    if (!Array.isArray(language)) {\n      languages = [language];\n    } else {\n      languages = language;\n    }\n\n    var resolvedLanguages = [];\n\n    for (var l = 0; l < languages.length; l++) {\n      resolvedLanguages.push(languages[l]);\n\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = languages[l].split('-');\n        var baseLanguage = languageParts[0];\n\n        resolvedLanguages.push(baseLanguage);\n      }\n    }\n\n    return resolvedLanguages;\n  };\n\n  Defaults.prototype._processTranslations = function (languages, debug) {\n    var translations = new Translation();\n\n    for (var l = 0; l < languages.length; l++) {\n      var languageData = new Translation();\n\n      var language = languages[l];\n\n      if (typeof language === 'string') {\n        try {\n          // Try to load it with the original name\n          languageData = Translation.loadPath(language);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            language = this.defaults.amdLanguageBase + language;\n            languageData = Translation.loadPath(language);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files\n            if (debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + language + '\" could ' +\n                'not be automatically loaded. A fallback will be used instead.'\n              );\n            }\n          }\n        }\n      } else if ($.isPlainObject(language)) {\n        languageData = new Translation(language);\n      } else {\n        languageData = language;\n      }\n\n      translations.extend(languageData);\n    }\n\n    return translations;\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'jquery',\n  './defaults',\n  './utils'\n], function ($, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    if ($element != null) {\n      this.options = Defaults.applyFromElement(this.options, $element);\n    }\n\n    this.options = Defaults.apply(this.options);\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.autocomplete == null && $e.prop('autocomplete')) {\n      this.options.autocomplete = $e.prop('autocomplete');\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if (excludedData.indexOf(key) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element[0].classList.add('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    this._observer = new window.MutationObserver(function (mutations) {\n      self._syncA();\n      self._syncS(mutations);\n    });\n    this._observer.observe(this.$element[0], {\n      attributes: true,\n      childList: true,\n      subtree: false\n    });\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if (nonRelayEvents.indexOf(name) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container[0].classList.add('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container[0].classList.remove('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container[0].classList.remove('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container[0].classList.add('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container[0].classList.remove('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || (key === KEYS.UP && evt.altKey)) {\n          self.close(evt);\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER || key === KEYS.TAB) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.isDisabled()) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._isChangeMutation = function (mutations) {\n    var self = this;\n\n    if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          return true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      return true;\n    } else if (Array.isArray(mutations)) {\n      return mutations.some(function (mutation) {\n        return self._isChangeMutation(mutation);\n      });\n    }\n\n    return false;\n  };\n\n  Select2.prototype._syncSubtree = function (mutations) {\n    var changed = this._isChangeMutation(mutations);\n    var self = this;\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    if (this.isDisabled()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function (evt) {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', { originalEvent : evt });\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  Select2.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  Select2.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container[0].classList.contains('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container[0].classList.contains('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container[0].classList.add('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if (Array.isArray(newVal)) {\n      newVal = newVal.map(function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('input').trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    Utils.RemoveData(this.$container[0]);\n    this.$container.remove();\n\n    this._observer.disconnect();\n    this._observer = null;\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element[0].classList.remove('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container[0].classList\n      .add('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('select2/dropdown/attachContainer',[\n\n], function () {\n  function AttachContainer (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  AttachContainer.prototype.position =\n    function (decorated, $dropdown, $container) {\n    var $dropdownContainer = $container.find('.dropdown-wrapper');\n    $dropdownContainer.append($dropdown);\n\n    $dropdown[0].classList.add('select2-dropdown--below');\n    $container[0].classList.add('select2-container--below');\n  };\n\n  return AttachContainer;\n});\n\nS2.define('select2/dropdown/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n    'blur',\n    'change',\n    'click',\n    'dblclick',\n    'focus',\n    'focusin',\n    'focusout',\n    'input',\n    'keydown',\n    'keyup',\n    'keypress',\n    'mousedown',\n    'mouseenter',\n    'mouseleave',\n    'mousemove',\n    'mouseover',\n    'mouseup',\n    'search',\n    'touchend',\n    'touchstart'\n    ];\n\n    this.$dropdown.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\nS2.define('select2/selection/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n      'blur',\n      'change',\n      'click',\n      'dblclick',\n      'focus',\n      'focusin',\n      'focusout',\n      'input',\n      'keydown',\n      'keyup',\n      'keypress',\n      'mousedown',\n      'mouseenter',\n      'mouseleave',\n      'mousemove',\n      'mouseover',\n      'mouseup',\n      'search',\n      'touchend',\n      'touchstart'\n    ];\n\n    this.$selection.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\n/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n    if ( typeof S2.define === 'function' && S2.define.amd ) {\n        // AMD. Register as an anonymous module.\n        S2.define('jquery-mousewheel',['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisible by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if (thisMethods.indexOf(options) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n\n;\n/*!\n * jQuery Mousewheel v3.2.0\n * https://github.com/jquery/jquery-mousewheel\n */\n\n( function( factory ) {\n    if ( typeof define === \"function\" && define.amd ) {\n\n        // AMD. Register as an anonymous module.\n        define( [ \"jquery\" ], factory );\n    } else if ( typeof exports === \"object\" ) {\n\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n\n        // Browser globals\n        factory( jQuery );\n    }\n} )( function( $ ) {\n\n    var toFix  = [ \"wheel\", \"mousewheel\", \"DOMMouseScroll\", \"MozMousePixelScroll\" ],\n        toBind = ( \"onwheel\" in window.document || window.document.documentMode >= 9 ) ?\n                    [ \"wheel\" ] : [ \"mousewheel\", \"DomMouseScroll\", \"MozMousePixelScroll\" ],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[ --i ] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: \"3.2.0\",\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[ --i ], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n\n            // Store the line height and page height for this particular element\n            $.data( this, \"mousewheel-line-height\", special.getLineHeight( this ) );\n            $.data( this, \"mousewheel-page-height\", special.getPageHeight( this ) );\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[ --i ], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n\n            // Clean up the data we added to the element\n            $.removeData( this, \"mousewheel-line-height\" );\n            $.removeData( this, \"mousewheel-page-height\" );\n        },\n\n        getLineHeight: function( elem ) {\n            var $elem = $( elem ),\n                $parent = $elem[ \"offsetParent\" in $.fn ? \"offsetParent\" : \"parent\" ]();\n            if ( !$parent.length ) {\n                $parent = $( \"body\" );\n            }\n            return parseInt( $parent.css( \"fontSize\" ), 10 ) ||\n                parseInt( $elem.css( \"fontSize\" ), 10 ) || 16;\n        },\n\n        getPageHeight: function( elem ) {\n            return $( elem ).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend( {\n        mousewheel: function( fn ) {\n            return fn ? this.on( \"mousewheel\", fn ) : this.trigger( \"mousewheel\" );\n        },\n\n        unmousewheel: function( fn ) {\n            return this.off( \"mousewheel\", fn );\n        }\n    } );\n\n\n    function handler( event ) {\n        var orgEvent   = event || window.event,\n            args       = slice.call( arguments, 1 ),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0;\n        event = $.event.fix( orgEvent );\n        event.type = \"mousewheel\";\n\n        // Old school scrollwheel delta\n        if ( \"detail\" in orgEvent ) {\n            deltaY = orgEvent.detail * -1;\n        }\n        if ( \"wheelDelta\" in orgEvent ) {\n            deltaY = orgEvent.wheelDelta;\n        }\n        if ( \"wheelDeltaY\" in orgEvent ) {\n            deltaY = orgEvent.wheelDeltaY;\n        }\n        if ( \"wheelDeltaX\" in orgEvent ) {\n            deltaX = orgEvent.wheelDeltaX * -1;\n        }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( \"axis\" in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( \"deltaY\" in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( \"deltaX\" in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) {\n                delta  = deltaX * -1;\n            }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) {\n            return;\n        }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data( this, \"mousewheel-line-height\" );\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data( this, \"mousewheel-page-height\" );\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs( deltaY ), Math.abs( deltaX ) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas( orgEvent, absDelta ) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas( orgEvent, absDelta ) ) {\n\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? \"floor\" : \"ceil\" ]( delta  / lowestDelta );\n        deltaX = Math[ deltaX >= 1 ? \"floor\" : \"ceil\" ]( deltaX / lowestDelta );\n        deltaY = Math[ deltaY >= 1 ? \"floor\" : \"ceil\" ]( deltaY / lowestDelta );\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            event.offsetX = event.clientX - boundingRect.left;\n            event.offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift( event, delta, deltaX, deltaY );\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if ( nullLowestDeltaTimeout ) {\n            window.clearTimeout( nullLowestDeltaTimeout );\n        }\n        nullLowestDeltaTimeout = window.setTimeout( nullLowestDelta, 200 );\n\n        return ( $.event.dispatch || $.event.handle ).apply( this, args );\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas( orgEvent, absDelta ) {\n\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === \"mousewheel\" &&\n            absDelta % 120 === 0;\n    }\n\n} );\n\n;\n/*!\n * ClockPicker v0.0.7 (http://weareoutman.github.io/clockpicker/)\n * Copyright 2014 Wang Shenwei.\n * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE)\n\n * This library is no longer maintained by Weareoutman, hence\n * no further updates will be provided. Consider this file\n * a forked version and you a free to make changes.\n */\n\n;(function(){\n\tvar $ = window.jQuery,\n\t\t$win = $(window),\n\t\t$doc = $(document),\n\t\t$body;\n\n\t// Can I use inline svg ?\n\tvar svgNS = 'http://www.w3.org/2000/svg',\n\t\tsvgSupported = 'SVGAngle' in window && (function(){\n\t\t\tvar supported,\n\t\t\t\tel = document.createElement('div');\n\t\t\tel.innerHTML = '<svg/>';\n\t\t\tsupported = (el.firstChild && el.firstChild.namespaceURI) == svgNS;\n\t\t\tel.innerHTML = '';\n\t\t\treturn supported;\n\t\t})();\n\n\t// Can I use transition ?\n\tvar transitionSupported = (function(){\n\t\tvar style = document.createElement('div').style;\n\t\treturn 'transition' in style ||\n\t\t\t'WebkitTransition' in style ||\n\t\t\t'MozTransition' in style ||\n\t\t\t'msTransition' in style ||\n\t\t\t'OTransition' in style;\n\t})();\n\n\t// Listen touch events in touch screen device, instead of mouse events in desktop.\n\tvar touchSupported = 'ontouchstart' in window,\n\t\tmousedownEvent = 'mousedown' + ( touchSupported ? ' touchstart' : ''),\n\t\tmousemoveEvent = 'mousemove.clockpicker' + ( touchSupported ? ' touchmove.clockpicker' : ''),\n\t\tmouseupEvent = 'mouseup.clockpicker' + ( touchSupported ? ' touchend.clockpicker' : '');\n\n\t// Vibrate the device if supported\n\tvar vibrate = navigator.vibrate ? 'vibrate' : navigator.webkitVibrate ? 'webkitVibrate' : null;\n\n\tfunction createSvgElement(name) {\n\t\treturn document.createElementNS(svgNS, name);\n\t}\n\n\tfunction leadingZero(num) {\n\t\treturn (num < 10 ? '0' : '') + num;\n\t}\n\n\t// Get a unique id\n\tvar idCounter = 0;\n\tfunction uniqueId(prefix) {\n\t\tvar id = ++idCounter + '';\n\t\treturn prefix ? prefix + id : id;\n\t}\n\n\t// Clock size\n\tvar dialRadius = 100,\n\t\touterRadius = 80,\n\t\t// innerRadius = 80 on 12 hour clock\n\t\tinnerRadius = 54,\n\t\ttickRadius = 13,\n\t\tdiameter = dialRadius * 2,\n\t\tduration = transitionSupported ? 350 : 1;\n\n\t// Popover template\n\tvar tpl = [\n\t\t'<div class=\"popover clockpicker-popover\">',\n\t\t\t'<div class=\"arrow\"></div>',\n\t\t\t'<div class=\"popover-title\">',\n\t\t\t\t'<span class=\"clockpicker-span-hours text-primary\"></span>',\n\t\t\t\t':',\n\t\t\t\t'<span class=\"clockpicker-span-minutes\"></span> ',\n\t\t\t\t'<span class=\"clockpicker-span-am-pm\"></span>',\n\t\t\t'</div>',\n\t\t\t'<div class=\"popover-content\">',\n\t\t\t\t'<div class=\"clockpicker-plate\">',\n\t\t\t\t\t'<div class=\"clockpicker-canvas\"></div>',\n\t\t\t\t\t'<div class=\"clockpicker-dial clockpicker-hours\"></div>',\n\t\t\t\t\t'<div class=\"clockpicker-dial clockpicker-minutes clockpicker-dial-out\"></div>',\n\t\t\t\t'</div>',\n\t\t\t\t'<span class=\"clockpicker-am-pm-block\">',\n\t\t\t\t'</span>',\n\t\t\t'</div>',\n\t\t'</div>'\n\t].join('');\n\n\t// ClockPicker\n\tfunction ClockPicker(element, options) {\n\t\tvar popover = $(tpl),\n\t\t\tplate = popover.find('.clockpicker-plate'),\n\t\t\thoursView = popover.find('.clockpicker-hours'),\n\t\t\tminutesView = popover.find('.clockpicker-minutes'),\n\t\t\tamPmBlock = popover.find('.clockpicker-am-pm-block'),\n\t\t\tisInput = element.prop('tagName') === 'INPUT',\n\t\t\tinput = isInput ? element : element.find('input'),\n\t\t\taddon = element.find('.input-group-addon'),\n\t\t\tself = this,\n\t\t\ttimer;\n\n\t\tthis.id = uniqueId('cp');\n\t\tthis.element = element;\n\t\tthis.options = options;\n\t\tthis.isAppended = false;\n\t\tthis.isShown = false;\n\t\tthis.currentView = 'hours';\n\t\tthis.isInput = isInput;\n\t\tthis.input = input;\n\t\tthis.addon = addon;\n\t\tthis.popover = popover;\n\t\tthis.plate = plate;\n\t\tthis.hoursView = hoursView;\n\t\tthis.minutesView = minutesView;\n\t\tthis.amPmBlock = amPmBlock;\n\t\tthis.spanHours = popover.find('.clockpicker-span-hours');\n\t\tthis.spanMinutes = popover.find('.clockpicker-span-minutes');\n\t\tthis.spanAmPm = popover.find('.clockpicker-span-am-pm');\n\t\tthis.amOrPm = \"PM\";\n\n\t\t// Setup for for 12 hour clock if option is selected\n\t\tif (options.twelvehour) {\n\n\t\t\tvar amPmButtonsTemplate = ['<div class=\"clockpicker-am-pm-block\">',\n\t\t\t\t'<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button clockpicker-am-button\">',\n\t\t\t\t'AM</button>',\n\t\t\t\t'<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button clockpicker-pm-button\">',\n\t\t\t\t'PM</button>',\n\t\t\t\t'</div>'].join('');\n\n\t\t\tvar amPmButtons = $(amPmButtonsTemplate);\n\t\t\t//amPmButtons.appendTo(plate);\n\n\t\t\t////Not working b/c they are not shown when this runs\n\t\t\t//$('clockpicker-am-button')\n\t\t\t//    .on(\"click\", function() {\n\t\t\t//        self.amOrPm = \"AM\";\n\t\t\t//        $('.clockpicker-span-am-pm').empty().append('AM');\n\t\t\t//    });\n\t\t\t//\n\t\t\t//$('clockpicker-pm-button')\n\t\t\t//    .on(\"click\", function() {\n\t\t\t//         self.amOrPm = \"PM\";\n\t\t\t//        $('.clockpicker-span-am-pm').empty().append('PM');\n\t\t\t//    });\n\n\t\t\t$('<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button am-button\">' + \"AM\" + '</button>')\n\t\t\t\t.on(\"click\", function() {\n\t\t\t\t\tself.amOrPm = \"AM\";\n\t\t\t\t\t$('.clockpicker-span-am-pm').empty().append('AM');\n\t\t\t\t}).appendTo(this.amPmBlock);\n\n\n\t\t\t$('<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button pm-button\">' + \"PM\" + '</button>')\n\t\t\t\t.on(\"click\", function() {\n\t\t\t\t\tself.amOrPm = 'PM';\n\t\t\t\t\t$('.clockpicker-span-am-pm').empty().append('PM');\n\t\t\t\t}).appendTo(this.amPmBlock);\n\n\t\t}\n\n\t\tif (! options.autoclose) {\n\t\t\t// If autoclose is not setted, append a button\n\t\t\t$('<button type=\"button\" class=\"btn btn-sm btn-secondary btn-block clockpicker-button\">' + options.donetext + '</button>')\n\t\t\t\t.click($.proxy(this.done, this))\n\t\t\t\t.appendTo(popover);\n\t\t}\n\n\t\t// Placement and arrow align - make sure they make sense.\n\t\tif ((options.placement === 'top' || options.placement === 'bottom' || options.placement === 'auto') && (options.align === 'top' || options.align === 'bottom')) options.align = 'left';\n\t\tif ((options.placement === 'left' || options.placement === 'right') && (options.align === 'left' || options.align === 'right')) options.align = 'top';\n\n\t\tpopover.addClass(options.placement);\n\t\tpopover.addClass('clockpicker-align-' + options.align);\n\n\t\tthis.spanHours.click($.proxy(this.toggleView, this, 'hours'));\n\t\tthis.spanMinutes.click($.proxy(this.toggleView, this, 'minutes'));\n\n\t\t// Show or toggle\n\t\tinput.on('focus.clockpicker click.clockpicker', $.proxy(this.show, this));\n\t\taddon.on('click.clockpicker', $.proxy(this.toggle, this));\n\n\t\t// Build ticks\n\t\tvar tickTpl = $('<div class=\"clockpicker-tick\"></div>'),\n\t\t\ti, tick, radian, radius;\n\n\t\t// Hours view\n\t\tif (options.twelvehour) {\n\t\t\tfor (i = 1; i < 13; i += 1) {\n\t\t\t\ttick = tickTpl.clone();\n\t\t\t\tradian = i / 6 * Math.PI;\n\t\t\t\tradius = outerRadius;\n\t\t\t\ttick.css('font-size', '120%');\n\t\t\t\ttick.css({\n\t\t\t\t\tleft: dialRadius + Math.sin(radian) * radius - tickRadius,\n\t\t\t\t\ttop: dialRadius - Math.cos(radian) * radius - tickRadius\n\t\t\t\t});\n\t\t\t\ttick.html(i === 0 ? '00' : i);\n\t\t\t\thoursView.append(tick);\n\t\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < 24; i += 1) {\n\t\t\t\ttick = tickTpl.clone();\n\t\t\t\tradian = i / 6 * Math.PI;\n\t\t\t\tvar inner = i > 0 && i < 13;\n\t\t\t\tradius = inner ? innerRadius : outerRadius;\n\t\t\t\ttick.css({\n\t\t\t\t\tleft: dialRadius + Math.sin(radian) * radius - tickRadius,\n\t\t\t\t\ttop: dialRadius - Math.cos(radian) * radius - tickRadius\n\t\t\t\t});\n\t\t\t\tif (inner) {\n\t\t\t\t\ttick.addClass('tick-inner');\n\t\t\t\t}\n\t\t\t\ttick.html(i === 0 ? '00' : i);\n\t\t\t\thoursView.append(tick);\n\t\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t\t}\n\t\t}\n\n\t\t// Minutes view\n\t\tfor (i = 0; i < 60; i += 5) {\n\t\t\ttick = tickTpl.clone();\n\t\t\tradian = i / 30 * Math.PI;\n\t\t\ttick.css({\n\t\t\t\tleft: dialRadius + Math.sin(radian) * outerRadius - tickRadius,\n\t\t\t\ttop: dialRadius - Math.cos(radian) * outerRadius - tickRadius\n\t\t\t});\n\t\t\t// tick.css('font-size', '120%');\n\t\t\ttick.html(leadingZero(i));\n\t\t\tminutesView.append(tick);\n\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t}\n\n\t\t// Clicking on minutes view space\n\t\tplate.on(mousedownEvent, function(e){\n\t\t\tif ($(e.target).closest('.clockpicker-tick').length === 0) {\n\t\t\t\tmousedown(e, true);\n\t\t\t}\n\t\t});\n\n\t\t// Mousedown or touchstart\n\t\tfunction mousedown(e, space) {\n\t\t\tvar offset = plate.offset(),\n\t\t\t\tisTouch = /^touch/.test(e.type),\n\t\t\t\tx0 = offset.left + dialRadius,\n\t\t\t\ty0 = offset.top + dialRadius,\n\t\t\t\tdx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0,\n\t\t\t\tdy = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0,\n\t\t\t\tz = Math.sqrt(dx * dx + dy * dy),\n\t\t\t\tmoved = false;\n\n\t\t\t// When clicking on minutes view space, check the mouse position\n\t\t\tif (space && (z < outerRadius - tickRadius || z > outerRadius + tickRadius)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.preventDefault();\n\n\t\t\t// Set cursor style of body after 200ms\n\t\t\tvar movingTimer = setTimeout(function(){\n\t\t\t\t$body.addClass('clockpicker-moving');\n\t\t\t}, 200);\n\n\t\t\t// Place the canvas to top\n\t\t\tif (svgSupported) {\n\t\t\t\tplate.append(self.canvas);\n\t\t\t}\n\n\t\t\t// Clock\n\t\t\tself.setHand(dx, dy, ! space, true);\n\n\t\t\t// Mousemove on document\n\t\t\t$doc.off(mousemoveEvent).on(mousemoveEvent, function(e){\n\t\t\t\te.preventDefault();\n\t\t\t\tvar isTouch = /^touch/.test(e.type),\n\t\t\t\t\tx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0,\n\t\t\t\t\ty = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0;\n\t\t\t\tif (! moved && x === dx && y === dy) {\n\t\t\t\t\t// Clicking in chrome on windows will trigger a mousemove event\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmoved = true;\n\t\t\t\tself.setHand(x, y, false, true);\n\t\t\t});\n\n\t\t\t// Mouseup on document\n\t\t\t$doc.off(mouseupEvent).on(mouseupEvent, function(e){\n\t\t\t\t$doc.off(mouseupEvent);\n\t\t\t\te.preventDefault();\n\t\t\t\tvar isTouch = /^touch/.test(e.type),\n\t\t\t\t\tx = (isTouch ? e.originalEvent.changedTouches[0] : e).pageX - x0,\n\t\t\t\t\ty = (isTouch ? e.originalEvent.changedTouches[0] : e).pageY - y0;\n\t\t\t\tif ((space || moved) && x === dx && y === dy) {\n\t\t\t\t\tself.setHand(x, y);\n\t\t\t\t}\n\t\t\t\tif (self.currentView === 'hours') {\n\t\t\t\t\tself.toggleView('minutes', duration / 2);\n\t\t\t\t} else {\n\t\t\t\t\tif (options.autoclose) {\n\t\t\t\t\t\tself.minutesView.addClass('clockpicker-dial-out');\n\t\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t\tself.done();\n\t\t\t\t\t\t}, duration / 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tplate.prepend(canvas);\n\n\t\t\t\t// Reset cursor style of body\n\t\t\t\tclearTimeout(movingTimer);\n\t\t\t\t$body.removeClass('clockpicker-moving');\n\n\t\t\t\t// Unbind mousemove event\n\t\t\t\t$doc.off(mousemoveEvent);\n\t\t\t});\n\t\t}\n\n\t\tif (svgSupported) {\n\t\t\t// Draw clock hands and others\n\t\t\tvar canvas = popover.find('.clockpicker-canvas'),\n\t\t\t\tsvg = createSvgElement('svg');\n\t\t\tsvg.setAttribute('class', 'clockpicker-svg');\n\t\t\tsvg.setAttribute('width', diameter);\n\t\t\tsvg.setAttribute('height', diameter);\n\t\t\tvar g = createSvgElement('g');\n\t\t\tg.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')');\n\t\t\tvar bearing = createSvgElement('circle');\n\t\t\tbearing.setAttribute('class', 'clockpicker-canvas-bearing');\n\t\t\tbearing.setAttribute('cx', 0);\n\t\t\tbearing.setAttribute('cy', 0);\n\t\t\tbearing.setAttribute('r', 2);\n\t\t\tvar hand = createSvgElement('line');\n\t\t\thand.setAttribute('x1', 0);\n\t\t\thand.setAttribute('y1', 0);\n\t\t\tvar bg = createSvgElement('circle');\n\t\t\tbg.setAttribute('class', 'clockpicker-canvas-bg');\n\t\t\tbg.setAttribute('r', tickRadius);\n\t\t\tvar fg = createSvgElement('circle');\n\t\t\tfg.setAttribute('class', 'clockpicker-canvas-fg');\n\t\t\tfg.setAttribute('r', 3.5);\n\t\t\tg.appendChild(hand);\n\t\t\tg.appendChild(bg);\n\t\t\tg.appendChild(fg);\n\t\t\tg.appendChild(bearing);\n\t\t\tsvg.appendChild(g);\n\t\t\tcanvas.append(svg);\n\n\t\t\tthis.hand = hand;\n\t\t\tthis.bg = bg;\n\t\t\tthis.fg = fg;\n\t\t\tthis.bearing = bearing;\n\t\t\tthis.g = g;\n\t\t\tthis.canvas = canvas;\n\t\t}\n\n\t\traiseCallback(this.options.init);\n\t}\n\n\tfunction raiseCallback(callbackFunction) {\n\t\tif (callbackFunction && typeof callbackFunction === \"function\") {\n\t\t\tcallbackFunction();\n\t\t}\n\t}\n\n\t// Default options\n\tClockPicker.DEFAULTS = {\n\t\t'default': '',       // default time, 'now' or '13:14' e.g.\n\t\tfromnow: 0,          // set default time to * milliseconds from now (using with default = 'now')\n\t\tplacement: 'bottom', // clock popover placement\n\t\talign: 'left',       // popover arrow align\n\t\tdonetext: 'Done',    // done button text\n\t\tautoclose: false,    // auto close when minute is selected\n\t\ttwelvehour: false, // change to 12 hour AM/PM clock from 24 hour\n\t\tvibrate: true        // vibrate the device when dragging clock hand\n\t};\n\n\t// Show or hide popover\n\tClockPicker.prototype.toggle = function(){\n\t\tthis[this.isShown ? 'hide' : 'show']();\n\t};\n\n\t// Set popover position\n\tClockPicker.prototype.locate = function(){\n\t\tvar element = this.element,\n\t\t\tpopover = this.popover,\n\t\t\toffset = element.offset(),\n\t\t\twidth = element.outerWidth(),\n\t\t\theight = element.outerHeight(),\n\t\t\tplacement = this.options.placement,\n\t\t\talign = this.options.align,\n\t\t\tstyles = {},\n\t\t\tself = this,\n\t\t\tviewportHeight = window.innerHeight || document.documentElement.clientHeight,\n\t\t\tscrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\n\t\tpopover.show();\n\n\t\tif(placement === 'auto'){\n\t\t\tif (offset.top + popover.outerHeight() > viewportHeight + scrollTop) {\n\t\t\t\tplacement = 'top';\n\t\t\t} else {\n\t\t\t\tplacement = 'bottom';\n\t\t\t}\n\t\t}\n\n\t\t// Place the popover\n\t\tswitch (placement) {\n\t\t\tcase 'bottom':\n\t\t\t\tstyles.top = offset.top + height;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\tstyles.left = offset.left + width;\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\tstyles.top = offset.top - popover.outerHeight();\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\t\tstyles.left = offset.left - popover.outerWidth();\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Align the popover arrow\n\t\tswitch (align) {\n\t\t\tcase 'left':\n\t\t\t\tstyles.left = offset.left;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\tstyles.left = offset.left + width - popover.outerWidth();\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\tstyles.top = offset.top;\n\t\t\t\tbreak;\n\t\t\tcase 'bottom':\n\t\t\t\tstyles.top = offset.top + height - popover.outerHeight();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tpopover.css(styles);\n\t};\n\n\t// Show popover\n\tClockPicker.prototype.show = function(e){\n\t\t// Not show again\n\t\tif (this.isShown) {\n\t\t\treturn;\n\t\t}\n\n\t\traiseCallback(this.options.beforeShow);\n\n\t\tvar self = this;\n\n\t\t// Initialize\n\t\tif (! this.isAppended) {\n\t\t\t// Append popover to body\n\t\t\t$body = $(document.body).append(this.popover);\n\n\t\t\t// Reset position when resize\n\t\t\t$win.on('resize.clockpicker' + this.id, function(){\n\t\t\t\tif (self.isShown) {\n\t\t\t\t\tself.locate();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.isAppended = true;\n\t\t}\n\n\t\t// Get the time\n\t\tvar value = ((this.input.prop('value') || this.options['default'] || '') + '');\n\n\t\tif (this.options.twelvehour) {\n\t\t\tvar amPmValue = value.split(' ');\n\t\t\tif (amPmValue[1]) {\n\t\t\t\tvalue = amPmValue[0];\n\t\t\t\tthis.amOrPm = amPmValue[1];\n\t\t\t}\n\t\t}\n\n\t\tvalue = value.split(':');\n\t\tif (value[0] === 'now') {\n\t\t\tvar now = new Date(+ new Date() + this.options.fromnow);\n\t\t\tvalue = [\n\t\t\t\tnow.getHours(),\n\t\t\t\tnow.getMinutes()\n\t\t\t];\n\t\t}\n\n\t\tthis.hours = + value[0] || 0;\n\t\tthis.minutes = + value[1] || 0;\n\t\tthis.spanHours.html(leadingZero(this.hours));\n\t\tthis.spanMinutes.html(leadingZero(this.minutes));\n\t\tif (this.options.twelvehour) {\n\t\t\tthis.spanAmPm.html(this.amOrPm);\n\t\t}\n\n\t\t// Toggle to hours view\n\t\tthis.toggleView('hours');\n\n\t\t// Set position\n\t\tthis.locate();\n\n\t\tthis.isShown = true;\n\n\t\t// Hide when clicking or tabbing on any element except the clock, input and addon\n\t\t$doc.on('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id, function(e){\n\t\t\tvar target = $(e.target);\n\t\t\tif (target.closest(self.popover).length === 0 &&\n\t\t\t\t\ttarget.closest(self.addon).length === 0 &&\n\t\t\t\t\ttarget.closest(self.input).length === 0) {\n\t\t\t\tself.hide();\n\t\t\t}\n\t\t});\n\n\t\t// Hide when ESC is pressed\n\t\t$doc.on('keyup.clockpicker.' + this.id, function(e){\n\t\t\tif (e.keyCode === 27) {\n\t\t\t\tself.hide();\n\t\t\t}\n\t\t});\n\n\t\traiseCallback(this.options.afterShow);\n\t};\n\n\t// Hide popover\n\tClockPicker.prototype.hide = function(){\n\t\traiseCallback(this.options.beforeHide);\n\n\t\tthis.isShown = false;\n\n\t\t// Unbinding events on document\n\t\t$doc.off('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id);\n\t\t$doc.off('keyup.clockpicker.' + this.id);\n\n\t\tthis.popover.hide();\n\n\t\traiseCallback(this.options.afterHide);\n\t};\n\n\t// Toggle to hours or minutes view\n\tClockPicker.prototype.toggleView = function(view, delay){\n\t\tvar raiseAfterHourSelect = false;\n\t\tif (view === 'minutes' && $(this.hoursView).css(\"visibility\") === \"visible\") {\n\t\t\traiseCallback(this.options.beforeHourSelect);\n\t\t\traiseAfterHourSelect = true;\n\t\t}\n\t\tvar isHours = view === 'hours',\n\t\t\tnextView = isHours ? this.hoursView : this.minutesView,\n\t\t\thideView = isHours ? this.minutesView : this.hoursView;\n\n\t\tthis.currentView = view;\n\n\t\tthis.spanHours.toggleClass('text-primary', isHours);\n\t\tthis.spanMinutes.toggleClass('text-primary', ! isHours);\n\n\t\t// Let's make transitions\n\t\thideView.addClass('clockpicker-dial-out');\n\t\tnextView.css('visibility', 'visible').removeClass('clockpicker-dial-out');\n\n\t\t// Reset clock hand\n\t\tthis.resetClock(delay);\n\n\t\t// After transitions ended\n\t\tclearTimeout(this.toggleViewTimer);\n\t\tthis.toggleViewTimer = setTimeout(function(){\n\t\t\thideView.css('visibility', 'hidden');\n\t\t}, duration);\n\n\t\tif (raiseAfterHourSelect) {\n\t\t\traiseCallback(this.options.afterHourSelect);\n\t\t}\n\t};\n\n\t// Reset clock hand\n\tClockPicker.prototype.resetClock = function(delay){\n\t\tvar view = this.currentView,\n\t\t\tvalue = this[view],\n\t\t\tisHours = view === 'hours',\n\t\t\tunit = Math.PI / (isHours ? 6 : 30),\n\t\t\tradian = value * unit,\n\t\t\tradius = isHours && value > 0 && value < 13 ? innerRadius : outerRadius,\n\t\t\tx = Math.sin(radian) * radius,\n\t\t\ty = - Math.cos(radian) * radius,\n\t\t\tself = this;\n\t\tif (svgSupported && delay) {\n\t\t\tself.canvas.addClass('clockpicker-canvas-out');\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.canvas.removeClass('clockpicker-canvas-out');\n\t\t\t\tself.setHand(x, y);\n\t\t\t}, delay);\n\t\t} else {\n\t\t\tthis.setHand(x, y);\n\t\t}\n\t};\n\n\t// Set clock hand to (x, y)\n\tClockPicker.prototype.setHand = function(x, y, roundBy5, dragging){\n\t\tvar radian = Math.atan2(x, - y),\n\t\t\tisHours = this.currentView === 'hours',\n\t\t\tunit = Math.PI / (isHours || roundBy5 ? 6 : 30),\n\t\t\tz = Math.sqrt(x * x + y * y),\n\t\t\toptions = this.options,\n\t\t\tinner = isHours && z < (outerRadius + innerRadius) / 2,\n\t\t\tradius = inner ? innerRadius : outerRadius,\n\t\t\tvalue;\n\n\t\t\tif (options.twelvehour) {\n\t\t\t\tradius = outerRadius;\n\t\t\t}\n\n\t\t// Radian should in range [0, 2PI]\n\t\tif (radian < 0) {\n\t\t\tradian = Math.PI * 2 + radian;\n\t\t}\n\n\t\t// Get the round value\n\t\tvalue = Math.round(radian / unit);\n\n\t\t// Get the round radian\n\t\tradian = value * unit;\n\n\t\t// Correct the hours or minutes\n\t\tif (options.twelvehour) {\n\t\t\tif (isHours) {\n\t\t\t\tif (value === 0) {\n\t\t\t\t\tvalue = 12;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (roundBy5) {\n\t\t\t\t\tvalue *= 5;\n\t\t\t\t}\n\t\t\t\tif (value === 60) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (isHours) {\n\t\t\t\tif (value === 12) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t\tvalue = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n\t\t\t} else {\n\t\t\t\tif (roundBy5) {\n\t\t\t\t\tvalue *= 5;\n\t\t\t\t}\n\t\t\t\tif (value === 60) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Once hours or minutes changed, vibrate the device\n\t\tif (this[this.currentView] !== value) {\n\t\t\tif (vibrate && this.options.vibrate) {\n\t\t\t\t// Do not vibrate too frequently\n\t\t\t\tif (! this.vibrateTimer) {\n\t\t\t\t\tnavigator[vibrate](10);\n\t\t\t\t\tthis.vibrateTimer = setTimeout($.proxy(function(){\n\t\t\t\t\t\tthis.vibrateTimer = null;\n\t\t\t\t\t}, this), 100);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis[this.currentView] = value;\n\t\tthis[isHours ? 'spanHours' : 'spanMinutes'].html(leadingZero(value));\n\n\t\t// If svg is not supported, just add an active class to the tick\n\t\tif (! svgSupported) {\n\t\t\tthis[isHours ? 'hoursView' : 'minutesView'].find('.clockpicker-tick').each(function(){\n\t\t\t\tvar tick = $(this);\n\t\t\t\ttick.toggleClass('active', value === + tick.html());\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Place clock hand at the top when dragging\n\t\tif (dragging || (! isHours && value % 5)) {\n\t\t\tthis.g.insertBefore(this.hand, this.bearing);\n\t\t\tthis.g.insertBefore(this.bg, this.fg);\n\t\t\tthis.bg.setAttribute('class', 'clockpicker-canvas-bg clockpicker-canvas-bg-trans');\n\t\t} else {\n\t\t\t// Or place it at the bottom\n\t\t\tthis.g.insertBefore(this.hand, this.bg);\n\t\t\tthis.g.insertBefore(this.fg, this.bg);\n\t\t\tthis.bg.setAttribute('class', 'clockpicker-canvas-bg');\n\t\t}\n\n\t\t// Set clock hand and others' position\n\t\tvar cx = Math.sin(radian) * radius,\n\t\t\tcy = - Math.cos(radian) * radius;\n\t\tthis.hand.setAttribute('x2', cx);\n\t\tthis.hand.setAttribute('y2', cy);\n\t\tthis.bg.setAttribute('cx', cx);\n\t\tthis.bg.setAttribute('cy', cy);\n\t\tthis.fg.setAttribute('cx', cx);\n\t\tthis.fg.setAttribute('cy', cy);\n\t};\n\n\t// Hours and minutes are selected\n\tClockPicker.prototype.done = function() {\n\t\traiseCallback(this.options.beforeDone);\n\t\tthis.hide();\n\t\tvar last = this.input.prop('value'),\n\t\t\tvalue = leadingZero(this.hours) + ':' + leadingZero(this.minutes);\n\n\t\tif (this.options.twelvehour) {\n\t\t\tvalue = value + ' ' +this.amOrPm;\n\t\t}\n\n\t\tthis.input.prop('value', value);\n\t\tif (value !== last) {\n\t\t\tthis.input.triggerHandler('change');\n\t\t\tif (! this.isInput) {\n\t\t\t\tthis.element.trigger('change');\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.autoclose) {\n\t\t\tthis.input.trigger('blur');\n\t\t}\n\n\t\traiseCallback(this.options.afterDone);\n\t};\n\n\t// Remove clockpicker from input\n\tClockPicker.prototype.remove = function() {\n\t\tthis.element.removeData('clockpicker');\n\t\tthis.input.off('focus.clockpicker click.clockpicker');\n\t\tthis.addon.off('click.clockpicker');\n\t\tif (this.isShown) {\n\t\t\tthis.hide();\n\t\t}\n\t\tif (this.isAppended) {\n\t\t\t$win.off('resize.clockpicker' + this.id);\n\t\t\tthis.popover.remove();\n\t\t}\n\t};\n\n\t// Extends $.fn.clockpicker\n\t$.fn.clockpicker = function(option){\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\t\treturn this.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('clockpicker');\n\t\t\tif (! data) {\n\t\t\t\tvar options = $.extend({}, ClockPicker.DEFAULTS, $this.data(), typeof option == 'object' && option);\n\t\t\t\t$this.data('clockpicker', new ClockPicker($this, options));\n\t\t\t} else {\n\t\t\t\t// Manual operatsions. show, hide, remove, e.g.\n\t\t\t\tif (typeof data[option] === 'function') {\n\t\t\t\t\tdata[option].apply(data, args);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n}());\n\n;\n// ┌────────────────────────────────────────────────────────────────────┐ \\\\\n// │ Raphaël 2.2.7 - JavaScript Vector Library                          │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com)    │ \\\\\n// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com)              │ \\\\\n// ├────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\\\\n// └────────────────────────────────────────────────────────────────────┘ \\\\\n// Copyright (c) 2017 Adobe Systems Incorporated. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ┌────────────────────────────────────────────────────────────┐ \\\\\n// │ Eve 0.5.4 - JavaScript Events Library                      │ \\\\\n// ├────────────────────────────────────────────────────────────┤ \\\\\n// │ Author Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) │ \\\\\n// └────────────────────────────────────────────────────────────┘ \\\\\n// Link: https://github.com/adobe-webplatform/eve\n\n(function (glob) {\n    var version = \"0.5.4\",\n        has = \"hasOwnProperty\",\n        separator = /[\\.\\/]/,\n        comaseparator = /\\s*,\\s*/,\n        wildcard = \"*\",\n        numsort = function (a, b) {\n            return a - b;\n        },\n        current_event,\n        stop,\n        events = {n: {}},\n        firstDefined = function () {\n            for (var i = 0, ii = this.length; i < ii; i++) {\n                if (typeof this[i] != \"undefined\") {\n                    return this[i];\n                }\n            }\n        },\n        lastDefined = function () {\n            var i = this.length;\n            while (--i) {\n                if (typeof this[i] != \"undefined\") {\n                    return this[i];\n                }\n            }\n        },\n        objtos = Object.prototype.toString,\n        Str = String,\n        isArray = Array.isArray || function (ar) {\n            return ar instanceof Array || objtos.call(ar) == \"[object Array]\";\n        },\n    /*\\\n     * eve\n     [ method ]\n\n     * Fires event with given `name`, given scope and other parameters.\n\n     - name (string) name of the *event*, dot (`.`) or slash (`/`) separated\n     - scope (object) context for the event handlers\n     - varargs (...) the rest of arguments will be sent to event handlers\n\n     = (object) array of returned values from the listeners. Array has two methods `.firstDefined()` and `.lastDefined()` to get first or last not `undefined` value.\n    \\*/\n        eve = function (name, scope) {\n            var oldstop = stop,\n                args = Array.prototype.slice.call(arguments, 2),\n                listeners = eve.listeners(name),\n                z = 0,\n                l,\n                indexed = [],\n                queue = {},\n                out = [],\n                ce = current_event;\n            out.firstDefined = firstDefined;\n            out.lastDefined = lastDefined;\n            current_event = name;\n            stop = 0;\n            for (var i = 0, ii = listeners.length; i < ii; i++) if (\"zIndex\" in listeners[i]) {\n                indexed.push(listeners[i].zIndex);\n                if (listeners[i].zIndex < 0) {\n                    queue[listeners[i].zIndex] = listeners[i];\n                }\n            }\n            indexed.sort(numsort);\n            while (indexed[z] < 0) {\n                l = queue[indexed[z++]];\n                out.push(l.apply(scope, args));\n                if (stop) {\n                    stop = oldstop;\n                    return out;\n                }\n            }\n            for (i = 0; i < ii; i++) {\n                l = listeners[i];\n                if (\"zIndex\" in l) {\n                    if (l.zIndex == indexed[z]) {\n                        out.push(l.apply(scope, args));\n                        if (stop) {\n                            break;\n                        }\n                        do {\n                            z++;\n                            l = queue[indexed[z]];\n                            l && out.push(l.apply(scope, args));\n                            if (stop) {\n                                break;\n                            }\n                        } while (l)\n                    } else {\n                        queue[l.zIndex] = l;\n                    }\n                } else {\n                    out.push(l.apply(scope, args));\n                    if (stop) {\n                        break;\n                    }\n                }\n            }\n            stop = oldstop;\n            current_event = ce;\n            return out;\n        };\n    // Undocumented. Debug only.\n    eve._events = events;\n    /*\\\n     * eve.listeners\n     [ method ]\n\n     * Internal method which gives you array of all event handlers that will be triggered by the given `name`.\n\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated\n\n     = (array) array of event handlers\n    \\*/\n    eve.listeners = function (name) {\n        var names = isArray(name) ? name : name.split(separator),\n            e = events,\n            item,\n            items,\n            k,\n            i,\n            ii,\n            j,\n            jj,\n            nes,\n            es = [e],\n            out = [];\n        for (i = 0, ii = names.length; i < ii; i++) {\n            nes = [];\n            for (j = 0, jj = es.length; j < jj; j++) {\n                e = es[j].n;\n                items = [e[names[i]], e[wildcard]];\n                k = 2;\n                while (k--) {\n                    item = items[k];\n                    if (item) {\n                        nes.push(item);\n                        out = out.concat(item.f || []);\n                    }\n                }\n            }\n            es = nes;\n        }\n        return out;\n    };\n    /*\\\n     * eve.separator\n     [ method ]\n\n     * If for some reasons you don’t like default separators (`.` or `/`) you can specify yours\n     * here. Be aware that if you pass a string longer than one character it will be treated as\n     * a list of characters.\n\n     - separator (string) new separator. Empty string resets to default: `.` or `/`.\n    \\*/\n    eve.separator = function (sep) {\n        if (sep) {\n            sep = Str(sep).replace(/(?=[\\.\\^\\]\\[\\-])/g, \"\\\\\");\n            sep = \"[\" + sep + \"]\";\n            separator = new RegExp(sep);\n        } else {\n            separator = /[\\.\\/]/;\n        }\n    };\n    /*\\\n     * eve.on\n     [ method ]\n     **\n     * Binds given event handler with a given name. You can use wildcards “`*`” for the names:\n     | eve.on(\"*.under.*\", f);\n     | eve(\"mouse.under.floor\"); // triggers f\n     * Use @eve to trigger the listener.\n     **\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n     - f (function) event handler function\n     **\n     - name (array) if you don’t want to use separators, you can use array of strings\n     - f (function) event handler function\n     **\n     = (function) returned function accepts a single numeric parameter that represents z-index of the handler. It is an optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment.\n     > Example:\n     | eve.on(\"mouse\", eatIt)(2);\n     | eve.on(\"mouse\", scream);\n     | eve.on(\"mouse\", catchIt)(1);\n     * This will ensure that `catchIt` function will be called before `eatIt`.\n     *\n     * If you want to put your handler before non-indexed handlers, specify a negative value.\n     * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”.\n    \\*/\n    eve.on = function (name, f) {\n        if (typeof f != \"function\") {\n            return function () {};\n        }\n        var names = isArray(name) ? isArray(name[0]) ? name : [name] : Str(name).split(comaseparator);\n        for (var i = 0, ii = names.length; i < ii; i++) {\n            (function (name) {\n                var names = isArray(name) ? name : Str(name).split(separator),\n                    e = events,\n                    exist;\n                for (var i = 0, ii = names.length; i < ii; i++) {\n                    e = e.n;\n                    e = e.hasOwnProperty(names[i]) && e[names[i]] || (e[names[i]] = {n: {}});\n                }\n                e.f = e.f || [];\n                for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {\n                    exist = true;\n                    break;\n                }\n                !exist && e.f.push(f);\n            }(names[i]));\n        }\n        return function (zIndex) {\n            if (+zIndex == +zIndex) {\n                f.zIndex = +zIndex;\n            }\n        };\n    };\n    /*\\\n     * eve.f\n     [ method ]\n     **\n     * Returns function that will fire given event with optional arguments.\n     * Arguments that will be passed to the result function will be also\n     * concated to the list of final arguments.\n     | el.onclick = eve.f(\"click\", 1, 2);\n     | eve.on(\"click\", function (a, b, c) {\n     |     console.log(a, b, c); // 1, 2, [event object]\n     | });\n     - event (string) event name\n     - varargs (…) and any other arguments\n     = (function) possible event handler function\n    \\*/\n    eve.f = function (event) {\n        var attrs = [].slice.call(arguments, 1);\n        return function () {\n            eve.apply(null, [event, null].concat(attrs).concat([].slice.call(arguments, 0)));\n        };\n    };\n    /*\\\n     * eve.stop\n     [ method ]\n     **\n     * Is used inside an event handler to stop the event, preventing any subsequent listeners from firing.\n    \\*/\n    eve.stop = function () {\n        stop = 1;\n    };\n    /*\\\n     * eve.nt\n     [ method ]\n     **\n     * Could be used inside event handler to figure out actual name of the event.\n     **\n     - subname (string) #optional subname of the event\n     **\n     = (string) name of the event, if `subname` is not specified\n     * or\n     = (boolean) `true`, if current event’s name contains `subname`\n    \\*/\n    eve.nt = function (subname) {\n        var cur = isArray(current_event) ? current_event.join(\".\") : current_event;\n        if (subname) {\n            return new RegExp(\"(?:\\\\.|\\\\/|^)\" + subname + \"(?:\\\\.|\\\\/|$)\").test(cur);\n        }\n        return cur;\n    };\n    /*\\\n     * eve.nts\n     [ method ]\n     **\n     * Could be used inside event handler to figure out actual name of the event.\n     **\n     **\n     = (array) names of the event\n    \\*/\n    eve.nts = function () {\n        return isArray(current_event) ? current_event : current_event.split(separator);\n    };\n    /*\\\n     * eve.off\n     [ method ]\n     **\n     * Removes given function from the list of event listeners assigned to given name.\n     * If no arguments specified all the events will be cleared.\n     **\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n     - f (function) event handler function\n    \\*/\n    /*\\\n     * eve.unbind\n     [ method ]\n     **\n     * See @eve.off\n    \\*/\n    eve.off = eve.unbind = function (name, f) {\n        if (!name) {\n            eve._events = events = {n: {}};\n            return;\n        }\n        var names = isArray(name) ? isArray(name[0]) ? name : [name] : Str(name).split(comaseparator);\n        if (names.length > 1) {\n            for (var i = 0, ii = names.length; i < ii; i++) {\n                eve.off(names[i], f);\n            }\n            return;\n        }\n        names = isArray(name) ? name : Str(name).split(separator);\n        var e,\n            key,\n            splice,\n            i, ii, j, jj,\n            cur = [events],\n            inodes = [];\n        for (i = 0, ii = names.length; i < ii; i++) {\n            for (j = 0; j < cur.length; j += splice.length - 2) {\n                splice = [j, 1];\n                e = cur[j].n;\n                if (names[i] != wildcard) {\n                    if (e[names[i]]) {\n                        splice.push(e[names[i]]);\n                        inodes.unshift({\n                            n: e,\n                            name: names[i]\n                        });\n                    }\n                } else {\n                    for (key in e) if (e[has](key)) {\n                        splice.push(e[key]);\n                        inodes.unshift({\n                            n: e,\n                            name: key\n                        });\n                    }\n                }\n                cur.splice.apply(cur, splice);\n            }\n        }\n        for (i = 0, ii = cur.length; i < ii; i++) {\n            e = cur[i];\n            while (e.n) {\n                if (f) {\n                    if (e.f) {\n                        for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) {\n                            e.f.splice(j, 1);\n                            break;\n                        }\n                        !e.f.length && delete e.f;\n                    }\n                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n                        var funcs = e.n[key].f;\n                        for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) {\n                            funcs.splice(j, 1);\n                            break;\n                        }\n                        !funcs.length && delete e.n[key].f;\n                    }\n                } else {\n                    delete e.f;\n                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n                        delete e.n[key].f;\n                    }\n                }\n                e = e.n;\n            }\n        }\n        // prune inner nodes in path\n        prune: for (i = 0, ii = inodes.length; i < ii; i++) {\n            e = inodes[i];\n            for (key in e.n[e.name].f) {\n                // not empty (has listeners)\n                continue prune;\n            }\n            for (key in e.n[e.name].n) {\n                // not empty (has children)\n                continue prune;\n            }\n            // is empty\n            delete e.n[e.name];\n        }\n    };\n    /*\\\n     * eve.once\n     [ method ]\n     **\n     * Binds given event handler with a given name to only run once then unbind itself.\n     | eve.once(\"login\", f);\n     | eve(\"login\"); // triggers f\n     | eve(\"login\"); // no listeners\n     * Use @eve to trigger the listener.\n     **\n     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n     - f (function) event handler function\n     **\n     = (function) same return function as @eve.on\n    \\*/\n    eve.once = function (name, f) {\n        var f2 = function () {\n            eve.off(name, f2);\n            return f.apply(this, arguments);\n        };\n        return eve.on(name, f2);\n    };\n    /*\\\n     * eve.version\n     [ property (string) ]\n     **\n     * Current version of the library.\n    \\*/\n    eve.version = version;\n    eve.toString = function () {\n        return \"You are running Eve \" + version;\n    };\n    glob.eve = eve;\n    typeof module != \"undefined\" && module.exports ? module.exports = eve : typeof define === \"function\" && define.amd ? define(\"eve\", [], function () { return eve; }) : glob.eve = eve;\n})(typeof window != \"undefined\" ? window : this);\n\n// ┌─────────────────────────────────────────────────────────────────────┐ \\\\\n// │ \"Raphaël 2.2.7\" - JavaScript Vector Library                         │ \\\\\n// ├─────────────────────────────────────────────────────────────────────┤ \\\\\n// │ Copyright (c) 2008-2016 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\\\\n// │ Copyright (c) 2008-2016 Sencha Labs (http://sencha.com)             │ \\\\\n// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\\\\n// └─────────────────────────────────────────────────────────────────────┘ \\\\\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Raphael\"] = factory();\n\telse\n\t\troot[\"Raphael\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), __webpack_require__(3), __webpack_require__(4)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) {\n\n\t    return R;\n\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_RESULT__ = function(eve) {\n\n\t    /*\\\n\t     * Raphael\n\t     [ method ]\n\t     **\n\t     * Creates a canvas object on which to draw.\n\t     * You must do this first, as all future calls to drawing methods\n\t     * from this instance will be bound to this canvas.\n\t     > Parameters\n\t     **\n\t     - container (HTMLElement|string) DOM element or its ID which is going to be a parent for drawing surface\n\t     - width (number)\n\t     - height (number)\n\t     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\n\t     * or\n\t     - x (number)\n\t     - y (number)\n\t     - width (number)\n\t     - height (number)\n\t     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\n\t     * or\n\t     - all (array) (first 3 or 4 elements in the array are equal to [containerID, width, height] or [x, y, width, height]. The rest are element descriptions in format {type: type, <attributes>}). See @Paper.add.\n\t     - callback (function) #optional callback function which is going to be executed in the context of newly created paper\n\t     * or\n\t     - onReadyCallback (function) function that is going to be called on DOM ready event. You can also subscribe to this event via Eveâ€™s â€œDOMLoadâ€ event. In this case method returns `undefined`.\n\t     = (object) @Paper\n\t     > Usage\n\t     | // Each of the following examples create a canvas\n\t     | // that is 320px wide by 200px high.\n\t     | // Canvas is created at the viewportâ€™s 10,50 coordinate.\n\t     | var paper = Raphael(10, 50, 320, 200);\n\t     | // Canvas is created at the top left corner of the #notepad element\n\t     | // (or its top right corner in dir=\"rtl\" elements)\n\t     | var paper = Raphael(document.getElementById(\"notepad\"), 320, 200);\n\t     | // Same as above\n\t     | var paper = Raphael(\"notepad\", 320, 200);\n\t     | // Image dump\n\t     | var set = Raphael([\"notepad\", 320, 200, {\n\t     |     type: \"rect\",\n\t     |     x: 10,\n\t     |     y: 10,\n\t     |     width: 25,\n\t     |     height: 25,\n\t     |     stroke: \"#f00\"\n\t     | }, {\n\t     |     type: \"text\",\n\t     |     x: 30,\n\t     |     y: 40,\n\t     |     text: \"Dump\"\n\t     | }]);\n\t    \\*/\n\t    function R(first) {\n\t        if (R.is(first, \"function\")) {\n\t            return loaded ? first() : eve.on(\"raphael.DOMload\", first);\n\t        } else if (R.is(first, array)) {\n\t            return R._engine.create[apply](R, first.splice(0, 3 + R.is(first[0], nu))).add(first);\n\t        } else {\n\t            var args = Array.prototype.slice.call(arguments, 0);\n\t            if (R.is(args[args.length - 1], \"function\")) {\n\t                var f = args.pop();\n\t                return loaded ? f.call(R._engine.create[apply](R, args)) : eve.on(\"raphael.DOMload\", function () {\n\t                    f.call(R._engine.create[apply](R, args));\n\t                });\n\t            } else {\n\t                return R._engine.create[apply](R, arguments);\n\t            }\n\t        }\n\t    }\n\t    R.version = \"2.2.0\";\n\t    R.eve = eve;\n\t    var loaded,\n\t        separator = /[, ]+/,\n\t        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},\n\t        formatrg = /\\{(\\d+)\\}/g,\n\t        proto = \"prototype\",\n\t        has = \"hasOwnProperty\",\n\t        g = {\n\t            doc: document,\n\t            win: window\n\t        },\n\t        oldRaphael = {\n\t            was: Object.prototype[has].call(g.win, \"Raphael\"),\n\t            is: g.win.Raphael\n\t        },\n\t        Paper = function () {\n\t            /*\\\n\t             * Paper.ca\n\t             [ property (object) ]\n\t             **\n\t             * Shortcut for @Paper.customAttributes\n\t            \\*/\n\t            /*\\\n\t             * Paper.customAttributes\n\t             [ property (object) ]\n\t             **\n\t             * If you have a set of attributes that you would like to represent\n\t             * as a function of some number you can do it easily with custom attributes:\n\t             > Usage\n\t             | paper.customAttributes.hue = function (num) {\n\t             |     num = num % 1;\n\t             |     return {fill: \"hsb(\" + num + \", 0.75, 1)\"};\n\t             | };\n\t             | // Custom attribute â€œhueâ€ will change fill\n\t             | // to be given hue with fixed saturation and brightness.\n\t             | // Now you can use it like this:\n\t             | var c = paper.circle(10, 10, 10).attr({hue: .45});\n\t             | // or even like this:\n\t             | c.animate({hue: 1}, 1e3);\n\t             |\n\t             | // You could also create custom attribute\n\t             | // with multiple parameters:\n\t             | paper.customAttributes.hsb = function (h, s, b) {\n\t             |     return {fill: \"hsb(\" + [h, s, b].join(\",\") + \")\"};\n\t             | };\n\t             | c.attr({hsb: \"0.5 .8 1\"});\n\t             | c.animate({hsb: [1, 0, 0.5]}, 1e3);\n\t            \\*/\n\t            this.ca = this.customAttributes = {};\n\t        },\n\t        paperproto,\n\t        appendChild = \"appendChild\",\n\t        apply = \"apply\",\n\t        concat = \"concat\",\n\t        supportsTouch = ('ontouchstart' in g.win) || g.win.DocumentTouch && g.doc instanceof DocumentTouch, //taken from Modernizr touch test\n\t        E = \"\",\n\t        S = \" \",\n\t        Str = String,\n\t        split = \"split\",\n\t        events = \"click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel\"[split](S),\n\t        touchMap = {\n\t            mousedown: \"touchstart\",\n\t            mousemove: \"touchmove\",\n\t            mouseup: \"touchend\"\n\t        },\n\t        lowerCase = Str.prototype.toLowerCase,\n\t        math = Math,\n\t        mmax = math.max,\n\t        mmin = math.min,\n\t        abs = math.abs,\n\t        pow = math.pow,\n\t        PI = math.PI,\n\t        nu = \"number\",\n\t        string = \"string\",\n\t        array = \"array\",\n\t        toString = \"toString\",\n\t        fillString = \"fill\",\n\t        objectToString = Object.prototype.toString,\n\t        paper = {},\n\t        push = \"push\",\n\t        ISURL = R._ISURL = /^url\\(['\"]?(.+?)['\"]?\\)$/i,\n\t        colourRegExp = /^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i,\n\t        isnan = {\"NaN\": 1, \"Infinity\": 1, \"-Infinity\": 1},\n\t        bezierrg = /^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/,\n\t        round = math.round,\n\t        setAttribute = \"setAttribute\",\n\t        toFloat = parseFloat,\n\t        toInt = parseInt,\n\t        upperCase = Str.prototype.toUpperCase,\n\t        availableAttrs = R._availableAttrs = {\n\t            \"arrow-end\": \"none\",\n\t            \"arrow-start\": \"none\",\n\t            blur: 0,\n\t            \"clip-rect\": \"0 0 1e9 1e9\",\n\t            cursor: \"default\",\n\t            cx: 0,\n\t            cy: 0,\n\t            fill: \"#fff\",\n\t            \"fill-opacity\": 1,\n\t            font: '10px \"Arial\"',\n\t            \"font-family\": '\"Arial\"',\n\t            \"font-size\": \"10\",\n\t            \"font-style\": \"normal\",\n\t            \"font-weight\": 400,\n\t            gradient: 0,\n\t            height: 0,\n\t            href: \"http://raphaeljs.com/\",\n\t            \"letter-spacing\": 0,\n\t            opacity: 1,\n\t            path: \"M0,0\",\n\t            r: 0,\n\t            rx: 0,\n\t            ry: 0,\n\t            src: \"\",\n\t            stroke: \"#000\",\n\t            \"stroke-dasharray\": \"\",\n\t            \"stroke-linecap\": \"butt\",\n\t            \"stroke-linejoin\": \"butt\",\n\t            \"stroke-miterlimit\": 0,\n\t            \"stroke-opacity\": 1,\n\t            \"stroke-width\": 1,\n\t            target: \"_blank\",\n\t            \"text-anchor\": \"middle\",\n\t            title: \"Raphael\",\n\t            transform: \"\",\n\t            width: 0,\n\t            x: 0,\n\t            y: 0,\n\t            \"class\": \"\"\n\t        },\n\t        availableAnimAttrs = R._availableAnimAttrs = {\n\t            blur: nu,\n\t            \"clip-rect\": \"csv\",\n\t            cx: nu,\n\t            cy: nu,\n\t            fill: \"colour\",\n\t            \"fill-opacity\": nu,\n\t            \"font-size\": nu,\n\t            height: nu,\n\t            opacity: nu,\n\t            path: \"path\",\n\t            r: nu,\n\t            rx: nu,\n\t            ry: nu,\n\t            stroke: \"colour\",\n\t            \"stroke-opacity\": nu,\n\t            \"stroke-width\": nu,\n\t            transform: \"transform\",\n\t            width: nu,\n\t            x: nu,\n\t            y: nu\n\t        },\n\t        whitespace = /[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]/g,\n\t        commaSpaces = /[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/,\n\t        hsrg = {hs: 1, rg: 1},\n\t        p2s = /,?([achlmqrstvxz]),?/gi,\n\t        pathCommand = /([achlmrqstvz])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/ig,\n\t        tCommand = /([rstm])[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029,]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*)+)/ig,\n\t        pathValues = /(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,?[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/ig,\n\t        radial_gradient = R._radial_gradient = /^r(?:\\(([^,]+?)[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*([^\\)]+?)\\))?/,\n\t        eldata = {},\n\t        sortByKey = function (a, b) {\n\t            return a.key - b.key;\n\t        },\n\t        sortByNumber = function (a, b) {\n\t            return toFloat(a) - toFloat(b);\n\t        },\n\t        fun = function () {},\n\t        pipe = function (x) {\n\t            return x;\n\t        },\n\t        rectPath = R._rectPath = function (x, y, w, h, r) {\n\t            if (r) {\n\t                return [[\"M\", x + r, y], [\"l\", w - r * 2, 0], [\"a\", r, r, 0, 0, 1, r, r], [\"l\", 0, h - r * 2], [\"a\", r, r, 0, 0, 1, -r, r], [\"l\", r * 2 - w, 0], [\"a\", r, r, 0, 0, 1, -r, -r], [\"l\", 0, r * 2 - h], [\"a\", r, r, 0, 0, 1, r, -r], [\"z\"]];\n\t            }\n\t            return [[\"M\", x, y], [\"l\", w, 0], [\"l\", 0, h], [\"l\", -w, 0], [\"z\"]];\n\t        },\n\t        ellipsePath = function (x, y, rx, ry) {\n\t            if (ry == null) {\n\t                ry = rx;\n\t            }\n\t            return [[\"M\", x, y], [\"m\", 0, -ry], [\"a\", rx, ry, 0, 1, 1, 0, 2 * ry], [\"a\", rx, ry, 0, 1, 1, 0, -2 * ry], [\"z\"]];\n\t        },\n\t        getPath = R._getPath = {\n\t            path: function (el) {\n\t                return el.attr(\"path\");\n\t            },\n\t            circle: function (el) {\n\t                var a = el.attrs;\n\t                return ellipsePath(a.cx, a.cy, a.r);\n\t            },\n\t            ellipse: function (el) {\n\t                var a = el.attrs;\n\t                return ellipsePath(a.cx, a.cy, a.rx, a.ry);\n\t            },\n\t            rect: function (el) {\n\t                var a = el.attrs;\n\t                return rectPath(a.x, a.y, a.width, a.height, a.r);\n\t            },\n\t            image: function (el) {\n\t                var a = el.attrs;\n\t                return rectPath(a.x, a.y, a.width, a.height);\n\t            },\n\t            text: function (el) {\n\t                var bbox = el._getBBox();\n\t                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\n\t            },\n\t            set : function(el) {\n\t                var bbox = el._getBBox();\n\t                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);\n\t            }\n\t        },\n\t        /*\\\n\t         * Raphael.mapPath\n\t         [ method ]\n\t         **\n\t         * Transform the path string with given matrix.\n\t         > Parameters\n\t         - path (string) path string\n\t         - matrix (object) see @Matrix\n\t         = (string) transformed path string\n\t        \\*/\n\t        mapPath = R.mapPath = function (path, matrix) {\n\t            if (!matrix) {\n\t                return path;\n\t            }\n\t            var x, y, i, j, ii, jj, pathi;\n\t            path = path2curve(path);\n\t            for (i = 0, ii = path.length; i < ii; i++) {\n\t                pathi = path[i];\n\t                for (j = 1, jj = pathi.length; j < jj; j += 2) {\n\t                    x = matrix.x(pathi[j], pathi[j + 1]);\n\t                    y = matrix.y(pathi[j], pathi[j + 1]);\n\t                    pathi[j] = x;\n\t                    pathi[j + 1] = y;\n\t                }\n\t            }\n\t            return path;\n\t        };\n\n\t    R._g = g;\n\t    /*\\\n\t     * Raphael.type\n\t     [ property (string) ]\n\t     **\n\t     * Can be â€œSVGâ€, â€œVMLâ€ or empty, depending on browser support.\n\t    \\*/\n\t    R.type = (g.win.SVGAngle || g.doc.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\") ? \"SVG\" : \"VML\");\n\t    if (R.type == \"VML\") {\n\t        var d = g.doc.createElement(\"div\"),\n\t            b;\n\t        d.innerHTML = '<v:shape adj=\"1\"/>';\n\t        b = d.firstChild;\n\t        b.style.behavior = \"url(#default#VML)\";\n\t        if (!(b && typeof b.adj == \"object\")) {\n\t            return (R.type = E);\n\t        }\n\t        d = null;\n\t    }\n\t    /*\\\n\t     * Raphael.svg\n\t     [ property (boolean) ]\n\t     **\n\t     * `true` if browser supports SVG.\n\t    \\*/\n\t    /*\\\n\t     * Raphael.vml\n\t     [ property (boolean) ]\n\t     **\n\t     * `true` if browser supports VML.\n\t    \\*/\n\t    R.svg = !(R.vml = R.type == \"VML\");\n\t    R._Paper = Paper;\n\t    /*\\\n\t     * Raphael.fn\n\t     [ property (object) ]\n\t     **\n\t     * You can add your own method to the canvas. For example if you want to draw a pie chart,\n\t     * you can create your own pie chart function and ship it as a RaphaÃ«l plugin. To do this\n\t     * you need to extend the `Raphael.fn` object. You should modify the `fn` object before a\n\t     * RaphaÃ«l instance is created, otherwise it will take no effect. Please note that the\n\t     * ability for namespaced plugins was removed in Raphael 2.0. It is up to the plugin to\n\t     * ensure any namespacing ensures proper context.\n\t     > Usage\n\t     | Raphael.fn.arrow = function (x1, y1, x2, y2, size) {\n\t     |     return this.path( ... );\n\t     | };\n\t     | // or create namespace\n\t     | Raphael.fn.mystuff = {\n\t     |     arrow: function () {â€¦},\n\t     |     star: function () {â€¦},\n\t     |     // etcâ€¦\n\t     | };\n\t     | var paper = Raphael(10, 10, 630, 480);\n\t     | // then use it\n\t     | paper.arrow(10, 10, 30, 30, 5).attr({fill: \"#f00\"});\n\t     | paper.mystuff.arrow();\n\t     | paper.mystuff.star();\n\t    \\*/\n\t    R.fn = paperproto = Paper.prototype = R.prototype;\n\t    R._id = 0;\n\t    /*\\\n\t     * Raphael.is\n\t     [ method ]\n\t     **\n\t     * Handful of replacements for `typeof` operator.\n\t     > Parameters\n\t     - o (â€¦) any object or primitive\n\t     - type (string) name of the type, i.e. â€œstringâ€, â€œfunctionâ€, â€œnumberâ€, etc.\n\t     = (boolean) is given value is of given type\n\t    \\*/\n\t    R.is = function (o, type) {\n\t        type = lowerCase.call(type);\n\t        if (type == \"finite\") {\n\t            return !isnan[has](+o);\n\t        }\n\t        if (type == \"array\") {\n\t            return o instanceof Array;\n\t        }\n\t        return  (type == \"null\" && o === null) ||\n\t                (type == typeof o && o !== null) ||\n\t                (type == \"object\" && o === Object(o)) ||\n\t                (type == \"array\" && Array.isArray && Array.isArray(o)) ||\n\t                objectToString.call(o).slice(8, -1).toLowerCase() == type;\n\t    };\n\n\t    function clone(obj) {\n\t        if (typeof obj == \"function\" || Object(obj) !== obj) {\n\t            return obj;\n\t        }\n\t        var res = new obj.constructor;\n\t        for (var key in obj) if (obj[has](key)) {\n\t            res[key] = clone(obj[key]);\n\t        }\n\t        return res;\n\t    }\n\n\t    /*\\\n\t     * Raphael.angle\n\t     [ method ]\n\t     **\n\t     * Returns angle between two or three points\n\t     > Parameters\n\t     - x1 (number) x coord of first point\n\t     - y1 (number) y coord of first point\n\t     - x2 (number) x coord of second point\n\t     - y2 (number) y coord of second point\n\t     - x3 (number) #optional x coord of third point\n\t     - y3 (number) #optional y coord of third point\n\t     = (number) angle in degrees.\n\t    \\*/\n\t    R.angle = function (x1, y1, x2, y2, x3, y3) {\n\t        if (x3 == null) {\n\t            var x = x1 - x2,\n\t                y = y1 - y2;\n\t            if (!x && !y) {\n\t                return 0;\n\t            }\n\t            return (180 + math.atan2(-y, -x) * 180 / PI + 360) % 360;\n\t        } else {\n\t            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);\n\t        }\n\t    };\n\t    /*\\\n\t     * Raphael.rad\n\t     [ method ]\n\t     **\n\t     * Transform angle to radians\n\t     > Parameters\n\t     - deg (number) angle in degrees\n\t     = (number) angle in radians.\n\t    \\*/\n\t    R.rad = function (deg) {\n\t        return deg % 360 * PI / 180;\n\t    };\n\t    /*\\\n\t     * Raphael.deg\n\t     [ method ]\n\t     **\n\t     * Transform angle to degrees\n\t     > Parameters\n\t     - rad (number) angle in radians\n\t     = (number) angle in degrees.\n\t    \\*/\n\t    R.deg = function (rad) {\n\t        return Math.round ((rad * 180 / PI% 360)* 1000) / 1000;\n\t    };\n\t    /*\\\n\t     * Raphael.snapTo\n\t     [ method ]\n\t     **\n\t     * Snaps given value to given grid.\n\t     > Parameters\n\t     - values (array|number) given array of values or step of the grid\n\t     - value (number) value to adjust\n\t     - tolerance (number) #optional tolerance for snapping. Default is `10`.\n\t     = (number) adjusted value.\n\t    \\*/\n\t    R.snapTo = function (values, value, tolerance) {\n\t        tolerance = R.is(tolerance, \"finite\") ? tolerance : 10;\n\t        if (R.is(values, array)) {\n\t            var i = values.length;\n\t            while (i--) if (abs(values[i] - value) <= tolerance) {\n\t                return values[i];\n\t            }\n\t        } else {\n\t            values = +values;\n\t            var rem = value % values;\n\t            if (rem < tolerance) {\n\t                return value - rem;\n\t            }\n\t            if (rem > values - tolerance) {\n\t                return value - rem + values;\n\t            }\n\t        }\n\t        return value;\n\t    };\n\n\t    /*\\\n\t     * Raphael.createUUID\n\t     [ method ]\n\t     **\n\t     * Returns RFC4122, version 4 ID\n\t    \\*/\n\t    var createUUID = R.createUUID = (function (uuidRegEx, uuidReplacer) {\n\t        return function () {\n\t            return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(uuidRegEx, uuidReplacer).toUpperCase();\n\t        };\n\t    })(/[xy]/g, function (c) {\n\t        var r = math.random() * 16 | 0,\n\t            v = c == \"x\" ? r : (r & 3 | 8);\n\t        return v.toString(16);\n\t    });\n\n\t    /*\\\n\t     * Raphael.setWindow\n\t     [ method ]\n\t     **\n\t     * Used when you need to draw in `&lt;iframe>`. Switched window to the iframe one.\n\t     > Parameters\n\t     - newwin (window) new window object\n\t    \\*/\n\t    R.setWindow = function (newwin) {\n\t        eve(\"raphael.setWindow\", R, g.win, newwin);\n\t        g.win = newwin;\n\t        g.doc = g.win.document;\n\t        if (R._engine.initWin) {\n\t            R._engine.initWin(g.win);\n\t        }\n\t    };\n\t    var toHex = function (color) {\n\t        if (R.vml) {\n\t            // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/\n\t            var trim = /^\\s+|\\s+$/g;\n\t            var bod;\n\t            try {\n\t                var docum = new ActiveXObject(\"htmlfile\");\n\t                docum.write(\"<body>\");\n\t                docum.close();\n\t                bod = docum.body;\n\t            } catch(e) {\n\t                bod = createPopup().document.body;\n\t            }\n\t            var range = bod.createTextRange();\n\t            toHex = cacher(function (color) {\n\t                try {\n\t                    bod.style.color = Str(color).replace(trim, E);\n\t                    var value = range.queryCommandValue(\"ForeColor\");\n\t                    value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);\n\t                    return \"#\" + (\"000000\" + value.toString(16)).slice(-6);\n\t                } catch(e) {\n\t                    return \"none\";\n\t                }\n\t            });\n\t        } else {\n\t            var i = g.doc.createElement(\"i\");\n\t            i.title = \"Rapha\\xebl Colour Picker\";\n\t            i.style.display = \"none\";\n\t            g.doc.body.appendChild(i);\n\t            toHex = cacher(function (color) {\n\t                i.style.color = color;\n\t                return g.doc.defaultView.getComputedStyle(i, E).getPropertyValue(\"color\");\n\t            });\n\t        }\n\t        return toHex(color);\n\t    },\n\t    hsbtoString = function () {\n\t        return \"hsb(\" + [this.h, this.s, this.b] + \")\";\n\t    },\n\t    hsltoString = function () {\n\t        return \"hsl(\" + [this.h, this.s, this.l] + \")\";\n\t    },\n\t    rgbtoString = function () {\n\t        return this.hex;\n\t    },\n\t    prepareRGB = function (r, g, b) {\n\t        if (g == null && R.is(r, \"object\") && \"r\" in r && \"g\" in r && \"b\" in r) {\n\t            b = r.b;\n\t            g = r.g;\n\t            r = r.r;\n\t        }\n\t        if (g == null && R.is(r, string)) {\n\t            var clr = R.getRGB(r);\n\t            r = clr.r;\n\t            g = clr.g;\n\t            b = clr.b;\n\t        }\n\t        if (r > 1 || g > 1 || b > 1) {\n\t            r /= 255;\n\t            g /= 255;\n\t            b /= 255;\n\t        }\n\n\t        return [r, g, b];\n\t    },\n\t    packageRGB = function (r, g, b, o) {\n\t        r *= 255;\n\t        g *= 255;\n\t        b *= 255;\n\t        var rgb = {\n\t            r: r,\n\t            g: g,\n\t            b: b,\n\t            hex: R.rgb(r, g, b),\n\t            toString: rgbtoString\n\t        };\n\t        R.is(o, \"finite\") && (rgb.opacity = o);\n\t        return rgb;\n\t    };\n\n\t    /*\\\n\t     * Raphael.color\n\t     [ method ]\n\t     **\n\t     * Parses the color string and returns object with all values for the given color.\n\t     > Parameters\n\t     - clr (string) color string in one of the supported formats (see @Raphael.getRGB)\n\t     = (object) Combined RGB & HSB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue,\n\t     o     hex (string) color in HTML/CSS format: #â€¢â€¢â€¢â€¢â€¢â€¢,\n\t     o     error (boolean) `true` if string canâ€™t be parsed,\n\t     o     h (number) hue,\n\t     o     s (number) saturation,\n\t     o     v (number) value (brightness),\n\t     o     l (number) lightness\n\t     o }\n\t    \\*/\n\t    R.color = function (clr) {\n\t        var rgb;\n\t        if (R.is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"b\" in clr) {\n\t            rgb = R.hsb2rgb(clr);\n\t            clr.r = rgb.r;\n\t            clr.g = rgb.g;\n\t            clr.b = rgb.b;\n\t            clr.hex = rgb.hex;\n\t        } else if (R.is(clr, \"object\") && \"h\" in clr && \"s\" in clr && \"l\" in clr) {\n\t            rgb = R.hsl2rgb(clr);\n\t            clr.r = rgb.r;\n\t            clr.g = rgb.g;\n\t            clr.b = rgb.b;\n\t            clr.hex = rgb.hex;\n\t        } else {\n\t            if (R.is(clr, \"string\")) {\n\t                clr = R.getRGB(clr);\n\t            }\n\t            if (R.is(clr, \"object\") && \"r\" in clr && \"g\" in clr && \"b\" in clr) {\n\t                rgb = R.rgb2hsl(clr);\n\t                clr.h = rgb.h;\n\t                clr.s = rgb.s;\n\t                clr.l = rgb.l;\n\t                rgb = R.rgb2hsb(clr);\n\t                clr.v = rgb.b;\n\t            } else {\n\t                clr = {hex: \"none\"};\n\t                clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;\n\t            }\n\t        }\n\t        clr.toString = rgbtoString;\n\t        return clr;\n\t    };\n\t    /*\\\n\t     * Raphael.hsb2rgb\n\t     [ method ]\n\t     **\n\t     * Converts HSB values to RGB object.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - v (number) value or brightness\n\t     = (object) RGB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue,\n\t     o     hex (string) color in HTML/CSS format: #â€¢â€¢â€¢â€¢â€¢â€¢\n\t     o }\n\t    \\*/\n\t    R.hsb2rgb = function (h, s, v, o) {\n\t        if (this.is(h, \"object\") && \"h\" in h && \"s\" in h && \"b\" in h) {\n\t            v = h.b;\n\t            s = h.s;\n\t            o = h.o;\n\t            h = h.h;\n\t        }\n\t        h *= 360;\n\t        var R, G, B, X, C;\n\t        h = (h % 360) / 60;\n\t        C = v * s;\n\t        X = C * (1 - abs(h % 2 - 1));\n\t        R = G = B = v - C;\n\n\t        h = ~~h;\n\t        R += [C, X, 0, 0, X, C][h];\n\t        G += [X, C, C, X, 0, 0][h];\n\t        B += [0, 0, X, C, C, X][h];\n\t        return packageRGB(R, G, B, o);\n\t    };\n\t    /*\\\n\t     * Raphael.hsl2rgb\n\t     [ method ]\n\t     **\n\t     * Converts HSL values to RGB object.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - l (number) luminosity\n\t     = (object) RGB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue,\n\t     o     hex (string) color in HTML/CSS format: #â€¢â€¢â€¢â€¢â€¢â€¢\n\t     o }\n\t    \\*/\n\t    R.hsl2rgb = function (h, s, l, o) {\n\t        if (this.is(h, \"object\") && \"h\" in h && \"s\" in h && \"l\" in h) {\n\t            l = h.l;\n\t            s = h.s;\n\t            h = h.h;\n\t        }\n\t        if (h > 1 || s > 1 || l > 1) {\n\t            h /= 360;\n\t            s /= 100;\n\t            l /= 100;\n\t        }\n\t        h *= 360;\n\t        var R, G, B, X, C;\n\t        h = (h % 360) / 60;\n\t        C = 2 * s * (l < .5 ? l : 1 - l);\n\t        X = C * (1 - abs(h % 2 - 1));\n\t        R = G = B = l - C / 2;\n\n\t        h = ~~h;\n\t        R += [C, X, 0, 0, X, C][h];\n\t        G += [X, C, C, X, 0, 0][h];\n\t        B += [0, 0, X, C, C, X][h];\n\t        return packageRGB(R, G, B, o);\n\t    };\n\t    /*\\\n\t     * Raphael.rgb2hsb\n\t     [ method ]\n\t     **\n\t     * Converts RGB values to HSB object.\n\t     > Parameters\n\t     - r (number) red\n\t     - g (number) green\n\t     - b (number) blue\n\t     = (object) HSB object in format:\n\t     o {\n\t     o     h (number) hue\n\t     o     s (number) saturation\n\t     o     b (number) brightness\n\t     o }\n\t    \\*/\n\t    R.rgb2hsb = function (r, g, b) {\n\t        b = prepareRGB(r, g, b);\n\t        r = b[0];\n\t        g = b[1];\n\t        b = b[2];\n\n\t        var H, S, V, C;\n\t        V = mmax(r, g, b);\n\t        C = V - mmin(r, g, b);\n\t        H = (C == 0 ? null :\n\t             V == r ? (g - b) / C :\n\t             V == g ? (b - r) / C + 2 :\n\t                      (r - g) / C + 4\n\t            );\n\t        H = ((H + 360) % 6) * 60 / 360;\n\t        S = C == 0 ? 0 : C / V;\n\t        return {h: H, s: S, b: V, toString: hsbtoString};\n\t    };\n\t    /*\\\n\t     * Raphael.rgb2hsl\n\t     [ method ]\n\t     **\n\t     * Converts RGB values to HSL object.\n\t     > Parameters\n\t     - r (number) red\n\t     - g (number) green\n\t     - b (number) blue\n\t     = (object) HSL object in format:\n\t     o {\n\t     o     h (number) hue\n\t     o     s (number) saturation\n\t     o     l (number) luminosity\n\t     o }\n\t    \\*/\n\t    R.rgb2hsl = function (r, g, b) {\n\t        b = prepareRGB(r, g, b);\n\t        r = b[0];\n\t        g = b[1];\n\t        b = b[2];\n\n\t        var H, S, L, M, m, C;\n\t        M = mmax(r, g, b);\n\t        m = mmin(r, g, b);\n\t        C = M - m;\n\t        H = (C == 0 ? null :\n\t             M == r ? (g - b) / C :\n\t             M == g ? (b - r) / C + 2 :\n\t                      (r - g) / C + 4);\n\t        H = ((H + 360) % 6) * 60 / 360;\n\t        L = (M + m) / 2;\n\t        S = (C == 0 ? 0 :\n\t             L < .5 ? C / (2 * L) :\n\t                      C / (2 - 2 * L));\n\t        return {h: H, s: S, l: L, toString: hsltoString};\n\t    };\n\t    R._path2string = function () {\n\t        return this.join(\",\").replace(p2s, \"$1\");\n\t    };\n\t    function repush(array, item) {\n\t        for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) {\n\t            return array.push(array.splice(i, 1)[0]);\n\t        }\n\t    }\n\t    function cacher(f, scope, postprocessor) {\n\t        function newf() {\n\t            var arg = Array.prototype.slice.call(arguments, 0),\n\t                args = arg.join(\"\\u2400\"),\n\t                cache = newf.cache = newf.cache || {},\n\t                count = newf.count = newf.count || [];\n\t            if (cache[has](args)) {\n\t                repush(count, args);\n\t                return postprocessor ? postprocessor(cache[args]) : cache[args];\n\t            }\n\t            count.length >= 1e3 && delete cache[count.shift()];\n\t            count.push(args);\n\t            cache[args] = f[apply](scope, arg);\n\t            return postprocessor ? postprocessor(cache[args]) : cache[args];\n\t        }\n\t        return newf;\n\t    }\n\n\t    var preload = R._preload = function (src, f) {\n\t        var img = g.doc.createElement(\"img\");\n\t        img.style.cssText = \"position:absolute;left:-9999em;top:-9999em\";\n\t        img.onload = function () {\n\t            f.call(this);\n\t            this.onload = null;\n\t            g.doc.body.removeChild(this);\n\t        };\n\t        img.onerror = function () {\n\t            g.doc.body.removeChild(this);\n\t        };\n\t        g.doc.body.appendChild(img);\n\t        img.src = src;\n\t    };\n\n\t    function clrToString() {\n\t        return this.hex;\n\t    }\n\n\t    /*\\\n\t     * Raphael.getRGB\n\t     [ method ]\n\t     **\n\t     * Parses colour string as RGB object\n\t     > Parameters\n\t     - colour (string) colour string in one of formats:\n\t     # <ul>\n\t     #     <li>Colour name (â€œ<code>red</code>â€, â€œ<code>green</code>â€, â€œ<code>cornflowerblue</code>â€, etc)</li>\n\t     #     <li>#â€¢â€¢â€¢ â€” shortened HTML colour: (â€œ<code>#000</code>â€, â€œ<code>#fc0</code>â€, etc)</li>\n\t     #     <li>#â€¢â€¢â€¢â€¢â€¢â€¢ â€” full length HTML colour: (â€œ<code>#000000</code>â€, â€œ<code>#bd2300</code>â€)</li>\n\t     #     <li>rgb(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” red, green and blue channelsâ€™ values: (â€œ<code>rgb(200,&nbsp;100,&nbsp;0)</code>â€)</li>\n\t     #     <li>rgb(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %: (â€œ<code>rgb(100%,&nbsp;175%,&nbsp;0%)</code>â€)</li>\n\t     #     <li>hsb(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” hue, saturation and brightness values: (â€œ<code>hsb(0.5,&nbsp;0.25,&nbsp;1)</code>â€)</li>\n\t     #     <li>hsb(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %</li>\n\t     #     <li>hsl(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” same as hsb</li>\n\t     #     <li>hsl(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as hsb</li>\n\t     # </ul>\n\t     = (object) RGB object in format:\n\t     o {\n\t     o     r (number) red,\n\t     o     g (number) green,\n\t     o     b (number) blue\n\t     o     hex (string) color in HTML/CSS format: #â€¢â€¢â€¢â€¢â€¢â€¢,\n\t     o     error (boolean) true if string canâ€™t be parsed\n\t     o }\n\t    \\*/\n\t    R.getRGB = cacher(function (colour) {\n\t        if (!colour || !!((colour = Str(colour)).indexOf(\"-\") + 1)) {\n\t            return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: clrToString};\n\t        }\n\t        if (colour == \"none\") {\n\t            return {r: -1, g: -1, b: -1, hex: \"none\", toString: clrToString};\n\t        }\n\t        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == \"#\") && (colour = toHex(colour));\n\t        var res,\n\t            red,\n\t            green,\n\t            blue,\n\t            opacity,\n\t            t,\n\t            values,\n\t            rgb = colour.match(colourRegExp);\n\t        if (rgb) {\n\t            if (rgb[2]) {\n\t                blue = toInt(rgb[2].substring(5), 16);\n\t                green = toInt(rgb[2].substring(3, 5), 16);\n\t                red = toInt(rgb[2].substring(1, 3), 16);\n\t            }\n\t            if (rgb[3]) {\n\t                blue = toInt((t = rgb[3].charAt(3)) + t, 16);\n\t                green = toInt((t = rgb[3].charAt(2)) + t, 16);\n\t                red = toInt((t = rgb[3].charAt(1)) + t, 16);\n\t            }\n\t            if (rgb[4]) {\n\t                values = rgb[4][split](commaSpaces);\n\t                red = toFloat(values[0]);\n\t                values[0].slice(-1) == \"%\" && (red *= 2.55);\n\t                green = toFloat(values[1]);\n\t                values[1].slice(-1) == \"%\" && (green *= 2.55);\n\t                blue = toFloat(values[2]);\n\t                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n\t                rgb[1].toLowerCase().slice(0, 4) == \"rgba\" && (opacity = toFloat(values[3]));\n\t                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n\t            }\n\t            if (rgb[5]) {\n\t                values = rgb[5][split](commaSpaces);\n\t                red = toFloat(values[0]);\n\t                values[0].slice(-1) == \"%\" && (red *= 2.55);\n\t                green = toFloat(values[1]);\n\t                values[1].slice(-1) == \"%\" && (green *= 2.55);\n\t                blue = toFloat(values[2]);\n\t                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n\t                (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n\t                rgb[1].toLowerCase().slice(0, 4) == \"hsba\" && (opacity = toFloat(values[3]));\n\t                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n\t                return R.hsb2rgb(red, green, blue, opacity);\n\t            }\n\t            if (rgb[6]) {\n\t                values = rgb[6][split](commaSpaces);\n\t                red = toFloat(values[0]);\n\t                values[0].slice(-1) == \"%\" && (red *= 2.55);\n\t                green = toFloat(values[1]);\n\t                values[1].slice(-1) == \"%\" && (green *= 2.55);\n\t                blue = toFloat(values[2]);\n\t                values[2].slice(-1) == \"%\" && (blue *= 2.55);\n\t                (values[0].slice(-3) == \"deg\" || values[0].slice(-1) == \"\\xb0\") && (red /= 360);\n\t                rgb[1].toLowerCase().slice(0, 4) == \"hsla\" && (opacity = toFloat(values[3]));\n\t                values[3] && values[3].slice(-1) == \"%\" && (opacity /= 100);\n\t                return R.hsl2rgb(red, green, blue, opacity);\n\t            }\n\t            rgb = {r: red, g: green, b: blue, toString: clrToString};\n\t            rgb.hex = \"#\" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);\n\t            R.is(opacity, \"finite\") && (rgb.opacity = opacity);\n\t            return rgb;\n\t        }\n\t        return {r: -1, g: -1, b: -1, hex: \"none\", error: 1, toString: clrToString};\n\t    }, R);\n\t    /*\\\n\t     * Raphael.hsb\n\t     [ method ]\n\t     **\n\t     * Converts HSB values to hex representation of the colour.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - b (number) value or brightness\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.hsb = cacher(function (h, s, b) {\n\t        return R.hsb2rgb(h, s, b).hex;\n\t    });\n\t    /*\\\n\t     * Raphael.hsl\n\t     [ method ]\n\t     **\n\t     * Converts HSL values to hex representation of the colour.\n\t     > Parameters\n\t     - h (number) hue\n\t     - s (number) saturation\n\t     - l (number) luminosity\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.hsl = cacher(function (h, s, l) {\n\t        return R.hsl2rgb(h, s, l).hex;\n\t    });\n\t    /*\\\n\t     * Raphael.rgb\n\t     [ method ]\n\t     **\n\t     * Converts RGB values to hex representation of the colour.\n\t     > Parameters\n\t     - r (number) red\n\t     - g (number) green\n\t     - b (number) blue\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.rgb = cacher(function (r, g, b) {\n\t        function round(x) { return (x + 0.5) | 0; }\n\t        return \"#\" + (16777216 | round(b) | (round(g) << 8) | (round(r) << 16)).toString(16).slice(1);\n\t    });\n\t    /*\\\n\t     * Raphael.getColor\n\t     [ method ]\n\t     **\n\t     * On each call returns next colour in the spectrum. To reset it back to red call @Raphael.getColor.reset\n\t     > Parameters\n\t     - value (number) #optional brightness, default is `0.75`\n\t     = (string) hex representation of the colour.\n\t    \\*/\n\t    R.getColor = function (value) {\n\t        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},\n\t            rgb = this.hsb2rgb(start.h, start.s, start.b);\n\t        start.h += .075;\n\t        if (start.h > 1) {\n\t            start.h = 0;\n\t            start.s -= .2;\n\t            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});\n\t        }\n\t        return rgb.hex;\n\t    };\n\t    /*\\\n\t     * Raphael.getColor.reset\n\t     [ method ]\n\t     **\n\t     * Resets spectrum position for @Raphael.getColor back to red.\n\t    \\*/\n\t    R.getColor.reset = function () {\n\t        delete this.start;\n\t    };\n\n\t    // http://schepers.cc/getting-to-the-point\n\t    function catmullRom2bezier(crp, z) {\n\t        var d = [];\n\t        for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n\t            var p = [\n\t                        {x: +crp[i - 2], y: +crp[i - 1]},\n\t                        {x: +crp[i],     y: +crp[i + 1]},\n\t                        {x: +crp[i + 2], y: +crp[i + 3]},\n\t                        {x: +crp[i + 4], y: +crp[i + 5]}\n\t                    ];\n\t            if (z) {\n\t                if (!i) {\n\t                    p[0] = {x: +crp[iLen - 2], y: +crp[iLen - 1]};\n\t                } else if (iLen - 4 == i) {\n\t                    p[3] = {x: +crp[0], y: +crp[1]};\n\t                } else if (iLen - 2 == i) {\n\t                    p[2] = {x: +crp[0], y: +crp[1]};\n\t                    p[3] = {x: +crp[2], y: +crp[3]};\n\t                }\n\t            } else {\n\t                if (iLen - 4 == i) {\n\t                    p[3] = p[2];\n\t                } else if (!i) {\n\t                    p[0] = {x: +crp[i], y: +crp[i + 1]};\n\t                }\n\t            }\n\t            d.push([\"C\",\n\t                  (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n\t                  (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n\t                  (p[1].x + 6 * p[2].x - p[3].x) / 6,\n\t                  (p[1].y + 6*p[2].y - p[3].y) / 6,\n\t                  p[2].x,\n\t                  p[2].y\n\t            ]);\n\t        }\n\n\t        return d;\n\t    }\n\t    /*\\\n\t     * Raphael.parsePathString\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Parses given path string into an array of arrays of path segments.\n\t     > Parameters\n\t     - pathString (string|array) path string or array of segments (in the last case it will be returned straight away)\n\t     = (array) array of segments.\n\t    \\*/\n\t    R.parsePathString = function (pathString) {\n\t        if (!pathString) {\n\t            return null;\n\t        }\n\t        var pth = paths(pathString);\n\t        if (pth.arr) {\n\t            return pathClone(pth.arr);\n\t        }\n\n\t        var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0},\n\t            data = [];\n\t        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption\n\t            data = pathClone(pathString);\n\t        }\n\t        if (!data.length) {\n\t            Str(pathString).replace(pathCommand, function (a, b, c) {\n\t                var params = [],\n\t                    name = b.toLowerCase();\n\t                c.replace(pathValues, function (a, b) {\n\t                    b && params.push(+b);\n\t                });\n\t                if (name == \"m\" && params.length > 2) {\n\t                    data.push([b][concat](params.splice(0, 2)));\n\t                    name = \"l\";\n\t                    b = b == \"m\" ? \"l\" : \"L\";\n\t                }\n\t                if (name == \"r\") {\n\t                    data.push([b][concat](params));\n\t                } else while (params.length >= paramCounts[name]) {\n\t                    data.push([b][concat](params.splice(0, paramCounts[name])));\n\t                    if (!paramCounts[name]) {\n\t                        break;\n\t                    }\n\t                }\n\t            });\n\t        }\n\t        data.toString = R._path2string;\n\t        pth.arr = pathClone(data);\n\t        return data;\n\t    };\n\t    /*\\\n\t     * Raphael.parseTransformString\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Parses given path string into an array of transformations.\n\t     > Parameters\n\t     - TString (string|array) transform string or array of transformations (in the last case it will be returned straight away)\n\t     = (array) array of transformations.\n\t    \\*/\n\t    R.parseTransformString = cacher(function (TString) {\n\t        if (!TString) {\n\t            return null;\n\t        }\n\t        var paramCounts = {r: 3, s: 4, t: 2, m: 6},\n\t            data = [];\n\t        if (R.is(TString, array) && R.is(TString[0], array)) { // rough assumption\n\t            data = pathClone(TString);\n\t        }\n\t        if (!data.length) {\n\t            Str(TString).replace(tCommand, function (a, b, c) {\n\t                var params = [],\n\t                    name = lowerCase.call(b);\n\t                c.replace(pathValues, function (a, b) {\n\t                    b && params.push(+b);\n\t                });\n\t                data.push([b][concat](params));\n\t            });\n\t        }\n\t        data.toString = R._path2string;\n\t        return data;\n\t    });\n\t    // PATHS\n\t    var paths = function (ps) {\n\t        var p = paths.ps = paths.ps || {};\n\t        if (p[ps]) {\n\t            p[ps].sleep = 100;\n\t        } else {\n\t            p[ps] = {\n\t                sleep: 100\n\t            };\n\t        }\n\t        setTimeout(function () {\n\t            for (var key in p) if (p[has](key) && key != ps) {\n\t                p[key].sleep--;\n\t                !p[key].sleep && delete p[key];\n\t            }\n\t        });\n\t        return p[ps];\n\t    };\n\t    /*\\\n\t     * Raphael.findDotsAtSegment\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Find dot coordinates on the given cubic bezier curve at the given t.\n\t     > Parameters\n\t     - p1x (number) x of the first point of the curve\n\t     - p1y (number) y of the first point of the curve\n\t     - c1x (number) x of the first anchor of the curve\n\t     - c1y (number) y of the first anchor of the curve\n\t     - c2x (number) x of the second anchor of the curve\n\t     - c2y (number) y of the second anchor of the curve\n\t     - p2x (number) x of the second point of the curve\n\t     - p2y (number) y of the second point of the curve\n\t     - t (number) position on the curve (0..1)\n\t     = (object) point information in format:\n\t     o {\n\t     o     x: (number) x coordinate of the point\n\t     o     y: (number) y coordinate of the point\n\t     o     m: {\n\t     o         x: (number) x coordinate of the left anchor\n\t     o         y: (number) y coordinate of the left anchor\n\t     o     }\n\t     o     n: {\n\t     o         x: (number) x coordinate of the right anchor\n\t     o         y: (number) y coordinate of the right anchor\n\t     o     }\n\t     o     start: {\n\t     o         x: (number) x coordinate of the start of the curve\n\t     o         y: (number) y coordinate of the start of the curve\n\t     o     }\n\t     o     end: {\n\t     o         x: (number) x coordinate of the end of the curve\n\t     o         y: (number) y coordinate of the end of the curve\n\t     o     }\n\t     o     alpha: (number) angle of the curve derivative at the point\n\t     o }\n\t    \\*/\n\t    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n\t        var t1 = 1 - t,\n\t            t13 = pow(t1, 3),\n\t            t12 = pow(t1, 2),\n\t            t2 = t * t,\n\t            t3 = t2 * t,\n\t            x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x,\n\t            y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y,\n\t            mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x),\n\t            my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y),\n\t            nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x),\n\t            ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y),\n\t            ax = t1 * p1x + t * c1x,\n\t            ay = t1 * p1y + t * c1y,\n\t            cx = t1 * c2x + t * p2x,\n\t            cy = t1 * c2y + t * p2y,\n\t            alpha = (90 - math.atan2(mx - nx, my - ny) * 180 / PI);\n\t        (mx > nx || my < ny) && (alpha += 180);\n\t        return {\n\t            x: x,\n\t            y: y,\n\t            m: {x: mx, y: my},\n\t            n: {x: nx, y: ny},\n\t            start: {x: ax, y: ay},\n\t            end: {x: cx, y: cy},\n\t            alpha: alpha\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.bezierBBox\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Return bounding box of a given cubic bezier curve\n\t     > Parameters\n\t     - p1x (number) x of the first point of the curve\n\t     - p1y (number) y of the first point of the curve\n\t     - c1x (number) x of the first anchor of the curve\n\t     - c1y (number) y of the first anchor of the curve\n\t     - c2x (number) x of the second anchor of the curve\n\t     - c2y (number) y of the second anchor of the curve\n\t     - p2x (number) x of the second point of the curve\n\t     - p2y (number) y of the second point of the curve\n\t     * or\n\t     - bez (array) array of six points for bezier curve\n\t     = (object) point information in format:\n\t     o {\n\t     o     min: {\n\t     o         x: (number) x coordinate of the left point\n\t     o         y: (number) y coordinate of the top point\n\t     o     }\n\t     o     max: {\n\t     o         x: (number) x coordinate of the right point\n\t     o         y: (number) y coordinate of the bottom point\n\t     o     }\n\t     o }\n\t    \\*/\n\t    R.bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n\t        if (!R.is(p1x, \"array\")) {\n\t            p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n\t        }\n\t        var bbox = curveDim.apply(null, p1x);\n\t        return {\n\t            x: bbox.min.x,\n\t            y: bbox.min.y,\n\t            x2: bbox.max.x,\n\t            y2: bbox.max.y,\n\t            width: bbox.max.x - bbox.min.x,\n\t            height: bbox.max.y - bbox.min.y\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.isPointInsideBBox\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns `true` if given point is inside bounding boxes.\n\t     > Parameters\n\t     - bbox (string) bounding box\n\t     - x (string) x coordinate of the point\n\t     - y (string) y coordinate of the point\n\t     = (boolean) `true` if point inside\n\t    \\*/\n\t    R.isPointInsideBBox = function (bbox, x, y) {\n\t        return x >= bbox.x && x <= bbox.x2 && y >= bbox.y && y <= bbox.y2;\n\t    };\n\t    /*\\\n\t     * Raphael.isBBoxIntersect\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns `true` if two bounding boxes intersect\n\t     > Parameters\n\t     - bbox1 (string) first bounding box\n\t     - bbox2 (string) second bounding box\n\t     = (boolean) `true` if they intersect\n\t    \\*/\n\t    R.isBBoxIntersect = function (bbox1, bbox2) {\n\t        var i = R.isPointInsideBBox;\n\t        return i(bbox2, bbox1.x, bbox1.y)\n\t            || i(bbox2, bbox1.x2, bbox1.y)\n\t            || i(bbox2, bbox1.x, bbox1.y2)\n\t            || i(bbox2, bbox1.x2, bbox1.y2)\n\t            || i(bbox1, bbox2.x, bbox2.y)\n\t            || i(bbox1, bbox2.x2, bbox2.y)\n\t            || i(bbox1, bbox2.x, bbox2.y2)\n\t            || i(bbox1, bbox2.x2, bbox2.y2)\n\t            || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)\n\t            && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y);\n\t    };\n\t    function base3(t, p1, p2, p3, p4) {\n\t        var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4,\n\t            t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n\t        return t * t2 - 3 * p1 + 3 * p2;\n\t    }\n\t    function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {\n\t        if (z == null) {\n\t            z = 1;\n\t        }\n\t        z = z > 1 ? 1 : z < 0 ? 0 : z;\n\t        var z2 = z / 2,\n\t            n = 12,\n\t            Tvalues = [-0.1252,0.1252,-0.3678,0.3678,-0.5873,0.5873,-0.7699,0.7699,-0.9041,0.9041,-0.9816,0.9816],\n\t            Cvalues = [0.2491,0.2491,0.2335,0.2335,0.2032,0.2032,0.1601,0.1601,0.1069,0.1069,0.0472,0.0472],\n\t            sum = 0;\n\t        for (var i = 0; i < n; i++) {\n\t            var ct = z2 * Tvalues[i] + z2,\n\t                xbase = base3(ct, x1, x2, x3, x4),\n\t                ybase = base3(ct, y1, y2, y3, y4),\n\t                comb = xbase * xbase + ybase * ybase;\n\t            sum += Cvalues[i] * math.sqrt(comb);\n\t        }\n\t        return z2 * sum;\n\t    }\n\t    function getTatLen(x1, y1, x2, y2, x3, y3, x4, y4, ll) {\n\t        if (ll < 0 || bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll) {\n\t            return;\n\t        }\n\t        var t = 1,\n\t            step = t / 2,\n\t            t2 = t - step,\n\t            l,\n\t            e = .01;\n\t        l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n\t        while (abs(l - ll) > e) {\n\t            step /= 2;\n\t            t2 += (l < ll ? 1 : -1) * step;\n\t            l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n\t        }\n\t        return t2;\n\t    }\n\t    function intersect(x1, y1, x2, y2, x3, y3, x4, y4) {\n\t        if (\n\t            mmax(x1, x2) < mmin(x3, x4) ||\n\t            mmin(x1, x2) > mmax(x3, x4) ||\n\t            mmax(y1, y2) < mmin(y3, y4) ||\n\t            mmin(y1, y2) > mmax(y3, y4)\n\t        ) {\n\t            return;\n\t        }\n\t        var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4),\n\t            ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4),\n\t            denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n\n\t        if (!denominator) {\n\t            return;\n\t        }\n\t        var px = nx / denominator,\n\t            py = ny / denominator,\n\t            px2 = +px.toFixed(2),\n\t            py2 = +py.toFixed(2);\n\t        if (\n\t            px2 < +mmin(x1, x2).toFixed(2) ||\n\t            px2 > +mmax(x1, x2).toFixed(2) ||\n\t            px2 < +mmin(x3, x4).toFixed(2) ||\n\t            px2 > +mmax(x3, x4).toFixed(2) ||\n\t            py2 < +mmin(y1, y2).toFixed(2) ||\n\t            py2 > +mmax(y1, y2).toFixed(2) ||\n\t            py2 < +mmin(y3, y4).toFixed(2) ||\n\t            py2 > +mmax(y3, y4).toFixed(2)\n\t        ) {\n\t            return;\n\t        }\n\t        return {x: px, y: py};\n\t    }\n\t    function inter(bez1, bez2) {\n\t        return interHelper(bez1, bez2);\n\t    }\n\t    function interCount(bez1, bez2) {\n\t        return interHelper(bez1, bez2, 1);\n\t    }\n\t    function interHelper(bez1, bez2, justCount) {\n\t        var bbox1 = R.bezierBBox(bez1),\n\t            bbox2 = R.bezierBBox(bez2);\n\t        if (!R.isBBoxIntersect(bbox1, bbox2)) {\n\t            return justCount ? 0 : [];\n\t        }\n\t        var l1 = bezlen.apply(0, bez1),\n\t            l2 = bezlen.apply(0, bez2),\n\t            n1 = mmax(~~(l1 / 5), 1),\n\t            n2 = mmax(~~(l2 / 5), 1),\n\t            dots1 = [],\n\t            dots2 = [],\n\t            xy = {},\n\t            res = justCount ? 0 : [];\n\t        for (var i = 0; i < n1 + 1; i++) {\n\t            var p = R.findDotsAtSegment.apply(R, bez1.concat(i / n1));\n\t            dots1.push({x: p.x, y: p.y, t: i / n1});\n\t        }\n\t        for (i = 0; i < n2 + 1; i++) {\n\t            p = R.findDotsAtSegment.apply(R, bez2.concat(i / n2));\n\t            dots2.push({x: p.x, y: p.y, t: i / n2});\n\t        }\n\t        for (i = 0; i < n1; i++) {\n\t            for (var j = 0; j < n2; j++) {\n\t                var di = dots1[i],\n\t                    di1 = dots1[i + 1],\n\t                    dj = dots2[j],\n\t                    dj1 = dots2[j + 1],\n\t                    ci = abs(di1.x - di.x) < .001 ? \"y\" : \"x\",\n\t                    cj = abs(dj1.x - dj.x) < .001 ? \"y\" : \"x\",\n\t                    is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n\t                if (is) {\n\t                    if (xy[is.x.toFixed(4)] == is.y.toFixed(4)) {\n\t                        continue;\n\t                    }\n\t                    xy[is.x.toFixed(4)] = is.y.toFixed(4);\n\t                    var t1 = di.t + abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t),\n\t                        t2 = dj.t + abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n\t                    if (t1 >= 0 && t1 <= 1.001 && t2 >= 0 && t2 <= 1.001) {\n\t                        if (justCount) {\n\t                            res++;\n\t                        } else {\n\t                            res.push({\n\t                                x: is.x,\n\t                                y: is.y,\n\t                                t1: mmin(t1, 1),\n\t                                t2: mmin(t2, 1)\n\t                            });\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return res;\n\t    }\n\t    /*\\\n\t     * Raphael.pathIntersection\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Finds intersections of two paths\n\t     > Parameters\n\t     - path1 (string) path string\n\t     - path2 (string) path string\n\t     = (array) dots of intersection\n\t     o [\n\t     o     {\n\t     o         x: (number) x coordinate of the point\n\t     o         y: (number) y coordinate of the point\n\t     o         t1: (number) t value for segment of path1\n\t     o         t2: (number) t value for segment of path2\n\t     o         segment1: (number) order number for segment of path1\n\t     o         segment2: (number) order number for segment of path2\n\t     o         bez1: (array) eight coordinates representing beziÃ©r curve for the segment of path1\n\t     o         bez2: (array) eight coordinates representing beziÃ©r curve for the segment of path2\n\t     o     }\n\t     o ]\n\t    \\*/\n\t    R.pathIntersection = function (path1, path2) {\n\t        return interPathHelper(path1, path2);\n\t    };\n\t    R.pathIntersectionNumber = function (path1, path2) {\n\t        return interPathHelper(path1, path2, 1);\n\t    };\n\t    function interPathHelper(path1, path2, justCount) {\n\t        path1 = R._path2curve(path1);\n\t        path2 = R._path2curve(path2);\n\t        var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2,\n\t            res = justCount ? 0 : [];\n\t        for (var i = 0, ii = path1.length; i < ii; i++) {\n\t            var pi = path1[i];\n\t            if (pi[0] == \"M\") {\n\t                x1 = x1m = pi[1];\n\t                y1 = y1m = pi[2];\n\t            } else {\n\t                if (pi[0] == \"C\") {\n\t                    bez1 = [x1, y1].concat(pi.slice(1));\n\t                    x1 = bez1[6];\n\t                    y1 = bez1[7];\n\t                } else {\n\t                    bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n\t                    x1 = x1m;\n\t                    y1 = y1m;\n\t                }\n\t                for (var j = 0, jj = path2.length; j < jj; j++) {\n\t                    var pj = path2[j];\n\t                    if (pj[0] == \"M\") {\n\t                        x2 = x2m = pj[1];\n\t                        y2 = y2m = pj[2];\n\t                    } else {\n\t                        if (pj[0] == \"C\") {\n\t                            bez2 = [x2, y2].concat(pj.slice(1));\n\t                            x2 = bez2[6];\n\t                            y2 = bez2[7];\n\t                        } else {\n\t                            bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n\t                            x2 = x2m;\n\t                            y2 = y2m;\n\t                        }\n\t                        var intr = interHelper(bez1, bez2, justCount);\n\t                        if (justCount) {\n\t                            res += intr;\n\t                        } else {\n\t                            for (var k = 0, kk = intr.length; k < kk; k++) {\n\t                                intr[k].segment1 = i;\n\t                                intr[k].segment2 = j;\n\t                                intr[k].bez1 = bez1;\n\t                                intr[k].bez2 = bez2;\n\t                            }\n\t                            res = res.concat(intr);\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return res;\n\t    }\n\t    /*\\\n\t     * Raphael.isPointInsidePath\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns `true` if given point is inside a given closed path.\n\t     > Parameters\n\t     - path (string) path string\n\t     - x (number) x of the point\n\t     - y (number) y of the point\n\t     = (boolean) true, if point is inside the path\n\t    \\*/\n\t    R.isPointInsidePath = function (path, x, y) {\n\t        var bbox = R.pathBBox(path);\n\t        return R.isPointInsideBBox(bbox, x, y) &&\n\t               interPathHelper(path, [[\"M\", x, y], [\"H\", bbox.x2 + 10]], 1) % 2 == 1;\n\t    };\n\t    R._removedFactory = function (methodname) {\n\t        return function () {\n\t            eve(\"raphael.log\", null, \"Rapha\\xebl: you are calling to method \\u201c\" + methodname + \"\\u201d of removed object\", methodname);\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.pathBBox\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Return bounding box of a given path\n\t     > Parameters\n\t     - path (string) path string\n\t     = (object) bounding box\n\t     o {\n\t     o     x: (number) x coordinate of the left top point of the box\n\t     o     y: (number) y coordinate of the left top point of the box\n\t     o     x2: (number) x coordinate of the right bottom point of the box\n\t     o     y2: (number) y coordinate of the right bottom point of the box\n\t     o     width: (number) width of the box\n\t     o     height: (number) height of the box\n\t     o     cx: (number) x coordinate of the center of the box\n\t     o     cy: (number) y coordinate of the center of the box\n\t     o }\n\t    \\*/\n\t    var pathDimensions = R.pathBBox = function (path) {\n\t        var pth = paths(path);\n\t        if (pth.bbox) {\n\t            return clone(pth.bbox);\n\t        }\n\t        if (!path) {\n\t            return {x: 0, y: 0, width: 0, height: 0, x2: 0, y2: 0};\n\t        }\n\t        path = path2curve(path);\n\t        var x = 0,\n\t            y = 0,\n\t            X = [],\n\t            Y = [],\n\t            p;\n\t        for (var i = 0, ii = path.length; i < ii; i++) {\n\t            p = path[i];\n\t            if (p[0] == \"M\") {\n\t                x = p[1];\n\t                y = p[2];\n\t                X.push(x);\n\t                Y.push(y);\n\t            } else {\n\t                var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n\t                X = X[concat](dim.min.x, dim.max.x);\n\t                Y = Y[concat](dim.min.y, dim.max.y);\n\t                x = p[5];\n\t                y = p[6];\n\t            }\n\t        }\n\t        var xmin = mmin[apply](0, X),\n\t            ymin = mmin[apply](0, Y),\n\t            xmax = mmax[apply](0, X),\n\t            ymax = mmax[apply](0, Y),\n\t            width = xmax - xmin,\n\t            height = ymax - ymin,\n\t                bb = {\n\t                x: xmin,\n\t                y: ymin,\n\t                x2: xmax,\n\t                y2: ymax,\n\t                width: width,\n\t                height: height,\n\t                cx: xmin + width / 2,\n\t                cy: ymin + height / 2\n\t            };\n\t        pth.bbox = clone(bb);\n\t        return bb;\n\t    },\n\t        pathClone = function (pathArray) {\n\t            var res = clone(pathArray);\n\t            res.toString = R._path2string;\n\t            return res;\n\t        },\n\t        pathToRelative = R._pathToRelative = function (pathArray) {\n\t            var pth = paths(pathArray);\n\t            if (pth.rel) {\n\t                return pathClone(pth.rel);\n\t            }\n\t            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\n\t                pathArray = R.parsePathString(pathArray);\n\t            }\n\t            var res = [],\n\t                x = 0,\n\t                y = 0,\n\t                mx = 0,\n\t                my = 0,\n\t                start = 0;\n\t            if (pathArray[0][0] == \"M\") {\n\t                x = pathArray[0][1];\n\t                y = pathArray[0][2];\n\t                mx = x;\n\t                my = y;\n\t                start++;\n\t                res.push([\"M\", x, y]);\n\t            }\n\t            for (var i = start, ii = pathArray.length; i < ii; i++) {\n\t                var r = res[i] = [],\n\t                    pa = pathArray[i];\n\t                if (pa[0] != lowerCase.call(pa[0])) {\n\t                    r[0] = lowerCase.call(pa[0]);\n\t                    switch (r[0]) {\n\t                        case \"a\":\n\t                            r[1] = pa[1];\n\t                            r[2] = pa[2];\n\t                            r[3] = pa[3];\n\t                            r[4] = pa[4];\n\t                            r[5] = pa[5];\n\t                            r[6] = +(pa[6] - x).toFixed(3);\n\t                            r[7] = +(pa[7] - y).toFixed(3);\n\t                            break;\n\t                        case \"v\":\n\t                            r[1] = +(pa[1] - y).toFixed(3);\n\t                            break;\n\t                        case \"m\":\n\t                            mx = pa[1];\n\t                            my = pa[2];\n\t                        default:\n\t                            for (var j = 1, jj = pa.length; j < jj; j++) {\n\t                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);\n\t                            }\n\t                    }\n\t                } else {\n\t                    r = res[i] = [];\n\t                    if (pa[0] == \"m\") {\n\t                        mx = pa[1] + x;\n\t                        my = pa[2] + y;\n\t                    }\n\t                    for (var k = 0, kk = pa.length; k < kk; k++) {\n\t                        res[i][k] = pa[k];\n\t                    }\n\t                }\n\t                var len = res[i].length;\n\t                switch (res[i][0]) {\n\t                    case \"z\":\n\t                        x = mx;\n\t                        y = my;\n\t                        break;\n\t                    case \"h\":\n\t                        x += +res[i][len - 1];\n\t                        break;\n\t                    case \"v\":\n\t                        y += +res[i][len - 1];\n\t                        break;\n\t                    default:\n\t                        x += +res[i][len - 2];\n\t                        y += +res[i][len - 1];\n\t                }\n\t            }\n\t            res.toString = R._path2string;\n\t            pth.rel = pathClone(res);\n\t            return res;\n\t        },\n\t        pathToAbsolute = R._pathToAbsolute = function (pathArray) {\n\t            var pth = paths(pathArray);\n\t            if (pth.abs) {\n\t                return pathClone(pth.abs);\n\t            }\n\t            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption\n\t                pathArray = R.parsePathString(pathArray);\n\t            }\n\t            if (!pathArray || !pathArray.length) {\n\t                return [[\"M\", 0, 0]];\n\t            }\n\t            var res = [],\n\t                x = 0,\n\t                y = 0,\n\t                mx = 0,\n\t                my = 0,\n\t                start = 0;\n\t            if (pathArray[0][0] == \"M\") {\n\t                x = +pathArray[0][1];\n\t                y = +pathArray[0][2];\n\t                mx = x;\n\t                my = y;\n\t                start++;\n\t                res[0] = [\"M\", x, y];\n\t            }\n\t            var crz = pathArray.length == 3 && pathArray[0][0] == \"M\" && pathArray[1][0].toUpperCase() == \"R\" && pathArray[2][0].toUpperCase() == \"Z\";\n\t            for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {\n\t                res.push(r = []);\n\t                pa = pathArray[i];\n\t                if (pa[0] != upperCase.call(pa[0])) {\n\t                    r[0] = upperCase.call(pa[0]);\n\t                    switch (r[0]) {\n\t                        case \"A\":\n\t                            r[1] = pa[1];\n\t                            r[2] = pa[2];\n\t                            r[3] = pa[3];\n\t                            r[4] = pa[4];\n\t                            r[5] = pa[5];\n\t                            r[6] = +(pa[6] + x);\n\t                            r[7] = +(pa[7] + y);\n\t                            break;\n\t                        case \"V\":\n\t                            r[1] = +pa[1] + y;\n\t                            break;\n\t                        case \"H\":\n\t                            r[1] = +pa[1] + x;\n\t                            break;\n\t                        case \"R\":\n\t                            var dots = [x, y][concat](pa.slice(1));\n\t                            for (var j = 2, jj = dots.length; j < jj; j++) {\n\t                                dots[j] = +dots[j] + x;\n\t                                dots[++j] = +dots[j] + y;\n\t                            }\n\t                            res.pop();\n\t                            res = res[concat](catmullRom2bezier(dots, crz));\n\t                            break;\n\t                        case \"M\":\n\t                            mx = +pa[1] + x;\n\t                            my = +pa[2] + y;\n\t                        default:\n\t                            for (j = 1, jj = pa.length; j < jj; j++) {\n\t                                r[j] = +pa[j] + ((j % 2) ? x : y);\n\t                            }\n\t                    }\n\t                } else if (pa[0] == \"R\") {\n\t                    dots = [x, y][concat](pa.slice(1));\n\t                    res.pop();\n\t                    res = res[concat](catmullRom2bezier(dots, crz));\n\t                    r = [\"R\"][concat](pa.slice(-2));\n\t                } else {\n\t                    for (var k = 0, kk = pa.length; k < kk; k++) {\n\t                        r[k] = pa[k];\n\t                    }\n\t                }\n\t                switch (r[0]) {\n\t                    case \"Z\":\n\t                        x = mx;\n\t                        y = my;\n\t                        break;\n\t                    case \"H\":\n\t                        x = r[1];\n\t                        break;\n\t                    case \"V\":\n\t                        y = r[1];\n\t                        break;\n\t                    case \"M\":\n\t                        mx = r[r.length - 2];\n\t                        my = r[r.length - 1];\n\t                    default:\n\t                        x = r[r.length - 2];\n\t                        y = r[r.length - 1];\n\t                }\n\t            }\n\t            res.toString = R._path2string;\n\t            pth.abs = pathClone(res);\n\t            return res;\n\t        },\n\t        l2c = function (x1, y1, x2, y2) {\n\t            return [x1, y1, x2, y2, x2, y2];\n\t        },\n\t        q2c = function (x1, y1, ax, ay, x2, y2) {\n\t            var _13 = 1 / 3,\n\t                _23 = 2 / 3;\n\t            return [\n\t                    _13 * x1 + _23 * ax,\n\t                    _13 * y1 + _23 * ay,\n\t                    _13 * x2 + _23 * ax,\n\t                    _13 * y2 + _23 * ay,\n\t                    x2,\n\t                    y2\n\t                ];\n\t        },\n\t        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n\t            // for more information of where this math came from visit:\n\t            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n\t            var _120 = PI * 120 / 180,\n\t                rad = PI / 180 * (+angle || 0),\n\t                res = [],\n\t                xy,\n\t                rotate = cacher(function (x, y, rad) {\n\t                    var X = x * math.cos(rad) - y * math.sin(rad),\n\t                        Y = x * math.sin(rad) + y * math.cos(rad);\n\t                    return {x: X, y: Y};\n\t                });\n\t            if (!recursive) {\n\t                xy = rotate(x1, y1, -rad);\n\t                x1 = xy.x;\n\t                y1 = xy.y;\n\t                xy = rotate(x2, y2, -rad);\n\t                x2 = xy.x;\n\t                y2 = xy.y;\n\t                var cos = math.cos(PI / 180 * angle),\n\t                    sin = math.sin(PI / 180 * angle),\n\t                    x = (x1 - x2) / 2,\n\t                    y = (y1 - y2) / 2;\n\t                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n\t                if (h > 1) {\n\t                    h = math.sqrt(h);\n\t                    rx = h * rx;\n\t                    ry = h * ry;\n\t                }\n\t                var rx2 = rx * rx,\n\t                    ry2 = ry * ry,\n\t                    k = (large_arc_flag == sweep_flag ? -1 : 1) *\n\t                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),\n\t                    cx = k * rx * y / ry + (x1 + x2) / 2,\n\t                    cy = k * -ry * x / rx + (y1 + y2) / 2,\n\t                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),\n\t                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));\n\n\t                f1 = x1 < cx ? PI - f1 : f1;\n\t                f2 = x2 < cx ? PI - f2 : f2;\n\t                f1 < 0 && (f1 = PI * 2 + f1);\n\t                f2 < 0 && (f2 = PI * 2 + f2);\n\t                if (sweep_flag && f1 > f2) {\n\t                    f1 = f1 - PI * 2;\n\t                }\n\t                if (!sweep_flag && f2 > f1) {\n\t                    f2 = f2 - PI * 2;\n\t                }\n\t            } else {\n\t                f1 = recursive[0];\n\t                f2 = recursive[1];\n\t                cx = recursive[2];\n\t                cy = recursive[3];\n\t            }\n\t            var df = f2 - f1;\n\t            if (abs(df) > _120) {\n\t                var f2old = f2,\n\t                    x2old = x2,\n\t                    y2old = y2;\n\t                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n\t                x2 = cx + rx * math.cos(f2);\n\t                y2 = cy + ry * math.sin(f2);\n\t                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n\t            }\n\t            df = f2 - f1;\n\t            var c1 = math.cos(f1),\n\t                s1 = math.sin(f1),\n\t                c2 = math.cos(f2),\n\t                s2 = math.sin(f2),\n\t                t = math.tan(df / 4),\n\t                hx = 4 / 3 * rx * t,\n\t                hy = 4 / 3 * ry * t,\n\t                m1 = [x1, y1],\n\t                m2 = [x1 + hx * s1, y1 - hy * c1],\n\t                m3 = [x2 + hx * s2, y2 - hy * c2],\n\t                m4 = [x2, y2];\n\t            m2[0] = 2 * m1[0] - m2[0];\n\t            m2[1] = 2 * m1[1] - m2[1];\n\t            if (recursive) {\n\t                return [m2, m3, m4][concat](res);\n\t            } else {\n\t                res = [m2, m3, m4][concat](res).join()[split](\",\");\n\t                var newres = [];\n\t                for (var i = 0, ii = res.length; i < ii; i++) {\n\t                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n\t                }\n\t                return newres;\n\t            }\n\t        },\n\t        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n\t            var t1 = 1 - t;\n\t            return {\n\t                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,\n\t                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y\n\t            };\n\t        },\n\t        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n\t            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),\n\t                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),\n\t                c = p1x - c1x,\n\t                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,\n\t                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,\n\t                y = [p1y, p2y],\n\t                x = [p1x, p2x],\n\t                dot;\n\t            abs(t1) > \"1e12\" && (t1 = .5);\n\t            abs(t2) > \"1e12\" && (t2 = .5);\n\t            if (t1 > 0 && t1 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            if (t2 > 0 && t2 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);\n\t            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);\n\t            c = p1y - c1y;\n\t            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;\n\t            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;\n\t            abs(t1) > \"1e12\" && (t1 = .5);\n\t            abs(t2) > \"1e12\" && (t2 = .5);\n\t            if (t1 > 0 && t1 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            if (t2 > 0 && t2 < 1) {\n\t                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);\n\t                x.push(dot.x);\n\t                y.push(dot.y);\n\t            }\n\t            return {\n\t                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},\n\t                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}\n\t            };\n\t        }),\n\t        path2curve = R._path2curve = cacher(function (path, path2) {\n\t            var pth = !path2 && paths(path);\n\t            if (!path2 && pth.curve) {\n\t                return pathClone(pth.curve);\n\t            }\n\t            var p = pathToAbsolute(path),\n\t                p2 = path2 && pathToAbsolute(path2),\n\t                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n\t                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},\n\t                processPath = function (path, d, pcom) {\n\t                    var nx, ny, tq = {T:1, Q:1};\n\t                    if (!path) {\n\t                        return [\"C\", d.x, d.y, d.x, d.y, d.x, d.y];\n\t                    }\n\t                    !(path[0] in tq) && (d.qx = d.qy = null);\n\t                    switch (path[0]) {\n\t                        case \"M\":\n\t                            d.X = path[1];\n\t                            d.Y = path[2];\n\t                            break;\n\t                        case \"A\":\n\t                            path = [\"C\"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));\n\t                            break;\n\t                        case \"S\":\n\t                            if (pcom == \"C\" || pcom == \"S\") { // In \"S\" case we have to take into account, if the previous command is C/S.\n\t                                nx = d.x * 2 - d.bx;          // And reflect the previous\n\t                                ny = d.y * 2 - d.by;          // command's control point relative to the current point.\n\t                            }\n\t                            else {                            // or some else or nothing\n\t                                nx = d.x;\n\t                                ny = d.y;\n\t                            }\n\t                            path = [\"C\", nx, ny][concat](path.slice(1));\n\t                            break;\n\t                        case \"T\":\n\t                            if (pcom == \"Q\" || pcom == \"T\") { // In \"T\" case we have to take into account, if the previous command is Q/T.\n\t                                d.qx = d.x * 2 - d.qx;        // And make a reflection similar\n\t                                d.qy = d.y * 2 - d.qy;        // to case \"S\".\n\t                            }\n\t                            else {                            // or something else or nothing\n\t                                d.qx = d.x;\n\t                                d.qy = d.y;\n\t                            }\n\t                            path = [\"C\"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n\t                            break;\n\t                        case \"Q\":\n\t                            d.qx = path[1];\n\t                            d.qy = path[2];\n\t                            path = [\"C\"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n\t                            break;\n\t                        case \"L\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, path[1], path[2]));\n\t                            break;\n\t                        case \"H\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, path[1], d.y));\n\t                            break;\n\t                        case \"V\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, d.x, path[1]));\n\t                            break;\n\t                        case \"Z\":\n\t                            path = [\"C\"][concat](l2c(d.x, d.y, d.X, d.Y));\n\t                            break;\n\t                    }\n\t                    return path;\n\t                },\n\t                fixArc = function (pp, i) {\n\t                    if (pp[i].length > 7) {\n\t                        pp[i].shift();\n\t                        var pi = pp[i];\n\t                        while (pi.length) {\n\t                            pcoms1[i]=\"A\"; // if created multiple C:s, their original seg is saved\n\t                            p2 && (pcoms2[i]=\"A\"); // the same as above\n\t                            pp.splice(i++, 0, [\"C\"][concat](pi.splice(0, 6)));\n\t                        }\n\t                        pp.splice(i, 1);\n\t                        ii = mmax(p.length, p2 && p2.length || 0);\n\t                    }\n\t                },\n\t                fixM = function (path1, path2, a1, a2, i) {\n\t                    if (path1 && path2 && path1[i][0] == \"M\" && path2[i][0] != \"M\") {\n\t                        path2.splice(i, 0, [\"M\", a2.x, a2.y]);\n\t                        a1.bx = 0;\n\t                        a1.by = 0;\n\t                        a1.x = path1[i][1];\n\t                        a1.y = path1[i][2];\n\t                        ii = mmax(p.length, p2 && p2.length || 0);\n\t                    }\n\t                },\n\t                pcoms1 = [], // path commands of original path p\n\t                pcoms2 = [], // path commands of original path p2\n\t                pfirst = \"\", // temporary holder for original path command\n\t                pcom = \"\"; // holder for previous path command of original path\n\t            for (var i = 0, ii = mmax(p.length, p2 && p2.length || 0); i < ii; i++) {\n\t                p[i] && (pfirst = p[i][0]); // save current path command\n\n\t                if (pfirst != \"C\") // C is not saved yet, because it may be result of conversion\n\t                {\n\t                    pcoms1[i] = pfirst; // Save current path command\n\t                    i && ( pcom = pcoms1[i-1]); // Get previous path command pcom\n\t                }\n\t                p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n\n\t                if (pcoms1[i] != \"A\" && pfirst == \"C\") pcoms1[i] = \"C\"; // A is the only command\n\t                // which may produce multiple C:s\n\t                // so we have to make sure that C is also C in original path\n\n\t                fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n\n\t                if (p2) { // the same procedures is done to p2\n\t                    p2[i] && (pfirst = p2[i][0]);\n\t                    if (pfirst != \"C\")\n\t                    {\n\t                        pcoms2[i] = pfirst;\n\t                        i && (pcom = pcoms2[i-1]);\n\t                    }\n\t                    p2[i] = processPath(p2[i], attrs2, pcom);\n\n\t                    if (pcoms2[i]!=\"A\" && pfirst==\"C\") pcoms2[i]=\"C\";\n\n\t                    fixArc(p2, i);\n\t                }\n\t                fixM(p, p2, attrs, attrs2, i);\n\t                fixM(p2, p, attrs2, attrs, i);\n\t                var seg = p[i],\n\t                    seg2 = p2 && p2[i],\n\t                    seglen = seg.length,\n\t                    seg2len = p2 && seg2.length;\n\t                attrs.x = seg[seglen - 2];\n\t                attrs.y = seg[seglen - 1];\n\t                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;\n\t                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;\n\t                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);\n\t                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);\n\t                attrs2.x = p2 && seg2[seg2len - 2];\n\t                attrs2.y = p2 && seg2[seg2len - 1];\n\t            }\n\t            if (!p2) {\n\t                pth.curve = pathClone(p);\n\t            }\n\t            return p2 ? [p, p2] : p;\n\t        }, null, pathClone),\n\t        parseDots = R._parseDots = cacher(function (gradient) {\n\t            var dots = [];\n\t            for (var i = 0, ii = gradient.length; i < ii; i++) {\n\t                var dot = {},\n\t                    par = gradient[i].match(/^([^:]*):?([\\d\\.]*)/);\n\t                dot.color = R.getRGB(par[1]);\n\t                if (dot.color.error) {\n\t                    return null;\n\t                }\n\t                dot.opacity = dot.color.opacity;\n\t                dot.color = dot.color.hex;\n\t                par[2] && (dot.offset = par[2] + \"%\");\n\t                dots.push(dot);\n\t            }\n\t            for (i = 1, ii = dots.length - 1; i < ii; i++) {\n\t                if (!dots[i].offset) {\n\t                    var start = toFloat(dots[i - 1].offset || 0),\n\t                        end = 0;\n\t                    for (var j = i + 1; j < ii; j++) {\n\t                        if (dots[j].offset) {\n\t                            end = dots[j].offset;\n\t                            break;\n\t                        }\n\t                    }\n\t                    if (!end) {\n\t                        end = 100;\n\t                        j = ii;\n\t                    }\n\t                    end = toFloat(end);\n\t                    var d = (end - start) / (j - i + 1);\n\t                    for (; i < j; i++) {\n\t                        start += d;\n\t                        dots[i].offset = start + \"%\";\n\t                    }\n\t                }\n\t            }\n\t            return dots;\n\t        }),\n\t        tear = R._tear = function (el, paper) {\n\t            el == paper.top && (paper.top = el.prev);\n\t            el == paper.bottom && (paper.bottom = el.next);\n\t            el.next && (el.next.prev = el.prev);\n\t            el.prev && (el.prev.next = el.next);\n\t        },\n\t        tofront = R._tofront = function (el, paper) {\n\t            if (paper.top === el) {\n\t                return;\n\t            }\n\t            tear(el, paper);\n\t            el.next = null;\n\t            el.prev = paper.top;\n\t            paper.top.next = el;\n\t            paper.top = el;\n\t        },\n\t        toback = R._toback = function (el, paper) {\n\t            if (paper.bottom === el) {\n\t                return;\n\t            }\n\t            tear(el, paper);\n\t            el.next = paper.bottom;\n\t            el.prev = null;\n\t            paper.bottom.prev = el;\n\t            paper.bottom = el;\n\t        },\n\t        insertafter = R._insertafter = function (el, el2, paper) {\n\t            tear(el, paper);\n\t            el2 == paper.top && (paper.top = el);\n\t            el2.next && (el2.next.prev = el);\n\t            el.next = el2.next;\n\t            el.prev = el2;\n\t            el2.next = el;\n\t        },\n\t        insertbefore = R._insertbefore = function (el, el2, paper) {\n\t            tear(el, paper);\n\t            el2 == paper.bottom && (paper.bottom = el);\n\t            el2.prev && (el2.prev.next = el);\n\t            el.prev = el2.prev;\n\t            el2.prev = el;\n\t            el.next = el2;\n\t        },\n\t        /*\\\n\t         * Raphael.toMatrix\n\t         [ method ]\n\t         **\n\t         * Utility method\n\t         **\n\t         * Returns matrix of transformations applied to a given path\n\t         > Parameters\n\t         - path (string) path string\n\t         - transform (string|array) transformation string\n\t         = (object) @Matrix\n\t        \\*/\n\t        toMatrix = R.toMatrix = function (path, transform) {\n\t            var bb = pathDimensions(path),\n\t                el = {\n\t                    _: {\n\t                        transform: E\n\t                    },\n\t                    getBBox: function () {\n\t                        return bb;\n\t                    }\n\t                };\n\t            extractTransform(el, transform);\n\t            return el.matrix;\n\t        },\n\t        /*\\\n\t         * Raphael.transformPath\n\t         [ method ]\n\t         **\n\t         * Utility method\n\t         **\n\t         * Returns path transformed by a given transformation\n\t         > Parameters\n\t         - path (string) path string\n\t         - transform (string|array) transformation string\n\t         = (string) path\n\t        \\*/\n\t        transformPath = R.transformPath = function (path, transform) {\n\t            return mapPath(path, toMatrix(path, transform));\n\n\t        },\n\t        extractTransform = R._extractTransform = function (el, tstr) {\n\t            if (tstr == null) {\n\t                return el._.transform;\n\t            }\n\t            tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, el._.transform || E);\n\t            var tdata = R.parseTransformString(tstr),\n\t                deg = 0,\n\t                dx = 0,\n\t                dy = 0,\n\t                sx = 1,\n\t                sy = 1,\n\t                _ = el._,\n\t                m = new Matrix;\n\t            _.transform = tdata || [];\n\t            if (tdata) {\n\t                for (var i = 0, ii = tdata.length; i < ii; i++) {\n\t                    var t = tdata[i],\n\t                        tlen = t.length,\n\t                        command = Str(t[0]).toLowerCase(),\n\t                        absolute = t[0] != command,\n\t                        inver = absolute ? m.invert() : 0,\n\t                        x1,\n\t                        y1,\n\t                        x2,\n\t                        y2,\n\t                        bb;\n\t                    if (command == \"t\" && tlen == 3) {\n\t                        if (absolute) {\n\t                            x1 = inver.x(0, 0);\n\t                            y1 = inver.y(0, 0);\n\t                            x2 = inver.x(t[1], t[2]);\n\t                            y2 = inver.y(t[1], t[2]);\n\t                            m.translate(x2 - x1, y2 - y1);\n\t                        } else {\n\t                            m.translate(t[1], t[2]);\n\t                        }\n\t                    } else if (command == \"r\") {\n\t                        if (tlen == 2) {\n\t                            bb = bb || el.getBBox(1);\n\t                            m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n\t                            deg += t[1];\n\t                        } else if (tlen == 4) {\n\t                            if (absolute) {\n\t                                x2 = inver.x(t[2], t[3]);\n\t                                y2 = inver.y(t[2], t[3]);\n\t                                m.rotate(t[1], x2, y2);\n\t                            } else {\n\t                                m.rotate(t[1], t[2], t[3]);\n\t                            }\n\t                            deg += t[1];\n\t                        }\n\t                    } else if (command == \"s\") {\n\t                        if (tlen == 2 || tlen == 3) {\n\t                            bb = bb || el.getBBox(1);\n\t                            m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2);\n\t                            sx *= t[1];\n\t                            sy *= t[tlen - 1];\n\t                        } else if (tlen == 5) {\n\t                            if (absolute) {\n\t                                x2 = inver.x(t[3], t[4]);\n\t                                y2 = inver.y(t[3], t[4]);\n\t                                m.scale(t[1], t[2], x2, y2);\n\t                            } else {\n\t                                m.scale(t[1], t[2], t[3], t[4]);\n\t                            }\n\t                            sx *= t[1];\n\t                            sy *= t[2];\n\t                        }\n\t                    } else if (command == \"m\" && tlen == 7) {\n\t                        m.add(t[1], t[2], t[3], t[4], t[5], t[6]);\n\t                    }\n\t                    _.dirtyT = 1;\n\t                    el.matrix = m;\n\t                }\n\t            }\n\n\t            /*\\\n\t             * Element.matrix\n\t             [ property (object) ]\n\t             **\n\t             * Keeps @Matrix object, which represents element transformation\n\t            \\*/\n\t            el.matrix = m;\n\n\t            _.sx = sx;\n\t            _.sy = sy;\n\t            _.deg = deg;\n\t            _.dx = dx = m.e;\n\t            _.dy = dy = m.f;\n\n\t            if (sx == 1 && sy == 1 && !deg && _.bbox) {\n\t                _.bbox.x += +dx;\n\t                _.bbox.y += +dy;\n\t            } else {\n\t                _.dirtyT = 1;\n\t            }\n\t        },\n\t        getEmpty = function (item) {\n\t            var l = item[0];\n\t            switch (l.toLowerCase()) {\n\t                case \"t\": return [l, 0, 0];\n\t                case \"m\": return [l, 1, 0, 0, 1, 0, 0];\n\t                case \"r\": if (item.length == 4) {\n\t                    return [l, 0, item[2], item[3]];\n\t                } else {\n\t                    return [l, 0];\n\t                }\n\t                case \"s\": if (item.length == 5) {\n\t                    return [l, 1, 1, item[3], item[4]];\n\n\t                } else if (item.length == 3) {\n\t                    return [l, 1, 1];\n\t                } else {\n\t                    return [l, 1];\n\t                }\n\t            }\n\t        },\n\t        equaliseTransform = R._equaliseTransform = function (t1, t2) {\n\t            t2 = Str(t2).replace(/\\.{3}|\\u2026/g, t1);\n\t            t1 = R.parseTransformString(t1) || [];\n\t            t2 = R.parseTransformString(t2) || [];\n\t            var maxlength = mmax(t1.length, t2.length),\n\t                from = [],\n\t                to = [],\n\t                i = 0, j, jj,\n\t                tt1, tt2;\n\t            for (; i < maxlength; i++) {\n\t                tt1 = t1[i] || getEmpty(t2[i]);\n\t                tt2 = t2[i] || getEmpty(tt1);\n\t                if ((tt1[0] != tt2[0]) ||\n\t                    (tt1[0].toLowerCase() == \"r\" && (tt1[2] != tt2[2] || tt1[3] != tt2[3])) ||\n\t                    (tt1[0].toLowerCase() == \"s\" && (tt1[3] != tt2[3] || tt1[4] != tt2[4]))\n\t                    ) {\n\t                    return;\n\t                }\n\t                from[i] = [];\n\t                to[i] = [];\n\t                for (j = 0, jj = mmax(tt1.length, tt2.length); j < jj; j++) {\n\t                    j in tt1 && (from[i][j] = tt1[j]);\n\t                    j in tt2 && (to[i][j] = tt2[j]);\n\t                }\n\t            }\n\t            return {\n\t                from: from,\n\t                to: to\n\t            };\n\t        };\n\t    R._getContainer = function (x, y, w, h) {\n\t        var container;\n\t        container = h == null && !R.is(x, \"object\") ? g.doc.getElementById(x) : x;\n\t        if (container == null) {\n\t            return;\n\t        }\n\t        if (container.tagName) {\n\t            if (y == null) {\n\t                return {\n\t                    container: container,\n\t                    width: container.style.pixelWidth || container.offsetWidth,\n\t                    height: container.style.pixelHeight || container.offsetHeight\n\t                };\n\t            } else {\n\t                return {\n\t                    container: container,\n\t                    width: y,\n\t                    height: w\n\t                };\n\t            }\n\t        }\n\t        return {\n\t            container: 1,\n\t            x: x,\n\t            y: y,\n\t            width: w,\n\t            height: h\n\t        };\n\t    };\n\t    /*\\\n\t     * Raphael.pathToRelative\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Converts path to relative form\n\t     > Parameters\n\t     - pathString (string|array) path string or array of segments\n\t     = (array) array of segments.\n\t    \\*/\n\t    R.pathToRelative = pathToRelative;\n\t    R._engine = {};\n\t    /*\\\n\t     * Raphael.path2curve\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Converts path to a new path where all segments are cubic bezier curves.\n\t     > Parameters\n\t     - pathString (string|array) path string or array of segments\n\t     = (array) array of segments.\n\t    \\*/\n\t    R.path2curve = path2curve;\n\t    /*\\\n\t     * Raphael.matrix\n\t     [ method ]\n\t     **\n\t     * Utility method\n\t     **\n\t     * Returns matrix based on given parameters.\n\t     > Parameters\n\t     - a (number)\n\t     - b (number)\n\t     - c (number)\n\t     - d (number)\n\t     - e (number)\n\t     - f (number)\n\t     = (object) @Matrix\n\t    \\*/\n\t    R.matrix = function (a, b, c, d, e, f) {\n\t        return new Matrix(a, b, c, d, e, f);\n\t    };\n\t    function Matrix(a, b, c, d, e, f) {\n\t        if (a != null) {\n\t            this.a = +a;\n\t            this.b = +b;\n\t            this.c = +c;\n\t            this.d = +d;\n\t            this.e = +e;\n\t            this.f = +f;\n\t        } else {\n\t            this.a = 1;\n\t            this.b = 0;\n\t            this.c = 0;\n\t            this.d = 1;\n\t            this.e = 0;\n\t            this.f = 0;\n\t        }\n\t    }\n\t    (function (matrixproto) {\n\t        /*\\\n\t         * Matrix.add\n\t         [ method ]\n\t         **\n\t         * Adds given matrix to existing one.\n\t         > Parameters\n\n\t         - a (number)\n\t         - b (number)\n\t         - c (number)\n\t         - d (number)\n\t         - e (number)\n\t         - f (number)\n\t         or\n\t         - matrix (object) @Matrix\n\t        \\*/\n\t        matrixproto.add = function (a, b, c, d, e, f) {\n\t            var out = [[], [], []],\n\t                m = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]],\n\t                matrix = [[a, c, e], [b, d, f], [0, 0, 1]],\n\t                x, y, z, res;\n\n\t            if (a && a instanceof Matrix) {\n\t                matrix = [[a.a, a.c, a.e], [a.b, a.d, a.f], [0, 0, 1]];\n\t            }\n\n\t            for (x = 0; x < 3; x++) {\n\t                for (y = 0; y < 3; y++) {\n\t                    res = 0;\n\t                    for (z = 0; z < 3; z++) {\n\t                        res += m[x][z] * matrix[z][y];\n\t                    }\n\t                    out[x][y] = res;\n\t                }\n\t            }\n\t            this.a = out[0][0];\n\t            this.b = out[1][0];\n\t            this.c = out[0][1];\n\t            this.d = out[1][1];\n\t            this.e = out[0][2];\n\t            this.f = out[1][2];\n\t        };\n\t        /*\\\n\t         * Matrix.invert\n\t         [ method ]\n\t         **\n\t         * Returns inverted version of the matrix\n\t         = (object) @Matrix\n\t        \\*/\n\t        matrixproto.invert = function () {\n\t            var me = this,\n\t                x = me.a * me.d - me.b * me.c;\n\t            return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x);\n\t        };\n\t        /*\\\n\t         * Matrix.clone\n\t         [ method ]\n\t         **\n\t         * Returns copy of the matrix\n\t         = (object) @Matrix\n\t        \\*/\n\t        matrixproto.clone = function () {\n\t            return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n\t        };\n\t        /*\\\n\t         * Matrix.translate\n\t         [ method ]\n\t         **\n\t         * Translate the matrix\n\t         > Parameters\n\t         - x (number)\n\t         - y (number)\n\t        \\*/\n\t        matrixproto.translate = function (x, y) {\n\t            this.add(1, 0, 0, 1, x, y);\n\t        };\n\t        /*\\\n\t         * Matrix.scale\n\t         [ method ]\n\t         **\n\t         * Scales the matrix\n\t         > Parameters\n\t         - x (number)\n\t         - y (number) #optional\n\t         - cx (number) #optional\n\t         - cy (number) #optional\n\t        \\*/\n\t        matrixproto.scale = function (x, y, cx, cy) {\n\t            y == null && (y = x);\n\t            (cx || cy) && this.add(1, 0, 0, 1, cx, cy);\n\t            this.add(x, 0, 0, y, 0, 0);\n\t            (cx || cy) && this.add(1, 0, 0, 1, -cx, -cy);\n\t        };\n\t        /*\\\n\t         * Matrix.rotate\n\t         [ method ]\n\t         **\n\t         * Rotates the matrix\n\t         > Parameters\n\t         - a (number)\n\t         - x (number)\n\t         - y (number)\n\t        \\*/\n\t        matrixproto.rotate = function (a, x, y) {\n\t            a = R.rad(a);\n\t            x = x || 0;\n\t            y = y || 0;\n\t            var cos = +math.cos(a).toFixed(9),\n\t                sin = +math.sin(a).toFixed(9);\n\t            this.add(cos, sin, -sin, cos, x, y);\n\t            this.add(1, 0, 0, 1, -x, -y);\n\t        };\n\t        /*\\\n\t         * Matrix.x\n\t         [ method ]\n\t         **\n\t         * Return x coordinate for given point after transformation described by the matrix. See also @Matrix.y\n\t         > Parameters\n\t         - x (number)\n\t         - y (number)\n\t         = (number) x\n\t        \\*/\n\t        matrixproto.x = function (x, y) {\n\t            return x * this.a + y * this.c + this.e;\n\t        };\n\t        /*\\\n\t         * Matrix.y\n\t         [ method ]\n\t         **\n\t         * Return y coordinate for given point after transformation described by the matrix. See also @Matrix.x\n\t         > Parameters\n\t         - x (number)\n\t         - y (number)\n\t         = (number) y\n\t        \\*/\n\t        matrixproto.y = function (x, y) {\n\t            return x * this.b + y * this.d + this.f;\n\t        };\n\t        matrixproto.get = function (i) {\n\t            return +this[Str.fromCharCode(97 + i)].toFixed(4);\n\t        };\n\t        matrixproto.toString = function () {\n\t            return R.svg ?\n\t                \"matrix(\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + \")\" :\n\t                [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join();\n\t        };\n\t        matrixproto.toFilter = function () {\n\t            return \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + this.get(0) +\n\t                \", M12=\" + this.get(2) + \", M21=\" + this.get(1) + \", M22=\" + this.get(3) +\n\t                \", Dx=\" + this.get(4) + \", Dy=\" + this.get(5) + \", sizingmethod='auto expand')\";\n\t        };\n\t        matrixproto.offset = function () {\n\t            return [this.e.toFixed(4), this.f.toFixed(4)];\n\t        };\n\t        function norm(a) {\n\t            return a[0] * a[0] + a[1] * a[1];\n\t        }\n\t        function normalize(a) {\n\t            var mag = math.sqrt(norm(a));\n\t            a[0] && (a[0] /= mag);\n\t            a[1] && (a[1] /= mag);\n\t        }\n\t        /*\\\n\t         * Matrix.split\n\t         [ method ]\n\t         **\n\t         * Splits matrix into primitive transformations\n\t         = (object) in format:\n\t         o dx (number) translation by x\n\t         o dy (number) translation by y\n\t         o scalex (number) scale by x\n\t         o scaley (number) scale by y\n\t         o shear (number) shear\n\t         o rotate (number) rotation in deg\n\t         o isSimple (boolean) could it be represented via simple transformations\n\t        \\*/\n\t        matrixproto.split = function () {\n\t            var out = {};\n\t            // translation\n\t            out.dx = this.e;\n\t            out.dy = this.f;\n\n\t            // scale and shear\n\t            var row = [[this.a, this.c], [this.b, this.d]];\n\t            out.scalex = math.sqrt(norm(row[0]));\n\t            normalize(row[0]);\n\n\t            out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1];\n\t            row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear];\n\n\t            out.scaley = math.sqrt(norm(row[1]));\n\t            normalize(row[1]);\n\t            out.shear /= out.scaley;\n\n\t            // rotation\n\t            var sin = -row[0][1],\n\t                cos = row[1][1];\n\t            if (cos < 0) {\n\t                out.rotate = R.deg(math.acos(cos));\n\t                if (sin < 0) {\n\t                    out.rotate = 360 - out.rotate;\n\t                }\n\t            } else {\n\t                out.rotate = R.deg(math.asin(sin));\n\t            }\n\n\t            out.isSimple = !+out.shear.toFixed(9) && (out.scalex.toFixed(9) == out.scaley.toFixed(9) || !out.rotate);\n\t            out.isSuperSimple = !+out.shear.toFixed(9) && out.scalex.toFixed(9) == out.scaley.toFixed(9) && !out.rotate;\n\t            out.noRotation = !+out.shear.toFixed(9) && !out.rotate;\n\t            return out;\n\t        };\n\t        /*\\\n\t         * Matrix.toTransformString\n\t         [ method ]\n\t         **\n\t         * Return transform string that represents given matrix\n\t         = (string) transform string\n\t        \\*/\n\t        matrixproto.toTransformString = function (shorter) {\n\t            var s = shorter || this[split]();\n\t            if (s.isSimple) {\n\t                s.scalex = +s.scalex.toFixed(4);\n\t                s.scaley = +s.scaley.toFixed(4);\n\t                s.rotate = +s.rotate.toFixed(4);\n\t                return  (s.dx || s.dy ? \"t\" + [s.dx, s.dy] : E) +\n\t                        (s.scalex != 1 || s.scaley != 1 ? \"s\" + [s.scalex, s.scaley, 0, 0] : E) +\n\t                        (s.rotate ? \"r\" + [s.rotate, 0, 0] : E);\n\t            } else {\n\t                return \"m\" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)];\n\t            }\n\t        };\n\t    })(Matrix.prototype);\n\n\t    var preventDefault = function () {\n\t        this.returnValue = false;\n\t    },\n\t    preventTouch = function () {\n\t        return this.originalEvent.preventDefault();\n\t    },\n\t    stopPropagation = function () {\n\t        this.cancelBubble = true;\n\t    },\n\t    stopTouch = function () {\n\t        return this.originalEvent.stopPropagation();\n\t    },\n\t    getEventPosition = function (e) {\n\t        var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;\n\n\t        return {\n\t            x: e.clientX + scrollX,\n\t            y: e.clientY + scrollY\n\t        };\n\t    },\n\t    addEvent = (function () {\n\t        if (g.doc.addEventListener) {\n\t            return function (obj, type, fn, element) {\n\t                var f = function (e) {\n\t                    var pos = getEventPosition(e);\n\t                    return fn.call(element, e, pos.x, pos.y);\n\t                };\n\t                obj.addEventListener(type, f, false);\n\n\t                if (supportsTouch && touchMap[type]) {\n\t                    var _f = function (e) {\n\t                        var pos = getEventPosition(e),\n\t                            olde = e;\n\n\t                        for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {\n\t                            if (e.targetTouches[i].target == obj) {\n\t                                e = e.targetTouches[i];\n\t                                e.originalEvent = olde;\n\t                                e.preventDefault = preventTouch;\n\t                                e.stopPropagation = stopTouch;\n\t                                break;\n\t                            }\n\t                        }\n\n\t                        return fn.call(element, e, pos.x, pos.y);\n\t                    };\n\t                    obj.addEventListener(touchMap[type], _f, false);\n\t                }\n\n\t                return function () {\n\t                    obj.removeEventListener(type, f, false);\n\n\t                    if (supportsTouch && touchMap[type])\n\t                        obj.removeEventListener(touchMap[type], _f, false);\n\n\t                    return true;\n\t                };\n\t            };\n\t        } else if (g.doc.attachEvent) {\n\t            return function (obj, type, fn, element) {\n\t                var f = function (e) {\n\t                    e = e || g.win.event;\n\t                    var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t                        scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\n\t                        x = e.clientX + scrollX,\n\t                        y = e.clientY + scrollY;\n\t                    e.preventDefault = e.preventDefault || preventDefault;\n\t                    e.stopPropagation = e.stopPropagation || stopPropagation;\n\t                    return fn.call(element, e, x, y);\n\t                };\n\t                obj.attachEvent(\"on\" + type, f);\n\t                var detacher = function () {\n\t                    obj.detachEvent(\"on\" + type, f);\n\t                    return true;\n\t                };\n\t                return detacher;\n\t            };\n\t        }\n\t    })(),\n\t    drag = [],\n\t    dragMove = function (e) {\n\t        var x = e.clientX,\n\t            y = e.clientY,\n\t            scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,\n\t            dragi,\n\t            j = drag.length;\n\t        while (j--) {\n\t            dragi = drag[j];\n\t            if (supportsTouch && e.touches) {\n\t                var i = e.touches.length,\n\t                    touch;\n\t                while (i--) {\n\t                    touch = e.touches[i];\n\t                    if (touch.identifier == dragi.el._drag.id) {\n\t                        x = touch.clientX;\n\t                        y = touch.clientY;\n\t                        (e.originalEvent ? e.originalEvent : e).preventDefault();\n\t                        break;\n\t                    }\n\t                }\n\t            } else {\n\t                e.preventDefault();\n\t            }\n\t            var node = dragi.el.node,\n\t                o,\n\t                next = node.nextSibling,\n\t                parent = node.parentNode,\n\t                display = node.style.display;\n\t            g.win.opera && parent.removeChild(node);\n\t            node.style.display = \"none\";\n\t            o = dragi.el.paper.getElementByPoint(x, y);\n\t            node.style.display = display;\n\t            g.win.opera && (next ? parent.insertBefore(node, next) : parent.appendChild(node));\n\t            o && eve(\"raphael.drag.over.\" + dragi.el.id, dragi.el, o);\n\t            x += scrollX;\n\t            y += scrollY;\n\t            eve(\"raphael.drag.move.\" + dragi.el.id, dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);\n\t        }\n\t    },\n\t    dragUp = function (e) {\n\t        R.unmousemove(dragMove).unmouseup(dragUp);\n\t        var i = drag.length,\n\t            dragi;\n\t        while (i--) {\n\t            dragi = drag[i];\n\t            dragi.el._drag = {};\n\t            eve(\"raphael.drag.end.\" + dragi.el.id, dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);\n\t        }\n\t        drag = [];\n\t    },\n\t    /*\\\n\t     * Raphael.el\n\t     [ property (object) ]\n\t     **\n\t     * You can add your own method to elements. This is useful when you want to hack default functionality or\n\t     * want to wrap some common transformation or attributes in one method. In difference to canvas methods,\n\t     * you can redefine element method at any time. Expending element methods wouldnâ€™t affect set.\n\t     > Usage\n\t     | Raphael.el.red = function () {\n\t     |     this.attr({fill: \"#f00\"});\n\t     | };\n\t     | // then use it\n\t     | paper.circle(100, 100, 20).red();\n\t    \\*/\n\t    elproto = R.el = {};\n\t    /*\\\n\t     * Element.click\n\t     [ method ]\n\t     **\n\t     * Adds event handler for click for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unclick\n\t     [ method ]\n\t     **\n\t     * Removes event handler for click for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.dblclick\n\t     [ method ]\n\t     **\n\t     * Adds event handler for double click for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.undblclick\n\t     [ method ]\n\t     **\n\t     * Removes event handler for double click for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mousedown\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mousedown for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmousedown\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mousedown for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mousemove\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mousemove for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmousemove\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mousemove for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mouseout\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mouseout for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmouseout\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mouseout for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mouseover\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mouseover for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmouseover\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mouseover for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.mouseup\n\t     [ method ]\n\t     **\n\t     * Adds event handler for mouseup for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.unmouseup\n\t     [ method ]\n\t     **\n\t     * Removes event handler for mouseup for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchstart\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchstart for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchstart\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchstart for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchmove\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchmove for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchmove\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchmove for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchend\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchend for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchend\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchend for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\n\t    /*\\\n\t     * Element.touchcancel\n\t     [ method ]\n\t     **\n\t     * Adds event handler for touchcancel for the element.\n\t     > Parameters\n\t     - handler (function) handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    /*\\\n\t     * Element.untouchcancel\n\t     [ method ]\n\t     **\n\t     * Removes event handler for touchcancel for the element.\n\t     > Parameters\n\t     - handler (function) #optional handler for the event\n\t     = (object) @Element\n\t    \\*/\n\t    for (var i = events.length; i--;) {\n\t        (function (eventName) {\n\t            R[eventName] = elproto[eventName] = function (fn, scope) {\n\t                if (R.is(fn, \"function\")) {\n\t                    this.events = this.events || [];\n\t                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || g.doc, eventName, fn, scope || this)});\n\t                }\n\t                return this;\n\t            };\n\t            R[\"un\" + eventName] = elproto[\"un\" + eventName] = function (fn) {\n\t                var events = this.events || [],\n\t                    l = events.length;\n\t                while (l--){\n\t                    if (events[l].name == eventName && (R.is(fn, \"undefined\") || events[l].f == fn)) {\n\t                        events[l].unbind();\n\t                        events.splice(l, 1);\n\t                        !events.length && delete this.events;\n\t                    }\n\t                }\n\t                return this;\n\t            };\n\t        })(events[i]);\n\t    }\n\n\t    /*\\\n\t     * Element.data\n\t     [ method ]\n\t     **\n\t     * Adds or retrieves given value associated with given key.\n\t     **\n\t     * See also @Element.removeData\n\t     > Parameters\n\t     - key (string) key to store data\n\t     - value (any) #optional value to store\n\t     = (object) @Element\n\t     * or, if value is not specified:\n\t     = (any) value\n\t     * or, if key and value are not specified:\n\t     = (object) Key/value pairs for all the data associated with the element.\n\t     > Usage\n\t     | for (var i = 0, i < 5, i++) {\n\t     |     paper.circle(10 + 15 * i, 10, 10)\n\t     |          .attr({fill: \"#000\"})\n\t     |          .data(\"i\", i)\n\t     |          .click(function () {\n\t     |             alert(this.data(\"i\"));\n\t     |          });\n\t     | }\n\t    \\*/\n\t    elproto.data = function (key, value) {\n\t        var data = eldata[this.id] = eldata[this.id] || {};\n\t        if (arguments.length == 0) {\n\t            return data;\n\t        }\n\t        if (arguments.length == 1) {\n\t            if (R.is(key, \"object\")) {\n\t                for (var i in key) if (key[has](i)) {\n\t                    this.data(i, key[i]);\n\t                }\n\t                return this;\n\t            }\n\t            eve(\"raphael.data.get.\" + this.id, this, data[key], key);\n\t            return data[key];\n\t        }\n\t        data[key] = value;\n\t        eve(\"raphael.data.set.\" + this.id, this, value, key);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.removeData\n\t     [ method ]\n\t     **\n\t     * Removes value associated with an element by given key.\n\t     * If key is not provided, removes all the data of the element.\n\t     > Parameters\n\t     - key (string) #optional key\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.removeData = function (key) {\n\t        if (key == null) {\n\t            eldata[this.id] = {};\n\t        } else {\n\t            eldata[this.id] && delete eldata[this.id][key];\n\t        }\n\t        return this;\n\t    };\n\t     /*\\\n\t     * Element.getData\n\t     [ method ]\n\t     **\n\t     * Retrieves the element data\n\t     = (object) data\n\t    \\*/\n\t    elproto.getData = function () {\n\t        return clone(eldata[this.id] || {});\n\t    };\n\t    /*\\\n\t     * Element.hover\n\t     [ method ]\n\t     **\n\t     * Adds event handlers for hover for the element.\n\t     > Parameters\n\t     - f_in (function) handler for hover in\n\t     - f_out (function) handler for hover out\n\t     - icontext (object) #optional context for hover in handler\n\t     - ocontext (object) #optional context for hover out handler\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.hover = function (f_in, f_out, scope_in, scope_out) {\n\t        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);\n\t    };\n\t    /*\\\n\t     * Element.unhover\n\t     [ method ]\n\t     **\n\t     * Removes event handlers for hover for the element.\n\t     > Parameters\n\t     - f_in (function) handler for hover in\n\t     - f_out (function) handler for hover out\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.unhover = function (f_in, f_out) {\n\t        return this.unmouseover(f_in).unmouseout(f_out);\n\t    };\n\t    var draggable = [];\n\t    /*\\\n\t     * Element.drag\n\t     [ method ]\n\t     **\n\t     * Adds event handlers for drag of the element.\n\t     > Parameters\n\t     - onmove (function) handler for moving\n\t     - onstart (function) handler for drag start\n\t     - onend (function) handler for drag end\n\t     - mcontext (object) #optional context for moving handler\n\t     - scontext (object) #optional context for drag start handler\n\t     - econtext (object) #optional context for drag end handler\n\t     * Additionally following `drag` events will be triggered: `drag.start.<id>` on start,\n\t     * `drag.end.<id>` on end and `drag.move.<id>` on every move. When element will be dragged over another element\n\t     * `drag.over.<id>` will be fired as well.\n\t     *\n\t     * Start event and start handler will be called in specified context or in context of the element with following parameters:\n\t     o x (number) x position of the mouse\n\t     o y (number) y position of the mouse\n\t     o event (object) DOM event object\n\t     * Move event and move handler will be called in specified context or in context of the element with following parameters:\n\t     o dx (number) shift by x from the start point\n\t     o dy (number) shift by y from the start point\n\t     o x (number) x position of the mouse\n\t     o y (number) y position of the mouse\n\t     o event (object) DOM event object\n\t     * End event and end handler will be called in specified context or in context of the element with following parameters:\n\t     o event (object) DOM event object\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {\n\t        function start(e) {\n\t            (e.originalEvent || e).preventDefault();\n\t            var x = e.clientX,\n\t                y = e.clientY,\n\t                scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,\n\t                scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;\n\t            this._drag.id = e.identifier;\n\t            if (supportsTouch && e.touches) {\n\t                var i = e.touches.length, touch;\n\t                while (i--) {\n\t                    touch = e.touches[i];\n\t                    this._drag.id = touch.identifier;\n\t                    if (touch.identifier == this._drag.id) {\n\t                        x = touch.clientX;\n\t                        y = touch.clientY;\n\t                        break;\n\t                    }\n\t                }\n\t            }\n\t            this._drag.x = x + scrollX;\n\t            this._drag.y = y + scrollY;\n\t            !drag.length && R.mousemove(dragMove).mouseup(dragUp);\n\t            drag.push({el: this, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});\n\t            onstart && eve.on(\"raphael.drag.start.\" + this.id, onstart);\n\t            onmove && eve.on(\"raphael.drag.move.\" + this.id, onmove);\n\t            onend && eve.on(\"raphael.drag.end.\" + this.id, onend);\n\t            eve(\"raphael.drag.start.\" + this.id, start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);\n\t        }\n\t        this._drag = {};\n\t        draggable.push({el: this, start: start});\n\t        this.mousedown(start);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.onDragOver\n\t     [ method ]\n\t     **\n\t     * Shortcut for assigning event handler for `drag.over.<id>` event, where id is id of the element (see @Element.id).\n\t     > Parameters\n\t     - f (function) handler for event, first argument would be the element you are dragging over\n\t    \\*/\n\t    elproto.onDragOver = function (f) {\n\t        f ? eve.on(\"raphael.drag.over.\" + this.id, f) : eve.unbind(\"raphael.drag.over.\" + this.id);\n\t    };\n\t    /*\\\n\t     * Element.undrag\n\t     [ method ]\n\t     **\n\t     * Removes all drag event handlers from given element.\n\t    \\*/\n\t    elproto.undrag = function () {\n\t        var i = draggable.length;\n\t        while (i--) if (draggable[i].el == this) {\n\t            this.unmousedown(draggable[i].start);\n\t            draggable.splice(i, 1);\n\t            eve.unbind(\"raphael.drag.*.\" + this.id);\n\t        }\n\t        !draggable.length && R.unmousemove(dragMove).unmouseup(dragUp);\n\t        drag = [];\n\t    };\n\t    /*\\\n\t     * Paper.circle\n\t     [ method ]\n\t     **\n\t     * Draws a circle.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the centre\n\t     - y (number) y coordinate of the centre\n\t     - r (number) radius\n\t     = (object) RaphaÃ«l element object with type â€œcircleâ€\n\t     **\n\t     > Usage\n\t     | var c = paper.circle(50, 50, 40);\n\t    \\*/\n\t    paperproto.circle = function (x, y, r) {\n\t        var out = R._engine.circle(this, x || 0, y || 0, r || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.rect\n\t     [ method ]\n\t     *\n\t     * Draws a rectangle.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the top left corner\n\t     - y (number) y coordinate of the top left corner\n\t     - width (number) width\n\t     - height (number) height\n\t     - r (number) #optional radius for rounded corners, default is 0\n\t     = (object) RaphaÃ«l element object with type â€œrectâ€\n\t     **\n\t     > Usage\n\t     | // regular rectangle\n\t     | var c = paper.rect(10, 10, 50, 50);\n\t     | // rectangle with rounded corners\n\t     | var c = paper.rect(40, 40, 50, 50, 10);\n\t    \\*/\n\t    paperproto.rect = function (x, y, w, h, r) {\n\t        var out = R._engine.rect(this, x || 0, y || 0, w || 0, h || 0, r || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.ellipse\n\t     [ method ]\n\t     **\n\t     * Draws an ellipse.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the centre\n\t     - y (number) y coordinate of the centre\n\t     - rx (number) horizontal radius\n\t     - ry (number) vertical radius\n\t     = (object) RaphaÃ«l element object with type â€œellipseâ€\n\t     **\n\t     > Usage\n\t     | var c = paper.ellipse(50, 50, 40, 20);\n\t    \\*/\n\t    paperproto.ellipse = function (x, y, rx, ry) {\n\t        var out = R._engine.ellipse(this, x || 0, y || 0, rx || 0, ry || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.path\n\t     [ method ]\n\t     **\n\t     * Creates a path element by given path data string.\n\t     > Parameters\n\t     - pathString (string) #optional path string in SVG format.\n\t     * Path string consists of one-letter commands, followed by comma seprarated arguments in numercal form. Example:\n\t     | \"M10,20L30,40\"\n\t     * Here we can see two commands: â€œMâ€, with arguments `(10, 20)` and â€œLâ€ with arguments `(30, 40)`. Upper case letter mean command is absolute, lower caseâ€”relative.\n\t     *\n\t     # <p>Here is short list of commands available, for more details see <a href=\"http://www.w3.org/TR/SVG/paths.html#PathData\" title=\"Details of a path's data attribute's format are described in the SVG specification.\">SVG path string format</a>.</p>\n\t     # <table><thead><tr><th>Command</th><th>Name</th><th>Parameters</th></tr></thead><tbody>\n\t     # <tr><td>M</td><td>moveto</td><td>(x y)+</td></tr>\n\t     # <tr><td>Z</td><td>closepath</td><td>(none)</td></tr>\n\t     # <tr><td>L</td><td>lineto</td><td>(x y)+</td></tr>\n\t     # <tr><td>H</td><td>horizontal lineto</td><td>x+</td></tr>\n\t     # <tr><td>V</td><td>vertical lineto</td><td>y+</td></tr>\n\t     # <tr><td>C</td><td>curveto</td><td>(x1 y1 x2 y2 x y)+</td></tr>\n\t     # <tr><td>S</td><td>smooth curveto</td><td>(x2 y2 x y)+</td></tr>\n\t     # <tr><td>Q</td><td>quadratic BÃ©zier curveto</td><td>(x1 y1 x y)+</td></tr>\n\t     # <tr><td>T</td><td>smooth quadratic BÃ©zier curveto</td><td>(x y)+</td></tr>\n\t     # <tr><td>A</td><td>elliptical arc</td><td>(rx ry x-axis-rotation large-arc-flag sweep-flag x y)+</td></tr>\n\t     # <tr><td>R</td><td><a href=\"http://en.wikipedia.org/wiki/Catmullâ€“Rom_spline#Catmull.E2.80.93Rom_spline\">Catmull-Rom curveto</a>*</td><td>x1 y1 (x y)+</td></tr></tbody></table>\n\t     * * â€œCatmull-Rom curvetoâ€ is a not standard SVG command and added in 2.0 to make life easier.\n\t     * Note: there is a special case when path consist of just three commands: â€œM10,10Râ€¦zâ€. In this case path will smoothly connects to its beginning.\n\t     > Usage\n\t     | var c = paper.path(\"M10 10L90 90\");\n\t     | // draw a diagonal line:\n\t     | // move to 10,10, line to 90,90\n\t     * For example of path strings, check out these icons: http://raphaeljs.com/icons/\n\t    \\*/\n\t    paperproto.path = function (pathString) {\n\t        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);\n\t        var out = R._engine.path(R.format[apply](R, arguments), this);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.image\n\t     [ method ]\n\t     **\n\t     * Embeds an image into the surface.\n\t     **\n\t     > Parameters\n\t     **\n\t     - src (string) URI of the source image\n\t     - x (number) x coordinate position\n\t     - y (number) y coordinate position\n\t     - width (number) width of the image\n\t     - height (number) height of the image\n\t     = (object) RaphaÃ«l element object with type â€œimageâ€\n\t     **\n\t     > Usage\n\t     | var c = paper.image(\"apple.png\", 10, 10, 80, 80);\n\t    \\*/\n\t    paperproto.image = function (src, x, y, w, h) {\n\t        var out = R._engine.image(this, src || \"about:blank\", x || 0, y || 0, w || 0, h || 0);\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.text\n\t     [ method ]\n\t     **\n\t     * Draws a text string. If you need line breaks, put â€œ\\nâ€ in the string.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate position\n\t     - y (number) y coordinate position\n\t     - text (string) The text string to draw\n\t     = (object) RaphaÃ«l element object with type â€œtextâ€\n\t     **\n\t     > Usage\n\t     | var t = paper.text(50, 50, \"RaphaÃ«l\\nkicks\\nbutt!\");\n\t    \\*/\n\t    paperproto.text = function (x, y, text) {\n\t        var out = R._engine.text(this, x || 0, y || 0, Str(text));\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.set\n\t     [ method ]\n\t     **\n\t     * Creates array-like object to keep and operate several elements at once.\n\t     * Warning: it doesnâ€™t create any elements for itself in the page, it just groups existing elements.\n\t     * Sets act as pseudo elements â€” all methods available to an element can be used on a set.\n\t     = (object) array-like object that represents set of elements\n\t     **\n\t     > Usage\n\t     | var st = paper.set();\n\t     | st.push(\n\t     |     paper.circle(10, 10, 5),\n\t     |     paper.circle(30, 10, 5)\n\t     | );\n\t     | st.attr({fill: \"red\"}); // changes the fill of both circles\n\t    \\*/\n\t    paperproto.set = function (itemsArray) {\n\t        !R.is(itemsArray, \"array\") && (itemsArray = Array.prototype.splice.call(arguments, 0, arguments.length));\n\t        var out = new Set(itemsArray);\n\t        this.__set__ && this.__set__.push(out);\n\t        out[\"paper\"] = this;\n\t        out[\"type\"] = \"set\";\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.setStart\n\t     [ method ]\n\t     **\n\t     * Creates @Paper.set. All elements that will be created after calling this method and before calling\n\t     * @Paper.setFinish will be added to the set.\n\t     **\n\t     > Usage\n\t     | paper.setStart();\n\t     | paper.circle(10, 10, 5),\n\t     | paper.circle(30, 10, 5)\n\t     | var st = paper.setFinish();\n\t     | st.attr({fill: \"red\"}); // changes the fill of both circles\n\t    \\*/\n\t    paperproto.setStart = function (set) {\n\t        this.__set__ = set || this.set();\n\t    };\n\t    /*\\\n\t     * Paper.setFinish\n\t     [ method ]\n\t     **\n\t     * See @Paper.setStart. This method finishes catching and returns resulting set.\n\t     **\n\t     = (object) set\n\t    \\*/\n\t    paperproto.setFinish = function (set) {\n\t        var out = this.__set__;\n\t        delete this.__set__;\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Paper.getSize\n\t     [ method ]\n\t     **\n\t     * Obtains current paper actual size.\n\t     **\n\t     = (object)\n\t     \\*/\n\t    paperproto.getSize = function () {\n\t        var container = this.canvas.parentNode;\n\t        return {\n\t            width: container.offsetWidth,\n\t            height: container.offsetHeight\n\t                };\n\t        };\n\t    /*\\\n\t     * Paper.setSize\n\t     [ method ]\n\t     **\n\t     * If you need to change dimensions of the canvas call this method\n\t     **\n\t     > Parameters\n\t     **\n\t     - width (number) new width of the canvas\n\t     - height (number) new height of the canvas\n\t    \\*/\n\t    paperproto.setSize = function (width, height) {\n\t        return R._engine.setSize.call(this, width, height);\n\t    };\n\t    /*\\\n\t     * Paper.setViewBox\n\t     [ method ]\n\t     **\n\t     * Sets the view box of the paper. Practically it gives you ability to zoom and pan whole paper surface by\n\t     * specifying new boundaries.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) new x position, default is `0`\n\t     - y (number) new y position, default is `0`\n\t     - w (number) new width of the canvas\n\t     - h (number) new height of the canvas\n\t     - fit (boolean) `true` if you want graphics to fit into new boundary box\n\t    \\*/\n\t    paperproto.setViewBox = function (x, y, w, h, fit) {\n\t        return R._engine.setViewBox.call(this, x, y, w, h, fit);\n\t    };\n\t    /*\\\n\t     * Paper.top\n\t     [ property ]\n\t     **\n\t     * Points to the topmost element on the paper\n\t    \\*/\n\t    /*\\\n\t     * Paper.bottom\n\t     [ property ]\n\t     **\n\t     * Points to the bottom element on the paper\n\t    \\*/\n\t    paperproto.top = paperproto.bottom = null;\n\t    /*\\\n\t     * Paper.raphael\n\t     [ property ]\n\t     **\n\t     * Points to the @Raphael object/function\n\t    \\*/\n\t    paperproto.raphael = R;\n\t    var getOffset = function (elem) {\n\t        var box = elem.getBoundingClientRect(),\n\t            doc = elem.ownerDocument,\n\t            body = doc.body,\n\t            docElem = doc.documentElement,\n\t            clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,\n\t            top  = box.top  + (g.win.pageYOffset || docElem.scrollTop || body.scrollTop ) - clientTop,\n\t            left = box.left + (g.win.pageXOffset || docElem.scrollLeft || body.scrollLeft) - clientLeft;\n\t        return {\n\t            y: top,\n\t            x: left\n\t        };\n\t    };\n\t    /*\\\n\t     * Paper.getElementByPoint\n\t     [ method ]\n\t     **\n\t     * Returns you topmost element under given point.\n\t     **\n\t     = (object) RaphaÃ«l element object\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate from the top left corner of the window\n\t     - y (number) y coordinate from the top left corner of the window\n\t     > Usage\n\t     | paper.getElementByPoint(mouseX, mouseY).attr({stroke: \"#f00\"});\n\t    \\*/\n\t    paperproto.getElementByPoint = function (x, y) {\n\t        var paper = this,\n\t            svg = paper.canvas,\n\t            target = g.doc.elementFromPoint(x, y);\n\t        if (g.win.opera && target.tagName == \"svg\") {\n\t            var so = getOffset(svg),\n\t                sr = svg.createSVGRect();\n\t            sr.x = x - so.x;\n\t            sr.y = y - so.y;\n\t            sr.width = sr.height = 1;\n\t            var hits = svg.getIntersectionList(sr, null);\n\t            if (hits.length) {\n\t                target = hits[hits.length - 1];\n\t            }\n\t        }\n\t        if (!target) {\n\t            return null;\n\t        }\n\t        while (target.parentNode && target != svg.parentNode && !target.raphael) {\n\t            target = target.parentNode;\n\t        }\n\t        target == paper.canvas.parentNode && (target = svg);\n\t        target = target && target.raphael ? paper.getById(target.raphaelid) : null;\n\t        return target;\n\t    };\n\n\t    /*\\\n\t     * Paper.getElementsByBBox\n\t     [ method ]\n\t     **\n\t     * Returns set of elements that have an intersecting bounding box\n\t     **\n\t     > Parameters\n\t     **\n\t     - bbox (object) bbox to check with\n\t     = (object) @Set\n\t     \\*/\n\t    paperproto.getElementsByBBox = function (bbox) {\n\t        var set = this.set();\n\t        this.forEach(function (el) {\n\t            if (R.isBBoxIntersect(el.getBBox(), bbox)) {\n\t                set.push(el);\n\t            }\n\t        });\n\t        return set;\n\t    };\n\n\t    /*\\\n\t     * Paper.getById\n\t     [ method ]\n\t     **\n\t     * Returns you element by its internal ID.\n\t     **\n\t     > Parameters\n\t     **\n\t     - id (number) id\n\t     = (object) RaphaÃ«l element object\n\t    \\*/\n\t    paperproto.getById = function (id) {\n\t        var bot = this.bottom;\n\t        while (bot) {\n\t            if (bot.id == id) {\n\t                return bot;\n\t            }\n\t            bot = bot.next;\n\t        }\n\t        return null;\n\t    };\n\t    /*\\\n\t     * Paper.forEach\n\t     [ method ]\n\t     **\n\t     * Executes given function for each element on the paper\n\t     *\n\t     * If callback function returns `false` it will stop loop running.\n\t     **\n\t     > Parameters\n\t     **\n\t     - callback (function) function to run\n\t     - thisArg (object) context object for the callback\n\t     = (object) Paper object\n\t     > Usage\n\t     | paper.forEach(function (el) {\n\t     |     el.attr({ stroke: \"blue\" });\n\t     | });\n\t    \\*/\n\t    paperproto.forEach = function (callback, thisArg) {\n\t        var bot = this.bottom;\n\t        while (bot) {\n\t            if (callback.call(thisArg, bot) === false) {\n\t                return this;\n\t            }\n\t            bot = bot.next;\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Paper.getElementsByPoint\n\t     [ method ]\n\t     **\n\t     * Returns set of elements that have common point inside\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the point\n\t     - y (number) y coordinate of the point\n\t     = (object) @Set\n\t    \\*/\n\t    paperproto.getElementsByPoint = function (x, y) {\n\t        var set = this.set();\n\t        this.forEach(function (el) {\n\t            if (el.isPointInside(x, y)) {\n\t                set.push(el);\n\t            }\n\t        });\n\t        return set;\n\t    };\n\t    function x_y() {\n\t        return this.x + S + this.y;\n\t    }\n\t    function x_y_w_h() {\n\t        return this.x + S + this.y + S + this.width + \" \\xd7 \" + this.height;\n\t    }\n\t    /*\\\n\t     * Element.isPointInside\n\t     [ method ]\n\t     **\n\t     * Determine if given point is inside this elementâ€™s shape\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the point\n\t     - y (number) y coordinate of the point\n\t     = (boolean) `true` if point inside the shape\n\t    \\*/\n\t    elproto.isPointInside = function (x, y) {\n\t        var rp = this.realPath = getPath[this.type](this);\n\t        if (this.attr('transform') && this.attr('transform').length) {\n\t            rp = R.transformPath(rp, this.attr('transform'));\n\t        }\n\t        return R.isPointInsidePath(rp, x, y);\n\t    };\n\t    /*\\\n\t     * Element.getBBox\n\t     [ method ]\n\t     **\n\t     * Return bounding box for a given element\n\t     **\n\t     > Parameters\n\t     **\n\t     - isWithoutTransform (boolean) flag, `true` if you want to have bounding box before transformations. Default is `false`.\n\t     = (object) Bounding box object:\n\t     o {\n\t     o     x: (number) top left corner x\n\t     o     y: (number) top left corner y\n\t     o     x2: (number) bottom right corner x\n\t     o     y2: (number) bottom right corner y\n\t     o     width: (number) width\n\t     o     height: (number) height\n\t     o }\n\t    \\*/\n\t    elproto.getBBox = function (isWithoutTransform) {\n\t        if (this.removed) {\n\t            return {};\n\t        }\n\t        var _ = this._;\n\t        if (isWithoutTransform) {\n\t            if (_.dirty || !_.bboxwt) {\n\t                this.realPath = getPath[this.type](this);\n\t                _.bboxwt = pathDimensions(this.realPath);\n\t                _.bboxwt.toString = x_y_w_h;\n\t                _.dirty = 0;\n\t            }\n\t            return _.bboxwt;\n\t        }\n\t        if (_.dirty || _.dirtyT || !_.bbox) {\n\t            if (_.dirty || !this.realPath) {\n\t                _.bboxwt = 0;\n\t                this.realPath = getPath[this.type](this);\n\t            }\n\t            _.bbox = pathDimensions(mapPath(this.realPath, this.matrix));\n\t            _.bbox.toString = x_y_w_h;\n\t            _.dirty = _.dirtyT = 0;\n\t        }\n\t        return _.bbox;\n\t    };\n\t    /*\\\n\t     * Element.clone\n\t     [ method ]\n\t     **\n\t     = (object) clone of a given element\n\t     **\n\t    \\*/\n\t    elproto.clone = function () {\n\t        if (this.removed) {\n\t            return null;\n\t        }\n\t        var out = this.paper[this.type]().attr(this.attr());\n\t        this.__set__ && this.__set__.push(out);\n\t        return out;\n\t    };\n\t    /*\\\n\t     * Element.glow\n\t     [ method ]\n\t     **\n\t     * Return set of elements that create glow-like effect around given element. See @Paper.set.\n\t     *\n\t     * Note: Glow is not connected to the element. If you change element attributes it wonâ€™t adjust itself.\n\t     **\n\t     > Parameters\n\t     **\n\t     - glow (object) #optional parameters object with all properties optional:\n\t     o {\n\t     o     width (number) size of the glow, default is `10`\n\t     o     fill (boolean) will it be filled, default is `false`\n\t     o     opacity (number) opacity, default is `0.5`\n\t     o     offsetx (number) horizontal offset, default is `0`\n\t     o     offsety (number) vertical offset, default is `0`\n\t     o     color (string) glow colour, default is `black`\n\t     o }\n\t     = (object) @Paper.set of elements that represents glow\n\t    \\*/\n\t    elproto.glow = function (glow) {\n\t        if (this.type == \"text\") {\n\t            return null;\n\t        }\n\t        glow = glow || {};\n\t        var s = {\n\t            width: (glow.width || 10) + (+this.attr(\"stroke-width\") || 1),\n\t            fill: glow.fill || false,\n\t            opacity: glow.opacity == null ? .5 : glow.opacity,\n\t            offsetx: glow.offsetx || 0,\n\t            offsety: glow.offsety || 0,\n\t            color: glow.color || \"#000\"\n\t        },\n\t            c = s.width / 2,\n\t            r = this.paper,\n\t            out = r.set(),\n\t            path = this.realPath || getPath[this.type](this);\n\t        path = this.matrix ? mapPath(path, this.matrix) : path;\n\t        for (var i = 1; i < c + 1; i++) {\n\t            out.push(r.path(path).attr({\n\t                stroke: s.color,\n\t                fill: s.fill ? s.color : \"none\",\n\t                \"stroke-linejoin\": \"round\",\n\t                \"stroke-linecap\": \"round\",\n\t                \"stroke-width\": +(s.width / c * i).toFixed(3),\n\t                opacity: +(s.opacity / c).toFixed(3)\n\t            }));\n\t        }\n\t        return out.insertBefore(this).translate(s.offsetx, s.offsety);\n\t    };\n\t    var curveslengths = {},\n\t    getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {\n\t        if (length == null) {\n\t            return bezlen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);\n\t        } else {\n\t            return R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, getTatLen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length));\n\t        }\n\t    },\n\t    getLengthFactory = function (istotal, subpath) {\n\t        return function (path, length, onlystart) {\n\t            path = path2curve(path);\n\t            var x, y, p, l, sp = \"\", subpaths = {}, point,\n\t                len = 0;\n\t            for (var i = 0, ii = path.length; i < ii; i++) {\n\t                p = path[i];\n\t                if (p[0] == \"M\") {\n\t                    x = +p[1];\n\t                    y = +p[2];\n\t                } else {\n\t                    l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);\n\t                    if (len + l > length) {\n\t                        if (subpath && !subpaths.start) {\n\t                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n\t                            sp += [\"C\" + point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];\n\t                            if (onlystart) {return sp;}\n\t                            subpaths.start = sp;\n\t                            sp = [\"M\" + point.x, point.y + \"C\" + point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]].join();\n\t                            len += l;\n\t                            x = +p[5];\n\t                            y = +p[6];\n\t                            continue;\n\t                        }\n\t                        if (!istotal && !subpath) {\n\t                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);\n\t                            return {x: point.x, y: point.y, alpha: point.alpha};\n\t                        }\n\t                    }\n\t                    len += l;\n\t                    x = +p[5];\n\t                    y = +p[6];\n\t                }\n\t                sp += p.shift() + p;\n\t            }\n\t            subpaths.end = sp;\n\t            point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1);\n\t            point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});\n\t            return point;\n\t        };\n\t    };\n\t    var getTotalLength = getLengthFactory(1),\n\t        getPointAtLength = getLengthFactory(),\n\t        getSubpathsAtLength = getLengthFactory(0, 1);\n\t    /*\\\n\t     * Raphael.getTotalLength\n\t     [ method ]\n\t     **\n\t     * Returns length of the given path in pixels.\n\t     **\n\t     > Parameters\n\t     **\n\t     - path (string) SVG path string.\n\t     **\n\t     = (number) length.\n\t    \\*/\n\t    R.getTotalLength = getTotalLength;\n\t    /*\\\n\t     * Raphael.getPointAtLength\n\t     [ method ]\n\t     **\n\t     * Return coordinates of the point located at the given length on the given path.\n\t     **\n\t     > Parameters\n\t     **\n\t     - path (string) SVG path string\n\t     - length (number)\n\t     **\n\t     = (object) representation of the point:\n\t     o {\n\t     o     x: (number) x coordinate\n\t     o     y: (number) y coordinate\n\t     o     alpha: (number) angle of derivative\n\t     o }\n\t    \\*/\n\t    R.getPointAtLength = getPointAtLength;\n\t    /*\\\n\t     * Raphael.getSubpath\n\t     [ method ]\n\t     **\n\t     * Return subpath of a given path from given length to given length.\n\t     **\n\t     > Parameters\n\t     **\n\t     - path (string) SVG path string\n\t     - from (number) position of the start of the segment\n\t     - to (number) position of the end of the segment\n\t     **\n\t     = (string) pathstring for the segment\n\t    \\*/\n\t    R.getSubpath = function (path, from, to) {\n\t        if (this.getTotalLength(path) - to < 1e-6) {\n\t            return getSubpathsAtLength(path, from).end;\n\t        }\n\t        var a = getSubpathsAtLength(path, to, 1);\n\t        return from ? getSubpathsAtLength(a, from).end : a;\n\t    };\n\t    /*\\\n\t     * Element.getTotalLength\n\t     [ method ]\n\t     **\n\t     * Returns length of the path in pixels. Only works for element of â€œpathâ€ type.\n\t     = (number) length.\n\t    \\*/\n\t    elproto.getTotalLength = function () {\n\t        var path = this.getPath();\n\t        if (!path) {\n\t            return;\n\t        }\n\n\t        if (this.node.getTotalLength) {\n\t            return this.node.getTotalLength();\n\t        }\n\n\t        return getTotalLength(path);\n\t    };\n\t    /*\\\n\t     * Element.getPointAtLength\n\t     [ method ]\n\t     **\n\t     * Return coordinates of the point located at the given length on the given path. Only works for element of â€œpathâ€ type.\n\t     **\n\t     > Parameters\n\t     **\n\t     - length (number)\n\t     **\n\t     = (object) representation of the point:\n\t     o {\n\t     o     x: (number) x coordinate\n\t     o     y: (number) y coordinate\n\t     o     alpha: (number) angle of derivative\n\t     o }\n\t    \\*/\n\t    elproto.getPointAtLength = function (length) {\n\t        var path = this.getPath();\n\t        if (!path) {\n\t            return;\n\t        }\n\n\t        return getPointAtLength(path, length);\n\t    };\n\t    /*\\\n\t     * Element.getPath\n\t     [ method ]\n\t     **\n\t     * Returns path of the element. Only works for elements of â€œpathâ€ type and simple elements like circle.\n\t     = (object) path\n\t     **\n\t    \\*/\n\t    elproto.getPath = function () {\n\t        var path,\n\t            getPath = R._getPath[this.type];\n\n\t        if (this.type == \"text\" || this.type == \"set\") {\n\t            return;\n\t        }\n\n\t        if (getPath) {\n\t            path = getPath(this);\n\t        }\n\n\t        return path;\n\t    };\n\t    /*\\\n\t     * Element.getSubpath\n\t     [ method ]\n\t     **\n\t     * Return subpath of a given element from given length to given length. Only works for element of â€œpathâ€ type.\n\t     **\n\t     > Parameters\n\t     **\n\t     - from (number) position of the start of the segment\n\t     - to (number) position of the end of the segment\n\t     **\n\t     = (string) pathstring for the segment\n\t    \\*/\n\t    elproto.getSubpath = function (from, to) {\n\t        var path = this.getPath();\n\t        if (!path) {\n\t            return;\n\t        }\n\n\t        return R.getSubpath(path, from, to);\n\t    };\n\t    /*\\\n\t     * Raphael.easing_formulas\n\t     [ property ]\n\t     **\n\t     * Object that contains easing formulas for animation. You could extend it with your own. By default it has following list of easing:\n\t     # <ul>\n\t     #     <li>â€œlinearâ€</li>\n\t     #     <li>â€œ&lt;â€ or â€œeaseInâ€ or â€œease-inâ€</li>\n\t     #     <li>â€œ>â€ or â€œeaseOutâ€ or â€œease-outâ€</li>\n\t     #     <li>â€œ&lt;>â€ or â€œeaseInOutâ€ or â€œease-in-outâ€</li>\n\t     #     <li>â€œbackInâ€ or â€œback-inâ€</li>\n\t     #     <li>â€œbackOutâ€ or â€œback-outâ€</li>\n\t     #     <li>â€œelasticâ€</li>\n\t     #     <li>â€œbounceâ€</li>\n\t     # </ul>\n\t     # <p>See also <a href=\"http://raphaeljs.com/easing.html\">Easing demo</a>.</p>\n\t    \\*/\n\t    var ef = R.easing_formulas = {\n\t        linear: function (n) {\n\t            return n;\n\t        },\n\t        \"<\": function (n) {\n\t            return pow(n, 1.7);\n\t        },\n\t        \">\": function (n) {\n\t            return pow(n, .48);\n\t        },\n\t        \"<>\": function (n) {\n\t            var q = .48 - n / 1.04,\n\t                Q = math.sqrt(.1734 + q * q),\n\t                x = Q - q,\n\t                X = pow(abs(x), 1 / 3) * (x < 0 ? -1 : 1),\n\t                y = -Q - q,\n\t                Y = pow(abs(y), 1 / 3) * (y < 0 ? -1 : 1),\n\t                t = X + Y + .5;\n\t            return (1 - t) * 3 * t * t + t * t * t;\n\t        },\n\t        backIn: function (n) {\n\t            var s = 1.70158;\n\t            return n * n * ((s + 1) * n - s);\n\t        },\n\t        backOut: function (n) {\n\t            n = n - 1;\n\t            var s = 1.70158;\n\t            return n * n * ((s + 1) * n + s) + 1;\n\t        },\n\t        elastic: function (n) {\n\t            if (n == !!n) {\n\t                return n;\n\t            }\n\t            return pow(2, -10 * n) * math.sin((n - .075) * (2 * PI) / .3) + 1;\n\t        },\n\t        bounce: function (n) {\n\t            var s = 7.5625,\n\t                p = 2.75,\n\t                l;\n\t            if (n < (1 / p)) {\n\t                l = s * n * n;\n\t            } else {\n\t                if (n < (2 / p)) {\n\t                    n -= (1.5 / p);\n\t                    l = s * n * n + .75;\n\t                } else {\n\t                    if (n < (2.5 / p)) {\n\t                        n -= (2.25 / p);\n\t                        l = s * n * n + .9375;\n\t                    } else {\n\t                        n -= (2.625 / p);\n\t                        l = s * n * n + .984375;\n\t                    }\n\t                }\n\t            }\n\t            return l;\n\t        }\n\t    };\n\t    ef.easeIn = ef[\"ease-in\"] = ef[\"<\"];\n\t    ef.easeOut = ef[\"ease-out\"] = ef[\">\"];\n\t    ef.easeInOut = ef[\"ease-in-out\"] = ef[\"<>\"];\n\t    ef[\"back-in\"] = ef.backIn;\n\t    ef[\"back-out\"] = ef.backOut;\n\n\t    var animationElements = [],\n\t        requestAnimFrame = window.requestAnimationFrame       ||\n\t                           window.webkitRequestAnimationFrame ||\n\t                           window.mozRequestAnimationFrame    ||\n\t                           window.oRequestAnimationFrame      ||\n\t                           window.msRequestAnimationFrame     ||\n\t                           function (callback) {\n\t                               setTimeout(callback, 16);\n\t                           },\n\t        animation = function () {\n\t            var Now = +new Date,\n\t                l = 0;\n\t            for (; l < animationElements.length; l++) {\n\t                var e = animationElements[l];\n\t                if (e.el.removed || e.paused) {\n\t                    continue;\n\t                }\n\t                var time = Now - e.start,\n\t                    ms = e.ms,\n\t                    easing = e.easing,\n\t                    from = e.from,\n\t                    diff = e.diff,\n\t                    to = e.to,\n\t                    t = e.t,\n\t                    that = e.el,\n\t                    set = {},\n\t                    now,\n\t                    init = {},\n\t                    key;\n\t                if (e.initstatus) {\n\t                    time = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * ms;\n\t                    e.status = e.initstatus;\n\t                    delete e.initstatus;\n\t                    e.stop && animationElements.splice(l--, 1);\n\t                } else {\n\t                    e.status = (e.prev + (e.percent - e.prev) * (time / ms)) / e.anim.top;\n\t                }\n\t                if (time < 0) {\n\t                    continue;\n\t                }\n\t                if (time < ms) {\n\t                    var pos = easing(time / ms);\n\t                    for (var attr in from) if (from[has](attr)) {\n\t                        switch (availableAnimAttrs[attr]) {\n\t                            case nu:\n\t                                now = +from[attr] + pos * ms * diff[attr];\n\t                                break;\n\t                            case \"colour\":\n\t                                now = \"rgb(\" + [\n\t                                    upto255(round(from[attr].r + pos * ms * diff[attr].r)),\n\t                                    upto255(round(from[attr].g + pos * ms * diff[attr].g)),\n\t                                    upto255(round(from[attr].b + pos * ms * diff[attr].b))\n\t                                ].join(\",\") + \")\";\n\t                                break;\n\t                            case \"path\":\n\t                                now = [];\n\t                                for (var i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                    now[i] = [from[attr][i][0]];\n\t                                    for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];\n\t                                    }\n\t                                    now[i] = now[i].join(S);\n\t                                }\n\t                                now = now.join(S);\n\t                                break;\n\t                            case \"transform\":\n\t                                if (diff[attr].real) {\n\t                                    now = [];\n\t                                    for (i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                        now[i] = [from[attr][i][0]];\n\t                                        for (j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                            now[i][j] = from[attr][i][j] + pos * ms * diff[attr][i][j];\n\t                                        }\n\t                                    }\n\t                                } else {\n\t                                    var get = function (i) {\n\t                                        return +from[attr][i] + pos * ms * diff[attr][i];\n\t                                    };\n\t                                    // now = [[\"r\", get(2), 0, 0], [\"t\", get(3), get(4)], [\"s\", get(0), get(1), 0, 0]];\n\t                                    now = [[\"m\", get(0), get(1), get(2), get(3), get(4), get(5)]];\n\t                                }\n\t                                break;\n\t                            case \"csv\":\n\t                                if (attr == \"clip-rect\") {\n\t                                    now = [];\n\t                                    i = 4;\n\t                                    while (i--) {\n\t                                        now[i] = +from[attr][i] + pos * ms * diff[attr][i];\n\t                                    }\n\t                                }\n\t                                break;\n\t                            default:\n\t                                var from2 = [][concat](from[attr]);\n\t                                now = [];\n\t                                i = that.paper.customAttributes[attr].length;\n\t                                while (i--) {\n\t                                    now[i] = +from2[i] + pos * ms * diff[attr][i];\n\t                                }\n\t                                break;\n\t                        }\n\t                        set[attr] = now;\n\t                    }\n\t                    that.attr(set);\n\t                    (function (id, that, anim) {\n\t                        setTimeout(function () {\n\t                            eve(\"raphael.anim.frame.\" + id, that, anim);\n\t                        });\n\t                    })(that.id, that, e.anim);\n\t                } else {\n\t                    (function(f, el, a) {\n\t                        setTimeout(function() {\n\t                            eve(\"raphael.anim.frame.\" + el.id, el, a);\n\t                            eve(\"raphael.anim.finish.\" + el.id, el, a);\n\t                            R.is(f, \"function\") && f.call(el);\n\t                        });\n\t                    })(e.callback, that, e.anim);\n\t                    that.attr(to);\n\t                    animationElements.splice(l--, 1);\n\t                    if (e.repeat > 1 && !e.next) {\n\t                        for (key in to) if (to[has](key)) {\n\t                            init[key] = e.totalOrigin[key];\n\t                        }\n\t                        e.el.attr(init);\n\t                        runAnimation(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1);\n\t                    }\n\t                    if (e.next && !e.stop) {\n\t                        runAnimation(e.anim, e.el, e.next, null, e.totalOrigin, e.repeat);\n\t                    }\n\t                }\n\t            }\n\t            animationElements.length && requestAnimFrame(animation);\n\t        },\n\t        upto255 = function (color) {\n\t            return color > 255 ? 255 : color < 0 ? 0 : color;\n\t        };\n\t    /*\\\n\t     * Element.animateWith\n\t     [ method ]\n\t     **\n\t     * Acts similar to @Element.animate, but ensure that given animation runs in sync with another given element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - el (object) element to sync with\n\t     - anim (object) animation to sync with\n\t     - params (object) #optional final attributes for the element, see also @Element.attr\n\t     - ms (number) #optional number of milliseconds for animation to run\n\t     - easing (string) #optional easing type. Accept on of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\n\t     - callback (function) #optional callback function. Will be called at the end of animation.\n\t     * or\n\t     - element (object) element to sync with\n\t     - anim (object) animation to sync with\n\t     - animation (object) #optional animation object, see @Raphael.animation\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.animateWith = function (el, anim, params, ms, easing, callback) {\n\t        var element = this;\n\t        if (element.removed) {\n\t            callback && callback.call(element);\n\t            return element;\n\t        }\n\t        var a = params instanceof Animation ? params : R.animation(params, ms, easing, callback),\n\t            x, y;\n\t        runAnimation(a, element, a.percents[0], null, element.attr());\n\t        for (var i = 0, ii = animationElements.length; i < ii; i++) {\n\t            if (animationElements[i].anim == anim && animationElements[i].el == el) {\n\t                animationElements[ii - 1].start = animationElements[i].start;\n\t                break;\n\t            }\n\t        }\n\t        return element;\n\t        //\n\t        //\n\t        // var a = params ? R.animation(params, ms, easing, callback) : anim,\n\t        //     status = element.status(anim);\n\t        // return this.animate(a).status(a, status * anim.ms / a.ms);\n\t    };\n\t    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {\n\t        var cx = 3 * p1x,\n\t            bx = 3 * (p2x - p1x) - cx,\n\t            ax = 1 - cx - bx,\n\t            cy = 3 * p1y,\n\t            by = 3 * (p2y - p1y) - cy,\n\t            ay = 1 - cy - by;\n\t        function sampleCurveX(t) {\n\t            return ((ax * t + bx) * t + cx) * t;\n\t        }\n\t        function solve(x, epsilon) {\n\t            var t = solveCurveX(x, epsilon);\n\t            return ((ay * t + by) * t + cy) * t;\n\t        }\n\t        function solveCurveX(x, epsilon) {\n\t            var t0, t1, t2, x2, d2, i;\n\t            for(t2 = x, i = 0; i < 8; i++) {\n\t                x2 = sampleCurveX(t2) - x;\n\t                if (abs(x2) < epsilon) {\n\t                    return t2;\n\t                }\n\t                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;\n\t                if (abs(d2) < 1e-6) {\n\t                    break;\n\t                }\n\t                t2 = t2 - x2 / d2;\n\t            }\n\t            t0 = 0;\n\t            t1 = 1;\n\t            t2 = x;\n\t            if (t2 < t0) {\n\t                return t0;\n\t            }\n\t            if (t2 > t1) {\n\t                return t1;\n\t            }\n\t            while (t0 < t1) {\n\t                x2 = sampleCurveX(t2);\n\t                if (abs(x2 - x) < epsilon) {\n\t                    return t2;\n\t                }\n\t                if (x > x2) {\n\t                    t0 = t2;\n\t                } else {\n\t                    t1 = t2;\n\t                }\n\t                t2 = (t1 - t0) / 2 + t0;\n\t            }\n\t            return t2;\n\t        }\n\t        return solve(t, 1 / (200 * duration));\n\t    }\n\t    elproto.onAnimation = function (f) {\n\t        f ? eve.on(\"raphael.anim.frame.\" + this.id, f) : eve.unbind(\"raphael.anim.frame.\" + this.id);\n\t        return this;\n\t    };\n\t    function Animation(anim, ms) {\n\t        var percents = [],\n\t            newAnim = {};\n\t        this.ms = ms;\n\t        this.times = 1;\n\t        if (anim) {\n\t            for (var attr in anim) if (anim[has](attr)) {\n\t                newAnim[toFloat(attr)] = anim[attr];\n\t                percents.push(toFloat(attr));\n\t            }\n\t            percents.sort(sortByNumber);\n\t        }\n\t        this.anim = newAnim;\n\t        this.top = percents[percents.length - 1];\n\t        this.percents = percents;\n\t    }\n\t    /*\\\n\t     * Animation.delay\n\t     [ method ]\n\t     **\n\t     * Creates a copy of existing animation object with given delay.\n\t     **\n\t     > Parameters\n\t     **\n\t     - delay (number) number of ms to pass between animation start and actual animation\n\t     **\n\t     = (object) new altered Animation object\n\t     | var anim = Raphael.animation({cx: 10, cy: 20}, 2e3);\n\t     | circle1.animate(anim); // run the given animation immediately\n\t     | circle2.animate(anim.delay(500)); // run the given animation after 500 ms\n\t    \\*/\n\t    Animation.prototype.delay = function (delay) {\n\t        var a = new Animation(this.anim, this.ms);\n\t        a.times = this.times;\n\t        a.del = +delay || 0;\n\t        return a;\n\t    };\n\t    /*\\\n\t     * Animation.repeat\n\t     [ method ]\n\t     **\n\t     * Creates a copy of existing animation object with given repetition.\n\t     **\n\t     > Parameters\n\t     **\n\t     - repeat (number) number iterations of animation. For infinite animation pass `Infinity`\n\t     **\n\t     = (object) new altered Animation object\n\t    \\*/\n\t    Animation.prototype.repeat = function (times) {\n\t        var a = new Animation(this.anim, this.ms);\n\t        a.del = this.del;\n\t        a.times = math.floor(mmax(times, 0)) || 1;\n\t        return a;\n\t    };\n\t    function runAnimation(anim, element, percent, status, totalOrigin, times) {\n\t        percent = toFloat(percent);\n\t        var params,\n\t            isInAnim,\n\t            isInAnimSet,\n\t            percents = [],\n\t            next,\n\t            prev,\n\t            timestamp,\n\t            ms = anim.ms,\n\t            from = {},\n\t            to = {},\n\t            diff = {};\n\t        if (status) {\n\t            for (i = 0, ii = animationElements.length; i < ii; i++) {\n\t                var e = animationElements[i];\n\t                if (e.el.id == element.id && e.anim == anim) {\n\t                    if (e.percent != percent) {\n\t                        animationElements.splice(i, 1);\n\t                        isInAnimSet = 1;\n\t                    } else {\n\t                        isInAnim = e;\n\t                    }\n\t                    element.attr(e.totalOrigin);\n\t                    break;\n\t                }\n\t            }\n\t        } else {\n\t            status = +to; // NaN\n\t        }\n\t        for (var i = 0, ii = anim.percents.length; i < ii; i++) {\n\t            if (anim.percents[i] == percent || anim.percents[i] > status * anim.top) {\n\t                percent = anim.percents[i];\n\t                prev = anim.percents[i - 1] || 0;\n\t                ms = ms / anim.top * (percent - prev);\n\t                next = anim.percents[i + 1];\n\t                params = anim.anim[percent];\n\t                break;\n\t            } else if (status) {\n\t                element.attr(anim.anim[anim.percents[i]]);\n\t            }\n\t        }\n\t        if (!params) {\n\t            return;\n\t        }\n\t        if (!isInAnim) {\n\t            for (var attr in params) if (params[has](attr)) {\n\t                if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {\n\t                    from[attr] = element.attr(attr);\n\t                    (from[attr] == null) && (from[attr] = availableAttrs[attr]);\n\t                    to[attr] = params[attr];\n\t                    switch (availableAnimAttrs[attr]) {\n\t                        case nu:\n\t                            diff[attr] = (to[attr] - from[attr]) / ms;\n\t                            break;\n\t                        case \"colour\":\n\t                            from[attr] = R.getRGB(from[attr]);\n\t                            var toColour = R.getRGB(to[attr]);\n\t                            diff[attr] = {\n\t                                r: (toColour.r - from[attr].r) / ms,\n\t                                g: (toColour.g - from[attr].g) / ms,\n\t                                b: (toColour.b - from[attr].b) / ms\n\t                            };\n\t                            break;\n\t                        case \"path\":\n\t                            var pathes = path2curve(from[attr], to[attr]),\n\t                                toPath = pathes[1];\n\t                            from[attr] = pathes[0];\n\t                            diff[attr] = [];\n\t                            for (i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                diff[attr][i] = [0];\n\t                                for (var j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                    diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;\n\t                                }\n\t                            }\n\t                            break;\n\t                        case \"transform\":\n\t                            var _ = element._,\n\t                                eq = equaliseTransform(_[attr], to[attr]);\n\t                            if (eq) {\n\t                                from[attr] = eq.from;\n\t                                to[attr] = eq.to;\n\t                                diff[attr] = [];\n\t                                diff[attr].real = true;\n\t                                for (i = 0, ii = from[attr].length; i < ii; i++) {\n\t                                    diff[attr][i] = [from[attr][i][0]];\n\t                                    for (j = 1, jj = from[attr][i].length; j < jj; j++) {\n\t                                        diff[attr][i][j] = (to[attr][i][j] - from[attr][i][j]) / ms;\n\t                                    }\n\t                                }\n\t                            } else {\n\t                                var m = (element.matrix || new Matrix),\n\t                                    to2 = {\n\t                                        _: {transform: _.transform},\n\t                                        getBBox: function () {\n\t                                            return element.getBBox(1);\n\t                                        }\n\t                                    };\n\t                                from[attr] = [\n\t                                    m.a,\n\t                                    m.b,\n\t                                    m.c,\n\t                                    m.d,\n\t                                    m.e,\n\t                                    m.f\n\t                                ];\n\t                                extractTransform(to2, to[attr]);\n\t                                to[attr] = to2._.transform;\n\t                                diff[attr] = [\n\t                                    (to2.matrix.a - m.a) / ms,\n\t                                    (to2.matrix.b - m.b) / ms,\n\t                                    (to2.matrix.c - m.c) / ms,\n\t                                    (to2.matrix.d - m.d) / ms,\n\t                                    (to2.matrix.e - m.e) / ms,\n\t                                    (to2.matrix.f - m.f) / ms\n\t                                ];\n\t                                // from[attr] = [_.sx, _.sy, _.deg, _.dx, _.dy];\n\t                                // var to2 = {_:{}, getBBox: function () { return element.getBBox(); }};\n\t                                // extractTransform(to2, to[attr]);\n\t                                // diff[attr] = [\n\t                                //     (to2._.sx - _.sx) / ms,\n\t                                //     (to2._.sy - _.sy) / ms,\n\t                                //     (to2._.deg - _.deg) / ms,\n\t                                //     (to2._.dx - _.dx) / ms,\n\t                                //     (to2._.dy - _.dy) / ms\n\t                                // ];\n\t                            }\n\t                            break;\n\t                        case \"csv\":\n\t                            var values = Str(params[attr])[split](separator),\n\t                                from2 = Str(from[attr])[split](separator);\n\t                            if (attr == \"clip-rect\") {\n\t                                from[attr] = from2;\n\t                                diff[attr] = [];\n\t                                i = from2.length;\n\t                                while (i--) {\n\t                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;\n\t                                }\n\t                            }\n\t                            to[attr] = values;\n\t                            break;\n\t                        default:\n\t                            values = [][concat](params[attr]);\n\t                            from2 = [][concat](from[attr]);\n\t                            diff[attr] = [];\n\t                            i = element.paper.customAttributes[attr].length;\n\t                            while (i--) {\n\t                                diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;\n\t                            }\n\t                            break;\n\t                    }\n\t                }\n\t            }\n\t            var easing = params.easing,\n\t                easyeasy = R.easing_formulas[easing];\n\t            if (!easyeasy) {\n\t                easyeasy = Str(easing).match(bezierrg);\n\t                if (easyeasy && easyeasy.length == 5) {\n\t                    var curve = easyeasy;\n\t                    easyeasy = function (t) {\n\t                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);\n\t                    };\n\t                } else {\n\t                    easyeasy = pipe;\n\t                }\n\t            }\n\t            timestamp = params.start || anim.start || +new Date;\n\t            e = {\n\t                anim: anim,\n\t                percent: percent,\n\t                timestamp: timestamp,\n\t                start: timestamp + (anim.del || 0),\n\t                status: 0,\n\t                initstatus: status || 0,\n\t                stop: false,\n\t                ms: ms,\n\t                easing: easyeasy,\n\t                from: from,\n\t                diff: diff,\n\t                to: to,\n\t                el: element,\n\t                callback: params.callback,\n\t                prev: prev,\n\t                next: next,\n\t                repeat: times || anim.times,\n\t                origin: element.attr(),\n\t                totalOrigin: totalOrigin\n\t            };\n\t            animationElements.push(e);\n\t            if (status && !isInAnim && !isInAnimSet) {\n\t                e.stop = true;\n\t                e.start = new Date - ms * status;\n\t                if (animationElements.length == 1) {\n\t                    return animation();\n\t                }\n\t            }\n\t            if (isInAnimSet) {\n\t                e.start = new Date - e.ms * status;\n\t            }\n\t            animationElements.length == 1 && requestAnimFrame(animation);\n\t        } else {\n\t            isInAnim.initstatus = status;\n\t            isInAnim.start = new Date - isInAnim.ms * status;\n\t        }\n\t        eve(\"raphael.anim.start.\" + element.id, element, anim);\n\t    }\n\t    /*\\\n\t     * Raphael.animation\n\t     [ method ]\n\t     **\n\t     * Creates an animation object that can be passed to the @Element.animate or @Element.animateWith methods.\n\t     * See also @Animation.delay and @Animation.repeat methods.\n\t     **\n\t     > Parameters\n\t     **\n\t     - params (object) final attributes for the element, see also @Element.attr\n\t     - ms (number) number of milliseconds for animation to run\n\t     - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\n\t     - callback (function) #optional callback function. Will be called at the end of animation.\n\t     **\n\t     = (object) @Animation\n\t    \\*/\n\t    R.animation = function (params, ms, easing, callback) {\n\t        if (params instanceof Animation) {\n\t            return params;\n\t        }\n\t        if (R.is(easing, \"function\") || !easing) {\n\t            callback = callback || easing || null;\n\t            easing = null;\n\t        }\n\t        params = Object(params);\n\t        ms = +ms || 0;\n\t        var p = {},\n\t            json,\n\t            attr;\n\t        for (attr in params) if (params[has](attr) && toFloat(attr) != attr && toFloat(attr) + \"%\" != attr) {\n\t            json = true;\n\t            p[attr] = params[attr];\n\t        }\n\t        if (!json) {\n\t            // if percent-like syntax is used and end-of-all animation callback used\n\t            if(callback){\n\t                // find the last one\n\t                var lastKey = 0;\n\t                for(var i in params){\n\t                    var percent = toInt(i);\n\t                    if(params[has](i) && percent > lastKey){\n\t                        lastKey = percent;\n\t                    }\n\t                }\n\t                lastKey += '%';\n\t                // if already defined callback in the last keyframe, skip\n\t                !params[lastKey].callback && (params[lastKey].callback = callback);\n\t            }\n\t          return new Animation(params, ms);\n\t        } else {\n\t            easing && (p.easing = easing);\n\t            callback && (p.callback = callback);\n\t            return new Animation({100: p}, ms);\n\t        }\n\t    };\n\t    /*\\\n\t     * Element.animate\n\t     [ method ]\n\t     **\n\t     * Creates and starts animation for given element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - params (object) final attributes for the element, see also @Element.attr\n\t     - ms (number) number of milliseconds for animation to run\n\t     - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic&#x2010;bezier(XX,&#160;XX,&#160;XX,&#160;XX)`\n\t     - callback (function) #optional callback function. Will be called at the end of animation.\n\t     * or\n\t     - animation (object) animation object, see @Raphael.animation\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.animate = function (params, ms, easing, callback) {\n\t        var element = this;\n\t        if (element.removed) {\n\t            callback && callback.call(element);\n\t            return element;\n\t        }\n\t        var anim = params instanceof Animation ? params : R.animation(params, ms, easing, callback);\n\t        runAnimation(anim, element, anim.percents[0], null, element.attr());\n\t        return element;\n\t    };\n\t    /*\\\n\t     * Element.setTime\n\t     [ method ]\n\t     **\n\t     * Sets the status of animation of the element in milliseconds. Similar to @Element.status method.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) animation object\n\t     - value (number) number of milliseconds from the beginning of the animation\n\t     **\n\t     = (object) original element if `value` is specified\n\t     * Note, that during animation following events are triggered:\n\t     *\n\t     * On each animation frame event `anim.frame.<id>`, on start `anim.start.<id>` and on end `anim.finish.<id>`.\n\t    \\*/\n\t    elproto.setTime = function (anim, value) {\n\t        if (anim && value != null) {\n\t            this.status(anim, mmin(value, anim.ms) / anim.ms);\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.status\n\t     [ method ]\n\t     **\n\t     * Gets or sets the status of animation of the element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     - value (number) #optional 0 â€“ 1. If specified, method works like a setter and sets the status of a given animation to the value. This will cause animation to jump to the given position.\n\t     **\n\t     = (number) status\n\t     * or\n\t     = (array) status if `anim` is not specified. Array of objects in format:\n\t     o {\n\t     o     anim: (object) animation object\n\t     o     status: (number) status\n\t     o }\n\t     * or\n\t     = (object) original element if `value` is specified\n\t    \\*/\n\t    elproto.status = function (anim, value) {\n\t        var out = [],\n\t            i = 0,\n\t            len,\n\t            e;\n\t        if (value != null) {\n\t            runAnimation(anim, this, -1, mmin(value, 1));\n\t            return this;\n\t        } else {\n\t            len = animationElements.length;\n\t            for (; i < len; i++) {\n\t                e = animationElements[i];\n\t                if (e.el.id == this.id && (!anim || e.anim == anim)) {\n\t                    if (anim) {\n\t                        return e.status;\n\t                    }\n\t                    out.push({\n\t                        anim: e.anim,\n\t                        status: e.status\n\t                    });\n\t                }\n\t            }\n\t            if (anim) {\n\t                return 0;\n\t            }\n\t            return out;\n\t        }\n\t    };\n\t    /*\\\n\t     * Element.pause\n\t     [ method ]\n\t     **\n\t     * Stops animation of the element with ability to resume it later on.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.pause = function (anim) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n\t            if (eve(\"raphael.anim.pause.\" + this.id, this, animationElements[i].anim) !== false) {\n\t                animationElements[i].paused = true;\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.resume\n\t     [ method ]\n\t     **\n\t     * Resumes animation if it was paused with @Element.pause method.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     **\n\t     = (object) original element\n\t    \\*/\n\t    elproto.resume = function (anim) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n\t            var e = animationElements[i];\n\t            if (eve(\"raphael.anim.resume.\" + this.id, this, e.anim) !== false) {\n\t                delete e.paused;\n\t                this.status(e.anim, e.status);\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.stop\n\t     [ method ]\n\t     **\n\t     * Stops animation of the element.\n\t     **\n\t     > Parameters\n\t     **\n\t     - anim (object) #optional animation object\n\t     **\n\n\t     = (object) original element\n\t    \\*/\n\t    elproto.stop = function (anim) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {\n\t            if (eve(\"raphael.anim.stop.\" + this.id, this, animationElements[i].anim) !== false) {\n\t                animationElements.splice(i--, 1);\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    function stopAnimation(paper) {\n\t        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.paper == paper) {\n\t            animationElements.splice(i--, 1);\n\t        }\n\t    }\n\t    eve.on(\"raphael.remove\", stopAnimation);\n\t    eve.on(\"raphael.clear\", stopAnimation);\n\t    elproto.toString = function () {\n\t        return \"Rapha\\xebl\\u2019s object\";\n\t    };\n\n\t    // Set\n\t    var Set = function (items) {\n\t        this.items = [];\n\t        this.length = 0;\n\t        this.type = \"set\";\n\t        if (items) {\n\t            for (var i = 0, ii = items.length; i < ii; i++) {\n\t                if (items[i] && (items[i].constructor == elproto.constructor || items[i].constructor == Set)) {\n\t                    this[this.items.length] = this.items[this.items.length] = items[i];\n\t                    this.length++;\n\t                }\n\t            }\n\t        }\n\t    },\n\t    setproto = Set.prototype;\n\t    /*\\\n\t     * Set.push\n\t     [ method ]\n\t     **\n\t     * Adds each argument to the current set.\n\t     = (object) original element\n\t    \\*/\n\t    setproto.push = function () {\n\t        var item,\n\t            len;\n\t        for (var i = 0, ii = arguments.length; i < ii; i++) {\n\t            item = arguments[i];\n\t            if (item && (item.constructor == elproto.constructor || item.constructor == Set)) {\n\t                len = this.items.length;\n\t                this[len] = this.items[len] = item;\n\t                this.length++;\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Set.pop\n\t     [ method ]\n\t     **\n\t     * Removes last element and returns it.\n\t     = (object) element\n\t    \\*/\n\t    setproto.pop = function () {\n\t        this.length && delete this[this.length--];\n\t        return this.items.pop();\n\t    };\n\t    /*\\\n\t     * Set.forEach\n\t     [ method ]\n\t     **\n\t     * Executes given function for each element in the set.\n\t     *\n\t     * If function returns `false` it will stop loop running.\n\t     **\n\t     > Parameters\n\t     **\n\t     - callback (function) function to run\n\t     - thisArg (object) context object for the callback\n\t     = (object) Set object\n\t    \\*/\n\t    setproto.forEach = function (callback, thisArg) {\n\t        for (var i = 0, ii = this.items.length; i < ii; i++) {\n\t            if (callback.call(thisArg, this.items[i], i) === false) {\n\t                return this;\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    for (var method in elproto) if (elproto[has](method)) {\n\t        setproto[method] = (function (methodname) {\n\t            return function () {\n\t                var arg = arguments;\n\t                return this.forEach(function (el) {\n\t                    el[methodname][apply](el, arg);\n\t                });\n\t            };\n\t        })(method);\n\t    }\n\t    setproto.attr = function (name, value) {\n\t        if (name && R.is(name, array) && R.is(name[0], \"object\")) {\n\t            for (var j = 0, jj = name.length; j < jj; j++) {\n\t                this.items[j].attr(name[j]);\n\t            }\n\t        } else {\n\t            for (var i = 0, ii = this.items.length; i < ii; i++) {\n\t                this.items[i].attr(name, value);\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Set.clear\n\t     [ method ]\n\t     **\n\t     * Removes all elements from the set\n\t    \\*/\n\t    setproto.clear = function () {\n\t        while (this.length) {\n\t            this.pop();\n\t        }\n\t    };\n\t    /*\\\n\t     * Set.splice\n\t     [ method ]\n\t     **\n\t     * Removes given element from the set\n\t     **\n\t     > Parameters\n\t     **\n\t     - index (number) position of the deletion\n\t     - count (number) number of element to remove\n\t     - insertionâ€¦ (object) #optional elements to insert\n\t     = (object) set elements that were deleted\n\t    \\*/\n\t    setproto.splice = function (index, count, insertion) {\n\t        index = index < 0 ? mmax(this.length + index, 0) : index;\n\t        count = mmax(0, mmin(this.length - index, count));\n\t        var tail = [],\n\t            todel = [],\n\t            args = [],\n\t            i;\n\t        for (i = 2; i < arguments.length; i++) {\n\t            args.push(arguments[i]);\n\t        }\n\t        for (i = 0; i < count; i++) {\n\t            todel.push(this[index + i]);\n\t        }\n\t        for (; i < this.length - index; i++) {\n\t            tail.push(this[index + i]);\n\t        }\n\t        var arglen = args.length;\n\t        for (i = 0; i < arglen + tail.length; i++) {\n\t            this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];\n\t        }\n\t        i = this.items.length = this.length -= count - arglen;\n\t        while (this[i]) {\n\t            delete this[i++];\n\t        }\n\t        return new Set(todel);\n\t    };\n\t    /*\\\n\t     * Set.exclude\n\t     [ method ]\n\t     **\n\t     * Removes given element from the set\n\t     **\n\t     > Parameters\n\t     **\n\t     - element (object) element to remove\n\t     = (boolean) `true` if object was found & removed from the set\n\t    \\*/\n\t    setproto.exclude = function (el) {\n\t        for (var i = 0, ii = this.length; i < ii; i++) if (this[i] == el) {\n\t            this.splice(i, 1);\n\t            return true;\n\t        }\n\t    };\n\t    setproto.animate = function (params, ms, easing, callback) {\n\t        (R.is(easing, \"function\") || !easing) && (callback = easing || null);\n\t        var len = this.items.length,\n\t            i = len,\n\t            item,\n\t            set = this,\n\t            collector;\n\t        if (!len) {\n\t            return this;\n\t        }\n\t        callback && (collector = function () {\n\t            !--len && callback.call(set);\n\t        });\n\t        easing = R.is(easing, string) ? easing : collector;\n\t        var anim = R.animation(params, ms, easing, collector);\n\t        item = this.items[--i].animate(anim);\n\t        while (i--) {\n\t            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, anim, anim);\n\t            (this.items[i] && !this.items[i].removed) || len--;\n\t        }\n\t        return this;\n\t    };\n\t    setproto.insertAfter = function (el) {\n\t        var i = this.items.length;\n\t        while (i--) {\n\t            this.items[i].insertAfter(el);\n\t        }\n\t        return this;\n\t    };\n\t    setproto.getBBox = function () {\n\t        var x = [],\n\t            y = [],\n\t            x2 = [],\n\t            y2 = [];\n\t        for (var i = this.items.length; i--;) if (!this.items[i].removed) {\n\t            var box = this.items[i].getBBox();\n\t            x.push(box.x);\n\t            y.push(box.y);\n\t            x2.push(box.x + box.width);\n\t            y2.push(box.y + box.height);\n\t        }\n\t        x = mmin[apply](0, x);\n\t        y = mmin[apply](0, y);\n\t        x2 = mmax[apply](0, x2);\n\t        y2 = mmax[apply](0, y2);\n\t        return {\n\t            x: x,\n\t            y: y,\n\t            x2: x2,\n\t            y2: y2,\n\t            width: x2 - x,\n\t            height: y2 - y\n\t        };\n\t    };\n\t    setproto.clone = function (s) {\n\t        s = this.paper.set();\n\t        for (var i = 0, ii = this.items.length; i < ii; i++) {\n\t            s.push(this.items[i].clone());\n\t        }\n\t        return s;\n\t    };\n\t    setproto.toString = function () {\n\t        return \"Rapha\\xebl\\u2018s set\";\n\t    };\n\n\t    setproto.glow = function(glowConfig) {\n\t        var ret = this.paper.set();\n\t        this.forEach(function(shape, index){\n\t            var g = shape.glow(glowConfig);\n\t            if(g != null){\n\t                g.forEach(function(shape2, index2){\n\t                    ret.push(shape2);\n\t                });\n\t            }\n\t        });\n\t        return ret;\n\t    };\n\n\n\t    /*\\\n\t     * Set.isPointInside\n\t     [ method ]\n\t     **\n\t     * Determine if given point is inside this setâ€™s elements\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x coordinate of the point\n\t     - y (number) y coordinate of the point\n\t     = (boolean) `true` if point is inside any of the set's elements\n\t     \\*/\n\t    setproto.isPointInside = function (x, y) {\n\t        var isPointInside = false;\n\t        this.forEach(function (el) {\n\t            if (el.isPointInside(x, y)) {\n\t                isPointInside = true;\n\t                return false; // stop loop\n\t            }\n\t        });\n\t        return isPointInside;\n\t    };\n\n\t    /*\\\n\t     * Raphael.registerFont\n\t     [ method ]\n\t     **\n\t     * Adds given font to the registered set of fonts for RaphaÃ«l. Should be used as an internal call from within CufÃ³nâ€™s font file.\n\t     * Returns original parameter, so it could be used with chaining.\n\t     # <a href=\"http://wiki.github.com/sorccu/cufon/about\">More about CufÃ³n and how to convert your font form TTF, OTF, etc to JavaScript file.</a>\n\t     **\n\t     > Parameters\n\t     **\n\t     - font (object) the font to register\n\t     = (object) the font you passed in\n\t     > Usage\n\t     | Cufon.registerFont(Raphael.registerFont({â€¦}));\n\t    \\*/\n\t    R.registerFont = function (font) {\n\t        if (!font.face) {\n\t            return font;\n\t        }\n\t        this.fonts = this.fonts || {};\n\t        var fontcopy = {\n\t                w: font.w,\n\t                face: {},\n\t                glyphs: {}\n\t            },\n\t            family = font.face[\"font-family\"];\n\t        for (var prop in font.face) if (font.face[has](prop)) {\n\t            fontcopy.face[prop] = font.face[prop];\n\t        }\n\t        if (this.fonts[family]) {\n\t            this.fonts[family].push(fontcopy);\n\t        } else {\n\t            this.fonts[family] = [fontcopy];\n\t        }\n\t        if (!font.svg) {\n\t            fontcopy.face[\"units-per-em\"] = toInt(font.face[\"units-per-em\"], 10);\n\t            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {\n\t                var path = font.glyphs[glyph];\n\t                fontcopy.glyphs[glyph] = {\n\t                    w: path.w,\n\t                    k: {},\n\t                    d: path.d && \"M\" + path.d.replace(/[mlcxtrv]/g, function (command) {\n\t                            return {l: \"L\", c: \"C\", x: \"z\", t: \"m\", r: \"l\", v: \"c\"}[command] || \"M\";\n\t                        }) + \"z\"\n\t                };\n\t                if (path.k) {\n\t                    for (var k in path.k) if (path[has](k)) {\n\t                        fontcopy.glyphs[glyph].k[k] = path.k[k];\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        return font;\n\t    };\n\t    /*\\\n\t     * Paper.getFont\n\t     [ method ]\n\t     **\n\t     * Finds font object in the registered fonts by given parameters. You could specify only one word from the font name, like â€œMyriadâ€ for â€œMyriad Proâ€.\n\t     **\n\t     > Parameters\n\t     **\n\t     - family (string) font family name or any word from it\n\t     - weight (string) #optional font weight\n\t     - style (string) #optional font style\n\t     - stretch (string) #optional font stretch\n\t     = (object) the font object\n\t     > Usage\n\t     | paper.print(100, 100, \"Test string\", paper.getFont(\"Times\", 800), 30);\n\t    \\*/\n\t    paperproto.getFont = function (family, weight, style, stretch) {\n\t        stretch = stretch || \"normal\";\n\t        style = style || \"normal\";\n\t        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;\n\t        if (!R.fonts) {\n\t            return;\n\t        }\n\t        var font = R.fonts[family];\n\t        if (!font) {\n\t            var name = new RegExp(\"(^|\\\\s)\" + family.replace(/[^\\w\\d\\s+!~.:_-]/g, E) + \"(\\\\s|$)\", \"i\");\n\t            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {\n\t                if (name.test(fontName)) {\n\t                    font = R.fonts[fontName];\n\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        var thefont;\n\t        if (font) {\n\t            for (var i = 0, ii = font.length; i < ii; i++) {\n\t                thefont = font[i];\n\t                if (thefont.face[\"font-weight\"] == weight && (thefont.face[\"font-style\"] == style || !thefont.face[\"font-style\"]) && thefont.face[\"font-stretch\"] == stretch) {\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        return thefont;\n\t    };\n\t    /*\\\n\t     * Paper.print\n\t     [ method ]\n\t     **\n\t     * Creates path that represent given text written using given font at given position with given size.\n\t     * Result of the method is path element that contains whole text as a separate path.\n\t     **\n\t     > Parameters\n\t     **\n\t     - x (number) x position of the text\n\t     - y (number) y position of the text\n\t     - string (string) text to print\n\t     - font (object) font object, see @Paper.getFont\n\t     - size (number) #optional size of the font, default is `16`\n\t     - origin (string) #optional could be `\"baseline\"` or `\"middle\"`, default is `\"middle\"`\n\t     - letter_spacing (number) #optional number in range `-1..1`, default is `0`\n\t     - line_spacing (number) #optional number in range `1..3`, default is `1`\n\t     = (object) resulting path element, which consist of all letters\n\t     > Usage\n\t     | var txt = r.print(10, 50, \"print\", r.getFont(\"Museo\"), 30).attr({fill: \"#fff\"});\n\t    \\*/\n\t    paperproto.print = function (x, y, string, font, size, origin, letter_spacing, line_spacing) {\n\t        origin = origin || \"middle\"; // baseline|middle\n\t        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);\n\t        line_spacing = mmax(mmin(line_spacing || 1, 3), 1);\n\t        var letters = Str(string)[split](E),\n\t            shift = 0,\n\t            notfirst = 0,\n\t            path = E,\n\t            scale;\n\t        R.is(font, \"string\") && (font = this.getFont(font));\n\t        if (font) {\n\t            scale = (size || 16) / font.face[\"units-per-em\"];\n\t            var bb = font.face.bbox[split](separator),\n\t                top = +bb[0],\n\t                lineHeight = bb[3] - bb[1],\n\t                shifty = 0,\n\t                height = +bb[1] + (origin == \"baseline\" ? lineHeight + (+font.face.descent) : lineHeight / 2);\n\t            for (var i = 0, ii = letters.length; i < ii; i++) {\n\t                if (letters[i] == \"\\n\") {\n\t                    shift = 0;\n\t                    curr = 0;\n\t                    notfirst = 0;\n\t                    shifty += lineHeight * line_spacing;\n\t                } else {\n\t                    var prev = notfirst && font.glyphs[letters[i - 1]] || {},\n\t                        curr = font.glyphs[letters[i]];\n\t                    shift += notfirst ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;\n\t                    notfirst = 1;\n\t                }\n\t                if (curr && curr.d) {\n\t                    path += R.transformPath(curr.d, [\"t\", shift * scale, shifty * scale, \"s\", scale, scale, top, height, \"t\", (x - top) / scale, (y - height) / scale]);\n\t                }\n\t            }\n\t        }\n\t        return this.path(path).attr({\n\t            fill: \"#000\",\n\t            stroke: \"none\"\n\t        });\n\t    };\n\n\t    /*\\\n\t     * Paper.add\n\t     [ method ]\n\t     **\n\t     * Imports elements in JSON array in format `{type: type, <attributes>}`\n\t     **\n\t     > Parameters\n\t     **\n\t     - json (array)\n\t     = (object) resulting set of imported elements\n\t     > Usage\n\t     | paper.add([\n\t     |     {\n\t     |         type: \"circle\",\n\t     |         cx: 10,\n\t     |         cy: 10,\n\t     |         r: 5\n\t     |     },\n\t     |     {\n\t     |         type: \"rect\",\n\t     |         x: 10,\n\t     |         y: 10,\n\t     |         width: 10,\n\t     |         height: 10,\n\t     |         fill: \"#fc0\"\n\t     |     }\n\t     | ]);\n\t    \\*/\n\t    paperproto.add = function (json) {\n\t        if (R.is(json, \"array\")) {\n\t            var res = this.set(),\n\t                i = 0,\n\t                ii = json.length,\n\t                j;\n\t            for (; i < ii; i++) {\n\t                j = json[i] || {};\n\t                elements[has](j.type) && res.push(this[j.type]().attr(j));\n\t            }\n\t        }\n\t        return res;\n\t    };\n\n\t    /*\\\n\t     * Raphael.format\n\t     [ method ]\n\t     **\n\t     * Simple format function. Replaces construction of type â€œ`{<number>}`â€ to the corresponding argument.\n\t     **\n\t     > Parameters\n\t     **\n\t     - token (string) string to format\n\t     - â€¦ (string) rest of arguments will be treated as parameters for replacement\n\t     = (string) formated string\n\t     > Usage\n\t     | var x = 10,\n\t     |     y = 20,\n\t     |     width = 40,\n\t     |     height = 50;\n\t     | // this will draw a rectangular shape equivalent to \"M10,20h40v50h-40z\"\n\t     | paper.path(Raphael.format(\"M{0},{1}h{2}v{3}h{4}z\", x, y, width, height, -width));\n\t    \\*/\n\t    R.format = function (token, params) {\n\t        var args = R.is(params, array) ? [0][concat](params) : arguments;\n\t        token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) {\n\t            return args[++i] == null ? E : args[i];\n\t        }));\n\t        return token || E;\n\t    };\n\t    /*\\\n\t     * Raphael.fullfill\n\t     [ method ]\n\t     **\n\t     * A little bit more advanced format function than @Raphael.format. Replaces construction of type â€œ`{<name>}`â€ to the corresponding argument.\n\t     **\n\t     > Parameters\n\t     **\n\t     - token (string) string to format\n\t     - json (object) object which properties will be used as a replacement\n\t     = (string) formated string\n\t     > Usage\n\t     | // this will draw a rectangular shape equivalent to \"M10,20h40v50h-40z\"\n\t     | paper.path(Raphael.fullfill(\"M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z\", {\n\t     |     x: 10,\n\t     |     y: 20,\n\t     |     dim: {\n\t     |         width: 40,\n\t     |         height: 50,\n\t     |         \"negative width\": -40\n\t     |     }\n\t     | }));\n\t    \\*/\n\t    R.fullfill = (function () {\n\t        var tokenRegex = /\\{([^\\}]+)\\}/g,\n\t            objNotationRegex = /(?:(?:^|\\.)(.+?)(?=\\[|\\.|$|\\()|\\[('|\")(.+?)\\2\\])(\\(\\))?/g, // matches .xxxxx or [\"xxxxx\"] to run over object properties\n\t            replacer = function (all, key, obj) {\n\t                var res = obj;\n\t                key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {\n\t                    name = name || quotedName;\n\t                    if (res) {\n\t                        if (name in res) {\n\t                            res = res[name];\n\t                        }\n\t                        typeof res == \"function\" && isFunc && (res = res());\n\t                    }\n\t                });\n\t                res = (res == null || res == obj ? all : res) + \"\";\n\t                return res;\n\t            };\n\t        return function (str, obj) {\n\t            return String(str).replace(tokenRegex, function (all, key) {\n\t                return replacer(all, key, obj);\n\t            });\n\t        };\n\t    })();\n\t    /*\\\n\t     * Raphael.ninja\n\t     [ method ]\n\t     **\n\t     * If you want to leave no trace of RaphaÃ«l (Well, RaphaÃ«l creates only one global variable `Raphael`, but anyway.) You can use `ninja` method.\n\t     * Beware, that in this case plugins could stop working, because they are depending on global variable existence.\n\t     **\n\t     = (object) Raphael object\n\t     > Usage\n\t     | (function (local_raphael) {\n\t     |     var paper = local_raphael(10, 10, 320, 200);\n\t     |     â€¦\n\t     | })(Raphael.ninja());\n\t    \\*/\n\t    R.ninja = function () {\n\t        if (oldRaphael.was) {\n\t            g.win.Raphael = oldRaphael.is;\n\t        } else {\n\t            // IE8 raises an error when deleting window property\n\t            window.Raphael = undefined;\n\t            try {\n\t                delete window.Raphael;\n\t            } catch(e) {}\n\t        }\n\t        return R;\n\t    };\n\t    /*\\\n\t     * Raphael.st\n\t     [ property (object) ]\n\t     **\n\t     * You can add your own method to elements and sets. It is wise to add a set method for each element method\n\t     * you added, so you will be able to call the same method on sets too.\n\t     **\n\t     * See also @Raphael.el.\n\t     > Usage\n\t     | Raphael.el.red = function () {\n\t     |     this.attr({fill: \"#f00\"});\n\t     | };\n\t     | Raphael.st.red = function () {\n\t     |     this.forEach(function (el) {\n\t     |         el.red();\n\t     |     });\n\t     | };\n\t     | // then use it\n\t     | paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red();\n\t    \\*/\n\t    R.st = setproto;\n\n\t    eve.on(\"raphael.DOMload\", function () {\n\t        loaded = true;\n\t    });\n\n\t    // Firefox <3.6 fix: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html\n\t    (function (doc, loaded, f) {\n\t        if (doc.readyState == null && doc.addEventListener){\n\t            doc.addEventListener(loaded, f = function () {\n\t                doc.removeEventListener(loaded, f, false);\n\t                doc.readyState = \"complete\";\n\t            }, false);\n\t            doc.readyState = \"loading\";\n\t        }\n\t        function isLoaded() {\n\t            (/in/).test(doc.readyState) ? setTimeout(isLoaded, 9) : R.eve(\"raphael.DOMload\");\n\t        }\n\t        isLoaded();\n\t    })(document, \"DOMContentLoaded\");\n\n\t    return R;\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.\n\t//\n\t// Licensed under the Apache License, Version 2.0 (the \"License\");\n\t// you may not use this file except in compliance with the License.\n\t// You may obtain a copy of the License at\n\t//\n\t// http://www.apache.org/licenses/LICENSE-2.0\n\t//\n\t// Unless required by applicable law or agreed to in writing, software\n\t// distributed under the License is distributed on an \"AS IS\" BASIS,\n\t// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t// See the License for the specific language governing permissions and\n\t// limitations under the License.\n\t// â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â” \\\\\n\t// â”‚ Eve 0.5.0 - JavaScript Events Library                      â”‚ \\\\\n\t// â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤ \\\\\n\t// â”‚ Author Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) â”‚ \\\\\n\t// â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜ \\\\\n\n\t(function (glob) {\n\t    var version = \"0.5.0\",\n\t        has = \"hasOwnProperty\",\n\t        separator = /[\\.\\/]/,\n\t        comaseparator = /\\s*,\\s*/,\n\t        wildcard = \"*\",\n\t        fun = function () {},\n\t        numsort = function (a, b) {\n\t            return a - b;\n\t        },\n\t        current_event,\n\t        stop,\n\t        events = {n: {}},\n\t        firstDefined = function () {\n\t            for (var i = 0, ii = this.length; i < ii; i++) {\n\t                if (typeof this[i] != \"undefined\") {\n\t                    return this[i];\n\t                }\n\t            }\n\t        },\n\t        lastDefined = function () {\n\t            var i = this.length;\n\t            while (--i) {\n\t                if (typeof this[i] != \"undefined\") {\n\t                    return this[i];\n\t                }\n\t            }\n\t        },\n\t        objtos = Object.prototype.toString,\n\t        Str = String,\n\t        isArray = Array.isArray || function (ar) {\n\n\t            return ar instanceof Array || objtos.call(ar) == \"[object Array]\";\n\t        };\n\t    /*\\\n\t     * eve\n\t     [ method ]\n\n\t     * Fires event with given `name`, given scope and other parameters.\n\n\t     > Arguments\n\n\t     - name (string) name of the *event*, dot (`.`) or slash (`/`) separated\n\t     - scope (object) context for the event handlers\n\t     - varargs (...) the rest of arguments will be sent to event handlers\n\n\t     = (object) array of returned values from the listeners. Array has two methods `.firstDefined()` and `.lastDefined()` to get first or last not `undefined` value.\n\t    \\*/\n\t        eve = function (name, scope) {\n\t            var e = events,\n\t                oldstop = stop,\n\t                args = Array.prototype.slice.call(arguments, 2),\n\t                listeners = eve.listeners(name),\n\t                z = 0,\n\t                f = false,\n\t                l,\n\t                indexed = [],\n\t                queue = {},\n\t                out = [],\n\t                ce = current_event,\n\t                errors = [];\n\t            out.firstDefined = firstDefined;\n\t            out.lastDefined = lastDefined;\n\t            current_event = name;\n\t            stop = 0;\n\t            for (var i = 0, ii = listeners.length; i < ii; i++) if (\"zIndex\" in listeners[i]) {\n\t                indexed.push(listeners[i].zIndex);\n\t                if (listeners[i].zIndex < 0) {\n\t                    queue[listeners[i].zIndex] = listeners[i];\n\t                }\n\t            }\n\t            indexed.sort(numsort);\n\t            while (indexed[z] < 0) {\n\t                l = queue[indexed[z++]];\n\t                out.push(l.apply(scope, args));\n\t                if (stop) {\n\t                    stop = oldstop;\n\t                    return out;\n\t                }\n\t            }\n\t            for (i = 0; i < ii; i++) {\n\t                l = listeners[i];\n\t                if (\"zIndex\" in l) {\n\t                    if (l.zIndex == indexed[z]) {\n\t                        out.push(l.apply(scope, args));\n\t                        if (stop) {\n\t                            break;\n\t                        }\n\t                        do {\n\t                            z++;\n\t                            l = queue[indexed[z]];\n\t                            l && out.push(l.apply(scope, args));\n\t                            if (stop) {\n\t                                break;\n\t                            }\n\t                        } while (l)\n\t                    } else {\n\t                        queue[l.zIndex] = l;\n\t                    }\n\t                } else {\n\t                    out.push(l.apply(scope, args));\n\t                    if (stop) {\n\t                        break;\n\t                    }\n\t                }\n\t            }\n\t            stop = oldstop;\n\t            current_event = ce;\n\t            return out;\n\t        };\n\t        // Undocumented. Debug only.\n\t        eve._events = events;\n\t    /*\\\n\t     * eve.listeners\n\t     [ method ]\n\n\t     * Internal method which gives you array of all event handlers that will be triggered by the given `name`.\n\n\t     > Arguments\n\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated\n\n\t     = (array) array of event handlers\n\t    \\*/\n\t    eve.listeners = function (name) {\n\t        var names = isArray(name) ? name : name.split(separator),\n\t            e = events,\n\t            item,\n\t            items,\n\t            k,\n\t            i,\n\t            ii,\n\t            j,\n\t            jj,\n\t            nes,\n\t            es = [e],\n\t            out = [];\n\t        for (i = 0, ii = names.length; i < ii; i++) {\n\t            nes = [];\n\t            for (j = 0, jj = es.length; j < jj; j++) {\n\t                e = es[j].n;\n\t                items = [e[names[i]], e[wildcard]];\n\t                k = 2;\n\t                while (k--) {\n\t                    item = items[k];\n\t                    if (item) {\n\t                        nes.push(item);\n\t                        out = out.concat(item.f || []);\n\t                    }\n\t                }\n\t            }\n\t            es = nes;\n\t        }\n\t        return out;\n\t    };\n\t    /*\\\n\t     * eve.separator\n\t     [ method ]\n\n\t     * If for some reasons you donâ€™t like default separators (`.` or `/`) you can specify yours\n\t     * here. Be aware that if you pass a string longer than one character it will be treated as\n\t     * a list of characters.\n\n\t     - separator (string) new separator. Empty string resets to default: `.` or `/`.\n\t    \\*/\n\t    eve.separator = function (sep) {\n\t        if (sep) {\n\t            sep = Str(sep).replace(/(?=[\\.\\^\\]\\[\\-])/g, \"\\\\\");\n\t            sep = \"[\" + sep + \"]\";\n\t            separator = new RegExp(sep);\n\t        } else {\n\t            separator = /[\\.\\/]/;\n\t        }\n\t    };\n\t    /*\\\n\t     * eve.on\n\t     [ method ]\n\t     **\n\t     * Binds given event handler with a given name. You can use wildcards â€œ`*`â€ for the names:\n\t     | eve.on(\"*.under.*\", f);\n\t     | eve(\"mouse.under.floor\"); // triggers f\n\t     * Use @eve to trigger the listener.\n\t     **\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n\t     - f (function) event handler function\n\t     **\n\t     - name (array) if you donâ€™t want to use separators, you can use array of strings\n\t     - f (function) event handler function\n\t     **\n\t     = (function) returned function accepts a single numeric parameter that represents z-index of the handler. It is an optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment.\n\t     > Example:\n\t     | eve.on(\"mouse\", eatIt)(2);\n\t     | eve.on(\"mouse\", scream);\n\t     | eve.on(\"mouse\", catchIt)(1);\n\t     * This will ensure that `catchIt` function will be called before `eatIt`.\n\t     *\n\t     * If you want to put your handler before non-indexed handlers, specify a negative value.\n\t     * Note: I assume most of the time you donâ€™t need to worry about z-index, but itâ€™s nice to have this feature â€œjust in caseâ€.\n\t    \\*/\n\t    eve.on = function (name, f) {\n\t        if (typeof f != \"function\") {\n\t            return function () {};\n\t        }\n\t        var names = isArray(name) ? (isArray(name[0]) ? name : [name]) : Str(name).split(comaseparator);\n\t        for (var i = 0, ii = names.length; i < ii; i++) {\n\t            (function (name) {\n\t                var names = isArray(name) ? name : Str(name).split(separator),\n\t                    e = events,\n\t                    exist;\n\t                for (var i = 0, ii = names.length; i < ii; i++) {\n\t                    e = e.n;\n\t                    e = e.hasOwnProperty(names[i]) && e[names[i]] || (e[names[i]] = {n: {}});\n\t                }\n\t                e.f = e.f || [];\n\t                for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {\n\t                    exist = true;\n\t                    break;\n\t                }\n\t                !exist && e.f.push(f);\n\t            }(names[i]));\n\t        }\n\t        return function (zIndex) {\n\t            if (+zIndex == +zIndex) {\n\t                f.zIndex = +zIndex;\n\t            }\n\t        };\n\t    };\n\t    /*\\\n\t     * eve.f\n\t     [ method ]\n\t     **\n\t     * Returns function that will fire given event with optional arguments.\n\t     * Arguments that will be passed to the result function will be also\n\t     * concated to the list of final arguments.\n\t     | el.onclick = eve.f(\"click\", 1, 2);\n\t     | eve.on(\"click\", function (a, b, c) {\n\t     |     console.log(a, b, c); // 1, 2, [event object]\n\t     | });\n\t     > Arguments\n\t     - event (string) event name\n\t     - varargs (â€¦) and any other arguments\n\t     = (function) possible event handler function\n\t    \\*/\n\t    eve.f = function (event) {\n\t        var attrs = [].slice.call(arguments, 1);\n\t        return function () {\n\t            eve.apply(null, [event, null].concat(attrs).concat([].slice.call(arguments, 0)));\n\t        };\n\t    };\n\t    /*\\\n\t     * eve.stop\n\t     [ method ]\n\t     **\n\t     * Is used inside an event handler to stop the event, preventing any subsequent listeners from firing.\n\t    \\*/\n\t    eve.stop = function () {\n\t        stop = 1;\n\t    };\n\t    /*\\\n\t     * eve.nt\n\t     [ method ]\n\t     **\n\t     * Could be used inside event handler to figure out actual name of the event.\n\t     **\n\t     > Arguments\n\t     **\n\t     - subname (string) #optional subname of the event\n\t     **\n\t     = (string) name of the event, if `subname` is not specified\n\t     * or\n\t     = (boolean) `true`, if current eventâ€™s name contains `subname`\n\t    \\*/\n\t    eve.nt = function (subname) {\n\t        var cur = isArray(current_event) ? current_event.join(\".\") : current_event;\n\t        if (subname) {\n\t            return new RegExp(\"(?:\\\\.|\\\\/|^)\" + subname + \"(?:\\\\.|\\\\/|$)\").test(cur);\n\t        }\n\t        return cur;\n\t    };\n\t    /*\\\n\t     * eve.nts\n\t     [ method ]\n\t     **\n\t     * Could be used inside event handler to figure out actual name of the event.\n\t     **\n\t     **\n\t     = (array) names of the event\n\t    \\*/\n\t    eve.nts = function () {\n\t        return isArray(current_event) ? current_event : current_event.split(separator);\n\t    };\n\t    /*\\\n\t     * eve.off\n\t     [ method ]\n\t     **\n\t     * Removes given function from the list of event listeners assigned to given name.\n\t     * If no arguments specified all the events will be cleared.\n\t     **\n\t     > Arguments\n\t     **\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n\t     - f (function) event handler function\n\t    \\*/\n\t    /*\\\n\t     * eve.unbind\n\t     [ method ]\n\t     **\n\t     * See @eve.off\n\t    \\*/\n\t    eve.off = eve.unbind = function (name, f) {\n\t        if (!name) {\n\t            eve._events = events = {n: {}};\n\t            return;\n\t        }\n\t        var names = isArray(name) ? (isArray(name[0]) ? name : [name]) : Str(name).split(comaseparator);\n\t        if (names.length > 1) {\n\t            for (var i = 0, ii = names.length; i < ii; i++) {\n\t                eve.off(names[i], f);\n\t            }\n\t            return;\n\t        }\n\t        names = isArray(name) ? name : Str(name).split(separator);\n\t        var e,\n\t            key,\n\t            splice,\n\t            i, ii, j, jj,\n\t            cur = [events];\n\t        for (i = 0, ii = names.length; i < ii; i++) {\n\t            for (j = 0; j < cur.length; j += splice.length - 2) {\n\t                splice = [j, 1];\n\t                e = cur[j].n;\n\t                if (names[i] != wildcard) {\n\t                    if (e[names[i]]) {\n\t                        splice.push(e[names[i]]);\n\t                    }\n\t                } else {\n\t                    for (key in e) if (e[has](key)) {\n\t                        splice.push(e[key]);\n\t                    }\n\t                }\n\t                cur.splice.apply(cur, splice);\n\t            }\n\t        }\n\t        for (i = 0, ii = cur.length; i < ii; i++) {\n\t            e = cur[i];\n\t            while (e.n) {\n\t                if (f) {\n\t                    if (e.f) {\n\t                        for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) {\n\t                            e.f.splice(j, 1);\n\t                            break;\n\t                        }\n\t                        !e.f.length && delete e.f;\n\t                    }\n\t                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n\t                        var funcs = e.n[key].f;\n\t                        for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) {\n\t                            funcs.splice(j, 1);\n\t                            break;\n\t                        }\n\t                        !funcs.length && delete e.n[key].f;\n\t                    }\n\t                } else {\n\t                    delete e.f;\n\t                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {\n\t                        delete e.n[key].f;\n\t                    }\n\t                }\n\t                e = e.n;\n\t            }\n\t        }\n\t    };\n\t    /*\\\n\t     * eve.once\n\t     [ method ]\n\t     **\n\t     * Binds given event handler with a given name to only run once then unbind itself.\n\t     | eve.once(\"login\", f);\n\t     | eve(\"login\"); // triggers f\n\t     | eve(\"login\"); // no listeners\n\t     * Use @eve to trigger the listener.\n\t     **\n\t     > Arguments\n\t     **\n\t     - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards\n\t     - f (function) event handler function\n\t     **\n\t     = (function) same return function as @eve.on\n\t    \\*/\n\t    eve.once = function (name, f) {\n\t        var f2 = function () {\n\t            eve.off(name, f2);\n\t            return f.apply(this, arguments);\n\t        };\n\t        return eve.on(name, f2);\n\t    };\n\t    /*\\\n\t     * eve.version\n\t     [ property (string) ]\n\t     **\n\t     * Current version of the library.\n\t    \\*/\n\t    eve.version = version;\n\t    eve.toString = function () {\n\t        return \"You are running Eve \" + version;\n\t    };\n\t    (typeof module != \"undefined\" && module.exports) ? (module.exports = eve) : ( true ? (!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { return eve; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))) : (glob.eve = eve));\n\t})(this);\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) {\n\t    if (R && !R.svg) {\n\t        return;\n\t    }\n\n\t    var has = \"hasOwnProperty\",\n\t        Str = String,\n\t        toFloat = parseFloat,\n\t        toInt = parseInt,\n\t        math = Math,\n\t        mmax = math.max,\n\t        abs = math.abs,\n\t        pow = math.pow,\n\t        separator = /[, ]+/,\n\t        eve = R.eve,\n\t        E = \"\",\n\t        S = \" \";\n\t    var xlink = \"http://www.w3.org/1999/xlink\",\n\t        markers = {\n\t            block: \"M5,0 0,2.5 5,5z\",\n\t            classic: \"M5,0 0,2.5 5,5 3.5,3 3.5,2z\",\n\t            diamond: \"M2.5,0 5,2.5 2.5,5 0,2.5z\",\n\t            open: \"M6,1 1,3.5 6,6\",\n\t            oval: \"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z\"\n\t        },\n\t        markerCounter = {};\n\t    R.toString = function () {\n\t        return  \"Your browser supports SVG.\\nYou are running Rapha\\xebl \" + this.version;\n\t    };\n\t    var $ = function (el, attr) {\n\t        if (attr) {\n\t            if (typeof el == \"string\") {\n\t                el = $(el);\n\t            }\n\t            for (var key in attr) if (attr[has](key)) {\n\t                if (key.substring(0, 6) == \"xlink:\") {\n\t                    el.setAttributeNS(xlink, key.substring(6), Str(attr[key]));\n\t                } else {\n\t                    el.setAttribute(key, Str(attr[key]));\n\t                }\n\t            }\n\t        } else {\n\t            el = R._g.doc.createElementNS(\"http://www.w3.org/2000/svg\", el);\n\t            el.style && (el.style.webkitTapHighlightColor = \"rgba(0,0,0,0)\");\n\t        }\n\t        return el;\n\t    },\n\t    addGradientFill = function (element, gradient) {\n\t        var type = \"linear\",\n\t            id = element.id + gradient,\n\t            fx = .5, fy = .5,\n\t            o = element.node,\n\t            SVG = element.paper,\n\t            s = o.style,\n\t            el = R._g.doc.getElementById(id);\n\t        if (!el) {\n\t            gradient = Str(gradient).replace(R._radial_gradient, function (all, _fx, _fy) {\n\t                type = \"radial\";\n\t                if (_fx && _fy) {\n\t                    fx = toFloat(_fx);\n\t                    fy = toFloat(_fy);\n\t                    var dir = ((fy > .5) * 2 - 1);\n\t                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&\n\t                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&\n\t                        fy != .5 &&\n\t                        (fy = fy.toFixed(5) - 1e-5 * dir);\n\t                }\n\t                return E;\n\t            });\n\t            gradient = gradient.split(/\\s*\\-\\s*/);\n\t            if (type == \"linear\") {\n\t                var angle = gradient.shift();\n\t                angle = -toFloat(angle);\n\t                if (isNaN(angle)) {\n\t                    return null;\n\t                }\n\t                var vector = [0, 0, math.cos(R.rad(angle)), math.sin(R.rad(angle))],\n\t                    max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);\n\t                vector[2] *= max;\n\t                vector[3] *= max;\n\t                if (vector[2] < 0) {\n\t                    vector[0] = -vector[2];\n\t                    vector[2] = 0;\n\t                }\n\t                if (vector[3] < 0) {\n\t                    vector[1] = -vector[3];\n\t                    vector[3] = 0;\n\t                }\n\t            }\n\t            var dots = R._parseDots(gradient);\n\t            if (!dots) {\n\t                return null;\n\t            }\n\t            id = id.replace(/[\\(\\)\\s,\\xb0#]/g, \"_\");\n\n\t            if (element.gradient && id != element.gradient.id) {\n\t                SVG.defs.removeChild(element.gradient);\n\t                delete element.gradient;\n\t            }\n\n\t            if (!element.gradient) {\n\t                el = $(type + \"Gradient\", {id: id});\n\t                element.gradient = el;\n\t                $(el, type == \"radial\" ? {\n\t                    fx: fx,\n\t                    fy: fy\n\t                } : {\n\t                    x1: vector[0],\n\t                    y1: vector[1],\n\t                    x2: vector[2],\n\t                    y2: vector[3],\n\t                    gradientTransform: element.matrix.invert()\n\t                });\n\t                SVG.defs.appendChild(el);\n\t                for (var i = 0, ii = dots.length; i < ii; i++) {\n\t                    el.appendChild($(\"stop\", {\n\t                        offset: dots[i].offset ? dots[i].offset : i ? \"100%\" : \"0%\",\n\t                        \"stop-color\": dots[i].color || \"#fff\",\n\t                        \"stop-opacity\": isFinite(dots[i].opacity) ? dots[i].opacity : 1\n\t                    }));\n\t                }\n\t            }\n\t        }\n\t        $(o, {\n\t            fill: fillurl(id),\n\t            opacity: 1,\n\t            \"fill-opacity\": 1\n\t        });\n\t        s.fill = E;\n\t        s.opacity = 1;\n\t        s.fillOpacity = 1;\n\t        return 1;\n\t    },\n\t    isIE9or10 = function () {\n\t      var mode = document.documentMode;\n\t      return mode && (mode === 9 || mode === 10);\n\t    },\n\t    fillurl = function (id) {\n\t      if (isIE9or10()) {\n\t          return \"url('#\" + id + \"')\";\n\t      }\n\t      var location = document.location;\n\t      var locationString = (\n\t          location.protocol + '//' +\n\t          location.host +\n\t          location.pathname +\n\t          location.search\n\t      );\n\t      return \"url('\" + locationString + \"#\" + id + \"')\";\n\t    },\n\t    updatePosition = function (o) {\n\t        var bbox = o.getBBox(1);\n\t        $(o.pattern, {patternTransform: o.matrix.invert() + \" translate(\" + bbox.x + \",\" + bbox.y + \")\"});\n\t    },\n\t    addArrow = function (o, value, isEnd) {\n\t        if (o.type == \"path\") {\n\t            var values = Str(value).toLowerCase().split(\"-\"),\n\t                p = o.paper,\n\t                se = isEnd ? \"end\" : \"start\",\n\t                node = o.node,\n\t                attrs = o.attrs,\n\t                stroke = attrs[\"stroke-width\"],\n\t                i = values.length,\n\t                type = \"classic\",\n\t                from,\n\t                to,\n\t                dx,\n\t                refX,\n\t                attr,\n\t                w = 3,\n\t                h = 3,\n\t                t = 5;\n\t            while (i--) {\n\t                switch (values[i]) {\n\t                    case \"block\":\n\t                    case \"classic\":\n\t                    case \"oval\":\n\t                    case \"diamond\":\n\t                    case \"open\":\n\t                    case \"none\":\n\t                        type = values[i];\n\t                        break;\n\t                    case \"wide\": h = 5; break;\n\t                    case \"narrow\": h = 2; break;\n\t                    case \"long\": w = 5; break;\n\t                    case \"short\": w = 2; break;\n\t                }\n\t            }\n\t            if (type == \"open\") {\n\t                w += 2;\n\t                h += 2;\n\t                t += 2;\n\t                dx = 1;\n\t                refX = isEnd ? 4 : 1;\n\t                attr = {\n\t                    fill: \"none\",\n\t                    stroke: attrs.stroke\n\t                };\n\t            } else {\n\t                refX = dx = w / 2;\n\t                attr = {\n\t                    fill: attrs.stroke,\n\t                    stroke: \"none\"\n\t                };\n\t            }\n\t            if (o._.arrows) {\n\t                if (isEnd) {\n\t                    o._.arrows.endPath && markerCounter[o._.arrows.endPath]--;\n\t                    o._.arrows.endMarker && markerCounter[o._.arrows.endMarker]--;\n\t                } else {\n\t                    o._.arrows.startPath && markerCounter[o._.arrows.startPath]--;\n\t                    o._.arrows.startMarker && markerCounter[o._.arrows.startMarker]--;\n\t                }\n\t            } else {\n\t                o._.arrows = {};\n\t            }\n\t            if (type != \"none\") {\n\t                var pathId = \"raphael-marker-\" + type,\n\t                    markerId = \"raphael-marker-\" + se + type + w + h + \"-obj\" + o.id;\n\t                if (!R._g.doc.getElementById(pathId)) {\n\t                    p.defs.appendChild($($(\"path\"), {\n\t                        \"stroke-linecap\": \"round\",\n\t                        d: markers[type],\n\t                        id: pathId\n\t                    }));\n\t                    markerCounter[pathId] = 1;\n\t                } else {\n\t                    markerCounter[pathId]++;\n\t                }\n\t                var marker = R._g.doc.getElementById(markerId),\n\t                    use;\n\t                if (!marker) {\n\t                    marker = $($(\"marker\"), {\n\t                        id: markerId,\n\t                        markerHeight: h,\n\t                        markerWidth: w,\n\t                        orient: \"auto\",\n\t                        refX: refX,\n\t                        refY: h / 2\n\t                    });\n\t                    use = $($(\"use\"), {\n\t                        \"xlink:href\": \"#\" + pathId,\n\t                        transform: (isEnd ? \"rotate(180 \" + w / 2 + \" \" + h / 2 + \") \" : E) + \"scale(\" + w / t + \",\" + h / t + \")\",\n\t                        \"stroke-width\": (1 / ((w / t + h / t) / 2)).toFixed(4)\n\t                    });\n\t                    marker.appendChild(use);\n\t                    p.defs.appendChild(marker);\n\t                    markerCounter[markerId] = 1;\n\t                } else {\n\t                    markerCounter[markerId]++;\n\t                    use = marker.getElementsByTagName(\"use\")[0];\n\t                }\n\t                $(use, attr);\n\t                var delta = dx * (type != \"diamond\" && type != \"oval\");\n\t                if (isEnd) {\n\t                    from = o._.arrows.startdx * stroke || 0;\n\t                    to = R.getTotalLength(attrs.path) - delta * stroke;\n\t                } else {\n\t                    from = delta * stroke;\n\t                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\n\t                }\n\t                attr = {};\n\t                attr[\"marker-\" + se] = \"url(#\" + markerId + \")\";\n\t                if (to || from) {\n\t                    attr.d = R.getSubpath(attrs.path, from, to);\n\t                }\n\t                $(node, attr);\n\t                o._.arrows[se + \"Path\"] = pathId;\n\t                o._.arrows[se + \"Marker\"] = markerId;\n\t                o._.arrows[se + \"dx\"] = delta;\n\t                o._.arrows[se + \"Type\"] = type;\n\t                o._.arrows[se + \"String\"] = value;\n\t            } else {\n\t                if (isEnd) {\n\t                    from = o._.arrows.startdx * stroke || 0;\n\t                    to = R.getTotalLength(attrs.path) - from;\n\t                } else {\n\t                    from = 0;\n\t                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);\n\t                }\n\t                o._.arrows[se + \"Path\"] && $(node, {d: R.getSubpath(attrs.path, from, to)});\n\t                delete o._.arrows[se + \"Path\"];\n\t                delete o._.arrows[se + \"Marker\"];\n\t                delete o._.arrows[se + \"dx\"];\n\t                delete o._.arrows[se + \"Type\"];\n\t                delete o._.arrows[se + \"String\"];\n\t            }\n\t            for (attr in markerCounter) if (markerCounter[has](attr) && !markerCounter[attr]) {\n\t                var item = R._g.doc.getElementById(attr);\n\t                item && item.parentNode.removeChild(item);\n\t            }\n\t        }\n\t    },\n\t    dasharray = {\n\t        \"-\": [3, 1],\n\t        \".\": [1, 1],\n\t        \"-.\": [3, 1, 1, 1],\n\t        \"-..\": [3, 1, 1, 1, 1, 1],\n\t        \". \": [1, 3],\n\t        \"- \": [4, 3],\n\t        \"--\": [8, 3],\n\t        \"- .\": [4, 3, 1, 3],\n\t        \"--.\": [8, 3, 1, 3],\n\t        \"--..\": [8, 3, 1, 3, 1, 3]\n\t    },\n\t    addDashes = function (o, value, params) {\n\t        value = dasharray[Str(value).toLowerCase()];\n\t        if (value) {\n\t            var width = o.attrs[\"stroke-width\"] || \"1\",\n\t                butt = {round: width, square: width, butt: 0}[o.attrs[\"stroke-linecap\"] || params[\"stroke-linecap\"]] || 0,\n\t                dashes = [],\n\t                i = value.length;\n\t            while (i--) {\n\t                dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;\n\t            }\n\t            $(o.node, {\"stroke-dasharray\": dashes.join(\",\")});\n\t        }\n\t        else {\n\t          $(o.node, {\"stroke-dasharray\": \"none\"});\n\t        }\n\t    },\n\t    setFillAndStroke = function (o, params) {\n\t        var node = o.node,\n\t            attrs = o.attrs,\n\t            vis = node.style.visibility;\n\t        node.style.visibility = \"hidden\";\n\t        for (var att in params) {\n\t            if (params[has](att)) {\n\t                if (!R._availableAttrs[has](att)) {\n\t                    continue;\n\t                }\n\t                var value = params[att];\n\t                attrs[att] = value;\n\t                switch (att) {\n\t                    case \"blur\":\n\t                        o.blur(value);\n\t                        break;\n\t                    case \"title\":\n\t                        var title = node.getElementsByTagName(\"title\");\n\n\t                        // Use the existing <title>.\n\t                        if (title.length && (title = title[0])) {\n\t                          title.firstChild.nodeValue = value;\n\t                        } else {\n\t                          title = $(\"title\");\n\t                          var val = R._g.doc.createTextNode(value);\n\t                          title.appendChild(val);\n\t                          node.appendChild(title);\n\t                        }\n\t                        break;\n\t                    case \"href\":\n\t                    case \"target\":\n\t                        var pn = node.parentNode;\n\t                        if (pn.tagName.toLowerCase() != \"a\") {\n\t                            var hl = $(\"a\");\n\t                            pn.insertBefore(hl, node);\n\t                            hl.appendChild(node);\n\t                            pn = hl;\n\t                        }\n\t                        if (att == \"target\") {\n\t                            pn.setAttributeNS(xlink, \"show\", value == \"blank\" ? \"new\" : value);\n\t                        } else {\n\t                            pn.setAttributeNS(xlink, att, value);\n\n\t                        }\n\t                        break;\n\t                    case \"cursor\":\n\t                        node.style.cursor = value;\n\t                        break;\n\t                    case \"transform\":\n\t                        o.transform(value);\n\t                        break;\n\t                    case \"arrow-start\":\n\t                        addArrow(o, value);\n\t                        break;\n\t                    case \"arrow-end\":\n\t                        addArrow(o, value, 1);\n\t                        break;\n\t                    case \"clip-rect\":\n\t                        var rect = Str(value).split(separator);\n\t                        if (rect.length == 4) {\n\t                            o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);\n\t                            var el = $(\"clipPath\"),\n\t                                rc = $(\"rect\");\n\t                            el.id = R.createUUID();\n\t                            $(rc, {\n\t                                x: rect[0],\n\t                                y: rect[1],\n\t                                width: rect[2],\n\t                                height: rect[3]\n\t                            });\n\t                            el.appendChild(rc);\n\t                            o.paper.defs.appendChild(el);\n\t                            $(node, {\"clip-path\": \"url(#\" + el.id + \")\"});\n\t                            o.clip = rc;\n\t                        }\n\t                        if (!value) {\n\t                            var path = node.getAttribute(\"clip-path\");\n\t                            if (path) {\n\t                                var clip = R._g.doc.getElementById(path.replace(/(^url\\(#|\\)$)/g, E));\n\t                                clip && clip.parentNode.removeChild(clip);\n\t                                $(node, {\"clip-path\": E});\n\t                                delete o.clip;\n\t                            }\n\t                        }\n\t                    break;\n\t                    case \"path\":\n\t                        if (o.type == \"path\") {\n\t                            $(node, {d: value ? attrs.path = R._pathToAbsolute(value) : \"M0,0\"});\n\t                            o._.dirty = 1;\n\t                            if (o._.arrows) {\n\t                                \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n\t                                \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n\t                            }\n\t                        }\n\t                        break;\n\t                    case \"width\":\n\t                        node.setAttribute(att, value);\n\t                        o._.dirty = 1;\n\t                        if (attrs.fx) {\n\t                            att = \"x\";\n\t                            value = attrs.x;\n\t                        } else {\n\t                            break;\n\t                        }\n\t                    case \"x\":\n\t                        if (attrs.fx) {\n\t                            value = -attrs.x - (attrs.width || 0);\n\t                        }\n\t                    case \"rx\":\n\t                        if (att == \"rx\" && o.type == \"rect\") {\n\t                            break;\n\t                        }\n\t                    case \"cx\":\n\t                        node.setAttribute(att, value);\n\t                        o.pattern && updatePosition(o);\n\t                        o._.dirty = 1;\n\t                        break;\n\t                    case \"height\":\n\t                        node.setAttribute(att, value);\n\t                        o._.dirty = 1;\n\t                        if (attrs.fy) {\n\t                            att = \"y\";\n\t                            value = attrs.y;\n\t                        } else {\n\t                            break;\n\t                        }\n\t                    case \"y\":\n\t                        if (attrs.fy) {\n\t                            value = -attrs.y - (attrs.height || 0);\n\t                        }\n\t                    case \"ry\":\n\t                        if (att == \"ry\" && o.type == \"rect\") {\n\t                            break;\n\t                        }\n\t                    case \"cy\":\n\t                        node.setAttribute(att, value);\n\t                        o.pattern && updatePosition(o);\n\t                        o._.dirty = 1;\n\t                        break;\n\t                    case \"r\":\n\t                        if (o.type == \"rect\") {\n\t                            $(node, {rx: value, ry: value});\n\t                        } else {\n\t                            node.setAttribute(att, value);\n\t                        }\n\t                        o._.dirty = 1;\n\t                        break;\n\t                    case \"src\":\n\t                        if (o.type == \"image\") {\n\t                            node.setAttributeNS(xlink, \"href\", value);\n\t                        }\n\t                        break;\n\t                    case \"stroke-width\":\n\t                        if (o._.sx != 1 || o._.sy != 1) {\n\t                            value /= mmax(abs(o._.sx), abs(o._.sy)) || 1;\n\t                        }\n\t                        node.setAttribute(att, value);\n\t                        if (attrs[\"stroke-dasharray\"]) {\n\t                            addDashes(o, attrs[\"stroke-dasharray\"], params);\n\t                        }\n\t                        if (o._.arrows) {\n\t                            \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n\t                            \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n\t                        }\n\t                        break;\n\t                    case \"stroke-dasharray\":\n\t                        addDashes(o, value, params);\n\t                        break;\n\t                    case \"fill\":\n\t                        var isURL = Str(value).match(R._ISURL);\n\t                        if (isURL) {\n\t                            el = $(\"pattern\");\n\t                            var ig = $(\"image\");\n\t                            el.id = R.createUUID();\n\t                            $(el, {x: 0, y: 0, patternUnits: \"userSpaceOnUse\", height: 1, width: 1});\n\t                            $(ig, {x: 0, y: 0, \"xlink:href\": isURL[1]});\n\t                            el.appendChild(ig);\n\n\t                            (function (el) {\n\t                                R._preload(isURL[1], function () {\n\t                                    var w = this.offsetWidth,\n\t                                        h = this.offsetHeight;\n\t                                    $(el, {width: w, height: h});\n\t                                    $(ig, {width: w, height: h});\n\t                                });\n\t                            })(el);\n\t                            o.paper.defs.appendChild(el);\n\t                            $(node, {fill: \"url(#\" + el.id + \")\"});\n\t                            o.pattern = el;\n\t                            o.pattern && updatePosition(o);\n\t                            break;\n\t                        }\n\t                        var clr = R.getRGB(value);\n\t                        if (!clr.error) {\n\t                            delete params.gradient;\n\t                            delete attrs.gradient;\n\t                            !R.is(attrs.opacity, \"undefined\") &&\n\t                                R.is(params.opacity, \"undefined\") &&\n\t                                $(node, {opacity: attrs.opacity});\n\t                            !R.is(attrs[\"fill-opacity\"], \"undefined\") &&\n\t                                R.is(params[\"fill-opacity\"], \"undefined\") &&\n\t                                $(node, {\"fill-opacity\": attrs[\"fill-opacity\"]});\n\t                        } else if ((o.type == \"circle\" || o.type == \"ellipse\" || Str(value).charAt() != \"r\") && addGradientFill(o, value)) {\n\t                            if (\"opacity\" in attrs || \"fill-opacity\" in attrs) {\n\t                                var gradient = R._g.doc.getElementById(node.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g, E));\n\t                                if (gradient) {\n\t                                    var stops = gradient.getElementsByTagName(\"stop\");\n\t                                    $(stops[stops.length - 1], {\"stop-opacity\": (\"opacity\" in attrs ? attrs.opacity : 1) * (\"fill-opacity\" in attrs ? attrs[\"fill-opacity\"] : 1)});\n\t                                }\n\t                            }\n\t                            attrs.gradient = value;\n\t                            attrs.fill = \"none\";\n\t                            break;\n\t                        }\n\t                        clr[has](\"opacity\") && $(node, {\"fill-opacity\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\n\t                    case \"stroke\":\n\t                        clr = R.getRGB(value);\n\t                        node.setAttribute(att, clr.hex);\n\t                        att == \"stroke\" && clr[has](\"opacity\") && $(node, {\"stroke-opacity\": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});\n\t                        if (att == \"stroke\" && o._.arrows) {\n\t                            \"startString\" in o._.arrows && addArrow(o, o._.arrows.startString);\n\t                            \"endString\" in o._.arrows && addArrow(o, o._.arrows.endString, 1);\n\t                        }\n\t                        break;\n\t                    case \"gradient\":\n\t                        (o.type == \"circle\" || o.type == \"ellipse\" || Str(value).charAt() != \"r\") && addGradientFill(o, value);\n\t                        break;\n\t                    case \"opacity\":\n\t                        if (attrs.gradient && !attrs[has](\"stroke-opacity\")) {\n\t                            $(node, {\"stroke-opacity\": value > 1 ? value / 100 : value});\n\t                        }\n\t                        // fall\n\t                    case \"fill-opacity\":\n\t                        if (attrs.gradient) {\n\t                            gradient = R._g.doc.getElementById(node.getAttribute(\"fill\").replace(/^url\\(#|\\)$/g, E));\n\t                            if (gradient) {\n\t                                stops = gradient.getElementsByTagName(\"stop\");\n\t                                $(stops[stops.length - 1], {\"stop-opacity\": value});\n\t                            }\n\t                            break;\n\t                        }\n\t                    default:\n\t                        att == \"font-size\" && (value = toInt(value, 10) + \"px\");\n\t                        var cssrule = att.replace(/(\\-.)/g, function (w) {\n\t                            return w.substring(1).toUpperCase();\n\t                        });\n\t                        node.style[cssrule] = value;\n\t                        o._.dirty = 1;\n\t                        node.setAttribute(att, value);\n\t                        break;\n\t                }\n\t            }\n\t        }\n\n\t        tuneText(o, params);\n\t        node.style.visibility = vis;\n\t    },\n\t    leading = 1.2,\n\t    tuneText = function (el, params) {\n\t        if (el.type != \"text\" || !(params[has](\"text\") || params[has](\"font\") || params[has](\"font-size\") || params[has](\"x\") || params[has](\"y\"))) {\n\t            return;\n\t        }\n\t        var a = el.attrs,\n\t            node = el.node,\n\t            fontSize = node.firstChild ? toInt(R._g.doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue(\"font-size\"), 10) : 10;\n\n\t        if (params[has](\"text\")) {\n\t            a.text = params.text;\n\t            while (node.firstChild) {\n\t                node.removeChild(node.firstChild);\n\t            }\n\t            var texts = Str(params.text).split(\"\\n\"),\n\t                tspans = [],\n\t                tspan;\n\t            for (var i = 0, ii = texts.length; i < ii; i++) {\n\t                tspan = $(\"tspan\");\n\t                i && $(tspan, {dy: fontSize * leading, x: a.x});\n\t                tspan.appendChild(R._g.doc.createTextNode(texts[i]));\n\t                node.appendChild(tspan);\n\t                tspans[i] = tspan;\n\t            }\n\t        } else {\n\t            tspans = node.getElementsByTagName(\"tspan\");\n\t            for (i = 0, ii = tspans.length; i < ii; i++) if (i) {\n\t                $(tspans[i], {dy: fontSize * leading, x: a.x});\n\t            } else {\n\t                $(tspans[0], {dy: 0});\n\t            }\n\t        }\n\t        $(node, {x: a.x, y: a.y});\n\t        el._.dirty = 1;\n\t        var bb = el._getBBox(),\n\t            dif = a.y - (bb.y + bb.height / 2);\n\t        dif && R.is(dif, \"finite\") && $(tspans[0], {dy: dif});\n\t    },\n\t    getRealNode = function (node) {\n\t        if (node.parentNode && node.parentNode.tagName.toLowerCase() === \"a\") {\n\t            return node.parentNode;\n\t        } else {\n\t            return node;\n\t        }\n\t    },\n\t    Element = function (node, svg) {\n\t        var X = 0,\n\t            Y = 0;\n\t        /*\\\n\t         * Element.node\n\t         [ property (object) ]\n\t         **\n\t         * Gives you a reference to the DOM object, so you can assign event handlers or just mess around.\n\t         **\n\t         * Note: Donâ€™t mess with it.\n\t         > Usage\n\t         | // draw a circle at coordinate 10,10 with radius of 10\n\t         | var c = paper.circle(10, 10, 10);\n\t         | c.node.onclick = function () {\n\t         |     c.attr(\"fill\", \"red\");\n\t         | };\n\t        \\*/\n\t        this[0] = this.node = node;\n\t        /*\\\n\t         * Element.raphael\n\t         [ property (object) ]\n\t         **\n\t         * Internal reference to @Raphael object. In case it is not available.\n\t         > Usage\n\t         | Raphael.el.red = function () {\n\t         |     var hsb = this.paper.raphael.rgb2hsb(this.attr(\"fill\"));\n\t         |     hsb.h = 1;\n\t         |     this.attr({fill: this.paper.raphael.hsb2rgb(hsb).hex});\n\t         | }\n\t        \\*/\n\t        node.raphael = true;\n\t        /*\\\n\t         * Element.id\n\t         [ property (number) ]\n\t         **\n\t         * Unique id of the element. Especially useful when you want to listen to events of the element,\n\t         * because all events are fired in format `<module>.<action>.<id>`. Also useful for @Paper.getById method.\n\t        \\*/\n\t        this.id = guid();\n\t        node.raphaelid = this.id;\n\n\t        /**\n\t        * Method that returns a 5 letter/digit id, enough for 36^5 = 60466176 elements\n\t        * @returns {string} id\n\t        */\n\t        function guid() {\n\t            return (\"0000\" + (Math.random()*Math.pow(36,5) << 0).toString(36)).slice(-5);\n\t        }\n\n\t        this.matrix = R.matrix();\n\t        this.realPath = null;\n\t        /*\\\n\t         * Element.paper\n\t         [ property (object) ]\n\t         **\n\t         * Internal reference to â€œpaperâ€ where object drawn. Mainly for use in plugins and element extensions.\n\t         > Usage\n\t         | Raphael.el.cross = function () {\n\t         |     this.attr({fill: \"red\"});\n\t         |     this.paper.path(\"M10,10L50,50M50,10L10,50\")\n\t         |         .attr({stroke: \"red\"});\n\t         | }\n\t        \\*/\n\t        this.paper = svg;\n\t        this.attrs = this.attrs || {};\n\t        this._ = {\n\t            transform: [],\n\t            sx: 1,\n\t            sy: 1,\n\t            deg: 0,\n\t            dx: 0,\n\t            dy: 0,\n\t            dirty: 1\n\t        };\n\t        !svg.bottom && (svg.bottom = this);\n\t        /*\\\n\t         * Element.prev\n\t         [ property (object) ]\n\t         **\n\t         * Reference to the previous element in the hierarchy.\n\t        \\*/\n\t        this.prev = svg.top;\n\t        svg.top && (svg.top.next = this);\n\t        svg.top = this;\n\t        /*\\\n\t         * Element.next\n\t         [ property (object) ]\n\t         **\n\t         * Reference to the next element in the hierarchy.\n\t        \\*/\n\t        this.next = null;\n\t    },\n\t    elproto = R.el;\n\n\t    Element.prototype = elproto;\n\t    elproto.constructor = Element;\n\n\t    R._engine.path = function (pathString, SVG) {\n\t        var el = $(\"path\");\n\t        SVG.canvas && SVG.canvas.appendChild(el);\n\t        var p = new Element(el, SVG);\n\t        p.type = \"path\";\n\t        setFillAndStroke(p, {\n\t            fill: \"none\",\n\t            stroke: \"#000\",\n\t            path: pathString\n\t        });\n\t        return p;\n\t    };\n\t    /*\\\n\t     * Element.rotate\n\t     [ method ]\n\t     **\n\t     * Deprecated! Use @Element.transform instead.\n\t     * Adds rotation by given angle around given point to the list of\n\t     * transformations of the element.\n\t     > Parameters\n\t     - deg (number) angle in degrees\n\t     - cx (number) #optional x coordinate of the centre of rotation\n\t     - cy (number) #optional y coordinate of the centre of rotation\n\t     * If cx & cy arenâ€™t specified centre of the shape is used as a point of rotation.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.rotate = function (deg, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        deg = Str(deg).split(separator);\n\t        if (deg.length - 1) {\n\t            cx = toFloat(deg[1]);\n\t            cy = toFloat(deg[2]);\n\t        }\n\t        deg = toFloat(deg[0]);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t            cx = bbox.x + bbox.width / 2;\n\t            cy = bbox.y + bbox.height / 2;\n\t        }\n\t        this.transform(this._.transform.concat([[\"r\", deg, cx, cy]]));\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.scale\n\t     [ method ]\n\t     **\n\t     * Deprecated! Use @Element.transform instead.\n\t     * Adds scale by given amount relative to given point to the list of\n\t     * transformations of the element.\n\t     > Parameters\n\t     - sx (number) horisontal scale amount\n\t     - sy (number) vertical scale amount\n\t     - cx (number) #optional x coordinate of the centre of scale\n\t     - cy (number) #optional y coordinate of the centre of scale\n\t     * If cx & cy arenâ€™t specified centre of the shape is used instead.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.scale = function (sx, sy, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        sx = Str(sx).split(separator);\n\t        if (sx.length - 1) {\n\t            sy = toFloat(sx[1]);\n\t            cx = toFloat(sx[2]);\n\t            cy = toFloat(sx[3]);\n\t        }\n\t        sx = toFloat(sx[0]);\n\t        (sy == null) && (sy = sx);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t        }\n\t        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\n\t        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\n\t        this.transform(this._.transform.concat([[\"s\", sx, sy, cx, cy]]));\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.translate\n\t     [ method ]\n\t     **\n\t     * Deprecated! Use @Element.transform instead.\n\t     * Adds translation by given amount to the list of transformations of the element.\n\t     > Parameters\n\t     - dx (number) horisontal shift\n\t     - dy (number) vertical shift\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.translate = function (dx, dy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        dx = Str(dx).split(separator);\n\t        if (dx.length - 1) {\n\t            dy = toFloat(dx[1]);\n\t        }\n\t        dx = toFloat(dx[0]) || 0;\n\t        dy = +dy || 0;\n\t        this.transform(this._.transform.concat([[\"t\", dx, dy]]));\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.transform\n\t     [ method ]\n\t     **\n\t     * Adds transformation to the element which is separate to other attributes,\n\t     * i.e. translation doesnâ€™t change `x` or `y` of the rectange. The format\n\t     * of transformation string is similar to the path string syntax:\n\t     | \"t100,100r30,100,100s2,2,100,100r45s1.5\"\n\t     * Each letter is a command. There are four commands: `t` is for translate, `r` is for rotate, `s` is for\n\t     * scale and `m` is for matrix.\n\t     *\n\t     * There are also alternative â€œabsoluteâ€ translation, rotation and scale: `T`, `R` and `S`. They will not take previous transformation into account. For example, `...T100,0` will always move element 100 px horisontally, while `...t100,0` could move it vertically if there is `r90` before. Just compare results of `r90t100,0` and `r90T100,0`.\n\t     *\n\t     * So, the example line above could be read like â€œtranslate by 100, 100; rotate 30Â° around 100, 100; scale twice around 100, 100;\n\t     * rotate 45Â° around centre; scale 1.5 times relative to centreâ€. As you can see rotate and scale commands have origin\n\t     * coordinates as optional parameters, the default is the centre point of the element.\n\t     * Matrix accepts six parameters.\n\t     > Usage\n\t     | var el = paper.rect(10, 20, 300, 200);\n\t     | // translate 100, 100, rotate 45Â°, translate -100, 0\n\t     | el.transform(\"t100,100r45t-100,0\");\n\t     | // if you want you can append or prepend transformations\n\t     | el.transform(\"...t50,50\");\n\t     | el.transform(\"s2...\");\n\t     | // or even wrap\n\t     | el.transform(\"t50,50...t-50-50\");\n\t     | // to reset transformation call method with empty string\n\t     | el.transform(\"\");\n\t     | // to get current value call it without parameters\n\t     | console.log(el.transform());\n\t     > Parameters\n\t     - tstr (string) #optional transformation string\n\t     * If tstr isnâ€™t specified\n\t     = (string) current transformation string\n\t     * else\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.transform = function (tstr) {\n\t        var _ = this._;\n\t        if (tstr == null) {\n\t            return _.transform;\n\t        }\n\t        R._extractTransform(this, tstr);\n\n\t        this.clip && $(this.clip, {transform: this.matrix.invert()});\n\t        this.pattern && updatePosition(this);\n\t        this.node && $(this.node, {transform: this.matrix});\n\n\t        if (_.sx != 1 || _.sy != 1) {\n\t            var sw = this.attrs[has](\"stroke-width\") ? this.attrs[\"stroke-width\"] : 1;\n\t            this.attr({\"stroke-width\": sw});\n\t        }\n\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.hide\n\t     [ method ]\n\t     **\n\t     * Makes element invisible. See @Element.show.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.hide = function () {\n\t        if(!this.removed) this.node.style.display = \"none\";\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.show\n\t     [ method ]\n\t     **\n\t     * Makes element visible. See @Element.hide.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.show = function () {\n\t        if(!this.removed) this.node.style.display = \"\";\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.remove\n\t     [ method ]\n\t     **\n\t     * Removes element from the paper.\n\t    \\*/\n\t    elproto.remove = function () {\n\t        var node = getRealNode(this.node);\n\t        if (this.removed || !node.parentNode) {\n\t            return;\n\t        }\n\t        var paper = this.paper;\n\t        paper.__set__ && paper.__set__.exclude(this);\n\t        eve.unbind(\"raphael.*.*.\" + this.id);\n\t        if (this.gradient) {\n\t            paper.defs.removeChild(this.gradient);\n\t        }\n\t        R._tear(this, paper);\n\n\t        node.parentNode.removeChild(node);\n\n\t        // Remove custom data for element\n\t        this.removeData();\n\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t        this.removed = true;\n\t    };\n\t    elproto._getBBox = function () {\n\t        if (this.node.style.display == \"none\") {\n\t            this.show();\n\t            var hide = true;\n\t        }\n\t        var canvasHidden = false,\n\t            containerStyle;\n\t        if (this.paper.canvas.parentElement) {\n\t          containerStyle = this.paper.canvas.parentElement.style;\n\t        } //IE10+ can't find parentElement\n\t        else if (this.paper.canvas.parentNode) {\n\t          containerStyle = this.paper.canvas.parentNode.style;\n\t        }\n\n\t        if(containerStyle && containerStyle.display == \"none\") {\n\t          canvasHidden = true;\n\t          containerStyle.display = \"\";\n\t        }\n\t        var bbox = {};\n\t        try {\n\t            bbox = this.node.getBBox();\n\t        } catch(e) {\n\t            // Firefox 3.0.x, 25.0.1 (probably more versions affected) play badly here - possible fix\n\t            bbox = {\n\t                x: this.node.clientLeft,\n\t                y: this.node.clientTop,\n\t                width: this.node.clientWidth,\n\t                height: this.node.clientHeight\n\t            }\n\t        } finally {\n\t            bbox = bbox || {};\n\t            if(canvasHidden){\n\t              containerStyle.display = \"none\";\n\t            }\n\t        }\n\t        hide && this.hide();\n\t        return bbox;\n\t    };\n\t    /*\\\n\t     * Element.attr\n\t     [ method ]\n\t     **\n\t     * Sets the attributes of the element.\n\t     > Parameters\n\t     - attrName (string) attributeâ€™s name\n\t     - value (string) value\n\t     * or\n\t     - params (object) object of name/value pairs\n\t     * or\n\t     - attrName (string) attributeâ€™s name\n\t     * or\n\t     - attrNames (array) in this case method returns array of current values for given attribute names\n\t     = (object) @Element if attrsName & value or params are passed in.\n\t     = (...) value of the attribute if only attrsName is passed in.\n\t     = (array) array of values of the attribute if attrsNames is passed in.\n\t     = (object) object of attributes if nothing is passed in.\n\t     > Possible parameters\n\t     # <p>Please refer to the <a href=\"http://www.w3.org/TR/SVG/\" title=\"The W3C Recommendation for the SVG language describes these properties in detail.\">SVG specification</a> for an explanation of these parameters.</p>\n\t     o arrow-end (string) arrowhead on the end of the path. The format for string is `<type>[-<width>[-<length>]]`. Possible types: `classic`, `block`, `open`, `oval`, `diamond`, `none`, width: `wide`, `narrow`, `medium`, length: `long`, `short`, `midium`.\n\t     o clip-rect (string) comma or space separated values: x, y, width and height\n\t     o cursor (string) CSS type of the cursor\n\t     o cx (number) the x-axis coordinate of the center of the circle, or ellipse\n\t     o cy (number) the y-axis coordinate of the center of the circle, or ellipse\n\t     o fill (string) colour, gradient or image\n\t     o fill-opacity (number)\n\t     o font (string)\n\t     o font-family (string)\n\t     o font-size (number) font size in pixels\n\t     o font-weight (string)\n\t     o height (number)\n\t     o href (string) URL, if specified element behaves as hyperlink\n\t     o opacity (number)\n\t     o path (string) SVG path string format\n\t     o r (number) radius of the circle, ellipse or rounded corner on the rect\n\t     o rx (number) horisontal radius of the ellipse\n\t     o ry (number) vertical radius of the ellipse\n\t     o src (string) image URL, only works for @Element.image element\n\t     o stroke (string) stroke colour\n\t     o stroke-dasharray (string) [â€œâ€, â€œnoneâ€, â€œ`-`â€, â€œ`.`â€, â€œ`-.`â€, â€œ`-..`â€, â€œ`. `â€, â€œ`- `â€, â€œ`--`â€, â€œ`- .`â€, â€œ`--.`â€, â€œ`--..`â€]\n\t     o stroke-linecap (string) [â€œ`butt`â€, â€œ`square`â€, â€œ`round`â€]\n\t     o stroke-linejoin (string) [â€œ`bevel`â€, â€œ`round`â€, â€œ`miter`â€]\n\t     o stroke-miterlimit (number)\n\t     o stroke-opacity (number)\n\t     o stroke-width (number) stroke width in pixels, default is '1'\n\t     o target (string) used with href\n\t     o text (string) contents of the text element. Use `\\n` for multiline text\n\t     o text-anchor (string) [â€œ`start`â€, â€œ`middle`â€, â€œ`end`â€], default is â€œ`middle`â€\n\t     o title (string) will create tooltip with a given text\n\t     o transform (string) see @Element.transform\n\t     o width (number)\n\t     o x (number)\n\t     o y (number)\n\t     > Gradients\n\t     * Linear gradient format: â€œ`â€¹angleâ€º-â€¹colourâ€º[-â€¹colourâ€º[:â€¹offsetâ€º]]*-â€¹colourâ€º`â€, example: â€œ`90-#fff-#000`â€ â€“ 90Â°\n\t     * gradient from white to black or â€œ`0-#fff-#f00:20-#000`â€ â€“ 0Â° gradient from white via red (at 20%) to black.\n\t     *\n\t     * radial gradient: â€œ`r[(â€¹fxâ€º, â€¹fyâ€º)]â€¹colourâ€º[-â€¹colourâ€º[:â€¹offsetâ€º]]*-â€¹colourâ€º`â€, example: â€œ`r#fff-#000`â€ â€“\n\t     * gradient from white to black or â€œ`r(0.25, 0.75)#fff-#000`â€ â€“ gradient from white to black with focus point\n\t     * at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can only be applied to circles and ellipses.\n\t     > Path String\n\t     # <p>Please refer to <a href=\"http://www.w3.org/TR/SVG/paths.html#PathData\" title=\"Details of a pathâ€™s data attributeâ€™s format are described in the SVG specification.\">SVG documentation regarding path string</a>. RaphaÃ«l fully supports it.</p>\n\t     > Colour Parsing\n\t     # <ul>\n\t     #     <li>Colour name (â€œ<code>red</code>â€, â€œ<code>green</code>â€, â€œ<code>cornflowerblue</code>â€, etc)</li>\n\t     #     <li>#â€¢â€¢â€¢ â€” shortened HTML colour: (â€œ<code>#000</code>â€, â€œ<code>#fc0</code>â€, etc)</li>\n\t     #     <li>#â€¢â€¢â€¢â€¢â€¢â€¢ â€” full length HTML colour: (â€œ<code>#000000</code>â€, â€œ<code>#bd2300</code>â€)</li>\n\t     #     <li>rgb(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” red, green and blue channelsâ€™ values: (â€œ<code>rgb(200,&nbsp;100,&nbsp;0)</code>â€)</li>\n\t     #     <li>rgb(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %: (â€œ<code>rgb(100%,&nbsp;175%,&nbsp;0%)</code>â€)</li>\n\t     #     <li>rgba(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” red, green and blue channelsâ€™ values: (â€œ<code>rgba(200,&nbsp;100,&nbsp;0, .5)</code>â€)</li>\n\t     #     <li>rgba(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %: (â€œ<code>rgba(100%,&nbsp;175%,&nbsp;0%, 50%)</code>â€)</li>\n\t     #     <li>hsb(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” hue, saturation and brightness values: (â€œ<code>hsb(0.5,&nbsp;0.25,&nbsp;1)</code>â€)</li>\n\t     #     <li>hsb(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %</li>\n\t     #     <li>hsba(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” same as above, but with opacity</li>\n\t     #     <li>hsl(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” almost the same as hsb, see <a href=\"http://en.wikipedia.org/wiki/HSL_and_HSV\" title=\"HSL and HSV - Wikipedia, the free encyclopedia\">Wikipedia page</a></li>\n\t     #     <li>hsl(â€¢â€¢â€¢%, â€¢â€¢â€¢%, â€¢â€¢â€¢%) â€” same as above, but in %</li>\n\t     #     <li>hsla(â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢, â€¢â€¢â€¢) â€” same as above, but with opacity</li>\n\t     #     <li>Optionally for hsb and hsl you could specify hue as a degree: â€œ<code>hsl(240deg,&nbsp;1,&nbsp;.5)</code>â€ or, if you want to go fancy, â€œ<code>hsl(240Â°,&nbsp;1,&nbsp;.5)</code>â€</li>\n\t     # </ul>\n\t    \\*/\n\t    elproto.attr = function (name, value) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (name == null) {\n\t            var res = {};\n\t            for (var a in this.attrs) if (this.attrs[has](a)) {\n\t                res[a] = this.attrs[a];\n\t            }\n\t            res.gradient && res.fill == \"none\" && (res.fill = res.gradient) && delete res.gradient;\n\t            res.transform = this._.transform;\n\t            return res;\n\t        }\n\t        if (value == null && R.is(name, \"string\")) {\n\t            if (name == \"fill\" && this.attrs.fill == \"none\" && this.attrs.gradient) {\n\t                return this.attrs.gradient;\n\t            }\n\t            if (name == \"transform\") {\n\t                return this._.transform;\n\t            }\n\t            var names = name.split(separator),\n\t                out = {};\n\t            for (var i = 0, ii = names.length; i < ii; i++) {\n\t                name = names[i];\n\t                if (name in this.attrs) {\n\t                    out[name] = this.attrs[name];\n\t                } else if (R.is(this.paper.customAttributes[name], \"function\")) {\n\t                    out[name] = this.paper.customAttributes[name].def;\n\t                } else {\n\t                    out[name] = R._availableAttrs[name];\n\t                }\n\t            }\n\t            return ii - 1 ? out : out[names[0]];\n\t        }\n\t        if (value == null && R.is(name, \"array\")) {\n\t            out = {};\n\t            for (i = 0, ii = name.length; i < ii; i++) {\n\t                out[name[i]] = this.attr(name[i]);\n\t            }\n\t            return out;\n\t        }\n\t        if (value != null) {\n\t            var params = {};\n\t            params[name] = value;\n\t        } else if (name != null && R.is(name, \"object\")) {\n\t            params = name;\n\t        }\n\t        for (var key in params) {\n\t            eve(\"raphael.attr.\" + key + \".\" + this.id, this, params[key]);\n\t        }\n\t        for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \"function\")) {\n\t            var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\n\t            this.attrs[key] = params[key];\n\t            for (var subkey in par) if (par[has](subkey)) {\n\t                params[subkey] = par[subkey];\n\t            }\n\t        }\n\t        setFillAndStroke(this, params);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.toFront\n\t     [ method ]\n\t     **\n\t     * Moves the element so it is the closest to the viewerâ€™s eyes, on top of other elements.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.toFront = function () {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        var node = getRealNode(this.node);\n\t        node.parentNode.appendChild(node);\n\t        var svg = this.paper;\n\t        svg.top != this && R._tofront(this, svg);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.toBack\n\t     [ method ]\n\t     **\n\t     * Moves the element so it is the furthest from the viewerâ€™s eyes, behind other elements.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.toBack = function () {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        var node = getRealNode(this.node);\n\t        var parentNode = node.parentNode;\n\t        parentNode.insertBefore(node, parentNode.firstChild);\n\t        R._toback(this, this.paper);\n\t        var svg = this.paper;\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.insertAfter\n\t     [ method ]\n\t     **\n\t     * Inserts current object after the given one.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.insertAfter = function (element) {\n\t        if (this.removed || !element) {\n\t            return this;\n\t        }\n\n\t        var node = getRealNode(this.node);\n\t        var afterNode = getRealNode(element.node || element[element.length - 1].node);\n\t        if (afterNode.nextSibling) {\n\t            afterNode.parentNode.insertBefore(node, afterNode.nextSibling);\n\t        } else {\n\t            afterNode.parentNode.appendChild(node);\n\t        }\n\t        R._insertafter(this, element, this.paper);\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Element.insertBefore\n\t     [ method ]\n\t     **\n\t     * Inserts current object before the given one.\n\t     = (object) @Element\n\t    \\*/\n\t    elproto.insertBefore = function (element) {\n\t        if (this.removed || !element) {\n\t            return this;\n\t        }\n\n\t        var node = getRealNode(this.node);\n\t        var beforeNode = getRealNode(element.node || element[0].node);\n\t        beforeNode.parentNode.insertBefore(node, beforeNode);\n\t        R._insertbefore(this, element, this.paper);\n\t        return this;\n\t    };\n\t    elproto.blur = function (size) {\n\t        // Experimental. No Safari support. Use it on your own risk.\n\t        var t = this;\n\t        if (+size !== 0) {\n\t            var fltr = $(\"filter\"),\n\t                blur = $(\"feGaussianBlur\");\n\t            t.attrs.blur = size;\n\t            fltr.id = R.createUUID();\n\t            $(blur, {stdDeviation: +size || 1.5});\n\t            fltr.appendChild(blur);\n\t            t.paper.defs.appendChild(fltr);\n\t            t._blur = fltr;\n\t            $(t.node, {filter: \"url(#\" + fltr.id + \")\"});\n\t        } else {\n\t            if (t._blur) {\n\t                t._blur.parentNode.removeChild(t._blur);\n\t                delete t._blur;\n\t                delete t.attrs.blur;\n\t            }\n\t            t.node.removeAttribute(\"filter\");\n\t        }\n\t        return t;\n\t    };\n\t    R._engine.circle = function (svg, x, y, r) {\n\t        var el = $(\"circle\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {cx: x, cy: y, r: r, fill: \"none\", stroke: \"#000\"};\n\t        res.type = \"circle\";\n\t        $(el, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.rect = function (svg, x, y, w, h, r) {\n\t        var el = $(\"rect\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {x: x, y: y, width: w, height: h, rx: r || 0, ry: r || 0, fill: \"none\", stroke: \"#000\"};\n\t        res.type = \"rect\";\n\t        $(el, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.ellipse = function (svg, x, y, rx, ry) {\n\t        var el = $(\"ellipse\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: \"none\", stroke: \"#000\"};\n\t        res.type = \"ellipse\";\n\t        $(el, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.image = function (svg, src, x, y, w, h) {\n\t        var el = $(\"image\");\n\t        $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: \"none\"});\n\t        el.setAttributeNS(xlink, \"href\", src);\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {x: x, y: y, width: w, height: h, src: src};\n\t        res.type = \"image\";\n\t        return res;\n\t    };\n\t    R._engine.text = function (svg, x, y, text) {\n\t        var el = $(\"text\");\n\t        svg.canvas && svg.canvas.appendChild(el);\n\t        var res = new Element(el, svg);\n\t        res.attrs = {\n\t            x: x,\n\t            y: y,\n\t            \"text-anchor\": \"middle\",\n\t            text: text,\n\t            \"font-family\": R._availableAttrs[\"font-family\"],\n\t            \"font-size\": R._availableAttrs[\"font-size\"],\n\t            stroke: \"none\",\n\t            fill: \"#000\"\n\t        };\n\t        res.type = \"text\";\n\t        setFillAndStroke(res, res.attrs);\n\t        return res;\n\t    };\n\t    R._engine.setSize = function (width, height) {\n\t        this.width = width || this.width;\n\t        this.height = height || this.height;\n\t        this.canvas.setAttribute(\"width\", this.width);\n\t        this.canvas.setAttribute(\"height\", this.height);\n\t        if (this._viewBox) {\n\t            this.setViewBox.apply(this, this._viewBox);\n\t        }\n\t        return this;\n\t    };\n\t    R._engine.create = function () {\n\t        var con = R._getContainer.apply(0, arguments),\n\t            container = con && con.container,\n\t            x = con.x,\n\t            y = con.y,\n\t            width = con.width,\n\t            height = con.height;\n\t        if (!container) {\n\t            throw new Error(\"SVG container not found.\");\n\t        }\n\t        var cnvs = $(\"svg\"),\n\t            css = \"overflow:hidden;\",\n\t            isFloating;\n\t        x = x || 0;\n\t        y = y || 0;\n\t        width = width || 512;\n\t        height = height || 342;\n\t        $(cnvs, {\n\t            height: height,\n\t            version: 1.1,\n\t            width: width,\n\t            xmlns: \"http://www.w3.org/2000/svg\",\n\t            \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\"\n\t        });\n\t        if (container == 1) {\n\t            cnvs.style.cssText = css + \"position:absolute;left:\" + x + \"px;top:\" + y + \"px\";\n\t            R._g.doc.body.appendChild(cnvs);\n\t            isFloating = 1;\n\t        } else {\n\t            cnvs.style.cssText = css + \"position:relative\";\n\t            if (container.firstChild) {\n\t                container.insertBefore(cnvs, container.firstChild);\n\t            } else {\n\t                container.appendChild(cnvs);\n\t            }\n\t        }\n\t        container = new R._Paper;\n\t        container.width = width;\n\t        container.height = height;\n\t        container.canvas = cnvs;\n\t        container.clear();\n\t        container._left = container._top = 0;\n\t        isFloating && (container.renderfix = function () {});\n\t        container.renderfix();\n\t        return container;\n\t    };\n\t    R._engine.setViewBox = function (x, y, w, h, fit) {\n\t        eve(\"raphael.setViewBox\", this, this._viewBox, [x, y, w, h, fit]);\n\t        var paperSize = this.getSize(),\n\t            size = mmax(w / paperSize.width, h / paperSize.height),\n\t            top = this.top,\n\t            aspectRatio = fit ? \"xMidYMid meet\" : \"xMinYMin\",\n\t            vb,\n\t            sw;\n\t        if (x == null) {\n\t            if (this._vbSize) {\n\t                size = 1;\n\t            }\n\t            delete this._vbSize;\n\t            vb = \"0 0 \" + this.width + S + this.height;\n\t        } else {\n\t            this._vbSize = size;\n\t            vb = x + S + y + S + w + S + h;\n\t        }\n\t        $(this.canvas, {\n\t            viewBox: vb,\n\t            preserveAspectRatio: aspectRatio\n\t        });\n\t        while (size && top) {\n\t            sw = \"stroke-width\" in top.attrs ? top.attrs[\"stroke-width\"] : 1;\n\t            top.attr({\"stroke-width\": sw});\n\t            top._.dirty = 1;\n\t            top._.dirtyT = 1;\n\t            top = top.prev;\n\t        }\n\t        this._viewBox = [x, y, w, h, !!fit];\n\t        return this;\n\t    };\n\t    /*\\\n\t     * Paper.renderfix\n\t     [ method ]\n\t     **\n\t     * Fixes the issue of Firefox and IE9 regarding subpixel rendering. If paper is dependent\n\t     * on other elements after reflow it could shift half pixel which cause for lines to lost their crispness.\n\t     * This method fixes the issue.\n\t     **\n\t       Special thanks to Mariusz Nowak (http://www.medikoo.com/) for this method.\n\t    \\*/\n\t    R.prototype.renderfix = function () {\n\t        var cnvs = this.canvas,\n\t            s = cnvs.style,\n\t            pos;\n\t        try {\n\t            pos = cnvs.getScreenCTM() || cnvs.createSVGMatrix();\n\t        } catch (e) {\n\t            pos = cnvs.createSVGMatrix();\n\t        }\n\t        var left = -pos.e % 1,\n\t            top = -pos.f % 1;\n\t        if (left || top) {\n\t            if (left) {\n\t                this._left = (this._left + left) % 1;\n\t                s.left = this._left + \"px\";\n\t            }\n\t            if (top) {\n\t                this._top = (this._top + top) % 1;\n\t                s.top = this._top + \"px\";\n\t            }\n\t        }\n\t    };\n\t    /*\\\n\t     * Paper.clear\n\t     [ method ]\n\t     **\n\t     * Clears the paper, i.e. removes all the elements.\n\t    \\*/\n\t    R.prototype.clear = function () {\n\t        R.eve(\"raphael.clear\", this);\n\t        var c = this.canvas;\n\t        while (c.firstChild) {\n\t            c.removeChild(c.firstChild);\n\t        }\n\t        this.bottom = this.top = null;\n\t        (this.desc = $(\"desc\")).appendChild(R._g.doc.createTextNode(\"Created with Rapha\\xebl \" + R.version));\n\t        c.appendChild(this.desc);\n\t        c.appendChild(this.defs = $(\"defs\"));\n\t    };\n\t    /*\\\n\t     * Paper.remove\n\t     [ method ]\n\t     **\n\t     * Removes the paper from the DOM.\n\t    \\*/\n\t    R.prototype.remove = function () {\n\t        eve(\"raphael.remove\", this);\n\t        this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t    };\n\t    var setproto = R.st;\n\t    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\n\t        setproto[method] = (function (methodname) {\n\t            return function () {\n\t                var arg = arguments;\n\t                return this.forEach(function (el) {\n\t                    el[methodname].apply(el, arg);\n\t                });\n\t            };\n\t        })(method);\n\t    }\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) {\n\t    if (R && !R.vml) {\n\t        return;\n\t    }\n\n\t    var has = \"hasOwnProperty\",\n\t        Str = String,\n\t        toFloat = parseFloat,\n\t        math = Math,\n\t        round = math.round,\n\t        mmax = math.max,\n\t        mmin = math.min,\n\t        abs = math.abs,\n\t        fillString = \"fill\",\n\t        separator = /[, ]+/,\n\t        eve = R.eve,\n\t        ms = \" progid:DXImageTransform.Microsoft\",\n\t        S = \" \",\n\t        E = \"\",\n\t        map = {M: \"m\", L: \"l\", C: \"c\", Z: \"x\", m: \"t\", l: \"r\", c: \"v\", z: \"x\"},\n\t        bites = /([clmz]),?([^clmz]*)/gi,\n\t        blurregexp = / progid:\\S+Blur\\([^\\)]+\\)/g,\n\t        val = /-?[^,\\s-]+/g,\n\t        cssDot = \"position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)\",\n\t        zoom = 21600,\n\t        pathTypes = {path: 1, rect: 1, image: 1},\n\t        ovalTypes = {circle: 1, ellipse: 1},\n\t        path2vml = function (path) {\n\t            var total =  /[ahqstv]/ig,\n\t                command = R._pathToAbsolute;\n\t            Str(path).match(total) && (command = R._path2curve);\n\t            total = /[clmz]/g;\n\t            if (command == R._pathToAbsolute && !Str(path).match(total)) {\n\t                var res = Str(path).replace(bites, function (all, command, args) {\n\t                    var vals = [],\n\t                        isMove = command.toLowerCase() == \"m\",\n\t                        res = map[command];\n\t                    args.replace(val, function (value) {\n\t                        if (isMove && vals.length == 2) {\n\t                            res += vals + map[command == \"m\" ? \"l\" : \"L\"];\n\t                            vals = [];\n\t                        }\n\t                        vals.push(round(value * zoom));\n\t                    });\n\t                    return res + vals;\n\t                });\n\t                return res;\n\t            }\n\t            var pa = command(path), p, r;\n\t            res = [];\n\t            for (var i = 0, ii = pa.length; i < ii; i++) {\n\t                p = pa[i];\n\t                r = pa[i][0].toLowerCase();\n\t                r == \"z\" && (r = \"x\");\n\t                for (var j = 1, jj = p.length; j < jj; j++) {\n\t                    r += round(p[j] * zoom) + (j != jj - 1 ? \",\" : E);\n\t                }\n\t                res.push(r);\n\t            }\n\t            return res.join(S);\n\t        },\n\t        compensation = function (deg, dx, dy) {\n\t            var m = R.matrix();\n\t            m.rotate(-deg, .5, .5);\n\t            return {\n\t                dx: m.x(dx, dy),\n\t                dy: m.y(dx, dy)\n\t            };\n\t        },\n\t        setCoords = function (p, sx, sy, dx, dy, deg) {\n\t            var _ = p._,\n\t                m = p.matrix,\n\t                fillpos = _.fillpos,\n\t                o = p.node,\n\t                s = o.style,\n\t                y = 1,\n\t                flip = \"\",\n\t                dxdy,\n\t                kx = zoom / sx,\n\t                ky = zoom / sy;\n\t            s.visibility = \"hidden\";\n\t            if (!sx || !sy) {\n\t                return;\n\t            }\n\t            o.coordsize = abs(kx) + S + abs(ky);\n\t            s.rotation = deg * (sx * sy < 0 ? -1 : 1);\n\t            if (deg) {\n\t                var c = compensation(deg, dx, dy);\n\t                dx = c.dx;\n\t                dy = c.dy;\n\t            }\n\t            sx < 0 && (flip += \"x\");\n\t            sy < 0 && (flip += \" y\") && (y = -1);\n\t            s.flip = flip;\n\t            o.coordorigin = (dx * -kx) + S + (dy * -ky);\n\t            if (fillpos || _.fillsize) {\n\t                var fill = o.getElementsByTagName(fillString);\n\t                fill = fill && fill[0];\n\t                o.removeChild(fill);\n\t                if (fillpos) {\n\t                    c = compensation(deg, m.x(fillpos[0], fillpos[1]), m.y(fillpos[0], fillpos[1]));\n\t                    fill.position = c.dx * y + S + c.dy * y;\n\t                }\n\t                if (_.fillsize) {\n\t                    fill.size = _.fillsize[0] * abs(sx) + S + _.fillsize[1] * abs(sy);\n\t                }\n\t                o.appendChild(fill);\n\t            }\n\t            s.visibility = \"visible\";\n\t        };\n\t    R.toString = function () {\n\t        return  \"Your browser doesn\\u2019t support SVG. Falling down to VML.\\nYou are running Rapha\\xebl \" + this.version;\n\t    };\n\t    var addArrow = function (o, value, isEnd) {\n\t        var values = Str(value).toLowerCase().split(\"-\"),\n\t            se = isEnd ? \"end\" : \"start\",\n\t            i = values.length,\n\t            type = \"classic\",\n\t            w = \"medium\",\n\t            h = \"medium\";\n\t        while (i--) {\n\t            switch (values[i]) {\n\t                case \"block\":\n\t                case \"classic\":\n\t                case \"oval\":\n\t                case \"diamond\":\n\t                case \"open\":\n\t                case \"none\":\n\t                    type = values[i];\n\t                    break;\n\t                case \"wide\":\n\t                case \"narrow\": h = values[i]; break;\n\t                case \"long\":\n\t                case \"short\": w = values[i]; break;\n\t            }\n\t        }\n\t        var stroke = o.node.getElementsByTagName(\"stroke\")[0];\n\t        stroke[se + \"arrow\"] = type;\n\t        stroke[se + \"arrowlength\"] = w;\n\t        stroke[se + \"arrowwidth\"] = h;\n\t    },\n\t    setFillAndStroke = function (o, params) {\n\t        // o.paper.canvas.style.display = \"none\";\n\t        o.attrs = o.attrs || {};\n\t        var node = o.node,\n\t            a = o.attrs,\n\t            s = node.style,\n\t            xy,\n\t            newpath = pathTypes[o.type] && (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.cx != a.cx || params.cy != a.cy || params.rx != a.rx || params.ry != a.ry || params.r != a.r),\n\t            isOval = ovalTypes[o.type] && (a.cx != params.cx || a.cy != params.cy || a.r != params.r || a.rx != params.rx || a.ry != params.ry),\n\t            res = o;\n\n\n\t        for (var par in params) if (params[has](par)) {\n\t            a[par] = params[par];\n\t        }\n\t        if (newpath) {\n\t            a.path = R._getPath[o.type](o);\n\t            o._.dirty = 1;\n\t        }\n\t        params.href && (node.href = params.href);\n\t        params.title && (node.title = params.title);\n\t        params.target && (node.target = params.target);\n\t        params.cursor && (s.cursor = params.cursor);\n\t        \"blur\" in params && o.blur(params.blur);\n\t        if (params.path && o.type == \"path\" || newpath) {\n\t            node.path = path2vml(~Str(a.path).toLowerCase().indexOf(\"r\") ? R._pathToAbsolute(a.path) : a.path);\n\t            o._.dirty = 1;\n\t            if (o.type == \"image\") {\n\t                o._.fillpos = [a.x, a.y];\n\t                o._.fillsize = [a.width, a.height];\n\t                setCoords(o, 1, 1, 0, 0, 0);\n\t            }\n\t        }\n\t        \"transform\" in params && o.transform(params.transform);\n\t        if (isOval) {\n\t            var cx = +a.cx,\n\t                cy = +a.cy,\n\t                rx = +a.rx || +a.r || 0,\n\t                ry = +a.ry || +a.r || 0;\n\t            node.path = R.format(\"ar{0},{1},{2},{3},{4},{1},{4},{1}x\", round((cx - rx) * zoom), round((cy - ry) * zoom), round((cx + rx) * zoom), round((cy + ry) * zoom), round(cx * zoom));\n\t            o._.dirty = 1;\n\t        }\n\t        if (\"clip-rect\" in params) {\n\t            var rect = Str(params[\"clip-rect\"]).split(separator);\n\t            if (rect.length == 4) {\n\t                rect[2] = +rect[2] + (+rect[0]);\n\t                rect[3] = +rect[3] + (+rect[1]);\n\t                var div = node.clipRect || R._g.doc.createElement(\"div\"),\n\t                    dstyle = div.style;\n\t                dstyle.clip = R.format(\"rect({1}px {2}px {3}px {0}px)\", rect);\n\t                if (!node.clipRect) {\n\t                    dstyle.position = \"absolute\";\n\t                    dstyle.top = 0;\n\t                    dstyle.left = 0;\n\t                    dstyle.width = o.paper.width + \"px\";\n\t                    dstyle.height = o.paper.height + \"px\";\n\t                    node.parentNode.insertBefore(div, node);\n\t                    div.appendChild(node);\n\t                    node.clipRect = div;\n\t                }\n\t            }\n\t            if (!params[\"clip-rect\"]) {\n\t                node.clipRect && (node.clipRect.style.clip = \"auto\");\n\t            }\n\t        }\n\t        if (o.textpath) {\n\t            var textpathStyle = o.textpath.style;\n\t            params.font && (textpathStyle.font = params.font);\n\t            params[\"font-family\"] && (textpathStyle.fontFamily = '\"' + params[\"font-family\"].split(\",\")[0].replace(/^['\"]+|['\"]+$/g, E) + '\"');\n\t            params[\"font-size\"] && (textpathStyle.fontSize = params[\"font-size\"]);\n\t            params[\"font-weight\"] && (textpathStyle.fontWeight = params[\"font-weight\"]);\n\t            params[\"font-style\"] && (textpathStyle.fontStyle = params[\"font-style\"]);\n\t        }\n\t        if (\"arrow-start\" in params) {\n\t            addArrow(res, params[\"arrow-start\"]);\n\t        }\n\t        if (\"arrow-end\" in params) {\n\t            addArrow(res, params[\"arrow-end\"], 1);\n\t        }\n\t        if (params.opacity != null ||\n\t            params.fill != null ||\n\t            params.src != null ||\n\t            params.stroke != null ||\n\t            params[\"stroke-width\"] != null ||\n\t            params[\"stroke-opacity\"] != null ||\n\t            params[\"fill-opacity\"] != null ||\n\t            params[\"stroke-dasharray\"] != null ||\n\t            params[\"stroke-miterlimit\"] != null ||\n\t            params[\"stroke-linejoin\"] != null ||\n\t            params[\"stroke-linecap\"] != null) {\n\t            var fill = node.getElementsByTagName(fillString),\n\t                newfill = false;\n\t            fill = fill && fill[0];\n\t            !fill && (newfill = fill = createNode(fillString));\n\t            if (o.type == \"image\" && params.src) {\n\t                fill.src = params.src;\n\t            }\n\t            params.fill && (fill.on = true);\n\t            if (fill.on == null || params.fill == \"none\" || params.fill === null) {\n\t                fill.on = false;\n\t            }\n\t            if (fill.on && params.fill) {\n\t                var isURL = Str(params.fill).match(R._ISURL);\n\t                if (isURL) {\n\t                    fill.parentNode == node && node.removeChild(fill);\n\t                    fill.rotate = true;\n\t                    fill.src = isURL[1];\n\t                    fill.type = \"tile\";\n\t                    var bbox = o.getBBox(1);\n\t                    fill.position = bbox.x + S + bbox.y;\n\t                    o._.fillpos = [bbox.x, bbox.y];\n\n\t                    R._preload(isURL[1], function () {\n\t                        o._.fillsize = [this.offsetWidth, this.offsetHeight];\n\t                    });\n\t                } else {\n\t                    fill.color = R.getRGB(params.fill).hex;\n\t                    fill.src = E;\n\t                    fill.type = \"solid\";\n\t                    if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != \"r\") && addGradientFill(res, params.fill, fill)) {\n\t                        a.fill = \"none\";\n\t                        a.gradient = params.fill;\n\t                        fill.rotate = false;\n\t                    }\n\t                }\n\t            }\n\t            if (\"fill-opacity\" in params || \"opacity\" in params) {\n\t                var opacity = ((+a[\"fill-opacity\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);\n\t                opacity = mmin(mmax(opacity, 0), 1);\n\t                fill.opacity = opacity;\n\t                if (fill.src) {\n\t                    fill.color = \"none\";\n\t                }\n\t            }\n\t            node.appendChild(fill);\n\t            var stroke = (node.getElementsByTagName(\"stroke\") && node.getElementsByTagName(\"stroke\")[0]),\n\t            newstroke = false;\n\t            !stroke && (newstroke = stroke = createNode(\"stroke\"));\n\t            if ((params.stroke && params.stroke != \"none\") ||\n\t                params[\"stroke-width\"] ||\n\t                params[\"stroke-opacity\"] != null ||\n\t                params[\"stroke-dasharray\"] ||\n\t                params[\"stroke-miterlimit\"] ||\n\t                params[\"stroke-linejoin\"] ||\n\t                params[\"stroke-linecap\"]) {\n\t                stroke.on = true;\n\t            }\n\t            (params.stroke == \"none\" || params.stroke === null || stroke.on == null || params.stroke == 0 || params[\"stroke-width\"] == 0) && (stroke.on = false);\n\t            var strokeColor = R.getRGB(params.stroke);\n\t            stroke.on && params.stroke && (stroke.color = strokeColor.hex);\n\t            opacity = ((+a[\"stroke-opacity\"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);\n\t            var width = (toFloat(params[\"stroke-width\"]) || 1) * .75;\n\t            opacity = mmin(mmax(opacity, 0), 1);\n\t            params[\"stroke-width\"] == null && (width = a[\"stroke-width\"]);\n\t            params[\"stroke-width\"] && (stroke.weight = width);\n\t            width && width < 1 && (opacity *= width) && (stroke.weight = 1);\n\t            stroke.opacity = opacity;\n\n\t            params[\"stroke-linejoin\"] && (stroke.joinstyle = params[\"stroke-linejoin\"] || \"miter\");\n\t            stroke.miterlimit = params[\"stroke-miterlimit\"] || 8;\n\t            params[\"stroke-linecap\"] && (stroke.endcap = params[\"stroke-linecap\"] == \"butt\" ? \"flat\" : params[\"stroke-linecap\"] == \"square\" ? \"square\" : \"round\");\n\t            if (\"stroke-dasharray\" in params) {\n\t                var dasharray = {\n\t                    \"-\": \"shortdash\",\n\t                    \".\": \"shortdot\",\n\t                    \"-.\": \"shortdashdot\",\n\t                    \"-..\": \"shortdashdotdot\",\n\t                    \". \": \"dot\",\n\t                    \"- \": \"dash\",\n\t                    \"--\": \"longdash\",\n\t                    \"- .\": \"dashdot\",\n\t                    \"--.\": \"longdashdot\",\n\t                    \"--..\": \"longdashdotdot\"\n\t                };\n\t                stroke.dashstyle = dasharray[has](params[\"stroke-dasharray\"]) ? dasharray[params[\"stroke-dasharray\"]] : E;\n\t            }\n\t            newstroke && node.appendChild(stroke);\n\t        }\n\t        if (res.type == \"text\") {\n\t            res.paper.canvas.style.display = E;\n\t            var span = res.paper.span,\n\t                m = 100,\n\t                fontSize = a.font && a.font.match(/\\d+(?:\\.\\d*)?(?=px)/);\n\t            s = span.style;\n\t            a.font && (s.font = a.font);\n\t            a[\"font-family\"] && (s.fontFamily = a[\"font-family\"]);\n\t            a[\"font-weight\"] && (s.fontWeight = a[\"font-weight\"]);\n\t            a[\"font-style\"] && (s.fontStyle = a[\"font-style\"]);\n\t            fontSize = toFloat(a[\"font-size\"] || fontSize && fontSize[0]) || 10;\n\t            s.fontSize = fontSize * m + \"px\";\n\t            res.textpath.string && (span.innerHTML = Str(res.textpath.string).replace(/</g, \"&#60;\").replace(/&/g, \"&#38;\").replace(/\\n/g, \"<br>\"));\n\t            var brect = span.getBoundingClientRect();\n\t            res.W = a.w = (brect.right - brect.left) / m;\n\t            res.H = a.h = (brect.bottom - brect.top) / m;\n\t            // res.paper.canvas.style.display = \"none\";\n\t            res.X = a.x;\n\t            res.Y = a.y + res.H / 2;\n\n\t            (\"x\" in params || \"y\" in params) && (res.path.v = R.format(\"m{0},{1}l{2},{1}\", round(a.x * zoom), round(a.y * zoom), round(a.x * zoom) + 1));\n\t            var dirtyattrs = [\"x\", \"y\", \"text\", \"font\", \"font-family\", \"font-weight\", \"font-style\", \"font-size\"];\n\t            for (var d = 0, dd = dirtyattrs.length; d < dd; d++) if (dirtyattrs[d] in params) {\n\t                res._.dirty = 1;\n\t                break;\n\t            }\n\n\t            // text-anchor emulation\n\t            switch (a[\"text-anchor\"]) {\n\t                case \"start\":\n\t                    res.textpath.style[\"v-text-align\"] = \"left\";\n\t                    res.bbx = res.W / 2;\n\t                break;\n\t                case \"end\":\n\t                    res.textpath.style[\"v-text-align\"] = \"right\";\n\t                    res.bbx = -res.W / 2;\n\t                break;\n\t                default:\n\t                    res.textpath.style[\"v-text-align\"] = \"center\";\n\t                    res.bbx = 0;\n\t                break;\n\t            }\n\t            res.textpath.style[\"v-text-kern\"] = true;\n\t        }\n\t        // res.paper.canvas.style.display = E;\n\t    },\n\t    addGradientFill = function (o, gradient, fill) {\n\t        o.attrs = o.attrs || {};\n\t        var attrs = o.attrs,\n\t            pow = Math.pow,\n\t            opacity,\n\t            oindex,\n\t            type = \"linear\",\n\t            fxfy = \".5 .5\";\n\t        o.attrs.gradient = gradient;\n\t        gradient = Str(gradient).replace(R._radial_gradient, function (all, fx, fy) {\n\t            type = \"radial\";\n\t            if (fx && fy) {\n\t                fx = toFloat(fx);\n\t                fy = toFloat(fy);\n\t                pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);\n\t                fxfy = fx + S + fy;\n\t            }\n\t            return E;\n\t        });\n\t        gradient = gradient.split(/\\s*\\-\\s*/);\n\t        if (type == \"linear\") {\n\t            var angle = gradient.shift();\n\t            angle = -toFloat(angle);\n\t            if (isNaN(angle)) {\n\t                return null;\n\t            }\n\t        }\n\t        var dots = R._parseDots(gradient);\n\t        if (!dots) {\n\t            return null;\n\t        }\n\t        o = o.shape || o.node;\n\t        if (dots.length) {\n\t            o.removeChild(fill);\n\t            fill.on = true;\n\t            fill.method = \"none\";\n\t            fill.color = dots[0].color;\n\t            fill.color2 = dots[dots.length - 1].color;\n\t            var clrs = [];\n\t            for (var i = 0, ii = dots.length; i < ii; i++) {\n\t                dots[i].offset && clrs.push(dots[i].offset + S + dots[i].color);\n\t            }\n\t            fill.colors = clrs.length ? clrs.join() : \"0% \" + fill.color;\n\t            if (type == \"radial\") {\n\t                fill.type = \"gradientTitle\";\n\t                fill.focus = \"100%\";\n\t                fill.focussize = \"0 0\";\n\t                fill.focusposition = fxfy;\n\t                fill.angle = 0;\n\t            } else {\n\t                // fill.rotate= true;\n\t                fill.type = \"gradient\";\n\t                fill.angle = (270 - angle) % 360;\n\t            }\n\t            o.appendChild(fill);\n\t        }\n\t        return 1;\n\t    },\n\t    Element = function (node, vml) {\n\t        this[0] = this.node = node;\n\t        node.raphael = true;\n\t        this.id = R._oid++;\n\t        node.raphaelid = this.id;\n\t        this.X = 0;\n\t        this.Y = 0;\n\t        this.attrs = {};\n\t        this.paper = vml;\n\t        this.matrix = R.matrix();\n\t        this._ = {\n\t            transform: [],\n\t            sx: 1,\n\t            sy: 1,\n\t            dx: 0,\n\t            dy: 0,\n\t            deg: 0,\n\t            dirty: 1,\n\t            dirtyT: 1\n\t        };\n\t        !vml.bottom && (vml.bottom = this);\n\t        this.prev = vml.top;\n\t        vml.top && (vml.top.next = this);\n\t        vml.top = this;\n\t        this.next = null;\n\t    };\n\t    var elproto = R.el;\n\n\t    Element.prototype = elproto;\n\t    elproto.constructor = Element;\n\t    elproto.transform = function (tstr) {\n\t        if (tstr == null) {\n\t            return this._.transform;\n\t        }\n\t        var vbs = this.paper._viewBoxShift,\n\t            vbt = vbs ? \"s\" + [vbs.scale, vbs.scale] + \"-1-1t\" + [vbs.dx, vbs.dy] : E,\n\t            oldt;\n\t        if (vbs) {\n\t            oldt = tstr = Str(tstr).replace(/\\.{3}|\\u2026/g, this._.transform || E);\n\t        }\n\t        R._extractTransform(this, vbt + tstr);\n\t        var matrix = this.matrix.clone(),\n\t            skew = this.skew,\n\t            o = this.node,\n\t            split,\n\t            isGrad = ~Str(this.attrs.fill).indexOf(\"-\"),\n\t            isPatt = !Str(this.attrs.fill).indexOf(\"url(\");\n\t        matrix.translate(1, 1);\n\t        if (isPatt || isGrad || this.type == \"image\") {\n\t            skew.matrix = \"1 0 0 1\";\n\t            skew.offset = \"0 0\";\n\t            split = matrix.split();\n\t            if ((isGrad && split.noRotation) || !split.isSimple) {\n\t                o.style.filter = matrix.toFilter();\n\t                var bb = this.getBBox(),\n\t                    bbt = this.getBBox(1),\n\t                    dx = bb.x - bbt.x,\n\t                    dy = bb.y - bbt.y;\n\t                o.coordorigin = (dx * -zoom) + S + (dy * -zoom);\n\t                setCoords(this, 1, 1, dx, dy, 0);\n\t            } else {\n\t                o.style.filter = E;\n\t                setCoords(this, split.scalex, split.scaley, split.dx, split.dy, split.rotate);\n\t            }\n\t        } else {\n\t            o.style.filter = E;\n\t            skew.matrix = Str(matrix);\n\t            skew.offset = matrix.offset();\n\t        }\n\t        if (oldt !== null) { // empty string value is true as well\n\t            this._.transform = oldt;\n\t            R._extractTransform(this, oldt);\n\t        }\n\t        return this;\n\t    };\n\t    elproto.rotate = function (deg, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (deg == null) {\n\t            return;\n\t        }\n\t        deg = Str(deg).split(separator);\n\t        if (deg.length - 1) {\n\t            cx = toFloat(deg[1]);\n\t            cy = toFloat(deg[2]);\n\t        }\n\t        deg = toFloat(deg[0]);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t            cx = bbox.x + bbox.width / 2;\n\t            cy = bbox.y + bbox.height / 2;\n\t        }\n\t        this._.dirtyT = 1;\n\t        this.transform(this._.transform.concat([[\"r\", deg, cx, cy]]));\n\t        return this;\n\t    };\n\t    elproto.translate = function (dx, dy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        dx = Str(dx).split(separator);\n\t        if (dx.length - 1) {\n\t            dy = toFloat(dx[1]);\n\t        }\n\t        dx = toFloat(dx[0]) || 0;\n\t        dy = +dy || 0;\n\t        if (this._.bbox) {\n\t            this._.bbox.x += dx;\n\t            this._.bbox.y += dy;\n\t        }\n\t        this.transform(this._.transform.concat([[\"t\", dx, dy]]));\n\t        return this;\n\t    };\n\t    elproto.scale = function (sx, sy, cx, cy) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        sx = Str(sx).split(separator);\n\t        if (sx.length - 1) {\n\t            sy = toFloat(sx[1]);\n\t            cx = toFloat(sx[2]);\n\t            cy = toFloat(sx[3]);\n\t            isNaN(cx) && (cx = null);\n\t            isNaN(cy) && (cy = null);\n\t        }\n\t        sx = toFloat(sx[0]);\n\t        (sy == null) && (sy = sx);\n\t        (cy == null) && (cx = cy);\n\t        if (cx == null || cy == null) {\n\t            var bbox = this.getBBox(1);\n\t        }\n\t        cx = cx == null ? bbox.x + bbox.width / 2 : cx;\n\t        cy = cy == null ? bbox.y + bbox.height / 2 : cy;\n\n\t        this.transform(this._.transform.concat([[\"s\", sx, sy, cx, cy]]));\n\t        this._.dirtyT = 1;\n\t        return this;\n\t    };\n\t    elproto.hide = function () {\n\t        !this.removed && (this.node.style.display = \"none\");\n\t        return this;\n\t    };\n\t    elproto.show = function () {\n\t        !this.removed && (this.node.style.display = E);\n\t        return this;\n\t    };\n\t    // Needed to fix the vml setViewBox issues\n\t    elproto.auxGetBBox = R.el.getBBox;\n\t    elproto.getBBox = function(){\n\t      var b = this.auxGetBBox();\n\t      if (this.paper && this.paper._viewBoxShift)\n\t      {\n\t        var c = {};\n\t        var z = 1/this.paper._viewBoxShift.scale;\n\t        c.x = b.x - this.paper._viewBoxShift.dx;\n\t        c.x *= z;\n\t        c.y = b.y - this.paper._viewBoxShift.dy;\n\t        c.y *= z;\n\t        c.width  = b.width  * z;\n\t        c.height = b.height * z;\n\t        c.x2 = c.x + c.width;\n\t        c.y2 = c.y + c.height;\n\t        return c;\n\t      }\n\t      return b;\n\t    };\n\t    elproto._getBBox = function () {\n\t        if (this.removed) {\n\t            return {};\n\t        }\n\t        return {\n\t            x: this.X + (this.bbx || 0) - this.W / 2,\n\t            y: this.Y - this.H,\n\t            width: this.W,\n\t            height: this.H\n\t        };\n\t    };\n\t    elproto.remove = function () {\n\t        if (this.removed || !this.node.parentNode) {\n\t            return;\n\t        }\n\t        this.paper.__set__ && this.paper.__set__.exclude(this);\n\t        R.eve.unbind(\"raphael.*.*.\" + this.id);\n\t        R._tear(this, this.paper);\n\t        this.node.parentNode.removeChild(this.node);\n\t        this.shape && this.shape.parentNode.removeChild(this.shape);\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t        this.removed = true;\n\t    };\n\t    elproto.attr = function (name, value) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (name == null) {\n\t            var res = {};\n\t            for (var a in this.attrs) if (this.attrs[has](a)) {\n\t                res[a] = this.attrs[a];\n\t            }\n\t            res.gradient && res.fill == \"none\" && (res.fill = res.gradient) && delete res.gradient;\n\t            res.transform = this._.transform;\n\t            return res;\n\t        }\n\t        if (value == null && R.is(name, \"string\")) {\n\t            if (name == fillString && this.attrs.fill == \"none\" && this.attrs.gradient) {\n\t                return this.attrs.gradient;\n\t            }\n\t            var names = name.split(separator),\n\t                out = {};\n\t            for (var i = 0, ii = names.length; i < ii; i++) {\n\t                name = names[i];\n\t                if (name in this.attrs) {\n\t                    out[name] = this.attrs[name];\n\t                } else if (R.is(this.paper.customAttributes[name], \"function\")) {\n\t                    out[name] = this.paper.customAttributes[name].def;\n\t                } else {\n\t                    out[name] = R._availableAttrs[name];\n\t                }\n\t            }\n\t            return ii - 1 ? out : out[names[0]];\n\t        }\n\t        if (this.attrs && value == null && R.is(name, \"array\")) {\n\t            out = {};\n\t            for (i = 0, ii = name.length; i < ii; i++) {\n\t                out[name[i]] = this.attr(name[i]);\n\t            }\n\t            return out;\n\t        }\n\t        var params;\n\t        if (value != null) {\n\t            params = {};\n\t            params[name] = value;\n\t        }\n\t        value == null && R.is(name, \"object\") && (params = name);\n\t        for (var key in params) {\n\t            eve(\"raphael.attr.\" + key + \".\" + this.id, this, params[key]);\n\t        }\n\t        if (params) {\n\t            for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], \"function\")) {\n\t                var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));\n\t                this.attrs[key] = params[key];\n\t                for (var subkey in par) if (par[has](subkey)) {\n\t                    params[subkey] = par[subkey];\n\t                }\n\t            }\n\t            // this.paper.canvas.style.display = \"none\";\n\t            if (params.text && this.type == \"text\") {\n\t                this.textpath.string = params.text;\n\t            }\n\t            setFillAndStroke(this, params);\n\t            // this.paper.canvas.style.display = E;\n\t        }\n\t        return this;\n\t    };\n\t    elproto.toFront = function () {\n\t        !this.removed && this.node.parentNode.appendChild(this.node);\n\t        this.paper && this.paper.top != this && R._tofront(this, this.paper);\n\t        return this;\n\t    };\n\t    elproto.toBack = function () {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (this.node.parentNode.firstChild != this.node) {\n\t            this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);\n\t            R._toback(this, this.paper);\n\t        }\n\t        return this;\n\t    };\n\t    elproto.insertAfter = function (element) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (element.constructor == R.st.constructor) {\n\t            element = element[element.length - 1];\n\t        }\n\n\t        if (element.node.nextSibling) {\n\t            element.node.parentNode.insertBefore(this.node, element.node.nextSibling);\n\t        } else {\n\t            element.node.parentNode.appendChild(this.node);\n\t        }\n\t        R._insertafter(this, element, this.paper);\n\t        return this;\n\t    };\n\t    elproto.insertBefore = function (element) {\n\t        if (this.removed) {\n\t            return this;\n\t        }\n\t        if (element.constructor == R.st.constructor) {\n\t            element = element[0];\n\t        }\n\t        element.node.parentNode.insertBefore(this.node, element.node);\n\t        R._insertbefore(this, element, this.paper);\n\t        return this;\n\t    };\n\t    elproto.blur = function (size) {\n\t        var s = this.node.runtimeStyle,\n\t            f = s.filter;\n\t        f = f.replace(blurregexp, E);\n\t        if (+size !== 0) {\n\t            this.attrs.blur = size;\n\t            s.filter = f + S + ms + \".Blur(pixelradius=\" + (+size || 1.5) + \")\";\n\t            s.margin = R.format(\"-{0}px 0 0 -{0}px\", round(+size || 1.5));\n\t        } else {\n\t            s.filter = f;\n\t            s.margin = 0;\n\t            delete this.attrs.blur;\n\t        }\n\t        return this;\n\t    };\n\n\t    R._engine.path = function (pathString, vml) {\n\t        var el = createNode(\"shape\");\n\t        el.style.cssText = cssDot;\n\t        el.coordsize = zoom + S + zoom;\n\t        el.coordorigin = vml.coordorigin;\n\t        var p = new Element(el, vml),\n\t            attr = {fill: \"none\", stroke: \"#000\"};\n\t        pathString && (attr.path = pathString);\n\t        p.type = \"path\";\n\t        p.path = [];\n\t        p.Path = E;\n\t        setFillAndStroke(p, attr);\n\t        vml.canvas && vml.canvas.appendChild(el);\n\t        var skew = createNode(\"skew\");\n\t        skew.on = true;\n\t        el.appendChild(skew);\n\t        p.skew = skew;\n\t        p.transform(E);\n\t        return p;\n\t    };\n\t    R._engine.rect = function (vml, x, y, w, h, r) {\n\t        var path = R._rectPath(x, y, w, h, r),\n\t            res = vml.path(path),\n\t            a = res.attrs;\n\t        res.X = a.x = x;\n\t        res.Y = a.y = y;\n\t        res.W = a.width = w;\n\t        res.H = a.height = h;\n\t        a.r = r;\n\t        a.path = path;\n\t        res.type = \"rect\";\n\t        return res;\n\t    };\n\t    R._engine.ellipse = function (vml, x, y, rx, ry) {\n\t        var res = vml.path(),\n\t            a = res.attrs;\n\t        res.X = x - rx;\n\t        res.Y = y - ry;\n\t        res.W = rx * 2;\n\t        res.H = ry * 2;\n\t        res.type = \"ellipse\";\n\t        setFillAndStroke(res, {\n\t            cx: x,\n\t            cy: y,\n\t            rx: rx,\n\t            ry: ry\n\t        });\n\t        return res;\n\t    };\n\t    R._engine.circle = function (vml, x, y, r) {\n\t        var res = vml.path(),\n\t            a = res.attrs;\n\t        res.X = x - r;\n\t        res.Y = y - r;\n\t        res.W = res.H = r * 2;\n\t        res.type = \"circle\";\n\t        setFillAndStroke(res, {\n\t            cx: x,\n\t            cy: y,\n\t            r: r\n\t        });\n\t        return res;\n\t    };\n\t    R._engine.image = function (vml, src, x, y, w, h) {\n\t        var path = R._rectPath(x, y, w, h),\n\t            res = vml.path(path).attr({stroke: \"none\"}),\n\t            a = res.attrs,\n\t            node = res.node,\n\t            fill = node.getElementsByTagName(fillString)[0];\n\t        a.src = src;\n\t        res.X = a.x = x;\n\t        res.Y = a.y = y;\n\t        res.W = a.width = w;\n\t        res.H = a.height = h;\n\t        a.path = path;\n\t        res.type = \"image\";\n\t        fill.parentNode == node && node.removeChild(fill);\n\t        fill.rotate = true;\n\t        fill.src = src;\n\t        fill.type = \"tile\";\n\t        res._.fillpos = [x, y];\n\t        res._.fillsize = [w, h];\n\t        node.appendChild(fill);\n\t        setCoords(res, 1, 1, 0, 0, 0);\n\t        return res;\n\t    };\n\t    R._engine.text = function (vml, x, y, text) {\n\t        var el = createNode(\"shape\"),\n\t            path = createNode(\"path\"),\n\t            o = createNode(\"textpath\");\n\t        x = x || 0;\n\t        y = y || 0;\n\t        text = text || \"\";\n\t        path.v = R.format(\"m{0},{1}l{2},{1}\", round(x * zoom), round(y * zoom), round(x * zoom) + 1);\n\t        path.textpathok = true;\n\t        o.string = Str(text);\n\t        o.on = true;\n\t        el.style.cssText = cssDot;\n\t        el.coordsize = zoom + S + zoom;\n\t        el.coordorigin = \"0 0\";\n\t        var p = new Element(el, vml),\n\t            attr = {\n\t                fill: \"#000\",\n\t                stroke: \"none\",\n\t                font: R._availableAttrs.font,\n\t                text: text\n\t            };\n\t        p.shape = el;\n\t        p.path = path;\n\t        p.textpath = o;\n\t        p.type = \"text\";\n\t        p.attrs.text = Str(text);\n\t        p.attrs.x = x;\n\t        p.attrs.y = y;\n\t        p.attrs.w = 1;\n\t        p.attrs.h = 1;\n\t        setFillAndStroke(p, attr);\n\t        el.appendChild(o);\n\t        el.appendChild(path);\n\t        vml.canvas.appendChild(el);\n\t        var skew = createNode(\"skew\");\n\t        skew.on = true;\n\t        el.appendChild(skew);\n\t        p.skew = skew;\n\t        p.transform(E);\n\t        return p;\n\t    };\n\t    R._engine.setSize = function (width, height) {\n\t        var cs = this.canvas.style;\n\t        this.width = width;\n\t        this.height = height;\n\t        width == +width && (width += \"px\");\n\t        height == +height && (height += \"px\");\n\t        cs.width = width;\n\t        cs.height = height;\n\t        cs.clip = \"rect(0 \" + width + \" \" + height + \" 0)\";\n\t        if (this._viewBox) {\n\t            R._engine.setViewBox.apply(this, this._viewBox);\n\t        }\n\t        return this;\n\t    };\n\t    R._engine.setViewBox = function (x, y, w, h, fit) {\n\t        R.eve(\"raphael.setViewBox\", this, this._viewBox, [x, y, w, h, fit]);\n\t        var paperSize = this.getSize(),\n\t            width = paperSize.width,\n\t            height = paperSize.height,\n\t            H, W;\n\t        if (fit) {\n\t            H = height / h;\n\t            W = width / w;\n\t            if (w * H < width) {\n\t                x -= (width - w * H) / 2 / H;\n\t            }\n\t            if (h * W < height) {\n\t                y -= (height - h * W) / 2 / W;\n\t            }\n\t        }\n\t        this._viewBox = [x, y, w, h, !!fit];\n\t        this._viewBoxShift = {\n\t            dx: -x,\n\t            dy: -y,\n\t            scale: paperSize\n\t        };\n\t        this.forEach(function (el) {\n\t            el.transform(\"...\");\n\t        });\n\t        return this;\n\t    };\n\t    var createNode;\n\t    R._engine.initWin = function (win) {\n\t            var doc = win.document;\n\t            if (doc.styleSheets.length < 31) {\n\t                doc.createStyleSheet().addRule(\".rvml\", \"behavior:url(#default#VML)\");\n\t            } else {\n\t                // no more room, add to the existing one\n\t                // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx\n\t                doc.styleSheets[0].addRule(\".rvml\", \"behavior:url(#default#VML)\");\n\t            }\n\t            try {\n\t                !doc.namespaces.rvml && doc.namespaces.add(\"rvml\", \"urn:schemas-microsoft-com:vml\");\n\t                createNode = function (tagName) {\n\t                    return doc.createElement('<rvml:' + tagName + ' class=\"rvml\">');\n\t                };\n\t            } catch (e) {\n\t                createNode = function (tagName) {\n\t                    return doc.createElement('<' + tagName + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">');\n\t                };\n\t            }\n\t        };\n\t    R._engine.initWin(R._g.win);\n\t    R._engine.create = function () {\n\t        var con = R._getContainer.apply(0, arguments),\n\t            container = con.container,\n\t            height = con.height,\n\t            s,\n\t            width = con.width,\n\t            x = con.x,\n\t            y = con.y;\n\t        if (!container) {\n\t            throw new Error(\"VML container not found.\");\n\t        }\n\t        var res = new R._Paper,\n\t            c = res.canvas = R._g.doc.createElement(\"div\"),\n\t            cs = c.style;\n\t        x = x || 0;\n\n\t        y = y || 0;\n\t        width = width || 512;\n\t        height = height || 342;\n\t        res.width = width;\n\t        res.height = height;\n\t        width == +width && (width += \"px\");\n\t        height == +height && (height += \"px\");\n\t        res.coordsize = zoom * 1e3 + S + zoom * 1e3;\n\t        res.coordorigin = \"0 0\";\n\t        res.span = R._g.doc.createElement(\"span\");\n\t        res.span.style.cssText = \"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;\";\n\t        c.appendChild(res.span);\n\t        cs.cssText = R.format(\"top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden\", width, height);\n\t        if (container == 1) {\n\t            R._g.doc.body.appendChild(c);\n\t            cs.left = x + \"px\";\n\t            cs.top = y + \"px\";\n\t            cs.position = \"absolute\";\n\t        } else {\n\t            if (container.firstChild) {\n\t                container.insertBefore(c, container.firstChild);\n\t            } else {\n\t                container.appendChild(c);\n\t            }\n\t        }\n\t        res.renderfix = function () {};\n\t        return res;\n\t    };\n\t    R.prototype.clear = function () {\n\t        R.eve(\"raphael.clear\", this);\n\t        this.canvas.innerHTML = E;\n\t        this.span = R._g.doc.createElement(\"span\");\n\t        this.span.style.cssText = \"position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;\";\n\t        this.canvas.appendChild(this.span);\n\t        this.bottom = this.top = null;\n\t    };\n\t    R.prototype.remove = function () {\n\t        R.eve(\"raphael.remove\", this);\n\t        this.canvas.parentNode.removeChild(this.canvas);\n\t        for (var i in this) {\n\t            this[i] = typeof this[i] == \"function\" ? R._removedFactory(i) : null;\n\t        }\n\t        return true;\n\t    };\n\n\t    var setproto = R.st;\n\t    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {\n\t        setproto[method] = (function (methodname) {\n\t            return function () {\n\t                var arg = arguments;\n\t                return this.forEach(function (el) {\n\t                    el[methodname].apply(el, arg);\n\t                });\n\t            };\n\t        })(method);\n\t    }\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ }\n/******/ ])\n});\n;"
  },
  {
    "path": "modules/system/assets/js/vue.factory.js",
    "content": "/**\n * Vue 3 Application Factory\n *\n * Creates pre-configured Vue app instances with globally registered\n * components and directives.\n */\n\n/**\n * Creates a Vue 3 app with all registered components and directives.\n * @param {Object} options - Vue app options (data, methods, etc.)\n * @returns {Object} Vue app instance (call .mount() to mount)\n */\nexport function createOctoberApp(options = {}) {\n    const app = Vue.createApp(options);\n\n    // Register all globally registered components\n    if (window.oc && window.oc.vueComponents) {\n        for (const [name, component] of Object.entries(window.oc.vueComponents)) {\n            app.component(name, component);\n        }\n    }\n\n    // Register all globally registered directives\n    if (window.oc && window.oc.vueDirectives) {\n        for (const [name, directive] of Object.entries(window.oc.vueDirectives)) {\n            app.directive(name, directive);\n        }\n    }\n\n    return app;\n}\n\n/**\n * Creates and mounts a Vue 3 app in one step.\n * @param {string|Element} container - Mount target (selector or element)\n * @param {Object} options - Vue app options (data, methods, etc.)\n * @returns {Object} Object with { app, vm } - the app and mounted instance\n */\nexport function mountOctoberApp(container, options = {}) {\n    // Get the actual element\n    const element = typeof container === 'string'\n        ? document.querySelector(container)\n        : container;\n\n    // Check for <template> child element (Vue 2 compatibility)\n    // In Vue 2, mounting to an element containing <template> would use that template.\n    // In Vue 3, we need to extract the template content explicitly.\n    const templateEl = element?.querySelector(':scope > template');\n    if (templateEl) {\n        // Use the template's innerHTML as the app template\n        options.template = templateEl.innerHTML;\n    }\n\n    const app = createOctoberApp(options);\n    const vm = app.mount(container);\n    return { app, vm };\n}\n\n// Expose globally for non-module contexts\nif (!window.oc) window.oc = {};\nwindow.oc.createVueApp = createOctoberApp;\nwindow.oc.mountVueApp = mountOctoberApp;\n"
  },
  {
    "path": "modules/system/assets/js/vue.hotkey.js",
    "content": "\nclass KeyCondition {\n    static keyMap = {\n        esc: 27,\n        tab: 9,\n        space: 32,\n        return: 13,\n        enter: 13,\n        backspace: 8,\n        scroll: 145,\n        capslock: 20,\n        numlock: 144,\n        pause: 19,\n        break: 19,\n        insert: 45,\n        home: 36,\n        delete: 46,\n        suppr: 46,\n        end: 35,\n        pageup: 33,\n        pagedown: 34,\n        left: 37,\n        up: 38,\n        right: 39,\n        down: 40,\n        f1: 112,\n        f2: 113,\n        f3: 114,\n        f4: 115,\n        f5: 116,\n        f6: 117,\n        f7: 118,\n        f8: 119,\n        f9: 120,\n        f10: 121,\n        f11: 122,\n        f12: 123\n    };\n\n    constructor(hotkeyStr) {\n        this.shift = false;\n        this.ctrl = false;\n        this.cmd = false;\n        this.alt = false;\n        this.specific = -1;\n\n        this.parseHotkeyStr(hotkeyStr);\n    }\n\n    parseHotkeyStr(hotkeyStr) {\n        const keys = hotkeyStr.trim().split('+');\n\n        keys.forEach((key) => {\n            switch (key.trim()) {\n                case 'shift':\n                    this.shift = true;\n                    break;\n                case 'ctrl':\n                    this.ctrl = true;\n                    break;\n                case 'command':\n                case 'cmd':\n                case 'meta':\n                    this.cmd = true;\n                    break;\n                case 'alt':\n                case 'option':\n                    this.alt = true;\n                    break;\n            }\n        });\n\n        this.specific = KeyCondition.keyMap[keys[keys.length - 1]];\n        if (this.specific === undefined) {\n            this.specific = keys[keys.length - 1].toUpperCase().charCodeAt();\n        }\n    }\n\n    match(ev) {\n        var code = ev.which ? ev.which : ev.keyCode;\n\n        return (\n            code === this.specific &&\n            ev.shiftKey === this.shift &&\n            ev.ctrlKey === this.ctrl &&\n            ev.metaKey === this.cmd &&\n            ev.altKey === this.alt\n        );\n    }\n}\n\nclass ListenerRegistry {\n    constructor() {\n        this.listeners = new Map();\n        document.addEventListener('keydown', (ev) => this.onKeyDown(ev));\n        document.addEventListener('page:before-render', (ev) => this.listeners.clear());\n    }\n\n    makeConditions(hotkeyStr) {\n        const conditions = [];\n\n        hotkeyStr.split(',').forEach((keyBinding) => {\n            conditions.push(new KeyCondition(keyBinding));\n        });\n\n        return conditions;\n    }\n\n    addListener(listener, hotkeyStr) {\n        this.listeners.set(listener, this.makeConditions(hotkeyStr));\n    }\n\n    removeListener(listener) {\n        this.listeners.delete(listener);\n    }\n\n    onKeyDown(ev) {\n        this.listeners.forEach((conditions, listener) => {\n            if (conditions.some((condition) => condition.match(ev))) {\n                listener(ev);\n            }\n        });\n    }\n}\n\nconst registry = new ListenerRegistry();\n\n// Vue 3 directive - registered globally for all app instances\nconst ocHotkeyDirective = {\n    beforeMount: function(el, binding) {\n        if (!binding.arg) {\n            return;\n        }\n\n        registry.addListener(binding.value, binding.arg);\n    },\n\n    unmounted: function(el, binding) {\n        if (!binding.arg) {\n            return;\n        }\n\n        registry.removeListener(binding.value);\n    }\n};\n\n// Register directive globally\nif (!window.oc) window.oc = {};\nif (!window.oc.vueDirectives) window.oc.vueDirectives = {};\nwindow.oc.vueDirectives['oc-hotkey'] = ocHotkeyDirective;\n\nexport const vueHotkeyMixin = {\n    data: function() {\n        return {\n            componentHotkeys: {}\n        };\n    },\n\n    created: function() {\n        Object.keys(this.componentHotkeys).forEach((hotkey) => {\n            registry.addListener(this.componentHotkeys[hotkey], hotkey);\n        });\n    },\n\n    beforeUnmount: function() {\n        Object.keys(this.componentHotkeys).forEach((hotkey) => {\n            registry.removeListener(this.componentHotkeys[hotkey]);\n        });\n    }\n};\n\n// Also expose on window for legacy access\nif (window.oc === undefined) {\n    window.oc = {}\n}\nwindow.oc.vueHotkeyMixin = vueHotkeyMixin;\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/context-menu/README.md",
    "content": "# Context Menu\n\nDisplays a context menu at a specified position.\n\n## Usage\n\n```js\ndocument.addEventListener('contextmenu', '.some-container', function(ev) {\n    ev.preventDefault();\n\n    oc.ContextMenu.show({\n        pageX: ev.pageX,\n        pageY: ev.pageY,\n        items: [\n            {\n                name: 'Section Title'\n            },\n            {\n                name: 'Edit Content',\n                icon: 'pencil',\n                action: () => openIframe('/some/iframe/edit')\n            },\n            {\n                name: 'Edit Settings',\n                label: 'Ctrl+S',\n                icon: 'cog',\n                action: () => openIframe('/some/iframe/settings')\n            }\n        ]\n    });\n});\n\n// Close the menu programmatically\noc.ContextMenu.hide();\n```\n\n## Item Options\n\n| Option | Type | Description |\n|--------|------|-------------|\n| `name` | string | Display text for the menu item |\n| `action` | function | Click handler (if omitted, item is rendered as a title) |\n| `icon` | string | Icon name (without `icon-` prefix) |\n| `label` | string | Secondary label (e.g., keyboard shortcut) |\n\n## Features\n\n- Auto-positions to stay within viewport bounds\n- Closes on click outside, Escape key, scroll, or right-click elsewhere\n- Singleton pattern (only one menu can be open at a time)\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/context-menu/context-menu.css",
    "content": ".control-contextmenu {\n    position: absolute;\n    top: 0;\n    left: 0;\n    /*width: 200px;*/\n    padding: 0;\n    margin: 0;\n    background: white;\n    border-radius: 3px;\n    box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.3);\n    opacity: 0;\n    transform: translate(0, 15px) scale(0.95);\n    transition: opacity 0.1s ease-out;\n    transition: transform 0.1s ease-out, opacity 0.1s ease-out;\n    pointer-events: none;\n    z-index: 5000;\n\n    .contextmenu-item {\n        display: block;\n        position: relative;\n        margin: 0;\n        padding: 0;\n        white-space: nowrap;\n\n        .contextmenu-title,\n        .contextmenu-btn {\n            line-height: normal;\n            overflow: visible;\n            -webkit-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            display: block;\n            width: 100%;\n            color: #444;\n            font-family: sans-serif;\n            text-align: left;\n            border: 1px solid transparent;\n            white-space: nowrap;\n\n            .contextmenu-label {\n                background: #e0e0e0;\n                border-radius: 20px;\n                font-size: 12px;\n                color: #333;\n                padding: 2px 5px;\n                margin-left: 15px;\n            }\n        }\n\n\n        .contextmenu-title {\n            font-size: 14px;\n            background: #eeeeee;\n            padding: 12px 16px;\n        }\n\n        .contextmenu-btn {\n            font-size: 13px;\n            background: none;\n            padding: 8px 16px;\n            cursor: pointer;\n        }\n\n        .contextmenu-btn::-moz-focus-inner,\n        .contextmenu-btn::-moz-focus-inner {\n            border: 0;\n            padding: 0;\n        }\n\n        .contextmenu-icon {\n            font-size: 16px;\n            margin-right: 15px;\n        }\n\n        .contextmenu-text {\n            font-size: 14px;\n        }\n\n        &:hover > .contextmenu-btn {\n            outline: none;\n            background-color: #6A6CF7;\n            color: #fff;\n        }\n\n        &.disabled {\n            opacity: 0.5;\n            pointer-events: none;\n            .contextmenu-btn {\n                cursor: default;\n            }\n        }\n\n        .contextmenu-separator {\n            display: block;\n            margin: 7px 5px;\n            height: 1px;\n            border-bottom: 1px solid #fff;\n            background-color: #aaa;\n        }\n    }\n\n    &.is-visible {\n        opacity: 1;\n        -webkit-transform: translate(0, 0) scale(1);\n        transform: translate(0, 0) scale(1);\n        pointer-events: auto;\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/context-menu/context-menu.js",
    "content": "/*\n * Context Menu\n *\n * - Documentation: ../docs/contextmenu.md\n *\n * JavaScript API:\n * oc.ContextMenu.show({ pageX, pageY, items })\n * oc.ContextMenu.hide()\n */\n'use strict';\n\nclass ContextMenu {\n    static instance = null;\n\n    constructor() {\n        this.menu = document.createElement('menu');\n        this.menu.className = 'control-contextmenu';\n        document.body.appendChild(this.menu);\n\n        this.boundHideOnClick = this.hideOnClick.bind(this);\n        this.boundHideOnContextMenu = this.hideOnContextMenu.bind(this);\n        this.boundHideOnScroll = this.hide.bind(this);\n        this.boundHideOnKeydown = this.hideOnKeydown.bind(this);\n    }\n\n    static getInstance() {\n        if (!ContextMenu.instance) {\n            ContextMenu.instance = new ContextMenu();\n        }\n        return ContextMenu.instance;\n    }\n\n    static show(options) {\n        return ContextMenu.getInstance().openMenu(options);\n    }\n\n    static hide() {\n        return ContextMenu.getInstance().hide();\n    }\n\n    openMenu(options) {\n        const delay = this.isOpen() ? 100 : 0;\n\n        this.hide();\n\n        setTimeout(() => {\n            if (options.items) {\n                this.buildOptions(options.items);\n            }\n\n            this.showAt(options.pageX, options.pageY);\n        }, delay);\n    }\n\n    closeMenu() {\n        this.removeListeners();\n        this.hide();\n    }\n\n    buildOptions(items) {\n        this.menu.innerHTML = '';\n\n        items.forEach(item => {\n            this.buildOption(item);\n        });\n    }\n\n    buildOption(option) {\n        const li = document.createElement('li');\n        li.className = 'contextmenu-item';\n\n        let item;\n\n        if (option.action) {\n            const span = document.createElement('span');\n            span.className = 'contextmenu-text';\n            span.innerHTML = option.name;\n\n            item = document.createElement('button');\n            item.className = 'contextmenu-btn';\n            item.appendChild(span);\n\n            li.addEventListener('click', option.action);\n            li.appendChild(item);\n        }\n        else {\n            item = document.createElement('span');\n            item.className = 'contextmenu-title';\n            item.innerHTML = option.name;\n            li.appendChild(item);\n        }\n\n        if (option.icon) {\n            const icon = document.createElement('i');\n            icon.className = 'contextmenu-icon icon-' + option.icon;\n            item.insertBefore(icon, item.firstChild);\n        }\n\n        if (option.label) {\n            const label = document.createElement('span');\n            label.className = 'contextmenu-label';\n            label.innerHTML = option.label;\n            item.appendChild(label);\n        }\n\n        this.menu.appendChild(li);\n    }\n\n    showAt(x, y) {\n        // Make visible but off-screen to measure\n        this.menu.style.left = '-9999px';\n        this.menu.style.top = '-9999px';\n        this.menu.classList.add('is-visible');\n\n        const w = window.innerWidth;\n        const h = window.innerHeight;\n        const mw = this.menu.offsetWidth;\n        const mh = this.menu.offsetHeight;\n\n        if (x + mw > w) { x = x - mw; }\n        if (y + mh > h) { y = y - mh; }\n\n        // Ensure menu doesn't go off-screen on the left or top\n        if (x < 0) { x = 0; }\n        if (y < 0) { y = 0; }\n\n        this.menu.style.left = x + 'px';\n        this.menu.style.top = y + 'px';\n\n        this.addListeners();\n    }\n\n    hide() {\n        this.menu.classList.remove('is-visible');\n        this.removeListeners();\n    }\n\n    isOpen() {\n        return this.menu.classList.contains('is-visible');\n    }\n\n    addListeners() {\n        document.addEventListener('click', this.boundHideOnClick);\n        document.addEventListener('contextmenu', this.boundHideOnContextMenu);\n        document.addEventListener('scroll', this.boundHideOnScroll, true);\n        document.addEventListener('keydown', this.boundHideOnKeydown);\n    }\n\n    removeListeners() {\n        document.removeEventListener('click', this.boundHideOnClick);\n        document.removeEventListener('contextmenu', this.boundHideOnContextMenu);\n        document.removeEventListener('scroll', this.boundHideOnScroll, true);\n        document.removeEventListener('keydown', this.boundHideOnKeydown);\n    }\n\n    hideOnClick(event) {\n        // Allow clicking menu items to trigger their actions first\n        if (this.menu.contains(event.target)) {\n            // Hide after a brief delay to allow the action to fire\n            setTimeout(() => this.hide(), 50);\n        }\n        else {\n            this.hide();\n        }\n    }\n\n    hideOnContextMenu(event) {\n        // Hide current menu when right-clicking elsewhere\n        if (!this.menu.contains(event.target)) {\n            this.hide();\n        }\n    }\n\n    hideOnKeydown(event) {\n        if (event.key === 'Escape') {\n            this.hide();\n        }\n    }\n\n    dispose() {\n        this.removeListeners();\n\n        if (this.menu && this.menu.parentNode) {\n            this.menu.parentNode.removeChild(this.menu);\n        }\n\n        this.menu = null;\n        ContextMenu.instance = null;\n    }\n}\n\nexport default ContextMenu;\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/custom-select/README.md",
    "content": "# Select\n\n### Select\n\nCustom select control.\n\n    <select class=\"form-control custom-select\">\n        <option selected=\"selected\" value=\"2\">Approved</option>\n        <option value=\"3\">Deleted</option>\n        <option value=\"1\">New</option>\n    </select>\n\n## Sizes\n\n### Small size\n\n    <div class=\"form-group form-group-sm\">\n        <select class=\"form-control custom-select\">\n            <option value=\"1\" selected=\"selected\">One</option>\n            <option value=\"2\">Two</option>\n        </select>\n    </div>\n\n### Large size\n\n    <div class=\"form-group form-group-lg\">\n        <select class=\"form-control custom-select\">\n            <option value=\"1\" selected=\"selected\">One</option>\n            <option value=\"2\">Two</option>\n        </select>\n    </div>\n\n## Options\n\n### Disable search\n\nAdd the `select-no-search` CSS class to disable searching.\n\n    <div class=\"form-group\">\n        <select class=\"form-control custom-select select-no-search\">\n            <option value=\"1\" selected=\"selected\">One</option>\n            <option value=\"2\" selected=\"selected\">Two</option>\n        </select>\n    </div>\n\n## Option groups\n\nUse the `optgroup` element to create option groups.\n\n    <select class=\"form-control custom-select\">\n        <option value=\"1\">Please select an option</option>\n        <option value=\"2\">Ungrouped option</option>\n        <optgroup label=\"Option Group\">\n            <option value=\"3\">Grouped option</option>\n            <option value=\"4\">Another option</option>\n            <option value=\"4\">Third option</option>\n        </optgroup>\n    </select>\n\n## AJAX search\n\nUse the `data-handler` attribute to source the select options from an AJAX handler.\n\n    <select\n        class=\"form-control custom-select\"\n        data-handler=\"onGetOptions\"\n        data-minimum-input-length=\"2\"\n        data-ajax--delay=\"300\"\n        data-request-data=\"foo: 'bar'\"\n    ></select>\n\nThe AJAX handler should return results in the [Select2 data format](https://select2.org/data-sources/formats).\n\n    public function onGetOptions()\n    {\n        return [\n            'results' => [\n                [\n                    'id' => 1,\n                    'text' => 'Foo'\n                ],\n                [\n                    'id' => 2,\n                    'text' => 'Bar'\n                ]\n                ...\n            ]\n        ];\n    }\n\nOr a more full-featured example:\n\n    public function onGetOptions()\n    {\n        return [\n            'results' => [\n                [\n                    'id' => 1,\n                    'text' => 'Foo',\n                    'disabled' => true\n                ],\n                [\n                    'id' => 2,\n                    'text' => 'Bar',\n                    'selected' => true\n                ],\n                [\n                    'text' => 'Group',\n                    'children' => [\n                        [\n                            'id' => 3,\n                            'text' => 'Child 1'\n                        ],\n                        [\n                            'id' => 4,\n                            'text' => 'Child 2'\n                        ]\n                        ...\n                    ]\n                ]\n                ...\n            ],\n            'pagination' => [\n                'more' => true\n            ]\n        ];\n    }\n\n\nThe results array can be assigned to either the `result` or `results` key. As an alternative to the Select2 format, results can also be provided as an associative array (also assigned to either key). Due to the fact that JavaScript does not guarantee the order of object properties, we suggest the method above for defining results.\n\n\n    public function onGetOptions()\n    {\n        $results = [\n            'key' => 'value',\n            ...\n        ];\n\n        return ['result' => $results];\n    }\n\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/custom-select/custom-select-control.css",
    "content": "/*\n * Select\n * --------------------------------------------------\n */\n\n@import \"select.vendor.css\";\n@import \"select.base.css\";\n@import \"select.variants.css\";\n@import \"select.control.css\";\n\n/*\n * Variables\n * --------------------------------------------------\n */\n\n.select2-container {\n    /* Select-specific variables */\n    --custom-select-icon-color: var(--bs-secondary-color);\n    --custom-select-hover-bg: #f5f5f5;\n    --custom-select-hover-color: #2b2b2b;\n    --custom-select-active-color: #fff;\n    --custom-select-active-bg: var(--oc-selection);\n    --custom-select-header-color: #98A0A0;\n    --custom-select-link-disabled-color: #98A0A0;\n    --custom-select-choice-bg: #72809d;\n    --custom-select-cursor-disabled: not-allowed;\n\n    /* Input variables */\n    --custom-select-input-bg: var(--oc-form-control-bg);\n    --custom-select-input-color: var(--bs-body-color);\n    --custom-select-input-border: var(--bs-border-color);\n    --custom-select-input-border-radius: 4px;\n    --custom-select-input-box-shadow: none;\n    --custom-select-input-font-size: 1rem;\n    --custom-select-input-border-focus: var(--oc-border-focus);\n    --custom-select-input-focus-box-shadow: 0 0 0 0.25rem rgba(53, 66, 91, 0.1);\n    --custom-select-input-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n    --custom-select-input-color-placeholder: #cccccc;\n    --custom-select-input-disabled-bg: var(--oc-form-control-disabled-bg);\n\n    /* Sizing variables */\n    --custom-select-padding-base-vertical: 8px;\n    --custom-select-padding-base-horizontal: 13px;\n    --custom-select-padding-small-vertical: 5px;\n    --custom-select-padding-small-horizontal: 10px;\n    --custom-select-padding-large-vertical: 10px;\n    --custom-select-padding-large-horizontal: 16px;\n\n    --custom-select-line-height-base: 1.428571429;\n    --custom-select-line-height-small: 1.5;\n    --custom-select-line-height-large: 1.3333333;\n\n    --custom-select-font-size-small: 12px;\n    --custom-select-font-size-large: 18px;\n\n    --custom-select-border-radius-base: 4px;\n    --custom-select-border-radius-small: 3px;\n    --custom-select-border-radius-large: 6px;\n\n    --custom-select-caret-width-base: 4px;\n    --custom-select-caret-width-large: 5px;\n\n    /* Height calculations */\n    --custom-select-input-height-base: 38px;\n    --custom-select-input-height-small: 30px;\n    --custom-select-input-height-large: 46px;\n\n    /* Box shadows */\n    --custom-select-box-shadow-z1: -2px 2px 5px rgba(67, 86, 100, 0.12);\n\n    /* Z-index */\n    --custom-select-zindex-form: 10;\n\n    /* Validation state colors */\n    --custom-select-state-warning-text: #8a6d3b;\n    --custom-select-state-warning-text-dark: #66512c;\n    --custom-select-state-danger-text: #a94442;\n    --custom-select-state-danger-text-dark: #843534;\n    --custom-select-state-success-text: #3c763d;\n    --custom-select-state-success-text-dark: #2b542c;\n\n    /* Brand colors */\n    --custom-select-brand-danger: var(--bs-danger);\n\n    /* Icon font */\n    --custom-select-icon-font-family: 'octo-icon';\n    --custom-select-icon-search: \"\\f002\";\n    --custom-select-icon-angle-down: \"\\f107\";\n    --custom-select-icon-angle-up: \"\\f106\";\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/custom-select/custom-select-control.js",
    "content": "/*\n * Custom Select\n *\n * Config:\n * - animation: true\n * - autohide: true\n * - delay: 5000\n */\nimport { ControlBase } from 'larajax';\n\nexport default class CustomSelectControl extends ControlBase {\n    init() {\n        this.$el = $(this.element);\n        this.initDefaults();\n    }\n\n    initDefaults() {\n        const defaults = {\n            animation: true,\n            autohide: true,\n            delay: 5000\n        };\n\n        for (const key in defaults) {\n            if (this.element.dataset[key] === undefined) {\n                this.element.dataset[key] = defaults[key];\n            }\n        }\n    }\n\n    connect() {\n        // Internal Events\n        this.formatSelectOption = function(state) {\n            // Escape HTML\n            var text = $('<span>').text(state.text).html();\n\n            // Element is optgroup\n            if (state.id === undefined) {\n                return text;\n            }\n\n            var $option = $(state.element),\n                statusColor = state.status ? state.status : $option.data('status'),\n                iconClass = state.icon ? state.icon : $option.data('icon'),\n                imageSrc = state.image ? state.image : $option.data('image');\n\n            if (statusColor) {\n                return '<span class=\"select-status status-indicator\" style=\"background:'+statusColor+'\"></span> ' + text;\n            }\n\n            if (iconClass) {\n                return '<i class=\"select-icon '+iconClass+'\"></i> ' + text;\n            }\n\n            if (imageSrc) {\n                return '<img class=\"select-image\" src=\"'+imageSrc+'\" alt=\"\" /> ' + text;\n            }\n\n            return text;\n        }\n\n        this.disableSelect = function(event, status) {\n            if ($(this).data('select2') != null) {\n                $(this).select2('enable', !status);\n            }\n        };\n\n        // Adds support for vanilla JS and jQuery change event\n        // Bind to native and prevent recursion with event once\n        this.triggerNativeChange = (event) => {\n            oc.Events.dispatch('change', { target: event.currentTarget });\n            $(event.currentTarget).one('change', this.triggerNativeChange);\n        };\n\n        // Destroy placeholder if it is still there\n        this.destroyPlaceholder();\n\n        // Init\n        this.$el.one('change', this.proxy(this.triggerNativeChange));\n        this.$el.on('disable', this.proxy(this.disableSelect));\n\n        this.bindCustomSelect();\n        this.bindCustomSelectWorkaround();\n    }\n\n    disconnect() {\n        this.clonePlaceholder();\n\n        this.$el.off('change', this.proxy(this.triggerNativeChange));\n        this.$el.off('disable', this.proxy(this.disableSelect));\n\n        this.$el.off('select2:open', this.select2OpenWorkaround);\n\n        if (this.$el.data('select2') != null) {\n            this.$el.select2('destroy');\n        }\n    }\n\n    bindCustomSelectWorkaround() {\n        // Hack to reintroduce containerCssClass\n        this.$el.data('select2').$container.addClass(this.options.containerCssClass);\n\n        // Workaround for search not auto focusing (https://github.com/select2/select2/issues/5993)\n        this.select2OpenWorkaround = function() {\n            setTimeout(function() {\n                var searchField = document.querySelector('.select2-container--open .select2-search__field');\n                if (searchField) {\n                    searchField.focus();\n                }\n            }, 100);\n        };\n\n        this.$el.on('select2:open', this.select2OpenWorkaround);\n    }\n\n    destroyPlaceholder() {\n        var artefact = this.element && this.element.nextElementSibling;\n        if (artefact && artefact.matches('.select2')) {\n            artefact.remove();\n        }\n    }\n\n    clonePlaceholder() {\n        var artefact = this.element && this.element.nextElementSibling;\n        if (artefact && artefact.matches('.select2')) {\n            var newNode = artefact.cloneNode(true);\n            artefact.parentNode.insertBefore(newNode, artefact.nextSibling);\n            newNode.innerHtml = artefact.innerHtml;\n            this.element.style.display = 'none';\n        }\n    }\n\n    bindCustomSelect() {\n        var options = this.options = this.buildSelectOptions();\n\n        if (this.element.dataset.handler) {\n            options = this.buildAjaxHandlerOption(options, this.element.dataset.handler);\n        }\n\n        if (this.element.dataset.tokenSeparators) {\n            options = this.buildTokenSeparatorOptions(options, this.element.dataset.tokenSeparators);\n        }\n\n        this.$el.select2(options);\n    }\n\n    buildTokenSeparatorOptions(selectOptions, separators) {\n        selectOptions.tags = true;\n        selectOptions.tokenSeparators = separators.split('|');\n\n        // When the dropdown is hidden, force the first option to be selected always.\n        if (this.element.classList.contains('select-no-dropdown')) {\n            selectOptions.selectOnClose = true;\n            selectOptions.minimumInputLength = 1;\n\n            this.$el.on('select2:closing', function() {\n                var highlightedEls = $('.select2-dropdown.select-no-dropdown:first .select2-results__option--highlighted');\n                if (highlightedEls.length > 0) {\n                    highlightedEls.removeClass('select2-results__option--highlighted');\n                    $('.select2-dropdown.select-no-dropdown:first .select2-results__option:first').addClass('select2-results__option--highlighted');\n                }\n            });\n        }\n\n        return selectOptions;\n    }\n\n    buildAjaxHandlerOption(selectOptions, handler) {\n        var self = this;\n\n        selectOptions.ajax = {\n            transport: function(params, success, failure) {\n                var request = oc.request(self.$el.get(0), handler, {\n                    data: params.data\n                });\n\n                request.done(success);\n                request.fail(failure);\n\n                return request;\n            },\n            processResults: function (data, params) {\n                var results = data.result || data.results,\n                    options = [];\n\n                delete(data.result);\n\n                // Select2 format\n                if (results[0] && typeof(results[0]) === 'object') {\n                    options = results;\n                }\n                // Build key-value map\n                else {\n                    for (var i in results) {\n                        if (results.hasOwnProperty(i)) {\n                            options.push({\n                                id: i,\n                                text: results[i]\n                            });\n                        }\n                    }\n                }\n\n                data.results = options;\n                return data;\n            },\n            dataType: 'json'\n        };\n\n        return selectOptions;\n    }\n\n    buildSelectOptions() {\n        var selectOptions = {\n            templateResult: this.formatSelectOption,\n            templateSelection: this.formatSelectOption,\n            escapeMarkup: function(m) { return m },\n            width: 'style',\n            containerCssClass: '',\n            dropdownCssClass: '',\n            selectionCssClass: ''\n        }\n\n        if (this.element.classList.contains('select-no-search')) {\n            selectOptions.minimumResultsForSearch = Infinity;\n        }\n\n        if (this.element.classList.contains('select-no-dropdown')) {\n            selectOptions.dropdownCssClass += ' select-no-dropdown';\n            selectOptions.selectionCssClass += ' select-no-dropdown';\n        }\n\n        if (this.element.classList.contains('select-hide-selected')) {\n            selectOptions.dropdownCssClass += ' select-hide-selected';\n        }\n\n        if (this.element.classList.contains('select-dropdown-auto-width')) {\n            selectOptions.dropdownAutoWidth = true;\n            selectOptions.dropdownCssClass += ' select-dropdown-auto-width';\n        }\n\n        // Sizing\n        if (this.element.classList.contains('form-control-sm')) {\n            selectOptions.containerCssClass += ' form-control-sm';\n        }\n\n        if (this.element.classList.contains('form-control-lg')) {\n            selectOptions.containerCssClass += ' form-control-lg';\n        }\n\n        // Language\n        var language = this.element.dataset.language;\n        if (!language) {\n            var meta = document.querySelector('meta[name=\"backend-locale\"]');\n            if (meta) {\n                language = meta.getAttribute('content');\n            }\n        }\n\n        if (language) {\n            selectOptions.language = language;\n        }\n\n        // Placeholder\n        var placeholder = this.element.dataset.placeholder;\n        if (placeholder) {\n            selectOptions.placeholder = placeholder;\n            selectOptions.allowClear = true;\n        }\n\n        return selectOptions;\n    }\n\n    static get DATANAME() {\n        return 'ocSelect';\n    }\n\n    static get DEFAULTS() {\n        return {\n            animation: true,\n            autohide: true,\n            delay: 5000\n        }\n    }\n}\n\n// CUSTOM RENDERER\n// ============================\n\naddEventListener('render', function() {\n    document.querySelectorAll('select.custom-select:not([data-control~=\"custom-select\"])').forEach(function(element) {\n        element.dataset.control = ((element.dataset.control || '') + ' custom-select').trim();\n    });\n});\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/custom-select/select.base.css",
    "content": ".select2-container {\n    &.in-progress {\n        .select2-selection {\n            .select2-selection__arrow b {\n                display: none !important;\n            }\n\n            &:after {\n                --custom-select-loader-size: 17px;\n                content: '';\n                position: absolute;\n                top: 50%;\n                right: 10px;\n                width: var(--custom-select-loader-size);\n                height: var(--custom-select-loader-size);\n                margin-top: calc(var(--custom-select-loader-size) / -2);\n                border: 2px solid var(--oc-primary-border);\n                border-top-color: var(--oc-accent);\n                border-radius: 50%;\n                animation: spin 0.8s linear infinite;\n            }\n        }\n    }\n}\n\n.select2-container--default {\n    display: block;\n\n    button {\n        padding: 0;\n        border: 0;\n        background: transparent;\n        line-height: 20px;\n    }\n\n    .select-icon {\n        margin-right: .2rem;\n    }\n\n    .select2-selection {\n        background-color: var(--custom-select-input-bg);\n        border: 1px solid var(--custom-select-input-border);\n        border-radius: var(--custom-select-input-border-radius);\n        color: var(--custom-select-input-color);\n        font-size: var(--custom-select-input-font-size);\n        box-shadow: var(--custom-select-input-box-shadow);\n        outline: 0;\n    }\n\n    .select2-search--dropdown {\n        position: relative;\n        padding: 7px 7px 0;\n\n        &:after {\n            position: absolute;\n            font-family: var(--custom-select-icon-font-family);\n            content: var(--custom-select-icon-search);\n            right: 16px;\n            top: 12px;\n            color: #95a5a6;\n        }\n\n        .select2-search__field {\n            background-color: var(--custom-select-input-bg);\n            border: 1px solid var(--custom-select-input-border);\n            border-radius: var(--custom-select-input-border-radius);\n            color: var(--custom-select-input-color);\n            font-size: var(--custom-select-input-font-size);\n            box-shadow: var(--custom-select-input-box-shadow);\n            padding-left: 6px;\n        }\n    }\n\n    .select2-search__field {\n        outline: 0;\n\n        &::placeholder {\n            color: var(--custom-select-input-color-placeholder);\n        }\n    }\n\n    .select2-results__option {\n        border-radius: var(--custom-select-border-radius-base);\n\n        &[role=group] {\n            padding: 0;\n        }\n\n        &[aria-disabled=true] {\n            color: var(--custom-select-link-disabled-color);\n            cursor: var(--custom-select-cursor-disabled);\n        }\n\n        &[aria-selected=true] {\n            background-color: var(--custom-select-hover-bg);\n            color: var(--custom-select-hover-color);\n        }\n\n        &--highlighted[aria-selected] {\n            background-color: var(--custom-select-active-bg);\n            color: var(--custom-select-active-color);\n        }\n\n        .select2-results__option {\n            padding: var(--custom-select-padding-base-vertical) var(--custom-select-padding-base-horizontal);\n\n            .select2-results__group {\n                padding-left: 0;\n            }\n\n            .select2-results__option {\n                margin-left: calc(-1 * var(--custom-select-padding-base-horizontal));\n                padding-left: calc(var(--custom-select-padding-base-horizontal) * 2);\n\n                .select2-results__option {\n                    margin-left: calc(-1 * var(--custom-select-padding-base-horizontal) * 2);\n                    padding-left: calc(var(--custom-select-padding-base-horizontal) * 3);\n\n                    .select2-results__option {\n                        margin-left: calc(-1 * var(--custom-select-padding-base-horizontal) * 3);\n                        padding-left: calc(var(--custom-select-padding-base-horizontal) * 4);\n\n                        .select2-results__option {\n                            margin-left: calc(-1 * var(--custom-select-padding-base-horizontal) * 4);\n                            padding-left: calc(var(--custom-select-padding-base-horizontal) * 5);\n\n                            .select2-results__option {\n                                margin-left: calc(-1 * var(--custom-select-padding-base-horizontal) * 5);\n                                padding-left: calc(var(--custom-select-padding-base-horizontal) * 6);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    .select2-results__group {\n        color: var(--custom-select-header-color);\n        display: block;\n        padding: var(--custom-select-padding-base-vertical) 6px;\n        line-height: var(--custom-select-line-height-base);\n        white-space: nowrap;\n        font-weight: 600;\n    }\n\n    &.select2-container--focus,\n    &.select2-container--open {\n        .select2-selection {\n            transition: var(--custom-select-input-transition);\n            border-color: var(--custom-select-input-border-focus);\n\n            &:focus-visible {\n                box-shadow: var(--custom-select-input-focus-box-shadow);\n            }\n        }\n    }\n\n    &.select2-container--open {\n        /* Make the dropdown arrow point up while the dropdown is visible. */\n        .select2-selection .select2-selection__arrow b {\n            &:before {\n                font-family: var(--custom-select-icon-font-family);\n                content: var(--custom-select-icon-angle-up);\n                line-height: inherit;\n            }\n        }\n    }\n\n    .select2-selection__clear {\n        color: var(--custom-select-icon-color);\n        cursor: pointer;\n        float: right;\n        font-weight: bold;\n        margin-right: 10px;\n\n        &:hover {\n            color: #333;\n        }\n    }\n\n    &.select2-container--disabled {\n        .select2-selection {\n            border-color: var(--custom-select-input-border);\n            box-shadow: none;\n        }\n\n        .select2-selection,\n        .select2-search__field {\n            cursor: var(--custom-select-cursor-disabled);\n        }\n\n        .select2-selection {\n            background-color: var(--custom-select-input-disabled-bg);\n        }\n\n        .select2-selection--multiple .select2-selection__choice {\n            background: #ccc;\n        }\n\n        .select2-selection__clear,\n        .select2-selection--multiple .select2-selection__choice__remove {\n            display: none;\n        }\n    }\n\n    /* Dropdown */\n    .select2-dropdown {\n        overflow-x: hidden;\n        margin-top: 5px;\n        padding-top: 0;\n        background-color: var(--custom-select-input-bg);\n        border: 1px solid var(--custom-select-input-border);\n        border-radius: var(--custom-select-border-radius-base);\n        box-shadow: var(--custom-select-box-shadow-z1);\n\n        &--above {\n            margin-top: -5px;\n            box-shadow: var(--custom-select-box-shadow-z1);\n        }\n    }\n\n    .select2-results > .select2-results__options {\n        font-size: var(--custom-select-input-font-size);\n        max-height: 200px;\n        overflow-y: auto;\n        padding: 7px;\n    }\n\n    /* No Dropdown */\n    .select2-dropdown.select-no-dropdown {\n        display: none !important;\n    }\n\n    .select2-dropdown.select-hide-selected {\n        .select2-results__option--selected {\n            display: none !important;\n        }\n    }\n\n    /* Auto Width */\n    .select2-dropdown.select-dropdown-auto-width {\n        .select2-results__options {\n            overflow-x: hidden;\n        }\n\n        .select2-results__option {\n            white-space: nowrap;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/custom-select/select.control.css",
    "content": ".select2-container--default {\n\n    /* Control sizing */\n\n    /* 1 */\n    &.form-control-sm,\n    &.form-control-lg {\n        border-radius: 0;\n        font-size: 12px;\n        height: auto;\n        line-height: 1;\n        padding: 0;\n    }\n\n    &.form-control-sm,\n    .input-group-sm &,\n    .form-group-sm & {\n        .select2-selection--single {\n            border-radius: var(--custom-select-border-radius-small);\n            font-size: var(--custom-select-font-size-small);\n            height: var(--custom-select-input-height-small);\n            line-height: var(--custom-select-line-height-small);\n            padding: var(--custom-select-padding-small-vertical) calc(var(--custom-select-padding-small-horizontal) + var(--custom-select-caret-width-base) * 3) var(--custom-select-padding-small-vertical) var(--custom-select-padding-small-horizontal);\n\n            /* 2 */\n            .select2-selection__arrow b {\n                margin-left: calc(-1 * var(--custom-select-padding-small-vertical));\n            }\n        }\n\n        .select2-selection--multiple {\n            min-height: var(--custom-select-input-height-small);\n\n            .select2-selection__choice {\n                font-size: var(--custom-select-font-size-small);\n                line-height: var(--custom-select-line-height-small);\n                margin: calc(var(--custom-select-padding-small-vertical) - 2px) 0 0 calc(var(--custom-select-padding-small-horizontal) / 2);\n                padding: 0 calc(var(--custom-select-padding-small-vertical) - 2px);\n            }\n\n            .select2-search--inline .select2-search__field {\n                padding: 0 var(--custom-select-padding-small-horizontal);\n                font-size: var(--custom-select-font-size-small);\n                height: calc(var(--custom-select-input-height-small) - 2px);\n                line-height: calc(var(--custom-select-line-height-small) + 1);\n            }\n\n            .select2-selection__clear {\n                margin-top: var(--custom-select-padding-small-vertical);\n            }\n        }\n    }\n\n    &.input-lg,\n    .input-group-lg &,\n    .form-group-lg & {\n        .select2-selection--single {\n            border-radius: var(--custom-select-border-radius-large);\n            font-size: var(--custom-select-font-size-large);\n            height: var(--custom-select-input-height-large);\n            line-height: var(--custom-select-line-height-large);\n            padding: var(--custom-select-padding-large-vertical) calc(var(--custom-select-padding-large-horizontal) + var(--custom-select-caret-width-large) * 3) var(--custom-select-padding-large-vertical) var(--custom-select-padding-large-horizontal);\n\n            /* 1 */\n            .select2-selection__arrow {\n                width: var(--custom-select-caret-width-large);\n\n                b {\n                    border-width: var(--custom-select-caret-width-large) var(--custom-select-caret-width-large) 0 var(--custom-select-caret-width-large);\n                    margin-left: calc(-1 * var(--custom-select-padding-large-vertical));\n                    margin-top: calc(-1 * var(--custom-select-caret-width-large) / 2);\n                }\n            }\n        }\n\n        .select2-selection--multiple {\n            min-height: var(--custom-select-input-height-large);\n\n            .select2-selection__choice {\n                font-size: var(--custom-select-font-size-large);\n                line-height: var(--custom-select-line-height-large);\n                border-radius: 4px;\n                margin: calc(var(--custom-select-padding-large-vertical) - 1px) 0 0 calc(var(--custom-select-padding-large-horizontal) / 2);\n                padding: 0 var(--custom-select-padding-large-vertical);\n            }\n\n            .select2-search--inline .select2-search__field {\n                padding: 0 var(--custom-select-padding-large-horizontal);\n                font-size: var(--custom-select-font-size-large);\n                height: calc(var(--custom-select-input-height-large) - 2px);\n                line-height: calc(var(--custom-select-line-height-large) + 1);\n            }\n\n            .select2-selection__clear {\n                margin-top: var(--custom-select-padding-large-vertical);\n            }\n        }\n    }\n\n    &.input-lg.select2-container--open,\n    .input-group-lg &.select2-container--open {\n        .select2-selection--single {\n            /* Make the dropdown arrow point up while the dropdown is visible. */\n            .select2-selection__arrow b {\n                border-color: transparent transparent var(--custom-select-icon-color) transparent;\n                border-width: 0 var(--custom-select-caret-width-large) var(--custom-select-caret-width-large) var(--custom-select-caret-width-large);\n            }\n        }\n    }\n\n    /* RTL Support */\n    &[dir=\"rtl\"] {\n        .select2-selection--single {\n            padding-left: calc(var(--custom-select-padding-base-horizontal) + var(--custom-select-caret-width-base) * 3);\n            padding-right: var(--custom-select-padding-base-horizontal);\n\n            .select2-selection__rendered {\n                padding-right: 0;\n                padding-left: 0;\n                text-align: right; /* 1 */\n            }\n\n            .select2-selection__clear {\n                float: left;\n            }\n\n            .select2-selection__arrow {\n                left: var(--custom-select-padding-base-horizontal);\n                right: auto;\n\n                b {\n                    margin-left: 0;\n                }\n            }\n        }\n\n        .select2-selection--multiple {\n            .select2-selection__choice,\n            .select2-selection__placeholder {\n                float: right;\n            }\n\n            .select2-selection__choice {\n                margin-left: 0;\n                margin-right: calc(var(--custom-select-padding-base-horizontal) / 2);\n            }\n\n            .select2-selection__choice__remove {\n                margin-left: 2px;\n                margin-right: auto;\n            }\n        }\n    }\n}\n\n/* Validation */\n\n.has-warning {\n    .select2-dropdown,\n    .select2-selection {\n        border-color: var(--custom-select-state-warning-text);\n    }\n\n    .select2-container--focus .select2-selection,\n    .select2-container--open .select2-selection {\n        border-color: var(--custom-select-state-warning-text-dark);\n    }\n\n    &.select2-drop-active {\n        border-color: var(--custom-select-state-warning-text-dark);\n\n        &.select2-drop.select2-drop-above {\n            border-top-color: var(--custom-select-state-warning-text-dark);\n        }\n    }\n}\n\n.has-error {\n    .select2-dropdown,\n    .select2-selection {\n        border-color: var(--custom-select-state-danger-text);\n    }\n\n    .select2-container--focus .select2-selection,\n    .select2-container--open .select2-selection {\n        border-color: var(--custom-select-state-danger-text-dark);\n    }\n\n    &.select2-drop-active {\n        border-color: var(--custom-select-state-danger-text-dark);\n\n        &.select2-drop.select2-drop-above {\n            border-top-color: var(--custom-select-state-danger-text-dark);\n        }\n    }\n}\n\n.has-success {\n    .select2-dropdown,\n    .select2-selection {\n        border-color: var(--custom-select-state-success-text);\n    }\n\n    .select2-container--focus .select2-selection,\n    .select2-container--open .select2-selection {\n        border-color: var(--custom-select-state-success-text-dark);\n    }\n\n    &.select2-drop-active {\n        border-color: var(--custom-select-state-success-text-dark);\n\n        &.select2-drop.select2-drop-above {\n            border-top-color: var(--custom-select-state-success-text-dark);\n        }\n    }\n}\n\n/* Input groups */\n\n.input-group .select2-container--default {\n    display: table;\n    table-layout: fixed;\n    position: relative;\n    z-index: var(--custom-select-zindex-form);\n    float: left;\n    width: 100%;\n    margin-bottom: 0;\n}\n\n.input-group.select2-default-prepend .select2-container--default {\n    .select2-selection {\n        border-top-left-radius: 0;\n        border-bottom-left-radius: 0;\n    }\n}\n\n.input-group.select2-default-append .select2-container--default {\n    .select2-selection {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0;\n    }\n}\n\n.select2-default-append,\n.select2-default-prepend {\n    .select2-container--default,\n    .input-group-btn,\n    .input-group-btn .btn {\n        vertical-align: top;\n    }\n}\n\n/**\n * Temporary fix for https://github.com/select2/select2-default-theme/issues/9\n *\n * Provides `!important` for certain properties of the class applied to the\n * original `<select>` element to hide it.\n *\n * @see https://github.com/select2/select2/pull/3301\n * @see https://github.com/fk/select2/commit/31830c7b32cb3d8e1b12d5b434dee40a6e753ada\n */\n\n.form-control.select2-hidden-accessible {\n    position: absolute !important;\n    width: 1px !important;\n}\n\n/* Inline */\n\n.form-inline .select2-container--default {\n    display: inline-block;\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/custom-select/select.variants.css",
    "content": "/* Single select */\n\n.select2-container--default .select2-selection--single {\n    height: calc(var(--custom-select-input-height-base) - 1px);\n    line-height: 1.6;\n    padding: var(--custom-select-padding-base-vertical) calc(var(--custom-select-padding-base-horizontal) + var(--custom-select-caret-width-base) * 3) var(--custom-select-padding-base-vertical) var(--custom-select-padding-base-horizontal);\n\n    /* Adjust the single Select2's dropdown arrow button appearance. */\n    .select2-selection__arrow {\n        position: absolute;\n        bottom: 0;\n        right: var(--custom-select-padding-base-horizontal);\n        top: 0;\n        width: var(--custom-select-caret-width-base);\n\n        b {\n            position: absolute;\n            top: 50%;\n            height: 9px;\n            width: 8px;\n            right: 3px;\n            margin-top: -5px;\n            line-height: 9px;\n\n            &:before {\n                font-family: var(--custom-select-icon-font-family);\n                content: var(--custom-select-icon-angle-down);\n                display: inline-block;\n                line-height: inherit;\n            }\n        }\n    }\n\n    .select2-selection__rendered {\n        color: var(--custom-select-input-color);\n        padding: 0;\n    }\n\n    .select2-selection__placeholder {\n        color: var(--custom-select-input-color-placeholder);\n    }\n}\n\n/* Multiple select */\n\n.select2-container--default .select2-selection--multiple {\n    min-height: var(--custom-select-input-height-base);\n    position: relative;\n    cursor: text;\n    padding-bottom: 5px;\n\n    &.select2-selection--clearable {\n        padding-right: 25px;\n    }\n\n    .select2-selection__placeholder {\n        color: var(--custom-select-input-color-placeholder);\n        float: left;\n        margin-top: 5px;\n    }\n\n    /* Make Multi Select2's choices match default button styles. */\n    .select2-selection__choice {\n        color: white;\n        background: var(--custom-select-choice-bg);\n        border: none;\n        border-radius: 6px;\n        box-sizing: border-box;\n\n        display: inline-block;\n        margin: calc(var(--custom-select-padding-base-vertical) - 2px) 0 0 calc(var(--custom-select-padding-base-horizontal) / 2);\n        padding: 1px 6px 2px 6px;\n\n        position: relative;\n        max-width: 100%;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        vertical-align: bottom;\n        white-space: nowrap;\n    }\n\n    .select2-selection__choice__display {\n        cursor: default;\n        padding-left: 2px;\n        padding-right: 5px;\n    }\n\n    /* Minus 2px borders. */\n    .select2-search--inline .select2-search__field {\n        background: transparent;\n        color: var(--custom-select-input-color);\n        padding: 0 var(--custom-select-padding-base-horizontal);\n        height: 28px;\n        line-height: 2.3;\n        margin-top: 0;\n        margin-left: 0;\n        min-width: 5em;\n        white-space: nowrap;\n    }\n\n    .select2-selection__choice__remove {\n        color: white;\n        cursor: pointer;\n        display: inline-block;\n        font-weight: normal;\n        font-size: 13px;\n        margin: 0 6px 0 0;\n\n        &:hover {\n            color: var(--custom-select-brand-danger);\n        }\n    }\n\n    .select2-selection__clear {\n        margin-top: var(--custom-select-padding-base-vertical);\n    }\n}\n\n/* Taglist Preview Mode */\n\n.taglist--preview {\n    overflow: hidden;\n    list-style-type: none;\n    padding-top: 0;\n    padding-left: 0;\n    padding-bottom: 7px;\n    margin: 0;\n\n    .taglist__item {\n        color: white;\n        background: var(--custom-select-choice-bg);\n        border-radius: 6px;\n        cursor: default;\n        float: left;\n        margin: calc(var(--custom-select-padding-base-vertical) - 2px) 0 0 calc(var(--custom-select-padding-base-horizontal) / 2);\n        padding: 1px 9px 2px 9px;\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/custom-select/select.vendor.css",
    "content": ".select2-container {\n    box-sizing: border-box;\n    display: inline-block;\n    margin: 0;\n    position: relative;\n    vertical-align: middle;\n\n    .select2-selection--single {\n        box-sizing: border-box;\n        cursor: pointer;\n        display: block;\n        height: 28px;\n        user-select: none;\n        -webkit-user-select: none;\n\n        .select2-selection__rendered {\n            display: block;\n            padding-left: 8px;\n            padding-right: 20px;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n        }\n\n        .select2-selection__clear {\n            background-color: transparent;\n            border: none;\n            font-size: 1em;\n        }\n    }\n\n    &[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n        padding-right: 8px;\n        padding-left: 20px;\n    }\n\n    .select2-selection--multiple {\n        box-sizing: border-box;\n        cursor: pointer;\n        display: block;\n        min-height: 32px;\n        user-select: none;\n        -webkit-user-select: none;\n\n        .select2-selection__rendered {\n            display: inline;\n            list-style: none;\n            padding: 0;\n        }\n\n        .select2-selection__clear {\n            background-color: transparent;\n            border: none;\n            font-size: 1em;\n        }\n    }\n\n    .select2-search--inline .select2-search__field {\n        box-sizing: border-box;\n        border: none;\n        font-size: 100%;\n        margin-top: 5px;\n        margin-left: 5px;\n        padding: 0;\n        max-width: 100%;\n        resize: none;\n        height: 18px;\n        vertical-align: bottom;\n        overflow: hidden;\n        word-break: keep-all;\n\n        &::-webkit-search-cancel-button {\n            -webkit-appearance: none;\n        }\n    }\n}\n\n.select2-dropdown {\n    box-sizing: border-box;\n    display: block;\n    position: absolute;\n    left: -100000px;\n    width: 100%;\n}\n\n.select2-results {\n    display: block;\n}\n\n.select2-results__options {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n.select2-results__option {\n    padding: 6px;\n    user-select: none;\n    -webkit-user-select: none;\n}\n\n.select2-results__option--selectable {\n    cursor: pointer;\n}\n\n.select2-container--open .select2-dropdown {\n    left: 0;\n}\n\n.select2-container--open .select2-dropdown--above {\n    border-bottom: none;\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.select2-container--open .select2-dropdown--below {\n    border-top: none;\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n}\n\n.select2-search--dropdown {\n    display: block;\n    padding: 4px;\n\n    .select2-search__field {\n        padding: 4px;\n        width: 100%;\n        box-sizing: border-box;\n\n        &::-webkit-search-cancel-button {\n            -webkit-appearance: none;\n        }\n    }\n\n    &.select2-search--hide {\n        display: none;\n    }\n}\n\n.select2-close-mask {\n    border: 0;\n    margin: 0;\n    padding: 0;\n    display: block;\n    position: fixed;\n    left: 0;\n    top: 0;\n    min-height: 100%;\n    min-width: 100%;\n    height: auto;\n    width: auto;\n    opacity: 0;\n    z-index: 99;\n    background-color: #fff;\n}\n\n.select2-hidden-accessible {\n    border: 0 !important;\n    clip: rect(0 0 0 0) !important;\n    -webkit-clip-path: inset(50%) !important;\n    clip-path: inset(50%) !important;\n    height: 1px !important;\n    overflow: hidden !important;\n    padding: 0 !important;\n    position: absolute !important;\n    width: 1px !important;\n    white-space: nowrap !important;\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/datepicker/README.md",
    "content": "# Date Pickers\n\nRenders a date picker, time picker, or both. The input associated to each control acts as a facade, the final value is stored in an underlying hidden input, called a data locker.\n\n## Examples\n\n### Date Picker\n\n    <div data-control=\"datepicker\">\n        <!-- Date -->\n        <input\n            type=\"text\"\n            class=\"form-control\"\n            placeholder=\"Select a date\"\n            data-datepicker />\n\n        <!-- Data locker -->\n        <input\n            type=\"hidden\"\n            name=\"my_date\"\n            data-datetime-value\n            />\n    </div>\n\n### Time Picker\n\n    <div data-control=\"datepicker\">\n        <!-- Time -->\n        <input\n            type=\"text\"\n            class=\"form-control\"\n            placeholder=\"Select a time\"\n            data-timepicker />\n\n        <!-- Data locker -->\n        <input\n            type=\"hidden\"\n            name=\"my_date\"\n            data-datetime-value\n            />\n    </div>\n\n### Date & Time Picker\n\n    <div data-control=\"datepicker\">\n        <div class=\"row\">\n            <div class=\"col-md-6\">\n                <!-- Date -->\n                <input\n                    type=\"text\"\n                    class=\"form-control\"\n                    placeholder=\"Select a date\"\n                    data-datepicker />\n            </div>\n            <div class=\"col-md-6\">\n                <!-- Time -->\n                <input\n                    type=\"text\"\n                    class=\"form-control\"\n                    placeholder=\"Select a time\"\n                    data-timepicker />\n            </div>\n        </div>\n\n        <!-- Data locker -->\n        <input\n            type=\"hidden\"\n            name=\"my_date\"\n            data-datetime-value\n            />\n    </div>\n\n## Locale and timezone handling\n\nThe date picker handles timezone and locale preferences automatically. Locale preferences will provide the date format for the region. The timezone setting is used to convert the chosen value to a uniform timezone, commonly UTC. These features are not enabled by default and require adding `<meta />` tags to the page.\n\n```html\n<meta name=\"app-timezone\" content=\"UTC\">\n<meta name=\"backend-timezone\" content=\"Australia/Sydney\">\n<meta name=\"backend-locale\" content=\"en-au\">\n```\n\nWhen a date is selected, it will be converted from the `backend-timezone` to the `app-timezone` for normalized storage.\n\n> **Note**: Locale values are supplied by the Moment.js library.\n\n## Supported data attributes\n\n- data-control=\"datepicker\" - enables the plugin on an element\n- data-format=\"YYYY-MM-DD\" - display format\n- data-min-date=\"value\" - minimum date to allow\n- data-max-date=\"value\" - maximum date to allow\n- data-year-range=\"10\" - range of years to display\n\n## JavaScript API\n\n```js\n$('div#datepicker').datePicker({\n    format: 'YYYY-MM-DD',\n    yearRange: 10\n})\n```\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/datepicker/datepicker.css",
    "content": "/*\n * Date Picker\n * --------------------------------------------------\n */\n\n@import \"datepicker.date.css\";\n@import \"datepicker.time.css\";\n\n.pika-single {\n    border: var(--oc-popup-border) !important;\n    background: var(--oc-popup-bg);\n    color: var(--oc-text-color);\n    border-radius: 8px;\n\n    font-size: 12px;\n    margin-top: 5px;\n    z-index: var(--oc-zindex-datepicker);\n    font-family: var(--bs-body-font-family);\n    width: 310px;\n\n    &.is-bound {\n        box-shadow: 0 0 32px rgba(67, 86, 100, 0.2);\n    }\n\n    abbr {\n        border-bottom: none;\n    }\n\n    .pika-button {\n        border-radius: 999px !important;\n        text-align: center;\n        width: 29px;\n        height: 29px;\n        margin: 3px;\n        background: transparent;\n        color: var(--oc-text-color);\n    }\n\n    .is-today .pika-button {\n        background: var(--bs-secondary);\n        color: #fff;\n        font-weight: bold;\n    }\n\n    .is-selected .pika-button {\n        box-shadow: none;\n        background: var(--oc-selection);\n        color: #fff;\n    }\n\n    .pika-button:hover {\n        color: var(--oc-emphasis-color) !important;\n        background: var(--bs-secondary-bg) !important;\n    }\n\n    .pika-label {\n        font-weight: normal;\n    }\n\n    .pika-table th {\n        text-transform: uppercase;\n        font-weight: normal;\n        line-height: 30px;\n        font-size: 11px;\n        color: var(--oc-primary-color);\n    }\n\n    .pika-footer {\n        .pika-label {\n            font-size: 11px;\n        }\n    }\n}\n\n.clockpicker-popover {\n    z-index: var(--oc-zindex-datepicker);\n    box-shadow: 0 0 32px rgba(67, 86, 100, 0.2);\n    border-radius: 8px;\n    border: var(--oc-popup-border) !important;\n    background-color: var(--oc-popup-bg);\n\n    .popover-title {\n        background-color: var(--oc-popup-bg);\n        font-size: 20px;\n        font-weight: normal;\n        border: none;\n    }\n\n    .popover-content {\n        background-color: var(--bs-tertiary-bg);\n    }\n\n    &.top {\n        margin-top: -5px;\n    }\n    &.right {\n        margin-left: 5px;\n    }\n    &.bottom {\n        margin-top: 5px;\n    }\n    &.left {\n        margin-left: -5px;\n    }\n\n    > .arrow {\n        display: none;\n    }\n}\n\n.clockpicker-plate {\n    background-color: var(--oc-popup-bg);\n    border: var(--oc-popup-border);\n}\n\n.clockpicker-tick {\n    color: var(--oc-text-color);\n\n    &.active,\n    &:hover {\n        background-color: var(--bs-secondary-bg);\n        color: var(--oc-emphasis-color);\n    }\n}\n\n.clockpicker-canvas-bg {\n    fill: var(--bs-secondary-bg);\n}\n.clockpicker-canvas-bg-trans {\n    fill: rgba(0, 149, 221, .25);\n}\n\n.clockpicker-hours .clockpicker-tick {\n    font-size: 12px;\n\n    &.tick-inner {\n        font-size: 16px;\n    }\n}\n.clockpicker-minutes .clockpicker-tick {\n    font-size: 16px;\n}\n\n[data-bs-theme=\"dark\"] {\n    .pika-prev,\n    .pika-next {\n        filter: invert(100%);\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/datepicker/datepicker.date.css",
    "content": "/*\n * Date Picker\n * --------------------------------------------------\n */\n\n.pika-single {\n    display: block;\n    position: relative;\n    width: 240px;\n    padding: 8px;\n\n    &.is-hidden {\n        display: none;\n    }\n    &.is-bound {\n        position: absolute;\n        box-shadow: 0 5px 15px -5px rgba(0,0,0,.5);\n    }\n}\n\n.pika-title,\n.pika-footer {\n    position: relative;\n    text-align: center;\n}\n\n.pika-footer {\n    margin: 5px auto 0;\n}\n\n.pika-label {\n    display: inline-block;\n    position: relative;\n    z-index: var(--oc-zindex-datepicker);\n    overflow: hidden;\n    margin: 0;\n    padding: 5px 3px;\n    font-size: 14px;\n    line-height: 20px;\n    font-weight: bold;\n    background-color: var(--oc-popup-bg);\n}\n\n.pika-footer,\n.pika-title {\n    select {\n        cursor: pointer;\n        position: absolute;\n        z-index: calc(var(--oc-zindex-datepicker) - 1);\n        margin: 0;\n        left: 0;\n        top: 5px;\n        opacity: 0;\n    }\n}\n\n.pika-prev,\n.pika-next {\n    display: block;\n    cursor: pointer;\n    position: relative;\n    outline: none;\n    border: 0;\n    padding: 0;\n    width: 20px;\n    height: 30px;\n    background-color: transparent;\n    background-position: center center;\n    background-repeat: no-repeat;\n    background-size: 75% 75%;\n    white-space: nowrap;\n    text-indent: 100%;\n    overflow: hidden;\n    opacity: .5;\n\n    &:hover {\n        opacity: 1;\n    }\n}\n\n.pika-prev,\n.is-rtl .pika-next {\n    float: left;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==');\n}\n\n.pika-next,\n.is-rtl .pika-prev {\n    float: right;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=');\n}\n\n.pika-prev.is-disabled,\n.pika-next.is-disabled {\n    cursor: default;\n    opacity: .2;\n}\n\n.pika-select {\n    display: inline-block;\n}\n\n.pika-table {\n    width: 100%;\n    border-collapse: collapse;\n    border-spacing: 0;\n    border: 0;\n\n    th, td {\n        width: 14.285714285714286%;\n    }\n\n    th {\n        color: #999;\n        font-size: 12px;\n        line-height: 25px;\n        font-weight: bold;\n        text-align: center;\n    }\n}\n\n.pika-button {\n    cursor: pointer;\n    display: block;\n    outline: none;\n    border: 0;\n    margin: 0;\n    width: 100%;\n    padding: 5px;\n    color: #666;\n    font-size: 12px;\n    line-height: 15px;\n    text-align: right;\n    background: #f5f5f5;\n}\n\n.is-today .pika-button {\n    color: #33aaff;\n    font-weight: bold;\n}\n\n.is-selected .pika-button {\n    color: #fff;\n    font-weight: bold;\n    background: #33aaff;\n    box-shadow: inset 0 1px 3px #178fe5;\n    border-radius: 3px;\n}\n\n.is-disabled .pika-button {\n    pointer-events: none;\n    cursor: default;\n    color: #999;\n    opacity: .3;\n}\n\n.pika-button:hover {\n    color: #fff !important;\n    background: #ff8000 !important;\n    box-shadow: none !important;\n    border-radius: 3px !important;\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/datepicker/datepicker.js",
    "content": "import { ControlBase } from 'larajax';\n\n/*\n * DatePicker plugin\n *\n * Data attributes:\n * - data-control=\"datepicker\" - enables the datepicker plugin\n *\n * JavaScript API:\n * oc.fetchControl(element, 'datepicker')\n *\n * Dependencies:\n * - Pikaday plugin (pikaday.js)\n * - Pikaday jQuery addon (pikaday.jquery.js)\n * - Clockpicker plugin (jquery-clockpicker.js)\n * - Moment library (moment.js)\n * - Moment Timezone library (moment.timezone.js)\n */\nexport default class DatePickerControl extends ControlBase {\n    init() {\n        this.$el = $(this.element);\n\n        // Apply defaults to config\n        this.config = Object.assign({\n            minDate: null,\n            maxDate: null,\n            format: null,\n            yearRange: 10,\n            disableDays: null,\n            firstDay: 0,\n            twelveHour: false,\n            showWeekNumber: false,\n            hoursOnly: false\n        }, this.config);\n\n        this.dbDateTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n        this.dbDateFormat = 'YYYY-MM-DD';\n        this.dbTimeFormat = 'HH:mm:ss';\n    }\n\n    connect() {\n        this.$dataLocker = $('[data-datetime-value]', this.$el);\n        this.$datePicker = $('[data-datepicker]', this.$el);\n        this.$timePicker = $('[data-timepicker]', this.$el);\n        this.hasDate = !!this.$datePicker.length;\n        this.hasTime = !!this.$timePicker.length;\n        this.ignoreTimezone = !!this.element.hasAttribute('data-ignore-timezone');\n        this.defaultTimeMidnight = !!this.element.hasAttribute('data-default-time-midnight');\n        this.disabledDays = this.config.disableDays || [];\n\n        if (oc.changeMonitor) {\n            oc.changeMonitor.disable();\n        }\n\n        this.initRegion();\n\n        if (this.hasDate) {\n            this.initDatePicker();\n        }\n\n        if (this.hasTime) {\n            this.initTimePicker();\n        }\n\n        if (oc.changeMonitor) {\n            oc.changeMonitor.enable();\n        }\n\n        this.$timePicker.on('change.oc.datepicker', this.proxy(this.onChangePicker));\n        this.$datePicker.on('change.oc.datepicker', this.proxy(this.onChangePicker));\n        oc.Events.on(this.element, 'trigger:disable', this.proxy(this.checkPickerStates));\n\n        this.checkPickerStates();\n    }\n\n    disconnect() {\n        this.$timePicker.off('change.oc.datepicker', this.proxy(this.onChangePicker));\n        this.$datePicker.off('change.oc.datepicker', this.proxy(this.onChangePicker));\n        oc.Events.off(this.element, 'trigger:disable', this.proxy(this.checkPickerStates));\n\n        this.$el = null;\n        this.$dataLocker = null;\n        this.$datePicker = null;\n        this.$timePicker = null;\n    }\n\n    onChangePicker(event) {\n        if (!$.trim($(event.target).val())) {\n            this.emptyValues();\n        }\n        else {\n            this.onSetLockerValue();\n        }\n    }\n\n    checkPickerStates() {\n        this.dateIsEnabled = !this.$datePicker.attr('readonly') && !this.$datePicker.attr('disabled');\n        this.timeIsEnabled = !this.$timePicker.attr('readonly') && !this.$timePicker.attr('disabled');\n        var dateBound = !!this.$datePicker.data('pickerBound'),\n            timeBound = !!this.$timePicker.data('pickerBound');\n\n        if (!this.dateIsEnabled && dateBound) {\n            this.$datePicker.pikaday('destroy');\n            this.$datePicker.data('pickerBound', false);\n        }\n        else if (this.dateIsEnabled && !dateBound) {\n            this.initDatePicker();\n        }\n\n        if (!this.timeIsEnabled && timeBound) {\n            this.$timePicker.clockpicker('remove');\n            this.$timePicker.data('pickerBound', false);\n        }\n        else if (this.timeIsEnabled && !timeBound) {\n            this.initTimePicker();\n        }\n    }\n\n    onSetLockerValue() {\n        var dateValue = this.getDatePickerValue();\n\n        var timeValue = this.getTimePickerValue();\n\n        var momentObj = moment\n            .tz(dateValue + ' ' + timeValue, this.dbDateTimeFormat, this.timezone)\n            .tz(this.appTimezone);\n\n        var lockerValue = momentObj.format(this.dbDateTimeFormat);\n\n        this.$dataLocker.val(lockerValue);\n    }\n\n    //\n    // Datepicker\n    //\n\n    initDatePicker() {\n        var dateFormat = this.getDateFormat(),\n            now = moment().tz(this.timezone).format(dateFormat);\n\n        var pikadayOptions = {\n            yearRange: this.config.yearRange,\n            firstDay: this.config.firstDay,\n            showWeekNumber: this.config.showWeekNumber,\n            format: dateFormat,\n            setDefaultDate: now,\n            keyboardInput: false,\n            disableDayFn: (date) => {\n                return this.isDateDisabled(date);\n            },\n            onOpen: function() {\n                var $field = $(this._o.trigger)\n\n                $(this.el).css({\n                    left: 'auto',\n                    right: $(window).width() - $field.offset().left - $field.outerWidth()\n                })\n            }\n        }\n\n        var lang = this.getLang('datepicker', false);\n        if (lang) {\n            pikadayOptions.i18n = lang;\n        }\n\n        this.$datePicker.val(this.getDataLockerValue(dateFormat));\n\n        if (this.config.minDate) {\n            pikadayOptions.minDate = new Date(this.config.minDate);\n        }\n\n        if (this.config.maxDate) {\n            pikadayOptions.maxDate = new Date(this.config.maxDate);\n        }\n\n        this.$datePicker.pikaday(pikadayOptions);\n        this.$datePicker.data('pickerBound', true);\n    }\n\n    isDateDisabled(date) {\n        if (!Array.isArray(this.disabledDays)) {\n            return false;\n        }\n\n        const parsedDate = moment(date, this.getDateFormat());\n        const compareDate = parsedDate.format('YYYY-MM-DD');\n\n        for (const disabledDay of this.disabledDays) {\n            if (parsedDate.day() === disabledDay) {\n                return true;\n            }\n\n            if (disabledDay === compareDate) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    // Returns in user preference timezone\n    getDatePickerValue() {\n        var value = this.$datePicker.val();\n\n        if (!this.hasDate || !value) {\n            return moment.tz(this.appTimezone)\n                .tz(this.timezone)\n                .format(this.dbDateFormat);\n        }\n\n        return moment(value, this.getDateFormat()).format(this.dbDateFormat);\n    }\n\n    getDateFormat() {\n        var format = 'YYYY-MM-DD';\n\n        if (this.config.format) {\n            format = this.config.format;\n        }\n        else if (this.locale) {\n            format = moment()\n                .locale(this.locale)\n                .localeData()\n                .longDateFormat('l');\n        }\n\n        return format;\n    }\n\n    //\n    // Timepicker\n    //\n\n    initTimePicker() {\n        this.$timePicker.clockpicker({\n            autoclose: 'true',\n            placement: 'auto',\n            align: 'right',\n            twelvehour: this.isTimeTwelveHour(),\n            afterDone: this.proxy(this.onChangeTimePicker),\n            afterHourSelect: this.proxy(this.onAfterHourSelect)\n        });\n\n        this.$timePicker.val(this.getDataLockerValue(this.getTimeFormat()));\n        this.$timePicker.data('pickerBound', true);\n    }\n\n    // Trigger a change event when the time is changed,\n    // to allow dependent fields to refresh\n    onChangeTimePicker() {\n        this.$timePicker.trigger('change');\n    }\n\n    // Trigger a change event when the hour is selected\n    onAfterHourSelect() {\n        if (this.config.hoursOnly) {\n            var clockpickerInstance = this.$timePicker.data('clockpicker');\n\n            var selectedHour = clockpickerInstance.hours;\n            var formattedHour = this.isTimeTwelveHour()\n                ? (selectedHour < 10 ? '0' + selectedHour : selectedHour) + ' ' + clockpickerInstance.amOrPm\n                : (selectedHour < 10 ? '0' + selectedHour : selectedHour);\n\n            this.$timePicker.val(formattedHour);\n            this.$timePicker.trigger('change');\n            clockpickerInstance.hide();\n        }\n    }\n\n    // Returns in user preference timezone\n    getTimePickerValue() {\n        var value = this.$timePicker.val();\n\n        if (!this.hasTime || !value) {\n            if (this.defaultTimeMidnight) {\n                return '00:00:00';\n            }\n\n            return moment.tz(this.appTimezone)\n                .tz(this.timezone)\n                .format(this.dbTimeFormat);\n        }\n\n        return moment(value, this.getTimeFormat()).format(this.dbTimeFormat);\n    }\n\n    getTimeFormat() {\n        if (this.config.hoursOnly) {\n            return this.isTimeTwelveHour() ? 'hh A' : 'HH';\n        }\n        return this.isTimeTwelveHour()\n            ? 'hh:mm A'\n            : 'HH:mm';\n    }\n\n    isTimeTwelveHour() {\n        return this.config.twelveHour;\n    }\n\n    //\n    // Utilities\n    //\n\n    emptyValues() {\n        this.$dataLocker.val('');\n        this.$datePicker.val('');\n        this.$timePicker.val('');\n    }\n\n    getDataLockerValue(format) {\n        var value = this.$dataLocker.val();\n\n        return value\n            ? this.getMomentLoadValue(value, format)\n            : null;\n    }\n\n    getMomentLoadValue(value, format) {\n        var momentObj = moment.tz(value, this.appTimezone);\n\n        if (this.locale) {\n            momentObj = momentObj.locale(this.locale);\n        }\n\n        momentObj = momentObj.tz(this.timezone);\n\n        return momentObj.format(format);\n    }\n\n    initRegion() {\n        this.locale = $('meta[name=\"backend-locale\"]').attr('content');\n        this.timezone = $('meta[name=\"backend-timezone\"]').attr('content');\n        this.appTimezone = $('meta[name=\"app-timezone\"]').attr('content');\n\n        if (!this.appTimezone) {\n            this.appTimezone = 'UTC';\n        }\n\n        if (!this.timezone) {\n            this.timezone = 'UTC';\n        }\n\n        // Set both timezones to UTC to disable converting between them\n        if (this.ignoreTimezone) {\n            this.appTimezone = 'UTC';\n            this.timezone = 'UTC';\n        }\n    }\n\n    getLang(name, defaultValue) {\n        if ($.oc === undefined || $.oc.lang === undefined) {\n            return defaultValue;\n        }\n\n        return $.oc.lang.get(name, defaultValue);\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/datepicker/datepicker.time.css",
    "content": "/*\n * Time Picker\n * --------------------------------------------------\n */\n\n/*\n * Special Popover\n */\n\n.clockpicker-popover {\n    position: absolute;\n    top: 0;\n    left: 0;\n    display: none;\n    max-width: 276px;\n    padding: 1px;\n    text-align: left;\n    white-space: normal;\n    background-color: #fff;\n    background-clip: padding-box;\n\n    &.top {\n        margin-top: -10px;\n    }\n    &.right {\n        margin-left: 10px;\n    }\n    &.bottom {\n        margin-top: 10px;\n    }\n    &.left {\n        margin-left: -10px;\n    }\n\n    .popover-title {\n        padding: 8px 14px;\n        margin: 0;\n        font-size: 14px;\n        font-weight: normal;\n        line-height: 18px;\n        background-color: #f7f7f7;\n        border-bottom: 1px solid #ebebeb;\n        border-radius: 5px 5px 0 0;\n    }\n    .popover-content {\n        padding: 9px 14px;\n    }\n}\n\n/*\n * Clock Picker\n */\n\n.clockpicker .input-group-addon {\n    cursor: pointer;\n}\n.clockpicker-moving {\n    cursor: move;\n}\n.clockpicker-align-left.popover > .arrow {\n    left: 25px;\n}\n.clockpicker-align-top.popover > .arrow {\n    top: 17px;\n}\n.clockpicker-align-right.popover > .arrow {\n    left: auto;\n    right: 25px;\n}\n.clockpicker-align-bottom.popover > .arrow {\n    top: auto;\n    bottom: 6px;\n}\n\n.clockpicker-popover {\n    .popover-title {\n        background-color: #fff;\n        color: #999;\n        font-size: 24px;\n        font-weight: bold;\n        line-height: 30px;\n        text-align: center;\n\n        span {\n            cursor: pointer;\n        }\n    }\n    .popover-content {\n        background-color: #f8f8f8;\n        padding: 12px;\n\n        &:last-child {\n            border-bottom-left-radius: 5px;\n            border-bottom-right-radius: 5px;\n        }\n    }\n}\n\n.clockpicker-plate {\n    background-color: #fff;\n    border: 1px solid #ccc;\n    border-radius: 50%;\n    width: 200px;\n    height: 200px;\n    overflow: visible;\n    position: relative;\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n.clockpicker-canvas,\n.clockpicker-dial {\n    width: 200px;\n    height: 200px;\n    position: absolute;\n    left: -1px;\n    top: -1px;\n}\n.clockpicker-minutes {\n    visibility: hidden;\n}\n\n.clockpicker-tick {\n    border-radius: 50%;\n    color: #666;\n    line-height: 26px;\n    text-align: center;\n    width: 26px;\n    height: 26px;\n    position: absolute;\n    cursor: pointer;\n\n    &.active,\n    &:hover {\n        background-color: rgba(0, 149, 221, .25);\n    }\n}\n\n.clockpicker-dial {\n    transition: transform 350ms, opacity 350ms;\n}\n.clockpicker-dial-out {\n    opacity: 0;\n}\n.clockpicker-hours.clockpicker-dial-out {\n    transform: scale(1.2, 1.2);\n}\n.clockpicker-minutes.clockpicker-dial-out {\n    transform: scale(.8, .8);\n}\n.clockpicker-canvas {\n    transition: opacity 175ms;\n}\n.clockpicker-canvas-out {\n    opacity: 0.25;\n}\n.clockpicker-canvas-bearing,\n.clockpicker-canvas-fg {\n    stroke: none;\n    fill: rgb(0, 149, 221);\n}\n.clockpicker-canvas-bg {\n    stroke: none;\n    fill: rgb(192, 229, 247);\n}\n.clockpicker-canvas-bg-trans {\n    fill: rgba(0, 149, 221, .25);\n}\n.clockpicker-canvas line {\n    stroke: rgb(0, 149, 221);\n    stroke-width: 1;\n    stroke-linecap: round;\n}\n.clockpicker-button.am-button {\n    margin: 1px;\n    padding: 5px;\n    border: 1px solid rgba(0, 0, 0, .2);\n    border-radius: 4px;\n}\n.clockpicker-button.pm-button {\n    margin: 1px 1px 1px 136px;\n    padding: 5px;\n    border: 1px solid rgba(0, 0, 0, .2);\n    border-radius: 4px;\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/input/README.md",
    "content": "# Input Hotkey API\n\nAllows keyboard shortcuts (hotkeys) to be bound to an element's click event.\n\n## Example\n\n```html\n<button\n    class=\"btn btn-default\"\n    data-hotkey=\"b\"\n    onclick=\"alert('B is for Banana!')\">\n    Press \"B\" on your keyboard\n</button>\n\n<button\n    class=\"btn btn-default\"\n    data-hotkey=\"shift+r\"\n    onclick=\"confirm('Shift gears...?')\">\n    Press \"Shift + R\" on your keyboard\n</button>\n```\n\n## Javascript API\n\nIf you use a selector other than a button or a link, you will need to add the `hotkeyVisible` property to the hotkey config.\n\n```js\n$('html').hotKey({\n    hotkey: 'ctrl+s, cmd+s',\n    hotkeyVisible: false,\n    callback: doSomething\n});\n```\n\n# Input Monitoring\n\nThis will monitor the user input for unsaved changes and show a confirmation box if the user attempts to leave the page. The script adds the \"oc-data-changed\" class to the form element when the form data is changed.\n\n```html\n<form data-change-monitor>\n    ...\n</form>\n```\n\n### Example\n\nClick the \"Mark changed\" button and \"Reload page\".\n\n\n```html\n<form data-change-monitor>\n\n    <button type=\"button\" onclick=\"$(this).trigger('change')\">\n        Mark Changed\n    </button>\n\n    <button type=\"button\" data-change-monitor-commit>\n        Mark Saved\n    </button>\n\n    <hr />\n\n    <button type=\"button\" onclick=\"window.location.reload()\">\n        Reload Page\n    </button>\n\n</form>\n```\n\n## Supported data attributes\n\n- data-change-monitor - enables the plugin form a form\n- data-change-monitor-commit - commits changes to monitor (unchange) when clicked\n\n## Supported events\n\n- change - marks the form data as \"changed\". The event can be triggered on any element within a form or on a form itself.\n- unchange.oc.changeMonitor - marks the form data as \"unchanged\". The event can be triggered on any element within a form or on a form itself.\n- pause.oc.changeMonitor - temporary pauses the change monitoring. The event can be triggered on any element within a form or on a form itself.\n- resume.oc.changeMonitor - resumes the change monitoring. The event can be triggered on any element within a form or on a form itself.\n\n## Triggered events\n\n- changed.oc.changeMonitor - triggered when the form data changes.\n- unchanged.oc.changeMonitor - triggered when the form data unchanges.\n- ready.oc.changeMonitor triggered when the change monitor instance finishes initialization.\n\n## JavaScript API\n\n```js\n$('#form').changeMonitor()\n```\n\n# Input Preset API\n\nScripts that manage user input events.\n\n## Example\n\n```html\n<input type=\"text\" id=\"presetExample1\" placeholder=\"Type something\" />\n<input type=\"text\"\n    data-input-preset=\"#presetExample1\"\n    placeholder=\"Watch here\"\n    disabled />\n```\n\n# Input Trigger API\n\nThe API allows to change elements' visibility or status (enabled/disabled) basing on other elements' statuses. Example: enable a button if any checkbox inside another element is checked.\n\n## Example\n\n### Checked condition\n\n```html\n<input type=\"checkbox\" id=\"triggerChk1\" />\n<button class=\"btn disabled\"\n    data-trigger-action=\"enable\"\n    data-trigger=\"#triggerChk1\"\n    data-trigger-condition=\"checked\">\n    Check the checkbox\n</button>\n```\n\n### Value condition\n\n```html\n<p>\n    <input\n        type=\"text\"\n        id=\"triggerTxt1\"\n        value=\"\"\n        onkeyup=\"$(this).trigger('change')\"\n        placeholder=\"Enter 'foo' or 'bar' here\"\n        class=\"form-control\" />\n</p>\n\n<div\n    class=\"callout callout-success\"\n    data-trigger-action=\"show\"\n    data-trigger=\"#triggerTxt1\"\n    data-trigger-condition=\"value[foo][bar]\">\n\n    <div class=\"content\">\n        Passphrase is valid!\n    </div>\n</div>\n```\n\n## Supported data attributes\n\n- data-trigger-action, values: show, hide, enable, disable, empty\n- data-trigger: a CSS selector for elements that trigger the action (checkboxes)\n- data-trigger-condition, values:\n    - checked: determines the condition the elements specified in the data-trigger should satisfy in order the condition to be considered as \"true\".\n    - unchecked: inverse condition of \"checked\".\n    - value[somevalue]: determines if the value of data-trigger equals the specified value (somevalue) the condition is considered \"true\".\n- data-trigger-closest-parent: optional, specifies a CSS selector for a closest common parent for the source and destination input elements.\n\nExample code:\n\n```html\n<input type=\"button\" class=\"btn disabled\"\n    data-trigger-action=\"enable\"\n    data-trigger=\"#cblist input[type=checkbox]\"\n    data-trigger-condition=\"checked\" ... >\n```\n\nMultiple actions are supported:\n\n```html\ndata-trigger-action=\"hide|empty\"\n```\nMultiple value conditions are supported:\n\n```html\ndata-trigger-condition=\"value[foo][bar]\"\n```\n\n### Supported events\n\n- oc.triggerOn.update - triggers the update. Trigger this event on the element the plugin is bound to to force it to check the condition and update itself. This is useful when the page content is updated with AJAX.\n- oc.triggerOn.afterUpdate - triggered after the element is updated\n\n### jQuery API\n\n```js\n$('#mybutton').triggerOn({\n    triggerCondition: 'checked',\n    trigger: '#cblist input[type=checkbox]',\n    triggerAction: 'enable'\n})\n```\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/input/change-monitor-control.js",
    "content": "/*\n * The form change monitor API.\n *\n * - Documentation: ../docs/change-monitor.md\n */\nimport { ControlBase } from 'larajax';\n\nconst $ = window.jQuery;\n\nexport default class ChangeMonitorControl extends ControlBase {\n    // Static property for global disable state\n    static globallyDisabled = false;\n\n    static disable() {\n        ChangeMonitorControl.globallyDisabled = true;\n    }\n\n    static enable() {\n        ChangeMonitorControl.globallyDisabled = false;\n    }\n\n    init() {\n        this.paused = false;\n    }\n\n    connect() {\n        this.$el = $(this.element);\n\n        this.$el.on('change', this.proxy(this.change));\n        this.$el.on('unchange.oc.changeMonitor', this.proxy(this.unchange));\n        this.$el.on('click ajaxSuccess', '[data-change-monitor-commit]', this.proxy(this.unchange));\n        this.$el.on('pause.oc.changeMonitor', this.proxy(this.pause));\n        this.$el.on('resume.oc.changeMonitor', this.proxy(this.resume));\n        this.$el.on('pauseUnloadListener.oc.changeMonitor', this.proxy(this.pauseUnloadListener));\n        this.$el.on('resumeUnloadListener.oc.changeMonitor', this.proxy(this.resumeUnloadListener));\n        this.$el.on('keyup input paste', 'input:not(.ace_search_field):not([data-search-input]), textarea:not(.ace_text-input)', this.proxy(this.onInputChange));\n\n        $('input:not([type=hidden]):not(.ace_search_field):not([data-search-input]), textarea:not(.ace_text-input)', this.$el).each(function() {\n            $(this).data('oldval.oc.changeMonitor', $(this).val());\n        });\n\n        $(window).on('beforeunload', this.proxy(this.onBeforeUnload));\n        addEventListener('page:before-visit', this.proxy(this.onBeforeUnloadTurbo));\n\n        this.$el.trigger('ready.oc.changeMonitor');\n    }\n\n    disconnect() {\n        if (this.$el === null) {\n            return;\n        }\n\n        this.$el.off('change', this.proxy(this.change));\n        this.$el.off('unchange.oc.changeMonitor', this.proxy(this.unchange));\n        this.$el.off('click ajaxSuccess', '[data-change-monitor-commit]', this.proxy(this.unchange));\n        this.$el.off('pause.oc.changeMonitor ', this.proxy(this.pause));\n        this.$el.off('resume.oc.changeMonitor ', this.proxy(this.resume));\n        this.$el.off('pauseUnloadListener.oc.changeMonitor', this.proxy(this.pauseUnloadListener));\n        this.$el.off('resumeUnloadListener.oc.changeMonitor', this.proxy(this.resumeUnloadListener));\n        this.$el.off('keyup input paste', 'input:not(.ace_search_field), textarea:not(.ace_text-input)', this.proxy(this.onInputChange));\n\n        $(window).off('beforeunload', this.proxy(this.onBeforeUnload));\n        removeEventListener('page:before-visit', this.proxy(this.onBeforeUnloadTurbo));\n\n        this.$el = null;\n    }\n\n    change(ev, inputChange) {\n        if (this.paused || ChangeMonitorControl.globallyDisabled) {\n            return;\n        }\n\n        if (ev.target.className === 'ace_search_field') {\n            return;\n        }\n\n        if (!inputChange) {\n            var type = $(ev.target).attr('type');\n            if (type === 'text' || type === 'password') {\n                return;\n            }\n        }\n\n        if (!this.$el.hasClass('oc-data-changed')) {\n            this.$el.trigger('changed.oc.changeMonitor');\n            this.$el.addClass('oc-data-changed');\n        }\n    }\n\n    unchange() {\n        if (this.paused || ChangeMonitorControl.globallyDisabled) {\n            return;\n        }\n\n        if (this.$el.hasClass('oc-data-changed')) {\n            this.$el.trigger('unchanged.oc.changeMonitor');\n            this.$el.removeClass('oc-data-changed');\n        }\n    }\n\n    onInputChange(ev) {\n        if (this.paused || ChangeMonitorControl.globallyDisabled) {\n            return;\n        }\n\n        var $el = $(ev.target);\n        if ($el.data('oldval.oc.changeMonitor') !== $el.val()) {\n            $el.data('oldval.oc.changeMonitor', $el.val());\n            this.change(ev, true);\n        }\n    }\n\n    pause() {\n        this.paused = true;\n    }\n\n    resume() {\n        this.paused = false;\n    }\n\n    pauseUnloadListener() {\n        this.unloadListenerPaused = true;\n    }\n\n    resumeUnloadListener() {\n        this.unloadListenerPaused = false;\n    }\n\n    shouldWarn() {\n        return $.contains(document.documentElement, this.$el.get(0)) &&\n            this.$el.hasClass('oc-data-changed') &&\n            !this.unloadListenerPaused;\n    }\n\n    onBeforeUnload(event) {\n        if (this.shouldWarn()) {\n            event.preventDefault();\n            return event.returnValue = '';\n        }\n    }\n\n    // Disable PJAX to fallback to the browser unload event\n    onBeforeUnloadTurbo(event) {\n        const { url, action } = event.detail;\n        if (this.shouldWarn() && action === 'advance') {\n            event.preventDefault();\n            location.assign(url);\n        }\n    }\n}\n\n// CUSTOM RENDERER\n// ============================\n\naddEventListener('render', function() {\n    document.querySelectorAll('[data-change-monitor]:not([data-control~=\"change-monitor\"])').forEach(function(element) {\n        element.dataset.control = ((element.dataset.control || '') + ' change-monitor').trim();\n    });\n});\n\n// JQUERY PLUGIN DEFINITION\n// ============================\n\nvar old = $.fn.changeMonitor;\n\n$.fn.changeMonitor = function (option) {\n    return this.each(function () {\n        var $this = $(this);\n\n        // Check if already initialized via ControlBase\n        if (this.ocChangeMonitorControl) {\n            return;\n        }\n\n        // Add data-control attribute to trigger ControlBase initialization\n        if (!this.matches('[data-control~=\"change-monitor\"]')) {\n            this.dataset.control = ((this.dataset.control || '') + ' change-monitor').trim();\n        }\n\n        // Trigger render to initialize the control\n        oc.AjaxFramework.controller.render();\n    });\n}\n\n$.fn.changeMonitor.Constructor = ChangeMonitorControl;\n\n// CHANGEMONITOR NO CONFLICT\n// ============================\n\n$.fn.changeMonitor.noConflict = function () {\n    $.fn.changeMonitor = old;\n    return this;\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/input/input-hotkey-control.js",
    "content": "/*\n * Hot key binding.\n *\n * Data attributes:\n * - data-hotkey=\"ctrl+s, cmd+s\" - enables the hotkey plugin\n *\n * JavaScript API:\n *\n * $('html').hotKey({ hotkey: 'ctrl+s, cmd+s', hotkeyVisible: false, callback: doSomething });\n */\nimport { ControlBase, Events } from 'larajax';\n\nconst $ = window.jQuery;\n\nexport default class InputHotkeyControl extends ControlBase {\n    static keyMap = {\n        esc: 27,\n        tab: 9,\n        space: 32,\n        return: 13,\n        enter: 13,\n        backspace: 8,\n        scroll: 145,\n        capslock: 20,\n        numlock: 144,\n        pause: 19,\n        break: 19,\n        insert: 45,\n        home: 36,\n        delete: 46,\n        suppr: 46,\n        end: 35,\n        pageup: 33,\n        pagedown: 34,\n        left: 37,\n        up: 38,\n        right: 39,\n        down: 40,\n        f1: 112,\n        f2: 113,\n        f3: 114,\n        f4: 115,\n        f5: 116,\n        f6: 117,\n        f7: 118,\n        f8: 119,\n        f9: 120,\n        f10: 121,\n        f11: 122,\n        f12: 123\n    };\n\n    init() {\n        if (this.config.hotkey === false) {\n            throw new Error('No hotkey has been defined.');\n        }\n\n        this.hotkeyTarget = this.config.hotkeyTarget || 'html';\n        this.hotkeyVisible = this.config.hotkeyVisible !== false;\n\n        this.callbackFunc = this.element.ocHotKeyControlCallback || function(element) {\n            element.dispatchEvent(new MouseEvent('click', {\n                bubbles: true,\n                cancelable: true,\n                view: window\n            }));\n            return false;\n        };\n    }\n\n    connect() {\n        this.initKeyConditions();\n\n        this.$target = document.querySelector(this.hotkeyTarget);\n\n        Events.on(this.$target, 'keydown', this.proxy(this.onKeyDown));\n    }\n\n    disconnect() {\n        this.keyConditions = null;\n\n        Events.off(this.$target, 'keydown', this.proxy(this.onKeyDown));\n\n        this.$target = null;\n    }\n\n    onKeyDown(ev) {\n        if (this.testConditions(ev)) {\n            if (this.hotkeyVisible && !this.isVisible(this.element)) {\n                return;\n            }\n\n            var activeContainer = oc.popupStacker && oc.popupStacker.getFirstPopup();\n            if (activeContainer && !activeContainer.contains(this.element)) {\n                return;\n            }\n\n            if (\n                this.callbackFunc &&\n                !this.callbackFunc(this.element, ev.currentTarget, ev)\n            ) {\n                ev.preventDefault();\n            }\n        }\n    }\n\n    isVisible(el) {\n        return el.offsetWidth > 0 && el.offsetHeight > 0;\n    }\n\n    initKeyConditions() {\n        this.keyConditions = [];\n        var keys = this.config.hotkey.toLowerCase().split(',');\n\n        for (var i = 0, len = keys.length; i < len; i++) {\n            var keysTrimmed = this.trim(keys[i]);\n            this.keyConditions.push(this.makeCondition(keysTrimmed));\n        }\n    }\n\n    makeCondition(keyBind) {\n        var condition = { shift: false, ctrl: false, cmd: false, alt: false, specific: -1 },\n            keys = keyBind.split('+');\n\n        for (var i = 0, len = keys.length; i < len; i++) {\n            switch (keys[i]) {\n                case 'shift':\n                    condition.shift = true;\n                    break;\n                case 'ctrl':\n                    condition.ctrl = true;\n                    break;\n                case 'command':\n                case 'cmd':\n                case 'meta':\n                    condition.cmd = true;\n                    break;\n                case 'alt':\n                case 'option':\n                    condition.alt = true;\n                    break;\n            }\n        }\n\n        condition.specific = this.constructor.keyMap[keys[keys.length-1]];\n\n        if (typeof (condition.specific) == 'undefined') {\n            condition.specific = keys[keys.length-1].toUpperCase().charCodeAt();\n        }\n\n        return condition;\n    }\n\n    trim(str) {\n        return str\n            .replace(/^\\s+/, \"\")\n            .replace(/\\s+$/, \"\")\n    }\n\n    testConditions(ev) {\n        for (var i = 0, len = this.keyConditions.length; i < len; i++) {\n            var condition = this.keyConditions[i]\n            var code = ev.which ? ev.which : ev.keyCode;\n\n            if (\n                code === condition.specific &&\n                ev.shiftKey === condition.shift &&\n                ev.ctrlKey === condition.ctrl &&\n                ev.metaKey === condition.cmd &&\n                ev.altKey === condition.alt\n            ) {\n                return TextTrackCue;\n            }\n        }\n\n        return false;\n    }\n}\n\n// JQUERY PLUGIN DEFINITION\n// ============================\n\n$.fn.hotKey = function (config) {\n    this.each((index, element) => {\n        config = config || {};\n        for (const key in config) {\n            if (key.startsWith('hotkey')) {\n                element.dataset[key] = config[key];\n            }\n        }\n\n        if (config.callback) {\n            element.ocHotKeyControlCallback = config.callback;\n        }\n\n        if (!element.matches('[data-control~=\"input-hotkey\"]')) {\n            element.dataset.control = ((element.dataset.control || '') + ' input-hotkey').trim();\n        }\n    });\n};\n\n// CUSTOM RENDERER\n// ============================\n\naddEventListener('render', function() {\n    document.querySelectorAll('[data-hotkey]:not([data-control~=\"input-hotkey\"])').forEach(function(element) {\n        element.dataset.control = ((element.dataset.control || '') + ' input-hotkey').trim();\n    });\n});\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/input/input-preset-engine.js",
    "content": "/*\n * Preset Engine - Text transformation utility for slugs, URLs, camelCase, etc.\n *\n * Supports transliteration from multiple languages including Vietnamese, Latin,\n * Greek, Turkish, Russian, Ukrainian, Czech, Polish, Latvian, Arabic, Persian,\n * Lithuanian, Serbian, Azerbaijani, Romanian, and Belarusian.\n *\n * JavaScript API:\n * oc.InputPresetEngine.formatValue(options, 'My Value')\n */\n\nconst VIETNAMESE_MAP = {\n    'Á': 'A', 'À': 'A', 'Ã': 'A', 'Ả': 'A', 'Ạ': 'A', 'Ắ': 'A', 'Ằ': 'A', 'Ẵ':\n    'A', 'Ẳ': 'A', 'Ặ': 'A', 'Ấ': 'A', 'Ầ': 'A', 'Ẫ': 'A', 'Ẩ': 'A', 'Ậ': 'A',\n    'Đ': 'D', 'É': 'E', 'È': 'E', 'Ẽ': 'E', 'Ẻ': 'E', 'Ẹ': 'E', 'Ế': 'E', 'Ề':\n    'E', 'Ễ': 'E', 'Ể': 'E', 'Ệ': 'E', 'Ó': 'O', 'Ò': 'O', 'Ỏ': 'O', 'Õ': 'O',\n    'Ọ': 'O', 'Ố': 'O', 'Ồ': 'O', 'Ổ': 'O', 'Ỗ': 'O', 'Ộ': 'O', 'Ơ': 'O', 'Ớ':\n    'O', 'Ờ': 'O', 'Ở': 'O', 'Ỡ': 'O', 'Ợ': 'O', 'Í': 'I', 'Ì': 'I', 'Ỉ': 'I',\n    'Ĩ': 'I', 'Ị': 'I', 'Ú': 'U', 'Ù': 'U', 'Ủ': 'U', 'Ũ': 'U', 'Ụ': 'U', 'Ư':\n    'U', 'Ứ': 'U', 'Ừ': 'U', 'Ử': 'U', 'Ữ': 'U', 'Ự': 'U', 'Ý': 'Y', 'Ỳ': 'Y',\n    'Ỷ': 'Y', 'Ỹ': 'Y', 'Ỵ': 'Y', 'á': 'a', 'à': 'a', 'ã': 'a', 'ả': 'a', 'ạ':\n    'a', 'ắ': 'a', 'ằ': 'a', 'ẵ': 'a', 'ẳ': 'a', 'ặ': 'a', 'ấ': 'a', 'ầ': 'a',\n    'ẫ': 'a', 'ẩ': 'a', 'ậ': 'a', 'đ': 'd', 'é': 'e', 'è': 'e', 'ẽ': 'e', 'ẻ':\n    'e', 'ẹ': 'e', 'ế': 'e', 'ề': 'e', 'ễ': 'e', 'ể': 'e', 'ệ': 'e', 'ó': 'o',\n    'ò': 'o', 'ỏ': 'o', 'õ': 'o', 'ọ': 'o', 'ố': 'o', 'ồ': 'o', 'ổ': 'o', 'ỗ':\n    'o', 'ộ': 'o', 'ơ': 'o', 'ớ': 'o', 'ờ': 'o', 'ở': 'o', 'ỡ': 'o', 'ợ': 'o',\n    'í': 'i', 'ì': 'i', 'ỉ': 'i', 'ĩ': 'i', 'ị': 'i', 'ú': 'u', 'ù': 'u', 'ủ':\n    'u', 'ũ': 'u', 'ụ': 'u', 'ư': 'u', 'ứ': 'u', 'ừ': 'u', 'ử': 'u', 'ữ': 'u',\n    'ự': 'u', 'ý': 'y', 'ỳ': 'y', 'ỷ': 'y', 'ỹ': 'y', 'ỵ': 'y'\n};\n\nconst LATIN_MAP = {\n    'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç':\n    'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I',\n    'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö':\n    'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U',\n    'Ý': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à':'a', 'á':'a', 'â': 'a', 'ã':\n    'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', 'é': 'e', 'ê': 'e',\n    'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò':\n    'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ō': 'o',\n    'œ': 'oe', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ':\n    'th', 'ÿ': 'y'\n};\n\nconst LATIN_SYMBOLS_MAP = {\n    '©':'(c)'\n};\n\nconst GREEK_MAP = {\n    'α':'a', 'β':'b', 'γ':'g', 'δ':'d', 'ε':'e', 'ζ':'z', 'η':'h', 'θ':'8',\n    'ι':'i', 'κ':'k', 'λ':'l', 'μ':'m', 'ν':'n', 'ξ':'3', 'ο':'o', 'π':'p',\n    'ρ':'r', 'σ':'s', 'τ':'t', 'υ':'y', 'φ':'f', 'χ':'x', 'ψ':'ps', 'ω':'w',\n    'ά':'a', 'έ':'e', 'ί':'i', 'ό':'o', 'ύ':'y', 'ή':'h', 'ώ':'w', 'ς':'s',\n    'ϊ':'i', 'ΰ':'y', 'ϋ':'y', 'ΐ':'i',\n    'Α':'A', 'Β':'B', 'Γ':'G', 'Δ':'D', 'Ε':'E', 'Ζ':'Z', 'Η':'H', 'Θ':'8',\n    'Ι':'I', 'Κ':'K', 'Λ':'L', 'Μ':'M', 'Ν':'N', 'Ξ':'3', 'Ο':'O', 'Π':'P',\n    'Ρ':'R', 'Σ':'S', 'Τ':'T', 'Υ':'Y', 'Φ':'F', 'Χ':'X', 'Ψ':'PS', 'Ω':'W',\n    'Ά':'A', 'Έ':'E', 'Ί':'I', 'Ό':'O', 'Ύ':'Y', 'Ή':'H', 'Ώ':'W', 'Ϊ':'I',\n    'Ϋ':'Y'\n};\n\nconst TURKISH_MAP = {\n    'ş':'s', 'Ş':'S', 'ı':'i', 'İ':'I', 'ç':'c', 'Ç':'C', 'ü':'u', 'Ü':'U',\n    'ö':'o', 'Ö':'O', 'ğ':'g', 'Ğ':'G'\n};\n\nconst RUSSIAN_MAP = {\n    'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'yo', 'ж':'zh',\n    'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o',\n    'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ц':'c',\n    'ч':'ch', 'ш':'sh', 'щ':'shch', 'ъ':'', 'ы':'y', 'ь':'', 'э':'e', 'ю':'yu',\n    'я':'ya',\n    'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ё':'Yo', 'Ж':'Zh',\n    'З':'Z', 'И':'I', 'Й':'J', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O',\n    'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Х':'H', 'Ц':'C',\n    'Ч':'Ch', 'Ш':'Sh', 'Щ':'Shch', 'Ъ':'', 'Ы':'Y', 'Ь':'', 'Э':'E', 'Ю':'Yu',\n    'Я':'Ya'\n};\n\nconst UKRAINIAN_MAP = {\n    'Є':'Ye', 'І':'I', 'Ї':'Yi', 'Ґ':'G', 'є':'ye', 'і':'i', 'ї':'yi', 'ґ':'g'\n};\n\nconst CZECH_MAP = {\n    'č':'c', 'ď':'d', 'ě':'e', 'ň': 'n', 'ř':'r', 'š':'s', 'ť':'t', 'ů':'u',\n    'ž':'z', 'Č':'C', 'Ď':'D', 'Ě':'E', 'Ň': 'N', 'Ř':'R', 'Š':'S', 'Ť':'T',\n    'Ů':'U', 'Ž':'Z'\n};\n\nconst POLISH_MAP = {\n    'ą':'a', 'ć':'c', 'ę':'e', 'ł':'l', 'ń':'n', 'ó':'o', 'ś':'s', 'ź':'z',\n    'ż':'z', 'Ą':'A', 'Ć':'C', 'Ę':'E', 'Ł':'L', 'Ń':'N', 'Ó':'O', 'Ś':'S',\n    'Ź':'Z', 'Ż':'Z'\n};\n\nconst LATVIAN_MAP = {\n    'ā':'a', 'č':'c', 'ē':'e', 'ģ':'g', 'ī':'i', 'ķ':'k', 'ļ':'l', 'ņ':'n',\n    'š':'s', 'ū':'u', 'ž':'z', 'Ā':'A', 'Č':'C', 'Ē':'E', 'Ģ':'G', 'Ī':'I',\n    'Ķ':'K', 'Ļ':'L', 'Ņ':'N', 'Š':'S', 'Ū':'U', 'Ž':'Z'\n};\n\nconst ARABIC_MAP = {\n    'أ':'a', 'ب':'b', 'ت':'t', 'ث': 'th', 'ج':'g', 'ح':'h', 'خ':'kh', 'د':'d',\n    'ذ':'th', 'ر':'r', 'ز':'z', 'س':'s', 'ش':'sh', 'ص':'s', 'ض':'d', 'ط':'t',\n    'ظ':'th', 'ع':'aa', 'غ':'gh', 'ف':'f', 'ق':'k', 'ك':'k', 'ل':'l', 'م':'m',\n    'ن':'n', 'ه':'h', 'و':'o', 'ي':'y'\n};\n\nconst PERSIAN_MAP = {\n    'آ':'a', 'ا':'a', 'پ':'p', 'چ':'ch', 'ژ':'zh', 'ک':'k', 'گ':'gh', 'ی':'y'\n};\n\nconst LITHUANIAN_MAP = {\n    'ą':'a', 'č':'c', 'ę':'e', 'ė':'e', 'į':'i', 'š':'s', 'ų':'u', 'ū':'u',\n    'ž':'z',\n    'Ą':'A', 'Č':'C', 'Ę':'E', 'Ė':'E', 'Į':'I', 'Š':'S', 'Ų':'U', 'Ū':'U',\n    'Ž':'Z'\n};\n\nconst SERBIAN_MAP = {\n    'ђ':'dj', 'ј':'j', 'љ':'lj', 'њ':'nj', 'ћ':'c', 'џ':'dz', 'đ':'d',\n    'Ђ':'Dj', 'Ј':'j', 'Љ':'Lj', 'Њ':'Nj', 'Ћ':'C', 'Џ':'Dz', 'Đ':'D'\n};\n\nconst AZERBAIJANI_MAP = {\n    'ç':'c', 'ə':'e', 'ğ':'g', 'ı':'i', 'ö':'o', 'ş':'s', 'ü':'u',\n    'Ç':'C', 'Ə':'E', 'Ğ':'G', 'İ':'I', 'Ö':'O', 'Ş':'S', 'Ü':'U'\n};\n\nconst ROMANIAN_MAP = {\n    'ă':'a', 'â':'a', 'î':'i', 'ș':'s', 'ț':'t',\n    'Ă':'A', 'Â':'A', 'Î':'I', 'Ș':'S', 'Ț':'T'\n};\n\nconst BELARUSIAN_MAP = {\n    'ў':'w', 'Ў':'W'\n};\n\nconst SPECIFIC_MAPS = {\n    'de': {\n        'Ä': 'AE', 'Ö': 'OE', 'Ü': 'UE',\n        'ä': 'ae', 'ö': 'oe', 'ü': 'ue'\n    }\n};\n\nconst ALL_MAPS = [\n    VIETNAMESE_MAP,\n    LATIN_MAP,\n    LATIN_SYMBOLS_MAP,\n    GREEK_MAP,\n    TURKISH_MAP,\n    RUSSIAN_MAP,\n    UKRAINIAN_MAP,\n    CZECH_MAP,\n    POLISH_MAP,\n    LATVIAN_MAP,\n    ARABIC_MAP,\n    PERSIAN_MAP,\n    LITHUANIAN_MAP,\n    SERBIAN_MAP,\n    AZERBAIJANI_MAP,\n    ROMANIAN_MAP,\n    BELARUSIAN_MAP\n];\n\nconst REMOVE_LIST = [\n    \"a\", \"an\", \"as\", \"at\", \"before\", \"but\", \"by\", \"for\", \"from\", \"is\",\n    \"in\", \"into\", \"like\", \"of\", \"off\", \"on\", \"onto\", \"per\", \"since\",\n    \"than\", \"the\", \"this\", \"that\", \"to\", \"up\", \"via\", \"with\"\n];\n\nexport default class InputPresetEngine {\n    constructor() {\n        this.map = null;\n        this.chars = null;\n        this.regex = null;\n        this.locale = null;\n    }\n\n    initialize() {\n        if (this.map) {\n            return;\n        }\n\n        this.locale = document.querySelector('meta[name=\"backend-locale\"]')?.getAttribute('content');\n\n        this.map = {};\n        this.chars = [];\n\n        const maps = [...ALL_MAPS];\n        if (this.locale && typeof SPECIFIC_MAPS[this.locale] === 'object') {\n            maps.push(SPECIFIC_MAPS[this.locale]);\n        }\n\n        for (let i = 0; i < maps.length; i++) {\n            const lookup = maps[i];\n            for (const c in lookup) {\n                if (lookup.hasOwnProperty(c)) {\n                    this.map[c] = lookup[c];\n                }\n            }\n        }\n\n        for (const k in this.map) {\n            if (this.map.hasOwnProperty(k)) {\n                this.chars.push(k);\n            }\n        }\n\n        this.regex = new RegExp(this.chars.join('|'), 'g');\n    }\n\n    removeStopWords(str, options) {\n        if (this.locale && !this.locale.startsWith('en')) {\n            return str;\n        }\n\n        if (options.inputPresetRemoveWords) {\n            const regex = new RegExp('\\\\b(' + REMOVE_LIST.join('|') + ')\\\\b', 'gi');\n            str = str.replace(regex, '');\n        }\n\n        return str;\n    }\n\n    toSnake(slug, numChars, options) {\n        this.initialize();\n\n        slug = slug.replace(this.regex, (m) => {\n            return this.map[m];\n        });\n\n        slug = this.removeStopWords(slug, options);\n        slug = slug.toLowerCase();\n        slug = slug.replace(/[^\\w\\s]/g, '');\n        slug = slug.replace(/\\s+/g, '_');\n\n        return numChars ? slug.substring(0, numChars) : slug;\n    }\n\n    toCamel(slug, numChars, options) {\n        this.initialize();\n\n        slug = slug.replace(this.regex, (m) => {\n            return this.map[m];\n        });\n\n        slug = this.removeStopWords(slug, options);\n        slug = slug.toLowerCase();\n        slug = slug.replace(/(\\b|-)\\w/g, (m) => {\n            return m.toUpperCase();\n        });\n        slug = slug.replaceAll('\\\\', ' ');\n        slug = slug.replaceAll('/', ' ');\n        slug = slug.replace(/[^-\\w\\s]/g, '');\n        slug = slug.replace(/^\\s+|\\s+$/g, '');\n        slug = slug.replace(/[-\\s]+/g, '');\n        slug = slug.substr(0, 1).toLowerCase() + slug.substr(1);\n\n        return numChars ? slug.substring(0, numChars) : slug;\n    }\n\n    formatNamespace(srcValue, options) {\n        const value = this.toCamel(srcValue, undefined, options);\n        return value.substr(0, 1).toUpperCase() + value.substr(1);\n    }\n\n    slugify(slug, numChars, options) {\n        this.initialize();\n\n        slug = slug.replace(this.regex, (m) => {\n            return this.map[m];\n        });\n\n        slug = this.removeStopWords(slug, options);\n        slug = slug.replaceAll('\\\\', ' ');\n        slug = slug.replaceAll('/', ' ');\n        slug = slug.replace(/[^-\\w\\s]/g, '');\n        slug = slug.replace(/^\\s+|\\s+$/g, '');\n        slug = slug.replace(/[-\\s]+/g, '-');\n        slug = slug.toLowerCase();\n\n        return numChars ? slug.substring(0, numChars) : slug;\n    }\n\n    formatValue(options, srcValue) {\n        // Exception handling\n        if (typeof srcValue === 'undefined') {\n            return '';\n        }\n\n        if (options.inputPresetType == 'exact') {\n            return srcValue;\n        }\n        else if (options.inputPresetType == 'namespace') {\n            return this.formatNamespace(srcValue, options);\n        }\n\n        let value;\n        if (options.inputPresetType == 'camel') {\n            value = this.toCamel(srcValue, undefined, options);\n        }\n        else if (options.inputPresetType == 'snake') {\n            value = this.toSnake(srcValue, undefined, options);\n        }\n        else {\n            value = this.slugify(srcValue, undefined, options);\n        }\n\n        if (options.inputPresetType == 'url') {\n            value = '/' + value;\n        }\n\n        return value.replace(/\\s/gi, \"-\");\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/input/input-preset.js",
    "content": "/*\n * An input preset converter.\n *\n * The API allows to convert text entered into an element to a URL, slug or file name\n * value in another input element.\n *\n * Supported data attributes:\n * - data-input-preset: specifies a CSS selector for a source input element\n * - data-input-preset-closest-parent: optional, specifies a CSS selector for a closest common parent\n *   for the source and destination input elements.\n * - data-input-preset-type: specifies the conversion type. Supported values are:\n *   url, file, slug, camel.\n * - data-input-preset-prefix-input: optional, prefixes the converted value with the value found\n *   in the supplied input element using a CSS selector.\n * - data-input-preset-remove-words: optional, use removeList to filter stop words of source string.\n *\n * Example: <input type=\"text\" id=\"name\" value=\"\"/>\n *          <input type=\"text\"\n *             data-input-preset=\"#name\"\n *             data-input-preset-type=\"file\">\n *\n * JavaScript API:\n * $('#filename').inputPreset({inputPreset: '#name', inputPresetType: 'file'})\n */\n\nconst $ = window.jQuery;\n\nexport default class InputPreset {\n    static DEFAULTS = {\n        inputPreset: '',\n        inputPresetType: 'slug',\n        inputPresetClosestParent: undefined,\n        inputPresetPrefixInput: undefined,\n        inputPresetRemoveWords: true\n    };\n\n    constructor(element, options) {\n        this.$el = $(element);\n        this.options = options || {};\n        this.cancelled = false;\n\n        var parent = options.inputPresetClosestParent !== undefined\n                ? this.$el.closest(options.inputPresetClosestParent)\n                : undefined,\n            self = this,\n            prefix = '';\n\n        if (options.inputPresetPrefixInput !== undefined) {\n            prefix = $(options.inputPresetPrefixInput, parent).val();\n        }\n\n        if (prefix === undefined) {\n            prefix = '';\n        }\n\n        // Do not update the element if it already has a value and the value doesn't match the prefix\n        if (this.$el.val().length && this.$el.val() != prefix) {\n            return;\n        }\n\n        this.$el.val(prefix).trigger('oc.inputPreset.afterUpdate');\n\n        this.$src = $(options.inputPreset, parent);\n\n        this.$src.on('input paste', function(event) {\n            if (self.cancelled) {\n                return;\n            }\n\n            var timeout = event.type === 'paste' ? 100 : 0;\n            var updateValue = function(self, el, prefix) {\n                if (el.data('update') === false) {\n                    return;\n                }\n                el\n                    .val(prefix + oc.InputPresetEngine.formatValue(options, self.$src.val()))\n                    .trigger('oc.inputPreset.afterUpdate');\n            };\n\n            var src = $(this);\n            setTimeout(function() {\n                self.$el.trigger('oc.inputPreset.beforeUpdate', [src]);\n                setTimeout(updateValue, 100, self, self.$el, prefix);\n            }, timeout);\n        });\n\n        this.$el.on('change', function() {\n            self.cancelled = true;\n        });\n    }\n}\n\n// JQUERY PLUGIN DEFINITION\n// ============================\n\nvar old = $.fn.inputPreset;\n\n$.fn.inputPreset = function (option) {\n    return this.each(function () {\n        var $this = $(this);\n        var data = $this.data('oc.inputPreset');\n        var options = $.extend({}, InputPreset.DEFAULTS, $this.data(), typeof option == 'object' && option);\n\n        if (!data) {\n            $this.data('oc.inputPreset', (data = new InputPreset(this, options)));\n        }\n    });\n};\n\n$.fn.inputPreset.Constructor = InputPreset;\n\n// INPUT PRESET NO CONFLICT\n// ============================\n\n$.fn.inputPreset.noConflict = function () {\n    $.fn.inputPreset = old;\n    return this;\n};\n\n// CUSTOM RENDERER\n// ============================\n\naddEventListener('render', function() {\n    document.querySelectorAll('[data-input-preset]:not([data-oc-input-preset])').forEach(function(element) {\n        element.dataset.ocInputPreset = '';\n        $(element).inputPreset();\n    });\n});\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/input/input-trigger-control.js",
    "content": "/*\n * The trigger API\n */\nimport { ControlBase, Events } from 'larajax';\n\nconst $ = window.jQuery;\n\nvar windowResizeTimer;\n\nexport default class InputTriggerControl extends ControlBase {\n    init() {\n        if (this.config.triggerCondition === false) {\n            throw new Error('Trigger condition is not specified.');\n        }\n\n        if (this.config.trigger === false) {\n            throw new Error('Trigger selector is not specified.');\n        }\n\n        if (this.config.triggerAction === false) {\n            throw new Error('Trigger action is not specified.');\n        }\n\n        this.triggerSelector = this.config.trigger;\n        this.triggerAction = this.config.triggerAction;\n        this.triggerCondition = this.config.triggerCondition;\n\n        if (this.config.triggerCondition.indexOf('value') == 0) {\n            var match = this.config.triggerCondition.match(/\\[([^\\]]*)\\]/g);\n            this.triggerCondition = 'value';\n            this.triggerConditionValue = match ? match.map(m => m.slice(1, -1)) : [\"\"];\n        }\n\n        this.conditionValid = this.triggerCondition == 'checked' ||\n            this.triggerCondition == 'unchecked' ||\n            this.triggerCondition == 'value';\n    }\n\n    connect() {\n        this.$el = $(this.element);\n        this.initTriggerParent();\n        this.initState();\n\n        this.$el.on('oc.triggerOn.update', this.proxy(this.onUpdatedExternally));\n        if (this.conditionValid) {\n            $(document).on('change', this.triggerSelector, this.proxy(this.onConditionChangedDebounce));\n        }\n    }\n\n    disconnect() {\n        this.$el.off('oc.triggerOn.update', this.proxy(this.onUpdatedExternally));\n        if (this.conditionValid) {\n            $(document).off('change', this.triggerSelector, this.proxy(this.onConditionChangedDebounce));\n        }\n\n        this.$el = null;\n        this.triggerParent = null;\n\n        if (this.changeDebounceTimeoutId !== null) {\n            clearTimeout(this.changeDebounceTimeoutId);\n        }\n    }\n\n    initState() {\n        this.changeDebounceTimeoutId = null;\n\n        if (oc.changeMonitor) {\n            oc.changeMonitor.disable();\n        }\n\n        this.onConditionChanged();\n\n        if (oc.changeMonitor) {\n            oc.changeMonitor.enable();\n        }\n    }\n\n    initTriggerParent() {\n        this.triggerParent = undefined;\n        if (this.config.triggerClosestParent !== undefined) {\n            var closestParentElements = this.config.triggerClosestParent.split(',');\n            for (var i = 0; i < closestParentElements.length; i++) {\n                var $triggerElement = this.$el.closest(closestParentElements[i]);\n                if ($triggerElement.length) {\n                    this.triggerParent = $triggerElement;\n                    break;\n                }\n            }\n        }\n    }\n\n    onUpdatedExternally(ev) {\n        ev.stopPropagation();\n        this.onConditionChanged();\n    }\n\n    onConditionChangedDebounce() {\n        if (this.changeDebounceTimeoutId !== null) {\n            clearTimeout(this.changeDebounceTimeoutId);\n        }\n\n        this.changeDebounceTimeoutId = setTimeout(() => this.onConditionChanged(), 30);\n    }\n\n    onConditionChanged() {\n        if (this.triggerCondition == 'checked') {\n            this.updateTarget(!!$(this.triggerSelector + ':checked', this.triggerParent).length);\n        }\n        else if (this.triggerCondition == 'unchecked') {\n            this.updateTarget(!$(this.triggerSelector + ':checked', this.triggerParent).length);\n        }\n        else if (this.triggerCondition == 'value') {\n            var trigger, triggered = false;\n\n            trigger = $(this.triggerSelector, this.triggerParent)\n                .not('input[type=checkbox], input[type=radio], input[type=button], input[type=submit]');\n\n            if (!trigger.length) {\n                trigger = $(this.triggerSelector, this.triggerParent)\n                    .not(':not(input[type=checkbox]:checked, input[type=radio]:checked)');\n            }\n\n            var self = this;\n            trigger.each(function() {\n                var triggerValue = $(this).val(),\n                    valueArray = Array.isArray(triggerValue) ? triggerValue : [triggerValue];\n\n                if (valueArray.length === 0) {\n                    valueArray = [''];\n                }\n\n                $.each(valueArray, function(key, val) {\n                    triggered = self.matchWildcardConditions(val, self.triggerConditionValue);\n                    return !triggered;\n                });\n\n                return !triggered;\n            });\n\n            this.updateTarget(triggered);\n        }\n    }\n\n    // matchWildcardConditions handles multiple trigger condition values\n    matchWildcardConditions(value, conditionArr) {\n        var matchFound = false;\n        conditionArr.forEach((condition) => {\n            if (!matchFound && this.matchWildcardString(value, condition)) {\n                matchFound = true;\n            }\n        });\n        return matchFound;\n    }\n\n    // matchWildcardString matches a value (MyString) to a condition (My*)\n    matchWildcardString(value, condition) {\n        if(condition === \"*\") {\n            return !!value;\n        }\n        var escapeRegex = (value) => value.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n        return new RegExp(\"^\" + condition.split(\"*\").map(escapeRegex).join(\".*\") + \"$\").test(value);\n    }\n\n    updateTarget(status) {\n        var actions = this.triggerAction.split('|');\n\n        $.each(actions, (index, action) => {\n            this.updateTargetAction(action, status);\n        });\n\n        this.$el.trigger('oc.triggerOn.afterUpdate', status);\n\n        Events.dispatch('trigger:after-update', { target: this.$el.get(0), status: status });\n\n        this.finishUpdate();\n    }\n\n    finishUpdate() {\n        if (windowResizeTimer !== undefined) {\n            window.clearTimeout(windowResizeTimer);\n        }\n\n        windowResizeTimer = setTimeout(function() {\n            Events.dispatch('trigger:complete');\n            $(window).trigger('resize');\n        }, 1);\n    }\n\n    updateTargetAction(action, status) {\n        if (action == 'show') {\n            this.$el\n                .toggleClass('oc-hide', !status)\n                .trigger('hide.oc.triggerapi', [!status]);\n\n            Events.dispatch('trigger:hide', { target: this.$el.get(0), status: !status });\n        }\n        else if (action == 'hide') {\n            this.$el\n                .toggleClass('oc-hide', status)\n                .trigger('hide.oc.triggerapi', [status]);\n\n            Events.dispatch('trigger:hide', { target: this.$el.get(0), detail: { status: status } });\n        }\n        else if (action == 'enable') {\n            this.$el\n                .prop('disabled', !status)\n                .toggleClass('control-disabled', !status)\n                .trigger('disable.oc.triggerapi', [!status]);\n\n            Events.dispatch('trigger:disable', { target: this.$el.get(0), detail: { status: !status } });\n        }\n        else if (action == 'disable') {\n            this.$el\n                .prop('disabled', status)\n                .toggleClass('control-disabled', status)\n                .trigger('disable.oc.triggerapi', [status]);\n\n            Events.dispatch('trigger:disable', { target: this.$el.get(0), detail: { status: status } });\n        }\n        else if (action.indexOf('fill') == 0 && status) {\n            var fillMatch = action.match(/[^[\\]]+(?=])/g),\n                fillValue = fillMatch ? fillMatch[0] : '1';\n            this.$el\n                .not('input[type=checkbox], input[type=radio], input[type=button], input[type=submit]')\n                .val(fillValue);\n\n            this.$el\n                .not(':not(input[type=checkbox], input[type=radio])')\n                .prop('checked', true);\n\n            this.$el\n                .trigger('fill.oc.triggerapi')\n                .trigger('change');\n\n            Events.dispatch('trigger:fill', { target: this.$el.get(0), detail: { fillValue: fillValue } });\n        }\n        else if (action == 'empty' && status) {\n            this.$el\n                .not('input[type=checkbox], input[type=radio], input[type=button], input[type=submit]')\n                .val('');\n\n            this.$el\n                .not(':not(input[type=checkbox], input[type=radio])')\n                .prop('checked', false);\n\n            this.$el\n                .trigger('empty.oc.triggerapi')\n                .trigger('change');\n\n            Events.dispatch('trigger:empty', { target: this.$el.get(0) });\n        }\n\n        if (action == 'show' || action == 'hide') {\n            this.fixButtonClasses();\n        }\n    }\n\n    fixButtonClasses() {\n        var group = this.$el.closest('.btn-group');\n\n        if (group.length > 0 && this.$el.is(':last-child')) {\n            this.$el.prev().toggleClass('last', this.$el.hasClass('oc-hide'));\n        }\n    }\n}\n\n// CUSTOM RENDERER\n// ============================\n\naddEventListener('render', function() {\n    document.querySelectorAll('[data-trigger]:not([data-control~=\"input-trigger\"])').forEach(function(element) {\n        element.dataset.control = ((element.dataset.control || '') + ' input-trigger').trim();\n    });\n});\n\n// JQUERY PLUGIN DEFINITION\n// ============================\n\n$.fn.triggerOn = function (config) {\n    this.each((index, element) => {\n        config = config || {};\n        for (const key in config) {\n            if (key.startsWith('trigger')) {\n                element.dataset[key] = config[key];\n            }\n        }\n\n        if (!element.matches('[data-control~=\"input-trigger\"]')) {\n            element.dataset.control = ((element.dataset.control || '') + ' input-trigger').trim();\n        }\n    });\n};\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/loader-container/README.md",
    "content": "# Loading indicators\n\n## Container Loading Indicator\n\n#### Loading Indicator\nA loading indicator used in a container.\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator\">\n            <span></span>\n        </div>\n        <p>This is some content inside the container</p>\n        <p>The loading indicator must be prepended to it</p>\n    </div>\n\n#### Text Loading Indicator\nA loading indicator can have text by adding a `<div>` element inside.\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator\">\n            <span></span>\n            <div>Loading...</div>\n        </div>\n    </div>\n\n#### Loading Indicator Sizes\n\nA loading indicator can have a size by adding `size-X` to the container. These sizes are available: **size-small**.\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator size-small\">\n            <span></span>\n            <div>Loading (size-small)</div>\n        </div>\n    </div>\n\n#### Loading Indicator Alignment\n\nA loading indicator can be aligned to the center by adding `indicator-center` to the container and/or indicator.\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator indicator-center\">\n            <span></span>\n        </div>\n    </div>\n\nYou may add some optional text:\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator indicator-center\">\n            <span></span>\n            <div>Loading...</div>\n        </div>\n    </div>\n\n# Example\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator\">\n            <span></span>\n        </div>\n        <p>This is some content inside the container</p>\n        <p>The loading indicator must be prepended to it</p>\n    </div>\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator\">\n            <span></span>\n            <div>Loading...</div>\n        </div>\n    </div>\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator indicator-inset\">\n            <span></span>\n            <div>Loading (inset)</div>\n        </div>\n    </div>\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator size-small\">\n            <span></span>\n            <div>Loading (size-small)</div>\n        </div>\n    </div>\n\n    <div class=\"loading-indicator-container\">\n        <div class=\"loading-indicator indicator-center\">\n            <span></span>\n        </div>\n    </div>\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/loader-container/loader-container-control.css",
    "content": "/*\n * Basic Loader\n * --------------------------------------------------\n */\n\na.oc-loading,\nbutton.oc-loading,\nspan.oc-loading {\n    &:after {\n        content: '';\n        display: inline-block;\n        vertical-align: middle;\n        margin-left: .4em;\n        height: 1em;\n        width: 1em;\n        animation: spin 0.8s infinite linear;\n        border: .2em solid currentColor;\n        border-right-color: transparent;\n        border-radius: 50%;\n        opacity: .5;\n    }\n}\n\n/*\n * Loader Container\n * --------------------------------------------------\n */\n\n.control-loader-container {\n    position: relative;\n\n    &.is-loading {\n        opacity: .5;\n    }\n\n    .loader-mask {\n        position: absolute;\n        left: 0;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        background-color: rgba(255, 255, 255, 0);\n    }\n}\n\n/*\n * Bar loading indicator\n *\n * Usage:\n *   <div class=\"progress bar-loading-indicator\">\n *       <div class=\"progress-bar\" role=\"progressbar\"></div>\n *   </div>\n *\n * --------------------------------------------------\n */\n\n.bar-loading-indicator {\n    transition: opacity .4s linear;\n\n    .progress-bar {\n        animation: infinite-loader 90s ease-in forwards;\n        transition-duration: 0s;\n    }\n\n    &.bar-loaded {\n        opacity: 0;\n        transition-delay: .3s;\n\n        .progress-bar {\n            width: 100% !important;\n            transition: width .3s linear;\n            animation: none;\n        }\n    }\n}\n\n/*\n * Infinite loading animation\n * --------------------------------------------------\n */\n\n@keyframes infinite-loader {\n    0% { width: 0%; }\n    10% { width: 42%; }\n    20% { width: 63%; }\n    30% { width: 78.75%; }\n    40% { width: 88.59375%; }\n    50% { width: 94.13085938%; }\n    60% { width: 97.07244873%; }\n    70% { width: 98.58920574%; }\n    80% { width: 99.35943391%; }\n    90% { width: 99.7475567%; }\n    100% { width: 99.94237615%; }\n}\n\n/*\n * Spin animation\n * --------------------------------------------------\n */\n\n@keyframes spin {\n    0% { transform: rotate(0deg); }\n    100% { transform: rotate(359deg); }\n}\n\n@keyframes rspin {\n    0% { transform: rotate(359deg); }\n    100% { transform: rotate(0deg); }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/loader-container/loader-container-control.js",
    "content": "/*\n * Loader Container\n */\nimport { ControlBase } from 'larajax';\n\nexport default class LoaderContainerControl extends ControlBase\n{\n    init() {\n        this.element.classList.add('control-loader-container');\n    }\n\n    connect() {\n        this.loaderMask = document.createElement('div');\n        this.loaderMask.classList.add('loader-mask');\n\n        this.listen('ajax:promise', this.showLoader);\n        this.listen('ajax:fail', this.hideLoader);\n        this.listen('ajax:done', this.hideLoader);\n    }\n\n    disconnect() {\n        this.hideLoader(null, true);\n        this.loaderMask = null;\n    }\n\n    showLoader() {\n        this.element.classList.add('is-loading');\n        this.element.appendChild(this.loaderMask);\n    }\n\n    hideLoader() {\n        this.element.classList.remove('is-loading');\n\n        if (this.loaderMask && this.element.contains(this.loaderMask)) {\n            this.element.removeChild(this.loaderMask);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/search-input/README.md",
    "content": "# Search Input\n\nRenders a search input with clear input, loading state and search icon.\n\n## Basic Usage\n\n```html\n<div data-control=\"searchwidget\">\n    <div class=\"search-input-container storm-icon-pseudo\">\n        <input\n            placeholder=\"Search ...\"\n            type=\"text\"\n            name=\"search_input\"\n            value=\"\"\n            data-request=\"onSubmit\"\n            data-track-input\n            data-load-indicator\n            data-load-indicator-opaque\n            class=\"form-control\"\n            autocomplete=\"off\"\n            data-search-input />\n        <button\n            class=\"clear-input-text\"\n            type=\"button\"\n            value=\"\"\n            style=\"display: none\"\n            data-search-clear\n        >\n            <i class=\"storm-icon\"></i>\n        </button>\n    </div>\n</div>\n```\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/search-input/search-input-control.css",
    "content": "/*\n * Search Input\n * --------------------------------------------------\n */\n\n.control-search {\n    &.is-modal-search .form-control,\n    .form-control.recordfinder-search {\n        background-position: right -81px !important;\n        border-top-color: transparent;\n        border-left-color: transparent;\n        border-right-color: transparent;\n        border-radius: 0;\n        padding-left: 22px;\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/search-input/search-input-control.js",
    "content": "/*\n * Search Input\n */\nimport { ControlBase } from 'larajax';\n\nexport default class SearchInputControl extends ControlBase\n{\n    init() {\n        this.$form = this.element.closest('form');\n        this.$triggerEl = this.$form ? this.$form : this.element;\n        this.$input = this.element.querySelector('[data-search-input]');\n        this.$clearBtn = this.element.querySelector('[data-search-clear]');\n        this.extraData = null;\n    }\n\n    connect() {\n        this.element.classList.add('control-search');\n        this.element.classList.add('size-input-text');\n        this.element.classList.add('loading-indicator-container');\n        this.listen('ajax:setup', this.linkToListWidget);\n        this.listen('ajax:request-complete', this.$triggerEl, this.toggleClearButton);\n        this.listen('input', this.$input, this.toggleClearButton);\n        this.listen('click', this.$clearBtn, this.clearInput);\n        this.toggleClearButton();\n    }\n\n    disconnect() {\n        this.element.classList.remove('control-search');\n        this.element.classList.remove('size-input-text');\n        this.element.classList.remove('loading-indicator-container');\n    }\n\n    clearInput() {\n        this.$input.value = '';\n        this.toggleClearButton();\n\n        if (this.$input.dataset.request) {\n            oc.request(this.$input);\n        }\n    }\n\n    toggleClearButton() {\n        if (this.$input.value) {\n            this.$clearBtn.style.display = 'block';\n        }\n        else {\n            this.$clearBtn.style.display = 'none';\n        }\n    }\n\n    // @todo this should be moved to the list widget\n    linkToListWidget(ev) {\n        var listId = $(this.element).closest('[data-list-linkage]').data('list-linkage');\n        if (!listId) {\n            return;\n        }\n\n        var $widget = $('#'+listId+' > .control-list:first');\n        if (!$widget.data('oc.listwidget')) {\n            return;\n        }\n\n        ev.detail.context.options.data.allChecked = $widget.listWidget('getAllChecked');\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/tab/README.md",
    "content": "# Tab control\n\nThis plugin is a wrapper for the Twitter Bootstrap Tab component. It provides the following features:\n\n- Adding tabs\n- Optional close icons with 2 states (modified / unmodified). The icon state can be changed by triggering the modified.oc.tab/unmodified.oc.tab events on any element within tab, or on the tab itself.\n- Removing tabs with the Close icon, or with triggering an event from inside a tab pane or tab. The removing can be canceled if the confirm.oc.tab event handler returns false.\n- Scrolling tabs if they do not fit the screen\n- Collapsible tabs\n\n### Supported CSS modifiers\n\nThese modifiers can be added in addition to the `control-tabs` class:\n\n- **tabs-inset**: Applies a negative margin to the tabs allowing them to sit well inside a padded container.\n- **tabs-offset**: Applies a positive padding to tabs so they sit well inside a flush (non padded) container.\n- **tabs-flush**: Tabs to sit flush to the element above it.\n\n### Master tabs\n\n    <div class=\"control-tabs master-tabs\" data-control=\"tab\">\n        <ul class=\"nav nav-tabs\">\n            <li class=\"active\"><a href=\"#primaryTabOne\">One</a></li>\n            <li><a href=\"#primaryTabTwo\">Two</a></li>\n            <li><a href=\"#primaryTabThree\">Three</a></li>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane active\">\n                Tab one content\n            </div>\n            <div class=\"tab-pane\">\n                Tab two content\n            </div>\n            <div class=\"tab-pane\">\n                Tab three content\n            </div>\n        </div>\n    </div>\n\n### Primary tabs\n\n    <div class=\"control-tabs primary-tabs\" data-control=\"tab\">\n        <ul class=\"nav nav-tabs\">\n            <li class=\"active\"><a href=\"#primaryTabOne\">One</a></li>\n            <li><a href=\"#primaryTabTwo\">Two</a></li>\n            <li><a href=\"#primaryTabThree\">Three</a></li>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane active\">\n                Tab one content\n            </div>\n            <div class=\"tab-pane\">\n                Tab two content\n            </div>\n            <div class=\"tab-pane\">\n                Tab three content\n            </div>\n        </div>\n    </div>\n\n> **Note**: Primary tabs in the October backend are inset by default and you should use `.tabs-no-inset` to disable this.\n\n### Secondary tabs\n\n    <div class=\"control-tabs secondary-tabs\" data-control=\"tab\">\n        <ul class=\"nav nav-tabs\">\n            <li class=\"active\"><a href=\"#secondaryTabOne\">One</a></li>\n            <li><a href=\"#secondaryTabTwo\">Two</a></li>\n            <li><a href=\"#secondaryTabThree\">Three</a></li>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane active\">\n                Tab one content\n            </div>\n            <div class=\"tab-pane\">\n                Tab two content\n            </div>\n            <div class=\"tab-pane\">\n                Tab three content\n            </div>\n        </div>\n    </div>\n\n### Auxiliary tabs\n\n    <div class=\"control-tabs auxiliary-tabs\" data-control=\"tab\">\n        <ul class=\"nav nav-tabs\">\n            <li class=\"active\"><a href=\"#primaryTabOne\">One</a></li>\n            <li><a href=\"#primaryTabTwo\">Two</a></li>\n            <li><a href=\"#primaryTabThree\">Three</a></li>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane active\">\n                Tab one content\n            </div>\n            <div class=\"tab-pane\">\n                Tab two content\n            </div>\n            <div class=\"tab-pane\">\n                Tab three content\n            </div>\n        </div>\n    </div>\n\n### Pill tabs\n\n    <div class=\"control-tabs pill-tabs\" data-control=\"tab\">\n        <ul class=\"nav nav-tabs\">\n            <li class=\"active\"><a href=\"#primaryTabOne\">One</a></li>\n            <li><a href=\"#primaryTabTwo\">Two</a></li>\n            <li><a href=\"#primaryTabThree\">Three</a></li>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane active\">\n                Tab one content\n            </div>\n            <div class=\"tab-pane\">\n                Tab two content\n            </div>\n            <div class=\"tab-pane\">\n                Tab three content\n            </div>\n        </div>\n    </div>\n\n### Content tabs\n\n    <div class=\"control-tabs content-tabs\" data-control=\"tab\">\n        <ul class=\"nav nav-tabs\">\n            <li class=\"active\"><a href=\"#contentTabOne\">One</a></li>\n            <li><a href=\"#contentTabTwo\">Two</a></li>\n            <li><a href=\"#contentTabThree\">Three</a></li>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane pane-bordered active\">\n                Tab one content\n            </div>\n            <div class=\"tab-pane pane-bordered\">\n                Tab two content\n            </div>\n            <div class=\"tab-pane pane-bordered\">\n                Tab three content\n            </div>\n        </div>\n    </div>\n\n\n### Supported Data Attributes\n\n- data-control=\"tab\" - creates the tab control from an element\n- data-closable - enables the Close Tab feature\n- data-pane-classes - a list of CSS classes to apply new pane elements\n\nExample with data attributes (data-control=\"tab\"):\n\n    <div class=\"control-tabs master\" data-control=\"tab\" data-closable>\n        <ul class=\"nav nav-tabs\">\n            <li class=\"active\"><a href=\"#home\">Home</a></li>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane active\">Home</div>\n        </div>\n    </div>\n\n### JavaScript API\n\n- $('#mytabs').ocTab({closable: true, closeConfirmation: 'Close this tab? Unsaved data will be lost.'})\n- $('#mytabs').ocTab('addTab', 'Tab title', 'Tab content', identifier) - adds tab. The optional identifier parameter allows to associate a identifier with a tab. The identifier can be used with the goTo() method to find and open a tab by it's identifier.\n- $('#mytabs').ocTab('closeTab', '.nav-tabs > li.active', true) - closes a tab. The second argument can point to a tab or tab pane. The thrid argument determines whether the tab should be closed without the user confirmation. The default value is false.\n- $('.nav-tabs > li.active').trigger('close.oc.tab') - another way to close a tab. The event can be triggered on a tab, tab pane or any element inside a tab or tab pane.\n- $('#mytabs').ocTab('modifyTab', '.nav-tabs > li.active') - marks a tab as modified. Use the 'unmodifyTab' to mark a tab as unmodified.\n- $('.nav-tabs > li.active').trigger('modified.oc.tab') - another way to mark a tab as modified. The event can be triggered on a tab, tab pane or any element inside a tab or tab pane. Use the 'unmodified.oc.tab' to mark a tab as unmodified.\n- $('#mytabs').ocTab('goTo', 'someidentifier') - Finds a tab by it's identifier and opens it.\n- $('#mytabs').ocTab('goToPane', '.tab-content .tab-pane:first') - Opens a tab in context of it's content (pane element)\n\n### Supported Options\n\n - closable - adds the \"close\" icon to the tab and lets users to close tabs. Corresponds the data-closable attribute.\n - closeConfirmation - a confirmation to show when a user tries to close a modified tab. Corresponds the data-close-confirmation\n   attribute. The confirmation is displayed only if the tab was modified.\n - paneClasses - a list of CSS classes to apply new pane elements. Corresponds to the data-pane-classes attribute.\n - maxTitleSymbols - the maximum number of characters in tab titles.\n - titleAsFileNames - treat tab titles as file names. In this mode only the file name part is displayed in the tab, and the directory part\n   is hidden.\n\n### Supported Events\n\n- beforeClose.oc.tab - triggered on a tab pane element before tab is closed by the user. Call the event's\n  preventDefault() method to cancel the action.\n- afterAllClosed.oc.tab - triggered after all tabs have been closed\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/tab/tab-control.css",
    "content": "/*\n * Tabs control\n * - The control supports 3 basic CSS classes: master, primary and secondary.\n * --------------------------------------------------\n */\n\n@import \"./tab.base.css\";\n@import \"./tab.variants.css\";\n\n:root, [data-bs-theme=\"light\"] {\n    --oc-content-tab-content-bg: #e9edf3;\n}\n\n[data-bs-theme=\"dark\"] {\n    --oc-content-tab-content-bg: #181a1e;\n}\n\n.control-tabs {\n    /* Tab-specific variables */\n    --tab-scroll-indicator-color: #72809d;\n    --tab-bg: #ffffff;\n    --tab-color: var(--oc-tab-color);\n    --tab-active-color: var(--oc-tab-active-color);\n    --tab-border: var(--oc-tab-border);\n    --tab-hover-bg: var(--oc-tab-hover-bg);\n\n    /* Nav variables */\n    --tab-nav-link-padding: 10px 15px;\n    --tab-nav-link-hover-bg: #eeeeee;\n    --tab-nav-disabled-link-color: #98A0A0;\n    --tab-nav-tabs-border-color: #ddd;\n    --tab-nav-tabs-link-hover-border-color: #eeeeee;\n    --tab-nav-tabs-active-link-hover-bg: var(--bs-body-bg);\n    --tab-nav-tabs-active-link-hover-color: #555555;\n    --tab-nav-tabs-active-link-hover-border-color: #ddd;\n\n    /* Sizing variables */\n    --tab-padding-standard: 20px;\n    --tab-font-size-base: 14px;\n    --tab-border-radius-large: 6px;\n\n    /* Z-index */\n    --tab-zindex: 10;\n\n    /* Brand colors */\n    --tab-brand-primary: var(--bs-primary);\n    --tab-brand-danger: var(--bs-danger);\n\n    /* Body background */\n    --tab-body-bg: var(--bs-body-bg);\n\n    /* Popup background */\n    --tab-popup-bg: var(--oc-popup-bg);\n\n    /* Content tabs specific */\n    --tab-content-bg: var(--oc-content-tab-content-bg, #e9edf3);\n    --tab-content-active-bg: var(--bs-body-bg);\n    --tab-content-border: var(--bs-border-color);\n\n    /* Icon */\n    --tab-icon-circle: \"\\f10c\";\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/tab/tab-control.js",
    "content": "/*\n * Tab control\n *\n * Documentation: ../docs/tab.md\n *\n * Config:\n * - closable\n * - linkable\n * - paneClasses\n * - titleAsFileNames\n * - maxTitleSymbols\n * - closeConfirmation\n *\n * Require:\n *  - bootstrap/transition\n *  - bootstrap/tab\n *  - foundation/toolbar\n */\nimport { ControlBase } from 'larajax';\nimport * as bootstrap from 'bootstrap';\n\nconst $ = window.jQuery;\n\nexport default class TabControl extends ControlBase {\n    init() {\n        var $el = this.$el = $(this.element);\n        this.options = Object.assign(Object.assign({}, this.tabInstanceConfig || {}), this.config || {});\n        this.$tabsContainer = $('.nav-tabs:first', $el);\n        this.$pagesContainer = $('.tab-content:first', $el);\n        this.tabId = 'tabs' + $el.parents().length + Math.round(Math.random() * 1000);\n        this.invalidElement = false;\n\n        if (this.options.closable) {\n            $el.attr('data-closable', '');\n        }\n\n        // Cast empty attribute\n        if (this.options.linkable === '') {\n            this.options.linkable = true;\n        }\n    }\n\n    connect() {\n        this.tabInstance = this;\n        this.$el.data('oc.tab', this);\n\n        this.$el.on('close.oc.tab', this.proxy(this.onCloseTab));\n        this.$el.on('mousedown', \"li[data-tab-id]\", this.proxy(this.onMiddleClickTab));\n        this.$el.on('modified.oc.tab', this.proxy(this.onModifyTab));\n        this.$el.on('unmodified.oc.tab', this.proxy(this.onUnmodifyTab));\n        this.$tabsContainer.on('shown.bs.tab', 'li', this.proxy(this.onContainerTabShown));\n\n        $('> li', this.$tabsContainer).each((index, el) => {\n            this.initTab(el);\n        });\n\n        this.$tabsContainer.toolbar({\n            scrollClassContainer: this.$el\n        });\n\n        this.updateClasses();\n        this.showHashedAnchorTab();\n    }\n\n    disconnect() {\n        this.$el.off('close.oc.tab', this.proxy(this.onCloseTab));\n        this.$el.off('mousedown', \"li[data-tab-id]\", this.proxy(this.onMiddleClickTab));\n        this.$el.off('modified.oc.tab', this.proxy(this.onModifyTab));\n        this.$el.off('unmodified.oc.tab', this.proxy(this.onUnmodifyTab));\n        this.$tabsContainer.off('shown.bs.tab', 'li', this.proxy(this.onContainerTabShown));\n\n        this.$tabsContainer.toolbar('dispose');\n\n        this.$el.removeData('oc.tab');\n        this.tabInstance = null;\n    }\n\n    onCloseTab(ev, data) {\n        ev.preventDefault();\n        var force = (data !== undefined && data.force !== undefined) ? data.force : false;\n        this.closeTab($(ev.target).closest('ul.nav-tabs > li, div.tab-content > div'), force);\n    }\n\n    onMiddleClickTab(ev) {\n        if (ev.which == '2') {\n            $(ev.target).trigger('close.oc.tab');\n        }\n    }\n\n    onModifyTab(ev) {\n        ev.preventDefault();\n        this.modifyTab($(ev.target).closest('ul.nav-tabs > li, div.tab-content > div'));\n    }\n\n    onUnmodifyTab(ev) {\n        ev.preventDefault();\n        this.unmodifyTab($(ev.target).closest('ul.nav-tabs > li, div.tab-content > div'));\n    }\n\n    onContainerTabShown(ev) {\n        $(window).trigger('oc.updateUi');\n\n        var $li = ev.target.closest('li');\n        var $anchor = $('> a', $li);\n\n        // Attach the active class to the list item in addition to the anchor\n        // which was introduced in the bootstrap 5 version -sg\n        $($li).addClass('active')\n            .siblings('.active').removeClass('active');\n\n        // Unselect all panes that were active at the time the DOM rendered\n        // since bootstrap 5 no longer deactivates siblings internally -sg\n        $($anchor.data('bs-target'))\n            .siblings('.active').removeClass('active');\n\n        var tabUrl = $anchor.data('tabUrl');\n\n        if (!tabUrl && this.options.linkable) {\n            tabUrl = $anchor.attr('href');\n        }\n\n        if (tabUrl && !this.invalidElement) {\n            if (oc.useTurbo()) {\n                oc.visit(tabUrl, { action: 'swap', scroll: false });\n            }\n            else {\n                window.history.replaceState({}, 'Tab link reference', tabUrl);\n            }\n        }\n    }\n\n    showHashedAnchorTab() {\n        if (!location.hash || !this.options.linkable) {\n            return;\n        }\n\n        var $hashedAnchor = $('li > a[href=\"' + location.hash + '\"]', this.$tabsContainer);\n        if (!$hashedAnchor.length) {\n            return;\n        }\n\n        this.bsTab($hashedAnchor).show();\n\n        // Next tick\n        setTimeout(function() {\n            $hashedAnchor.trigger('shownLinkable.oc.tab');\n        }, 1);\n    }\n\n    initTab(li) {\n        var\n            $tabs = $('> li', this.$tabsContainer),\n            tabIndex = $tabs.index(li),\n            time = new Date().getTime(),\n            $anchor = $('a', li),\n            $pane = $('> .tab-pane', this.$pagesContainer).eq(tabIndex),\n            targetId = $pane.attr('id');\n\n        // Auto generate the tab pane identifier\n        if (!targetId) {\n            targetId = this.tabId + '-tab-' + tabIndex + time;\n            $pane.attr('id', targetId);\n        }\n\n        $anchor\n            .data('target', '#'+targetId)\n            .attr('data-bs-target', '#'+targetId)\n            .attr('data-bs-toggle', 'tab');\n\n        // Setup the required tabs markup if it does not exist already.\n        if ($anchor.find('> span.title > span').length < 1) {\n            var html = $anchor.html();\n            $anchor\n                .html('')\n                .append($('<span class=\"title\"></span>')\n                .append($('<span></span>').html(html)));\n        }\n\n        if (!$('span.tab-close', li).length) {\n            $(li).append($('<span class=\"tab-close\"><i>&times;</i></span>').click(function(){\n                $(this).trigger('close.oc.tab');\n                return false;\n            }));\n        }\n\n        $pane.data('tab', li);\n\n        this.$el.trigger('initTab.oc.tab', [{ 'pane': $pane, 'tab': li }]);\n    }\n\n    addTab(title, content, identifier, tabClass) {\n        var\n            processedTitle = this.generateTitleText(title, -1),\n            $link = $('<a/>').attr('href', 'javascript:;').text(processedTitle),\n            $li = $('<li/>'),\n            $pane = $('<div>').html(content).addClass('tab-pane');\n\n        $link.attr('title', title);\n        $li.append($link);\n        this.$tabsContainer.append($li);\n        this.$pagesContainer.append($pane);\n\n        if (tabClass !== undefined) {\n            $link.addClass(tabClass);\n        }\n\n        if (identifier !== undefined) {\n            $li.attr('data-tab-id', identifier);\n        }\n\n        if (this.options.paneClasses) {\n            $pane.addClass(this.options.paneClasses);\n        }\n\n        this.initTab($li);\n        $link.tab('show');\n\n        $(window).trigger('resize');\n        this.$tabsContainer.dragScroll('goToElement', $li);\n\n        var defaultFocus = $('[default-focus]', $pane);\n        if (defaultFocus.is(':visible')) {\n            defaultFocus.focus();\n        }\n\n        this.updateClasses();\n    }\n\n    updateTab(tab, title, content) {\n        var tabIndex = this.findTabIndex(tab);\n        if (tabIndex == -1) {\n            return;\n        }\n\n        var\n            processedTitle = this.generateTitleText(title, -1),\n            $tab = $('> li', this.$tabsContainer).eq(tabIndex),\n            $pane = $('> div', this.$pagesContainer).eq(tabIndex),\n            $link = $('a', $tab);\n\n        $link.text(processedTitle).attr('title', title);\n        $pane.html(content);\n\n        this.initTab($tab);\n\n        this.updateClasses();\n    }\n\n    generateTitleText(title, tabIndex) {\n        var newTitle = title\n        if (this.options.titleAsFileNames) {\n            newTitle = title.replace(/^.*[\\\\\\/]/, '')\n        }\n\n        if (this.options.maxTitleSymbols && newTitle.length > this.options.maxTitleSymbols) {\n            newTitle = '...'+newTitle.substring(newTitle.length - this.options.maxTitleSymbols);\n        }\n\n        return newTitle;\n    }\n\n    closeTab(tab, force) {\n        var tabIndex = this.findTabIndex(tab);\n        if (tabIndex == -1) {\n            return;\n        }\n\n        var\n            $tab = $('> li', this.$tabsContainer).eq(tabIndex),\n            $pane = $('> div', this.$pagesContainer).eq(tabIndex),\n            isActive = $tab.hasClass('active'),\n            isModified = $tab.attr('data-modified') !== undefined;\n\n        if (isModified && this.options.closeConfirmation && force !== true) {\n            if (!confirm(this.options.closeConfirmation)) {\n                return;\n            }\n        }\n\n        var e = $.Event('beforeClose.oc.tab', { relatedTarget: $pane });\n        this.$el.trigger(e);\n        if (e.isDefaultPrevented()) {\n            return;\n        }\n\n        $.oc.foundation.controlUtils.disposeControls($pane.get(0));\n\n        $pane.remove();\n        $tab.remove();\n\n        if (isActive) {\n            $('> li > a', this.$tabsContainer).eq(tabIndex-1).tab('show');\n        }\n\n        if ($('> li > a', this.$tabsContainer).length == 0) {\n            this.$el.trigger('afterAllClosed.oc.tab');\n        }\n\n        this.$el.trigger('closed.oc.tab', [$tab, $pane]);\n\n        $(window).trigger('resize');\n        this.updateClasses();\n    }\n\n    updateClasses() {\n        if (this.$tabsContainer.children().length > 0) {\n            this.$el.addClass('has-tabs');\n        }\n        else {\n            this.$el.removeClass('has-tabs');\n        }\n    }\n\n    modifyTab(tab) {\n        var tabIndex = this.findTabIndex(tab);\n        if (tabIndex == -1) {\n            return;\n        }\n\n        $('> li', this.$tabsContainer).eq(tabIndex).attr('data-modified', '');\n        $('> div', this.$pagesContainer).eq(tabIndex).attr('data-modified', '');\n    }\n\n    unmodifyTab(tab) {\n        var tabIndex = this.findTabIndex(tab);\n        if (tabIndex == -1) {\n            return;\n        }\n\n        $('> li', this.$tabsContainer).eq(tabIndex).removeAttr('data-modified');\n        $('> div', this.$pagesContainer).eq(tabIndex).removeAttr('data-modified');\n    }\n\n    findTabIndex(tab) {\n        var tabToFind = tab;\n\n        if (tab === undefined) {\n            tabToFind = $('li.active', this.$tabsContainer);\n        }\n\n        var tabParent = this.$pagesContainer;\n\n        if ($(tabToFind).parent().hasClass('nav-tabs')) {\n            tabParent = this.$tabsContainer;\n        }\n\n        return tabParent.children().index($(tabToFind));\n    }\n\n    findTabFromPane(pane) {\n        var id = '#' + $(pane).attr('id'),\n            tab = $('[data-target=\"' + id + '\"]', this.$tabsContainer);\n\n        return tab;\n    }\n\n    findPaneFromTab(tab) {\n        var id = $(tab).find('> a').data('target'),\n            pane = this.$pagesContainer.find(id);\n\n        return pane;\n    }\n\n    goTo(identifier) {\n        var $tab = $('[data-tab-id=\"'+identifier+'\" ]', this.$tabsContainer)\n\n        if ($tab.length == 0) {\n            return false;\n        }\n\n        var tabIndex = this.findTabIndex($tab);\n        if (tabIndex == -1) {\n            return false;\n        }\n\n        this.goToIndex(tabIndex);\n\n        this.$tabsContainer.dragScroll('goToElement', $tab);\n\n        return true;\n    }\n\n    goToPane(pane) {\n        var $pane = $(pane),\n            $tab = this.findTabFromPane($pane);\n\n        if ($pane.length == 0) {\n            return;\n        }\n\n        $pane.removeClass('collapsed');\n\n        var tabIndex = this.findTabIndex($pane);\n        if (tabIndex == -1) {\n            return false;\n        }\n\n        this.goToIndex(tabIndex);\n\n        if ($tab.length > 0) {\n            this.$tabsContainer.dragScroll('goToElement', $tab);\n        }\n\n        return true;\n    }\n\n    goToInvalidElement(element) {\n        this.invalidElement = true;\n        var result = this.goToPane(element.closest('.tab-pane'));\n        this.invalidElement = false;\n        return result;\n    }\n\n    goToElement(element) {\n        return this.goToPane(element.closest('.tab-pane'));\n    }\n\n    findByIdentifier(identifier) {\n        return $('[data-tab-id=\"'+identifier+'\" ]', this.$tabsContainer);\n    }\n\n    updateIdentifier(tab, identifier) {\n        var index = this.findTabIndex(tab);\n        if (index == -1) {\n            return;\n        }\n\n        $('> li', this.$tabsContainer).eq(index).attr('data-tab-id', identifier);\n    }\n\n    updateTitle(tab, title) {\n        var index = this.findTabIndex(tab);\n        if (index == -1) {\n            return;\n        }\n\n        var processedTitle = this.generateTitleText(title, index),\n            $link = $('> li > a span.title', this.$tabsContainer).eq(index);\n\n        $link.attr('title', title);\n        $link.text(processedTitle);\n    }\n\n    goToIndex(index) {\n        $('> li > a', this.$tabsContainer).eq(index).tab('show');\n    }\n\n    prev() {\n        var tabIndex = this.findTabIndex();\n        if (tabIndex <= 0) {\n            return;\n        }\n\n        this.goToIndex(tabIndex-1);\n    }\n\n    next() {\n        var tabIndex = this.findTabIndex();\n        if (tabIndex == -1) {\n            return;\n        }\n\n        this.goToIndex(tabIndex+1);\n    }\n\n    // Tunnel to bootstrap.Tab instance\n    bsTab(el) {\n        if (el instanceof $) {\n            el = el.get(0);\n        }\n\n        return bootstrap.Tab.getOrCreateInstance(el);\n    }\n}\n\n// JQUERY PLUGIN DEFINITION\n// ============================\n\n$.fn.ocTab = function (config) {\n    var args = Array.prototype.slice.call(arguments, 1), result;\n    this.each((index, element) => {\n        if (typeof config !== 'string') {\n            element.tabInstanceConfig = config;\n        }\n\n        if (!element.tabInstance) {\n            element.tabInstance = oc.observeControl(element, 'tab');\n        }\n\n        if (typeof config === 'string' && element.tabInstance) {\n            result = element.tabInstance[config].apply(element.tabInstance, args);\n            return typeof result === 'undefined';\n        }\n    });\n\n    return result || this;\n}\n\n// GLOBAL EVENTS\n// ============================\n\n// Detect invalid fields, focus the tab\n$(window).on('ajaxInvalidField', function(event, element, name, messages, isFirst){\n    if (!isFirst) {\n        return;\n    }\n\n    event.preventDefault();\n\n    var $el = $(element);\n    $el.closest('[data-control=tab]').ocTab('goToInvalidElement', $el);\n    $el.focus();\n});\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/tab/tab.base.css",
    "content": "/*\n * Base tabs\n */\n\n.control-tabs {\n    position: relative;\n    margin-bottom: 20px;\n\n    &:last-child {\n        margin-bottom: 0;\n    }\n\n    /* Horizontal scroll indicators */\n    &:after,\n    &:before {\n        display: none;\n        position: absolute;\n        top: 10px;\n        margin-top: 0;\n        height: 9px;\n        font-size: 10px;\n        color: var(--tab-scroll-indicator-color);\n    }\n\n    &:before {\n        left: -6px;\n        font-family: 'octo-icon';\n        content: \"\\f104\"; /* angle-left */\n    }\n\n    &:after {\n        right: -8px;\n        font-family: 'octo-icon';\n        content: \"\\f105\"; /* angle-right */\n    }\n\n    &.scroll-before:before { display: block; }\n    &.scroll-after:after { display: block; }\n\n    &.scroll-active-before:before { color: var(--tab-border); }\n    &.scroll-active-after:after { color: var(--tab-border); }\n\n    > ul.nav-tabs,\n    > div > ul.nav-tabs,\n    > div > div > ul.nav-tabs {\n        white-space: nowrap;\n        flex-wrap: nowrap;\n        font-size: 0;\n        overflow: hidden;\n        border-bottom: none;\n        vertical-align: bottom;\n\n        > li {\n            font-size: 15px;\n            margin-right: 20px;\n            position: relative;\n            z-index: calc(var(--tab-zindex) - 2);\n\n            &:last-child {\n                margin-right: 0;\n            }\n\n            a {\n                display: block;\n                border-left: none;\n                border-top: none;\n                border-right: none;\n                padding: 0 0 10px 0;\n                color: var(--tab-color);\n                font-weight: 400;\n                overflow: hidden;\n                text-decoration: none;\n\n                &:hover {\n                    background-color: transparent;\n                    border-bottom-color: transparent;\n                }\n\n                &:before {\n                    font-size: 14px;\n                }\n\n                > span.title > span {\n                    max-width: 150px;\n                    overflow: hidden;\n                    text-overflow: ellipsis;\n                    display: inline-block;\n\n                    > span:not([class*=\"oc-icon\"]) {\n                        margin-right: 8px;\n                    }\n                }\n\n                span.badge-colorpicker {\n                    text-decoration: none;\n                    display: inline-block;\n                    width: 20px;\n                    height: 20px;\n                    border-radius: 6px;\n                    background-color: var(--background-color, var(--bs-secondary));\n                    margin-left: 15px;\n                    margin-right: -15px;\n                    opacity: .3;\n                }\n            }\n\n            span.tab-close {\n                display: none;\n            }\n\n            &.active {\n                z-index: var(--tab-zindex);\n\n                a {\n                    color: var(--tab-active-color);\n\n                    span.badge-colorpicker {\n                        opacity: 1;\n                        background-color: var(--background-color, var(--bs-primary));\n                    }\n                }\n\n                &:after {\n                    width: 100%;\n                    height: 3px;\n                    bottom: 0;\n                    background: var(--tab-border);\n                }\n            }\n        }\n    }\n\n    > div.tab-content {\n        > div.tab-pane {\n            padding: var(--tab-padding-standard) 0 0 0;\n            display: none;\n\n            &:before,\n            &:after {\n                content: \" \";\n                display: table;\n            }\n            &:after {\n                clear: both;\n            }\n\n            &.active {\n                display: block;\n\n                &.layout-cell {\n                   display: table-cell;\n                }\n            }\n\n            &.pane-compact {\n                padding: 0;\n            }\n            &.pane-padded {\n                padding: 20px 20px 0 20px;\n            }\n            &.pane-bordered {\n                border-left: 1px solid var(--tab-border);\n                border-right: 1px solid var(--tab-border);\n                border-bottom: 1px solid var(--tab-border);\n            }\n        }\n    }\n\n    &[data-closable] {\n        > ul.nav-tabs,\n        > div > ul.nav-tabs,\n        > div > div > ul.nav-tabs {\n            > li {\n                margin-right: 5px;\n\n                a {\n                    padding-left: 20px !important;\n                    padding-right: 0 !important;\n                }\n\n                span.tab-close {\n                    display: block;\n                    position: absolute;\n                    width: 20px;\n                    height: 20px;\n                    top: 5px;\n                    left: -5px;\n                    text-align: right;\n                    font-size: 12px;\n                    cursor: pointer;\n                    color: var(--tab-color);\n\n                    i {\n                        display: inline-block;\n                        z-index: calc(var(--tab-zindex) + 1);\n                        top: -7px;\n                        right: 5px;\n                        position: relative;\n                    }\n\n                    &:hover {\n                        color: var(--tab-brand-danger);\n                    }\n                }\n\n                &.active span.close {\n                    color: var(--tab-color);\n                }\n\n                &[data-modified] {\n                    span.tab-close i {\n                        top: -4px;\n\n                        &:before {\n                            content: var(--tab-icon-circle);\n                            font-size: 9px;\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n.hide-tabs {\n    .control-tabs {\n        ul.nav-tabs {\n            display: none;\n        }\n\n        > div.tab-content > div.tab-pane {\n            padding-top: 0;\n        }\n    }\n}\n\n.form-sidebar {\n    .control-tabs.secondary {\n        > div > ul.nav-tabs > li a {\n            background: transparent;\n        }\n    }\n}\n\n/* Tab modification for modals */\n.modal-content {\n    .control-tabs.primary-tabs {\n        > ul.nav-tabs,\n        > div > ul.nav-tabs,\n        > div > div > ul.nav-tabs {\n            > li.active a:before {\n                background: var(--tab-popup-bg);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/controls/tab/tab.variants.css",
    "content": "/*\n * Master tabs\n */\n\n.control-tabs.master-tabs {\n    > ul.nav-tabs,\n    > div > ul.nav-tabs,\n    > div > div > ul.nav-tabs {\n        > li {\n            a {\n                font-size: 15px;\n                border-bottom: transparent 4px solid;\n                position: relative;\n                z-index: calc(var(--tab-zindex) + 1);\n                line-height: 100%;\n            }\n\n            &.active {\n                a {\n                    border-bottom: var(--tab-border) 4px solid;\n                }\n            }\n        }\n    }\n}\n\n/*\n * Primary tabs\n */\n\n.control-tabs.primary-tabs {\n    margin-bottom: 5px;\n\n    > ul.nav-tabs,\n    > div > ul.nav-tabs,\n    > div > div > ul.nav-tabs {\n        position: relative;\n        margin-left: 0;\n        margin-right: 0;\n\n        &:before {\n            position: absolute;\n            bottom: 0;\n            height: 2px;\n            width: 100%;\n            z-index: calc(var(--tab-zindex) - 1);\n            content: ' ';\n            border-bottom: 2px solid var(--tab-border);\n        }\n\n        > li {\n            padding-right: 0;\n            padding-left: 0;\n            margin-left: 0;\n            margin-right: -10px;\n            background: transparent;\n            border-bottom: 2px solid var(--tab-border);\n\n            &:first-child {\n                padding-left: var(--tab-padding-standard) !important;\n            }\n\n            &:last-child {\n                margin-right: 0;\n            }\n\n            a {\n                font-size: var(--tab-font-size-base);\n                font-weight: 500;\n                padding-bottom: 3px;\n                margin: 0;\n                position: relative;\n                top: -1px;\n                z-index: calc(var(--tab-zindex) + 1);\n                background: transparent;\n                overflow: visible;\n                border-bottom: 1px solid transparent;\n\n                > span.title {\n                    position: relative;\n                    display: inline-block;\n                    padding: 4px 25px 0px;\n                    box-sizing: border-box;\n                    z-index: var(--tab-zindex);\n\n                    > span {\n                        padding-top: 7px;\n                        margin-top: -4px;\n                        border-top: 2px solid transparent;\n                    }\n\n                    &:before,\n                    &:after {\n                        content: '';\n                        display: none;\n                        border-top: 2px solid var(--tab-border);\n                        position: absolute;\n                        background: transparent;\n                        top: 0;\n                        z-index: -1;\n                        width: 20px;\n                        bottom: -2px;\n                        transform-origin: bottom;\n                    }\n\n                    &:before {\n                        left: 0;\n                        border-left: 2px solid var(--tab-border);\n                        border-radius: 8px 0 0 0;\n                        transform: skewX(-10deg);\n                    }\n\n                    &:after {\n                        right: 0;\n                        border-right: 2px solid var(--tab-border);\n                        border-radius: 0 8px 0 0;\n                        transform: skewX(10deg);\n                    }\n                }\n            }\n\n            &:not(.active) {\n                a:before {\n                    content: '';\n                    left: 12px;\n                    right: 12px;\n                    top: 6px;\n                    bottom: 3px;\n                    border-radius: 4px;\n                    position: absolute;\n                    background: var(--tab-hover-bg);\n                    opacity: 0;\n                    transition: none;\n                }\n\n                &:hover a:before {\n                    transition: opacity 0.1s ease-out, color 0.1s ease-out;\n                    opacity: 1;\n                }\n            }\n\n            &:last-child {\n                background-image: none;\n                margin-right: 0;\n                padding-right: 5px;\n            }\n\n            &:first-child {\n                padding-left: 0;\n            }\n\n            &.active a {\n                z-index: calc(var(--tab-zindex) + 3);\n                top: 2px;\n\n                > span.title {\n                    z-index: calc(var(--tab-zindex) + 2);\n                    border-top-color: #d6d6d6;\n\n                    &:before,\n                    &:after {\n                        display: block;\n                        border-color: var(--tab-border);\n                    }\n\n                    span {\n                        border-top-color: var(--tab-border);\n                    }\n                }\n\n                &:before {\n                    position: absolute;\n                    bottom: -1px;\n                    height: 2.6px;\n                    right: 2px;\n                    left: 2px;\n                    content: ' ';\n                    background-color: var(--tab-body-bg);\n                }\n            }\n        }\n    }\n\n    /* Primary tabs should use inset by default, unless otherwise specified */\n    > ul.nav-tabs,\n    > div > ul.nav-tabs,\n    > div > div > ul.nav-tabs {\n        margin-left: calc(-1 * var(--tab-padding-standard));\n        margin-right: calc(-1 * var(--tab-padding-standard));\n    }\n\n    /* Tab divider to sit inset the standard padding (20px) */\n    &.tabs-no-inset {\n        > ul.nav-tabs,\n        > div > ul.nav-tabs,\n        > div > div > ul.nav-tabs {\n            margin-left: 0;\n            margin-right: 0;\n        }\n    }\n}\n\n/*\n * Secondary tabs\n */\n\n.control-tabs.secondary-tabs {\n    > ul.nav-tabs,\n    > div > ul.nav-tabs,\n    > div > div > ul.nav-tabs {\n        > li {\n            padding-right: 10px;\n            margin-right: 10px;\n            border-right: 1px solid var(--tab-border);\n\n            a {\n                font-size: 14px;\n                font-weight: 600;\n                padding-bottom: 0;\n            }\n\n            &:last-child {\n                border-right: none;\n                margin-right: 0;\n                padding-right: 0;\n            }\n        }\n    }\n\n    > div.tab-content {\n        > div.tab-pane {\n            padding-top: 15px;\n        }\n    }\n}\n\n/*\n * Pill tabs\n */\n\n.control-tabs.pill-tabs {\n    margin-bottom: 5px;\n\n    > ul.nav-tabs,\n    > div > ul.nav-tabs,\n    > div > div > ul.nav-tabs {\n        position: relative;\n\n        > li {\n            padding: 0;\n            margin: 0;\n            background: transparent;\n            border: 1px solid var(--tab-border);\n\n            + li {\n                margin-left: -1px;\n            }\n\n            a {\n                position: relative;\n                font-size: var(--tab-font-size-base);\n                font-weight: 600;\n                padding-bottom: 0;\n                margin: 0;\n                z-index: calc(var(--tab-zindex) + 1);\n                background: transparent;\n                overflow: visible;\n\n                > span.title {\n                    position: relative;\n                    display: inline-block;\n                    padding: 9px 25px 4px 25px;\n                    box-sizing: border-box;\n                    z-index: var(--tab-zindex);\n\n                    > span {\n                        margin: 0;\n                        padding: 0;\n                        border: none;\n                    }\n                }\n            }\n\n            &:last-child {\n                background-image: none;\n                margin-right: 0;\n                padding-right: 5px;\n                border-top-right-radius: var(--tab-border-radius-large);\n                border-bottom-right-radius: var(--tab-border-radius-large);\n            }\n\n            &:first-child {\n                padding-left: 0;\n                border-top-left-radius: var(--tab-border-radius-large);\n                border-bottom-left-radius: var(--tab-border-radius-large);\n            }\n\n            &.active {\n                border: 1px solid var(--tab-brand-primary);\n\n                a {\n                    z-index: calc(var(--tab-zindex) + 3);\n\n                    > span.title {\n                        z-index: calc(var(--tab-zindex) + 2);\n                        border-top-color: #d6d6d6;\n                    }\n\n                    &:before {\n                        display: none;\n                    }\n                }\n            }\n        }\n    }\n}\n\n.control-tabs.pill-tabs.is-vertical {\n    > ul.nav-tabs,\n    > div > ul.nav-tabs,\n    > div > div > ul.nav-tabs {\n        flex-direction: column;\n\n        > li {\n            margin-left: 0;\n\n            + li:not(:last-child):not(.active) {\n                border-bottom-color: transparent;\n            }\n\n            &:last-child {\n                border-bottom-left-radius: var(--tab-border-radius-large);\n                border-bottom-right-radius: var(--tab-border-radius-large);\n                border-top-right-radius: 0;\n            }\n\n            &:first-child {\n                border-top-left-radius: var(--tab-border-radius-large);\n                border-top-right-radius: var(--tab-border-radius-large);\n                border-bottom-left-radius: 0;\n            }\n        }\n    }\n}\n\n/*\n * Auxiliary tabs\n */\n\n.control-tabs.auxiliary-tabs {\n    background: white;\n\n    > ul.nav-tabs,\n    > div > ul.nav-tabs {\n        padding-left: 20px;\n        padding-bottom: 2px;\n        background: white;\n        position: relative;\n\n        &:before {\n            content: ' ';\n            display: block;\n            position: absolute;\n            width: 100%;\n            height: 1px;\n            background: #95a5a6;\n            top: 0;\n            left: 0;\n        }\n\n        > li {\n            margin-right: 2px;\n\n            > a {\n                background: white;\n                color: #bdc3c7;\n                border-left: 1px solid #ecf0f1 !important;\n                border-right: 1px solid #ecf0f1 !important;\n                border-bottom: 1px solid #ecf0f1 !important;\n                padding: 4px 10px;\n                line-height: 100%;\n                border-radius: 0 0 4px 4px;\n\n                > span.title > span {\n                    margin-bottom: 0;\n                    font-size: 13px;\n                    height: auto;\n                }\n            }\n\n            &.active {\n                top: 0;\n\n                &:before {\n                    content: ' ';\n                    display: block;\n                    position: absolute;\n                    width: 100%;\n                    height: 1px;\n                    background: white;\n                    top: -1px;\n                    left: 0;\n                }\n\n                a {\n                    padding-top: 5px;\n                    border-left: 1px solid #95a5a6 !important;\n                    border-right: 1px solid #95a5a6 !important;\n                    border-bottom: 1px solid #95a5a6 !important;\n                    color: #95a5a6;\n                }\n            }\n        }\n    }\n\n    > div.tab-content > .tab-pane {\n        background: white;\n    }\n}\n\n/*\n * Content tabs\n */\n\n.control-tabs.content-tabs {\n    > ul.nav-tabs {\n        position: relative;\n\n        &:before {\n            content: ' ';\n            position: absolute;\n            bottom: 0;\n            left: 0;\n            width: 100%;\n            height: 1px;\n            border-bottom: 1px solid var(--tab-content-border);\n        }\n\n        li {\n            margin-right: 0;\n            border-top: 1px solid var(--tab-content-border);\n            border-right: 1px solid var(--tab-content-border);\n            border-bottom: 1px solid var(--tab-content-border);\n            background-color: var(--tab-content-bg);\n\n            a {\n                font-size: 1rem;\n                padding: 7px 20px;\n                margin: 0;\n                border: none;\n                background: transparent;\n                font-weight: normal;\n\n                span.title {\n                    span {\n                        border-top: none;\n                        padding-top: 5px;\n                    }\n                }\n            }\n\n            &:first-child {\n                border-left: 1px solid var(--tab-content-border);\n            }\n\n            &:last-child {\n                border-right: 1px solid var(--tab-content-border);\n            }\n\n            &.active {\n                background: var(--tab-content-active-bg);\n                border-bottom-color: transparent;\n\n                a {\n                    font-weight: 600;\n                }\n            }\n        }\n    }\n\n    /* Tab divider to sit inset the standard padding (20px) */\n    &.tabs-inset {\n        > ul.nav-tabs,\n        > div > ul.nav-tabs,\n        > div > div > ul.nav-tabs {\n            margin-left: -20px;\n            margin-right: -20px;\n\n            li:first-child {\n                margin-left: 20px;\n            }\n        }\n    }\n\n    /* Tabs to sit in by the standard offset (20px) */\n    &.tabs-offset {\n        > ul.nav-tabs {\n            li:first-child {\n                margin-left: 20px;\n            }\n        }\n    }\n\n    /* Tabs to sit flush to the element above */\n    &.tabs-flush {\n        > ul.nav-tabs {\n            background-color: var(--tab-content-bg);\n\n            li {\n                border-top: none;\n            }\n\n            li:last-child {\n                border-right: 1px solid transparent;\n            }\n\n            li:first-child {\n                border-left: 1px solid transparent;\n            }\n\n            li.active:last-child {\n                border-right: 1px solid var(--tab-content-border);\n            }\n        }\n    }\n\n    > .tab-content > .tab-pane {\n        padding-top: 0;\n\n        div.list-header,\n        div.padded-container,\n        div.toolbar-widget {\n            background: var(--tab-content-active-bg);\n            padding-top: 20px;\n        }\n\n        /* Pane to sit inset the standard padding (20px) */\n        &.pane-inset {\n            margin-left: -20px;\n            margin-right: -20px;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/elements/flag/flag.css",
    "content": "/*\n * Flag Icons - Vanilla CSS\n * Converted from flag.less\n */\n\n[class^=\"flag-\"],\n[class*=\" flag-\"] {\n    background-size: contain;\n    background-position: 50%;\n    background-repeat: no-repeat;\n    position: relative;\n    display: inline-block;\n    width: 1.33333333em;\n    line-height: 1em;\n}\n\n[class^=\"flag-\"]:before,\n[class*=\" flag-\"]:before {\n    content: \"\\00a0\";\n}\n\n/* Country Flags */\n.flag-ad { background-image: url('./flag-icon/flags/4x3/ad.svg'); }\n.flag-ae { background-image: url('./flag-icon/flags/4x3/ae.svg'); }\n.flag-af { background-image: url('./flag-icon/flags/4x3/af.svg'); }\n.flag-ag { background-image: url('./flag-icon/flags/4x3/ag.svg'); }\n.flag-ai { background-image: url('./flag-icon/flags/4x3/ai.svg'); }\n.flag-al { background-image: url('./flag-icon/flags/4x3/al.svg'); }\n.flag-am { background-image: url('./flag-icon/flags/4x3/am.svg'); }\n.flag-ao { background-image: url('./flag-icon/flags/4x3/ao.svg'); }\n.flag-aq { background-image: url('./flag-icon/flags/4x3/aq.svg'); }\n.flag-ar { background-image: url('./flag-icon/flags/4x3/ar.svg'); }\n.flag-as { background-image: url('./flag-icon/flags/4x3/as.svg'); }\n.flag-at { background-image: url('./flag-icon/flags/4x3/at.svg'); }\n.flag-au { background-image: url('./flag-icon/flags/4x3/au.svg'); }\n.flag-aw { background-image: url('./flag-icon/flags/4x3/aw.svg'); }\n.flag-ax { background-image: url('./flag-icon/flags/4x3/ax.svg'); }\n.flag-az { background-image: url('./flag-icon/flags/4x3/az.svg'); }\n.flag-ba { background-image: url('./flag-icon/flags/4x3/ba.svg'); }\n.flag-bb { background-image: url('./flag-icon/flags/4x3/bb.svg'); }\n.flag-bd { background-image: url('./flag-icon/flags/4x3/bd.svg'); }\n.flag-be { background-image: url('./flag-icon/flags/4x3/be.svg'); }\n.flag-bf { background-image: url('./flag-icon/flags/4x3/bf.svg'); }\n.flag-bg { background-image: url('./flag-icon/flags/4x3/bg.svg'); }\n.flag-bh { background-image: url('./flag-icon/flags/4x3/bh.svg'); }\n.flag-bi { background-image: url('./flag-icon/flags/4x3/bi.svg'); }\n.flag-bj { background-image: url('./flag-icon/flags/4x3/bj.svg'); }\n.flag-bl { background-image: url('./flag-icon/flags/4x3/bl.svg'); }\n.flag-bm { background-image: url('./flag-icon/flags/4x3/bm.svg'); }\n.flag-bn { background-image: url('./flag-icon/flags/4x3/bn.svg'); }\n.flag-bo { background-image: url('./flag-icon/flags/4x3/bo.svg'); }\n.flag-bq { background-image: url('./flag-icon/flags/4x3/bq.svg'); }\n.flag-br { background-image: url('./flag-icon/flags/4x3/br.svg'); }\n.flag-bs { background-image: url('./flag-icon/flags/4x3/bs.svg'); }\n.flag-bt { background-image: url('./flag-icon/flags/4x3/bt.svg'); }\n.flag-bv { background-image: url('./flag-icon/flags/4x3/bv.svg'); }\n.flag-bw { background-image: url('./flag-icon/flags/4x3/bw.svg'); }\n.flag-by { background-image: url('./flag-icon/flags/4x3/by.svg'); }\n.flag-bz { background-image: url('./flag-icon/flags/4x3/bz.svg'); }\n.flag-ca { background-image: url('./flag-icon/flags/4x3/ca.svg'); }\n.flag-cc { background-image: url('./flag-icon/flags/4x3/cc.svg'); }\n.flag-cd { background-image: url('./flag-icon/flags/4x3/cd.svg'); }\n.flag-cf { background-image: url('./flag-icon/flags/4x3/cf.svg'); }\n.flag-cg { background-image: url('./flag-icon/flags/4x3/cg.svg'); }\n.flag-ch { background-image: url('./flag-icon/flags/4x3/ch.svg'); }\n.flag-ci { background-image: url('./flag-icon/flags/4x3/ci.svg'); }\n.flag-ck { background-image: url('./flag-icon/flags/4x3/ck.svg'); }\n.flag-cl { background-image: url('./flag-icon/flags/4x3/cl.svg'); }\n.flag-cm { background-image: url('./flag-icon/flags/4x3/cm.svg'); }\n.flag-cn { background-image: url('./flag-icon/flags/4x3/cn.svg'); }\n.flag-co { background-image: url('./flag-icon/flags/4x3/co.svg'); }\n.flag-cr { background-image: url('./flag-icon/flags/4x3/cr.svg'); }\n.flag-cu { background-image: url('./flag-icon/flags/4x3/cu.svg'); }\n.flag-cv { background-image: url('./flag-icon/flags/4x3/cv.svg'); }\n.flag-cw { background-image: url('./flag-icon/flags/4x3/cw.svg'); }\n.flag-cx { background-image: url('./flag-icon/flags/4x3/cx.svg'); }\n.flag-cy { background-image: url('./flag-icon/flags/4x3/cy.svg'); }\n.flag-cz { background-image: url('./flag-icon/flags/4x3/cz.svg'); }\n.flag-de { background-image: url('./flag-icon/flags/4x3/de.svg'); }\n.flag-dj { background-image: url('./flag-icon/flags/4x3/dj.svg'); }\n.flag-dk { background-image: url('./flag-icon/flags/4x3/dk.svg'); }\n.flag-dm { background-image: url('./flag-icon/flags/4x3/dm.svg'); }\n.flag-do { background-image: url('./flag-icon/flags/4x3/do.svg'); }\n.flag-dz { background-image: url('./flag-icon/flags/4x3/dz.svg'); }\n.flag-ec { background-image: url('./flag-icon/flags/4x3/ec.svg'); }\n.flag-ee { background-image: url('./flag-icon/flags/4x3/ee.svg'); }\n.flag-eg { background-image: url('./flag-icon/flags/4x3/eg.svg'); }\n.flag-eh { background-image: url('./flag-icon/flags/4x3/eh.svg'); }\n.flag-er { background-image: url('./flag-icon/flags/4x3/er.svg'); }\n.flag-es { background-image: url('./flag-icon/flags/4x3/es.svg'); }\n.flag-et { background-image: url('./flag-icon/flags/4x3/et.svg'); }\n.flag-fi { background-image: url('./flag-icon/flags/4x3/fi.svg'); }\n.flag-fj { background-image: url('./flag-icon/flags/4x3/fj.svg'); }\n.flag-fk { background-image: url('./flag-icon/flags/4x3/fk.svg'); }\n.flag-fm { background-image: url('./flag-icon/flags/4x3/fm.svg'); }\n.flag-fo { background-image: url('./flag-icon/flags/4x3/fo.svg'); }\n.flag-fr { background-image: url('./flag-icon/flags/4x3/fr.svg'); }\n.flag-ga { background-image: url('./flag-icon/flags/4x3/ga.svg'); }\n.flag-gb { background-image: url('./flag-icon/flags/4x3/gb.svg'); }\n.flag-gd { background-image: url('./flag-icon/flags/4x3/gd.svg'); }\n.flag-ge { background-image: url('./flag-icon/flags/4x3/ge.svg'); }\n.flag-gf { background-image: url('./flag-icon/flags/4x3/gf.svg'); }\n.flag-gg { background-image: url('./flag-icon/flags/4x3/gg.svg'); }\n.flag-gh { background-image: url('./flag-icon/flags/4x3/gh.svg'); }\n.flag-gi { background-image: url('./flag-icon/flags/4x3/gi.svg'); }\n.flag-gl { background-image: url('./flag-icon/flags/4x3/gl.svg'); }\n.flag-gm { background-image: url('./flag-icon/flags/4x3/gm.svg'); }\n.flag-gn { background-image: url('./flag-icon/flags/4x3/gn.svg'); }\n.flag-gp { background-image: url('./flag-icon/flags/4x3/gp.svg'); }\n.flag-gq { background-image: url('./flag-icon/flags/4x3/gq.svg'); }\n.flag-gr { background-image: url('./flag-icon/flags/4x3/gr.svg'); }\n.flag-gs { background-image: url('./flag-icon/flags/4x3/gs.svg'); }\n.flag-gt { background-image: url('./flag-icon/flags/4x3/gt.svg'); }\n.flag-gu { background-image: url('./flag-icon/flags/4x3/gu.svg'); }\n.flag-gw { background-image: url('./flag-icon/flags/4x3/gw.svg'); }\n.flag-gy { background-image: url('./flag-icon/flags/4x3/gy.svg'); }\n.flag-hk { background-image: url('./flag-icon/flags/4x3/hk.svg'); }\n.flag-hm { background-image: url('./flag-icon/flags/4x3/hm.svg'); }\n.flag-hn { background-image: url('./flag-icon/flags/4x3/hn.svg'); }\n.flag-hr { background-image: url('./flag-icon/flags/4x3/hr.svg'); }\n.flag-ht { background-image: url('./flag-icon/flags/4x3/ht.svg'); }\n.flag-hu { background-image: url('./flag-icon/flags/4x3/hu.svg'); }\n.flag-id { background-image: url('./flag-icon/flags/4x3/id.svg'); }\n.flag-ie { background-image: url('./flag-icon/flags/4x3/ie.svg'); }\n.flag-il { background-image: url('./flag-icon/flags/4x3/il.svg'); }\n.flag-im { background-image: url('./flag-icon/flags/4x3/im.svg'); }\n.flag-in { background-image: url('./flag-icon/flags/4x3/in.svg'); }\n.flag-io { background-image: url('./flag-icon/flags/4x3/io.svg'); }\n.flag-iq { background-image: url('./flag-icon/flags/4x3/iq.svg'); }\n.flag-ir { background-image: url('./flag-icon/flags/4x3/ir.svg'); }\n.flag-is { background-image: url('./flag-icon/flags/4x3/is.svg'); }\n.flag-it { background-image: url('./flag-icon/flags/4x3/it.svg'); }\n.flag-je { background-image: url('./flag-icon/flags/4x3/je.svg'); }\n.flag-jm { background-image: url('./flag-icon/flags/4x3/jm.svg'); }\n.flag-jo { background-image: url('./flag-icon/flags/4x3/jo.svg'); }\n.flag-jp { background-image: url('./flag-icon/flags/4x3/jp.svg'); }\n.flag-ke { background-image: url('./flag-icon/flags/4x3/ke.svg'); }\n.flag-kg { background-image: url('./flag-icon/flags/4x3/kg.svg'); }\n.flag-kh { background-image: url('./flag-icon/flags/4x3/kh.svg'); }\n.flag-ki { background-image: url('./flag-icon/flags/4x3/ki.svg'); }\n.flag-km { background-image: url('./flag-icon/flags/4x3/km.svg'); }\n.flag-kn { background-image: url('./flag-icon/flags/4x3/kn.svg'); }\n.flag-kp { background-image: url('./flag-icon/flags/4x3/kp.svg'); }\n.flag-kr { background-image: url('./flag-icon/flags/4x3/kr.svg'); }\n.flag-kw { background-image: url('./flag-icon/flags/4x3/kw.svg'); }\n.flag-ky { background-image: url('./flag-icon/flags/4x3/ky.svg'); }\n.flag-kz { background-image: url('./flag-icon/flags/4x3/kz.svg'); }\n.flag-la { background-image: url('./flag-icon/flags/4x3/la.svg'); }\n.flag-lb { background-image: url('./flag-icon/flags/4x3/lb.svg'); }\n.flag-lc { background-image: url('./flag-icon/flags/4x3/lc.svg'); }\n.flag-li { background-image: url('./flag-icon/flags/4x3/li.svg'); }\n.flag-lk { background-image: url('./flag-icon/flags/4x3/lk.svg'); }\n.flag-lr { background-image: url('./flag-icon/flags/4x3/lr.svg'); }\n.flag-ls { background-image: url('./flag-icon/flags/4x3/ls.svg'); }\n.flag-lt { background-image: url('./flag-icon/flags/4x3/lt.svg'); }\n.flag-lu { background-image: url('./flag-icon/flags/4x3/lu.svg'); }\n.flag-lv { background-image: url('./flag-icon/flags/4x3/lv.svg'); }\n.flag-ly { background-image: url('./flag-icon/flags/4x3/ly.svg'); }\n.flag-ma { background-image: url('./flag-icon/flags/4x3/ma.svg'); }\n.flag-mc { background-image: url('./flag-icon/flags/4x3/mc.svg'); }\n.flag-md { background-image: url('./flag-icon/flags/4x3/md.svg'); }\n.flag-me { background-image: url('./flag-icon/flags/4x3/me.svg'); }\n.flag-mf { background-image: url('./flag-icon/flags/4x3/mf.svg'); }\n.flag-mg { background-image: url('./flag-icon/flags/4x3/mg.svg'); }\n.flag-mh { background-image: url('./flag-icon/flags/4x3/mh.svg'); }\n.flag-mk { background-image: url('./flag-icon/flags/4x3/mk.svg'); }\n.flag-ml { background-image: url('./flag-icon/flags/4x3/ml.svg'); }\n.flag-mm { background-image: url('./flag-icon/flags/4x3/mm.svg'); }\n.flag-mn { background-image: url('./flag-icon/flags/4x3/mn.svg'); }\n.flag-mo { background-image: url('./flag-icon/flags/4x3/mo.svg'); }\n.flag-mp { background-image: url('./flag-icon/flags/4x3/mp.svg'); }\n.flag-mq { background-image: url('./flag-icon/flags/4x3/mq.svg'); }\n.flag-mr { background-image: url('./flag-icon/flags/4x3/mr.svg'); }\n.flag-ms { background-image: url('./flag-icon/flags/4x3/ms.svg'); }\n.flag-mt { background-image: url('./flag-icon/flags/4x3/mt.svg'); }\n.flag-mu { background-image: url('./flag-icon/flags/4x3/mu.svg'); }\n.flag-mv { background-image: url('./flag-icon/flags/4x3/mv.svg'); }\n.flag-mw { background-image: url('./flag-icon/flags/4x3/mw.svg'); }\n.flag-mx { background-image: url('./flag-icon/flags/4x3/mx.svg'); }\n.flag-my { background-image: url('./flag-icon/flags/4x3/my.svg'); }\n.flag-mz { background-image: url('./flag-icon/flags/4x3/mz.svg'); }\n.flag-na { background-image: url('./flag-icon/flags/4x3/na.svg'); }\n.flag-nc { background-image: url('./flag-icon/flags/4x3/nc.svg'); }\n.flag-ne { background-image: url('./flag-icon/flags/4x3/ne.svg'); }\n.flag-nf { background-image: url('./flag-icon/flags/4x3/nf.svg'); }\n.flag-ng { background-image: url('./flag-icon/flags/4x3/ng.svg'); }\n.flag-ni { background-image: url('./flag-icon/flags/4x3/ni.svg'); }\n.flag-nl { background-image: url('./flag-icon/flags/4x3/nl.svg'); }\n.flag-no { background-image: url('./flag-icon/flags/4x3/no.svg'); }\n.flag-np { background-image: url('./flag-icon/flags/4x3/np.svg'); }\n.flag-nr { background-image: url('./flag-icon/flags/4x3/nr.svg'); }\n.flag-nu { background-image: url('./flag-icon/flags/4x3/nu.svg'); }\n.flag-nz { background-image: url('./flag-icon/flags/4x3/nz.svg'); }\n.flag-om { background-image: url('./flag-icon/flags/4x3/om.svg'); }\n.flag-pa { background-image: url('./flag-icon/flags/4x3/pa.svg'); }\n.flag-pe { background-image: url('./flag-icon/flags/4x3/pe.svg'); }\n.flag-pf { background-image: url('./flag-icon/flags/4x3/pf.svg'); }\n.flag-pg { background-image: url('./flag-icon/flags/4x3/pg.svg'); }\n.flag-ph { background-image: url('./flag-icon/flags/4x3/ph.svg'); }\n.flag-pk { background-image: url('./flag-icon/flags/4x3/pk.svg'); }\n.flag-pl { background-image: url('./flag-icon/flags/4x3/pl.svg'); }\n.flag-pm { background-image: url('./flag-icon/flags/4x3/pm.svg'); }\n.flag-pn { background-image: url('./flag-icon/flags/4x3/pn.svg'); }\n.flag-pr { background-image: url('./flag-icon/flags/4x3/pr.svg'); }\n.flag-ps { background-image: url('./flag-icon/flags/4x3/ps.svg'); }\n.flag-pt { background-image: url('./flag-icon/flags/4x3/pt.svg'); }\n.flag-pw { background-image: url('./flag-icon/flags/4x3/pw.svg'); }\n.flag-py { background-image: url('./flag-icon/flags/4x3/py.svg'); }\n.flag-qa { background-image: url('./flag-icon/flags/4x3/qa.svg'); }\n.flag-re { background-image: url('./flag-icon/flags/4x3/re.svg'); }\n.flag-ro { background-image: url('./flag-icon/flags/4x3/ro.svg'); }\n.flag-rs { background-image: url('./flag-icon/flags/4x3/rs.svg'); }\n.flag-ru { background-image: url('./flag-icon/flags/4x3/ru.svg'); }\n.flag-rw { background-image: url('./flag-icon/flags/4x3/rw.svg'); }\n.flag-sa { background-image: url('./flag-icon/flags/4x3/sa.svg'); }\n.flag-sb { background-image: url('./flag-icon/flags/4x3/sb.svg'); }\n.flag-sc { background-image: url('./flag-icon/flags/4x3/sc.svg'); }\n.flag-sd { background-image: url('./flag-icon/flags/4x3/sd.svg'); }\n.flag-se { background-image: url('./flag-icon/flags/4x3/se.svg'); }\n.flag-sg { background-image: url('./flag-icon/flags/4x3/sg.svg'); }\n.flag-sh { background-image: url('./flag-icon/flags/4x3/sh.svg'); }\n.flag-si { background-image: url('./flag-icon/flags/4x3/si.svg'); }\n.flag-sj { background-image: url('./flag-icon/flags/4x3/sj.svg'); }\n.flag-sk { background-image: url('./flag-icon/flags/4x3/sk.svg'); }\n.flag-sl { background-image: url('./flag-icon/flags/4x3/sl.svg'); }\n.flag-sm { background-image: url('./flag-icon/flags/4x3/sm.svg'); }\n.flag-sn { background-image: url('./flag-icon/flags/4x3/sn.svg'); }\n.flag-so { background-image: url('./flag-icon/flags/4x3/so.svg'); }\n.flag-sr { background-image: url('./flag-icon/flags/4x3/sr.svg'); }\n.flag-ss { background-image: url('./flag-icon/flags/4x3/ss.svg'); }\n.flag-st { background-image: url('./flag-icon/flags/4x3/st.svg'); }\n.flag-sv { background-image: url('./flag-icon/flags/4x3/sv.svg'); }\n.flag-sx { background-image: url('./flag-icon/flags/4x3/sx.svg'); }\n.flag-sy { background-image: url('./flag-icon/flags/4x3/sy.svg'); }\n.flag-sz { background-image: url('./flag-icon/flags/4x3/sz.svg'); }\n.flag-tc { background-image: url('./flag-icon/flags/4x3/tc.svg'); }\n.flag-td { background-image: url('./flag-icon/flags/4x3/td.svg'); }\n.flag-tf { background-image: url('./flag-icon/flags/4x3/tf.svg'); }\n.flag-tg { background-image: url('./flag-icon/flags/4x3/tg.svg'); }\n.flag-th { background-image: url('./flag-icon/flags/4x3/th.svg'); }\n.flag-tj { background-image: url('./flag-icon/flags/4x3/tj.svg'); }\n.flag-tk { background-image: url('./flag-icon/flags/4x3/tk.svg'); }\n.flag-tl { background-image: url('./flag-icon/flags/4x3/tl.svg'); }\n.flag-tm { background-image: url('./flag-icon/flags/4x3/tm.svg'); }\n.flag-tn { background-image: url('./flag-icon/flags/4x3/tn.svg'); }\n.flag-to { background-image: url('./flag-icon/flags/4x3/to.svg'); }\n.flag-tr { background-image: url('./flag-icon/flags/4x3/tr.svg'); }\n.flag-tt { background-image: url('./flag-icon/flags/4x3/tt.svg'); }\n.flag-tv { background-image: url('./flag-icon/flags/4x3/tv.svg'); }\n.flag-tw { background-image: url('./flag-icon/flags/4x3/tw.svg'); }\n.flag-tz { background-image: url('./flag-icon/flags/4x3/tz.svg'); }\n.flag-ua { background-image: url('./flag-icon/flags/4x3/ua.svg'); }\n.flag-ug { background-image: url('./flag-icon/flags/4x3/ug.svg'); }\n.flag-um { background-image: url('./flag-icon/flags/4x3/um.svg'); }\n.flag-us { background-image: url('./flag-icon/flags/4x3/us.svg'); }\n.flag-uy { background-image: url('./flag-icon/flags/4x3/uy.svg'); }\n.flag-uz { background-image: url('./flag-icon/flags/4x3/uz.svg'); }\n.flag-va { background-image: url('./flag-icon/flags/4x3/va.svg'); }\n.flag-vc { background-image: url('./flag-icon/flags/4x3/vc.svg'); }\n.flag-ve { background-image: url('./flag-icon/flags/4x3/ve.svg'); }\n.flag-vg { background-image: url('./flag-icon/flags/4x3/vg.svg'); }\n.flag-vi { background-image: url('./flag-icon/flags/4x3/vi.svg'); }\n.flag-vn { background-image: url('./flag-icon/flags/4x3/vn.svg'); }\n.flag-vu { background-image: url('./flag-icon/flags/4x3/vu.svg'); }\n.flag-wf { background-image: url('./flag-icon/flags/4x3/wf.svg'); }\n.flag-ws { background-image: url('./flag-icon/flags/4x3/ws.svg'); }\n.flag-ye { background-image: url('./flag-icon/flags/4x3/ye.svg'); }\n.flag-yt { background-image: url('./flag-icon/flags/4x3/yt.svg'); }\n.flag-za { background-image: url('./flag-icon/flags/4x3/za.svg'); }\n.flag-zm { background-image: url('./flag-icon/flags/4x3/zm.svg'); }\n.flag-zw { background-image: url('./flag-icon/flags/4x3/zw.svg'); }\n\n/* Additional Flags */\n.flag-es-ct { background-image: url('./flag-icon/flags/4x3/es-ct.svg'); }\n.flag-eu { background-image: url('./flag-icon/flags/4x3/eu.svg'); }\n.flag-gb-eng { background-image: url('./flag-icon/flags/4x3/gb-eng.svg'); }\n.flag-gb-nir { background-image: url('./flag-icon/flags/4x3/gb-nir.svg'); }\n.flag-gb-sct { background-image: url('./flag-icon/flags/4x3/gb-sct.svg'); }\n.flag-gb-wls { background-image: url('./flag-icon/flags/4x3/gb-wls.svg'); }\n.flag-un { background-image: url('./flag-icon/flags/4x3/un.svg'); }\n"
  },
  {
    "path": "modules/system/assets/toolbox/elements/timeline/README.md",
    "content": "# Timeline\n\n### Timeline\n\n```html\n<div class=\"element-timeline py-5 px-5\">\n    <ul class=\"timeline\">\n        <li class=\"timeline-item\">\n            <div class=\"timeline-body\">\n                <div class=\"timeline-content\">\n                    <div class=\"d-flex\">\n                        <div class=\"flex-grow-1\">This user changed their email address.</div>\n                        <div class=\"text-muted\">27 minutes ago</div>\n                    </div>\n                </div>\n            </div>\n        </li>\n\n        <li class=\"timeline-item\">\n            <div class=\"timeline-body\">\n                <div class=\"timeline-content\">\n                    <div class=\"d-flex\">\n                        <div class=\"flex-grow-1\">This user registered.</div>\n                        <div class=\"text-muted\">4 days ago</div>\n                    </div>\n                </div>\n            </div>\n        </li>\n    </ul>\n</div>\n```\n"
  },
  {
    "path": "modules/system/assets/toolbox/elements/timeline/timeline.css",
    "content": ".element-timeline {\n    --timeline-color: var(--bs-primary-bg-subtle);\n    --timeline-circle-color: var(--bs-primary);\n    --timeline-circle-size: 16px;\n    --timeline-circle-offset-y: 1px;\n    --timeline-circle-offset-x: 8px;\n\n    .timeline {\n        list-style: none;\n        margin: 0;\n        padding: 0;\n        position: relative;\n\n        &:after {\n            background-color: var(--timeline-color);\n            bottom: 0;\n            content: \"\";\n            left: 0;\n            margin-left: -1px;\n            position: absolute;\n            top: 0;\n            width: 2px;\n        }\n\n        > .timeline-item {\n            margin: 0;\n            padding: 0;\n            position: relative;\n\n            &:before {\n                background-color: var(--timeline-circle-color);\n                border-radius: 50%;\n                content: \"\";\n                height: var(--timeline-circle-size);\n                left: calc(var(--timeline-circle-offset-x) * -1);\n                position: absolute;\n                top: var(--timeline-circle-offset-y);\n                width: var(--timeline-circle-size);\n                z-index: 1;\n            }\n\n            .timeline-body {\n                margin: 0;\n                padding: 0;\n                position: relative;\n            }\n\n            .timeline-content {\n                padding: 0 0 1.5rem 2.5rem;\n            }\n\n            &:last-child .timeline-content {\n                padding-bottom: 0;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/assets/toolbox/toolbox.css",
    "content": "/*\n * Controls\n */\n@import \"controls/context-menu/context-menu.css\";\n@import \"controls/datepicker/datepicker.css\";\n@import \"controls/loader-container/loader-container-control.css\";\n@import \"controls/search-input/search-input-control.css\";\n@import \"controls/custom-select/custom-select-control.css\";\n@import \"controls/tab/tab-control.css\";\n\n/*\n * Elements\n */\n@import \"elements/timeline/timeline.css\";\n@import \"elements/flag/flag.css\";\n"
  },
  {
    "path": "modules/system/assets/toolbox/toolbox.js",
    "content": "import { registerControl } from 'larajax';\nimport ContextMenu from './controls/context-menu/context-menu.js';\nimport LoaderContainerControl from './controls/loader-container/loader-container-control.js';\nimport SearchInputControl from './controls/search-input/search-input-control.js';\nimport CustomSelectControl from './controls/custom-select/custom-select-control.js';\nimport TabControl from './controls/tab/tab-control.js';\nimport DatePickerControl from './controls/datepicker/datepicker.js';\nimport InputPresetEngine from './controls/input/input-preset-engine.js';\nimport InputPreset from './controls/input/input-preset.js';\nimport InputHotkeyControl from './controls/input/input-hotkey-control.js';\nimport InputTriggerControl from './controls/input/input-trigger-control.js';\nimport ChangeMonitorControl from './controls/input/change-monitor-control.js';\n\n// Instances\noc.ContextMenu = ContextMenu;\noc.InputPresetEngine = new InputPresetEngine;\noc.InputPreset = InputPreset;\noc.changeMonitor = ChangeMonitorControl;\n\n// Controls\nregisterControl('loader-container', LoaderContainerControl);\nregisterControl('search-input', SearchInputControl);\nregisterControl('custom-select', CustomSelectControl);\nregisterControl('tab', TabControl);\nregisterControl('datepicker', DatePickerControl);\n\n// Scripts\nregisterControl('input-hotkey', InputHotkeyControl);\nregisterControl('input-trigger', InputTriggerControl);\nregisterControl('change-monitor', ChangeMonitorControl);\n"
  },
  {
    "path": "modules/system/assets/vendor/bootstrap/bootstrap-lite.css",
    "content": "﻿:root,[data-bs-theme=light]{--bs-blue: #0090c0;--bs-indigo: #6a6cf7;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #ff3e1d;--bs-orange: #e67e22;--bs-yellow: #f0ad4e;--bs-green: #86cB43;--bs-teal: #6bc48d;--bs-cyan: #5bc0de;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #6a6cf7;--bs-secondary: #6c757d;--bs-success: #86cB43;--bs-info: #5bc0de;--bs-warning: #e67e22;--bs-danger: #ff3e1d;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 106, 108, 247;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 134, 203, 67;--bs-info-rgb: 91, 192, 222;--bs-warning-rgb: 230, 126, 34;--bs-danger-rgb: 255, 62, 29;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: rgb(42.4, 43.2, 98.8);--bs-secondary-text-emphasis: rgb(43.2, 46.8, 50);--bs-success-text-emphasis: rgb(53.6, 81.2, 26.8);--bs-info-text-emphasis: rgb(36.4, 76.8, 88.8);--bs-warning-text-emphasis: rgb(92, 50.4, 13.6);--bs-danger-text-emphasis: rgb(102, 24.8, 11.6);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(225.2, 225.6, 253.4);--bs-secondary-bg-subtle: rgb(225.6, 227.4, 229);--bs-success-bg-subtle: rgb(230.8, 244.6, 217.4);--bs-info-bg-subtle: rgb(222.2, 242.4, 248.4);--bs-warning-bg-subtle: rgb(250, 229.2, 210.8);--bs-danger-bg-subtle: rgb(255, 216.4, 209.8);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(195.4, 196.2, 251.8);--bs-secondary-border-subtle: rgb(196.2, 199.8, 203);--bs-success-border-subtle: rgb(206.6, 234.2, 179.8);--bs-info-border-subtle: rgb(189.4, 229.8, 241.8);--bs-warning-border-subtle: rgb(245, 203.4, 166.6);--bs-danger-border-subtle: rgb(255, 177.8, 164.6);--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.428571429;--bs-body-color: #333;--bs-body-color-rgb: 51, 51, 51;--bs-body-bg: #fafbfd;--bs-body-bg-rgb: 250, 251, 253;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(51, 51, 51, 0.75);--bs-secondary-color-rgb: 51, 51, 51;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(51, 51, 51, 0.5);--bs-tertiary-color-rgb: 51, 51, 51;--bs-tertiary-bg: #f0f4f8;--bs-tertiary-bg-rgb: 240, 244, 248;--bs-heading-color: #35425b;--bs-link-color: #3498db;--bs-link-color-rgb: 52, 152, 219;--bs-link-decoration: none;--bs-link-hover-color: rgb(41.6, 121.6, 175.2);--bs-link-hover-color-rgb: 42, 122, 175;--bs-link-hover-decoration: underline;--bs-code-color: #d63384;--bs-highlight-color: #333;--bs-highlight-bg: rgb(252, 238.6, 219.6);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.3rem;--bs-border-radius-sm: 0.25rem;--bs-border-radius-lg: 0.35rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(53, 66, 91, 0.1);--bs-form-valid-color: #86cB43;--bs-form-valid-border-color: #86cB43;--bs-form-invalid-color: #ff3e1d;--bs-form-invalid-border-color: #ff3e1d}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #202124;--bs-body-bg-rgb: 32, 33, 36;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(165.6, 166.8, 250.2);--bs-secondary-text-emphasis: rgb(166.8, 172.2, 177);--bs-success-text-emphasis: rgb(182.4, 223.8, 142.2);--bs-info-text-emphasis: rgb(156.6, 217.2, 235.2);--bs-warning-text-emphasis: rgb(240, 177.6, 122.4);--bs-danger-text-emphasis: rgb(255, 139.2, 119.4);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(21.2, 21.6, 49.4);--bs-secondary-bg-subtle: rgb(21.6, 23.4, 25);--bs-success-bg-subtle: rgb(26.8, 40.6, 13.4);--bs-info-bg-subtle: rgb(18.2, 38.4, 44.4);--bs-warning-bg-subtle: rgb(46, 25.2, 6.8);--bs-danger-bg-subtle: rgb(51, 12.4, 5.8);--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(63.6, 64.8, 148.2);--bs-secondary-border-subtle: rgb(64.8, 70.2, 75);--bs-success-border-subtle: rgb(80.4, 121.8, 40.2);--bs-info-border-subtle: rgb(54.6, 115.2, 133.2);--bs-warning-border-subtle: rgb(138, 75.6, 20.4);--bs-danger-border-subtle: rgb(153, 37.2, 17.4);--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: white;--bs-link-color: rgb(165.6, 166.8, 250.2);--bs-link-hover-color: rgb(183.48, 184.44, 251.16);--bs-link-color-rgb: 166, 167, 250;--bs-link-hover-color-rgb: 183, 184, 251;--bs-code-color: rgb(230.4, 132.6, 181.2);--bs-highlight-color: #dee2e6;--bs-highlight-bg: rgb(96, 69.2, 31.2);--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(182.4, 223.8, 142.2);--bs-form-valid-border-color: rgb(182.4, 223.8, 142.2);--bs-form-invalid-color: rgb(255, 139.2, 119.4);--bs-form-invalid-border-color: rgb(255, 139.2, 119.4)}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:none}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb);text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;line-height:inherit;font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-weight:300;line-height:1.2;font-size:calc(1.625rem + 4.5vw)}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-weight:300;line-height:1.2;font-size:calc(1.575rem + 3.9vw)}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-weight:300;line-height:1.2;font-size:calc(1.525rem + 3.3vw)}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-weight:300;line-height:1.2;font-size:calc(1.475rem + 2.7vw)}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-weight:300;line-height:1.2;font-size:calc(1.425rem + 2.1vw)}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-weight:300;line-height:1.2;font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}"
  },
  {
    "path": "modules/system/assets/vendor/bootstrap/bootstrap.css",
    "content": "﻿:root,[data-bs-theme=light]{--bs-blue: #0090c0;--bs-indigo: #6a6cf7;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #ff3e1d;--bs-orange: #e67e22;--bs-yellow: #f0ad4e;--bs-green: #86cB43;--bs-teal: #6bc48d;--bs-cyan: #5bc0de;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #6a6cf7;--bs-secondary: #6c757d;--bs-success: #86cB43;--bs-info: #5bc0de;--bs-warning: #e67e22;--bs-danger: #ff3e1d;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 106, 108, 247;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 134, 203, 67;--bs-info-rgb: 91, 192, 222;--bs-warning-rgb: 230, 126, 34;--bs-danger-rgb: 255, 62, 29;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: rgb(42.4, 43.2, 98.8);--bs-secondary-text-emphasis: rgb(43.2, 46.8, 50);--bs-success-text-emphasis: rgb(53.6, 81.2, 26.8);--bs-info-text-emphasis: rgb(36.4, 76.8, 88.8);--bs-warning-text-emphasis: rgb(92, 50.4, 13.6);--bs-danger-text-emphasis: rgb(102, 24.8, 11.6);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(225.2, 225.6, 253.4);--bs-secondary-bg-subtle: rgb(225.6, 227.4, 229);--bs-success-bg-subtle: rgb(230.8, 244.6, 217.4);--bs-info-bg-subtle: rgb(222.2, 242.4, 248.4);--bs-warning-bg-subtle: rgb(250, 229.2, 210.8);--bs-danger-bg-subtle: rgb(255, 216.4, 209.8);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(195.4, 196.2, 251.8);--bs-secondary-border-subtle: rgb(196.2, 199.8, 203);--bs-success-border-subtle: rgb(206.6, 234.2, 179.8);--bs-info-border-subtle: rgb(189.4, 229.8, 241.8);--bs-warning-border-subtle: rgb(245, 203.4, 166.6);--bs-danger-border-subtle: rgb(255, 177.8, 164.6);--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.428571429;--bs-body-color: #333;--bs-body-color-rgb: 51, 51, 51;--bs-body-bg: #fafbfd;--bs-body-bg-rgb: 250, 251, 253;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(51, 51, 51, 0.75);--bs-secondary-color-rgb: 51, 51, 51;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(51, 51, 51, 0.5);--bs-tertiary-color-rgb: 51, 51, 51;--bs-tertiary-bg: #f0f4f8;--bs-tertiary-bg-rgb: 240, 244, 248;--bs-heading-color: #35425b;--bs-link-color: #3498db;--bs-link-color-rgb: 52, 152, 219;--bs-link-decoration: none;--bs-link-hover-color: rgb(41.6, 121.6, 175.2);--bs-link-hover-color-rgb: 42, 122, 175;--bs-link-hover-decoration: underline;--bs-code-color: #d63384;--bs-highlight-color: #333;--bs-highlight-bg: rgb(252, 238.6, 219.6);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.3rem;--bs-border-radius-sm: 0.25rem;--bs-border-radius-lg: 0.35rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(53, 66, 91, 0.1);--bs-form-valid-color: #86cB43;--bs-form-valid-border-color: #86cB43;--bs-form-invalid-color: #ff3e1d;--bs-form-invalid-border-color: #ff3e1d}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #202124;--bs-body-bg-rgb: 32, 33, 36;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(165.6, 166.8, 250.2);--bs-secondary-text-emphasis: rgb(166.8, 172.2, 177);--bs-success-text-emphasis: rgb(182.4, 223.8, 142.2);--bs-info-text-emphasis: rgb(156.6, 217.2, 235.2);--bs-warning-text-emphasis: rgb(240, 177.6, 122.4);--bs-danger-text-emphasis: rgb(255, 139.2, 119.4);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(21.2, 21.6, 49.4);--bs-secondary-bg-subtle: rgb(21.6, 23.4, 25);--bs-success-bg-subtle: rgb(26.8, 40.6, 13.4);--bs-info-bg-subtle: rgb(18.2, 38.4, 44.4);--bs-warning-bg-subtle: rgb(46, 25.2, 6.8);--bs-danger-bg-subtle: rgb(51, 12.4, 5.8);--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(63.6, 64.8, 148.2);--bs-secondary-border-subtle: rgb(64.8, 70.2, 75);--bs-success-border-subtle: rgb(80.4, 121.8, 40.2);--bs-info-border-subtle: rgb(54.6, 115.2, 133.2);--bs-warning-border-subtle: rgb(138, 75.6, 20.4);--bs-danger-border-subtle: rgb(153, 37.2, 17.4);--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: white;--bs-link-color: rgb(165.6, 166.8, 250.2);--bs-link-hover-color: rgb(183.48, 184.44, 251.16);--bs-link-color-rgb: 166, 167, 250;--bs-link-hover-color-rgb: 183, 184, 251;--bs-code-color: rgb(230.4, 132.6, 181.2);--bs-highlight-color: #dee2e6;--bs-highlight-bg: rgb(96, 69.2, 31.2);--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(182.4, 223.8, 142.2);--bs-form-valid-border-color: rgb(182.4, 223.8, 142.2);--bs-form-invalid-color: rgb(255, 139.2, 119.4);--bs-form-invalid-border-color: rgb(255, 139.2, 119.4)}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:none}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb);text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;line-height:inherit;font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-weight:300;line-height:1.2;font-size:calc(1.625rem + 4.5vw)}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-weight:300;line-height:1.2;font-size:calc(1.575rem + 3.9vw)}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-weight:300;line-height:1.2;font-size:calc(1.525rem + 3.3vw)}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-weight:300;line-height:1.2;font-size:calc(1.475rem + 2.7vw)}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-weight:300;line-height:1.2;font-size:calc(1.425rem + 2.1vw)}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-weight:300;line-height:1.2;font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: rgb(225.2, 225.6, 253.4);--bs-table-border-color: rgb(180.16, 180.48, 202.72);--bs-table-striped-bg: rgb(213.94, 214.32, 240.73);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(202.68, 203.04, 228.06);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(208.31, 208.68, 234.395);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: rgb(225.6, 227.4, 229);--bs-table-border-color: rgb(180.48, 181.92, 183.2);--bs-table-striped-bg: rgb(214.32, 216.03, 217.55);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(203.04, 204.66, 206.1);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(208.68, 210.345, 211.825);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: rgb(230.8, 244.6, 217.4);--bs-table-border-color: rgb(184.64, 195.68, 173.92);--bs-table-striped-bg: rgb(219.26, 232.37, 206.53);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(207.72, 220.14, 195.66);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(213.49, 226.255, 201.095);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: rgb(222.2, 242.4, 248.4);--bs-table-border-color: rgb(177.76, 193.92, 198.72);--bs-table-striped-bg: rgb(211.09, 230.28, 235.98);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(199.98, 218.16, 223.56);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(205.535, 224.22, 229.77);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: rgb(250, 229.2, 210.8);--bs-table-border-color: rgb(200, 183.36, 168.64);--bs-table-striped-bg: rgb(237.5, 217.74, 200.26);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(225, 206.28, 189.72);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(231.25, 212.01, 194.99);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: rgb(255, 216.4, 209.8);--bs-table-border-color: rgb(204, 173.12, 167.84);--bs-table-striped-bg: rgb(242.25, 205.58, 199.31);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 194.76, 188.82);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 200.17, 194.065);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: rgb(198.4, 199.2, 200);--bs-table-striped-bg: rgb(235.6, 236.55, 237.5);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 224.1, 225);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 230.325, 231.25);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: rgb(77.4, 80.6, 83.8);--bs-table-striped-bg: rgb(44.1, 47.9, 51.7);--bs-table-striped-color: #fff;--bs-table-active-bg: rgb(55.2, 58.8, 62.4);--bs-table-active-color: #fff;--bs-table-hover-bg: rgb(49.65, 53.35, 57.05);--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.385rem}.col-form-label{padding-top:calc(0.525rem + var(--bs-border-width));padding-bottom:calc(0.525rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.428571429}.col-form-label-lg{padding-top:calc(0.5rem + var(--bs-border-width));padding-bottom:calc(0.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--bs-border-width));padding-bottom:calc(0.25rem + var(--bs-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.525rem 1rem;font-size:1rem;font-weight:400;line-height:1.428571429;color:var(--bs-body-color);appearance:none;background-color:var(--oc-form-control-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--oc-form-control-bg);border-color:rgb(180.5,181.5,251);outline:0;box-shadow:0 0 0 .25rem rgba(53,66,91,.1)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.428571429em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-tertiary-color);opacity:1}.form-control:disabled{background-color:var(--oc-form-control-disabled-bg);opacity:1}.form-control::file-selector-button{padding:.525rem 1rem;margin:-0.525rem -1rem;margin-inline-end:1rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.525rem 0;margin-bottom:0;line-height:1.428571429;color:var(--bs-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.428571429em + 0.5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.428571429em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.428571429em + 1.05rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.428571429em + 0.5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.428571429em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.428571429em + 1.05rem + calc(var(--bs-border-width) * 2));padding:.525rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.428571429em + 0.5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.428571429em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.525rem 3rem .525rem 1rem;font-size:1rem;font-weight:400;line-height:1.428571429;color:var(--bs-body-color);appearance:none;background-color:var(--oc-form-control-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right 1rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:rgb(180.5,181.5,251);outline:0;box-shadow:0 0 0 .25rem rgba(53,66,91,.1)}.form-select[multiple],.form-select[size]:not([size=\"1\"]){padding-right:1rem;background-image:none}.form-select:disabled{background-color:var(--oc-form-control-disabled-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\")}.form-check{display:block;min-height:1.428571429rem;padding-left:1.643em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.643em}.form-check-reverse{padding-right:1.643em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.643em;margin-left:0}.form-check-input{--bs-form-check-bg: var(--oc-form-control-bg);flex-shrink:0;width:1.143em;height:1.143em;margin-top:0.1427857145em;vertical-align:top;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:rgb(180.5,181.5,251);outline:0;box-shadow:0 0 0 .25rem rgba(53,66,91,.1)}.form-check-input:checked{background-color:#6a6cf7;border-color:#6a6cf7}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-input[type=checkbox]:indeterminate{background-color:#6a6cf7;border-color:#6a6cf7;--bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.7em}.form-switch .form-check-input{--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");width:2.2em;margin-left:-2.7em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2.2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%28180.5, 181.5, 251%29'/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.form-switch.form-check-reverse{padding-right:2.7em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.7em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fafbfd,0 0 0 .25rem rgba(53,66,91,.1)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fafbfd,0 0 0 .25rem rgba(53,66,91,.1)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;background-color:#6a6cf7;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:rgb(210.3,210.9,252.6)}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#6a6cf7;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:rgb(210.3,210.9,252.6)}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;max-width:100%;height:100%;padding:1rem 1rem;overflow:hidden;color:rgba(var(--bs-body-color-rgb), 0.65);text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem 1rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem;padding-left:1rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>textarea:focus~label::after,.form-floating>textarea:not(:placeholder-shown)~label::after{position:absolute;inset:1rem .5rem;z-index:-1;height:1.5em;content:\"\";background-color:var(--oc-form-control-bg);border-radius:var(--bs-border-radius)}.form-floating>textarea:disabled~label::after{background-color:var(--oc-form-control-disabled-bg)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.525rem 1rem;font-size:1rem;font-weight:400;line-height:1.428571429;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:4rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(-1*var(--bs-border-width));border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.428571429em + 1.05rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2386cB43' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.3571428573em + 0.2625rem) center;background-size:calc(0.7142857145em + 0.525rem) calc(0.7142857145em + 0.525rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.428571429em + 1.05rem);background-position:top calc(0.3571428573em + 0.2625rem) right calc(0.3571428573em + 0.2625rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size=\"1\"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size=\"1\"]{--bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2386cB43' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e\");padding-right:5.5rem;background-position:right 1rem center,center right 3rem;background-size:16px 12px,calc(0.7142857145em + 0.525rem) calc(0.7142857145em + 0.525rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.428571429em + 1.05rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.428571429em + 1.05rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff3e1d'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff3e1d' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.3571428573em + 0.2625rem) center;background-size:calc(0.7142857145em + 0.525rem) calc(0.7142857145em + 0.525rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.428571429em + 1.05rem);background-position:top calc(0.3571428573em + 0.2625rem) right calc(0.3571428573em + 0.2625rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size=\"1\"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size=\"1\"]{--bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff3e1d'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff3e1d' stroke='none'/%3e%3c/svg%3e\");padding-right:5.5rem;background-position:right 1rem center,center right 3rem;background-size:16px 12px,calc(0.7142857145em + 0.525rem) calc(0.7142857145em + 0.525rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.428571429em + 1.05rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 1.25rem;--bs-btn-padding-y: 0.6rem;--bs-btn-font-family: ;--bs-btn-font-size:0.95rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.428571429;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;vertical-align:middle;cursor:pointer;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);text-decoration:none;background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color: #000;--bs-btn-bg: #6a6cf7;--bs-btn-border-color: #6a6cf7;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(128.35, 130.05, 248.2);--bs-btn-hover-border-color: rgb(120.9, 122.7, 247.8);--bs-btn-focus-shadow-rgb: 90, 92, 210;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(135.8, 137.4, 248.6);--bs-btn-active-border-color: rgb(120.9, 122.7, 247.8);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #6a6cf7;--bs-btn-disabled-border-color: #6a6cf7}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(91.8, 99.45, 106.25);--bs-btn-hover-border-color: rgb(86.4, 93.6, 100);--bs-btn-focus-shadow-rgb: 130, 138, 145;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(86.4, 93.6, 100);--bs-btn-active-border-color: rgb(81, 87.75, 93.75);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #000;--bs-btn-bg: #86cB43;--bs-btn-border-color: #86cB43;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(152.15, 210.8, 95.2);--bs-btn-hover-border-color: rgb(146.1, 208.2, 85.8);--bs-btn-focus-shadow-rgb: 114, 173, 57;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(158.2, 213.4, 104.6);--bs-btn-active-border-color: rgb(146.1, 208.2, 85.8);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #86cB43;--bs-btn-disabled-border-color: #86cB43}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #5bc0de;--bs-btn-border-color: #5bc0de;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(115.6, 201.45, 226.95);--bs-btn-hover-border-color: rgb(107.4, 198.3, 225.3);--bs-btn-focus-shadow-rgb: 77, 163, 189;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(123.8, 204.6, 228.6);--bs-btn-active-border-color: rgb(107.4, 198.3, 225.3);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #5bc0de;--bs-btn-disabled-border-color: #5bc0de}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #e67e22;--bs-btn-border-color: #e67e22;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(233.75, 145.35, 67.15);--bs-btn-hover-border-color: rgb(232.5, 138.9, 56.1);--bs-btn-focus-shadow-rgb: 196, 107, 29;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(235, 151.8, 78.2);--bs-btn-active-border-color: rgb(232.5, 138.9, 56.1);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #e67e22;--bs-btn-disabled-border-color: #e67e22}.btn-danger{--bs-btn-color: #000;--bs-btn-bg: #ff3e1d;--bs-btn-border-color: #ff3e1d;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(255, 90.95, 62.9);--bs-btn-hover-border-color: rgb(255, 81.3, 51.6);--bs-btn-focus-shadow-rgb: 217, 53, 25;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(255, 100.6, 74.2);--bs-btn-active-border-color: rgb(255, 81.3, 51.6);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ff3e1d;--bs-btn-disabled-border-color: #ff3e1d}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(210.8, 211.65, 212.5);--bs-btn-hover-border-color: rgb(198.4, 199.2, 200);--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(198.4, 199.2, 200);--bs-btn-active-border-color: rgb(186, 186.75, 187.5);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(66.3, 69.7, 73.1);--bs-btn-hover-border-color: rgb(55.2, 58.8, 62.4);--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(77.4, 80.6, 83.8);--bs-btn-active-border-color: rgb(55.2, 58.8, 62.4);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-primary{--bs-btn-color: #6a6cf7;--bs-btn-border-color: #6a6cf7;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #6a6cf7;--bs-btn-hover-border-color: #6a6cf7;--bs-btn-focus-shadow-rgb: 106, 108, 247;--bs-btn-active-color: #000;--bs-btn-active-bg: #6a6cf7;--bs-btn-active-border-color: #6a6cf7;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #6a6cf7;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6a6cf7;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108, 117, 125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #86cB43;--bs-btn-border-color: #86cB43;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #86cB43;--bs-btn-hover-border-color: #86cB43;--bs-btn-focus-shadow-rgb: 134, 203, 67;--bs-btn-active-color: #000;--bs-btn-active-bg: #86cB43;--bs-btn-active-border-color: #86cB43;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #86cB43;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #86cB43;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #5bc0de;--bs-btn-border-color: #5bc0de;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #5bc0de;--bs-btn-hover-border-color: #5bc0de;--bs-btn-focus-shadow-rgb: 91, 192, 222;--bs-btn-active-color: #000;--bs-btn-active-bg: #5bc0de;--bs-btn-active-border-color: #5bc0de;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #5bc0de;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #5bc0de;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #e67e22;--bs-btn-border-color: #e67e22;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #e67e22;--bs-btn-hover-border-color: #e67e22;--bs-btn-focus-shadow-rgb: 230, 126, 34;--bs-btn-active-color: #000;--bs-btn-active-bg: #e67e22;--bs-btn-active-border-color: #e67e22;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #e67e22;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #e67e22;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #ff3e1d;--bs-btn-border-color: #ff3e1d;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ff3e1d;--bs-btn-hover-border-color: #ff3e1d;--bs-btn-focus-shadow-rgb: 255, 62, 29;--bs-btn-active-color: #000;--bs-btn-active-bg: #ff3e1d;--bs-btn-active-border-color: #ff3e1d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff3e1d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff3e1d;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 44, 129, 186;text-decoration:none}.btn-link:hover,.btn-link:focus-visible{text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.4rem;--bs-btn-padding-x: 0.85rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: var(--bs-box-shadow);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #6a6cf7;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);text-decoration:none;background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #6a6cf7;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(-1*var(--bs-border-width))}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.9375rem;padding-left:.9375rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.6375rem;padding-left:.6375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(-1*var(--bs-border-width))}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:nth-child(n+3),.btn-group-vertical>:not(.btn-check)+.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color);text-decoration:none}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(53,66,91,.1)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #6a6cf7}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-grow:1;flex-basis:0;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child)>.card-img-top,.card-group>.card:not(:last-child)>.card-header{border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-img-bottom,.card-group>.card:not(:last-child)>.card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child)>.card-img-top,.card-group>.card:not(:first-child)>.card-header{border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-img-bottom,.card-group>.card:not(:first-child)>.card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='rgb%2842.4, 43.2, 98.8%29' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(53, 66, 91, 0.1);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:\"\";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28165.6, 166.8, 250.2%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\");--bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28165.6, 166.8, 250.2%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(53, 66, 91, 0.1);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #6a6cf7;--bs-pagination-active-border-color: #6a6cf7;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);text-decoration:none;background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(-1*var(--bs-border-width))}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #6a6cf7;--bs-progress-bar-transition: width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #6a6cf7;--bs-list-group-active-border-color: #6a6cf7;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, \".\") \". \";counter-increment:section}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:not(.active):hover,.list-group-item-action:not(.active):focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:not(.active):active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e\");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(53, 66, 91, 0.1);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;filter:var(--bs-btn-close-filter);border:0;border-radius:.3rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%)}:root,[data-bs-theme=light]{--bs-btn-close-filter: }[data-bs-theme=dark]{--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: var(--bs-body-color);--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: var(--bs-box-shadow-sm);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.428571429;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px);transition:transform .3s ease-out}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin-top:calc(-0.5*var(--bs-modal-header-padding-y));margin-right:calc(-0.5*var(--bs-modal-header-padding-x));margin-bottom:calc(-0.5*var(--bs-modal-header-padding-y));margin-left:auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: white;--bs-tooltip-bg: #536061;--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.428571429;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:\"\";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: var(--bs-box-shadow);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: #35425b;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.428571429;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:\"\";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:\"\";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;filter:var(--bs-carousel-control-icon-filter);border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\")*/}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\")*/}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:var(--bs-carousel-caption-color);text-align:center}.carousel-dark{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:root,[data-bs-theme=light]{--bs-carousel-indicator-active-bg: #fff;--bs-carousel-caption-color: #fff;--bs-carousel-control-icon-filter: }[data-bs-theme=dark]{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}.spinner-grow,.spinner-border{display:inline-block;flex-shrink:0;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.428571429}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y));margin-left:auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:\"\"}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:\"\"}.text-bg-primary{color:#000 !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#000 !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#000 !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(136, 137, 249, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(136, 137, 249, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(158, 213, 105, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(158, 213, 105, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(124, 205, 229, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(124, 205, 229, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(235, 152, 78, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(235, 152, 78, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(255, 101, 74, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 101, 74, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--bs-box-shadow) !important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.428571429 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:hsla(0,0%,100%,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.form-switch .form-check-label{position:relative;top:1px}.form-switch .form-check-input{height:1.4em}.btn-close{border-radius:20px}"
  },
  {
    "path": "modules/system/assets/vendor/bootstrap/bootstrap.esm.js",
    "content": "var Cn=Object.defineProperty;var Nn=(i,t)=>{for(var e in t)Cn(i,e,{get:t[e],enumerable:!0})};var Pe={};Nn(Pe,{afterMain:()=>nr,afterRead:()=>er,afterWrite:()=>ar,applyStyles:()=>Ht,arrow:()=>Ce,auto:()=>re,basePlacements:()=>it,beforeMain:()=>ir,beforeRead:()=>Ji,beforeWrite:()=>or,bottom:()=>L,clippingParents:()=>ni,computeStyles:()=>Bt,createPopper:()=>de,createPopperBase:()=>_r,createPopperLite:()=>gr,detectOverflow:()=>B,end:()=>ct,eventListeners:()=>jt,flip:()=>Le,hide:()=>xe,left:()=>C,main:()=>rr,modifierPhases:()=>si,offset:()=>$e,placements:()=>oe,popper:()=>yt,popperGenerator:()=>xt,popperOffsets:()=>Yt,preventOverflow:()=>Ie,read:()=>tr,reference:()=>oi,right:()=>D,start:()=>et,top:()=>w,variationPlacements:()=>Oe,viewport:()=>ne,write:()=>sr});var w=\"top\",L=\"bottom\",D=\"right\",C=\"left\",re=\"auto\",it=[w,L,D,C],et=\"start\",ct=\"end\",ni=\"clippingParents\",ne=\"viewport\",yt=\"popper\",oi=\"reference\",Oe=it.reduce(function(i,t){return i.concat([t+\"-\"+et,t+\"-\"+ct])},[]),oe=[].concat(it,[re]).reduce(function(i,t){return i.concat([t,t+\"-\"+et,t+\"-\"+ct])},[]),Ji=\"beforeRead\",tr=\"read\",er=\"afterRead\",ir=\"beforeMain\",rr=\"main\",nr=\"afterMain\",or=\"beforeWrite\",sr=\"write\",ar=\"afterWrite\",si=[Ji,tr,er,ir,rr,nr,or,sr,ar];function P(i){return i?(i.nodeName||\"\").toLowerCase():null}function y(i){if(i==null)return window;if(i.toString()!==\"[object Window]\"){var t=i.ownerDocument;return t&&t.defaultView||window}return i}function Y(i){var t=y(i).Element;return i instanceof t||i instanceof Element}function $(i){var t=y(i).HTMLElement;return i instanceof t||i instanceof HTMLElement}function Vt(i){if(typeof ShadowRoot>\"u\")return!1;var t=y(i).ShadowRoot;return i instanceof t||i instanceof ShadowRoot}function Sn(i){var t=i.state;Object.keys(t.elements).forEach(function(e){var r=t.styles[e]||{},n=t.attributes[e]||{},o=t.elements[e];!$(o)||!P(o)||(Object.assign(o.style,r),Object.keys(n).forEach(function(s){var a=n[s];a===!1?o.removeAttribute(s):o.setAttribute(s,a===!0?\"\":a)}))})}function Dn(i){var t=i.state,e={popper:{position:t.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(t.elements.popper.style,e.popper),t.styles=e,t.elements.arrow&&Object.assign(t.elements.arrow.style,e.arrow),function(){Object.keys(t.elements).forEach(function(r){var n=t.elements[r],o=t.attributes[r]||{},s=Object.keys(t.styles.hasOwnProperty(r)?t.styles[r]:e[r]),a=s.reduce(function(c,f){return c[f]=\"\",c},{});!$(n)||!P(n)||(Object.assign(n.style,a),Object.keys(o).forEach(function(c){n.removeAttribute(c)}))})}}var Ht={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:Sn,effect:Dn,requires:[\"computeStyles\"]};function M(i){return i.split(\"-\")[0]}var J=Math.max,wt=Math.min,rt=Math.round;function Wt(){var i=navigator.userAgentData;return i!=null&&i.brands&&Array.isArray(i.brands)?i.brands.map(function(t){return t.brand+\"/\"+t.version}).join(\" \"):navigator.userAgent}function se(){return!/^((?!chrome|android).)*safari/i.test(Wt())}function U(i,t,e){t===void 0&&(t=!1),e===void 0&&(e=!1);var r=i.getBoundingClientRect(),n=1,o=1;t&&$(i)&&(n=i.offsetWidth>0&&rt(r.width)/i.offsetWidth||1,o=i.offsetHeight>0&&rt(r.height)/i.offsetHeight||1);var s=Y(i)?y(i):window,a=s.visualViewport,c=!se()&&e,f=(r.left+(c&&a?a.offsetLeft:0))/n,u=(r.top+(c&&a?a.offsetTop:0))/o,h=r.width/n,m=r.height/o;return{width:h,height:m,top:u,right:f+h,bottom:u+m,left:f,x:f,y:u}}function Ot(i){var t=U(i),e=i.offsetWidth,r=i.offsetHeight;return Math.abs(t.width-e)<=1&&(e=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:i.offsetLeft,y:i.offsetTop,width:e,height:r}}function ae(i,t){var e=t.getRootNode&&t.getRootNode();if(i.contains(t))return!0;if(e&&Vt(e)){var r=t;do{if(r&&i.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function W(i){return y(i).getComputedStyle(i)}function ai(i){return[\"table\",\"td\",\"th\"].indexOf(P(i))>=0}function k(i){return((Y(i)?i.ownerDocument:i.document)||window.document).documentElement}function nt(i){return P(i)===\"html\"?i:i.assignedSlot||i.parentNode||(Vt(i)?i.host:null)||k(i)}function lr(i){return!$(i)||W(i).position===\"fixed\"?null:i.offsetParent}function Ln(i){var t=/firefox/i.test(Wt()),e=/Trident/i.test(Wt());if(e&&$(i)){var r=W(i);if(r.position===\"fixed\")return null}var n=nt(i);for(Vt(n)&&(n=n.host);$(n)&&[\"html\",\"body\"].indexOf(P(n))<0;){var o=W(n);if(o.transform!==\"none\"||o.perspective!==\"none\"||o.contain===\"paint\"||[\"transform\",\"perspective\"].indexOf(o.willChange)!==-1||t&&o.willChange===\"filter\"||t&&o.filter&&o.filter!==\"none\")return n;n=n.parentNode}return null}function tt(i){for(var t=y(i),e=lr(i);e&&ai(e)&&W(e).position===\"static\";)e=lr(e);return e&&(P(e)===\"html\"||P(e)===\"body\"&&W(e).position===\"static\")?t:e||Ln(i)||t}function Ct(i){return[\"top\",\"bottom\"].indexOf(i)>=0?\"x\":\"y\"}function Nt(i,t,e){return J(i,wt(t,e))}function cr(i,t,e){var r=Nt(i,t,e);return r>e?e:r}function le(){return{top:0,right:0,bottom:0,left:0}}function ce(i){return Object.assign({},le(),i)}function ue(i,t){return t.reduce(function(e,r){return e[r]=i,e},{})}var xn=function(t,e){return t=typeof t==\"function\"?t(Object.assign({},e.rects,{placement:e.placement})):t,ce(typeof t!=\"number\"?t:ue(t,it))};function $n(i){var t,e=i.state,r=i.name,n=i.options,o=e.elements.arrow,s=e.modifiersData.popperOffsets,a=M(e.placement),c=Ct(a),f=[C,D].indexOf(a)>=0,u=f?\"height\":\"width\";if(!(!o||!s)){var h=xn(n.padding,e),m=Ot(o),p=c===\"y\"?w:C,A=c===\"y\"?L:D,_=e.rects.reference[u]+e.rects.reference[c]-s[c]-e.rects.popper[u],E=s[c]-e.rects.reference[c],T=tt(o),N=T?c===\"y\"?T.clientHeight||0:T.clientWidth||0:0,S=_/2-E/2,g=h[p],v=N-m[u]-h[A],b=N/2-m[u]/2+S,O=Nt(g,b,v),R=c;e.modifiersData[r]=(t={},t[R]=O,t.centerOffset=O-b,t)}}function In(i){var t=i.state,e=i.options,r=e.element,n=r===void 0?\"[data-popper-arrow]\":r;n!=null&&(typeof n==\"string\"&&(n=t.elements.popper.querySelector(n),!n)||ae(t.elements.popper,n)&&(t.elements.arrow=n))}var Ce={name:\"arrow\",enabled:!0,phase:\"main\",fn:$n,effect:In,requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function G(i){return i.split(\"-\")[1]}var Pn={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function Mn(i,t){var e=i.x,r=i.y,n=t.devicePixelRatio||1;return{x:rt(e*n)/n||0,y:rt(r*n)/n||0}}function ur(i){var t,e=i.popper,r=i.popperRect,n=i.placement,o=i.variation,s=i.offsets,a=i.position,c=i.gpuAcceleration,f=i.adaptive,u=i.roundOffsets,h=i.isFixed,m=s.x,p=m===void 0?0:m,A=s.y,_=A===void 0?0:A,E=typeof u==\"function\"?u({x:p,y:_}):{x:p,y:_};p=E.x,_=E.y;var T=s.hasOwnProperty(\"x\"),N=s.hasOwnProperty(\"y\"),S=C,g=w,v=window;if(f){var b=tt(e),O=\"clientHeight\",R=\"clientWidth\";if(b===y(e)&&(b=k(e),W(b).position!==\"static\"&&a===\"absolute\"&&(O=\"scrollHeight\",R=\"scrollWidth\")),b=b,n===w||(n===C||n===D)&&o===ct){g=L;var I=h&&b===v&&v.visualViewport?v.visualViewport.height:b[O];_-=I-r.height,_*=c?1:-1}if(n===C||(n===w||n===L)&&o===ct){S=D;var x=h&&b===v&&v.visualViewport?v.visualViewport.width:b[R];p-=x-r.width,p*=c?1:-1}}var V=Object.assign({position:a},f&&Pn),Q=u===!0?Mn({x:p,y:_},y(e)):{x:p,y:_};if(p=Q.x,_=Q.y,c){var H;return Object.assign({},V,(H={},H[g]=N?\"0\":\"\",H[S]=T?\"0\":\"\",H.transform=(v.devicePixelRatio||1)<=1?\"translate(\"+p+\"px, \"+_+\"px)\":\"translate3d(\"+p+\"px, \"+_+\"px, 0)\",H))}return Object.assign({},V,(t={},t[g]=N?_+\"px\":\"\",t[S]=T?p+\"px\":\"\",t.transform=\"\",t))}function Rn(i){var t=i.state,e=i.options,r=e.gpuAcceleration,n=r===void 0?!0:r,o=e.adaptive,s=o===void 0?!0:o,a=e.roundOffsets,c=a===void 0?!0:a,f={placement:M(t.placement),variation:G(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:n,isFixed:t.options.strategy===\"fixed\"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,ur(Object.assign({},f,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:c})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,ur(Object.assign({},f,{offsets:t.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:c})))),t.attributes.popper=Object.assign({},t.attributes.popper,{\"data-popper-placement\":t.placement})}var Bt={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:Rn,data:{}};var Ne={passive:!0};function kn(i){var t=i.state,e=i.instance,r=i.options,n=r.scroll,o=n===void 0?!0:n,s=r.resize,a=s===void 0?!0:s,c=y(t.elements.popper),f=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&f.forEach(function(u){u.addEventListener(\"scroll\",e.update,Ne)}),a&&c.addEventListener(\"resize\",e.update,Ne),function(){o&&f.forEach(function(u){u.removeEventListener(\"scroll\",e.update,Ne)}),a&&c.removeEventListener(\"resize\",e.update,Ne)}}var jt={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:kn,data:{}};var Vn={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function Ft(i){return i.replace(/left|right|bottom|top/g,function(t){return Vn[t]})}var Hn={start:\"end\",end:\"start\"};function Se(i){return i.replace(/start|end/g,function(t){return Hn[t]})}function St(i){var t=y(i),e=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:e,scrollTop:r}}function Dt(i){return U(k(i)).left+St(i).scrollLeft}function li(i,t){var e=y(i),r=k(i),n=e.visualViewport,o=r.clientWidth,s=r.clientHeight,a=0,c=0;if(n){o=n.width,s=n.height;var f=se();(f||!f&&t===\"fixed\")&&(a=n.offsetLeft,c=n.offsetTop)}return{width:o,height:s,x:a+Dt(i),y:c}}function ci(i){var t,e=k(i),r=St(i),n=(t=i.ownerDocument)==null?void 0:t.body,o=J(e.scrollWidth,e.clientWidth,n?n.scrollWidth:0,n?n.clientWidth:0),s=J(e.scrollHeight,e.clientHeight,n?n.scrollHeight:0,n?n.clientHeight:0),a=-r.scrollLeft+Dt(i),c=-r.scrollTop;return W(n||e).direction===\"rtl\"&&(a+=J(e.clientWidth,n?n.clientWidth:0)-o),{width:o,height:s,x:a,y:c}}function Lt(i){var t=W(i),e=t.overflow,r=t.overflowX,n=t.overflowY;return/auto|scroll|overlay|hidden/.test(e+n+r)}function De(i){return[\"html\",\"body\",\"#document\"].indexOf(P(i))>=0?i.ownerDocument.body:$(i)&&Lt(i)?i:De(nt(i))}function ut(i,t){var e;t===void 0&&(t=[]);var r=De(i),n=r===((e=i.ownerDocument)==null?void 0:e.body),o=y(r),s=n?[o].concat(o.visualViewport||[],Lt(r)?r:[]):r,a=t.concat(s);return n?a:a.concat(ut(nt(s)))}function Kt(i){return Object.assign({},i,{left:i.x,top:i.y,right:i.x+i.width,bottom:i.y+i.height})}function Wn(i,t){var e=U(i,!1,t===\"fixed\");return e.top=e.top+i.clientTop,e.left=e.left+i.clientLeft,e.bottom=e.top+i.clientHeight,e.right=e.left+i.clientWidth,e.width=i.clientWidth,e.height=i.clientHeight,e.x=e.left,e.y=e.top,e}function fr(i,t,e){return t===ne?Kt(li(i,e)):Y(t)?Wn(t,e):Kt(ci(k(i)))}function Bn(i){var t=ut(nt(i)),e=[\"absolute\",\"fixed\"].indexOf(W(i).position)>=0,r=e&&$(i)?tt(i):i;return Y(r)?t.filter(function(n){return Y(n)&&ae(n,r)&&P(n)!==\"body\"}):[]}function ui(i,t,e,r){var n=t===\"clippingParents\"?Bn(i):[].concat(t),o=[].concat(n,[e]),s=o[0],a=o.reduce(function(c,f){var u=fr(i,f,r);return c.top=J(u.top,c.top),c.right=wt(u.right,c.right),c.bottom=wt(u.bottom,c.bottom),c.left=J(u.left,c.left),c},fr(i,s,r));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function fe(i){var t=i.reference,e=i.element,r=i.placement,n=r?M(r):null,o=r?G(r):null,s=t.x+t.width/2-e.width/2,a=t.y+t.height/2-e.height/2,c;switch(n){case w:c={x:s,y:t.y-e.height};break;case L:c={x:s,y:t.y+t.height};break;case D:c={x:t.x+t.width,y:a};break;case C:c={x:t.x-e.width,y:a};break;default:c={x:t.x,y:t.y}}var f=n?Ct(n):null;if(f!=null){var u=f===\"y\"?\"height\":\"width\";switch(o){case et:c[f]=c[f]-(t[u]/2-e[u]/2);break;case ct:c[f]=c[f]+(t[u]/2-e[u]/2);break;default:}}return c}function B(i,t){t===void 0&&(t={});var e=t,r=e.placement,n=r===void 0?i.placement:r,o=e.strategy,s=o===void 0?i.strategy:o,a=e.boundary,c=a===void 0?ni:a,f=e.rootBoundary,u=f===void 0?ne:f,h=e.elementContext,m=h===void 0?yt:h,p=e.altBoundary,A=p===void 0?!1:p,_=e.padding,E=_===void 0?0:_,T=ce(typeof E!=\"number\"?E:ue(E,it)),N=m===yt?oi:yt,S=i.rects.popper,g=i.elements[A?N:m],v=ui(Y(g)?g:g.contextElement||k(i.elements.popper),c,u,s),b=U(i.elements.reference),O=fe({reference:b,element:S,strategy:\"absolute\",placement:n}),R=Kt(Object.assign({},S,O)),I=m===yt?R:b,x={top:v.top-I.top+T.top,bottom:I.bottom-v.bottom+T.bottom,left:v.left-I.left+T.left,right:I.right-v.right+T.right},V=i.modifiersData.offset;if(m===yt&&V){var Q=V[n];Object.keys(x).forEach(function(H){var Et=[D,L].indexOf(H)>=0?1:-1,vt=[w,L].indexOf(H)>=0?\"y\":\"x\";x[H]+=Q[vt]*Et})}return x}function fi(i,t){t===void 0&&(t={});var e=t,r=e.placement,n=e.boundary,o=e.rootBoundary,s=e.padding,a=e.flipVariations,c=e.allowedAutoPlacements,f=c===void 0?oe:c,u=G(r),h=u?a?Oe:Oe.filter(function(A){return G(A)===u}):it,m=h.filter(function(A){return f.indexOf(A)>=0});m.length===0&&(m=h);var p=m.reduce(function(A,_){return A[_]=B(i,{placement:_,boundary:n,rootBoundary:o,padding:s})[M(_)],A},{});return Object.keys(p).sort(function(A,_){return p[A]-p[_]})}function jn(i){if(M(i)===re)return[];var t=Ft(i);return[Se(i),t,Se(t)]}function Fn(i){var t=i.state,e=i.options,r=i.name;if(!t.modifiersData[r]._skip){for(var n=e.mainAxis,o=n===void 0?!0:n,s=e.altAxis,a=s===void 0?!0:s,c=e.fallbackPlacements,f=e.padding,u=e.boundary,h=e.rootBoundary,m=e.altBoundary,p=e.flipVariations,A=p===void 0?!0:p,_=e.allowedAutoPlacements,E=t.options.placement,T=M(E),N=T===E,S=c||(N||!A?[Ft(E)]:jn(E)),g=[E].concat(S).reduce(function(kt,lt){return kt.concat(M(lt)===re?fi(t,{placement:lt,boundary:u,rootBoundary:h,padding:f,flipVariations:A,allowedAutoPlacements:_}):lt)},[]),v=t.rects.reference,b=t.rects.popper,O=new Map,R=!0,I=g[0],x=0;x<g.length;x++){var V=g[x],Q=M(V),H=G(V)===et,Et=[w,L].indexOf(Q)>=0,vt=Et?\"width\":\"height\",F=B(t,{placement:V,boundary:u,rootBoundary:h,altBoundary:m,padding:f}),Z=Et?H?D:C:H?L:w;v[vt]>b[vt]&&(Z=Ft(Z));var be=Ft(Z),bt=[];if(o&&bt.push(F[Q]<=0),a&&bt.push(F[Z]<=0,F[be]<=0),bt.every(function(kt){return kt})){I=V,R=!1;break}O.set(V,bt)}if(R)for(var Ae=A?3:1,ti=function(lt){var ie=g.find(function(ye){var At=O.get(ye);if(At)return At.slice(0,lt).every(function(ei){return ei})});if(ie)return I=ie,\"break\"},ee=Ae;ee>0;ee--){var Te=ti(ee);if(Te===\"break\")break}t.placement!==I&&(t.modifiersData[r]._skip=!0,t.placement=I,t.reset=!0)}}var Le={name:\"flip\",enabled:!0,phase:\"main\",fn:Fn,requiresIfExists:[\"offset\"],data:{_skip:!1}};function dr(i,t,e){return e===void 0&&(e={x:0,y:0}),{top:i.top-t.height-e.y,right:i.right-t.width+e.x,bottom:i.bottom-t.height+e.y,left:i.left-t.width-e.x}}function pr(i){return[w,D,L,C].some(function(t){return i[t]>=0})}function Kn(i){var t=i.state,e=i.name,r=t.rects.reference,n=t.rects.popper,o=t.modifiersData.preventOverflow,s=B(t,{elementContext:\"reference\"}),a=B(t,{altBoundary:!0}),c=dr(s,r),f=dr(a,n,o),u=pr(c),h=pr(f);t.modifiersData[e]={referenceClippingOffsets:c,popperEscapeOffsets:f,isReferenceHidden:u,hasPopperEscaped:h},t.attributes.popper=Object.assign({},t.attributes.popper,{\"data-popper-reference-hidden\":u,\"data-popper-escaped\":h})}var xe={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:Kn};function Yn(i,t,e){var r=M(i),n=[C,w].indexOf(r)>=0?-1:1,o=typeof e==\"function\"?e(Object.assign({},t,{placement:i})):e,s=o[0],a=o[1];return s=s||0,a=(a||0)*n,[C,D].indexOf(r)>=0?{x:a,y:s}:{x:s,y:a}}function Un(i){var t=i.state,e=i.options,r=i.name,n=e.offset,o=n===void 0?[0,0]:n,s=oe.reduce(function(u,h){return u[h]=Yn(h,t.rects,o),u},{}),a=s[t.placement],c=a.x,f=a.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=c,t.modifiersData.popperOffsets.y+=f),t.modifiersData[r]=s}var $e={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:Un};function Gn(i){var t=i.state,e=i.name;t.modifiersData[e]=fe({reference:t.rects.reference,element:t.rects.popper,strategy:\"absolute\",placement:t.placement})}var Yt={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:Gn,data:{}};function di(i){return i===\"x\"?\"y\":\"x\"}function zn(i){var t=i.state,e=i.options,r=i.name,n=e.mainAxis,o=n===void 0?!0:n,s=e.altAxis,a=s===void 0?!1:s,c=e.boundary,f=e.rootBoundary,u=e.altBoundary,h=e.padding,m=e.tether,p=m===void 0?!0:m,A=e.tetherOffset,_=A===void 0?0:A,E=B(t,{boundary:c,rootBoundary:f,padding:h,altBoundary:u}),T=M(t.placement),N=G(t.placement),S=!N,g=Ct(T),v=di(g),b=t.modifiersData.popperOffsets,O=t.rects.reference,R=t.rects.popper,I=typeof _==\"function\"?_(Object.assign({},t.rects,{placement:t.placement})):_,x=typeof I==\"number\"?{mainAxis:I,altAxis:I}:Object.assign({mainAxis:0,altAxis:0},I),V=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,Q={x:0,y:0};if(b){if(o){var H,Et=g===\"y\"?w:C,vt=g===\"y\"?L:D,F=g===\"y\"?\"height\":\"width\",Z=b[g],be=Z+E[Et],bt=Z-E[vt],Ae=p?-R[F]/2:0,ti=N===et?O[F]:R[F],ee=N===et?-R[F]:-O[F],Te=t.elements.arrow,kt=p&&Te?Ot(Te):{width:0,height:0},lt=t.modifiersData[\"arrow#persistent\"]?t.modifiersData[\"arrow#persistent\"].padding:le(),ie=lt[Et],ye=lt[vt],At=Nt(0,O[F],kt[F]),ei=S?O[F]/2-Ae-At-ie-x.mainAxis:ti-At-ie-x.mainAxis,bn=S?-O[F]/2+Ae+At+ye+x.mainAxis:ee+At+ye+x.mainAxis,ii=t.elements.arrow&&tt(t.elements.arrow),An=ii?g===\"y\"?ii.clientTop||0:ii.clientLeft||0:0,Ki=(H=V?.[g])!=null?H:0,Tn=Z+ei-Ki-An,yn=Z+bn-Ki,Yi=Nt(p?wt(be,Tn):be,Z,p?J(bt,yn):bt);b[g]=Yi,Q[g]=Yi-Z}if(a){var Ui,wn=g===\"x\"?w:C,On=g===\"x\"?L:D,Tt=b[v],we=v===\"y\"?\"height\":\"width\",Gi=Tt+E[wn],zi=Tt-E[On],ri=[w,C].indexOf(T)!==-1,qi=(Ui=V?.[v])!=null?Ui:0,Xi=ri?Gi:Tt-O[we]-R[we]-qi+x.altAxis,Qi=ri?Tt+O[we]+R[we]-qi-x.altAxis:zi,Zi=p&&ri?cr(Xi,Tt,Qi):Nt(p?Xi:Gi,Tt,p?Qi:zi);b[v]=Zi,Q[v]=Zi-Tt}t.modifiersData[r]=Q}}var Ie={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:zn,requiresIfExists:[\"offset\"]};function pi(i){return{scrollLeft:i.scrollLeft,scrollTop:i.scrollTop}}function hi(i){return i===y(i)||!$(i)?St(i):pi(i)}function qn(i){var t=i.getBoundingClientRect(),e=rt(t.width)/i.offsetWidth||1,r=rt(t.height)/i.offsetHeight||1;return e!==1||r!==1}function mi(i,t,e){e===void 0&&(e=!1);var r=$(t),n=$(t)&&qn(t),o=k(t),s=U(i,n,e),a={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(r||!r&&!e)&&((P(t)!==\"body\"||Lt(o))&&(a=hi(t)),$(t)?(c=U(t,!0),c.x+=t.clientLeft,c.y+=t.clientTop):o&&(c.x=Dt(o))),{x:s.left+a.scrollLeft-c.x,y:s.top+a.scrollTop-c.y,width:s.width,height:s.height}}function Xn(i){var t=new Map,e=new Set,r=[];i.forEach(function(o){t.set(o.name,o)});function n(o){e.add(o.name);var s=[].concat(o.requires||[],o.requiresIfExists||[]);s.forEach(function(a){if(!e.has(a)){var c=t.get(a);c&&n(c)}}),r.push(o)}return i.forEach(function(o){e.has(o.name)||n(o)}),r}function _i(i){var t=Xn(i);return si.reduce(function(e,r){return e.concat(t.filter(function(n){return n.phase===r}))},[])}function gi(i){var t;return function(){return t||(t=new Promise(function(e){Promise.resolve().then(function(){t=void 0,e(i())})})),t}}function Ei(i){var t=i.reduce(function(e,r){var n=e[r.name];return e[r.name]=n?Object.assign({},n,r,{options:Object.assign({},n.options,r.options),data:Object.assign({},n.data,r.data)}):r,e},{});return Object.keys(t).map(function(e){return t[e]})}var hr={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function mr(){for(var i=arguments.length,t=new Array(i),e=0;e<i;e++)t[e]=arguments[e];return!t.some(function(r){return!(r&&typeof r.getBoundingClientRect==\"function\")})}function xt(i){i===void 0&&(i={});var t=i,e=t.defaultModifiers,r=e===void 0?[]:e,n=t.defaultOptions,o=n===void 0?hr:n;return function(a,c,f){f===void 0&&(f=o);var u={placement:\"bottom\",orderedModifiers:[],options:Object.assign({},hr,o),modifiersData:{},elements:{reference:a,popper:c},attributes:{},styles:{}},h=[],m=!1,p={state:u,setOptions:function(T){var N=typeof T==\"function\"?T(u.options):T;_(),u.options=Object.assign({},o,u.options,N),u.scrollParents={reference:Y(a)?ut(a):a.contextElement?ut(a.contextElement):[],popper:ut(c)};var S=_i(Ei([].concat(r,u.options.modifiers)));return u.orderedModifiers=S.filter(function(g){return g.enabled}),A(),p.update()},forceUpdate:function(){if(!m){var T=u.elements,N=T.reference,S=T.popper;if(mr(N,S)){u.rects={reference:mi(N,tt(S),u.options.strategy===\"fixed\"),popper:Ot(S)},u.reset=!1,u.placement=u.options.placement,u.orderedModifiers.forEach(function(x){return u.modifiersData[x.name]=Object.assign({},x.data)});for(var g=0;g<u.orderedModifiers.length;g++){if(u.reset===!0){u.reset=!1,g=-1;continue}var v=u.orderedModifiers[g],b=v.fn,O=v.options,R=O===void 0?{}:O,I=v.name;typeof b==\"function\"&&(u=b({state:u,options:R,name:I,instance:p})||u)}}}},update:gi(function(){return new Promise(function(E){p.forceUpdate(),E(u)})}),destroy:function(){_(),m=!0}};if(!mr(a,c))return p;p.setOptions(f).then(function(E){!m&&f.onFirstUpdate&&f.onFirstUpdate(E)});function A(){u.orderedModifiers.forEach(function(E){var T=E.name,N=E.options,S=N===void 0?{}:N,g=E.effect;if(typeof g==\"function\"){var v=g({state:u,name:T,instance:p,options:S}),b=function(){};h.push(v||b)}})}function _(){h.forEach(function(E){return E()}),h=[]}return p}}var _r=xt();var Qn=[jt,Yt,Bt,Ht],gr=xt({defaultModifiers:Qn});var Zn=[jt,Yt,Bt,Ht,$e,Le,Ie,Ce,xe],de=xt({defaultModifiers:Zn});var ft=new Map,vi={set(i,t,e){ft.has(i)||ft.set(i,new Map);let r=ft.get(i);if(!r.has(t)&&r.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(r.keys())[0]}.`);return}r.set(t,e)},get(i,t){return ft.has(i)&&ft.get(i).get(t)||null},remove(i,t){if(!ft.has(i))return;let e=ft.get(i);e.delete(t),e.size===0&&ft.delete(i)}},Jn=1e6,to=1e3,Mi=\"transitionend\",Ur=i=>(i&&window.CSS&&window.CSS.escape&&(i=i.replace(/#([^\\s\"#']+)/g,(t,e)=>`#${CSS.escape(e)}`)),i),eo=i=>i==null?`${i}`:Object.prototype.toString.call(i).match(/\\s([a-z]+)/i)[1].toLowerCase(),io=i=>{do i+=Math.floor(Math.random()*Jn);while(document.getElementById(i));return i},ro=i=>{if(!i)return 0;let{transitionDuration:t,transitionDelay:e}=window.getComputedStyle(i),r=Number.parseFloat(t),n=Number.parseFloat(e);return!r&&!n?0:(t=t.split(\",\")[0],e=e.split(\",\")[0],(Number.parseFloat(t)+Number.parseFloat(e))*to)},Gr=i=>{i.dispatchEvent(new Event(Mi))},ot=i=>!i||typeof i!=\"object\"?!1:(typeof i.jquery<\"u\"&&(i=i[0]),typeof i.nodeType<\"u\"),dt=i=>ot(i)?i.jquery?i[0]:i:typeof i==\"string\"&&i.length>0?document.querySelector(Ur(i)):null,Jt=i=>{if(!ot(i)||i.getClientRects().length===0)return!1;let t=getComputedStyle(i).getPropertyValue(\"visibility\")===\"visible\",e=i.closest(\"details:not([open])\");if(!e)return t;if(e!==i){let r=i.closest(\"summary\");if(r&&r.parentNode!==e||r===null)return!1}return t},pt=i=>!i||i.nodeType!==Node.ELEMENT_NODE||i.classList.contains(\"disabled\")?!0:typeof i.disabled<\"u\"?i.disabled:i.hasAttribute(\"disabled\")&&i.getAttribute(\"disabled\")!==\"false\",zr=i=>{if(!document.documentElement.attachShadow)return null;if(typeof i.getRootNode==\"function\"){let t=i.getRootNode();return t instanceof ShadowRoot?t:null}return i instanceof ShadowRoot?i:i.parentNode?zr(i.parentNode):null},Fe=()=>{},Ee=i=>{i.offsetHeight},qr=()=>window.jQuery&&!document.body.hasAttribute(\"data-bs-no-jquery\")?window.jQuery:null,bi=[],no=i=>{document.readyState===\"loading\"?(bi.length||document.addEventListener(\"DOMContentLoaded\",()=>{for(let t of bi)t()}),bi.push(i)):i()},z=()=>document.documentElement.dir===\"rtl\",X=i=>{no(()=>{let t=qr();if(t){let e=i.NAME,r=t.fn[e];t.fn[e]=i.jQueryInterface,t.fn[e].Constructor=i,t.fn[e].noConflict=()=>(t.fn[e]=r,i.jQueryInterface)}})},j=(i,t=[],e=i)=>typeof i==\"function\"?i.call(...t):e,Xr=(i,t,e=!0)=>{if(!e){j(i);return}let n=ro(t)+5,o=!1,s=({target:a})=>{a===t&&(o=!0,t.removeEventListener(Mi,s),j(i))};t.addEventListener(Mi,s),setTimeout(()=>{o||Gr(t)},n)},Wi=(i,t,e,r)=>{let n=i.length,o=i.indexOf(t);return o===-1?!e&&r?i[n-1]:i[0]:(o+=e?1:-1,r&&(o=(o+n)%n),i[Math.max(0,Math.min(o,n-1))])},oo=/[^.]*(?=\\..*)\\.|.*/,so=/\\..*/,ao=/::\\d+$/,Ai={},Er=1,Qr={mouseenter:\"mouseover\",mouseleave:\"mouseout\"},lo=new Set([\"click\",\"dblclick\",\"mouseup\",\"mousedown\",\"contextmenu\",\"mousewheel\",\"DOMMouseScroll\",\"mouseover\",\"mouseout\",\"mousemove\",\"selectstart\",\"selectend\",\"keydown\",\"keypress\",\"keyup\",\"orientationchange\",\"touchstart\",\"touchmove\",\"touchend\",\"touchcancel\",\"pointerdown\",\"pointermove\",\"pointerup\",\"pointerleave\",\"pointercancel\",\"gesturestart\",\"gesturechange\",\"gestureend\",\"focus\",\"blur\",\"change\",\"reset\",\"select\",\"submit\",\"focusin\",\"focusout\",\"load\",\"unload\",\"beforeunload\",\"resize\",\"move\",\"DOMContentLoaded\",\"readystatechange\",\"error\",\"abort\",\"scroll\"]);function Zr(i,t){return t&&`${t}::${Er++}`||i.uidEvent||Er++}function Jr(i){let t=Zr(i);return i.uidEvent=t,Ai[t]=Ai[t]||{},Ai[t]}function co(i,t){return function e(r){return Bi(r,{delegateTarget:i}),e.oneOff&&l.off(i,r.type,t),t.apply(i,[r])}}function uo(i,t,e){return function r(n){let o=i.querySelectorAll(t);for(let{target:s}=n;s&&s!==this;s=s.parentNode)for(let a of o)if(a===s)return Bi(n,{delegateTarget:s}),r.oneOff&&l.off(i,n.type,t,e),e.apply(s,[n])}}function tn(i,t,e=null){return Object.values(i).find(r=>r.callable===t&&r.delegationSelector===e)}function en(i,t,e){let r=typeof t==\"string\",n=r?e:t||e,o=rn(i);return lo.has(o)||(o=i),[r,n,o]}function vr(i,t,e,r,n){if(typeof t!=\"string\"||!i)return;let[o,s,a]=en(t,e,r);t in Qr&&(s=(A=>function(_){if(!_.relatedTarget||_.relatedTarget!==_.delegateTarget&&!_.delegateTarget.contains(_.relatedTarget))return A.call(this,_)})(s));let c=Jr(i),f=c[a]||(c[a]={}),u=tn(f,s,o?e:null);if(u){u.oneOff=u.oneOff&&n;return}let h=Zr(s,t.replace(oo,\"\")),m=o?uo(i,e,s):co(i,s);m.delegationSelector=o?e:null,m.callable=s,m.oneOff=n,m.uidEvent=h,f[h]=m,i.addEventListener(a,m,o)}function Ri(i,t,e,r,n){let o=tn(t[e],r,n);o&&(i.removeEventListener(e,o,!!n),delete t[e][o.uidEvent])}function fo(i,t,e,r){let n=t[e]||{};for(let[o,s]of Object.entries(n))o.includes(r)&&Ri(i,t,e,s.callable,s.delegationSelector)}function rn(i){return i=i.replace(so,\"\"),Qr[i]||i}var l={on(i,t,e,r){vr(i,t,e,r,!1)},one(i,t,e,r){vr(i,t,e,r,!0)},off(i,t,e,r){if(typeof t!=\"string\"||!i)return;let[n,o,s]=en(t,e,r),a=s!==t,c=Jr(i),f=c[s]||{},u=t.startsWith(\".\");if(typeof o<\"u\"){if(!Object.keys(f).length)return;Ri(i,c,s,o,n?e:null);return}if(u)for(let h of Object.keys(c))fo(i,c,h,t.slice(1));for(let[h,m]of Object.entries(f)){let p=h.replace(ao,\"\");(!a||t.includes(p))&&Ri(i,c,s,m.callable,m.delegationSelector)}},trigger(i,t,e){if(typeof t!=\"string\"||!i)return null;let r=qr(),n=rn(t),o=t!==n,s=null,a=!0,c=!0,f=!1;o&&r&&(s=r.Event(t,e),r(i).trigger(s),a=!s.isPropagationStopped(),c=!s.isImmediatePropagationStopped(),f=s.isDefaultPrevented());let u=Bi(new Event(t,{bubbles:a,cancelable:!0}),e);return f&&u.preventDefault(),c&&i.dispatchEvent(u),u.defaultPrevented&&s&&s.preventDefault(),u}};function Bi(i,t={}){for(let[e,r]of Object.entries(t))try{i[e]=r}catch{Object.defineProperty(i,e,{configurable:!0,get(){return r}})}return i}function br(i){if(i===\"true\")return!0;if(i===\"false\")return!1;if(i===Number(i).toString())return Number(i);if(i===\"\"||i===\"null\")return null;if(typeof i!=\"string\")return i;try{return JSON.parse(decodeURIComponent(i))}catch{return i}}function Ti(i){return i.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}var st={setDataAttribute(i,t,e){i.setAttribute(`data-bs-${Ti(t)}`,e)},removeDataAttribute(i,t){i.removeAttribute(`data-bs-${Ti(t)}`)},getDataAttributes(i){if(!i)return{};let t={},e=Object.keys(i.dataset).filter(r=>r.startsWith(\"bs\")&&!r.startsWith(\"bsConfig\"));for(let r of e){let n=r.replace(/^bs/,\"\");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=br(i.dataset[r])}return t},getDataAttribute(i,t){return br(i.getAttribute(`data-bs-${Ti(t)}`))}},Pt=class{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method \"NAME\", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){let r=ot(e)?st.getDataAttribute(e,\"config\"):{};return{...this.constructor.Default,...typeof r==\"object\"?r:{},...ot(e)?st.getDataAttributes(e):{},...typeof t==\"object\"?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(let[r,n]of Object.entries(e)){let o=t[r],s=ot(o)?\"element\":eo(o);if(!new RegExp(n).test(s))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${r}\" provided type \"${s}\" but expected type \"${n}\".`)}}},po=\"5.3.8\",K=class extends Pt{constructor(t,e){super(),t=dt(t),t&&(this._element=t,this._config=this._getConfig(e),vi.set(this._element,this.constructor.DATA_KEY,this))}dispose(){vi.remove(this._element,this.constructor.DATA_KEY),l.off(this._element,this.constructor.EVENT_KEY);for(let t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,r=!0){Xr(t,e,r)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return vi.get(dt(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,typeof e==\"object\"?e:null)}static get VERSION(){return po}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}},yi=i=>{let t=i.getAttribute(\"data-bs-target\");if(!t||t===\"#\"){let e=i.getAttribute(\"href\");if(!e||!e.includes(\"#\")&&!e.startsWith(\".\"))return null;e.includes(\"#\")&&!e.startsWith(\"#\")&&(e=`#${e.split(\"#\")[1]}`),t=e&&e!==\"#\"?e.trim():null}return t?t.split(\",\").map(e=>Ur(e)).join(\",\"):null},d={find(i,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,i))},findOne(i,t=document.documentElement){return Element.prototype.querySelector.call(t,i)},children(i,t){return[].concat(...i.children).filter(e=>e.matches(t))},parents(i,t){let e=[],r=i.parentNode.closest(t);for(;r;)e.push(r),r=r.parentNode.closest(t);return e},prev(i,t){let e=i.previousElementSibling;for(;e;){if(e.matches(t))return[e];e=e.previousElementSibling}return[]},next(i,t){let e=i.nextElementSibling;for(;e;){if(e.matches(t))return[e];e=e.nextElementSibling}return[]},focusableChildren(i){let t=[\"a\",\"button\",\"input\",\"textarea\",\"select\",\"details\",\"[tabindex]\",'[contenteditable=\"true\"]'].map(e=>`${e}:not([tabindex^=\"-\"])`).join(\",\");return this.find(t,i).filter(e=>!pt(e)&&Jt(e))},getSelectorFromElement(i){let t=yi(i);return t&&d.findOne(t)?t:null},getElementFromSelector(i){let t=yi(i);return t?d.findOne(t):null},getMultipleElementsFromSelector(i){let t=yi(i);return t?d.find(t):[]}},Je=(i,t=\"hide\")=>{let e=`click.dismiss${i.EVENT_KEY}`,r=i.NAME;l.on(document,e,`[data-bs-dismiss=\"${r}\"]`,function(n){if([\"A\",\"AREA\"].includes(this.tagName)&&n.preventDefault(),pt(this))return;let o=d.getElementFromSelector(this)||this.closest(`.${r}`);i.getOrCreateInstance(o)[t]()})},ho=\"alert\",mo=\"bs.alert\",nn=`.${mo}`,_o=`close${nn}`,go=`closed${nn}`,Eo=\"fade\",vo=\"show\",Ke=class i extends K{static get NAME(){return ho}close(){if(l.trigger(this._element,_o).defaultPrevented)return;this._element.classList.remove(vo);let e=this._element.classList.contains(Eo);this._queueCallback(()=>this._destroyElement(),this._element,e)}_destroyElement(){this._element.remove(),l.trigger(this._element,go),this.dispose()}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this);if(typeof t==\"string\"){if(e[t]===void 0||t.startsWith(\"_\")||t===\"constructor\")throw new TypeError(`No method named \"${t}\"`);e[t](this)}})}};Je(Ke,\"close\");X(Ke);var bo=\"button\",Ao=\"bs.button\",To=`.${Ao}`,yo=\".data-api\",wo=\"active\",Ar='[data-bs-toggle=\"button\"]',Oo=`click${To}${yo}`,Ye=class i extends K{static get NAME(){return bo}toggle(){this._element.setAttribute(\"aria-pressed\",this._element.classList.toggle(wo))}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this);t===\"toggle\"&&e[t]()})}};l.on(document,Oo,Ar,i=>{i.preventDefault();let t=i.target.closest(Ar);Ye.getOrCreateInstance(t).toggle()});X(Ye);var Co=\"swipe\",te=\".bs.swipe\",No=`touchstart${te}`,So=`touchmove${te}`,Do=`touchend${te}`,Lo=`pointerdown${te}`,xo=`pointerup${te}`,$o=\"touch\",Io=\"pen\",Po=\"pointer-event\",Mo=40,Ro={endCallback:null,leftCallback:null,rightCallback:null},ko={endCallback:\"(function|null)\",leftCallback:\"(function|null)\",rightCallback:\"(function|null)\"},Ue=class i extends Pt{constructor(t,e){super(),this._element=t,!(!t||!i.isSupported())&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return Ro}static get DefaultType(){return ko}static get NAME(){return Co}dispose(){l.off(this._element,te)}_start(t){if(!this._supportPointerEvents){this._deltaX=t.touches[0].clientX;return}this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX)}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),j(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){let t=Math.abs(this._deltaX);if(t<=Mo)return;let e=t/this._deltaX;this._deltaX=0,e&&j(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(l.on(this._element,Lo,t=>this._start(t)),l.on(this._element,xo,t=>this._end(t)),this._element.classList.add(Po)):(l.on(this._element,No,t=>this._start(t)),l.on(this._element,So,t=>this._move(t)),l.on(this._element,Do,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&(t.pointerType===Io||t.pointerType===$o)}static isSupported(){return\"ontouchstart\"in document.documentElement||navigator.maxTouchPoints>0}},Vo=\"carousel\",Ho=\"bs.carousel\",_t=`.${Ho}`,on=\".data-api\",Wo=\"ArrowLeft\",Bo=\"ArrowRight\",jo=500,pe=\"next\",Ut=\"prev\",zt=\"left\",Be=\"right\",Fo=`slide${_t}`,wi=`slid${_t}`,Ko=`keydown${_t}`,Yo=`mouseenter${_t}`,Uo=`mouseleave${_t}`,Go=`dragstart${_t}`,zo=`load${_t}${on}`,qo=`click${_t}${on}`,sn=\"carousel\",Me=\"active\",Xo=\"slide\",Qo=\"carousel-item-end\",Zo=\"carousel-item-start\",Jo=\"carousel-item-next\",ts=\"carousel-item-prev\",an=\".active\",ln=\".carousel-item\",es=an+ln,is=\".carousel-item img\",rs=\".carousel-indicators\",ns=\"[data-bs-slide], [data-bs-slide-to]\",os='[data-bs-ride=\"carousel\"]',ss={[Wo]:Be,[Bo]:zt},as={interval:5e3,keyboard:!0,pause:\"hover\",ride:!1,touch:!0,wrap:!0},ls={interval:\"(number|boolean)\",keyboard:\"boolean\",pause:\"(string|boolean)\",ride:\"(boolean|string)\",touch:\"boolean\",wrap:\"boolean\"},me=class i extends K{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=d.findOne(rs,this._element),this._addEventListeners(),this._config.ride===sn&&this.cycle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return Vo}next(){this._slide(pe)}nextWhenVisible(){!document.hidden&&Jt(this._element)&&this.next()}prev(){this._slide(Ut)}pause(){this._isSliding&&Gr(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){l.one(this._element,wi,()=>this.cycle());return}this.cycle()}}to(t){let e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding){l.one(this._element,wi,()=>this.to(t));return}let r=this._getItemIndex(this._getActive());if(r===t)return;let n=t>r?pe:Ut;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&l.on(this._element,Ko,t=>this._keydown(t)),this._config.pause===\"hover\"&&(l.on(this._element,Yo,()=>this.pause()),l.on(this._element,Uo,()=>this._maybeEnableCycle())),this._config.touch&&Ue.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(let r of d.find(is,this._element))l.on(r,Go,n=>n.preventDefault());let e={leftCallback:()=>this._slide(this._directionToOrder(zt)),rightCallback:()=>this._slide(this._directionToOrder(Be)),endCallback:()=>{this._config.pause===\"hover\"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),jo+this._config.interval))}};this._swipeHelper=new Ue(this._element,e)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;let e=ss[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;let e=d.findOne(an,this._indicatorsElement);e.classList.remove(Me),e.removeAttribute(\"aria-current\");let r=d.findOne(`[data-bs-slide-to=\"${t}\"]`,this._indicatorsElement);r&&(r.classList.add(Me),r.setAttribute(\"aria-current\",\"true\"))}_updateInterval(){let t=this._activeElement||this._getActive();if(!t)return;let e=Number.parseInt(t.getAttribute(\"data-bs-interval\"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;let r=this._getActive(),n=t===pe,o=e||Wi(this._getItems(),r,n,this._config.wrap);if(o===r)return;let s=this._getItemIndex(o),a=p=>l.trigger(this._element,p,{relatedTarget:o,direction:this._orderToDirection(t),from:this._getItemIndex(r),to:s});if(a(Fo).defaultPrevented||!r||!o)return;let f=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(s),this._activeElement=o;let u=n?Zo:Qo,h=n?Jo:ts;o.classList.add(h),Ee(o),r.classList.add(u),o.classList.add(u);let m=()=>{o.classList.remove(u,h),o.classList.add(Me),r.classList.remove(Me,h,u),this._isSliding=!1,a(wi)};this._queueCallback(m,r,this._isAnimated()),f&&this.cycle()}_isAnimated(){return this._element.classList.contains(Xo)}_getActive(){return d.findOne(es,this._element)}_getItems(){return d.find(ln,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return z()?t===zt?Ut:pe:t===zt?pe:Ut}_orderToDirection(t){return z()?t===Ut?zt:Be:t===Ut?Be:zt}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this,t);if(typeof t==\"number\"){e.to(t);return}if(typeof t==\"string\"){if(e[t]===void 0||t.startsWith(\"_\")||t===\"constructor\")throw new TypeError(`No method named \"${t}\"`);e[t]()}})}};l.on(document,qo,ns,function(i){let t=d.getElementFromSelector(this);if(!t||!t.classList.contains(sn))return;i.preventDefault();let e=me.getOrCreateInstance(t),r=this.getAttribute(\"data-bs-slide-to\");if(r){e.to(r),e._maybeEnableCycle();return}if(st.getDataAttribute(this,\"slide\")===\"next\"){e.next(),e._maybeEnableCycle();return}e.prev(),e._maybeEnableCycle()});l.on(window,zo,()=>{let i=d.find(os);for(let t of i)me.getOrCreateInstance(t)});X(me);var cs=\"collapse\",us=\"bs.collapse\",ve=`.${us}`,fs=\".data-api\",ds=`show${ve}`,ps=`shown${ve}`,hs=`hide${ve}`,ms=`hidden${ve}`,_s=`click${ve}${fs}`,Oi=\"show\",Xt=\"collapse\",Re=\"collapsing\",gs=\"collapsed\",Es=`:scope .${Xt} .${Xt}`,vs=\"collapse-horizontal\",bs=\"width\",As=\"height\",Ts=\".collapse.show, .collapse.collapsing\",ki='[data-bs-toggle=\"collapse\"]',ys={parent:null,toggle:!0},ws={parent:\"(null|element)\",toggle:\"boolean\"},Ge=class i extends K{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];let r=d.find(ki);for(let n of r){let o=d.getSelectorFromElement(n),s=d.find(o).filter(a=>a===this._element);o!==null&&s.length&&this._triggerArray.push(n)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return ys}static get DefaultType(){return ws}static get NAME(){return cs}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(Ts).filter(a=>a!==this._element).map(a=>i.getOrCreateInstance(a,{toggle:!1}))),t.length&&t[0]._isTransitioning||l.trigger(this._element,ds).defaultPrevented)return;for(let a of t)a.hide();let r=this._getDimension();this._element.classList.remove(Xt),this._element.classList.add(Re),this._element.style[r]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;let n=()=>{this._isTransitioning=!1,this._element.classList.remove(Re),this._element.classList.add(Xt,Oi),this._element.style[r]=\"\",l.trigger(this._element,ps)},s=`scroll${r[0].toUpperCase()+r.slice(1)}`;this._queueCallback(n,this._element,!0),this._element.style[r]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown()||l.trigger(this._element,hs).defaultPrevented)return;let e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,Ee(this._element),this._element.classList.add(Re),this._element.classList.remove(Xt,Oi);for(let n of this._triggerArray){let o=d.getElementFromSelector(n);o&&!this._isShown(o)&&this._addAriaAndCollapsedClass([n],!1)}this._isTransitioning=!0;let r=()=>{this._isTransitioning=!1,this._element.classList.remove(Re),this._element.classList.add(Xt),l.trigger(this._element,ms)};this._element.style[e]=\"\",this._queueCallback(r,this._element,!0)}_isShown(t=this._element){return t.classList.contains(Oi)}_configAfterMerge(t){return t.toggle=!!t.toggle,t.parent=dt(t.parent),t}_getDimension(){return this._element.classList.contains(vs)?bs:As}_initializeChildren(){if(!this._config.parent)return;let t=this._getFirstLevelChildren(ki);for(let e of t){let r=d.getElementFromSelector(e);r&&this._addAriaAndCollapsedClass([e],this._isShown(r))}}_getFirstLevelChildren(t){let e=d.find(Es,this._config.parent);return d.find(t,this._config.parent).filter(r=>!e.includes(r))}_addAriaAndCollapsedClass(t,e){if(t.length)for(let r of t)r.classList.toggle(gs,!e),r.setAttribute(\"aria-expanded\",e)}static jQueryInterface(t){let e={};return typeof t==\"string\"&&/show|hide/.test(t)&&(e.toggle=!1),this.each(function(){let r=i.getOrCreateInstance(this,e);if(typeof t==\"string\"){if(typeof r[t]>\"u\")throw new TypeError(`No method named \"${t}\"`);r[t]()}})}};l.on(document,_s,ki,function(i){(i.target.tagName===\"A\"||i.delegateTarget&&i.delegateTarget.tagName===\"A\")&&i.preventDefault();for(let t of d.getMultipleElementsFromSelector(this))Ge.getOrCreateInstance(t,{toggle:!1}).toggle()});X(Ge);var Tr=\"dropdown\",Os=\"bs.dropdown\",Mt=`.${Os}`,ji=\".data-api\",Cs=\"Escape\",yr=\"Tab\",Ns=\"ArrowUp\",wr=\"ArrowDown\",Ss=2,Ds=`hide${Mt}`,Ls=`hidden${Mt}`,xs=`show${Mt}`,$s=`shown${Mt}`,cn=`click${Mt}${ji}`,un=`keydown${Mt}${ji}`,Is=`keyup${Mt}${ji}`,qt=\"show\",Ps=\"dropup\",Ms=\"dropend\",Rs=\"dropstart\",ks=\"dropup-center\",Vs=\"dropdown-center\",$t='[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)',Hs=`${$t}.${qt}`,je=\".dropdown-menu\",Ws=\".navbar\",Bs=\".navbar-nav\",js=\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",Fs=z()?\"top-end\":\"top-start\",Ks=z()?\"top-start\":\"top-end\",Ys=z()?\"bottom-end\":\"bottom-start\",Us=z()?\"bottom-start\":\"bottom-end\",Gs=z()?\"left-start\":\"right-start\",zs=z()?\"right-start\":\"left-start\",qs=\"top\",Xs=\"bottom\",Qs={autoClose:!0,boundary:\"clippingParents\",display:\"dynamic\",offset:[0,2],popperConfig:null,reference:\"toggle\"},Zs={autoClose:\"(boolean|string)\",boundary:\"(string|element)\",display:\"string\",offset:\"(array|string|function)\",popperConfig:\"(null|object|function)\",reference:\"(string|element|object)\"},ht=class i extends K{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=d.next(this._element,je)[0]||d.prev(this._element,je)[0]||d.findOne(je,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Qs}static get DefaultType(){return Zs}static get NAME(){return Tr}toggle(){return this._isShown()?this.hide():this.show()}show(){if(pt(this._element)||this._isShown())return;let t={relatedTarget:this._element};if(!l.trigger(this._element,xs,t).defaultPrevented){if(this._createPopper(),\"ontouchstart\"in document.documentElement&&!this._parent.closest(Bs))for(let r of[].concat(...document.body.children))l.on(r,\"mouseover\",Fe);this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),this._menu.classList.add(qt),this._element.classList.add(qt),l.trigger(this._element,$s,t)}}hide(){if(pt(this._element)||!this._isShown())return;let t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!l.trigger(this._element,Ds,t).defaultPrevented){if(\"ontouchstart\"in document.documentElement)for(let r of[].concat(...document.body.children))l.off(r,\"mouseover\",Fe);this._popper&&this._popper.destroy(),this._menu.classList.remove(qt),this._element.classList.remove(qt),this._element.setAttribute(\"aria-expanded\",\"false\"),st.removeDataAttribute(this._menu,\"popper\"),l.trigger(this._element,Ls,t)}}_getConfig(t){if(t=super._getConfig(t),typeof t.reference==\"object\"&&!ot(t.reference)&&typeof t.reference.getBoundingClientRect!=\"function\")throw new TypeError(`${Tr.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);return t}_createPopper(){if(typeof Pe>\"u\")throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)\");let t=this._element;this._config.reference===\"parent\"?t=this._parent:ot(this._config.reference)?t=dt(this._config.reference):typeof this._config.reference==\"object\"&&(t=this._config.reference);let e=this._getPopperConfig();this._popper=de(t,this._menu,e)}_isShown(){return this._menu.classList.contains(qt)}_getPlacement(){let t=this._parent;if(t.classList.contains(Ms))return Gs;if(t.classList.contains(Rs))return zs;if(t.classList.contains(ks))return qs;if(t.classList.contains(Vs))return Xs;let e=getComputedStyle(this._menu).getPropertyValue(\"--bs-position\").trim()===\"end\";return t.classList.contains(Ps)?e?Ks:Fs:e?Us:Ys}_detectNavbar(){return this._element.closest(Ws)!==null}_getOffset(){let{offset:t}=this._config;return typeof t==\"string\"?t.split(\",\").map(e=>Number.parseInt(e,10)):typeof t==\"function\"?e=>t(e,this._element):t}_getPopperConfig(){let t={placement:this._getPlacement(),modifiers:[{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"offset\",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display===\"static\")&&(st.setDataAttribute(this._menu,\"popper\",\"static\"),t.modifiers=[{name:\"applyStyles\",enabled:!1}]),{...t,...j(this._config.popperConfig,[void 0,t])}}_selectMenuItem({key:t,target:e}){let r=d.find(js,this._menu).filter(n=>Jt(n));r.length&&Wi(r,e,t===wr,!r.includes(e)).focus()}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this,t);if(typeof t==\"string\"){if(typeof e[t]>\"u\")throw new TypeError(`No method named \"${t}\"`);e[t]()}})}static clearMenus(t){if(t.button===Ss||t.type===\"keyup\"&&t.key!==yr)return;let e=d.find(Hs);for(let r of e){let n=i.getInstance(r);if(!n||n._config.autoClose===!1)continue;let o=t.composedPath(),s=o.includes(n._menu);if(o.includes(n._element)||n._config.autoClose===\"inside\"&&!s||n._config.autoClose===\"outside\"&&s||n._menu.contains(t.target)&&(t.type===\"keyup\"&&t.key===yr||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;let a={relatedTarget:n._element};t.type===\"click\"&&(a.clickEvent=t),n._completeHide(a)}}static dataApiKeydownHandler(t){let e=/input|textarea/i.test(t.target.tagName),r=t.key===Cs,n=[Ns,wr].includes(t.key);if(!n&&!r||e&&!r)return;t.preventDefault();let o=this.matches($t)?this:d.prev(this,$t)[0]||d.next(this,$t)[0]||d.findOne($t,t.delegateTarget.parentNode),s=i.getOrCreateInstance(o);if(n){t.stopPropagation(),s.show(),s._selectMenuItem(t);return}s._isShown()&&(t.stopPropagation(),s.hide(),o.focus())}};l.on(document,un,$t,ht.dataApiKeydownHandler);l.on(document,un,je,ht.dataApiKeydownHandler);l.on(document,cn,ht.clearMenus);l.on(document,Is,ht.clearMenus);l.on(document,cn,$t,function(i){i.preventDefault(),ht.getOrCreateInstance(this).toggle()});X(ht);var fn=\"backdrop\",Js=\"fade\",Or=\"show\",Cr=`mousedown.bs.${fn}`,ta={className:\"modal-backdrop\",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:\"body\"},ea={className:\"string\",clickCallback:\"(function|null)\",isAnimated:\"boolean\",isVisible:\"boolean\",rootElement:\"(element|string)\"},ze=class extends Pt{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return ta}static get DefaultType(){return ea}static get NAME(){return fn}show(t){if(!this._config.isVisible){j(t);return}this._append();let e=this._getElement();this._config.isAnimated&&Ee(e),e.classList.add(Or),this._emulateAnimation(()=>{j(t)})}hide(t){if(!this._config.isVisible){j(t);return}this._getElement().classList.remove(Or),this._emulateAnimation(()=>{this.dispose(),j(t)})}dispose(){this._isAppended&&(l.off(this._element,Cr),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){let t=document.createElement(\"div\");t.className=this._config.className,this._config.isAnimated&&t.classList.add(Js),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=dt(t.rootElement),t}_append(){if(this._isAppended)return;let t=this._getElement();this._config.rootElement.append(t),l.on(t,Cr,()=>{j(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){Xr(t,this._getElement(),this._config.isAnimated)}},ia=\"focustrap\",ra=\"bs.focustrap\",qe=`.${ra}`,na=`focusin${qe}`,oa=`keydown.tab${qe}`,sa=\"Tab\",aa=\"forward\",Nr=\"backward\",la={autofocus:!0,trapElement:null},ca={autofocus:\"boolean\",trapElement:\"element\"},Xe=class extends Pt{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return la}static get DefaultType(){return ca}static get NAME(){return ia}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),l.off(document,qe),l.on(document,na,t=>this._handleFocusin(t)),l.on(document,oa,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,l.off(document,qe))}_handleFocusin(t){let{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;let r=d.focusableChildren(e);r.length===0?e.focus():this._lastTabNavDirection===Nr?r[r.length-1].focus():r[0].focus()}_handleKeydown(t){t.key===sa&&(this._lastTabNavDirection=t.shiftKey?Nr:aa)}},Sr=\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",Dr=\".sticky-top\",ke=\"padding-right\",Lr=\"margin-right\",_e=class{constructor(){this._element=document.body}getWidth(){let t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){let t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,ke,e=>e+t),this._setElementAttributes(Sr,ke,e=>e+t),this._setElementAttributes(Dr,Lr,e=>e-t)}reset(){this._resetElementAttributes(this._element,\"overflow\"),this._resetElementAttributes(this._element,ke),this._resetElementAttributes(Sr,ke),this._resetElementAttributes(Dr,Lr)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,\"overflow\"),this._element.style.overflow=\"hidden\"}_setElementAttributes(t,e,r){let n=this.getWidth(),o=s=>{if(s!==this._element&&window.innerWidth>s.clientWidth+n)return;this._saveInitialAttribute(s,e);let a=window.getComputedStyle(s).getPropertyValue(e);s.style.setProperty(e,`${r(Number.parseFloat(a))}px`)};this._applyManipulationCallback(t,o)}_saveInitialAttribute(t,e){let r=t.style.getPropertyValue(e);r&&st.setDataAttribute(t,e,r)}_resetElementAttributes(t,e){let r=n=>{let o=st.getDataAttribute(n,e);if(o===null){n.style.removeProperty(e);return}st.removeDataAttribute(n,e),n.style.setProperty(e,o)};this._applyManipulationCallback(t,r)}_applyManipulationCallback(t,e){if(ot(t)){e(t);return}for(let r of d.find(t,this._element))e(r)}},ua=\"modal\",fa=\"bs.modal\",q=`.${fa}`,da=\".data-api\",pa=\"Escape\",ha=`hide${q}`,ma=`hidePrevented${q}`,dn=`hidden${q}`,pn=`show${q}`,_a=`shown${q}`,ga=`resize${q}`,Ea=`click.dismiss${q}`,va=`mousedown.dismiss${q}`,ba=`keydown.dismiss${q}`,Aa=`click${q}${da}`,xr=\"modal-open\",Ta=\"fade\",$r=\"show\",Ci=\"modal-static\",ya=\".modal.show\",wa=\".modal-dialog\",Oa=\".modal-body\",Ca='[data-bs-toggle=\"modal\"]',Na={backdrop:!0,focus:!0,keyboard:!0},Sa={backdrop:\"(boolean|string)\",focus:\"boolean\",keyboard:\"boolean\"},Qt=class i extends K{constructor(t,e){super(t,e),this._dialog=d.findOne(wa,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new _e,this._addEventListeners()}static get Default(){return Na}static get DefaultType(){return Sa}static get NAME(){return ua}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||l.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(xr),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){!this._isShown||this._isTransitioning||l.trigger(this._element,ha).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove($r),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){l.off(window,q),l.off(this._dialog,q),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new ze({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Xe({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display=\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.scrollTop=0;let e=d.findOne(Oa,this._dialog);e&&(e.scrollTop=0),Ee(this._element),this._element.classList.add($r);let r=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,l.trigger(this._element,_a,{relatedTarget:t})};this._queueCallback(r,this._dialog,this._isAnimated())}_addEventListeners(){l.on(this._element,ba,t=>{if(t.key===pa){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),l.on(window,ga,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),l.on(this._element,va,t=>{l.one(this._element,Ea,e=>{if(!(this._element!==t.target||this._element!==e.target)){if(this._config.backdrop===\"static\"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display=\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(xr),this._resetAdjustments(),this._scrollBar.reset(),l.trigger(this._element,dn)})}_isAnimated(){return this._element.classList.contains(Ta)}_triggerBackdropTransition(){if(l.trigger(this._element,ma).defaultPrevented)return;let e=this._element.scrollHeight>document.documentElement.clientHeight,r=this._element.style.overflowY;r===\"hidden\"||this._element.classList.contains(Ci)||(e||(this._element.style.overflowY=\"hidden\"),this._element.classList.add(Ci),this._queueCallback(()=>{this._element.classList.remove(Ci),this._queueCallback(()=>{this._element.style.overflowY=r},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){let t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),r=e>0;if(r&&!t){let n=z()?\"paddingLeft\":\"paddingRight\";this._element.style[n]=`${e}px`}if(!r&&t){let n=z()?\"paddingRight\":\"paddingLeft\";this._element.style[n]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft=\"\",this._element.style.paddingRight=\"\"}static jQueryInterface(t,e){return this.each(function(){let r=i.getOrCreateInstance(this,t);if(typeof t==\"string\"){if(typeof r[t]>\"u\")throw new TypeError(`No method named \"${t}\"`);r[t](e)}})}};l.on(document,Aa,Ca,function(i){let t=d.getElementFromSelector(this);[\"A\",\"AREA\"].includes(this.tagName)&&i.preventDefault(),l.one(t,pn,n=>{n.defaultPrevented||l.one(t,dn,()=>{Jt(this)&&this.focus()})});let e=d.findOne(ya);e&&Qt.getInstance(e).hide(),Qt.getOrCreateInstance(t).toggle(this)});Je(Qt);X(Qt);var Da=\"offcanvas\",La=\"bs.offcanvas\",at=`.${La}`,hn=\".data-api\",xa=`load${at}${hn}`,$a=\"Escape\",Ir=\"show\",Pr=\"showing\",Mr=\"hiding\",Ia=\"offcanvas-backdrop\",mn=\".offcanvas.show\",Pa=`show${at}`,Ma=`shown${at}`,Ra=`hide${at}`,Rr=`hidePrevented${at}`,_n=`hidden${at}`,ka=`resize${at}`,Va=`click${at}${hn}`,Ha=`keydown.dismiss${at}`,Wa='[data-bs-toggle=\"offcanvas\"]',Ba={backdrop:!0,keyboard:!0,scroll:!1},ja={backdrop:\"(boolean|string)\",keyboard:\"boolean\",scroll:\"boolean\"},mt=class i extends K{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Ba}static get DefaultType(){return ja}static get NAME(){return Da}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||l.trigger(this._element,Pa,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new _e().hide(),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.classList.add(Pr);let r=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(Ir),this._element.classList.remove(Pr),l.trigger(this._element,Ma,{relatedTarget:t})};this._queueCallback(r,this._element,!0)}hide(){if(!this._isShown||l.trigger(this._element,Ra).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Mr),this._backdrop.hide();let e=()=>{this._element.classList.remove(Ir,Mr),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._config.scroll||new _e().reset(),l.trigger(this._element,_n)};this._queueCallback(e,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){let t=()=>{if(this._config.backdrop===\"static\"){l.trigger(this._element,Rr);return}this.hide()},e=!!this._config.backdrop;return new ze({className:Ia,isVisible:e,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:e?t:null})}_initializeFocusTrap(){return new Xe({trapElement:this._element})}_addEventListeners(){l.on(this._element,Ha,t=>{if(t.key===$a){if(this._config.keyboard){this.hide();return}l.trigger(this._element,Rr)}})}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this,t);if(typeof t==\"string\"){if(e[t]===void 0||t.startsWith(\"_\")||t===\"constructor\")throw new TypeError(`No method named \"${t}\"`);e[t](this)}})}};l.on(document,Va,Wa,function(i){let t=d.getElementFromSelector(this);if([\"A\",\"AREA\"].includes(this.tagName)&&i.preventDefault(),pt(this))return;l.one(t,_n,()=>{Jt(this)&&this.focus()});let e=d.findOne(mn);e&&e!==t&&mt.getInstance(e).hide(),mt.getOrCreateInstance(t).toggle(this)});l.on(window,xa,()=>{for(let i of d.find(mn))mt.getOrCreateInstance(i).show()});l.on(window,ka,()=>{for(let i of d.find(\"[aria-modal][class*=show][class*=offcanvas-]\"))getComputedStyle(i).position!==\"fixed\"&&mt.getOrCreateInstance(i).hide()});Je(mt);X(mt);var Fa=/^aria-[\\w-]*$/i,gn={\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",Fa],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Ka=new Set([\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"]),Ya=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Ua=(i,t)=>{let e=i.nodeName.toLowerCase();return t.includes(e)?Ka.has(e)?!!Ya.test(i.nodeValue):!0:t.filter(r=>r instanceof RegExp).some(r=>r.test(e))};function Ga(i,t,e){if(!i.length)return i;if(e&&typeof e==\"function\")return e(i);let n=new window.DOMParser().parseFromString(i,\"text/html\"),o=[].concat(...n.body.querySelectorAll(\"*\"));for(let s of o){let a=s.nodeName.toLowerCase();if(!Object.keys(t).includes(a)){s.remove();continue}let c=[].concat(...s.attributes),f=[].concat(t[\"*\"]||[],t[a]||[]);for(let u of c)Ua(u,f)||s.removeAttribute(u.nodeName)}return n.body.innerHTML}var za=\"TemplateFactory\",qa={allowList:gn,content:{},extraClass:\"\",html:!1,sanitize:!0,sanitizeFn:null,template:\"<div></div>\"},Xa={allowList:\"object\",content:\"object\",extraClass:\"(string|function)\",html:\"boolean\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",template:\"string\"},Qa={entry:\"(string|element|function|null)\",selector:\"(string|element)\"},Vi=class extends Pt{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return qa}static get DefaultType(){return Xa}static get NAME(){return za}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){let t=document.createElement(\"div\");t.innerHTML=this._maybeSanitize(this._config.template);for(let[n,o]of Object.entries(this._config.content))this._setContent(t,o,n);let e=t.children[0],r=this._resolvePossibleFunction(this._config.extraClass);return r&&e.classList.add(...r.split(\" \")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(let[e,r]of Object.entries(t))super._typeCheckConfig({selector:e,entry:r},Qa)}_setContent(t,e,r){let n=d.findOne(r,t);if(n){if(e=this._resolvePossibleFunction(e),!e){n.remove();return}if(ot(e)){this._putElementInTemplate(dt(e),n);return}if(this._config.html){n.innerHTML=this._maybeSanitize(e);return}n.textContent=e}}_maybeSanitize(t){return this._config.sanitize?Ga(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return j(t,[void 0,this])}_putElementInTemplate(t,e){if(this._config.html){e.innerHTML=\"\",e.append(t);return}e.textContent=t.textContent}},Za=\"tooltip\",Ja=new Set([\"sanitize\",\"allowList\",\"sanitizeFn\"]),Ni=\"fade\",tl=\"modal\",Ve=\"show\",el=\".tooltip-inner\",kr=`.${tl}`,Vr=\"hide.bs.modal\",he=\"hover\",Si=\"focus\",Di=\"click\",il=\"manual\",rl=\"hide\",nl=\"hidden\",ol=\"show\",sl=\"shown\",al=\"inserted\",ll=\"click\",cl=\"focusin\",ul=\"focusout\",fl=\"mouseenter\",dl=\"mouseleave\",pl={AUTO:\"auto\",TOP:\"top\",RIGHT:z()?\"left\":\"right\",BOTTOM:\"bottom\",LEFT:z()?\"right\":\"left\"},hl={allowList:gn,animation:!0,boundary:\"clippingParents\",container:!1,customClass:\"\",delay:0,fallbackPlacements:[\"top\",\"right\",\"bottom\",\"left\"],html:!1,offset:[0,6],placement:\"top\",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',title:\"\",trigger:\"hover focus\"},ml={allowList:\"object\",animation:\"boolean\",boundary:\"(string|element)\",container:\"(string|element|boolean)\",customClass:\"(string|function)\",delay:\"(number|object)\",fallbackPlacements:\"array\",html:\"boolean\",offset:\"(array|string|function)\",placement:\"(string|function)\",popperConfig:\"(null|object|function)\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",selector:\"(string|boolean)\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\"},Zt=class i extends K{constructor(t,e){if(typeof Pe>\"u\")throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)\");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return hl}static get DefaultType(){return ml}static get NAME(){return Za}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),l.off(this._element.closest(kr),Vr,this._hideModalHandler),this._element.getAttribute(\"data-bs-original-title\")&&this._element.setAttribute(\"title\",this._element.getAttribute(\"data-bs-original-title\")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display===\"none\")throw new Error(\"Please use show on visible elements\");if(!(this._isWithContent()&&this._isEnabled))return;let t=l.trigger(this._element,this.constructor.eventName(ol)),r=(zr(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!r)return;this._disposePopper();let n=this._getTipElement();this._element.setAttribute(\"aria-describedby\",n.getAttribute(\"id\"));let{container:o}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(o.append(n),l.trigger(this._element,this.constructor.eventName(al))),this._popper=this._createPopper(n),n.classList.add(Ve),\"ontouchstart\"in document.documentElement)for(let a of[].concat(...document.body.children))l.on(a,\"mouseover\",Fe);let s=()=>{l.trigger(this._element,this.constructor.eventName(sl)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(s,this.tip,this._isAnimated())}hide(){if(!this._isShown()||l.trigger(this._element,this.constructor.eventName(rl)).defaultPrevented)return;if(this._getTipElement().classList.remove(Ve),\"ontouchstart\"in document.documentElement)for(let n of[].concat(...document.body.children))l.off(n,\"mouseover\",Fe);this._activeTrigger[Di]=!1,this._activeTrigger[Si]=!1,this._activeTrigger[he]=!1,this._isHovered=null;let r=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute(\"aria-describedby\"),l.trigger(this._element,this.constructor.eventName(nl)))};this._queueCallback(r,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){let e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Ni,Ve),e.classList.add(`bs-${this.constructor.NAME}-auto`);let r=io(this.constructor.NAME).toString();return e.setAttribute(\"id\",r),this._isAnimated()&&e.classList.add(Ni),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Vi({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[el]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute(\"data-bs-original-title\")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ni)}_isShown(){return this.tip&&this.tip.classList.contains(Ve)}_createPopper(t){let e=j(this._config.placement,[this,t,this._element]),r=pl[e.toUpperCase()];return de(this._element,t,this._getPopperConfig(r))}_getOffset(){let{offset:t}=this._config;return typeof t==\"string\"?t.split(\",\").map(e=>Number.parseInt(e,10)):typeof t==\"function\"?e=>t(e,this._element):t}_resolvePossibleFunction(t){return j(t,[this._element,this._element])}_getPopperConfig(t){let e={placement:t,modifiers:[{name:\"flip\",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:\"offset\",options:{offset:this._getOffset()}},{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"arrow\",options:{element:`.${this.constructor.NAME}-arrow`}},{name:\"preSetPlacement\",enabled:!0,phase:\"beforeMain\",fn:r=>{this._getTipElement().setAttribute(\"data-popper-placement\",r.state.placement)}}]};return{...e,...j(this._config.popperConfig,[void 0,e])}}_setListeners(){let t=this._config.trigger.split(\" \");for(let e of t)if(e===\"click\")l.on(this._element,this.constructor.eventName(ll),this._config.selector,r=>{let n=this._initializeOnDelegatedTarget(r);n._activeTrigger[Di]=!(n._isShown()&&n._activeTrigger[Di]),n.toggle()});else if(e!==il){let r=e===he?this.constructor.eventName(fl):this.constructor.eventName(cl),n=e===he?this.constructor.eventName(dl):this.constructor.eventName(ul);l.on(this._element,r,this._config.selector,o=>{let s=this._initializeOnDelegatedTarget(o);s._activeTrigger[o.type===\"focusin\"?Si:he]=!0,s._enter()}),l.on(this._element,n,this._config.selector,o=>{let s=this._initializeOnDelegatedTarget(o);s._activeTrigger[o.type===\"focusout\"?Si:he]=s._element.contains(o.relatedTarget),s._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},l.on(this._element.closest(kr),Vr,this._hideModalHandler)}_fixTitle(){let t=this._element.getAttribute(\"title\");t&&(!this._element.getAttribute(\"aria-label\")&&!this._element.textContent.trim()&&this._element.setAttribute(\"aria-label\",t),this._element.setAttribute(\"data-bs-original-title\",t),this._element.removeAttribute(\"title\"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){let e=st.getDataAttributes(this._element);for(let r of Object.keys(e))Ja.has(r)&&delete e[r];return t={...e,...typeof t==\"object\"&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=t.container===!1?document.body:dt(t.container),typeof t.delay==\"number\"&&(t.delay={show:t.delay,hide:t.delay}),typeof t.title==\"number\"&&(t.title=t.title.toString()),typeof t.content==\"number\"&&(t.content=t.content.toString()),t}_getDelegateConfig(){let t={};for(let[e,r]of Object.entries(this._config))this.constructor.Default[e]!==r&&(t[e]=r);return t.selector=!1,t.trigger=\"manual\",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this,t);if(typeof t==\"string\"){if(typeof e[t]>\"u\")throw new TypeError(`No method named \"${t}\"`);e[t]()}})}};X(Zt);var _l=\"popover\",gl=\".popover-header\",El=\".popover-body\",vl={...Zt.Default,content:\"\",offset:[0,8],placement:\"right\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"popover-arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>',trigger:\"click\"},bl={...Zt.DefaultType,content:\"(null|string|element|function)\"},Hi=class i extends Zt{static get Default(){return vl}static get DefaultType(){return bl}static get NAME(){return _l}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[gl]:this._getTitle(),[El]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this,t);if(typeof t==\"string\"){if(typeof e[t]>\"u\")throw new TypeError(`No method named \"${t}\"`);e[t]()}})}};X(Hi);var Al=\"scrollspy\",Tl=\"bs.scrollspy\",Fi=`.${Tl}`,yl=\".data-api\",wl=`activate${Fi}`,Hr=`click${Fi}`,Ol=`load${Fi}${yl}`,Cl=\"dropdown-item\",Gt=\"active\",Nl='[data-bs-spy=\"scroll\"]',Li=\"[href]\",Sl=\".nav, .list-group\",Wr=\".nav-link\",Dl=\".nav-item\",Ll=\".list-group-item\",xl=`${Wr}, ${Dl} > ${Wr}, ${Ll}`,$l=\".dropdown\",Il=\".dropdown-toggle\",Pl={offset:null,rootMargin:\"0px 0px -25%\",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Ml={offset:\"(number|null)\",rootMargin:\"string\",smoothScroll:\"boolean\",target:\"element\",threshold:\"array\"},Qe=class i extends K{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY===\"visible\"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Pl}static get DefaultType(){return Ml}static get NAME(){return Al}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(let t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=dt(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,typeof t.threshold==\"string\"&&(t.threshold=t.threshold.split(\",\").map(e=>Number.parseFloat(e))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(l.off(this._config.target,Hr),l.on(this._config.target,Hr,Li,t=>{let e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();let r=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(r.scrollTo){r.scrollTo({top:n,behavior:\"smooth\"});return}r.scrollTop=n}}))}_getNewObserver(){let t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(e=>this._observerCallback(e),t)}_observerCallback(t){let e=s=>this._targetLinks.get(`#${s.target.id}`),r=s=>{this._previousScrollData.visibleEntryTop=s.target.offsetTop,this._process(e(s))},n=(this._rootElement||document.documentElement).scrollTop,o=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(let s of t){if(!s.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(s));continue}let a=s.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(o&&a){if(r(s),!n)return;continue}!o&&!a&&r(s)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;let t=d.find(Li,this._config.target);for(let e of t){if(!e.hash||pt(e))continue;let r=d.findOne(decodeURI(e.hash),this._element);Jt(r)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,r))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(Gt),this._activateParents(t),l.trigger(this._element,wl,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains(Cl)){d.findOne(Il,t.closest($l)).classList.add(Gt);return}for(let e of d.parents(t,Sl))for(let r of d.prev(e,xl))r.classList.add(Gt)}_clearActiveClass(t){t.classList.remove(Gt);let e=d.find(`${Li}.${Gt}`,t);for(let r of e)r.classList.remove(Gt)}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this,t);if(typeof t==\"string\"){if(e[t]===void 0||t.startsWith(\"_\")||t===\"constructor\")throw new TypeError(`No method named \"${t}\"`);e[t]()}})}};l.on(window,Ol,()=>{for(let i of d.find(Nl))Qe.getOrCreateInstance(i)});X(Qe);var Rl=\"tab\",kl=\"bs.tab\",Rt=`.${kl}`,Vl=`hide${Rt}`,Hl=`hidden${Rt}`,Wl=`show${Rt}`,Bl=`shown${Rt}`,jl=`click${Rt}`,Fl=`keydown${Rt}`,Kl=`load${Rt}`,Yl=\"ArrowLeft\",Br=\"ArrowRight\",Ul=\"ArrowUp\",jr=\"ArrowDown\",xi=\"Home\",Fr=\"End\",It=\"active\",Kr=\"fade\",$i=\"show\",Gl=\"dropdown\",En=\".dropdown-toggle\",zl=\".dropdown-menu\",Ii=`:not(${En})`,ql='.list-group, .nav, [role=\"tablist\"]',Xl=\".nav-item, .list-group-item\",Ql=`.nav-link${Ii}, .list-group-item${Ii}, [role=\"tab\"]${Ii}`,vn='[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]',Pi=`${Ql}, ${vn}`,Zl=`.${It}[data-bs-toggle=\"tab\"], .${It}[data-bs-toggle=\"pill\"], .${It}[data-bs-toggle=\"list\"]`,ge=class i extends K{constructor(t){super(t),this._parent=this._element.closest(ql),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),l.on(this._element,Fl,e=>this._keydown(e)))}static get NAME(){return Rl}show(){let t=this._element;if(this._elemIsActive(t))return;let e=this._getActiveElem(),r=e?l.trigger(e,Vl,{relatedTarget:t}):null;l.trigger(t,Wl,{relatedTarget:e}).defaultPrevented||r&&r.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){if(!t)return;t.classList.add(It),this._activate(d.getElementFromSelector(t));let r=()=>{if(t.getAttribute(\"role\")!==\"tab\"){t.classList.add($i);return}t.removeAttribute(\"tabindex\"),t.setAttribute(\"aria-selected\",!0),this._toggleDropDown(t,!0),l.trigger(t,Bl,{relatedTarget:e})};this._queueCallback(r,t,t.classList.contains(Kr))}_deactivate(t,e){if(!t)return;t.classList.remove(It),t.blur(),this._deactivate(d.getElementFromSelector(t));let r=()=>{if(t.getAttribute(\"role\")!==\"tab\"){t.classList.remove($i);return}t.setAttribute(\"aria-selected\",!1),t.setAttribute(\"tabindex\",\"-1\"),this._toggleDropDown(t,!1),l.trigger(t,Hl,{relatedTarget:e})};this._queueCallback(r,t,t.classList.contains(Kr))}_keydown(t){if(![Yl,Br,Ul,jr,xi,Fr].includes(t.key))return;t.stopPropagation(),t.preventDefault();let e=this._getChildren().filter(n=>!pt(n)),r;if([xi,Fr].includes(t.key))r=e[t.key===xi?0:e.length-1];else{let n=[Br,jr].includes(t.key);r=Wi(e,t.target,n,!0)}r&&(r.focus({preventScroll:!0}),i.getOrCreateInstance(r).show())}_getChildren(){return d.find(Pi,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,\"role\",\"tablist\");for(let r of e)this._setInitialAttributesOnChild(r)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);let e=this._elemIsActive(t),r=this._getOuterElement(t);t.setAttribute(\"aria-selected\",e),r!==t&&this._setAttributeIfNotExists(r,\"role\",\"presentation\"),e||t.setAttribute(\"tabindex\",\"-1\"),this._setAttributeIfNotExists(t,\"role\",\"tab\"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){let e=d.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,\"role\",\"tabpanel\"),t.id&&this._setAttributeIfNotExists(e,\"aria-labelledby\",`${t.id}`))}_toggleDropDown(t,e){let r=this._getOuterElement(t);if(!r.classList.contains(Gl))return;let n=(o,s)=>{let a=d.findOne(o,r);a&&a.classList.toggle(s,e)};n(En,It),n(zl,$i),r.setAttribute(\"aria-expanded\",e)}_setAttributeIfNotExists(t,e,r){t.hasAttribute(e)||t.setAttribute(e,r)}_elemIsActive(t){return t.classList.contains(It)}_getInnerElement(t){return t.matches(Pi)?t:d.findOne(Pi,t)}_getOuterElement(t){return t.closest(Xl)||t}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this);if(typeof t==\"string\"){if(e[t]===void 0||t.startsWith(\"_\")||t===\"constructor\")throw new TypeError(`No method named \"${t}\"`);e[t]()}})}};l.on(document,jl,vn,function(i){[\"A\",\"AREA\"].includes(this.tagName)&&i.preventDefault(),!pt(this)&&ge.getOrCreateInstance(this).show()});l.on(window,Kl,()=>{for(let i of d.find(Zl))ge.getOrCreateInstance(i)});X(ge);var Jl=\"toast\",tc=\"bs.toast\",gt=`.${tc}`,ec=`mouseover${gt}`,ic=`mouseout${gt}`,rc=`focusin${gt}`,nc=`focusout${gt}`,oc=`hide${gt}`,sc=`hidden${gt}`,ac=`show${gt}`,lc=`shown${gt}`,cc=\"fade\",Yr=\"hide\",He=\"show\",We=\"showing\",uc={animation:\"boolean\",autohide:\"boolean\",delay:\"number\"},fc={animation:!0,autohide:!0,delay:5e3},Ze=class i extends K{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return fc}static get DefaultType(){return uc}static get NAME(){return Jl}show(){if(l.trigger(this._element,ac).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(cc);let e=()=>{this._element.classList.remove(We),l.trigger(this._element,lc),this._maybeScheduleHide()};this._element.classList.remove(Yr),Ee(this._element),this._element.classList.add(He,We),this._queueCallback(e,this._element,this._config.animation)}hide(){if(!this.isShown()||l.trigger(this._element,oc).defaultPrevented)return;let e=()=>{this._element.classList.add(Yr),this._element.classList.remove(We,He),l.trigger(this._element,sc)};this._element.classList.add(We),this._queueCallback(e,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(He),super.dispose()}isShown(){return this._element.classList.contains(He)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case\"mouseover\":case\"mouseout\":{this._hasMouseInteraction=e;break}case\"focusin\":case\"focusout\":{this._hasKeyboardInteraction=e;break}}if(e){this._clearTimeout();return}let r=t.relatedTarget;this._element===r||this._element.contains(r)||this._maybeScheduleHide()}_setListeners(){l.on(this._element,ec,t=>this._onInteraction(t,!0)),l.on(this._element,ic,t=>this._onInteraction(t,!1)),l.on(this._element,rc,t=>this._onInteraction(t,!0)),l.on(this._element,nc,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){let e=i.getOrCreateInstance(this,t);if(typeof t==\"string\"){if(typeof e[t]>\"u\")throw new TypeError(`No method named \"${t}\"`);e[t](this)}})}};Je(Ze);X(Ze);export{Ke as Alert,Ye as Button,me as Carousel,Ge as Collapse,ht as Dropdown,Qt as Modal,mt as Offcanvas,Hi as Popover,Qe as ScrollSpy,ge as Tab,Ze as Toast,Zt as Tooltip};\n/*! Bundled license information:\n\nbootstrap/dist/js/bootstrap.esm.js:\n  (*!\n    * Bootstrap v5.3.8 (https://getbootstrap.com/)\n    * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n    * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n    *)\n*/\n"
  },
  {
    "path": "modules/system/assets/vendor/bootstrap/src/_variables-dark.scss",
    "content": "$body-bg-dark: #202124;\n$headings-color-dark: white;\n// $focus-ring-color-dark: rgba(53, 66, 91, 0.5);\n\n$gray-100: #f8f9fa;\n$gray-200: #e9ecef;\n$gray-300: #dee2e6;\n$gray-400: #ced4da;\n$gray-500: #adb5bd;\n$gray-600: #6c757d;\n$gray-700: #495057;\n$gray-800: #343a40;\n$gray-900: #212529;\n"
  },
  {
    "path": "modules/system/assets/vendor/bootstrap/src/_variables.scss",
    "content": "$body-color: #333;\n$body-bg: #fafbfd;\n$link-color: #3498db;\n$line-height-base: 1.428571429; // 20/14\n\n$link-decoration: none;\n$link-hover-decoration: underline;\n\n$border-radius: .3rem;\n$border-radius-sm: .25rem;\n$border-radius-lg: .35rem;\n\n$gray-100: #f0f4f8;\n$gray-200: #e9ecef;\n$gray-300: #d7e1eA;\n$gray-400: #ced4da;\n$gray-500: #adb5bd;\n$gray-600: #72809d;\n$gray-700: #506880;\n$gray-800: #35425b;\n$gray-900: #212529;\n\n$blue:    #0090c0;\n$indigo:  #6a6cf7;\n$orange:  #e67e22;\n$red:     #ff3e1d;\n$green:   #86cB43;\n$cyan:    #5bc0de;\n$yellow:  #f0ad4e;\n$teal:    #6bc48d;\n\n$primary: $indigo;\n$warning: $orange;\n\n$body-tertiary-bg: #f0f4f8;\n\n$headings-color: #35425b;\n$focus-ring-color: rgba(53, 66, 91, 0.1); // gray-800\n\n$input-bg: var(--oc-form-control-bg);\n$input-disabled-bg: var(--oc-form-control-disabled-bg);\n$input-placeholder-color: var(--bs-tertiary-color);\n\n$input-padding-y: .525rem;\n$input-padding-x: 1rem;\n\n$btn-padding-y: .6rem;\n$btn-padding-x: 1.25rem;\n$btn-font-size: .95rem;\n\n$btn-padding-y-sm: .4rem;\n$btn-padding-x-sm: .85rem;\n$btn-font-size-sm: .875rem;\n\n$tooltip-color: white;\n$tooltip-bg: #536061;\n$form-label-margin-bottom: .385rem;\n\n$form-check-input-width: 1.143em;\n$form-switch-width: 2.2em;\n$form-switch-height: 1.4em;\n"
  },
  {
    "path": "modules/system/assets/vendor/bootstrap/src/bootstrap-lite.scss",
    "content": "// Override Bootstrap's Sass default variables\n//\n// Nearly all variables in Bootstrap are written with the `!default` flag.\n// This allows you to override the default values of those variables before\n// you import Bootstrap's source Sass files.\n//\n// Overriding the default variable values is the best way to customize your\n// CSS without writing _new_ styles. For example, change you can either change\n// `$body-color` or write more CSS that override's Bootstrap's CSS like so:\n// `body { color: red; }`.\n\n@import \"variables\";\n@import \"variables-dark\";\n\n@import \"bootstrap/scss/functions\"; // Required\n@import \"bootstrap/scss/variables\"; // Required\n@import \"bootstrap/scss/variables-dark\"; // Required\n@import \"bootstrap/scss/maps\"; // Required\n@import \"bootstrap/scss/mixins\"; // Required\n@import \"bootstrap/scss/utilities\";\n\n@import \"bootstrap/scss/root\"; // Required\n@import \"bootstrap/scss/reboot\"; // Required\n@import \"bootstrap/scss/type\";\n@import \"bootstrap/scss/images\";\n@import \"bootstrap/scss/containers\";\n@import \"bootstrap/scss/grid\";\n"
  },
  {
    "path": "modules/system/assets/vendor/bootstrap/src/bootstrap.scss",
    "content": "// Override Bootstrap's Sass default variables\n//\n// Nearly all variables in Bootstrap are written with the `!default` flag.\n// This allows you to override the default values of those variables before\n// you import Bootstrap's source Sass files.\n//\n// Overriding the default variable values is the best way to customize your\n// CSS without writing _new_ styles. For example, change you can either change\n// `$body-color` or write more CSS that override's Bootstrap's CSS like so:\n// `body { color: red; }`.\n\n@import \"variables\";\n@import \"variables-dark\";\n\n@import \"bootstrap/scss/functions\"; // Required\n@import \"bootstrap/scss/variables\"; // Required\n@import \"bootstrap/scss/variables-dark\"; // Required\n@import \"bootstrap/scss/maps\"; // Required\n@import \"bootstrap/scss/mixins\"; // Required\n@import \"bootstrap/scss/utilities\";\n\n@import \"bootstrap/scss/root\"; // Required\n@import \"bootstrap/scss/reboot\"; // Required\n@import \"bootstrap/scss/type\";\n@import \"bootstrap/scss/images\";\n@import \"bootstrap/scss/containers\";\n@import \"bootstrap/scss/grid\";\n@import \"bootstrap/scss/tables\";\n@import \"bootstrap/scss/forms\";\n@import \"bootstrap/scss/buttons\";\n@import \"bootstrap/scss/transitions\";\n@import \"bootstrap/scss/dropdown\";\n@import \"bootstrap/scss/button-group\";\n@import \"bootstrap/scss/nav\";\n// @import \"bootstrap/scss/navbar\"; // Requires nav\n@import \"bootstrap/scss/card\";\n@import \"bootstrap/scss/accordion\";\n@import \"bootstrap/scss/breadcrumb\";\n@import \"bootstrap/scss/pagination\";\n@import \"bootstrap/scss/badge\";\n@import \"bootstrap/scss/alert\";\n@import \"bootstrap/scss/progress\";\n@import \"bootstrap/scss/list-group\";\n@import \"bootstrap/scss/close\";\n@import \"bootstrap/scss/toasts\";\n@import \"bootstrap/scss/modal\"; // Requires transitions\n@import \"bootstrap/scss/tooltip\";\n@import \"bootstrap/scss/popover\";\n@import \"bootstrap/scss/carousel\";\n@import \"bootstrap/scss/spinners\";\n@import \"bootstrap/scss/offcanvas\";\n@import \"bootstrap/scss/placeholders\";\n\n// Helpers\n@import \"bootstrap/scss/helpers\";\n\n// Utilities\n@import \"bootstrap/scss/utilities/api\";\n\n// Custom CSS\n.form-switch {\n    .form-check-label {\n        position: relative;\n        top: 1px;\n    }\n\n    .form-check-input {\n        height: $form-switch-height;\n    }\n}\n\n.btn-close {\n    border-radius: 20px;\n}\n"
  },
  {
    "path": "modules/system/assets/vendor/bootstrap-icons/bootstrap-icons.css",
    "content": "/*!\n * Bootstrap Icons v1.13.1 (https://icons.getbootstrap.com/)\n * Copyright 2019-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE)\n */@font-face{font-display:block;font-family:bootstrap-icons;src:url(\"fonts/bootstrap-icons.woff2?e34853135f9e39acf64315236852cd5a\") format(\"woff2\"),url(\"fonts/bootstrap-icons.woff?e34853135f9e39acf64315236852cd5a\") format(\"woff\")}.bi::before,[class*=\" bi-\"]::before,[class^=bi-]::before{display:inline-block;font-family:bootstrap-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;line-height:1;vertical-align:-.125em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bi-123::before{content:\"\\f67f\"}.bi-alarm-fill::before{content:\"\\f101\"}.bi-alarm::before{content:\"\\f102\"}.bi-align-bottom::before{content:\"\\f103\"}.bi-align-center::before{content:\"\\f104\"}.bi-align-end::before{content:\"\\f105\"}.bi-align-middle::before{content:\"\\f106\"}.bi-align-start::before{content:\"\\f107\"}.bi-align-top::before{content:\"\\f108\"}.bi-alt::before{content:\"\\f109\"}.bi-app-indicator::before{content:\"\\f10a\"}.bi-app::before{content:\"\\f10b\"}.bi-archive-fill::before{content:\"\\f10c\"}.bi-archive::before{content:\"\\f10d\"}.bi-arrow-90deg-down::before{content:\"\\f10e\"}.bi-arrow-90deg-left::before{content:\"\\f10f\"}.bi-arrow-90deg-right::before{content:\"\\f110\"}.bi-arrow-90deg-up::before{content:\"\\f111\"}.bi-arrow-bar-down::before{content:\"\\f112\"}.bi-arrow-bar-left::before{content:\"\\f113\"}.bi-arrow-bar-right::before{content:\"\\f114\"}.bi-arrow-bar-up::before{content:\"\\f115\"}.bi-arrow-clockwise::before{content:\"\\f116\"}.bi-arrow-counterclockwise::before{content:\"\\f117\"}.bi-arrow-down-circle-fill::before{content:\"\\f118\"}.bi-arrow-down-circle::before{content:\"\\f119\"}.bi-arrow-down-left-circle-fill::before{content:\"\\f11a\"}.bi-arrow-down-left-circle::before{content:\"\\f11b\"}.bi-arrow-down-left-square-fill::before{content:\"\\f11c\"}.bi-arrow-down-left-square::before{content:\"\\f11d\"}.bi-arrow-down-left::before{content:\"\\f11e\"}.bi-arrow-down-right-circle-fill::before{content:\"\\f11f\"}.bi-arrow-down-right-circle::before{content:\"\\f120\"}.bi-arrow-down-right-square-fill::before{content:\"\\f121\"}.bi-arrow-down-right-square::before{content:\"\\f122\"}.bi-arrow-down-right::before{content:\"\\f123\"}.bi-arrow-down-short::before{content:\"\\f124\"}.bi-arrow-down-square-fill::before{content:\"\\f125\"}.bi-arrow-down-square::before{content:\"\\f126\"}.bi-arrow-down-up::before{content:\"\\f127\"}.bi-arrow-down::before{content:\"\\f128\"}.bi-arrow-left-circle-fill::before{content:\"\\f129\"}.bi-arrow-left-circle::before{content:\"\\f12a\"}.bi-arrow-left-right::before{content:\"\\f12b\"}.bi-arrow-left-short::before{content:\"\\f12c\"}.bi-arrow-left-square-fill::before{content:\"\\f12d\"}.bi-arrow-left-square::before{content:\"\\f12e\"}.bi-arrow-left::before{content:\"\\f12f\"}.bi-arrow-repeat::before{content:\"\\f130\"}.bi-arrow-return-left::before{content:\"\\f131\"}.bi-arrow-return-right::before{content:\"\\f132\"}.bi-arrow-right-circle-fill::before{content:\"\\f133\"}.bi-arrow-right-circle::before{content:\"\\f134\"}.bi-arrow-right-short::before{content:\"\\f135\"}.bi-arrow-right-square-fill::before{content:\"\\f136\"}.bi-arrow-right-square::before{content:\"\\f137\"}.bi-arrow-right::before{content:\"\\f138\"}.bi-arrow-up-circle-fill::before{content:\"\\f139\"}.bi-arrow-up-circle::before{content:\"\\f13a\"}.bi-arrow-up-left-circle-fill::before{content:\"\\f13b\"}.bi-arrow-up-left-circle::before{content:\"\\f13c\"}.bi-arrow-up-left-square-fill::before{content:\"\\f13d\"}.bi-arrow-up-left-square::before{content:\"\\f13e\"}.bi-arrow-up-left::before{content:\"\\f13f\"}.bi-arrow-up-right-circle-fill::before{content:\"\\f140\"}.bi-arrow-up-right-circle::before{content:\"\\f141\"}.bi-arrow-up-right-square-fill::before{content:\"\\f142\"}.bi-arrow-up-right-square::before{content:\"\\f143\"}.bi-arrow-up-right::before{content:\"\\f144\"}.bi-arrow-up-short::before{content:\"\\f145\"}.bi-arrow-up-square-fill::before{content:\"\\f146\"}.bi-arrow-up-square::before{content:\"\\f147\"}.bi-arrow-up::before{content:\"\\f148\"}.bi-arrows-angle-contract::before{content:\"\\f149\"}.bi-arrows-angle-expand::before{content:\"\\f14a\"}.bi-arrows-collapse::before{content:\"\\f14b\"}.bi-arrows-expand::before{content:\"\\f14c\"}.bi-arrows-fullscreen::before{content:\"\\f14d\"}.bi-arrows-move::before{content:\"\\f14e\"}.bi-aspect-ratio-fill::before{content:\"\\f14f\"}.bi-aspect-ratio::before{content:\"\\f150\"}.bi-asterisk::before{content:\"\\f151\"}.bi-at::before{content:\"\\f152\"}.bi-award-fill::before{content:\"\\f153\"}.bi-award::before{content:\"\\f154\"}.bi-back::before{content:\"\\f155\"}.bi-backspace-fill::before{content:\"\\f156\"}.bi-backspace-reverse-fill::before{content:\"\\f157\"}.bi-backspace-reverse::before{content:\"\\f158\"}.bi-backspace::before{content:\"\\f159\"}.bi-badge-3d-fill::before{content:\"\\f15a\"}.bi-badge-3d::before{content:\"\\f15b\"}.bi-badge-4k-fill::before{content:\"\\f15c\"}.bi-badge-4k::before{content:\"\\f15d\"}.bi-badge-8k-fill::before{content:\"\\f15e\"}.bi-badge-8k::before{content:\"\\f15f\"}.bi-badge-ad-fill::before{content:\"\\f160\"}.bi-badge-ad::before{content:\"\\f161\"}.bi-badge-ar-fill::before{content:\"\\f162\"}.bi-badge-ar::before{content:\"\\f163\"}.bi-badge-cc-fill::before{content:\"\\f164\"}.bi-badge-cc::before{content:\"\\f165\"}.bi-badge-hd-fill::before{content:\"\\f166\"}.bi-badge-hd::before{content:\"\\f167\"}.bi-badge-tm-fill::before{content:\"\\f168\"}.bi-badge-tm::before{content:\"\\f169\"}.bi-badge-vo-fill::before{content:\"\\f16a\"}.bi-badge-vo::before{content:\"\\f16b\"}.bi-badge-vr-fill::before{content:\"\\f16c\"}.bi-badge-vr::before{content:\"\\f16d\"}.bi-badge-wc-fill::before{content:\"\\f16e\"}.bi-badge-wc::before{content:\"\\f16f\"}.bi-bag-check-fill::before{content:\"\\f170\"}.bi-bag-check::before{content:\"\\f171\"}.bi-bag-dash-fill::before{content:\"\\f172\"}.bi-bag-dash::before{content:\"\\f173\"}.bi-bag-fill::before{content:\"\\f174\"}.bi-bag-plus-fill::before{content:\"\\f175\"}.bi-bag-plus::before{content:\"\\f176\"}.bi-bag-x-fill::before{content:\"\\f177\"}.bi-bag-x::before{content:\"\\f178\"}.bi-bag::before{content:\"\\f179\"}.bi-bar-chart-fill::before{content:\"\\f17a\"}.bi-bar-chart-line-fill::before{content:\"\\f17b\"}.bi-bar-chart-line::before{content:\"\\f17c\"}.bi-bar-chart-steps::before{content:\"\\f17d\"}.bi-bar-chart::before{content:\"\\f17e\"}.bi-basket-fill::before{content:\"\\f17f\"}.bi-basket::before{content:\"\\f180\"}.bi-basket2-fill::before{content:\"\\f181\"}.bi-basket2::before{content:\"\\f182\"}.bi-basket3-fill::before{content:\"\\f183\"}.bi-basket3::before{content:\"\\f184\"}.bi-battery-charging::before{content:\"\\f185\"}.bi-battery-full::before{content:\"\\f186\"}.bi-battery-half::before{content:\"\\f187\"}.bi-battery::before{content:\"\\f188\"}.bi-bell-fill::before{content:\"\\f189\"}.bi-bell::before{content:\"\\f18a\"}.bi-bezier::before{content:\"\\f18b\"}.bi-bezier2::before{content:\"\\f18c\"}.bi-bicycle::before{content:\"\\f18d\"}.bi-binoculars-fill::before{content:\"\\f18e\"}.bi-binoculars::before{content:\"\\f18f\"}.bi-blockquote-left::before{content:\"\\f190\"}.bi-blockquote-right::before{content:\"\\f191\"}.bi-book-fill::before{content:\"\\f192\"}.bi-book-half::before{content:\"\\f193\"}.bi-book::before{content:\"\\f194\"}.bi-bookmark-check-fill::before{content:\"\\f195\"}.bi-bookmark-check::before{content:\"\\f196\"}.bi-bookmark-dash-fill::before{content:\"\\f197\"}.bi-bookmark-dash::before{content:\"\\f198\"}.bi-bookmark-fill::before{content:\"\\f199\"}.bi-bookmark-heart-fill::before{content:\"\\f19a\"}.bi-bookmark-heart::before{content:\"\\f19b\"}.bi-bookmark-plus-fill::before{content:\"\\f19c\"}.bi-bookmark-plus::before{content:\"\\f19d\"}.bi-bookmark-star-fill::before{content:\"\\f19e\"}.bi-bookmark-star::before{content:\"\\f19f\"}.bi-bookmark-x-fill::before{content:\"\\f1a0\"}.bi-bookmark-x::before{content:\"\\f1a1\"}.bi-bookmark::before{content:\"\\f1a2\"}.bi-bookmarks-fill::before{content:\"\\f1a3\"}.bi-bookmarks::before{content:\"\\f1a4\"}.bi-bookshelf::before{content:\"\\f1a5\"}.bi-bootstrap-fill::before{content:\"\\f1a6\"}.bi-bootstrap-reboot::before{content:\"\\f1a7\"}.bi-bootstrap::before{content:\"\\f1a8\"}.bi-border-all::before{content:\"\\f1a9\"}.bi-border-bottom::before{content:\"\\f1aa\"}.bi-border-center::before{content:\"\\f1ab\"}.bi-border-inner::before{content:\"\\f1ac\"}.bi-border-left::before{content:\"\\f1ad\"}.bi-border-middle::before{content:\"\\f1ae\"}.bi-border-outer::before{content:\"\\f1af\"}.bi-border-right::before{content:\"\\f1b0\"}.bi-border-style::before{content:\"\\f1b1\"}.bi-border-top::before{content:\"\\f1b2\"}.bi-border-width::before{content:\"\\f1b3\"}.bi-border::before{content:\"\\f1b4\"}.bi-bounding-box-circles::before{content:\"\\f1b5\"}.bi-bounding-box::before{content:\"\\f1b6\"}.bi-box-arrow-down-left::before{content:\"\\f1b7\"}.bi-box-arrow-down-right::before{content:\"\\f1b8\"}.bi-box-arrow-down::before{content:\"\\f1b9\"}.bi-box-arrow-in-down-left::before{content:\"\\f1ba\"}.bi-box-arrow-in-down-right::before{content:\"\\f1bb\"}.bi-box-arrow-in-down::before{content:\"\\f1bc\"}.bi-box-arrow-in-left::before{content:\"\\f1bd\"}.bi-box-arrow-in-right::before{content:\"\\f1be\"}.bi-box-arrow-in-up-left::before{content:\"\\f1bf\"}.bi-box-arrow-in-up-right::before{content:\"\\f1c0\"}.bi-box-arrow-in-up::before{content:\"\\f1c1\"}.bi-box-arrow-left::before{content:\"\\f1c2\"}.bi-box-arrow-right::before{content:\"\\f1c3\"}.bi-box-arrow-up-left::before{content:\"\\f1c4\"}.bi-box-arrow-up-right::before{content:\"\\f1c5\"}.bi-box-arrow-up::before{content:\"\\f1c6\"}.bi-box-seam::before{content:\"\\f1c7\"}.bi-box::before{content:\"\\f1c8\"}.bi-braces::before{content:\"\\f1c9\"}.bi-bricks::before{content:\"\\f1ca\"}.bi-briefcase-fill::before{content:\"\\f1cb\"}.bi-briefcase::before{content:\"\\f1cc\"}.bi-brightness-alt-high-fill::before{content:\"\\f1cd\"}.bi-brightness-alt-high::before{content:\"\\f1ce\"}.bi-brightness-alt-low-fill::before{content:\"\\f1cf\"}.bi-brightness-alt-low::before{content:\"\\f1d0\"}.bi-brightness-high-fill::before{content:\"\\f1d1\"}.bi-brightness-high::before{content:\"\\f1d2\"}.bi-brightness-low-fill::before{content:\"\\f1d3\"}.bi-brightness-low::before{content:\"\\f1d4\"}.bi-broadcast-pin::before{content:\"\\f1d5\"}.bi-broadcast::before{content:\"\\f1d6\"}.bi-brush-fill::before{content:\"\\f1d7\"}.bi-brush::before{content:\"\\f1d8\"}.bi-bucket-fill::before{content:\"\\f1d9\"}.bi-bucket::before{content:\"\\f1da\"}.bi-bug-fill::before{content:\"\\f1db\"}.bi-bug::before{content:\"\\f1dc\"}.bi-building::before{content:\"\\f1dd\"}.bi-bullseye::before{content:\"\\f1de\"}.bi-calculator-fill::before{content:\"\\f1df\"}.bi-calculator::before{content:\"\\f1e0\"}.bi-calendar-check-fill::before{content:\"\\f1e1\"}.bi-calendar-check::before{content:\"\\f1e2\"}.bi-calendar-date-fill::before{content:\"\\f1e3\"}.bi-calendar-date::before{content:\"\\f1e4\"}.bi-calendar-day-fill::before{content:\"\\f1e5\"}.bi-calendar-day::before{content:\"\\f1e6\"}.bi-calendar-event-fill::before{content:\"\\f1e7\"}.bi-calendar-event::before{content:\"\\f1e8\"}.bi-calendar-fill::before{content:\"\\f1e9\"}.bi-calendar-minus-fill::before{content:\"\\f1ea\"}.bi-calendar-minus::before{content:\"\\f1eb\"}.bi-calendar-month-fill::before{content:\"\\f1ec\"}.bi-calendar-month::before{content:\"\\f1ed\"}.bi-calendar-plus-fill::before{content:\"\\f1ee\"}.bi-calendar-plus::before{content:\"\\f1ef\"}.bi-calendar-range-fill::before{content:\"\\f1f0\"}.bi-calendar-range::before{content:\"\\f1f1\"}.bi-calendar-week-fill::before{content:\"\\f1f2\"}.bi-calendar-week::before{content:\"\\f1f3\"}.bi-calendar-x-fill::before{content:\"\\f1f4\"}.bi-calendar-x::before{content:\"\\f1f5\"}.bi-calendar::before{content:\"\\f1f6\"}.bi-calendar2-check-fill::before{content:\"\\f1f7\"}.bi-calendar2-check::before{content:\"\\f1f8\"}.bi-calendar2-date-fill::before{content:\"\\f1f9\"}.bi-calendar2-date::before{content:\"\\f1fa\"}.bi-calendar2-day-fill::before{content:\"\\f1fb\"}.bi-calendar2-day::before{content:\"\\f1fc\"}.bi-calendar2-event-fill::before{content:\"\\f1fd\"}.bi-calendar2-event::before{content:\"\\f1fe\"}.bi-calendar2-fill::before{content:\"\\f1ff\"}.bi-calendar2-minus-fill::before{content:\"\\f200\"}.bi-calendar2-minus::before{content:\"\\f201\"}.bi-calendar2-month-fill::before{content:\"\\f202\"}.bi-calendar2-month::before{content:\"\\f203\"}.bi-calendar2-plus-fill::before{content:\"\\f204\"}.bi-calendar2-plus::before{content:\"\\f205\"}.bi-calendar2-range-fill::before{content:\"\\f206\"}.bi-calendar2-range::before{content:\"\\f207\"}.bi-calendar2-week-fill::before{content:\"\\f208\"}.bi-calendar2-week::before{content:\"\\f209\"}.bi-calendar2-x-fill::before{content:\"\\f20a\"}.bi-calendar2-x::before{content:\"\\f20b\"}.bi-calendar2::before{content:\"\\f20c\"}.bi-calendar3-event-fill::before{content:\"\\f20d\"}.bi-calendar3-event::before{content:\"\\f20e\"}.bi-calendar3-fill::before{content:\"\\f20f\"}.bi-calendar3-range-fill::before{content:\"\\f210\"}.bi-calendar3-range::before{content:\"\\f211\"}.bi-calendar3-week-fill::before{content:\"\\f212\"}.bi-calendar3-week::before{content:\"\\f213\"}.bi-calendar3::before{content:\"\\f214\"}.bi-calendar4-event::before{content:\"\\f215\"}.bi-calendar4-range::before{content:\"\\f216\"}.bi-calendar4-week::before{content:\"\\f217\"}.bi-calendar4::before{content:\"\\f218\"}.bi-camera-fill::before{content:\"\\f219\"}.bi-camera-reels-fill::before{content:\"\\f21a\"}.bi-camera-reels::before{content:\"\\f21b\"}.bi-camera-video-fill::before{content:\"\\f21c\"}.bi-camera-video-off-fill::before{content:\"\\f21d\"}.bi-camera-video-off::before{content:\"\\f21e\"}.bi-camera-video::before{content:\"\\f21f\"}.bi-camera::before{content:\"\\f220\"}.bi-camera2::before{content:\"\\f221\"}.bi-capslock-fill::before{content:\"\\f222\"}.bi-capslock::before{content:\"\\f223\"}.bi-card-checklist::before{content:\"\\f224\"}.bi-card-heading::before{content:\"\\f225\"}.bi-card-image::before{content:\"\\f226\"}.bi-card-list::before{content:\"\\f227\"}.bi-card-text::before{content:\"\\f228\"}.bi-caret-down-fill::before{content:\"\\f229\"}.bi-caret-down-square-fill::before{content:\"\\f22a\"}.bi-caret-down-square::before{content:\"\\f22b\"}.bi-caret-down::before{content:\"\\f22c\"}.bi-caret-left-fill::before{content:\"\\f22d\"}.bi-caret-left-square-fill::before{content:\"\\f22e\"}.bi-caret-left-square::before{content:\"\\f22f\"}.bi-caret-left::before{content:\"\\f230\"}.bi-caret-right-fill::before{content:\"\\f231\"}.bi-caret-right-square-fill::before{content:\"\\f232\"}.bi-caret-right-square::before{content:\"\\f233\"}.bi-caret-right::before{content:\"\\f234\"}.bi-caret-up-fill::before{content:\"\\f235\"}.bi-caret-up-square-fill::before{content:\"\\f236\"}.bi-caret-up-square::before{content:\"\\f237\"}.bi-caret-up::before{content:\"\\f238\"}.bi-cart-check-fill::before{content:\"\\f239\"}.bi-cart-check::before{content:\"\\f23a\"}.bi-cart-dash-fill::before{content:\"\\f23b\"}.bi-cart-dash::before{content:\"\\f23c\"}.bi-cart-fill::before{content:\"\\f23d\"}.bi-cart-plus-fill::before{content:\"\\f23e\"}.bi-cart-plus::before{content:\"\\f23f\"}.bi-cart-x-fill::before{content:\"\\f240\"}.bi-cart-x::before{content:\"\\f241\"}.bi-cart::before{content:\"\\f242\"}.bi-cart2::before{content:\"\\f243\"}.bi-cart3::before{content:\"\\f244\"}.bi-cart4::before{content:\"\\f245\"}.bi-cash-stack::before{content:\"\\f246\"}.bi-cash::before{content:\"\\f247\"}.bi-cast::before{content:\"\\f248\"}.bi-chat-dots-fill::before{content:\"\\f249\"}.bi-chat-dots::before{content:\"\\f24a\"}.bi-chat-fill::before{content:\"\\f24b\"}.bi-chat-left-dots-fill::before{content:\"\\f24c\"}.bi-chat-left-dots::before{content:\"\\f24d\"}.bi-chat-left-fill::before{content:\"\\f24e\"}.bi-chat-left-quote-fill::before{content:\"\\f24f\"}.bi-chat-left-quote::before{content:\"\\f250\"}.bi-chat-left-text-fill::before{content:\"\\f251\"}.bi-chat-left-text::before{content:\"\\f252\"}.bi-chat-left::before{content:\"\\f253\"}.bi-chat-quote-fill::before{content:\"\\f254\"}.bi-chat-quote::before{content:\"\\f255\"}.bi-chat-right-dots-fill::before{content:\"\\f256\"}.bi-chat-right-dots::before{content:\"\\f257\"}.bi-chat-right-fill::before{content:\"\\f258\"}.bi-chat-right-quote-fill::before{content:\"\\f259\"}.bi-chat-right-quote::before{content:\"\\f25a\"}.bi-chat-right-text-fill::before{content:\"\\f25b\"}.bi-chat-right-text::before{content:\"\\f25c\"}.bi-chat-right::before{content:\"\\f25d\"}.bi-chat-square-dots-fill::before{content:\"\\f25e\"}.bi-chat-square-dots::before{content:\"\\f25f\"}.bi-chat-square-fill::before{content:\"\\f260\"}.bi-chat-square-quote-fill::before{content:\"\\f261\"}.bi-chat-square-quote::before{content:\"\\f262\"}.bi-chat-square-text-fill::before{content:\"\\f263\"}.bi-chat-square-text::before{content:\"\\f264\"}.bi-chat-square::before{content:\"\\f265\"}.bi-chat-text-fill::before{content:\"\\f266\"}.bi-chat-text::before{content:\"\\f267\"}.bi-chat::before{content:\"\\f268\"}.bi-check-all::before{content:\"\\f269\"}.bi-check-circle-fill::before{content:\"\\f26a\"}.bi-check-circle::before{content:\"\\f26b\"}.bi-check-square-fill::before{content:\"\\f26c\"}.bi-check-square::before{content:\"\\f26d\"}.bi-check::before{content:\"\\f26e\"}.bi-check2-all::before{content:\"\\f26f\"}.bi-check2-circle::before{content:\"\\f270\"}.bi-check2-square::before{content:\"\\f271\"}.bi-check2::before{content:\"\\f272\"}.bi-chevron-bar-contract::before{content:\"\\f273\"}.bi-chevron-bar-down::before{content:\"\\f274\"}.bi-chevron-bar-expand::before{content:\"\\f275\"}.bi-chevron-bar-left::before{content:\"\\f276\"}.bi-chevron-bar-right::before{content:\"\\f277\"}.bi-chevron-bar-up::before{content:\"\\f278\"}.bi-chevron-compact-down::before{content:\"\\f279\"}.bi-chevron-compact-left::before{content:\"\\f27a\"}.bi-chevron-compact-right::before{content:\"\\f27b\"}.bi-chevron-compact-up::before{content:\"\\f27c\"}.bi-chevron-contract::before{content:\"\\f27d\"}.bi-chevron-double-down::before{content:\"\\f27e\"}.bi-chevron-double-left::before{content:\"\\f27f\"}.bi-chevron-double-right::before{content:\"\\f280\"}.bi-chevron-double-up::before{content:\"\\f281\"}.bi-chevron-down::before{content:\"\\f282\"}.bi-chevron-expand::before{content:\"\\f283\"}.bi-chevron-left::before{content:\"\\f284\"}.bi-chevron-right::before{content:\"\\f285\"}.bi-chevron-up::before{content:\"\\f286\"}.bi-circle-fill::before{content:\"\\f287\"}.bi-circle-half::before{content:\"\\f288\"}.bi-circle-square::before{content:\"\\f289\"}.bi-circle::before{content:\"\\f28a\"}.bi-clipboard-check::before{content:\"\\f28b\"}.bi-clipboard-data::before{content:\"\\f28c\"}.bi-clipboard-minus::before{content:\"\\f28d\"}.bi-clipboard-plus::before{content:\"\\f28e\"}.bi-clipboard-x::before{content:\"\\f28f\"}.bi-clipboard::before{content:\"\\f290\"}.bi-clock-fill::before{content:\"\\f291\"}.bi-clock-history::before{content:\"\\f292\"}.bi-clock::before{content:\"\\f293\"}.bi-cloud-arrow-down-fill::before{content:\"\\f294\"}.bi-cloud-arrow-down::before{content:\"\\f295\"}.bi-cloud-arrow-up-fill::before{content:\"\\f296\"}.bi-cloud-arrow-up::before{content:\"\\f297\"}.bi-cloud-check-fill::before{content:\"\\f298\"}.bi-cloud-check::before{content:\"\\f299\"}.bi-cloud-download-fill::before{content:\"\\f29a\"}.bi-cloud-download::before{content:\"\\f29b\"}.bi-cloud-drizzle-fill::before{content:\"\\f29c\"}.bi-cloud-drizzle::before{content:\"\\f29d\"}.bi-cloud-fill::before{content:\"\\f29e\"}.bi-cloud-fog-fill::before{content:\"\\f29f\"}.bi-cloud-fog::before{content:\"\\f2a0\"}.bi-cloud-fog2-fill::before{content:\"\\f2a1\"}.bi-cloud-fog2::before{content:\"\\f2a2\"}.bi-cloud-hail-fill::before{content:\"\\f2a3\"}.bi-cloud-hail::before{content:\"\\f2a4\"}.bi-cloud-haze-fill::before{content:\"\\f2a6\"}.bi-cloud-haze::before{content:\"\\f2a7\"}.bi-cloud-haze2-fill::before{content:\"\\f2a8\"}.bi-cloud-lightning-fill::before{content:\"\\f2a9\"}.bi-cloud-lightning-rain-fill::before{content:\"\\f2aa\"}.bi-cloud-lightning-rain::before{content:\"\\f2ab\"}.bi-cloud-lightning::before{content:\"\\f2ac\"}.bi-cloud-minus-fill::before{content:\"\\f2ad\"}.bi-cloud-minus::before{content:\"\\f2ae\"}.bi-cloud-moon-fill::before{content:\"\\f2af\"}.bi-cloud-moon::before{content:\"\\f2b0\"}.bi-cloud-plus-fill::before{content:\"\\f2b1\"}.bi-cloud-plus::before{content:\"\\f2b2\"}.bi-cloud-rain-fill::before{content:\"\\f2b3\"}.bi-cloud-rain-heavy-fill::before{content:\"\\f2b4\"}.bi-cloud-rain-heavy::before{content:\"\\f2b5\"}.bi-cloud-rain::before{content:\"\\f2b6\"}.bi-cloud-slash-fill::before{content:\"\\f2b7\"}.bi-cloud-slash::before{content:\"\\f2b8\"}.bi-cloud-sleet-fill::before{content:\"\\f2b9\"}.bi-cloud-sleet::before{content:\"\\f2ba\"}.bi-cloud-snow-fill::before{content:\"\\f2bb\"}.bi-cloud-snow::before{content:\"\\f2bc\"}.bi-cloud-sun-fill::before{content:\"\\f2bd\"}.bi-cloud-sun::before{content:\"\\f2be\"}.bi-cloud-upload-fill::before{content:\"\\f2bf\"}.bi-cloud-upload::before{content:\"\\f2c0\"}.bi-cloud::before{content:\"\\f2c1\"}.bi-clouds-fill::before{content:\"\\f2c2\"}.bi-clouds::before{content:\"\\f2c3\"}.bi-cloudy-fill::before{content:\"\\f2c4\"}.bi-cloudy::before{content:\"\\f2c5\"}.bi-code-slash::before{content:\"\\f2c6\"}.bi-code-square::before{content:\"\\f2c7\"}.bi-code::before{content:\"\\f2c8\"}.bi-collection-fill::before{content:\"\\f2c9\"}.bi-collection-play-fill::before{content:\"\\f2ca\"}.bi-collection-play::before{content:\"\\f2cb\"}.bi-collection::before{content:\"\\f2cc\"}.bi-columns-gap::before{content:\"\\f2cd\"}.bi-columns::before{content:\"\\f2ce\"}.bi-command::before{content:\"\\f2cf\"}.bi-compass-fill::before{content:\"\\f2d0\"}.bi-compass::before{content:\"\\f2d1\"}.bi-cone-striped::before{content:\"\\f2d2\"}.bi-cone::before{content:\"\\f2d3\"}.bi-controller::before{content:\"\\f2d4\"}.bi-cpu-fill::before{content:\"\\f2d5\"}.bi-cpu::before{content:\"\\f2d6\"}.bi-credit-card-2-back-fill::before{content:\"\\f2d7\"}.bi-credit-card-2-back::before{content:\"\\f2d8\"}.bi-credit-card-2-front-fill::before{content:\"\\f2d9\"}.bi-credit-card-2-front::before{content:\"\\f2da\"}.bi-credit-card-fill::before{content:\"\\f2db\"}.bi-credit-card::before{content:\"\\f2dc\"}.bi-crop::before{content:\"\\f2dd\"}.bi-cup-fill::before{content:\"\\f2de\"}.bi-cup-straw::before{content:\"\\f2df\"}.bi-cup::before{content:\"\\f2e0\"}.bi-cursor-fill::before{content:\"\\f2e1\"}.bi-cursor-text::before{content:\"\\f2e2\"}.bi-cursor::before{content:\"\\f2e3\"}.bi-dash-circle-dotted::before{content:\"\\f2e4\"}.bi-dash-circle-fill::before{content:\"\\f2e5\"}.bi-dash-circle::before{content:\"\\f2e6\"}.bi-dash-square-dotted::before{content:\"\\f2e7\"}.bi-dash-square-fill::before{content:\"\\f2e8\"}.bi-dash-square::before{content:\"\\f2e9\"}.bi-dash::before{content:\"\\f2ea\"}.bi-diagram-2-fill::before{content:\"\\f2eb\"}.bi-diagram-2::before{content:\"\\f2ec\"}.bi-diagram-3-fill::before{content:\"\\f2ed\"}.bi-diagram-3::before{content:\"\\f2ee\"}.bi-diamond-fill::before{content:\"\\f2ef\"}.bi-diamond-half::before{content:\"\\f2f0\"}.bi-diamond::before{content:\"\\f2f1\"}.bi-dice-1-fill::before{content:\"\\f2f2\"}.bi-dice-1::before{content:\"\\f2f3\"}.bi-dice-2-fill::before{content:\"\\f2f4\"}.bi-dice-2::before{content:\"\\f2f5\"}.bi-dice-3-fill::before{content:\"\\f2f6\"}.bi-dice-3::before{content:\"\\f2f7\"}.bi-dice-4-fill::before{content:\"\\f2f8\"}.bi-dice-4::before{content:\"\\f2f9\"}.bi-dice-5-fill::before{content:\"\\f2fa\"}.bi-dice-5::before{content:\"\\f2fb\"}.bi-dice-6-fill::before{content:\"\\f2fc\"}.bi-dice-6::before{content:\"\\f2fd\"}.bi-disc-fill::before{content:\"\\f2fe\"}.bi-disc::before{content:\"\\f2ff\"}.bi-discord::before{content:\"\\f300\"}.bi-display-fill::before{content:\"\\f301\"}.bi-display::before{content:\"\\f302\"}.bi-distribute-horizontal::before{content:\"\\f303\"}.bi-distribute-vertical::before{content:\"\\f304\"}.bi-door-closed-fill::before{content:\"\\f305\"}.bi-door-closed::before{content:\"\\f306\"}.bi-door-open-fill::before{content:\"\\f307\"}.bi-door-open::before{content:\"\\f308\"}.bi-dot::before{content:\"\\f309\"}.bi-download::before{content:\"\\f30a\"}.bi-droplet-fill::before{content:\"\\f30b\"}.bi-droplet-half::before{content:\"\\f30c\"}.bi-droplet::before{content:\"\\f30d\"}.bi-earbuds::before{content:\"\\f30e\"}.bi-easel-fill::before{content:\"\\f30f\"}.bi-easel::before{content:\"\\f310\"}.bi-egg-fill::before{content:\"\\f311\"}.bi-egg-fried::before{content:\"\\f312\"}.bi-egg::before{content:\"\\f313\"}.bi-eject-fill::before{content:\"\\f314\"}.bi-eject::before{content:\"\\f315\"}.bi-emoji-angry-fill::before{content:\"\\f316\"}.bi-emoji-angry::before{content:\"\\f317\"}.bi-emoji-dizzy-fill::before{content:\"\\f318\"}.bi-emoji-dizzy::before{content:\"\\f319\"}.bi-emoji-expressionless-fill::before{content:\"\\f31a\"}.bi-emoji-expressionless::before{content:\"\\f31b\"}.bi-emoji-frown-fill::before{content:\"\\f31c\"}.bi-emoji-frown::before{content:\"\\f31d\"}.bi-emoji-heart-eyes-fill::before{content:\"\\f31e\"}.bi-emoji-heart-eyes::before{content:\"\\f31f\"}.bi-emoji-laughing-fill::before{content:\"\\f320\"}.bi-emoji-laughing::before{content:\"\\f321\"}.bi-emoji-neutral-fill::before{content:\"\\f322\"}.bi-emoji-neutral::before{content:\"\\f323\"}.bi-emoji-smile-fill::before{content:\"\\f324\"}.bi-emoji-smile-upside-down-fill::before{content:\"\\f325\"}.bi-emoji-smile-upside-down::before{content:\"\\f326\"}.bi-emoji-smile::before{content:\"\\f327\"}.bi-emoji-sunglasses-fill::before{content:\"\\f328\"}.bi-emoji-sunglasses::before{content:\"\\f329\"}.bi-emoji-wink-fill::before{content:\"\\f32a\"}.bi-emoji-wink::before{content:\"\\f32b\"}.bi-envelope-fill::before{content:\"\\f32c\"}.bi-envelope-open-fill::before{content:\"\\f32d\"}.bi-envelope-open::before{content:\"\\f32e\"}.bi-envelope::before{content:\"\\f32f\"}.bi-eraser-fill::before{content:\"\\f330\"}.bi-eraser::before{content:\"\\f331\"}.bi-exclamation-circle-fill::before{content:\"\\f332\"}.bi-exclamation-circle::before{content:\"\\f333\"}.bi-exclamation-diamond-fill::before{content:\"\\f334\"}.bi-exclamation-diamond::before{content:\"\\f335\"}.bi-exclamation-octagon-fill::before{content:\"\\f336\"}.bi-exclamation-octagon::before{content:\"\\f337\"}.bi-exclamation-square-fill::before{content:\"\\f338\"}.bi-exclamation-square::before{content:\"\\f339\"}.bi-exclamation-triangle-fill::before{content:\"\\f33a\"}.bi-exclamation-triangle::before{content:\"\\f33b\"}.bi-exclamation::before{content:\"\\f33c\"}.bi-exclude::before{content:\"\\f33d\"}.bi-eye-fill::before{content:\"\\f33e\"}.bi-eye-slash-fill::before{content:\"\\f33f\"}.bi-eye-slash::before{content:\"\\f340\"}.bi-eye::before{content:\"\\f341\"}.bi-eyedropper::before{content:\"\\f342\"}.bi-eyeglasses::before{content:\"\\f343\"}.bi-facebook::before{content:\"\\f344\"}.bi-file-arrow-down-fill::before{content:\"\\f345\"}.bi-file-arrow-down::before{content:\"\\f346\"}.bi-file-arrow-up-fill::before{content:\"\\f347\"}.bi-file-arrow-up::before{content:\"\\f348\"}.bi-file-bar-graph-fill::before{content:\"\\f349\"}.bi-file-bar-graph::before{content:\"\\f34a\"}.bi-file-binary-fill::before{content:\"\\f34b\"}.bi-file-binary::before{content:\"\\f34c\"}.bi-file-break-fill::before{content:\"\\f34d\"}.bi-file-break::before{content:\"\\f34e\"}.bi-file-check-fill::before{content:\"\\f34f\"}.bi-file-check::before{content:\"\\f350\"}.bi-file-code-fill::before{content:\"\\f351\"}.bi-file-code::before{content:\"\\f352\"}.bi-file-diff-fill::before{content:\"\\f353\"}.bi-file-diff::before{content:\"\\f354\"}.bi-file-earmark-arrow-down-fill::before{content:\"\\f355\"}.bi-file-earmark-arrow-down::before{content:\"\\f356\"}.bi-file-earmark-arrow-up-fill::before{content:\"\\f357\"}.bi-file-earmark-arrow-up::before{content:\"\\f358\"}.bi-file-earmark-bar-graph-fill::before{content:\"\\f359\"}.bi-file-earmark-bar-graph::before{content:\"\\f35a\"}.bi-file-earmark-binary-fill::before{content:\"\\f35b\"}.bi-file-earmark-binary::before{content:\"\\f35c\"}.bi-file-earmark-break-fill::before{content:\"\\f35d\"}.bi-file-earmark-break::before{content:\"\\f35e\"}.bi-file-earmark-check-fill::before{content:\"\\f35f\"}.bi-file-earmark-check::before{content:\"\\f360\"}.bi-file-earmark-code-fill::before{content:\"\\f361\"}.bi-file-earmark-code::before{content:\"\\f362\"}.bi-file-earmark-diff-fill::before{content:\"\\f363\"}.bi-file-earmark-diff::before{content:\"\\f364\"}.bi-file-earmark-easel-fill::before{content:\"\\f365\"}.bi-file-earmark-easel::before{content:\"\\f366\"}.bi-file-earmark-excel-fill::before{content:\"\\f367\"}.bi-file-earmark-excel::before{content:\"\\f368\"}.bi-file-earmark-fill::before{content:\"\\f369\"}.bi-file-earmark-font-fill::before{content:\"\\f36a\"}.bi-file-earmark-font::before{content:\"\\f36b\"}.bi-file-earmark-image-fill::before{content:\"\\f36c\"}.bi-file-earmark-image::before{content:\"\\f36d\"}.bi-file-earmark-lock-fill::before{content:\"\\f36e\"}.bi-file-earmark-lock::before{content:\"\\f36f\"}.bi-file-earmark-lock2-fill::before{content:\"\\f370\"}.bi-file-earmark-lock2::before{content:\"\\f371\"}.bi-file-earmark-medical-fill::before{content:\"\\f372\"}.bi-file-earmark-medical::before{content:\"\\f373\"}.bi-file-earmark-minus-fill::before{content:\"\\f374\"}.bi-file-earmark-minus::before{content:\"\\f375\"}.bi-file-earmark-music-fill::before{content:\"\\f376\"}.bi-file-earmark-music::before{content:\"\\f377\"}.bi-file-earmark-person-fill::before{content:\"\\f378\"}.bi-file-earmark-person::before{content:\"\\f379\"}.bi-file-earmark-play-fill::before{content:\"\\f37a\"}.bi-file-earmark-play::before{content:\"\\f37b\"}.bi-file-earmark-plus-fill::before{content:\"\\f37c\"}.bi-file-earmark-plus::before{content:\"\\f37d\"}.bi-file-earmark-post-fill::before{content:\"\\f37e\"}.bi-file-earmark-post::before{content:\"\\f37f\"}.bi-file-earmark-ppt-fill::before{content:\"\\f380\"}.bi-file-earmark-ppt::before{content:\"\\f381\"}.bi-file-earmark-richtext-fill::before{content:\"\\f382\"}.bi-file-earmark-richtext::before{content:\"\\f383\"}.bi-file-earmark-ruled-fill::before{content:\"\\f384\"}.bi-file-earmark-ruled::before{content:\"\\f385\"}.bi-file-earmark-slides-fill::before{content:\"\\f386\"}.bi-file-earmark-slides::before{content:\"\\f387\"}.bi-file-earmark-spreadsheet-fill::before{content:\"\\f388\"}.bi-file-earmark-spreadsheet::before{content:\"\\f389\"}.bi-file-earmark-text-fill::before{content:\"\\f38a\"}.bi-file-earmark-text::before{content:\"\\f38b\"}.bi-file-earmark-word-fill::before{content:\"\\f38c\"}.bi-file-earmark-word::before{content:\"\\f38d\"}.bi-file-earmark-x-fill::before{content:\"\\f38e\"}.bi-file-earmark-x::before{content:\"\\f38f\"}.bi-file-earmark-zip-fill::before{content:\"\\f390\"}.bi-file-earmark-zip::before{content:\"\\f391\"}.bi-file-earmark::before{content:\"\\f392\"}.bi-file-easel-fill::before{content:\"\\f393\"}.bi-file-easel::before{content:\"\\f394\"}.bi-file-excel-fill::before{content:\"\\f395\"}.bi-file-excel::before{content:\"\\f396\"}.bi-file-fill::before{content:\"\\f397\"}.bi-file-font-fill::before{content:\"\\f398\"}.bi-file-font::before{content:\"\\f399\"}.bi-file-image-fill::before{content:\"\\f39a\"}.bi-file-image::before{content:\"\\f39b\"}.bi-file-lock-fill::before{content:\"\\f39c\"}.bi-file-lock::before{content:\"\\f39d\"}.bi-file-lock2-fill::before{content:\"\\f39e\"}.bi-file-lock2::before{content:\"\\f39f\"}.bi-file-medical-fill::before{content:\"\\f3a0\"}.bi-file-medical::before{content:\"\\f3a1\"}.bi-file-minus-fill::before{content:\"\\f3a2\"}.bi-file-minus::before{content:\"\\f3a3\"}.bi-file-music-fill::before{content:\"\\f3a4\"}.bi-file-music::before{content:\"\\f3a5\"}.bi-file-person-fill::before{content:\"\\f3a6\"}.bi-file-person::before{content:\"\\f3a7\"}.bi-file-play-fill::before{content:\"\\f3a8\"}.bi-file-play::before{content:\"\\f3a9\"}.bi-file-plus-fill::before{content:\"\\f3aa\"}.bi-file-plus::before{content:\"\\f3ab\"}.bi-file-post-fill::before{content:\"\\f3ac\"}.bi-file-post::before{content:\"\\f3ad\"}.bi-file-ppt-fill::before{content:\"\\f3ae\"}.bi-file-ppt::before{content:\"\\f3af\"}.bi-file-richtext-fill::before{content:\"\\f3b0\"}.bi-file-richtext::before{content:\"\\f3b1\"}.bi-file-ruled-fill::before{content:\"\\f3b2\"}.bi-file-ruled::before{content:\"\\f3b3\"}.bi-file-slides-fill::before{content:\"\\f3b4\"}.bi-file-slides::before{content:\"\\f3b5\"}.bi-file-spreadsheet-fill::before{content:\"\\f3b6\"}.bi-file-spreadsheet::before{content:\"\\f3b7\"}.bi-file-text-fill::before{content:\"\\f3b8\"}.bi-file-text::before{content:\"\\f3b9\"}.bi-file-word-fill::before{content:\"\\f3ba\"}.bi-file-word::before{content:\"\\f3bb\"}.bi-file-x-fill::before{content:\"\\f3bc\"}.bi-file-x::before{content:\"\\f3bd\"}.bi-file-zip-fill::before{content:\"\\f3be\"}.bi-file-zip::before{content:\"\\f3bf\"}.bi-file::before{content:\"\\f3c0\"}.bi-files-alt::before{content:\"\\f3c1\"}.bi-files::before{content:\"\\f3c2\"}.bi-film::before{content:\"\\f3c3\"}.bi-filter-circle-fill::before{content:\"\\f3c4\"}.bi-filter-circle::before{content:\"\\f3c5\"}.bi-filter-left::before{content:\"\\f3c6\"}.bi-filter-right::before{content:\"\\f3c7\"}.bi-filter-square-fill::before{content:\"\\f3c8\"}.bi-filter-square::before{content:\"\\f3c9\"}.bi-filter::before{content:\"\\f3ca\"}.bi-flag-fill::before{content:\"\\f3cb\"}.bi-flag::before{content:\"\\f3cc\"}.bi-flower1::before{content:\"\\f3cd\"}.bi-flower2::before{content:\"\\f3ce\"}.bi-flower3::before{content:\"\\f3cf\"}.bi-folder-check::before{content:\"\\f3d0\"}.bi-folder-fill::before{content:\"\\f3d1\"}.bi-folder-minus::before{content:\"\\f3d2\"}.bi-folder-plus::before{content:\"\\f3d3\"}.bi-folder-symlink-fill::before{content:\"\\f3d4\"}.bi-folder-symlink::before{content:\"\\f3d5\"}.bi-folder-x::before{content:\"\\f3d6\"}.bi-folder::before{content:\"\\f3d7\"}.bi-folder2-open::before{content:\"\\f3d8\"}.bi-folder2::before{content:\"\\f3d9\"}.bi-fonts::before{content:\"\\f3da\"}.bi-forward-fill::before{content:\"\\f3db\"}.bi-forward::before{content:\"\\f3dc\"}.bi-front::before{content:\"\\f3dd\"}.bi-fullscreen-exit::before{content:\"\\f3de\"}.bi-fullscreen::before{content:\"\\f3df\"}.bi-funnel-fill::before{content:\"\\f3e0\"}.bi-funnel::before{content:\"\\f3e1\"}.bi-gear-fill::before{content:\"\\f3e2\"}.bi-gear-wide-connected::before{content:\"\\f3e3\"}.bi-gear-wide::before{content:\"\\f3e4\"}.bi-gear::before{content:\"\\f3e5\"}.bi-gem::before{content:\"\\f3e6\"}.bi-geo-alt-fill::before{content:\"\\f3e7\"}.bi-geo-alt::before{content:\"\\f3e8\"}.bi-geo-fill::before{content:\"\\f3e9\"}.bi-geo::before{content:\"\\f3ea\"}.bi-gift-fill::before{content:\"\\f3eb\"}.bi-gift::before{content:\"\\f3ec\"}.bi-github::before{content:\"\\f3ed\"}.bi-globe::before{content:\"\\f3ee\"}.bi-globe2::before{content:\"\\f3ef\"}.bi-google::before{content:\"\\f3f0\"}.bi-graph-down::before{content:\"\\f3f1\"}.bi-graph-up::before{content:\"\\f3f2\"}.bi-grid-1x2-fill::before{content:\"\\f3f3\"}.bi-grid-1x2::before{content:\"\\f3f4\"}.bi-grid-3x2-gap-fill::before{content:\"\\f3f5\"}.bi-grid-3x2-gap::before{content:\"\\f3f6\"}.bi-grid-3x2::before{content:\"\\f3f7\"}.bi-grid-3x3-gap-fill::before{content:\"\\f3f8\"}.bi-grid-3x3-gap::before{content:\"\\f3f9\"}.bi-grid-3x3::before{content:\"\\f3fa\"}.bi-grid-fill::before{content:\"\\f3fb\"}.bi-grid::before{content:\"\\f3fc\"}.bi-grip-horizontal::before{content:\"\\f3fd\"}.bi-grip-vertical::before{content:\"\\f3fe\"}.bi-hammer::before{content:\"\\f3ff\"}.bi-hand-index-fill::before{content:\"\\f400\"}.bi-hand-index-thumb-fill::before{content:\"\\f401\"}.bi-hand-index-thumb::before{content:\"\\f402\"}.bi-hand-index::before{content:\"\\f403\"}.bi-hand-thumbs-down-fill::before{content:\"\\f404\"}.bi-hand-thumbs-down::before{content:\"\\f405\"}.bi-hand-thumbs-up-fill::before{content:\"\\f406\"}.bi-hand-thumbs-up::before{content:\"\\f407\"}.bi-handbag-fill::before{content:\"\\f408\"}.bi-handbag::before{content:\"\\f409\"}.bi-hash::before{content:\"\\f40a\"}.bi-hdd-fill::before{content:\"\\f40b\"}.bi-hdd-network-fill::before{content:\"\\f40c\"}.bi-hdd-network::before{content:\"\\f40d\"}.bi-hdd-rack-fill::before{content:\"\\f40e\"}.bi-hdd-rack::before{content:\"\\f40f\"}.bi-hdd-stack-fill::before{content:\"\\f410\"}.bi-hdd-stack::before{content:\"\\f411\"}.bi-hdd::before{content:\"\\f412\"}.bi-headphones::before{content:\"\\f413\"}.bi-headset::before{content:\"\\f414\"}.bi-heart-fill::before{content:\"\\f415\"}.bi-heart-half::before{content:\"\\f416\"}.bi-heart::before{content:\"\\f417\"}.bi-heptagon-fill::before{content:\"\\f418\"}.bi-heptagon-half::before{content:\"\\f419\"}.bi-heptagon::before{content:\"\\f41a\"}.bi-hexagon-fill::before{content:\"\\f41b\"}.bi-hexagon-half::before{content:\"\\f41c\"}.bi-hexagon::before{content:\"\\f41d\"}.bi-hourglass-bottom::before{content:\"\\f41e\"}.bi-hourglass-split::before{content:\"\\f41f\"}.bi-hourglass-top::before{content:\"\\f420\"}.bi-hourglass::before{content:\"\\f421\"}.bi-house-door-fill::before{content:\"\\f422\"}.bi-house-door::before{content:\"\\f423\"}.bi-house-fill::before{content:\"\\f424\"}.bi-house::before{content:\"\\f425\"}.bi-hr::before{content:\"\\f426\"}.bi-hurricane::before{content:\"\\f427\"}.bi-image-alt::before{content:\"\\f428\"}.bi-image-fill::before{content:\"\\f429\"}.bi-image::before{content:\"\\f42a\"}.bi-images::before{content:\"\\f42b\"}.bi-inbox-fill::before{content:\"\\f42c\"}.bi-inbox::before{content:\"\\f42d\"}.bi-inboxes-fill::before{content:\"\\f42e\"}.bi-inboxes::before{content:\"\\f42f\"}.bi-info-circle-fill::before{content:\"\\f430\"}.bi-info-circle::before{content:\"\\f431\"}.bi-info-square-fill::before{content:\"\\f432\"}.bi-info-square::before{content:\"\\f433\"}.bi-info::before{content:\"\\f434\"}.bi-input-cursor-text::before{content:\"\\f435\"}.bi-input-cursor::before{content:\"\\f436\"}.bi-instagram::before{content:\"\\f437\"}.bi-intersect::before{content:\"\\f438\"}.bi-journal-album::before{content:\"\\f439\"}.bi-journal-arrow-down::before{content:\"\\f43a\"}.bi-journal-arrow-up::before{content:\"\\f43b\"}.bi-journal-bookmark-fill::before{content:\"\\f43c\"}.bi-journal-bookmark::before{content:\"\\f43d\"}.bi-journal-check::before{content:\"\\f43e\"}.bi-journal-code::before{content:\"\\f43f\"}.bi-journal-medical::before{content:\"\\f440\"}.bi-journal-minus::before{content:\"\\f441\"}.bi-journal-plus::before{content:\"\\f442\"}.bi-journal-richtext::before{content:\"\\f443\"}.bi-journal-text::before{content:\"\\f444\"}.bi-journal-x::before{content:\"\\f445\"}.bi-journal::before{content:\"\\f446\"}.bi-journals::before{content:\"\\f447\"}.bi-joystick::before{content:\"\\f448\"}.bi-justify-left::before{content:\"\\f449\"}.bi-justify-right::before{content:\"\\f44a\"}.bi-justify::before{content:\"\\f44b\"}.bi-kanban-fill::before{content:\"\\f44c\"}.bi-kanban::before{content:\"\\f44d\"}.bi-key-fill::before{content:\"\\f44e\"}.bi-key::before{content:\"\\f44f\"}.bi-keyboard-fill::before{content:\"\\f450\"}.bi-keyboard::before{content:\"\\f451\"}.bi-ladder::before{content:\"\\f452\"}.bi-lamp-fill::before{content:\"\\f453\"}.bi-lamp::before{content:\"\\f454\"}.bi-laptop-fill::before{content:\"\\f455\"}.bi-laptop::before{content:\"\\f456\"}.bi-layer-backward::before{content:\"\\f457\"}.bi-layer-forward::before{content:\"\\f458\"}.bi-layers-fill::before{content:\"\\f459\"}.bi-layers-half::before{content:\"\\f45a\"}.bi-layers::before{content:\"\\f45b\"}.bi-layout-sidebar-inset-reverse::before{content:\"\\f45c\"}.bi-layout-sidebar-inset::before{content:\"\\f45d\"}.bi-layout-sidebar-reverse::before{content:\"\\f45e\"}.bi-layout-sidebar::before{content:\"\\f45f\"}.bi-layout-split::before{content:\"\\f460\"}.bi-layout-text-sidebar-reverse::before{content:\"\\f461\"}.bi-layout-text-sidebar::before{content:\"\\f462\"}.bi-layout-text-window-reverse::before{content:\"\\f463\"}.bi-layout-text-window::before{content:\"\\f464\"}.bi-layout-three-columns::before{content:\"\\f465\"}.bi-layout-wtf::before{content:\"\\f466\"}.bi-life-preserver::before{content:\"\\f467\"}.bi-lightbulb-fill::before{content:\"\\f468\"}.bi-lightbulb-off-fill::before{content:\"\\f469\"}.bi-lightbulb-off::before{content:\"\\f46a\"}.bi-lightbulb::before{content:\"\\f46b\"}.bi-lightning-charge-fill::before{content:\"\\f46c\"}.bi-lightning-charge::before{content:\"\\f46d\"}.bi-lightning-fill::before{content:\"\\f46e\"}.bi-lightning::before{content:\"\\f46f\"}.bi-link-45deg::before{content:\"\\f470\"}.bi-link::before{content:\"\\f471\"}.bi-linkedin::before{content:\"\\f472\"}.bi-list-check::before{content:\"\\f473\"}.bi-list-nested::before{content:\"\\f474\"}.bi-list-ol::before{content:\"\\f475\"}.bi-list-stars::before{content:\"\\f476\"}.bi-list-task::before{content:\"\\f477\"}.bi-list-ul::before{content:\"\\f478\"}.bi-list::before{content:\"\\f479\"}.bi-lock-fill::before{content:\"\\f47a\"}.bi-lock::before{content:\"\\f47b\"}.bi-mailbox::before{content:\"\\f47c\"}.bi-mailbox2::before{content:\"\\f47d\"}.bi-map-fill::before{content:\"\\f47e\"}.bi-map::before{content:\"\\f47f\"}.bi-markdown-fill::before{content:\"\\f480\"}.bi-markdown::before{content:\"\\f481\"}.bi-mask::before{content:\"\\f482\"}.bi-megaphone-fill::before{content:\"\\f483\"}.bi-megaphone::before{content:\"\\f484\"}.bi-menu-app-fill::before{content:\"\\f485\"}.bi-menu-app::before{content:\"\\f486\"}.bi-menu-button-fill::before{content:\"\\f487\"}.bi-menu-button-wide-fill::before{content:\"\\f488\"}.bi-menu-button-wide::before{content:\"\\f489\"}.bi-menu-button::before{content:\"\\f48a\"}.bi-menu-down::before{content:\"\\f48b\"}.bi-menu-up::before{content:\"\\f48c\"}.bi-mic-fill::before{content:\"\\f48d\"}.bi-mic-mute-fill::before{content:\"\\f48e\"}.bi-mic-mute::before{content:\"\\f48f\"}.bi-mic::before{content:\"\\f490\"}.bi-minecart-loaded::before{content:\"\\f491\"}.bi-minecart::before{content:\"\\f492\"}.bi-moisture::before{content:\"\\f493\"}.bi-moon-fill::before{content:\"\\f494\"}.bi-moon-stars-fill::before{content:\"\\f495\"}.bi-moon-stars::before{content:\"\\f496\"}.bi-moon::before{content:\"\\f497\"}.bi-mouse-fill::before{content:\"\\f498\"}.bi-mouse::before{content:\"\\f499\"}.bi-mouse2-fill::before{content:\"\\f49a\"}.bi-mouse2::before{content:\"\\f49b\"}.bi-mouse3-fill::before{content:\"\\f49c\"}.bi-mouse3::before{content:\"\\f49d\"}.bi-music-note-beamed::before{content:\"\\f49e\"}.bi-music-note-list::before{content:\"\\f49f\"}.bi-music-note::before{content:\"\\f4a0\"}.bi-music-player-fill::before{content:\"\\f4a1\"}.bi-music-player::before{content:\"\\f4a2\"}.bi-newspaper::before{content:\"\\f4a3\"}.bi-node-minus-fill::before{content:\"\\f4a4\"}.bi-node-minus::before{content:\"\\f4a5\"}.bi-node-plus-fill::before{content:\"\\f4a6\"}.bi-node-plus::before{content:\"\\f4a7\"}.bi-nut-fill::before{content:\"\\f4a8\"}.bi-nut::before{content:\"\\f4a9\"}.bi-octagon-fill::before{content:\"\\f4aa\"}.bi-octagon-half::before{content:\"\\f4ab\"}.bi-octagon::before{content:\"\\f4ac\"}.bi-option::before{content:\"\\f4ad\"}.bi-outlet::before{content:\"\\f4ae\"}.bi-paint-bucket::before{content:\"\\f4af\"}.bi-palette-fill::before{content:\"\\f4b0\"}.bi-palette::before{content:\"\\f4b1\"}.bi-palette2::before{content:\"\\f4b2\"}.bi-paperclip::before{content:\"\\f4b3\"}.bi-paragraph::before{content:\"\\f4b4\"}.bi-patch-check-fill::before{content:\"\\f4b5\"}.bi-patch-check::before{content:\"\\f4b6\"}.bi-patch-exclamation-fill::before{content:\"\\f4b7\"}.bi-patch-exclamation::before{content:\"\\f4b8\"}.bi-patch-minus-fill::before{content:\"\\f4b9\"}.bi-patch-minus::before{content:\"\\f4ba\"}.bi-patch-plus-fill::before{content:\"\\f4bb\"}.bi-patch-plus::before{content:\"\\f4bc\"}.bi-patch-question-fill::before{content:\"\\f4bd\"}.bi-patch-question::before{content:\"\\f4be\"}.bi-pause-btn-fill::before{content:\"\\f4bf\"}.bi-pause-btn::before{content:\"\\f4c0\"}.bi-pause-circle-fill::before{content:\"\\f4c1\"}.bi-pause-circle::before{content:\"\\f4c2\"}.bi-pause-fill::before{content:\"\\f4c3\"}.bi-pause::before{content:\"\\f4c4\"}.bi-peace-fill::before{content:\"\\f4c5\"}.bi-peace::before{content:\"\\f4c6\"}.bi-pen-fill::before{content:\"\\f4c7\"}.bi-pen::before{content:\"\\f4c8\"}.bi-pencil-fill::before{content:\"\\f4c9\"}.bi-pencil-square::before{content:\"\\f4ca\"}.bi-pencil::before{content:\"\\f4cb\"}.bi-pentagon-fill::before{content:\"\\f4cc\"}.bi-pentagon-half::before{content:\"\\f4cd\"}.bi-pentagon::before{content:\"\\f4ce\"}.bi-people-fill::before{content:\"\\f4cf\"}.bi-people::before{content:\"\\f4d0\"}.bi-percent::before{content:\"\\f4d1\"}.bi-person-badge-fill::before{content:\"\\f4d2\"}.bi-person-badge::before{content:\"\\f4d3\"}.bi-person-bounding-box::before{content:\"\\f4d4\"}.bi-person-check-fill::before{content:\"\\f4d5\"}.bi-person-check::before{content:\"\\f4d6\"}.bi-person-circle::before{content:\"\\f4d7\"}.bi-person-dash-fill::before{content:\"\\f4d8\"}.bi-person-dash::before{content:\"\\f4d9\"}.bi-person-fill::before{content:\"\\f4da\"}.bi-person-lines-fill::before{content:\"\\f4db\"}.bi-person-plus-fill::before{content:\"\\f4dc\"}.bi-person-plus::before{content:\"\\f4dd\"}.bi-person-square::before{content:\"\\f4de\"}.bi-person-x-fill::before{content:\"\\f4df\"}.bi-person-x::before{content:\"\\f4e0\"}.bi-person::before{content:\"\\f4e1\"}.bi-phone-fill::before{content:\"\\f4e2\"}.bi-phone-landscape-fill::before{content:\"\\f4e3\"}.bi-phone-landscape::before{content:\"\\f4e4\"}.bi-phone-vibrate-fill::before{content:\"\\f4e5\"}.bi-phone-vibrate::before{content:\"\\f4e6\"}.bi-phone::before{content:\"\\f4e7\"}.bi-pie-chart-fill::before{content:\"\\f4e8\"}.bi-pie-chart::before{content:\"\\f4e9\"}.bi-pin-angle-fill::before{content:\"\\f4ea\"}.bi-pin-angle::before{content:\"\\f4eb\"}.bi-pin-fill::before{content:\"\\f4ec\"}.bi-pin::before{content:\"\\f4ed\"}.bi-pip-fill::before{content:\"\\f4ee\"}.bi-pip::before{content:\"\\f4ef\"}.bi-play-btn-fill::before{content:\"\\f4f0\"}.bi-play-btn::before{content:\"\\f4f1\"}.bi-play-circle-fill::before{content:\"\\f4f2\"}.bi-play-circle::before{content:\"\\f4f3\"}.bi-play-fill::before{content:\"\\f4f4\"}.bi-play::before{content:\"\\f4f5\"}.bi-plug-fill::before{content:\"\\f4f6\"}.bi-plug::before{content:\"\\f4f7\"}.bi-plus-circle-dotted::before{content:\"\\f4f8\"}.bi-plus-circle-fill::before{content:\"\\f4f9\"}.bi-plus-circle::before{content:\"\\f4fa\"}.bi-plus-square-dotted::before{content:\"\\f4fb\"}.bi-plus-square-fill::before{content:\"\\f4fc\"}.bi-plus-square::before{content:\"\\f4fd\"}.bi-plus::before{content:\"\\f4fe\"}.bi-power::before{content:\"\\f4ff\"}.bi-printer-fill::before{content:\"\\f500\"}.bi-printer::before{content:\"\\f501\"}.bi-puzzle-fill::before{content:\"\\f502\"}.bi-puzzle::before{content:\"\\f503\"}.bi-question-circle-fill::before{content:\"\\f504\"}.bi-question-circle::before{content:\"\\f505\"}.bi-question-diamond-fill::before{content:\"\\f506\"}.bi-question-diamond::before{content:\"\\f507\"}.bi-question-octagon-fill::before{content:\"\\f508\"}.bi-question-octagon::before{content:\"\\f509\"}.bi-question-square-fill::before{content:\"\\f50a\"}.bi-question-square::before{content:\"\\f50b\"}.bi-question::before{content:\"\\f50c\"}.bi-rainbow::before{content:\"\\f50d\"}.bi-receipt-cutoff::before{content:\"\\f50e\"}.bi-receipt::before{content:\"\\f50f\"}.bi-reception-0::before{content:\"\\f510\"}.bi-reception-1::before{content:\"\\f511\"}.bi-reception-2::before{content:\"\\f512\"}.bi-reception-3::before{content:\"\\f513\"}.bi-reception-4::before{content:\"\\f514\"}.bi-record-btn-fill::before{content:\"\\f515\"}.bi-record-btn::before{content:\"\\f516\"}.bi-record-circle-fill::before{content:\"\\f517\"}.bi-record-circle::before{content:\"\\f518\"}.bi-record-fill::before{content:\"\\f519\"}.bi-record::before{content:\"\\f51a\"}.bi-record2-fill::before{content:\"\\f51b\"}.bi-record2::before{content:\"\\f51c\"}.bi-reply-all-fill::before{content:\"\\f51d\"}.bi-reply-all::before{content:\"\\f51e\"}.bi-reply-fill::before{content:\"\\f51f\"}.bi-reply::before{content:\"\\f520\"}.bi-rss-fill::before{content:\"\\f521\"}.bi-rss::before{content:\"\\f522\"}.bi-rulers::before{content:\"\\f523\"}.bi-save-fill::before{content:\"\\f524\"}.bi-save::before{content:\"\\f525\"}.bi-save2-fill::before{content:\"\\f526\"}.bi-save2::before{content:\"\\f527\"}.bi-scissors::before{content:\"\\f528\"}.bi-screwdriver::before{content:\"\\f529\"}.bi-search::before{content:\"\\f52a\"}.bi-segmented-nav::before{content:\"\\f52b\"}.bi-server::before{content:\"\\f52c\"}.bi-share-fill::before{content:\"\\f52d\"}.bi-share::before{content:\"\\f52e\"}.bi-shield-check::before{content:\"\\f52f\"}.bi-shield-exclamation::before{content:\"\\f530\"}.bi-shield-fill-check::before{content:\"\\f531\"}.bi-shield-fill-exclamation::before{content:\"\\f532\"}.bi-shield-fill-minus::before{content:\"\\f533\"}.bi-shield-fill-plus::before{content:\"\\f534\"}.bi-shield-fill-x::before{content:\"\\f535\"}.bi-shield-fill::before{content:\"\\f536\"}.bi-shield-lock-fill::before{content:\"\\f537\"}.bi-shield-lock::before{content:\"\\f538\"}.bi-shield-minus::before{content:\"\\f539\"}.bi-shield-plus::before{content:\"\\f53a\"}.bi-shield-shaded::before{content:\"\\f53b\"}.bi-shield-slash-fill::before{content:\"\\f53c\"}.bi-shield-slash::before{content:\"\\f53d\"}.bi-shield-x::before{content:\"\\f53e\"}.bi-shield::before{content:\"\\f53f\"}.bi-shift-fill::before{content:\"\\f540\"}.bi-shift::before{content:\"\\f541\"}.bi-shop-window::before{content:\"\\f542\"}.bi-shop::before{content:\"\\f543\"}.bi-shuffle::before{content:\"\\f544\"}.bi-signpost-2-fill::before{content:\"\\f545\"}.bi-signpost-2::before{content:\"\\f546\"}.bi-signpost-fill::before{content:\"\\f547\"}.bi-signpost-split-fill::before{content:\"\\f548\"}.bi-signpost-split::before{content:\"\\f549\"}.bi-signpost::before{content:\"\\f54a\"}.bi-sim-fill::before{content:\"\\f54b\"}.bi-sim::before{content:\"\\f54c\"}.bi-skip-backward-btn-fill::before{content:\"\\f54d\"}.bi-skip-backward-btn::before{content:\"\\f54e\"}.bi-skip-backward-circle-fill::before{content:\"\\f54f\"}.bi-skip-backward-circle::before{content:\"\\f550\"}.bi-skip-backward-fill::before{content:\"\\f551\"}.bi-skip-backward::before{content:\"\\f552\"}.bi-skip-end-btn-fill::before{content:\"\\f553\"}.bi-skip-end-btn::before{content:\"\\f554\"}.bi-skip-end-circle-fill::before{content:\"\\f555\"}.bi-skip-end-circle::before{content:\"\\f556\"}.bi-skip-end-fill::before{content:\"\\f557\"}.bi-skip-end::before{content:\"\\f558\"}.bi-skip-forward-btn-fill::before{content:\"\\f559\"}.bi-skip-forward-btn::before{content:\"\\f55a\"}.bi-skip-forward-circle-fill::before{content:\"\\f55b\"}.bi-skip-forward-circle::before{content:\"\\f55c\"}.bi-skip-forward-fill::before{content:\"\\f55d\"}.bi-skip-forward::before{content:\"\\f55e\"}.bi-skip-start-btn-fill::before{content:\"\\f55f\"}.bi-skip-start-btn::before{content:\"\\f560\"}.bi-skip-start-circle-fill::before{content:\"\\f561\"}.bi-skip-start-circle::before{content:\"\\f562\"}.bi-skip-start-fill::before{content:\"\\f563\"}.bi-skip-start::before{content:\"\\f564\"}.bi-slack::before{content:\"\\f565\"}.bi-slash-circle-fill::before{content:\"\\f566\"}.bi-slash-circle::before{content:\"\\f567\"}.bi-slash-square-fill::before{content:\"\\f568\"}.bi-slash-square::before{content:\"\\f569\"}.bi-slash::before{content:\"\\f56a\"}.bi-sliders::before{content:\"\\f56b\"}.bi-smartwatch::before{content:\"\\f56c\"}.bi-snow::before{content:\"\\f56d\"}.bi-snow2::before{content:\"\\f56e\"}.bi-snow3::before{content:\"\\f56f\"}.bi-sort-alpha-down-alt::before{content:\"\\f570\"}.bi-sort-alpha-down::before{content:\"\\f571\"}.bi-sort-alpha-up-alt::before{content:\"\\f572\"}.bi-sort-alpha-up::before{content:\"\\f573\"}.bi-sort-down-alt::before{content:\"\\f574\"}.bi-sort-down::before{content:\"\\f575\"}.bi-sort-numeric-down-alt::before{content:\"\\f576\"}.bi-sort-numeric-down::before{content:\"\\f577\"}.bi-sort-numeric-up-alt::before{content:\"\\f578\"}.bi-sort-numeric-up::before{content:\"\\f579\"}.bi-sort-up-alt::before{content:\"\\f57a\"}.bi-sort-up::before{content:\"\\f57b\"}.bi-soundwave::before{content:\"\\f57c\"}.bi-speaker-fill::before{content:\"\\f57d\"}.bi-speaker::before{content:\"\\f57e\"}.bi-speedometer::before{content:\"\\f57f\"}.bi-speedometer2::before{content:\"\\f580\"}.bi-spellcheck::before{content:\"\\f581\"}.bi-square-fill::before{content:\"\\f582\"}.bi-square-half::before{content:\"\\f583\"}.bi-square::before{content:\"\\f584\"}.bi-stack::before{content:\"\\f585\"}.bi-star-fill::before{content:\"\\f586\"}.bi-star-half::before{content:\"\\f587\"}.bi-star::before{content:\"\\f588\"}.bi-stars::before{content:\"\\f589\"}.bi-stickies-fill::before{content:\"\\f58a\"}.bi-stickies::before{content:\"\\f58b\"}.bi-sticky-fill::before{content:\"\\f58c\"}.bi-sticky::before{content:\"\\f58d\"}.bi-stop-btn-fill::before{content:\"\\f58e\"}.bi-stop-btn::before{content:\"\\f58f\"}.bi-stop-circle-fill::before{content:\"\\f590\"}.bi-stop-circle::before{content:\"\\f591\"}.bi-stop-fill::before{content:\"\\f592\"}.bi-stop::before{content:\"\\f593\"}.bi-stoplights-fill::before{content:\"\\f594\"}.bi-stoplights::before{content:\"\\f595\"}.bi-stopwatch-fill::before{content:\"\\f596\"}.bi-stopwatch::before{content:\"\\f597\"}.bi-subtract::before{content:\"\\f598\"}.bi-suit-club-fill::before{content:\"\\f599\"}.bi-suit-club::before{content:\"\\f59a\"}.bi-suit-diamond-fill::before{content:\"\\f59b\"}.bi-suit-diamond::before{content:\"\\f59c\"}.bi-suit-heart-fill::before{content:\"\\f59d\"}.bi-suit-heart::before{content:\"\\f59e\"}.bi-suit-spade-fill::before{content:\"\\f59f\"}.bi-suit-spade::before{content:\"\\f5a0\"}.bi-sun-fill::before{content:\"\\f5a1\"}.bi-sun::before{content:\"\\f5a2\"}.bi-sunglasses::before{content:\"\\f5a3\"}.bi-sunrise-fill::before{content:\"\\f5a4\"}.bi-sunrise::before{content:\"\\f5a5\"}.bi-sunset-fill::before{content:\"\\f5a6\"}.bi-sunset::before{content:\"\\f5a7\"}.bi-symmetry-horizontal::before{content:\"\\f5a8\"}.bi-symmetry-vertical::before{content:\"\\f5a9\"}.bi-table::before{content:\"\\f5aa\"}.bi-tablet-fill::before{content:\"\\f5ab\"}.bi-tablet-landscape-fill::before{content:\"\\f5ac\"}.bi-tablet-landscape::before{content:\"\\f5ad\"}.bi-tablet::before{content:\"\\f5ae\"}.bi-tag-fill::before{content:\"\\f5af\"}.bi-tag::before{content:\"\\f5b0\"}.bi-tags-fill::before{content:\"\\f5b1\"}.bi-tags::before{content:\"\\f5b2\"}.bi-telegram::before{content:\"\\f5b3\"}.bi-telephone-fill::before{content:\"\\f5b4\"}.bi-telephone-forward-fill::before{content:\"\\f5b5\"}.bi-telephone-forward::before{content:\"\\f5b6\"}.bi-telephone-inbound-fill::before{content:\"\\f5b7\"}.bi-telephone-inbound::before{content:\"\\f5b8\"}.bi-telephone-minus-fill::before{content:\"\\f5b9\"}.bi-telephone-minus::before{content:\"\\f5ba\"}.bi-telephone-outbound-fill::before{content:\"\\f5bb\"}.bi-telephone-outbound::before{content:\"\\f5bc\"}.bi-telephone-plus-fill::before{content:\"\\f5bd\"}.bi-telephone-plus::before{content:\"\\f5be\"}.bi-telephone-x-fill::before{content:\"\\f5bf\"}.bi-telephone-x::before{content:\"\\f5c0\"}.bi-telephone::before{content:\"\\f5c1\"}.bi-terminal-fill::before{content:\"\\f5c2\"}.bi-terminal::before{content:\"\\f5c3\"}.bi-text-center::before{content:\"\\f5c4\"}.bi-text-indent-left::before{content:\"\\f5c5\"}.bi-text-indent-right::before{content:\"\\f5c6\"}.bi-text-left::before{content:\"\\f5c7\"}.bi-text-paragraph::before{content:\"\\f5c8\"}.bi-text-right::before{content:\"\\f5c9\"}.bi-textarea-resize::before{content:\"\\f5ca\"}.bi-textarea-t::before{content:\"\\f5cb\"}.bi-textarea::before{content:\"\\f5cc\"}.bi-thermometer-half::before{content:\"\\f5cd\"}.bi-thermometer-high::before{content:\"\\f5ce\"}.bi-thermometer-low::before{content:\"\\f5cf\"}.bi-thermometer-snow::before{content:\"\\f5d0\"}.bi-thermometer-sun::before{content:\"\\f5d1\"}.bi-thermometer::before{content:\"\\f5d2\"}.bi-three-dots-vertical::before{content:\"\\f5d3\"}.bi-three-dots::before{content:\"\\f5d4\"}.bi-toggle-off::before{content:\"\\f5d5\"}.bi-toggle-on::before{content:\"\\f5d6\"}.bi-toggle2-off::before{content:\"\\f5d7\"}.bi-toggle2-on::before{content:\"\\f5d8\"}.bi-toggles::before{content:\"\\f5d9\"}.bi-toggles2::before{content:\"\\f5da\"}.bi-tools::before{content:\"\\f5db\"}.bi-tornado::before{content:\"\\f5dc\"}.bi-trash-fill::before{content:\"\\f5dd\"}.bi-trash::before{content:\"\\f5de\"}.bi-trash2-fill::before{content:\"\\f5df\"}.bi-trash2::before{content:\"\\f5e0\"}.bi-tree-fill::before{content:\"\\f5e1\"}.bi-tree::before{content:\"\\f5e2\"}.bi-triangle-fill::before{content:\"\\f5e3\"}.bi-triangle-half::before{content:\"\\f5e4\"}.bi-triangle::before{content:\"\\f5e5\"}.bi-trophy-fill::before{content:\"\\f5e6\"}.bi-trophy::before{content:\"\\f5e7\"}.bi-tropical-storm::before{content:\"\\f5e8\"}.bi-truck-flatbed::before{content:\"\\f5e9\"}.bi-truck::before{content:\"\\f5ea\"}.bi-tsunami::before{content:\"\\f5eb\"}.bi-tv-fill::before{content:\"\\f5ec\"}.bi-tv::before{content:\"\\f5ed\"}.bi-twitch::before{content:\"\\f5ee\"}.bi-twitter::before{content:\"\\f5ef\"}.bi-type-bold::before{content:\"\\f5f0\"}.bi-type-h1::before{content:\"\\f5f1\"}.bi-type-h2::before{content:\"\\f5f2\"}.bi-type-h3::before{content:\"\\f5f3\"}.bi-type-italic::before{content:\"\\f5f4\"}.bi-type-strikethrough::before{content:\"\\f5f5\"}.bi-type-underline::before{content:\"\\f5f6\"}.bi-type::before{content:\"\\f5f7\"}.bi-ui-checks-grid::before{content:\"\\f5f8\"}.bi-ui-checks::before{content:\"\\f5f9\"}.bi-ui-radios-grid::before{content:\"\\f5fa\"}.bi-ui-radios::before{content:\"\\f5fb\"}.bi-umbrella-fill::before{content:\"\\f5fc\"}.bi-umbrella::before{content:\"\\f5fd\"}.bi-union::before{content:\"\\f5fe\"}.bi-unlock-fill::before{content:\"\\f5ff\"}.bi-unlock::before{content:\"\\f600\"}.bi-upc-scan::before{content:\"\\f601\"}.bi-upc::before{content:\"\\f602\"}.bi-upload::before{content:\"\\f603\"}.bi-vector-pen::before{content:\"\\f604\"}.bi-view-list::before{content:\"\\f605\"}.bi-view-stacked::before{content:\"\\f606\"}.bi-vinyl-fill::before{content:\"\\f607\"}.bi-vinyl::before{content:\"\\f608\"}.bi-voicemail::before{content:\"\\f609\"}.bi-volume-down-fill::before{content:\"\\f60a\"}.bi-volume-down::before{content:\"\\f60b\"}.bi-volume-mute-fill::before{content:\"\\f60c\"}.bi-volume-mute::before{content:\"\\f60d\"}.bi-volume-off-fill::before{content:\"\\f60e\"}.bi-volume-off::before{content:\"\\f60f\"}.bi-volume-up-fill::before{content:\"\\f610\"}.bi-volume-up::before{content:\"\\f611\"}.bi-vr::before{content:\"\\f612\"}.bi-wallet-fill::before{content:\"\\f613\"}.bi-wallet::before{content:\"\\f614\"}.bi-wallet2::before{content:\"\\f615\"}.bi-watch::before{content:\"\\f616\"}.bi-water::before{content:\"\\f617\"}.bi-whatsapp::before{content:\"\\f618\"}.bi-wifi-1::before{content:\"\\f619\"}.bi-wifi-2::before{content:\"\\f61a\"}.bi-wifi-off::before{content:\"\\f61b\"}.bi-wifi::before{content:\"\\f61c\"}.bi-wind::before{content:\"\\f61d\"}.bi-window-dock::before{content:\"\\f61e\"}.bi-window-sidebar::before{content:\"\\f61f\"}.bi-window::before{content:\"\\f620\"}.bi-wrench::before{content:\"\\f621\"}.bi-x-circle-fill::before{content:\"\\f622\"}.bi-x-circle::before{content:\"\\f623\"}.bi-x-diamond-fill::before{content:\"\\f624\"}.bi-x-diamond::before{content:\"\\f625\"}.bi-x-octagon-fill::before{content:\"\\f626\"}.bi-x-octagon::before{content:\"\\f627\"}.bi-x-square-fill::before{content:\"\\f628\"}.bi-x-square::before{content:\"\\f629\"}.bi-x::before{content:\"\\f62a\"}.bi-youtube::before{content:\"\\f62b\"}.bi-zoom-in::before{content:\"\\f62c\"}.bi-zoom-out::before{content:\"\\f62d\"}.bi-bank::before{content:\"\\f62e\"}.bi-bank2::before{content:\"\\f62f\"}.bi-bell-slash-fill::before{content:\"\\f630\"}.bi-bell-slash::before{content:\"\\f631\"}.bi-cash-coin::before{content:\"\\f632\"}.bi-check-lg::before{content:\"\\f633\"}.bi-coin::before{content:\"\\f634\"}.bi-currency-bitcoin::before{content:\"\\f635\"}.bi-currency-dollar::before{content:\"\\f636\"}.bi-currency-euro::before{content:\"\\f637\"}.bi-currency-exchange::before{content:\"\\f638\"}.bi-currency-pound::before{content:\"\\f639\"}.bi-currency-yen::before{content:\"\\f63a\"}.bi-dash-lg::before{content:\"\\f63b\"}.bi-exclamation-lg::before{content:\"\\f63c\"}.bi-file-earmark-pdf-fill::before{content:\"\\f63d\"}.bi-file-earmark-pdf::before{content:\"\\f63e\"}.bi-file-pdf-fill::before{content:\"\\f63f\"}.bi-file-pdf::before{content:\"\\f640\"}.bi-gender-ambiguous::before{content:\"\\f641\"}.bi-gender-female::before{content:\"\\f642\"}.bi-gender-male::before{content:\"\\f643\"}.bi-gender-trans::before{content:\"\\f644\"}.bi-headset-vr::before{content:\"\\f645\"}.bi-info-lg::before{content:\"\\f646\"}.bi-mastodon::before{content:\"\\f647\"}.bi-messenger::before{content:\"\\f648\"}.bi-piggy-bank-fill::before{content:\"\\f649\"}.bi-piggy-bank::before{content:\"\\f64a\"}.bi-pin-map-fill::before{content:\"\\f64b\"}.bi-pin-map::before{content:\"\\f64c\"}.bi-plus-lg::before{content:\"\\f64d\"}.bi-question-lg::before{content:\"\\f64e\"}.bi-recycle::before{content:\"\\f64f\"}.bi-reddit::before{content:\"\\f650\"}.bi-safe-fill::before{content:\"\\f651\"}.bi-safe2-fill::before{content:\"\\f652\"}.bi-safe2::before{content:\"\\f653\"}.bi-sd-card-fill::before{content:\"\\f654\"}.bi-sd-card::before{content:\"\\f655\"}.bi-skype::before{content:\"\\f656\"}.bi-slash-lg::before{content:\"\\f657\"}.bi-translate::before{content:\"\\f658\"}.bi-x-lg::before{content:\"\\f659\"}.bi-safe::before{content:\"\\f65a\"}.bi-apple::before{content:\"\\f65b\"}.bi-microsoft::before{content:\"\\f65d\"}.bi-windows::before{content:\"\\f65e\"}.bi-behance::before{content:\"\\f65c\"}.bi-dribbble::before{content:\"\\f65f\"}.bi-line::before{content:\"\\f660\"}.bi-medium::before{content:\"\\f661\"}.bi-paypal::before{content:\"\\f662\"}.bi-pinterest::before{content:\"\\f663\"}.bi-signal::before{content:\"\\f664\"}.bi-snapchat::before{content:\"\\f665\"}.bi-spotify::before{content:\"\\f666\"}.bi-stack-overflow::before{content:\"\\f667\"}.bi-strava::before{content:\"\\f668\"}.bi-wordpress::before{content:\"\\f669\"}.bi-vimeo::before{content:\"\\f66a\"}.bi-activity::before{content:\"\\f66b\"}.bi-easel2-fill::before{content:\"\\f66c\"}.bi-easel2::before{content:\"\\f66d\"}.bi-easel3-fill::before{content:\"\\f66e\"}.bi-easel3::before{content:\"\\f66f\"}.bi-fan::before{content:\"\\f670\"}.bi-fingerprint::before{content:\"\\f671\"}.bi-graph-down-arrow::before{content:\"\\f672\"}.bi-graph-up-arrow::before{content:\"\\f673\"}.bi-hypnotize::before{content:\"\\f674\"}.bi-magic::before{content:\"\\f675\"}.bi-person-rolodex::before{content:\"\\f676\"}.bi-person-video::before{content:\"\\f677\"}.bi-person-video2::before{content:\"\\f678\"}.bi-person-video3::before{content:\"\\f679\"}.bi-person-workspace::before{content:\"\\f67a\"}.bi-radioactive::before{content:\"\\f67b\"}.bi-webcam-fill::before{content:\"\\f67c\"}.bi-webcam::before{content:\"\\f67d\"}.bi-yin-yang::before{content:\"\\f67e\"}.bi-bandaid-fill::before{content:\"\\f680\"}.bi-bandaid::before{content:\"\\f681\"}.bi-bluetooth::before{content:\"\\f682\"}.bi-body-text::before{content:\"\\f683\"}.bi-boombox::before{content:\"\\f684\"}.bi-boxes::before{content:\"\\f685\"}.bi-dpad-fill::before{content:\"\\f686\"}.bi-dpad::before{content:\"\\f687\"}.bi-ear-fill::before{content:\"\\f688\"}.bi-ear::before{content:\"\\f689\"}.bi-envelope-check-fill::before{content:\"\\f68b\"}.bi-envelope-check::before{content:\"\\f68c\"}.bi-envelope-dash-fill::before{content:\"\\f68e\"}.bi-envelope-dash::before{content:\"\\f68f\"}.bi-envelope-exclamation-fill::before{content:\"\\f691\"}.bi-envelope-exclamation::before{content:\"\\f692\"}.bi-envelope-plus-fill::before{content:\"\\f693\"}.bi-envelope-plus::before{content:\"\\f694\"}.bi-envelope-slash-fill::before{content:\"\\f696\"}.bi-envelope-slash::before{content:\"\\f697\"}.bi-envelope-x-fill::before{content:\"\\f699\"}.bi-envelope-x::before{content:\"\\f69a\"}.bi-explicit-fill::before{content:\"\\f69b\"}.bi-explicit::before{content:\"\\f69c\"}.bi-git::before{content:\"\\f69d\"}.bi-infinity::before{content:\"\\f69e\"}.bi-list-columns-reverse::before{content:\"\\f69f\"}.bi-list-columns::before{content:\"\\f6a0\"}.bi-meta::before{content:\"\\f6a1\"}.bi-nintendo-switch::before{content:\"\\f6a4\"}.bi-pc-display-horizontal::before{content:\"\\f6a5\"}.bi-pc-display::before{content:\"\\f6a6\"}.bi-pc-horizontal::before{content:\"\\f6a7\"}.bi-pc::before{content:\"\\f6a8\"}.bi-playstation::before{content:\"\\f6a9\"}.bi-plus-slash-minus::before{content:\"\\f6aa\"}.bi-projector-fill::before{content:\"\\f6ab\"}.bi-projector::before{content:\"\\f6ac\"}.bi-qr-code-scan::before{content:\"\\f6ad\"}.bi-qr-code::before{content:\"\\f6ae\"}.bi-quora::before{content:\"\\f6af\"}.bi-quote::before{content:\"\\f6b0\"}.bi-robot::before{content:\"\\f6b1\"}.bi-send-check-fill::before{content:\"\\f6b2\"}.bi-send-check::before{content:\"\\f6b3\"}.bi-send-dash-fill::before{content:\"\\f6b4\"}.bi-send-dash::before{content:\"\\f6b5\"}.bi-send-exclamation-fill::before{content:\"\\f6b7\"}.bi-send-exclamation::before{content:\"\\f6b8\"}.bi-send-fill::before{content:\"\\f6b9\"}.bi-send-plus-fill::before{content:\"\\f6ba\"}.bi-send-plus::before{content:\"\\f6bb\"}.bi-send-slash-fill::before{content:\"\\f6bc\"}.bi-send-slash::before{content:\"\\f6bd\"}.bi-send-x-fill::before{content:\"\\f6be\"}.bi-send-x::before{content:\"\\f6bf\"}.bi-send::before{content:\"\\f6c0\"}.bi-steam::before{content:\"\\f6c1\"}.bi-terminal-dash::before{content:\"\\f6c3\"}.bi-terminal-plus::before{content:\"\\f6c4\"}.bi-terminal-split::before{content:\"\\f6c5\"}.bi-ticket-detailed-fill::before{content:\"\\f6c6\"}.bi-ticket-detailed::before{content:\"\\f6c7\"}.bi-ticket-fill::before{content:\"\\f6c8\"}.bi-ticket-perforated-fill::before{content:\"\\f6c9\"}.bi-ticket-perforated::before{content:\"\\f6ca\"}.bi-ticket::before{content:\"\\f6cb\"}.bi-tiktok::before{content:\"\\f6cc\"}.bi-window-dash::before{content:\"\\f6cd\"}.bi-window-desktop::before{content:\"\\f6ce\"}.bi-window-fullscreen::before{content:\"\\f6cf\"}.bi-window-plus::before{content:\"\\f6d0\"}.bi-window-split::before{content:\"\\f6d1\"}.bi-window-stack::before{content:\"\\f6d2\"}.bi-window-x::before{content:\"\\f6d3\"}.bi-xbox::before{content:\"\\f6d4\"}.bi-ethernet::before{content:\"\\f6d5\"}.bi-hdmi-fill::before{content:\"\\f6d6\"}.bi-hdmi::before{content:\"\\f6d7\"}.bi-usb-c-fill::before{content:\"\\f6d8\"}.bi-usb-c::before{content:\"\\f6d9\"}.bi-usb-fill::before{content:\"\\f6da\"}.bi-usb-plug-fill::before{content:\"\\f6db\"}.bi-usb-plug::before{content:\"\\f6dc\"}.bi-usb-symbol::before{content:\"\\f6dd\"}.bi-usb::before{content:\"\\f6de\"}.bi-boombox-fill::before{content:\"\\f6df\"}.bi-displayport::before{content:\"\\f6e1\"}.bi-gpu-card::before{content:\"\\f6e2\"}.bi-memory::before{content:\"\\f6e3\"}.bi-modem-fill::before{content:\"\\f6e4\"}.bi-modem::before{content:\"\\f6e5\"}.bi-motherboard-fill::before{content:\"\\f6e6\"}.bi-motherboard::before{content:\"\\f6e7\"}.bi-optical-audio-fill::before{content:\"\\f6e8\"}.bi-optical-audio::before{content:\"\\f6e9\"}.bi-pci-card::before{content:\"\\f6ea\"}.bi-router-fill::before{content:\"\\f6eb\"}.bi-router::before{content:\"\\f6ec\"}.bi-thunderbolt-fill::before{content:\"\\f6ef\"}.bi-thunderbolt::before{content:\"\\f6f0\"}.bi-usb-drive-fill::before{content:\"\\f6f1\"}.bi-usb-drive::before{content:\"\\f6f2\"}.bi-usb-micro-fill::before{content:\"\\f6f3\"}.bi-usb-micro::before{content:\"\\f6f4\"}.bi-usb-mini-fill::before{content:\"\\f6f5\"}.bi-usb-mini::before{content:\"\\f6f6\"}.bi-cloud-haze2::before{content:\"\\f6f7\"}.bi-device-hdd-fill::before{content:\"\\f6f8\"}.bi-device-hdd::before{content:\"\\f6f9\"}.bi-device-ssd-fill::before{content:\"\\f6fa\"}.bi-device-ssd::before{content:\"\\f6fb\"}.bi-displayport-fill::before{content:\"\\f6fc\"}.bi-mortarboard-fill::before{content:\"\\f6fd\"}.bi-mortarboard::before{content:\"\\f6fe\"}.bi-terminal-x::before{content:\"\\f6ff\"}.bi-arrow-through-heart-fill::before{content:\"\\f700\"}.bi-arrow-through-heart::before{content:\"\\f701\"}.bi-badge-sd-fill::before{content:\"\\f702\"}.bi-badge-sd::before{content:\"\\f703\"}.bi-bag-heart-fill::before{content:\"\\f704\"}.bi-bag-heart::before{content:\"\\f705\"}.bi-balloon-fill::before{content:\"\\f706\"}.bi-balloon-heart-fill::before{content:\"\\f707\"}.bi-balloon-heart::before{content:\"\\f708\"}.bi-balloon::before{content:\"\\f709\"}.bi-box2-fill::before{content:\"\\f70a\"}.bi-box2-heart-fill::before{content:\"\\f70b\"}.bi-box2-heart::before{content:\"\\f70c\"}.bi-box2::before{content:\"\\f70d\"}.bi-braces-asterisk::before{content:\"\\f70e\"}.bi-calendar-heart-fill::before{content:\"\\f70f\"}.bi-calendar-heart::before{content:\"\\f710\"}.bi-calendar2-heart-fill::before{content:\"\\f711\"}.bi-calendar2-heart::before{content:\"\\f712\"}.bi-chat-heart-fill::before{content:\"\\f713\"}.bi-chat-heart::before{content:\"\\f714\"}.bi-chat-left-heart-fill::before{content:\"\\f715\"}.bi-chat-left-heart::before{content:\"\\f716\"}.bi-chat-right-heart-fill::before{content:\"\\f717\"}.bi-chat-right-heart::before{content:\"\\f718\"}.bi-chat-square-heart-fill::before{content:\"\\f719\"}.bi-chat-square-heart::before{content:\"\\f71a\"}.bi-clipboard-check-fill::before{content:\"\\f71b\"}.bi-clipboard-data-fill::before{content:\"\\f71c\"}.bi-clipboard-fill::before{content:\"\\f71d\"}.bi-clipboard-heart-fill::before{content:\"\\f71e\"}.bi-clipboard-heart::before{content:\"\\f71f\"}.bi-clipboard-minus-fill::before{content:\"\\f720\"}.bi-clipboard-plus-fill::before{content:\"\\f721\"}.bi-clipboard-pulse::before{content:\"\\f722\"}.bi-clipboard-x-fill::before{content:\"\\f723\"}.bi-clipboard2-check-fill::before{content:\"\\f724\"}.bi-clipboard2-check::before{content:\"\\f725\"}.bi-clipboard2-data-fill::before{content:\"\\f726\"}.bi-clipboard2-data::before{content:\"\\f727\"}.bi-clipboard2-fill::before{content:\"\\f728\"}.bi-clipboard2-heart-fill::before{content:\"\\f729\"}.bi-clipboard2-heart::before{content:\"\\f72a\"}.bi-clipboard2-minus-fill::before{content:\"\\f72b\"}.bi-clipboard2-minus::before{content:\"\\f72c\"}.bi-clipboard2-plus-fill::before{content:\"\\f72d\"}.bi-clipboard2-plus::before{content:\"\\f72e\"}.bi-clipboard2-pulse-fill::before{content:\"\\f72f\"}.bi-clipboard2-pulse::before{content:\"\\f730\"}.bi-clipboard2-x-fill::before{content:\"\\f731\"}.bi-clipboard2-x::before{content:\"\\f732\"}.bi-clipboard2::before{content:\"\\f733\"}.bi-emoji-kiss-fill::before{content:\"\\f734\"}.bi-emoji-kiss::before{content:\"\\f735\"}.bi-envelope-heart-fill::before{content:\"\\f736\"}.bi-envelope-heart::before{content:\"\\f737\"}.bi-envelope-open-heart-fill::before{content:\"\\f738\"}.bi-envelope-open-heart::before{content:\"\\f739\"}.bi-envelope-paper-fill::before{content:\"\\f73a\"}.bi-envelope-paper-heart-fill::before{content:\"\\f73b\"}.bi-envelope-paper-heart::before{content:\"\\f73c\"}.bi-envelope-paper::before{content:\"\\f73d\"}.bi-filetype-aac::before{content:\"\\f73e\"}.bi-filetype-ai::before{content:\"\\f73f\"}.bi-filetype-bmp::before{content:\"\\f740\"}.bi-filetype-cs::before{content:\"\\f741\"}.bi-filetype-css::before{content:\"\\f742\"}.bi-filetype-csv::before{content:\"\\f743\"}.bi-filetype-doc::before{content:\"\\f744\"}.bi-filetype-docx::before{content:\"\\f745\"}.bi-filetype-exe::before{content:\"\\f746\"}.bi-filetype-gif::before{content:\"\\f747\"}.bi-filetype-heic::before{content:\"\\f748\"}.bi-filetype-html::before{content:\"\\f749\"}.bi-filetype-java::before{content:\"\\f74a\"}.bi-filetype-jpg::before{content:\"\\f74b\"}.bi-filetype-js::before{content:\"\\f74c\"}.bi-filetype-jsx::before{content:\"\\f74d\"}.bi-filetype-key::before{content:\"\\f74e\"}.bi-filetype-m4p::before{content:\"\\f74f\"}.bi-filetype-md::before{content:\"\\f750\"}.bi-filetype-mdx::before{content:\"\\f751\"}.bi-filetype-mov::before{content:\"\\f752\"}.bi-filetype-mp3::before{content:\"\\f753\"}.bi-filetype-mp4::before{content:\"\\f754\"}.bi-filetype-otf::before{content:\"\\f755\"}.bi-filetype-pdf::before{content:\"\\f756\"}.bi-filetype-php::before{content:\"\\f757\"}.bi-filetype-png::before{content:\"\\f758\"}.bi-filetype-ppt::before{content:\"\\f75a\"}.bi-filetype-psd::before{content:\"\\f75b\"}.bi-filetype-py::before{content:\"\\f75c\"}.bi-filetype-raw::before{content:\"\\f75d\"}.bi-filetype-rb::before{content:\"\\f75e\"}.bi-filetype-sass::before{content:\"\\f75f\"}.bi-filetype-scss::before{content:\"\\f760\"}.bi-filetype-sh::before{content:\"\\f761\"}.bi-filetype-svg::before{content:\"\\f762\"}.bi-filetype-tiff::before{content:\"\\f763\"}.bi-filetype-tsx::before{content:\"\\f764\"}.bi-filetype-ttf::before{content:\"\\f765\"}.bi-filetype-txt::before{content:\"\\f766\"}.bi-filetype-wav::before{content:\"\\f767\"}.bi-filetype-woff::before{content:\"\\f768\"}.bi-filetype-xls::before{content:\"\\f76a\"}.bi-filetype-xml::before{content:\"\\f76b\"}.bi-filetype-yml::before{content:\"\\f76c\"}.bi-heart-arrow::before{content:\"\\f76d\"}.bi-heart-pulse-fill::before{content:\"\\f76e\"}.bi-heart-pulse::before{content:\"\\f76f\"}.bi-heartbreak-fill::before{content:\"\\f770\"}.bi-heartbreak::before{content:\"\\f771\"}.bi-hearts::before{content:\"\\f772\"}.bi-hospital-fill::before{content:\"\\f773\"}.bi-hospital::before{content:\"\\f774\"}.bi-house-heart-fill::before{content:\"\\f775\"}.bi-house-heart::before{content:\"\\f776\"}.bi-incognito::before{content:\"\\f777\"}.bi-magnet-fill::before{content:\"\\f778\"}.bi-magnet::before{content:\"\\f779\"}.bi-person-heart::before{content:\"\\f77a\"}.bi-person-hearts::before{content:\"\\f77b\"}.bi-phone-flip::before{content:\"\\f77c\"}.bi-plugin::before{content:\"\\f77d\"}.bi-postage-fill::before{content:\"\\f77e\"}.bi-postage-heart-fill::before{content:\"\\f77f\"}.bi-postage-heart::before{content:\"\\f780\"}.bi-postage::before{content:\"\\f781\"}.bi-postcard-fill::before{content:\"\\f782\"}.bi-postcard-heart-fill::before{content:\"\\f783\"}.bi-postcard-heart::before{content:\"\\f784\"}.bi-postcard::before{content:\"\\f785\"}.bi-search-heart-fill::before{content:\"\\f786\"}.bi-search-heart::before{content:\"\\f787\"}.bi-sliders2-vertical::before{content:\"\\f788\"}.bi-sliders2::before{content:\"\\f789\"}.bi-trash3-fill::before{content:\"\\f78a\"}.bi-trash3::before{content:\"\\f78b\"}.bi-valentine::before{content:\"\\f78c\"}.bi-valentine2::before{content:\"\\f78d\"}.bi-wrench-adjustable-circle-fill::before{content:\"\\f78e\"}.bi-wrench-adjustable-circle::before{content:\"\\f78f\"}.bi-wrench-adjustable::before{content:\"\\f790\"}.bi-filetype-json::before{content:\"\\f791\"}.bi-filetype-pptx::before{content:\"\\f792\"}.bi-filetype-xlsx::before{content:\"\\f793\"}.bi-1-circle-fill::before{content:\"\\f796\"}.bi-1-circle::before{content:\"\\f797\"}.bi-1-square-fill::before{content:\"\\f798\"}.bi-1-square::before{content:\"\\f799\"}.bi-2-circle-fill::before{content:\"\\f79c\"}.bi-2-circle::before{content:\"\\f79d\"}.bi-2-square-fill::before{content:\"\\f79e\"}.bi-2-square::before{content:\"\\f79f\"}.bi-3-circle-fill::before{content:\"\\f7a2\"}.bi-3-circle::before{content:\"\\f7a3\"}.bi-3-square-fill::before{content:\"\\f7a4\"}.bi-3-square::before{content:\"\\f7a5\"}.bi-4-circle-fill::before{content:\"\\f7a8\"}.bi-4-circle::before{content:\"\\f7a9\"}.bi-4-square-fill::before{content:\"\\f7aa\"}.bi-4-square::before{content:\"\\f7ab\"}.bi-5-circle-fill::before{content:\"\\f7ae\"}.bi-5-circle::before{content:\"\\f7af\"}.bi-5-square-fill::before{content:\"\\f7b0\"}.bi-5-square::before{content:\"\\f7b1\"}.bi-6-circle-fill::before{content:\"\\f7b4\"}.bi-6-circle::before{content:\"\\f7b5\"}.bi-6-square-fill::before{content:\"\\f7b6\"}.bi-6-square::before{content:\"\\f7b7\"}.bi-7-circle-fill::before{content:\"\\f7ba\"}.bi-7-circle::before{content:\"\\f7bb\"}.bi-7-square-fill::before{content:\"\\f7bc\"}.bi-7-square::before{content:\"\\f7bd\"}.bi-8-circle-fill::before{content:\"\\f7c0\"}.bi-8-circle::before{content:\"\\f7c1\"}.bi-8-square-fill::before{content:\"\\f7c2\"}.bi-8-square::before{content:\"\\f7c3\"}.bi-9-circle-fill::before{content:\"\\f7c6\"}.bi-9-circle::before{content:\"\\f7c7\"}.bi-9-square-fill::before{content:\"\\f7c8\"}.bi-9-square::before{content:\"\\f7c9\"}.bi-airplane-engines-fill::before{content:\"\\f7ca\"}.bi-airplane-engines::before{content:\"\\f7cb\"}.bi-airplane-fill::before{content:\"\\f7cc\"}.bi-airplane::before{content:\"\\f7cd\"}.bi-alexa::before{content:\"\\f7ce\"}.bi-alipay::before{content:\"\\f7cf\"}.bi-android::before{content:\"\\f7d0\"}.bi-android2::before{content:\"\\f7d1\"}.bi-box-fill::before{content:\"\\f7d2\"}.bi-box-seam-fill::before{content:\"\\f7d3\"}.bi-browser-chrome::before{content:\"\\f7d4\"}.bi-browser-edge::before{content:\"\\f7d5\"}.bi-browser-firefox::before{content:\"\\f7d6\"}.bi-browser-safari::before{content:\"\\f7d7\"}.bi-c-circle-fill::before{content:\"\\f7da\"}.bi-c-circle::before{content:\"\\f7db\"}.bi-c-square-fill::before{content:\"\\f7dc\"}.bi-c-square::before{content:\"\\f7dd\"}.bi-capsule-pill::before{content:\"\\f7de\"}.bi-capsule::before{content:\"\\f7df\"}.bi-car-front-fill::before{content:\"\\f7e0\"}.bi-car-front::before{content:\"\\f7e1\"}.bi-cassette-fill::before{content:\"\\f7e2\"}.bi-cassette::before{content:\"\\f7e3\"}.bi-cc-circle-fill::before{content:\"\\f7e6\"}.bi-cc-circle::before{content:\"\\f7e7\"}.bi-cc-square-fill::before{content:\"\\f7e8\"}.bi-cc-square::before{content:\"\\f7e9\"}.bi-cup-hot-fill::before{content:\"\\f7ea\"}.bi-cup-hot::before{content:\"\\f7eb\"}.bi-currency-rupee::before{content:\"\\f7ec\"}.bi-dropbox::before{content:\"\\f7ed\"}.bi-escape::before{content:\"\\f7ee\"}.bi-fast-forward-btn-fill::before{content:\"\\f7ef\"}.bi-fast-forward-btn::before{content:\"\\f7f0\"}.bi-fast-forward-circle-fill::before{content:\"\\f7f1\"}.bi-fast-forward-circle::before{content:\"\\f7f2\"}.bi-fast-forward-fill::before{content:\"\\f7f3\"}.bi-fast-forward::before{content:\"\\f7f4\"}.bi-filetype-sql::before{content:\"\\f7f5\"}.bi-fire::before{content:\"\\f7f6\"}.bi-google-play::before{content:\"\\f7f7\"}.bi-h-circle-fill::before{content:\"\\f7fa\"}.bi-h-circle::before{content:\"\\f7fb\"}.bi-h-square-fill::before{content:\"\\f7fc\"}.bi-h-square::before{content:\"\\f7fd\"}.bi-indent::before{content:\"\\f7fe\"}.bi-lungs-fill::before{content:\"\\f7ff\"}.bi-lungs::before{content:\"\\f800\"}.bi-microsoft-teams::before{content:\"\\f801\"}.bi-p-circle-fill::before{content:\"\\f804\"}.bi-p-circle::before{content:\"\\f805\"}.bi-p-square-fill::before{content:\"\\f806\"}.bi-p-square::before{content:\"\\f807\"}.bi-pass-fill::before{content:\"\\f808\"}.bi-pass::before{content:\"\\f809\"}.bi-prescription::before{content:\"\\f80a\"}.bi-prescription2::before{content:\"\\f80b\"}.bi-r-circle-fill::before{content:\"\\f80e\"}.bi-r-circle::before{content:\"\\f80f\"}.bi-r-square-fill::before{content:\"\\f810\"}.bi-r-square::before{content:\"\\f811\"}.bi-repeat-1::before{content:\"\\f812\"}.bi-repeat::before{content:\"\\f813\"}.bi-rewind-btn-fill::before{content:\"\\f814\"}.bi-rewind-btn::before{content:\"\\f815\"}.bi-rewind-circle-fill::before{content:\"\\f816\"}.bi-rewind-circle::before{content:\"\\f817\"}.bi-rewind-fill::before{content:\"\\f818\"}.bi-rewind::before{content:\"\\f819\"}.bi-train-freight-front-fill::before{content:\"\\f81a\"}.bi-train-freight-front::before{content:\"\\f81b\"}.bi-train-front-fill::before{content:\"\\f81c\"}.bi-train-front::before{content:\"\\f81d\"}.bi-train-lightrail-front-fill::before{content:\"\\f81e\"}.bi-train-lightrail-front::before{content:\"\\f81f\"}.bi-truck-front-fill::before{content:\"\\f820\"}.bi-truck-front::before{content:\"\\f821\"}.bi-ubuntu::before{content:\"\\f822\"}.bi-unindent::before{content:\"\\f823\"}.bi-unity::before{content:\"\\f824\"}.bi-universal-access-circle::before{content:\"\\f825\"}.bi-universal-access::before{content:\"\\f826\"}.bi-virus::before{content:\"\\f827\"}.bi-virus2::before{content:\"\\f828\"}.bi-wechat::before{content:\"\\f829\"}.bi-yelp::before{content:\"\\f82a\"}.bi-sign-stop-fill::before{content:\"\\f82b\"}.bi-sign-stop-lights-fill::before{content:\"\\f82c\"}.bi-sign-stop-lights::before{content:\"\\f82d\"}.bi-sign-stop::before{content:\"\\f82e\"}.bi-sign-turn-left-fill::before{content:\"\\f82f\"}.bi-sign-turn-left::before{content:\"\\f830\"}.bi-sign-turn-right-fill::before{content:\"\\f831\"}.bi-sign-turn-right::before{content:\"\\f832\"}.bi-sign-turn-slight-left-fill::before{content:\"\\f833\"}.bi-sign-turn-slight-left::before{content:\"\\f834\"}.bi-sign-turn-slight-right-fill::before{content:\"\\f835\"}.bi-sign-turn-slight-right::before{content:\"\\f836\"}.bi-sign-yield-fill::before{content:\"\\f837\"}.bi-sign-yield::before{content:\"\\f838\"}.bi-ev-station-fill::before{content:\"\\f839\"}.bi-ev-station::before{content:\"\\f83a\"}.bi-fuel-pump-diesel-fill::before{content:\"\\f83b\"}.bi-fuel-pump-diesel::before{content:\"\\f83c\"}.bi-fuel-pump-fill::before{content:\"\\f83d\"}.bi-fuel-pump::before{content:\"\\f83e\"}.bi-0-circle-fill::before{content:\"\\f83f\"}.bi-0-circle::before{content:\"\\f840\"}.bi-0-square-fill::before{content:\"\\f841\"}.bi-0-square::before{content:\"\\f842\"}.bi-rocket-fill::before{content:\"\\f843\"}.bi-rocket-takeoff-fill::before{content:\"\\f844\"}.bi-rocket-takeoff::before{content:\"\\f845\"}.bi-rocket::before{content:\"\\f846\"}.bi-stripe::before{content:\"\\f847\"}.bi-subscript::before{content:\"\\f848\"}.bi-superscript::before{content:\"\\f849\"}.bi-trello::before{content:\"\\f84a\"}.bi-envelope-at-fill::before{content:\"\\f84b\"}.bi-envelope-at::before{content:\"\\f84c\"}.bi-regex::before{content:\"\\f84d\"}.bi-text-wrap::before{content:\"\\f84e\"}.bi-sign-dead-end-fill::before{content:\"\\f84f\"}.bi-sign-dead-end::before{content:\"\\f850\"}.bi-sign-do-not-enter-fill::before{content:\"\\f851\"}.bi-sign-do-not-enter::before{content:\"\\f852\"}.bi-sign-intersection-fill::before{content:\"\\f853\"}.bi-sign-intersection-side-fill::before{content:\"\\f854\"}.bi-sign-intersection-side::before{content:\"\\f855\"}.bi-sign-intersection-t-fill::before{content:\"\\f856\"}.bi-sign-intersection-t::before{content:\"\\f857\"}.bi-sign-intersection-y-fill::before{content:\"\\f858\"}.bi-sign-intersection-y::before{content:\"\\f859\"}.bi-sign-intersection::before{content:\"\\f85a\"}.bi-sign-merge-left-fill::before{content:\"\\f85b\"}.bi-sign-merge-left::before{content:\"\\f85c\"}.bi-sign-merge-right-fill::before{content:\"\\f85d\"}.bi-sign-merge-right::before{content:\"\\f85e\"}.bi-sign-no-left-turn-fill::before{content:\"\\f85f\"}.bi-sign-no-left-turn::before{content:\"\\f860\"}.bi-sign-no-parking-fill::before{content:\"\\f861\"}.bi-sign-no-parking::before{content:\"\\f862\"}.bi-sign-no-right-turn-fill::before{content:\"\\f863\"}.bi-sign-no-right-turn::before{content:\"\\f864\"}.bi-sign-railroad-fill::before{content:\"\\f865\"}.bi-sign-railroad::before{content:\"\\f866\"}.bi-building-add::before{content:\"\\f867\"}.bi-building-check::before{content:\"\\f868\"}.bi-building-dash::before{content:\"\\f869\"}.bi-building-down::before{content:\"\\f86a\"}.bi-building-exclamation::before{content:\"\\f86b\"}.bi-building-fill-add::before{content:\"\\f86c\"}.bi-building-fill-check::before{content:\"\\f86d\"}.bi-building-fill-dash::before{content:\"\\f86e\"}.bi-building-fill-down::before{content:\"\\f86f\"}.bi-building-fill-exclamation::before{content:\"\\f870\"}.bi-building-fill-gear::before{content:\"\\f871\"}.bi-building-fill-lock::before{content:\"\\f872\"}.bi-building-fill-slash::before{content:\"\\f873\"}.bi-building-fill-up::before{content:\"\\f874\"}.bi-building-fill-x::before{content:\"\\f875\"}.bi-building-fill::before{content:\"\\f876\"}.bi-building-gear::before{content:\"\\f877\"}.bi-building-lock::before{content:\"\\f878\"}.bi-building-slash::before{content:\"\\f879\"}.bi-building-up::before{content:\"\\f87a\"}.bi-building-x::before{content:\"\\f87b\"}.bi-buildings-fill::before{content:\"\\f87c\"}.bi-buildings::before{content:\"\\f87d\"}.bi-bus-front-fill::before{content:\"\\f87e\"}.bi-bus-front::before{content:\"\\f87f\"}.bi-ev-front-fill::before{content:\"\\f880\"}.bi-ev-front::before{content:\"\\f881\"}.bi-globe-americas::before{content:\"\\f882\"}.bi-globe-asia-australia::before{content:\"\\f883\"}.bi-globe-central-south-asia::before{content:\"\\f884\"}.bi-globe-europe-africa::before{content:\"\\f885\"}.bi-house-add-fill::before{content:\"\\f886\"}.bi-house-add::before{content:\"\\f887\"}.bi-house-check-fill::before{content:\"\\f888\"}.bi-house-check::before{content:\"\\f889\"}.bi-house-dash-fill::before{content:\"\\f88a\"}.bi-house-dash::before{content:\"\\f88b\"}.bi-house-down-fill::before{content:\"\\f88c\"}.bi-house-down::before{content:\"\\f88d\"}.bi-house-exclamation-fill::before{content:\"\\f88e\"}.bi-house-exclamation::before{content:\"\\f88f\"}.bi-house-gear-fill::before{content:\"\\f890\"}.bi-house-gear::before{content:\"\\f891\"}.bi-house-lock-fill::before{content:\"\\f892\"}.bi-house-lock::before{content:\"\\f893\"}.bi-house-slash-fill::before{content:\"\\f894\"}.bi-house-slash::before{content:\"\\f895\"}.bi-house-up-fill::before{content:\"\\f896\"}.bi-house-up::before{content:\"\\f897\"}.bi-house-x-fill::before{content:\"\\f898\"}.bi-house-x::before{content:\"\\f899\"}.bi-person-add::before{content:\"\\f89a\"}.bi-person-down::before{content:\"\\f89b\"}.bi-person-exclamation::before{content:\"\\f89c\"}.bi-person-fill-add::before{content:\"\\f89d\"}.bi-person-fill-check::before{content:\"\\f89e\"}.bi-person-fill-dash::before{content:\"\\f89f\"}.bi-person-fill-down::before{content:\"\\f8a0\"}.bi-person-fill-exclamation::before{content:\"\\f8a1\"}.bi-person-fill-gear::before{content:\"\\f8a2\"}.bi-person-fill-lock::before{content:\"\\f8a3\"}.bi-person-fill-slash::before{content:\"\\f8a4\"}.bi-person-fill-up::before{content:\"\\f8a5\"}.bi-person-fill-x::before{content:\"\\f8a6\"}.bi-person-gear::before{content:\"\\f8a7\"}.bi-person-lock::before{content:\"\\f8a8\"}.bi-person-slash::before{content:\"\\f8a9\"}.bi-person-up::before{content:\"\\f8aa\"}.bi-scooter::before{content:\"\\f8ab\"}.bi-taxi-front-fill::before{content:\"\\f8ac\"}.bi-taxi-front::before{content:\"\\f8ad\"}.bi-amd::before{content:\"\\f8ae\"}.bi-database-add::before{content:\"\\f8af\"}.bi-database-check::before{content:\"\\f8b0\"}.bi-database-dash::before{content:\"\\f8b1\"}.bi-database-down::before{content:\"\\f8b2\"}.bi-database-exclamation::before{content:\"\\f8b3\"}.bi-database-fill-add::before{content:\"\\f8b4\"}.bi-database-fill-check::before{content:\"\\f8b5\"}.bi-database-fill-dash::before{content:\"\\f8b6\"}.bi-database-fill-down::before{content:\"\\f8b7\"}.bi-database-fill-exclamation::before{content:\"\\f8b8\"}.bi-database-fill-gear::before{content:\"\\f8b9\"}.bi-database-fill-lock::before{content:\"\\f8ba\"}.bi-database-fill-slash::before{content:\"\\f8bb\"}.bi-database-fill-up::before{content:\"\\f8bc\"}.bi-database-fill-x::before{content:\"\\f8bd\"}.bi-database-fill::before{content:\"\\f8be\"}.bi-database-gear::before{content:\"\\f8bf\"}.bi-database-lock::before{content:\"\\f8c0\"}.bi-database-slash::before{content:\"\\f8c1\"}.bi-database-up::before{content:\"\\f8c2\"}.bi-database-x::before{content:\"\\f8c3\"}.bi-database::before{content:\"\\f8c4\"}.bi-houses-fill::before{content:\"\\f8c5\"}.bi-houses::before{content:\"\\f8c6\"}.bi-nvidia::before{content:\"\\f8c7\"}.bi-person-vcard-fill::before{content:\"\\f8c8\"}.bi-person-vcard::before{content:\"\\f8c9\"}.bi-sina-weibo::before{content:\"\\f8ca\"}.bi-tencent-qq::before{content:\"\\f8cb\"}.bi-wikipedia::before{content:\"\\f8cc\"}.bi-alphabet-uppercase::before{content:\"\\f2a5\"}.bi-alphabet::before{content:\"\\f68a\"}.bi-amazon::before{content:\"\\f68d\"}.bi-arrows-collapse-vertical::before{content:\"\\f690\"}.bi-arrows-expand-vertical::before{content:\"\\f695\"}.bi-arrows-vertical::before{content:\"\\f698\"}.bi-arrows::before{content:\"\\f6a2\"}.bi-ban-fill::before{content:\"\\f6a3\"}.bi-ban::before{content:\"\\f6b6\"}.bi-bing::before{content:\"\\f6c2\"}.bi-cake::before{content:\"\\f6e0\"}.bi-cake2::before{content:\"\\f6ed\"}.bi-cookie::before{content:\"\\f6ee\"}.bi-copy::before{content:\"\\f759\"}.bi-crosshair::before{content:\"\\f769\"}.bi-crosshair2::before{content:\"\\f794\"}.bi-emoji-astonished-fill::before{content:\"\\f795\"}.bi-emoji-astonished::before{content:\"\\f79a\"}.bi-emoji-grimace-fill::before{content:\"\\f79b\"}.bi-emoji-grimace::before{content:\"\\f7a0\"}.bi-emoji-grin-fill::before{content:\"\\f7a1\"}.bi-emoji-grin::before{content:\"\\f7a6\"}.bi-emoji-surprise-fill::before{content:\"\\f7a7\"}.bi-emoji-surprise::before{content:\"\\f7ac\"}.bi-emoji-tear-fill::before{content:\"\\f7ad\"}.bi-emoji-tear::before{content:\"\\f7b2\"}.bi-envelope-arrow-down-fill::before{content:\"\\f7b3\"}.bi-envelope-arrow-down::before{content:\"\\f7b8\"}.bi-envelope-arrow-up-fill::before{content:\"\\f7b9\"}.bi-envelope-arrow-up::before{content:\"\\f7be\"}.bi-feather::before{content:\"\\f7bf\"}.bi-feather2::before{content:\"\\f7c4\"}.bi-floppy-fill::before{content:\"\\f7c5\"}.bi-floppy::before{content:\"\\f7d8\"}.bi-floppy2-fill::before{content:\"\\f7d9\"}.bi-floppy2::before{content:\"\\f7e4\"}.bi-gitlab::before{content:\"\\f7e5\"}.bi-highlighter::before{content:\"\\f7f8\"}.bi-marker-tip::before{content:\"\\f802\"}.bi-nvme-fill::before{content:\"\\f803\"}.bi-nvme::before{content:\"\\f80c\"}.bi-opencollective::before{content:\"\\f80d\"}.bi-pci-card-network::before{content:\"\\f8cd\"}.bi-pci-card-sound::before{content:\"\\f8ce\"}.bi-radar::before{content:\"\\f8cf\"}.bi-send-arrow-down-fill::before{content:\"\\f8d0\"}.bi-send-arrow-down::before{content:\"\\f8d1\"}.bi-send-arrow-up-fill::before{content:\"\\f8d2\"}.bi-send-arrow-up::before{content:\"\\f8d3\"}.bi-sim-slash-fill::before{content:\"\\f8d4\"}.bi-sim-slash::before{content:\"\\f8d5\"}.bi-sourceforge::before{content:\"\\f8d6\"}.bi-substack::before{content:\"\\f8d7\"}.bi-threads-fill::before{content:\"\\f8d8\"}.bi-threads::before{content:\"\\f8d9\"}.bi-transparency::before{content:\"\\f8da\"}.bi-twitter-x::before{content:\"\\f8db\"}.bi-type-h4::before{content:\"\\f8dc\"}.bi-type-h5::before{content:\"\\f8dd\"}.bi-type-h6::before{content:\"\\f8de\"}.bi-backpack-fill::before{content:\"\\f8df\"}.bi-backpack::before{content:\"\\f8e0\"}.bi-backpack2-fill::before{content:\"\\f8e1\"}.bi-backpack2::before{content:\"\\f8e2\"}.bi-backpack3-fill::before{content:\"\\f8e3\"}.bi-backpack3::before{content:\"\\f8e4\"}.bi-backpack4-fill::before{content:\"\\f8e5\"}.bi-backpack4::before{content:\"\\f8e6\"}.bi-brilliance::before{content:\"\\f8e7\"}.bi-cake-fill::before{content:\"\\f8e8\"}.bi-cake2-fill::before{content:\"\\f8e9\"}.bi-duffle-fill::before{content:\"\\f8ea\"}.bi-duffle::before{content:\"\\f8eb\"}.bi-exposure::before{content:\"\\f8ec\"}.bi-gender-neuter::before{content:\"\\f8ed\"}.bi-highlights::before{content:\"\\f8ee\"}.bi-luggage-fill::before{content:\"\\f8ef\"}.bi-luggage::before{content:\"\\f8f0\"}.bi-mailbox-flag::before{content:\"\\f8f1\"}.bi-mailbox2-flag::before{content:\"\\f8f2\"}.bi-noise-reduction::before{content:\"\\f8f3\"}.bi-passport-fill::before{content:\"\\f8f4\"}.bi-passport::before{content:\"\\f8f5\"}.bi-person-arms-up::before{content:\"\\f8f6\"}.bi-person-raised-hand::before{content:\"\\f8f7\"}.bi-person-standing-dress::before{content:\"\\f8f8\"}.bi-person-standing::before{content:\"\\f8f9\"}.bi-person-walking::before{content:\"\\f8fa\"}.bi-person-wheelchair::before{content:\"\\f8fb\"}.bi-shadows::before{content:\"\\f8fc\"}.bi-suitcase-fill::before{content:\"\\f8fd\"}.bi-suitcase-lg-fill::before{content:\"\\f8fe\"}.bi-suitcase-lg::before{content:\"\\f8ff\"}.bi-suitcase::before{content:\"\\f900\"}.bi-suitcase2-fill::before{content:\"\\f901\"}.bi-suitcase2::before{content:\"\\f902\"}.bi-vignette::before{content:\"\\f903\"}.bi-bluesky::before{content:\"\\f7f9\"}.bi-tux::before{content:\"\\f904\"}.bi-beaker-fill::before{content:\"\\f905\"}.bi-beaker::before{content:\"\\f906\"}.bi-flask-fill::before{content:\"\\f907\"}.bi-flask-florence-fill::before{content:\"\\f908\"}.bi-flask-florence::before{content:\"\\f909\"}.bi-flask::before{content:\"\\f90a\"}.bi-leaf-fill::before{content:\"\\f90b\"}.bi-leaf::before{content:\"\\f90c\"}.bi-measuring-cup-fill::before{content:\"\\f90d\"}.bi-measuring-cup::before{content:\"\\f90e\"}.bi-unlock2-fill::before{content:\"\\f90f\"}.bi-unlock2::before{content:\"\\f910\"}.bi-battery-low::before{content:\"\\f911\"}.bi-anthropic::before{content:\"\\f912\"}.bi-apple-music::before{content:\"\\f913\"}.bi-claude::before{content:\"\\f914\"}.bi-openai::before{content:\"\\f915\"}.bi-perplexity::before{content:\"\\f916\"}.bi-css::before{content:\"\\f917\"}.bi-javascript::before{content:\"\\f918\"}.bi-typescript::before{content:\"\\f919\"}.bi-fork-knife::before{content:\"\\f91a\"}.bi-globe-americas-fill::before{content:\"\\f91b\"}.bi-globe-asia-australia-fill::before{content:\"\\f91c\"}.bi-globe-central-south-asia-fill::before{content:\"\\f91d\"}.bi-globe-europe-africa-fill::before{content:\"\\f91e\"}"
  },
  {
    "path": "modules/system/assets/vendor/chartjs/chart.esm.js",
    "content": "function le(i){return i+.5|0}var yt=(i,t,e)=>Math.max(Math.min(i,e),t);function ae(i){return yt(le(i*2.55),0,255)}function vt(i){return yt(le(i*255),0,255)}function ft(i){return yt(le(i/2.55)/100,0,1)}function Is(i){return yt(le(i*100),0,100)}var et={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},pi=[...\"0123456789ABCDEF\"],qo=i=>pi[i&15],Go=i=>pi[(i&240)>>4]+pi[i&15],Oe=i=>(i&240)>>4===(i&15),Jo=i=>Oe(i.r)&&Oe(i.g)&&Oe(i.b)&&Oe(i.a);function Zo(i){var t=i.length,e;return i[0]===\"#\"&&(t===4||t===5?e={r:255&et[i[1]]*17,g:255&et[i[2]]*17,b:255&et[i[3]]*17,a:t===5?et[i[4]]*17:255}:(t===7||t===9)&&(e={r:et[i[1]]<<4|et[i[2]],g:et[i[3]]<<4|et[i[4]],b:et[i[5]]<<4|et[i[6]],a:t===9?et[i[7]]<<4|et[i[8]]:255})),e}var Qo=(i,t)=>i<255?t(i):\"\";function ta(i){var t=Jo(i)?qo:Go;return i?\"#\"+t(i.r)+t(i.g)+t(i.b)+Qo(i.a,t):void 0}var ea=/^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;function Vs(i,t,e){let s=t*Math.min(e,1-e),n=(o,a=(o+i/30)%12)=>e-s*Math.max(Math.min(a-3,9-a,1),-1);return[n(0),n(8),n(4)]}function ia(i,t,e){let s=(n,o=(n+i/60)%6)=>e-e*t*Math.max(Math.min(o,4-o,1),0);return[s(5),s(3),s(1)]}function sa(i,t,e){let s=Vs(i,1,.5),n;for(t+e>1&&(n=1/(t+e),t*=n,e*=n),n=0;n<3;n++)s[n]*=1-t-e,s[n]+=t;return s}function na(i,t,e,s,n){return i===n?(t-e)/s+(t<e?6:0):t===n?(e-i)/s+2:(i-t)/s+4}function mi(i){let e=i.r/255,s=i.g/255,n=i.b/255,o=Math.max(e,s,n),a=Math.min(e,s,n),r=(o+a)/2,l,c,h;return o!==a&&(h=o-a,c=r>.5?h/(2-o-a):h/(o+a),l=na(e,s,n,h,o),l=l*60+.5),[l|0,c||0,r]}function bi(i,t,e,s){return(Array.isArray(t)?i(t[0],t[1],t[2]):i(t,e,s)).map(vt)}function xi(i,t,e){return bi(Vs,i,t,e)}function oa(i,t,e){return bi(sa,i,t,e)}function aa(i,t,e){return bi(ia,i,t,e)}function Ws(i){return(i%360+360)%360}function ra(i){let t=ea.exec(i),e=255,s;if(!t)return;t[5]!==s&&(e=t[6]?ae(+t[5]):vt(+t[5]));let n=Ws(+t[2]),o=+t[3]/100,a=+t[4]/100;return t[1]===\"hwb\"?s=oa(n,o,a):t[1]===\"hsv\"?s=aa(n,o,a):s=xi(n,o,a),{r:s[0],g:s[1],b:s[2],a:e}}function la(i,t){var e=mi(i);e[0]=Ws(e[0]+t),e=xi(e),i.r=e[0],i.g=e[1],i.b=e[2]}function ca(i){if(!i)return;let t=mi(i),e=t[0],s=Is(t[1]),n=Is(t[2]);return i.a<255?`hsla(${e}, ${s}%, ${n}%, ${ft(i.a)})`:`hsl(${e}, ${s}%, ${n}%)`}var Fs={x:\"dark\",Z:\"light\",Y:\"re\",X:\"blu\",W:\"gr\",V:\"medium\",U:\"slate\",A:\"ee\",T:\"ol\",S:\"or\",B:\"ra\",C:\"lateg\",D:\"ights\",R:\"in\",Q:\"turquois\",E:\"hi\",P:\"ro\",O:\"al\",N:\"le\",M:\"de\",L:\"yello\",F:\"en\",K:\"ch\",G:\"arks\",H:\"ea\",I:\"ightg\",J:\"wh\"},zs={OiceXe:\"f0f8ff\",antiquewEte:\"faebd7\",aqua:\"ffff\",aquamarRe:\"7fffd4\",azuY:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"0\",blanKedOmond:\"ffebcd\",Xe:\"ff\",XeviTet:\"8a2be2\",bPwn:\"a52a2a\",burlywood:\"deb887\",caMtXe:\"5f9ea0\",KartYuse:\"7fff00\",KocTate:\"d2691e\",cSO:\"ff7f50\",cSnflowerXe:\"6495ed\",cSnsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"ffff\",xXe:\"8b\",xcyan:\"8b8b\",xgTMnPd:\"b8860b\",xWay:\"a9a9a9\",xgYF:\"6400\",xgYy:\"a9a9a9\",xkhaki:\"bdb76b\",xmagFta:\"8b008b\",xTivegYF:\"556b2f\",xSange:\"ff8c00\",xScEd:\"9932cc\",xYd:\"8b0000\",xsOmon:\"e9967a\",xsHgYF:\"8fbc8f\",xUXe:\"483d8b\",xUWay:\"2f4f4f\",xUgYy:\"2f4f4f\",xQe:\"ced1\",xviTet:\"9400d3\",dAppRk:\"ff1493\",dApskyXe:\"bfff\",dimWay:\"696969\",dimgYy:\"696969\",dodgerXe:\"1e90ff\",fiYbrick:\"b22222\",flSOwEte:\"fffaf0\",foYstWAn:\"228b22\",fuKsia:\"ff00ff\",gaRsbSo:\"dcdcdc\",ghostwEte:\"f8f8ff\",gTd:\"ffd700\",gTMnPd:\"daa520\",Way:\"808080\",gYF:\"8000\",gYFLw:\"adff2f\",gYy:\"808080\",honeyMw:\"f0fff0\",hotpRk:\"ff69b4\",RdianYd:\"cd5c5c\",Rdigo:\"4b0082\",ivSy:\"fffff0\",khaki:\"f0e68c\",lavFMr:\"e6e6fa\",lavFMrXsh:\"fff0f5\",lawngYF:\"7cfc00\",NmoncEffon:\"fffacd\",ZXe:\"add8e6\",ZcSO:\"f08080\",Zcyan:\"e0ffff\",ZgTMnPdLw:\"fafad2\",ZWay:\"d3d3d3\",ZgYF:\"90ee90\",ZgYy:\"d3d3d3\",ZpRk:\"ffb6c1\",ZsOmon:\"ffa07a\",ZsHgYF:\"20b2aa\",ZskyXe:\"87cefa\",ZUWay:\"778899\",ZUgYy:\"778899\",ZstAlXe:\"b0c4de\",ZLw:\"ffffe0\",lime:\"ff00\",limegYF:\"32cd32\",lRF:\"faf0e6\",magFta:\"ff00ff\",maPon:\"800000\",VaquamarRe:\"66cdaa\",VXe:\"cd\",VScEd:\"ba55d3\",VpurpN:\"9370db\",VsHgYF:\"3cb371\",VUXe:\"7b68ee\",VsprRggYF:\"fa9a\",VQe:\"48d1cc\",VviTetYd:\"c71585\",midnightXe:\"191970\",mRtcYam:\"f5fffa\",mistyPse:\"ffe4e1\",moccasR:\"ffe4b5\",navajowEte:\"ffdead\",navy:\"80\",Tdlace:\"fdf5e6\",Tive:\"808000\",TivedBb:\"6b8e23\",Sange:\"ffa500\",SangeYd:\"ff4500\",ScEd:\"da70d6\",pOegTMnPd:\"eee8aa\",pOegYF:\"98fb98\",pOeQe:\"afeeee\",pOeviTetYd:\"db7093\",papayawEp:\"ffefd5\",pHKpuff:\"ffdab9\",peru:\"cd853f\",pRk:\"ffc0cb\",plum:\"dda0dd\",powMrXe:\"b0e0e6\",purpN:\"800080\",YbeccapurpN:\"663399\",Yd:\"ff0000\",Psybrown:\"bc8f8f\",PyOXe:\"4169e1\",saddNbPwn:\"8b4513\",sOmon:\"fa8072\",sandybPwn:\"f4a460\",sHgYF:\"2e8b57\",sHshell:\"fff5ee\",siFna:\"a0522d\",silver:\"c0c0c0\",skyXe:\"87ceeb\",UXe:\"6a5acd\",UWay:\"708090\",UgYy:\"708090\",snow:\"fffafa\",sprRggYF:\"ff7f\",stAlXe:\"4682b4\",tan:\"d2b48c\",teO:\"8080\",tEstN:\"d8bfd8\",tomato:\"ff6347\",Qe:\"40e0d0\",viTet:\"ee82ee\",JHt:\"f5deb3\",wEte:\"ffffff\",wEtesmoke:\"f5f5f5\",Lw:\"ffff00\",LwgYF:\"9acd32\"};function ha(){let i={},t=Object.keys(zs),e=Object.keys(Fs),s,n,o,a,r;for(s=0;s<t.length;s++){for(a=r=t[s],n=0;n<e.length;n++)o=e[n],r=r.replace(o,Fs[o]);o=parseInt(zs[a],16),i[r]=[o>>16&255,o>>8&255,o&255]}return i}var Ae;function da(i){Ae||(Ae=ha(),Ae.transparent=[0,0,0,0]);let t=Ae[i.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var ua=/^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;function fa(i){let t=ua.exec(i),e=255,s,n,o;if(t){if(t[7]!==s){let a=+t[7];e=t[8]?ae(a):yt(a*255,0,255)}return s=+t[1],n=+t[3],o=+t[5],s=255&(t[2]?ae(s):yt(s,0,255)),n=255&(t[4]?ae(n):yt(n,0,255)),o=255&(t[6]?ae(o):yt(o,0,255)),{r:s,g:n,b:o,a:e}}}function ga(i){return i&&(i.a<255?`rgba(${i.r}, ${i.g}, ${i.b}, ${ft(i.a)})`:`rgb(${i.r}, ${i.g}, ${i.b})`)}var gi=i=>i<=.0031308?i*12.92:Math.pow(i,1/2.4)*1.055-.055,Ht=i=>i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4);function pa(i,t,e){let s=Ht(ft(i.r)),n=Ht(ft(i.g)),o=Ht(ft(i.b));return{r:vt(gi(s+e*(Ht(ft(t.r))-s))),g:vt(gi(n+e*(Ht(ft(t.g))-n))),b:vt(gi(o+e*(Ht(ft(t.b))-o))),a:i.a+e*(t.a-i.a)}}function Te(i,t,e){if(i){let s=mi(i);s[t]=Math.max(0,Math.min(s[t]+s[t]*e,t===0?360:1)),s=xi(s),i.r=s[0],i.g=s[1],i.b=s[2]}}function Ns(i,t){return i&&Object.assign(t||{},i)}function Bs(i){var t={r:0,g:0,b:0,a:255};return Array.isArray(i)?i.length>=3&&(t={r:i[0],g:i[1],b:i[2],a:255},i.length>3&&(t.a=vt(i[3]))):(t=Ns(i,{r:0,g:0,b:0,a:1}),t.a=vt(t.a)),t}function ma(i){return i.charAt(0)===\"r\"?fa(i):ra(i)}var re=class i{constructor(t){if(t instanceof i)return t;let e=typeof t,s;e===\"object\"?s=Bs(t):e===\"string\"&&(s=Zo(t)||da(t)||ma(t)),this._rgb=s,this._valid=!!s}get valid(){return this._valid}get rgb(){var t=Ns(this._rgb);return t&&(t.a=ft(t.a)),t}set rgb(t){this._rgb=Bs(t)}rgbString(){return this._valid?ga(this._rgb):void 0}hexString(){return this._valid?ta(this._rgb):void 0}hslString(){return this._valid?ca(this._rgb):void 0}mix(t,e){if(t){let s=this.rgb,n=t.rgb,o,a=e===o?.5:e,r=2*a-1,l=s.a-n.a,c=((r*l===-1?r:(r+l)/(1+r*l))+1)/2;o=1-c,s.r=255&c*s.r+o*n.r+.5,s.g=255&c*s.g+o*n.g+.5,s.b=255&c*s.b+o*n.b+.5,s.a=a*s.a+(1-a)*n.a,this.rgb=s}return this}interpolate(t,e){return t&&(this._rgb=pa(this._rgb,t._rgb,e)),this}clone(){return new i(this.rgb)}alpha(t){return this._rgb.a=vt(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=le(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Te(this._rgb,2,t),this}darken(t){return Te(this._rgb,2,-t),this}saturate(t){return Te(this._rgb,1,t),this}desaturate(t){return Te(this._rgb,1,-t),this}rotate(t){return la(this._rgb,t),this}};function lt(){}var Zs=(()=>{let i=0;return()=>i++})();function O(i){return i==null}function F(i){if(Array.isArray&&Array.isArray(i))return!0;let t=Object.prototype.toString.call(i);return t.slice(0,7)===\"[object\"&&t.slice(-6)===\"Array]\"}function A(i){return i!==null&&Object.prototype.toString.call(i)===\"[object Object]\"}function W(i){return(typeof i==\"number\"||i instanceof Number)&&isFinite(+i)}function J(i,t){return W(i)?i:t}function P(i,t){return typeof i>\"u\"?t:i}var Qs=(i,t)=>typeof i==\"string\"&&i.endsWith(\"%\")?parseFloat(i)/100:+i/t,Mi=(i,t)=>typeof i==\"string\"&&i.endsWith(\"%\")?parseFloat(i)/100*t:+i;function I(i,t,e){if(i&&typeof i.call==\"function\")return i.apply(e,t)}function R(i,t,e,s){let n,o,a;if(F(i))if(o=i.length,s)for(n=o-1;n>=0;n--)t.call(e,i[n],n);else for(n=0;n<o;n++)t.call(e,i[n],n);else if(A(i))for(a=Object.keys(i),o=a.length,n=0;n<o;n++)t.call(e,i[a[n]],a[n])}function de(i,t){let e,s,n,o;if(!i||!t||i.length!==t.length)return!1;for(e=0,s=i.length;e<s;++e)if(n=i[e],o=t[e],n.datasetIndex!==o.datasetIndex||n.index!==o.index)return!1;return!0}function Ie(i){if(F(i))return i.map(Ie);if(A(i)){let t=Object.create(null),e=Object.keys(i),s=e.length,n=0;for(;n<s;++n)t[e[n]]=Ie(i[e[n]]);return t}return i}function tn(i){return[\"__proto__\",\"prototype\",\"constructor\"].indexOf(i)===-1}function ba(i,t,e,s){if(!tn(i))return;let n=t[i],o=e[i];A(n)&&A(o)?Yt(n,o,s):t[i]=Ie(o)}function Yt(i,t,e){let s=F(t)?t:[t],n=s.length;if(!A(i))return i;e=e||{};let o=e.merger||ba,a;for(let r=0;r<n;++r){if(a=s[r],!A(a))continue;let l=Object.keys(a);for(let c=0,h=l.length;c<h;++c)o(l[c],i,a,e)}return i}function Ut(i,t){return Yt(i,t,{merger:xa})}function xa(i,t,e){if(!tn(i))return;let s=t[i],n=e[i];A(s)&&A(n)?Ut(s,n):Object.prototype.hasOwnProperty.call(t,i)||(t[i]=Ie(n))}var Hs={\"\":i=>i,x:i=>i.x,y:i=>i.y};function _a(i){let t=i.split(\".\"),e=[],s=\"\";for(let n of t)s+=n,s.endsWith(\"\\\\\")?s=s.slice(0,-1)+\".\":(e.push(s),s=\"\");return e}function ya(i){let t=_a(i);return e=>{for(let s of t){if(s===\"\")break;e=e&&e[s]}return e}}function mt(i,t){return(Hs[t]||(Hs[t]=ya(t)))(i)}function Ve(i){return i.charAt(0).toUpperCase()+i.slice(1)}var Xt=i=>typeof i<\"u\",gt=i=>typeof i==\"function\",ki=(i,t)=>{if(i.size!==t.size)return!1;for(let e of i)if(!t.has(e))return!1;return!0};function en(i){return i.type===\"mouseup\"||i.type===\"click\"||i.type===\"contextmenu\"}var L=Math.PI,z=2*L,va=z+L,Fe=Number.POSITIVE_INFINITY,Ma=L/180,N=L/2,Lt=L/4,js=L*2/3,pt=Math.log10,nt=Math.sign;function Kt(i,t,e){return Math.abs(i-t)<e}function Si(i){let t=Math.round(i);i=Kt(i,t,i/1e3)?t:i;let e=Math.pow(10,Math.floor(pt(i))),s=i/e;return(s<=1?1:s<=2?2:s<=5?5:10)*e}function sn(i){let t=[],e=Math.sqrt(i),s;for(s=1;s<e;s++)i%s===0&&(t.push(s),t.push(i/s));return e===(e|0)&&t.push(e),t.sort((n,o)=>n-o).pop(),t}function ka(i){return typeof i==\"symbol\"||typeof i==\"object\"&&i!==null&&!(Symbol.toPrimitive in i||\"toString\"in i||\"valueOf\"in i)}function It(i){return!ka(i)&&!isNaN(parseFloat(i))&&isFinite(i)}function nn(i,t){let e=Math.round(i);return e-t<=i&&e+t>=i}function wi(i,t,e){let s,n,o;for(s=0,n=i.length;s<n;s++)o=i[s][e],isNaN(o)||(t.min=Math.min(t.min,o),t.max=Math.max(t.max,o))}function it(i){return i*(L/180)}function We(i){return i*(180/L)}function Pi(i){if(!W(i))return;let t=1,e=0;for(;Math.round(i*t)/t!==i;)t*=10,e++;return e}function Di(i,t){let e=t.x-i.x,s=t.y-i.y,n=Math.sqrt(e*e+s*s),o=Math.atan2(s,e);return o<-.5*L&&(o+=z),{angle:o,distance:n}}function ze(i,t){return Math.sqrt(Math.pow(t.x-i.x,2)+Math.pow(t.y-i.y,2))}function Sa(i,t){return(i-t+va)%z-L}function U(i){return(i%z+z)%z}function qt(i,t,e,s){let n=U(i),o=U(t),a=U(e),r=U(o-n),l=U(a-n),c=U(n-o),h=U(n-a);return n===o||n===a||s&&o===a||r>l&&c<h}function Y(i,t,e){return Math.max(t,Math.min(e,i))}function on(i){return Y(i,-32768,32767)}function ct(i,t,e,s=1e-6){return i>=Math.min(t,e)-s&&i<=Math.max(t,e)+s}function Ne(i,t,e){e=e||(a=>i[a]<t);let s=i.length-1,n=0,o;for(;s-n>1;)o=n+s>>1,e(o)?n=o:s=o;return{lo:n,hi:s}}var at=(i,t,e,s)=>Ne(i,e,s?n=>{let o=i[n][t];return o<e||o===e&&i[n+1][t]===e}:n=>i[n][t]<e),an=(i,t,e)=>Ne(i,e,s=>i[s][t]>=e);function rn(i,t,e){let s=0,n=i.length;for(;s<n&&i[s]<t;)s++;for(;n>s&&i[n-1]>e;)n--;return s>0||n<i.length?i.slice(s,n):i}var ln=[\"push\",\"pop\",\"shift\",\"splice\",\"unshift\"];function cn(i,t){if(i._chartjs){i._chartjs.listeners.push(t);return}Object.defineProperty(i,\"_chartjs\",{configurable:!0,enumerable:!1,value:{listeners:[t]}}),ln.forEach(e=>{let s=\"_onData\"+Ve(e),n=i[e];Object.defineProperty(i,e,{configurable:!0,enumerable:!1,value(...o){let a=n.apply(this,o);return i._chartjs.listeners.forEach(r=>{typeof r[s]==\"function\"&&r[s](...o)}),a}})})}function Ci(i,t){let e=i._chartjs;if(!e)return;let s=e.listeners,n=s.indexOf(t);n!==-1&&s.splice(n,1),!(s.length>0)&&(ln.forEach(o=>{delete i[o]}),delete i._chartjs)}function Oi(i){let t=new Set(i);return t.size===i.length?i:Array.from(t)}var Ai=(function(){return typeof window>\"u\"?function(i){return i()}:window.requestAnimationFrame})();function Ti(i,t){let e=[],s=!1;return function(...n){e=n,s||(s=!0,Ai.call(window,()=>{s=!1,i.apply(t,e)}))}}function hn(i,t){let e;return function(...s){return t?(clearTimeout(e),e=setTimeout(i,t,s)):i.apply(this,s),t}}var He=i=>i===\"start\"?\"left\":i===\"end\"?\"right\":\"center\",X=(i,t,e)=>i===\"start\"?t:i===\"end\"?e:(t+e)/2,dn=(i,t,e,s)=>i===(s?\"left\":\"right\")?e:i===\"center\"?(t+e)/2:t;function Li(i,t,e){let s=t.length,n=0,o=s;if(i._sorted){let{iScale:a,vScale:r,_parsed:l}=i,c=i.dataset&&i.dataset.options?i.dataset.options.spanGaps:null,h=a.axis,{min:d,max:u,minDefined:f,maxDefined:g}=a.getUserBounds();if(f){if(n=Math.min(at(l,h,d).lo,e?s:at(t,h,a.getPixelForValue(d)).lo),c){let p=l.slice(0,n+1).reverse().findIndex(m=>!O(m[r.axis]));n-=Math.max(0,p)}n=Y(n,0,s-1)}if(g){let p=Math.max(at(l,a.axis,u,!0).hi+1,e?0:at(t,h,a.getPixelForValue(u),!0).hi+1);if(c){let m=l.slice(p-1).findIndex(b=>!O(b[r.axis]));p+=Math.max(0,m)}o=Y(p,n,s)-n}else o=s-n}return{start:n,count:o}}function Ri(i){let{xScale:t,yScale:e,_scaleRanges:s}=i,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!s)return i._scaleRanges=n,!0;let o=s.xmin!==t.min||s.xmax!==t.max||s.ymin!==e.min||s.ymax!==e.max;return Object.assign(s,n),o}var Le=i=>i===0||i===1,Ys=(i,t,e)=>-(Math.pow(2,10*(i-=1))*Math.sin((i-t)*z/e)),$s=(i,t,e)=>Math.pow(2,-10*i)*Math.sin((i-t)*z/e)+1,jt={linear:i=>i,easeInQuad:i=>i*i,easeOutQuad:i=>-i*(i-2),easeInOutQuad:i=>(i/=.5)<1?.5*i*i:-.5*(--i*(i-2)-1),easeInCubic:i=>i*i*i,easeOutCubic:i=>(i-=1)*i*i+1,easeInOutCubic:i=>(i/=.5)<1?.5*i*i*i:.5*((i-=2)*i*i+2),easeInQuart:i=>i*i*i*i,easeOutQuart:i=>-((i-=1)*i*i*i-1),easeInOutQuart:i=>(i/=.5)<1?.5*i*i*i*i:-.5*((i-=2)*i*i*i-2),easeInQuint:i=>i*i*i*i*i,easeOutQuint:i=>(i-=1)*i*i*i*i+1,easeInOutQuint:i=>(i/=.5)<1?.5*i*i*i*i*i:.5*((i-=2)*i*i*i*i+2),easeInSine:i=>-Math.cos(i*N)+1,easeOutSine:i=>Math.sin(i*N),easeInOutSine:i=>-.5*(Math.cos(L*i)-1),easeInExpo:i=>i===0?0:Math.pow(2,10*(i-1)),easeOutExpo:i=>i===1?1:-Math.pow(2,-10*i)+1,easeInOutExpo:i=>Le(i)?i:i<.5?.5*Math.pow(2,10*(i*2-1)):.5*(-Math.pow(2,-10*(i*2-1))+2),easeInCirc:i=>i>=1?i:-(Math.sqrt(1-i*i)-1),easeOutCirc:i=>Math.sqrt(1-(i-=1)*i),easeInOutCirc:i=>(i/=.5)<1?-.5*(Math.sqrt(1-i*i)-1):.5*(Math.sqrt(1-(i-=2)*i)+1),easeInElastic:i=>Le(i)?i:Ys(i,.075,.3),easeOutElastic:i=>Le(i)?i:$s(i,.075,.3),easeInOutElastic(i){return Le(i)?i:i<.5?.5*Ys(i*2,.1125,.45):.5+.5*$s(i*2-1,.1125,.45)},easeInBack(i){return i*i*((1.70158+1)*i-1.70158)},easeOutBack(i){return(i-=1)*i*((1.70158+1)*i+1.70158)+1},easeInOutBack(i){let t=1.70158;return(i/=.5)<1?.5*(i*i*(((t*=1.525)+1)*i-t)):.5*((i-=2)*i*(((t*=1.525)+1)*i+t)+2)},easeInBounce:i=>1-jt.easeOutBounce(1-i),easeOutBounce(i){return i<1/2.75?7.5625*i*i:i<2/2.75?7.5625*(i-=1.5/2.75)*i+.75:i<2.5/2.75?7.5625*(i-=2.25/2.75)*i+.9375:7.5625*(i-=2.625/2.75)*i+.984375},easeInOutBounce:i=>i<.5?jt.easeInBounce(i*2)*.5:jt.easeOutBounce(i*2-1)*.5+.5};function Ei(i){if(i&&typeof i==\"object\"){let t=i.toString();return t===\"[object CanvasPattern]\"||t===\"[object CanvasGradient]\"}return!1}function Ii(i){return Ei(i)?i:new re(i)}function _i(i){return Ei(i)?i:new re(i).saturate(.5).darken(.1).hexString()}var wa=[\"x\",\"y\",\"borderWidth\",\"radius\",\"tension\"],Pa=[\"color\",\"borderColor\",\"backgroundColor\"];function Da(i){i.set(\"animation\",{delay:void 0,duration:1e3,easing:\"easeOutQuart\",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),i.describe(\"animation\",{_fallback:!1,_indexable:!1,_scriptable:t=>t!==\"onProgress\"&&t!==\"onComplete\"&&t!==\"fn\"}),i.set(\"animations\",{colors:{type:\"color\",properties:Pa},numbers:{type:\"number\",properties:wa}}),i.describe(\"animations\",{_fallback:\"animation\"}),i.set(\"transitions\",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:\"transparent\"},visible:{type:\"boolean\",duration:0}}},hide:{animations:{colors:{to:\"transparent\"},visible:{type:\"boolean\",easing:\"linear\",fn:t=>t|0}}}})}function Ca(i){i.set(\"layout\",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var Us=new Map;function Oa(i,t){t=t||{};let e=i+JSON.stringify(t),s=Us.get(e);return s||(s=new Intl.NumberFormat(i,t),Us.set(e,s)),s}function Gt(i,t,e){return Oa(t,e).format(i)}var un={values(i){return F(i)?i:\"\"+i},numeric(i,t,e){if(i===0)return\"0\";let s=this.chart.options.locale,n,o=i;if(e.length>1){let c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n=\"scientific\"),o=Aa(i,e)}let a=pt(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),Gt(i,s,l)},logarithmic(i,t,e){if(i===0)return\"0\";let s=e[t].significand||i/Math.pow(10,Math.floor(pt(i)));return[1,2,3,5,10,15].includes(s)||t>.8*e.length?un.numeric.call(this,i,t,e):\"\"}};function Aa(i,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&i!==Math.floor(i)&&(e=i-Math.floor(i)),e}var ue={formatters:un};function Ta(i){i.set(\"scale\",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:\"ticks\",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:\"\",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:\"\",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ue.formatters.values,minor:{},major:{},align:\"center\",crossAlign:\"near\",showLabelBackdrop:!1,backdropColor:\"rgba(255, 255, 255, 0.75)\",backdropPadding:2}}),i.route(\"scale.ticks\",\"color\",\"\",\"color\"),i.route(\"scale.grid\",\"color\",\"\",\"borderColor\"),i.route(\"scale.border\",\"color\",\"\",\"borderColor\"),i.route(\"scale.title\",\"color\",\"\",\"color\"),i.describe(\"scale\",{_fallback:!1,_scriptable:t=>!t.startsWith(\"before\")&&!t.startsWith(\"after\")&&t!==\"callback\"&&t!==\"parser\",_indexable:t=>t!==\"borderDash\"&&t!==\"tickBorderDash\"&&t!==\"dash\"}),i.describe(\"scales\",{_fallback:\"scale\"}),i.describe(\"scale.ticks\",{_scriptable:t=>t!==\"backdropPadding\"&&t!==\"callback\",_indexable:t=>t!==\"backdropPadding\"})}var St=Object.create(null),je=Object.create(null);function ce(i,t){if(!t)return i;let e=t.split(\".\");for(let s=0,n=e.length;s<n;++s){let o=e[s];i=i[o]||(i[o]=Object.create(null))}return i}function yi(i,t,e){return typeof t==\"string\"?Yt(ce(i,t),e):Yt(ce(i,\"\"),t)}var vi=class{constructor(t,e){this.animation=void 0,this.backgroundColor=\"rgba(0,0,0,0.1)\",this.borderColor=\"rgba(0,0,0,0.1)\",this.color=\"#666\",this.datasets={},this.devicePixelRatio=s=>s.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[\"mousemove\",\"mouseout\",\"click\",\"touchstart\",\"touchmove\"],this.font={family:\"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",size:12,style:\"normal\",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(s,n)=>_i(n.backgroundColor),this.hoverBorderColor=(s,n)=>_i(n.borderColor),this.hoverColor=(s,n)=>_i(n.color),this.indexAxis=\"x\",this.interaction={mode:\"nearest\",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return yi(this,t,e)}get(t){return ce(this,t)}describe(t,e){return yi(je,t,e)}override(t,e){return yi(St,t,e)}route(t,e,s,n){let o=ce(this,t),a=ce(this,s),r=\"_\"+e;Object.defineProperties(o,{[r]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){let l=this[r],c=a[n];return A(l)?Object.assign({},c,l):P(l,c)},set(l){this[r]=l}}})}apply(t){t.forEach(e=>e(this))}},B=new vi({_scriptable:i=>!i.startsWith(\"on\"),_indexable:i=>i!==\"events\",hover:{_fallback:\"interaction\"},interaction:{_scriptable:!1,_indexable:!1}},[Da,Ca,Ta]);function La(i){return!i||O(i.size)||O(i.family)?null:(i.style?i.style+\" \":\"\")+(i.weight?i.weight+\" \":\"\")+i.size+\"px \"+i.family}function he(i,t,e,s,n){let o=t[n];return o||(o=t[n]=i.measureText(n).width,e.push(n)),o>s&&(s=o),s}function fn(i,t,e,s){s=s||{};let n=s.data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==t&&(n=s.data={},o=s.garbageCollect=[],s.font=t),i.save(),i.font=t;let a=0,r=e.length,l,c,h,d,u;for(l=0;l<r;l++)if(d=e[l],d!=null&&!F(d))a=he(i,n,o,a,d);else if(F(d))for(c=0,h=d.length;c<h;c++)u=d[c],u!=null&&!F(u)&&(a=he(i,n,o,a,u));i.restore();let f=o.length/2;if(f>e.length){for(l=0;l<f;l++)delete n[o[l]];o.splice(0,f)}return a}function wt(i,t,e){let s=i.currentDevicePixelRatio,n=e!==0?Math.max(e/2,.5):0;return Math.round((t-n)*s)/s+n}function Fi(i,t){!t&&!i||(t=t||i.getContext(\"2d\"),t.save(),t.resetTransform(),t.clearRect(0,0,i.width,i.height),t.restore())}function Ye(i,t,e,s){zi(i,t,e,s,null)}function zi(i,t,e,s,n){let o,a,r,l,c,h,d,u,f=t.pointStyle,g=t.rotation,p=t.radius,m=(g||0)*Ma;if(f&&typeof f==\"object\"&&(o=f.toString(),o===\"[object HTMLImageElement]\"||o===\"[object HTMLCanvasElement]\")){i.save(),i.translate(e,s),i.rotate(m),i.drawImage(f,-f.width/2,-f.height/2,f.width,f.height),i.restore();return}if(!(isNaN(p)||p<=0)){switch(i.beginPath(),f){default:n?i.ellipse(e,s,n/2,p,0,0,z):i.arc(e,s,p,0,z),i.closePath();break;case\"triangle\":h=n?n/2:p,i.moveTo(e+Math.sin(m)*h,s-Math.cos(m)*p),m+=js,i.lineTo(e+Math.sin(m)*h,s-Math.cos(m)*p),m+=js,i.lineTo(e+Math.sin(m)*h,s-Math.cos(m)*p),i.closePath();break;case\"rectRounded\":c=p*.516,l=p-c,a=Math.cos(m+Lt)*l,d=Math.cos(m+Lt)*(n?n/2-c:l),r=Math.sin(m+Lt)*l,u=Math.sin(m+Lt)*(n?n/2-c:l),i.arc(e-d,s-r,c,m-L,m-N),i.arc(e+u,s-a,c,m-N,m),i.arc(e+d,s+r,c,m,m+N),i.arc(e-u,s+a,c,m+N,m+L),i.closePath();break;case\"rect\":if(!g){l=Math.SQRT1_2*p,h=n?n/2:l,i.rect(e-h,s-l,2*h,2*l);break}m+=Lt;case\"rectRot\":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),i.moveTo(e-d,s-r),i.lineTo(e+u,s-a),i.lineTo(e+d,s+r),i.lineTo(e-u,s+a),i.closePath();break;case\"crossRot\":m+=Lt;case\"cross\":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),i.moveTo(e-d,s-r),i.lineTo(e+d,s+r),i.moveTo(e+u,s-a),i.lineTo(e-u,s+a);break;case\"star\":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),i.moveTo(e-d,s-r),i.lineTo(e+d,s+r),i.moveTo(e+u,s-a),i.lineTo(e-u,s+a),m+=Lt,d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),i.moveTo(e-d,s-r),i.lineTo(e+d,s+r),i.moveTo(e+u,s-a),i.lineTo(e-u,s+a);break;case\"line\":a=n?n/2:Math.cos(m)*p,r=Math.sin(m)*p,i.moveTo(e-a,s-r),i.lineTo(e+a,s+r);break;case\"dash\":i.moveTo(e,s),i.lineTo(e+Math.cos(m)*(n?n/2:p),s+Math.sin(m)*p);break;case!1:i.closePath();break}i.fill(),t.borderWidth>0&&i.stroke()}}function rt(i,t,e){return e=e||.5,!t||i&&i.x>t.left-e&&i.x<t.right+e&&i.y>t.top-e&&i.y<t.bottom+e}function fe(i,t){i.save(),i.beginPath(),i.rect(t.left,t.top,t.right-t.left,t.bottom-t.top),i.clip()}function ge(i){i.restore()}function gn(i,t,e,s,n){if(!t)return i.lineTo(e.x,e.y);if(n===\"middle\"){let o=(t.x+e.x)/2;i.lineTo(o,t.y),i.lineTo(o,e.y)}else n===\"after\"!=!!s?i.lineTo(t.x,e.y):i.lineTo(e.x,t.y);i.lineTo(e.x,e.y)}function pn(i,t,e,s){if(!t)return i.lineTo(e.x,e.y);i.bezierCurveTo(s?t.cp1x:t.cp2x,s?t.cp1y:t.cp2y,s?e.cp2x:e.cp1x,s?e.cp2y:e.cp1y,e.x,e.y)}function Ra(i,t){t.translation&&i.translate(t.translation[0],t.translation[1]),O(t.rotation)||i.rotate(t.rotation),t.color&&(i.fillStyle=t.color),t.textAlign&&(i.textAlign=t.textAlign),t.textBaseline&&(i.textBaseline=t.textBaseline)}function Ea(i,t,e,s,n){if(n.strikethrough||n.underline){let o=i.measureText(s),a=t-o.actualBoundingBoxLeft,r=t+o.actualBoundingBoxRight,l=e-o.actualBoundingBoxAscent,c=e+o.actualBoundingBoxDescent,h=n.strikethrough?(l+c)/2:c;i.strokeStyle=i.fillStyle,i.beginPath(),i.lineWidth=n.decorationWidth||2,i.moveTo(a,h),i.lineTo(r,h),i.stroke()}}function Ia(i,t){let e=i.fillStyle;i.fillStyle=t.color,i.fillRect(t.left,t.top,t.width,t.height),i.fillStyle=e}function Pt(i,t,e,s,n,o={}){let a=F(t)?t:[t],r=o.strokeWidth>0&&o.strokeColor!==\"\",l,c;for(i.save(),i.font=n.string,Ra(i,o),l=0;l<a.length;++l)c=a[l],o.backdrop&&Ia(i,o.backdrop),r&&(o.strokeColor&&(i.strokeStyle=o.strokeColor),O(o.strokeWidth)||(i.lineWidth=o.strokeWidth),i.strokeText(c,e,s,o.maxWidth)),i.fillText(c,e,s,o.maxWidth),Ea(i,e,s,c,o),s+=Number(n.lineHeight);i.restore()}function Jt(i,t){let{x:e,y:s,w:n,h:o,radius:a}=t;i.arc(e+a.topLeft,s+a.topLeft,a.topLeft,1.5*L,L,!0),i.lineTo(e,s+o-a.bottomLeft),i.arc(e+a.bottomLeft,s+o-a.bottomLeft,a.bottomLeft,L,N,!0),i.lineTo(e+n-a.bottomRight,s+o),i.arc(e+n-a.bottomRight,s+o-a.bottomRight,a.bottomRight,N,0,!0),i.lineTo(e+n,s+a.topRight),i.arc(e+n-a.topRight,s+a.topRight,a.topRight,0,-N,!0),i.lineTo(e+a.topLeft,s)}var Fa=/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/,za=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function Ba(i,t){let e=(\"\"+i).match(Fa);if(!e||e[1]===\"normal\")return t*1.2;switch(i=+e[2],e[3]){case\"px\":return i;case\"%\":i/=100;break}return t*i}var Va=i=>+i||0;function $e(i,t){let e={},s=A(t),n=s?Object.keys(t):t,o=A(i)?s?a=>P(i[a],i[t[a]]):a=>i[a]:()=>i;for(let a of n)e[a]=Va(o(a));return e}function Bi(i){return $e(i,{top:\"y\",right:\"x\",bottom:\"y\",left:\"x\"})}function Dt(i){return $e(i,[\"topLeft\",\"topRight\",\"bottomLeft\",\"bottomRight\"])}function K(i){let t=Bi(i);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function j(i,t){i=i||{},t=t||B.font;let e=P(i.size,t.size);typeof e==\"string\"&&(e=parseInt(e,10));let s=P(i.style,t.style);s&&!(\"\"+s).match(za)&&(console.warn('Invalid font style specified: \"'+s+'\"'),s=void 0);let n={family:P(i.family,t.family),lineHeight:Ba(P(i.lineHeight,t.lineHeight),e),size:e,style:s,weight:P(i.weight,t.weight),string:\"\"};return n.string=La(n),n}function Zt(i,t,e,s){let n=!0,o,a,r;for(o=0,a=i.length;o<a;++o)if(r=i[o],r!==void 0&&(t!==void 0&&typeof r==\"function\"&&(r=r(t),n=!1),e!==void 0&&F(r)&&(r=r[e%r.length],n=!1),r!==void 0))return s&&!n&&(s.cacheable=!1),r}function mn(i,t,e){let{min:s,max:n}=i,o=Mi(t,(n-s)/2),a=(r,l)=>e&&r===0?0:r+l;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function bt(i,t){return Object.assign(Object.create(i),t)}function Ue(i,t=[\"\"],e,s,n=()=>i[0]){let o=e||i;typeof s>\"u\"&&(s=_n(\"_fallback\",i));let a={[Symbol.toStringTag]:\"Object\",_cacheable:!0,_scopes:i,_rootScopes:o,_fallback:s,_getTarget:n,override:r=>Ue([r,...i],t,o,s)};return new Proxy(a,{deleteProperty(r,l){return delete r[l],delete r._keys,delete i[0][l],!0},get(r,l){return bn(r,l,()=>Xa(l,t,i,r))},getOwnPropertyDescriptor(r,l){return Reflect.getOwnPropertyDescriptor(r._scopes[0],l)},getPrototypeOf(){return Reflect.getPrototypeOf(i[0])},has(r,l){return Ks(r).includes(l)},ownKeys(r){return Ks(r)},set(r,l,c){let h=r._storage||(r._storage=n());return r[l]=h[l]=c,delete r._keys,!0}})}function Et(i,t,e,s){let n={_cacheable:!1,_proxy:i,_context:t,_subProxy:e,_stack:new Set,_descriptors:Vi(i,s),setContext:o=>Et(i,o,e,s),override:o=>Et(i.override(o),t,e,s)};return new Proxy(n,{deleteProperty(o,a){return delete o[a],delete i[a],!0},get(o,a,r){return bn(o,a,()=>Na(o,a,r))},getOwnPropertyDescriptor(o,a){return o._descriptors.allKeys?Reflect.has(i,a)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(i,a)},getPrototypeOf(){return Reflect.getPrototypeOf(i)},has(o,a){return Reflect.has(i,a)},ownKeys(){return Reflect.ownKeys(i)},set(o,a,r){return i[a]=r,delete o[a],!0}})}function Vi(i,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:s=t.indexable,_allKeys:n=t.allKeys}=i;return{allKeys:n,scriptable:e,indexable:s,isScriptable:gt(e)?e:()=>e,isIndexable:gt(s)?s:()=>s}}var Wa=(i,t)=>i?i+Ve(t):t,Wi=(i,t)=>A(t)&&i!==\"adapters\"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function bn(i,t,e){if(Object.prototype.hasOwnProperty.call(i,t)||t===\"constructor\")return i[t];let s=e();return i[t]=s,s}function Na(i,t,e){let{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=i,r=s[t];return gt(r)&&a.isScriptable(t)&&(r=Ha(t,r,i,e)),F(r)&&r.length&&(r=ja(t,r,i,a.isIndexable)),Wi(t,r)&&(r=Et(r,n,o&&o[t],a)),r}function Ha(i,t,e,s){let{_proxy:n,_context:o,_subProxy:a,_stack:r}=e;if(r.has(i))throw new Error(\"Recursion detected: \"+Array.from(r).join(\"->\")+\"->\"+i);r.add(i);let l=t(o,a||s);return r.delete(i),Wi(i,l)&&(l=Ni(n._scopes,n,i,l)),l}function ja(i,t,e,s){let{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=e;if(typeof o.index<\"u\"&&s(i))return t[o.index%t.length];if(A(t[0])){let l=t,c=n._scopes.filter(h=>h!==l);t=[];for(let h of l){let d=Ni(c,n,i,h);t.push(Et(d,o,a&&a[i],r))}}return t}function xn(i,t,e){return gt(i)?i(t,e):i}var Ya=(i,t)=>i===!0?t:typeof i==\"string\"?mt(t,i):void 0;function $a(i,t,e,s,n){for(let o of t){let a=Ya(e,o);if(a){i.add(a);let r=xn(a._fallback,e,n);if(typeof r<\"u\"&&r!==e&&r!==s)return r}else if(a===!1&&typeof s<\"u\"&&e!==s)return null}return!1}function Ni(i,t,e,s){let n=t._rootScopes,o=xn(t._fallback,e,s),a=[...i,...n],r=new Set;r.add(s);let l=Xs(r,a,e,o||e,s);return l===null||typeof o<\"u\"&&o!==e&&(l=Xs(r,a,o,l,s),l===null)?!1:Ue(Array.from(r),[\"\"],n,o,()=>Ua(t,e,s))}function Xs(i,t,e,s,n){for(;e;)e=$a(i,t,e,s,n);return e}function Ua(i,t,e){let s=i._getTarget();t in s||(s[t]={});let n=s[t];return F(n)&&A(e)?e:n||{}}function Xa(i,t,e,s){let n;for(let o of t)if(n=_n(Wa(o,i),e),typeof n<\"u\")return Wi(i,n)?Ni(e,s,i,n):n}function _n(i,t){for(let e of t){if(!e)continue;let s=e[i];if(typeof s<\"u\")return s}}function Ks(i){let t=i._keys;return t||(t=i._keys=Ka(i._scopes)),t}function Ka(i){let t=new Set;for(let e of i)for(let s of Object.keys(e).filter(n=>!n.startsWith(\"_\")))t.add(s);return Array.from(t)}function Hi(i,t,e,s){let{iScale:n}=i,{key:o=\"r\"}=this._parsing,a=new Array(s),r,l,c,h;for(r=0,l=s;r<l;++r)c=r+e,h=t[c],a[r]={r:n.parse(mt(h,o),c)};return a}var qa=Number.EPSILON||1e-14,$t=(i,t)=>t<i.length&&!i[t].skip&&i[t],yn=i=>i===\"x\"?\"y\":\"x\";function Ga(i,t,e,s){let n=i.skip?t:i,o=t,a=e.skip?t:e,r=ze(o,n),l=ze(a,o),c=r/(r+l),h=l/(r+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;let d=s*c,u=s*h;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function Ja(i,t,e){let s=i.length,n,o,a,r,l,c=$t(i,0);for(let h=0;h<s-1;++h)if(l=c,c=$t(i,h+1),!(!l||!c)){if(Kt(t[h],0,qa)){e[h]=e[h+1]=0;continue}n=e[h]/t[h],o=e[h+1]/t[h],r=Math.pow(n,2)+Math.pow(o,2),!(r<=9)&&(a=3/Math.sqrt(r),e[h]=n*a*t[h],e[h+1]=o*a*t[h])}}function Za(i,t,e=\"x\"){let s=yn(e),n=i.length,o,a,r,l=$t(i,0);for(let c=0;c<n;++c){if(a=r,r=l,l=$t(i,c+1),!r)continue;let h=r[e],d=r[s];a&&(o=(h-a[e])/3,r[`cp1${e}`]=h-o,r[`cp1${s}`]=d-o*t[c]),l&&(o=(l[e]-h)/3,r[`cp2${e}`]=h+o,r[`cp2${s}`]=d+o*t[c])}}function Qa(i,t=\"x\"){let e=yn(t),s=i.length,n=Array(s).fill(0),o=Array(s),a,r,l,c=$t(i,0);for(a=0;a<s;++a)if(r=l,l=c,c=$t(i,a+1),!!l){if(c){let h=c[t]-l[t];n[a]=h!==0?(c[e]-l[e])/h:0}o[a]=r?c?nt(n[a-1])!==nt(n[a])?0:(n[a-1]+n[a])/2:n[a-1]:n[a]}Ja(i,n,o),Za(i,o,t)}function Re(i,t,e){return Math.max(Math.min(i,e),t)}function tr(i,t){let e,s,n,o,a,r=rt(i[0],t);for(e=0,s=i.length;e<s;++e)a=o,o=r,r=e<s-1&&rt(i[e+1],t),o&&(n=i[e],a&&(n.cp1x=Re(n.cp1x,t.left,t.right),n.cp1y=Re(n.cp1y,t.top,t.bottom)),r&&(n.cp2x=Re(n.cp2x,t.left,t.right),n.cp2y=Re(n.cp2y,t.top,t.bottom)))}function vn(i,t,e,s,n){let o,a,r,l;if(t.spanGaps&&(i=i.filter(c=>!c.skip)),t.cubicInterpolationMode===\"monotone\")Qa(i,n);else{let c=s?i[i.length-1]:i[0];for(o=0,a=i.length;o<a;++o)r=i[o],l=Ga(c,r,i[Math.min(o+1,a-(s?0:1))%a],t.tension),r.cp1x=l.previous.x,r.cp1y=l.previous.y,r.cp2x=l.next.x,r.cp2y=l.next.y,c=r}t.capBezierPoints&&tr(i,e)}function Xe(){return typeof window<\"u\"&&typeof document<\"u\"}function Ke(i){let t=i.parentNode;return t&&t.toString()===\"[object ShadowRoot]\"&&(t=t.host),t}function Be(i,t,e){let s;return typeof i==\"string\"?(s=parseInt(i,10),i.indexOf(\"%\")!==-1&&(s=s/100*t.parentNode[e])):s=i,s}var qe=i=>i.ownerDocument.defaultView.getComputedStyle(i,null);function er(i,t){return qe(i).getPropertyValue(t)}var ir=[\"top\",\"right\",\"bottom\",\"left\"];function Rt(i,t,e){let s={};e=e?\"-\"+e:\"\";for(let n=0;n<4;n++){let o=ir[n];s[o]=parseFloat(i[t+\"-\"+o+e])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}var sr=(i,t,e)=>(i>0||t>0)&&(!e||!e.shadowRoot);function nr(i,t){let e=i.touches,s=e&&e.length?e[0]:i,{offsetX:n,offsetY:o}=s,a=!1,r,l;if(sr(n,o,i.target))r=n,l=o;else{let c=t.getBoundingClientRect();r=s.clientX-c.left,l=s.clientY-c.top,a=!0}return{x:r,y:l,box:a}}function Ct(i,t){if(\"native\"in i)return i;let{canvas:e,currentDevicePixelRatio:s}=t,n=qe(e),o=n.boxSizing===\"border-box\",a=Rt(n,\"padding\"),r=Rt(n,\"border\",\"width\"),{x:l,y:c,box:h}=nr(i,e),d=a.left+(h&&r.left),u=a.top+(h&&r.top),{width:f,height:g}=t;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*e.width/s),y:Math.round((c-u)/g*e.height/s)}}function or(i,t,e){let s,n;if(t===void 0||e===void 0){let o=i&&Ke(i);if(!o)t=i.clientWidth,e=i.clientHeight;else{let a=o.getBoundingClientRect(),r=qe(o),l=Rt(r,\"border\",\"width\"),c=Rt(r,\"padding\");t=a.width-c.width-l.width,e=a.height-c.height-l.height,s=Be(r.maxWidth,o,\"clientWidth\"),n=Be(r.maxHeight,o,\"clientHeight\")}}return{width:t,height:e,maxWidth:s||Fe,maxHeight:n||Fe}}var kt=i=>Math.round(i*10)/10;function Mn(i,t,e,s){let n=qe(i),o=Rt(n,\"margin\"),a=Be(n.maxWidth,i,\"clientWidth\")||Fe,r=Be(n.maxHeight,i,\"clientHeight\")||Fe,l=or(i,t,e),{width:c,height:h}=l;if(n.boxSizing===\"content-box\"){let u=Rt(n,\"border\",\"width\"),f=Rt(n,\"padding\");c-=f.width+u.width,h-=f.height+u.height}return c=Math.max(0,c-o.width),h=Math.max(0,s?c/s:h-o.height),c=kt(Math.min(c,a,l.maxWidth)),h=kt(Math.min(h,r,l.maxHeight)),c&&!h&&(h=kt(c/2)),(t!==void 0||e!==void 0)&&s&&l.height&&h>l.height&&(h=l.height,c=kt(Math.floor(h*s))),{width:c,height:h}}function ji(i,t,e){let s=t||1,n=kt(i.height*s),o=kt(i.width*s);i.height=kt(i.height),i.width=kt(i.width);let a=i.canvas;return a.style&&(e||!a.style.height&&!a.style.width)&&(a.style.height=`${i.height}px`,a.style.width=`${i.width}px`),i.currentDevicePixelRatio!==s||a.height!==n||a.width!==o?(i.currentDevicePixelRatio=s,a.height=n,a.width=o,i.ctx.setTransform(s,0,0,s,0,0),!0):!1}var kn=(function(){let i=!1;try{let t={get passive(){return i=!0,!1}};Xe()&&(window.addEventListener(\"test\",null,t),window.removeEventListener(\"test\",null,t))}catch{}return i})();function Yi(i,t){let e=er(i,t),s=e&&e.match(/^(\\d+)(\\.\\d+)?px$/);return s?+s[1]:void 0}function Mt(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:i.y+e*(t.y-i.y)}}function Sn(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:s===\"middle\"?e<.5?i.y:t.y:s===\"after\"?e<1?i.y:t.y:e>0?t.y:i.y}}function wn(i,t,e,s){let n={x:i.cp2x,y:i.cp2y},o={x:t.cp1x,y:t.cp1y},a=Mt(i,n,e),r=Mt(n,o,e),l=Mt(o,t,e),c=Mt(a,r,e),h=Mt(r,l,e);return Mt(c,h,e)}var ar=function(i,t){return{x(e){return i+i+t-e},setWidth(e){t=e},textAlign(e){return e===\"center\"?e:e===\"right\"?\"left\":\"right\"},xPlus(e,s){return e-s},leftForLtr(e,s){return e-s}}},rr=function(){return{x(i){return i},setWidth(i){},textAlign(i){return i},xPlus(i,t){return i+t},leftForLtr(i,t){return i}}};function Ft(i,t,e){return i?ar(t,e):rr()}function $i(i,t){let e,s;(t===\"ltr\"||t===\"rtl\")&&(e=i.canvas.style,s=[e.getPropertyValue(\"direction\"),e.getPropertyPriority(\"direction\")],e.setProperty(\"direction\",t,\"important\"),i.prevTextDirection=s)}function Ui(i,t){t!==void 0&&(delete i.prevTextDirection,i.canvas.style.setProperty(\"direction\",t[0],t[1]))}function Pn(i){return i===\"angle\"?{between:qt,compare:Sa,normalize:U}:{between:ct,compare:(t,e)=>t-e,normalize:t=>t}}function qs({start:i,end:t,count:e,loop:s,style:n}){return{start:i%e,end:t%e,loop:s&&(t-i+1)%e===0,style:n}}function lr(i,t,e){let{property:s,start:n,end:o}=e,{between:a,normalize:r}=Pn(s),l=t.length,{start:c,end:h,loop:d}=i,u,f;if(d){for(c+=l,h+=l,u=0,f=l;u<f&&a(r(t[c%l][s]),n,o);++u)c--,h--;c%=l,h%=l}return h<c&&(h+=l),{start:c,end:h,loop:d,style:i.style}}function Xi(i,t,e){if(!e)return[i];let{property:s,start:n,end:o}=e,a=t.length,{compare:r,between:l,normalize:c}=Pn(s),{start:h,end:d,loop:u,style:f}=lr(i,t,e),g=[],p=!1,m=null,b,x,v,y=()=>l(n,v,b)&&r(n,v)!==0,_=()=>r(o,b)===0||l(o,v,b),M=()=>p||y(),k=()=>!p||_();for(let S=h,w=h;S<=d;++S)x=t[S%a],!x.skip&&(b=c(x[s]),b!==v&&(p=l(b,n,o),m===null&&M()&&(m=r(b,n)===0?S:w),m!==null&&k()&&(g.push(qs({start:m,end:S,loop:u,count:a,style:f})),m=null),w=S,v=b));return m!==null&&g.push(qs({start:m,end:d,loop:u,count:a,style:f})),g}function Ki(i,t){let e=[],s=i.segments;for(let n=0;n<s.length;n++){let o=Xi(s[n],i.points,t);o.length&&e.push(...o)}return e}function cr(i,t,e,s){let n=0,o=t-1;if(e&&!s)for(;n<t&&!i[n].skip;)n++;for(;n<t&&i[n].skip;)n++;for(n%=t,e&&(o+=n);o>n&&i[o%t].skip;)o--;return o%=t,{start:n,end:o}}function hr(i,t,e,s){let n=i.length,o=[],a=t,r=i[t],l;for(l=t+1;l<=e;++l){let c=i[l%n];c.skip||c.stop?r.skip||(s=!1,o.push({start:t%n,end:(l-1)%n,loop:s}),t=a=c.stop?l:null):(a=l,r.skip&&(t=l)),r=c}return a!==null&&o.push({start:t%n,end:a%n,loop:s}),o}function Dn(i,t){let e=i.points,s=i.options.spanGaps,n=e.length;if(!n)return[];let o=!!i._loop,{start:a,end:r}=cr(e,n,o,s);if(s===!0)return Gs(i,[{start:a,end:r,loop:o}],e,t);let l=r<a?r+n:r,c=!!i._fullLoop&&a===0&&r===n-1;return Gs(i,hr(e,a,l,c),e,t)}function Gs(i,t,e,s){return!s||!s.setContext||!e?t:dr(i,t,e,s)}function dr(i,t,e,s){let n=i._chart.getContext(),o=Js(i.options),{_datasetIndex:a,options:{spanGaps:r}}=i,l=e.length,c=[],h=o,d=t[0].start,u=d;function f(g,p,m,b){let x=r?-1:1;if(g!==p){for(g+=l;e[g%l].skip;)g-=x;for(;e[p%l].skip;)p+=x;g%l!==p%l&&(c.push({start:g%l,end:p%l,loop:m,style:b}),h=b,d=p%l)}}for(let g of t){d=r?d:g.start;let p=e[d%l],m;for(u=d+1;u<=g.end;u++){let b=e[u%l];m=Js(s.setContext(bt(n,{type:\"segment\",p0:p,p1:b,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),ur(m,h)&&f(d,u-1,g.loop,h),p=b,h=m}d<u-1&&f(d,u-1,g.loop,h)}return c}function Js(i){return{backgroundColor:i.backgroundColor,borderCapStyle:i.borderCapStyle,borderDash:i.borderDash,borderDashOffset:i.borderDashOffset,borderJoinStyle:i.borderJoinStyle,borderWidth:i.borderWidth,borderColor:i.borderColor}}function ur(i,t){if(!t)return!1;let e=[],s=function(n,o){return Ei(o)?(e.includes(o)||e.push(o),e.indexOf(o)):o};return JSON.stringify(i,s)!==JSON.stringify(t,s)}function Ee(i,t,e){return i.options.clip?i[e]:t[e]}function fr(i,t){let{xScale:e,yScale:s}=i;return e&&s?{left:Ee(e,t,\"left\"),right:Ee(e,t,\"right\"),top:Ee(s,t,\"top\"),bottom:Ee(s,t,\"bottom\")}:t}function qi(i,t){let e=t._clip;if(e.disabled)return!1;let s=fr(t,i.chartArea);return{left:e.left===!1?0:s.left-(e.left===!0?0:e.left),right:e.right===!1?i.width:s.right+(e.right===!0?0:e.right),top:e.top===!1?0:s.top-(e.top===!0?0:e.top),bottom:e.bottom===!1?i.height:s.bottom+(e.bottom===!0?0:e.bottom)}}var rs=class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,s,n){let o=e.listeners[n],a=e.duration;o.forEach(r=>r({chart:t,initial:e.initial,numSteps:a,currentStep:Math.min(s-e.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=Ai.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,n)=>{if(!s.running||!s.items.length)return;let o=s.items,a=o.length-1,r=!1,l;for(;a>=0;--a)l=o[a],l._active?(l._total>s.duration&&(s.duration=l._total),l.tick(t),r=!0):(o[a]=o[o.length-1],o.pop());r&&(n.draw(),this._notify(n,s,t,\"progress\")),o.length||(s.running=!1,this._notify(n,s,t,\"complete\"),s.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((s,n)=>Math.max(s,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let s=e.items,n=s.length-1;for(;n>=0;--n)s[n].cancel();e.items=[],this._notify(t,e,Date.now(),\"complete\")}remove(t){return this._charts.delete(t)}},xt=new rs,Cn=\"transparent\",gr={boolean(i,t,e){return e>.5?t:i},color(i,t,e){let s=Ii(i||Cn),n=s.valid&&Ii(t||Cn);return n&&n.valid?n.mix(s,e).hexString():t},number(i,t,e){return i+(t-i)*e}},ls=class{constructor(t,e,s,n){let o=e[s];n=Zt([t.to,n,o,t.from]);let a=Zt([t.from,o,n]);this._active=!0,this._fn=t.fn||gr[t.type||typeof a],this._easing=jt[t.easing]||jt.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=a,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);let n=this._target[this._prop],o=s-this._start,a=this._duration-o;this._start=s,this._duration=Math.floor(Math.max(a,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=Zt([t.to,e,n,t.from]),this._from=Zt([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,s=this._duration,n=this._prop,o=this._from,a=this._loop,r=this._to,l;if(this._active=o!==r&&(a||e<s),!this._active){this._target[n]=r,this._notify(!0);return}if(e<0){this._target[n]=o;return}l=e/s%2,l=a&&l>1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,r,l)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){let e=t?\"res\":\"rej\",s=this._promises||[];for(let n=0;n<s.length;n++)s[n][e]()}},ni=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!A(t))return;let e=Object.keys(B.animation),s=this._properties;Object.getOwnPropertyNames(t).forEach(n=>{let o=t[n];if(!A(o))return;let a={};for(let r of e)a[r]=o[r];(F(o.properties)&&o.properties||[n]).forEach(r=>{(r===n||!s.has(r))&&s.set(r,a)})})}_animateOptions(t,e){let s=e.options,n=mr(t,s);if(!n)return[];let o=this._createAnimations(n,s);return s.$shared&&pr(t.options.$animations,s).then(()=>{t.options=s},()=>{}),o}_createAnimations(t,e){let s=this._properties,n=[],o=t.$animations||(t.$animations={}),a=Object.keys(e),r=Date.now(),l;for(l=a.length-1;l>=0;--l){let c=a[l];if(c.charAt(0)===\"$\")continue;if(c===\"options\"){n.push(...this._animateOptions(t,e));continue}let h=e[c],d=o[c],u=s.get(c);if(d)if(u&&d.active()){d.update(u,h,r);continue}else d.cancel();if(!u||!u.duration){t[c]=h;continue}o[c]=d=new ls(u,t,c,h),n.push(d)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let s=this._createAnimations(t,e);if(s.length)return xt.add(this._chart,s),!0}};function pr(i,t){let e=[],s=Object.keys(t);for(let n=0;n<s.length;n++){let o=i[s[n]];o&&o.active()&&e.push(o.wait())}return Promise.all(e)}function mr(i,t){if(!t)return;let e=i.options;if(!e){i.options=t;return}return e.$shared&&(i.options=e=Object.assign({},e,{$shared:!1,$animations:{}})),e}function On(i,t){let e=i&&i.options||{},s=e.reverse,n=e.min===void 0?t:0,o=e.max===void 0?t:0;return{start:s?o:n,end:s?n:o}}function br(i,t,e){if(e===!1)return!1;let s=On(i,e),n=On(t,e);return{top:n.end,right:s.end,bottom:n.start,left:s.start}}function xr(i){let t,e,s,n;return A(i)?(t=i.top,e=i.right,s=i.bottom,n=i.left):t=e=s=n=i,{top:t,right:e,bottom:s,left:n,disabled:i===!1}}function Co(i,t){let e=[],s=i._getSortedDatasetMetas(t),n,o;for(n=0,o=s.length;n<o;++n)e.push(s[n].index);return e}function An(i,t,e,s={}){let n=i.keys,o=s.mode===\"single\",a,r,l,c;if(t===null)return;let h=!1;for(a=0,r=n.length;a<r;++a){if(l=+n[a],l===e){if(h=!0,s.all)continue;break}c=i.values[l],W(c)&&(o||t===0||nt(t)===nt(c))&&(t+=c)}return!h&&!s.all?0:t}function _r(i,t){let{iScale:e,vScale:s}=t,n=e.axis===\"x\"?\"x\":\"y\",o=s.axis===\"x\"?\"x\":\"y\",a=Object.keys(i),r=new Array(a.length),l,c,h;for(l=0,c=a.length;l<c;++l)h=a[l],r[l]={[n]:h,[o]:i[h]};return r}function Gi(i,t){let e=i&&i.options.stacked;return e||e===void 0&&t.stack!==void 0}function yr(i,t,e){return`${i.id}.${t.id}.${e.stack||e.type}`}function vr(i){let{min:t,max:e,minDefined:s,maxDefined:n}=i.getUserBounds();return{min:s?t:Number.NEGATIVE_INFINITY,max:n?e:Number.POSITIVE_INFINITY}}function Mr(i,t,e){let s=i[t]||(i[t]={});return s[e]||(s[e]={})}function Tn(i,t,e,s){for(let n of t.getMatchingVisibleMetas(s).reverse()){let o=i[n.index];if(e&&o>0||!e&&o<0)return n.index}return null}function Ln(i,t){let{chart:e,_cachedMeta:s}=i,n=e._stacks||(e._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,c=a.axis,h=yr(o,a,s),d=t.length,u;for(let f=0;f<d;++f){let g=t[f],{[l]:p,[c]:m}=g,b=g._stacks||(g._stacks={});u=b[c]=Mr(n,h,p),u[r]=m,u._top=Tn(u,a,!0,s.type),u._bottom=Tn(u,a,!1,s.type);let x=u._visualValues||(u._visualValues={});x[r]=m}}function Ji(i,t){let e=i.scales;return Object.keys(e).filter(s=>e[s].axis===t).shift()}function kr(i,t){return bt(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:\"default\",type:\"dataset\"})}function Sr(i,t,e){return bt(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:\"default\",type:\"data\"})}function pe(i,t){let e=i.controller.index,s=i.vScale&&i.vScale.axis;if(s){t=t||i._parsed;for(let n of t){let o=n._stacks;if(!o||o[s]===void 0||o[s][e]===void 0)return;delete o[s][e],o[s]._visualValues!==void 0&&o[s]._visualValues[e]!==void 0&&delete o[s]._visualValues[e]}}}var Zi=i=>i===\"reset\"||i===\"none\",Rn=(i,t)=>t?i:Object.assign({},i),wr=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:Co(e,!0),values:null},ut=class{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){let t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Gi(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled(\"filler\")&&console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\")}updateIndex(t){this.index!==t&&pe(this._cachedMeta),this.index=t}linkScales(){let t=this.chart,e=this._cachedMeta,s=this.getDataset(),n=(d,u,f,g)=>d===\"x\"?u:d===\"r\"?g:f,o=e.xAxisID=P(s.xAxisID,Ji(t,\"x\")),a=e.yAxisID=P(s.yAxisID,Ji(t,\"y\")),r=e.rAxisID=P(s.rAxisID,Ji(t,\"r\")),l=e.indexAxis,c=e.iAxisID=n(l,o,a,r),h=e.vAxisID=n(l,a,o,r);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(a),e.rScale=this.getScaleForId(r),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){let e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update(\"reset\")}_destroy(){let t=this._cachedMeta;this._data&&Ci(this._data,this),t._stacked&&pe(t)}_dataCheck(){let t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if(A(e)){let n=this._cachedMeta;this._data=_r(e,n)}else if(s!==e){if(s){Ci(s,this);let n=this._cachedMeta;pe(n),n._parsed=[]}e&&Object.isExtensible(e)&&cn(e,this),this._syncList=[],this._data=e}}addElements(){let t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){let e=this._cachedMeta,s=this.getDataset(),n=!1;this._dataCheck();let o=e._stacked;e._stacked=Gi(e.vScale,e),e.stack!==s.stack&&(n=!0,pe(e),e.stack=s.stack),this._resyncElements(t),(n||o!==e._stacked)&&(Ln(this,e._parsed),e._stacked=Gi(e.vScale,e))}configure(){let t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){let{_cachedMeta:s,_data:n}=this,{iScale:o,_stacked:a}=s,r=o.axis,l=t===0&&e===n.length?!0:s._sorted,c=t>0&&s._parsed[t-1],h,d,u;if(this._parsing===!1)s._parsed=n,s._sorted=!0,u=n;else{F(n[t])?u=this.parseArrayData(s,n,t,e):A(n[t])?u=this.parseObjectData(s,n,t,e):u=this.parsePrimitiveData(s,n,t,e);let f=()=>d[r]===null||c&&d[r]<c[r];for(h=0;h<e;++h)s._parsed[h+t]=d=u[h],l&&(f()&&(l=!1),c=d);s._sorted=l}a&&Ln(this,u)}parsePrimitiveData(t,e,s,n){let{iScale:o,vScale:a}=t,r=o.axis,l=a.axis,c=o.getLabels(),h=o===a,d=new Array(n),u,f,g;for(u=0,f=n;u<f;++u)g=u+s,d[u]={[r]:h||o.parse(c[g],g),[l]:a.parse(e[g],g)};return d}parseArrayData(t,e,s,n){let{xScale:o,yScale:a}=t,r=new Array(n),l,c,h,d;for(l=0,c=n;l<c;++l)h=l+s,d=e[h],r[l]={x:o.parse(d[0],h),y:a.parse(d[1],h)};return r}parseObjectData(t,e,s,n){let{xScale:o,yScale:a}=t,{xAxisKey:r=\"x\",yAxisKey:l=\"y\"}=this._parsing,c=new Array(n),h,d,u,f;for(h=0,d=n;h<d;++h)u=h+s,f=e[u],c[h]={x:o.parse(mt(f,r),u),y:a.parse(mt(f,l),u)};return c}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,s){let n=this.chart,o=this._cachedMeta,a=e[t.axis],r={keys:Co(n,!0),values:e._stacks[t.axis]._visualValues};return An(r,a,o.index,{mode:s})}updateRangeFromParsed(t,e,s,n){let o=s[e.axis],a=o===null?NaN:o,r=n&&s._stacks[e.axis];n&&r&&(n.values=r,a=An(n,o,this._cachedMeta.index)),t.min=Math.min(t.min,a),t.max=Math.max(t.max,a)}getMinMax(t,e){let s=this._cachedMeta,n=s._parsed,o=s._sorted&&t===s.iScale,a=n.length,r=this._getOtherScale(t),l=wr(e,s,this.chart),c={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:d}=vr(r),u,f;function g(){f=n[u];let p=f[r.axis];return!W(f[t.axis])||h>p||d<p}for(u=0;u<a&&!(!g()&&(this.updateRangeFromParsed(c,t,f,l),o));++u);if(o){for(u=a-1;u>=0;--u)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){let e=this._cachedMeta._parsed,s=[],n,o,a;for(n=0,o=e.length;n<o;++n)a=e[n][t.axis],W(a)&&s.push(a);return s}getMaxOverflow(){return!1}getLabelAndValue(t){let e=this._cachedMeta,s=e.iScale,n=e.vScale,o=this.getParsed(t);return{label:s?\"\"+s.getLabelForValue(o[s.axis]):\"\",value:n?\"\"+n.getLabelForValue(o[n.axis]):\"\"}}_update(t){let e=this._cachedMeta;this.update(t||\"default\"),e._clip=xr(P(this.options.clip,br(e.xScale,e.yScale,this.getMaxOverflow())))}update(t){}draw(){let t=this._ctx,e=this.chart,s=this._cachedMeta,n=s.data||[],o=e.chartArea,a=[],r=this._drawStart||0,l=this._drawCount||n.length-r,c=this.options.drawActiveElementsOnTop,h;for(s.dataset&&s.dataset.draw(t,o,r,l),h=r;h<r+l;++h){let d=n[h];d.hidden||(d.active&&c?a.push(d):d.draw(t,o))}for(h=0;h<a.length;++h)a[h].draw(t,o)}getStyle(t,e){let s=e?\"active\":\"default\";return t===void 0&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(s):this.resolveDataElementOptions(t||0,s)}getContext(t,e,s){let n=this.getDataset(),o;if(t>=0&&t<this._cachedMeta.data.length){let a=this._cachedMeta.data[t];o=a.$context||(a.$context=Sr(this.getContext(),t,a)),o.parsed=this.getParsed(t),o.raw=n.data[t],o.index=o.dataIndex=t}else o=this.$context||(this.$context=kr(this.chart.getContext(),this.index)),o.dataset=n,o.index=o.datasetIndex=this.index;return o.active=!!e,o.mode=s,o}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e=\"default\",s){let n=e===\"active\",o=this._cachedDataOpts,a=t+\"-\"+e,r=o[a],l=this.enableOptionSharing&&Xt(s);if(r)return Rn(r,l);let c=this.chart.config,h=c.datasetElementScopeKeys(this._type,t),d=n?[`${t}Hover`,\"hover\",t,\"\"]:[t,\"\"],u=c.getOptionScopes(this.getDataset(),h),f=Object.keys(B.elements[t]),g=()=>this.getContext(s,n,e),p=c.resolveNamedOptions(u,f,g,d);return p.$shared&&(p.$shared=l,o[a]=Object.freeze(Rn(p,l))),p}_resolveAnimations(t,e,s){let n=this.chart,o=this._cachedDataOpts,a=`animation-${e}`,r=o[a];if(r)return r;let l;if(n.options.animation!==!1){let h=this.chart.config,d=h.datasetAnimationScopeKeys(this._type,e),u=h.getOptionScopes(this.getDataset(),d);l=h.createResolver(u,this.getContext(t,s,e))}let c=new ni(n,l&&l.animations);return l&&l._cacheable&&(o[a]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Zi(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){let s=this.resolveDataElementOptions(t,e),n=this._sharedOptions,o=this.getSharedOptions(s),a=this.includeOptions(e,o)||o!==n;return this.updateSharedOptions(o,e,s),{sharedOptions:o,includeOptions:a}}updateElement(t,e,s,n){Zi(n)?Object.assign(t,s):this._resolveAnimations(e,n).update(t,s)}updateSharedOptions(t,e,s){t&&!Zi(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,n){t.active=n;let o=this.getStyle(e,n);this._resolveAnimations(e,s,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,s){this._setStyle(t,s,\"active\",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,\"active\",!0)}_removeDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!1)}_setDatasetHoverStyle(){let t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!0)}_resyncElements(t){let e=this._data,s=this._cachedMeta.data;for(let[r,l,c]of this._syncList)this[r](l,c);this._syncList=[];let n=s.length,o=e.length,a=Math.min(o,n);a&&this.parse(0,a),o>n?this._insertElements(n,o-n,t):o<n&&this._removeElements(o,n-o)}_insertElements(t,e,s=!0){let n=this._cachedMeta,o=n.data,a=t+e,r,l=c=>{for(c.length+=e,r=c.length-1;r>=a;r--)c[r]=c[r-e]};for(l(o),r=t;r<a;++r)o[r]=new this.dataElementType;this._parsing&&l(n._parsed),this.parse(t,e),s&&this.updateElements(o,t,e,\"reset\")}updateElements(t,e,s,n){}_removeElements(t,e){let s=this._cachedMeta;if(this._parsing){let n=s._parsed.splice(t,e);s._stacked&&pe(s,n)}s.data.splice(t,e)}_sync(t){if(this._parsing)this._syncList.push(t);else{let[e,s,n]=t;this[e](s,n)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){let t=arguments.length;this._sync([\"_insertElements\",this.getDataset().data.length-t,t])}_onDataPop(){this._sync([\"_removeElements\",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync([\"_removeElements\",0,1])}_onDataSplice(t,e){e&&this._sync([\"_removeElements\",t,e]);let s=arguments.length-2;s&&this._sync([\"_insertElements\",t,s])}_onDataUnshift(){this._sync([\"_insertElements\",0,arguments.length])}};function Pr(i,t){if(!i._cache.$bar){let e=i.getMatchingVisibleMetas(t),s=[];for(let n=0,o=e.length;n<o;n++)s=s.concat(e[n].controller.getAllParsedValues(i));i._cache.$bar=Oi(s.sort((n,o)=>n-o))}return i._cache.$bar}function Dr(i){let t=i.iScale,e=Pr(t,i.type),s=t._length,n,o,a,r,l=()=>{a===32767||a===-32768||(Xt(r)&&(s=Math.min(s,Math.abs(a-r)||s)),r=a)};for(n=0,o=e.length;n<o;++n)a=t.getPixelForValue(e[n]),l();for(r=void 0,n=0,o=t.ticks.length;n<o;++n)a=t.getPixelForTick(n),l();return s}function Cr(i,t,e,s){let n=e.barThickness,o,a;return O(n)?(o=t.min*e.categoryPercentage,a=e.barPercentage):(o=n*s,a=1),{chunk:o/s,ratio:a,start:t.pixels[i]-o/2}}function Or(i,t,e,s){let n=t.pixels,o=n[i],a=i>0?n[i-1]:null,r=i<n.length-1?n[i+1]:null,l=e.categoryPercentage;a===null&&(a=o-(r===null?t.end-t.start:r-o)),r===null&&(r=o+o-a);let c=o-(o-Math.min(a,r))/2*l;return{chunk:Math.abs(r-a)/2*l/s,ratio:e.barPercentage,start:c}}function Ar(i,t,e,s){let n=e.parse(i[0],s),o=e.parse(i[1],s),a=Math.min(n,o),r=Math.max(n,o),l=a,c=r;Math.abs(a)>Math.abs(r)&&(l=r,c=a),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:o,min:a,max:r}}function Oo(i,t,e,s){return F(i)?Ar(i,t,e,s):t[e.axis]=e.parse(i,s),t}function En(i,t,e,s){let n=i.iScale,o=i.vScale,a=n.getLabels(),r=n===o,l=[],c,h,d,u;for(c=e,h=e+s;c<h;++c)u=t[c],d={},d[n.axis]=r||n.parse(a[c],c),l.push(Oo(u,d,o,c));return l}function Qi(i){return i&&i.barStart!==void 0&&i.barEnd!==void 0}function Tr(i,t,e){return i!==0?nt(i):(t.isHorizontal()?1:-1)*(t.min>=e?1:-1)}function Lr(i){let t,e,s,n,o;return i.horizontal?(t=i.base>i.x,e=\"left\",s=\"right\"):(t=i.base<i.y,e=\"bottom\",s=\"top\"),t?(n=\"end\",o=\"start\"):(n=\"start\",o=\"end\"),{start:e,end:s,reverse:t,top:n,bottom:o}}function Rr(i,t,e,s){let n=t.borderSkipped,o={};if(!n){i.borderSkipped=o;return}if(n===!0){i.borderSkipped={top:!0,right:!0,bottom:!0,left:!0};return}let{start:a,end:r,reverse:l,top:c,bottom:h}=Lr(i);n===\"middle\"&&e&&(i.enableBorderRadius=!0,(e._top||0)===s?n=c:(e._bottom||0)===s?n=h:(o[In(h,a,r,l)]=!0,n=c)),o[In(n,a,r,l)]=!0,i.borderSkipped=o}function In(i,t,e,s){return s?(i=Er(i,t,e),i=Fn(i,e,t)):i=Fn(i,t,e),i}function Er(i,t,e){return i===t?e:i===e?t:i}function Fn(i,t,e){return i===\"start\"?t:i===\"end\"?e:i}function Ir(i,{inflateAmount:t},e){i.inflateAmount=t===\"auto\"?e===1?.33:0:t}var cs=class extends ut{static id=\"bar\";static defaults={datasetElementType:!1,dataElementType:\"bar\",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"base\",\"width\",\"height\"]}}};static overrides={scales:{_index_:{type:\"category\",offset:!0,grid:{offset:!0}},_value_:{type:\"linear\",beginAtZero:!0}}};parsePrimitiveData(t,e,s,n){return En(t,e,s,n)}parseArrayData(t,e,s,n){return En(t,e,s,n)}parseObjectData(t,e,s,n){let{iScale:o,vScale:a}=t,{xAxisKey:r=\"x\",yAxisKey:l=\"y\"}=this._parsing,c=o.axis===\"x\"?r:l,h=a.axis===\"x\"?r:l,d=[],u,f,g,p;for(u=s,f=s+n;u<f;++u)p=e[u],g={},g[o.axis]=o.parse(mt(p,c),u),d.push(Oo(mt(p,h),g,a,u));return d}updateRangeFromParsed(t,e,s,n){super.updateRangeFromParsed(t,e,s,n);let o=s._custom;o&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,o.min),t.max=Math.max(t.max,o.max))}getMaxOverflow(){return 0}getLabelAndValue(t){let e=this._cachedMeta,{iScale:s,vScale:n}=e,o=this.getParsed(t),a=o._custom,r=Qi(a)?\"[\"+a.start+\", \"+a.end+\"]\":\"\"+n.getLabelForValue(o[n.axis]);return{label:\"\"+s.getLabelForValue(o[s.axis]),value:r}}initialize(){this.enableOptionSharing=!0,super.initialize();let t=this._cachedMeta;t.stack=this.getDataset().stack}update(t){let e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,s,n){let o=n===\"reset\",{index:a,_cachedMeta:{vScale:r}}=this,l=r.getBasePixel(),c=r.isHorizontal(),h=this._getRuler(),{sharedOptions:d,includeOptions:u}=this._getSharedOptions(e,n);for(let f=e;f<e+s;f++){let g=this.getParsed(f),p=o||O(g[r.axis])?{base:l,head:l}:this._calculateBarValuePixels(f),m=this._calculateBarIndexPixels(f,h),b=(g._stacks||{})[r.axis],x={horizontal:c,base:p.base,enableBorderRadius:!b||Qi(g._custom)||a===b._top||a===b._bottom,x:c?p.head:m.center,y:c?m.center:p.head,height:c?m.size:Math.abs(p.size),width:c?Math.abs(p.size):m.size};u&&(x.options=d||this.resolveDataElementOptions(f,t[f].active?\"active\":n));let v=x.options||t[f].options;Rr(x,v,b,a),Ir(x,v,h.ratio),this.updateElement(t[f],f,x,n)}}_getStacks(t,e){let{iScale:s}=this._cachedMeta,n=s.getMatchingVisibleMetas(this._type).filter(h=>h.controller.options.grouped),o=s.options.stacked,a=[],r=this._cachedMeta.controller.getParsed(e),l=r&&r[s.axis],c=h=>{let d=h._parsed.find(f=>f[s.axis]===l),u=d&&d[h.vScale.axis];if(O(u)||isNaN(u))return!0};for(let h of n)if(!(e!==void 0&&c(h))&&((o===!1||a.indexOf(h.stack)===-1||o===void 0&&h.stack===void 0)&&a.push(h.stack),h.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){let t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter(s=>t[s].axis===e).shift()}_getAxis(){let t={},e=this.getFirstScaleIdForIndexAxis();for(let s of this.chart.data.datasets)t[P(this.chart.options.indexAxis===\"x\"?s.xAxisID:s.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,s){let n=this._getStacks(t,s),o=e!==void 0?n.indexOf(e):-1;return o===-1?n.length-1:o}_getRuler(){let t=this.options,e=this._cachedMeta,s=e.iScale,n=[],o,a;for(o=0,a=e.data.length;o<a;++o)n.push(s.getPixelForValue(this.getParsed(o)[s.axis],o));let r=t.barThickness;return{min:r||Dr(e),pixels:n,start:s._startPixel,end:s._endPixel,stackCount:this._getStackCount(),scale:s,grouped:t.grouped,ratio:r?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){let{_cachedMeta:{vScale:e,_stacked:s,index:n},options:{base:o,minBarLength:a}}=this,r=o||0,l=this.getParsed(t),c=l._custom,h=Qi(c),d=l[e.axis],u=0,f=s?this.applyStack(e,l,s):d,g,p;f!==d&&(u=f-d,f=d),h&&(d=c.barStart,f=c.barEnd-c.barStart,d!==0&&nt(d)!==nt(c.barEnd)&&(u=0),u+=d);let m=!O(o)&&!h?o:u,b=e.getPixelForValue(m);if(this.chart.getDataVisibility(t)?g=e.getPixelForValue(u+f):g=b,p=g-b,Math.abs(p)<a){p=Tr(p,e,r)*a,d===r&&(b-=p/2);let x=e.getPixelForDecimal(0),v=e.getPixelForDecimal(1),y=Math.min(x,v),_=Math.max(x,v);b=Math.max(Math.min(b,_),y),g=b+p,s&&!h&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(g)-e.getValueForPixel(b))}if(b===e.getPixelForValue(r)){let x=nt(p)*e.getLineWidthForValue(r)/2;b+=x,p-=x}return{size:p,base:b,head:g,center:g+p/2}}_calculateBarIndexPixels(t,e){let s=e.scale,n=this.options,o=n.skipNull,a=P(n.maxBarThickness,1/0),r,l,c=this._getAxisCount();if(e.grouped){let h=o?this._getStackCount(t):e.stackCount,d=n.barThickness===\"flex\"?Or(t,e,n,h*c):Cr(t,e,n,h*c),u=this.chart.options.indexAxis===\"x\"?this.getDataset().xAxisID:this.getDataset().yAxisID,f=this._getAxis().indexOf(P(u,this.getFirstScaleIdForIndexAxis())),g=this._getStackIndex(this.index,this._cachedMeta.stack,o?t:void 0)+f;r=d.start+d.chunk*g+d.chunk/2,l=Math.min(a,d.chunk*d.ratio)}else r=s.getPixelForValue(this.getParsed(t)[s.axis],t),l=Math.min(a,e.min*e.ratio);return{base:r-l/2,head:r+l/2,center:r,size:l}}draw(){let t=this._cachedMeta,e=t.vScale,s=t.data,n=s.length,o=0;for(;o<n;++o)this.getParsed(o)[e.axis]!==null&&!s[o].hidden&&s[o].draw(this._ctx)}},hs=class extends ut{static id=\"bubble\";static defaults={datasetElementType:!1,dataElementType:\"point\",animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\"]}}};static overrides={scales:{x:{type:\"linear\"},y:{type:\"linear\"}}};initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(t,e,s,n){let o=super.parsePrimitiveData(t,e,s,n);for(let a=0;a<o.length;a++)o[a]._custom=this.resolveDataElementOptions(a+s).radius;return o}parseArrayData(t,e,s,n){let o=super.parseArrayData(t,e,s,n);for(let a=0;a<o.length;a++){let r=e[s+a];o[a]._custom=P(r[2],this.resolveDataElementOptions(a+s).radius)}return o}parseObjectData(t,e,s,n){let o=super.parseObjectData(t,e,s,n);for(let a=0;a<o.length;a++){let r=e[s+a];o[a]._custom=P(r&&r.r&&+r.r,this.resolveDataElementOptions(a+s).radius)}return o}getMaxOverflow(){let t=this._cachedMeta.data,e=0;for(let s=t.length-1;s>=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart.data.labels||[],{xScale:n,yScale:o}=e,a=this.getParsed(t),r=n.getLabelForValue(a.x),l=o.getLabelForValue(a.y),c=a._custom;return{label:s[t]||\"\",value:\"(\"+r+\", \"+l+(c?\", \"+c:\"\")+\")\"}}update(t){let e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,n){let o=n===\"reset\",{iScale:a,vScale:r}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=a.axis,d=r.axis;for(let u=e;u<e+s;u++){let f=t[u],g=!o&&this.getParsed(u),p={},m=p[h]=o?a.getPixelForDecimal(.5):a.getPixelForValue(g[h]),b=p[d]=o?r.getBasePixel():r.getPixelForValue(g[d]);p.skip=isNaN(m)||isNaN(b),c&&(p.options=l||this.resolveDataElementOptions(u,f.active?\"active\":n),o&&(p.options.radius=0)),this.updateElement(f,u,p,n)}}resolveDataElementOptions(t,e){let s=this.getParsed(t),n=super.resolveDataElementOptions(t,e);n.$shared&&(n=Object.assign({},n,{$shared:!1}));let o=n.radius;return e!==\"active\"&&(n.radius=0),n.radius+=P(s&&s._custom,o),n}};function Fr(i,t,e){let s=1,n=1,o=0,a=0;if(t<z){let r=i,l=r+t,c=Math.cos(r),h=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(v,y,_)=>qt(v,r,l,!0)?1:Math.max(y,y*e,_,_*e),g=(v,y,_)=>qt(v,r,l,!0)?-1:Math.min(y,y*e,_,_*e),p=f(0,c,d),m=f(N,h,u),b=g(L,c,d),x=g(L+N,h,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}var Me=class extends ut{static id=\"doughnut\";static defaults={datasetElementType:!1,dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:\"number\",properties:[\"circumference\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"startAngle\",\"x\",\"y\",\"offset\",\"borderWidth\",\"spacing\"]}},cutout:\"50%\",rotation:0,circumference:360,radius:\"100%\",spacing:0,indexAxis:\"r\"};static descriptors={_scriptable:t=>t!==\"spacing\",_indexable:t=>t!==\"spacing\"&&!t.startsWith(\"borderDash\")&&!t.startsWith(\"hoverBorderDash\")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){let e=t.data,{labels:{pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return e.labels.length&&e.datasets.length?e.labels.map((l,c)=>{let d=t.getDatasetMeta(0).controller.getStyle(c);return{text:l,fillStyle:d.backgroundColor,fontColor:o,hidden:!t.getDataVisibility(c),lineDash:d.borderDash,lineDashOffset:d.borderDashOffset,lineJoin:d.borderJoinStyle,lineWidth:d.borderWidth,strokeStyle:d.borderColor,textAlign:n,pointStyle:s,borderRadius:a&&(r||d.borderRadius),index:c}}):[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){let s=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=s;else{let o=l=>+s[l];if(A(s[t])){let{key:l=\"value\"}=this._parsing;o=c=>+mt(s[c],l)}let a,r;for(a=t,r=t+e;a<r;++a)n._parsed[a]=o(a)}}_getRotation(){return it(this.options.rotation-90)}_getCircumference(){return it(this.options.circumference)}_getRotationExtents(){let t=z,e=-z;for(let s=0;s<this.chart.data.datasets.length;++s)if(this.chart.isDatasetVisible(s)&&this.chart.getDatasetMeta(s).type===this._type){let n=this.chart.getDatasetMeta(s).controller,o=n._getRotation(),a=n._getCircumference();t=Math.min(t,o),e=Math.max(e,o+a)}return{rotation:t,circumference:e-t}}update(t){let e=this.chart,{chartArea:s}=e,n=this._cachedMeta,o=n.data,a=this.getMaxBorderWidth()+this.getMaxOffset(o)+this.options.spacing,r=Math.max((Math.min(s.width,s.height)-a)/2,0),l=Math.min(Qs(this.options.cutout,r),1),c=this._getRingWeight(this.index),{circumference:h,rotation:d}=this._getRotationExtents(),{ratioX:u,ratioY:f,offsetX:g,offsetY:p}=Fr(d,h,l),m=(s.width-a)/u,b=(s.height-a)/f,x=Math.max(Math.min(m,b)/2,0),v=Mi(this.options.radius,x),y=Math.max(v*l,0),_=(v-y)/this._getVisibleDatasetWeightTotal();this.offsetX=g*v,this.offsetY=p*v,n.total=this.calculateTotal(),this.outerRadius=v-_*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-_*c,0),this.updateElements(o,0,o.length,t)}_circumference(t,e){let s=this.options,n=this._cachedMeta,o=this._getCircumference();return e&&s.animation.animateRotate||!this.chart.getDataVisibility(t)||n._parsed[t]===null||n.data[t].hidden?0:this.calculateCircumference(n._parsed[t]*o/z)}updateElements(t,e,s,n){let o=n===\"reset\",a=this.chart,r=a.chartArea,c=a.options.animation,h=(r.left+r.right)/2,d=(r.top+r.bottom)/2,u=o&&c.animateScale,f=u?0:this.innerRadius,g=u?0:this.outerRadius,{sharedOptions:p,includeOptions:m}=this._getSharedOptions(e,n),b=this._getRotation(),x;for(x=0;x<e;++x)b+=this._circumference(x,o);for(x=e;x<e+s;++x){let v=this._circumference(x,o),y=t[x],_={x:h+this.offsetX,y:d+this.offsetY,startAngle:b,endAngle:b+v,circumference:v,outerRadius:g,innerRadius:f};m&&(_.options=p||this.resolveDataElementOptions(x,y.active?\"active\":n)),b+=v,this.updateElement(y,x,_,n)}}calculateTotal(){let t=this._cachedMeta,e=t.data,s=0,n;for(n=0;n<e.length;n++){let o=t._parsed[n];o!==null&&!isNaN(o)&&this.chart.getDataVisibility(n)&&!e[n].hidden&&(s+=Math.abs(o))}return s}calculateCircumference(t){let e=this._cachedMeta.total;return e>0&&!isNaN(t)?z*(Math.abs(t)/e):0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=Gt(e._parsed[t],s.options.locale);return{label:n[t]||\"\",value:o}}getMaxBorderWidth(t){let e=0,s=this.chart,n,o,a,r,l;if(!t){for(n=0,o=s.data.datasets.length;n<o;++n)if(s.isDatasetVisible(n)){a=s.getDatasetMeta(n),t=a.data,r=a.controller;break}}if(!t)return 0;for(n=0,o=t.length;n<o;++n)l=r.resolveDataElementOptions(n),l.borderAlign!==\"inner\"&&(e=Math.max(e,l.borderWidth||0,l.hoverBorderWidth||0));return e}getMaxOffset(t){let e=0;for(let s=0,n=t.length;s<n;++s){let o=this.resolveDataElementOptions(s);e=Math.max(e,o.offset||0,o.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let s=0;s<t;++s)this.chart.isDatasetVisible(s)&&(e+=this._getRingWeight(s));return e}_getRingWeight(t){return Math.max(P(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}},ds=class extends ut{static id=\"line\";static defaults={datasetElementType:\"line\",dataElementType:\"point\",showLine:!0,spanGaps:!1};static overrides={scales:{_index_:{type:\"category\"},_value_:{type:\"linear\"}}};initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){let e=this._cachedMeta,{dataset:s,data:n=[],_dataset:o}=e,a=this.chart._animationsDisabled,{start:r,count:l}=Li(e,n,a);this._drawStart=r,this._drawCount=l,Ri(e)&&(r=0,l=n.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!o._decimated,s.points=n;let c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:c},t),this.updateElements(n,r,l,t)}updateElements(t,e,s,n){let o=n===\"reset\",{iScale:a,vScale:r,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=It(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||n===\"none\",x=e+s,v=t.length,y=e>0&&this.getParsed(e-1);for(let _=0;_<v;++_){let M=t[_],k=b?M:{};if(_<e||_>=x){k.skip=!0;continue}let S=this.getParsed(_),w=O(S[f]),D=k[u]=a.getPixelForValue(S[u],_),C=k[f]=o||w?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,S,l):S[f],_);k.skip=isNaN(D)||isNaN(C)||w,k.stop=_>0&&Math.abs(S[u]-y[u])>m,p&&(k.parsed=S,k.raw=c.data[_]),d&&(k.options=h||this.resolveDataElementOptions(_,M.active?\"active\":n)),b||this.updateElement(M,_,k,n),y=S}}getMaxOverflow(){let t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return s;let o=n[0].size(this.resolveDataElementOptions(0)),a=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(s,o,a)/2}draw(){let t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},oi=class extends ut{static id=\"polarArea\";static defaults={dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"]}},indexAxis:\"r\",startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){let e=t.data;if(e.labels.length&&e.datasets.length){let{labels:{pointStyle:s,color:n}}=t.legend.options;return e.labels.map((o,a)=>{let l=t.getDatasetMeta(0).controller.getStyle(a);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:n,lineWidth:l.borderWidth,pointStyle:s,hidden:!t.getDataVisibility(a),index:a}})}return[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}},scales:{r:{type:\"radialLinear\",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){let e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=Gt(e._parsed[t].r,s.options.locale);return{label:n[t]||\"\",value:o}}parseObjectData(t,e,s,n){return Hi.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){let t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((s,n)=>{let o=this.getParsed(n).r;!isNaN(o)&&this.chart.getDataVisibility(n)&&(o<e.min&&(e.min=o),o>e.max&&(e.max=o))}),e}_updateRadius(){let t=this.chart,e=t.chartArea,s=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(n/2,0),a=Math.max(s.cutoutPercentage?o/100*s.cutoutPercentage:1,0),r=(o-a)/t.getVisibleDatasetCount();this.outerRadius=o-r*this.index,this.innerRadius=this.outerRadius-r}updateElements(t,e,s,n){let o=n===\"reset\",a=this.chart,l=a.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*L,f=u,g,p=360/this.countVisibleElements();for(g=0;g<e;++g)f+=this._computeAngle(g,n,p);for(g=e;g<e+s;g++){let m=t[g],b=f,x=f+this._computeAngle(g,n,p),v=a.getDataVisibility(g)?c.getDistanceFromCenterForValue(this.getParsed(g).r):0;f=x,o&&(l.animateScale&&(v=0),l.animateRotate&&(b=x=u));let y={x:h,y:d,innerRadius:0,outerRadius:v,startAngle:b,endAngle:x,options:this.resolveDataElementOptions(g,m.active?\"active\":n)};this.updateElement(m,g,y,n)}}countVisibleElements(){let t=this._cachedMeta,e=0;return t.data.forEach((s,n)=>{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?it(this.resolveDataElementOptions(t,e).angle||s):0}},us=class extends Me{static id=\"pie\";static defaults={cutout:0,rotation:0,circumference:360,radius:\"100%\"}},fs=class extends ut{static id=\"radar\";static defaults={datasetElementType:\"line\",dataElementType:\"point\",indexAxis:\"r\",showLine:!0,elements:{line:{fill:\"start\"}}};static overrides={aspectRatio:1,scales:{r:{type:\"radialLinear\"}}};getLabelAndValue(t){let e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:\"\"+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,n){return Hi.bind(this)(t,e,s,n)}update(t){let e=this._cachedMeta,s=e.dataset,n=e.data||[],o=e.iScale.getLabels();if(s.points=n,t!==\"resize\"){let a=this.resolveDatasetElementOptions(t);this.options.showLine||(a.borderWidth=0);let r={_loop:!0,_fullLoop:o.length===n.length,options:a};this.updateElement(s,void 0,r,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,s,n){let o=this._cachedMeta.rScale,a=n===\"reset\";for(let r=e;r<e+s;r++){let l=t[r],c=this.resolveDataElementOptions(r,l.active?\"active\":n),h=o.getPointPositionForValue(r,this.getParsed(r).r),d=a?o.xCenter:h.x,u=a?o.yCenter:h.y,f={x:d,y:u,angle:h.angle,skip:isNaN(d)||isNaN(u),options:c};this.updateElement(l,r,f,n)}}},gs=class extends ut{static id=\"scatter\";static defaults={datasetElementType:!1,dataElementType:\"point\",showLine:!1,fill:!1};static overrides={interaction:{mode:\"point\"},scales:{x:{type:\"linear\"},y:{type:\"linear\"}}};getLabelAndValue(t){let e=this._cachedMeta,s=this.chart.data.labels||[],{xScale:n,yScale:o}=e,a=this.getParsed(t),r=n.getLabelForValue(a.x),l=o.getLabelForValue(a.y);return{label:s[t]||\"\",value:\"(\"+r+\", \"+l+\")\"}}update(t){let e=this._cachedMeta,{data:s=[]}=e,n=this.chart._animationsDisabled,{start:o,count:a}=Li(e,s,n);if(this._drawStart=o,this._drawCount=a,Ri(e)&&(o=0,a=s.length),this.options.showLine){this.datasetElementType||this.addElements();let{dataset:r,_dataset:l}=e;r._chart=this.chart,r._datasetIndex=this.index,r._decimated=!!l._decimated,r.points=s;let c=this.resolveDatasetElementOptions(t);c.segment=this.options.segment,this.updateElement(r,void 0,{animated:!n,options:c},t)}else this.datasetElementType&&(delete e.dataset,this.datasetElementType=!1);this.updateElements(s,o,a,t)}addElements(){let{showLine:t}=this.options;!this.datasetElementType&&t&&(this.datasetElementType=this.chart.registry.getElement(\"line\")),super.addElements()}updateElements(t,e,s,n){let o=n===\"reset\",{iScale:a,vScale:r,_stacked:l,_dataset:c}=this._cachedMeta,h=this.resolveDataElementOptions(e,n),d=this.getSharedOptions(h),u=this.includeOptions(n,d),f=a.axis,g=r.axis,{spanGaps:p,segment:m}=this.options,b=It(p)?p:Number.POSITIVE_INFINITY,x=this.chart._animationsDisabled||o||n===\"none\",v=e>0&&this.getParsed(e-1);for(let y=e;y<e+s;++y){let _=t[y],M=this.getParsed(y),k=x?_:{},S=O(M[g]),w=k[f]=a.getPixelForValue(M[f],y),D=k[g]=o||S?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,M,l):M[g],y);k.skip=isNaN(w)||isNaN(D)||S,k.stop=y>0&&Math.abs(M[f]-v[f])>b,m&&(k.parsed=M,k.raw=c.data[y]),u&&(k.options=d||this.resolveDataElementOptions(y,_.active?\"active\":n)),x||this.updateElement(_,y,k,n),v=M}this.updateSharedOptions(d,n,h)}getMaxOverflow(){let t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let r=0;for(let l=e.length-1;l>=0;--l)r=Math.max(r,e[l].size(this.resolveDataElementOptions(l))/2);return r>0&&r}let s=t.dataset,n=s.options&&s.options.borderWidth||0;if(!e.length)return n;let o=e[0].size(this.resolveDataElementOptions(0)),a=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,o,a)/2}},zr=Object.freeze({__proto__:null,BarController:cs,BubbleController:hs,DoughnutController:Me,LineController:ds,PieController:us,PolarAreaController:oi,RadarController:fs,ScatterController:gs});function zt(){throw new Error(\"This method is not implemented: Check that a complete date adapter is provided.\")}var ps=class i{static override(t){Object.assign(i.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return zt()}parse(){return zt()}format(){return zt()}add(){return zt()}diff(){return zt()}startOf(){return zt()}endOf(){return zt()}},Br={_date:ps};function Vr(i,t,e,s){let{controller:n,data:o,_sorted:a}=i,r=n._cachedMeta.iScale,l=i.dataset&&i.dataset.options?i.dataset.options.spanGaps:null;if(r&&t===r.axis&&t!==\"r\"&&a&&o.length){let c=r._reversePixels?an:at;if(s){if(n._sharedOptions){let h=o[0],d=typeof h.getRange==\"function\"&&h.getRange(t);if(d){let u=c(o,t,e-d),f=c(o,t,e+d);return{lo:u.lo,hi:f.hi}}}}else{let h=c(o,t,e);if(l){let{vScale:d}=n._cachedMeta,{_parsed:u}=i,f=u.slice(0,h.lo+1).reverse().findIndex(p=>!O(p[d.axis]));h.lo-=Math.max(0,f);let g=u.slice(h.hi).findIndex(p=>!O(p[d.axis]));h.hi+=Math.max(0,g)}return h}}return{lo:0,hi:o.length-1}}function De(i,t,e,s,n){let o=i.getSortedVisibleDatasetMetas(),a=e[t];for(let r=0,l=o.length;r<l;++r){let{index:c,data:h}=o[r],{lo:d,hi:u}=Vr(o[r],t,a,n);for(let f=d;f<=u;++f){let g=h[f];g.skip||s(g,c,f)}}}function Wr(i){let t=i.indexOf(\"x\")!==-1,e=i.indexOf(\"y\")!==-1;return function(s,n){let o=t?Math.abs(s.x-n.x):0,a=e?Math.abs(s.y-n.y):0;return Math.sqrt(Math.pow(o,2)+Math.pow(a,2))}}function ts(i,t,e,s,n){let o=[];return!n&&!i.isPointInArea(t)||De(i,e,t,function(r,l,c){!n&&!rt(r,i.chartArea,0)||r.inRange(t.x,t.y,s)&&o.push({element:r,datasetIndex:l,index:c})},!0),o}function Nr(i,t,e,s){let n=[];function o(a,r,l){let{startAngle:c,endAngle:h}=a.getProps([\"startAngle\",\"endAngle\"],s),{angle:d}=Di(a,{x:t.x,y:t.y});qt(d,c,h)&&n.push({element:a,datasetIndex:r,index:l})}return De(i,e,t,o),n}function Hr(i,t,e,s,n,o){let a=[],r=Wr(e),l=Number.POSITIVE_INFINITY;function c(h,d,u){let f=h.inRange(t.x,t.y,n);if(s&&!f)return;let g=h.getCenterPoint(n);if(!(!!o||i.isPointInArea(g))&&!f)return;let m=r(t,g);m<l?(a=[{element:h,datasetIndex:d,index:u}],l=m):m===l&&a.push({element:h,datasetIndex:d,index:u})}return De(i,e,t,c),a}function es(i,t,e,s,n,o){return!o&&!i.isPointInArea(t)?[]:e===\"r\"&&!s?Nr(i,t,e,n):Hr(i,t,e,s,n,o)}function zn(i,t,e,s,n){let o=[],a=e===\"x\"?\"inXRange\":\"inYRange\",r=!1;return De(i,e,t,(l,c,h)=>{l[a]&&l[a](t[e],n)&&(o.push({element:l,datasetIndex:c,index:h}),r=r||l.inRange(t.x,t.y,n))}),s&&!r?[]:o}var jr={evaluateInteractionItems:De,modes:{index(i,t,e,s){let n=Ct(t,i),o=e.axis||\"x\",a=e.includeInvisible||!1,r=e.intersect?ts(i,n,o,s,a):es(i,n,o,!1,s,a),l=[];return r.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{let h=r[0].index,d=c.data[h];d&&!d.skip&&l.push({element:d,datasetIndex:c.index,index:h})}),l):[]},dataset(i,t,e,s){let n=Ct(t,i),o=e.axis||\"xy\",a=e.includeInvisible||!1,r=e.intersect?ts(i,n,o,s,a):es(i,n,o,!1,s,a);if(r.length>0){let l=r[0].datasetIndex,c=i.getDatasetMeta(l).data;r=[];for(let h=0;h<c.length;++h)r.push({element:c[h],datasetIndex:l,index:h})}return r},point(i,t,e,s){let n=Ct(t,i),o=e.axis||\"xy\",a=e.includeInvisible||!1;return ts(i,n,o,s,a)},nearest(i,t,e,s){let n=Ct(t,i),o=e.axis||\"xy\",a=e.includeInvisible||!1;return es(i,n,o,e.intersect,s,a)},x(i,t,e,s){let n=Ct(t,i);return zn(i,n,\"x\",e.intersect,s)},y(i,t,e,s){let n=Ct(t,i);return zn(i,n,\"y\",e.intersect,s)}}},Ao=[\"left\",\"top\",\"right\",\"bottom\"];function me(i,t){return i.filter(e=>e.pos===t)}function Bn(i,t){return i.filter(e=>Ao.indexOf(e.pos)===-1&&e.box.axis===t)}function be(i,t){return i.sort((e,s)=>{let n=t?s:e,o=t?e:s;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function Yr(i){let t=[],e,s,n,o,a,r;for(e=0,s=(i||[]).length;e<s;++e)n=i[e],{position:o,options:{stack:a,stackWeight:r=1}}=n,t.push({index:e,box:n,pos:o,horizontal:n.isHorizontal(),weight:n.weight,stack:a&&o+a,stackWeight:r});return t}function $r(i){let t={};for(let e of i){let{stack:s,pos:n,stackWeight:o}=e;if(!s||!Ao.includes(n))continue;let a=t[s]||(t[s]={count:0,placed:0,weight:0,size:0});a.count++,a.weight+=o}return t}function Ur(i,t){let e=$r(i),{vBoxMaxWidth:s,hBoxMaxHeight:n}=t,o,a,r;for(o=0,a=i.length;o<a;++o){r=i[o];let{fullSize:l}=r.box,c=e[r.stack],h=c&&r.stackWeight/c.weight;r.horizontal?(r.width=h?h*s:l&&t.availableWidth,r.height=n):(r.width=s,r.height=h?h*n:l&&t.availableHeight)}return e}function Xr(i){let t=Yr(i),e=be(t.filter(c=>c.box.fullSize),!0),s=be(me(t,\"left\"),!0),n=be(me(t,\"right\")),o=be(me(t,\"top\"),!0),a=be(me(t,\"bottom\")),r=Bn(t,\"x\"),l=Bn(t,\"y\");return{fullSize:e,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:me(t,\"chartArea\"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}function Vn(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function To(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function Kr(i,t,e,s){let{pos:n,box:o}=e,a=i.maxPadding;if(!A(n)){e.size&&(i[n]-=e.size);let d=s[e.stack]||{size:0,count:1};d.size=Math.max(d.size,e.horizontal?o.height:o.width),e.size=d.size/d.count,i[n]+=e.size}o.getPadding&&To(a,o.getPadding());let r=Math.max(0,t.outerWidth-Vn(a,i,\"left\",\"right\")),l=Math.max(0,t.outerHeight-Vn(a,i,\"top\",\"bottom\")),c=r!==i.w,h=l!==i.h;return i.w=r,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function qr(i){let t=i.maxPadding;function e(s){let n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e(\"top\"),i.x+=e(\"left\"),e(\"right\"),e(\"bottom\")}function Gr(i,t){let e=t.maxPadding;function s(n){let o={left:0,top:0,right:0,bottom:0};return n.forEach(a=>{o[a]=Math.max(t[a],e[a])}),o}return s(i?[\"left\",\"right\"]:[\"top\",\"bottom\"])}function ye(i,t,e,s){let n=[],o,a,r,l,c,h;for(o=0,a=i.length,c=0;o<a;++o){r=i[o],l=r.box,l.update(r.width||t.w,r.height||t.h,Gr(r.horizontal,t));let{same:d,other:u}=Kr(t,e,r,s);c|=d&&n.length,h=h||u,l.fullSize||n.push(r)}return c&&ye(n,t,e,s)||h}function Ge(i,t,e,s,n){i.top=e,i.left=t,i.right=t+s,i.bottom=e+n,i.width=s,i.height=n}function Wn(i,t,e,s){let n=e.padding,{x:o,y:a}=t;for(let r of i){let l=r.box,c=s[r.stack]||{count:1,placed:0,weight:1},h=r.stackWeight/c.weight||1;if(r.horizontal){let d=t.w*h,u=c.size||l.height;Xt(c.start)&&(a=c.start),l.fullSize?Ge(l,n.left,a,e.outerWidth-n.right-n.left,u):Ge(l,t.left+c.placed,a,d,u),c.start=a,c.placed+=d,a=l.bottom}else{let d=t.h*h,u=c.size||l.width;Xt(c.start)&&(o=c.start),l.fullSize?Ge(l,o,n.top,u,e.outerHeight-n.bottom-n.top):Ge(l,o,t.top+c.placed,u,d),c.start=o,c.placed+=d,o=l.right}}t.x=o,t.y=a}var G={addBox(i,t){i.boxes||(i.boxes=[]),t.fullSize=t.fullSize||!1,t.position=t.position||\"top\",t.weight=t.weight||0,t._layers=t._layers||function(){return[{z:0,draw(e){t.draw(e)}}]},i.boxes.push(t)},removeBox(i,t){let e=i.boxes?i.boxes.indexOf(t):-1;e!==-1&&i.boxes.splice(e,1)},configure(i,t,e){t.fullSize=e.fullSize,t.position=e.position,t.weight=e.weight},update(i,t,e,s){if(!i)return;let n=K(i.options.layout.padding),o=Math.max(t-n.width,0),a=Math.max(e-n.height,0),r=Xr(i.boxes),l=r.vertical,c=r.horizontal;R(i.boxes,p=>{typeof p.beforeLayout==\"function\"&&p.beforeLayout()});let h=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/h,hBoxMaxHeight:a/2}),u=Object.assign({},n);To(u,K(s));let f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Ur(l.concat(c),d);ye(r.fullSize,f,d,g),ye(l,f,d,g),ye(c,f,d,g)&&ye(l,f,d,g),qr(f),Wn(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,Wn(r.rightAndBottom,f,d,g),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},R(r.chartArea,p=>{let m=p.box;Object.assign(m,i.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}},ai=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}},ms=class extends ai{acquireContext(t){return t&&t.getContext&&t.getContext(\"2d\")||null}updateConfig(t){t.options.animation=!1}},ii=\"$chartjs\",Jr={touchstart:\"mousedown\",touchmove:\"mousemove\",touchend:\"mouseup\",pointerenter:\"mouseenter\",pointerdown:\"mousedown\",pointermove:\"mousemove\",pointerup:\"mouseup\",pointerleave:\"mouseout\",pointerout:\"mouseout\"},Nn=i=>i===null||i===\"\";function Zr(i,t){let e=i.style,s=i.getAttribute(\"height\"),n=i.getAttribute(\"width\");if(i[ii]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||\"block\",e.boxSizing=e.boxSizing||\"border-box\",Nn(n)){let o=Yi(i,\"width\");o!==void 0&&(i.width=o)}if(Nn(s))if(i.style.height===\"\")i.height=i.width/(t||2);else{let o=Yi(i,\"height\");o!==void 0&&(i.height=o)}return i}var Lo=kn?{passive:!0}:!1;function Qr(i,t,e){i&&i.addEventListener(t,e,Lo)}function tl(i,t,e){i&&i.canvas&&i.canvas.removeEventListener(t,e,Lo)}function el(i,t){let e=Jr[i.type]||i.type,{x:s,y:n}=Ct(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function ri(i,t){for(let e of i)if(e===t||e.contains(t))return!0}function il(i,t,e){let s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(let r of o)a=a||ri(r.addedNodes,s),a=a&&!ri(r.removedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function sl(i,t,e){let s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(let r of o)a=a||ri(r.removedNodes,s),a=a&&!ri(r.addedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}var ke=new Map,Hn=0;function Ro(){let i=window.devicePixelRatio;i!==Hn&&(Hn=i,ke.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function nl(i,t){ke.size||window.addEventListener(\"resize\",Ro),ke.set(i,t)}function ol(i){ke.delete(i),ke.size||window.removeEventListener(\"resize\",Ro)}function al(i,t,e){let s=i.canvas,n=s&&Ke(s);if(!n)return;let o=Ti((r,l)=>{let c=n.clientWidth;e(r,l),c<n.clientWidth&&e()},window),a=new ResizeObserver(r=>{let l=r[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return a.observe(n),nl(i,o),a}function is(i,t,e){e&&e.disconnect(),t===\"resize\"&&ol(i)}function rl(i,t,e){let s=i.canvas,n=Ti(o=>{i.ctx!==null&&e(el(o,i))},i);return Qr(s,t,n),n}var bs=class extends ai{acquireContext(t,e){let s=t&&t.getContext&&t.getContext(\"2d\");return s&&s.canvas===t?(Zr(t,e),s):null}releaseContext(t){let e=t.canvas;if(!e[ii])return!1;let s=e[ii].initial;[\"height\",\"width\"].forEach(o=>{let a=s[o];O(a)?e.removeAttribute(o):e.setAttribute(o,a)});let n=s.style||{};return Object.keys(n).forEach(o=>{e.style[o]=n[o]}),e.width=e.width,delete e[ii],!0}addEventListener(t,e,s){this.removeEventListener(t,e);let n=t.$proxies||(t.$proxies={}),a={attach:il,detach:sl,resize:al}[e]||rl;n[e]=a(t,e,s)}removeEventListener(t,e){let s=t.$proxies||(t.$proxies={}),n=s[e];if(!n)return;({attach:is,detach:is,resize:is}[e]||tl)(t,e,n),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,n){return Mn(t,e,s,n)}isAttached(t){let e=t&&Ke(t);return!!(e&&e.isConnected)}};function ll(i){return!Xe()||typeof OffscreenCanvas<\"u\"&&i instanceof OffscreenCanvas?ms:bs}var ot=class{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(t){let{x:e,y:s}=this.getProps([\"x\",\"y\"],t);return{x:e,y:s}}hasValue(){return It(this.x)&&It(this.y)}getProps(t,e){let s=this.$animations;if(!e||!s)return this;let n={};return t.forEach(o=>{n[o]=s[o]&&s[o].active()?s[o]._to:this[o]}),n}};function cl(i,t){let e=i.options.ticks,s=hl(i),n=Math.min(e.maxTicksLimit||s,s),o=e.major.enabled?ul(t):[],a=o.length,r=o[0],l=o[a-1],c=[];if(a>n)return fl(t,c,o,a/n),c;let h=dl(o,t,n);if(a>0){let d,u,f=a>1?Math.round((l-r)/(a-1)):null;for(Je(t,c,h,O(f)?0:r-f,r),d=0,u=a-1;d<u;d++)Je(t,c,h,o[d],o[d+1]);return Je(t,c,h,l,O(f)?t.length:l+f),c}return Je(t,c,h),c}function hl(i){let t=i.options.offset,e=i._tickSize(),s=i._length/e+(t?0:1),n=i._maxLength/e;return Math.floor(Math.min(s,n))}function dl(i,t,e){let s=gl(i),n=t.length/e;if(!s)return Math.max(n,1);let o=sn(s);for(let a=0,r=o.length-1;a<r;a++){let l=o[a];if(l>n)return l}return Math.max(n,1)}function ul(i){let t=[],e,s;for(e=0,s=i.length;e<s;e++)i[e].major&&t.push(e);return t}function fl(i,t,e,s){let n=0,o=e[0],a;for(s=Math.ceil(s),a=0;a<i.length;a++)a===o&&(t.push(i[a]),n++,o=e[n*s])}function Je(i,t,e,s,n){let o=P(s,0),a=Math.min(P(n,i.length),i.length),r=0,l,c,h;for(e=Math.ceil(e),n&&(l=n-s,e=l/Math.floor(l/e)),h=o;h<0;)r++,h=Math.round(o+r*e);for(c=Math.max(o,0);c<a;c++)c===h&&(t.push(i[c]),r++,h=Math.round(o+r*e))}function gl(i){let t=i.length,e,s;if(t<2)return!1;for(s=i[0],e=1;e<t;++e)if(i[e]-i[e-1]!==s)return!1;return s}var pl=i=>i===\"left\"?\"right\":i===\"right\"?\"left\":i,jn=(i,t,e)=>t===\"top\"||t===\"left\"?i[t]+e:i[t]-e,Yn=(i,t)=>Math.min(t||i,i);function $n(i,t){let e=[],s=i.length/t,n=i.length,o=0;for(;o<n;o+=s)e.push(i[Math.floor(o)]);return e}function ml(i,t,e){let s=i.ticks.length,n=Math.min(t,s-1),o=i._startPixel,a=i._endPixel,r=1e-6,l=i.getPixelForTick(n),c;if(!(e&&(s===1?c=Math.max(l-o,a-l):t===0?c=(i.getPixelForTick(1)-l)/2:c=(l-i.getPixelForTick(n-1))/2,l+=n<t?c:-c,l<o-r||l>a+r)))return l}function bl(i,t){R(i,e=>{let s=e.gc,n=s.length/2,o;if(n>t){for(o=0;o<n;++o)delete e.data[s[o]];s.splice(0,n)}})}function xe(i){return i.drawTicks?i.tickLength:0}function Un(i,t){if(!i.display)return 0;let e=j(i.font,t),s=K(i.padding);return(F(i.text)?i.text.length:1)*e.lineHeight+s.height}function xl(i,t){return bt(i,{scale:t,type:\"scale\"})}function _l(i,t,e){return bt(i,{tick:e,index:t,type:\"tick\"})}function yl(i,t,e){let s=He(i);return(e&&t!==\"right\"||!e&&t===\"right\")&&(s=pl(s)),s}function vl(i,t,e,s){let{top:n,left:o,bottom:a,right:r,chart:l}=i,{chartArea:c,scales:h}=l,d=0,u,f,g,p=a-n,m=r-o;if(i.isHorizontal()){if(f=X(s,o,r),A(e)){let b=Object.keys(e)[0],x=e[b];g=h[b].getPixelForValue(x)+p-t}else e===\"center\"?g=(c.bottom+c.top)/2+p-t:g=jn(i,e,t);u=r-o}else{if(A(e)){let b=Object.keys(e)[0],x=e[b];f=h[b].getPixelForValue(x)-m+t}else e===\"center\"?f=(c.left+c.right)/2-m+t:f=jn(i,e,t);g=X(s,a,n),d=e===\"left\"?-N:N}return{titleX:f,titleY:g,maxWidth:u,rotation:d}}var Vt=class i extends ot{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:s,_suggestedMax:n}=this;return t=J(t,Number.POSITIVE_INFINITY),e=J(e,Number.NEGATIVE_INFINITY),s=J(s,Number.POSITIVE_INFINITY),n=J(n,Number.NEGATIVE_INFINITY),{min:J(t,s),max:J(e,n),minDefined:W(t),maxDefined:W(e)}}getMinMax(t){let{min:e,max:s,minDefined:n,maxDefined:o}=this.getUserBounds(),a;if(n&&o)return{min:e,max:s};let r=this.getMatchingVisibleMetas();for(let l=0,c=r.length;l<c;++l)a=r[l].controller.getMinMax(this,t),n||(e=Math.min(e,a.min)),o||(s=Math.max(s,a.max));return e=o&&e>s?s:e,s=n&&e>s?e:s,{min:J(e,J(s,e)),max:J(s,J(e,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){I(this.options.beforeUpdate,[this])}update(t,e,s){let{beginAtZero:n,grace:o,ticks:a}=this.options,r=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=mn(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let l=r<this.ticks.length;this._convertTicksToLabels(l?$n(this.ticks,r):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),a.display&&(a.autoSkip||a.source===\"auto\")&&(this.ticks=cl(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),l&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t=this.options.reverse,e,s;this.isHorizontal()?(e=this.left,s=this.right):(e=this.top,s=this.bottom,t=!t),this._startPixel=e,this._endPixel=s,this._reversePixels=t,this._length=s-e,this._alignToPixels=this.options.alignToPixels}afterUpdate(){I(this.options.afterUpdate,[this])}beforeSetDimensions(){I(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){I(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),I(this.options[t],[this])}beforeDataLimits(){this._callHooks(\"beforeDataLimits\")}determineDataLimits(){}afterDataLimits(){this._callHooks(\"afterDataLimits\")}beforeBuildTicks(){this._callHooks(\"beforeBuildTicks\")}buildTicks(){return[]}afterBuildTicks(){this._callHooks(\"afterBuildTicks\")}beforeTickToLabelConversion(){I(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){let e=this.options.ticks,s,n,o;for(s=0,n=t.length;s<n;s++)o=t[s],o.label=I(e.callback,[o.value,s,t],this)}afterTickToLabelConversion(){I(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){I(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){let t=this.options,e=t.ticks,s=Yn(this.ticks.length,t.ticks.maxTicksLimit),n=e.minRotation||0,o=e.maxRotation,a=n,r,l,c;if(!this._isVisible()||!e.display||n>=o||s<=1||!this.isHorizontal()){this.labelRotation=n;return}let h=this._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=Y(this.chart.width-d,0,this.maxWidth);r=t.offset?this.maxWidth/s:f/(s-1),d+6>r&&(r=f/(s-(t.offset?.5:1)),l=this.maxHeight-xe(t.grid)-e.padding-Un(t.title,this.chart.options.font),c=Math.sqrt(d*d+u*u),a=We(Math.min(Math.asin(Y((h.highest.height+6)/r,-1,1)),Math.asin(Y(l/c,-1,1))-Math.asin(Y(u/c,-1,1)))),a=Math.max(n,Math.min(o,a))),this.labelRotation=a}afterCalculateLabelRotation(){I(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){I(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:s,title:n,grid:o}}=this,a=this._isVisible(),r=this.isHorizontal();if(a){let l=Un(n,e.options.font);if(r?(t.width=this.maxWidth,t.height=xe(o)+l):(t.height=this.maxHeight,t.width=xe(o)+l),s.display&&this.ticks.length){let{first:c,last:h,widest:d,highest:u}=this._getLabelSizes(),f=s.padding*2,g=it(this.labelRotation),p=Math.cos(g),m=Math.sin(g);if(r){let b=s.mirror?0:m*d.width+p*u.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{let b=s.mirror?0:p*d.width+m*u.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,h,m,p)}}this._handleMargins(),r?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,n){let{ticks:{align:o,padding:a},position:r}=this.options,l=this.labelRotation!==0,c=r!==\"top\"&&this.axis===\"x\";if(this.isHorizontal()){let h=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1),u=0,f=0;l?c?(u=n*t.width,f=s*e.height):(u=s*t.height,f=n*e.width):o===\"start\"?f=e.width:o===\"end\"?u=t.width:o!==\"inner\"&&(u=t.width/2,f=e.width/2),this.paddingLeft=Math.max((u-h+a)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-d+a)*this.width/(this.width-d),0)}else{let h=e.height/2,d=t.height/2;o===\"start\"?(h=0,d=t.height):o===\"end\"&&(h=e.height,d=0),this.paddingTop=h+a,this.paddingBottom=d+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){I(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e===\"top\"||e===\"bottom\"||t===\"x\"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,s;for(e=0,s=t.length;e<s;e++)O(t[e].label)&&(t.splice(e,1),s--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){let e=this.options.ticks.sampleSize,s=this.ticks;e<s.length&&(s=$n(s,e)),this._labelSizes=t=this._computeLabelSizes(s,s.length,this.options.ticks.maxTicksLimit)}return t}_computeLabelSizes(t,e,s){let{ctx:n,_longestTextCache:o}=this,a=[],r=[],l=Math.floor(e/Yn(e,s)),c=0,h=0,d,u,f,g,p,m,b,x,v,y,_;for(d=0;d<e;d+=l){if(g=t[d].label,p=this._resolveTickFontOptions(d),n.font=m=p.string,b=o[m]=o[m]||{data:{},gc:[]},x=p.lineHeight,v=y=0,!O(g)&&!F(g))v=he(n,b.data,b.gc,v,g),y=x;else if(F(g))for(u=0,f=g.length;u<f;++u)_=g[u],!O(_)&&!F(_)&&(v=he(n,b.data,b.gc,v,_),y+=x);a.push(v),r.push(y),c=Math.max(v,c),h=Math.max(y,h)}bl(o,e);let M=a.indexOf(c),k=r.indexOf(h),S=w=>({width:a[w]||0,height:r[w]||0});return{first:S(0),last:S(e-1),widest:S(M),highest:S(k),widths:a,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return on(this._alignToPixels?wt(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&t<e.length){let s=e[t];return s.$context||(s.$context=_l(this.getContext(),t,s))}return this.$context||(this.$context=xl(this.chart.getContext(),this))}_tickSize(){let t=this.options.ticks,e=it(this.labelRotation),s=Math.abs(Math.cos(e)),n=Math.abs(Math.sin(e)),o=this._getLabelSizes(),a=t.autoSkipPadding||0,r=o?o.widest.width+a:0,l=o?o.highest.height+a:0;return this.isHorizontal()?l*s>r*n?r/s:l/n:l*n<r*s?l/s:r/n}_isVisible(){let t=this.options.display;return t!==\"auto\"?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){let e=this.axis,s=this.chart,n=this.options,{grid:o,position:a,border:r}=n,l=o.offset,c=this.isHorizontal(),d=this.ticks.length+(l?1:0),u=xe(o),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(V){return wt(s,V,p)},x,v,y,_,M,k,S,w,D,C,T,$;if(a===\"top\")x=b(this.bottom),k=this.bottom-u,w=x-m,C=b(t.top)+m,$=t.bottom;else if(a===\"bottom\")x=b(this.top),C=t.top,$=b(t.bottom)-m,k=x+m,w=this.top+u;else if(a===\"left\")x=b(this.right),M=this.right-u,S=x-m,D=b(t.left)+m,T=t.right;else if(a===\"right\")x=b(this.left),D=t.left,T=b(t.right)-m,M=x+m,S=this.left+u;else if(e===\"x\"){if(a===\"center\")x=b((t.top+t.bottom)/2+.5);else if(A(a)){let V=Object.keys(a)[0],H=a[V];x=b(this.chart.scales[V].getPixelForValue(H))}C=t.top,$=t.bottom,k=x+m,w=k+u}else if(e===\"y\"){if(a===\"center\")x=b((t.left+t.right)/2);else if(A(a)){let V=Object.keys(a)[0],H=a[V];x=b(this.chart.scales[V].getPixelForValue(H))}M=x-m,S=M-u,D=t.left,T=t.right}let tt=P(n.ticks.maxTicksLimit,d),E=Math.max(1,Math.ceil(d/tt));for(v=0;v<d;v+=E){let V=this.getContext(v),H=o.setContext(V),st=r.setContext(V),q=H.lineWidth,Wt=H.color,Ce=st.dash||[],Nt=st.dashOffset,ne=H.tickWidth,At=H.tickColor,oe=H.tickBorderDash||[],Tt=H.tickBorderDashOffset;y=ml(this,v,l),y!==void 0&&(_=wt(s,y,q),c?M=S=D=T=_:k=w=C=$=_,f.push({tx1:M,ty1:k,tx2:S,ty2:w,x1:D,y1:C,x2:T,y2:$,width:q,color:Wt,borderDash:Ce,borderDashOffset:Nt,tickWidth:ne,tickColor:At,tickBorderDash:oe,tickBorderDashOffset:Tt}))}return this._ticksLength=d,this._borderValue=x,f}_computeLabelItems(t){let e=this.axis,s=this.options,{position:n,ticks:o}=s,a=this.isHorizontal(),r=this.ticks,{align:l,crossAlign:c,padding:h,mirror:d}=o,u=xe(s.grid),f=u+h,g=d?-h:f,p=-it(this.labelRotation),m=[],b,x,v,y,_,M,k,S,w,D,C,T,$=\"middle\";if(n===\"top\")M=this.bottom-g,k=this._getXAxisLabelAlignment();else if(n===\"bottom\")M=this.top+g,k=this._getXAxisLabelAlignment();else if(n===\"left\"){let E=this._getYAxisLabelAlignment(u);k=E.textAlign,_=E.x}else if(n===\"right\"){let E=this._getYAxisLabelAlignment(u);k=E.textAlign,_=E.x}else if(e===\"x\"){if(n===\"center\")M=(t.top+t.bottom)/2+f;else if(A(n)){let E=Object.keys(n)[0],V=n[E];M=this.chart.scales[E].getPixelForValue(V)+f}k=this._getXAxisLabelAlignment()}else if(e===\"y\"){if(n===\"center\")_=(t.left+t.right)/2-f;else if(A(n)){let E=Object.keys(n)[0],V=n[E];_=this.chart.scales[E].getPixelForValue(V)}k=this._getYAxisLabelAlignment(u).textAlign}e===\"y\"&&(l===\"start\"?$=\"top\":l===\"end\"&&($=\"bottom\"));let tt=this._getLabelSizes();for(b=0,x=r.length;b<x;++b){v=r[b],y=v.label;let E=o.setContext(this.getContext(b));S=this.getPixelForTick(b)+o.labelOffset,w=this._resolveTickFontOptions(b),D=w.lineHeight,C=F(y)?y.length:1;let V=C/2,H=E.color,st=E.textStrokeColor,q=E.textStrokeWidth,Wt=k;a?(_=S,k===\"inner\"&&(b===x-1?Wt=this.options.reverse?\"left\":\"right\":b===0?Wt=this.options.reverse?\"right\":\"left\":Wt=\"center\"),n===\"top\"?c===\"near\"||p!==0?T=-C*D+D/2:c===\"center\"?T=-tt.highest.height/2-V*D+D:T=-tt.highest.height+D/2:c===\"near\"||p!==0?T=D/2:c===\"center\"?T=tt.highest.height/2-V*D:T=tt.highest.height-C*D,d&&(T*=-1),p!==0&&!E.showLabelBackdrop&&(_+=D/2*Math.sin(p))):(M=S,T=(1-C)*D/2);let Ce;if(E.showLabelBackdrop){let Nt=K(E.backdropPadding),ne=tt.heights[b],At=tt.widths[b],oe=T-Nt.top,Tt=0-Nt.left;switch($){case\"middle\":oe-=ne/2;break;case\"bottom\":oe-=ne;break}switch(k){case\"center\":Tt-=At/2;break;case\"right\":Tt-=At;break;case\"inner\":b===x-1?Tt-=At:b>0&&(Tt-=At/2);break}Ce={left:Tt,top:oe,width:At+Nt.width,height:ne+Nt.height,color:E.backdropColor}}m.push({label:y,font:w,textOffset:T,options:{rotation:p,color:H,strokeColor:st,strokeWidth:q,textAlign:Wt,textBaseline:$,translation:[_,M],backdrop:Ce}})}return m}_getXAxisLabelAlignment(){let{position:t,ticks:e}=this.options;if(-it(this.labelRotation))return t===\"top\"?\"left\":\"right\";let n=\"center\";return e.align===\"start\"?n=\"left\":e.align===\"end\"?n=\"right\":e.align===\"inner\"&&(n=\"inner\"),n}_getYAxisLabelAlignment(t){let{position:e,ticks:{crossAlign:s,mirror:n,padding:o}}=this.options,a=this._getLabelSizes(),r=t+o,l=a.widest.width,c,h;return e===\"left\"?n?(h=this.right+o,s===\"near\"?c=\"left\":s===\"center\"?(c=\"center\",h+=l/2):(c=\"right\",h+=l)):(h=this.right-r,s===\"near\"?c=\"right\":s===\"center\"?(c=\"center\",h-=l/2):(c=\"left\",h=this.left)):e===\"right\"?n?(h=this.left+o,s===\"near\"?c=\"right\":s===\"center\"?(c=\"center\",h-=l/2):(c=\"left\",h-=l)):(h=this.left+r,s===\"near\"?c=\"left\":s===\"center\"?(c=\"center\",h+=l/2):(c=\"right\",h=this.right)):c=\"right\",{textAlign:c,x:h}}_computeLabelArea(){if(this.options.ticks.mirror)return;let t=this.chart,e=this.options.position;if(e===\"left\"||e===\"right\")return{top:0,left:this.left,bottom:t.height,right:this.right};if(e===\"top\"||e===\"bottom\")return{top:this.top,left:0,bottom:this.bottom,right:t.width}}drawBackground(){let{ctx:t,options:{backgroundColor:e},left:s,top:n,width:o,height:a}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(s,n,o,a),t.restore())}getLineWidthForValue(t){let e=this.options.grid;if(!this._isVisible()||!e.display)return 0;let n=this.ticks.findIndex(o=>o.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){let e=this.options.grid,s=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),o,a,r=(l,c,h)=>{!h.width||!h.color||(s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash(h.borderDash||[]),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore())};if(e.display)for(o=0,a=n.length;o<a;++o){let l=n[o];e.drawOnChartArea&&r({x:l.x1,y:l.y1},{x:l.x2,y:l.y2},l),e.drawTicks&&r({x:l.tx1,y:l.ty1},{x:l.tx2,y:l.ty2},{color:l.tickColor,width:l.tickWidth,borderDash:l.tickBorderDash,borderDashOffset:l.tickBorderDashOffset})}}drawBorder(){let{chart:t,ctx:e,options:{border:s,grid:n}}=this,o=s.setContext(this.getContext()),a=s.display?o.width:0;if(!a)return;let r=n.setContext(this.getContext(0)).lineWidth,l=this._borderValue,c,h,d,u;this.isHorizontal()?(c=wt(t,this.left,a)-a/2,h=wt(t,this.right,r)+r/2,d=u=l):(d=wt(t,this.top,a)-a/2,u=wt(t,this.bottom,r)+r/2,c=h=l),e.save(),e.lineWidth=o.width,e.strokeStyle=o.color,e.beginPath(),e.moveTo(c,d),e.lineTo(h,u),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;let s=this.ctx,n=this._computeLabelArea();n&&fe(s,n);let o=this.getLabelItems(t);for(let a of o){let r=a.options,l=a.font,c=a.label,h=a.textOffset;Pt(s,c,0,h,l,r)}n&&ge(s)}drawTitle(){let{ctx:t,options:{position:e,title:s,reverse:n}}=this;if(!s.display)return;let o=j(s.font),a=K(s.padding),r=s.align,l=o.lineHeight/2;e===\"bottom\"||e===\"center\"||A(e)?(l+=a.bottom,F(s.text)&&(l+=o.lineHeight*(s.text.length-1))):l+=a.top;let{titleX:c,titleY:h,maxWidth:d,rotation:u}=vl(this,l,e,r);Pt(t,s.text,0,0,o,{color:s.color,maxWidth:d,rotation:u,textAlign:yl(r,e,n),textBaseline:\"middle\",translation:[c,h]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){let t=this.options,e=t.ticks&&t.ticks.z||0,s=P(t.grid&&t.grid.z,-1),n=P(t.border&&t.border.z,0);return!this._isVisible()||this.draw!==i.prototype.draw?[{z:e,draw:o=>{this.draw(o)}}]:[{z:s,draw:o=>{this.drawBackground(),this.drawGrid(o),this.drawTitle()}},{z:n,draw:()=>{this.drawBorder()}},{z:e,draw:o=>{this.drawLabels(o)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+\"AxisID\",n=[],o,a;for(o=0,a=e.length;o<a;++o){let r=e[o];r[s]===this.id&&(!t||r.type===t)&&n.push(r)}return n}_resolveTickFontOptions(t){let e=this.options.ticks.setContext(this.getContext(t));return j(e.font)}_maxDigits(){let t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/t}},te=class{constructor(t,e,s){this.type=t,this.scope=e,this.override=s,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){let e=Object.getPrototypeOf(t),s;Sl(e)&&(s=this.register(e));let n=this.items,o=t.id,a=this.scope+\".\"+o;if(!o)throw new Error(\"class does not have id: \"+t);return o in n||(n[o]=t,Ml(t,a,s),this.override&&B.override(t.id,t.overrides)),a}get(t){return this.items[t]}unregister(t){let e=this.items,s=t.id,n=this.scope;s in e&&delete e[s],n&&s in B[n]&&(delete B[n][s],this.override&&delete St[s])}};function Ml(i,t,e){let s=Yt(Object.create(null),[e?B.get(e):{},B.get(t),i.defaults]);B.set(t,s),i.defaultRoutes&&kl(t,i.defaultRoutes),i.descriptors&&B.describe(t,i.descriptors)}function kl(i,t){Object.keys(t).forEach(e=>{let s=e.split(\".\"),n=s.pop(),o=[i].concat(s).join(\".\"),a=t[e].split(\".\"),r=a.pop(),l=a.join(\".\");B.route(o,n,l,r)})}function Sl(i){return\"id\"in i&&\"defaults\"in i}var xs=class{constructor(){this.controllers=new te(ut,\"datasets\",!0),this.elements=new te(ot,\"elements\"),this.plugins=new te(Object,\"plugins\"),this.scales=new te(Vt,\"scales\"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each(\"register\",t)}remove(...t){this._each(\"unregister\",t)}addControllers(...t){this._each(\"register\",t,this.controllers)}addElements(...t){this._each(\"register\",t,this.elements)}addPlugins(...t){this._each(\"register\",t,this.plugins)}addScales(...t){this._each(\"register\",t,this.scales)}getController(t){return this._get(t,this.controllers,\"controller\")}getElement(t){return this._get(t,this.elements,\"element\")}getPlugin(t){return this._get(t,this.plugins,\"plugin\")}getScale(t){return this._get(t,this.scales,\"scale\")}removeControllers(...t){this._each(\"unregister\",t,this.controllers)}removeElements(...t){this._each(\"unregister\",t,this.elements)}removePlugins(...t){this._each(\"unregister\",t,this.plugins)}removeScales(...t){this._each(\"unregister\",t,this.scales)}_each(t,e,s){[...e].forEach(n=>{let o=s||this._getRegistryForType(n);s||o.isForType(n)||o===this.plugins&&n.id?this._exec(t,o,n):R(n,a=>{let r=s||this._getRegistryForType(a);this._exec(t,r,a)})})}_exec(t,e,s){let n=Ve(t);I(s[\"before\"+n],[],s),e[t](s),I(s[\"after\"+n],[],s)}_getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++){let s=this._typedRegistries[e];if(s.isForType(t))return s}return this.plugins}_get(t,e,s){let n=e.get(t);if(n===void 0)throw new Error('\"'+t+'\" is not a registered '+s+\".\");return n}},dt=new xs,_s=class{constructor(){this._init=void 0}notify(t,e,s,n){if(e===\"beforeInit\"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,\"install\")),this._init===void 0)return;let o=n?this._descriptors(t).filter(n):this._descriptors(t),a=this._notify(o,t,e,s);return e===\"afterDestroy\"&&(this._notify(o,t,\"stop\"),this._notify(this._init,t,\"uninstall\"),this._init=void 0),a}_notify(t,e,s,n){n=n||{};for(let o of t){let a=o.plugin,r=a[s],l=[e,n,o.options];if(I(r,l,a)===!1&&n.cancelable)return!1}return!0}invalidate(){O(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let s=t&&t.config,n=P(s.options&&s.options.plugins,{}),o=wl(s);return n===!1&&!e?[]:Dl(t,o,n,e)}_notifyStateChanges(t){let e=this._oldCache||[],s=this._cache,n=(o,a)=>o.filter(r=>!a.some(l=>r.plugin.id===l.plugin.id));this._notify(n(e,s),t,\"stop\"),this._notify(n(s,e),t,\"start\")}};function wl(i){let t={},e=[],s=Object.keys(dt.plugins.items);for(let o=0;o<s.length;o++)e.push(dt.getPlugin(s[o]));let n=i.plugins||[];for(let o=0;o<n.length;o++){let a=n[o];e.indexOf(a)===-1&&(e.push(a),t[a.id]=!0)}return{plugins:e,localIds:t}}function Pl(i,t){return!t&&i===!1?null:i===!0?{}:i}function Dl(i,{plugins:t,localIds:e},s,n){let o=[],a=i.getContext();for(let r of t){let l=r.id,c=Pl(s[l],n);c!==null&&o.push({plugin:r,options:Cl(i.config,{plugin:r,local:e[l]},c,a)})}return o}function Cl(i,{plugin:t,local:e},s,n){let o=i.pluginScopeKeys(t),a=i.getOptionScopes(s,o);return e&&t.defaults&&a.push(t.defaults),i.createResolver(a,n,[\"\"],{scriptable:!1,indexable:!1,allKeys:!0})}function ys(i,t){let e=B.datasets[i]||{};return((t.datasets||{})[i]||{}).indexAxis||t.indexAxis||e.indexAxis||\"x\"}function Ol(i,t){let e=i;return i===\"_index_\"?e=t:i===\"_value_\"&&(e=t===\"x\"?\"y\":\"x\"),e}function Al(i,t){return i===t?\"_index_\":\"_value_\"}function Xn(i){if(i===\"x\"||i===\"y\"||i===\"r\")return i}function Tl(i){if(i===\"top\"||i===\"bottom\")return\"x\";if(i===\"left\"||i===\"right\")return\"y\"}function vs(i,...t){if(Xn(i))return i;for(let e of t){let s=e.axis||Tl(e.position)||i.length>1&&Xn(i[0].toLowerCase());if(s)return s}throw new Error(`Cannot determine type of '${i}' axis. Please provide 'axis' or 'position' option.`)}function Kn(i,t,e){if(e[t+\"AxisID\"]===i)return{axis:t}}function Ll(i,t){if(t.data&&t.data.datasets){let e=t.data.datasets.filter(s=>s.xAxisID===i||s.yAxisID===i);if(e.length)return Kn(i,\"x\",e[0])||Kn(i,\"y\",e[0])}return{}}function Rl(i,t){let e=St[i.type]||{scales:{}},s=t.scales||{},n=ys(i.type,t),o=Object.create(null);return Object.keys(s).forEach(a=>{let r=s[a];if(!A(r))return console.error(`Invalid scale configuration for scale: ${a}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);let l=vs(a,r,Ll(a,i),B.scales[r.type]),c=Al(l,n),h=e.scales||{};o[a]=Ut(Object.create(null),[{axis:l},r,h[l],h[c]])}),i.data.datasets.forEach(a=>{let r=a.type||i.type,l=a.indexAxis||ys(r,t),h=(St[r]||{}).scales||{};Object.keys(h).forEach(d=>{let u=Ol(d,l),f=a[u+\"AxisID\"]||u;o[f]=o[f]||Object.create(null),Ut(o[f],[{axis:u},s[f],h[d]])})}),Object.keys(o).forEach(a=>{let r=o[a];Ut(r,[B.scales[r.type],B.scale])}),o}function Eo(i){let t=i.options||(i.options={});t.plugins=P(t.plugins,{}),t.scales=Rl(i,t)}function Io(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function El(i){return i=i||{},i.data=Io(i.data),Eo(i),i}var qn=new Map,Fo=new Set;function Ze(i,t){let e=qn.get(i);return e||(e=t(),qn.set(i,e),Fo.add(e)),e}var _e=(i,t,e)=>{let s=mt(t,e);s!==void 0&&i.add(s)},Ms=class{constructor(t){this._config=El(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Io(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),Eo(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Ze(t,()=>[[`datasets.${t}`,\"\"]])}datasetAnimationScopeKeys(t,e){return Ze(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,\"\"]])}datasetElementScopeKeys(t,e){return Ze(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,\"\"]])}pluginScopeKeys(t){let e=t.id,s=this.type;return Ze(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let s=this._scopeCache,n=s.get(t);return(!n||e)&&(n=new Map,s.set(t,n)),n}getOptionScopes(t,e,s){let{options:n,type:o}=this,a=this._cachedScopes(t,s),r=a.get(e);if(r)return r;let l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(d=>_e(l,t,d))),h.forEach(d=>_e(l,n,d)),h.forEach(d=>_e(l,St[o]||{},d)),h.forEach(d=>_e(l,B,d)),h.forEach(d=>_e(l,je,d))});let c=Array.from(l);return c.length===0&&c.push(Object.create(null)),Fo.has(e)&&a.set(e,c),c}chartOptionScopes(){let{options:t,type:e}=this;return[t,St[e]||{},B.datasets[e]||{},{type:e},B,je]}resolveNamedOptions(t,e,s,n=[\"\"]){let o={$shared:!0},{resolver:a,subPrefixes:r}=Gn(this._resolverCache,t,n),l=a;if(Fl(a,e)){o.$shared=!1,s=gt(s)?s():s;let c=this.createResolver(t,s,r);l=Et(a,s,c)}for(let c of e)o[c]=l[c];return o}createResolver(t,e,s=[\"\"],n){let{resolver:o}=Gn(this._resolverCache,t,s);return A(e)?Et(o,e,void 0,n):o}};function Gn(i,t,e){let s=i.get(t);s||(s=new Map,i.set(t,s));let n=e.join(),o=s.get(n);return o||(o={resolver:Ue(t,e),subPrefixes:e.filter(r=>!r.toLowerCase().includes(\"hover\"))},s.set(n,o)),o}var Il=i=>A(i)&&Object.getOwnPropertyNames(i).some(t=>gt(i[t]));function Fl(i,t){let{isScriptable:e,isIndexable:s}=Vi(i);for(let n of t){let o=e(n),a=s(n),r=(a||o)&&i[n];if(o&&(gt(r)||Il(r))||a&&F(r))return!0}return!1}var zl=\"4.5.1\",Bl=[\"top\",\"bottom\",\"left\",\"right\",\"chartArea\"];function Jn(i,t){return i===\"top\"||i===\"bottom\"||Bl.indexOf(i)===-1&&t===\"x\"}function Zn(i,t){return function(e,s){return e[i]===s[i]?e[t]-s[t]:e[i]-s[i]}}function Qn(i){let t=i.chart,e=t.options.animation;t.notifyPlugins(\"afterRender\"),I(e&&e.onComplete,[i],t)}function Vl(i){let t=i.chart,e=t.options.animation;I(e&&e.onProgress,[i],t)}function zo(i){return Xe()&&typeof i==\"string\"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}var si={},to=i=>{let t=zo(i);return Object.values(si).filter(e=>e.canvas===t).pop()};function Wl(i,t,e){let s=Object.keys(i);for(let n of s){let o=+n;if(o>=t){let a=i[n];delete i[n],(e>0||o>t)&&(i[o+e]=a)}}}function Nl(i,t,e,s){return!e||i.type===\"mouseout\"?null:s?t:i}var ee=class{static defaults=B;static instances=si;static overrides=St;static registry=dt;static version=zl;static getChart=to;static register(...t){dt.add(...t),eo()}static unregister(...t){dt.remove(...t),eo()}constructor(t,e){let s=this.config=new Ms(e),n=zo(t),o=to(n);if(o)throw new Error(\"Canvas is already in use. Chart with ID '\"+o.id+\"' must be destroyed before the canvas with ID '\"+o.canvas.id+\"' can be reused.\");let a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||ll(n)),this.platform.updateConfig(s);let r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Zs(),this.ctx=r,this.canvas=l,this.width=h,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new _s,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=hn(d=>this.update(d),a.resizeDelay||0),this._dataChanges=[],si[this.id]=this,!r||!l){console.error(\"Failed to create chart: can't acquire context from the given item\");return}xt.listen(this,\"complete\",Qn),xt.listen(this,\"progress\",Vl),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:o}=this;return O(t)?e&&o?o:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return dt}_initialize(){return this.notifyPlugins(\"beforeInit\"),this.options.responsive?this.resize():ji(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(\"afterInit\"),this}clear(){return Fi(this.canvas,this.ctx),this}stop(){return xt.stop(this),this}resize(t,e){xt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){let s=this.options,n=this.canvas,o=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(n,t,e,o),r=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?\"resize\":\"attach\";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,ji(this,r,!0)&&(this.notifyPlugins(\"resize\",{size:a}),I(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){let e=this.options.scales||{};R(e,(s,n)=>{s.id=n})}buildOrUpdateScales(){let t=this.options,e=t.scales,s=this.scales,n=Object.keys(s).reduce((a,r)=>(a[r]=!1,a),{}),o=[];e&&(o=o.concat(Object.keys(e).map(a=>{let r=e[a],l=vs(a,r),c=l===\"r\",h=l===\"x\";return{options:r,dposition:c?\"chartArea\":h?\"bottom\":\"left\",dtype:c?\"radialLinear\":h?\"category\":\"linear\"}}))),R(o,a=>{let r=a.options,l=r.id,c=vs(l,r),h=P(r.type,a.dtype);(r.position===void 0||Jn(r.position,c)!==Jn(a.dposition))&&(r.position=a.dposition),n[l]=!0;let d=null;if(l in s&&s[l].type===h)d=s[l];else{let u=dt.getScale(h);d=new u({id:l,type:h,ctx:this.ctx,chart:this}),s[d.id]=d}d.init(r,t)}),R(n,(a,r)=>{a||delete s[r]}),R(s,a=>{G.configure(this,a,a.options),G.addBox(this,a)})}_updateMetasets(){let t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((n,o)=>n.index-o.index),s>e){for(let n=e;n<s;++n)this._destroyDatasetMeta(n);t.splice(e,s-e)}this._sortedMetasets=t.slice(0).sort(Zn(\"order\",\"index\"))}_removeUnreferencedMetasets(){let{_metasets:t,data:{datasets:e}}=this;t.length>e.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(o=>o===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){let t=[],e=this.data.datasets,s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s<n;s++){let o=e[s],a=this.getDatasetMeta(s),r=o.type||this.config.type;if(a.type&&a.type!==r&&(this._destroyDatasetMeta(s),a=this.getDatasetMeta(s)),a.type=r,a.indexAxis=o.indexAxis||ys(r,this.options),a.order=o.order||0,a.index=s,a.label=\"\"+o.label,a.visible=this.isDatasetVisible(s),a.controller)a.controller.updateIndex(s),a.controller.linkScales();else{let l=dt.getController(r),{datasetElementType:c,dataElementType:h}=B.datasets[r];Object.assign(l,{dataElementType:dt.getElement(h),datasetElementType:c&&dt.getElement(c)}),a.controller=new l(this,s),t.push(a.controller)}}return this._updateMetasets(),t}_resetElements(){R(this.data.datasets,(t,e)=>{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins(\"reset\")}update(t){let e=this.config;e.update();let s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins(\"beforeUpdate\",{mode:t,cancelable:!0})===!1)return;let o=this.buildOrUpdateControllers();this.notifyPlugins(\"beforeElementsUpdate\");let a=0;for(let c=0,h=this.data.datasets.length;c<h;c++){let{controller:d}=this.getDatasetMeta(c),u=!n&&o.indexOf(d)===-1;d.buildOrUpdateElements(u),a=Math.max(+d.getMaxOverflow(),a)}a=this._minPadding=s.layout.autoPadding?a:0,this._updateLayout(a),n||R(o,c=>{c.reset()}),this._updateDatasets(t),this.notifyPlugins(\"afterUpdate\",{mode:t}),this._layers.sort(Zn(\"z\",\"_idx\"));let{_active:r,_lastEvent:l}=this;l?this._eventHandler(l,!0):r.length&&this._updateHoverStyles(r,r,!0),this.render()}_updateScales(){R(this.scales,t=>{G.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);(!ki(e,s)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(let{method:s,start:n,count:o}of e){let a=s===\"_removeElements\"?-o:o;Wl(t,n,a)}}_getUniformDataChanges(){let t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];let e=this.data.datasets.length,s=o=>new Set(t.filter(a=>a[0]===o).map((a,r)=>r+\",\"+a.splice(1).join(\",\"))),n=s(0);for(let o=1;o<e;o++)if(!ki(n,s(o)))return;return Array.from(n).map(o=>o.split(\",\")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins(\"beforeLayout\",{cancelable:!0})===!1)return;G.update(this,this.width,this.height,t);let e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],R(this.boxes,n=>{s&&n.position===\"chartArea\"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,o)=>{n._idx=o}),this.notifyPlugins(\"afterLayout\")}_updateDatasets(t){if(this.notifyPlugins(\"beforeDatasetsUpdate\",{mode:t,cancelable:!0})!==!1){for(let e=0,s=this.data.datasets.length;e<s;++e)this.getDatasetMeta(e).controller.configure();for(let e=0,s=this.data.datasets.length;e<s;++e)this._updateDataset(e,gt(t)?t({datasetIndex:e}):t);this.notifyPlugins(\"afterDatasetsUpdate\",{mode:t})}}_updateDataset(t,e){let s=this.getDatasetMeta(t),n={meta:s,index:t,mode:e,cancelable:!0};this.notifyPlugins(\"beforeDatasetUpdate\",n)!==!1&&(s.controller._update(e),n.cancelable=!1,this.notifyPlugins(\"afterDatasetUpdate\",n))}render(){this.notifyPlugins(\"beforeRender\",{cancelable:!0})!==!1&&(xt.has(this)?this.attached&&!xt.running(this)&&xt.start(this):(this.draw(),Qn({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){let{width:s,height:n}=this._resizeBeforeDraw;this._resizeBeforeDraw=null,this._resize(s,n)}if(this.clear(),this.width<=0||this.height<=0||this.notifyPlugins(\"beforeDraw\",{cancelable:!0})===!1)return;let e=this._layers;for(t=0;t<e.length&&e[t].z<=0;++t)e[t].draw(this.chartArea);for(this._drawDatasets();t<e.length;++t)e[t].draw(this.chartArea);this.notifyPlugins(\"afterDraw\")}_getSortedDatasetMetas(t){let e=this._sortedMetasets,s=[],n,o;for(n=0,o=e.length;n<o;++n){let a=e[n];(!t||a.visible)&&s.push(a)}return s}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(this.notifyPlugins(\"beforeDatasetsDraw\",{cancelable:!0})===!1)return;let t=this.getSortedVisibleDatasetMetas();for(let e=t.length-1;e>=0;--e)this._drawDataset(t[e]);this.notifyPlugins(\"afterDatasetsDraw\")}_drawDataset(t){let e=this.ctx,s={meta:t,index:t.index,cancelable:!0},n=qi(this,t);this.notifyPlugins(\"beforeDatasetDraw\",s)!==!1&&(n&&fe(e,n),t.controller.draw(),n&&ge(e),s.cancelable=!1,this.notifyPlugins(\"afterDatasetDraw\",s))}isPointInArea(t){return rt(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){let o=jr.modes[e];return typeof o==\"function\"?o(this,t,s,n):[]}getDatasetMeta(t){let e=this.data.datasets[t],s=this._metasets,n=s.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=bt(null,{chart:this,type:\"chart\"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){let e=this.data.datasets[t];if(!e)return!1;let s=this.getDatasetMeta(t);return typeof s.hidden==\"boolean\"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){let s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){let n=s?\"show\":\"hide\",o=this.getDatasetMeta(t),a=o.controller._resolveAnimations(void 0,n);Xt(e)?(o.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),a.update(o,{visible:s}),this.update(r=>r.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){let e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),xt.remove(this),t=0,e=this.data.datasets.length;t<e;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins(\"beforeDestroy\");let{canvas:t,ctx:e}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),Fi(t,e),this.platform.releaseContext(e),this.canvas=null,this.ctx=null),delete si[this.id],this.notifyPlugins(\"afterDestroy\")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){let t=this._listeners,e=this.platform,s=(o,a)=>{e.addEventListener(this,o,a),t[o]=a},n=(o,a,r)=>{o.offsetX=a,o.offsetY=r,this._eventHandler(o)};R(this.options.events,o=>s(o,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let t=this._responsiveListeners,e=this.platform,s=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)},a,r=()=>{n(\"attach\",r),this.attached=!0,this.resize(),s(\"resize\",o),s(\"detach\",a)};a=()=>{this.attached=!1,n(\"resize\",o),this._stop(),this._resize(0,0),s(\"attach\",r)},e.isAttached(this.canvas)?r():a()}unbindEvents(){R(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},R(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){let n=s?\"set\":\"remove\",o,a,r,l;for(e===\"dataset\"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller[\"_\"+n+\"DatasetHoverStyle\"]()),r=0,l=t.length;r<l;++r){a=t[r];let c=a&&this.getDatasetMeta(a.datasetIndex).controller;c&&c[n+\"HoverStyle\"](a.element,a.datasetIndex,a.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){let e=this._active||[],s=t.map(({datasetIndex:o,index:a})=>{let r=this.getDatasetMeta(o);if(!r)throw new Error(\"No dataset found at index \"+o);return{datasetIndex:o,element:r.data[a],index:a}});!de(s,e)&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}isPluginEnabled(t){return this._plugins._cache.filter(e=>e.plugin.id===t).length===1}_updateHoverStyles(t,e,s){let n=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(d=>h.datasetIndex===d.datasetIndex&&h.index===d.index)),a=o(e,t),r=s?t:o(t,e);a.length&&this.updateHoverStyle(a,n.mode,!1),r.length&&n.mode&&this.updateHoverStyle(r,n.mode,!0)}_eventHandler(t,e){let s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=a=>(a.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins(\"beforeEvent\",s,n)===!1)return;let o=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins(\"afterEvent\",s,n),(o||s.changed)&&this.render(),this}_handleEvent(t,e,s){let{_active:n=[],options:o}=this,a=e,r=this._getActiveElements(t,n,s,a),l=en(t),c=Nl(t,this._lastEvent,s,l);s&&(this._lastEvent=null,I(o.onHover,[t,r,this],this),l&&I(o.onClick,[t,r,this],this));let h=!de(r,n);return(h||e)&&(this._active=r,this._updateHoverStyles(r,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,s,n){if(t.type===\"mouseout\")return[];if(!s)return e;let o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,n)}};function eo(){return R(ee.instances,i=>i._plugins.invalidate())}function Hl(i,t,e){let{startAngle:s,x:n,y:o,outerRadius:a,innerRadius:r,options:l}=t,{borderWidth:c,borderJoinStyle:h}=l,d=Math.min(c/a,U(s-e));if(i.beginPath(),i.arc(n,o,a-c/2,s+d/2,e-d/2),r>0){let u=Math.min(c/r,U(s-e));i.arc(n,o,r+c/2,e-u/2,s+u/2,!0)}else{let u=Math.min(c/2,a*U(s-e));if(h===\"round\")i.arc(n,o,u,e-L/2,s+L/2,!0);else if(h===\"bevel\"){let f=2*u*u,g=-f*Math.cos(e+L/2)+n,p=-f*Math.sin(e+L/2)+o,m=f*Math.cos(s+L/2)+n,b=f*Math.sin(s+L/2)+o;i.lineTo(g,p),i.lineTo(m,b)}}i.closePath(),i.moveTo(0,0),i.rect(0,0,i.canvas.width,i.canvas.height),i.clip(\"evenodd\")}function jl(i,t,e){let{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=t,c=n/r;i.beginPath(),i.arc(o,a,r,s-c,e+c),l>n?(c=n/l,i.arc(o,a,l,e+c,s-c,!0)):i.arc(o,a,n,e+N,s-N),i.closePath(),i.clip()}function Yl(i){return $e(i,[\"outerStart\",\"outerEnd\",\"innerStart\",\"innerEnd\"])}function $l(i,t,e,s){let n=Yl(i.options.borderRadius),o=(e-t)/2,a=Math.min(o,s*t/2),r=l=>{let c=(e-Math.min(o,l))*s/2;return Y(l,0,Math.min(o,c))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Y(n.innerStart,0,a),innerEnd:Y(n.innerEnd,0,a)}}function Qt(i,t,e,s){return{x:e+i*Math.cos(t),y:s+i*Math.sin(t)}}function li(i,t,e,s,n,o){let{x:a,y:r,startAngle:l,pixelMargin:c,innerRadius:h}=t,d=Math.max(t.outerRadius+s+e-c,0),u=h>0?h+s+e+c:0,f=0,g=n-l;if(s){let E=h>0?h-s:0,V=d>0?d-s:0,H=(E+V)/2,st=H!==0?g*H/(H+s):g;f=(g-st)/2}let p=Math.max(.001,g*d-e/L)/d,m=(g-p)/2,b=l+m+f,x=n-m-f,{outerStart:v,outerEnd:y,innerStart:_,innerEnd:M}=$l(t,u,d,x-b),k=d-v,S=d-y,w=b+v/k,D=x-y/S,C=u+_,T=u+M,$=b+_/C,tt=x-M/T;if(i.beginPath(),o){let E=(w+D)/2;if(i.arc(a,r,d,w,E),i.arc(a,r,d,E,D),y>0){let q=Qt(S,D,a,r);i.arc(q.x,q.y,y,D,x+N)}let V=Qt(T,x,a,r);if(i.lineTo(V.x,V.y),M>0){let q=Qt(T,tt,a,r);i.arc(q.x,q.y,M,x+N,tt+Math.PI)}let H=(x-M/u+(b+_/u))/2;if(i.arc(a,r,u,x-M/u,H,!0),i.arc(a,r,u,H,b+_/u,!0),_>0){let q=Qt(C,$,a,r);i.arc(q.x,q.y,_,$+Math.PI,b-N)}let st=Qt(k,b,a,r);if(i.lineTo(st.x,st.y),v>0){let q=Qt(k,w,a,r);i.arc(q.x,q.y,v,b-N,w)}}else{i.moveTo(a,r);let E=Math.cos(w)*d+a,V=Math.sin(w)*d+r;i.lineTo(E,V);let H=Math.cos(D)*d+a,st=Math.sin(D)*d+r;i.lineTo(H,st)}i.closePath()}function Ul(i,t,e,s,n){let{fullCircles:o,startAngle:a,circumference:r}=t,l=t.endAngle;if(o){li(i,t,e,s,l,n);for(let c=0;c<o;++c)i.fill();isNaN(r)||(l=a+(r%z||z))}return li(i,t,e,s,l,n),i.fill(),l}function Xl(i,t,e,s,n){let{fullCircles:o,startAngle:a,circumference:r,options:l}=t,{borderWidth:c,borderJoinStyle:h,borderDash:d,borderDashOffset:u,borderRadius:f}=l,g=l.borderAlign===\"inner\";if(!c)return;i.setLineDash(d||[]),i.lineDashOffset=u,g?(i.lineWidth=c*2,i.lineJoin=h||\"round\"):(i.lineWidth=c,i.lineJoin=h||\"bevel\");let p=t.endAngle;if(o){li(i,t,e,s,p,n);for(let m=0;m<o;++m)i.stroke();isNaN(r)||(p=a+(r%z||z))}g&&jl(i,t,p),l.selfJoin&&p-a>=L&&f===0&&h!==\"miter\"&&Hl(i,t,p),o||(li(i,t,e,s,p,n),i.stroke())}var ks=class extends ot{static id=\"arc\";static defaults={borderAlign:\"center\",borderColor:\"#fff\",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1};static defaultRoutes={backgroundColor:\"backgroundColor\"};static descriptors={_scriptable:!0,_indexable:t=>t!==\"borderDash\"};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,s){let n=this.getProps([\"x\",\"y\"],s),{angle:o,distance:a}=Di(n,{x:t,y:e}),{startAngle:r,endAngle:l,innerRadius:c,outerRadius:h,circumference:d}=this.getProps([\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"circumference\"],s),u=(this.options.spacing+this.options.borderWidth)/2,f=P(d,l-r),g=qt(o,r,l)&&r!==l,p=f>=z||g,m=ct(a,c+u,h+u);return p&&m}getCenterPoint(t){let{x:e,y:s,startAngle:n,endAngle:o,innerRadius:a,outerRadius:r}=this.getProps([\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"],t),{offset:l,spacing:c}=this.options,h=(n+o)/2,d=(a+r+c+l)/2;return{x:e+Math.cos(h)*d,y:s+Math.sin(h)*d}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){let{options:e,circumference:s}=this,n=(e.offset||0)/4,o=(e.spacing||0)/2,a=e.circular;if(this.pixelMargin=e.borderAlign===\"inner\"?.33:0,this.fullCircles=s>z?Math.floor(s/z):0,s===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let r=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(r)*n,Math.sin(r)*n);let l=1-Math.sin(Math.min(L,s||0)),c=n*l;t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,Ul(t,this,c,o,a),Xl(t,this,c,o,a),t.restore()}};function Bo(i,t,e=t){i.lineCap=P(e.borderCapStyle,t.borderCapStyle),i.setLineDash(P(e.borderDash,t.borderDash)),i.lineDashOffset=P(e.borderDashOffset,t.borderDashOffset),i.lineJoin=P(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=P(e.borderWidth,t.borderWidth),i.strokeStyle=P(e.borderColor,t.borderColor)}function Kl(i,t,e){i.lineTo(e.x,e.y)}function ql(i){return i.stepped?gn:i.tension||i.cubicInterpolationMode===\"monotone\"?pn:Kl}function Vo(i,t,e={}){let s=i.length,{start:n=0,end:o=s-1}=e,{start:a,end:r}=t,l=Math.max(n,a),c=Math.min(o,r),h=n<a&&o<a||n>r&&o>r;return{count:s,start:l,loop:t.loop,ilen:c<l&&!h?s+c-l:c-l}}function Gl(i,t,e,s){let{points:n,options:o}=t,{count:a,start:r,loop:l,ilen:c}=Vo(n,e,s),h=ql(o),{move:d=!0,reverse:u}=s||{},f,g,p;for(f=0;f<=c;++f)g=n[(r+(u?c-f:f))%a],!g.skip&&(d?(i.moveTo(g.x,g.y),d=!1):h(i,p,g,u,o.stepped),p=g);return l&&(g=n[(r+(u?c:0))%a],h(i,p,g,u,o.stepped)),!!l}function Jl(i,t,e,s){let n=t.points,{count:o,start:a,ilen:r}=Vo(n,e,s),{move:l=!0,reverse:c}=s||{},h=0,d=0,u,f,g,p,m,b,x=y=>(a+(c?r-y:y))%o,v=()=>{p!==m&&(i.lineTo(h,m),i.lineTo(h,p),i.lineTo(h,b))};for(l&&(f=n[x(0)],i.moveTo(f.x,f.y)),u=0;u<=r;++u){if(f=n[x(u)],f.skip)continue;let y=f.x,_=f.y,M=y|0;M===g?(_<p?p=_:_>m&&(m=_),h=(d*h+y)/++d):(v(),i.lineTo(y,_),g=M,d=0,p=m=_),b=_}v()}function Ss(i){let t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!==\"monotone\"&&!t.stepped&&!e?Jl:Gl}function Zl(i){return i.stepped?Sn:i.tension||i.cubicInterpolationMode===\"monotone\"?wn:Mt}function Ql(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),Bo(i,t.options),i.stroke(n)}function tc(i,t,e,s){let{segments:n,options:o}=t,a=Ss(t);for(let r of n)Bo(i,o,r.style),i.beginPath(),a(i,t,r,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}var ec=typeof Path2D==\"function\";function ic(i,t,e,s){ec&&!t.options.segment?Ql(i,t,e,s):tc(i,t,e,s)}var ie=class extends ot{static id=\"line\";static defaults={borderCapStyle:\"butt\",borderDash:[],borderDashOffset:0,borderJoinStyle:\"miter\",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:\"default\",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};static descriptors={_scriptable:!0,_indexable:t=>t!==\"borderDash\"&&t!==\"fill\"};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){let s=this.options;if((s.tension||s.cubicInterpolationMode===\"monotone\")&&!s.stepped&&!this._pointsUpdated){let n=s.spanGaps?this._loop:this._fullLoop;vn(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Dn(this,this.options.segment))}first(){let t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){let t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){let s=this.options,n=t[e],o=this.points,a=Ki(this,{property:e,start:n,end:n});if(!a.length)return;let r=[],l=Zl(s),c,h;for(c=0,h=a.length;c<h;++c){let{start:d,end:u}=a[c],f=o[d],g=o[u];if(f===g){r.push(f);continue}let p=Math.abs((n-f[e])/(g[e]-f[e])),m=l(f,g,p,s.stepped);m[e]=t[e],r.push(m)}return r.length===1?r[0]:r}pathSegment(t,e,s){return Ss(this)(t,this,e,s)}path(t,e,s){let n=this.segments,o=Ss(this),a=this._loop;e=e||0,s=s||this.points.length-e;for(let r of n)a&=o(t,this,r,{start:e,end:e+s-1});return!!a}draw(t,e,s,n){let o=this.options||{};(this.points||[]).length&&o.borderWidth&&(t.save(),ic(t,this,s,n),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}};function io(i,t,e,s){let n=i.options,{[e]:o}=i.getProps([e],s);return Math.abs(t-o)<n.radius+n.hitRadius}var ws=class extends ot{static id=\"point\";parsed;skip;stop;static defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:\"circle\",radius:3,rotation:0};static defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,s){let n=this.options,{x:o,y:a}=this.getProps([\"x\",\"y\"],s);return Math.pow(t-o,2)+Math.pow(e-a,2)<Math.pow(n.hitRadius+n.radius,2)}inXRange(t,e){return io(this,t,\"x\",e)}inYRange(t,e){return io(this,t,\"y\",e)}getCenterPoint(t){let{x:e,y:s}=this.getProps([\"x\",\"y\"],t);return{x:e,y:s}}size(t){t=t||this.options||{};let e=t.radius||0;e=Math.max(e,e&&t.hoverRadius||0);let s=e&&t.borderWidth||0;return(e+s)*2}draw(t,e){let s=this.options;this.skip||s.radius<.1||!rt(this,e,this.size(s)/2)||(t.strokeStyle=s.borderColor,t.lineWidth=s.borderWidth,t.fillStyle=s.backgroundColor,Ye(t,s,this.x,this.y))}getRange(){let t=this.options||{};return t.radius+t.hitRadius}};function Wo(i,t){let{x:e,y:s,base:n,width:o,height:a}=i.getProps([\"x\",\"y\",\"base\",\"width\",\"height\"],t),r,l,c,h,d;return i.horizontal?(d=a/2,r=Math.min(e,n),l=Math.max(e,n),c=s-d,h=s+d):(d=o/2,r=e-d,l=e+d,c=Math.min(s,n),h=Math.max(s,n)),{left:r,top:c,right:l,bottom:h}}function Ot(i,t,e,s){return i?0:Y(t,e,s)}function sc(i,t,e){let s=i.options.borderWidth,n=i.borderSkipped,o=Bi(s);return{t:Ot(n.top,o.top,0,e),r:Ot(n.right,o.right,0,t),b:Ot(n.bottom,o.bottom,0,e),l:Ot(n.left,o.left,0,t)}}function nc(i,t,e){let{enableBorderRadius:s}=i.getProps([\"enableBorderRadius\"]),n=i.options.borderRadius,o=Dt(n),a=Math.min(t,e),r=i.borderSkipped,l=s||A(n);return{topLeft:Ot(!l||r.top||r.left,o.topLeft,0,a),topRight:Ot(!l||r.top||r.right,o.topRight,0,a),bottomLeft:Ot(!l||r.bottom||r.left,o.bottomLeft,0,a),bottomRight:Ot(!l||r.bottom||r.right,o.bottomRight,0,a)}}function oc(i){let t=Wo(i),e=t.right-t.left,s=t.bottom-t.top,n=sc(i,e/2,s/2),o=nc(i,e/2,s/2);return{outer:{x:t.left,y:t.top,w:e,h:s,radius:o},inner:{x:t.left+n.l,y:t.top+n.t,w:e-n.l-n.r,h:s-n.t-n.b,radius:{topLeft:Math.max(0,o.topLeft-Math.max(n.t,n.l)),topRight:Math.max(0,o.topRight-Math.max(n.t,n.r)),bottomLeft:Math.max(0,o.bottomLeft-Math.max(n.b,n.l)),bottomRight:Math.max(0,o.bottomRight-Math.max(n.b,n.r))}}}}function ss(i,t,e,s){let n=t===null,o=e===null,r=i&&!(n&&o)&&Wo(i,s);return r&&(n||ct(t,r.left,r.right))&&(o||ct(e,r.top,r.bottom))}function ac(i){return i.topLeft||i.topRight||i.bottomLeft||i.bottomRight}function rc(i,t){i.rect(t.x,t.y,t.w,t.h)}function ns(i,t,e={}){let s=i.x!==e.x?-t:0,n=i.y!==e.y?-t:0,o=(i.x+i.w!==e.x+e.w?t:0)-s,a=(i.y+i.h!==e.y+e.h?t:0)-n;return{x:i.x+s,y:i.y+n,w:i.w+o,h:i.h+a,radius:i.radius}}var Ps=class extends ot{static id=\"bar\";static defaults={borderSkipped:\"start\",borderWidth:0,borderRadius:0,inflateAmount:\"auto\",pointStyle:void 0};static defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){let{inflateAmount:e,options:{borderColor:s,backgroundColor:n}}=this,{inner:o,outer:a}=oc(this),r=ac(a.radius)?Jt:rc;t.save(),(a.w!==o.w||a.h!==o.h)&&(t.beginPath(),r(t,ns(a,e,o)),t.clip(),r(t,ns(o,-e,a)),t.fillStyle=s,t.fill(\"evenodd\")),t.beginPath(),r(t,ns(o,e)),t.fillStyle=n,t.fill(),t.restore()}inRange(t,e,s){return ss(this,t,e,s)}inXRange(t,e){return ss(this,t,null,e)}inYRange(t,e){return ss(this,null,t,e)}getCenterPoint(t){let{x:e,y:s,base:n,horizontal:o}=this.getProps([\"x\",\"y\",\"base\",\"horizontal\"],t);return{x:o?(e+n)/2:e,y:o?s:(s+n)/2}}getRange(t){return t===\"x\"?this.width/2:this.height/2}},lc=Object.freeze({__proto__:null,ArcElement:ks,BarElement:Ps,LineElement:ie,PointElement:ws}),Ds=[\"rgb(54, 162, 235)\",\"rgb(255, 99, 132)\",\"rgb(255, 159, 64)\",\"rgb(255, 205, 86)\",\"rgb(75, 192, 192)\",\"rgb(153, 102, 255)\",\"rgb(201, 203, 207)\"],so=Ds.map(i=>i.replace(\"rgb(\",\"rgba(\").replace(\")\",\", 0.5)\"));function No(i){return Ds[i%Ds.length]}function Ho(i){return so[i%so.length]}function cc(i,t){return i.borderColor=No(t),i.backgroundColor=Ho(t),++t}function hc(i,t){return i.backgroundColor=i.data.map(()=>No(t++)),t}function dc(i,t){return i.backgroundColor=i.data.map(()=>Ho(t++)),t}function uc(i){let t=0;return(e,s)=>{let n=i.getDatasetMeta(s).controller;n instanceof Me?t=hc(e,t):n instanceof oi?t=dc(e,t):n&&(t=cc(e,t))}}function no(i){let t;for(t in i)if(i[t].borderColor||i[t].backgroundColor)return!0;return!1}function fc(i){return i&&(i.borderColor||i.backgroundColor)}function gc(){return B.borderColor!==\"rgba(0,0,0,0.1)\"||B.backgroundColor!==\"rgba(0,0,0,0.1)\"}var pc={id:\"colors\",defaults:{enabled:!0,forceOverride:!1},beforeLayout(i,t,e){if(!e.enabled)return;let{data:{datasets:s},options:n}=i.config,{elements:o}=n,a=no(s)||fc(n)||o&&no(o)||gc();if(!e.forceOverride&&a)return;let r=uc(i);s.forEach(r)}};function mc(i,t,e,s,n){let o=n.samples||s;if(o>=e)return i.slice(t,t+e);let a=[],r=(e-2)/(o-2),l=0,c=t+e-1,h=t,d,u,f,g,p;for(a[l++]=i[h],d=0;d<o-2;d++){let m=0,b=0,x,v=Math.floor((d+1)*r)+1+t,y=Math.min(Math.floor((d+2)*r)+1,e)+t,_=y-v;for(x=v;x<y;x++)m+=i[x].x,b+=i[x].y;m/=_,b/=_;let M=Math.floor(d*r)+1+t,k=Math.min(Math.floor((d+1)*r)+1,e)+t,{x:S,y:w}=i[h];for(f=g=-1,x=M;x<k;x++)g=.5*Math.abs((S-m)*(i[x].y-w)-(S-i[x].x)*(b-w)),g>f&&(f=g,u=i[x],p=x);a[l++]=u,h=p}return a[l++]=i[c],a}function bc(i,t,e,s){let n=0,o=0,a,r,l,c,h,d,u,f,g,p,m=[],b=t+e-1,x=i[t].x,y=i[b].x-x;for(a=t;a<t+e;++a){r=i[a],l=(r.x-x)/y*s,c=r.y;let _=l|0;if(_===h)c<g?(g=c,d=a):c>p&&(p=c,u=a),n=(o*n+r.x)/++o;else{let M=a-1;if(!O(d)&&!O(u)){let k=Math.min(d,u),S=Math.max(d,u);k!==f&&k!==M&&m.push({...i[k],x:n}),S!==f&&S!==M&&m.push({...i[S],x:n})}a>0&&M!==f&&m.push(i[M]),m.push(r),h=_,o=0,g=p=c,d=u=f=a}}return m}function jo(i){if(i._decimated){let t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,\"data\",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function oo(i){i.data.datasets.forEach(t=>{jo(t)})}function xc(i,t){let e=t.length,s=0,n,{iScale:o}=i,{min:a,max:r,minDefined:l,maxDefined:c}=o.getUserBounds();return l&&(s=Y(at(t,o.axis,a).lo,0,e-1)),c?n=Y(at(t,o.axis,r).hi+1,s,e)-s:n=e-s,{start:s,count:n}}var _c={id:\"decimation\",defaults:{algorithm:\"min-max\",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){oo(i);return}let s=i.width;i.data.datasets.forEach((n,o)=>{let{_data:a,indexAxis:r}=n,l=i.getDatasetMeta(o),c=a||n.data;if(Zt([r,i.options.indexAxis])===\"y\"||!l.controller.supportsDecimation)return;let h=i.scales[l.xAxisID];if(h.type!==\"linear\"&&h.type!==\"time\"||i.options.parsing)return;let{start:d,count:u}=xc(l,c),f=e.threshold||4*s;if(u<=f){jo(n);return}O(a)&&(n._data=c,delete n.data,Object.defineProperty(n,\"data\",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(p){this._data=p}}));let g;switch(e.algorithm){case\"lttb\":g=mc(c,d,u,s,e);break;case\"min-max\":g=bc(c,d,u,s);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=g})},destroy(i){oo(i)}};function yc(i,t,e){let s=i.segments,n=i.points,o=t.points,a=[];for(let r of s){let{start:l,end:c}=r;c=ui(l,c,n);let h=Cs(e,n[l],n[c],r.loop);if(!t.segments){a.push({source:r,target:h,start:n[l],end:n[c]});continue}let d=Ki(t,h);for(let u of d){let f=Cs(e,o[u.start],o[u.end],u.loop),g=Xi(r,n,f);for(let p of g)a.push({source:p,target:u,start:{[e]:ao(h,f,\"start\",Math.max)},end:{[e]:ao(h,f,\"end\",Math.min)}})}}return a}function Cs(i,t,e,s){if(s)return;let n=t[i],o=e[i];return i===\"angle\"&&(n=U(n),o=U(o)),{property:i,start:n,end:o}}function vc(i,t){let{x:e=null,y:s=null}=i||{},n=t.points,o=[];return t.segments.forEach(({start:a,end:r})=>{r=ui(a,r,n);let l=n[a],c=n[r];s!==null?(o.push({x:l.x,y:s}),o.push({x:c.x,y:s})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function ui(i,t,e){for(;t>i;t--){let s=e[t];if(!isNaN(s.x)&&!isNaN(s.y))break}return t}function ao(i,t,e,s){return i&&t?s(i[e],t[e]):i?i[e]:t?t[e]:0}function Yo(i,t){let e=[],s=!1;return F(i)?(s=!0,e=i):e=vc(i,t),e.length?new ie({points:e,options:{tension:0},_loop:s,_fullLoop:s}):null}function ro(i){return i&&i.fill!==!1}function Mc(i,t,e){let n=i[t].fill,o=[t],a;if(!e)return n;for(;n!==!1&&o.indexOf(n)===-1;){if(!W(n))return n;if(a=i[n],!a)return!1;if(a.visible)return n;o.push(n),n=a.fill}return!1}function kc(i,t,e){let s=Dc(i);if(A(s))return isNaN(s.value)?!1:s;let n=parseFloat(s);return W(n)&&Math.floor(n)===n?Sc(s[0],t,n,e):[\"origin\",\"start\",\"end\",\"stack\",\"shape\"].indexOf(s)>=0&&s}function Sc(i,t,e,s){return(i===\"-\"||i===\"+\")&&(e=t+e),e===t||e<0||e>=s?!1:e}function wc(i,t){let e=null;return i===\"start\"?e=t.bottom:i===\"end\"?e=t.top:A(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Pc(i,t,e){let s;return i===\"start\"?s=e:i===\"end\"?s=t.options.reverse?t.min:t.max:A(i)?s=i.value:s=t.getBaseValue(),s}function Dc(i){let t=i.options,e=t.fill,s=P(e&&e.target,e);return s===void 0&&(s=!!t.backgroundColor),s===!1||s===null?!1:s===!0?\"origin\":s}function Cc(i){let{scale:t,index:e,line:s}=i,n=[],o=s.segments,a=s.points,r=Oc(t,e);r.push(Yo({x:null,y:t.bottom},s));for(let l=0;l<o.length;l++){let c=o[l];for(let h=c.start;h<=c.end;h++)Ac(n,a[h],r)}return new ie({points:n,options:{}})}function Oc(i,t){let e=[],s=i.getMatchingVisibleMetas(\"line\");for(let n=0;n<s.length;n++){let o=s[n];if(o.index===t)break;o.hidden||e.unshift(o.dataset)}return e}function Ac(i,t,e){let s=[];for(let n=0;n<e.length;n++){let o=e[n],{first:a,last:r,point:l}=Tc(o,t,\"x\");if(!(!l||a&&r)){if(a)s.unshift(l);else if(i.push(l),!r)break}}i.push(...s)}function Tc(i,t,e){let s=i.interpolate(t,e);if(!s)return{};let n=s[e],o=i.segments,a=i.points,r=!1,l=!1;for(let c=0;c<o.length;c++){let h=o[c],d=a[h.start][e],u=a[h.end][e];if(ct(n,d,u)){r=n===d,l=n===u;break}}return{first:r,last:l,point:s}}var ci=class{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,s){let{x:n,y:o,radius:a}=this;return e=e||{start:0,end:z},t.arc(n,o,a,e.end,e.start,!0),!s.bounds}interpolate(t){let{x:e,y:s,radius:n}=this,o=t.angle;return{x:e+Math.cos(o)*n,y:s+Math.sin(o)*n,angle:o}}};function Lc(i){let{chart:t,fill:e,line:s}=i;if(W(e))return Rc(t,e);if(e===\"stack\")return Cc(i);if(e===\"shape\")return!0;let n=Ec(i);return n instanceof ci?n:Yo(n,s)}function Rc(i,t){let e=i.getDatasetMeta(t);return e&&i.isDatasetVisible(t)?e.dataset:null}function Ec(i){return(i.scale||{}).getPointPositionForValue?Fc(i):Ic(i)}function Ic(i){let{scale:t={},fill:e}=i,s=wc(e,t);if(W(s)){let n=t.isHorizontal();return{x:n?s:null,y:n?null:s}}return null}function Fc(i){let{scale:t,fill:e}=i,s=t.options,n=t.getLabels().length,o=s.reverse?t.max:t.min,a=Pc(e,t,o),r=[];if(s.grid.circular){let l=t.getPointPositionForValue(0,o);return new ci({x:l.x,y:l.y,radius:t.getDistanceFromCenterForValue(a)})}for(let l=0;l<n;++l)r.push(t.getPointPositionForValue(l,a));return r}function os(i,t,e){let s=Lc(t),{chart:n,index:o,line:a,scale:r,axis:l}=t,c=a.options,h=c.fill,d=c.backgroundColor,{above:u=d,below:f=d}=h||{},g=n.getDatasetMeta(o),p=qi(n,g);s&&a.points.length&&(fe(i,e),zc(i,{line:a,target:s,above:u,below:f,area:e,scale:r,axis:l,clip:p}),ge(i))}function zc(i,t){let{line:e,target:s,above:n,below:o,area:a,scale:r,clip:l}=t,c=e._loop?\"angle\":t.axis;i.save();let h=o;o!==n&&(c===\"x\"?(lo(i,s,a.top),as(i,{line:e,target:s,color:n,scale:r,property:c,clip:l}),i.restore(),i.save(),lo(i,s,a.bottom)):c===\"y\"&&(co(i,s,a.left),as(i,{line:e,target:s,color:o,scale:r,property:c,clip:l}),i.restore(),i.save(),co(i,s,a.right),h=n)),as(i,{line:e,target:s,color:h,scale:r,property:c,clip:l}),i.restore()}function lo(i,t,e){let{segments:s,points:n}=t,o=!0,a=!1;i.beginPath();for(let r of s){let{start:l,end:c}=r,h=n[l],d=n[ui(l,c,n)];o?(i.moveTo(h.x,h.y),o=!1):(i.lineTo(h.x,e),i.lineTo(h.x,h.y)),a=!!t.pathSegment(i,r,{move:a}),a?i.closePath():i.lineTo(d.x,e)}i.lineTo(t.first().x,e),i.closePath(),i.clip()}function co(i,t,e){let{segments:s,points:n}=t,o=!0,a=!1;i.beginPath();for(let r of s){let{start:l,end:c}=r,h=n[l],d=n[ui(l,c,n)];o?(i.moveTo(h.x,h.y),o=!1):(i.lineTo(e,h.y),i.lineTo(h.x,h.y)),a=!!t.pathSegment(i,r,{move:a}),a?i.closePath():i.lineTo(e,d.y)}i.lineTo(e,t.first().y),i.closePath(),i.clip()}function as(i,t){let{line:e,target:s,property:n,color:o,scale:a,clip:r}=t,l=yc(e,s,n);for(let{source:c,target:h,start:d,end:u}of l){let{style:{backgroundColor:f=o}={}}=c,g=s!==!0;i.save(),i.fillStyle=f,Bc(i,a,r,g&&Cs(n,d,u)),i.beginPath();let p=!!e.pathSegment(i,c),m;if(g){p?i.closePath():ho(i,s,u,n);let b=!!s.pathSegment(i,h,{move:p,reverse:!0});m=p&&b,m||ho(i,s,d,n)}i.closePath(),i.fill(m?\"evenodd\":\"nonzero\"),i.restore()}}function Bc(i,t,e,s){let n=t.chart.chartArea,{property:o,start:a,end:r}=s||{};if(o===\"x\"||o===\"y\"){let l,c,h,d;o===\"x\"?(l=a,c=n.top,h=r,d=n.bottom):(l=n.left,c=a,h=n.right,d=r),i.beginPath(),e&&(l=Math.max(l,e.left),h=Math.min(h,e.right),c=Math.max(c,e.top),d=Math.min(d,e.bottom)),i.rect(l,c,h-l,d-c),i.clip()}}function ho(i,t,e,s){let n=t.interpolate(e,s);n&&i.lineTo(n.x,n.y)}var Vc={id:\"filler\",afterDatasetsUpdate(i,t,e){let s=(i.data.datasets||[]).length,n=[],o,a,r,l;for(a=0;a<s;++a)o=i.getDatasetMeta(a),r=o.dataset,l=null,r&&r.options&&r instanceof ie&&(l={visible:i.isDatasetVisible(a),index:a,fill:kc(r,a,s),chart:i,axis:o.controller.options.indexAxis,scale:o.vScale,line:r}),o.$filler=l,n.push(l);for(a=0;a<s;++a)l=n[a],!(!l||l.fill===!1)&&(l.fill=Mc(n,a,e.propagate))},beforeDraw(i,t,e){let s=e.drawTime===\"beforeDraw\",n=i.getSortedVisibleDatasetMetas(),o=i.chartArea;for(let a=n.length-1;a>=0;--a){let r=n[a].$filler;r&&(r.line.updateControlPoints(o,r.axis),s&&r.fill&&os(i.ctx,r,o))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!==\"beforeDatasetsDraw\")return;let s=i.getSortedVisibleDatasetMetas();for(let n=s.length-1;n>=0;--n){let o=s[n].$filler;ro(o)&&os(i.ctx,o,i.chartArea)}},beforeDatasetDraw(i,t,e){let s=t.meta.$filler;!ro(s)||e.drawTime!==\"beforeDatasetDraw\"||os(i.ctx,s,i.chartArea)},defaults:{propagate:!0,drawTime:\"beforeDatasetDraw\"}},uo=(i,t)=>{let{boxHeight:e=t,boxWidth:s=t}=i;return i.usePointStyle&&(e=Math.min(e,t),s=i.pointStyleWidth||Math.min(s,t)),{boxWidth:s,boxHeight:e,itemHeight:Math.max(t,e)}},Wc=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index,hi=class extends ot{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=I(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(s=>t.filter(s,this.chart.data))),t.sort&&(e=e.sort((s,n)=>t.sort(s,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let s=t.labels,n=j(s.font),o=n.size,a=this._computeTitleHeight(),{boxWidth:r,itemHeight:l}=uo(s,o),c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(a,o,r,l)+10):(h=this.maxHeight,c=this._fitCols(a,n,r,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,n){let{ctx:o,maxWidth:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+r,d=t;o.textAlign=\"left\",o.textBaseline=\"middle\";let u=-1,f=-h;return this.legendItems.forEach((g,p)=>{let m=s+e/2+o.measureText(g.text).width;(p===0||c[c.length-1]+m+2*r>a)&&(d+=h,c[c.length-(p>0?0:1)]=0,f+=h,u++),l[p]={left:0,top:f,row:u,width:m,height:n},c[c.length-1]+=m+r}),d}_fitCols(t,e,s,n){let{ctx:o,maxHeight:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=a-t,d=r,u=0,f=0,g=0,p=0;return this.legendItems.forEach((m,b)=>{let{itemWidth:x,itemHeight:v}=Nc(s,e,o,m,n);b>0&&f+v+2*r>h&&(d+=u+r,c.push({width:u,height:f}),g+=u+r,p++,u=f=0),l[b]={left:g,top:f,col:p,width:x,height:v},u=Math.max(u,x),f+=v+r}),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:n},rtl:o}}=this,a=Ft(o,this.left,this.width);if(this.isHorizontal()){let r=0,l=X(s,this.left+n,this.right-this.lineWidths[r]);for(let c of e)r!==c.row&&(r=c.row,l=X(s,this.left+n,this.right-this.lineWidths[r])),c.top+=this.top+t+n,c.left=a.leftForLtr(a.x(l),c.width),l+=c.width+n}else{let r=0,l=X(s,this.top+t+n,this.bottom-this.columnSizes[r].height);for(let c of e)c.col!==r&&(r=c.col,l=X(s,this.top+t+n,this.bottom-this.columnSizes[r].height)),c.top=l,c.left+=this.left+n,c.left=a.leftForLtr(a.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position===\"top\"||this.options.position===\"bottom\"}draw(){if(this.options.display){let t=this.ctx;fe(t,this),this._draw(),ge(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:s,ctx:n}=this,{align:o,labels:a}=t,r=B.color,l=Ft(t.rtl,this.left,this.width),c=j(a.font),{padding:h}=a,d=c.size,u=d/2,f;this.drawTitle(),n.textAlign=l.textAlign(\"left\"),n.textBaseline=\"middle\",n.lineWidth=.5,n.font=c.string;let{boxWidth:g,boxHeight:p,itemHeight:m}=uo(a,d),b=function(M,k,S){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();let w=P(S.lineWidth,1);if(n.fillStyle=P(S.fillStyle,r),n.lineCap=P(S.lineCap,\"butt\"),n.lineDashOffset=P(S.lineDashOffset,0),n.lineJoin=P(S.lineJoin,\"miter\"),n.lineWidth=w,n.strokeStyle=P(S.strokeStyle,r),n.setLineDash(P(S.lineDash,[])),a.usePointStyle){let D={radius:p*Math.SQRT2/2,pointStyle:S.pointStyle,rotation:S.rotation,borderWidth:w},C=l.xPlus(M,g/2),T=k+u;zi(n,D,C,T,a.pointStyleWidth&&g)}else{let D=k+Math.max((d-p)/2,0),C=l.leftForLtr(M,g),T=Dt(S.borderRadius);n.beginPath(),Object.values(T).some($=>$!==0)?Jt(n,{x:C,y:D,w:g,h:p,radius:T}):n.rect(C,D,g,p),n.fill(),w!==0&&n.stroke()}n.restore()},x=function(M,k,S){Pt(n,S.text,M,k+m/2,c,{strikethrough:S.hidden,textAlign:l.textAlign(S.textAlign)})},v=this.isHorizontal(),y=this._computeTitleHeight();v?f={x:X(o,this.left+h,this.right-s[0]),y:this.top+h+y,line:0}:f={x:this.left+h,y:X(o,this.top+y+h,this.bottom-e[0].height),line:0},$i(this.ctx,t.textDirection);let _=m+h;this.legendItems.forEach((M,k)=>{n.strokeStyle=M.fontColor,n.fillStyle=M.fontColor;let S=n.measureText(M.text).width,w=l.textAlign(M.textAlign||(M.textAlign=a.textAlign)),D=g+u+S,C=f.x,T=f.y;l.setWidth(this.width),v?k>0&&C+D+h>this.right&&(T=f.y+=_,f.line++,C=f.x=X(o,this.left+h,this.right-s[f.line])):k>0&&T+_>this.bottom&&(C=f.x=C+e[f.line].width+h,f.line++,T=f.y=X(o,this.top+y+h,this.bottom-e[f.line].height));let $=l.x(C);if(b($,T,M),C=dn(w,C+g+u,v?C+D:this.right,t.rtl),x(l.x(C),T,M),v)f.x+=D+h;else if(typeof M.text!=\"string\"){let tt=c.lineHeight;f.y+=$o(M,tt)+h}else f.y+=_}),Ui(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,s=j(e.font),n=K(e.padding);if(!e.display)return;let o=Ft(t.rtl,this.left,this.width),a=this.ctx,r=e.position,l=s.size/2,c=n.top+l,h,d=this.left,u=this.width;if(this.isHorizontal())u=Math.max(...this.lineWidths),h=this.top+c,d=X(t.align,d,this.right-u);else{let g=this.columnSizes.reduce((p,m)=>Math.max(p,m.height),0);h=c+X(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}let f=X(r,d,d+u);a.textAlign=o.textAlign(He(r)),a.textBaseline=\"middle\",a.strokeStyle=e.color,a.fillStyle=e.color,a.font=s.string,Pt(a,e.text,f,h,s)}_computeTitleHeight(){let t=this.options.title,e=j(t.font),s=K(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,n,o;if(ct(t,this.left,this.right)&&ct(e,this.top,this.bottom)){for(o=this.legendHitBoxes,s=0;s<o.length;++s)if(n=o[s],ct(t,n.left,n.left+n.width)&&ct(e,n.top,n.top+n.height))return this.legendItems[s]}return null}handleEvent(t){let e=this.options;if(!Yc(t.type,e))return;let s=this._getLegendItemAt(t.x,t.y);if(t.type===\"mousemove\"||t.type===\"mouseout\"){let n=this._hoveredItem,o=Wc(n,s);n&&!o&&I(e.onLeave,[t,n,this],this),this._hoveredItem=s,s&&!o&&I(e.onHover,[t,s,this],this)}else s&&I(e.onClick,[t,s,this],this)}};function Nc(i,t,e,s,n){let o=Hc(s,i,t,e),a=jc(n,s,t.lineHeight);return{itemWidth:o,itemHeight:a}}function Hc(i,t,e,s){let n=i.text;return n&&typeof n!=\"string\"&&(n=n.reduce((o,a)=>o.length>a.length?o:a)),t+e.size/2+s.measureText(n).width}function jc(i,t,e){let s=i;return typeof t.text!=\"string\"&&(s=$o(t,e)),s}function $o(i,t){let e=i.text?i.text.length:0;return t*e}function Yc(i,t){return!!((i===\"mousemove\"||i===\"mouseout\")&&(t.onHover||t.onLeave)||t.onClick&&(i===\"click\"||i===\"mouseup\"))}var $c={id:\"legend\",_element:hi,start(i,t,e){let s=i.legend=new hi({ctx:i.ctx,options:e,chart:i});G.configure(i,s,e),G.addBox(i,s)},stop(i){G.removeBox(i,i.legend),delete i.legend},beforeUpdate(i,t,e){let s=i.legend;G.configure(i,s,e),s.options=e},afterUpdate(i){let t=i.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(i,t){t.replay||i.legend.handleEvent(t.event)},defaults:{display:!0,position:\"top\",align:\"center\",fullSize:!0,reverse:!1,weight:1e3,onClick(i,t,e){let s=t.datasetIndex,n=e.chart;n.isDatasetVisible(s)?(n.hide(s),t.hidden=!0):(n.show(s),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:i=>i.chart.options.color,boxWidth:40,padding:10,generateLabels(i){let t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=i.legend.options;return i._getSortedDatasetMetas().map(l=>{let c=l.controller.getStyle(e?0:void 0),h=K(c.borderWidth);return{text:t[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:c.borderColor,pointStyle:s||c.pointStyle,rotation:c.rotation,textAlign:n||c.textAlign,borderRadius:a&&(r||c.borderRadius),datasetIndex:l.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:\"center\",text:\"\"}},descriptors:{_scriptable:i=>!i.startsWith(\"on\"),labels:{_scriptable:i=>![\"generateLabels\",\"filter\",\"sort\"].includes(i)}}},Se=class extends ot{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let s=this.options;if(this.left=0,this.top=0,!s.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let n=F(s.text)?s.text.length:1;this._padding=K(s.padding);let o=n*j(s.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){let t=this.options.position;return t===\"top\"||t===\"bottom\"}_drawArgs(t){let{top:e,left:s,bottom:n,right:o,options:a}=this,r=a.align,l=0,c,h,d;return this.isHorizontal()?(h=X(r,s,o),d=e+t,c=o-s):(a.position===\"left\"?(h=s+t,d=X(r,n,e),l=L*-.5):(h=o-t,d=X(r,e,n),l=L*.5),c=n-e),{titleX:h,titleY:d,maxWidth:c,rotation:l}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let s=j(e.font),o=s.lineHeight/2+this._padding.top,{titleX:a,titleY:r,maxWidth:l,rotation:c}=this._drawArgs(o);Pt(t,e.text,0,0,s,{color:e.color,maxWidth:l,rotation:c,textAlign:He(e.align),textBaseline:\"middle\",translation:[a,r]})}};function Uc(i,t){let e=new Se({ctx:i.ctx,options:t,chart:i});G.configure(i,e,t),G.addBox(i,e),i.titleBlock=e}var Xc={id:\"title\",_element:Se,start(i,t,e){Uc(i,e)},stop(i){let t=i.titleBlock;G.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){let s=i.titleBlock;G.configure(i,s,e),s.options=e},defaults:{align:\"center\",display:!1,font:{weight:\"bold\"},fullSize:!0,padding:10,position:\"top\",text:\"\",weight:2e3},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}},Qe=new WeakMap,Kc={id:\"subtitle\",start(i,t,e){let s=new Se({ctx:i.ctx,options:e,chart:i});G.configure(i,s,e),G.addBox(i,s),Qe.set(i,s)},stop(i){G.removeBox(i,Qe.get(i)),Qe.delete(i)},beforeUpdate(i,t,e){let s=Qe.get(i);G.configure(i,s,e),s.options=e},defaults:{align:\"center\",display:!1,font:{weight:\"normal\"},fullSize:!0,padding:0,position:\"top\",text:\"\",weight:1500},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}},ve={average(i){if(!i.length)return!1;let t,e,s=new Set,n=0,o=0;for(t=0,e=i.length;t<e;++t){let r=i[t].element;if(r&&r.hasValue()){let l=r.tooltipPosition();s.add(l.x),n+=l.y,++o}}return o===0||s.size===0?!1:{x:[...s].reduce((r,l)=>r+l)/s.size,y:n/o}},nearest(i,t){if(!i.length)return!1;let e=t.x,s=t.y,n=Number.POSITIVE_INFINITY,o,a,r;for(o=0,a=i.length;o<a;++o){let l=i[o].element;if(l&&l.hasValue()){let c=l.getCenterPoint(),h=ze(t,c);h<n&&(n=h,r=l)}}if(r){let l=r.tooltipPosition();e=l.x,s=l.y}return{x:e,y:s}}};function ht(i,t){return t&&(F(t)?Array.prototype.push.apply(i,t):i.push(t)),i}function _t(i){return(typeof i==\"string\"||i instanceof String)&&i.indexOf(`\n`)>-1?i.split(`\n`):i}function qc(i,t){let{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:i,label:a,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function fo(i,t){let e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:a,boxHeight:r}=t,l=j(t.bodyFont),c=j(t.titleFont),h=j(t.footerFont),d=o.length,u=n.length,f=s.length,g=K(t.padding),p=g.height,m=0,b=s.reduce((y,_)=>y+_.before.length+_.lines.length+_.after.length,0);if(b+=i.beforeBody.length+i.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),b){let y=t.displayColors?Math.max(r,l.lineHeight):l.lineHeight;p+=f*y+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}u&&(p+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let x=0,v=function(y){m=Math.max(m,e.measureText(y).width+x)};return e.save(),e.font=c.string,R(i.title,v),e.font=l.string,R(i.beforeBody.concat(i.afterBody),v),x=t.displayColors?a+2+t.boxPadding:0,R(s,y=>{R(y.before,v),R(y.lines,v),R(y.after,v)}),x=0,e.font=h.string,R(i.footer,v),e.restore(),m+=g.width,{width:m,height:p}}function Gc(i,t){let{y:e,height:s}=t;return e<s/2?\"top\":e>i.height-s/2?\"bottom\":\"center\"}function Jc(i,t,e,s){let{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i===\"left\"&&n+o+a>t.width||i===\"right\"&&n-o-a<0)return!0}function Zc(i,t,e,s){let{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i,c=\"center\";return s===\"center\"?c=n<=(r+l)/2?\"left\":\"right\":n<=o/2?c=\"left\":n>=a-o/2&&(c=\"right\"),Jc(c,i,t,e)&&(c=\"center\"),c}function go(i,t,e){let s=e.yAlign||t.yAlign||Gc(i,e);return{xAlign:e.xAlign||t.xAlign||Zc(i,t,e,s),yAlign:s}}function Qc(i,t){let{x:e,width:s}=i;return t===\"right\"?e-=s:t===\"center\"&&(e-=s/2),e}function th(i,t,e){let{y:s,height:n}=i;return t===\"top\"?s+=e:t===\"bottom\"?s-=n+e:s-=n/2,s}function po(i,t,e,s){let{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=Dt(a),g=Qc(t,r),p=th(t,l,c);return l===\"center\"?r===\"left\"?g+=c:r===\"right\"&&(g-=c):r===\"left\"?g-=Math.max(h,u)+n:r===\"right\"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function ti(i,t,e){let s=K(e.padding);return t===\"center\"?i.x+i.width/2:t===\"right\"?i.x+i.width-s.right:i.x+s.left}function mo(i){return ht([],_t(i))}function eh(i,t,e){return bt(i,{tooltip:t,tooltipItems:e,type:\"tooltip\"})}function bo(i,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}var Uo={beforeTitle:lt,title(i){if(i.length>0){let t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode===\"dataset\")return t.dataset.label||\"\";if(t.label)return t.label;if(s>0&&t.dataIndex<s)return e[t.dataIndex]}return\"\"},afterTitle:lt,beforeBody:lt,beforeLabel:lt,label(i){if(this&&this.options&&this.options.mode===\"dataset\")return i.label+\": \"+i.formattedValue||i.formattedValue;let t=i.dataset.label||\"\";t&&(t+=\": \");let e=i.formattedValue;return O(e)||(t+=e),t},labelColor(i){let e=i.chart.getDatasetMeta(i.datasetIndex).controller.getStyle(i.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(i){let e=i.chart.getDatasetMeta(i.datasetIndex).controller.getStyle(i.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:lt,afterBody:lt,beforeFooter:lt,footer:lt,afterFooter:lt};function Z(i,t,e,s){let n=i[t].call(e,s);return typeof n>\"u\"?Uo[t].call(e,s):n}var di=class extends ot{static positioners=ve;constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let t=this._cachedAnimations;if(t)return t;let e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new ni(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=eh(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){let{callbacks:s}=e,n=Z(s,\"beforeTitle\",this,t),o=Z(s,\"title\",this,t),a=Z(s,\"afterTitle\",this,t),r=[];return r=ht(r,_t(n)),r=ht(r,_t(o)),r=ht(r,_t(a)),r}getBeforeBody(t,e){return mo(Z(e.callbacks,\"beforeBody\",this,t))}getBody(t,e){let{callbacks:s}=e,n=[];return R(t,o=>{let a={before:[],lines:[],after:[]},r=bo(s,o);ht(a.before,_t(Z(r,\"beforeLabel\",this,o))),ht(a.lines,Z(r,\"label\",this,o)),ht(a.after,_t(Z(r,\"afterLabel\",this,o))),n.push(a)}),n}getAfterBody(t,e){return mo(Z(e.callbacks,\"afterBody\",this,t))}getFooter(t,e){let{callbacks:s}=e,n=Z(s,\"beforeFooter\",this,t),o=Z(s,\"footer\",this,t),a=Z(s,\"afterFooter\",this,t),r=[];return r=ht(r,_t(n)),r=ht(r,_t(o)),r=ht(r,_t(a)),r}_createItems(t){let e=this._active,s=this.chart.data,n=[],o=[],a=[],r=[],l,c;for(l=0,c=e.length;l<c;++l)r.push(qc(this.chart,e[l]));return t.filter&&(r=r.filter((h,d,u)=>t.filter(h,d,u,s))),t.itemSort&&(r=r.sort((h,d)=>t.itemSort(h,d,s))),R(r,h=>{let d=bo(t.callbacks,h);n.push(Z(d,\"labelColor\",this,h)),o.push(Z(d,\"labelPointStyle\",this,h)),a.push(Z(d,\"labelTextColor\",this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){let s=this.options.setContext(this.getContext()),n=this._active,o,a=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{let r=ve[s.position].call(this,n,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);let l=this._size=fo(this,s),c=Object.assign({},r,l),h=go(this.chart,s,c),d=po(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:r.x,caretY:r.y}}this._tooltipItems=a,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){let o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){let{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=Dt(r),{x:u,y:f}=t,{width:g,height:p}=e,m,b,x,v,y,_;return o===\"center\"?(y=f+p/2,n===\"left\"?(m=u,b=m-a,v=y+a,_=y-a):(m=u+g,b=m+a,v=y-a,_=y+a),x=m):(n===\"left\"?b=u+Math.max(l,h)+a:n===\"right\"?b=u+g-Math.max(c,d)-a:b=this.caretX,o===\"top\"?(v=f,y=v-a,m=b-a,x=b+a):(v=f+p,y=v+a,m=b+a,x=b-a),_=v),{x1:m,x2:b,x3:x,y1:v,y2:y,y3:_}}drawTitle(t,e,s){let n=this.title,o=n.length,a,r,l;if(o){let c=Ft(s.rtl,this.x,this.width);for(t.x=ti(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline=\"middle\",a=j(s.titleFont),r=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;l<o;++l)e.fillText(n[l],c.x(t.x),t.y+a.lineHeight/2),t.y+=a.lineHeight+r,l+1===o&&(t.y+=s.titleMarginBottom-r)}}_drawColorBox(t,e,s,n,o){let a=this.labelColors[s],r=this.labelPointStyles[s],{boxHeight:l,boxWidth:c}=o,h=j(o.bodyFont),d=ti(this,\"left\",o),u=n.x(d),f=l<h.lineHeight?(h.lineHeight-l)/2:0,g=e.y+f;if(o.usePointStyle){let p={radius:Math.min(c,l)/2,pointStyle:r.pointStyle,rotation:r.rotation,borderWidth:1},m=n.leftForLtr(u,c)+c/2,b=g+l/2;t.strokeStyle=o.multiKeyBackground,t.fillStyle=o.multiKeyBackground,Ye(t,p,m,b),t.strokeStyle=a.borderColor,t.fillStyle=a.backgroundColor,Ye(t,p,m,b)}else{t.lineWidth=A(a.borderWidth)?Math.max(...Object.values(a.borderWidth)):a.borderWidth||1,t.strokeStyle=a.borderColor,t.setLineDash(a.borderDash||[]),t.lineDashOffset=a.borderDashOffset||0;let p=n.leftForLtr(u,c),m=n.leftForLtr(n.xPlus(u,1),c-2),b=Dt(a.borderRadius);Object.values(b).some(x=>x!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,Jt(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),Jt(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=a.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){let{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=j(s.bodyFont),u=d.lineHeight,f=0,g=Ft(s.rtl,this.x,this.width),p=function(S){e.fillText(S,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a),b,x,v,y,_,M,k;for(e.textAlign=a,e.textBaseline=\"middle\",e.font=d.string,t.x=ti(this,m,s),e.fillStyle=s.bodyColor,R(this.beforeBody,p),f=r&&m!==\"right\"?a===\"center\"?c/2+h:c+2+h:0,y=0,M=n.length;y<M;++y){for(b=n[y],x=this.labelTextColors[y],e.fillStyle=x,R(b.before,p),v=b.lines,r&&v.length&&(this._drawColorBox(e,t,y,g,s),u=Math.max(d.lineHeight,l)),_=0,k=v.length;_<k;++_)p(v[_]),u=d.lineHeight;R(b.after,p)}f=0,u=d.lineHeight,R(this.afterBody,p),t.y-=o}drawFooter(t,e,s){let n=this.footer,o=n.length,a,r;if(o){let l=Ft(s.rtl,this.x,this.width);for(t.x=ti(this,s.footerAlign,s),t.y+=s.footerMarginTop,e.textAlign=l.textAlign(s.footerAlign),e.textBaseline=\"middle\",a=j(s.footerFont),e.fillStyle=s.footerColor,e.font=a.string,r=0;r<o;++r)e.fillText(n[r],l.x(t.x),t.y+a.lineHeight/2),t.y+=a.lineHeight+s.footerSpacing}}drawBackground(t,e,s,n){let{xAlign:o,yAlign:a}=this,{x:r,y:l}=t,{width:c,height:h}=s,{topLeft:d,topRight:u,bottomLeft:f,bottomRight:g}=Dt(n.cornerRadius);e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,e.lineWidth=n.borderWidth,e.beginPath(),e.moveTo(r+d,l),a===\"top\"&&this.drawCaret(t,e,s,n),e.lineTo(r+c-u,l),e.quadraticCurveTo(r+c,l,r+c,l+u),a===\"center\"&&o===\"right\"&&this.drawCaret(t,e,s,n),e.lineTo(r+c,l+h-g),e.quadraticCurveTo(r+c,l+h,r+c-g,l+h),a===\"bottom\"&&this.drawCaret(t,e,s,n),e.lineTo(r+f,l+h),e.quadraticCurveTo(r,l+h,r,l+h-f),a===\"center\"&&o===\"left\"&&this.drawCaret(t,e,s,n),e.lineTo(r,l+d),e.quadraticCurveTo(r,l,r+d,l),e.closePath(),e.fill(),n.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){let e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){let a=ve[t.position].call(this,this._active,this._eventPosition);if(!a)return;let r=this._size=fo(this,t),l=Object.assign({},a,this._size),c=go(e,t,l),h=po(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=r.width,this.height=r.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){let e=this.options.setContext(this.getContext()),s=this.opacity;if(!s)return;this._updateAnimationTarget(e);let n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;let a=K(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),$i(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),Ui(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){let s=this._active,n=t.map(({datasetIndex:r,index:l})=>{let c=this.chart.getDatasetMeta(r);if(!c)throw new Error(\"Cannot find a dataset at index \"+r);return{datasetIndex:r,element:c.data[l],index:l}}),o=!de(s,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,s),r=this._positionChanged(a,t),l=e||!de(a,o)||r;return l&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){let o=this.options;if(t.type===\"mouseout\")return[];if(!n)return e.filter(r=>this.chart.data.datasets[r.datasetIndex]&&this.chart.getDatasetMeta(r.datasetIndex).controller.getParsed(r.index)!==void 0);let a=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&a.reverse(),a}_positionChanged(t,e){let{caretX:s,caretY:n,options:o}=this,a=ve[o.position].call(this,t,e);return a!==!1&&(s!==a.x||n!==a.y)}},ih={id:\"tooltip\",_element:di,positioners:ve,afterInit(i,t,e){e&&(i.tooltip=new di({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){let t=i.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(i.notifyPlugins(\"beforeTooltipDraw\",{...e,cancelable:!0})===!1)return;t.draw(i.ctx),i.notifyPlugins(\"afterTooltipDraw\",e)}},afterEvent(i,t){if(i.tooltip){let e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:\"average\",backgroundColor:\"rgba(0,0,0,0.8)\",titleColor:\"#fff\",titleFont:{weight:\"bold\"},titleSpacing:2,titleMarginBottom:6,titleAlign:\"left\",bodyColor:\"#fff\",bodySpacing:2,bodyFont:{},bodyAlign:\"left\",footerColor:\"#fff\",footerSpacing:2,footerMarginTop:6,footerFont:{weight:\"bold\"},footerAlign:\"left\",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:\"#fff\",displayColors:!0,boxPadding:0,borderColor:\"rgba(0,0,0,0)\",borderWidth:0,animation:{duration:400,easing:\"easeOutQuart\"},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"width\",\"height\",\"caretX\",\"caretY\"]},opacity:{easing:\"linear\",duration:200}},callbacks:Uo},defaultRoutes:{bodyFont:\"font\",footerFont:\"font\",titleFont:\"font\"},descriptors:{_scriptable:i=>i!==\"filter\"&&i!==\"itemSort\"&&i!==\"external\",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:\"animation\"}},additionalOptionScopes:[\"interaction\"]},sh=Object.freeze({__proto__:null,Colors:pc,Decimation:_c,Filler:Vc,Legend:$c,SubTitle:Kc,Title:Xc,Tooltip:ih}),nh=(i,t,e,s)=>(typeof t==\"string\"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function oh(i,t,e,s){let n=i.indexOf(t);if(n===-1)return nh(i,t,e,s);let o=i.lastIndexOf(t);return n!==o?e:n}var ah=(i,t)=>i===null?null:Y(Math.round(i),0,t);function xo(i){let t=this.getLabels();return i>=0&&i<t.length?t[i]:i}var Os=class extends Vt{static id=\"category\";static defaults={ticks:{callback:xo}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){let e=this._addedLabels;if(e.length){let s=this.getLabels();for(let{index:n,label:o}of e)s[n]===o&&s.splice(n,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(O(t))return null;let s=this.getLabels();return e=isFinite(e)&&s[e]===t?e:oh(s,t,P(e,t),this._addedLabels),ah(e,s.length-1)}determineDataLimits(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),{min:s,max:n}=this.getMinMax(!0);this.options.bounds===\"ticks\"&&(t||(s=0),e||(n=this.getLabels().length-1)),this.min=s,this.max=n}buildTicks(){let t=this.min,e=this.max,s=this.options.offset,n=[],o=this.getLabels();o=t===0&&e===o.length-1?o:o.slice(t,e+1),this._valueRange=Math.max(o.length-(s?0:1),1),this._startValue=this.min-(s?.5:0);for(let a=t;a<=e;a++)n.push({value:a});return n}getLabelForValue(t){return xo.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return typeof t!=\"number\"&&(t=this.parse(t)),t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}};function rh(i,t){let e=[],{bounds:n,step:o,min:a,max:r,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,g=h-1,{min:p,max:m}=t,b=!O(a),x=!O(r),v=!O(c),y=(m-p)/(d+1),_=Si((m-p)/g/f)*f,M,k,S,w;if(_<1e-14&&!b&&!x)return[{value:p},{value:m}];w=Math.ceil(m/_)-Math.floor(p/_),w>g&&(_=Si(w*_/g/f)*f),O(l)||(M=Math.pow(10,l),_=Math.ceil(_*M)/M),n===\"ticks\"?(k=Math.floor(p/_)*_,S=Math.ceil(m/_)*_):(k=p,S=m),b&&x&&o&&nn((r-a)/o,_/1e3)?(w=Math.round(Math.min((r-a)/_,h)),_=(r-a)/w,k=a,S=r):v?(k=b?a:k,S=x?r:S,w=c-1,_=(S-k)/w):(w=(S-k)/_,Kt(w,Math.round(w),_/1e3)?w=Math.round(w):w=Math.ceil(w));let D=Math.max(Pi(_),Pi(k));M=Math.pow(10,O(l)?D:l),k=Math.round(k*M)/M,S=Math.round(S*M)/M;let C=0;for(b&&(u&&k!==a?(e.push({value:a}),k<a&&C++,Kt(Math.round((k+C*_)*M)/M,a,_o(a,y,i))&&C++):k<a&&C++);C<w;++C){let T=Math.round((k+C*_)*M)/M;if(x&&T>r)break;e.push({value:T})}return x&&u&&S!==r?e.length&&Kt(e[e.length-1].value,r,_o(r,y,i))?e[e.length-1].value=r:e.push({value:r}):(!x||S===r)&&e.push({value:S}),e}function _o(i,t,{horizontal:e,minRotation:s}){let n=it(s),o=(e?Math.sin(n):Math.cos(n))||.001,a=.75*t*(\"\"+i).length;return Math.min(t/o,a)}var se=class extends Vt{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return O(t)||(typeof t==\"number\"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){let{beginAtZero:t}=this.options,{minDefined:e,maxDefined:s}=this.getUserBounds(),{min:n,max:o}=this,a=l=>n=e?n:l,r=l=>o=s?o:l;if(t){let l=nt(n),c=nt(o);l<0&&c<0?r(0):l>0&&c>0&&a(0)}if(n===o){let l=o===0?1:Math.abs(o*.05);r(o+l),t||a(n-l)}this.min=n,this.max=o}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,s=this.getTickLimit();s=Math.max(2,s);let n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,a=rh(n,o);return t.bounds===\"ticks\"&&wi(a,this,\"value\"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){let t=this.ticks,e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){let n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return Gt(t,this.chart.options.locale,this.options.ticks.format)}},As=class extends se{static id=\"linear\";static defaults={ticks:{callback:ue.formatters.numeric}};determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=W(t)?t:0,this.max=W(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,s=it(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}},we=i=>Math.floor(pt(i)),Bt=(i,t)=>Math.pow(10,we(i)+t);function yo(i){return i/Math.pow(10,we(i))===1}function vo(i,t,e){let s=Math.pow(10,e),n=Math.floor(i/s);return Math.ceil(t/s)-n}function lh(i,t){let e=t-i,s=we(e);for(;vo(i,t,s)>10;)s++;for(;vo(i,t,s)<10;)s--;return Math.min(s,we(i))}function ch(i,{min:t,max:e}){t=J(i.min,t);let s=[],n=we(t),o=lh(t,e),a=o<0?Math.pow(10,Math.abs(o)):1,r=Math.pow(10,o),l=n>o?Math.pow(10,n):0,c=Math.round((t-l)*a)/a,h=Math.floor((t-l)/r/10)*r*10,d=Math.floor((c-h)/Math.pow(10,o)),u=J(i.min,Math.round((l+h+d*Math.pow(10,o))*a)/a);for(;u<e;)s.push({value:u,major:yo(u),significand:d}),d>=10?d=d<15?15:20:d++,d>=20&&(o++,d=2,a=o>=0?1:a),u=Math.round((l+h+d*Math.pow(10,o))*a)/a;let f=J(i.max,u);return s.push({value:f,major:yo(f),significand:d}),s}var Ts=class extends Vt{static id=\"logarithmic\";static defaults={ticks:{callback:ue.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){let s=se.prototype.parse.apply(this,[t,e]);if(s===0){this._zero=!0;return}return W(s)&&s>0?s:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=W(t)?Math.max(0,t):null,this.max=W(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!W(this._userMin)&&(this.min=t===Bt(this.min,0)?Bt(this.min,-1):Bt(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),s=this.min,n=this.max,o=r=>s=t?s:r,a=r=>n=e?n:r;s===n&&(s<=0?(o(1),a(10)):(o(Bt(s,-1)),a(Bt(n,1)))),s<=0&&o(Bt(n,-1)),n<=0&&a(Bt(s,1)),this.min=s,this.max=n}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},s=ch(e,this);return t.bounds===\"ticks\"&&wi(s,this,\"value\"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?\"0\":Gt(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;super.configure(),this._startValue=pt(t),this._valueRange=pt(this.max)-pt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(pt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};function Ls(i){let t=i.ticks;if(t.display&&i.display){let e=K(t.backdropPadding);return P(t.font&&t.font.size,B.font.size)+e.height}return 0}function hh(i,t,e){return e=F(e)?e:[e],{w:fn(i,t.string,e),h:e.length*t.lineHeight}}function Mo(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:i<s||i>n?{start:t-e,end:t}:{start:t,end:t+e}}function dh(i){let t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?L/o:0;for(let l=0;l<o;l++){let c=a.setContext(i.getPointLabelContext(l));n[l]=c.padding;let h=i.getPointPosition(l,i.drawingArea+n[l],r),d=j(c.font),u=hh(i.ctx,d,i._pointLabels[l]);s[l]=u;let f=U(i.getIndexAngle(l)+r),g=Math.round(We(f)),p=Mo(g,h.x,u.w,0,180),m=Mo(g,h.y,u.h,90,270);uh(e,t,f,p,m)}i.setCenterPoint(t.l-e.l,e.r-t.r,t.t-e.t,e.b-t.b),i._pointLabelItems=ph(i,s,n)}function uh(i,t,e,s,n){let o=Math.abs(Math.sin(e)),a=Math.abs(Math.cos(e)),r=0,l=0;s.start<t.l?(r=(t.l-s.start)/o,i.l=Math.min(i.l,t.l-r)):s.end>t.r&&(r=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+r)),n.start<t.t?(l=(t.t-n.start)/a,i.t=Math.min(i.t,t.t-l)):n.end>t.b&&(l=(n.end-t.b)/a,i.b=Math.max(i.b,t.b+l))}function fh(i,t,e){let s=i.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=e,l=i.getPointPosition(t,s+n+a,o),c=Math.round(We(U(l.angle+N))),h=xh(l.y,r.h,c),d=mh(c),u=bh(l.x,r.w,d);return{visible:!0,x:l.x,y:h,textAlign:d,left:u,top:h,right:u+r.w,bottom:h+r.h}}function gh(i,t){if(!t)return!0;let{left:e,top:s,right:n,bottom:o}=i;return!(rt({x:e,y:s},t)||rt({x:e,y:o},t)||rt({x:n,y:s},t)||rt({x:n,y:o},t))}function ph(i,t,e){let s=[],n=i._pointLabels.length,o=i.options,{centerPointLabels:a,display:r}=o.pointLabels,l={extra:Ls(o)/2,additionalAngle:a?L/n:0},c;for(let h=0;h<n;h++){l.padding=e[h],l.size=t[h];let d=fh(i,h,l);s.push(d),r===\"auto\"&&(d.visible=gh(d,c),d.visible&&(c=d))}return s}function mh(i){return i===0||i===180?\"center\":i<180?\"left\":\"right\"}function bh(i,t,e){return e===\"right\"?i-=t:e===\"center\"&&(i-=t/2),i}function xh(i,t,e){return e===90||e===270?i-=t/2:(e>270||e<90)&&(i-=t),i}function _h(i,t,e){let{left:s,top:n,right:o,bottom:a}=e,{backdropColor:r}=t;if(!O(r)){let l=Dt(t.borderRadius),c=K(t.backdropPadding);i.fillStyle=r;let h=s-c.left,d=n-c.top,u=o-s+c.width,f=a-n+c.height;Object.values(l).some(g=>g!==0)?(i.beginPath(),Jt(i,{x:h,y:d,w:u,h:f,radius:l}),i.fill()):i.fillRect(h,d,u,f)}}function yh(i,t){let{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){let o=i._pointLabelItems[n];if(!o.visible)continue;let a=s.setContext(i.getPointLabelContext(n));_h(e,a,o);let r=j(a.font),{x:l,y:c,textAlign:h}=o;Pt(e,i._pointLabels[n],l,c+r.lineHeight/2,r,{color:a.color,textAlign:h,textBaseline:\"middle\"})}}function Xo(i,t,e,s){let{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,z);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let a=1;a<s;a++)o=i.getPointPosition(a,t),n.lineTo(o.x,o.y)}}function vh(i,t,e,s,n){let o=i.ctx,a=t.circular,{color:r,lineWidth:l}=t;!a&&!s||!r||!l||e<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash||[]),o.lineDashOffset=n.dashOffset,o.beginPath(),Xo(i,e,a,s),o.closePath(),o.stroke(),o.restore())}function Mh(i,t,e){return bt(i,{label:e,index:t,type:\"pointLabel\"})}var Rs=class extends se{static id=\"radialLinear\";static defaults={display:!0,animate:!0,position:\"chartArea\",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:ue.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}};static defaultRoutes={\"angleLines.color\":\"borderColor\",\"pointLabels.color\":\"color\",\"ticks.color\":\"color\"};static descriptors={angleLines:{_fallback:\"grid\"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){let t=this._padding=K(Ls(this.options)/2),e=this.width=this.maxWidth-t.width,s=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+s/2+t.top),this.drawingArea=Math.floor(Math.min(e,s)/2)}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!1);this.min=W(t)&&!isNaN(t)?t:0,this.max=W(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/Ls(this.options))}generateTickLabels(t){se.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map((e,s)=>{let n=I(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:\"\"}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){let t=this.options;t.display&&t.pointLabels.display?dh(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){let e=z/(this._pointLabels.length||1),s=this.options.startAngle||0;return U(t*e+it(s))}getDistanceFromCenterForValue(t){if(O(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(O(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t<e.length){let s=e[t];return Mh(this.getContext(),t,s)}}getPointPosition(t,e,s=0){let n=this.getIndexAngle(t)-N+s;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter,angle:n}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){let{left:e,top:s,right:n,bottom:o}=this._pointLabelItems[t];return{left:e,top:s,right:n,bottom:o}}drawBackground(){let{backgroundColor:t,grid:{circular:e}}=this.options;if(t){let s=this.ctx;s.save(),s.beginPath(),Xo(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),s.closePath(),s.fillStyle=t,s.fill(),s.restore()}}drawGrid(){let t=this.ctx,e=this.options,{angleLines:s,grid:n,border:o}=e,a=this._pointLabels.length,r,l,c;if(e.pointLabels.display&&yh(this,a),n.display&&this.ticks.forEach((h,d)=>{if(d!==0||d===0&&this.min<0){l=this.getDistanceFromCenterForValue(h.value);let u=this.getContext(d),f=n.setContext(u),g=o.setContext(u);vh(this,f,l,a,g)}}),s.display){for(t.save(),r=a-1;r>=0;r--){let h=s.setContext(this.getPointLabelContext(r)),{color:d,lineWidth:u}=h;!u||!d||(t.lineWidth=u,t.strokeStyle=d,t.setLineDash(h.borderDash),t.lineDashOffset=h.borderDashOffset,l=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),c=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;let n=this.getIndexAngle(0),o,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign=\"center\",t.textBaseline=\"middle\",this.ticks.forEach((r,l)=>{if(l===0&&this.min>=0&&!e.reverse)return;let c=s.setContext(this.getContext(l)),h=j(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,a=t.measureText(r.label).width,t.fillStyle=c.backdropColor;let d=K(c.backdropPadding);t.fillRect(-a/2-d.left,-o-h.size/2-d.top,a+d.width,h.size+d.height)}Pt(t,r.label,0,-o,h,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}},fi={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Q=Object.keys(fi);function ko(i,t){return i-t}function So(i,t){if(O(t))return null;let e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts,a=t;return typeof s==\"function\"&&(a=s(a)),W(a)||(a=typeof s==\"string\"?e.parse(a,s):e.parse(a)),a===null?null:(n&&(a=n===\"week\"&&(It(o)||o===!0)?e.startOf(a,\"isoWeek\",o):e.startOf(a,n)),+a)}function wo(i,t,e,s){let n=Q.length;for(let o=Q.indexOf(i);o<n-1;++o){let a=fi[Q[o]],r=a.steps?a.steps:Number.MAX_SAFE_INTEGER;if(a.common&&Math.ceil((e-t)/(r*a.size))<=s)return Q[o]}return Q[n-1]}function kh(i,t,e,s,n){for(let o=Q.length-1;o>=Q.indexOf(e);o--){let a=Q[o];if(fi[a].common&&i._adapter.diff(n,s,a)>=t-1)return a}return Q[e?Q.indexOf(e):0]}function Sh(i){for(let t=Q.indexOf(i)+1,e=Q.length;t<e;++t)if(fi[Q[t]].common)return Q[t]}function Po(i,t,e){if(!e)i[t]=!0;else if(e.length){let{lo:s,hi:n}=Ne(e,t),o=e[s]>=t?e[s]:e[n];i[o]=!0}}function wh(i,t,e,s){let n=i._adapter,o=+n.startOf(t[0].value,s),a=t[t.length-1].value,r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=e[r],l>=0&&(t[l].major=!0);return t}function Do(i,t,e){let s=[],n={},o=t.length,a,r;for(a=0;a<o;++a)r=t[a],n[r]=a,s.push({value:r,major:!1});return o===0||!e?s:wh(i,s,n,e)}var Pe=class extends Vt{static id=\"time\";static defaults={bounds:\"data\",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:\"millisecond\",displayFormats:{}},ticks:{source:\"auto\",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit=\"day\",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){let s=t.time||(t.time={}),n=this._adapter=new Br._date(t.adapters.date);n.init(e),Ut(s.displayFormats,n.formats()),this._parseOpts={parser:s.parser,round:s.round,isoWeekday:s.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return t===void 0?null:So(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){let t=this.options,e=this._adapter,s=t.time.unit||\"day\",{min:n,max:o,minDefined:a,maxDefined:r}=this.getUserBounds();function l(c){!a&&!isNaN(c.min)&&(n=Math.min(n,c.min)),!r&&!isNaN(c.max)&&(o=Math.max(o,c.max))}(!a||!r)&&(l(this._getLabelBounds()),(t.bounds!==\"ticks\"||t.ticks.source!==\"labels\")&&l(this.getMinMax(!1))),n=W(n)&&!isNaN(n)?n:+e.startOf(Date.now(),s),o=W(o)&&!isNaN(o)?o:+e.endOf(Date.now(),s)+1,this.min=Math.min(n,o-1),this.max=Math.max(n+1,o)}_getLabelBounds(){let t=this.getLabelTimestamps(),e=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],s=t[t.length-1]),{min:e,max:s}}buildTicks(){let t=this.options,e=t.time,s=t.ticks,n=s.source===\"labels\"?this.getLabelTimestamps():this._generate();t.bounds===\"ticks\"&&n.length&&(this.min=this._userMin||n[0],this.max=this._userMax||n[n.length-1]);let o=this.min,a=this.max,r=rn(n,o,a);return this._unit=e.unit||(s.autoSkip?wo(e.minUnit,this.min,this.max,this._getLabelCapacity(o)):kh(this,r.length,e.minUnit,this.min,this.max)),this._majorUnit=!s.major.enabled||this._unit===\"year\"?void 0:Sh(this._unit),this.initOffsets(n),t.reverse&&r.reverse(),Do(this,r,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map(t=>+t.value))}initOffsets(t=[]){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);let a=t.length<3?.5:.25;e=Y(e,0,a),s=Y(s,0,a),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){let t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,a=o.unit||wo(o.minUnit,e,s,this._getLabelCapacity(e)),r=P(n.ticks.stepSize,1),l=a===\"week\"?o.isoWeekday:!1,c=It(l)||l===!0,h={},d=e,u,f;if(c&&(d=+t.startOf(d,\"isoWeek\",l)),d=+t.startOf(d,c?\"day\":a),t.diff(s,e,a)>1e5*r)throw new Error(e+\" and \"+s+\" are too far apart with stepSize of \"+r+\" \"+a);let g=n.ticks.source===\"data\"&&this.getDataTimestamps();for(u=d,f=0;u<s;u=+t.add(u,r,a),f++)Po(h,u,g);return(u===s||n.bounds===\"ticks\"||f===1)&&Po(h,u,g),Object.keys(h).sort(ko).map(p=>+p)}getLabelForValue(t){let e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}format(t,e){let n=this.options.time.displayFormats,o=this._unit,a=e||n[o];return this._adapter.format(t,a)}_tickFormatFunction(t,e,s,n){let o=this.options,a=o.ticks.callback;if(a)return I(a,[t,e,s],this);let r=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&r[l],d=c&&r[c],u=s[e],f=c&&d&&u&&u.major;return this._adapter.format(t,n||(f?d:h))}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e<s;++e)n=t[e],n.label=this._tickFormatFunction(n.value,e,t)}getDecimalForValue(t){return t===null?NaN:(t-this.min)/(this.max-this.min)}getPixelForValue(t){let e=this._offsets,s=this.getDecimalForValue(t);return this.getPixelForDecimal((e.start+s)*e.factor)}getValueForPixel(t){let e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return this.min+s*(this.max-this.min)}_getLabelSize(t){let e=this.options.ticks,s=this.ctx.measureText(t).width,n=it(this.isHorizontal()?e.maxRotation:e.minRotation),o=Math.cos(n),a=Math.sin(n),r=this._resolveTickFontOptions(0).size;return{w:s*o+r*a,h:s*a+r*o}}_getLabelCapacity(t){let e=this.options.time,s=e.displayFormats,n=s[e.unit]||s.millisecond,o=this._tickFormatFunction(t,0,Do(this,[t],this._majorUnit),n),a=this._getLabelSize(o),r=Math.floor(this.isHorizontal()?this.width/a.w:this.height/a.h)-1;return r>0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;let n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e<s;++e)t=t.concat(n[e].controller.getAllParsedValues(this));return this._cache.data=this.normalize(t)}getLabelTimestamps(){let t=this._cache.labels||[],e,s;if(t.length)return t;let n=this.getLabels();for(e=0,s=n.length;e<s;++e)t.push(So(this,n[e]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return Oi(t.sort(ko))}};function ei(i,t,e){let s=0,n=i.length-1,o,a,r,l;e?(t>=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=at(i,\"pos\",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=at(i,\"time\",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);let c=a-o;return c?r+(l-r)*(t-o)/c:r}var Es=class extends Pe{static id=\"timeseries\";static defaults=Pe.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=ei(e,this.min),this._tableRange=ei(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:s}=this,n=[],o=[],a,r,l,c,h;for(a=0,r=t.length;a<r;++a)c=t[a],c>=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,r=n.length;a<r;++a)h=n[a+1],l=n[a-1],c=n[a],Math.round((h+l)/2)!==c&&o.push({time:c,pos:a/(r-1)});return o}_generate(){let t=this.min,e=this.max,s=super.getDataTimestamps();return(!s.includes(t)||!s.length)&&s.splice(0,0,t),(!s.includes(e)||s.length===1)&&s.push(e),s.sort((n,o)=>n-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;let e=this.getDataTimestamps(),s=this.getLabelTimestamps();return e.length&&s.length?t=this.normalize(e.concat(s)):t=e.length?e:s,t=this._cache.all=t,t}getDecimalForValue(t){return(ei(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){let e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return ei(this._table,s*this._tableRange+this._minPos,!0)}},Ph=Object.freeze({__proto__:null,CategoryScale:Os,LinearScale:As,LogarithmicScale:Ts,RadialLinearScale:Rs,TimeScale:Pe,TimeSeriesScale:Es}),Ko=[zr,lc,sh,Ph];ee.register(...Ko);var Rh=ee;export{ls as Animation,ni as Animations,ks as ArcElement,cs as BarController,Ps as BarElement,ai as BasePlatform,ms as BasicPlatform,hs as BubbleController,Os as CategoryScale,ee as Chart,pc as Colors,ut as DatasetController,_c as Decimation,bs as DomPlatform,Me as DoughnutController,ot as Element,Vc as Filler,jr as Interaction,$c as Legend,ds as LineController,ie as LineElement,As as LinearScale,Ts as LogarithmicScale,us as PieController,ws as PointElement,oi as PolarAreaController,fs as RadarController,Rs as RadialLinearScale,Vt as Scale,gs as ScatterController,Kc as SubTitle,ue as Ticks,Pe as TimeScale,Es as TimeSeriesScale,Xc as Title,ih as Tooltip,Br as _adapters,ll as _detectPlatform,xt as animator,zr as controllers,Rh as default,B as defaults,lc as elements,G as layouts,sh as plugins,Ko as registerables,dt as registry,Ph as scales};\n/*! Bundled license information:\n\n@kurkle/color/dist/color.esm.js:\n  (*!\n   * @kurkle/color v0.3.4\n   * https://github.com/kurkle/color#readme\n   * (c) 2024 Jukka Kurkela\n   * Released under the MIT License\n   *)\n\nchart.js/dist/chunks/helpers.dataset.js:\nchart.js/dist/chart.js:\n  (*!\n   * Chart.js v4.5.1\n   * https://www.chartjs.org\n   * (c) 2025 Chart.js Contributors\n   * Released under the MIT License\n   *)\n*/\n"
  },
  {
    "path": "modules/system/assets/vendor/chartjs/chartjs-adapter-moment.esm.js",
    "content": "var zl=Object.create;var Zi=Object.defineProperty;var Hl=Object.getOwnPropertyDescriptor;var Vl=Object.getOwnPropertyNames;var Bl=Object.getPrototypeOf,jl=Object.prototype.hasOwnProperty;var Ki=(i=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(i,{get:(e,n)=>(typeof require<\"u\"?require:e)[n]}):i)(function(i){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+i+'\" is not supported')});var Ul=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports);var $l=(i,e,n,a)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let l of Vl(e))!jl.call(i,l)&&l!==n&&Zi(i,l,{get:()=>e[l],enumerable:!(a=Hl(e,l))||a.enumerable});return i};var Gl=(i,e,n)=>(n=i!=null?zl(Bl(i)):{},$l(e||!i||!i.__esModule?Zi(n,\"default\",{value:i,enumerable:!0}):n,i));var Ji=Ul((Is,de)=>{(function(i,e){typeof Is==\"object\"&&typeof de<\"u\"?de.exports=e():typeof define==\"function\"&&define.amd?define(e):i.moment=e()})(Is,(function(){\"use strict\";var i;function e(){return i.apply(null,arguments)}function n(t){i=t}function a(t){return t instanceof Array||Object.prototype.toString.call(t)===\"[object Array]\"}function l(t){return t!=null&&Object.prototype.toString.call(t)===\"[object Object]\"}function c(t,s){return Object.prototype.hasOwnProperty.call(t,s)}function d(t){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(t).length===0;var s;for(s in t)if(c(t,s))return!1;return!0}function u(t){return t===void 0}function f(t){return typeof t==\"number\"||Object.prototype.toString.call(t)===\"[object Number]\"}function p(t){return t instanceof Date||Object.prototype.toString.call(t)===\"[object Date]\"}function _(t,s){var o=[],r,h=t.length;for(r=0;r<h;++r)o.push(s(t[r],r));return o}function b(t,s){for(var o in s)c(s,o)&&(t[o]=s[o]);return c(s,\"toString\")&&(t.toString=s.toString),c(s,\"valueOf\")&&(t.valueOf=s.valueOf),t}function y(t,s,o,r){return Oi(t,s,o,r,!0).utc()}function w(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function M(t){return t._pf==null&&(t._pf=w()),t._pf}var I;Array.prototype.some?I=Array.prototype.some:I=function(t){var s=Object(this),o=s.length>>>0,r;for(r=0;r<o;r++)if(r in s&&t.call(this,s[r],r,s))return!0;return!1};function R(t){var s=null,o=!1,r=t._d&&!isNaN(t._d.getTime());if(r&&(s=M(t),o=I.call(s.parsedDateParts,function(h){return h!=null}),r=s.overflow<0&&!s.empty&&!s.invalidEra&&!s.invalidMonth&&!s.invalidWeekday&&!s.weekdayMismatch&&!s.nullInput&&!s.invalidFormat&&!s.userInvalidated&&(!s.meridiem||s.meridiem&&o),t._strict&&(r=r&&s.charsLeftOver===0&&s.unusedTokens.length===0&&s.bigHour===void 0)),Object.isFrozen==null||!Object.isFrozen(t))t._isValid=r;else return r;return t._isValid}function D(t){var s=y(NaN);return t!=null?b(M(s),t):M(s).userInvalidated=!0,s}var A=e.momentProperties=[],$=!1;function X(t,s){var o,r,h,g=A.length;if(u(s._isAMomentObject)||(t._isAMomentObject=s._isAMomentObject),u(s._i)||(t._i=s._i),u(s._f)||(t._f=s._f),u(s._l)||(t._l=s._l),u(s._strict)||(t._strict=s._strict),u(s._tzm)||(t._tzm=s._tzm),u(s._isUTC)||(t._isUTC=s._isUTC),u(s._offset)||(t._offset=s._offset),u(s._pf)||(t._pf=M(s)),u(s._locale)||(t._locale=s._locale),g>0)for(o=0;o<g;o++)r=A[o],h=s[r],u(h)||(t[r]=h);return t}function P(t){X(this,t),this._d=new Date(t._d!=null?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),$===!1&&($=!0,e.updateOffset(this),$=!1)}function T(t){return t instanceof P||t!=null&&t._isAMomentObject!=null}function L(t){e.suppressDeprecationWarnings===!1&&typeof console<\"u\"&&console.warn&&console.warn(\"Deprecation warning: \"+t)}function C(t,s){var o=!0;return b(function(){if(e.deprecationHandler!=null&&e.deprecationHandler(null,t),o){var r=[],h,g,m,v=arguments.length;for(g=0;g<v;g++){if(h=\"\",typeof arguments[g]==\"object\"){h+=`\n[`+g+\"] \";for(m in arguments[0])c(arguments[0],m)&&(h+=m+\": \"+arguments[0][m]+\", \");h=h.slice(0,-2)}else h=arguments[g];r.push(h)}L(t+`\nArguments: `+Array.prototype.slice.call(r).join(\"\")+`\n`+new Error().stack),o=!1}return s.apply(this,arguments)},s)}var N={};function G(t,s){e.deprecationHandler!=null&&e.deprecationHandler(t,s),N[t]||(L(s),N[t]=!0)}e.suppressDeprecationWarnings=!1,e.deprecationHandler=null;function z(t){return typeof Function<\"u\"&&t instanceof Function||Object.prototype.toString.call(t)===\"[object Function]\"}function q(t){var s,o;for(o in t)c(t,o)&&(s=t[o],z(s)?this[o]=s:this[\"_\"+o]=s);this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)}function lt(t,s){var o=b({},t),r;for(r in s)c(s,r)&&(l(t[r])&&l(s[r])?(o[r]={},b(o[r],t[r]),b(o[r],s[r])):s[r]!=null?o[r]=s[r]:delete o[r]);for(r in t)c(t,r)&&!c(s,r)&&l(t[r])&&(o[r]=b({},o[r]));return o}function pt(t){t!=null&&this.set(t)}var V;Object.keys?V=Object.keys:V=function(t){var s,o=[];for(s in t)c(t,s)&&o.push(s);return o};var J={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"};function ct(t,s,o){var r=this._calendar[t]||this._calendar.sameElse;return z(r)?r.call(s,o):r}function nt(t,s,o){var r=\"\"+Math.abs(t),h=s-r.length,g=t>=0;return(g?o?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,h)).toString().substr(1)+r}var Wt=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,xt=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Nt={},ft={};function S(t,s,o,r){var h=r;typeof r==\"string\"&&(h=function(){return this[r]()}),t&&(ft[t]=h),s&&(ft[s[0]]=function(){return nt(h.apply(this,arguments),s[1],s[2])}),o&&(ft[o]=function(){return this.localeData().ordinal(h.apply(this,arguments),t)})}function St(t){return t.match(/\\[[\\s\\S]/)?t.replace(/^\\[|\\]$/g,\"\"):t.replace(/\\\\/g,\"\")}function qt(t){var s=t.match(Wt),o,r;for(o=0,r=s.length;o<r;o++)ft[s[o]]?s[o]=ft[s[o]]:s[o]=St(s[o]);return function(h){var g=\"\",m;for(m=0;m<r;m++)g+=z(s[m])?s[m].call(h,t):s[m];return g}}function mt(t,s){return t.isValid()?(s=oi(s,t.localeData()),Nt[s]=Nt[s]||qt(s),Nt[s](t)):t.localeData().invalidDate()}function oi(t,s){var o=5;function r(h){return s.longDateFormat(h)||h}for(xt.lastIndex=0;o>=0&&xt.test(t);)t=t.replace(xt,r),xt.lastIndex=0,o-=1;return t}var $n={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};function Gn(t){var s=this._longDateFormat[t],o=this._longDateFormat[t.toUpperCase()];return s||!o?s:(this._longDateFormat[t]=o.match(Wt).map(function(r){return r===\"MMMM\"||r===\"MM\"||r===\"DD\"||r===\"dddd\"?r.slice(1):r}).join(\"\"),this._longDateFormat[t])}var Xn=\"Invalid date\";function qn(){return this._invalidDate}var Zn=\"%d\",Kn=/\\d{1,2}/;function Jn(t){return this._ordinal.replace(\"%d\",t)}var Qn={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function to(t,s,o,r){var h=this._relativeTime[o];return z(h)?h(t,s,o,r):h.replace(/%d/i,t)}function eo(t,s){var o=this._relativeTime[t>0?\"future\":\"past\"];return z(o)?o(s):o.replace(/%s/i,s)}var ai={D:\"date\",dates:\"date\",date:\"date\",d:\"day\",days:\"day\",day:\"day\",e:\"weekday\",weekdays:\"weekday\",weekday:\"weekday\",E:\"isoWeekday\",isoweekdays:\"isoWeekday\",isoweekday:\"isoWeekday\",DDD:\"dayOfYear\",dayofyears:\"dayOfYear\",dayofyear:\"dayOfYear\",h:\"hour\",hours:\"hour\",hour:\"hour\",ms:\"millisecond\",milliseconds:\"millisecond\",millisecond:\"millisecond\",m:\"minute\",minutes:\"minute\",minute:\"minute\",M:\"month\",months:\"month\",month:\"month\",Q:\"quarter\",quarters:\"quarter\",quarter:\"quarter\",s:\"second\",seconds:\"second\",second:\"second\",gg:\"weekYear\",weekyears:\"weekYear\",weekyear:\"weekYear\",GG:\"isoWeekYear\",isoweekyears:\"isoWeekYear\",isoweekyear:\"isoWeekYear\",w:\"week\",weeks:\"week\",week:\"week\",W:\"isoWeek\",isoweeks:\"isoWeek\",isoweek:\"isoWeek\",y:\"year\",years:\"year\",year:\"year\"};function _t(t){return typeof t==\"string\"?ai[t]||ai[t.toLowerCase()]:void 0}function fs(t){var s={},o,r;for(r in t)c(t,r)&&(o=_t(r),o&&(s[o]=t[r]));return s}var so={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function io(t){var s=[],o;for(o in t)c(t,o)&&s.push({unit:o,priority:so[o]});return s.sort(function(r,h){return r.priority-h.priority}),s}var ri=/\\d/,gt=/\\d\\d/,li=/\\d{3}/,gs=/\\d{4}/,Ie=/[+-]?\\d{6}/,B=/\\d\\d?/,ci=/\\d\\d\\d\\d?/,hi=/\\d\\d\\d\\d\\d\\d?/,Ye=/\\d{1,3}/,ps=/\\d{1,4}/,We=/[+-]?\\d{1,6}/,ie=/\\d+/,Ne=/[+-]?\\d+/,no=/Z|[+-]\\d\\d:?\\d\\d/gi,ze=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,oo=/[+-]?\\d+(\\.\\d{1,3})?/,ge=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,ne=/^[1-9]\\d?/,ms=/^([1-9]\\d|\\d)/,He;He={};function k(t,s,o){He[t]=z(s)?s:function(r,h){return r&&o?o:s}}function ao(t,s){return c(He,t)?He[t](s._strict,s._locale):new RegExp(ro(t))}function ro(t){return Dt(t.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(s,o,r,h,g){return o||r||h||g}))}function Dt(t){return t.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function bt(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function F(t){var s=+t,o=0;return s!==0&&isFinite(s)&&(o=bt(s)),o}var _s={};function H(t,s){var o,r=s,h;for(typeof t==\"string\"&&(t=[t]),f(s)&&(r=function(g,m){m[s]=F(g)}),h=t.length,o=0;o<h;o++)_s[t[o]]=r}function pe(t,s){H(t,function(o,r,h,g){h._w=h._w||{},s(o,h._w,h,g)})}function lo(t,s,o){s!=null&&c(_s,t)&&_s[t](s,o._a,o,t)}function Ve(t){return t%4===0&&t%100!==0||t%400===0}var et=0,Ot=1,wt=2,Q=3,Mt=4,Pt=5,Zt=6,co=7,ho=8;S(\"Y\",0,0,function(){var t=this.year();return t<=9999?nt(t,4):\"+\"+t}),S(0,[\"YY\",2],0,function(){return this.year()%100}),S(0,[\"YYYY\",4],0,\"year\"),S(0,[\"YYYYY\",5],0,\"year\"),S(0,[\"YYYYYY\",6,!0],0,\"year\"),k(\"Y\",Ne),k(\"YY\",B,gt),k(\"YYYY\",ps,gs),k(\"YYYYY\",We,Ie),k(\"YYYYYY\",We,Ie),H([\"YYYYY\",\"YYYYYY\"],et),H(\"YYYY\",function(t,s){s[et]=t.length===2?e.parseTwoDigitYear(t):F(t)}),H(\"YY\",function(t,s){s[et]=e.parseTwoDigitYear(t)}),H(\"Y\",function(t,s){s[et]=parseInt(t,10)});function me(t){return Ve(t)?366:365}e.parseTwoDigitYear=function(t){return F(t)+(F(t)>68?1900:2e3)};var di=oe(\"FullYear\",!0);function uo(){return Ve(this.year())}function oe(t,s){return function(o){return o!=null?(ui(this,t,o),e.updateOffset(this,s),this):_e(this,t)}}function _e(t,s){if(!t.isValid())return NaN;var o=t._d,r=t._isUTC;switch(s){case\"Milliseconds\":return r?o.getUTCMilliseconds():o.getMilliseconds();case\"Seconds\":return r?o.getUTCSeconds():o.getSeconds();case\"Minutes\":return r?o.getUTCMinutes():o.getMinutes();case\"Hours\":return r?o.getUTCHours():o.getHours();case\"Date\":return r?o.getUTCDate():o.getDate();case\"Day\":return r?o.getUTCDay():o.getDay();case\"Month\":return r?o.getUTCMonth():o.getMonth();case\"FullYear\":return r?o.getUTCFullYear():o.getFullYear();default:return NaN}}function ui(t,s,o){var r,h,g,m,v;if(!(!t.isValid()||isNaN(o))){switch(r=t._d,h=t._isUTC,s){case\"Milliseconds\":return void(h?r.setUTCMilliseconds(o):r.setMilliseconds(o));case\"Seconds\":return void(h?r.setUTCSeconds(o):r.setSeconds(o));case\"Minutes\":return void(h?r.setUTCMinutes(o):r.setMinutes(o));case\"Hours\":return void(h?r.setUTCHours(o):r.setHours(o));case\"Date\":return void(h?r.setUTCDate(o):r.setDate(o));case\"FullYear\":break;default:return}g=o,m=t.month(),v=t.date(),v=v===29&&m===1&&!Ve(g)?28:v,h?r.setUTCFullYear(g,m,v):r.setFullYear(g,m,v)}}function fo(t){return t=_t(t),z(this[t])?this[t]():this}function go(t,s){if(typeof t==\"object\"){t=fs(t);var o=io(t),r,h=o.length;for(r=0;r<h;r++)this[o[r].unit](t[o[r].unit])}else if(t=_t(t),z(this[t]))return this[t](s);return this}function po(t,s){return(t%s+s)%s}var Z;Array.prototype.indexOf?Z=Array.prototype.indexOf:Z=function(t){var s;for(s=0;s<this.length;++s)if(this[s]===t)return s;return-1};function bs(t,s){if(isNaN(t)||isNaN(s))return NaN;var o=po(s,12);return t+=(s-o)/12,o===1?Ve(t)?29:28:31-o%7%2}S(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),S(\"MMM\",0,0,function(t){return this.localeData().monthsShort(this,t)}),S(\"MMMM\",0,0,function(t){return this.localeData().months(this,t)}),k(\"M\",B,ne),k(\"MM\",B,gt),k(\"MMM\",function(t,s){return s.monthsShortRegex(t)}),k(\"MMMM\",function(t,s){return s.monthsRegex(t)}),H([\"M\",\"MM\"],function(t,s){s[Ot]=F(t)-1}),H([\"MMM\",\"MMMM\"],function(t,s,o,r){var h=o._locale.monthsParse(t,r,o._strict);h!=null?s[Ot]=h:M(o).invalidMonth=t});var mo=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),fi=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),gi=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,_o=ge,bo=ge;function yo(t,s){return t?a(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||gi).test(s)?\"format\":\"standalone\"][t.month()]:a(this._months)?this._months:this._months.standalone}function xo(t,s){return t?a(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[gi.test(s)?\"format\":\"standalone\"][t.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function Mo(t,s,o){var r,h,g,m=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)g=y([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(g,\"\").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(g,\"\").toLocaleLowerCase();return o?s===\"MMM\"?(h=Z.call(this._shortMonthsParse,m),h!==-1?h:null):(h=Z.call(this._longMonthsParse,m),h!==-1?h:null):s===\"MMM\"?(h=Z.call(this._shortMonthsParse,m),h!==-1?h:(h=Z.call(this._longMonthsParse,m),h!==-1?h:null)):(h=Z.call(this._longMonthsParse,m),h!==-1?h:(h=Z.call(this._shortMonthsParse,m),h!==-1?h:null))}function vo(t,s,o){var r,h,g;if(this._monthsParseExact)return Mo.call(this,t,s,o);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(h=y([2e3,r]),o&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp(\"^\"+this.months(h,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[r]=new RegExp(\"^\"+this.monthsShort(h,\"\").replace(\".\",\"\")+\"$\",\"i\")),!o&&!this._monthsParse[r]&&(g=\"^\"+this.months(h,\"\")+\"|^\"+this.monthsShort(h,\"\"),this._monthsParse[r]=new RegExp(g.replace(\".\",\"\"),\"i\")),o&&s===\"MMMM\"&&this._longMonthsParse[r].test(t))return r;if(o&&s===\"MMM\"&&this._shortMonthsParse[r].test(t))return r;if(!o&&this._monthsParse[r].test(t))return r}}function pi(t,s){if(!t.isValid())return t;if(typeof s==\"string\"){if(/^\\d+$/.test(s))s=F(s);else if(s=t.localeData().monthsParse(s),!f(s))return t}var o=s,r=t.date();return r=r<29?r:Math.min(r,bs(t.year(),o)),t._isUTC?t._d.setUTCMonth(o,r):t._d.setMonth(o,r),t}function mi(t){return t!=null?(pi(this,t),e.updateOffset(this,!0),this):_e(this,\"Month\")}function ko(){return bs(this.year(),this.month())}function wo(t){return this._monthsParseExact?(c(this,\"_monthsRegex\")||_i.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,\"_monthsShortRegex\")||(this._monthsShortRegex=_o),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}function So(t){return this._monthsParseExact?(c(this,\"_monthsRegex\")||_i.call(this),t?this._monthsStrictRegex:this._monthsRegex):(c(this,\"_monthsRegex\")||(this._monthsRegex=bo),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}function _i(){function t(O,E){return E.length-O.length}var s=[],o=[],r=[],h,g,m,v;for(h=0;h<12;h++)g=y([2e3,h]),m=Dt(this.monthsShort(g,\"\")),v=Dt(this.months(g,\"\")),s.push(m),o.push(v),r.push(v),r.push(m);s.sort(t),o.sort(t),r.sort(t),this._monthsRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\")}function Do(t,s,o,r,h,g,m){var v;return t<100&&t>=0?(v=new Date(t+400,s,o,r,h,g,m),isFinite(v.getFullYear())&&v.setFullYear(t)):v=new Date(t,s,o,r,h,g,m),v}function be(t){var s,o;return t<100&&t>=0?(o=Array.prototype.slice.call(arguments),o[0]=t+400,s=new Date(Date.UTC.apply(null,o)),isFinite(s.getUTCFullYear())&&s.setUTCFullYear(t)):s=new Date(Date.UTC.apply(null,arguments)),s}function Be(t,s,o){var r=7+s-o,h=(7+be(t,0,r).getUTCDay()-s)%7;return-h+r-1}function bi(t,s,o,r,h){var g=(7+o-r)%7,m=Be(t,r,h),v=1+7*(s-1)+g+m,O,E;return v<=0?(O=t-1,E=me(O)+v):v>me(t)?(O=t+1,E=v-me(t)):(O=t,E=v),{year:O,dayOfYear:E}}function ye(t,s,o){var r=Be(t.year(),s,o),h=Math.floor((t.dayOfYear()-r-1)/7)+1,g,m;return h<1?(m=t.year()-1,g=h+Tt(m,s,o)):h>Tt(t.year(),s,o)?(g=h-Tt(t.year(),s,o),m=t.year()+1):(m=t.year(),g=h),{week:g,year:m}}function Tt(t,s,o){var r=Be(t,s,o),h=Be(t+1,s,o);return(me(t)-r+h)/7}S(\"w\",[\"ww\",2],\"wo\",\"week\"),S(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),k(\"w\",B,ne),k(\"ww\",B,gt),k(\"W\",B,ne),k(\"WW\",B,gt),pe([\"w\",\"ww\",\"W\",\"WW\"],function(t,s,o,r){s[r.substr(0,1)]=F(t)});function Oo(t){return ye(t,this._week.dow,this._week.doy).week}var Po={dow:0,doy:6};function To(){return this._week.dow}function Co(){return this._week.doy}function Ao(t){var s=this.localeData().week(this);return t==null?s:this.add((t-s)*7,\"d\")}function Ro(t){var s=ye(this,1,4).week;return t==null?s:this.add((t-s)*7,\"d\")}S(\"d\",0,\"do\",\"day\"),S(\"dd\",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),S(\"ddd\",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),S(\"dddd\",0,0,function(t){return this.localeData().weekdays(this,t)}),S(\"e\",0,0,\"weekday\"),S(\"E\",0,0,\"isoWeekday\"),k(\"d\",B),k(\"e\",B),k(\"E\",B),k(\"dd\",function(t,s){return s.weekdaysMinRegex(t)}),k(\"ddd\",function(t,s){return s.weekdaysShortRegex(t)}),k(\"dddd\",function(t,s){return s.weekdaysRegex(t)}),pe([\"dd\",\"ddd\",\"dddd\"],function(t,s,o,r){var h=o._locale.weekdaysParse(t,r,o._strict);h!=null?s.d=h:M(o).invalidWeekday=t}),pe([\"d\",\"e\",\"E\"],function(t,s,o,r){s[r]=F(t)});function Lo(t,s){return typeof t!=\"string\"?t:isNaN(t)?(t=s.weekdaysParse(t),typeof t==\"number\"?t:null):parseInt(t,10)}function Fo(t,s){return typeof t==\"string\"?s.weekdaysParse(t)%7||7:isNaN(t)?null:t}function ys(t,s){return t.slice(s,7).concat(t.slice(0,s))}var Eo=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),yi=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),Io=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),Yo=ge,Wo=ge,No=ge;function zo(t,s){var o=a(this._weekdays)?this._weekdays:this._weekdays[t&&t!==!0&&this._weekdays.isFormat.test(s)?\"format\":\"standalone\"];return t===!0?ys(o,this._week.dow):t?o[t.day()]:o}function Ho(t){return t===!0?ys(this._weekdaysShort,this._week.dow):t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Vo(t){return t===!0?ys(this._weekdaysMin,this._week.dow):t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Bo(t,s,o){var r,h,g,m=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)g=y([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(g,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(g,\"\").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(g,\"\").toLocaleLowerCase();return o?s===\"dddd\"?(h=Z.call(this._weekdaysParse,m),h!==-1?h:null):s===\"ddd\"?(h=Z.call(this._shortWeekdaysParse,m),h!==-1?h:null):(h=Z.call(this._minWeekdaysParse,m),h!==-1?h:null):s===\"dddd\"?(h=Z.call(this._weekdaysParse,m),h!==-1||(h=Z.call(this._shortWeekdaysParse,m),h!==-1)?h:(h=Z.call(this._minWeekdaysParse,m),h!==-1?h:null)):s===\"ddd\"?(h=Z.call(this._shortWeekdaysParse,m),h!==-1||(h=Z.call(this._weekdaysParse,m),h!==-1)?h:(h=Z.call(this._minWeekdaysParse,m),h!==-1?h:null)):(h=Z.call(this._minWeekdaysParse,m),h!==-1||(h=Z.call(this._weekdaysParse,m),h!==-1)?h:(h=Z.call(this._shortWeekdaysParse,m),h!==-1?h:null))}function jo(t,s,o){var r,h,g;if(this._weekdaysParseExact)return Bo.call(this,t,s,o);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(h=y([2e3,1]).day(r),o&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp(\"^\"+this.weekdays(h,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysShort(h,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysMin(h,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[r]||(g=\"^\"+this.weekdays(h,\"\")+\"|^\"+this.weekdaysShort(h,\"\")+\"|^\"+this.weekdaysMin(h,\"\"),this._weekdaysParse[r]=new RegExp(g.replace(\".\",\"\"),\"i\")),o&&s===\"dddd\"&&this._fullWeekdaysParse[r].test(t))return r;if(o&&s===\"ddd\"&&this._shortWeekdaysParse[r].test(t))return r;if(o&&s===\"dd\"&&this._minWeekdaysParse[r].test(t))return r;if(!o&&this._weekdaysParse[r].test(t))return r}}function Uo(t){if(!this.isValid())return t!=null?this:NaN;var s=_e(this,\"Day\");return t!=null?(t=Lo(t,this.localeData()),this.add(t-s,\"d\")):s}function $o(t){if(!this.isValid())return t!=null?this:NaN;var s=(this.day()+7-this.localeData()._week.dow)%7;return t==null?s:this.add(t-s,\"d\")}function Go(t){if(!this.isValid())return t!=null?this:NaN;if(t!=null){var s=Fo(t,this.localeData());return this.day(this.day()%7?s:s-7)}else return this.day()||7}function Xo(t){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||xs.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,\"_weekdaysRegex\")||(this._weekdaysRegex=Yo),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function qo(t){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||xs.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=Wo),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Zo(t){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||xs.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=No),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function xs(){function t(ot,Ft){return Ft.length-ot.length}var s=[],o=[],r=[],h=[],g,m,v,O,E;for(g=0;g<7;g++)m=y([2e3,1]).day(g),v=Dt(this.weekdaysMin(m,\"\")),O=Dt(this.weekdaysShort(m,\"\")),E=Dt(this.weekdays(m,\"\")),s.push(v),o.push(O),r.push(E),h.push(v),h.push(O),h.push(E);s.sort(t),o.sort(t),r.sort(t),h.sort(t),this._weekdaysRegex=new RegExp(\"^(\"+h.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\")}function Ms(){return this.hours()%12||12}function Ko(){return this.hours()||24}S(\"H\",[\"HH\",2],0,\"hour\"),S(\"h\",[\"hh\",2],0,Ms),S(\"k\",[\"kk\",2],0,Ko),S(\"hmm\",0,0,function(){return\"\"+Ms.apply(this)+nt(this.minutes(),2)}),S(\"hmmss\",0,0,function(){return\"\"+Ms.apply(this)+nt(this.minutes(),2)+nt(this.seconds(),2)}),S(\"Hmm\",0,0,function(){return\"\"+this.hours()+nt(this.minutes(),2)}),S(\"Hmmss\",0,0,function(){return\"\"+this.hours()+nt(this.minutes(),2)+nt(this.seconds(),2)});function xi(t,s){S(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),s)})}xi(\"a\",!0),xi(\"A\",!1);function Mi(t,s){return s._meridiemParse}k(\"a\",Mi),k(\"A\",Mi),k(\"H\",B,ms),k(\"h\",B,ne),k(\"k\",B,ne),k(\"HH\",B,gt),k(\"hh\",B,gt),k(\"kk\",B,gt),k(\"hmm\",ci),k(\"hmmss\",hi),k(\"Hmm\",ci),k(\"Hmmss\",hi),H([\"H\",\"HH\"],Q),H([\"k\",\"kk\"],function(t,s,o){var r=F(t);s[Q]=r===24?0:r}),H([\"a\",\"A\"],function(t,s,o){o._isPm=o._locale.isPM(t),o._meridiem=t}),H([\"h\",\"hh\"],function(t,s,o){s[Q]=F(t),M(o).bigHour=!0}),H(\"hmm\",function(t,s,o){var r=t.length-2;s[Q]=F(t.substr(0,r)),s[Mt]=F(t.substr(r)),M(o).bigHour=!0}),H(\"hmmss\",function(t,s,o){var r=t.length-4,h=t.length-2;s[Q]=F(t.substr(0,r)),s[Mt]=F(t.substr(r,2)),s[Pt]=F(t.substr(h)),M(o).bigHour=!0}),H(\"Hmm\",function(t,s,o){var r=t.length-2;s[Q]=F(t.substr(0,r)),s[Mt]=F(t.substr(r))}),H(\"Hmmss\",function(t,s,o){var r=t.length-4,h=t.length-2;s[Q]=F(t.substr(0,r)),s[Mt]=F(t.substr(r,2)),s[Pt]=F(t.substr(h))});function Jo(t){return(t+\"\").toLowerCase().charAt(0)===\"p\"}var Qo=/[ap]\\.?m?\\.?/i,ta=oe(\"Hours\",!0);function ea(t,s,o){return t>11?o?\"pm\":\"PM\":o?\"am\":\"AM\"}var vi={calendar:J,longDateFormat:$n,invalidDate:Xn,ordinal:Zn,dayOfMonthOrdinalParse:Kn,relativeTime:Qn,months:mo,monthsShort:fi,week:Po,weekdays:Eo,weekdaysMin:Io,weekdaysShort:yi,meridiemParse:Qo},U={},xe={},Me;function sa(t,s){var o,r=Math.min(t.length,s.length);for(o=0;o<r;o+=1)if(t[o]!==s[o])return o;return r}function ki(t){return t&&t.toLowerCase().replace(\"_\",\"-\")}function ia(t){for(var s=0,o,r,h,g;s<t.length;){for(g=ki(t[s]).split(\"-\"),o=g.length,r=ki(t[s+1]),r=r?r.split(\"-\"):null;o>0;){if(h=je(g.slice(0,o).join(\"-\")),h)return h;if(r&&r.length>=o&&sa(g,r)>=o-1)break;o--}s++}return Me}function na(t){return!!(t&&t.match(\"^[^/\\\\\\\\]*$\"))}function je(t){var s=null,o;if(U[t]===void 0&&typeof de<\"u\"&&de&&de.exports&&na(t))try{s=Me._abbr,o=Ki,o(\"./locale/\"+t),zt(s)}catch{U[t]=null}return U[t]}function zt(t,s){var o;return t&&(u(s)?o=Ct(t):o=vs(t,s),o?Me=o:typeof console<\"u\"&&console.warn&&console.warn(\"Locale \"+t+\" not found. Did you forget to load it?\")),Me._abbr}function vs(t,s){if(s!==null){var o,r=vi;if(s.abbr=t,U[t]!=null)G(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),r=U[t]._config;else if(s.parentLocale!=null)if(U[s.parentLocale]!=null)r=U[s.parentLocale]._config;else if(o=je(s.parentLocale),o!=null)r=o._config;else return xe[s.parentLocale]||(xe[s.parentLocale]=[]),xe[s.parentLocale].push({name:t,config:s}),null;return U[t]=new pt(lt(r,s)),xe[t]&&xe[t].forEach(function(h){vs(h.name,h.config)}),zt(t),U[t]}else return delete U[t],null}function oa(t,s){if(s!=null){var o,r,h=vi;U[t]!=null&&U[t].parentLocale!=null?U[t].set(lt(U[t]._config,s)):(r=je(t),r!=null&&(h=r._config),s=lt(h,s),r==null&&(s.abbr=t),o=new pt(s),o.parentLocale=U[t],U[t]=o),zt(t)}else U[t]!=null&&(U[t].parentLocale!=null?(U[t]=U[t].parentLocale,t===zt()&&zt(t)):U[t]!=null&&delete U[t]);return U[t]}function Ct(t){var s;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Me;if(!a(t)){if(s=je(t),s)return s;t=[t]}return ia(t)}function aa(){return V(U)}function ks(t){var s,o=t._a;return o&&M(t).overflow===-2&&(s=o[Ot]<0||o[Ot]>11?Ot:o[wt]<1||o[wt]>bs(o[et],o[Ot])?wt:o[Q]<0||o[Q]>24||o[Q]===24&&(o[Mt]!==0||o[Pt]!==0||o[Zt]!==0)?Q:o[Mt]<0||o[Mt]>59?Mt:o[Pt]<0||o[Pt]>59?Pt:o[Zt]<0||o[Zt]>999?Zt:-1,M(t)._overflowDayOfYear&&(s<et||s>wt)&&(s=wt),M(t)._overflowWeeks&&s===-1&&(s=co),M(t)._overflowWeekday&&s===-1&&(s=ho),M(t).overflow=s),t}var ra=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,la=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,ca=/Z|[+-]\\d\\d(?::?\\d\\d)?/,Ue=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],ws=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],ha=/^\\/?Date\\((-?\\d+)/i,da=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,ua={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function wi(t){var s,o,r=t._i,h=ra.exec(r)||la.exec(r),g,m,v,O,E=Ue.length,ot=ws.length;if(h){for(M(t).iso=!0,s=0,o=E;s<o;s++)if(Ue[s][1].exec(h[1])){m=Ue[s][0],g=Ue[s][2]!==!1;break}if(m==null){t._isValid=!1;return}if(h[3]){for(s=0,o=ot;s<o;s++)if(ws[s][1].exec(h[3])){v=(h[2]||\" \")+ws[s][0];break}if(v==null){t._isValid=!1;return}}if(!g&&v!=null){t._isValid=!1;return}if(h[4])if(ca.exec(h[4]))O=\"Z\";else{t._isValid=!1;return}t._f=m+(v||\"\")+(O||\"\"),Ds(t)}else t._isValid=!1}function fa(t,s,o,r,h,g){var m=[ga(t),fi.indexOf(s),parseInt(o,10),parseInt(r,10),parseInt(h,10)];return g&&m.push(parseInt(g,10)),m}function ga(t){var s=parseInt(t,10);return s<=49?2e3+s:s<=999?1900+s:s}function pa(t){return t.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function ma(t,s,o){if(t){var r=yi.indexOf(t),h=new Date(s[0],s[1],s[2]).getDay();if(r!==h)return M(o).weekdayMismatch=!0,o._isValid=!1,!1}return!0}function _a(t,s,o){if(t)return ua[t];if(s)return 0;var r=parseInt(o,10),h=r%100,g=(r-h)/100;return g*60+h}function Si(t){var s=da.exec(pa(t._i)),o;if(s){if(o=fa(s[4],s[3],s[2],s[5],s[6],s[7]),!ma(s[1],o,t))return;t._a=o,t._tzm=_a(s[8],s[9],s[10]),t._d=be.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),M(t).rfc2822=!0}else t._isValid=!1}function ba(t){var s=ha.exec(t._i);if(s!==null){t._d=new Date(+s[1]);return}if(wi(t),t._isValid===!1)delete t._isValid;else return;if(Si(t),t._isValid===!1)delete t._isValid;else return;t._strict?t._isValid=!1:e.createFromInputFallback(t)}e.createFromInputFallback=C(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(t){t._d=new Date(t._i+(t._useUTC?\" UTC\":\"\"))});function ae(t,s,o){return t??s??o}function ya(t){var s=new Date(e.now());return t._useUTC?[s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate()]:[s.getFullYear(),s.getMonth(),s.getDate()]}function Ss(t){var s,o,r=[],h,g,m;if(!t._d){for(h=ya(t),t._w&&t._a[wt]==null&&t._a[Ot]==null&&xa(t),t._dayOfYear!=null&&(m=ae(t._a[et],h[et]),(t._dayOfYear>me(m)||t._dayOfYear===0)&&(M(t)._overflowDayOfYear=!0),o=be(m,0,t._dayOfYear),t._a[Ot]=o.getUTCMonth(),t._a[wt]=o.getUTCDate()),s=0;s<3&&t._a[s]==null;++s)t._a[s]=r[s]=h[s];for(;s<7;s++)t._a[s]=r[s]=t._a[s]==null?s===2?1:0:t._a[s];t._a[Q]===24&&t._a[Mt]===0&&t._a[Pt]===0&&t._a[Zt]===0&&(t._nextDay=!0,t._a[Q]=0),t._d=(t._useUTC?be:Do).apply(null,r),g=t._useUTC?t._d.getUTCDay():t._d.getDay(),t._tzm!=null&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Q]=24),t._w&&typeof t._w.d<\"u\"&&t._w.d!==g&&(M(t).weekdayMismatch=!0)}}function xa(t){var s,o,r,h,g,m,v,O,E;s=t._w,s.GG!=null||s.W!=null||s.E!=null?(g=1,m=4,o=ae(s.GG,t._a[et],ye(j(),1,4).year),r=ae(s.W,1),h=ae(s.E,1),(h<1||h>7)&&(O=!0)):(g=t._locale._week.dow,m=t._locale._week.doy,E=ye(j(),g,m),o=ae(s.gg,t._a[et],E.year),r=ae(s.w,E.week),s.d!=null?(h=s.d,(h<0||h>6)&&(O=!0)):s.e!=null?(h=s.e+g,(s.e<0||s.e>6)&&(O=!0)):h=g),r<1||r>Tt(o,g,m)?M(t)._overflowWeeks=!0:O!=null?M(t)._overflowWeekday=!0:(v=bi(o,r,h,g,m),t._a[et]=v.year,t._dayOfYear=v.dayOfYear)}e.ISO_8601=function(){},e.RFC_2822=function(){};function Ds(t){if(t._f===e.ISO_8601){wi(t);return}if(t._f===e.RFC_2822){Si(t);return}t._a=[],M(t).empty=!0;var s=\"\"+t._i,o,r,h,g,m,v=s.length,O=0,E,ot;for(h=oi(t._f,t._locale).match(Wt)||[],ot=h.length,o=0;o<ot;o++)g=h[o],r=(s.match(ao(g,t))||[])[0],r&&(m=s.substr(0,s.indexOf(r)),m.length>0&&M(t).unusedInput.push(m),s=s.slice(s.indexOf(r)+r.length),O+=r.length),ft[g]?(r?M(t).empty=!1:M(t).unusedTokens.push(g),lo(g,r,t)):t._strict&&!r&&M(t).unusedTokens.push(g);M(t).charsLeftOver=v-O,s.length>0&&M(t).unusedInput.push(s),t._a[Q]<=12&&M(t).bigHour===!0&&t._a[Q]>0&&(M(t).bigHour=void 0),M(t).parsedDateParts=t._a.slice(0),M(t).meridiem=t._meridiem,t._a[Q]=Ma(t._locale,t._a[Q],t._meridiem),E=M(t).era,E!==null&&(t._a[et]=t._locale.erasConvertYear(E,t._a[et])),Ss(t),ks(t)}function Ma(t,s,o){var r;return o==null?s:t.meridiemHour!=null?t.meridiemHour(s,o):(t.isPM!=null&&(r=t.isPM(o),r&&s<12&&(s+=12),!r&&s===12&&(s=0)),s)}function va(t){var s,o,r,h,g,m,v=!1,O=t._f.length;if(O===0){M(t).invalidFormat=!0,t._d=new Date(NaN);return}for(h=0;h<O;h++)g=0,m=!1,s=X({},t),t._useUTC!=null&&(s._useUTC=t._useUTC),s._f=t._f[h],Ds(s),R(s)&&(m=!0),g+=M(s).charsLeftOver,g+=M(s).unusedTokens.length*10,M(s).score=g,v?g<r&&(r=g,o=s):(r==null||g<r||m)&&(r=g,o=s,m&&(v=!0));b(t,o||s)}function ka(t){if(!t._d){var s=fs(t._i),o=s.day===void 0?s.date:s.day;t._a=_([s.year,s.month,o,s.hour,s.minute,s.second,s.millisecond],function(r){return r&&parseInt(r,10)}),Ss(t)}}function wa(t){var s=new P(ks(Di(t)));return s._nextDay&&(s.add(1,\"d\"),s._nextDay=void 0),s}function Di(t){var s=t._i,o=t._f;return t._locale=t._locale||Ct(t._l),s===null||o===void 0&&s===\"\"?D({nullInput:!0}):(typeof s==\"string\"&&(t._i=s=t._locale.preparse(s)),T(s)?new P(ks(s)):(p(s)?t._d=s:a(o)?va(t):o?Ds(t):Sa(t),R(t)||(t._d=null),t))}function Sa(t){var s=t._i;u(s)?t._d=new Date(e.now()):p(s)?t._d=new Date(s.valueOf()):typeof s==\"string\"?ba(t):a(s)?(t._a=_(s.slice(0),function(o){return parseInt(o,10)}),Ss(t)):l(s)?ka(t):f(s)?t._d=new Date(s):e.createFromInputFallback(t)}function Oi(t,s,o,r,h){var g={};return(s===!0||s===!1)&&(r=s,s=void 0),(o===!0||o===!1)&&(r=o,o=void 0),(l(t)&&d(t)||a(t)&&t.length===0)&&(t=void 0),g._isAMomentObject=!0,g._useUTC=g._isUTC=h,g._l=o,g._i=t,g._f=s,g._strict=r,wa(g)}function j(t,s,o,r){return Oi(t,s,o,r,!1)}var Da=C(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var t=j.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:D()}),Oa=C(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var t=j.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:D()});function Pi(t,s){var o,r;if(s.length===1&&a(s[0])&&(s=s[0]),!s.length)return j();for(o=s[0],r=1;r<s.length;++r)(!s[r].isValid()||s[r][t](o))&&(o=s[r]);return o}function Pa(){var t=[].slice.call(arguments,0);return Pi(\"isBefore\",t)}function Ta(){var t=[].slice.call(arguments,0);return Pi(\"isAfter\",t)}var Ca=function(){return Date.now?Date.now():+new Date},ve=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Aa(t){var s,o=!1,r,h=ve.length;for(s in t)if(c(t,s)&&!(Z.call(ve,s)!==-1&&(t[s]==null||!isNaN(t[s]))))return!1;for(r=0;r<h;++r)if(t[ve[r]]){if(o)return!1;parseFloat(t[ve[r]])!==F(t[ve[r]])&&(o=!0)}return!0}function Ra(){return this._isValid}function La(){return vt(NaN)}function $e(t){var s=fs(t),o=s.year||0,r=s.quarter||0,h=s.month||0,g=s.week||s.isoWeek||0,m=s.day||0,v=s.hour||0,O=s.minute||0,E=s.second||0,ot=s.millisecond||0;this._isValid=Aa(s),this._milliseconds=+ot+E*1e3+O*6e4+v*1e3*60*60,this._days=+m+g*7,this._months=+h+r*3+o*12,this._data={},this._locale=Ct(),this._bubble()}function Ge(t){return t instanceof $e}function Os(t){return t<0?Math.round(-1*t)*-1:Math.round(t)}function Fa(t,s,o){var r=Math.min(t.length,s.length),h=Math.abs(t.length-s.length),g=0,m;for(m=0;m<r;m++)(o&&t[m]!==s[m]||!o&&F(t[m])!==F(s[m]))&&g++;return g+h}function Ti(t,s){S(t,0,0,function(){var o=this.utcOffset(),r=\"+\";return o<0&&(o=-o,r=\"-\"),r+nt(~~(o/60),2)+s+nt(~~o%60,2)})}Ti(\"Z\",\":\"),Ti(\"ZZ\",\"\"),k(\"Z\",ze),k(\"ZZ\",ze),H([\"Z\",\"ZZ\"],function(t,s,o){o._useUTC=!0,o._tzm=Ps(ze,t)});var Ea=/([\\+\\-]|\\d\\d)/gi;function Ps(t,s){var o=(s||\"\").match(t),r,h,g;return o===null?null:(r=o[o.length-1]||[],h=(r+\"\").match(Ea)||[\"-\",0,0],g=+(h[1]*60)+F(h[2]),g===0?0:h[0]===\"+\"?g:-g)}function Ts(t,s){var o,r;return s._isUTC?(o=s.clone(),r=(T(t)||p(t)?t.valueOf():j(t).valueOf())-o.valueOf(),o._d.setTime(o._d.valueOf()+r),e.updateOffset(o,!1),o):j(t).local()}function Cs(t){return-Math.round(t._d.getTimezoneOffset())}e.updateOffset=function(){};function Ia(t,s,o){var r=this._offset||0,h;if(!this.isValid())return t!=null?this:NaN;if(t!=null){if(typeof t==\"string\"){if(t=Ps(ze,t),t===null)return this}else Math.abs(t)<16&&!o&&(t=t*60);return!this._isUTC&&s&&(h=Cs(this)),this._offset=t,this._isUTC=!0,h!=null&&this.add(h,\"m\"),r!==t&&(!s||this._changeInProgress?Li(this,vt(t-r,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this}else return this._isUTC?r:Cs(this)}function Ya(t,s){return t!=null?(typeof t!=\"string\"&&(t=-t),this.utcOffset(t,s),this):-this.utcOffset()}function Wa(t){return this.utcOffset(0,t)}function Na(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Cs(this),\"m\")),this}function za(){if(this._tzm!=null)this.utcOffset(this._tzm,!1,!0);else if(typeof this._i==\"string\"){var t=Ps(no,this._i);t!=null?this.utcOffset(t):this.utcOffset(0,!0)}return this}function Ha(t){return this.isValid()?(t=t?j(t).utcOffset():0,(this.utcOffset()-t)%60===0):!1}function Va(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ba(){if(!u(this._isDSTShifted))return this._isDSTShifted;var t={},s;return X(t,this),t=Di(t),t._a?(s=t._isUTC?y(t._a):j(t._a),this._isDSTShifted=this.isValid()&&Fa(t._a,s.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function ja(){return this.isValid()?!this._isUTC:!1}function Ua(){return this.isValid()?this._isUTC:!1}function Ci(){return this.isValid()?this._isUTC&&this._offset===0:!1}var $a=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,Ga=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function vt(t,s){var o=t,r=null,h,g,m;return Ge(t)?o={ms:t._milliseconds,d:t._days,M:t._months}:f(t)||!isNaN(+t)?(o={},s?o[s]=+t:o.milliseconds=+t):(r=$a.exec(t))?(h=r[1]===\"-\"?-1:1,o={y:0,d:F(r[wt])*h,h:F(r[Q])*h,m:F(r[Mt])*h,s:F(r[Pt])*h,ms:F(Os(r[Zt]*1e3))*h}):(r=Ga.exec(t))?(h=r[1]===\"-\"?-1:1,o={y:Kt(r[2],h),M:Kt(r[3],h),w:Kt(r[4],h),d:Kt(r[5],h),h:Kt(r[6],h),m:Kt(r[7],h),s:Kt(r[8],h)}):o==null?o={}:typeof o==\"object\"&&(\"from\"in o||\"to\"in o)&&(m=Xa(j(o.from),j(o.to)),o={},o.ms=m.milliseconds,o.M=m.months),g=new $e(o),Ge(t)&&c(t,\"_locale\")&&(g._locale=t._locale),Ge(t)&&c(t,\"_isValid\")&&(g._isValid=t._isValid),g}vt.fn=$e.prototype,vt.invalid=La;function Kt(t,s){var o=t&&parseFloat(t.replace(\",\",\".\"));return(isNaN(o)?0:o)*s}function Ai(t,s){var o={};return o.months=s.month()-t.month()+(s.year()-t.year())*12,t.clone().add(o.months,\"M\").isAfter(s)&&--o.months,o.milliseconds=+s-+t.clone().add(o.months,\"M\"),o}function Xa(t,s){var o;return t.isValid()&&s.isValid()?(s=Ts(s,t),t.isBefore(s)?o=Ai(t,s):(o=Ai(s,t),o.milliseconds=-o.milliseconds,o.months=-o.months),o):{milliseconds:0,months:0}}function Ri(t,s){return function(o,r){var h,g;return r!==null&&!isNaN(+r)&&(G(s,\"moment().\"+s+\"(period, number) is deprecated. Please use moment().\"+s+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),g=o,o=r,r=g),h=vt(o,r),Li(this,h,t),this}}function Li(t,s,o,r){var h=s._milliseconds,g=Os(s._days),m=Os(s._months);t.isValid()&&(r=r??!0,m&&pi(t,_e(t,\"Month\")+m*o),g&&ui(t,\"Date\",_e(t,\"Date\")+g*o),h&&t._d.setTime(t._d.valueOf()+h*o),r&&e.updateOffset(t,g||m))}var qa=Ri(1,\"add\"),Za=Ri(-1,\"subtract\");function Fi(t){return typeof t==\"string\"||t instanceof String}function Ka(t){return T(t)||p(t)||Fi(t)||f(t)||Qa(t)||Ja(t)||t===null||t===void 0}function Ja(t){var s=l(t)&&!d(t),o=!1,r=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],h,g,m=r.length;for(h=0;h<m;h+=1)g=r[h],o=o||c(t,g);return s&&o}function Qa(t){var s=a(t),o=!1;return s&&(o=t.filter(function(r){return!f(r)&&Fi(t)}).length===0),s&&o}function tr(t){var s=l(t)&&!d(t),o=!1,r=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"],h,g;for(h=0;h<r.length;h+=1)g=r[h],o=o||c(t,g);return s&&o}function er(t,s){var o=t.diff(s,\"days\",!0);return o<-6?\"sameElse\":o<-1?\"lastWeek\":o<0?\"lastDay\":o<1?\"sameDay\":o<2?\"nextDay\":o<7?\"nextWeek\":\"sameElse\"}function sr(t,s){arguments.length===1&&(arguments[0]?Ka(arguments[0])?(t=arguments[0],s=void 0):tr(arguments[0])&&(s=arguments[0],t=void 0):(t=void 0,s=void 0));var o=t||j(),r=Ts(o,this).startOf(\"day\"),h=e.calendarFormat(this,r)||\"sameElse\",g=s&&(z(s[h])?s[h].call(this,o):s[h]);return this.format(g||this.localeData().calendar(h,this,j(o)))}function ir(){return new P(this)}function nr(t,s){var o=T(t)?t:j(t);return this.isValid()&&o.isValid()?(s=_t(s)||\"millisecond\",s===\"millisecond\"?this.valueOf()>o.valueOf():o.valueOf()<this.clone().startOf(s).valueOf()):!1}function or(t,s){var o=T(t)?t:j(t);return this.isValid()&&o.isValid()?(s=_t(s)||\"millisecond\",s===\"millisecond\"?this.valueOf()<o.valueOf():this.clone().endOf(s).valueOf()<o.valueOf()):!1}function ar(t,s,o,r){var h=T(t)?t:j(t),g=T(s)?s:j(s);return this.isValid()&&h.isValid()&&g.isValid()?(r=r||\"()\",(r[0]===\"(\"?this.isAfter(h,o):!this.isBefore(h,o))&&(r[1]===\")\"?this.isBefore(g,o):!this.isAfter(g,o))):!1}function rr(t,s){var o=T(t)?t:j(t),r;return this.isValid()&&o.isValid()?(s=_t(s)||\"millisecond\",s===\"millisecond\"?this.valueOf()===o.valueOf():(r=o.valueOf(),this.clone().startOf(s).valueOf()<=r&&r<=this.clone().endOf(s).valueOf())):!1}function lr(t,s){return this.isSame(t,s)||this.isAfter(t,s)}function cr(t,s){return this.isSame(t,s)||this.isBefore(t,s)}function hr(t,s,o){var r,h,g;if(!this.isValid())return NaN;if(r=Ts(t,this),!r.isValid())return NaN;switch(h=(r.utcOffset()-this.utcOffset())*6e4,s=_t(s),s){case\"year\":g=Xe(this,r)/12;break;case\"month\":g=Xe(this,r);break;case\"quarter\":g=Xe(this,r)/3;break;case\"second\":g=(this-r)/1e3;break;case\"minute\":g=(this-r)/6e4;break;case\"hour\":g=(this-r)/36e5;break;case\"day\":g=(this-r-h)/864e5;break;case\"week\":g=(this-r-h)/6048e5;break;default:g=this-r}return o?g:bt(g)}function Xe(t,s){if(t.date()<s.date())return-Xe(s,t);var o=(s.year()-t.year())*12+(s.month()-t.month()),r=t.clone().add(o,\"months\"),h,g;return s-r<0?(h=t.clone().add(o-1,\"months\"),g=(s-r)/(r-h)):(h=t.clone().add(o+1,\"months\"),g=(s-r)/(h-r)),-(o+g)||0}e.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",e.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";function dr(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function ur(t){if(!this.isValid())return null;var s=t!==!0,o=s?this.clone().utc():this;return o.year()<0||o.year()>9999?mt(o,s?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):z(Date.prototype.toISOString)?s?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace(\"Z\",mt(o,\"Z\")):mt(o,s?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")}function fr(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var t=\"moment\",s=\"\",o,r,h,g;return this.isLocal()||(t=this.utcOffset()===0?\"moment.utc\":\"moment.parseZone\",s=\"Z\"),o=\"[\"+t+'(\"]',r=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",h=\"-MM-DD[T]HH:mm:ss.SSS\",g=s+'[\")]',this.format(o+r+h+g)}function gr(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var s=mt(this,t);return this.localeData().postformat(s)}function pr(t,s){return this.isValid()&&(T(t)&&t.isValid()||j(t).isValid())?vt({to:this,from:t}).locale(this.locale()).humanize(!s):this.localeData().invalidDate()}function mr(t){return this.from(j(),t)}function _r(t,s){return this.isValid()&&(T(t)&&t.isValid()||j(t).isValid())?vt({from:this,to:t}).locale(this.locale()).humanize(!s):this.localeData().invalidDate()}function br(t){return this.to(j(),t)}function Ei(t){var s;return t===void 0?this._locale._abbr:(s=Ct(t),s!=null&&(this._locale=s),this)}var Ii=C(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(t){return t===void 0?this.localeData():this.locale(t)});function Yi(){return this._locale}var qe=1e3,re=60*qe,Ze=60*re,Wi=(365*400+97)*24*Ze;function le(t,s){return(t%s+s)%s}function Ni(t,s,o){return t<100&&t>=0?new Date(t+400,s,o)-Wi:new Date(t,s,o).valueOf()}function zi(t,s,o){return t<100&&t>=0?Date.UTC(t+400,s,o)-Wi:Date.UTC(t,s,o)}function yr(t){var s,o;if(t=_t(t),t===void 0||t===\"millisecond\"||!this.isValid())return this;switch(o=this._isUTC?zi:Ni,t){case\"year\":s=o(this.year(),0,1);break;case\"quarter\":s=o(this.year(),this.month()-this.month()%3,1);break;case\"month\":s=o(this.year(),this.month(),1);break;case\"week\":s=o(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":s=o(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":s=o(this.year(),this.month(),this.date());break;case\"hour\":s=this._d.valueOf(),s-=le(s+(this._isUTC?0:this.utcOffset()*re),Ze);break;case\"minute\":s=this._d.valueOf(),s-=le(s,re);break;case\"second\":s=this._d.valueOf(),s-=le(s,qe);break}return this._d.setTime(s),e.updateOffset(this,!0),this}function xr(t){var s,o;if(t=_t(t),t===void 0||t===\"millisecond\"||!this.isValid())return this;switch(o=this._isUTC?zi:Ni,t){case\"year\":s=o(this.year()+1,0,1)-1;break;case\"quarter\":s=o(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":s=o(this.year(),this.month()+1,1)-1;break;case\"week\":s=o(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":s=o(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":s=o(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":s=this._d.valueOf(),s+=Ze-le(s+(this._isUTC?0:this.utcOffset()*re),Ze)-1;break;case\"minute\":s=this._d.valueOf(),s+=re-le(s,re)-1;break;case\"second\":s=this._d.valueOf(),s+=qe-le(s,qe)-1;break}return this._d.setTime(s),e.updateOffset(this,!0),this}function Mr(){return this._d.valueOf()-(this._offset||0)*6e4}function vr(){return Math.floor(this.valueOf()/1e3)}function kr(){return new Date(this.valueOf())}function wr(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Sr(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Dr(){return this.isValid()?this.toISOString():null}function Or(){return R(this)}function Pr(){return b({},M(this))}function Tr(){return M(this).overflow}function Cr(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}S(\"N\",0,0,\"eraAbbr\"),S(\"NN\",0,0,\"eraAbbr\"),S(\"NNN\",0,0,\"eraAbbr\"),S(\"NNNN\",0,0,\"eraName\"),S(\"NNNNN\",0,0,\"eraNarrow\"),S(\"y\",[\"y\",1],\"yo\",\"eraYear\"),S(\"y\",[\"yy\",2],0,\"eraYear\"),S(\"y\",[\"yyy\",3],0,\"eraYear\"),S(\"y\",[\"yyyy\",4],0,\"eraYear\"),k(\"N\",As),k(\"NN\",As),k(\"NNN\",As),k(\"NNNN\",Hr),k(\"NNNNN\",Vr),H([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],function(t,s,o,r){var h=o._locale.erasParse(t,r,o._strict);h?M(o).era=h:M(o).invalidEra=t}),k(\"y\",ie),k(\"yy\",ie),k(\"yyy\",ie),k(\"yyyy\",ie),k(\"yo\",Br),H([\"y\",\"yy\",\"yyy\",\"yyyy\"],et),H([\"yo\"],function(t,s,o,r){var h;o._locale._eraYearOrdinalRegex&&(h=t.match(o._locale._eraYearOrdinalRegex)),o._locale.eraYearOrdinalParse?s[et]=o._locale.eraYearOrdinalParse(t,h):s[et]=parseInt(t,10)});function Ar(t,s){var o,r,h,g=this._eras||Ct(\"en\")._eras;for(o=0,r=g.length;o<r;++o)switch(typeof g[o].since===\"string\"&&(h=e(g[o].since).startOf(\"day\"),g[o].since=h.valueOf()),typeof g[o].until){case\"undefined\":g[o].until=1/0;break;case\"string\":h=e(g[o].until).startOf(\"day\").valueOf(),g[o].until=h.valueOf();break}return g}function Rr(t,s,o){var r,h,g=this.eras(),m,v,O;for(t=t.toUpperCase(),r=0,h=g.length;r<h;++r)if(m=g[r].name.toUpperCase(),v=g[r].abbr.toUpperCase(),O=g[r].narrow.toUpperCase(),o)switch(s){case\"N\":case\"NN\":case\"NNN\":if(v===t)return g[r];break;case\"NNNN\":if(m===t)return g[r];break;case\"NNNNN\":if(O===t)return g[r];break}else if([m,v,O].indexOf(t)>=0)return g[r]}function Lr(t,s){var o=t.since<=t.until?1:-1;return s===void 0?e(t.since).year():e(t.since).year()+(s-t.offset)*o}function Fr(){var t,s,o,r=this.localeData().eras();for(t=0,s=r.length;t<s;++t)if(o=this.clone().startOf(\"day\").valueOf(),r[t].since<=o&&o<=r[t].until||r[t].until<=o&&o<=r[t].since)return r[t].name;return\"\"}function Er(){var t,s,o,r=this.localeData().eras();for(t=0,s=r.length;t<s;++t)if(o=this.clone().startOf(\"day\").valueOf(),r[t].since<=o&&o<=r[t].until||r[t].until<=o&&o<=r[t].since)return r[t].narrow;return\"\"}function Ir(){var t,s,o,r=this.localeData().eras();for(t=0,s=r.length;t<s;++t)if(o=this.clone().startOf(\"day\").valueOf(),r[t].since<=o&&o<=r[t].until||r[t].until<=o&&o<=r[t].since)return r[t].abbr;return\"\"}function Yr(){var t,s,o,r,h=this.localeData().eras();for(t=0,s=h.length;t<s;++t)if(o=h[t].since<=h[t].until?1:-1,r=this.clone().startOf(\"day\").valueOf(),h[t].since<=r&&r<=h[t].until||h[t].until<=r&&r<=h[t].since)return(this.year()-e(h[t].since).year())*o+h[t].offset;return this.year()}function Wr(t){return c(this,\"_erasNameRegex\")||Rs.call(this),t?this._erasNameRegex:this._erasRegex}function Nr(t){return c(this,\"_erasAbbrRegex\")||Rs.call(this),t?this._erasAbbrRegex:this._erasRegex}function zr(t){return c(this,\"_erasNarrowRegex\")||Rs.call(this),t?this._erasNarrowRegex:this._erasRegex}function As(t,s){return s.erasAbbrRegex(t)}function Hr(t,s){return s.erasNameRegex(t)}function Vr(t,s){return s.erasNarrowRegex(t)}function Br(t,s){return s._eraYearOrdinalRegex||ie}function Rs(){var t=[],s=[],o=[],r=[],h,g,m,v,O,E=this.eras();for(h=0,g=E.length;h<g;++h)m=Dt(E[h].name),v=Dt(E[h].abbr),O=Dt(E[h].narrow),s.push(m),t.push(v),o.push(O),r.push(m),r.push(v),r.push(O);this._erasRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\")}S(0,[\"gg\",2],0,function(){return this.weekYear()%100}),S(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100});function Ke(t,s){S(0,[t,t.length],0,s)}Ke(\"gggg\",\"weekYear\"),Ke(\"ggggg\",\"weekYear\"),Ke(\"GGGG\",\"isoWeekYear\"),Ke(\"GGGGG\",\"isoWeekYear\"),k(\"G\",Ne),k(\"g\",Ne),k(\"GG\",B,gt),k(\"gg\",B,gt),k(\"GGGG\",ps,gs),k(\"gggg\",ps,gs),k(\"GGGGG\",We,Ie),k(\"ggggg\",We,Ie),pe([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(t,s,o,r){s[r.substr(0,2)]=F(t)}),pe([\"gg\",\"GG\"],function(t,s,o,r){s[r]=e.parseTwoDigitYear(t)});function jr(t){return Hi.call(this,t,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function Ur(t){return Hi.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function $r(){return Tt(this.year(),1,4)}function Gr(){return Tt(this.isoWeekYear(),1,4)}function Xr(){var t=this.localeData()._week;return Tt(this.year(),t.dow,t.doy)}function qr(){var t=this.localeData()._week;return Tt(this.weekYear(),t.dow,t.doy)}function Hi(t,s,o,r,h){var g;return t==null?ye(this,r,h).year:(g=Tt(t,r,h),s>g&&(s=g),Zr.call(this,t,s,o,r,h))}function Zr(t,s,o,r,h){var g=bi(t,s,o,r,h),m=be(g.year,0,g.dayOfYear);return this.year(m.getUTCFullYear()),this.month(m.getUTCMonth()),this.date(m.getUTCDate()),this}S(\"Q\",0,\"Qo\",\"quarter\"),k(\"Q\",ri),H(\"Q\",function(t,s){s[Ot]=(F(t)-1)*3});function Kr(t){return t==null?Math.ceil((this.month()+1)/3):this.month((t-1)*3+this.month()%3)}S(\"D\",[\"DD\",2],\"Do\",\"date\"),k(\"D\",B,ne),k(\"DD\",B,gt),k(\"Do\",function(t,s){return t?s._dayOfMonthOrdinalParse||s._ordinalParse:s._dayOfMonthOrdinalParseLenient}),H([\"D\",\"DD\"],wt),H(\"Do\",function(t,s){s[wt]=F(t.match(B)[0])});var Vi=oe(\"Date\",!0);S(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),k(\"DDD\",Ye),k(\"DDDD\",li),H([\"DDD\",\"DDDD\"],function(t,s,o){o._dayOfYear=F(t)});function Jr(t){var s=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return t==null?s:this.add(t-s,\"d\")}S(\"m\",[\"mm\",2],0,\"minute\"),k(\"m\",B,ms),k(\"mm\",B,gt),H([\"m\",\"mm\"],Mt);var Qr=oe(\"Minutes\",!1);S(\"s\",[\"ss\",2],0,\"second\"),k(\"s\",B,ms),k(\"ss\",B,gt),H([\"s\",\"ss\"],Pt);var tl=oe(\"Seconds\",!1);S(\"S\",0,0,function(){return~~(this.millisecond()/100)}),S(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),S(0,[\"SSS\",3],0,\"millisecond\"),S(0,[\"SSSS\",4],0,function(){return this.millisecond()*10}),S(0,[\"SSSSS\",5],0,function(){return this.millisecond()*100}),S(0,[\"SSSSSS\",6],0,function(){return this.millisecond()*1e3}),S(0,[\"SSSSSSS\",7],0,function(){return this.millisecond()*1e4}),S(0,[\"SSSSSSSS\",8],0,function(){return this.millisecond()*1e5}),S(0,[\"SSSSSSSSS\",9],0,function(){return this.millisecond()*1e6}),k(\"S\",Ye,ri),k(\"SS\",Ye,gt),k(\"SSS\",Ye,li);var Ht,Bi;for(Ht=\"SSSS\";Ht.length<=9;Ht+=\"S\")k(Ht,ie);function el(t,s){s[Zt]=F((\"0.\"+t)*1e3)}for(Ht=\"S\";Ht.length<=9;Ht+=\"S\")H(Ht,el);Bi=oe(\"Milliseconds\",!1),S(\"z\",0,0,\"zoneAbbr\"),S(\"zz\",0,0,\"zoneName\");function sl(){return this._isUTC?\"UTC\":\"\"}function il(){return this._isUTC?\"Coordinated Universal Time\":\"\"}var x=P.prototype;x.add=qa,x.calendar=sr,x.clone=ir,x.diff=hr,x.endOf=xr,x.format=gr,x.from=pr,x.fromNow=mr,x.to=_r,x.toNow=br,x.get=fo,x.invalidAt=Tr,x.isAfter=nr,x.isBefore=or,x.isBetween=ar,x.isSame=rr,x.isSameOrAfter=lr,x.isSameOrBefore=cr,x.isValid=Or,x.lang=Ii,x.locale=Ei,x.localeData=Yi,x.max=Oa,x.min=Da,x.parsingFlags=Pr,x.set=go,x.startOf=yr,x.subtract=Za,x.toArray=wr,x.toObject=Sr,x.toDate=kr,x.toISOString=ur,x.inspect=fr,typeof Symbol<\"u\"&&Symbol.for!=null&&(x[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),x.toJSON=Dr,x.toString=dr,x.unix=vr,x.valueOf=Mr,x.creationData=Cr,x.eraName=Fr,x.eraNarrow=Er,x.eraAbbr=Ir,x.eraYear=Yr,x.year=di,x.isLeapYear=uo,x.weekYear=jr,x.isoWeekYear=Ur,x.quarter=x.quarters=Kr,x.month=mi,x.daysInMonth=ko,x.week=x.weeks=Ao,x.isoWeek=x.isoWeeks=Ro,x.weeksInYear=Xr,x.weeksInWeekYear=qr,x.isoWeeksInYear=$r,x.isoWeeksInISOWeekYear=Gr,x.date=Vi,x.day=x.days=Uo,x.weekday=$o,x.isoWeekday=Go,x.dayOfYear=Jr,x.hour=x.hours=ta,x.minute=x.minutes=Qr,x.second=x.seconds=tl,x.millisecond=x.milliseconds=Bi,x.utcOffset=Ia,x.utc=Wa,x.local=Na,x.parseZone=za,x.hasAlignedHourOffset=Ha,x.isDST=Va,x.isLocal=ja,x.isUtcOffset=Ua,x.isUtc=Ci,x.isUTC=Ci,x.zoneAbbr=sl,x.zoneName=il,x.dates=C(\"dates accessor is deprecated. Use date instead.\",Vi),x.months=C(\"months accessor is deprecated. Use month instead\",mi),x.years=C(\"years accessor is deprecated. Use year instead\",di),x.zone=C(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",Ya),x.isDSTShifted=C(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",Ba);function nl(t){return j(t*1e3)}function ol(){return j.apply(null,arguments).parseZone()}function ji(t){return t}var W=pt.prototype;W.calendar=ct,W.longDateFormat=Gn,W.invalidDate=qn,W.ordinal=Jn,W.preparse=ji,W.postformat=ji,W.relativeTime=to,W.pastFuture=eo,W.set=q,W.eras=Ar,W.erasParse=Rr,W.erasConvertYear=Lr,W.erasAbbrRegex=Nr,W.erasNameRegex=Wr,W.erasNarrowRegex=zr,W.months=yo,W.monthsShort=xo,W.monthsParse=vo,W.monthsRegex=So,W.monthsShortRegex=wo,W.week=Oo,W.firstDayOfYear=Co,W.firstDayOfWeek=To,W.weekdays=zo,W.weekdaysMin=Vo,W.weekdaysShort=Ho,W.weekdaysParse=jo,W.weekdaysRegex=Xo,W.weekdaysShortRegex=qo,W.weekdaysMinRegex=Zo,W.isPM=Jo,W.meridiem=ea;function Je(t,s,o,r){var h=Ct(),g=y().set(r,s);return h[o](g,t)}function Ui(t,s,o){if(f(t)&&(s=t,t=void 0),t=t||\"\",s!=null)return Je(t,s,o,\"month\");var r,h=[];for(r=0;r<12;r++)h[r]=Je(t,r,o,\"month\");return h}function Ls(t,s,o,r){typeof t==\"boolean\"?(f(s)&&(o=s,s=void 0),s=s||\"\"):(s=t,o=s,t=!1,f(s)&&(o=s,s=void 0),s=s||\"\");var h=Ct(),g=t?h._week.dow:0,m,v=[];if(o!=null)return Je(s,(o+g)%7,r,\"day\");for(m=0;m<7;m++)v[m]=Je(s,(m+g)%7,r,\"day\");return v}function al(t,s){return Ui(t,s,\"months\")}function rl(t,s){return Ui(t,s,\"monthsShort\")}function ll(t,s,o){return Ls(t,s,o,\"weekdays\")}function cl(t,s,o){return Ls(t,s,o,\"weekdaysShort\")}function hl(t,s,o){return Ls(t,s,o,\"weekdaysMin\")}zt(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var s=t%10,o=F(t%100/10)===1?\"th\":s===1?\"st\":s===2?\"nd\":s===3?\"rd\":\"th\";return t+o}}),e.lang=C(\"moment.lang is deprecated. Use moment.locale instead.\",zt),e.langData=C(\"moment.langData is deprecated. Use moment.localeData instead.\",Ct);var At=Math.abs;function dl(){var t=this._data;return this._milliseconds=At(this._milliseconds),this._days=At(this._days),this._months=At(this._months),t.milliseconds=At(t.milliseconds),t.seconds=At(t.seconds),t.minutes=At(t.minutes),t.hours=At(t.hours),t.months=At(t.months),t.years=At(t.years),this}function $i(t,s,o,r){var h=vt(s,o);return t._milliseconds+=r*h._milliseconds,t._days+=r*h._days,t._months+=r*h._months,t._bubble()}function ul(t,s){return $i(this,t,s,1)}function fl(t,s){return $i(this,t,s,-1)}function Gi(t){return t<0?Math.floor(t):Math.ceil(t)}function gl(){var t=this._milliseconds,s=this._days,o=this._months,r=this._data,h,g,m,v,O;return t>=0&&s>=0&&o>=0||t<=0&&s<=0&&o<=0||(t+=Gi(Fs(o)+s)*864e5,s=0,o=0),r.milliseconds=t%1e3,h=bt(t/1e3),r.seconds=h%60,g=bt(h/60),r.minutes=g%60,m=bt(g/60),r.hours=m%24,s+=bt(m/24),O=bt(Xi(s)),o+=O,s-=Gi(Fs(O)),v=bt(o/12),o%=12,r.days=s,r.months=o,r.years=v,this}function Xi(t){return t*4800/146097}function Fs(t){return t*146097/4800}function pl(t){if(!this.isValid())return NaN;var s,o,r=this._milliseconds;if(t=_t(t),t===\"month\"||t===\"quarter\"||t===\"year\")switch(s=this._days+r/864e5,o=this._months+Xi(s),t){case\"month\":return o;case\"quarter\":return o/3;case\"year\":return o/12}else switch(s=this._days+Math.round(Fs(this._months)),t){case\"week\":return s/7+r/6048e5;case\"day\":return s+r/864e5;case\"hour\":return s*24+r/36e5;case\"minute\":return s*1440+r/6e4;case\"second\":return s*86400+r/1e3;case\"millisecond\":return Math.floor(s*864e5)+r;default:throw new Error(\"Unknown unit \"+t)}}function Rt(t){return function(){return this.as(t)}}var qi=Rt(\"ms\"),ml=Rt(\"s\"),_l=Rt(\"m\"),bl=Rt(\"h\"),yl=Rt(\"d\"),xl=Rt(\"w\"),Ml=Rt(\"M\"),vl=Rt(\"Q\"),kl=Rt(\"y\"),wl=qi;function Sl(){return vt(this)}function Dl(t){return t=_t(t),this.isValid()?this[t+\"s\"]():NaN}function Jt(t){return function(){return this.isValid()?this._data[t]:NaN}}var Ol=Jt(\"milliseconds\"),Pl=Jt(\"seconds\"),Tl=Jt(\"minutes\"),Cl=Jt(\"hours\"),Al=Jt(\"days\"),Rl=Jt(\"months\"),Ll=Jt(\"years\");function Fl(){return bt(this.days()/7)}var Lt=Math.round,ce={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function El(t,s,o,r,h){return h.relativeTime(s||1,!!o,t,r)}function Il(t,s,o,r){var h=vt(t).abs(),g=Lt(h.as(\"s\")),m=Lt(h.as(\"m\")),v=Lt(h.as(\"h\")),O=Lt(h.as(\"d\")),E=Lt(h.as(\"M\")),ot=Lt(h.as(\"w\")),Ft=Lt(h.as(\"y\")),Vt=g<=o.ss&&[\"s\",g]||g<o.s&&[\"ss\",g]||m<=1&&[\"m\"]||m<o.m&&[\"mm\",m]||v<=1&&[\"h\"]||v<o.h&&[\"hh\",v]||O<=1&&[\"d\"]||O<o.d&&[\"dd\",O];return o.w!=null&&(Vt=Vt||ot<=1&&[\"w\"]||ot<o.w&&[\"ww\",ot]),Vt=Vt||E<=1&&[\"M\"]||E<o.M&&[\"MM\",E]||Ft<=1&&[\"y\"]||[\"yy\",Ft],Vt[2]=s,Vt[3]=+t>0,Vt[4]=r,El.apply(null,Vt)}function Yl(t){return t===void 0?Lt:typeof t==\"function\"?(Lt=t,!0):!1}function Wl(t,s){return ce[t]===void 0?!1:s===void 0?ce[t]:(ce[t]=s,t===\"s\"&&(ce.ss=s-1),!0)}function Nl(t,s){if(!this.isValid())return this.localeData().invalidDate();var o=!1,r=ce,h,g;return typeof t==\"object\"&&(s=t,t=!1),typeof t==\"boolean\"&&(o=t),typeof s==\"object\"&&(r=Object.assign({},ce,s),s.s!=null&&s.ss==null&&(r.ss=s.s-1)),h=this.localeData(),g=Il(this,!o,r,h),o&&(g=h.pastFuture(+this,g)),h.postformat(g)}var Es=Math.abs;function he(t){return(t>0)-(t<0)||+t}function Qe(){if(!this.isValid())return this.localeData().invalidDate();var t=Es(this._milliseconds)/1e3,s=Es(this._days),o=Es(this._months),r,h,g,m,v=this.asSeconds(),O,E,ot,Ft;return v?(r=bt(t/60),h=bt(r/60),t%=60,r%=60,g=bt(o/12),o%=12,m=t?t.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",O=v<0?\"-\":\"\",E=he(this._months)!==he(v)?\"-\":\"\",ot=he(this._days)!==he(v)?\"-\":\"\",Ft=he(this._milliseconds)!==he(v)?\"-\":\"\",O+\"P\"+(g?E+g+\"Y\":\"\")+(o?E+o+\"M\":\"\")+(s?ot+s+\"D\":\"\")+(h||r||t?\"T\":\"\")+(h?Ft+h+\"H\":\"\")+(r?Ft+r+\"M\":\"\")+(t?Ft+m+\"S\":\"\")):\"P0D\"}var Y=$e.prototype;Y.isValid=Ra,Y.abs=dl,Y.add=ul,Y.subtract=fl,Y.as=pl,Y.asMilliseconds=qi,Y.asSeconds=ml,Y.asMinutes=_l,Y.asHours=bl,Y.asDays=yl,Y.asWeeks=xl,Y.asMonths=Ml,Y.asQuarters=vl,Y.asYears=kl,Y.valueOf=wl,Y._bubble=gl,Y.clone=Sl,Y.get=Dl,Y.milliseconds=Ol,Y.seconds=Pl,Y.minutes=Tl,Y.hours=Cl,Y.days=Al,Y.weeks=Fl,Y.months=Rl,Y.years=Ll,Y.humanize=Nl,Y.toISOString=Qe,Y.toString=Qe,Y.toJSON=Qe,Y.locale=Ei,Y.localeData=Yi,Y.toIsoString=C(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",Qe),Y.lang=Ii,S(\"X\",0,0,\"unix\"),S(\"x\",0,0,\"valueOf\"),k(\"x\",Ne),k(\"X\",oo),H(\"X\",function(t,s,o){o._d=new Date(parseFloat(t)*1e3)}),H(\"x\",function(t,s,o){o._d=new Date(F(t))});return e.version=\"2.30.1\",n(j),e.fn=x,e.min=Pa,e.max=Ta,e.now=Ca,e.utc=y,e.unix=nl,e.months=al,e.isDate=p,e.locale=zt,e.invalid=D,e.duration=vt,e.isMoment=T,e.weekdays=ll,e.parseZone=ol,e.localeData=Ct,e.isDuration=Ge,e.monthsShort=rl,e.weekdaysMin=hl,e.defineLocale=vs,e.updateLocale=oa,e.locales=aa,e.weekdaysShort=cl,e.normalizeUnits=_t,e.relativeTimeRounding=Yl,e.relativeTimeThreshold=Wl,e.calendarFormat=er,e.prototype=x,e.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},e}))});var kt=Gl(Ji());function we(i){return i+.5|0}var Bt=(i,e,n)=>Math.max(Math.min(i,n),e);function ke(i){return Bt(we(i*2.55),0,255)}function jt(i){return Bt(we(i*255),0,255)}function Et(i){return Bt(we(i/2.55)/100,0,1)}function Qi(i){return Bt(we(i*100),0,100)}var yt={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Ws=[...\"0123456789ABCDEF\"],Xl=i=>Ws[i&15],ql=i=>Ws[(i&240)>>4]+Ws[i&15],ts=i=>(i&240)>>4===(i&15),Zl=i=>ts(i.r)&&ts(i.g)&&ts(i.b)&&ts(i.a);function Kl(i){var e=i.length,n;return i[0]===\"#\"&&(e===4||e===5?n={r:255&yt[i[1]]*17,g:255&yt[i[2]]*17,b:255&yt[i[3]]*17,a:e===5?yt[i[4]]*17:255}:(e===7||e===9)&&(n={r:yt[i[1]]<<4|yt[i[2]],g:yt[i[3]]<<4|yt[i[4]],b:yt[i[5]]<<4|yt[i[6]],a:e===9?yt[i[7]]<<4|yt[i[8]]:255})),n}var Jl=(i,e)=>i<255?e(i):\"\";function Ql(i){var e=Zl(i)?Xl:ql;return i?\"#\"+e(i.r)+e(i.g)+e(i.b)+Jl(i.a,e):void 0}var tc=/^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;function nn(i,e,n){let a=e*Math.min(n,1-n),l=(c,d=(c+i/30)%12)=>n-a*Math.max(Math.min(d-3,9-d,1),-1);return[l(0),l(8),l(4)]}function ec(i,e,n){let a=(l,c=(l+i/60)%6)=>n-n*e*Math.max(Math.min(c,4-c,1),0);return[a(5),a(3),a(1)]}function sc(i,e,n){let a=nn(i,1,.5),l;for(e+n>1&&(l=1/(e+n),e*=l,n*=l),l=0;l<3;l++)a[l]*=1-e-n,a[l]+=e;return a}function ic(i,e,n,a,l){return i===l?(e-n)/a+(e<n?6:0):e===l?(n-i)/a+2:(i-e)/a+4}function Ns(i){let n=i.r/255,a=i.g/255,l=i.b/255,c=Math.max(n,a,l),d=Math.min(n,a,l),u=(c+d)/2,f,p,_;return c!==d&&(_=c-d,p=u>.5?_/(2-c-d):_/(c+d),f=ic(n,a,l,_,c),f=f*60+.5),[f|0,p||0,u]}function zs(i,e,n,a){return(Array.isArray(e)?i(e[0],e[1],e[2]):i(e,n,a)).map(jt)}function Hs(i,e,n){return zs(nn,i,e,n)}function nc(i,e,n){return zs(sc,i,e,n)}function oc(i,e,n){return zs(ec,i,e,n)}function on(i){return(i%360+360)%360}function ac(i){let e=tc.exec(i),n=255,a;if(!e)return;e[5]!==a&&(n=e[6]?ke(+e[5]):jt(+e[5]));let l=on(+e[2]),c=+e[3]/100,d=+e[4]/100;return e[1]===\"hwb\"?a=nc(l,c,d):e[1]===\"hsv\"?a=oc(l,c,d):a=Hs(l,c,d),{r:a[0],g:a[1],b:a[2],a:n}}function rc(i,e){var n=Ns(i);n[0]=on(n[0]+e),n=Hs(n),i.r=n[0],i.g=n[1],i.b=n[2]}function lc(i){if(!i)return;let e=Ns(i),n=e[0],a=Qi(e[1]),l=Qi(e[2]);return i.a<255?`hsla(${n}, ${a}%, ${l}%, ${Et(i.a)})`:`hsl(${n}, ${a}%, ${l}%)`}var tn={x:\"dark\",Z:\"light\",Y:\"re\",X:\"blu\",W:\"gr\",V:\"medium\",U:\"slate\",A:\"ee\",T:\"ol\",S:\"or\",B:\"ra\",C:\"lateg\",D:\"ights\",R:\"in\",Q:\"turquois\",E:\"hi\",P:\"ro\",O:\"al\",N:\"le\",M:\"de\",L:\"yello\",F:\"en\",K:\"ch\",G:\"arks\",H:\"ea\",I:\"ightg\",J:\"wh\"},en={OiceXe:\"f0f8ff\",antiquewEte:\"faebd7\",aqua:\"ffff\",aquamarRe:\"7fffd4\",azuY:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"0\",blanKedOmond:\"ffebcd\",Xe:\"ff\",XeviTet:\"8a2be2\",bPwn:\"a52a2a\",burlywood:\"deb887\",caMtXe:\"5f9ea0\",KartYuse:\"7fff00\",KocTate:\"d2691e\",cSO:\"ff7f50\",cSnflowerXe:\"6495ed\",cSnsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"ffff\",xXe:\"8b\",xcyan:\"8b8b\",xgTMnPd:\"b8860b\",xWay:\"a9a9a9\",xgYF:\"6400\",xgYy:\"a9a9a9\",xkhaki:\"bdb76b\",xmagFta:\"8b008b\",xTivegYF:\"556b2f\",xSange:\"ff8c00\",xScEd:\"9932cc\",xYd:\"8b0000\",xsOmon:\"e9967a\",xsHgYF:\"8fbc8f\",xUXe:\"483d8b\",xUWay:\"2f4f4f\",xUgYy:\"2f4f4f\",xQe:\"ced1\",xviTet:\"9400d3\",dAppRk:\"ff1493\",dApskyXe:\"bfff\",dimWay:\"696969\",dimgYy:\"696969\",dodgerXe:\"1e90ff\",fiYbrick:\"b22222\",flSOwEte:\"fffaf0\",foYstWAn:\"228b22\",fuKsia:\"ff00ff\",gaRsbSo:\"dcdcdc\",ghostwEte:\"f8f8ff\",gTd:\"ffd700\",gTMnPd:\"daa520\",Way:\"808080\",gYF:\"8000\",gYFLw:\"adff2f\",gYy:\"808080\",honeyMw:\"f0fff0\",hotpRk:\"ff69b4\",RdianYd:\"cd5c5c\",Rdigo:\"4b0082\",ivSy:\"fffff0\",khaki:\"f0e68c\",lavFMr:\"e6e6fa\",lavFMrXsh:\"fff0f5\",lawngYF:\"7cfc00\",NmoncEffon:\"fffacd\",ZXe:\"add8e6\",ZcSO:\"f08080\",Zcyan:\"e0ffff\",ZgTMnPdLw:\"fafad2\",ZWay:\"d3d3d3\",ZgYF:\"90ee90\",ZgYy:\"d3d3d3\",ZpRk:\"ffb6c1\",ZsOmon:\"ffa07a\",ZsHgYF:\"20b2aa\",ZskyXe:\"87cefa\",ZUWay:\"778899\",ZUgYy:\"778899\",ZstAlXe:\"b0c4de\",ZLw:\"ffffe0\",lime:\"ff00\",limegYF:\"32cd32\",lRF:\"faf0e6\",magFta:\"ff00ff\",maPon:\"800000\",VaquamarRe:\"66cdaa\",VXe:\"cd\",VScEd:\"ba55d3\",VpurpN:\"9370db\",VsHgYF:\"3cb371\",VUXe:\"7b68ee\",VsprRggYF:\"fa9a\",VQe:\"48d1cc\",VviTetYd:\"c71585\",midnightXe:\"191970\",mRtcYam:\"f5fffa\",mistyPse:\"ffe4e1\",moccasR:\"ffe4b5\",navajowEte:\"ffdead\",navy:\"80\",Tdlace:\"fdf5e6\",Tive:\"808000\",TivedBb:\"6b8e23\",Sange:\"ffa500\",SangeYd:\"ff4500\",ScEd:\"da70d6\",pOegTMnPd:\"eee8aa\",pOegYF:\"98fb98\",pOeQe:\"afeeee\",pOeviTetYd:\"db7093\",papayawEp:\"ffefd5\",pHKpuff:\"ffdab9\",peru:\"cd853f\",pRk:\"ffc0cb\",plum:\"dda0dd\",powMrXe:\"b0e0e6\",purpN:\"800080\",YbeccapurpN:\"663399\",Yd:\"ff0000\",Psybrown:\"bc8f8f\",PyOXe:\"4169e1\",saddNbPwn:\"8b4513\",sOmon:\"fa8072\",sandybPwn:\"f4a460\",sHgYF:\"2e8b57\",sHshell:\"fff5ee\",siFna:\"a0522d\",silver:\"c0c0c0\",skyXe:\"87ceeb\",UXe:\"6a5acd\",UWay:\"708090\",UgYy:\"708090\",snow:\"fffafa\",sprRggYF:\"ff7f\",stAlXe:\"4682b4\",tan:\"d2b48c\",teO:\"8080\",tEstN:\"d8bfd8\",tomato:\"ff6347\",Qe:\"40e0d0\",viTet:\"ee82ee\",JHt:\"f5deb3\",wEte:\"ffffff\",wEtesmoke:\"f5f5f5\",Lw:\"ffff00\",LwgYF:\"9acd32\"};function cc(){let i={},e=Object.keys(en),n=Object.keys(tn),a,l,c,d,u;for(a=0;a<e.length;a++){for(d=u=e[a],l=0;l<n.length;l++)c=n[l],u=u.replace(c,tn[c]);c=parseInt(en[d],16),i[u]=[c>>16&255,c>>8&255,c&255]}return i}var es;function hc(i){es||(es=cc(),es.transparent=[0,0,0,0]);let e=es[i.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:e.length===4?e[3]:255}}var dc=/^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;function uc(i){let e=dc.exec(i),n=255,a,l,c;if(e){if(e[7]!==a){let d=+e[7];n=e[8]?ke(d):Bt(d*255,0,255)}return a=+e[1],l=+e[3],c=+e[5],a=255&(e[2]?ke(a):Bt(a,0,255)),l=255&(e[4]?ke(l):Bt(l,0,255)),c=255&(e[6]?ke(c):Bt(c,0,255)),{r:a,g:l,b:c,a:n}}}function fc(i){return i&&(i.a<255?`rgba(${i.r}, ${i.g}, ${i.b}, ${Et(i.a)})`:`rgb(${i.r}, ${i.g}, ${i.b})`)}var Ys=i=>i<=.0031308?i*12.92:Math.pow(i,1/2.4)*1.055-.055,ue=i=>i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4);function gc(i,e,n){let a=ue(Et(i.r)),l=ue(Et(i.g)),c=ue(Et(i.b));return{r:jt(Ys(a+n*(ue(Et(e.r))-a))),g:jt(Ys(l+n*(ue(Et(e.g))-l))),b:jt(Ys(c+n*(ue(Et(e.b))-c))),a:i.a+n*(e.a-i.a)}}function ss(i,e,n){if(i){let a=Ns(i);a[e]=Math.max(0,Math.min(a[e]+a[e]*n,e===0?360:1)),a=Hs(a),i.r=a[0],i.g=a[1],i.b=a[2]}}function an(i,e){return i&&Object.assign(e||{},i)}function sn(i){var e={r:0,g:0,b:0,a:255};return Array.isArray(i)?i.length>=3&&(e={r:i[0],g:i[1],b:i[2],a:255},i.length>3&&(e.a=jt(i[3]))):(e=an(i,{r:0,g:0,b:0,a:1}),e.a=jt(e.a)),e}function pc(i){return i.charAt(0)===\"r\"?uc(i):ac(i)}var is=class i{constructor(e){if(e instanceof i)return e;let n=typeof e,a;n===\"object\"?a=sn(e):n===\"string\"&&(a=Kl(e)||hc(e)||pc(e)),this._rgb=a,this._valid=!!a}get valid(){return this._valid}get rgb(){var e=an(this._rgb);return e&&(e.a=Et(e.a)),e}set rgb(e){this._rgb=sn(e)}rgbString(){return this._valid?fc(this._rgb):void 0}hexString(){return this._valid?Ql(this._rgb):void 0}hslString(){return this._valid?lc(this._rgb):void 0}mix(e,n){if(e){let a=this.rgb,l=e.rgb,c,d=n===c?.5:n,u=2*d-1,f=a.a-l.a,p=((u*f===-1?u:(u+f)/(1+u*f))+1)/2;c=1-p,a.r=255&p*a.r+c*l.r+.5,a.g=255&p*a.g+c*l.g+.5,a.b=255&p*a.b+c*l.b+.5,a.a=d*a.a+(1-d)*l.a,this.rgb=a}return this}interpolate(e,n){return e&&(this._rgb=gc(this._rgb,e._rgb,n)),this}clone(){return new i(this.rgb)}alpha(e){return this._rgb.a=jt(e),this}clearer(e){let n=this._rgb;return n.a*=1-e,this}greyscale(){let e=this._rgb,n=we(e.r*.3+e.g*.59+e.b*.11);return e.r=e.g=e.b=n,this}opaquer(e){let n=this._rgb;return n.a*=1+e,this}negate(){let e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return ss(this._rgb,2,e),this}darken(e){return ss(this._rgb,2,-e),this}saturate(e){return ss(this._rgb,1,e),this}desaturate(e){return ss(this._rgb,1,-e),this}rotate(e){return rc(this._rgb,e),this}};function K(i){return i==null}function st(i){if(Array.isArray&&Array.isArray(i))return!0;let e=Object.prototype.toString.call(i);return e.slice(0,7)===\"[object\"&&e.slice(-6)===\"Array]\"}function tt(i){return i!==null&&Object.prototype.toString.call(i)===\"[object Object]\"}function it(i){return(typeof i==\"number\"||i instanceof Number)&&isFinite(+i)}function dt(i,e){return it(i)?i:e}function at(i,e){return typeof i>\"u\"?e:i}var ln=(i,e)=>typeof i==\"string\"&&i.endsWith(\"%\")?parseFloat(i)/100*e:+i;function rt(i,e,n){if(i&&typeof i.call==\"function\")return i.apply(n,e)}function cn(i,e,n,a){let l,c,d;if(st(i))if(c=i.length,a)for(l=c-1;l>=0;l--)e.call(n,i[l],l);else for(l=0;l<c;l++)e.call(n,i[l],l);else if(tt(i))for(d=Object.keys(i),c=d.length,l=0;l<c;l++)e.call(n,i[d[l]],d[l])}function ns(i){if(st(i))return i.map(ns);if(tt(i)){let e=Object.create(null),n=Object.keys(i),a=n.length,l=0;for(;l<a;++l)e[n[l]]=ns(i[n[l]]);return e}return i}function hn(i){return[\"__proto__\",\"prototype\",\"constructor\"].indexOf(i)===-1}function mc(i,e,n,a){if(!hn(i))return;let l=e[i],c=n[i];tt(l)&&tt(c)?De(l,c,a):e[i]=ns(c)}function De(i,e,n){let a=st(e)?e:[e],l=a.length;if(!tt(i))return i;n=n||{};let c=n.merger||mc,d;for(let u=0;u<l;++u){if(d=a[u],!tt(d))continue;let f=Object.keys(d);for(let p=0,_=f.length;p<_;++p)c(f[p],i,d,n)}return i}function Us(i,e){return De(i,e,{merger:_c})}function _c(i,e,n){if(!hn(i))return;let a=e[i],l=n[i];tt(a)&&tt(l)?Us(a,l):Object.prototype.hasOwnProperty.call(e,i)||(e[i]=ns(l))}var ht=Math.PI,Qt=2*ht,xh=Qt+ht,Mh=Number.POSITIVE_INFINITY,vh=ht/180,Ut=ht/2,kh=ht/4,wh=ht*2/3,It=Math.log10,$s=Math.sign;function Pe(i,e,n){return Math.abs(i-e)<n}function Gs(i){let e=Math.round(i);i=Pe(i,e,i/1e3)?e:i;let n=Math.pow(10,Math.floor(It(i))),a=i/n;return(a<=1?1:a<=2?2:a<=5?5:10)*n}function dn(i){let e=[],n=Math.sqrt(i),a;for(a=1;a<n;a++)i%a===0&&(e.push(a),e.push(i/a));return n===(n|0)&&e.push(n),e.sort((l,c)=>l-c).pop(),e}function bc(i){return typeof i==\"symbol\"||typeof i==\"object\"&&i!==null&&!(Symbol.toPrimitive in i||\"toString\"in i||\"valueOf\"in i)}function Te(i){return!bc(i)&&!isNaN(parseFloat(i))&&isFinite(i)}function un(i,e){let n=Math.round(i);return n-e<=i&&n+e>=i}function Xs(i,e,n){let a,l,c;for(a=0,l=i.length;a<l;a++)c=i[a][n],isNaN(c)||(e.min=Math.min(e.min,c),e.max=Math.max(e.max,c))}function Yt(i){return i*(ht/180)}function os(i){return i*(180/ht)}function qs(i){if(!it(i))return;let e=1,n=0;for(;Math.round(i*e)/e!==i;)e*=10,n++;return n}function as(i){return(i%Qt+Qt)%Qt}function $t(i,e,n){return Math.max(e,Math.min(n,i))}function fn(i){return $t(i,-32768,32767)}function Zs(i,e,n){n=n||(d=>i[d]<e);let a=i.length-1,l=0,c;for(;a-l>1;)c=l+a>>1,n(c)?l=c:a=c;return{lo:l,hi:a}}var Ks=(i,e,n,a)=>Zs(i,n,a?l=>{let c=i[l][e];return c<n||c===n&&i[l+1][e]===n}:l=>i[l][e]<n);function gn(i,e,n){let a=0,l=i.length;for(;a<l&&i[a]<e;)a++;for(;l>a&&i[l-1]>n;)l--;return a>0||l<i.length?i.slice(a,l):i}function pn(i){let e=new Set(i);return e.size===i.length?i:Array.from(e)}var yc=(function(){return typeof window>\"u\"?function(i){return i()}:window.requestAnimationFrame})();var mn=i=>i===\"start\"?\"left\":i===\"end\"?\"right\":\"center\",Js=(i,e,n)=>i===\"start\"?e:i===\"end\"?n:(e+n)/2;function xc(i){if(i&&typeof i==\"object\"){let e=i.toString();return e===\"[object CanvasPattern]\"||e===\"[object CanvasGradient]\"}return!1}function Vs(i){return xc(i)?i:new is(i).saturate(.5).darken(.1).hexString()}var Mc=[\"x\",\"y\",\"borderWidth\",\"radius\",\"tension\"],vc=[\"color\",\"borderColor\",\"backgroundColor\"];function kc(i){i.set(\"animation\",{delay:void 0,duration:1e3,easing:\"easeOutQuart\",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),i.describe(\"animation\",{_fallback:!1,_indexable:!1,_scriptable:e=>e!==\"onProgress\"&&e!==\"onComplete\"&&e!==\"fn\"}),i.set(\"animations\",{colors:{type:\"color\",properties:vc},numbers:{type:\"number\",properties:Mc}}),i.describe(\"animations\",{_fallback:\"animation\"}),i.set(\"transitions\",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:\"transparent\"},visible:{type:\"boolean\",duration:0}}},hide:{animations:{colors:{to:\"transparent\"},visible:{type:\"boolean\",easing:\"linear\",fn:e=>e|0}}}})}function wc(i){i.set(\"layout\",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var rn=new Map;function Sc(i,e){e=e||{};let n=i+JSON.stringify(e),a=rn.get(n);return a||(a=new Intl.NumberFormat(i,e),rn.set(n,a)),a}function rs(i,e,n){return Sc(e,n).format(i)}var _n={values(i){return st(i)?i:\"\"+i},numeric(i,e,n){if(i===0)return\"0\";let a=this.chart.options.locale,l,c=i;if(n.length>1){let p=Math.max(Math.abs(n[0].value),Math.abs(n[n.length-1].value));(p<1e-4||p>1e15)&&(l=\"scientific\"),c=Dc(i,n)}let d=It(Math.abs(c)),u=isNaN(d)?1:Math.max(Math.min(-1*Math.floor(d),20),0),f={notation:l,minimumFractionDigits:u,maximumFractionDigits:u};return Object.assign(f,this.options.ticks.format),rs(i,a,f)},logarithmic(i,e,n){if(i===0)return\"0\";let a=n[e].significand||i/Math.pow(10,Math.floor(It(i)));return[1,2,3,5,10,15].includes(a)||e>.8*n.length?_n.numeric.call(this,i,e,n):\"\"}};function Dc(i,e){let n=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;return Math.abs(n)>=1&&i!==Math.floor(i)&&(n=i-Math.floor(i)),n}var Ce={formatters:_n};function Oc(i){i.set(\"scale\",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:\"ticks\",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(e,n)=>n.lineWidth,tickColor:(e,n)=>n.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:\"\",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:\"\",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Ce.formatters.values,minor:{},major:{},align:\"center\",crossAlign:\"near\",showLabelBackdrop:!1,backdropColor:\"rgba(255, 255, 255, 0.75)\",backdropPadding:2}}),i.route(\"scale.ticks\",\"color\",\"\",\"color\"),i.route(\"scale.grid\",\"color\",\"\",\"borderColor\"),i.route(\"scale.border\",\"color\",\"\",\"borderColor\"),i.route(\"scale.title\",\"color\",\"\",\"color\"),i.describe(\"scale\",{_fallback:!1,_scriptable:e=>!e.startsWith(\"before\")&&!e.startsWith(\"after\")&&e!==\"callback\"&&e!==\"parser\",_indexable:e=>e!==\"borderDash\"&&e!==\"tickBorderDash\"&&e!==\"dash\"}),i.describe(\"scales\",{_fallback:\"scale\"}),i.describe(\"scale.ticks\",{_scriptable:e=>e!==\"backdropPadding\"&&e!==\"callback\",_indexable:e=>e!==\"backdropPadding\"})}var bn=Object.create(null),yn=Object.create(null);function Se(i,e){if(!e)return i;let n=e.split(\".\");for(let a=0,l=n.length;a<l;++a){let c=n[a];i=i[c]||(i[c]=Object.create(null))}return i}function Bs(i,e,n){return typeof e==\"string\"?De(Se(i,e),n):De(Se(i,\"\"),e)}var js=class{constructor(e,n){this.animation=void 0,this.backgroundColor=\"rgba(0,0,0,0.1)\",this.borderColor=\"rgba(0,0,0,0.1)\",this.color=\"#666\",this.datasets={},this.devicePixelRatio=a=>a.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[\"mousemove\",\"mouseout\",\"click\",\"touchstart\",\"touchmove\"],this.font={family:\"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",size:12,style:\"normal\",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(a,l)=>Vs(l.backgroundColor),this.hoverBorderColor=(a,l)=>Vs(l.borderColor),this.hoverColor=(a,l)=>Vs(l.color),this.indexAxis=\"x\",this.interaction={mode:\"nearest\",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(e),this.apply(n)}set(e,n){return Bs(this,e,n)}get(e){return Se(this,e)}describe(e,n){return Bs(yn,e,n)}override(e,n){return Bs(bn,e,n)}route(e,n,a,l){let c=Se(this,e),d=Se(this,a),u=\"_\"+n;Object.defineProperties(c,{[u]:{value:c[n],writable:!0},[n]:{enumerable:!0,get(){let f=this[u],p=d[l];return tt(f)?Object.assign({},p,f):at(f,p)},set(f){this[u]=f}}})}apply(e){e.forEach(n=>n(this))}},Qs=new js({_scriptable:i=>!i.startsWith(\"on\"),_indexable:i=>i!==\"events\",hover:{_fallback:\"interaction\"},interaction:{_scriptable:!1,_indexable:!1}},[kc,wc,Oc]);function Pc(i){return!i||K(i.size)||K(i.family)?null:(i.style?i.style+\" \":\"\")+(i.weight?i.weight+\" \":\"\")+i.size+\"px \"+i.family}function Oe(i,e,n,a,l){let c=e[l];return c||(c=e[l]=i.measureText(l).width,n.push(l)),c>a&&(a=c),a}function xn(i,e,n,a){a=a||{};let l=a.data=a.data||{},c=a.garbageCollect=a.garbageCollect||[];a.font!==e&&(l=a.data={},c=a.garbageCollect=[],a.font=e),i.save(),i.font=e;let d=0,u=n.length,f,p,_,b,y;for(f=0;f<u;f++)if(b=n[f],b!=null&&!st(b))d=Oe(i,l,c,d,b);else if(st(b))for(p=0,_=b.length;p<_;p++)y=b[p],y!=null&&!st(y)&&(d=Oe(i,l,c,d,y));i.restore();let w=c.length/2;if(w>n.length){for(f=0;f<w;f++)delete l[c[f]];c.splice(0,w)}return d}function Gt(i,e,n){let a=i.currentDevicePixelRatio,l=n!==0?Math.max(n/2,.5):0;return Math.round((e-l)*a)/a+l}function Ae(i,e,n){return n=n||.5,!e||i&&i.x>e.left-n&&i.x<e.right+n&&i.y>e.top-n&&i.y<e.bottom+n}function Mn(i,e){i.save(),i.beginPath(),i.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),i.clip()}function vn(i){i.restore()}function Tc(i,e){e.translation&&i.translate(e.translation[0],e.translation[1]),K(e.rotation)||i.rotate(e.rotation),e.color&&(i.fillStyle=e.color),e.textAlign&&(i.textAlign=e.textAlign),e.textBaseline&&(i.textBaseline=e.textBaseline)}function Cc(i,e,n,a,l){if(l.strikethrough||l.underline){let c=i.measureText(a),d=e-c.actualBoundingBoxLeft,u=e+c.actualBoundingBoxRight,f=n-c.actualBoundingBoxAscent,p=n+c.actualBoundingBoxDescent,_=l.strikethrough?(f+p)/2:p;i.strokeStyle=i.fillStyle,i.beginPath(),i.lineWidth=l.decorationWidth||2,i.moveTo(d,_),i.lineTo(u,_),i.stroke()}}function Ac(i,e){let n=i.fillStyle;i.fillStyle=e.color,i.fillRect(e.left,e.top,e.width,e.height),i.fillStyle=n}function Re(i,e,n,a,l,c={}){let d=st(e)?e:[e],u=c.strokeWidth>0&&c.strokeColor!==\"\",f,p;for(i.save(),i.font=l.string,Tc(i,c),f=0;f<d.length;++f)p=d[f],c.backdrop&&Ac(i,c.backdrop),u&&(c.strokeColor&&(i.strokeStyle=c.strokeColor),K(c.strokeWidth)||(i.lineWidth=c.strokeWidth),i.strokeText(p,n,a,c.maxWidth)),i.fillText(p,n,a,c.maxWidth),Cc(i,n,a,p,c),a+=Number(l.lineHeight);i.restore()}function kn(i,e){let{x:n,y:a,w:l,h:c,radius:d}=e;i.arc(n+d.topLeft,a+d.topLeft,d.topLeft,1.5*ht,ht,!0),i.lineTo(n,a+c-d.bottomLeft),i.arc(n+d.bottomLeft,a+c-d.bottomLeft,d.bottomLeft,ht,Ut,!0),i.lineTo(n+l-d.bottomRight,a+c),i.arc(n+l-d.bottomRight,a+c-d.bottomRight,d.bottomRight,Ut,0,!0),i.lineTo(n+l,a+d.topRight),i.arc(n+l-d.topRight,a+d.topRight,d.topRight,0,-Ut,!0),i.lineTo(n+d.topLeft,a)}var Rc=/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/,Lc=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function Fc(i,e){let n=(\"\"+i).match(Rc);if(!n||n[1]===\"normal\")return e*1.2;switch(i=+n[2],n[3]){case\"px\":return i;case\"%\":i/=100;break}return e*i}var Ec=i=>+i||0;function ti(i,e){let n={},a=tt(e),l=a?Object.keys(e):e,c=tt(i)?a?d=>at(i[d],i[e[d]]):d=>i[d]:()=>i;for(let d of l)n[d]=Ec(c(d));return n}function wn(i){return ti(i,{top:\"y\",right:\"x\",bottom:\"y\",left:\"x\"})}function Sn(i){return ti(i,[\"topLeft\",\"topRight\",\"bottomLeft\",\"bottomRight\"])}function Xt(i){let e=wn(i);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function te(i,e){i=i||{},e=e||Qs.font;let n=at(i.size,e.size);typeof n==\"string\"&&(n=parseInt(n,10));let a=at(i.style,e.style);a&&!(\"\"+a).match(Lc)&&(console.warn('Invalid font style specified: \"'+a+'\"'),a=void 0);let l={family:at(i.family,e.family),lineHeight:Fc(at(i.lineHeight,e.lineHeight),n),size:n,style:a,weight:at(i.weight,e.weight),string:\"\"};return l.string=Pc(l),l}function Dn(i,e,n){let{min:a,max:l}=i,c=ln(e,(l-a)/2),d=(u,f)=>n&&u===0?0:u+f;return{min:d(a,-Math.abs(c)),max:d(l,c)}}function ls(i,e){return Object.assign(Object.create(i),e)}var Sh=Number.EPSILON||1e-14;function On(){return typeof window<\"u\"&&typeof document<\"u\"}var Ic=(function(){let i=!1;try{let e={get passive(){return i=!0,!1}};On()&&(window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e))}catch{}return i})();function ee(){throw new Error(\"This method is not implemented: Check that a complete date adapter is provided.\")}var ei=class i{static override(e){Object.assign(i.prototype,e)}options;constructor(e){this.options=e||{}}init(){}formats(){return ee()}parse(){return ee()}format(){return ee()}add(){return ee()}diff(){return ee()}startOf(){return ee()}endOf(){return ee()}},ni={_date:ei};var si=class{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(e){let{x:n,y:a}=this.getProps([\"x\",\"y\"],e);return{x:n,y:a}}hasValue(){return Te(this.x)&&Te(this.y)}getProps(e,n){let a=this.$animations;if(!n||!a)return this;let l={};return e.forEach(c=>{l[c]=a[c]&&a[c].active()?a[c]._to:this[c]}),l}};function Yc(i,e){let n=i.options.ticks,a=Wc(i),l=Math.min(n.maxTicksLimit||a,a),c=n.major.enabled?zc(e):[],d=c.length,u=c[0],f=c[d-1],p=[];if(d>l)return Hc(e,p,c,d/l),p;let _=Nc(c,e,l);if(d>0){let b,y,w=d>1?Math.round((f-u)/(d-1)):null;for(cs(e,p,_,K(w)?0:u-w,u),b=0,y=d-1;b<y;b++)cs(e,p,_,c[b],c[b+1]);return cs(e,p,_,f,K(w)?e.length:f+w),p}return cs(e,p,_),p}function Wc(i){let e=i.options.offset,n=i._tickSize(),a=i._length/n+(e?0:1),l=i._maxLength/n;return Math.floor(Math.min(a,l))}function Nc(i,e,n){let a=Vc(i),l=e.length/n;if(!a)return Math.max(l,1);let c=dn(a);for(let d=0,u=c.length-1;d<u;d++){let f=c[d];if(f>l)return f}return Math.max(l,1)}function zc(i){let e=[],n,a;for(n=0,a=i.length;n<a;n++)i[n].major&&e.push(n);return e}function Hc(i,e,n,a){let l=0,c=n[0],d;for(a=Math.ceil(a),d=0;d<i.length;d++)d===c&&(e.push(i[d]),l++,c=n[l*a])}function cs(i,e,n,a,l){let c=at(a,0),d=Math.min(at(l,i.length),i.length),u=0,f,p,_;for(n=Math.ceil(n),l&&(f=l-a,n=f/Math.floor(f/n)),_=c;_<0;)u++,_=Math.round(c+u*n);for(p=Math.max(c,0);p<d;p++)p===_&&(e.push(i[p]),u++,_=Math.round(c+u*n))}function Vc(i){let e=i.length,n,a;if(e<2)return!1;for(a=i[0],n=1;n<e;++n)if(i[n]-i[n-1]!==a)return!1;return a}var Bc=i=>i===\"left\"?\"right\":i===\"right\"?\"left\":i,Pn=(i,e,n)=>e===\"top\"||e===\"left\"?i[e]+n:i[e]-n,Tn=(i,e)=>Math.min(e||i,i);function Cn(i,e){let n=[],a=i.length/e,l=i.length,c=0;for(;c<l;c+=a)n.push(i[Math.floor(c)]);return n}function jc(i,e,n){let a=i.ticks.length,l=Math.min(e,a-1),c=i._startPixel,d=i._endPixel,u=1e-6,f=i.getPixelForTick(l),p;if(!(n&&(a===1?p=Math.max(f-c,d-f):e===0?p=(i.getPixelForTick(1)-f)/2:p=(f-i.getPixelForTick(l-1))/2,f+=l<e?p:-p,f<c-u||f>d+u)))return f}function Uc(i,e){cn(i,n=>{let a=n.gc,l=a.length/2,c;if(l>e){for(c=0;c<l;++c)delete n.data[a[c]];a.splice(0,l)}})}function Le(i){return i.drawTicks?i.tickLength:0}function An(i,e){if(!i.display)return 0;let n=te(i.font,e),a=Xt(i.padding);return(st(i.text)?i.text.length:1)*n.lineHeight+a.height}function $c(i,e){return ls(i,{scale:e,type:\"scale\"})}function Gc(i,e,n){return ls(i,{tick:n,index:e,type:\"tick\"})}function Xc(i,e,n){let a=mn(i);return(n&&e!==\"right\"||!n&&e===\"right\")&&(a=Bc(a)),a}function qc(i,e,n,a){let{top:l,left:c,bottom:d,right:u,chart:f}=i,{chartArea:p,scales:_}=f,b=0,y,w,M,I=d-l,R=u-c;if(i.isHorizontal()){if(w=Js(a,c,u),tt(n)){let D=Object.keys(n)[0],A=n[D];M=_[D].getPixelForValue(A)+I-e}else n===\"center\"?M=(p.bottom+p.top)/2+I-e:M=Pn(i,n,e);y=u-c}else{if(tt(n)){let D=Object.keys(n)[0],A=n[D];w=_[D].getPixelForValue(A)-R+e}else n===\"center\"?w=(p.left+p.right)/2-R+e:w=Pn(i,n,e);M=Js(a,d,l),b=n===\"left\"?-Ut:Ut}return{titleX:w,titleY:M,maxWidth:y,rotation:b}}var Fe=class i extends si{constructor(e){super(),this.id=e.id,this.type=e.type,this.options=void 0,this.ctx=e.ctx,this.chart=e.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(e){this.options=e.setContext(this.getContext()),this.axis=e.axis,this._userMin=this.parse(e.min),this._userMax=this.parse(e.max),this._suggestedMin=this.parse(e.suggestedMin),this._suggestedMax=this.parse(e.suggestedMax)}parse(e,n){return e}getUserBounds(){let{_userMin:e,_userMax:n,_suggestedMin:a,_suggestedMax:l}=this;return e=dt(e,Number.POSITIVE_INFINITY),n=dt(n,Number.NEGATIVE_INFINITY),a=dt(a,Number.POSITIVE_INFINITY),l=dt(l,Number.NEGATIVE_INFINITY),{min:dt(e,a),max:dt(n,l),minDefined:it(e),maxDefined:it(n)}}getMinMax(e){let{min:n,max:a,minDefined:l,maxDefined:c}=this.getUserBounds(),d;if(l&&c)return{min:n,max:a};let u=this.getMatchingVisibleMetas();for(let f=0,p=u.length;f<p;++f)d=u[f].controller.getMinMax(this,e),l||(n=Math.min(n,d.min)),c||(a=Math.max(a,d.max));return n=c&&n>a?a:n,a=l&&n>a?n:a,{min:dt(n,dt(a,n)),max:dt(a,dt(n,a))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}getLabelItems(e=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(e))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){rt(this.options.beforeUpdate,[this])}update(e,n,a){let{beginAtZero:l,grace:c,ticks:d}=this.options,u=d.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=n,this._margins=a=Object.assign({left:0,right:0,top:0,bottom:0},a),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+a.left+a.right:this.height+a.top+a.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Dn(this,c,l),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let f=u<this.ticks.length;this._convertTicksToLabels(f?Cn(this.ticks,u):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),d.display&&(d.autoSkip||d.source===\"auto\")&&(this.ticks=Yc(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),f&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let e=this.options.reverse,n,a;this.isHorizontal()?(n=this.left,a=this.right):(n=this.top,a=this.bottom,e=!e),this._startPixel=n,this._endPixel=a,this._reversePixels=e,this._length=a-n,this._alignToPixels=this.options.alignToPixels}afterUpdate(){rt(this.options.afterUpdate,[this])}beforeSetDimensions(){rt(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){rt(this.options.afterSetDimensions,[this])}_callHooks(e){this.chart.notifyPlugins(e,this.getContext()),rt(this.options[e],[this])}beforeDataLimits(){this._callHooks(\"beforeDataLimits\")}determineDataLimits(){}afterDataLimits(){this._callHooks(\"afterDataLimits\")}beforeBuildTicks(){this._callHooks(\"beforeBuildTicks\")}buildTicks(){return[]}afterBuildTicks(){this._callHooks(\"afterBuildTicks\")}beforeTickToLabelConversion(){rt(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(e){let n=this.options.ticks,a,l,c;for(a=0,l=e.length;a<l;a++)c=e[a],c.label=rt(n.callback,[c.value,a,e],this)}afterTickToLabelConversion(){rt(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){rt(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){let e=this.options,n=e.ticks,a=Tn(this.ticks.length,e.ticks.maxTicksLimit),l=n.minRotation||0,c=n.maxRotation,d=l,u,f,p;if(!this._isVisible()||!n.display||l>=c||a<=1||!this.isHorizontal()){this.labelRotation=l;return}let _=this._getLabelSizes(),b=_.widest.width,y=_.highest.height,w=$t(this.chart.width-b,0,this.maxWidth);u=e.offset?this.maxWidth/a:w/(a-1),b+6>u&&(u=w/(a-(e.offset?.5:1)),f=this.maxHeight-Le(e.grid)-n.padding-An(e.title,this.chart.options.font),p=Math.sqrt(b*b+y*y),d=os(Math.min(Math.asin($t((_.highest.height+6)/u,-1,1)),Math.asin($t(f/p,-1,1))-Math.asin($t(y/p,-1,1)))),d=Math.max(l,Math.min(c,d))),this.labelRotation=d}afterCalculateLabelRotation(){rt(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){rt(this.options.beforeFit,[this])}fit(){let e={width:0,height:0},{chart:n,options:{ticks:a,title:l,grid:c}}=this,d=this._isVisible(),u=this.isHorizontal();if(d){let f=An(l,n.options.font);if(u?(e.width=this.maxWidth,e.height=Le(c)+f):(e.height=this.maxHeight,e.width=Le(c)+f),a.display&&this.ticks.length){let{first:p,last:_,widest:b,highest:y}=this._getLabelSizes(),w=a.padding*2,M=Yt(this.labelRotation),I=Math.cos(M),R=Math.sin(M);if(u){let D=a.mirror?0:R*b.width+I*y.height;e.height=Math.min(this.maxHeight,e.height+D+w)}else{let D=a.mirror?0:I*b.width+R*y.height;e.width=Math.min(this.maxWidth,e.width+D+w)}this._calculatePadding(p,_,R,I)}}this._handleMargins(),u?(this.width=this._length=n.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=n.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,n,a,l){let{ticks:{align:c,padding:d},position:u}=this.options,f=this.labelRotation!==0,p=u!==\"top\"&&this.axis===\"x\";if(this.isHorizontal()){let _=this.getPixelForTick(0)-this.left,b=this.right-this.getPixelForTick(this.ticks.length-1),y=0,w=0;f?p?(y=l*e.width,w=a*n.height):(y=a*e.height,w=l*n.width):c===\"start\"?w=n.width:c===\"end\"?y=e.width:c!==\"inner\"&&(y=e.width/2,w=n.width/2),this.paddingLeft=Math.max((y-_+d)*this.width/(this.width-_),0),this.paddingRight=Math.max((w-b+d)*this.width/(this.width-b),0)}else{let _=n.height/2,b=e.height/2;c===\"start\"?(_=0,b=e.height):c===\"end\"&&(_=n.height,b=0),this.paddingTop=_+d,this.paddingBottom=b+d}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){rt(this.options.afterFit,[this])}isHorizontal(){let{axis:e,position:n}=this.options;return n===\"top\"||n===\"bottom\"||e===\"x\"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){this.beforeTickToLabelConversion(),this.generateTickLabels(e);let n,a;for(n=0,a=e.length;n<a;n++)K(e[n].label)&&(e.splice(n,1),a--,n--);this.afterTickToLabelConversion()}_getLabelSizes(){let e=this._labelSizes;if(!e){let n=this.options.ticks.sampleSize,a=this.ticks;n<a.length&&(a=Cn(a,n)),this._labelSizes=e=this._computeLabelSizes(a,a.length,this.options.ticks.maxTicksLimit)}return e}_computeLabelSizes(e,n,a){let{ctx:l,_longestTextCache:c}=this,d=[],u=[],f=Math.floor(n/Tn(n,a)),p=0,_=0,b,y,w,M,I,R,D,A,$,X,P;for(b=0;b<n;b+=f){if(M=e[b].label,I=this._resolveTickFontOptions(b),l.font=R=I.string,D=c[R]=c[R]||{data:{},gc:[]},A=I.lineHeight,$=X=0,!K(M)&&!st(M))$=Oe(l,D.data,D.gc,$,M),X=A;else if(st(M))for(y=0,w=M.length;y<w;++y)P=M[y],!K(P)&&!st(P)&&($=Oe(l,D.data,D.gc,$,P),X+=A);d.push($),u.push(X),p=Math.max($,p),_=Math.max(X,_)}Uc(c,n);let T=d.indexOf(p),L=u.indexOf(_),C=N=>({width:d[N]||0,height:u[N]||0});return{first:C(0),last:C(n-1),widest:C(T),highest:C(L),widths:d,heights:u}}getLabelForValue(e){return e}getPixelForValue(e,n){return NaN}getValueForPixel(e){}getPixelForTick(e){let n=this.ticks;return e<0||e>n.length-1?null:this.getPixelForValue(n[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);let n=this._startPixel+e*this._length;return fn(this._alignToPixels?Gt(this.chart,n,0):n)}getDecimalForPixel(e){let n=(e-this._startPixel)/this._length;return this._reversePixels?1-n:n}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:e,max:n}=this;return e<0&&n<0?n:e>0&&n>0?e:0}getContext(e){let n=this.ticks||[];if(e>=0&&e<n.length){let a=n[e];return a.$context||(a.$context=Gc(this.getContext(),e,a))}return this.$context||(this.$context=$c(this.chart.getContext(),this))}_tickSize(){let e=this.options.ticks,n=Yt(this.labelRotation),a=Math.abs(Math.cos(n)),l=Math.abs(Math.sin(n)),c=this._getLabelSizes(),d=e.autoSkipPadding||0,u=c?c.widest.width+d:0,f=c?c.highest.height+d:0;return this.isHorizontal()?f*a>u*l?u/a:f/l:f*l<u*a?f/a:u/l}_isVisible(){let e=this.options.display;return e!==\"auto\"?!!e:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(e){let n=this.axis,a=this.chart,l=this.options,{grid:c,position:d,border:u}=l,f=c.offset,p=this.isHorizontal(),b=this.ticks.length+(f?1:0),y=Le(c),w=[],M=u.setContext(this.getContext()),I=M.display?M.width:0,R=I/2,D=function(J){return Gt(a,J,I)},A,$,X,P,T,L,C,N,G,z,q,lt;if(d===\"top\")A=D(this.bottom),L=this.bottom-y,N=A-R,z=D(e.top)+R,lt=e.bottom;else if(d===\"bottom\")A=D(this.top),z=e.top,lt=D(e.bottom)-R,L=A+R,N=this.top+y;else if(d===\"left\")A=D(this.right),T=this.right-y,C=A-R,G=D(e.left)+R,q=e.right;else if(d===\"right\")A=D(this.left),G=e.left,q=D(e.right)-R,T=A+R,C=this.left+y;else if(n===\"x\"){if(d===\"center\")A=D((e.top+e.bottom)/2+.5);else if(tt(d)){let J=Object.keys(d)[0],ct=d[J];A=D(this.chart.scales[J].getPixelForValue(ct))}z=e.top,lt=e.bottom,L=A+R,N=L+y}else if(n===\"y\"){if(d===\"center\")A=D((e.left+e.right)/2);else if(tt(d)){let J=Object.keys(d)[0],ct=d[J];A=D(this.chart.scales[J].getPixelForValue(ct))}T=A-R,C=T-y,G=e.left,q=e.right}let pt=at(l.ticks.maxTicksLimit,b),V=Math.max(1,Math.ceil(b/pt));for($=0;$<b;$+=V){let J=this.getContext($),ct=c.setContext(J),nt=u.setContext(J),Wt=ct.lineWidth,xt=ct.color,Nt=nt.dash||[],ft=nt.dashOffset,S=ct.tickWidth,St=ct.tickColor,qt=ct.tickBorderDash||[],mt=ct.tickBorderDashOffset;X=jc(this,$,f),X!==void 0&&(P=Gt(a,X,Wt),p?T=C=G=q=P:L=N=z=lt=P,w.push({tx1:T,ty1:L,tx2:C,ty2:N,x1:G,y1:z,x2:q,y2:lt,width:Wt,color:xt,borderDash:Nt,borderDashOffset:ft,tickWidth:S,tickColor:St,tickBorderDash:qt,tickBorderDashOffset:mt}))}return this._ticksLength=b,this._borderValue=A,w}_computeLabelItems(e){let n=this.axis,a=this.options,{position:l,ticks:c}=a,d=this.isHorizontal(),u=this.ticks,{align:f,crossAlign:p,padding:_,mirror:b}=c,y=Le(a.grid),w=y+_,M=b?-_:w,I=-Yt(this.labelRotation),R=[],D,A,$,X,P,T,L,C,N,G,z,q,lt=\"middle\";if(l===\"top\")T=this.bottom-M,L=this._getXAxisLabelAlignment();else if(l===\"bottom\")T=this.top+M,L=this._getXAxisLabelAlignment();else if(l===\"left\"){let V=this._getYAxisLabelAlignment(y);L=V.textAlign,P=V.x}else if(l===\"right\"){let V=this._getYAxisLabelAlignment(y);L=V.textAlign,P=V.x}else if(n===\"x\"){if(l===\"center\")T=(e.top+e.bottom)/2+w;else if(tt(l)){let V=Object.keys(l)[0],J=l[V];T=this.chart.scales[V].getPixelForValue(J)+w}L=this._getXAxisLabelAlignment()}else if(n===\"y\"){if(l===\"center\")P=(e.left+e.right)/2-w;else if(tt(l)){let V=Object.keys(l)[0],J=l[V];P=this.chart.scales[V].getPixelForValue(J)}L=this._getYAxisLabelAlignment(y).textAlign}n===\"y\"&&(f===\"start\"?lt=\"top\":f===\"end\"&&(lt=\"bottom\"));let pt=this._getLabelSizes();for(D=0,A=u.length;D<A;++D){$=u[D],X=$.label;let V=c.setContext(this.getContext(D));C=this.getPixelForTick(D)+c.labelOffset,N=this._resolveTickFontOptions(D),G=N.lineHeight,z=st(X)?X.length:1;let J=z/2,ct=V.color,nt=V.textStrokeColor,Wt=V.textStrokeWidth,xt=L;d?(P=C,L===\"inner\"&&(D===A-1?xt=this.options.reverse?\"left\":\"right\":D===0?xt=this.options.reverse?\"right\":\"left\":xt=\"center\"),l===\"top\"?p===\"near\"||I!==0?q=-z*G+G/2:p===\"center\"?q=-pt.highest.height/2-J*G+G:q=-pt.highest.height+G/2:p===\"near\"||I!==0?q=G/2:p===\"center\"?q=pt.highest.height/2-J*G:q=pt.highest.height-z*G,b&&(q*=-1),I!==0&&!V.showLabelBackdrop&&(P+=G/2*Math.sin(I))):(T=C,q=(1-z)*G/2);let Nt;if(V.showLabelBackdrop){let ft=Xt(V.backdropPadding),S=pt.heights[D],St=pt.widths[D],qt=q-ft.top,mt=0-ft.left;switch(lt){case\"middle\":qt-=S/2;break;case\"bottom\":qt-=S;break}switch(L){case\"center\":mt-=St/2;break;case\"right\":mt-=St;break;case\"inner\":D===A-1?mt-=St:D>0&&(mt-=St/2);break}Nt={left:mt,top:qt,width:St+ft.width,height:S+ft.height,color:V.backdropColor}}R.push({label:X,font:N,textOffset:q,options:{rotation:I,color:ct,strokeColor:nt,strokeWidth:Wt,textAlign:xt,textBaseline:lt,translation:[P,T],backdrop:Nt}})}return R}_getXAxisLabelAlignment(){let{position:e,ticks:n}=this.options;if(-Yt(this.labelRotation))return e===\"top\"?\"left\":\"right\";let l=\"center\";return n.align===\"start\"?l=\"left\":n.align===\"end\"?l=\"right\":n.align===\"inner\"&&(l=\"inner\"),l}_getYAxisLabelAlignment(e){let{position:n,ticks:{crossAlign:a,mirror:l,padding:c}}=this.options,d=this._getLabelSizes(),u=e+c,f=d.widest.width,p,_;return n===\"left\"?l?(_=this.right+c,a===\"near\"?p=\"left\":a===\"center\"?(p=\"center\",_+=f/2):(p=\"right\",_+=f)):(_=this.right-u,a===\"near\"?p=\"right\":a===\"center\"?(p=\"center\",_-=f/2):(p=\"left\",_=this.left)):n===\"right\"?l?(_=this.left+c,a===\"near\"?p=\"right\":a===\"center\"?(p=\"center\",_-=f/2):(p=\"left\",_-=f)):(_=this.left+u,a===\"near\"?p=\"left\":a===\"center\"?(p=\"center\",_+=f/2):(p=\"right\",_=this.right)):p=\"right\",{textAlign:p,x:_}}_computeLabelArea(){if(this.options.ticks.mirror)return;let e=this.chart,n=this.options.position;if(n===\"left\"||n===\"right\")return{top:0,left:this.left,bottom:e.height,right:this.right};if(n===\"top\"||n===\"bottom\")return{top:this.top,left:0,bottom:this.bottom,right:e.width}}drawBackground(){let{ctx:e,options:{backgroundColor:n},left:a,top:l,width:c,height:d}=this;n&&(e.save(),e.fillStyle=n,e.fillRect(a,l,c,d),e.restore())}getLineWidthForValue(e){let n=this.options.grid;if(!this._isVisible()||!n.display)return 0;let l=this.ticks.findIndex(c=>c.value===e);return l>=0?n.setContext(this.getContext(l)).lineWidth:0}drawGrid(e){let n=this.options.grid,a=this.ctx,l=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(e)),c,d,u=(f,p,_)=>{!_.width||!_.color||(a.save(),a.lineWidth=_.width,a.strokeStyle=_.color,a.setLineDash(_.borderDash||[]),a.lineDashOffset=_.borderDashOffset,a.beginPath(),a.moveTo(f.x,f.y),a.lineTo(p.x,p.y),a.stroke(),a.restore())};if(n.display)for(c=0,d=l.length;c<d;++c){let f=l[c];n.drawOnChartArea&&u({x:f.x1,y:f.y1},{x:f.x2,y:f.y2},f),n.drawTicks&&u({x:f.tx1,y:f.ty1},{x:f.tx2,y:f.ty2},{color:f.tickColor,width:f.tickWidth,borderDash:f.tickBorderDash,borderDashOffset:f.tickBorderDashOffset})}}drawBorder(){let{chart:e,ctx:n,options:{border:a,grid:l}}=this,c=a.setContext(this.getContext()),d=a.display?c.width:0;if(!d)return;let u=l.setContext(this.getContext(0)).lineWidth,f=this._borderValue,p,_,b,y;this.isHorizontal()?(p=Gt(e,this.left,d)-d/2,_=Gt(e,this.right,u)+u/2,b=y=f):(b=Gt(e,this.top,d)-d/2,y=Gt(e,this.bottom,u)+u/2,p=_=f),n.save(),n.lineWidth=c.width,n.strokeStyle=c.color,n.beginPath(),n.moveTo(p,b),n.lineTo(_,y),n.stroke(),n.restore()}drawLabels(e){if(!this.options.ticks.display)return;let a=this.ctx,l=this._computeLabelArea();l&&Mn(a,l);let c=this.getLabelItems(e);for(let d of c){let u=d.options,f=d.font,p=d.label,_=d.textOffset;Re(a,p,0,_,f,u)}l&&vn(a)}drawTitle(){let{ctx:e,options:{position:n,title:a,reverse:l}}=this;if(!a.display)return;let c=te(a.font),d=Xt(a.padding),u=a.align,f=c.lineHeight/2;n===\"bottom\"||n===\"center\"||tt(n)?(f+=d.bottom,st(a.text)&&(f+=c.lineHeight*(a.text.length-1))):f+=d.top;let{titleX:p,titleY:_,maxWidth:b,rotation:y}=qc(this,f,n,u);Re(e,a.text,0,0,c,{color:a.color,maxWidth:b,rotation:y,textAlign:Xc(u,n,l),textBaseline:\"middle\",translation:[p,_]})}draw(e){this._isVisible()&&(this.drawBackground(),this.drawGrid(e),this.drawBorder(),this.drawTitle(),this.drawLabels(e))}_layers(){let e=this.options,n=e.ticks&&e.ticks.z||0,a=at(e.grid&&e.grid.z,-1),l=at(e.border&&e.border.z,0);return!this._isVisible()||this.draw!==i.prototype.draw?[{z:n,draw:c=>{this.draw(c)}}]:[{z:a,draw:c=>{this.drawBackground(),this.drawGrid(c),this.drawTitle()}},{z:l,draw:()=>{this.drawBorder()}},{z:n,draw:c=>{this.drawLabels(c)}}]}getMatchingVisibleMetas(e){let n=this.chart.getSortedVisibleDatasetMetas(),a=this.axis+\"AxisID\",l=[],c,d;for(c=0,d=n.length;c<d;++c){let u=n[c];u[a]===this.id&&(!e||u.type===e)&&l.push(u)}return l}_resolveTickFontOptions(e){let n=this.options.ticks.setContext(this.getContext(e));return te(n.font)}_maxDigits(){let e=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/e}};function Zc(i,e){let n=[],{bounds:l,step:c,min:d,max:u,precision:f,count:p,maxTicks:_,maxDigits:b,includeBounds:y}=i,w=c||1,M=_-1,{min:I,max:R}=e,D=!K(d),A=!K(u),$=!K(p),X=(R-I)/(b+1),P=Gs((R-I)/M/w)*w,T,L,C,N;if(P<1e-14&&!D&&!A)return[{value:I},{value:R}];N=Math.ceil(R/P)-Math.floor(I/P),N>M&&(P=Gs(N*P/M/w)*w),K(f)||(T=Math.pow(10,f),P=Math.ceil(P*T)/T),l===\"ticks\"?(L=Math.floor(I/P)*P,C=Math.ceil(R/P)*P):(L=I,C=R),D&&A&&c&&un((u-d)/c,P/1e3)?(N=Math.round(Math.min((u-d)/P,_)),P=(u-d)/N,L=d,C=u):$?(L=D?d:L,C=A?u:C,N=p-1,P=(C-L)/N):(N=(C-L)/P,Pe(N,Math.round(N),P/1e3)?N=Math.round(N):N=Math.ceil(N));let G=Math.max(qs(P),qs(L));T=Math.pow(10,K(f)?G:f),L=Math.round(L*T)/T,C=Math.round(C*T)/T;let z=0;for(D&&(y&&L!==d?(n.push({value:d}),L<d&&z++,Pe(Math.round((L+z*P)*T)/T,d,Rn(d,X,i))&&z++):L<d&&z++);z<N;++z){let q=Math.round((L+z*P)*T)/T;if(A&&q>u)break;n.push({value:q})}return A&&y&&C!==u?n.length&&Pe(n[n.length-1].value,u,Rn(u,X,i))?n[n.length-1].value=u:n.push({value:u}):(!A||C===u)&&n.push({value:C}),n}function Rn(i,e,{horizontal:n,minRotation:a}){let l=Yt(a),c=(n?Math.sin(l):Math.cos(l))||.001,d=.75*e*(\"\"+i).length;return Math.min(e/c,d)}var fe=class extends Fe{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,n){return K(e)||(typeof e==\"number\"||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){let{beginAtZero:e}=this.options,{minDefined:n,maxDefined:a}=this.getUserBounds(),{min:l,max:c}=this,d=f=>l=n?l:f,u=f=>c=a?c:f;if(e){let f=$s(l),p=$s(c);f<0&&p<0?u(0):f>0&&p>0&&d(0)}if(l===c){let f=c===0?1:Math.abs(c*.05);u(c+f),e||d(l-f)}this.min=l,this.max=c}getTickLimit(){let e=this.options.ticks,{maxTicksLimit:n,stepSize:a}=e,l;return a?(l=Math.ceil(this.max/a)-Math.floor(this.min/a)+1,l>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${a} would result generating up to ${l} ticks. Limiting to 1000.`),l=1e3)):(l=this.computeTickLimit(),n=n||11),n&&(l=Math.min(n,l)),l}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let e=this.options,n=e.ticks,a=this.getTickLimit();a=Math.max(2,a);let l={maxTicks:a,bounds:e.bounds,min:e.min,max:e.max,precision:n.precision,step:n.stepSize,count:n.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:n.minRotation||0,includeBounds:n.includeBounds!==!1},c=this._range||this,d=Zc(l,c);return e.bounds===\"ticks\"&&Xs(d,this,\"value\"),e.reverse?(d.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),d}configure(){let e=this.ticks,n=this.min,a=this.max;if(super.configure(),this.options.offset&&e.length){let l=(a-n)/Math.max(e.length-1,1)/2;n-=l,a+=l}this._startValue=n,this._endValue=a,this._valueRange=a-n}getLabelForValue(e){return rs(e,this.chart.options.locale,this.options.ticks.format)}},Ln=class extends fe{static id=\"linear\";static defaults={ticks:{callback:Ce.formatters.numeric}};determineDataLimits(){let{min:e,max:n}=this.getMinMax(!0);this.min=it(e)?e:0,this.max=it(n)?n:1,this.handleTickRangeOptions()}computeTickLimit(){let e=this.isHorizontal(),n=e?this.width:this.height,a=Yt(this.options.ticks.minRotation),l=(e?Math.sin(a):Math.cos(a))||.001,c=this._resolveTickFontOptions(0);return Math.ceil(n/Math.min(40,c.lineHeight/l))}getPixelForValue(e){return e===null?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}},Ee=i=>Math.floor(It(i)),se=(i,e)=>Math.pow(10,Ee(i)+e);function Fn(i){return i/Math.pow(10,Ee(i))===1}function En(i,e,n){let a=Math.pow(10,n),l=Math.floor(i/a);return Math.ceil(e/a)-l}function Kc(i,e){let n=e-i,a=Ee(n);for(;En(i,e,a)>10;)a++;for(;En(i,e,a)<10;)a--;return Math.min(a,Ee(i))}function Jc(i,{min:e,max:n}){e=dt(i.min,e);let a=[],l=Ee(e),c=Kc(e,n),d=c<0?Math.pow(10,Math.abs(c)):1,u=Math.pow(10,c),f=l>c?Math.pow(10,l):0,p=Math.round((e-f)*d)/d,_=Math.floor((e-f)/u/10)*u*10,b=Math.floor((p-_)/Math.pow(10,c)),y=dt(i.min,Math.round((f+_+b*Math.pow(10,c))*d)/d);for(;y<n;)a.push({value:y,major:Fn(y),significand:b}),b>=10?b=b<15?15:20:b++,b>=20&&(c++,b=2,d=c>=0?1:d),y=Math.round((f+_+b*Math.pow(10,c))*d)/d;let w=dt(i.max,y);return a.push({value:w,major:Fn(w),significand:b}),a}var In=class extends Fe{static id=\"logarithmic\";static defaults={ticks:{callback:Ce.formatters.logarithmic,major:{enabled:!0}}};constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,n){let a=fe.prototype.parse.apply(this,[e,n]);if(a===0){this._zero=!0;return}return it(a)&&a>0?a:null}determineDataLimits(){let{min:e,max:n}=this.getMinMax(!0);this.min=it(e)?Math.max(0,e):null,this.max=it(n)?Math.max(0,n):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!it(this._userMin)&&(this.min=e===se(this.min,0)?se(this.min,-1):se(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:e,maxDefined:n}=this.getUserBounds(),a=this.min,l=this.max,c=u=>a=e?a:u,d=u=>l=n?l:u;a===l&&(a<=0?(c(1),d(10)):(c(se(a,-1)),d(se(l,1)))),a<=0&&c(se(l,-1)),l<=0&&d(se(a,1)),this.min=a,this.max=l}buildTicks(){let e=this.options,n={min:this._userMin,max:this._userMax},a=Jc(n,this);return e.bounds===\"ticks\"&&Xs(a,this,\"value\"),e.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}getLabelForValue(e){return e===void 0?\"0\":rs(e,this.chart.options.locale,this.options.ticks.format)}configure(){let e=this.min;super.configure(),this._startValue=It(e),this._valueRange=It(this.max)-It(e)}getPixelForValue(e){return(e===void 0||e===0)&&(e=this.min),e===null||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(It(e)-this._startValue)/this._valueRange)}getValueForPixel(e){let n=this.getDecimalForPixel(e);return Math.pow(10,this._startValue+n*this._valueRange)}};function ii(i){let e=i.ticks;if(e.display&&i.display){let n=Xt(e.backdropPadding);return at(e.font&&e.font.size,Qs.font.size)+n.height}return 0}function Qc(i,e,n){return n=st(n)?n:[n],{w:xn(i,e.string,n),h:n.length*e.lineHeight}}function Yn(i,e,n,a,l){return i===a||i===l?{start:e-n/2,end:e+n/2}:i<a||i>l?{start:e-n,end:e}:{start:e,end:e+n}}function th(i){let e={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},n=Object.assign({},e),a=[],l=[],c=i._pointLabels.length,d=i.options.pointLabels,u=d.centerPointLabels?ht/c:0;for(let f=0;f<c;f++){let p=d.setContext(i.getPointLabelContext(f));l[f]=p.padding;let _=i.getPointPosition(f,i.drawingArea+l[f],u),b=te(p.font),y=Qc(i.ctx,b,i._pointLabels[f]);a[f]=y;let w=as(i.getIndexAngle(f)+u),M=Math.round(os(w)),I=Yn(M,_.x,y.w,0,180),R=Yn(M,_.y,y.h,90,270);eh(n,e,w,I,R)}i.setCenterPoint(e.l-n.l,n.r-e.r,e.t-n.t,n.b-e.b),i._pointLabelItems=nh(i,a,l)}function eh(i,e,n,a,l){let c=Math.abs(Math.sin(n)),d=Math.abs(Math.cos(n)),u=0,f=0;a.start<e.l?(u=(e.l-a.start)/c,i.l=Math.min(i.l,e.l-u)):a.end>e.r&&(u=(a.end-e.r)/c,i.r=Math.max(i.r,e.r+u)),l.start<e.t?(f=(e.t-l.start)/d,i.t=Math.min(i.t,e.t-f)):l.end>e.b&&(f=(l.end-e.b)/d,i.b=Math.max(i.b,e.b+f))}function sh(i,e,n){let a=i.drawingArea,{extra:l,additionalAngle:c,padding:d,size:u}=n,f=i.getPointPosition(e,a+l+d,c),p=Math.round(os(as(f.angle+Ut))),_=rh(f.y,u.h,p),b=oh(p),y=ah(f.x,u.w,b);return{visible:!0,x:f.x,y:_,textAlign:b,left:y,top:_,right:y+u.w,bottom:_+u.h}}function ih(i,e){if(!e)return!0;let{left:n,top:a,right:l,bottom:c}=i;return!(Ae({x:n,y:a},e)||Ae({x:n,y:c},e)||Ae({x:l,y:a},e)||Ae({x:l,y:c},e))}function nh(i,e,n){let a=[],l=i._pointLabels.length,c=i.options,{centerPointLabels:d,display:u}=c.pointLabels,f={extra:ii(c)/2,additionalAngle:d?ht/l:0},p;for(let _=0;_<l;_++){f.padding=n[_],f.size=e[_];let b=sh(i,_,f);a.push(b),u===\"auto\"&&(b.visible=ih(b,p),b.visible&&(p=b))}return a}function oh(i){return i===0||i===180?\"center\":i<180?\"left\":\"right\"}function ah(i,e,n){return n===\"right\"?i-=e:n===\"center\"&&(i-=e/2),i}function rh(i,e,n){return n===90||n===270?i-=e/2:(n>270||n<90)&&(i-=e),i}function lh(i,e,n){let{left:a,top:l,right:c,bottom:d}=n,{backdropColor:u}=e;if(!K(u)){let f=Sn(e.borderRadius),p=Xt(e.backdropPadding);i.fillStyle=u;let _=a-p.left,b=l-p.top,y=c-a+p.width,w=d-l+p.height;Object.values(f).some(M=>M!==0)?(i.beginPath(),kn(i,{x:_,y:b,w:y,h:w,radius:f}),i.fill()):i.fillRect(_,b,y,w)}}function ch(i,e){let{ctx:n,options:{pointLabels:a}}=i;for(let l=e-1;l>=0;l--){let c=i._pointLabelItems[l];if(!c.visible)continue;let d=a.setContext(i.getPointLabelContext(l));lh(n,d,c);let u=te(d.font),{x:f,y:p,textAlign:_}=c;Re(n,i._pointLabels[l],f,p+u.lineHeight/2,u,{color:d.color,textAlign:_,textBaseline:\"middle\"})}}function Un(i,e,n,a){let{ctx:l}=i;if(n)l.arc(i.xCenter,i.yCenter,e,0,Qt);else{let c=i.getPointPosition(0,e);l.moveTo(c.x,c.y);for(let d=1;d<a;d++)c=i.getPointPosition(d,e),l.lineTo(c.x,c.y)}}function hh(i,e,n,a,l){let c=i.ctx,d=e.circular,{color:u,lineWidth:f}=e;!d&&!a||!u||!f||n<0||(c.save(),c.strokeStyle=u,c.lineWidth=f,c.setLineDash(l.dash||[]),c.lineDashOffset=l.dashOffset,c.beginPath(),Un(i,n,d,a),c.closePath(),c.stroke(),c.restore())}function dh(i,e,n){return ls(i,{label:n,index:e,type:\"pointLabel\"})}var Wn=class extends fe{static id=\"radialLinear\";static defaults={display:!0,animate:!0,position:\"chartArea\",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Ce.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(e){return e},padding:5,centerPointLabels:!1}};static defaultRoutes={\"angleLines.color\":\"borderColor\",\"pointLabels.color\":\"color\",\"ticks.color\":\"color\"};static descriptors={angleLines:{_fallback:\"grid\"}};constructor(e){super(e),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){let e=this._padding=Xt(ii(this.options)/2),n=this.width=this.maxWidth-e.width,a=this.height=this.maxHeight-e.height;this.xCenter=Math.floor(this.left+n/2+e.left),this.yCenter=Math.floor(this.top+a/2+e.top),this.drawingArea=Math.floor(Math.min(n,a)/2)}determineDataLimits(){let{min:e,max:n}=this.getMinMax(!1);this.min=it(e)&&!isNaN(e)?e:0,this.max=it(n)&&!isNaN(n)?n:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/ii(this.options))}generateTickLabels(e){fe.prototype.generateTickLabels.call(this,e),this._pointLabels=this.getLabels().map((n,a)=>{let l=rt(this.options.pointLabels.callback,[n,a],this);return l||l===0?l:\"\"}).filter((n,a)=>this.chart.getDataVisibility(a))}fit(){let e=this.options;e.display&&e.pointLabels.display?th(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,n,a,l){this.xCenter+=Math.floor((e-n)/2),this.yCenter+=Math.floor((a-l)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,n,a,l))}getIndexAngle(e){let n=Qt/(this._pointLabels.length||1),a=this.options.startAngle||0;return as(e*n+Yt(a))}getDistanceFromCenterForValue(e){if(K(e))return NaN;let n=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*n:(e-this.min)*n}getValueForDistanceFromCenter(e){if(K(e))return NaN;let n=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-n:this.min+n}getPointLabelContext(e){let n=this._pointLabels||[];if(e>=0&&e<n.length){let a=n[e];return dh(this.getContext(),e,a)}}getPointPosition(e,n,a=0){let l=this.getIndexAngle(e)-Ut+a;return{x:Math.cos(l)*n+this.xCenter,y:Math.sin(l)*n+this.yCenter,angle:l}}getPointPositionForValue(e,n){return this.getPointPosition(e,this.getDistanceFromCenterForValue(n))}getBasePosition(e){return this.getPointPositionForValue(e||0,this.getBaseValue())}getPointLabelPosition(e){let{left:n,top:a,right:l,bottom:c}=this._pointLabelItems[e];return{left:n,top:a,right:l,bottom:c}}drawBackground(){let{backgroundColor:e,grid:{circular:n}}=this.options;if(e){let a=this.ctx;a.save(),a.beginPath(),Un(this,this.getDistanceFromCenterForValue(this._endValue),n,this._pointLabels.length),a.closePath(),a.fillStyle=e,a.fill(),a.restore()}}drawGrid(){let e=this.ctx,n=this.options,{angleLines:a,grid:l,border:c}=n,d=this._pointLabels.length,u,f,p;if(n.pointLabels.display&&ch(this,d),l.display&&this.ticks.forEach((_,b)=>{if(b!==0||b===0&&this.min<0){f=this.getDistanceFromCenterForValue(_.value);let y=this.getContext(b),w=l.setContext(y),M=c.setContext(y);hh(this,w,f,d,M)}}),a.display){for(e.save(),u=d-1;u>=0;u--){let _=a.setContext(this.getPointLabelContext(u)),{color:b,lineWidth:y}=_;!y||!b||(e.lineWidth=y,e.strokeStyle=b,e.setLineDash(_.borderDash),e.lineDashOffset=_.borderDashOffset,f=this.getDistanceFromCenterForValue(n.reverse?this.min:this.max),p=this.getPointPosition(u,f),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(p.x,p.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){let e=this.ctx,n=this.options,a=n.ticks;if(!a.display)return;let l=this.getIndexAngle(0),c,d;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(l),e.textAlign=\"center\",e.textBaseline=\"middle\",this.ticks.forEach((u,f)=>{if(f===0&&this.min>=0&&!n.reverse)return;let p=a.setContext(this.getContext(f)),_=te(p.font);if(c=this.getDistanceFromCenterForValue(this.ticks[f].value),p.showLabelBackdrop){e.font=_.string,d=e.measureText(u.label).width,e.fillStyle=p.backdropColor;let b=Xt(p.backdropPadding);e.fillRect(-d/2-b.left,-c-_.size/2-b.top,d+b.width,_.size+b.height)}Re(e,u.label,0,-c,_,{color:p.color,strokeColor:p.textStrokeColor,strokeWidth:p.textStrokeWidth})}),e.restore()}drawTitle(){}},us={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ut=Object.keys(us);function Nn(i,e){return i-e}function zn(i,e){if(K(e))return null;let n=i._adapter,{parser:a,round:l,isoWeekday:c}=i._parseOpts,d=e;return typeof a==\"function\"&&(d=a(d)),it(d)||(d=typeof a==\"string\"?n.parse(d,a):n.parse(d)),d===null?null:(l&&(d=l===\"week\"&&(Te(c)||c===!0)?n.startOf(d,\"isoWeek\",c):n.startOf(d,l)),+d)}function Hn(i,e,n,a){let l=ut.length;for(let c=ut.indexOf(i);c<l-1;++c){let d=us[ut[c]],u=d.steps?d.steps:Number.MAX_SAFE_INTEGER;if(d.common&&Math.ceil((n-e)/(u*d.size))<=a)return ut[c]}return ut[l-1]}function uh(i,e,n,a,l){for(let c=ut.length-1;c>=ut.indexOf(n);c--){let d=ut[c];if(us[d].common&&i._adapter.diff(l,a,d)>=e-1)return d}return ut[n?ut.indexOf(n):0]}function fh(i){for(let e=ut.indexOf(i)+1,n=ut.length;e<n;++e)if(us[ut[e]].common)return ut[e]}function Vn(i,e,n){if(!n)i[e]=!0;else if(n.length){let{lo:a,hi:l}=Zs(n,e),c=n[a]>=e?n[a]:n[l];i[c]=!0}}function gh(i,e,n,a){let l=i._adapter,c=+l.startOf(e[0].value,a),d=e[e.length-1].value,u,f;for(u=c;u<=d;u=+l.add(u,1,a))f=n[u],f>=0&&(e[f].major=!0);return e}function Bn(i,e,n){let a=[],l={},c=e.length,d,u;for(d=0;d<c;++d)u=e[d],l[u]=d,a.push({value:u,major:!1});return c===0||!n?a:gh(i,a,l,n)}var ds=class extends Fe{static id=\"time\";static defaults={bounds:\"data\",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:\"millisecond\",displayFormats:{}},ticks:{source:\"auto\",callback:!1,major:{enabled:!1}}};constructor(e){super(e),this._cache={data:[],labels:[],all:[]},this._unit=\"day\",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(e,n={}){let a=e.time||(e.time={}),l=this._adapter=new ni._date(e.adapters.date);l.init(n),Us(a.displayFormats,l.formats()),this._parseOpts={parser:a.parser,round:a.round,isoWeekday:a.isoWeekday},super.init(e),this._normalized=n.normalized}parse(e,n){return e===void 0?null:zn(this,e)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){let e=this.options,n=this._adapter,a=e.time.unit||\"day\",{min:l,max:c,minDefined:d,maxDefined:u}=this.getUserBounds();function f(p){!d&&!isNaN(p.min)&&(l=Math.min(l,p.min)),!u&&!isNaN(p.max)&&(c=Math.max(c,p.max))}(!d||!u)&&(f(this._getLabelBounds()),(e.bounds!==\"ticks\"||e.ticks.source!==\"labels\")&&f(this.getMinMax(!1))),l=it(l)&&!isNaN(l)?l:+n.startOf(Date.now(),a),c=it(c)&&!isNaN(c)?c:+n.endOf(Date.now(),a)+1,this.min=Math.min(l,c-1),this.max=Math.max(l+1,c)}_getLabelBounds(){let e=this.getLabelTimestamps(),n=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;return e.length&&(n=e[0],a=e[e.length-1]),{min:n,max:a}}buildTicks(){let e=this.options,n=e.time,a=e.ticks,l=a.source===\"labels\"?this.getLabelTimestamps():this._generate();e.bounds===\"ticks\"&&l.length&&(this.min=this._userMin||l[0],this.max=this._userMax||l[l.length-1]);let c=this.min,d=this.max,u=gn(l,c,d);return this._unit=n.unit||(a.autoSkip?Hn(n.minUnit,this.min,this.max,this._getLabelCapacity(c)):uh(this,u.length,n.minUnit,this.min,this.max)),this._majorUnit=!a.major.enabled||this._unit===\"year\"?void 0:fh(this._unit),this.initOffsets(l),e.reverse&&u.reverse(),Bn(this,u,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map(e=>+e.value))}initOffsets(e=[]){let n=0,a=0,l,c;this.options.offset&&e.length&&(l=this.getDecimalForValue(e[0]),e.length===1?n=1-l:n=(this.getDecimalForValue(e[1])-l)/2,c=this.getDecimalForValue(e[e.length-1]),e.length===1?a=c:a=(c-this.getDecimalForValue(e[e.length-2]))/2);let d=e.length<3?.5:.25;n=$t(n,0,d),a=$t(a,0,d),this._offsets={start:n,end:a,factor:1/(n+1+a)}}_generate(){let e=this._adapter,n=this.min,a=this.max,l=this.options,c=l.time,d=c.unit||Hn(c.minUnit,n,a,this._getLabelCapacity(n)),u=at(l.ticks.stepSize,1),f=d===\"week\"?c.isoWeekday:!1,p=Te(f)||f===!0,_={},b=n,y,w;if(p&&(b=+e.startOf(b,\"isoWeek\",f)),b=+e.startOf(b,p?\"day\":d),e.diff(a,n,d)>1e5*u)throw new Error(n+\" and \"+a+\" are too far apart with stepSize of \"+u+\" \"+d);let M=l.ticks.source===\"data\"&&this.getDataTimestamps();for(y=b,w=0;y<a;y=+e.add(y,u,d),w++)Vn(_,y,M);return(y===a||l.bounds===\"ticks\"||w===1)&&Vn(_,y,M),Object.keys(_).sort(Nn).map(I=>+I)}getLabelForValue(e){let n=this._adapter,a=this.options.time;return a.tooltipFormat?n.format(e,a.tooltipFormat):n.format(e,a.displayFormats.datetime)}format(e,n){let l=this.options.time.displayFormats,c=this._unit,d=n||l[c];return this._adapter.format(e,d)}_tickFormatFunction(e,n,a,l){let c=this.options,d=c.ticks.callback;if(d)return rt(d,[e,n,a],this);let u=c.time.displayFormats,f=this._unit,p=this._majorUnit,_=f&&u[f],b=p&&u[p],y=a[n],w=p&&b&&y&&y.major;return this._adapter.format(e,l||(w?b:_))}generateTickLabels(e){let n,a,l;for(n=0,a=e.length;n<a;++n)l=e[n],l.label=this._tickFormatFunction(l.value,n,e)}getDecimalForValue(e){return e===null?NaN:(e-this.min)/(this.max-this.min)}getPixelForValue(e){let n=this._offsets,a=this.getDecimalForValue(e);return this.getPixelForDecimal((n.start+a)*n.factor)}getValueForPixel(e){let n=this._offsets,a=this.getDecimalForPixel(e)/n.factor-n.end;return this.min+a*(this.max-this.min)}_getLabelSize(e){let n=this.options.ticks,a=this.ctx.measureText(e).width,l=Yt(this.isHorizontal()?n.maxRotation:n.minRotation),c=Math.cos(l),d=Math.sin(l),u=this._resolveTickFontOptions(0).size;return{w:a*c+u*d,h:a*d+u*c}}_getLabelCapacity(e){let n=this.options.time,a=n.displayFormats,l=a[n.unit]||a.millisecond,c=this._tickFormatFunction(e,0,Bn(this,[e],this._majorUnit),l),d=this._getLabelSize(c),u=Math.floor(this.isHorizontal()?this.width/d.w:this.height/d.h)-1;return u>0?u:1}getDataTimestamps(){let e=this._cache.data||[],n,a;if(e.length)return e;let l=this.getMatchingVisibleMetas();if(this._normalized&&l.length)return this._cache.data=l[0].controller.getAllParsedValues(this);for(n=0,a=l.length;n<a;++n)e=e.concat(l[n].controller.getAllParsedValues(this));return this._cache.data=this.normalize(e)}getLabelTimestamps(){let e=this._cache.labels||[],n,a;if(e.length)return e;let l=this.getLabels();for(n=0,a=l.length;n<a;++n)e.push(zn(this,l[n]));return this._cache.labels=this._normalized?e:this.normalize(e)}normalize(e){return pn(e.sort(Nn))}};function hs(i,e,n){let a=0,l=i.length-1,c,d,u,f;n?(e>=i[a].pos&&e<=i[l].pos&&({lo:a,hi:l}=Ks(i,\"pos\",e)),{pos:c,time:u}=i[a],{pos:d,time:f}=i[l]):(e>=i[a].time&&e<=i[l].time&&({lo:a,hi:l}=Ks(i,\"time\",e)),{time:c,pos:u}=i[a],{time:d,pos:f}=i[l]);let p=d-c;return p?u+(f-u)*(e-c)/p:u}var jn=class extends ds{static id=\"timeseries\";static defaults=ds.defaults;constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let e=this._getTimestampsForTable(),n=this._table=this.buildLookupTable(e);this._minPos=hs(n,this.min),this._tableRange=hs(n,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){let{min:n,max:a}=this,l=[],c=[],d,u,f,p,_;for(d=0,u=e.length;d<u;++d)p=e[d],p>=n&&p<=a&&l.push(p);if(l.length<2)return[{time:n,pos:0},{time:a,pos:1}];for(d=0,u=l.length;d<u;++d)_=l[d+1],f=l[d-1],p=l[d],Math.round((_+f)/2)!==p&&c.push({time:p,pos:d/(u-1)});return c}_generate(){let e=this.min,n=this.max,a=super.getDataTimestamps();return(!a.includes(e)||!a.length)&&a.splice(0,0,e),(!a.includes(n)||a.length===1)&&a.push(n),a.sort((l,c)=>l-c)}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;let n=this.getDataTimestamps(),a=this.getLabelTimestamps();return n.length&&a.length?e=this.normalize(n.concat(a)):e=n.length?n:a,e=this._cache.all=e,e}getDecimalForValue(e){return(hs(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){let n=this._offsets,a=this.getDecimalForPixel(e)/n.factor-n.end;return hs(this._table,a*this._tableRange+this._minPos,!0)}};var ph={datetime:\"MMM D, YYYY, h:mm:ss a\",millisecond:\"h:mm:ss.SSS a\",second:\"h:mm:ss a\",minute:\"h:mm a\",hour:\"hA\",day:\"MMM D\",week:\"ll\",month:\"MMM YYYY\",quarter:\"[Q]Q - YYYY\",year:\"YYYY\"};ni._date.override(typeof kt.default==\"function\"?{_id:\"moment\",formats:function(){return ph},parse:function(i,e){return typeof i==\"string\"&&typeof e==\"string\"?i=(0,kt.default)(i,e):i instanceof kt.default||(i=(0,kt.default)(i)),i.isValid()?i.valueOf():null},format:function(i,e){return(0,kt.default)(i).format(e)},add:function(i,e,n){return(0,kt.default)(i).add(e,n).valueOf()},diff:function(i,e,n){return(0,kt.default)(i).diff((0,kt.default)(e),n)},startOf:function(i,e,n){return i=(0,kt.default)(i),e===\"isoWeek\"?(n=Math.trunc(Math.min(Math.max(0,n),6)),i.isoWeekday(n).startOf(\"day\").valueOf()):i.startOf(e).valueOf()},endOf:function(i,e){return(0,kt.default)(i).endOf(e).valueOf()}}:{});\n/*! Bundled license information:\n\nmoment/moment.js:\n  (*! moment.js *)\n  (*! version : 2.30.1 *)\n  (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)\n  (*! license : MIT *)\n  (*! momentjs.com *)\n\n@kurkle/color/dist/color.esm.js:\n  (*!\n   * @kurkle/color v0.3.4\n   * https://github.com/kurkle/color#readme\n   * (c) 2024 Jukka Kurkela\n   * Released under the MIT License\n   *)\n\nchart.js/dist/chunks/helpers.dataset.js:\nchart.js/dist/chart.js:\n  (*!\n   * Chart.js v4.5.1\n   * https://www.chartjs.org\n   * (c) 2025 Chart.js Contributors\n   * Released under the MIT License\n   *)\n\nchartjs-adapter-moment/dist/chartjs-adapter-moment.esm.js:\n  (*!\n    * chartjs-adapter-moment v1.0.1\n    * https://www.chartjs.org\n    * (c) 2022 chartjs-adapter-moment Contributors\n    * Released under the MIT license\n    *)\n*/\n"
  },
  {
    "path": "modules/system/assets/vendor/clockpicker/css/jquery-clockpicker.css",
    "content": "/*!\n * ClockPicker v0.0.7 for jQuery (http://weareoutman.github.io/clockpicker/)\n * Copyright 2014 Wang Shenwei.\n * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE)\n * \n * Bootstrap v3.1.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/* Picked from bootstrap: .popover, .btn, .text-primary */\n\n.clockpicker-popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  white-space: normal;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\t\t  box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n}\n.clockpicker-popover.top {\n  margin-top: -10px;\n}\n.clockpicker-popover.right {\n  margin-left: 10px;\n}\n.clockpicker-popover.bottom {\n  margin-top: 10px;\n}\n.clockpicker-popover.left {\n  margin-left: -10px;\n}\n.clockpicker-popover .popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.clockpicker-popover .popover-content {\n  padding: 9px 14px;\n}\n.clockpicker-popover > .arrow,\n.clockpicker-popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n  /* The following are set in WordPress (wp-admin/css/revisions.css) - reset them to initial values */\n  overflow:visible;\n  margin:0;\n  padding:0;\n  z-index:auto;\n  background-color:transparent;\n  -webkit-box-shadow:none;\n  box-shadow:none;\n  bottom:auto;\n  left:auto;\n  right:auto;\n  top:auto;\n  -webkit-transform:none;\n  -ms-transform:none;\n  transform:none;\n}\n.clockpicker-popover > .arrow {\n  border-width: 11px;\n}\n.clockpicker-popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.clockpicker-popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.clockpicker-popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.clockpicker-popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.clockpicker-popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.clockpicker-popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.clockpicker-popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.clockpicker-popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.clockpicker-popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n\n/*!\n * ClockPicker v{package.version} for Bootstrap (http://weareoutman.github.io/clockpicker/)\n * Copyright 2014 Wang Shenwei.\n * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE)\n */\n\n.clockpicker .input-group-addon {\n\tcursor: pointer;\n}\n.clockpicker-moving {\n\tcursor: move;\n}\n.clockpicker-align-left.popover > .arrow {\n\tleft: 25px;\n}\n.clockpicker-align-top.popover > .arrow {\n\ttop: 17px;\n}\n.clockpicker-align-right.popover > .arrow {\n\tleft: auto;\n\tright: 25px;\n}\n.clockpicker-align-bottom.popover > .arrow {\n\ttop: auto;\n\tbottom: 6px;\n}\n.clockpicker-popover .popover-title {\n\tbackground-color: #fff;\n\tcolor: #999;\n\tfont-size: 24px;\n\tfont-weight: bold;\n\tline-height: 30px;\n\ttext-align: center;\n}\n.clockpicker-popover .popover-title span {\n\tcursor: pointer;\n}\n.clockpicker-popover .popover-content {\n\tbackground-color: #f8f8f8;\n\tpadding: 12px;\n}\n.popover-content:last-child {\n\tborder-bottom-left-radius: 5px;\n\tborder-bottom-right-radius: 5px;\n}\n.clockpicker-plate {\n\tbackground-color: #fff;\n\tborder: 1px solid #ccc;\n\tborder-radius: 50%;\n\twidth: 200px;\n\theight: 200px;\n\toverflow: visible;\n\tposition: relative;\n\t/* Disable text selection highlighting. Thanks to Hermanya */\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n.clockpicker-canvas,\n.clockpicker-dial {\n\twidth: 200px;\n\theight: 200px;\n\tposition: absolute;\n\tleft: -1px;\n\ttop: -1px;\n}\n.clockpicker-minutes {\n\tvisibility: hidden;\n}\n.clockpicker-tick {\n\tborder-radius: 50%;\n\tcolor: #666;\n\tline-height: 26px;\n\ttext-align: center;\n\twidth: 26px;\n\theight: 26px;\n\tposition: absolute;\n\tcursor: pointer;\n}\n.clockpicker-tick.active,\n.clockpicker-tick:hover {\n\tbackground-color: rgb(192, 229, 247);\n\tbackground-color: rgba(0, 149, 221, .25);\n}\n/*\n.clockpicker-button {\n\tbackground-image: none;\n\tbackground-color: #fff;\n\tborder-width: 1px 0 0;\n\tborder-top-left-radius: 0;\n\tborder-top-right-radius: 0;\n\tmargin: 0;\n\tpadding: 10px 0;\n\ttext-align: center;\n}\n.clockpicker-button:hover {\n\tbackground-image: none;\n\tbackground-color: #ebebeb;\n}\n.clockpicker-button:focus {\n    outline: none!important;\n}\n*/\n.clockpicker-dial {\n\t-webkit-transition: -webkit-transform 350ms, opacity 350ms;\n\t-moz-transition: -moz-transform 350ms, opacity 350ms;\n\t-ms-transition: -ms-transform 350ms, opacity 350ms;\n\t-o-transition: -o-transform 350ms, opacity 350ms;\n\ttransition: transform 350ms, opacity 350ms;\n}\n.clockpicker-dial-out {\n\topacity: 0;\n}\n.clockpicker-hours.clockpicker-dial-out {\n\t-webkit-transform: scale(1.2, 1.2);\n\t-moz-transform: scale(1.2, 1.2);\n\t-ms-transform: scale(1.2, 1.2);\n\t-o-transform: scale(1.2, 1.2);\n\ttransform: scale(1.2, 1.2);\n}\n.clockpicker-minutes.clockpicker-dial-out {\n\t-webkit-transform: scale(.8, .8);\n\t-moz-transform: scale(.8, .8);\n\t-ms-transform: scale(.8, .8);\n\t-o-transform: scale(.8, .8);\n\ttransform: scale(.8, .8);\n}\n.clockpicker-canvas {\n\t-webkit-transition: opacity 175ms;\n\t-moz-transition: opacity 175ms;\n\t-ms-transition: opacity 175ms;\n\t-o-transition: opacity 175ms;\n\ttransition: opacity 175ms;\n}\n.clockpicker-canvas-out {\n\topacity: 0.25;\n}\n.clockpicker-canvas-bearing,\n.clockpicker-canvas-fg {\n\tstroke: none;\n\tfill: rgb(0, 149, 221);\n}\n.clockpicker-canvas-bg {\n\tstroke: none;\n\tfill: rgb(192, 229, 247);\n}\n.clockpicker-canvas-bg-trans {\n\tfill: rgba(0, 149, 221, .25);\n}\n.clockpicker-canvas line {\n\tstroke: rgb(0, 149, 221);\n\tstroke-width: 1;\n\tstroke-linecap: round;\n\t/*shape-rendering: crispEdges;*/\n}\n.clockpicker-button.am-button {\n\tmargin: 1px;\n\tpadding: 5px;\n\tborder: 1px solid rgba(0, 0, 0, .2);\n\tborder-radius: 4px;\n\t\n}\n.clockpicker-button.pm-button {\n\tmargin: 1px 1px 1px 136px;\n\tpadding: 5px;\n\tborder: 1px solid rgba(0, 0, 0, .2);\n\tborder-radius: 4px;\n}\n"
  },
  {
    "path": "modules/system/assets/vendor/clockpicker/js/jquery-clockpicker.js",
    "content": "/*!\n * ClockPicker v0.0.7 (http://weareoutman.github.io/clockpicker/)\n * Copyright 2014 Wang Shenwei.\n * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE)\n\n * This library is no longer maintained by Weareoutman, hence\n * no further updates will be provided. Consider this file\n * a forked version and you a free to make changes.\n */\n\n;(function(){\n\tvar $ = window.jQuery,\n\t\t$win = $(window),\n\t\t$doc = $(document),\n\t\t$body;\n\n\t// Can I use inline svg ?\n\tvar svgNS = 'http://www.w3.org/2000/svg',\n\t\tsvgSupported = 'SVGAngle' in window && (function(){\n\t\t\tvar supported,\n\t\t\t\tel = document.createElement('div');\n\t\t\tel.innerHTML = '<svg/>';\n\t\t\tsupported = (el.firstChild && el.firstChild.namespaceURI) == svgNS;\n\t\t\tel.innerHTML = '';\n\t\t\treturn supported;\n\t\t})();\n\n\t// Can I use transition ?\n\tvar transitionSupported = (function(){\n\t\tvar style = document.createElement('div').style;\n\t\treturn 'transition' in style ||\n\t\t\t'WebkitTransition' in style ||\n\t\t\t'MozTransition' in style ||\n\t\t\t'msTransition' in style ||\n\t\t\t'OTransition' in style;\n\t})();\n\n\t// Listen touch events in touch screen device, instead of mouse events in desktop.\n\tvar touchSupported = 'ontouchstart' in window,\n\t\tmousedownEvent = 'mousedown' + ( touchSupported ? ' touchstart' : ''),\n\t\tmousemoveEvent = 'mousemove.clockpicker' + ( touchSupported ? ' touchmove.clockpicker' : ''),\n\t\tmouseupEvent = 'mouseup.clockpicker' + ( touchSupported ? ' touchend.clockpicker' : '');\n\n\t// Vibrate the device if supported\n\tvar vibrate = navigator.vibrate ? 'vibrate' : navigator.webkitVibrate ? 'webkitVibrate' : null;\n\n\tfunction createSvgElement(name) {\n\t\treturn document.createElementNS(svgNS, name);\n\t}\n\n\tfunction leadingZero(num) {\n\t\treturn (num < 10 ? '0' : '') + num;\n\t}\n\n\t// Get a unique id\n\tvar idCounter = 0;\n\tfunction uniqueId(prefix) {\n\t\tvar id = ++idCounter + '';\n\t\treturn prefix ? prefix + id : id;\n\t}\n\n\t// Clock size\n\tvar dialRadius = 100,\n\t\touterRadius = 80,\n\t\t// innerRadius = 80 on 12 hour clock\n\t\tinnerRadius = 54,\n\t\ttickRadius = 13,\n\t\tdiameter = dialRadius * 2,\n\t\tduration = transitionSupported ? 350 : 1;\n\n\t// Popover template\n\tvar tpl = [\n\t\t'<div class=\"popover clockpicker-popover\">',\n\t\t\t'<div class=\"arrow\"></div>',\n\t\t\t'<div class=\"popover-title\">',\n\t\t\t\t'<span class=\"clockpicker-span-hours text-primary\"></span>',\n\t\t\t\t':',\n\t\t\t\t'<span class=\"clockpicker-span-minutes\"></span> ',\n\t\t\t\t'<span class=\"clockpicker-span-am-pm\"></span>',\n\t\t\t'</div>',\n\t\t\t'<div class=\"popover-content\">',\n\t\t\t\t'<div class=\"clockpicker-plate\">',\n\t\t\t\t\t'<div class=\"clockpicker-canvas\"></div>',\n\t\t\t\t\t'<div class=\"clockpicker-dial clockpicker-hours\"></div>',\n\t\t\t\t\t'<div class=\"clockpicker-dial clockpicker-minutes clockpicker-dial-out\"></div>',\n\t\t\t\t'</div>',\n\t\t\t\t'<span class=\"clockpicker-am-pm-block\">',\n\t\t\t\t'</span>',\n\t\t\t'</div>',\n\t\t'</div>'\n\t].join('');\n\n\t// ClockPicker\n\tfunction ClockPicker(element, options) {\n\t\tvar popover = $(tpl),\n\t\t\tplate = popover.find('.clockpicker-plate'),\n\t\t\thoursView = popover.find('.clockpicker-hours'),\n\t\t\tminutesView = popover.find('.clockpicker-minutes'),\n\t\t\tamPmBlock = popover.find('.clockpicker-am-pm-block'),\n\t\t\tisInput = element.prop('tagName') === 'INPUT',\n\t\t\tinput = isInput ? element : element.find('input'),\n\t\t\taddon = element.find('.input-group-addon'),\n\t\t\tself = this,\n\t\t\ttimer;\n\n\t\tthis.id = uniqueId('cp');\n\t\tthis.element = element;\n\t\tthis.options = options;\n\t\tthis.isAppended = false;\n\t\tthis.isShown = false;\n\t\tthis.currentView = 'hours';\n\t\tthis.isInput = isInput;\n\t\tthis.input = input;\n\t\tthis.addon = addon;\n\t\tthis.popover = popover;\n\t\tthis.plate = plate;\n\t\tthis.hoursView = hoursView;\n\t\tthis.minutesView = minutesView;\n\t\tthis.amPmBlock = amPmBlock;\n\t\tthis.spanHours = popover.find('.clockpicker-span-hours');\n\t\tthis.spanMinutes = popover.find('.clockpicker-span-minutes');\n\t\tthis.spanAmPm = popover.find('.clockpicker-span-am-pm');\n\t\tthis.amOrPm = \"PM\";\n\n\t\t// Setup for for 12 hour clock if option is selected\n\t\tif (options.twelvehour) {\n\n\t\t\tvar amPmButtonsTemplate = ['<div class=\"clockpicker-am-pm-block\">',\n\t\t\t\t'<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button clockpicker-am-button\">',\n\t\t\t\t'AM</button>',\n\t\t\t\t'<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button clockpicker-pm-button\">',\n\t\t\t\t'PM</button>',\n\t\t\t\t'</div>'].join('');\n\n\t\t\tvar amPmButtons = $(amPmButtonsTemplate);\n\t\t\t//amPmButtons.appendTo(plate);\n\n\t\t\t////Not working b/c they are not shown when this runs\n\t\t\t//$('clockpicker-am-button')\n\t\t\t//    .on(\"click\", function() {\n\t\t\t//        self.amOrPm = \"AM\";\n\t\t\t//        $('.clockpicker-span-am-pm').empty().append('AM');\n\t\t\t//    });\n\t\t\t//\n\t\t\t//$('clockpicker-pm-button')\n\t\t\t//    .on(\"click\", function() {\n\t\t\t//         self.amOrPm = \"PM\";\n\t\t\t//        $('.clockpicker-span-am-pm').empty().append('PM');\n\t\t\t//    });\n\n\t\t\t$('<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button am-button\">' + \"AM\" + '</button>')\n\t\t\t\t.on(\"click\", function() {\n\t\t\t\t\tself.amOrPm = \"AM\";\n\t\t\t\t\t$('.clockpicker-span-am-pm').empty().append('AM');\n\t\t\t\t}).appendTo(this.amPmBlock);\n\n\n\t\t\t$('<button type=\"button\" class=\"btn btn-sm btn-secondary clockpicker-button pm-button\">' + \"PM\" + '</button>')\n\t\t\t\t.on(\"click\", function() {\n\t\t\t\t\tself.amOrPm = 'PM';\n\t\t\t\t\t$('.clockpicker-span-am-pm').empty().append('PM');\n\t\t\t\t}).appendTo(this.amPmBlock);\n\n\t\t}\n\n\t\tif (! options.autoclose) {\n\t\t\t// If autoclose is not setted, append a button\n\t\t\t$('<button type=\"button\" class=\"btn btn-sm btn-secondary btn-block clockpicker-button\">' + options.donetext + '</button>')\n\t\t\t\t.click($.proxy(this.done, this))\n\t\t\t\t.appendTo(popover);\n\t\t}\n\n\t\t// Placement and arrow align - make sure they make sense.\n\t\tif ((options.placement === 'top' || options.placement === 'bottom' || options.placement === 'auto') && (options.align === 'top' || options.align === 'bottom')) options.align = 'left';\n\t\tif ((options.placement === 'left' || options.placement === 'right') && (options.align === 'left' || options.align === 'right')) options.align = 'top';\n\n\t\tpopover.addClass(options.placement);\n\t\tpopover.addClass('clockpicker-align-' + options.align);\n\n\t\tthis.spanHours.click($.proxy(this.toggleView, this, 'hours'));\n\t\tthis.spanMinutes.click($.proxy(this.toggleView, this, 'minutes'));\n\n\t\t// Show or toggle\n\t\tinput.on('focus.clockpicker click.clockpicker', $.proxy(this.show, this));\n\t\taddon.on('click.clockpicker', $.proxy(this.toggle, this));\n\n\t\t// Build ticks\n\t\tvar tickTpl = $('<div class=\"clockpicker-tick\"></div>'),\n\t\t\ti, tick, radian, radius;\n\n\t\t// Hours view\n\t\tif (options.twelvehour) {\n\t\t\tfor (i = 1; i < 13; i += 1) {\n\t\t\t\ttick = tickTpl.clone();\n\t\t\t\tradian = i / 6 * Math.PI;\n\t\t\t\tradius = outerRadius;\n\t\t\t\ttick.css('font-size', '120%');\n\t\t\t\ttick.css({\n\t\t\t\t\tleft: dialRadius + Math.sin(radian) * radius - tickRadius,\n\t\t\t\t\ttop: dialRadius - Math.cos(radian) * radius - tickRadius\n\t\t\t\t});\n\t\t\t\ttick.html(i === 0 ? '00' : i);\n\t\t\t\thoursView.append(tick);\n\t\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < 24; i += 1) {\n\t\t\t\ttick = tickTpl.clone();\n\t\t\t\tradian = i / 6 * Math.PI;\n\t\t\t\tvar inner = i > 0 && i < 13;\n\t\t\t\tradius = inner ? innerRadius : outerRadius;\n\t\t\t\ttick.css({\n\t\t\t\t\tleft: dialRadius + Math.sin(radian) * radius - tickRadius,\n\t\t\t\t\ttop: dialRadius - Math.cos(radian) * radius - tickRadius\n\t\t\t\t});\n\t\t\t\tif (inner) {\n\t\t\t\t\ttick.addClass('tick-inner');\n\t\t\t\t}\n\t\t\t\ttick.html(i === 0 ? '00' : i);\n\t\t\t\thoursView.append(tick);\n\t\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t\t}\n\t\t}\n\n\t\t// Minutes view\n\t\tfor (i = 0; i < 60; i += 5) {\n\t\t\ttick = tickTpl.clone();\n\t\t\tradian = i / 30 * Math.PI;\n\t\t\ttick.css({\n\t\t\t\tleft: dialRadius + Math.sin(radian) * outerRadius - tickRadius,\n\t\t\t\ttop: dialRadius - Math.cos(radian) * outerRadius - tickRadius\n\t\t\t});\n\t\t\t// tick.css('font-size', '120%');\n\t\t\ttick.html(leadingZero(i));\n\t\t\tminutesView.append(tick);\n\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t}\n\n\t\t// Clicking on minutes view space\n\t\tplate.on(mousedownEvent, function(e){\n\t\t\tif ($(e.target).closest('.clockpicker-tick').length === 0) {\n\t\t\t\tmousedown(e, true);\n\t\t\t}\n\t\t});\n\n\t\t// Mousedown or touchstart\n\t\tfunction mousedown(e, space) {\n\t\t\tvar offset = plate.offset(),\n\t\t\t\tisTouch = /^touch/.test(e.type),\n\t\t\t\tx0 = offset.left + dialRadius,\n\t\t\t\ty0 = offset.top + dialRadius,\n\t\t\t\tdx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0,\n\t\t\t\tdy = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0,\n\t\t\t\tz = Math.sqrt(dx * dx + dy * dy),\n\t\t\t\tmoved = false;\n\n\t\t\t// When clicking on minutes view space, check the mouse position\n\t\t\tif (space && (z < outerRadius - tickRadius || z > outerRadius + tickRadius)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.preventDefault();\n\n\t\t\t// Set cursor style of body after 200ms\n\t\t\tvar movingTimer = setTimeout(function(){\n\t\t\t\t$body.addClass('clockpicker-moving');\n\t\t\t}, 200);\n\n\t\t\t// Place the canvas to top\n\t\t\tif (svgSupported) {\n\t\t\t\tplate.append(self.canvas);\n\t\t\t}\n\n\t\t\t// Clock\n\t\t\tself.setHand(dx, dy, ! space, true);\n\n\t\t\t// Mousemove on document\n\t\t\t$doc.off(mousemoveEvent).on(mousemoveEvent, function(e){\n\t\t\t\te.preventDefault();\n\t\t\t\tvar isTouch = /^touch/.test(e.type),\n\t\t\t\t\tx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0,\n\t\t\t\t\ty = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0;\n\t\t\t\tif (! moved && x === dx && y === dy) {\n\t\t\t\t\t// Clicking in chrome on windows will trigger a mousemove event\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmoved = true;\n\t\t\t\tself.setHand(x, y, false, true);\n\t\t\t});\n\n\t\t\t// Mouseup on document\n\t\t\t$doc.off(mouseupEvent).on(mouseupEvent, function(e){\n\t\t\t\t$doc.off(mouseupEvent);\n\t\t\t\te.preventDefault();\n\t\t\t\tvar isTouch = /^touch/.test(e.type),\n\t\t\t\t\tx = (isTouch ? e.originalEvent.changedTouches[0] : e).pageX - x0,\n\t\t\t\t\ty = (isTouch ? e.originalEvent.changedTouches[0] : e).pageY - y0;\n\t\t\t\tif ((space || moved) && x === dx && y === dy) {\n\t\t\t\t\tself.setHand(x, y);\n\t\t\t\t}\n\t\t\t\tif (self.currentView === 'hours') {\n\t\t\t\t\tself.toggleView('minutes', duration / 2);\n\t\t\t\t} else {\n\t\t\t\t\tif (options.autoclose) {\n\t\t\t\t\t\tself.minutesView.addClass('clockpicker-dial-out');\n\t\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t\tself.done();\n\t\t\t\t\t\t}, duration / 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tplate.prepend(canvas);\n\n\t\t\t\t// Reset cursor style of body\n\t\t\t\tclearTimeout(movingTimer);\n\t\t\t\t$body.removeClass('clockpicker-moving');\n\n\t\t\t\t// Unbind mousemove event\n\t\t\t\t$doc.off(mousemoveEvent);\n\t\t\t});\n\t\t}\n\n\t\tif (svgSupported) {\n\t\t\t// Draw clock hands and others\n\t\t\tvar canvas = popover.find('.clockpicker-canvas'),\n\t\t\t\tsvg = createSvgElement('svg');\n\t\t\tsvg.setAttribute('class', 'clockpicker-svg');\n\t\t\tsvg.setAttribute('width', diameter);\n\t\t\tsvg.setAttribute('height', diameter);\n\t\t\tvar g = createSvgElement('g');\n\t\t\tg.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')');\n\t\t\tvar bearing = createSvgElement('circle');\n\t\t\tbearing.setAttribute('class', 'clockpicker-canvas-bearing');\n\t\t\tbearing.setAttribute('cx', 0);\n\t\t\tbearing.setAttribute('cy', 0);\n\t\t\tbearing.setAttribute('r', 2);\n\t\t\tvar hand = createSvgElement('line');\n\t\t\thand.setAttribute('x1', 0);\n\t\t\thand.setAttribute('y1', 0);\n\t\t\tvar bg = createSvgElement('circle');\n\t\t\tbg.setAttribute('class', 'clockpicker-canvas-bg');\n\t\t\tbg.setAttribute('r', tickRadius);\n\t\t\tvar fg = createSvgElement('circle');\n\t\t\tfg.setAttribute('class', 'clockpicker-canvas-fg');\n\t\t\tfg.setAttribute('r', 3.5);\n\t\t\tg.appendChild(hand);\n\t\t\tg.appendChild(bg);\n\t\t\tg.appendChild(fg);\n\t\t\tg.appendChild(bearing);\n\t\t\tsvg.appendChild(g);\n\t\t\tcanvas.append(svg);\n\n\t\t\tthis.hand = hand;\n\t\t\tthis.bg = bg;\n\t\t\tthis.fg = fg;\n\t\t\tthis.bearing = bearing;\n\t\t\tthis.g = g;\n\t\t\tthis.canvas = canvas;\n\t\t}\n\n\t\traiseCallback(this.options.init);\n\t}\n\n\tfunction raiseCallback(callbackFunction) {\n\t\tif (callbackFunction && typeof callbackFunction === \"function\") {\n\t\t\tcallbackFunction();\n\t\t}\n\t}\n\n\t// Default options\n\tClockPicker.DEFAULTS = {\n\t\t'default': '',       // default time, 'now' or '13:14' e.g.\n\t\tfromnow: 0,          // set default time to * milliseconds from now (using with default = 'now')\n\t\tplacement: 'bottom', // clock popover placement\n\t\talign: 'left',       // popover arrow align\n\t\tdonetext: 'Done',    // done button text\n\t\tautoclose: false,    // auto close when minute is selected\n\t\ttwelvehour: false, // change to 12 hour AM/PM clock from 24 hour\n\t\tvibrate: true        // vibrate the device when dragging clock hand\n\t};\n\n\t// Show or hide popover\n\tClockPicker.prototype.toggle = function(){\n\t\tthis[this.isShown ? 'hide' : 'show']();\n\t};\n\n\t// Set popover position\n\tClockPicker.prototype.locate = function(){\n\t\tvar element = this.element,\n\t\t\tpopover = this.popover,\n\t\t\toffset = element.offset(),\n\t\t\twidth = element.outerWidth(),\n\t\t\theight = element.outerHeight(),\n\t\t\tplacement = this.options.placement,\n\t\t\talign = this.options.align,\n\t\t\tstyles = {},\n\t\t\tself = this,\n\t\t\tviewportHeight = window.innerHeight || document.documentElement.clientHeight,\n\t\t\tscrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\n\t\tpopover.show();\n\n\t\tif(placement === 'auto'){\n\t\t\tif (offset.top + popover.outerHeight() > viewportHeight + scrollTop) {\n\t\t\t\tplacement = 'top';\n\t\t\t} else {\n\t\t\t\tplacement = 'bottom';\n\t\t\t}\n\t\t}\n\n\t\t// Place the popover\n\t\tswitch (placement) {\n\t\t\tcase 'bottom':\n\t\t\t\tstyles.top = offset.top + height;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\tstyles.left = offset.left + width;\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\tstyles.top = offset.top - popover.outerHeight();\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\t\tstyles.left = offset.left - popover.outerWidth();\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Align the popover arrow\n\t\tswitch (align) {\n\t\t\tcase 'left':\n\t\t\t\tstyles.left = offset.left;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\tstyles.left = offset.left + width - popover.outerWidth();\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\tstyles.top = offset.top;\n\t\t\t\tbreak;\n\t\t\tcase 'bottom':\n\t\t\t\tstyles.top = offset.top + height - popover.outerHeight();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tpopover.css(styles);\n\t};\n\n\t// Show popover\n\tClockPicker.prototype.show = function(e){\n\t\t// Not show again\n\t\tif (this.isShown) {\n\t\t\treturn;\n\t\t}\n\n\t\traiseCallback(this.options.beforeShow);\n\n\t\tvar self = this;\n\n\t\t// Initialize\n\t\tif (! this.isAppended) {\n\t\t\t// Append popover to body\n\t\t\t$body = $(document.body).append(this.popover);\n\n\t\t\t// Reset position when resize\n\t\t\t$win.on('resize.clockpicker' + this.id, function(){\n\t\t\t\tif (self.isShown) {\n\t\t\t\t\tself.locate();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.isAppended = true;\n\t\t}\n\n\t\t// Get the time\n\t\tvar value = ((this.input.prop('value') || this.options['default'] || '') + '');\n\n\t\tif (this.options.twelvehour) {\n\t\t\tvar amPmValue = value.split(' ');\n\t\t\tif (amPmValue[1]) {\n\t\t\t\tvalue = amPmValue[0];\n\t\t\t\tthis.amOrPm = amPmValue[1];\n\t\t\t}\n\t\t}\n\n\t\tvalue = value.split(':');\n\t\tif (value[0] === 'now') {\n\t\t\tvar now = new Date(+ new Date() + this.options.fromnow);\n\t\t\tvalue = [\n\t\t\t\tnow.getHours(),\n\t\t\t\tnow.getMinutes()\n\t\t\t];\n\t\t}\n\n\t\tthis.hours = + value[0] || 0;\n\t\tthis.minutes = + value[1] || 0;\n\t\tthis.spanHours.html(leadingZero(this.hours));\n\t\tthis.spanMinutes.html(leadingZero(this.minutes));\n\t\tif (this.options.twelvehour) {\n\t\t\tthis.spanAmPm.html(this.amOrPm);\n\t\t}\n\n\t\t// Toggle to hours view\n\t\tthis.toggleView('hours');\n\n\t\t// Set position\n\t\tthis.locate();\n\n\t\tthis.isShown = true;\n\n\t\t// Hide when clicking or tabbing on any element except the clock, input and addon\n\t\t$doc.on('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id, function(e){\n\t\t\tvar target = $(e.target);\n\t\t\tif (target.closest(self.popover).length === 0 &&\n\t\t\t\t\ttarget.closest(self.addon).length === 0 &&\n\t\t\t\t\ttarget.closest(self.input).length === 0) {\n\t\t\t\tself.hide();\n\t\t\t}\n\t\t});\n\n\t\t// Hide when ESC is pressed\n\t\t$doc.on('keyup.clockpicker.' + this.id, function(e){\n\t\t\tif (e.keyCode === 27) {\n\t\t\t\tself.hide();\n\t\t\t}\n\t\t});\n\n\t\traiseCallback(this.options.afterShow);\n\t};\n\n\t// Hide popover\n\tClockPicker.prototype.hide = function(){\n\t\traiseCallback(this.options.beforeHide);\n\n\t\tthis.isShown = false;\n\n\t\t// Unbinding events on document\n\t\t$doc.off('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id);\n\t\t$doc.off('keyup.clockpicker.' + this.id);\n\n\t\tthis.popover.hide();\n\n\t\traiseCallback(this.options.afterHide);\n\t};\n\n\t// Toggle to hours or minutes view\n\tClockPicker.prototype.toggleView = function(view, delay){\n\t\tvar raiseAfterHourSelect = false;\n\t\tif (view === 'minutes' && $(this.hoursView).css(\"visibility\") === \"visible\") {\n\t\t\traiseCallback(this.options.beforeHourSelect);\n\t\t\traiseAfterHourSelect = true;\n\t\t}\n\t\tvar isHours = view === 'hours',\n\t\t\tnextView = isHours ? this.hoursView : this.minutesView,\n\t\t\thideView = isHours ? this.minutesView : this.hoursView;\n\n\t\tthis.currentView = view;\n\n\t\tthis.spanHours.toggleClass('text-primary', isHours);\n\t\tthis.spanMinutes.toggleClass('text-primary', ! isHours);\n\n\t\t// Let's make transitions\n\t\thideView.addClass('clockpicker-dial-out');\n\t\tnextView.css('visibility', 'visible').removeClass('clockpicker-dial-out');\n\n\t\t// Reset clock hand\n\t\tthis.resetClock(delay);\n\n\t\t// After transitions ended\n\t\tclearTimeout(this.toggleViewTimer);\n\t\tthis.toggleViewTimer = setTimeout(function(){\n\t\t\thideView.css('visibility', 'hidden');\n\t\t}, duration);\n\n\t\tif (raiseAfterHourSelect) {\n\t\t\traiseCallback(this.options.afterHourSelect);\n\t\t}\n\t};\n\n\t// Reset clock hand\n\tClockPicker.prototype.resetClock = function(delay){\n\t\tvar view = this.currentView,\n\t\t\tvalue = this[view],\n\t\t\tisHours = view === 'hours',\n\t\t\tunit = Math.PI / (isHours ? 6 : 30),\n\t\t\tradian = value * unit,\n\t\t\tradius = isHours && value > 0 && value < 13 ? innerRadius : outerRadius,\n\t\t\tx = Math.sin(radian) * radius,\n\t\t\ty = - Math.cos(radian) * radius,\n\t\t\tself = this;\n\t\tif (svgSupported && delay) {\n\t\t\tself.canvas.addClass('clockpicker-canvas-out');\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.canvas.removeClass('clockpicker-canvas-out');\n\t\t\t\tself.setHand(x, y);\n\t\t\t}, delay);\n\t\t} else {\n\t\t\tthis.setHand(x, y);\n\t\t}\n\t};\n\n\t// Set clock hand to (x, y)\n\tClockPicker.prototype.setHand = function(x, y, roundBy5, dragging){\n\t\tvar radian = Math.atan2(x, - y),\n\t\t\tisHours = this.currentView === 'hours',\n\t\t\tunit = Math.PI / (isHours || roundBy5 ? 6 : 30),\n\t\t\tz = Math.sqrt(x * x + y * y),\n\t\t\toptions = this.options,\n\t\t\tinner = isHours && z < (outerRadius + innerRadius) / 2,\n\t\t\tradius = inner ? innerRadius : outerRadius,\n\t\t\tvalue;\n\n\t\t\tif (options.twelvehour) {\n\t\t\t\tradius = outerRadius;\n\t\t\t}\n\n\t\t// Radian should in range [0, 2PI]\n\t\tif (radian < 0) {\n\t\t\tradian = Math.PI * 2 + radian;\n\t\t}\n\n\t\t// Get the round value\n\t\tvalue = Math.round(radian / unit);\n\n\t\t// Get the round radian\n\t\tradian = value * unit;\n\n\t\t// Correct the hours or minutes\n\t\tif (options.twelvehour) {\n\t\t\tif (isHours) {\n\t\t\t\tif (value === 0) {\n\t\t\t\t\tvalue = 12;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (roundBy5) {\n\t\t\t\t\tvalue *= 5;\n\t\t\t\t}\n\t\t\t\tif (value === 60) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (isHours) {\n\t\t\t\tif (value === 12) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t\tvalue = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n\t\t\t} else {\n\t\t\t\tif (roundBy5) {\n\t\t\t\t\tvalue *= 5;\n\t\t\t\t}\n\t\t\t\tif (value === 60) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Once hours or minutes changed, vibrate the device\n\t\tif (this[this.currentView] !== value) {\n\t\t\tif (vibrate && this.options.vibrate) {\n\t\t\t\t// Do not vibrate too frequently\n\t\t\t\tif (! this.vibrateTimer) {\n\t\t\t\t\tnavigator[vibrate](10);\n\t\t\t\t\tthis.vibrateTimer = setTimeout($.proxy(function(){\n\t\t\t\t\t\tthis.vibrateTimer = null;\n\t\t\t\t\t}, this), 100);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis[this.currentView] = value;\n\t\tthis[isHours ? 'spanHours' : 'spanMinutes'].html(leadingZero(value));\n\n\t\t// If svg is not supported, just add an active class to the tick\n\t\tif (! svgSupported) {\n\t\t\tthis[isHours ? 'hoursView' : 'minutesView'].find('.clockpicker-tick').each(function(){\n\t\t\t\tvar tick = $(this);\n\t\t\t\ttick.toggleClass('active', value === + tick.html());\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Place clock hand at the top when dragging\n\t\tif (dragging || (! isHours && value % 5)) {\n\t\t\tthis.g.insertBefore(this.hand, this.bearing);\n\t\t\tthis.g.insertBefore(this.bg, this.fg);\n\t\t\tthis.bg.setAttribute('class', 'clockpicker-canvas-bg clockpicker-canvas-bg-trans');\n\t\t} else {\n\t\t\t// Or place it at the bottom\n\t\t\tthis.g.insertBefore(this.hand, this.bg);\n\t\t\tthis.g.insertBefore(this.fg, this.bg);\n\t\t\tthis.bg.setAttribute('class', 'clockpicker-canvas-bg');\n\t\t}\n\n\t\t// Set clock hand and others' position\n\t\tvar cx = Math.sin(radian) * radius,\n\t\t\tcy = - Math.cos(radian) * radius;\n\t\tthis.hand.setAttribute('x2', cx);\n\t\tthis.hand.setAttribute('y2', cy);\n\t\tthis.bg.setAttribute('cx', cx);\n\t\tthis.bg.setAttribute('cy', cy);\n\t\tthis.fg.setAttribute('cx', cx);\n\t\tthis.fg.setAttribute('cy', cy);\n\t};\n\n\t// Hours and minutes are selected\n\tClockPicker.prototype.done = function() {\n\t\traiseCallback(this.options.beforeDone);\n\t\tthis.hide();\n\t\tvar last = this.input.prop('value'),\n\t\t\tvalue = leadingZero(this.hours) + ':' + leadingZero(this.minutes);\n\n\t\tif (this.options.twelvehour) {\n\t\t\tvalue = value + ' ' +this.amOrPm;\n\t\t}\n\n\t\tthis.input.prop('value', value);\n\t\tif (value !== last) {\n\t\t\tthis.input.triggerHandler('change');\n\t\t\tif (! this.isInput) {\n\t\t\t\tthis.element.trigger('change');\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.autoclose) {\n\t\t\tthis.input.trigger('blur');\n\t\t}\n\n\t\traiseCallback(this.options.afterDone);\n\t};\n\n\t// Remove clockpicker from input\n\tClockPicker.prototype.remove = function() {\n\t\tthis.element.removeData('clockpicker');\n\t\tthis.input.off('focus.clockpicker click.clockpicker');\n\t\tthis.addon.off('click.clockpicker');\n\t\tif (this.isShown) {\n\t\t\tthis.hide();\n\t\t}\n\t\tif (this.isAppended) {\n\t\t\t$win.off('resize.clockpicker' + this.id);\n\t\t\tthis.popover.remove();\n\t\t}\n\t};\n\n\t// Extends $.fn.clockpicker\n\t$.fn.clockpicker = function(option){\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\t\treturn this.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('clockpicker');\n\t\t\tif (! data) {\n\t\t\t\tvar options = $.extend({}, ClockPicker.DEFAULTS, $this.data(), typeof option == 'object' && option);\n\t\t\t\t$this.data('clockpicker', new ClockPicker($this, options));\n\t\t\t} else {\n\t\t\t\t// Manual operatsions. show, hide, remove, e.g.\n\t\t\t\tif (typeof data[option] === 'function') {\n\t\t\t\t\tdata[option].apply(data, args);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n}());\n"
  },
  {
    "path": "modules/system/assets/vendor/dropzone/dropzone.esm.js",
    "content": "var v=F;function F(){var s=[].slice.call(arguments),e=!1;typeof s[0]==\"boolean\"&&(e=s.shift());var i=s[0];if(b(i))throw new Error(\"extendee must be an object\");for(var t=s.slice(1),n=t.length,l=0;l<n;l++){var a=t[l];for(var r in a)if(Object.prototype.hasOwnProperty.call(a,r)){var o=a[r];if(e&&w(o)){var d=Array.isArray(o)?[]:{};i[r]=F(!0,Object.prototype.hasOwnProperty.call(i,r)&&!b(i[r])?i[r]:d,o)}else i[r]=o}}return i}function w(s){return Array.isArray(s)||{}.toString.call(s)==\"[object Object]\"}function b(s){return!s||typeof s!=\"object\"&&typeof s!=\"function\"}function C(s){return s&&s.__esModule?s.default:s}var f=class{on(e,i){return this._callbacks=this._callbacks||{},this._callbacks[e]||(this._callbacks[e]=[]),this._callbacks[e].push(i),this}emit(e,...i){this._callbacks=this._callbacks||{};let t=this._callbacks[e];if(t)for(let n of t)n.apply(this,i);return this.element&&this.element.dispatchEvent(this.makeEvent(\"dropzone:\"+e,{args:i})),this}makeEvent(e,i){let t={bubbles:!0,cancelable:!0,detail:i};if(typeof window.CustomEvent==\"function\")return new CustomEvent(e,t);var n=document.createEvent(\"CustomEvent\");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}off(e,i){if(!this._callbacks||arguments.length===0)return this._callbacks={},this;let t=this._callbacks[e];if(!t)return this;if(arguments.length===1)return delete this._callbacks[e],this;for(let n=0;n<t.length;n++)if(t[n]===i){t.splice(n,1);break}return this}},y={};y=`<div class=\"dz-preview dz-file-preview\">\n  <div class=\"dz-image\"><img data-dz-thumbnail=\"\"></div>\n  <div class=\"dz-details\">\n    <div class=\"dz-size\"><span data-dz-size=\"\"></span></div>\n    <div class=\"dz-filename\"><span data-dz-name=\"\"></span></div>\n  </div>\n  <div class=\"dz-progress\">\n    <span class=\"dz-upload\" data-dz-uploadprogress=\"\"></span>\n  </div>\n  <div class=\"dz-error-message\"><span data-dz-errormessage=\"\"></span></div>\n  <div class=\"dz-success-mark\">\n    <svg width=\"54\" height=\"54\" viewBox=\"0 0 54 54\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M10.2071 29.7929L14.2929 25.7071C14.6834 25.3166 15.3166 25.3166 15.7071 25.7071L21.2929 31.2929C21.6834 31.6834 22.3166 31.6834 22.7071 31.2929L38.2929 15.7071C38.6834 15.3166 39.3166 15.3166 39.7071 15.7071L43.7929 19.7929C44.1834 20.1834 44.1834 20.8166 43.7929 21.2071L22.7071 42.2929C22.3166 42.6834 21.6834 42.6834 21.2929 42.2929L10.2071 31.2071C9.81658 30.8166 9.81658 30.1834 10.2071 29.7929Z\"></path>\n    </svg>\n  </div>\n  <div class=\"dz-error-mark\">\n    <svg width=\"54\" height=\"54\" viewBox=\"0 0 54 54\" fill=\"white\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M26.2929 20.2929L19.2071 13.2071C18.8166 12.8166 18.1834 12.8166 17.7929 13.2071L13.2071 17.7929C12.8166 18.1834 12.8166 18.8166 13.2071 19.2071L20.2929 26.2929C20.6834 26.6834 20.6834 27.3166 20.2929 27.7071L13.2071 34.7929C12.8166 35.1834 12.8166 35.8166 13.2071 36.2071L17.7929 40.7929C18.1834 41.1834 18.8166 41.1834 19.2071 40.7929L26.2929 33.7071C26.6834 33.3166 27.3166 33.3166 27.7071 33.7071L34.7929 40.7929C35.1834 41.1834 35.8166 41.1834 36.2071 40.7929L40.7929 36.2071C41.1834 35.8166 41.1834 35.1834 40.7929 34.7929L33.7071 27.7071C33.3166 27.3166 33.3166 26.6834 33.7071 26.2929L40.7929 19.2071C41.1834 18.8166 41.1834 18.1834 40.7929 17.7929L36.2071 13.2071C35.8166 12.8166 35.1834 12.8166 34.7929 13.2071L27.7071 20.2929C27.3166 20.6834 26.6834 20.6834 26.2929 20.2929Z\"></path>\n    </svg>\n  </div>\n</div>\n`;var k={url:null,method:\"post\",withCredentials:!1,timeout:null,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2097152,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:\"file\",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:\"crop\",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:\"contain\",filesizeBase:1e3,maxFiles:null,headers:null,defaultHeaders:!0,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,disablePreviews:!1,hiddenInputContainer:\"body\",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:\"Drop files here to upload\",dictFallbackMessage:\"Your browser does not support drag'n'drop file uploads.\",dictFallbackText:\"Please use the fallback form below to upload your files like in the olden days.\",dictFileTooBig:\"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",dictInvalidFileType:\"You can't upload files of this type.\",dictResponseError:\"Server responded with {{statusCode}} code.\",dictCancelUpload:\"Cancel upload\",dictUploadCanceled:\"Upload canceled.\",dictCancelUploadConfirmation:\"Are you sure you want to cancel this upload?\",dictRemoveFile:\"Remove file\",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:\"You can not upload any more files.\",dictFileSizeUnits:{tb:\"TB\",gb:\"GB\",mb:\"MB\",kb:\"KB\",b:\"b\"},init(){},params(s,e,i){if(i)return{dzuuid:i.file.upload.uuid,dzchunkindex:i.index,dztotalfilesize:i.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:i.file.upload.totalChunkCount,dzchunkbyteoffset:i.index*this.options.chunkSize}},accept(s,e){return e()},chunksUploaded:function(s,e){e()},binaryBody:!1,fallback(){let s;this.element.className=`${this.element.className} dz-browser-not-supported`;for(let i of this.element.getElementsByTagName(\"div\"))if(/(^| )dz-message($| )/.test(i.className)){s=i,i.className=\"dz-message\";break}s||(s=h.createElement('<div class=\"dz-message\"><span></span></div>'),this.element.appendChild(s));let e=s.getElementsByTagName(\"span\")[0];return e&&(e.textContent!=null?e.textContent=this.options.dictFallbackMessage:e.innerText!=null&&(e.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize(s,e,i,t){let n={srcX:0,srcY:0,srcWidth:s.width,srcHeight:s.height},l=s.width/s.height;e==null&&i==null?(e=n.srcWidth,i=n.srcHeight):e==null?e=i*l:i==null&&(i=e/l),e=Math.min(e,n.srcWidth),i=Math.min(i,n.srcHeight);let a=e/i;if(n.srcWidth>e||n.srcHeight>i)if(t===\"crop\")l>a?(n.srcHeight=s.height,n.srcWidth=n.srcHeight*a):(n.srcWidth=s.width,n.srcHeight=n.srcWidth/a);else if(t===\"contain\")l>a?i=e/l:e=i*l;else throw new Error(`Unknown resizeMethod '${t}'`);return n.srcX=(s.width-n.srcWidth)/2,n.srcY=(s.height-n.srcHeight)/2,n.trgWidth=e,n.trgHeight=i,n},transformFile(s,e){return(this.options.resizeWidth||this.options.resizeHeight)&&s.type.match(/image.*/)?this.resizeImage(s,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,e):e(s)},previewTemplate:C(y),drop(s){return this.element.classList.remove(\"dz-drag-hover\")},dragstart(s){},dragend(s){return this.element.classList.remove(\"dz-drag-hover\")},dragenter(s){return this.element.classList.add(\"dz-drag-hover\")},dragover(s){return this.element.classList.add(\"dz-drag-hover\")},dragleave(s){return this.element.classList.remove(\"dz-drag-hover\")},paste(s){},reset(){return this.element.classList.remove(\"dz-started\")},addedfile(s){if(this.element===this.previewsContainer&&this.element.classList.add(\"dz-started\"),this.previewsContainer&&!this.options.disablePreviews){s.previewElement=h.createElement(this.options.previewTemplate.trim()),s.previewTemplate=s.previewElement,this.previewsContainer.appendChild(s.previewElement);for(var e of s.previewElement.querySelectorAll(\"[data-dz-name]\"))e.textContent=s.name;for(e of s.previewElement.querySelectorAll(\"[data-dz-size]\"))e.innerHTML=this.filesize(s.size);this.options.addRemoveLinks&&(s._removeLink=h.createElement(`<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>${this.options.dictRemoveFile}</a>`),s.previewElement.appendChild(s._removeLink));let i=t=>(t.preventDefault(),t.stopPropagation(),s.status===h.UPLOADING?h.confirm(this.options.dictCancelUploadConfirmation,()=>this.removeFile(s)):this.options.dictRemoveFileConfirmation?h.confirm(this.options.dictRemoveFileConfirmation,()=>this.removeFile(s)):this.removeFile(s));for(let t of s.previewElement.querySelectorAll(\"[data-dz-remove]\"))t.addEventListener(\"click\",i)}},removedfile(s){return s.previewElement!=null&&s.previewElement.parentNode!=null&&s.previewElement.parentNode.removeChild(s.previewElement),this._updateMaxFilesReachedClass()},thumbnail(s,e){if(s.previewElement){s.previewElement.classList.remove(\"dz-file-preview\");for(let i of s.previewElement.querySelectorAll(\"[data-dz-thumbnail]\"))i.alt=s.name,i.src=e;return setTimeout(()=>s.previewElement.classList.add(\"dz-image-preview\"),1)}},error(s,e){if(s.previewElement){s.previewElement.classList.add(\"dz-error\"),typeof e!=\"string\"&&e.error&&(e=e.error);for(let i of s.previewElement.querySelectorAll(\"[data-dz-errormessage]\"))i.textContent=e}},errormultiple(){},processing(s){if(s.previewElement&&(s.previewElement.classList.add(\"dz-processing\"),s._removeLink))return s._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple(){},uploadprogress(s,e,i){if(s.previewElement)for(let t of s.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\"))t.nodeName===\"PROGRESS\"?t.value=e:t.style.width=`${e}%`},totaluploadprogress(){},sending(){},sendingmultiple(){},success(s){if(s.previewElement)return s.previewElement.classList.add(\"dz-success\")},successmultiple(){},canceled(s){return this.emit(\"error\",s,this.options.dictUploadCanceled)},canceledmultiple(){},complete(s){if(s._removeLink&&(s._removeLink.innerHTML=this.options.dictRemoveFile),s.previewElement)return s.previewElement.classList.add(\"dz-complete\")},completemultiple(){},maxfilesexceeded(){},maxfilesreached(){},queuecomplete(){},addedfiles(){}},z=k,h=class s extends f{static initClass(){this.prototype.Emitter=f,this.prototype.events=[\"drop\",\"dragstart\",\"dragend\",\"dragenter\",\"dragover\",\"dragleave\",\"addedfile\",\"addedfiles\",\"removedfile\",\"thumbnail\",\"error\",\"errormultiple\",\"processing\",\"processingmultiple\",\"uploadprogress\",\"totaluploadprogress\",\"sending\",\"sendingmultiple\",\"success\",\"successmultiple\",\"canceled\",\"canceledmultiple\",\"complete\",\"completemultiple\",\"reset\",\"maxfilesexceeded\",\"maxfilesreached\",\"queuecomplete\"],this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}getAcceptedFiles(){return this.files.filter(e=>e.accepted).map(e=>e)}getRejectedFiles(){return this.files.filter(e=>!e.accepted).map(e=>e)}getFilesWithStatus(e){return this.files.filter(i=>i.status===e).map(i=>i)}getQueuedFiles(){return this.getFilesWithStatus(s.QUEUED)}getUploadingFiles(){return this.getFilesWithStatus(s.UPLOADING)}getAddedFiles(){return this.getFilesWithStatus(s.ADDED)}getActiveFiles(){return this.files.filter(e=>e.status===s.UPLOADING||e.status===s.QUEUED).map(e=>e)}init(){if(this.element.tagName===\"form\"&&this.element.setAttribute(\"enctype\",\"multipart/form-data\"),this.element.classList.contains(\"dropzone\")&&!this.element.querySelector(\".dz-message\")&&this.element.appendChild(s.createElement(`<div class=\"dz-default dz-message\"><button class=\"dz-button\" type=\"button\">${this.options.dictDefaultMessage}</button></div>`)),this.clickableElements.length){let t=()=>{this.hiddenFileInput&&this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=document.createElement(\"input\"),this.hiddenFileInput.setAttribute(\"type\",\"file\"),(this.options.maxFiles===null||this.options.maxFiles>1)&&this.hiddenFileInput.setAttribute(\"multiple\",\"multiple\"),this.hiddenFileInput.className=\"dz-hidden-input\",this.options.acceptedFiles!==null&&this.hiddenFileInput.setAttribute(\"accept\",this.options.acceptedFiles),this.options.capture!==null&&this.hiddenFileInput.setAttribute(\"capture\",this.options.capture),this.hiddenFileInput.setAttribute(\"tabindex\",\"-1\"),this.hiddenFileInput.style.visibility=\"hidden\",this.hiddenFileInput.style.position=\"absolute\",this.hiddenFileInput.style.top=\"0\",this.hiddenFileInput.style.left=\"0\",this.hiddenFileInput.style.height=\"0\",this.hiddenFileInput.style.width=\"0\",s.getElement(this.options.hiddenInputContainer,\"hiddenInputContainer\").appendChild(this.hiddenFileInput),this.hiddenFileInput.addEventListener(\"change\",()=>{let{files:n}=this.hiddenFileInput;if(n.length)for(let l of n)this.addFile(l);this.emit(\"addedfiles\",n),t()})};t()}this.URL=window.URL!==null?window.URL:window.webkitURL;for(let t of this.events)this.on(t,this.options[t]);this.on(\"uploadprogress\",()=>this.updateTotalUploadProgress()),this.on(\"removedfile\",()=>this.updateTotalUploadProgress()),this.on(\"canceled\",t=>this.emit(\"complete\",t)),this.on(\"complete\",t=>{if(this.getAddedFiles().length===0&&this.getUploadingFiles().length===0&&this.getQueuedFiles().length===0)return setTimeout(()=>this.emit(\"queuecomplete\"),0)});let e=function(t){if(t.dataTransfer.types){for(var n=0;n<t.dataTransfer.types.length;n++)if(t.dataTransfer.types[n]===\"Files\")return!0}return!1},i=function(t){if(e(t))return t.stopPropagation(),t.preventDefault?t.preventDefault():t.returnValue=!1};return this.listeners=[{element:this.element,events:{dragstart:t=>this.emit(\"dragstart\",t),dragenter:t=>(i(t),this.emit(\"dragenter\",t)),dragover:t=>{let n;try{n=t.dataTransfer.effectAllowed}catch{}return t.dataTransfer.dropEffect=n===\"move\"||n===\"linkMove\"?\"move\":\"copy\",i(t),this.emit(\"dragover\",t)},dragleave:t=>this.emit(\"dragleave\",t),drop:t=>(i(t),this.drop(t)),dragend:t=>this.emit(\"dragend\",t)}}],this.clickableElements.forEach(t=>this.listeners.push({element:t,events:{click:n=>((t!==this.element||n.target===this.element||s.elementInside(n.target,this.element.querySelector(\".dz-message\")))&&this.hiddenFileInput.click(),!0)}})),this.enable(),this.options.init.call(this)}destroy(){return this.disable(),this.removeAllFiles(!0),this.hiddenFileInput!=null&&this.hiddenFileInput.parentNode&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,s.instances.splice(s.instances.indexOf(this),1)}updateTotalUploadProgress(){let e,i=0,t=0;if(this.getActiveFiles().length){for(let l of this.getActiveFiles())i+=l.upload.bytesSent,t+=l.upload.total;e=100*i/t}else e=100;return this.emit(\"totaluploadprogress\",e,t,i)}_getParamName(e){return typeof this.options.paramName==\"function\"?this.options.paramName(e):`${this.options.paramName}${this.options.uploadMultiple?`[${e}]`:\"\"}`}_renameFile(e){return typeof this.options.renameFile!=\"function\"?e.name:this.options.renameFile(e)}getFallbackForm(){let e,i;if(e=this.getExistingFallback())return e;let t='<div class=\"dz-fallback\">';this.options.dictFallbackText&&(t+=`<p>${this.options.dictFallbackText}</p>`),t+=`<input type=\"file\" name=\"${this._getParamName(0)}\" ${this.options.uploadMultiple?'multiple=\"multiple\"':void 0} /><input type=\"submit\" value=\"Upload!\"></div>`;let n=s.createElement(t);return this.element.tagName!==\"FORM\"?(i=s.createElement(`<form action=\"${this.options.url}\" enctype=\"multipart/form-data\" method=\"${this.options.method}\"></form>`),i.appendChild(n)):(this.element.setAttribute(\"enctype\",\"multipart/form-data\"),this.element.setAttribute(\"method\",this.options.method)),i??n}getExistingFallback(){let e=function(t){for(let n of t)if(/(^| )fallback($| )/.test(n.className))return n};for(let t of[\"div\",\"form\"]){var i;if(i=e(this.element.getElementsByTagName(t)))return i}}setupEventListeners(){return this.listeners.map(e=>(()=>{let i=[];for(let t in e.events){let n=e.events[t];i.push(e.element.addEventListener(t,n,!1))}return i})())}removeEventListeners(){return this.listeners.map(e=>(()=>{let i=[];for(let t in e.events){let n=e.events[t];i.push(e.element.removeEventListener(t,n,!1))}return i})())}disable(){return this.clickableElements.forEach(e=>e.classList.remove(\"dz-clickable\")),this.removeEventListeners(),this.disabled=!0,this.files.map(e=>this.cancelUpload(e))}enable(){return delete this.disabled,this.clickableElements.forEach(e=>e.classList.add(\"dz-clickable\")),this.setupEventListeners()}filesize(e){let i=0,t=\"b\";if(e>0){let n=[\"tb\",\"gb\",\"mb\",\"kb\",\"b\"];for(let l=0;l<n.length;l++){let a=n[l],r=Math.pow(this.options.filesizeBase,4-l)/10;if(e>=r){i=e/Math.pow(this.options.filesizeBase,4-l),t=a;break}}i=Math.round(10*i)/10}return`<strong>${i}</strong> ${this.options.dictFileSizeUnits[t]}`}_updateMaxFilesReachedClass(){return this.options.maxFiles!=null&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit(\"maxfilesreached\",this.files),this.element.classList.add(\"dz-max-files-reached\")):this.element.classList.remove(\"dz-max-files-reached\")}drop(e){if(!e.dataTransfer)return;this.emit(\"drop\",e);let i=[];for(let t=0;t<e.dataTransfer.files.length;t++)i[t]=e.dataTransfer.files[t];if(i.length){let{items:t}=e.dataTransfer;t&&t.length&&t[0].webkitGetAsEntry!=null?this._addFilesFromItems(t):this.handleFiles(i)}this.emit(\"addedfiles\",i)}paste(e){if(A(e?.clipboardData,t=>t.items)==null)return;this.emit(\"paste\",e);let{items:i}=e.clipboardData;if(i.length)return this._addFilesFromItems(i)}handleFiles(e){for(let i of e)this.addFile(i)}_addFilesFromItems(e){return(()=>{let i=[];for(let n of e){var t;n.webkitGetAsEntry!=null&&(t=n.webkitGetAsEntry())?t.isFile?i.push(this.addFile(n.getAsFile())):t.isDirectory?i.push(this._addFilesFromDirectory(t,t.name)):i.push(void 0):n.getAsFile!=null&&(n.kind==null||n.kind===\"file\")?i.push(this.addFile(n.getAsFile())):i.push(void 0)}return i})()}_addFilesFromDirectory(e,i){let t=e.createReader(),n=a=>U(console,\"log\",r=>r.log(a));var l=()=>t.readEntries(a=>{if(a.length>0){for(let r of a)r.isFile?r.file(o=>{if(!(this.options.ignoreHiddenFiles&&o.name.substring(0,1)===\".\"))return o.fullPath=`${i}/${o.name}`,this.addFile(o)}):r.isDirectory&&this._addFilesFromDirectory(r,`${i}/${r.name}`);l()}return null},n);return l()}accept(e,i){this.options.maxFilesize&&e.size>this.options.maxFilesize*1048576?i(this.options.dictFileTooBig.replace(\"{{filesize}}\",Math.round(e.size/1024/10.24)/100).replace(\"{{maxFilesize}}\",this.options.maxFilesize)):s.isValidFile(e,this.options.acceptedFiles)?this.options.maxFiles!=null&&this.getAcceptedFiles().length>=this.options.maxFiles?(i(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\",this.options.maxFiles)),this.emit(\"maxfilesexceeded\",e)):this.options.accept.call(this,e,i):i(this.options.dictInvalidFileType)}addFile(e){e.upload={uuid:s.uuidv4(),progress:0,total:e.size,bytesSent:0,filename:this._renameFile(e)},this.files.push(e),e.status=s.ADDED,this.emit(\"addedfile\",e),this._enqueueThumbnail(e),this.accept(e,i=>{i?(e.accepted=!1,this._errorProcessing([e],i)):(e.accepted=!0,this.options.autoQueue&&this.enqueueFile(e)),this._updateMaxFilesReachedClass()})}enqueueFiles(e){for(let i of e)this.enqueueFile(i);return null}enqueueFile(e){if(e.status===s.ADDED&&e.accepted===!0){if(e.status=s.QUEUED,this.options.autoProcessQueue)return setTimeout(()=>this.processQueue(),0)}else throw new Error(\"This file can't be queued because it has already been processed or was rejected.\")}_enqueueThumbnail(e){if(this.options.createImageThumbnails&&e.type.match(/image.*/)&&e.size<=this.options.maxThumbnailFilesize*1048576)return this._thumbnailQueue.push(e),setTimeout(()=>this._processThumbnailQueue(),0)}_processThumbnailQueue(){if(this._processingThumbnail||this._thumbnailQueue.length===0)return;this._processingThumbnail=!0;let e=this._thumbnailQueue.shift();return this.createThumbnail(e,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,i=>(this.emit(\"thumbnail\",e,i),this._processingThumbnail=!1,this._processThumbnailQueue()))}removeFile(e){if(e.status===s.UPLOADING&&this.cancelUpload(e),this.files=x(this.files,e),this.emit(\"removedfile\",e),this.files.length===0)return this.emit(\"reset\")}removeAllFiles(e){e==null&&(e=!1);for(let i of this.files.slice())(i.status!==s.UPLOADING||e)&&this.removeFile(i);return null}resizeImage(e,i,t,n,l){return this.createThumbnail(e,i,t,n,!0,(a,r)=>{if(r==null)return l(e);{let{resizeMimeType:o}=this.options;o==null&&(o=e.type);let d=r.toDataURL(o,this.options.resizeQuality);return(o===\"image/jpeg\"||o===\"image/jpg\")&&(d=g.restore(e.dataURL,d)),l(s.dataURItoBlob(d))}})}createThumbnail(e,i,t,n,l,a){let r=new FileReader;r.onload=()=>{if(e.dataURL=r.result,e.type===\"image/svg+xml\"){a?.(r.result);return}this.createThumbnailFromUrl(e,i,t,n,l,a)},r.readAsDataURL(e)}displayExistingFile(e,i,t,n,l=!0){if(this.emit(\"addedfile\",e),this.emit(\"complete\",e),!l)this.emit(\"thumbnail\",e,i),t&&t();else{let a=r=>{this.emit(\"thumbnail\",e,r),t&&t()};e.dataURL=i,this.createThumbnailFromUrl(e,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,this.options.fixOrientation,a,n)}}createThumbnailFromUrl(e,i,t,n,l,a,r){let o=document.createElement(\"img\");return r&&(o.crossOrigin=r),l=getComputedStyle(document.body).imageOrientation==\"from-image\"?!1:l,o.onload=()=>{let d=u=>u(1);return typeof EXIF<\"u\"&&EXIF!==null&&l&&(d=u=>EXIF.getData(o,function(){return u(EXIF.getTag(this,\"Orientation\"))})),d(u=>{e.width=o.width,e.height=o.height;let p=this.options.resize.call(this,e,i,t,n),c=document.createElement(\"canvas\"),m=c.getContext(\"2d\");switch(c.width=p.trgWidth,c.height=p.trgHeight,u>4&&(c.width=p.trgHeight,c.height=p.trgWidth),u){case 2:m.translate(c.width,0),m.scale(-1,1);break;case 3:m.translate(c.width,c.height),m.rotate(Math.PI);break;case 4:m.translate(0,c.height),m.scale(1,-1);break;case 5:m.rotate(.5*Math.PI),m.scale(1,-1);break;case 6:m.rotate(.5*Math.PI),m.translate(0,-c.width);break;case 7:m.rotate(.5*Math.PI),m.translate(c.height,-c.width),m.scale(-1,1);break;case 8:m.rotate(-.5*Math.PI),m.translate(-c.height,0);break}T(m,o,p.srcX!=null?p.srcX:0,p.srcY!=null?p.srcY:0,p.srcWidth,p.srcHeight,p.trgX!=null?p.trgX:0,p.trgY!=null?p.trgY:0,p.trgWidth,p.trgHeight);let E=c.toDataURL(\"image/png\");if(a!=null)return a(E,c)})},a!=null&&(o.onerror=a),o.src=e.dataURL}processQueue(){let{parallelUploads:e}=this.options,i=this.getUploadingFiles().length,t=i;if(i>=e)return;let n=this.getQueuedFiles();if(n.length>0){if(this.options.uploadMultiple)return this.processFiles(n.slice(0,e-i));for(;t<e;){if(!n.length)return;this.processFile(n.shift()),t++}}}processFile(e){return this.processFiles([e])}processFiles(e){for(let i of e)i.processing=!0,i.status=s.UPLOADING,this.emit(\"processing\",i);return this.options.uploadMultiple&&this.emit(\"processingmultiple\",e),this.uploadFiles(e)}_getFilesWithXhr(e){let i;return i=this.files.filter(t=>t.xhr===e).map(t=>t)}cancelUpload(e){if(e.status===s.UPLOADING){let i=this._getFilesWithXhr(e.xhr);for(let t of i)t.status=s.CANCELED;typeof e.xhr<\"u\"&&e.xhr.abort();for(let t of i)this.emit(\"canceled\",t);this.options.uploadMultiple&&this.emit(\"canceledmultiple\",i)}else(e.status===s.ADDED||e.status===s.QUEUED)&&(e.status=s.CANCELED,this.emit(\"canceled\",e),this.options.uploadMultiple&&this.emit(\"canceledmultiple\",[e]));if(this.options.autoProcessQueue)return this.processQueue()}resolveOption(e,...i){return typeof e==\"function\"?e.apply(this,i):e}uploadFile(e){return this.uploadFiles([e])}uploadFiles(e){this._transformFiles(e,i=>{if(this.options.chunking){let t=i[0];e[0].upload.chunked=this.options.chunking&&(this.options.forceChunking||t.size>this.options.chunkSize),e[0].upload.totalChunkCount=Math.ceil(t.size/this.options.chunkSize)}if(e[0].upload.chunked){let t=e[0],n=i[0],l=0;t.upload.chunks=[];let a=()=>{let r=0;for(;t.upload.chunks[r]!==void 0;)r++;if(r>=t.upload.totalChunkCount)return;l++;let o=r*this.options.chunkSize,d=Math.min(o+this.options.chunkSize,n.size),u={name:this._getParamName(0),data:n.webkitSlice?n.webkitSlice(o,d):n.slice(o,d),filename:t.upload.filename,chunkIndex:r};t.upload.chunks[r]={file:t,index:r,dataBlock:u,status:s.UPLOADING,progress:0,retries:0},this._uploadData(e,[u])};if(t.upload.finishedChunkUpload=(r,o)=>{let d=!0;r.status=s.SUCCESS,r.dataBlock=null,r.response=r.xhr.responseText,r.responseHeaders=r.xhr.getAllResponseHeaders(),r.xhr=null;for(let u=0;u<t.upload.totalChunkCount;u++){if(t.upload.chunks[u]===void 0)return a();t.upload.chunks[u].status!==s.SUCCESS&&(d=!1)}d&&this.options.chunksUploaded(t,()=>{this._finished(e,o,null)})},this.options.parallelChunkUploads)for(let r=0;r<t.upload.totalChunkCount;r++)a();else a()}else{let t=[];for(let n=0;n<e.length;n++)t[n]={name:this._getParamName(n),data:i[n],filename:e[n].upload.filename};this._uploadData(e,t)}})}_getChunk(e,i){for(let t=0;t<e.upload.totalChunkCount;t++)if(e.upload.chunks[t]!==void 0&&e.upload.chunks[t].xhr===i)return e.upload.chunks[t]}_uploadData(e,i){let t=new XMLHttpRequest;for(let d of e)d.xhr=t;e[0].upload.chunked&&(e[0].upload.chunks[i[0].chunkIndex].xhr=t);let n=this.resolveOption(this.options.method,e,i),l=this.resolveOption(this.options.url,e,i);t.open(n,l,!0),this.resolveOption(this.options.timeout,e)&&(t.timeout=this.resolveOption(this.options.timeout,e)),t.withCredentials=!!this.options.withCredentials,t.onload=d=>{this._finishedUploading(e,t,d)},t.ontimeout=()=>{this._handleUploadError(e,t,`Request timedout after ${this.options.timeout/1e3} seconds`)},t.onerror=()=>{this._handleUploadError(e,t)};let r=t.upload!=null?t.upload:t;r.onprogress=d=>this._updateFilesUploadProgress(e,t,d);let o=this.options.defaultHeaders?{Accept:\"application/json\",\"Cache-Control\":\"no-cache\",\"X-Requested-With\":\"XMLHttpRequest\"}:{};this.options.binaryBody&&(o[\"Content-Type\"]=e[0].type),this.options.headers&&v(o,this.options.headers);for(let d in o){let u=o[d];u&&t.setRequestHeader(d,u)}if(this.options.binaryBody){for(let d of e)this.emit(\"sending\",d,t);this.options.uploadMultiple&&this.emit(\"sendingmultiple\",e,t),this.submitRequest(t,null,e)}else{let d=new FormData;if(this.options.params){let u=this.options.params;typeof u==\"function\"&&(u=u.call(this,e,t,e[0].upload.chunked?this._getChunk(e[0],t):null));for(let p in u){let c=u[p];if(Array.isArray(c))for(let m=0;m<c.length;m++)d.append(p,c[m]);else d.append(p,c)}}for(let u of e)this.emit(\"sending\",u,t,d);this.options.uploadMultiple&&this.emit(\"sendingmultiple\",e,t,d),this._addFormElementData(d);for(let u=0;u<i.length;u++){let p=i[u];d.append(p.name,p.data,p.filename)}this.submitRequest(t,d,e)}}_transformFiles(e,i){let t=[],n=0;for(let l=0;l<e.length;l++)this.options.transformFile.call(this,e[l],a=>{t[l]=a,++n===e.length&&i(t)})}_addFormElementData(e){if(this.element.tagName===\"FORM\")for(let i of this.element.querySelectorAll(\"input, textarea, select, button\")){let t=i.getAttribute(\"name\"),n=i.getAttribute(\"type\");if(n&&(n=n.toLowerCase()),!(typeof t>\"u\"||t===null))if(i.tagName===\"SELECT\"&&i.hasAttribute(\"multiple\"))for(let l of i.options)l.selected&&e.append(t,l.value);else(!n||n!==\"checkbox\"&&n!==\"radio\"||i.checked)&&e.append(t,i.value)}}_updateFilesUploadProgress(e,i,t){if(e[0].upload.chunked){let n=e[0],l=this._getChunk(n,i);t?(l.progress=100*t.loaded/t.total,l.total=t.total,l.bytesSent=t.loaded):(l.progress=100,l.bytesSent=l.total),n.upload.progress=0,n.upload.total=0,n.upload.bytesSent=0;for(let a=0;a<n.upload.totalChunkCount;a++)n.upload.chunks[a]&&typeof n.upload.chunks[a].progress<\"u\"&&(n.upload.progress+=n.upload.chunks[a].progress,n.upload.total+=n.upload.chunks[a].total,n.upload.bytesSent+=n.upload.chunks[a].bytesSent);n.upload.progress=n.upload.progress/n.upload.totalChunkCount,this.emit(\"uploadprogress\",n,n.upload.progress,n.upload.bytesSent)}else for(let n of e)n.upload.total&&n.upload.bytesSent&&n.upload.bytesSent==n.upload.total||(t?(n.upload.progress=100*t.loaded/t.total,n.upload.total=t.total,n.upload.bytesSent=t.loaded):(n.upload.progress=100,n.upload.bytesSent=n.upload.total),this.emit(\"uploadprogress\",n,n.upload.progress,n.upload.bytesSent))}_finishedUploading(e,i,t){let n;if(e[0].status!==s.CANCELED&&i.readyState===4){if(i.responseType!==\"arraybuffer\"&&i.responseType!==\"blob\"&&(n=i.responseText,i.getResponseHeader(\"content-type\")&&~i.getResponseHeader(\"content-type\").indexOf(\"application/json\")))try{n=JSON.parse(n)}catch(l){t=l,n=\"Invalid JSON response from server.\"}this._updateFilesUploadProgress(e,i),200<=i.status&&i.status<300?e[0].upload.chunked?e[0].upload.finishedChunkUpload(this._getChunk(e[0],i),n):this._finished(e,n,t):this._handleUploadError(e,i,n)}}_handleUploadError(e,i,t){if(e[0].status!==s.CANCELED){if(e[0].upload.chunked&&this.options.retryChunks){let n=this._getChunk(e[0],i);if(n.retries++<this.options.retryChunksLimit){this._uploadData(e,[n.dataBlock]);return}else console.warn(\"Retried this chunk too often. Giving up.\")}this._errorProcessing(e,t||this.options.dictResponseError.replace(\"{{statusCode}}\",i.status),i)}}submitRequest(e,i,t){if(e.readyState!=1){console.warn(\"Cannot send this request because the XMLHttpRequest.readyState is not OPENED.\");return}if(this.options.binaryBody)if(t[0].upload.chunked){let n=this._getChunk(t[0],e);e.send(n.dataBlock.data)}else e.send(t[0]);else e.send(i)}_finished(e,i,t){for(let n of e)n.status=s.SUCCESS,this.emit(\"success\",n,i,t),this.emit(\"complete\",n);if(this.options.uploadMultiple&&(this.emit(\"successmultiple\",e,i,t),this.emit(\"completemultiple\",e)),this.options.autoProcessQueue)return this.processQueue()}_errorProcessing(e,i,t){for(let n of e)n.status=s.ERROR,this.emit(\"error\",n,i,t),this.emit(\"complete\",n);if(this.options.uploadMultiple&&(this.emit(\"errormultiple\",e,i,t),this.emit(\"completemultiple\",e)),this.options.autoProcessQueue)return this.processQueue()}static uuidv4(){return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g,function(e){let i=Math.random()*16|0;return(e===\"x\"?i:i&3|8).toString(16)})}constructor(e,i){super();let t,n;if(this.element=e,this.clickableElements=[],this.listeners=[],this.files=[],typeof this.element==\"string\"&&(this.element=document.querySelector(this.element)),!this.element||this.element.nodeType==null)throw new Error(\"Invalid dropzone element.\");if(this.element.dropzone)throw new Error(\"Dropzone already attached.\");s.instances.push(this),this.element.dropzone=this;let l=(n=s.optionsForElement(this.element))!=null?n:{};if(this.options=v(!0,{},z,l,i??{}),this.options.previewTemplate=this.options.previewTemplate.replace(/\\n*/g,\"\"),this.options.forceFallback||!s.isBrowserSupported())return this.options.fallback.call(this);if(this.options.url==null&&(this.options.url=this.element.getAttribute(\"action\")),!this.options.url)throw new Error(\"No URL provided.\");if(this.options.acceptedFiles&&this.options.acceptedMimeTypes)throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");if(this.options.uploadMultiple&&this.options.chunking)throw new Error(\"You cannot set both: uploadMultiple and chunking.\");if(this.options.binaryBody&&this.options.uploadMultiple)throw new Error(\"You cannot set both: binaryBody and uploadMultiple.\");this.options.acceptedMimeTypes&&(this.options.acceptedFiles=this.options.acceptedMimeTypes,delete this.options.acceptedMimeTypes),this.options.renameFilename!=null&&(this.options.renameFile=a=>this.options.renameFilename.call(this,a.name,a)),typeof this.options.method==\"string\"&&(this.options.method=this.options.method.toUpperCase()),(t=this.getExistingFallback())&&t.parentNode&&t.parentNode.removeChild(t),this.options.previewsContainer!==!1&&(this.options.previewsContainer?this.previewsContainer=s.getElement(this.options.previewsContainer,\"previewsContainer\"):this.previewsContainer=this.element),this.options.clickable&&(this.options.clickable===!0?this.clickableElements=[this.element]:this.clickableElements=s.getElements(this.options.clickable,\"clickable\")),this.init()}};h.initClass();h.options={};h.optionsForElement=function(s){if(s.getAttribute(\"id\"))return h.options[L(s.getAttribute(\"id\"))]};h.instances=[];h.forElement=function(s){if(typeof s==\"string\"&&(s=document.querySelector(s)),s?.dropzone==null)throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");return s.dropzone};h.discover=function(){let s;if(document.querySelectorAll)s=document.querySelectorAll(\".dropzone\");else{s=[];let e=i=>(()=>{let t=[];for(let n of i)/(^| )dropzone($| )/.test(n.className)?t.push(s.push(n)):t.push(void 0);return t})();e(document.getElementsByTagName(\"div\")),e(document.getElementsByTagName(\"form\"))}return(()=>{let e=[];for(let i of s)h.optionsForElement(i)!==!1?e.push(new h(i)):e.push(void 0);return e})()};h.blockedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\\/12/i];h.isBrowserSupported=function(){let s=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if(!(\"classList\"in document.createElement(\"a\")))s=!1;else{h.blacklistedBrowsers!==void 0&&(h.blockedBrowsers=h.blacklistedBrowsers);for(let e of h.blockedBrowsers)if(e.test(navigator.userAgent)){s=!1;continue}}else s=!1;return s};h.dataURItoBlob=function(s){let e=atob(s.split(\",\")[1]),i=s.split(\",\")[0].split(\":\")[1].split(\";\")[0],t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let l=0,a=e.length,r=0<=a;r?l<=a:l>=a;r?l++:l--)n[l]=e.charCodeAt(l);return new Blob([t],{type:i})};var x=(s,e)=>s.filter(i=>i!==e).map(i=>i),L=s=>s.replace(/[\\-_](\\w)/g,e=>e.charAt(1).toUpperCase());h.createElement=function(s){let e=document.createElement(\"div\");return e.innerHTML=s,e.childNodes[0]};h.elementInside=function(s,e){if(s===e)return!0;for(;s=s.parentNode;)if(s===e)return!0;return!1};h.getElement=function(s,e){let i;if(typeof s==\"string\"?i=document.querySelector(s):s.nodeType!=null&&(i=s),i==null)throw new Error(`Invalid \\`${e}\\` option provided. Please provide a CSS selector or a plain HTML element.`);return i};h.getElements=function(s,e){let i,t;if(s instanceof Array){t=[];try{for(i of s)t.push(this.getElement(i,e))}catch{t=null}}else if(typeof s==\"string\"){t=[];for(i of document.querySelectorAll(s))t.push(i)}else s.nodeType!=null&&(t=[s]);if(t==null||!t.length)throw new Error(`Invalid \\`${e}\\` option provided. Please provide a CSS selector, a plain HTML element or a list of those.`);return t};h.confirm=function(s,e,i){if(window.confirm(s))return e();if(i!=null)return i()};h.isValidFile=function(s,e){if(!e)return!0;e=e.split(\",\");let i=s.type,t=i.replace(/\\/.*$/,\"\");for(let n of e)if(n=n.trim(),n.charAt(0)===\".\"){if(s.name.toLowerCase().indexOf(n.toLowerCase(),s.name.length-n.length)!==-1)return!0}else if(/\\/\\*$/.test(n)){if(t===n.replace(/\\/.*$/,\"\"))return!0}else if(i===n)return!0;return!1};typeof jQuery<\"u\"&&jQuery!==null&&(jQuery.fn.dropzone=function(s){return this.each(function(){return new h(this,s)})});h.ADDED=\"added\";h.QUEUED=\"queued\";h.ACCEPTED=h.QUEUED;h.UPLOADING=\"uploading\";h.PROCESSING=h.UPLOADING;h.CANCELED=\"canceled\";h.ERROR=\"error\";h.SUCCESS=\"success\";var S=function(s){let e=s.naturalWidth,i=s.naturalHeight,t=document.createElement(\"canvas\");t.width=1,t.height=i;let n=t.getContext(\"2d\");n.drawImage(s,0,0);let{data:l}=n.getImageData(1,0,1,i),a=0,r=i,o=i;for(;o>a;)l[(o-1)*4+3]===0?r=o:a=o,o=r+a>>1;let d=o/i;return d===0?1:d},T=function(s,e,i,t,n,l,a,r,o,d){let u=S(e);return s.drawImage(e,i,t,n,l,a,r,o,d/u)},g=class{static initClass(){this.KEY_STR=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}static encode64(e){let i=\"\",t,n,l=\"\",a,r,o,d=\"\",u=0;for(;t=e[u++],n=e[u++],l=e[u++],a=t>>2,r=(t&3)<<4|n>>4,o=(n&15)<<2|l>>6,d=l&63,isNaN(n)?o=d=64:isNaN(l)&&(d=64),i=i+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(r)+this.KEY_STR.charAt(o)+this.KEY_STR.charAt(d),t=n=l=\"\",a=r=o=d=\"\",u<e.length;);return i}static restore(e,i){if(!e.match(\"data:image/jpeg;base64,\"))return i;let t=this.decode64(e.replace(\"data:image/jpeg;base64,\",\"\")),n=this.slice2Segments(t),l=this.exifManipulation(i,n);return`data:image/jpeg;base64,${this.encode64(l)}`}static exifManipulation(e,i){let t=this.getExifArray(i),n=this.insertExif(e,t);return new Uint8Array(n)}static getExifArray(e){let i,t=0;for(;t<e.length;){if(i=e[t],i[0]===255&i[1]===225)return i;t++}return[]}static insertExif(e,i){let t=e.replace(\"data:image/jpeg;base64,\",\"\"),n=this.decode64(t),l=n.indexOf(255,3),a=n.slice(0,l),r=n.slice(l),o=a;return o=o.concat(i),o=o.concat(r),o}static slice2Segments(e){let i=0,t=[];for(;;){var n;if(e[i]===255&e[i+1]===218)break;if(e[i]===255&e[i+1]===216)i+=2;else{n=e[i+2]*256+e[i+3];let l=i+n+2,a=e.slice(i,l);t.push(a),i=l}if(i>e.length)break}return t}static decode64(e){let i=\"\",t,n,l=\"\",a,r,o,d=\"\",u=0,p=[];for(/[^A-Za-z0-9\\+\\/\\=]/g.exec(e)&&console.warn(`There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding.`),e=e.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");a=this.KEY_STR.indexOf(e.charAt(u++)),r=this.KEY_STR.indexOf(e.charAt(u++)),o=this.KEY_STR.indexOf(e.charAt(u++)),d=this.KEY_STR.indexOf(e.charAt(u++)),t=a<<2|r>>4,n=(r&15)<<4|o>>2,l=(o&3)<<6|d,p.push(t),o!==64&&p.push(n),d!==64&&p.push(l),t=n=l=\"\",a=r=o=d=\"\",u<e.length;);return p}};g.initClass();function A(s,e){return typeof s<\"u\"&&s!==null?e(s):void 0}function U(s,e,i){if(typeof s<\"u\"&&s!==null&&typeof s[e]==\"function\")return i(s,e)}export{h as Dropzone,h as default};\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/base-styles.css",
    "content": ".clearfix::after{clear:both;display:block;content:\"\";height:0}.hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}img.fr-rounded,.fr-img-caption.fr-rounded img{border-radius:10px}img.fr-bordered,.fr-img-caption.fr-bordered img{border:solid 5px #CCC}img.fr-bordered{box-sizing:content-box}.fr-img-caption.fr-bordered img{box-sizing:border-box}.fr-view{word-wrap:break-word}.fr-view span[style~=\"color:\"] a{color:inherit}.fr-view strong{font-weight:700}.fr-view table{border:none;border-collapse:collapse;empty-cells:show;max-width:100%}.fr-view table td{min-width:5px}.fr-view table.fr-dashed-borders td,.fr-view table.fr-dashed-borders th{border-style:dashed}.fr-view table.fr-alternate-rows tbody tr:nth-child(2n){background:#f5f5f5}.fr-view table td,.fr-view table th{border:1px solid #DDD}.fr-view table td:empty,.fr-view table th:empty{height:20px}.fr-view table td.fr-highlighted,.fr-view table th.fr-highlighted{border:1px double red}.fr-view table td.fr-thick,.fr-view table th.fr-thick{border-width:2px}.fr-view table th{background:var(--bs-emphasis-color, #ccc)}.fr-view hr{clear:both;user-select:none;page-break-after:always}.fr-view .fr-file{position:relative}.fr-view .fr-file::after{position:relative;content:\"\\1F4CE\";font-weight:normal}.fr-view pre{white-space:pre-wrap;word-wrap:break-word;overflow:visible}.fr-view[dir=\"rtl\"] blockquote{border-left:none;border-right:solid 2px #5E35B1;margin-right:0;padding-right:5px;padding-left:0px}.fr-view[dir=\"rtl\"] blockquote blockquote{border-color:#00BCD4}.fr-view[dir=\"rtl\"] blockquote blockquote blockquote{border-color:#43A047}.fr-view blockquote{border-left:solid 2px #5E35B1;margin-left:0;padding-left:5px;color:#5E35B1}.fr-view blockquote blockquote{border-color:#00BCD4;color:#00BCD4}.fr-view blockquote blockquote blockquote{border-color:#43A047;color:#43A047}.fr-view span.fr-emoticon{font-weight:normal;font-family:\"Apple Color Emoji\",\"Segoe UI Emoji\",\"NotoColorEmoji\",\"Segoe UI Symbol\",\"Android Emoji\",\"EmojiSymbols\";display:inline;line-height:0}.fr-view span.fr-emoticon.fr-emoticon-img{background-repeat:no-repeat !important;font-size:inherit;height:1em;width:1em;min-height:20px;min-width:20px;display:inline-block;margin:-0.1em .1em .1em;line-height:1;vertical-align:middle}.fr-view .fr-text-gray{color:#AAA !important}.fr-view .fr-text-bordered{border-top:solid 1px #222;border-bottom:solid 1px #222;padding:10px 0}.fr-view .fr-text-spaced{letter-spacing:1px}.fr-view .fr-text-uppercase{text-transform:uppercase}.fr-view .fr-class-highlighted{background-color:#ffff00}.fr-view .fr-class-code{border-color:#cccccc;border-radius:2px;background:#f5f5f5;padding:10px;font-family:\"Courier New\",Courier,monospace}.fr-view .fr-class-transparency{opacity:.5}.fr-view img{position:relative;max-width:100%}.fr-view img.fr-dib{margin:5px auto;display:block;float:none;vertical-align:top}.fr-view img.fr-dib.fr-fil{margin-left:0;text-align:left}.fr-view img.fr-dib.fr-fir{margin-right:0;text-align:right}.fr-view img.fr-dii{display:inline-block;float:none;vertical-align:bottom;margin-left:5px;margin-right:5px;max-width:calc(100% - (2 * 5px))}.fr-view img.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}.fr-view img.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view span.fr-img-caption{position:relative;max-width:100%}.fr-view span.fr-img-caption.fr-dib{margin:5px auto;display:block;float:none;vertical-align:top}.fr-view span.fr-img-caption.fr-dib.fr-fil{margin-left:0;text-align:left}.fr-view span.fr-img-caption.fr-dib.fr-fir{margin-right:0;text-align:right}.fr-view span.fr-img-caption.fr-dii{display:inline-block;float:none;vertical-align:bottom;margin-left:5px;margin-right:5px;max-width:calc(100% - (2 * 5px))}.fr-view span.fr-img-caption.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}.fr-view span.fr-img-caption.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view .fr-video{text-align:center;position:relative}.fr-view .fr-video.fr-rv{padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.fr-view .fr-video.fr-rv>iframe,.fr-view .fr-video.fr-rv object,.fr-view .fr-video.fr-rv embed{position:absolute !important;top:0;left:0;width:100%;height:100%}.fr-view .fr-video>*{box-sizing:content-box;max-width:100%;border:none}.fr-view .fr-video.fr-dvb{display:block;clear:both}.fr-view .fr-video.fr-dvb.fr-fvl{text-align:left}.fr-view .fr-video.fr-dvb.fr-fvr{text-align:right}.fr-view .fr-video.fr-dvi{display:inline-block}.fr-view .fr-video.fr-dvi.fr-fvl{float:left}.fr-view .fr-video.fr-dvi.fr-fvr{float:right}.fr-view a.fr-strong{font-weight:700}.fr-view a.fr-green{color:green}.fr-view .fr-img-caption{text-align:center}.fr-view .fr-img-caption .fr-img-wrap{padding:0px;display:inline-block;margin:auto;text-align:center;width:100%}.fr-view .fr-img-caption .fr-img-wrap img{display:block;margin:auto;width:100%}.fr-view .fr-img-caption .fr-img-wrap>span{margin:auto;display:block;padding:5px 5px 10px;font-size:14px;font-weight:initial;box-sizing:border-box;opacity:.9;width:100%;text-align:center}.fr-view button.fr-rounded,.fr-view input.fr-rounded,.fr-view textarea.fr-rounded{border-radius:10px}.fr-view button.fr-large,.fr-view input.fr-large,.fr-view textarea.fr-large{font-size:24px}a.fr-view.fr-strong{font-weight:700}a.fr-view.fr-green{color:green}img.fr-view{position:relative;max-width:100%}img.fr-view.fr-dib{margin:5px auto;display:block;float:none;vertical-align:top}img.fr-view.fr-dib.fr-fil{margin-left:0;text-align:left}img.fr-view.fr-dib.fr-fir{margin-right:0;text-align:right}img.fr-view.fr-dii{display:inline-block;float:none;vertical-align:bottom;margin-left:5px;margin-right:5px;max-width:calc(100% - (2 * 5px))}img.fr-view.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}img.fr-view.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}span.fr-img-caption.fr-view{position:relative;max-width:100%}span.fr-img-caption.fr-view.fr-dib{margin:5px auto;display:block;float:none;vertical-align:top}span.fr-img-caption.fr-view.fr-dib.fr-fil{margin-left:0;text-align:left}span.fr-img-caption.fr-view.fr-dib.fr-fir{margin-right:0;text-align:right}span.fr-img-caption.fr-view.fr-dii{display:inline-block;float:none;vertical-align:bottom;margin-left:5px;margin-right:5px;max-width:calc(100% - (2 * 5px))}span.fr-img-caption.fr-view.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}span.fr-img-caption.fr-view.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view .oc-text-gray{color:#AAA !important}.fr-view .oc-text-bordered{border-top:solid 1px #222;border-bottom:solid 1px #222;padding:10px 0}.fr-view .oc-text-spaced{letter-spacing:1px}.fr-view .oc-text-uppercase{text-transform:uppercase}.fr-view .oc-class-highlighted{background-color:#ffff00}.fr-view .oc-class-code{border-color:#cccccc;border-radius:2px;background:#f5f5f5;padding:10px;font-family:\"Courier New\",Courier,monospace}.fr-view .oc-class-transparency{opacity:.5}.fr-view a.oc-link-strong{font-weight:700}.fr-view a.oc-link-green{color:green}.fr-view table.oc-dashed-borders td,.fr-view table.oc-dashed-borders th{border-style:dashed}.fr-view table.oc-alternate-rows tbody tr:nth-child(2n){background:#f5f5f5}.fr-view table td.oc-cell-highlighted,.fr-view table th.oc-cell-highlighted{border:1px double red}.fr-view table td.oc-cell-thick-border,.fr-view table th.oc-cell-thick-border{border-width:2px}.fr-view img.oc-img-rounded{border-radius:100%;background-clip:padding-box}.fr-view img.oc-img-bordered{border:solid 10px #CCC;box-sizing:content-box}"
  },
  {
    "path": "modules/system/assets/vendor/froala/froala.css",
    "content": ".clearfix::after{clear:both;display:block;content:\"\";height:0}.hide-by-clipping{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-element,.fr-element:focus{outline:0px solid transparent}.fr-view.fr-element-scroll-visible{overflow-x:visible !important}.fr-box.fr-basic .fr-element{color:var(--bs-body-color, #000);padding:20px;box-sizing:border-box;overflow-x:auto;min-height:60px}.fr-box.fr-basic.fr-rtl .fr-element{text-align:right}.fr-element{background:transparent;position:relative;z-index:2;-webkit-user-select:auto}.fr-element a{user-select:auto}.fr-element.fr-disabled{user-select:none}.fr-element [contenteditable=\"true\"]{outline:0px solid transparent}.fr-box a.fr-floating-btn{border-radius:100%;height:32px;width:32px;background:#FFF;color:var(--bs-primary, #1E88E5);transition:background .2s ease 0s,color .2s ease 0s,transform .2s ease 0s;outline:none;left:0;top:0;line-height:32px;transform:scale(0);text-align:center;display:block;box-sizing:border-box;border:none}.fr-box a.fr-floating-btn svg{transition:transform .2s ease 0s;fill:var(--bs-primary, #1E88E5)}.fr-box a.fr-floating-btn i,.fr-box a.fr-floating-btn svg{font-size:14px;line-height:32px}.fr-box a.fr-floating-btn.fr-btn+.fr-btn{margin-left:10px}.fr-box a.fr-floating-btn:hover{background:#ebebeb;cursor:pointer}.fr-box a.fr-floating-btn:hover svg{fill:var(--bs-primary, #1E88E5)}.fr-box .fr-visible a.fr-floating-btn{transform:scale(1)}iframe.fr-iframe{width:100%;border:none;position:relative;display:block;z-index:2;box-sizing:border-box}.fr-wrapper{position:relative;z-index:1}.fr-wrapper::after{clear:both;display:block;content:\"\";height:0}.fr-wrapper .fr-placeholder{position:absolute;font-size:12px;color:#AAA;z-index:1;display:none;top:0;left:0;right:0;overflow:hidden}.fr-wrapper.show-placeholder .fr-placeholder{display:block}.fr-wrapper ::selection{background:#b5d6fd;color:#000}.fr-box.fr-basic .fr-wrapper{background:var(--oc-form-control-bg, #FFF);border:0;border-top:0;top:0;left:0}.fr-box.fr-basic.fr-top .fr-wrapper{border-top:0;border-radius:0 0 4px 4px}.fr-box.fr-basic.fr-bottom .fr-wrapper{border-bottom:0;border-radius:4px 4px 0 0}@media (min-width:992px){.fr-box.fr-document{min-width:21cm}.fr-box.fr-document .fr-wrapper{text-align:center;padding:30px;min-width:21cm;background:#EFEFEF}.fr-box.fr-document .fr-wrapper .fr-element{text-align:left;background:#FFF;width:21cm;margin:auto;min-height:26cm !important;padding:1cm 2cm;overflow:visible}.fr-box.fr-document .fr-wrapper .fr-element hr{margin-left:-2cm;margin-right:-2cm;background:#EFEFEF;height:1cm;outline:none;border:none}}.fr-tooltip{position:absolute;top:0;left:0;padding:0 8px;border-radius:4px;background:#536061;color:#FFFFFF;font-size:12px;line-height:22px;font-family:sans-serif;transition:opacity .15s ease-out,transform .15s ease-out;transform:scale(.95);opacity:0;left:-3000px;user-select:none;z-index:2147483647;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fr-tooltip.fr-visible{opacity:1;transform:scale(1)}.fr-toolbar .fr-btn-wrap,.fr-popup .fr-btn-wrap{float:left;white-space:nowrap;position:relative}.fr-toolbar .fr-btn-wrap.fr-hidden,.fr-popup .fr-btn-wrap.fr-hidden{display:none}.fr-toolbar .fr-command.fr-btn,.fr-popup .fr-command.fr-btn{background:transparent;color:var(--oc-toolbar-color, #222222);-moz-outline:0;outline:0;border:0;line-height:1;cursor:pointer;text-align:left;margin:0 2px;transition:background .2s ease 0s;border-radius:0;z-index:2;position:relative;box-sizing:border-box;text-decoration:none;user-select:none;float:left;padding:0;width:38px;height:38px}.fr-toolbar .fr-command.fr-btn::-moz-focus-inner,.fr-popup .fr-command.fr-btn::-moz-focus-inner{border:0;padding:0}.fr-toolbar .fr-command.fr-btn.fr-btn-text,.fr-popup .fr-command.fr-btn.fr-btn-text{width:auto}.fr-toolbar .fr-command.fr-btn i,.fr-popup .fr-command.fr-btn i,.fr-toolbar .fr-command.fr-btn svg,.fr-popup .fr-command.fr-btn svg{display:block;font-size:14px;width:14px;margin:12px 12px;text-align:center;float:none}.fr-toolbar .fr-command.fr-btn span.fr-sr-only,.fr-popup .fr-command.fr-btn span.fr-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.fr-toolbar .fr-command.fr-btn span,.fr-popup .fr-command.fr-btn span{font-size:14px;display:block;line-height:17px;min-width:34px;float:left;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;height:17px;font-weight:bold;padding:0 2px}.fr-toolbar .fr-command.fr-btn img,.fr-popup .fr-command.fr-btn img{margin:12px 12px;width:14px}.fr-toolbar .fr-command.fr-btn.fr-active,.fr-popup .fr-command.fr-btn.fr-active{color:var(--bs-primary, #1E88E5);background:transparent}.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection,.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection{width:auto}.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-selection span,.fr-popup .fr-command.fr-btn.fr-dropdown.fr-selection span{font-weight:normal}.fr-toolbar .fr-command.fr-btn.fr-dropdown i,.fr-popup .fr-command.fr-btn.fr-dropdown i,.fr-toolbar .fr-command.fr-btn.fr-dropdown span,.fr-popup .fr-command.fr-btn.fr-dropdown span,.fr-toolbar .fr-command.fr-btn.fr-dropdown img,.fr-popup .fr-command.fr-btn.fr-dropdown img,.fr-toolbar .fr-command.fr-btn.fr-dropdown svg,.fr-popup .fr-command.fr-btn.fr-dropdown svg{margin-left:8px;margin-right:16px}.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active,.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active{color:var(--bs-primary, #1E88E5);background:var(--oc-primary-bg, #d6d6d6)}.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover,.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover,.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus,.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus{background:var(--oc-primary-bg, #d6d6d6) !important;color:var(--oc-toolbar-color, #222222) !important}.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:hover::after,.fr-toolbar .fr-command.fr-btn.fr-dropdown.fr-active:focus::after,.fr-popup .fr-command.fr-btn.fr-dropdown.fr-active:focus::after{border-top-color:var(--oc-toolbar-color, #222222) !important}.fr-toolbar .fr-command.fr-btn.fr-dropdown::after,.fr-popup .fr-command.fr-btn.fr-dropdown::after{position:absolute;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid var(--oc-toolbar-color, #222222);right:4px;top:17px;content:\"\"}.fr-toolbar .fr-command.fr-btn.fr-disabled,.fr-popup .fr-command.fr-btn.fr-disabled{color:var(--oc-form-control-disabled-color, #bdbdbd);cursor:default}.fr-toolbar .fr-command.fr-btn.fr-disabled::after,.fr-popup .fr-command.fr-btn.fr-disabled::after{border-top-color:var(--oc-form-control-disabled-color, #bdbdbd) !important}.fr-toolbar .fr-command.fr-btn.fr-hidden,.fr-popup .fr-command.fr-btn.fr-hidden{display:none}.fr-toolbar.fr-disabled .fr-btn,.fr-popup.fr-disabled .fr-btn,.fr-toolbar.fr-disabled .fr-btn.fr-active,.fr-popup.fr-disabled .fr-btn.fr-active{color:var(--oc-form-control-disabled-color, #bdbdbd)}.fr-toolbar.fr-disabled .fr-btn.fr-dropdown::after,.fr-popup.fr-disabled .fr-btn.fr-dropdown::after,.fr-toolbar.fr-disabled .fr-btn.fr-active.fr-dropdown::after,.fr-popup.fr-disabled .fr-btn.fr-active.fr-dropdown::after{border-top-color:var(--oc-form-control-disabled-color, #bdbdbd)}.fr-toolbar.fr-rtl .fr-command.fr-btn,.fr-popup.fr-rtl .fr-command.fr-btn,.fr-toolbar.fr-rtl .fr-btn-wrap,.fr-popup.fr-rtl .fr-btn-wrap{float:right}.fr-toolbar.fr-inline>.fr-command.fr-btn:not(.fr-hidden),.fr-toolbar.fr-inline>.fr-btn-wrap:not(.fr-hidden){display:inline-flex;float:none}.fr-desktop .fr-command:not(.btn):hover,.fr-desktop .fr-command:not(.btn):focus,.fr-desktop .fr-command:not(.btn).fr-btn-hover,.fr-desktop .fr-command:not(.btn).fr-expanded{outline:0;color:var(--oc-toolbar-hover-color, #222222);background:var(--oc-toolbar-hover-bg, #ebebeb)}.fr-desktop .fr-command:not(.btn):hover::after,.fr-desktop .fr-command:not(.btn):focus::after,.fr-desktop .fr-command:not(.btn).fr-btn-hover::after,.fr-desktop .fr-command:not(.btn).fr-expanded::after{border-top-color:var(--oc-toolbar-hover-color, #222222) !important}.fr-desktop .fr-command:not(.btn).fr-selected{color:var(--oc-toolbar-color, #222222);background:var(--oc-primary-bg, #d6d6d6)}.fr-desktop .fr-command:not(.btn).fr-active:hover,.fr-desktop .fr-command:not(.btn).fr-active:focus,.fr-desktop .fr-command:not(.btn).fr-active.fr-btn-hover,.fr-desktop .fr-command:not(.btn).fr-active.fr-expanded{color:var(--bs-primary, #1E88E5);background:var(--oc-toolbar-hover-bg, #ebebeb)}.fr-desktop .fr-command:not(.btn).fr-active.fr-selected{color:var(--bs-primary, #1E88E5);background:var(--oc-primary-bg, #d6d6d6)}.fr-desktop .fr-command:not(.btn).fr-disabled:hover,.fr-desktop .fr-command:not(.btn).fr-disabled:focus,.fr-desktop .fr-command:not(.btn).fr-disabled.fr-selected{background:transparent}.fr-desktop.fr-disabled .fr-command:hover,.fr-desktop.fr-disabled .fr-command:focus,.fr-desktop.fr-disabled .fr-command.fr-selected{background:transparent}.fr-toolbar.fr-mobile .fr-command.fr-blink,.fr-popup.fr-mobile .fr-command.fr-blink{background:transparent}.fr-command.fr-btn.fr-options{width:16px;margin-left:-5px}.fr-command.fr-btn.fr-options.fr-btn-hover,.fr-command.fr-btn.fr-options:hover,.fr-command.fr-btn.fr-options:focus{border-left:solid 1px var(--oc-toolbar-border, #FAFAFA)}.fr-command.fr-btn+.fr-dropdown-menu{display:inline-block;position:absolute;right:auto;bottom:auto;height:auto;z-index:4;-webkit-overflow-scrolling:touch;overflow:hidden;zoom:1;border-radius:0 0 4px 4px;border:1px solid var(--bs-border-color);box-shadow:-2px 2px 5px rgba(67, 86, 100, 0.12)}.fr-command.fr-btn+.fr-dropdown-menu.test-height .fr-dropdown-wrapper{transition:none;height:auto;max-height:275px}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper{background:var(--oc-toolbar-bg, #FFF);padding:0;margin:auto;display:inline-block;text-align:left;position:relative;box-sizing:border-box;transition:max-height .2s ease 0s;margin-top:0;float:left;max-height:0;height:0;margin-top:0 !important}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content{overflow:auto;position:relative;max-height:275px}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list{list-style-type:none;margin:0;padding:0}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li{padding:0;margin:0;font-size:14px}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a{padding:0 24px;line-height:200%;display:block;cursor:pointer;white-space:nowrap;color:inherit;text-decoration:none}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-active{color:var(--oc-toolbar-hover-color);background:var(--oc-toolbar-hover-bg)}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a.fr-disabled{color:var(--oc-form-control-disabled-color);cursor:default}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a:hover{color:var(--oc-dropdown-active-color);background:var(--oc-dropdown-active-bg)}.fr-command.fr-btn+.fr-dropdown-menu .fr-dropdown-wrapper .fr-dropdown-content ul.fr-dropdown-list li a .fr-shortcut{float:right;margin-left:32px;font-weight:bold;opacity:.75}.fr-command.fr-btn:not(.fr-active)+.fr-dropdown-menu{left:-3000px !important}.fr-command.fr-btn.fr-active+.fr-dropdown-menu{display:inline-block}.fr-command.fr-btn.fr-active+.fr-dropdown-menu .fr-dropdown-wrapper{height:auto;max-height:275px}.fr-bottom>.fr-command.fr-btn+.fr-dropdown-menu{border-radius:4px 4px 0 0}.fr-toolbar.fr-rtl .fr-dropdown-wrapper,.fr-popup.fr-rtl .fr-dropdown-wrapper{text-align:right !important}body.prevent-scroll{overflow:hidden}body.prevent-scroll.fr-mobile{position:fixed;-webkit-overflow-scrolling:touch}.fr-modal{color:var(--oc-toolbar-color, #222222);font-family:sans-serif;position:fixed;overflow-x:auto;overflow-y:scroll;top:0;left:0;bottom:0;right:0;width:100%;z-index:2147483640;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;line-height:1.2}.fr-modal.fr-middle .fr-modal-wrapper{margin-top:0;margin-bottom:0;margin-left:auto;margin-right:auto;top:50%;left:50%;transform:translate(-50%, -50%);position:absolute}.fr-modal .fr-modal-wrapper{border-radius:4px;margin:20px auto;display:inline-block;background:#FFF;min-width:300px;border:0;border-top:1px solid var(--oc-toolbar-border, #222222);overflow:hidden;width:90%;position:relative}@media (min-width:768px) and (max-width:991px){.fr-modal .fr-modal-wrapper{margin:30px auto;width:70%}}@media (min-width:992px){.fr-modal .fr-modal-wrapper{margin:50px auto;width:960px}}.fr-modal .fr-modal-wrapper .fr-modal-head{background:var(--oc-toolbar-bg, #FFF);border-bottom:0;overflow:hidden;position:absolute;width:100%;min-height:42px;z-index:3;transition:height .2s ease 0s}.fr-modal .fr-modal-wrapper .fr-modal-head .fr-modal-close{padding:12px;width:20px;font-size:30px;cursor:pointer;line-height:18px;color:var(--oc-toolbar-color, #222222);box-sizing:content-box;position:absolute;top:0;right:0;transition:color .2s ease 0s}.fr-modal .fr-modal-wrapper .fr-modal-head h4{font-size:18px;padding:12px 10px;margin:0;font-weight:400;line-height:18px;display:inline-block;float:left}.fr-modal .fr-modal-wrapper div.fr-modal-body{height:100%;min-height:150px;overflow-y:scroll;padding-bottom:10px}.fr-modal .fr-modal-wrapper div.fr-modal-body:focus{outline:0}.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command{height:36px;line-height:1;color:var(--bs-primary, #1E88E5);padding:10px;cursor:pointer;text-decoration:none;border:none;background:none;font-size:16px;outline:none;transition:background .2s ease 0s;border-radius:4px}.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command+button{margin-left:24px}.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:hover,.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:focus{background:#ebebeb;color:var(--bs-primary, #1E88E5)}.fr-modal .fr-modal-wrapper div.fr-modal-body button.fr-command:active{background:var(--oc-primary-bg, #d6d6d6);color:var(--bs-primary, #1E88E5)}.fr-modal .fr-modal-wrapper div.fr-modal-body button::-moz-focus-inner{border:0}.fr-desktop .fr-modal-wrapper .fr-modal-head i:hover{background:#ebebeb}.fr-overlay{position:fixed;top:0;bottom:0;left:0;right:0;background:#000;opacity:.5;z-index:2147483639}.fr-popup[data-popper-reference-hidden]{visibility:hidden;pointer-events:none}.fr-popup{position:absolute;display:none;color:var(--oc-toolbar-color, #222222);background:var(--oc-toolbar-bg, #FFF);border-radius:4px;font-family:sans-serif;box-sizing:border-box;user-select:none;margin-top:10px;z-index:2147483635;text-align:left;border:0;border:1px solid var(--oc-toolbar-border, #222222);text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.2}.fr-popup .fr-input-focus{background:#f5f5f5}.fr-popup.fr-above{margin-top:0;margin-bottom:10px;border-top:0;border-bottom:1px solid var(--oc-toolbar-border, #222222)}.fr-popup.fr-active{display:block}.fr-popup.fr-hidden{opacity:0;display:none}.fr-popup.fr-empty{display:none !important}.fr-popup .fr-hs{display:block !important}.fr-popup .fr-hs.fr-hidden{display:none !important}.fr-popup .fr-input-line{position:relative;padding:8px 0}.fr-popup .fr-input-line input[type=\"text\"],.fr-popup .fr-input-line textarea{width:100%;margin:0;margin-top:12px;border:1px solid var(--bs-border-color);border-radius:3px;color:var(--bs-body-color);font-size:12px;padding:6px 0 2px;background-color:var(--oc-form-control-bg);position:relative;z-index:2;box-sizing:border-box;box-shadow:none;height:28px;line-height:1.5;padding:5px 10px;transition:margin .2s ease 0s,border-color .15s ease-in-out;-webkit-appearance:none}.fr-popup .fr-input-line input[type=\"text\"]:focus,.fr-popup .fr-input-line textarea:focus{border:1px solid var(--oc-border-focus)}.fr-popup .fr-input-line input[type=\"text\"].fr-not-empty,.fr-popup .fr-input-line textarea.fr-not-empty{margin-top:12px}textarea.fr-popup .fr-input-line input[type=\"text\"],textarea.fr-popup .fr-input-line textarea{height:auto}.fr-popup .fr-input-line input+label,.fr-popup .fr-input-line textarea+label{position:absolute;top:0;left:0;font-size:12px;z-index:3;width:100%;display:block;color:var(--bs-body-color, #808080)}.fr-popup input,.fr-popup textarea{user-select:text;border-radius:0;outline:none}.fr-popup textarea{resize:none;height:auto}.fr-popup .fr-buttons{padding:0 2px;white-space:nowrap;line-height:0;border-bottom:1px solid var(--bs-border-color)}.fr-popup .fr-buttons::after{clear:both;display:block;content:\"\";height:0}.fr-popup .fr-buttons .fr-btn{display:inline-block;float:none}.fr-popup .fr-buttons .fr-btn i{float:left}.fr-popup .fr-buttons .fr-separator{display:inline-block;float:none}.fr-popup .fr-layer{width:225px;box-sizing:border-box;margin:10px;display:none}@media (min-width:768px){.fr-popup .fr-layer{width:300px}}.fr-popup .fr-layer.fr-active{display:inline-block}.fr-popup .fr-action-buttons{z-index:7;text-align:right}.fr-popup .fr-checkbox{position:relative;display:inline-block;width:16px;height:16px;line-height:1;box-sizing:content-box;vertical-align:middle}.fr-popup .fr-checkbox svg{margin-left:2px;margin-top:2px;display:none;width:10px;height:10px}.fr-popup .fr-checkbox span{border:solid 1px var(--bs-border-color);border-radius:4px;width:16px;height:16px;display:inline-block;position:relative;z-index:1;box-sizing:border-box;transition:background .2s ease 0s,border-color .2s ease 0s}.fr-popup .fr-checkbox input{position:absolute;z-index:2;opacity:0;border:0 none;cursor:pointer;height:16px;margin:0;padding:0;width:16px;top:1px;left:1px}.fr-popup .fr-checkbox input:checked+span{background:var(--bs-primary, #1E88E5);border-color:var(--bs-primary, #1E88E5)}.fr-popup .fr-checkbox input:checked+span svg{display:block}.fr-popup .fr-checkbox input:focus+span{border-color:var(--bs-primary, #1E88E5)}.fr-popup .fr-checkbox-line{font-size:12px;line-height:1.4px;margin-top:10px}.fr-popup .fr-checkbox-line label{cursor:pointer;margin:0 5px;vertical-align:middle}.fr-popup.fr-rtl{direction:rtl;text-align:right}.fr-popup.fr-rtl .fr-action-buttons{text-align:left}.fr-popup.fr-rtl .fr-input-line input+label,.fr-popup.fr-rtl .fr-input-line textarea+label{left:auto;right:0}.fr-popup.fr-rtl .fr-buttons .fr-separator.fr-vs{float:right}.fr-popup .fr-arrow{width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid var(--oc-toolbar-border, #222222);position:absolute;top:-7px;left:50%;margin-left:-7px;display:inline-block}.fr-popup.fr-above .fr-arrow{top:auto;bottom:-7px;border-bottom:0;border-top:7px solid var(--oc-toolbar-border, #222222)}.fr-text-edit-layer{width:250px;box-sizing:border-box;display:block !important}.fr-toolbar{color:var(--oc-toolbar-color, #222222);background:var(--oc-toolbar-bg);position:relative;z-index:4;font-family:sans-serif;box-sizing:border-box;user-select:none;padding:0 2px;border-radius:4px;text-align:left;border:0;border-top:1px solid var(--oc-toolbar-border, #222222);border-top-color:transparent;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.2}.fr-toolbar::after{clear:both;display:block;content:\"\";height:0}.fr-toolbar.fr-rtl{text-align:right}.fr-toolbar.fr-inline{display:none;white-space:nowrap;position:absolute;margin-top:10px}.fr-toolbar.fr-inline .fr-arrow{width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid var(--oc-toolbar-border, #222222);position:absolute;top:-7px;left:50%;margin-left:-7px;display:inline-block}.fr-toolbar.fr-inline.fr-above{margin-top:-10px;border-bottom:1px solid var(--oc-toolbar-border, #222222);border-top:0}.fr-toolbar.fr-inline.fr-above .fr-arrow{top:auto;bottom:-7px;border-bottom:0;border-top-color:inherit;border-top-style:solid;border-top-width:7px}.fr-toolbar.fr-top{top:0;border-radius:4px 4px 0 0;border-bottom:1px solid var(--bs-border-color)}.fr-toolbar.fr-bottom{bottom:0;border-radius:0 0 4px 4px;border-bottom:1px solid var(--bs-border-color)}.fr-separator{background:var(--oc-primary-border, #ebebeb);display:block;vertical-align:top;float:left}.fr-separator+.fr-separator{display:none}.fr-separator.fr-vs{height:34px;width:1px;margin:2px}.fr-separator.fr-hs{clear:both;height:1px;width:calc(100% - (2 * 2px));margin:0 2px}.fr-separator.fr-hidden{display:none !important}.fr-rtl .fr-separator{float:right}.fr-toolbar.fr-inline .fr-separator.fr-hs{float:none}.fr-toolbar.fr-inline .fr-separator.fr-vs{float:none;display:inline-block}.fr-visibility-helper{display:none;margin-left:0px !important}@media (min-width:768px){.fr-visibility-helper{margin-left:1px !important}}@media (min-width:992px){.fr-visibility-helper{margin-left:2px !important}}@media (min-width:1200px){.fr-visibility-helper{margin-left:3px !important}}.fr-opacity-0{opacity:0}.fr-box{position:relative}.fr-sticky{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky}.fr-sticky-off{position:relative}.fr-sticky-on{position:fixed}.fr-sticky-on.fr-sticky-ios{position:absolute;left:0;right:0;width:auto !important}.fr-sticky-dummy{display:none}.fr-sticky-on+.fr-sticky-dummy,.fr-sticky-box>.fr-sticky-dummy{display:block}span.fr-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}body.fr-fullscreen{overflow:hidden;height:100%;width:100%;position:fixed}body.fr-command.fr-btn[data-cmd=fullscreen]{float:right}.fr-box.fr-fullscreen{margin:0 !important;position:fixed;top:0;left:0;bottom:0;right:0;z-index:300 !important;width:auto !important}.fr-box.fr-fullscreen .fr-toolbar.fr-top{top:0 !important}.fr-box.fr-fullscreen .fr-toolbar.fr-bottom{bottom:0 !important}.fr-fullscreen-wrapper{z-index:2147483640 !important;width:100% !important;margin:0 !important;padding:0 !important;overflow:visible !important}textarea.fr-code{display:none;width:100%;resize:none;box-sizing:border-box;border:none;padding:10px;margin:0px;font-family:\"Courier New\",monospace;font-size:14px;background:#FFF;color:#000;outline:none}.fr-box.fr-rtl textarea.fr-code{direction:rtl}.fr-box .CodeMirror{display:none}.fr-box .ace_editor{display:none}.fr-box .ace_editor{position:absolute;top:0;bottom:0;left:0;right:0;margin:0}.fr-box.fr-code-view .ace_editor{display:block}.fr-box.fr-code-view textarea.fr-code{display:block}.fr-box.fr-code-view .fr-element,.fr-box.fr-code-view .fr-placeholder,.fr-box.fr-code-view .fr-iframe{display:none}.fr-box.fr-code-view .CodeMirror{display:block}.fr-box.fr-inline.fr-code-view .fr-command.fr-btn.html-switch{display:block}.fr-box.fr-inline .fr-command.fr-btn.html-switch{position:absolute;top:0;right:0;display:none;background:#FFF;color:var(--oc-toolbar-color, #222222);-moz-outline:0;outline:0;border:0;line-height:1;cursor:pointer;text-align:left;padding:12px 12px;transition:background .2s ease 0s;border-radius:0;z-index:2;box-sizing:border-box;text-decoration:none;user-select:none}.fr-box.fr-inline .fr-command.fr-btn.html-switch i{font-size:14px;width:14px;text-align:center}.fr-box.fr-inline .fr-command.fr-btn.html-switch.fr-desktop:hover{background:var(--oc-toolbar-hover-bg, #ebebeb)}.fr-popup .fr-file-upload-layer{border:dashed 2px var(--oc-form-control-disabled-bg, #bdbdbd);padding:25px 0;position:relative;font-size:14px;letter-spacing:1px;line-height:140%;box-sizing:border-box;text-align:center}.fr-popup .fr-file-upload-layer:hover{background:#ebebeb}.fr-popup .fr-file-upload-layer.fr-drop{background:#ebebeb;border-color:var(--bs-primary, #1E88E5)}.fr-popup .fr-file-upload-layer .fr-form{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;z-index:2147483640;overflow:hidden;margin:0 !important;padding:0 !important;width:100% !important}.fr-popup .fr-file-upload-layer .fr-form input{cursor:pointer;position:absolute;right:0px;top:0px;bottom:0px;width:500%;height:100%;margin:0px;font-size:400px}.fr-popup .fr-file-progress-bar-layer{box-sizing:border-box}.fr-popup .fr-file-progress-bar-layer>h3{font-size:16px;margin:10px 0;font-weight:normal}.fr-popup .fr-file-progress-bar-layer>div.fr-action-buttons{display:none}.fr-popup .fr-file-progress-bar-layer>div.fr-loader{background:var(--oc-formdocument-select-bg);height:10px;width:100%;margin-top:20px;overflow:hidden;position:relative}.fr-popup .fr-file-progress-bar-layer>div.fr-loader span{display:block;height:100%;width:0%;background:var(--bs-primary, #1E88E5);transition:width .2s ease 0s}.fr-popup .fr-file-progress-bar-layer>div.fr-loader.fr-indeterminate span{width:30% !important;position:absolute;top:0;animation:loading 2s linear infinite}.fr-popup .fr-file-progress-bar-layer.fr-error>div.fr-loader{display:none}.fr-popup .fr-file-progress-bar-layer.fr-error>div.fr-action-buttons{display:block}@keyframes loading{from{left:-25%}to{left:100%}}@-webkit-keyframes loading{from{left:-25%}to{left:100%}}@-moz-keyframes loading{from{left:-25%}to{left:100%}}@-o-keyframes loading{from{left:-25%}to{left:100%}}.fr-element img{cursor:pointer}.fr-image-resizer{position:absolute;border:solid 1px var(--bs-primary, #1E88E5);display:none;user-select:none;box-sizing:content-box;z-index:2}.fr-image-resizer.fr-active{display:block}.fr-image-resizer .fr-handler{display:block;position:absolute;background:var(--bs-primary, #1E88E5);border:solid 1px #FFF;z-index:4;box-sizing:border-box}.fr-image-resizer .fr-handler.fr-hnw{cursor:nw-resize}.fr-image-resizer .fr-handler.fr-hne{cursor:ne-resize}.fr-image-resizer .fr-handler.fr-hsw{cursor:sw-resize}.fr-image-resizer .fr-handler.fr-hse{cursor:se-resize}.fr-image-resizer .fr-handler{width:12px;height:12px}.fr-image-resizer .fr-handler.fr-hnw{left:-6px;top:-6px}.fr-image-resizer .fr-handler.fr-hne{right:-6px;top:-6px}.fr-image-resizer .fr-handler.fr-hsw{left:-6px;bottom:-6px}.fr-image-resizer .fr-handler.fr-hse{right:-6px;bottom:-6px}@media (min-width:1200px){.fr-image-resizer .fr-handler{width:10px;height:10px}.fr-image-resizer .fr-handler.fr-hnw{left:-5px;top:-5px}.fr-image-resizer .fr-handler.fr-hne{right:-5px;top:-5px}.fr-image-resizer .fr-handler.fr-hsw{left:-5px;bottom:-5px}.fr-image-resizer .fr-handler.fr-hse{right:-5px;bottom:-5px}}.fr-image-overlay{position:fixed;top:0;left:0;bottom:0;right:0;z-index:2147483640;display:none}.fr-popup .fr-image-upload-layer{border:dashed 2px var(--oc-form-control-disabled-bg, #bdbdbd);padding:25px 0;position:relative;font-size:14px;letter-spacing:1px;line-height:140%;text-align:center}.fr-popup .fr-image-upload-layer:hover{background:#ebebeb}.fr-popup .fr-image-upload-layer.fr-drop{background:#ebebeb;border-color:var(--bs-primary, #1E88E5)}.fr-popup .fr-image-upload-layer .fr-form{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;z-index:2147483640;overflow:hidden;margin:0 !important;padding:0 !important;width:100% !important}.fr-popup .fr-image-upload-layer .fr-form input{cursor:pointer;position:absolute;right:0px;top:0px;bottom:0px;width:500%;height:100%;margin:0px;font-size:400px}.fr-popup .fr-image-progress-bar-layer>h3{font-size:16px;margin:10px 0;font-weight:normal}.fr-popup .fr-image-progress-bar-layer>div.fr-action-buttons{display:none}.fr-popup .fr-image-progress-bar-layer>div.fr-loader{background:var(--oc-formdocument-select-bg);height:10px;width:100%;margin-top:20px;overflow:hidden;position:relative}.fr-popup .fr-image-progress-bar-layer>div.fr-loader span{display:block;height:100%;width:0%;background:var(--bs-primary, #1E88E5);transition:width .2s ease 0s}.fr-popup .fr-image-progress-bar-layer>div.fr-loader.fr-indeterminate span{width:30% !important;position:absolute;top:0;animation:loading 2s linear infinite}.fr-popup .fr-image-progress-bar-layer.fr-error>div.fr-loader{display:none}.fr-popup .fr-image-progress-bar-layer.fr-error>div.fr-action-buttons{display:block}.fr-image-size-layer .fr-image-group .fr-input-line{width:calc(50% - 5px);display:inline-block}.fr-image-size-layer .fr-image-group .fr-input-line+.fr-input-line{margin-left:10px}.fr-uploading{opacity:.4}@keyframes loading{from{left:-25%}to{left:100%}}@-webkit-keyframes loading{from{left:-25%}to{left:100%}}@-moz-keyframes loading{from{left:-25%}to{left:100%}}@-o-keyframes loading{from{left:-25%}to{left:100%}}.fr-element table td.fr-selected-cell,.fr-element table th.fr-selected-cell{border:1px double var(--bs-primary, #1E88E5) !important}.fr-element table tr{user-select:none}.fr-element table td,.fr-element table th{user-select:text}.fr-element .fr-no-selection table td,.fr-element .fr-no-selection table th{user-select:none}.fr-table-resizer{cursor:col-resize;position:absolute;z-index:3;display:none}.fr-table-resizer.fr-moving{z-index:2}.fr-table-resizer div{opacity:0;border-right:1px solid var(--bs-primary, #1E88E5)}.fr-no-selection{user-select:none}.fr-popup .fr-table-colors-hex-layer{width:100%;margin:0px;padding:10px}.fr-popup .fr-table-colors-hex-layer .fr-input-line{float:left;width:calc(100% - 50px);padding:8px 0 0}.fr-popup .fr-table-colors-hex-layer .fr-action-buttons{float:right;width:50px}.fr-popup .fr-table-size .fr-table-size-info{text-align:center;font-size:14px;padding:8px}.fr-popup .fr-table-size .fr-select-table-size{line-height:0;padding:0 5px 5px;white-space:nowrap}.fr-popup .fr-table-size .fr-select-table-size>span{display:inline-block;padding:0px 4px 4px 0;background:transparent}.fr-popup .fr-table-size .fr-select-table-size>span>span{display:inline-block;width:18px;height:18px;border:1px solid #DDD}.fr-popup .fr-table-size .fr-select-table-size>span.hover{background:transparent}.fr-popup .fr-table-size .fr-select-table-size>span.hover>span{background:var(--oc-formdocument-select-bg);border:solid 1px var(--bs-primary, #1E88E5)}.fr-popup .fr-table-size .fr-select-table-size .new-line::after{clear:both;display:block;content:\"\";height:0}.fr-popup.fr-above .fr-table-size .fr-select-table-size>span{display:inline-block !important}.fr-popup .fr-table-colors-buttons{margin-bottom:5px}.fr-popup .fr-table-colors{line-height:0;display:block}.fr-popup .fr-table-colors>span{display:inline-block;width:32px;height:32px;position:relative;z-index:1}.fr-popup .fr-table-colors>span>i{text-align:center;line-height:32px;height:32px;width:32px;font-size:13px;position:absolute;bottom:0;cursor:default;left:0}.fr-popup .fr-table-colors>span:focus{outline:1px solid var(--oc-toolbar-color, #222222);z-index:2}.fr-popup.fr-desktop .fr-table-size .fr-select-table-size>span>span{width:12px;height:12px}.fr-insert-helper{position:absolute;z-index:9999;white-space:nowrap}.fr-element .fr-video{user-select:none}.fr-element .fr-video::after{position:absolute;content:'';z-index:1;top:0;left:0;right:0;bottom:0;cursor:pointer;display:block;background:rgba(0,0,0,0)}.fr-element .fr-video.fr-active>*{z-index:2;position:relative}.fr-element .fr-video>*{box-sizing:content-box;max-width:100%;border:none}.fr-box .fr-video-resizer{position:absolute;border:solid 1px var(--bs-primary, #1E88E5);display:none;user-select:none}.fr-box .fr-video-resizer.fr-active{display:block}.fr-box .fr-video-resizer .fr-handler{display:block;position:absolute;background:var(--bs-primary, #1E88E5);border:solid 1px #FFF;z-index:4;box-sizing:border-box}.fr-box .fr-video-resizer .fr-handler.fr-hnw{cursor:nw-resize}.fr-box .fr-video-resizer .fr-handler.fr-hne{cursor:ne-resize}.fr-box .fr-video-resizer .fr-handler.fr-hsw{cursor:sw-resize}.fr-box .fr-video-resizer .fr-handler.fr-hse{cursor:se-resize}.fr-box .fr-video-resizer .fr-handler{width:12px;height:12px}.fr-box .fr-video-resizer .fr-handler.fr-hnw{left:-6px;top:-6px}.fr-box .fr-video-resizer .fr-handler.fr-hne{right:-6px;top:-6px}.fr-box .fr-video-resizer .fr-handler.fr-hsw{left:-6px;bottom:-6px}.fr-box .fr-video-resizer .fr-handler.fr-hse{right:-6px;bottom:-6px}@media (min-width:1200px){.fr-box .fr-video-resizer .fr-handler{width:10px;height:10px}.fr-box .fr-video-resizer .fr-handler.fr-hnw{left:-5px;top:-5px}.fr-box .fr-video-resizer .fr-handler.fr-hne{right:-5px;top:-5px}.fr-box .fr-video-resizer .fr-handler.fr-hsw{left:-5px;bottom:-5px}.fr-box .fr-video-resizer .fr-handler.fr-hse{right:-5px;bottom:-5px}}.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line{width:calc(50% - 5px);display:inline-block}.fr-popup .fr-video-size-layer .fr-video-group .fr-input-line+.fr-input-line{margin-left:10px}.fr-popup .fr-video-upload-layer{border:dashed 2px var(--oc-form-control-disabled-bg, #bdbdbd);padding:25px 0;position:relative;font-size:14px;letter-spacing:1px;line-height:140%;text-align:center}.fr-popup .fr-video-upload-layer:hover{background:#ebebeb}.fr-popup .fr-video-upload-layer.fr-drop{background:#ebebeb;border-color:var(--bs-primary, #1E88E5)}.fr-popup .fr-video-upload-layer .fr-form{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;z-index:2147483640;overflow:hidden;margin:0 !important;padding:0 !important;width:100% !important}.fr-popup .fr-video-upload-layer .fr-form input{cursor:pointer;position:absolute;right:0px;top:0px;bottom:0px;width:500%;height:100%;margin:0px;font-size:400px}.fr-popup .fr-video-progress-bar-layer>h3{font-size:16px;margin:10px 0;font-weight:normal}.fr-popup .fr-video-progress-bar-layer>div.fr-action-buttons{display:none}.fr-popup .fr-video-progress-bar-layer>div.fr-loader{background:var(--oc-formdocument-select-bg);height:10px;width:100%;margin-top:20px;overflow:hidden;position:relative}.fr-popup .fr-video-progress-bar-layer>div.fr-loader span{display:block;height:100%;width:0%;background:var(--bs-primary, #1E88E5);transition:width .2s ease 0s}.fr-popup .fr-video-progress-bar-layer>div.fr-loader.fr-indeterminate span{width:30% !important;position:absolute;top:0;animation:loading 2s linear infinite}.fr-popup .fr-video-progress-bar-layer.fr-error>div.fr-loader{display:none}.fr-popup .fr-video-progress-bar-layer.fr-error>div.fr-action-buttons{display:block}.fr-video-overlay{position:fixed;top:0;left:0;bottom:0;right:0;z-index:2147483640;display:none}.fr-popup .fr-colors-tabs{margin-bottom:5px;line-height:16px;margin-left:-2px;margin-right:-2px}.fr-popup .fr-colors-tabs .fr-colors-tab{display:inline-block;width:50%;cursor:pointer;text-align:center;color:var(--oc-toolbar-color, #222222);font-size:13px;padding:8px 0;position:relative}.fr-popup .fr-colors-tabs .fr-colors-tab:hover,.fr-popup .fr-colors-tabs .fr-colors-tab:focus{color:var(--bs-primary, #1E88E5)}.fr-popup .fr-colors-tabs .fr-colors-tab[data-param1=\"background\"]::after{position:absolute;bottom:0;left:0;width:100%;height:2px;background:var(--bs-primary, #1E88E5);content:'';transition:transform .2s ease 0s}.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab{color:var(--bs-primary, #1E88E5)}.fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1=\"text\"]~[data-param1=\"background\"]::after{transform:translate3d(-100%, 0, 0)}.fr-popup .fr-color-hex-layer{width:100%;margin:0px;padding:10px}.fr-popup .fr-color-hex-layer .fr-input-line{float:left;width:calc(100% - 50px);padding:8px 0 0}.fr-popup .fr-color-hex-layer .fr-action-buttons{float:right;width:50px}.fr-popup .fr-separator+.fr-colors-tabs{margin-left:2px;margin-right:2px}.fr-popup .fr-color-set{line-height:0;display:none}.fr-popup .fr-color-set.fr-selected-set{display:block}.fr-popup .fr-color-set>span{display:inline-block;width:32px;height:32px;position:relative;z-index:1}.fr-popup .fr-color-set>span>i,.fr-popup .fr-color-set>span>svg{text-align:center;line-height:32px;height:32px;width:32px;font-size:13px;position:absolute;bottom:0;cursor:default;left:0}.fr-popup .fr-color-set>span .fr-selected-color{color:#FFF;font-family:FontAwesome;font-size:13px;font-weight:400;line-height:32px;position:absolute;top:0;bottom:0;right:0;left:0;text-align:center;cursor:default}.fr-popup .fr-color-set>span:hover,.fr-popup .fr-color-set>span:focus{outline:1px solid var(--oc-toolbar-color, #222222);z-index:2}.fr-rtl .fr-popup .fr-colors-tabs .fr-colors-tab.fr-selected-tab[data-param1=\"text\"]~[data-param1=\"background\"]::after{transform:translate3d(100%, 0, 0)}.fr-popup .fr-emoticon{display:inline-block;font-size:20px;width:20px;padding:5px;line-height:1;cursor:default;font-weight:normal;font-family:\"Apple Color Emoji\",\"Segoe UI Emoji\",\"NotoColorEmoji\",\"Segoe UI Symbol\",\"Android Emoji\",\"EmojiSymbols\";box-sizing:content-box}.fr-popup .fr-emoticon img{height:20px}.fr-popup .fr-link:focus{outline:0;background:#ebebeb}.fr-popup .fr-icon{display:inline-block;font-size:20px;width:20px;padding:5px;line-height:1;cursor:default;font-weight:normal;font-family:\"Apple Color Emoji\",\"Segoe UI Emoji\",\"NotoColorEmoji\",\"Segoe UI Symbol\",\"Android Emoji\",\"EmojiSymbols\";box-sizing:content-box}.fr-popup .fr-link:focus{outline:0;background:#ebebeb}.fr-popup.fr-popup-icons-plugin{max-height:500px;overflow:auto}.fr-line-breaker{cursor:text;border-top:1px solid var(--bs-primary, #1E88E5);position:fixed;z-index:2;display:none}.fr-line-breaker.fr-visible{display:block}.fr-line-breaker a.fr-floating-btn{position:absolute;left:calc(50% - (32px / 2));top:-16px}.fr-drag-helper{background:var(--bs-primary, #1E88E5);height:2px;margin-top:-1px;opacity:.2;position:absolute;z-index:2147483640;display:none}.fr-drag-helper.fr-visible{display:block}.fr-dragging{opacity:.4}img.fr-rounded,.fr-img-caption.fr-rounded img{border-radius:10px}img.fr-bordered,.fr-img-caption.fr-bordered img{border:solid 5px #CCC}img.fr-bordered{box-sizing:content-box}.fr-img-caption.fr-bordered img{box-sizing:border-box}.fr-view{word-wrap:break-word}.fr-view span[style~=\"color:\"] a{color:inherit}.fr-view strong{font-weight:700}.fr-view table{border:none;border-collapse:collapse;empty-cells:show;max-width:100%}.fr-view table td{min-width:5px}.fr-view table.fr-dashed-borders td,.fr-view table.fr-dashed-borders th{border-style:dashed}.fr-view table.fr-alternate-rows tbody tr:nth-child(2n){background:#f5f5f5}.fr-view table td,.fr-view table th{border:1px solid #DDD}.fr-view table td:empty,.fr-view table th:empty{height:20px}.fr-view table td.fr-highlighted,.fr-view table th.fr-highlighted{border:1px double red}.fr-view table td.fr-thick,.fr-view table th.fr-thick{border-width:2px}.fr-view table th{background:var(--bs-emphasis-color, #ccc)}.fr-view hr{clear:both;user-select:none;page-break-after:always}.fr-view .fr-file{position:relative}.fr-view .fr-file::after{position:relative;content:\"\\1F4CE\";font-weight:normal}.fr-view pre{white-space:pre-wrap;word-wrap:break-word;overflow:visible}.fr-view[dir=\"rtl\"] blockquote{border-left:none;border-right:solid 2px #5E35B1;margin-right:0;padding-right:5px;padding-left:0px}.fr-view[dir=\"rtl\"] blockquote blockquote{border-color:#00BCD4}.fr-view[dir=\"rtl\"] blockquote blockquote blockquote{border-color:#43A047}.fr-view blockquote{border-left:solid 2px #5E35B1;margin-left:0;padding-left:5px;color:#5E35B1}.fr-view blockquote blockquote{border-color:#00BCD4;color:#00BCD4}.fr-view blockquote blockquote blockquote{border-color:#43A047;color:#43A047}.fr-view span.fr-emoticon{font-weight:normal;font-family:\"Apple Color Emoji\",\"Segoe UI Emoji\",\"NotoColorEmoji\",\"Segoe UI Symbol\",\"Android Emoji\",\"EmojiSymbols\";display:inline;line-height:0}.fr-view span.fr-emoticon.fr-emoticon-img{background-repeat:no-repeat !important;font-size:inherit;height:1em;width:1em;min-height:20px;min-width:20px;display:inline-block;margin:-0.1em .1em .1em;line-height:1;vertical-align:middle}.fr-view .fr-text-gray{color:#AAA !important}.fr-view .fr-text-bordered{border-top:solid 1px #222;border-bottom:solid 1px #222;padding:10px 0}.fr-view .fr-text-spaced{letter-spacing:1px}.fr-view .fr-text-uppercase{text-transform:uppercase}.fr-view .fr-class-highlighted{background-color:#ffff00}.fr-view .fr-class-code{border-color:#cccccc;border-radius:2px;background:#f5f5f5;padding:10px;font-family:\"Courier New\",Courier,monospace}.fr-view .fr-class-transparency{opacity:.5}.fr-view img{position:relative;max-width:100%}.fr-view img.fr-dib{margin:5px auto;display:block;float:none;vertical-align:top}.fr-view img.fr-dib.fr-fil{margin-left:0;text-align:left}.fr-view img.fr-dib.fr-fir{margin-right:0;text-align:right}.fr-view img.fr-dii{display:inline-block;float:none;vertical-align:bottom;margin-left:5px;margin-right:5px;max-width:calc(100% - (2 * 5px))}.fr-view img.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}.fr-view img.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view span.fr-img-caption{position:relative;max-width:100%}.fr-view span.fr-img-caption.fr-dib{margin:5px auto;display:block;float:none;vertical-align:top}.fr-view span.fr-img-caption.fr-dib.fr-fil{margin-left:0;text-align:left}.fr-view span.fr-img-caption.fr-dib.fr-fir{margin-right:0;text-align:right}.fr-view span.fr-img-caption.fr-dii{display:inline-block;float:none;vertical-align:bottom;margin-left:5px;margin-right:5px;max-width:calc(100% - (2 * 5px))}.fr-view span.fr-img-caption.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}.fr-view span.fr-img-caption.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view .fr-video{text-align:center;position:relative}.fr-view .fr-video.fr-rv{padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.fr-view .fr-video.fr-rv>iframe,.fr-view .fr-video.fr-rv object,.fr-view .fr-video.fr-rv embed{position:absolute !important;top:0;left:0;width:100%;height:100%}.fr-view .fr-video>*{box-sizing:content-box;max-width:100%;border:none}.fr-view .fr-video.fr-dvb{display:block;clear:both}.fr-view .fr-video.fr-dvb.fr-fvl{text-align:left}.fr-view .fr-video.fr-dvb.fr-fvr{text-align:right}.fr-view .fr-video.fr-dvi{display:inline-block}.fr-view .fr-video.fr-dvi.fr-fvl{float:left}.fr-view .fr-video.fr-dvi.fr-fvr{float:right}.fr-view a.fr-strong{font-weight:700}.fr-view a.fr-green{color:green}.fr-view .fr-img-caption{text-align:center}.fr-view .fr-img-caption .fr-img-wrap{padding:0px;display:inline-block;margin:auto;text-align:center;width:100%}.fr-view .fr-img-caption .fr-img-wrap img{display:block;margin:auto;width:100%}.fr-view .fr-img-caption .fr-img-wrap>span{margin:auto;display:block;padding:5px 5px 10px;font-size:14px;font-weight:initial;box-sizing:border-box;opacity:.9;width:100%;text-align:center}.fr-view button.fr-rounded,.fr-view input.fr-rounded,.fr-view textarea.fr-rounded{border-radius:10px}.fr-view button.fr-large,.fr-view input.fr-large,.fr-view textarea.fr-large{font-size:24px}a.fr-view.fr-strong{font-weight:700}a.fr-view.fr-green{color:green}img.fr-view{position:relative;max-width:100%}img.fr-view.fr-dib{margin:5px auto;display:block;float:none;vertical-align:top}img.fr-view.fr-dib.fr-fil{margin-left:0;text-align:left}img.fr-view.fr-dib.fr-fir{margin-right:0;text-align:right}img.fr-view.fr-dii{display:inline-block;float:none;vertical-align:bottom;margin-left:5px;margin-right:5px;max-width:calc(100% - (2 * 5px))}img.fr-view.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}img.fr-view.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}span.fr-img-caption.fr-view{position:relative;max-width:100%}span.fr-img-caption.fr-view.fr-dib{margin:5px auto;display:block;float:none;vertical-align:top}span.fr-img-caption.fr-view.fr-dib.fr-fil{margin-left:0;text-align:left}span.fr-img-caption.fr-view.fr-dib.fr-fir{margin-right:0;text-align:right}span.fr-img-caption.fr-view.fr-dii{display:inline-block;float:none;vertical-align:bottom;margin-left:5px;margin-right:5px;max-width:calc(100% - (2 * 5px))}span.fr-img-caption.fr-view.fr-dii.fr-fil{float:left;margin:5px 5px 5px 0;max-width:calc(100% - 5px)}span.fr-img-caption.fr-view.fr-dii.fr-fir{float:right;margin:5px 0 5px 5px;max-width:calc(100% - 5px)}.fr-view .oc-text-gray{color:#AAA !important}.fr-view .oc-text-bordered{border-top:solid 1px #222;border-bottom:solid 1px #222;padding:10px 0}.fr-view .oc-text-spaced{letter-spacing:1px}.fr-view .oc-text-uppercase{text-transform:uppercase}.fr-view .oc-class-highlighted{background-color:#ffff00}.fr-view .oc-class-code{border-color:#cccccc;border-radius:2px;background:#f5f5f5;padding:10px;font-family:\"Courier New\",Courier,monospace}.fr-view .oc-class-transparency{opacity:.5}.fr-view a.oc-link-strong{font-weight:700}.fr-view a.oc-link-green{color:green}.fr-view table.oc-dashed-borders td,.fr-view table.oc-dashed-borders th{border-style:dashed}.fr-view table.oc-alternate-rows tbody tr:nth-child(2n){background:#f5f5f5}.fr-view table td.oc-cell-highlighted,.fr-view table th.oc-cell-highlighted{border:1px double red}.fr-view table td.oc-cell-thick-border,.fr-view table th.oc-cell-thick-border{border-width:2px}.fr-view img.oc-img-rounded{border-radius:100%;background-clip:padding-box}.fr-view img.oc-img-bordered{border:solid 10px #CCC;box-sizing:content-box}"
  },
  {
    "path": "modules/system/assets/vendor/froala/froala.js",
    "content": "var FroalaEditor=(()=>{(function(t){var e=function(n,r){this.id=++t.FE.ID;var O={};r&&r.documentReady&&(O.toolbarButtons=[\"fullscreen\",\"undo\",\"redo\",\"getPDF\",\"print\",\"|\",\"bold\",\"italic\",\"underline\",\"color\",\"clearFormatting\",\"|\",\"alignLeft\",\"alignCenter\",\"alignRight\",\"alignJustify\",\"|\",\"formatOL\",\"formatUL\",\"indent\",\"outdent\",\"-\",\"paragraphFormat\",\"|\",\"fontFamily\",\"|\",\"fontSize\",\"|\",\"insertLink\",\"insertImage\",\"quote\"],O.paragraphFormatSelection=!0,O.fontFamilySelection=!0,O.fontSizeSelection=!0,O.placeholderText=\"\",O.quickInsertEnabled=!1,O.charCounterCount=!1),this.opts=t.extend(!0,{},t.extend({},e.DEFAULTS,O,typeof r==\"object\"&&r));var x=JSON.stringify(this.opts);t.FE.OPTS_MAPPING[x]=t.FE.OPTS_MAPPING[x]||this.id,this.sid=t.FE.OPTS_MAPPING[x],t.FE.SHARED[this.sid]=t.FE.SHARED[this.sid]||{},this.shared=t.FE.SHARED[this.sid],this.shared.count=(this.shared.count||0)+1,this.$oel=t(n),this.$oel.data(\"froala.editor\",this),this.o_doc=n.ownerDocument,this.o_win=\"defaultView\"in this.o_doc?this.o_doc.defaultView:this.o_doc.parentWindow;var X=t(this.o_win).scrollTop();this.$oel.on(\"froala.doInit\",(function(){this.$oel.off(\"froala.doInit\"),this.doc=this.$el.get(0).ownerDocument,this.win=\"defaultView\"in this.doc?this.doc.defaultView:this.doc.parentWindow,this.$doc=t(this.doc),this.$win=t(this.win),this.opts.pluginsEnabled||(this.opts.pluginsEnabled=Object.keys(t.FE.PLUGINS)),this.opts.initOnClick?(this.load(t.FE.MODULES),this.$el.on(\"touchstart.init\",function(){t(this).data(\"touched\",!0)}),this.$el.on(\"touchmove.init\",function(){t(this).removeData(\"touched\")}),this.$el.on(\"mousedown.init touchend.init dragenter.init focus.init\",(function(Y){if(Y.type==\"touchend\"&&!this.$el.data(\"touched\"))return!0;if(Y.which===1||!Y.which){this.$el.off(\"mousedown.init touchstart.init touchmove.init touchend.init dragenter.init focus.init\"),this.load(t.FE.MODULES),this.load(t.FE.PLUGINS);var U=Y.originalEvent&&Y.originalEvent.originalTarget;U&&U.tagName==\"IMG\"&&t(U).trigger(\"mousedown\"),Y.type==\"touchend\"&&this.image&&Y.originalEvent&&Y.originalEvent.target&&t(Y.originalEvent.target).is(\"img\")&&setTimeout((function(){this.image.edit(t(Y.originalEvent.target))}).bind(this),100),this.ready=!0,this.events.trigger(\"initialized\")}}).bind(this)),this.events.trigger(\"initializationDelayed\")):(this.load(t.FE.MODULES),this.load(t.FE.PLUGINS),t(this.o_win).scrollTop(X),this.ready=!0,this.events.trigger(\"initialized\"))}).bind(this)),this._init()};e.DEFAULTS={initOnClick:!1,pluginsEnabled:null},e.MODULES={},e.PLUGINS={},e.INSTANCES=[],e.OPTS_MAPPING={},e.SHARED={},e.ID=0,e.prototype._init=function(){var n=this.$oel.prop(\"tagName\");this.$oel.closest(\"label\").length>=1&&console.warn(\"Note! It is not recommended to initialize the Froala Editor within a label tag.\");var r=(function(){n!=\"TEXTAREA\"&&(this._original_html=this._original_html||this.$oel.html()),this.$box=this.$box||this.$oel,this.opts.fullPage&&(this.opts.iframe=!0),this.opts.iframe?(this.$iframe=t('<iframe src=\"about:blank\" frameBorder=\"0\">'),this.$wp=t(\"<div></div>\"),this.$box.html(this.$wp),this.$wp.append(this.$iframe),this.$iframe.get(0).contentWindow.document.open(),this.$iframe.get(0).contentWindow.document.write(\"<!DOCTYPE html>\"),this.$iframe.get(0).contentWindow.document.write(\"<html><head></head><body></body></html>\"),this.$iframe.get(0).contentWindow.document.close(),this.$el=this.$iframe.contents().find(\"body\"),this.el=this.$el.get(0),this.$head=this.$iframe.contents().find(\"head\"),this.$html=this.$iframe.contents().find(\"html\"),this.iframe_document=this.$iframe.get(0).contentWindow.document,this.$oel.trigger(\"froala.doInit\")):(this.$el=t(\"<div></div>\"),this.el=this.$el.get(0),this.$wp=t(\"<div></div>\").append(this.$el),this.$box.html(this.$wp),this.$oel.trigger(\"froala.doInit\"))}).bind(this),O=(function(){this.$box=t(\"<div>\"),this.$oel.before(this.$box).hide(),this._original_html=this.$oel.val(),this.$oel.parents(\"form\").on(\"submit.\"+this.id,(function(){this.events.trigger(\"form.submit\")}).bind(this)),this.$oel.parents(\"form\").on(\"reset.\"+this.id,(function(){this.events.trigger(\"form.reset\")}).bind(this)),r()}).bind(this),x=(function(){this.$el=this.$oel,this.el=this.$el.get(0),this.$el.attr(\"contenteditable\",!0).css(\"outline\",\"none\").css(\"display\",\"inline-block\"),this.opts.multiLine=!1,this.opts.toolbarInline=!1,this.$oel.trigger(\"froala.doInit\")}).bind(this),X=(function(){this.$el=this.$oel,this.el=this.$el.get(0),this.opts.toolbarInline=!1,this.$oel.trigger(\"froala.doInit\")}).bind(this),Y=(function(){this.$el=this.$oel,this.el=this.$el.get(0),this.opts.toolbarInline=!1,this.$oel.on(\"click.popup\",function(U){U.preventDefault()}),this.$oel.trigger(\"froala.doInit\")}).bind(this);this.opts.editInPopup?Y():n==\"TEXTAREA\"?O():n==\"A\"?x():n==\"IMG\"?X():n==\"BUTTON\"||n==\"INPUT\"?(this.opts.editInPopup=!0,this.opts.toolbarInline=!1,Y()):r()},e.prototype.load=function(n){for(var r in n)if(n.hasOwnProperty(r)){if(this[r]||t.FE.PLUGINS[r]&&this.opts.pluginsEnabled.indexOf(r)<0)continue;if(this[r]=new n[r](this),this[r]._init&&(this[r]._init(),this.opts.initOnClick&&r==\"core\"))return!1}},e.prototype.destroy=function(){this.destroying=!0,this.shared.count--,this.events.$off();var n=this.html.get();if(this.opts.iframe&&(this.events.disableBlur(),this.win.focus(),this.events.enableBlur()),this.events.trigger(\"destroy\",[],!0),this.events.trigger(\"shared.destroy\",void 0,!0),this.shared.count===0){for(var r in this.shared)this.shared.hasOwnProperty(r)&&(this.shared[r]==null,t.FE.SHARED[this.sid][r]=null);delete t.FE.SHARED[this.sid]}this.$oel.parents(\"form\").off(\".\"+this.id),this.$oel.off(\"click.popup\"),this.$oel.removeData(\"froala.editor\"),this.$oel.off(\"froalaEditor\"),this.core.destroy(n),t.FE.INSTANCES.splice(t.FE.INSTANCES.indexOf(this),1)},t.fn.froalaEditor=function(n){for(var r=[],O=0;O<arguments.length;O++)r.push(arguments[O]);if(typeof n==\"string\"){var x=[];return this.each(function(){var X=t(this),Y=X.data(\"froala.editor\");if(!Y)return console.warn(\"Editor should be initialized before calling the \"+n+\" method.\");var U,_;if(n.indexOf(\".\")>0&&Y[n.split(\".\")[0]]?(Y[n.split(\".\")[0]]&&(U=Y[n.split(\".\")[0]]),_=n.split(\".\")[1]):(U=Y,_=n.split(\".\")[0]),U[_]){var F=U[_].apply(Y,r.slice(1));F===void 0?x.push(this):x.length===0&&x.push(F)}else return t.error(\"Method \"+n+\" does not exist in Froala Editor.\")}),x.length==1?x[0]:x}else if(typeof n==\"object\"||!n)return this.each(function(){var X=t(this).data(\"froala.editor\");if(!X){var Y=this;new e(Y,n)}})},t.fn.froalaEditor.Constructor=e,t.FroalaEditor=e,t.FE=e})(jQuery);(function(t){t.FE.XS=0,t.FE.SM=1,t.FE.MD=2,t.FE.LG=3;var e=\"a-z\\\\u0080-\\\\u009f\\\\u00a1-\\\\uffff0-9-_.\";t.FE.LinkRegExCommon=\"[\"+e+\"]{1,}\",t.FE.LinkRegExEnd=\"((:[0-9]{1,5})|)(((\\\\/|\\\\?|#)[a-z\\\\u00a1-\\\\uffff0-9@?\\\\|!^=%&amp;/~+#-\\\\'*-_{}]*)|())\",t.FE.LinkRegExTLD=\"((\"+t.FE.LinkRegExCommon+\")(\\\\.(com|net|org|edu|mil|gov|co|biz|info|me|dev)))\",t.FE.LinkRegExHTTP=\"((ftp|http|https):\\\\/\\\\/\"+t.FE.LinkRegExCommon+\")\",t.FE.LinkRegExAuth=\"((ftp|http|https):\\\\/\\\\/[\\\\u0021-\\\\uffff]{1,}@\"+t.FE.LinkRegExCommon+\")\",t.FE.LinkRegExWWW=\"(www\\\\.\"+t.FE.LinkRegExCommon+\"\\\\.[a-z0-9-]{2,24})\",t.FE.LinkRegEx=\"(\"+t.FE.LinkRegExTLD+\"|\"+t.FE.LinkRegExHTTP+\"|\"+t.FE.LinkRegExWWW+\"|\"+t.FE.LinkRegExAuth+\")\"+t.FE.LinkRegExEnd,t.FE.LinkProtocols=[\"mailto\",\"tel\",\"sms\",\"notes\",\"data\",\"october\"],t.FE.MAIL_REGEX=/.+@.+\\..+/i,t.FE.MODULES.helpers=function(n){function r(){var c=-1,k,A;return navigator.appName==\"Microsoft Internet Explorer\"?(k=navigator.userAgent,A=new RegExp(\"MSIE ([0-9]{1,}[\\\\.0-9]{0,})\"),A.exec(k)!==null&&(c=parseFloat(RegExp.$1))):navigator.appName==\"Netscape\"&&(k=navigator.userAgent,A=new RegExp(\"Trident/.*rv:([0-9]{1,}[\\\\.0-9]{0,})\"),A.exec(k)!==null&&(c=parseFloat(RegExp.$1))),c}function O(){var c={},k=r();if(k>0)c.msie=!0;else{var A=navigator.userAgent.toLowerCase(),Q=/(edge)[ \\/]([\\w.]+)/.exec(A)||/(chrome)[ \\/]([\\w.]+)/.exec(A)||/(webkit)[ \\/]([\\w.]+)/.exec(A)||/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(A)||/(msie) ([\\w.]+)/.exec(A)||A.indexOf(\"compatible\")<0&&/(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(A)||[],z={browser:Q[1]||\"\",version:Q[2]||\"0\"};Q[1]&&(c[z.browser]=!0),c.chrome?c.webkit=!0:c.webkit&&(c.safari=!0)}return c.msie&&(c.version=k),c}function x(){return/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&!U()}function X(){return/(Android)/g.test(navigator.userAgent)&&!U()}function Y(){return/(Blackberry)/g.test(navigator.userAgent)}function U(){return/(Windows Phone)/gi.test(navigator.userAgent)}function _(){return X()||x()||Y()}function F(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(c){window.setTimeout(c,1e3/60)}}function d(c){return parseInt(c,10)||0}function v(){var c=t('<div class=\"fr-visibility-helper\"></div>').appendTo(\"body:first\");try{var k=d(c.css(\"margin-left\"));return c.remove(),k}catch{return t.FE.LG}}function L(){return\"ontouchstart\"in window||window.DocumentTouch&&document instanceof DocumentTouch}function b(c){if(!/^(https?:|ftps?:|)\\/\\//i.test(c))return!1;c=String(c).replace(/</g,\"%3C\").replace(/>/g,\"%3E\").replace(/\"/g,\"%22\").replace(/ /g,\"%20\");var k=new RegExp(\"^\"+t.FE.LinkRegExHTTP+t.FE.LinkRegExEnd+\"$\",\"gi\");return k.test(c)}function h(c){return/^(https?:|ftps?:|)\\/\\//i.test(c)?!1:t.FE.MAIL_REGEX.test(c)}function m(c){var k=/^([A-Za-z]:(\\\\){1,2}|[A-Za-z]:((\\\\){1,2}[^\\\\]+)+)(\\\\)?$/i;return/^(https?:|ftps?:|)\\/\\//i.test(c)||k.test(c)||new RegExp(\"^(\"+t.FE.LinkProtocols.join(\"|\")+\"):\\\\/\\\\/\",\"i\").test(c)||(c=encodeURIComponent(c).replace(/%23/g,\"#\").replace(/%2F/g,\"/\").replace(/%25/g,\"%\").replace(/mailto%3A/gi,\"mailto:\").replace(/file%3A/gi,\"file:\").replace(/sms%3A/gi,\"sms:\").replace(/tel%3A/gi,\"tel:\").replace(/notes%3A/gi,\"notes:\").replace(/data%3Aimage/gi,\"data:image\").replace(/blob%3A/gi,\"blob:\").replace(/%3A(\\d)/gi,\":$1\").replace(/webkit-fake-url%3A/gi,\"webkit-fake-url:\").replace(/%3F/g,\"?\").replace(/%3D/g,\"=\").replace(/%26/g,\"&\").replace(/&amp;/g,\"&\").replace(/%2C/g,\",\").replace(/%3B/g,\";\").replace(/%2B/g,\"+\").replace(/%40/g,\"@\").replace(/%5B/g,\"[\").replace(/%5D/g,\"]\").replace(/%7B/g,\"{\").replace(/%7D/g,\"}\")),c}function u(c){return c&&!c.propertyIsEnumerable(\"length\")&&typeof c==\"object\"&&typeof c.length==\"number\"}function V(c){function k(A){return(\"0\"+parseInt(A,10).toString(16)).slice(-2)}try{return!c||c===\"transparent\"?\"\":/^#[0-9A-F]{6}$/i.test(c)?c:(c=c.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/),(\"#\"+k(c[1])+k(c[2])+k(c[3])).toUpperCase())}catch{return null}}function E(c){var k=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;c=c.replace(k,function(Q,z,w,C){return z+z+w+w+C+C});var A=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(c);return A?\"rgb(\"+parseInt(A[1],16)+\", \"+parseInt(A[2],16)+\", \"+parseInt(A[3],16)+\")\":\"\"}var o;function l(c){var k=(c.css(\"text-align\")||\"\").replace(/-(.*)-/g,\"\");if([\"left\",\"right\",\"justify\",\"center\"].indexOf(k)<0){if(!o){var A=t('<div dir=\"'+(n.opts.direction==\"rtl\"?\"rtl\":\"auto\")+'\" style=\"text-align: '+n.$el.css(\"text-align\")+'; position: fixed; left: -3000px;\"><span id=\"s1\">.</span><span id=\"s2\">.</span></div>');t(\"body:first\").append(A);var Q=A.find(\"#s1\").get(0).getBoundingClientRect().left,z=A.find(\"#s2\").get(0).getBoundingClientRect().left;A.remove(),o=Q<z?\"left\":\"right\"}k=o}return k}var f=null;function i(){return f==null&&(f=navigator.platform.toUpperCase().indexOf(\"MAC\")>=0),f}function S(){function c(Q,z){var w=Q[z];Q[z]=function(C){var G,W=!1,N=!1;if(C&&C.match(A)){C=C.replace(A,\"\"),this.parentNode||(k.appendChild(this),N=!0);var I=this.parentNode;return this.id||(this.id=\"rootedQuerySelector_id_\"+new Date().getTime(),W=!0),G=w.call(I,\"#\"+this.id+\" \"+C),W&&(this.id=\"\"),N&&k.removeChild(this),G}else return w.call(this,C)}}var k=n.o_doc.createElement(\"div\");try{k.querySelectorAll(\":scope *\")}catch{var A=/^\\s*:scope/gi;c(Element.prototype,\"querySelector\"),c(Element.prototype,\"querySelectorAll\"),c(HTMLElement.prototype,\"querySelector\"),c(HTMLElement.prototype,\"querySelectorAll\")}}function s(){return n.o_win.pageYOffset?n.o_win.pageYOffset:n.o_doc.documentElement&&n.o_doc.documentElement.scrollTop?n.o_doc.documentElement.scrollTop:n.o_doc.body.scrollTop?n.o_doc.body.scrollTop:0}function p(){return n.o_win.pageXOffset?n.o_win.pageXOffset:n.o_doc.documentElement&&n.o_doc.documentElement.scrollLeft?n.o_doc.documentElement.scrollLeft:n.o_doc.body.scrollLeft?n.o_doc.body.scrollLeft:0}function M(){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(c){var k=this,A=this;if(!A||!document.documentElement.contains(k))return null;do{if(A.matches(c))return A;A=A.parentElement}while(A!==null);return null})}function a(c){var k=c.getBoundingClientRect();return k={top:Math.round(k.top),bottom:Math.round(k.bottom)},k.top>=0&&k.bottom<=(window.innerHeight||document.documentElement.clientHeight)||k.top<=0&&k.bottom>=(window.innerHeight||document.documentElement.clientHeight)}function y(){n.browser=O(),S(),M()}return{_init:y,isIOS:x,isMac:i,isAndroid:X,isBlackberry:Y,isWindowsPhone:U,isMobile:_,isEmail:h,requestAnimationFrame:F,getPX:d,screenSize:v,isTouch:L,sanitizeURL:m,isArray:u,RGBToHex:V,HEXtoRGB:E,isURL:b,getAlignment:l,scrollTop:s,scrollLeft:p,isInViewPort:a}}})(jQuery);(function(t){t.FE.MODULES.events=function(e){var n={},r;function O(k,A,Q){i(k,A,Q)}function x(){O(e.$el,\"cut copy paste beforepaste\",function(k){p(k.type,[k])})}function X(){O(e.$el,\"click mouseup mousedown touchstart touchend dragenter dragover dragleave dragend drop dragstart\",function(k){p(k.type,[k])}),o(\"mousedown\",function(){for(var k=0;k<t.FE.INSTANCES.length;k++)t.FE.INSTANCES[k]!=e&&t.FE.INSTANCES[k].popups&&t.FE.INSTANCES[k].popups.areVisible()&&t.FE.INSTANCES[k].$el.find(\".fr-marker\").remove()})}function Y(){O(e.$el,\"keydown keypress keyup input\",function(k){p(k.type,[k])})}function U(){O(e.$win,e._mousedown,function(k){p(\"window.mousedown\",[k]),m()}),O(e.$win,e._mouseup,function(k){p(\"window.mouseup\",[k])}),O(e.$win,\"cut copy keydown keyup touchmove touchend\",function(k){p(\"window.\"+k.type,[k])})}function _(){O(e.$doc,\"dragend drop\",function(k){p(\"document.\"+k.type,[k])})}function F(k){var A;if(typeof k>\"u\"&&(k=!0),!e.$wp)return!1;if(e.helpers.isIOS()){e.$win.get(0).focus();var Q=e.$win.scrollTop()===0?1:e.$win.scrollTop();window.scrollTo(0,Q)}if(e.core.hasFocus())return!1;if(!e.core.hasFocus()&&k){var z=e.$win.scrollTop();if(e.browser.msie&&e.$box&&e.$box.css(\"position\",\"fixed\"),e.browser.msie&&e.$wp&&e.$wp.css(\"overflow\",\"visible\"),e.browser.msie&&e.$sc&&e.$sc.css(\"position\",\"fixed\"),u(),e.$el.focus(),e.events.trigger(\"focus\"),m(),e.browser.msie&&e.$sc&&e.$sc.css(\"position\",\"\"),e.browser.msie&&e.$box&&e.$box.css(\"position\",\"\"),e.browser.msie&&e.$wp&&e.$wp.css(\"overflow\",\"auto\"),z!=e.$win.scrollTop()&&e.$win.scrollTop(z),A=e.selection.info(e.el),!A.atStart)return!1}if(!e.core.hasFocus()||e.$el.find(\".fr-marker\").length>0)return!1;if(A=e.selection.info(e.el),A.atStart&&e.selection.isCollapsed()&&e.html.defaultTag()!=null){var w=e.markers.insert();if(w&&!e.node.blockParent(w)){t(w).remove();var C=e.$el.find(e.html.blockTagsQuery()).get(0);C&&(t(C).prepend(t.FE.MARKERS),e.selection.restore())}else w&&t(w).remove()}}var d=!1;function v(){O(e.$el,\"focus\",function(k){V()&&(F(!1),d===!1&&p(k.type,[k]))}),O(e.$el,\"blur\",function(k){V()&&d===!0&&(p(k.type,[k]),m())}),i(e.$el,\"mousedown\",'[contenteditable=\"true\"]',function(){u(),e.$el.blur()}),o(\"focus\",function(){d=!0}),o(\"blur\",function(){d=!1})}function L(){e.helpers.isMobile()?(e._mousedown=\"touchstart\",e._mouseup=\"touchend\",e._move=\"touchmove\",e._mousemove=\"touchmove\"):(e._mousedown=\"mousedown\",e._mouseup=\"mouseup\",e._move=\"\",e._mousemove=\"mousemove\")}function b(k){var A=t(k.currentTarget);if(e.edit.isDisabled()||e.node.hasClass(A.get(0),\"fr-disabled\"))return k.preventDefault(),!1;if(k.type===\"mousedown\"&&k.which!==1)return!0;e.helpers.isMobile()||k.preventDefault(),(e.helpers.isAndroid()||e.helpers.isWindowsPhone())&&A.parents(\".fr-dropdown-menu\").length===0&&(k.preventDefault(),k.stopPropagation()),A.addClass(\"fr-selected\"),e.events.trigger(\"commands.mousedown\",[A])}function h(k,A){var Q=t(k.currentTarget);if(e.edit.isDisabled()||e.node.hasClass(Q.get(0),\"fr-disabled\"))return k.preventDefault(),!1;if(k.type===\"mouseup\"&&k.which!==1||!e.node.hasClass(Q.get(0),\"fr-selected\"))return!0;if(k.type!=\"touchmove\"){if(k.stopPropagation(),k.stopImmediatePropagation(),k.preventDefault(),!e.node.hasClass(Q.get(0),\"fr-selected\"))return e.button.getButtons(\".fr-selected\",!0).removeClass(\"fr-selected\"),!1;if(e.button.getButtons(\".fr-selected\",!0).removeClass(\"fr-selected\"),Q.data(\"dragging\")||Q.attr(\"disabled\"))return Q.removeData(\"dragging\"),!1;var z=Q.data(\"timeout\");z&&(clearTimeout(z),Q.removeData(\"timeout\")),A.apply(e,[k])}else Q.data(\"timeout\")||Q.data(\"timeout\",setTimeout(function(){Q.data(\"dragging\",!0)},100))}function m(){r=!0}function u(){r=!1}function V(){return r}function E(k,A,Q){i(k,e._mousedown,A,function(z){e.edit.isDisabled()||b(z)},!0),i(k,e._mouseup+\" \"+e._move,A,function(z){e.edit.isDisabled()||h(z,Q)},!0),i(k,\"mousedown click mouseup\",A,function(z){e.edit.isDisabled()||z.stopPropagation()},!0),o(\"window.mouseup\",function(){e.edit.isDisabled()||(k.find(A).removeClass(\"fr-selected\"),m())}),i(k,\"mouseenter\",A,function(){t(this).hasClass(\"fr-options\")&&t(this).prev(\".fr-btn\").addClass(\"fr-btn-hover\"),t(this).next(\".fr-btn\").hasClass(\"fr-options\")&&t(this).next(\".fr-btn\").addClass(\"fr-btn-hover\")}),i(k,\"mouseleave\",A,function(){t(this).hasClass(\"fr-options\")&&t(this).prev(\".fr-btn\").removeClass(\"fr-btn-hover\"),t(this).next(\".fr-btn\").hasClass(\"fr-options\")&&t(this).next(\".fr-btn\").removeClass(\"fr-btn-hover\")})}function o(k,A,Q){var z=k.split(\" \");if(z.length>1){for(var w=0;w<z.length;w++)o(z[w],A,Q);return!0}typeof Q>\"u\"&&(Q=!1);var C;k.indexOf(\"shared.\")!==0?C=n[k]=n[k]||[]:C=e.shared._events[k]=e.shared._events[k]||[],Q?C.unshift(A):C.push(A)}var l=[];function f(k){return function(){if(!e.destroying)return k.apply(this,arguments)}}function i(k,A,Q,z,w){typeof Q==\"function\"&&(w=z,z=Q,Q=!1);var C=w?e.shared.$_events:l,G=w?e.sid:e.id;z=f(z),Q?k.on(A.split(\" \").join(\".ed\"+G+\" \")+\".ed\"+G,Q,z):k.on(A.split(\" \").join(\".ed\"+G+\" \")+\".ed\"+G,z),C.push([k,A.split(\" \").join(\".ed\"+G+\" \")+\".ed\"+G])}function S(k){for(var A=0;A<k.length;A++)k[A][0].off(k[A][1])}function s(){S(l),l=[],e.shared.count===0&&(S(e.shared.$_events),e.shared.$_events=[])}function p(k,A,Q){if(!e.edit.isDisabled()||Q){var z;if(k.indexOf(\"shared.\")!==0)z=n[k];else{if(e.shared.count>0)return!1;z=e.shared._events[k]}var w;if(z){for(var C=0;C<z.length;C++)if(w=z[C].apply(e,A),w===!1)return!1}return w=e.$oel.triggerHandler(\"froalaEditor.\"+k,t.merge([e],A||[])),w===!1?!1:w}}function M(k,A,Q){if(!e.edit.isDisabled()||Q){var z;if(k.indexOf(\"shared.\")!==0)z=n[k];else{if(e.shared.count>0)return!1;z=e.shared._events[k]}var w;if(z)for(var C=0;C<z.length;C++)w=z[C].apply(e,[A]),typeof w<\"u\"&&(A=w);return w=e.$oel.triggerHandler(\"froalaEditor.\"+k,t.merge([e],[A])),typeof w<\"u\"&&(A=w),A}}function a(){for(var k in n)n.hasOwnProperty(k)&&delete n[k]}function y(){for(var k in e.shared._events)e.shared._events.hasOwnProperty(k)&&delete e.shared._events[k]}function c(){e.shared.$_events=e.shared.$_events||[],e.shared._events={},L(),X(),U(),_(),Y(),v(),m(),x(),o(\"destroy\",a),o(\"shared.destroy\",y)}return{_init:c,on:o,trigger:p,bindClick:E,disableBlur:u,enableBlur:m,blurActive:V,focus:F,chainTrigger:M,$on:i,$off:s}}})(jQuery);(function(t){t.FE.MODULES.node=function(e){function n(i){return!i||i.tagName==\"IFRAME\"?[]:Array.prototype.slice.call(i.childNodes||[])}function r(i){return!i||i.nodeType!=Node.ELEMENT_NODE?!1:t.FE.BLOCK_TAGS.indexOf(i.tagName.toLowerCase())>=0}function O(i){return!i||i.nodeType!=Node.ELEMENT_NODE?!1:i.tagName.toLowerCase()==\"a\"}function x(i,S){if(!i)return!0;if(i.querySelector(\"table\"))return!1;var s=n(i);s.length==1&&r(s[0])&&(s=n(s[0]));for(var p=!1,M=0;M<s.length;M++){var a=s[M];if(!(S&&e.node.hasClass(a,\"fr-marker\"))&&!(a.nodeType==Node.TEXT_NODE&&a.textContent.length===0)){if(a.tagName!=\"BR\"&&(a.textContent||\"\").replace(/\\u200B/gi,\"\").replace(/\\n/g,\"\").length>0||p)return!1;a.tagName==\"BR\"&&(p=!0)}}return!(i.querySelectorAll(t.FE.VOID_ELEMENTS.join(\",\")).length-i.querySelectorAll(\"br\").length||i.querySelector(e.opts.htmlAllowedEmptyTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\")||i.querySelectorAll(t.FE.BLOCK_TAGS.join(\",\")).length>1||i.querySelector(e.opts.htmlDoNotWrapTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\"))}function X(i){for(;i&&i.parentNode!==e.el&&!(i.parentNode&&e.node.hasClass(i.parentNode,\"fr-inner\"));)if(i=i.parentNode,r(i))return i;return null}function Y(i,S,s){if(typeof S>\"u\"&&(S=[]),typeof s>\"u\"&&(s=!0),S.push(e.el),S.indexOf(i.parentNode)>=0||i.parentNode&&e.node.hasClass(i.parentNode,\"fr-inner\")||i.parentNode&&t.FE.SIMPLE_ENTER_TAGS.indexOf(i.parentNode.tagName)>=0&&s)return null;for(;S.indexOf(i.parentNode)<0&&i.parentNode&&!e.node.hasClass(i.parentNode,\"fr-inner\")&&(t.FE.SIMPLE_ENTER_TAGS.indexOf(i.parentNode.tagName)<0||!s)&&(!(r(i)&&r(i.parentNode))||!s);)i=i.parentNode;return i}function U(i){var S={},s=i.attributes;if(s)for(var p=0;p<s.length;p++){var M=s[p];S[M.nodeName]=M.value}return S}function _(i){for(var S=\"\",s=U(i),p=Object.keys(s).sort(),M=0;M<p.length;M++){var a=p[M],y=s[a];y.indexOf(\"'\")<0&&y.indexOf('\"')>=0?S+=\" \"+a+\"='\"+y+\"'\":(y.indexOf('\"')>=0&&y.indexOf(\"'\")>=0&&(y=y.replace(/\"/g,\"&quot;\")),S+=\" \"+a+'=\"'+y+'\"')}return S}function F(i){for(var S=i.attributes,s=S.length-1;s>=0;s--){var p=S[s];i.removeAttribute(p.nodeName)}}function d(i){return\"<\"+i.tagName.toLowerCase()+_(i)+\">\"}function v(i){return\"</\"+i.tagName.toLowerCase()+\">\"}function L(i,S){typeof S>\"u\"&&(S=!0);for(var s=i.previousSibling;s&&S&&e.node.hasClass(s,\"fr-marker\");)s=s.previousSibling;return s?s.nodeType==Node.TEXT_NODE&&s.textContent===\"\"?L(s):!1:!0}function b(i,S){typeof S>\"u\"&&(S=!0);for(var s=i.nextSibling;s&&S&&e.node.hasClass(s,\"fr-marker\");)s=s.nextSibling;return s?s.nodeType==Node.TEXT_NODE&&s.textContent===\"\"?b(s):!1:!0}function h(i){return i&&i.nodeType==Node.ELEMENT_NODE&&t.FE.VOID_ELEMENTS.indexOf((i.tagName||\"\").toLowerCase())>=0}function m(i){return i?[\"UL\",\"OL\"].indexOf(i.tagName)>=0:!1}function u(i){return i===e.el}function V(i){return i&&i.nodeType==Node.ELEMENT_NODE&&i.getAttribute(\"class\")&&(i.getAttribute(\"class\")||\"\").indexOf(\"fr-deletable\")>=0}function E(i){return i===e.doc.activeElement&&(!e.doc.hasFocus||e.doc.hasFocus())&&!!(u(i)||i.type||i.href||~i.tabIndex)}function o(i){return(!i.getAttribute||i.getAttribute(\"contenteditable\")!=\"false\")&&[\"STYLE\",\"SCRIPT\"].indexOf(i.tagName)<0}function l(i,S){return i instanceof t&&(i=i.get(0)),i&&i.classList&&i.classList.contains(S)}function f(i){return e.browser.msie?i:{acceptNode:i}}return{isBlock:r,isEmpty:x,blockParent:X,deepestParent:Y,rawAttributes:U,attributes:_,clearAttributes:F,openTagString:d,closeTagString:v,isFirstSibling:L,isLastSibling:b,isList:m,isLink:O,isElement:u,contents:n,isVoid:h,hasFocus:E,isEditable:o,isDeletable:V,hasClass:l,filter:f}}})(jQuery);(function(t){t.FE.INVISIBLE_SPACE=\"&#8203;\",t.FE.START_MARKER='<span class=\"fr-marker\" data-id=\"0\" data-type=\"true\" style=\"display: none; line-height: 0;\">'+t.FE.INVISIBLE_SPACE+\"</span>\",t.FE.END_MARKER='<span class=\"fr-marker\" data-id=\"0\" data-type=\"false\" style=\"display: none; line-height: 0;\">'+t.FE.INVISIBLE_SPACE+\"</span>\",t.FE.MARKERS=t.FE.START_MARKER+t.FE.END_MARKER,t.FE.MODULES.markers=function(e){function n(U,_){return t('<span class=\"fr-marker\" data-id=\"'+_+'\" data-type=\"'+U+'\" style=\"display: '+(e.browser.safari?\"none\":\"inline-block\")+'; line-height: 0;\">'+t.FE.INVISIBLE_SPACE+\"</span>\",e.doc)[0]}function r(U,_,F){var d,v,L;try{var b=U.cloneRange();if(b.collapse(_),b.insertNode(n(_,F)),_===!0)for(d=e.$el.find('span.fr-marker[data-type=\"true\"][data-id=\"'+F+'\"]').get(0),L=d.nextSibling;L&&L.nodeType===Node.TEXT_NODE&&L.textContent.length===0;)t(L).remove(),L=d.nextSibling;if(_===!0&&!U.collapsed){for(;!e.node.isElement(d.parentNode)&&!L;)t(d.parentNode).after(d),L=d.nextSibling;if(L&&L.nodeType===Node.ELEMENT_NODE&&e.node.isBlock(L)&&L.tagName!==\"HR\"){v=[L];do L=v[0],v=e.node.contents(L);while(v[0]&&e.node.isBlock(v[0]));t(L).prepend(t(d))}}if(_===!1&&!U.collapsed){if(d=e.$el.find('span.fr-marker[data-type=\"false\"][data-id=\"'+F+'\"]').get(0),L=d.previousSibling,L&&L.nodeType===Node.ELEMENT_NODE&&e.node.isBlock(L)&&L.tagName!==\"HR\"){v=[L];do L=v[v.length-1],v=e.node.contents(L);while(v[v.length-1]&&e.node.isBlock(v[v.length-1]));t(L).append(t(d))}d.parentNode&&[\"TD\",\"TH\"].indexOf(d.parentNode.tagName)>=0&&d.parentNode.previousSibling&&!d.previousSibling&&t(d.parentNode.previousSibling).append(d)}var h=e.$el.find('span.fr-marker[data-type=\"'+_+'\"][data-id=\"'+F+'\"]').get(0);return h&&(h.style.display=\"none\"),h}catch{return null}}function O(){if(!e.$wp)return null;try{var U=e.selection.ranges(0),_=U.commonAncestorContainer;if(e.core.isEmpty())return e.selection.setAtStart(e.el),e.$el.find(\".fr-marker:first\").replaceWith('<span class=\"fr-single-marker\" style=\"display: none; line-height: 0;\">'+t.FE.INVISIBLE_SPACE+\"</span>\"),e.$el.find(\".fr-marker\").remove(),e.$el.find(\".fr-single-marker\").removeClass(\"fr-single-marker\").addClass(\"fr-marker\").get(0);if(_!=e.el&&e.$el.find(_).length===0)return null;var F=U.cloneRange(),d=U.cloneRange();F.collapse(!0);var v=t('<span class=\"fr-marker\" style=\"display: none; line-height: 0;\">'+t.FE.INVISIBLE_SPACE+\"</span>\",e.doc)[0];if(F.insertNode(v),v=e.$el.find(\"span.fr-marker\").get(0),v){for(var L=v.nextSibling;L&&L.nodeType===Node.TEXT_NODE&&L.textContent.length===0;)t(L).remove(),L=e.$el.find(\"span.fr-marker\").get(0).nextSibling;return e.selection.clear(),e.selection.get().addRange(d),v}else return null}catch(b){console.warn(\"MARKER\",b)}}function x(){e.selection.isCollapsed()||e.selection.remove();var U=e.$el.find(\".fr-marker\").get(0);if(U==null&&(U=O()),U==null)return null;var _=e.node.deepestParent(U);if(_||(_=e.node.blockParent(U),_&&_.tagName!=\"LI\"&&(_=null)),_)if(e.node.isBlock(_)&&e.node.isEmpty(_))_.tagName==\"LI\"&&_.parentNode.firstElementChild==_&&!e.node.isEmpty(_.parentNode)?t(_).append('<span class=\"fr-marker\"></span>'):t(_).replaceWith('<span class=\"fr-marker\"></span>');else if(e.cursor.isAtStart(U,_))t(_).before('<span class=\"fr-marker\"></span>'),t(U).remove();else if(e.cursor.isAtEnd(U,_))t(_).after('<span class=\"fr-marker\"></span>'),t(U).remove();else{var F=U,d=\"\",v=\"\";do F=F.parentNode,d=d+e.node.closeTagString(F),v=e.node.openTagString(F)+v;while(F!=_);t(U).replaceWith('<span id=\"fr-break\"></span>');var L=e.node.openTagString(_)+t(_).html()+e.node.closeTagString(_);L=L.replace(/<span id=\"fr-break\"><\\/span>/g,d+'<span class=\"fr-marker\"></span>'+v),t(_).replaceWith(L)}return e.$el.find(\".fr-marker\").get(0)}function X(U){var _=U.clientX,F=U.clientY;Y();var d,v=null;if(typeof e.doc.caretPositionFromPoint<\"u\"?(d=e.doc.caretPositionFromPoint(_,F),v=e.doc.createRange(),v.setStart(d.offsetNode,d.offset),v.setEnd(d.offsetNode,d.offset)):typeof e.doc.caretRangeFromPoint<\"u\"&&(d=e.doc.caretRangeFromPoint(_,F),v=e.doc.createRange(),v.setStart(d.startContainer,d.startOffset),v.setEnd(d.startContainer,d.startOffset)),v!==null&&typeof e.win.getSelection<\"u\"){var L=e.win.getSelection();L.removeAllRanges(),L.addRange(v)}else if(typeof e.doc.body.createTextRange<\"u\")try{v=e.doc.body.createTextRange(),v.moveToPoint(_,F);var b=v.duplicate();b.moveToPoint(_,F),v.setEndPoint(\"EndToEnd\",b),v.select()}catch{return!1}O()}function Y(){e.$el.find(\".fr-marker\").remove()}return{place:r,insert:O,split:x,insertAtPoint:X,remove:Y}}})(jQuery);(function(t){t.FE.MODULES.selection=function(e){function n(){var p=\"\";return e.win.getSelection?p=e.win.getSelection():e.doc.getSelection?p=e.doc.getSelection():e.doc.selection&&(p=e.doc.selection.createRange().text),p.toString()}function r(){var p=\"\";return e.win.getSelection?p=e.win.getSelection():e.doc.getSelection?p=e.doc.getSelection():p=e.doc.selection.createRange(),p}function O(p){var M=r(),a=[];if(M&&M.getRangeAt&&M.rangeCount){a=[];for(var y=0;y<M.rangeCount;y++)a.push(M.getRangeAt(y))}else e.doc.createRange?a=[e.doc.createRange()]:a=[];return typeof p<\"u\"?a[p]:a}function x(){var p=r();try{p.removeAllRanges?p.removeAllRanges():p.empty?p.empty():p.clear&&p.clear()}catch{}}function X(){var p=r();try{if(p.rangeCount){var M=O(0),a=M.startContainer,y;if(e.node.isElement(a)&&M.startOffset===0&&a.childNodes.length)for(;a.childNodes.length&&a.childNodes[0].nodeType===Node.ELEMENT_NODE;)a=a.childNodes[0];if(a.nodeType==Node.TEXT_NODE&&M.startOffset==(a.textContent||\"\").length&&a.nextSibling&&(a=a.nextSibling),a.nodeType==Node.ELEMENT_NODE){var c=!1;if(a.childNodes.length>0&&a.childNodes[M.startOffset]){for(y=a.childNodes[M.startOffset];y&&y.nodeType==Node.TEXT_NODE&&y.textContent.length===0;)y=y.nextSibling;if(y&&y.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(a=y,c=!0),!c&&a.childNodes.length>1&&M.startOffset>0&&a.childNodes[M.startOffset-1]){for(y=a.childNodes[M.startOffset-1];y&&y.nodeType==Node.TEXT_NODE&&y.textContent.length===0;)y=y.nextSibling;y&&y.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(a=y,c=!0)}}else!M.collapsed&&a.nextSibling&&a.nextSibling.nodeType==Node.ELEMENT_NODE&&(y=a.nextSibling,y&&y.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(a=y,c=!0));!c&&a.childNodes.length>0&&t(a.childNodes[0]).text().replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&[\"BR\",\"IMG\",\"HR\"].indexOf(a.childNodes[0].tagName)<0&&(a=a.childNodes[0])}for(;a.nodeType!=Node.ELEMENT_NODE&&a.parentNode;)a=a.parentNode;for(var k=a;k&&k.tagName!=\"HTML\";){if(k==e.el)return a;k=t(k).parent()[0]}}}catch{}return e.el}function Y(){var p=r();try{if(p.rangeCount){var M=O(0),a=M.endContainer,y;if(a.nodeType==Node.ELEMENT_NODE){var c=!1;a.childNodes.length>0&&a.childNodes[M.endOffset]&&t(a.childNodes[M.endOffset]).text()===n()?(a=a.childNodes[M.endOffset],c=!0):!M.collapsed&&a.previousSibling&&a.previousSibling.nodeType==Node.ELEMENT_NODE?(y=a.previousSibling,y&&y.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(a=y,c=!0)):!M.collapsed&&a.childNodes.length>0&&a.childNodes[M.endOffset]&&(y=a.childNodes[M.endOffset].previousSibling,y.nodeType==Node.ELEMENT_NODE&&y&&y.textContent.replace(/\\u200B/g,\"\")===n().replace(/\\u200B/g,\"\")&&(a=y,c=!0)),!c&&a.childNodes.length>0&&t(a.childNodes[a.childNodes.length-1]).text()===n()&&[\"BR\",\"IMG\",\"HR\"].indexOf(a.childNodes[a.childNodes.length-1].tagName)<0&&(a=a.childNodes[a.childNodes.length-1])}for(a.nodeType==Node.TEXT_NODE&&M.endOffset===0&&a.previousSibling&&a.previousSibling.nodeType==Node.ELEMENT_NODE&&(a=a.previousSibling);a.nodeType!=Node.ELEMENT_NODE&&a.parentNode;)a=a.parentNode;for(var k=a;k&&k.tagName!=\"HTML\";){if(k==e.el)return a;k=t(k).parent()[0]}}}catch{}return e.el}function U(p,M){var a=p;return a.nodeType==Node.ELEMENT_NODE&&a.childNodes.length>0&&a.childNodes[M]&&(a=a.childNodes[M]),a.nodeType==Node.TEXT_NODE&&(a=a.parentNode),a}function _(){var p=[],M,a=r();if(o()&&a.rangeCount){var y=O();for(M=0;M<y.length;M++){var c=y[M],k,A=U(c.startContainer,c.startOffset),Q=U(c.endContainer,c.endOffset);(e.node.isBlock(A)||e.node.hasClass(A,\"fr-inner\"))&&p.indexOf(A)<0&&p.push(A),k=e.node.blockParent(A),k&&p.indexOf(k)<0&&p.push(k);for(var z=[],w=A;w!==Q&&w!==e.el;)z.indexOf(w)<0&&w.children&&w.children.length?(z.push(w),w=w.children[0]):w.nextSibling?w=w.nextSibling:w.parentNode&&(w=w.parentNode,z.push(w)),e.node.isBlock(w)&&z.indexOf(w)<0&&p.indexOf(w)<0&&(w!==Q||c.endOffset>0)&&p.push(w);e.node.isBlock(Q)&&p.indexOf(Q)<0&&c.endOffset>0&&p.push(Q),k=e.node.blockParent(Q),k&&p.indexOf(k)<0&&p.push(k)}}for(M=p.length-1;M>0;M--)t(p[M]).find(p).length&&p.splice(M,1);return p}function F(){if(e.$wp){e.markers.remove();var p=O(),M=[],a,y;for(y=0;y<p.length;y++)if(p[y].startContainer!==e.doc||e.browser.msie){a=p[y];var c=a.collapsed,k=e.markers.place(a,!0,y),A=e.markers.place(a,!1,y);if((typeof k>\"u\"||!k)&&c&&(t(\".fr-marker\").remove(),e.selection.setAtEnd(e.el)),e.el.normalize(),e.browser.safari&&!c)try{a=e.doc.createRange(),a.setStartAfter(k),a.setEndBefore(A),M.push(a)}catch{}}if(e.browser.safari&&M.length)for(e.selection.clear(),y=0;y<M.length;y++)e.selection.get().addRange(M[y])}}function d(){var p,M=e.el.querySelectorAll('.fr-marker[data-type=\"true\"]');if(!e.$wp)return e.markers.remove(),!1;if(M.length===0)return!1;if(e.browser.msie||e.browser.edge)for(p=0;p<M.length;p++)M[p].style.display=\"inline-block\";!e.core.hasFocus()&&!e.browser.msie&&!e.browser.webkit&&e.$el.focus(),x();var a=r();for(p=0;p<M.length;p++){var y=t(M[p]).data(\"id\"),c=M[p],k=e.doc.createRange(),A=e.$el.find('.fr-marker[data-type=\"false\"][data-id=\"'+y+'\"]');(e.browser.msie||e.browser.edge)&&A.css(\"display\",\"inline-block\");var Q=null;if(A.length>0){A=A[0];try{for(var z,w=!1,C=c.nextSibling;C&&C.nodeType==Node.TEXT_NODE&&C.textContent.length===0;)z=C,C=C.nextSibling,t(z).remove();for(var G=A.nextSibling;G&&G.nodeType==Node.TEXT_NODE&&G.textContent.length===0;)z=G,G=G.nextSibling,t(z).remove();if(c.nextSibling==A||A.nextSibling==c){for(var W=c.nextSibling==A?c:A,N=W==c?A:c,I=W.previousSibling;I&&I.nodeType==Node.TEXT_NODE&&I.length===0;)z=I,I=I.previousSibling,t(z).remove();if(I&&I.nodeType==Node.TEXT_NODE)for(;I&&I.previousSibling&&I.previousSibling.nodeType==Node.TEXT_NODE;)I.previousSibling.textContent=I.previousSibling.textContent+I.textContent,I=I.previousSibling,t(I.nextSibling).remove();for(var H=N.nextSibling;H&&H.nodeType==Node.TEXT_NODE&&H.length===0;)z=H,H=H.nextSibling,t(z).remove();if(H&&H.nodeType==Node.TEXT_NODE)for(;H&&H.nextSibling&&H.nextSibling.nodeType==Node.TEXT_NODE;)H.nextSibling.textContent=H.textContent+H.nextSibling.textContent,H=H.nextSibling,t(H.previousSibling).remove();if(I&&(e.node.isVoid(I)||e.node.isBlock(I))&&(I=null),H&&(e.node.isVoid(H)||e.node.isBlock(H))&&(H=null),I&&H&&I.nodeType==Node.TEXT_NODE&&H.nodeType==Node.TEXT_NODE){t(c).remove(),t(A).remove();var J=I.textContent.length;I.textContent=I.textContent+H.textContent,t(H).remove(),e.opts.htmlUntouched||e.spaces.normalize(I),k.setStart(I,J),k.setEnd(I,J),w=!0}else!I&&H&&H.nodeType==Node.TEXT_NODE?(t(c).remove(),t(A).remove(),e.opts.htmlUntouched||e.spaces.normalize(H),Q=t(e.doc.createTextNode(\"\\u200B\")),t(H).before(Q),k.setStart(H,0),k.setEnd(H,0),w=!0):!H&&I&&I.nodeType==Node.TEXT_NODE&&(t(c).remove(),t(A).remove(),e.opts.htmlUntouched||e.spaces.normalize(I),Q=t(e.doc.createTextNode(\"\\u200B\")),t(I).after(Q),k.setStart(I,I.textContent.length),k.setEnd(I,I.textContent.length),w=!0)}if(!w){var Z,se;(e.browser.chrome||e.browser.edge)&&c.nextSibling==A?(Z=v(A,k,!0)||k.setStartAfter(A),se=v(c,k,!1)||k.setEndBefore(c)):(c.previousSibling==A&&(c=A,A=c.nextSibling),!(A.nextSibling&&A.nextSibling.tagName===\"BR\")&&!(!A.nextSibling&&e.node.isBlock(c.previousSibling))&&!(c.previousSibling&&c.previousSibling.tagName==\"BR\")&&(c.style.display=\"inline\",A.style.display=\"inline\",Q=t(e.doc.createTextNode(\"\\u200B\"))),Z=v(c,k,!0)||t(c).before(Q)&&k.setStartBefore(c),se=v(A,k,!1)||t(A).after(Q)&&k.setEndAfter(A)),typeof Z==\"function\"&&Z(),typeof se==\"function\"&&se()}}catch(g){console.warn(\"RESTORE RANGE\",g)}}Q&&Q.remove();try{a.addRange(k)}catch(g){console.warn(\"ADD RANGE\",g)}}e.markers.remove()}function v(p,M,a){var y,c=p.previousSibling,k=p.nextSibling;return c&&k&&c.nodeType==Node.TEXT_NODE&&k.nodeType==Node.TEXT_NODE?(y=c.textContent.length,a?(k.textContent=c.textContent+k.textContent,t(c).remove(),t(p).remove(),e.opts.htmlUntouched||e.spaces.normalize(k),function(){M.setStart(k,y)}):(c.textContent=c.textContent+k.textContent,t(k).remove(),t(p).remove(),e.opts.htmlUntouched||e.spaces.normalize(c),function(){M.setEnd(c,y)})):c&&!k&&c.nodeType==Node.TEXT_NODE?(y=c.textContent.length,a?(e.opts.htmlUntouched||e.spaces.normalize(c),function(){M.setStart(c,y)}):(e.opts.htmlUntouched||e.spaces.normalize(c),function(){M.setEnd(c,y)})):k&&!c&&k.nodeType==Node.TEXT_NODE?a?(e.opts.htmlUntouched||e.spaces.normalize(k),function(){M.setStart(k,0)}):(e.opts.htmlUntouched||e.spaces.normalize(k),function(){M.setEnd(k,0)}):!1}function L(){for(var p=e.$el.find(\".fr-marker\"),M=0;M<p.length;M++)if(t(p[M]).parentsUntil('.fr-element, [contenteditable=\"true\"]','[contenteditable=\"false\"]').length)return!1;return!0}function b(){for(var p=O(),M=0;M<p.length;M++)if(!p[M].collapsed)return!1;return!0}function h(p){var M=!1,a=!1,y,c;if(e.win.getSelection){var k=e.win.getSelection();k.rangeCount&&(y=k.getRangeAt(0),c=y.cloneRange(),c.selectNodeContents(p),c.setEnd(y.startContainer,y.startOffset),M=c.toString()===\"\",c.selectNodeContents(p),c.setStart(y.endContainer,y.endOffset),a=c.toString()===\"\")}else e.doc.selection&&e.doc.selection.type!=\"Control\"&&(y=e.doc.selection.createRange(),c=y.duplicate(),c.moveToElementText(p),c.setEndPoint(\"EndToStart\",y),M=c.text===\"\",c.moveToElementText(p),c.setEndPoint(\"StartToEnd\",y),a=c.text===\"\");return{atStart:M,atEnd:a}}function m(){if(b())return!1;e.selection.save();var p=e.el.querySelectorAll(\"td, th, img, br\"),M;for(M=0;M<p.length;M++)p[M].nextSibling&&(p[M].innerHTML='<span class=\"fr-mk\">'+t.FE.INVISIBLE_SPACE+\"</span>\"+p[M].innerHTML);var a=!1,y=h(e.el);for(y.atStart&&y.atEnd&&(a=!0),p=e.el.querySelectorAll(\".fr-mk\"),M=0;M<p.length;M++)p[M].parentNode.removeChild(p[M]);return e.selection.restore(),a}function u(p,M){typeof M>\"u\"&&(M=!0);var a=t(p).html();a&&a.replace(/\\u200b/g,\"\").length!=a.length&&t(p).html(a.replace(/\\u200b/g,\"\"));for(var y=e.node.contents(p),c=0;c<y.length;c++)y[c].nodeType!=Node.ELEMENT_NODE?t(y[c]).remove():(u(y[c],c===0),c===0&&(M=!1));p.nodeType==Node.TEXT_NODE?t(p).replaceWith('<span data-first=\"true\" data-text=\"true\"></span>'):M&&t(p).attr(\"data-first\",!0)}function V(){return t(this).find(\"fr-inner\").length===0}function E(p,M){var a=e.node.contents(p.get(0));[\"TD\",\"TH\"].indexOf(p.get(0).tagName)>=0&&p.find(\".fr-marker\").length==1&&e.node.hasClass(a[0],\"fr-marker\")&&p.attr(\"data-del-cell\",!0);for(var y=0;y<a.length;y++){var c=a[y];e.node.hasClass(c,\"fr-marker\")?M=(M+1)%2:M?t(c).find(\".fr-marker\").length>0?M=E(t(c),M):[\"TD\",\"TH\"].indexOf(c.tagName)<0&&!e.node.hasClass(c,\"fr-inner\")?!e.opts.keepFormatOnDelete||e.$el.find(\"[data-first]\").length>0||e.node.isVoid(c)?t(c).remove():u(c):e.node.hasClass(c,\"fr-inner\")?t(c).find(\".fr-inner\").length===0?t(c).html(\"<br>\"):t(c).find(\".fr-inner\").filter(V).html(\"<br>\"):(t(c).empty(),t(c).attr(\"data-del-cell\",!0)):t(c).find(\".fr-marker\").length>0&&(M=E(t(c),M))}return M}function o(){try{if(!e.$wp)return!1;for(var p=O(0),M=p.commonAncestorContainer;M&&!e.node.isElement(M);)M=M.parentNode;return!!e.node.isElement(M)}catch{return!1}}function l(){if(b())return!0;var p;F();var M=function(g){for(var R=g.previousSibling;R&&R.nodeType==Node.TEXT_NODE&&R.textContent.length===0;){var $=R;R=R.previousSibling,t($).remove()}return R},a=function(g){for(var R=g.nextSibling;R&&R.nodeType==Node.TEXT_NODE&&R.textContent.length===0;){var $=R;R=R.nextSibling,t($).remove()}return R},y=e.$el.find('.fr-marker[data-type=\"true\"]');for(p=0;p<y.length;p++)for(var c=y[p];!M(c)&&!e.node.isBlock(c.parentNode)&&!e.$el.is(c.parentNode)&&!e.node.hasClass(c.parentNode,\"fr-inner\");)t(c.parentNode).before(c);var k=e.$el.find('.fr-marker[data-type=\"false\"]');for(p=0;p<k.length;p++){for(var A=k[p];!a(A)&&!e.node.isBlock(A.parentNode)&&!e.$el.is(A.parentNode)&&!e.node.hasClass(A.parentNode,\"fr-inner\");)t(A.parentNode).after(A);A.parentNode&&e.node.isBlock(A.parentNode)&&e.node.isEmpty(A.parentNode)&&!e.$el.is(A.parentNode)&&!e.node.hasClass(A.parentNode,\"fr-inner\")&&e.opts.keepFormatOnDelete&&t(A.parentNode).after(A)}if(L()){E(e.$el,0);var Q=e.$el.find('[data-first=\"true\"]');if(Q.length)e.$el.find(\".fr-marker\").remove(),Q.append(t.FE.INVISIBLE_SPACE+t.FE.MARKERS).removeAttr(\"data-first\"),Q.attr(\"data-text\")&&Q.replaceWith(Q.html());else for(e.$el.find(\"table\").filter(function(){var g=t(this).find(\"[data-del-cell]\").length>0&&t(this).find(\"[data-del-cell]\").length==t(this).find(\"td, th\").length;return g}).remove(),e.$el.find(\"[data-del-cell]\").removeAttr(\"data-del-cell\"),y=e.$el.find('.fr-marker[data-type=\"true\"]'),p=0;p<y.length;p++){var z=y[p],w=z.nextSibling,C=e.$el.find('.fr-marker[data-type=\"false\"][data-id=\"'+t(z).data(\"id\")+'\"]').get(0);if(C){if(z&&!(w&&w==C)){var G=e.node.blockParent(z),W=e.node.blockParent(C),N=!1,I=!1;if(G&&[\"UL\",\"OL\"].indexOf(G.tagName)>=0&&(G=null,N=!0),W&&[\"UL\",\"OL\"].indexOf(W.tagName)>=0&&(W=null,I=!0),t(z).after(C),G!=W)if(G==null&&!N){var H=e.node.deepestParent(z);H?(t(H).after(t(W).html()),t(W).remove()):t(W).parentsUntil(e.$el,\"table\").length===0&&(t(z).next().after(t(W).html()),t(W).remove())}else if(W==null&&!I&&t(G).parentsUntil(e.$el,\"table\").length===0){for(w=G;!w.nextSibling&&w.parentNode!=e.el;)w=w.parentNode;for(w=w.nextSibling;w&&w.tagName!=\"BR\";){var J=w.nextSibling;t(G).append(w),w=J}w&&w.tagName==\"BR\"&&t(w).remove()}else G&&W&&t(G).parentsUntil(e.$el,\"table\").length===0&&t(W).parentsUntil(e.$el,\"table\").length===0&&t(G).find(W).length===0&&t(W).find(G).length===0&&(t(G).append(t(W).html()),t(W).remove())}}else C=t(z).clone().attr(\"data-type\",!1),t(z).after(C)}}e.$el.find(\"li:empty\").remove(),e.opts.keepFormatOnDelete||e.html.fillEmptyBlocks(),e.html.cleanEmptyTags(!0),e.opts.htmlUntouched||(e.clean.lists(),e.$el.find(\"li:empty\").append(\"<br>\"),e.spaces.normalize());var Z=e.$el.find(\".fr-marker:last\").get(0),se=e.$el.find(\".fr-marker:first\").get(0);typeof Z<\"u\"&&typeof se<\"u\"&&!Z.nextSibling&&se.previousSibling&&se.previousSibling.tagName==\"BR\"&&e.node.isElement(Z.parentNode)&&e.node.isElement(se.parentNode)&&e.$el.append(\"<br>\"),d()}function f(p,M){if(!p||p.getElementsByClassName(\"fr-marker\").length>0)return!1;for(var a=p.firstChild;a&&(e.node.isBlock(a)||M&&!e.node.isVoid(a)&&a.nodeType==Node.ELEMENT_NODE);)p=a,a=a.firstChild;p.innerHTML=t.FE.MARKERS+p.innerHTML}function i(p,M){if(!p||p.getElementsByClassName(\"fr-marker\").length>0)return!1;for(var a=p.lastChild;a&&(e.node.isBlock(a)||M&&!e.node.isVoid(a)&&a.nodeType==Node.ELEMENT_NODE);)p=a,a=a.lastChild;var y=e.doc.createElement(\"SPAN\");for(y.setAttribute(\"id\",\"fr-sel-markers\"),y.innerHTML=t.FE.MARKERS;p.parentNode&&e.opts.htmlAllowedEmptyTags&&e.opts.htmlAllowedEmptyTags.indexOf(p.tagName.toLowerCase())>=0;)p=p.parentNode;p.appendChild(y);var c=p.querySelector(\"#fr-sel-markers\");c.outerHTML=c.innerHTML}function S(p,M){typeof M>\"u\"&&(M=!0);for(var a=p.previousSibling;a&&a.nodeType==Node.TEXT_NODE&&a.textContent.length===0;)a=a.previousSibling;return a?(e.node.isBlock(a)?i(a):a.tagName==\"BR\"?t(a).before(t.FE.MARKERS):t(a).after(t.FE.MARKERS),!0):M?(e.node.isBlock(p)?f(p):t(p).before(t.FE.MARKERS),!0):!1}function s(p,M){typeof M>\"u\"&&(M=!0);for(var a=p.nextSibling;a&&a.nodeType==Node.TEXT_NODE&&a.textContent.length===0;)a=a.nextSibling;return a?(e.node.isBlock(a)?f(a):t(a).before(t.FE.MARKERS),!0):M?(e.node.isBlock(p)?i(p):t(p).after(t.FE.MARKERS),!0):!1}return{text:n,get:r,ranges:O,clear:x,element:X,endElement:Y,save:F,restore:d,isCollapsed:b,isFull:m,inEditor:o,remove:l,blocks:_,info:h,setAtEnd:i,setAtStart:f,setBefore:S,setAfter:s,rangeElement:U}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{htmlAllowedTags:[\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"base\",\"bdi\",\"bdo\",\"blockquote\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"dialog\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"i\",\"iframe\",\"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\",\"mark\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"pre\",\"progress\",\"queue\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"style\",\"section\",\"select\",\"small\",\"source\",\"span\",\"strike\",\"strong\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"],htmlRemoveTags:[\"script\",\"style\"],htmlAllowedAttrs:[\"accept\",\"accept-charset\",\"accesskey\",\"action\",\"align\",\"allowfullscreen\",\"allowtransparency\",\"alt\",\"aria-.*\",\"async\",\"autocomplete\",\"autofocus\",\"autoplay\",\"autosave\",\"background\",\"bgcolor\",\"border\",\"charset\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"color\",\"cols\",\"colspan\",\"content\",\"contenteditable\",\"contextmenu\",\"controls\",\"coords\",\"data\",\"data-.*\",\"datetime\",\"default\",\"defer\",\"dir\",\"dirname\",\"disabled\",\"download\",\"draggable\",\"dropzone\",\"enctype\",\"for\",\"form\",\"formaction\",\"frameborder\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"http-equiv\",\"icon\",\"id\",\"ismap\",\"itemprop\",\"keytype\",\"kind\",\"label\",\"lang\",\"language\",\"list\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"mozallowfullscreen\",\"multiple\",\"muted\",\"name\",\"novalidate\",\"open\",\"optimum\",\"pattern\",\"ping\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"reversed\",\"rows\",\"rowspan\",\"sandbox\",\"scope\",\"scoped\",\"scrolling\",\"seamless\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"src\",\"srcdoc\",\"srclang\",\"srcset\",\"start\",\"step\",\"summary\",\"spellcheck\",\"style\",\"tabindex\",\"target\",\"title\",\"type\",\"translate\",\"usemap\",\"value\",\"valign\",\"webkitallowfullscreen\",\"width\",\"wrap\"],htmlAllowedStyleProps:[\".*\"],htmlAllowComments:!0,htmlUntouched:!1,fullPage:!1}),t.FE.HTML5Map={B:\"STRONG\",I:\"EM\",STRIKE:\"S\"},t.FE.MODULES.clean=function(e){var n,r,O,x;function X(w){if(w.nodeType==Node.ELEMENT_NODE&&w.getAttribute(\"class\")&&w.getAttribute(\"class\").indexOf(\"fr-marker\")>=0)return!1;var C=e.node.contents(w),G=[],W;for(W=0;W<C.length;W++)C[W].nodeType==Node.ELEMENT_NODE&&!e.node.isVoid(C[W])?C[W].textContent.replace(/\\u200b/g,\"\").length!=C[W].textContent.length&&X(C[W]):C[W].nodeType==Node.TEXT_NODE&&(C[W].textContent=C[W].textContent.replace(/\\u200b/g,\"\"));if(w.nodeType==Node.ELEMENT_NODE&&!e.node.isVoid(w)&&(w.normalize(),C=e.node.contents(w),G=w.querySelectorAll(\".fr-marker\"),C.length-G.length===0)){for(W=0;W<C.length;W++)if(C[W].nodeType==Node.ELEMENT_NODE&&(C[W].getAttribute(\"class\")||\"\").indexOf(\"fr-marker\")<0)return!1;for(W=0;W<G.length;W++)w.parentNode.insertBefore(G[W].cloneNode(!0),w);return w.parentNode.removeChild(w),!1}}function Y(w,C){if(w.nodeType==Node.COMMENT_NODE)return\"<!--\"+w.nodeValue+\"-->\";if(w.nodeType==Node.TEXT_NODE)return C?w.textContent.replace(/\\&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"):w.textContent.replace(/\\&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\\u00A0/g,\"&nbsp;\").replace(/\\u0009/g,\"\");if(w.nodeType!=Node.ELEMENT_NODE||w.nodeType==Node.ELEMENT_NODE&&[\"STYLE\",\"SCRIPT\",\"NOSCRIPT\"].indexOf(w.tagName)>=0)return w.outerHTML;if(w.nodeType==Node.ELEMENT_NODE&&w.tagName==\"svg\"){var G=document.createElement(\"div\"),W=w.cloneNode(!0);return G.appendChild(W),G.innerHTML}if(w.tagName==\"IFRAME\")return w.outerHTML.replace(/\\&lt;/g,\"<\").replace(/\\&gt;/g,\">\");var N=w.childNodes;if(N.length===0)return w.outerHTML;for(var I=\"\",H=0;H<N.length;H++)w.tagName==\"PRE\"&&(C=!0),I+=Y(N[H],C);return e.node.openTagString(w)+I+e.node.closeTagString(w)}var U=[];function _(w){return U=[],w=w.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,function(C){return U.push(C),\"[FROALA.EDITOR.SCRIPT \"+(U.length-1)+\"]\"}),w=w.replace(/<noscript\\b[^<]*(?:(?!<\\/noscript>)<[^<]*)*<\\/noscript>/gi,function(C){return U.push(C),\"[FROALA.EDITOR.NOSCRIPT \"+(U.length-1)+\"]\"}),w=w.replace(/<meta((?:[\\w\\W]*?)) http-equiv=\"/g,'<meta$1 data-fr-http-equiv=\"'),w=w.replace(/<img((?:[\\w\\W]*?)) src=\"/g,'<img$1 data-fr-src=\"'),w}function F(w){return w=w.replace(/\\[FROALA\\.EDITOR\\.SCRIPT ([\\d]*)\\]/gi,function(C,G){return e.opts.htmlRemoveTags.indexOf(\"script\")>=0?\"\":U[parseInt(G,10)]}),w=w.replace(/\\[FROALA\\.EDITOR\\.NOSCRIPT ([\\d]*)\\]/gi,function(C,G){return e.opts.htmlRemoveTags.indexOf(\"noscript\")>=0?\"\":U[parseInt(G,10)].replace(/\\&lt;/g,\"<\").replace(/\\&gt;/g,\">\")}),w=w.replace(/<img((?:[\\w\\W]*?)) data-fr-src=\"/g,'<img$1 src=\"'),w}function d(w){var C=w.replace(/;;/gi,\";\");return C=C.replace(/^;/gi,\"\"),C.charAt(C.length)!=\";\"&&(C+=\";\"),C}function v(w){var C;for(C in w)if(w.hasOwnProperty(C)){var G=C.match(O),W=null;C==\"style\"&&e.opts.htmlAllowedStyleProps.length&&(W=w[C].match(x)),G&&W?w[C]=d(W.join(\";\")):(!G||C==\"style\"&&!W)&&delete w[C]}for(var N=\"\",I=Object.keys(w).sort(),H=0;H<I.length;H++)C=I[H],w[C].indexOf('\"')<0?N+=\" \"+C+'=\"'+w[C]+'\"':N+=\" \"+C+\"='\"+w[C]+\"'\";return N}function L(w,C,G){if(e.opts.fullPage){var W=e.html.extractDoctype(G),N=v(e.html.extractNodeAttrs(G,\"html\"));C=C??(e.html.extractNode(G,\"head\")||\"<title></title>\");var I=v(e.html.extractNodeAttrs(G,\"head\")),H=v(e.html.extractNodeAttrs(G,\"body\"));return W+\"<html\"+N+\"><head\"+I+\">\"+C+\"</head><body\"+H+\">\"+w+\"</body></html>\"}return w}function b(w,C){var G,W=document.implementation.createHTMLDocument(\"Froala DOC\"),N=W.createElement(\"DIV\");t(N).append(w);var I=\"\";if(N){var H=e.node.contents(N);for(G=0;G<H.length;G++)C(H[G]);for(H=e.node.contents(N),G=0;G<H.length;G++)I+=Y(H[G])}return I}function h(w,C,G){w=_(w);var W=w,N=null;e.opts.fullPage&&(W=e.html.extractNode(w,\"body\")||(w.indexOf(\"<body\")>=0?\"\":w),G&&(N=e.html.extractNode(w,\"head\")||\"\")),W=b(W,C),N&&(N=b(N,C));var I=L(W,N,w);return F(I)}function m(w){return w.replace(/\\u200b/g,\"\").length==w.length?w:e.clean.exec(w,X)}function u(){var w=e.el.querySelectorAll(Object.keys(t.FE.HTML5Map).join(\",\"));if(w.length){var C=!1;e.el.querySelector(\".fr-marker\")||(e.selection.save(),C=!0);for(var G=0;G<w.length;G++)e.node.attributes(w[G])===\"\"&&t(w[G]).replaceWith(\"<\"+t.FE.HTML5Map[w[G].tagName]+\">\"+w[G].innerHTML+\"</\"+t.FE.HTML5Map[w[G].tagName]+\">\");C&&e.selection.restore()}}function V(w){var C=e.doc.createElement(\"DIV\");return C.innerText=w,C.textContent}function E(w){if(w.tagName==\"SPAN\"&&(w.getAttribute(\"class\")||\"\").indexOf(\"fr-marker\")>=0)return!1;if(w.tagName==\"PRE\"&&l(w),w.nodeType==Node.ELEMENT_NODE&&(w.getAttribute(\"data-fr-src\")&&w.getAttribute(\"data-fr-src\").indexOf(\"blob:\")!==0&&w.setAttribute(\"data-fr-src\",e.helpers.sanitizeURL(V(w.getAttribute(\"data-fr-src\")))),w.getAttribute(\"href\")&&w.setAttribute(\"href\",e.helpers.sanitizeURL(V(w.getAttribute(\"href\")))),w.getAttribute(\"src\")&&w.setAttribute(\"src\",e.helpers.sanitizeURL(V(w.getAttribute(\"src\")))),w.getAttribute(\"data\")&&w.setAttribute(\"data\",e.helpers.sanitizeURL(V(w.getAttribute(\"data\")))),[\"TABLE\",\"TBODY\",\"TFOOT\",\"TR\"].indexOf(w.tagName)>=0&&(w.innerHTML=w.innerHTML.trim())),!e.opts.pasteAllowLocalImages&&w.nodeType==Node.ELEMENT_NODE&&w.tagName==\"IMG\"&&w.getAttribute(\"data-fr-src\")&&w.getAttribute(\"data-fr-src\").indexOf(\"file://\")===0)return w.parentNode.removeChild(w),!1;if(w.nodeType==Node.ELEMENT_NODE&&t.FE.HTML5Map[w.tagName]&&e.node.attributes(w)===\"\"){var C=t.FE.HTML5Map[w.tagName],G=\"<\"+C+\">\"+w.innerHTML+\"</\"+C+\">\";w.insertAdjacentHTML(\"beforebegin\",G),w=w.previousSibling,w.parentNode.removeChild(w.nextSibling)}if(!e.opts.htmlAllowComments&&w.nodeType==Node.COMMENT_NODE)w.data.indexOf(\"[FROALA.EDITOR\")!==0&&w.parentNode.removeChild(w);else if(w.tagName&&w.tagName.match(r))w.parentNode.removeChild(w);else if(w.tagName&&!w.tagName.match(n)){if(w.tagName===\"svg\")w.parentNode.removeChild(w);else if(!(e.browser.safari&&w.tagName==\"path\"&&w.parentNode&&w.parentNode.tagName==\"svg\"))try{w.outerHTML=w.innerHTML}catch{}}else{var W=w.attributes;if(W)for(var N=W.length-1;N>=0;N--){var I=W[N],H=I.nodeName.match(O),J=null;I.nodeName==\"style\"&&e.opts.htmlAllowedStyleProps.length&&(J=I.value.match(x)),H&&J?I.value=d(J.join(\";\")):(!H||I.nodeName==\"style\"&&!J)&&w.removeAttribute(I.nodeName)}}}function o(w){for(var C=e.node.contents(w),G=0;G<C.length;G++)C[G].nodeType!=Node.TEXT_NODE&&o(C[G]);E(w)}function l(w){var C=w.innerHTML;C.indexOf(`\n`)>=0&&(w.innerHTML=C.replace(/\\n/g,\"<br>\"))}function f(w,C,G,W){typeof C>\"u\"&&(C=[]),typeof G>\"u\"&&(G=[]),typeof W>\"u\"&&(W=!1);var N=t.merge([],e.opts.htmlAllowedTags),I;for(I=0;I<C.length;I++)N.indexOf(C[I])>=0&&N.splice(N.indexOf(C[I]),1);var H=t.merge([],e.opts.htmlAllowedAttrs);for(I=0;I<G.length;I++)H.indexOf(G[I])>=0&&H.splice(H.indexOf(G[I]),1);return H.push(\"data-fr-.*\"),H.push(\"fr-.*\"),n=new RegExp(\"^\"+N.join(\"$|^\")+\"$\",\"gi\"),O=new RegExp(\"^\"+H.join(\"$|^\")+\"$\",\"gi\"),r=new RegExp(\"^\"+e.opts.htmlRemoveTags.join(\"$|^\")+\"$\",\"gi\"),e.opts.htmlAllowedStyleProps.length?x=new RegExp(\"((^|;|\\\\s)\"+e.opts.htmlAllowedStyleProps.join(\":.+?(?=;|$))|((^|;|\\\\s)\")+\":.+?(?=(;)|$))\",\"gi\"):x=null,w=h(w,o,!0),w}function i(){for(var w=e.el.querySelectorAll(\"tr\"),C=0;C<w.length;C++){for(var G=w[C].children,W=!0,N=0;N<G.length;N++)if(G[N].tagName!=\"TH\"){W=!1;break}if(!(W===!1||G.length===0)){for(var I=w[C];I&&I.tagName!=\"TABLE\"&&I.tagName!=\"THEAD\";)I=I.parentNode;var H=I;H.tagName!=\"THEAD\"&&(H=e.doc.createElement(\"THEAD\"),I.insertBefore(H,I.firstChild)),H.appendChild(w[C])}}}function S(){i()}function s(){var w=[],C=function(J){return!e.node.isList(J.parentNode)};do{if(w.length){var G=w[0],W=e.doc.createElement(\"ul\");G.parentNode.insertBefore(W,G);do{var N=G;G=G.nextSibling,W.appendChild(N)}while(G&&G.tagName==\"LI\")}w=[];for(var I=e.el.querySelectorAll(\"li\"),H=0;H<I.length;H++)C(I[H])&&w.push(I[H])}while(w.length>0)}function p(){for(var w=e.el.querySelectorAll(\"ol + ol, ul + ul\"),C=0;C<w.length;C++){var G=w[C];if(e.node.isList(G.previousSibling)&&e.node.openTagString(G)==e.node.openTagString(G.previousSibling)){for(var W=e.node.contents(G),N=0;N<W.length;N++)G.previousSibling.appendChild(W[N]);G.parentNode.removeChild(G)}}}function M(){var w,C,G=function(I){I.querySelector(\"LI\")||(C=!0,I.parentNode.removeChild(I))};do{C=!1;var W=e.el.querySelectorAll(\"li:empty\");for(w=0;w<W.length;w++)W[w].parentNode.removeChild(W[w]);var N=e.el.querySelectorAll(\"ul, ol\");for(w=0;w<N.length;w++)G(N[w])}while(C===!0)}function a(){for(var w=e.el.querySelectorAll(\"ul > ul, ol > ol, ul > ol, ol > ul\"),C=0;C<w.length;C++){var G=w[C],W=G.previousSibling;W&&(W.tagName==\"LI\"?W.appendChild(G):t(G).wrap(\"<li></li>\"))}}function y(){for(var w=e.el.querySelectorAll(\"li > ul, li > ol\"),C=0;C<w.length;C++){var G=w[C];if(G.nextSibling){var W=G.nextSibling,N=t(\"<li>\");t(G.parentNode).after(N);do{var I=W;W=W.nextSibling,N.append(I)}while(W)}}}function c(){for(var w=e.el.querySelectorAll(\"li > ul, li > ol\"),C=0;C<w.length;C++){var G=w[C];if(e.node.isFirstSibling(G))t(G).before(\"<br/>\");else if(G.previousSibling&&G.previousSibling.tagName==\"BR\"){for(var W=G.previousSibling.previousSibling;W&&e.node.hasClass(W,\"fr-marker\");)W=W.previousSibling;W&&W.tagName!=\"BR\"&&t(G.previousSibling).remove()}}}function k(){for(var w=e.el.querySelectorAll(\"li:empty\"),C=0;C<w.length;C++)t(w[C]).remove()}function A(){for(var w=e.el.querySelectorAll(\"ul, ol\"),C=0;C<w.length;C++)for(var G=e.node.contents(w[C]),W=null,N=G.length-1;N>=0;N--)G[N].tagName!=\"LI\"&&G[N].tagName!=\"UL\"&&G[N].tagName!=\"OL\"?(W||(W=t(\"<li>\"),W.insertBefore(G[N])),W.prepend(G[N])):W=null}function Q(){s(),p(),A(),M(),a(),y(),c(),k()}function z(){e.opts.fullPage&&t.merge(e.opts.htmlAllowedTags,[\"head\",\"title\",\"style\",\"link\",\"base\",\"body\",\"html\",\"meta\"])}return{_init:z,html:f,toHTML5:u,tables:S,lists:Q,invisibleSpaces:m,exec:h}}})(jQuery);(function(t){t.FE.MODULES.spaces=function(e){function n(x,X){var Y=x.previousSibling,U=x.nextSibling,_=x.textContent,F=x.parentNode;if(!e.html.isPreformatted(F)){X&&(_=_.replace(/[\\f\\n\\r\\t\\v ]{2,}/g,\" \"),(!U||U.tagName===\"BR\"||e.node.isBlock(U))&&(e.node.isBlock(F)||e.node.isLink(F)&&!F.nextSibling||e.node.isElement(F))&&(_=_.replace(/[\\f\\n\\r\\t\\v ]{1,}$/g,\"\")),(!Y||Y.tagName===\"BR\"||e.node.isBlock(Y))&&(e.node.isBlock(F)||e.node.isLink(F)&&!F.previousSibling||e.node.isElement(F))&&(_=_.replace(/^[\\f\\n\\r\\t\\v ]{1,}/g,\"\")),(e.node.isBlock(U)||e.node.isBlock(Y))&&(_=_.replace(/^[\\f\\n\\r\\t\\v ]{1,}/g,\"\")),_===\" \"&&(Y&&e.node.isVoid(Y)||U&&e.node.isVoid(U))&&!(Y&&U&&e.node.isVoid(Y)||U&&Y&&e.node.isVoid(U))&&(_=\"\")),(!Y&&e.node.isBlock(U)||!U&&e.node.isBlock(Y))&&e.node.isBlock(F)&&F!==e.el&&(_=_.replace(/^[\\f\\n\\r\\t\\v ]{1,}/g,\"\")),X||(_=_.replace(new RegExp(t.FE.UNICODE_NBSP,\"g\"),\" \"));for(var d=\"\",v=0;v<_.length;v++)_.charCodeAt(v)==32&&(v===0||d.charCodeAt(v-1)==32)&&!(Y&&U&&e.node.isVoid(Y)||Y&&U&&e.node.isVoid(U))?d+=t.FE.UNICODE_NBSP:d+=_[v];(!U||U&&e.node.isBlock(U)||U&&U.nodeType==Node.ELEMENT_NODE&&e.win.getComputedStyle(U)&&e.win.getComputedStyle(U).display==\"block\")&&(e.node.isVoid(Y)||(d=d.replace(/ $/,t.FE.UNICODE_NBSP))),Y&&!e.node.isVoid(Y)&&!e.node.isBlock(Y)&&(d=d.replace(/^\\u00A0([^ $])/,\" $1\"),d.length===1&&d.charCodeAt(0)===160&&U&&!e.node.isVoid(U)&&!e.node.isBlock(U)&&(e.node.hasClass(Y,\"fr-marker\")&&e.node.hasClass(U,\"fr-marker\")||(d=\" \"))),X||(d=d.replace(/([^ \\u00A0])\\u00A0([^ \\u00A0])/g,\"$1 $2\")),x.textContent!=d&&(x.textContent=d)}}function r(x,X){if((typeof x>\"u\"||!x)&&(x=e.el),typeof X>\"u\"&&(X=!1),!(x.getAttribute&&x.getAttribute(\"contenteditable\")==\"false\")){if(x.nodeType==Node.TEXT_NODE)n(x,X);else if(x.nodeType==Node.ELEMENT_NODE)for(var Y=e.doc.createTreeWalker(x,NodeFilter.SHOW_TEXT,e.node.filter(function(U){for(var _=U.parentNode;_&&_!==e.el;){if(_.tagName==\"STYLE\"||_.tagName==\"IFRAME\")return!1;if(_.tagName!==\"PRE\")_=_.parentNode;else return!1}return U.textContent.match(/([ \\u00A0\\f\\n\\r\\t\\v]{2,})|(^[ \\u00A0\\f\\n\\r\\t\\v]{1,})|([ \\u00A0\\f\\n\\r\\t\\v]{1,}$)/g)!=null&&!e.node.hasClass(U.parentNode,\"fr-marker\")}),!1);Y.nextNode();)n(Y.currentNode,X)}}function O(){for(var x=[],X=e.el.querySelectorAll(\".fr-marker\"),Y=0;Y<X.length;Y++){var U=null,_=e.node.blockParent(X[Y]);_?U=_:U=X[Y];for(var F=U.nextSibling,d=U.previousSibling;F&&F.tagName==\"BR\";)F=F.nextSibling;for(;d&&d.tagName==\"BR\";)d=d.previousSibling;U&&x.indexOf(U)<0&&x.push(U),d&&x.indexOf(d)<0&&x.push(d),F&&x.indexOf(F)<0&&x.push(F)}for(var v=0;v<x.length;v++)r(x[v])}return{normalize:r,normalizeAroundCursor:O}}})(jQuery);(function(t){t.FE.UNICODE_NBSP=\"\\xA0\",t.FE.VOID_ELEMENTS=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"menuitem\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"],t.FE.BLOCK_TAGS=[\"address\",\"article\",\"aside\",\"audio\",\"blockquote\",\"canvas\",\"details\",\"dd\",\"div\",\"dl\",\"dt\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"li\",\"main\",\"nav\",\"noscript\",\"ol\",\"output\",\"p\",\"pre\",\"section\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"tr\",\"ul\",\"video\"],t.extend(t.FE.DEFAULTS,{htmlAllowedEmptyTags:[\"textarea\",\"a\",\"i\",\"iframe\",\"object\",\"video\",\"style\",\"script\",\".icon\",\".bi\",\".fa\",\".fr-emoticon\",\".fr-inner\",\"path\",\"line\"],htmlDoNotWrapTags:[\"figure\",\"script\",\"style\"],htmlSimpleAmpersand:!1,htmlIgnoreCSSProperties:[],htmlExecuteScripts:!0}),t.FE.MODULES.html=function(e){function n(){if(e.opts.enter==t.FE.ENTER_P)return\"p\";if(e.opts.enter==t.FE.ENTER_DIV)return\"div\";if(e.opts.enter==t.FE.ENTER_BR)return null}function r(N,I){return!N||N===e.el?!1:I?[\"PRE\",\"SCRIPT\",\"STYLE\"].indexOf(N.tagName)!=-1?!0:r(N.parentNode,I):[\"PRE\",\"SCRIPT\",\"STYLE\"].indexOf(N.tagName)!=-1}function O(N){var I=[],H,J=[];if(N){var Z=e.el.querySelectorAll(\".fr-marker\");for(H=0;H<Z.length;H++){var se=e.node.blockParent(Z[H])||Z[H];if(se){var g=se.nextSibling,R=se.previousSibling;se&&J.indexOf(se)<0&&e.node.isBlock(se)&&J.push(se),R&&e.node.isBlock(R)&&J.indexOf(R)<0&&J.push(R),g&&e.node.isBlock(g)&&J.indexOf(g)<0&&J.push(g)}}}else J=e.el.querySelectorAll(X());var $=X();for($+=\",\"+t.FE.VOID_ELEMENTS.join(\",\"),$+=\", .fr-inner\",$+=\",\"+e.opts.htmlAllowedEmptyTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\",H=J.length-1;H>=0;H--)if(!(J[H].textContent&&J[H].textContent.replace(/\\u200B|\\n/g,\"\").length>0)&&!(J[H].querySelectorAll($).length>0)){for(var ee=e.node.contents(J[H]),ce=!1,he=0;he<ee.length;he++)if(ee[he].nodeType!=Node.COMMENT_NODE&&ee[he].textContent&&ee[he].textContent.replace(/\\u200B|\\n/g,\"\").length>0){ce=!0;break}ce||I.push(J[H])}return I}function x(){return t.FE.BLOCK_TAGS.join(\":empty, \")+\":empty\"}function X(){return t.FE.BLOCK_TAGS.join(\", \")}function Y(N){var I=t.merge([],t.FE.VOID_ELEMENTS);I=t.merge(I,e.opts.htmlAllowedEmptyTags),typeof N>\"u\"?I=t.merge(I,t.FE.BLOCK_TAGS):I=t.merge(I,t.FE.NO_DELETE_TAGS);var H,J;H=e.el.querySelectorAll(\"*:empty:not(\"+I.join(\"):not(\")+\"):not(.fr-marker)\");do{J=!1;for(var Z=0;Z<H.length;Z++)(H[Z].attributes.length===0||typeof H[Z].getAttribute(\"href\")<\"u\")&&(H[Z].parentNode.removeChild(H[Z]),J=!0);H=e.el.querySelectorAll(\"*:empty:not(\"+I.join(\"):not(\")+\"):not(.fr-marker)\")}while(H.length&&J)}function U(N,I){var H=n();if(I&&(H=\"div\"),H){for(var J=e.doc.createDocumentFragment(),Z=null,se=!1,g=N.firstChild,R=!1;g;){var $=g.nextSibling;if(g.nodeType==Node.ELEMENT_NODE&&(e.node.isBlock(g)||e.opts.htmlDoNotWrapTags.indexOf(g.tagName.toLowerCase())>=0&&!e.node.hasClass(g,\"fr-marker\")))Z=null,J.appendChild(g.cloneNode(!0));else if(g.nodeType!=Node.ELEMENT_NODE&&g.nodeType!=Node.TEXT_NODE)Z=null,J.appendChild(g.cloneNode(!0));else if(g.tagName==\"BR\")Z==null?(Z=e.doc.createElement(H),R=!0,I&&(Z.setAttribute(\"class\",\"fr-temp-div\"),Z.setAttribute(\"data-empty\",!0)),Z.appendChild(g.cloneNode(!0)),J.appendChild(Z)):se===!1&&(Z.appendChild(e.doc.createElement(\"br\")),I&&(Z.setAttribute(\"class\",\"fr-temp-div\"),Z.setAttribute(\"data-empty\",!0))),Z=null;else{var ee=g.textContent;g.nodeType!==Node.TEXT_NODE||ee.replace(/\\n/g,\"\").replace(/(^ *)|( *$)/g,\"\").length>0||ee.replace(/(^ *)|( *$)/g,\"\").length&&ee.indexOf(`\n`)<0?(Z==null&&(Z=e.doc.createElement(H),R=!0,I&&Z.setAttribute(\"class\",\"fr-temp-div\"),J.appendChild(Z),se=!1),Z.appendChild(g.cloneNode(!0)),!se&&!e.node.hasClass(g,\"fr-marker\")&&!(g.nodeType==Node.TEXT_NODE&&ee.replace(/ /g,\"\").length===0)&&(se=!0)):R=!0}g=$}R&&(N.innerHTML=\"\",N.appendChild(J))}}function _(N,I){for(var H=N.length-1;H>=0;H--)U(N[H],I)}function F(N,I,H,J,Z){if(!e.$wp)return!1;typeof N>\"u\"&&(N=!1),typeof I>\"u\"&&(I=!1),typeof H>\"u\"&&(H=!1),typeof J>\"u\"&&(J=!1),typeof Z>\"u\"&&(Z=!1);var se=e.$wp.scrollTop();U(e.el,N),J&&_(e.el.querySelectorAll(\".fr-inner\"),N),I&&_(e.el.querySelectorAll(\"td, th\"),N),H&&_(e.el.querySelectorAll(\"blockquote\"),N),Z&&_(e.el.querySelectorAll(\"li\"),N),se!=e.$wp.scrollTop()&&e.$wp.scrollTop(se)}function d(){e.$el.find(\"div.fr-temp-div\").each(function(){this.previousSibling&&this.previousSibling.nodeType===Node.TEXT_NODE&&t(this).before(\"<br>\"),t(this).attr(\"data-empty\")||!this.nextSibling||e.node.isBlock(this.nextSibling)&&!t(this.nextSibling).hasClass(\"fr-temp-div\")?t(this).replaceWith(t(this).html()):t(this).replaceWith(t(this).html()+\"<br>\")}),e.$el.find(\".fr-temp-div\").removeClass(\"fr-temp-div\").filter(function(){return t(this).attr(\"class\")===\"\"}).removeAttr(\"class\")}function v(N){var I=O(N);e.node.isEmpty(e.el)&&e.opts.enter===t.FE.ENTER_BR&&I.push(e.el);for(var H=0;H<I.length;H++){var J=I[H];J.getAttribute(\"contenteditable\")!==\"false\"&&!J.querySelector(e.opts.htmlAllowedEmptyTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\")&&!e.node.isVoid(J)&&J.tagName!=\"TABLE\"&&J.tagName!=\"TBODY\"&&J.tagName!=\"TR\"&&J.tagName!=\"UL\"&&J.tagName!=\"OL\"&&J.appendChild(e.doc.createElement(\"br\"))}if(e.browser.msie&&e.opts.enter==t.FE.ENTER_BR){var Z=e.node.contents(e.el);Z.length&&Z[Z.length-1].nodeType==Node.TEXT_NODE&&e.$el.append(\"<br>\")}}function L(){return e.$el.get(0).querySelectorAll(X())}function b(N){if(typeof N>\"u\"&&(N=e.el),N&&[\"SCRIPT\",\"STYLE\",\"PRE\"].indexOf(N.tagName)>=0)return!1;for(var I=e.doc.createTreeWalker(N,NodeFilter.SHOW_TEXT,e.node.filter(function(R){return R.textContent.match(/([ \\n]{2,})|(^[ \\n]{1,})|([ \\n]{1,}$)/g)!=null}),!1);I.nextNode();){var H=I.currentNode;if(!r(H.parentNode,!0)){var J=e.node.isBlock(H.parentNode)||e.node.isElement(H.parentNode),Z=H.textContent.replace(/(?!^)( ){2,}(?!$)/g,\" \").replace(/\\n/g,\" \").replace(/^[ ]{2,}/g,\" \").replace(/[ ]{2,}$/g,\" \");if(J){var se=H.previousSibling,g=H.nextSibling;se&&g&&Z==\" \"?e.node.isBlock(se)&&e.node.isBlock(g)?Z=\"\":Z=\" \":(se||(Z=Z.replace(/^ */,\"\")),g||(Z=Z.replace(/ *$/,\"\")))}H.textContent=Z}}}function h(N,I,H){var J=new RegExp(I,\"gi\"),Z=J.exec(N);return Z?Z[H]:null}function m(N,I){var H=N.match(/<!DOCTYPE ?([^ ]*) ?([^ ]*) ?\"?([^\"]*)\"? ?\"?([^\"]*)\"?>/i);return H?I.implementation.createDocumentType(H[1],H[3],H[4]):I.implementation.createDocumentType(\"html\")}function u(N){var I=N.doctype,H=\"<!DOCTYPE html>\";return I&&(H=\"<!DOCTYPE \"+I.name+(I.publicId?' PUBLIC \"'+I.publicId+'\"':\"\")+(!I.publicId&&I.systemId?\" SYSTEM\":\"\")+(I.systemId?' \"'+I.systemId+'\"':\"\")+\">\"),H}function V(N){var I=N.parentNode;if(I&&(e.node.isBlock(I)||e.node.isElement(I))&&[\"TD\",\"TH\"].indexOf(I.tagName)<0){for(var H=N.previousSibling,J=N.nextSibling;H&&(H.nodeType==Node.TEXT_NODE&&H.textContent.replace(/\\n|\\r/g,\"\").length===0||e.node.hasClass(H,\"fr-tmp\"));)H=H.previousSibling;if(J)return!1;H&&I&&H.tagName!=\"BR\"&&!e.node.isBlock(H)&&!J&&I.textContent.replace(/\\u200B/g,\"\").length>0&&H.textContent.length>0&&!e.node.hasClass(H,\"fr-marker\")&&(e.el==I&&!J&&e.opts.enter==t.FE.ENTER_BR&&e.browser.msie||N.parentNode.removeChild(N))}else I&&!(e.node.isBlock(I)||e.node.isElement(I))&&!N.previousSibling&&!N.nextSibling&&e.node.isDeletable(N.parentNode)&&V(N.parentNode)}function E(){for(var N=e.el.getElementsByTagName(\"br\"),I=0;I<N.length;I++)V(N[I])}function o(){e.opts.htmlUntouched||(Y(),F(),b(),e.spaces.normalize(null,!0),e.html.fillEmptyBlocks(),e.clean.lists(),e.clean.tables(),e.clean.toHTML5(),e.html.cleanBRs()),e.selection.restore(),l(),e.placeholder.refresh()}function l(){e.node.isEmpty(e.el)&&(n()!=null?!e.el.querySelector(X())&&!e.el.querySelector(e.opts.htmlDoNotWrapTags.join(\":not(.fr-marker),\")+\":not(.fr-marker)\")&&(e.core.hasFocus()?(e.$el.html(\"<\"+n()+\">\"+t.FE.MARKERS+\"<br/></\"+n()+\">\"),e.selection.restore()):e.$el.html(\"<\"+n()+\"><br/></\"+n()+\">\")):e.el.querySelector(\"*:not(.fr-marker):not(br)\")||(e.core.hasFocus()?(e.$el.html(t.FE.MARKERS+\"<br/>\"),e.selection.restore()):e.$el.html(\"<br/>\")))}function f(N,I){return h(N,\"<\"+I+\"[^>]*?>([\\\\w\\\\W]*)</\"+I+\">\",1)}function i(N,I){var H=t(\"<div \"+(h(N,\"<\"+I+\"([^>]*?)>\",1)||\"\")+\">\");return e.node.rawAttributes(H.get(0))}function S(N){return(h(N,\"<!DOCTYPE([^>]*?)>\",0)||\"<!DOCTYPE html>\").replace(/\\n/g,\" \").replace(/ {2,}/g,\" \")}function s(N,I){e.opts.htmlExecuteScripts?N.html(I):N.get(0).innerHTML=I}function p(N){var I=e.clean.html((N||\"\").trim(),[],[],e.opts.fullPage);if(!e.opts.fullPage)s(e.$el,I);else{var H=f(I,\"body\")||(I.indexOf(\"<body\")>=0?\"\":I),J=i(I,\"body\"),Z=f(I,\"head\")||\"<title></title>\",se=i(I,\"head\"),g=t(\"<div>\").append(Z).contents().each(function(){(this.nodeType==Node.COMMENT_NODE||[\"BASE\",\"LINK\",\"META\",\"NOSCRIPT\",\"SCRIPT\",\"STYLE\",\"TEMPLATE\",\"TITLE\"].indexOf(this.tagName)>=0)&&this.parentNode.removeChild(this)}).end().html().trim();Z=t(\"<div>\").append(Z).contents().map(function(){return this.nodeType==Node.COMMENT_NODE?\"<!--\"+this.nodeValue+\"-->\":[\"BASE\",\"LINK\",\"META\",\"NOSCRIPT\",\"SCRIPT\",\"STYLE\",\"TEMPLATE\",\"TITLE\"].indexOf(this.tagName)>=0?this.outerHTML:\"\"}).toArray().join(\"\");var R=S(I),$=i(I,\"html\");s(e.$el,g+`\n`+H),e.node.clearAttributes(e.el),e.$el.attr(J),e.$el.addClass(\"fr-view\"),e.$el.attr(\"spellcheck\",e.opts.spellcheck),e.$el.attr(\"dir\",e.opts.direction),s(e.$head,Z),e.node.clearAttributes(e.$head.get(0)),e.$head.attr(se),e.node.clearAttributes(e.$html.get(0)),e.$html.attr($),e.iframe_document.doctype.parentNode.replaceChild(m(R,e.iframe_document),e.iframe_document.doctype)}var ee=e.edit.isDisabled();e.edit.on(),e.core.injectStyle(e.opts.iframeDefaultStyle+e.opts.iframeStyle),o(),e.opts.useClasses||(e.$el.find(\"[fr-original-class]\").each(function(){this.setAttribute(\"class\",this.getAttribute(\"fr-original-class\")),this.removeAttribute(\"fr-original-class\")}),e.$el.find(\"[fr-original-style]\").each(function(){this.setAttribute(\"style\",this.getAttribute(\"fr-original-style\")),this.removeAttribute(\"fr-original-style\")})),ee&&e.edit.off(),e.events.trigger(\"html.set\")}function M(N){var I=/(#[^\\s\\+>~\\.\\[:]+)/g,H=/(\\[[^\\]]+\\])/g,J=/(\\.[^\\s\\+>~\\.\\[:]+)/g,Z=/(::[^\\s\\+>~\\.\\[:]+|:first-line|:first-letter|:before|:after)/gi,se=/(:[\\w-]+\\([^\\)]*\\))/gi,g=/(:[^\\s\\+>~\\.\\[:]+)/g,R=/([^\\s\\+>~\\.\\[:]+)/g;(function(){var ee=/:not\\(([^\\)]*)\\)/g;ee.test(N)&&(N=N.replace(ee,\"     $1 \"))})();var $=(N.match(I)||[]).length*100+(N.match(H)||[]).length*10+(N.match(J)||[]).length*10+(N.match(se)||[]).length*10+(N.match(g)||[]).length*10+(N.match(Z)||[]).length;return N=N.replace(/[\\*\\s\\+>~]/g,\" \"),N=N.replace(/[#\\.]/g,\" \"),$+=(N.match(R)||[]).length,$}function a(N){if(e.events.trigger(\"html.processGet\",[N]),N&&N.getAttribute&&N.getAttribute(\"class\")===\"\"&&N.removeAttribute(\"class\"),N&&N.getAttribute&&N.getAttribute(\"style\")===\"\"&&N.removeAttribute(\"style\"),N&&N.nodeType==Node.ELEMENT_NODE){var I=N.querySelectorAll('[class=\"\"],[style=\"\"]'),H;for(H=0;H<I.length;H++){var J=I[H];J.getAttribute(\"class\")===\"\"&&J.removeAttribute(\"class\"),J.getAttribute(\"style\")===\"\"&&J.removeAttribute(\"style\")}if(N.tagName===\"BR\")V(N);else{var Z=N.querySelectorAll(\"br\");for(H=0;H<Z.length;H++)V(Z[H])}}}function y(N,I){return N[3]-I[3]}function c(N,I){if(!e.$wp)return e.$oel.clone().removeClass(\"fr-view\").removeAttr(\"contenteditable\").get(0).outerHTML;var H=\"\";e.events.trigger(\"html.beforeGet\");var J=[],Z={},se,g,R=[],$=e.el.querySelectorAll(\"input, textarea\");for(se=0;se<$.length;se++)$[se].setAttribute(\"value\",$[se].value);if(!e.opts.useClasses&&!I){var ee=new RegExp(\"^\"+e.opts.htmlIgnoreCSSProperties.join(\"$|^\")+\"$\",\"gi\");for(se=0;se<e.doc.styleSheets.length;se++){var ce,he=0;try{ce=e.doc.styleSheets[se].cssRules,e.doc.styleSheets[se].ownerNode&&e.doc.styleSheets[se].ownerNode.nodeType==\"STYLE\"&&(he=1)}catch{}if(ce){for(var ve=0,me=ce.length;ve<me;ve++)if(ce[ve].selectorText&&ce[ve].style.cssText.length>0){var Ce=ce[ve].selectorText.replace(/body |\\.fr-view /g,\"\").replace(/::/g,\":\"),Te;try{Te=e.el.querySelectorAll(Ce)}catch{Te=[]}for(g=0;g<Te.length;g++){!Te[g].getAttribute(\"fr-original-style\")&&Te[g].getAttribute(\"style\")?(Te[g].setAttribute(\"fr-original-style\",Te[g].getAttribute(\"style\")),J.push(Te[g])):Te[g].getAttribute(\"fr-original-style\")||(Te[g].setAttribute(\"fr-original-style\",\"\"),J.push(Te[g])),Z[Te[g]]||(Z[Te[g]]={});for(var xe=he*1e3+M(ce[ve].selectorText),Ae=ce[ve].style.cssText.split(\";\"),Me=0;Me<Ae.length;Me++){var Ee=Ae[Me].trim().split(\":\")[0];if(Ee&&!Ee.match(ee)&&(Z[Te[g]][Ee]||(Z[Te[g]][Ee]=0,(Te[g].getAttribute(\"fr-original-style\")||\"\").indexOf(Ee+\":\")>=0&&(Z[Te[g]][Ee]=1e4)),xe>=Z[Te[g]][Ee]&&(Z[Te[g]][Ee]=xe,Ae[Me].trim().length))){var Se=Ae[Me].trim().split(\":\");Se.splice(0,1),R.push([Te[g],Ee.trim(),Se.join(\":\").trim(),xe])}}}}}}for(R.sort(y),se=0;se<R.length;se++){var Re=R[se];Re[0].style[Re[1]]=Re[2]}for(se=0;se<J.length;se++)if(J[se].getAttribute(\"class\")&&(J[se].setAttribute(\"fr-original-class\",J[se].getAttribute(\"class\")),J[se].removeAttribute(\"class\")),(J[se].getAttribute(\"fr-original-style\")||\"\").trim().length>0){var Ke=J[se].getAttribute(\"fr-original-style\").split(\";\");for(g=0;g<Ke.length;g++)if(Ke[g].indexOf(\":\")>0){var Fe=Ke[g].split(\":\"),Ue=Fe[0];Fe.splice(0,1),J[se].style[Ue.trim()]=Fe.join(\":\").trim()}}}if(e.node.isEmpty(e.el))e.opts.fullPage&&(H=u(e.iframe_document),H+=\"<html\"+e.node.attributes(e.$html.get(0))+\">\"+e.$html.find(\"head\").get(0).outerHTML+\"<body></body></html>\");else if(typeof N>\"u\"&&(N=!1),!e.opts.fullPage)H=e.$el.html();else{H=u(e.iframe_document),e.$el.removeClass(\"fr-view\");var We=e.opts.heightMin,Qe=e.opts.height,je=e.opts.heightMax;e.opts.heightMin=null,e.opts.height=null,e.opts.heightMax=null,e.size.refresh(),H+=\"<html\"+e.node.attributes(e.$html.get(0))+\">\"+e.$html.html()+\"</html>\",e.opts.heightMin=We,e.opts.height=Qe,e.opts.heightMax=je,e.size.refresh(),e.$el.addClass(\"fr-view\")}if(!e.opts.useClasses&&!I)for(se=0;se<J.length;se++)J[se].getAttribute(\"fr-original-class\")&&(J[se].setAttribute(\"class\",J[se].getAttribute(\"fr-original-class\")),J[se].removeAttribute(\"fr-original-class\")),J[se].getAttribute(\"fr-original-style\")!=null&&typeof J[se].getAttribute(\"fr-original-style\")<\"u\"?(J[se].getAttribute(\"fr-original-style\").length!==0?J[se].setAttribute(\"style\",J[se].getAttribute(\"fr-original-style\")):J[se].removeAttribute(\"style\"),J[se].removeAttribute(\"fr-original-style\")):J[se].removeAttribute(\"style\");e.opts.fullPage&&(H=H.replace(/<style data-fr-style=\"true\">(?:[\\w\\W]*?)<\\/style>/g,\"\"),H=H.replace(/<link([^>]*)data-fr-style=\"true\"([^>]*)>/g,\"\"),H=H.replace(/<style(?:[\\w\\W]*?)class=\"firebugResetStyles\"(?:[\\w\\W]*?)>(?:[\\w\\W]*?)<\\/style>/g,\"\"),H=H.replace(/<body((?:[\\w\\W]*?)) spellcheck=\"true\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,\"<body$1$2>$3</body>\"),H=H.replace(/<body((?:[\\w\\W]*?)) contenteditable=\"(true|false)\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,\"<body$1$3>$4</body>\"),H=H.replace(/<body((?:[\\w\\W]*?)) dir=\"([\\w]*)\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,\"<body$1$3>$4</body>\"),H=H.replace(/<body((?:[\\w\\W]*?))class=\"([\\w\\W]*?)(fr-rtl|fr-ltr)([\\w\\W]*?)\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,'<body$1class=\"$2$4\"$5>$6</body>'),H=H.replace(/<body((?:[\\w\\W]*?)) class=\"\"((?:[\\w\\W]*?))>((?:[\\w\\W]*?))<\\/body>/g,\"<body$1$2>$3</body>\")),e.opts.htmlSimpleAmpersand&&(H=H.replace(/\\&amp;/gi,\"&\")),e.events.trigger(\"html.afterGet\"),N||(H=H.replace(/<span[^>]*? class\\s*=\\s*[\"']?fr-marker[\"']?[^>]+>\\u200b<\\/span>/gi,\"\")),H=e.clean.invisibleSpaces(H),H=e.clean.exec(H,a);var fe=e.events.chainTrigger(\"html.get\",H);return typeof fe==\"string\"&&(H=fe),H=H.replace(/<pre(?:[\\w\\W]*?)>(?:[\\w\\W]*?)<\\/pre>/g,function(be){return be.replace(/<br>/g,`\n`)}),H=H.replace(/<meta((?:[\\w\\W]*?)) data-fr-http-equiv=\"/g,'<meta$1 http-equiv=\"'),H}function k(){var N=function(g,R){for(;R&&(R.nodeType==Node.TEXT_NODE||!e.node.isBlock(R))&&!e.node.isElement(R)&&!e.node.hasClass(R,\"fr-inner\");)R&&R.nodeType!=Node.TEXT_NODE&&t(g).wrapInner(e.node.openTagString(R)+e.node.closeTagString(R)),R=R.parentNode;R&&g.innerHTML==R.innerHTML&&(g.innerHTML=R.outerHTML)},I=function(){var g=null,R;return e.win.getSelection?(R=e.win.getSelection(),R&&R.rangeCount&&(g=R.getRangeAt(0).commonAncestorContainer,g.nodeType!=Node.ELEMENT_NODE&&(g=g.parentNode))):(R=e.doc.selection)&&R.type!=\"Control\"&&(g=R.createRange().parentElement()),g!=null&&(t.inArray(e.el,t(g).parents())>=0||g==e.el)?g:null},H=\"\";if(typeof e.win.getSelection<\"u\"){e.browser.mozilla&&(e.selection.save(),e.$el.find('.fr-marker[data-type=\"false\"]').length>1&&(e.$el.find('.fr-marker[data-type=\"false\"][data-id=\"0\"]').remove(),e.$el.find('.fr-marker[data-type=\"false\"]:last').attr(\"data-id\",\"0\"),e.$el.find(\".fr-marker\").not('[data-id=\"0\"]').remove()),e.selection.restore());for(var J=e.selection.ranges(),Z=0;Z<J.length;Z++){var se=document.createElement(\"div\");se.appendChild(J[Z].cloneContents()),N(se,I()),t(se).find(\".fr-element\").length>0&&(se=e.el),H+=se.innerHTML}}else typeof e.doc.selection<\"u\"&&e.doc.selection.type==\"Text\"&&(H=e.doc.selection.createRange().htmlText);return H}function A(N){var I=e.doc.createElement(\"div\");return I.innerHTML=N,I.querySelector(X())!==null}function Q(N){var I=e.doc.createElement(\"div\");return I.innerHTML=N,e.selection.setAtEnd(I,!0),I.innerHTML}function z(N){return N.replace(/</gi,\"&lt;\").replace(/>/gi,\"&gt;\").replace(/\"/gi,\"&quot;\").replace(/'/gi,\"&#39;\")}function w(N){if(!e.html.defaultTag())return N;var I=e.doc.createElement(\"div\");I.innerHTML=N;for(var H=I.querySelectorAll(\":scope > \"+e.html.defaultTag()),J=H.length-1;J>=0;J--){var Z=H[J];e.node.isBlock(Z.previousSibling)||(Z.previousSibling&&!e.node.isEmpty(Z)&&t(\"<br>\").insertAfter(Z.previousSibling),Z.outerHTML=Z.innerHTML)}return I.innerHTML}function C(N,I,H){e.selection.isCollapsed()||e.selection.remove();var J;if(I?J=N:J=e.clean.html(N),N.indexOf('class=\"fr-marker\"')<0&&(J=Q(J)),e.node.isEmpty(e.el)&&!e.opts.keepFormatOnDelete&&A(J))e.el.innerHTML=J;else{var Z=e.markers.insert();if(!Z)e.el.innerHTML=e.el.innerHTML+J;else{e.node.isLastSibling(Z)&&t(Z).parent().hasClass(\"fr-deletable\")&&t(Z).insertAfter(t(Z).parent());var se,g=e.node.blockParent(Z);if((A(J)||H)&&(se=e.node.deepestParent(Z)||g&&g.tagName==\"LI\")){if(g&&g.tagName==\"LI\"&&(J=w(J)),Z=e.markers.split(),!Z)return!1;Z.outerHTML=J}else Z.outerHTML=J}}o(),e.keys.positionCaret(),e.events.trigger(\"html.inserted\")}function G(N){var I=null;if(typeof N>\"u\"&&(I=e.selection.element()),e.opts.keepFormatOnDelete)return!1;var H=I?(I.textContent.match(/\\u200B/g)||[]).length-I.querySelectorAll(\".fr-marker\").length:0,J=(e.el.textContent.match(/\\u200B/g)||[]).length-e.el.querySelectorAll(\".fr-marker\").length;if(J==H)return!1;var Z,se;do{se=!1,Z=e.el.querySelectorAll(\"*:not(.fr-marker)\");for(var g=0;g<Z.length;g++){var R=Z[g];if(I!=R){var $=R.textContent;R.children.length===0&&$.length===1&&$.charCodeAt(0)==8203&&R.tagName!==\"TD\"&&(t(R).remove(),se=!0)}}}while(se)}function W(){if(e.$wp){var N=function(){G(),e.placeholder&&setTimeout(e.placeholder.refresh,0)};e.events.on(\"mouseup\",N),e.events.on(\"keydown\",N),e.events.on(\"contentChanged\",l)}}return{defaultTag:n,isPreformatted:r,emptyBlocks:O,emptyBlockTagsQuery:x,blockTagsQuery:X,fillEmptyBlocks:v,cleanEmptyTags:Y,cleanWhiteTags:G,cleanBlankSpaces:b,blocks:L,getDoctype:u,set:p,get:c,getSelected:k,insert:C,wrap:F,unwrap:d,escapeEntities:z,checkIfEmpty:l,extractNode:f,extractNodeAttrs:i,extractDoctype:S,cleanBRs:E,_init:W}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{height:null,heightMax:null,heightMin:null,width:null}),t.FE.MODULES.size=function(e){function n(){r(),e.opts.height&&e.$el.css(\"minHeight\",e.opts.height-e.helpers.getPX(e.$el.css(\"padding-top\"))-e.helpers.getPX(e.$el.css(\"padding-bottom\"))),e.$iframe.height(e.$el.outerHeight(!0))}function r(){e.opts.heightMin?e.$el.css(\"minHeight\",e.opts.heightMin):e.$el.css(\"minHeight\",\"\"),e.opts.heightMax?(e.$wp.css(\"maxHeight\",e.opts.heightMax),e.$wp.css(\"overflow\",\"auto\")):(e.$wp.css(\"maxHeight\",\"\"),e.$wp.css(\"overflow\",\"\")),e.opts.height?(e.$wp.height(e.opts.height),e.$wp.css(\"overflow\",\"auto\"),e.$el.css(\"minHeight\",e.opts.height-e.helpers.getPX(e.$el.css(\"padding-top\"))-e.helpers.getPX(e.$el.css(\"padding-bottom\")))):(e.$wp.css(\"height\",\"\"),e.opts.heightMin||e.$el.css(\"minHeight\",\"\"),e.opts.heightMax||e.$wp.css(\"overflow\",\"\")),e.opts.width&&e.$box.width(e.opts.width)}function O(){if(!e.$wp)return!1;r(),e.$iframe&&(e.events.on(\"keyup keydown\",function(){setTimeout(n,0)},!0),e.events.on(\"commands.after html.set init initialized paste.after\",n))}return{_init:O,syncIframe:n,refresh:r}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{language:null}),t.FE_LANGUAGE||(t.FE_LANGUAGE={}),t.FE.MODULES.language=function(e){var n;function r(x){return n&&n.translation[x]&&n.translation[x].length?n.translation[x]:x}function O(){t.FE_LANGUAGE&&(n=t.FE_LANGUAGE[e.opts.language]),n&&n.direction&&(e.opts.direction=n.direction)}return{_init:O,translate:r}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{placeholderText:\"Type something\"}),t.FE.MODULES.placeholder=function(e){function n(){e.$placeholder||X();var U=e.opts.iframe?e.$iframe.prev().outerHeight(!0):e.$el.prev().outerHeight(!0),_=0,F=0,d=0,v=0,L=0,b=0,h=e.node.contents(e.el),m=t(e.selection.element()).css(\"text-align\");if(h.length&&h[0].nodeType==Node.ELEMENT_NODE){var u=t(h[0]);(!e.opts.toolbarInline||e.$el.prev().length>0)&&e.ready&&(_=e.helpers.getPX(u.css(\"margin-top\")),v=e.helpers.getPX(u.css(\"padding-top\")),F=e.helpers.getPX(u.css(\"margin-left\")),d=e.helpers.getPX(u.css(\"margin-right\")),L=e.helpers.getPX(u.css(\"padding-left\")),b=e.helpers.getPX(u.css(\"padding-right\"))),e.$placeholder.css(\"font-size\",u.css(\"font-size\")),e.$placeholder.css(\"line-height\",u.css(\"line-height\"))}else e.$placeholder.css(\"font-size\",e.$el.css(\"font-size\")),e.$placeholder.css(\"line-height\",e.$el.css(\"line-height\"));if(e.$wp.addClass(\"show-placeholder\"),e.$placeholder.css({marginTop:Math.max(e.helpers.getPX(e.$el.css(\"margin-top\")),_)+(U||0),paddingTop:Math.max(e.helpers.getPX(e.$el.css(\"padding-top\")),v),paddingLeft:Math.max(e.helpers.getPX(e.$el.css(\"padding-left\")),L),marginLeft:Math.max(e.helpers.getPX(e.$el.css(\"margin-left\")),F),paddingRight:Math.max(e.helpers.getPX(e.$el.css(\"padding-right\")),b),marginRight:Math.max(e.helpers.getPX(e.$el.css(\"margin-right\")),d),textAlign:m}).text(e.language.translate(e.opts.placeholderText||e.$oel.attr(\"placeholder\")||\"\")),e.$placeholder.html(e.$placeholder.text().replace(/\\n/g,\"<br>\")),e.size.refresh(),e.$placeholder.height()>e.$el.height()){var V=e.opts.heightMin;e.opts.heightMin=e.$placeholder.height()+e.$tb?e.$tb.height():0,e.size.refresh(),e.opts.heightMin=V}}function r(){e.$wp.removeClass(\"show-placeholder\"),e.size.refresh()}function O(){return e.$wp?e.node.hasClass(e.$wp.get(0),\"show-placeholder\"):!1}function x(){if(!e.$wp)return!1;e.core.isEmpty()?n():r()}function X(){e.$placeholder=t('<span class=\"fr-placeholder\"></span>'),e.$wp.append(e.$placeholder)}function Y(){if(!e.$wp)return!1;e.events.on(\"init input keydown keyup contentChanged initialized\",x)}return{_init:Y,show:n,hide:r,refresh:x,isVisible:O}}})(jQuery);(function(t){t.FE.MODULES.edit=function(e){function n(){if(e.browser.mozilla)try{e.doc.execCommand(\"enableObjectResizing\",!1,\"false\"),e.doc.execCommand(\"enableInlineTableEditing\",!1,\"false\")}catch{}if(e.browser.msie)try{e.doc.body.addEventListener(\"mscontrolselect\",function(U){return U.preventDefault(),!1})}catch{}}var r=!1;function O(){e.$wp?(e.$el.attr(\"contenteditable\",!0),e.$el.removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1),e.$tb&&e.$tb.removeClass(\"fr-disabled\").removeAttr(\"aria-disabled\"),n()):e.$el.is(\"a\")&&e.$el.attr(\"contenteditable\",!0),r=!1}function x(){e.events.disableBlur(),e.$wp?(e.$el.attr(\"contenteditable\",!1),e.$el.addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),e.$tb&&e.$tb.addClass(\"fr-disabled\").attr(\"aria-disabled\",!0)):e.$el.is(\"a\")&&e.$el.attr(\"contenteditable\",!1),e.events.enableBlur(),r=!0}function X(){return r}function Y(){e.events.on(\"focus\",function(){X()?e.edit.off():e.edit.on()})}return{_init:Y,on:O,off:x,disableDesign:n,isDisabled:X}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{documentReady:!1,editorClass:null,typingTimer:500,iframe:!1,requestWithCORS:!0,requestWithCredentials:!1,requestHeaders:{},useClasses:!0,spellcheck:!0,iframeDefaultStyle:'html{margin:0px;height:auto;}body{height:auto;padding:10px;background:transparent;color:#000000;position:relative;z-index: 2;-webkit-user-select:auto;margin:0px;overflow:hidden;min-height:20px;}body:after{content:\"\";display:block;clear:both;}body::-moz-selection{background:#b5d6fd;color:#000;}body::selection{background:#b5d6fd;color:#000;}',iframeStyle:\"\",iframeStyleFiles:[],direction:\"auto\",zIndex:1,tabIndex:null,disableRightClick:!1,scrollableContainer:\"body\",keepFormatOnDelete:!1,theme:null}),t.FE.MODULES.core=function(e){function n(v){if(e.opts.iframe){e.$head.find(\"style[data-fr-style], link[data-fr-style]\").remove(),e.$head.append('<style data-fr-style=\"true\">'+v+\"</style>\");for(var L=0;L<e.opts.iframeStyleFiles.length;L++){var b=t('<link data-fr-style=\"true\" rel=\"stylesheet\" href=\"'+e.opts.iframeStyleFiles[L]+'\">');b.get(0).addEventListener(\"load\",e.size.syncIframe),e.$head.append(b)}}}function r(){e.opts.iframe||e.$el.addClass(\"fr-element fr-view\")}function O(){if(e.$box.addClass(\"fr-box\"+(e.opts.editorClass?\" \"+e.opts.editorClass:\"\")),e.$box.attr(\"role\",\"application\"),e.$wp.addClass(\"fr-wrapper\"),e.opts.documentReady&&e.$box.addClass(\"fr-document\"),r(),(e.opts.height===1/0||e.opts.height&&e.opts.height<window.innerHeight||e.opts.heightMax&&e.opts.heightMax<window.innerHeight)&&e.$el.addClass(\"fr-element-scroll-visible\"),e.opts.iframe){e.$iframe.addClass(\"fr-iframe\"),e.$el.addClass(\"fr-view\");for(var v=0;v<e.o_doc.styleSheets.length;v++){var L;try{L=e.o_doc.styleSheets[v].cssRules}catch{}if(L)for(var b=0,h=L.length;b<h;b++)L[b].selectorText&&(L[b].selectorText.indexOf(\".fr-view\")===0||L[b].selectorText.indexOf(\".fr-element\")===0)&&L[b].style.cssText.length>0&&(L[b].selectorText.indexOf(\".fr-view\")===0?e.opts.iframeStyle+=L[b].selectorText.replace(/\\.fr-view/g,\"body\")+\"{\"+L[b].style.cssText+\"}\":e.opts.iframeStyle+=L[b].selectorText.replace(/\\.fr-element/g,\"body\")+\"{\"+L[b].style.cssText+\"}\")}}e.opts.direction!=\"auto\"&&e.$box.removeClass(\"fr-ltr fr-rtl\").addClass(\"fr-\"+e.opts.direction),e.$el.attr(\"dir\",e.opts.direction),e.$wp.attr(\"dir\",e.opts.direction),e.opts.zIndex>1&&e.$box.css(\"z-index\",e.opts.zIndex),e.opts.theme&&e.$box.addClass(e.opts.theme+\"-theme\"),e.opts.tabIndex=e.opts.tabIndex||e.$oel.attr(\"tabIndex\"),e.opts.tabIndex&&e.$el.attr(\"tabIndex\",e.opts.tabIndex)}function x(){return e.node.isEmpty(e.el)}function X(){e.drag_support={filereader:typeof FileReader<\"u\",formdata:!!e.win.FormData,progress:\"upload\"in new XMLHttpRequest}}function Y(v,L){var b=new XMLHttpRequest;b.open(L,v,!0),e.opts.requestWithCredentials&&(b.withCredentials=!0);for(var h in e.opts.requestHeaders)e.opts.requestHeaders.hasOwnProperty(h)&&b.setRequestHeader(h,e.opts.requestHeaders[h]);return b}function U(v){e.$oel.get(0).tagName==\"TEXTAREA\"&&e.$oel.val(v),e.$box&&e.$box.removeAttr(\"role\"),e.$wp&&(e.$oel.get(0).tagName==\"TEXTAREA\"?(e.$el.html(\"\"),e.$wp.html(\"\"),e.$box.replaceWith(e.$oel),e.$oel.show()):(e.$wp.replaceWith(v),e.$el.html(\"\"),e.$box.removeClass(\"fr-view fr-ltr fr-box \"+(e.opts.editorClass||\"\")),e.opts.theme&&e.$box.addClass(e.opts.theme+\"-theme\"))),this.$wp=null,this.$el=null,this.el=null,this.$box=null}function _(){return e.browser.mozilla&&e.helpers.isMobile()?e.selection.inEditor():e.node.hasFocus(e.el)||e.$el.find(\"*:focus\").length>0}function F(v){if(!v)return!1;var L=v.data(\"instance\");return L?L.id==e.id:!1}function d(){if(t.FE.INSTANCES.push(e),X(),e.$wp){O(),e.html.set(e._original_html),e.$el.attr(\"spellcheck\",e.opts.spellcheck),e.helpers.isMobile()&&(e.$el.attr(\"autocomplete\",e.opts.spellcheck?\"on\":\"off\"),e.$el.attr(\"autocorrect\",e.opts.spellcheck?\"on\":\"off\"),e.$el.attr(\"autocapitalize\",e.opts.spellcheck?\"on\":\"off\")),e.opts.disableRightClick&&e.events.$on(e.$el,\"contextmenu\",function(v){if(v.button==2)return!1});try{e.doc.execCommand(\"styleWithCSS\",!1,!1)}catch{}}e.$oel.get(0).tagName==\"TEXTAREA\"&&(e.events.on(\"contentChanged\",function(){e.$oel.val(e.html.get())}),e.events.on(\"form.submit\",function(){e.$oel.val(e.html.get())}),e.events.on(\"form.reset\",function(){e.html.set(e._original_html)}),e.$oel.val(e.html.get())),e.helpers.isIOS()&&e.events.$on(e.$doc,\"selectionchange\",function(){e.$doc.get(0).hasFocus()||e.$win.get(0).focus()}),e.events.trigger(\"init\"),e.opts.autofocus&&!e.opts.initOnClick&&e.$wp&&e.events.on(\"initialized\",function(){e.events.focus(!0)})}return{_init:d,destroy:U,isEmpty:x,getXHR:Y,injectStyle:n,hasFocus:_,sameInstance:F}}})(jQuery);(function(t){t.FE.MODULES.cursorLists=function(e){function n(_){for(var F=_;F.tagName!=\"LI\";)F=F.parentNode;return F}function r(_){for(var F=_;!e.node.isList(F);)F=F.parentNode;return F}function O(_){var F=n(_),d=F.nextSibling,v=F.previousSibling,L=e.html.defaultTag(),b;if(e.node.isEmpty(F,!0)&&d){for(var h=\"\",m=\"\",u=_.parentNode;!e.node.isList(u)&&u.parentNode&&(u.parentNode.tagName!==\"LI\"||u.parentNode===F);)h=e.node.openTagString(u)+h,m=m+e.node.closeTagString(u),u=u.parentNode;h=e.node.openTagString(u)+h,m=m+e.node.closeTagString(u);var V=\"\";for(u.parentNode&&u.parentNode.tagName==\"LI\"?V=m+\"<li>\"+t.FE.MARKERS+\"<br>\"+h:L?V=m+\"<\"+L+\">\"+t.FE.MARKERS+\"<br></\"+L+\">\"+h:V=m+t.FE.MARKERS+\"<br>\"+h;[\"UL\",\"OL\"].indexOf(u.tagName)<0||u.parentNode&&u.parentNode.tagName===\"LI\";)u=u.parentNode;t(F).replaceWith('<span id=\"fr-break\"></span>');var E=e.node.openTagString(u)+t(u).html()+e.node.closeTagString(u);E=E.replace(/<span id=\"fr-break\"><\\/span>/g,V),t(u).replaceWith(E),e.$el.find(\"li:empty\").remove()}else if(v&&d||!e.node.isEmpty(F,!0)){for(var o=\"<br>\",l=_.parentNode;l&&l.tagName!=\"LI\";)o=e.node.openTagString(l)+o+e.node.closeTagString(l),l=l.parentNode;t(F).before(\"<li>\"+o+\"</li>\"),t(_).remove()}else if(!v)b=r(F),b.parentNode&&b.parentNode.tagName==\"LI\"?d?t(b.parentNode).before(e.node.openTagString(F)+t.FE.MARKERS+\"<br></li>\"):t(b.parentNode).after(e.node.openTagString(F)+t.FE.MARKERS+\"<br></li>\"):L?t(b).before(\"<\"+L+\">\"+t.FE.MARKERS+\"<br></\"+L+\">\"):t(b).before(t.FE.MARKERS+\"<br>\"),t(F).remove();else{b=r(F);for(var f=t.FE.MARKERS+\"<br>\",i=_.parentNode;i&&i.tagName!=\"LI\";)f=e.node.openTagString(i)+f+e.node.closeTagString(i),i=i.parentNode;b.parentNode&&b.parentNode.tagName==\"LI\"?t(b.parentNode).after(\"<li>\"+f+\"</li>\"):L?t(b).after(\"<\"+L+\">\"+f+\"</\"+L+\">\"):t(b).after(f),t(F).remove()}}function x(_){for(var F=n(_),d=\"\",v=_,L=\"\",b=\"\";v!=F;){v=v.parentNode;var h=v.tagName==\"A\"&&e.cursor.isAtEnd(_,v)?\"fr-to-remove\":\"\";L=e.node.openTagString(t(v).clone().addClass(h).get(0))+L,b=e.node.closeTagString(v)+b}d=b+d+L+t.FE.MARKERS+(e.opts.keepFormatOnDelete?t.FE.INVISIBLE_SPACE:\"\"),t(_).replaceWith('<span id=\"fr-break\"></span>');var m=e.node.openTagString(F)+t(F).html()+e.node.closeTagString(F);m=m.replace(/<span id=\"fr-break\"><\\/span>/g,d),t(F).replaceWith(m)}function X(_){for(var F=n(_),d=t.FE.MARKERS,v=\"\",L=_,b=!1;L!=F;){L=L.parentNode;var h=L.tagName==\"A\"&&e.cursor.isAtEnd(_,L)?\"fr-to-remove\":\"\";!b&&L!=F&&!e.node.isBlock(L)&&(b=!0,v=v+t.FE.INVISIBLE_SPACE),v=e.node.openTagString(t(L).clone().addClass(h).get(0))+v,d=d+e.node.closeTagString(L)}var m=v+d;t(_).remove(),t(F).after(m)}function Y(_){var F=n(_),d=F.previousSibling;if(d){d=t(d).find(e.html.blockTagsQuery()).get(-1)||d,t(_).replaceWith(t.FE.MARKERS);var v=e.node.contents(d);v.length&&v[v.length-1].tagName==\"BR\"&&t(v[v.length-1]).remove(),t(F).find(e.html.blockTagsQuery()).not(\"ol, ul, table\").each(function(){this.parentNode==F&&t(this).replaceWith(t(this).html()+(e.node.isEmpty(this)?\"\":\"<br>\"))});for(var L=e.node.contents(F)[0],b;L&&!e.node.isList(L);)b=L.nextSibling,t(d).append(L),L=b;for(d=F.previousSibling;L;)b=L.nextSibling,t(d).append(L),L=b;v=e.node.contents(d),v.length>1&&v[v.length-1].tagName===\"BR\"&&t(v[v.length-1]).remove(),t(F).remove()}else{var h=r(F);if(t(_).replaceWith(t.FE.MARKERS),h.parentNode&&h.parentNode.tagName==\"LI\"){var m=h.previousSibling;e.node.isBlock(m)?(t(F).find(e.html.blockTagsQuery()).not(\"ol, ul, table\").each(function(){this.parentNode==F&&t(this).replaceWith(t(this).html()+(e.node.isEmpty(this)?\"\":\"<br>\"))}),t(m).append(t(F).html())):t(h).before(t(F).html())}else{var u=e.html.defaultTag();u&&t(F).find(e.html.blockTagsQuery()).length===0?t(h).before(\"<\"+u+\">\"+t(F).html()+\"</\"+u+\">\"):t(h).before(t(F).html())}t(F).remove(),e.html.wrap(),t(h).find(\"li\").length===0&&t(h).remove()}}function U(_){var F=n(_),d=F.nextSibling,v;if(d){v=e.node.contents(d),v.length&&v[0].tagName==\"BR\"&&t(v[0]).remove(),t(d).find(e.html.blockTagsQuery()).not(\"ol, ul, table\").each(function(){this.parentNode==d&&t(this).replaceWith(t(this).html()+(e.node.isEmpty(this)?\"\":\"<br>\"))});for(var L=_,b=e.node.contents(d)[0],h;b&&!e.node.isList(b);)h=b.nextSibling,t(L).after(b),L=b,b=h;for(;b;)h=b.nextSibling,t(F).append(b),b=h;t(_).replaceWith(t.FE.MARKERS),t(d).remove()}else{for(var m=F;!m.nextSibling&&m!=e.el;)m=m.parentNode;if(m==e.el)return!1;if(m=m.nextSibling,e.node.isBlock(m))t.FE.NO_DELETE_TAGS.indexOf(m.tagName)<0&&(t(_).replaceWith(t.FE.MARKERS),v=e.node.contents(F),v.length&&v[v.length-1].tagName==\"BR\"&&t(v[v.length-1]).remove(),t(F).append(t(m).html()),t(m).remove());else for(v=e.node.contents(F),v.length&&v[v.length-1].tagName==\"BR\"&&t(v[v.length-1]).remove(),t(_).replaceWith(t.FE.MARKERS);m&&!e.node.isBlock(m)&&m.tagName!=\"BR\";)t(F).append(t(m)),m=m.nextSibling}}return{_startEnter:O,_middleEnter:x,_endEnter:X,_backspace:Y,_del:U}}})(jQuery);(function(t){t.FE.NO_DELETE_TAGS=[\"TH\",\"TD\",\"TR\",\"TABLE\",\"FORM\"],t.FE.SIMPLE_ENTER_TAGS=[\"TH\",\"TD\",\"LI\",\"DL\",\"DT\",\"FORM\"],t.FE.MODULES.cursor=function(e){function n(o){return o?e.node.isBlock(o)?!0:o.nextSibling&&o.nextSibling.nodeType==Node.TEXT_NODE&&o.nextSibling.textContent.replace(/\\u200b/g,\"\").length===0?n(o.nextSibling):o.nextSibling&&!(o.previousSibling&&o.nextSibling.tagName==\"BR\"&&!o.nextSibling.nextSibling)?!1:n(o.parentNode):!1}function r(o){return o?e.node.isBlock(o)?!0:o.previousSibling&&o.previousSibling.nodeType==Node.TEXT_NODE&&o.previousSibling.textContent.replace(/\\u200b/g,\"\").length===0?r(o.previousSibling):o.previousSibling?!1:!o.previousSibling&&e.node.hasClass(o.parentNode,\"fr-inner\")?!0:r(o.parentNode):!1}function O(o,l){return!o||o==e.$wp.get(0)?!1:o.previousSibling&&o.previousSibling.nodeType==Node.TEXT_NODE&&o.previousSibling.textContent.replace(/\\u200b/g,\"\").length===0?O(o.previousSibling,l):o.previousSibling?!1:o.parentNode==l?!0:O(o.parentNode,l)}function x(o,l){return!o||o==e.$wp.get(0)?!1:o.nextSibling&&o.nextSibling.nodeType==Node.TEXT_NODE&&o.nextSibling.textContent.replace(/\\u200b/g,\"\").length===0?x(o.nextSibling,l):o.nextSibling&&!(o.previousSibling&&o.nextSibling.tagName==\"BR\"&&!o.nextSibling.nextSibling)?!1:o.parentNode==l?!0:x(o.parentNode,l)}function X(o){return t(o).parentsUntil(e.$el,\"LI\").length>0&&t(o).parentsUntil(\"LI\",\"TABLE\").length===0}function Y(o,l){var f=new RegExp((l?\"^\":\"\")+\"(([\\\\uD83C-\\\\uDBFF\\\\uDC00-\\\\uDFFF]+\\\\u200D)*[\\\\uD83C-\\\\uDBFF\\\\uDC00-\\\\uDFFF]{2})\"+(l?\"\":\"$\"),\"i\"),i=o.match(f);return i?i[0].length:1}function U(o){for(var l=t(o).parentsUntil(e.$el,\"BLOCKQUOTE\").length>0,f=e.node.deepestParent(o,[],!l),i=f;f&&!f.previousSibling&&f.tagName!=\"BLOCKQUOTE\"&&f.parentElement!=e.el&&!e.node.hasClass(f.parentElement,\"fr-inner\")&&t.FE.SIMPLE_ENTER_TAGS.indexOf(f.parentElement.tagName)<0;)f=f.parentElement;if(f&&f.tagName==\"BLOCKQUOTE\"){var S=e.node.deepestParent(o,[t(o).parentsUntil(e.$el,\"BLOCKQUOTE\").get(0)]);S&&S.previousSibling&&(f=S,i=S)}if(f!==null){var s=f.previousSibling,p;if(e.node.isBlock(f)&&e.node.isEditable(f))if(s&&t.FE.NO_DELETE_TAGS.indexOf(s.tagName)<0){if(e.node.isDeletable(s))t(s).remove(),t(o).replaceWith(t.FE.MARKERS);else if(e.node.isEditable(s))if(e.node.isBlock(s))if(e.node.isEmpty(s)&&!e.node.isList(s))t(s).remove(),t(o).after(e.opts.keepFormatOnDelete?t.FE.INVISIBLE_SPACE:\"\");else{if(e.node.isList(s)&&(s=t(s).find(\"li:last\").get(0)),p=e.node.contents(s),p.length&&p[p.length-1].tagName==\"BR\"&&t(p[p.length-1]).remove(),s.tagName==\"BLOCKQUOTE\"&&f.tagName!=\"BLOCKQUOTE\")for(p=e.node.contents(s);p.length&&e.node.isBlock(p[p.length-1]);)s=p[p.length-1],p=e.node.contents(s);else if(s.tagName!=\"BLOCKQUOTE\"&&i.tagName==\"BLOCKQUOTE\")for(p=e.node.contents(i);p.length&&e.node.isBlock(p[0]);)i=p[0],p=e.node.contents(i);if(e.node.isEmpty(f))t(o).remove(),e.selection.setAtEnd(s,!0);else{t(o).replaceWith(t.FE.MARKERS);var M=s.childNodes;e.node.isBlock(M[M.length-1])?t(M[M.length-1]).append(i.innerHTML):t(s).append(i.innerHTML)}t(i).remove(),e.node.isEmpty(f)&&t(f).remove()}else t(o).replaceWith(t.FE.MARKERS),f.tagName==\"BLOCKQUOTE\"&&s.nodeType==Node.ELEMENT_NODE?t(s).remove():(t(s).after(e.node.isEmpty(f)?\"\":t(f).html()),t(f).remove(),s.tagName==\"BR\"&&t(s).remove())}else s||f&&f.tagName==\"BLOCKQUOTE\"&&t(f).text().replace(/\\u200B/g,\"\").length==0&&t(f).remove()}}function _(o){for(var l=o;!l.previousSibling;)if(l=l.parentNode,e.node.isElement(l))return!1;l=l.previousSibling;var f;if(!e.node.isBlock(l)&&e.node.isEditable(l)){for(f=e.node.contents(l);l.nodeType!=Node.TEXT_NODE&&!e.node.isDeletable(l)&&f.length&&e.node.isEditable(l);)l=f[f.length-1],f=e.node.contents(l);if(l.nodeType==Node.TEXT_NODE){var i=l.textContent,S=i.length;if(i.length&&i[i.length-1]===`\n`)return l.textContent=i.substring(0,S-2),l.textContent.length===0&&l.parentNode.removeChild(l),_(o);if(e.opts.tabSpaces&&i.length>=e.opts.tabSpaces){var s=i.substr(i.length-e.opts.tabSpaces,i.length-1);s.replace(/ /g,\"\").replace(new RegExp(t.FE.UNICODE_NBSP,\"g\"),\"\").length===0&&(S=i.length-e.opts.tabSpaces+1)}l.textContent=i.substring(0,S-Y(i)),e.opts.htmlUntouched&&!o.nextSibling&&l.textContent.length&&l.textContent[l.textContent.length-1]===\" \"&&(l.textContent=l.textContent.substring(0,l.textContent.length-1)+t.FE.UNICODE_NBSP);var p=i.length!=l.textContent.length;if(l.textContent.length===0)if(p&&e.opts.keepFormatOnDelete)t(l).after(t.FE.INVISIBLE_SPACE+t.FE.MARKERS);else if((l.parentNode.childNodes.length==2&&l.parentNode==o.parentNode||l.parentNode.childNodes.length==1)&&!e.node.isBlock(l.parentNode)&&!e.node.isElement(l.parentNode)&&e.node.isDeletable(l.parentNode))t(l.parentNode).after(t.FE.MARKERS),t(l.parentNode).remove();else{for(;!e.node.isElement(l.parentNode)&&e.node.isEmpty(l.parentNode)&&t.FE.NO_DELETE_TAGS.indexOf(l.parentNode.tagName)<0;){var M=l;l=l.parentNode,M.parentNode.removeChild(M)}t(l).after(t.FE.MARKERS),e.node.isElement(l.parentNode)&&!o.nextSibling&&l.previousSibling&&l.previousSibling.tagName==\"BR\"&&t(o).after(\"<br>\"),l.parentNode.removeChild(l)}else t(l).after(t.FE.MARKERS)}else e.node.isDeletable(l)?(t(l).after(t.FE.MARKERS),t(l).remove()):o.nextSibling&&o.nextSibling.tagName==\"BR\"&&e.node.isVoid(l)&&l.tagName!=\"BR\"?(t(o.nextSibling).remove(),t(o).replaceWith(t.FE.MARKERS)):e.events.trigger(\"node.remove\",[t(l)])!==!1&&(t(l).after(t.FE.MARKERS),t(l).remove())}else if(t.FE.NO_DELETE_TAGS.indexOf(l.tagName)<0&&(e.node.isEditable(l)||e.node.isDeletable(l)))if(e.node.isDeletable(l))t(o).replaceWith(t.FE.MARKERS),t(l).remove();else if(e.node.isEmpty(l)&&!e.node.isList(l))t(l).remove(),t(o).replaceWith(t.FE.MARKERS);else{for(e.node.isList(l)&&(l=t(l).find(\"li:last\").get(0)),f=e.node.contents(l),f&&f[f.length-1].tagName==\"BR\"&&t(f[f.length-1]).remove(),f=e.node.contents(l);f&&e.node.isBlock(f[f.length-1]);)l=f[f.length-1],f=e.node.contents(l);t(l).append(t.FE.MARKERS);for(var a=o;!a.previousSibling;)a=a.parentNode;for(;a&&a.tagName!==\"BR\"&&!e.node.isBlock(a);){var y=a;a=a.nextSibling,t(l).append(y)}a&&a.tagName==\"BR\"&&t(a).remove(),t(o).remove()}else o.nextSibling&&o.nextSibling.tagName==\"BR\"&&t(o.nextSibling).remove()}function F(){var o=!1,l=e.markers.insert();if(!l)return!0;for(var f=l.parentNode;f&&!e.node.isElement(f);){if(f.getAttribute(\"contenteditable\")===\"false\")return t(l).replaceWith(t.FE.MARKERS),e.selection.restore(),!1;if(f.getAttribute(\"contenteditable\")===\"true\")break;f=f.parentNode}e.el.normalize();var i=l.previousSibling;if(i){var S=i.textContent;S&&S.length&&S.charCodeAt(S.length-1)==8203&&(S.length==1?t(i).remove():i.textContent=i.textContent.substr(0,S.length-Y(S)))}return X(l)&&O(l,t(l).parents(\"li:first\").get(0))?e.cursorLists._backspace(l):n(l)?o=_(l):r(l)?o=U(l):o=_(l),t(l).remove(),b(),e.html.fillEmptyBlocks(!0),e.opts.htmlUntouched||(e.html.cleanEmptyTags(),e.clean.lists(),e.spaces.normalizeAroundCursor()),e.selection.restore(),o}function d(o){var l=t(o).parentsUntil(e.$el,\"BLOCKQUOTE\").length>0,f=e.node.deepestParent(o,[],!l);if(f&&f.tagName==\"BLOCKQUOTE\"){var i=e.node.deepestParent(o,[t(o).parentsUntil(e.$el,\"BLOCKQUOTE\").get(0)]);i&&i.nextSibling&&(f=i)}if(f!==null){var S=f.nextSibling,s;if(e.node.isBlock(f)&&(e.node.isEditable(f)||e.node.isDeletable(f))&&S&&t.FE.NO_DELETE_TAGS.indexOf(S.tagName)<0)if(e.node.isDeletable(S))t(S).remove(),t(o).replaceWith(t.FE.MARKERS);else if(e.node.isBlock(S)&&e.node.isEditable(S))if(e.node.isList(S))if(e.node.isEmpty(f,!0))t(f).remove(),t(S).find(\"li:first\").prepend(t.FE.MARKERS);else{var p=t(S).find(\"li:first\");f.tagName==\"BLOCKQUOTE\"&&(s=e.node.contents(f),s.length&&e.node.isBlock(s[s.length-1])&&(f=s[s.length-1])),p.find(\"ul, ol\").length===0&&(t(o).replaceWith(t.FE.MARKERS),p.find(e.html.blockTagsQuery()).not(\"ol, ul, table\").each(function(){this.parentNode==p.get(0)&&t(this).replaceWith(t(this).html()+(e.node.isEmpty(this)?\"\":\"<br>\"))}),t(f).append(e.node.contents(p.get(0))),p.remove(),t(S).find(\"li\").length===0&&t(S).remove())}else{if(s=e.node.contents(S),s.length&&s[0].tagName==\"BR\"&&t(s[0]).remove(),S.tagName!=\"BLOCKQUOTE\"&&f.tagName==\"BLOCKQUOTE\")for(s=e.node.contents(f);s.length&&e.node.isBlock(s[s.length-1]);)f=s[s.length-1],s=e.node.contents(f);else if(S.tagName==\"BLOCKQUOTE\"&&f.tagName!=\"BLOCKQUOTE\")for(s=e.node.contents(S);s.length&&e.node.isBlock(s[0]);)S=s[0],s=e.node.contents(S);t(o).replaceWith(t.FE.MARKERS),t(f).append(S.innerHTML),t(S).remove()}else{for(t(o).replaceWith(t.FE.MARKERS);S&&S.tagName!==\"BR\"&&!e.node.isBlock(S)&&e.node.isEditable(S);){var M=S;S=S.nextSibling,t(f).append(M)}S&&S.tagName==\"BR\"&&e.node.isEditable(S)&&t(S).remove()}}}function v(o){for(var l=o;!l.nextSibling;)if(l=l.parentNode,e.node.isElement(l))return!1;if(l=l.nextSibling,l.tagName==\"BR\"&&e.node.isEditable(l)){if(l.nextSibling){if(e.node.isBlock(l.nextSibling)&&e.node.isEditable(l.nextSibling))if(t.FE.NO_DELETE_TAGS.indexOf(l.nextSibling.tagName)<0)l=l.nextSibling,t(l.previousSibling).remove();else{t(l).remove();return}}else if(n(l)){if(X(o))e.cursorLists._del(o);else{var f=e.node.deepestParent(l);f&&((!e.node.isEmpty(e.node.blockParent(l))||(e.node.blockParent(l).nextSibling&&t.FE.NO_DELETE_TAGS.indexOf(e.node.blockParent(l).nextSibling.tagName))<0)&&t(l).remove(),d(o))}return}}var i;if(!e.node.isBlock(l)&&e.node.isEditable(l)){for(i=e.node.contents(l);l.nodeType!=Node.TEXT_NODE&&i.length&&!e.node.isDeletable(l)&&e.node.isEditable(l);)l=i[0],i=e.node.contents(l);l.nodeType==Node.TEXT_NODE?(t(l).before(t.FE.MARKERS),l.textContent.length&&(l.textContent=l.textContent.substring(Y(l.textContent,!0),l.textContent.length))):(e.node.isDeletable(l)||e.events.trigger(\"node.remove\",[t(l)])!==!1)&&(t(l).before(t.FE.MARKERS),t(l).remove()),t(o).remove()}else if(t.FE.NO_DELETE_TAGS.indexOf(l.tagName)<0&&(e.node.isEditable(l)||e.node.isDeletable(l)))if(e.node.isDeletable(l))t(o).replaceWith(t.FE.MARKERS),t(l).remove();else if(e.node.isList(l))o.previousSibling?(t(l).find(\"li:first\").prepend(o),e.cursorLists._backspace(o)):(t(l).find(\"li:first\").prepend(t.FE.MARKERS),t(o).remove());else if(i=e.node.contents(l),i&&i.length&&i[0].tagName==\"BR\"&&t(i[0]).remove(),i&&l.tagName==\"BLOCKQUOTE\"){var S=i[0];for(t(o).before(t.FE.MARKERS);S&&S.tagName!=\"BR\";){var s=S;S=S.nextSibling,t(o).before(s)}S&&S.tagName==\"BR\"&&t(S).remove()}else t(o).after(t(l).html()).after(t.FE.MARKERS),t(l).remove()}function L(){var o=e.markers.insert();if(!o)return!1;if(e.el.normalize(),n(o))if(X(o))if(t(o).parents(\"li:first\").find(\"ul, ol\").length===0)e.cursorLists._del(o);else{var l=t(o).parents(\"li:first\").find(\"ul:first, ol:first\").find(\"li:first\");l=l.find(e.html.blockTagsQuery()).get(-1)||l,l.prepend(o),e.cursorLists._backspace(o)}else d(o);else r(o),v(o);t(o).remove(),b(),e.html.fillEmptyBlocks(!0),e.opts.htmlUntouched||(e.html.cleanEmptyTags(),e.clean.lists()),e.spaces.normalizeAroundCursor(),e.selection.restore()}function b(){for(var o=e.el.querySelectorAll(\"blockquote:empty\"),l=0;l<o.length;l++)o[l].parentNode.removeChild(o[l])}function h(){e.$el.find(\".fr-to-remove\").each(function(){for(var o=e.node.contents(this),l=0;l<o.length;l++)o[l].nodeType==Node.TEXT_NODE&&(o[l].textContent=o[l].textContent.replace(/\\u200B/g,\"\"));t(this).replaceWith(this.innerHTML)})}function m(o,l,f){var i=e.node.deepestParent(o,[],!f),S;if(i&&i.tagName==\"BLOCKQUOTE\")return x(o,i)?(S=e.html.defaultTag(),l?t(o).replaceWith(\"<br>\"+t.FE.MARKERS):S?t(i).after(\"<\"+S+\">\"+t.FE.MARKERS+\"<br></\"+S+\">\"):t(i).after(t.FE.MARKERS+\"<br>\"),t(o).remove(),!1):(V(o,l,f),!1);if(i==null)S=e.html.defaultTag(),!S||!e.node.isElement(o.parentNode)?o.previousSibling&&!t(o.previousSibling).is(\"br\")&&!o.nextSibling?t(o).replaceWith(\"<br>\"+t.FE.MARKERS+\"<br>\"):t(o).replaceWith(\"<br>\"+t.FE.MARKERS):t(o).replaceWith(\"<\"+S+\">\"+t.FE.MARKERS+\"<br></\"+S+\">\");else{var s=o,p=\"\";i.tagName==\"PRE\"&&!o.nextSibling&&(l=!0),(!e.node.isBlock(i)||l)&&(p=\"<br/>\");var M=\"\",a=\"\";S=e.html.defaultTag();var y=\"\",c=\"\";S&&e.node.isBlock(i)&&(y=\"<\"+S+\">\",c=\"</\"+S+\">\",i.tagName==S.toUpperCase()&&(y=e.node.openTagString(t(i).clone().removeAttr(\"id\").get(0))));do if(s=s.parentNode,!l||s!=i||l&&!e.node.isBlock(i))if(M=M+e.node.closeTagString(s),s==i&&e.node.isBlock(i))a=y+a;else{var k=s.tagName==\"A\"&&x(o,s)?\"fr-to-remove\":\"\";a=e.node.openTagString(t(s).clone().addClass(k).get(0))+a}while(s!=i);p=M+p+a+(o.parentNode==i&&e.node.isBlock(i)?\"\":t.FE.INVISIBLE_SPACE)+t.FE.MARKERS,e.node.isBlock(i)&&!t(i).find(\"*:last\").is(\"br\")&&t(i).append(\"<br/>\"),t(o).after('<span id=\"fr-break\"></span>'),t(o).remove(),(!i.nextSibling||e.node.isBlock(i.nextSibling))&&!e.node.isBlock(i)&&t(i).after(\"<br>\");var A;!l&&e.node.isBlock(i)?A=e.node.openTagString(i)+t(i).html()+c:A=e.node.openTagString(i)+t(i).html()+e.node.closeTagString(i),A=A.replace(/<span id=\"fr-break\"><\\/span>/g,p),t(i).replaceWith(A)}}function u(o,l,f){var i=e.node.deepestParent(o,[],!f),S;if(i&&i.tagName==\"TABLE\")return t(i).find(\"td:first, th:first\").prepend(o),u(o,l,f);if(i&&i.tagName==\"BLOCKQUOTE\")if(O(o,i)){if(!l)return S=e.html.defaultTag(),S?t(i).before(\"<\"+S+\">\"+t.FE.MARKERS+\"<br></\"+S+\">\"):t(i).before(t.FE.MARKERS+\"<br>\"),t(o).remove(),!1}else x(o,i)?m(o,l,!0):V(o,l,!0);if(i==null)S=e.html.defaultTag(),!S||!e.node.isElement(o.parentNode)?t(o).replaceWith(\"<br>\"+t.FE.MARKERS):t(o).replaceWith(\"<\"+S+\">\"+t.FE.MARKERS+\"<br></\"+S+\">\");else{if(e.node.isBlock(i))if(i.tagName==\"PRE\"&&(l=!0),l)t(o).remove(),t(i).prepend(\"<br>\"+t.FE.MARKERS);else{if(e.node.isEmpty(i,!0))return m(o,l,f);if(!e.opts.keepFormatOnDelete)t(i).before(e.node.openTagString(t(i).clone().removeAttr(\"id\").get(0))+\"<br>\"+e.node.closeTagString(i));else{for(var s=o,p=t.FE.INVISIBLE_SPACE;s!=i&&!e.node.isElement(s);)s=s.parentNode,p=e.node.openTagString(s)+p+e.node.closeTagString(s);t(i).before(p)}}else t(i).before(\"<br>\");t(o).remove()}}function V(o,l,f){var i=e.node.deepestParent(o,[],!f);if(i==null)e.html.defaultTag()&&o.parentNode===e.el?t(o).replaceWith(\"<\"+e.html.defaultTag()+\">\"+t.FE.MARKERS+\"<br></\"+e.html.defaultTag()+\">\"):((!o.nextSibling||e.node.isBlock(o.nextSibling))&&t(o).after(\"<br>\"),t(o).replaceWith(\"<br>\"+t.FE.MARKERS));else{var S=o,s=\"\";i.tagName==\"PRE\"&&(l=!0),(!e.node.isBlock(i)||l)&&(s=\"<br>\");var p=\"\",M=\"\";do{var a=S;if(S=S.parentNode,i.tagName==\"BLOCKQUOTE\"&&e.node.isEmpty(a)&&!e.node.hasClass(a,\"fr-marker\")&&t(a).find(o).length>0&&t(a).after(o),!(i.tagName==\"BLOCKQUOTE\"&&(x(o,S)||O(o,S))))if(!l||S!=i||l&&!e.node.isBlock(i)){p=p+e.node.closeTagString(S);var y=S.tagName==\"A\"&&x(o,S)?\"fr-to-remove\":\"\";M=e.node.openTagString(t(S).clone().addClass(y).removeAttr(\"id\").get(0))+M}else i.tagName==\"BLOCKQUOTE\"&&l&&(p=\"\",M=\"\")}while(S!=i);var c=i==o.parentNode&&e.node.isBlock(i)||o.nextSibling;if(i.tagName==\"BLOCKQUOTE\")if(o.previousSibling&&e.node.isBlock(o.previousSibling)&&o.nextSibling&&o.nextSibling.tagName==\"BR\"&&(t(o.nextSibling).after(o),o.nextSibling&&o.nextSibling.tagName==\"BR\"&&t(o.nextSibling).remove()),l)s=p+s+t.FE.MARKERS+M;else{var k=e.html.defaultTag();s=p+s+(k?\"<\"+k+\">\":\"\")+t.FE.MARKERS+\"<br>\"+(k?\"</\"+k+\">\":\"\")+M}else s=p+s+M+(c?\"\":t.FE.INVISIBLE_SPACE)+t.FE.MARKERS;t(o).replaceWith('<span id=\"fr-break\"></span>');var A=e.node.openTagString(i)+t(i).html()+e.node.closeTagString(i);A=A.replace(/<span id=\"fr-break\"><\\/span>/g,s),t(i).replaceWith(A)}}function E(o){var l=e.markers.insert();if(!l)return!0;for(var f=l.parentNode;f&&!e.node.isElement(f);){if(f.getAttribute(\"contenteditable\")===\"false\")return t(l).replaceWith(t.FE.MARKERS),e.selection.restore(),!1;if(f.getAttribute(\"contenteditable\")===\"true\")break;f=f.parentNode}e.el.normalize();var i=!1;t(l).parentsUntil(e.$el,\"BLOCKQUOTE\").length>0&&(i=!0),t(l).parentsUntil(e.$el,\"TD, TH\").length&&(i=!1),n(l)?X(l)&&!o&&!i?e.cursorLists._endEnter(l):m(l,o,i):r(l)?X(l)&&!o&&!i?e.cursorLists._startEnter(l):u(l,o,i):X(l)&&!o&&!i?e.cursorLists._middleEnter(l):V(l,o,i),h(),e.html.fillEmptyBlocks(!0),e.opts.htmlUntouched||(e.html.cleanEmptyTags(),e.clean.lists(),e.spaces.normalizeAroundCursor()),e.selection.restore()}return{enter:E,backspace:F,del:L,isAtEnd:x,isAtStart:O}}})(jQuery);(function(t){t.FE.ENTER_P=0,t.FE.ENTER_DIV=1,t.FE.ENTER_BR=2,t.FE.KEYCODE={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,ARROW_LEFT:37,ARROW_UP:38,ARROW_RIGHT:39,ARROW_DOWN:40,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,FF_SEMICOLON:59,FF_EQUALS:61,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,FF_HYPHEN:173,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,HYPHEN:189,PERIOD:190,SLASH:191,APOSTROPHE:192,TILDE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,IME:229},t.extend(t.FE.DEFAULTS,{enter:t.FE.ENTER_P,multiLine:!0,tabSpaces:0}),t.FE.MODULES.keys=function(e){var n=!1,r=null;function O(C){e.opts.multiLine?(e.helpers.isIOS()||(C.preventDefault(),C.stopPropagation()),e.selection.isCollapsed()||e.selection.remove(),e.cursor.enter()):(C.preventDefault(),C.stopPropagation())}function x(C){C.preventDefault(),C.stopPropagation(),e.opts.multiLine&&(e.selection.isCollapsed()||e.selection.remove(),e.cursor.enter(!0))}function X(){setTimeout(function(){e.events.disableBlur(),e.events.focus()},0)}function Y(C){if(e.selection.isCollapsed())if(e.cursor.backspace(),e.helpers.isIOS()){var G=e.selection.ranges(0);G.deleteContents(),G.insertNode(document.createTextNode(\"\\u200B\"));var W=e.selection.get();W.modify(\"move\",\"forward\",\"character\")}else C.preventDefault(),C.stopPropagation();else C.preventDefault(),C.stopPropagation(),e.selection.remove();e.placeholder.refresh()}function U(C){C.preventDefault(),C.stopPropagation(),e.selection.text()===\"\"?e.cursor.del():e.selection.remove(),e.placeholder.refresh()}function _(C){var G=e.selection.element();if(!e.helpers.isMobile()&&G&&G.tagName==\"A\"){C.preventDefault(),C.stopPropagation(),e.selection.isCollapsed()||e.selection.remove();var W=e.markers.insert();if(W){var N=W.previousSibling,I=W.nextSibling;!I&&W.parentNode&&W.parentNode.tagName==\"A\"?(W.parentNode.insertAdjacentHTML(\"afterend\",\"&nbsp;\"+t.FE.MARKERS),W.parentNode.removeChild(W)):(N&&N.nodeType==Node.TEXT_NODE&&N.textContent.length==1&&N.textContent.charCodeAt(0)==160?N.textContent=N.textContent+\" \":W.insertAdjacentHTML(\"beforebegin\",\"&nbsp;\"),W.outerHTML=t.FE.MARKERS),e.selection.restore()}}}function F(){if(e.browser.mozilla&&e.selection.isCollapsed()&&!n){var C=e.selection.ranges(0),G=C.startContainer,W=C.startOffset;G&&G.nodeType==Node.TEXT_NODE&&W<=G.textContent.length&&W>0&&G.textContent.charCodeAt(W-1)==32&&(e.selection.save(),e.spaces.normalize(),e.selection.restore())}}function d(){e.selection.isFull()&&setTimeout(function(){var C=e.html.defaultTag();C?e.$el.html(\"<\"+C+\">\"+t.FE.MARKERS+\"<br/></\"+C+\">\"):e.$el.html(t.FE.MARKERS+\"<br/>\"),e.selection.restore(),e.placeholder.refresh(),e.button.bulkRefresh(),e.undo.saveStep()},0)}function v(C){if(e.opts.tabSpaces>0)if(e.selection.isCollapsed()){e.undo.saveStep(),C.preventDefault(),C.stopPropagation();for(var G=\"\",W=0;W<e.opts.tabSpaces;W++)G+=\"&nbsp;\";e.html.insert(G),e.placeholder.refresh(),e.undo.saveStep()}else C.preventDefault(),C.stopPropagation(),C.shiftKey?e.commands.outdent():e.commands.indent()}function L(){n=!1}function b(){n=!1}function h(){return n}var m;function u(){var C=e.html.defaultTag();C?e.$el.html(\"<\"+C+\">\"+t.FE.MARKERS+\"<br/></\"+C+\">\"):e.$el.html(t.FE.MARKERS+\"<br/>\"),e.selection.restore()}function V(C){var G=e.selection.element();if(G&&[\"INPUT\",\"TEXTAREA\"].indexOf(G.tagName)>=0)return!0;if(C&&S(C.which))return l(),!0;e.events.disableBlur(),r=null;var W=C.which;if(W===16)return!0;if(m=W,W===t.FE.KEYCODE.IME)return n=!0,!0;n=!1;var N=s(W)&&!i(C)&&!C.altKey,I=W==t.FE.KEYCODE.BACKSPACE||W==t.FE.KEYCODE.DELETE,H=C.shiftKey&&(W===33||W===34||W===35||W===36);if((!H&&e.selection.isFull()&&!e.opts.keepFormatOnDelete&&!e.placeholder.isVisible()||I&&e.placeholder.isVisible()&&e.opts.keepFormatOnDelete)&&(N||I)&&(u(),!s(W)))return C.preventDefault(),!0;W==t.FE.KEYCODE.ENTER?C.shiftKey?x(C):O(C):W===t.FE.KEYCODE.BACKSPACE&&(C.metaKey||C.ctrlKey)?X():W==t.FE.KEYCODE.BACKSPACE&&!i(C)&&!C.altKey?e.placeholder.isVisible()?(e.opts.keepFormatOnDelete||u(),C.preventDefault(),C.stopPropagation()):Y(C):W==t.FE.KEYCODE.DELETE&&!i(C)&&!C.altKey&&!C.shiftKey?e.placeholder.isVisible()?(e.opts.keepFormatOnDelete||u(),C.preventDefault(),C.stopPropagation()):U(C):W==t.FE.KEYCODE.SPACE?_(C):W==t.FE.KEYCODE.TAB?v(C):!i(C)&&s(C.which)&&!e.selection.isCollapsed()&&!C.ctrlKey&&!C.altKey&&e.selection.remove(),e.events.enableBlur()}function E(C){for(var G=e.doc.createTreeWalker(C,NodeFilter.SHOW_TEXT,e.node.filter(function(N){return/\\u200B/gi.test(N.textContent)}),!1);G.nextNode();){var W=G.currentNode;W.textContent=W.textContent.replace(/\\u200B/gi,\"\")}}function o(){if(!e.$wp)return!0;var C;!e.opts.height&&!e.opts.heightMax?(C=e.position.getBoundingRect().top,e.opts.toolbarBottom&&(C+=e.opts.toolbarStickyOffset),e.opts.iframe&&(C+=e.$iframe.offset().top,C-=e.helpers.scrollTop()),C+=e.opts.toolbarStickyOffset,C>e.o_win.innerHeight-20&&t(e.o_win).scrollTop(C+e.helpers.scrollTop()-e.o_win.innerHeight+20),C=e.position.getBoundingRect().top,e.opts.toolbarBottom||(C-=e.opts.toolbarStickyOffset),e.opts.iframe&&(C+=e.$iframe.offset().top,C-=e.helpers.scrollTop()),C<e.$tb.height()+20&&t(e.o_win).scrollTop(C+e.helpers.scrollTop()-e.$tb.height()-20)):(C=e.position.getBoundingRect().top,e.opts.iframe&&(C+=e.$iframe.offset().top),C>e.$wp.offset().top-e.helpers.scrollTop()+e.$wp.height()-20&&e.$wp.scrollTop(C+e.$wp.scrollTop()-(e.$wp.height()+e.$wp.offset().top)+e.helpers.scrollTop()+20))}function l(){var C=function(N){if(!N)return!1;var I=N.innerHTML;return I=I.replace(/<span[^>]*? class\\s*=\\s*[\"']?fr-marker[\"']?[^>]+>\\u200b<\\/span>/gi,\"\"),!!(I&&/\\u200B/.test(I)&&I.replace(/\\u200B/gi,\"\").length>0)},G=function(N){var I=/[\\u3041-\\u3096\\u30A0-\\u30FF\\u4E00-\\u9FFF\\u3130-\\u318F\\uAC00-\\uD7AF]/gi;return!e.helpers.isIOS()||((N.textContent||\"\").match(I)||[]).length===0},W=e.selection.element();C(W)&&!e.node.hasClass(W,\"fr-marker\")&&W.tagName!=\"IFRAME\"&&G(W)&&(e.selection.save(),E(W),e.selection.restore())}function f(C){var G=e.selection.element();if(G&&[\"INPUT\",\"TEXTAREA\"].indexOf(G.tagName)>=0||(C&&C.which===0&&m&&(C.which=m),e.helpers.isAndroid()&&e.browser.mozilla))return!0;if(n)return!1;if(C&&e.helpers.isIOS()&&C.which==t.FE.KEYCODE.ENTER&&e.doc.execCommand(\"undo\"),!e.selection.isCollapsed()||C&&(C.which===t.FE.KEYCODE.META||C.which==t.FE.KEYCODE.CTRL)||C&&S(C.which))return!0;if(C&&!e.helpers.isIOS()&&(C.which==t.FE.KEYCODE.ENTER||C.which==t.FE.KEYCODE.BACKSPACE||C.which>=37&&C.which<=40&&!e.browser.msie))try{o()}catch{}l()}function i(C){if(navigator.userAgent.indexOf(\"Mac OS X\")!=-1){if(C.metaKey&&!C.altKey)return!0}else if(C.ctrlKey&&!C.altKey)return!0;return!1}function S(C){if(C>=t.FE.KEYCODE.ARROW_LEFT&&C<=t.FE.KEYCODE.ARROW_DOWN)return!0}function s(C){if(C>=t.FE.KEYCODE.ZERO&&C<=t.FE.KEYCODE.NINE||C>=t.FE.KEYCODE.NUM_ZERO&&C<=t.FE.KEYCODE.NUM_MULTIPLY||C>=t.FE.KEYCODE.A&&C<=t.FE.KEYCODE.Z||e.browser.webkit&&C===0)return!0;switch(C){case t.FE.KEYCODE.SPACE:case t.FE.KEYCODE.QUESTION_MARK:case t.FE.KEYCODE.NUM_PLUS:case t.FE.KEYCODE.NUM_MINUS:case t.FE.KEYCODE.NUM_PERIOD:case t.FE.KEYCODE.NUM_DIVISION:case t.FE.KEYCODE.SEMICOLON:case t.FE.KEYCODE.FF_SEMICOLON:case t.FE.KEYCODE.DASH:case t.FE.KEYCODE.EQUALS:case t.FE.KEYCODE.FF_EQUALS:case t.FE.KEYCODE.COMMA:case t.FE.KEYCODE.PERIOD:case t.FE.KEYCODE.SLASH:case t.FE.KEYCODE.APOSTROPHE:case t.FE.KEYCODE.SINGLE_QUOTE:case t.FE.KEYCODE.OPEN_SQUARE_BRACKET:case t.FE.KEYCODE.BACKSLASH:case t.FE.KEYCODE.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}var p,M;function a(C){var G=C.which;if(i(C)||G>=37&&G<=40||!s(G)&&G!=t.FE.KEYCODE.DELETE&&G!=t.FE.KEYCODE.BACKSPACE&&G!=t.FE.KEYCODE.ENTER&&G!=t.FE.KEYCODE.IME)return!0;p||(M=e.snapshot.get(),e.undo.canDo()||e.undo.saveStep()),clearTimeout(p),p=setTimeout(function(){p=null,e.undo.saveStep()},Math.max(250,e.opts.typingTimer))}function y(C){var G=C.which;if(i(C)||G>=37&&G<=40)return!0;M&&p?(e.undo.saveStep(M),M=null):(typeof G>\"u\"||G===0)&&!M&&!p&&e.undo.saveStep()}function c(){p&&(clearTimeout(p),e.undo.saveStep(),M=null)}function k(C){var G=C.which;return i(C)||G==t.FE.KEYCODE.F5}function A(C){if(C&&C.tagName==\"BR\")return!1;try{return(C.textContent||\"\").length===0&&C.querySelector&&!C.querySelector(\":scope > br\")||C.childNodes&&C.childNodes.length==1&&C.childNodes[0].getAttribute&&(C.childNodes[0].getAttribute(\"contenteditable\")==\"false\"||e.node.hasClass(C.childNodes[0],\"fr-img-caption\"))}catch{return!1}}function Q(C){var G=e.el.childNodes,W=e.html.defaultTag();if(C.target&&C.target!==e.el||G.length===0)return!0;e.$el.outerHeight()-C.offsetY<=10?A(G[G.length-1])&&(W?e.$el.append(\"<\"+W+\">\"+t.FE.MARKERS+\"<br></\"+W+\">\"):e.$el.append(t.FE.MARKERS+\"<br>\"),e.selection.restore(),o()):C.offsetY<=10&&A(G[0])&&(W?e.$el.prepend(\"<\"+W+\">\"+t.FE.MARKERS+\"<br></\"+W+\">\"):e.$el.prepend(t.FE.MARKERS+\"<br>\"),e.selection.restore(),o())}function z(){p&&clearTimeout(p)}function w(){e.events.on(\"keydown\",a),e.events.on(\"input\",F),e.events.on(\"mousedown\",b),e.events.on(\"keyup input\",y),e.events.on(\"keypress\",L),e.events.on(\"keydown\",V),e.events.on(\"keyup\",f),e.events.on(\"destroy\",z),e.events.on(\"html.inserted\",f),e.events.on(\"cut\",d),e.opts.multiLine&&e.events.on(\"click\",Q)}return{_init:w,ctrlKey:i,isCharacter:s,isArrow:S,forceUndo:c,isIME:h,isBrowserAction:k,positionCaret:o}}})(jQuery);(function(t){t.FE.MODULES.accessibility=function(e){var n=!0;function r(A){if(!(!A||!A.length||e.$el.find('[contenteditable=\"true\"]').is(\":focus\"))){!A.data(\"blur-event-set\")&&!A.parents(\".fr-popup\").length&&(e.events.$on(A,\"blur\",function(){var z=A.parents(\".fr-toolbar, .fr-popup\").data(\"instance\")||e;z.events.blurActive()&&!e.core.hasFocus()&&z.events.trigger(\"blur\"),setTimeout(function(){z.events.enableBlur()},100)},!0),A.data(\"blur-event-set\",!0));var Q=A.parents(\".fr-toolbar, .fr-popup\").data(\"instance\")||e;Q.events.disableBlur(),A.focus(),e.shared.$f_el=A}}function O(A,Q){var z=Q?\"last\":\"first\",w=A.find(\"button:visible:not(.fr-disabled), .fr-group span.fr-command:visible\")[z]();if(w.length)return r(w),!0}function x(A){return A.is(\"input, textarea, select\")&&Y(),e.events.disableBlur(),setTimeout(function(){A.focus()},0),!0}function X(A,Q){var z=A.find(\"input, textarea, button, select\").filter(\":visible\").not(\":disabled\").filter(Q?\":last\":\":first\");if(z.length)return x(z);if(e.shared.with_kb){var w=A.find(\".fr-active-item:visible:first\");if(w.length)return x(w);var C=A.find(\"[tabIndex]:visible:first\");if(C.length)return x(C)}}function Y(){e.$el.find(\".fr-marker\").length===0&&e.core.hasFocus()&&e.selection.save()}function U(){e.$el.find(\".fr-marker\").length&&(e.events.disableBlur(),e.selection.restore(),e.events.enableBlur())}function _(A){var Q=A.children().not(\".fr-buttons\");!Q.data(\"mouseenter-event-set\")&&!e.browser.msie&&(e.events.$on(Q,\"mouseenter\",\"[tabIndex]\",function(z){var w=A.data(\"instance\")||e;if(!n){z.stopPropagation(),z.preventDefault();return}var C=Q.find(\":focus:first\");C.length&&!C.is(\"input, button, textarea, select\")&&(w.events.disableBlur(),C.blur(),w.events.disableBlur(),w.events.focus())}),Q.data(\"mouseenter-event-set\",!0)),!X(Q)&&e.shared.with_kb&&O(A.find(\".fr-buttons\"))}function F(A){e.core.hasFocus()||(e.events.disableBlur(),e.events.focus()),e.accessibility.saveSelection(),e.events.disableBlur(),e.$el.blur(),e.selection.clear(),e.events.disableBlur(),e.shared.with_kb?A.find(\".fr-command[tabIndex], [tabIndex]\").first().focus():A.find(\"[tabIndex]:first\").focus()}function d(){var A=e.popups.areVisible();if(A){var Q=A.find(\".fr-buttons\");return Q.find(\"button:focus, .fr-group span:focus\").length?!O(A.data(\"instance\").$tb):!O(Q)}return!O(e.$tb)}function v(){var A=null;return e.shared.$f_el.is(\".fr-dropdown.fr-active\")?A=e.shared.$f_el:e.shared.$f_el.closest(\".fr-dropdown-menu\").prev().is(\".fr-dropdown.fr-active\")&&(A=e.shared.$f_el.closest(\".fr-dropdown-menu\").prev()),A}function L(A,Q,z){if(e.shared.$f_el){var w=v();w&&(e.button.click(w),e.shared.$f_el=w);var C=A.find(\"button:visible:not(.fr-disabled), .fr-group span.fr-command:visible\"),G=C.index(e.shared.$f_el);if(G===0&&!z||G==C.length-1&&z){var W;if(Q){if(A.parent().is(\".fr-popup\")){var N=A.parent().children().not(\".fr-buttons\");W=!X(N,!z)}W===!1&&(e.shared.$f_el=null)}(!Q||W!==!1)&&O(A,!z)}else r(t(C.get(G+(z?1:-1))));return!1}}function b(A,Q){return L(A,Q,!0)}function h(A,Q){return L(A,Q)}function m(A){if(e.shared.$f_el){var Q;if(e.shared.$f_el.is(\".fr-dropdown.fr-active\"))return A?Q=e.shared.$f_el.next().find(\".fr-command:not(.fr-disabled)\").first():Q=e.shared.$f_el.next().find(\".fr-command:not(.fr-disabled)\").last(),r(Q),!1;if(e.shared.$f_el.is(\"a.fr-command\"))return A?Q=e.shared.$f_el.closest(\"li\").nextAll(\":visible:first\").find(\".fr-command:not(.fr-disabled)\").first():Q=e.shared.$f_el.closest(\"li\").prevAll(\":visible:first\").find(\".fr-command:not(.fr-disabled)\").first(),Q.length||(A?Q=e.shared.$f_el.closest(\".fr-dropdown-menu\").find(\".fr-command:not(.fr-disabled)\").first():Q=e.shared.$f_el.closest(\".fr-dropdown-menu\").find(\".fr-command:not(.fr-disabled)\").last()),r(Q),!1}}function u(){return e.shared.$f_el&&e.shared.$f_el.is(\".fr-dropdown:not(.fr-active)\")?E():m(!0)}function V(){return m()}function E(){if(e.shared.$f_el){if(e.shared.$f_el.hasClass(\"fr-dropdown\"))e.button.click(e.shared.$f_el);else if(e.shared.$f_el.is(\"button.fr-back\")){e.opts.toolbarInline&&(e.events.disableBlur(),e.events.focus());var A=e.popups.areVisible(e);A&&(e.shared.with_kb=!1),e.button.click(e.shared.$f_el),p(A)}else{if(e.events.disableBlur(),e.button.click(e.shared.$f_el),e.shared.$f_el.attr(\"data-popup\")){var Q=e.popups.areVisible(e);Q&&Q.data(\"popup-button\",e.shared.$f_el)}else if(e.shared.$f_el.attr(\"data-modal\")){var z=e.modals.areVisible(e);z&&z.data(\"modal-button\",e.shared.$f_el)}e.shared.$f_el=null}return!1}}function o(){e.shared.$f_el&&(e.events.disableBlur(),e.shared.$f_el.blur(),e.shared.$f_el=null),e.events.trigger(\"toolbar.focusEditor\")!==!1&&(e.events.disableBlur(),e.browser.msie||e.$el.focus(),e.events.focus())}function l(A){if(e.shared.$f_el){var Q=v();return Q?(e.button.click(Q),r(Q)):A.parent().find(\".fr-back:visible\").length?(e.shared.with_kb=!1,e.opts.toolbarInline&&(e.events.disableBlur(),e.events.focus()),e.button.exec(A.parent().find(\".fr-back:visible:first\")),p(A.parent())):e.shared.$f_el.is(\"button, .fr-group span\")&&(A.parent().is(\".fr-popup\")?(e.accessibility.restoreSelection(),e.shared.$f_el=null,e.events.trigger(\"toolbar.esc\")!==!1&&(e.popups.hide(A.parent()),e.opts.toolbarInline&&e.toolbar.showInline(null,!0),p(A.parent()))):o()),!1}}function f(A,Q){var z=navigator.userAgent.indexOf(\"Mac OS X\")!=-1?A.metaKey:A.ctrlKey,w=A.which,C=!1;return w==t.FE.KEYCODE.TAB&&!z&&!A.shiftKey&&!A.altKey?C=b(Q,!0):w==t.FE.KEYCODE.ARROW_RIGHT&&!z&&!A.shiftKey&&!A.altKey?C=b(Q):w==t.FE.KEYCODE.TAB&&!z&&A.shiftKey&&!A.altKey?C=h(Q,!0):w==t.FE.KEYCODE.ARROW_LEFT&&!z&&!A.shiftKey&&!A.altKey?C=h(Q):w==t.FE.KEYCODE.ARROW_UP&&!z&&!A.shiftKey&&!A.altKey?C=V():w==t.FE.KEYCODE.ARROW_DOWN&&!z&&!A.shiftKey&&!A.altKey?C=u():(w==t.FE.KEYCODE.ENTER||w==t.FE.KEYCODE.SPACE)&&!z&&!A.shiftKey&&!A.altKey?C=E():w==t.FE.KEYCODE.ESC&&!z&&!A.shiftKey&&!A.altKey?C=l(Q):w==t.FE.KEYCODE.F10&&!z&&!A.shiftKey&&A.altKey&&(C=d()),!e.shared.$f_el&&C===void 0&&(C=!0),!C&&e.keys.isBrowserAction(A)&&(C=!0),C?!0:(A.preventDefault(),A.stopPropagation(),!1)}function i(A){!A||!A.length||(e.events.$on(A,\"keydown\",function(Q){if(!t(Q.target).is(\"a.fr-command, button.fr-command, .fr-group span.fr-command\"))return!0;var z=A.parents(\".fr-popup\").data(\"instance\")||A.data(\"instance\")||e;e.shared.with_kb=!0;var w=z.accessibility.exec(Q,A);return e.shared.with_kb=!1,w},!0),e.browser.msie||e.events.$on(A,\"mouseenter\",\"[tabIndex]\",function(Q){var z=A.parents(\".fr-popup\").data(\"instance\")||A.data(\"instance\")||e;if(n){var w=t(Q.currentTarget);z.shared.$f_el&&z.shared.$f_el.not(w)&&z.accessibility.focusEditor()}else{Q.stopPropagation(),Q.preventDefault();return}},!0))}function S(A){var Q=e.popups.get(A),z=s(A);i(Q.find(\".fr-buttons\")),e.events.$on(Q,\"mouseenter\",\"tabIndex\",z._tiMouseenter,!0),e.events.$on(Q.children().not(\".fr-buttons\"),\"keydown\",\"[tabIndex]\",z._tiKeydown,!0),e.popups.onHide(A,function(){var w=Q.data(\"instance\")||e;w.accessibility.restoreSelection()}),e.popups.onShow(A,function(){n=!1,setTimeout(function(){n=!0},0)})}function s(A){var Q=e.popups.get(A);return{_tiKeydown:function(z){var w=Q.data(\"instance\")||e;if(w.events.trigger(\"popup.tab\",[z])===!1)return!1;var C=z.which,G=Q.find(\":focus:first\");if(t.FE.KEYCODE.TAB==C){z.preventDefault();var W=Q.children().not(\".fr-buttons\"),N=W.find(\"input, textarea, button, select\").filter(\":visible\").not(\".fr-no-touch input, .fr-no-touch textarea, .fr-no-touch button, .fr-no-touch select, :disabled\").toArray(),I=N.indexOf(this)+(z.shiftKey?-1:1);if(0<=I&&I<N.length)return w.events.disableBlur(),t(N[I]).focus(),z.stopPropagation(),!1;var H=Q.find(\".fr-buttons\");if(H.length&&O(H,!!z.shiftKey)||X(W))return z.stopPropagation(),!1}else if(t.FE.KEYCODE.ENTER==C&&z.target&&z.target.tagName!==\"TEXTAREA\"){var J=null;Q.find(\".fr-submit:visible\").length>0?J=Q.find(\".fr-submit:visible:first\"):Q.find(\".fr-dismiss:visible\").length&&(J=Q.find(\".fr-dismiss:visible:first\")),J&&(z.preventDefault(),z.stopPropagation(),w.events.disableBlur(),w.button.exec(J))}else{if(t.FE.KEYCODE.ESC==C)return z.preventDefault(),z.stopPropagation(),w.accessibility.restoreSelection(),w.popups.isVisible(A)&&Q.find(\".fr-back:visible\").length?(w.opts.toolbarInline&&(w.events.disableBlur(),w.events.focus()),w.button.exec(Q.find(\".fr-back:visible:first\")),p(Q)):w.popups.isVisible(A)&&Q.find(\".fr-dismiss:visible\").length?w.button.exec(Q.find(\".fr-dismiss:visible:first\")):(w.popups.hide(A),w.opts.toolbarInline&&w.toolbar.showInline(null,!0),p(Q)),!1;if(t.FE.KEYCODE.SPACE==C&&(G.is(\".fr-submit\")||G.is(\".fr-dismiss\")))return z.preventDefault(),z.stopPropagation(),w.events.disableBlur(),w.button.exec(G),!0;if(w.keys.isBrowserAction(z)){z.stopPropagation();return}if(G.is(\"input[type=text], textarea\")){z.stopPropagation();return}if(t.FE.KEYCODE.SPACE==C&&(G.is(\".fr-link-attr\")||G.is(\"input[type=file]\"))){z.stopPropagation();return}return z.stopPropagation(),z.preventDefault(),!1}},_tiMouseenter:function(){var z=Q.data(\"instance\")||e;y(z)}}}function p(A){var Q=A.data(\"popup-button\");Q&&setTimeout(function(){r(Q),A.data(\"popup-button\",null)},0)}function M(A){var Q=A.data(\"modal-button\");Q&&setTimeout(function(){r(Q),A.data(\"modal-button\",null)},0)}function a(){return e.shared.$f_el!=null}function y(A){var Q=e.popups.areVisible(A);Q&&Q.data(\"popup-button\",null)}function c(A){var Q=navigator.userAgent.indexOf(\"Mac OS X\")!=-1?A.metaKey:A.ctrlKey,z=A.which;if(z==t.FE.KEYCODE.F10&&!Q&&!A.shiftKey&&A.altKey){e.shared.with_kb=!0;var w=e.popups.areVisible(e),C=!1;return w&&(C=X(w.children().not(\".fr-buttons\"))),C||d(),e.shared.with_kb=!1,A.preventDefault(),A.stopPropagation(),!1}return!0}function k(){e.$wp?e.events.on(\"keydown\",c,!0):e.events.$on(e.$win,\"keydown\",c,!0),e.events.on(\"mousedown\",function(A){y(e),e.shared.$f_el&&(e.accessibility.restoreSelection(),A.stopPropagation(),e.events.disableBlur(),e.shared.$f_el=null)},!0),e.events.on(\"blur\",function(){e.shared.$f_el=null,y(e)},!0)}return{_init:k,registerPopup:S,registerToolbar:i,focusToolbarElement:r,focusToolbar:O,focusContent:X,focusPopup:_,focusModal:F,focusEditor:o,focusPopupButton:p,focusModalButton:M,hasFocus:a,exec:f,saveSelection:Y,restoreSelection:U}}})(jQuery);(function(t){t.FE.MODULES.format=function(e){function n(E,o){var l=\"<\"+E;for(var f in o)o.hasOwnProperty(f)&&(l+=\" \"+f+'=\"'+o[f]+'\"');return l+=\">\",l}function r(E){return\"</\"+E+\">\"}function O(E,o){var l=E;for(var f in o)o.hasOwnProperty(f)&&(f==\"id\"?l+=\"#\"+o[f]:f==\"class\"?l+=\".\"+o[f]:l+=\"[\"+f+'=\"'+o[f]+'\"]');return l}function x(E,o){return!E||E.nodeType!=Node.ELEMENT_NODE?!1:(E.matches||E.matchesSelector||E.msMatchesSelector||E.mozMatchesSelector||E.webkitMatchesSelector||E.oMatchesSelector).call(E,o)}function X(E,o,l){if(E){for(;E.nodeType===Node.COMMENT_NODE;)E=E.nextSibling;if(E){if(e.node.isBlock(E)&&E.tagName!==\"HR\")return X(E.firstChild,o,l),!1;for(var f=t(n(o,l)).insertBefore(E),i=E;i&&!t(i).is(\".fr-marker\")&&t(i).find(\".fr-marker\").length===0&&i.tagName!=\"UL\"&&i.tagName!=\"OL\";){var S=i;if(e.node.isBlock(i)&&E.tagName!==\"HR\")return X(i.firstChild,o,l),!1;i=i.nextSibling,f.append(S)}if(i)(t(i).find(\".fr-marker\").length||i.tagName==\"UL\"||i.tagName==\"OL\")&&X(i.firstChild,o,l);else{for(var s=f.get(0).parentNode;s&&!s.nextSibling&&!e.node.isElement(s);)s=s.parentNode;if(s){var p=s.nextSibling;p&&(e.node.isBlock(p)?p.tagName===\"HR\"?X(p.nextSibling,o,l):X(p.firstChild,o,l):X(p,o,l))}}f.is(\":empty\")&&f.remove()}}}function Y(E,o){var l;if(typeof o>\"u\"&&(o={}),o.style&&delete o.style,e.selection.isCollapsed()){e.markers.insert();var f=e.$el.find(\".fr-marker\");f.replaceWith(n(E,o)+t.FE.INVISIBLE_SPACE+t.FE.MARKERS+r(E)),e.selection.restore()}else{e.selection.save();var i=e.$el.find('.fr-marker[data-type=\"true\"]').get(0).nextSibling;X(i,E,o);var S;do for(S=e.$el.find(O(E,o)+\" > \"+O(E,o)),l=0;l<S.length;l++)S[l].outerHTML=S[l].innerHTML;while(S.length);e.el.normalize();var s=e.el.querySelectorAll(\".fr-marker\");for(l=0;l<s.length;l++){var p=t(s[l]);p.data(\"type\")===!0?x(p.get(0).nextSibling,O(E,o))&&p.next().prepend(p):x(p.get(0).previousSibling,O(E,o))&&p.prev().append(p)}e.selection.restore()}}function U(E,o,l,f){if(!f){var i=!1;if(E.data(\"type\")===!0)for(;e.node.isFirstSibling(E.get(0))&&!E.parent().is(e.$el)&&!E.parent().is(\"ol\")&&!E.parent().is(\"ul\");)E.parent().before(E),i=!0;else if(E.data(\"type\")===!1)for(;e.node.isLastSibling(E.get(0))&&!E.parent().is(e.$el)&&!E.parent().is(\"ol\")&&!E.parent().is(\"ul\");)E.parent().after(E),i=!0;if(i)return!0}if(E.parents(o).length||typeof o>\"u\"){var S=\"\",s=\"\",p=E.parent();if(p.is(e.$el)||e.node.isBlock(p.get(0)))return!1;for(;!e.node.isBlock(p.parent().get(0))&&(typeof o>\"u\"||typeof o<\"u\"&&!x(p.get(0),O(o,l)));)S=S+e.node.closeTagString(p.get(0)),s=e.node.openTagString(p.get(0))+s,p=p.parent();var M=E.get(0).outerHTML;E.replaceWith('<span id=\"mark\"></span>');var a=p.html().replace(/<span id=\"mark\"><\\/span>/,S+e.node.closeTagString(p.get(0))+s+M+S+e.node.openTagString(p.get(0))+s);return p.replaceWith(e.node.openTagString(p.get(0))+a+e.node.closeTagString(p.get(0))),!0}return!1}function _(E,o,l,f){for(var i=e.node.contents(E.get(0)),S=0;S<i.length;S++){var s=i[S];if(e.node.hasClass(s,\"fr-marker\"))o=(o+1)%2;else if(o)if(t(s).find(\".fr-marker\").length>0)o=_(t(s),o,l,f);else{for(var p=t(s).find(l||\"*:not(br)\"),M=p.length-1;M>=0;M--){var a=p[M];!e.node.isBlock(a)&&!e.node.isVoid(a)&&(typeof l>\"u\"||x(a,O(l,f)))?e.node.hasClass(a,\"fr-clone\")||(a.outerHTML=a.innerHTML):e.node.isBlock(a)&&typeof l>\"u\"&&s.tagName!=\"TABLE\"&&e.node.clearAttributes(a)}typeof l>\"u\"&&s.nodeType==Node.ELEMENT_NODE&&!e.node.isVoid(s)||x(s,O(l,f))?e.node.isBlock(s)?typeof l>\"u\"&&s.nodeType==Node.ELEMENT_NODE&&e.node.isBlock(s)&&s.tagName!=\"TABLE\"&&e.node.clearAttributes(s):e.node.hasClass(s,\"fr-clone\")||(s.outerHTML=s.innerHTML):typeof l>\"u\"&&s.nodeType==Node.ELEMENT_NODE&&e.node.isBlock(s)&&s.tagName!=\"TABLE\"&&e.node.clearAttributes(s)}else t(s).find(\".fr-marker\").length>0&&(o=_(t(s),o,l,f))}return o}function F(E,o){typeof o>\"u\"&&(o={}),o.style&&delete o.style;var l=e.selection.isCollapsed();e.selection.save();for(var f=!0;f;){f=!1;for(var i=e.$el.find(\".fr-marker\"),S=0;S<i.length;S++){var s=t(i[S]),p=null;if(!s.attr(\"data-cloned\")&&!l&&(p=s.clone().removeClass(\"fr-marker\").addClass(\"fr-clone\"),s.data(\"type\")===!0?s.attr(\"data-cloned\",!0).after(p):s.attr(\"data-cloned\",!0).before(p)),U(s,E,o,l)){f=!0;break}}}_(e.$el,0,E,o),l||(e.$el.find(\".fr-marker\").remove(),e.$el.find(\".fr-clone\").removeClass(\"fr-clone\").addClass(\"fr-marker\")),l&&e.$el.find(\".fr-marker\").before(t.FE.INVISIBLE_SPACE).after(t.FE.INVISIBLE_SPACE),e.html.cleanEmptyTags(),e.el.normalize(),e.selection.restore()}function d(E,o){V(E,o)?F(E,o):Y(E,o)}function v(E,o){var l=t(E);l.css(o,\"\"),l.attr(\"style\")===\"\"&&l.replaceWith(l.html())}function L(E,o){return t(E).attr(\"style\").indexOf(o+\":\")===0||t(E).attr(\"style\").indexOf(\";\"+o+\":\")>=0||t(E).attr(\"style\").indexOf(\"; \"+o+\":\")>=0}function b(E,o){var l,f,i=null;if(e.selection.isCollapsed()){e.markers.insert(),f=e.$el.find(\".fr-marker\");var S=f.parent();if(e.node.openTagString(S.get(0))=='<span style=\"'+E+\": \"+S.css(E)+';\">'){if(e.node.isEmpty(S.get(0)))i=t('<span style=\"'+E+\": \"+o+';\">'+t.FE.INVISIBLE_SPACE+t.FE.MARKERS+\"</span>\"),S.replaceWith(i);else{var s={};s[\"style*\"]=E+\":\",U(f,\"span\",s,!0),f=e.$el.find(\".fr-marker\"),o?(i=t('<span style=\"'+E+\": \"+o+';\">'+t.FE.INVISIBLE_SPACE+t.FE.MARKERS+\"</span>\"),f.replaceWith(i)):f.replaceWith(t.FE.INVISIBLE_SPACE+t.FE.MARKERS)}e.html.cleanEmptyTags()}else e.node.isEmpty(S.get(0))&&S.is(\"span\")?(f.replaceWith(t.FE.MARKERS),S.css(E,o)):(i=t('<span style=\"'+E+\": \"+o+';\">'+t.FE.INVISIBLE_SPACE+t.FE.MARKERS+\"</span>\"),f.replaceWith(i));i&&h(i,E,o)}else{if(e.selection.save(),o==null||E==\"color\"&&e.$el.find(\".fr-marker\").parents(\"u, a\").length>0){var p=e.$el.find(\".fr-marker\");for(l=0;l<p.length;l++)if(f=t(p[l]),f.data(\"type\")===!0)for(;e.node.isFirstSibling(f.get(0))&&!f.parent().is(e.$el)&&!e.node.isElement(f.parent().get(0))&&!e.node.isBlock(f.parent().get(0));)f.parent().before(f);else for(;e.node.isLastSibling(f.get(0))&&!f.parent().is(e.$el)&&!e.node.isElement(f.parent().get(0))&&!e.node.isBlock(f.parent().get(0));)f.parent().after(f)}var M=e.$el.find('.fr-marker[data-type=\"true\"]').get(0).nextSibling,a={class:\"fr-unprocessed\"};for(o&&(a.style=E+\": \"+o+\";\"),X(M,\"span\",a),e.$el.find(\".fr-marker + .fr-unprocessed\").each(function(){t(this).prepend(t(this).prev())}),e.$el.find(\".fr-unprocessed + .fr-marker\").each(function(){t(this).prev().append(this)}),(o||\"\").match(/\\dem$/)&&e.$el.find(\"span.fr-unprocessed\").removeClass(\"fr-unprocessed\");e.$el.find(\"span.fr-unprocessed\").length>0;){if(i=e.$el.find(\"span.fr-unprocessed:first\").removeClass(\"fr-unprocessed\"),i.parent().get(0).normalize(),i.parent().is(\"span\")&&i.parent().get(0).childNodes.length==1){i.parent().css(E,o);var y=i;i=i.parent(),y.replaceWith(y.html())}var c=i.find(\"span\");for(l=c.length-1;l>=0;l--)v(c[l],E);h(i,E,o)}}m()}function h(E,o,l){var f,i=E.parentsUntil(e.$el,\"span[style]\"),S=[];for(f=i.length-1;f>=0;f--)L(i[f],o)||S.push(i[f]);if(i=i.not(S),i.length){var s=\"\",p=\"\",M=\"\",a=\"\",y=E.get(0);do y=y.parentNode,t(y).addClass(\"fr-split\"),s=s+e.node.closeTagString(y),p=e.node.openTagString(t(y).clone().addClass(\"fr-split\").get(0))+p,i.get(0)!=y&&(M=M+e.node.closeTagString(y),a=e.node.openTagString(t(y).clone().addClass(\"fr-split\").get(0))+a);while(i.get(0)!=y);var c=s+e.node.openTagString(t(i.get(0)).clone().css(o,l||\"\").get(0))+a+E.css(o,\"\").get(0).outerHTML+M+\"</span>\"+p;E.replaceWith('<span id=\"fr-break\"></span>');var k=i.get(0).outerHTML;t(i.get(0)).replaceWith(k.replace(/<span id=\"fr-break\"><\\/span>/g,c))}}function m(){for(var E;e.$el.find(\".fr-split:empty\").length>0;)e.$el.find(\".fr-split:empty\").remove();e.$el.find(\".fr-split\").removeClass(\"fr-split\"),e.$el.find('[style=\"\"]').removeAttr(\"style\"),e.$el.find('[class=\"\"]').removeAttr(\"class\"),e.html.cleanEmptyTags(),t(e.$el.find(\"span\").get().reverse()).each(function(){(!this.attributes||this.attributes.length===0)&&t(this).replaceWith(this.innerHTML)}),e.el.normalize();var o=e.$el.find(\"span[style] + span[style]\");for(E=0;E<o.length;E++){var l=t(o[E]),f=t(o[E]).prev();l.get(0).previousSibling==f.get(0)&&e.node.openTagString(l.get(0))==e.node.openTagString(f.get(0))&&(l.prepend(f.html()),f.remove())}e.$el.find(\"span[style] span[style]\").each(function(){if(t(this).attr(\"style\").indexOf(\"font-size\")>=0){var i=t(this).parents(\"span[style]\");i.attr(\"style\").indexOf(\"background-color\")>=0&&(t(this).attr(\"style\",t(this).attr(\"style\")+\";\"+i.attr(\"style\")),U(t(this),\"span[style]\",{},!1))}}),e.el.normalize(),e.selection.restore()}function u(E){b(E,null)}function V(E,o){typeof o>\"u\"&&(o={}),o.style&&delete o.style;var l=e.selection.ranges(0),f=l.startContainer;if(f.nodeType==Node.ELEMENT_NODE&&f.childNodes.length>0&&f.childNodes[l.startOffset]&&(f=f.childNodes[l.startOffset]),!l.collapsed&&f.nodeType==Node.TEXT_NODE&&l.startOffset==(f.textContent||\"\").length){for(;!e.node.isBlock(f.parentNode)&&!f.nextSibling;)f=f.parentNode;f.nextSibling&&(f=f.nextSibling)}for(var i=f;i&&i.nodeType==Node.ELEMENT_NODE&&!x(i,O(E,o));)i=i.firstChild;if(i&&i.nodeType==Node.ELEMENT_NODE&&x(i,O(E,o)))return!0;var S=f;for(S&&S.nodeType!=Node.ELEMENT_NODE&&(S=S.parentNode);S&&S.nodeType==Node.ELEMENT_NODE&&S!=e.el&&!x(S,O(E,o));)S=S.parentNode;return!!(S&&S.nodeType==Node.ELEMENT_NODE&&S!=e.el&&x(S,O(E,o)))}return{is:V,toggle:d,apply:Y,remove:F,applyStyle:b,removeStyle:u}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{indentMargin:20}),t.FE.COMMANDS={bold:{title:\"Bold\",toggle:!0,refresh:function(e){var n=this.format.is(\"strong\");e.toggleClass(\"fr-active\",n).attr(\"aria-pressed\",n)}},italic:{title:\"Italic\",toggle:!0,refresh:function(e){var n=this.format.is(\"em\");e.toggleClass(\"fr-active\",n).attr(\"aria-pressed\",n)}},underline:{title:\"Underline\",toggle:!0,refresh:function(e){var n=this.format.is(\"u\");e.toggleClass(\"fr-active\",n).attr(\"aria-pressed\",n)}},strikeThrough:{title:\"Strikethrough\",toggle:!0,refresh:function(e){var n=this.format.is(\"s\");e.toggleClass(\"fr-active\",n).attr(\"aria-pressed\",n)}},subscript:{title:\"Subscript\",toggle:!0,refresh:function(e){var n=this.format.is(\"sub\");e.toggleClass(\"fr-active\",n).attr(\"aria-pressed\",n)}},superscript:{title:\"Superscript\",toggle:!0,refresh:function(e){var n=this.format.is(\"sup\");e.toggleClass(\"fr-active\",n).attr(\"aria-pressed\",n)}},outdent:{title:\"Decrease Indent\"},indent:{title:\"Increase Indent\"},undo:{title:\"Undo\",undo:!1,forcedRefresh:!0,disabled:!0},redo:{title:\"Redo\",undo:!1,forcedRefresh:!0,disabled:!0},insertHR:{title:\"Insert Horizontal Line\"},clearFormatting:{title:\"Clear Formatting\"},selectAll:{title:\"Select All\",undo:!1}},t.FE.RegisterCommand=function(e,n){t.FE.COMMANDS[e]=n},t.FE.MODULES.commands=function(e){function n(d){return e.html.defaultTag()&&(d=\"<\"+e.html.defaultTag()+\">\"+d+\"</\"+e.html.defaultTag()+\">\"),d}var r={bold:function(){x(\"bold\",\"strong\")},subscript:function(){e.format.is(\"sup\")&&e.format.remove(\"sup\"),x(\"subscript\",\"sub\")},superscript:function(){e.format.is(\"sub\")&&e.format.remove(\"sub\"),x(\"superscript\",\"sup\")},italic:function(){x(\"italic\",\"em\")},strikeThrough:function(){x(\"strikeThrough\",\"s\")},underline:function(){x(\"underline\",\"u\")},undo:function(){e.undo.run()},redo:function(){e.undo.redo()},indent:function(){X(1)},outdent:function(){X(-1)},show:function(){e.opts.toolbarInline&&e.toolbar.showInline(null,!0)},insertHR:function(){e.selection.remove();var d=\"\";e.core.isEmpty()&&(d=\"<br>\",d=n(d)),e.html.insert('<hr id=\"fr-just\">'+d);var v=e.$el.find(\"hr#fr-just\");v.removeAttr(\"id\");var L;if(v.next().length===0){var b=e.html.defaultTag();b?v.after(t(\"<\"+b+\">\").append(\"<br>\")):v.after(\"<br>\")}v.prev().is(\"hr\")?L=e.selection.setAfter(v.get(0),!1):v.next().is(\"hr\")?L=e.selection.setBefore(v.get(0),!1):e.selection.setAfter(v.get(0),!1)||e.selection.setBefore(v.get(0),!1),!L&&typeof L<\"u\"&&(d=t.FE.MARKERS+\"<br>\",d=n(d),v.after(d)),e.selection.restore()},clearFormatting:function(){e.format.remove()},selectAll:function(){e.doc.execCommand(\"selectAll\",!1,!1)}};function O(d,v){if(e.events.trigger(\"commands.before\",t.merge([d],v||[]))!==!1){var L=t.FE.COMMANDS[d]&&t.FE.COMMANDS[d].callback||r[d],b=!0,h=!1;t.FE.COMMANDS[d]&&(typeof t.FE.COMMANDS[d].focus<\"u\"&&(b=t.FE.COMMANDS[d].focus),typeof t.FE.COMMANDS[d].accessibilityFocus<\"u\"&&(h=t.FE.COMMANDS[d].accessibilityFocus)),(!e.core.hasFocus()&&b&&!e.popups.areVisible()||!e.core.hasFocus()&&h&&e.accessibility.hasFocus())&&e.events.focus(!0),t.FE.COMMANDS[d]&&t.FE.COMMANDS[d].undo!==!1&&(e.$el.find(\".fr-marker\").length&&(e.events.disableBlur(),e.selection.restore()),e.undo.saveStep()),L&&L.apply(e,t.merge([d],v||[])),e.events.trigger(\"commands.after\",t.merge([d],v||[])),t.FE.COMMANDS[d]&&t.FE.COMMANDS[d].undo!==!1&&e.undo.saveStep()}}function x(d,v){e.format.toggle(v)}function X(d){e.selection.save(),e.html.wrap(!0,!0,!0,!0),e.selection.restore();for(var v=e.selection.blocks(),L=0;L<v.length;L++)if(v[L].tagName!=\"LI\"&&v[L].parentNode.tagName!=\"LI\"){var b=t(v[L]),h=e.opts.direction==\"rtl\"||b.css(\"direction\")==\"rtl\"?\"margin-right\":\"margin-left\",m=e.helpers.getPX(b.css(h));if(b.width()<2*e.opts.indentMargin&&d>0)continue;b.css(h,Math.max(m+d*e.opts.indentMargin,0)||\"\"),b.removeClass(\"fr-temp-div\")}e.selection.save(),e.html.unwrap(),e.selection.restore()}function Y(d){return function(){O(d)}}var U={};for(var _ in r)r.hasOwnProperty(_)&&(U[_]=Y(_));function F(){e.events.on(\"keydown\",function(d){var v=e.selection.element();if(v&&v.tagName==\"HR\"&&!e.keys.isArrow(d.which))return d.preventDefault(),!1}),e.events.on(\"keyup\",function(d){var v=e.selection.element();if(v&&v.tagName==\"HR\"){if(d.which==t.FE.KEYCODE.ARROW_LEFT||d.which==t.FE.KEYCODE.ARROW_UP){if(v.previousSibling)return e.node.isBlock(v.previousSibling)?e.selection.setAtEnd(v.previousSibling):t(v).before(t.FE.MARKERS),e.selection.restore(),!1}else if((d.which==t.FE.KEYCODE.ARROW_RIGHT||d.which==t.FE.KEYCODE.ARROW_DOWN)&&v.nextSibling)return e.node.isBlock(v.nextSibling)?e.selection.setAtStart(v.nextSibling):t(v).after(t.FE.MARKERS),e.selection.restore(),!1}}),e.events.on(\"mousedown\",function(d){if(d.target&&d.target.tagName==\"HR\")return d.preventDefault(),d.stopPropagation(),!1}),e.events.on(\"mouseup\",function(){var d=e.selection.element(),v=e.selection.endElement();d==v&&d&&d.tagName==\"HR\"&&(d.nextSibling&&(e.node.isBlock(d.nextSibling)?e.selection.setAtStart(d.nextSibling):t(d).after(t.FE.MARKERS)),e.selection.restore())})}return t.extend(U,{exec:O,_init:F})}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{pastePlain:!1,pasteDeniedTags:[\"colgroup\",\"col\",\"meta\"],pasteDeniedAttrs:[\"class\",\"id\",\"style\"],pasteAllowedStyleProps:[\".*\"],pasteAllowLocalImages:!1}),t.FE.MODULES.paste=function(e){var n,r,O,x,X;function Y(a,y){try{e.win.localStorage.setItem(\"fr-copied-html\",a),e.win.localStorage.setItem(\"fr-copied-text\",y)}catch{}}function U(a){var y=e.html.getSelected();Y(y,t(\"<div>\").html(y).text()),a.type==\"cut\"&&(e.undo.saveStep(),setTimeout(function(){e.selection.save(),e.html.wrap(),e.selection.restore(),e.events.focus(),e.undo.saveStep()},0))}var _=!1;function F(a){if(e.edit.isDisabled()||_)return!1;if(a.originalEvent&&(a=a.originalEvent),e.events.trigger(\"paste.before\",[a])===!1)return a.preventDefault(),!1;if(n=e.$win.scrollTop(),a&&a.clipboardData&&a.clipboardData.getData){var y=\"\",c=a.clipboardData.types;if(e.helpers.isArray(c))for(var k=0;k<c.length;k++)y+=c[k]+\";\";else y=c;if(r=\"\",/text\\/rtf/.test(y)&&(O=a.clipboardData.getData(\"text/rtf\")),/text\\/html/.test(y)&&!e.browser.safari?r=a.clipboardData.getData(\"text/html\"):/text\\/rtf/.test(y)&&e.browser.safari?r=O:/public.rtf/.test(y)&&e.browser.safari&&(r=a.clipboardData.getData(\"text/rtf\")),r!==\"\")return h(),a.preventDefault&&(a.stopPropagation(),a.preventDefault()),!1;r=null}return v(),!1}function d(a){if(a.originalEvent&&(a=a.originalEvent),a&&a.dataTransfer&&a.dataTransfer.getData){var y=\"\",c=a.dataTransfer.types;if(e.helpers.isArray(c))for(var k=0;k<c.length;k++)y+=c[k]+\";\";else y=c;if(r=\"\",/text\\/rtf/.test(y)&&(O=a.dataTransfer.getData(\"text/rtf\")),/text\\/html/.test(y)?r=a.dataTransfer.getData(\"text/html\"):/text\\/rtf/.test(y)&&e.browser.safari?r=O:/text\\/plain/.test(y)&&!this.browser.mozilla&&(r=e.html.escapeEntities(a.dataTransfer.getData(\"text/plain\")).replace(/\\n/g,\"<br>\")),r!==\"\"){e.keys.forceUndo(),X=e.snapshot.get(),e.selection.save(),e.$el.find(\".fr-marker\").removeClass(\"fr-marker\").addClass(\"fr-marker-helper\");var A=e.markers.insertAtPoint(a);if(e.$el.find(\".fr-marker\").removeClass(\"fr-marker\").addClass(\"fr-marker-placeholder\"),e.$el.find(\".fr-marker-helper\").addClass(\"fr-marker\").removeClass(\"fr-marker-helper\"),e.selection.restore(),e.selection.remove(),e.$el.find(\".fr-marker-placeholder\").addClass(\"fr-marker\").removeClass(\"fr-marker-placeholder\"),A!==!1){var Q=e.el.querySelector(\".fr-marker\");return t(Q).replaceWith(t.FE.MARKERS),e.selection.restore(),h(),a.preventDefault&&(a.stopPropagation(),a.preventDefault()),!1}}else r=null}}function v(){e.selection.save(),e.events.disableBlur(),r=null,x?(x.html(\"\"),e.browser.edge&&e.opts.iframe&&e.$el.append(x)):(x=t('<div contenteditable=\"true\" style=\"position: fixed; top: 0; left: -9999px; height: 100%; width: 0; word-break: break-all; overflow:hidden; z-index: 2147483647; line-height: 140%; -moz-user-select: text; -webkit-user-select: text; -ms-user-select: text; user-select: text;\" tabIndex=\"-1\"></div>'),e.browser.webkit?(x.css(\"top\",e.$sc.scrollTop()),e.$el.after(x)):e.browser.edge&&e.opts.iframe?e.$el.append(x):e.$box.after(x),e.events.on(\"destroy\",function(){x.remove()})),e.helpers.isIOS()&&e.$sc&&e.$sc.overflow(\"hidden\"),x.focus(),e.helpers.isIOS()&&e.$sc&&e.$sc.overflow(\"hidden\",\"\"),e.win.setTimeout(h,1)}function L(a){var y;a=a.replace(/<p(.*?)class=\"?'?MsoListParagraph\"?'? ([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<ul><li>$3</li></ul>\"),a=a.replace(/<p(.*?)class=\"?'?NumberedText\"?'? ([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<ol><li>$3</li></ol>\"),a=a.replace(/<p(.*?)class=\"?'?MsoListParagraphCxSpFirst\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<ul><li$3>$5</li>\"),a=a.replace(/<p(.*?)class=\"?'?NumberedTextCxSpFirst\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<ol><li$3>$5</li>\"),a=a.replace(/<p(.*?)class=\"?'?MsoListParagraphCxSpMiddle\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li>\"),a=a.replace(/<p(.*?)class=\"?'?NumberedTextCxSpMiddle\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li>\"),a=a.replace(/<p(.*?)class=\"?'?MsoListBullet\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li>\"),a=a.replace(/<p(.*?)class=\"?'?MsoListParagraphCxSpLast\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li></ul>\"),a=a.replace(/<p(.*?)class=\"?'?NumberedTextCxSpLast\"?'?([\\s\\S]*?)(level\\d)?([\\s\\S]*?)>([\\s\\S]*?)<\\/p>/gi,\"<li$3>$5</li></ol>\"),a=a.replace(/<span([^<]*?)style=\"?'?mso-list:Ignore\"?'?([\\s\\S]*?)>([\\s\\S]*?)<span/gi,\"<span><span\"),a=a.replace(/<!--\\[if \\!supportLists\\]-->([\\s\\S]*?)<!--\\[endif\\]-->/gi,\"\"),a=a.replace(/<!\\[if \\!supportLists\\]>([\\s\\S]*?)<!\\[endif\\]>/gi,\"\"),a=a.replace(/(\\n|\\r| class=(\")?Mso[a-zA-Z0-9]+(\")?)/gi,\" \"),a=a.replace(/<!--[\\s\\S]*?-->/gi,\"\"),a=a.replace(/<(\\/)*(meta|link|span|\\\\?xml:|st1:|o:|font)(.*?)>/gi,\"\");var c=[\"style\",\"script\",\"applet\",\"embed\",\"noframes\",\"noscript\"];for(y=0;y<c.length;y++){var k=new RegExp(\"<\"+c[y]+\".*?\"+c[y]+\"(.*?)>\",\"gi\");a=a.replace(k,\"\")}a=a.replace(/&nbsp;/gi,\" \"),a=a.replace(/<td([^>]*)><\\/td>/g,\"<td$1><br></td>\"),a=a.replace(/<th([^>]*)><\\/th>/g,\"<th$1><br></th>\");var A;do A=a,a=a.replace(/<[^\\/>][^>]*><\\/[^>]+>/gi,\"\");while(a!=A);a=a.replace(/<lilevel([^1])([^>]*)>/gi,'<li data-indent=\"true\"$2>'),a=a.replace(/<lilevel1([^>]*)>/gi,\"<li$1>\"),a=e.clean.html(a,e.opts.pasteDeniedTags,e.opts.pasteDeniedAttrs),a=a.replace(/<a>(.[^<]+)<\\/a>/gi,\"$1\"),a=a.replace(/<br> */g,\"<br>\");var Q=e.o_doc.createElement(\"div\");Q.innerHTML=a;var z=Q.querySelectorAll(\"li[data-indent]\");for(y=0;y<z.length;y++){var w=z[y],C=w.previousElementSibling;if(C&&C.tagName==\"LI\"){var G=C.querySelector(\":scope > ul, :scope > ol\");G||(G=document.createElement(\"ul\"),C.appendChild(G)),G.appendChild(w)}else w.removeAttribute(\"data-indent\")}return e.html.cleanBlankSpaces(Q),a=Q.innerHTML,a}function b(a){var y=null,c,k=e.doc.createElement(\"div\");k.innerHTML=a;var A=k.querySelectorAll(\"p, div, h1, h2, h3, h4, h5, h6, pre, blockquote\");for(c=0;c<A.length;c++)y=A[c],y.outerHTML=\"<\"+(e.html.defaultTag()||\"DIV\")+\">\"+y.innerHTML+\"</\"+(e.html.defaultTag()||\"DIV\")+\">\";for(A=k.querySelectorAll(\"*:not(\"+\"p, div, h1, h2, h3, h4, h5, h6, pre, blockquote, ul, ol, li, table, tbody, thead, tr, td, br, img\".split(\",\").join(\"):not(\")+\")\"),c=A.length-1;c>=0;c--)y=A[c],y.outerHTML=y.innerHTML;var Q=function(z){for(var w=e.node.contents(z),C=0;C<w.length;C++)w[C].nodeType!=Node.TEXT_NODE&&w[C].nodeType!=Node.ELEMENT_NODE?w[C].parentNode.removeChild(w[C]):Q(w[C])};return Q(k),k.innerHTML}function h(){e.browser.edge&&e.opts.iframe&&e.$box.after(x),X||(e.keys.forceUndo(),X=e.snapshot.get()),r||(r=x.get(0).innerHTML,e.selection.restore(),e.events.enableBlur());var a=r.match(/(class=\\\"?Mso|class=\\'?Mso|class=\"?Xl|class='?Xl|class=Xl|style=\\\"[^\\\"]*\\bmso\\-|style=\\'[^\\']*\\bmso\\-|w:WordDocument)/gi),y=e.events.chainTrigger(\"paste.beforeCleanup\",r);y&&typeof y==\"string\"&&(r=y),(!a||a&&e.events.trigger(\"paste.wordPaste\",[r])!==!1)&&E(r,a)}function m(a){var y=null;try{y=e.win.localStorage.getItem(\"fr-copied-text\")}catch{}return!!(y&&t(\"<div>\").html(a).text().replace(/\\u00A0/gi,\" \").replace(/\\r|\\n/gi,\"\")==y.replace(/\\u00A0/gi,\" \").replace(/\\r|\\n/gi,\"\"))}function u(){var a=null;try{a=e.win.localStorage.getItem(\"fr-dragged-content-text\")}catch{}return!!(a&&t(\"<div>\").html(r).text().replace(/\\u00A0/gi,\" \").replace(/\\r|\\n/gi,\"\")==a.replace(/\\u00A0/gi,\" \").replace(/\\r|\\n/gi,\"\"))}function V(a){for(var y=\"\",c=0;c++<a;)y+=\"&nbsp;\";return y}function E(a,y,c){var k=null,A=null,Q;if(a.toLowerCase().indexOf(\"<body\")>=0){var z=\"\";a.indexOf(\"<style\")>=0&&(z=a.replace(/[.\\s\\S\\w\\W<>]*(<style[^>]*>[\\s]*[.\\s\\S\\w\\W<>]*[\\s]*<\\/style>)[.\\s\\S\\w\\W<>]*/gi,\"$1\")),a=z+a.replace(/[.\\s\\S\\w\\W<>]*<body[^>]*>[\\s]*([.\\s\\S\\w\\W<>]*)[\\s]*<\\/body>[.\\s\\S\\w\\W<>]*/gi,\"$1\");var w=0,C=\"\";a.replace(/<pre.*?>([\\s\\S]*?)<\\/pre>/ig,function(he,ve,me){me>w&&(C+=a.substring(w,me).replace(/ \\n/g,\" \").replace(/\\n /g,\" \").replace(/([^>])\\n([^<])/g,\"$1 $2\")),C+=he,w=me+he.length}),a.length>w+1&&(C+=a.substring(w,a.length).replace(/ \\n/g,\" \").replace(/\\n /g,\" \").replace(/([^>])\\n([^<])/g,\"$1 $2\")),a=C}var G=!1;a.indexOf('id=\"docs-internal-guid')>=0&&(a=a.replace(/^[\\w\\W\\s\\S]* id=\"docs-internal-guid[^>]*>([\\w\\W\\s\\S]*)<\\/b>[\\w\\W\\s\\S]*$/g,\"$1\"),G=!0),a.indexOf('content=\"Sheets\"')>=0&&(a=a.replace(/width:0px;/g,\"\"));var W=!1,N=!1;if(!y&&(W=m(a),N=u(a),W&&(a=e.win.localStorage.getItem(\"fr-copied-html\")),N&&(W=!0,a=e.win.localStorage.getItem(\"fr-dragged-content-html\")),!W)){var I=e.opts.htmlAllowedStyleProps;e.opts.htmlAllowedStyleProps=e.opts.pasteAllowedStyleProps,e.opts.htmlAllowComments=!1,a=a.replace(/<span class=\"Apple-tab-span\">\\s*<\\/span>/g,V(e.opts.tabSpaces||4)),a=a.replace(/<span class=\"Apple-tab-span\" style=\"white-space:pre\">(\\t*)<\\/span>/g,function(he,ve){return V(ve.length*(e.opts.tabSpaces||4))}),a=a.replace(/\\t/g,V(e.opts.tabSpaces||4)),a=e.clean.html(a,e.opts.pasteDeniedTags,e.opts.pasteDeniedAttrs),e.opts.htmlAllowedStyleProps=I,e.opts.htmlAllowComments=!0,a=i(a),a=a.replace(/\\r/g,\"\"),a=a.replace(/^ */g,\"\").replace(/ *$/g,\"\")}y&&(!e.wordPaste||!c)&&(a=a.replace(/^\\n*/g,\"\").replace(/^ /g,\"\"),a.indexOf(\"<colgroup>\")===0&&(a=\"<table>\"+a+\"</table>\"),a=L(a),a=i(a)),e.opts.pastePlain&&!W&&(a=b(a));var H=e.events.chainTrigger(\"paste.afterCleanup\",a);if(typeof H==\"string\"&&(a=H),a!==\"\"){var J=e.o_doc.createElement(\"div\");J.innerHTML=a,a.indexOf(\"<body>\")>=0?(e.html.cleanBlankSpaces(J),e.spaces.normalize(J,!0)):e.spaces.normalize(J);var Z=J.getElementsByTagName(\"span\");for(Q=Z.length-1;Q>=0;Q--){var se=Z[Q];se.attributes.length===0&&(se.outerHTML=se.innerHTML)}var g=e.selection.element(),R=!1;if(g&&t(g).parentsUntil(e.el,\"ul, ol\").length&&(R=!0),R){var $=J.children;$.length==1&&[\"OL\",\"UL\"].indexOf($[0].tagName)>=0&&($[0].outerHTML=$[0].innerHTML)}if(!G){var ee=J.getElementsByTagName(\"br\");for(Q=ee.length-1;Q>=0;Q--){var ce=ee[Q];e.node.isBlock(ce.previousSibling)&&ce.parentNode.removeChild(ce)}}if(e.opts.enter==t.FE.ENTER_BR)for(k=J.querySelectorAll(\"p, div\"),Q=k.length-1;Q>=0;Q--)A=k[Q],A.attributes.length===0&&(A.outerHTML=A.innerHTML+(A.nextSibling&&!e.node.isEmpty(A)?\"<br>\":\"\"));else if(e.opts.enter==t.FE.ENTER_DIV)for(k=J.getElementsByTagName(\"p\"),Q=k.length-1;Q>=0;Q--)A=k[Q],A.attributes.length===0&&(A.outerHTML=\"<div>\"+A.innerHTML+\"</div>\");else e.opts.enter==t.FE.ENTER_P&&J.childNodes.length==1&&J.childNodes[0].tagName==\"P\"&&J.childNodes[0].attributes.length===0&&(J.childNodes[0].outerHTML=J.childNodes[0].innerHTML);a=J.innerHTML,W&&(a=S(a)),e.html.insert(a,!0)}o(),e.undo.saveStep(X),X=null,e.undo.saveStep()}function o(){e.events.trigger(\"paste.after\")}function l(){return O}function f(a){for(var y=a.length-1;y>=0;y--)a[y].attributes&&a[y].attributes.length&&a.splice(y,1);return a}function i(a){var y,c=e.o_doc.createElement(\"div\");c.innerHTML=a;for(var k=f(Array.prototype.slice.call(c.querySelectorAll(\":scope > div:not([style]), td > div:not([style]), th > div:not([style]), li > div:not([style])\")));k.length;){var A=k[k.length-1];if(e.html.defaultTag()&&e.html.defaultTag()!=\"div\")A.querySelector(e.html.blockTagsQuery())?A.outerHTML=A.innerHTML:A.outerHTML=\"<\"+e.html.defaultTag()+\">\"+A.innerHTML+\"</\"+e.html.defaultTag()+\">\";else{var Q=A.querySelectorAll(\"*\");!Q.length||Q[Q.length-1].tagName!==\"BR\"&&A.innerText.length===0?A.outerHTML=A.innerHTML+(A.nextSibling?\"<br>\":\"\"):Q.length&&Q[Q.length-1].tagName===\"BR\"&&!Q[Q.length-1].nextSibling?A.outerHTML=A.innerHTML:A.outerHTML=A.innerHTML+(A.nextSibling?\"<br>\":\"\")}k=f(Array.prototype.slice.call(c.querySelectorAll(\":scope > div:not([style]), td > div:not([style]), th > div:not([style]), li > div:not([style])\")))}for(k=f(Array.prototype.slice.call(c.querySelectorAll(\"div:not([style])\")));k.length;){for(y=0;y<k.length;y++){var z=k[y],w=z.innerHTML.replace(/\\u0009/gi,\"\").trim();try{z.outerHTML=w}catch{}}k=f(Array.prototype.slice.call(c.querySelectorAll(\"div:not([style])\")))}return c.innerHTML}function S(a){var y,c=e.o_doc.createElement(\"div\");c.innerHTML=a;for(var k=c.querySelectorAll(\"*:empty:not(td):not(th):not(tr):not(iframe):not(svg):not(\"+t.FE.VOID_ELEMENTS.join(\"):not(\")+\"):not(\"+e.opts.htmlAllowedEmptyTags.join(\"):not(\")+\")\");k.length;){for(y=0;y<k.length;y++)k[y].parentNode.removeChild(k[y]);k=c.querySelectorAll(\"*:empty:not(td):not(th):not(tr):not(iframe):not(svg):not(\"+t.FE.VOID_ELEMENTS.join(\"):not(\")+\"):not(\"+e.opts.htmlAllowedEmptyTags.join(\"):not(\")+\")\")}return c.innerHTML}function s(a){if(a.originalEvent&&a.originalEvent.target&&a.originalEvent.target.nodeType==Node.TEXT_NODE)try{e.win.localStorage.setItem(\"fr-dragged-content-html\",a.originalEvent.dataTransfer.getData(\"text/html\")),e.win.localStorage.setItem(\"fr-dragged-content-text\",a.originalEvent.dataTransfer.getData(\"text/plain\"))}catch{}}function p(){e.el.addEventListener(\"copy\",U),e.el.addEventListener(\"cut\",U),e.el.addEventListener(\"paste\",F,{capture:!0}),e.events.on(\"drop\",d),e.browser.msie&&e.browser.version<11&&(e.events.on(\"mouseup\",function(a){a.button==2&&(setTimeout(function(){_=!1},50),_=!0)},!0),e.events.on(\"beforepaste\",F)),e.events.on(\"dragstart\",s,!0),e.events.on(\"destroy\",M)}function M(){e.el.removeEventListener(\"copy\",U),e.el.removeEventListener(\"cut\",U),e.el.removeEventListener(\"paste\",F)}return{_init:p,cleanEmptyTagsAndDivs:i,getRtfClipboard:l,saveCopiedText:Y,clean:E}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{shortcutsEnabled:[],shortcutsHint:!0}),t.FE.SHORTCUTS_MAP={},t.FE.RegisterShortcut=function(e,n,r,O,x,X){t.FE.SHORTCUTS_MAP[(x?\"^\":\"\")+(X?\"@\":\"\")+e]={cmd:n,val:r,letter:O,shift:x,option:X},t.FE.DEFAULTS.shortcutsEnabled.push(n)},t.FE.RegisterShortcut(t.FE.KEYCODE.E,\"show\",null,\"E\",!1,!1),t.FE.RegisterShortcut(t.FE.KEYCODE.B,\"bold\",null,\"B\",!1,!1),t.FE.RegisterShortcut(t.FE.KEYCODE.I,\"italic\",null,\"I\",!1,!1),t.FE.RegisterShortcut(t.FE.KEYCODE.U,\"underline\",null,\"U\",!1,!1),t.FE.RegisterShortcut(t.FE.KEYCODE.S,\"strikeThrough\",null,\"S\",!1,!1),t.FE.RegisterShortcut(t.FE.KEYCODE.CLOSE_SQUARE_BRACKET,\"indent\",null,\"]\",!1,!1),t.FE.RegisterShortcut(t.FE.KEYCODE.OPEN_SQUARE_BRACKET,\"outdent\",null,\"[\",!1,!1),t.FE.RegisterShortcut(t.FE.KEYCODE.Z,\"undo\",null,\"Z\",!1,!1),t.FE.RegisterShortcut(t.FE.KEYCODE.Z,\"redo\",null,\"Z\",!0,!1),t.FE.RegisterShortcut(t.FE.KEYCODE.Y,\"redo\",null,\"Y\",!1,!1),t.FE.MODULES.shortcuts=function(e){var n=null;function r(Y){if(!e.opts.shortcutsHint)return null;if(!n){n={};for(var U in t.FE.SHORTCUTS_MAP)t.FE.SHORTCUTS_MAP.hasOwnProperty(U)&&e.opts.shortcutsEnabled.indexOf(t.FE.SHORTCUTS_MAP[U].cmd)>=0&&(n[t.FE.SHORTCUTS_MAP[U].cmd+\".\"+(t.FE.SHORTCUTS_MAP[U].val||\"\")]={shift:t.FE.SHORTCUTS_MAP[U].shift,option:t.FE.SHORTCUTS_MAP[U].option,letter:t.FE.SHORTCUTS_MAP[U].letter})}var _=n[Y];return _?(e.helpers.isMac()?\"\\u2318\":e.language.translate(\"Ctrl\")+\"+\")+(_.shift?e.helpers.isMac()?\"\\u21E7\":e.language.translate(\"Shift\")+\"+\":\"\")+(_.option?e.helpers.isMac()?\"\\u2325\":e.language.translate(\"Alt\")+\"+\":\"\")+_.letter:null}var O=!1;function x(Y){if(!e.core.hasFocus())return!0;var U=Y.which,_=navigator.userAgent.indexOf(\"Mac OS X\")!=-1?Y.metaKey:Y.ctrlKey;if(Y.type==\"keyup\"&&O&&U!=t.FE.KEYCODE.META)return O=!1,!1;Y.type==\"keydown\"&&(O=!1);var F=(Y.shiftKey?\"^\":\"\")+(Y.altKey?\"@\":\"\")+U;if(_&&t.FE.SHORTCUTS_MAP[F]){var d=t.FE.SHORTCUTS_MAP[F].cmd;if(d&&e.opts.shortcutsEnabled.indexOf(d)>=0){var v=t.FE.SHORTCUTS_MAP[F].val,L;if(d&&!v?L=e.$tb.find('.fr-command[data-cmd=\"'+d+'\"]'):d&&v&&(L=e.$tb.find('.fr-command[data-cmd=\"'+d+'\"][data-param1=\"'+v+'\"]')),L.length)return Y.preventDefault(),Y.stopPropagation(),L.parents(\".fr-toolbar\").data(\"instance\",e),Y.type==\"keydown\"&&(e.button.exec(L),O=!0),!1;if(d&&(e.commands[d]||t.FE.COMMANDS[d]&&t.FE.COMMANDS[d].callback))return Y.preventDefault(),Y.stopPropagation(),Y.type==\"keydown\"&&((e.commands[d]||t.FE.COMMANDS[d].callback)(),O=!0),!1}}}function X(){e.events.on(\"keydown\",x,!0),e.events.on(\"keyup\",x,!0)}return{_init:X,get:r}}})(jQuery);(function(t){t.FE.MODULES.snapshot=function(e){function n(d){for(var v=d.parentNode.childNodes,L=0,b=null,h=0;h<v.length;h++){if(b){var m=v[h].nodeType===Node.TEXT_NODE&&v[h].textContent===\"\",u=b.nodeType===Node.TEXT_NODE&&v[h].nodeType===Node.TEXT_NODE,V=b.nodeType===Node.TEXT_NODE&&b.textContent===\"\";!m&&!u&&!V&&L++}if(v[h]==d)return L;b=v[h]}}function r(d){var v=[];if(!d.parentNode)return[];for(;!e.node.isElement(d);)v.push(n(d)),d=d.parentNode;return v.reverse()}function O(d,v){for(;d&&d.nodeType===Node.TEXT_NODE;){var L=d.previousSibling;L&&L.nodeType==Node.TEXT_NODE&&(v+=L.textContent.length),d=L}return v}function x(d){return{scLoc:r(d.startContainer),scOffset:O(d.startContainer,d.startOffset),ecLoc:r(d.endContainer),ecOffset:O(d.endContainer,d.endOffset)}}function X(){var d={};if(e.events.trigger(\"snapshot.before\"),d.html=(e.$wp?e.$el.html():e.$oel.get(0).outerHTML).replace(/ style=\"\"/g,\"\"),d.ranges=[],e.$wp&&e.selection.inEditor()&&e.core.hasFocus())for(var v=e.selection.ranges(),L=0;L<v.length;L++)d.ranges.push(x(v[L]));return e.events.trigger(\"snapshot.after\",[d]),d}function Y(d){for(var v=e.el,L=0;L<d.length;L++)v=v.childNodes[d[L]];return v}function U(d,v){try{var L=Y(v.scLoc),b=v.scOffset,h=Y(v.ecLoc),m=v.ecOffset,u=e.doc.createRange();u.setStart(L,b),u.setEnd(h,m),d.addRange(u)}catch(V){console.warn(V)}}function _(d){e.$el.html()!=d.html&&(e.opts.htmlExecuteScripts?e.$el.html(d.html):e.el.innerHTML=d.html);var v=e.selection.get();e.selection.clear(),e.events.focus(!0);for(var L=0;L<d.ranges.length;L++)U(v,d.ranges[L])}function F(d,v){return!(d.html!=v.html||e.core.hasFocus()&&JSON.stringify(d.ranges)!=JSON.stringify(v.ranges))}return{get:X,restore:_,equal:F}}})(jQuery);(function(t){t.FE.MODULES.undo=function(e){function n(L){var b=L.which,h=e.keys.ctrlKey(L);h&&(b==90&&L.shiftKey&&L.preventDefault(),b==90&&L.preventDefault())}function r(){return!(e.undo_stack.length===0||e.undo_index<=1)}function O(){return e.undo_index!=e.undo_stack.length}var x=null;function X(L){if(!e.undo_stack||e.undoing||e.el.querySelector(\".fr-marker\"))return!1;typeof L>\"u\"?(L=e.snapshot.get(),(!e.undo_stack[e.undo_index-1]||!e.snapshot.equal(e.undo_stack[e.undo_index-1],L))&&(Y(),e.undo_stack.push(L),e.undo_index++,L.html!=x&&(e.events.trigger(\"contentChanged\"),x=L.html))):(Y(),e.undo_index>0?e.undo_stack[e.undo_index-1]=L:(e.undo_stack.push(L),e.undo_index++))}function Y(){if(!e.undo_stack||e.undoing)return!1;for(;e.undo_stack.length>e.undo_index;)e.undo_stack.pop()}function U(){if(e.undo_index>1){e.undoing=!0;var L=e.undo_stack[--e.undo_index-1];clearTimeout(e._content_changed_timer),e.snapshot.restore(L),x=L.html,e.popups.hideAll(),e.toolbar.enable(),e.events.trigger(\"contentChanged\"),e.events.trigger(\"commands.undo\"),e.undoing=!1}}function _(){if(e.undo_index<e.undo_stack.length){e.undoing=!0;var L=e.undo_stack[e.undo_index++];clearTimeout(e._content_changed_timer),e.snapshot.restore(L),x=L.html,e.popups.hideAll(),e.toolbar.enable(),e.events.trigger(\"contentChanged\"),e.events.trigger(\"commands.redo\"),e.undoing=!1}}function F(){x=(e.$wp?e.$el.html():e.$oel.get(0).outerHTML).replace(/ style=\"\"/g,\"\"),e.undo_index=0,e.undo_stack=[]}function d(){e.undo_stack=[]}function v(){F(),e.events.on(\"initialized\",function(){x=(e.$wp?e.$el.html():e.$oel.get(0).outerHTML).replace(/ style=\"\"/g,\"\")}),e.events.on(\"blur\",function(){e.el.querySelector(\".fr-dragging\")||e.undo.saveStep()}),e.events.on(\"keydown\",n),e.events.on(\"destroy\",d)}return{_init:v,run:U,redo:_,canDo:r,canRedo:O,dropRedo:Y,reset:F,saveStep:X}}})(jQuery);(function(t){t.FE.ICON_TEMPLATES={octobercms:'<i class=\"icon-[NAME]\" aria-hidden=\"true\"></i>',font_awesome:'<i class=\"fa fa-[NAME]\" aria-hidden=\"true\"></i>',text:'<span style=\"text-align:center\">[NAME]</span>',image:\"<img src=[SRC] alt=[ALT] />\",svg:'<svg viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\">[PATH]</svg>',empty:\" \"},t.FE.ICONS={bold:{NAME:\"bold\"},italic:{NAME:\"italic\"},underline:{NAME:\"underline\"},strikeThrough:{NAME:\"strikethrough\"},subscript:{NAME:\"subscript\"},superscript:{NAME:\"superscript\"},color:{NAME:\"tint\"},outdent:{NAME:\"outdent\"},indent:{NAME:\"indent\"},undo:{NAME:\"rotate-left\",FA5NAME:\"undo\"},redo:{NAME:\"rotate-right\",FA5NAME:\"redo\"},insertHR:{NAME:\"minus\"},clearFormatting:{NAME:\"eraser\"},selectAll:{NAME:\"mouse-pointer\"}},t.FE.DefineIconTemplate=function(e,n){t.FE.ICON_TEMPLATES[e]=n},t.FE.DefineIcon=function(e,n){t.FE.ICONS[e]=n},t.extend(t.FE.DEFAULTS,{iconsTemplate:\"octobercms\"}),t.FE.MODULES.icon=function(e){function n(O){var x=null,X=t.FE.ICONS[O];if(typeof X<\"u\"){var Y=X.template||t.FE.ICON_DEFAULT_TEMPLATE||e.opts.iconsTemplate;Y&&Y.apply&&(Y=Y.apply(e)),X.FA5NAME||(X.FA5NAME=X.NAME),Y&&(Y=t.FE.ICON_TEMPLATES[Y])&&(x=Y.replace(/\\[([a-zA-Z0-9]*)\\]/g,function(U,_){return _==\"NAME\"?X[_]||O:X[_]}))}return x||O}function r(O){var x=t.FE.ICONS[O],X=e.opts.iconsTemplate;return typeof x<\"u\"&&(X=x.template||t.FE.ICON_DEFAULT_TEMPLATE||e.opts.iconsTemplate),X}return{create:n,getTemplate:r}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{tooltips:!0}),t.FE.MODULES.tooltip=function(e){function n(){if(e.helpers.isMobile())return!1;e.$tooltip&&e.$tooltip.removeClass(\"fr-visible\").css(\"left\",\"-3000px\").css(\"position\",\"fixed\")}function r(X,Y){if(e.helpers.isMobile()||(X.data(\"title\")||X.data(\"title\",X.attr(\"title\")),!X.data(\"title\")))return!1;e.$tooltip||x(),X.removeAttr(\"title\"),e.$tooltip.text(e.language.translate(X.data(\"title\"))),e.$tooltip.addClass(\"fr-visible\");var U=X.offset().left+(X.outerWidth()-e.$tooltip.outerWidth())/2;U<0&&(U=0),U+e.$tooltip.outerWidth()>t(e.o_win).width()&&(U=t(e.o_win).width()-e.$tooltip.outerWidth()),typeof Y>\"u\"&&(Y=e.opts.toolbarBottom);var _=Y?X.offset().top-e.$tooltip.height():X.offset().top+X.outerHeight();e.$tooltip.css(\"position\",\"\"),e.$tooltip.css(\"left\",U),e.$tooltip.css(\"top\",Math.ceil(_)),t(e.o_doc).find(\"body:first\").css(\"position\")!=\"static\"?(e.$tooltip.css(\"margin-left\",-t(e.o_doc).find(\"body:first\").offset().left),e.$tooltip.css(\"margin-top\",-t(e.o_doc).find(\"body:first\").offset().top)):(e.$tooltip.css(\"margin-left\",\"\"),e.$tooltip.css(\"margin-top\",\"\"))}function O(X,Y,U){e.opts.tooltips&&!e.helpers.isMobile()&&(e.events.$on(X,\"mouseenter\",Y,function(_){!e.node.hasClass(_.currentTarget,\"fr-disabled\")&&!e.edit.isDisabled()&&r(t(_.currentTarget),U)},!0),e.events.$on(X,\"mouseleave \"+e._mousedown+\" \"+e._mouseup,Y,function(){n()},!0))}function x(){e.opts.tooltips&&!e.helpers.isMobile()&&(e.shared.$tooltip?e.$tooltip=e.shared.$tooltip:(e.shared.$tooltip=t('<div class=\"fr-tooltip\"></div>'),e.$tooltip=e.shared.$tooltip,e.opts.theme&&e.$tooltip.addClass(e.opts.theme+\"-theme\"),t(e.o_doc).find(\"body:first\").append(e.$tooltip)),e.events.on(\"shared.destroy\",function(){e.$tooltip.html(\"\").removeData().remove(),e.$tooltip=null},!0))}return{hide:n,to:r,bind:O}}})(jQuery);(function(t){t.FE.MODULES.button=function(e){var n=[];(e.opts.toolbarInline||e.opts.toolbarContainer)&&(e.shared.buttons||(e.shared.buttons=[]),n=e.shared.buttons);var r=[];e.shared.popup_buttons||(e.shared.popup_buttons=[]),r=e.shared.popup_buttons;function O(s,p,M){for(var a=t(),y=0;y<s.length;y++){var c=t(s[y]);if(c.is(p)&&(a=a.add(c)),M&&c.is(\".fr-dropdown\")){var k=c.next().find(p);a=a.add(k)}}return a}function x(s,p){var M=t(),a;if(!s)return M;M=M.add(O(n,s,p)),M=M.add(O(r,s,p));for(a in e.shared.popups)if(e.shared.popups.hasOwnProperty(a)){var y=e.shared.popups[a],c=y.children().find(s);M=M.add(c)}for(a in e.shared.modals)if(e.shared.modals.hasOwnProperty(a)){var k=e.shared.modals[a],A=k.$modal.find(s);M=M.add(A)}return M}function X(s){var p=s.next(),M=e.node.hasClass(s.get(0),\"fr-active\"),a=x(\".fr-dropdown.fr-active\").not(s),y=s.parents(\".fr-toolbar, .fr-popup\").data(\"instance\")||e;if(y.helpers.isIOS()&&!y.el.querySelector(\".fr-marker\")&&(y.selection.save(),y.selection.clear(),y.selection.restore()),!M){var c=s.data(\"cmd\");p.find(\".fr-command\").removeClass(\"fr-active\").attr(\"aria-selected\",!1),t.FE.COMMANDS[c]&&t.FE.COMMANDS[c].refreshOnShow&&t.FE.COMMANDS[c].refreshOnShow.apply(y,[s,p]),p.css(\"left\",s.offset().left-s.parent().offset().left-(e.opts.direction==\"rtl\"?p.width()-s.outerWidth():0)),p.addClass(\"test-height\");var k=p.outerHeight();p.removeClass(\"test-height\"),p.css(\"top\",\"\").css(\"bottom\",\"\"),!e.opts.toolbarBottom&&p.offset().top+s.outerHeight()+k<t(e.o_doc).height()?p.css(\"top\",s.position().top+s.outerHeight()):p.css(\"bottom\",s.parents(\".fr-popup, .fr-toolbar\").first().height()-s.position().top)}s.addClass(\"fr-blink\").toggleClass(\"fr-active\"),s.hasClass(\"fr-options\")&&s.prev().toggleClass(\"fr-expanded\"),s.hasClass(\"fr-active\")?(p.attr(\"aria-hidden\",!1),s.attr(\"aria-expanded\",!0)):(p.attr(\"aria-hidden\",!0),s.attr(\"aria-expanded\",!1)),setTimeout(function(){s.removeClass(\"fr-blink\")},300),p.css(\"margin-left\",\"\"),p.offset().left+p.outerWidth()>e.$sc.offset().left+e.$sc.width()&&p.css(\"margin-left\",-(p.offset().left+p.outerWidth()-e.$sc.offset().left-e.$sc.width())),p.offset().left<e.$sc.offset().left&&e.opts.direction==\"rtl\"&&p.css(\"margin-left\",e.$sc.offset().left),a.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).next().attr(\"aria-hidden\",!0),a.prev(\".fr-expanded\").removeClass(\"fr-expanded\"),a.parent(\".fr-toolbar:not(.fr-inline)\").css(\"zIndex\",\"\"),s.parents(\".fr-popup\").length===0&&!e.opts.toolbarInline&&(e.node.hasClass(s.get(0),\"fr-active\")?e.$tb.css(\"zIndex\",(e.opts.zIndex||1)+4):e.$tb.css(\"zIndex\",\"\"));var A=p.find(\"a.fr-command.fr-active:first\");e.helpers.isMobile()||(A.length?e.accessibility.focusToolbarElement(A):e.accessibility.focusToolbarElement(s))}function Y(s){s.addClass(\"fr-blink\"),setTimeout(function(){s.removeClass(\"fr-blink\")},500);for(var p=s.data(\"cmd\"),M=[];typeof s.data(\"param\"+(M.length+1))<\"u\";)M.push(s.data(\"param\"+(M.length+1)));var a=x(\".fr-dropdown.fr-active\");a.length&&(a.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).next().attr(\"aria-hidden\",!0),a.prev(\".fr-expanded\").removeClass(\"fr-expanded\"),a.parent(\".fr-toolbar:not(.fr-inline)\").css(\"zIndex\",\"\")),s.parents(\".fr-popup, .fr-toolbar\").data(\"instance\").commands.exec(p,M)}function U(s){Y(s)}function _(s){var p=s.parents(\".fr-popup, .fr-toolbar\").data(\"instance\");if(s.parents(\".fr-popup\").length===0&&!s.data(\"popup\")&&p.popups.hideAll(),p.popups.areVisible()&&!p.popups.areVisible(p)){for(var M=0;M<t.FE.INSTANCES.length;M++)t.FE.INSTANCES[M]!=p&&t.FE.INSTANCES[M].popups&&t.FE.INSTANCES[M].popups.areVisible()&&t.FE.INSTANCES[M].$el.find(\".fr-marker\").remove();p.popups.hideAll()}e.node.hasClass(s.get(0),\"fr-dropdown\")?X(s):(U(s),t.FE.COMMANDS[s.data(\"cmd\")]&&t.FE.COMMANDS[s.data(\"cmd\")].refreshAfterCallback!==!1&&p.button.bulkRefresh())}function F(s){var p=t(s.currentTarget);_(p)}function d(s){var p=s.find(\".fr-dropdown.fr-active\");p.length&&(p.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).next().attr(\"aria-hidden\",!0),p.parent(\".fr-toolbar:not(.fr-inline)\").css(\"zIndex\",\"\"),p.prev().removeClass(\"fr-expanded\"))}function v(s){s.preventDefault(),s.stopPropagation()}function L(s){if(s.stopPropagation(),!e.helpers.isMobile())return!1}function b(s,p){e.events.bindClick(s,\".fr-command:not(.fr-disabled)\",F),e.events.$on(s,e._mousedown+\" \"+e._mouseup+\" \"+e._move,\".fr-dropdown-menu\",v,!0),e.events.$on(s,e._mousedown+\" \"+e._mouseup+\" \"+e._move,\".fr-dropdown-menu .fr-dropdown-wrapper\",L,!0);var M=s.get(0).ownerDocument,a=\"defaultView\"in M?M.defaultView:M.parentWindow,y=function(c){(!c||c.type==e._mouseup&&c.target!=t(\"html\").get(0)||c.type==\"keydown\"&&(e.keys.isCharacter(c.which)&&!e.keys.ctrlKey(c)||c.which==t.FE.KEYCODE.ESC))&&d(s)};e.events.$on(t(a),e._mouseup+\" resize keydown\",y,!0),e.opts.iframe&&e.events.$on(e.$win,e._mouseup,y,!0),e.node.hasClass(s.get(0),\"fr-popup\")?t.merge(r,s.find(\".fr-btn\").toArray()):t.merge(n,s.find(\".fr-btn\").toArray()),e.tooltip.bind(s,\".fr-btn, .fr-title\",p)}function h(s,p){var M=\"\";if(p.html)typeof p.html==\"function\"?M+=p.html.call(e):M+=p.html;else{var a=p.options;typeof a==\"function\"&&(a=a()),M+='<ul class=\"fr-dropdown-list\" role=\"presentation\">';for(var y in a)if(a.hasOwnProperty(y)){var c=e.shortcuts.get(s+\".\"+y);c?c='<span class=\"fr-shortcut\">'+c+\"</span>\":c=\"\",M+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"'+(p.type===\"options\"?s.replace(/Options/g,\"\"):s)+'\" data-param1=\"'+y+'\" title=\"'+a[y]+'\">'+e.language.translate(a[y])+\"</a></li>\"}M+=\"</ul>\"}return M}function m(s,p,M){if(p=t.extend(!0,{},p),e.helpers.isMobile()&&p.showOnMobile===!1)return\"\";var a=p.displaySelection;typeof a==\"function\"&&(a=a(e));var y=\"\";if(p.type!==\"options\")if(a){var c=typeof p.defaultSelection==\"function\"?p.defaultSelection(e):p.defaultSelection;y='<span style=\"width:'+(p.displaySelectionWidth||100)+'px\">'+e.language.translate(c||p.title)+\"</span>\"}else y=e.icon.create(p.icon||s),y+='<span class=\"fr-sr-only\">'+(e.language.translate(p.title)||\"\")+\"</span>\";var k=p.popup?' data-popup=\"true\"':\"\",A=p.modal?' data-modal=\"true\"':\"\",Q=e.shortcuts.get(s+\".\");Q?Q=\" (\"+Q+\")\":Q=\"\";var z=s+\"-\"+e.id,w=\"dropdown-menu-\"+z,C='<button id=\"'+z+'\"type=\"button\" tabIndex=\"-1\" role=\"button\"'+(p.toggle?' aria-pressed=\"false\"':\"\")+(p.type==\"dropdown\"||p.type==\"options\"?' aria-controls=\"'+w+'\" aria-expanded=\"false\" aria-haspopup=\"true\"':\"\")+(p.disabled?' aria-disabled=\"true\"':\"\")+' title=\"'+(e.language.translate(p.title)||\"\")+Q+'\" class=\"fr-command fr-btn'+(p.type==\"dropdown\"||p.type==\"options\"?\" fr-dropdown\":\"\")+(p.type==\"options\"?\" fr-options\":\"\")+(\" fr-btn-\"+e.icon.getTemplate(p.icon))+(p.displaySelection?\" fr-selection\":\"\")+(p.back?\" fr-back\":\"\")+(p.disabled?\" fr-disabled\":\"\")+(M?\"\":\" fr-hidden\")+'\" data-cmd=\"'+s+'\"'+k+A+\">\"+y+\"</button>\";if(p.type==\"dropdown\"||p.type==\"options\"){var G='<div id=\"'+w+'\" class=\"fr-dropdown-menu\" role=\"listbox\" aria-labelledby=\"'+z+'\" aria-hidden=\"true\"><div class=\"fr-dropdown-wrapper\" role=\"presentation\"><div class=\"fr-dropdown-content\" role=\"presentation\">';G+=h(s,p),G+=\"</div></div></div>\",C+=G}return p.hasOptions&&p.hasOptions.apply(e)&&(p.type=\"options\",p.hasOptions=!1,C='<div class=\"fr-btn-wrap\">'+C+m(s+\"Options\",p,M)+\"</div>\"),C}function u(s,p){for(var M=\"\",a=0;a<s.length;a++){var y=s[a],c=t.FE.COMMANDS[y];if(!(c&&typeof c.plugin<\"u\"&&e.opts.pluginsEnabled.indexOf(c.plugin)<0))if(c){var k=typeof p<\"u\"?p.indexOf(y)>=0:!0;M+=m(y,c,k)}else y==\"|\"?M+='<div class=\"fr-separator fr-vs\" role=\"separator\" aria-orientation=\"vertical\"></div>':y==\"-\"&&(M+='<div class=\"fr-separator fr-hs\" role=\"separator\" aria-orientation=\"horizontal\"></div>')}return M}function V(s){var p=s.parents(\".fr-popup, .fr-toolbar\").data(\"instance\")||e,M=s.data(\"cmd\"),a;e.node.hasClass(s.get(0),\"fr-dropdown\")?a=s.next():(s.removeClass(\"fr-active\"),s.attr(\"aria-pressed\")&&s.attr(\"aria-pressed\",!1)),t.FE.COMMANDS[M]&&t.FE.COMMANDS[M].refresh?t.FE.COMMANDS[M].refresh.apply(p,[s,a]):e.refresh[M]&&p.refresh[M](s,a)}function E(s){var p=e.$tb&&e.$tb.data(\"instance\")||e;if(e.events.trigger(\"buttons.refresh\")===!1)return!0;setTimeout(function(){for(var M=p.selection.inEditor()&&p.core.hasFocus(),a=0;a<s.length;a++){var y=t(s[a]),c=y.data(\"cmd\");y.parents(\".fr-popup\").length===0?M||t.FE.COMMANDS[c]&&t.FE.COMMANDS[c].forcedRefresh?p.button.refresh(y):e.node.hasClass(y.get(0),\"fr-dropdown\")||(y.removeClass(\"fr-active\"),y.attr(\"aria-pressed\")&&y.attr(\"aria-pressed\",!1)):y.parents(\".fr-popup\").is(\":visible\")&&p.button.refresh(y)}},0)}function o(){E(n),E(r)}function l(){n=[],r=[]}var f=null;function i(){clearTimeout(f),f=setTimeout(o,50)}function S(){e.opts.toolbarInline?e.events.on(\"toolbar.show\",o):(e.events.on(\"mouseup\",i),e.events.on(\"keyup\",i),e.events.on(\"blur\",i),e.events.on(\"focus\",i),e.events.on(\"contentChanged\",i),e.helpers.isMobile()&&e.events.$on(e.$doc,\"selectionchange\",o)),e.events.on(\"shared.destroy\",l)}return{_init:S,buildList:u,bindCommands:b,refresh:V,bulkRefresh:o,exec:Y,click:_,hideActiveDropdowns:d,getButtons:x}}})(jQuery);(function(t){t.FE.MODULES.modals=function(e){e.shared.modals||(e.shared.modals={});var n=e.shared.modals,r;function O(b){return n[b]}function x(b,h){var m='<div tabIndex=\"-1\" class=\"fr-modal'+(e.opts.theme?\" \"+e.opts.theme+\"-theme\":\"\")+'\"><div class=\"fr-modal-wrapper\">',u='<span title=\"'+e.language.translate(\"Cancel\")+'\" class=\"fr-modal-close\">&times;</span>';return m+='<div class=\"fr-modal-head\">'+b+u+\"</div>\",m+='<div tabIndex=\"-1\" class=\"fr-modal-body\">'+h+\"</div>\",m+=\"</div></div>\",t(m)}function X(b,h,m){if(e.shared.$overlay||(e.shared.$overlay=t('<div class=\"fr-overlay\">').appendTo(\"body:first\")),r=e.shared.$overlay,e.opts.theme&&r.addClass(e.opts.theme+\"-theme\"),!n[b]){var u=x(h,m);n[b]={$modal:u,$head:u.find(\".fr-modal-head\"),$body:u.find(\".fr-modal-body\")},e.helpers.isMobile()||u.addClass(\"fr-desktop\"),u.appendTo(\"body:first\"),e.events.$on(u,\"click\",\".fr-modal-close\",function(){_(b)},!0),n[b].$body.css(\"margin-top\",n[b].$head.outerHeight()),e.events.$on(u,\"keydown\",function(V){var E=V.which;return E==t.FE.KEYCODE.ESC?(_(b),e.accessibility.focusModalButton(u),!1):!t(V.target).is(\"input[type=text], textarea\")&&E!=t.FE.KEYCODE.ARROW_UP&&E!=t.FE.KEYCODE.ARROW_DOWN&&!e.keys.isBrowserAction(V)?(V.preventDefault(),V.stopPropagation(),!1):!0},!0),_(b,!0)}return n[b]}function Y(){for(var b in n){var h=n[b];h&&h.$modal&&h.$modal.removeData().remove()}r&&r.removeData().remove(),n={}}function U(b){if(n[b]){var h=n[b].$modal;h.data(\"instance\",e),h.show(),r.show(),t(e.o_doc).find(\"body:first\").addClass(\"prevent-scroll\"),e.helpers.isMobile()&&t(e.o_doc).find(\"body:first\").addClass(\"fr-mobile\"),h.addClass(\"fr-active\"),e.accessibility.focusModal(h)}}function _(b,h){if(n[b]){var m=n[b].$modal,u=m.data(\"instance\")||e;u.events.enableBlur(),m.hide(),r.hide(),t(u.o_doc).find(\"body:first\").removeClass(\"prevent-scroll fr-mobile\"),m.removeClass(\"fr-active\"),h||(u.accessibility.restoreSelection(),u.events.trigger(\"modals.hide\"))}}function F(b){if(n[b]){var h=n[b],m=h.$modal,u=h.$body,V=t(e.o_win).height(),E=m.find(\".fr-modal-wrapper\"),o=E.outerHeight(!0),l=E.height()-(u.outerHeight(!0)-u.height()),f=V-o+l,i=u.get(0).scrollHeight,S=\"auto\";i>f&&(S=f),u.height(S)}}function d(b){var h;if(typeof b==\"string\"){if(!n[b])return;h=n[b].$modal}else h=b;return h&&e.node.hasClass(h,\"fr-active\")&&e.core.sameInstance(h)||!1}function v(b){for(var h in n)if(n.hasOwnProperty(h)&&d(h)&&(typeof b>\"u\"||n[h].$modal.data(\"instance\")==b))return n[h].$modal;return!1}function L(){e.events.on(\"shared.destroy\",Y,!0)}return{_init:L,get:O,create:X,show:U,hide:_,resize:F,isVisible:d,areVisible:v}}})(jQuery);(function(t){t.FE.POPUP_TEMPLATES={\"text.edit\":\"[_EDIT_]\"},t.FE.RegisterTemplate=function(e,n){t.FE.POPUP_TEMPLATES[e]=n},t.FE.MODULES.popups=function(e){e.shared.popups||(e.shared.popups={});var n=e.shared.popups;function r(a,y){y.is(\":visible\")||(y=e.$sc),y.is(n[a].data(\"container\"))||(n[a].data(\"container\",y),y.append(n[a]))}function O(a,y){return this.showEl(a,y,!0)}function x(a,y,c){if(y||(y=e.$el),U(a)||(_()&&e.$el.find(\".fr-marker\").length>0?(e.events.disableBlur(),e.selection.restore()):_()||(e.events.disableBlur(),e.events.focus(),e.events.enableBlur())),h([a]),!n[a])return!1;var k=e.button.getButtons(\".fr-dropdown.fr-active\");k.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).parent(\".fr-toolbar\").css(\"zIndex\",\"\"),k.next().attr(\"aria-hidden\",!0),n[a].data(\"instance\",e),e.$tb&&e.$tb.data(\"instance\",e);var A=U(a);n[a].addClass(\"fr-active\").removeClass(\"fr-hidden\").find(\"input, textarea\").removeAttr(\"disabled\");var Q=n[a].data(\"container\");(function(w,C){C.is(\":visible\")||(C=e.$sc),C.get(0).contains(n[w].get(0))||C.append(n[w])})(a,Q),e.opts.toolbarInline&&Q&&e.$tb&&Q.get(0)==e.$tb.get(0)&&r(a,e.$sc),Q=n[a].data(\"container\"),Q.is(e.$tb)?e.$tb.css(\"zIndex\",(e.opts.zIndex||1)+4):n[a].css(\"zIndex\",(e.opts.zIndex||1)+4),e.opts.toolbarBottom&&Q&&e.$tb&&Q.get(0)==e.$tb.get(0)&&n[a].addClass(\"fr-above\"),n[a].removeClass(\"fr-active\"),i(y,n[a],c),n[a].addClass(\"fr-active\"),A||e.accessibility.focusPopup(n[a]),e.opts.toolbarInline&&e.toolbar.hide(),e.events.trigger(\"popups.show.\"+a),u()}function X(a,y,c,k){if(U(a)||(_()&&e.$el.find(\".fr-marker\").length>0?(e.events.disableBlur(),e.selection.restore()):_()||(e.events.disableBlur(),e.events.focus(),e.events.enableBlur())),h([a]),!n[a])return!1;var A=e.button.getButtons(\".fr-dropdown.fr-active\");A.removeClass(\"fr-active\").attr(\"aria-expanded\",!1).parent(\".fr-toolbar\").css(\"zIndex\",\"\"),A.next().attr(\"aria-hidden\",!0),n[a].data(\"instance\",e),e.$tb&&e.$tb.data(\"instance\",e);var Q=n[a].outerWidth(),z=U(a);n[a].addClass(\"fr-active\").removeClass(\"fr-hidden\").find(\"input, textarea\").removeAttr(\"disabled\");var w=n[a].data(\"container\");(function(G,W){W.is(\":visible\")||(W=e.$sc),W.get(0).contains(n[G].get(0))||W.append(n[G])})(a,w),e.opts.toolbarInline&&w&&e.$tb&&w.get(0)==e.$tb.get(0)&&(r(a,e.$sc),c=e.$tb.offset().top-e.helpers.getPX(e.$tb.css(\"margin-top\")),y=e.$tb.offset().left+e.$tb.outerWidth()/2+(parseFloat(e.$tb.find(\".fr-arrow\").css(\"margin-left\"))||0)+e.$tb.find(\".fr-arrow\").outerWidth()/2,e.node.hasClass(e.$tb.get(0),\"fr-above\")&&c&&(c+=e.$tb.outerHeight()),k=0),w=n[a].data(\"container\"),e.opts.iframe&&!k&&!z&&(y&&(y-=e.$iframe.offset().left),c&&(c-=e.$iframe.offset().top)),w.is(e.$tb)?e.$tb.css(\"zIndex\",(e.opts.zIndex||1)+4):n[a].css(\"zIndex\",(e.opts.zIndex||1)+4),y&&(y=y-Q/2),e.opts.toolbarBottom&&w&&e.$tb&&w.get(0)==e.$tb.get(0)&&(n[a].addClass(\"fr-above\"),c&&(c=c-n[a].outerHeight())),n[a].removeClass(\"fr-active\"),e.position.at(y,c,n[a],k||0),n[a].addClass(\"fr-active\"),z||e.accessibility.focusPopup(n[a]),e.opts.toolbarInline&&e.toolbar.hide(),e.events.trigger(\"popups.show.\"+a),u()}function Y(a,y){e.events.on(\"popups.show.\"+a,y)}function U(a){return n[a]&&e.node.hasClass(n[a],\"fr-active\")&&e.core.sameInstance(n[a])||!1}function _(a){for(var y in n)if(n.hasOwnProperty(y)&&U(y)&&(typeof a>\"u\"||n[y].data(\"instance\")==a))return n[y];return!1}function F(a){var y=null;if(typeof a!=\"string\"?y=a:y=n[a],y&&e.node.hasClass(y,\"fr-active\")){y.removeClass(\"fr-active fr-above\"),e.events.trigger(\"popups.hide.\"+a);let c=y.data(\"popper\");c&&c.destroy(),e.$tb&&(e.opts.zIndex>1?e.$tb.css(\"zIndex\",e.opts.zIndex+1):e.$tb.css(\"zIndex\",\"\")),e.events.disableBlur(),y.find(\"input, textarea, button\").filter(\":focus\").blur(),y.find(\"input, textarea\").attr(\"disabled\",\"disabled\")}}function d(a,y){e.events.on(\"popups.hide.\"+a,y)}function v(a){var y=n[a];if(y&&!y.data(\"inst\"+e.id)){var c=l(a);f(c,a)}return y}function L(a,y){e.events.on(\"popups.refresh.\"+a,y)}function b(a){n[a].data(\"instance\",e),e.events.trigger(\"popups.refresh.\"+a);for(var y=n[a].find(\".fr-command\"),c=0;c<y.length;c++){var k=t(y[c]);k.parents(\".fr-dropdown-menu\").length===0&&e.button.refresh(k)}}function h(a){typeof a>\"u\"&&(a=[]);for(var y in n)n.hasOwnProperty(y)&&a.indexOf(y)<0&&F(y)}e.shared.exit_flag=!1;function m(){e.shared.exit_flag=!0}function u(){e.shared.exit_flag=!1}function V(){return e.shared.exit_flag}function E(a,y){var c=t.FE.POPUP_TEMPLATES[a];if(!c)return null;typeof c==\"function\"&&(c=c.apply(e));for(var k in y)y.hasOwnProperty(k)&&(c=c.replace(\"[_\"+k.toUpperCase()+\"_]\",y[k]));return c}function o(a,y){var c,k,A=E(a,y);return A?(c=t('<div class=\"fr-popup'+(e.helpers.isMobile()?\" fr-mobile\":\" fr-desktop\")+(e.opts.toolbarInline?\" fr-inline\":\"\")+'\"><span class=\"fr-arrow\"></span>'+A+\"</div>\"),t(\".fr-action-buttons button\",c).addClass(\"btn btn-sm btn-secondary\"),t(\".fr-action-buttons button.fr-submit\",c).removeClass(\"btn-secondary\").addClass(\"btn-primary\"),e.opts.theme&&c.addClass(e.opts.theme+\"-theme\"),e.opts.zIndex>1&&(e.opts.editInPopup?c.css(\"z-index\",e.opts.zIndex+2):e.$tb.css(\"z-index\",e.opts.zIndex+2)),e.opts.direction!=\"auto\"&&c.removeClass(\"fr-ltr fr-rtl\").addClass(\"fr-\"+e.opts.direction),c.find(\"input, textarea\").attr(\"dir\",e.opts.direction).attr(\"disabled\",\"disabled\"),k=t(\"body:first\"),k.append(c),c.data(\"container\",k),n[a]=c,e.button.bindCommands(c,!1),c):(c=t('<div class=\"fr-popup fr-empty\"></div>'),k=t(\"body:first\"),k.append(c),c.data(\"container\",k),n[a]=c,c)}function l(a){var y=n[a];return{_windowResize:function(){var c=y.data(\"instance\")||e;!c.helpers.isMobile()&&y.is(\":visible\")&&(c.events.disableBlur(),c.popups.hide(a),c.events.enableBlur())},_inputFocus:function(c){var k=y.data(\"instance\")||e,A=t(c.currentTarget);if(A.is(\"input:file\")&&A.closest(\".fr-layer\").addClass(\"fr-input-focus\"),c.preventDefault(),c.stopPropagation(),setTimeout(function(){k.events.enableBlur()},e.browser.msie?100:0),k.helpers.isMobile()){var Q=t(k.o_win).scrollTop();setTimeout(function(){t(k.o_win).scrollTop(Q)},0)}},_inputBlur:function(c){var k=y.data(\"instance\")||e,A=t(c.currentTarget);A.is(\"input:file\")&&A.closest(\".fr-layer\").removeClass(\"fr-input-focus\"),document.activeElement!=this&&t(this).is(\":visible\")&&(k.events.blurActive()&&k.events.trigger(\"blur\"),k.events.enableBlur())},_editorKeydown:function(c){var k=y.data(\"instance\")||e;!k.keys.ctrlKey(c)&&c.which!=t.FE.KEYCODE.ALT&&c.which!=t.FE.KEYCODE.ESC&&(U(a)&&y.find(\".fr-back:visible\").length?k.button.exec(y.find(\".fr-back:visible:first\")):c.which!=t.FE.KEYCODE.ALT&&k.popups.hide(a))},_preventFocus:function(c){var k=y.data(\"instance\")||e,A=c.originalEvent?c.originalEvent.target||c.originalEvent.originalTarget:null;c.type!=\"mouseup\"&&!t(A).is(\":focus\")&&k.events.disableBlur(),c.type==\"mouseup\"&&!(t(A).hasClass(\"fr-command\")||t(A).parents(\".fr-command\").length>0)&&!t(A).hasClass(\"fr-dropdown-content\")&&e.button.hideActiveDropdowns(y),(e.browser.safari||e.browser.mozilla)&&c.type==\"mousedown\"&&t(A).is(\"input[type=file]\")&&k.events.disableBlur();var Q=\"input, textarea, button, select, label, .fr-command\";if(A&&!t(A).is(Q)&&t(A).parents(Q).length===0)return c.stopPropagation(),!1;A&&t(A).is(Q)&&c.stopPropagation(),u()},_editorMouseup:function(){y.is(\":visible\")&&V()&&y.find(\"input:focus, textarea:focus, button:focus, select:focus\").filter(\":visible\").length>0&&e.events.disableBlur()},_windowMouseup:function(c){if(!e.core.sameInstance(y))return!0;var k=y.data(\"instance\")||e;y.is(\":visible\")&&V()&&(c.stopPropagation(),k.markers.remove(),k.popups.hide(a),u())},_windowKeydown:function(c){if(!e.core.sameInstance(y))return!0;var k=y.data(\"instance\")||e,A=c.which;if(t.FE.KEYCODE.ESC==A){if(k.popups.isVisible(a)&&k.opts.toolbarInline)return c.stopPropagation(),k.popups.isVisible(a)&&(y.find(\".fr-back:visible\").length?(k.button.exec(y.find(\".fr-back:visible:first\")),k.accessibility.focusPopupButton(y)):y.find(\".fr-dismiss:visible\").length?k.button.exec(y.find(\".fr-dismiss:visible:first\")):(k.popups.hide(a),k.toolbar.showInline(null,!0),k.accessibility.focusPopupButton(y))),!1;if(k.popups.isVisible(a))return y.find(\".fr-back:visible\").length?(k.button.exec(y.find(\".fr-back:visible:first\")),k.accessibility.focusPopupButton(y)):y.find(\".fr-dismiss:visible\").length?k.button.exec(y.find(\".fr-dismiss:visible:first\")):(k.popups.hide(a),k.accessibility.focusPopupButton(y)),!1}},_doPlaceholder:function(){var c=t(this).next();c.length===0&&t(this).attr(\"placeholder\")&&t(this).after('<label for=\"'+t(this).attr(\"id\")+'\">'+t(this).attr(\"placeholder\")+\"</label>\"),t(this).toggleClass(\"fr-not-empty\",t(this).val()!==\"\")}}}function f(a,y){e.events.on(\"mouseup\",a._editorMouseup,!0),e.$wp&&e.events.on(\"keydown\",a._editorKeydown),e.events.on(\"blur\",function(){_()&&e.markers.remove(),h()}),e.events.on(\"window.mouseup\",a._windowMouseup,!0),e.events.on(\"window.keydown\",a._windowKeydown,!0),n[y].data(\"inst\"+e.id,!0),e.events.on(\"destroy\",function(){e.core.sameInstance(n[y])&&n[y].removeClass(\"fr-active\").appendTo(\"body:first\")},!0)}function i(a,y,c){let k=y.data(\"popper\");k&&k.destroy();let A=Popper.createPopper(a.get(0),y.get(0),S(c));return y.data(\"popper\",A),A}function S(a){let y=e.opts.iframe?()=>[e.$iframe.offset().left,e.$iframe.offset().top+10]:[0,10],c=[];return c.push({name:\"preventOverflow\",options:{boundary:e.$sc.get(0)}}),a||c.push({name:\"flip\",options:{fallbackPlacements:[\"left\",\"top\",\"bottom\"]}}),c.push({name:\"offset\",options:{offset:y}}),{placement:a?\"bottom\":\"right\",modifiers:c}}function s(a,y){var c=o(a,y),k=l(a);return f(k,a),e.events.$on(c,\"mousedown mouseup touchstart touchend touch\",\"*\",k._preventFocus,!0),e.events.$on(c,\"focus\",\"input, textarea, button, select\",k._inputFocus,!0),e.events.$on(c,\"blur\",\"input, textarea, button, select\",k._inputBlur,!0),e.accessibility.registerPopup(a),e.events.$on(c,\"keydown keyup change input\",\"input, textarea\",k._doPlaceholder,!0),e.helpers.isIOS()&&e.events.$on(c,\"touchend\",\"label\",function(){t(\"#\"+t(this).attr(\"for\")).prop(\"checked\",function(A,Q){return!Q})},!0),e.events.$on(t(e.o_win),\"resize\",k._windowResize,!0),c}function p(){for(var a in n)if(n.hasOwnProperty(a)){var y=n[a];y&&(y.html(\"\").removeData().remove(),n[a]=null)}n=[]}function M(){e.events.on(\"shared.destroy\",p,!0),e.events.on(\"window.mousedown\",m),e.events.on(\"window.touchmove\",u),e.events.$on(t(e.o_win),\"scroll\",u),e.events.on(\"mousedown\",function(a){_()&&(a.stopPropagation(),e.$el.find(\".fr-marker\").remove(),m(),e.events.disableBlur())})}return{_init:M,create:s,get:v,show:X,showEl:x,showElToolbar:O,hide:F,onHide:d,hideAll:h,setContainer:r,refresh:b,onRefresh:L,onShow:Y,isVisible:U,areVisible:_}}})(jQuery);(function(t){t.FE.MODULES.position=function(e){function n(){var b=e.selection.ranges(0),h=b.getBoundingClientRect();if(h.top===0&&h.left===0&&h.width===0||h.height===0){var m=!1;e.$el.find(\".fr-marker\").length===0&&(e.selection.save(),m=!0);var u=e.$el.find(\".fr-marker:first\");u.css(\"display\",\"inline\"),u.css(\"line-height\",\"\");var V=u.offset(),E=u.outerHeight();u.css(\"display\",\"none\"),u.css(\"line-height\",0),h={},h.left=V.left,h.width=0,h.height=E,h.top=V.top-(e.opts.iframe?0:e.helpers.scrollTop()),h.right=1,h.bottom=1,h.ok=!0,m&&e.selection.restore()}return h}function r(b,h,m){var u=b.outerHeight(!0)+.5;if(!e.helpers.isMobile()&&e.$tb&&b.parent().get(0)!=e.$tb.get(0)){var V=b.parent().offset().top,E=h-u-(m||0);b.parent().get(0)==e.$sc.get(0)&&(V=V-b.parent().position().top);var o=e.$sc.get(0).clientHeight;V+h+u>e.$sc.offset().top+o&&b.parent().offset().top+E>0&&E>0?E>e.$wp.scrollTop()&&(h=E,b.addClass(\"fr-above\")):b.removeClass(\"fr-above\")}return h}function O(b,h){var m=b.outerWidth(!0),u=b.parent().offset().left;return b.parent().get(0)==e.$sc.get(0)&&(u=u-b.parent().position().left),u+h+m>e.$sc.get(0).clientWidth-10&&(h=e.$sc.get(0).clientWidth-m-u-10),h<0&&(h=10),h}function x(b){var h=n();b.css({top:0,left:0});var m=h.top+h.height,u=h.left+h.width/2-b.get(0).offsetWidth/2+e.helpers.scrollLeft();e.opts.iframe||(m+=e.helpers.scrollTop()),X(u,m,b,h.height)}function X(b,h,m,u){var V=m.data(\"container\");V&&(V.get(0).tagName!==\"BODY\"||V.css(\"position\")!=\"static\")&&(b&&(b-=V.offset().left),h&&(h-=V.offset().top),V.get(0).tagName!=\"BODY\"?(b&&(b+=V.get(0).scrollLeft),h&&(h+=V.get(0).scrollTop)):V.css(\"position\")==\"absolute\"&&(b&&(b+=V.position().left),h&&(h+=V.position().top))),e.opts.iframe&&V&&e.$tb&&V.get(0)!=e.$tb.get(0)&&(b&&(b+=e.$iframe.offset().left),h&&(h+=e.$iframe.offset().top));var E=O(m,b);if(b){m.css(\"left\",E);var o=m.data(\"fr-arrow\");o||(o=m.find(\".fr-arrow\"),m.data(\"fr-arrow\",o)),o.data(\"margin-left\")||o.data(\"margin-left\",e.helpers.getPX(o.css(\"margin-left\"))),o.css(\"margin-left\",b-E+o.data(\"margin-left\"))}h&&m.css(\"top\",r(m,h,u))}function Y(b){var h=t(b),m=h.is(\".fr-sticky-on\"),u=h.data(\"sticky-top\"),V=h.data(\"sticky-scheduled\");if(typeof u>\"u\"){h.data(\"sticky-top\",0);var E=t('<div class=\"fr-sticky-dummy\" style=\"height: '+h.outerHeight()+'px;\"></div>');e.$box.prepend(E)}else e.$box.find(\".fr-sticky-dummy\").css(\"height\",h.outerHeight());if(e.core.hasFocus()||e.$tb.find(\"input:visible:focus\").length>0){var o=e.helpers.scrollTop(),l=Math.min(Math.max(o-e.$tb.parent().offset().top,0),e.$tb.parent().outerHeight()-h.outerHeight());l!=u&&l!=V&&(clearTimeout(h.data(\"sticky-timeout\")),h.data(\"sticky-scheduled\",l),h.outerHeight()<o-e.$tb.parent().offset().top&&h.addClass(\"fr-opacity-0\"),h.data(\"sticky-timeout\",setTimeout(function(){var f=e.helpers.scrollTop(),i=Math.min(Math.max(f-e.$tb.parent().offset().top,0),e.$tb.parent().outerHeight()-h.outerHeight());i>0&&e.$tb.parent().get(0).tagName==\"BODY\"&&(i+=e.$tb.parent().position().top),i!=u&&(h.css(\"top\",Math.max(i,0)),h.data(\"sticky-top\",i),h.data(\"sticky-scheduled\",i)),h.removeClass(\"fr-opacity-0\")},100))),m||(h.css(\"top\",\"0\"),h.width(e.$tb.parent().width()),h.addClass(\"fr-sticky-on\"),e.$box.addClass(\"fr-sticky-box\"))}else clearTimeout(t(b).css(\"sticky-timeout\")),h.css(\"top\",\"0\"),h.css(\"position\",\"\"),h.width(\"\"),h.data(\"sticky-top\",0),h.removeClass(\"fr-sticky-on\"),e.$box.removeClass(\"fr-sticky-box\")}function U(b){if(b.offsetWidth){var h,m,u=t(b),V=u.outerHeight(),E=u.data(\"sticky-top\"),o=u.data(\"sticky-position\"),l=t(e.opts.scrollableContainer==\"body\"?e.o_win:e.opts.scrollableContainer).outerHeight(),f=0,i=0;e.opts.scrollableContainer!==\"body\"&&(f=e.$sc.offset().top,i=t(e.o_win).outerHeight()-f-l);var S=e.opts.scrollableContainer==\"body\"?e.helpers.scrollTop():f,s=u.is(\".fr-sticky-on\");u.data(\"sticky-parent\")||u.data(\"sticky-parent\",u.parent());var p=u.data(\"sticky-parent\"),M=p.offset().top,a=p.outerHeight();if(!u.data(\"sticky-offset\")&&typeof E>\"u\"?(u.data(\"sticky-offset\",!0),u.after('<div class=\"fr-sticky-dummy\" style=\"height: '+V+'px;\"></div>')):e.$box.find(\".fr-sticky-dummy\").css(\"height\",V+\"px\"),!o){var y=u.css(\"top\")!==\"auto\"||u.css(\"bottom\")!==\"auto\";y||u.css(\"position\",\"fixed\"),o={top:e.node.hasClass(u.get(0),\"fr-top\"),bottom:e.node.hasClass(u.get(0),\"fr-bottom\")},y||u.css(\"position\",\"\"),u.data(\"sticky-position\",o),u.data(\"top\",e.node.hasClass(u.get(0),\"fr-top\")?u.css(\"top\"):\"auto\"),u.data(\"bottom\",e.node.hasClass(u.get(0),\"fr-bottom\")?u.css(\"bottom\"):\"auto\")}var c=function(){return M<S+h&&M+a-V>=S+h},k=function(){return M+V<S+l-m&&M+a>S+l-m};h=e.helpers.getPX(u.data(\"top\")),m=e.helpers.getPX(u.data(\"bottom\"));var A=o.top&&c()&&(e.helpers.isInViewPort(e.$sc.get(0))||e.opts.scrollableContainer==\"body\"),Q=o.bottom&&k();A||Q?(u.css(\"width\",p.get(0).getBoundingClientRect().width+\"px\"),s||(u.addClass(\"fr-sticky-on\"),u.removeClass(\"fr-sticky-off\"),u.css(\"top\")&&(u.data(\"top\")!=\"auto\"?u.css(\"top\",e.helpers.getPX(u.data(\"top\"))+f):u.data(\"top\",\"auto\")),u.css(\"bottom\")&&(u.data(\"bottom\")!=\"auto\"?u.css(\"bottom\",e.helpers.getPX(u.data(\"bottom\"))+i):u.css(\"bottom\",\"auto\")))):e.node.hasClass(u.get(0),\"fr-sticky-off\")||(u.width(\"\"),u.removeClass(\"fr-sticky-on\"),u.addClass(\"fr-sticky-off\"),u.css(\"top\")&&u.data(\"top\")!=\"auto\"&&o.top&&u.css(\"top\",0),u.css(\"bottom\")&&u.data(\"bottom\")!=\"auto\"&&o.bottom&&u.css(\"bottom\",0))}}function _(){return!1}function F(){if(!_())if(e._stickyElements=[],e.helpers.isIOS()){var b=function(){if(e.helpers.requestAnimationFrame()(b),e.events.trigger(\"position.refresh\")!==!1)for(var h=0;h<e._stickyElements.length;h++)Y(e._stickyElements[h])};b(),e.events.$on(t(e.o_win),\"scroll\",function(){if(e.core.hasFocus())for(var h=0;h<e._stickyElements.length;h++){var m=t(e._stickyElements[h]),u=m.parent(),V=e.helpers.scrollTop();m.outerHeight()<V-u.offset().top&&(m.addClass(\"fr-opacity-0\"),m.data(\"sticky-top\",-1),m.data(\"sticky-scheduled\",-1))}},!0)}else e.opts.scrollableContainer!==\"body\"&&e.events.$on(t(e.opts.scrollableContainer),\"scroll\",d,!0),e.events.$on(t(e.o_win),\"scroll\",d,!0),e.events.$on(t(e.o_win),\"resize\",d,!0),e.events.on(\"initialized\",d),e.events.on(\"focus\",d),e.events.$on(t(e.o_win),\"resize\",\"textarea\",d,!0);e.events.on(\"destroy\",function(){e._stickyElements=[]})}function d(){if(e._stickyElements)for(var b=0;b<e._stickyElements.length;b++)U(e._stickyElements[b])}function v(b){b.addClass(\"fr-sticky\"),e.helpers.isIOS()&&b.addClass(\"fr-sticky-ios\"),_()||(b.removeClass(\"fr-sticky\"),e._stickyElements.push(b.get(0)))}function L(){F()}return{_init:L,forSelection:x,addSticky:v,refresh:d,at:X,getBoundingRect:n}}})(jQuery);(function(t){t.FE.MODULES.refresh=function(e){function n(Y){X(Y,!e.undo.canDo())}function r(Y){X(Y,!e.undo.canRedo())}function O(Y){if(e.node.hasClass(Y.get(0),\"fr-no-refresh\"))return!1;for(var U=e.selection.blocks(),_=0;_<U.length;_++){for(var F=U[_].previousSibling;F&&F.nodeType==Node.TEXT_NODE&&F.textContent.length===0;)F=F.previousSibling;if(U[_].tagName==\"LI\"&&!F)X(Y,!0);else return X(Y,!1),!0}}function x(Y){if(e.node.hasClass(Y.get(0),\"fr-no-refresh\"))return!1;for(var U=e.selection.blocks(),_=0;_<U.length;_++){var F=e.opts.direction==\"rtl\"||t(U[_]).css(\"direction\")==\"rtl\"?\"margin-right\":\"margin-left\";if(U[_].tagName==\"LI\"||U[_].parentNode.tagName==\"LI\"||e.helpers.getPX(t(U[_]).css(F))>0)return X(Y,!1),!0}X(Y,!0)}function X(Y,U){Y.toggleClass(\"fr-disabled\",U).attr(\"aria-disabled\",U)}return{undo:n,redo:r,outdent:x,indent:O}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{editInPopup:!1}),t.FE.MODULES.textEdit=function(e){function n(){var Y=`\n                <div id=\"fr-text-edit-${e.id}\" class=\"fr-layer fr-text-edit-layer\">\n                    <div class=\"fr-input-line\">\n                        <input type=\"text\" placeholder=\"${e.language.translate(\"Text\")}\" tabIndex=\"1\">\n                    </div>\n                    <div class=\"fr-action-buttons\">\n                        <button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"updateText\" tabIndex=\"2\">\n                        ${e.language.translate(\"Update\")}\n                        </button>\n                    </div>\n                </div>\n            `,U={edit:Y};e.popups.create(\"text.edit\",U)}function r(){var Y=e.popups.get(\"text.edit\"),U;e.$el.prop(\"tagName\")===\"INPUT\"?U=e.$el.attr(\"placeholder\"):U=e.$el.text(),Y.find(\"input\").val(U).trigger(\"change\"),e.popups.setContainer(\"text.edit\",e.$sc),e.popups.showEl(\"text.edit\",e.$el)}function O(){e.events.$on(e.$el,e._mouseup,function(){setTimeout(function(){r()},10)})}function x(){var Y=e.popups.get(\"text.edit\"),U=Y.find(\"input\").val();U.length===0&&(U=e.opts.placeholderText),e.$el.prop(\"tagName\")===\"INPUT\"?e.$el.attr(\"placeholder\",U):e.$el.text(U),e.events.trigger(\"contentChanged\"),e.popups.hide(\"text.edit\")}function X(){e.opts.editInPopup&&(n(),O())}return{_init:X,update:x}},t.FE.RegisterCommand(\"updateText\",{focus:!1,undo:!1,callback:function(){this.textEdit.update()}})})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{toolbarBottom:!1,toolbarButtons:null,toolbarButtonsXS:null,toolbarButtonsSM:null,toolbarButtonsMD:null,toolbarContainer:null,toolbarInline:!1,toolbarSticky:!0,toolbarStickyOffset:0,toolbarVisibleWithoutSelection:!1}),t.FE.TOOLBAR_BUTTONS=[\"fullscreen\",\"bold\",\"italic\",\"underline\",\"strikeThrough\",\"subscript\",\"superscript\",\"|\",\"fontFamily\",\"fontSize\",\"color\",\"inlineClass\",\"inlineStyle\",\"paragraphStyle\",\"lineHeight\",\"|\",\"paragraphFormat\",\"align\",\"formatOL\",\"formatUL\",\"outdent\",\"indent\",\"quote\",\"-\",\"insertLink\",\"insertImage\",\"insertVideo\",\"embedly\",\"insertFile\",\"insertTable\",\"|\",\"emoticons\",\"fontAwesome\",\"specialCharacters\",\"insertHR\",\"selectAll\",\"clearFormatting\",\"|\",\"print\",\"getPDF\",\"spellChecker\",\"help\",\"html\",\"|\",\"undo\",\"redo\"],t.FE.TOOLBAR_BUTTONS_MD=null,t.FE.TOOLBAR_BUTTONS_SM=[\"bold\",\"italic\",\"underline\",\"|\",\"fontFamily\",\"fontSize\",\"insertLink\",\"insertImage\",\"table\",\"|\",\"undo\",\"redo\"],t.FE.TOOLBAR_BUTTONS_XS=[\"bold\",\"italic\",\"fontFamily\",\"fontSize\",\"|\",\"undo\",\"redo\"],t.FE.MODULES.toolbar=function(e){var n=[];n[t.FE.XS]=e.opts.toolbarButtonsXS||e.opts.toolbarButtons||t.FE.TOOLBAR_BUTTONS_XS||t.FE.TOOLBAR_BUTTONS||[],n[t.FE.SM]=e.opts.toolbarButtonsSM||e.opts.toolbarButtons||t.FE.TOOLBAR_BUTTONS_SM||t.FE.TOOLBAR_BUTTONS||[],n[t.FE.MD]=e.opts.toolbarButtonsMD||e.opts.toolbarButtons||t.FE.TOOLBAR_BUTTONS_MD||t.FE.TOOLBAR_BUTTONS||[],n[t.FE.LG]=e.opts.toolbarButtons||t.FE.TOOLBAR_BUTTONS||[];function r(i,S){for(var s=0;s<S.length;s++)S[s]!=\"-\"&&S[s]!=\"|\"&&i.indexOf(S[s])<0&&i.push(S[s])}function O(){var i=t.merge([],x());r(i,n[t.FE.XS]),r(i,n[t.FE.SM]),r(i,n[t.FE.MD]),r(i,n[t.FE.LG]);for(var S=i.length-1;S>=0;S--)i[S]!=\"-\"&&i[S]!=\"|\"&&i.indexOf(i[S])<S&&i.splice(S,1);var s=e.button.buildList(i,x());e.$tb.append(s),e.button.bindCommands(e.$tb)}function x(){var i=e.helpers.screenSize();return n[i]}function X(){var i=x();e.$tb.find(\".fr-separator\").remove(),e.$tb.find(\"> .fr-command, > div.fr-btn-wrap\").addClass(\"fr-hidden\");for(var S=0;S<i.length;S++)if(i[S]==\"|\"||i[S]==\"-\")e.$tb.append(e.button.buildList([i[S]]));else{var s=e.$tb.find('> .fr-command[data-cmd=\"'+i[S]+'\"], > div.fr-btn-wrap > .fr-command[data-cmd=\"'+i[S]+'\"]'),p=null;e.node.hasClass(s.next().get(0),\"fr-dropdown-menu\")&&(p=s.next()),e.node.hasClass(s.next().get(0),\"fr-options\")&&(s=s.parent()),s.removeClass(\"fr-hidden\").appendTo(e.$tb),p&&p.appendTo(e.$tb)}}function Y(){e.events.$on(t(e.o_win),\"resize\",X),e.events.$on(t(e.o_win),\"orientationchange\",X)}function U(i){return x().includes(i)}function _(i,S){setTimeout(function(){if((!i||i.which!=t.FE.KEYCODE.ESC)&&e.selection.inEditor()&&e.core.hasFocus()&&!e.popups.areVisible()&&(e.opts.toolbarVisibleWithoutSelection||!e.selection.isCollapsed()&&!e.keys.isIME()||S)){if(e.$tb.data(\"instance\",e),e.events.trigger(\"toolbar.show\",[i])===!1)return!1;e.$tb.show(),e.opts.toolbarContainer||e.position.forSelection(e.$tb),e.opts.zIndex>1?e.$tb.css(\"z-index\",e.opts.zIndex+1):e.$tb.css(\"z-index\",null)}},0)}function F(i){if(i&&i.type===\"blur\"&&document.activeElement===e.el)return!1;if(i&&i.type===\"keydown\"&&e.keys.ctrlKey(i))return!0;var S=e.button.getButtons(\".fr-dropdown.fr-active\");if(S.next().find(e.o_doc.activeElement).length)return!0;e.events.trigger(\"toolbar.hide\")!==!1&&e.$tb.hide()}function d(){if(e.events.trigger(\"toolbar.show\")===!1)return!1;e.$tb.show()}var v=null;function L(i){clearTimeout(v),(!i||i.which!=t.FE.KEYCODE.ESC)&&(v=setTimeout(_,e.opts.typingTimer))}function b(){e.events.on(\"window.mousedown\",F),e.events.on(\"keydown\",F),e.events.on(\"blur\",F),e.helpers.isMobile()||e.events.on(\"window.mouseup\",_),e.helpers.isMobile()?e.helpers.isIOS()||(e.events.on(\"window.touchend\",_),e.browser.mozilla&&setInterval(_,200)):e.events.on(\"window.keyup\",L),e.events.on(\"keydown\",function(i){i&&i.which==t.FE.KEYCODE.ESC&&F()}),e.events.on(\"keydown\",function(i){if(i.which==t.FE.KEYCODE.ALT)return i.stopPropagation(),!1},!0),e.events.$on(e.$wp,\"scroll.toolbar\",_),e.events.$on(e.$sc,\"scroll.toolbar\",_),e.events.on(\"commands.after\",_),e.helpers.isMobile()&&(e.events.$on(e.$doc,\"selectionchange\",L),e.events.$on(e.$doc,\"orientationchange\",_))}function h(){e.opts.toolbarInline?(e.$sc.append(e.$tb),e.$tb.data(\"container\",e.$sc),e.$tb.addClass(\"fr-inline\"),e.$tb.prepend('<span class=\"fr-arrow\"></span>'),b(),e.opts.toolbarBottom=!1):(e.opts.toolbarBottom&&!e.helpers.isIOS()?(e.$box.append(e.$tb),e.$tb.addClass(\"fr-bottom\"),e.$box.addClass(\"fr-bottom\")):(e.opts.toolbarBottom=!1,e.$box.prepend(e.$tb),e.$tb.addClass(\"fr-top\"),e.$box.addClass(\"fr-top\")),e.$tb.addClass(\"fr-basic\"),e.opts.toolbarSticky&&(e.opts.toolbarStickyOffset&&(e.opts.toolbarBottom?e.$tb.css(\"bottom\",e.opts.toolbarStickyOffset):e.$tb.css(\"top\",e.opts.toolbarStickyOffset)),e.position.addSticky(e.$tb)))}function m(){e.$tb.html(\"\").removeData().remove(),e.$vtb=null,e.$tb=null}function u(){e.$box.removeClass(\"fr-top fr-bottom fr-inline fr-basic\"),e.$box.find(\".fr-sticky-dummy\").remove()}function V(){e.opts.theme&&e.$tb.addClass(e.opts.theme+\"-theme\"),e.opts.zIndex>1&&e.$tb.css(\"z-index\",e.opts.zIndex+1),e.opts.direction!=\"auto\"&&e.$tb.removeClass(\"fr-ltr fr-rtl\").addClass(\"fr-\"+e.opts.direction),e.helpers.isMobile()?e.$tb.addClass(\"fr-mobile\"):e.$tb.addClass(\"fr-desktop\"),e.opts.toolbarContainer?(e.opts.toolbarInline&&(b(),F()),e.opts.toolbarBottom?e.$tb.addClass(\"fr-bottom\"):e.$tb.addClass(\"fr-top\")):h(),O(),Y(),e.accessibility.registerToolbar(e.$tb),e.events.$on(e.$tb,e._mousedown+\" \"+e._mouseup,function(i){var S=i.originalEvent?i.originalEvent.target||i.originalEvent.originalTarget:null;if(S&&S.tagName!=\"INPUT\"&&!e.edit.isDisabled())return i.stopPropagation(),i.preventDefault(),!1},!0)}function E(){if(e.$sc=t(e.opts.scrollableContainer).first(),!e.$wp)return!1;var i=t(\".document-toolbar-container:first\",e.$el.closest(\".component-backend-document\"));i.length&&(e.$vtb=i),e.opts.toolbarContainer?(e.shared.$tb?(e.$tb=e.shared.$tb,e.opts.toolbarInline&&b()):(e.shared.$tb=t('<div class=\"fr-toolbar\"></div>'),e.$tb=e.shared.$tb,t(e.opts.toolbarContainer).append(e.$tb),V(),e.$tb.data(\"instance\",e)),e.opts.toolbarInline?e.$box.addClass(\"fr-inline\"):e.$box.addClass(\"fr-basic\"),e.events.on(\"focus\",function(){e.$tb.data(\"instance\",e)},!0),e.opts.toolbarInline=!1):e.opts.toolbarInline?(e.$box.addClass(\"fr-inline\"),e.shared.$tb?(e.$tb=e.shared.$tb,b()):(e.shared.$tb=t('<div class=\"fr-toolbar\"></div>'),e.$tb=e.shared.$tb,V())):(e.$box.addClass(\"fr-basic\"),e.$tb=t('<div class=\"fr-toolbar\"></div>'),V(),e.$tb.data(\"instance\",e)),e.events.on(\"destroy\",u,!0),e.events.on(!e.opts.toolbarInline&&!e.opts.toolbarContainer?\"destroy\":\"shared.destroy\",m,!0)}var o=!1;function l(){!o&&e.$tb&&(e.$tb.find(\"> .fr-command, .fr-btn-wrap > .fr-command\").addClass(\"fr-disabled fr-no-refresh\").attr(\"aria-disabled\",!0),o=!0)}function f(){o&&e.$tb&&(e.$tb.find(\"> .fr-command, .fr-btn-wrap > .fr-command\").removeClass(\"fr-disabled fr-no-refresh\").attr(\"aria-disabled\",!1),o=!1),e.button.bulkRefresh()}return{_init:E,hide:F,show:d,hasButton:U,showInline:_,disable:l,enable:f}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{paragraphStyles:{\"fr-text-gray\":\"Gray\",\"fr-text-bordered\":\"Bordered\",\"fr-text-spaced\":\"Spaced\",\"fr-text-uppercase\":\"Uppercase\"},paragraphMultipleStyles:!0}),t.FE.PLUGINS.paragraphStyle=function(e){function n(x,X,Y){typeof X>\"u\"&&(X=e.opts.paragraphStyles),typeof Y>\"u\"&&(Y=e.opts.paragraphMultipleStyles);var U=\"\";Y||(U=Object.keys(X),U.splice(U.indexOf(x),1),U=U.join(\" \")),e.selection.save(),e.html.wrap(!0,!0,!0,!0),e.selection.restore();var _=e.selection.blocks();e.selection.save();for(var F=t(_[0]).hasClass(x),d=0;d<_.length;d++)t(_[d]).removeClass(U).toggleClass(x,!F),t(_[d]).hasClass(\"fr-temp-div\")&&t(_[d]).removeClass(\"fr-temp-div\"),t(_[d]).attr(\"class\")===\"\"&&t(_[d]).removeAttr(\"class\");e.html.unwrap(),e.selection.restore()}function r(x,X){var Y=e.selection.blocks();if(Y.length){var U=t(Y[0]);X.find(\".fr-command\").each(function(){var _=t(this).data(\"param1\"),F=U.hasClass(_);t(this).toggleClass(\"fr-active\",F).attr(\"aria-selected\",F)})}}function O(){}return{_init:O,apply:n,refreshOnShow:r}},t.FE.RegisterCommand(\"paragraphStyle\",{type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.paragraphStyles;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command '+r+'\" tabIndex=\"-1\" role=\"option\" data-cmd=\"paragraphStyle\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.language.translate(n[r])+\"</a></li>\");return e+=\"</ul>\",e},title:\"Paragraph Style\",callback:function(e,n){this.paragraphStyle.apply(n)},refreshOnShow:function(e,n){this.paragraphStyle.refreshOnShow(e,n)},plugin:\"paragraphStyle\"}),t.FE.DefineIcon(\"paragraphStyle\",{NAME:\"magic\"})})(jQuery);(function(t){t.FE.PLUGINS.fullscreen=function(e){var n;function r(){return e.$box.hasClass(\"fr-fullscreen\")}var O,x,X,Y;function U(){if(e.helpers.isIOS()&&e.core.hasFocus())return e.$el.blur(),setTimeout(F,250),!1;n=e.helpers.scrollTop(),e.$box.toggleClass(\"fr-fullscreen\"),t(\"body:first\").toggleClass(\"fr-fullscreen\"),O=t('<div style=\"display: none;\"></div>'),e.$box.after(O),e.helpers.isMobile()&&(e.$tb.data(\"parent\",e.$tb.parent()),e.$tb.prependTo(e.$box),e.$tb.data(\"sticky-dummy\")&&e.$tb.after(e.$tb.data(\"sticky-dummy\"))),x=e.opts.height,X=e.opts.heightMax,Y=e.opts.zIndex,e.position.refresh(),e.opts.height=e.o_win.innerHeight-(e.opts.toolbarInline?0:e.$tb.outerHeight()),e.opts.zIndex=9990,e.opts.heightMax=null,e.size.refresh(),e.opts.toolbarInline&&e.toolbar.showInline(),e.events.trigger(\"charCounter.update\"),e.events.trigger(\"codeView.update\"),e.$win.trigger(\"scroll\")}function _(){if(e.helpers.isIOS()&&e.core.hasFocus())return e.$el.blur(),setTimeout(F,250),!1;e.$box.toggleClass(\"fr-fullscreen\"),t(\"body:first\").toggleClass(\"fr-fullscreen\"),e.$tb.prependTo(e.$tb.data(\"parent\")),e.$tb.data(\"sticky-dummy\")&&e.$tb.after(e.$tb.data(\"sticky-dummy\")),e.opts.height=x,e.opts.heightMax=X,e.opts.zIndex=Y,e.size.refresh(),t(e.o_win).scrollTop(n),e.opts.toolbarInline&&e.toolbar.showInline(),e.events.trigger(\"charCounter.update\"),e.opts.toolbarSticky&&e.opts.toolbarStickyOffset&&(e.opts.toolbarBottom?e.$tb.css(\"bottom\",e.opts.toolbarStickyOffset).data(\"bottom\",e.opts.toolbarStickyOffset):e.$tb.css(\"top\",e.opts.toolbarStickyOffset).data(\"top\",e.opts.toolbarStickyOffset)),e.$win.trigger(\"scroll\")}function F(){r()?_():U(),d(e.$tb.find('.fr-command[data-cmd=\"fullscreen\"]')),t(window).trigger(\"oc.updateUi\")}function d(L){var b=r();L.toggleClass(\"fr-active\",b).attr(\"aria-pressed\",b),L.find(\"> *:not(.fr-sr-only)\").replaceWith(b?e.icon.create(\"fullscreenCompress\"):e.icon.create(\"fullscreen\"))}function v(){if(!e.$wp)return!1;e.events.$on(t(e.o_win),\"resize\",function(){r()&&(_(),U())}),e.events.on(\"toolbar.hide\",function(){if(r()&&e.helpers.isMobile())return!1}),e.events.on(\"position.refresh\",function(){if(e.helpers.isIOS())return!r()}),e.events.on(\"destroy\",function(){r()&&_()},!0)}return{_init:v,toggle:F,refresh:d,isActive:r}},t.FE.RegisterCommand(\"fullscreen\",{title:\"Fullscreen\",undo:!1,focus:!1,accessibilityFocus:!0,forcedRefresh:!0,toggle:!0,callback:function(){this.fullscreen.toggle()},refresh:function(e){this.fullscreen.refresh(e)},plugin:\"fullscreen\"}),t.FE.DefineIcon(\"fullscreen\",{NAME:\"expand\"}),t.FE.DefineIcon(\"fullscreenCompress\",{NAME:\"compress\"})})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{aceEditor:!0,aceEditorVendorPath:\"/\",aceEditorOptions:{showLineNumbers:!0,useSoftTabs:!1,wrap:!0,mode:\"ace/mode/html\",tabSize:2},codeBeautifierOptions:{end_with_newline:!0,indent_inner_html:!0,extra_liners:[\"p\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"pre\",\"ul\",\"ol\",\"table\",\"dl\"],brace_style:\"expand\",indent_char:\"\t\",indent_size:1,wrap_line_length:0},codeViewKeepActiveButtons:[\"fullscreen\"]}),t.FE.PLUGINS.codeView=function(e){var n,r;function O(){return!!(e.$box.hasClass(\"fr-code-view\")||e.$box.closest(\".component-backend-richeditor-document-connector\").hasClass(\"code-editing-mode\"))}function x(){return r?r.getValue():n.val()}function X(){O()&&r&&r.resize()}var Y=!1;function U(){O()&&e.events.trigger(\"blur\")}function _(){O()&&Y&&e.events.trigger(\"focus\")}function F(V){var E=x();e.html.set(E),e.$el.blur(),e.$tb.find(\" > .fr-command, > .fr-btn-wrap > .fr-command\").not(V).removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1),V.removeClass(\"fr-active\").attr(\"aria-pressed\",!1),e.events.focus(!0),e.placeholder.refresh(),e.undo.saveStep()}function d(V){n||(h(),!r&&e.opts.aceEditor&&typeof ace<\"u\"?(r=ace.edit(n.get(0)),ace.require(\"ace/config\").set(\"basePath\",e.opts.aceEditorVendorPath),r.setOptions(e.opts.aceEditorOptions),r.on(\"blur\",U),r.on(\"focus\",_)):(e.events.$on(n,\"keydown keyup change input\",function(){e.opts.height?this.removeAttribute(\"rows\"):(this.rows=1,this.value.length===0?this.style.height=\"auto\":this.style.height=this.scrollHeight+\"px\")}),e.events.$on(n,\"blur\",U),e.events.$on(n,\"focus\",_))),e.undo.saveStep(),e.html.cleanEmptyTags(),e.html.cleanWhiteTags(!0),e.core.hasFocus()&&(e.core.isEmpty()||(e.selection.save(),e.$el.find('.fr-marker[data-type=\"true\"]:first').replaceWith('<span class=\"fr-tmp fr-sm\">F</span>'),e.$el.find('.fr-marker[data-type=\"false\"]:last').replaceWith('<span class=\"fr-tmp fr-em\">F</span>')));var E=e.html.get(!1,!0);e.$el.find(\"span.fr-tmp\").remove(),e.$box.toggleClass(\"fr-code-view\",!0);var o=!1;e.core.hasFocus()&&(o=!0,e.events.disableBlur(),e.$el.blur()),E=E.replace(/<span class=\"fr-tmp fr-sm\">F<\\/span>/,\"FROALA-SM\"),E=E.replace(/<span class=\"fr-tmp fr-em\">F<\\/span>/,\"FROALA-EM\"),e.codeBeautifier&&(E=e.codeBeautifier.run(E,e.opts.codeBeautifierOptions));var l,f;if(r){l=E.indexOf(\"FROALA-SM\"),f=E.indexOf(\"FROALA-EM\"),l>f?l=f:f=f-9,E=E.replace(/FROALA-SM/g,\"\").replace(/FROALA-EM/g,\"\");var i=E.substring(0,l).length-E.substring(0,l).replace(/\\n/g,\"\").length,S=E.substring(0,f).length-E.substring(0,f).replace(/\\n/g,\"\").length;l=E.substring(0,l).length-E.substring(0,E.substring(0,l).lastIndexOf(`\n`)+1).length,f=E.substring(0,f).length-E.substring(0,E.substring(0,f).lastIndexOf(`\n`)+1).length,r.$blockScrolling=1/0,r.getSession().setValue(E),Y=!o,r.focus(),Y=!0,r.selection.moveCursorToPosition({row:i,column:l}),r.selection.selectToPosition({row:S,column:f}),r.resize(),r.session.getUndoManager().reset()}else{l=E.indexOf(\"FROALA-SM\"),f=E.indexOf(\"FROALA-EM\")-9,e.opts.heightMin&&n.css(\"min-height\",e.opts.heightMin),e.opts.height&&n.css(\"height\",e.opts.height),e.opts.heightMax&&n.css(\"max-height\",e.opts.height||e.opts.heightMax),n.val(E.replace(/FROALA-SM/g,\"\").replace(/FROALA-EM/g,\"\")).trigger(\"change\");var s=t(e.o_doc).scrollTop();Y=!o,n.focus(),Y=!0,n.get(0).setSelectionRange(l,f),t(e.o_doc).scrollTop(s)}e.$tb.find(\" > .fr-command, > .fr-btn-wrap > .fr-command\").not(V).filter(function(){return e.opts.codeViewKeepActiveButtons.indexOf(t(this).data(\"cmd\"))<0}).addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),V.addClass(\"fr-active\").attr(\"aria-pressed\",!0),!e.helpers.isMobile()&&e.opts.toolbarInline&&e.toolbar.hide()}function v(V){typeof V>\"u\"&&(V=!O());var E=e.$tb.find('.fr-command[data-cmd=\"html\"]');V?(e.popups.hideAll(),d(E)):(e.$box.toggleClass(\"fr-code-view\",!1),F(E))}function L(){O()&&v(!1),n.val(\"\").removeData().remove(),n=null,m&&(m.remove(),m=null)}function b(){var V=e.$tb.find('.fr-command[data-cmd=\"html\"]');O()?(e.$tb.find(\" > .fr-command\").not(V).filter(function(){return e.opts.codeViewKeepActiveButtons.indexOf(t(this).data(\"cmd\"))<0}).addClass(\"fr-disabled\").attr(\"aria-disabled\",!1),V.addClass(\"fr-active\").attr(\"aria-pressed\",!1)):(e.$tb.find(\" > .fr-command\").not(V).removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1),V.removeClass(\"fr-active\").attr(\"aria-pressed\",!1))}function h(){n=t('<textarea class=\"fr-code\" tabIndex=\"-1\">'),e.$wp.append(n),n.attr(\"dir\",e.opts.direction),e.$box.hasClass(\"fr-basic\")||(m=t('<a data-cmd=\"html\" title=\"Code View\" class=\"fr-command fr-btn html-switch'+(e.helpers.isMobile()?\"\":\" fr-desktop\")+'\" role=\"button\" tabIndex=\"-1\"><i class=\"fa fa-code\"></i></button>'),e.$box.append(m),e.events.bindClick(e.$box,\"a.html-switch\",function(){e.events.trigger(\"commands.before\",[\"html\"]),v(!1),e.events.trigger(\"commands.after\",[\"html\"])}));var V=function(){return!O()};e.events.on(\"buttons.refresh\",V),e.events.on(\"copy\",V,!0),e.events.on(\"cut\",V,!0),e.events.on(\"paste\",V,!0),e.events.on(\"destroy\",L,!0),e.events.on(\"html.set\",function(){O()&&v(!0)}),e.events.on(\"codeView.update\",X),e.events.on(\"form.submit\",function(){O()&&(e.html.set(x()),e.events.trigger(\"contentChanged\",[],!0))},!0)}var m;function u(){if(e.events.on(\"focus\",function(){e.opts.toolbarContainer&&b()}),!e.$wp)return!1}return{_init:u,toggle:v,isActive:O,get:x}},t.FE.RegisterCommand(\"html\",{title:\"Code View\",undo:!1,focus:!1,forcedRefresh:!0,toggle:!0,callback:function(){this.codeView.toggle()},plugin:\"codeView\"}),t.FE.DefineIcon(\"html\",{NAME:\"code\"})})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{paragraphFormat:{N:\"Normal\",H1:\"Heading 1\",H2:\"Heading 2\",H3:\"Heading 3\",H4:\"Heading 4\",PRE:\"Code\"},paragraphFormatSelection:!1,paragraphDefaultSelection:\"Paragraph Format\"}),t.FE.PLUGINS.paragraphFormat=function(e){function n(_,F){var d=e.html.defaultTag();if(F&&F.toLowerCase()!=d)if(_.find(\"ul, ol\").length>0){var v=t(\"<\"+F+\">\");_.prepend(v);for(var L=e.node.contents(_.get(0))[0];L&&[\"UL\",\"OL\"].indexOf(L.tagName)<0;){var b=L.nextSibling;v.append(L),L=b}}else _.html(\"<\"+F+\">\"+_.html()+\"</\"+F+\">\")}function r(_,F){var d=e.html.defaultTag();(!F||F.toLowerCase()==d)&&(F='div class=\"fr-temp-div\"'),_.replaceWith(t(\"<\"+F+\">\").html(_.html()))}function O(_,F){var d=e.html.defaultTag();F||(F='div class=\"fr-temp-div\"'+(e.node.isEmpty(_.get(0),!0)?' data-empty=\"true\"':\"\")),F.toLowerCase()==d?(e.node.isEmpty(_.get(0),!0)||_.append(\"<br/>\"),_.replaceWith(_.html())):_.replaceWith(t(\"<\"+F+\">\").html(_.html()))}function x(_,F){F||(F='div class=\"fr-temp-div\"'+(e.node.isEmpty(_.get(0),!0)?' data-empty=\"true\"':\"\")),_.replaceWith(t(\"<\"+F+\" \"+e.node.attributes(_.get(0))+\">\").html(_.html()).removeAttr(\"data-empty\"))}function X(_){_==\"N\"&&(_=e.html.defaultTag()),e.selection.save(),e.html.wrap(!0,!0,!e.opts.paragraphFormat.BLOCKQUOTE,!0,!0),e.selection.restore();var F=e.selection.blocks();e.selection.save(),e.$el.find(\"pre\").attr(\"skip\",!0);for(var d=0;d<F.length;d++)if(F[d].tagName!=_&&!e.node.isList(F[d])){var v=t(F[d]);F[d].tagName==\"LI\"?n(v,_):F[d].parentNode.tagName==\"LI\"&&F[d]?r(v,_):[\"TD\",\"TH\"].indexOf(F[d].parentNode.tagName)>=0?O(v,_):x(v,_)}e.$el.find('pre:not([skip=\"true\"]) + pre:not([skip=\"true\"])').each(function(){t(this).prev().append(\"<br>\"+t(this).html()),t(this).remove()}),e.$el.find(\"pre\").removeAttr(\"skip\"),e.html.unwrap(),e.selection.restore()}function Y(_,F){var d=e.selection.blocks();if(d.length){var v=d[0],L=\"N\",b=e.html.defaultTag();v.tagName.toLowerCase()!=b&&v!=e.el&&(L=v.tagName),F.find('.fr-command[data-param1=\"'+L+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}else F.find('.fr-command[data-param1=\"N\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}function U(_){if(e.opts.paragraphFormatSelection){var F=e.selection.blocks();if(F.length){var d=F[0],v=\"N\",L=e.html.defaultTag();d.tagName.toLowerCase()!=L&&d!=e.el&&(v=d.tagName),[\"LI\",\"TD\",\"TH\"].indexOf(v)>=0&&(v=\"N\"),_.find(\"> span\").text(e.language.translate(e.opts.paragraphFormat[v]))}else _.find(\"> span\").text(e.language.translate(e.opts.paragraphFormat.N))}}return{apply:X,refreshOnShow:Y,refresh:U}},t.FE.RegisterCommand(\"paragraphFormat\",{type:\"dropdown\",displaySelection:function(e){return e.opts.paragraphFormatSelection},defaultSelection:function(e){return e.language.translate(e.opts.paragraphDefaultSelection)},displaySelectionWidth:125,html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.paragraphFormat;for(var r in n)if(n.hasOwnProperty(r)){var O=this.shortcuts.get(\"paragraphFormat.\"+r);O?O='<span class=\"fr-shortcut\">'+O+\"</span>\":O=\"\",e+='<li role=\"presentation\"><'+(r==\"N\"?this.html.defaultTag()||\"DIV\":r)+' style=\"padding: 0 !important; margin: 0 !important;\" role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"paragraphFormat\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.language.translate(n[r])+\"</a></\"+(r==\"N\"?this.html.defaultTag()||\"DIV\":r)+\"></li>\"}return e+=\"</ul>\",e},title:\"Paragraph Format\",callback:function(e,n){this.paragraphFormat.apply(n)},refresh:function(e){this.paragraphFormat.refresh(e)},refreshOnShow:function(e,n){this.paragraphFormat.refreshOnShow(e,n)},plugin:\"paragraphFormat\"}),t.FE.DefineIcon(\"paragraphFormat\",{NAME:\"paragraph\"})})(jQuery);(function(t){t.FE.PLUGINS.align=function(e){function n(X){var Y=e.selection.element();if(t(Y).parents(\".fr-img-caption\").length)t(Y).css(\"text-align\",X);else{e.selection.save(),e.html.wrap(!0,!0,!0,!0),e.selection.restore();for(var U=e.selection.blocks(),_=0;_<U.length;_++)t(U[_]).css(\"text-align\",X).removeClass(\"fr-temp-div\"),t(U[_]).attr(\"class\")===\"\"&&t(U[_]).removeAttr(\"class\"),t(U[_]).attr(\"style\")===\"\"&&t(U[_]).removeAttr(\"style\");e.selection.save(),e.html.unwrap(),e.selection.restore()}}function r(X){var Y=e.selection.blocks();if(Y.length){var U=e.helpers.getAlignment(t(Y[0]));X.find(\"> *:first\").replaceWith(e.icon.create(\"align-\"+U))}}function O(X,Y){var U=e.selection.blocks();if(U.length){var _=e.helpers.getAlignment(t(U[0]));Y.find('a.fr-command[data-param1=\"'+_+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}}function x(X){var Y=e.selection.blocks();if(Y.length){var U=e.helpers.getAlignment(t(Y[0]));U=U.charAt(0).toUpperCase()+U.slice(1),\"align\"+U==X.attr(\"data-cmd\")&&X.addClass(\"fr-active\")}}return{apply:n,refresh:r,refreshOnShow:O,refreshForToolbar:x}},t.FE.DefineIcon(\"align\",{NAME:\"align-left\"}),t.FE.DefineIcon(\"align-left\",{NAME:\"align-left\"}),t.FE.DefineIcon(\"align-right\",{NAME:\"align-right\"}),t.FE.DefineIcon(\"align-center\",{NAME:\"align-center\"}),t.FE.DefineIcon(\"align-justify\",{NAME:\"align-justify\"}),t.FE.RegisterCommand(\"align\",{type:\"dropdown\",title:\"Align\",options:{left:\"Align Left\",center:\"Align Center\",right:\"Align Right\",justify:\"Align Justify\"},html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=t.FE.COMMANDS.align.options;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command fr-title\" tabIndex=\"-1\" role=\"option\" data-cmd=\"align\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.icon.create(\"align-\"+r)+'<span class=\"fr-sr-only\">'+this.language.translate(n[r])+\"</span></a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.align.apply(n)},refresh:function(e){this.align.refresh(e)},refreshOnShow:function(e,n){this.align.refreshOnShow(e,n)},plugin:\"align\"}),t.FE.RegisterCommand(\"alignLeft\",{type:\"button\",icon:\"align-left\",callback:function(){this.align.apply(\"left\")},refresh:function(e){this.align.refreshForToolbar(e)}}),t.FE.RegisterCommand(\"alignRight\",{type:\"button\",icon:\"align-right\",callback:function(){this.align.apply(\"right\")},refresh:function(e){this.align.refreshForToolbar(e)}}),t.FE.RegisterCommand(\"alignCenter\",{type:\"button\",icon:\"align-center\",callback:function(){this.align.apply(\"center\")},refresh:function(e){this.align.refreshForToolbar(e)}}),t.FE.RegisterCommand(\"alignJustify\",{type:\"button\",icon:\"align-justify\",callback:function(){this.align.apply(\"justify\")},refresh:function(e){this.align.refreshForToolbar(e)}})})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{listAdvancedTypes:!0}),t.FE.PLUGINS.lists=function(e){function n(b){return'<span class=\"fr-open-'+b.toLowerCase()+'\"></span>'}function r(b){return'<span class=\"fr-close-'+b.toLowerCase()+'\"></span>'}function O(b,h){for(var m=[],u=0;u<b.length;u++){var V=b[u].parentNode;b[u].tagName==\"LI\"&&V.tagName!=h&&m.indexOf(V)<0&&m.push(V)}for(u=m.length-1;u>=0;u--){var E=t(m[u]);E.replaceWith(\"<\"+h.toLowerCase()+\" \"+e.node.attributes(E.get(0))+\">\"+E.html()+\"</\"+h.toLowerCase()+\">\")}}function x(b,h){O(b,h);var m=e.html.defaultTag(),u=null,V;b.length&&(V=e.opts.direction==\"rtl\"||t(b[0]).css(\"direction\")==\"rtl\"?\"margin-right\":\"margin-left\");for(var E=0;E<b.length;E++)if(!(b[E].tagName==\"TD\"||b[E].tagName==\"TH\")&&b[E].tagName!=\"LI\"){var o=e.helpers.getPX(t(b[E]).css(V))||0;b[E].style.marginLeft=null,u===null&&(u=o);var l=u>0?\"<\"+h+' style=\"'+V+\": \"+u+'px;\">':\"<\"+h+\">\",f=\"</\"+h+\">\";for(o=o-u;o/e.opts.indentMargin>0;)l+=\"<\"+h+\">\",f+=f,o=o-e.opts.indentMargin;m&&b[E].tagName.toLowerCase()==m?t(b[E]).replaceWith(l+\"<li\"+e.node.attributes(b[E])+\">\"+t(b[E]).html()+\"</li>\"+f):t(b[E]).wrap(l+\"<li></li>\"+f)}e.clean.lists()}function X(b){var h,m;for(h=b.length-1;h>=0;h--)for(m=h-1;m>=0;m--)if(t(b[m]).find(b[h]).length||b[m]==b[h]){b.splice(h,1);break}var u=[];for(h=0;h<b.length;h++){var V=t(b[h]),E=b[h].parentNode,o=V.attr(\"class\");if(V.before(r(E.tagName)),E.parentNode.tagName==\"LI\")V.before(r(\"LI\")),V.after(n(\"LI\"));else{var l=\"\";o&&(l+=' class=\"'+o+'\"');var f=e.opts.direction==\"rtl\"||V.css(\"direction\")==\"rtl\"?\"margin-right\":\"margin-left\";e.helpers.getPX(t(E).css(f))&&(t(E).attr(\"style\")||\"\").indexOf(f+\":\")>=0&&(l+=' style=\"'+f+\":\"+e.helpers.getPX(t(E).css(f))+'px;\"'),e.html.defaultTag()&&V.find(e.html.blockTagsQuery()).length===0&&V.wrapInner(\"<\"+e.html.defaultTag()+l+\"></\"+e.html.defaultTag()+\">\"),!e.node.isEmpty(V.get(0),!0)&&V.find(e.html.blockTagsQuery()).length===0&&V.append(\"<br>\"),V.append(n(\"LI\")),V.prepend(r(\"LI\"))}V.after(n(E.tagName)),E.parentNode.tagName==\"LI\"&&(E=E.parentNode.parentNode),u.indexOf(E)<0&&u.push(E)}for(h=0;h<u.length;h++){var i=t(u[h]),S=i.html();S=S.replace(/<span class=\"fr-close-([a-z]*)\"><\\/span>/g,\"</$1>\"),S=S.replace(/<span class=\"fr-open-([a-z]*)\"><\\/span>/g,\"<$1>\"),i.replaceWith(e.node.openTagString(i.get(0))+S+e.node.closeTagString(i.get(0)))}e.$el.find(\"li:empty\").remove(),e.$el.find(\"ul:empty, ol:empty\").remove(),e.clean.lists(),e.html.wrap()}function Y(b,h){for(var m=!0,u=0;u<b.length;u++){if(b[u].tagName!=\"LI\")return!1;b[u].parentNode.tagName!=h&&(m=!1)}return m}function U(b,h){var m,u;for(e.selection.save(),e.html.wrap(!0,!0,!0,!0),e.selection.restore(),u=e.selection.blocks(),m=0;m<u.length;m++)u[m].tagName!=\"LI\"&&u[m].parentNode.tagName==\"LI\"&&(u[m]=u[m].parentNode);if(e.selection.save(),Y(u,b)?h||X(u):x(u,b,h),e.html.unwrap(),e.selection.restore(),h=h||\"default\",h){for(u=e.selection.blocks(),m=0;m<u.length;m++)u[m].tagName!=\"LI\"&&u[m].parentNode.tagName==\"LI\"&&(u[m]=u[m].parentNode);for(m=0;m<u.length;m++)u[m].tagName==\"LI\"&&(t(u[m].parentNode).css(\"list-style-type\",h===\"default\"?\"\":h),(t(u[m].parentNode).attr(\"style\")||\"\").length===0&&t(u[m].parentNode).removeAttr(\"style\"))}}function _(b,h){var m=t(e.selection.element());if(m.get(0)!=e.el){var u=m.get(0);u.tagName!=\"LI\"&&u.firstElementChild&&u.firstElementChild.tagName!=\"LI\"||u.tagName!=\"LI\"&&!u.firstElementChild?u=m.parents(\"li\").get(0):u.firstElementChild&&u.firstElementChild.tagName==\"LI\"?u=m.get(0).firstChild:u=m.get(0),u&&u.parentNode.tagName==h&&e.el.contains(u.parentNode)&&b.addClass(\"fr-active\")}}function F(b){e.selection.save();for(var h=0;h<b.length;h++){var m=b[h].previousSibling;if(m){var u=t(b[h]).find(\"> ul, > ol\").last().get(0);if(u){for(var V=t(\"<li>\").prependTo(t(u)),E=e.node.contents(b[h])[0];E&&!e.node.isList(E);){var o=E.nextSibling;V.append(E),E=o}t(m).append(t(u)),t(b[h]).remove()}else{var l=t(m).find(\"> ul, > ol\").last().get(0);if(l)t(l).append(t(b[h]));else{var f=t(\"<\"+b[h].parentNode.tagName+\">\");t(m).append(f),f.append(t(b[h]))}}}}e.clean.lists(),e.selection.restore()}function d(b){e.selection.save(),X(b),e.selection.restore()}function v(b){if(b==\"indent\"||b==\"outdent\"){for(var h=!1,m=e.selection.blocks(),u=[],V=0;V<m.length;V++)m[V].tagName==\"LI\"?(h=!0,u.push(m[V])):m[V].parentNode.tagName==\"LI\"&&(h=!0,u.push(m[V].parentNode));h&&(b==\"indent\"?F(u):d(u))}}function L(){e.events.on(\"commands.after\",v),e.events.on(\"keydown\",function(b){if(b.which==t.FE.KEYCODE.TAB){for(var h=e.selection.blocks(),m=[],u=0;u<h.length;u++)h[u].tagName==\"LI\"?m.push(h[u]):h[u].parentNode.tagName==\"LI\"&&m.push(h[u].parentNode);if(m.length>1||m.length&&(e.selection.info(m[0]).atStart||e.node.isEmpty(m[0])))return b.preventDefault(),b.stopPropagation(),b.shiftKey?d(m):F(m),!1}},!0)}return{_init:L,format:U,refresh:_}},t.FE.RegisterCommand(\"formatUL\",{title:\"Unordered List\",type:\"button\",hasOptions:function(){return this.opts.listAdvancedTypes},options:{default:\"Default\",circle:\"Circle\",disc:\"Disc\",square:\"Square\"},refresh:function(e){this.lists.refresh(e,\"UL\")},callback:function(e,n){this.lists.format(\"UL\",n)},plugin:\"lists\"}),t.FE.RegisterCommand(\"formatOL\",{title:\"Ordered List\",hasOptions:function(){return this.opts.listAdvancedTypes},options:{default:\"Default\",\"lower-alpha\":\"Lower Alpha\",\"lower-greek\":\"Lower Greek\",\"lower-roman\":\"Lower Roman\",\"upper-alpha\":\"Upper Alpha\",\"upper-roman\":\"Upper Roman\"},refresh:function(e){this.lists.refresh(e,\"OL\")},callback:function(e,n){this.lists.format(\"OL\",n)},plugin:\"lists\"}),t.FE.DefineIcon(\"formatUL\",{NAME:\"list-ul\"}),t.FE.DefineIcon(\"formatOL\",{NAME:\"list-ol\"})})(jQuery);(function(t){t.extend(t.FE.POPUP_TEMPLATES,{\"file.insert\":\"[_BUTTONS_][_UPLOAD_LAYER_][_BY_URL_LAYER_][_PROGRESS_BAR_]\"}),t.extend(t.FE.DEFAULTS,{fileUploadURL:\"http://i.froala.com/upload\",fileUploadParam:\"file\",fileUploadParams:{},fileUploadToS3:!1,fileUploadMethod:\"POST\",fileMaxSize:10*1024*1024,fileAllowedTypes:[\"*\"],fileInsertButtons:[\"fileBack\",\"|\",\"fileUpload\",\"fileByURL\"],fileUseSelectedText:!1}),t.FE.PLUGINS.file=function(e){var n=1,r=2,O=3,x=4,X=5,Y=6,U=7,_={};_[n]=\"File cannot be loaded from the passed link.\",_[r]=\"No link in upload response.\",_[O]=\"Error during file upload.\",_[x]=\"Parsing response failed.\",_[X]=\"File is too large.\",_[Y]=\"File file type is invalid.\",_[U]=\"Files can be uploaded only to same domain in IE 8 and IE 9.\";function F(){var W=e.$tb.find('.fr-command[data-cmd=\"insertFile\"]'),N=e.popups.get(\"file.insert\");if(N||(N=M()),v(),!N.hasClass(\"fr-active\")){e.popups.refresh(\"file.insert\"),e.popups.setContainer(\"file.insert\",e.$tb);var I=W.offset().left+W.outerWidth()/2,H=W.offset().top+(e.opts.toolbarBottom?10:W.outerHeight()-10);e.popups.show(\"file.insert\",I,H,W.outerHeight())}}function d(){var W=e.popups.get(\"file.insert\");W||(W=M()),W.find(\".fr-layer.fr-active\").removeClass(\"fr-active\").addClass(\"fr-pactive\"),W.find(\".fr-file-progress-bar-layer\").addClass(\"fr-active\"),W.find(\".fr-buttons\").hide(),L(\"Uploading\",0)}function v(W){var N=e.popups.get(\"file.insert\");N&&(N.find(\".fr-layer.fr-pactive\").addClass(\"fr-active\").removeClass(\"fr-pactive\"),N.find(\".fr-file-progress-bar-layer\").removeClass(\"fr-active\"),N.find(\".fr-buttons\").show(),W&&(e.events.focus(),e.popups.hide(\"file.insert\")))}function L(W,N){var I=e.popups.get(\"file.insert\");if(I){var H=I.find(\".fr-file-progress-bar-layer\");H.find(\"h3\").text(W+(N?\" \"+N+\"%\":\"\")),H.removeClass(\"fr-error\"),N?(H.find(\"div\").removeClass(\"fr-indeterminate\"),H.find(\"div > span\").css(\"width\",N+\"%\")):H.find(\"div\").addClass(\"fr-indeterminate\")}}function b(W){d();var N=e.popups.get(\"file.insert\"),I=N.find(\".fr-file-progress-bar-layer\");I.addClass(\"fr-error\");var H=I.find(\"h3\");H.text(W),e.events.disableBlur(),H.focus()}function h(){var W=e.popups.get(\"file.insert\"),N=W.find(\".fr-file-by-url-layer input\"),I=N.val();if(I.length>0){var H=I.substring(I.lastIndexOf(\"/\")+1);m(e.helpers.sanitizeURL(N.val()),H,[]),N.val(\"\"),N.blur()}}function m(W,N,I){e.edit.on(),e.events.focus(!0),e.selection.restore(),e.opts.fileUseSelectedText&&e.selection.text().length&&(N=e.selection.text()),e.html.insert('<a href=\"'+W+'\" id=\"fr-inserted-file\" class=\"fr-file\">'+N+\"</a>\");var H=e.$el.find(\"#fr-inserted-file\");H.removeAttr(\"id\"),e.popups.hide(\"file.insert\"),e.undo.saveStep(),Q(),e.events.trigger(\"file.inserted\",[H,I])}function u(W){try{if(e.events.trigger(\"file.uploaded\",[W],!0)===!1)return e.edit.on(),!1;var N=t.parseJSON(W);return N.link?N:(f(r,W),!1)}catch{return f(x,W),!1}}function V(W){try{var N=t(W).find(\"Location\").text(),I=t(W).find(\"Key\").text();return e.events.trigger(\"file.uploadedToS3\",[N,I,W],!0)===!1?(e.edit.on(),!1):N}catch{return f(x,W),!1}}function E(W){var N=this.status,I=this.response,H=this.responseXML,J=this.responseText;try{if(e.opts.fileUploadToS3)if(N==201){var Z=V(H);Z&&m(Z,W,I||H)}else f(x,I||H);else if(N>=200&&N<300){var se=u(J);se&&m(se.link,W,I||J)}else f(O,I||J)}catch{f(x,I||J)}}function o(){f(x,this.response||this.responseText||this.responseXML)}function l(W){if(W.lengthComputable){var N=W.loaded/W.total*100|0;L(\"Uploading\",N)}}function f(W,N){e.edit.on(),b(e.language.translate(\"Something went wrong. Please try again.\")),e.events.trigger(\"file.error\",[{code:W,message:_[W]},N])}function i(){e.edit.on(),v(!0)}function S(W){if(typeof W<\"u\"&&W.length>0){if(e.events.trigger(\"file.beforeUpload\",[W])===!1)return!1;var N=W[0];if(N.size>e.opts.fileMaxSize)return f(X),!1;if(e.opts.fileAllowedTypes.indexOf(\"*\")<0&&e.opts.fileAllowedTypes.indexOf(N.type.replace(/file\\//g,\"\"))<0)return f(Y),!1;var I;if(e.drag_support.formdata&&(I=e.drag_support.formdata?new FormData:null),I){var H;if(e.opts.fileUploadToS3!==!1){I.append(\"key\",e.opts.fileUploadToS3.keyStart+new Date().getTime()+\"-\"+(N.name||\"untitled\")),I.append(\"success_action_status\",\"201\"),I.append(\"X-Requested-With\",\"xhr\"),I.append(\"Content-Type\",N.type);for(H in e.opts.fileUploadToS3.params)e.opts.fileUploadToS3.params.hasOwnProperty(H)&&I.append(H,e.opts.fileUploadToS3.params[H])}for(H in e.opts.fileUploadParams)e.opts.fileUploadParams.hasOwnProperty(H)&&I.append(H,e.opts.fileUploadParams[H]);I.append(e.opts.fileUploadParam,N);var J=e.opts.fileUploadURL;e.opts.fileUploadToS3&&(e.opts.fileUploadToS3.uploadURL?J=e.opts.fileUploadToS3.uploadURL:J=\"https://\"+e.opts.fileUploadToS3.region+\".amazonaws.com/\"+e.opts.fileUploadToS3.bucket);var Z=e.core.getXHR(J,e.opts.fileUploadMethod);Z.onload=function(){E.call(Z,N.name)},Z.onerror=o,Z.upload.onprogress=l,Z.onabort=i,d(),e.edit.off();var se=e.popups.get(\"file.insert\");se&&se.off(\"abortUpload\").on(\"abortUpload\",function(){Z.readyState!=4&&Z.abort()}),Z.send(I)}}}function s(W){e.events.$on(W,\"dragover dragenter\",\".fr-file-upload-layer\",function(){return t(this).addClass(\"fr-drop\"),!1},!0),e.events.$on(W,\"dragleave dragend\",\".fr-file-upload-layer\",function(){return t(this).removeClass(\"fr-drop\"),!1},!0),e.events.$on(W,\"drop\",\".fr-file-upload-layer\",function(N){N.preventDefault(),N.stopPropagation(),t(this).removeClass(\"fr-drop\");var I=N.originalEvent.dataTransfer;if(I&&I.files){var H=W.data(\"instance\")||e;H.file.upload(I.files)}},!0),e.events.$on(W,\"change\",'.fr-file-upload-layer input[type=\"file\"]',function(){if(this.files){var N=W.data(\"instance\")||e;N.file.upload(this.files)}t(this).val(\"\")},!0)}function p(){v()}function M(W){if(W)return e.popups.onHide(\"file.insert\",p),!0;var N,I=\"\";e.opts.fileInsertButtons.length>1&&(I='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.fileInsertButtons)+\"</div>\");var H=e.opts.fileInsertButtons.indexOf(\"fileUpload\"),J=e.opts.fileInsertButtons.indexOf(\"fileByURL\"),Z=\"\";H>=0&&(N=\" fr-active\",J>=0&&H>J&&(N=\"\"),Z='<div class=\"fr-file-upload-layer'+N+' fr-layer fr-active\" id=\"fr-file-upload-layer-'+e.id+'\"><strong>'+e.language.translate(\"Drop file\")+\"</strong><br>(\"+e.language.translate(\"or click\")+')<div class=\"fr-form\"><input type=\"file\" name=\"'+e.opts.fileUploadParam+'\" accept=\"/*\" tabIndex=\"-1\" aria-labelledby=\"fr-file-upload-layer-'+e.id+'\" role=\"button\"></div></div>');var se=\"\";J>=0&&(N=\" fr-active\",H>=0&&J>H&&(N=\"\"),se='<div class=\"fr-file-by-url-layer'+N+' fr-layer\" id=\"fr-file-by-url-layer-'+e.id+'\"><div class=\"fr-input-line\"><input type=\"text\" placeholder=\"http://\" tabIndex=\"1\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"fileInsertByURL\" tabIndex=\"2\">'+e.language.translate(\"Insert\")+\"</button></div></div>\");var g='<div class=\"fr-file-progress-bar-layer fr-layer\"><h3 tabIndex=\"-1\" class=\"fr-message\">Uploading</h3><div class=\"fr-loader\"><span class=\"fr-progress\"></span></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-dismiss\" data-cmd=\"fileDismissError\" tabIndex=\"2\" role=\"button\">OK</button></div></div>',R={buttons:I,upload_layer:Z,by_url_layer:se,progress_bar:g},$=e.popups.create(\"file.insert\",R);return s($),$}function a(W){if(e.node.hasClass(W,\"fr-file\"))return e.events.trigger(\"file.unlink\",[W])}function y(W){var N=W.originalEvent.dataTransfer;if(N&&N.files&&N.files.length){var I=N.files[0];if(I&&typeof I.type<\"u\"&&I.type.indexOf(\"image\")<0&&(e.opts.fileAllowedTypes.indexOf(I.type)>=0||e.opts.fileAllowedTypes.indexOf(\"*\")>=0)){e.markers.remove(),e.markers.insertAtPoint(W.originalEvent),e.$el.find(\".fr-marker\").replaceWith(t.FE.MARKERS),e.popups.hideAll();var H=e.popups.get(\"file.insert\");return H||(H=M()),e.popups.setContainer(\"file.insert\",e.$sc),e.popups.show(\"file.insert\",W.originalEvent.pageX,W.originalEvent.pageY),d(),S(N.files),W.preventDefault(),W.stopPropagation(),!1}}}function c(){e.events.on(\"drop\",y),e.events.$on(e.$win,\"keydown\",function(W){var N=W.which,I=e.popups.get(\"file.insert\");I&&N==t.FE.KEYCODE.ESC&&I.trigger(\"abortUpload\")}),e.events.on(\"destroy\",function(){var W=e.popups.get(\"file.insert\");W&&W.trigger(\"abortUpload\")})}function k(){e.events.disableBlur(),e.selection.restore(),e.events.enableBlur(),e.popups.hide(\"file.insert\"),e.toolbar.showInline()}var A;function Q(){var W=Array.prototype.slice.call(e.el.querySelectorAll(\"a.fr-file\")),N=[],I;for(I=0;I<W.length;I++)N.push(W[I].getAttribute(\"href\"));if(A)for(I=0;I<A.length;I++)N.indexOf(A[I].getAttribute(\"href\"))<0&&e.events.trigger(\"file.unlink\",[A[I]]);A=W}function z(W){var N=e.popups.get(\"file.insert\"),I,H;if(e.opts.toolbarInline)H=N.offset().top-e.helpers.getPX(N.css(\"margin-top\")),N.hasClass(\"fr-above\")&&(H+=N.outerHeight());else{var J=e.$tb.find('.fr-command[data-cmd=\"insertFile\"]');I=J.offset().left+J.outerWidth()/2,H=J.offset().top+(e.opts.toolbarBottom?10:J.outerHeight()-10)}N.find(\".fr-layer\").removeClass(\"fr-active\"),N.find(\".fr-\"+W+\"-layer\").addClass(\"fr-active\"),e.popups.show(\"file.insert\",I,H,0)}function w(W){var N=e.popups.get(\"file.insert\");N.find(\".fr-file-upload-layer\").hasClass(\"fr-active\")&&W.addClass(\"fr-active\")}function C(W){var N=e.popups.get(\"file.insert\");N.find(\".fr-file-by-url-layer\").hasClass(\"fr-active\")&&W.addClass(\"fr-active\")}function G(){c(),e.events.on(\"link.beforeRemove\",a),e.$wp&&(Q(),e.events.on(\"contentChanged\",Q)),M(!0)}return{_init:G,showInsertPopup:F,showLayer:z,refreshUploadButton:w,refreshByURLButton:C,insertByURL:h,upload:S,insert:m,back:k,hideProgressBar:v}},t.FE.DefineIcon(\"insertFile\",{NAME:\"file-o\"}),t.FE.RegisterCommand(\"insertFile\",{title:\"Insert File\",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"file.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"file.insert\")):this.file.showInsertPopup()},plugin:\"file\"}),t.FE.DefineIcon(\"fileUpload\",{NAME:\"upload\"}),t.FE.RegisterCommand(\"fileUpload\",{title:\"Upload File\",undo:!1,focus:!1,callback:function(){this.file.showLayer(\"file-upload\")},refresh:function(e){this.file.refreshUploadButton(e)}}),t.FE.DefineIcon(\"fileByURL\",{NAME:\"link\"}),t.FE.RegisterCommand(\"fileByURL\",{title:\"By URL\",undo:!1,focus:!1,callback:function(){this.file.showLayer(\"file-by-url\")},refresh:function(e){this.file.refreshByURLButton(e)}}),t.FE.RegisterCommand(\"fileInsertByURL\",{title:\"Insert File\",undo:!0,refreshAfterCallback:!1,callback:function(){this.file.insertByURL()},refresh:function(e){e.text(this.language.translate(\"Insert\"))}}),t.FE.DefineIcon(\"fileBack\",{NAME:\"arrow-left\"}),t.FE.RegisterCommand(\"fileBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.file.back()},refresh:function(e){this.opts.toolbarInline?(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\")):(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\"))}}),t.FE.RegisterCommand(\"fileDismissError\",{title:\"OK\",callback:function(){this.file.hideProgressBar(!0)}})})(jQuery);(function(t){t.extend(t.FE.POPUP_TEMPLATES,{\"image.insert\":\"[_BUTTONS_][_UPLOAD_LAYER_][_BY_URL_LAYER_][_PROGRESS_BAR_]\",\"image.edit\":\"[_BUTTONS_]\",\"image.alt\":\"[_BUTTONS_][_ALT_LAYER_]\",\"image.size\":\"[_BUTTONS_][_SIZE_LAYER_]\"}),t.extend(t.FE.DEFAULTS,{imageInsertButtons:[\"imageBack\",\"|\",\"imageUpload\",\"imageByURL\"],imageEditButtons:[\"imageReplace\",\"imageAlign\",\"imageCaption\",\"imageRemove\",\"|\",\"imageLink\",\"linkOpen\",\"linkEdit\",\"linkRemove\",\"-\",\"imageDisplay\",\"imageStyle\",\"imageAlt\",\"imageSize\"],imageAltButtons:[\"imageBack\",\"|\"],imageSizeButtons:[\"imageBack\",\"|\"],imageUpload:!0,imageUploadURL:null,imageUploadRemoteUrls:!0,imageUploadParam:\"file\",imageUploadParams:{},imageUploadToS3:!1,imageUploadMethod:\"POST\",imageMaxSize:10*1024*1024,imageAllowedTypes:[\"jpeg\",\"jpg\",\"png\",\"gif\",\"webp\"],imageResize:!0,imageResizeWithPercent:!1,imageRoundPercent:!1,imageDefaultWidth:300,imageDefaultAlign:\"center\",imageDefaultDisplay:\"block\",imageSplitHTML:!1,imageStyles:{\"fr-rounded\":\"Rounded\",\"fr-bordered\":\"Bordered\",\"fr-shadow\":\"Shadow\"},imageMove:!0,imageMultipleStyles:!0,imageTextNear:!0,imagePaste:!0,imagePasteProcess:!1,imageMinWidth:16,imageOutputSize:!1,imageDefaultMargin:5,imageAddNewLine:!1}),t.FE.PLUGINS.image=function(e){var n=\"https://i.froala.com/upload\",r,O,x,X,Y=!1,U=1,_=2,F=3,d=4,v=5,L=6,b=7,h=8,m={};m[U]=\"Image cannot be loaded from the passed link.\",m[_]=\"No link in upload response.\",m[F]=\"Error during file upload.\",m[d]=\"Parsing response failed.\",m[v]=\"File is too large.\",m[L]=\"Image file type is invalid.\",m[b]=\"Files can be uploaded only to same domain in IE 8 and IE 9.\",m[h]=\"Image file is corrupted.\";function u(){var T=e.popups.get(\"image.insert\"),B=T.find(\".fr-image-by-url-layer input\");B.val(\"\"),r&&B.val(r.attr(\"src\")),B.trigger(\"change\")}function V(){var T=e.$tb.find('.fr-command[data-cmd=\"insertImage\"]'),B=e.popups.get(\"image.insert\");if(B||(B=Ae()),w(),!B.hasClass(\"fr-active\"))if(e.popups.refresh(\"image.insert\"),e.popups.setContainer(\"image.insert\",e.$tb),T.is(\":visible\")){var te=T.offset().left+T.outerWidth()/2,ae=T.offset().top+(e.opts.toolbarBottom?10:T.outerHeight()-10);e.popups.show(\"image.insert\",te,ae,T.outerHeight())}else e.position.forSelection(B),e.popups.show(\"image.insert\")}function E(){var T=e.popups.get(\"image.edit\");if(T||(T=Q()),T){var B=ke();Be()&&(B=B.find(\".fr-img-wrap\")),e.popups.setContainer(\"image.edit\",e.$sc),e.popups.refresh(\"image.edit\"),r.hasClass(\"fr-uploading\")?z():e.popups.showEl(\"image.edit\",B)}}function o(){w()}function l(T){T.parents(\".fr-img-caption\").length>0&&(T=T.parents(\".fr-img-caption:first\")),!T.hasClass(\"fr-dii\")&&!T.hasClass(\"fr-dib\")&&(T.addClass(\"fr-fi\"+j(T)[0]),T.addClass(\"fr-di\"+ne(T)[0]),T.css(\"margin\",\"\"),T.css(\"float\",\"\"),T.css(\"display\",\"\"),T.css(\"z-index\",\"\"),T.css(\"position\",\"\"),T.css(\"overflow\",\"\"),T.css(\"vertical-align\",\"\"))}function f(T){T.parents(\".fr-img-caption\").length>0&&(T=T.parents(\".fr-img-caption:first\"));var B=T.hasClass(\"fr-dib\")?\"block\":T.hasClass(\"fr-dii\")?\"inline\":null,te=T.hasClass(\"fr-fil\")?\"left\":T.hasClass(\"fr-fir\")?\"right\":j(T);K(T,B,te),T.removeClass(\"fr-dib fr-dii fr-fir fr-fil\")}function i(){for(var T=e.el.tagName==\"IMG\"?[e.el]:e.el.querySelectorAll(\"img\"),B=0;B<T.length;B++){var te=t(T[B]);!e.opts.htmlUntouched&&e.opts.useClasses?((e.opts.imageDefaultAlign||e.opts.imageDefaultDisplay)&&l(te),e.opts.imageTextNear||(te.parents(\".fr-img-caption\").length>0?te.parents(\".fr-img-caption:first\").removeClass(\"fr-dii\").addClass(\"fr-dib\"):te.removeClass(\"fr-dii\").addClass(\"fr-dib\"))):!e.opts.htmlUntouched&&!e.opts.useClasses&&(e.opts.imageDefaultAlign||e.opts.imageDefaultDisplay)&&f(te),e.opts.iframe&&te.on(\"load\",e.size.syncIframe)}}var S;function s(T){typeof T>\"u\"&&(T=!0);var B=Array.prototype.slice.call(e.el.querySelectorAll(\"img\")),te=[],ae;for(ae=0;ae<B.length;ae++)if(te.push(B[ae].getAttribute(\"src\")),t(B[ae]).toggleClass(\"fr-draggable\",e.opts.imageMove),B[ae].getAttribute(\"class\")===\"\"&&B[ae].removeAttribute(\"class\"),B[ae].getAttribute(\"style\")===\"\"&&B[ae].removeAttribute(\"style\"),B[ae].parentNode&&B[ae].parentNode.parentNode&&e.node.hasClass(B[ae].parentNode.parentNode,\"fr-img-caption\")){var pe=B[ae].parentNode.parentNode;e.browser.mozilla||pe.setAttribute(\"contenteditable\",!1),pe.setAttribute(\"draggable\",!1),pe.classList.add(\"fr-draggable\");var ge=B[ae].nextSibling;ge&&!e.browser.mozilla&&ge.setAttribute(\"contenteditable\",!0)}if(S)for(ae=0;ae<S.length;ae++)te.indexOf(S[ae].getAttribute(\"src\"))<0&&e.events.trigger(\"image.removed\",[t(S[ae])]);if(S&&T){var de=[];for(ae=0;ae<S.length;ae++)de.push(S[ae].getAttribute(\"src\"));for(ae=0;ae<B.length;ae++)de.indexOf(B[ae].getAttribute(\"src\"))<0&&e.events.trigger(\"image.loaded\",[t(B[ae])])}S=B}function p(){if(O||_e(),!r)return!1;var T=e.$wp||e.$sc;T.append(O),O.data(\"instance\",e);var B=T.scrollTop()-(T.css(\"position\")!=\"static\"?T.offset().top:0),te=T.scrollLeft()-(T.css(\"position\")!=\"static\"?T.offset().left:0);te-=e.helpers.getPX(T.css(\"border-left-width\")),B-=e.helpers.getPX(T.css(\"border-top-width\")),e.$el.is(\"img\")&&e.$sc.is(\"body\")&&(B=0,te=0);var ae=ke();Be()&&(ae=ae.find(\".fr-img-wrap\")),O.css(\"top\",(e.opts.iframe?ae.offset().top:ae.offset().top+B)-1).css(\"left\",(e.opts.iframe?ae.offset().left:ae.offset().left+te)-1).css(\"width\",ae.get(0).getBoundingClientRect().width).css(\"height\",ae.get(0).getBoundingClientRect().height).addClass(\"fr-active\")}function M(T){return'<div class=\"fr-handler fr-h'+T+'\"></div>'}function a(T){Be()?r.parents(\".fr-img-caption\").css(\"width\",T):r.css(\"width\",T)}function y(T){if(!e.core.sameInstance(O))return!0;if(T.preventDefault(),T.stopPropagation(),e.$el.find(\"img.fr-error\").left)return!1;e.undo.canDo()||e.undo.saveStep();var B=T.pageX||T.originalEvent.touches[0].pageX;if(T.type==\"mousedown\"){var te=e.$oel.get(0),ae=te.ownerDocument,pe=ae.defaultView||ae.parentWindow,ge=!1;try{ge=pe.location!=pe.parent.location&&!(pe.$&&pe.$.FE)}catch{}ge&&pe.frameElement&&(B+=e.helpers.getPX(t(pe.frameElement).offset().left)+pe.frameElement.clientLeft)}x=t(this),x.data(\"start-x\",B),x.data(\"start-width\",r.width()),x.data(\"start-height\",r.height());var de=r.width();if(e.opts.imageResizeWithPercent){var Le=r.parentsUntil(e.$el,e.html.blockTagsQuery()).get(0)||e.el;de=(de/t(Le).outerWidth()*100).toFixed(2)+\"%\"}a(de),X.show(),e.popups.hideAll(),P()}function c(T){if(!e.core.sameInstance(O))return!0;var B;if(x&&r){if(T.preventDefault(),e.$el.find(\"img.fr-error\").left)return!1;var te=T.pageX||(T.originalEvent.touches?T.originalEvent.touches[0].pageX:null);if(!te)return!1;var ae=x.data(\"start-x\"),pe=te-ae,ge=x.data(\"start-width\");if((x.hasClass(\"fr-hnw\")||x.hasClass(\"fr-hsw\"))&&(pe=0-pe),e.opts.imageResizeWithPercent){var de=r.parentsUntil(e.$el,e.html.blockTagsQuery()).get(0)||e.el;ge=((ge+pe)/t(de).outerWidth()*100).toFixed(2),e.opts.imageRoundPercent&&(ge=Math.round(ge)),a(ge+\"%\"),Be()?B=(e.helpers.getPX(r.parents(\".fr-img-caption\").css(\"width\"))/t(de).outerWidth()*100).toFixed(2):B=(e.helpers.getPX(r.css(\"width\"))/t(de).outerWidth()*100).toFixed(2),B!==ge&&!e.opts.imageRoundPercent&&a(B+\"%\"),r.css(\"height\",\"\").removeAttr(\"height\")}else ge+pe>=e.opts.imageMinWidth&&(a(ge+pe),Be()?B=e.helpers.getPX(r.parents(\".fr-img-caption\").css(\"width\")):B=e.helpers.getPX(r.css(\"width\"))),B!==ge+pe&&a(B),((r.attr(\"style\")||\"\").match(/(^height:)|(; *height:)/)||r.attr(\"height\"))&&(r.css(\"height\",x.data(\"start-height\")*r.width()/x.data(\"start-width\")),r.removeAttr(\"height\"));p(),e.events.trigger(\"image.resize\",[Oe()])}}function k(T){if(!e.core.sameInstance(O))return!0;if(x&&r){if(T&&T.stopPropagation(),e.$el.find(\"img.fr-error\").left)return!1;x=null,X.hide(),p(),E(),e.undo.saveStep(),e.events.trigger(\"image.resizeEnd\",[Oe()])}}function A(T,B,te){e.edit.on(),r&&r.addClass(\"fr-error\"),G(e.language.translate(\"Something went wrong. Please try again.\")),!r&&te&&De(te),e.events.trigger(\"image.error\",[{code:T,message:m[T]},B,te])}function Q(T){if(T)return e.$wp&&e.events.$on(e.$wp,\"scroll.image-edit\",function(){r&&e.popups.isVisible(\"image.edit\")&&(e.events.disableBlur(),E())}),!0;var B=\"\";if(e.opts.imageEditButtons.length>0){B+='<div class=\"fr-buttons\">',B+=e.button.buildList(e.opts.imageEditButtons),B+=\"</div>\";var te={buttons:B},ae=e.popups.create(\"image.edit\",te);return ae}return!1}function z(T){var B=e.popups.get(\"image.insert\");if(B||(B=Ae()),B.find(\".fr-layer.fr-active\").removeClass(\"fr-active\").addClass(\"fr-pactive\"),B.find(\".fr-image-progress-bar-layer\").addClass(\"fr-active\"),B.find(\".fr-buttons\").hide(),r){var te=ke();e.popups.setContainer(\"image.insert\",e.$sc),e.popups.showEl(\"image.insert\",te)}typeof T>\"u\"&&C(e.language.translate(\"Uploading\"),0)}function w(T){var B=e.popups.get(\"image.insert\");if(B&&(B.find(\".fr-layer.fr-pactive\").addClass(\"fr-active\").removeClass(\"fr-pactive\"),B.find(\".fr-image-progress-bar-layer\").removeClass(\"fr-active\"),B.find(\".fr-buttons\").show(),T||e.$el.find(\"img.fr-error\").length)){if(e.events.focus(),e.$el.find(\"img.fr-error\").length&&(e.$el.find(\"img.fr-error\").remove(),e.undo.saveStep(),e.undo.run(),e.undo.dropRedo()),!e.$wp&&r){var te=r;ze(!0),e.selection.setAfter(te.get(0)),e.selection.restore()}e.popups.hide(\"image.insert\")}}function C(T,B){var te=e.popups.get(\"image.insert\");if(te){var ae=te.find(\".fr-image-progress-bar-layer\");ae.find(\"h3\").text(T+(B?\" \"+B+\"%\":\"\")),ae.removeClass(\"fr-error\"),B?(ae.find(\"div\").removeClass(\"fr-indeterminate\"),ae.find(\"div > span\").css(\"width\",B+\"%\")):ae.find(\"div\").addClass(\"fr-indeterminate\")}}function G(T){z();var B=e.popups.get(\"image.insert\"),te=B.find(\".fr-image-progress-bar-layer\");te.addClass(\"fr-error\");var ae=te.find(\"h3\");ae.text(T),e.events.disableBlur(),ae.focus()}function W(){var T=e.popups.get(\"image.insert\"),B=T.find(\".fr-image-by-url-layer input\");if(B.val().length>0){z(),C(e.language.translate(\"Loading image\"));var te=B.val().trim();if(e.opts.imageUploadRemoteUrls&&e.opts.imageUpload){var ae=new XMLHttpRequest;ae.onload=function(){this.status==200?ve([new Blob([this.response],{type:this.response.type||\"image/png\"})],r):A(U)},ae.onerror=function(){H(te,!0,[],r)},ae.open(\"GET\",te,!0),ae.responseType=\"blob\",ae.send()}else H(te,!0,[],r);B.val(\"\"),B.blur()}}function N(T){Ve.call(T.get(0))}function I(){var T=t(this);e.popups.hide(\"image.insert\"),T.removeClass(\"fr-uploading\"),T.next().is(\"br\")&&T.next().remove(),N(T),e.events.trigger(\"image.loaded\",[T])}function H(T,B,te,ae,pe){e.edit.off(),C(e.language.translate(\"Loading image\")),B&&(T=e.helpers.sanitizeURL(T));var ge=new Image;ge.onload=function(){var de,Le;if(ae){!e.undo.canDo()&&!ae.hasClass(\"fr-uploading\")&&e.undo.saveStep();var Xe=ae.data(\"fr-old-src\");ae.data(\"fr-image-pasted\")&&(Xe=null),e.$wp?(de=ae.clone().removeData(\"fr-old-src\").removeClass(\"fr-uploading\").removeAttr(\"data-fr-image-pasted\"),de.off(\"load\"),Xe&&ae.attr(\"src\",Xe),ae.replaceWith(de)):de=ae;for(var Ge=de.get(0).attributes,et=0;et<Ge.length;et++){var lt=Ge[et];lt.nodeName.indexOf(\"data-\")===0&&de.removeAttr(lt.nodeName)}if(typeof te<\"u\")for(Le in te)te.hasOwnProperty(Le)&&Le!=\"link\"&&de.attr(\"data-\"+Le,te[Le]);de.on(\"load\",I),de.attr(\"src\",T),e.edit.on(),s(!1),e.undo.saveStep(),e.events.disableBlur(),e.$el.blur(),e.events.trigger(Xe?\"image.replaced\":\"image.inserted\",[de,pe])}else de=$(T,te,I),s(!1),e.undo.saveStep(),e.events.disableBlur(),e.$el.blur(),e.events.trigger(\"image.inserted\",[de,pe])},ge.onerror=function(){A(U)},z(e.language.translate(\"Loading image\")),ge.src=T}function J(T){try{if(e.events.trigger(\"image.uploaded\",[T],!0)===!1)return e.edit.on(),!1;var B=JSON.parse(T);return B.link?B:(A(_,T),!1)}catch{return A(d,T),!1}}function Z(T){try{var B=t(T).find(\"Location\").text(),te=t(T).find(\"Key\").text();return e.events.trigger(\"image.uploadedToS3\",[B,te,T],!0)===!1?(e.edit.on(),!1):B}catch{return A(d,T),!1}}function se(T){C(e.language.translate(\"Loading image\"));var B=this.status,te=this.response,ae=this.responseXML,pe=this.responseText;try{if(e.opts.imageUploadToS3)if(B==201){var ge=Z(ae);ge&&H(ge,!1,[],T,te||ae)}else A(d,te||ae,T);else if(B>=200&&B<300){var de=J(pe);de&&H(de.link,!1,de,T,te||pe)}else A(F,te||pe,T)}catch{A(d,te||pe,T)}}function g(){A(d,this.response||this.responseText||this.responseXML)}function R(T){if(T.lengthComputable){var B=T.loaded/T.total*100|0;C(e.language.translate(\"Uploading\"),B)}}function $(T,B,te){var ae=\"\",pe;if(B&&typeof B<\"u\")for(pe in B)B.hasOwnProperty(pe)&&pe!=\"link\"&&(ae+=\" data-\"+pe+'=\"'+B[pe]+'\"');var ge=e.opts.imageDefaultWidth;ge&&ge!=\"auto\"&&(ge=ge+(e.opts.imageResizeWithPercent?\"%\":\"px\"));var de=t('<img src=\"'+T+'\"'+ae+(ge?' style=\"width: '+ge+';\"':\"\")+\">\");K(de,e.opts.imageDefaultDisplay,e.opts.imageDefaultAlign),de.on(\"load\",te),de.on(\"error\",te),e.edit.on(),e.events.focus(!0),e.selection.restore(),e.undo.saveStep(),e.opts.imageSplitHTML?e.markers.split():e.markers.insert(),e.html.wrap();var Le=e.$el.find(\".fr-marker\");return Le.length?(Le.parent().is(\"hr\")&&Le.parent().after(Le),e.node.isLastSibling(Le)&&Le.parent().hasClass(\"fr-deletable\")&&Le.insertAfter(Le.parent()),Le.replaceWith(de)):e.$el.append(de),e.selection.clear(),de}function ee(){e.edit.on(),w(!0)}function ce(T,B,te,ae){function pe(){var de=t(this);de.off(\"load\"),de.addClass(\"fr-uploading\"),de.next().is(\"br\")&&de.next().remove(),e.placeholder.refresh(),N(de),p(),z(),e.edit.off(),T.onload=function(){se.call(T,de)},T.onerror=g,T.upload.onprogress=R,T.onabort=ee,de.off(\"abortUpload\").on(\"abortUpload\",function(){T.readyState!=4&&T.abort()}),T.send(B)}var ge=new FileReader;ge.onload=function(){var de=ge.result;if(ge.result.indexOf(\"svg+xml\")<0){for(var Le=atob(ge.result.split(\",\")[1]),Xe=[],Ge=0;Ge<Le.length;Ge++)Xe.push(Le.charCodeAt(Ge));de=window.URL.createObjectURL(new Blob([new Uint8Array(Xe)],{type:\"image/jpeg\"}))}ae?(ae.on(\"load\",pe),ae.one(\"error\",pe),e.edit.on(),e.undo.saveStep(),ae.data(\"fr-old-src\",ae.attr(\"src\")),ae.attr(\"src\",de)):$(de,null,pe)},ge.readAsDataURL(te)}function he(T,B){var te=new FileReader;te.onload=function(){var ae=te.result;if(te.result.indexOf(\"svg+xml\")<0){for(var pe=atob(te.result.split(\",\")[1]),ge=[],de=0;de<pe.length;de++)ge.push(pe.charCodeAt(de));ae=window.URL.createObjectURL(new Blob([new Uint8Array(ge)],{type:T.type})),e.image.insert(ae,!1,null,B)}},z(),te.readAsDataURL(T)}function ve(T,B){if(typeof T<\"u\"&&T.length>0){if(e.events.trigger(\"image.beforeUpload\",[T,B])===!1)return!1;var te=T[0];if((e.opts.imageUploadURL===null||e.opts.imageUploadURL==n)&&!e.opts.imageUploadToS3)return he(te,B||r),!1;if(te.name||(te.name=new Date().getTime()+\".\"+(te.type||\"image/jpeg\").replace(/image\\//g,\"\")),te.size>e.opts.imageMaxSize)return A(v),!1;if(e.opts.imageAllowedTypes.indexOf(te.type.replace(/image\\//g,\"\"))<0)return A(L),!1;var ae;if(e.drag_support.formdata&&(ae=e.drag_support.formdata?new FormData:null),ae){var pe;if(e.opts.imageUploadToS3!==!1){ae.append(\"key\",e.opts.imageUploadToS3.keyStart+new Date().getTime()+\"-\"+(te.name||\"untitled\")),ae.append(\"success_action_status\",\"201\"),ae.append(\"X-Requested-With\",\"xhr\"),ae.append(\"Content-Type\",te.type);for(pe in e.opts.imageUploadToS3.params)e.opts.imageUploadToS3.params.hasOwnProperty(pe)&&ae.append(pe,e.opts.imageUploadToS3.params[pe])}for(pe in e.opts.imageUploadParams)e.opts.imageUploadParams.hasOwnProperty(pe)&&ae.append(pe,e.opts.imageUploadParams[pe]);ae.append(e.opts.imageUploadParam,te,te.name);var ge=e.opts.imageUploadURL;e.opts.imageUploadToS3&&(e.opts.imageUploadToS3.uploadURL?ge=e.opts.imageUploadToS3.uploadURL:ge=\"https://\"+e.opts.imageUploadToS3.region+\".amazonaws.com/\"+e.opts.imageUploadToS3.bucket);var de=e.core.getXHR(ge,e.opts.imageUploadMethod);ce(de,ae,te,B||r)}}}function me(T){e.events.$on(T,\"dragover dragenter\",\".fr-image-upload-layer\",function(){return t(this).addClass(\"fr-drop\"),!1},!0),e.events.$on(T,\"dragleave dragend\",\".fr-image-upload-layer\",function(){return t(this).removeClass(\"fr-drop\"),!1},!0),e.events.$on(T,\"drop\",\".fr-image-upload-layer\",function(B){B.preventDefault(),B.stopPropagation(),t(this).removeClass(\"fr-drop\");var te=B.originalEvent.dataTransfer;if(te&&te.files){var ae=T.data(\"instance\")||e;ae.events.disableBlur(),ae.image.upload(te.files),ae.events.enableBlur()}},!0),e.helpers.isIOS()&&e.events.$on(T,\"touchstart\",'.fr-image-upload-layer input[type=\"file\"]',function(){t(this).trigger(\"click\")},!0),e.events.$on(T,\"change\",'.fr-image-upload-layer input[type=\"file\"]',function(){if(this.files){var B=T.data(\"instance\")||e;B.events.disableBlur(),T.find(\"input:focus\").blur(),B.events.enableBlur(),B.image.upload(this.files,r)}t(this).val(\"\")},!0)}function Ce(T){if(T.is(\"img\")&&T.parents(\".fr-img-caption\").length>0)return T.parents(\".fr-img-caption\")}function Te(T){var B=T.originalEvent.dataTransfer;if(B&&B.files&&B.files.length){var te=B.files[0];if(te&&te.type&&te.type.indexOf(\"image\")!==-1&&e.opts.imageAllowedTypes.indexOf(te.type.replace(/image\\//g,\"\"))>=0){if(!e.opts.imageUpload)return T.preventDefault(),T.stopPropagation(),!1;e.markers.remove(),e.markers.insertAtPoint(T.originalEvent),e.$el.find(\".fr-marker\").replaceWith(t.FE.MARKERS),e.$el.find(\".fr-marker\").length===0&&e.selection.setAtEnd(e.el),e.popups.hideAll();var ae=e.popups.get(\"image.insert\");ae||(ae=Ae()),e.popups.setContainer(\"image.insert\",e.$sc);var pe=T.originalEvent.pageX,ge=T.originalEvent.pageY;return e.opts.iframe&&(ge+=e.$iframe.offset().top,pe+=e.$iframe.offset().left),e.popups.show(\"image.insert\",pe,ge),z(),e.opts.imageAllowedTypes.indexOf(te.type.replace(/image\\//g,\"\"))>=0?(ze(!0),ve(B.files)):A(L),T.preventDefault(),T.stopPropagation(),!1}}}function xe(){e.events.$on(e.$el,e._mousedown,e.el.tagName==\"IMG\"?null:'img:not([contenteditable=\"false\"])',function(T){if(t(this).parents(\"[contenteditable]:not(.fr-element):not(.fr-img-caption):not(body):first\").attr(\"contenteditable\")==\"false\")return!0;e.helpers.isMobile()||e.selection.clear(),Y=!0,e.popups.areVisible()&&e.events.disableBlur(),e.browser.msie&&(e.events.disableBlur(),e.$el.attr(\"contenteditable\",!1)),!e.draggable&&T.type!=\"touchstart\"&&T.preventDefault(),T.stopPropagation()}),e.events.$on(e.$el,e._mouseup,e.el.tagName==\"IMG\"?null:'img:not([contenteditable=\"false\"])',function(T){if(t(this).parents(\"[contenteditable]:not(.fr-element):not(.fr-img-caption):not(body):first\").attr(\"contenteditable\")==\"false\")return!0;Y&&(Y=!1,T.stopPropagation(),e.browser.msie&&(e.$el.attr(\"contenteditable\",!0),e.events.enableBlur()))}),e.events.on(\"keyup\",function(T){if(T.shiftKey&&e.selection.text().replace(/\\n/g,\"\")===\"\"&&e.keys.isArrow(T.which)){var B=e.selection.element(),te=e.selection.endElement();B&&B.tagName==\"IMG\"?N(t(B)):te&&te.tagName==\"IMG\"&&N(t(te))}},!0),e.events.on(\"drop\",Te),e.events.on(\"element.beforeDrop\",Ce),e.events.on(\"mousedown window.mousedown\",it),e.events.on(\"window.touchmove\",P),e.events.on(\"mouseup window.mouseup\",function(){if(r)return ze(),!1;P()}),e.events.on(\"commands.mousedown\",function(T){T.parents(\".fr-toolbar\").length>0&&ze()}),e.events.on(\"image.resizeEnd\",function(){e.opts.iframe&&e.size.syncIframe()}),e.events.on(\"blur image.hideResizer commands.undo commands.redo element.dropped\",function(){Y=!1,ze(!0)}),e.events.on(\"modals.hide\",function(){r&&(ue(),e.selection.clear())}),e.events.on(\"image.resizeEnd\",function(){e.win.getSelection&&N(r)}),e.opts.imageAddNewLine&&e.events.on(\"image.inserted\",function(T){var B=T.get(0);for(B.nextSibling&&B.nextSibling.tagName===\"BR\"&&(B=B.nextSibling);B&&!e.node.isElement(B);)e.node.isLastSibling(B)?B=B.parentNode:B=null;if(e.node.isElement(B))if(e.opts.enter===t.FE.ENTER_BR)T.after(\"<br>\");else{var te=t(e.node.blockParent(T.get(0)));te.after(\"<\"+e.html.defaultTag()+\"><br></\"+e.html.defaultTag()+\">\")}})}function Ae(T){if(T)return e.popups.onRefresh(\"image.insert\",u),e.popups.onHide(\"image.insert\",o),!0;var B,te,ae=\"\";!e.opts.imageUpload&&e.opts.imageInsertButtons.indexOf(\"imageUpload\")!==-1&&e.opts.imageInsertButtons.splice(e.opts.imageInsertButtons.indexOf(\"imageUpload\"),1);var pe=e.button.buildList(e.opts.imageInsertButtons);pe!==\"\"&&(ae='<div class=\"fr-buttons\">'+pe+\"</div>\");var ge=e.opts.imageInsertButtons.indexOf(\"imageUpload\"),de=e.opts.imageInsertButtons.indexOf(\"imageByURL\"),Le=\"\";ge>=0&&(B=\" fr-active\",de>=0&&ge>de&&(B=\"\"),Le='<div class=\"fr-image-upload-layer'+B+' fr-layer\" id=\"fr-image-upload-layer-'+e.id+'\"><strong>'+e.language.translate(\"Drop image\")+\"</strong><br>(\"+e.language.translate(\"or click\")+')<div class=\"fr-form\"><input type=\"file\" accept=\"image/'+e.opts.imageAllowedTypes.join(\", image/\").toLowerCase()+'\" tabIndex=\"-1\" aria-labelledby=\"fr-image-upload-layer-'+e.id+'\" role=\"button\"></div></div>');var Xe=\"\";de>=0&&(B=\" fr-active\",ge>=0&&de>ge&&(B=\"\"),Xe='<div class=\"fr-image-by-url-layer'+B+' fr-layer\" id=\"fr-image-by-url-layer-'+e.id+'\"><div class=\"fr-input-line\"><input id=\"fr-image-by-url-layer-text-'+e.id+'\" type=\"text\" placeholder=\"http://\" tabIndex=\"1\" aria-required=\"true\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"imageInsertByURL\" tabIndex=\"2\" role=\"button\">'+e.language.translate(\"Insert\")+\"</button></div></div>\");var Ge='<div class=\"fr-image-progress-bar-layer fr-layer\"><h3 tabIndex=\"-1\" class=\"fr-message\">Uploading</h3><div class=\"fr-loader\"><span class=\"fr-progress\"></span></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-dismiss\" data-cmd=\"imageDismissError\" tabIndex=\"2\" role=\"button\">OK</button></div></div>',et={buttons:ae,upload_layer:Le,by_url_layer:Xe,progress_bar:Ge};return e.opts.imageInsertButtons.length>=1&&(te=e.popups.create(\"image.insert\",et)),e.$wp&&e.events.$on(e.$wp,\"scroll\",function(){r&&e.popups.isVisible(\"image.insert\")&&ye()}),me(te),te}function Me(){if(r){var T=e.popups.get(\"image.alt\");T.find(\"input\").val(r.attr(\"alt\")||\"\").trigger(\"change\")}}function Ee(){var T=e.popups.get(\"image.alt\");T||(T=Se()),w(),e.popups.refresh(\"image.alt\"),e.popups.setContainer(\"image.alt\",e.$sc);var B=ke();Be()&&(B=B.find(\".fr-img-wrap\")),e.popups.showEl(\"image.alt\",B)}function Se(T){if(T)return e.popups.onRefresh(\"image.alt\",Me),!0;var B=\"\";B='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.imageAltButtons)+\"</div>\";var te=\"\";te='<div class=\"fr-image-alt-layer fr-layer fr-active\" id=\"fr-image-alt-layer-'+e.id+'\"><div class=\"fr-input-line\"><input id=\"fr-image-alt-layer-text-'+e.id+'\" type=\"text\" placeholder=\"'+e.language.translate(\"Alternative Text\")+'\" tabIndex=\"1\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"imageSetAlt\" tabIndex=\"2\" role=\"button\">'+e.language.translate(\"Update\")+\"</button></div></div>\";var ae={buttons:B,alt_layer:te},pe=e.popups.create(\"image.alt\",ae);return e.$wp&&e.events.$on(e.$wp,\"scroll.image-alt\",function(){r&&e.popups.isVisible(\"image.alt\")&&Ee()}),pe}function Re(T){if(r){var B=e.popups.get(\"image.alt\");r.attr(\"alt\",T||B.find(\"input\").val()||\"\"),B.find(\"input:focus\").blur(),N(r)}}function Ke(){var T=e.popups.get(\"image.size\");if(r)if(Be()){var B=r.parent();B.get(0).style.width||(B=r.parent().parent()),T.find('input[name=\"width\"]').val(B.get(0).style.width).trigger(\"change\"),T.find('input[name=\"height\"]').val(B.get(0).style.height).trigger(\"change\")}else T.find('input[name=\"width\"]').val(r.get(0).style.width).trigger(\"change\"),T.find('input[name=\"height\"]').val(r.get(0).style.height).trigger(\"change\")}function Fe(){var T=e.popups.get(\"image.size\");T||(T=Ue()),w(),e.popups.refresh(\"image.size\"),e.popups.setContainer(\"image.size\",e.$sc);var B=ke();Be()&&(B=B.find(\".fr-img-wrap\")),e.popups.showEl(\"image.size\",B)}function Ue(T){if(T)return e.popups.onRefresh(\"image.size\",Ke),!0;var B=\"\";B='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.imageSizeButtons)+\"</div>\";var te=\"\";te='<div class=\"fr-image-size-layer fr-layer fr-active\" id=\"fr-image-size-layer-'+e.id+'\"><div class=\"fr-image-group\"><div class=\"fr-input-line\"><input id=\"fr-image-size-layer-width-'+e.id+'\" type=\"text\" name=\"width\" placeholder=\"'+e.language.translate(\"Width\")+'\" tabIndex=\"1\"></div><div class=\"fr-input-line\"><input id=\"fr-image-size-layer-height'+e.id+'\" type=\"text\" name=\"height\" placeholder=\"'+e.language.translate(\"Height\")+'\" tabIndex=\"1\"></div></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"imageSetSize\" tabIndex=\"2\" role=\"button\">'+e.language.translate(\"Update\")+\"</button></div></div>\";var ae={buttons:B,size_layer:te},pe=e.popups.create(\"image.size\",ae);return e.$wp&&e.events.$on(e.$wp,\"scroll.image-size\",function(){r&&e.popups.isVisible(\"image.size\")&&Fe()}),pe}function We(T,B){if(r){var te=e.popups.get(\"image.size\");T=T||te.find('input[name=\"width\"]').val()||\"\",B=B||te.find('input[name=\"height\"]').val()||\"\";var ae=/^[\\d]+((px)|%)*$/g;r.removeAttr(\"width\").removeAttr(\"height\"),T.match(ae)?r.css(\"width\",T):r.css(\"width\",\"\"),B.match(ae)?r.css(\"height\",B):r.css(\"height\",\"\"),Be()&&(r.parents(\".fr-img-caption\").removeAttr(\"width\").removeAttr(\"height\"),T.match(ae)?r.parents(\".fr-img-caption\").css(\"width\",T):r.parents(\".fr-img-caption\").css(\"width\",\"\"),B.match(ae)?r.parents(\".fr-img-caption\").css(\"height\",B):r.parents(\".fr-img-caption\").css(\"height\",\"\")),te&&te.find(\"input:focus\").blur(),N(r)}}function Qe(T){var B=e.popups.get(\"image.insert\"),te,ae;if(!r&&!e.opts.toolbarInline){var pe=e.$tb.find('.fr-command[data-cmd=\"insertImage\"]');te=pe.offset().left+pe.outerWidth()/2,ae=pe.offset().top+(e.opts.toolbarBottom?10:pe.outerHeight()-10)}else if(r){var ge=ke();Be()&&(ge=ge.find(\".fr-img-wrap\")),ae=ge.offset().top+ge.outerHeight(),te=ge.offset().left+ge.outerWidth()/2}!r&&e.opts.toolbarInline&&(ae=B.offset().top-e.helpers.getPX(B.css(\"margin-top\")),B.hasClass(\"fr-above\")&&(ae+=B.outerHeight())),B.find(\".fr-layer\").removeClass(\"fr-active\"),B.find(\".fr-\"+T+\"-layer\").addClass(\"fr-active\"),e.popups.show(\"image.insert\",te,ae,r?r.outerHeight():0),e.accessibility.focusPopup(B)}function je(T){var B=e.popups.get(\"image.insert\");B.find(\".fr-image-upload-layer\").hasClass(\"fr-active\")&&T.addClass(\"fr-active\").attr(\"aria-pressed\",!0)}function fe(T){var B=e.popups.get(\"image.insert\");B.find(\".fr-image-by-url-layer\").hasClass(\"fr-active\")&&T.addClass(\"fr-active\").attr(\"aria-pressed\",!0)}function be(T,B,te,ae){return T.pageX=B,y.call(this,T),T.pageX=T.pageX+te*Math.floor(Math.pow(1.1,ae)),c.call(this,T),k.call(this,T),++ae}function _e(){var T;if(e.shared.$image_resizer?(O=e.shared.$image_resizer,X=e.shared.$img_overlay,e.events.on(\"destroy\",function(){O.removeClass(\"fr-active\").appendTo(t(\"body:first\"))},!0)):(e.shared.$image_resizer=t('<div class=\"fr-image-resizer\"></div>'),O=e.shared.$image_resizer,e.events.$on(O,\"mousedown\",function(pe){pe.stopPropagation()},!0),e.opts.imageResize&&(O.append(M(\"nw\")+M(\"ne\")+M(\"sw\")+M(\"se\")),e.shared.$img_overlay=t('<div class=\"fr-image-overlay\"></div>'),X=e.shared.$img_overlay,T=O.get(0).ownerDocument,t(T).find(\"body:first\").append(X))),e.events.on(\"shared.destroy\",function(){O.html(\"\").removeData().remove(),O=null,e.opts.imageResize&&(X.remove(),X=null)},!0),e.helpers.isMobile()||e.events.$on(t(e.o_win),\"resize\",function(){r&&!r.hasClass(\"fr-uploading\")?ze(!0):r&&(p(),ye(),z(!1))}),e.opts.imageResize){T=O.get(0).ownerDocument,e.events.$on(O,e._mousedown,\".fr-handler\",y),e.events.$on(t(T),e._mousemove,c),e.events.$on(t(T.defaultView||T.parentWindow),e._mouseup,k),e.events.$on(X,\"mouseleave\",k);var B=1,te=null,ae=0;e.events.on(\"keydown\",function(pe){if(r){var ge=navigator.userAgent.indexOf(\"Mac OS X\")!=-1?pe.metaKey:pe.ctrlKey,de=pe.which;(de!==te||pe.timeStamp-ae>200)&&(B=1),(de==t.FE.KEYCODE.EQUALS||e.browser.mozilla&&de==t.FE.KEYCODE.FF_EQUALS)&&ge&&!pe.altKey?B=be.call(this,pe,1,1,B):(de==t.FE.KEYCODE.HYPHEN||e.browser.mozilla&&de==t.FE.KEYCODE.FF_HYPHEN)&&ge&&!pe.altKey?B=be.call(this,pe,2,-1,B):!e.keys.ctrlKey(pe)&&de==t.FE.KEYCODE.ENTER&&(r.before(\"<br>\"),N(r)),te=de,ae=pe.timeStamp}},!0),e.events.on(\"keyup\",function(){B=1})}}function De(T){T=T||ke(),T&&e.events.trigger(\"image.beforeRemove\",[T])!==!1&&(e.popups.hideAll(),ue(),ze(!0),e.undo.canDo()||e.undo.saveStep(),T.get(0)==e.el?T.removeAttr(\"src\"):(T.get(0).parentNode&&T.get(0).parentNode.tagName==\"A\"?(e.selection.setBefore(T.get(0).parentNode)||e.selection.setAfter(T.get(0).parentNode)||T.parent().after(t.FE.MARKERS),t(T.get(0).parentNode).remove()):(e.selection.setBefore(T.get(0))||e.selection.setAfter(T.get(0))||T.after(t.FE.MARKERS),T.remove()),e.html.fillEmptyBlocks(),e.selection.restore()),e.undo.saveStep())}function Ye(T){var B=T.which;if(r&&(B==t.FE.KEYCODE.BACKSPACE||B==t.FE.KEYCODE.DELETE))return T.preventDefault(),T.stopPropagation(),De(),!1;if(r&&B==t.FE.KEYCODE.ESC){var te=r;return ze(!0),e.selection.setAfter(te.get(0)),e.selection.restore(),T.preventDefault(),!1}else if(r&&(B==t.FE.KEYCODE.ARROW_LEFT||B==t.FE.KEYCODE.ARROW_RIGHT)){var ae=r.get(0);return ze(!0),B==t.FE.KEYCODE.ARROW_LEFT?e.selection.setBefore(ae):e.selection.setAfter(ae),e.selection.restore(),T.preventDefault(),!1}else if(r&&B!=t.FE.KEYCODE.F10&&!e.keys.isBrowserAction(T))return T.preventDefault(),T.stopPropagation(),!1}function Pe(T){if(T&&T.tagName==\"IMG\"){if(e.node.hasClass(T,\"fr-uploading\")||e.node.hasClass(T,\"fr-error\")?T.parentNode.removeChild(T):e.node.hasClass(T,\"fr-draggable\")&&T.classList.remove(\"fr-draggable\"),T.parentNode&&T.parentNode.parentNode&&e.node.hasClass(T.parentNode.parentNode,\"fr-img-caption\")){var B=T.parentNode.parentNode;B.removeAttribute(\"contenteditable\"),B.removeAttribute(\"draggable\"),B.classList.remove(\"fr-draggable\");var te=T.nextSibling;te&&te.removeAttribute(\"contenteditable\")}}else if(T&&T.nodeType==Node.ELEMENT_NODE)for(var ae=T.querySelectorAll(\"img.fr-uploading, img.fr-error, img.fr-draggable\"),pe=0;pe<ae.length;pe++)Pe(ae[pe])}function tt(){if(xe(),e.el.tagName==\"IMG\"&&e.$el.addClass(\"fr-view\"),e.events.$on(e.$el,e.helpers.isMobile()&&!e.helpers.isWindowsPhone()?\"touchend\":\"click\",e.el.tagName==\"IMG\"?null:'img:not([contenteditable=\"false\"])',Ve),e.helpers.isMobile()&&(e.events.$on(e.$el,\"touchstart\",e.el.tagName==\"IMG\"?null:'img:not([contenteditable=\"false\"])',function(){Ne=!1}),e.events.$on(e.$el,\"touchmove\",function(){Ne=!0})),e.$wp?(e.events.on(\"window.keydown keydown\",Ye,!0),e.events.on(\"keyup\",function(B){if(r&&B.which==t.FE.KEYCODE.ENTER)return!1},!0),e.events.$on(e.$el,\"keydown\",function(){var B=e.selection.element();B.nodeType===Node.TEXT_NODE&&(B=B.parentNode),e.node.hasClass(B,\"fr-inner\")||(e.node.hasClass(B,\"fr-img-caption\")||(B=t(B).parents(\".fr-img-caption\").get(0)),e.node.hasClass(B,\"fr-img-caption\")&&(t(B).after(t.FE.INVISIBLE_SPACE+t.FE.MARKERS),e.selection.restore()))})):e.events.$on(e.$win,\"keydown\",Ye),e.events.on(\"toolbar.esc\",function(){if(r){if(e.$wp)e.events.disableBlur(),e.events.focus();else{var B=r;ze(!0),e.selection.setAfter(B.get(0)),e.selection.restore()}return!1}},!0),e.events.on(\"toolbar.focusEditor\",function(){if(r)return!1},!0),e.events.on(\"window.cut window.copy\",function(B){if(r&&e.popups.isVisible(\"image.edit\")&&!e.popups.get(\"image.edit\").find(\":focus\").length){var te=ke();Be()?(te.before(t.FE.START_MARKER),te.after(t.FE.END_MARKER),e.selection.restore(),e.paste.saveCopiedText(te.get(0).outerHTML,te.text())):(ue(),e.paste.saveCopiedText(r.get(0).outerHTML,r.attr(\"alt\"))),B.type==\"copy\"?setTimeout(function(){N(r)}):(ze(!0),e.undo.saveStep(),setTimeout(function(){e.undo.saveStep()},0))}},!0),e.browser.msie&&e.events.on(\"keydown\",function(B){if(!(e.selection.isCollapsed()&&r))return!0;var te=B.which;te==t.FE.KEYCODE.C&&e.keys.ctrlKey(B)?e.events.trigger(\"window.copy\"):te==t.FE.KEYCODE.X&&e.keys.ctrlKey(B)&&e.events.trigger(\"window.cut\")}),e.events.$on(t(e.o_win),\"keydown\",function(B){var te=B.which;if(r&&te==t.FE.KEYCODE.BACKSPACE)return B.preventDefault(),!1}),e.events.$on(e.$win,\"keydown\",function(B){var te=B.which;r&&r.hasClass(\"fr-uploading\")&&te==t.FE.KEYCODE.ESC&&r.trigger(\"abortUpload\")}),e.events.on(\"destroy\",function(){r&&r.hasClass(\"fr-uploading\")&&r.trigger(\"abortUpload\")}),e.events.on(\"paste.before\",st),e.events.on(\"paste.beforeCleanup\",rt),e.events.on(\"paste.after\",qe),e.events.on(\"html.set\",i),e.events.on(\"html.inserted\",i),i(),e.events.on(\"destroy\",function(){S=[]}),e.events.on(\"html.processGet\",Pe),e.opts.imageOutputSize){var T;e.events.on(\"html.beforeGet\",function(){T=e.el.querySelectorAll(\"img\");for(var B=0;B<T.length;B++){var te=T[B].style.width||t(T[B]).width(),ae=T[B].style.height||t(T[B]).height();te&&T[B].setAttribute(\"width\",(\"\"+te).replace(/px/,\"\")),ae&&T[B].setAttribute(\"height\",(\"\"+ae).replace(/px/,\"\"))}})}e.opts.iframe&&e.events.on(\"image.loaded\",e.size.syncIframe),e.$wp&&(s(),e.events.on(\"contentChanged\",s)),e.events.$on(t(e.o_win),\"orientationchange.image\",function(){setTimeout(function(){r&&N(r)},100)}),Q(!0),Ae(!0),Ue(!0),Se(!0),e.events.on(\"node.remove\",function(B){if(B.get(0).tagName==\"IMG\")return De(B),!1})}function Je(T){if(e.events.trigger(\"image.beforePasteUpload\",[T])===!1)return!1;r=t(T),p(),E(),ye(),z(),r.one(\"load\",function(){p(),z()});for(var B=t(T).attr(\"src\").split(\",\"),te=atob(B[1]),ae=[],pe=0;pe<te.length;pe++)ae.push(te.charCodeAt(pe));var ge=new Blob([new Uint8Array(ae)],{type:B[0].replace(/data\\:/g,\"\").replace(/;base64/g,\"\")});ve([ge],r)}function qe(){e.opts.imagePaste?e.$el.find(\"img[data-fr-image-pasted]\").each(function(T,B){if(e.opts.imagePasteProcess){var te=e.opts.imageDefaultWidth;te&&te!=\"auto\"&&(te=te+(e.opts.imageResizeWithPercent?\"%\":\"px\")),t(B).css(\"width\",te).removeClass(\"fr-dii fr-dib fr-fir fr-fil\"),K(t(B),e.opts.imageDefaultDisplay,e.opts.imageDefaultAlign)}if(B.src.indexOf(\"data:\")===0)Je(B);else if(B.src.indexOf(\"blob:\")===0||B.src.indexOf(\"http\")===0&&e.opts.imageUploadRemoteUrls){var ae=new Image;ae.crossOrigin=\"Anonymous\",ae.onload=function(){var pe=e.o_doc.createElement(\"CANVAS\"),ge=pe.getContext(\"2d\");pe.height=this.naturalHeight,pe.width=this.naturalWidth,ge.drawImage(this,0,0),setTimeout(function(){Je(B)},0),B.src=pe.toDataURL(\"image/jpeg\")},ae.src=B.src}else B.src.indexOf(\"http\")!==0||B.src.indexOf(\"https://mail.google.com/mail\")===0?(e.selection.save(),t(B).remove(),e.selection.restore()):t(B).removeAttr(\"data-fr-image-pasted\")}):e.$el.find(\"img[data-fr-image-pasted]\").remove()}function at(T){var B=T.target.result,te=e.opts.imageDefaultWidth;te&&te!=\"auto\"&&(te=te+(e.opts.imageResizeWithPercent?\"%\":\"px\")),e.undo.saveStep(),e.html.insert('<img data-fr-image-pasted=\"true\" src=\"'+B+'\"'+(te?' style=\"width: '+te+';\"':\"\")+\">\");var ae=e.$el.find('img[data-fr-image-pasted=\"true\"]');ae&&K(ae,e.opts.imageDefaultDisplay,e.opts.imageDefaultAlign),e.events.trigger(\"paste.after\")}function nt(T){var B=new FileReader;B.onload=at,B.readAsDataURL(T)}function st(T){if(T&&T.clipboardData&&T.clipboardData.items){var B=null;if(T.clipboardData.types&&T.clipboardData.types.indexOf(\"text/rtf\")!=-1||T.clipboardData.getData(\"text/rtf\"))B=T.clipboardData.items[0].getAsFile();else for(var te=0;te<T.clipboardData.items.length&&(B=T.clipboardData.items[te].getAsFile(),!B);te++);if(B)return nt(B),!1}}function rt(T){return T=T.replace(/<img /gi,'<img data-fr-image-pasted=\"true\" '),T}var Ne;function Ve(T){if(t(this).parents(\"[contenteditable]:not(.fr-element):not(.fr-img-caption):not(body):first\").attr(\"contenteditable\")==\"false\"||T&&T.type==\"touchend\"&&Ne)return!0;if(T&&e.edit.isDisabled())return T.stopPropagation(),T.preventDefault(),!1;for(var B=0;B<t.FE.INSTANCES.length;B++)t.FE.INSTANCES[B]!=e&&t.FE.INSTANCES[B].events.trigger(\"image.hideResizer\");e.toolbar.disable(),T&&(T.stopPropagation(),T.preventDefault()),e.helpers.isMobile()&&(e.events.disableBlur(),e.$el.blur(),e.events.enableBlur()),e.opts.iframe&&e.size.syncIframe(),r=t(this),ue(),p(),E(),e.browser.msie?(e.popups.areVisible()&&e.events.disableBlur(),e.win.getSelection&&(e.win.getSelection().removeAllRanges(),e.win.getSelection().addRange(e.doc.createRange()))):e.selection.clear(),e.helpers.isIOS()&&(e.events.disableBlur(),e.$el.blur()),e.button.bulkRefresh(),e.events.trigger(\"video.hideResizer\")}function ze(T){r&&(D()||T===!0)&&(e.toolbar.enable(),O.removeClass(\"fr-active\"),e.popups.hide(\"image.edit\"),r=null,P(),x=null,X&&X.hide())}var $e=!1;function it(){$e=!0}function P(){$e=!1}function D(){return $e}function K(T,B,te){!e.opts.htmlUntouched&&e.opts.useClasses?(T.removeClass(\"fr-fil fr-fir fr-dib fr-dii\"),te&&T.addClass(\"fr-fi\"+te[0]),B&&T.addClass(\"fr-di\"+B[0])):B==\"inline\"?(T.css({display:\"inline-block\",verticalAlign:\"bottom\",margin:e.opts.imageDefaultMargin}),te==\"center\"?T.css({float:\"none\",marginBottom:\"\",marginTop:\"\",maxWidth:\"calc(100% - \"+2*e.opts.imageDefaultMargin+\"px)\",textAlign:\"center\"}):te==\"left\"?T.css({float:\"left\",marginLeft:0,maxWidth:\"calc(100% - \"+e.opts.imageDefaultMargin+\"px)\",textAlign:\"left\"}):T.css({float:\"right\",marginRight:0,maxWidth:\"calc(100% - \"+e.opts.imageDefaultMargin+\"px)\",textAlign:\"right\"})):B==\"block\"&&(T.css({display:\"block\",float:\"none\",verticalAlign:\"top\",margin:e.opts.imageDefaultMargin+\"px auto\",textAlign:\"center\"}),te==\"left\"?T.css({marginLeft:0,textAlign:\"left\"}):te==\"right\"&&T.css({marginRight:0,textAlign:\"right\"}))}function q(T){var B=ke();B.removeClass(\"fr-fir fr-fil\"),!e.opts.htmlUntouched&&e.opts.useClasses?T==\"left\"?B.addClass(\"fr-fil\"):T==\"right\"&&B.addClass(\"fr-fir\"):K(B,ne(),T),ue(),p(),E(),e.selection.clear()}function j(T){if(typeof T>\"u\"&&(T=ke()),T){if(T.hasClass(\"fr-fil\"))return\"left\";if(T.hasClass(\"fr-fir\"))return\"right\";if(T.hasClass(\"fr-dib\")||T.hasClass(\"fr-dii\"))return\"center\";var B=T.css(\"float\");if(T.css(\"float\",\"none\"),T.css(\"display\")==\"block\"){if(T.css(\"float\",\"\"),T.css(\"float\")!=B&&T.css(\"float\",B),parseInt(T.css(\"margin-left\"),10)===0)return\"left\";if(parseInt(T.css(\"margin-right\"),10)===0)return\"right\"}else{if(T.css(\"float\",\"\"),T.css(\"float\")!=B&&T.css(\"float\",B),T.css(\"float\")==\"left\")return\"left\";if(T.css(\"float\")==\"right\")return\"right\"}}return\"center\"}function ne(T){typeof T>\"u\"&&(T=ke());var B=T.css(\"float\");return T.css(\"float\",\"none\"),T.css(\"display\")==\"block\"?(T.css(\"float\",\"\"),T.css(\"float\")!=B&&T.css(\"float\",B),\"block\"):(T.css(\"float\",\"\"),T.css(\"float\")!=B&&T.css(\"float\",B),\"inline\")}function le(T){r&&T.find(\"> *:first\").replaceWith(e.icon.create(\"image-align-\"+j()))}function ie(T,B){r&&B.find('.fr-command[data-param1=\"'+j()+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}function re(T){var B=ke();B.removeClass(\"fr-dii fr-dib\"),!e.opts.htmlUntouched&&e.opts.useClasses?T==\"inline\"?B.addClass(\"fr-dii\"):T==\"block\"&&B.addClass(\"fr-dib\"):K(B,T,j()),ue(),p(),E(),e.selection.clear()}function oe(T,B){r&&B.find('.fr-command[data-param1=\"'+ne()+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}function ye(){var T=e.popups.get(\"image.insert\");T||(T=Ae()),e.popups.isVisible(\"image.insert\")||(w(),e.popups.refresh(\"image.insert\"),e.popups.setContainer(\"image.insert\",e.$sc));var B=ke();Be()&&(B=B.find(\".fr-img-wrap\")),e.popups.showEl(\"image.insert\",B)}function ue(){if(r){e.events.disableBlur(),e.selection.clear();var T=e.doc.createRange();T.selectNode(r.get(0)),e.browser.msie&&T.collapse(!0);var B=e.selection.get();B.addRange(T),e.events.enableBlur()}}function we(){r?(e.events.disableBlur(),t(\".fr-popup input:focus\").blur(),N(r)):(e.events.disableBlur(),e.selection.restore(),e.events.enableBlur(),e.popups.hide(\"image.insert\"),e.toolbar.showInline())}function Oe(){return r}function ke(){return Be()?r.parents(\".fr-img-caption:first\"):r}function Ie(T){r=T}function He(T,B,te){if(typeof B>\"u\"&&(B=e.opts.imageStyles),typeof te>\"u\"&&(te=e.opts.imageMultipleStyles),!r)return!1;var ae=ke();if(!te){var pe=Object.keys(B);pe.splice(pe.indexOf(T),1),ae.removeClass(pe.join(\" \"))}typeof B[T]==\"object\"?(ae.removeAttr(\"style\"),ae.css(B[T].style)):ae.toggleClass(T),N(r)}function Be(){return r?r.parents(\".fr-img-caption\").length>0:!1}function Ze(){var T;if(r&&!Be()){T=r,r.parent().is(\"a\")&&(T=r.parent());var B=T.width();T.wrap(\"<span \"+(e.browser.mozilla?\"\":'contenteditable=\"false\"')+'class=\"fr-img-caption '+r.attr(\"class\")+'\" style=\"'+(e.opts.useClasses?\"\":T.attr(\"style\"))+'\" draggable=\"false\"></span>'),T.wrap('<span class=\"fr-img-wrap\"></span>'),T.after('<span class=\"fr-inner\"'+(e.browser.mozilla?\"\":' contenteditable=\"true\"')+\">\"+t.FE.START_MARKER+\"Image caption\"+t.FE.END_MARKER+\"</span>\"),r.removeAttr(\"class\").removeAttr(\"style\").removeAttr(\"width\"),r.parents(\".fr-img-caption\").css(\"width\",B+\"px\"),ze(!0),e.selection.restore()}else T=ke(),r.insertAfter(T),r.attr(\"class\",T.attr(\"class\").replace(\"fr-img-caption\",\"\")).attr(\"style\",T.attr(\"style\")),T.remove(),N(r)}return{_init:tt,showInsertPopup:V,showLayer:Qe,refreshUploadButton:je,refreshByURLButton:fe,upload:ve,insertByURL:W,align:q,refreshAlign:le,refreshAlignOnShow:ie,display:re,refreshDisplayOnShow:oe,replace:ye,back:we,get:Oe,getEl:ke,set:Ie,insert:H,showProgressBar:z,remove:De,hideProgressBar:w,applyStyle:He,showAltPopup:Ee,showSizePopup:Fe,setAlt:Re,setSize:We,toggleCaption:Ze,hasCaption:Be,exitEdit:ze,edit:N}},t.FE.DefineIcon(\"insertImage\",{NAME:\"image\"}),t.FE.RegisterShortcut(t.FE.KEYCODE.P,\"insertImage\",null,\"P\"),t.FE.RegisterCommand(\"insertImage\",{title:\"Insert Image\",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"image.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"image.insert\")):this.image.showInsertPopup()},plugin:\"image\"}),t.FE.DefineIcon(\"imageUpload\",{NAME:\"upload\"}),t.FE.RegisterCommand(\"imageUpload\",{title:\"Upload Image\",undo:!1,focus:!1,toggle:!0,callback:function(){this.image.showLayer(\"image-upload\")},refresh:function(e){this.image.refreshUploadButton(e)}}),t.FE.DefineIcon(\"imageByURL\",{NAME:\"link\"}),t.FE.RegisterCommand(\"imageByURL\",{title:\"By URL\",undo:!1,focus:!1,toggle:!0,callback:function(){this.image.showLayer(\"image-by-url\")},refresh:function(e){this.image.refreshByURLButton(e)}}),t.FE.RegisterCommand(\"imageInsertByURL\",{title:\"Insert Image\",undo:!0,refreshAfterCallback:!1,callback:function(){this.image.insertByURL()},refresh:function(e){var n=this.image.get();n?e.text(this.language.translate(\"Replace\")):e.text(this.language.translate(\"Insert\"))}}),t.FE.DefineIcon(\"imageDisplay\",{NAME:\"star-o\"}),t.FE.RegisterCommand(\"imageDisplay\",{title:\"Display\",type:\"dropdown\",options:{inline:\"Inline\",block:\"Break Text\"},callback:function(e,n){this.image.display(n)},refresh:function(e){this.opts.imageTextNear||e.addClass(\"fr-hidden\")},refreshOnShow:function(e,n){this.image.refreshDisplayOnShow(e,n)}}),t.FE.DefineIcon(\"image-align\",{NAME:\"align-left\"}),t.FE.DefineIcon(\"image-align-left\",{NAME:\"align-left\"}),t.FE.DefineIcon(\"image-align-right\",{NAME:\"align-right\"}),t.FE.DefineIcon(\"image-align-center\",{NAME:\"align-justify\"}),t.FE.DefineIcon(\"imageAlign\",{NAME:\"align-justify\"}),t.FE.RegisterCommand(\"imageAlign\",{type:\"dropdown\",title:\"Align\",options:{left:\"Align Left\",center:\"None\",right:\"Align Right\"},html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=t.FE.COMMANDS.imageAlign.options;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command fr-title\" tabIndex=\"-1\" role=\"option\" data-cmd=\"imageAlign\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.icon.create(\"image-align-\"+r)+'<span class=\"fr-sr-only\">'+this.language.translate(n[r])+\"</span></a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.image.align(n)},refresh:function(e){this.image.refreshAlign(e)},refreshOnShow:function(e,n){this.image.refreshAlignOnShow(e,n)}}),t.FE.DefineIcon(\"imageReplace\",{NAME:\"exchange\",FA5NAME:\"exchange-alt\"}),t.FE.RegisterCommand(\"imageReplace\",{title:\"Replace\",undo:!1,focus:!1,popup:!0,refreshAfterCallback:!1,callback:function(){this.image.replace()}}),t.FE.DefineIcon(\"imageRemove\",{NAME:\"trash\"}),t.FE.RegisterCommand(\"imageRemove\",{title:\"Remove\",callback:function(){this.image.remove()}}),t.FE.DefineIcon(\"imageBack\",{NAME:\"arrow-left\"}),t.FE.RegisterCommand(\"imageBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,callback:function(){this.image.back()},refresh:function(e){var n=this.image.get();!n&&!this.opts.toolbarInline?(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\")):(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\"))}}),t.FE.RegisterCommand(\"imageDismissError\",{title:\"OK\",undo:!1,callback:function(){this.image.hideProgressBar(!0)}}),t.FE.DefineIcon(\"imageStyle\",{NAME:\"magic\"}),t.FE.RegisterCommand(\"imageStyle\",{title:\"Style\",type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.imageStyles;for(var r in n)if(n.hasOwnProperty(r)){var O=n[r];typeof O==\"object\"&&(O=O.title),e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"imageStyle\" data-param1=\"'+r+'\">'+this.language.translate(O)+\"</a></li>\"}return e+=\"</ul>\",e},callback:function(e,n){this.image.applyStyle(n)},refreshOnShow:function(e,n){var r=this.image.getEl();r&&n.find(\".fr-command\").each(function(){var O=t(this).data(\"param1\"),x=r.hasClass(O);t(this).toggleClass(\"fr-active\",x).attr(\"aria-selected\",x)})}}),t.FE.DefineIcon(\"imageAlt\",{NAME:\"info\"}),t.FE.RegisterCommand(\"imageAlt\",{undo:!1,focus:!1,popup:!0,title:\"Alternative Text\",callback:function(){this.image.showAltPopup()}}),t.FE.RegisterCommand(\"imageSetAlt\",{undo:!0,focus:!1,title:\"Update\",refreshAfterCallback:!1,callback:function(){this.image.setAlt()}}),t.FE.DefineIcon(\"imageSize\",{NAME:\"arrows-alt\"}),t.FE.RegisterCommand(\"imageSize\",{undo:!1,focus:!1,popup:!0,title:\"Change Size\",callback:function(){this.image.showSizePopup()}}),t.FE.RegisterCommand(\"imageSetSize\",{undo:!0,focus:!1,title:\"Update\",refreshAfterCallback:!1,callback:function(){this.image.setSize()}}),t.FE.DefineIcon(\"imageCaption\",{NAME:\"commenting-o\",FA5NAME:\"comment-alt\"}),t.FE.RegisterCommand(\"imageCaption\",{undo:!0,focus:!1,title:\"Image Caption\",refreshAfterCallback:!0,callback:function(){this.image.toggleCaption()},refresh:function(e){this.image.get()&&e.toggleClass(\"fr-active\",this.image.hasCaption())}})})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{inlineStyles:{\"fr-class-code\":\"Code\",\"fr-class-highlighted\":\"Highlighted\",\"fr-class-transparency\":\"Transparent\"}}),t.FE.PLUGINS.inlineStyle=function(e){function n(O){e.format.toggle(\"span\",{class:O})}function r(O,x){x.find(\".fr-command\").each(function(){var X=t(this).data(\"param1\"),Y=e.format.is(\"span\",{class:X});t(this).toggleClass(\"fr-active\",Y).attr(\"aria-selected\",Y)})}return{apply:n,refreshOnShow:r}},t.FE.RegisterCommand(\"inlineStyle\",{type:\"dropdown\",title:\"Inline Class\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.inlineStyles;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"inlineStyle\" data-param1=\"'+r+'\" title=\"'+n[r]+'\">'+n[r]+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.inlineStyle.apply(n)},refreshOnShow:function(e,n){this.inlineStyle.refreshOnShow(e,n)},plugin:\"inlineStyle\"}),t.FE.DefineIcon(\"inlineStyle\",{NAME:\"tag\"})})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{inlineStylesRaw:{\"Big Red\":\"font-size: 20px; color: red;\",\"Small Blue\":\"font-size: 14px; color: blue;\"}}),t.FE.PLUGINS.inlineStyleRaw=function(e){function n(r){if(e.selection.text()!==\"\")for(var O=r.split(\";\"),x=0;x<O.length;x++){var X=O[x].split(\":\");O[x].length&&X.length==2&&e.format.applyStyle(X[0].trim(),X[1].trim())}else e.html.insert('<span style=\"'+r+'\">'+t.FE.INVISIBLE_SPACE+t.FE.MARKERS+\"</span>\")}return{apply:n}},t.FE.RegisterCommand(\"inlineStyleRaw\",{type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.inlineStylesRaw;for(var r in n)if(n.hasOwnProperty(r)){var O=n[r]+(n[r].indexOf(\"display:block;\")===-1?\" display:block;\":\"\");e+='<li role=\"presentation\"><span style=\"'+O+'\" role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"inlineStyleRaw\" data-param1=\"'+n[r]+'\" title=\"'+this.language.translate(r)+'\">'+this.language.translate(r)+\"</a></span></li>\"}return e+=\"</ul>\",e},title:\"Inline Style\",callback:function(e,n){this.inlineStyleRaw.apply(n)},plugin:\"inlineStyleRaw\"}),t.FE.DefineIcon(\"inlineStyleRaw\",{NAME:\"paint-brush\"})})(jQuery);(function(t){t.extend(t.FE.POPUP_TEMPLATES,{\"link.edit\":\"[_BUTTONS_]\",\"link.insert\":\"[_BUTTONS_][_INPUT_LAYER_]\"}),t.extend(t.FE.DEFAULTS,{linkEditButtons:[\"linkOpen\",\"linkStyle\",\"linkEdit\",\"linkRemove\"],linkInsertButtons:[],linkAttributes:{},linkAutoPrefix:\"http://\",linkStyles:{\"fr-green\":\"Green\",\"fr-strong\":\"Thick\"},linkMultipleStyles:!0,linkConvertEmailAddress:!0,linkAlwaysBlank:!1,linkAlwaysNoFollow:!1,linkNoOpener:!0,linkNoReferrer:!0,linkList:[{text:\"Google\",href:\"https://google.com\",target:\"_blank\"},{displayText:\"Facebook\",href:\"https://facebook.com\"}],linkText:!0}),t.FE.PLUGINS.link=function(e){function n(){var f=e.image?e.image.get():null;if(!f&&e.$wp){var i=e.selection.ranges(0).commonAncestorContainer;try{i&&(i.contains&&i.contains(e.el)||!e.el.contains(i)||e.el==i)&&(i=null)}catch{i=null}if(i&&i.tagName===\"A\")return i;var S=e.selection.element(),s=e.selection.endElement();S.tagName!=\"A\"&&!e.node.isElement(S)&&(S=t(S).parentsUntil(e.$el,\"a:first\").get(0)),s.tagName!=\"A\"&&!e.node.isElement(s)&&(s=t(s).parentsUntil(e.$el,\"a:first\").get(0));try{s&&(s.contains&&s.contains(e.el)||!e.el.contains(s)||e.el==s)&&(s=null)}catch{s=null}try{S&&(S.contains&&S.contains(e.el)||!e.el.contains(S)||e.el==S)&&(S=null)}catch{S=null}return s&&s==S&&s.tagName==\"A\"?(e.browser.msie||e.helpers.isMobile())&&(e.selection.info(S).atEnd||e.selection.info(S).atStart)?null:S:null}else{if(e.el.tagName==\"A\")return e.el;if(f&&f.get(0).parentNode&&f.get(0).parentNode.tagName==\"A\")return f.get(0).parentNode}}function r(){var f=e.image?e.image.get():null,i=[];if(f)f.get(0).parentNode.tagName==\"A\"&&i.push(f.get(0).parentNode);else{var S,s,p,M;if(e.win.getSelection){var a=e.win.getSelection();if(a.getRangeAt&&a.rangeCount){M=e.doc.createRange();for(var y=0;y<a.rangeCount;++y)if(S=a.getRangeAt(y),s=S.commonAncestorContainer,s&&s.nodeType!=1&&(s=s.parentNode),s&&s.nodeName.toLowerCase()==\"a\")i.push(s);else{p=s.getElementsByTagName(\"a\");for(var c=0;c<p.length;++c)M.selectNodeContents(p[c]),M.compareBoundaryPoints(S.END_TO_START,S)<1&&M.compareBoundaryPoints(S.START_TO_END,S)>-1&&i.push(p[c])}}}else if(e.doc.selection&&e.doc.selection.type!=\"Control\")if(S=e.doc.selection.createRange(),s=S.parentElement(),s.nodeName.toLowerCase()==\"a\")i.push(s);else{p=s.getElementsByTagName(\"a\"),M=e.doc.body.createTextRange();for(var k=0;k<p.length;++k)M.moveToElementText(p[k]),M.compareEndPoints(\"StartToEnd\",S)>-1&&M.compareEndPoints(\"EndToStart\",S)<1&&i.push(p[k])}}return i}function O(f){if(e.core.hasFocus()){if(X(),f&&f.type===\"keyup\"&&(f.altKey||f.which==t.FE.KEYCODE.ALT))return!0;setTimeout(function(){if(!f||f&&(f.which==1||f.type!=\"mouseup\")){var i=n(),S=e.image?e.image.get():null;if(i&&!S){if(e.image){var s=e.node.contents(i);if(s.length==1&&s[0].tagName==\"IMG\"){var p=e.selection.ranges(0);return p.startOffset===0&&p.endOffset===0?t(i).before(t.FE.MARKERS):t(i).after(t.FE.MARKERS),e.selection.restore(),!1}}f&&f.stopPropagation(),x(i)}}},e.helpers.isIOS()?100:0)}}function x(f){var i=e.popups.get(\"link.edit\");i||(i=Y());var S=t(f);e.popups.isVisible(\"link.edit\")||e.popups.refresh(\"link.edit\"),e.popups.setContainer(\"link.edit\",e.$sc),e.popups.showEl(\"link.edit\",S)}function X(){e.popups.hide(\"link.edit\")}function Y(){var f=\"\";e.opts.linkEditButtons.length>=1&&(e.el.tagName==\"A\"&&e.opts.linkEditButtons.indexOf(\"linkRemove\")>=0&&e.opts.linkEditButtons.splice(e.opts.linkEditButtons.indexOf(\"linkRemove\"),1),f='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.linkEditButtons)+\"</div>\");var i={buttons:f},S=e.popups.create(\"link.edit\",i);return e.$wp&&e.events.$on(e.$wp,\"scroll.link-edit\",function(){n()&&e.popups.isVisible(\"link.edit\")&&x(n())}),S}function U(){}function _(){var f=e.popups.get(\"link.insert\"),i=n();if(i){var S=t(i),s=f.find('input.fr-link-attr[type=\"text\"]'),p=f.find('input.fr-link-attr[type=\"checkbox\"]'),M,a;for(M=0;M<s.length;M++)a=t(s[M]),a.val(S.attr(a.attr(\"name\")||\"\"));for(p.prop(\"checked\",!1),M=0;M<p.length;M++)a=t(p[M]),S.attr(a.attr(\"name\"))==a.data(\"checked\")&&a.prop(\"checked\",!0);f.find('input.fr-link-attr[type=\"text\"][name=\"text\"]').val(S.text())}else f.find('input.fr-link-attr[type=\"text\"]').val(\"\"),f.find('input.fr-link-attr[type=\"checkbox\"]').prop(\"checked\",!1),f.find('input.fr-link-attr[type=\"text\"][name=\"text\"]').val(e.selection.text());f.find(\"input.fr-link-attr\").trigger(\"change\");var y=e.image?e.image.get():null;y?f.find('.fr-link-attr[name=\"text\"]').parent().hide():f.find('.fr-link-attr[name=\"text\"]').parent().show()}function F(){var f=e.$vtb?e.$vtb.find('[data-cmd=\"richeditor-toolbar-insertLink\"]'):e.$tb.find('.fr-command[data-cmd=\"insertLink\"]');f.is(\":visible\")||(f=t('[data-cmd=\"richeditor-toolbar-insertLink\"]:first'));var i=e.popups.get(\"link.insert\");i||(i=d()),i.hasClass(\"fr-active\")||(e.popups.refresh(\"link.insert\"),e.popups.setContainer(\"link.insert\",e.$sc),e.popups.showElToolbar(\"link.insert\",f))}function d(f){if(f)return e.popups.onRefresh(\"link.insert\",_),e.popups.onHide(\"link.insert\",U),!0;var i=\"\";e.toolbar.hasButton(\"insertPageLink\")&&e.opts.linkInsertButtons.length>=1&&(i='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.linkInsertButtons)+\"</div>\");var S='<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"10\" height=\"10\" viewBox=\"0 0 32 32\"><path d=\"M27 4l-15 15-7-7-5 5 12 12 20-20z\" fill=\"#FFF\"></path></svg>',s=\"\",p=0;s=`<div class=\"fr-link-insert-layer fr-layer fr-active\" id=\"fr-link-insert-layer-${e.id}\">`,s+=`\n                <div class=\"fr-input-line\">\n                    <input id=\"fr-link-insert-layer-url-${e.id}\" name=\"href\" type=\"text\" class=\"fr-link-attr\" placeholder=\"${e.language.translate(\"URL\")}\" tabIndex=\"${++p}\">\n                </div>`,e.opts.linkText&&(s+=`\n                    <div class=\"fr-input-line\">\n                        <input id=\"fr-link-insert-layer-text-${e.id}\" name=\"text\" type=\"text\" class=\"fr-link-attr\" placeholder=\"${e.language.translate(\"Text\")}\" tabIndex=\"${++p}\">\n                    </div>`);for(var M in e.opts.linkAttributes)if(e.opts.linkAttributes.hasOwnProperty(M)){var a=e.opts.linkAttributes[M];s+=`\n                        <div class=\"fr-input-line\">\n                            <input name=\"${M}\" type=\"text\" class=\"fr-link-attr\" placeholder=\"${e.language.translate(a)}\" tabIndex=\"${++p}\">\n                        </div>`}e.opts.linkAlwaysBlank||(s+=`\n                    <div class=\"fr-checkbox-line\">\n                        <span class=\"fr-checkbox\">\n                            <input name=\"target\" class=\"fr-link-attr\" data-checked=\"_blank\" type=\"checkbox\" id=\"fr-link-target-${e.id}\" tabIndex=\"${++p}\">\n                            <span>${S}</span>\n                        </span>\n                        <label for=\"fr-link-target-${e.id}\">${e.language.translate(\"Open in new tab\")}</label>\n                    </div>`),s+=`\n                <div class=\"fr-action-buttons\">\n                    <button class=\"fr-command fr-submit\" role=\"button\" data-cmd=\"linkInsert\" href=\"#\" tabIndex=\"${++p}\" type=\"button\">\n                        ${e.language.translate(\"Insert\")}\n                    </button>\n                </div>\n            </div>`;var y={buttons:i,input_layer:s},c=e.popups.create(\"link.insert\",y);return e.$wp&&e.events.$on(e.$wp,\"scroll.link-insert\",function(){var k=e.image?e.image.get():null;k&&e.popups.isVisible(\"link.insert\")&&o(),n&&e.popups.isVisible(\"link.insert\")&&V()}),c}function v(){var f=n(),i=e.image?e.image.get():null;if(e.events.trigger(\"link.beforeRemove\",[f])===!1)return!1;i&&f?(i.unwrap(),e.image.edit(i)):f&&(e.selection.save(),t(f).replaceWith(t(f).html()),e.selection.restore(),X())}function L(){e.events.on(\"keyup\",function(f){f.which!=t.FE.KEYCODE.ESC&&O(f)}),e.events.on(\"window.mouseup\",O),e.events.$on(e.$el,\"click\",\"a\",function(f){e.edit.isDisabled()&&f.preventDefault()}),e.helpers.isMobile()&&e.events.$on(e.$doc,\"selectionchange\",O),d(!0),e.el.tagName==\"A\"&&e.$el.addClass(\"fr-view\"),e.events.on(\"toolbar.esc\",function(){if(e.popups.isVisible(\"link.edit\"))return e.events.disableBlur(),e.events.focus(),!1},!0)}function b(f){var i=e.opts.linkList[f],S=e.popups.get(\"link.insert\"),s=S.find('input.fr-link-attr[type=\"text\"]'),p=S.find('input.fr-link-attr[type=\"checkbox\"]'),M,a;for(a=0;a<s.length;a++)M=t(s[a]),i[M.attr(\"name\")]?M.val(i[M.attr(\"name\")]):M.attr(\"name\")!=\"text\"&&M.val(\"\");for(a=0;a<p.length;a++)M=t(p[a]),M.prop(\"checked\",M.data(\"checked\")==i[M.attr(\"name\")]);e.accessibility.focusPopup(S)}function h(){var f=e.popups.get(\"link.insert\"),i=f.find('input.fr-link-attr[type=\"text\"]'),S=f.find('input.fr-link-attr[type=\"checkbox\"]'),s=(i.filter('[name=\"href\"]').val()||\"\").trim(),p=i.filter('[name=\"text\"]').val(),M={},a,y;for(y=0;y<i.length;y++)a=t(i[y]),[\"href\",\"text\"].indexOf(a.attr(\"name\"))<0&&(M[a.attr(\"name\")]=a.val());for(y=0;y<S.length;y++)a=t(S[y]),a.is(\":checked\")?M[a.attr(\"name\")]=a.data(\"checked\"):M[a.attr(\"name\")]=a.data(\"unchecked\")||null;var c=e.helpers.scrollTop();u(s,p,M),t(e.o_win).scrollTop(c)}function m(){if(!e.selection.isCollapsed()){e.selection.save();for(var f=e.$el.find(\".fr-marker\").addClass(\"fr-unprocessed\").toArray();f.length;){var i=t(f.pop());i.removeClass(\"fr-unprocessed\");var S=e.node.deepestParent(i.get(0));if(S){var s=i.get(0),p=\"\",M=\"\";do s=s.parentNode,e.node.isBlock(s)||(p=p+e.node.closeTagString(s),M=e.node.openTagString(s)+M);while(s!=S);var a=e.node.openTagString(i.get(0))+i.html()+e.node.closeTagString(i.get(0));i.replaceWith('<span id=\"fr-break\"></span>');var y=S.outerHTML;y=y.replace(/<span id=\"fr-break\"><\\/span>/g,p+a+M),y=y.replace(M+p,\"\"),S.outerHTML=y}f=e.$el.find(\".fr-marker.fr-unprocessed\").toArray()}e.html.cleanEmptyTags(),e.selection.restore()}}function u(f,i,S){if(typeof S>\"u\"&&(S={}),e.events.trigger(\"link.beforeInsert\",[f,i,S])===!1)return!1;var s=e.image?e.image.get():null;!s&&e.el.tagName!=\"A\"?(e.selection.restore(),e.popups.hide(\"link.insert\")):e.el.tagName==\"A\"&&e.$el.focus();var p=f;e.opts.linkConvertEmailAddress&&e.helpers.isEmail(f)&&!/^mailto:.*/i.test(f)&&(f=\"mailto:\"+f);var M=/^([A-Za-z]:(\\\\){1,2}|[A-Za-z]:((\\\\){1,2}[^\\\\]+)+)(\\\\)?$/i;if(e.opts.linkAutoPrefix!==\"\"&&!new RegExp(\"^(\"+t.FE.LinkProtocols.join(\"|\")+\"):.\",\"i\").test(f)&&!/^data:image.*/i.test(f)&&!/^(https?:|ftps?:|file:|)\\/\\//i.test(f)&&!M.test(f)&&[\"/\",\"{\",\"[\",\"#\",\"(\",\".\"].indexOf((f||\"\")[0])<0&&(f=e.opts.linkAutoPrefix+e.helpers.sanitizeURL(f)),f=e.helpers.sanitizeURL(f),e.opts.linkAlwaysBlank&&(S.target=\"_blank\"),e.opts.linkAlwaysNoFollow&&(S.rel=\"nofollow\"),e.helpers.isEmail(p)&&(S.target=null,S.rel=null),S.target==\"_blank\"?(e.opts.linkNoOpener&&(S.rel?S.rel+=\" noopener\":S.rel=\"noopener\"),e.opts.linkNoReferrer&&(S.rel?S.rel+=\" noreferrer\":S.rel=\"noreferrer\")):S.target==null&&(S.rel?S.rel=S.rel.replace(/noopener/,\"\").replace(/noreferrer/,\"\"):S.rel=null),i=i||\"\",f===e.opts.linkAutoPrefix){var a=e.popups.get(\"link.insert\");return a.find('input[name=\"href\"]').addClass(\"fr-error\"),e.events.trigger(\"link.bad\",[p]),!1}var y=n(),c;if(y){if(c=t(y),c.attr(\"href\",f),i.length>0&&c.text()!=i&&!s){for(var k=c.get(0);k.childNodes.length===1&&k.childNodes[0].nodeType==Node.ELEMENT_NODE;)k=k.childNodes[0];t(k).text(i)}s||c.prepend(t.FE.START_MARKER).append(t.FE.END_MARKER),c.attr(S),s||e.selection.restore()}else{s?s.wrap('<a href=\"'+f+'\"></a>'):(e.format.remove(\"a\"),e.selection.isCollapsed()?(i=i.length===0?p:i,e.html.insert('<a href=\"'+f+'\">'+t.FE.START_MARKER+i.replace(/&/g,\"&amp;\").replace(/</,\"&lt;\",\">\",\"&gt;\")+t.FE.END_MARKER+\"</a>\"),e.selection.restore()):i.length>0&&i!=e.selection.text().replace(/\\n/g,\"\")?(e.selection.remove(),e.html.insert('<a href=\"'+f+'\">'+t.FE.START_MARKER+i.replace(/&/g,\"&amp;\")+t.FE.END_MARKER+\"</a>\"),e.selection.restore()):(m(),e.format.apply(\"a\",{href:f})));for(var A=r(),Q=0;Q<A.length;Q++)c=t(A[Q]),c.attr(S),c.removeAttr(\"_moz_dirty\");A.length==1&&e.$wp&&!s&&(t(A[0]).prepend(t.FE.START_MARKER).append(t.FE.END_MARKER),e.selection.restore())}if(!s)O();else{var z=e.popups.get(\"link.insert\");z&&z.find(\"input:focus\").blur(),e.image.edit(s)}}function V(){X();var f=n();if(f){var i=e.popups.get(\"link.insert\");i||(i=d()),e.popups.isVisible(\"link.insert\")||(e.popups.refresh(\"link.insert\"),e.selection.save(),e.helpers.isMobile()&&(e.events.disableBlur(),e.$el.blur(),e.events.enableBlur())),e.popups.setContainer(\"link.insert\",e.$sc);var S=(e.image?e.image.get():null)||t(f);e.popups.showEl(\"link.insert\",S)}}function E(){var f=e.image?e.image.get():null;if(f)e.image.back();else{e.events.disableBlur(),e.selection.restore(),e.events.enableBlur();var i=n();i&&e.$wp?(e.selection.restore(),X(),O()):e.el.tagName==\"A\"?(e.$el.focus(),O()):(e.popups.hide(\"link.insert\"),e.toolbar.showInline())}}function o(){var f=e.image?e.image.getEl():null;if(f){var i=e.popups.get(\"link.insert\");e.image.hasCaption()&&(f=f.find(\".fr-img-wrap\")),i||(i=d()),_(!0),e.popups.setContainer(\"link.insert\",e.$sc),e.popups.showEl(\"link.insert\",f)}}function l(f,i,S){typeof S>\"u\"&&(S=e.opts.linkMultipleStyles),typeof i>\"u\"&&(i=e.opts.linkStyles);var s=n();if(!s)return!1;if(!S){var p=Object.keys(i);p.splice(p.indexOf(f),1),t(s).removeClass(p.join(\" \"))}t(s).toggleClass(f),O()}return{_init:L,remove:v,showInsertPopup:F,usePredefined:b,insertCallback:h,insert:u,update:V,get:n,allSelected:r,back:E,imageLink:o,applyStyle:l}},t.FE.DefineIcon(\"insertLink\",{NAME:\"link\"}),t.FE.RegisterShortcut(t.FE.KEYCODE.K,\"insertLink\",null,\"K\"),t.FE.RegisterCommand(\"insertLink\",{title:\"Insert Link\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"link.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"link.insert\")):this.link.showInsertPopup()},plugin:\"link\"}),t.FE.DefineIcon(\"linkOpen\",{NAME:\"external-link\",FA5NAME:\"external-link-alt\"}),t.FE.RegisterCommand(\"linkOpen\",{title:\"Open Link\",undo:!1,refresh:function(e){var n=this.link.get();n?e.removeClass(\"fr-hidden\"):e.addClass(\"fr-hidden\")},callback:function(){var e=this.link.get();e&&(e.href.indexOf(\"mailto:\")!==-1?this.o_win.open(e.href).close():oc.pageLookup&&e.href.indexOf(\"october://\")!==-1?this.o_win.open(oc.pageLookup.processLink(e.href),\"_blank\",\"noopener\"):this.o_win.open(e.href,\"_blank\",\"noopener\"),this.popups.hide(\"link.edit\"))},plugin:\"link\"}),t.FE.DefineIcon(\"linkEdit\",{NAME:\"edit\"}),t.FE.RegisterCommand(\"linkEdit\",{title:\"Edit Link\",undo:!1,refreshAfterCallback:!1,popup:!0,callback:function(){this.link.update()},refresh:function(e){var n=this.link.get();n?e.removeClass(\"fr-hidden\"):e.addClass(\"fr-hidden\")},plugin:\"link\"}),t.FE.DefineIcon(\"linkRemove\",{NAME:\"unlink\"}),t.FE.RegisterCommand(\"linkRemove\",{title:\"Unlink\",callback:function(){this.link.remove()},refresh:function(e){var n=this.link.get();n?e.removeClass(\"fr-hidden\"):e.addClass(\"fr-hidden\")},plugin:\"link\"}),t.FE.DefineIcon(\"linkBack\",{NAME:\"arrow-left\"}),t.FE.RegisterCommand(\"linkBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.link.back()},refresh:function(e){var n=this.link.get()&&this.doc.hasFocus(),r=this.image?this.image.get():null;!r&&!n&&!this.opts.toolbarInline?(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\")):(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\"))},plugin:\"link\"}),t.FE.DefineIcon(\"linkList\",{NAME:\"search\"}),t.FE.RegisterCommand(\"linkList\",{title:\"Choose Link\",type:\"dropdown\",focus:!1,undo:!1,refreshAfterCallback:!1,html:function(){for(var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.linkList,r=0;r<n.length;r++)e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"linkList\" data-param1=\"'+r+'\">'+(n[r].displayText||n[r].text)+\"</a></li>\";return e+=\"</ul>\",e},callback:function(e,n){this.link.usePredefined(n)},plugin:\"link\"}),t.FE.RegisterCommand(\"linkInsert\",{focus:!1,refreshAfterCallback:!1,callback:function(){this.link.insertCallback()},refresh:function(e){var n=this.link.get();n?e.text(this.language.translate(\"Update\")):e.text(this.language.translate(\"Insert\"))},plugin:\"link\"}),t.FE.DefineIcon(\"imageLink\",{NAME:\"link\"}),t.FE.RegisterCommand(\"imageLink\",{title:\"Insert Link\",undo:!1,focus:!1,popup:!0,callback:function(){this.link.imageLink()},refresh:function(e){var n=this.link.get(),r;n?(r=e.prev(),r.hasClass(\"fr-separator\")&&r.removeClass(\"fr-hidden\"),e.addClass(\"fr-hidden\")):(r=e.prev(),r.hasClass(\"fr-separator\")&&r.addClass(\"fr-hidden\"),e.removeClass(\"fr-hidden\"))},plugin:\"link\"}),t.FE.DefineIcon(\"linkStyle\",{NAME:\"magic\"}),t.FE.RegisterCommand(\"linkStyle\",{title:\"Style\",type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.linkStyles;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"linkStyle\" data-param1=\"'+r+'\">'+this.language.translate(n[r])+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.link.applyStyle(n)},refreshOnShow:function(e,n){var r=this.link.get();if(r){var O=t(r);n.find(\".fr-command\").each(function(){var x=t(this).data(\"param1\"),X=O.hasClass(x);t(this).toggleClass(\"fr-active\",X).attr(\"aria-selected\",X)})}},refresh:function(e){var n=this.link.get();n?e.removeClass(\"fr-hidden\"):e.addClass(\"fr-hidden\")},plugin:\"link\"})})(jQuery);(function(t){t.extend(t.FE.POPUP_TEMPLATES,{\"table.insert\":\"[_BUTTONS_][_ROWS_COLUMNS_]\",\"table.edit\":\"[_BUTTONS_]\",\"table.colors\":\"[_BUTTONS_][_COLORS_][_CUSTOM_COLOR_]\"}),t.extend(t.FE.DEFAULTS,{tableInsertMaxSize:10,tableEditButtons:[\"tableHeader\",\"tableRemove\",\"|\",\"tableRows\",\"tableColumns\",\"tableStyle\",\"-\",\"tableCells\",\"tableCellBackground\",\"tableCellVerticalAlign\",\"tableCellHorizontalAlign\",\"tableCellStyle\"],tableInsertButtons:[\"tableBack\",\"|\"],tableResizer:!0,tableDefaultWidth:\"100%\",tableResizerOffset:5,tableResizingLimit:30,tableColorsButtons:[\"tableBack\",\"|\"],tableColors:[\"#61BD6D\",\"#1ABC9C\",\"#54ACD2\",\"#2C82C9\",\"#9365B8\",\"#475577\",\"#CCCCCC\",\"#41A85F\",\"#00A885\",\"#3D8EB9\",\"#2969B0\",\"#553982\",\"#28324E\",\"#000000\",\"#F7DA64\",\"#FBA026\",\"#EB6B56\",\"#E25041\",\"#A38F84\",\"#EFEFEF\",\"#FFFFFF\",\"#FAC51C\",\"#F37934\",\"#D14841\",\"#B8312F\",\"#7C706B\",\"#D1D5D8\",\"REMOVE\"],tableColorsStep:7,tableCellStyles:{\"fr-highlighted\":\"Highlighted\",\"fr-thick\":\"Thick\"},tableStyles:{\"fr-dashed-borders\":\"Dashed Borders\",\"fr-alternate-rows\":\"Alternate Rows\"},tableCellMultipleStyles:!0,tableMultipleStyles:!0,tableInsertHelper:!0,tableInsertHelperOffset:15}),t.FE.PLUGINS.table=function(e){var n,r,O,x,X,Y,U;function _(){var P=e.$vtb?e.$vtb.find('[data-cmd=\"richeditor-toolbar-insertTable\"]'):e.$tb.find('.fr-command[data-cmd=\"insertTable\"]');P.is(\":visible\")||(P=t('[data-cmd=\"richeditor-toolbar-insertTable\"]:first'));var D=e.popups.get(\"table.insert\");D||(D=L()),D.hasClass(\"fr-active\")||(e.popups.refresh(\"table.insert\"),e.popups.setContainer(\"table.insert\",e.$sc),e.popups.showElToolbar(\"table.insert\",P))}function F(){var P=J();if(P){var D=e.popups.get(\"table.edit\");if(D||(D=u()),D){e.popups.setContainer(\"table.edit\",e.$sc);var K=he(P),q=(K.left+K.right)/2,j=K.bottom;e.popups.show(\"table.edit\",q,j,K.bottom-K.top),e.edit.isDisabled()&&(Ne().length>1&&e.toolbar.disable(),e.$el.removeClass(\"fr-no-selection\"),e.edit.on(),e.button.bulkRefresh(),e.selection.setAtEnd(e.$el.find(\".fr-selected-cell:last\").get(0)),e.selection.restore())}}}function d(){var P=J();if(P){var D=e.popups.get(\"table.colors\");D||(D=V()),e.popups.setContainer(\"table.colors\",e.$sc);var K=he(P),q=(K.left+K.right)/2,j=K.bottom;f(),e.popups.show(\"table.colors\",q,j,K.bottom-K.top)}}function v(){Ne().length===0&&e.toolbar.enable()}function L(P){if(P)return e.popups.onHide(\"table.insert\",function(){e.popups.get(\"table.insert\").find('.fr-table-size .fr-select-table-size > span[data-row=\"1\"][data-col=\"1\"]').trigger(\"mouseenter\")}),!0;var D=\"\";e.opts.tableInsertButtons.length>0&&(D='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.tableInsertButtons)+\"</div>\");var K={buttons:D,rows_columns:h()},q=e.popups.create(\"table.insert\",K);return e.events.$on(q,\"mouseenter\",\".fr-table-size .fr-select-table-size .fr-table-cell\",function(j){b(t(j.currentTarget))},!0),m(q),q}function b(P){var D=P.data(\"row\"),K=P.data(\"col\"),q=P.parent();q.siblings(\".fr-table-size-info\").html(D+\" &times; \"+K),q.find(\"> span\").removeClass(\"hover fr-active-item\");for(var j=1;j<=e.opts.tableInsertMaxSize;j++)for(var ne=0;ne<=e.opts.tableInsertMaxSize;ne++){var le=q.find('> span[data-row=\"'+j+'\"][data-col=\"'+ne+'\"]');j<=D&&ne<=K?le.addClass(\"hover\"):j<=D+1||j<=2&&!e.helpers.isMobile()?le.css(\"display\",\"inline-block\"):j>2&&!e.helpers.isMobile()&&le.css(\"display\",\"none\")}P.addClass(\"fr-active-item\")}function h(){for(var P='<div class=\"fr-table-size\"><div class=\"fr-table-size-info\">1 &times; 1</div><div class=\"fr-select-table-size\">',D=1;D<=e.opts.tableInsertMaxSize;D++){for(var K=1;K<=e.opts.tableInsertMaxSize;K++){var q=\"inline-block\";D>2&&!e.helpers.isMobile()&&(q=\"none\");var j=\"fr-table-cell \";D==1&&K==1&&(j+=\" hover\"),P+='<span class=\"fr-command '+j+'\" tabIndex=\"-1\" data-cmd=\"tableInsert\" data-row=\"'+D+'\" data-col=\"'+K+'\" data-param1=\"'+D+'\" data-param2=\"'+K+'\" style=\"display: '+q+';\" role=\"button\"><span></span><span class=\"fr-sr-only\">'+D+\" &times; \"+K+\"&nbsp;&nbsp;&nbsp;</span></span>\"}P+='<div class=\"new-line\"></div>'}return P+=\"</div></div>\",P}function m(P){e.events.$on(P,\"focus\",\"[tabIndex]\",function(D){var K=t(D.currentTarget);b(K)}),e.events.on(\"popup.tab\",function(D){var K=t(D.currentTarget);if(!e.popups.isVisible(\"table.insert\")||!K.is(\"span, a\"))return!0;var q=D.which,j;if(t.FE.KEYCODE.ARROW_UP==q||t.FE.KEYCODE.ARROW_DOWN==q||t.FE.KEYCODE.ARROW_LEFT==q||t.FE.KEYCODE.ARROW_RIGHT==q){if(K.is(\"span.fr-table-cell\")){var ne=K.parent().find(\"span.fr-table-cell\"),le=ne.index(K),ie=e.opts.tableInsertMaxSize,re=le%ie,oe=Math.floor(le/ie);t.FE.KEYCODE.ARROW_UP==q?oe=Math.max(0,oe-1):t.FE.KEYCODE.ARROW_DOWN==q?oe=Math.min(e.opts.tableInsertMaxSize-1,oe+1):t.FE.KEYCODE.ARROW_LEFT==q?re=Math.max(0,re-1):t.FE.KEYCODE.ARROW_RIGHT==q&&(re=Math.min(e.opts.tableInsertMaxSize-1,re+1));var ye=oe*ie+re,ue=t(ne.get(ye));b(ue),e.events.disableBlur(),ue.focus(),j=!1}}else t.FE.KEYCODE.ENTER==q&&(e.button.exec(K),j=!1);return j===!1&&(D.preventDefault(),D.stopPropagation()),j},!0)}function u(P){if(P)return e.popups.onHide(\"table.edit\",v),!0;var D=\"\";if(e.opts.tableEditButtons.length>0){D='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.tableEditButtons)+\"</div>\";var K={buttons:D},q=e.popups.create(\"table.edit\",K);return e.events.$on(e.$wp,\"scroll.table-edit\",function(){e.popups.isVisible(\"table.edit\")&&F()}),q}return!1}function V(){var P=\"\";e.opts.tableColorsButtons.length>0&&(P='<div class=\"fr-buttons fr-table-colors-buttons\">'+e.button.buildList(e.opts.tableColorsButtons)+\"</div>\");var D=\"\";e.opts.colorsHEXInput&&(D='<div class=\"fr-table-colors-hex-layer fr-active fr-layer\" id=\"fr-table-colors-hex-layer-'+e.id+'\"><div class=\"fr-input-line\"><input maxlength=\"7\" id=\"fr-table-colors-hex-layer-text-'+e.id+'\" type=\"text\" placeholder=\"'+e.language.translate(\"HEX Color\")+'\" tabIndex=\"1\" aria-required=\"true\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"tableCellBackgroundCustomColor\" tabIndex=\"2\" role=\"button\">'+e.language.translate(\"OK\")+\"</button></div></div>\");var K={buttons:P,colors:E(),custom_color:D},q=e.popups.create(\"table.colors\",K);return e.events.$on(e.$wp,\"scroll.table-colors\",function(){e.popups.isVisible(\"table.colors\")&&d()}),l(q),q}function E(){for(var P='<div class=\"fr-table-colors\">',D=0;D<e.opts.tableColors.length;D++)D!==0&&D%e.opts.tableColorsStep===0&&(P+=\"<br>\"),e.opts.tableColors[D]!=\"REMOVE\"?P+='<span class=\"fr-command\" style=\"background: '+e.opts.tableColors[D]+';\" tabIndex=\"-1\" role=\"button\" data-cmd=\"tableCellBackgroundColor\" data-param1=\"'+e.opts.tableColors[D]+'\"><span class=\"fr-sr-only\">'+e.language.translate(\"Color\")+\" \"+e.opts.tableColors[D]+\"&nbsp;&nbsp;&nbsp;</span></span>\":P+='<span class=\"fr-command\" data-cmd=\"tableCellBackgroundColor\" tabIndex=\"-1\" role=\"button\" data-param1=\"REMOVE\" title=\"'+e.language.translate(\"Clear Formatting\")+'\">'+e.icon.create(\"tableColorRemove\")+'<span class=\"fr-sr-only\">'+e.language.translate(\"Clear Formatting\")+\"</span></span>\";return P+=\"</div>\",P}function o(){var P=e.popups.get(\"table.colors\"),D=P.find(\".fr-table-colors-hex-layer input\");D.length&&W(D.val())}function l(P){e.events.on(\"popup.tab\",function(D){var K=t(D.currentTarget);if(!e.popups.isVisible(\"table.colors\")||!K.is(\"span\"))return!0;var q=D.which,j=!0;if(t.FE.KEYCODE.TAB==q){var ne=P.find(\".fr-buttons\");j=!e.accessibility.focusToolbar(ne,!!D.shiftKey)}else if(t.FE.KEYCODE.ARROW_UP==q||t.FE.KEYCODE.ARROW_DOWN==q||t.FE.KEYCODE.ARROW_LEFT==q||t.FE.KEYCODE.ARROW_RIGHT==q){var le=K.parent().find(\"span.fr-command\"),ie=le.index(K),re=e.opts.colorsStep,oe=Math.floor(le.length/re),ye=ie%re,ue=Math.floor(ie/re),we=ue*re+ye,Oe=oe*re;t.FE.KEYCODE.ARROW_UP==q?we=((we-re)%Oe+Oe)%Oe:t.FE.KEYCODE.ARROW_DOWN==q?we=(we+re)%Oe:t.FE.KEYCODE.ARROW_LEFT==q?we=((we-1)%Oe+Oe)%Oe:t.FE.KEYCODE.ARROW_RIGHT==q&&(we=(we+1)%Oe);var ke=t(le.get(we));e.events.disableBlur(),ke.focus(),j=!1}else t.FE.KEYCODE.ENTER==q&&(e.button.exec(K),j=!1);return j===!1&&(D.preventDefault(),D.stopPropagation()),j},!0)}function f(){var P=e.popups.get(\"table.colors\"),D=e.$el.find(\".fr-selected-cell:first\"),K=e.helpers.RGBToHex(D.css(\"background-color\")),q=P.find(\".fr-table-colors-hex-layer input\");P.find(\".fr-selected-color\").removeClass(\"fr-selected-color fr-active-item\"),P.find('span[data-param1=\"'+K+'\"]').addClass(\"fr-selected-color fr-active-item\"),q.val(K).trigger(\"change\")}function i(P,D){var K=\"<table \"+(e.opts.tableDefaultWidth?'style=\"width: '+e.opts.tableDefaultWidth+';\" ':\"\")+'class=\"fr-inserted-table\"><tbody>',q=100/D,j,ne;for(j=0;j<P;j++){for(K+=\"<tr>\",ne=0;ne<D;ne++)K+=\"<td\"+(e.opts.tableDefaultWidth?' style=\"width: '+q.toFixed(4)+'%;\"':\"\")+\">\",j===0&&ne===0&&(K+=t.FE.MARKERS),K+=\"<br></td>\";K+=\"</tr>\"}K+=\"</tbody></table>\",e.html.insert(K),e.selection.restore();var le=e.$el.find(\".fr-inserted-table\");le.removeClass(\"fr-inserted-table\"),e.events.trigger(\"table.inserted\",[le.get(0)])}function S(){if(Ne().length>0){var P=Ve();e.selection.setBefore(P.get(0))||e.selection.setAfter(P.get(0)),e.selection.restore(),e.popups.hide(\"table.edit\"),P.remove(),e.toolbar.enable()}}function s(){var P=Ve();if(P.length>0&&P.find(\"th\").length===0){var D=\"<thead><tr>\",K,q=0;for(P.find(\"tr:first > td\").each(function(){var j=t(this);q+=parseInt(j.attr(\"colspan\"),10)||1}),K=0;K<q;K++)D+=\"<th><br></th>\";D+=\"</tr></thead>\",P.prepend(D),F()}}function p(){var P=Ve(),D=P.find(\"thead\");if(D.length>0)if(P.find(\"tbody tr\").length===0)S();else if(D.remove(),Ne().length>0)F();else{e.popups.hide(\"table.edit\");var K=P.find(\"tbody tr:first td:first\").get(0);K&&(e.selection.setAtEnd(K),e.selection.restore())}}function M(P){var D=Ve();if(D.length>0){if(e.$el.find(\"th.fr-selected-cell\").length>0&&P==\"above\")return;var K,q,j,ne=J(),le=ee(ne);P==\"above\"?q=le.min_i:q=le.max_i;var ie=\"<tr>\";for(K=0;K<ne[q].length;K++)if(P==\"below\"&&q<ne.length-1&&ne[q][K]==ne[q+1][K]||P==\"above\"&&q>0&&ne[q][K]==ne[q-1][K]){if(K===0||K>0&&ne[q][K]!=ne[q][K-1]){var re=t(ne[q][K]);re.attr(\"rowspan\",parseInt(re.attr(\"rowspan\"),10)+1)}}else ie+=\"<td><br></td>\";ie+=\"</tr>\",e.$el.find(\"th.fr-selected-cell\").length>0&&P==\"below\"?j=t(D.find(\"tbody\").not(D.find(\"table tbody\"))):j=t(D.find(\"tr\").not(D.find(\"table tr\")).get(q)),P==\"below\"?j.prop(\"tagName\")==\"TBODY\"?j.prepend(ie):j.after(ie):P==\"above\"&&(j.before(ie),e.popups.isVisible(\"table.edit\")&&F())}}function a(){var P=Ve();if(P.length>0){var D,K,q,j=J(),ne=ee(j);if(ne.min_i===0&&ne.max_i==j.length-1)S();else{for(D=ne.max_i;D>=ne.min_i;D--){for(q=t(P.find(\"tr\").not(P.find(\"table tr\")).get(D)),K=0;K<j[D].length;K++)if(K===0||j[D][K]!=j[D][K-1]){var le=t(j[D][K]);if(parseInt(le.attr(\"rowspan\"),10)>1){var ie=parseInt(le.attr(\"rowspan\"),10)-1;ie==1?le.removeAttr(\"rowspan\"):le.attr(\"rowspan\",ie)}if(D<j.length-1&&j[D][K]==j[D+1][K]&&(D===0||j[D][K]!=j[D-1][K])){for(var re=j[D][K],oe=K;oe>0&&j[D][oe]==j[D][oe-1];)oe--;oe===0?t(P.find(\"tr\").not(P.find(\"table tr\")).get(D+1)).prepend(re):t(j[D+1][oe-1]).after(re)}}var ye=q.parent();q.remove(),ye.find(\"tr\").length===0&&ye.remove(),j=J(P)}z(0,j.length-1,0,j[0].length-1,P),ne.min_i>0?e.selection.setAtEnd(j[ne.min_i-1][0]):e.selection.setAtEnd(j[0][0]),e.selection.restore(),e.popups.hide(\"table.edit\")}}}function y(P){var D=Ve();if(D.length>0){var K=J(),q=ee(K),j;P==\"before\"?j=q.min_j:j=q.max_j;var ne=100/K[0].length,le=100/(K[0].length+1),ie;D.find(\"th, td\").each(function(){ie=t(this),ie.data(\"old-width\",ie.outerWidth()/D.outerWidth()*100)}),D.find(\"tr\").not(D.find(\"table tr\")).each(function(re){for(var oe=t(this),ye=0,ue=0,we;ye-1<j;){if(we=oe.find(\"> th, > td\").get(ue),!we){we=null;break}we==K[re][ye]?(ye+=parseInt(t(we).attr(\"colspan\"),10)||1,ue++):(ye+=parseInt(t(K[re][ye]).attr(\"colspan\"),10)||1,P==\"after\"&&(ue===0?we=-1:we=oe.find(\"> th, > td\").get(ue-1)))}var Oe=t(we);if(P==\"after\"&&ye-1>j||P==\"before\"&&j>0&&K[re][j]==K[re][j-1]){if(re===0||re>0&&K[re][j]!=K[re-1][j]){var ke=parseInt(Oe.attr(\"colspan\"),10)+1;Oe.attr(\"colspan\",ke),Oe.css(\"width\",(Oe.data(\"old-width\")*le/ne+le).toFixed(4)+\"%\"),Oe.removeData(\"old-width\")}}else{var Ie;oe.find(\"th\").length>0?Ie='<th style=\"width: '+le.toFixed(4)+'%;\"><br></th>':Ie='<td style=\"width: '+le.toFixed(4)+'%;\"><br></td>',we==-1?oe.prepend(Ie):we==null?oe.append(Ie):P==\"before\"?Oe.before(Ie):P==\"after\"&&Oe.after(Ie)}}),D.find(\"th, td\").each(function(){ie=t(this),ie.data(\"old-width\")&&(ie.css(\"width\",(ie.data(\"old-width\")*le/ne).toFixed(4)+\"%\"),ie.removeData(\"old-width\"))}),e.popups.isVisible(\"table.edit\")&&F()}}function c(){var P=Ve();if(P.length>0){var D,K,q,j=J(),ne=ee(j);if(ne.min_j===0&&ne.max_j==j[0].length-1)S();else{var le=0;for(D=0;D<j.length;D++)for(K=0;K<j[0].length;K++)q=t(j[D][K]),q.hasClass(\"fr-selected-cell\")||(q.data(\"old-width\",q.outerWidth()/P.outerWidth()*100),(K<ne.min_j||K>ne.max_j)&&(le+=q.outerWidth()/P.outerWidth()*100));for(le/=j.length,K=ne.max_j;K>=ne.min_j;K--)for(D=0;D<j.length;D++)if(D===0||j[D][K]!=j[D-1][K])if(q=t(j[D][K]),(parseInt(q.attr(\"colspan\"),10)||1)>1){var ie=parseInt(q.attr(\"colspan\"),10)-1;ie==1?q.removeAttr(\"colspan\"):q.attr(\"colspan\",ie),q.css(\"width\",((q.data(\"old-width\")-Pe(K,j))*100/le).toFixed(4)+\"%\"),q.removeData(\"old-width\")}else{var re=t(q.parent().get(0));q.remove(),re.find(\"> th, > td\").length===0&&(re.prev().length===0||re.next().length===0||re.prev().find(\"> th[rowspan], > td[rowspan]\").length<re.prev().find(\"> th, > td\").length)&&re.remove()}z(0,j.length-1,0,j[0].length-1,P),ne.min_j>0?e.selection.setAtEnd(j[ne.min_i][ne.min_j-1]):e.selection.setAtEnd(j[ne.min_i][0]),e.selection.restore(),e.popups.hide(\"table.edit\"),P.find(\"th, td\").each(function(){q=t(this),q.data(\"old-width\")&&(q.css(\"width\",(q.data(\"old-width\")*100/le).toFixed(4)+\"%\"),q.removeData(\"old-width\"))})}}}function k(P,D,K){var q,j,ne,le,ie,re=0,oe=J(K);if(D=Math.min(D,oe[0].length-1),D>P){for(j=P;j<=D;j++)if(!(j>P&&oe[0][j]==oe[0][j-1])&&(le=Math.min(parseInt(oe[0][j].getAttribute(\"colspan\"),10)||1,D-P+1),le>1&&oe[0][j]==oe[0][j+1])){for(re=le-1,q=1;q<oe.length;q++)if(oe[q][j]!=oe[q-1][j]){for(ne=j;ne<j+le;ne++)if(ie=parseInt(oe[q][ne].getAttribute(\"colspan\"),10)||1,ie>1&&oe[q][ne]==oe[q][ne+1])re=Math.min(re,ie-1),ne+=re;else if(re=Math.max(0,re-1),!re)break;if(!re)break}}}re&&Q(oe,re,\"colspan\",0,oe.length-1,P,D)}function A(P,D,K){var q,j,ne,le,ie,re=0,oe=J(K);if(D=Math.min(D,oe.length-1),D>P){for(q=P;q<=D;q++)if(!(q>P&&oe[q][0]==oe[q-1][0])&&(le=Math.min(parseInt(oe[q][0].getAttribute(\"rowspan\"),10)||1,D-P+1),le>1&&oe[q][0]==oe[q+1][0])){for(re=le-1,j=1;j<oe[0].length;j++)if(oe[q][j]!=oe[q][j-1]){for(ne=q;ne<q+le;ne++)if(ie=parseInt(oe[ne][j].getAttribute(\"rowspan\"),10)||1,ie>1&&oe[ne][j]==oe[ne+1][j])re=Math.min(re,ie-1),ne+=re;else if(re=Math.max(0,re-1),!re)break;if(!re)break}}}re&&Q(oe,re,\"rowspan\",P,D,0,oe[0].length-1)}function Q(P,D,K,q,j,ne,le){var ie,re,oe;for(ie=q;ie<=j;ie++)for(re=ne;re<=le;re++)ie>q&&P[ie][re]==P[ie-1][re]||re>ne&&P[ie][re]==P[ie][re-1]||(oe=parseInt(P[ie][re].getAttribute(K),10)||1,oe>1&&(oe-D>1?P[ie][re].setAttribute(K,oe-D):P[ie][re].removeAttribute(K)))}function z(P,D,K,q,j){A(P,D,j),k(K,q,j)}function w(){if(Ne().length>1&&(e.$el.find(\"th.fr-selected-cell\").length===0||e.$el.find(\"td.fr-selected-cell\").length===0)){g();var P=J(),D=ee(P),K,q,j=e.$el.find(\".fr-selected-cell\"),ne=t(j[0]),le=ne.parent(),ie=le.find(\".fr-selected-cell\"),re=ne.closest(\"table\"),oe=ne.html(),ye=0;for(K=0;K<ie.length;K++)ye+=t(ie[K]).outerWidth();for(ne.css(\"width\",Math.min(100,ye/re.outerWidth()*100).toFixed(4)+\"%\"),D.min_j<D.max_j&&ne.attr(\"colspan\",D.max_j-D.min_j+1),D.min_i<D.max_i&&ne.attr(\"rowspan\",D.max_i-D.min_i+1),K=1;K<j.length;K++)q=t(j[K]),q.html()!=\"<br>\"&&q.html()!==\"\"&&(oe+=\"<br>\"+q.html()),q.remove();ne.html(oe),e.selection.setAtEnd(ne.get(0)),e.selection.restore(),e.toolbar.enable(),A(D.min_i,D.max_i,re);var ue=re.find(\"tr:empty\");for(K=ue.length-1;K>=0;K--)t(ue[K]).remove();k(D.min_j,D.max_j,re),F()}}function C(){if(Ne().length==1){var P=e.$el.find(\".fr-selected-cell\"),D=P.parent(),K=P.closest(\"table\"),q=parseInt(P.attr(\"rowspan\"),10),j=J(),ne=Z(P.get(0),j),le=P.clone().html(\"<br>\");if(q>1){var ie=Math.ceil(q/2);ie>1?P.attr(\"rowspan\",ie):P.removeAttr(\"rowspan\"),q-ie>1?le.attr(\"rowspan\",q-ie):le.removeAttr(\"rowspan\");for(var re=ne.row+ie,oe=ne.col===0?ne.col:ne.col-1;oe>=0&&(j[re][oe]==j[re][oe-1]||re>0&&j[re][oe]==j[re-1][oe]);)oe--;oe==-1?t(K.find(\"tr\").not(K.find(\"table tr\")).get(re)).prepend(le):t(j[re][oe]).after(le)}else{var ye=t(\"<tr>\").append(le),ue;for(ue=0;ue<j[0].length;ue++)if(ue===0||j[ne.row][ue]!=j[ne.row][ue-1]){var we=t(j[ne.row][ue]);we.is(P)||we.attr(\"rowspan\",(parseInt(we.attr(\"rowspan\"),10)||1)+1)}D.after(ye)}R(),e.popups.hide(\"table.edit\")}}function G(){if(Ne().length==1){var P=e.$el.find(\".fr-selected-cell\"),D=parseInt(P.attr(\"colspan\"),10)||1,K=P.parent().outerWidth(),q=P.outerWidth(),j=P.clone().html(\"<br>\"),ne=J(),le=Z(P.get(0),ne);if(D>1){var ie=Math.ceil(D/2);q=tt(le.col,le.col+ie-1,ne)/K*100;var re=tt(le.col+ie,le.col+D-1,ne)/K*100;ie>1?P.attr(\"colspan\",ie):P.removeAttr(\"colspan\"),D-ie>1?j.attr(\"colspan\",D-ie):j.removeAttr(\"colspan\"),P.css(\"width\",q.toFixed(4)+\"%\"),j.css(\"width\",re.toFixed(4)+\"%\")}else{var oe;for(oe=0;oe<ne.length;oe++)if(oe===0||ne[oe][le.col]!=ne[oe-1][le.col]){var ye=t(ne[oe][le.col]);if(!ye.is(P)){var ue=(parseInt(ye.attr(\"colspan\"),10)||1)+1;ye.attr(\"colspan\",ue)}}q=q/K*100/2,P.css(\"width\",q.toFixed(4)+\"%\"),j.css(\"width\",q.toFixed(4)+\"%\")}P.after(j),R(),e.popups.hide(\"table.edit\")}}function W(P){var D=e.$el.find(\".fr-selected-cell\");P!=\"REMOVE\"?D.css(\"background-color\",e.helpers.HEXtoRGB(P)):D.css(\"background-color\",\"\"),F()}function N(P){e.$el.find(\".fr-selected-cell\").css(\"vertical-align\",P)}function I(P){e.$el.find(\".fr-selected-cell\").css(\"text-align\",P)}function H(P,D,K,q){if(D.length>0){if(!K){var j=Object.keys(q);j.splice(j.indexOf(P),1),D.removeClass(j.join(\" \"))}D.toggleClass(P)}}function J(P){P=P||null;var D=[];return P==null&&Ne().length>0&&(P=Ve()),P&&P.find(\"tr:visible\").not(P.find(\"table tr\")).each(function(K,q){var j=t(q),ne=0;j.find(\"> th, > td\").each(function(le,ie){for(var re=t(ie),oe=parseInt(re.attr(\"colspan\"),10)||1,ye=parseInt(re.attr(\"rowspan\"),10)||1,ue=K;ue<K+ye;ue++)for(var we=ne;we<ne+oe;we++)D[ue]||(D[ue]=[]),D[ue][we]?ne++:D[ue][we]=ie;ne+=oe})}),D}function Z(P,D){for(var K=0;K<D.length;K++)for(var q=0;q<D[K].length;q++)if(D[K][q]==P)return{row:K,col:q}}function se(P,D,K){for(var q=P+1,j=D+1;q<K.length;){if(K[q][D]!=K[P][D]){q--;break}q++}for(q==K.length&&q--;j<K[P].length;){if(K[P][j]!=K[P][D]){j--;break}j++}return j==K[P].length&&j--,{row:q,col:j}}function g(){e.el.querySelector(\".fr-cell-fixed\")&&e.el.querySelector(\".fr-cell-fixed\").classList.remove(\"fr-cell-fixed\"),e.el.querySelector(\".fr-cell-handler\")&&e.el.querySelector(\".fr-cell-handler\").classList.remove(\"fr-cell-handler\")}function R(){var P=e.$el.find(\".fr-selected-cell\");P.length>0&&P.each(function(){var D=t(this);D.removeClass(\"fr-selected-cell\"),D.attr(\"class\")===\"\"&&D.removeAttr(\"class\")}),g()}function $(){e.events.disableBlur(),e.selection.clear(),e.$el.addClass(\"fr-no-selection\"),e.$el.blur(),e.events.enableBlur()}function ee(P){var D=e.$el.find(\".fr-selected-cell\");if(D.length>0){var K=P.length,q=0,j=P[0].length,ne=0,le;for(le=0;le<D.length;le++){var ie=Z(D[le],P),re=se(ie.row,ie.col,P);K=Math.min(ie.row,K),q=Math.max(re.row,q),j=Math.min(ie.col,j),ne=Math.max(re.col,ne)}return{min_i:K,max_i:q,min_j:j,max_j:ne}}else return null}function ce(P,D,K,q,j){var ne=P,le=D,ie=K,re=q,oe,ye,ue,we;for(oe=ne;oe<=le;oe++)((parseInt(t(j[oe][ie]).attr(\"rowspan\"),10)||1)>1||(parseInt(t(j[oe][ie]).attr(\"colspan\"),10)||1)>1)&&(ue=Z(j[oe][ie],j),we=se(ue.row,ue.col,j),ne=Math.min(ue.row,ne),le=Math.max(we.row,le),ie=Math.min(ue.col,ie),re=Math.max(we.col,re)),((parseInt(t(j[oe][re]).attr(\"rowspan\"),10)||1)>1||(parseInt(t(j[oe][re]).attr(\"colspan\"),10)||1)>1)&&(ue=Z(j[oe][re],j),we=se(ue.row,ue.col,j),ne=Math.min(ue.row,ne),le=Math.max(we.row,le),ie=Math.min(ue.col,ie),re=Math.max(we.col,re));for(ye=ie;ye<=re;ye++)((parseInt(t(j[ne][ye]).attr(\"rowspan\"),10)||1)>1||(parseInt(t(j[ne][ye]).attr(\"colspan\"),10)||1)>1)&&(ue=Z(j[ne][ye],j),we=se(ue.row,ue.col,j),ne=Math.min(ue.row,ne),le=Math.max(we.row,le),ie=Math.min(ue.col,ie),re=Math.max(we.col,re)),((parseInt(t(j[le][ye]).attr(\"rowspan\"),10)||1)>1||(parseInt(t(j[le][ye]).attr(\"colspan\"),10)||1)>1)&&(ue=Z(j[le][ye],j),we=se(ue.row,ue.col,j),ne=Math.min(ue.row,ne),le=Math.max(we.row,le),ie=Math.min(ue.col,ie),re=Math.max(we.col,re));return ne==P&&le==D&&ie==K&&re==q?{min_i:P,max_i:D,min_j:K,max_j:q}:ce(ne,le,ie,re,j)}function he(P){var D=ee(P),K=t(P[D.min_i][D.min_j]),q=t(P[D.min_i][D.max_j]),j=t(P[D.max_i][D.min_j]),ne=K.offset().left,le=q.offset().left+q.outerWidth(),ie=K.offset().top,re=j.offset().top+j.outerHeight();return{left:ne,right:le,top:ie,bottom:re}}function ve(P,D){if(t(P).is(D))R(),t(P).addClass(\"fr-selected-cell\");else{$(),e.edit.off();var K=J(),q=Z(P,K),j=Z(D,K),ne=ce(Math.min(q.row,j.row),Math.max(q.row,j.row),Math.min(q.col,j.col),Math.max(q.col,j.col),K);R(),P.classList.add(\"fr-cell-fixed\"),D.classList.add(\"fr-cell-handler\");for(var le=ne.min_i;le<=ne.max_i;le++)for(var ie=ne.min_j;ie<=ne.max_j;ie++)t(K[le][ie]).addClass(\"fr-selected-cell\")}}function me(P){var D=null,K=t(P.target);return P.target.tagName==\"TD\"||P.target.tagName==\"TH\"?D=P.target:K.closest(\"td\").length>0?D=K.closest(\"td\").get(0):K.closest(\"th\").length>0&&(D=K.closest(\"th\").get(0)),e.$el.find(D).length===0?null:D}function Ce(){R(),e.popups.hide(\"table.edit\")}function Te(P){var D=me(P);if(t(D).parents(\"[contenteditable]:not(.fr-element):not(.fr-img-caption):not(body):first\").attr(\"contenteditable\")==\"false\")return!0;if(Ne().length>0&&!D&&Ce(),e.popups.hideAll([\"table.edit\"]),!e.edit.isDisabled()||e.popups.isVisible(\"table.edit\"))if(P.which==1&&!(P.which==1&&e.helpers.isMac()&&P.ctrlKey)){if(x=!0,D){Ne().length>0&&!P.shiftKey&&Ce(),P.stopPropagation(),e.events.trigger(\"image.hideResizer\"),e.events.trigger(\"video.hideResizer\"),O=!0;var K=D.tagName.toLowerCase();P.shiftKey&&e.$el.find(K+\".fr-selected-cell\").length>0?t(e.$el.find(K+\".fr-selected-cell\").closest(\"table\")).is(t(D).closest(\"table\"))?ve(X,D):$():((e.keys.ctrlKey(P)||P.shiftKey)&&(Ne().length>1||t(D).find(e.selection.element()).length===0&&!t(D).is(e.selection.element()))&&$(),X=D,e.opts.tableEditButtons.length>0&&ve(X,X))}}else(P.which==3||P.which==1&&e.helpers.isMac()&&P.ctrlKey)&&D&&Ce()}function xe(P){if(e.popups.areVisible())return!0;if(!O&&!e.$tb.is(P.target)&&!e.$tb.is(t(P.target).closest(e.$tb.get(0)))&&(Ne().length>0&&e.toolbar.enable(),R()),P.which==1&&!(P.which==1&&e.helpers.isMac()&&P.ctrlKey)){if(x=!1,O){O=!1;var D=me(P);!D&&Ne().length==1?R():Ne().length>0&&(e.selection.isCollapsed()?F():R())}if(U){U=!1,n.removeClass(\"fr-moving\"),e.$el.removeClass(\"fr-no-selection\"),e.edit.on();var K=parseFloat(n.css(\"left\"))+e.opts.tableResizerOffset+e.$wp.offset().left;e.opts.iframe&&(K-=e.$iframe.offset().left),n.data(\"release-position\",K),n.removeData(\"max-left\"),n.removeData(\"max-right\"),Ye(P),Ue()}}}function Ae(P){if(O===!0&&e.opts.tableEditButtons.length>0){var D=t(P.currentTarget);if(D.closest(\"table\").is(Ve())){if(P.currentTarget.tagName==\"TD\"&&e.$el.find(\"th.fr-selected-cell\").length===0){ve(X,P.currentTarget);return}else if(P.currentTarget.tagName==\"TH\"&&e.$el.find(\"td.fr-selected-cell\").length===0){ve(X,P.currentTarget);return}}$()}}function Me(P,D){for(var K=P;K&&K.tagName!=\"TABLE\"&&K.parentNode!=e.el;)K=K.parentNode;if(K&&K.tagName==\"TABLE\"){var q=J(t(K));D==\"up\"?Se(Z(P,q),K,q):D==\"down\"&&Re(Z(P,q),K,q)}}function Ee(P,D,K,q){for(var j=D,ne;j!=e.el&&!(j.tagName==\"TD\"||j.tagName==\"TH\"||(q==\"up\"?ne=j.previousElementSibling:q==\"down\"&&(ne=j.nextElementSibling),ne));)j=j.parentNode;j.tagName==\"TD\"||j.tagName==\"TH\"?Me(j,q):ne&&(q==\"up\"&&e.selection.setAtEnd(ne),q==\"down\"&&e.selection.setAtStart(ne))}function Se(P,D,K){P.row>0?e.selection.setAtEnd(K[P.row-1][P.col]):Ee(P,D,K,\"up\")}function Re(P,D,K){var q=parseInt(K[P.row][P.col].getAttribute(\"rowspan\"),10)||1;P.row<K.length-q?e.selection.setAtStart(K[P.row+q][P.col]):Ee(P,D,K,\"down\")}function Ke(P){var D=P.which,K=e.selection.blocks();if(K.length&&(K=K[0],K.tagName==\"TD\"||K.tagName==\"TH\")){for(var q=K;q&&q.tagName!=\"TABLE\"&&q.parentNode!=e.el;)q=q.parentNode;if(q&&q.tagName==\"TABLE\"&&(t.FE.KEYCODE.ARROW_LEFT==D||t.FE.KEYCODE.ARROW_UP==D||t.FE.KEYCODE.ARROW_RIGHT==D||t.FE.KEYCODE.ARROW_DOWN==D)&&(Ne().length>0&&Ce(),e.browser.webkit&&(t.FE.KEYCODE.ARROW_UP==D||t.FE.KEYCODE.ARROW_DOWN==D))){var j=e.selection.ranges(0).startContainer;if(j.nodeType==Node.TEXT_NODE&&(t.FE.KEYCODE.ARROW_UP==D&&j.previousSibling||t.FE.KEYCODE.ARROW_DOWN==D&&j.nextSibling))return;P.preventDefault(),P.stopPropagation();var ne=J(t(q)),le=Z(K,ne);return t.FE.KEYCODE.ARROW_UP==D?Se(le,q,ne):t.FE.KEYCODE.ARROW_DOWN==D&&Re(le,q,ne),e.selection.restore(),!1}}}function Fe(){e.shared.$table_resizer||(e.shared.$table_resizer=t('<div class=\"fr-table-resizer\"><div></div></div>')),n=e.shared.$table_resizer,e.events.$on(n,\"mousedown\",function(P){if(!e.core.sameInstance(n))return!0;if(Ne().length>0&&Ce(),P.which==1)return e.selection.save(),U=!0,n.addClass(\"fr-moving\"),$(),e.edit.off(),n.find(\"div\").css(\"opacity\",1),!1}),e.events.$on(n,\"mousemove\",function(P){if(!e.core.sameInstance(n))return!0;U&&(e.opts.iframe&&(P.pageX-=e.$iframe.offset().left),Je(P))}),e.events.on(\"shared.destroy\",function(){n.html(\"\").removeData().remove(),n=null},!0),e.events.on(\"destroy\",function(){e.$el.find(\".fr-selected-cell\").removeClass(\"fr-selected-cell\"),n.hide().appendTo(t(\"body:first\"))},!0)}function Ue(){n&&(n.find(\"div\").css(\"opacity\",0),n.css(\"top\",0),n.css(\"left\",0),n.css(\"height\",0),n.find(\"div\").css(\"height\",0),n.hide())}function We(){r&&r.removeClass(\"fr-visible\").css(\"left\",\"-9999px\")}function Qe(P,D){var K=t(D),q=K.closest(\"table\"),j=q.parent();if(D&&D.tagName!=\"TD\"&&D.tagName!=\"TH\"&&(K.closest(\"td\").length>0?D=K.closest(\"td\"):K.closest(\"th\").length>0&&(D=K.closest(\"th\"))),D&&(D.tagName==\"TD\"||D.tagName==\"TH\")){if(K=t(D),e.$el.find(K).length===0)return!1;var ne=K.offset().left-1,le=ne+K.outerWidth();if(Math.abs(P.pageX-ne)<=e.opts.tableResizerOffset||Math.abs(le-P.pageX)<=e.opts.tableResizerOffset){var ie=J(q),re=Z(D,ie),oe=se(re.row,re.col,ie),ye,ue,we=q.offset().top,Oe=q.outerHeight()-1,ke,Ie,He;e.opts.direction!=\"rtl\"?P.pageX-ne<=e.opts.tableResizerOffset?(ke=ne,re.col>0?(Ie=ne-Pe(re.col-1,ie)+e.opts.tableResizingLimit,He=ne+Pe(re.col,ie)-e.opts.tableResizingLimit,ye=re.col-1,ue=re.col):(ye=null,ue=0,Ie=q.offset().left-1-parseInt(q.css(\"margin-left\"),10),He=q.offset().left-1+q.width()-ie[0].length*e.opts.tableResizingLimit)):le-P.pageX<=e.opts.tableResizerOffset&&(ke=le,oe.col<ie[oe.row].length&&ie[oe.row][oe.col+1]?(Ie=le-Pe(oe.col,ie)+e.opts.tableResizingLimit,He=le+Pe(oe.col+1,ie)-e.opts.tableResizingLimit,ye=oe.col,ue=oe.col+1):(ye=oe.col,ue=null,Ie=q.offset().left-1+ie[0].length*e.opts.tableResizingLimit,He=j.offset().left-1+j.width()+parseFloat(j.css(\"padding-left\")))):le-P.pageX<=e.opts.tableResizerOffset?(ke=le,re.col>0?(Ie=le-Pe(re.col,ie)+e.opts.tableResizingLimit,He=le+Pe(re.col-1,ie)-e.opts.tableResizingLimit,ye=re.col,ue=re.col-1):(ye=null,ue=0,Ie=q.offset().left+ie[0].length*e.opts.tableResizingLimit,He=j.offset().left-1+j.width()+parseFloat(j.css(\"padding-left\")))):P.pageX-ne<=e.opts.tableResizerOffset&&(ke=ne,oe.col<ie[oe.row].length&&ie[oe.row][oe.col+1]?(Ie=ne-Pe(oe.col+1,ie)+e.opts.tableResizingLimit,He=ne+Pe(oe.col,ie)-e.opts.tableResizingLimit,ye=oe.col+1,ue=oe.col):(ye=oe.col,ue=null,Ie=j.offset().left+parseFloat(j.css(\"padding-left\")),He=q.offset().left-1+q.width()-ie[0].length*e.opts.tableResizingLimit)),n||Fe(),n.data(\"table\",q),n.data(\"first\",ye),n.data(\"second\",ue),n.data(\"instance\",e),e.$wp.append(n);var Be=ke-e.win.pageXOffset-e.opts.tableResizerOffset-e.$wp.offset().left,Ze=we-e.$wp.offset().top+e.$wp.scrollTop();e.opts.iframe&&(Be+=e.$iframe.offset().left,Ze+=e.$iframe.offset().top,Ie+=e.$iframe.offset().left,He+=e.$iframe.offset().left),n.data(\"max-left\",Ie),n.data(\"max-right\",He),n.data(\"origin\",ke-e.win.pageXOffset),n.css(\"top\",Ze),n.css(\"left\",Be),n.css(\"height\",Oe),n.find(\"div\").css(\"height\",Oe),n.css(\"padding-left\",e.opts.tableResizerOffset),n.css(\"padding-right\",e.opts.tableResizerOffset),n.show()}else e.core.sameInstance(n)&&Ue()}else n&&K.get(0)!=n.get(0)&&K.parent().get(0)!=n.get(0)&&e.core.sameInstance(n)&&Ue()}function je(P,D){if(e.$box.find(\".fr-line-breaker\").is(\":visible\"))return!1;r||nt(),e.$box.append(r),r.data(\"instance\",e);var K=t(D),q=K.find(\"tr:first\"),j=P.pageX,ne=0,le=0;e.opts.iframe&&(ne+=e.$iframe.offset().left-e.helpers.scrollLeft(),le+=e.$iframe.offset().top-e.helpers.scrollTop());var ie;q.find(\"th, td\").each(function(){var re=t(this);if(re.offset().left<=j&&j<re.offset().left+re.outerWidth()/2)return ie=parseInt(r.find(\"a\").css(\"width\"),10),r.css(\"top\",le+re.offset().top-e.$box.offset().top-ie-5),r.css(\"left\",ne+re.offset().left-e.$box.offset().left-ie/2),r.data(\"selected-cell\",re),r.data(\"position\",\"before\"),r.addClass(\"fr-visible\"),!1;if(re.offset().left+re.outerWidth()/2<=j&&j<re.offset().left+re.outerWidth())return ie=parseInt(r.find(\"a\").css(\"width\"),10),r.css(\"top\",le+re.offset().top-e.$box.offset().top-ie-5),r.css(\"left\",ne+re.offset().left-e.$box.offset().left+re.outerWidth()-ie/2),r.data(\"selected-cell\",re),r.data(\"position\",\"after\"),r.addClass(\"fr-visible\"),!1})}function fe(P,D){if(e.$box.find(\".fr-line-breaker\").is(\":visible\"))return!1;r||nt(),e.$box.append(r),r.data(\"instance\",e);var K=t(D),q=P.pageY,j=0,ne=0;e.opts.iframe&&(j+=e.$iframe.offset().left-e.helpers.scrollLeft(),ne+=e.$iframe.offset().top-e.helpers.scrollTop());var le;K.find(\"tr\").each(function(){var ie=t(this);if(ie.offset().top<=q&&q<ie.offset().top+ie.outerHeight()/2)return le=parseInt(r.find(\"a\").css(\"width\"),10),r.css(\"top\",ne+ie.offset().top-e.$box.offset().top-le/2),r.css(\"left\",j+ie.offset().left-e.$box.offset().left-le-5),r.data(\"selected-cell\",ie.find(\"td:first\")),r.data(\"position\",\"above\"),r.addClass(\"fr-visible\"),!1;if(ie.offset().top+ie.outerHeight()/2<=q&&q<ie.offset().top+ie.outerHeight())return le=parseInt(r.find(\"a\").css(\"width\"),10),r.css(\"top\",ne+ie.offset().top-e.$box.offset().top+ie.outerHeight()-le/2),r.css(\"left\",j+ie.offset().left-e.$box.offset().left-le-5),r.data(\"selected-cell\",ie.find(\"td:first\")),r.data(\"position\",\"below\"),r.addClass(\"fr-visible\"),!1})}function be(P,D){if(Ne().length===0){var K,q,j;if(D&&(D.tagName==\"HTML\"||D.tagName==\"BODY\"||e.node.isElement(D)))for(K=1;K<=e.opts.tableInsertHelperOffset;K++){if(q=e.doc.elementFromPoint(P.pageX-e.win.pageXOffset,P.pageY-e.win.pageYOffset+K),t(q).hasClass(\"fr-tooltip\"))return!0;if(q&&(q.tagName==\"TH\"||q.tagName==\"TD\"||q.tagName==\"TABLE\")&&(t(q).parents(\".fr-wrapper\").length||e.opts.iframe))return je(P,t(q).closest(\"table\")),!0;if(j=e.doc.elementFromPoint(P.pageX-e.win.pageXOffset+K,P.pageY-e.win.pageYOffset),t(j).hasClass(\"fr-tooltip\"))return!0;if(j&&(j.tagName==\"TH\"||j.tagName==\"TD\"||j.tagName==\"TABLE\")&&(t(j).parents(\".fr-wrapper\").length||e.opts.iframe))return fe(P,t(j).closest(\"table\")),!0}e.core.sameInstance(r)&&We()}}function _e(P){Y=null;var D=e.doc.elementFromPoint(P.pageX-e.win.pageXOffset,P.pageY-e.win.pageYOffset);e.opts.tableResizer&&(!e.popups.areVisible()||e.popups.areVisible()&&e.popups.isVisible(\"table.edit\"))&&Qe(P,D),e.opts.tableInsertHelper&&!e.popups.areVisible()&&!(e.$tb.hasClass(\"fr-inline\")&&e.$tb.is(\":visible\"))&&be(P,D)}function De(){if(U){var P=n.data(\"table\"),D=P.offset().top-e.win.pageYOffset;e.opts.iframe&&(D+=e.$iframe.offset().top-e.helpers.scrollTop()),n.css(\"top\",D)}}function Ye(){var P=n.data(\"origin\"),D=n.data(\"release-position\");if(P!==D){var K=n.data(\"first\"),q=n.data(\"second\"),j=n.data(\"table\"),ne=j.outerWidth();if(e.undo.canDo()||e.undo.saveStep(),K!==null&&q!==null){var le=J(j),ie=[],re=[],oe=[],ye=[],ue,we,Oe;for(ue=0;ue<le.length;ue++)we=t(le[ue][K]),Oe=t(le[ue][q]),ie[ue]=we.outerWidth(),oe[ue]=Oe.outerWidth(),re[ue]=ie[ue]/ne*100,ye[ue]=oe[ue]/ne*100;for(ue=0;ue<le.length;ue++)if(we=t(le[ue][K]),Oe=t(le[ue][q]),le[ue][K]!=le[ue][q]){var ke=(re[ue]*(ie[ue]+D-P)/ie[ue]).toFixed(4);we.css(\"width\",ke+\"%\"),Oe.css(\"width\",(re[ue]+ye[ue]-ke).toFixed(4)+\"%\")}}else{var Ie=j.parent(),He=ne/Ie.width()*100,Be=(parseInt(j.css(\"margin-left\"),10)||0)/Ie.width()*100,Ze=(parseInt(j.css(\"margin-right\"),10)||0)/Ie.width()*100,T;e.opts.direction==\"rtl\"&&q===0||e.opts.direction!=\"rtl\"&&q!==0?(T=(ne+D-P)/ne*He,j.css(\"margin-right\",\"calc(100% - \"+Math.round(T).toFixed(4)+\"% - \"+Math.round(Be).toFixed(4)+\"%)\")):(e.opts.direction==\"rtl\"&&q!==0||e.opts.direction!=\"rtl\"&&q===0)&&(T=(ne-D+P)/ne*He,j.css(\"margin-left\",\"calc(100% - \"+Math.round(T).toFixed(4)+\"% - \"+Math.round(Ze).toFixed(4)+\"%)\")),j.css(\"width\",Math.round(T).toFixed(4)+\"%\")}e.selection.restore(),e.undo.saveStep(),e.events.trigger(\"table.resized\",[j.get(0)])}n.removeData(\"origin\"),n.removeData(\"release-position\"),n.removeData(\"first\"),n.removeData(\"second\"),n.removeData(\"table\")}function Pe(P,D){var K,q=t(D[0][P]).outerWidth();for(K=1;K<D.length;K++)q=Math.min(q,t(D[K][P]).outerWidth());return q}function tt(P,D,K){var q,j=0;for(q=P;q<=D;q++)j+=Pe(q,K);return j}function Je(P){if(Ne().length>1&&x&&$(),x===!1&&O===!1&&U===!1)Y&&clearTimeout(Y),(!e.edit.isDisabled()||e.popups.isVisible(\"table.edit\"))&&(Y=setTimeout(_e,30,P));else if(U){var D=P.pageX-e.win.pageXOffset;e.opts.iframe&&(D+=e.$iframe.offset().left);var K=n.data(\"max-left\"),q=n.data(\"max-right\");D>=K&&D<=q?n.css(\"left\",D-e.opts.tableResizerOffset-e.$wp.offset().left):D<K&&parseFloat(n.css(\"left\"),10)>K-e.opts.tableResizerOffset?n.css(\"left\",K-e.opts.tableResizerOffset-e.$wp.offset().left):D>q&&parseFloat(n.css(\"left\"),10)<q-e.opts.tableResizerOffset&&n.css(\"left\",q-e.opts.tableResizerOffset-e.$wp.offset().left)}else x&&We()}function qe(P){e.node.isEmpty(P.get(0))?P.prepend(t.FE.MARKERS):P.prepend(t.FE.START_MARKER).append(t.FE.END_MARKER)}function at(P){var D=P.which;if(D==t.FE.KEYCODE.TAB){var K;if(Ne().length>0)K=e.$el.find(\".fr-selected-cell:last\");else{var q=e.selection.element();q.tagName==\"TD\"||q.tagName==\"TH\"?K=t(q):q!=e.el&&(t(q).parentsUntil(e.$el,\"td\").length>0?K=t(q).parents(\"td:first\"):t(q).parentsUntil(e.$el,\"th\").length>0&&(K=t(q).parents(\"th:first\")))}if(K)return P.preventDefault(),t(e.selection.element()).parentsUntil(e.$el,\"ol, ul\").length>0&&(t(e.selection.element()).parents(\"li\").prev().length>0||t(e.selection.element()).is(\"li\")&&t(e.selection.element()).prev().length>0)?!0:(Ce(),P.shiftKey?K.prev().length>0?qe(K.prev()):K.closest(\"tr\").length>0&&K.closest(\"tr\").prev().length>0?qe(K.closest(\"tr\").prev().find(\"td:last\")):K.closest(\"tbody\").length>0&&K.closest(\"table\").find(\"thead tr\").length>0&&qe(K.closest(\"table\").find(\"thead tr th:last\")):K.next().length>0?qe(K.next()):K.closest(\"tr\").length>0&&K.closest(\"tr\").next().length>0?qe(K.closest(\"tr\").next().find(\"td:first\")):K.closest(\"thead\").length>0&&K.closest(\"table\").find(\"tbody tr\").length>0?qe(K.closest(\"table\").find(\"tbody tr td:first\")):(K.addClass(\"fr-selected-cell\"),M(\"below\"),R(),qe(K.closest(\"tr\").next().find(\"td:first\"))),e.selection.restore(),!1)}}function nt(){e.shared.$ti_helper||(e.shared.$ti_helper=t('<div class=\"fr-insert-helper\"><a class=\"fr-floating-btn\" role=\"button\" tabIndex=\"-1\" title=\"'+e.language.translate(\"Insert\")+'\"><svg viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M22,16.75 L16.75,16.75 L16.75,22 L15.25,22.000 L15.25,16.75 L10,16.75 L10,15.25 L15.25,15.25 L15.25,10 L16.75,10 L16.75,15.25 L22,15.25 L22,16.75 Z\"/></svg></a></div>'),e.events.bindClick(e.shared.$ti_helper,\"a\",function(){var P=r.data(\"selected-cell\"),D=r.data(\"position\"),K=r.data(\"instance\")||e;D==\"before\"||D==\"after\"?(e.undo.saveStep(),P.addClass(\"fr-selected-cell\"),K.table.insertColumn(D),P.removeClass(\"fr-selected-cell\"),e.undo.saveStep()):(D==\"above\"||D==\"below\")&&(e.undo.saveStep(),P.addClass(\"fr-selected-cell\"),K.table.insertRow(D),P.removeClass(\"fr-selected-cell\"),e.undo.saveStep()),We()}),e.events.on(\"shared.destroy\",function(){e.shared.$ti_helper.html(\"\").removeData().remove(),e.shared.$ti_helper=null},!0),e.events.$on(e.shared.$ti_helper,\"mousemove\",function(P){P.stopPropagation()},!0),e.events.$on(t(e.o_win),\"scroll\",function(){We()},!0),e.events.$on(e.$wp,\"scroll\",function(){We()},!0)),r=e.shared.$ti_helper,e.events.on(\"destroy\",function(){r=null}),e.tooltip.bind(e.$box,\".fr-insert-helper > a.fr-floating-btn\")}function st(){X=null,clearTimeout(Y)}function rt(){Ne().length>0?F():(e.popups.hide(\"table.insert\"),e.toolbar.showInline())}function Ne(){return e.el.querySelectorAll(\".fr-selected-cell\")}function Ve(){var P=Ne();if(P.length){for(var D=P[0];D&&D.tagName!=\"TABLE\"&&D.parentNode!=e.el;)D=D.parentNode;return D&&D.tagName==\"TABLE\"?t(D):t([])}return t([])}function ze(P){if(P.altKey&&P.which==t.FE.KEYCODE.SPACE){var D,K=e.selection.element();if(K.tagName==\"TD\"||K.tagName==\"TH\"?D=K:t(K).closest(\"td\").length>0?D=t(K).closest(\"td\").get(0):t(K).closest(\"th\").length>0&&(D=t(K).closest(\"th\").get(0)),D)return P.preventDefault(),ve(D,D),F(),!1}}function $e(P){var D=Ne();if(D.length>0){var K=J(),q=P.which,j,ne;D.length==1?(j=D[0],ne=j):(j=e.el.querySelector(\".fr-cell-fixed\"),ne=e.el.querySelector(\".fr-cell-handler\"));var le=Z(ne,K);if(t.FE.KEYCODE.ARROW_RIGHT==q){if(le.col<K[0].length-1)return ve(j,K[le.row][le.col+1]),!1}else if(t.FE.KEYCODE.ARROW_DOWN==q){if(le.row<K.length-1)return ve(j,K[le.row+1][le.col]),!1}else if(t.FE.KEYCODE.ARROW_LEFT==q){if(le.col>0)return ve(j,K[le.row][le.col-1]),!1}else if(t.FE.KEYCODE.ARROW_UP==q&&le.row>0)return ve(j,K[le.row-1][le.col]),!1}}function it(){if(!e.$wp)return!1;if(!e.helpers.isMobile()){x=!1,O=!1,U=!1,e.events.$on(e.$el,\"mousedown\",Te),e.popups.onShow(\"image.edit\",function(){R(),x=!1,O=!1}),e.popups.onShow(\"link.edit\",function(){R(),x=!1,O=!1}),e.events.on(\"commands.mousedown\",function(D){D.parents(\".fr-toolbar\").length>0&&R()}),e.events.$on(e.$el,\"mouseenter\",\"th, td\",Ae),e.events.$on(e.$win,\"mouseup\",xe),e.opts.iframe&&e.events.$on(t(e.o_win),\"mouseup\",xe),e.events.$on(e.$win,\"mousemove\",Je),e.events.$on(t(e.o_win),\"scroll\",De),e.events.on(\"contentChanged\",function(){Ne().length>0&&(F(),e.$el.find(\"img\").on(\"load.selected-cells\",function(){t(this).off(\"load.selected-cells\"),Ne().length>0&&F()}))}),e.events.$on(t(e.o_win),\"resize\",function(){R()}),e.events.on(\"toolbar.esc\",function(){if(Ne().length>0)return e.events.disableBlur(),e.events.focus(),!1},!0),e.events.$on(t(e.o_win),\"keydown\",function(){x&&O&&(x=!1,O=!1,e.$el.removeClass(\"fr-no-selection\"),e.edit.on(),e.selection.setAtEnd(e.$el.find(\".fr-selected-cell:last\").get(0)),e.selection.restore(),R())}),e.events.$on(e.$el,\"keydown\",function(D){D.shiftKey?$e(D)===!1&&setTimeout(function(){F()},0):Ke(D)}),e.events.on(\"keydown\",function(D){if(at(D)===!1)return!1;var K=Ne();if(K.length>0){if(K.length>0&&e.keys.ctrlKey(D)&&D.which==t.FE.KEYCODE.A)return R(),e.popups.isVisible(\"table.edit\")&&e.popups.hide(\"table.edit\"),K=[],!0;if(D.which==t.FE.KEYCODE.ESC&&e.popups.isVisible(\"table.edit\"))return R(),e.popups.hide(\"table.edit\"),D.preventDefault(),D.stopPropagation(),D.stopImmediatePropagation(),K=[],!1;if(K.length>1&&(D.which==t.FE.KEYCODE.BACKSPACE||D.which==t.FE.KEYCODE.DELETE)){e.undo.saveStep();for(var q=0;q<K.length;q++)t(K[q]).html(\"<br>\"),q==K.length-1&&t(K[q]).prepend(t.FE.MARKERS);return e.selection.restore(),e.undo.saveStep(),K=[],!1}if(K.length>1&&D.which!=t.FE.KEYCODE.F10&&!e.keys.isBrowserAction(D))return D.preventDefault(),K=[],!1}else if(K=[],ze(D)===!1)return!1},!0);var P=[];e.events.on(\"html.beforeGet\",function(){P=Ne();for(var D=0;D<P.length;D++)P[D].className=(P[D].className||\"\").replace(/fr-selected-cell/g,\"\")}),e.events.on(\"html.afterGet\",function(){for(var D=0;D<P.length;D++)P[D].className=(P[D].className?P[D].className.trim()+\" \":\"\")+\"fr-selected-cell\";P=[]}),L(!0),u(!0)}e.events.on(\"destroy\",st)}return{_init:it,insert:i,remove:S,insertRow:M,deleteRow:a,insertColumn:y,deleteColumn:c,mergeCells:w,splitCellVertically:G,splitCellHorizontally:C,addHeader:s,removeHeader:p,setBackground:W,showInsertPopup:_,showEditPopup:F,showColorsPopup:d,back:rt,verticalAlign:N,horizontalAlign:I,applyStyle:H,selectedTable:Ve,selectedCells:Ne,customColor:o,selectCells:ve}},t.FE.DefineIcon(\"insertTable\",{NAME:\"table\"}),t.FE.RegisterCommand(\"insertTable\",{title:\"Insert Table\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"table.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"table.insert\")):this.table.showInsertPopup()},plugin:\"table\"}),t.FE.RegisterCommand(\"tableInsert\",{callback:function(e,n,r){this.table.insert(n,r),this.popups.hide(\"table.insert\")}}),t.FE.DefineIcon(\"tableHeader\",{NAME:\"header\",FA5NAME:\"heading\"}),t.FE.RegisterCommand(\"tableHeader\",{title:\"Table Header\",focus:!1,toggle:!0,callback:function(){var e=this.popups.get(\"table.edit\").find('.fr-command[data-cmd=\"tableHeader\"]');e.hasClass(\"fr-active\")?this.table.removeHeader():this.table.addHeader()},refresh:function(e){var n=this.table.selectedTable();n.length>0&&(n.find(\"th\").length===0?e.removeClass(\"fr-active\").attr(\"aria-pressed\",!1):e.addClass(\"fr-active\").attr(\"aria-pressed\",!0))}}),t.FE.DefineIcon(\"tableRows\",{NAME:\"bars\"}),t.FE.RegisterCommand(\"tableRows\",{type:\"dropdown\",focus:!1,title:\"Row\",options:{above:\"Insert row above\",below:\"Insert row below\",delete:\"Delete row\"},html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=t.FE.COMMANDS.tableRows.options;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableRows\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.language.translate(n[r])+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){n==\"above\"||n==\"below\"?this.table.insertRow(n):this.table.deleteRow()}}),t.FE.DefineIcon(\"tableColumns\",{NAME:\"bars fa-rotate-90\"}),t.FE.RegisterCommand(\"tableColumns\",{type:\"dropdown\",focus:!1,title:\"Column\",options:{before:\"Insert column before\",after:\"Insert column after\",delete:\"Delete column\"},html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=t.FE.COMMANDS.tableColumns.options;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableColumns\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.language.translate(n[r])+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){n==\"before\"||n==\"after\"?this.table.insertColumn(n):this.table.deleteColumn()}}),t.FE.DefineIcon(\"tableCells\",{NAME:\"square-o\",FA5NAME:\"square\"}),t.FE.RegisterCommand(\"tableCells\",{type:\"dropdown\",focus:!1,title:\"Cell\",options:{merge:\"Merge cells\",\"vertical-split\":\"Vertical split\",\"horizontal-split\":\"Horizontal split\"},html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=t.FE.COMMANDS.tableCells.options;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableCells\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.language.translate(n[r])+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){n==\"merge\"?this.table.mergeCells():n==\"vertical-split\"?this.table.splitCellVertically():this.table.splitCellHorizontally()},refreshOnShow:function(e,n){this.$el.find(\".fr-selected-cell\").length>1?(n.find('a[data-param1=\"vertical-split\"]').addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),n.find('a[data-param1=\"horizontal-split\"]').addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),n.find('a[data-param1=\"merge\"]').removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1)):(n.find('a[data-param1=\"merge\"]').addClass(\"fr-disabled\").attr(\"aria-disabled\",!0),n.find('a[data-param1=\"vertical-split\"]').removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1),n.find('a[data-param1=\"horizontal-split\"]').removeClass(\"fr-disabled\").attr(\"aria-disabled\",!1))}}),t.FE.DefineIcon(\"tableRemove\",{NAME:\"trash\"}),t.FE.RegisterCommand(\"tableRemove\",{title:\"Remove Table\",focus:!1,callback:function(){this.table.remove()}}),t.FE.DefineIcon(\"tableStyle\",{NAME:\"paint-brush\"}),t.FE.RegisterCommand(\"tableStyle\",{title:\"Table Style\",type:\"dropdown\",focus:!1,html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.tableStyles;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableStyle\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.language.translate(n[r])+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.table.applyStyle(n,this.$el.find(\".fr-selected-cell\").closest(\"table\"),this.opts.tableMultipleStyles,this.opts.tableStyles)},refreshOnShow:function(e,n){var r=this.$el.find(\".fr-selected-cell\").closest(\"table\");r&&n.find(\".fr-command\").each(function(){var O=t(this).data(\"param1\"),x=r.hasClass(O);t(this).toggleClass(\"fr-active\",x).attr(\"aria-selected\",x)})}}),t.FE.DefineIcon(\"tableCellBackground\",{NAME:\"tint\"}),t.FE.RegisterCommand(\"tableCellBackground\",{title:\"Cell Background\",focus:!1,popup:!0,callback:function(){this.table.showColorsPopup()}}),t.FE.RegisterCommand(\"tableCellBackgroundColor\",{undo:!0,focus:!1,callback:function(e,n){this.table.setBackground(n)}}),t.FE.DefineIcon(\"tableBack\",{NAME:\"arrow-left\"}),t.FE.RegisterCommand(\"tableBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,callback:function(){this.table.back()},refresh:function(e){this.table.selectedCells().length===0&&!this.opts.toolbarInline?(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\")):(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\"))}}),t.FE.DefineIcon(\"tableCellVerticalAlign\",{NAME:\"arrows-v\",FA5NAME:\"arrows-alt-v\"}),t.FE.RegisterCommand(\"tableCellVerticalAlign\",{type:\"dropdown\",focus:!1,title:\"Vertical Align\",options:{Top:\"Align Top\",Middle:\"Align Middle\",Bottom:\"Align Bottom\"},html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=t.FE.COMMANDS.tableCellVerticalAlign.options;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableCellVerticalAlign\" data-param1=\"'+r.toLowerCase()+'\" title=\"'+this.language.translate(n[r])+'\">'+this.language.translate(r)+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.table.verticalAlign(n)},refreshOnShow:function(e,n){n.find('.fr-command[data-param1=\"'+this.$el.find(\".fr-selected-cell\").css(\"vertical-align\")+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}}),t.FE.DefineIcon(\"tableCellHorizontalAlign\",{NAME:\"align-left\"}),t.FE.DefineIcon(\"align-left\",{NAME:\"align-left\"}),t.FE.DefineIcon(\"align-right\",{NAME:\"align-right\"}),t.FE.DefineIcon(\"align-center\",{NAME:\"align-center\"}),t.FE.DefineIcon(\"align-justify\",{NAME:\"align-justify\"}),t.FE.RegisterCommand(\"tableCellHorizontalAlign\",{type:\"dropdown\",focus:!1,title:\"Horizontal Align\",options:{left:\"Align Left\",center:\"Align Center\",right:\"Align Right\",justify:\"Align Justify\"},html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=t.FE.COMMANDS.tableCellHorizontalAlign.options;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command fr-title\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableCellHorizontalAlign\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.icon.create(\"align-\"+r)+'<span class=\"fr-sr-only\">'+this.language.translate(n[r])+\"</span></a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.table.horizontalAlign(n)},refresh:function(e){var n=this.table.selectedCells();n.length&&e.find(\"> *:first\").replaceWith(this.icon.create(\"align-\"+this.helpers.getAlignment(t(n[0]))))},refreshOnShow:function(e,n){n.find('.fr-command[data-param1=\"'+this.helpers.getAlignment(this.$el.find(\".fr-selected-cell:first\"))+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0)}}),t.FE.DefineIcon(\"tableCellStyle\",{NAME:\"magic\"}),t.FE.RegisterCommand(\"tableCellStyle\",{title:\"Cell Style\",type:\"dropdown\",focus:!1,html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.tableCellStyles;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"tableCellStyle\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.language.translate(n[r])+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.table.applyStyle(n,this.$el.find(\".fr-selected-cell\"),this.opts.tableCellMultipleStyles,this.opts.tableCellStyles)},refreshOnShow:function(e,n){var r=this.$el.find(\".fr-selected-cell:first\");r&&n.find(\".fr-command\").each(function(){var O=t(this).data(\"param1\"),x=r.hasClass(O);t(this).toggleClass(\"fr-active\",x).attr(\"aria-selected\",x)})}}),t.FE.RegisterCommand(\"tableCellBackgroundCustomColor\",{title:\"OK\",undo:!0,callback:function(){this.table.customColor()}}),t.FE.DefineIcon(\"tableColorRemove\",{NAME:\"eraser\"})})(jQuery);(function(t){\"use strict\";t.extend(t.FE.POPUP_TEMPLATES,{\"video.insert\":\"[_BUTTONS_][_BY_URL_LAYER_][_EMBED_LAYER_]\",\"video.edit\":\"[_BUTTONS_]\",\"video.size\":\"[_BUTTONS_][_SIZE_LAYER_]\"}),t.extend(t.FE.DEFAULTS,{videoInsertButtons:[\"videoBack\",\"|\",\"videoByURL\",\"videoEmbed\"],videoEditButtons:[\"videoDisplay\",\"videoAlign\",\"videoSize\",\"videoRemove\"],videoResize:!0,videoSizeButtons:[\"videoBack\",\"|\"],videoSplitHTML:!1,videoTextNear:!0,videoDefaultAlign:\"center\",videoDefaultDisplay:\"block\",videoMove:!0}),t.FE.VIDEO_PROVIDERS=[{test_regex:/^.*((youtu.be)|(youtube.com))\\/((v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))?\\??v?=?([^#\\&\\?]*).*/,url_regex:/(?:https?:\\/\\/)?(?:www\\.)?(?:m\\.)?(?:youtube\\.com|youtu\\.be)\\/(?:watch\\?v=|embed\\/)?([0-9a-zA-Z_\\-]+)(.+)?/g,url_text:\"//www.youtube.com/embed/$1\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}?wmode=opaque\" frameborder=\"0\" allowfullscreen></iframe>'},{test_regex:/^.*(vimeo\\.com\\/)((channels\\/[A-z]+\\/)|(groups\\/[A-z]+\\/videos\\/))?([0-9]+)/,url_regex:/(?:https?:\\/\\/)?(?:www\\.)?(?:vimeo\\.com)\\/(?:channels\\/[A-z]+\\/|groups\\/[A-z]+\\/videos\\/)?(.+)/g,url_text:\"//player.vimeo.com/video/$1\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}\" frameborder=\"0\" allowfullscreen></iframe>'},{test_regex:/^.+(dailymotion.com|dai.ly)\\/(video|hub)?\\/?([^_]+)[^#]*(#video=([^_&]+))?/,url_regex:/(?:https?:\\/\\/)?(?:www\\.)?(?:dailymotion\\.com|dai\\.ly)\\/(?:video|hub)?\\/?(.+)/g,url_text:\"//www.dailymotion.com/embed/video/$1\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}\" frameborder=\"0\" allowfullscreen></iframe>'},{test_regex:/^.+(screen.yahoo.com)\\/[^_&]+/,url_regex:\"\",url_text:\"\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}?format=embed\" frameborder=\"0\" allowfullscreen=\"true\" mozallowfullscreen=\"true\" webkitallowfullscreen=\"true\" allowtransparency=\"true\"></iframe>'},{test_regex:/^.+(rutube.ru)\\/[^_&]+/,url_regex:/(?:https?:\\/\\/)?(?:www\\.)?(?:rutube\\.ru)\\/(?:video)?\\/?(.+)/g,url_text:\"//rutube.ru/play/embed/$1\",html:'<iframe width=\"640\" height=\"360\" src=\"{url}\" frameborder=\"0\" allowfullscreen=\"true\" mozallowfullscreen=\"true\" webkitallowfullscreen=\"true\" allowtransparency=\"true\"></iframe>'}],t.FE.VIDEO_EMBED_REGEX=/^\\W*((<iframe.*><\\/iframe>)|(<embed.*>))\\W*$/i,t.FE.PLUGINS.video=function(e){var n,r,O,x;function X(){var g=e.popups.get(\"video.insert\"),R=g.find(\".fr-video-by-url-layer input\");R.val(\"\").trigger(\"change\");var $=g.find(\".fr-video-embed-layer textarea\");$.val(\"\").trigger(\"change\")}function Y(){var g=e.$tb.find('.fr-command[data-cmd=\"insertVideo\"]'),R=e.popups.get(\"video.insert\");if(R||(R=_()),!R.hasClass(\"fr-active\")){e.popups.refresh(\"video.insert\"),e.popups.setContainer(\"video.insert\",e.$tb);var $=g.offset().left+g.outerWidth()/2,ee=g.offset().top+(e.opts.toolbarBottom?10:g.outerHeight()-10);e.popups.show(\"video.insert\",$,ee,g.outerHeight())}}function U(){var g=e.popups.get(\"video.edit\");g||(g=y()),e.popups.setContainer(\"video.edit\",t(e.opts.scrollableContainer)),e.popups.refresh(\"video.edit\");var R=x.find(\"iframe, embed, video\");e.popups.showEl(\"video.edit\",R)}function _(g){if(g)return e.popups.onRefresh(\"video.insert\",X),!0;var R=\"\";e.opts.videoInsertButtons.length>1&&(R='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.videoInsertButtons)+\"</div>\");var $=\"\";e.opts.videoInsertButtons.indexOf(\"videoByURL\")>=0&&($='<div class=\"fr-video-by-url-layer fr-layer fr-active\" id=\"fr-video-by-url-layer-'+e.id+'\"><div class=\"fr-input-line\"><input type=\"text\" placeholder=\"http://\" tabIndex=\"1\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"videoInsertByURL\" tabIndex=\"2\">'+e.language.translate(\"Insert\")+\"</button></div></div>\");var ee=\"\";e.opts.videoInsertButtons.indexOf(\"videoEmbed\")>=0&&(ee='<div class=\"fr-video-embed-layer fr-layer\" id=\"fr-video-embed-layer-'+e.id+'\"><div class=\"fr-input-line\"><textarea type=\"text\" placeholder=\"'+e.language.translate(\"Embedded Code\")+'\" tabIndex=\"1\" rows=\"5\"></textarea></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"videoInsertEmbed\" tabIndex=\"2\">'+e.language.translate(\"Insert\")+\"</button></div></div>\");var ce={buttons:R,by_url_layer:$,embed_layer:ee},he=e.popups.create(\"video.insert\",ce);return he}function F(g){var R=e.popups.get(\"video.insert\"),$,ee;if(!x&&!e.opts.toolbarInline){var ce=e.$tb.find('.fr-command[data-cmd=\"insertVideo\"]');$=ce.offset().left+ce.outerWidth()/2,ee=ce.offset().top+(e.opts.toolbarBottom?10:ce.outerHeight()-10)}e.opts.toolbarInline&&(ee=R.offset().top-e.helpers.getPX(R.css(\"margin-top\")),R.hasClass(\"fr-above\")&&(ee+=R.outerHeight())),R.find(\".fr-layer\").removeClass(\"fr-active\"),R.find(\".fr-\"+g+\"-layer\").addClass(\"fr-active\"),e.popups.show(\"video.insert\",$,ee,0)}function d(g){var R=e.popups.get(\"video.insert\");R.find(\".fr-video-by-url-layer\").hasClass(\"fr-active\")&&g.addClass(\"fr-active\")}function v(g){var R=e.popups.get(\"video.insert\");R.find(\".fr-video-embed-layer\").hasClass(\"fr-active\")&&g.addClass(\"fr-active\")}function L(g){e.events.focus(!0),e.selection.restore(),e.html.insert('<span contenteditable=\"false\" draggable=\"true\" class=\"fr-jiv fr-video fr-dv'+e.opts.videoDefaultDisplay[0]+(e.opts.videoDefaultAlign!=\"center\"?\" fr-fv\"+e.opts.videoDefaultAlign[0]:\"\")+'\">'+g+\"</span>\",!1,e.opts.videoSplitHTML),e.popups.hide(\"video.insert\");var R=e.$el.find(\".fr-jiv\");R.removeClass(\"fr-jiv\"),R.toggleClass(\"fr-draggable\",e.opts.videoMove),e.events.trigger(\"video.inserted\",[R])}function b(g){if(typeof g>\"u\"){var R=e.popups.get(\"video.insert\");g=R.find('.fr-video-by-url-layer input[type=\"text\"]').val()||\"\"}var $=null;if(e.helpers.isURL(g))for(var ee=0;ee<t.FE.VIDEO_PROVIDERS.length;ee++){var ce=t.FE.VIDEO_PROVIDERS[ee];if(ce.test_regex.test(g)){$=g.replace(ce.url_regex,ce.url_text),$=ce.html.replace(/\\{url\\}/,$);break}}$?L($):e.events.trigger(\"video.linkError\",[g])}function h(g){if(typeof g>\"u\"){var R=e.popups.get(\"video.insert\");g=R.find(\".fr-video-embed-layer textarea\").val()||\"\"}g.length===0||!t.FE.VIDEO_EMBED_REGEX.test(g)?e.events.trigger(\"video.codeError\",[g]):L(g)}function m(g){if(!e.core.sameInstance(O))return!0;g.preventDefault(),g.stopPropagation();var R=g.pageX||(g.originalEvent.touches?g.originalEvent.touches[0].pageX:null),$=g.pageY||(g.originalEvent.touches?g.originalEvent.touches[0].pageY:null);if(!R||!$)return!1;e.undo.canDo()||e.undo.saveStep(),r=t(this),r.data(\"start-x\",R),r.data(\"start-y\",$),n.show(),e.popups.hideAll(),p()}function u(g){if(!e.core.sameInstance(O))return!0;if(r){g.preventDefault();var R=g.pageX||(g.originalEvent.touches?g.originalEvent.touches[0].pageX:null),$=g.pageY||(g.originalEvent.touches?g.originalEvent.touches[0].pageY:null);if(!R||!$)return!1;var ee=r.data(\"start-x\"),ce=r.data(\"start-y\");r.data(\"start-x\",R),r.data(\"start-y\",$);var he=R-ee,ve=$-ce,me=x.find(\"iframe, embed, video\"),Ce=me.width(),Te=me.height();(r.hasClass(\"fr-hnw\")||r.hasClass(\"fr-hsw\"))&&(he=0-he),(r.hasClass(\"fr-hnw\")||r.hasClass(\"fr-hne\"))&&(ve=0-ve),me.css(\"width\",Ce+he),me.css(\"height\",Te+ve),me.removeAttr(\"width\"),me.removeAttr(\"height\"),l()}}function V(g){if(!e.core.sameInstance(O))return!0;r&&x&&(g&&g.stopPropagation(),r=null,n.hide(),l(),U(),e.undo.saveStep())}function E(g){return'<div class=\"fr-handler fr-h'+g+'\"></div>'}function o(){var g;e.shared.$video_resizer?(O=e.shared.$video_resizer,n=e.shared.$vid_overlay,e.events.on(\"destroy\",function(){O.removeClass(\"fr-active\").appendTo(t(\"body\"))},!0)):(e.shared.$video_resizer=t('<div class=\"fr-video-resizer\"></div>'),O=e.shared.$video_resizer,e.events.$on(O,\"mousedown\",function(R){R.stopPropagation()},!0),e.opts.videoResize&&(O.append(E(\"nw\")+E(\"ne\")+E(\"sw\")+E(\"se\")),e.shared.$vid_overlay=t('<div class=\"fr-video-overlay\"></div>'),n=e.shared.$vid_overlay,g=O.get(0).ownerDocument,t(g).find(\"body\").append(n))),e.events.on(\"shared.destroy\",function(){O.html(\"\").removeData().remove(),O=null,e.opts.videoResize&&(n.remove(),n=null)},!0),e.helpers.isMobile()||e.events.$on(t(e.o_win),\"resize.video\",function(){S(!0)}),e.opts.videoResize&&(g=O.get(0).ownerDocument,e.events.$on(O,e._mousedown,\".fr-handler\",m),e.events.$on(t(g),e._mousemove,u),e.events.$on(t(g.defaultView||g.parentWindow),e._mouseup,V),e.events.$on(n,\"mouseleave\",V))}function l(){O||o(),(e.$wp||t(e.opts.scrollableContainer)).append(O),O.data(\"instance\",e);var g=x.find(\"iframe, embed, video\");O.css(\"top\",(e.opts.iframe?g.offset().top-1:g.offset().top-e.$wp.offset().top-1)+e.$wp.scrollTop()).css(\"left\",(e.opts.iframe?g.offset().left-1:g.offset().left-e.$wp.offset().left-1)+e.$wp.scrollLeft()).css(\"width\",g.outerWidth()).css(\"height\",g.height()).addClass(\"fr-active\")}var f;function i(g){if(g&&g.type==\"touchend\"&&f)return!0;if(g.preventDefault(),g.stopPropagation(),e.edit.isDisabled())return!1;for(var R=0;R<t.FE.INSTANCES.length;R++)t.FE.INSTANCES[R]!=e&&t.FE.INSTANCES[R].events.trigger(\"video.hideResizer\");e.toolbar.disable(),e.helpers.isMobile()&&(e.events.disableBlur(),e.$el.blur(),e.events.enableBlur()),x=t(this),t(this).addClass(\"fr-active\"),e.opts.iframe&&e.size.syncIframe(),l(),U(),e.selection.clear(),e.button.bulkRefresh(),e.events.trigger(\"image.hideResizer\")}function S(g){x&&(M()||g===!0)&&(O.removeClass(\"fr-active\"),e.toolbar.enable(),x.removeClass(\"fr-active\"),x=null,p())}e.shared.vid_exit_flag=!1;function s(){e.shared.vid_exit_flag=!0}function p(){e.shared.vid_exit_flag=!1}function M(){return e.shared.vid_exit_flag}function a(){e.events.on(\"mousedown window.mousedown\",s),e.events.on(\"window.touchmove\",p),e.events.on(\"mouseup window.mouseup\",S),e.events.on(\"commands.mousedown\",function(g){g.parents(\".fr-toolbar\").length>0&&S()}),e.events.on(\"blur video.hideResizer commands.undo commands.redo element.dropped\",function(){S(!0)})}function y(){var g=\"\";e.opts.videoEditButtons.length>=1&&(g+='<div class=\"fr-buttons\">',g+=e.button.buildList(e.opts.videoEditButtons),g+=\"</div>\");var R={buttons:g},$=e.popups.create(\"video.edit\",R);return e.events.$on(e.$wp,\"scroll.video-edit\",function(){x&&e.popups.isVisible(\"video.edit\")&&U()}),$}function c(){if(x){var g=e.popups.get(\"video.size\"),R=x.find(\"iframe, embed, video\");g.find('input[name=\"width\"]').val(R.get(0).style.width||R.attr(\"width\")).trigger(\"change\"),g.find('input[name=\"height\"]').val(R.get(0).style.height||R.attr(\"height\")).trigger(\"change\")}}function k(){var g=e.popups.get(\"video.size\");g||(g=A()),e.popups.refresh(\"video.size\"),e.popups.setContainer(\"video.size\",t(e.opts.scrollableContainer));var R=x.find(\"iframe, embed, video\");e.popups.showEl(\"video.size\",R)}function A(g){if(g)return e.popups.onRefresh(\"video.size\",c),!0;var R=\"\";R='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.videoSizeButtons)+\"</div>\";var $=\"\";$='<div class=\"fr-video-size-layer fr-layer fr-active\" id=\"fr-video-size-layer-'+e.id+'\"><div class=\"fr-video-group\"><div class=\"fr-input-line\"><input type=\"text\" name=\"width\" placeholder=\"'+e.language.translate(\"Width\")+'\" tabIndex=\"1\"></div><div class=\"fr-input-line\"><input type=\"text\" name=\"height\" placeholder=\"'+e.language.translate(\"Height\")+'\" tabIndex=\"1\"></div></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"videoSetSize\" tabIndex=\"2\">'+e.language.translate(\"Update\")+\"</button></div></div>\";var ee={buttons:R,size_layer:$},ce=e.popups.create(\"video.size\",ee);return e.events.$on(e.$wp,\"scroll\",function(){x&&e.popups.isVisible(\"video.size\")&&k()}),ce}function Q(g){x.removeClass(\"fr-fvr fr-fvl\"),g==\"left\"?x.addClass(\"fr-fvl\"):g==\"right\"&&x.addClass(\"fr-fvr\"),l(),U()}function z(g){if(!x)return!1;x.hasClass(\"fr-fvl\")?g.find(\"> *:first\").replaceWith(e.icon.create(\"align-left\")):x.hasClass(\"fr-fvr\")?g.find(\"> *:first\").replaceWith(e.icon.create(\"align-right\")):g.find(\"> *:first\").replaceWith(e.icon.create(\"align-justify\"))}function w(g,R){var $=\"justify\";x.hasClass(\"fr-fvl\")?$=\"left\":x.hasClass(\"fr-fvr\")&&($=\"right\"),R.find('.fr-command[data-param1=\"'+$+'\"]').addClass(\"fr-active\")}function C(g){x.removeClass(\"fr-dvi fr-dvb\"),g==\"inline\"?x.addClass(\"fr-dvi\"):g==\"block\"&&x.addClass(\"fr-dvb\"),l(),U()}function G(g,R){var $=\"block\";x.hasClass(\"fr-dvi\")&&($=\"inline\"),R.find('.fr-command[data-param1=\"'+$+'\"]').addClass(\"fr-active\")}function W(){if(x&&e.events.trigger(\"video.beforeRemove\",[x])!==!1){var g=x;e.popups.hideAll(),S(!0),e.selection.setBefore(g.get(0))||e.selection.setAfter(g.get(0)),g.remove(),e.selection.restore(),e.html.fillEmptyBlocks(),e.events.trigger(\"video.removed\",[g])}}function N(g){if(!g.hasClass(\"fr-dvi\")&&!g.hasClass(\"fr-dvb\")){var R=g.css(\"float\");g.css(\"float\",\"none\"),g.css(\"display\")==\"block\"?(g.css(\"float\",R),parseInt(g.css(\"margin-left\"),10)===0&&(g.attr(\"style\")||\"\").indexOf(\"margin-right: auto\")>=0?g.addClass(\"fr-fvl\"):parseInt(g.css(\"margin-right\"),10)===0&&(g.attr(\"style\")||\"\").indexOf(\"margin-left: auto\")>=0&&g.addClass(\"fr-fvr\"),g.addClass(\"fr-dvb\")):(g.css(\"float\",R),g.css(\"float\")==\"left\"?g.addClass(\"fr-fvl\"):g.css(\"float\")==\"right\"&&g.addClass(\"fr-fvr\"),g.addClass(\"fr-dvi\")),g.css(\"margin\",\"\"),g.css(\"float\",\"\"),g.css(\"display\",\"\"),g.css(\"z-index\",\"\"),g.css(\"position\",\"\"),g.css(\"overflow\",\"\"),g.css(\"vertical-align\",\"\")}e.opts.videoTextNear||g.removeClass(\"fr-dvi\").addClass(\"fr-dvb\")}function I(){e.$el.find(\"video\").filter(function(){return t(this).parents(\"span.fr-video\").length===0}).wrap('<span class=\"fr-video\" contenteditable=\"false\"></span>'),e.$el.find(\"embed, iframe\").filter(function(){if(e.browser.safari&&this.getAttribute(\"src\")&&this.setAttribute(\"src\",this.src),t(this).parents(\"span.fr-video\").length>0)return!1;for(var $=t(this).attr(\"src\"),ee=0;ee<t.FE.VIDEO_PROVIDERS.length;ee++){var ce=t.FE.VIDEO_PROVIDERS[ee];if(ce.test_regex.test($))return!0}return!1}).map(function(){return t(this).parents(\"object\").length===0?this:t(this).parents(\"object\").get(0)}).wrap('<span class=\"fr-video\" contenteditable=\"false\"></span>');for(var g=e.$el.find(\"span.fr-video\"),R=0;R<g.length;R++)N(t(g[R]));g.toggleClass(\"fr-draggable\",e.opts.videoMove)}function H(){a(),e.helpers.isMobile()&&(e.events.$on(e.$el,\"touchstart\",\"span.fr-video\",function(){f=!1}),e.events.$on(e.$el,\"touchmove\",function(){f=!0})),e.events.on(\"html.set\",I),I(),e.events.$on(e.$el,\"mousedown\",\"span.fr-video\",function(g){g.stopPropagation()}),e.events.$on(e.$el,\"click touchend\",\"span.fr-video\",i),e.events.on(\"keydown\",function(g){var R=g.which;if(x&&(R==t.FE.KEYCODE.BACKSPACE||R==t.FE.KEYCODE.DELETE))return g.preventDefault(),W(),!1;if(x&&R==t.FE.KEYCODE.ESC)return S(!0),g.preventDefault(),!1;if(x&&!e.keys.ctrlKey(g))return g.preventDefault(),!1},!0),e.events.on(\"keydown\",function(){e.$el.find(\"span.fr-video:empty\").remove()}),_(!0),A(!0)}function J(){x?x.trigger(\"click\"):(e.events.disableBlur(),e.selection.restore(),e.events.enableBlur(),e.popups.hide(\"video.insert\"),e.toolbar.showInline())}function Z(g,R){if(x){var $=e.popups.get(\"video.size\"),ee=x.find(\"iframe, embed, video\");ee.css(\"width\",g||$.find('input[name=\"width\"]').val()),ee.css(\"height\",R||$.find('input[name=\"height\"]').val()),ee.get(0).style.width&&ee.removeAttr(\"width\"),ee.get(0).style.height&&ee.removeAttr(\"height\"),$.find(\"input\").blur(),setTimeout(function(){x.trigger(\"click\")},e.helpers.isAndroid()?50:0)}}function se(){return x}return{_init:H,showInsertPopup:Y,showLayer:F,refreshByURLButton:d,refreshEmbedButton:v,insertByURL:b,insertEmbed:h,insert:L,align:Q,refreshAlign:z,refreshAlignOnShow:w,display:C,refreshDisplayOnShow:G,remove:W,showSizePopup:k,back:J,setSize:Z,get:se}},t.FE.RegisterCommand(\"insertVideo\",{title:\"Insert Video\",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"video.insert\")?(this.$el.find(\".fr-marker\")&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"video.insert\")):this.video.showInsertPopup()},plugin:\"video\"}),t.FE.DefineIcon(\"insertVideo\",{NAME:\"video-camera\"}),t.FE.DefineIcon(\"videoByURL\",{NAME:\"link\"}),t.FE.RegisterCommand(\"videoByURL\",{title:\"By URL\",undo:!1,focus:!1,callback:function(){this.video.showLayer(\"video-by-url\")},refresh:function(e){this.video.refreshByURLButton(e)}}),t.FE.DefineIcon(\"videoEmbed\",{NAME:\"code\"}),t.FE.RegisterCommand(\"videoEmbed\",{title:\"Embedded Code\",undo:!1,focus:!1,callback:function(){this.video.showLayer(\"video-embed\")},refresh:function(e){this.video.refreshEmbedButton(e)}}),t.FE.RegisterCommand(\"videoInsertByURL\",{undo:!0,focus:!0,callback:function(){this.video.insertByURL()}}),t.FE.RegisterCommand(\"videoInsertEmbed\",{undo:!0,focus:!0,callback:function(){this.video.insertEmbed()}}),t.FE.DefineIcon(\"videoDisplay\",{NAME:\"star\"}),t.FE.RegisterCommand(\"videoDisplay\",{title:\"Display\",type:\"dropdown\",options:{inline:\"Inline\",block:\"Break Text\"},callback:function(e,n){this.video.display(n)},refresh:function(e){this.opts.videoTextNear||e.addClass(\"fr-hidden\")},refreshOnShow:function(e,n){this.video.refreshDisplayOnShow(e,n)}}),t.FE.DefineIcon(\"videoAlign\",{NAME:\"align-center\"}),t.FE.RegisterCommand(\"videoAlign\",{type:\"dropdown\",title:\"Align\",options:{left:\"Align Left\",justify:\"None\",right:\"Align Right\"},html:function(){var e='<ul class=\"fr-dropdown-list\">',n=t.FE.COMMANDS.videoAlign.options;for(var r in n)n.hasOwnProperty(r)&&(e+='<li><a class=\"fr-command fr-title\" data-cmd=\"videoAlign\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.icon.create(\"align-\"+r)+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.video.align(n)},refresh:function(e){this.video.refreshAlign(e)},refreshOnShow:function(e,n){this.video.refreshAlignOnShow(e,n)}}),t.FE.DefineIcon(\"videoRemove\",{NAME:\"trash\"}),t.FE.RegisterCommand(\"videoRemove\",{title:\"Remove\",callback:function(){this.video.remove()}}),t.FE.DefineIcon(\"videoSize\",{NAME:\"arrows-alt\"}),t.FE.RegisterCommand(\"videoSize\",{undo:!1,focus:!1,title:\"Change Size\",callback:function(){this.video.showSizePopup()}}),t.FE.DefineIcon(\"videoBack\",{NAME:\"arrow-left\"}),t.FE.RegisterCommand(\"videoBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,callback:function(){this.video.back()},refresh:function(e){var n=this.video.get();!n&&!this.opts.toolbarInline?(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\")):(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\"))}}),t.FE.RegisterCommand(\"videoSetSize\",{undo:!0,focus:!1,callback:function(){this.video.setSize()}})})(jQuery);(function(t){\"use strict\";t.extend(t.FE.POPUP_TEMPLATES,{\"audio.insert\":\"[_BUTTONS_][_BY_URL_LAYER_][_EMBED_LAYER_]\",\"audio.edit\":\"[_BUTTONS_]\",\"audio.size\":\"[_BUTTONS_][_SIZE_LAYER_]\"}),t.extend(t.FE.DEFAULTS,{audioInsertButtons:[\"audioBack\",\"|\",\"audioByURL\",\"audioEmbed\"],audioEditButtons:[\"audioDisplay\",\"audioAlign\",\"audioSize\",\"audioRemove\"],audioResize:!0,audioSizeButtons:[\"audioBack\",\"|\"],audioSplitHTML:!1,audioTextNear:!0,audioDefaultAlign:\"center\",audioDefaultDisplay:\"block\",audioMove:!0}),t.FE.VIDEO_PROVIDERS=[],t.FE.VIDEO_EMBED_REGEX=/^\\W*((<iframe.*><\\/iframe>)|(<embed.*>))\\W*$/i,t.FE.PLUGINS.audio=function(e){var n,r,O,x;function X(){var g=e.popups.get(\"audio.insert\"),R=g.find(\".fr-audio-by-url-layer input\");R.val(\"\").trigger(\"change\");var $=g.find(\".fr-audio-embed-layer textarea\");$.val(\"\").trigger(\"change\")}function Y(){var g=e.$tb.find('.fr-command[data-cmd=\"insertAudio\"]'),R=e.popups.get(\"audio.insert\");if(R||(R=_()),!R.hasClass(\"fr-active\")){e.popups.refresh(\"audio.insert\"),e.popups.setContainer(\"audio.insert\",e.$tb);var $=g.offset().left+g.outerWidth()/2,ee=g.offset().top+(e.opts.toolbarBottom?10:g.outerHeight()-10);e.popups.show(\"audio.insert\",$,ee,g.outerHeight())}}function U(){var g=e.popups.get(\"audio.edit\");g||(g=y()),e.popups.setContainer(\"audio.edit\",t(e.opts.scrollableContainer)),e.popups.refresh(\"audio.edit\");var R=x.find(\"iframe, embed, audio\");e.popups.showEl(\"audio.edit\",R)}function _(g){if(g)return e.popups.onRefresh(\"audio.insert\",X),!0;var R=\"\";e.opts.audioInsertButtons.length>1&&(R='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.audioInsertButtons)+\"</div>\");var $=\"\";e.opts.audioInsertButtons.indexOf(\"audioByURL\")>=0&&($='<div class=\"fr-audio-by-url-layer fr-layer fr-active\" id=\"fr-audio-by-url-layer-'+e.id+'\"><div class=\"fr-input-line\"><input type=\"text\" placeholder=\"http://\" tabIndex=\"1\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"audioInsertByURL\" tabIndex=\"2\">'+e.language.translate(\"Insert\")+\"</button></div></div>\");var ee=\"\";e.opts.audioInsertButtons.indexOf(\"audioEmbed\")>=0&&(ee='<div class=\"fr-audio-embed-layer fr-layer\" id=\"fr-audio-embed-layer-'+e.id+'\"><div class=\"fr-input-line\"><textarea type=\"text\" placeholder=\"'+e.language.translate(\"Embedded Code\")+'\" tabIndex=\"1\" rows=\"5\"></textarea></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"audioInsertEmbed\" tabIndex=\"2\">'+e.language.translate(\"Insert\")+\"</button></div></div>\");var ce={buttons:R,by_url_layer:$,embed_layer:ee},he=e.popups.create(\"audio.insert\",ce);return he}function F(g){var R=e.popups.get(\"audio.insert\"),$,ee;if(!x&&!e.opts.toolbarInline){var ce=e.$tb.find('.fr-command[data-cmd=\"insertAudio\"]');$=ce.offset().left+ce.outerWidth()/2,ee=ce.offset().top+(e.opts.toolbarBottom?10:ce.outerHeight()-10)}e.opts.toolbarInline&&(ee=R.offset().top-e.helpers.getPX(R.css(\"margin-top\")),R.hasClass(\"fr-above\")&&(ee+=R.outerHeight())),R.find(\".fr-layer\").removeClass(\"fr-active\"),R.find(\".fr-\"+g+\"-layer\").addClass(\"fr-active\"),e.popups.show(\"audio.insert\",$,ee,0)}function d(g){var R=e.popups.get(\"audio.insert\");R.find(\".fr-audio-by-url-layer\").hasClass(\"fr-active\")&&g.addClass(\"fr-active\")}function v(g){var R=e.popups.get(\"audio.insert\");R.find(\".fr-audio-embed-layer\").hasClass(\"fr-active\")&&g.addClass(\"fr-active\")}function L(g){e.events.focus(!0),e.selection.restore(),e.html.insert('<span contenteditable=\"false\" draggable=\"true\" class=\"fr-jiv fr-video fr-dv'+e.opts.audioDefaultDisplay[0]+(e.opts.audioDefaultAlign!=\"center\"?\" fr-fv\"+e.opts.audioDefaultAlign[0]:\"\")+'\">'+g+\"</span>\",!1,e.opts.audioSplitHTML),e.popups.hide(\"audio.insert\");var R=e.$el.find(\".fr-jiv\");R.removeClass(\"fr-jiv\"),R.toggleClass(\"fr-draggable\",e.opts.audioMove),e.events.trigger(\"audio.inserted\",[R])}function b(g){if(typeof g>\"u\"){var R=e.popups.get(\"audio.insert\");g=R.find('.fr-audio-by-url-layer input[type=\"text\"]').val()||\"\"}var $=null;if(e.helpers.isURL(g))for(var ee=0;ee<t.FE.VIDEO_PROVIDERS.length;ee++){var ce=t.FE.VIDEO_PROVIDERS[ee];if(ce.test_regex.test(g)){$=g.replace(ce.url_regex,ce.url_text),$=ce.html.replace(/\\{url\\}/,$);break}}$?L($):e.events.trigger(\"audio.linkError\",[g])}function h(g){if(typeof g>\"u\"){var R=e.popups.get(\"audio.insert\");g=R.find(\".fr-audio-embed-layer textarea\").val()||\"\"}g.length===0||!t.FE.VIDEO_EMBED_REGEX.test(g)?e.events.trigger(\"audio.codeError\",[g]):L(g)}function m(g){if(!e.core.sameInstance(O))return!0;g.preventDefault(),g.stopPropagation();var R=g.pageX||(g.originalEvent.touches?g.originalEvent.touches[0].pageX:null),$=g.pageY||(g.originalEvent.touches?g.originalEvent.touches[0].pageY:null);if(!R||!$)return!1;e.undo.canDo()||e.undo.saveStep(),r=t(this),r.data(\"start-x\",R),r.data(\"start-y\",$),n.show(),e.popups.hideAll(),p()}function u(g){if(!e.core.sameInstance(O))return!0;if(r){g.preventDefault();var R=g.pageX||(g.originalEvent.touches?g.originalEvent.touches[0].pageX:null),$=g.pageY||(g.originalEvent.touches?g.originalEvent.touches[0].pageY:null);if(!R||!$)return!1;var ee=r.data(\"start-x\"),ce=r.data(\"start-y\");r.data(\"start-x\",R),r.data(\"start-y\",$);var he=R-ee,ve=$-ce,me=x.find(\"iframe, embed, audio\"),Ce=me.width(),Te=me.height();(r.hasClass(\"fr-hnw\")||r.hasClass(\"fr-hsw\"))&&(he=0-he),(r.hasClass(\"fr-hnw\")||r.hasClass(\"fr-hne\"))&&(ve=0-ve),me.css(\"width\",Ce+he),me.css(\"height\",Te+ve),me.removeAttr(\"width\"),me.removeAttr(\"height\"),l()}}function V(g){if(!e.core.sameInstance(O))return!0;r&&x&&(g&&g.stopPropagation(),r=null,n.hide(),l(),U(),e.undo.saveStep())}function E(g){return'<div class=\"fr-handler fr-h'+g+'\"></div>'}function o(){var g;e.shared.$audio_resizer?(O=e.shared.$audio_resizer,n=e.shared.$audio_overlay,e.events.on(\"destroy\",function(){O.removeClass(\"fr-active\").appendTo(t(\"body\"))},!0)):(e.shared.$audio_resizer=t('<div class=\"fr-video-resizer\"></div>'),O=e.shared.$audio_resizer,e.events.$on(O,\"mousedown\",function(R){R.stopPropagation()},!0),e.opts.audioResize&&(O.append(E(\"nw\")+E(\"ne\")+E(\"sw\")+E(\"se\")),e.shared.$audio_overlay=t('<div class=\"fr-video-overlay\"></div>'),n=e.shared.$audio_overlay,g=O.get(0).ownerDocument,t(g).find(\"body\").append(n))),e.events.on(\"shared.destroy\",function(){O.html(\"\").removeData().remove(),O=null,e.opts.audioResize&&(n.remove(),n=null)},!0),e.helpers.isMobile()||e.events.$on(t(e.o_win),\"resize.audio\",function(){S(!0)}),e.opts.audioResize&&(g=O.get(0).ownerDocument,e.events.$on(O,e._mousedown,\".fr-handler\",m),e.events.$on(t(g),e._mousemove,u),e.events.$on(t(g.defaultView||g.parentWindow),e._mouseup,V),e.events.$on(n,\"mouseleave\",V))}function l(){O||o(),(e.$wp||t(e.opts.scrollableContainer)).append(O),O.data(\"instance\",e);var g=x.find(\"iframe, embed, audio\");O.css(\"top\",(e.opts.iframe?g.offset().top-1:g.offset().top-e.$wp.offset().top-1)+e.$wp.scrollTop()).css(\"left\",(e.opts.iframe?g.offset().left-1:g.offset().left-e.$wp.offset().left-1)+e.$wp.scrollLeft()).css(\"width\",g.outerWidth()).css(\"height\",g.height()).addClass(\"fr-active\")}var f;function i(g){if(g&&g.type==\"touchend\"&&f)return!0;if(g.preventDefault(),g.stopPropagation(),e.edit.isDisabled())return!1;for(var R=0;R<t.FE.INSTANCES.length;R++)t.FE.INSTANCES[R]!=e&&t.FE.INSTANCES[R].events.trigger(\"audio.hideResizer\");e.toolbar.disable(),e.helpers.isMobile()&&(e.events.disableBlur(),e.$el.blur(),e.events.enableBlur()),x=t(this),t(this).addClass(\"fr-active\"),e.opts.iframe&&e.size.syncIframe(),l(),U(),e.selection.clear(),e.button.bulkRefresh(),e.events.trigger(\"image.hideResizer\")}function S(g){x&&(M()||g===!0)&&(O.removeClass(\"fr-active\"),e.toolbar.enable(),x.removeClass(\"fr-active\"),x=null,p())}e.shared.audio_exit_flag=!1;function s(){e.shared.audio_exit_flag=!0}function p(){e.shared.audio_exit_flag=!1}function M(){return e.shared.audio_exit_flag}function a(){e.events.on(\"mousedown window.mousedown\",s),e.events.on(\"window.touchmove\",p),e.events.on(\"mouseup window.mouseup\",S),e.events.on(\"commands.mousedown\",function(g){g.parents(\".fr-toolbar\").length>0&&S()}),e.events.on(\"blur audio.hideResizer commands.undo commands.redo element.dropped\",function(){S(!0)})}function y(){var g=\"\";e.opts.audioEditButtons.length>=1&&(g+='<div class=\"fr-buttons\">',g+=e.button.buildList(e.opts.audioEditButtons),g+=\"</div>\");var R={buttons:g},$=e.popups.create(\"audio.edit\",R);return e.events.$on(e.$wp,\"scroll.audio-edit\",function(){x&&e.popups.isVisible(\"audio.edit\")&&U()}),$}function c(){if(x){var g=e.popups.get(\"audio.size\"),R=x.find(\"iframe, embed, audio\");g.find('input[name=\"width\"]').val(R.get(0).style.width||R.attr(\"width\")).trigger(\"change\"),g.find('input[name=\"height\"]').val(R.get(0).style.height||R.attr(\"height\")).trigger(\"change\")}}function k(){var g=e.popups.get(\"audio.size\");g||(g=A()),e.popups.refresh(\"audio.size\"),e.popups.setContainer(\"audio.size\",t(e.opts.scrollableContainer));var R=x.find(\"iframe, embed, audio\");e.popups.showEl(\"audio.size\",R)}function A(g){if(g)return e.popups.onRefresh(\"audio.size\",c),!0;var R=\"\";R='<div class=\"fr-buttons\">'+e.button.buildList(e.opts.audioSizeButtons)+\"</div>\";var $=\"\";$='<div class=\"fr-video-size-layer fr-layer fr-active\" id=\"fr-video-size-layer-'+e.id+'\"><div class=\"fr-audio-group\"><div class=\"fr-input-line\"><input type=\"text\" name=\"width\" placeholder=\"'+e.language.translate(\"Width\")+'\" tabIndex=\"1\"></div><div class=\"fr-input-line\"><input type=\"text\" name=\"height\" placeholder=\"'+e.language.translate(\"Height\")+'\" tabIndex=\"1\"></div></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"audioSetSize\" tabIndex=\"2\">'+e.language.translate(\"Update\")+\"</button></div></div>\";var ee={buttons:R,size_layer:$},ce=e.popups.create(\"audio.size\",ee);return e.events.$on(e.$wp,\"scroll\",function(){x&&e.popups.isVisible(\"audio.size\")&&k()}),ce}function Q(g){x.removeClass(\"fr-fvr fr-fvl\"),g==\"left\"?x.addClass(\"fr-fvl\"):g==\"right\"&&x.addClass(\"fr-fvr\"),l(),U()}function z(g){if(!x)return!1;x.hasClass(\"fr-fvl\")?g.find(\"> *:first\").replaceWith(e.icon.create(\"align-left\")):x.hasClass(\"fr-fvr\")?g.find(\"> *:first\").replaceWith(e.icon.create(\"align-right\")):g.find(\"> *:first\").replaceWith(e.icon.create(\"align-justify\"))}function w(g,R){var $=\"justify\";x.hasClass(\"fr-fvl\")?$=\"left\":x.hasClass(\"fr-fvr\")&&($=\"right\"),R.find('.fr-command[data-param1=\"'+$+'\"]').addClass(\"fr-active\")}function C(g){x.removeClass(\"fr-dvi fr-dvb\"),g==\"inline\"?x.addClass(\"fr-dvi\"):g==\"block\"&&x.addClass(\"fr-dvb\"),l(),U()}function G(g,R){var $=\"block\";x.hasClass(\"fr-dvi\")&&($=\"inline\"),R.find('.fr-command[data-param1=\"'+$+'\"]').addClass(\"fr-active\")}function W(){if(x&&e.events.trigger(\"audio.beforeRemove\",[x])!==!1){var g=x;e.popups.hideAll(),S(!0),e.selection.setBefore(g.get(0))||e.selection.setAfter(g.get(0)),g.remove(),e.selection.restore(),e.html.fillEmptyBlocks(),e.events.trigger(\"audio.removed\",[g])}}function N(g){if(!g.hasClass(\"fr-dvi\")&&!g.hasClass(\"fr-dvb\")){var R=g.css(\"float\");g.css(\"float\",\"none\"),g.css(\"display\")==\"block\"?(g.css(\"float\",R),parseInt(g.css(\"margin-left\"),10)===0&&(g.attr(\"style\")||\"\").indexOf(\"margin-right: auto\")>=0?g.addClass(\"fr-fvl\"):parseInt(g.css(\"margin-right\"),10)===0&&(g.attr(\"style\")||\"\").indexOf(\"margin-left: auto\")>=0&&g.addClass(\"fr-fvr\"),g.addClass(\"fr-dvb\")):(g.css(\"float\",R),g.css(\"float\")==\"left\"?g.addClass(\"fr-fvl\"):g.css(\"float\")==\"right\"&&g.addClass(\"fr-fvr\"),g.addClass(\"fr-dvi\")),g.css(\"margin\",\"\"),g.css(\"float\",\"\"),g.css(\"display\",\"\"),g.css(\"z-index\",\"\"),g.css(\"position\",\"\"),g.css(\"overflow\",\"\"),g.css(\"vertical-align\",\"\")}e.opts.audioTextNear||g.removeClass(\"fr-dvi\").addClass(\"fr-dvb\")}function I(){e.$el.find(\"audio\").filter(function(){return t(this).parents(\"span.fr-video\").length===0}).wrap('<span class=\"fr-video\" contenteditable=\"false\"></span>'),e.$el.find(\"embed, iframe\").filter(function(){if(e.browser.safari&&this.getAttribute(\"src\")&&this.setAttribute(\"src\",this.src),t(this).parents(\"span.fr-video\").length>0)return!1;for(var $=t(this).attr(\"src\"),ee=0;ee<t.FE.VIDEO_PROVIDERS.length;ee++){var ce=t.FE.VIDEO_PROVIDERS[ee];if(ce.test_regex.test($))return!0}return!1}).map(function(){return t(this).parents(\"object\").length===0?this:t(this).parents(\"object\").get(0)}).wrap('<span class=\"fr-video\" contenteditable=\"false\"></span>');for(var g=e.$el.find(\"span.fr-video\"),R=0;R<g.length;R++)N(t(g[R]));g.toggleClass(\"fr-draggable\",e.opts.audioMove)}function H(){a(),e.helpers.isMobile()&&(e.events.$on(e.$el,\"touchstart\",\"span.fr-video\",function(){f=!1}),e.events.$on(e.$el,\"touchmove\",function(){f=!0})),e.events.on(\"html.set\",I),I(),e.events.$on(e.$el,\"mousedown\",\"span.fr-video\",function(g){g.stopPropagation()}),e.events.$on(e.$el,\"click touchend\",\"span.fr-video\",i),e.events.on(\"keydown\",function(g){var R=g.which;if(x&&(R==t.FE.KEYCODE.BACKSPACE||R==t.FE.KEYCODE.DELETE))return g.preventDefault(),W(),!1;if(x&&R==t.FE.KEYCODE.ESC)return S(!0),g.preventDefault(),!1;if(x&&!e.keys.ctrlKey(g))return g.preventDefault(),!1},!0),e.events.on(\"keydown\",function(){e.$el.find(\"span.fr-video:empty\").remove()}),_(!0),A(!0)}function J(){x?x.trigger(\"click\"):(e.events.disableBlur(),e.selection.restore(),e.events.enableBlur(),e.popups.hide(\"audio.insert\"),e.toolbar.showInline())}function Z(g,R){if(x){var $=e.popups.get(\"audio.size\"),ee=x.find(\"iframe, embed, audio\");ee.css(\"width\",g||$.find('input[name=\"width\"]').val()),ee.css(\"height\",R||$.find('input[name=\"height\"]').val()),ee.get(0).style.width&&ee.removeAttr(\"width\"),ee.get(0).style.height&&ee.removeAttr(\"height\"),$.find(\"input\").blur(),setTimeout(function(){x.trigger(\"click\")},e.helpers.isAndroid()?50:0)}}function se(){return x}return{_init:H,showInsertPopup:Y,showLayer:F,refreshByURLButton:d,refreshEmbedButton:v,insertByURL:b,insertEmbed:h,insert:L,align:Q,refreshAlign:z,refreshAlignOnShow:w,display:C,refreshDisplayOnShow:G,remove:W,showSizePopup:k,back:J,setSize:Z,get:se}},t.FE.RegisterCommand(\"insertAudio\",{title:\"Insert Audio\",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"audio.insert\")?(this.$el.find(\".fr-marker\")&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"audio.insert\")):this.audio.showInsertPopup()},plugin:\"audio\"}),t.FE.DefineIcon(\"insertAudio\",{NAME:\"volume-up\"}),t.FE.DefineIcon(\"audioByURL\",{NAME:\"link\"}),t.FE.RegisterCommand(\"audioByURL\",{title:\"By URL\",undo:!1,focus:!1,callback:function(){this.audio.showLayer(\"audio-by-url\")},refresh:function(e){this.audio.refreshByURLButton(e)}}),t.FE.DefineIcon(\"audioEmbed\",{NAME:\"code\"}),t.FE.RegisterCommand(\"audioEmbed\",{title:\"Embedded Code\",undo:!1,focus:!1,callback:function(){this.audio.showLayer(\"audio-embed\")},refresh:function(e){this.audio.refreshEmbedButton(e)}}),t.FE.RegisterCommand(\"audioInsertByURL\",{undo:!0,focus:!0,callback:function(){this.audio.insertByURL()}}),t.FE.RegisterCommand(\"audioInsertEmbed\",{undo:!0,focus:!0,callback:function(){this.audio.insertEmbed()}}),t.FE.DefineIcon(\"audioDisplay\",{NAME:\"star\"}),t.FE.RegisterCommand(\"audioDisplay\",{title:\"Display\",type:\"dropdown\",options:{inline:\"Inline\",block:\"Break Text\"},callback:function(e,n){this.audio.display(n)},refresh:function(e){this.opts.audioTextNear||e.addClass(\"fr-hidden\")},refreshOnShow:function(e,n){this.audio.refreshDisplayOnShow(e,n)}}),t.FE.DefineIcon(\"audioAlign\",{NAME:\"align-center\"}),t.FE.RegisterCommand(\"audioAlign\",{type:\"dropdown\",title:\"Align\",options:{left:\"Align Left\",justify:\"None\",right:\"Align Right\"},html:function(){var e='<ul class=\"fr-dropdown-list\">',n=t.FE.COMMANDS.audioAlign.options;for(var r in n)n.hasOwnProperty(r)&&(e+='<li><a class=\"fr-command fr-title\" data-cmd=\"audioAlign\" data-param1=\"'+r+'\" title=\"'+this.language.translate(n[r])+'\">'+this.icon.create(\"align-\"+r)+\"</a></li>\");return e+=\"</ul>\",e},callback:function(e,n){this.audio.align(n)},refresh:function(e){this.audio.refreshAlign(e)},refreshOnShow:function(e,n){this.audio.refreshAlignOnShow(e,n)}}),t.FE.DefineIcon(\"audioRemove\",{NAME:\"trash\"}),t.FE.RegisterCommand(\"audioRemove\",{title:\"Remove\",callback:function(){this.audio.remove()}}),t.FE.DefineIcon(\"audioSize\",{NAME:\"arrows-alt\"}),t.FE.RegisterCommand(\"audioSize\",{undo:!1,focus:!1,title:\"Change Size\",callback:function(){this.audio.showSizePopup()}}),t.FE.DefineIcon(\"audioBack\",{NAME:\"arrow-left\"}),t.FE.RegisterCommand(\"audioBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,callback:function(){this.audio.back()},refresh:function(e){var n=this.audio.get();!n&&!this.opts.toolbarInline?(e.addClass(\"fr-hidden\"),e.next(\".fr-separator\").addClass(\"fr-hidden\")):(e.removeClass(\"fr-hidden\"),e.next(\".fr-separator\").removeClass(\"fr-hidden\"))}}),t.FE.RegisterCommand(\"audioSetSize\",{undo:!0,focus:!1,callback:function(){this.audio.setSize()}})})(jQuery);(function(t){t.FE.PLUGINS.quote=function(e){function n(X){for(;X.parentNode&&X.parentNode!=e.el;)X=X.parentNode;return X}function r(){var X=e.selection.blocks(),Y;for(Y=0;Y<X.length;Y++)X[Y]=n(X[Y]);e.selection.save();var U=t(\"<blockquote>\");for(U.insertBefore(X[0]),Y=0;Y<X.length;Y++)U.append(X[Y]);e.html.unwrap(),e.selection.restore()}function O(){var X=e.selection.blocks(),Y;for(Y=0;Y<X.length;Y++)X[Y].tagName!=\"BLOCKQUOTE\"&&(X[Y]=t(X[Y]).parentsUntil(e.$el,\"BLOCKQUOTE\").get(0));for(e.selection.save(),Y=0;Y<X.length;Y++)X[Y]&&t(X[Y]).replaceWith(X[Y].innerHTML);e.html.unwrap(),e.selection.restore()}function x(X){e.selection.save(),e.html.wrap(!0,!0,!0,!0),e.selection.restore(),X==\"increase\"?r():X==\"decrease\"&&O()}return{apply:x}},t.FE.RegisterShortcut(t.FE.KEYCODE.SINGLE_QUOTE,\"quote\",\"increase\",\"'\"),t.FE.RegisterShortcut(t.FE.KEYCODE.SINGLE_QUOTE,\"quote\",\"decrease\",\"'\",!0),t.FE.RegisterCommand(\"quote\",{title:\"Quote\",type:\"dropdown\",html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n={increase:\"Increase\",decrease:\"Decrease\"};for(var r in n)if(n.hasOwnProperty(r)){var O=this.shortcuts.get(\"quote.\"+r);e+='<li role=\"presentation\"><a class=\"fr-command fr-active '+r+'\" tabIndex=\"-1\" role=\"option\" data-cmd=\"quote\" data-param1=\"'+r+'\" title=\"'+n[r]+'\">'+this.language.translate(n[r])+(O?'<span class=\"fr-shortcut\">'+O+\"</span>\":\"\")+\"</a></li>\"}return e+=\"</ul>\",e},callback:function(e,n){this.quote.apply(n)},plugin:\"quote\"}),t.FE.DefineIcon(\"quote\",{NAME:\"quote-left\"})})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{fontSize:[\"8\",\"9\",\"10\",\"11\",\"12\",\"14\",\"18\",\"24\",\"30\",\"36\",\"48\",\"60\",\"72\",\"96\"],fontSizeSelection:!1,fontSizeDefaultSelection:\"12\",fontSizeUnit:\"px\"}),t.FE.PLUGINS.fontSize=function(e){function n(x){e.format.applyStyle(\"font-size\",x)}function r(x,X){var Y=t(e.selection.element()).css(\"font-size\");e.opts.fontSizeUnit===\"pt\"&&(Y=Math.round(parseFloat(Y,10)*72/96)+\"pt\"),X.find(\".fr-command.fr-active\").removeClass(\"fr-active\").attr(\"aria-selected\",!1),X.find('.fr-command[data-param1=\"'+Y+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0);var U=X.find(\".fr-dropdown-list\"),_=X.find(\".fr-active\").parent();_.length?U.parent().scrollTop(_.offset().top-U.offset().top-(U.parent().outerHeight()/2-_.outerHeight()/2)):U.parent().scrollTop(0)}function O(x){if(e.opts.fontSizeSelection){var X=e.helpers.getPX(t(e.selection.element()).css(\"font-size\"));e.opts.fontSizeUnit===\"pt\"&&(X=Math.round(parseFloat(X,10)*72/96)+\"pt\"),x.find(\"> span\").text(X)}}return{apply:n,refreshOnShow:r,refresh:O}},t.FE.RegisterCommand(\"fontSize\",{type:\"dropdown\",title:\"Font Size\",displaySelection:function(e){return e.opts.fontSizeSelection},displaySelectionWidth:30,defaultSelection:function(e){return e.opts.fontSizeDefaultSelection},html:function(){for(var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.fontSize,r=0;r<n.length;r++){var O=n[r];e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"fontSize\" data-param1=\"'+O+this.opts.fontSizeUnit+'\" title=\"'+O+'\">'+O+\"</a></li>\"}return e+=\"</ul>\",e},callback:function(e,n){this.fontSize.apply(n)},refresh:function(e){this.fontSize.refresh(e)},refreshOnShow:function(e,n){this.fontSize.refreshOnShow(e,n)},plugin:\"fontSize\"}),t.FE.DefineIcon(\"fontSize\",{NAME:\"text-height\"})})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{fontFamily:{\"Arial,Helvetica,sans-serif\":\"Arial\",\"Georgia,serif\":\"Georgia\",\"Impact,Charcoal,sans-serif\":\"Impact\",\"Tahoma,Geneva,sans-serif\":\"Tahoma\",\"Times New Roman,Times,serif,-webkit-standard\":\"Times New Roman\",\"Verdana,Geneva,sans-serif\":\"Verdana\"},fontFamilySelection:!1,fontFamilyDefaultSelection:\"Font Family\"}),t.FE.PLUGINS.fontFamily=function(e){function n(U){e.format.applyStyle(\"font-family\",U)}function r(U,_){_.find(\".fr-command.fr-active\").removeClass(\"fr-active\").attr(\"aria-selected\",!1),_.find('.fr-command[data-param1=\"'+X()+'\"]').addClass(\"fr-active\").attr(\"aria-selected\",!0);var F=_.find(\".fr-dropdown-list\"),d=_.find(\".fr-active\").parent();d.length?F.parent().scrollTop(d.offset().top-F.offset().top-(F.parent().outerHeight()/2-d.outerHeight()/2)):F.parent().scrollTop(0)}function O(U){var _=U.replace(/(sans-serif|serif|monospace|cursive|fantasy)/gi,\"\").replace(/\"|'| /g,\"\").split(\",\");return t.grep(_,function(F){return F.length>0})}function x(U,_){for(var F=0;F<U.length;F++)for(var d=0;d<_.length;d++)if(U[F].toLowerCase()==_[d].toLowerCase())return[F,d];return null}function X(){var U=t(e.selection.element()).css(\"font-family\"),_=O(U),F=[];for(var d in e.opts.fontFamily)if(e.opts.fontFamily.hasOwnProperty(d)){var v=O(d),L=x(_,v);L&&F.push([d,L])}return F.length===0?null:(F.sort(function(b,h){var m=b[1][0]-h[1][0];return m===0?b[1][1]-h[1][1]:m}),F[0][0])}function Y(U){if(e.opts.fontFamilySelection){var _=t(e.selection.element()).css(\"font-family\").replace(/(sans-serif|serif|monospace|cursive|fantasy)/gi,\"\").replace(/\"|'|/g,\"\").split(\",\");U.find(\"> span\").text(e.opts.fontFamily[X()]||_[0]||e.language.translate(e.opts.fontFamilyDefaultSelection))}}return{apply:n,refreshOnShow:r,refresh:Y}},t.FE.RegisterCommand(\"fontFamily\",{type:\"dropdown\",displaySelection:function(e){return e.opts.fontFamilySelection},defaultSelection:function(e){return e.opts.fontFamilyDefaultSelection},displaySelectionWidth:120,html:function(){var e='<ul class=\"fr-dropdown-list\" role=\"presentation\">',n=this.opts.fontFamily;for(var r in n)n.hasOwnProperty(r)&&(e+='<li role=\"presentation\"><a class=\"fr-command\" tabIndex=\"-1\" role=\"option\" data-cmd=\"fontFamily\" data-param1=\"'+r+'\" style=\"font-family: '+r+'\" title=\"'+n[r]+'\">'+n[r]+\"</a></li>\");return e+=\"</ul>\",e},title:\"Font Family\",callback:function(e,n){this.fontFamily.apply(n)},refresh:function(e){this.fontFamily.refresh(e)},refreshOnShow:function(e,n){this.fontFamily.refreshOnShow(e,n)},plugin:\"fontFamily\"}),t.FE.DefineIcon(\"fontFamily\",{NAME:\"font\"})})(jQuery);(function(t){t.extend(t.FE.POPUP_TEMPLATES,{icons:\"[_BUTTONS_][_ICONS_]\"}),t.extend(t.FE.DEFAULTS,{iconsStep:8,iconsSet:[{code:\"ph ph-address-book\",desc:\"Address Book\"},{code:\"ph ph-airplane\",desc:\"Airplane\"},{code:\"ph ph-airplane-in-flight\",desc:\"Airplane In Flight\"},{code:\"ph ph-airplane-landing\",desc:\"Airplane Landing\"},{code:\"ph ph-airplane-takeoff\",desc:\"Airplane Takeoff\"},{code:\"ph ph-airplane-tilt\",desc:\"Airplane Tilt\"},{code:\"ph ph-airplay\",desc:\"Airplay\"},{code:\"ph ph-air-traffic-control\",desc:\"Air Traffic Control\"},{code:\"ph ph-alarm\",desc:\"Alarm\"},{code:\"ph ph-alien\",desc:\"Alien\"},{code:\"ph ph-align-bottom\",desc:\"Align Bottom\"},{code:\"ph ph-align-bottom-simple\",desc:\"Align Bottom Simple\"},{code:\"ph ph-align-center-horizontal\",desc:\"Align Center Horizontal\"},{code:\"ph ph-align-center-horizontal-simple\",desc:\"Align Center Horizontal Simple\"},{code:\"ph ph-align-center-vertical\",desc:\"Align Center Vertical\"},{code:\"ph ph-align-center-vertical-simple\",desc:\"Align Center Vertical Simple\"},{code:\"ph ph-align-left\",desc:\"Align Left\"},{code:\"ph ph-align-left-simple\",desc:\"Align Left Simple\"},{code:\"ph ph-align-right\",desc:\"Align Right\"},{code:\"ph ph-align-right-simple\",desc:\"Align Right Simple\"},{code:\"ph ph-align-top\",desc:\"Align Top\"},{code:\"ph ph-align-top-simple\",desc:\"Align Top Simple\"},{code:\"ph ph-amazon-logo\",desc:\"Amazon Logo\"},{code:\"ph ph-anchor\",desc:\"Anchor\"},{code:\"ph ph-anchor-simple\",desc:\"Anchor Simple\"},{code:\"ph ph-android-logo\",desc:\"Android Logo\"},{code:\"ph ph-angular-logo\",desc:\"Angular Logo\"},{code:\"ph ph-aperture\",desc:\"Aperture\"},{code:\"ph ph-apple-logo\",desc:\"Apple Logo\"},{code:\"ph ph-apple-podcasts-logo\",desc:\"Apple Podcasts Logo\"},{code:\"ph ph-app-store-logo\",desc:\"App Store Logo\"},{code:\"ph ph-app-window\",desc:\"App Window\"},{code:\"ph ph-archive\",desc:\"Archive\"},{code:\"ph ph-archive-box\",desc:\"Archive Box\"},{code:\"ph ph-archive-tray\",desc:\"Archive Tray\"},{code:\"ph ph-armchair\",desc:\"Armchair\"},{code:\"ph ph-arrow-arc-left\",desc:\"Arrow Arc Left\"},{code:\"ph ph-arrow-arc-right\",desc:\"Arrow Arc Right\"},{code:\"ph ph-arrow-bend-double-up-left\",desc:\"Arrow Bend Double Up Left\"},{code:\"ph ph-arrow-bend-double-up-right\",desc:\"Arrow Bend Double Up Right\"},{code:\"ph ph-arrow-bend-down-left\",desc:\"Arrow Bend Down Left\"},{code:\"ph ph-arrow-bend-down-right\",desc:\"Arrow Bend Down Right\"},{code:\"ph ph-arrow-bend-left-down\",desc:\"Arrow Bend Left Down\"},{code:\"ph ph-arrow-bend-left-up\",desc:\"Arrow Bend Left Up\"},{code:\"ph ph-arrow-bend-right-down\",desc:\"Arrow Bend Right Down\"},{code:\"ph ph-arrow-bend-right-up\",desc:\"Arrow Bend Right Up\"},{code:\"ph ph-arrow-bend-up-left\",desc:\"Arrow Bend Up Left\"},{code:\"ph ph-arrow-bend-up-right\",desc:\"Arrow Bend Up Right\"},{code:\"ph ph-arrow-circle-down\",desc:\"Arrow Circle Down\"},{code:\"ph ph-arrow-circle-down-left\",desc:\"Arrow Circle Down Left\"},{code:\"ph ph-arrow-circle-down-right\",desc:\"Arrow Circle Down Right\"},{code:\"ph ph-arrow-circle-left\",desc:\"Arrow Circle Left\"},{code:\"ph ph-arrow-circle-right\",desc:\"Arrow Circle Right\"},{code:\"ph ph-arrow-circle-up\",desc:\"Arrow Circle Up\"},{code:\"ph ph-arrow-circle-up-left\",desc:\"Arrow Circle Up Left\"},{code:\"ph ph-arrow-circle-up-right\",desc:\"Arrow Circle Up Right\"},{code:\"ph ph-arrow-clockwise\",desc:\"Arrow Clockwise\"},{code:\"ph ph-arrow-counter-clockwise\",desc:\"Arrow Counter Clockwise\"},{code:\"ph ph-arrow-down\",desc:\"Arrow Down\"},{code:\"ph ph-arrow-down-left\",desc:\"Arrow Down Left\"},{code:\"ph ph-arrow-down-right\",desc:\"Arrow Down Right\"},{code:\"ph ph-arrow-elbow-down-left\",desc:\"Arrow Elbow Down Left\"},{code:\"ph ph-arrow-elbow-down-right\",desc:\"Arrow Elbow Down Right\"},{code:\"ph ph-arrow-elbow-left\",desc:\"Arrow Elbow Left\"},{code:\"ph ph-arrow-elbow-left-down\",desc:\"Arrow Elbow Left Down\"},{code:\"ph ph-arrow-elbow-left-up\",desc:\"Arrow Elbow Left Up\"},{code:\"ph ph-arrow-elbow-right\",desc:\"Arrow Elbow Right\"},{code:\"ph ph-arrow-elbow-right-down\",desc:\"Arrow Elbow Right Down\"},{code:\"ph ph-arrow-elbow-right-up\",desc:\"Arrow Elbow Right Up\"},{code:\"ph ph-arrow-elbow-up-left\",desc:\"Arrow Elbow Up Left\"},{code:\"ph ph-arrow-elbow-up-right\",desc:\"Arrow Elbow Up Right\"},{code:\"ph ph-arrow-fat-down\",desc:\"Arrow Fat Down\"},{code:\"ph ph-arrow-fat-left\",desc:\"Arrow Fat Left\"},{code:\"ph ph-arrow-fat-line-down\",desc:\"Arrow Fat Line Down\"},{code:\"ph ph-arrow-fat-line-left\",desc:\"Arrow Fat Line Left\"},{code:\"ph ph-arrow-fat-line-right\",desc:\"Arrow Fat Line Right\"},{code:\"ph ph-arrow-fat-lines-down\",desc:\"Arrow Fat Lines Down\"},{code:\"ph ph-arrow-fat-lines-left\",desc:\"Arrow Fat Lines Left\"},{code:\"ph ph-arrow-fat-lines-right\",desc:\"Arrow Fat Lines Right\"},{code:\"ph ph-arrow-fat-lines-up\",desc:\"Arrow Fat Lines Up\"},{code:\"ph ph-arrow-fat-line-up\",desc:\"Arrow Fat Line Up\"},{code:\"ph ph-arrow-fat-right\",desc:\"Arrow Fat Right\"},{code:\"ph ph-arrow-fat-up\",desc:\"Arrow Fat Up\"},{code:\"ph ph-arrow-left\",desc:\"Arrow Left\"},{code:\"ph ph-arrow-line-down\",desc:\"Arrow Line Down\"},{code:\"ph ph-arrow-line-down-left\",desc:\"Arrow Line Down Left\"},{code:\"ph ph-arrow-line-down-right\",desc:\"Arrow Line Down Right\"},{code:\"ph ph-arrow-line-left\",desc:\"Arrow Line Left\"},{code:\"ph ph-arrow-line-right\",desc:\"Arrow Line Right\"},{code:\"ph ph-arrow-line-up\",desc:\"Arrow Line Up\"},{code:\"ph ph-arrow-line-up-left\",desc:\"Arrow Line Up Left\"},{code:\"ph ph-arrow-line-up-right\",desc:\"Arrow Line Up Right\"},{code:\"ph ph-arrow-right\",desc:\"Arrow Right\"},{code:\"ph ph-arrows-clockwise\",desc:\"Arrows Clockwise\"},{code:\"ph ph-arrows-counter-clockwise\",desc:\"Arrows Counter Clockwise\"},{code:\"ph ph-arrows-down-up\",desc:\"Arrows Down Up\"},{code:\"ph ph-arrows-horizontal\",desc:\"Arrows Horizontal\"},{code:\"ph ph-arrows-in\",desc:\"Arrows In\"},{code:\"ph ph-arrows-in-cardinal\",desc:\"Arrows In Cardinal\"},{code:\"ph ph-arrows-in-line-horizontal\",desc:\"Arrows In Line Horizontal\"},{code:\"ph ph-arrows-in-line-vertical\",desc:\"Arrows In Line Vertical\"},{code:\"ph ph-arrows-in-simple\",desc:\"Arrows In Simple\"},{code:\"ph ph-arrows-left-right\",desc:\"Arrows Left Right\"},{code:\"ph ph-arrows-merge\",desc:\"Arrows Merge\"},{code:\"ph ph-arrows-out\",desc:\"Arrows Out\"},{code:\"ph ph-arrows-out-cardinal\",desc:\"Arrows Out Cardinal\"},{code:\"ph ph-arrows-out-line-horizontal\",desc:\"Arrows Out Line Horizontal\"},{code:\"ph ph-arrows-out-line-vertical\",desc:\"Arrows Out Line Vertical\"},{code:\"ph ph-arrows-out-simple\",desc:\"Arrows Out Simple\"},{code:\"ph ph-arrow-square-down\",desc:\"Arrow Square Down\"},{code:\"ph ph-arrow-square-down-left\",desc:\"Arrow Square Down Left\"},{code:\"ph ph-arrow-square-down-right\",desc:\"Arrow Square Down Right\"},{code:\"ph ph-arrow-square-in\",desc:\"Arrow Square In\"},{code:\"ph ph-arrow-square-left\",desc:\"Arrow Square Left\"},{code:\"ph ph-arrow-square-out\",desc:\"Arrow Square Out\"},{code:\"ph ph-arrow-square-right\",desc:\"Arrow Square Right\"},{code:\"ph ph-arrow-square-up\",desc:\"Arrow Square Up\"},{code:\"ph ph-arrow-square-up-left\",desc:\"Arrow Square Up Left\"},{code:\"ph ph-arrow-square-up-right\",desc:\"Arrow Square Up Right\"},{code:\"ph ph-arrows-split\",desc:\"Arrows Split\"},{code:\"ph ph-arrows-vertical\",desc:\"Arrows Vertical\"},{code:\"ph ph-arrow-u-down-left\",desc:\"Arrow U Down Left\"},{code:\"ph ph-arrow-u-down-right\",desc:\"Arrow U Down Right\"},{code:\"ph ph-arrow-u-left-down\",desc:\"Arrow U Left Down\"},{code:\"ph ph-arrow-u-left-up\",desc:\"Arrow U Left Up\"},{code:\"ph ph-arrow-up\",desc:\"Arrow Up\"},{code:\"ph ph-arrow-up-left\",desc:\"Arrow Up Left\"},{code:\"ph ph-arrow-up-right\",desc:\"Arrow Up Right\"},{code:\"ph ph-arrow-u-right-down\",desc:\"Arrow U Right Down\"},{code:\"ph ph-arrow-u-right-up\",desc:\"Arrow U Right Up\"},{code:\"ph ph-arrow-u-up-left\",desc:\"Arrow U Up Left\"},{code:\"ph ph-arrow-u-up-right\",desc:\"Arrow U Up Right\"},{code:\"ph ph-article\",desc:\"Article\"},{code:\"ph ph-article-medium\",desc:\"Article Medium\"},{code:\"ph ph-article-ny-times\",desc:\"Article Ny Times\"},{code:\"ph ph-asterisk\",desc:\"Asterisk\"},{code:\"ph ph-asterisk-simple\",desc:\"Asterisk Simple\"},{code:\"ph ph-at\",desc:\"At\"},{code:\"ph ph-atom\",desc:\"Atom\"},{code:\"ph ph-baby\",desc:\"Baby\"},{code:\"ph ph-backpack\",desc:\"Backpack\"},{code:\"ph ph-backspace\",desc:\"Backspace\"},{code:\"ph ph-bag\",desc:\"Bag\"},{code:\"ph ph-bag-simple\",desc:\"Bag Simple\"},{code:\"ph ph-balloon\",desc:\"Balloon\"},{code:\"ph ph-bandaids\",desc:\"Bandaids\"},{code:\"ph ph-bank\",desc:\"Bank\"},{code:\"ph ph-barbell\",desc:\"Barbell\"},{code:\"ph ph-barcode\",desc:\"Barcode\"},{code:\"ph ph-barricade\",desc:\"Barricade\"},{code:\"ph ph-baseball\",desc:\"Baseball\"},{code:\"ph ph-baseball-cap\",desc:\"Baseball Cap\"},{code:\"ph ph-basket\",desc:\"Basket\"},{code:\"ph ph-basketball\",desc:\"Basketball\"},{code:\"ph ph-bathtub\",desc:\"Bathtub\"},{code:\"ph ph-battery-charging\",desc:\"Battery Charging\"},{code:\"ph ph-battery-charging-vertical\",desc:\"Battery Charging Vertical\"},{code:\"ph ph-battery-empty\",desc:\"Battery Empty\"},{code:\"ph ph-battery-full\",desc:\"Battery Full\"},{code:\"ph ph-battery-high\",desc:\"Battery High\"},{code:\"ph ph-battery-low\",desc:\"Battery Low\"},{code:\"ph ph-battery-medium\",desc:\"Battery Medium\"},{code:\"ph ph-battery-plus\",desc:\"Battery Plus\"},{code:\"ph ph-battery-plus-vertical\",desc:\"Battery Plus Vertical\"},{code:\"ph ph-battery-vertical-empty\",desc:\"Battery Vertical Empty\"},{code:\"ph ph-battery-vertical-full\",desc:\"Battery Vertical Full\"},{code:\"ph ph-battery-vertical-high\",desc:\"Battery Vertical High\"},{code:\"ph ph-battery-vertical-low\",desc:\"Battery Vertical Low\"},{code:\"ph ph-battery-vertical-medium\",desc:\"Battery Vertical Medium\"},{code:\"ph ph-battery-warning\",desc:\"Battery Warning\"},{code:\"ph ph-battery-warning-vertical\",desc:\"Battery Warning Vertical\"},{code:\"ph ph-bed\",desc:\"Bed\"},{code:\"ph ph-beer-bottle\",desc:\"Beer Bottle\"},{code:\"ph ph-beer-stein\",desc:\"Beer Stein\"},{code:\"ph ph-behance-logo\",desc:\"Behance Logo\"},{code:\"ph ph-bell\",desc:\"Bell\"},{code:\"ph ph-bell-ringing\",desc:\"Bell Ringing\"},{code:\"ph ph-bell-simple\",desc:\"Bell Simple\"},{code:\"ph ph-bell-simple-ringing\",desc:\"Bell Simple Ringing\"},{code:\"ph ph-bell-simple-slash\",desc:\"Bell Simple Slash\"},{code:\"ph ph-bell-simple-z\",desc:\"Bell Simple Z\"},{code:\"ph ph-bell-slash\",desc:\"Bell Slash\"},{code:\"ph ph-bell-z\",desc:\"Bell Z\"},{code:\"ph ph-bezier-curve\",desc:\"Bezier Curve\"},{code:\"ph ph-bicycle\",desc:\"Bicycle\"},{code:\"ph ph-binoculars\",desc:\"Binoculars\"},{code:\"ph ph-bird\",desc:\"Bird\"},{code:\"ph ph-bluetooth\",desc:\"Bluetooth\"},{code:\"ph ph-bluetooth-connected\",desc:\"Bluetooth Connected\"},{code:\"ph ph-bluetooth-slash\",desc:\"Bluetooth Slash\"},{code:\"ph ph-bluetooth-x\",desc:\"Bluetooth X\"},{code:\"ph ph-boat\",desc:\"Boat\"},{code:\"ph ph-bone\",desc:\"Bone\"},{code:\"ph ph-book\",desc:\"Book\"},{code:\"ph ph-book-bookmark\",desc:\"Book Bookmark\"},{code:\"ph ph-bookmark\",desc:\"Bookmark\"},{code:\"ph ph-bookmarks\",desc:\"Bookmarks\"},{code:\"ph ph-bookmark-simple\",desc:\"Bookmark Simple\"},{code:\"ph ph-bookmarks-simple\",desc:\"Bookmarks Simple\"},{code:\"ph ph-book-open\",desc:\"Book Open\"},{code:\"ph ph-book-open-text\",desc:\"Book Open Text\"},{code:\"ph ph-books\",desc:\"Books\"},{code:\"ph ph-boot\",desc:\"Boot\"},{code:\"ph ph-bounding-box\",desc:\"Bounding Box\"},{code:\"ph ph-bowl-food\",desc:\"Bowl Food\"},{code:\"ph ph-brackets-angle\",desc:\"Brackets Angle\"},{code:\"ph ph-brackets-curly\",desc:\"Brackets Curly\"},{code:\"ph ph-brackets-round\",desc:\"Brackets Round\"},{code:\"ph ph-brackets-square\",desc:\"Brackets Square\"},{code:\"ph ph-brain\",desc:\"Brain\"},{code:\"ph ph-brandy\",desc:\"Brandy\"},{code:\"ph ph-bridge\",desc:\"Bridge\"},{code:\"ph ph-briefcase\",desc:\"Briefcase\"},{code:\"ph ph-briefcase-metal\",desc:\"Briefcase Metal\"},{code:\"ph ph-broadcast\",desc:\"Broadcast\"},{code:\"ph ph-broom\",desc:\"Broom\"},{code:\"ph ph-browser\",desc:\"Browser\"},{code:\"ph ph-browsers\",desc:\"Browsers\"},{code:\"ph ph-bug\",desc:\"Bug\"},{code:\"ph ph-bug-beetle\",desc:\"Bug Beetle\"},{code:\"ph ph-bug-droid\",desc:\"Bug Droid\"},{code:\"ph ph-buildings\",desc:\"Buildings\"},{code:\"ph ph-bus\",desc:\"Bus\"},{code:\"ph ph-butterfly\",desc:\"Butterfly\"},{code:\"ph ph-cactus\",desc:\"Cactus\"},{code:\"ph ph-cake\",desc:\"Cake\"},{code:\"ph ph-calculator\",desc:\"Calculator\"},{code:\"ph ph-calendar\",desc:\"Calendar\"},{code:\"ph ph-calendar-blank\",desc:\"Calendar Blank\"},{code:\"ph ph-calendar-check\",desc:\"Calendar Check\"},{code:\"ph ph-calendar-plus\",desc:\"Calendar Plus\"},{code:\"ph ph-calendar-x\",desc:\"Calendar X\"},{code:\"ph ph-call-bell\",desc:\"Call Bell\"},{code:\"ph ph-camera\",desc:\"Camera\"},{code:\"ph ph-camera-plus\",desc:\"Camera Plus\"},{code:\"ph ph-camera-rotate\",desc:\"Camera Rotate\"},{code:\"ph ph-camera-slash\",desc:\"Camera Slash\"},{code:\"ph ph-campfire\",desc:\"Campfire\"},{code:\"ph ph-car\",desc:\"Car\"},{code:\"ph ph-cardholder\",desc:\"Cardholder\"},{code:\"ph ph-cards\",desc:\"Cards\"},{code:\"ph ph-caret-circle-double-down\",desc:\"Caret Circle Double Down\"},{code:\"ph ph-caret-circle-double-left\",desc:\"Caret Circle Double Left\"},{code:\"ph ph-caret-circle-double-right\",desc:\"Caret Circle Double Right\"},{code:\"ph ph-caret-circle-double-up\",desc:\"Caret Circle Double Up\"},{code:\"ph ph-caret-circle-down\",desc:\"Caret Circle Down\"},{code:\"ph ph-caret-circle-left\",desc:\"Caret Circle Left\"},{code:\"ph ph-caret-circle-right\",desc:\"Caret Circle Right\"},{code:\"ph ph-caret-circle-up\",desc:\"Caret Circle Up\"},{code:\"ph ph-caret-circle-up-down\",desc:\"Caret Circle Up Down\"},{code:\"ph ph-caret-double-down\",desc:\"Caret Double Down\"},{code:\"ph ph-caret-double-left\",desc:\"Caret Double Left\"},{code:\"ph ph-caret-double-right\",desc:\"Caret Double Right\"},{code:\"ph ph-caret-double-up\",desc:\"Caret Double Up\"},{code:\"ph ph-caret-down\",desc:\"Caret Down\"},{code:\"ph ph-caret-left\",desc:\"Caret Left\"},{code:\"ph ph-caret-right\",desc:\"Caret Right\"},{code:\"ph ph-caret-up\",desc:\"Caret Up\"},{code:\"ph ph-caret-up-down\",desc:\"Caret Up Down\"},{code:\"ph ph-car-profile\",desc:\"Car Profile\"},{code:\"ph ph-carrot\",desc:\"Carrot\"},{code:\"ph ph-car-simple\",desc:\"Car Simple\"},{code:\"ph ph-cassette-tape\",desc:\"Cassette Tape\"},{code:\"ph ph-castle-turret\",desc:\"Castle Turret\"},{code:\"ph ph-cat\",desc:\"Cat\"},{code:\"ph ph-cell-signal-full\",desc:\"Cell Signal Full\"},{code:\"ph ph-cell-signal-high\",desc:\"Cell Signal High\"},{code:\"ph ph-cell-signal-low\",desc:\"Cell Signal Low\"},{code:\"ph ph-cell-signal-medium\",desc:\"Cell Signal Medium\"},{code:\"ph ph-cell-signal-none\",desc:\"Cell Signal None\"},{code:\"ph ph-cell-signal-slash\",desc:\"Cell Signal Slash\"},{code:\"ph ph-cell-signal-x\",desc:\"Cell Signal X\"},{code:\"ph ph-certificate\",desc:\"Certificate\"},{code:\"ph ph-chair\",desc:\"Chair\"},{code:\"ph ph-chalkboard\",desc:\"Chalkboard\"},{code:\"ph ph-chalkboard-simple\",desc:\"Chalkboard Simple\"},{code:\"ph ph-chalkboard-teacher\",desc:\"Chalkboard Teacher\"},{code:\"ph ph-champagne\",desc:\"Champagne\"},{code:\"ph ph-charging-station\",desc:\"Charging Station\"},{code:\"ph ph-chart-bar\",desc:\"Chart Bar\"},{code:\"ph ph-chart-bar-horizontal\",desc:\"Chart Bar Horizontal\"},{code:\"ph ph-chart-donut\",desc:\"Chart Donut\"},{code:\"ph ph-chart-line\",desc:\"Chart Line\"},{code:\"ph ph-chart-line-down\",desc:\"Chart Line Down\"},{code:\"ph ph-chart-line-up\",desc:\"Chart Line Up\"},{code:\"ph ph-chart-pie\",desc:\"Chart Pie\"},{code:\"ph ph-chart-pie-slice\",desc:\"Chart Pie Slice\"},{code:\"ph ph-chart-polar\",desc:\"Chart Polar\"},{code:\"ph ph-chart-scatter\",desc:\"Chart Scatter\"},{code:\"ph ph-chat\",desc:\"Chat\"},{code:\"ph ph-chat-centered\",desc:\"Chat Centered\"},{code:\"ph ph-chat-centered-dots\",desc:\"Chat Centered Dots\"},{code:\"ph ph-chat-centered-text\",desc:\"Chat Centered Text\"},{code:\"ph ph-chat-circle\",desc:\"Chat Circle\"},{code:\"ph ph-chat-circle-dots\",desc:\"Chat Circle Dots\"},{code:\"ph ph-chat-circle-text\",desc:\"Chat Circle Text\"},{code:\"ph ph-chat-dots\",desc:\"Chat Dots\"},{code:\"ph ph-chats\",desc:\"Chats\"},{code:\"ph ph-chats-circle\",desc:\"Chats Circle\"},{code:\"ph ph-chats-teardrop\",desc:\"Chats Teardrop\"},{code:\"ph ph-chat-teardrop\",desc:\"Chat Teardrop\"},{code:\"ph ph-chat-teardrop-dots\",desc:\"Chat Teardrop Dots\"},{code:\"ph ph-chat-teardrop-text\",desc:\"Chat Teardrop Text\"},{code:\"ph ph-chat-text\",desc:\"Chat Text\"},{code:\"ph ph-check\",desc:\"Check\"},{code:\"ph ph-check-circle\",desc:\"Check Circle\"},{code:\"ph ph-check-fat\",desc:\"Check Fat\"},{code:\"ph ph-checks\",desc:\"Checks\"},{code:\"ph ph-check-square\",desc:\"Check Square\"},{code:\"ph ph-check-square-offset\",desc:\"Check Square Offset\"},{code:\"ph ph-church\",desc:\"Church\"},{code:\"ph ph-circle\",desc:\"Circle\"},{code:\"ph ph-circle-dashed\",desc:\"Circle Dashed\"},{code:\"ph ph-circle-half\",desc:\"Circle Half\"},{code:\"ph ph-circle-half-tilt\",desc:\"Circle Half Tilt\"},{code:\"ph ph-circle-notch\",desc:\"Circle Notch\"},{code:\"ph ph-circles-four\",desc:\"Circles Four\"},{code:\"ph ph-circles-three\",desc:\"Circles Three\"},{code:\"ph ph-circles-three-plus\",desc:\"Circles Three Plus\"},{code:\"ph ph-circuitry\",desc:\"Circuitry\"},{code:\"ph ph-clipboard\",desc:\"Clipboard\"},{code:\"ph ph-clipboard-text\",desc:\"Clipboard Text\"},{code:\"ph ph-clock\",desc:\"Clock\"},{code:\"ph ph-clock-afternoon\",desc:\"Clock Afternoon\"},{code:\"ph ph-clock-clockwise\",desc:\"Clock Clockwise\"},{code:\"ph ph-clock-countdown\",desc:\"Clock Countdown\"},{code:\"ph ph-clock-counter-clockwise\",desc:\"Clock Counter Clockwise\"},{code:\"ph ph-closed-captioning\",desc:\"Closed Captioning\"},{code:\"ph ph-cloud\",desc:\"Cloud\"},{code:\"ph ph-cloud-arrow-down\",desc:\"Cloud Arrow Down\"},{code:\"ph ph-cloud-arrow-up\",desc:\"Cloud Arrow Up\"},{code:\"ph ph-cloud-check\",desc:\"Cloud Check\"},{code:\"ph ph-cloud-fog\",desc:\"Cloud Fog\"},{code:\"ph ph-cloud-lightning\",desc:\"Cloud Lightning\"},{code:\"ph ph-cloud-moon\",desc:\"Cloud Moon\"},{code:\"ph ph-cloud-rain\",desc:\"Cloud Rain\"},{code:\"ph ph-cloud-slash\",desc:\"Cloud Slash\"},{code:\"ph ph-cloud-snow\",desc:\"Cloud Snow\"},{code:\"ph ph-cloud-sun\",desc:\"Cloud Sun\"},{code:\"ph ph-cloud-warning\",desc:\"Cloud Warning\"},{code:\"ph ph-cloud-x\",desc:\"Cloud X\"},{code:\"ph ph-club\",desc:\"Club\"},{code:\"ph ph-coat-hanger\",desc:\"Coat Hanger\"},{code:\"ph ph-coda-logo\",desc:\"Coda Logo\"},{code:\"ph ph-code\",desc:\"Code\"},{code:\"ph ph-code-block\",desc:\"Code Block\"},{code:\"ph ph-codepen-logo\",desc:\"Codepen Logo\"},{code:\"ph ph-codesandbox-logo\",desc:\"Codesandbox Logo\"},{code:\"ph ph-code-simple\",desc:\"Code Simple\"},{code:\"ph ph-coffee\",desc:\"Coffee\"},{code:\"ph ph-coin\",desc:\"Coin\"},{code:\"ph ph-coins\",desc:\"Coins\"},{code:\"ph ph-coin-vertical\",desc:\"Coin Vertical\"},{code:\"ph ph-columns\",desc:\"Columns\"},{code:\"ph ph-command\",desc:\"Command\"},{code:\"ph ph-compass\",desc:\"Compass\"},{code:\"ph ph-compass-tool\",desc:\"Compass Tool\"},{code:\"ph ph-computer-tower\",desc:\"Computer Tower\"},{code:\"ph ph-confetti\",desc:\"Confetti\"},{code:\"ph ph-contactless-payment\",desc:\"Contactless Payment\"},{code:\"ph ph-control\",desc:\"Control\"},{code:\"ph ph-cookie\",desc:\"Cookie\"},{code:\"ph ph-cooking-pot\",desc:\"Cooking Pot\"},{code:\"ph ph-copy\",desc:\"Copy\"},{code:\"ph ph-copyleft\",desc:\"Copyleft\"},{code:\"ph ph-copyright\",desc:\"Copyright\"},{code:\"ph ph-copy-simple\",desc:\"Copy Simple\"},{code:\"ph ph-corners-in\",desc:\"Corners In\"},{code:\"ph ph-corners-out\",desc:\"Corners Out\"},{code:\"ph ph-couch\",desc:\"Couch\"},{code:\"ph ph-cpu\",desc:\"Cpu\"},{code:\"ph ph-credit-card\",desc:\"Credit Card\"},{code:\"ph ph-crop\",desc:\"Crop\"},{code:\"ph ph-cross\",desc:\"Cross\"},{code:\"ph ph-crosshair\",desc:\"Crosshair\"},{code:\"ph ph-crosshair-simple\",desc:\"Crosshair Simple\"},{code:\"ph ph-crown\",desc:\"Crown\"},{code:\"ph ph-crown-simple\",desc:\"Crown Simple\"},{code:\"ph ph-cube\",desc:\"Cube\"},{code:\"ph ph-cube-focus\",desc:\"Cube Focus\"},{code:\"ph ph-cube-transparent\",desc:\"Cube Transparent\"},{code:\"ph ph-currency-btc\",desc:\"Currency Btc\"},{code:\"ph ph-currency-circle-dollar\",desc:\"Currency Circle Dollar\"},{code:\"ph ph-currency-cny\",desc:\"Currency Cny\"},{code:\"ph ph-currency-dollar\",desc:\"Currency Dollar\"},{code:\"ph ph-currency-dollar-simple\",desc:\"Currency Dollar Simple\"},{code:\"ph ph-currency-eth\",desc:\"Currency Eth\"},{code:\"ph ph-currency-eur\",desc:\"Currency Eur\"},{code:\"ph ph-currency-gbp\",desc:\"Currency Gbp\"},{code:\"ph ph-currency-inr\",desc:\"Currency Inr\"},{code:\"ph ph-currency-jpy\",desc:\"Currency Jpy\"},{code:\"ph ph-currency-krw\",desc:\"Currency Krw\"},{code:\"ph ph-currency-kzt\",desc:\"Currency Kzt\"},{code:\"ph ph-currency-ngn\",desc:\"Currency Ngn\"},{code:\"ph ph-currency-rub\",desc:\"Currency Rub\"},{code:\"ph ph-cursor\",desc:\"Cursor\"},{code:\"ph ph-cursor-click\",desc:\"Cursor Click\"},{code:\"ph ph-cursor-text\",desc:\"Cursor Text\"},{code:\"ph ph-cylinder\",desc:\"Cylinder\"},{code:\"ph ph-database\",desc:\"Database\"},{code:\"ph ph-desktop\",desc:\"Desktop\"},{code:\"ph ph-desktop-tower\",desc:\"Desktop Tower\"},{code:\"ph ph-detective\",desc:\"Detective\"},{code:\"ph ph-device-mobile\",desc:\"Device Mobile\"},{code:\"ph ph-device-mobile-camera\",desc:\"Device Mobile Camera\"},{code:\"ph ph-device-mobile-speaker\",desc:\"Device Mobile Speaker\"},{code:\"ph ph-devices\",desc:\"Devices\"},{code:\"ph ph-device-tablet\",desc:\"Device Tablet\"},{code:\"ph ph-device-tablet-camera\",desc:\"Device Tablet Camera\"},{code:\"ph ph-device-tablet-speaker\",desc:\"Device Tablet Speaker\"},{code:\"ph ph-dev-to-logo\",desc:\"Dev To Logo\"},{code:\"ph ph-diamond\",desc:\"Diamond\"},{code:\"ph ph-diamonds-four\",desc:\"Diamonds Four\"},{code:\"ph ph-dice-five\",desc:\"Dice Five\"},{code:\"ph ph-dice-four\",desc:\"Dice Four\"},{code:\"ph ph-dice-one\",desc:\"Dice One\"},{code:\"ph ph-dice-six\",desc:\"Dice Six\"},{code:\"ph ph-dice-three\",desc:\"Dice Three\"},{code:\"ph ph-dice-two\",desc:\"Dice Two\"},{code:\"ph ph-disc\",desc:\"Disc\"},{code:\"ph ph-discord-logo\",desc:\"Discord Logo\"},{code:\"ph ph-divide\",desc:\"Divide\"},{code:\"ph ph-dna\",desc:\"Dna\"},{code:\"ph ph-dog\",desc:\"Dog\"},{code:\"ph ph-door\",desc:\"Door\"},{code:\"ph ph-door-open\",desc:\"Door Open\"},{code:\"ph ph-dot\",desc:\"Dot\"},{code:\"ph ph-dot-outline\",desc:\"Dot Outline\"},{code:\"ph ph-dots-nine\",desc:\"Dots Nine\"},{code:\"ph ph-dots-six\",desc:\"Dots Six\"},{code:\"ph ph-dots-six-vertical\",desc:\"Dots Six Vertical\"},{code:\"ph ph-dots-three\",desc:\"Dots Three\"},{code:\"ph ph-dots-three-circle\",desc:\"Dots Three Circle\"},{code:\"ph ph-dots-three-circle-vertical\",desc:\"Dots Three Circle Vertical\"},{code:\"ph ph-dots-three-outline\",desc:\"Dots Three Outline\"},{code:\"ph ph-dots-three-outline-vertical\",desc:\"Dots Three Outline Vertical\"},{code:\"ph ph-dots-three-vertical\",desc:\"Dots Three Vertical\"},{code:\"ph ph-download\",desc:\"Download\"},{code:\"ph ph-download-simple\",desc:\"Download Simple\"},{code:\"ph ph-dress\",desc:\"Dress\"},{code:\"ph ph-dribbble-logo\",desc:\"Dribbble Logo\"},{code:\"ph ph-drop\",desc:\"Drop\"},{code:\"ph ph-dropbox-logo\",desc:\"Dropbox Logo\"},{code:\"ph ph-drop-half\",desc:\"Drop Half\"},{code:\"ph ph-drop-half-bottom\",desc:\"Drop Half Bottom\"},{code:\"ph ph-ear\",desc:\"Ear\"},{code:\"ph ph-ear-slash\",desc:\"Ear Slash\"},{code:\"ph ph-egg\",desc:\"Egg\"},{code:\"ph ph-egg-crack\",desc:\"Egg Crack\"},{code:\"ph ph-eject\",desc:\"Eject\"},{code:\"ph ph-eject-simple\",desc:\"Eject Simple\"},{code:\"ph ph-elevator\",desc:\"Elevator\"},{code:\"ph ph-engine\",desc:\"Engine\"},{code:\"ph ph-envelope\",desc:\"Envelope\"},{code:\"ph ph-envelope-open\",desc:\"Envelope Open\"},{code:\"ph ph-envelope-simple\",desc:\"Envelope Simple\"},{code:\"ph ph-envelope-simple-open\",desc:\"Envelope Simple Open\"},{code:\"ph ph-equalizer\",desc:\"Equalizer\"},{code:\"ph ph-equals\",desc:\"Equals\"},{code:\"ph ph-eraser\",desc:\"Eraser\"},{code:\"ph ph-escalator-down\",desc:\"Escalator Down\"},{code:\"ph ph-escalator-up\",desc:\"Escalator Up\"},{code:\"ph ph-exam\",desc:\"Exam\"},{code:\"ph ph-exclude\",desc:\"Exclude\"},{code:\"ph ph-exclude-square\",desc:\"Exclude Square\"},{code:\"ph ph-export\",desc:\"Export\"},{code:\"ph ph-eye\",desc:\"Eye\"},{code:\"ph ph-eye-closed\",desc:\"Eye Closed\"},{code:\"ph ph-eyedropper\",desc:\"Eyedropper\"},{code:\"ph ph-eyedropper-sample\",desc:\"Eyedropper Sample\"},{code:\"ph ph-eyeglasses\",desc:\"Eyeglasses\"},{code:\"ph ph-eye-slash\",desc:\"Eye Slash\"},{code:\"ph ph-facebook-logo\",desc:\"Facebook Logo\"},{code:\"ph ph-face-mask\",desc:\"Face Mask\"},{code:\"ph ph-factory\",desc:\"Factory\"},{code:\"ph ph-faders\",desc:\"Faders\"},{code:\"ph ph-faders-horizontal\",desc:\"Faders Horizontal\"},{code:\"ph ph-fan\",desc:\"Fan\"},{code:\"ph ph-fast-forward\",desc:\"Fast Forward\"},{code:\"ph ph-fast-forward-circle\",desc:\"Fast Forward Circle\"},{code:\"ph ph-feather\",desc:\"Feather\"},{code:\"ph ph-figma-logo\",desc:\"Figma Logo\"},{code:\"ph ph-file\",desc:\"File\"},{code:\"ph ph-file-archive\",desc:\"File Archive\"},{code:\"ph ph-file-arrow-down\",desc:\"File Arrow Down\"},{code:\"ph ph-file-arrow-up\",desc:\"File Arrow Up\"},{code:\"ph ph-file-audio\",desc:\"File Audio\"},{code:\"ph ph-file-cloud\",desc:\"File Cloud\"},{code:\"ph ph-file-code\",desc:\"File Code\"},{code:\"ph ph-file-css\",desc:\"File Css\"},{code:\"ph ph-file-csv\",desc:\"File Csv\"},{code:\"ph ph-file-dashed\",desc:\"File Dashed\"},{code:\"ph ph-file-dotted\",desc:\"File Dotted\"},{code:\"ph ph-file-doc\",desc:\"File Doc\"},{code:\"ph ph-file-html\",desc:\"File Html\"},{code:\"ph ph-file-image\",desc:\"File Image\"},{code:\"ph ph-file-jpg\",desc:\"File Jpg\"},{code:\"ph ph-file-js\",desc:\"File Js\"},{code:\"ph ph-file-jsx\",desc:\"File Jsx\"},{code:\"ph ph-file-lock\",desc:\"File Lock\"},{code:\"ph ph-file-magnifying-glass\",desc:\"File Magnifying Glass\"},{code:\"ph ph-file-search\",desc:\"File Search\"},{code:\"ph ph-file-minus\",desc:\"File Minus\"},{code:\"ph ph-file-pdf\",desc:\"File Pdf\"},{code:\"ph ph-file-plus\",desc:\"File Plus\"},{code:\"ph ph-file-png\",desc:\"File Png\"},{code:\"ph ph-file-ppt\",desc:\"File Ppt\"},{code:\"ph ph-file-rs\",desc:\"File Rs\"},{code:\"ph ph-files\",desc:\"Files\"},{code:\"ph ph-file-sql\",desc:\"File Sql\"},{code:\"ph ph-file-svg\",desc:\"File Svg\"},{code:\"ph ph-file-text\",desc:\"File Text\"},{code:\"ph ph-file-ts\",desc:\"File Ts\"},{code:\"ph ph-file-tsx\",desc:\"File Tsx\"},{code:\"ph ph-file-video\",desc:\"File Video\"},{code:\"ph ph-file-vue\",desc:\"File Vue\"},{code:\"ph ph-file-x\",desc:\"File X\"},{code:\"ph ph-file-xls\",desc:\"File Xls\"},{code:\"ph ph-file-zip\",desc:\"File Zip\"},{code:\"ph ph-film-reel\",desc:\"Film Reel\"},{code:\"ph ph-film-script\",desc:\"Film Script\"},{code:\"ph ph-film-slate\",desc:\"Film Slate\"},{code:\"ph ph-film-strip\",desc:\"Film Strip\"},{code:\"ph ph-fingerprint\",desc:\"Fingerprint\"},{code:\"ph ph-fingerprint-simple\",desc:\"Fingerprint Simple\"},{code:\"ph ph-finn-the-human\",desc:\"Finn The Human\"},{code:\"ph ph-fire\",desc:\"Fire\"},{code:\"ph ph-fire-extinguisher\",desc:\"Fire Extinguisher\"},{code:\"ph ph-fire-simple\",desc:\"Fire Simple\"},{code:\"ph ph-first-aid\",desc:\"First Aid\"},{code:\"ph ph-first-aid-kit\",desc:\"First Aid Kit\"},{code:\"ph ph-fish\",desc:\"Fish\"},{code:\"ph ph-fish-simple\",desc:\"Fish Simple\"},{code:\"ph ph-flag\",desc:\"Flag\"},{code:\"ph ph-flag-banner\",desc:\"Flag Banner\"},{code:\"ph ph-flag-checkered\",desc:\"Flag Checkered\"},{code:\"ph ph-flag-pennant\",desc:\"Flag Pennant\"},{code:\"ph ph-flame\",desc:\"Flame\"},{code:\"ph ph-flashlight\",desc:\"Flashlight\"},{code:\"ph ph-flask\",desc:\"Flask\"},{code:\"ph ph-floppy-disk\",desc:\"Floppy Disk\"},{code:\"ph ph-floppy-disk-back\",desc:\"Floppy Disk Back\"},{code:\"ph ph-flow-arrow\",desc:\"Flow Arrow\"},{code:\"ph ph-flower\",desc:\"Flower\"},{code:\"ph ph-flower-lotus\",desc:\"Flower Lotus\"},{code:\"ph ph-flower-tulip\",desc:\"Flower Tulip\"},{code:\"ph ph-flying-saucer\",desc:\"Flying Saucer\"},{code:\"ph ph-folder\",desc:\"Folder\"},{code:\"ph ph-folder-dashed\",desc:\"Folder Dashed\"},{code:\"ph ph-folder-dotted\",desc:\"Folder Dotted\"},{code:\"ph ph-folder-lock\",desc:\"Folder Lock\"},{code:\"ph ph-folder-minus\",desc:\"Folder Minus\"},{code:\"ph ph-folder-notch\",desc:\"Folder Notch\"},{code:\"ph ph-folder-notch-minus\",desc:\"Folder Notch Minus\"},{code:\"ph ph-folder-notch-open\",desc:\"Folder Notch Open\"},{code:\"ph ph-folder-notch-plus\",desc:\"Folder Notch Plus\"},{code:\"ph ph-folder-open\",desc:\"Folder Open\"},{code:\"ph ph-folder-plus\",desc:\"Folder Plus\"},{code:\"ph ph-folders\",desc:\"Folders\"},{code:\"ph ph-folder-simple\",desc:\"Folder Simple\"},{code:\"ph ph-folder-simple-dashed\",desc:\"Folder Simple Dashed\"},{code:\"ph ph-folder-simple-dotted\",desc:\"Folder Simple Dotted\"},{code:\"ph ph-folder-simple-lock\",desc:\"Folder Simple Lock\"},{code:\"ph ph-folder-simple-minus\",desc:\"Folder Simple Minus\"},{code:\"ph ph-folder-simple-plus\",desc:\"Folder Simple Plus\"},{code:\"ph ph-folder-simple-star\",desc:\"Folder Simple Star\"},{code:\"ph ph-folder-simple-user\",desc:\"Folder Simple User\"},{code:\"ph ph-folder-star\",desc:\"Folder Star\"},{code:\"ph ph-folder-user\",desc:\"Folder User\"},{code:\"ph ph-football\",desc:\"Football\"},{code:\"ph ph-footprints\",desc:\"Footprints\"},{code:\"ph ph-fork-knife\",desc:\"Fork Knife\"},{code:\"ph ph-frame-corners\",desc:\"Frame Corners\"},{code:\"ph ph-framer-logo\",desc:\"Framer Logo\"},{code:\"ph ph-function\",desc:\"Function\"},{code:\"ph ph-funnel\",desc:\"Funnel\"},{code:\"ph ph-funnel-simple\",desc:\"Funnel Simple\"},{code:\"ph ph-game-controller\",desc:\"Game Controller\"},{code:\"ph ph-garage\",desc:\"Garage\"},{code:\"ph ph-gas-can\",desc:\"Gas Can\"},{code:\"ph ph-gas-pump\",desc:\"Gas Pump\"},{code:\"ph ph-gauge\",desc:\"Gauge\"},{code:\"ph ph-gavel\",desc:\"Gavel\"},{code:\"ph ph-gear\",desc:\"Gear\"},{code:\"ph ph-gear-fine\",desc:\"Gear Fine\"},{code:\"ph ph-gear-six\",desc:\"Gear Six\"},{code:\"ph ph-gender-female\",desc:\"Gender Female\"},{code:\"ph ph-gender-intersex\",desc:\"Gender Intersex\"},{code:\"ph ph-gender-male\",desc:\"Gender Male\"},{code:\"ph ph-gender-neuter\",desc:\"Gender Neuter\"},{code:\"ph ph-gender-nonbinary\",desc:\"Gender Nonbinary\"},{code:\"ph ph-gender-transgender\",desc:\"Gender Transgender\"},{code:\"ph ph-ghost\",desc:\"Ghost\"},{code:\"ph ph-gif\",desc:\"Gif\"},{code:\"ph ph-gift\",desc:\"Gift\"},{code:\"ph ph-git-branch\",desc:\"Git Branch\"},{code:\"ph ph-git-commit\",desc:\"Git Commit\"},{code:\"ph ph-git-diff\",desc:\"Git Diff\"},{code:\"ph ph-git-fork\",desc:\"Git Fork\"},{code:\"ph ph-github-logo\",desc:\"Github Logo\"},{code:\"ph ph-gitlab-logo\",desc:\"Gitlab Logo\"},{code:\"ph ph-gitlab-logo-simple\",desc:\"Gitlab Logo Simple\"},{code:\"ph ph-git-merge\",desc:\"Git Merge\"},{code:\"ph ph-git-pull-request\",desc:\"Git Pull Request\"},{code:\"ph ph-globe\",desc:\"Globe\"},{code:\"ph ph-globe-hemisphere-east\",desc:\"Globe Hemisphere East\"},{code:\"ph ph-globe-hemisphere-west\",desc:\"Globe Hemisphere West\"},{code:\"ph ph-globe-simple\",desc:\"Globe Simple\"},{code:\"ph ph-globe-stand\",desc:\"Globe Stand\"},{code:\"ph ph-goggles\",desc:\"Goggles\"},{code:\"ph ph-goodreads-logo\",desc:\"Goodreads Logo\"},{code:\"ph ph-google-cardboard-logo\",desc:\"Google Cardboard Logo\"},{code:\"ph ph-google-chrome-logo\",desc:\"Google Chrome Logo\"},{code:\"ph ph-google-drive-logo\",desc:\"Google Drive Logo\"},{code:\"ph ph-google-logo\",desc:\"Google Logo\"},{code:\"ph ph-google-photos-logo\",desc:\"Google Photos Logo\"},{code:\"ph ph-google-play-logo\",desc:\"Google Play Logo\"},{code:\"ph ph-google-podcasts-logo\",desc:\"Google Podcasts Logo\"},{code:\"ph ph-gradient\",desc:\"Gradient\"},{code:\"ph ph-graduation-cap\",desc:\"Graduation Cap\"},{code:\"ph ph-grains\",desc:\"Grains\"},{code:\"ph ph-grains-slash\",desc:\"Grains Slash\"},{code:\"ph ph-graph\",desc:\"Graph\"},{code:\"ph ph-grid-four\",desc:\"Grid Four\"},{code:\"ph ph-grid-nine\",desc:\"Grid Nine\"},{code:\"ph ph-guitar\",desc:\"Guitar\"},{code:\"ph ph-hamburger\",desc:\"Hamburger\"},{code:\"ph ph-hammer\",desc:\"Hammer\"},{code:\"ph ph-hand\",desc:\"Hand\"},{code:\"ph ph-handbag\",desc:\"Handbag\"},{code:\"ph ph-handbag-simple\",desc:\"Handbag Simple\"},{code:\"ph ph-hand-coins\",desc:\"Hand Coins\"},{code:\"ph ph-hand-eye\",desc:\"Hand Eye\"},{code:\"ph ph-hand-fist\",desc:\"Hand Fist\"},{code:\"ph ph-hand-grabbing\",desc:\"Hand Grabbing\"},{code:\"ph ph-hand-heart\",desc:\"Hand Heart\"},{code:\"ph ph-hand-palm\",desc:\"Hand Palm\"},{code:\"ph ph-hand-pointing\",desc:\"Hand Pointing\"},{code:\"ph ph-hands-clapping\",desc:\"Hands Clapping\"},{code:\"ph ph-handshake\",desc:\"Handshake\"},{code:\"ph ph-hand-soap\",desc:\"Hand Soap\"},{code:\"ph ph-hands-praying\",desc:\"Hands Praying\"},{code:\"ph ph-hand-swipe-left\",desc:\"Hand Swipe Left\"},{code:\"ph ph-hand-swipe-right\",desc:\"Hand Swipe Right\"},{code:\"ph ph-hand-tap\",desc:\"Hand Tap\"},{code:\"ph ph-hand-waving\",desc:\"Hand Waving\"},{code:\"ph ph-hard-drive\",desc:\"Hard Drive\"},{code:\"ph ph-hard-drives\",desc:\"Hard Drives\"},{code:\"ph ph-hash\",desc:\"Hash\"},{code:\"ph ph-hash-straight\",desc:\"Hash Straight\"},{code:\"ph ph-headlights\",desc:\"Headlights\"},{code:\"ph ph-headphones\",desc:\"Headphones\"},{code:\"ph ph-headset\",desc:\"Headset\"},{code:\"ph ph-heart\",desc:\"Heart\"},{code:\"ph ph-heartbeat\",desc:\"Heartbeat\"},{code:\"ph ph-heart-break\",desc:\"Heart Break\"},{code:\"ph ph-heart-half\",desc:\"Heart Half\"},{code:\"ph ph-heart-straight\",desc:\"Heart Straight\"},{code:\"ph ph-heart-straight-break\",desc:\"Heart Straight Break\"},{code:\"ph ph-hexagon\",desc:\"Hexagon\"},{code:\"ph ph-high-heel\",desc:\"High Heel\"},{code:\"ph ph-highlighter-circle\",desc:\"Highlighter Circle\"},{code:\"ph ph-hoodie\",desc:\"Hoodie\"},{code:\"ph ph-horse\",desc:\"Horse\"},{code:\"ph ph-hourglass\",desc:\"Hourglass\"},{code:\"ph ph-hourglass-high\",desc:\"Hourglass High\"},{code:\"ph ph-hourglass-low\",desc:\"Hourglass Low\"},{code:\"ph ph-hourglass-medium\",desc:\"Hourglass Medium\"},{code:\"ph ph-hourglass-simple\",desc:\"Hourglass Simple\"},{code:\"ph ph-hourglass-simple-high\",desc:\"Hourglass Simple High\"},{code:\"ph ph-hourglass-simple-low\",desc:\"Hourglass Simple Low\"},{code:\"ph ph-hourglass-simple-medium\",desc:\"Hourglass Simple Medium\"},{code:\"ph ph-house\",desc:\"House\"},{code:\"ph ph-house-line\",desc:\"House Line\"},{code:\"ph ph-house-simple\",desc:\"House Simple\"},{code:\"ph ph-ice-cream\",desc:\"Ice Cream\"},{code:\"ph ph-identification-badge\",desc:\"Identification Badge\"},{code:\"ph ph-identification-card\",desc:\"Identification Card\"},{code:\"ph ph-image\",desc:\"Image\"},{code:\"ph ph-images\",desc:\"Images\"},{code:\"ph ph-image-square\",desc:\"Image Square\"},{code:\"ph ph-images-square\",desc:\"Images Square\"},{code:\"ph ph-infinity\",desc:\"Infinity\"},{code:\"ph ph-info\",desc:\"Info\"},{code:\"ph ph-instagram-logo\",desc:\"Instagram Logo\"},{code:\"ph ph-intersect\",desc:\"Intersect\"},{code:\"ph ph-intersect-square\",desc:\"Intersect Square\"},{code:\"ph ph-intersect-three\",desc:\"Intersect Three\"},{code:\"ph ph-jeep\",desc:\"Jeep\"},{code:\"ph ph-kanban\",desc:\"Kanban\"},{code:\"ph ph-key\",desc:\"Key\"},{code:\"ph ph-keyboard\",desc:\"Keyboard\"},{code:\"ph ph-keyhole\",desc:\"Keyhole\"},{code:\"ph ph-key-return\",desc:\"Key Return\"},{code:\"ph ph-knife\",desc:\"Knife\"},{code:\"ph ph-ladder\",desc:\"Ladder\"},{code:\"ph ph-ladder-simple\",desc:\"Ladder Simple\"},{code:\"ph ph-lamp\",desc:\"Lamp\"},{code:\"ph ph-laptop\",desc:\"Laptop\"},{code:\"ph ph-layout\",desc:\"Layout\"},{code:\"ph ph-leaf\",desc:\"Leaf\"},{code:\"ph ph-lifebuoy\",desc:\"Lifebuoy\"},{code:\"ph ph-lightbulb\",desc:\"Lightbulb\"},{code:\"ph ph-lightbulb-filament\",desc:\"Lightbulb Filament\"},{code:\"ph ph-lighthouse\",desc:\"Lighthouse\"},{code:\"ph ph-lightning\",desc:\"Lightning\"},{code:\"ph ph-lightning-a\",desc:\"Lightning A\"},{code:\"ph ph-lightning-slash\",desc:\"Lightning Slash\"},{code:\"ph ph-line-segment\",desc:\"Line Segment\"},{code:\"ph ph-line-segments\",desc:\"Line Segments\"},{code:\"ph ph-link\",desc:\"Link\"},{code:\"ph ph-link-break\",desc:\"Link Break\"},{code:\"ph ph-linkedin-logo\",desc:\"Linkedin Logo\"},{code:\"ph ph-link-simple\",desc:\"Link Simple\"},{code:\"ph ph-link-simple-break\",desc:\"Link Simple Break\"},{code:\"ph ph-link-simple-horizontal\",desc:\"Link Simple Horizontal\"},{code:\"ph ph-link-simple-horizontal-break\",desc:\"Link Simple Horizontal Break\"},{code:\"ph ph-linux-logo\",desc:\"Linux Logo\"},{code:\"ph ph-list\",desc:\"List\"},{code:\"ph ph-list-bullets\",desc:\"List Bullets\"},{code:\"ph ph-list-checks\",desc:\"List Checks\"},{code:\"ph ph-list-dashes\",desc:\"List Dashes\"},{code:\"ph ph-list-magnifying-glass\",desc:\"List Magnifying Glass\"},{code:\"ph ph-list-numbers\",desc:\"List Numbers\"},{code:\"ph ph-list-plus\",desc:\"List Plus\"},{code:\"ph ph-lock\",desc:\"Lock\"},{code:\"ph ph-lockers\",desc:\"Lockers\"},{code:\"ph ph-lock-key\",desc:\"Lock Key\"},{code:\"ph ph-lock-key-open\",desc:\"Lock Key Open\"},{code:\"ph ph-lock-laminated\",desc:\"Lock Laminated\"},{code:\"ph ph-lock-laminated-open\",desc:\"Lock Laminated Open\"},{code:\"ph ph-lock-open\",desc:\"Lock Open\"},{code:\"ph ph-lock-simple\",desc:\"Lock Simple\"},{code:\"ph ph-lock-simple-open\",desc:\"Lock Simple Open\"},{code:\"ph ph-magic-wand\",desc:\"Magic Wand\"},{code:\"ph ph-magnet\",desc:\"Magnet\"},{code:\"ph ph-magnet-straight\",desc:\"Magnet Straight\"},{code:\"ph ph-magnifying-glass\",desc:\"Magnifying Glass\"},{code:\"ph ph-magnifying-glass-minus\",desc:\"Magnifying Glass Minus\"},{code:\"ph ph-magnifying-glass-plus\",desc:\"Magnifying Glass Plus\"},{code:\"ph ph-map-pin\",desc:\"Map Pin\"},{code:\"ph ph-map-pin-line\",desc:\"Map Pin Line\"},{code:\"ph ph-map-trifold\",desc:\"Map Trifold\"},{code:\"ph ph-marker-circle\",desc:\"Marker Circle\"},{code:\"ph ph-martini\",desc:\"Martini\"},{code:\"ph ph-mask-happy\",desc:\"Mask Happy\"},{code:\"ph ph-mask-sad\",desc:\"Mask Sad\"},{code:\"ph ph-math-operations\",desc:\"Math Operations\"},{code:\"ph ph-medal\",desc:\"Medal\"},{code:\"ph ph-medal-military\",desc:\"Medal Military\"},{code:\"ph ph-medium-logo\",desc:\"Medium Logo\"},{code:\"ph ph-megaphone\",desc:\"Megaphone\"},{code:\"ph ph-megaphone-simple\",desc:\"Megaphone Simple\"},{code:\"ph ph-messenger-logo\",desc:\"Messenger Logo\"},{code:\"ph ph-meta-logo\",desc:\"Meta Logo\"},{code:\"ph ph-metronome\",desc:\"Metronome\"},{code:\"ph ph-microphone\",desc:\"Microphone\"},{code:\"ph ph-microphone-slash\",desc:\"Microphone Slash\"},{code:\"ph ph-microphone-stage\",desc:\"Microphone Stage\"},{code:\"ph ph-microsoft-excel-logo\",desc:\"Microsoft Excel Logo\"},{code:\"ph ph-microsoft-outlook-logo\",desc:\"Microsoft Outlook Logo\"},{code:\"ph ph-microsoft-powerpoint-logo\",desc:\"Microsoft Powerpoint Logo\"},{code:\"ph ph-microsoft-teams-logo\",desc:\"Microsoft Teams Logo\"},{code:\"ph ph-microsoft-word-logo\",desc:\"Microsoft Word Logo\"},{code:\"ph ph-minus\",desc:\"Minus\"},{code:\"ph ph-minus-circle\",desc:\"Minus Circle\"},{code:\"ph ph-minus-square\",desc:\"Minus Square\"},{code:\"ph ph-money\",desc:\"Money\"},{code:\"ph ph-monitor\",desc:\"Monitor\"},{code:\"ph ph-monitor-play\",desc:\"Monitor Play\"},{code:\"ph ph-moon\",desc:\"Moon\"},{code:\"ph ph-moon-stars\",desc:\"Moon Stars\"},{code:\"ph ph-moped\",desc:\"Moped\"},{code:\"ph ph-moped-front\",desc:\"Moped Front\"},{code:\"ph ph-mosque\",desc:\"Mosque\"},{code:\"ph ph-motorcycle\",desc:\"Motorcycle\"},{code:\"ph ph-mountains\",desc:\"Mountains\"},{code:\"ph ph-mouse\",desc:\"Mouse\"},{code:\"ph ph-mouse-simple\",desc:\"Mouse Simple\"},{code:\"ph ph-music-note\",desc:\"Music Note\"},{code:\"ph ph-music-notes\",desc:\"Music Notes\"},{code:\"ph ph-music-note-simple\",desc:\"Music Note Simple\"},{code:\"ph ph-music-notes-plus\",desc:\"Music Notes Plus\"},{code:\"ph ph-music-notes-simple\",desc:\"Music Notes Simple\"},{code:\"ph ph-navigation-arrow\",desc:\"Navigation Arrow\"},{code:\"ph ph-needle\",desc:\"Needle\"},{code:\"ph ph-newspaper\",desc:\"Newspaper\"},{code:\"ph ph-newspaper-clipping\",desc:\"Newspaper Clipping\"},{code:\"ph ph-notches\",desc:\"Notches\"},{code:\"ph ph-note\",desc:\"Note\"},{code:\"ph ph-note-blank\",desc:\"Note Blank\"},{code:\"ph ph-notebook\",desc:\"Notebook\"},{code:\"ph ph-notepad\",desc:\"Notepad\"},{code:\"ph ph-note-pencil\",desc:\"Note Pencil\"},{code:\"ph ph-notification\",desc:\"Notification\"},{code:\"ph ph-notion-logo\",desc:\"Notion Logo\"},{code:\"ph ph-number-circle-eight\",desc:\"Number Circle Eight\"},{code:\"ph ph-number-circle-five\",desc:\"Number Circle Five\"},{code:\"ph ph-number-circle-four\",desc:\"Number Circle Four\"},{code:\"ph ph-number-circle-nine\",desc:\"Number Circle Nine\"},{code:\"ph ph-number-circle-one\",desc:\"Number Circle One\"},{code:\"ph ph-number-circle-seven\",desc:\"Number Circle Seven\"},{code:\"ph ph-number-circle-six\",desc:\"Number Circle Six\"},{code:\"ph ph-number-circle-three\",desc:\"Number Circle Three\"},{code:\"ph ph-number-circle-two\",desc:\"Number Circle Two\"},{code:\"ph ph-number-circle-zero\",desc:\"Number Circle Zero\"},{code:\"ph ph-number-eight\",desc:\"Number Eight\"},{code:\"ph ph-number-five\",desc:\"Number Five\"},{code:\"ph ph-number-four\",desc:\"Number Four\"},{code:\"ph ph-number-nine\",desc:\"Number Nine\"},{code:\"ph ph-number-one\",desc:\"Number One\"},{code:\"ph ph-number-seven\",desc:\"Number Seven\"},{code:\"ph ph-number-six\",desc:\"Number Six\"},{code:\"ph ph-number-square-eight\",desc:\"Number Square Eight\"},{code:\"ph ph-number-square-five\",desc:\"Number Square Five\"},{code:\"ph ph-number-square-four\",desc:\"Number Square Four\"},{code:\"ph ph-number-square-nine\",desc:\"Number Square Nine\"},{code:\"ph ph-number-square-one\",desc:\"Number Square One\"},{code:\"ph ph-number-square-seven\",desc:\"Number Square Seven\"},{code:\"ph ph-number-square-six\",desc:\"Number Square Six\"},{code:\"ph ph-number-square-three\",desc:\"Number Square Three\"},{code:\"ph ph-number-square-two\",desc:\"Number Square Two\"},{code:\"ph ph-number-square-zero\",desc:\"Number Square Zero\"},{code:\"ph ph-number-three\",desc:\"Number Three\"},{code:\"ph ph-number-two\",desc:\"Number Two\"},{code:\"ph ph-number-zero\",desc:\"Number Zero\"},{code:\"ph ph-nut\",desc:\"Nut\"},{code:\"ph ph-ny-times-logo\",desc:\"Ny Times Logo\"},{code:\"ph ph-octagon\",desc:\"Octagon\"},{code:\"ph ph-office-chair\",desc:\"Office Chair\"},{code:\"ph ph-option\",desc:\"Option\"},{code:\"ph ph-orange-slice\",desc:\"Orange Slice\"},{code:\"ph ph-package\",desc:\"Package\"},{code:\"ph ph-paint-brush\",desc:\"Paint Brush\"},{code:\"ph ph-paint-brush-broad\",desc:\"Paint Brush Broad\"},{code:\"ph ph-paint-brush-household\",desc:\"Paint Brush Household\"},{code:\"ph ph-paint-bucket\",desc:\"Paint Bucket\"},{code:\"ph ph-paint-roller\",desc:\"Paint Roller\"},{code:\"ph ph-palette\",desc:\"Palette\"},{code:\"ph ph-pants\",desc:\"Pants\"},{code:\"ph ph-paperclip\",desc:\"Paperclip\"},{code:\"ph ph-paperclip-horizontal\",desc:\"Paperclip Horizontal\"},{code:\"ph ph-paper-plane\",desc:\"Paper Plane\"},{code:\"ph ph-paper-plane-right\",desc:\"Paper Plane Right\"},{code:\"ph ph-paper-plane-tilt\",desc:\"Paper Plane Tilt\"},{code:\"ph ph-parachute\",desc:\"Parachute\"},{code:\"ph ph-paragraph\",desc:\"Paragraph\"},{code:\"ph ph-parallelogram\",desc:\"Parallelogram\"},{code:\"ph ph-park\",desc:\"Park\"},{code:\"ph ph-password\",desc:\"Password\"},{code:\"ph ph-path\",desc:\"Path\"},{code:\"ph ph-patreon-logo\",desc:\"Patreon Logo\"},{code:\"ph ph-pause\",desc:\"Pause\"},{code:\"ph ph-pause-circle\",desc:\"Pause Circle\"},{code:\"ph ph-paw-print\",desc:\"Paw Print\"},{code:\"ph ph-paypal-logo\",desc:\"Paypal Logo\"},{code:\"ph ph-peace\",desc:\"Peace\"},{code:\"ph ph-pen\",desc:\"Pen\"},{code:\"ph ph-pencil\",desc:\"Pencil\"},{code:\"ph ph-pencil-circle\",desc:\"Pencil Circle\"},{code:\"ph ph-pencil-line\",desc:\"Pencil Line\"},{code:\"ph ph-pencil-simple\",desc:\"Pencil Simple\"},{code:\"ph ph-pencil-simple-line\",desc:\"Pencil Simple Line\"},{code:\"ph ph-pencil-simple-slash\",desc:\"Pencil Simple Slash\"},{code:\"ph ph-pencil-slash\",desc:\"Pencil Slash\"},{code:\"ph ph-pen-nib\",desc:\"Pen Nib\"},{code:\"ph ph-pen-nib-straight\",desc:\"Pen Nib Straight\"},{code:\"ph ph-pentagram\",desc:\"Pentagram\"},{code:\"ph ph-pepper\",desc:\"Pepper\"},{code:\"ph ph-percent\",desc:\"Percent\"},{code:\"ph ph-person\",desc:\"Person\"},{code:\"ph ph-person-arms-spread\",desc:\"Person Arms Spread\"},{code:\"ph ph-person-simple\",desc:\"Person Simple\"},{code:\"ph ph-person-simple-bike\",desc:\"Person Simple Bike\"},{code:\"ph ph-person-simple-run\",desc:\"Person Simple Run\"},{code:\"ph ph-person-simple-throw\",desc:\"Person Simple Throw\"},{code:\"ph ph-person-simple-walk\",desc:\"Person Simple Walk\"},{code:\"ph ph-perspective\",desc:\"Perspective\"},{code:\"ph ph-phone\",desc:\"Phone\"},{code:\"ph ph-phone-call\",desc:\"Phone Call\"},{code:\"ph ph-phone-disconnect\",desc:\"Phone Disconnect\"},{code:\"ph ph-phone-incoming\",desc:\"Phone Incoming\"},{code:\"ph ph-phone-outgoing\",desc:\"Phone Outgoing\"},{code:\"ph ph-phone-plus\",desc:\"Phone Plus\"},{code:\"ph ph-phone-slash\",desc:\"Phone Slash\"},{code:\"ph ph-phone-x\",desc:\"Phone X\"},{code:\"ph ph-phosphor-logo\",desc:\"Phosphor Logo\"},{code:\"ph ph-pi\",desc:\"Pi\"},{code:\"ph ph-piano-keys\",desc:\"Piano Keys\"},{code:\"ph ph-picture-in-picture\",desc:\"Picture In Picture\"},{code:\"ph ph-piggy-bank\",desc:\"Piggy Bank\"},{code:\"ph ph-pill\",desc:\"Pill\"},{code:\"ph ph-pinterest-logo\",desc:\"Pinterest Logo\"},{code:\"ph ph-pinwheel\",desc:\"Pinwheel\"},{code:\"ph ph-pizza\",desc:\"Pizza\"},{code:\"ph ph-placeholder\",desc:\"Placeholder\"},{code:\"ph ph-planet\",desc:\"Planet\"},{code:\"ph ph-plant\",desc:\"Plant\"},{code:\"ph ph-play\",desc:\"Play\"},{code:\"ph ph-play-circle\",desc:\"Play Circle\"},{code:\"ph ph-playlist\",desc:\"Playlist\"},{code:\"ph ph-play-pause\",desc:\"Play Pause\"},{code:\"ph ph-plug\",desc:\"Plug\"},{code:\"ph ph-plug-charging\",desc:\"Plug Charging\"},{code:\"ph ph-plugs\",desc:\"Plugs\"},{code:\"ph ph-plugs-connected\",desc:\"Plugs Connected\"},{code:\"ph ph-plus\",desc:\"Plus\"},{code:\"ph ph-plus-circle\",desc:\"Plus Circle\"},{code:\"ph ph-plus-minus\",desc:\"Plus Minus\"},{code:\"ph ph-plus-square\",desc:\"Plus Square\"},{code:\"ph ph-poker-chip\",desc:\"Poker Chip\"},{code:\"ph ph-police-car\",desc:\"Police Car\"},{code:\"ph ph-polygon\",desc:\"Polygon\"},{code:\"ph ph-popcorn\",desc:\"Popcorn\"},{code:\"ph ph-potted-plant\",desc:\"Potted Plant\"},{code:\"ph ph-power\",desc:\"Power\"},{code:\"ph ph-prescription\",desc:\"Prescription\"},{code:\"ph ph-presentation\",desc:\"Presentation\"},{code:\"ph ph-presentation-chart\",desc:\"Presentation Chart\"},{code:\"ph ph-printer\",desc:\"Printer\"},{code:\"ph ph-prohibit\",desc:\"Prohibit\"},{code:\"ph ph-prohibit-inset\",desc:\"Prohibit Inset\"},{code:\"ph ph-projector-screen\",desc:\"Projector Screen\"},{code:\"ph ph-projector-screen-chart\",desc:\"Projector Screen Chart\"},{code:\"ph ph-pulse\",desc:\"Pulse\"},{code:\"ph ph-activity\",desc:\"Activity\"},{code:\"ph ph-push-pin\",desc:\"Push Pin\"},{code:\"ph ph-push-pin-simple\",desc:\"Push Pin Simple\"},{code:\"ph ph-push-pin-simple-slash\",desc:\"Push Pin Simple Slash\"},{code:\"ph ph-push-pin-slash\",desc:\"Push Pin Slash\"},{code:\"ph ph-puzzle-piece\",desc:\"Puzzle Piece\"},{code:\"ph ph-qr-code\",desc:\"Qr Code\"},{code:\"ph ph-question\",desc:\"Question\"},{code:\"ph ph-queue\",desc:\"Queue\"},{code:\"ph ph-quotes\",desc:\"Quotes\"},{code:\"ph ph-radical\",desc:\"Radical\"},{code:\"ph ph-radio\",desc:\"Radio\"},{code:\"ph ph-radioactive\",desc:\"Radioactive\"},{code:\"ph ph-radio-button\",desc:\"Radio Button\"},{code:\"ph ph-rainbow\",desc:\"Rainbow\"},{code:\"ph ph-rainbow-cloud\",desc:\"Rainbow Cloud\"},{code:\"ph ph-read-cv-logo\",desc:\"Read Cv Logo\"},{code:\"ph ph-receipt\",desc:\"Receipt\"},{code:\"ph ph-receipt-x\",desc:\"Receipt X\"},{code:\"ph ph-record\",desc:\"Record\"},{code:\"ph ph-rectangle\",desc:\"Rectangle\"},{code:\"ph ph-recycle\",desc:\"Recycle\"},{code:\"ph ph-reddit-logo\",desc:\"Reddit Logo\"},{code:\"ph ph-repeat\",desc:\"Repeat\"},{code:\"ph ph-repeat-once\",desc:\"Repeat Once\"},{code:\"ph ph-rewind\",desc:\"Rewind\"},{code:\"ph ph-rewind-circle\",desc:\"Rewind Circle\"},{code:\"ph ph-road-horizon\",desc:\"Road Horizon\"},{code:\"ph ph-robot\",desc:\"Robot\"},{code:\"ph ph-rocket\",desc:\"Rocket\"},{code:\"ph ph-rocket-launch\",desc:\"Rocket Launch\"},{code:\"ph ph-rows\",desc:\"Rows\"},{code:\"ph ph-rss\",desc:\"Rss\"},{code:\"ph ph-rss-simple\",desc:\"Rss Simple\"},{code:\"ph ph-rug\",desc:\"Rug\"},{code:\"ph ph-ruler\",desc:\"Ruler\"},{code:\"ph ph-scales\",desc:\"Scales\"},{code:\"ph ph-scan\",desc:\"Scan\"},{code:\"ph ph-scissors\",desc:\"Scissors\"},{code:\"ph ph-scooter\",desc:\"Scooter\"},{code:\"ph ph-screencast\",desc:\"Screencast\"},{code:\"ph ph-scribble-loop\",desc:\"Scribble Loop\"},{code:\"ph ph-scroll\",desc:\"Scroll\"},{code:\"ph ph-seal\",desc:\"Seal\"},{code:\"ph ph-seal-check\",desc:\"Seal Check\"},{code:\"ph ph-seal-question\",desc:\"Seal Question\"},{code:\"ph ph-seal-warning\",desc:\"Seal Warning\"},{code:\"ph ph-circle-wavy\",desc:\"Circle Wavy\"},{code:\"ph ph-circle-wavy-check\",desc:\"Circle Wavy Check\"},{code:\"ph ph-circle-wavy-question\",desc:\"Circle Wavy Question\"},{code:\"ph ph-circle-wavy-warning\",desc:\"Circle Wavy Warning\"},{code:\"ph ph-selection\",desc:\"Selection\"},{code:\"ph ph-selection-all\",desc:\"Selection All\"},{code:\"ph ph-selection-background\",desc:\"Selection Background\"},{code:\"ph ph-selection-foreground\",desc:\"Selection Foreground\"},{code:\"ph ph-selection-inverse\",desc:\"Selection Inverse\"},{code:\"ph ph-selection-plus\",desc:\"Selection Plus\"},{code:\"ph ph-selection-slash\",desc:\"Selection Slash\"},{code:\"ph ph-shapes\",desc:\"Shapes\"},{code:\"ph ph-share\",desc:\"Share\"},{code:\"ph ph-share-fat\",desc:\"Share Fat\"},{code:\"ph ph-share-network\",desc:\"Share Network\"},{code:\"ph ph-shield\",desc:\"Shield\"},{code:\"ph ph-shield-check\",desc:\"Shield Check\"},{code:\"ph ph-shield-checkered\",desc:\"Shield Checkered\"},{code:\"ph ph-shield-chevron\",desc:\"Shield Chevron\"},{code:\"ph ph-shield-plus\",desc:\"Shield Plus\"},{code:\"ph ph-shield-slash\",desc:\"Shield Slash\"},{code:\"ph ph-shield-star\",desc:\"Shield Star\"},{code:\"ph ph-shield-warning\",desc:\"Shield Warning\"},{code:\"ph ph-shirt-folded\",desc:\"Shirt Folded\"},{code:\"ph ph-shooting-star\",desc:\"Shooting Star\"},{code:\"ph ph-shopping-bag\",desc:\"Shopping Bag\"},{code:\"ph ph-shopping-bag-open\",desc:\"Shopping Bag Open\"},{code:\"ph ph-shopping-cart\",desc:\"Shopping Cart\"},{code:\"ph ph-shopping-cart-simple\",desc:\"Shopping Cart Simple\"},{code:\"ph ph-shower\",desc:\"Shower\"},{code:\"ph ph-shrimp\",desc:\"Shrimp\"},{code:\"ph ph-shuffle\",desc:\"Shuffle\"},{code:\"ph ph-shuffle-angular\",desc:\"Shuffle Angular\"},{code:\"ph ph-shuffle-simple\",desc:\"Shuffle Simple\"},{code:\"ph ph-sidebar\",desc:\"Sidebar\"},{code:\"ph ph-sidebar-simple\",desc:\"Sidebar Simple\"},{code:\"ph ph-sigma\",desc:\"Sigma\"},{code:\"ph ph-signature\",desc:\"Signature\"},{code:\"ph ph-sign-in\",desc:\"Sign In\"},{code:\"ph ph-sign-out\",desc:\"Sign Out\"},{code:\"ph ph-signpost\",desc:\"Signpost\"},{code:\"ph ph-sim-card\",desc:\"Sim Card\"},{code:\"ph ph-siren\",desc:\"Siren\"},{code:\"ph ph-sketch-logo\",desc:\"Sketch Logo\"},{code:\"ph ph-skip-back\",desc:\"Skip Back\"},{code:\"ph ph-skip-back-circle\",desc:\"Skip Back Circle\"},{code:\"ph ph-skip-forward\",desc:\"Skip Forward\"},{code:\"ph ph-skip-forward-circle\",desc:\"Skip Forward Circle\"},{code:\"ph ph-skull\",desc:\"Skull\"},{code:\"ph ph-slack-logo\",desc:\"Slack Logo\"},{code:\"ph ph-sliders\",desc:\"Sliders\"},{code:\"ph ph-sliders-horizontal\",desc:\"Sliders Horizontal\"},{code:\"ph ph-slideshow\",desc:\"Slideshow\"},{code:\"ph ph-smiley\",desc:\"Smiley\"},{code:\"ph ph-smiley-angry\",desc:\"Smiley Angry\"},{code:\"ph ph-smiley-blank\",desc:\"Smiley Blank\"},{code:\"ph ph-smiley-meh\",desc:\"Smiley Meh\"},{code:\"ph ph-smiley-nervous\",desc:\"Smiley Nervous\"},{code:\"ph ph-smiley-sad\",desc:\"Smiley Sad\"},{code:\"ph ph-smiley-sticker\",desc:\"Smiley Sticker\"},{code:\"ph ph-smiley-wink\",desc:\"Smiley Wink\"},{code:\"ph ph-smiley-x-eyes\",desc:\"Smiley X Eyes\"},{code:\"ph ph-snapchat-logo\",desc:\"Snapchat Logo\"},{code:\"ph ph-sneaker\",desc:\"Sneaker\"},{code:\"ph ph-sneaker-move\",desc:\"Sneaker Move\"},{code:\"ph ph-snowflake\",desc:\"Snowflake\"},{code:\"ph ph-soccer-ball\",desc:\"Soccer Ball\"},{code:\"ph ph-sort-ascending\",desc:\"Sort Ascending\"},{code:\"ph ph-sort-descending\",desc:\"Sort Descending\"},{code:\"ph ph-soundcloud-logo\",desc:\"Soundcloud Logo\"},{code:\"ph ph-spade\",desc:\"Spade\"},{code:\"ph ph-sparkle\",desc:\"Sparkle\"},{code:\"ph ph-speaker-hifi\",desc:\"Speaker Hifi\"},{code:\"ph ph-speaker-high\",desc:\"Speaker High\"},{code:\"ph ph-speaker-low\",desc:\"Speaker Low\"},{code:\"ph ph-speaker-none\",desc:\"Speaker None\"},{code:\"ph ph-speaker-simple-high\",desc:\"Speaker Simple High\"},{code:\"ph ph-speaker-simple-low\",desc:\"Speaker Simple Low\"},{code:\"ph ph-speaker-simple-none\",desc:\"Speaker Simple None\"},{code:\"ph ph-speaker-simple-slash\",desc:\"Speaker Simple Slash\"},{code:\"ph ph-speaker-simple-x\",desc:\"Speaker Simple X\"},{code:\"ph ph-speaker-slash\",desc:\"Speaker Slash\"},{code:\"ph ph-speaker-x\",desc:\"Speaker X\"},{code:\"ph ph-spinner\",desc:\"Spinner\"},{code:\"ph ph-spinner-gap\",desc:\"Spinner Gap\"},{code:\"ph ph-spiral\",desc:\"Spiral\"},{code:\"ph ph-split-horizontal\",desc:\"Split Horizontal\"},{code:\"ph ph-split-vertical\",desc:\"Split Vertical\"},{code:\"ph ph-spotify-logo\",desc:\"Spotify Logo\"},{code:\"ph ph-square\",desc:\"Square\"},{code:\"ph ph-square-half\",desc:\"Square Half\"},{code:\"ph ph-square-half-bottom\",desc:\"Square Half Bottom\"},{code:\"ph ph-square-logo\",desc:\"Square Logo\"},{code:\"ph ph-squares-four\",desc:\"Squares Four\"},{code:\"ph ph-square-split-horizontal\",desc:\"Square Split Horizontal\"},{code:\"ph ph-square-split-vertical\",desc:\"Square Split Vertical\"},{code:\"ph ph-stack\",desc:\"Stack\"},{code:\"ph ph-stack-overflow-logo\",desc:\"Stack Overflow Logo\"},{code:\"ph ph-stack-simple\",desc:\"Stack Simple\"},{code:\"ph ph-stairs\",desc:\"Stairs\"},{code:\"ph ph-stamp\",desc:\"Stamp\"},{code:\"ph ph-star\",desc:\"Star\"},{code:\"ph ph-star-and-crescent\",desc:\"Star And Crescent\"},{code:\"ph ph-star-four\",desc:\"Star Four\"},{code:\"ph ph-star-half\",desc:\"Star Half\"},{code:\"ph ph-star-of-david\",desc:\"Star Of David\"},{code:\"ph ph-steering-wheel\",desc:\"Steering Wheel\"},{code:\"ph ph-steps\",desc:\"Steps\"},{code:\"ph ph-stethoscope\",desc:\"Stethoscope\"},{code:\"ph ph-sticker\",desc:\"Sticker\"},{code:\"ph ph-stool\",desc:\"Stool\"},{code:\"ph ph-stop\",desc:\"Stop\"},{code:\"ph ph-stop-circle\",desc:\"Stop Circle\"},{code:\"ph ph-storefront\",desc:\"Storefront\"},{code:\"ph ph-strategy\",desc:\"Strategy\"},{code:\"ph ph-stripe-logo\",desc:\"Stripe Logo\"},{code:\"ph ph-student\",desc:\"Student\"},{code:\"ph ph-subtitles\",desc:\"Subtitles\"},{code:\"ph ph-subtract\",desc:\"Subtract\"},{code:\"ph ph-subtract-square\",desc:\"Subtract Square\"},{code:\"ph ph-suitcase\",desc:\"Suitcase\"},{code:\"ph ph-suitcase-rolling\",desc:\"Suitcase Rolling\"},{code:\"ph ph-suitcase-simple\",desc:\"Suitcase Simple\"},{code:\"ph ph-sun\",desc:\"Sun\"},{code:\"ph ph-sun-dim\",desc:\"Sun Dim\"},{code:\"ph ph-sunglasses\",desc:\"Sunglasses\"},{code:\"ph ph-sun-horizon\",desc:\"Sun Horizon\"},{code:\"ph ph-swap\",desc:\"Swap\"},{code:\"ph ph-swatches\",desc:\"Swatches\"},{code:\"ph ph-swimming-pool\",desc:\"Swimming Pool\"},{code:\"ph ph-sword\",desc:\"Sword\"},{code:\"ph ph-synagogue\",desc:\"Synagogue\"},{code:\"ph ph-syringe\",desc:\"Syringe\"},{code:\"ph ph-table\",desc:\"Table\"},{code:\"ph ph-tabs\",desc:\"Tabs\"},{code:\"ph ph-tag\",desc:\"Tag\"},{code:\"ph ph-tag-chevron\",desc:\"Tag Chevron\"},{code:\"ph ph-tag-simple\",desc:\"Tag Simple\"},{code:\"ph ph-target\",desc:\"Target\"},{code:\"ph ph-taxi\",desc:\"Taxi\"},{code:\"ph ph-telegram-logo\",desc:\"Telegram Logo\"},{code:\"ph ph-television\",desc:\"Television\"},{code:\"ph ph-television-simple\",desc:\"Television Simple\"},{code:\"ph ph-tennis-ball\",desc:\"Tennis Ball\"},{code:\"ph ph-tent\",desc:\"Tent\"},{code:\"ph ph-terminal\",desc:\"Terminal\"},{code:\"ph ph-terminal-window\",desc:\"Terminal Window\"},{code:\"ph ph-test-tube\",desc:\"Test Tube\"},{code:\"ph ph-text-aa\",desc:\"Text Aa\"},{code:\"ph ph-text-align-center\",desc:\"Text Align Center\"},{code:\"ph ph-text-align-justify\",desc:\"Text Align Justify\"},{code:\"ph ph-text-align-left\",desc:\"Text Align Left\"},{code:\"ph ph-text-align-right\",desc:\"Text Align Right\"},{code:\"ph ph-text-a-underline\",desc:\"Text A Underline\"},{code:\"ph ph-text-b\",desc:\"Text B\"},{code:\"ph ph-text-bolder\",desc:\"Text Bolder\"},{code:\"ph ph-textbox\",desc:\"Textbox\"},{code:\"ph ph-text-columns\",desc:\"Text Columns\"},{code:\"ph ph-text-h\",desc:\"Text H\"},{code:\"ph ph-text-h-five\",desc:\"Text H Five\"},{code:\"ph ph-text-h-four\",desc:\"Text H Four\"},{code:\"ph ph-text-h-one\",desc:\"Text H One\"},{code:\"ph ph-text-h-six\",desc:\"Text H Six\"},{code:\"ph ph-text-h-three\",desc:\"Text H Three\"},{code:\"ph ph-text-h-two\",desc:\"Text H Two\"},{code:\"ph ph-text-indent\",desc:\"Text Indent\"},{code:\"ph ph-text-italic\",desc:\"Text Italic\"},{code:\"ph ph-text-outdent\",desc:\"Text Outdent\"},{code:\"ph ph-text-strikethrough\",desc:\"Text Strikethrough\"},{code:\"ph ph-text-t\",desc:\"Text T\"},{code:\"ph ph-text-underline\",desc:\"Text Underline\"},{code:\"ph ph-thermometer\",desc:\"Thermometer\"},{code:\"ph ph-thermometer-cold\",desc:\"Thermometer Cold\"},{code:\"ph ph-thermometer-hot\",desc:\"Thermometer Hot\"},{code:\"ph ph-thermometer-simple\",desc:\"Thermometer Simple\"},{code:\"ph ph-thumbs-down\",desc:\"Thumbs Down\"},{code:\"ph ph-thumbs-up\",desc:\"Thumbs Up\"},{code:\"ph ph-ticket\",desc:\"Ticket\"},{code:\"ph ph-tidal-logo\",desc:\"Tidal Logo\"},{code:\"ph ph-tiktok-logo\",desc:\"Tiktok Logo\"},{code:\"ph ph-timer\",desc:\"Timer\"},{code:\"ph ph-tipi\",desc:\"Tipi\"},{code:\"ph ph-toggle-left\",desc:\"Toggle Left\"},{code:\"ph ph-toggle-right\",desc:\"Toggle Right\"},{code:\"ph ph-toilet\",desc:\"Toilet\"},{code:\"ph ph-toilet-paper\",desc:\"Toilet Paper\"},{code:\"ph ph-toolbox\",desc:\"Toolbox\"},{code:\"ph ph-tooth\",desc:\"Tooth\"},{code:\"ph ph-tote\",desc:\"Tote\"},{code:\"ph ph-tote-simple\",desc:\"Tote Simple\"},{code:\"ph ph-trademark\",desc:\"Trademark\"},{code:\"ph ph-trademark-registered\",desc:\"Trademark Registered\"},{code:\"ph ph-traffic-cone\",desc:\"Traffic Cone\"},{code:\"ph ph-traffic-sign\",desc:\"Traffic Sign\"},{code:\"ph ph-traffic-signal\",desc:\"Traffic Signal\"},{code:\"ph ph-train\",desc:\"Train\"},{code:\"ph ph-train-regional\",desc:\"Train Regional\"},{code:\"ph ph-train-simple\",desc:\"Train Simple\"},{code:\"ph ph-tram\",desc:\"Tram\"},{code:\"ph ph-translate\",desc:\"Translate\"},{code:\"ph ph-trash\",desc:\"Trash\"},{code:\"ph ph-trash-simple\",desc:\"Trash Simple\"},{code:\"ph ph-tray\",desc:\"Tray\"},{code:\"ph ph-tree\",desc:\"Tree\"},{code:\"ph ph-tree-evergreen\",desc:\"Tree Evergreen\"},{code:\"ph ph-tree-palm\",desc:\"Tree Palm\"},{code:\"ph ph-tree-structure\",desc:\"Tree Structure\"},{code:\"ph ph-trend-down\",desc:\"Trend Down\"},{code:\"ph ph-trend-up\",desc:\"Trend Up\"},{code:\"ph ph-triangle\",desc:\"Triangle\"},{code:\"ph ph-trophy\",desc:\"Trophy\"},{code:\"ph ph-truck\",desc:\"Truck\"},{code:\"ph ph-t-shirt\",desc:\"T Shirt\"},{code:\"ph ph-twitch-logo\",desc:\"Twitch Logo\"},{code:\"ph ph-twitter-logo\",desc:\"Twitter Logo\"},{code:\"ph ph-umbrella\",desc:\"Umbrella\"},{code:\"ph ph-umbrella-simple\",desc:\"Umbrella Simple\"},{code:\"ph ph-unite\",desc:\"Unite\"},{code:\"ph ph-unite-square\",desc:\"Unite Square\"},{code:\"ph ph-upload\",desc:\"Upload\"},{code:\"ph ph-upload-simple\",desc:\"Upload Simple\"},{code:\"ph ph-usb\",desc:\"Usb\"},{code:\"ph ph-user\",desc:\"User\"},{code:\"ph ph-user-circle\",desc:\"User Circle\"},{code:\"ph ph-user-circle-gear\",desc:\"User Circle Gear\"},{code:\"ph ph-user-circle-minus\",desc:\"User Circle Minus\"},{code:\"ph ph-user-circle-plus\",desc:\"User Circle Plus\"},{code:\"ph ph-user-focus\",desc:\"User Focus\"},{code:\"ph ph-user-gear\",desc:\"User Gear\"},{code:\"ph ph-user-list\",desc:\"User List\"},{code:\"ph ph-user-minus\",desc:\"User Minus\"},{code:\"ph ph-user-plus\",desc:\"User Plus\"},{code:\"ph ph-user-rectangle\",desc:\"User Rectangle\"},{code:\"ph ph-users\",desc:\"Users\"},{code:\"ph ph-users-four\",desc:\"Users Four\"},{code:\"ph ph-user-square\",desc:\"User Square\"},{code:\"ph ph-users-three\",desc:\"Users Three\"},{code:\"ph ph-user-switch\",desc:\"User Switch\"},{code:\"ph ph-van\",desc:\"Van\"},{code:\"ph ph-vault\",desc:\"Vault\"},{code:\"ph ph-vibrate\",desc:\"Vibrate\"},{code:\"ph ph-video\",desc:\"Video\"},{code:\"ph ph-video-camera\",desc:\"Video Camera\"},{code:\"ph ph-video-camera-slash\",desc:\"Video Camera Slash\"},{code:\"ph ph-vignette\",desc:\"Vignette\"},{code:\"ph ph-vinyl-record\",desc:\"Vinyl Record\"},{code:\"ph ph-virtual-reality\",desc:\"Virtual Reality\"},{code:\"ph ph-virus\",desc:\"Virus\"},{code:\"ph ph-voicemail\",desc:\"Voicemail\"},{code:\"ph ph-volleyball\",desc:\"Volleyball\"},{code:\"ph ph-wall\",desc:\"Wall\"},{code:\"ph ph-wallet\",desc:\"Wallet\"},{code:\"ph ph-warehouse\",desc:\"Warehouse\"},{code:\"ph ph-warning\",desc:\"Warning\"},{code:\"ph ph-warning-circle\",desc:\"Warning Circle\"},{code:\"ph ph-warning-diamond\",desc:\"Warning Diamond\"},{code:\"ph ph-warning-octagon\",desc:\"Warning Octagon\"},{code:\"ph ph-watch\",desc:\"Watch\"},{code:\"ph ph-waveform\",desc:\"Waveform\"},{code:\"ph ph-waves\",desc:\"Waves\"},{code:\"ph ph-wave-sawtooth\",desc:\"Wave Sawtooth\"},{code:\"ph ph-wave-sine\",desc:\"Wave Sine\"},{code:\"ph ph-wave-square\",desc:\"Wave Square\"},{code:\"ph ph-wave-triangle\",desc:\"Wave Triangle\"},{code:\"ph ph-webcam\",desc:\"Webcam\"},{code:\"ph ph-webcam-slash\",desc:\"Webcam Slash\"},{code:\"ph ph-webhooks-logo\",desc:\"Webhooks Logo\"},{code:\"ph ph-wechat-logo\",desc:\"Wechat Logo\"},{code:\"ph ph-whatsapp-logo\",desc:\"Whatsapp Logo\"},{code:\"ph ph-wheelchair\",desc:\"Wheelchair\"},{code:\"ph ph-wheelchair-motion\",desc:\"Wheelchair Motion\"},{code:\"ph ph-wifi-high\",desc:\"Wifi High\"},{code:\"ph ph-wifi-low\",desc:\"Wifi Low\"},{code:\"ph ph-wifi-medium\",desc:\"Wifi Medium\"},{code:\"ph ph-wifi-none\",desc:\"Wifi None\"},{code:\"ph ph-wifi-slash\",desc:\"Wifi Slash\"},{code:\"ph ph-wifi-x\",desc:\"Wifi X\"},{code:\"ph ph-wind\",desc:\"Wind\"},{code:\"ph ph-windows-logo\",desc:\"Windows Logo\"},{code:\"ph ph-wine\",desc:\"Wine\"},{code:\"ph ph-wrench\",desc:\"Wrench\"},{code:\"ph ph-x\",desc:\"X\"},{code:\"ph ph-x-circle\",desc:\"X Circle\"},{code:\"ph ph-x-square\",desc:\"X Square\"},{code:\"ph ph-yin-yang\",desc:\"Yin Yang\"},{code:\"ph ph-youtube-logo\",desc:\"YouTube Logo\"}],iconsButtons:[\"iconsBack\",\"|\"]}),t.FE.PLUGINS.icons=function(e){function n(){var d=e.$tb.find('.fr-command[data-cmd=\"icons\"]'),v=e.popups.get(\"icons\");if(v||(v=O()),!v.hasClass(\"fr-active\")){e.popups.refresh(\"icons\"),e.popups.setContainer(\"icons\",e.$tb);var L=d.offset().left+d.outerWidth()/2,b=d.offset().top+(e.opts.toolbarBottom?10:d.outerHeight()-10);e.popups.show(\"icons\",L,b,d.outerHeight())}}function r(){e.popups.hide(\"icons\")}function O(){var d=\"\";e.opts.toolbarInline&&e.opts.iconsButtons.length>0&&(d='<div class=\"fr-buttons fr-icons-buttons\">'+e.button.buildList(e.opts.iconsButtons)+\"</div>\");var v={buttons:d,icons:X()},L=e.popups.create(\"icons\",v);return e.tooltip.bind(L,\".fr-icon\"),Y(L),L.addClass(\"fr-popup-icons-plugin\"),L}function x(){if(!e.selection.isCollapsed())return!1;var d=e.selection.element(),v=e.selection.endElement();if(d&&e.node.hasClass(d,\"fr-icon\"))return d;if(v&&e.node.hasClass(v,\"fr-icon\"))return v;var L=e.selection.ranges(0),b=L.startContainer;if(b.nodeType==Node.ELEMENT_NODE&&b.childNodes.length>0&&L.startOffset>0){var h=b.childNodes[L.startOffset-1];if(e.node.hasClass(h,\"fr-icon\"))return h}return!1}function X(){for(var d='<div style=\"text-align: center\">',v=0;v<e.opts.iconsSet.length;v++)v!==0&&v%e.opts.iconsStep===0&&(d+=\"<br>\"),d+='<span class=\"fr-command fr-icon\" tabIndex=\"-1\" data-cmd=\"insertIcon\" title=\"'+e.language.translate(e.opts.iconsSet[v].desc)+'\" role=\"button\" data-param1=\"'+e.opts.iconsSet[v].code+'\">'+('<i class=\"'+e.opts.iconsSet[v].code+'\"></i>')+'<span class=\"fr-sr-only\">'+e.language.translate(e.opts.iconsSet[v].desc)+\"&nbsp;&nbsp;&nbsp;</span></span>\";return d+=\"</div>\",d}function Y(d){e.events.on(\"popup.tab\",function(v){var L=t(v.currentTarget);if(!e.popups.isVisible(\"icons\")||!L.is(\"span, a\"))return!0;var b=v.which,h,m,u;if(t.FE.KEYCODE.TAB==b){if(L.is(\"span.fr-icon\")&&v.shiftKey||L.is(\"a\")&&!v.shiftKey){var V=d.find(\".fr-buttons\");h=!e.accessibility.focusToolbar(V,!!v.shiftKey)}if(h!==!1){var E=d.find(\"span.fr-icon:focus:first, span.fr-icon:visible:first, a\");L.is(\"span.fr-icon\")&&(E=E.not(\"span.fr-icon:not(:focus)\")),m=E.index(L),v.shiftKey?m=((m-1)%E.length+E.length)%E.length:m=(m+1)%E.length,u=E.get(m),e.events.disableBlur(),u.focus(),h=!1}}else if(t.FE.KEYCODE.ARROW_UP==b||t.FE.KEYCODE.ARROW_DOWN==b||t.FE.KEYCODE.ARROW_LEFT==b||t.FE.KEYCODE.ARROW_RIGHT==b){if(L.is(\"span.fr-icon\")){var o=L.parent().find(\"span.fr-icon\");m=o.index(L);var l=e.opts.iconsStep,f=Math.floor(o.length/l),i=m%l,S=Math.floor(m/l),s=S*l+i,p=f*l;t.FE.KEYCODE.ARROW_UP==b?s=((s-l)%p+p)%p:t.FE.KEYCODE.ARROW_DOWN==b?s=(s+l)%p:t.FE.KEYCODE.ARROW_LEFT==b?s=((s-1)%p+p)%p:t.FE.KEYCODE.ARROW_RIGHT==b&&(s=(s+1)%p),u=t(o.get(s)),e.events.disableBlur(),u.focus(),h=!1}}else t.FE.KEYCODE.ENTER==b&&(L.is(\"a\")?L[0].click():e.button.exec(L),h=!1);return h===!1&&(v.preventDefault(),v.stopPropagation()),h},!0)}function U(d){var v=x(),L=e.selection.ranges(0);v?(L.startOffset===0&&e.selection.element()===v?t(v).before(t.FE.MARKERS+t.FE.INVISIBLE_SPACE):L.startOffset>0&&e.selection.element()===v&&L.commonAncestorContainer.parentNode.classList.contains(\"fr-icon\")&&t(v).after(t.FE.INVISIBLE_SPACE+t.FE.MARKERS),e.selection.restore(),e.html.insert('<i class=\"'+d+' fr-deletable\"></i>&nbsp;'+t.FE.MARKERS,!0)):e.html.insert('<i class=\"'+d+' fr-icon fr-deletable\"></i>&nbsp;',!0)}function _(){e.popups.hide(\"icons\"),e.toolbar.showInline()}function F(){var d=function(){for(var v=e.el.querySelectorAll(\"i.ph:not(.fr-deletable)\"),L=0;L<v.length;L++)v[L].className+=\" fr-deletable\"};d(),e.events.on(\"html.set\",d)}return{_init:F,insert:U,showIconsPopup:n,hideIconsPopup:r,back:_}},t.FE.DefineIcon(\"icons\",{NAME:\"star\",FA5NAME:\"star\"}),t.FE.RegisterCommand(\"icons\",{title:\"Icons\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"icons\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"icons\")):this.icons.showIconsPopup()},plugin:\"icons\"}),t.FE.RegisterCommand(\"insertIcon\",{callback:function(e,n){this.icons.insert(n),this.icons.hideIconsPopup()}}),t.FE.DefineIcon(\"iconsBack\",{NAME:\"arrow-left\"}),t.FE.RegisterCommand(\"iconsBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.icons.back()}})})(jQuery);(function(t){t.extend(t.FE.POPUP_TEMPLATES,{emoticons:\"[_BUTTONS_][_EMOTICONS_]\"}),t.extend(t.FE.DEFAULTS,{emoticonsStep:8,emoticonsSet:[{code:\"1f600\",desc:\"Grinning face\"},{code:\"1f601\",desc:\"Grinning face with smiling eyes\"},{code:\"1f602\",desc:\"Face with tears of joy\"},{code:\"1f603\",desc:\"Smiling face with open mouth\"},{code:\"1f604\",desc:\"Smiling face with open mouth and smiling eyes\"},{code:\"1f605\",desc:\"Smiling face with open mouth and cold sweat\"},{code:\"1f606\",desc:\"Smiling face with open mouth and tightly-closed eyes\"},{code:\"1f607\",desc:\"Smiling face with halo\"},{code:\"1f608\",desc:\"Smiling face with horns\"},{code:\"1f609\",desc:\"Winking face\"},{code:\"1f60a\",desc:\"Smiling face with smiling eyes\"},{code:\"1f60b\",desc:\"Face savoring delicious food\"},{code:\"1f60c\",desc:\"Relieved face\"},{code:\"1f60d\",desc:\"Smiling face with heart-shaped eyes\"},{code:\"1f60e\",desc:\"Smiling face with sunglasses\"},{code:\"1f60f\",desc:\"Smirking face\"},{code:\"1f610\",desc:\"Neutral face\"},{code:\"1f611\",desc:\"Expressionless face\"},{code:\"1f612\",desc:\"Unamused face\"},{code:\"1f613\",desc:\"Face with cold sweat\"},{code:\"1f614\",desc:\"Pensive face\"},{code:\"1f615\",desc:\"Confused face\"},{code:\"1f616\",desc:\"Confounded face\"},{code:\"1f617\",desc:\"Kissing face\"},{code:\"1f618\",desc:\"Face throwing a kiss\"},{code:\"1f619\",desc:\"Kissing face with smiling eyes\"},{code:\"1f61a\",desc:\"Kissing face with closed eyes\"},{code:\"1f61b\",desc:\"Face with stuck out tongue\"},{code:\"1f61c\",desc:\"Face with stuck out tongue and winking eye\"},{code:\"1f61d\",desc:\"Face with stuck out tongue and tightly-closed eyes\"},{code:\"1f61e\",desc:\"Disappointed face\"},{code:\"1f61f\",desc:\"Worried face\"},{code:\"1f620\",desc:\"Angry face\"},{code:\"1f621\",desc:\"Pouting face\"},{code:\"1f622\",desc:\"Crying face\"},{code:\"1f623\",desc:\"Persevering face\"},{code:\"1f624\",desc:\"Face with look of triumph\"},{code:\"1f625\",desc:\"Disappointed but relieved face\"},{code:\"1f626\",desc:\"Frowning face with open mouth\"},{code:\"1f627\",desc:\"Anguished face\"},{code:\"1f628\",desc:\"Fearful face\"},{code:\"1f629\",desc:\"Weary face\"},{code:\"1f62a\",desc:\"Sleepy face\"},{code:\"1f62b\",desc:\"Tired face\"},{code:\"1f62c\",desc:\"Grimacing face\"},{code:\"1f62d\",desc:\"Loudly crying face\"},{code:\"1f62e\",desc:\"Face with open mouth\"},{code:\"1f62f\",desc:\"Hushed face\"},{code:\"1f630\",desc:\"Face with open mouth and cold sweat\"},{code:\"1f631\",desc:\"Face screaming in fear\"},{code:\"1f632\",desc:\"Astonished face\"},{code:\"1f633\",desc:\"Flushed face\"},{code:\"1f634\",desc:\"Sleeping face\"},{code:\"1f635\",desc:\"Dizzy face\"},{code:\"1f636\",desc:\"Face without mouth\"},{code:\"1f637\",desc:\"Face with medical mask\"}],emoticonsButtons:[\"emoticonsBack\",\"|\"],emoticonsUseImage:!0}),t.FE.PLUGINS.emoticons=function(e){function n(){var d=e.$tb.find('.fr-command[data-cmd=\"emoticons\"]'),v=e.popups.get(\"emoticons\");if(v||(v=O()),!v.hasClass(\"fr-active\")){e.popups.refresh(\"emoticons\"),e.popups.setContainer(\"emoticons\",e.$tb);var L=d.offset().left+d.outerWidth()/2,b=d.offset().top+(e.opts.toolbarBottom?10:d.outerHeight()-10);e.popups.show(\"emoticons\",L,b,d.outerHeight())}}function r(){e.popups.hide(\"emoticons\")}function O(){var d=\"\";e.opts.toolbarInline&&e.opts.emoticonsButtons.length>0&&(d='<div class=\"fr-buttons fr-emoticons-buttons\">'+e.button.buildList(e.opts.emoticonsButtons)+\"</div>\");var v={buttons:d,emoticons:X()},L=e.popups.create(\"emoticons\",v);return e.tooltip.bind(L,\".fr-emoticon\"),Y(L),L}function x(){if(!e.selection.isCollapsed())return!1;var d=e.selection.element(),v=e.selection.endElement();if(d&&e.node.hasClass(d,\"fr-emoticon\"))return d;if(v&&e.node.hasClass(v,\"fr-emoticon\"))return v;var L=e.selection.ranges(0),b=L.startContainer;if(b.nodeType==Node.ELEMENT_NODE&&b.childNodes.length>0&&L.startOffset>0){var h=b.childNodes[L.startOffset-1];if(e.node.hasClass(h,\"fr-emoticon\"))return h}return!1}function X(){for(var d='<div style=\"text-align: center\">',v=0;v<e.opts.emoticonsSet.length;v++)v!==0&&v%e.opts.emoticonsStep===0&&(d+=\"<br>\"),d+='<span class=\"fr-command fr-emoticon\" tabIndex=\"-1\" data-cmd=\"insertEmoticon\" title=\"'+e.language.translate(e.opts.emoticonsSet[v].desc)+'\" role=\"button\" data-param1=\"'+e.opts.emoticonsSet[v].code+'\">'+(e.opts.emoticonsUseImage?'<img src=\"https://cdnjs.cloudflare.com/ajax/libs/emojione/2.0.1/assets/svg/'+e.opts.emoticonsSet[v].code+'.svg\"/>':\"&#x\"+e.opts.emoticonsSet[v].code+\";\")+'<span class=\"fr-sr-only\">'+e.language.translate(e.opts.emoticonsSet[v].desc)+\"&nbsp;&nbsp;&nbsp;</span></span>\";return e.opts.emoticonsUseImage&&(d+='<p style=\"font-size: 12px; text-align: center; padding: 0 5px;\">Emoji free by <a class=\"fr-link\" tabIndex=\"-1\" href=\"http://emojione.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" role=\"link\" aria-label=\"Open Emoji One website.\">Emoji One</a></p>'),d+=\"</div>\",d}function Y(d){e.events.on(\"popup.tab\",function(v){var L=t(v.currentTarget);if(!e.popups.isVisible(\"emoticons\")||!L.is(\"span, a\"))return!0;var b=v.which,h,m,u;if(t.FE.KEYCODE.TAB==b){if(L.is(\"span.fr-emoticon\")&&v.shiftKey||L.is(\"a\")&&!v.shiftKey){var V=d.find(\".fr-buttons\");h=!e.accessibility.focusToolbar(V,!!v.shiftKey)}if(h!==!1){var E=d.find(\"span.fr-emoticon:focus:first, span.fr-emoticon:visible:first, a\");L.is(\"span.fr-emoticon\")&&(E=E.not(\"span.fr-emoticon:not(:focus)\")),m=E.index(L),v.shiftKey?m=((m-1)%E.length+E.length)%E.length:m=(m+1)%E.length,u=E.get(m),e.events.disableBlur(),u.focus(),h=!1}}else if(t.FE.KEYCODE.ARROW_UP==b||t.FE.KEYCODE.ARROW_DOWN==b||t.FE.KEYCODE.ARROW_LEFT==b||t.FE.KEYCODE.ARROW_RIGHT==b){if(L.is(\"span.fr-emoticon\")){var o=L.parent().find(\"span.fr-emoticon\");m=o.index(L);var l=e.opts.emoticonsStep,f=Math.floor(o.length/l),i=m%l,S=Math.floor(m/l),s=S*l+i,p=f*l;t.FE.KEYCODE.ARROW_UP==b?s=((s-l)%p+p)%p:t.FE.KEYCODE.ARROW_DOWN==b?s=(s+l)%p:t.FE.KEYCODE.ARROW_LEFT==b?s=((s-1)%p+p)%p:t.FE.KEYCODE.ARROW_RIGHT==b&&(s=(s+1)%p),u=t(o.get(s)),e.events.disableBlur(),u.focus(),h=!1}}else t.FE.KEYCODE.ENTER==b&&(L.is(\"a\")?L[0].click():e.button.exec(L),h=!1);return h===!1&&(v.preventDefault(),v.stopPropagation()),h},!0)}function U(d,v){var L=x(),b=e.selection.ranges(0);L?(b.startOffset===0&&e.selection.element()===L?t(L).before(t.FE.MARKERS+t.FE.INVISIBLE_SPACE):b.startOffset>0&&e.selection.element()===L&&b.commonAncestorContainer.parentNode.classList.contains(\"fr-emoticon\")&&t(L).after(t.FE.INVISIBLE_SPACE+t.FE.MARKERS),e.selection.restore(),e.html.insert('<span class=\"fr-emoticon fr-deletable'+(v?\" fr-emoticon-img\":\"\")+'\"'+(v?' style=\"background: url('+v+');\"':\"\")+\">\"+(v?\"&nbsp;\":d)+\"</span>&nbsp;\"+t.FE.MARKERS,!0)):e.html.insert('<span class=\"fr-emoticon fr-deletable'+(v?\" fr-emoticon-img\":\"\")+'\"'+(v?' style=\"background: url('+v+');\"':\"\")+\">\"+(v?\"&nbsp;\":d)+\"</span>&nbsp;\",!0)}function _(){e.popups.hide(\"emoticons\"),e.toolbar.showInline()}function F(){var d=function(){for(var v=e.el.querySelectorAll(\".fr-emoticon:not(.fr-deletable)\"),L=0;L<v.length;L++)v[L].className+=\" fr-deletable\"};d(),e.events.on(\"html.set\",d),e.events.on(\"keydown\",function(v){if(e.keys.isCharacter(v.which)&&e.selection.inEditor()){var L=e.selection.ranges(0),b=x();e.node.hasClass(b,\"fr-emoticon-img\")&&b&&(L.startOffset===0&&e.selection.element()===b?t(b).before(t.FE.MARKERS+t.FE.INVISIBLE_SPACE):t(b).after(t.FE.INVISIBLE_SPACE+t.FE.MARKERS),e.selection.restore())}}),e.events.on(\"keyup\",function(v){for(var L=e.el.querySelectorAll(\".fr-emoticon\"),b=0;b<L.length;b++)typeof L[b].textContent<\"u\"&&L[b].textContent.replace(/\\u200B/gi,\"\").length===0&&t(L[b]).remove();if(!(v.which>=t.FE.KEYCODE.ARROW_LEFT&&v.which<=t.FE.KEYCODE.ARROW_DOWN)){var h=x();e.node.hasClass(h,\"fr-emoticon-img\")&&(t(h).append(t.FE.MARKERS),e.selection.restore())}})}return{_init:F,insert:U,showEmoticonsPopup:n,hideEmoticonsPopup:r,back:_}},t.FE.DefineIcon(\"emoticons\",{NAME:\"smile-o\",FA5NAME:\"smile\"}),t.FE.RegisterCommand(\"emoticons\",{title:\"Emoticons\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"emoticons\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"emoticons\")):this.emoticons.showEmoticonsPopup()},plugin:\"emoticons\"}),t.FE.RegisterCommand(\"insertEmoticon\",{callback:function(e,n){this.emoticons.insert(\"&#x\"+n+\";\",this.opts.emoticonsUseImage?\"https://cdnjs.cloudflare.com/ajax/libs/emojione/2.0.1/assets/svg/\"+n+\".svg\":null),this.emoticons.hideEmoticonsPopup()}}),t.FE.DefineIcon(\"emoticonsBack\",{NAME:\"arrow-left\"}),t.FE.RegisterCommand(\"emoticonsBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.emoticons.back()}})})(jQuery);(function(t){t.extend(t.FE.POPUP_TEMPLATES,{\"colors.picker\":\"[_BUTTONS_][_TEXT_COLORS_][_BACKGROUND_COLORS_][_CUSTOM_COLOR_]\"}),t.extend(t.FE.DEFAULTS,{colorsText:[\"#61BD6D\",\"#1ABC9C\",\"#54ACD2\",\"#2C82C9\",\"#9365B8\",\"#475577\",\"#CCCCCC\",\"#41A85F\",\"#00A885\",\"#3D8EB9\",\"#2969B0\",\"#553982\",\"#28324E\",\"#000000\",\"#F7DA64\",\"#FBA026\",\"#EB6B56\",\"#E25041\",\"#A38F84\",\"#EFEFEF\",\"#FFFFFF\",\"#FAC51C\",\"#F37934\",\"#D14841\",\"#B8312F\",\"#7C706B\",\"#D1D5D8\",\"REMOVE\"],colorsBackground:[\"#61BD6D\",\"#1ABC9C\",\"#54ACD2\",\"#2C82C9\",\"#9365B8\",\"#475577\",\"#CCCCCC\",\"#41A85F\",\"#00A885\",\"#3D8EB9\",\"#2969B0\",\"#553982\",\"#28324E\",\"#000000\",\"#F7DA64\",\"#FBA026\",\"#EB6B56\",\"#E25041\",\"#A38F84\",\"#EFEFEF\",\"#FFFFFF\",\"#FAC51C\",\"#F37934\",\"#D14841\",\"#B8312F\",\"#7C706B\",\"#D1D5D8\",\"REMOVE\"],colorsStep:7,colorsHEXInput:!0,colorsDefaultTab:\"text\",colorsButtons:[\"colorsBack\",\"|\",\"-\"]});var e=[\"text\",\"background\"];t.FE.PLUGINS.colors=function(n){function r(){var m=n.$tb.find('.fr-command[data-cmd=\"color\"]'),u=n.popups.get(\"colors.picker\");if(u||(u=x()),!u.hasClass(\"fr-active\"))if(n.popups.setContainer(\"colors.picker\",n.$tb),e.map(function(o){_(o)}),m.is(\":visible\")){var V=m.offset().left+m.outerWidth()/2,E=m.offset().top+(n.opts.toolbarBottom?10:m.outerHeight()-10);n.popups.show(\"colors.picker\",V,E,m.outerHeight())}else n.position.forSelection(u),n.popups.show(\"colors.picker\")}function O(){n.popups.hide(\"colors.picker\")}function x(){var m='<div class=\"fr-buttons fr-colors-buttons\">';n.opts.toolbarInline&&n.opts.colorsButtons.length>0&&(m+=n.button.buildList(n.opts.colorsButtons)),m+=X()+\"</div>\";var u=\"\";n.opts.colorsHEXInput&&(u='<div class=\"fr-color-hex-layer fr-active fr-layer\" id=\"fr-color-hex-layer-'+n.id+'\"><div class=\"fr-input-line\"><input maxlength=\"7\" id=\"fr-color-hex-layer-text-'+n.id+'\" type=\"text\" placeholder=\"'+n.language.translate(\"HEX Color\")+'\" tabIndex=\"1\" aria-required=\"true\"></div><div class=\"fr-action-buttons\"><button type=\"button\" class=\"fr-command fr-submit\" data-cmd=\"customColor\" tabIndex=\"2\" role=\"button\">'+n.language.translate(\"OK\")+\"</button></div></div>\");var V={buttons:m,text_colors:Y(\"text\"),background_colors:Y(\"background\"),custom_color:u},E=n.popups.create(\"colors.picker\",V);return U(E),E}function X(){var m='<div class=\"fr-colors-tabs fr-group\">';return m+='<span class=\"fr-colors-tab '+(n.opts.colorsDefaultTab==\"background\"?\"\":\"fr-selected-tab \")+'fr-command\" tabIndex=\"-1\" role=\"button\" aria-pressed=\"'+(n.opts.colorsDefaultTab!=\"background\")+'\" data-param1=\"text\" data-cmd=\"colorChangeSet\" title=\"'+n.language.translate(\"Text\")+'\">'+n.language.translate(\"Text\")+\"</span>\",m+='<span class=\"fr-colors-tab '+(n.opts.colorsDefaultTab==\"background\"?\"fr-selected-tab\":\"\")+'fr-command\" tabIndex=\"-1\" role=\"button\" aria-pressed=\"'+(n.opts.colorsDefaultTab==\"background\")+'\" data-param1=\"background\" data-cmd=\"colorChangeSet\" title=\"'+n.language.translate(\"Background\")+'\">'+n.language.translate(\"Background\")+\"</span>\",m+\"</div>\"}function Y(m){for(var u=m==\"text\"?n.opts.colorsText:n.opts.colorsBackground,V='<div class=\"fr-color-set fr-'+m+\"-color\"+(n.opts.colorsDefaultTab==m||n.opts.colorsDefaultTab!=\"text\"&&n.opts.colorsDefaultTab!=\"background\"&&m==\"text\"?\" fr-selected-set\":\"\")+'\">',E=0;E<u.length;E++)E!==0&&E%n.opts.colorsStep===0&&(V+=\"<br>\"),u[E]!=\"REMOVE\"?V+='<span class=\"fr-command fr-select-color\" style=\"background: '+u[E]+';\" tabIndex=\"-1\" aria-selected=\"false\" role=\"button\" data-cmd=\"'+m+'Color\" data-param1=\"'+u[E]+'\"><span class=\"fr-sr-only\">'+n.language.translate(\"Color\")+\" \"+u[E]+\"&nbsp;&nbsp;&nbsp;</span></span>\":V+='<span class=\"fr-command fr-select-color\" data-cmd=\"'+m+'Color\" tabIndex=\"-1\" role=\"button\" data-param1=\"REMOVE\" title=\"'+n.language.translate(\"Clear Formatting\")+'\">'+n.icon.create(\"remove\")+'<span class=\"fr-sr-only\">'+n.language.translate(\"Clear Formatting\")+\"</span></span>\";return V+\"</div>\"}function U(m){n.events.on(\"popup.tab\",function(u){var V=t(u.currentTarget);if(!n.popups.isVisible(\"colors.picker\")||!V.is(\"span\"))return!0;var E=u.which,o=!0;if(t.FE.KEYCODE.TAB==E){var l=m.find(\".fr-buttons\");o=!n.accessibility.focusToolbar(l,!!u.shiftKey)}else if(t.FE.KEYCODE.ARROW_UP==E||t.FE.KEYCODE.ARROW_DOWN==E||t.FE.KEYCODE.ARROW_LEFT==E||t.FE.KEYCODE.ARROW_RIGHT==E){if(V.is(\"span.fr-select-color\")){var f=V.parent().find(\"span.fr-select-color\"),i=f.index(V),S=n.opts.colorsStep,s=Math.floor(f.length/S),p=i%S,M=Math.floor(i/S),a=M*S+p,y=s*S;t.FE.KEYCODE.ARROW_UP==E?a=((a-S)%y+y)%y:t.FE.KEYCODE.ARROW_DOWN==E?a=(a+S)%y:t.FE.KEYCODE.ARROW_LEFT==E?a=((a-1)%y+y)%y:t.FE.KEYCODE.ARROW_RIGHT==E&&(a=(a+1)%y);var c=t(f.get(a));n.events.disableBlur(),c.focus(),o=!1}}else t.FE.KEYCODE.ENTER==E&&(n.button.exec(V),o=!1);return o===!1&&(u.preventDefault(),u.stopPropagation()),o},!0)}function _(m){var u=n.popups.get(\"colors.picker\"),V=t(n.selection.element()),E;m==\"background\"?E=\"background-color\":E=\"color\";var o=u.find(\".fr-\"+m+\"-color .fr-select-color\");for(o.find(\".fr-selected-color\").remove(),o.removeClass(\"fr-active-item\"),o.not('[data-param1=\"REMOVE\"]').attr(\"aria-selected\",!1);V.get(0)!=n.el;)if(V.css(E)==\"transparent\"||V.css(E)==\"rgba(0, 0, 0, 0)\")V=V.parent();else{var l=u.find(\".fr-\"+m+'-color .fr-select-color[data-param1=\"'+n.helpers.RGBToHex(V.css(E))+'\"]');l.append('<span class=\"fr-selected-color\" aria-hidden=\"true\">\\uF00C</span>'),l.addClass(\"fr-active-item\").attr(\"aria-selected\",!0);break}d(m)}function F(m,u){m.hasClass(\"fr-selected-tab\")||(m.siblings().removeClass(\"fr-selected-tab\").attr(\"aria-pressed\",!1),m.addClass(\"fr-selected-tab\").attr(\"aria-pressed\",!0),m.parents(\".fr-popup\").find(\".fr-color-set\").removeClass(\"fr-selected-set\"),m.parents(\".fr-popup\").find(\".fr-color-set.fr-\"+u+\"-color\").addClass(\"fr-selected-set\"),d(u)),n.accessibility.focusPopup(m.parents(\".fr-popup\"))}function d(m){var u=n.popups.get(\"colors.picker\"),V=u.find(\".fr-\"+m+\"-color .fr-active-item\").attr(\"data-param1\"),E=u.find(\".fr-color-hex-layer input\"),o=u.find('.fr-colors-tab[data-param1=\"'+m+'\"]');E.length&&o.hasClass(\"fr-selected-tab\")&&E.val(V).trigger(\"change\")}function v(m){m!=\"REMOVE\"?n.format.applyStyle(\"background-color\",n.helpers.HEXtoRGB(m)):n.format.removeStyle(\"background-color\"),O()}function L(m){m!=\"REMOVE\"?n.format.applyStyle(\"color\",n.helpers.HEXtoRGB(m)):n.format.removeStyle(\"color\"),O()}function b(){n.popups.hide(\"colors.picker\"),n.toolbar.showInline()}function h(){var m=n.popups.get(\"colors.picker\"),u=m.find(\".fr-color-hex-layer input\");if(u.length){var V=u.val(),E=m.find(\".fr-selected-tab\").attr(\"data-param1\");E==\"background\"?v(V):L(V)}}return{showColorsPopup:r,hideColorsPopup:O,changeSet:F,background:v,customColor:h,text:L,back:b}},t.FE.DefineIcon(\"colors\",{NAME:\"tint\"}),t.FE.RegisterCommand(\"color\",{title:\"Colors\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"colors.picker\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"colors.picker\")):this.colors.showColorsPopup()},plugin:\"colors\"}),t.FE.RegisterCommand(\"textColor\",{undo:!0,callback:function(n,r){this.colors.text(r)}}),t.FE.RegisterCommand(\"backgroundColor\",{undo:!0,callback:function(n,r){this.colors.background(r)}}),t.FE.RegisterCommand(\"colorChangeSet\",{undo:!1,focus:!1,callback:function(n,r){var O=this.popups.get(\"colors.picker\").find('.fr-command[data-cmd=\"'+n+'\"][data-param1=\"'+r+'\"]');this.colors.changeSet(O,r)}}),t.FE.DefineIcon(\"colorsBack\",{NAME:\"arrow-left\"}),t.FE.RegisterCommand(\"colorsBack\",{title:\"Back\",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.colors.back()}}),t.FE.RegisterCommand(\"customColor\",{title:\"OK\",undo:!0,callback:function(){this.colors.customColor()}}),t.FE.DefineIcon(\"remove\",{NAME:\"eraser\"})})(jQuery);(function(t){t.FE.URLRegEx=\"(^| |\\\\u00A0)(\"+t.FE.LinkRegEx+\"|([a-z0-9+-_.]{1,}@[a-z0-9+-_.]{1,}\\\\.[a-z0-9+-_]{1,}))$\",t.FE.PLUGINS.url=function(e){var n=null;function r(F,d,v){for(var L=\"\";v.length&&v[v.length-1]==\".\";)L+=\".\",v=v.substring(0,v.length-1);var b=v;if(e.opts.linkConvertEmailAddress)e.helpers.isEmail(b)&&!/^mailto:.*/i.test(b)&&(b=\"mailto:\"+b);else if(e.helpers.isEmail(b))return d+v;return/^((http|https|ftp|ftps|mailto|tel|sms|notes|data)\\:)/i.test(b)||(b=\"//\"+b),(d||\"\")+\"<a\"+(e.opts.linkAlwaysBlank?' target=\"_blank\"':\"\")+(n?' rel=\"'+n+'\"':\"\")+' data-fr-linked=\"true\" href=\"'+b+'\">'+v.replace(/&amp;/g,\"&\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")+\"</a>\"+L}function O(){return new RegExp(t.FE.URLRegEx,\"gi\")}function x(F){return e.opts.linkAlwaysNoFollow&&(n=\"nofollow\"),e.opts.linkAlwaysBlank&&(e.opts.linkNoOpener&&(n?n+=\" noopener\":n=\"noopener\"),e.opts.linkNoReferrer&&(n?n+=\" noreferrer\":n=\"noreferrer\")),F.replace(O(),r)}function X(F){return F?F.tagName===\"A\"?!0:F.parentNode&&F.parentNode!=e.el?X(F.parentNode):!1:!1}function Y(F){var d=F.split(\" \");return d[d.length-1]}function U(){var F=e.selection.ranges(0),d=F.startContainer;if(!d||d.nodeType!==Node.TEXT_NODE||F.startOffset!==(d.textContent||\"\").length||X(d))return!1;if(O().test(Y(d.textContent))){t(d).before(x(d.textContent));var v=t(d.parentNode).find(\"a[data-fr-linked]\");v.removeAttr(\"data-fr-linked\"),d.parentNode.removeChild(d),e.events.trigger(\"url.linked\",[v.get(0)])}else if(d.textContent.split(\" \").length<=2&&d.previousSibling&&d.previousSibling.tagName===\"A\"){var L=d.previousSibling.innerText+d.textContent;O().test(Y(L))&&(t(d.previousSibling).replaceWith(x(L)),d.parentNode.removeChild(d))}}function _(){e.events.on(\"keypress\",function(F){e.selection.isCollapsed()&&(F.key==\".\"||F.key==\")\"||F.key==\"(\")&&U()},!0),e.events.on(\"keydown\",function(F){var d=F.which;e.selection.isCollapsed()&&(d==t.FE.KEYCODE.ENTER||d==t.FE.KEYCODE.SPACE)&&U()},!0),e.events.on(\"paste.beforeCleanup\",function(F){if(e.helpers.isURL(F)){var d=null;return e.opts.linkAlwaysBlank&&(e.opts.linkNoOpener&&(d?d+=\" noopener\":d=\"noopener\"),e.opts.linkNoReferrer&&(d?d+=\" noreferrer\":d=\"noreferrer\")),\"<a\"+(e.opts.linkAlwaysBlank?' target=\"_blank\"':\"\")+(d?' rel=\"'+d+'\"':\"\")+' href=\"'+F+'\" >'+F+\"</a>\"}})}return{_init:_}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{lineBreakerTags:[\"table\",\"hr\",\"form\",\"dl\",\"span.fr-video\",\".fr-embedly\"],lineBreakerOffset:15,lineBreakerHorizontalOffset:10}),t.FE.PLUGINS.lineBreaker=function(e){var n,r,O;function x(o,l){var f,i,S,s,p,M,a,y;if(o==null)s=l.parent(),p=s.offset().top,a=l.offset().top,f=a-Math.min((a-p)/2,e.opts.lineBreakerOffset),S=s.outerWidth(),i=s.offset().left;else if(l==null)s=o.parent(),M=s.offset().top+s.outerHeight(),y=o.offset().top+o.outerHeight(),M<y&&(s=t(s).parent(),M=s.offset().top+s.outerHeight()),f=y+Math.min(Math.abs(M-y)/2,e.opts.lineBreakerOffset),S=s.outerWidth(),i=s.offset().left;else{s=o.parent();var c=o.offset().top+o.height(),k=l.offset().top;if(c>k)return!1;f=(c+k)/2,S=s.outerWidth(),i=s.offset().left}e.opts.iframe&&(i+=e.$iframe.offset().left-e.helpers.scrollLeft(),f+=e.$iframe.offset().top-e.helpers.scrollTop()),e.$box.append(n),n.css(\"top\",f-e.win.pageYOffset),n.css(\"left\",i-e.win.pageXOffset),n.css(\"width\",S),n.data(\"tag1\",o),n.data(\"tag2\",l),n.addClass(\"fr-visible\").data(\"instance\",e)}function X(o,l){var f=o.offset().top,i=o.offset().top+o.outerHeight(),S,s;if(Math.abs(i-l)<=e.opts.lineBreakerOffset||Math.abs(l-f)<=e.opts.lineBreakerOffset)if(Math.abs(i-l)<Math.abs(l-f)){s=o.get(0);for(var p=s.nextSibling;p&&p.nodeType==Node.TEXT_NODE&&p.textContent.length===0;)p=p.nextSibling;if(p){if(S=Y(p),S)return x(o,S),!0}else return x(o,null),!0}else if(s=o.get(0),s.previousSibling){if(S=Y(s.previousSibling),S)return x(S,o),!0}else return x(null,o),!0;n.removeClass(\"fr-visible\").removeData(\"instance\")}function Y(o){if(o){var l=t(o);if(e.$el.find(l).length===0)return null;if(o.nodeType!=Node.TEXT_NODE&&l.is(e.opts.lineBreakerTags.join(\",\")))return l;if(l.parents(e.opts.lineBreakerTags.join(\",\")).length>0)return o=l.parents(e.opts.lineBreakerTags.join(\",\")).get(0),e.$el.find(o).length===0||!t(o).is(e.opts.lineBreakerTags.join(\",\"))?null:t(o)}return null}function U(o){if(typeof o.inFroalaWrapper<\"u\")return o.inFroalaWrapper;for(var l=o;o.parentNode&&o.parentNode!==e.$wp.get(0);)o=o.parentNode;return l.inFroalaWrapper=o.parentNode==e.$wp.get(0),l.inFroalaWrapper}function _(o,l){var f=e.doc.elementFromPoint(o,l);return f&&!t(f).closest(\".fr-line-breaker\").length&&!e.node.isElement(f)&&f!=e.$wp.get(0)&&U(f)?f:null}function F(o,l,f){for(var i=f,S=null;i<=e.opts.lineBreakerOffset&&!S;)S=_(o,l-i),S||(S=_(o,l+i)),i+=f;return S}function d(o,l,f){for(var i=null,S=100;!i&&o>e.$box.offset().left&&o<e.$box.offset().left+e.$box.outerWidth()&&S>0;)i=_(o,l),i||(i=F(o,l,5)),f==\"left\"?o-=e.opts.lineBreakerHorizontalOffset:o+=e.opts.lineBreakerHorizontalOffset,S-=e.opts.lineBreakerHorizontalOffset;return i}function v(o){O=null;var l=null,f=null,i=e.doc.elementFromPoint(o.pageX-e.win.pageXOffset,o.pageY-e.win.pageYOffset);i&&(i.tagName==\"HTML\"||i.tagName==\"BODY\"||e.node.isElement(i)||(i.getAttribute(\"class\")||\"\").indexOf(\"fr-line-breaker\")>=0)?(f=F(o.pageX-e.win.pageXOffset,o.pageY-e.win.pageYOffset,1),f||(f=d(o.pageX-e.win.pageXOffset-e.opts.lineBreakerHorizontalOffset,o.pageY-e.win.pageYOffset,\"left\")),f||(f=d(o.pageX-e.win.pageXOffset+e.opts.lineBreakerHorizontalOffset,o.pageY-e.win.pageYOffset,\"right\")),l=Y(f)):l=Y(i),l?X(l,o.pageY):e.core.sameInstance(n)&&n.removeClass(\"fr-visible\").removeData(\"instance\")}function L(o){if(n.hasClass(\"fr-visible\")&&!e.core.sameInstance(n))return!1;if(e.popups.areVisible()||e.el.querySelector(\".fr-selected-cell\"))return n.removeClass(\"fr-visible\"),!0;r===!1&&!e.edit.isDisabled()&&(O&&clearTimeout(O),O=setTimeout(v,30,o))}function b(){O&&clearTimeout(O),n&&n.hasClass(\"fr-visible\")&&n.removeClass(\"fr-visible\").removeData(\"instance\")}function h(){r=!0,b()}function m(){r=!1}function u(o){o.preventDefault();var l=n.data(\"instance\")||e;n.removeClass(\"fr-visible\").removeData(\"instance\");var f=n.data(\"tag1\"),i=n.data(\"tag2\"),S=e.html.defaultTag();f==null?S&&i.parent().get(0).tagName!=\"TD\"&&i.parents(S).length===0?i.before(\"<\"+S+\">\"+t.FE.MARKERS+\"<br></\"+S+\">\"):i.before(t.FE.MARKERS+\"<br>\"):S&&f.parent().get(0).tagName!=\"TD\"&&f.parents(S).length===0?f.after(\"<\"+S+\">\"+t.FE.MARKERS+\"<br></\"+S+\">\"):f.after(t.FE.MARKERS+\"<br>\"),l.selection.restore()}function V(){e.shared.$line_breaker||(e.shared.$line_breaker=t('<div class=\"fr-line-breaker\"><a class=\"fr-floating-btn\" role=\"button\" tabIndex=\"-1\" title=\"'+e.language.translate(\"Break\")+'\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><rect x=\"21\" y=\"11\" width=\"2\" height=\"8\"/><rect x=\"14\" y=\"17\" width=\"7\" height=\"2\"/><path d=\"M14.000,14.000 L14.000,22.013 L9.000,18.031 L14.000,14.000 Z\"/></svg></a></div>')),n=e.shared.$line_breaker,e.events.on(\"shared.destroy\",function(){n.html(\"\").removeData().remove(),n=null},!0),e.events.on(\"destroy\",function(){n.removeData(\"instance\").removeClass(\"fr-visible\").appendTo(\"body:first\"),clearTimeout(O)},!0),e.events.$on(n,\"mousemove\",function(o){o.stopPropagation()},!0),e.events.bindClick(n,\"a\",u)}function E(){if(!e.$wp)return!1;V(),r=!1,e.events.$on(e.$win,\"mousemove\",L),e.events.$on(t(e.win),\"scroll\",b),e.events.on(\"popups.show.table.edit\",b),e.events.on(\"commands.after\",b),e.events.$on(t(e.win),\"mousedown\",h),e.events.$on(t(e.win),\"mouseup\",m)}return{_init:E}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{entities:\"&quot;&#39;&iexcl;&cent;&pound;&curren;&yen;&brvbar;&sect;&uml;&copy;&ordf;&laquo;&not;&shy;&reg;&macr;&deg;&plusmn;&sup2;&sup3;&acute;&micro;&para;&middot;&cedil;&sup1;&ordm;&raquo;&frac14;&frac12;&frac34;&iquest;&Agrave;&Aacute;&Acirc;&Atilde;&Auml;&Aring;&AElig;&Ccedil;&Egrave;&Eacute;&Ecirc;&Euml;&Igrave;&Iacute;&Icirc;&Iuml;&ETH;&Ntilde;&Ograve;&Oacute;&Ocirc;&Otilde;&Ouml;&times;&Oslash;&Ugrave;&Uacute;&Ucirc;&Uuml;&Yacute;&THORN;&szlig;&agrave;&aacute;&acirc;&atilde;&auml;&aring;&aelig;&ccedil;&egrave;&eacute;&ecirc;&euml;&igrave;&iacute;&icirc;&iuml;&eth;&ntilde;&ograve;&oacute;&ocirc;&otilde;&ouml;&divide;&oslash;&ugrave;&uacute;&ucirc;&uuml;&yacute;&thorn;&yuml;&OElig;&oelig;&Scaron;&scaron;&Yuml;&fnof;&circ;&tilde;&Alpha;&Beta;&Gamma;&Delta;&Epsilon;&Zeta;&Eta;&Theta;&Iota;&Kappa;&Lambda;&Mu;&Nu;&Xi;&Omicron;&Pi;&Rho;&Sigma;&Tau;&Upsilon;&Phi;&Chi;&Psi;&Omega;&alpha;&beta;&gamma;&delta;&epsilon;&zeta;&eta;&theta;&iota;&kappa;&lambda;&mu;&nu;&xi;&omicron;&pi;&rho;&sigmaf;&sigma;&tau;&upsilon;&phi;&chi;&psi;&omega;&thetasym;&upsih;&piv;&ensp;&emsp;&thinsp;&zwnj;&zwj;&lrm;&rlm;&ndash;&mdash;&lsquo;&rsquo;&sbquo;&ldquo;&rdquo;&bdquo;&dagger;&Dagger;&bull;&hellip;&permil;&prime;&Prime;&lsaquo;&rsaquo;&oline;&frasl;&euro;&image;&weierp;&real;&trade;&alefsym;&larr;&uarr;&rarr;&darr;&harr;&crarr;&lArr;&uArr;&rArr;&dArr;&hArr;&forall;&part;&exist;&empty;&nabla;&isin;&notin;&ni;&prod;&sum;&minus;&lowast;&radic;&prop;&infin;&ang;&and;&or;&cap;&cup;&int;&there4;&sim;&cong;&asymp;&ne;&equiv;&le;&ge;&sub;&sup;&nsub;&sube;&supe;&oplus;&otimes;&perp;&sdot;&lceil;&rceil;&lfloor;&rfloor;&lang;&rang;&loz;&spades;&clubs;&hearts;&diams;\"}),t.FE.PLUGINS.entities=function(e){var n,r;function O(U){var _=U.textContent;if(_.match(n)){for(var F=\"\",d=0;d<_.length;d++)r[_[d]]?F+=r[_[d]]:F+=_[d];U.textContent=F}}function x(U){if(U&&[\"STYLE\",\"SCRIPT\",\"svg\",\"IFRAME\"].indexOf(U.tagName)>=0)return!0;for(var _=e.node.contents(U),F=0;F<_.length;F++)_[F].nodeType==Node.TEXT_NODE?O(_[F]):x(_[F]);U.nodeType==Node.TEXT_NODE&&O(U)}function X(U){if(U.length===0)return\"\";var _=e.clean.exec(U,x).replace(/\\&amp;/g,\"&\");return _}function Y(){e.opts.htmlSimpleAmpersand||(e.opts.entities=e.opts.entities+\"&amp;\");var U=t(\"<div>\").html(e.opts.entities).text(),_=e.opts.entities.split(\";\");r={},n=\"\";for(var F=0;F<U.length;F++){var d=U.charAt(F);r[d]=_[F]+\";\",n+=\"\\\\\"+d+(F<U.length-1?\"|\":\"\")}n=new RegExp(\"(\"+n+\")\",\"g\"),e.events.on(\"html.get\",X,!0)}return{_init:Y}}})(jQuery);(function(t){t.extend(t.FE.DEFAULTS,{dragInline:!0}),t.FE.PLUGINS.draggable=function(e){function n(b){if(b.originalEvent&&b.originalEvent.target&&b.originalEvent.target.nodeType==Node.TEXT_NODE)return!0;if(b.target&&b.target.tagName==\"A\"&&b.target.childNodes.length==1&&b.target.childNodes[0].tagName==\"IMG\"&&(b.target=b.target.childNodes[0]),!t(b.target).hasClass(\"fr-draggable\"))return e.browser.msie||b.preventDefault(),!1;e.undo.canDo()||e.undo.saveStep(),e.opts.dragInline?e.$el.attr(\"contenteditable\",!0):e.$el.attr(\"contenteditable\",!1),e.opts.toolbarInline&&e.toolbar.hide(),t(b.target).addClass(\"fr-dragging\"),!e.browser.msie&&!e.browser.edge&&e.selection.clear(),b.originalEvent.dataTransfer.setData(\"text\",\"Froala\")}function r(b){return!(b&&(b.tagName==\"HTML\"||b.tagName==\"BODY\"||e.node.isElement(b)))}function O(b,h,m){e.opts.iframe&&(b+=e.$iframe.offset().top,h+=e.$iframe.offset().left),v.offset().top!=b&&v.css(\"top\",b),v.offset().left!=h&&v.css(\"left\",h),v.width()!=m&&v.css(\"width\",m)}function x(b){var h=e.doc.elementFromPoint(b.originalEvent.pageX-e.win.pageXOffset,b.originalEvent.pageY-e.win.pageYOffset);if(!r(h)){for(var m=0,u=h;!r(u)&&u==h&&b.originalEvent.pageY-e.win.pageYOffset-m>0;)m++,u=e.doc.elementFromPoint(b.originalEvent.pageX-e.win.pageXOffset,b.originalEvent.pageY-e.win.pageYOffset-m);(!r(u)||v&&e.$el.find(u).length===0&&u!=v.get(0))&&(u=null);for(var V=0,E=h;!r(E)&&E==h&&b.originalEvent.pageY-e.win.pageYOffset+V<t(e.doc).height();)V++,E=e.doc.elementFromPoint(b.originalEvent.pageX-e.win.pageXOffset,b.originalEvent.pageY-e.win.pageYOffset+V);(!r(E)||v&&e.$el.find(E).length===0&&E!=v.get(0))&&(E=null),E==null&&u?h=u:E&&u==null?h=E:E&&u?h=m<V?u:E:h=null}if(t(h).hasClass(\"fr-drag-helper\"))return!1;if(h&&!e.node.isBlock(h)&&(h=e.node.blockParent(h)),h&&[\"TD\",\"TH\",\"TR\",\"THEAD\",\"TBODY\"].indexOf(h.tagName)>=0&&(h=t(h).parents(\"table\").get(0)),h&&[\"LI\"].indexOf(h.tagName)>=0&&(h=t(h).parents(\"UL, OL\").get(0)),h&&!t(h).hasClass(\"fr-drag-helper\")){v||(t.FE.$draggable_helper||(t.FE.$draggable_helper=t('<div class=\"fr-drag-helper\"></div>')),v=t.FE.$draggable_helper,e.events.on(\"shared.destroy\",function(){v.html(\"\").removeData().remove(),v=null},!0));var o,l=b.originalEvent.pageY;l<t(h).offset().top+t(h).outerHeight()/2?o=!0:o=!1;var f=t(h),i=0;!o&&f.next().length===0?(v.data(\"fr-position\")!=\"after\"||!f.is(v.data(\"fr-tag\")))&&(i=parseFloat(f.css(\"margin-bottom\"))||0,O(f.offset().top+t(h).height()+i/2-e.$box.offset().top,f.offset().left-e.win.pageXOffset-e.$box.offset().left,f.width()),v.data(\"fr-position\",\"after\")):(o||(f=f.next()),(v.data(\"fr-position\")!=\"before\"||!f.is(v.data(\"fr-tag\")))&&(f.prev().length>0&&(i=parseFloat(f.prev().css(\"margin-bottom\"))||0),i=Math.max(i,parseFloat(f.css(\"margin-top\"))||0),O(f.offset().top-i/2-e.$box.offset().top,f.offset().left-e.win.pageXOffset-e.$box.offset().left,f.width()),v.data(\"fr-position\",\"before\"))),v.data(\"fr-tag\",f),v.addClass(\"fr-visible\"),v.appendTo(e.$box)}else v&&e.$box.find(v).length>0&&v.removeClass(\"fr-visible\")}function X(b){b.originalEvent.dataTransfer.dropEffect=\"move\",e.opts.dragInline?!_()&&(e.browser.msie||e.browser.edge)&&b.preventDefault():(b.preventDefault(),x(b))}function Y(b){b.originalEvent.dataTransfer.dropEffect=\"move\",e.opts.dragInline||b.preventDefault()}function U(b){e.$el.attr(\"contenteditable\",!0);var h=e.$el.find(\".fr-dragging\");v&&v.hasClass(\"fr-visible\")&&e.$box.find(v).length?F(b):h.length&&(b.preventDefault(),b.stopPropagation()),v&&e.$box.find(v).length&&v.removeClass(\"fr-visible\"),h.removeClass(\"fr-dragging\")}function _(){for(var b=null,h=0;h<t.FE.INSTANCES.length;h++)if(b=t.FE.INSTANCES[h].$el.find(\".fr-dragging\"),b.length)return b.get(0)}function F(b){e.$el.attr(\"contenteditable\")!==\"true\"&&e.$el.attr(\"contenteditable\",!0);for(var h,m,u=0;u<t.FE.INSTANCES.length;u++)if(h=t.FE.INSTANCES[u].$el.find(\".fr-dragging\"),h.length){m=t.FE.INSTANCES[u];break}if(h.length){if(b.preventDefault(),b.stopPropagation(),v&&v.hasClass(\"fr-visible\")&&e.$box.find(v).length)v.data(\"fr-tag\")[v.data(\"fr-position\")]('<span class=\"fr-marker\"></span>'),v.removeClass(\"fr-visible\");else{var V=e.markers.insertAtPoint(b.originalEvent);if(V===!1)return!1}if(h.removeClass(\"fr-dragging\"),h=e.events.chainTrigger(\"element.beforeDrop\",h),h===!1)return!1;var E=h;if(h.parent().is(\"A\")&&h.parent().get(0).childNodes.length==1&&(E=h.parent()),e.core.isEmpty())e.events.focus();else{var o=e.$el.find(\".fr-marker\");o.replaceWith(t.FE.MARKERS),e.selection.restore()}if(m!=e&&!e.undo.canDo()&&e.undo.saveStep(),e.core.isEmpty())e.$el.html(E);else{var l=e.markers.insert();E.find(l).length===0?t(l).replaceWith(E):h.find(l).length===0&&t(l).replaceWith(h),h.after(t.FE.MARKERS),e.selection.restore()}return e.popups.hideAll(),e.selection.save(),e.$el.find(e.html.emptyBlockTagsQuery()).not(\"TD, TH, LI, .fr-inner\").not(e.opts.htmlAllowedEmptyTags.join(\",\")).remove(),e.html.wrap(),e.html.fillEmptyBlocks(),e.selection.restore(),e.undo.saveStep(),e.opts.iframe&&e.size.syncIframe(),m!=e&&(m.popups.hideAll(),m.$el.find(m.html.emptyBlockTagsQuery()).not(\"TD, TH, LI, .fr-inner\").remove(),m.html.wrap(),m.html.fillEmptyBlocks(),m.undo.saveStep(),m.events.trigger(\"element.dropped\"),m.opts.iframe&&m.size.syncIframe()),e.events.trigger(\"element.dropped\",[E]),!1}else v&&v.removeClass(\"fr-visible\"),e.undo.canDo()||e.undo.saveStep(),setTimeout(function(){e.undo.saveStep()},0)}function d(b){if(b&&b.tagName==\"DIV\"&&e.node.hasClass(b,\"fr-drag-helper\"))b.parentNode.removeChild(b);else if(b&&b.nodeType==Node.ELEMENT_NODE)for(var h=b.querySelectorAll(\"div.fr-drag-helper\"),m=0;m<h.length;m++)h[m].parentNode.removeChild(h[m])}var v;function L(){e.opts.enter==t.FE.ENTER_BR&&(e.opts.dragInline=!0),e.events.on(\"dragstart\",n,!0),e.events.on(\"dragover\",X,!0),e.events.on(\"dragenter\",Y,!0),e.events.on(\"document.dragend\",U,!0),e.events.on(\"document.drop\",U,!0),e.events.on(\"drop\",F,!0),e.events.on(\"html.processGet\",d)}return{_init:L}}})(jQuery);(function(t){t.FE.PLUGINS.codeBeautifier=function(){var e={};(function(h){var m=/[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/,u=\"\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\",V=\"\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u0620-\\u0649\\u0672-\\u06D3\\u06E7-\\u06E8\\u06FB-\\u06FC\\u0730-\\u074A\\u0800-\\u0814\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0840-\\u0857\\u08E4-\\u08FE\\u0900-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096F\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09D7\\u09DF-\\u09E0\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A66-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5F-\\u0B60\\u0B66-\\u0B6F\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2-\\u0CE3\\u0CE6-\\u0CEF\\u0D02\\u0D03\\u0D46-\\u0D48\\u0D57\\u0D62-\\u0D63\\u0D66-\\u0D6F\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E34-\\u0E3A\\u0E40-\\u0E45\\u0E50-\\u0E59\\u0EB4-\\u0EB9\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F41-\\u0F47\\u0F71-\\u0F84\\u0F86-\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109D\\u135D-\\u135F\\u170E-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17B2\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1920-\\u192B\\u1930-\\u193B\\u1951-\\u196D\\u19B0-\\u19C0\\u19C8-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A15\\u1A20-\\u1A53\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1B46-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1BB0-\\u1BB9\\u1BE6-\\u1BF3\\u1C00-\\u1C22\\u1C40-\\u1C49\\u1C5B-\\u1C7D\\u1CD0-\\u1CD2\\u1D00-\\u1DBE\\u1E01-\\u1F15\\u200C\\u200D\\u203F\\u2040\\u2054\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2D81-\\u2D96\\u2DE0-\\u2DFF\\u3021-\\u3028\\u3099\\u309A\\uA640-\\uA66D\\uA674-\\uA67D\\uA69F\\uA6F0-\\uA6F1\\uA7F8-\\uA800\\uA806\\uA80B\\uA823-\\uA827\\uA880-\\uA881\\uA8B4-\\uA8C4\\uA8D0-\\uA8D9\\uA8F3-\\uA8F7\\uA900-\\uA909\\uA926-\\uA92D\\uA930-\\uA945\\uA980-\\uA983\\uA9B3-\\uA9C0\\uAA00-\\uAA27\\uAA40-\\uAA41\\uAA4C-\\uAA4D\\uAA50-\\uAA59\\uAA7B\\uAAE0-\\uAAE9\\uAAF2-\\uAAF3\\uABC0-\\uABE1\\uABEC\\uABED\\uABF0-\\uABF9\\uFB20-\\uFB28\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF10-\\uFF19\\uFF3F\",E=new RegExp(\"[\"+u+\"]\"),o=new RegExp(\"[\"+u+V+\"]\");h.newline=/[\\n\\r\\u2028\\u2029]/,h.lineBreak=new RegExp(`\\r\n|`+h.newline.source),h.allLineBreaks=new RegExp(h.lineBreak.source,\"g\"),h.isIdentifierStart=function(l){return l<65?l===36||l===64:l<91?!0:l<97?l===95:l<123?!0:l>=170&&E.test(String.fromCharCode(l))},h.isIdentifierChar=function(l){return l<48?l===36:l<58?!0:l<65?!1:l<91?!0:l<97?l===95:l<123?!0:l>=170&&o.test(String.fromCharCode(l))}})(e);function n(h,m){function u(R){return R.replace(/^\\s+/g,\"\")}function V(R){return R.replace(/\\s+$/g,\"\")}var E,o,l,f,i,S,s,p,M,a,y,c,k,A;m=m||{},(m.wrap_line_length===void 0||parseInt(m.wrap_line_length,10)===0)&&m.max_char!==void 0&&parseInt(m.max_char,10)!==0&&(m.wrap_line_length=m.max_char),o=m.indent_inner_html===void 0?!1:m.indent_inner_html,l=m.indent_size===void 0?4:parseInt(m.indent_size,10),f=m.indent_char===void 0?\" \":m.indent_char,S=m.brace_style===void 0?\"collapse\":m.brace_style,i=parseInt(m.wrap_line_length,10)===0?32786:parseInt(m.wrap_line_length||250,10),s=m.unformatted||[\"a\",\"span\",\"img\",\"bdo\",\"em\",\"strong\",\"dfn\",\"code\",\"samp\",\"kbd\",\"var\",\"cite\",\"abbr\",\"acronym\",\"q\",\"sub\",\"sup\",\"tt\",\"i\",\"b\",\"big\",\"small\",\"u\",\"s\",\"strike\",\"font\",\"ins\",\"del\",\"address\",\"pre\"],p=m.preserve_newlines===void 0?!0:m.preserve_newlines,M=p?isNaN(parseInt(m.max_preserve_newlines,10))?32786:parseInt(m.max_preserve_newlines,10):0,a=m.indent_handlebars===void 0?!1:m.indent_handlebars,y=m.wrap_attributes===void 0?\"auto\":m.wrap_attributes,c=m.wrap_attributes_indent_size===void 0?l:parseInt(m.wrap_attributes_indent_size,10)||l,k=m.end_with_newline===void 0?!1:m.end_with_newline,A=Array.isArray(m.extra_liners)?m.extra_liners.concat():typeof m.extra_liners==\"string\"?m.extra_liners.split(\",\"):\"head,body,/html\".split(\",\"),m.indent_with_tabs&&(f=\"\t\",l=1);function Q(){return this.pos=0,this.token=\"\",this.current_mode=\"CONTENT\",this.tags={parent:\"parent1\",parentcount:1,parent1:\"\"},this.tag_type=\"\",this.token_text=this.last_token=this.last_text=this.token_type=\"\",this.newlines=0,this.indent_content=o,this.Utils={whitespace:`\n\\r\t `.split(\"\"),single_token:\"br,input,link,meta,source,!doctype,basefont,base,area,hr,wbr,param,img,isindex,embed\".split(\",\"),extra_liners:A,in_array:function(R,$){for(var ee=0;ee<$.length;ee++)if(R==$[ee])return!0;return!1}},this.is_whitespace=function(R){for(var $=0;$<R.length;R++)if(!this.Utils.in_array(R.charAt($),this.Utils.whitespace))return!1;return!0},this.traverse_whitespace=function(){var R=\"\";if(R=this.input.charAt(this.pos),this.Utils.in_array(R,this.Utils.whitespace)){for(this.newlines=0;this.Utils.in_array(R,this.Utils.whitespace);)p&&R==`\n`&&this.newlines<=M&&(this.newlines+=1),this.pos++,R=this.input.charAt(this.pos);return!0}return!1},this.space_or_wrap=function(R){this.line_char_count>=this.wrap_line_length?(this.print_newline(!1,R),this.print_indentation(R)):(this.line_char_count++,R.push(\" \"))},this.get_content=function(){for(var R=\"\",$=[];this.input.charAt(this.pos)!=\"<\";){if(this.pos>=this.input.length)return $.length?$.join(\"\"):[\"\",\"TK_EOF\"];if(this.traverse_whitespace()){this.space_or_wrap($);continue}if(a){var ee=this.input.substr(this.pos,3);if(ee==\"{{#\"||ee==\"{{/\")break;if(ee==\"{{!\")return[this.get_tag(),\"TK_TAG_HANDLEBARS_COMMENT\"];if(this.input.substr(this.pos,2)==\"{{\"&&this.get_tag(!0)==\"{{else}}\")break}R=this.input.charAt(this.pos),this.pos++,this.line_char_count++,$.push(R)}return $.length?$.join(\"\"):\"\"},this.get_contents_to=function(R){if(this.pos==this.input.length)return[\"\",\"TK_EOF\"];var $=\"\",ee=new RegExp(\"</\"+R+\"\\\\s*>\",\"igm\");ee.lastIndex=this.pos;var ce=ee.exec(this.input),he=ce?ce.index:this.input.length;return this.pos<he&&($=this.input.substring(this.pos,he),this.pos=he),$},this.record_tag=function(R){this.tags[R+\"count\"]?(this.tags[R+\"count\"]++,this.tags[R+this.tags[R+\"count\"]]=this.indent_level):(this.tags[R+\"count\"]=1,this.tags[R+this.tags[R+\"count\"]]=this.indent_level),this.tags[R+this.tags[R+\"count\"]+\"parent\"]=this.tags.parent,this.tags.parent=R+this.tags[R+\"count\"]},this.retrieve_tag=function(R){if(this.tags[R+\"count\"]){for(var $=this.tags.parent;$&&R+this.tags[R+\"count\"]!=$;)$=this.tags[$+\"parent\"];$&&(this.indent_level=this.tags[R+this.tags[R+\"count\"]],this.tags.parent=this.tags[$+\"parent\"]),delete this.tags[R+this.tags[R+\"count\"]+\"parent\"],delete this.tags[R+this.tags[R+\"count\"]],this.tags[R+\"count\"]==1?delete this.tags[R+\"count\"]:this.tags[R+\"count\"]--}},this.indent_to_tag=function(R){if(this.tags[R+\"count\"]){for(var $=this.tags.parent;$&&R+this.tags[R+\"count\"]!=$;)$=this.tags[$+\"parent\"];$&&(this.indent_level=this.tags[R+this.tags[R+\"count\"]])}},this.get_tag=function(R){var $=\"\",ee=[],ce=\"\",he=!1,ve=!0,me,Ce,Te,xe=this.pos,Ae=this.line_char_count;R=R!==void 0?R:!1;do{if(this.pos>=this.input.length)return R&&(this.pos=xe,this.line_char_count=Ae),ee.length?ee.join(\"\"):[\"\",\"TK_EOF\"];if($=this.input.charAt(this.pos),this.pos++,this.Utils.in_array($,this.Utils.whitespace)){he=!0;continue}if(($==\"'\"||$=='\"')&&($+=this.get_unformatted($),he=!0),$==\"=\"&&(he=!1),ee.length&&ee[ee.length-1]!=\"=\"&&$!=\">\"&&he){if(this.space_or_wrap(ee),he=!1,!ve&&y==\"force\"&&$!=\"/\"){this.print_newline(!0,ee),this.print_indentation(ee);for(var Me=0;Me<c;Me++)ee.push(f)}for(var Ee=0;Ee<ee.length;Ee++)if(ee[Ee]==\" \"){ve=!1;break}}if(a&&Te==\"<\"&&$+this.input.charAt(this.pos)==\"{{\"&&($+=this.get_unformatted(\"}}\"),ee.length&&ee[ee.length-1]!=\" \"&&ee[ee.length-1]!=\"<\"&&($=\" \"+$),he=!0),$==\"<\"&&!Te&&(me=this.pos-1,Te=\"<\"),a&&!Te&&ee.length>=2&&ee[ee.length-1]==\"{\"&&ee[ee.length-2]==\"{\"&&($==\"#\"||$==\"/\"||$==\"!\"?me=this.pos-3:me=this.pos-2,Te=\"{\"),this.line_char_count++,ee.push($),ee[1]&&(ee[1]==\"!\"||ee[1]==\"?\"||ee[1]==\"%\")){ee=[this.get_comment(me)];break}if(a&&ee[1]&&ee[1]==\"{\"&&ee[2]&&ee[2]==\"!\"){ee=[this.get_comment(me)];break}if(a&&Te==\"{\"&&ee.length>2&&ee[ee.length-2]==\"}\"&&ee[ee.length-1]==\"}\")break}while($!=\">\");var Se=ee.join(\"\"),Re,Ke;Se.indexOf(\" \")!=-1?Re=Se.indexOf(\" \"):Se[0]==\"{\"?Re=Se.indexOf(\"}\"):Re=Se.indexOf(\">\"),Se[0]==\"<\"||!a?Ke=1:Ke=Se[2]==\"#\"?3:2;var Fe=Se.substring(Ke,Re).toLowerCase();return Se.charAt(Se.length-2)==\"/\"||this.Utils.in_array(Fe,this.Utils.single_token)?R||(this.tag_type=\"SINGLE\"):a&&Se[0]==\"{\"&&Fe==\"else\"?R||(this.indent_to_tag(\"if\"),this.tag_type=\"HANDLEBARS_ELSE\",this.indent_content=!0,this.traverse_whitespace()):this.is_unformatted(Fe,s)?(ce=this.get_unformatted(\"</\"+Fe+\">\",Se),ee.push(ce),Ce=this.pos-1,this.tag_type=\"SINGLE\"):Fe==\"script\"&&(Se.search(\"type\")==-1||Se.search(\"type\")>-1&&Se.search(/\\b(text|application)\\/(x-)?(javascript|ecmascript|jscript|livescript)/)>-1)?R||(this.record_tag(Fe),this.tag_type=\"SCRIPT\"):Fe==\"style\"&&(Se.search(\"type\")==-1||Se.search(\"type\")>-1&&Se.search(\"text/css\")>-1)?R||(this.record_tag(Fe),this.tag_type=\"STYLE\"):Fe.charAt(0)==\"!\"?R||(this.tag_type=\"SINGLE\",this.traverse_whitespace()):R||(Fe.charAt(0)==\"/\"?(this.retrieve_tag(Fe.substring(1)),this.tag_type=\"END\"):(this.record_tag(Fe),Fe.toLowerCase()!=\"html\"&&(this.indent_content=!0),this.tag_type=\"START\"),this.traverse_whitespace()&&this.space_or_wrap(ee),this.Utils.in_array(Fe,this.Utils.extra_liners)&&(this.print_newline(!1,this.output),this.output.length&&this.output[this.output.length-2]!=`\n`&&this.print_newline(!0,this.output))),R&&(this.pos=xe,this.line_char_count=Ae),ee.join(\"\")},this.get_comment=function(R){var $=\"\",ee=\">\",ce=!1;this.pos=R;var he=this.input.charAt(this.pos);for(this.pos++;this.pos<=this.input.length&&($+=he,!($[$.length-1]==ee[ee.length-1]&&$.indexOf(ee)!=-1));)!ce&&$.length<10&&($.indexOf(\"<![if\")===0?(ee=\"<![endif]>\",ce=!0):$.indexOf(\"<![cdata[\")===0?(ee=\"]]>\",ce=!0):$.indexOf(\"<![\")===0?(ee=\"]>\",ce=!0):$.indexOf(\"<!--\")===0?(ee=\"-->\",ce=!0):$.indexOf(\"{{!\")===0?(ee=\"}}\",ce=!0):$.indexOf(\"<?\")===0?(ee=\"?>\",ce=!0):$.indexOf(\"<%\")===0&&(ee=\"%>\",ce=!0)),he=this.input.charAt(this.pos),this.pos++;return $},this.get_unformatted=function(R,$){if($&&$.toLowerCase().indexOf(R)!=-1)return\"\";var ee=\"\",ce=\"\",he=0,ve=!0;do{if(this.pos>=this.input.length)return ce;if(ee=this.input.charAt(this.pos),this.pos++,this.Utils.in_array(ee,this.Utils.whitespace)){if(!ve){this.line_char_count--;continue}if(ee==`\n`||ee==\"\\r\"){ce+=`\n`,this.line_char_count=0;continue}}ce+=ee,this.line_char_count++,ve=!0,a&&ee==\"{\"&&ce.length&&ce[ce.length-2]==\"{\"&&(ce+=this.get_unformatted(\"}}\"),he=ce.length)}while(ce.toLowerCase().indexOf(R,he)==-1);return ce},this.get_token=function(){var R;if(this.last_token==\"TK_TAG_SCRIPT\"||this.last_token==\"TK_TAG_STYLE\"){var $=this.last_token.substr(7);return R=this.get_contents_to($),typeof R!=\"string\"?R:[R,\"TK_\"+$]}if(this.current_mode==\"CONTENT\")return R=this.get_content(),typeof R!=\"string\"?R:[R,\"TK_CONTENT\"];if(this.current_mode==\"TAG\"){if(R=this.get_tag(),typeof R!=\"string\")return R;var ee=\"TK_TAG_\"+this.tag_type;return[R,ee]}},this.get_full_indent=function(R){return R=this.indent_level+R||0,R<1?\"\":new Array(R+1).join(this.indent_string)},this.is_unformatted=function(R,$){if(!this.Utils.in_array(R,$))return!1;if(R.toLowerCase()!=\"a\"||!this.Utils.in_array(\"a\",$))return!0;var ee=this.get_tag(!0),ce=(ee||\"\").match(/^\\s*<\\s*\\/?([a-z]*)\\s*[^>]*>\\s*$/);return!!(!ce||this.Utils.in_array(ce,$))},this.printer=function(R,$,ee,ce,he){this.input=R||\"\",this.output=[],this.indent_character=$,this.indent_string=\"\",this.indent_size=ee,this.brace_style=he,this.indent_level=0,this.wrap_line_length=ce,this.line_char_count=0;for(var ve=0;ve<this.indent_size;ve++)this.indent_string+=this.indent_character;this.print_newline=function(me,Ce){this.line_char_count=0,!(!Ce||!Ce.length)&&(me||Ce[Ce.length-1]!=`\n`)&&(Ce[Ce.length-1]!=`\n`&&(Ce[Ce.length-1]=V(Ce[Ce.length-1])),Ce.push(`\n`))},this.print_indentation=function(me){for(var Ce=0;Ce<this.indent_level;Ce++)me.push(this.indent_string),this.line_char_count+=this.indent_string.length},this.print_token=function(me){this.is_whitespace(me)&&!this.output.length||((me||me!==\"\")&&this.output.length&&this.output[this.output.length-1]==`\n`&&(this.print_indentation(this.output),me=u(me)),this.print_token_raw(me))},this.print_token_raw=function(me){this.newlines>0&&(me=V(me)),me&&me!==\"\"&&(me.length>1&&me[me.length-1]==`\n`?(this.output.push(me.slice(0,-1)),this.print_newline(!1,this.output)):this.output.push(me));for(var Ce=0;Ce<this.newlines;Ce++)this.print_newline(Ce>0,this.output);this.newlines=0},this.indent=function(){this.indent_level++},this.unindent=function(){this.indent_level>0&&this.indent_level--}},this}for(E=new Q,E.printer(h,f,l,i,S);;){var z=E.get_token();if(E.token_text=z[0],E.token_type=z[1],E.token_type==\"TK_EOF\")break;switch(E.token_type){case\"TK_TAG_START\":E.print_newline(!1,E.output),E.print_token(E.token_text),E.indent_content&&(E.indent(),E.indent_content=!1),E.current_mode=\"CONTENT\";break;case\"TK_TAG_STYLE\":case\"TK_TAG_SCRIPT\":E.print_newline(!1,E.output),E.print_token(E.token_text),E.current_mode=\"CONTENT\";break;case\"TK_TAG_END\":if(E.last_token==\"TK_CONTENT\"&&E.last_text===\"\"){var w=E.token_text.match(/\\w+/)[0],C=null;E.output.length&&(C=E.output[E.output.length-1].match(/(?:<|{{#)\\/?\\s*(\\w+)/)),(C==null||C[1]!=w&&!E.Utils.in_array(C[1],s))&&E.print_newline(!1,E.output)}E.print_token(E.token_text),E.current_mode=\"CONTENT\";break;case\"TK_TAG_SINGLE\":var G=E.token_text.match(/^\\s*<([a-z-]+)/i);(!G||!E.Utils.in_array(G[1],s))&&E.print_newline(!1,E.output),E.print_token(E.token_text),E.current_mode=\"CONTENT\";break;case\"TK_TAG_HANDLEBARS_ELSE\":E.print_token(E.token_text),E.indent_content&&(E.indent(),E.indent_content=!1),E.current_mode=\"CONTENT\";break;case\"TK_TAG_HANDLEBARS_COMMENT\":E.print_token(E.token_text),E.current_mode=\"TAG\";break;case\"TK_CONTENT\":E.print_token(E.token_text),E.current_mode=\"TAG\";break;case\"TK_STYLE\":case\"TK_SCRIPT\":if(E.token_text!==\"\"){E.print_newline(!1,E.output);var W=E.token_text,N,I=1;E.token_type==\"TK_SCRIPT\"?N=typeof U==\"function\"&&U:E.token_type==\"TK_STYLE\"&&(N=typeof r==\"function\"&&r),m.indent_scripts==\"keep\"?I=0:m.indent_scripts==\"separate\"&&(I=-E.indent_level);var H=E.get_full_indent(I);if(N)W=N(W.replace(/^\\s*/,H),m);else{var J=W.match(/^\\s*/)[0],Z=J.match(/[^\\n\\r]*$/)[0].split(E.indent_string).length-1,se=E.get_full_indent(I-Z);W=W.replace(/^\\s*/,H).replace(/\\r\\n|\\r|\\n/g,`\n`+se).replace(/\\s+$/,\"\")}W&&(E.print_token_raw(W),E.print_newline(!0,E.output))}E.current_mode=\"TAG\";break;default:E.token_text!==\"\"&&E.print_token(E.token_text);break}E.last_token=E.token_type,E.last_text=E.token_text}var g=E.output.join(\"\").replace(/[\\r\\n\\t ]+$/,\"\");return k&&(g+=`\n`),g}function r(h,m){var u={\"@page\":!0,\"@font-face\":!0,\"@keyframes\":!0,\"@media\":!0,\"@supports\":!0,\"@document\":!0},V={\"@media\":!0,\"@supports\":!0,\"@document\":!0};m=m||{},h=h||\"\",h=h.replace(/\\r\\n|[\\r\\u2028\\u2029]/g,`\n`);var E=m.indent_size||4,o=m.indent_char||\" \",l=m.selector_separator_newline===void 0?!0:m.selector_separator_newline,f=m.end_with_newline===void 0?!1:m.end_with_newline,i=m.newline_between_rules===void 0?!0:m.newline_between_rules,S=m.eol?m.eol:`\n`;typeof E==\"string\"&&(E=parseInt(E,10)),m.indent_with_tabs&&(o=\"\t\",E=1),S=S.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,`\n`);var s=/^\\s+$/,p=/[\\w$\\-_]/,M=-1,a,y=0;function c(){return a=h.charAt(++M),a||\"\"}function k(Ee){var Se=\"\",Re=M;return Ee&&z(),Se=h.charAt(M+1)||\"\",M=Re-1,c(),Se}function A(Ee){for(var Se=M;c();)if(a===\"\\\\\")c();else{if(Ee.indexOf(a)!==-1)break;if(a===`\n`)break}return h.substring(Se,M+1)}function Q(Ee){var Se=M,Re=A(Ee);return M=Se-1,c(),Re}function z(){for(var Ee=\"\";s.test(k());)c(),Ee+=a;return Ee}function w(){var Ee=\"\";for(a&&s.test(a)&&(Ee=a);s.test(c());)Ee+=a;return Ee}function C(Ee){var Se=M;for(Ee=k()===\"/\",c();c();)if(!Ee&&a===\"*\"&&k()===\"/\"){c();break}else if(Ee&&a===`\n`)return h.substring(Se,M);return h.substring(Se,M)+a}function G(Ee){return h.substring(M-Ee.length,M).toLowerCase()===Ee}function W(){for(var Ee=0,Se=M+1;Se<h.length;Se++){var Re=h.charAt(Se);if(Re===\"{\")return!0;if(Re===\"(\")Ee+=1;else if(Re===\")\"){if(Ee==0)return!1;Ee-=1}else if(Re===\";\"||Re===\"}\")return!1}return!1}var N=h.match(/^[\\t ]*/)[0],I=new Array(E+1).join(o),H=0,J=0;function Z(){H++,N+=I}function se(){H--,N=N.slice(0,-E)}var g={};g[\"{\"]=function(Ee){g.singleSpace(),R.push(Ee),g.newLine()},g[\"}\"]=function(Ee){g.newLine(),R.push(Ee),g.newLine()},g._lastCharWhitespace=function(){return s.test(R[R.length-1])},g.newLine=function(Ee){R.length&&(!Ee&&R[R.length-1]!==`\n`&&g.trim(),R.push(`\n`),N&&R.push(N))},g.singleSpace=function(){R.length&&!g._lastCharWhitespace()&&R.push(\" \")},g.preserveSingleSpace=function(){Ce&&g.singleSpace()},g.trim=function(){for(;g._lastCharWhitespace();)R.pop()};for(var R=[],$=!1,ee=!1,ce=!1,he=\"\",ve=\"\";;){var me=w(),Ce=me!==\"\",Te=me.indexOf(`\n`)!==-1;if(ve=he,he=a,a)if(a===\"/\"&&k()===\"*\"){var xe=H===0;(Te||xe)&&g.newLine(),R.push(C()),g.newLine(),xe&&g.newLine(!0)}else if(a===\"/\"&&k()===\"/\")!Te&&ve!==\"{\"&&g.trim(),g.singleSpace(),R.push(C()),g.newLine();else if(a===\"@\"){g.preserveSingleSpace(),R.push(a);var Ae=Q(`: ,;{}()[]/='\"`);Ae.match(/[ :]$/)&&(c(),Ae=A(\": \").replace(/\\s$/,\"\"),R.push(Ae),g.singleSpace()),Ae=Ae.replace(/\\s$/,\"\"),Ae in u&&(J+=1,Ae in V&&(ce=!0))}else a===\"#\"&&k()===\"{\"?(g.preserveSingleSpace(),R.push(A(\"}\"))):a===\"{\"?k(!0)===\"}\"?(z(),c(),g.singleSpace(),R.push(\"{}\"),g.newLine(),i&&H===0&&g.newLine(!0)):(Z(),g[\"{\"](a),ce?(ce=!1,$=H>J):$=H>=J):a===\"}\"?(se(),g[\"}\"](a),$=!1,ee=!1,J&&J--,i&&H===0&&g.newLine(!0)):a===\":\"?(z(),($||ce)&&!(G(\"&\")||W())?(ee=!0,R.push(\":\"),g.singleSpace()):k()===\":\"?(c(),R.push(\"::\")):R.push(\":\")):a==='\"'||a===\"'\"?(g.preserveSingleSpace(),R.push(A(a))):a===\";\"?(ee=!1,R.push(a),g.newLine()):a===\"(\"?G(\"url\")?(R.push(a),z(),c()&&(a!==\")\"&&a!=='\"'&&a!==\"'\"?R.push(A(\")\")):M--)):(y++,g.preserveSingleSpace(),R.push(a),z()):a===\")\"?(R.push(a),y--):a===\",\"?(R.push(a),z(),l&&!ee&&y<1?g.newLine():g.singleSpace()):a===\"]\"?R.push(a):a===\"[\"?(g.preserveSingleSpace(),R.push(a)):a===\"=\"?(z(),a=\"=\",R.push(a)):(g.preserveSingleSpace(),R.push(a));else break}var Me=\"\";return N&&(Me+=N),Me+=R.join(\"\").replace(/[\\r\\n\\t ]+$/,\"\"),f&&(Me+=`\n`),S!=`\n`&&(Me=Me.replace(/[\\n]/g,S)),Me}function O(h,m){for(var u=0;u<m.length;u+=1)if(m[u]===h)return!0;return!1}function x(h){return h.replace(/^\\s+|\\s+$/g,\"\")}function X(h){return h.replace(/^\\s+/g,\"\")}function Y(h){return h.replace(/\\s+$/g,\"\")}function U(h,m){var u=new F(h,m);return u.beautify()}var _={BlockStatement:\"BlockStatement\",Statement:\"Statement\",ObjectLiteral:\"ObjectLiteral\",ArrayLiteral:\"ArrayLiteral\",ForInitializer:\"ForInitializer\",Conditional:\"Conditional\",Expression:\"Expression\"};function F(h,m){var u,V=[],E,o,l,f,i,S,s,p,M,a,y,c,k=\"\";y={TK_START_EXPR:me,TK_END_EXPR:Ce,TK_START_BLOCK:Te,TK_END_BLOCK:xe,TK_WORD:Ae,TK_RESERVED:Ae,TK_SEMICOLON:Me,TK_STRING:Ee,TK_EQUALS:Se,TK_OPERATOR:Ke,TK_COMMA:Re,TK_BLOCK_COMMENT:Fe,TK_COMMENT:Ue,TK_DOT:We,TK_UNKNOWN:Qe,TK_EOF:je};function A(fe,be){var _e=0;fe&&(_e=fe.indentation_level,!u.just_added_newline()&&fe.line_indent_level>_e&&(_e=fe.line_indent_level));var De={mode:be,parent:fe,last_text:fe?fe.last_text:\"\",last_word:fe?fe.last_word:\"\",declaration_statement:!1,declaration_assignment:!1,multiline_frame:!1,if_block:!1,else_block:!1,do_block:!1,do_while:!1,in_case_statement:!1,in_case:!1,case_body:!1,indentation_level:_e,line_indent_level:fe?fe.line_indent_level:_e,start_line_index:u.get_line_number(),ternary_depth:0};return De}for(m=m||{},c={},m.braces_on_own_line!==void 0&&(c.brace_style=m.braces_on_own_line?\"expand\":\"collapse\"),c.brace_style=m.brace_style?m.brace_style:c.brace_style?c.brace_style:\"collapse\",c.brace_style===\"expand-strict\"&&(c.brace_style=\"expand\"),c.indent_size=m.indent_size?parseInt(m.indent_size,10):4,c.indent_char=m.indent_char?m.indent_char:\" \",c.eol=m.eol?m.eol:`\n`,c.preserve_newlines=m.preserve_newlines===void 0?!0:m.preserve_newlines,c.break_chained_methods=m.break_chained_methods===void 0?!1:m.break_chained_methods,c.max_preserve_newlines=m.max_preserve_newlines===void 0?0:parseInt(m.max_preserve_newlines,10),c.space_in_paren=m.space_in_paren===void 0?!1:m.space_in_paren,c.space_in_empty_paren=m.space_in_empty_paren===void 0?!1:m.space_in_empty_paren,c.jslint_happy=m.jslint_happy===void 0?!1:m.jslint_happy,c.space_after_anon_function=m.space_after_anon_function===void 0?!1:m.space_after_anon_function,c.keep_array_indentation=m.keep_array_indentation===void 0?!1:m.keep_array_indentation,c.space_before_conditional=m.space_before_conditional===void 0?!0:m.space_before_conditional,c.unescape_strings=m.unescape_strings===void 0?!1:m.unescape_strings,c.wrap_line_length=m.wrap_line_length===void 0?0:parseInt(m.wrap_line_length,10),c.e4x=m.e4x===void 0?!1:m.e4x,c.end_with_newline=m.end_with_newline===void 0?!1:m.end_with_newline,c.comma_first=m.comma_first===void 0?!1:m.comma_first,c.test_output_raw=m.test_output_raw===void 0?!1:m.test_output_raw,c.jslint_happy&&(c.space_after_anon_function=!0),m.indent_with_tabs&&(c.indent_char=\"\t\",c.indent_size=1),c.eol=c.eol.replace(/\\\\r/,\"\\r\").replace(/\\\\n/,`\n`),S=\"\";c.indent_size>0;)S+=c.indent_char,c.indent_size-=1;var Q=0;if(h&&h.length){for(;h.charAt(Q)===\" \"||h.charAt(Q)===\"\t\";)k+=h.charAt(Q),Q+=1;h=h.substring(Q)}f=\"TK_START_BLOCK\",i=\"\",u=new v(S,k),u.raw=c.test_output_raw,M=[],J(_.BlockStatement),this.beautify=function(){var fe,be;for(o=new b(h,c,S),V=o.tokenize(),E=0;fe=ve();){for(var _e=0;_e<fe.comments_before.length;_e++)z(fe.comments_before[_e]);z(fe),i=s.last_text,f=fe.type,s.last_text=fe.text,E+=1}return be=u.get_code(),c.end_with_newline&&(be+=`\n`),c.eol!=`\n`&&(be=be.replace(/[\\n]/g,c.eol)),be};function z(fe){var be=fe.newlines,_e=c.keep_array_indentation&&Z(s.mode);if(_e)for(De=0;De<be;De+=1)G(De>0);else if(c.max_preserve_newlines&&be>c.max_preserve_newlines&&(be=c.max_preserve_newlines),c.preserve_newlines&&fe.newlines>1){G();for(var De=1;De<be;De+=1)G(!0)}l=fe,y[l.type]()}function w(fe){fe=fe.replace(/\\x0d/g,\"\");for(var be=[],_e=fe.indexOf(`\n`);_e!==-1;)be.push(fe.substring(0,_e)),fe=fe.substring(_e+1),_e=fe.indexOf(`\n`);return fe.length&&be.push(fe),be}function C(fe){if(fe=fe===void 0?!1:fe,!u.just_added_newline()){if(c.preserve_newlines&&l.wanted_newline||fe)G(!1,!0);else if(c.wrap_line_length){var be=u.current_line.get_character_count()+l.text.length+(u.space_before_token?1:0);be>=c.wrap_line_length&&G(!1,!0)}}}function G(fe,be){if(!be&&s.last_text!==\";\"&&s.last_text!==\",\"&&s.last_text!==\"=\"&&f!==\"TK_OPERATOR\")for(;s.mode===_.Statement&&!s.if_block&&!s.do_block;)g();u.add_new_line(fe)&&(s.multiline_frame=!0)}function W(){u.just_added_newline()&&(c.keep_array_indentation&&Z(s.mode)&&l.wanted_newline?(u.current_line.push(l.whitespace_before),u.space_before_token=!1):u.set_indent(s.indentation_level)&&(s.line_indent_level=s.indentation_level))}function N(fe){if(u.raw){u.add_raw_token(l);return}c.comma_first&&f===\"TK_COMMA\"&&u.just_added_newline()&&u.previous_line.last()===\",\"&&(u.previous_line.pop(),W(),u.add_token(\",\"),u.space_before_token=!0),fe=fe||l.text,W(),u.add_token(fe)}function I(){s.indentation_level+=1}function H(){s.indentation_level>0&&(!s.parent||s.indentation_level>s.parent.indentation_level)&&(s.indentation_level-=1)}function J(fe){s?(M.push(s),p=s):p=A(null,fe),s=A(p,fe)}function Z(fe){return fe===_.ArrayLiteral}function se(fe){return O(fe,[_.Expression,_.ForInitializer,_.Conditional])}function g(){M.length>0&&(p=s,s=M.pop(),p.mode===_.Statement&&u.remove_redundant_indentation(p))}function R(){return s.parent.mode===_.ObjectLiteral&&s.mode===_.Statement&&(s.last_text===\":\"&&s.ternary_depth===0||f===\"TK_RESERVED\"&&O(s.last_text,[\"get\",\"set\"]))}function $(){return f===\"TK_RESERVED\"&&O(s.last_text,[\"var\",\"let\",\"const\"])&&l.type===\"TK_WORD\"||f===\"TK_RESERVED\"&&s.last_text===\"do\"||f===\"TK_RESERVED\"&&s.last_text===\"return\"&&!l.wanted_newline||f===\"TK_RESERVED\"&&s.last_text===\"else\"&&!(l.type===\"TK_RESERVED\"&&l.text===\"if\")||f===\"TK_END_EXPR\"&&(p.mode===_.ForInitializer||p.mode===_.Conditional)||f===\"TK_WORD\"&&s.mode===_.BlockStatement&&!s.in_case&&!(l.text===\"--\"||l.text===\"++\")&&i!==\"function\"&&l.type!==\"TK_WORD\"&&l.type!==\"TK_RESERVED\"||s.mode===_.ObjectLiteral&&(s.last_text===\":\"&&s.ternary_depth===0||f===\"TK_RESERVED\"&&O(s.last_text,[\"get\",\"set\"]))?(J(_.Statement),I(),f===\"TK_RESERVED\"&&O(s.last_text,[\"var\",\"let\",\"const\"])&&l.type===\"TK_WORD\"&&(s.declaration_statement=!0),R()||C(l.type===\"TK_RESERVED\"&&O(l.text,[\"do\",\"for\",\"if\",\"while\"])),!0):!1}function ee(fe,be){for(var _e=0;_e<fe.length;_e++){var De=x(fe[_e]);if(De.charAt(0)!==be)return!1}return!0}function ce(fe,be){for(var _e=0,De=fe.length,Ye;_e<De;_e++)if(Ye=fe[_e],Ye&&Ye.indexOf(be)!==0)return!1;return!0}function he(fe){return O(fe,[\"case\",\"return\",\"do\",\"if\",\"throw\",\"else\"])}function ve(fe){var be=E+(fe||0);return be<0||be>=V.length?null:V[be]}function me(){$();var fe=_.Expression;if(l.text===\"[\"){if(f===\"TK_WORD\"||s.last_text===\")\"){f===\"TK_RESERVED\"&&O(s.last_text,o.line_starters)&&(u.space_before_token=!0),J(fe),N(),I(),c.space_in_paren&&(u.space_before_token=!0);return}fe=_.ArrayLiteral,Z(s.mode)&&(s.last_text===\"[\"||s.last_text===\",\"&&(i===\"]\"||i===\"}\"))&&(c.keep_array_indentation||G())}else f===\"TK_RESERVED\"&&s.last_text===\"for\"?fe=_.ForInitializer:f===\"TK_RESERVED\"&&O(s.last_text,[\"if\",\"while\"])&&(fe=_.Conditional);s.last_text===\";\"||f===\"TK_START_BLOCK\"?G():f===\"TK_END_EXPR\"||f===\"TK_START_EXPR\"||f===\"TK_END_BLOCK\"||s.last_text===\".\"?C(l.wanted_newline):!(f===\"TK_RESERVED\"&&l.text===\"(\")&&f!==\"TK_WORD\"&&f!==\"TK_OPERATOR\"?u.space_before_token=!0:f===\"TK_RESERVED\"&&(s.last_word===\"function\"||s.last_word===\"typeof\")||s.last_text===\"*\"&&i===\"function\"?c.space_after_anon_function&&(u.space_before_token=!0):f===\"TK_RESERVED\"&&(O(s.last_text,o.line_starters)||s.last_text===\"catch\")&&c.space_before_conditional&&(u.space_before_token=!0),l.text===\"(\"&&f===\"TK_RESERVED\"&&s.last_word===\"await\"&&(u.space_before_token=!0),l.text===\"(\"&&(f===\"TK_EQUALS\"||f===\"TK_OPERATOR\")&&(R()||C()),J(fe),N(),c.space_in_paren&&(u.space_before_token=!0),I()}function Ce(){for(;s.mode===_.Statement;)g();s.multiline_frame&&C(l.text===\"]\"&&Z(s.mode)&&!c.keep_array_indentation),c.space_in_paren&&(f===\"TK_START_EXPR\"&&!c.space_in_empty_paren?(u.trim(),u.space_before_token=!1):u.space_before_token=!0),l.text===\"]\"&&c.keep_array_indentation?(N(),g()):(g(),N()),u.remove_redundant_indentation(p),s.do_while&&p.mode===_.Conditional&&(p.mode=_.Expression,s.do_block=!1,s.do_while=!1)}function Te(){var fe=ve(1),be=ve(2);be&&(be.text===\":\"&&O(fe.type,[\"TK_STRING\",\"TK_WORD\",\"TK_RESERVED\"])||O(fe.text,[\"get\",\"set\"])&&O(be.type,[\"TK_WORD\",\"TK_RESERVED\"]))?O(i,[\"class\",\"interface\"])?J(_.BlockStatement):J(_.ObjectLiteral):J(_.BlockStatement);var _e=!fe.comments_before.length&&fe.text===\"}\",De=_e&&s.last_word===\"function\"&&f===\"TK_END_EXPR\";c.brace_style===\"expand\"||c.brace_style===\"none\"&&l.wanted_newline?f!==\"TK_OPERATOR\"&&(De||f===\"TK_EQUALS\"||f===\"TK_RESERVED\"&&he(s.last_text)&&s.last_text!==\"else\")?u.space_before_token=!0:G(!1,!0):f!==\"TK_OPERATOR\"&&f!==\"TK_START_EXPR\"?f===\"TK_START_BLOCK\"?G():u.space_before_token=!0:Z(p.mode)&&s.last_text===\",\"&&(i===\"}\"?u.space_before_token=!0:G()),N(),I()}function xe(){for(;s.mode===_.Statement;)g();var fe=f===\"TK_START_BLOCK\";c.brace_style===\"expand\"?fe||G():fe||(Z(s.mode)&&c.keep_array_indentation?(c.keep_array_indentation=!1,G(),c.keep_array_indentation=!0):G()),g(),N()}function Ae(){if(l.type===\"TK_RESERVED\"&&s.mode!==_.ObjectLiteral&&O(l.text,[\"set\",\"get\"])&&(l.type=\"TK_WORD\"),l.type===\"TK_RESERVED\"&&s.mode===_.ObjectLiteral){var fe=ve(1);fe.text==\":\"&&(l.type=\"TK_WORD\")}if($()||l.wanted_newline&&!se(s.mode)&&(f!==\"TK_OPERATOR\"||s.last_text===\"--\"||s.last_text===\"++\")&&f!==\"TK_EQUALS\"&&(c.preserve_newlines||!(f===\"TK_RESERVED\"&&O(s.last_text,[\"var\",\"let\",\"const\",\"set\",\"get\"])))&&G(),s.do_block&&!s.do_while)if(l.type===\"TK_RESERVED\"&&l.text===\"while\"){u.space_before_token=!0,N(),u.space_before_token=!0,s.do_while=!0;return}else G(),s.do_block=!1;if(s.if_block)if(!s.else_block&&l.type===\"TK_RESERVED\"&&l.text===\"else\")s.else_block=!0;else{for(;s.mode===_.Statement;)g();s.if_block=!1,s.else_block=!1}if(l.type===\"TK_RESERVED\"&&(l.text===\"case\"||l.text===\"default\"&&s.in_case_statement)){G(),(s.case_body||c.jslint_happy)&&(H(),s.case_body=!1),N(),s.in_case=!0,s.in_case_statement=!0;return}if(l.type===\"TK_RESERVED\"&&l.text===\"function\"&&((O(s.last_text,[\"}\",\";\"])||u.just_added_newline()&&!O(s.last_text,[\"[\",\"{\",\":\",\"=\",\",\"]))&&!u.just_added_blankline()&&!l.comments_before.length&&(G(),G(!0)),f===\"TK_RESERVED\"||f===\"TK_WORD\"?f===\"TK_RESERVED\"&&O(s.last_text,[\"get\",\"set\",\"new\",\"return\",\"export\",\"async\"])||f===\"TK_RESERVED\"&&s.last_text===\"default\"&&i===\"export\"?u.space_before_token=!0:G():f===\"TK_OPERATOR\"||s.last_text===\"=\"?u.space_before_token=!0:!s.multiline_frame&&(se(s.mode)||Z(s.mode))||G()),(f===\"TK_COMMA\"||f===\"TK_START_EXPR\"||f===\"TK_EQUALS\"||f===\"TK_OPERATOR\")&&(R()||C()),l.type===\"TK_RESERVED\"&&O(l.text,[\"function\",\"get\",\"set\"])){N(),s.last_word=l.text;return}if(a=\"NONE\",f===\"TK_END_BLOCK\"?l.type===\"TK_RESERVED\"&&O(l.text,[\"else\",\"catch\",\"finally\"])?c.brace_style===\"expand\"||c.brace_style===\"end-expand\"||c.brace_style===\"none\"&&l.wanted_newline?a=\"NEWLINE\":(a=\"SPACE\",u.space_before_token=!0):a=\"NEWLINE\":f===\"TK_SEMICOLON\"&&s.mode===_.BlockStatement?a=\"NEWLINE\":f===\"TK_SEMICOLON\"&&se(s.mode)?a=\"SPACE\":f===\"TK_STRING\"?a=\"NEWLINE\":f===\"TK_RESERVED\"||f===\"TK_WORD\"||s.last_text===\"*\"&&i===\"function\"?a=\"SPACE\":f===\"TK_START_BLOCK\"?a=\"NEWLINE\":f===\"TK_END_EXPR\"&&(u.space_before_token=!0,a=\"NEWLINE\"),l.type===\"TK_RESERVED\"&&O(l.text,o.line_starters)&&s.last_text!==\")\"&&(s.last_text===\"else\"||s.last_text===\"export\"?a=\"SPACE\":a=\"NEWLINE\"),l.type===\"TK_RESERVED\"&&O(l.text,[\"else\",\"catch\",\"finally\"]))if(f!==\"TK_END_BLOCK\"||c.brace_style===\"expand\"||c.brace_style===\"end-expand\"||c.brace_style===\"none\"&&l.wanted_newline)G();else{u.trim(!0);var be=u.current_line;be.last()!==\"}\"&&G(),u.space_before_token=!0}else a===\"NEWLINE\"?f===\"TK_RESERVED\"&&he(s.last_text)?u.space_before_token=!0:f!==\"TK_END_EXPR\"?(f!==\"TK_START_EXPR\"||!(l.type===\"TK_RESERVED\"&&O(l.text,[\"var\",\"let\",\"const\"])))&&s.last_text!==\":\"&&(l.type===\"TK_RESERVED\"&&l.text===\"if\"&&s.last_text===\"else\"?u.space_before_token=!0:G()):l.type===\"TK_RESERVED\"&&O(l.text,o.line_starters)&&s.last_text!==\")\"&&G():s.multiline_frame&&Z(s.mode)&&s.last_text===\",\"&&i===\"}\"?G():a===\"SPACE\"&&(u.space_before_token=!0);N(),s.last_word=l.text,l.type===\"TK_RESERVED\"&&l.text===\"do\"&&(s.do_block=!0),l.type===\"TK_RESERVED\"&&l.text===\"if\"&&(s.if_block=!0)}function Me(){for($()&&(u.space_before_token=!1);s.mode===_.Statement&&!s.if_block&&!s.do_block;)g();N()}function Ee(){$()||f===\"TK_RESERVED\"||f===\"TK_WORD\"?u.space_before_token=!0:f===\"TK_COMMA\"||f===\"TK_START_EXPR\"||f===\"TK_EQUALS\"||f===\"TK_OPERATOR\"?R()||C():G(),N()}function Se(){$(),s.declaration_statement&&(s.declaration_assignment=!0),u.space_before_token=!0,N(),u.space_before_token=!0}function Re(){if(s.declaration_statement){se(s.parent.mode)&&(s.declaration_assignment=!1),N(),s.declaration_assignment?(s.declaration_assignment=!1,G(!1,!0)):(u.space_before_token=!0,c.comma_first&&C());return}N(),s.mode===_.ObjectLiteral||s.mode===_.Statement&&s.parent.mode===_.ObjectLiteral?(s.mode===_.Statement&&g(),G()):(u.space_before_token=!0,c.comma_first&&C())}function Ke(){if($(),f===\"TK_RESERVED\"&&he(s.last_text)){u.space_before_token=!0,N();return}if(l.text===\"*\"&&f===\"TK_DOT\"){N();return}if(l.text===\":\"&&s.in_case){s.case_body=!0,I(),N(),G(),s.in_case=!1;return}if(l.text===\"::\"){N();return}f===\"TK_OPERATOR\"&&C();var fe=!0,be=!0;O(l.text,[\"--\",\"++\",\"!\",\"~\"])||O(l.text,[\"-\",\"+\"])&&(O(f,[\"TK_START_BLOCK\",\"TK_START_EXPR\",\"TK_EQUALS\",\"TK_OPERATOR\"])||O(s.last_text,o.line_starters)||s.last_text===\",\")?(fe=!1,be=!1,l.wanted_newline&&(l.text===\"--\"||l.text===\"++\")&&G(!1,!0),s.last_text===\";\"&&se(s.mode)&&(fe=!0),f===\"TK_RESERVED\"?fe=!0:f===\"TK_END_EXPR\"?fe=!(s.last_text===\"]\"&&(l.text===\"--\"||l.text===\"++\")):f===\"TK_OPERATOR\"&&(fe=O(l.text,[\"--\",\"-\",\"++\",\"+\"])&&O(s.last_text,[\"--\",\"-\",\"++\",\"+\"]),O(l.text,[\"+\",\"-\"])&&O(s.last_text,[\"--\",\"++\"])&&(be=!0)),(s.mode===_.BlockStatement||s.mode===_.Statement)&&(s.last_text===\"{\"||s.last_text===\";\")&&G()):l.text===\":\"?s.ternary_depth===0?fe=!1:s.ternary_depth-=1:l.text===\"?\"?s.ternary_depth+=1:l.text===\"*\"&&f===\"TK_RESERVED\"&&s.last_text===\"function\"&&(fe=!1,be=!1),u.space_before_token=u.space_before_token||fe,N(),u.space_before_token=be}function Fe(){if(u.raw){u.add_raw_token(l),l.directives&&l.directives.preserve===\"end\"&&(c.test_output_raw||(u.raw=!1));return}if(l.directives){G(!1,!0),N(),l.directives.preserve===\"start\"&&(u.raw=!0),G(!1,!0);return}if(!e.newline.test(l.text)&&!l.wanted_newline){u.space_before_token=!0,N(),u.space_before_token=!0;return}var fe=w(l.text),be,_e=!1,De=!1,Ye=l.whitespace_before,Pe=Ye.length;for(G(!1,!0),fe.length>1&&(ee(fe.slice(1),\"*\")?_e=!0:ce(fe.slice(1),Ye)&&(De=!0)),N(fe[0]),be=1;be<fe.length;be++)G(!1,!0),_e?N(\" \"+X(fe[be])):De&&fe[be].length>Pe?N(fe[be].substring(Pe)):u.add_token(fe[be]);G(!1,!0)}function Ue(){l.wanted_newline?G(!1,!0):u.trim(!0),u.space_before_token=!0,N(),G(!1,!0)}function We(){$(),f===\"TK_RESERVED\"&&he(s.last_text)?u.space_before_token=!0:C(s.last_text===\")\"&&c.break_chained_methods),N()}function Qe(){N(),l.text[l.text.length-1]===`\n`&&G()}function je(){for(;s.mode===_.Statement;)g()}}function d(h){var m=0,u=-1,V=[],E=!0;this.set_indent=function(o){m=h.baseIndentLength+o*h.indent_length,u=o},this.get_character_count=function(){return m},this.is_empty=function(){return E},this.last=function(){return this._empty?null:V[V.length-1]},this.push=function(o){V.push(o),m+=o.length,E=!1},this.pop=function(){var o=null;return E||(o=V.pop(),m-=o.length,E=V.length===0),o},this.remove_indent=function(){u>0&&(u-=1,m-=h.indent_length)},this.trim=function(){for(;this.last()===\" \";){var o=V.pop();m-=1}E=V.length===0},this.toString=function(){var o=\"\";return this._empty||(u>=0&&(o=h.indent_cache[u]),o+=V.join(\"\")),o}}function v(h,m){m=m||\"\",this.indent_cache=[m],this.baseIndentLength=m.length,this.indent_length=h.length,this.raw=!1;var u=[];this.baseIndentString=m,this.indent_string=h,this.previous_line=null,this.current_line=null,this.space_before_token=!1,this.add_outputline=function(){this.previous_line=this.current_line,this.current_line=new d(this),u.push(this.current_line)},this.add_outputline(),this.get_line_number=function(){return u.length},this.add_new_line=function(V){return this.get_line_number()===1&&this.just_added_newline()?!1:V||!this.just_added_newline()?(this.raw||this.add_outputline(),!0):!1},this.get_code=function(){var V=u.join(`\n`).replace(/[\\r\\n\\t ]+$/,\"\");return V},this.set_indent=function(V){if(u.length>1){for(;V>=this.indent_cache.length;)this.indent_cache.push(this.indent_cache[this.indent_cache.length-1]+this.indent_string);return this.current_line.set_indent(V),!0}return this.current_line.set_indent(0),!1},this.add_raw_token=function(V){for(var E=0;E<V.newlines;E++)this.add_outputline();this.current_line.push(V.whitespace_before),this.current_line.push(V.text),this.space_before_token=!1},this.add_token=function(V){this.add_space_before_token(),this.current_line.push(V)},this.add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&this.current_line.push(\" \"),this.space_before_token=!1},this.remove_redundant_indentation=function(V){if(!(V.multiline_frame||V.mode===_.ForInitializer||V.mode===_.Conditional))for(var E=V.start_line_index,o,l=u.length;E<l;)u[E].remove_indent(),E++},this.trim=function(V){for(V=V===void 0?!1:V,this.current_line.trim(h,m);V&&u.length>1&&this.current_line.is_empty();)u.pop(),this.current_line=u[u.length-1],this.current_line.trim();this.previous_line=u.length>1?u[u.length-2]:null},this.just_added_newline=function(){return this.current_line.is_empty()},this.just_added_blankline=function(){if(this.just_added_newline()){if(u.length===1)return!0;var V=u[u.length-2];return V.is_empty()}return!1}}var L=function(h,m,u,V,E,o){this.type=h,this.text=m,this.comments_before=[],this.newlines=u||0,this.wanted_newline=u>0,this.whitespace_before=V||\"\",this.parent=null,this.directives=null};function b(h,m,u){var V=`\n\\r\t `.split(\"\"),E=/[0-9]/,o=/[01234567]/,l=/[0123456789abcdefABCDEF]/,f=\"+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! ~ , : ? ^ ^= |= :: =>\".split(\" \");this.line_starters=\"continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export\".split(\",\");var i=this.line_starters.concat([\"do\",\"in\",\"else\",\"get\",\"set\",\"new\",\"catch\",\"finally\",\"typeof\",\"yield\",\"async\",\"await\"]),S=/([\\s\\S]*?)((?:\\*\\/)|$)/g,s=/([^\\n\\r\\u2028\\u2029]*)/g,p=/\\/\\* beautify( \\w+[:]\\w+)+ \\*\\//g,M=/ (\\w+)[:](\\w+)/g,a=/([\\s\\S]*?)((?:\\/\\*\\sbeautify\\signore:end\\s\\*\\/)|$)/g,y=/((<\\?php|<\\?=)[\\s\\S]*?\\?>)|(<%[\\s\\S]*?%>)/g,c,k,A,Q,z,w;this.tokenize=function(){w=h.length,z=0,A=!1,Q=[];for(var N,I,H,J=null,Z=[],se=[];!(I&&I.type===\"TK_EOF\");){for(H=G(),N=new L(H[1],H[0],c,k);N.type===\"TK_COMMENT\"||N.type===\"TK_BLOCK_COMMENT\"||N.type===\"TK_UNKNOWN\";)N.type===\"TK_BLOCK_COMMENT\"&&(N.directives=H[2]),se.push(N),H=G(),N=new L(H[1],H[0],c,k);se.length&&(N.comments_before=se,se=[]),N.type===\"TK_START_BLOCK\"||N.type===\"TK_START_EXPR\"?(N.parent=I,Z.push(J),J=N):(N.type===\"TK_END_BLOCK\"||N.type===\"TK_END_EXPR\")&&J&&(N.text===\"]\"&&J.text===\"[\"||N.text===\")\"&&J.text===\"(\"||N.text===\"}\"&&J.text===\"{\")&&(N.parent=J.parent,J=Z.pop()),Q.push(N),I=N}return Q};function C(N){if(!N.match(p))return null;var I={};M.lastIndex=0;for(var H=M.exec(N);H;)I[H[1]]=H[2],H=M.exec(N);return I}function G(){var N,I,H=[];if(c=0,k=\"\",z>=w)return[\"\",\"TK_EOF\"];var J;Q.length?J=Q[Q.length-1]:J=new L(\"TK_START_BLOCK\",\"{\");var Z=h.charAt(z);for(z+=1;O(Z,V);){if(e.newline.test(Z)?Z===`\n`&&h.charAt(z-2)===\"\\r\"||(c+=1,H=[]):H.push(Z),z>=w)return[\"\",\"TK_EOF\"];Z=h.charAt(z),z+=1}if(H.length&&(k=H.join(\"\")),E.test(Z)){var se=!0,g=!0,R=E;for(Z===\"0\"&&z<w&&/[Xxo]/.test(h.charAt(z))?(se=!1,g=!1,Z+=h.charAt(z),z+=1,R=/[o]/.test(h.charAt(z))?o:l):(Z=\"\",z-=1);z<w&&R.test(h.charAt(z));)Z+=h.charAt(z),z+=1,se&&z<w&&h.charAt(z)===\".\"&&(Z+=h.charAt(z),z+=1,se=!1),g&&z<w&&/[Ee]/.test(h.charAt(z))&&(Z+=h.charAt(z),z+=1,z<w&&/[+-]/.test(h.charAt(z))&&(Z+=h.charAt(z),z+=1),g=!1,se=!1);return[Z,\"TK_WORD\"]}if(e.isIdentifierStart(h.charCodeAt(z-1))){if(z<w)for(;e.isIdentifierChar(h.charCodeAt(z))&&(Z+=h.charAt(z),z+=1,z!==w););return!(J.type===\"TK_DOT\"||J.type===\"TK_RESERVED\"&&O(J.text,[\"set\",\"get\"]))&&O(Z,i)?Z===\"in\"?[Z,\"TK_OPERATOR\"]:[Z,\"TK_RESERVED\"]:[Z,\"TK_WORD\"]}if(Z===\"(\"||Z===\"[\")return[Z,\"TK_START_EXPR\"];if(Z===\")\"||Z===\"]\")return[Z,\"TK_END_EXPR\"];if(Z===\"{\")return[Z,\"TK_START_BLOCK\"];if(Z===\"}\")return[Z,\"TK_END_BLOCK\"];if(Z===\";\")return[Z,\"TK_SEMICOLON\"];if(Z===\"/\"){var $=\"\";if(h.charAt(z)===\"*\"){z+=1,S.lastIndex=z;var ee=S.exec(h);$=\"/*\"+ee[0],z+=ee[0].length;var ce=C($);return ce&&ce.ignore===\"start\"&&(a.lastIndex=z,ee=a.exec(h),$+=ee[0],z+=ee[0].length),$=$.replace(e.lineBreak,`\n`),[$,\"TK_BLOCK_COMMENT\",ce]}if(h.charAt(z)===\"/\"){z+=1,s.lastIndex=z;var ee=s.exec(h);return $=\"//\"+ee[0],z+=ee[0].length,[$,\"TK_COMMENT\"]}}if(Z===\"`\"||Z===\"'\"||Z==='\"'||(Z===\"/\"||m.e4x&&Z===\"<\"&&h.slice(z-1).match(/^<([-a-zA-Z:0-9_.]+|{[^{}]*}|!\\[CDATA\\[[\\s\\S]*?\\]\\])(\\s+[-a-zA-Z:0-9_.]+\\s*=\\s*('[^']*'|\"[^\"]*\"|{.*?}))*\\s*(\\/?)\\s*>/))&&(J.type===\"TK_RESERVED\"&&O(J.text,[\"return\",\"case\",\"throw\",\"else\",\"do\",\"typeof\",\"yield\"])||J.type===\"TK_END_EXPR\"&&J.text===\")\"&&J.parent&&J.parent.type===\"TK_RESERVED\"&&O(J.parent.text,[\"if\",\"while\",\"for\"])||O(J.type,[\"TK_COMMENT\",\"TK_START_EXPR\",\"TK_START_BLOCK\",\"TK_END_BLOCK\",\"TK_OPERATOR\",\"TK_EQUALS\",\"TK_EOF\",\"TK_SEMICOLON\",\"TK_COMMA\"]))){var he=Z,ve=!1,me=!1;if(I=Z,he===\"/\")for(var Ce=!1;z<w&&(ve||Ce||h.charAt(z)!==he)&&!e.newline.test(h.charAt(z));)I+=h.charAt(z),ve?ve=!1:(ve=h.charAt(z)===\"\\\\\",h.charAt(z)===\"[\"?Ce=!0:h.charAt(z)===\"]\"&&(Ce=!1)),z+=1;else if(m.e4x&&he===\"<\"){var Te=/<(\\/?)([-a-zA-Z:0-9_.]+|{[^{}]*}|!\\[CDATA\\[[\\s\\S]*?\\]\\])(\\s+[-a-zA-Z:0-9_.]+\\s*=\\s*('[^']*'|\"[^\"]*\"|{.*?}))*\\s*(\\/?)\\s*>/g,xe=h.slice(z-1),Ae=Te.exec(xe);if(Ae&&Ae.index===0){for(var Me=Ae[2],Ee=0;Ae;){var Se=!!Ae[1],Re=Ae[2],Ke=!!Ae[Ae.length-1]||Re.slice(0,8)===\"![CDATA[\";if(Re===Me&&!Ke&&(Se?--Ee:++Ee),Ee<=0)break;Ae=Te.exec(xe)}var Fe=Ae?Ae.index+Ae[0].length:xe.length;return xe=xe.slice(0,Fe),z+=Fe-1,xe=xe.replace(e.lineBreak,`\n`),[xe,\"TK_STRING\"]}}else for(;z<w&&(ve||h.charAt(z)!==he&&(he===\"`\"||!e.newline.test(h.charAt(z))));)(ve||he===\"`\")&&e.newline.test(h.charAt(z))?(h.charAt(z)===\"\\r\"&&h.charAt(z+1)===`\n`&&(z+=1),I+=`\n`):I+=h.charAt(z),ve?((h.charAt(z)===\"x\"||h.charAt(z)===\"u\")&&(me=!0),ve=!1):ve=h.charAt(z)===\"\\\\\",z+=1;if(me&&m.unescape_strings&&(I=W(I)),z<w&&h.charAt(z)===he&&(I+=he,z+=1,he===\"/\"))for(;z<w&&e.isIdentifierStart(h.charCodeAt(z));)I+=h.charAt(z),z+=1;return[I,\"TK_STRING\"]}if(Z===\"#\"){if(Q.length===0&&h.charAt(z)===\"!\"){for(I=Z;z<w&&Z!==`\n`;)Z=h.charAt(z),I+=Z,z+=1;return[x(I)+`\n`,\"TK_UNKNOWN\"]}var Ue=\"#\";if(z<w&&E.test(h.charAt(z))){do Z=h.charAt(z),Ue+=Z,z+=1;while(z<w&&Z!==\"#\"&&Z!==\"=\");return Z===\"#\"||(h.charAt(z)===\"[\"&&h.charAt(z+1)===\"]\"?(Ue+=\"[]\",z+=2):h.charAt(z)===\"{\"&&h.charAt(z+1)===\"}\"&&(Ue+=\"{}\",z+=2)),[Ue,\"TK_WORD\"]}}if(Z===\"<\"&&(h.charAt(z)===\"?\"||h.charAt(z)===\"%\")){y.lastIndex=z-1;var We=y.exec(h);if(We)return Z=We[0],z+=Z.length-1,Z=Z.replace(e.lineBreak,`\n`),[Z,\"TK_STRING\"]}if(Z===\"<\"&&h.substring(z-1,z+3)===\"<!--\"){for(z+=3,Z=\"<!--\";!e.newline.test(h.charAt(z))&&z<w;)Z+=h.charAt(z),z++;return A=!0,[Z,\"TK_COMMENT\"]}if(Z===\"-\"&&A&&h.substring(z-1,z+2)===\"-->\")return A=!1,z+=2,[\"-->\",\"TK_COMMENT\"];if(Z===\".\")return[Z,\"TK_DOT\"];if(O(Z,f)){for(;z<w&&O(Z+h.charAt(z),f)&&(Z+=h.charAt(z),z+=1,!(z>=w)););return Z===\",\"?[Z,\"TK_COMMA\"]:Z===\"=\"?[Z,\"TK_EQUALS\"]:[Z,\"TK_OPERATOR\"]}return[Z,\"TK_UNKNOWN\"]}function W(N){for(var I=!1,H=\"\",J=0,Z=\"\",se=0,g;I||J<N.length;)if(g=N.charAt(J),J++,I){if(I=!1,g===\"x\")Z=N.substr(J,2),J+=2;else if(g===\"u\")Z=N.substr(J,4),J+=4;else{H+=\"\\\\\"+g;continue}if(!Z.match(/^[0123456789abcdefABCDEF]+$/))return N;if(se=parseInt(Z,16),se>=0&&se<32){g===\"x\"?H+=\"\\\\x\"+Z:H+=\"\\\\u\"+Z;continue}else if(se===34||se===39||se===92)H+=\"\\\\\"+String.fromCharCode(se);else{if(g===\"x\"&&se>126&&se<=255)return N;H+=String.fromCharCode(se)}}else g===\"\\\\\"?I=!0:H+=g;return H}}return{run:n}}})(jQuery);(function(t){if(t.FroalaEditor.PLUGINS.mediaManager=function(e){function n(){e.selection.save(),new t.oc.mediaManager.popup({alias:\"ocmediamanager\",cropAndInsertButton:!1,onInsert:function(F){if(e.events.focus(!0),e.selection.restore(),!F.length){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_file_empty_insert\"));return}if(F.length>1){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_file_single_insert\"));return}for(var d,v=e.selection.text(),L=v.trim()===\"\",b=0,h=F.length;b<h;b++){var v=L?F[b].title:v;d=F[b].publicUrl}e.html.insert('<a href=\"'+d+'\" id=\"fr-inserted-file\" class=\"fr-file\">'+v+\"</a>\");var m=e.$el.find(\"#fr-inserted-file\");m.removeAttr(\"id\"),this.hide(),e.undo.saveStep()}})}function r(){e.selection.save();var F=e.image.get();new t.oc.mediaManager.popup({alias:\"ocmediamanager\",cropAndInsertButton:!0,onInsert:function(d){if(e.events.focus(!0),e.selection.restore(),!d.length){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_image_empty_insert\"));return}d=d.reverse();for(var v=0,L=0,b=d.length;L<b;L++){if(d[L].documentType!==\"image\"){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_image_invalid_insert\",'The file \"'+d[L].title+'\" is not an image.'));continue}e.image.insert(d[L].publicUrl,!1,{},F),v++,v==1&&(F=null)}v!==0&&(this.hide(),e.undo.saveStep())}})}function O(F){e.selection.save(),new t.oc.mediaManager.popup({alias:\"ocmediamanager\",cropAndInsertButton:!1,onInsert:function(d){if(e.events.focus(!0),e.selection.restore(),!d.length){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_video_empty_insert\"));return}if(d.length>1){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_file_single_insert\"));return}var v=d[0];if(v.documentType!==\"video\"){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_video_invalid_insert\",'The file \"'+v.title+'\" is not a video.'));return}if(F)F(v.publicUrl,v.title);else{var L=e.$el.closest('[data-control=\"richeditor\"]');L.richEditor(\"insertVideo\",v.publicUrl,v.title)}this.hide()}})}function x(F){e.selection.save(),new t.oc.mediaManager.popup({alias:\"ocmediamanager\",cropAndInsertButton:!1,onInsert:function(d){if(e.events.focus(!0),e.selection.restore(),!d.length){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_audio_empty_insert\"));return}if(d.length>1){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_file_single_insert\"));return}var v=d[0];if(v.documentType!==\"audio\"){t.oc.alert(t.oc.lang.get(\"mediamanager.invalid_audio_invalid_insert\",'The file \"'+v.title+'\" is not an audio file.'));return}if(F)F(v.publicUrl,v.title);else{var L=e.$el.closest('[data-control=\"richeditor\"]');L.richEditor(\"insertAudio\",v.publicUrl,v.title)}this.hide()}})}function X(F){var d=e.$el.closest('[data-control=\"richeditor\"]'),v=F.substring(F.lastIndexOf(\"/\")+1);d.richEditor(\"insertVideo\",F,v),e.popups.hide(\"video.insert\")}function Y(F){var d=e.$el.closest('[data-control=\"richeditor\"]'),v=F.substring(F.lastIndexOf(\"/\")+1);d.richEditor(\"insertAudio\",F,v),e.popups.hide(\"audio.insert\")}function U(){e.events.on(\"destroy\",_,!0),e.events.on(\"video.linkError\",X),e.events.on(\"audio.linkError\",Y)}function _(){}return{_init:U,insertFile:n,insertImage:r,insertVideo:O,insertAudio:x}},!t.FE.PLUGINS.link||!t.FE.PLUGINS.file||!t.FE.PLUGINS.image||!t.FE.PLUGINS.video)throw new Error(\"Media manager plugin requires link, file, image and video plugin.\");t.FE.DEFAULTS.imageInsertButtons.push(\"mmImageManager\"),t.FE.RegisterCommand(\"mmImageManager\",{title:\"Browse\",undo:!1,focus:!1,callback:function(){this.mediaManager.insertImage()},plugin:\"mediaManager\"}),t.FE.DefineIcon(\"mmImageManager\",{NAME:\"folder-o\"}),t.FE.DEFAULTS.fileInsertButtons.push(\"mmFileManager\"),t.FE.RegisterCommand(\"mmFileManager\",{title:\"Browse\",undo:!1,focus:!1,callback:function(){this.mediaManager.insertFile()},plugin:\"mediaManager\"}),t.FE.DefineIcon(\"mmFileManager\",{NAME:\"folder-o\"}),t.FE.DEFAULTS.videoInsertButtons.push(\"mmVideoManager\"),t.FE.RegisterCommand(\"mmVideoManager\",{title:\"Browse\",undo:!1,focus:!1,callback:function(){this.mediaManager.insertVideo()},plugin:\"mediaManager\"}),t.FE.DefineIcon(\"mmVideoManager\",{NAME:\"folder-o\"}),t.FE.DEFAULTS.audioInsertButtons.push(\"mmAudioManager\"),t.FE.RegisterCommand(\"mmAudioManager\",{title:\"Browse\",undo:!1,focus:!1,callback:function(){this.mediaManager.insertAudio()},plugin:\"mediaManager\"}),t.FE.DefineIcon(\"mmAudioManager\",{NAME:\"folder-o\"})})(jQuery);(function(t){t.FroalaEditor.PLUGINS.pageLinks=function(e){var n;function r(){return t('input.fr-link-attr[name=\"href\"]',e.popups.get(\"link.insert\")).val()}function O(){return t('input.fr-link-attr[name=\"text\"]',e.popups.get(\"link.insert\")).val()}function x(_){e.image&&n&&e.image.set(n),e.link.insert(_.link,O()||_.params.title)}function X(){e.selection.save()}function Y(){n=e.image?e.image.get():null,oc.pageLookup.popup({alias:\"ocpagelookup\",value:r(),onInsert:x,onShown:X,singleMode:!0})}function U(){}return{_init:U,insertLink:Y}},t.FE.DefineIcon(\"linkPageRoute\",{NAME:\"folder-o\"}),t.FE.RegisterCommand(\"linkPageRoute\",{title:\"Choose Link\",undo:!1,focus:!1,callback:function(){this.pageLinks.insertLink()},plugin:\"pageLinks\"}),t.FE.DefineIcon(\"insertPageLink\",{NAME:\"link\"}),t.FE.RegisterShortcut(t.FE.KEYCODE.K,\"insertPageLink\",null,\"K\"),t.FE.RegisterCommand(\"insertPageLink\",{title:\"Insert Link\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible(\"link.insert\")?(this.$el.find(\".fr-marker\").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide(\"link.insert\")):this.link.showInsertPopup()},plugin:\"link\"}),t.FE.RegisterInsertPageLinkCommand=function(){t.FE.DEFAULTS.linkInsertButtons=[\"linkBack\",\"|\",\"linkPageRoute\"],t.FE.RegisterCommand(\"insertPageLink\",{title:\"Insert Link\",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.link.showInsertPopup(),this.popups.hide(\"link.insert\"),this.pageLinks.insertLink()},plugin:\"pageLinks\"})},oc.pageLookup&&t.FE.RegisterInsertPageLinkCommand()})(jQuery);(function(t){t.FroalaEditor.PLUGINS.figures=function(e){function n(u){var V=t(\"<div />\").append(u.clone()).remove().html();e.events.focus(!0),e.selection.restore(),e.html.insert(V),e.html.cleanEmptyTags(),t(\"figure\",e.$el).each(function(){var E=t(this),o=E.parent(\"p\"),l=E.next(\"p\");o.length&&E.insertAfter(o),l.length&&!t(\"> *:not(br)\",l).length&&l.text().trim().length==0&&l.remove()}),e.undo.saveStep(),X()}function r(){var u=t('<figure contenteditable=\"false\" tabindex=\"0\" data-ui-block=\"true\">&nbsp;</figure>');return u.get(0).contentEditable=!1,u}function O(u,V){var E=r();E.attr(\"data-video\",u),E.attr(\"data-label\",V),n(E)}function x(u,V){var E=r();E.attr(\"data-audio\",u),E.attr(\"data-label\",V),n(E)}function X(){t(\"[data-video], [data-audio]\",e.$el).each(function(){t(this).addClass(\"fr-draggable\").attr({\"data-ui-block\":\"true\",draggable:\"true\",tabindex:\"0\"}).html(\"&nbsp;\"),this.contentEditable=!1})}function Y(u){if(u.key===\"ArrowDown\"||u.key===\"ArrowUp\"||u.key===\"Backspace\"||u.key===\"Delete\"){var V=t(e.selection.element());if(V.is(\"br\")&&(V=V.parent()),V.length)switch(u.key){case\"ArrowUp\":_(V.prev());break;case\"ArrowDown\":_(V.next());break;case\"Delete\":U(V.next(),V);break;case\"Backspace\":U(V.prev(),V);break}}}function U(u,V){u.attr(\"data-ui-block\")!==void 0&&V.text().trim().length==0&&(V.remove(),_(u),e.undo.saveStep())}function _(u){return u.attr(\"data-ui-block\")!==void 0?(u.focus(),e.selection.clear(),!0):!1}function F(u,V){if(u.key===\"ArrowDown\"||u.key===\"ArrowUp\"||u.key===\"Enter\"||u.key===\"Backspace\"||u.key===\"Delete\"){switch(u.key){case\"ArrowDown\":d(t(V).next(),!0);break;case\"ArrowUp\":d(t(V).prev(),!1);break;case\"Enter\":var E=t(\"<p><br/></p>\");E.insertAfter(V),e.selection.setAfter(V),e.selection.restore(),e.undo.saveStep();break;case\"Backspace\":case\"Delete\":var o=t(V).next(),l=!0;o.length==0&&(o=t(V).prev(),l=!1),d(o,l),t(V).remove(),e.undo.saveStep();break}u.preventDefault()}}function d(u,V){u.length&&(_(u)||(V?(e.selection.setAtStart(u.get(0)),e.selection.restore()):(e.selection.setAtEnd(u.get(0)),e.selection.restore())))}function v(u){if(Y(u),u.isDefaultPrevented())return!1}function L(u){if(u.target&&t(u.target).attr(\"data-ui-block\")!==void 0&&F(u,u.target),u.isDefaultPrevented())return!1}function b(u){var V=t(\"<div>\"+u+\"</div>\");return V.find(\"[data-video], [data-audio]\").each(function(){t(this).removeAttr(\"contenteditable data-ui-block tabindex draggable\").removeClass(\"fr-draggable fr-dragging\")}),V.html()}function h(){e.events.on(\"initialized\",X),e.events.on(\"html.set\",X),e.events.on(\"html.get\",b),e.events.on(\"keydown\",v),e.events.on(\"destroy\",m,!0),e.$el.on(\"keydown\",\"figure\",L)}function m(){e.$el.off(\"keydown\",\"figure\",L)}return{_init:h,insert:n,insertVideo:O,insertAudio:x}}})(jQuery);(function(t){if(t.FroalaEditor.PLUGINS.snippets=function(e){function n(){if(!oc.snippetLookup){console.error(\"Unable to insert snippet: Missing snippet lookup widget\");return}e.selection.save(),oc.snippetLookup.popup({onInsert:function(F){e.events.focus(!0),e.selection.restore();var d=t(oc.snippetLookup.generateSnippetHtml(F));d.attr(\"data-control\",\"snippet\"),e.figures.insert(d),this.hide()}})}function r(F){setTimeout(function(){e.events.trigger(\"contentChanged\"),F.target.focus()},0)}function O(F){F.target&&F.which==32&&t(F.target).attr(\"data-snippet\")!==void 0&&t.oc.inspector.manager.createInspector(F.target)}function x(){setTimeout(function(){e.codeView&&e.codeView.isActive()||t(\"[data-snippet]\",e.$el).each(function(){var F=t(this);F.get(0).dataset.control=\"snippet\",F.html(\"&nbsp;\")})},0)}function X(F){if(!F.includes(\"figure\")||!F.includes(\"data-inspector-handler-alias\"))return F;var d=t(\"<div>\"+F+\"</div>\");return t(\"[data-snippet]\",d).each(function(){var v=t(this);oc.importControl(\"snippet\").cleanSnippet(v.get(0)),v.removeAttr(\"contenteditable data-control tabindex data-ui-block draggable\"),v.removeClass(\"fr-draggable fr-dragging\"),v.attr(\"class\")||v.removeAttr(\"class\")}),d.html()}function Y(F){if(F.attr(\"data-snippet\")!==void 0){var d=F.parent(\"p\");d.length&&(F.insertAfter(d),!t(\"> *:not(br)\",d).length&&d.text().trim().length==0&&d.remove())}}function U(){e.events.on(\"html.set\",x),e.events.on(\"html.get\",X),e.events.on(\"keydown\",O),e.events.on(\"element.dropped\",Y),e.$el.on(\"hidden.oc.inspector\",\"[data-snippet]\",r),e.events.on(\"destroy\",_,!0)}function _(){e.$el.off(\"hidden.oc.inspector\",\"[data-snippet]\",r)}return{_init:U,insertSnippet:n}},t.FE.DefineIcon(\"insertSnippet\",{NAME:\"newspaper-o\"}),!t.FE.PLUGINS.figures)throw new Error(\"Snippets plugin requires figures plugin.\");t.FE.RegisterInsertSnippetCommand=function(){t.FE.RegisterCommand(\"insertSnippet\",{title:\"Insert Snippet\",undo:!1,focus:!1,callback:function(){this.snippets.insertSnippet()},plugin:\"snippets\"})},oc.snippetLookup&&t.FE.RegisterInsertSnippetCommand()})(jQuery);})();\n/*!\n * The following is a modified version of Froala Editor v2.9 for use in October CMS.\n * This work is protected by the main EULA license for October CMS.\n * https://octobercms.com/eula\n *\n * Froala Editor for October CMS\n * Copyright 2021-2023 Responsiv Pty Ltd\n *\n * Original source: froala_editor v2.9.3\n * Copyright 2014-2019 Froala Labs\n * OEM License: Responsiv Pty Ltd (19th May 2016)\n */\n/*!\n * Froala Editor for October CMS\n * License https://octobercms.com/eula\n * Copyright 2014-2016 Froala Labs\n * Copyright 2021-2023 Responsiv Pty Ltd\n */\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/ar.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Arabic\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['ar'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u0627\\u0643\\u062a\\u0628 \\u0634\\u064a\\u0626\\u0627\",\n\n    // Basic formatting\n    \"Bold\": \"\\u063a\\u0627\\u0645\\u0642\",\n    \"Italic\": \"\\u0645\\u0627\\u0626\\u0644\",\n    \"Underline\": \"\\u062a\\u0633\\u0637\\u064a\\u0631\",\n    \"Strikethrough\": \"\\u064a\\u062a\\u0648\\u0633\\u0637 \\u062e\\u0637\",\n\n    // Main buttons\n    \"Insert\": \"\\u0625\\u062f\\u0631\\u0627\\u062c\",\n    \"Delete\": \"\\u062d\\u0630\\u0641\",\n    \"Cancel\": \"\\u0625\\u0644\\u063a\\u0627\\u0621\",\n    \"OK\": \"\\u0645\\u0648\\u0627\\u0641\\u0642\",\n    \"Back\": \"\\u0638\\u0647\\u0631\",\n    \"Remove\": \"\\u0625\\u0632\\u0627\\u0644\\u0629\",\n    \"More\": \"\\u0623\\u0643\\u062b\\u0631\",\n    \"Update\": \"\\u0627\\u0644\\u062a\\u062d\\u062f\\u064a\\u062b\",\n    \"Style\": \"\\u0623\\u0633\\u0644\\u0648\\u0628\",\n\n    // Font\n    \"Font Family\": \"\\u0639\\u0627\\u0626\\u0644\\u0629 \\u0627\\u0644\\u062e\\u0637\",\n    \"Font Size\": \"\\u062d\\u062c\\u0645 \\u0627\\u0644\\u062e\\u0637\",\n\n    // Colors\n    \"Colors\": \"\\u0627\\u0644\\u0623\\u0644\\u0648\\u0627\\u0646\",\n    \"Background\": \"\\u0627\\u0644\\u062e\\u0644\\u0641\\u064a\\u0629\",\n    \"Text\": \"\\u0627\\u0644\\u0646\\u0635\",\n    \"HEX Color\": \"عرافة اللون\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u062a\\u0646\\u0633\\u064a\\u0642 \\u0627\\u0644\\u0641\\u0642\\u0631\\u0629\",\n    \"Normal\": \"\\u0637\\u0628\\u064a\\u0639\\u064a\",\n    \"Code\": \"\\u0643\\u0648\\u062f\",\n    \"Heading 1\": \"\\u0627\\u0644\\u0639\\u0646\\u0627\\u0648\\u064a\\u0646 1\",\n    \"Heading 2\": \"\\u0627\\u0644\\u0639\\u0646\\u0627\\u0648\\u064a\\u0646 2\",\n    \"Heading 3\": \"\\u0627\\u0644\\u0639\\u0646\\u0627\\u0648\\u064a\\u0646 3\",\n    \"Heading 4\": \"\\u0627\\u0644\\u0639\\u0646\\u0627\\u0648\\u064a\\u0646 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u0646\\u0645\\u0637 \\u0627\\u0644\\u0641\\u0642\\u0631\\u0629\",\n    \"Inline Style\": \"\\u0627\\u0644\\u0646\\u0645\\u0637 \\u0627\\u0644\\u0645\\u0636\\u0645\\u0646\",\n\n    // Alignment\n    \"Align\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629\",\n    \"Align Left\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0627\\u0644\\u0646\\u0635 \\u0644\\u0644\\u064a\\u0633\\u0627\\u0631\",\n    \"Align Center\": \"\\u062a\\u0648\\u0633\\u064a\\u0637\",\n    \"Align Right\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0627\\u0644\\u0646\\u0635 \\u0644\\u0644\\u064a\\u0645\\u064a\\u0646\",\n    \"Align Justify\": \"\\u0636\\u0628\\u0637\",\n    \"None\": \"\\u0644\\u0627 \\u0634\\u064a\\u0621\",\n\n    // Lists\n    \"Ordered List\": \"\\u0642\\u0627\\u0626\\u0645\\u0629 \\u0645\\u0631\\u062a\\u0628\\u0629\",\n    \"Default\": \"الافتراضي\",\n    \"Lower Alpha\": \"أقل ألفا\",\n    \"Lower Greek\": \"أقل اليونانية\",\n    \"Lower Roman\": \"انخفاض الروماني\",\n    \"Upper Alpha\": \"العلوي ألفا\",\n    \"Upper Roman\": \"الروماني العلوي\",\n\n    \"Unordered List\": \"\\u0642\\u0627\\u0626\\u0645\\u0629 \\u063a\\u064a\\u0631 \\u0645\\u0631\\u062a\\u0628\\u0629\",\n    \"Circle\": \"دائرة\",\n    \"Disc\": \"القرص\",\n    \"Square\": \"ميدان\",\n\n    // Line height\n    \"Line Height\": \"ارتفاع خط\",\n    \"Single\": \"غير مرتبطة\",\n    \"Double\": \"مزدوج\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u0627\\u0646\\u062e\\u0641\\u0627\\u0636 \\u0627\\u0644\\u0645\\u0633\\u0627\\u0641\\u0629 \\u0627\\u0644\\u0628\\u0627\\u062f\\u0626\\u0629\",\n    \"Increase Indent\": \"\\u0632\\u064a\\u0627\\u062f\\u0629 \\u0627\\u0644\\u0645\\u0633\\u0627\\u0641\\u0629 \\u0627\\u0644\\u0628\\u0627\\u062f\\u0626\\u0629\",\n\n    // Links\n    \"Insert Link\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0631\\u0627\\u0628\\u0637\",\n    \"Open in new tab\": \"\\u0641\\u062a\\u062d \\u0641\\u064a \\u0639\\u0644\\u0627\\u0645\\u0629 \\u062a\\u0628\\u0648\\u064a\\u0628 \\u062c\\u062f\\u064a\\u062f\\u0629\",\n    \"Open Link\": \"\\u0627\\u0641\\u062a\\u062d \\u0627\\u0644\\u0631\\u0627\\u0628\\u0637\",\n    \"Edit Link\": \"\\u0627\\u0631\\u062a\\u0628\\u0627\\u0637 \\u062a\\u062d\\u0631\\u064a\\u0631\",\n    \"Unlink\": \"\\u062d\\u0630\\u0641 \\u0627\\u0644\\u0631\\u0627\\u0628\\u0637\",\n    \"Choose Link\": \"\\u0627\\u062e\\u062a\\u064a\\u0627\\u0631 \\u0635\\u0644\\u0629\",\n\n    // Images\n    \"Insert Image\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0648\\u0631\\u0629\",\n    \"Upload Image\": \"\\u062a\\u062d\\u0645\\u064a\\u0644 \\u0635\\u0648\\u0631\\u0629\",\n    \"By URL\": \"\\u0628\\u0648\\u0627\\u0633\\u0637\\u0629 URL\",\n    \"Browse\": \"\\u062a\\u0635\\u0641\\u062d\",\n    \"Drop image\": \"\\u0625\\u0633\\u0642\\u0627\\u0637 \\u0635\\u0648\\u0631\\u0629\",\n    \"or click\": \"\\u0623\\u0648 \\u0627\\u0646\\u0642\\u0631 \\u0641\\u0648\\u0642\",\n    \"Manage Images\": \"\\u0625\\u062f\\u0627\\u0631\\u0629 \\u0627\\u0644\\u0635\\u0648\\u0631\",\n    \"Loading\": \"\\u062a\\u062d\\u0645\\u064a\\u0644\",\n    \"Deleting\": \"\\u062d\\u0630\\u0641\",\n    \"Tags\": \"\\u0627\\u0644\\u0643\\u0644\\u0645\\u0627\\u062a\",\n    \"Are you sure? Image will be deleted.\": \"\\u0647\\u0644 \\u0623\\u0646\\u062a \\u0645\\u062a\\u0623\\u0643\\u062f\\u061f \\u0633\\u064a\\u062a\\u0645 \\u062d\\u0630\\u0641 \\u0627\\u0644\\u0635\\u0648\\u0631\\u0629\\u002e\",\n    \"Replace\": \"\\u0627\\u0633\\u062a\\u0628\\u062f\\u0627\\u0644\",\n    \"Uploading\": \"\\u062a\\u062d\\u0645\\u064a\\u0644\",\n    \"Loading image\": \"\\u0635\\u0648\\u0631\\u0629 \\u062a\\u062d\\u0645\\u064a\\u0644\",\n    \"Display\": \"\\u0639\\u0631\\u0636\",\n    \"Inline\": \"\\u0641\\u064a \\u062e\\u0637\",\n    \"Break Text\": \"\\u0646\\u0635 \\u0627\\u0633\\u062a\\u0631\\u0627\\u062d\\u0629\",\n    \"Alternative Text\": \"\\u0646\\u0635 \\u0628\\u062f\\u064a\\u0644\",\n    \"Change Size\": \"\\u062a\\u063a\\u064a\\u064a\\u0631 \\u062d\\u062c\\u0645\",\n    \"Width\": \"\\u0639\\u0631\\u0636\",\n    \"Height\": \"\\u0627\\u0631\\u062a\\u0641\\u0627\\u0639\",\n    \"Something went wrong. Please try again.\": \".\\u062d\\u062f\\u062b \\u062e\\u0637\\u0623 \\u0645\\u0627. \\u062d\\u0627\\u0648\\u0644 \\u0645\\u0631\\u0629 \\u0627\\u062e\\u0631\\u0649\",\n    \"Image Caption\": \"تعليق على الصورة\",\n    \"Advanced Edit\": \"تعديل متقدم\",\n\n    // Video\n    \"Insert Video\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0641\\u064a\\u062f\\u064a\\u0648\",\n    \"Embedded Code\": \"\\u0627\\u0644\\u062a\\u0639\\u0644\\u064a\\u0645\\u0627\\u062a \\u0627\\u0644\\u0628\\u0631\\u0645\\u062c\\u064a\\u0629 \\u0627\\u0644\\u0645\\u0636\\u0645\\u0646\\u0629\",\n    \"Paste in a video URL\": \"لصق في عنوان ورل للفيديو\",\n    \"Drop video\": \"انخفاض الفيديو\",\n    \"Your browser does not support HTML5 video.\": \"متصفحك لا يدعم فيديو HTML5.\",\n    \"Upload Video\": \"رفع فيديو\",\n\n    // Tables\n    \"Insert Table\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u062c\\u062f\\u0648\\u0644\",\n    \"Table Header\": \"\\u0631\\u0623\\u0633 \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644\",\n    \"Remove Table\": \"\\u0625\\u0632\\u0627\\u0644\\u0629 \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644\",\n    \"Table Style\": \"\\u0646\\u0645\\u0637 \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644\",\n    \"Horizontal Align\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0623\\u0641\\u0642\\u064a\\u0629\",\n    \"Row\": \"\\u0635\\u0641\",\n    \"Insert row above\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0641 \\u0644\\u0644\\u0623\\u0639\\u0644\\u0649\",\n    \"Insert row below\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0641 \\u0644\\u0644\\u0623\\u0633\\u0641\\u0644\",\n    \"Delete row\": \"\\u062d\\u0630\\u0641 \\u0635\\u0641\",\n    \"Column\": \"\\u0639\\u0645\\u0648\\u062f\",\n    \"Insert column before\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0639\\u0645\\u0648\\u062f \\u0644\\u0644\\u064a\\u0633\\u0627\\u0631\",\n    \"Insert column after\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0639\\u0645\\u0648\\u062f \\u0644\\u0644\\u064a\\u0645\\u064a\\u0646\",\n    \"Delete column\": \"\\u062d\\u0630\\u0641 \\u0639\\u0645\\u0648\\u062f\",\n    \"Cell\": \"\\u062e\\u0644\\u064a\\u0629\",\n    \"Merge cells\": \"\\u062f\\u0645\\u062c \\u062e\\u0644\\u0627\\u064a\\u0627\",\n    \"Horizontal split\": \"\\u0627\\u0646\\u0642\\u0633\\u0627\\u0645 \\u0623\\u0641\\u0642\\u064a\",\n    \"Vertical split\": \"\\u0627\\u0644\\u0627\\u0646\\u0642\\u0633\\u0627\\u0645 \\u0627\\u0644\\u0639\\u0645\\u0648\\u062f\\u064a\",\n    \"Cell Background\": \"\\u062e\\u0644\\u0641\\u064a\\u0629 \\u0627\\u0644\\u062e\\u0644\\u064a\\u0629\",\n    \"Vertical Align\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0639\\u0645\\u0648\\u062f\\u064a\\u0629\",\n    \"Top\": \"\\u0623\\u0639\\u0644\\u0649\",\n    \"Middle\": \"\\u0648\\u0633\\u0637\",\n    \"Bottom\": \"\\u0623\\u0633\\u0641\\u0644\",\n    \"Align Top\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0623\\u0639\\u0644\\u0649\",\n    \"Align Middle\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0648\\u0633\\u0637\",\n    \"Align Bottom\": \"\\u0645\\u062d\\u0627\\u0630\\u0627\\u0629 \\u0627\\u0644\\u0623\\u0633\\u0641\\u0644\",\n    \"Cell Style\": \"\\u0646\\u0645\\u0637 \\u0627\\u0644\\u062e\\u0644\\u064a\\u0629\",\n\n    // Files\n    \"Upload File\": \"\\u062a\\u062d\\u0645\\u064a\\u0644 \\u0627\\u0644\\u0645\\u0644\\u0641\",\n    \"Drop file\": \"\\u0627\\u0646\\u062e\\u0641\\u0627\\u0636 \\u0627\\u0644\\u0645\\u0644\\u0641\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0627\\u0644\\u0645\\u0634\\u0627\\u0639\\u0631\",\n    \"Grinning face\": \"\\u064a\\u0643\\u0634\\u0631 \\u0648\\u062c\\u0647\\u0647\",\n    \"Grinning face with smiling eyes\": \"\\u0645\\u0628\\u062a\\u0633\\u0645\\u0627 \\u0648\\u062c\\u0647 \\u0645\\u0639 \\u064a\\u0628\\u062a\\u0633\\u0645 \\u0627\\u0644\\u0639\\u064a\\u0646\",\n    \"Face with tears of joy\": \"\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u062f\\u0645\\u0648\\u0639 \\u0627\\u0644\\u0641\\u0631\\u062d\",\n    \"Smiling face with open mouth\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645 \\u0648\\u0627\\u0644\\u0639\\u064a\\u0646\\u064a\\u0646 \\u064a\\u0628\\u062a\\u0633\\u0645\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645 \\u0648\\u0627\\u0644\\u0639\\u0631\\u0642 \\u0627\\u0644\\u0628\\u0627\\u0631\\u062f\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645 \\u0648\\u0627\\u0644\\u0639\\u064a\\u0646\\u064a\\u0646 \\u0645\\u063a\\u0644\\u0642\\u0629 \\u0628\\u0625\\u062d\\u0643\\u0627\\u0645\",\n    \"Smiling face with halo\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0647\\u0627\\u0644\\u0629\",\n    \"Smiling face with horns\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0628\\u0642\\u0631\\u0648\\u0646\",\n    \"Winking face\": \"\\u0627\\u0644\\u063a\\u0645\\u0632 \\u0648\\u062c\\u0647\",\n    \"Smiling face with smiling eyes\": \"\\u064a\\u0628\\u062a\\u0633\\u0645 \\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0639\\u064a\\u0648\\u0646 \\u062a\\u0628\\u062a\\u0633\\u0645\",\n    \"Face savoring delicious food\": \"\\u064a\\u0648\\u0627\\u062c\\u0647 \\u0644\\u0630\\u064a\\u0630 \\u0627\\u0644\\u0645\\u0630\\u0627\\u0642 \\u0644\\u0630\\u064a\\u0630 \\u0627\\u0644\\u0637\\u0639\\u0627\\u0645\",\n    \"Relieved face\": \"\\u0648\\u062c\\u0647 \\u0628\\u0627\\u0644\\u0627\\u0631\\u062a\\u064a\\u0627\\u062d\",\n    \"Smiling face with heart-shaped eyes\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0628\\u0639\\u064a\\u0646\\u064a\\u0646 \\u0639\\u0644\\u0649 \\u0634\\u0643\\u0644 \\u0642\\u0644\\u0628\",\n    \"Smiling face with sunglasses\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0628\\u062a\\u0633\\u0645 \\u0645\\u0639 \\u0627\\u0644\\u0646\\u0638\\u0627\\u0631\\u0627\\u062a \\u0627\\u0644\\u0634\\u0645\\u0633\\u064a\\u0629\",\n    \"Smirking face\": \"\\u0633\\u0645\\u064a\\u0631\\u0643\\u064a\\u0646\\u062c \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Neutral face\": \"\\u0645\\u062d\\u0627\\u064a\\u062f \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Expressionless face\": \"\\u0648\\u062c\\u0647 \\u0627\\u0644\\u062a\\u0639\\u0627\\u0628\\u064a\\u0631\",\n    \"Unamused face\": \"\\u0644\\u0627 \\u0645\\u0633\\u0644\\u064a\\u0627 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Face with cold sweat\": \"\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0639\\u0631\\u0642 \\u0628\\u0627\\u0631\\u062f\",\n    \"Pensive face\": \"\\u0648\\u062c\\u0647 \\u0645\\u062a\\u0623\\u0645\\u0644\",\n    \"Confused face\": \"\\u0648\\u062c\\u0647 \\u0627\\u0644\\u062e\\u0644\\u0637\",\n    \"Confounded face\": \"\\u0648\\u062c\\u0647 \\u0645\\u0631\\u062a\\u0628\\u0643\",\n    \"Kissing face\": \"\\u062a\\u0642\\u0628\\u064a\\u0644 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Face throwing a kiss\": \"\\u0645\\u0648\\u0627\\u062c\\u0647\\u0629 \\u0631\\u0645\\u064a \\u0642\\u0628\\u0644\\u0629\",\n    \"Kissing face with smiling eyes\": \"\\u062a\\u0642\\u0628\\u064a\\u0644 \\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0639\\u064a\\u0648\\u0646 \\u062a\\u0628\\u062a\\u0633\\u0645\",\n    \"Kissing face with closed eyes\": \"\\u062a\\u0642\\u0628\\u064a\\u0644 \\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0639\\u064a\\u0648\\u0646 \\u0645\\u063a\\u0644\\u0642\\u0629\",\n    \"Face with stuck out tongue\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u062a\\u0645\\u0633\\u0643 \\u0628\\u0647\\u0627 \\u0627\\u0644\\u0644\\u0633\\u0627\\u0646\",\n    \"Face with stuck out tongue and winking eye\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u062a\\u0645\\u0633\\u0643 \\u0628\\u0647\\u0627 \\u0627\\u0644\\u0644\\u0633\\u0627\\u0646 \\u0648\\u0627\\u0644\\u0639\\u064a\\u0646 \\u0627\\u0644\\u062a\\u063a\\u0627\\u0636\\u064a\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u062a\\u0645\\u0633\\u0643 \\u0628\\u0647\\u0627 \\u0627\\u0644\\u0644\\u0633\\u0627\\u0646 \\u0648\\u0627\\u0644\\u0639\\u064a\\u0648\\u0646 \\u0645\\u063a\\u0644\\u0642\\u0629 \\u0628\\u0623\\u062d\\u0643\\u0627\\u0645\\u002d\",\n    \"Disappointed face\": \"\\u0648\\u062c\\u0647\\u0627 \\u062e\\u064a\\u0628\\u0629 \\u0623\\u0645\\u0644\",\n    \"Worried face\": \"\\u0648\\u062c\\u0647\\u0627 \\u0627\\u0644\\u0642\\u0644\\u0642\\u0648\\u0646\",\n    \"Angry face\": \"\\u0648\\u062c\\u0647 \\u063a\\u0627\\u0636\\u0628\",\n    \"Pouting face\": \"\\u0627\\u0644\\u0639\\u0628\\u0648\\u0633 \\u0648\\u062c\\u0647\",\n    \"Crying face\": \"\\u0627\\u0644\\u0628\\u0643\\u0627\\u0621 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Persevering face\": \"\\u0627\\u0644\\u0645\\u062b\\u0627\\u0628\\u0631\\u0629 \\u0648\\u062c\\u0647\\u0647\",\n    \"Face with look of triumph\": \"\\u0648\\u0627\\u062c\\u0647 \\u0645\\u0639 \\u0646\\u0638\\u0631\\u0629 \\u0627\\u0646\\u062a\\u0635\\u0627\\u0631\",\n    \"Disappointed but relieved face\": \"\\u0628\\u062e\\u064a\\u0628\\u0629 \\u0623\\u0645\\u0644 \\u0648\\u0644\\u0643\\u0646 \\u064a\\u0639\\u0641\\u0649 \\u0648\\u062c\\u0647\",\n    \"Frowning face with open mouth\": \"\\u0645\\u0642\\u0637\\u0628 \\u0627\\u0644\\u0648\\u062c\\u0647 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645\",\n    \"Anguished face\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u0624\\u0644\\u0645\",\n    \"Fearful face\": \"\\u0627\\u0644\\u0648\\u062c\\u0647 \\u0627\\u0644\\u0645\\u062e\\u064a\\u0641\",\n    \"Weary face\": \"\\u0648\\u062c\\u0647\\u0627 \\u0628\\u0627\\u0644\\u0636\\u062c\\u0631\",\n    \"Sleepy face\": \"\\u0648\\u062c\\u0647 \\u0646\\u0639\\u0633\\u0627\\u0646\",\n    \"Tired face\": \"\\u0648\\u062c\\u0647 \\u0645\\u062a\\u0639\\u0628\",\n    \"Grimacing face\": \"\\u0648\\u062e\\u0631\\u062c \\u0633\\u064a\\u0633 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Loudly crying face\": \"\\u0627\\u0644\\u0628\\u0643\\u0627\\u0621 \\u0628\\u0635\\u0648\\u062a \\u0639\\u0627\\u0644 \\u0648\\u062c\\u0647\\u0647\",\n    \"Face with open mouth\": \"\\u0648\\u0627\\u062c\\u0647 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645\",\n    \"Hushed face\": \"\\u0648\\u062c\\u0647\\u0627 \\u0627\\u0644\\u062a\\u0643\\u062a\\u0645\",\n    \"Face with open mouth and cold sweat\": \"\\u0648\\u0627\\u062c\\u0647 \\u0645\\u0639 \\u0641\\u062a\\u062d \\u0627\\u0644\\u0641\\u0645 \\u0648\\u0627\\u0644\\u0639\\u0631\\u0642 \\u0627\\u0644\\u0628\\u0627\\u0631\\u062f\",\n    \"Face screaming in fear\": \"\\u0648\\u0627\\u062c\\u0647 \\u064a\\u0635\\u0631\\u062e \\u0641\\u064a \\u062e\\u0648\\u0641\",\n    \"Astonished face\": \"\\u0648\\u062c\\u0647\\u0627 \\u062f\\u0647\\u0634\",\n    \"Flushed face\": \"\\u0627\\u062d\\u0645\\u0631\\u0627\\u0631 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Sleeping face\": \"\\u0627\\u0644\\u0646\\u0648\\u0645 \\u0627\\u0644\\u0648\\u062c\\u0647\",\n    \"Dizzy face\": \"\\u0648\\u062c\\u0647\\u0627 \\u0628\\u0627\\u0644\\u062f\\u0648\\u0627\\u0631\",\n    \"Face without mouth\": \"\\u0648\\u0627\\u062c\\u0647 \\u062f\\u0648\\u0646 \\u0627\\u0644\\u0641\\u0645\",\n    \"Face with medical mask\": \"\\u0648\\u0627\\u062c\\u0647 \\u0645\\u0639 \\u0642\\u0646\\u0627\\u0639 \\u0627\\u0644\\u0637\\u0628\\u064a\\u0629\",\n\n    // Line breaker\n    \"Break\": \"\\u0627\\u0644\\u0627\\u0646\\u0642\\u0633\\u0627\\u0645\",\n\n    // Math\n    \"Subscript\": \"\\u0645\\u0646\\u062e\\u0641\\u0636\",\n    \"Superscript\": \"\\u062d\\u0631\\u0641 \\u0641\\u0648\\u0642\\u064a\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u0643\\u0627\\u0645\\u0644 \\u0627\\u0644\\u0634\\u0627\\u0634\\u0629\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u062e\\u0637 \\u0623\\u0641\\u0642\\u064a\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u0625\\u0632\\u0627\\u0644\\u0629 \\u0627\\u0644\\u062a\\u0646\\u0633\\u064a\\u0642\",\n\n    // Save\n    \"Save\": \"\\u062d\\u0641\\u0638\",\n\n    // Undo, redo\n    \"Undo\": \"\\u062a\\u0631\\u0627\\u062c\\u0639\",\n    \"Redo\": \"\\u0625\\u0639\\u0627\\u062f\\u0629\",\n\n    // Select all\n    \"Select All\": \"\\u062a\\u062d\\u062f\\u064a\\u062f \\u0627\\u0644\\u0643\\u0644\",\n\n    // Code view\n    \"Code View\": \"\\u0639\\u0631\\u0636 \\u0627\\u0644\\u062a\\u0639\\u0644\\u064a\\u0645\\u0627\\u062a \\u0627\\u0644\\u0628\\u0631\\u0645\\u062c\\u064a\\u0629\",\n\n    // Quote\n    \"Quote\": \"\\u0627\\u0642\\u062a\\u0628\\u0633\",\n    \"Increase\": \"\\u0632\\u064a\\u0627\\u062f\\u0629\",\n    \"Decrease\": \"\\u0627\\u0646\\u062e\\u0641\\u0627\\u0636\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u0625\\u062f\\u0631\\u0627\\u062c \\u0633\\u0631\\u064a\\u0639\",\n\n    // Spcial Characters\n    \"Special Characters\": \"أحرف خاصة\",\n    \"Latin\": \"لاتينية\",\n    \"Greek\": \"الإغريقي\",\n    \"Cyrillic\": \"السيريلية\",\n    \"Punctuation\": \"علامات ترقيم\",\n    \"Currency\": \"دقة\",\n    \"Arrows\": \"السهام\",\n    \"Math\": \"الرياضيات\",\n    \"Misc\": \"متفرقات\",\n\n    // Print.\n    \"Print\": \"طباعة\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"مدقق املائي\",\n\n    // Help\n    \"Help\": \"مساعدة\",\n    \"Shortcuts\": \"اختصارات\",\n    \"Inline Editor\": \"محرر مضمنة\",\n    \"Show the editor\": \"عرض المحرر\",\n    \"Common actions\": \"الإجراءات المشتركة\",\n    \"Copy\": \"نسخ\",\n    \"Cut\": \"يقطع\",\n    \"Paste\": \"معجون\",\n    \"Basic Formatting\": \"التنسيق الأساسي\",\n    \"Increase quote level\": \"زيادة مستوى الاقتباس\",\n    \"Decrease quote level\": \"انخفاض مستوى الاقتباس\",\n    \"Image / Video\": \"صورة / فيديو\",\n    \"Resize larger\": \"تغيير حجم أكبر\",\n    \"Resize smaller\": \"تغيير حجم أصغر\",\n    \"Table\": \"الطاولة\",\n    \"Select table cell\": \"حدد خلية الجدول\",\n    \"Extend selection one cell\": \"توسيع اختيار خلية واحدة\",\n    \"Extend selection one row\": \"تمديد اختيار صف واحد\",\n    \"Navigation\": \"التنقل\",\n    \"Focus popup / toolbar\": \"التركيز المنبثقة / شريط الأدوات\",\n    \"Return focus to previous position\": \"عودة التركيز إلى الموقف السابق\",\n\n    // Embed.ly\n    \"Embed URL\": \"تضمين عنوان ورل\",\n    \"Paste in a URL to embed\": \"الصق في عنوان ورل لتضمينه\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"المحتوى الذي تم لصقه قادم من وثيقة كلمة ميكروسوفت. هل تريد الاحتفاظ بالتنسيق أو تنظيفه؟\",\n    \"Keep\": \"احتفظ\",\n    \"Clean\": \"نظيف\",\n    \"Word Paste Detected\": \"تم اكتشاف معجون الكلمات\"\n  },\n  direction: \"rtl\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/bs.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Bosnian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['bs'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ukucajte ne\\u0161tp\",\n\n    // Basic formatting\n    \"Bold\": \"Bold\",\n    \"Italic\": \"Italic\",\n    \"Underline\": \"Podvu\\u010deno\",\n    \"Strikethrough\": \"Precrtano\",\n\n    // Main buttons\n    \"Insert\": \"Umetni\",\n    \"Delete\": \"Obri\\u0161i\",\n    \"Cancel\": \"Otka\\u017ei\",\n    \"OK\": \"U redu\",\n    \"Back\": \"Natrag\",\n    \"Remove\": \"Ukloni\",\n    \"More\": \"Vi\\u0161e\",\n    \"Update\": \"A\\u017euriranje\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Odaberi font\",\n    \"Font Size\": \"Veli\\u010dina fonta\",\n\n    // Colors\n    \"Colors\": \"Boje\",\n    \"Background\": \"Pozadine\",\n    \"Text\": \"Teksta\",\n    \"HEX Color\": \"Hex boje\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragraf formatu\",\n    \"Normal\": \"Normalno\",\n    \"Code\": \"Izvorni kod\",\n    \"Heading 1\": \"Naslov 1\",\n    \"Heading 2\": \"Naslov 2\",\n    \"Heading 3\": \"Naslov 3\",\n    \"Heading 4\": \"Naslov 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraf stil\",\n    \"Inline Style\": \"Inline stil\",\n\n    // Alignment\n    \"Alignment\": \"Poravnanje\",\n    \"Align Left\": \"Poravnaj lijevo\",\n    \"Align Center\": \"Poravnaj po sredini\",\n    \"Align Right\": \"Poravnaj desno\",\n    \"Align Justify\": \"Obostrano poravnanje\",\n    \"None\": \"Nijedan\",\n\n    // Lists\n    \"Ordered List\": \"Ure\\u0111ena lista\",\n    \"Default\": \"Default\",\n    \"Lower Alpha\": \"Niži alfa\",\n    \"Lower Greek\": \"Niži grčki\",\n    \"Lower Roman\": \"Lower roman\",\n    \"Upper Alpha\": \"Upper alpha\",\n    \"Upper Roman\": \"Upper roman\",\n\n    \"Unordered List\": \"Nesre\\u0111ene lista\",\n    \"Circle\": \"Krug\",\n    \"Disc\": \"Disk\",\n    \"Square\": \"Kvadrat\",\n\n    // Line height\n    \"Line Height\": \"Visina linije\",\n    \"Single\": \"Single\",\n    \"Double\": \"Double\",\n\n    // Indent\n    \"Decrease Indent\": \"Smanjenje alineja\",\n    \"Increase Indent\": \"Pove\\u0107anje alineja\",\n\n    // Links\n    \"Insert Link\": \"Umetni link\",\n    \"Open in new tab\": \"Otvori u novom prozoru\",\n    \"Open Link\": \"Otvori link\",\n    \"Edit Link\": \"Uredi link\",\n    \"Unlink\": \"Ukloni link\",\n    \"Choose Link\": \"Izabrati link\",\n\n    // Images\n    \"Insert Image\": \"Umetni sliku\",\n    \"Upload Image\": \"Upload sliku\",\n    \"By URL\": \"Preko URL\",\n    \"Browse\": \"Pregledaj\",\n    \"Drop image\": \"Izbaci sliku\",\n    \"or click\": \"ili odaberi\",\n    \"Manage Images\": \"Upravljanje ilustracijama\",\n    \"Loading\": \"Koji tovari\",\n    \"Deleting\": \"Brisanje\",\n    \"Tags\": \"Oznake\",\n    \"Are you sure? Image will be deleted.\": \"Da li ste sigurni da \\u017eelite da obri\\u0161ete ovu ilustraciju?\",\n    \"Replace\": \"Zamijenite\",\n    \"Uploading\": \"Uploading\",\n    \"Loading image\": \"Koji tovari sliku\",\n    \"Display\": \"Prikaz\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Break tekst\",\n    \"Alternative Text\": \"Alternativna tekst\",\n    \"Change Size\": \"Promijeni veli\\u010dinu\",\n    \"Width\": \"\\u0161irina\",\n    \"Height\": \"Visina\",\n    \"Something went wrong. Please try again.\": \"Ne\\u0161to je po\\u0161lo po zlu. Molimo vas da poku\\u0161ate ponovo.\",\n    \"Image Caption\": \"Caption slika\",\n    \"Advanced Edit\": \"Napredna izmjena\",\n\n    // Video\n    \"Insert Video\": \"Umetni video\",\n    \"Embedded Code\": \"Embedded kod\",\n    \"Paste in a video URL\": \"Nalepite u video url\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Vaš pretraživač ne podržava html5 video.\",\n    \"Upload Video\": \"Otpremite video\",\n\n    // Tables\n    \"Insert Table\": \"Umetni tabelu\",\n    \"Table Header\": \"Tabelu zaglavlja\",\n    \"Remove Table\": \"Uklonite tabelu\",\n    \"Table Style\": \"Tabela stil\",\n    \"Horizontal Align\": \"Horizontalno poravnaj\",\n    \"Row\": \"Red\",\n    \"Insert row above\": \"Umetni red iznad\",\n    \"Insert row below\": \"Umetni red ispod\",\n    \"Delete row\": \"Obri\\u0161i red\",\n    \"Column\": \"Kolona\",\n    \"Insert column before\": \"Umetni kolonu prije\",\n    \"Insert column after\": \"Umetni kolonu poslije\",\n    \"Delete column\": \"Obri\\u0161i kolonu\",\n    \"Cell\": \"\\u0106elija\",\n    \"Merge cells\": \"Spoji \\u0107elija\",\n    \"Horizontal split\": \"Horizontalno razdvajanje polja\",\n    \"Vertical split\": \"Vertikalno razdvajanje polja\",\n    \"Cell Background\": \"\\u0106elija pozadini\",\n    \"Vertical Align\": \"Vertikalni poravnaj\",\n    \"Top\": \"Vrh\",\n    \"Middle\": \"Srednji\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Poravnaj vrh\",\n    \"Align Middle\": \"Poravnaj srednji\",\n    \"Align Bottom\": \"Poravnaj dno\",\n    \"Cell Style\": \"\\u0106elija stil\",\n\n    // Files\n    \"Upload File\": \"Upload datoteke\",\n    \"Drop file\": \"Drop datoteke\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikona\",\n    \"Grinning face\": \"Cere\\u0107i lice\",\n    \"Grinning face with smiling eyes\": \"Cere\\u0107i lice nasmijana o\\u010dima\",\n    \"Face with tears of joy\": \"Lice sa suze radosnice\",\n    \"Smiling face with open mouth\": \"Nasmijana lica s otvorenih usta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Nasmijana lica s otvorenih usta i nasmijana o\\u010di\",\n    \"Smiling face with open mouth and cold sweat\": \"Nasmijana lica s otvorenih usta i hladan znoj\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Nasmijana lica s otvorenih usta i \\u010dvrsto-zatvorenih o\\u010diju\",\n    \"Smiling face with halo\": \"Nasmijana lica sa halo\",\n    \"Smiling face with horns\": \"Nasmijana lica s rogovima\",\n    \"Winking face\": \"Namigivanje lice\",\n    \"Smiling face with smiling eyes\": \"Nasmijana lica sa nasmijana o\\u010dima\",\n    \"Face savoring delicious food\": \"Suo\\u010davaju u\\u017eivaju\\u0107i ukusna hrana\",\n    \"Relieved face\": \"Laknulo lice\",\n    \"Smiling face with heart-shaped eyes\": \"Nasmijana lica sa obliku srca o\\u010di\",\n    \"Smiling face with sunglasses\": \"Nasmijana lica sa sun\\u010dane nao\\u010dare\",\n    \"Smirking face\": \"Namr\\u0161tena lica\",\n    \"Neutral face\": \"Neutral lice\",\n    \"Expressionless face\": \"Bezizra\\u017eajno lice\",\n    \"Unamused face\": \"Nije zabavno lice\",\n    \"Face with cold sweat\": \"Lice s hladnim znojem\",\n    \"Pensive face\": \"Zami\\u0161ljen lice\",\n    \"Confused face\": \"Zbunjen lice\",\n    \"Confounded face\": \"Uzbu\\u0111en lice\",\n    \"Kissing face\": \"Ljubakanje lice\",\n    \"Face throwing a kiss\": \"Suo\\u010davaju bacanje poljubac\",\n    \"Kissing face with smiling eyes\": \"Ljubljenje lice nasmijana o\\u010dima\",\n    \"Kissing face with closed eyes\": \"Ljubljenje lice sa zatvorenim o\\u010dima\",\n    \"Face with stuck out tongue\": \"Lice sa ispru\\u017eio jezik\",\n    \"Face with stuck out tongue and winking eye\": \"Lice sa ispru\\u017eio jezik i trep\\u0107u\\u0107e \\u0107e oko\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Lice sa ispru\\u017eio jezik i \\u010dvrsto zatvorene o\\u010di\",\n    \"Disappointed face\": \"Razo\\u010daran lice\",\n    \"Worried face\": \"Zabrinuti lice\",\n    \"Angry face\": \"Ljut lice\",\n    \"Pouting face\": \"Napu\\u0107enim lice\",\n    \"Crying face\": \"Plakanje lice\",\n    \"Persevering face\": \"Istrajan lice\",\n    \"Face with look of triumph\": \"Lice s pogledom trijumfa\",\n    \"Disappointed but relieved face\": \"Razo\\u010daran, ali olak\\u0161anje lice\",\n    \"Frowning face with open mouth\": \"Namr\\u0161tiv\\u0161i lice s otvorenih usta\",\n    \"Anguished face\": \"Bolnom lice\",\n    \"Fearful face\": \"Pla\\u0161ljiv lice\",\n    \"Weary face\": \"Umoran lice\",\n    \"Sleepy face\": \"Pospan lice\",\n    \"Tired face\": \"Umorno lice\",\n    \"Grimacing face\": \"Grimase lice\",\n    \"Loudly crying face\": \"Glasno pla\\u010de lice\",\n    \"Face with open mouth\": \"Lice s otvorenih usta\",\n    \"Hushed face\": \"Smiren lice\",\n    \"Face with open mouth and cold sweat\": \"Lice s otvorenih usta i hladan znoj\",\n    \"Face screaming in fear\": \"Suo\\u010davaju vri\\u0161ti u strahu\",\n    \"Astonished face\": \"Zapanjen lice\",\n    \"Flushed face\": \"Rumeno lice\",\n    \"Sleeping face\": \"Usnulo lice\",\n    \"Dizzy face\": \"O\\u0161amu\\u0107en lice\",\n    \"Face without mouth\": \"Lice bez usta\",\n    \"Face with medical mask\": \"Lice sa medicinskom maskom\",\n\n    // Line breaker\n    \"Break\": \"Slomiti\",\n\n    // Math\n    \"Subscript\": \"Potpisan\",\n    \"Superscript\": \"Natpis\",\n\n    // Full screen\n    \"Fullscreen\": \"Preko cijelog zaslona\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Umetni vodoravna liniju\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Izbrisati formatiranje\",\n\n    // Save\n    \"Save\":\"Spremi\",\n\n    // Undo, redo\n    \"Undo\": \"Korak nazad\",\n    \"Redo\": \"Korak naprijed\",\n\n    // Select all\n    \"Select All\": \"Ozna\\u010di sve\",\n\n    // Code view\n    \"Code View\": \"Kod pogled\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Pove\\u0107ati\",\n    \"Decrease\": \"Smanjenje\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Brzo umetak\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Posebni znakovi\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Greek\",\n    \"Cyrillic\": \"Ćirilično\",\n    \"Punctuation\": \"Interpunkcija\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Strelice\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Proveru pravopisa\",\n\n    // Help\n    \"Help\": \"Pomoć\",\n    \"Shortcuts\": \"Prečice\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Pokaži urednika\",\n    \"Common actions\": \"Zajedničke akcije\",\n    \"Copy\": \"Kopiraj\",\n    \"Cut\": \"Cut\",\n    \"Paste\": \"Paste\",\n    \"Basic Formatting\": \"Osnovno oblikovanje\",\n    \"Increase quote level\": \"Povećati cijeni\",\n    \"Decrease quote level\": \"Smanjiti nivo ponude\",\n    \"Image / Video\": \"Slika / video\",\n    \"Resize larger\": \"Veće veličine\",\n    \"Resize smaller\": \"Manja promjena veličine\",\n    \"Table\": \"Stol\",\n    \"Select table cell\": \"Izaberite ćeliju tablice\",\n    \"Extend selection one cell\": \"Produžiti izbor jedne ćelije\",\n    \"Extend selection one row\": \"Produžiti izbor jedan red\",\n    \"Navigation\": \"Navigacija\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Vratite fokus na prethodnu poziciju\",\n\n    // Embed.ly\n    \"Embed URL\": \"Ugraditi url\",\n    \"Paste in a URL to embed\": \"Paste u URL adresu za ugradnju\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Nalepeni sadržaj dolazi iz Microsoft Word dokumenta. da li želite da zadržite format ili da ga očistite?\",\n    \"Keep\": \"Zadržati\",\n    \"Clean\": \"Čist\",\n    \"Word Paste Detected\": \"Otkrivena je slovna reč\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/cs.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Czech\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['cs'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Napi\\u0161te n\\u011bco\",\n\n    // Basic formatting\n    \"Bold\": \"Tu\\u010dn\\u00e9\",\n    \"Italic\": \"Kurz\\u00edva\",\n    \"Underline\": \"Podtr\\u017een\\u00e9\",\n    \"Strikethrough\": \"P\\u0159e\\u0161krtnut\\u00e9\",\n\n    // Main buttons\n    \"Insert\": \"Vlo\\u017eit\",\n    \"Delete\": \"Vymazat\",\n    \"Cancel\": \"Zru\\u0161it\",\n    \"OK\": \"OK\",\n    \"Back\": \"Zp\\u011bt\",\n    \"Remove\": \"Odstranit\",\n    \"More\": \"V\\u00edce\",\n    \"Update\": \"Aktualizovat\",\n    \"Style\": \"Styl\",\n\n    // Font\n    \"Font Family\": \"Typ p\\u00edsma\",\n    \"Font Size\": \"Velikost p\\u00edsma\",\n\n    // Colors\n    \"Colors\": \"Barvy\",\n    \"Background\": \"Pozad\\u00ed\",\n    \"Text\": \"P\\u00edsmo\",\n    \"HEX Color\": \"Hex Barvy\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Form\\u00e1t odstavec\",\n    \"Normal\": \"Norm\\u00e1ln\\u00ed\",\n    \"Code\": \"K\\u00f3d\",\n    \"Heading 1\": \"Nadpis 1\",\n    \"Heading 2\": \"Nadpis 2\",\n    \"Heading 3\": \"Nadpis 3\",\n    \"Heading 4\": \"Nadpis 4\",\n\n    // Style\n    \"Paragraph Style\": \"Odstavec styl\",\n    \"Inline Style\": \"Inline styl\",\n\n    // Alignment\n    \"Align\": \"Zarovn\\u00e1n\\u00ed\",\n    \"Align Left\": \"Zarovnat vlevo\",\n    \"Align Center\": \"Zarovnat na st\\u0159ed\",\n    \"Align Right\": \"Zarovnat vpravo\",\n    \"Align Justify\": \"Zarovnat do bloku\",\n    \"None\": \"Nikdo\",\n\n    // Lists\n    \"Ordered List\": \"\\u010c\\u00edslovan\\u00fd seznam\",\n    \"Default\": \"Výchozí\",\n    \"Lower Alpha\": \"Nižší alfa\",\n    \"Lower Greek\": \"Nižší řečtina\",\n    \"Lower Roman\": \"Nižší římský\",\n    \"Upper Alpha\": \"Horní alfa\",\n    \"Upper Roman\": \"Horní římský\",\n\n    \"Unordered List\": \"Ne\\u010d\\u00edslovan\\u00fd seznam\",\n    \"Circle\": \"Kruh\",\n    \"Disc\": \"Disk\",\n    \"Square\": \"Náměstí\",\n\n    // Line height\n    \"Line Height\": \"Výška řádku\",\n    \"Single\": \"Singl\",\n    \"Double\": \"Dvojnásobek\",\n\n    // Indent\n    \"Decrease Indent\": \"Zmen\\u0161it odsazen\\u00ed\",\n    \"Increase Indent\": \"Zv\\u011bt\\u0161it odsazen\\u00ed\",\n\n    // Links\n    \"Insert Link\": \"Vlo\\u017eit odkaz\",\n    \"Open in new tab\": \"Otev\\u0159\\u00edt v nov\\u00e9 z\\u00e1lo\\u017ece\",\n    \"Open Link\": \"Otev\\u0159\\u00edt odkaz\",\n    \"Edit Link\": \"Upravit odkaz\",\n    \"Unlink\": \"Odstranit odkaz\",\n    \"Choose Link\": \"Zvolte odkaz\",\n\n    // Images\n    \"Insert Image\": \"Vlo\\u017eit obr\\u00e1zek\",\n    \"Upload Image\": \"Nahr\\u00e1t obr\\u00e1zek\",\n    \"By URL\": \"Podle URL\",\n    \"Browse\": \"Proch\\u00e1zet\",\n    \"Drop image\": \"P\\u0159et\\u00e1hn\\u011bte sem obr\\u00e1zek\",\n    \"or click\": \"nebo zde klepn\\u011bte\",\n    \"Manage Images\": \"Spr\\u00e1va obr\\u00e1zk\\u016f\",\n    \"Loading\": \"Nakl\\u00e1d\\u00e1n\\u00ed\",\n    \"Deleting\": \"Odstran\\u011bn\\u00ed\",\n    \"Tags\": \"Zna\\u010dky\",\n    \"Are you sure? Image will be deleted.\": \"Ur\\u010dit\\u011b? Obr\\u00e1zek bude smaz\\u00e1n.\",\n    \"Replace\": \"Nahradit\",\n    \"Uploading\": \"Nahr\\u00e1v\\u00e1n\\u00ed\",\n    \"Loading image\": \"Obr\\u00e1zek se na\\u010d\\u00edt\\u00e1\",\n    \"Display\": \"Zobrazit\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"P\\u0159est\\u00e1vka textu\",\n    \"Alternative Text\": \"Alternativn\\u00ed textu\",\n    \"Change Size\": \"Zm\\u011bnit velikost\",\n    \"Width\": \"\\u0160\\u00ed\\u0159ka\",\n    \"Height\": \"V\\u00fd\\u0161ka\",\n    \"Something went wrong. Please try again.\": \"N\\u011bco se pokazilo. Pros\\u00edm zkuste to znovu.\",\n    \"Image Caption\": \"Obrázek titulku\",\n    \"Advanced Edit\": \"Pokročilá úprava\",\n\n    // Video\n    \"Insert Video\": \"Vlo\\u017eit video\",\n    \"Embedded Code\": \"Vlo\\u017een\\u00fd k\\u00f3d\",\n    \"Paste in a video URL\": \"Vložit adresu URL videa\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Váš prohlížeč nepodporuje video html5.\",\n    \"Upload Video\": \"Nahrát video\",\n\n    // Tables\n    \"Insert Table\": \"Vlo\\u017eit tabulku\",\n    \"Table Header\": \"Hlavi\\u010dka tabulky\",\n    \"Remove Table\": \"Odstranit tabulku\",\n    \"Table Style\": \"Styl tabulky\",\n    \"Horizontal Align\": \"Horizont\\u00e1ln\\u00ed zarovn\\u00e1n\\u00ed\",\n    \"Row\": \"\\u0158\\u00e1dek\",\n    \"Insert row above\": \"Vlo\\u017eit \\u0159\\u00e1dek nad\",\n    \"Insert row below\": \"Vlo\\u017eit \\u0159\\u00e1dek pod\",\n    \"Delete row\": \"Smazat \\u0159\\u00e1dek\",\n    \"Column\": \"Sloupec\",\n    \"Insert column before\": \"Vlo\\u017eit sloupec vlevo\",\n    \"Insert column after\": \"Vlo\\u017eit sloupec vpravo\",\n    \"Delete column\": \"Smazat sloupec\",\n    \"Cell\": \"Bu\\u0148ka\",\n    \"Merge cells\": \"Slou\\u010dit bu\\u0148ky\",\n    \"Horizontal split\": \"Horizont\\u00e1ln\\u00ed rozd\\u011blen\\u00ed\",\n    \"Vertical split\": \"Vertik\\u00e1ln\\u00ed rozd\\u011blen\\u00ed\",\n    \"Cell Background\": \"Bu\\u0148ka pozad\\u00ed\",\n    \"Vertical Align\": \"Vertik\\u00e1ln\\u00ed zarovn\\u00e1n\\u00ed\",\n    \"Top\": \"Vrchol\",\n    \"Middle\": \"St\\u0159ed\",\n    \"Bottom\": \"Spodn\\u00ed\",\n    \"Align Top\": \"Zarovnat vrchol\",\n    \"Align Middle\": \"Zarovnat st\\u0159ed\",\n    \"Align Bottom\": \"Zarovnat spodn\\u00ed\",\n    \"Cell Style\": \"Styl bu\\u0148ky\",\n\n    // Files\n    \"Upload File\": \"Nahr\\u00e1t soubor\",\n    \"Drop file\": \"P\\u0159et\\u00e1hn\\u011bte sem soubor\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikony\",\n    \"Grinning face\": \"S \\u00fasm\\u011bvem tv\\u00e1\\u0159\",\n    \"Grinning face with smiling eyes\": \"S \\u00fasm\\u011bvem obli\\u010dej s o\\u010dima s \\u00fasm\\u011bvem\",\n    \"Face with tears of joy\": \"tv\\u00e1\\u0159 se slzami radosti\",\n    \"Smiling face with open mouth\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty\",\n    \"Smiling face with open mouth and smiling eyes\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty a o\\u010dima s \\u00fasm\\u011bvem\",\n    \"Smiling face with open mouth and cold sweat\": \"Usm\\u00edvaj\\u00edc\\u00ed se tv\\u00e1\\u0159 s otev\\u0159en\\u00fdmi \\u00fasty a studen\\u00fd pot\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Usm\\u00edvaj\\u00edc\\u00ed se tv\\u00e1\\u0159 s otev\\u0159en\\u00fdmi \\u00fasty a t\\u011bsn\\u011b zav\\u0159en\\u00e9 o\\u010di\",\n    \"Smiling face with halo\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s halo\",\n    \"Smiling face with horns\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s  rohy\",\n    \"Winking face\": \"Mrk\\u00e1n\\u00ed tv\\u00e1\\u0159\",\n    \"Smiling face with smiling eyes\": \"Usm\\u00edvaj\\u00edc\\u00ed se obli\\u010dej s  o\\u010dima s \\u00fasm\\u011bvem\",\n    \"Face savoring delicious food\": \"Tv\\u00e1\\u0159 vychutn\\u00e1val chutn\\u00e9 j\\u00eddlo\",\n    \"Relieved face\": \"Ulevilo tv\\u00e1\\u0159\",\n    \"Smiling face with heart-shaped eyes\": \"Usm\\u00edvaj\\u00edc\\u00ed se tv\\u00e1\\u0159 ve tvaru srdce o\\u010dima\",\n    \"Smiling face with sunglasses\": \"Usm\\u00edvaj\\u00edc\\u00ed se tv\\u00e1\\u0159 se slune\\u010dn\\u00edmi br\\u00fdlemi\",\n    \"Smirking face\": \"Uculoval tv\\u00e1\\u0159\",\n    \"Neutral face\": \"Neutr\\u00e1ln\\u00ed tv\\u00e1\\u0159\",\n    \"Expressionless face\": \"Bezv\\u00fdrazn\\u00fd obli\\u010dej\",\n    \"Unamused face\": \"Ne pobaven\\u00fd tv\\u00e1\\u0159\",\n    \"Face with cold sweat\": \"Tv\\u00e1\\u0159 se studen\\u00fdm potem\",\n    \"Pensive face\": \"Zamy\\u0161len\\u00fd obli\\u010dej\",\n    \"Confused face\": \"Zmaten\\u00fd tv\\u00e1\\u0159\",\n    \"Confounded face\": \"Na\\u0161tvan\\u00fd tv\\u00e1\\u0159\",\n    \"Kissing face\": \"L\\u00edb\\u00e1n\\u00ed tv\\u00e1\\u0159\",\n    \"Face throwing a kiss\": \"Tv\\u00e1\\u0159 h\\u00e1zet polibek\",\n    \"Kissing face with smiling eyes\": \"L\\u00edb\\u00e1n\\u00ed obli\\u010dej s o\\u010dima s \\u00fasm\\u011bvem\",\n    \"Kissing face with closed eyes\": \"L\\u00edb\\u00e1n\\u00ed tv\\u00e1\\u0159 se zav\\u0159en\\u00fdma o\\u010dima\",\n    \"Face with stuck out tongue\": \"Tv\\u00e1\\u0159 s tr\\u010dely jazyk\",\n    \"Face with stuck out tongue and winking eye\": \"Tv\\u00e1\\u0159 s tr\\u010dely jazykem a mrkat o\\u010dima\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Suo\\u010diti s tr\\u010dely jazykem t\\u011bsn\\u011b zav\\u0159en\\u00e9 vidikovce\",\n    \"Disappointed face\": \"Zklaman\\u00fd tv\\u00e1\\u0159\",\n    \"Worried face\": \"Boj\\u00ed\\u0161 se tv\\u00e1\\u0159\",\n    \"Angry face\": \"Rozzloben\\u00fd tv\\u00e1\\u0159\",\n    \"Pouting face\": \"Na\\u0161pulen\\u00e9 tv\\u00e1\\u0159\",\n    \"Crying face\": \"Pl\\u00e1\\u010d tv\\u00e1\\u0159\",\n    \"Persevering face\": \"Vytrval\\u00fdm tv\\u00e1\\u0159\",\n    \"Face with look of triumph\": \"Tv\\u00e1\\u0159 s v\\u00fdrazem triumfu\",\n    \"Disappointed but relieved face\": \"Zklaman\\u00fd ale ulevilo tv\\u00e1\\u0159\",\n    \"Frowning face with open mouth\": \"Zamra\\u010dil se obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty\",\n    \"Anguished face\": \"\\u00fazkostn\\u00e9 tv\\u00e1\\u0159\",\n    \"Fearful face\": \"Stra\\u0161n\\u00fd tv\\u00e1\\u0159\",\n    \"Weary face\": \"Unaven\\u00fd tv\\u00e1\\u0159\",\n    \"Sleepy face\": \"Ospal\\u00fd tv\\u00e1\\u0159\",\n    \"Tired face\": \"Unaven\\u00fd tv\\u00e1\\u0159\",\n    \"Grimacing face\": \"\\u0161klebil tv\\u00e1\\u0159\",\n    \"Loudly crying face\": \"Hlasit\\u011b pl\\u00e1\\u010de tv\\u00e1\\u0159\",\n    \"Face with open mouth\": \"Obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty\",\n    \"Hushed face\": \"Tlumen\\u00fd tv\\u00e1\\u0159\",\n    \"Face with open mouth and cold sweat\": \"Obli\\u010dej s otev\\u0159en\\u00fdmi \\u00fasty a studen\\u00fd pot\",\n    \"Face screaming in fear\": \"Tv\\u00e1\\u0159 k\\u0159i\\u010d\\u00ed ve strachu\",\n    \"Astonished face\": \"V \\u00fa\\u017easu tv\\u00e1\\u0159\",\n    \"Flushed face\": \"Zarudnut\\u00ed v obli\\u010deji\",\n    \"Sleeping face\": \"Sp\\u00edc\\u00ed tv\\u00e1\\u0159\",\n    \"Dizzy face\": \"Z\\u00e1vrat\\u011b tv\\u00e1\\u0159\",\n    \"Face without mouth\": \"Tv\\u00e1\\u0159 bez \\u00fast\",\n    \"Face with medical mask\": \"Tv\\u00e1\\u0159 s l\\u00e9ka\\u0159sk\\u00fdm maskou\",\n\n    // Line breaker\n    \"Break\": \"P\\u0159eru\\u0161en\\u00ed\",\n\n    // Math\n    \"Subscript\": \"Doln\\u00ed index\",\n    \"Superscript\": \"Horn\\u00ed index\",\n\n    // Full screen\n    \"Fullscreen\": \"Cel\\u00e1 obrazovka\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Vlo\\u017eit vodorovnou \\u010d\\u00e1ru\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Vymazat form\\u00e1tov\\u00e1n\\u00ed\",\n\n    // Save\n    \"Save\": \"\\u0055\\u006c\\u006f\\u017e\\u0069\\u0074\",\n\n    // Undo, redo\n    \"Undo\": \"Zp\\u011bt\",\n    \"Redo\": \"Znovu\",\n\n    // Select all\n    \"Select All\": \"Vybrat v\\u0161e\",\n\n    // Code view\n    \"Code View\": \"Zobrazen\\u00ed k\\u00f3d\",\n\n    // Quote\n    \"Quote\": \"Cit\\u00e1t\",\n    \"Increase\": \"Nav\\u00fd\\u0161it\",\n    \"Decrease\": \"Sn\\u00ed\\u017een\\u00ed\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Rychl\\u00e1 vlo\\u017eka\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Speciální znaky\",\n    \"Latin\": \"Latinský\",\n    \"Greek\": \"Řecký\",\n    \"Cyrillic\": \"Cyrilice\",\n    \"Punctuation\": \"Interpunkce\",\n    \"Currency\": \"Měna\",\n    \"Arrows\": \"Šipky\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Tisk\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Kontrola pravopisu\",\n\n    // Help\n    \"Help\": \"Pomoc\",\n    \"Shortcuts\": \"Zkratky\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Zobrazit editor\",\n    \"Common actions\": \"Společné akce\",\n    \"Copy\": \"Kopírovat\",\n    \"Cut\": \"Střih\",\n    \"Paste\": \"Vložit\",\n    \"Basic Formatting\": \"Základní formátování\",\n    \"Increase quote level\": \"Zvýšení cenové hladiny\",\n    \"Decrease quote level\": \"Snížit úroveň cenové nabídky\",\n    \"Image / Video\": \"Obraz / video\",\n    \"Resize larger\": \"Změna velikosti větší\",\n    \"Resize smaller\": \"Změnit velikost menší\",\n    \"Table\": \"Stůl\",\n    \"Select table cell\": \"Vyberte buňku tabulky\",\n    \"Extend selection one cell\": \"Rozšířit výběr o jednu buňku\",\n    \"Extend selection one row\": \"Rozšířit výběr o jeden řádek\",\n    \"Navigation\": \"Navigace\",\n    \"Focus popup / toolbar\": \"Popup / panel nástrojů zaostření\",\n    \"Return focus to previous position\": \"Návrat na předchozí pozici\",\n\n    // Embed.ly\n    \"Embed URL\": \"Vložte url\",\n    \"Paste in a URL to embed\": \"Vložit adresu URL, kterou chcete vložit\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Vložený obsah pochází z dokumentu Microsoft Word. chcete formát uchovat nebo jej vyčistit?\",\n    \"Keep\": \"Držet\",\n    \"Clean\": \"Čistý\",\n    \"Word Paste Detected\": \"Slovní vložka zjištěna\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/da.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Danish\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['da'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Skriv her\",\n\n    // Basic formatting\n    \"Bold\": \"Fed\",\n    \"Italic\": \"Kursiv\",\n    \"Underline\": \"Understreget\",\n    \"Strikethrough\": \"Gennemstreget\",\n\n    // Main buttons\n    \"Insert\": \"Indsæt\",\n    \"Delete\": \"Slet\",\n    \"Cancel\": \"Fortryd\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Tilbage\",\n    \"Remove\": \"Fjern\",\n    \"More\": \"Mere\",\n    \"Update\": \"Opdater\",\n    \"Style\": \"Udseende\",\n\n    // Font\n    \"Font Family\": \"Skrifttype\",\n    \"Font Size\": \"Skriftstørrelse\",\n\n    // Colors\n    \"Colors\": \"Farver\",\n    \"Background\": \"Baggrund\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"Hex farve\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Typografi\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kode\",\n    \"Heading 1\": \"Overskrift 1\",\n    \"Heading 2\": \"Overskrift 2\",\n    \"Heading 3\": \"Overskrift 3\",\n    \"Heading 4\": \"Overskrift 4\",\n\n    // Style\n    \"Paragraph Style\": \"Afsnit\",\n    \"Inline Style\": \"På linje\",\n\n    // Alignment\n    \"Align\": \"Tilpasning\",\n    \"Align Left\": \"Venstrejusteret\",\n    \"Align Center\": \"Centreret\",\n    \"Align Right\": \"Højrejusteret\",\n    \"Align Justify\": \"Justeret\",\n    \"None\": \"Ingen\",\n\n    // Lists\n    \"Ordered List\": \"Punktopstilling\",\n    \"Default\": \"Standard\",\n    \"Lower Alpha\": \"Lavere alfa\",\n    \"Lower Greek\": \"Lavere græsk\",\n    \"Lower Roman\": \"Lavere romersk\",\n    \"Upper Alpha\": \"Øvre alfa\",\n    \"Upper Roman\": \"Øvre romersk\",\n\n    \"Unordered List\": \"Punktopstilling med tal\",\n    \"Circle\": \"Cirkel\",\n    \"Disc\": \"Disk\",\n    \"Square\": \"Firkant\",\n\n    // Line height\n    \"Line Height\": \"Linjehøjde\",\n    \"Single\": \"Enkelt\",\n    \"Double\": \"Dobbelt\",\n\n    // Indent\n    \"Decrease Indent\": \"Formindsk indrykning\",\n    \"Increase Indent\": \"Forøg indrykning\",\n\n    // Links\n    \"Insert Link\": \"Indsæt link\",\n    \"Open in new tab\": \"Åbn i ny fane\",\n    \"Open Link\": \"Åbn link\",\n    \"Edit Link\": \"Rediger link\",\n    \"Unlink\": \"Fjern link\",\n    \"Choose Link\": \"Vælg link\",\n\n    // Images\n    \"Insert Image\": \"Indsæt billede\",\n    \"Upload Image\": \"Upload billede\",\n    \"By URL\": \"Fra URL\",\n    \"Browse\": \"Gennemse\",\n    \"Drop image\": \"Træk billedet herind\",\n    \"or click\": \"eller klik\",\n    \"Manage Images\": \"Administrer billeder\",\n    \"Loading\": \"Henter\",\n    \"Deleting\": \"Sletter\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Er du sikker? Billedet vil blive slettet.\",\n    \"Replace\": \"Udskift\",\n    \"Uploading\": \"Uploader\",\n    \"Loading image\": \"Henter billede\",\n    \"Display\": \"Layout\",\n    \"Inline\": \"På linje\",\n    \"Break Text\": \"Ombryd tekst\",\n    \"Alternative Text\": \"Supplerende tekst\",\n    \"Change Size\": \"Tilpas størrelse\",\n    \"Width\": \"Bredde\",\n    \"Height\": \"Højde\",\n    \"Something went wrong. Please try again.\": \"Noget gik galt. Prøv igen.\",\n    \"Image Caption\": \"Billedtekst\",\n    \"Advanced Edit\": \"Avanceret redigering\",\n\n    // Video\n    \"Insert Video\": \"Indsæt video\",\n    \"Embedded Code\": \"Indlejret kode\",\n    \"Paste in a video URL\": \"Indsæt en video via URL\",\n    \"Drop video\": \"Træk videoen herind\",\n    \"Your browser does not support HTML5 video.\": \"Din browser understøtter ikke HTML5 video.\",\n    \"Upload Video\": \"Upload video\",\n\n    // Tables\n    \"Insert Table\": \"Indsæt tabel\",\n    \"Table Header\": \"Tabeloverskrift\",\n    \"Remove Table\": \"Fjern tabel\",\n    \"Table Style\": \"Tabeludseende\",\n    \"Horizontal Align\": \"Vandret tilpasning\",\n    \"Row\": \"Række\",\n    \"Insert row above\": \"Indsæt række over\",\n    \"Insert row below\": \"Indsæt række under\",\n    \"Delete row\": \"Slet række\",\n    \"Column\": \"Kolonne\",\n    \"Insert column before\": \"Indsæt kolonne før\",\n    \"Insert column after\": \"Indsæt kolonne efter\",\n    \"Delete column\": \"Slet kolonne\",\n    \"Cell\": \"Celle\",\n    \"Merge cells\": \"Flet celler\",\n    \"Horizontal split\": \"Vandret split\",\n    \"Vertical split\": \"Lodret split\",\n    \"Cell Background\": \"Cellebaggrund\",\n    \"Vertical Align\": \"Lodret tilpasning\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Midte\",\n    \"Bottom\": \"Bund\",\n    \"Align Top\": \"Tilpas i top\",\n    \"Align Middle\": \"Tilpas i midte\",\n    \"Align Bottom\": \"Tilpas i bund\",\n    \"Cell Style\": \"Celleudseende\",\n\n    // Files\n    \"Upload File\": \"Upload fil\",\n    \"Drop file\": \"Træk filen herind\",\n\n    // Emoticons\n    \"Emoticons\": \"Humørikoner\",\n    \"Grinning face\": \"Grinende ansigt\",\n    \"Grinning face with smiling eyes\": \"Grinende ansigt med smilende øjne\",\n    \"Face with tears of joy\": \"Ansigt med glædestårer\",\n    \"Smiling face with open mouth\": \"Smilende ansigt med åben mund\",\n    \"Smiling face with open mouth and smiling eyes\": \"Smilende ansigt med åben mund og smilende øjne\",\n    \"Smiling face with open mouth and cold sweat\": \"Smilende ansigt med åben mund og koldsved\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Smilende ansigt med åben mund og stramtlukkede øjne\",\n    \"Smiling face with halo\": \"Smilende ansigt med glorie\",\n    \"Smiling face with horns\": \"Smilende ansigt med horn\",\n    \"Winking face\": \"Blinkede ansigt\",\n    \"Smiling face with smiling eyes\": \"Smilende ansigt med smilende øjne\",\n    \"Face savoring delicious food\": \"Ansigt der savler over lækker mad\",\n    \"Relieved face\": \"Lettet ansigt\",\n    \"Smiling face with heart-shaped eyes\": \"Smilende ansigt med hjerteformede øjne\",\n    \"Smiling face with sunglasses\": \"Smilende ansigt med solbriller\",\n    \"Smirking face\": \"Smilende ansigt\",\n    \"Neutral face\": \"Neutralt ansigt\",\n    \"Expressionless face\": \"Udtryksløst ansigt\",\n    \"Unamused face\": \"Utilfredst ansigt\",\n    \"Face with cold sweat\": \"Ansigt med koldsved\",\n    \"Pensive face\": \"Eftertænksomt ansigt\",\n    \"Confused face\": \"Forvirret ansigt\",\n    \"Confounded face\": \"Irriteret ansigt\",\n    \"Kissing face\": \"Kyssende ansigt\",\n    \"Face throwing a kiss\": \"Ansigt der luftkysser\",\n    \"Kissing face with smiling eyes\": \"Kyssende ansigt med smilende øjne\",\n    \"Kissing face with closed eyes\": \"Kyssende ansigt med lukkede øjne\",\n    \"Face with stuck out tongue\": \"Ansigt med tungen ud af munden\",\n    \"Face with stuck out tongue and winking eye\": \"Ansigt med tungen ud af munden og blinkede øje\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Ansigt med tungen ud af munden og stramt lukkede øjne\",\n    \"Disappointed face\": \"Skuffet ansigt\",\n    \"Worried face\": \"Bekymret ansigt\",\n    \"Angry face\": \"Vredt ansigt\",\n    \"Pouting face\": \"Surmulende ansigt\",\n    \"Crying face\": \"Grædende ansigt\",\n    \"Persevering face\": \"Vedholdende ansigt\",\n    \"Face with look of triumph\": \"Hoverende ansigt\",\n    \"Disappointed but relieved face\": \"Skuffet, men lettet ansigt\",\n    \"Frowning face with open mouth\": \"Ansigt med åben mund og rynket pande\",\n    \"Anguished face\": \"Forpintt ansigt\",\n    \"Fearful face\": \"Angst ansigt\",\n    \"Weary face\": \"Udmattet ansigt\",\n    \"Sleepy face\": \"Søvnigt ansigt\",\n    \"Tired face\": \"Træt ansigt\",\n    \"Grimacing face\": \"Ansigt der laver en grimasse\",\n    \"Loudly crying face\": \"Vrælende ansigt\",\n    \"Face with open mouth\": \"Ansigt med åben mund\",\n    \"Hushed face\": \"Tyst ansigt\",\n    \"Face with open mouth and cold sweat\": \"Ansigt med åben mund og koldsved\",\n    \"Face screaming in fear\": \"Ansigt der skriger i frygt\",\n    \"Astonished face\": \"Forbløffet ansigt\",\n    \"Flushed face\": \"Blussende ansigt\",\n    \"Sleeping face\": \"Sovende ansigt\",\n    \"Dizzy face\": \"Svimmelt ansigt\",\n    \"Face without mouth\": \"Ansigt uden mund\",\n    \"Face with medical mask\": \"Ansigt med mundbind\",\n\n    // Line breaker\n    \"Break\": \"Linjeskift\",\n\n    // Math\n    \"Subscript\": \"Sænket skrift\",\n    \"Superscript\": \"Hævet skrift\",\n\n    // Full screen\n    \"Fullscreen\": \"Fuldskærm\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Indsæt vandret linie\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Fjern formatering\",\n\n    // Undo, redo\n    \"Undo\": \"Fortryd\",\n    \"Redo\": \"Annuller fortryd\",\n\n    // Select all\n    \"Select All\": \"Vælg alt\",\n\n    // Code view\n    \"Code View\": \"Kodevisning\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Forøg\",\n    \"Decrease\": \"Formindsk\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Kvik-indsæt\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Specialtegn\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Græsk\",\n    \"Cyrillic\": \"Kyrillisk\",\n    \"Punctuation\": \"Tegnsætning\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Pile\",\n    \"Math\": \"Matematik\",\n    \"Misc\": \"Diverse\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Stavekontrol\",\n\n    // Help\n    \"Help\": \"Hjælp\",\n    \"Shortcuts\": \"Genveje\",\n    \"Inline Editor\": \"Indlejret editor\",\n    \"Show the editor\": \"Vis editor\",\n    \"Common actions\": \"Almindelige handlinger\",\n    \"Copy\": \"Kopier\",\n    \"Cut\": \"Klip\",\n    \"Paste\": \"Sæt ind\",\n    \"Basic Formatting\": \"Grundlæggende formatering\",\n    \"Increase quote level\": \"Hæv citatniveau\",\n    \"Decrease quote level\": \"Sænk citatniveau\",\n    \"Image / Video\": \"Billede / video\",\n    \"Resize larger\": \"Ændre til større\",\n    \"Resize smaller\": \"Ændre til mindre\",\n    \"Table\": \"Tabel\",\n    \"Select table cell\": \"Vælg tabelcelle\",\n    \"Extend selection one cell\": \"Udvid markeringen med én celle\",\n    \"Extend selection one row\": \"Udvid markeringen med én række\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Fokuser popup / værktøjslinje\",\n    \"Return focus to previous position\": \"Skift fokus tilbage til tidligere position\",\n\n    // Embed.ly\n    \"Embed URL\": \"Integrer URL\",\n    \"Paste in a URL to embed\": \"Indsæt en URL for at indlejre\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Det indsatte indhold kommer fra et Microsoft Word-dokument. Vil du beholde formateringen eller fjerne den?\",\n    \"Keep\": \"Behold\",\n    \"Clean\": \"Fjern\",\n    \"Word Paste Detected\": \"Indsættelse fra Word opdaget\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/de.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * German\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['de'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Hier tippen\",\n\n    // Basic formatting\n    \"Bold\": \"Fett\",\n    \"Italic\": \"Kursiv\",\n    \"Underline\": \"Unterstrichen\",\n    \"Strikethrough\": \"Durchgestrichen\",\n\n    // Main buttons\n    \"Insert\": \"Einfügen\",\n    \"Delete\": \"Löschen\",\n    \"Cancel\": \"Abbrechen\",\n    \"OK\": \"OK\",\n    \"Back\": \"Zurück\",\n    \"Remove\": \"Entfernen\",\n    \"More\": \"Mehr\",\n    \"Update\": \"Aktualisieren\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Schriftart\",\n    \"Font Size\": \"Schriftgröße\",\n\n    // Colors\n    \"Colors\": \"Farben\",\n    \"Background\": \"Hintergrund\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"Hexadezimaler Farbwert\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formatierung\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Quelltext\",\n    \"Heading 1\": \"Überschrift 1\",\n    \"Heading 2\": \"Überschrift 2\",\n    \"Heading 3\": \"Überschrift 3\",\n    \"Heading 4\": \"Überschrift 4\",\n\n    // Style\n    \"Paragraph Style\": \"Absatzformatierung\",\n    \"Inline Style\": \"Inlineformatierung\",\n\n    // Alignment\n    \"Align\": \"Ausrichtung\",\n    \"Align Left\": \"Linksbündig ausrichten\",\n    \"Align Center\": \"Zentriert ausrichten\",\n    \"Align Right\": \"Rechtsbündig ausrichten\",\n    \"Align Justify\": \"Blocksatz\",\n    \"None\": \"Keine\",\n\n    // Lists\n    \"Ordered List\": \"Nummerierte Liste\",\n    \"Default\": \"Standard\",\n    \"Lower Alpha\": \"Kleinbuchstaben\",\n    \"Lower Greek\": \"Griechisches Alphabet\",\n    \"Lower Roman\": \"Römische Ziffern (klein)\",\n    \"Upper Alpha\": \"Grossbuchstaben\",\n    \"Upper Roman\": \"Römische Ziffern (gross)\",\n\n    \"Unordered List\": \"Unnummerierte Liste\",\n    \"Circle\": \"Kreis\",\n    \"Disc\": \"Kreis gefüllt\",\n    \"Square\": \"Quadrat\",\n\n    // Line height\n    \"Line Height\": \"Zeilenhöhe\",\n    \"Single\": \"Einfach\",\n    \"Double\": \"Doppelt\",\n\n    // Indent\n    \"Decrease Indent\": \"Einzug verkleinern\",\n    \"Increase Indent\": \"Einzug vergrößern\",\n\n    // Links\n    \"Insert Link\": \"Link einfügen\",\n    \"Open in new tab\": \"In neuem Tab öffnen\",\n    \"Open Link\": \"Link öffnen\",\n    \"Edit Link\": \"Link bearbeiten\",\n    \"Unlink\": \"Link entfernen\",\n    \"Choose Link\": \"Einen Link auswählen\",\n\n    // Images\n    \"Insert Image\": \"Bild einfügen\",\n    \"Upload Image\": \"Bild hochladen\",\n    \"By URL\": \"Von URL\",\n    \"Browse\": \"Durchsuchen\",\n    \"Drop image\": \"Bild hineinziehen\",\n    \"or click\": \"oder hier klicken\",\n    \"Manage Images\": \"Bilder verwalten\",\n    \"Loading\": \"Laden\",\n    \"Deleting\": \"Löschen\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Wollen Sie das Bild wirklich löschen?\",\n    \"Replace\": \"Ersetzen\",\n    \"Uploading\": \"Hochladen\",\n    \"Loading image\": \"Das Bild wird geladen\",\n    \"Display\": \"Textausrichtung\",\n    \"Inline\": \"Mit Text in einer Zeile\",\n    \"Break Text\": \"Text umbrechen\",\n    \"Alternative Text\": \"Alternativtext\",\n    \"Change Size\": \"Größe ändern\",\n    \"Width\": \"Breite\",\n    \"Height\": \"Höhe\",\n    \"Something went wrong. Please try again.\": \"Etwas ist schief gelaufen. Bitte versuchen Sie es erneut.\",\n    \"Image Caption\": \"Bildbeschreibung\",\n    \"Advanced Edit\": \"Erweiterte Bearbeitung\",\n\n    // Video\n    \"Insert Video\": \"Video einfügen\",\n    \"Embedded Code\": \"Eingebetteter Code\",\n    \"Paste in a video URL\": \"Fügen Sie die Video-URL ein\",\n    \"Drop video\": \"Video hineinziehen\",\n    \"Your browser does not support HTML5 video.\": \"Ihr Browser unterstützt keine HTML5-Videos.\",\n    \"Upload Video\": \"Video hochladen\",\n\n    // Tables\n    \"Insert Table\": \"Tabelle einfügen\",\n    \"Table Header\": \"Tabellenkopf\",\n    \"Remove Table\": \"Tabelle entfernen\",\n    \"Table Style\": \"Tabellenformatierung\",\n    \"Horizontal Align\": \"Horizontale Ausrichtung\",\n    \"Row\": \"Zeile\",\n    \"Insert row above\": \"Neue Zeile davor einfügen\",\n    \"Insert row below\": \"Neue Zeile danach einfügen\",\n    \"Delete row\": \"Zeile löschen\",\n    \"Column\": \"Spalte\",\n    \"Insert column before\": \"Neue Spalte davor einfügen\",\n    \"Insert column after\": \"Neue Spalte danach einfügen\",\n    \"Delete column\": \"Spalte löschen\",\n    \"Cell\": \"Zelle\",\n    \"Merge cells\": \"Zellen verbinden\",\n    \"Horizontal split\": \"Horizontal teilen\",\n    \"Vertical split\": \"Vertikal teilen\",\n    \"Cell Background\": \"Zellenfarbe\",\n    \"Vertical Align\": \"Vertikale Ausrichtung\",\n    \"Top\": \"Oben\",\n    \"Middle\": \"Zentriert\",\n    \"Bottom\": \"Unten\",\n    \"Align Top\": \"Oben ausrichten\",\n    \"Align Middle\": \"Zentriert ausrichten\",\n    \"Align Bottom\": \"Unten ausrichten\",\n    \"Cell Style\": \"Zellen-Stil\",\n\n    // Files\n    \"Upload File\": \"Datei hochladen\",\n    \"Drop file\": \"Datei hineinziehen\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Grinsendes Gesicht\",\n    \"Grinning face with smiling eyes\": \"Grinsend Gesicht mit lächelnden Augen\",\n    \"Face with tears of joy\": \"Gesicht mit Tränen der Freude\",\n    \"Smiling face with open mouth\": \"Lächelndes Gesicht mit offenem Mund\",\n    \"Smiling face with open mouth and smiling eyes\": \"Lächelndes Gesicht mit offenem Mund und lächelnden Augen\",\n    \"Smiling face with open mouth and cold sweat\": \"Lächelndes Gesicht mit offenem Mund und kaltem Schweiß\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Lächelndes Gesicht mit offenem Mund und fest geschlossenen Augen\",\n    \"Smiling face with halo\": \"Lächeln Gesicht mit Heiligenschein\",\n    \"Smiling face with horns\": \"Lächeln Gesicht mit Hörnern\",\n    \"Winking face\": \"Zwinkerndes Gesicht\",\n    \"Smiling face with smiling eyes\": \"Lächelndes Gesicht mit lächelnden Augen\",\n    \"Face savoring delicious food\": \"Gesicht leckeres Essen genießend\",\n    \"Relieved face\": \"Erleichtertes Gesicht\",\n    \"Smiling face with heart-shaped eyes\": \"Lächelndes Gesicht mit herzförmigen Augen\",\n    \"Smiling face with sunglasses\": \"Lächelndes Gesicht mit Sonnenbrille\",\n    \"Smirking face\": \"Grinsendes Gesicht\",\n    \"Neutral face\": \"Neutrales Gesicht\",\n    \"Expressionless face\": \"Ausdrucksloses Gesicht\",\n    \"Unamused face\": \"Genervtes Gesicht\",\n    \"Face with cold sweat\": \"Gesicht mit kaltem Schweiß\",\n    \"Pensive face\": \"Nachdenkliches Gesicht\",\n    \"Confused face\": \"Verwirrtes Gesicht\",\n    \"Confounded face\": \"Elendes Gesicht\",\n    \"Kissing face\": \"Küssendes Gesicht\",\n    \"Face throwing a kiss\": \"Gesicht wirft einen Kuss\",\n    \"Kissing face with smiling eyes\": \"Küssendes Gesicht mit lächelnden Augen\",\n    \"Kissing face with closed eyes\": \"Küssendes Gesicht mit geschlossenen Augen\",\n    \"Face with stuck out tongue\": \"Gesicht mit herausgestreckter Zunge\",\n    \"Face with stuck out tongue and winking eye\": \"Gesicht mit herausgestreckter Zunge und zwinkerndem Auge\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Gesicht mit herausgestreckter Zunge und fest geschlossenen Augen\",\n    \"Disappointed face\": \"Enttäuschtes Gesicht\",\n    \"Worried face\": \"Besorgtes Gesicht\",\n    \"Angry face\": \"Verärgertes Gesicht\",\n    \"Pouting face\": \"Schmollendes Gesicht\",\n    \"Crying face\": \"Weinendes Gesicht\",\n    \"Persevering face\": \"Ausharrendes Gesicht\",\n    \"Face with look of triumph\": \"Gesicht mit triumphierenden Blick\",\n    \"Disappointed but relieved face\": \"Enttäuschtes, aber erleichtertes Gesicht\",\n    \"Frowning face with open mouth\": \"Entsetztes Gesicht mit offenem Mund\",\n    \"Anguished face\": \"Gequältes Gesicht\",\n    \"Fearful face\": \"Angstvolles Gesicht\",\n    \"Weary face\": \"Müdes Gesicht\",\n    \"Sleepy face\": \"Schläfriges Gesicht\",\n    \"Tired face\": \"Gähnendes Gesicht\",\n    \"Grimacing face\": \"Grimassenschneidendes Gesicht\",\n    \"Loudly crying face\": \"Laut weinendes Gesicht\",\n    \"Face with open mouth\": \"Gesicht mit offenem Mund\",\n    \"Hushed face\": \"Besorgtes Gesicht mit offenem Mund\",\n    \"Face with open mouth and cold sweat\": \"Gesicht mit offenem Mund und kaltem Schweiß\",\n    \"Face screaming in fear\": \"Vor Angst schreiendes Gesicht\",\n    \"Astonished face\": \"Erstauntes Gesicht\",\n    \"Flushed face\": \"Gerötetes Gesicht\",\n    \"Sleeping face\": \"Schlafendes Gesicht\",\n    \"Dizzy face\": \"Schwindliges Gesicht\",\n    \"Face without mouth\": \"Gesicht ohne Mund\",\n    \"Face with medical mask\": \"Gesicht mit Mundschutz\",\n\n    // Line breaker\n    \"Break\": \"Zeilenumbruch\",\n\n    // Math\n    \"Subscript\": \"Tiefgestellt\",\n    \"Superscript\": \"Hochgestellt\",\n\n    // Full screen\n    \"Fullscreen\": \"Vollbild\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Horizontale Linie einfügen\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Formatierung löschen\",\n\n    // Save\n    \"Save\": \"Sparen\",\n\n    // Undo, redo\n    \"Undo\": \"Rückgängig\",\n    \"Redo\": \"Wiederholen\",\n\n    // Select all\n    \"Select All\": \"Alles auswählen\",\n\n    // Code view\n    \"Code View\": \"Code-Ansicht\",\n\n    // Quote\n    \"Quote\": \"Zitieren\",\n    \"Increase\": \"Vergrößern\",\n    \"Decrease\": \"Verkleinern\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Schnell einfügen\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Sonderzeichen\",\n    \"Latin\": \"Lateinisch\",\n    \"Greek\": \"Griechisch\",\n    \"Cyrillic\": \"Kyrillisch\",\n    \"Punctuation\": \"Satzzeichen\",\n    \"Currency\": \"Währung\",\n    \"Arrows\": \"Pfeile\",\n    \"Math\": \"Mathematik\",\n    \"Misc\": \"Sonstige\",\n\n    // Print.\n    \"Print\": \"Drucken\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Rechtschreibprüfung\",\n\n    // Help\n    \"Help\": \"Hilfe\",\n    \"Shortcuts\": \"Verknüpfungen\",\n    \"Inline Editor\": \"Inline-Editor\",\n    \"Show the editor\": \"Editor anzeigen\",\n    \"Common actions\": \"Häufig verwendete Befehle\",\n    \"Copy\": \"Kopieren\",\n    \"Cut\": \"Ausschneiden\",\n    \"Paste\": \"Einfügen\",\n    \"Basic Formatting\": \"Grundformatierung\",\n    \"Increase quote level\": \"Zitatniveau erhöhen\",\n    \"Decrease quote level\": \"Zitatniveau verringern\",\n    \"Image / Video\": \"Bild / Video\",\n    \"Resize larger\": \"Vergrößern\",\n    \"Resize smaller\": \"Verkleinern\",\n    \"Table\": \"Tabelle\",\n    \"Select table cell\": \"Tabellenzelle auswählen\",\n    \"Extend selection one cell\": \"Erweitere Auswahl um eine Zelle\",\n    \"Extend selection one row\": \"Erweitere Auswahl um eine Zeile\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Fokus-Popup / Symbolleiste\",\n    \"Return focus to previous position\": \"Fokus auf vorherige Position\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL einbetten\",\n    \"Paste in a URL to embed\": \"URL einfügen um sie einzubetten\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Der eingefügte Inhalt kommt aus einem Microsoft Word-Dokument. Möchten Sie die Formatierungen behalten oder verwerfen?\",\n    \"Keep\": \"Behalten\",\n    \"Clean\": \"Bereinigen\",\n    \"Word Paste Detected\": \"Aus Word einfügen\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/el.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Arabic\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['el'] = {\n  translation: {\n// Place holder\n    \"Type something\": \"Εισάγετε κείμενο\",\n\n    // Basic formatting\n    \"Bold\": \"Έντονα\",\n    \"Italic\": \"Πλάγια\",\n    \"Underline\": \"Υπογραμμισμένα\",\n    \"Strikethrough\": \"Διαγραμμένα\",\n\n    // Main buttons\n    \"Insert\": \"Εισαγωγή\",\n    \"Delete\": \"Διαγραφή\",\n    \"Cancel\": \"Ακύρωση\",\n    \"OK\": \"OK\",\n    \"Back\": \"Πίσω\",\n    \"Remove\": \"Αφαίρεση\",\n    \"More\": \"Περισσότερα\",\n    \"Update\": \"Ενημέρωση\",\n    \"Style\": \"Εξατομίκευση\",\n\n    // Font\n    \"Font Family\": \"Γραμματοσειρά\",\n    \"Font Size\": \"Μέγεθος\",\n\n    // Colors\n    \"Colors\": \"Χρώματα\",\n    \"Background\": \"Φόντο\",\n    \"Text\": \"Κείμενο\",\n    \"HEX Color\": \"Χρώμα HEX\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Μορφή παραγράφου\",\n    \"Normal\": \"Κανονική\",\n    \"Code\": \"Κώδικας\",\n    \"Heading 1\": \"Επικεφαλίδα 1\",\n    \"Heading 2\": \"Επικεφαλίδα 2\",\n    \"Heading 3\": \"Επικεφαλίδα 3\",\n    \"Heading 4\": \"Επικεφαλίδα 4\",\n\n    // Style\n    \"Paragraph Style\": \"Εξατομίκευση παραγράφου\",\n  \t\"Gray\": \"Γκρι\",\n  \t\"Spaced\": \"Αραιά\",\n  \t\"Uppercase\": \"Κεφαλαία\",\n    \"Inline Style\": \"Ενσωματωμένος τύπος\",\n\n    // Alignment\n    \"Align\": \"Ευθυγράμμιση\",\n    \"Align Left\": \"Αριστερά\",\n    \"Align Center\": \"Κέντρο\",\n    \"Align Right\": \"Δεξιά\",\n    \"Align Justify\": \"Γέμισμα\",\n    \"None\": \"Χωρίς ευθυγράμμιση\",\n\n    // Lists\n    \"Ordered List\": \"Διεταγμένη λίστα\",\n    \"Default\": \"Προκαθορισμένο\",\n    \"Lower Alpha\": \"Χαμηλότερο άλφα\",\n    \"Lower Greek\": \"Κάτω ελληνικά\",\n    \"Lower Roman\": \"Χαμηλότερο ρωμαϊκό\",\n    \"Upper Alpha\": \"Ανώτερο άλφα\",\n    \"Upper Roman\": \"Ανώτερο ρωμαϊκό\",\n\n    \"Unordered List\": \"Αναδιάταχτη λίστα\",\n    \"Circle\": \"Κύκλος\",\n    \"Disc\": \"Δίσκος\",\n    \"Square\": \"Τετράγωνο\",\n\n    // Line height\n    \"Line Height\": \"Ύψος γραμμής\",\n    \"Single\": \"Μονόκλινο\",\n    \"Double\": \"Διπλό\",\n\n    // Indent\n    \"Decrease Indent\": \"Μείωση πλαισίου\",\n    \"Increase Indent\": \"Αύξηση πλαισίου\",\n\n    // Links\n    \"Insert Link\": \"Εισαγωγή συνδέσμου\",\n    \"Open in new tab\": \"Άνοιγμα σε νέα καρτέλα\",\n    \"Open Link\": \"Άνοιγμα συνδέσμου\",\n    \"Edit Link\": \"Επεξεργασία συνδέσμου\",\n    \"Unlink\": \"Αποσύνδεση\",\n    \"Choose Link\": \"Επιλογή συνδέσμου\",\n\n    // Images\n    \"Insert Image\": \"Εισαγωγή εικόνας\",\n    \"Upload Image\": \"Ανέβασμα εικόνας\",\n    \"By URL\": \"Από URL\",\n    \"Browse\": \"Περιήγηση\",\n    \"Drop image\": \"Σύρετε εικόνα\",\n    \"or click\": \"ή κάντε κλικ\",\n    \"Manage Images\": \"Διαχείριση εικόνων\",\n    \"Loading\": \"Φόρτωση\",\n    \"Deleting\": \"Διαγραφή\",\n    \"Tags\": \"Ετικέτες\",\n    \"Are you sure? Image will be deleted.\": \"Σίγουρα; Η εικόνα θα διαγραφεί.\",\n    \"Replace\": \"Αντικατάσταση\",\n    \"Uploading\": \"Ανέβασμα\",\n    \"Loading image\": \"Φόρτωση εικόνας\",\n    \"Display\": \"Προβολή\",\n    \"Inline\": \"Ενσωματωμένη\",\n    \"Break Text\": \"Σπάσιμο κειμένου\",\n    \"Alternative Text\": \"Εναλλακτικό κείμενο\",\n    \"Change Size\": \"Αλλαγή μεγέθους\",\n    \"Width\": \"Πλάτος\",\n    \"Height\": \"Ύψος\",\n    \"Something went wrong. Please try again.\": \"Κάτι πήγε στραβά. Προσπαθήστε ξανά.\",\n    \"Image Caption\": \"Λεζάντα εικόνας\",\n    \"Advanced Edit\": \"Προχωρημένη επεξεργασία\",\n\t\"Rounded\": \"Κυκλικός\",\n\t\"Bordered\": \"Πλαίσιο\",\n\t\"Shadow\": \"Σκια\",\n\n    // Video\n    \"Insert Video\": \"Εισαγωγή βίντεο\",\n    \"Embedded Code\": \"Ενσωμάτωση κώδικα\",\n    \"Paste in a video URL\": \"Εισαγωγή URL βίντεο\",\n    \"Drop video\": \"Σύρετε βίντεο\",\n    \"Your browser does not support HTML5 video.\": \"Ο περιηγητής σας δεν υποστηρίζει βίντεο τύπου HTML5.\",\n    \"Upload Video\": \"Ανέβασμα βίντεο\",\n\n    // Tables\n    \"Insert Table\": \"Εισαγωγή πίνακα\",\n    \"Table Header\": \"Επικεφαλίδα πίνακα\",\n    \"Remove Table\": \"Αφαίρεση πίνακα\",\n    \"Table Style\": \"Εξατομίκευση πίνακα\",\n    \"Horizontal Align\": \"Οριζόντια ευθυγράμμιση\",\n    \"Row\": \"Σειρά\",\n    \"Insert row above\": \"Εισαγωγή σειράς από πάνω\",\n    \"Insert row below\": \"Εισαγωγή σειράς από κάτω\",\n    \"Delete row\": \"Διαγραφή σειράς\",\n    \"Column\": \"Στήλη\",\n    \"Insert column before\": \"Εισαγωγή στήλης πριν\",\n    \"Insert column after\": \"Εισαγωγή στήλης μετά\",\n    \"Delete column\": \"Διαγραφή στήλης\",\n    \"Cell\": \"Κελί\",\n    \"Merge cells\": \"Συγχώνευση κελιών\",\n    \"Horizontal split\": \"Οριζόντος διαχωρισμός\",\n    \"Vertical split\": \"Κατακόρυφος διαχωρισμός\",\n    \"Cell Background\": \"Φόντο κελιού\",\n    \"Vertical Align\": \"Κατακόρυφη ευθυγράμμιση\",\n    \"Top\": \"Κορυφή\",\n    \"Middle\": \"Μέση\",\n    \"Bottom\": \"Βάθος\",\n    \"Align Top\": \"Ευθυγράμμιση κορυφής\",\n    \"Align Middle\": \"Ευθυγράμμιση μέσης\",\n    \"Align Bottom\": \"Ευθυγράμμιση βάθους\",\n    \"Cell Style\": \"Εξατομίκευση κελιού\",\n\n    // Files\n    \"Upload File\": \"Ανέβασμα αρχείου\",\n    \"Drop file\": \"Σύρετε αρχείο\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Γέλιο\",\n    \"Grinning face with smiling eyes\": \"Γέλιο με γελαστά μάτια\",\n    \"Face with tears of joy\": \"Δάκρυα γέλιου (LOL)\",\n    \"Smiling face with open mouth\": \"Χαμόγελο με ανοιχτό στόμα\",\n    \"Smiling face with open mouth and smiling eyes\": \"Χαμόγελο με ανοιχτό στόμα και γελαστά μάτια\",\n    \"Smiling face with open mouth and cold sweat\": \"Χαμόγελο με ανοιχτό στόμα και σταγόνα ιδρώτα\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Χαμόγελο με ανοιχτό στόμα και σφιχτά κλεισμένα μάτια\",\n    \"Smiling face with halo\": \"Χαμόγελο με φωτοστέφανο\",\n    \"Smiling face with horns\": \"Χαμογελαστό διαβολάκι\",\n    \"Winking face\": \"Κλείσιμο ματιού\",\n    \"Smiling face with smiling eyes\": \"Χαμόγελο με γελαστά μάτια\",\n    \"Face savoring delicious food\": \"Νόστιμο\",\n    \"Relieved face\": \"Ανακούφιση\",\n    \"Smiling face with heart-shaped eyes\": \"Χαμόγελο με μάτια σε σχήμα καρδιάς\",\n    \"Smiling face with sunglasses\": \"Χαμόγελο με γυαλιά ηλίου\",\n    \"Smirking face\": \"Ειρωνία\",\n    \"Neutral face\": \"Ουδέτερο\",\n    \"Expressionless face\": \"Ανέκφραστο\",\n    \"Unamused face\": \"Αψυχαγώγητο\",\n    \"Face with cold sweat\": \"Σταγόνα ιδρώτα\",\n    \"Pensive face\": \"Σκεπτικό\",\n    \"Confused face\": \"Σύγχιση\",\n    \"Confounded face\": \"Ακράτεια\",\n    \"Kissing face\": \"Φιλί\",\n    \"Face throwing a kiss\": \"Πάσα φιλιού\",\n    \"Kissing face with smiling eyes\": \"Φιλί με γελαστά μάτια\",\n    \"Kissing face with closed eyes\": \"Φιλί με κλειστά μάτια\",\n    \"Face with stuck out tongue\": \"Γλώσσα\",\n    \"Face with stuck out tongue and winking eye\": \"Γλώσσα με κλείσιμο ματιού\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Γλώσσα με σφιχτά κλεισμένα μάτια\",\n    \"Disappointed face\": \"Απογοήτευση\",\n    \"Worried face\": \"Ανυσηχία\",\n    \"Angry face\": \"Θυμός\",\n    \"Pouting face\": \"Έξαλλο\",\n    \"Crying face\": \"Κλάμα θυμού\",\n    \"Persevering face\": \"Έτοιμο να εκραγεί\",\n    \"Face with look of triumph\": \"Θρίαμβος\",\n    \"Disappointed but relieved face\": \"Απογοήτευση με ανακούφιση\",\n    \"Frowning face with open mouth\": \"Απορία\",\n    \"Anguished face\": \"Αγωνία\",\n    \"Fearful face\": \"Φόβος\",\n    \"Weary face\": \"Κούραση\",\n    \"Sleepy face\": \"Εξάντληση\",\n    \"Tired face\": \"Γκρίνια\",\n    \"Grimacing face\": \"Γκριμάτσα\",\n    \"Loudly crying face\": \"Δυνατό κλάμα\",\n    \"Face with open mouth\": \"Έκπληξη\",\n    \"Hushed face\": \"Σιωπή\",\n    \"Face with open mouth and cold sweat\": \"Έκπληξη με ιδρώτα\",\n    \"Face screaming in fear\": \"Πανικός\",\n    \"Astonished face\": \"Ηλίθιο\",\n    \"Flushed face\": \"Ντροπαλό\",\n    \"Sleeping face\": \"Ύπνος\",\n    \"Dizzy face\": \"Ζαλάδα\",\n    \"Face without mouth\": \"Άφωνο\",\n    \"Face with medical mask\": \"Νοσηλευτική μάσκα\",\n\n    // Line breaker\n    \"Break\": \"Σπάσιμο\",\n\n    // Math\n    \"Subscript\": \"Υποκείμενο\",\n    \"Superscript\": \"Υπερκείμενο\",\n\n    // Full screen\n    \"Fullscreen\": \"Πλήρης οθόνη\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Εισαγωγή οριζόντιας γραμμής\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Εκαθάριση μορφοποίησης\",\n\n    // Save\n    \"Save\": \"Αποθηκεύσετε\",\n\n    // Undo, redo\n    \"Undo\": \"Αναίρεση\",\n    \"Redo\": \"Επανάληψη\",\n\n    // Select all\n    \"Select All\": \"Επιλογή Όλων\",\n\n    // Code view\n    \"Code View\": \"Προβολή Κώδικα\",\n\n    // Quote\n    \"Quote\": \"Απόσπασμα\",\n    \"Increase\": \"Αύξηση\",\n    \"Decrease\": \"Μείωση\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Γρήγορη εισαγωγή\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Ειδικοί χαρακτήρες\",\n    \"Latin\": \"Λατινικοί\",\n    \"Greek\": \"Ελληνικοί\",\n    \"Cyrillic\": \"Κρυλλικοί\",\n    \"Punctuation\": \"Σημεία στήξης\",\n    \"Currency\": \"Συνάλλαγμα\",\n    \"Arrows\": \"Βέλη\",\n    \"Math\": \"Μαθηματικά\",\n    \"Misc\": \"Διάφοροι\",\n\n    // Print.\n    \"Print\": \"Εκτύπωση\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Έλεγχος ορθογραφίας\",\n\n    // Help\n    \"Help\": \"Βοήθεια\",\n    \"Shortcuts\": \"Συντομεύσεις\",\n    \"Inline Editor\": \"Ενσωματωμένος επεξεργαστής\",\n    \"Show the editor\": \"Εμφάνιση επεξεργαστή\",\n    \"Common actions\": \"Κοινές ενέργειες\",\n    \"Copy\": \"Αντιγραφή\",\n    \"Cut\": \"Αποκοπή\",\n    \"Paste\": \"Επικόλληση\",\n    \"Basic Formatting\": \"Βασική διαμόρφωση\",\n    \"Increase quote level\": \"Αύξηση επιπέδου αποσπάσματος\",\n    \"Decrease quote level\": \"Μείωση επιπέδου αποσπάσματος\",\n    \"Image / Video\": \"Εικόνα / Βίντεο\",\n    \"Resize larger\": \"Αύξηση μεγέθους\",\n    \"Resize smaller\": \"Μείωση μεγέθους\",\n    \"Table\": \"Πίνακας\",\n    \"Select table cell\": \"Επιλογή κελιού από πίνακα\",\n    \"Extend selection one cell\": \"Επέκταση επιλογής κατά ένα κελί\",\n    \"Extend selection one row\": \"Επέκταση επιλογής κατά μια σειρά\",\n    \"Navigation\": \"Πλοήγηση\",\n    \"Focus popup / toolbar\": \"Εστίαση αναδυόμενου / εργαλειοθήκης\",\n    \"Return focus to previous position\": \"Επιστροφή εστίασης στην προηγούμενη θέση\",\n\n    // Embed.ly\n    \"Embed URL\": \"Ενσωμάτωση URL\",\n    \"Paste in a URL to embed\": \"Εισάγετε ένα URL για ενσωμάτωση\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Το περιεχόμενο που επικολλήσατε προέρχεται από ένα έγγραφο του Microsoft Word. Θέλετε να διατηρήσετε το έγγραφο ή να το καταργήσετε;\",\n    \"Keep\": \"Διατήρηση\",\n    \"Clean\": \"Κατάργηση\",\n    \"Word Paste Detected\": \"Εντοπίστηκε επικόλληση από αρχείο Word\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/en_ca.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * English spoken in Canada\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['en_ca'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Type something\",\n\n    // Basic formatting\n    \"Bold\": \"Bold\",\n    \"Italic\": \"Italic\",\n    \"Underline\": \"Underline\",\n    \"Strikethrough\": \"Strikethrough\",\n\n    // Main buttons\n    \"Insert\": \"Insert\",\n    \"Delete\": \"Delete\",\n    \"Cancel\": \"Cancel\",\n    \"OK\": \"OK\",\n    \"Back\": \"Back\",\n    \"Remove\": \"Remove\",\n    \"More\": \"More\",\n    \"Update\": \"Update\",\n    \"Style\": \"Style\",\n\n    // Font\n    \"Font Family\": \"Font Family\",\n    \"Font Size\": \"Font Size\",\n\n    // Colors\n    \"Colors\": \"Colours\",\n    \"Background\": \"Background\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"HEX Colour\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragraph Format\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Heading 1\",\n    \"Heading 2\": \"Heading 2\",\n    \"Heading 3\": \"Heading 3\",\n    \"Heading 4\": \"Heading 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraph Style\",\n    \"Inline Style\": \"Inline Style\",\n\n    // Alignment\n    \"Align\": \"Align\",\n    \"Align Left\": \"Align Left\",\n    \"Align Center\": \"Align Centre\",\n    \"Align Right\": \"Align Right\",\n    \"Align Justify\": \"Align Justify\",\n    \"None\": \"None\",\n\n    // Lists\n    \"Ordered List\": \"Ordered List\",\n    \"Default\": \"\",\n    \"Lower Alpha\": \"Lower Alpha\",\n    \"Lower Greek\": \"Lower Greek\",\n    \"Lower Roman\": \"Lower Roman\",\n    \"Upper Alpha\": \"Upper Alpha\",\n    \"Upper Roman\": \"Upper Roman\",\n\n    \"Unordered List\": \"Unordered List\",\n    \"Circle\": \"Circle\",\n    \"Disc\": \"Disc\",\n    \"Square\": \"Square\",\n\n    // Line height\n    \"Line Height\": \"Line Height\",\n    \"Single\": \"Single\",\n    \"Double\": \"Double\",\n\n    // Indent\n    \"Decrease Indent\": \"Decrease Indent\",\n    \"Increase Indent\": \"Increase Indent\",\n\n    // Links\n    \"Insert Link\": \"Insert Link\",\n    \"Open in new tab\": \"Open in new tab\",\n    \"Open Link\": \"Open Link\",\n    \"Edit Link\": \"Edit Link\",\n    \"Unlink\": \"Unlink\",\n    \"Choose Link\": \"Choose Link\",\n\n    // Images\n    \"Insert Image\": \"Insert Image\",\n    \"Upload Image\": \"Upload Image\",\n    \"By URL\": \"By URL\",\n    \"Browse\": \"Browse\",\n    \"Drop image\": \"Drop image\",\n    \"or click\": \"or click\",\n    \"Manage Images\": \"Manage Images\",\n    \"Loading\": \"Loading\",\n    \"Deleting\": \"Deleting\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Are you sure? Image will be deleted.\",\n    \"Replace\": \"Replace\",\n    \"Uploading\": \"Uploading\",\n    \"Loading image\": \"Loading image\",\n    \"Display\": \"Display\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Break Text\",\n    \"Alternative Text\": \"Alternative Text\",\n    \"Change Size\": \"Change Size\",\n    \"Width\": \"Width\",\n    \"Height\": \"Height\",\n    \"Something went wrong. Please try again.\": \"Something went wrong. Please try again.\",\n    \"Image Caption\": \"Image Caption\",\n    \"Advanced Edit\": \"Advanced Edit\",\n\n    // Video\n    \"Insert Video\": \"Insert Video\",\n    \"Embedded Code\": \"Embedded Code\",\n    \"Paste in a video URL\": \"Paste in a video URL\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Your browser does not support HTML5 video.\",\n    \"Upload Video\": \"Upload Video\",\n\n    // Tables\n    \"Insert Table\": \"Insert Table\",\n    \"Table Header\": \"Table Header\",\n    \"Remove Table\": \"Remove Table\",\n    \"Table Style\": \"Table Style\",\n    \"Horizontal Align\": \"Horizontal Align\",\n    \"Row\": \"Row\",\n    \"Insert row above\": \"Insert row above\",\n    \"Insert row below\": \"Insert row below\",\n    \"Delete row\": \"Delete row\",\n    \"Column\": \"Column\",\n    \"Insert column before\": \"Insert column before\",\n    \"Insert column after\": \"Insert column after\",\n    \"Delete column\": \"Delete column\",\n    \"Cell\": \"Cell\",\n    \"Merge cells\": \"Merge cells\",\n    \"Horizontal split\": \"Horizontal split\",\n    \"Vertical split\": \"Vertical split\",\n    \"Cell Background\": \"Cell Background\",\n    \"Vertical Align\": \"Vertical Align\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Middle\",\n    \"Bottom\": \"Bottom\",\n    \"Align Top\": \"Align Top\",\n    \"Align Middle\": \"Align Middle\",\n    \"Align Bottom\": \"Align Bottom\",\n    \"Cell Style\": \"Cell Style\",\n\n    // Files\n    \"Upload File\": \"Upload File\",\n    \"Drop file\": \"Drop file\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n\n    // Line breaker\n    \"Break\": \"Break\",\n\n    // Math\n    \"Subscript\": \"Subscript\",\n    \"Superscript\": \"Superscript\",\n\n    // Full screen\n    \"Fullscreen\": \"Fullscreen\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Insert Horizontal Line\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Clear Formatting\",\n\n    // Save\n    \"Save\": \"Save\",\n\n    // Undo, redo\n    \"Undo\": \"Undo\",\n    \"Redo\": \"Redo\",\n\n    // Select all\n    \"Select All\": \"Select All\",\n\n    // Code view\n    \"Code View\": \"Code View\",\n\n    // Quote\n    \"Quote\": \"Quote\",\n    \"Increase\": \"Increase\",\n    \"Decrease\": \"Decrease\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Quick Insert\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Special Characters\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Greek\",\n    \"Cyrillic\": \"Cyrillic\",\n    \"Punctuation\": \"Punctuation\",\n    \"Currency\": \"Currency\",\n    \"Arrows\": \"Arrows\",\n    \"Math\": \"Math\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Spell Checker\",\n\n    // Help\n    \"Help\": \"Help\",\n    \"Shortcuts\": \"Shortcuts\",\n    \"Inline Editor\": \"Inline Editor\",\n    \"Show the editor\": \"Show the editor\",\n    \"Common actions\": \"Common actions\",\n    \"Copy\": \"Copy\",\n    \"Cut\": \"Cut\",\n    \"Paste\": \"Paste\",\n    \"Basic Formatting\": \"Basic Formatting\",\n    \"Increase quote level\": \"Increase quote level\",\n    \"Decrease quote level\": \"Decrease quote level\",\n    \"Image / Video\": \"Image / Video\",\n    \"Resize larger\": \"Resize larger\",\n    \"Resize smaller\": \"Resize smaller\",\n    \"Table\": \"Table\",\n    \"Select table cell\": \"Select table cell\",\n    \"Extend selection one cell\": \"Extend selection one cell\",\n    \"Extend selection one row\": \"Extend selection one row\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Return focus to previous position\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed URL\",\n    \"Paste in a URL to embed\": \"Paste in a URL to embed\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\",\n    \"Keep\": \"Keep\",\n    \"Clean\": \"Clean\",\n    \"Word Paste Detected\": \"Word Paste Detected\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/en_gb.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * English spoken in Great Britain\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['en_gb'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Type something\",\n\n    // Basic formatting\n    \"Bold\": \"Bold\",\n    \"Italic\": \"Italic\",\n    \"Underline\": \"Underline\",\n    \"Strikethrough\": \"Strikethrough\",\n\n    // Main buttons\n    \"Insert\": \"Insert\",\n    \"Delete\": \"Delete\",\n    \"Cancel\": \"Cancel\",\n    \"OK\": \"OK\",\n    \"Back\": \"Back\",\n    \"Remove\": \"Remove\",\n    \"More\": \"More\",\n    \"Update\": \"Update\",\n    \"Style\": \"Style\",\n\n    // Font\n    \"Font Family\": \"Font Family\",\n    \"Font Size\": \"Font Size\",\n\n    // Colors\n    \"Colors\": \"Colours\",\n    \"Background\": \"Background\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"HEX Colour\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragraph Format\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Heading 1\",\n    \"Heading 2\": \"Heading 2\",\n    \"Heading 3\": \"Heading 3\",\n    \"Heading 4\": \"Heading 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraph Style\",\n    \"Inline Style\": \"Inline Style\",\n\n    // Alignment\n    \"Align\": \"Align\",\n    \"Align Left\": \"Align Left\",\n    \"Align Center\": \"Align Centre\",\n    \"Align Right\": \"Alight Right\",\n    \"Align Justify\": \"Align Justify\",\n    \"None\": \"None\",\n\n    // Lists\n    \"Ordered List\": \"Ordered List\",\n    \"Default\": \"\",\n    \"Lower Alpha\": \"Lower Alpha\",\n    \"Lower Greek\": \"Lower Greek\",\n    \"Lower Roman\": \"Lower Roman\",\n    \"Upper Alpha\": \"Upper Alpha\",\n    \"Upper Roman\": \"Upper Roman\",\n\n    \"Unordered List\": \"Unordered List\",\n    \"Circle\": \"Circle\",\n    \"Disc\": \"Disc\",\n    \"Square\": \"Square\",\n\n    // Line height\n    \"Line Height\": \"Line Height\",\n    \"Single\": \"Single\",\n    \"Double\": \"Double\",\n\n    // Indent\n    \"Decrease Indent\": \"Decrease Indent\",\n    \"Increase Indent\": \"Increase Indent\",\n\n    // Links\n    \"Insert Link\": \"Insert Link\",\n    \"Open in new tab\": \"Open in new tab\",\n    \"Open Link\": \"Open Link\",\n    \"Edit Link\": \"Edit Link\",\n    \"Unlink\": \"Unlink\",\n    \"Choose Link\": \"Choose Link\",\n\n    // Images\n    \"Insert Image\": \"Insert Image\",\n    \"Upload Image\": \"Upload Image\",\n    \"By URL\": \"By URL\",\n    \"Browse\": \"Browse\",\n    \"Drop image\": \"Drop image\",\n    \"or click\": \"or click\",\n    \"Manage Images\": \"Manage Images\",\n    \"Loading\": \"Loading\",\n    \"Deleting\": \"Deleting\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Are you sure? Image will be deleted.\",\n    \"Replace\": \"Replace\",\n    \"Uploading\": \"Uploading\",\n    \"Loading image\": \"Loading image\",\n    \"Display\": \"Display\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Break Text\",\n    \"Alternative Text\": \"Alternative Text\",\n    \"Change Size\": \"Change Size\",\n    \"Width\": \"Width\",\n    \"Height\": \"Height\",\n    \"Something went wrong. Please try again.\": \"Something went wrong. Please try again.\",\n    \"Image Caption\": \"Image Caption\",\n    \"Advanced Edit\": \"Advanced Edit\",\n\n    // Video\n    \"Insert Video\": \"Insert Video\",\n    \"Embedded Code\": \"Embedded Code\",\n    \"Paste in a video URL\": \"Paste in a video URL\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Your browser does not support HTML5 video.\",\n    \"Upload Video\": \"Upload Video\",\n\n    // Tables\n    \"Insert Table\": \"Insert Table\",\n    \"Table Header\": \"Table Header\",\n    \"Remove Table\": \"Remove Table\",\n    \"Table Style\": \"Table Style\",\n    \"Horizontal Align\": \"Horizontal Align\",\n    \"Row\": \"Row\",\n    \"Insert row above\": \"Insert row above\",\n    \"Insert row below\": \"Insert row below\",\n    \"Delete row\": \"Delete row\",\n    \"Column\": \"Column\",\n    \"Insert column before\": \"Insert column before\",\n    \"Insert column after\": \"Insert column after\",\n    \"Delete column\": \"Delete column\",\n    \"Cell\": \"Cell\",\n    \"Merge cells\": \"Merge cells\",\n    \"Horizontal split\": \"Horizontal split\",\n    \"Vertical split\": \"Vertical split\",\n    \"Cell Background\": \"Cell Background\",\n    \"Vertical Align\": \"Vertical Align\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Middle\",\n    \"Bottom\": \"Bottom\",\n    \"Align Top\": \"Align Top\",\n    \"Align Middle\": \"Align Middle\",\n    \"Align Bottom\": \"Align Bottom\",\n    \"Cell Style\": \"Cell Style\",\n\n    // Files\n    \"Upload File\": \"Upload File\",\n    \"Drop file\": \"Drop file\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n\n    // Line breaker\n    \"Break\": \"Break\",\n\n    // Math\n    \"Subscript\": \"Subscript\",\n    \"Superscript\": \"Superscript\",\n\n    // Full screen\n    \"Fullscreen\": \"Fullscreen\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Insert Horizontal Line\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Clear Formatting\",\n\n    // Save\n    \"Save\": \"Save\",\n\n    // Undo, redo\n    \"Undo\": \"Undo\",\n    \"Redo\": \"Redo\",\n\n    // Select all\n    \"Select All\": \"Select All\",\n\n    // Code view\n    \"Code View\": \"Code View\",\n\n    // Quote\n    \"Quote\": \"Quote\",\n    \"Increase\": \"Increase\",\n    \"Decrease\": \"Decrease\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Quick Insert\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Special Characters\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Greek\",\n    \"Cyrillic\": \"Cyrillic\",\n    \"Punctuation\": \"Punctuation\",\n    \"Currency\": \"Currency\",\n    \"Arrows\": \"Arrows\",\n    \"Math\": \"Math\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Spell Checker\",\n\n    // Help\n    \"Help\": \"Help\",\n    \"Shortcuts\": \"Shortcuts\",\n    \"Inline Editor\": \"Inline Editor\",\n    \"Show the editor\": \"Show the editor\",\n    \"Common actions\": \"Common actions\",\n    \"Copy\": \"Copy\",\n    \"Cut\": \"Cut\",\n    \"Paste\": \"Paste\",\n    \"Basic Formatting\": \"Basic Formatting\",\n    \"Increase quote level\": \"Increase quote level\",\n    \"Decrease quote level\": \"Decrease quote level\",\n    \"Image / Video\": \"Image / Video\",\n    \"Resize larger\": \"Resize larger\",\n    \"Resize smaller\": \"Resize smaller\",\n    \"Table\": \"Table\",\n    \"Select table cell\": \"Select table cell\",\n    \"Extend selection one cell\": \"Extend selection one cell\",\n    \"Extend selection one row\": \"Extend selection one row\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Return focus to previous position\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed URL\",\n    \"Paste in a URL to embed\": \"Paste in a URL to embed\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\",\n    \"Keep\": \"Keep\",\n    \"Clean\": \"Clean\",\n    \"Word Paste Detected\": \"Word Paste Detected\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/es.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Spanish\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['es'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Escriba algo\",\n\n    // Basic formatting\n    \"Bold\": \"Negrita\",\n    \"Italic\": \"It\\u00e1lica\",\n    \"Underline\": \"Subrayado\",\n    \"Strikethrough\": \"Tachado\",\n\n    // Main buttons\n    \"Insert\": \"Insertar\",\n    \"Delete\": \"Borrar\",\n    \"Cancel\": \"Cancelar\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Atr\\u00e1s\",\n    \"Remove\": \"Quitar\",\n    \"More\": \"M\\u00e1s\",\n    \"Update\": \"Actualizaci\\u00f3n\",\n    \"Style\": \"Estilo\",\n\n    // Font\n    \"Font Family\": \"Familia de fuentes\",\n    \"Font Size\": \"Tama\\u00f1o de fuente\",\n\n    // Colors\n    \"Colors\": \"Colores\",\n    \"Background\": \"Fondo\",\n    \"Text\": \"Texto\",\n    \"HEX Color\": \"Color hexadecimal\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formato de p\\u00e1rrafo\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"C\\u00f3digo\",\n    \"Heading 1\": \"Encabezado 1\",\n    \"Heading 2\": \"Encabezado 2\",\n    \"Heading 3\": \"Encabezado 3\",\n    \"Heading 4\": \"Encabezado 4\",\n\n    // Style\n    \"Paragraph Style\": \"Estilo de p\\u00e1rrafo\",\n    \"Inline Style\": \"Estilo en l\\u00ednea\",\n\n    // Alignment\n    \"Align\": \"Alinear\",\n    \"Align Left\": \"Alinear a la izquierda\",\n    \"Align Center\": \"Alinear al centro\",\n    \"Align Right\": \"Alinear a la derecha\",\n    \"Align Justify\": \"Justificar\",\n    \"None\": \"Ninguno\",\n\n    // Lists\n    \"Ordered List\": \"Lista ordenada\",\n    \"Default\": \"Defecto\",\n    \"Lower Alpha\": \"Alfa inferior\",\n    \"Lower Greek\": \"Griego inferior\",\n    \"Lower Roman\": \"Baja romana\",\n    \"Upper Alpha\": \"Alfa superior\",\n    \"Upper Roman\": \"Romano superior\",\n\n    \"Unordered List\": \"Lista desordenada\",\n    \"Circle\": \"Circulo\",\n    \"Disc\": \"Dto\",\n    \"Square\": \"Cuadrado\",\n\n    // Line height\n    \"Line Height\": \"Altura de la línea\",\n    \"Single\": \"Soltero\",\n    \"Double\": \"Doble\",\n\n    // Indent\n    \"Decrease Indent\": \"Reducir sangr\\u00eda\",\n    \"Increase Indent\": \"Aumentar sangr\\u00eda\",\n\n    // Links\n    \"Insert Link\": \"Insertar enlace\",\n    \"Open in new tab\": \"Abrir en una nueva pesta\\u00F1a\",\n    \"Open Link\": \"Abrir enlace\",\n    \"Edit Link\": \"Editar enlace\",\n    \"Unlink\": \"Quitar enlace\",\n    \"Choose Link\": \"Elegir enlace\",\n\n    // Images\n    \"Insert Image\": \"Insertar imagen\",\n    \"Upload Image\": \"Cargar imagen\",\n    \"By URL\": \"Por URL\",\n    \"Browse\": \"Examinar\",\n    \"Drop image\": \"Soltar la imagen\",\n    \"or click\": \"o haga clic en\",\n    \"Manage Images\": \"Administrar im\\u00e1genes\",\n    \"Loading\": \"Cargando\",\n    \"Deleting\": \"Borrado\",\n    \"Tags\": \"Etiquetas\",\n    \"Are you sure? Image will be deleted.\": \"\\u00bfEst\\u00e1 seguro? Imagen ser\\u00e1 borrada.\",\n    \"Replace\": \"Reemplazar\",\n    \"Uploading\": \"Carga\",\n    \"Loading image\": \"Cargando imagen\",\n    \"Display\": \"Mostrar\",\n    \"Inline\": \"En l\\u00ednea\",\n    \"Break Text\": \"Romper texto\",\n    \"Alternative Text\": \"Texto alternativo\",\n    \"Change Size\": \"Cambiar tama\\u00f1o\",\n    \"Width\": \"Ancho\",\n    \"Height\": \"Altura\",\n    \"Something went wrong. Please try again.\": \"Algo sali\\u00f3 mal. Por favor, vuelva a intentarlo.\",\n    \"Image Caption\": \"Captura de imagen\",\n    \"Advanced Edit\": \"Edición avanzada\",\n\n    // Video\n    \"Insert Video\": \"Insertar video\",\n    \"Embedded Code\": \"C\\u00f3digo incrustado\",\n    \"Paste in a video URL\": \"Pegar en una URL de video\",\n    \"Drop video\": \"Soltar video\",\n    \"Your browser does not support HTML5 video.\": \"Su navegador no es compatible con video html5.\",\n    \"Upload Video\": \"Subir video\",\n\n    // Tables\n    \"Insert Table\": \"Insertar tabla\",\n    \"Table Header\": \"Encabezado de la tabla\",\n    \"Remove Table\": \"Retire la tabla\",\n    \"Table Style\": \"Estilo de tabla\",\n    \"Horizontal Align\": \"Alinear horizontal\",\n    \"Row\": \"Fila\",\n    \"Insert row above\": \"Insertar fila antes\",\n    \"Insert row below\": \"Insertar fila despu\\u00e9s\",\n    \"Delete row\": \"Eliminar fila\",\n    \"Column\": \"Columna\",\n    \"Insert column before\": \"Insertar columna antes\",\n    \"Insert column after\": \"Insertar columna despu\\u00e9s\",\n    \"Delete column\": \"Eliminar columna\",\n    \"Cell\": \"Celda\",\n    \"Merge cells\": \"Combinar celdas\",\n    \"Horizontal split\": \"Divisi\\u00f3n horizontal\",\n    \"Vertical split\": \"Divisi\\u00f3n vertical\",\n    \"Cell Background\": \"Fondo de la celda\",\n    \"Vertical Align\": \"Alinear vertical\",\n    \"Top\": \"Cima\",\n    \"Middle\": \"Medio\",\n    \"Bottom\": \"Del fondo\",\n    \"Align Top\": \"Alinear a la parte superior\",\n    \"Align Middle\": \"Alinear media\",\n    \"Align Bottom\": \"Alinear abajo\",\n    \"Cell Style\": \"Estilo de celda\",\n\n    // Files\n    \"Upload File\": \"Subir archivo\",\n    \"Drop file\": \"Soltar archivo\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticones\",\n    \"Grinning face\": \"Sonriendo cara\",\n    \"Grinning face with smiling eyes\": \"Sonriendo cara con ojos sonrientes\",\n    \"Face with tears of joy\": \"Cara con l\\u00e1grimas de alegr\\u00eda\",\n    \"Smiling face with open mouth\": \"Cara sonriente con la boca abierta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Cara sonriente con la boca abierta y los ojos sonrientes\",\n    \"Smiling face with open mouth and cold sweat\": \"Cara sonriente con la boca abierta y el sudor fr\\u00edo\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Cara sonriente con la boca abierta y los ojos fuertemente cerrados\",\n    \"Smiling face with halo\": \"Cara sonriente con halo\",\n    \"Smiling face with horns\": \"Cara sonriente con cuernos\",\n    \"Winking face\": \"Gui\\u00f1o de la cara\",\n    \"Smiling face with smiling eyes\": \"Cara sonriente con ojos sonrientes\",\n    \"Face savoring delicious food\": \"Care saborear una deliciosa comida\",\n    \"Relieved face\": \"Cara Aliviado\",\n    \"Smiling face with heart-shaped eyes\": \"Cara sonriente con los ojos en forma de coraz\\u00f3n\",\n    \"Smiling face with sunglasses\": \"Cara sonriente con gafas de sol\",\n    \"Smirking face\": \"Sonriendo cara\",\n    \"Neutral face\": \"Cara neutral\",\n    \"Expressionless face\": \"Rostro inexpresivo\",\n    \"Unamused face\": \"Cara no divertido\",\n    \"Face with cold sweat\": \"Cara con sudor fr\\u00edo\",\n    \"Pensive face\": \"Rostro pensativo\",\n    \"Confused face\": \"Cara confusa\",\n    \"Confounded face\": \"Cara Averg\\u00fc\\u00e9ncense\",\n    \"Kissing face\": \"Besar la cara\",\n    \"Face throwing a kiss\": \"Cara lanzando un beso\",\n    \"Kissing face with smiling eyes\": \"Besar a cara con ojos sonrientes\",\n    \"Kissing face with closed eyes\": \"Besar a cara con los ojos cerrados\",\n    \"Face with stuck out tongue\": \"Cara con la lengua pegada\",\n    \"Face with stuck out tongue and winking eye\": \"Cara con pegado a la lengua y los ojos gui\\u00f1o\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Cara con la lengua pegada a y los ojos fuertemente cerrados\",\n    \"Disappointed face\": \"Cara decepcionado\",\n    \"Worried face\": \"Cara de preocupaci\\u00f3n\",\n    \"Angry face\": \"Cara enojada\",\n    \"Pouting face\": \"Que pone mala cara\",\n    \"Crying face\": \"Cara llorando\",\n    \"Persevering face\": \"Perseverar cara\",\n    \"Face with look of triumph\": \"Cara con expresi\\u00f3n de triunfo\",\n    \"Disappointed but relieved face\": \"Decepcionado pero el rostro aliviado\",\n    \"Frowning face with open mouth\": \"Con el ce\\u00f1o fruncido la cara con la boca abierta\",\n    \"Anguished face\": \"Rostro angustiado\",\n    \"Fearful face\": \"Cara Temeroso\",\n    \"Weary face\": \"Rostro cansado\",\n    \"Sleepy face\": \"Rostro so\\u00f1oliento\",\n    \"Tired face\": \"Rostro cansado\",\n    \"Grimacing face\": \"Haciendo una mueca cara\",\n    \"Loudly crying face\": \"Llorando en voz alta la cara\",\n    \"Face with open mouth\": \"Cara con la boca abierta\",\n    \"Hushed face\": \"Cara callada\",\n    \"Face with open mouth and cold sweat\": \"Cara con la boca abierta y el sudor frío\",\n    \"Face screaming in fear\": \"Cara gritando de miedo\",\n    \"Astonished face\": \"Cara asombrosa\",\n    \"Flushed face\": \"Cara enrojecida\",\n    \"Sleeping face\": \"Rostro dormido\",\n    \"Dizzy face\": \"Cara Mareado\",\n    \"Face without mouth\": \"Cara sin boca\",\n    \"Face with medical mask\": \"Cara con la m\\u00e1scara m\\u00e9dica\",\n\n    // Line breaker\n    \"Break\": \"Romper\",\n\n    // Math\n    \"Subscript\": \"Sub\\u00edndice\",\n    \"Superscript\": \"Super\\u00edndice\",\n\n    // Full screen\n    \"Fullscreen\": \"Pantalla completa\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Insertar l\\u00ednea horizontal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Quitar el formato\",\n\n    // Save\n    \"Save\": \"Salvar\",\n\n    // Undo, redo\n    \"Undo\": \"Deshacer\",\n    \"Redo\": \"Rehacer\",\n\n    // Select all\n    \"Select All\": \"Seleccionar todo\",\n\n    // Code view\n    \"Code View\": \"Vista de c\\u00f3digo\",\n\n    // Quote\n    \"Quote\": \"Cita\",\n    \"Increase\": \"Aumentar\",\n    \"Decrease\": \"Disminuci\\u00f3n\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inserci\\u00f3n r\\u00e1pida\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caracteres especiales\",\n    \"Latin\": \"Latín\",\n    \"Greek\": \"Griego\",\n    \"Cyrillic\": \"Cirílico\",\n    \"Punctuation\": \"Puntuación\",\n    \"Currency\": \"Moneda\",\n    \"Arrows\": \"Flechas\",\n    \"Math\": \"Mates\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Impresión\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Corrector ortográfico\",\n\n    // Help\n    \"Help\": \"Ayuda\",\n    \"Shortcuts\": \"Atajos\",\n    \"Inline Editor\": \"Editor en línea\",\n    \"Show the editor\": \"Mostrar al editor\",\n    \"Common actions\": \"Acciones comunes\",\n    \"Copy\": \"Dupdo\",\n    \"Cut\": \"Cortar\",\n    \"Paste\": \"Pegar\",\n    \"Basic Formatting\": \"Formato básico\",\n    \"Increase quote level\": \"Aumentar el nivel de cotización\",\n    \"Decrease quote level\": \"Disminuir el nivel de cotización\",\n    \"Image / Video\": \"Imagen / video\",\n    \"Resize larger\": \"Redimensionar más grande\",\n    \"Resize smaller\": \"Redimensionar más pequeño\",\n    \"Table\": \"Mesa\",\n    \"Select table cell\": \"Celda de tabla select\",\n    \"Extend selection one cell\": \"Ampliar la selección una celda\",\n    \"Extend selection one row\": \"Ampliar la selección una fila\",\n    \"Navigation\": \"Navegación\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Volver al foco a la posición anterior\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL de inserción\",\n    \"Paste in a URL to embed\": \"Pegar en una url para incrustar\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"El contenido pegado viene de un documento de Microsoft Word. ¿Quieres mantener el formato o limpiarlo?\",\n    \"Keep\": \"Guardar\",\n    \"Clean\": \"Limpiar\",\n    \"Word Paste Detected\": \"Palabra detectada\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/et.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Estonian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['et'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Kirjuta midagi\",\n\n    // Basic formatting\n    \"Bold\": \"Rasvane\",\n    \"Italic\": \"Kursiiv\",\n    \"Underline\": \"Allajoonitud\",\n    \"Strikethrough\": \"L\\u00e4bikriipsutatud\",\n\n    // Main buttons\n    \"Insert\": \"Lisa\",\n    \"Delete\": \"Kustuta\",\n    \"Cancel\": \"T\\u00fchista\",\n    \"OK\": \"OK\",\n    \"Back\": \"Tagasi\",\n    \"Remove\": \"Eemaldama\",\n    \"More\": \"Rohkem\",\n    \"Update\": \"Ajakohastama\",\n    \"Style\": \"Stiil\",\n\n    // Font\n    \"Font Family\": \"Fondi perekond\",\n    \"Font Size\": \"Fondi suurus\",\n\n    // Colors\n    \"Colors\": \"V\\u00e4rvid\",\n    \"Background\": \"Taust\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"Hex värvi\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragrahv formaat\",\n    \"Normal\": \"Normaalne\",\n    \"Code\": \"Kood\",\n    \"Heading 1\": \"P\\u00e4is 1\",\n    \"Heading 2\": \"P\\u00e4is 2\",\n    \"Heading 3\": \"P\\u00e4is 3\",\n    \"Heading 4\": \"P\\u00e4is 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragrahv stiil\",\n    \"Inline Style\": \"J\\u00e4rjekorras stiil\",\n\n    // Alignment\n    \"Align\": \"Joonda\",\n    \"Align Left\": \"Joonda vasakule\",\n    \"Align Center\": \"Joonda keskele\",\n    \"Align Right\": \"Joonda paremale\",\n    \"Align Justify\": \"R\\u00f6\\u00f6pjoondus\",\n    \"None\": \"Mitte \\u00fckski\",\n\n    // Lists\n    \"Ordered List\": \"Tellitud nimekirja\",\n    \"Default\": \"Vaikimisi\",\n    \"Lower Alpha\": \"Alumine alfa\",\n    \"Lower Greek\": \"Alumine kreeklane\",\n    \"Lower Roman\": \"Madalam roomlane\",\n    \"Upper Alpha\": \"Ülemine alfa\",\n    \"Upper Roman\": \"Ülemine rooma\",\n\n    \"Unordered List\": \"Tavalise nimekirja\",\n    \"Circle\": \"Ringi\",\n    \"Disc\": \"Plaat\",\n    \"Square\": \"Ruut\",\n\n    // Line height\n    \"Line Height\": \"Reakõrgus\",\n    \"Single\": \"Üksik\",\n    \"Double\": \"Topelt\",\n\n    // Indent\n    \"Decrease Indent\": \"V\\u00e4henemine taane\",\n    \"Increase Indent\": \"Suurenda taanet\",\n\n    // Links\n    \"Insert Link\": \"Lisa link\",\n    \"Open in new tab\": \"Ava uues sakis\",\n    \"Open Link\": \"Avatud link\",\n    \"Edit Link\": \"Muuda link\",\n    \"Unlink\": \"Eemalda link\",\n    \"Choose Link\": \"Vali link\",\n\n    // Images\n    \"Insert Image\": \"Lisa pilt\",\n    \"Upload Image\": \"Laadige pilt\",\n    \"By URL\": \"Poolt URL\",\n    \"Browse\": \"sirvida\",\n    \"Drop image\": \"Aseta pilt\",\n    \"or click\": \"v\\u00f5i kliki\",\n    \"Manage Images\": \"Halda pilte\",\n    \"Loading\": \"Laadimine\",\n    \"Deleting\": \"Kustutamine\",\n    \"Tags\": \"Sildid\",\n    \"Are you sure? Image will be deleted.\": \"Oled sa kindel? Pilt kustutatakse.\",\n    \"Replace\": \"Asendama\",\n    \"Uploading\": \"Laadimise pilti\",\n    \"Loading image\": \"Laadimise pilti\",\n    \"Display\": \"Kuvama\",\n    \"Inline\": \"J\\u00e4rjekorras\",\n    \"Break Text\": \"Murdma teksti\",\n    \"Alternative Text\": \"Asendusliikme teksti\",\n    \"Change Size\": \"Muuda suurust\",\n    \"Width\": \"Laius\",\n    \"Height\": \"K\\u00f5rgus\",\n    \"Something went wrong. Please try again.\": \"Midagi l\\u00e4ks valesti. Palun proovi uuesti.\",\n    \"Image Caption\": \"Pildi pealkiri\",\n    \"Advanced Edit\": \"Täiustatud redigeerimine\",\n\n    // Video\n    \"Insert Video\": \"Lisa video\",\n    \"Embedded Code\": \"Varjatud koodi\",\n    \"Paste in a video URL\": \"Kleebi video URL-i\",\n    \"Drop video\": \"Tilk videot\",\n    \"Your browser does not support HTML5 video.\": \"Teie brauser ei toeta html5-videot.\",\n    \"Upload Video\": \"Video üleslaadimine\",\n\n    // Tables\n    \"Insert Table\": \"Sisesta tabel\",\n    \"Table Header\": \"Tabel p\\u00e4ise kaudu\",\n    \"Remove Table\": \"Eemalda tabel\",\n    \"Table Style\": \"Tabel stiili\",\n    \"Horizontal Align\": \"Horisontaalne joonda\",\n    \"Row\": \"Rida\",\n    \"Insert row above\": \"Sisesta rida \\u00fcles\",\n    \"Insert row below\": \"Sisesta rida alla\",\n    \"Delete row\": \"Kustuta rida\",\n    \"Column\": \"Veerg\",\n    \"Insert column before\": \"Sisesta veerg ette\",\n    \"Insert column after\": \"Sisesta veerg j\\u00e4rele\",\n    \"Delete column\": \"Kustuta veerg\",\n    \"Cell\": \"Lahter\",\n    \"Merge cells\": \"\\u00fchenda lahtrid\",\n    \"Horizontal split\": \"Poolita horisontaalselt\",\n    \"Vertical split\": \"Poolita vertikaalselt\",\n    \"Cell Background\": \"Lahter tausta\",\n    \"Vertical Align\": \"Vertikaalne joonda\",\n    \"Top\": \"\\u00fclemine\",\n    \"Middle\": \"Keskmine\",\n    \"Bottom\": \"P\\u00f5hi\",\n    \"Align Top\": \"Joonda \\u00fclemine\",\n    \"Align Middle\": \"Joonda keskmine\",\n    \"Align Bottom\": \"Joonda P\\u00f5hi\",\n    \"Cell Style\": \"Lahter stiili\",\n\n    // Files\n    \"Upload File\": \"Lae fail \\u00fcles\",\n    \"Drop file\": \"Aseta fail\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikonid\",\n    \"Grinning face\": \"Irvitas n\\u00e4kku\",\n    \"Grinning face with smiling eyes\": \"Irvitas n\\u00e4kku naeratavad silmad\",\n    \"Face with tears of joy\": \"N\\u00e4gu r\\u00f5\\u00f5mupisaratega\",\n    \"Smiling face with open mouth\": \"Naeratav n\\u00e4gu avatud suuga\",\n    \"Smiling face with open mouth and smiling eyes\": \"Naeratav n\\u00e4gu avatud suu ja naeratavad silmad\",\n    \"Smiling face with open mouth and cold sweat\": \"Naeratav n\\u00e4gu avatud suu ja k\\u00fclm higi\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Naeratav n\\u00e4gu avatud suu ja tihedalt suletud silmad\",\n    \"Smiling face with halo\": \"Naeratav n\\u00e4gu halo\",\n    \"Smiling face with horns\": \"Naeratav n\\u00e4gu sarved\",\n    \"Winking face\": \"Pilgutab n\\u00e4gu\",\n    \"Smiling face with smiling eyes\": \"Naeratav n\\u00e4gu naeratab silmad\",\n    \"Face savoring delicious food\": \"N\\u00e4gu nautides maitsvat toitu\",\n    \"Relieved face\": \"P\\u00e4\\u00e4stetud n\\u00e4gu\",\n    \"Smiling face with heart-shaped eyes\": \"Naeratav n\\u00e4gu s\\u00fcdajas silmad\",\n    \"Smiling face with sunglasses\": \"Naeratav n\\u00e4gu p\\u00e4ikeseprillid\",\n    \"Smirking face\": \"Muigama n\\u00e4gu \",\n    \"Neutral face\": \"Neutraalne n\\u00e4gu\",\n    \"Expressionless face\": \"Ilmetu n\\u00e4gu\",\n    \"Unamused face\": \"Morn n\\u00e4gu\",\n    \"Face with cold sweat\": \"N\\u00e4gu k\\u00fclma higiga\",\n    \"Pensive face\": \"M\\u00f5tlik n\\u00e4gu\",\n    \"Confused face\": \"Segaduses n\\u00e4gu\",\n    \"Confounded face\": \"Segas n\\u00e4gu\",\n    \"Kissing face\": \"Suudlevad n\\u00e4gu\",\n    \"Face throwing a kiss\": \"N\\u00e4gu viskamine suudlus\",\n    \"Kissing face with smiling eyes\": \"Suudlevad n\\u00e4gu naeratab silmad\",\n    \"Kissing face with closed eyes\": \"Suudlevad n\\u00e4gu, silmad kinni\",\n    \"Face with stuck out tongue\": \"N\\u00e4gu ummikus v\\u00e4lja keele\",\n    \"Face with stuck out tongue and winking eye\": \"N\\u00e4gu ummikus v\\u00e4lja keele ja silma pilgutav silma\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"N\\u00e4gu ummikus v\\u00e4lja keele ja silmad tihedalt suletuna\",\n    \"Disappointed face\": \"Pettunud n\\u00e4gu\",\n    \"Worried face\": \"Mures n\\u00e4gu\",\n    \"Angry face\": \"Vihane n\\u00e4gu\",\n    \"Pouting face\": \"Tursik n\\u00e4gu\",\n    \"Crying face\": \"Nutt n\\u00e4gu\",\n    \"Persevering face\": \"Püsiv n\\u00e4gu\",\n    \"Face with look of triumph\": \"N\\u00e4gu ilme triumf\",\n    \"Disappointed but relieved face\": \"Pettunud kuid vabastati n\\u00e4gu\",\n    \"Frowning face with open mouth\": \"Kulmukortsutav n\\u00e4gu avatud suuga\",\n    \"Anguished face\": \"Ahastavad n\\u00e4gu\",\n    \"Fearful face\": \"Hirmunult n\\u00e4gu\",\n    \"Weary face\": \"Grimasse\",\n    \"Sleepy face\": \"Unine n\\u00e4gu\",\n    \"Tired face\": \"V\\u00e4sinud n\\u00e4gu\",\n    \"Grimacing face\": \"Grimassitavaks n\\u00e4gu\",\n    \"Loudly crying face\": \"Valjusti nutma n\\u00e4gu\",\n    \"Face with open mouth\": \"N\\u00e4gu avatud suuga\",\n    \"Hushed face\": \"Raskel n\\u00e4gu\",\n    \"Face with open mouth and cold sweat\": \"N\\u00e4gu avatud suu ja k\\u00fclm higi\",\n    \"Face screaming in fear\": \"N\\u00e4gu karjuvad hirm\",\n    \"Astonished face\": \"Lummatud n\\u00e4gu\",\n    \"Flushed face\": \"Punetav n\\u00e4gu\",\n    \"Sleeping face\": \"Uinuv n\\u00e4gu\",\n    \"Dizzy face\": \"Uimane n\\u00fcgu\",\n    \"Face without mouth\": \"N\\u00e4gu ilma suu\",\n    \"Face with medical mask\": \"N\\u00e4gu meditsiinilise mask\",\n\n    // Line breaker\n    \"Break\": \"Murdma\",\n\n    // Math\n    \"Subscript\": \"Allindeks\",\n    \"Superscript\": \"\\u00dclaindeks\",\n\n    // Full screen\n    \"Fullscreen\": \"T\\u00e4isekraanil\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Sisesta horisontaalne joon\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Eemalda formaatimine\",\n\n    // Save\n    \"Save\": \"Salvesta\",\n\n    // Undo, redo\n    \"Undo\": \"V\\u00f5ta tagasi\",\n    \"Redo\": \"Tee uuesti\",\n\n    // Select all\n    \"Select All\": \"Vali k\\u00f5ik\",\n\n    // Code view\n    \"Code View\": \"Koodi vaadata\",\n\n    // Quote\n    \"Quote\": \"Tsitaat\",\n    \"Increase\": \"Suurendama\",\n    \"Decrease\": \"V\\u00e4henda\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Kiire sisestada\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Erimärgid\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Kreeka keel\",\n    \"Cyrillic\": \"Kirillitsa\",\n    \"Punctuation\": \"Kirjavahemärgid\",\n    \"Currency\": \"Valuuta\",\n    \"Arrows\": \"Nooled\",\n    \"Math\": \"Matemaatika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Printige\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Õigekirja kontrollija\",\n\n    // Help\n    \"Help\": \"Abi\",\n    \"Shortcuts\": \"Otseteed\",\n    \"Inline Editor\": \"Sisemine redaktor\",\n    \"Show the editor\": \"Näita redaktorit\",\n    \"Common actions\": \"Ühised meetmed\",\n    \"Copy\": \"Koopia\",\n    \"Cut\": \"Lõigake\",\n    \"Paste\": \"Kleepige\",\n    \"Basic Formatting\": \"Põhiline vormindamine\",\n    \"Increase quote level\": \"Suurendada tsiteerimise taset\",\n    \"Decrease quote level\": \"Langetada tsiteerimise tase\",\n    \"Image / Video\": \"Pilt / video\",\n    \"Resize larger\": \"Suuruse muutmine suurem\",\n    \"Resize smaller\": \"Väiksema suuruse muutmine\",\n    \"Table\": \"Laud\",\n    \"Select table cell\": \"Vali tabeli lahtrisse\",\n    \"Extend selection one cell\": \"Laiendage valikut üks lahtrisse\",\n    \"Extend selection one row\": \"Laiendage valikut ühe reana\",\n    \"Navigation\": \"Navigeerimine\",\n    \"Focus popup / toolbar\": \"Fookuse hüpikakna / tööriistariba\",\n    \"Return focus to previous position\": \"Tagasi pöörata tähelepanu eelmisele positsioonile\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed url\",\n    \"Paste in a URL to embed\": \"Kleepige URL-i sisestamiseks\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Kleepitud sisu pärineb Microsoft Wordi dokumendist. kas soovite vormi säilitada või puhastada?\",\n    \"Keep\": \"Pidage seda\",\n    \"Clean\": \"Puhas\",\n    \"Word Paste Detected\": \"Avastatud sõna pasta\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/fa.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Persian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['fa'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u0686\\u06cc\\u0632\\u06cc \\u0628\\u0646\\u0648\\u06cc\\u0633\\u06cc\\u062f\",\n\n    // Basic formatting\n    \"Bold\": \"ضخیم\",\n    \"Italic\": \"خط کج\",\n    \"Underline\": \"خط زیر\",\n    \"Strikethrough\": \"\\u062e\\u0637 \\u062e\\u0648\\u0631\\u062f\\u0647\",\n\n    // Main buttons\n    \"Insert\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646\",\n    \"Delete\": \"\\u062d\\u0630\\u0641 \\u06a9\\u0631\\u062f\\u0646\",\n    \"Cancel\": \"\\u0644\\u063a\\u0648\",\n    \"OK\": \"\\u0628\\u0627\\u0634\\u0647\",\n    \"Back\": \"\\u0628\\u0647 \\u0639\\u0642\\u0628\",\n    \"Remove\": \"\\u0628\\u0631\\u062f\\u0627\\u0634\\u062a\\u0646\",\n    \"More\": \"\\u0628\\u06cc\\u0634\\u062a\\u0631\",\n    \"Update\": \"\\u0628\\u0647 \\u0631\\u0648\\u0632 \\u0631\\u0633\\u0627\\u0646\\u06cc\",\n    \"Style\": \"\\u0633\\u0628\\u06a9\",\n\n    // Font\n    \"Font Family\": \"\\u0642\\u0644\\u0645\",\n    \"Font Size\": \"\\u0627\\u0646\\u062f\\u0627\\u0632\\u0647 \\u0642\\u0644\\u0645\",\n\n    // Colors\n    \"Colors\": \"\\u0631\\u0646\\u06af\",\n    \"Background\": \"\\u0632\\u0645\\u06cc\\u0646\\u0647 \\u0645\\u062a\\u0646\",\n    \"Text\": \"\\u0645\\u062a\\u0646\",\n    \"HEX Color\": \"کد رنگ\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0642\\u0627\\u0644\\u0628\",\n    \"Normal\": \"\\u0637\\u0628\\u06cc\\u0639\\u06cc - Normal\",\n    \"Code\": \"\\u062f\\u0633\\u062a\\u0648\\u0631\\u0627\\u0644\\u0639\\u0645\\u0644\\u0647\\u0627 - Code\",\n    \"Heading 1\": \"\\u0633\\u0631\\u200c\\u0635\\u0641\\u062d\\u0647 1\",\n    \"Heading 2\": \"\\u0633\\u0631\\u200c\\u0635\\u0641\\u062d\\u0647 2\",\n    \"Heading 3\": \"\\u0633\\u0631\\u200c\\u0635\\u0641\\u062d\\u0647 3\",\n    \"Heading 4\": \"\\u0633\\u0631\\u200c\\u0635\\u0641\\u062d\\u0647 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u067e\\u0627\\u0631\\u0627\\u06af\\u0631\\u0627\\u0641 \\u0633\\u0628\\u06a9\",\n    \"Inline Style\": \"\\u062e\\u0637\\u06cc \\u0633\\u0628\\u06a9\",\n\n    // Alignment\n    \"Align\": \"\\u0631\\u062f\\u06cc\\u0641 \\u0628\\u0646\\u062f\\u06cc \\u0646\\u0648\\u0634\\u062a\\u0647\",\n    \"Align Left\": \"\\u0686\\u067e \\u0686\\u06cc\\u0646\",\n    \"Align Center\": \"\\u0648\\u0633\\u0637 \\u0686\\u06cc\\u0646\",\n    \"Align Right\": \"\\u0631\\u0627\\u0633\\u062a \\u0686\\u06cc\\u0646\",\n    \"Align Justify\": \"\\u0645\\u0633\\u0627\\u0648\\u06cc \\u0627\\u0632 \\u0637\\u0631\\u0641\\u06cc\\u0646\",\n    \"None\": \"\\u0647\\u06cc\\u0686\",\n\n    // Lists\n    \"Ordered List\": \"\\u0644\\u06cc\\u0633\\u062a \\u0634\\u0645\\u0627\\u0631\\u0647 \\u0627\\u06cc\",\n    \"Default\": \"به طور پیش فرض\",\n    \"Lower Alpha\": \"آلفای پایین\",\n    \"Lower Greek\": \"قرن پایین تر\",\n    \"Lower Roman\": \"رومی پایین تر\",\n    \"Upper Alpha\": \"آلفای بالا\",\n    \"Upper Roman\": \"رومانی بالا\",\n\n    \"Unordered List\": \"\\u0644\\u06cc\\u0633\\u062a \\u062f\\u0627\\u06cc\\u0631\\u0647 \\u0627\\u06cc\",\n    \"Circle\": \"دایره\",\n    \"Disc\": \"دیسک\",\n    \"Square\": \"مربع\",\n\n    // Line height\n    \"Line Height\": \"ارتفاع خط\",\n    \"Single\": \"تنها\",\n    \"Double\": \"دو برابر\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u06a9\\u0627\\u0647\\u0634 \\u062a\\u0648 \\u0631\\u0641\\u062a\\u06af\\u06cc\",\n    \"Increase Indent\": \"\\u0627\\u0641\\u0632\\u0627\\u06cc\\u0634 \\u062a\\u0648 \\u0631\\u0641\\u062a\\u06af\\u06cc\",\n\n    // Links\n    \"Insert Link\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646 \\u0644\\u06cc\\u0646\\u06a9\",\n    \"Open in new tab\": \"\\u0628\\u0627\\u0632 \\u06a9\\u0631\\u062f\\u0646 \\u062f\\u0631 \\u0628\\u0631\\u06af\\u0647 \\u062c\\u062f\\u06cc\\u062f\",\n    \"Open Link\": \"\\u0644\\u06cc\\u0646\\u06a9 \\u0647\\u0627\\u06cc \\u0628\\u0627\\u0632\",\n    \"Edit Link\": \"\\u0644\\u06cc\\u0646\\u06a9 \\u0648\\u06cc\\u0631\\u0627\\u06cc\\u0634\",\n    \"Unlink\": \"\\u062d\\u0630\\u0641 \\u0644\\u06cc\\u0646\\u06a9\",\n    \"Choose Link\": \"\\u0644\\u06cc\\u0646\\u06a9 \\u0631\\u0627 \\u0627\\u0646\\u062a\\u062e\\u0627\\u0628 \\u06a9\\u0646\\u06cc\\u062f\",\n\n    // Images\n    \"Insert Image\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646 \\u062a\\u0635\\u0648\\u06cc\\u0631\",\n    \"Upload Image\": \"\\u0622\\u067e\\u0644\\u0648\\u062f \\u062a\\u0635\\u0648\\u06cc\\u0631\",\n    \"By URL\": \"URL \\u062a\\u0648\\u0633\\u0637\",\n    \"Browse\": \"\\u0641\\u0647\\u0631\\u0633\\u062a\",\n    \"Drop image\": \"\\u062a\\u0635\\u0648\\u06cc\\u0631 \\u0631\\u0627 \\u0627\\u06cc\\u0646\\u062c\\u0627 \\u0628\\u06cc\\u0646\\u062f\\u0627\\u0632\\u06cc\\u062f\",\n    \"or click\": \"\\u06cc\\u0627 \\u06a9\\u0644\\u06cc\\u06a9 \\u06a9\\u0646\\u06cc\\u062f\",\n    \"Manage Images\": \"\\u0645\\u062f\\u06cc\\u0631\\u06cc\\u062a \\u062a\\u0635\\u0627\\u0648\\u06cc\\u0631\",\n    \"Loading\": \"\\u0628\\u0627\\u0631\\u06af\\u06cc\\u0631\\u06cc\",\n    \"Deleting\": \"\\u062d\\u0630\\u0641\",\n    \"Tags\": \"\\u0628\\u0631\\u0686\\u0633\\u0628 \\u0647\\u0627\",\n    \"Are you sure? Image will be deleted.\": \".\\u0622\\u06cc\\u0627 \\u0645\\u0637\\u0645\\u0626\\u0646 \\u0647\\u0633\\u062a\\u06cc\\u062f\\u061f \\u062a\\u0635\\u0648\\u06cc\\u0631 \\u062d\\u0630\\u0641 \\u062e\\u0648\\u0627\\u0647\\u062f \\u0634\\u062f\",\n    \"Replace\": \"\\u062c\\u0627\\u06cc\\u06af\\u0632\\u06cc\\u0646 \\u06a9\\u0631\\u062f\\u0646\",\n    \"Uploading\": \"\\u0622\\u067e\\u0644\\u0648\\u062f\",\n    \"Loading image\": \"\\u0628\\u0627\\u0631\\u06af\\u0630\\u0627\\u0631\\u06cc \\u062a\\u0635\\u0648\\u06cc\\u0631\",\n    \"Display\": \"\\u0646\\u0634\\u0627\\u0646 \\u062f\\u0627\\u062f\\u0646\",\n    \"Inline\": \"\\u062e\\u0637\\u06cc\",\n    \"Break Text\": \"\\u0634\\u06a9\\u0633\\u062a\\u0646 \\u0627\\u0633\\u062a\\u0631\\u0627\\u062d\\u062a\",\n    \"Alternative Text\": \"\\u0645\\u062a\\u0646 \\u062c\\u0627\\u06cc\\u06af\\u0632\\u06cc\\u0646\",\n    \"Change Size\": \"\\u062a\\u063a\\u06cc\\u06cc\\u0631 \\u0627\\u0646\\u062f\\u0627\\u0632\\u0647\",\n    \"Width\": \"\\u0639\\u0631\\u0636\",\n    \"Height\": \"\\u0627\\u0631\\u062a\\u0641\\u0627\\u0639\",\n    \"Something went wrong. Please try again.\": \"خطایی رخ داده است ، لطفا مجددا تلاش کنید\",\n    \"Image Caption\": \"عنوان تصویر\",\n    \"Advanced Edit\": \"ویرایش پیشرفته\",\n\n    // Video\n    \"Insert Video\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646 \\u0641\\u0627\\u06cc\\u0644 \\u062a\\u0635\\u0648\\u06cc\\u0631\\u06cc\",\n    \"Embedded Code\": \"\\u06a9\\u062f \\u062c\\u0627\\u0633\\u0627\\u0632\\u06cc \\u0634\\u062f\\u0647\",\n    \"Paste in a video URL\": \"در URL ویدیو وارد کنید\",\n    \"Drop video\": \"رها کردن ویدیو\",\n    \"Your browser does not support HTML5 video.\": \"مرورگر شما ویدیو HTML5 را پشتیبانی نمی کند.\",\n    \"Upload Video\": \"آپلود ویدیو\",\n\n    // Tables\n    \"Insert Table\": \"\\u0627\\u0636\\u0627\\u0641\\u0647 \\u06a9\\u0631\\u062f\\u0646 \\u062c\\u062f\\u0648\\u0644\",\n    \"Table Header\": \"\\u0647\\u062f\\u0631 \\u062c\\u062f\\u0648\\u0644\",\n    \"Remove Table\": \"\\u062d\\u0630\\u0641 \\u062c\\u062f\\u0648\\u0644\",\n    \"Table Style\": \"\\u0633\\u0628\\u06a9 \\u062c\\u062f\\u0648\\u0644\",\n    \"Horizontal Align\": \"\\u062a\\u0646\\u0638\\u06cc\\u0645 \\u0627\\u0641\\u0642\\u06cc\",\n    \"Row\": \"\\u0633\\u0637\\u0631\",\n    \"Insert row above\": \"\\u062f\\u0631\\u062c \\u0631\\u062f\\u06cc\\u0641 \\u062f\\u0631 \\u0628\\u0627\\u0644\\u0627\",\n    \"Insert row below\": \"\\u0633\\u0637\\u0631 \\u0632\\u06cc\\u0631 \\u0631\\u0627 \\u0648\\u0627\\u0631\\u062f \\u06a9\\u0646\\u06cc\\u062f\",\n    \"Delete row\": \"\\u062d\\u0630\\u0641 \\u0633\\u0637\\u0631\",\n    \"Column\": \"\\u0633\\u062a\\u0648\\u0646\",\n    \"Insert column before\": \"\\u062f\\u0631\\u062c \\u0633\\u062a\\u0648\\u0646 \\u0642\\u0628\\u0644\",\n    \"Insert column after\": \"\\u062f\\u0631\\u062c \\u0633\\u062a\\u0648\\u0646 \\u0628\\u0639\\u062f\",\n    \"Delete column\": \"\\u062d\\u0630\\u0641 \\u0633\\u062a\\u0648\\u0646\",\n    \"Cell\": \"\\u0633\\u0644\\u0648\\u0644\",\n    \"Merge cells\": \"\\u0627\\u062f\\u063a\\u0627\\u0645 \\u0633\\u0644\\u0648\\u0644\\u200c\\u0647\\u0627\",\n    \"Horizontal split\": \"\\u062a\\u0642\\u0633\\u06cc\\u0645 \\u0627\\u0641\\u0642\\u06cc\",\n    \"Vertical split\": \"\\u062a\\u0642\\u0633\\u06cc\\u0645 \\u0639\\u0645\\u0648\\u062f\\u06cc\",\n    \"Cell Background\": \"\\u067e\\u0633 \\u0632\\u0645\\u06cc\\u0646\\u0647 \\u0647\\u0645\\u0631\\u0627\\u0647\",\n    \"Vertical Align\": \"\\u0631\\u062f\\u06cc\\u0641 \\u0639\\u0645\\u0648\\u062f\\u06cc\",\n    \"Top\": \"\\u0628\\u0627\\u0644\\u0627\",\n    \"Middle\": \"\\u0645\\u062a\\u0648\\u0633\\u0637\",\n    \"Bottom\": \"\\u067e\\u0627\\u06cc\\u06cc\\u0646\",\n    \"Align Top\": \"\\u062a\\u0631\\u0627\\u0632 \\u0628\\u0627\\u0644\\u0627\\u06cc\",\n    \"Align Middle\": \"\\u062a\\u0631\\u0627\\u0632 \\u0648\\u0633\\u0637\",\n    \"Align Bottom\": \"\\u062a\\u0631\\u0627\\u0632 \\u067e\\u0627\\u06cc\\u06cc\\u0646\",\n    \"Cell Style\": \"\\u0633\\u0628\\u06a9 \\u0647\\u0627\\u06cc \\u0647\\u0645\\u0631\\u0627\\u0647\",\n\n    // Files\n    \"Upload File\": \"\\u0622\\u067e\\u0644\\u0648\\u062f \\u0641\\u0627\\u06cc\\u0644\",\n    \"Drop file\": \"\\u0627\\u0641\\u062a \\u0641\\u0627\\u06cc\\u0644\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0634\\u06a9\\u0644\\u06a9 \\u0647\\u0627\",\n    \"Grinning face\": \"\\u0686\\u0647\\u0631\\u0647 \\u067e\\u0648\\u0632\\u062e\\u0646\\u062f\",\n    \"Grinning face with smiling eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u067e\\u0648\\u0632\\u062e\\u0646\\u062f \\u0628\\u0627 \\u0686\\u0634\\u0645\\u0627\\u0646 \\u062e\\u0646\\u062f\\u0627\\u0646\",\n    \"Face with tears of joy\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0627\\u0634\\u06a9 \\u0634\\u0627\\u062f\\u06cc\",\n    \"Smiling face with open mouth\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632 \\u0648 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0686\\u0634\\u0645\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632 \\u0648 \\u0639\\u0631\\u0642 \\u0633\\u0631\\u062f\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632 \\u0648 \\u0686\\u0634\\u0645 \\u062f\\u0631\\u0628\\u062f\\u0627\\u0631\",\n    \"Smiling face with halo\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0647\\u0627\\u0644\\u0647\",\n    \"Smiling face with horns\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0634\\u0627\\u062e\",\n    \"Winking face\": \"\\u062d\\u0631\\u06a9\\u062a \\u067e\\u0630\\u06cc\\u0631\\u06cc\",\n    \"Smiling face with smiling eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0686\\u0634\\u0645 \\u0644\\u0628\\u062e\\u0646\\u062f\",\n    \"Face savoring delicious food\": \"\\u0686\\u0647\\u0631\\u0647 \\u0644\\u0630\\u06cc\\u0630 \\u063a\\u0630\\u0627\\u06cc \\u062e\\u0648\\u0634\\u0645\\u0632\\u0647\",\n    \"Relieved face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0631\\u0647\\u0627\",\n    \"Smiling face with heart-shaped eyes\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0686\\u0634\\u0645 \\u0628\\u0647 \\u0634\\u06a9\\u0644 \\u0642\\u0644\\u0628\",\n    \"Smiling face with sunglasses\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0646\\u062f\\u0627\\u0646 \\u0628\\u0627 \\u0639\\u06cc\\u0646\\u06a9 \\u0622\\u0641\\u062a\\u0627\\u0628\\u06cc\",\n    \"Smirking face\": \"\\u067e\\u0648\\u0632\\u062e\\u0646\\u062f \\u0686\\u0647\\u0631\\u0647\",\n    \"Neutral face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0647\\u0627\\u06cc \\u062e\\u0646\\u062b\\u06cc\",\n    \"Expressionless face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0646\\u0627\\u06af\\u0648\\u06cc\\u0627\",\n    \"Unamused face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0648\\u0634\\u062d\\u0627\\u0644 \\u0646\\u06cc\\u0633\\u062a\",\n    \"Face with cold sweat\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0639\\u0631\\u0642 \\u0633\\u0631\\u062f\",\n    \"Pensive face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0627\\u0641\\u0633\\u0631\\u062f\\u0647\",\n    \"Confused face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0627\\u0634\\u062a\\u0628\\u0627\\u0647\",\n    \"Confounded face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0633\\u0631 \\u062f\\u0631 \\u06af\\u0645\",\n    \"Kissing face\": \"\\u0628\\u0648\\u0633\\u06cc\\u062f\\u0646 \\u0635\\u0648\\u0631\\u062a\",\n    \"Face throwing a kiss\": \"\\u0686\\u0647\\u0631\\u0647 \\u067e\\u0631\\u062a\\u0627\\u0628 \\u06cc\\u06a9 \\u0628\\u0648\\u0633\\u0647\",\n    \"Kissing face with smiling eyes\": \"\\u0628\\u0648\\u0633\\u06cc\\u062f\\u0646 \\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0686\\u0634\\u0645 \\u0644\\u0628\\u062e\\u0646\\u062f\",\n    \"Kissing face with closed eyes\": \"\\u0628\\u0648\\u0633\\u06cc\\u062f\\u0646 \\u0635\\u0648\\u0631\\u062a \\u0628\\u0627 \\u0686\\u0634\\u0645\\u0627\\u0646 \\u0628\\u0633\\u062a\\u0647\",\n    \"Face with stuck out tongue\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u06af\\u06cc\\u0631 \\u06a9\\u0631\\u062f\\u0646 \\u0632\\u0628\\u0627\\u0646\",\n    \"Face with stuck out tongue and winking eye\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0632\\u0628\\u0627\\u0646 \\u06af\\u06cc\\u0631 \\u06a9\\u0631\\u062f\\u0646 \\u0648 \\u062d\\u0631\\u06a9\\u062a \\u0686\\u0634\\u0645\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u0635\\u0648\\u0631\\u062a \\u0628\\u0627 \\u0632\\u0628\\u0627\\u0646 \\u06af\\u06cc\\u0631 \\u06a9\\u0631\\u062f\\u0646 \\u0648 \\u0686\\u0634\\u0645 \\u0631\\u0627 \\u0645\\u062d\\u06a9\\u0645 \\u0628\\u0633\\u062a\\u0647\",\n    \"Disappointed face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0646\\u0627 \\u0627\\u0645\\u06cc\\u062f\",\n    \"Worried face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0646\\u06af\\u0631\\u0627\\u0646\",\n    \"Angry face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0639\\u0635\\u0628\\u0627\\u0646\\u06cc\",\n    \"Pouting face\": \"\\u0628\\u063a \\u0686\\u0647\\u0631\\u0647\",\n    \"Crying face\": \"\\u06af\\u0631\\u06cc\\u0647 \\u0686\\u0647\\u0631\\u0647\",\n    \"Persevering face\": \"\\u067e\\u0627\\u06cc\\u062f\\u0627\\u0631\\u06cc \\u0686\\u0647\\u0631\\u0647\",\n    \"Face with look of triumph\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0646\\u06af\\u0627\\u0647\\u06cc \\u0627\\u0632 \\u067e\\u06cc\\u0631\\u0648\\u0632\\u06cc\",\n    \"Disappointed but relieved face\": \"\\u0646\\u0627 \\u0627\\u0645\\u06cc\\u062f \\u0627\\u0645\\u0627 \\u0622\\u0633\\u0648\\u062f\\u0647 \\u0686\\u0647\\u0631\\u0647\",\n    \"Frowning face with open mouth\": \"\\u0627\\u062e\\u0645 \\u0635\\u0648\\u0631\\u062a \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632\",\n    \"Anguished face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0646\\u06af\\u0631\\u0627\\u0646\",\n    \"Fearful face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062a\\u0631\\u0633\",\n    \"Weary face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0633\\u062a\\u0647\",\n    \"Sleepy face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0648\\u0627\\u0628 \\u0622\\u0644\\u0648\\u062f\",\n    \"Tired face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062e\\u0633\\u062a\\u0647\",\n    \"Grimacing face\": \"\\u0627\\u0634 \\u0686\\u0647\\u0631\\u0647\",\n    \"Loudly crying face\": \"\\u0646\\u062f\\u0627\\u06cc\\u06cc \\u0631\\u0633\\u0627 \\u06af\\u0631\\u06cc\\u0647 \\u0686\\u0647\\u0631\\u0647\",\n    \"Face with open mouth\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632\",\n    \"Hushed face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0633\\u06a9\\u0648\\u062a\",\n    \"Face with open mouth and cold sweat\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u062f\\u0647\\u0627\\u0646 \\u0628\\u0627\\u0632 \\u0648 \\u0639\\u0631\\u0642 \\u0633\\u0631\\u062f\",\n    \"Face screaming in fear\": \"\\u0686\\u0647\\u0631\\u0647 \\u062c\\u06cc\\u063a \\u062f\\u0631 \\u062a\\u0631\\u0633\",\n    \"Astonished face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0634\\u06af\\u0641\\u062a \\u0632\\u062f\\u0647\",\n    \"Flushed face\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0631\\u0627\\u0641\\u0631\\u0648\\u062e\\u062a\\u0647\",\n    \"Sleeping face\": \"\\u062e\\u0648\\u0627\\u0628 \\u0686\\u0647\\u0631\\u0647\",\n    \"Dizzy face\": \"\\u0686\\u0647\\u0631\\u0647 \\u062f\\u06cc\\u0632\\u06cc\",\n    \"Face without mouth\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u062f\\u0648\\u0646 \\u062f\\u0647\\u0627\\u0646\",\n    \"Face with medical mask\": \"\\u0686\\u0647\\u0631\\u0647 \\u0628\\u0627 \\u0645\\u0627\\u0633\\u06a9 \\u0647\\u0627\\u06cc \\u067e\\u0632\\u0634\\u06a9\\u06cc\",\n\n    // Line breaker\n    \"Break\": \"\\u0634\\u06a9\\u0633\\u062a\\u0646\",\n\n    // Math\n    \"Subscript\": \"\\u067e\\u0627\\u064a\\u064a\\u0646 \\u0646\\u0648\\u064a\\u0633\",\n    \"Superscript\": \"\\u0628\\u0627\\u0644\\u0627 \\u0646\\u06af\\u0627\\u0634\\u062a\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u062a\\u0645\\u0627\\u0645 \\u0635\\u0641\\u062d\\u0647\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0642\\u0631\\u0627\\u0631 \\u062f\\u0627\\u062f\\u0646 \\u0627\\u0641\\u0642\\u06cc \\u062e\\u0637\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u062d\\u0630\\u0641 \\u0642\\u0627\\u0644\\u0628 \\u0628\\u0646\\u062f\\u06cc\",\n\n    // Save\n    \"Save\": \"\\u0635\\u0631\\u0641\\u0647 \\u062c\\u0648\\u06cc\\u06cc\",\n\n    // Undo, redo\n    \"Undo\": \"\\u0628\\u0627\\u0637\\u0644 \\u06a9\\u0631\\u062f\\u0646\",\n    \"Redo\": \"\\u0627\\u0646\\u062c\\u0627\\u0645 \\u062f\\u0648\\u0628\\u0627\\u0631\\u0647\",\n\n    // Select all\n    \"Select All\": \"\\u0627\\u0646\\u062a\\u062e\\u0627\\u0628 \\u0647\\u0645\\u0647\",\n\n    // Code view\n    \"Code View\": \"\\u0645\\u0634\\u0627\\u0647\\u062f\\u0647 \\u06a9\\u062f\",\n\n    // Quote\n    \"Quote\": \"\\u0646\\u0642\\u0644 \\u0642\\u0648\\u0644\",\n    \"Increase\": \"\\u0627\\u0641\\u0632\\u0627\\u06cc\\u0634 \\u062f\\u0627\\u062f\\u0646\",\n    \"Decrease\": \"\\u0646\\u0632\\u0648\\u0644 \\u06a9\\u0631\\u062f\\u0646\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u062f\\u0631\\u062c \\u0633\\u0631\\u06cc\\u0639\",\n\n    // Spcial Characters\n    \"Special Characters\": \"کاراکترهای خاص\",\n    \"Latin\": \"لاتین\",\n    \"Greek\": \"یونانی\",\n    \"Cyrillic\": \"سیریلیک\",\n    \"Punctuation\": \"نقطه گذاری\",\n    \"Currency\": \"واحد پول\",\n    \"Arrows\": \"فلش ها\",\n    \"Math\": \"ریاضی\",\n    \"Misc\": \"متاسفم\",\n\n    // Print.\n    \"Print\": \"چاپ\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"بررسی کننده غلط املایی\",\n\n    // Help\n    \"Help\": \"کمک\",\n    \"Shortcuts\": \"کلید های میانبر\",\n    \"Inline Editor\": \"ویرایشگر خطی\",\n    \"Show the editor\": \"ویرایشگر را نشان بده\",\n    \"Common actions\": \"اقدامات مشترک\",\n    \"Copy\": \"کپی کنید\",\n    \"Cut\": \"برش\",\n    \"Paste\": \"چسباندن\",\n    \"Basic Formatting\": \"قالب بندی اولیه\",\n    \"Increase quote level\": \"افزایش سطح نقل قول\",\n    \"Decrease quote level\": \"کاهش میزان نقل قول\",\n    \"Image / Video\": \"تصویر / ویدئو\",\n    \"Resize larger\": \"تغییر اندازه بزرگتر\",\n    \"Resize smaller\": \"تغییر اندازه کوچکتر\",\n    \"Table\": \"جدول\",\n    \"Select table cell\": \"سلول جدول را انتخاب کنید\",\n    \"Extend selection one cell\": \"انتخاب یک سلول را گسترش دهید\",\n    \"Extend selection one row\": \"یک ردیف را انتخاب کنید\",\n    \"Navigation\": \"جهت یابی\",\n    \"Focus popup / toolbar\": \"تمرکز پنجره / نوار ابزار\",\n    \"Return focus to previous position\": \"تمرکز بازگشت به موقعیت قبلی\",\n\n    // Embed.ly\n    \"Embed URL\": \"آدرس جاسازی\",\n    \"Paste in a URL to embed\": \"یک URL برای جاسازی کپی کنید\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"محتوای جا به جا از یک سند Word Microsoft می آید. آیا می خواهید فرمت را نگه دارید یا پاک کنید؟\",\n    \"Keep\": \"نگاه داشتن\",\n    \"Clean\": \"پاک کن\",\n    \"Word Paste Detected\": \"کلمه رب تشخیص داده شده است\"\n  },\n  direction: \"rtl\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/fi.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Finnish\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['fi'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Kirjoita jotain\",\n\n    // Basic formatting\n    \"Bold\": \"Lihavointi\",\n    \"Italic\": \"Kursivointi\",\n    \"Underline\": \"Alleviivaus\",\n    \"Strikethrough\": \"Yliviivaus\",\n\n    // Main buttons\n    \"Insert\": \"Lis\\u00e4\\u00e4\",\n    \"Delete\": \"Poista\",\n    \"Cancel\": \"Peruuta\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Takaisin\",\n    \"Remove\": \"Poista\",\n    \"More\": \"Lis\\u00e4\\u00e4\",\n    \"Update\": \"P\\u00e4ivitys\",\n    \"Style\": \"Tyyli\",\n\n    // Font\n    \"Font Family\": \"Fontti\",\n    \"Font Size\": \"Fonttikoko\",\n\n    // Colors\n    \"Colors\": \"V\\u00e4rit\",\n    \"Background\": \"Taustan\",\n    \"Text\": \"Tekstin\",\n    \"HEX Color\": \"Heksadesimaali\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Muotoilut\",\n    \"Normal\": \"Normaali\",\n    \"Code\": \"Koodi\",\n    \"Heading 1\": \"Otsikko 1\",\n    \"Heading 2\": \"Otsikko 2\",\n    \"Heading 3\": \"Otsikko 3\",\n    \"Heading 4\": \"Otsikko 4\",\n\n    // Style\n    \"Paragraph Style\": \"Kappaleen tyyli\",\n    \"Inline Style\": \"Linjassa tyyli\",\n\n    // Alignment\n    \"Align\": \"Tasaa\",\n    \"Align Left\": \"Tasaa vasemmalle\",\n    \"Align Center\": \"Keskit\\u00e4\",\n    \"Align Right\": \"Tasaa oikealle\",\n    \"Align Justify\": \"Tasaa\",\n    \"None\": \"Ei mit\\u00e4\\u00e4n\",\n\n    // Lists\n    \"Ordered List\": \"J\\u00e4rjestetty lista\",\n    \"Default\": \"Oletusarvo\",\n    \"Lower Alpha\": \"Alempi alfa\",\n    \"Lower Greek\": \"Alempi kreikka\",\n    \"Lower Roman\": \"Alempi roomalainen\",\n    \"Upper Alpha\": \"Ylempi alfa\",\n    \"Upper Roman\": \"Ylempi roomalainen\",\n\n    \"Unordered List\": \"J\\u00e4rjest\\u00e4m\\u00e4t\\u00f6n lista\",\n    \"Circle\": \"Ympyrä\",\n    \"Disc\": \"Levy\",\n    \"Square\": \"Neliö-\",\n\n    // Line height\n    \"Line Height\": \"Viivankorkeus\",\n    \"Single\": \"Yksittäinen\",\n    \"Double\": \"Kaksinkertainen\",\n\n    // Indent\n    \"Decrease Indent\": \"Sisenn\\u00e4\",\n    \"Increase Indent\": \"Loitonna\",\n\n    // Links\n    \"Insert Link\": \"Lis\\u00e4\\u00e4 linkki\",\n    \"Open in new tab\": \"Avaa uudessa v\\u00e4lilehdess\\u00e4\",\n    \"Open Link\": \"Avaa linkki\",\n    \"Edit Link\": \"Muokkaa linkki\",\n    \"Unlink\": \"Poista linkki\",\n    \"Choose Link\": \"Valitse linkki\",\n\n    // Images\n    \"Insert Image\": \"Lis\\u00e4\\u00e4 kuva\",\n    \"Upload Image\": \"Lataa kuva\",\n    \"By URL\": \"Mukaan URL\",\n    \"Browse\": \"Selailla\",\n    \"Drop image\": \"Pudota kuva\",\n    \"or click\": \"tai napsauta\",\n    \"Manage Images\": \"Hallitse kuvia\",\n    \"Loading\": \"Lastaus\",\n    \"Deleting\": \"Poistaminen\",\n    \"Tags\": \"Tagit\",\n    \"Are you sure? Image will be deleted.\": \"Oletko varma? Kuva poistetaan.\",\n    \"Replace\": \"Vaihda\",\n    \"Uploading\": \"Lataaminen\",\n    \"Loading image\": \"Lastaus kuva\",\n    \"Display\": \"N\\u00e4ytt\\u00e4\",\n    \"Inline\": \"Linjassa\",\n    \"Break Text\": \"Rikkoa teksti\",\n    \"Alternative Text\": \"Vaihtoehtoinen teksti\",\n    \"Change Size\": \"Muuta kokoa\",\n    \"Width\": \"Leveys\",\n    \"Height\": \"Korkeus\",\n    \"Something went wrong. Please try again.\": \"Jotain meni pieleen. Yrit\\u00e4 uudelleen.\",\n    \"Image Caption\": \"Kuva-otsikko\",\n    \"Advanced Edit\": \"Edistynyt muokkaus\",\n\n    // Video\n    \"Insert Video\": \"Lis\\u00e4\\u00e4 video\",\n    \"Embedded Code\": \"Upotettu koodi\",\n    \"Paste in a video URL\": \"Liitä video url\",\n    \"Drop video\": \"Pudota video\",\n    \"Your browser does not support HTML5 video.\": \"Selaimesi ei tue html5-videota.\",\n    \"Upload Video\": \"Lataa video\",\n\n    // Tables\n    \"Insert Table\": \"Lis\\u00e4\\u00e4 taulukko\",\n    \"Table Header\": \"Taulukko yl\\u00e4tunniste\",\n    \"Remove Table\": \"Poista taulukko\",\n    \"Table Style\": \"Taulukko tyyli\",\n    \"Horizontal Align\": \"Vaakasuora tasaa\",\n    \"Row\": \"Rivi\",\n    \"Insert row above\": \"Lis\\u00e4\\u00e4 rivi ennen\",\n    \"Insert row below\": \"Lis\\u00e4\\u00e4 rivi j\\u00e4lkeen\",\n    \"Delete row\": \"Poista rivi\",\n    \"Column\": \"Sarake\",\n    \"Insert column before\": \"Lis\\u00e4\\u00e4 sarake ennen\",\n    \"Insert column after\": \"Lis\\u00e4\\u00e4 sarake j\\u00e4lkeen\",\n    \"Delete column\": \"Poista sarake\",\n    \"Cell\": \"Solu\",\n    \"Merge cells\": \"Yhdist\\u00e4 solut\",\n    \"Horizontal split\": \"Jaa vaakasuora\",\n    \"Vertical split\": \"Jaa pystysuora\",\n    \"Cell Background\": \"Solun tausta\",\n    \"Vertical Align\": \"Pystysuora tasaa\",\n    \"Top\": \"Alku\",\n    \"Middle\": \"Keskimm\\u00e4inen\",\n    \"Bottom\": \"Pohja\",\n    \"Align Top\": \"Tasaa alkuun\",\n    \"Align Middle\": \"Tasaa keskimm\\u00e4inen\",\n    \"Align Bottom\": \"Tasaa pohja\",\n    \"Cell Style\": \"Solun tyyli\",\n\n    // Files\n    \"Upload File\": \"Lataa tiedosto\",\n    \"Drop file\": \"Pudota tiedosto\",\n\n    // Emoticons\n    \"Emoticons\": \"Hymi\\u00f6it\\u00e4\",\n    \"Grinning face\": \"Virnisteli kasvot\",\n    \"Grinning face with smiling eyes\": \"Virnisteli kasvot hymyilev\\u00e4t silm\\u00e4t\",\n    \"Face with tears of joy\": \"Kasvot ilon kyyneleit\\u00e4\",\n    \"Smiling face with open mouth\": \"Hymyilev\\u00e4 kasvot suu auki\",\n    \"Smiling face with open mouth and smiling eyes\": \"Hymyilev\\u00e4 kasvot suu auki ja hymyilee silm\\u00e4t\",\n    \"Smiling face with open mouth and cold sweat\": \"Hymyilev\\u00e4 kasvot suu auki ja kylm\\u00e4 hiki\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Hymyilev\\u00e4 kasvot suu auki ja tiiviisti suljettu silm\\u00e4t\",\n    \"Smiling face with halo\": \"Hymyilev\\u00e4 kasvot Halo\",\n    \"Smiling face with horns\": \"Hymyilev\\u00e4 kasvot sarvet\",\n    \"Winking face\": \"Silm\\u00e4niskut kasvot\",\n    \"Smiling face with smiling eyes\": \"Hymyilev\\u00e4 kasvot hymyilev\\u00e4t silm\\u00e4t\",\n    \"Face savoring delicious food\": \"Kasvot maistella herkullista ruokaa\",\n    \"Relieved face\": \"Vapautettu kasvot\",\n    \"Smiling face with heart-shaped eyes\": \"Hymyilev\\u00e4t kasvot syd\\u00e4men muotoinen silm\\u00e4t\",\n    \"Smiling face with sunglasses\": \"Hymyilev\\u00e4 kasvot aurinkolasit\",\n    \"Smirking face\": \"Hym\\u00e4t\\u00e4\\u00e4 kasvot\",\n    \"Neutral face\": \"Neutraali kasvot\",\n    \"Expressionless face\": \"Ilmeet\\u00f6n kasvot\",\n    \"Unamused face\": \"Ei huvittanut kasvo\",\n    \"Face with cold sweat\": \"Kasvot kylm\\u00e4 hiki\",\n    \"Pensive face\": \"Mietteli\\u00e4s kasvot\",\n    \"Confused face\": \"Sekava kasvot\",\n    \"Confounded face\": \"Sekoitti kasvot\",\n    \"Kissing face\": \"Suudella kasvot\",\n    \"Face throwing a kiss\": \"Kasvo heitt\\u00e4\\u00e4 suudelma\",\n    \"Kissing face with smiling eyes\": \"Suudella kasvot hymyilev\\u00e4t silm\\u00e4t\",\n    \"Kissing face with closed eyes\": \"Suudella kasvot silm\\u00e4t ummessa\",\n    \"Face with stuck out tongue\": \"Kasvot ojensi kieli\",\n    \"Face with stuck out tongue and winking eye\": \"Kasvot on juuttunut pois kielen ja silm\\u00e4niskuja silm\\u00e4\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Kasvot on juuttunut pois kielen ja tiiviisti suljettuna silm\\u00e4t\",\n    \"Disappointed face\": \"Pettynyt kasvot\",\n    \"Worried face\": \"Huolissaan kasvot\",\n    \"Angry face\": \"Vihainen kasvot\",\n    \"Pouting face\": \"Pouting kasvot\",\n    \"Crying face\": \"Itku kasvot\",\n    \"Persevering face\": \"Pitk\\u00e4j\\u00e4nteinen kasvot\",\n    \"Face with look of triumph\": \"Kasvot ilme Triumph\",\n    \"Disappointed but relieved face\": \"Pettynyt mutta helpottunut kasvot\",\n    \"Frowning face with open mouth\": \"Frowning kasvot suu auki\",\n    \"Anguished face\": \"Tuskainen kasvot\",\n    \"Fearful face\": \"Pelokkuus kasvot\",\n    \"Weary face\": \"V\\u00e4synyt kasvot\",\n    \"Sleepy face\": \"Unelias kasvot\",\n    \"Tired face\": \"V\\u00e4synyt kasvot\",\n    \"Grimacing face\": \"Irvist\\u00e4en kasvot\",\n    \"Loudly crying face\": \"\\u00e4\\u00e4nekk\\u00e4\\u00e4sti itku kasvot\",\n    \"Face with open mouth\": \"Kasvot suu auki\",\n    \"Hushed face\": \"Hiljentynyt kasvot\",\n    \"Face with open mouth and cold sweat\": \"Kasvot suu auki ja kylm\\u00e4 hiki\",\n    \"Face screaming in fear\": \"Kasvot huutaa pelosta\",\n    \"Astonished face\": \"H\\u00e4mm\\u00e4stynyt kasvot\",\n    \"Flushed face\": \"Kasvojen punoitus\",\n    \"Sleeping face\": \"Nukkuva kasvot\",\n    \"Dizzy face\": \"Huimausta kasvot\",\n    \"Face without mouth\": \"Kasvot ilman suuhun\",\n    \"Face with medical mask\": \"Kasvot l\\u00e4\\u00e4ketieteen naamio\",\n\n    // Line breaker\n    \"Break\": \"Rikkoa\",\n\n    // Math\n    \"Subscript\": \"Alaindeksi\",\n    \"Superscript\": \"Yl\\u00e4indeksi\",\n\n    // Full screen\n    \"Fullscreen\": \"Koko n\\u00e4ytt\\u00f6\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Lis\\u00e4\\u00e4 vaakasuora viiva\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Poista muotoilu\",\n\n    // Save\n    \"Save\": \"Tallentaa\",\n\n    // Undo, redo\n    \"Undo\": \"Peru\",\n    \"Redo\": \"Tee uudelleen\",\n\n    // Select all\n    \"Select All\": \"Valitse kaikki\",\n\n    // Code view\n    \"Code View\": \"Koodi n\\u00e4kym\\u00e4\",\n\n    // Quote\n    \"Quote\": \"Lainaus\",\n    \"Increase\": \"Lis\\u00e4t\\u00e4\",\n    \"Decrease\": \"Pienenn\\u00e4\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Nopea insertti\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Erikoismerkkejä\",\n    \"Latin\": \"Latina\",\n    \"Greek\": \"Kreikkalainen\",\n    \"Cyrillic\": \"Kyrillinen\",\n    \"Punctuation\": \"Välimerkit\",\n    \"Currency\": \"Valuutta\",\n    \"Arrows\": \"Nuolet\",\n    \"Math\": \"Matematiikka\",\n    \"Misc\": \"Sekalaista\",\n\n    // Print.\n    \"Print\": \"Tulosta\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Oikeinkirjoittaja\",\n\n    // Help\n    \"Help\": \"Auta\",\n    \"Shortcuts\": \"Pikakuvakkeet\",\n    \"Inline Editor\": \"Inline-editori\",\n    \"Show the editor\": \"Näytä editori\",\n    \"Common actions\": \"Yhteisiä toimia\",\n    \"Copy\": \"Kopio\",\n    \"Cut\": \"Leikata\",\n    \"Paste\": \"Tahna\",\n    \"Basic Formatting\": \"Perusmuotoilu\",\n    \"Increase quote level\": \"Lisää lainaustasoa\",\n    \"Decrease quote level\": \"Laskea lainaustasoa\",\n    \"Image / Video\": \"Kuva / video\",\n    \"Resize larger\": \"Kokoa suurempi\",\n    \"Resize smaller\": \"Pienempi koko\",\n    \"Table\": \"Pöytä\",\n    \"Select table cell\": \"Valitse taulukon solu\",\n    \"Extend selection one cell\": \"Laajentaa valinta yhden solun\",\n    \"Extend selection one row\": \"Laajenna valinta yksi rivi\",\n    \"Navigation\": \"Suunnistus\",\n    \"Focus popup / toolbar\": \"Painopistevalo / työkalurivi\",\n    \"Return focus to previous position\": \"Palauta tarkennus edelliseen asentoon\",\n\n    // Embed.ly\n    \"Embed URL\": \"Upottaa URL-osoite\",\n    \"Paste in a URL to embed\": \"Liitä upotettu URL-osoite\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Liitetty sisältö tulee Microsoft Word -asiakirjasta. Haluatko säilyttää muodon tai puhdistaa sen?\",\n    \"Keep\": \"Pitää\",\n    \"Clean\": \"Puhdas\",\n    \"Word Paste Detected\": \"Sana-tahna havaittu\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/fr.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * French\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['fr'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Tapez quelque chose\",\n\n    // Basic formatting\n    \"Bold\": \"Gras\",\n    \"Italic\": \"Italique\",\n    \"Underline\": \"Soulign\\u00e9\",\n    \"Strikethrough\": \"Barr\\u00e9\",\n\n    // Main buttons\n    \"Insert\": \"Ins\\u00e9rer\",\n    \"Delete\": \"Supprimer\",\n    \"Cancel\": \"Annuler\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Retour\",\n    \"Remove\": \"Supprimer\",\n    \"More\": \"Plus\",\n    \"Update\": \"Actualiser\",\n    \"Style\": \"Style\",\n\n    // Font\n    \"Font Family\": \"Polices de caract\\u00e8res\",\n    \"Font Size\": \"Taille de police\",\n\n    // Colors\n    \"Colors\": \"Couleurs\",\n    \"Background\": \"Arri\\u00e8re-plan\",\n    \"Text\": \"Texte\",\n    \"HEX Color\": \"Couleur hexad\\u00e9cimale\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format de paragraphe\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Titre 1\",\n    \"Heading 2\": \"Titre 2\",\n    \"Heading 3\": \"Titre 3\",\n    \"Heading 4\": \"Titre 4\",\n\n    // Style\n    \"Paragraph Style\": \"Style de paragraphe\",\n    \"Inline Style\": \"Style en ligne\",\n\n    // Alignment\n    \"Align\": \"Aligner\",\n    \"Align Left\": \"Aligner \\u00e0 gauche\",\n    \"Align Center\": \"Aligner au centre\",\n    \"Align Right\": \"Aligner \\u00e0 droite\",\n    \"Align Justify\": \"Justifier\",\n    \"None\": \"Aucun\",\n\n    // Lists\n    \"Ordered List\": \"Liste ordonn\\u00e9e\",\n    \"Default\": \"Défaut\",\n    \"Lower Alpha\": \"Alpha inférieur\",\n    \"Lower Greek\": \"Grec inférieur\",\n    \"Lower Roman\": \"Bas romain\",\n    \"Upper Alpha\": \"Alpha supérieur\",\n    \"Upper Roman\": \"Haut romain\",\n\n    \"Unordered List\": \"Liste non ordonn\\u00e9e\",\n    \"Circle\": \"Cercle\",\n    \"Disc\": \"Disque\",\n    \"Square\": \"Carré\",\n\n    // Line height\n    \"Line Height\": \"Hauteur de la ligne\",\n    \"Single\": \"Unique\",\n    \"Double\": \"Double\",\n\n    // Indent\n    \"Decrease Indent\": \"Diminuer le retrait\",\n    \"Increase Indent\": \"Augmenter le retrait\",\n\n    // Links\n    \"Insert Link\": \"Ins\\u00e9rer un lien\",\n    \"Open in new tab\": \"Ouvrir dans un nouvel onglet\",\n    \"Open Link\": \"Ouvrir le lien\",\n    \"Edit Link\": \"Modifier le lien\",\n    \"Unlink\": \"Enlever le lien\",\n    \"Choose Link\": \"Choisir le lien\",\n\n    // Images\n    \"Insert Image\": \"Ins\\u00e9rer une image\",\n    \"Upload Image\": \"T\\u00e9l\\u00e9verser une image\",\n    \"By URL\": \"Par URL\",\n    \"Browse\": \"Parcourir\",\n    \"Drop image\": \"D\\u00e9poser une image\",\n    \"or click\": \"ou cliquer\",\n    \"Manage Images\": \"G\\u00e9rer les images\",\n    \"Loading\": \"Chargement\",\n    \"Deleting\": \"Suppression\",\n    \"Tags\": \"\\u00c9tiquettes\",\n    \"Are you sure? Image will be deleted.\": \"Etes-vous certain? L'image sera supprim\\u00e9e.\",\n    \"Replace\": \"Remplacer\",\n    \"Uploading\": \"En t\\u00e9l\\u00e9versement d'images\",\n    \"Loading image\": \"En chargement d'images\",\n    \"Display\": \"Afficher\",\n    \"Inline\": \"En ligne\",\n    \"Break Text\": \"Rompre le texte\",\n    \"Alternative Text\": \"Texte alternatif\",\n    \"Change Size\": \"Changer la dimension\",\n    \"Width\": \"Largeur\",\n    \"Height\": \"Hauteur\",\n    \"Something went wrong. Please try again.\": \"Quelque chose a mal tourn\\u00e9. Veuillez r\\u00e9essayer.\",\n    \"Image Caption\": \"L\\u00e9gende de l'image\",\n    \"Advanced Edit\": \"\\u00c9dition avanc\\u00e9e\",\n\n    // Video\n    \"Insert Video\": \"Ins\\u00e9rer une vid\\u00e9o\",\n    \"Embedded Code\": \"Code int\\u00e9gr\\u00e9\",\n    \"Paste in a video URL\": \"Coller l'URL d'une vid\\u00e9o\",\n    \"Drop video\": \"D\\u00e9poser une vid\\u00e9o\",\n    \"Your browser does not support HTML5 video.\": \"Votre navigateur ne supporte pas les vid\\u00e9os en format HTML5.\",\n    \"Upload Video\": \"T\\u00e9l\\u00e9verser une vid\\u00e9o\",\n\n    // Tables\n    \"Insert Table\": \"Ins\\u00e9rer un tableau\",\n    \"Table Header\": \"Ent\\u00eate de tableau\",\n    \"Remove Table\": \"Supprimer le tableau\",\n    \"Table Style\": \"Style de tableau\",\n    \"Horizontal Align\": \"Alignement horizontal\",\n    \"Row\": \"Ligne\",\n    \"Insert row above\": \"Ins\\u00e9rer une ligne au-dessus\",\n    \"Insert row below\": \"Ins\\u00e9rer une ligne en-dessous\",\n    \"Delete row\": \"Supprimer la ligne\",\n    \"Column\": \"Colonne\",\n    \"Insert column before\": \"Ins\\u00e9rer une colonne avant\",\n    \"Insert column after\": \"Ins\\u00e9rer une colonne apr\\u00e8s\",\n    \"Delete column\": \"Supprimer la colonne\",\n    \"Cell\": \"Cellule\",\n    \"Merge cells\": \"Fusionner les cellules\",\n    \"Horizontal split\": \"Diviser horizontalement\",\n    \"Vertical split\": \"Diviser verticalement\",\n    \"Cell Background\": \"Arri\\u00e8re-plan de la cellule\",\n    \"Vertical Align\": \"Alignement vertical\",\n    \"Top\": \"En haut\",\n    \"Middle\": \"Au centre\",\n    \"Bottom\": \"En bas\",\n    \"Align Top\": \"Aligner en haut\",\n    \"Align Middle\": \"Aligner au centre\",\n    \"Align Bottom\": \"Aligner en bas\",\n    \"Cell Style\": \"Style de cellule\",\n\n    // Files\n    \"Upload File\": \"T\\u00e9l\\u00e9verser un fichier\",\n    \"Drop file\": \"D\\u00e9poser un fichier\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u00c9motic\\u00f4nes\",\n    \"Grinning face\": \"Souriant visage\",\n    \"Grinning face with smiling eyes\": \"Souriant visage aux yeux souriants\",\n    \"Face with tears of joy\": \"Visage \\u00e0 des larmes de joie\",\n    \"Smiling face with open mouth\": \"Visage souriant avec la bouche ouverte\",\n    \"Smiling face with open mouth and smiling eyes\": \"Visage souriant avec la bouche ouverte et les yeux en souriant\",\n    \"Smiling face with open mouth and cold sweat\": \"Visage souriant avec la bouche ouverte et la sueur froide\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Visage souriant avec la bouche ouverte et les yeux herm\\u00e9tiquement clos\",\n    \"Smiling face with halo\": \"Sourire visage avec halo\",\n    \"Smiling face with horns\": \"Visage souriant avec des cornes\",\n    \"Winking face\": \"Clin d'oeil visage\",\n    \"Smiling face with smiling eyes\": \"Sourire visage aux yeux souriants\",\n    \"Face savoring delicious food\": \"Visage savourant de d\\u00e9licieux plats\",\n    \"Relieved face\": \"Soulag\\u00e9 visage\",\n    \"Smiling face with heart-shaped eyes\": \"Visage souriant avec des yeux en forme de coeur\",\n    \"Smiling face with sunglasses\": \"Sourire visage avec des lunettes de soleil\",\n    \"Smirking face\": \"Souriant visage\",\n    \"Neutral face\": \"Visage neutre\",\n    \"Expressionless face\": \"Visage sans expression\",\n    \"Unamused face\": \"Visage pas amus\\u00e9\",\n    \"Face with cold sweat\": \"Face \\u00e0 la sueur froide\",\n    \"Pensive face\": \"pensif visage\",\n    \"Confused face\": \"Visage confus\",\n    \"Confounded face\": \"visage maudit\",\n    \"Kissing face\": \"Embrasser le visage\",\n    \"Face throwing a kiss\": \"Visage jetant un baiser\",\n    \"Kissing face with smiling eyes\": \"Embrasser le visage avec les yeux souriants\",\n    \"Kissing face with closed eyes\": \"Embrasser le visage avec les yeux ferm\\u00e9s\",\n    \"Face with stuck out tongue\": \"Visage avec sortait de la langue\",\n    \"Face with stuck out tongue and winking eye\": \"Visage avec sortait de la langue et des yeux clignotante\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Visage avec sortait de la langue et les yeux ferm\\u00e9s herm\\u00e9tiquement\",\n    \"Disappointed face\": \"Visage d\\u00e9\\u00e7u\",\n    \"Worried face\": \"Visage inquiet\",\n    \"Angry face\": \"Visage en col\\u00e9re\",\n    \"Pouting face\": \"Faire la moue face\",\n    \"Crying face\": \"Pleurer visage\",\n    \"Persevering face\": \"Pers\\u00e9v\\u00e9rer face\",\n    \"Face with look of triumph\": \"Visage avec le regard de triomphe\",\n    \"Disappointed but relieved face\": \"D\\u00e9\\u00e7u, mais le visage soulag\\u00e9\",\n    \"Frowning face with open mouth\": \"Les sourcils fronc\\u00e9s visage avec la bouche ouverte\",\n    \"Anguished face\": \"Visage angoiss\\u00e9\",\n    \"Fearful face\": \"Craignant visage\",\n    \"Weary face\": \"Visage las\",\n    \"Sleepy face\": \"Visage endormi\",\n    \"Tired face\": \"Visage fatigu\\u00e9\",\n    \"Grimacing face\": \"Visage grima\\u00e7ante\",\n    \"Loudly crying face\": \"Pleurer bruyamment visage\",\n    \"Face with open mouth\": \"Visage \\u00e0 la bouche ouverte\",\n    \"Hushed face\": \"Visage feutr\\u00e9e\",\n    \"Face with open mouth and cold sweat\": \"Visage \\u00e0 la bouche ouverte et la sueur froide\",\n    \"Face screaming in fear\": \"Visage hurlant de peur\",\n    \"Astonished face\": \"Visage \\u00e9tonn\\u00e9\",\n    \"Flushed face\": \"Visage congestionn\\u00e9\",\n    \"Sleeping face\": \"Visage au bois dormant\",\n    \"Dizzy face\": \"Visage vertige\",\n    \"Face without mouth\": \"Visage sans bouche\",\n    \"Face with medical mask\": \"Visage avec un masque m\\u00e9dical\",\n\n    // Line breaker\n    \"Break\": \"Rompre\",\n\n    // Math\n    \"Subscript\": \"Indice\",\n    \"Superscript\": \"Exposant\",\n\n    // Full screen\n    \"Fullscreen\": \"Plein \\u00e9cran\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Ins\\u00e9rer une ligne horizontale\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Effacer le formatage\",\n\n    // Save\n    \"Save\": \"sauvegarder\",\n\n    // Undo, redo\n    \"Undo\": \"Annuler\",\n    \"Redo\": \"R\\u00e9tablir\",\n\n    // Select all\n    \"Select All\": \"Tout s\\u00e9lectionner\",\n\n    // Code view\n    \"Code View\": \"Mode HTML\",\n\n    // Quote\n    \"Quote\": \"Citation\",\n    \"Increase\": \"Augmenter\",\n    \"Decrease\": \"Diminuer\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Insertion rapide\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caract\\u00e8res sp\\u00e9ciaux\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Grec\",\n    \"Cyrillic\": \"Cyrillique\",\n    \"Punctuation\": \"Ponctuation\",\n    \"Currency\": \"Devise\",\n    \"Arrows\": \"Fl\\u00e8ches\",\n    \"Math\": \"Math\",\n    \"Misc\": \"Divers\",\n\n    // Print.\n    \"Print\": \"Imprimer\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Correcteur orthographique\",\n\n    // Help\n    \"Help\": \"Aide\",\n    \"Shortcuts\": \"Raccourcis\",\n    \"Inline Editor\": \"\\u00c9diteur en ligne\",\n    \"Show the editor\": \"Montrer l'\\u00e9diteur\",\n    \"Common actions\": \"Actions communes\",\n    \"Copy\": \"Copier\",\n    \"Cut\": \"Couper\",\n    \"Paste\": \"Coller\",\n    \"Basic Formatting\": \"Formatage de base\",\n    \"Increase quote level\": \"Augmenter le niveau de citation\",\n    \"Decrease quote level\": \"Diminuer le niveau de citation\",\n    \"Image / Video\": \"Image / vid\\u00e9o\",\n    \"Resize larger\": \"Redimensionner plus grand\",\n    \"Resize smaller\": \"Redimensionner plus petit\",\n    \"Table\": \"Table\",\n    \"Select table cell\": \"S\\u00e9lectionner la cellule du tableau\",\n    \"Extend selection one cell\": \"\\u00c9tendre la s\\u00e9lection d'une cellule\",\n    \"Extend selection one row\": \"\\u00c9tendre la s\\u00e9lection d'une ligne\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Retourner l'accent sur le poste pr\\u00e9c\\u00e9dent\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL int\\u00e9gr\\u00e9e\",\n    \"Paste in a URL to embed\": \"Coller une URL int\\u00e9gr\\u00e9e\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Le contenu coll\\u00e9 provient d'un document Microsoft Word. Voulez-vous conserver le format ou le nettoyer?\",\n    \"Keep\": \"Conserver\",\n    \"Clean\": \"Nettoyer\",\n    \"Word Paste Detected\": \"Copiage de mots d\\u00e9tect\\u00e9\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/he.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Hebrew\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['he'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u05d4\\u05e7\\u05dc\\u05d3 \\u05db\\u05d0\\u05df\",\n\n    // Basic formatting\n    \"Bold\": \"\\u05de\\u05d5\\u05d3\\u05d2\\u05e9\",\n    \"Italic\": \"\\u05de\\u05d5\\u05d8\\u05d4\",\n    \"Underline\": \"\\u05e7\\u05d5 \\u05ea\\u05d7\\u05ea\\u05d9\",\n    \"Strikethrough\": \"\\u05e7\\u05d5 \\u05d0\\u05de\\u05e6\\u05e2\\u05d9\",\n\n    // Main buttons\n    \"Insert\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea\",\n    \"Delete\": \"\\u05de\\u05d7\\u05d9\\u05e7\\u05d4\",\n    \"Cancel\": \"\\u05d1\\u05d9\\u05d8\\u05d5\\u05dc\",\n    \"OK\": \"\\u05d1\\u05e6\\u05e2\",\n    \"Back\": \"\\u05d1\\u05d7\\u05d6\\u05e8\\u05d4\",\n    \"Remove\": \"\\u05d4\\u05e1\\u05e8\",\n    \"More\": \"\\u05d9\\u05d5\\u05ea\\u05e8\",\n    \"Update\": \"\\u05e2\\u05d3\\u05db\\u05d5\\u05df\",\n    \"Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df\",\n\n    // Font\n    \"Font Family\": \"\\u05d2\\u05d5\\u05e4\\u05df\",\n    \"Font Size\": \"\\u05d2\\u05d5\\u05d3\\u05dc \\u05d4\\u05d2\\u05d5\\u05e4\\u05df\",\n\n    // Colors\n    \"Colors\": \"\\u05e6\\u05d1\\u05e2\\u05d9\\u05dd\",\n    \"Background\": \"\\u05e8\\u05e7\\u05e2\",\n    \"Text\": \"\\u05d4\\u05d8\\u05e1\\u05d8\",\n    \"HEX Color\": \"צבע הקס\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u05e4\\u05d5\\u05e8\\u05de\\u05d8\",\n    \"Normal\": \"\\u05e8\\u05d2\\u05d9\\u05dc\",\n    \"Code\": \"\\u05e7\\u05d5\\u05d3\",\n    \"Heading 1\": \"1 \\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n    \"Heading 2\": \"2 \\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n    \"Heading 3\": \"3 \\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n    \"Heading 4\": \"4 \\u05db\\u05d5\\u05ea\\u05e8\\u05ea\",\n\n    // Style\n    \"Paragraph Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df \\u05e4\\u05e1\\u05e7\\u05d4\",\n    \"Inline Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df \\u05de\\u05d5\\u05d1\\u05e0\\u05d4\",\n\n    // Alignment\n    \"Align\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8\",\n    \"Align Left\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05dc\\u05e9\\u05de\\u05d0\\u05dc\",\n    \"Align Center\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05dc\\u05de\\u05e8\\u05db\\u05d6\",\n    \"Align Right\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05dc\\u05d9\\u05de\\u05d9\\u05df\",\n    \"Align Justify\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05de\\u05dc\\u05d0\",\n    \"None\": \"\\u05d0\\u05e3 \\u05d0\\u05d7\\u05d3\",\n\n    // Lists\n    \"Ordered List\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e8\\u05e9\\u05d9\\u05de\\u05d4 \\u05de\\u05de\\u05d5\\u05e1\\u05e4\\u05e8\\u05ea\",\n    \"Default\": \"ברירת המחדל\",\n    \"Lower Alpha\": \"אלפא נמוך יותר\",\n    \"Lower Greek\": \"נמוך יוונית\",\n    \"Lower Roman\": \"התחתון הרומית\",\n    \"Upper Alpha\": \"אלפא העליון\",\n    \"Upper Roman\": \"הרומאי העליון\",\n\n    \"Unordered List\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e8\\u05e9\\u05d9\\u05de\\u05d4\",\n    \"Circle\": \"מעגל\",\n    \"Disc\": \"דיסק\",\n    \"Square\": \"כיכר\",\n\n    // Line height\n    \"Line Height\": \"גובה קו\",\n    \"Single\": \"יחיד\",\n    \"Double\": \"כפול\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u05d4\\u05e7\\u05d8\\u05e0\\u05ea \\u05db\\u05e0\\u05d9\\u05e1\\u05d4\",\n    \"Increase Indent\": \"\\u05d4\\u05d2\\u05d3\\u05dc\\u05ea \\u05db\\u05e0\\u05d9\\u05e1\\u05d4\",\n\n    // Links\n    \"Insert Link\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n    \"Open in new tab\": \"\\u05dc\\u05e4\\u05ea\\u05d5\\u05d7 \\u05d1\\u05d8\\u05d0\\u05d1 \\u05d7\\u05d3\\u05e9\",\n    \"Open Link\": \"\\u05e7\\u05d9\\u05e9\\u05d5\\u05e8 \\u05e4\\u05ea\\u05d5\\u05d7\",\n    \"Edit Link\": \"\\u05e7\\u05d9\\u05e9\\u05d5\\u05e8 \\u05e2\\u05e8\\u05d9\\u05db\\u05d4\",\n    \"Unlink\": \"\\u05d4\\u05e1\\u05e8\\u05ea \\u05d4\\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n    \"Choose Link\": \"\\u05dc\\u05d1\\u05d7\\u05d5\\u05e8 \\u05e7\\u05d9\\u05e9\\u05d5\\u05e8\",\n\n    // Images\n    \"Insert Image\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05ea\\u05de\\u05d5\\u05e0\\u05d4\",\n    \"Upload Image\": \"\\u05ea\\u05de\\u05d5\\u05e0\\u05ea \\u05d4\\u05e2\\u05dc\\u05d0\\u05d4\",\n    \"By URL\": \"URL \\u05e2\\u05dc \\u05d9\\u05d3\\u05d9\",\n    \"Browse\": \"\\u05dc\\u05d2\\u05dc\\u05d5\\u05e9\",\n    \"Drop image\": \"\\u05e9\\u05d7\\u05e8\\u05e8 \\u05d0\\u05ea \\u05d4\\u05ea\\u05de\\u05d5\\u05e0\\u05d4 \\u05db\\u05d0\\u05df\",\n    \"or click\": \"\\u05d0\\u05d5 \\u05dc\\u05d7\\u05e5\",\n    \"Manage Images\": \"\\u05e0\\u05d9\\u05d4\\u05d5\\u05dc \\u05d4\\u05ea\\u05de\\u05d5\\u05e0\\u05d5\\u05ea\",\n    \"Loading\": \"\\u05d8\\u05e2\\u05d9\\u05e0\\u05d4\",\n    \"Deleting\": \"\\u05de\\u05d7\\u05d9\\u05e7\\u05d4\",\n    \"Tags\": \"\\u05ea\\u05d2\\u05d9\\u05dd\",\n    \"Are you sure? Image will be deleted.\": \"\\u05d4\\u05d0\\u05dd \\u05d0\\u05ea\\u05d4 \\u05d1\\u05d8\\u05d5\\u05d7\\u003f \\u05d4\\u05ea\\u05de\\u05d5\\u05e0\\u05d4 \\u05ea\\u05de\\u05d7\\u05e7\\u002e\",\n    \"Replace\": \"\\u05dc\\u05d4\\u05d7\\u05dc\\u05d9\\u05e3\",\n    \"Uploading\": \"\\u05d4\\u05e2\\u05dc\\u05d0\\u05d4\",\n    \"Loading image\": \"\\u05ea\\u05de\\u05d5\\u05e0\\u05ea \\u05d8\\u05e2\\u05d9\\u05e0\\u05d4\",\n    \"Display\": \"\\u05ea\\u05e6\\u05d5\\u05d2\\u05d4\",\n    \"Inline\": \"\\u05d1\\u05e9\\u05d5\\u05e8\\u05d4\",\n    \"Break Text\": \"\\u05d8\\u05e7\\u05e1\\u05d8 \\u05d4\\u05e4\\u05e1\\u05e7\\u05d4\",\n    \"Alternative Text\": \"\\u05d8\\u05e7\\u05e1\\u05d8 \\u05d7\\u05dc\\u05d5\\u05e4\\u05d9\",\n    \"Change Size\": \"\\u05d2\\u05d5\\u05d3\\u05dc \\u05e9\\u05d9\\u05e0\\u05d5\\u05d9\",\n    \"Width\": \"\\u05e8\\u05d5\\u05d7\\u05d1\",\n    \"Height\": \"\\u05d2\\u05d5\\u05d1\\u05d4\",\n    \"Something went wrong. Please try again.\": \"\\u05de\\u05e9\\u05d4\\u05d5 \\u05d4\\u05e9\\u05ea\\u05d1\\u05e9. \\u05d1\\u05d1\\u05e7\\u05e9\\u05d4 \\u05e0\\u05e1\\u05d4 \\u05e9\\u05d5\\u05d1.\",\n    \"Image Caption\": \"כיתוב תמונה\",\n    \"Advanced Edit\": \"עריכה מתקדמת\",\n\n    // Video\n    \"Insert Video\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05d5\\u05d9\\u05d3\\u05d9\\u05d0\\u05d5\",\n    \"Embedded Code\": \"\\u05e7\\u05d5\\u05d3 \\u05de\\u05d5\\u05d8\\u05d1\\u05e2\",\n    \"Paste in a video URL\": \"הדבק בכתובת אתר של סרטון\",\n    \"Drop video\": \"ירידה וידאו\",\n    \"Your browser does not support HTML5 video.\": \"הדפדפן שלך אינו תומך וידאו html5.\",\n    \"Upload Video\": \"להעלות וידאו\",\n\n    // Tables\n    \"Insert Table\": \"\\u05d4\\u05db\\u05e0\\u05e1 \\u05d8\\u05d1\\u05dc\\u05d4\",\n    \"Table Header\": \"\\u05db\\u05d5\\u05ea\\u05e8\\u05ea \\u05d8\\u05d1\\u05dc\\u05d4\",\n    \"Remove Table\": \"\\u05d4\\u05e1\\u05e8 \\u05e9\\u05d5\\u05dc\\u05d7\\u05df\",\n    \"Table Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df \\u05d8\\u05d1\\u05dc\\u05d4\",\n    \"Horizontal Align\": \"\\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\\u05ea \\u05dc\\u05d9\\u05d9\\u05e9\\u05e8\",\n    \"Row\": \"\\u05e9\\u05d5\\u05e8\\u05d4\",\n    \"Insert row above\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e9\\u05d5\\u05e8\\u05d4 \\u05dc\\u05e4\\u05e0\\u05d9\",\n    \"Insert row below\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e9\\u05d5\\u05e8\\u05d4 \\u05d0\\u05d7\\u05e8\\u05d9\",\n    \"Delete row\": \"\\u05de\\u05d7\\u05d9\\u05e7\\u05ea \\u05e9\\u05d5\\u05e8\\u05d4\",\n    \"Column\": \"\\u05d8\\u05d5\\u05e8\",\n    \"Insert column before\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05d8\\u05d5\\u05e8 \\u05dc\\u05e4\\u05e0\\u05d9\",\n    \"Insert column after\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05d8\\u05d5\\u05e8 \\u05d0\\u05d7\\u05e8\\u05d9\",\n    \"Delete column\": \"\\u05de\\u05d7\\u05d9\\u05e7\\u05ea \\u05d8\\u05d5\\u05e8\",\n    \"Cell\": \"\\u05ea\\u05d0\",\n    \"Merge cells\": \"\\u05de\\u05d6\\u05d2 \\u05ea\\u05d0\\u05d9\\u05dd\",\n    \"Horizontal split\": \"\\u05e4\\u05e6\\u05dc \\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\",\n    \"Vertical split\": \"\\u05e4\\u05e6\\u05dc \\u05d0\\u05e0\\u05db\\u05d9\",\n    \"Cell Background\": \"\\u05e8\\u05e7\\u05e2 \\u05ea\\u05d0\",\n    \"Vertical Align\": \"\\u05d9\\u05d9\\u05e9\\u05d5\\u05e8 \\u05d0\\u05e0\\u05db\\u05d9\",\n    \"Top\": \"\\u05e2\\u05b6\\u05dc\\u05b4\\u05d9\\u05d5\\u05b9\\u05df\",\n    \"Middle\": \"\\u05ea\\u05b4\\u05d9\\u05db\\u05d5\\u05b9\\u05e0\\u05b4\\u05d9\",\n    \"Bottom\": \"\\u05ea\\u05d7\\u05ea\\u05d5\\u05df\",\n    \"Align Top\": \"\\u05dc\\u05d9\\u05d9\\u05e9\\u05e8 \\u05e2\\u05b6\\u05dc\\u05b4\\u05d9\\u05d5\\u05b9\\u05df\",\n    \"Align Middle\": \"\\u05dc\\u05d9\\u05d9\\u05e9\\u05e8 \\u05ea\\u05b4\\u05d9\\u05db\\u05d5\\u05b9\\u05e0\\u05b4\\u05d9\",\n    \"Align Bottom\": \"\\u05dc\\u05d9\\u05d9\\u05e9\\u05e8 \\u05ea\\u05d7\\u05ea\\u05d5\\u05df\",\n    \"Cell Style\": \"\\u05e1\\u05d2\\u05e0\\u05d5\\u05df \\u05ea\\u05d0\",\n\n    // Files\n    \"Upload File\": \"\\u05d4\\u05e2\\u05dc\\u05d0\\u05ea \\u05e7\\u05d5\\u05d1\\u05e5\",\n    \"Drop file\": \"\\u05d6\\u05e8\\u05d5\\u05e7 \\u05e7\\u05d5\\u05d1\\u05e5 \\u05db\\u05d0\\u05df\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u05e1\\u05de\\u05d9\\u05d9\\u05dc\\u05d9\\u05dd\",\n    \"Grinning face\": \"\\u05d7\\u05d9\\u05d9\\u05da \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Grinning face with smiling eyes\": \"\\u05d7\\u05d9\\u05d9\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05de\\u05d7\\u05d9\\u05d9\\u05db\\u05d5\\u05ea\",\n    \"Face with tears of joy\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05d3\\u05de\\u05e2\\u05d5\\u05ea \\u05e9\\u05dc \\u05e9\\u05de\\u05d7\\u05d4\",\n    \"Smiling face with open mouth\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7 \\u05d5\\u05de\\u05d7\\u05d9\\u05d9\\u05da \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7 \\u05d5\\u05d6\\u05d9\\u05e2\\u05d4 \\u05e7\\u05e8\\u05d4\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7 \\u05d5\\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05d1\\u05d7\\u05d5\\u05d6\\u05e7\\u05d4\\u002d\\u05e1\\u05d2\\u05d5\\u05e8\\u05d5\\u05ea\",\n    \"Smiling face with halo\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05d4\\u05d9\\u05dc\\u05d4\",\n    \"Smiling face with horns\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e7\\u05e8\\u05e0\\u05d5\\u05ea\",\n    \"Winking face\": \"\\u05e7\\u05e8\\u05d9\\u05e6\\u05d4 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Smiling face with smiling eyes\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05de\\u05d7\\u05d9\\u05d9\\u05db\\u05d5\\u05ea\",\n    \"Face savoring delicious food\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05ea\\u05e2\\u05e0\\u05d2 \\u05d0\\u05d5\\u05db\\u05dc \\u05d8\\u05e2\\u05d9\\u05dd\",\n    \"Relieved face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05dc \\u05d4\\u05e7\\u05dc\\u05d4\",\n    \"Smiling face with heart-shaped eyes\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05d1\\u05e6\\u05d5\\u05e8\\u05ea \\u05dc\\u05d1\",\n    \"Smiling face with sunglasses\": \"\\u05d7\\u05d9\\u05d5\\u05da \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05de\\u05e9\\u05e7\\u05e4\\u05d9 \\u05e9\\u05de\\u05e9\",\n    \"Smirking face\": \"\\u05d4\\u05d9\\u05d0 \\u05d7\\u05d9\\u05d9\\u05db\\u05d4 \\u05d7\\u05d9\\u05d5\\u05da \\u05e0\\u05d1\\u05d6\\u05d4 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Neutral face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e0\\u05d9\\u05d8\\u05e8\\u05dc\\u05d9\",\n    \"Expressionless face\": \"\\u05d1\\u05e4\\u05e0\\u05d9\\u05dd \\u05d7\\u05ea\\u05d5\\u05dd\",\n    \"Unamused face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05dc\\u05d0 \\u05de\\u05e9\\u05d5\\u05e2\\u05e9\\u05e2\\u05d9\\u05dd\",\n    \"Face with cold sweat\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05d6\\u05d9\\u05e2\\u05d4 \\u05e7\\u05e8\\u05d4\",\n    \"Pensive face\": \"\\u05d1\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d4\\u05d5\\u05e8\\u05d4\\u05e8\",\n    \"Confused face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d1\\u05d5\\u05dc\\u05d1\\u05dc\\u05d9\\u05dd\",\n    \"Confounded face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d1\\u05d5\\u05dc\\u05d1\\u05dc\",\n    \"Kissing face\": \"\\u05e0\\u05e9\\u05d9\\u05e7\\u05d5\\u05ea \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Face throwing a kiss\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05dc\\u05d6\\u05e8\\u05d5\\u05e7 \\u05e0\\u05e9\\u05d9\\u05e7\\u05d4\",\n    \"Kissing face with smiling eyes\": \"\\u05e0\\u05e9\\u05d9\\u05e7\\u05d5\\u05ea \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05de\\u05d7\\u05d9\\u05d9\\u05db\\u05d5\\u05ea\",\n    \"Kissing face with closed eyes\": \"\\u05e0\\u05e9\\u05d9\\u05e7\\u05d5\\u05ea \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05e1\\u05d2\\u05d5\\u05e8\\u05d5\\u05ea\",\n    \"Face with stuck out tongue\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05dc\\u05e9\\u05d5\\u05df \\u05d1\\u05dc\\u05d8\\u05d5\",\n    \"Face with stuck out tongue and winking eye\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05dc\\u05e9\\u05d5\\u05df \\u05ea\\u05e7\\u05d5\\u05e2\\u05d4 \\u05d4\\u05d7\\u05d5\\u05e6\\u05d4 \\u05d5\\u05e2\\u05d9\\u05df \\u05e7\\u05d5\\u05e8\\u05e6\\u05ea\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05dc\\u05e9\\u05d5\\u05df \\u05ea\\u05e7\\u05d5\\u05e2\\u05d4 \\u05d4\\u05d7\\u05d5\\u05e6\\u05d4 \\u05d5\\u05e2\\u05d9\\u05e0\\u05d9\\u05d9\\u05dd \\u05d1\\u05d7\\u05d5\\u05d6\\u05e7\\u05d4\\u002d\\u05e1\\u05d2\\u05d5\\u05e8\\u05d5\\u05ea\",\n    \"Disappointed face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d0\\u05d5\\u05db\\u05d6\\u05d1\\u05d9\\u05dd\",\n    \"Worried face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d5\\u05d3\\u05d0\\u05d2\\u05d9\\u05dd\",\n    \"Angry face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05db\\u05d5\\u05e2\\u05e1\\u05d9\\u05dd\",\n    \"Pouting face\": \"\\u05de\\u05e9\\u05d5\\u05e8\\u05d1\\u05d1 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Crying face\": \"\\u05d1\\u05db\\u05d9 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Persevering face\": \"\\u05d4\\u05ea\\u05de\\u05d3\\u05ea \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Face with look of triumph\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05de\\u05d1\\u05d8 \\u05e9\\u05dc \\u05e0\\u05e6\\u05d7\\u05d5\\u05df\",\n    \"Disappointed but relieved face\": \"\\u05de\\u05d0\\u05d5\\u05db\\u05d6\\u05d1 \\u05d0\\u05d1\\u05dc \\u05d4\\u05d5\\u05e7\\u05dc \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Frowning face with open mouth\": \"\\u05e7\\u05de\\u05d8 \\u05d0\\u05ea \\u05de\\u05e6\\u05d7 \\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7\",\n    \"Anguished face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05de\\u05d9\\u05d5\\u05e1\\u05e8\\u05d9\\u05dd\",\n    \"Fearful face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05d7\\u05e9\\u05e9\\u05d5\",\n    \"Weary face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05d5\\u05d9\\u05e8\\u05d9\",\n    \"Sleepy face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05dc \\u05e1\\u05dc\\u05d9\\u05e4\\u05d9\",\n    \"Tired face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05d9\\u05d9\\u05e4\\u05d9\\u05dd\",\n    \"Grimacing face\": \"\\u05d4\\u05d5\\u05d0 \\u05d4\\u05e2\\u05d5\\u05d5\\u05d4 \\u05d0\\u05ea \\u05e4\\u05e0\\u05d9 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Loudly crying face\": \"\\u05d1\\u05e7\\u05d5\\u05dc \\u05e8\\u05dd \\u05d1\\u05d5\\u05db\\u05d4 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Face with open mouth\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7\",\n    \"Hushed face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05d5\\u05e7\\u05d8\\u05d9\\u05dd\",\n    \"Face with open mouth and cold sweat\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05e4\\u05d4 \\u05e4\\u05ea\\u05d5\\u05d7 \\u05d5\\u05d6\\u05d9\\u05e2\\u05d4 \\u05e7\\u05e8\\u05d4\\u0022\",\n    \"Face screaming in fear\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e6\\u05d5\\u05e8\\u05d7\\u05d9\\u05dd \\u05d1\\u05e4\\u05d7\\u05d3\",\n    \"Astonished face\": \"\\u05e4\\u05e0\\u05d9\\u05d5 \\u05e0\\u05d3\\u05d4\\u05de\\u05d5\\u05ea\",\n    \"Flushed face\": \"\\u05e4\\u05e0\\u05d9\\u05d5 \\u05e1\\u05de\\u05d5\\u05e7\\u05d5\\u05ea\",\n    \"Sleeping face\": \"\\u05e9\\u05d9\\u05e0\\u05d4 \\u05e4\\u05e0\\u05d9\\u05dd\",\n    \"Dizzy face\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e9\\u05dc \\u05d3\\u05d9\\u05d6\\u05d9\",\n    \"Face without mouth\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05dc\\u05dc\\u05d0 \\u05e4\\u05d4\",\n    \"Face with medical mask\": \"\\u05e4\\u05e0\\u05d9\\u05dd \\u05e2\\u05dd \\u05de\\u05e1\\u05db\\u05d4 \\u05e8\\u05e4\\u05d5\\u05d0\\u05d9\\u05ea\",\n\n    // Line breaker\n    \"Break\": \"\\u05d4\\u05e4\\u05e1\\u05e7\\u05d4\",\n\n    // Math\n    \"Subscript\": \"\\u05db\\u05ea\\u05d1 \\u05ea\\u05d7\\u05ea\\u05d9\",\n    \"Superscript\": \"\\u05e2\\u05d9\\u05dc\\u05d9\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u05de\\u05e1\\u05da \\u05de\\u05dc\\u05d0\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u05d4\\u05d5\\u05e1\\u05e4\\u05ea \\u05e7\\u05d5 \\u05d0\\u05d5\\u05e4\\u05e7\\u05d9\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u05dc\\u05d4\\u05e1\\u05d9\\u05e8 \\u05e2\\u05d9\\u05e6\\u05d5\\u05d1\",\n\n    // Save\n    \"Save\": \"\\u05dc\\u05d4\\u05e6\\u05d9\\u05dc\",\n\n    // Undo, redo\n    \"Undo\": \"\\u05d1\\u05d9\\u05d8\\u05d5\\u05dc\",\n    \"Redo\": \"\\u05d1\\u05e6\\u05e2 \\u05e9\\u05d5\\u05d1\",\n\n    // Select all\n    \"Select All\": \"\\u05d1\\u05d7\\u05e8 \\u05d4\\u05db\\u05dc\",\n\n    // Code view\n    \"Code View\": \"\\u05ea\\u05e6\\u05d5\\u05d2\\u05ea \\u05e7\\u05d5\\u05d3\",\n\n    // Quote\n    \"Quote\": \"\\u05e6\\u05d9\\u05d8\\u05d5\\u05d8\",\n    \"Increase\": \"\\u05dc\\u05d4\\u05d2\\u05d1\\u05d9\\u05e8\",\n    \"Decrease\": \"\\u05d9\\u05e8\\u05d9\\u05d3\\u05d4\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u05db\\u05e0\\u05e1 \\u05de\\u05d4\\u05d9\\u05e8\",\n\n    // Spcial Characters\n    \"Special Characters\": \"תווים מיוחדים\",\n    \"Latin\": \"לָטִינִית\",\n    \"Greek\": \"יווני\",\n    \"Cyrillic\": \"קירילית\",\n    \"Punctuation\": \"פיסוק\",\n    \"Currency\": \"מַטְבֵּעַ\",\n    \"Arrows\": \"חצים\",\n    \"Math\": \"מתמטיקה\",\n    \"Misc\": \"שונות\",\n\n    // Print.\n    \"Print\": \"הדפס\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"בודק איות\",\n\n    // Help\n    \"Help\": \"עֶזרָה\",\n    \"Shortcuts\": \"קיצורי דרך\",\n    \"Inline Editor\": \"עורך מוטבע\",\n    \"Show the editor\": \"להראות את העורך\",\n    \"Common actions\": \"פעולות נפוצות\",\n    \"Copy\": \"עותק\",\n    \"Cut\": \"גזירה\",\n    \"Paste\": \"לְהַדבִּיק\",\n    \"Basic Formatting\": \"עיצוב בסיסי\",\n    \"Increase quote level\": \"רמת ציטוט\",\n    \"Decrease quote level\": \"רמת ציטוט ירידה\",\n    \"Image / Video\": \"תמונה / וידאו\",\n    \"Resize larger\": \"גודל גדול יותר\",\n    \"Resize smaller\": \"גודל קטן יותר\",\n    \"Table\": \"שולחן\",\n    \"Select table cell\": \"בחר תא תא - -\",\n    \"Extend selection one cell\": \"להאריך את הבחירה תא אחד\",\n    \"Extend selection one row\": \"להאריך את הבחירה שורה אחת\",\n    \"Navigation\": \"ניווט\",\n    \"Focus popup / toolbar\": \"מוקד קופץ / סרגל הכלים\",\n    \"Return focus to previous position\": \"חזרה להתמקד קודם\",\n\n    // Embed.ly\n    \"Embed URL\": \"כתובת אתר להטביע\",\n    \"Paste in a URL to embed\": \"הדבק כתובת אתר להטביע\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"התוכן המודבק מגיע ממסמך Word של Microsoft. האם ברצונך לשמור את הפורמט או לנקות אותו?\",\n    \"Keep\": \"לִשְׁמוֹר\",\n    \"Clean\": \"לְנַקוֹת\",\n    \"Word Paste Detected\": \"הדבק מילה זוהתה\"\n  },\n  direction: \"rtl\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/hr.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Croatian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['hr'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Napi\\u0161i ne\\u0161to\",\n\n    // Basic formatting\n    \"Bold\": \"Podebljaj\",\n    \"Italic\": \"Kurziv\",\n    \"Underline\": \"Podcrtano\",\n    \"Strikethrough\": \"Precrtano\",\n\n    // Main buttons\n    \"Insert\": \"Umetni\",\n    \"Delete\": \"Obri\\u0161i\",\n    \"Cancel\": \"Otka\\u017ei\",\n    \"OK\": \"U redu\",\n    \"Back\": \"Natrag\",\n    \"Remove\": \"Ukloni\",\n    \"More\": \"Vi\\u0161e\",\n    \"Update\": \"A\\u017euriraj\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Odaberi font\",\n    \"Font Size\": \"Veli\\u010dina fonta\",\n\n    // Colors\n    \"Colors\": \"Boje\",\n    \"Background\": \"Pozadina\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"Heksadecimalne boje\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format odlomka\",\n    \"Normal\": \"Normalno\",\n    \"Code\": \"Izvorni kod\",\n    \"Heading 1\": \"Naslov 1\",\n    \"Heading 2\": \"Naslov 2\",\n    \"Heading 3\": \"Naslov 3\",\n    \"Heading 4\": \"Naslov 4\",\n\n    // Style\n    \"Paragraph Style\": \"Stil odlomka\",\n    \"Inline Style\": \"Stil u liniji\",\n\n    // Alignment\n    \"Align\": \"Poravnaj\",\n    \"Align Left\": \"Poravnaj lijevo\",\n    \"Align Center\": \"Poravnaj po sredini\",\n    \"Align Right\": \"Poravnaj desno\",\n    \"Align Justify\": \"Obostrano poravnanje\",\n    \"None\": \"Nijedan\",\n\n    // Lists\n    \"Ordered List\": \"Ure\\u0111ena lista\",\n    \"Default\": \"Zadano\",\n    \"Lower Alpha\": \"Niži alfa\",\n    \"Lower Greek\": \"Donji grčki\",\n    \"Lower Roman\": \"Niži rimski\",\n    \"Upper Alpha\": \"Gornja alfa\",\n    \"Upper Roman\": \"Gornji rimski\",\n\n    \"Unordered List\": \"Neure\\u0111ena lista\",\n    \"Circle\": \"Krug\",\n    \"Disc\": \"Disk\",\n    \"Square\": \"Kvadrat\",\n\n    // Line height\n    \"Line Height\": \"Visina crte\",\n    \"Single\": \"Singl\",\n    \"Double\": \"Dvostruko\",\n\n    // Indent\n    \"Decrease Indent\": \"Uvuci odlomak\",\n    \"Increase Indent\": \"Izvuci odlomak\",\n\n    // Links\n    \"Insert Link\": \"Umetni link\",\n    \"Open in new tab\": \"Otvori u novom prozoru\",\n    \"Open Link\": \"Otvori link\",\n    \"Edit Link\": \"Uredi link\",\n    \"Unlink\": \"Ukloni link\",\n    \"Choose Link\": \"Odaberi link\",\n\n    // Images\n    \"Insert Image\": \"Umetni sliku\",\n    \"Upload Image\": \"Prijenos slike\",\n    \"By URL\": \"Prema URL\",\n    \"Browse\": \"Odabir\",\n    \"Drop image\": \"Ispusti sliku\",\n    \"or click\": \"ili odaberi\",\n    \"Manage Images\": \"Upravljanje slikama\",\n    \"Loading\": \"U\\u010ditavanje\",\n    \"Deleting\": \"Brisanje\",\n    \"Tags\": \"Oznake\",\n    \"Are you sure? Image will be deleted.\": \"Da li ste sigurni da \\u017eelite obrisati ovu sliku?\",\n    \"Replace\": \"Zamijeni\",\n    \"Uploading\": \"Prijenos\",\n    \"Loading image\": \"Otvaram sliku\",\n    \"Display\": \"Prika\\u017ei\",\n    \"Inline\": \"U liniji\",\n    \"Break Text\": \"Odvojeni tekst\",\n    \"Alternative Text\": \"Alternativni tekst\",\n    \"Change Size\": \"Promjena veli\\u010dine\",\n    \"Width\": \"\\u0160irina\",\n    \"Height\": \"Visina\",\n    \"Something went wrong. Please try again.\": \"Ne\\u0161to je po\\u0161lo po zlu. Molimo poku\\u0161ajte ponovno.\",\n    \"Image Caption\": \"Opis slike\",\n    \"Advanced Edit\": \"Napredno uređivanje\",\n\n    // Video\n    \"Insert Video\": \"Umetni video\",\n    \"Embedded Code\": \"Ugra\\u0111eni kod\",\n    \"Paste in a video URL\": \"Zalijepite u URL videozapisa\",\n    \"Drop video\": \"Ispusti video\",\n    \"Your browser does not support HTML5 video.\": \"Vaš preglednik ne podržava HTML video.\",\n    \"Upload Video\": \"Prenesi videozapis\",\n\n    // Tables\n    \"Insert Table\": \"Umetni tablicu\",\n    \"Table Header\": \"Zaglavlje tablice\",\n    \"Remove Table\": \"Izbri\\u0161i tablicu\",\n    \"Table Style\": \"Tablica stil\",\n    \"Horizontal Align\": \"Horizontalna poravnanje\",\n    \"Row\": \"Red\",\n    \"Insert row above\": \"Umetni red iznad\",\n    \"Insert row below\": \"Umetni red ispod\",\n    \"Delete row\": \"Obri\\u0161i red\",\n    \"Column\": \"Stupac\",\n    \"Insert column before\": \"Umetni stupac prije\",\n    \"Insert column after\": \"Umetni stupac poslije\",\n    \"Delete column\": \"Obri\\u0161i stupac\",\n    \"Cell\": \"Polje\",\n    \"Merge cells\": \"Spoji polja\",\n    \"Horizontal split\": \"Horizontalno razdvajanje polja\",\n    \"Vertical split\": \"Vertikalno razdvajanje polja\",\n    \"Cell Background\": \"Polje pozadine\",\n    \"Vertical Align\": \"Vertikalno poravnanje\",\n    \"Top\": \"Vrh\",\n    \"Middle\": \"Sredina\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Poravnaj na vrh\",\n    \"Align Middle\": \"Poravnaj po sredini\",\n    \"Align Bottom\": \"Poravnaj na dno\",\n    \"Cell Style\": \"Stil polja\",\n\n    // Files\n    \"Upload File\": \"Prijenos datoteke\",\n    \"Drop file\": \"Ispusti datoteku\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikoni\",\n    \"Grinning face\": \"Nacereno lice\",\n    \"Grinning face with smiling eyes\": \"Nacereno lice s nasmije\\u0161enim o\\u010dima\",\n    \"Face with tears of joy\": \"Lice sa suzama radosnicama\",\n    \"Smiling face with open mouth\": \"Nasmijano lice s otvorenim ustima\",\n    \"Smiling face with open mouth and smiling eyes\": \"Nasmijano lice s otvorenim ustima i nasmijanim o\\u010dima\",\n    \"Smiling face with open mouth and cold sweat\": \"Nasmijano lice s otvorenim ustima i hladnim znojem\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Nasmijano lice s otvorenim ustima i \\u010dvrsto zatvorenih o\\u010diju\",\n    \"Smiling face with halo\": \"Nasmijano lice sa aureolom\",\n    \"Smiling face with horns\": \"Nasmijano lice s rogovima\",\n    \"Winking face\": \"Lice koje namiguje\",\n    \"Smiling face with smiling eyes\": \"Nasmijano lice s nasmiješenim o\\u010dima\",\n    \"Face savoring delicious food\": \"Lice koje u\\u017eiva ukusnu hranu\",\n    \"Relieved face\": \"Lice s olak\\u0161anjem\",\n    \"Smiling face with heart-shaped eyes\": \"Nasmijano lice sa o\\u010dima u obliku srca\",\n    \"Smiling face with sunglasses\": \"Nasmijano lice sa sun\\u010danim nao\\u010dalama\",\n    \"Smirking face\": \"Zlokobno nasmije\\u0161eno lice\",\n    \"Neutral face\": \"Neutralno lice\",\n    \"Expressionless face\": \"Bezizra\\u017eajno lice\",\n    \"Unamused face\": \"Nezainteresirano lice\",\n    \"Face with cold sweat\": \"Lice s hladnim znojem\",\n    \"Pensive face\": \"Zami\\u0161ljeno lice\",\n    \"Confused face\": \"Zbunjeno lice\",\n    \"Confounded face\": \"Zbunjeno lice\",\n    \"Kissing face\": \"Lice s poljupcem\",\n    \"Face throwing a kiss\": \"Lice koje baca poljubac\",\n    \"Kissing face with smiling eyes\": \"Lice s poljupcem s nasmije\\u0161enim o\\u010dima\",\n    \"Kissing face with closed eyes\": \"Lice s poljupcem zatvorenih o\\u010diju\",\n    \"Face with stuck out tongue\": \"Lice s ispru\\u017eenim jezikom\",\n    \"Face with stuck out tongue and winking eye\": \"Lice s ispru\\u017eenim jezikom koje namiguje\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Lice s ispru\\u017eenim jezikom i \\u010dvrsto zatvorenih o\\u010diju\",\n    \"Disappointed face\": \"Razo\\u010darano lice\",\n    \"Worried face\": \"Zabrinuto lice\",\n    \"Angry face\": \"Ljutito lice\",\n    \"Pouting face\": \"Nadureno lice\",\n    \"Crying face\": \"Uplakano lice\",\n    \"Persevering face\": \"Lice s negodovanjem\",\n    \"Face with look of triumph\": \"Trijumfalno lice\",\n    \"Disappointed but relieved face\": \"Razo\\u010darano ali olakšano lice\",\n    \"Frowning face with open mouth\": \"Namrgo\\u0111eno lice s otvorenim ustima\",\n    \"Anguished face\": \"Tjeskobno lice\",\n    \"Fearful face\": \"Prestra\\u0161eno lice\",\n    \"Weary face\": \"Umorno lice\",\n    \"Sleepy face\": \"Pospano lice\",\n    \"Tired face\": \"Umorno lice\",\n    \"Grimacing face\": \"Lice sa grimasama\",\n    \"Loudly crying face\": \"Glasno pla\\u010du\\u0107e lice\",\n    \"Face with open mouth\": \"Lice s otvorenim ustima\",\n    \"Hushed face\": \"Tiho lice\",\n    \"Face with open mouth and cold sweat\": \"Lice s otvorenim ustima i hladnim znojem\",\n    \"Face screaming in fear\": \"Lice koje vri\\u0161ti u strahu\",\n    \"Astonished face\": \"Zaprepa\\u0161teno lice\",\n    \"Flushed face\": \"Zajapureno lice\",\n    \"Sleeping face\": \"Spava\\u0107e lice\",\n    \"Dizzy face\": \"Lice sa vrtoglavicom\",\n    \"Face without mouth\": \"Lice bez usta\",\n    \"Face with medical mask\": \"Lice s medicinskom maskom\",\n\n    // Line breaker\n    \"Break\": \"Odvojeno\",\n\n    // Math\n    \"Subscript\": \"Indeks\",\n    \"Superscript\": \"Eksponent\",\n\n    // Full screen\n    \"Fullscreen\": \"Puni zaslon\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Umetni liniju\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Ukloni oblikovanje\",\n\n    // Save\n    \"Save\": \"\\u0055\\u0161\\u0074\\u0065\\u0064\\u006a\\u0065\\u0074\\u0069\",\n\n    // Undo, redo\n    \"Undo\": \"Korak natrag\",\n    \"Redo\": \"Korak naprijed\",\n\n    // Select all\n    \"Select All\": \"Odaberi sve\",\n\n    // Code view\n    \"Code View\": \"Pregled koda\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Pove\\u0107aj\",\n    \"Decrease\": \"Smanji\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Brzo umetak\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Posebni znakovi\",\n    \"Latin\": \"Latinski\",\n    \"Greek\": \"Grčki\",\n    \"Cyrillic\": \"Ćirilica\",\n    \"Punctuation\": \"Interpunkcija\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Strelice\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Razno\",\n\n    // Print.\n    \"Print\": \"Otisak\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Provjeritelj pravopisa\",\n\n    // Help\n    \"Help\": \"Pomoć\",\n    \"Shortcuts\": \"Prečaci\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Prikaži urednika\",\n    \"Common actions\": \"Zajedničke radnje\",\n    \"Copy\": \"Kopirati\",\n    \"Cut\": \"Rez\",\n    \"Paste\": \"Zalijepiti\",\n    \"Basic Formatting\": \"Osnovno oblikovanje\",\n    \"Increase quote level\": \"Povećati razinu citata\",\n    \"Decrease quote level\": \"Smanjite razinu citata\",\n    \"Image / Video\": \"Slika / video\",\n    \"Resize larger\": \"Promijenite veličinu većeg\",\n    \"Resize smaller\": \"Promijenite veličinu manju\",\n    \"Table\": \"Stol\",\n    \"Select table cell\": \"Odaberite stolnu ćeliju\",\n    \"Extend selection one cell\": \"Proširiti odabir jedne ćelije\",\n    \"Extend selection one row\": \"Proširite odabir jednog retka\",\n    \"Navigation\": \"Navigacija\",\n    \"Focus popup / toolbar\": \"Fokus popup / alatnoj traci\",\n    \"Return focus to previous position\": \"Vratiti fokus na prethodnu poziciju\",\n\n    // Embed.ly\n    \"Embed URL\": \"Uredi url\",\n    \"Paste in a URL to embed\": \"Zalijepite URL da biste ga ugradili\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Zalijepi sadržaj dolazi iz Microsoft Word dokumenta. Želite li zadržati format ili očistiti?\",\n    \"Keep\": \"Zadržati\",\n    \"Clean\": \"Čist\",\n    \"Word Paste Detected\": \"Otkrivena je zastavica riječi\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/hu.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Hungarian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['hu'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Szöveg...\",\n\n    // Basic formatting\n    \"Bold\": \"Félkövér\",\n    \"Italic\": \"Dőlt\",\n    \"Underline\": \"Aláhúzott\",\n    \"Strikethrough\": \"Áthúzott\",\n\n    // Main buttons\n    \"Insert\": \"Beillesztés\",\n    \"Delete\": \"Törlés\",\n    \"Cancel\": \"Mégse\",\n    \"OK\": \"Rendben\",\n    \"Back\": \"Vissza\",\n    \"Remove\": \"Eltávolítás\",\n    \"More\": \"Több\",\n    \"Update\": \"Frissítés\",\n    \"Style\": \"Stílus\",\n\n    // Font\n    \"Font Family\": \"Betűtípus\",\n    \"Font Size\": \"Betűméret\",\n\n    // Colors\n    \"Colors\": \"Színek\",\n    \"Background\": \"Háttér\",\n    \"Text\": \"Szöveg\",\n    \"HEX Color\": \"HEX színkód\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formátumok\",\n    \"Normal\": \"Normál\",\n    \"Code\": \"Kód\",\n    \"Heading 1\": \"Címsor 1\",\n    \"Heading 2\": \"Címsor 2\",\n    \"Heading 3\": \"Címsor 3\",\n    \"Heading 4\": \"Címsor 4\",\n\n    // Style\n    \"Paragraph Style\": \"Bekezdés stílusa\",\n    \"Inline Style\": \" Helyi stílus\",\n\n    // Alignment\n    \"Align\": \"Igazítás\",\n    \"Align Left\": \"Balra igazít\",\n    \"Align Center\": \"Középre zár\",\n    \"Align Right\": \"Jobbra igazít\",\n    \"Align Justify\": \"Sorkizárás\",\n    \"None\": \"Egyik sem\",\n\n    // Lists\n    \"Ordered List\": \"Számozás\",\n    \"Default\": \"Alapértelmezett\",\n    \"Lower Alpha\": \"Csökkenő alfa\",\n    \"Lower Greek\": \"Csökkenő görög\",\n    \"Lower Roman\": \"Csökkenő római\",\n    \"Upper Alpha\": \"Növekvő alfa\",\n    \"Upper Roman\": \"Növekvő római\",\n\n    \"Unordered List\": \"Felsorolás\",\n    \"Circle\": \"Kör\",\n    \"Disc\": \"Korong\",\n    \"Square\": \"Négyzet\",\n\n    // Line height\n    \"Line Height\": \"Vonal magassága\",\n    \"Single\": \"Szimpla\",\n    \"Double\": \"Dupla\",\n\n    // Indent\n    \"Decrease Indent\": \"Behúzás csökkentése\",\n    \"Increase Indent\": \"Behúzás növelése\",\n\n    // Links\n    \"Insert Link\": \"Hivatkozás beillesztése\",\n    \"Open in new tab\": \"Megnyitás új lapon\",\n    \"Open Link\": \"Hivatkozás megnyitása\",\n    \"Edit Link\": \"Hivatkozás szerkesztése\",\n    \"Unlink\": \"Hivatkozás törlése\",\n    \"Choose Link\": \"Keresés a lapok között\",\n\n    // Images\n    \"Insert Image\": \"Kép beillesztése\",\n    \"Upload Image\": \"Kép feltöltése\",\n    \"By URL\": \"Webcím megadása\",\n    \"Browse\": \"Böngészés a Médiában\",\n    \"Drop image\": \"Húzza ide a képet\",\n    \"or click\": \"vagy kattintson ide\",\n    \"Manage Images\": \"Képek kezelése\",\n    \"Loading\": \"Betöltés...\",\n    \"Deleting\": \"Törlés...\",\n    \"Tags\": \"Címkék\",\n    \"Are you sure? Image will be deleted.\": \"Biztos benne? A kép törlésre kerül.\",\n    \"Replace\": \"Csere\",\n    \"Uploading\": \"Feltöltés\",\n    \"Loading image\": \"Kép betöltése\",\n    \"Display\": \"Kijelző\",\n    \"Inline\": \"Sorban\",\n    \"Break Text\": \"Szöveg törése\",\n    \"Alternative Text\": \"Alternatív szöveg\",\n    \"Change Size\": \"Méret módosítása\",\n    \"Width\": \"Szélesség\",\n    \"Height\": \"Magasság\",\n    \"Something went wrong. Please try again.\": \"Valami elromlott. Kérjük próbálja újra.\",\n    \"Image Caption\": \"Képaláírás\",\n    \"Advanced Edit\": \"Fejlett szerkesztés\",\n\n    // Video\n    \"Insert Video\": \"Videó beillesztése\",\n    \"Embedded Code\": \"Kód bemásolása\",\n    \"Paste in a video URL\": \"Illessze be a videó webcímét\",\n    \"Drop video\": \"Húzza ide a videót\",\n    \"Your browser does not support HTML5 video.\": \"A böngészője nem támogatja a HTML5 videókat.\",\n    \"Upload Video\": \"Videó feltöltése\",\n\n    // Tables\n    \"Insert Table\": \"Táblázat beillesztése\",\n    \"Table Header\": \"Táblázat fejléce\",\n    \"Remove Table\": \"Tábla eltávolítása\",\n    \"Table Style\": \"Táblázat stílusa\",\n    \"Horizontal Align\": \"Vízszintes igazítás\",\n    \"Row\": \"Sor\",\n    \"Insert row above\": \"Sor beszúrása elé\",\n    \"Insert row below\": \"Sor beszúrása mögé\",\n    \"Delete row\": \"Sor törlése\",\n    \"Column\": \"Oszlop\",\n    \"Insert column before\": \"Oszlop beszúrása elé\",\n    \"Insert column after\": \"Oszlop beszúrása mögé\",\n    \"Delete column\": \"Oszlop törlése\",\n    \"Cell\": \"Cella\",\n    \"Merge cells\": \"Cellák egyesítése\",\n    \"Horizontal split\": \"Vízszintes osztott\",\n    \"Vertical split\": \"Függőleges osztott\",\n    \"Cell Background\": \"Cella háttere\",\n    \"Vertical Align\": \"Függőleges igazítás\",\n    \"Top\": \"Felső\",\n    \"Middle\": \"Középső\",\n    \"Bottom\": \"Alsó\",\n    \"Align Top\": \"Igazítsa felülre\",\n    \"Align Middle\": \"Igazítsa középre\",\n    \"Align Bottom\": \"Igazítsa alúlra\",\n    \"Cell Style\": \"Cella stílusa\",\n\n    // Files\n    \"Upload File\": \"Fájl feltöltése\",\n    \"Drop file\": \"Húzza ide a fájlt\",\n\n    // Emoticons\n    \"Emoticons\": \"Hangulatjelek\",\n    \"Grinning face\": \"Vigyorgó arc\",\n    \"Grinning face with smiling eyes\": \"Vigyorgó arc mosolygó szemekkel\",\n    \"Face with tears of joy\": \"Arcon az öröm könnyei\",\n    \"Smiling face with open mouth\": \"Mosolygó arc tátott szájjal\",\n    \"Smiling face with open mouth and smiling eyes\": \"Mosolygó arc tátott szájjal és mosolygó szemek\",\n    \"Smiling face with open mouth and cold sweat\": \"Mosolygó arc tátott szájjal és hideg veríték\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Mosolygó arc tátott szájjal és lehunyt szemmel\",\n    \"Smiling face with halo\": \"Mosolygó arc dicsfényben\",\n    \"Smiling face with horns\": \"Mosolygó arc szarvakkal\",\n    \"Winking face\": \"Kacsintós arc\",\n    \"Smiling face with smiling eyes\": \"Mosolygó arc mosolygó szemekkel\",\n    \"Face savoring delicious food\": \"Ízletes ételek kóstolása\",\n    \"Relieved face\": \"Megkönnyebbült arc\",\n    \"Smiling face with heart-shaped eyes\": \"Mosolygó arc szív alakú szemekkel\",\n    \"Smilin g face with sunglasses\": \"Mosolygó arc napszemüvegben\",\n    \"Smirking face\": \"Vigyorgó arc\",\n    \"Neutral face\": \"Semleges arc\",\n    \"Expressionless face\": \"Kifejezéstelen arc\",\n    \"Unamused face\": \"Unott arc\",\n    \"Face with cold sweat\": \"Arcán hideg verejtékkel\",\n    \"Pensive face\": \"Töprengő arc\",\n    \"Confused face\": \"Zavaros arc\",\n    \"Confounded face\": \"Rácáfolt arc\",\n    \"Kissing face\": \"Csókos arc\",\n    \"Face throwing a kiss\": \"Arcra dobott egy csókot\",\n    \"Kissing face with smiling eyes\": \"Csókos arcán mosolygó szemek\",\n    \"Kissing face with closed eyes\": \"Csókos arcán csukott szemmel\",\n    \"Face with stuck out tongue\": \"Kinyújototta a nyelvét\",\n    \"Face with stuck out tongue and winking eye\": \"Kinyújtotta a nyelvét és kacsintó szem\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Kinyújtotta a nyelvét és szorosan lehunyt szemmel\",\n    \"Disappointed face\": \"Csalódott arc\",\n    \"Worried face\": \"Aggódó arc\",\n    \"Angry face\": \"Dühös arc\",\n    \"Pouting face\": \"Duzzogó arc\",\n    \"Crying face\": \"Síró arc\",\n    \"Persevering face\": \"Kitartó arc\",\n    \"Face with look of triumph\": \"Arcát diadalmas pillantást\",\n    \"Disappointed but relieved face\": \"Csalódott, de megkönnyebbült arc\",\n    \"Frowning face with open mouth\": \"Komor arc tátott szájjal\",\n    \"Anguished face\": \"Gyötrődő arc\",\n    \"Fearful face\": \"Félelmetes arc\",\n    \"Weary face\": \"Fáradt arc\",\n    \"Sleepy face\": \"Álmos arc\",\n    \"Tired face\": \"Fáradt arc\",\n    \"Grimacing face\": \"Elfintorodott arc\",\n    \"Loudly crying face\": \"Hangosan síró arc\",\n    \"Face with open mouth\": \"Arc nyitott szájjal\",\n    \"Hushed face\": \"Csitított arc\",\n    \"Face with open mouth and cold sweat\": \"Arc tátott szájjal és hideg veríték\",\n    \"Face screaming in fear\": \"Sikoltozó arc a félelemtől\",\n    \"Astonished face\": \"Meglepett arc\",\n    \"Flushed face\": \"Kipirult arc\",\n    \"Sleeping face\": \"Alvó arc\",\n    \"Dizzy face\": \" Szádülő arc\",\n    \"Face without mouth\": \"Arc nélküli száj\",\n    \"Face with medical mask\": \"Arcán orvosi maszk\",\n\n    // Line breaker\n    \"Break\": \"Törés\",\n\n    // Math\n    \"Subscript\": \"Alsó index\",\n    \"Superscript\": \"Felső index\",\n\n    // Full screen\n    \"Fullscreen\": \"Teljes képernyő\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Vízszintes vonal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Formázás eltávolítása\",\n\n    // Save\n    \"Save\": \"Mentés\",\n\n    // Undo, redo\n    \"Undo\": \"Visszavonás\",\n    \"Redo\": \"Ismét\",\n\n    // Select all\n    \"Select All\": \"Minden kijelölése\",\n\n    // Code view\n    \"Code View\": \"Forráskód\",\n\n    // Quote\n    \"Quote\": \"Idézet\",\n    \"Increase\": \"Növelés\",\n    \"Decrease\": \"Csökkentés\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Beillesztés\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Speciális karakterek\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Görög\",\n    \"Cyrillic\": \"Cirill\",\n    \"Punctuation\": \"Központozás\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Nyilak\",\n    \"Math\": \"Matematikai\",\n    \"Misc\": \"Egyéb\",\n\n    // Print\n    \"Print\": \"Nyomtatás\",\n\n    // Spell Checker\n    \"Spell Checker\": \"Helyesírás-ellenőrző\",\n\n    // Help\n    \"Help\": \"Segítség\",\n    \"Shortcuts\": \"Hivatkozások\",\n    \"Inline Editor\": \"Inline szerkesztő\",\n    \"Show the editor\": \"Mutassa a szerkesztőt\",\n    \"Common actions\": \"Közös cselekvések\",\n    \"Copy\": \"Másolás\",\n    \"Cut\": \"Kivágás\",\n    \"Paste\": \"Beillesztés\",\n    \"Basic Formatting\": \"Alap formázás\",\n    \"Increase quote level\": \"Növeli az idézet behúzását\",\n    \"Decrease quote level\": \"Csökkenti az idézet behúzását\",\n    \"Image / Video\": \"Kép / videó\",\n    \"Resize larger\": \"Méretezés nagyobbra\",\n    \"Resize smaller\": \"Méretezés kisebbre\",\n    \"Table\": \"Asztal\",\n    \"Select table cell\": \"Válasszon táblázat cellát\",\n    \"Extend selection one cell\": \"Növelje meg egy sorral\",\n    \"Extend selection one row\": \"Csökkentse egy sorral\",\n    \"Navigation\": \"Navigáció\",\n    \"Focus popup / toolbar\": \"Felugró ablak / eszköztár\",\n    \"Return focus to previous position\": \"Visszaáll az előző pozícióra\",\n\n    // Embed.ly\n    \"Embed URL\": \"Beágyazott webcím\",\n    \"Paste in a URL to embed\": \"Beilleszteni egy webcímet a beágyazáshoz\",\n\n    // Word Paste\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"A beillesztett tartalom egy Microsoft Word dokumentumból származik. Szeretné megtartani a formázását vagy sem?\",\n    \"Keep\": \"Megtartás\",\n    \"Clean\": \"Tisztítás\",\n    \"Word Paste Detected\": \"Word beillesztés észlelhető\",\n\n    // October CMS\n    \"Insert Audio\": \"Audió beillesztése\",\n    \"Insert File\": \"Fájl beillesztése\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/id.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Indonesian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['id'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ketik sesuatu\",\n\n    // Basic formatting\n    \"Bold\": \"Tebal\",\n    \"Italic\": \"Miring\",\n    \"Underline\": \"Garis bawah\",\n    \"Strikethrough\": \"Coret\",\n\n    // Main buttons\n    \"Insert\": \"Memasukkan\",\n    \"Delete\": \"Hapus\",\n    \"Cancel\": \"Batal\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Kembali\",\n    \"Remove\": \"Hapus\",\n    \"More\": \"Lebih\",\n    \"Update\": \"Memperbarui\",\n    \"Style\": \"Gaya\",\n\n    // Font\n    \"Font Family\": \"Jenis Huruf\",\n    \"Font Size\": \"Ukuran leter\",\n\n    // Colors\n    \"Colors\": \"Warna\",\n    \"Background\": \"Latar belakang\",\n    \"Text\": \"Teks\",\n    \"HEX Color\": \"Warna hex\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kode\",\n    \"Heading 1\": \"Header 1\",\n    \"Heading 2\": \"Header 2\",\n    \"Heading 3\": \"Header 3\",\n    \"Heading 4\": \"Header 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraf gaya\",\n    \"Inline Style\": \"Di barisan gaya\",\n\n    // Alignment\n    \"Align\": \"Rate\",\n    \"Align Left\": \"Rate kiri\",\n    \"Align Center\": \"Rate tengah\",\n    \"Align Right\": \"Rata kanan\",\n    \"Align Justify\": \"Justifi\",\n    \"None\": \"Tak satupun\",\n\n    // Lists\n    \"Ordered List\": \"List nomor\",\n    \"Default\": \"Standar\",\n    \"Lower Alpha\": \"Alpha lebih rendah\",\n    \"Lower Greek\": \"Yunani lebih rendah\",\n    \"Lower Roman\": \"Roman rendah\",\n    \"Upper Alpha\": \"Alpha atas\",\n    \"Upper Roman\": \"Roman atas\",\n\n    \"Unordered List\": \"List simbol\",\n    \"Circle\": \"Lingkaran\",\n    \"Disc\": \"Cakram\",\n    \"Square\": \"Kotak\",\n\n    // Line height\n    \"Line Height\": \"Tinggi garis\",\n    \"Single\": \"Tunggal\",\n    \"Double\": \"Dua kali lipat\",\n\n    // Indent\n    \"Decrease Indent\": \"Turunkan inden\",\n    \"Increase Indent\": \"Tambah inden\",\n\n    // Links\n    \"Insert Link\": \"Memasukkan link\",\n    \"Open in new tab\": \"Buka di tab baru\",\n    \"Open Link\": \"Buka tautan\",\n    \"Edit Link\": \"Mengedit link\",\n    \"Unlink\": \"Menghapus link\",\n    \"Choose Link\": \"Memilih link\",\n\n    // Images\n    \"Insert Image\": \"Memasukkan gambar\",\n    \"Upload Image\": \"Meng-upload gambar\",\n    \"By URL\": \"Oleh URL\",\n    \"Browse\": \"Melihat-lihat\",\n    \"Drop image\": \"Jatuhkan gambar\",\n    \"or click\": \"atau klik\",\n    \"Manage Images\": \"Mengelola gambar\",\n    \"Loading\": \"Pemuatan\",\n    \"Deleting\": \"Menghapus\",\n    \"Tags\": \"Label\",\n    \"Are you sure? Image will be deleted.\": \"Apakah Anda yakin? Gambar akan dihapus.\",\n    \"Replace\": \"Mengganti\",\n    \"Uploading\": \"Gambar upload\",\n    \"Loading image\": \"Pemuatan gambar\",\n    \"Display\": \"Pameran\",\n    \"Inline\": \"Di barisan\",\n    \"Break Text\": \"Memecah teks\",\n    \"Alternative Text\": \"Teks alternatif\",\n    \"Change Size\": \"Ukuran perubahan\",\n    \"Width\": \"Lebar\",\n    \"Height\": \"Tinggi\",\n    \"Something went wrong. Please try again.\": \"Ada yang salah. Silakan coba lagi.\",\n    \"Image Caption\": \"Keterangan gambar\",\n    \"Advanced Edit\": \"Edit lanjutan\",\n\n    // Video\n    \"Insert Video\": \"Memasukkan video\",\n    \"Embedded Code\": \"Kode tertanam\",\n    \"Paste in a video URL\": \"Paste di url video\",\n    \"Drop video\": \"Jatuhkan video\",\n    \"Your browser does not support HTML5 video.\": \"Browser Anda tidak mendukung video html5.\",\n    \"Upload Video\": \"Mengunggah video\",\n\n    // Tables\n    \"Insert Table\": \"Sisipkan tabel\",\n    \"Table Header\": \"Header tabel\",\n    \"Remove Table\": \"Hapus tabel\",\n    \"Table Style\": \"Gaya tabel\",\n    \"Horizontal Align\": \"Menyelaraskan horisontal\",\n\n    \"Row\": \"Baris\",\n    \"Insert row above\": \"Sisipkan baris di atas\",\n    \"Insert row below\": \"Sisipkan baris di bawah\",\n    \"Delete row\": \"Hapus baris\",\n    \"Column\": \"Kolom\",\n    \"Insert column before\": \"Sisipkan kolom sebelumSisipkan kolom sebelum\",\n    \"Insert column after\": \"Sisipkan kolom setelah\",\n    \"Delete column\": \"Hapus kolom\",\n    \"Cell\": \"Sel\",\n    \"Merge cells\": \"Menggabungkan sel\",\n    \"Horizontal split\": \"Perpecahan horisontal\",\n    \"Vertical split\": \"Perpecahan vertikal\",\n    \"Cell Background\": \"Latar belakang sel\",\n    \"Vertical Align\": \"Menyelaraskan vertikal\",\n    \"Top\": \"Teratas\",\n    \"Middle\": \"Tengah\",\n    \"Bottom\": \"Bagian bawah\",\n    \"Align Top\": \"Menyelaraskan atas\",\n    \"Align Middle\": \"Menyelaraskan tengah\",\n    \"Align Bottom\": \"Menyelaraskan bawah\",\n    \"Cell Style\": \"Gaya sel\",\n\n    // Files\n    \"Upload File\": \"Meng-upload berkas\",\n    \"Drop file\": \"Jatuhkan berkas\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticon\",\n    \"Grinning face\": \"Sambil tersenyum wajah\",\n    \"Grinning face with smiling eyes\": \"Sambil tersenyum wajah dengan mata tersenyum\",\n    \"Face with tears of joy\": \"Hadapi dengan air mata sukacita\",\n    \"Smiling face with open mouth\": \"Tersenyum wajah dengan mulut terbuka\",\n    \"Smiling face with open mouth and smiling eyes\": \"Tersenyum wajah dengan mulut terbuka dan tersenyum mata\",\n    \"Smiling face with open mouth and cold sweat\": \"Tersenyum wajah dengan mulut terbuka dan keringat dingin\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Tersenyum wajah dengan mulut terbuka dan mata tertutup rapat\",\n    \"Smiling face with halo\": \"Tersenyum wajah dengan halo\",\n    \"Smiling face with horns\": \"Tersenyum wajah dengan tanduk\",\n    \"Winking face\": \"Mengedip wajah\",\n    \"Smiling face with smiling eyes\": \"Tersenyum wajah dengan mata tersenyum\",\n    \"Face savoring delicious food\": \"Wajah menikmati makanan lezat\",\n    \"Relieved face\": \"Wajah Lega\",\n    \"Smiling face with heart-shaped eyes\": \"Tersenyum wajah dengan mata berbentuk hati\",\n    \"Smiling face with sunglasses\": \"Tersenyum wajah dengan kacamata hitam\",\n    \"Smirking face\": \"Menyeringai wajah\",\n    \"Neutral face\": \"Wajah Netral\",\n    \"Expressionless face\": \"Wajah tanpa ekspresi\",\n    \"Unamused face\": \"Wajah tidak senang\",\n    \"Face with cold sweat\": \"Muka dengan keringat dingin\",\n    \"Pensive face\": \"Wajah termenung\",\n    \"Confused face\": \"Wajah Bingung\",\n    \"Confounded face\": \"Wajah kesal\",\n    \"Kissing face\": \"wajah mencium\",\n    \"Face throwing a kiss\": \"Wajah melempar ciuman\",\n    \"Kissing face with smiling eyes\": \"Berciuman wajah dengan mata tersenyum\",\n    \"Kissing face with closed eyes\": \"Berciuman wajah dengan mata tertutup\",\n    \"Face with stuck out tongue\": \"Muka dengan menjulurkan lidah\",\n    \"Face with stuck out tongue and winking eye\": \"Muka dengan menjulurkan lidah dan mengedip mata\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Wajah dengan lidah terjebak dan mata erat-tertutup\",\n    \"Disappointed face\": \"Wajah kecewa\",\n    \"Worried face\": \"Wajah Khawatir\",\n    \"Angry face\": \"Wajah Marah\",\n    \"Pouting face\": \"Cemberut wajah\",\n    \"Crying face\": \"Menangis wajah\",\n    \"Persevering face\": \"Tekun wajah\",\n    \"Face with look of triumph\": \"Hadapi dengan tampilan kemenangan\",\n    \"Disappointed but relieved face\": \"Kecewa tapi lega wajah\",\n    \"Frowning face with open mouth\": \"Sambil mengerutkan kening wajah dengan mulut terbuka\",\n    \"Anguished face\": \"Wajah sedih\",\n    \"Fearful face\": \"Wajah Takut\",\n    \"Weary face\": \"Wajah lelah\",\n    \"Sleepy face\": \"wajah mengantuk\",\n    \"Tired face\": \"Wajah Lelah\",\n    \"Grimacing face\": \"Sambil meringis wajah\",\n    \"Loudly crying face\": \"Keras menangis wajah\",\n    \"Face with open mouth\": \"Hadapi dengan mulut terbuka\",\n    \"Hushed face\": \"Wajah dipetieskan\",\n    \"Face with open mouth and cold sweat\": \"Hadapi dengan mulut terbuka dan keringat dingin\",\n    \"Face screaming in fear\": \"Hadapi berteriak dalam ketakutan\",\n    \"Astonished face\": \"Wajah Kaget\",\n    \"Flushed face\": \"Wajah memerah\",\n    \"Sleeping face\": \"Tidur face\",\n    \"Dizzy face\": \"Wajah pusing\",\n    \"Face without mouth\": \"Wajah tanpa mulut\",\n    \"Face with medical mask\": \"Hadapi dengan masker medis\",\n\n    // Line breaker\n    \"Break\": \"Memecah\",\n\n    // Math\n    \"Subscript\": \"Subskrip\",\n    \"Superscript\": \"Superskrip\",\n\n    // Full screen\n    \"Fullscreen\": \"Layar penuh\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Sisipkan Garis Horizontal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Menghapus format\",\n\n    // Save\n    \"Save\": \"Menyimpan\",\n\n    // Undo, redo\n    \"Undo\": \"Batal\",\n    \"Redo\": \"Ulang\",\n\n    // Select all\n    \"Select All\": \"Pilih semua\",\n\n    // Code view\n    \"Code View\": \"Melihat kode\",\n\n    // Quote\n    \"Quote\": \"Kutipan\",\n    \"Increase\": \"Meningkat\",\n    \"Decrease\": \"Penurunan\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Memasukkan cepat\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Karakter spesial\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Yunani\",\n    \"Cyrillic\": \"Kyrillic\",\n    \"Punctuation\": \"Tanda baca\",\n    \"Currency\": \"Mata uang\",\n    \"Arrows\": \"Panah\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Mencetak\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Pemeriksa ejaan\",\n\n    // Help\n    \"Help\": \"Membantu\",\n    \"Shortcuts\": \"Jalan pintas\",\n    \"Inline Editor\": \"Editor inline\",\n    \"Show the editor\": \"Tunjukkan editornya\",\n    \"Common actions\": \"Tindakan umum\",\n    \"Copy\": \"Salinan\",\n    \"Cut\": \"Memotong\",\n    \"Paste\": \"Pasta\",\n    \"Basic Formatting\": \"Format dasar\",\n    \"Increase quote level\": \"Meningkatkan tingkat kutipan\",\n    \"Decrease quote level\": \"Menurunkan tingkat kutipan\",\n    \"Image / Video\": \"Gambar / video\",\n    \"Resize larger\": \"Mengubah ukuran lebih besar\",\n    \"Resize smaller\": \"Mengubah ukuran lebih kecil\",\n    \"Table\": \"Meja\",\n    \"Select table cell\": \"Pilih sel tabel\",\n    \"Extend selection one cell\": \"Memperpanjang seleksi satu sel\",\n    \"Extend selection one row\": \"Perpanjang pilihan satu baris\",\n    \"Navigation\": \"Navigasi\",\n    \"Focus popup / toolbar\": \"Fokus popup / toolbar\",\n    \"Return focus to previous position\": \"Kembali fokus ke posisi sebelumnya\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed url\",\n    \"Paste in a URL to embed\": \"Paste di url untuk menanamkan\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Konten yang disisipkan berasal dari dokumen kata microsoft. apakah Anda ingin menyimpan format atau membersihkannya?\",\n    \"Keep\": \"Menjaga\",\n    \"Clean\": \"Bersih\",\n    \"Word Paste Detected\": \"Kata paste terdeteksi\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/it.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Italian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['it'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Digita qualcosa\",\n\n    // Basic formatting\n    \"Bold\": \"Grassetto\",\n    \"Italic\": \"Corsivo\",\n    \"Underline\": \"Sottolineato\",\n    \"Strikethrough\": \"Barrato\",\n\n    // Main buttons\n    \"Insert\": \"Inserisci\",\n    \"Delete\": \"Cancella\",\n    \"Cancel\": \"Cancella\",\n    \"OK\": \"OK\",\n    \"Back\": \"Indietro\",\n    \"Remove\": \"Rimuovi\",\n    \"More\": \"Di pi\\u00f9\",\n    \"Update\": \"Aggiorna\",\n    \"Style\": \"Stile\",\n\n    // Font\n    \"Font Family\": \"Carattere\",\n    \"Font Size\": \"Dimensione Carattere\",\n\n    // Colors\n    \"Colors\": \"Colori\",\n    \"Background\": \"Sfondo\",\n    \"Text\": \"Testo\",\n    \"HEX Color\": \"Colore Esadecimale\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formattazione\",\n    \"Normal\": \"Normale\",\n    \"Code\": \"Codice\",\n    \"Heading 1\": \"Intestazione 1\",\n    \"Heading 2\": \"Intestazione 2\",\n    \"Heading 3\": \"Intestazione 3\",\n    \"Heading 4\": \"Intestazione 4\",\n\n    // Style\n    \"Paragraph Style\": \"Stile Paragrafo\",\n    \"Inline Style\": \"Stile in Linea\",\n\n    // Alignment\n    \"Align\": \"Allinea\",\n    \"Align Left\": \"Allinea a Sinistra\",\n    \"Align Center\": \"Allinea al Cento\",\n    \"Align Right\": \"Allinea a Destra\",\n    \"Align Justify\": \"Giustifica\",\n    \"None\": \"Nessuno\",\n\n    // Lists\n    \"Ordered List\": \"Elenchi Numerati\",\n    \"Default\": \"Predefinito\",\n    \"Lower Alpha\": \"Alfa inferiore\",\n    \"Lower Greek\": \"Basso greco\",\n    \"Lower Roman\": \"Romano inferiore\",\n    \"Upper Alpha\": \"Alfa superiore\",\n    \"Upper Roman\": \"Alto romano\",\n\n    \"Unordered List\": \"Elenchi Puntati\",\n    \"Circle\": \"Cerchio\",\n    \"Disc\": \"Disco\",\n    \"Square\": \"Piazza\",\n\n    // Line height\n    \"Line Height\": \"Altezza della linea\",\n    \"Single\": \"Singolo\",\n    \"Double\": \"Doppio\",\n\n    // Indent\n    \"Decrease Indent\": \"Riduci Rientro\",\n    \"Increase Indent\": \"Aumenta Rientro\",\n\n    // Links\n    \"Insert Link\": \"Inserisci Link\",\n    \"Open in new tab\": \"Apri in nuova scheda\",\n    \"Open Link\": \"Apri Link\",\n    \"Edit Link\": \"Modifica Link\",\n    \"Unlink\": \"Rimuovi Link\",\n    \"Choose Link\": \"Scegli Link\",\n\n    // Images\n    \"Insert Image\": \"Inserisci Immagine\",\n    \"Upload Image\": \"Carica Immagine\",\n    \"By URL\": \"Inserisci URL\",\n    \"Browse\": \"Sfoglia\",\n    \"Drop image\": \"Rilascia immagine\",\n    \"or click\": \"oppure clicca qui\",\n    \"Manage Images\": \"Gestione Immagini\",\n    \"Loading\": \"Caricamento\",\n    \"Deleting\": \"Eliminazione\",\n    \"Tags\": \"Etichetta\",\n    \"Are you sure? Image will be deleted.\": \"Sei sicuro? L\\'immagine verr\\u00e0 cancellata.\",\n    \"Replace\": \"Sostituisci\",\n    \"Uploading\": \"Caricamento\",\n    \"Loading image\": \"Caricamento immagine\",\n    \"Display\": \"Visualizzazione\",\n    \"Inline\": \"In Linea\",\n    \"Break Text\": \"Separa dal Testo\",\n    \"Alternative Text\": \"Testo Alternativo\",\n    \"Change Size\": \"Cambia Dimensioni\",\n    \"Width\": \"Larghezza\",\n    \"Height\": \"Altezza\",\n    \"Something went wrong. Please try again.\": \"Qualcosa non ha funzionato. Riprova, per favore.\",\n    \"Image Caption\": \"Didascalia\",\n    \"Advanced Edit\": \"Avanzato\",\n\n    // Video\n    \"Insert Video\": \"Inserisci Video\",\n    \"Embedded Code\": \"Codice Incorporato\",\n    \"Paste in a video URL\": \"Incolla l'URL del video\",\n    \"Drop video\": \"Rilascia video\",\n    \"Your browser does not support HTML5 video.\": \"Il tuo browser non supporta i video html5.\",\n    \"Upload Video\": \"Carica Video\",\n\n    // Tables\n    \"Insert Table\": \"Inserisci Tabella\",\n    \"Table Header\": \"Intestazione Tabella\",\n    \"Remove Table\": \"Rimuovi Tabella\",\n    \"Table Style\": \"Stile Tabella\",\n    \"Horizontal Align\": \"Allineamento Orizzontale\",\n    \"Row\": \"Riga\",\n    \"Insert row above\": \"Inserisci una riga prima\",\n    \"Insert row below\": \"Inserisci una riga dopo\",\n    \"Delete row\": \"Cancella riga\",\n    \"Column\": \"Colonna\",\n    \"Insert column before\": \"Inserisci una colonna prima\",\n    \"Insert column after\": \"Inserisci una colonna dopo\",\n    \"Delete column\": \"Cancella colonna\",\n    \"Cell\": \"Cella\",\n    \"Merge cells\": \"Unisci celle\",\n    \"Horizontal split\": \"Dividi in orizzontale\",\n    \"Vertical split\": \"Dividi in verticale\",\n    \"Cell Background\": \"Sfondo Cella\",\n    \"Vertical Align\": \"Allineamento Verticale\",\n    \"Top\": \"Alto\",\n    \"Middle\": \"Centro\",\n    \"Bottom\": \"Basso\",\n    \"Align Top\": \"Allinea in Alto\",\n    \"Align Middle\": \"Allinea al Centro\",\n    \"Align Bottom\": \"Allinea in Basso\",\n    \"Cell Style\": \"Stile Cella\",\n\n    // Files\n    \"Upload File\": \"Carica File\",\n    \"Drop file\": \"Rilascia file\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticon\",\n    \"Grinning face\": \"Sorridente\",\n    \"Grinning face with smiling eyes\": \"Sorridente con gli occhi sorridenti\",\n    \"Face with tears of joy\": \"Con lacrime di gioia\",\n    \"Smiling face with open mouth\": \"Sorridente con la bocca aperta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Sorridente con la bocca aperta e gli occhi sorridenti\",\n    \"Smiling face with open mouth and cold sweat\": \"Sorridente con la bocca aperta e sudore freddo\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Sorridente con la bocca aperta e gli occhi stretti\",\n    \"Smiling face with halo\": \"Sorridente con aureola\",\n    \"Smiling face with horns\": \"Diavolo sorridente\",\n    \"Winking face\": \"Ammiccante\",\n    \"Smiling face with smiling eyes\": \"Sorridente imbarazzato\",\n    \"Face savoring delicious food\": \"Goloso\",\n    \"Relieved face\": \"Rassicurato\",\n    \"Smiling face with heart-shaped eyes\": \"Sorridente con gli occhi a forma di cuore\",\n    \"Smiling face with sunglasses\": \"Sorridente con gli occhiali da sole\",\n    \"Smirking face\": \"Compiaciuto\",\n    \"Neutral face\": \"Neutro\",\n    \"Expressionless face\": \"Inespressivo\",\n    \"Unamused face\": \"Annoiato\",\n    \"Face with cold sweat\": \"Sudare freddo\",\n    \"Pensive face\": \"Pensieroso\",\n    \"Confused face\": \"Perplesso\",\n    \"Confounded face\": \"Confuso\",\n    \"Kissing face\": \"Bacio\",\n    \"Face throwing a kiss\": \"Manda un bacio\",\n    \"Kissing face with smiling eyes\": \"Bacio con gli occhi sorridenti\",\n    \"Kissing face with closed eyes\": \"Bacio con gli occhi chiusi\",\n    \"Face with stuck out tongue\": \"Linguaccia\",\n    \"Face with stuck out tongue and winking eye\": \"Linguaccia ammiccante\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Linguaccia con occhi stretti\",\n    \"Disappointed face\": \"Deluso\",\n    \"Worried face\": \"Preoccupato\",\n    \"Angry face\": \"Arrabbiato\",\n    \"Pouting face\": \"Imbronciato\",\n    \"Crying face\": \"Pianto\",\n    \"Persevering face\": \"Perseverante\",\n    \"Face with look of triumph\": \"Trionfante\",\n    \"Disappointed but relieved face\": \"Deluso ma rassicurato\",\n    \"Frowning face with open mouth\": \"Accigliato con la bocca aperta\",\n    \"Anguished face\": \"Angosciato\",\n    \"Fearful face\": \"Pauroso\",\n    \"Weary face\": \"Stanco\",\n    \"Sleepy face\": \"Assonnato\",\n    \"Tired face\": \"Snervato\",\n    \"Grimacing face\": \"Smorfia\",\n    \"Loudly crying face\": \"Pianto a gran voce\",\n    \"Face with open mouth\": \"Bocca aperta\",\n    \"Hushed face\": \"Silenzioso\",\n    \"Face with open mouth and cold sweat\": \"Bocca aperta e sudore freddo\",\n    \"Face screaming in fear\": \"Urlante dalla paura\",\n    \"Astonished face\": \"Stupito\",\n    \"Flushed face\": \"Arrossito\",\n    \"Sleeping face\": \"Addormentato\",\n    \"Dizzy face\": \"Stordito\",\n    \"Face without mouth\": \"Senza parole\",\n    \"Face with medical mask\": \"Malattia infettiva\",\n\n    // Line breaker\n    \"Break\": \"Separatore\",\n\n    // Math\n    \"Subscript\": \"Pedice\",\n    \"Superscript\": \"Apice\",\n\n    // Full screen\n    \"Fullscreen\": \"Schermo intero\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Inserisci Divisore Orizzontale\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Cancella Formattazione\",\n\n    // Save\n    \"Save\": \"Salvare\",\n\n    // Undo, redo\n    \"Undo\": \"Annulla\",\n    \"Redo\": \"Ripeti\",\n\n    // Select all\n    \"Select All\": \"Seleziona Tutto\",\n\n    // Code view\n    \"Code View\": \"Visualizza Codice\",\n\n    // Quote\n    \"Quote\": \"Citazione\",\n    \"Increase\": \"Aumenta\",\n    \"Decrease\": \"Diminuisci\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inserimento Rapido\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caratteri Speciali\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Greco\",\n    \"Cyrillic\": \"Cirillico\",\n    \"Punctuation\": \"Punteggiatura\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Frecce\",\n    \"Math\": \"Matematica\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Stampa\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Correttore Ortografico\",\n\n    // Help\n    \"Help\": \"Aiuto\",\n    \"Shortcuts\": \"Scorciatoie\",\n    \"Inline Editor\": \"Editor in Linea\",\n    \"Show the editor\": \"Mostra Editor\",\n    \"Common actions\": \"Azioni comuni\",\n    \"Copy\": \"Copia\",\n    \"Cut\": \"Taglia\",\n    \"Paste\": \"Incolla\",\n    \"Basic Formatting\": \"Formattazione di base\",\n    \"Increase quote level\": \"Aumenta il livello di citazione\",\n    \"Decrease quote level\": \"Diminuisci il livello di citazione\",\n    \"Image / Video\": \"Immagine / Video\",\n    \"Resize larger\": \"Pi\\u00f9 grande\",\n    \"Resize smaller\": \"Pi\\u00f9 piccolo\",\n    \"Table\": \"Tabella\",\n    \"Select table cell\": \"Seleziona la cella della tabella\",\n    \"Extend selection one cell\": \"Estendi la selezione di una cella\",\n    \"Extend selection one row\": \"Estendi la selezione una riga\",\n    \"Navigation\": \"Navigazione\",\n    \"Focus popup / toolbar\": \"Metti a fuoco la barra degli strumenti\",\n    \"Return focus to previous position\": \"Rimetti il fuoco sulla posizione precedente\",\n\n    // Embed.ly\n    \"Embed URL\": \"Incorpora URL\",\n    \"Paste in a URL to embed\": \"Incolla un URL da incorporare\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Il contenuto incollato proviene da un documento di Microsoft Word. Vuoi mantenere la formattazione di Word o pulirlo?\",\n    \"Keep\": \"Mantieni\",\n    \"Clean\": \"Pulisci\",\n    \"Word Paste Detected\": \"\\u00c8 stato rilevato un incolla da Word\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/ja.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Japanese\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['ja'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u3053\\u3053\\u306b\\u5165\\u529b\\u3057\\u307e\\u3059\",\n\n    // Basic formatting\n    \"Bold\": \"\\u592a\\u5b57\",\n    \"Italic\": \"\\u659c\\u4f53\",\n    \"Underline\": \"\\u4e0b\\u7dda\",\n    \"Strikethrough\": \"\\u53d6\\u308a\\u6d88\\u3057\\u7dda\",\n\n    // Main buttons\n    \"Insert\": \"\\u633f\\u5165\",\n    \"Delete\": \"\\u524a\\u9664\",\n    \"Cancel\": \"\\u30ad\\u30e3\\u30f3\\u30bb\\u30eb\",\n    \"OK\": \"OK\",\n    \"Back\": \"\\u623b\\u308b\",\n    \"Remove\": \"\\u524a\\u9664\",\n    \"More\": \"\\u3082\\u3063\\u3068\",\n    \"Update\": \"\\u66f4\\u65b0\",\n    \"Style\": \"\\u30b9\\u30bf\\u30a4\\u30eb\",\n\n    // Font\n    \"Font Family\": \"\\u30d5\\u30a9\\u30f3\\u30c8\",\n    \"Font Size\": \"\\u30d5\\u30a9\\u30f3\\u30c8\\u30b5\\u30a4\\u30ba\",\n\n    // Colors\n    \"Colors\": \"\\u8272\",\n    \"Background\": \"\\u80cc\\u666f\",\n    \"Text\": \"\\u30c6\\u30ad\\u30b9\\u30c8\",\n    \"HEX Color\": \"\\u30d8\\u30ad\\u30b5\\u306e\\u8272\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u6bb5\\u843d\\u306e\\u66f8\\u5f0f\",\n    \"Normal\": \"\\u6a19\\u6e96\",\n    \"Code\": \"\\u30b3\\u30fc\\u30c9\",\n    \"Heading 1\": \"\\u30d8\\u30c3\\u30c0\\u30fc 1\",\n    \"Heading 2\": \"\\u30d8\\u30c3\\u30c0\\u30fc 2\",\n    \"Heading 3\": \"\\u30d8\\u30c3\\u30c0\\u30fc 3\",\n    \"Heading 4\": \"\\u30d8\\u30c3\\u30c0\\u30fc 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u6bb5\\u843d\\u30b9\\u30bf\\u30a4\\u30eb\",\n    \"Inline Style\": \"\\u30a4\\u30f3\\u30e9\\u30a4\\u30f3\\u30b9\\u30bf\\u30a4\\u30eb\",\n\n    // Alignment\n    \"Align\": \"\\u914d\\u7f6e\",\n    \"Align Left\": \"\\u5de6\\u63c3\\u3048\",\n    \"Align Center\": \"\\u4e2d\\u592e\\u63c3\\u3048\",\n    \"Align Right\": \"\\u53f3\\u63c3\\u3048\",\n    \"Align Justify\": \"\\u4e21\\u7aef\\u63c3\\u3048\",\n    \"None\": \"\\u306a\\u3057\",\n\n    // Lists\n    \"Ordered List\": \"\\u6bb5\\u843d\\u756a\\u53f7\",\n    \"Default\": \"デフォルト\",\n    \"Lower Alpha\": \"下アルファ\",\n    \"Lower Greek\": \"下ギリシャ\",\n    \"Lower Roman\": \"下ローマ\",\n    \"Upper Alpha\": \"アッパーアルファ\",\n    \"Upper Roman\": \"アッパーローマン\",\n\n    \"Unordered List\": \"\\u7b87\\u6761\\u66f8\\u304d\",\n    \"Circle\": \"サークル\",\n    \"Disc\": \"ディスク\",\n    \"Square\": \"平方\",\n\n    // Line height\n    \"Line Height\": \"行の高さ\",\n    \"Single\": \"シングル\",\n    \"Double\": \"ダブル\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u30a4\\u30f3\\u30c7\\u30f3\\u30c8\\u3092\\u6e1b\\u3089\\u3059\",\n    \"Increase Indent\": \"\\u30a4\\u30f3\\u30c7\\u30f3\\u30c8\\u3092\\u5897\\u3084\\u3059\",\n\n    // Links\n    \"Insert Link\": \"\\u30ea\\u30f3\\u30af\\u306e\\u633f\\u5165\",\n    \"Open in new tab\": \"\\u65b0\\u3057\\u3044\\u30bf\\u30d6\\u3067\\u958b\\u304f\",\n    \"Open Link\": \"\\u30ea\\u30f3\\u30af\\u3092\\u958b\\u304f\",\n    \"Edit Link\": \"\\u30ea\\u30f3\\u30af\\u306e\\u7de8\\u96c6\",\n    \"Unlink\": \"\\u30ea\\u30f3\\u30af\\u306e\\u524a\\u9664\",\n    \"Choose Link\": \"\\u30ea\\u30f3\\u30af\\u3092\\u9078\\u629e\",\n\n    // Images\n    \"Insert Image\": \"\\u753b\\u50cf\\u306e\\u633f\\u5165\",\n    \"Upload Image\": \"\\u753b\\u50cf\\u3092\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\",\n    \"By URL\": \"\\u753b\\u50cf\\u306eURL\\u3092\\u5165\\u529b\",\n    \"Browse\": \"\\u53c2\\u7167\",\n    \"Drop image\": \"\\u753b\\u50cf\\u3092\\u30c9\\u30e9\\u30c3\\u30b0&\\u30c9\\u30ed\\u30c3\\u30d7\",\n    \"or click\": \"\\u307e\\u305f\\u306f\\u30af\\u30ea\\u30c3\\u30af\",\n    \"Manage Images\": \"\\u753b\\u50cf\\u306e\\u7ba1\\u7406\",\n    \"Loading\": \"\\u8aad\\u307f\\u8fbc\\u307f\\u4e2d\",\n    \"Deleting\": \"\\u524a\\u9664\",\n    \"Tags\": \"\\u30bf\\u30b0\",\n    \"Are you sure? Image will be deleted.\": \"\\u672c\\u5f53\\u306b\\u524a\\u9664\\u3057\\u307e\\u3059\\u304b\\uff1f\",\n    \"Replace\": \"\\u7f6e\\u63db\",\n    \"Uploading\": \"\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\\u4e2d\",\n    \"Loading image\": \"\\u753b\\u50cf\\u8aad\\u307f\\u8fbc\\u307f\\u4e2d\",\n    \"Display\": \"\\u8868\\u793a\",\n    \"Inline\": \"\\u30a4\\u30f3\\u30e9\\u30a4\\u30f3\",\n    \"Break Text\": \"\\u30c6\\u30ad\\u30b9\\u30c8\\u306e\\u6539\\u884c\",\n    \"Alternative Text\": \"\\u4ee3\\u66ff\\u30c6\\u30ad\\u30b9\\u30c8\",\n    \"Change Size\": \"\\u30b5\\u30a4\\u30ba\\u5909\\u66f4\",\n    \"Width\": \"\\u5e45\",\n    \"Height\": \"\\u9ad8\\u3055\",\n    \"Something went wrong. Please try again.\": \"\\u554f\\u984c\\u304c\\u767a\\u751f\\u3057\\u307e\\u3057\\u305f\\u3002\\u3082\\u3046\\u4e00\\u5ea6\\u3084\\u308a\\u76f4\\u3057\\u3066\\u304f\\u3060\\u3055\\u3044\\u3002\",\n    \"Image Caption\": \"\\u753b\\u50cf\\u30ad\\u30e3\\u30d7\\u30b7\\u30e7\\u30f3\",\n    \"Advanced Edit\": \"\\u9ad8\\u5ea6\\u306a\\u7de8\\u96c6\",\n\n    // Video\n    \"Insert Video\": \"\\u52d5\\u753b\\u306e\\u633f\\u5165\",\n    \"Embedded Code\": \"\\u57cb\\u3081\\u8fbc\\u307f\\u30b3\\u30fc\\u30c9\",\n    \"Paste in a video URL\": \"\\u52d5\\u753bURL\\u306b\\u8cbc\\u308a\\u4ed8\\u3051\\u308b\",\n    \"Drop video\": \"\\u52d5\\u753b\\u3092\\u30c9\\u30e9\\u30c3\\u30b0&\\u30c9\\u30ed\\u30c3\\u30d7\",\n    \"Your browser does not support HTML5 video.\": \"\\u3042\\u306a\\u305f\\u306e\\u30d6\\u30e9\\u30a6\\u30b6\\u306fhtml5 video\\u3092\\u30b5\\u30dd\\u30fc\\u30c8\\u3057\\u3066\\u3044\\u307e\\u305b\\u3093\\u3002\",\n    \"Upload Video\": \"\\u52d5\\u753b\\u306e\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\",\n\n    // Tables\n    \"Insert Table\": \"\\u8868\\u306e\\u633f\\u5165\",\n    \"Table Header\": \"\\u8868\\u306e\\u30d8\\u30c3\\u30c0\\u30fc\",\n    \"Remove Table\": \"\\u8868\\u306e\\u524a\\u9664\",\n    \"Table Style\": \"\\u8868\\u306e\\u30b9\\u30bf\\u30a4\\u30eb\",\n    \"Horizontal Align\": \"\\u6a2a\\u4f4d\\u7f6e\",\n    \"Row\": \"\\u884c\",\n    \"Insert row above\": \"\\u4e0a\\u306b\\u884c\\u3092\\u633f\\u5165\",\n    \"Insert row below\": \"\\u4e0b\\u306b\\u884c\\u3092\\u633f\\u5165\",\n    \"Delete row\": \"\\u884c\\u306e\\u524a\\u9664\",\n    \"Column\": \"\\u5217\",\n    \"Insert column before\": \"\\u5de6\\u306b\\u5217\\u3092\\u633f\\u5165\",\n    \"Insert column after\": \"\\u53f3\\u306b\\u5217\\u3092\\u633f\\u5165\",\n    \"Delete column\": \"\\u5217\\u306e\\u524a\\u9664\",\n    \"Cell\": \"\\u30bb\\u30eb\",\n    \"Merge cells\": \"\\u30bb\\u30eb\\u306e\\u7d50\\u5408\",\n    \"Horizontal split\": \"\\u6a2a\\u5206\\u5272\",\n    \"Vertical split\": \"\\u7e26\\u5206\\u5272\",\n    \"Cell Background\": \"\\u30bb\\u30eb\\u306e\\u80cc\\u666f\",\n    \"Vertical Align\": \"\\u7e26\\u4f4d\\u7f6e\",\n    \"Top\": \"\\u4e0a\\u63c3\\u3048\",\n    \"Middle\": \"\\u4e2d\\u592e\\u63c3\\u3048\",\n    \"Bottom\": \"\\u4e0b\\u63c3\\u3048\",\n    \"Align Top\": \"\\u4e0a\\u306b\\u63c3\\u3048\\u307e\\u3059\",\n    \"Align Middle\": \"\\u4e2d\\u592e\\u306b\\u63c3\\u3048\\u307e\\u3059\",\n    \"Align Bottom\": \"\\u4e0b\\u306b\\u63c3\\u3048\\u307e\\u3059\",\n    \"Cell Style\": \"\\u30bb\\u30eb\\u30b9\\u30bf\\u30a4\\u30eb\",\n\n    // Files\n    \"Upload File\": \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\",\n    \"Drop file\": \"\\u30d5\\u30a1\\u30a4\\u30eb\\u3092\\u30c9\\u30e9\\u30c3\\u30b0&\\u30c9\\u30ed\\u30c3\\u30d7\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u7d75\\u6587\\u5b57\",\n    \"Grinning face\": \"\\u30cb\\u30f3\\u30de\\u30ea\\u9854\",\n    \"Grinning face with smiling eyes\": \"\\u30cb\\u30f3\\u30de\\u30ea\\u9854(\\u7b11\\u3063\\u3066\\u3044\\u308b\\u76ee)\",\n    \"Face with tears of joy\": \"\\u5b09\\u3057\\u6ce3\\u304d\\u3059\\u308b\\u9854\",\n    \"Smiling face with open mouth\": \"\\u7b11\\u9854(\\u5e83\\u3052\\u305f\\u53e3)\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u7b11\\u9854(\\u5e83\\u3052\\u305f\\u53e3\\u3001\\u7b11\\u3063\\u3066\\u3044\\u308b\\u76ee)\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u7b11\\u9854(\\u5e83\\u3052\\u305f\\u53e3\\u3001\\u51b7\\u3084\\u6c57)\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u7b11\\u9854(\\u5e83\\u3052\\u305f\\u53e3\\u3001\\u3057\\u3063\\u304b\\u308a\\u9589\\u3058\\u305f\\u76ee)\",\n    \"Smiling face with halo\": \"\\u5929\\u4f7f\\u306e\\u8f2a\\u304c\\u304b\\u304b\\u3063\\u3066\\u3044\\u308b\\u7b11\\u9854\",\n    \"Smiling face with horns\": \"\\u89d2\\u306e\\u3042\\u308b\\u7b11\\u9854\",\n    \"Winking face\": \"\\u30a6\\u30a3\\u30f3\\u30af\\u3057\\u305f\\u9854\",\n    \"Smiling face with smiling eyes\": \"\\u7b11\\u9854(\\u7b11\\u3063\\u3066\\u3044\\u308b\\u76ee)\",\n    \"Face savoring delicious food\": \"\\u304a\\u3044\\u3057\\u3044\\u3082\\u306e\\u3092\\u98df\\u3079\\u305f\\u9854\",\n    \"Relieved face\": \"\\u5b89\\u5fc3\\u3057\\u305f\\u9854\",\n    \"Smiling face with heart-shaped eyes\": \"\\u76ee\\u304c\\u30cf\\u30fc\\u30c8\\u306e\\u7b11\\u9854\",\n    \"Smiling face with sunglasses\": \"\\u30b5\\u30f3\\u30b0\\u30e9\\u30b9\\u3092\\u304b\\u3051\\u305f\\u7b11\\u9854\",\n    \"Smirking face\": \"\\u4f5c\\u308a\\u7b11\\u3044\",\n    \"Neutral face\": \"\\u7121\\u8868\\u60c5\\u306e\\u9854\",\n    \"Expressionless face\": \"\\u7121\\u8868\\u60c5\\u306a\\u9854\",\n    \"Unamused face\": \"\\u3064\\u307e\\u3089\\u306a\\u3044\\u9854\",\n    \"Face with cold sweat\": \"\\u51b7\\u3084\\u6c57\\u3092\\u304b\\u3044\\u305f\\u9854\",\n    \"Pensive face\": \"\\u8003\\u3048\\u4e2d\\u306e\\u9854\",\n    \"Confused face\": \"\\u5c11\\u3057\\u3057\\u3087\\u3093\\u307c\\u308a\\u3057\\u305f\\u9854\",\n    \"Confounded face\": \"\\u56f0\\u308a\\u679c\\u3066\\u305f\\u9854\",\n    \"Kissing face\": \"\\u30ad\\u30b9\\u3059\\u308b\\u9854\",\n    \"Face throwing a kiss\": \"\\u6295\\u3052\\u30ad\\u30c3\\u30b9\\u3059\\u308b\\u9854\",\n    \"Kissing face with smiling eyes\": \"\\u7b11\\u3044\\u306a\\u304c\\u3089\\u30ad\\u30b9\\u3059\\u308b\\u9854\",\n    \"Kissing face with closed eyes\": \"\\u76ee\\u3092\\u9589\\u3058\\u3066\\u30ad\\u30b9\\u3059\\u308b\\u9854\",\n    \"Face with stuck out tongue\": \"\\u304b\\u3089\\u304b\\u3063\\u305f\\u9854(\\u3042\\u3063\\u304b\\u3093\\u3079\\u3048)\",\n    \"Face with stuck out tongue and winking eye\": \"\\u30a6\\u30a3\\u30f3\\u30af\\u3057\\u3066\\u820c\\u3092\\u51fa\\u3057\\u305f\\u9854\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u76ee\\u3092\\u9589\\u3058\\u3066\\u820c\\u3092\\u51fa\\u3057\\u305f\\u9854\",\n    \"Disappointed face\": \"\\u843d\\u3061\\u8fbc\\u3093\\u3060\\u9854\",\n    \"Worried face\": \"\\u4e0d\\u5b89\\u306a\\u9854\",\n    \"Angry face\": \"\\u6012\\u3063\\u305f\\u9854\",\n    \"Pouting face\": \"\\u3075\\u304f\\u308c\\u9854\",\n    \"Crying face\": \"\\u6ce3\\u3044\\u3066\\u3044\\u308b\\u9854\",\n    \"Persevering face\": \"\\u5931\\u6557\\u9854\",\n    \"Face with look of triumph\": \"\\u52dd\\u3061\\u307b\\u3053\\u3063\\u305f\\u9854\",\n    \"Disappointed but relieved face\": \"\\u5b89\\u5835\\u3057\\u305f\\u9854\",\n    \"Frowning face with open mouth\": \"\\u3044\\u3084\\u306a\\u9854(\\u958b\\u3051\\u305f\\u53e3)\",\n    \"Anguished face\": \"\\u3052\\u3093\\u306a\\u308a\\u3057\\u305f\\u9854\",\n    \"Fearful face\": \"\\u9752\\u3056\\u3081\\u305f\\u9854\",\n    \"Weary face\": \"\\u75b2\\u308c\\u305f\\u9854\",\n    \"Sleepy face\": \"\\u7720\\u3044\\u9854\",\n    \"Tired face\": \"\\u3057\\u3093\\u3069\\u3044\\u9854\",\n    \"Grimacing face\": \"\\u3061\\u3087\\u3063\\u3068\\u4e0d\\u5feb\\u306a\\u9854\",\n    \"Loudly crying face\": \"\\u5927\\u6ce3\\u304d\\u3057\\u3066\\u3044\\u308b\\u9854\",\n    \"Face with open mouth\": \"\\u53e3\\u3092\\u958b\\u3051\\u305f\\u9854\",\n    \"Hushed face\": \"\\u9ed9\\u3063\\u305f\\u9854\",\n    \"Face with open mouth and cold sweat\": \"\\u53e3\\u3092\\u958b\\u3051\\u305f\\u9854(\\u51b7\\u3084\\u6c57)\",\n    \"Face screaming in fear\": \"\\u6050\\u6016\\u306e\\u53eb\\u3073\\u9854\",\n    \"Astonished face\": \"\\u9a5a\\u3044\\u305f\\u9854\",\n    \"Flushed face\": \"\\u71b1\\u3063\\u307d\\u3044\\u9854\",\n    \"Sleeping face\": \"\\u5bdd\\u9854\",\n    \"Dizzy face\": \"\\u307e\\u3044\\u3063\\u305f\\u9854\",\n    \"Face without mouth\": \"\\u53e3\\u306e\\u306a\\u3044\\u9854\",\n    \"Face with medical mask\": \"\\u30de\\u30b9\\u30af\\u3057\\u305f\\u9854\",\n\n    // Line breaker\n    \"Break\": \"\\u6539\\u884c\",\n\n    // Math\n    \"Subscript\": \"\\u4e0b\\u4ed8\\u304d\\u6587\\u5b57\",\n    \"Superscript\": \"\\u4e0a\\u4ed8\\u304d\\u6587\\u5b57\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u5168\\u753b\\u9762\\u8868\\u793a\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u6c34\\u5e73\\u7dda\\u306e\\u633f\\u5165\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u66f8\\u5f0f\\u306e\\u30af\\u30ea\\u30a2\",\n\n    // Save\n    \"Save\": \"\\u30bb\\u30fc\\u30d6\",\n\n    // Undo, redo\n    \"Undo\": \"\\u5143\\u306b\\u623b\\u3059\",\n    \"Redo\": \"\\u3084\\u308a\\u76f4\\u3059\",\n\n    // Select all\n    \"Select All\": \"\\u5168\\u3066\\u3092\\u9078\\u629e\",\n\n    // Code view\n    \"Code View\": \"HTML\\u30bf\\u30b0\\u8868\\u793a\",\n\n    // Quote\n    \"Quote\": \"\\u5f15\\u7528\",\n    \"Increase\": \"\\u5897\\u52a0\",\n    \"Decrease\": \"\\u6e1b\\u5c11\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u30af\\u30a4\\u30c3\\u30af\\u633f\\u5165\",\n\n    // Spcial Characters\n    \"Special Characters\": \"\\u7279\\u6b8a\\u6587\\u5b57\",\n    \"Latin\": \"\\u30e9\\u30c6\\u30f3\\u8a9e\",\n    \"Greek\": \"\\u30ae\\u30ea\\u30b7\\u30e3\\u8a9e\",\n    \"Cyrillic\": \"\\u30ad\\u30ea\\u30eb\\u6587\\u5b57\",\n    \"Punctuation\": \"\\u53e5\\u8aad\\u70b9\",\n    \"Currency\": \"\\u901a\\u8ca8\",\n    \"Arrows\": \"\\u77e2\\u5370\",\n    \"Math\": \"\\u6570\\u5b66\",\n    \"Misc\": \"\\u305d\\u306e\\u4ed6\",\n\n    // Print.\n    \"Print\": \"\\u5370\\u5237\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"\\u30b9\\u30da\\u30eb\\u30c1\\u30a7\\u30c3\\u30af\",\n\n    // Help\n    \"Help\": \"\\u30d8\\u30eb\\u30d7\",\n    \"Shortcuts\": \"\\u30b7\\u30e7\\u30fc\\u30c8\\u30ab\\u30c3\\u30c8\",\n    \"Inline Editor\": \"\\u30a4\\u30f3\\u30e9\\u30a4\\u30f3\\u30a8\\u30c7\\u30a3\\u30bf\",\n    \"Show the editor\": \"\\u30a8\\u30c7\\u30a3\\u30bf\\u3092\\u8868\\u793a\",\n    \"Common actions\": \"\\u4e00\\u822c\\u52d5\\u4f5c\",\n    \"Copy\": \"\\u30b3\\u30d4\\u30fc\",\n    \"Cut\": \"\\u30ab\\u30c3\\u30c8\",\n    \"Paste\": \"\\u8cbc\\u308a\\u4ed8\\u3051\",\n    \"Basic Formatting\": \"\\u57fa\\u672c\\u66f8\\u5f0f\",\n    \"Increase quote level\": \"\\u5f15\\u7528\\u3092\\u5897\\u3084\\u3059\",\n    \"Decrease quote level\": \"\\u5f15\\u7528\\u3092\\u6e1b\\u3089\\u3059\",\n    \"Image / Video\": \"\\u753b\\u50cf/\\u52d5\\u753b\",\n    \"Resize larger\": \"\\u5927\\u304d\\u304f\\u3059\\u308b\",\n    \"Resize smaller\": \"\\u5c0f\\u3055\\u304f\\u3059\\u308b\",\n    \"Table\": \"\\u8868\",\n    \"Select table cell\": \"\\u30bb\\u30eb\\u3092\\u9078\\u629e\",\n    \"Extend selection one cell\": \"\\u30bb\\u30eb\\u306e\\u9078\\u629e\\u7bc4\\u56f2\\u3092\\u5e83\\u3052\\u308b\",\n    \"Extend selection one row\": \"\\u5217\\u306e\\u9078\\u629e\\u7bc4\\u56f2\\u3092\\u5e83\\u3052\\u308b\",\n    \"Navigation\": \"\\u30ca\\u30d3\\u30b2\\u30fc\\u30b7\\u30e7\\u30f3\",\n    \"Focus popup / toolbar\": \"\\u30dd\\u30c3\\u30d7\\u30a2\\u30c3\\u30d7/\\u30c4\\u30fc\\u30eb\\u30d0\\u30fc\\u3092\\u30d5\\u30a9\\u30fc\\u30ab\\u30b9\",\n    \"Return focus to previous position\": \"\\u524d\\u306e\\u4f4d\\u7f6e\\u306b\\u30d5\\u30a9\\u30fc\\u30ab\\u30b9\\u3092\\u623b\\u3059\",\n\n    //\\u00a0Embed.ly\n    \"Embed URL\": \"\\u57cb\\u3081\\u8fbc\\u307fURL\",\n    \"Paste in a URL to embed\": \"\\u57cb\\u3081\\u8fbc\\u307fURL\\u306b\\u8cbc\\u308a\\u4ed8\\u3051\\u308b\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"\\u8cbc\\u308a\\u4ed8\\u3051\\u305f\\u6587\\u66f8\\u306fMicrosoft Word\\u304b\\u3089\\u53d6\\u5f97\\u3055\\u308c\\u307e\\u3059\\u3002\\u30d5\\u30a9\\u30fc\\u30de\\u30c3\\u30c8\\u3092\\u4fdd\\u6301\\u3057\\u3066\\u8cbc\\u308a\\u4ed8\\u3051\\u307e\\u3059\\u304b\\uff1f\",\n    \"Keep\": \"\\u66f8\\u5f0f\\u3092\\u4fdd\\u6301\\u3059\\u308b\",\n    \"Clean\": \"\\u66f8\\u5f0f\\u3092\\u4fdd\\u6301\\u3057\\u306a\\u3044\",\n    \"Word Paste Detected\": \"Microsoft Word\\u306e\\u8cbc\\u308a\\u4ed8\\u3051\\u304c\\u691c\\u51fa\\u3055\\u308c\\u307e\\u3057\\u305f\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/ko.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Korean\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['ko'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\ub0b4\\uc6a9\\uc744 \\uc785\\ub825\\ud558\\uc138\\uc694\",\n\n    // Basic formatting\n    \"Bold\": \"\\uad75\\uac8c\",\n    \"Italic\": \"\\uae30\\uc6b8\\uc784\\uaf34\",\n    \"Underline\": \"\\ubc11\\uc904\",\n    \"Strikethrough\": \"\\ucde8\\uc18c\\uc120\",\n\n    // Main buttons\n    \"Insert\": \"\\uc0bd\\uc785\",\n    \"Delete\": \"\\uc0ad\\uc81c\",\n    \"Cancel\": \"\\ucde8\\uc18c\",\n    \"OK\": \"\\uc2b9\\uc778\",\n    \"Back\": \"\\ub4a4\\ub85c\",\n    \"Remove\": \"\\uc81c\\uac70\",\n    \"More\": \"\\ub354\",\n    \"Update\": \"\\uc5c5\\ub370\\uc774\\ud2b8\",\n    \"Style\": \"\\uc2a4\\ud0c0\\uc77c\",\n\n    // Font\n    \"Font Family\": \"\\uae00\\uaf34\",\n    \"Font Size\": \"\\ud3f0\\ud2b8 \\ud06c\\uae30\",\n\n    // Colors\n    \"Colors\": \"\\uc0c9\\uc0c1\",\n    \"Background\": \"\\ubc30\\uacbd\",\n    \"Text\": \"\\ud14d\\uc2a4\\ud2b8\",\n    \"HEX Color\": \"\\ud5e5\\uc2a4 \\uc0c9\\uc0c1\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\ub2e8\\ub77d\",\n    \"Normal\": \"\\ud45c\\uc900\",\n    \"Code\": \"\\ucf54\\ub4dc\",\n    \"Heading 1\": \"\\uc81c\\ubaa9 1\",\n    \"Heading 2\": \"\\uc81c\\ubaa9 2\",\n    \"Heading 3\": \"\\uc81c\\ubaa9 3\",\n    \"Heading 4\": \"\\uc81c\\ubaa9 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\ub2e8\\ub77d \\uc2a4\\ud0c0\\uc77c\",\n    \"Inline Style\": \"\\uc778\\ub77c\\uc778 \\uc2a4\\ud0c0\\uc77c\",\n\n    // Alignment\n    \"Align\": \"\\uc815\\ub82c\",\n    \"Align Left\": \"\\uc67c\\ucabd\\uc815\\ub82c\",\n    \"Align Center\": \"\\uac00\\uc6b4\\ub370\\uc815\\ub82c\",\n    \"Align Right\": \"\\uc624\\ub978\\ucabd\\uc815\\ub82c\",\n    \"Align Justify\": \"\\uc591\\ucabd\\uc815\\ub82c\",\n    \"None\": \"\\uc5c6\\uc74c\",\n\n    // Lists\n    \"Ordered List\": \"\\uc22b\\uc790 \\ub9ac\\uc2a4\\ud2b8\",\n    \"Default\": \"태만\",\n    \"Lower Alpha\": \"낮은 알파\",\n    \"Lower Greek\": \"낮은 그리스어\",\n    \"Lower Roman\": \"로마자 낮은\",\n    \"Upper Alpha\": \"상단 알파\",\n    \"Upper Roman\": \"상층 로마자\",\n\n    \"Unordered List\": \"\\uc810 \\ub9ac\\uc2a4\\ud2b8\",\n    \"Circle\": \"원\",\n    \"Disc\": \"디스크\",\n    \"Square\": \"광장\",\n\n    // Line height\n    \"Line Height\": \"라인 높이\",\n    \"Single\": \"단일\",\n    \"Double\": \"더블\",\n\n    // Indent\n    \"Decrease Indent\": \"\\ub0b4\\uc5b4\\uc4f0\\uae30\",\n    \"Increase Indent\": \"\\ub4e4\\uc5ec\\uc4f0\\uae30\",\n\n    // Links\n    \"Insert Link\": \"\\ub9c1\\ud06c \\uc0bd\\uc785\",\n    \"Open in new tab\": \"\\uc0c8 \\ud0ed\\uc5d0\\uc11c \\uc5f4\\uae30\",\n    \"Open Link\": \"\\ub9c1\\ud06c \\uc5f4\\uae30\",\n    \"Edit Link\": \"\\ud3b8\\uc9d1 \\ub9c1\\ud06c\",\n    \"Unlink\": \"\\ub9c1\\ud06c\\uc0ad\\uc81c\",\n    \"Choose Link\": \"\\ub9c1\\ud06c\\ub97c \\uc120\\ud0dd\",\n\n    // Images\n    \"Insert Image\": \"\\uc774\\ubbf8\\uc9c0 \\uc0bd\\uc785\",\n    \"Upload Image\": \"\\uc774\\ubbf8\\uc9c0 \\uc5c5\\ub85c\\ub4dc\",\n    \"By URL\": \"URL \\ub85c\",\n    \"Browse\": \"\\uac80\\uc0c9\",\n    \"Drop image\": \"\\uc774\\ubbf8\\uc9c0\\ub97c \\ub4dc\\ub798\\uadf8&\\ub4dc\\ub86d\",\n    \"or click\": \"\\ub610\\ub294 \\ud074\\ub9ad\",\n    \"Manage Images\": \"\\uc774\\ubbf8\\uc9c0 \\uad00\\ub9ac\",\n    \"Loading\": \"\\ub85c\\ub4dc\",\n    \"Deleting\": \"\\uc0ad\\uc81c\",\n    \"Tags\": \"\\ud0dc\\uadf8\",\n    \"Are you sure? Image will be deleted.\": \"\\ud655\\uc2e4\\ud55c\\uac00\\uc694? \\uc774\\ubbf8\\uc9c0\\uac00 \\uc0ad\\uc81c\\ub429\\ub2c8\\ub2e4.\",\n    \"Replace\": \"\\uad50\\uccb4\",\n    \"Uploading\": \"\\uc5c5\\ub85c\\ub4dc\",\n    \"Loading image\": \"\\uc774\\ubbf8\\uc9c0 \\ub85c\\ub4dc \\uc911\",\n    \"Display\": \"\\ub514\\uc2a4\\ud50c\\ub808\\uc774\",\n    \"Inline\": \"\\uc778\\ub77c\\uc778\",\n    \"Break Text\": \"\\uad6c\\ubd84 \\ud14d\\uc2a4\\ud2b8\",\n    \"Alternative Text\": \"\\ub300\\uccb4 \\ud14d\\uc2a4\\ud2b8\",\n    \"Change Size\": \"\\ud06c\\uae30 \\ubcc0\\uacbd\",\n    \"Width\": \"\\ud3ed\",\n    \"Height\": \"\\ub192\\uc774\",\n    \"Something went wrong. Please try again.\": \"\\ubb38\\uc81c\\uac00 \\ubc1c\\uc0dd\\ud588\\uc2b5\\ub2c8\\ub2e4. \\ub2e4\\uc2dc \\uc2dc\\ub3c4\\ud558\\uc2ed\\uc2dc\\uc624.\",\n    \"Image Caption\": \"\\uc774\\ubbf8\\uc9c0 \\ucea1\\uc158\",\n    \"Advanced Edit\": \"\\uace0\\uae09 \\ud3b8\\uc9d1\",\n\n    // Video\n    \"Insert Video\": \"\\ub3d9\\uc601\\uc0c1 \\uc0bd\\uc785\",\n    \"Embedded Code\": \"\\uc784\\ubca0\\ub514\\ub4dc \\ucf54\\ub4dc\",\n    \"Paste in a video URL\": \"\\ub3d9\\uc601\\uc0c1 URL\\uc5d0 \\ubd99\\uc5ec \\ub123\\uae30\",\n    \"Drop video\": \"\\ub3d9\\uc601\\uc0c1\\uc744 \\ub4dc\\ub798\\uadf8&\\ub4dc\\ub86d\",\n    \"Your browser does not support HTML5 video.\": \"\\uadc0\\ud558\\uc758 \\ube0c\\ub77c\\uc6b0\\uc800\\ub294 html5 video\\ub97c \\uc9c0\\uc6d0\\ud558\\uc9c0 \\uc54a\\uc2b5\\ub2c8\\ub2e4.\",\n    \"Upload Video\": \"\\ub3d9\\uc601\\uc0c1 \\uc5c5\\ub85c\\ub4dc\",\n\n    // Tables\n    \"Insert Table\": \"\\ud45c \\uc0bd\\uc785\",\n    \"Table Header\": \"\\ud45c \\ud5e4\\ub354\",\n    \"Remove Table\": \"\\ud45c \\uc81c\\uac70\",\n    \"Table Style\": \"\\ud45c \\uc2a4\\ud0c0\\uc77c\",\n    \"Horizontal Align\": \"\\uc218\\ud3c9 \\uc815\\ub82c\",\n    \"Row\": \"\\ud589\",\n    \"Insert row above\": \"\\uc55e\\uc5d0 \\ud589\\uc744 \\uc0bd\\uc785\",\n    \"Insert row below\": \"\\ub4a4\\uc5d0 \\ud589\\uc744 \\uc0bd\\uc785\",\n    \"Delete row\": \"\\ud589 \\uc0ad\\uc81c\",\n    \"Column\": \"\\uc5f4\",\n    \"Insert column before\": \"\\uc55e\\uc5d0 \\uc5f4\\uc744 \\uc0bd\\uc785\",\n    \"Insert column after\": \"\\ub4a4\\uc5d0 \\uc5f4\\uc744 \\uc0bd\\uc785\",\n    \"Delete column\": \"\\uc5f4 \\uc0ad\\uc81c\",\n    \"Cell\": \"\\uc140\",\n    \"Merge cells\": \"\\uc140 \\ud569\\uce58\\uae30\",\n    \"Horizontal split\": \"\\uc218\\ud3c9 \\ubd84\\ud560\",\n    \"Vertical split\": \"\\uc218\\uc9c1 \\ubd84\\ud560\",\n    \"Cell Background\": \"\\uc140 \\ubc30\\uacbd\",\n    \"Vertical Align\": \"\\uc218\\uc9c1 \\uc815\\ub82c\",\n    \"Top\": \"\\uc704\\ucabd \\uc815\\ub82c\",\n    \"Middle\": \"\\uac00\\uc6b4\\ub370 \\uc815\\ub82c\",\n    \"Bottom\": \"\\uc544\\ub798\\ucabd \\uc815\\ub82c\",\n    \"Align Top\": \"\\uc704\\ucabd\\uc73c\\ub85c \\uc815\\ub82c\\ud569\\ub2c8\\ub2e4.\",\n    \"Align Middle\": \"\\uac00\\uc6b4\\ub370\\ub85c \\uc815\\ub82c\\ud569\\ub2c8\\ub2e4.\",\n    \"Align Bottom\": \"\\uc544\\ub798\\ucabd\\uc73c\\ub85c \\uc815\\ub82c\\ud569\\ub2c8\\ub2e4.\",\n    \"Cell Style\": \"\\uc140 \\uc2a4\\ud0c0\\uc77c\",\n\n    // Files\n    \"Upload File\": \"\\ud30c\\uc77c \\ucca8\\ubd80\",\n    \"Drop file\": \"\\ud30c\\uc77c\\uc744 \\ub4dc\\ub798\\uadf8&\\ub4dc\\ub86d\",\n\n    // Emoticons\n    \"Emoticons\": \"\\uc774\\ubaa8\\ud2f0\\ucf58\",\n    \"Grinning face\": \"\\uc5bc\\uad74 \\uc6c3\\uae30\\ub9cc\",\n    \"Grinning face with smiling eyes\": \"\\ubbf8\\uc18c\\ub294 \\ub208\\uc744 \\uac00\\uc9c4 \\uc5bc\\uad74 \\uc6c3\\uae30\\ub9cc\",\n    \"Face with tears of joy\": \"\\uae30\\uc068\\uc758 \\ub208\\ubb3c\\ub85c \\uc5bc\\uad74\",\n    \"Smiling face with open mouth\": \"\\uc624\\ud508 \\uc785\\uc73c\\ub85c \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\uc624\\ud508 \\uc785\\uc73c\\ub85c \\uc6c3\\ub294 \\uc5bc\\uad74\\uacfc \\ub208\\uc744 \\ubbf8\\uc18c\",\n    \"Smiling face with open mouth and cold sweat\": \"\\uc785\\uc744 \\uc5f4\\uace0 \\uc2dd\\uc740 \\ub540\\uacfc \\ud568\\uaed8 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\uc624\\ud508 \\uc785\\uacfc \\ubc00\\uc811\\ud558\\uac8c \\ub2eb\\ud78c \\ub41c \\ub208\\uc744 \\uac00\\uc9c4 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with halo\": \"\\ud6c4\\uad11 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with horns\": \"\\ubfd4 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Winking face\": \"\\uc5bc\\uad74 \\uc719\\ud06c\",\n    \"Smiling face with smiling eyes\": \"\\uc6c3\\ub294 \\ub208\\uc73c\\ub85c \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Face savoring delicious food\": \"\\ub9db\\uc788\\ub294 \\uc74c\\uc2dd\\uc744 \\uc74c\\ubbf8 \\uc5bc\\uad74\",\n    \"Relieved face\": \"\\uc548\\ub3c4 \\uc5bc\\uad74\",\n    \"Smiling face with heart-shaped eyes\": \"\\ud558\\ud2b8 \\ubaa8\\uc591\\uc758 \\ub208\\uc73c\\ub85c \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smiling face with sunglasses\": \"\\uc120\\uae00\\ub77c\\uc2a4 \\uc6c3\\ub294 \\uc5bc\\uad74\",\n    \"Smirking face\": \"\\ub3c8\\uc744 \\uc9c0\\ubd88 \\uc5bc\\uad74\",\n    \"Neutral face\": \"\\uc911\\ub9bd \\uc5bc\\uad74\",\n    \"Expressionless face\": \"\\ubb34\\ud45c\\uc815 \\uc5bc\\uad74\",\n    \"Unamused face\": \"\\uc990\\uac81\\uac8c\\ud558\\uc9c0 \\uc5bc\\uad74\",\n    \"Face with cold sweat\": \"\\uc2dd\\uc740 \\ub540\\uacfc \\uc5bc\\uad74\",\n    \"Pensive face\": \"\\uc7a0\\uaca8\\uc788\\ub294 \\uc5bc\\uad74\",\n    \"Confused face\": \"\\ud63c\\ub780 \\uc5bc\\uad74\",\n    \"Confounded face\": \"\\ub9dd\\ud560 \\uac83 \\uc5bc\\uad74\",\n    \"Kissing face\": \"\\uc5bc\\uad74\\uc744 \\ud0a4\\uc2a4\",\n    \"Face throwing a kiss\": \"\\ud0a4\\uc2a4\\ub97c \\ub358\\uc9c0\\uace0 \\uc5bc\\uad74\",\n    \"Kissing face with smiling eyes\": \"\\ubbf8\\uc18c\\ub294 \\ub208\\uc744 \\uac00\\uc9c4 \\uc5bc\\uad74\\uc744 \\ud0a4\\uc2a4\",\n    \"Kissing face with closed eyes\": \"\\ub2eb\\ud78c \\ub41c \\ub208\\uc744 \\uac00\\uc9c4 \\uc5bc\\uad74\\uc744 \\ud0a4\\uc2a4\",\n    \"Face with stuck out tongue\": \"\\ub0b4\\ubc00 \\ud600 \\uc5bc\\uad74\",\n    \"Face with stuck out tongue and winking eye\": \"\\ub0b4\\ubc00 \\ud600\\uc640 \\uc719\\ud06c \\ub208\\uacfc \\uc5bc\\uad74\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\ubc16\\uc73c\\ub85c \\ubd99\\uc5b4 \\ud600\\uc640 \\ubc00\\uc811\\ud558\\uac8c \\ub2eb\\ud78c \\ub41c \\ub208\\uc744 \\uac00\\uc9c4 \\uc5bc\\uad74\",\n    \"Disappointed face\": \"\\uc2e4\\ub9dd \\uc5bc\\uad74\",\n    \"Worried face\": \"\\uac71\\uc815 \\uc5bc\\uad74\",\n    \"Angry face\": \"\\uc131\\ub09c \\uc5bc\\uad74\",\n    \"Pouting face\": \"\\uc5bc\\uad74\\uc744 \\uc090\",\n    \"Crying face\": \"\\uc5bc\\uad74 \\uc6b0\\ub294\",\n    \"Persevering face\": \"\\uc5bc\\uad74\\uc744 \\uc778\\ub0b4\",\n    \"Face with look of triumph\": \"\\uc2b9\\ub9ac\\uc758 \\ud45c\\uc815\\uc73c\\ub85c \\uc5bc\\uad74\",\n    \"Disappointed but relieved face\": \"\\uc2e4\\ub9dd\\ud558\\uc9c0\\ub9cc \\uc5bc\\uad74\\uc744 \\uc548\\uc2ec\",\n    \"Frowning face with open mouth\": \"\\uc624\\ud508 \\uc785\\uc73c\\ub85c \\uc5bc\\uad74\\uc744 \\ucc21\\uadf8\\ub9bc\",\n    \"Anguished face\": \"\\uace0\\ub1cc\\uc758 \\uc5bc\\uad74\",\n    \"Fearful face\": \"\\ubb34\\uc11c\\uc6b4 \\uc5bc\\uad74\",\n    \"Weary face\": \"\\uc9c0\\uce5c \\uc5bc\\uad74\",\n    \"Sleepy face\": \"\\uc2ac\\ub9ac\\ud53c \\uc5bc\\uad74\",\n    \"Tired face\": \"\\ud53c\\uace4 \\uc5bc\\uad74\",\n    \"Grimacing face\": \"\\uc5bc\\uad74\\uc744 \\ucc21\\uadf8\\ub9b0\",\n    \"Loudly crying face\": \"\\ud070 \\uc18c\\ub9ac\\ub85c \\uc5bc\\uad74\\uc744 \\uc6b8\\uace0\",\n    \"Face with open mouth\": \"\\uc624\\ud508 \\uc785\\uc73c\\ub85c \\uc5bc\\uad74\",\n    \"Hushed face\": \"\\uc870\\uc6a9\\ud55c \\uc5bc\\uad74\",\n    \"Face with open mouth and cold sweat\": \"\\uc785\\uc744 \\uc5f4\\uace0 \\uc2dd\\uc740 \\ub540\\uc73c\\ub85c \\uc5bc\\uad74\",\n    \"Face screaming in fear\": \"\\uacf5\\ud3ec\\uc5d0 \\ube44\\uba85 \\uc5bc\\uad74\",\n    \"Astonished face\": \"\\ub180\\ub77c \\uc5bc\\uad74\",\n    \"Flushed face\": \"\\ud50c\\ub7ec\\uc2dc \\uc5bc\\uad74\",\n    \"Sleeping face\": \"\\uc5bc\\uad74 \\uc7a0\\uc790\\ub294\",\n    \"Dizzy face\": \"\\ub514\\uc9c0 \\uc5bc\\uad74\",\n    \"Face without mouth\": \"\\uc785\\uc5c6\\uc774 \\uc5bc\\uad74\",\n    \"Face with medical mask\": \"\\uc758\\ub8cc \\ub9c8\\uc2a4\\ud06c\\ub85c \\uc5bc\\uad74\",\n\n    // Line breaker\n    \"Break\": \"\\ub2e8\\uc808\",\n\n    // Math\n    \"Subscript\": \"\\uc544\\ub798 \\ucca8\\uc790\",\n    \"Superscript\": \"\\uc704 \\ucca8\\uc790\",\n\n    // Full screen\n    \"Fullscreen\": \"\\uc804\\uccb4 \\ud654\\uba74\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\uc218\\ud3c9\\uc120\\uc744 \\uc0bd\\uc785\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\uc11c\\uc2dd \\uc81c\\uac70\",\n\n    // Save\n    \"Save\": \"\\uad6c\\ud558\\ub2e4\",\n\n    // Undo, redo\n    \"Undo\": \"\\uc2e4\\ud589 \\ucde8\\uc18c\",\n    \"Redo\": \"\\ub418\\ub3cc\\ub9ac\\uae30\",\n\n    // Select all\n    \"Select All\": \"\\uc804\\uccb4\\uc120\\ud0dd\",\n\n    // Code view\n    \"Code View\": \"\\ucf54\\ub4dc\\ubcf4\\uae30\",\n\n    // Quote\n    \"Quote\": \"\\uc778\\uc6a9\",\n    \"Increase\": \"\\uc99d\\uac00\",\n    \"Decrease\": \"\\uac10\\uc18c\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\ube60\\ub978 \\uc0bd\\uc785\",\n\n    // Spcial Characters\n    \"Special Characters\": \"\\ud2b9\\uc218 \\ubb38\\uc790\",\n    \"Latin\": \"\\ub77c\\ud2f4\\uc5b4\",\n    \"Greek\": \"\\uadf8\\ub9ac\\uc2a4\\uc5b4\",\n    \"Cyrillic\": \"\\ud0a4\\ub9b4 \\ubb38\\uc790\",\n    \"Punctuation\": \"\\ubb38\\uc7a5\\ubd80\\ud638\",\n    \"Currency\": \"\\ud1b5\\ud654\",\n    \"Arrows\": \"\\ud654\\uc0b4\\ud45c\",\n    \"Math\": \"\\uc218\\ud559\",\n    \"Misc\": \"\\uadf8 \\uc678\",\n\n    // Print.\n    \"Print\": \"\\uc778\\uc1c4\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"\\ub9de\\ucda4\\ubc95 \\uac80\\uc0ac\\uae30\",\n\n    // Help\n    \"Help\": \"\\ub3c4\\uc6c0\\ub9d0\",\n    \"Shortcuts\": \"\\ub2e8\\ucd95\\ud0a4\",\n    \"Inline Editor\": \"\\uc778\\ub77c\\uc778 \\uc5d0\\ub514\\ud130\",\n    \"Show the editor\": \"\\uc5d0\\ub514\\ud130 \\ubcf4\\uae30\",\n    \"Common actions\": \"\\uc77c\\ubc18 \\ub3d9\\uc791\",\n    \"Copy\": \"\\ubcf5\\uc0ac\\ud558\\uae30\",\n    \"Cut\": \"\\uc798\\ub77c\\ub0b4\\uae30\",\n    \"Paste\": \"\\ubd99\\uc5ec\\ub123\\uae30\",\n    \"Basic Formatting\": \"\\uae30\\ubcf8 \\uc11c\\uc2dd\",\n    \"Increase quote level\": \"\\uc778\\uc6a9 \\uc99d\\uac00\",\n    \"Decrease quote level\": \"\\uc778\\uc6a9 \\uac10\\uc18c\",\n    \"Image / Video\": \"\\uc774\\ubbf8\\uc9c0 / \\ub3d9\\uc601\\uc0c1\",\n    \"Resize larger\": \"\\ud06c\\uae30\\ub97c \\ub354 \\ud06c\\uac8c \\uc870\\uc815\",\n    \"Resize smaller\": \"\\ud06c\\uae30\\ub97c \\ub354 \\uc791\\uac8c \\uc870\\uc815\",\n    \"Table\": \"\\ud45c\",\n    \"Select table cell\": \"\\ud45c \\uc140 \\uc120\\ud0dd\",\n    \"Extend selection one cell\": \"\\uc140\\uc758 \\uc120\\ud0dd \\ubc94\\uc704\\ub97c \\ud655\\uc7a5\",\n    \"Extend selection one row\": \"\\ud589\\uc758 \\uc120\\ud0dd \\ubc94\\uc704\\ub97c \\ud655\\uc7a5\",\n    \"Navigation\": \"\\ub124\\ube44\\uac8c\\uc774\\uc158\",\n    \"Focus popup / toolbar\": \"\\ud31d\\uc5c5 / \\ud234\\ubc14\\ub97c \\ud3ec\\ucee4\\uc2a4\",\n    \"Return focus to previous position\": \"\\uc774\\uc804 \\uc704\\uce58\\ub85c \\ud3ec\\ucee4\\uc2a4 \\ub418\\ub3cc\\ub9ac\\uae30\",\n\n    // Embed.ly\n    \"Embed URL\": \"\\uc784\\ubca0\\ub4dc URL\",\n    \"Paste in a URL to embed\": \"\\uc784\\ubca0\\ub4dc URL\\uc5d0 \\ubd99\\uc5ec \\ub123\\uae30\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"\\ubd99\\uc5ec\\ub123\\uc740 \\ubb38\\uc11c\\ub294 \\ub9c8\\uc774\\ud06c\\ub85c\\uc18c\\ud504\\ud2b8 \\uc6cc\\ub4dc\\uc5d0\\uc11c \\uac00\\uc838\\uc654\\uc2b5\\ub2c8\\ub2e4. \\ud3ec\\ub9f7\\uc744 \\uc720\\uc9c0\\ud558\\uac70\\ub098 \\uc815\\ub9ac \\ud558\\uc2dc\\uaca0\\uc2b5\\ub2c8\\uae4c?\",\n    \"Keep\": \"\\uc720\\uc9c0\",\n    \"Clean\": \"\\uc815\\ub9ac\",\n    \"Word Paste Detected\": \"\\uc6cc\\ub4dc \\ubd99\\uc5ec \\ub123\\uae30\\uac00 \\uac80\\ucd9c \\ub418\\uc5c8\\uc2b5\\ub2c8\\ub2e4.\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/ku.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Arabic\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['ku'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"شتێک بنووسە\",\n\n    // Basic formatting\n    \"Bold\": \"تۆخکردنەوە\",\n    \"Italic\": \"لارکردنەوە\",\n    \"Underline\": \"هێڵ بەژێردا هێنان\",\n    \"Strikethrough\": \"هێڵ بە سەردا هێنان\",\n\n    // Main buttons\n    \"Insert\": \"خستنە ناو\",\n    \"Delete\": \"سڕینەوە\",\n    \"Cancel\": \"پاشگەزبوونەوە\",\n    \"OK\": \"باشە\",\n    \"Back\": \"گەڕانەوە\",\n    \"Remove\": \"لابردن\",\n    \"More\": \"زیاتر\",\n    \"Update\": \"نوێکردنەوە\",\n    \"Style\": \"شێواز\",\n\n    // Font\n    \"Font Family\": \"فۆنتی خێزان\",\n    \"Font Size\": \"قەبارەی فۆنت\",\n\n    // Colors\n    \"Colors\": \"ڕەنگەکان\",\n    \"Background\": \"پاشبنەما(باکگراوند)\",\n    \"Text\": \"دەق\",\n\n    // Paragraphs بۆیە ڕەقەمەکانی خوارەوەم نەکردووە بە کوردی لە شوێنی تریش بینیوومە هەروا نوسراوەتەوە\n    \"Paragraph Format\": \"شێوازی پەڕەگراف\",\n    \"Normal\": \"ئاسایی\",\n    \"Code\": \"کۆد\",\n    \"Heading 1\": \" 1\",\n    \"Heading 2\": \" 2\",\n    \"Heading 3\": \" 3\",\n    \"Heading 4\": \" 4\",\n\n    // Style\n    \"Paragraph Style\": \"شێوازی پەڕەگراف\",\n    \"Inline Style\": \"شێوزای ناو دێڕ\",\n\n    // Alignment\n    \"Align\": \"ڕیزکردن\",\n    \"Align Left\": \"ڕیزکردن لای چەپەوە\",\n    \"Align Center\": \"ڕیزکردن لە ناوەڕاستەوە\",\n    \"Align Right\": \"ڕیزکردن لای ڕاستەوە\",\n    \"Align Justify\": \"هاوڕێک\",\n    \"None\": \"هیچ\",\n\n    // Lists\n    \"Ordered List\": \"لیستی داواکراو\",\n    \"Default\": \"Destçûnî\",\n    \"Lower Alpha\": \"Alpha kêm\",\n    \"Lower Greek\": \"Grek\",\n    \"Lower Roman\": \"Roman\",\n    \"Upper Alpha\": \"Alpha\",\n    \"Upper Roman\": \"Rûsî\",\n\n    \"Unordered List\": \"لیستی داوانەکراو\",\n    \"Circle\": \"Çember\",\n    \"Disc\": \"Disc\",\n    \"Square\": \"Meydan\",\n\n    // Line height\n    \"Line Height\": \"Hewayê\",\n    \"Single\": \"Yekoyek\",\n    \"Double\": \"Dûcar\",\n\n    // Indent\n    \"Decrease Indent\": \"کەمکردنەوەی بۆشایی بەجێهێشتن\",\n    \"Increase Indent\": \"زیادکردنی بۆشایی بەجێهێشتن\",\n\n    // Links\n    \"Insert Link\": \"دانانی بەستەر\",\n    \"Open in new tab\": \"کردنەوەی لە تابێکی نوێدا\",\n    \"Open Link\": \"کردنەوەی بەستەر\",\n    \"Edit Link\": \"دەستکاریکردنی بەستەر\",\n    \"Unlink\": \"سڕینەوەی بەستەر\",\n    \"Choose Link\": \"هەڵبژاردنی بەستەر\",\n\n    // Images\n    \"Insert Image\": \"هێنانی وێنە\",\n    \"Upload Image\": \"بارکردنی وێنە\",\n    \"By URL\": \"بە شێوەی بەستەر\",\n    \"Browse\": \"هێنان\",\n    \"Drop image\": \"ڕاکێشانی وێنە\",\n    \"or click\": \"یان کرتە\",\n    \"Manage Images\": \"بەڕێوەبردنی وێنە\",\n    \"ئامادەکردن\": \"Cargando\",\n    \"Deleting\": \"سڕینەوە\",\n    \"Tags\": \"تاگەکان\",\n    \"Are you sure? Image will be deleted.\": \"دڵنیایت لە سڕینەوەی وێنەکە\",\n    \"Replace\": \"لەبری دانان\",\n    \"Uploading\": \"بارکردن\",\n    \"Loading image\": \"ئامادەکردنی وێنە\",\n    \"Display\": \"پیشان دان\",\n    \"Inline\": \"ناو دێڕ\",\n    \"Break Text\": \"ماوەی دەق\",\n    \"Alternative Text\": \"جێگرەوەی دەق\",\n    \"Change Size\": \"گۆڕینی قەبارەی\",\n    \"Width\": \"پانی\",\n    \"Height\": \"بەرزی\",\n    \"Something went wrong. Please try again.\": \"شتێک هە ڵەیە تکایە هەوڵبدەرەوە\",\n\n    // Video\n    \"Insert Video\": \"دانانی ڤیدیۆ\",\n    \"Embedded Code\": \"کۆدی ئێمبد\",\n\n    // Tables\n    \"Insert Table\": \"دانانی خشتە\",\n    \"Table Header\": \"خشتەی ناونیشان\",\n    \"Remove Table\": \"سڕینەوەی خشتە\",\n    \"Table Style\": \"شێوازی خشتە\",\n    \"Horizontal Align\": \"ڕێکخستنی ئاسۆیی\",\n    \"Row\": \"ڕیز\",\n    \"Insert row above\": \"دانانی ڕیز لەسەرەوە\",\n    \"Insert row below\": \"دانانی ڕیز لە خوارەوە\",\n    \"Delete row\": \"سڕینەوەی ڕیز\",\n    \"Column\": \"ستوون\",\n    \"Insert column before\": \"زیادکردنی ستونێک لە پێشەوە\",\n    \"Insert column after\": \"زیادکردنی ستونێک لە دوایەوە\",\n    \"Delete column\": \"سڕینەوەی ستونێک\",\n    \"Cell\": \"خانە\",\n    \"Merge cells\": \"تێکەڵکردنی خانەکان\",\n    \"Horizontal split\": \"جیاکردنەوەی هێڵی ئاسۆیی\",\n    \"Vertical split\": \"جیاکردنەوەی سەر بەرەو خوار\",\n    \"Cell Background\": \"خانەی باکگراوند\",\n    \"Vertical Align\": \"ڕیزکردن بەشێوەی سەر بەرەو خوار\",\n    \"Top\": \"سەرەوە\",\n    \"Middle\": \"ناوەڕاست\",\n    \"Bottom\": \"خوارەوە\",\n    \"Align Top\": \"ڕیزکردن لە سەرەوە\",\n    \"Align Middle\": \"ڕیزکردن لە ناوەڕاستەوە\",\n    \"Align Bottom\": \"ڕیزکردن لە خوارەوە\",\n    \"Cell Style\": \"شێوازی خانە\",\n\n    // Files\n    \"Upload File\": \"بەرزکردنەوەی پەڕگە\",\n    \"Drop file\": \"ڕاکێشانی پەڕگە\",\n\n    // Emoticons\n    \"Emoticons\": \"ئیمۆجی\",\n    \"Grinning face\": \"ڕوخسارێکی پێکەنیناوی\",\n    \"Grinning face with smiling eyes\": \"ڕوخسارێکی پێکەنیناوی لەگەڵ چاوێکی خەندە ئامێز\",\n    \"Face with tears of joy\": \"دەمووچاوێک لەگەڵ ئاو هاتنە خوارەوەوە بە چاودا\",\n    \"Smiling face with open mouth\": \"دەمووچاوێکی پێکەنیناوی لەگەڵ دەمکردنەوە\",\n    \"Smiling face with open mouth and smiling eyes\": \"دەمووچاوێکی پێکەنیناوی لەگەڵ دەمکردنەوە و چاوێکی خەندە ئامێز\",\n    \"Smiling face with open mouth and cold sweat\": \"دەمووچاوێکی پێکەنیناوی لەگەڵ دەمکردنەوە و ئارەق کردنەوە\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Cara sonriente con la boca abierta y los ojos fuertemente cerrados\",\n    \"Smiling face with halo\": \"دەمووچاوێکی پێکەنیناوی و بوونی بازنەیەکی خڕ بەسەرتەوە\",\n    \"Smiling face with horns\": \"دەمووچاوێکی پێکەنیناوی لەگەڵ دوو قۆچدا\",\n    \"Winking face\": \"چاو داگرتن\",\n    \"Smiling face with smiling eyes\": \"دەمووچاوێکی پێکەنیناوی چاوی بچوک کردوەتەوە\",\n    \"Face savoring delicious food\": \"دەمووچاوی کەسێک کە حەزی لە خواردنە\",\n    \"Relieved face\": \"دەمووچاوێکی حەساوە\",\n    \"Smiling face with heart-shaped eyes\": \"دەمووچاوێک لەگەڵ بوونی دڵ لە چاودا\",\n    \"Smiling face with sunglasses\": \"دەمووچاوێک لەگەڵ چاویلکەدا\",\n    \"Smirking face\": \"دەمووچاوێکی فیزاوی\",\n    \"Neutral face\": \"دەم داخستن\",\n    \"Expressionless face\": \"دەم و چاو داخستن\",\n    \"Unamused face\": \"دەمووچاوێکی بێزار\",\n    \"Face with cold sweat\": \"ڕوخسارێک لەگەڵ ئارەقی سارددا\",\n    \"Pensive face\": \"ڕوخسارێکی خەمبار\",\n    \"Confused face\": \"ڕوخسارێکی قەلەق\",\n    \"Confounded face\": \"ڕوخسارێکی ئاڵۆز\",\n    \"Kissing face\": \"دەمووچاوێک و ماچ\",\n    \"Face throwing a kiss\": \"دەمووچاوێک ماچ هەڵبدات\",\n    \"Kissing face with smiling eyes\": \"دەمووچاوێک ماچ دەکات لەگەڵ ڕوخسارێکی پێکەنیناوی\",\n    \"Kissing face with closed eyes\": \"دەمووچاوێک ماچ دەکات و چاوی داخستووە\",\n    \"Face with stuck out tongue\": \"ڕوخسارێک زمانی دەرهێناوە\",\n    \"Face with stuck out tongue and winking eye\": \"ڕوخسارێک زمانی دەرهێناوە و چاوێکی لێت داگرتووە\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"هەردووچاوی داخستووە و زمان دەردێنێت\",\n    \"Disappointed face\": \"ڕوخسارێکی نائومێد کراو\",\n    \"Worried face\": \"ڕوخسارێکی بێتاقەت\",\n    \"Angry face\": \"ڕوخسارێکی توڕە\",\n    \"Pouting face\": \"ڕوخسارێک لچی دەرهێناوە\",\n    \"Crying face\": \"ڕوخسارێک دەگری\",\n    \"Persevering face\": \"ڕوخسارێکی تەواوی بێتاقەت\",\n    \"Face with look of triumph\": \"ڕوخسارێک کە سوورە لەسەر کارێک\",\n    \"Disappointed but relieved face\": \"ڕوخسارێکی خەمبارە و ئارەق دەکاتەوە\",\n    \"Frowning face with open mouth\": \"ڕوخسارێکی تووڕە و دەمی کراوەتەوە\",\n    \"Anguished face\": \"ڕوخسارێکی خەمناک\",\n    \"Fearful face\": \"دەموچاوێکی ترساو\",\n    \"Weary face\": \"ڕوخسارێکی ماندوو\",\n    \"Sleepy face\": \"ڕوخسارێکی خەوتوو\",\n    \"Tired face\": \"ڕوخسارێکی ماندوو\",\n    \"Grimacing face\": \"دان جیڕ کردنەوە\",\n    \"Loudly crying face\": \"ڕوخسارێک بە دەنگی بەرزەوە دەگری\",\n    \"Face with open mouth\": \"ڕوخسارێک دەمی کردوەتەوە\",\n    \"Hushed face\": \"ڕوخسارێکی بێدەنگ کراو\",\n    \"Face with open mouth and cold sweat\": \"دەمووچاوێک دەمی کردوەتەوە و ئارەق دەڕێژێت\",\n    \"Face screaming in fear\": \"دەمووچاوێک هاوار دەکات و لە شتێک دەترسێت\",\n    \"Astonished face\": \"ڕوخسارێکی سەرسام بوو\",\n    \"Flushed face\": \"ڕوخسارێکی سور بووەوە\",\n    \"Sleeping face\": \"ڕوخسارێکی خەوتوو\",\n    \"Dizzy face\": \"سەرگێژ خواردن\",\n    \"Face without mouth\": \"دەمووچاوێک بەبێ دەم\",\n    \"Face with medical mask\": \"دەمووچاوێک لەگەڵ ماسکی پزیشکی\",\n\n    // Line breaker\n    \"Break\": \"بڕینی هێڵێک\",\n\n    // Math\n    \"Subscript\": \"نوسین لە ژێرەوەی نوسینێکی دیکە\",\n    \"Superscript\": \"سەرنووس\",\n\n    // Full screen\n    \"Fullscreen\": \"پڕ بە شاشە\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"دانانی هێڵی ئاسۆیی\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"سڕینەوەی شێواز\",\n\n    // Save\n    \"Save\": \"Rizgarkirin\",\n\n    // Undo, redo\n    \"Undo\": \"گەڕانەوە\",\n    \"Redo\": \"هێنانەوەی هەنگاوی پێشتر\",\n\n    // Select all\n    \"Select All\": \"دیاریکردنی هەموو\",\n\n    // Code view\n    \"Code View\": \"بینینی کۆد\",\n\n    // Quote\n    \"Quote\": \"وتە\",\n    \"Increase\": \"زیادکردن\",\n    \"Decrease\": \"کەمکردن\",\n\n    // Quick Insert\n    \"Quick Insert\": \"خێرا خستنە ناو\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Special Characters\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Greek\",\n    \"Cyrillic\": \"Cyrillic\",\n    \"Punctuation\": \"Punctuation\",\n    \"Currency\": \"Currency\",\n    \"Arrows\": \"Arrows\",\n    \"Math\": \"Math\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Print\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Spell Checker\",\n\n    // Help\n    \"Help\": \"Help\",\n    \"Shortcuts\": \"Shortcuts\",\n    \"Inline Editor\": \"Inline Editor\",\n    \"Show the editor\": \"Show the editor\",\n    \"Common actions\": \"Common actions\",\n    \"Copy\": \"Copy\",\n    \"Cut\": \"Cut\",\n    \"Paste\": \"Paste\",\n    \"Basic Formatting\": \"Basic Formatting\",\n    \"Increase quote level\": \"Increase quote level\",\n    \"Decrease quote level\": \"Decrease quote level\",\n    \"Image / Video\": \"Image / Video\",\n    \"Resize larger\": \"Resize larger\",\n    \"Resize smaller\": \"Resize smaller\",\n    \"Table\": \"Table\",\n    \"Select table cell\": \"Select table cell\",\n    \"Extend selection one cell\": \"Extend selection one cell\",\n    \"Extend selection one row\": \"Extend selection one row\",\n    \"Navigation\": \"Navigation\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Return focus to previous position\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed URL\",\n    \"Paste in a URL to embed\": \"Paste in a URL to embed\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\",\n    \"Keep\": \"Keep\",\n    \"Clean\": \"Clean\",\n    \"Word Paste Detected\": \"Word Paste Detected\"\n  },\n  direction: \"rtl\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/me.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Montenegrin\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['me'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ukucajte ne\\u0161tp\",\n\n    // Basic formatting\n    \"Bold\": \"Bold\",\n    \"Italic\": \"Italic\",\n    \"Underline\": \"Podvu\\u010deno\",\n    \"Strikethrough\": \"Prekri\\u017eano\",\n\n    // Main buttons\n    \"Insert\": \"Umetni\",\n    \"Delete\": \"Obri\\u0161i\",\n    \"Cancel\": \"Otka\\u017ei\",\n    \"OK\": \"U redu\",\n    \"Back\": \"Natrag\",\n    \"Remove\": \"Ukloni\",\n    \"More\": \"Vi\\u0161e\",\n    \"Update\": \"A\\u017euriranje\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Odaberi font\",\n    \"Font Size\": \"Veli\\u010dina fonta\",\n\n    // Colors\n    \"Colors\": \"Boje\",\n    \"Background\": \"Pozadine\",\n    \"Text\": \"Teksta\",\n    \"HEX Color\": \"HEX boje\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Paragraf formatu\",\n    \"Normal\": \"Normalno\",\n    \"Code\": \"Izvorni kod\",\n    \"Heading 1\": \"Naslov 1\",\n    \"Heading 2\": \"Naslov 2\",\n    \"Heading 3\": \"Naslov 3\",\n    \"Heading 4\": \"Naslov 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraf stil\",\n    \"Inline Style\": \"Inline stil\",\n\n    // Alignment\n    \"Align\": \"Poravnaj\",\n    \"Align Left\": \"Poravnaj lijevo\",\n    \"Align Center\": \"Poravnaj po sredini\",\n    \"Align Right\": \"Poravnaj desno\",\n    \"Align Justify\": \"Cjelokupno poravnanje\",\n    \"None\": \"Nijedan\",\n\n    // Lists\n    \"Ordered List\": \"Ure\\u0111ena lista\",\n    \"Default\": \"\",\n    \"Lower Alpha\": \"\",\n    \"Lower Greek\": \"\",\n    \"Lower Roman\": \"\",\n    \"Upper Alpha\": \"\",\n    \"Upper Roman\": \"\",\n\n    \"Unordered List\": \"Nesre\\u0111ene lista\",\n    \"Circle\": \"\",\n    \"Disc\": \"\",\n    \"Square\": \"\",\n\n    // Line height\n    \"Line Height\": \"\",\n    \"Single\": \"\",\n    \"Double\": \"\",\n\n    // Indent\n    \"Decrease Indent\": \"Smanjenje alineja\",\n    \"Increase Indent\": \"Pove\\u0107anje alineja\",\n\n    // Links\n    \"Insert Link\": \"Umetni link\",\n    \"Open in new tab\": \"Otvori u novom prozoru\",\n    \"Open Link\": \"Otvori link\",\n    \"Edit Link\": \"Uredi link\",\n    \"Unlink\": \"Ukloni link\",\n    \"Choose Link\": \"Izabrati link\",\n\n    // Images\n    \"Insert Image\": \"Umetni sliku\",\n    \"Upload Image\": \"Upload sliku\",\n    \"By URL\": \"Preko URL\",\n    \"Browse\": \"Pregledaj\",\n    \"Drop image\": \"Izbaci sliku\",\n    \"or click\": \"ili odaberi\",\n    \"Manage Images\": \"Upravljanje ilustracijama\",\n    \"Loading\": \"Koji tovari\",\n    \"Deleting\": \"Brisanje\",\n    \"Tags\": \"Oznake\",\n    \"Are you sure? Image will be deleted.\": \"Da li ste sigurni da \\u017eelite da obri\\u0161ete ovu ilustraciju?\",\n    \"Replace\": \"Zamijenite\",\n    \"Uploading\": \"Uploading\",\n    \"Loading image\": \"Koji tovari sliku\",\n    \"Display\": \"Prikaz\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Break tekst\",\n    \"Alternative Text\": \"Alternativna tekst\",\n    \"Change Size\": \"Promijeni veli\\u010dinu\",\n    \"Width\": \"\\u0161irina\",\n    \"Height\": \"Visina\",\n    \"Something went wrong. Please try again.\": \"Ne\\u0161to je po\\u0161lo po zlu. Molimo vas da poku\\u0161ate ponovo.\",\n    \"Image Caption\": \"Slika natpisa\",\n    \"Advanced Edit\": \"Napredno uređivanje\",\n\n    // Video\n    \"Insert Video\": \"Umetni video\",\n    \"Embedded Code\": \"Embedded kod\",\n    \"Paste in a video URL\": \"Prilepite v URL video posnetka\",\n    \"Drop video\": \"Izbaci video\",\n    \"Your browser does not support HTML5 video.\": \"Váš prehliadač nepodporuje video HTML5.\",\n    \"Upload Video\": \"Upload video\",\n\n    // Tables\n    \"Insert Table\": \"Umetni tabelu\",\n    \"Table Header\": \"Zaglavlje tabelu\",\n    \"Remove Table\": \"Izbri\\u0161i tabelu\",\n    \"Table Style\": \"Tabelu stil\",\n    \"Horizontal Align\": \"Horizontalna poravnanje\",\n    \"Row\": \"Red\",\n    \"Insert row above\": \"Umetni red iznad\",\n    \"Insert row below\": \"Umetni red ispod\",\n    \"Delete row\": \"Obri\\u0161i red\",\n    \"Column\": \"Kolona\",\n    \"Insert column before\": \"Umetni kolonu prije\",\n    \"Insert column after\": \"Umetni kolonu poslije\",\n    \"Delete column\": \"Obri\\u0161i kolonu\",\n    \"Cell\": \"\\u0106elija\",\n    \"Merge cells\": \"Spoji \\u0107elija\",\n    \"Horizontal split\": \"Horizontalno razdvajanje polja\",\n    \"Vertical split\": \"Vertikalno razdvajanje polja\",\n    \"Cell Background\": \"\\u0106elija pozadini\",\n    \"Vertical Align\": \"Vertikalni poravnaj\",\n    \"Top\": \"Vrh\",\n    \"Middle\": \"Srednji\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Poravnaj vrh\",\n    \"Align Middle\": \"Poravnaj srednji\",\n    \"Align Bottom\": \"Poravnaj dno\",\n    \"Cell Style\": \"\\u0106elija stil\",\n\n    // Files\n    \"Upload File\": \"Upload datoteke\",\n    \"Drop file\": \"Drop datoteke\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikona\",\n    \"Grinning face\": \"Cere\\u0107i lice\",\n    \"Grinning face with smiling eyes\": \"Cere\\u0107i lice nasmijana o\\u010dima\",\n    \"Face with tears of joy\": \"Lice sa suze radosnice\",\n    \"Smiling face with open mouth\": \"Nasmijana lica s otvorenih usta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Nasmijana lica s otvorenih usta i nasmijana o\\u010di\",\n    \"Smiling face with open mouth and cold sweat\": \"Nasmijana lica s otvorenih usta i hladan znoj\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Nasmijana lica s otvorenih usta i \\u010dvrsto-zatvorenih o\\u010diju\",\n    \"Smiling face with halo\": \"Nasmijana lica sa halo\",\n    \"Smiling face with horns\": \"Nasmijana lica s rogovima\",\n    \"Winking face\": \"Namigivanje lice\",\n    \"Smiling face with smiling eyes\": \"Nasmijana lica sa nasmijana o\\u010dima\",\n    \"Face savoring delicious food\": \"Suo\\u010davaju uživaju\\u0107i ukusna hrana\",\n    \"Relieved face\": \"Laknulo lice\",\n    \"Smiling face with heart-shaped eyes\": \"Nasmijana lica sa obliku srca o\\u010di\",\n    \"Smiling face with sunglasses\": \"Nasmijana lica sa sun\\u010dane nao\\u010dare\",\n    \"Smirking face\": \"Namr\\u0161tena lica\",\n    \"Neutral face\": \"Neutral lice\",\n    \"Expressionless face\": \"Bezizra\\u017eajno lice\",\n    \"Unamused face\": \"Nije zabavno lice\",\n    \"Face with cold sweat\": \"Lice s hladnim znojem\",\n    \"Pensive face\": \"Zami\\u0161ljen lice\",\n    \"Confused face\": \"Zbunjen lice\",\n    \"Confounded face\": \"Uzbu\\u0111en lice\",\n    \"Kissing face\": \"Ljubakanje lice\",\n    \"Face throwing a kiss\": \"Suo\\u010davaju bacanje poljubac\",\n    \"Kissing face with smiling eyes\": \"Ljubljenje lice nasmijana o\\u010dima\",\n    \"Kissing face with closed eyes\": \"Ljubljenje lice sa zatvorenim o\\u010dima\",\n    \"Face with stuck out tongue\": \"Lice sa ispru\\u017eio jezik\",\n    \"Face with stuck out tongue and winking eye\": \"Lice sa ispru\\u017eio jezik i trep\\u0107u\\u0107e \\u0107e oko\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Lice sa ispru\\u017eio jezik i \\u010dvrsto zatvorene o\\u010di\",\n    \"Disappointed face\": \"Razo\\u010daran lice\",\n    \"Worried face\": \"Zabrinuti lice\",\n    \"Angry face\": \"Ljut lice\",\n    \"Pouting face\": \"Napu\\u0107enim lice\",\n    \"Crying face\": \"Plakanje lice\",\n    \"Persevering face\": \"Istrajan lice\",\n    \"Face with look of triumph\": \"Lice s pogledom trijumfa\",\n    \"Disappointed but relieved face\": \"Razo\\u010daran, ali olak\\u0161anje lice\",\n    \"Frowning face with open mouth\": \"Namr\\u0161tiv\\u0161i lice s otvorenih usta\",\n    \"Anguished face\": \"Bolnom lice\",\n    \"Fearful face\": \"Pla\\u0161ljiv lice\",\n    \"Weary face\": \"Umoran lice\",\n    \"Sleepy face\": \"Pospan lice\",\n    \"Tired face\": \"Umorno lice\",\n    \"Grimacing face\": \"Grimase lice\",\n    \"Loudly crying face\": \"Glasno pla\\u010de lice\",\n    \"Face with open mouth\": \"Lice s otvorenih usta\",\n    \"Hushed face\": \"Smiren lice\",\n    \"Face with open mouth and cold sweat\": \"Lice s otvorenih usta i hladan znoj\",\n    \"Face screaming in fear\": \"Suo\\u010davaju vri\\u0161ti u strahu\",\n    \"Astonished face\": \"Zapanjen lice\",\n    \"Flushed face\": \"Rumeno lice\",\n    \"Sleeping face\": \"Usnulo lice\",\n    \"Dizzy face\": \"O\\u0161amu\\u0107en lice\",\n    \"Face without mouth\": \"Lice bez usta\",\n    \"Face with medical mask\": \"Lice sa medicinskom maskom\",\n\n    // Line breaker\n    \"Break\": \"Slomiti\",\n\n    // Math\n    \"Subscript\": \"Potpisan\",\n    \"Superscript\": \"Natpis\",\n\n    // Full screen\n    \"Fullscreen\": \"Preko cijelog zaslona\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Umetni vodoravna liniju\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Izbrisati formatiranje\",\n\n    // Save\n    \"Save\": \"Save\",\n\n    // Undo, redo\n    \"Undo\": \"Korak nazad\",\n    \"Redo\": \"Korak naprijed\",\n\n    // Select all\n    \"Select All\": \"Ozna\\u010di sve\",\n\n    // Code view\n    \"Code View\": \"Kod pogled\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Pove\\u0107ati\",\n    \"Decrease\": \"Smanjenje\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Brzo umetni\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Specijalni znakovi\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Grk\",\n    \"Cyrillic\": \"Ćirilica\",\n    \"Punctuation\": \"Interpunkcije\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Strelice\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Odštampaj\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Kontrolor pravopisa\",\n\n    // Help\n    \"Help\": \"Pomoć\",\n    \"Shortcuts\": \"Prečice\",\n    \"Inline Editor\": \"Pri upisivanju Editor\",\n    \"Show the editor\": \"Prikaži urednik\",\n    \"Common actions\": \"Zajedničke akcije\",\n    \"Copy\": \"Kopija\",\n    \"Cut\": \"Rez\",\n    \"Paste\": \"Nalepi\",\n    \"Basic Formatting\": \"Osnovno oblikovanje\",\n    \"Increase quote level\": \"Povećati ponudu za nivo\",\n    \"Decrease quote level\": \"Smanjenje ponude nivo\",\n    \"Image / Video\": \"Slika / Video\",\n    \"Resize larger\": \"Veće veličine\",\n    \"Resize smaller\": \"Promena veličine manji\",\n    \"Table\": \"Sto\",\n    \"Select table cell\": \"Select ćelije\",\n    \"Extend selection one cell\": \"Proširite selekciju jednu ćeliju\",\n    \"Extend selection one row\": \"Proširite selekciju jedan red\",\n    \"Navigation\": \"Navigacija\",\n    \"Focus popup / toolbar\": \"Fokus Iskačući meni / traka sa alatkama\",\n    \"Return focus to previous position\": \"Vratiti fokus na prethodnu poziciju\",\n\n    // Embed.ly\n    \"Embed URL\": \"Ugradite URL\",\n    \"Paste in a URL to embed\": \"Nalepite URL adresu da biste ugradili\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Nalepljeni sadržaj dolazi iz Microsoft Word dokument. Da li želite zadržati u formatu ili počistiti?\",\n    \"Keep\": \"Nastavi\",\n    \"Clean\": \"Oиisti\",\n    \"Word Paste Detected\": \"Word Nalepi otkriven\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/nb.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Norwegian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['nb'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Skriv noe\",\n\n    // Basic formatting\n    \"Bold\": \"Fet\",\n    \"Italic\": \"Kursiv\",\n    \"Underline\": \"Understreket\",\n    \"Strikethrough\": \"Gjennomstreket\",\n\n    // Main buttons\n    \"Insert\": \"Sett\",\n    \"Delete\": \"Slett\",\n    \"Cancel\": \"Avbryt\",\n    \"OK\": \"OK\",\n    \"Back\": \"Tilbake\",\n    \"Remove\": \"Fjern\",\n    \"More\": \"Mer\",\n    \"Update\": \"Oppdatering\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Skriftsnitt\",\n    \"Font Size\": \"St\\u00f8rrelse\",\n\n    // Colors\n    \"Colors\": \"Farger\",\n    \"Background\": \"Bakgrunn\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"Heksefarge\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Stiler\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kode\",\n    \"Heading 1\": \"Overskrift 1\",\n    \"Heading 2\": \"Overskrift 2\",\n    \"Heading 3\": \"Overskrift 3\",\n    \"Heading 4\": \"Overskrift 4\",\n\n    // Style\n    \"Paragraph Style\": \"Avsnittsstil\",\n    \"Inline Style\": \"P\\u00e5 linje stil\",\n\n    // Alignment\n    \"Align\": \"Justering\",\n    \"Align Left\": \"Venstrejustert\",\n    \"Align Center\": \"Midtstilt\",\n    \"Align Right\": \"H\\u00f8yrejustert\",\n    \"Align Justify\": \"Juster alle linjer\",\n    \"None\": \"None\",\n\n    // Lists\n    \"Ordered List\": \"Ordnet liste\",\n    \"Default\": \"Misligholde\",\n    \"Lower Alpha\": \"Lavere alfa\",\n    \"Lower Greek\": \"Lavere greske\",\n    \"Lower Roman\": \"Lavere romersk\",\n    \"Upper Alpha\": \"Øvre alfa\",\n    \"Upper Roman\": \"Øvre roman\",\n\n    \"Unordered List\": \"Uordnet liste\",\n    \"Circle\": \"Sirkel\",\n    \"Disc\": \"Plate\",\n    \"Square\": \"Torget\",\n\n    // Line height\n    \"Line Height\": \"Linjehøyde\",\n    \"Single\": \"Enkelt\",\n    \"Double\": \"Dobbelt\",\n\n    // Indent\n    \"Decrease Indent\": \"Reduser innrykk\",\n    \"Increase Indent\": \"\\u00d8k innrykk\",\n\n    // Links\n    \"Insert Link\": \"Sett inn lenke\",\n    \"Open in new tab\": \"\\u00c5pne i ny fane\",\n    \"Open Link\": \"\\u00c5pne lenke\",\n    \"Edit Link\": \"Rediger lenke\",\n    \"Unlink\": \"Fjern lenke\",\n    \"Choose Link\": \"Velge lenke\",\n\n    // Images\n    \"Insert Image\": \"Sett inn bilde\",\n    \"Upload Image\": \"Last opp bilde\",\n    \"By URL\": \"Ved URL\",\n    \"Browse\": \"Bla\",\n    \"Drop image\": \"Slippe bilde\",\n    \"or click\": \"eller klikk\",\n    \"Manage Images\": \"Bildebehandling\",\n    \"Loading\": \"Lasting\",\n    \"Deleting\": \"Slette\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"Er du sikker? Bildet vil bli slettet.\",\n    \"Replace\": \"Erstatte\",\n    \"Uploading\": \"Opplasting\",\n    \"Loading image\": \"Lasting bilde\",\n    \"Display\": \"Utstilling\",\n    \"Inline\": \"P\\u00e5 linje\",\n    \"Break Text\": \"Brudd tekst\",\n    \"Alternative Text\": \"Alternativ tekst\",\n    \"Change Size\": \"Endre st\\u00f8rrelse\",\n    \"Width\": \"Bredde\",\n    \"Height\": \"H\\u00f8yde\",\n    \"Something went wrong. Please try again.\": \"Noe gikk galt. V\\u00e6r s\\u00e5 snill, pr\\u00f8v p\\u00e5 nytt.\",\n    \"Image Caption\": \"Bilde bildetekst\",\n    \"Advanced Edit\": \"Avansert redigering\",\n\n    // Video\n    \"Insert Video\": \"Sett inn video\",\n    \"Embedded Code\": \"Embedded kode\",\n    \"Paste in a video URL\": \"Lim inn i en video-url\",\n    \"Drop video\": \"Slipp video\",\n    \"Your browser does not support HTML5 video.\": \"Nettleseren din støtter ikke html5 video.\",\n    \"Upload Video\": \"Last opp video\",\n\n    // Tables\n    \"Insert Table\": \"Sett inn tabell\",\n    \"Table Header\": \"Tabell header\",\n    \"Remove Table\": \"Fjern tabell\",\n    \"Table Style\": \"Tabell stil\",\n    \"Horizontal Align\": \"Horisontal justering\",\n    \"Row\": \"Rad\",\n    \"Insert row above\": \"Sett inn rad f\\u00f8r\",\n    \"Insert row below\": \"Sett in rad etter\",\n    \"Delete row\": \"Slett rad\",\n    \"Column\": \"Kolonne\",\n    \"Insert column before\": \"Sett inn kolonne f\\u00f8r\",\n    \"Insert column after\": \"Sett inn kolonne etter\",\n    \"Delete column\": \"Slett kolonne\",\n    \"Cell\": \"Celle\",\n    \"Merge cells\": \"Sl\\u00e5 sammen celler\",\n    \"Horizontal split\": \"Horisontalt delt\",\n    \"Vertical split\": \"Vertikal split\",\n    \"Cell Background\": \"Celle bakgrunn\",\n    \"Vertical Align\": \"Vertikal justering\",\n    \"Top\": \"Topp\",\n    \"Middle\": \"Midten\",\n    \"Bottom\": \"Bunn\",\n    \"Align Top\": \"Justere toppen\",\n    \"Align Middle\": \"Justere midten\",\n    \"Align Bottom\": \"Justere bunnen\",\n    \"Cell Style\": \"Celle stil\",\n\n    // Files\n    \"Upload File\": \"Opplastingsfil\",\n    \"Drop file\": \"Slippe fil\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Flirer ansikt\",\n    \"Grinning face with smiling eyes\": \"Flirer ansikt med smilende \\u00f8yne\",\n    \"Face with tears of joy\": \"Ansikt med t\\u00e5rer av glede\",\n    \"Smiling face with open mouth\": \"Smilende ansikt med \\u00e5pen munn\",\n    \"Smiling face with open mouth and smiling eyes\": \"Smilende ansikt med \\u00e5pen munn og smilende \\u00f8yne\",\n    \"Smiling face with open mouth and cold sweat\": \"Smilende ansikt med \\u00e5pen munn og kald svette\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Smilende ansikt med \\u00e5pen munn og tett lukkede \\u00f8yne\",\n    \"Smiling face with halo\": \"Smilende ansikt med glorie\",\n    \"Smiling face with horns\": \"Smilende ansikt med horn\",\n    \"Winking face\": \"Blunk ansikt\",\n    \"Smiling face with smiling eyes\": \"Smilende ansikt med smilende \\u00f8yne\",\n    \"Face savoring delicious food\": \"M\\u00f8te nyter deilig mat\",\n    \"Relieved face\": \"Lettet ansikt\",\n    \"Smiling face with heart-shaped eyes\": \"Smilende ansikt med hjerteformede \\u00f8yne\",\n    \"Smiling face with sunglasses\": \"Smilende ansikt med solbriller\",\n    \"Smirking face\": \"Tilfreds ansikt\",\n    \"Neutral face\": \"N\\u00f8ytral ansikt\",\n    \"Expressionless face\": \"Uttrykksl\\u00f8st ansikt\",\n    \"Unamused face\": \"Ikke moret ansikt\",\n    \"Face with cold sweat\": \"Ansikt med kald svette\",\n    \"Pensive face\": \"Tankefull ansikt\",\n    \"Confused face\": \"Forvirret ansikt\",\n    \"Confounded face\": \"Skamme ansikt\",\n    \"Kissing face\": \"Kyssing ansikt\",\n    \"Face throwing a kiss\": \"Ansikt kaste et kyss\",\n    \"Kissing face with smiling eyes\": \"Kyssing ansikt med smilende \\u00f8yne\",\n    \"Kissing face with closed eyes\": \"Kyssing ansiktet med lukkede \\u00f8yne\",\n    \"Face with stuck out tongue\": \"Ansikt med stakk ut tungen\",\n    \"Face with stuck out tongue and winking eye\": \"Ansikt med stakk ut tungen og blunke \\u00f8ye\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Ansikt med fast ut tungen og tett lukket \\u00f8yne\",\n    \"Disappointed face\": \"Skuffet ansikt\",\n    \"Worried face\": \"Bekymret ansikt\",\n    \"Angry face\": \"Sint ansikt\",\n    \"Pouting face\": \"Trutmunn ansikt\",\n    \"Crying face\": \"Gr\\u00e5ter ansikt\",\n    \"Persevering face\": \"Utholdende ansikt\",\n    \"Face with look of triumph\": \"Ansikt med utseendet til triumf\",\n    \"Disappointed but relieved face\": \"Skuffet men lettet ansikt\",\n    \"Frowning face with open mouth\": \"Rynke ansikt med \\u00e5pen munn\",\n    \"Anguished face\": \"Forpint ansikt\",\n    \"Fearful face\": \"Engstelig ansikt\",\n    \"Weary face\": \"Slitne ansiktet\",\n    \"Sleepy face\": \"S\\u00f8vnig ansikt\",\n    \"Tired face\": \"Tr\\u00f8tt ansikt\",\n    \"Grimacing face\": \"Griner ansikt\",\n    \"Loudly crying face\": \"H\\u00f8ylytt gr\\u00e5tende ansikt\",\n    \"Face with open mouth\": \"Ansikt med \\u00e5pen munn\",\n    \"Hushed face\": \"Lavm\\u00e6lt ansikt\",\n    \"Face with open mouth and cold sweat\": \"Ansikt med \\u00e5pen munn og kald svette\",\n    \"Face screaming in fear\": \"Ansikt skriker i frykt\",\n    \"Astonished face\": \"Forbauset ansikt\",\n    \"Flushed face\": \"Flushed ansikt\",\n    \"Sleeping face\": \"Sovende ansikt\",\n    \"Dizzy face\": \"Svimmel ansikt\",\n    \"Face without mouth\": \"Ansikt uten munn\",\n    \"Face with medical mask\": \"Ansikt med medisinsk maske\",\n\n    // Line breaker\n    \"Break\": \"Brudd\",\n\n    // Math\n    \"Subscript\": \"Senket skrift\",\n    \"Superscript\": \"Hevet skrift\",\n\n    // Full screen\n    \"Fullscreen\": \"Full skjerm\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Sett inn horisontal linje\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Fjerne formatering\",\n\n    // Save\n    \"Save\": \"Lagre\",\n\n    // Undo, redo\n    \"Undo\": \"Angre\",\n    \"Redo\": \"Utf\\u00f8r likevel\",\n\n    // Select all\n    \"Select All\": \"Marker alt\",\n\n    // Code view\n    \"Code View\": \"Kodevisning\",\n\n    // Quote\n    \"Quote\": \"Sitat\",\n    \"Increase\": \"\\u00d8ke\",\n    \"Decrease\": \"Nedgang\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Hurtiginnsats\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Spesielle karakterer\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Gresk\",\n    \"Cyrillic\": \"Kyrilliske\",\n    \"Punctuation\": \"Tegnsetting\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Piler\",\n    \"Math\": \"Matte\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Skrive ut\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Stavekontroll\",\n\n    // Help\n    \"Help\": \"Hjelp\",\n    \"Shortcuts\": \"Snarveier\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Vis redaktøren\",\n    \"Common actions\": \"Felles handlinger\",\n    \"Copy\": \"Kopiere\",\n    \"Cut\": \"Kutte opp\",\n    \"Paste\": \"Lim inn\",\n    \"Basic Formatting\": \"Grunnleggende formatering\",\n    \"Increase quote level\": \"Øke tilbudsnivået\",\n    \"Decrease quote level\": \"Redusere tilbudsnivå\",\n    \"Image / Video\": \"Bilde / video\",\n    \"Resize larger\": \"Endre størrelsen større\",\n    \"Resize smaller\": \"Endre størrelsen mindre\",\n    \"Table\": \"Bord\",\n    \"Select table cell\": \"Velg tabellcelle\",\n    \"Extend selection one cell\": \"Utvide valg en celle\",\n    \"Extend selection one row\": \"Utvide valg en rad\",\n    \"Navigation\": \"Navigasjon\",\n    \"Focus popup / toolbar\": \"Fokus popup / verktøylinje\",\n    \"Return focus to previous position\": \"Returnere fokus til tidligere posisjon\",\n\n    // Embed.ly\n    \"Embed URL\": \"Legge inn nettadressen\",\n    \"Paste in a URL to embed\": \"Lim inn i en URL for å legge inn\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Det limte innholdet kommer fra et Microsoft Word-dokument. vil du beholde formatet eller rydde det opp?\",\n    \"Keep\": \"Beholde\",\n    \"Clean\": \"Ren\",\n    \"Word Paste Detected\": \"Ordpasta oppdages\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/nl.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Dutch\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['nl'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Typ iets\",\n\n    // Basic formatting\n    \"Bold\": \"Vet\",\n    \"Italic\": \"Cursief\",\n    \"Underline\": \"Onderstreept\",\n    \"Strikethrough\": \"Doorhalen\",\n\n    // Main buttons\n    \"Insert\": \"Invoegen\",\n    \"Delete\": \"Verwijder\",\n    \"Cancel\": \"Annuleren\",\n    \"OK\": \"Ok\\u00e9\",\n    \"Back\": \"Terug\",\n    \"Remove\": \"Verwijderen\",\n    \"More\": \"Meer\",\n    \"Update\": \"Bijwerken\",\n    \"Style\": \"Stijl\",\n\n    // Font\n    \"Font Family\": \"Lettertype\",\n    \"Font Size\": \"Lettergrootte\",\n\n    // Colors\n    \"Colors\": \"Kleuren\",\n    \"Background\": \"Achtergrond\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"HEX kleur\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Opmaak\",\n    \"Normal\": \"Normaal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Kop 1\",\n    \"Heading 2\": \"Kop 2\",\n    \"Heading 3\": \"Kop 3\",\n    \"Heading 4\": \"Kop 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraaf stijl\",\n    \"Inline Style\": \"Inline stijl\",\n\n    // Alignment\n    \"Align\": \"Uitlijnen\",\n    \"Align Left\": \"Links uitlijnen\",\n    \"Align Center\": \"Centreren\",\n    \"Align Right\": \"Rechts uitlijnen\",\n    \"Align Justify\": \"Uitvullen\",\n    \"None\": \"Geen\",\n\n    // Lists\n    \"Ordered List\": \"Geordende lijst\",\n    \"Default\": \"Standaard\",\n    \"Lower Alpha\": \"Lagere alpha\",\n    \"Lower Greek\": \"Lager Grieks\",\n    \"Lower Roman\": \"Lager Romeins\",\n    \"Upper Alpha\": \"Bovenste alfa\",\n    \"Upper Roman\": \"Bovenste roman\",\n\n    \"Unordered List\": \"Ongeordende lijst\",\n    \"Circle\": \"Cirkel\",\n    \"Disc\": \"Schijf\",\n    \"Square\": \"Plein\",\n\n    // Line height\n    \"Line Height\": \"Lijnhoogte\",\n    \"Single\": \"Single\",\n    \"Double\": \"Dubbele\",\n\n    // Indent\n    \"Decrease Indent\": \"Inspringen verkleinen\",\n    \"Increase Indent\": \"Inspringen vergroten\",\n\n    // Links\n    \"Insert Link\": \"Link invoegen\",\n    \"Open in new tab\": \"Openen in nieuwe tab\",\n    \"Open Link\": \"Open link\",\n    \"Edit Link\": \"Link bewerken\",\n    \"Unlink\": \"Link verwijderen\",\n    \"Choose Link\": \"Link kiezen\",\n\n    // Images\n    \"Insert Image\": \"Afbeelding invoegen\",\n    \"Upload Image\": \"Afbeelding uploaden\",\n    \"By URL\": \"Via URL\",\n    \"Browse\": \"Bladeren\",\n    \"Drop image\": \"Sleep afbeelding\",\n    \"or click\": \"of klik op\",\n    \"Manage Images\": \"Afbeeldingen beheren\",\n    \"Loading\": \"Bezig met laden\",\n    \"Deleting\": \"Verwijderen\",\n    \"Tags\": \"Labels\",\n    \"Are you sure? Image will be deleted.\": \"Weet je het zeker? Afbeelding wordt verwijderd.\",\n    \"Replace\": \"Vervangen\",\n    \"Uploading\": \"Uploaden\",\n    \"Loading image\": \"Afbeelding laden\",\n    \"Display\": \"Tonen\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Tekst afbreken\",\n    \"Alternative Text\": \"Alternatieve tekst\",\n    \"Change Size\": \"Grootte wijzigen\",\n    \"Width\": \"Breedte\",\n    \"Height\": \"Hoogte\",\n    \"Something went wrong. Please try again.\": \"Er is iets fout gegaan. Probeer opnieuw.\",\n    \"Image Caption\": \"Afbeelding caption\",\n    \"Advanced Edit\": \"Geavanceerd bewerken\",\n\n    // Video\n    \"Insert Video\": \"Video invoegen\",\n    \"Embedded Code\": \"Ingebedde code\",\n    \"Paste in a video URL\": \"Voeg een video-URL toe\",\n    \"Drop video\": \"Sleep video\",\n    \"Your browser does not support HTML5 video.\": \"Je browser ondersteunt geen html5-video.\",\n    \"Upload Video\": \"Video uploaden\",\n\n    // Tables\n    \"Insert Table\": \"Tabel invoegen\",\n    \"Table Header\": \"Tabel hoofd\",\n    \"Remove Table\": \"Verwijder tabel\",\n    \"Table Style\": \"Tabelstijl\",\n    \"Horizontal Align\": \"Horizontale uitlijning\",\n    \"Row\": \"Rij\",\n    \"Insert row above\": \"Voeg rij boven toe\",\n    \"Insert row below\": \"Voeg rij onder toe\",\n    \"Delete row\": \"Verwijder rij\",\n    \"Column\": \"Kolom\",\n    \"Insert column before\": \"Voeg kolom in voor\",\n    \"Insert column after\": \"Voeg kolom in na\",\n    \"Delete column\": \"Verwijder kolom\",\n    \"Cell\": \"Cel\",\n    \"Merge cells\": \"Cellen samenvoegen\",\n    \"Horizontal split\": \"Horizontaal splitsen\",\n    \"Vertical split\": \"Verticaal splitsen\",\n    \"Cell Background\": \"Cel achtergrond\",\n    \"Vertical Align\": \"Verticale uitlijning\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Midden\",\n    \"Bottom\": \"Onder\",\n    \"Align Top\": \"Uitlijnen top\",\n    \"Align Middle\": \"Uitlijnen midden\",\n    \"Align Bottom\": \"Onder uitlijnen\",\n    \"Cell Style\": \"Celstijl\",\n\n    // Files\n    \"Upload File\": \"Bestand uploaden\",\n    \"Drop file\": \"Sleep bestand\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Grijnzend gezicht\",\n    \"Grinning face with smiling eyes\": \"Grijnzend gezicht met lachende ogen\",\n    \"Face with tears of joy\": \"Gezicht met tranen van vreugde\",\n    \"Smiling face with open mouth\": \"Lachend gezicht met open mond\",\n    \"Smiling face with open mouth and smiling eyes\": \"Lachend gezicht met open mond en lachende ogen\",\n    \"Smiling face with open mouth and cold sweat\": \"Lachend gezicht met open mond en koud zweet\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Lachend gezicht met open mond en strak gesloten ogen\",\n    \"Smiling face with halo\": \"Lachend gezicht met halo\",\n    \"Smiling face with horns\": \"Lachend gezicht met hoorns\",\n    \"Winking face\": \"Knipogend gezicht\",\n    \"Smiling face with smiling eyes\": \"Lachend gezicht met lachende ogen\",\n    \"Face savoring delicious food\": \"Gezicht genietend van heerlijk eten\",\n    \"Relieved face\": \"Opgelucht gezicht\",\n    \"Smiling face with heart-shaped eyes\": \"Glimlachend gezicht met hart-vormige ogen\",\n    \"Smiling face with sunglasses\": \"Lachend gezicht met zonnebril\",\n    \"Smirking face\": \"Grijnzende gezicht\",\n    \"Neutral face\": \"Neutraal gezicht\",\n    \"Expressionless face\": \"Uitdrukkingsloos gezicht\",\n    \"Unamused face\": \"Niet geamuseerd gezicht\",\n    \"Face with cold sweat\": \"Gezicht met koud zweet\",\n    \"Pensive face\": \"Peinzend gezicht\",\n    \"Confused face\": \"Verward gezicht\",\n    \"Confounded face\": \"Beschaamd gezicht\",\n    \"Kissing face\": \"Zoenend gezicht\",\n    \"Face throwing a kiss\": \"Gezicht gooien van een kus\",\n    \"Kissing face with smiling eyes\": \"Zoenend gezicht met lachende ogen\",\n    \"Kissing face with closed eyes\": \"Zoenend gezicht met gesloten ogen\",\n    \"Face with stuck out tongue\": \"Gezicht met uitstekende tong\",\n    \"Face with stuck out tongue and winking eye\": \"Gezicht met uitstekende tong en knipoog\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Gezicht met uitstekende tong en strak-gesloten ogen\",\n    \"Disappointed face\": \"Teleurgesteld gezicht\",\n    \"Worried face\": \"Bezorgd gezicht\",\n    \"Angry face\": \"Boos gezicht\",\n    \"Pouting face\": \"Pruilend gezicht\",\n    \"Crying face\": \"Huilend gezicht\",\n    \"Persevering face\": \"Volhardend gezicht\",\n    \"Face with look of triumph\": \"Gezicht met blik van triomf\",\n    \"Disappointed but relieved face\": \"Teleurgesteld, maar opgelucht gezicht\",\n    \"Frowning face with open mouth\": \"Fronsend gezicht met open mond\",\n    \"Anguished face\": \"Gekweld gezicht\",\n    \"Fearful face\": \"Angstig gezicht\",\n    \"Weary face\": \"Vermoeid gezicht\",\n    \"Sleepy face\": \"Slaperig gezicht\",\n    \"Tired face\": \"Moe gezicht\",\n    \"Grimacing face\": \"Grimassen trekkend gezicht\",\n    \"Loudly crying face\": \"Luid schreeuwend gezicht\",\n    \"Face with open mouth\": \"Gezicht met open mond\",\n    \"Hushed face\": \"Tot zwijgen gebracht gezicht\",\n    \"Face with open mouth and cold sweat\": \"Gezicht met open mond en koud zweet\",\n    \"Face screaming in fear\": \"Gezicht schreeuwend van angst\",\n    \"Astonished face\": \"Verbaasd gezicht\",\n    \"Flushed face\": \"Blozend gezicht\",\n    \"Sleeping face\": \"Slapend gezicht\",\n    \"Dizzy face\": \"Duizelig gezicht\",\n    \"Face without mouth\": \"Gezicht zonder mond\",\n    \"Face with medical mask\": \"Gezicht met medisch masker\",\n\n    // Line breaker\n    \"Break\": \"Afbreken\",\n\n    // Math\n    \"Subscript\": \"Subscript\",\n    \"Superscript\": \"Superscript\",\n\n    // Full screen\n    \"Fullscreen\": \"Volledig scherm\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Horizontale lijn invoegen\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Verwijder opmaak\",\n\n    // Save\n    \"Save\": \"Opslaan\",\n\n    // Undo, redo\n    \"Undo\": \"Ongedaan maken\",\n    \"Redo\": \"Opnieuw\",\n\n    // Select all\n    \"Select All\": \"Alles selecteren\",\n\n    // Code view\n    \"Code View\": \"Codeweergave\",\n\n    // Quote\n    \"Quote\": \"Citaat\",\n    \"Increase\": \"Toenemen\",\n    \"Decrease\": \"Afnemen\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Snel invoegen\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Speciale tekens\",\n    \"Latin\": \"Latijns\",\n    \"Greek\": \"Grieks\",\n    \"Cyrillic\": \"Cyrillisch\",\n    \"Punctuation\": \"Interpunctie\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Pijlen\",\n    \"Math\": \"Wiskunde\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Afdrukken\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Spellingscontrole\",\n\n    // Help\n    \"Help\": \"Hulp\",\n    \"Shortcuts\": \"Snelkoppelingen\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Laat de editor zien\",\n    \"Common actions\": \"Algemene acties\",\n    \"Copy\": \"Kopiëren\",\n    \"Cut\": \"Knippen\",\n    \"Paste\": \"Plakken\",\n    \"Basic Formatting\": \"Basisformattering\",\n    \"Increase quote level\": \"Citaat niveau verhogen\",\n    \"Decrease quote level\": \"Citaatniveau verminderen\",\n    \"Image / Video\": \"Beeld / video\",\n    \"Resize larger\": \"Groter maken\",\n    \"Resize smaller\": \"Kleiner maken\",\n    \"Table\": \"Tabel\",\n    \"Select table cell\": \"Selecteer tabelcel\",\n    \"Extend selection one cell\": \"Selecteer een cel uit\",\n    \"Extend selection one row\": \"Selecteer een rij uit\",\n    \"Navigation\": \"Navigatie\",\n    \"Focus popup / toolbar\": \"Focus pop-up / werkbalk\",\n    \"Return focus to previous position\": \"Focus terug naar vorige positie\",\n\n    // Embed.ly\n    \"Embed URL\": \"Embed url\",\n    \"Paste in a URL to embed\": \"Voer een URL in om toe te voegen\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"De geplakte inhoud komt uit een Microsoft Word-document. wil je het formaat behouden of schoonmaken?\",\n    \"Keep\": \"Opmaak behouden\",\n    \"Clean\": \"Tekst schoonmaken\",\n    \"Word Paste Detected\": \"Word inhoud gedetecteerd\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/pl.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Polish\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['pl'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Wpisz co\\u015b\",\n\n    // Basic formatting\n    \"Bold\": \"Pogrubienie\",\n    \"Italic\": \"Kursywa\",\n    \"Underline\": \"Podkre\\u015blenie\",\n    \"Strikethrough\": \"Przekre\\u015blenie\",\n\n    // Main buttons\n    \"Insert\": \"Wstaw\",\n    \"Delete\": \"Usun\\u0105\\u0107\",\n    \"Cancel\": \"Anuluj\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Plecy\",\n    \"Remove\": \"Usun\\u0105\\u0107\",\n    \"More\": \"Jeszcze\",\n    \"Update\": \"Aktualizacja\",\n    \"Style\": \"Styl\",\n\n    // Font\n    \"Font Family\": \"Kr\\u00f3j czcionki\",\n    \"Font Size\": \"Rozmiar czcionki\",\n\n    // Colors\n    \"Colors\": \"Kolory\",\n    \"Background\": \"T\\u0142o\",\n    \"Text\": \"Tekstu\",\n    \"HEX Color\": \"Sześciokąt\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formaty\",\n    \"Normal\": \"Normalny\",\n    \"Code\": \"Kod \\u017ar\\u00f3d\\u0142owy\",\n    \"Heading 1\": \"Nag\\u0142\\u00f3wek 1\",\n    \"Heading 2\": \"Nag\\u0142\\u00f3wek 2\",\n    \"Heading 3\": \"Nag\\u0142\\u00f3wek 3\",\n    \"Heading 4\": \"Nag\\u0142\\u00f3wek 4\",\n\n    // Style\n    \"Paragraph Style\": \"Styl akapitu\",\n    \"Inline Style\": \"Stylu zgodna\",\n\n    // Alignment\n    \"Align\": \"Wyr\\u00f3wnaj\",\n    \"Align Left\": \"Wyr\\u00f3wnaj do lewej\",\n    \"Align Center\": \"Wyr\\u00f3wnaj do \\u015brodka\",\n    \"Align Right\": \"Wyr\\u00f3wnaj do prawej\",\n    \"Align Justify\": \"Do lewej i prawej\",\n    \"None\": \"\\u017baden\",\n\n    // Lists\n    \"Ordered List\": \"Uporz\\u0105dkowana lista\",\n    \"Default\": \"Domyślna\",\n    \"Lower Alpha\": \"Niższy alfa\",\n    \"Lower Greek\": \"Niższy grecki\",\n    \"Lower Roman\": \"Niższe rzymskie\",\n    \"Upper Alpha\": \"Górna alfa\",\n    \"Upper Roman\": \"Górny rzymski\",\n\n    \"Unordered List\": \"Lista nieuporz\\u0105dkowana\",\n    \"Circle\": \"Okrąg\",\n    \"Disc\": \"Dysk\",\n    \"Square\": \"Plac\",\n\n    // Line height\n    \"Line Height\": \"Wysokość linii\",\n    \"Single\": \"Pojedynczy\",\n    \"Double\": \"Podwójnie\",\n\n    // Indent\n    \"Decrease Indent\": \"Zmniejsz wci\\u0119cie\",\n    \"Increase Indent\": \"Zwi\\u0119ksz wci\\u0119cie\",\n\n    // Links\n    \"Insert Link\": \"Wstaw link\",\n    \"Open in new tab\": \"Otw\\u00f3rz w nowej karcie\",\n    \"Open Link\": \"Otw\\u00f3rz link\",\n    \"Edit Link\": \"Link edytuj\",\n    \"Unlink\": \"Usu\\u0144 link\",\n    \"Choose Link\": \"Wybierz link\",\n\n    // Images\n    \"Insert Image\": \"Wstaw obrazek\",\n    \"Upload Image\": \"Za\\u0142aduj obrazek\",\n    \"By URL\": \"Przez URL\",\n    \"Browse\": \"Przegl\\u0105danie\",\n    \"Drop image\": \"Upu\\u015bci\\u0107 obraz\",\n    \"or click\": \"lub kliknij\",\n    \"Manage Images\": \"Zarz\\u0105dzanie zdj\\u0119ciami\",\n    \"Loading\": \"\\u0141adowanie\",\n    \"Deleting\": \"Usuwanie\",\n    \"Tags\": \"Tagi\",\n    \"Are you sure? Image will be deleted.\": \"Czy na pewno? Obraz zostanie skasowany.\",\n    \"Replace\": \"Zast\\u0105pi\\u0107\",\n    \"Uploading\": \"Zamieszczanie\",\n    \"Loading image\": \"\\u0141adowanie obrazek\",\n    \"Display\": \"Wystawa\",\n    \"Inline\": \"Zgodna\",\n    \"Break Text\": \"Z\\u0142ama\\u0107 tekst\",\n    \"Alternative Text\": \"Tekst alternatywny\",\n    \"Change Size\": \"Zmie\\u0144 rozmiar\",\n    \"Width\": \"Szeroko\\u015b\\u0107\",\n    \"Height\": \"Wysoko\\u015b\\u0107\",\n    \"Something went wrong. Please try again.\": \"Co\\u015b posz\\u0142o nie tak. Prosz\\u0119 spr\\u00f3buj ponownie.\",\n    \"Image Caption\": \"Podpis obrazu\",\n    \"Advanced Edit\": \"Zaawansowana edycja\",\n\n    // Video\n    \"Insert Video\": \"Wstaw wideo\",\n    \"Embedded Code\": \"Kod osadzone\",\n    \"Paste in a video URL\": \"Wklej adres URL filmu\",\n    \"Drop video\": \"Upuść wideo\",\n    \"Your browser does not support HTML5 video.\": \"Twoja przeglądarka nie obsługuje wideo html5.\",\n    \"Upload Video\": \"Prześlij wideo\",\n\n    // Tables\n    \"Insert Table\": \"Wstaw tabel\\u0119\",\n    \"Table Header\": \"Nag\\u0142\\u00f3wek tabeli\",\n    \"Remove Table\": \"Usu\\u0144 tabel\\u0119\",\n    \"Table Style\": \"Styl tabeli\",\n    \"Horizontal Align\": \"Wyr\\u00f3wnaj poziomy\",\n    \"Row\": \"Wiersz\",\n    \"Insert row above\": \"Wstaw wiersz przed\",\n    \"Insert row below\": \"Wstaw wiersz po\",\n    \"Delete row\": \"Usu\\u0144 wiersz\",\n    \"Column\": \"Kolumna\",\n    \"Insert column before\": \"Wstaw kolumn\\u0119 przed\",\n    \"Insert column after\": \"Wstaw kolumn\\u0119 po\",\n    \"Delete column\": \"Usu\\u0144 kolumn\\u0119\",\n    \"Cell\": \"Kom\\u00f3rka\",\n    \"Merge cells\": \"\\u0141\\u0105cz kom\\u00f3rki\",\n    \"Horizontal split\": \"Podzia\\u0142 poziomy\",\n    \"Vertical split\": \"Podzia\\u0142 pionowy\",\n    \"Cell Background\": \"T\\u0142a kom\\u00f3rek\",\n    \"Vertical Align\": \"Pionowe wyr\\u00f3wnanie\",\n    \"Top\": \"Top\",\n    \"Middle\": \"\\u015arodkowy\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Wyr\\u00f3wnaj do g\\u00f3ry\",\n    \"Align Middle\": \"Wyr\\u00f3wnaj \\u015brodku\",\n    \"Align Bottom\": \"Wyr\\u00f3wnaj do do\\u0142u\",\n    \"Cell Style\": \"Styl kom\\u00f3rki\",\n\n    // Files\n    \"Upload File\": \"Prze\\u015blij plik\",\n    \"Drop file\": \"Upu\\u015bci\\u0107 plik\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikony\",\n    \"Grinning face\": \"Z u\\u015bmiechem twarz\",\n    \"Grinning face with smiling eyes\": \"Z u\\u015bmiechem twarz z u\\u015bmiechni\\u0119tymi oczami\",\n    \"Face with tears of joy\": \"Twarz ze \\u0142zami rado\\u015bci\",\n    \"Smiling face with open mouth\": \"U\\u015bmiechni\\u0119ta twarz z otwartymi ustami\",\n    \"Smiling face with open mouth and smiling eyes\": \"U\\u015bmiechni\\u0119ta twarz z otwartymi ustami i u\\u015bmiechni\\u0119te oczy\",\n    \"Smiling face with open mouth and cold sweat\": \"U\\u015bmiechni\\u0119ta twarz z otwartymi ustami i zimny pot\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"U\\u015bmiechni\\u0119ta twarz z otwartymi ustami i szczelnie zamkni\\u0119tych oczu\",\n    \"Smiling face with halo\": \"U\\u015bmiechni\\u0119ta twarz z halo\",\n    \"Smiling face with horns\": \"U\\u015bmiechni\\u0119ta twarz z rogami\",\n    \"Winking face\": \"Mrugaj\\u0105ca twarz\",\n    \"Smiling face with smiling eyes\": \"U\\u015bmiechni\\u0119ta twarz z u\\u015bmiechni\\u0119tymi oczami\",\n    \"Face savoring delicious food\": \"Twarz smakuj\\u0105 c pyszne jedzenie\",\n    \"Relieved face\": \"Z ulg\\u0105  twarz\",\n    \"Smiling face with heart-shaped eyes\": \"U\\u015bmiechni\\u0119ta twarz z oczami w kszta\\u0142cie serca\",\n    \"Smiling face with sunglasses\": \"U\\u015bmiechni\\u0119ta twarz z okulary\",\n    \"Smirking face\": \"Zadowolony z siebie twarz\",\n    \"Neutral face\": \"Neutralny twarzy\",\n    \"Expressionless face\": \"Bezwyrazowy twarzy\",\n    \"Unamused face\": \"Nie rozbawiony twarzy\",\n    \"Face with cold sweat\": \"Zimny pot z twarzy\",\n    \"Pensive face\": \"Zamy\\u015blona twarz\",\n    \"Confused face\": \"Myli\\u0107 twarzy\",\n    \"Confounded face\": \"Ha\\u0144ba twarz\",\n    \"Kissing face\": \"Ca\\u0142owanie twarz\",\n    \"Face throwing a kiss\": \"Twarz rzucaj\\u0105c poca\\u0142unek\",\n    \"Kissing face with smiling eyes\": \"Ca\\u0142owanie twarz z u\\u015bmiechni\\u0119tymi oczami\",\n    \"Kissing face with closed eyes\": \"Ca\\u0142owanie twarz z zamkni\\u0119tymi oczami\",\n    \"Face with stuck out tongue\": \"Twarz z j\\u0119zyka stercza\\u0142y\",\n    \"Face with stuck out tongue and winking eye\": \"Twarz z stercza\\u0142y j\\u0119zyka i mrugaj\\u0105c okiem\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Twarz z stercza\\u0142y j\\u0119zyka i szczelnie zamkni\\u0119tych oczu\",\n    \"Disappointed face\": \"Rozczarowany twarzy\",\n    \"Worried face\": \"Martwi twarzy\",\n    \"Angry face\": \"Gniewnych twarzy\",\n    \"Pouting face\": \"D\\u0105sy twarzy\",\n    \"Crying face\": \"P\\u0142acz\\u0105cy\",\n    \"Persevering face\": \"Wytrwa\\u0142a twarz\",\n    \"Face with look of triumph\": \"Twarz z wyrazem triumfu\",\n    \"Disappointed but relieved face\": \"Rozczarowany ale ulg\\u0119 twarz\",\n    \"Frowning face with open mouth\": \"Krzywi\\u0105c twarz z otwartymi ustami\",\n    \"Anguished face\": \"Bolesna twarz\",\n    \"Fearful face\": \"W obawie twarzy\",\n    \"Weary face\": \"Zm\\u0119czona twarz\",\n    \"Sleepy face\": \"Je\\u017adziec bez twarzy\",\n    \"Tired face\": \"Zm\\u0119czonej twarzy\",\n    \"Grimacing face\": \"Skrzywi\\u0142 twarz\",\n    \"Loudly crying face\": \"G\\u0142o\\u015bno p\\u0142aka\\u0107 twarz\",\n    \"Face with open mouth\": \"twarz z otwartymi ustami\",\n    \"Hushed face\": \"Uciszy\\u0142 twarzy\",\n    \"Face with open mouth and cold sweat\": \"Twarz z otwartymi ustami i zimny pot\",\n    \"Face screaming in fear\": \"Twarz z krzykiem w strachu\",\n    \"Astonished face\": \"Zdziwienie twarzy\",\n    \"Flushed face\": \"Zaczerwienienie twarzy\",\n    \"Sleeping face\": \"\\u015api\\u0105ca twarz\",\n    \"Dizzy face\": \"Zawroty g\\u0142owy twarzy\",\n    \"Face without mouth\": \"Twarz bez usta\",\n    \"Face with medical mask\": \"Twarz\\u0105 w medycznych maski\",\n\n    // Line breaker\n    \"Break\": \"Z\\u0142ama\\u0107\",\n\n    // Math\n    \"Subscript\": \"Indeks dolny\",\n    \"Superscript\": \"Indeks g\\u00f3rny\",\n\n    // Full screen\n    \"Fullscreen\": \"Pe\\u0142ny ekran\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Wstaw lini\\u0119 poziom\\u0105\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Usu\\u0144 formatowanie\",\n\n    // Save\n    \"Save\": \"\\u005a\\u0061\\u0070\\u0069\\u0073\\u0061\\u0107\",\n\n    // Undo, redo\n    \"Undo\": \"Cofnij\",\n    \"Redo\": \"Pon\\u00f3w\",\n\n    // Select all\n    \"Select All\": \"Zaznacz wszystko\",\n\n    // Code view\n    \"Code View\": \"Widok kod\",\n\n    // Quote\n    \"Quote\": \"Cytat\",\n    \"Increase\": \"Wzrost\",\n    \"Decrease\": \"Zmniejszenie\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Szybkie wstaw\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Znaki specjalne\",\n    \"Latin\": \"Łacina\",\n    \"Greek\": \"Grecki\",\n    \"Cyrillic\": \"Cyrylica\",\n    \"Punctuation\": \"Interpunkcja\",\n    \"Currency\": \"Waluta\",\n    \"Arrows\": \"Strzałki\",\n    \"Math\": \"Matematyka\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Wydrukować\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Sprawdzanie pisowni\",\n\n    // Help\n    \"Help\": \"Wsparcie\",\n    \"Shortcuts\": \"Skróty\",\n    \"Inline Editor\": \"Edytor w wierszu\",\n    \"Show the editor\": \"Pokazać edytor\",\n    \"Common actions\": \"Wspólne działania\",\n    \"Copy\": \"Kopiuj\",\n    \"Cut\": \"Ciąć\",\n    \"Paste\": \"Pasta\",\n    \"Basic Formatting\": \"Podstawowe formatowanie\",\n    \"Increase quote level\": \"Zwiększyć poziom notowań\",\n    \"Decrease quote level\": \"Zmniejszyć poziom notowań\",\n    \"Image / Video\": \"Obraz / wideo\",\n    \"Resize larger\": \"Zmienić rozmiar większy\",\n    \"Resize smaller\": \"Zmienić rozmiar mniejszy\",\n    \"Table\": \"Stół\",\n    \"Select table cell\": \"Wybierz komórkę tabeli\",\n    \"Extend selection one cell\": \"Przedłużyć wybór jednej komórki\",\n    \"Extend selection one row\": \"Przedłużyć wybór jednego rzędu\",\n    \"Navigation\": \"Nawigacja\",\n    \"Focus popup / toolbar\": \"Focus popup / toolbar\",\n    \"Return focus to previous position\": \"Powrót do poprzedniej pozycji\",\n\n    // Embed.ly\n    \"Embed URL\": \"Osadzaj url\",\n    \"Paste in a URL to embed\": \"Wklej w adresie URL do osadzenia\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Wklejana treść pochodzi z programu Microsoft Word. Czy chcesz zachować formatowanie czy wkleić jako zwykły tekst?\",\n    \"Keep\": \"Zachowaj formatowanie\",\n    \"Clean\": \"Wklej jako tekst\",\n    \"Word Paste Detected\": \"Wykryto sformatowany tekst\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/pt_br.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Portuguese spoken in Brazil\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['pt_br'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Digite algo\",\n\n    // Basic formatting\n    \"Bold\": \"Negrito\",\n    \"Italic\": \"Itálito\",\n    \"Underline\": \"Sublinhar\",\n    \"Strikethrough\": \"Tachado\",\n\n    // Main buttons\n    \"Insert\": \"Inserir\",\n    \"Delete\": \"Apagar\",\n    \"Cancel\": \"Cancelar\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Voltar\",\n    \"Remove\": \"Remover\",\n    \"More\": \"Mais\",\n    \"Update\": \"Atualizar\",\n    \"Style\": \"Estilo\",\n\n    // Font\n    \"Font Family\": \"Fonte\",\n    \"Font Size\": \"Tamanho\",\n\n    // Colors\n    \"Colors\": \"Cores\",\n    \"Background\": \"Fundo\",\n    \"Text\": \"Texto\",\n    \"HEX Color\": \"Cor hexadecimal\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formatos\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Código\",\n    \"Heading 1\": \"Cabeçalho 1\",\n    \"Heading 2\": \"Cabeçalho 2\",\n    \"Heading 3\": \"Cabeçalho 3\",\n    \"Heading 4\": \"Cabeçalho 4\",\n\n    // Style\n    \"Paragraph Style\": \"Estilo de parágrafo\",\n    \"Inline Style\": \"Estilo embutido\",\n\n    // Alignment\n    \"Align\": \"Alinhar\",\n    \"Align Left\": \"Alinhar à esquerda\",\n    \"Align Center\": \"Centralizar\",\n    \"Align Right\": \"Alinhar à direita\",\n    \"Align Justify\": \"Justificar\",\n    \"None\": \"Nenhum\",\n\n    // Lists\n    \"Ordered List\": \"Lista ordenada\",\n    \"Default\": \"Padrão\",\n    \"Lower Alpha\": \"Alpha inferior\",\n    \"Lower Greek\": \"Grego inferior\",\n    \"Lower Roman\": \"Baixa romana\",\n    \"Upper Alpha\": \"Alfa superior\",\n    \"Upper Roman\": \"Romana superior\",\n\n    \"Unordered List\": \"Lista não ordenada\",\n    \"Circle\": \"Círculo\",\n    \"Disc\": \"Disco\",\n    \"Square\": \"Quadrado\",\n\n    // Line height\n    \"Line Height\": \"Altura da linha\",\n    \"Single\": \"Solteiro\",\n    \"Double\": \"Em dobro\",\n\n    // Indent\n    \"Decrease Indent\": \"Diminuir recuo\",\n    \"Increase Indent\": \"Aumentar recuo\",\n\n    // Links\n    \"Insert Link\": \"Inserir link\",\n    \"Open in new tab\": \"Abrir em uma nova aba\",\n    \"Open Link\": \"Abrir link\",\n    \"Edit Link\": \"Editar link\",\n    \"Unlink\": \"Remover link\",\n    \"Choose Link\": \"Escolha o link\",\n\n    // Images\n    \"Insert Image\": \"Inserir imagem\",\n    \"Upload Image\": \"Carregar imagem\",\n    \"By URL\": \"Por um endereço URL\",\n    \"Browse\": \"Procurar\",\n    \"Drop image\": \"Arraste sua imagem aqui\",\n    \"or click\": \"ou clique aqui\",\n    \"Manage Images\": \"Gerenciar imagens\",\n    \"Loading\": \"Carregando\",\n    \"Deleting\": \"Excluindo\",\n    \"Tags\": \"Etiquetas\",\n    \"Are you sure? Image will be deleted.\": \"Você tem certeza? A imagem será apagada.\",\n    \"Replace\": \"Substituir\",\n    \"Uploading\": \"Carregando imagem\",\n    \"Loading image\": \"Carregando imagem\",\n    \"Display\": \"Exibir\",\n    \"Inline\": \"Em linha\",\n    \"Break Text\": \"Texto de quebra\",\n    \"Alternate Text\": \"Texto alternativo\",\n    \"Change Size\": \"Alterar tamanho\",\n    \"Width\": \"Largura\",\n    \"Height\": \"Altura\",\n    \"Something went wrong. Please try again.\": \"Algo deu errado. Por favor, tente novamente.\",\n    \"Image Caption\": \"Legenda da imagem\",\n    \"Advanced Edit\": \"Edição avançada\",\n\n    // Video\n    \"Insert Video\": \"Inserir vídeo\",\n    \"Embedded Code\": \"Código embutido\",\n    \"Paste in a video URL\": \"Colar um endereço de vídeo\",\n    \"Drop video\": \"Solte o vídeo\",\n    \"Your browser does not support HTML5 vídeo.\": \"Seu navegador não suporta vídeo em HTML5.\",\n    \"Upload Video\": \"Carregar vídeo\",\n\n    // Tables\n    \"Insert Table\": \"Inserir tabela\",\n    \"Table Header\": \"Cabeçalho da tabela\",\n    \"Remove Table\": \"Remover tabela\",\n    \"Table Style\": \"Estilo de tabela\",\n    \"Horizontal Align\": \"Alinhamento horizontal\",\n    \"Row\": \"Linha\",\n    \"Insert row above\": \"Inserir linha antes\",\n    \"Insert row below\": \"Inserir linha depois\",\n    \"Delete row\": \"Excluir linha\",\n    \"Column\": \"Coluna\",\n    \"Insert column before\": \"Inserir coluna antes\",\n    \"Insert column after\": \"Inserir coluna depois\",\n    \"Delete column\": \"Excluir coluna\",\n    \"Cell\": \"Célula\",\n    \"Merge cells\": \"Agrupar células\",\n    \"Horizontal split\": \"Divisão horizontal\",\n    \"Vertical split\": \"Divisão vertical\",\n    \"Cell Background\": \"Fundo da célula\",\n    \"Vertical Align\": \"Alinhamento vertical\",\n    \"Top\": \"Topo\",\n    \"Middle\": \"Meio\",\n    \"Bottom\": \"Fundo\",\n    \"Align Top\": \"Alinhar topo\",\n    \"Align Middle\": \"Alinhar meio\",\n    \"Align Bottom\": \"Alinhar fundo\",\n    \"Cell Style\": \"Estilo de célula\",\n\n    // Files\n    \"Upload File\": \"Carregar arquivo\",\n    \"Drop file\": \"Arraste seu arquivo aqui\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Rosto sorrindo\",\n    \"Grinning face with smiling eyes\": \"Rosto sorrindo rosto com olhos sorridentes\",\n    \"Face with tears of joy\": \"Rosto com lágrimas de alegria\",\n    \"Smiling face with open mouth\": \"Rosto sorrindo com a boca aberta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Rosto sorrindo com a boca aberta e olhos sorridentes\",\n    \"Smiling face with open mouth and cold sweat\": \"Rosto sorrindo com a boca aberta e suor frio\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Rosto sorrindo com a boca aberta e os olhos bem fechados\",\n    \"Smiling face with halo\": \"Rosto sorrindo com aréola\",\n    \"Smiling face with horns\": \"Rosto sorrindo com chifres\",\n    \"Winking face\": \"Rosto piscando\",\n    \"Smiling face with smiling eyes\": \"Rosto sorrindo com olhos sorridentes\",\n    \"Face savoring delicious food\": \"Rosto saboreando uma deliciosa comida\",\n    \"Relieved face\": \"Rosto aliviado\",\n    \"Smiling face with heart-shaped eyes\": \"Rosto sorrindo com os olhos em forma de coração\",\n    \"Smiling face with sunglasses\": \"Rosto sorrindo com óculos de sol\",\n    \"Smirking face\": \"Rosto sorridente\",\n    \"Neutral face\": \"Rosto neutro\",\n    \"Expressionless face\": \"Rosto inexpressivo\",\n    \"Unamused face\": \"Rosto sem expressão\",\n    \"Face with cold sweat\": \"Rosto com suor frio\",\n    \"Pensive face\": \"Rosto pensativo\",\n    \"Confused face\": \"Rosto confuso\",\n    \"Confounded face\": \"Rosto atônito\",\n    \"Kissing face\": \"Rosto beijando\",\n    \"Face throwing a kiss\": \"Rosto jogando um beijo\",\n    \"Kissing face with smiling eyes\": \"Rosto beijando com olhos sorridentes\",\n    \"Kissing face with closed eyes\": \"Rosto beijando com os olhos fechados\",\n    \"Face with stuck out tongue\": \"Rosto com a língua para fora\",\n    \"Face with stuck out tongue and winking eye\": \"Rosto com a língua para fora e um olho piscando\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Rosto com a língua para fora e os olhos bem fechados\",\n    \"Disappointed face\": \"Rosto decepcionado\",\n    \"Worried face\": \"Rosto preocupado\",\n    \"Angry face\": \"Rosto irritado\",\n    \"Pouting face\": \"Rosto com beicinho\",\n    \"Crying face\": \"Rosto chorando\",\n    \"Persevering face\": \"Rosto perseverante\",\n    \"Face with look of triumph\": \"Rosto com olhar de triunfo\",\n    \"Disappointed but relieved face\": \"Rosto decepcionado mas aliviado\",\n    \"Frowning face with open mouth\": \"Rosto franzido com a boca aberta\",\n    \"Anguished face\": \"Rosto angustiado\",\n    \"Fearful face\": \"Rosto com medo\",\n    \"Weary face\": \"Rosto cansado\",\n    \"Sleepy face\": \"Rosto com sono\",\n    \"Tired face\": \"Rosto cansado\",\n    \"Grimacing face\": \"Rosto fazendo careta\",\n    \"Loudly crying face\": \"Rosto chorando alto\",\n    \"Face with open mouth\": \"Rosto com a boca aberta\",\n    \"Hushed face\": \"Rosto silencioso\",\n    \"Face with open mouth and cold sweat\": \"Rosto com a boca aferta e suando frio\",\n    \"Face screaming in fear\": \"Rosto gritando de medo\",\n    \"Astonished face\": \"Rosto surpreso\",\n    \"Flushed face\": \"Rosto envergonhado\",\n    \"Sleeping face\": \"Rosto dormindo\",\n    \"Dizzy face\": \"Rosto tonto\",\n    \"Face without mouth\": \"Rosto sem boca\",\n    \"Face with medical mask\": \"Rosto com máscara médica\",\n\n    // Line breaker\n    \"Break\": \"Quebrar linha\",\n\n    // Math\n    \"Subscript\": \"Subscrito\",\n    \"Superscript\": \"Sobrescrito\",\n\n    // Full screen\n    \"Fullscreen\": \"Tela cheia\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Inserir linha horizontal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Remover formatação\",\n\n    // Save\n    \"Save\": \"\\u0053\\u0061\\u006c\\u0076\\u0065\",\n\n    // Undo, redo\n    \"Undo\": \"Desfazer\",\n    \"Redo\": \"Refazer\",\n\n    // Select all\n    \"Select All\": \"Selecionar tudo\",\n\n    // Code view\n    \"Code View\": \"Exibir de código\",\n\n    // Quote\n    \"Quote\": \"Citação\",\n    \"Increase\": \"Aumentar\",\n    \"Decrease\": \"Diminuir\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inserção rápida\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caracteres especiais\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Grego\",\n    \"Cyrillic\": \"Cirílico\",\n    \"Punctuation\": \"Pontuação\",\n    \"Currency\": \"Moeda\",\n    \"Arrows\": \"Setas\",\n    \"Math\": \"Matemática\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Impressão\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Corretor ortográfico\",\n\n    // Help\n    \"Help\": \"Ajuda\",\n    \"Shortcuts\": \"Atalhos\",\n    \"Inline Editor\": \"Editor em linha\",\n    \"Show the editor\": \"Mostre o editor\",\n    \"Common actions\": \"Ações comuns\",\n    \"Copy\": \"Cópia de\",\n    \"Cut\": \"Cortar\",\n    \"Paste\": \"Colar\",\n    \"Basic Formatting\": \"Formatação básica\",\n    \"Increase quote level\": \"Aumentar o nível de cotação\",\n    \"Decrease quote level\": \"Diminuir o nível de cotação\",\n    \"Image / Video\": \"Imagem / Vídeo\",\n    \"Resize larger\": \"Redimensionar maior\",\n    \"Resize smaller\": \"Redimensionar menor\",\n    \"Table\": \"Tabela\",\n    \"Select table cell\": \"Selecione a célula da tabela\",\n    \"Extend selection one cell\": \"Ampliar a seleção de uma célula\",\n    \"Extend selection one row\": \"Ampliar a seleção de uma linha\",\n    \"Navigation\": \"Navegação\",\n    \"Focus popup / toolbar\": \"Pop-up de foco / Barra de ferramentas\",\n    \"Return focus to previous position\": \"Retornar o foco para a posição anterior\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL de inserção\",\n    \"Paste in a URL to embed\": \"Colar um endereço URL para incorporar\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"O conteúdo colado vem de um documento Microsoft Word. Você quer manter o formato ou limpá-lo?\",\n    \"Keep\": \"Manter formatação\",\n    \"Clean\": \"Limpar formatação\",\n    \"Word Paste Detected\": \"Texto do Word detectado\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/pt_pt.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Portuguese spoken in Portugal\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['pt_pt'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Digite algo\",\n\n    // Basic formatting\n    \"Bold\": \"Negrito\",\n    \"Italic\": \"It\\u00e1lico\",\n    \"Underline\": \"Sublinhado\",\n    \"Strikethrough\": \"Rasurado\",\n\n    // Main buttons\n    \"Insert\": \"Inserir\",\n    \"Delete\": \"Apagar\",\n    \"Cancel\": \"Cancelar\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Voltar\",\n    \"Remove\": \"Remover\",\n    \"More\": \"Mais\",\n    \"Update\": \"Atualizar\",\n    \"Style\": \"Estilo\",\n\n    // Font\n    \"Font Family\": \"Fonte\",\n    \"Font Size\": \"Tamanho da fonte\",\n\n    // Colors\n    \"Colors\": \"Cores\",\n    \"Background\": \"Fundo\",\n    \"Text\": \"Texto\",\n    \"HEX Color\": \"Cor hexadecimal\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Formatos\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"C\\u00f3digo\",\n    \"Heading 1\": \"Cabe\\u00e7alho 1\",\n    \"Heading 2\": \"Cabe\\u00e7alho 2\",\n    \"Heading 3\": \"Cabe\\u00e7alho 3\",\n    \"Heading 4\": \"Cabe\\u00e7alho 4\",\n\n    // Style\n    \"Paragraph Style\": \"Estilo de par\\u00e1grafo\",\n    \"Inline Style\": \"Estilo embutido\",\n\n    // Alignment\n    \"Align\": \"Alinhar\",\n    \"Align Left\": \"Alinhar \\u00e0 esquerda\",\n    \"Align Center\": \"Alinhar ao centro\",\n    \"Align Right\": \"Alinhar \\u00e0 direita\",\n    \"Align Justify\": \"Justificado\",\n    \"None\": \"Nenhum\",\n\n    // Lists\n    \"Ordered List\": \"Lista ordenada\",\n    \"Default\": \"Padrão\",\n    \"Lower Alpha\": \"Alpha inferior\",\n    \"Lower Greek\": \"Grego inferior\",\n    \"Lower Roman\": \"Baixa romana\",\n    \"Upper Alpha\": \"Alfa superior\",\n    \"Upper Roman\": \"Romana superior\",\n\n    \"Unordered List\": \"Lista n\\u00e3o ordenada\",\n    \"Circle\": \"Círculo\",\n    \"Disc\": \"Disco\",\n    \"Square\": \"Quadrado\",\n\n    // Line height\n    \"Line Height\": \"Altura da linha\",\n    \"Single\": \"Solteiro\",\n    \"Double\": \"Em dobro\",\n\n    // Indent\n    \"Decrease Indent\": \"Diminuir avan\\u00e7o\",\n    \"Increase Indent\": \"Aumentar avan\\u00e7o\",\n\n    // Links\n    \"Insert Link\": \"Inserir link\",\n    \"Open in new tab\": \"Abrir em uma nova aba\",\n    \"Open Link\": \"Abrir link\",\n    \"Edit Link\": \"Editar link\",\n    \"Unlink\": \"Remover link\",\n    \"Choose Link\": \"Escolha o link\",\n\n    // Images\n    \"Insert Image\": \"Inserir imagem\",\n    \"Upload Image\": \"Carregar imagem\",\n    \"By URL\": \"Por URL\",\n    \"Browse\": \"Procurar\",\n    \"Drop image\": \"Largue imagem\",\n    \"or click\": \"ou clique em\",\n    \"Manage Images\": \"Gerenciar as imagens\",\n    \"Loading\": \"Carregando\",\n    \"Deleting\": \"Excluindo\",\n    \"Tags\": \"Etiquetas\",\n    \"Are you sure? Image will be deleted.\": \"Voc\\u00ea tem certeza? Imagem ser\\u00e1 apagada.\",\n    \"Replace\": \"Substituir\",\n    \"Uploading\": \"Carregando imagem\",\n    \"Loading image\": \"Carregando imagem\",\n    \"Display\": \"Exibir\",\n    \"Inline\": \"Em linha\",\n    \"Break Text\": \"Texto de quebra\",\n    \"Alternative Text\": \"Texto alternativo\",\n    \"Change Size\": \"Alterar tamanho\",\n    \"Width\": \"Largura\",\n    \"Height\": \"Altura\",\n    \"Something went wrong. Please try again.\": \"Algo deu errado. Por favor, tente novamente.\",\n    \"Image Caption\": \"Legenda da imagem\",\n    \"Advanced Edit\": \"Edição avançada\",\n\n    // Video\n    \"Insert Video\": \"Inserir v\\u00eddeo\",\n    \"Embedded Code\": \"C\\u00f3digo embutido\",\n    \"Paste in a video URL\": \"Colar em um URL de vídeo\",\n    \"Drop video\": \"Solte o video\",\n    \"Your browser does not support HTML5 video.\": \"Seu navegador não suporta o vídeo html5.\",\n    \"Upload Video\": \"Envio vídeo\",\n\n    // Tables\n    \"Insert Table\": \"Inserir tabela\",\n    \"Table Header\": \"Cabe\\u00e7alho da tabela\",\n    \"Remove Table\": \"Remover tabela\",\n    \"Table Style\": \"estilo de tabela\",\n    \"Horizontal Align\": \"Alinhamento horizontal\",\n    \"Row\": \"Linha\",\n    \"Insert row above\": \"Inserir linha antes\",\n    \"Insert row below\": \"Inserir linha depois\",\n    \"Delete row\": \"Eliminar linha\",\n    \"Column\": \"Coluna\",\n    \"Insert column before\": \"Inserir coluna antes\",\n    \"Insert column after\": \"Inserir coluna depois\",\n    \"Delete column\": \"Eliminar coluna\",\n    \"Cell\": \"C\\u00e9lula\",\n    \"Merge cells\": \"Unir c\\u00e9lulas\",\n    \"Horizontal split\": \"Divis\\u00e3o horizontal\",\n    \"Vertical split\": \"Divis\\u00e3o vertical\",\n    \"Cell Background\": \"Fundo da c\\u00e9lula\",\n    \"Vertical Align\": \"Alinhar vertical\",\n    \"Top\": \"Topo\",\n    \"Middle\": \"Meio\",\n    \"Bottom\": \"Fundo\",\n    \"Align Top\": \"Alinhar topo\",\n    \"Align Middle\": \"Alinhar meio\",\n    \"Align Bottom\": \"Alinhar fundo\",\n    \"Cell Style\": \"Estilo de c\\u00e9lula\",\n\n    // Files\n    \"Upload File\": \"Upload de arquivo\",\n    \"Drop file\": \"Largar arquivo\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticons\",\n    \"Grinning face\": \"Sorrindo a cara\",\n    \"Grinning face with smiling eyes\": \"Sorrindo rosto com olhos sorridentes\",\n    \"Face with tears of joy\": \"Rosto com l\\u00e1grimas de alegria\",\n    \"Smiling face with open mouth\": \"Rosto de sorriso com a boca aberta\",\n    \"Smiling face with open mouth and smiling eyes\": \"Rosto de sorriso com a boca aberta e olhos sorridentes\",\n    \"Smiling face with open mouth and cold sweat\": \"Rosto de sorriso com a boca aberta e suor frio\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Rosto de sorriso com a boca aberta e os olhos bem fechados\",\n    \"Smiling face with halo\": \"Rosto de sorriso com halo\",\n    \"Smiling face with horns\": \"Rosto de sorriso com chifres\",\n    \"Winking face\": \"Pisc a rosto\",\n    \"Smiling face with smiling eyes\": \"Rosto de sorriso com olhos sorridentes\",\n    \"Face savoring delicious food\": \"Rosto saboreando uma deliciosa comida\",\n    \"Relieved face\": \"Rosto aliviado\",\n    \"Smiling face with heart-shaped eyes\": \"Rosto de sorriso com os olhos em forma de cora\\u00e7\\u00e3o\",\n    \"Smiling face with sunglasses\": \"Rosto de sorriso com \\u00f3culos de sol\",\n    \"Smirking face\": \"Rosto sorridente\",\n    \"Neutral face\": \"Rosto neutra\",\n    \"Expressionless face\": \"Rosto inexpressivo\",\n    \"Unamused face\": \"O rosto n\\u00e3o divertido\",\n    \"Face with cold sweat\": \"Rosto com suor frio\",\n    \"Pensive face\": \"O rosto pensativo\",\n    \"Confused face\": \"Cara confusa\",\n    \"Confounded face\": \"Rosto at\\u00f4nito\",\n    \"Kissing face\": \"Beijar Rosto\",\n    \"Face throwing a kiss\": \"Rosto jogando um beijo\",\n    \"Kissing face with smiling eyes\": \"Beijar rosto com olhos sorridentes\",\n    \"Kissing face with closed eyes\": \"Beijando a cara com os olhos fechados\",\n    \"Face with stuck out tongue\": \"Preso de cara com a l\\u00edngua para fora\",\n    \"Face with stuck out tongue and winking eye\": \"Rosto com estendeu a l\\u00edngua e olho piscando\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Rosto com estendeu a língua e os olhos bem fechados\",\n    \"Disappointed face\": \"Rosto decepcionado\",\n    \"Worried face\": \"O rosto preocupado\",\n    \"Angry face\": \"Rosto irritado\",\n    \"Pouting face\": \"Beicinho Rosto\",\n    \"Crying face\": \"Cara de choro\",\n    \"Persevering face\": \"Perseverar Rosto\",\n    \"Face with look of triumph\": \"Rosto com olhar de triunfo\",\n    \"Disappointed but relieved face\": \"Fiquei Desapontado mas aliviado Rosto\",\n    \"Frowning face with open mouth\": \"Sobrancelhas franzidas rosto com a boca aberta\",\n    \"Anguished face\": \"O rosto angustiado\",\n    \"Fearful face\": \"Cara com medo\",\n    \"Weary face\": \"Rosto cansado\",\n    \"Sleepy face\": \"Cara de sono\",\n    \"Tired face\": \"Rosto cansado\",\n    \"Grimacing face\": \"Fazendo caretas face\",\n    \"Loudly crying face\": \"Alto chorando rosto\",\n    \"Face with open mouth\": \"Enfrentar com a boca aberta\",\n    \"Hushed face\": \"Flagrantes de rosto\",\n    \"Face with open mouth and cold sweat\": \"Enfrentar com a boca aberta e suor frio\",\n    \"Face screaming in fear\": \"Cara gritando de medo\",\n    \"Astonished face\": \"Cara de surpresa\",\n    \"Flushed face\": \"Rosto vermelho\",\n    \"Sleeping face\": \"O rosto de sono\",\n    \"Dizzy face\": \"Cara tonto\",\n    \"Face without mouth\": \"Rosto sem boca\",\n    \"Face with medical mask\": \"Rosto com m\\u00e1scara m\\u00e9dica\",\n\n    // Line breaker\n    \"Break\": \"Partir\",\n\n    // Math\n    \"Subscript\": \"Subscrito\",\n    \"Superscript\": \"Sobrescrito\",\n\n    // Full screen\n    \"Fullscreen\": \"Tela cheia\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Inserir linha horizontal\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Remover formata\\u00e7\\u00e3o\",\n\n    // Save\n    \"Save\": \"\\u0053\\u0061\\u006c\\u0076\\u0065\",\n\n    // Undo, redo\n    \"Undo\": \"Anular\",\n    \"Redo\": \"Restaurar\",\n\n    // Select all\n    \"Select All\": \"Seleccionar tudo\",\n\n    // Code view\n    \"Code View\": \"Exibi\\u00e7\\u00e3o de c\\u00f3digo\",\n\n    // Quote\n    \"Quote\": \"Cita\\u00e7\\u00e3o\",\n    \"Increase\": \"Aumentar\",\n    \"Decrease\": \"Diminuir\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inser\\u00e7\\u00e3o r\\u00e1pida\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caracteres especiais\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Grego\",\n    \"Cyrillic\": \"Cirílico\",\n    \"Punctuation\": \"Pontuação\",\n    \"Currency\": \"Moeda\",\n    \"Arrows\": \"Setas; flechas\",\n    \"Math\": \"Matemática\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Impressão\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Verificador ortográfico\",\n\n    // Help\n    \"Help\": \"Socorro\",\n    \"Shortcuts\": \"Atalhos\",\n    \"Inline Editor\": \"Editor em linha\",\n    \"Show the editor\": \"Mostre o editor\",\n    \"Common actions\": \"Ações comuns\",\n    \"Copy\": \"Cópia de\",\n    \"Cut\": \"Cortar\",\n    \"Paste\": \"Colar\",\n    \"Basic Formatting\": \"Formatação básica\",\n    \"Increase quote level\": \"Aumentar o nível de cotação\",\n    \"Decrease quote level\": \"Diminuir o nível de cotação\",\n    \"Image / Video\": \"Imagem / video\",\n    \"Resize larger\": \"Redimensionar maior\",\n    \"Resize smaller\": \"Redimensionar menor\",\n    \"Table\": \"Tabela\",\n    \"Select table cell\": \"Selecione a célula da tabela\",\n    \"Extend selection one cell\": \"Ampliar a seleção de uma célula\",\n    \"Extend selection one row\": \"Ampliar a seleção uma linha\",\n    \"Navigation\": \"Navegação\",\n    \"Focus popup / toolbar\": \"Foco popup / barra de ferramentas\",\n    \"Return focus to previous position\": \"Retornar o foco para a posição anterior\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL de inserção\",\n    \"Paste in a URL to embed\": \"Colar em url para incorporar\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"O conteúdo colado vem de um documento Microsoft Word. Você quer manter o formato ou limpá-lo?\",\n    \"Keep\": \"Guarda\",\n    \"Clean\": \"Limpar \\ limpo\",\n    \"Word Paste Detected\": \"Pasta de palavras detectada\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/ro.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Romanian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['ro'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Tasteaz\\u0103 ceva\",\n\n    // Basic formatting\n    \"Bold\": \"\\u00cengro\\u015fat\",\n    \"Italic\": \"Cursiv\",\n    \"Underline\": \"Subliniat\",\n    \"Strikethrough\": \"T\\u0103iat\",\n\n    // Main buttons\n    \"Insert\": \"Insereaz\\u0103\",\n    \"Delete\": \"\\u015eterge\",\n    \"Cancel\": \"Anuleaz\\u0103\",\n    \"OK\": \"Ok\",\n    \"Back\": \"\\u00cenapoi\",\n    \"Remove\": \"\\u0218terge\",\n    \"More\": \"Mai mult\",\n    \"Update\": \"Actualizeaz\\u0103\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Font\",\n    \"Font Size\": \"Dimensiune font\",\n\n    // Colors\n    \"Colors\": \"Culoare\",\n    \"Background\": \"Fundal\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"Culoare Hexa\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format paragraf\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Cod\",\n    \"Heading 1\": \"Antet 1\",\n    \"Heading 2\": \"Antet 2\",\n    \"Heading 3\": \"Antet 3\",\n    \"Heading 4\": \"Antet 4\",\n\n    // Style\n    \"Paragraph Style\": \"Stil paragraf\",\n    \"Inline Style\": \"Stil \\u00een linie\",\n\n    // Alignment\n    \"Align\": \"Aliniere\",\n    \"Align Left\": \"Aliniere la st\\u00e2nga\",\n    \"Align Center\": \"Aliniere la centru\",\n    \"Align Right\": \"Aliniere la dreapta\",\n    \"Align Justify\": \"Aliniere pe toat\\u0103 l\\u0103\\u021bimea\",\n    \"None\": \"Niciunul\",\n\n    // Lists\n    \"Ordered List\": \"List\\u0103 ordonat\\u0103\",\n    \"Default\": \"Mod implicit\",\n    \"Lower Alpha\": \"Inferior alfa\",\n    \"Lower Greek\": \"Inferior grecesc\",\n    \"Lower Roman\": \"Inferior roman\",\n    \"Upper Alpha\": \"Alfa superioară\",\n    \"Upper Roman\": \"Superior roman\",\n\n    \"Unordered List\": \"List\\u0103 neordonat\\u0103\",\n    \"Circle\": \"Cerc\",\n    \"Disc\": \"Disc\",\n    \"Square\": \"Pătrat\",\n\n    // Line height\n    \"Line Height\": \"Inaltimea liniei\",\n    \"Single\": \"Singur\",\n    \"Double\": \"Dubla\",\n\n    // Indent\n    \"Decrease Indent\": \"De-indenteaz\\u0103\",\n    \"Increase Indent\": \"Indenteaz\\u0103\",\n\n    // Links\n    \"Insert Link\": \"Inserare link\",\n    \"Open in new tab\": \"Deschide \\u00EEn tab nou\",\n    \"Open Link\": \"Deschide link\",\n    \"Edit Link\": \"Editare link\",\n    \"Unlink\": \"\\u0218terge link-ul\",\n    \"Choose Link\": \"Alege link\",\n\n    // Images\n    \"Insert Image\": \"Inserare imagine\",\n    \"Upload Image\": \"\\u00cencarc\\u0103 imagine\",\n    \"By URL\": \"Dup\\u0103 URL\",\n    \"Browse\": \"R\\u0103sfoie\\u0219te\",\n    \"Drop image\": \"Trage imagine\",\n    \"or click\": \"sau f\\u0103 click\",\n    \"Manage Images\": \"Gestionare imagini\",\n    \"Loading\": \"Se \\u00eencarc\\u0103\",\n    \"Deleting\": \"Se \\u0219terge\",\n    \"Tags\": \"Etichete\",\n    \"Are you sure? Image will be deleted.\": \"Sunte\\u021bi sigur? Imaginea va fi \\u015ftears\\u0103.\",\n    \"Replace\": \"\\u00cenlocuire\",\n    \"Uploading\": \"Imaginea se \\u00eencarc\\u0103\",\n    \"Loading image\": \"Imaginea se \\u00eencarc\\u0103\",\n    \"Display\": \"Afi\\u0219are\",\n    \"Inline\": \"\\u00cen linie\",\n    \"Break Text\": \"Sparge text\",\n    \"Alternative Text\": \"Text alternativ\",\n    \"Change Size\": \"Modificare dimensiuni\",\n    \"Width\": \"L\\u0103\\u021bime\",\n    \"Height\": \"\\u00cen\\u0103l\\u021bime\",\n    \"Something went wrong. Please try again.\": \"Ceva n-a mers bine. V\\u0103 rug\\u0103m s\\u0103 \\u00eencerca\\u021bi din nou.\",\n    \"Image Caption\": \"Captura imaginii\",\n    \"Advanced Edit\": \"Editare avansată\",\n\n    // Video\n    \"Insert Video\": \"Inserare video\",\n    \"Embedded Code\": \"Cod embedded\",\n    \"Paste in a video URL\": \"Lipiți o adresă URL pentru video\",\n    \"Drop video\": \"Trage video\",\n    \"Your browser does not support HTML5 video.\": \"Browserul dvs. nu acceptă videoclipul html5.\",\n    \"Upload Video\": \"Încărcați videoclipul\",\n\n    // Tables\n    \"Insert Table\": \"Inserare tabel\",\n    \"Table Header\": \"Antet tabel\",\n    \"Remove Table\": \"\\u0218terge tabel\",\n    \"Table Style\": \"Stil tabel\",\n    \"Horizontal Align\": \"Aliniere orizontal\\u0103\",\n    \"Row\": \"Linie\",\n    \"Insert row above\": \"Insereaz\\u0103 linie \\u00eenainte\",\n    \"Insert row below\": \"Insereaz\\u0103 linie dup\\u0103\",\n    \"Delete row\": \"\\u015eterge linia\",\n    \"Column\": \"Coloan\\u0103\",\n    \"Insert column before\": \"Insereaz\\u0103 coloan\\u0103 \\u00eenainte\",\n    \"Insert column after\": \"Insereaz\\u0103 coloan\\u0103 dup\\u0103\",\n    \"Delete column\": \"\\u015eterge coloana\",\n    \"Cell\": \"Celula\",\n    \"Merge cells\": \"Une\\u015fte celulele\",\n    \"Horizontal split\": \"\\u00cemparte orizontal\",\n    \"Vertical split\": \"\\u00cemparte vertical\",\n    \"Cell Background\": \"Fundal celul\\u0103\",\n    \"Vertical Align\": \"Aliniere vertical\\u0103\",\n    \"Top\": \"Sus\",\n    \"Middle\": \"Mijloc\",\n    \"Bottom\": \"Jos\",\n    \"Align Top\": \"Aliniere sus\",\n    \"Align Middle\": \"Aliniere la mijloc\",\n    \"Align Bottom\": \"Aliniere jos\",\n    \"Cell Style\": \"Stil celul\\u0103\",\n\n    // Files\n    \"Upload File\": \"\\u00cenc\\u0103rca\\u021bi fi\\u0219ier\",\n    \"Drop file\": \"Trage fi\\u0219ier\",\n\n    // Emoticons\n    \"Emoticons\": \"Emoticoane\",\n    \"Grinning face\": \"Fa\\u021b\\u0103 r\\u00e2njind\",\n    \"Grinning face with smiling eyes\": \"Fa\\u021b\\u0103 r\\u00e2njind cu ochi z\\u00e2mbitori\",\n    \"Face with tears of joy\": \"Fa\\u021b\\u0103 cu lacrimi de bucurie\",\n    \"Smiling face with open mouth\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu gura deschis\\u0103\",\n    \"Smiling face with open mouth and smiling eyes\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu gura deschis\\u0103 \\u0219i ochi z\\u00e2mbitori\",\n    \"Smiling face with open mouth and cold sweat\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu gura deschis\\u0103 şi sudoare rece\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu gura deschis\\u0103 şi ochii ferm \\u00eenchi\\u0219i\",\n    \"Smiling face with halo\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu aur\\u0103\",\n    \"Smiling face with horns\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu coarne\",\n    \"Winking face\": \"Fa\\u021b\\u0103 clipind\",\n    \"Smiling face with smiling eyes\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu ochi z\\u00e2mbitori\",\n    \"Face savoring delicious food\": \"Fa\\u021b\\u0103 savur\\u00e2nd preparate delicioase\",\n    \"Relieved face\": \"Fa\\u021b\\u0103 u\\u0219urat\\u0103\",\n    \"Smiling face with heart-shaped eyes\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu ochi in forma de inim\\u0103\",\n    \"Smiling face with sunglasses\": \"Fa\\u021b\\u0103 z\\u00e2mbitoare cu ochelari de soare\",\n    \"Smirking face\": \"Fa\\u021b\\u0103 cu sur\\u00e2s afectat\",\n    \"Neutral face\": \"Fa\\u021b\\u0103 neutr\\u0103\",\n    \"Expressionless face\": \"Fa\\u021b\\u0103 f\\u0103r\\u0103 expresie\",\n    \"Unamused face\": \"Fa\\u021b\\u0103 neamuzat\\u0103\",\n    \"Face with cold sweat\": \"Fa\\u021b\\u0103 cu sudoare rece\",\n    \"Pensive face\": \"Fa\\u021b\\u0103 medit\\u00e2nd\",\n    \"Confused face\": \"Fa\\u021b\\u0103 confuz\\u0103\",\n    \"Confounded face\": \"Fa\\u021b\\u0103 z\\u0103p\\u0103cit\\u0103\",\n    \"Kissing face\": \"Fa\\u021b\\u0103 s\\u0103rut\\u00e2nd\",\n    \"Face throwing a kiss\": \"Fa\\u021b\\u0103 arunc\\u00e2nd un s\\u0103rut\",\n    \"Kissing face with smiling eyes\": \"Fa\\u021b\\u0103 s\\u0103rut\\u00e2nd cu ochi z\\u00e2mbitori\",\n    \"Kissing face with closed eyes\": \"Fa\\u021b\\u0103 s\\u0103rut\\u00e2nd cu ochii \\u00eenchi\\u0219i\",\n    \"Face with stuck out tongue\": \"Fa\\u021b\\u0103 cu limba afar\\u0103\",\n    \"Face with stuck out tongue and winking eye\": \"Fa\\u021b\\u0103 cu limba scoas\\u0103 clipind\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Fa\\u021b\\u0103 cu limba scoas\\u0103 \\u0219i ochii ferm \\u00eenchi\\u0219i\",\n    \"Disappointed face\": \"Fa\\u021b\\u0103 dezam\\u0103git\\u0103\",\n    \"Worried face\": \"Fa\\u021b\\u0103 \\u00eengrijorat\\u0103\",\n    \"Angry face\": \"Fa\\u021b\\u0103 nervoas\\u0103\",\n    \"Pouting face\": \"Fa\\u021b\\u0103 fierb\\u00e2nd\",\n    \"Crying face\": \"Fa\\u021b\\u0103 pl\\u00e2ng\\u00e2nd\",\n    \"Persevering face\": \"Fa\\u021b\\u0103 perseverent\\u0103\",\n    \"Face with look of triumph\": \"Fa\\u021b\\u0103 triumf\\u0103toare\",\n    \"Disappointed but relieved face\": \"Fa\\u021b\\u0103 dezam\\u0103git\\u0103 dar u\\u0219urat\\u0103\",\n    \"Frowning face with open mouth\": \"Fa\\u021b\\u0103 \\u00eencruntat\\u0103 cu gura deschis\\u0103\",\n    \"Anguished face\": \"Fa\\u021b\\u0103 \\u00eendurerat\\u0103\",\n    \"Fearful face\": \"Fa\\u021b\\u0103 tem\\u0103toare\",\n    \"Weary face\": \"Fa\\u021b\\u0103 \\u00eengrijorat\\u0103\",\n    \"Sleepy face\": \"Fa\\u021b\\u0103 adormit\\u0103\",\n    \"Tired face\": \"Fa\\u021b\\u0103 obosit\\u0103\",\n    \"Grimacing face\": \"Fa\\u021b\\u0103 cu grimas\\u0103\",\n    \"Loudly crying face\": \"Fa\\u021b\\u0103 pl\\u00e2ng\\u00e2nd zgomotos\",\n    \"Face with open mouth\": \"Fa\\u021b\\u0103 cu gura deschis\\u0103\",\n    \"Hushed face\": \"Fa\\u021b\\u0103 discret\\u0103\",\n    \"Face with open mouth and cold sweat\": \"Fa\\u021b\\u0103 cu gura deschis\\u0103 si sudoare rece\",\n    \"Face screaming in fear\": \"Fa\\u021b\\u0103 \\u021bip\\u00e2nd de fric\\u0103\",\n    \"Astonished face\": \"Fa\\u021b\\u0103 uimit\\u0103\",\n    \"Flushed face\": \"Fa\\u021b\\u0103 sp\\u0103lat\\u0103\",\n    \"Sleeping face\": \"Fa\\u021b\\u0103 adormit\\u0103\",\n    \"Dizzy face\": \"Fa\\u021b\\u0103 ame\\u021bit\\u0103\",\n    \"Face without mouth\": \"Fa\\u021b\\u0103 f\\u0103r\\u0103 gur\\u0103\",\n    \"Face with medical mask\": \"Fa\\u021b\\u0103 cu masc\\u0103 medical\\u0103\",\n\n    // Line breaker\n    \"Break\": \"Desparte\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Inserare linie orizontal\\u0103\",\n\n    // Math\n    \"Subscript\": \"Indice\",\n    \"Superscript\": \"Exponent\",\n\n    // Full screen\n    \"Fullscreen\": \"Ecran complet\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Elimina\\u021bi formatarea\",\n\n    // Save\n    \"Save\": \"\\u0053\\u0061\\u006c\\u0076\\u0061\\u021b\\u0069\",\n\n    // Undo, redo\n    \"Undo\": \"Reexecut\\u0103\",\n    \"Redo\": \"Dezexecut\\u0103\",\n\n    // Select all\n    \"Select All\": \"Selecteaz\\u0103 tot\",\n\n    // Code view\n    \"Code View\": \"Vizualizare cod\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Indenteaz\\u0103\",\n    \"Decrease\": \"De-indenteaz\\u0103\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Inserare rapid\\u0103\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Caracterele speciale\",\n    \"Latin\": \"Latină\",\n    \"Greek\": \"Greacă\",\n    \"Cyrillic\": \"Chirilic\",\n    \"Punctuation\": \"Punctuaţie\",\n    \"Currency\": \"Valută\",\n    \"Arrows\": \"Săgeți\",\n    \"Math\": \"Matematică\",\n    \"Misc\": \"Diverse\",\n\n    // Print.\n    \"Print\": \"Imprimare\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Ortografie\",\n\n    // Help\n    \"Help\": \"Ajutor\",\n    \"Shortcuts\": \"Comenzi rapide\",\n    \"Inline Editor\": \"Editor inline\",\n    \"Show the editor\": \"Arătați editorul\",\n    \"Common actions\": \"Acțiuni comune\",\n    \"Copy\": \"Copie\",\n    \"Cut\": \"A taia\",\n    \"Paste\": \"Lipire\",\n    \"Basic Formatting\": \"Formatul de bază\",\n    \"Increase quote level\": \"Creșteți nivelul cotației\",\n    \"Decrease quote level\": \"Micșorați nivelul cotației\",\n    \"Image / Video\": \"Imagine / video\",\n    \"Resize larger\": \"Redimensionați mai mare\",\n    \"Resize smaller\": \"Redimensionați mai puțin\",\n    \"Table\": \"Tabel\",\n    \"Select table cell\": \"Selectați celula tabelă\",\n    \"Extend selection one cell\": \"Extindeți selecția la o celulă\",\n    \"Extend selection one row\": \"Extindeți selecția cu un rând\",\n    \"Navigation\": \"Navigare\",\n    \"Focus popup / toolbar\": \"Focus popup / bara de instrumente\",\n    \"Return focus to previous position\": \"Reveniți la poziția anterioară\",\n\n    // Embed.ly\n    \"Embed URL\": \"Încorporați url\",\n    \"Paste in a URL to embed\": \"Lipiți un URL pentru a-l încorpora\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Conținutul lipit vine dintr-un document word Microsoft. Doriți să păstrați formatul sau să îl curățați?\",\n    \"Keep\": \"A pastra\",\n    \"Clean\": \"Curat\",\n    \"Word Paste Detected\": \"A fost detectată lipire din Word\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/ru.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Russian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['ru'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u041d\\u0430\\u043f\\u0438\\u0448\\u0438\\u0442\\u0435 \\u0447\\u0442\\u043e\\u002d\\u043d\\u0438\\u0431\\u0443\\u0434\\u044c\",\n\n    // Basic formatting\n    \"Bold\": \"\\u0416\\u0438\\u0440\\u043d\\u044b\\u0439\",\n    \"Italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0438\\u0432\",\n    \"Underline\": \"\\u041f\\u043e\\u0434\\u0447\\u0435\\u0440\\u043a\\u043d\\u0443\\u0442\\u044b\\u0439\",\n    \"Strikethrough\": \"\\u0417\\u0430\\u0447\\u0435\\u0440\\u043a\\u043d\\u0443\\u0442\\u044b\\u0439\",\n\n    // Main buttons\n    \"Insert\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\",\n    \"Delete\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c\",\n    \"Cancel\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n    \"OK\": \"\\u041e\\u043a\",\n    \"Back\": \"\\u043d\\u0430\\u0437\\u0430\\u0434\",\n    \"Remove\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c\",\n    \"More\": \"\\u0411\\u043e\\u043b\\u044c\\u0448\\u0435\",\n    \"Update\": \"\\u041e\\u0431\\u043d\\u043e\\u0432\\u0438\\u0442\\u044c\",\n    \"Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c\",\n\n    // Font\n    \"Font Family\": \"\\u0428\\u0440\\u0438\\u0444\\u0442\",\n    \"Font Size\": \"\\u0420\\u0430\\u0437\\u043c\\u0435\\u0440 \\u0448\\u0440\\u0438\\u0444\\u0442\\u0430\",\n\n    // Colors\n    \"Colors\": \"\\u0426\\u0432\\u0435\\u0442\\u0430\",\n    \"Background\": \"\\u0424\\u043e\\u043d\",\n    \"Text\": \"\\u0422\\u0435\\u043a\\u0441\\u0442\",\n    \"HEX Color\": \"HEX цвет\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442 \\u0430\\u0431\\u0437\\u0430\\u0446\\u0430\",\n    \"Normal\": \"\\u041d\\u043e\\u0440\\u043c\\u0430\\u043b\\u044c\\u043d\\u044b\\u0439\",\n    \"Code\": \"\\u041a\\u043e\\u0434\",\n    \"Heading 1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n    \"Heading 2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n    \"Heading 3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n    \"Heading 4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c \\u0430\\u0431\\u0437\\u0430\\u0446\\u0430\",\n    \"Inline Style\": \"\\u0412\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d\\u043d\\u044b\\u0439 \\u0441\\u0442\\u0438\\u043b\\u044c\",\n\n    // Alignment\n    \"Align\": \"\\u0412\\u044b\\u0440\\u043e\\u0432\\u043d\\u044f\\u0442\\u044c \\u043f\\u043e\",\n    \"Align Left\": \"\\u041f\\u043e \\u043b\\u0435\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Center\": \"\\u041f\\u043e \\u0446\\u0435\\u043d\\u0442\\u0440\\u0443\",\n    \"Align Right\": \"\\u041f\\u043e \\u043f\\u0440\\u0430\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Justify\": \"\\u041f\\u043e \\u0448\\u0438\\u0440\\u0438\\u043d\\u0435\",\n    \"None\": \"\\u041d\\u0438\\u043a\\u0430\\u043a\",\n\n    // Lists\n    \"Ordered List\": \"\\u041d\\u0443\\u043c\\u0435\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n    \"Default\": \"Дефолт\",\n    \"Lower Alpha\": \"Низшая альфа\",\n    \"Lower Greek\": \"Нижний греческий\",\n    \"Lower Roman\": \"Нижний римлянин\",\n    \"Upper Alpha\": \"Верхняя альфа\",\n    \"Upper Roman\": \"Верховный римлянин\",\n\n    \"Unordered List\": \"\\u041c\\u0430\\u0440\\u043a\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n    \"Circle\": \"Круг\",\n    \"Disc\": \"Диск\",\n    \"Square\": \"Площадь\",\n\n    // Line height\n    \"Line Height\": \"Высота линии\",\n    \"Single\": \"Не замужем\",\n    \"Double\": \"Двойной\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u0423\\u043c\\u0435\\u043d\\u044c\\u0448\\u0438\\u0442\\u044c \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n    \"Increase Indent\": \"\\u0423\\u0432\\u0435\\u043b\\u0438\\u0447\\u0438\\u0442\\u044c \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\n    // Links\n    \"Insert Link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n    \"Open in new tab\": \"\\u041e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044c \\u0432 \\u043d\\u043e\\u0432\\u043e\\u0439 \\u0432\\u043a\\u043b\\u0430\\u0434\\u043a\\u0435\",\n    \"Open Link\": \"\\u041f\\u0435\\u0440\\u0435\\u0439\\u0442\\u0438 \\u043f\\u043e \\u0441\\u0441\\u044b\\u043b\\u043a\\u0435\",\n    \"Edit Link\": \"\\u041e\\u0442\\u0440\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n    \"Unlink\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n    \"Choose Link\": \"\\u0412\\u044b\\u0431\\u0435\\u0440\\u0438\\u0442\\u0435 \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\n    // Images\n    \"Insert Image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n    \"Upload Image\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u0438\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n    \"By URL\": \"\\u041f\\u043e \\u0441\\u0441\\u044b\\u043b\\u043a\\u0435\",\n    \"Browse\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043d\\u043d\\u044b\\u0435 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n    \"Drop image\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0435\\u0441\\u0442\\u0438\\u0442\\u0435 \\u0441\\u044e\\u0434\\u0430 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n    \"or click\": \"\\u0438\\u043b\\u0438 \\u043d\\u0430\\u0436\\u043c\\u0438\\u0442\\u0435\",\n    \"Manage Images\": \"\\u0423\\u043f\\u0440\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\\u043c\\u0438\",\n    \"Loading\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043a\\u0430\",\n    \"Deleting\": \"\\u0423\\u0434\\u0430\\u043b\\u0435\\u043d\\u0438\\u0435\",\n    \"Tags\": \"\\u041a\\u043b\\u044e\\u0447\\u0435\\u0432\\u044b\\u0435 \\u0441\\u043b\\u043e\\u0432\\u0430\",\n    \"Are you sure? Image will be deleted.\": \"\\u0412\\u044b \\u0443\\u0432\\u0435\\u0440\\u0435\\u043d\\u044b? \\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0431\\u0443\\u0434\\u0435\\u0442 \\u0443\\u0434\\u0430\\u043b\\u0435\\u043d\\u043e.\",\n    \"Replace\": \"\\u0417\\u0430\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n    \"Uploading\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043a\\u0430\",\n    \"Loading image\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u043a\\u0430 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n    \"Display\": \"\\u041f\\u043e\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0435\",\n    \"Inline\": \"\\u041e\\u0431\\u0442\\u0435\\u043a\\u0430\\u043d\\u0438\\u0435 \\u0442\\u0435\\u043a\\u0441\\u0442\\u043e\\u043c\",\n    \"Break Text\": \"\\u0412\\u0441\\u0442\\u0440\\u043e\\u0435\\u043d\\u043d\\u043e\\u0435 \\u0432 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Alternative Text\": \"\\u0410\\u043b\\u044c\\u0442\\u0435\\u0440\\u043d\\u0430\\u0442\\u0438\\u0432\\u043d\\u044b\\u0439 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Change Size\": \"\\u0418\\u0437\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c \\u0440\\u0430\\u0437\\u043c\\u0435\\u0440\",\n    \"Width\": \"\\u0428\\u0438\\u0440\\u0438\\u043d\\u0430\",\n    \"Height\": \"\\u0412\\u044b\\u0441\\u043e\\u0442\\u0430\",\n    \"Something went wrong. Please try again.\": \"\\u0427\\u0442\\u043e\\u002d\\u0442\\u043e \\u043f\\u043e\\u0448\\u043b\\u043e \\u043d\\u0435 \\u0442\\u0430\\u043a\\u002e \\u041f\\u043e\\u0436\\u0430\\u043b\\u0443\\u0439\\u0441\\u0442\\u0430\\u002c \\u043f\\u043e\\u043f\\u0440\\u043e\\u0431\\u0443\\u0439\\u0442\\u0435 \\u0435\\u0449\\u0435 \\u0440\\u0430\\u0437\\u002e\",\n    \"Image Caption\": \"Подпись к изображению\",\n    \"Advanced Edit\": \"Расширенное редактирование\",\n\n    // Video\n    \"Insert Video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0432\\u0438\\u0434\\u0435\\u043e\",\n    \"Embedded Code\": \"\\u0048\\u0054\\u004d\\u004c\\u002d\\u043a\\u043e\\u0434 \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438\",\n    \"Paste in a video URL\": \"Вставить URL-адрес видео\",\n    \"Drop video\": \"Вставить видео\",\n    \"Your browser does not support HTML5 video.\": \"Ваш браузер не поддерживает html5 видео.\",\n    \"Upload Video\": \"Загрузить видео\",\n\n    // Tables\n    \"Insert Table\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0443\",\n    \"Table Header\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u044b\",\n    \"Remove Table\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0443\",\n    \"Table Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u044b\",\n    \"Horizontal Align\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0432\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n    \"Row\": \"\\u0421\\u0442\\u0440\\u043e\\u043a\\u0430\",\n    \"Insert row above\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u0432\\u0435\\u0440\\u0445\\u0443\",\n    \"Insert row below\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u043d\\u0438\\u0437\\u0443\",\n    \"Delete row\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443\",\n    \"Column\": \"\\u0421\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446\",\n    \"Insert column before\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446 \\u0441\\u043b\\u0435\\u0432\\u0430\",\n    \"Insert column after\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446 \\u0441\\u043f\\u0440\\u0430\\u0432\\u0430\",\n    \"Delete column\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446\",\n    \"Cell\": \"\\u042f\\u0447\\u0435\\u0439\\u043a\\u0430\",\n    \"Merge cells\": \"\\u041e\\u0431\\u044a\\u0435\\u0434\\u0438\\u043d\\u0438\\u0442\\u044c \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n    \"Horizontal split\": \"\\u0420\\u0430\\u0437\\u0434\\u0435\\u043b\\u0438\\u0442\\u044c \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Vertical split\": \"\\u0420\\u0430\\u0437\\u0434\\u0435\\u043b\\u0438\\u0442\\u044c \\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Cell Background\": \"\\u0424\\u043e\\u043d \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n    \"Vertical Align\": \"\\u0412\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0432\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n    \"Top\": \"\\u041f\\u043e \\u0432\\u0435\\u0440\\u0445\\u043d\\u0435\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Middle\": \"\\u041f\\u043e\\u0441\\u0435\\u0440\\u0435\\u0434\\u0438\\u043d\\u0435\",\n    \"Bottom\": \"\\u041f\\u043e \\u043d\\u0438\\u0436\\u043d\\u0435\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Top\": \"\\u0412\\u044b\\u0440\\u043e\\u0432\\u043d\\u044f\\u0442\\u044c \\u043f\\u043e \\u0432\\u0435\\u0440\\u0445\\u043d\\u0435\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Middle\": \"\\u0412\\u044b\\u0440\\u043e\\u0432\\u043d\\u044f\\u0442\\u044c \\u043f\\u043e \\u0441\\u0435\\u0440\\u0435\\u0434\\u0438\\u043d\\u0435\",\n    \"Align Bottom\": \"\\u0412\\u044b\\u0440\\u043e\\u0432\\u043d\\u044f\\u0442\\u044c \\u043f\\u043e \\u043d\\u0438\\u0436\\u043d\\u0435\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Cell Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n\n    // Files\n    \"Upload File\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u0438\\u0442\\u044c \\u0444\\u0430\\u0439\\u043b\",\n    \"Drop file\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0435\\u0441\\u0442\\u0438\\u0442\\u0435 \\u0441\\u044e\\u0434\\u0430 \\u0444\\u0430\\u0439\\u043b\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0421\\u043c\\u0430\\u0439\\u043b\\u0438\\u043a\\u0438\",\n    \"Grinning face\": \"\\u0423\\u0445\\u043c\\u044b\\u043b\\u043a\\u0430 \\u043d\\u0430 \\u043b\\u0438\\u0446\\u0435\",\n    \"Grinning face with smiling eyes\": \"\\u0423\\u0441\\u043c\\u0435\\u0445\\u043d\\u0443\\u0432\\u0448\\u0435\\u0435\\u0441\\u044f \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0443\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0438\\u043c\\u0438\\u0441\\u044f \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Face with tears of joy\": \"\\u041b\\u0438\\u0446\\u043e \\u0441\\u043e \\u0441\\u043b\\u0435\\u0437\\u0430\\u043c\\u0438 \\u0440\\u0430\\u0434\\u043e\\u0441\\u0442\\u0438\",\n    \"Smiling face with open mouth\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0435\\u0435\\u0441\\u044f \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c \\u0438 \\u0443\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0438\\u0435\\u0441\\u044f \\u0433\\u043b\\u0430\\u0437\\u0430\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c \\u0438 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u044b\\u0439 \\u043f\\u043e\\u0442\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c \\u0438 \\u043f\\u043b\\u043e\\u0442\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c\\u0438 \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Smiling face with halo\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0433\\u0430\\u043b\\u043e\",\n    \"Smiling face with horns\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0440\\u043e\\u0433\\u0430\\u043c\\u0438\",\n    \"Winking face\": \"\\u043f\\u043e\\u0434\\u043c\\u0438\\u0433\\u0438\\u0432\\u0430\\u044f \\u043b\\u0438\\u0446\\u043e\",\n    \"Smiling face with smiling eyes\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0443\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0438\\u043c\\u0438\\u0441\\u044f \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Face savoring delicious food\": \"\\u041b\\u0438\\u0446\\u043e \\u0441\\u043c\\u0430\\u043a\\u0443\\u044e\\u0449\\u0435\\u0435 \\u0432\\u043a\\u0443\\u0441\\u043d\\u0443\\u044e \\u0435\\u0434\\u0443\",\n    \"Relieved face\": \"\\u041e\\u0441\\u0432\\u043e\\u0431\\u043e\\u0436\\u0434\\u0435\\u043d\\u044b \\u043b\\u0438\\u0446\\u043e\",\n    \"Smiling face with heart-shaped eyes\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0432 \\u0444\\u043e\\u0440\\u043c\\u0435 \\u0441\\u0435\\u0440\\u0434\\u0446\\u0430 \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Smiling face with sunglasses\": \"\\u0423\\u043b\\u044b\\u0431\\u0430\\u044f\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0447\\u043a\\u0430\\u043c\\u0438\",\n    \"Smirking face\": \"\\u0423\\u0441\\u043c\\u0435\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043b\\u0438\\u0446\\u043e\",\n    \"Neutral face\": \"\\u041e\\u0431\\u044b\\u0447\\u043d\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Expressionless face\": \"\\u041d\\u0435\\u0432\\u044b\\u0440\\u0430\\u0437\\u0438\\u0442\\u0435\\u043b\\u044c\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Unamused face\": \"\\u041d\\u0435 \\u0441\\u043c\\u0435\\u0448\\u043d\\u043e \\u043b\\u0438\\u0446\\u043e\",\n    \"Face with cold sweat\": \"\\u041b\\u0438\\u0446\\u043e \\u0432 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u043e\\u043c \\u043f\\u043e\\u0442\\u0443\",\n    \"Pensive face\": \"\\u0417\\u0430\\u0434\\u0443\\u043c\\u0447\\u0438\\u0432\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Confused face\": \"\\u0421\\u043c\\u0443\\u0449\\u0435\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Confounded face\": \"\\u041f\\u043e\\u0441\\u0442\\u044b\\u0434\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Kissing face\": \"\\u041f\\u043e\\u0446\\u0435\\u043b\\u0443\\u0438 \\u043b\\u0438\\u0446\\u043e\",\n    \"Face throwing a kiss\": \"\\u041b\\u0438\\u0446\\u043e \\u043e\\u0442\\u043f\\u0440\\u0430\\u0432\\u043b\\u044f\\u044e\\u0449\\u0435\\u0435 \\u043f\\u043e\\u0446\\u0435\\u043b\\u0443\\u0439\",\n    \"Kissing face with smiling eyes\": \"\\u041f\\u043e\\u0446\\u0435\\u043b\\u0443\\u0438 \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0443\\u043b\\u044b\\u0431\\u0430\\u044e\\u0449\\u0438\\u043c\\u0438\\u0441\\u044f \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Kissing face with closed eyes\": \"\\u041f\\u043e\\u0446\\u0435\\u043b\\u0443\\u0438 \\u043b\\u0438\\u0446\\u043e \\u0441 \\u0437\\u0430\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c\\u0438 \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Face with stuck out tongue\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u0442\\u043e\\u0440\\u0447\\u0430\\u0449\\u0438\\u043c \\u044f\\u0437\\u044b\\u043a\\u043e\\u043c\",\n    \"Face with stuck out tongue and winking eye\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u0442\\u043e\\u0440\\u0447\\u0430\\u0449\\u0438\\u043c \\u044f\\u0437\\u044b\\u043a\\u043e\\u043c \\u0438 \\u043f\\u043e\\u0434\\u043c\\u0438\\u0433\\u0438\\u0432\\u0430\\u044e\\u0449\\u0438\\u043c \\u0433\\u043b\\u0430\\u0437\\u043e\\u043c\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u0442\\u043e\\u0440\\u0447\\u0430\\u0449\\u0438\\u043c \\u044f\\u0437\\u044b\\u043a\\u043e\\u043c \\u0438 \\u043f\\u043b\\u043e\\u0442\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c\\u0438 \\u0433\\u043b\\u0430\\u0437\\u0430\\u043c\\u0438\",\n    \"Disappointed face\": \"\\u0420\\u0430\\u0437\\u043e\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Worried face\": \"\\u041e\\u0431\\u0435\\u0441\\u043f\\u043e\\u043a\\u043e\\u0435\\u043d\\u043d\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Angry face\": \"\\u0417\\u043b\\u043e\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Pouting face\": \"\\u041f\\u0443\\u0445\\u043b\\u044b\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Crying face\": \"\\u041f\\u043b\\u0430\\u0447\\u0443\\u0449\\u0435\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Persevering face\": \"\\u041d\\u0430\\u0441\\u0442\\u043e\\u0439\\u0447\\u0438\\u0432\\u0430\\u044f \\u043b\\u0438\\u0446\\u043e\",\n    \"Face with look of triumph\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u0432\\u0438\\u0434\\u043e\\u043c \\u0442\\u0440\\u0438\\u0443\\u043c\\u0444\\u0430\",\n    \"Disappointed but relieved face\": \"\\u0420\\u0430\\u0437\\u043e\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u043e\\u0435\\u002c \\u043d\\u043e \\u0441\\u043f\\u043e\\u043a\\u043e\\u0439\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Frowning face with open mouth\": \"\\u041d\\u0430\\u0445\\u043c\\u0443\\u0440\\u0435\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c\",\n    \"Anguished face\": \"\\u043c\\u0443\\u0447\\u0438\\u0442\\u0435\\u043b\\u044c\\u043d\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Fearful face\": \"\\u041d\\u0430\\u043f\\u0443\\u0433\\u0430\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Weary face\": \"\\u0423\\u0441\\u0442\\u0430\\u043b\\u044b\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Sleepy face\": \"\\u0441\\u043e\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Tired face\": \"\\u0423\\u0441\\u0442\\u0430\\u043b\\u0438 \\u043b\\u0438\\u0446\\u043e\",\n    \"Grimacing face\": \"\\u0413\\u0440\\u0438\\u043c\\u0430\\u0441\\u0430 \\u043d\\u0430 \\u043b\\u0438\\u0446\\u0435\",\n    \"Loudly crying face\": \"\\u0413\\u0440\\u043e\\u043c\\u043a\\u043e \\u043f\\u043b\\u0430\\u0447\\u0430 \\u043b\\u0438\\u0446\\u043e\",\n    \"Face with open mouth\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c\",\n    \"Hushed face\": \"\\u0417\\u0430\\u0442\\u0438\\u0445\\u0448\\u0438\\u0439 \\u043b\\u0438\\u0446\\u043e\",\n    \"Face with open mouth and cold sweat\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u043e\\u0442\\u043a\\u0440\\u044b\\u0442\\u044b\\u043c \\u0440\\u0442\\u043e\\u043c \\u0432 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u043e\\u043c \\u043f\\u043e\\u0442\\u0443\",\n    \"Face screaming in fear\": \"\\u041b\\u0438\\u0446\\u043e \\u043a\\u0440\\u0438\\u0447\\u0430\\u0449\\u0435\\u0435 \\u043e\\u0442 \\u0441\\u0442\\u0440\\u0430\\u0445\\u0430\",\n    \"Astonished face\": \"\\u0423\\u0434\\u0438\\u0432\\u043b\\u0435\\u043d\\u043d\\u043e\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Flushed face\": \"\\u041f\\u043e\\u043a\\u0440\\u0430\\u0441\\u043d\\u0435\\u0432\\u0448\\u0435\\u0435 \\u043b\\u0438\\u0446\\u043e\",\n    \"Sleeping face\": \"\\u0421\\u043f\\u044f\\u0449\\u0430\\u044f \\u043b\\u0438\\u0446\\u043e\",\n    \"Dizzy face\": \"\\u0414\\u0438\\u0437\\u0437\\u0438 \\u043b\\u0438\\u0446\\u043e\",\n    \"Face without mouth\": \"\\u041b\\u0438\\u0446\\u043e \\u0431\\u0435\\u0437 \\u0440\\u0442\\u0430\",\n    \"Face with medical mask\": \"\\u041b\\u0438\\u0446\\u043e \\u0441 \\u043c\\u0435\\u0434\\u0438\\u0446\\u0438\\u043d\\u0441\\u043a\\u043e\\u0439 \\u043c\\u0430\\u0441\\u043a\\u043e\\u0439\",\n\n    // Line breaker\n    \"Break\": \"\\u041d\\u043e\\u0432\\u0430\\u044f \\u0441\\u0442\\u0440\\u043e\\u043a\\u0430\",\n\n    // Math\n    \"Subscript\": \"\\u041d\\u0438\\u0436\\u043d\\u0438\\u0439 \\u0438\\u043d\\u0434\\u0435\\u043a\\u0441\",\n    \"Superscript\": \"\\u0412\\u0435\\u0440\\u0445\\u043d\\u0438\\u0439 \\u0438\\u043d\\u0434\\u0435\\u043a\\u0441\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u041d\\u0430 \\u0432\\u0435\\u0441\\u044c \\u044d\\u043a\\u0440\\u0430\\u043d\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0443\\u044e \\u043b\\u0438\\u043d\\u0438\\u044e\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\n    // Save\n    \"Save\": \"\\u0421\\u043e\\u0445\\u0440\\u0430\\u043d\\u0438\\u0442\\u044c\",\n\n    // Undo, redo\n    \"Undo\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n    \"Redo\": \"\\u041f\\u043e\\u0432\\u0442\\u043e\\u0440\\u0438\\u0442\\u044c\",\n\n    // Select all\n    \"Select All\": \"\\u0412\\u044b\\u0431\\u0440\\u0430\\u0442\\u044c \\u0432\\u0441\\u0451\",\n\n    // Code view\n    \"Code View\": \"\\u041f\\u0440\\u043e\\u0441\\u043c\\u043e\\u0442\\u0440 \\u0048\\u0054\\u004d\\u004c\\u002d\\u043a\\u043e\\u0434\\u0430\",\n\n    // Quote\n    \"Quote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\\u0430\",\n    \"Increase\": \"\\u0423\\u0432\\u0435\\u043b\\u0438\\u0447\\u0435\\u043d\\u0438\\u0435\",\n    \"Decrease\": \"\\u0421\\u043d\\u0438\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u0411\\u044b\\u0441\\u0442\\u0440\\u0430\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0430\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Специальные символы\",\n    \"Latin\": \"Латинский\",\n    \"Greek\": \"Греческий\",\n    \"Cyrillic\": \"Кириллица\",\n    \"Punctuation\": \"Пунктуация\",\n    \"Currency\": \"Валюта\",\n    \"Arrows\": \"Стрелки\",\n    \"Math\": \"Математический\",\n    \"Misc\": \"Разное\",\n\n    // Print.\n    \"Print\": \"Распечатать\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Программа проверки орфографии\",\n\n    // Help\n    \"Help\": \"Помощь\",\n    \"Shortcuts\": \"Горячие клавищи\",\n    \"Inline Editor\": \"Встроенный редактор\",\n    \"Show the editor\": \"Показать редактор\",\n    \"Common actions\": \"Общие действия\",\n    \"Copy\": \"Копировать\",\n    \"Cut\": \"Вырезать\",\n    \"Paste\": \"Вставить\",\n    \"Basic Formatting\": \"Базовое форматирование\",\n    \"Increase quote level\": \"Увеличить уровень цитирования\",\n    \"Decrease quote level\": \"Уменьшить уровень цитирования\",\n    \"Image / Video\": \"Изображение / Видео\",\n    \"Resize larger\": \"Изменить размер\",\n    \"Resize smaller\": \"Уменьшить размер\",\n    \"Table\": \"Таблица\",\n    \"Select table cell\": \"Выбрать ячейку таблицы\",\n    \"Extend selection one cell\": \"Расширить выделение одной ячейки\",\n    \"Extend selection one row\": \"Расширить выделение на одну строку\",\n    \"Navigation\": \"Навигация\",\n    \"Focus popup / toolbar\": \"Сфокусировать всплывающее окно / панель инструментов\",\n    \"Return focus to previous position\": \"Вернуть фокус на предыдущую позицию\",\n\n    // Embed.ly\n    \"Embed URL\": \"Вставить URL-адрес\",\n    \"Paste in a URL to embed\": \"Вставить URL-адрес для встраивания\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Вы пытаетесь вставить текст из документа Microsoft Word. Вы хотите сохранить или очистить формат?\",\n    \"Keep\": \"Оставить\",\n    \"Clean\": \"Очистить\",\n    \"Word Paste Detected\": \"Обнаружено копирование из Word\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/sk.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Slovak\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['sk'] = {\n  translation: {\n\n    // Place holder\n    \"Type something\": \"Nap\\u00ed\\u0161te hoci\\u010do\",\n\n    // Basic formatting\n    \"Bold\": \"Tu\\u010dn\\u00e9\",\n    \"Italic\": \"Kurz\\u00edva\",\n    \"Underline\": \"Pod\\u010diarknut\\u00e9\",\n    \"Strikethrough\": \"Pre\\u0161krtnut\\u00e9\",\n\n    // Main buttons\n    \"Insert\": \"Vlo\\u017ei\\u0165\",\n    \"Delete\": \"Vymaza\\u0165\",\n    \"Cancel\": \"Zru\\u0161i\\u0165\",\n    \"OK\": \"OK\",\n    \"Back\": \"Sp\\u00e4\\u0165\",\n    \"Remove\": \"Odstr\\u00e1ni\\u0165\",\n    \"More\": \"Viac\",\n    \"Update\": \"Aktualizova\\u0165\",\n    \"Style\": \"\\u0165t\\u00fdl\",\n\n    // Font\n    \"Font Family\": \"Typ p\\u00edsma\",\n    \"Font Size\": \"Ve\\u013ekos\\u0165 p\\u00edsma\",\n\n    // Colors\n    \"Colors\": \"Farby\",\n    \"Background\": \"Pozadie\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"Hex Farby\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Form\\u00e1t odstavca\",\n    \"Normal\": \"Norm\\u00e1lne\",\n    \"Code\": \"K\\u00f3d\",\n    \"Heading 1\": \"Nadpis 1\",\n    \"Heading 2\": \"Nadpis 2\",\n    \"Heading 3\": \"Nadpis 3\",\n    \"Heading 4\": \"Nadpis 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u0165t\\u00fdl odstavca\",\n    \"Inline Style\": \"Inline \\u0161t\\u00fdl\",\n\n    // Alignment\n    \"Align\": \"Zarovnanie\",\n    \"Align Left\": \"Zarovna\\u0165 v\\u013eavo\",\n    \"Align Center\": \"Zarovna\\u0165 na stred\",\n    \"Align Right\": \"Zarovna\\u0165 vpravo\",\n    \"Align Justify\": \"Zarovna\\u0165 do bloku\",\n    \"None\": \"\\u017diadne\",\n\n    // Lists\n    \"Ordered List\": \"\\u010c\\u00edslovan\\u00fd zoznam\",\n    \"Default\": \"Štandardné\",\n    \"Lower Alpha\": \"Nižšia alfa\",\n    \"Lower Greek\": \"Nižšie grécke\",\n    \"Lower Roman\": \"Nižší roman\",\n    \"Upper Alpha\": \"Horná alfa\",\n    \"Upper Roman\": \"Horný román\",\n\n    \"Unordered List\": \"Ne\\u010d\\u00edslovan\\u00fd zoznam\",\n    \"Circle\": \"Kružnice\",\n    \"Disc\": \"Kotúč\",\n    \"Square\": \"Námestie\",\n\n    // Line height\n    \"Line Height\": \"Výška riadku\",\n    \"Single\": \"Jednoposteľová\",\n    \"Double\": \"Dvojitý\",\n\n    // Indent\n    \"Decrease Indent\": \"Zmen\\u0161i\\u0165 odsadenie\",\n    \"Increase Indent\": \"Zv\\u00e4\\u010d\\u0161i\\u0165 odsadenie\",\n\n    // Links\n    \"Insert Link\": \"Vlo\\u017ei\\u0165 odkaz\",\n    \"Open in new tab\": \"Otvori\\u0165 v novom okne\",\n    \"Open Link\": \"Otvori\\u0165 odkaz\",\n    \"Edit Link\": \"Upravi\\u0165 odkaz\",\n    \"Unlink\": \"Odstr\\u00e1ni\\u0165 odkaz\",\n    \"Choose Link\": \"Vyberte odkaz\",\n\n    // Images\n    \"Insert Image\": \"Vlo\\u017ei\\u0165 obr\\u00e1zok\",\n    \"Upload Image\": \"Nahra\\u0165 obr\\u00e1zok\",\n    \"By URL\": \"Z URL adresy\",\n    \"Browse\": \"Vybra\\u0165\",\n    \"Drop image\": \"Pretiahnite obr\\u00e1zok do tohto miesta\",\n    \"or click\": \"alebo kliknite a vlo\\u017ete\",\n    \"Manage Images\": \"Spr\\u00e1va obr\\u00e1zkov\",\n    \"Loading\": \"Nahr\\u00e1vam\",\n    \"Deleting\": \"Odstra\\u0148ujem\",\n    \"Tags\": \"Zna\\u010dky\",\n    \"Are you sure? Image will be deleted.\": \"Ste si ist\\u00fd? Obr\\u00e1zok bude odstranen\\u00fd.\",\n    \"Replace\": \"Vymeni\\u0165\",\n    \"Uploading\": \"Nahr\\u00e1vam\",\n    \"Loading image\": \"Obr\\u00e1zok se na\\u010d\\u00edtav\\u00e1\",\n    \"Display\": \"Zobrazi\\u0165\",\n    \"Inline\": \"Inline\",\n    \"Break Text\": \"Zalomenie textu\",\n    \"Alternative Text\": \"Alternat\\u00edvny text\",\n    \"Change Size\": \"Zmeni\\u0165 ve\\u013ekos\\u0165\",\n    \"Width\": \"\\u0165\\u00edrka\",\n    \"Height\": \"V\\u00fd\\u0161ka\",\n    \"Something went wrong. Please try again.\": \"Nie\\u010do sa pokazilo. Pros\\u00edm, sk\\u00faste to znova.\",\n    \"Image Caption\": \"Titulok obrázka\",\n    \"Advanced Edit\": \"Pokročilá úprava\",\n\n    // Video\n    \"Insert Video\": \"Vlo\\u017ei\\u0165 video\",\n    \"Embedded Code\": \"Vlo\\u017een\\u00fd k\\u00f3d\",\n    \"Paste in a video URL\": \"Vložte do adresy URL videa\",\n    \"Drop video\": \"Drop video\",\n    \"Your browser does not support HTML5 video.\": \"Váš prehliadač nepodporuje video html5.\",\n    \"Upload Video\": \"Nahrať video\",\n\n    // Tables\n    \"Insert Table\": \"Vlo\\u017ei\\u0165 tabu\\u013eku\",\n    \"Table Header\": \"Hlavi\\u010dka tabu\\u013eky\",\n    \"Remove Table\": \"Odstrani\\u0165 tabu\\u013eku\",\n    \"Table Style\": \"\\u0165t\\u00fdl tabu\\u013eky\",\n    \"Horizontal Align\": \"Horizont\\u00e1lne zarovnanie\",\n    \"Row\": \"Riadok\",\n    \"Insert row above\": \"Vlo\\u017ei\\u0165 riadok nad\",\n    \"Insert row below\": \"Vlo\\u017ei\\u0165 riadok pod\",\n    \"Delete row\": \"Odstrani\\u0165 riadok\",\n    \"Column\": \"St\\u013apec\",\n    \"Insert column before\": \"Vlo\\u017ei\\u0165 st\\u013apec v\\u013eavo\",\n    \"Insert column after\": \"Vlo\\u017ei\\u0165 st\\u013apec vpravo\",\n    \"Delete column\": \"Odstrani\\u0165 st\\u013apec\",\n    \"Cell\": \"Bunka\",\n    \"Merge cells\": \"Zl\\u00fa\\u010di\\u0165 bunky\",\n    \"Horizontal split\": \"Horizont\\u00e1lne rozdelenie\",\n    \"Vertical split\": \"Vertik\\u00e1lne rozdelenie\",\n    \"Cell Background\": \"Bunka pozadia\",\n    \"Vertical Align\": \"Vertik\\u00e1lne zarovn\\u00e1n\\u00ed\",\n    \"Top\": \"Vrch\",\n    \"Middle\": \"Stred\",\n    \"Bottom\": \"Spodok\",\n    \"Align Top\": \"Zarovnat na vrch\",\n    \"Align Middle\": \"Zarovnat na stred\",\n    \"Align Bottom\": \"Zarovnat na spodok\",\n    \"Cell Style\": \"\\u0165t\\u00fdl bunky\",\n\n    // Files\n    \"Upload File\": \"Nahra\\u0165 s\\u00fabor\",\n    \"Drop file\": \"Vlo\\u017ete s\\u00fabor sem\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikony\",\n    \"Grinning face\": \"Tv\\u00e1r s \\u00fasmevom\",\n    \"Grinning face with smiling eyes\": \"Tv\\u00e1r s \\u00fasmevom a o\\u010dami\",\n    \"Face with tears of joy\": \"Tv\\u00e1r so slzamy radosti\",\n    \"Smiling face with open mouth\": \"Usmievaj\\u00faci sa tv\\u00e1r s otvoren\\u00fdmi \\u00fastami\",\n    \"Smiling face with open mouth and smiling eyes\": \"Usmievaj\\u00faci sa tv\\u00e1r s otvoren\\u00fdmi \\u00fastami a o\\u010dami\",\n    \"Smiling face with open mouth and cold sweat\": \"Usmievaj\\u00faci sa tv\\u00e1r s otvoren\\u00fdmi \\u00fastami a studen\\u00fd pot\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Usmievaj\\u00faci sa tv\\u00e1r s otvoren\\u00fdmi \\u00fastami a zavret\\u00fdmi o\\u010dami\",\n    \"Smiling face with halo\": \"Usmievaj\\u00faci sa tv\\u00e1r s halo\",\n    \"Smiling face with horns\": \"Usmievaj\\u00faci sa tv\\u00e1r s rohmi\",\n    \"Winking face\": \"Mrkaj\\u00faca tv\\u00e1r\",\n    \"Smiling face with smiling eyes\": \"Usmievaj\\u00faci sa tv\\u00e1r a o\\u010dami\",\n    \"Face savoring delicious food\": \"Tv\\u00e1r vychutn\\u00e1vaj\\u00faca si chutn\\u00e9 jedlo\",\n    \"Relieved face\": \"Spokojn\\u00e1 tv\\u00e1r\",\n    \"Smiling face with heart-shaped eyes\": \"Usmievaj\\u00faci sa tv\\u00e1r s o\\u010dami v tvare srdca\",\n    \"Smiling face with sunglasses\": \"Usmievaj\\u00faci sa tv\\u00e1r so slne\\u010dn\\u00fdmi okuliarmi\",\n    \"Smirking face\": \"U\\u0161k\\u0155\\u0148aj\\u00faca sa tv\\u00e1r\",\n    \"Neutral face\": \"Neutr\\u00e1lna tva\\u0155\",\n    \"Expressionless face\": \"Bezv\\u00fdrazn\\u00e1 tv\\u00e1r\",\n    \"Unamused face\": \"Nepobaven\\u00e1 tv\\u00e1r\",\n    \"Face with cold sweat\": \"Tv\\u00e1r so studen\\u00fdm potom\",\n    \"Pensive face\": \"Zamyslen\\u00e1 tv\\u00e1r\",\n    \"Confused face\": \"Zmeten\\u00e1 tv\\u00e1r\",\n    \"Confounded face\": \"Nahnevan\\u00e1 tv\\u00e1r\",\n    \"Kissing face\": \"Bozkavaj\\u00faca tv\\u00e1r\",\n    \"Face throwing a kiss\": \"Tv\\u00e1r hadzaj\\u00faca pusu\",\n    \"Kissing face with smiling eyes\": \"Bozk\\u00e1vaj\\u00faca tv\\u00e1r s o\\u010dami a \\u00fasmevom\",\n    \"Kissing face with closed eyes\": \"Bozk\\u00e1vaj\\u00faca tv\\u00e1r so zavret\\u00fdmi o\\u010dami\",\n    \"Face with stuck out tongue\": \"Tv\\u00e1r s vyplazen\\u00fdm jazykom\",\n    \"Face with stuck out tongue and winking eye\": \"Mrkaj\\u00faca tv\\u00e1r s vyplazen\\u00fdm jazykom\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Tv\\u00e1r s vyplazen\\u00fdm jazykom a privret\\u00fdmi o\\u010dami\",\n    \"Disappointed face\": \"Sklaman\\u00e1 tv\\u00e1r\",\n    \"Worried face\": \"Obavaj\\u00faca se tv\\u00e1r\",\n    \"Angry face\": \"Nahnevan\\u00e1 tv\\u00e1r\",\n    \"Pouting face\": \"Na\\u0161pulen\\u00e1 tv\\u00e1r\",\n    \"Crying face\": \"Pla\\u010d\\u00faca tv\\u00e1r\",\n    \"Persevering face\": \"H\\u00fa\\u017eevnat\\u00e1 tv\\u00e1r\",\n    \"Face with look of triumph\": \"Tv\\u00e1r s v\\u00fdrazom v\\u00ed\\u0165aza\",\n    \"Disappointed but relieved face\": \"Sklaman\\u00e1 ale spokojn\\u00e1 tv\\u00e1r\",\n    \"Frowning face with open mouth\": \"Zamra\\u010den\\u00e1 tvar s otvoren\\u00fdmi \\u00fastami\",\n    \"Anguished face\": \"\\u00dazkostn\\u00e1 tv\\u00e1r\",\n    \"Fearful face\": \"Strachuj\\u00faca sa tv\\u00e1r\",\n    \"Weary face\": \"Unaven\\u00e1 tv\\u00e1r\",\n    \"Sleepy face\": \"Ospal\\u00e1 tv\\u00e1r\",\n    \"Tired face\": \"Unaven\\u00e1 tv\\u00e1r\",\n    \"Grimacing face\": \"Sv\\u00e1r s grimasou\",\n    \"Loudly crying face\": \"Nahlas pl\\u00e1\\u010d\\u00faca tv\\u00e1r\",\n    \"Face with open mouth\": \"Tv\\u00e1r s otvoren\\u00fdm \\u00fastami\",\n    \"Hushed face\": \"Ml\\u010diaca tv\\u00e1r\",\n    \"Face with open mouth and cold sweat\": \"Tv\\u00e1r s otvoren\\u00fdmi \\u00fastami a studen\\u00fdm potom\",\n    \"Face screaming in fear\": \"Tv\\u00e1r kri\\u010diaca strachom\",\n    \"Astonished face\": \"Tv\\u00e1r v \\u00fa\\u017ease\",\n    \"Flushed face\": \"S\\u010dervenanie v tv\\u00e1ri\",\n    \"Sleeping face\": \"Spiaca tv\\u00e1r\",\n    \"Dizzy face\": \"Tv\\u00e1r vyjadruj\\u00faca z\\u00e1vrat\",\n    \"Face without mouth\": \"Tv\\u00e1r bez \\u00fast\",\n    \"Face with medical mask\": \"Tv\\u00e1r s lek\\u00e1rskou maskou\",\n\n    // Line breaker\n    \"Break\": \"Zalomenie\",\n\n    // Math\n    \"Subscript\": \"Doln\\u00fd index\",\n    \"Superscript\": \"Horn\\u00fd index\",\n\n    // Full screen\n    \"Fullscreen\": \"Cel\\u00e1 obrazovka\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Vlo\\u017ei\\u0165 vodorovn\\u00fa \\u010diaru\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Vymaza\\u0165 formatovanie\",\n\n    // Save\n    \"Save\": \"\\u0055\\u006c\\u006f\\u017e\\u0069\\u0165\",\n\n    // Undo, redo\n    \"Undo\": \"Sp\\u00e4\\u0165\",\n    \"Redo\": \"Znova\",\n\n    // Select all\n    \"Select All\": \"Vybra\\u0165 v\\u0161etko\",\n\n    // Code view\n    \"Code View\": \"Zobrazi\\u0165 html k\\u00f3d\",\n\n    // Quote\n    \"Quote\": \"Cit\\u00e1t\",\n    \"Increase\": \"Nav\\u00fd\\u0161i\\u0165\",\n    \"Decrease\": \"Zn\\u00ed\\u017ei\\u0165\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Vlo\\u017ei\\u0165 zr\\u00fdchlene\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Špeciálne znaky\",\n    \"Latin\": \"Latinčina\",\n    \"Greek\": \"Grécky\",\n    \"Cyrillic\": \"Cyriliky\",\n    \"Punctuation\": \"Interpunkcia\",\n    \"Currency\": \"Mena\",\n    \"Arrows\": \"Šípky\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Vytlačiť\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Kontrola pravopisu\",\n\n    // Help\n    \"Help\": \"Pomoc\",\n    \"Shortcuts\": \"Skratky\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Zobraziť editor\",\n    \"Common actions\": \"Spoločné akcie\",\n    \"Copy\": \"Kópie\",\n    \"Cut\": \"Rez\",\n    \"Paste\": \"Pasta\",\n    \"Basic Formatting\": \"Základné formátovanie\",\n    \"Increase quote level\": \"Zvýšiť úroveň cenovej ponuky\",\n    \"Decrease quote level\": \"Znížiť úroveň cenovej ponuky\",\n    \"Image / Video\": \"Obrázok / video\",\n    \"Resize larger\": \"Zmena veľkosti\",\n    \"Resize smaller\": \"Meniť veľkosť\",\n    \"Table\": \"Stôl\",\n    \"Select table cell\": \"Vyberte bunku tabuľky\",\n    \"Extend selection one cell\": \"Rozšíriť výber jednej bunky\",\n    \"Extend selection one row\": \"Rozšíriť výber o jeden riadok\",\n    \"Navigation\": \"Navigácia\",\n    \"Focus popup / toolbar\": \"Zameranie / panel s nástrojmi\",\n    \"Return focus to previous position\": \"Vrátiť zaostrenie na predchádzajúcu pozíciu\",\n\n    // Embed.ly\n    \"Embed URL\": \"Vložiť adresu URL\",\n    \"Paste in a URL to embed\": \"Vložte do adresy URL, ktorú chcete vložiť\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Vložený obsah vychádza z dokumentu Microsoft Word. chcete formát uchovať alebo ho vyčistiť?\",\n    \"Keep\": \"Zachovať\",\n    \"Clean\": \"Čistý\",\n    \"Word Paste Detected\": \"Slovná vložka bola zistená\"\n  },\n  direction: \"ltr\"\n};\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/sl.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Slovenian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['sl'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Nekaj vtipkajte\",\n\n    // Basic formatting\n    \"Bold\": \"Krepko\",\n    \"Italic\": \"Poševno\",\n    \"Underline\": \"Podčrtano\",\n    \"Strikethrough\": \"Prečrtano\",\n\n    // Main buttons\n    \"Insert\": \"Vstavi\",\n    \"Delete\": \"Izbriši\",\n    \"Cancel\": \"Prekliči\",\n    \"OK\": \"OK\",\n    \"Back\": \"Nazaj\",\n    \"Remove\": \"Odstrani\",\n    \"More\": \"Več\",\n    \"Update\": \"Posodobi\",\n    \"Style\": \"Slog\",\n\n    // Font\n    \"Font Family\": \"Oblika pisave\",\n    \"Font Size\": \"Velikost pisave\",\n\n    // Colors\n    \"Colors\": \"Barve\",\n    \"Background\": \"Ozadje\",\n    \"Text\": \"Besedilo\",\n    \"HEX Color\": \"HEX barva\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Oblika odstavka\",\n    \"Normal\": \"Normalno\",\n    \"Code\": \"Koda\",\n    \"Heading 1\": \"Naslov 1\",\n    \"Heading 2\": \"Naslov 2\",\n    \"Heading 3\": \"Naslov 3\",\n    \"Heading 4\": \"Naslov 4\",\n\n    // Style\n    \"Paragraph Style\": \"Slog odstavka\",\n    \"Inline Style\": \"Vrstični slog\",\n\n    // Alignment\n    \"Align\": \"Poravnava\",\n    \"Align Left\": \"Leva poravnava\",\n    \"Align Center\": \"Sredinska poravnava\",\n    \"Align Right\": \"Desna poravnava\",\n    \"Align Justify\": \"Obojestranska poravnava\",\n    \"None\": \"Brez poravnave\",\n\n    // Lists\n    \"Ordered List\": \"Številčni seznam\",\n    \"Default\": \"Privzeto\",\n    \"Lower Alpha\": \"Latinica male\",\n    \"Lower Greek\": \"Grške male\",\n    \"Lower Roman\": \"Rimske male\",\n    \"Upper Alpha\": \"Latinica velike\",\n    \"Upper Roman\": \"Rimske velike\",\n\n    \"Unordered List\": \"Neštevilčni seznam\",\n    \"Circle\": \"Krog\",\n    \"Disc\": \"Disk\",\n    \"Square\": \"Kvadrat\",\n\n    // Line height\n    \"Line Height\": \"Višina vrstice\",\n    \"Single\": \"Enojna\",\n    \"Double\": \"Dvojna\",\n\n    // Indent\n    \"Decrease Indent\": \"Zmanjšaj zamik\",\n    \"Increase Indent\": \"Povečaj zamik\",\n\n    // Links\n    \"Insert Link\": \"Vstavi povezavo\",\n    \"Open in new tab\": \"Odpri povezavo v novem zavihku\",\n    \"Open Link\": \"Odpri povezavo\",\n    \"Edit Link\": \"Uredi povezavo\",\n    \"Unlink\": \"Odstrani povezavo\",\n    \"Choose Link\": \"Izberi povezavo\",\n\n    // Images\n    \"Insert Image\": \"Vstavi sliko\",\n    \"Upload Image\": \"Naloži sliko\",\n    \"By URL\": \"Iz URL povezave\",\n    \"Browse\": \"Prebrskaj\",\n    \"Drop image\": \"Spustite sliko sem\",\n    \"or click\": \"ali kliknite\",\n    \"Manage Images\": \"Urejaj slike\",\n    \"Loading\": \"Nalaganje\",\n    \"Deleting\": \"Brisanje\",\n    \"Tags\": \"Značke\",\n    \"Are you sure? Image will be deleted.\": \"Ali ste prepričani? Slika bo izbrisana.\",\n    \"Replace\": \"Zamenjaj\",\n    \"Uploading\": \"Nalaganje\",\n    \"Loading image\": \"Nalagam sliko\",\n    \"Display\": \"Prikaži\",\n    \"Inline\": \"Vrstično\",\n    \"Break Text\": \"Prelomi besedilo\",\n    \"Alternative Text\": \"Nadomestno besedilo\",\n    \"Change Size\": \"Spremeni velikost\",\n    \"Width\": \"Širina\",\n    \"Height\": \"Višina\",\n    \"Something went wrong. Please try again.\": \"Nekaj je šlo narobe. Prosimo, poskusite ponovno.\",\n    \"Image Caption\": \"Opis slike\",\n    \"Advanced Edit\": \"Napredno urejanje\",\n\n    // Video\n    \"Insert Video\": \"Vstavi video posnetek\",\n    \"Embedded Code\": \"Vdelana koda\",\n    \"Paste in a video URL\": \"Prilepite URL video posnetka\",\n    \"Drop video\": \"Spustite video posnetek sem\",\n    \"Your browser does not support HTML5 video.\": \"Vaš brskalnik ne podpira HTML5 video funkcionalnosti.\",\n    \"Upload Video\": \"Naloži video posnetek\",\n\n    // Tables\n    \"Insert Table\": \"Vstavi tabelo\",\n    \"Table Header\": \"Glava tabele\",\n    \"Remove Table\": \"Odstrani tabelo\",\n    \"Table Style\": \"Slog tabele\",\n    \"Horizontal Align\": \"Horizontalna poravnava\",\n    \"Row\": \"Vrstica\",\n    \"Insert row above\": \"Vstavi vrstico nad\",\n    \"Insert row below\": \"Vstavi vrstico pod\",\n    \"Delete row\": \"Izbriši vrstico\",\n    \"Column\": \"Stolpec\",\n    \"Insert column before\": \"Vstavi stolpec pred\",\n    \"Insert column after\": \"Vstavi stolpec po\",\n    \"Delete column\": \"Izbriši stolpec\",\n    \"Cell\": \"Celica\",\n    \"Merge cells\": \"Združi celice\",\n    \"Horizontal split\": \"Horizontalni razcep\",\n    \"Vertical split\": \"Vertikalni razcep\",\n    \"Cell Background\": \"Ozadje celice\",\n    \"Vertical Align\": \"Vertikalna poravnava\",\n    \"Top\": \"Vrh\",\n    \"Middle\": \"Sredina\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Vrhnja poravnava\",\n    \"Align Middle\": \"Sredinska poravnava\",\n    \"Align Bottom\": \"Spodnja poravnava\",\n    \"Cell Style\": \"Slog celice\",\n\n    // Files\n    \"Upload File\": \"Naloži datoteko\",\n    \"Drop file\": \"Spustite datoteko sem\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikoni\",\n\n    // Line breaker\n    \"Break\": \"Prelom\",\n\n    // Math\n    \"Subscript\": \"Podpisano\",\n    \"Superscript\": \"Nadpisano\",\n\n    // Full screen\n    \"Fullscreen\": \"Celozaslonski način\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Vstavi vodoravno črto\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Počisti oblikovanje\",\n\n    // Save\n    \"Save\": \"Shrani\",\n\n    // Undo, redo\n    \"Undo\": \"Razveljavi\",\n    \"Redo\": \"Ponovno uveljavi\",\n\n    // Select all\n    \"Select All\": \"Izberi vse\",\n\n    // Code view\n    \"Code View\": \"Pogled kode\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"Povečaj\",\n    \"Decrease\": \"Zmanjšaj\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Hitro vstavljanje\",\n\n    // Special Characters\n    \"Special Characters\": \"Posebni znaki\",\n    \"Latin\": \"Latinica\",\n    \"Greek\": \"Grščina\",\n    \"Cyrillic\": \"Cirilica\",\n    \"Punctuation\": \"Ločila\",\n    \"Currency\": \"Valute\",\n    \"Arrows\": \"Puščice\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Razno\",\n\n    // Print.\n    \"Print\": \"Natisni\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Črkovalnik\",\n\n    // Help\n    \"Help\": \"Pomoč\",\n    \"Shortcuts\": \"Bližnjice\",\n    \"Inline Editor\": \"Vdelani urejevalnik\",\n    \"Show the editor\": \"Pokaži urejevalnik\",\n    \"Common actions\": \"Skupna dejanja\",\n    \"Copy\": \"Kopiraj\",\n    \"Cut\": \"Izreži\",\n    \"Paste\": \"Prilepi\",\n    \"Basic Formatting\": \"Osnovno oblikovanje\",\n    \"Increase quote level\": \"Povečaj raven citata\",\n    \"Decrease quote level\": \"Zmanjšaj raven citata\",\n    \"Image / Video\": \"Slika / Video\",\n    \"Resize larger\": \"Povečaj\",\n    \"Resize smaller\": \"Pomanjšaj\",\n    \"Table\": \"Tabela\",\n    \"Select table cell\": \"Izberi celico tabele\",\n    \"Extend selection one cell\": \"Razširi izbor za eno celico\",\n    \"Extend selection one row\": \"Razširi izbor za eno vrstico\",\n    \"Navigation\": \"Navigacija\",\n    \"Focus popup / toolbar\": \"Fokusiraj pojavno okno / orodno vrstico\",\n    \"Return focus to previous position\": \"Vrni fokus v prejšnji položaj\",\n\n    // Embed.ly\n    \"Embed URL\": \"Vdelaj URL\",\n    \"Paste in a URL to embed\": \"Prilepite URL za vdelavo\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Prilepljena vsebina prihaja iz dokumenta Microsoft Word. Ali želite obliko obdržati ali jo želite očistiti?\",\n    \"Keep\": \"Obdrži\",\n    \"Clean\": \"Počisti\",\n    \"Word Paste Detected\": \"Zaznano je lepljenje s programa Word\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/sr.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Serbian (Latin)\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['sr'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ukucajte ne\\u0161tp\",\n\n    // Basic formatting\n    \"Bold\": \"Podebljan\",\n    \"Italic\": \"Isko\\u0161en\",\n    \"Underline\": \"Podvu\\u010deno\",\n    \"Strikethrough\": \"Precrtan\",\n\n    // Main buttons\n    \"Insert\": \"Umetanje\",\n    \"Delete\": \"Izbri\\u0161i\",\n    \"Cancel\": \"Otkazivanje\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Nazad\",\n    \"Remove\": \"Uklonite\",\n    \"More\": \"Vi\\u0161e\",\n    \"Update\": \"A\\u017euriranje\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Odaberi font\",\n    \"Font Size\": \"Veli\\u010dina fontova\",\n\n    // Colors\n    \"Colors\": \"Boje\",\n    \"Background\": \"Pozadina\",\n    \"Text\": \"Tekst\",\n    \"HEX Color\": \"HEX boje\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format pasusa\",\n    \"Normal\": \"Normalno\",\n    \"Code\": \"\\u0160ifra\",\n    \"Heading 1\": \"Naslov 1\",\n    \"Heading 2\": \"Naslov 2\",\n    \"Heading 3\": \"Naslov 3\",\n    \"Heading 4\": \"Naslov 4\",\n\n    // Style\n    \"Paragraph Style\": \"Stil pasusa\",\n    \"Inline Style\": \"Umetnutih stilova\",\n\n    // Alignment\n    \"Align\": \"Poravnavanje\",\n    \"Align Left\": \"Poravnaj levo\",\n    \"Align Center\": \"Poravnaj u centru\",\n    \"Align Right\": \"Poravnaj desno\",\n    \"Align Justify\": \"Obostrano poravnavanje\",\n    \"None\": \"Niko nije\",\n\n    // Lists\n    \"Ordered List\": \"Ure\\u0111enih lista\",\n    \"Default\": \"Уобичајено\",\n    \"Lower Alpha\": \"Нижи алфа\",\n    \"Lower Greek\": \"Лов греек\",\n    \"Lower Roman\": \"Ловер роман\",\n    \"Upper Alpha\": \"Уппер алпха\",\n    \"Upper Roman\": \"Уппер роман\",\n\n    \"Unordered List\": \"Neure\\u0111enu lista\",\n    \"Circle\": \"Круг\",\n    \"Disc\": \"Диск\",\n    \"Square\": \"Квадрат\",\n\n    // Line height\n    \"Line Height\": \"Висина линија\",\n    \"Single\": \"Једно\",\n    \"Double\": \"Доубле\",\n\n    // Indent\n    \"Decrease Indent\": \"Smanjivanje uvla\\u010denja\",\n    \"Increase Indent\": \"Pove\\u0107avanje uvla\\u010denja\",\n\n    // Links\n    \"Insert Link\": \"Umetni vezu\",\n    \"Open in new tab\": \"Otvori na novoj kartici\",\n    \"Open Link\": \"Otvori vezu\",\n    \"Edit Link\": \"Ure\\u0111ivanje veze\",\n    \"Unlink\": \"Ukloni vezu\",\n    \"Choose Link\": \"Odaberite vezu\",\n\n    // Images\n    \"Insert Image\": \"Umetanje slike\",\n    \"Upload Image\": \"Otpremanje slika\",\n    \"By URL\": \"Po URL adresi\",\n    \"Browse\": \"Potra\\u017ei\",\n    \"Drop image\": \"Baci sliku\",\n    \"or click\": \"ili kliknite na dugme\",\n    \"Manage Images\": \"Upravljanje slike\",\n    \"Loading\": \"U\\u010ditavanje\",\n    \"Deleting\": \"Brisanje\",\n    \"Tags\": \"Oznake\",\n    \"Are you sure? Image will be deleted.\": \"Jesi siguran? Slika \\u0107e biti izbrisana.\",\n    \"Replace\": \"Zameni\",\n    \"Uploading\": \"Otpremanje\",\n    \"Loading image\": \"U\\u010ditavanje slika\",\n    \"Display\": \"Prikaz\",\n    \"Inline\": \"Pri upisivanju\",\n    \"Break Text\": \"Prelom teksta\",\n    \"Alternative Text\": \"Alternativni tekst\",\n    \"Change Size\": \"Promena veli\\u010dine\",\n    \"Width\": \"\\u0160irina\",\n    \"Height\": \"Visina\",\n    \"Something went wrong. Please try again.\": \"Ne\\u0161to krenulo naopako. Poku\\u0161ajte ponovo.\",\n    \"Image Caption\": \"Slika natpisa\",\n    \"Advanced Edit\": \"Napredno uređivanje\",\n\n    // Video\n    \"Insert Video\": \"Umetanje video\",\n    \"Embedded Code\": \"Ugra\\u0111eni k\\u00f4d\",\n    \"Paste in a video URL\": \"Lepljenje u video URL\",\n    \"Drop video\": \"Baci snimak\",\n    \"Your browser does not support HTML5 video.\": \"Vaš pregledač ne podržava HTML5 video.\",\n    \"Upload Video\": \"Otpremanje video\",\n\n    // Tables\n    \"Insert Table\": \"Umetni tabelu\",\n    \"Table Header\": \"Zaglavlje tabele\",\n    \"Remove Table\": \"Uklanjanje tabele\",\n    \"Table Style\": \"Stil tabele\",\n    \"Horizontal Align\": \"Horizontalno poravnavanje\",\n    \"Row\": \"Red\",\n    \"Insert row above\": \"Umetni red iznad\",\n    \"Insert row below\": \"Umetni red ispod\",\n    \"Delete row\": \"Izbri\\u0161i red\",\n    \"Column\": \"Kolone\",\n    \"Insert column before\": \"Umetnite kolonu pre\",\n    \"Insert column after\": \"Umetnite kolonu nakon\",\n    \"Delete column\": \"Izbri\\u0161i kolone\",\n    \"Cell\": \"Mobilni\",\n    \"Merge cells\": \"Objedinjavanje \\u0107elija\",\n    \"Horizontal split\": \"Horizontalna split\",\n    \"Vertical split\": \"Vertikalno razdelite\",\n    \"Cell Background\": \"Mobilni pozadina\",\n    \"Vertical Align\": \"Vertikalno poravnavanje\",\n    \"Top\": \"Top\",\n    \"Middle\": \"Srednji\",\n    \"Bottom\": \"Dno\",\n    \"Align Top\": \"Poravnaj gore\",\n    \"Align Middle\": \"Poravnaj po sredini\",\n    \"Align Bottom\": \"Poravnaj dole\",\n    \"Cell Style\": \"Mobilni stil\",\n\n    // Files\n    \"Upload File\": \"Otpremanje datoteke\",\n    \"Drop file\": \"Baci datoteku\",\n\n    // Emoticons\n    \"Emoticons\": \"Emotikona\",\n    \"Grinning face\": \"Nasmejanoj lice\",\n    \"Grinning face with smiling eyes\": \"Nasmejanoj lice sa osmehom o\\u010di\",\n    \"Face with tears of joy\": \"Suo\\u010davaju sa suzama radosnicama\",\n    \"Smiling face with open mouth\": \"Nasmejano lice sa otvorenim ustima\",\n    \"Smiling face with open mouth and smiling eyes\": \"Lica sa otvorenim ustima i nasmejani o\\u010di\",\n    \"Smiling face with open mouth and cold sweat\": \"Nasmejano lice sa otvorenih usta i hladan znoj\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Nasmejano lice otvorenih usta i \\u010dvrsto zatvorenih o\\u010diju\",\n    \"Smiling face with halo\": \"Nasmejano lice sa oreolom\",\n    \"Smiling face with horns\": \"Nasmejano lice sa rogovima\",\n    \"Winking face\": \"Namigivanje lice\",\n    \"Smiling face with smiling eyes\": \"Lica sa osmehom o\\u010di\",\n    \"Face savoring delicious food\": \"Lice u\\u045bivaju\\u0436i u ukusnu hranu\",\n    \"Relieved face\": \"Laknulo lice\",\n    \"Smiling face with heart-shaped eyes\": \"Nasmejano lice sa o\\u010dima u obliku srca\",\n    \"Smiling face with sunglasses\": \"Nasmejano lice sa nao\\u010dare\",\n    \"Smirking face\": \"Rugaju\\u0436i lice\",\n    \"Neutral face\": \"Neutralno lice\",\n    \"Expressionless face\": \"Bez izraza lica.\",\n    \"Unamused face\": \"Nije zapaljen lice\",\n    \"Face with cold sweat\": \"Suo\\u010davaju sa hladnim znojem\",\n    \"Pensive face\": \"Nevesela lica\",\n    \"Confused face\": \"Zbunjeno lice\",\n    \"Confounded face\": \"Dosadnih lice\",\n    \"Kissing face\": \"Ljubim lice\",\n    \"Face throwing a kiss\": \"Lice baca poljubac\",\n    \"Kissing face with smiling eyes\": \"Ljubi lice sa osmehom o\\u010di\",\n    \"Kissing face with closed eyes\": \"Ljubi lice sa zatvorenim o\\u010dima\",\n    \"Face with stuck out tongue\": \"Lice sa zaglavio jezik\",\n    \"Face with stuck out tongue and winking eye\": \"Lice sa zaglavljen jezik i namigivanje\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Lice sa zaglavljen jezik i cvrsto zatvorene o\\u010di\",\n    \"Disappointed face\": \"Razo\\u010darani lice\",\n    \"Worried face\": \"Zabrinuto lice\",\n    \"Angry face\": \"Ljut lice\",\n    \"Pouting face\": \"Zlovoljan lice\",\n    \"Crying face\": \"Plakanje lice\",\n    \"Persevering face\": \"Istrajnog lice\",\n    \"Face with look of triumph\": \"Suo\\u010davaju sa izgledom trijumfa\",\n    \"Disappointed but relieved face\": \"Razo\\u010daran ali laknulo lice\",\n    \"Frowning face with open mouth\": \"Namršten lice sa otvorenim ustima\",\n    \"Anguished face\": \"Enih lica\",\n    \"Fearful face\": \"Strahu lice\",\n    \"Weary face\": \"Umorna lica\",\n    \"Sleepy face\": \"Spava mi se lice\",\n    \"Tired face\": \"Umorna lica\",\n    \"Grimacing face\": \"Klupi lice\",\n    \"Loudly crying face\": \"Glasno plakanje lice\",\n    \"Face with open mouth\": \"Suo\\u010davaju sa otvorenim ustima\",\n    \"Hushed face\": \"Tihim lice\",\n    \"Face with open mouth and cold sweat\": \"Suo\\u010davaju sa otvorenih usta i hladan znoj\",\n    \"Face screaming in fear\": \"Lice vrisak u strahu\",\n    \"Astonished face\": \"Zadivljeni lice\",\n    \"Flushed face\": \"Uplakanu lice\",\n    \"Sleeping face\": \"Pospanog lica\",\n    \"Dizzy face\": \"Lice mi se vrti\",\n    \"Face without mouth\": \"Lice bez jezika\",\n    \"Face with medical mask\": \"Suo\\u010davaju sa medicinskim masku\",\n\n    // Line breaker\n    \"Break\": \"Prelom\",\n\n    // Math\n    \"Subscript\": \"Indeksni tekst\",\n    \"Superscript\": \"Eksponentni tekst\",\n\n    // Full screen\n    \"Fullscreen\": \"Puni ekran\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Umetni horizontalnu liniju\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Brisanje oblikovanja\",\n\n    // Save\n    \"Save\": \"\\u0441\\u0430\\u0447\\u0443\\u0432\\u0430\\u0442\\u0438\",\n\n    // Undo, redo\n    \"Undo\": \"Opozovi radnju\",\n    \"Redo\": \"Ponavljanje\",\n\n    // Select all\n    \"Select All\": \"Izaberi sve\",\n\n    // Code view\n    \"Code View\": \"Prikaz koda\",\n\n    // Quote\n    \"Quote\": \"Ponude\",\n    \"Increase\": \"Pove\\u0107anje\",\n    \"Decrease\": \"Smanjivanje\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Brzo umetanje\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Specijalni znakovi\",\n    \"Latin\": \"Latino\",\n    \"Greek\": \"Grk\",\n    \"Cyrillic\": \"Ćirilica\",\n    \"Punctuation\": \"Interpunkcije\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Strelice\",\n    \"Math\": \"Matematika\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Odštampaj\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Kontrolor pravopisa\",\n\n    // Help\n    \"Help\": \"Pomoć\",\n    \"Shortcuts\": \"Prečice\",\n    \"Inline Editor\": \"Pri upisivanju Editor\",\n    \"Show the editor\": \"Prikaži urednik\",\n    \"Common actions\": \"Zajedničke akcije\",\n    \"Copy\": \"Kopija\",\n    \"Cut\": \"Rez\",\n    \"Paste\": \"Nalepi\",\n    \"Basic Formatting\": \"Osnovno oblikovanje\",\n    \"Increase quote level\": \"Povećati ponudu za nivo\",\n    \"Decrease quote level\": \"Smanjenje ponude nivo\",\n    \"Image / Video\": \"Slika / Video\",\n    \"Resize larger\": \"Veće veličine\",\n    \"Resize smaller\": \"Promena veličine manji\",\n    \"Table\": \"Sto\",\n    \"Select table cell\": \"Select ćelije\",\n    \"Extend selection one cell\": \"Proširite selekciju jednu ćeliju\",\n    \"Extend selection one row\": \"Proširite selekciju jedan red\",\n    \"Navigation\": \"Navigacija\",\n    \"Focus popup / toolbar\": \"Fokus Iskačući meni / traka sa alatkama\",\n    \"Return focus to previous position\": \"Vratiti fokus na prethodnu poziciju\",\n\n    // Embed.ly\n    \"Embed URL\": \"Ugradite URL\",\n    \"Paste in a URL to embed\": \"Nalepite URL adresu da biste ugradili\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Nalepljeni sadržaj dolazi iz Microsoft Word dokument. Da li želite zadržati u formatu ili počistiti?\",\n    \"Keep\": \"Nastavi\",\n    \"Clean\": \"Oиisti\",\n    \"Word Paste Detected\": \"Word Nalepi otkriven\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/sv.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Swedish\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['sv'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Ange n\\u00e5got\",\n\n    // Basic formatting\n    \"Bold\": \"Fetstil\",\n    \"Italic\": \"Kursiv stil\",\n    \"Underline\": \"Understruken\",\n    \"Strikethrough\": \"Genomstruken\",\n\n    // Main buttons\n    \"Insert\": \"Infoga\",\n    \"Delete\": \"Radera\",\n    \"Cancel\": \"Avbryt\",\n    \"OK\": \"Ok\",\n    \"Back\": \"Tillbaka\",\n    \"Remove\": \"Ta bort\",\n    \"More\": \"Mer\",\n    \"Update\": \"Uppdatera\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Teckensnitt\",\n    \"Font Size\": \"Teckenstorlek\",\n\n    // Colors\n    \"Colors\": \"F\\u00e4rger\",\n    \"Background\": \"Bakgrund\",\n    \"Text\": \"Text\",\n    \"HEX Color\": \"Hex färg\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Format\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kod\",\n    \"Heading 1\": \"Rubrik 1\",\n    \"Heading 2\": \"Rubrik 2\",\n    \"Heading 3\": \"Rubrik 3\",\n    \"Heading 4\": \"Rubrik 4\",\n\n    // Style\n    \"Paragraph Style\": \"Styckesformat\",\n    \"Inline Style\": \"Infogad stil\",\n\n    // Alignment\n    \"Align\": \"Justera\",\n    \"Align Left\": \"Vänsterjustera\",\n    \"Align Center\": \"Centrera\",\n    \"Align Right\": \"Högerjustera\",\n    \"Align Justify\": \"Justera\",\n    \"None\": \"Inget\",\n\n    // Lists\n    \"Ordered List\": \"Ordnad lista\",\n    \"Default\": \"Standard\",\n    \"Lower Alpha\": \"Lägre alfa\",\n    \"Lower Greek\": \"Lägre grekiska\",\n    \"Lower Roman\": \"Lägre roman\",\n    \"Upper Alpha\": \"Övre alfa\",\n    \"Upper Roman\": \"Övre roman\",\n\n    \"Unordered List\": \"Oordnad lista\",\n    \"Circle\": \"Cirkel\",\n    \"Disc\": \"Skiva\",\n    \"Square\": \"Fyrkant\",\n\n    // Line height\n    \"Line Height\": \"Radavstånd\",\n    \"Single\": \"Enda\",\n    \"Double\": \"Dubbel\",\n\n    // Indent\n    \"Decrease Indent\": \"Minska indrag\",\n    \"Increase Indent\": \"\\u00d6ka indrag\",\n\n    // Links\n    \"Insert Link\": \"Infoga l\\u00e4nk\",\n    \"Open in new tab\": \"\\u00d6ppna i ny flik\",\n    \"Open Link\": \"\\u00d6ppna l\\u00e4nk\",\n    \"Edit Link\": \"Redigera l\\u00e4nk\",\n    \"Unlink\": \"Ta bort l\\u00e4nk\",\n    \"Choose Link\": \"V\\u00e4lj l\\u00e4nk\",\n\n    // Images\n    \"Insert Image\": \"Infoga bild\",\n    \"Upload Image\": \"Ladda upp en bild\",\n    \"By URL\": \"Genom URL\",\n    \"Browse\": \"Bl\\u00e4ddra\",\n    \"Drop image\": \"Sl\\u00e4pp bild\",\n    \"or click\": \"eller klicka\",\n    \"Manage Images\": \"Hantera bilder\",\n    \"Loading\": \"Laddar\",\n    \"Deleting\": \"Raderar\",\n    \"Tags\": \"Etiketter\",\n    \"Are you sure? Image will be deleted.\": \"\\u00c4r du s\\u00e4ker? Bild kommer att raderas.\",\n    \"Replace\": \"Ers\\u00e4tt\",\n    \"Uploading\": \"Laddar up\",\n    \"Loading image\": \"Laddar bild\",\n    \"Display\": \"Visa\",\n    \"Inline\": \"I linje\",\n    \"Break Text\": \"Bryt text\",\n    \"Alternative Text\": \"Alternativ text\",\n    \"Change Size\": \"\\u00c4ndra storlek\",\n    \"Width\": \"Bredd\",\n    \"Height\": \"H\\u00f6jd\",\n    \"Something went wrong. Please try again.\": \"N\\u00e5got gick fel. Var god f\\u00f6rs\\u00f6k igen.\",\n    \"Image Caption\": \"Bildtext\",\n    \"Advanced Edit\": \"Avancerad redigering\",\n\n    // Video\n    \"Insert Video\": \"Infoga video\",\n    \"Embedded Code\": \"Inb\\u00e4ddad kod\",\n    \"Paste in a video URL\": \"Klistra in i en video url\",\n    \"Drop video\": \"Släpp video\",\n    \"Your browser does not support HTML5 video.\": \"Din webbläsare stöder inte html5-video.\",\n    \"Upload Video\": \"Ladda upp video\",\n\n    // Tables\n    \"Insert Table\": \"Infoga tabell\",\n    \"Table Header\": \"Tabell huvud\",\n    \"Remove Table\": \"Ta bort tabellen\",\n    \"Table Style\": \"Tabellformat\",\n    \"Horizontal Align\": \"Horisontell justering\",\n    \"Row\": \"Rad\",\n    \"Insert row above\": \"Infoga rad f\\u00f6re\",\n    \"Insert row below\": \"Infoga rad efter\",\n    \"Delete row\": \"Ta bort rad\",\n    \"Column\": \"Kolumn\",\n    \"Insert column before\": \"Infoga kollumn f\\u00f6re\",\n    \"Insert column after\": \"Infoga kolumn efter\",\n    \"Delete column\": \"Ta bort kolumn\",\n    \"Cell\": \"Cell\",\n    \"Merge cells\": \"Sammanfoga celler\",\n    \"Horizontal split\": \"Dela horisontellt\",\n    \"Vertical split\": \"Dela vertikalt\",\n    \"Cell Background\": \"Cellbakgrund\",\n    \"Vertical Align\": \"Vertikal justering\",\n    \"Top\": \"Överst\",\n    \"Middle\": \"Mitten\",\n    \"Bottom\": \"Nederst\",\n    \"Align Top\": \"Justera överst\",\n    \"Align Middle\": \"Justera mitten\",\n    \"Align Bottom\": \"Justera nederst\",\n    \"Cell Style\": \"Cellformat\",\n\n    // Files\n    \"Upload File\": \"Ladda upp fil\",\n    \"Drop file\": \"Sl\\u00e4pp fil\",\n\n    // Emoticons\n    \"Emoticons\": \"Uttryckssymboler\",\n    \"Grinning face\": \"Grina ansikte\",\n    \"Grinning face with smiling eyes\": \"Grina ansikte med leende \\u00f6gon\",\n    \"Face with tears of joy\": \"Face med gl\\u00e4djet\\u00e5rar\",\n    \"Smiling face with open mouth\": \"Leende ansikte med \\u00f6ppen mun\",\n    \"Smiling face with open mouth and smiling eyes\": \"Leende ansikte med \\u00f6ppen mun och leende \\u00f6gon\",\n    \"Smiling face with open mouth and cold sweat\": \"Leende ansikte med \\u00f6ppen mun och kallsvett\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"Leende ansikte med \\u00f6ppen mun och t\\u00e4tt slutna \\u00f6gon\",\n    \"Smiling face with halo\": \"Leende ansikte med halo\",\n    \"Smiling face with horns\": \"Leende ansikte med horn\",\n    \"Winking face\": \"Blinka ansikte\",\n    \"Smiling face with smiling eyes\": \"Leende ansikte med leende \\u00f6gon\",\n    \"Face savoring delicious food\": \"Ansikte smaka uts\\u00f6kt mat\",\n    \"Relieved face\": \"L\\u00e4ttad ansikte\",\n    \"Smiling face with heart-shaped eyes\": \"Leende ansikte med hj\\u00e4rtformade \\u00f6gon\",\n    \"Smiling face with sunglasses\": \"Leende ansikte med solglas\\u00f6gon\",\n    \"Smirking face\": \"Flinande ansikte\",\n    \"Neutral face\": \"Neutral ansikte\",\n    \"Expressionless face\": \"Uttryckslöst ansikte\",\n    \"Unamused face\": \"Inte roade ansikte\",\n    \"Face with cold sweat\": \"Ansikte med kallsvett\",\n    \"Pensive face\": \"Eftert\\u00e4nksamt ansikte\",\n    \"Confused face\": \"F\\u00f6rvirrad ansikte\",\n    \"Confounded face\": \"F\\u00f6rbryllade ansikte\",\n    \"Kissing face\": \"Kyssande ansikte\",\n    \"Face throwing a kiss\": \"Ansikte kasta en kyss\",\n    \"Kissing face with smiling eyes\": \"Kyssa ansikte med leende \\u00f6gon\",\n    \"Kissing face with closed eyes\": \"Kyssa ansikte med slutna \\u00f6gon\",\n    \"Face with stuck out tongue\": \"Ansikte med stack ut tungan\",\n    \"Face with stuck out tongue and winking eye\": \"Ansikte med stack ut tungan och blinkande \\u00f6ga\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Ansikte med stack ut tungan och t\\u00e4tt slutna \\u00f6gon\",\n    \"Disappointed face\": \"Besviken ansikte\",\n    \"Worried face\": \"Orolig ansikte\",\n    \"Angry face\": \"Argt ansikte\",\n    \"Pouting face\": \"Sk\\u00e4ggtorsk ansikte\",\n    \"Crying face\": \"Gr\\u00e5tande ansikte\",\n    \"Persevering face\": \"Uth\\u00e5llig ansikte\",\n    \"Face with look of triumph\": \"Ansikte med utseendet p\\u00e5 triumf\",\n    \"Disappointed but relieved face\": \"Besviken men l\\u00e4ttad ansikte\",\n    \"Frowning face with open mouth\": \"Rynkar pannan ansikte med \\u00f6ppen mun\",\n    \"Anguished face\": \"\\u00c5ngest ansikte\",\n    \"Fearful face\": \"R\\u00e4dda ansikte\",\n    \"Weary face\": \"Tr\\u00f6tta ansikte\",\n    \"Sleepy face\": \"S\\u00f6mnig ansikte\",\n    \"Tired face\": \"Tr\\u00f6tt ansikte\",\n    \"Grimacing face\": \"Grimaserande ansikte\",\n    \"Loudly crying face\": \"H\\u00f6gt gr\\u00e5tande ansikte\",\n    \"Face with open mouth\": \"Ansikte med \\u00f6ppen mun\",\n    \"Hushed face\": \"D\\u00e4mpade ansikte\",\n    \"Face with open mouth and cold sweat\": \"Ansikte med \\u00f6ppen mun och kallsvett\",\n    \"Face screaming in fear\": \"Face skriker i skr\\u00e4ck\",\n    \"Astonished face\": \"F\\u00f6rv\\u00e5nad ansikte\",\n    \"Flushed face\": \"Ansiktsrodnad\",\n    \"Sleeping face\": \"Sovande anskite\",\n    \"Dizzy face\": \"Yr ansikte\",\n    \"Face without mouth\": \"Ansikte utan mun\",\n    \"Face with medical mask\": \"Ansikte med medicinsk maskera\",\n\n    // Line breaker\n    \"Break\": \"Ny rad\",\n\n    // Math\n    \"Subscript\": \"Neds\\u00e4nkt\",\n    \"Superscript\": \"Upph\\u00f6jd\",\n\n    // Full screen\n    \"Fullscreen\": \"Helsk\\u00e4rm\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Infoga horisontell linje\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Ta bort formatering\",\n\n    // Save\n    \"Save\": \"Spara\",\n\n    // Undo, redo\n    \"Undo\": \"\\u00c5ngra\",\n    \"Redo\": \"G\\u00f6r om\",\n\n    // Select all\n    \"Select All\": \"Markera allt\",\n\n    // Code view\n    \"Code View\": \"Kodvy\",\n\n    // Quote\n    \"Quote\": \"Citat\",\n    \"Increase\": \"\\u00d6ka\",\n    \"Decrease\": \"Minska\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Snabbinfoga\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Specialtecken\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Grekisk\",\n    \"Cyrillic\": \"Cyrillic\",\n    \"Punctuation\": \"Skiljetecken\",\n    \"Currency\": \"Valuta\",\n    \"Arrows\": \"Pilar\",\n    \"Math\": \"Matematik\",\n    \"Misc\": \"Övrigt\",\n\n    // Print.\n    \"Print\": \"Skriva ut\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Stavningskontroll\",\n\n    // Help\n    \"Help\": \"Hjälp\",\n    \"Shortcuts\": \"Genvägar\",\n    \"Inline Editor\": \"Inline editor\",\n    \"Show the editor\": \"Visa redigeraren\",\n    \"Common actions\": \"Vanliga kommandon\",\n    \"Copy\": \"Kopiera\",\n    \"Cut\": \"Klipp ut\",\n    \"Paste\": \"Klistra in\",\n    \"Basic Formatting\": \"Grundläggande formatering\",\n    \"Increase quote level\": \"Öka citatnivå\",\n    \"Decrease quote level\": \"Minska citatnivå\",\n    \"Image / Video\": \"Bild / video\",\n    \"Resize larger\": \"Öka storlek\",\n    \"Resize smaller\": \"Minska storlek\",\n    \"Table\": \"Tabell\",\n    \"Select table cell\": \"Markera tabellcell\",\n    \"Extend selection one cell\": \"Utöka markering en cell\",\n    \"Extend selection one row\": \"Utöka markering en rad\",\n    \"Navigation\": \"Navigering\",\n    \"Focus popup / toolbar\": \"Fokusera popup / verktygsfältet\",\n    \"Return focus to previous position\": \"Byt fokus till föregående plats\",\n\n    // Embed.ly\n    \"Embed URL\": \"Bädda in url\",\n    \"Paste in a URL to embed\": \"Klistra in i en url för att bädda in\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Den inklippta texten kommer från ett Microsoft Word-dokument. Vill du behålla formateringen eller städa upp det?\",\n    \"Keep\": \"Behåll\",\n    \"Clean\": \"Städa upp\",\n    \"Word Paste Detected\": \"Urklipp från Word upptäckt\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/th.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Thai\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['th'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u0e1e\\u0e34\\u0e21\\u0e1e\\u0e4c\\u0e1a\\u0e32\\u0e07\\u0e2a\\u0e34\\u0e48\\u0e07\\u0e1a\\u0e32\\u0e07\\u0e2d\\u0e22\\u0e48\\u0e32\\u0e07\",\n\n    // Basic formatting\n    \"Bold\": \"\\u0e15\\u0e31\\u0e27\\u0e2b\\u0e19\\u0e32\",\n    \"Italic\": \"\\u0e15\\u0e31\\u0e27\\u0e40\\u0e2d\\u0e35\\u0e22\\u0e07\",\n    \"Underline\": \"\\u0e02\\u0e35\\u0e14\\u0e40\\u0e2a\\u0e49\\u0e19\\u0e43\\u0e15\\u0e49\",\n    \"Strikethrough\": \"\\u0e02\\u0e35\\u0e14\\u0e17\\u0e31\\u0e1a\",\n\n    // Main buttons\n    \"Insert\": \"\\u0e41\\u0e17\\u0e23\\u0e01\",\n    \"Delete\": \"\\u0e25\\u0e1a\",\n    \"Cancel\": \"\\u0e22\\u0e01\\u0e40\\u0e25\\u0e34\\u0e01\",\n    \"OK\": \"\\u0e15\\u0e01\\u0e25\\u0e07\",\n    \"Back\": \"\\u0e01\\u0e25\\u0e31\\u0e1a\",\n    \"Remove\": \"\\u0e40\\u0e2d\\u0e32\\u0e2d\\u0e2d\\u0e01\",\n    \"More\": \"\\u0e21\\u0e32\\u0e01\\u0e01\\u0e27\\u0e48\\u0e32\",\n    \"Update\": \"\\u0e2d\\u0e31\\u0e1e\\u0e40\\u0e14\\u0e17\",\n    \"Style\": \"\\u0e2a\\u0e44\\u0e15\\u0e25\\u0e4c\",\n\n    // Font\n    \"Font Family\": \"\\u0e15\\u0e23\\u0e30\\u0e01\\u0e39\\u0e25\\u0e41\\u0e1a\\u0e1a\\u0e2d\\u0e31\\u0e01\\u0e29\\u0e23\",\n    \"Font Size\": \"\\u0e02\\u0e19\\u0e32\\u0e14\\u0e41\\u0e1a\\u0e1a\\u0e2d\\u0e31\\u0e01\\u0e29\\u0e23\",\n\n    // Colors\n    \"Colors\": \"\\u0e2a\\u0e35\",\n    \"Background\": \"\\u0e1e\\u0e37\\u0e49\\u0e19\\u0e2b\\u0e25\\u0e31\\u0e07\",\n    \"Text\": \"\\u0e02\\u0e49\\u0e2d\\u0e04\\u0e27\\u0e32\\u0e21\",\n    \"HEX Color\": \"สีฐานสิบหก\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\",\n    \"Normal\": \"\\u0e1b\\u0e01\\u0e15\\u0e34\",\n    \"Code\": \"\\u0e42\\u0e04\\u0e49\\u0e14\",\n    \"Heading 1\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27 1\",\n    \"Heading 2\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27 2\",\n    \"Heading 3\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27 3\",\n    \"Heading 4\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u0e25\\u0e31\\u0e01\\u0e29\\u0e13\\u0e30\\u0e22\\u0e48\\u0e2d\\u0e2b\\u0e19\\u0e49\\u0e32\",\n    \"Inline Style\": \"\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\\u0e2d\\u0e34\\u0e19\\u0e44\\u0e25\\u0e19\\u0e4c\",\n\n    // Alignment\n    \"Align\": \"\\u0e01\\u0e32\\u0e23\\u0e08\\u0e31\\u0e14\\u0e41\\u0e19\\u0e27\",\n    \"Align Left\": \"\\u0e08\\u0e31\\u0e14\\u0e0a\\u0e34\\u0e14\\u0e0b\\u0e49\\u0e32\\u0e22\",\n    \"Align Center\": \"\\u0e08\\u0e31\\u0e14\\u0e01\\u0e36\\u0e48\\u0e07\\u0e01\\u0e25\\u0e32\\u0e07\",\n    \"Align Right\": \"\\u0e08\\u0e31\\u0e14\\u0e0a\\u0e34\\u0e14\\u0e02\\u0e27\\u0e32\",\n    \"Align Justify\": \"\\u0e40\\u0e15\\u0e47\\u0e21\\u0e41\\u0e19\\u0e27\",\n    \"None\": \"\\u0e44\\u0e21\\u0e48\",\n\n    // Lists\n    \"Ordered List\": \"\\u0e23\\u0e32\\u0e22\\u0e01\\u0e32\\u0e23\\u0e25\\u0e33\\u0e14\\u0e31\\u0e1a\\u0e40\\u0e25\\u0e02\",\n    \"Default\": \"ค่าเริ่มต้น\",\n    \"Lower Alpha\": \"อัลฟาตอนล่าง\",\n    \"Lower Greek\": \"กรีกต่ำกว่า\",\n    \"Lower Roman\": \"โรมันล่าง\",\n    \"Upper Alpha\": \"อัลฟาตอนบน\",\n    \"Upper Roman\": \"โรมันตอนบน\",\n\n    \"Unordered List\": \"\\u0e23\\u0e32\\u0e22\\u0e01\\u0e32\\u0e23\\u0e2a\\u0e31\\u0e0d\\u0e25\\u0e31\\u0e01\\u0e29\\u0e13\\u0e4c\\u0e2b\\u0e31\\u0e27\\u0e02\\u0e49\\u0e2d\\u0e22\\u0e48\\u0e2d\\u0e22\",\n    \"Circle\": \"วงกลม\",\n    \"Disc\": \"จาน\",\n    \"Square\": \"สี่เหลี่ยม\",\n\n    // Line height\n    \"Line Height\": \"ความสูงของบรรทัด\",\n    \"Single\": \"เดียว\",\n    \"Double\": \"สอง\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u0e25\\u0e14\\u0e01\\u0e32\\u0e23\\u0e40\\u0e22\\u0e37\\u0e49\\u0e2d\\u0e07\",\n    \"Increase Indent\": \"\\u0e40\\u0e1e\\u0e34\\u0e48\\u0e21\\u0e01\\u0e32\\u0e23\\u0e40\\u0e22\\u0e37\\u0e49\\u0e2d\\u0e07\",\n\n    // Links\n    \"Insert Link\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e25\\u0e34\\u0e07\\u0e01\\u0e4c\",\n    \"Open in new tab\": \"\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e43\\u0e19\\u0e41\\u0e17\\u0e47\\u0e1a\\u0e43\\u0e2b\\u0e21\\u0e48\",\n    \"Open Link\": \"\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e25\\u0e34\\u0e49\\u0e07\\u0e04\\u0e4c\",\n    \"Edit Link\": \"\\u0e25\\u0e34\\u0e07\\u0e04\\u0e4c\\u0e41\\u0e01\\u0e49\\u0e44\\u0e02\",\n    \"Unlink\": \"\\u0e40\\u0e2d\\u0e32\\u0e25\\u0e34\\u0e07\\u0e01\\u0e4c\\u0e2d\\u0e2d\\u0e01\",\n    \"Choose Link\": \"\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e01\\u0e32\\u0e23\\u0e40\\u0e0a\\u0e37\\u0e48\\u0e2d\\u0e21\\u0e42\\u0e22\\u0e07\",\n\n    // Images\n    \"Insert Image\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e23\\u0e39\\u0e1b\\u0e20\\u0e32\\u0e1e\",\n    \"Upload Image\": \"\\u0e01\\u0e32\\u0e23\\u0e2d\\u0e31\\u0e1b\\u0e42\\u0e2b\\u0e25\\u0e14\\u0e20\\u0e32\\u0e1e\",\n    \"By URL\": \"\\u0e15\\u0e32\\u0e21 URL\",\n    \"Browse\": \"\\u0e40\\u0e23\\u0e35\\u0e22\\u0e01\\u0e14\\u0e39\",\n    \"Drop image\": \"\\u0e27\\u0e32\\u0e07\\u0e20\\u0e32\\u0e1e\",\n    \"or click\": \"\\u0e2b\\u0e23\\u0e37\\u0e2d\\u0e04\\u0e25\\u0e34\\u0e01\\u0e17\\u0e35\\u0e48\",\n    \"Manage Images\": \"\\u0e08\\u0e31\\u0e14\\u0e01\\u0e32\\u0e23\\u0e20\\u0e32\\u0e1e\",\n    \"Loading\": \"\\u0e42\\u0e2b\\u0e25\\u0e14\",\n    \"Deleting\": \"\\u0e25\\u0e1a\",\n    \"Tags\": \"\\u0e41\\u0e17\\u0e47\\u0e01\",\n    \"Are you sure? Image will be deleted.\": \"\\u0e04\\u0e38\\u0e13\\u0e41\\u0e19\\u0e48\\u0e43\\u0e08\\u0e2b\\u0e23\\u0e37\\u0e2d\\u0e44\\u0e21\\u0e48 \\u0e20\\u0e32\\u0e1e\\u0e08\\u0e30\\u0e16\\u0e39\\u0e01\\u0e25\\u0e1a\",\n    \"Replace\": \"\\u0e41\\u0e17\\u0e19\\u0e17\\u0e35\\u0e48\",\n    \"Uploading\": \"\\u0e2d\\u0e31\\u0e1e\\u0e42\\u0e2b\\u0e25\\u0e14\",\n    \"Loading image\": \"\\u0e42\\u0e2b\\u0e25\\u0e14\\u0e20\\u0e32\\u0e1e\",\n    \"Display\": \"\\u0e41\\u0e2a\\u0e14\\u0e07\",\n    \"Inline\": \"\\u0e41\\u0e1a\\u0e1a\\u0e2d\\u0e34\\u0e19\\u0e44\\u0e25\\u0e19\\u0e4c\",\n    \"Break Text\": \"\\u0e02\\u0e49\\u0e2d\\u0e04\\u0e27\\u0e32\\u0e21\\u0e2b\\u0e22\\u0e38\\u0e14\",\n    \"Alternative Text\": \"\\u0e02\\u0e49\\u0e2d\\u0e04\\u0e27\\u0e32\\u0e21\\u0e2d\\u0e37\\u0e48\\u0e19\",\n    \"Change Size\": \"\\u0e40\\u0e1b\\u0e25\\u0e35\\u0e48\\u0e22\\u0e19\\u0e02\\u0e19\\u0e32\\u0e14\",\n    \"Width\": \"\\u0e04\\u0e27\\u0e32\\u0e21\\u0e01\\u0e27\\u0e49\\u0e32\\u0e07\",\n    \"Height\": \"\\u0e04\\u0e27\\u0e32\\u0e21\\u0e2a\\u0e39\\u0e07\",\n    \"Something went wrong. Please try again.\": \"\\u0e1a\\u0e32\\u0e07\\u0e2d\\u0e22\\u0e48\\u0e32\\u0e07\\u0e1c\\u0e34\\u0e14\\u0e1b\\u0e01\\u0e15\\u0e34. \\u0e01\\u0e23\\u0e38\\u0e13\\u0e32\\u0e25\\u0e2d\\u0e07\\u0e2d\\u0e35\\u0e01\\u0e04\\u0e23\\u0e31\\u0e49\\u0e07.\",\n    \"Image Caption\": \"คำบรรยายภาพ\",\n    \"Advanced Edit\": \"แก้ไขขั้นสูง\",\n\n    // Video\n    \"Insert Video\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e27\\u0e34\\u0e14\\u0e35\\u0e42\\u0e2d\",\n    \"Embedded Code\": \"\\u0e23\\u0e2b\\u0e31\\u0e2a\\u0e2a\\u0e21\\u0e2d\\u0e07\\u0e01\\u0e25\\u0e1d\\u0e31\\u0e07\\u0e15\\u0e31\\u0e27\",\n    \"Paste in a video URL\": \"วางใน URL วิดีโอ\",\n    \"Drop video\": \"วางวิดีโอ\",\n    \"Your browser does not support HTML5 video.\": \"เบราเซอร์ของคุณไม่สนับสนุนวิดีโอ HTML5\",\n    \"Upload Video\": \"อัปโหลดวิดีโอ\",\n\n    // Tables\n    \"Insert Table\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e15\\u0e32\\u0e23\\u0e32\\u0e07\",\n    \"Table Header\": \"\\u0e2a\\u0e48\\u0e27\\u0e19\\u0e2b\\u0e31\\u0e27\\u0e02\\u0e2d\\u0e07\\u0e15\\u0e32\\u0e23\\u0e32\\u0e07\",\n    \"Remove Table\": \"\\u0e40\\u0e2d\\u0e32\\u0e15\\u0e32\\u0e23\\u0e32\\u0e07\\u0e2d\\u0e2d\\u0e01\",\n    \"Table Style\": \"\\u0e25\\u0e31\\u0e01\\u0e29\\u0e13\\u0e30\\u0e15\\u0e32\\u0e23\\u0e32\\u0e07\",\n    \"Horizontal Align\": \"\\u0e43\\u0e19\\u0e41\\u0e19\\u0e27\\u0e19\\u0e2d\\u0e19\",\n    \"Row\": \"\\u0e41\\u0e16\\u0e27\",\n    \"Insert row above\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e41\\u0e16\\u0e27\\u0e14\\u0e49\\u0e32\\u0e19\\u0e1a\\u0e19\",\n    \"Insert row below\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e41\\u0e16\\u0e27\\u0e14\\u0e49\\u0e32\\u0e19\\u0e25\\u0e48\\u0e32\\u0e07\",\n    \"Delete row\": \"\\u0e25\\u0e1a\\u0e41\\u0e16\\u0e27\",\n    \"Column\": \"\\u0e04\\u0e2d\\u0e25\\u0e31\\u0e21\\u0e19\\u0e4c\",\n    \"Insert column before\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e04\\u0e2d\\u0e25\\u0e31\\u0e21\\u0e19\\u0e4c\\u0e02\\u0e49\\u0e32\\u0e07\\u0e2b\\u0e19\\u0e49\\u0e32\",\n    \"Insert column after\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e04\\u0e2d\\u0e25\\u0e31\\u0e21\\u0e19\\u0e4c\\u0e02\\u0e49\\u0e32\\u0e07\\u0e2b\\u0e25\\u0e31\\u0e07\",\n    \"Delete column\": \"\\u0e25\\u0e1a\\u0e04\\u0e2d\\u0e25\\u0e31\\u0e21\\u0e19\\u0e4c\",\n    \"Cell\": \"\\u0e40\\u0e0b\\u0e25\\u0e25\\u0e4c\",\n    \"Merge cells\": \"\\u0e1c\\u0e2a\\u0e32\\u0e19\\u0e40\\u0e0b\\u0e25\\u0e25\\u0e4c\",\n    \"Horizontal split\": \"\\u0e41\\u0e22\\u0e01\\u0e41\\u0e19\\u0e27\\u0e19\\u0e2d\\u0e19\",\n    \"Vertical split\": \"\\u0e41\\u0e22\\u0e01\\u0e43\\u0e19\\u0e41\\u0e19\\u0e27\\u0e15\\u0e31\\u0e49\\u0e07\",\n    \"Cell Background\": \"\\u0e1e\\u0e37\\u0e49\\u0e19\\u0e2b\\u0e25\\u0e31\\u0e07\\u0e02\\u0e2d\\u0e07\\u0e40\\u0e0b\\u0e25\\u0e25\\u0e4c\",\n    \"Vertical Align\": \"\\u0e08\\u0e31\\u0e14\\u0e41\\u0e19\\u0e27\\u0e15\\u0e31\\u0e49\\u0e07\",\n    \"Top\": \"\\u0e14\\u0e49\\u0e32\\u0e19\\u0e1a\\u0e19\",\n    \"Middle\": \"\\u0e01\\u0e25\\u0e32\\u0e07\",\n    \"Bottom\": \"\\u0e01\\u0e49\\u0e19\",\n    \"Align Top\": \"\\u0e08\\u0e31\\u0e14\\u0e14\\u0e49\\u0e32\\u0e19\\u0e1a\\u0e19\",\n    \"Align Middle\": \"\\u0e15\\u0e4d\\u0e32\\u0e41\\u0e2b\\u0e19\\u0e48\\u0e07\\u0e01\\u0e25\\u0e32\\u0e07\",\n    \"Align Bottom\": \"\\u0e15\\u0e4d\\u0e32\\u0e41\\u0e2b\\u0e19\\u0e48\\u0e07\\u0e14\\u0e49\\u0e32\\u0e19\\u0e25\\u0e48\\u0e32\\u0e07\",\n    \"Cell Style\": \"\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\\u0e02\\u0e2d\\u0e07\\u0e40\\u0e0b\\u0e25\\u0e25\\u0e4c\",\n\n    // Files\n    \"Upload File\": \"\\u0e2d\\u0e31\\u0e1b\\u0e42\\u0e2b\\u0e25\\u0e14\\u0e44\\u0e1f\\u0e25\\u0e4c\",\n    \"Drop file\": \"\\u0e27\\u0e32\\u0e07\\u0e44\\u0e1f\\u0e25\\u0e4c\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0e2d\\u0e35\\u0e42\\u0e21\\u0e15\\u0e34\\u0e04\\u0e2d\\u0e19\",\n    \"Grinning face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Grinning face with smiling eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e14\\u0e49\\u0e27\\u0e22\\u0e15\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Face with tears of joy\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e19\\u0e49\\u0e33\\u0e15\\u0e32\\u0e41\\u0e2b\\u0e48\\u0e07\\u0e04\\u0e27\\u0e32\\u0e21\\u0e2a\\u0e38\\u0e02\",\n    \"Smiling face with open mouth\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e40\\u0e1b\\u0e37\\u0e49\\u0e2d\\u0e19\\u0e23\\u0e2d\\u0e22\\u0e22\\u0e34\\u0e49\\u0e21\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e01\\u0e31\\u0e1a\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e1b\\u0e32\\u0e01\\u0e41\\u0e25\\u0e30\\u0e15\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e14\\u0e49\\u0e27\\u0e22\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e41\\u0e25\\u0e30\\u0e40\\u0e2b\\u0e07\\u0e37\\u0e48\\u0e2d\\u0e40\\u0e22\\u0e47\\u0e19\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e01\\u0e31\\u0e1a\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e1b\\u0e32\\u0e01\\u0e41\\u0e25\\u0e30\\u0e15\\u0e32\\u0e41\\u0e19\\u0e48\\u0e19\\u0e1b\\u0e34\\u0e14\",\n    \"Smiling face with halo\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e23\\u0e31\\u0e28\\u0e21\\u0e35\",\n    \"Smiling face with horns\": \"\\u0e22\\u0e34\\u0e49\\u0e21\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e35\\u0e40\\u0e02\\u0e32\",\n    \"Winking face\": \"\\u0e01\\u0e32\\u0e23\\u0e01\\u0e23\\u0e30\\u0e1e\\u0e23\\u0e34\\u0e1a\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\",\n    \"Smiling face with smiling eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e14\\u0e49\\u0e27\\u0e22\\u0e15\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Face savoring delicious food\": \"\\u0e40\\u0e1c\\u0e0a\\u0e34\\u0e0d \\u0073\\u0061\\u0076\\u006f\\u0072\\u0069\\u006e\\u0067 \\u0e2d\\u0e32\\u0e2b\\u0e32\\u0e23\\u0e2d\\u0e23\\u0e48\\u0e2d\\u0e22\",\n    \"Relieved face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e42\\u0e25\\u0e48\\u0e07\\u0e43\\u0e08\",\n    \"Smiling face with heart-shaped eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\\u0e14\\u0e49\\u0e27\\u0e22\\u0e15\\u0e32\\u0e23\\u0e39\\u0e1b\\u0e2b\\u0e31\\u0e27\\u0e43\\u0e08\",\n    \"Smiling face with sunglasses\": \"\\u0e22\\u0e34\\u0e49\\u0e21\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e41\\u0e27\\u0e48\\u0e19\\u0e15\\u0e32\\u0e01\\u0e31\\u0e19\\u0e41\\u0e14\\u0e14\",\n    \"Smirking face\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e41\\u0e2a\\u0e22\\u0e30\\u0e22\\u0e34\\u0e49\\u0e21\\u0e17\\u0e35\\u0e48\\u0e21\\u0e38\\u0e21\",\n    \"Neutral face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e40\\u0e1b\\u0e47\\u0e19\\u0e01\\u0e25\\u0e32\\u0e07\",\n    \"Expressionless face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e2d\\u0e32\\u0e23\\u0e21\\u0e13\\u0e4c\",\n    \"Unamused face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32 \\u0055\\u006e\\u0061\\u006d\\u0075\\u0073\\u0065\\u0064\",\n    \"Face with cold sweat\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e40\\u0e2b\\u0e07\\u0e37\\u0e48\\u0e2d\\u0e40\\u0e22\\u0e47\\u0e19\",\n    \"Pensive face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e2b\\u0e21\\u0e48\\u0e19\",\n    \"Confused face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e2a\\u0e31\\u0e1a\\u0e2a\\u0e19\",\n    \"Confounded face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e2a\\u0e31\\u0e1a\\u0e2a\\u0e19\",\n    \"Kissing face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e08\\u0e39\\u0e1a\",\n    \"Face throwing a kiss\": \"\\u0e15\\u0e49\\u0e2d\\u0e07\\u0e40\\u0e1c\\u0e0a\\u0e34\\u0e0d\\u0e01\\u0e31\\u0e1a\\u0e01\\u0e32\\u0e23\\u0e02\\u0e27\\u0e49\\u0e32\\u0e07\\u0e1b\\u0e32\\u0e08\\u0e39\\u0e1a\",\n    \"Kissing face with smiling eyes\": \"\\u0e08\\u0e39\\u0e1a\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e15\\u0e32\\u0e22\\u0e34\\u0e49\\u0e21\",\n    \"Kissing face with closed eyes\": \"\\u0e08\\u0e39\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e14\\u0e27\\u0e07\\u0e15\\u0e32\\u0e17\\u0e35\\u0e48\\u0e1b\\u0e34\\u0e14\\u0e2a\\u0e19\\u0e34\\u0e17\",\n    \"Face with stuck out tongue\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e35\\u0e41\\u0e1e\\u0e25\\u0e21\\u0e2d\\u0e2d\\u0e01\\u0e21\\u0e32\\u0e25\\u0e34\\u0e49\\u0e19\",\n    \"Face with stuck out tongue and winking eye\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e35\\u0e15\\u0e34\\u0e14\\u0e25\\u0e34\\u0e49\\u0e19\\u0e41\\u0e25\\u0e30\\u0e15\\u0e32\\u0e02\\u0e22\\u0e34\\u0e1a\\u0e15\\u0e32\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e35\\u0e15\\u0e34\\u0e14\\u0e25\\u0e34\\u0e49\\u0e19\\u0e41\\u0e25\\u0e30\\u0e14\\u0e27\\u0e07\\u0e15\\u0e32\\u0e17\\u0e35\\u0e48\\u0e1b\\u0e34\\u0e14\\u0e41\\u0e19\\u0e48\\u0e19\",\n    \"Disappointed face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e1c\\u0e34\\u0e14\\u0e2b\\u0e27\\u0e31\\u0e07\",\n    \"Worried face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e01\\u0e31\\u0e07\\u0e27\\u0e25\",\n    \"Angry face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e42\\u0e01\\u0e23\\u0e18\",\n    \"Pouting face\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e38\\u0e48\\u0e22\",\n    \"Crying face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e23\\u0e49\\u0e2d\\u0e07\\u0e44\\u0e2b\\u0e49\",\n    \"Persevering face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e40\\u0e2d\\u0e32\\u0e16\\u0e48\\u0e32\\u0e19\",\n    \"Face with look of triumph\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e01\\u0e31\\u0e1a\\u0e23\\u0e39\\u0e1b\\u0e25\\u0e31\\u0e01\\u0e29\\u0e13\\u0e4c\\u0e02\\u0e2d\\u0e07\\u0e0a\\u0e31\\u0e22\\u0e0a\\u0e19\\u0e30\",\n    \"Disappointed but relieved face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e1c\\u0e34\\u0e14\\u0e2b\\u0e27\\u0e31\\u0e07 \\u0e41\\u0e15\\u0e48\\u0e42\\u0e25\\u0e48\\u0e07\\u0e43\\u0e08\",\n    \"Frowning face with open mouth\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e21\\u0e38\\u0e48\\u0e22\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\",\n    \"Anguished face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e01\\u0e14\\u0e02\\u0e35\\u0e48\",\n    \"Fearful face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e19\\u0e48\\u0e32\\u0e01\\u0e25\\u0e31\\u0e27\",\n    \"Weary face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e40\\u0e2b\\u0e19\\u0e37\\u0e48\\u0e2d\\u0e22\\u0e25\\u0e49\\u0e32\",\n    \"Sleepy face\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e07\\u0e48\\u0e27\\u0e07\\u0e19\\u0e2d\\u0e19\",\n    \"Tired face\": \"\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e40\\u0e1a\\u0e37\\u0e48\\u0e2d\",\n    \"Grimacing face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32 \\u0067\\u0072\\u0069\\u006d\\u0061\\u0063\\u0069\\u006e\\u0067\",\n    \"Loudly crying face\": \"\\u0e23\\u0e49\\u0e2d\\u0e07\\u0e44\\u0e2b\\u0e49\\u0e40\\u0e2a\\u0e35\\u0e22\\u0e07\\u0e14\\u0e31\\u0e07\\u0e2b\\u0e19\\u0e49\\u0e32\",\n    \"Face with open mouth\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\",\n    \"Hushed face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e40\\u0e07\\u0e35\\u0e22\\u0e1a\",\n    \"Face with open mouth and cold sweat\": \"หน้ากับปากเปิดและเหงื่อเย็น\",\n    \"Face screaming in fear\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e17\\u0e35\\u0e48\\u0e21\\u0e35\\u0e1b\\u0e32\\u0e01\\u0e40\\u0e1b\\u0e34\\u0e14\\u0e41\\u0e25\\u0e30\\u0e40\\u0e2b\\u0e07\\u0e37\\u0e48\\u0e2d\\u0e40\\u0e22\\u0e47\\u0e19\",\n    \"Astonished face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e1b\\u0e23\\u0e30\\u0e2b\\u0e25\\u0e32\\u0e14\\u0e43\\u0e08\",\n    \"Flushed face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e41\\u0e14\\u0e07\",\n    \"Sleeping face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e19\\u0e2d\\u0e19\",\n    \"Dizzy face\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e15\\u0e32\\u0e25\\u0e32\\u0e22\",\n    \"Face without mouth\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e42\\u0e14\\u0e22\\u0e44\\u0e21\\u0e48\\u0e15\\u0e49\\u0e2d\\u0e07\\u0e1b\\u0e32\\u0e01\",\n    \"Face with medical mask\": \"\\u0e43\\u0e1a\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e14\\u0e49\\u0e27\\u0e22\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e01\\u0e32\\u0e01\\u0e17\\u0e32\\u0e07\\u0e01\\u0e32\\u0e23\\u0e41\\u0e1e\\u0e17\\u0e22\\u0e4c\",\n\n    // Line breaker\n    \"Break\": \"\\u0e2b\\u0e22\\u0e38\\u0e14\",\n\n    // Math\n    \"Subscript\": \"\\u0e15\\u0e31\\u0e27\\u0e2b\\u0e49\\u0e2d\\u0e22\",\n    \"Superscript\": \"\\u0e15\\u0e31\\u0e27\\u0e22\\u0e01\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u0e40\\u0e15\\u0e47\\u0e21\\u0e2b\\u0e19\\u0e49\\u0e32\\u0e08\\u0e2d\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e40\\u0e2a\\u0e49\\u0e19\\u0e41\\u0e19\\u0e27\\u0e19\\u0e2d\\u0e19\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u0e19\\u0e33\\u0e01\\u0e32\\u0e23\\u0e08\\u0e31\\u0e14\\u0e23\\u0e39\\u0e1b\\u0e41\\u0e1a\\u0e1a\",\n\n    // Save\n    \"Save\": \"\\u0e1a\\u0e31\\u0e19\\u0e17\\u0e36\\u0e01\",\n\n    // Undo, redo\n    \"Undo\": \"\\u0e40\\u0e25\\u0e34\\u0e01\\u0e17\\u0e33\",\n    \"Redo\": \"\\u0e17\\u0e4d\\u0e32\\u0e0b\\u0e49\\u0e33\",\n\n    // Select all\n    \"Select All\": \"\\u0e40\\u0e25\\u0e37\\u0e2d\\u0e01\\u0e17\\u0e31\\u0e49\\u0e07\\u0e2b\\u0e21\\u0e14\",\n\n    // Code view\n    \"Code View\": \"\\u0e21\\u0e38\\u0e21\\u0e21\\u0e2d\\u0e07\\u0e23\\u0e2b\\u0e31\\u0e2a\",\n\n    // Quote\n    \"Quote\": \"\\u0e2d\\u0e49\\u0e32\\u0e07\",\n    \"Increase\": \"\\u0e40\\u0e1e\\u0e34\\u0e48\\u0e21\",\n    \"Decrease\": \"\\u0e25\\u0e14\\u0e25\\u0e07\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u0e41\\u0e17\\u0e23\\u0e01\\u0e14\\u0e48\\u0e27\\u0e19\",\n\n    // Spcial Characters\n    \"Special Characters\": \"อักขระพิเศษ\",\n    \"Latin\": \"ละติน\",\n    \"Greek\": \"กรีก\",\n    \"Cyrillic\": \"ริลลิก\",\n    \"Punctuation\": \"วรรคตอน\",\n    \"Currency\": \"เงินตรา\",\n    \"Arrows\": \"ลูกศร\",\n    \"Math\": \"คณิตศาสตร์\",\n    \"Misc\": \"อื่น ๆ\",\n\n    // Print.\n    \"Print\": \"พิมพ์\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"ตัวตรวจสอบการสะกด\",\n\n    // Help\n    \"Help\": \"ช่วยด้วย\",\n    \"Shortcuts\": \"ทางลัด\",\n    \"Inline Editor\": \"ตัวแก้ไขแบบอินไลน์\",\n    \"Show the editor\": \"แสดงตัวแก้ไข\",\n    \"Common actions\": \"การกระทำร่วมกัน\",\n    \"Copy\": \"สำเนา\",\n    \"Cut\": \"ตัด\",\n    \"Paste\": \"แปะ\",\n    \"Basic Formatting\": \"การจัดรูปแบบพื้นฐาน\",\n    \"Increase quote level\": \"ระดับราคาเพิ่มขึ้น\",\n    \"Decrease quote level\": \"ระดับราคาลดลง\",\n    \"Image / Video\": \"ภาพ / วิดีโอ\",\n    \"Resize larger\": \"ปรับขนาดใหญ่ขึ้น\",\n    \"Resize smaller\": \"ปรับขนาดเล็กลง\",\n    \"Table\": \"ตาราง\",\n    \"Select table cell\": \"เลือกเซลล์ตาราง\",\n    \"Extend selection one cell\": \"ขยายการเลือกหนึ่งเซลล์\",\n    \"Extend selection one row\": \"ขยายการเลือกหนึ่งแถว\",\n    \"Navigation\": \"การเดินเรือ\",\n    \"Focus popup / toolbar\": \"โฟกัสป๊อปอัพ / แถบเครื่องมือ\",\n    \"Return focus to previous position\": \"กลับไปยังตำแหน่งก่อนหน้า\",\n\n    // Embed.ly\n    \"Embed URL\": \"ฝัง URL\",\n    \"Paste in a URL to embed\": \"วางใน url เพื่อฝัง\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"เนื้อหาที่วางจะมาจากเอกสารคำในแบบ microsoft คุณต้องการเก็บรูปแบบหรือทำความสะอาดหรือไม่?\",\n    \"Keep\": \"เก็บ\",\n    \"Clean\": \"สะอาด\",\n    \"Word Paste Detected\": \"ตรวจพบการวางคำ\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/tr.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Turkish\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['tr'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Bir \\u015fey yaz\\u0131n\",\n\n    // Basic formatting\n    \"Bold\": \"Kal\\u0131n\",\n    \"Italic\": \"\\u0130talik\",\n    \"Underline\": \"Alt\\u0131 \\u00e7izili\",\n    \"Strikethrough\": \"\\u00dcst\\u00fc \\u00e7izili\",\n\n    // Main buttons\n    \"Insert\": \"Ekle\",\n    \"Delete\": \"Silmek\",\n    \"Cancel\": \"\\u0130ptal\",\n    \"OK\": \"Tamam\",\n    \"Back\": \"Geri\",\n    \"Remove\": \"Kald\\u0131r\",\n    \"More\": \"Daha\",\n    \"Update\": \"G\\u00fcncelle\\u015ftirme\",\n    \"Style\": \"Stil\",\n\n    // Font\n    \"Font Family\": \"Yaz\\u0131tipi Ailesi\",\n    \"Font Size\": \"Yaz\\u0131tipi B\\u00fcy\\u00fckl\\u00fc\\u011f\\u00fc\",\n\n    // Colors\n    \"Colors\": \"Renkler\",\n    \"Background\": \"Arkaplan\",\n    \"Text\": \"Metin\",\n    \"HEX Color\": \"Altı renkli\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"Bi\\u00e7imler\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Kod\",\n    \"Heading 1\": \"Ba\\u015fl\\u0131k 1\",\n    \"Heading 2\": \"Ba\\u015fl\\u0131k 2\",\n    \"Heading 3\": \"Ba\\u015fl\\u0131k 3\",\n    \"Heading 4\": \"Ba\\u015fl\\u0131k 4\",\n\n    // Style\n    \"Paragraph Style\": \"Paragraf stili\",\n    \"Inline Style\": \"\\u00c7izgide stili\",\n\n    // Alignment\n    \"Align\": \"Hizalama\",\n    \"Align Left\": \"Sola hizala\",\n    \"Align Center\": \"Ortala\",\n    \"Align Right\": \"Sa\\u011fa hizala\",\n    \"Align Justify\": \"\\u0130ki yana yasla\",\n    \"None\": \"Hi\\u00e7biri\",\n\n    // Lists\n    \"Ordered List\": \"S\\u0131ral\\u0131 liste\",\n    \"Default\": \"Varsayılan\",\n    \"Lower Alpha\": \"Alt alfa\",\n    \"Lower Greek\": \"Alt yunan\",\n    \"Lower Roman\": \"Alt roma\",\n    \"Upper Alpha\": \"Üst alfa\",\n    \"Upper Roman\": \"Üst roma\",\n\n    \"Unordered List\": \"S\\u0131ras\\u0131z liste\",\n    \"Circle\": \"Daire\",\n    \"Disc\": \"Disk\",\n    \"Square\": \"Kare\",\n\n    // Line height\n    \"Line Height\": \"Satır yüksekliği\",\n    \"Single\": \"Tek\",\n    \"Double\": \"Çift\",\n\n    // Indent\n    \"Decrease Indent\": \"Girintiyi azalt\",\n    \"Increase Indent\": \"Girintiyi art\\u0131r\",\n\n    // Links\n    \"Insert Link\": \"Ba\\u011flant\\u0131 ekle\",\n    \"Open in new tab\": \"Yeni sekmede a\\u00e7\",\n    \"Open Link\": \"Linki a\\u00e7\",\n    \"Edit Link\": \"D\\u00fczenleme ba\\u011flant\\u0131s\\u0131\",\n    \"Unlink\": \"Ba\\u011flant\\u0131y\\u0131 kald\\u0131r\",\n    \"Choose Link\": \"Ba\\u011flant\\u0131y\\u0131 se\\u00e7in\",\n\n    // Images\n    \"Insert Image\": \"Resim ekle\",\n    \"Upload Image\": \"Y\\u00fckleme g\\u00f6r\\u00fcnt\\u00fcs\\u00fc\",\n    \"By URL\": \"URL'ye g\\u00f6re\",\n    \"Browse\": \"G\\u00f6zat\",\n    \"Drop image\": \"B\\u0131rak resim\",\n    \"or click\": \"ya da t\\u0131klay\\u0131n\",\n    \"Manage Images\": \"G\\u00f6r\\u00fcnt\\u00fcleri y\\u00f6netin\",\n    \"Loading\": \"Y\\u00fckleniyor\",\n    \"Deleting\": \"Silme\",\n    \"Tags\": \"Etiketler\",\n    \"Are you sure? Image will be deleted.\": \"Emin misin? Resim silinecektir.\",\n    \"Replace\": \"De\\u011fi\\u015ftirmek\",\n    \"Uploading\": \"Y\\u00fckleme\",\n    \"Loading image\": \"Y\\u00fckleme g\\u00f6r\\u00fcnt\\u00fcs\\u00fc\",\n    \"Display\": \"G\\u00f6stermek\",\n    \"Inline\": \"\\u00c7izgide\",\n    \"Break Text\": \"K\\u0131r\\u0131lma metni\",\n    \"Alternative Text\": \"Alternatif metin\",\n    \"Change Size\": \"De\\u011fi\\u015fim boyutu\",\n    \"Width\": \"Geni\\u015flik\",\n    \"Height\": \"Y\\u00fckseklik\",\n    \"Something went wrong. Please try again.\": \"Bir \\u015feyler yanl\\u0131\\u015f gitti. L\\u00fctfen tekrar deneyin.\",\n    \"Image Caption\": \"Resim yazısı\",\n    \"Advanced Edit\": \"Ileri düzey düzenleme\",\n\n    // Video\n    \"Insert Video\": \"Video ekle\",\n    \"Embedded Code\": \"G\\u00f6m\\u00fcl\\u00fc kod\",\n    \"Paste in a video URL\": \"Bir video URL'sine yapıştırın\",\n    \"Drop video\": \"Video bırak\",\n    \"Your browser does not support HTML5 video.\": \"Tarayıcınız html5 videoyu desteklemez.\",\n    \"Upload Video\": \"Video yükle\",\n\n    // Tables\n    \"Insert Table\": \"Tablo ekle\",\n    \"Table Header\": \"Tablo \\u00fcstbilgisi\",\n    \"Remove Table\": \"Tablo kald\\u0131rma\",\n    \"Table Style\": \"Tablo stili\",\n    \"Horizontal Align\": \"Yatay hizalama\",\n    \"Row\": \"Sat\\u0131r\",\n    \"Insert row above\": \"\\u00d6ncesine yeni sat\\u0131r ekle\",\n    \"Insert row below\": \"Sonras\\u0131na yeni sat\\u0131r ekle\",\n    \"Delete row\": \"Sat\\u0131r\\u0131 sil\",\n    \"Column\": \"S\\u00fctun\",\n    \"Insert column before\": \"\\u00d6ncesine yeni s\\u00fctun ekle\",\n    \"Insert column after\": \"Sonras\\u0131na yeni s\\u00fctun ekle\",\n    \"Delete column\": \"S\\u00fctunu sil\",\n    \"Cell\": \"H\\u00fccre\",\n    \"Merge cells\": \"H\\u00fccreleri birle\\u015ftir\",\n    \"Horizontal split\": \"Yatay b\\u00f6l\\u00fcnm\\u00fc\\u015f\",\n    \"Vertical split\": \"Dikey  b\\u00f6l\\u00fcnm\\u00fc\\u015f\",\n    \"Cell Background\": \"H\\u00fccre arka plan\\u0131\",\n    \"Vertical Align\": \"Dikey hizalama\",\n    \"Top\": \"\\u00dcst\",\n    \"Middle\": \"Orta\",\n    \"Bottom\": \"Alt\",\n    \"Align Top\": \"\\u00dcst hizalama\",\n    \"Align Middle\": \"Orta hizalama\",\n    \"Align Bottom\": \"Dibe hizalama\",\n    \"Cell Style\": \"H\\u00fccre stili\",\n\n    // Files\n    \"Upload File\": \"Dosya Y\\u00fckle\",\n    \"Drop file\": \"B\\u0131rak dosya\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0130fadeler\",\n    \"Grinning face\": \"S\\u0131r\\u0131tan y\\u00fcz\",\n    \"Grinning face with smiling eyes\": \"G\\u00fclen g\\u00f6zlerle y\\u00fcz s\\u0131r\\u0131tarak\",\n    \"Face with tears of joy\": \"Sevin\\u00e7 g\\u00f6zya\\u015flar\\u0131yla Y\\u00fcz\",\n    \"Smiling face with open mouth\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ile g\\u00fcl\\u00fcmseyen y\\u00fcz\\u00fc\",\n    \"Smiling face with open mouth and smiling eyes\": \"A\\u00e7\\u0131k a\\u011fzı ve g\\u00fcl\\u00fcmseyen g\\u00f6zlerle g\\u00fcler y\\u00fcz\",\n    \"Smiling face with open mouth and cold sweat\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ve so\\u011fuk ter ile g\\u00fclen y\\u00fcz\\u00fc\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 s\\u0131k\\u0131ca kapal\\u0131 g\\u00f6zlerle g\\u00fclen y\\u00fcz\\u00fc\",\n    \"Smiling face with halo\": \"Halo ile y\\u00fcz g\\u00fclen\",\n    \"Smiling face with horns\": \"Boynuzlar\\u0131 ile g\\u00fcler y\\u00fcz\",\n    \"Winking face\": \"G\\u00f6z a\\u00e7\\u0131p kapay\\u0131ncaya y\\u00fcz\\u00fc\",\n    \"Smiling face with smiling eyes\": \"G\\u00fclen g\\u00f6zlerle g\\u00fcler Y\\u00fcz\",\n    \"Face savoring delicious food\": \"Lezzetli yemekler tad\\u0131n\\u0131 Y\\u00fcz\",\n    \"Relieved face\": \"Rahatlad\\u0131m y\\u00fcz\\u00fc\",\n    \"Smiling face with heart-shaped eyes\": \"Kalp \\u015feklinde g\\u00f6zlerle g\\u00fcler y\\u00fcz\",\n    \"Smiling face with sunglasses\": \"Kalp \\u015feklinde g\\u00f6zlerle g\\u00fcler y\\u00fcz\",\n    \"Smirking face\": \"S\\u0131r\\u0131tan y\\u00fcz\",\n    \"Neutral face\": \"N\\u00f6tr y\\u00fcz\",\n    \"Expressionless face\": \"Ifadesiz y\\u00fcz\\u00fc\",\n    \"Unamused face\": \"Kay\\u0131ts\\u0131z y\\u00fcz\\u00fc\",\n    \"Face with cold sweat\": \"So\\u011fuk terler Y\\u00fcz\",\n    \"Pensive face\": \"dalg\\u0131n bir y\\u00fcz\",\n    \"Confused face\": \"\\u015fa\\u015fk\\u0131n bir y\\u00fcz\",\n    \"Confounded face\": \"Ele\\u015ftirilmi\\u015ftir y\\u00fcz\\u00fc\",\n    \"Kissing face\": \"\\u00f6p\\u00fc\\u015fme y\\u00fcz\\u00fc\",\n    \"Face throwing a kiss\": \"Bir \\u00f6p\\u00fcc\\u00fck atma Y\\u00fcz\",\n    \"Kissing face with smiling eyes\": \"G\\u00fclen g\\u00f6zlerle y\\u00fcz \\u00f6p\\u00fc\\u015fme\",\n    \"Kissing face with closed eyes\": \"Kapal\\u0131 g\\u00f6zlerle \\u00f6p\\u00f6\\u015fme y\\u00fcz\",\n    \"Face with stuck out tongue\": \"Dilini y\\u00fcz ile s\\u0131k\\u0131\\u015fm\\u0131\\u015f\",\n    \"Face with stuck out tongue and winking eye\": \"\\u015ea\\u015f\\u0131r\\u0131p kalm\\u0131\\u015f d\\u0131\\u015far\\u0131 dil ve g\\u00f6z k\\u0131rpan y\\u00fcz\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"Y\\u00fcz ile dil ve s\\u0131k\\u0131ca kapal\\u0131 g\\u00f6zleri s\\u0131k\\u0131\\u015fm\\u0131\\u015f\",\n    \"Disappointed face\": \"Hayal k\\u0131r\\u0131kl\\u0131\\u011f\\u0131na y\\u00fcz\\u00fc\",\n    \"Worried face\": \"Endi\\u015feli bir y\\u00fcz\",\n    \"Angry face\": \"K\\u0131zg\\u0131n y\\u00fcz\",\n    \"Pouting face\": \"Somurtarak y\\u00fcz\\u00fc\",\n    \"Crying face\": \"A\\u011flayan y\\u00fcz\",\n    \"Persevering face\": \"Azmeden y\\u00fcz\\u00fc\",\n    \"Face with look of triumph\": \"Zafer bak\\u0131\\u015fla Y\\u00fcz\",\n    \"Disappointed but relieved face\": \"Hayal k\\u0131r\\u0131kl\\u0131\\u011f\\u0131 ama rahatlad\\u0131m y\\u00fcz\",\n    \"Frowning face with open mouth\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ile \\u00e7at\\u0131k y\\u00fcz\\u00fc\",\n    \"Anguished face\": \"Kederli y\\u00fcz\",\n    \"Fearful face\": \"Korkulu y\\u00fcz\\u00fc\",\n    \"Weary face\": \"Yorgun y\\u00fcz\\u00fc\",\n    \"Sleepy face\": \"Uykulu y\\u00fcz\\u00fc\",\n    \"Tired face\": \"Yorgun y\\u00fcz\\u00fc\",\n    \"Grimacing face\": \"Y\\u00fcz\\u00fcn\\u00fc buru\\u015fturarak y\\u00fcz\\u00fc\",\n    \"Loudly crying face\": \"Y\\u00fcksek sesle y\\u00fcz\\u00fc a\\u011fl\\u0131yor\",\n    \"Face with open mouth\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ile Y\\u00fcz\",\n    \"Hushed face\": \"Dingin y\\u00fcz\\u00fc\",\n    \"Face with open mouth and cold sweat\": \"A\\u00e7\\u0131k a\\u011fz\\u0131 ve so\\u011fuk ter ile Y\\u00fcz\",\n    \"Face screaming in fear\": \"Korku i\\u00e7inde \\u00e7ı\\u011fl\\u0131k Y\\u00fcz\",\n    \"Astonished face\": \"\\u015fa\\u015fk\\u0131n bir y\\u00fcz\",\n    \"Flushed face\": \"K\\u0131zarm\\u0131\\u015f y\\u00fcz\\u00fc\",\n    \"Sleeping face\": \"Uyuyan y\\u00fcz\\u00fc\",\n    \"Dizzy face\": \"Ba\\u015f\\u0131m d\\u00f6nd\\u00fc y\\u00fcz\",\n    \"Face without mouth\": \"A\\u011f\\u0131z olmadan Y\\u00fcz\",\n    \"Face with medical mask\": \"T\\u0131bbi maske ile y\\u00fcz\",\n\n    // Line breaker\n    \"Break\": \"K\\u0131r\\u0131lma\",\n\n    // Math\n    \"Subscript\": \"Alt simge\",\n    \"Superscript\": \"\\u00dcst simge\",\n\n    // Full screen\n    \"Fullscreen\": \"Tam ekran\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Yatay \\u00e7izgi ekleme\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"Bi\\u00e7imlendirme kald\\u0131r\",\n\n    // Save\n    \"Save\": \"Kayıt etmek\",\n\n    // Undo, redo\n    \"Undo\": \"Geri Al\",\n    \"Redo\": \"Yinele\",\n\n    // Select all\n    \"Select All\": \"T\\u00fcm\\u00fcn\\u00fc se\\u00e7\",\n\n    // Code view\n    \"Code View\": \"Kod g\\u00f6r\\u00fcn\\u00fcm\\u00fc\",\n\n    // Quote\n    \"Quote\": \"Al\\u0131nt\\u0131\",\n    \"Increase\": \"Art\\u0131rmak\",\n    \"Decrease\": \"Azal\\u0131\\u015f\",\n\n    // Quick Insert\n    \"Quick Insert\": \"H\\u0131zl\\u0131 insert\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Özel karakterler\",\n    \"Latin\": \"Latince\",\n    \"Greek\": \"Yunan\",\n    \"Cyrillic\": \"Kiril\",\n    \"Punctuation\": \"Noktalama\",\n    \"Currency\": \"Para birimi\",\n    \"Arrows\": \"Oklar\",\n    \"Math\": \"Matematik\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"Baskı\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Yazım denetleyicisi\",\n\n    // Help\n    \"Help\": \"Yardım et\",\n    \"Shortcuts\": \"Kısayollar\",\n    \"Inline Editor\": \"Satır içi düzenleyici\",\n    \"Show the editor\": \"Editörü gösterin\",\n    \"Common actions\": \"Ortak eylemler\",\n    \"Copy\": \"Kopya\",\n    \"Cut\": \"Kesim\",\n    \"Paste\": \"Yapıştırmak\",\n    \"Basic Formatting\": \"Temel biçimlendirme\",\n    \"Increase quote level\": \"Teklif seviyesini yükselt\",\n    \"Decrease quote level\": \"Teklif seviyesini azalt\",\n    \"Image / Video\": \"Resim / video\",\n    \"Resize larger\": \"Daha büyük yeniden boyutlandır\",\n    \"Resize smaller\": \"Daha küçük boyuta getir\",\n    \"Table\": \"Tablo\",\n    \"Select table cell\": \"Tablo hücresi seç\",\n    \"Extend selection one cell\": \"Seçimi bir hücre genişlet\",\n    \"Extend selection one row\": \"Seçimi bir sıra genişlet\",\n    \"Navigation\": \"Navigasyon\",\n    \"Focus popup / toolbar\": \"Odaklanma açılır penceresi / araç çubuğu\",\n    \"Return focus to previous position\": \"Odaklamaya önceki konumuna geri dönün\",\n\n    // Embed.ly\n    \"Embed URL\": \"URL göm\",\n    \"Paste in a URL to embed\": \"Yerleştirmek için bir URL'ye yapıştırın\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Yapıştırılan içerik bir Microsoft Word belgesinden geliyor. Biçimi saklamaya mı yoksa temizlemeyi mi istiyor musun?\",\n    \"Keep\": \"Tutmak\",\n    \"Clean\": \"Temiz\",\n    \"Word Paste Detected\": \"Kelime yapıştırması algılandı\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/ua.js",
    "content": "/*!\n * froala_editor v2.2.4 (https://www.froala.com/wysiwyg-editor)\n * License https://froala.com/wysiwyg-editor/terms/\n * Copyright 2014-2016 Froala Labs\n */\n\n/**\n * Ukrainian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['ua'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u041d\\u0430\\u043f\\u0438\\u0448\\u0456\\u0442\\u044c \\u0431\\u0443\\u0434\\u044c-\\u0449\\u043e\",\n\n    // Basic formatting\n    \"Bold\": \"\\u0416\\u0438\\u0440\\u043d\\u0438\\u0439\",\n    \"Italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0438\\u0432\",\n    \"Underline\": \"\\u041f\\u0456\\u0434\\u043a\\u0440\\u0435\\u0441\\u043b\\u0435\\u043d\\u0438\\u0439\",\n    \"Strikethrough\": \"\\u0417\\u0430\\u043a\\u0440\\u0435\\u0441\\u043b\\u0435\\u043d\\u0438\\u0439\",\n\n    // Main buttons\n    \"Insert\": \"\\u0432\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438\",\n    \"Delete\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438\",\n    \"Cancel\": \"\\u0421\\u043a\\u0430\\u0441\\u0443\\u0432\\u0430\\u0442\\u0438\",\n    \"OK\": \"OK\",\n    \"Back\": \"\\u043d\\u0430\\u0437\\u0430\\u0434\",\n    \"Remove\": \"\\u0432\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438\",\n    \"More\": \"\\u0431\\u0456\\u043b\\u044c\\u0448\\u0435\",\n    \"Update\": \"\\u043e\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u044f\",\n    \"Style\": \"\\u0441\\u0442\\u0438\\u043b\\u044c\",\n\n    // Font\n    \"Font Family\": \"\\u0428\\u0440\\u0438\\u0444\\u0442\",\n    \"Font Size\": \"\\u0420\\u043e\\u0437\\u043c\\u0456\\u0440 \\u0448\\u0440\\u0438\\u0444\\u0442\\u0443\",\n\n    // Colors\n    \"Colors\": \"\\u043a\\u043e\\u043b\\u044c\\u043e\\u0440\\u0438\",\n    \"Background\": \"\\u0424\\u043e\\u043d\",\n    \"Text\": \"\\u0422\\u0435\\u043a\\u0441\\u0442\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\",\n    \"Normal\": \"\\u041d\\u043e\\u0440\\u043c\\u0430\\u043b\\u044c\\u043d\\u0438\\u0439\",\n    \"Code\": \"\\u041a\\u043e\\u0434\",\n    \"Heading 1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n    \"Heading 2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n    \"Heading 3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n    \"Heading 4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u043f\\u0443\\u043d\\u043a\\u0442 \\u0441\\u0442\\u0438\\u043b\\u044c\",\n    \"Inline Style\": \"\\u0432\\u0431\\u0443\\u0434\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u0441\\u0442\\u0438\\u043b\\u044c\",\n\n    // Alignment\n    \"Align\": \"\\u0412\\u0438\\u0440\\u0456\\u0432\\u043d\\u044e\\u0432\\u0430\\u043d\\u043d\\u044f\",\n    \"Align Left\": \"\\u041f\\u043e \\u043b\\u0456\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Center\": \"\\u041f\\u043e \\u0446\\u0435\\u043d\\u0442\\u0440\\u0443\",\n    \"Align Right\": \"\\u041f\\u043e \\u043f\\u0440\\u0430\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Justify\": \"\\u041f\\u043e \\u0448\\u0438\\u0440\\u0438\\u043d\\u0456\",\n    \"None\": \"\\u043d\\u0456\",\n\n    // Lists\n    \"Ordered List\": \"\\u041d\\u0443\\u043c\\u0435\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n    \"Unordered List\": \"\\u041c\\u0430\\u0440\\u043a\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u0417\\u043c\\u0435\\u043d\\u0448\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0441\\u0442\\u0443\\u043f\",\n    \"Increase Indent\": \"\\u0417\\u0431\\u0456\\u043b\\u044c\\u0448\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0441\\u0442\\u0443\\u043f\",\n\n    // Links\n    \"Insert Link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Open in new tab\": \"\\u0412\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438 \\u0432 \\u043d\\u043e\\u0432\\u0456\\u0439 \\u0432\\u043a\\u043b\\u0430\\u0434\\u0446\\u0456\",\n    \"Open Link\": \"\\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Edit Link\": \"\\u0440\\u0435\\u0434\\u0430\\u0433\\u0443\\u0432\\u0430\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Unlink\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Choose Link\": \"\\u0412\\u0438\\u0431\\u0435\\u0440\\u0456\\u0442\\u044c \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n\n    // Images\n    \"Insert Image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"Upload Image\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0438\\u0442\\u0438 \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"By URL\": \"\\u0437\\u0430 URL\",\n    \"Browse\": \"\\u043f\\u0435\\u0440\\u0435\\u0433\\u043b\\u044f\\u0434\\u0430\\u0442\\u0438\",\n    \"Drop image\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0456\\u0441\\u0442\\u0456\\u0442\\u044c \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0441\\u044e\\u0434\\u0438\",\n    \"or click\": \"\\u0430\\u0431\\u043e \\u043d\\u0430\\u0442\\u0438\\u0441\\u043d\\u0456\\u0442\\u044c\",\n    \"Manage Images\": \"\\u041a\\u0435\\u0440\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\\u043c\\u0438\",\n    \"Loading\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"Deleting\": \"\\u0432\\u0438\\u0434\\u0430\\u043b\\u0435\\u043d\\u043d\\u044f\",\n    \"Tags\": \"\\u043a\\u043b\\u044e\\u0447\\u043e\\u0432\\u0456 \\u0441\\u043b\\u043e\\u0432\\u0430\",\n    \"Are you sure? Image will be deleted.\": \"\\u0412\\u0438 \\u0432\\u043f\\u0435\\u0432\\u043d\\u0435\\u043d\\u0456? \\u0417\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0431\\u0443\\u0434\\u0435 \\u0432\\u0438\\u0434\\u0430\\u043b\\u0435\\u043d\\u043e.\",\n    \"Replace\": \"\\u0437\\u0430\\u043c\\u0456\\u043d\\u044e\\u0432\\u0430\\u0442\\u0438\",\n    \"Uploading\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"Loading image\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u044c\",\n    \"Display\": \"\\u0434\\u0438\\u0441\\u043f\\u043b\\u0435\\u0439\",\n    \"Inline\": \"\\u0412 \\u043b\\u0456\\u043d\\u0456\\u044e\",\n    \"Break Text\": \"\\u043f\\u0435\\u0440\\u0435\\u0440\\u0432\\u0430 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Alternate Text\": \"\\u0430\\u043b\\u044c\\u0442\\u0435\\u0440\\u043d\\u0430\\u0442\\u0438\\u0432\\u043d\\u0438\\u0439 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Change Size\": \"\\u0437\\u043c\\u0456\\u043d\\u0438\\u0442\\u0438 \\u0440\\u043e\\u0437\\u043c\\u0456\\u0440\",\n    \"Width\": \"\\u0428\\u0438\\u0440\\u0438\\u043d\\u0430\",\n    \"Height\": \"\\u0412\\u0438\\u0441\\u043e\\u0442\\u0430\",\n    \"Something went wrong. Please try again.\": \"\\u0429\\u043e\\u0441\\u044c \\u043f\\u0456\\u0448\\u043b\\u043e \\u043d\\u0435 \\u0442\\u0430\\u043a. \\u0411\\u0443\\u0434\\u044c \\u043b\\u0430\\u0441\\u043a\\u0430 \\u0441\\u043f\\u0440\\u043e\\u0431\\u0443\\u0439\\u0442\\u0435 \\u0449\\u0435 \\u0440\\u0430\\u0437.\",\n\n    // Video\n    \"Insert Video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0435\\u043e\",\n    \"Embedded Code\": \"\\u0432\\u0431\\u0443\\u0434\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043a\\u043e\\u0434\",\n\n    // Tables\n    \"Insert Table\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u044e\",\n    \"Table Header\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0456\",\n    \"Remove Table\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0456\",\n    \"Table Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0456\",\n    \"Horizontal Align\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0435 \\u0432\\u0438\\u0440\\u0456\\u0432\\u043d\\u044e\\u0432\\u0430\\u043d\\u043d\\u044f\",\n    \"Row\": \"\\u0420\\u044f\\u0434\\u043e\\u043a\",\n    \"Insert row above\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0440\\u043e\\u0436\\u043d\\u0456\\u0439 \\u0440\\u044f\\u0434\\u043e\\u043a \\u0437\\u0432\\u0435\\u0440\\u0445\\u0443\",\n    \"Insert row below\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0440\\u043e\\u0436\\u043d\\u0456\\u0439 \\u0440\\u044f\\u0434\\u043e\\u043a \\u0437\\u043d\\u0438\\u0437\\u0443\",\n    \"Delete row\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0440\\u044f\\u0434\\u043e\\u043a\",\n    \"Column\": \"\\u0421\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c\",\n    \"Insert column before\": \"\\u0414\\u043e\\u0434\\u0430\\u0442\\u0438 \\u0441\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c \\u043b\\u0456\\u0432\\u043e\\u0440\\u0443\\u0447\",\n    \"Insert column after\": \"\\u0414\\u043e\\u0434\\u0430\\u0442\\u0438 \\u0441\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c \\u043f\\u0440\\u0430\\u0432\\u043e\\u0440\\u0443\\u0447\",\n    \"Delete column\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0441\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c\",\n    \"Cell\": \"\\u041a\\u043e\\u043c\\u0456\\u0440\\u043a\\u0430\",\n    \"Merge cells\": \"\\u041e\\u0431'\\u0454\\u0434\\u043d\\u0430\\u0442\\u0438 \\u043a\\u043e\\u043c\\u0456\\u0440\\u043a\\u0438\",\n    \"Horizontal split\": \"\\u0420\\u043e\\u0437\\u0434\\u0456\\u043b\\u0438\\u0442\\u0438 \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Vertical split\": \"\\u0420\\u043e\\u0437\\u0434\\u0456\\u043b\\u0438\\u0442\\u0438 \\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Cell Background\": \"\\u0441\\u0442\\u0456\\u043b\\u044c\\u043d\\u0438\\u043a\\u043e\\u0432\\u0438\\u0439 \\u0444\\u043e\\u043d\",\n    \"Vertical Align\": \"\\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u0430 \\u0432\\u0438\\u0440\\u0456\\u0432\\u043d\\u044e\\u0432\\u0430\\u043d\\u043d\\u044f\",\n    \"Top\": \"\\u0422\\u043e\\u043f\",\n    \"Middle\": \"\\u0441\\u0435\\u0440\\u0435\\u0434\\u043d\\u0456\\u0439\",\n    \"Bottom\": \"\\u0434\\u043d\\u043e\",\n    \"Align Top\": \"\\u0417\\u0456\\u0441\\u0442\\u0430\\u0432\\u0442\\u0435 \\u0432\\u0435\\u0440\\u0445\\u043d\\u044e\",\n    \"Align Middle\": \"\\u0432\\u0438\\u0440\\u0456\\u0432\\u043d\\u044f\\u0442\\u0438 \\u043f\\u043e \\u0441\\u0435\\u0440\\u0435\\u0434\\u0438\\u043d\\u0456\",\n    \"Align Bottom\": \"\\u0417\\u0456\\u0441\\u0442\\u0430\\u0432\\u0442\\u0435 \\u043d\\u0438\\u0436\\u043d\\u044e\",\n    \"Cell Style\": \"\\u0441\\u0442\\u0438\\u043b\\u044c \\u043a\\u043e\\u043c\\u0456\\u0440\\u043a\\u0438\",\n\n    // Files\n    \"Upload File\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0438\\u0442\\u0438 \\u0444\\u0430\\u0439\\u043b\",\n    \"Drop file\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0456\\u0441\\u0442\\u0456\\u0442\\u044c \\u0444\\u0430\\u0439\\u043b \\u0441\\u044e\\u0434\\u0438\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0441\\u043c\\u0430\\u0439\\u043b\\u0438\",\n    \"Grinning face\": \"\\u043f\\u043e\\u0441\\u043c\\u0456\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Grinning face with smiling eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0443\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Face with tears of joy\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437\\u0456 \\u0441\\u043b\\u044c\\u043e\\u0437\\u0430\\u043c\\u0438 \\u0440\\u0430\\u0434\\u043e\\u0441\\u0442\\u0456\",\n    \"Smiling face with open mouth\": \"\\u0423\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0435 \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \",\n    \"Smiling face with open mouth and cold sweat\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \\u0449\\u0456\\u043b\\u044c\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Smiling face with halo\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0433\\u0430\\u043b\\u043e\",\n    \"Smiling face with horns\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0440\\u043e\\u0433\\u0430\\u043c\\u0438\",\n    \"Winking face\": \"\\u043f\\u0456\\u0434\\u043c\\u043e\\u0440\\u0433\\u0443\\u044e\\u0447\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Smiling face with smiling eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0443\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Face savoring delicious food\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0441\\u043c\\u0430\\u043a\\u0443\\u044e\\u0447\\u0438 \\u0441\\u043c\\u0430\\u0447\\u043d\\u0443 \\u0457\\u0436\\u0443\",\n    \"Relieved face\": \"\\u0437\\u0432\\u0456\\u043b\\u044c\\u043d\\u0435\\u043d\\u043e \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Smiling face with heart-shaped eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0443 \\u0444\\u043e\\u0440\\u043c\\u0456 \\u0441\\u0435\\u0440\\u0446\\u044f \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Smiling face with sunglasses\": \"\\u0053\\u006d\\u0069\\u006c\\u0069\\u006e\\u0067 \\u0066\\u0061\\u0063\\u0065 \\u0077\\u0069\\u0074\\u0068 \\u0073\\u0075\\u006e\\u0067\\u006c\\u0061\\u0073\\u0073\\u0065\\u0073\",\n    \"Smirking face\": \"\\u043f\\u043e\\u0441\\u043c\\u0456\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Neutral face\": \"\\u0437\\u0432\\u0438\\u0447\\u0430\\u0439\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Expressionless face\": \"\\u043d\\u0435\\u0432\\u0438\\u0440\\u0430\\u0437\\u043d\\u0456 \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f\",\n    \"Unamused face\": \"\\u0055\\u006e\\u0061\\u006d\\u0075\\u0073\\u0065\\u0064 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face with cold sweat\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u043e\\u0433\\u043e \\u043f\\u043e\\u0442\\u0443\",\n    \"Pensive face\": \"\\u0437\\u0430\\u043c\\u0438\\u0441\\u043b\\u0435\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Confused face\": \"\\u043f\\u043b\\u0443\\u0442\\u0430\\u0442\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Confounded face\": \"\\u043d\\u0435\\u0445\\u0430\\u0439 \\u043f\\u043e\\u0441\\u043e\\u0440\\u043e\\u043c\\u043b\\u044f\\u0442\\u044c\\u0441\\u044f \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Kissing face\": \"\\u043f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043a\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face throwing a kiss\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u043a\\u0438\\u0434\\u0430\\u043b\\u0438 \\u043f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043e\\u043a\",\n    \"Kissing face with smiling eyes\": \"\\u041f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043a\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0443\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Kissing face with closed eyes\": \"\\u041f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043a\\u0438 \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0437\\u0430\\u043f\\u043b\\u044e\\u0449\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Face with stuck out tongue\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0441\\u0442\\u0438\\u0440\\u0447\\u0430\\u043b\\u0438 \\u044f\\u0437\\u0438\\u043a\",\n    \"Face with stuck out tongue and winking eye\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0441\\u0442\\u0438\\u0440\\u0447\\u0430\\u043b\\u0438 \\u044f\\u0437\\u0438\\u043a\\u0430 \\u0456 \\u0410\\u043d\\u0456\\u043c\\u043e\\u0432\\u0430\\u043d\\u0435 \\u043e\\u0447\\u0435\\u0439\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0441\\u0442\\u0438\\u0440\\u0447\\u0430\\u043b\\u0438 \\u044f\\u0437\\u0438\\u043a\\u0430 \\u0456 \\u0449\\u0456\\u043b\\u044c\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u0438\\u0442\\u0456 \\u043e\\u0447\\u0456\",\n    \"Disappointed face\": \"\\u0440\\u043e\\u0437\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Worried face\": \"\\u0441\\u0442\\u0443\\u0440\\u0431\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Angry face\": \"\\u0437\\u043b\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Pouting face\": \"\\u043f\\u0443\\u0445\\u043a\\u0456 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Crying face\": \"\\u043f\\u043b\\u0430\\u0447 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Persevering face\": \"\\u043d\\u0430\\u043f\\u043e\\u043b\\u0435\\u0433\\u043b\\u0438\\u0432\\u0430 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face with look of triumph\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0438\\u0434\\u043e\\u043c \\u0442\\u0440\\u0456\\u0443\\u043c\\u0444\\u0443\",\n    \"Disappointed but relieved face\": \"\\u0420\\u043e\\u0437\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439\\u002c \\u0430\\u043b\\u0435 \\u0437\\u0432\\u0456\\u043b\\u044c\\u043d\\u0435\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Frowning face with open mouth\": \"\\u041d\\u0430\\u0441\\u0443\\u043f\\u0438\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c\",\n    \"Anguished face\": \"\\u0431\\u043e\\u043b\\u0456\\u0441\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Fearful face\": \"\\u043f\\u043e\\u0431\\u043e\\u044e\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Weary face\": \"\\u0432\\u0442\\u043e\\u043c\\u043b\\u0435\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Sleepy face\": \"сонне обличчя\",\n    \"Tired face\": \"\\u0432\\u0442\\u043e\\u043c\\u0438\\u043b\\u0438\\u0441\\u044f \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Grimacing face\": \"\\u0433\\u0440\\u0438\\u043c\\u0430\\u0441\\u0443\\u044e\\u0447\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Loudly crying face\": \"\\u004c\\u006f\\u0075\\u0064\\u006c\\u0079 \\u0063\\u0072\\u0079\\u0069\\u006e\\u0067 \\u0066\\u0061\\u0063\\u0065\",\n    \"Face with open mouth\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c\",\n    \"Hushed face\": \"\\u0437\\u0430\\u0442\\u0438\\u0445 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face with open mouth and cold sweat\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u0438\\u0439 \\u043f\\u0456\\u0442\",\n    \"Face screaming in fear\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u043a\\u0440\\u0438\\u0447\\u0430\\u0442\\u0438 \\u0432 \\u0441\\u0442\\u0440\\u0430\\u0445\\u0443\",\n    \"Astonished face\": \"\\u0437\\u0434\\u0438\\u0432\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Flushed face\": \"\\u043f\\u0440\\u0438\\u043f\\u043b\\u0438\\u0432 \\u043a\\u0440\\u043e\\u0432\\u0456 \\u0434\\u043e \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f\",\n    \"Sleeping face\": \"\\u0421\\u043f\\u043b\\u044f\\u0447\\u0430 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Dizzy face\": \"\\u0414\\u0456\\u0437\\u0437\\u0456 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face without mouth\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0431\\u0435\\u0437 \\u0440\\u043e\\u0442\\u0430\",\n    \"Face with medical mask\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u043c\\u0435\\u0434\\u0438\\u0447\\u043d\\u043e\\u044e \\u043c\\u0430\\u0441\\u043a\\u043e\\u044e\",\n\n    // Line breaker\n    \"Break\": \"\\u0437\\u043b\\u043e\\u043c\\u0438\\u0442\\u0438\",\n\n    // Math\n    \"Subscript\": \"\\u043f\\u0456\\u0434\\u0440\\u044f\\u0434\\u043a\\u043e\\u0432\\u0438\\u0439\",\n    \"Superscript\": \"\\u043d\\u0430\\u0434\\u0440\\u044f\\u0434\\u043a\\u043e\\u0432\\u0438\\u0439 \\u0441\\u0438\\u043c\\u0432\\u043e\\u043b\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u043f\\u043e\\u0432\\u043d\\u043e\\u0435\\u043a\\u0440\\u0430\\u043d\\u043d\\u0438\\u0439 \\u0440\\u0435\\u0436\\u0438\\u043c\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0443 \\u043b\\u0456\\u043d\\u0456\\u044e\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u041e\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u0438 \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f\",\n\n    // Undo, redo\n    \"Undo\": \"\\u0421\\u043a\\u0430\\u0441\\u0443\\u0432\\u0430\\u0442\\u0438\",\n    \"Redo\": \"\\u041f\\u043e\\u0432\\u0442\\u043e\\u0440\\u0438\\u0442\\u0438\",\n\n    // Select all\n    \"Select All\": \"\\u0412\\u0438\\u0431\\u0440\\u0430\\u0442\\u0438 \\u0432\\u0441\\u0435\",\n\n    // Code view\n    \"Code View\": \"\\u041f\\u0435\\u0440\\u0435\\u0433\\u043b\\u044f\\u0434 \\u043a\\u043e\\u0434\\u0443\",\n\n    // Quote\n    \"Quote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\\u0430\",\n    \"Increase\": \"\\u0417\\u0431\\u0456\\u043b\\u044c\\u0448\\u0438\\u0442\\u0438\",\n    \"Decrease\": \"\\u0437\\u043d\\u0438\\u0436\\u0435\\u043d\\u043d\\u044f\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u0428\\u0432\\u0438\\u0434\\u043a\\u0438\\u0439 \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0430\"\n  },\n  direction: \"ltr\"\n};\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/uk.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Ukrainian\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['uk'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u041d\\u0430\\u043f\\u0438\\u0448\\u0456\\u0442\\u044c \\u0431\\u0443\\u0434\\u044c-\\u0449\\u043e\",\n\n    // Basic formatting\n    \"Bold\": \"\\u0416\\u0438\\u0440\\u043d\\u0438\\u0439\",\n    \"Italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0438\\u0432\",\n    \"Underline\": \"\\u041f\\u0456\\u0434\\u043a\\u0440\\u0435\\u0441\\u043b\\u0435\\u043d\\u0438\\u0439\",\n    \"Strikethrough\": \"\\u0417\\u0430\\u043a\\u0440\\u0435\\u0441\\u043b\\u0435\\u043d\\u0438\\u0439\",\n\n    // Main buttons\n    \"Insert\": \"\\u0432\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438\",\n    \"Delete\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438\",\n    \"Cancel\": \"\\u0421\\u043a\\u0430\\u0441\\u0443\\u0432\\u0430\\u0442\\u0438\",\n    \"OK\": \"OK\",\n    \"Back\": \"\\u043d\\u0430\\u0437\\u0430\\u0434\",\n    \"Remove\": \"\\u0432\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438\",\n    \"More\": \"\\u0431\\u0456\\u043b\\u044c\\u0448\\u0435\",\n    \"Update\": \"\\u043e\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u044f\",\n    \"Style\": \"\\u0441\\u0442\\u0438\\u043b\\u044c\",\n\n    // Font\n    \"Font Family\": \"\\u0428\\u0440\\u0438\\u0444\\u0442\",\n    \"Font Size\": \"\\u0420\\u043e\\u0437\\u043c\\u0456\\u0440 \\u0448\\u0440\\u0438\\u0444\\u0442\\u0443\",\n\n    // Colors\n    \"Colors\": \"\\u043a\\u043e\\u043b\\u044c\\u043e\\u0440\\u0438\",\n    \"Background\": \"\\u0424\\u043e\\u043d\",\n    \"Text\": \"\\u0422\\u0435\\u043a\\u0441\\u0442\",\n    \"HEX Color\": \"Шістнадцятковий колір\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\",\n    \"Normal\": \"\\u041d\\u043e\\u0440\\u043c\\u0430\\u043b\\u044c\\u043d\\u0438\\u0439\",\n    \"Code\": \"\\u041a\\u043e\\u0434\",\n    \"Heading 1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n    \"Heading 2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n    \"Heading 3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n    \"Heading 4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u043f\\u0443\\u043d\\u043a\\u0442 \\u0441\\u0442\\u0438\\u043b\\u044c\",\n    \"Inline Style\": \"\\u0432\\u0431\\u0443\\u0434\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u0441\\u0442\\u0438\\u043b\\u044c\",\n\n    // Alignment\n    \"Align\": \"\\u0412\\u0438\\u0440\\u0456\\u0432\\u043d\\u044e\\u0432\\u0430\\u043d\\u043d\\u044f\",\n    \"Align Left\": \"\\u041f\\u043e \\u043b\\u0456\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Center\": \"\\u041f\\u043e \\u0446\\u0435\\u043d\\u0442\\u0440\\u0443\",\n    \"Align Right\": \"\\u041f\\u043e \\u043f\\u0440\\u0430\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n    \"Align Justify\": \"\\u041f\\u043e \\u0448\\u0438\\u0440\\u0438\\u043d\\u0456\",\n    \"None\": \"\\u043d\\u0456\",\n\n    // Lists\n    \"Ordered List\": \"\\u041d\\u0443\\u043c\\u0435\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n    \"Default\": \"За замовчуванням\",\n    \"Lower Alpha\": \"Нижня альфа\",\n    \"Lower Greek\": \"Нижній грецький\",\n    \"Lower Roman\": \"Нижній римський\",\n    \"Upper Alpha\": \"Верхня альфа\",\n    \"Upper Roman\": \"Верхній римський\",\n\n    \"Unordered List\": \"\\u041c\\u0430\\u0440\\u043a\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n    \"Circle\": \"Коло\",\n    \"Disc\": \"Диск\",\n    \"Square\": \"Площа\",\n\n    // Line height\n    \"Line Height\": \"Висота рядка\",\n    \"Single\": \"Одномісний\",\n    \"Double\": \"Подвійний\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u0417\\u043c\\u0435\\u043d\\u0448\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0441\\u0442\\u0443\\u043f\",\n    \"Increase Indent\": \"\\u0417\\u0431\\u0456\\u043b\\u044c\\u0448\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0441\\u0442\\u0443\\u043f\",\n\n    // Links\n    \"Insert Link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Open in new tab\": \"\\u0412\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438 \\u0432 \\u043d\\u043e\\u0432\\u0456\\u0439 \\u0432\\u043a\\u043b\\u0430\\u0434\\u0446\\u0456\",\n    \"Open Link\": \"\\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Edit Link\": \"\\u0440\\u0435\\u0434\\u0430\\u0433\\u0443\\u0432\\u0430\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Unlink\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n    \"Choose Link\": \"\\u0412\\u0438\\u0431\\u0435\\u0440\\u0456\\u0442\\u044c \\u043f\\u043e\\u0441\\u0438\\u043b\\u0430\\u043d\\u043d\\u044f\",\n\n    // Images\n    \"Insert Image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"Upload Image\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0438\\u0442\\u0438 \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"By URL\": \"\\u0437\\u0430 URL\",\n    \"Browse\": \"\\u043f\\u0435\\u0440\\u0435\\u0433\\u043b\\u044f\\u0434\\u0430\\u0442\\u0438\",\n    \"Drop image\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0456\\u0441\\u0442\\u0456\\u0442\\u044c \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0441\\u044e\\u0434\\u0438\",\n    \"or click\": \"\\u0430\\u0431\\u043e \\u043d\\u0430\\u0442\\u0438\\u0441\\u043d\\u0456\\u0442\\u044c\",\n    \"Manage Images\": \"\\u041a\\u0435\\u0440\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\\u043c\\u0438\",\n    \"Loading\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"Deleting\": \"\\u0432\\u0438\\u0434\\u0430\\u043b\\u0435\\u043d\\u043d\\u044f\",\n    \"Tags\": \"\\u043a\\u043b\\u044e\\u0447\\u043e\\u0432\\u0456 \\u0441\\u043b\\u043e\\u0432\\u0430\",\n    \"Are you sure? Image will be deleted.\": \"\\u0412\\u0438 \\u0432\\u043f\\u0435\\u0432\\u043d\\u0435\\u043d\\u0456? \\u0417\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0431\\u0443\\u0434\\u0435 \\u0432\\u0438\\u0434\\u0430\\u043b\\u0435\\u043d\\u043e.\",\n    \"Replace\": \"\\u0437\\u0430\\u043c\\u0456\\u043d\\u044e\\u0432\\u0430\\u0442\\u0438\",\n    \"Uploading\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f\",\n    \"Loading image\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0435\\u043d\\u043d\\u044f \\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u044c\",\n    \"Display\": \"\\u0434\\u0438\\u0441\\u043f\\u043b\\u0435\\u0439\",\n    \"Inline\": \"\\u0412 \\u043b\\u0456\\u043d\\u0456\\u044e\",\n    \"Break Text\": \"\\u043f\\u0435\\u0440\\u0435\\u0440\\u0432\\u0430 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Alternative Text\": \"\\u0430\\u043b\\u044c\\u0442\\u0435\\u0440\\u043d\\u0430\\u0442\\u0438\\u0432\\u043d\\u0438\\u0439 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n    \"Change Size\": \"\\u0437\\u043c\\u0456\\u043d\\u0438\\u0442\\u0438 \\u0440\\u043e\\u0437\\u043c\\u0456\\u0440\",\n    \"Width\": \"\\u0428\\u0438\\u0440\\u0438\\u043d\\u0430\",\n    \"Height\": \"\\u0412\\u0438\\u0441\\u043e\\u0442\\u0430\",\n    \"Something went wrong. Please try again.\": \"\\u0429\\u043e\\u0441\\u044c \\u043f\\u0456\\u0448\\u043b\\u043e \\u043d\\u0435 \\u0442\\u0430\\u043a. \\u0411\\u0443\\u0434\\u044c \\u043b\\u0430\\u0441\\u043a\\u0430 \\u0441\\u043f\\u0440\\u043e\\u0431\\u0443\\u0439\\u0442\\u0435 \\u0449\\u0435 \\u0440\\u0430\\u0437.\",\n    \"Image Caption\": \"Заголовок зображення\",\n    \"Advanced Edit\": \"Розширений редагування\",\n\n    // Video\n    \"Insert Video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0432\\u0456\\u0434\\u0435\\u043e\",\n    \"Embedded Code\": \"\\u0432\\u0431\\u0443\\u0434\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043a\\u043e\\u0434\",\n    \"Paste in a video URL\": \"Вставте в відео-URL\",\n    \"Drop video\": \"Перетягніть відео\",\n    \"Your browser does not support HTML5 video.\": \"Ваш браузер не підтримує відео html5.\",\n    \"Upload Video\": \"Завантажити відео\",\n\n    // Tables\n    \"Insert Table\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u044e\",\n    \"Table Header\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0456\",\n    \"Remove Table\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0456\",\n    \"Table Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0456\",\n    \"Horizontal Align\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0435 \\u0432\\u0438\\u0440\\u0456\\u0432\\u043d\\u044e\\u0432\\u0430\\u043d\\u043d\\u044f\",\n    \"Row\": \"\\u0420\\u044f\\u0434\\u043e\\u043a\",\n    \"Insert row above\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0440\\u043e\\u0436\\u043d\\u0456\\u0439 \\u0440\\u044f\\u0434\\u043e\\u043a \\u0437\\u0432\\u0435\\u0440\\u0445\\u0443\",\n    \"Insert row below\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u043f\\u043e\\u0440\\u043e\\u0436\\u043d\\u0456\\u0439 \\u0440\\u044f\\u0434\\u043e\\u043a \\u0437\\u043d\\u0438\\u0437\\u0443\",\n    \"Delete row\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0440\\u044f\\u0434\\u043e\\u043a\",\n    \"Column\": \"\\u0421\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c\",\n    \"Insert column before\": \"\\u0414\\u043e\\u0434\\u0430\\u0442\\u0438 \\u0441\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c \\u043b\\u0456\\u0432\\u043e\\u0440\\u0443\\u0447\",\n    \"Insert column after\": \"\\u0414\\u043e\\u0434\\u0430\\u0442\\u0438 \\u0441\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c \\u043f\\u0440\\u0430\\u0432\\u043e\\u0440\\u0443\\u0447\",\n    \"Delete column\": \"\\u0412\\u0438\\u0434\\u0430\\u043b\\u0438\\u0442\\u0438 \\u0441\\u0442\\u043e\\u0432\\u043f\\u0435\\u0446\\u044c\",\n    \"Cell\": \"\\u041a\\u043e\\u043c\\u0456\\u0440\\u043a\\u0430\",\n    \"Merge cells\": \"\\u041e\\u0431'\\u0454\\u0434\\u043d\\u0430\\u0442\\u0438 \\u043a\\u043e\\u043c\\u0456\\u0440\\u043a\\u0438\",\n    \"Horizontal split\": \"\\u0420\\u043e\\u0437\\u0434\\u0456\\u043b\\u0438\\u0442\\u0438 \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Vertical split\": \"\\u0420\\u043e\\u0437\\u0434\\u0456\\u043b\\u0438\\u0442\\u0438 \\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u043e\",\n    \"Cell Background\": \"\\u0441\\u0442\\u0456\\u043b\\u044c\\u043d\\u0438\\u043a\\u043e\\u0432\\u0438\\u0439 \\u0444\\u043e\\u043d\",\n    \"Vertical Align\": \"\\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u0430 \\u0432\\u0438\\u0440\\u0456\\u0432\\u043d\\u044e\\u0432\\u0430\\u043d\\u043d\\u044f\",\n    \"Top\": \"\\u0422\\u043e\\u043f\",\n    \"Middle\": \"\\u0441\\u0435\\u0440\\u0435\\u0434\\u043d\\u0456\\u0439\",\n    \"Bottom\": \"\\u0434\\u043d\\u043e\",\n    \"Align Top\": \"\\u0417\\u0456\\u0441\\u0442\\u0430\\u0432\\u0442\\u0435 \\u0432\\u0435\\u0440\\u0445\\u043d\\u044e\",\n    \"Align Middle\": \"\\u0432\\u0438\\u0440\\u0456\\u0432\\u043d\\u044f\\u0442\\u0438 \\u043f\\u043e \\u0441\\u0435\\u0440\\u0435\\u0434\\u0438\\u043d\\u0456\",\n    \"Align Bottom\": \"\\u0417\\u0456\\u0441\\u0442\\u0430\\u0432\\u0442\\u0435 \\u043d\\u0438\\u0436\\u043d\\u044e\",\n    \"Cell Style\": \"\\u0441\\u0442\\u0438\\u043b\\u044c \\u043a\\u043e\\u043c\\u0456\\u0440\\u043a\\u0438\",\n\n    // Files\n    \"Upload File\": \"\\u0417\\u0430\\u0432\\u0430\\u043d\\u0442\\u0430\\u0436\\u0438\\u0442\\u0438 \\u0444\\u0430\\u0439\\u043b\",\n    \"Drop file\": \"\\u041f\\u0435\\u0440\\u0435\\u043c\\u0456\\u0441\\u0442\\u0456\\u0442\\u044c \\u0444\\u0430\\u0439\\u043b \\u0441\\u044e\\u0434\\u0438\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u0441\\u043c\\u0430\\u0439\\u043b\\u0438\",\n    \"Grinning face\": \"\\u043f\\u043e\\u0441\\u043c\\u0456\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Grinning face with smiling eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0443\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Face with tears of joy\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437\\u0456 \\u0441\\u043b\\u044c\\u043e\\u0437\\u0430\\u043c\\u0438 \\u0440\\u0430\\u0434\\u043e\\u0441\\u0442\\u0456\",\n    \"Smiling face with open mouth\": \"\\u0423\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0435 \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \",\n    \"Smiling face with open mouth and cold sweat\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \\u0449\\u0456\\u043b\\u044c\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Smiling face with halo\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0433\\u0430\\u043b\\u043e\",\n    \"Smiling face with horns\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0440\\u043e\\u0433\\u0430\\u043c\\u0438\",\n    \"Winking face\": \"\\u043f\\u0456\\u0434\\u043c\\u043e\\u0440\\u0433\\u0443\\u044e\\u0447\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Smiling face with smiling eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0443\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Face savoring delicious food\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0441\\u043c\\u0430\\u043a\\u0443\\u044e\\u0447\\u0438 \\u0441\\u043c\\u0430\\u0447\\u043d\\u0443 \\u0457\\u0436\\u0443\",\n    \"Relieved face\": \"\\u0437\\u0432\\u0456\\u043b\\u044c\\u043d\\u0435\\u043d\\u043e \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Smiling face with heart-shaped eyes\": \"\\u041f\\u043e\\u0441\\u043c\\u0456\\u0445\\u0430\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0443 \\u0444\\u043e\\u0440\\u043c\\u0456 \\u0441\\u0435\\u0440\\u0446\\u044f \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Smiling face with sunglasses\": \"\\u0053\\u006d\\u0069\\u006c\\u0069\\u006e\\u0067 \\u0066\\u0061\\u0063\\u0065 \\u0077\\u0069\\u0074\\u0068 \\u0073\\u0075\\u006e\\u0067\\u006c\\u0061\\u0073\\u0073\\u0065\\u0073\",\n    \"Smirking face\": \"\\u043f\\u043e\\u0441\\u043c\\u0456\\u0445\\u043d\\u0443\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Neutral face\": \"\\u0437\\u0432\\u0438\\u0447\\u0430\\u0439\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Expressionless face\": \"\\u043d\\u0435\\u0432\\u0438\\u0440\\u0430\\u0437\\u043d\\u0456 \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f\",\n    \"Unamused face\": \"\\u0055\\u006e\\u0061\\u006d\\u0075\\u0073\\u0065\\u0064 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face with cold sweat\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u043e\\u0433\\u043e \\u043f\\u043e\\u0442\\u0443\",\n    \"Pensive face\": \"\\u0437\\u0430\\u043c\\u0438\\u0441\\u043b\\u0435\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Confused face\": \"\\u043f\\u043b\\u0443\\u0442\\u0430\\u0442\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Confounded face\": \"\\u043d\\u0435\\u0445\\u0430\\u0439 \\u043f\\u043e\\u0441\\u043e\\u0440\\u043e\\u043c\\u043b\\u044f\\u0442\\u044c\\u0441\\u044f \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Kissing face\": \"\\u043f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043a\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face throwing a kiss\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u043a\\u0438\\u0434\\u0430\\u043b\\u0438 \\u043f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043e\\u043a\",\n    \"Kissing face with smiling eyes\": \"\\u041f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043a\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0443\\u0441\\u043c\\u0456\\u0445\\u043d\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Kissing face with closed eyes\": \"\\u041f\\u043e\\u0446\\u0456\\u043b\\u0443\\u043d\\u043a\\u0438 \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0437\\u0430\\u043f\\u043b\\u044e\\u0449\\u0435\\u043d\\u0438\\u043c\\u0438 \\u043e\\u0447\\u0438\\u043c\\u0430\",\n    \"Face with stuck out tongue\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0441\\u0442\\u0438\\u0440\\u0447\\u0430\\u043b\\u0438 \\u044f\\u0437\\u0438\\u043a\",\n    \"Face with stuck out tongue and winking eye\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0441\\u0442\\u0438\\u0440\\u0447\\u0430\\u043b\\u0438 \\u044f\\u0437\\u0438\\u043a\\u0430 \\u0456 \\u0410\\u043d\\u0456\\u043c\\u043e\\u0432\\u0430\\u043d\\u0435 \\u043e\\u0447\\u0435\\u0439\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u041e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f \\u0437 \\u0441\\u0442\\u0438\\u0440\\u0447\\u0430\\u043b\\u0438 \\u044f\\u0437\\u0438\\u043a\\u0430 \\u0456 \\u0449\\u0456\\u043b\\u044c\\u043d\\u043e \\u0437\\u0430\\u043a\\u0440\\u0438\\u0442\\u0456 \\u043e\\u0447\\u0456\",\n    \"Disappointed face\": \"\\u0440\\u043e\\u0437\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Worried face\": \"\\u0441\\u0442\\u0443\\u0440\\u0431\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Angry face\": \"\\u0437\\u043b\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Pouting face\": \"\\u043f\\u0443\\u0445\\u043a\\u0456 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Crying face\": \"\\u043f\\u043b\\u0430\\u0447 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Persevering face\": \"\\u043d\\u0430\\u043f\\u043e\\u043b\\u0435\\u0433\\u043b\\u0438\\u0432\\u0430 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face with look of triumph\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0438\\u0434\\u043e\\u043c \\u0442\\u0440\\u0456\\u0443\\u043c\\u0444\\u0443\",\n    \"Disappointed but relieved face\": \"\\u0420\\u043e\\u0437\\u0447\\u0430\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439\\u002c \\u0430\\u043b\\u0435 \\u0437\\u0432\\u0456\\u043b\\u044c\\u043d\\u0435\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Frowning face with open mouth\": \"\\u041d\\u0430\\u0441\\u0443\\u043f\\u0438\\u0432\\u0448\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c\",\n    \"Anguished face\": \"\\u0431\\u043e\\u043b\\u0456\\u0441\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Fearful face\": \"\\u043f\\u043e\\u0431\\u043e\\u044e\\u044e\\u0447\\u0438\\u0441\\u044c \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Weary face\": \"\\u0432\\u0442\\u043e\\u043c\\u043b\\u0435\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Sleepy face\": \"сонне обличчя\",\n    \"Tired face\": \"\\u0432\\u0442\\u043e\\u043c\\u0438\\u043b\\u0438\\u0441\\u044f \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Grimacing face\": \"\\u0433\\u0440\\u0438\\u043c\\u0430\\u0441\\u0443\\u044e\\u0447\\u0438 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Loudly crying face\": \"\\u004c\\u006f\\u0075\\u0064\\u006c\\u0079 \\u0063\\u0072\\u0079\\u0069\\u006e\\u0067 \\u0066\\u0061\\u0063\\u0065\",\n    \"Face with open mouth\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c\",\n    \"Hushed face\": \"\\u0437\\u0430\\u0442\\u0438\\u0445 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face with open mouth and cold sweat\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u0432\\u0456\\u0434\\u043a\\u0440\\u0438\\u0442\\u0438\\u043c \\u0440\\u043e\\u0442\\u043e\\u043c \\u0456 \\u0445\\u043e\\u043b\\u043e\\u0434\\u043d\\u0438\\u0439 \\u043f\\u0456\\u0442\",\n    \"Face screaming in fear\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u043a\\u0440\\u0438\\u0447\\u0430\\u0442\\u0438 \\u0432 \\u0441\\u0442\\u0440\\u0430\\u0445\\u0443\",\n    \"Astonished face\": \"\\u0437\\u0434\\u0438\\u0432\\u043e\\u0432\\u0430\\u043d\\u0438\\u0439 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Flushed face\": \"\\u043f\\u0440\\u0438\\u043f\\u043b\\u0438\\u0432 \\u043a\\u0440\\u043e\\u0432\\u0456 \\u0434\\u043e \\u043e\\u0431\\u043b\\u0438\\u0447\\u0447\\u044f\",\n    \"Sleeping face\": \"\\u0421\\u043f\\u043b\\u044f\\u0447\\u0430 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Dizzy face\": \"\\u0414\\u0456\\u0437\\u0437\\u0456 \\u043e\\u0441\\u043e\\u0431\\u0430\",\n    \"Face without mouth\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0431\\u0435\\u0437 \\u0440\\u043e\\u0442\\u0430\",\n    \"Face with medical mask\": \"\\u041e\\u0441\\u043e\\u0431\\u0430 \\u0437 \\u043c\\u0435\\u0434\\u0438\\u0447\\u043d\\u043e\\u044e \\u043c\\u0430\\u0441\\u043a\\u043e\\u044e\",\n\n    // Line breaker\n    \"Break\": \"\\u0437\\u043b\\u043e\\u043c\\u0438\\u0442\\u0438\",\n\n    // Math\n    \"Subscript\": \"\\u043f\\u0456\\u0434\\u0440\\u044f\\u0434\\u043a\\u043e\\u0432\\u0438\\u0439\",\n    \"Superscript\": \"\\u043d\\u0430\\u0434\\u0440\\u044f\\u0434\\u043a\\u043e\\u0432\\u0438\\u0439 \\u0441\\u0438\\u043c\\u0432\\u043e\\u043b\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u043f\\u043e\\u0432\\u043d\\u043e\\u0435\\u043a\\u0440\\u0430\\u043d\\u043d\\u0438\\u0439 \\u0440\\u0435\\u0436\\u0438\\u043c\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u0438 \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0443 \\u043b\\u0456\\u043d\\u0456\\u044e\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u041e\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u0438 \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0443\\u0432\\u0430\\u043d\\u043d\\u044f\",\n\n    // Save\n    \"Save\": \"\\u0417\\u0431\\u0435\\u0440\\u0435\\u0433\\u0442\\u0438\",\n\n    // Undo, redo\n    \"Undo\": \"\\u0421\\u043a\\u0430\\u0441\\u0443\\u0432\\u0430\\u0442\\u0438\",\n    \"Redo\": \"\\u041f\\u043e\\u0432\\u0442\\u043e\\u0440\\u0438\\u0442\\u0438\",\n\n    // Select all\n    \"Select All\": \"\\u0412\\u0438\\u0431\\u0440\\u0430\\u0442\\u0438 \\u0432\\u0441\\u0435\",\n\n    // Code view\n    \"Code View\": \"\\u041f\\u0435\\u0440\\u0435\\u0433\\u043b\\u044f\\u0434 \\u043a\\u043e\\u0434\\u0443\",\n\n    // Quote\n    \"Quote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\\u0430\",\n    \"Increase\": \"\\u0417\\u0431\\u0456\\u043b\\u044c\\u0448\\u0438\\u0442\\u0438\",\n    \"Decrease\": \"\\u0437\\u043d\\u0438\\u0436\\u0435\\u043d\\u043d\\u044f\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u0428\\u0432\\u0438\\u0434\\u043a\\u0438\\u0439 \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0430\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Спеціальні символи\",\n    \"Latin\": \"Латинський\",\n    \"Greek\": \"Грецький\",\n    \"Cyrillic\": \"Кирилиця\",\n    \"Punctuation\": \"Пунктуація\",\n    \"Currency\": \"Валюта\",\n    \"Arrows\": \"Стріли\",\n    \"Math\": \"Математика\",\n    \"Misc\": \"Різне\",\n\n    // Print.\n    \"Print\": \"Друкувати\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Перевірка орфографії\",\n\n    // Help\n    \"Help\": \"Допомогти\",\n    \"Shortcuts\": \"Ярлики\",\n    \"Inline Editor\": \"Вбудований редактор\",\n    \"Show the editor\": \"Показати редактору\",\n    \"Common actions\": \"Спільні дії\",\n    \"Copy\": \"Скопіювати\",\n    \"Cut\": \"Вирізати\",\n    \"Paste\": \"Вставити\",\n    \"Basic Formatting\": \"Основне форматування\",\n    \"Increase quote level\": \"Збільшити рівень цитування\",\n    \"Decrease quote level\": \"Знизити рівень цитування\",\n    \"Image / Video\": \"Зображення / відео\",\n    \"Resize larger\": \"Змінити розмір більше\",\n    \"Resize smaller\": \"Змінити розмір менше\",\n    \"Table\": \"Стіл\",\n    \"Select table cell\": \"Виберіть комірку таблиці\",\n    \"Extend selection one cell\": \"Продовжити виділення однієї комірки\",\n    \"Extend selection one row\": \"Продовжити виділення одного рядка\",\n    \"Navigation\": \"Навігація\",\n    \"Focus popup / toolbar\": \"Фокус спливаюче / панель інструментів\",\n    \"Return focus to previous position\": \"Поверніть фокус на попередню позицію\",\n\n    // Embed.ly\n    \"Embed URL\": \"Вставити URL-адресу\",\n    \"Paste in a URL to embed\": \"Вставте в url, щоб вставити\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Вставлений вміст надходить з документу Microsoft Word. ви хочете зберегти формат чи очистити його?\",\n    \"Keep\": \"Тримати\",\n    \"Clean\": \"Чистий\",\n    \"Word Paste Detected\": \"Слово паста виявлено\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/vi.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['vi'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"Vi\\u1EBFt \\u0111i\\u1EC1u g\\u00EC \\u0111\\u00F3...\",\n\n    // Basic formatting\n    \"Bold\": \"\\u0110\\u1EADm\",\n    \"Italic\": \"Nghi\\u00EAng\",\n    \"Underline\": \"G\\u1EA1ch ch\\u00E2n\",\n    \"Strikethrough\": \"G\\u1EA1ch ngang ch\\u1EEF\",\n\n    // Main buttons\n    \"Insert\": \"Ch\\u00E8n\",\n    \"Delete\": \"X\\u00F3a\",\n    \"Cancel\": \"H\\u1EE7y\",\n    \"OK\": \"OK\",\n    \"Back\": \"Tr\\u1EDF v\\u1EC1\",\n    \"Remove\": \"X\\u00F3a\",\n    \"More\": \"Th\\u00EAm\",\n    \"Update\": \"C\\u1EADp nh\\u1EADt\",\n    \"Style\": \"Ki\\u1EC3u\",\n\n    // Font\n    \"Font Family\": \"Ph\\u00F4ng ch\\u1EEF\",\n    \"Font Size\": \"C\\u1EE1 ch\\u1EEF\",\n\n    // Colors\n    \"Colors\": \"M\\u00E0u s\\u1EAFc\",\n    \"Background\": \"N\\u1EC1n\",\n    \"Text\": \"Ch\\u1EEF\",\n    \"HEX Color\": \"Màu hex\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u0110\\u1ECBnh d\\u1EA1ng \\u0111o\\u1EA1n v\\u0103n b\\u1EA3n\",\n    \"Normal\": \"Normal\",\n    \"Code\": \"Code\",\n    \"Heading 1\": \"Heading 1\",\n    \"Heading 2\": \"Heading 2\",\n    \"Heading 3\": \"Heading 3\",\n    \"Heading 4\": \"Heading 4\",\n\n    // Style\n    \"Paragraph Style\": \"Ki\\u1EC3u \\u0111o\\u1EA1n v\\u0103n b\\u1EA3n\",\n    \"Inline Style\": \"Ki\\u1EC3u d\\u00F2ng\",\n\n    // Alignment\n     \"Align\": \"C\\u0103n ch\\u1EC9nh\",\n    \"Align Left\": \"C\\u0103n tr\\u00E1i\",\n    \"Align Center\": \"C\\u0103n gi\\u1EEFa\",\n    \"Align Right\": \"C\\u0103n ph\\u1EA3i\",\n    \"Align Justify\": \"C\\u0103n \\u0111\\u1EC1u\",\n    \"None\": \"Kh\\u00F4ng\",\n\n    // Lists\n    \"Ordered List\": \"Danh s\\u00E1ch theo th\\u1EE9 t\\u1EF1\",\n    \"Default\": \"Mặc định\",\n    \"Lower Alpha\": \"Hạ alpha\",\n    \"Lower Greek\": \"Hạ Hy Lạp\",\n    \"Lower Roman\": \"Hạ La Mã\",\n    \"Upper Alpha\": \"Alpha trên\",\n    \"Upper Roman\": \"Thượng lưu La Mã\",\n\n    \"Unordered List\": \"Danh s\\u00E1ch li\\u1EC7t k\\u00EA\",\n    \"Circle\": \"Vòng tròn\",\n    \"Disc\": \"Đĩa\",\n    \"Square\": \"Quảng trường\",\n\n    // Line height\n    \"Line Height\": \"Chiều cao giữa các dòng\",\n    \"Single\": \"Độc thân\",\n    \"Double\": \"Gấp đôi\",\n\n    // Indent\n    \"Decrease Indent\": \"Gi\\u1EA3m c\\u0103n l\\u1EC1\",\n    \"Increase Indent\": \"T\\u0103ng c\\u0103n l\\u1EC1\",\n\n    // Links\n    \"Insert Link\": \"Ch\\u00E8n link\",\n    \"Open in new tab\": \"M\\u1EDF trong tab m\\u1EDBi\",\n    \"Open Link\": \"M\\u1EDF link\",\n    \"Edit Link\": \"S\\u1EEDa link\",\n    \"Unlink\": \"B\\u1ECF link\",\n    \"Choose Link\": \"Ch\\u1ECDn link\",\n\n    // Images\n    \"Insert Image\": \"Ch\\u00E8n h\\u00ECnh\",\n    \"Upload Image\": \"T\\u1EA3i h\\u00ECnh l\\u00EAn\",\n    \"By URL\": \"B\\u1EB1ng URL\",\n    \"Browse\": \"Duy\\u1EC7t file\",\n    \"Drop image\": \"K\\u00E9o th\\u1EA3 h\\u00ECnh\",\n    \"or click\": \"ho\\u1EB7c ch\\u1ECDn\",\n    \"Manage Images\": \"Qu\\u1EA3n l\\u00FD h\\u00ECnh \\u1EA3nh\",\n    \"Loading\": \"\\u0110ang t\\u1EA3i\",\n    \"Deleting\": \"\\u0110ang x\\u00F3a\",\n    \"Tags\": \"Tags\",\n    \"Are you sure? Image will be deleted.\": \"B\\u1EA1n c\\u00F3 ch\\u1EAFc ch\\u1EAFn? H\\u00ECnh \\u1EA3nh s\\u1EBD b\\u1ECB x\\u00F3a.\",\n    \"Replace\": \"Thay th\\u1EBF\",\n    \"Uploading\": \"\\u0110ang t\\u1EA3i l\\u00EAn\",\n    \"Loading image\": \"\\u0110ang t\\u1EA3i h\\u00ECnh \\u1EA3nh\",\n    \"Display\": \"Hi\\u1EC3n th\\u1ECB\",\n    \"Inline\": \"C\\u00F9ng d\\u00F2ng v\\u1EDBi ch\\u1EEF\",\n    \"Break Text\": \"Kh\\u00F4ng c\\u00F9ng d\\u00F2ng v\\u1EDBi ch\\u1EEF\",\n    \"Alternative Text\": \"Thay th\\u1EBF ch\\u1EEF\",\n    \"Change Size\": \"Thay \\u0111\\u1ED5i k\\u00EDch c\\u1EE1\",\n    \"Width\": \"Chi\\u1EC1u r\\u1ED9ng\",\n    \"Height\": \"Chi\\u1EC1u cao\",\n    \"Something went wrong. Please try again.\": \"C\\u00F3 l\\u1ED7i x\\u1EA3y ra. Vui l\\u00F2ng th\\u1EED l\\u1EA1i sau.\",\n    \"Image Caption\": \"Chú thích hình ảnh\",\n    \"Advanced Edit\": \"Chỉnh sửa tiên tiến\",\n\n    // Video\n    \"Insert Video\": \"Ch\\u00E8n video\",\n    \"Embedded Code\": \"M\\u00E3 nh\\u00FAng\",\n    \"Paste in a video URL\": \"Dán vào một url video\",\n    \"Drop video\": \"Thả video\",\n    \"Your browser does not support HTML5 video.\": \"Trình duyệt của bạn không hỗ trợ video html5.\",\n    \"Upload Video\": \"Tải video lên\",\n\n    // Tables\n    \"Insert Table\": \"Ch\\u00E8n b\\u1EA3ng\",\n    \"Table Header\": \"D\\u00F2ng \\u0111\\u1EA7u b\\u1EA3ng\",\n    \"Remove Table\": \"X\\u00F3a b\\u1EA3ng\",\n    \"Table Style\": \"Ki\\u1EC3u b\\u1EA3ng\",\n    \"Horizontal Align\": \"C\\u0103n ch\\u1EC9nh chi\\u1EC1u ngang\",\n    \"Row\": \"D\\u00F2ng\",\n    \"Insert row above\": \"Ch\\u00E8n d\\u00F2ng ph\\u00EDa tr\\u00EAn\",\n    \"Insert row below\": \"Ch\\u00E8n d\\u00F2ng ph\\u00EDa d\\u01B0\\u1EDBi\",\n    \"Delete row\": \"X\\u00F3a d\\u00F2ng\",\n    \"Column\": \"C\\u1ED9t\",\n    \"Insert column before\": \"Ch\\u00E8n c\\u1ED9t b\\u00EAn tr\\u00E1i\",\n    \"Insert column after\": \"Ch\\u00E8n c\\u1ED9t b\\u00EAn ph\\u1EA3i\",\n    \"Delete column\": \"X\\u00F3a c\\u1ED9t\",\n    \"Cell\": \"\\u00D4 b\\u1EA3ng\",\n    \"Merge cells\": \"G\\u1ED9p \\u00F4\",\n    \"Horizontal split\": \"Chia d\\u00F2ng\",\n    \"Vertical split\": \"Chia c\\u1ED9t\",\n    \"Cell Background\": \"M\\u00E0u n\\u1EC1n\",\n    \"Vertical Align\": \"C\\u0103n ch\\u1EC9nh chi\\u1EC1u d\\u1ECDc\",\n    \"Top\": \"Tr\\u00EAn c\\u00F9ng\",\n    \"Middle\": \"Gi\\u1EEFa\",\n    \"Bottom\": \"D\\u01B0\\u1EDBi \\u0111\\u00E1y\",\n    \"Align Top\": \"C\\u0103n tr\\u00EAn\",\n    \"Align Middle\": \"C\\u0103n gi\\u1EEFa\",\n    \"Align Bottom\": \"C\\u0103n d\\u01B0\\u1EDBi\",\n    \"Cell Style\": \"Ki\\u1EC3u \\u00F4\",\n\n    // Files\n    \"Upload File\": \"T\\u1EA3i file l\\u00EAn\",\n    \"Drop file\": \"K\\u00E9o th\\u1EA3 file\",\n\n    // Emoticons\n    \"Emoticons\": \"Bi\\u1EC3u t\\u01B0\\u1EE3ng c\\u1EA3m x\\u00FAc\",\n\n    // Line breaker\n    \"Break\": \"Ng\\u1EAFt d\\u00F2ng\",\n\n    // Math\n    \"Subscript\": \"Subscript\",\n    \"Superscript\": \"Superscript\",\n\n    // Full screen\n    \"Fullscreen\": \"To\\u00E0n m\\u00E0n h\\u00ECnh\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"Ch\\u00E8n \\u0111\\u01B0\\u1EDDng k\\u1EBB ngang v\\u0103n b\\u1EA3n\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"X\\u00F3a \\u0111\\u1ECBnh d\\u1EA1ng\",\n\n    // Save\n    \"Save\": \"Save\",\n\n    // Undo, redo\n    \"Undo\": \"Undo\",\n    \"Redo\": \"Redo\",\n\n    // Select all\n    \"Select All\": \"Ch\\u1ECDn t\\u1EA5t c\\u1EA3\",\n\n    // Code view\n    \"Code View\": \"Xem d\\u1EA1ng code\",\n\n    // Quote\n    \"Quote\": \"Tr\\u00EDch d\\u1EABn\",\n    \"Increase\": \"T\\u0103ng\",\n    \"Decrease\": \"Gi\\u1EA3m\",\n\n    // Quick Insert\n    \"Quick Insert\": \"Ch\\u00E8n nhanh\",\n\n    // Spcial Characters\n    \"Special Characters\": \"Nhân vật đặc biệt\",\n    \"Latin\": \"Latin\",\n    \"Greek\": \"Người Hy Lạp\",\n    \"Cyrillic\": \"Chữ viết tay\",\n    \"Punctuation\": \"Chấm câu\",\n    \"Currency\": \"Tiền tệ\",\n    \"Arrows\": \"Mũi tên\",\n    \"Math\": \"Môn Toán\",\n    \"Misc\": \"Misc\",\n\n    // Print.\n    \"Print\": \"In\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"Công cụ kiểm tra chính tả\",\n\n    // Help\n    \"Help\": \"Cứu giúp\",\n    \"Shortcuts\": \"Phím tắt\",\n    \"Inline Editor\": \"Trình biên tập nội tuyến\",\n    \"Show the editor\": \"Hiển thị trình soạn thảo\",\n    \"Common actions\": \"Hành động thông thường\",\n    \"Copy\": \"Sao chép\",\n    \"Cut\": \"Cắt tỉa\",\n    \"Paste\": \"Dán\",\n    \"Basic Formatting\": \"Định dạng cơ bản\",\n    \"Increase quote level\": \"Tăng mức báo giá\",\n    \"Decrease quote level\": \"Giảm mức giá\",\n    \"Image / Video\": \"Hình ảnh / video\",\n    \"Resize larger\": \"Thay đổi kích thước lớn hơn\",\n    \"Resize smaller\": \"Thay đổi kích thước nhỏ hơn\",\n    \"Table\": \"Bàn\",\n    \"Select table cell\": \"Chọn ô trong bảng\",\n    \"Extend selection one cell\": \"Mở rộng lựa chọn một ô\",\n    \"Extend selection one row\": \"Mở rộng lựa chọn một hàng\",\n    \"Navigation\": \"Dẫn đường\",\n    \"Focus popup / toolbar\": \"Tập trung popup / thanh công cụ\",\n    \"Return focus to previous position\": \"Quay trở lại vị trí trước\",\n\n    // Embed.ly\n    \"Embed URL\": \"Url nhúng\",\n    \"Paste in a URL to embed\": \"Dán vào một url để nhúng\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"Nội dung dán là đến từ một tài liệu từ microsoft. bạn có muốn giữ định dạng hoặc làm sạch nó?\",\n    \"Keep\": \"Giữ\",\n    \"Clean\": \"Dọn dẹp\",\n    \"Word Paste Detected\": \"Dán từ được phát hiện\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/zh_cn.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n* Simplified Chinese spoken in China.\n*/\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['zh_cn'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"输入内容\",\n\n    // Basic formatting\n    \"Bold\": \"粗体\",\n    \"Italic\": \"斜体\",\n    \"Underline\": \"下划线\",\n    \"Strikethrough\": \"删除线\",\n\n    // Main buttons\n    \"Insert\": \"插入\",\n    \"Delete\": \"删除\",\n    \"Cancel\": \"取消\",\n    \"OK\": \"确定\",\n    \"Back\": \"后退\",\n    \"Remove\": \"删除\",\n    \"More\": \"更多\",\n    \"Update\": \"更新\",\n    \"Style\": \"样式\",\n\n    // Font\n    \"Font Family\": \"字体\",\n    \"Font Size\": \"字号\",\n\n    // Colors\n    \"Colors\": \"颜色\",\n    \"Background\": \"背景\",\n    \"Text\": \"字体\",\n    \"HEX Color\": \"十六进制颜色\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"段落格式\",\n    \"Normal\": \"正文\",\n    \"Code\": \"代码\",\n    \"Heading 1\": \"标题1\",\n    \"Heading 2\": \"标题2\",\n    \"Heading 3\": \"标题3\",\n    \"Heading 4\": \"标题4\",\n\n    // Style\n    \"Paragraph Style\": \"段落样式\",\n    \"Inline Style\": \"内联样式\",\n\n    // Alignment\n    \"Align\": \"对齐方式\",\n    \"Align Left\": \"左对齐\",\n    \"Align Center\": \"居中\",\n    \"Align Right\": \"右对齐\",\n    \"Align Justify\": \"两端对齐\",\n    \"None\": \"无\",\n\n    // Lists\n    \"Ordered List\": \"编号\",\n    \"Default\": \"默认\",\n    \"Lower Alpha\": \"小写英文字母\",\n    \"Lower Greek\": \"小写希腊字母\",\n    \"Lower Roman\": \"小写罗马数字\",\n    \"Upper Alpha\": \"大写英文字母\",\n    \"Upper Roman\": \"大写罗马数字\",\n\n    \"Unordered List\": \"项目符号\",\n    \"Circle\": \"空心圆\",\n    \"Disc\": \"实心圆\",\n    \"Square\": \"方块\",\n\n    // Line height\n    \"Line Height\": \"线高\",\n    \"Single\": \"单\",\n    \"Double\": \"双\",\n\n    // Indent\n    \"Decrease Indent\": \"减少缩进\",\n    \"Increase Indent\": \"增加缩进\",\n\n    // Links\n    \"Insert Link\": \"插入超链接\",\n    \"Open in new tab\": \"在新标签页中打开\",\n    \"Open Link\": \"打开超链接\",\n    \"Edit Link\": \"编辑超链接\",\n    \"Unlink\": \"删除超链接\",\n    \"Choose Link\": \"选择超链接\",\n\n    // Images\n    \"Insert Image\": \"插入图片\",\n    \"Upload Image\": \"上传图片\",\n    \"By URL\": \"通过 URL\",\n    \"Browse\": \"浏览\",\n    \"Drop image\": \"拖入图片\",\n    \"or click\": \"或点击\",\n    \"Manage Images\": \"管理图片\",\n    \"Loading\": \"加载中\",\n    \"Deleting\": \"删除中\",\n    \"Tags\": \"标签\",\n    \"Are you sure? Image will be deleted.\": \"图片将会被删除，是否确认？\",\n    \"Replace\": \"替换\",\n    \"Uploading\": \"上传中\",\n    \"Loading image\": \"图片加载中\",\n    \"Display\": \"显示\",\n    \"Inline\": \"嵌入型\",\n    \"Break Text\": \"上下型环绕\",\n    \"Alternative Text\": \"替换文字\",\n    \"Change Size\": \"改变大小\",\n    \"Width\": \"宽度\",\n    \"Height\": \"高度\",\n    \"Something went wrong. Please try again.\": \"发生错误，请重试。\",\n    \"Image Caption\": \"图片标题\",\n    \"Advanced Edit\": \"高级编辑\",\n\n    // Video\n    \"Insert Video\": \"插入视频\",\n    \"Embedded Code\": \"嵌入代码\",\n    \"Paste in a video URL\": \"粘贴视频网址\",\n    \"Drop video\": \"拖入视频\",\n    \"Your browser does not support HTML5 video.\": \"您的浏览器不支持 HTML5 视频。\",\n    \"Upload Video\": \"上传视频\",\n\n    // Tables\n    \"Insert Table\": \"插入表格\",\n    \"Table Header\": \"表头\",\n    \"Remove Table\": \"删除表格\",\n    \"Table Style\": \"表格样式\",\n    \"Horizontal Align\": \"水平对齐方式\",\n    \"Row\": \"行\",\n    \"Insert row above\": \"在上方插入\",\n    \"Insert row below\": \"在下方插入\",\n    \"Delete row\": \"删除行\",\n    \"Column\": \"列\",\n    \"Insert column before\": \"在左侧插入\",\n    \"Insert column after\": \"在右侧插入\",\n    \"Delete column\": \"删除列\",\n    \"Cell\": \"单元格\",\n    \"Merge cells\": \"合并单元格\",\n    \"Horizontal split\": \"水平分割\",\n    \"Vertical split\": \"垂直分割\",\n    \"Cell Background\": \"单元格背景\",\n    \"Vertical Align\": \"垂直对齐方式\",\n    \"Top\": \"靠上\",\n    \"Middle\": \"居中\",\n    \"Bottom\": \"靠下\",\n    \"Align Top\": \"靠上对齐\",\n    \"Align Middle\": \"居中对齐\",\n    \"Align Bottom\": \"靠下对齐\",\n    \"Cell Style\": \"单元格样式\",\n\n    // Files\n    \"Upload File\": \"上传文件\",\n    \"Drop file\": \"拖入文件\",\n\n    // Emoticons\n    \"Emoticons\": \"表情符号\",\n    \"Grinning face\": \"露齿笑脸\",\n    \"Grinning face with smiling eyes\": \"露齿笑到眯起眼\",\n    \"Face with tears of joy\": \"笑哭\",\n    \"Smiling face with open mouth\": \"张嘴微笑\",\n    \"Smiling face with open mouth and smiling eyes\": \"眯眼张嘴微笑\",\n    \"Smiling face with open mouth and cold sweat\": \"带冷汗的张嘴微笑\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"紧闭双眼张嘴微笑\",\n    \"Smiling face with halo\": \"带光环微笑\",\n    \"Smiling face with horns\": \"带牛角的微笑\",\n    \"Winking face\": \"眨眼\",\n    \"Smiling face with smiling eyes\": \"眯眼微笑\",\n    \"Face savoring delicious food\": \"馋\",\n    \"Relieved face\": \"如释重负\",\n    \"Smiling face with heart-shaped eyes\": \"桃心眼微笑\",\n    \"Smiling face with sunglasses\": \"戴太阳镜微笑\",\n    \"Smirking face\": \"得意地笑\",\n    \"Neutral face\": \"中性脸\",\n    \"Expressionless face\": \"面无表情\",\n    \"Unamused face\": \"不高兴\",\n    \"Face with cold sweat\": \"冷汗\",\n    \"Pensive face\": \"沉思\",\n    \"Confused face\": \"迷惑\",\n    \"Confounded face\": \"困惑\",\n    \"Kissing face\": \"嘴巴嘟嘟\",\n    \"Face throwing a kiss\": \"飞吻\",\n    \"Kissing face with smiling eyes\": \"眯眼接吻\",\n    \"Kissing face with closed eyes\": \"闭眼接吻\",\n    \"Face with stuck out tongue\": \"吐舌\",\n    \"Face with stuck out tongue and winking eye\": \"眨眼吐舌\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"眯眼吐舌\",\n    \"Disappointed face\": \"失望\",\n    \"Worried face\": \"担心\",\n    \"Angry face\": \"生气\",\n    \"Pouting face\": \"撅嘴\",\n    \"Crying face\": \"大哭\",\n    \"Persevering face\": \"坚强\",\n    \"Face with look of triumph\": \"扬眉吐气\",\n    \"Disappointed but relieved face\": \"失望\",\n    \"Frowning face with open mouth\": \"皱眉\",\n    \"Anguished face\": \"痛苦\",\n    \"Fearful face\": \"害怕\",\n    \"Weary face\": \"疲惫\",\n    \"Sleepy face\": \"困了\",\n    \"Tired face\": \"累了\",\n    \"Grimacing face\": \"扭曲脸\",\n    \"Loudly crying face\": \"大哭\",\n    \"Face with open mouth\": \"张开嘴\",\n    \"Hushed face\": \"安静\",\n    \"Face with open mouth and cold sweat\": \"冷汗\",\n    \"Face screaming in fear\": \"害怕尖叫\",\n    \"Astonished face\": \"惊讶\",\n    \"Flushed face\": \"脸红\",\n    \"Sleeping face\": \"熟睡\",\n    \"Dizzy face\": \"眩晕\",\n    \"Face without mouth\": \"没有嘴的脸\",\n    \"Face with medical mask\": \"口罩脸\",\n\n    // Line breaker\n    \"Break\": \"换行\",\n\n    // Math\n    \"Subscript\": \"下标\",\n    \"Superscript\": \"上标\",\n\n    // Full screen\n    \"Fullscreen\": \"全屏\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"插入水平线\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"清除格式\",\n\n    // Save\n    \"Save\": \"保存\",\n\n    // Undo, redo\n    \"Undo\": \"撤消\",\n    \"Redo\": \"恢复\",\n\n    // Select all\n    \"Select All\": \"全选\",\n\n    // Code view\n    \"Code View\": \"代码视图\",\n\n    // Quote\n    \"Quote\": \"引用\",\n    \"Increase\": \"增加引用级别\",\n    \"Decrease\": \"减少引用级别\",\n\n    // Quick Insert\n    \"Quick Insert\": \"快速插入\",\n\n    // Spcial Characters\n    \"Special Characters\": \"特殊字符\",\n    \"Latin\": \"拉丁字母\",\n    \"Greek\": \"希腊字母\",\n    \"Cyrillic\": \"西里尔字母\",\n    \"Punctuation\": \"标点\",\n    \"Currency\": \"货币\",\n    \"Arrows\": \"箭头\",\n    \"Math\": \"数学\",\n    \"Misc\": \"杂项\",\n\n    // Print.\n    \"Print\": \"打印\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"拼写检查器\",\n\n    // Help\n    \"Help\": \"帮助\",\n    \"Shortcuts\": \"快捷键\",\n    \"Inline Editor\": \"内联编辑器\",\n    \"Show the editor\": \"显示编辑器\",\n    \"Common actions\": \"常用操作\",\n    \"Copy\": \"复制\",\n    \"Cut\": \"剪切\",\n    \"Paste\": \"粘贴\",\n    \"Basic Formatting\": \"基本格式\",\n    \"Increase quote level\": \"增加引用级别\",\n    \"Decrease quote level\": \"减少引用级别\",\n    \"Image / Video\": \"图像/视频\",\n    \"Resize larger\": \"放大\",\n    \"Resize smaller\": \"缩小\",\n    \"Table\": \"表格\",\n    \"Select table cell\": \"选择单元格\",\n    \"Extend selection one cell\": \"增加选中的单元格\",\n    \"Extend selection one row\": \"增加选中的行\",\n    \"Navigation\": \"导航\",\n    \"Focus popup / toolbar\": \"焦点弹出/工具栏\",\n    \"Return focus to previous position\": \"将焦点返回到上一个位置\",\n\n    // Embed.ly\n    \"Embed URL\": \"嵌入网址\",\n    \"Paste in a URL to embed\": \"粘贴要嵌入的网址\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"粘贴的内容来自微软 Word 文档。你想保留还是清除格式？\",\n    \"Keep\": \"保留\",\n    \"Clean\": \"清除\",\n    \"Word Paste Detected\": \"检测到粘贴自 Word 的内容\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/froala/languages/zh_tw.js",
    "content": "/*!\n * Froala Editor for October CMS\n */\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = function( root, jQuery ) {\n            if ( jQuery === undefined ) {\n                // require('jQuery') returns a factory that requires window to\n                // build a jQuery instance, we normalize how we use modules\n                // that require this pattern but the window provided is a noop\n                // if it's defined (how jquery works)\n                if ( typeof window !== 'undefined' ) {\n                    jQuery = require('jquery');\n                }\n                else {\n                    jQuery = require('jquery')(root);\n                }\n            }\n            return factory(jQuery);\n        };\n    } else {\n        // Browser globals\n        factory(window.jQuery);\n    }\n}(function ($) {\n/**\n * Traditional Chinese spoken in Taiwan.\n */\n\nif (!$.FE_LANGUAGE) {\n    $.FE_LANGUAGE = {};\n}\n\n$.FE_LANGUAGE['zh_tw'] = {\n  translation: {\n    // Place holder\n    \"Type something\": \"\\u8f38\\u5165\\u4e00\\u4e9b\\u5167\\u5bb9\",\n\n    // Basic formatting\n    \"Bold\": \"\\u7c97\\u9ad4\",\n    \"Italic\": \"\\u659c\\u9ad4\",\n    \"Underline\": \"\\u5e95\\u7dda\",\n    \"Strikethrough\": \"\\u522a\\u9664\\u7dda\",\n\n    // Main buttons\n    \"Insert\": \"\\u63d2\\u5165\",\n    \"Delete\": \"\\u522a\\u9664\",\n    \"Cancel\": \"\\u53d6\\u6d88\",\n    \"OK\": \"\\u78ba\\u5b9a\",\n    \"Back\": \"\\u5f8c\",\n    \"Remove\": \"\\u79fb\\u9664\",\n    \"More\": \"\\u66f4\\u591a\",\n    \"Update\": \"\\u66f4\\u65b0\",\n    \"Style\": \"\\u6a23\\u5f0f\",\n\n    // Font\n    \"Font Family\": \"\\u5b57\\u9ad4\",\n    \"Font Size\": \"\\u5b57\\u578b\\u5927\\u5c0f\",\n\n    // Colors\n    \"Colors\": \"\\u984f\\u8272\",\n    \"Background\": \"\\u80cc\\u666f\",\n    \"Text\": \"\\u6587\\u5b57\",\n    \"HEX Color\": \"十六進制顏色\",\n\n    // Paragraphs\n    \"Paragraph Format\": \"\\u683c\\u5f0f\",\n    \"Normal\": \"\\u6b63\\u5e38\",\n    \"Code\": \"\\u7a0b\\u5f0f\\u78bc\",\n    \"Heading 1\": \"\\u6a19\\u984c 1\",\n    \"Heading 2\": \"\\u6a19\\u984c 2\",\n    \"Heading 3\": \"\\u6a19\\u984c 3\",\n    \"Heading 4\": \"\\u6a19\\u984c 4\",\n\n    // Style\n    \"Paragraph Style\": \"\\u6bb5\\u843d\\u6a23\\u5f0f\",\n    \"Inline Style\": \"\\u5167\\u806f\\u6a23\\u5f0f\",\n\n    // Alignment\n    \"Align\": \"\\u5c0d\\u9f4a\",\n    \"Align Left\": \"\\u7f6e\\u5de6\\u5c0d\\u9f4a\",\n    \"Align Center\": \"\\u7f6e\\u4e2d\\u5c0d\\u9f4a\",\n    \"Align Right\": \"\\u7f6e\\u53f3\\u5c0d\\u9f4a\",\n    \"Align Justify\": \"\\u5de6\\u53f3\\u5c0d\\u9f4a\",\n    \"None\": \"\\u7121\",\n\n    // Lists\n    \"Ordered List\": \"\\u6578\\u5b57\\u6e05\\u55ae\",\n    \"Default\": \"默認\",\n    \"Lower Alpha\": \"低α\",\n    \"Lower Greek\": \"下希臘\",\n    \"Lower Roman\": \"較低的羅馬\",\n    \"Upper Alpha\": \"上阿爾法\",\n    \"Upper Roman\": \"上羅馬\",\n\n    \"Unordered List\": \"\\u9805\\u76ee\\u6e05\\u55ae\",\n    \"Circle\": \"圈\",\n    \"Disc\": \"圓盤\",\n    \"Square\": \"廣場\",\n\n    // Line height\n    \"Line Height\": \"線高\",\n    \"Single\": \"單\",\n    \"Double\": \"雙\",\n\n    // Indent\n    \"Decrease Indent\": \"\\u6e1b\\u5c11\\u7e2e\\u6392\",\n    \"Increase Indent\": \"\\u589e\\u52a0\\u7e2e\\u6392\",\n\n    // Links\n    \"Insert Link\": \"\\u63d2\\u5165\\u9023\\u7d50\",\n    \"Open in new tab\": \"\\u5728\\u65b0\\u5206\\u9801\\u958b\\u555f\",\n    \"Open Link\": \"\\u958b\\u555f\\u9023\\u7d50\",\n    \"Edit Link\": \"\\u7de8\\u8f2f\\u9023\\u7d50\",\n    \"Unlink\": \"\\u79fb\\u9664\\u9023\\u7d50\",\n    \"Choose Link\": \"\\u9078\\u64c7\\u9023\\u7d50\",\n\n    // Images\n    \"Insert Image\": \"\\u63d2\\u5165\\u5716\\u7247\",\n    \"Upload Image\": \"\\u4e0a\\u50b3\\u5716\\u7247\",\n    \"By URL\": \"\\u7db2\\u5740\\u4e0a\\u50b3\",\n    \"Browse\": \"\\u700f\\u89bd\",\n    \"Drop image\": \"\\u5716\\u7247\\u62d6\\u66f3\",\n    \"or click\": \"\\u6216\\u9ede\\u64ca\",\n    \"Manage Images\": \"\\u7ba1\\u7406\\u5716\\u7247\",\n    \"Loading\": \"\\u8f09\\u5165\\u4e2d\",\n    \"Deleting\": \"\\u522a\\u9664\",\n    \"Tags\": \"\\u6a19\\u7c64\",\n    \"Are you sure? Image will be deleted.\": \"\\u78ba\\u5b9a\\u522a\\u9664\\u5716\\u7247\\uff1f\",\n    \"Replace\": \"\\u66f4\\u63db\",\n    \"Uploading\": \"\\u4e0a\\u50b3\",\n    \"Loading image\": \"\\u4e0a\\u50b3\\u4e2d\",\n    \"Display\": \"\\u986f\\u793a\",\n    \"Inline\": \"\\u5d4c\\u5165\",\n    \"Break Text\": \"\\u8207\\u6587\\u5b57\\u5206\\u96e2\",\n    \"Alternative Text\": \"\\u6587\\u5b57\\u74b0\\u7e5e\",\n    \"Change Size\": \"\\u8abf\\u6574\\u5927\\u5c0f\",\n    \"Width\": \"\\u5bec\\u5ea6\",\n    \"Height\": \"\\u9ad8\\u5ea6\",\n    \"Something went wrong. Please try again.\": \"\\u932f\\u8aa4\\uff0c\\u8acb\\u518d\\u8a66\\u4e00\\u6b21\\u3002\",\n    \"Image Caption\": \"圖片說明\",\n    \"Advanced Edit\": \"高級編輯\",\n\n    // Video\n    \"Insert Video\": \"\\u63d2\\u5165\\u5f71\\u7247\",\n    \"Embedded Code\": \"\\u5d4c\\u5165\\u7a0b\\u5f0f\\u78bc\",\n    \"Paste in a video URL\": \"粘貼在視頻網址\",\n    \"Drop video\": \"放下視頻\",\n    \"Your browser does not support HTML5 video.\": \"您的瀏覽器不支持html5視頻。\",\n    \"Upload Video\": \"上傳視頻\",\n\n    // Tables\n    \"Insert Table\": \"\\u63d2\\u5165\\u8868\\u683c\",\n    \"Table Header\": \"\\u8868\\u982d\",\n    \"Remove Table\": \"\\u522a\\u9664\\u8868\",\n    \"Table Style\": \"\\u8868\\u6a23\\u5f0f\",\n    \"Horizontal Align\": \"\\u6c34\\u6e96\\u5c0d\\u9f4a\\u65b9\\u5f0f\",\n    \"Row\": \"\\u884c\",\n    \"Insert row above\": \"\\u5411\\u4e0a\\u63d2\\u5165\\u4e00\\u884c\",\n    \"Insert row below\": \"\\u5411\\u4e0b\\u63d2\\u5165\\u4e00\\u884c\",\n    \"Delete row\": \"\\u522a\\u9664\\u884c\",\n    \"Column\": \"\\u5217\",\n    \"Insert column before\": \"\\u5411\\u5de6\\u63d2\\u5165\\u4e00\\u5217\",\n    \"Insert column after\": \"\\u5411\\u53f3\\u63d2\\u5165\\u4e00\\u5217\",\n    \"Delete column\": \"\\u522a\\u9664\\u884c\",\n    \"Cell\": \"\\u5132\\u5b58\\u683c\",\n    \"Merge cells\": \"\\u5408\\u4f75\\u5132\\u5b58\\u683c\",\n    \"Horizontal split\": \"\\u6c34\\u5e73\\u5206\\u5272\",\n    \"Vertical split\": \"\\u5782\\u76f4\\u5206\\u5272\",\n    \"Cell Background\": \"\\u5132\\u5b58\\u683c\\u80cc\\u666f\",\n    \"Vertical Align\": \"\\u5782\\u76f4\\u5c0d\\u9f4a\\u65b9\\u5f0f\",\n    \"Top\": \"\\u4e0a\",\n    \"Middle\": \"\\u4e2d\",\n    \"Bottom\": \"\\u4e0b\",\n    \"Align Top\": \"\\u5411\\u4e0a\\u5c0d\\u9f4a\",\n    \"Align Middle\": \"\\u4e2d\\u9593\\u5c0d\\u9f4a\",\n    \"Align Bottom\": \"\\u5e95\\u90e8\\u5c0d\\u9f4a\",\n    \"Cell Style\": \"\\u5132\\u5b58\\u683c\\u6a23\\u5f0f\",\n\n    // Files\n    \"Upload File\": \"\\u4e0a\\u50b3\\u6587\\u4ef6\",\n    \"Drop file\": \"\\u6587\\u4ef6\\u62d6\\u66f3\",\n\n    // Emoticons\n    \"Emoticons\": \"\\u8868\\u60c5\",\n    \"Grinning face\": \"\\u81c9\\u4e0a\\u7b11\\u563b\\u563b\",\n    \"Grinning face with smiling eyes\": \"\\u7b11\\u563b\\u563b\\u7684\\u81c9\\uff0c\\u542b\\u7b11\\u7684\\u773c\\u775b\",\n    \"Face with tears of joy\": \"\\u81c9\\u4e0a\\u5e36\\u8457\\u559c\\u6085\\u7684\\u6dda\\u6c34\",\n    \"Smiling face with open mouth\": \"\\u7b11\\u81c9\\u5f35\\u958b\\u5634\",\n    \"Smiling face with open mouth and smiling eyes\": \"\\u7b11\\u81c9\\u5f35\\u958b\\u5634\\u5fae\\u7b11\\u7684\\u773c\\u775b\",\n    \"Smiling face with open mouth and cold sweat\": \"\\u7b11\\u81c9\\u5f35\\u958b\\u5634\\uff0c\\u4e00\\u8eab\\u51b7\\u6c57\",\n    \"Smiling face with open mouth and tightly-closed eyes\": \"\\u7b11\\u81c9\\u5f35\\u958b\\u5634\\uff0c\\u7dca\\u7dca\\u9589\\u8457\\u773c\\u775b\",\n    \"Smiling face with halo\": \"\\u7b11\\u81c9\\u6688\",\n    \"Smiling face with horns\": \"\\u5fae\\u7b11\\u7684\\u81c9\\u89d2\",\n    \"Winking face\": \"\\u7728\\u773c\\u8868\\u60c5\",\n    \"Smiling face with smiling eyes\": \"\\u9762\\u5e36\\u5fae\\u7b11\\u7684\\u773c\\u775b\",\n    \"Face savoring delicious food\": \"\\u9762\\u5c0d\\u54c1\\u5690\\u7f8e\\u5473\\u7684\\u98df\\u7269\",\n    \"Relieved face\": \"\\u9762\\u5c0d\\u5982\\u91cb\\u91cd\\u8ca0\",\n    \"Smiling face with heart-shaped eyes\": \"\\u5fae\\u7b11\\u7684\\u81c9\\uff0c\\u5fc3\\u81df\\u5f62\\u7684\\u773c\\u775b\",\n    \"Smiling face with sunglasses\": \"\\u7b11\\u81c9\\u592a\\u967d\\u93e1\",\n    \"Smirking face\": \"\\u9762\\u5c0d\\u9762\\u5e36\\u7b11\\u5bb9\",\n    \"Neutral face\": \"\\u4e2d\\u6027\\u9762\",\n    \"Expressionless face\": \"\\u9762\\u7121\\u8868\\u60c5\",\n    \"Unamused face\": \"\\u4e00\\u81c9\\u4e0d\\u5feb\\u7684\\u81c9\",\n    \"Face with cold sweat\": \"\\u9762\\u5c0d\\u51b7\\u6c57\",\n    \"Pensive face\": \"\\u6c89\\u601d\\u7684\\u81c9\",\n    \"Confused face\": \"\\u9762\\u5c0d\\u56f0\\u60d1\",\n    \"Confounded face\": \"\\u8a72\\u6b7b\\u7684\\u81c9\",\n    \"Kissing face\": \"\\u9762\\u5c0d\\u63a5\\u543b\",\n    \"Face throwing a kiss\": \"\\u9762\\u5c0d\\u6295\\u64f2\\u4e00\\u500b\\u543b\",\n    \"Kissing face with smiling eyes\": \"\\u63a5\\u543b\\u81c9\\uff0c\\u542b\\u7b11\\u7684\\u773c\\u775b\",\n    \"Kissing face with closed eyes\": \"\\u63a5\\u543b\\u7684\\u81c9\\u9589\\u8457\\u773c\\u775b\",\n    \"Face with stuck out tongue\": \"\\u9762\\u5c0d\\u4f38\\u51fa\\u820c\\u982d\",\n    \"Face with stuck out tongue and winking eye\": \"\\u9762\\u5c0d\\u4f38\\u51fa\\u820c\\u982d\\u548c\\u7728\\u52d5\\u7684\\u773c\\u775b\",\n    \"Face with stuck out tongue and tightly-closed eyes\": \"\\u9762\\u5c0d\\u4f38\\u51fa\\u820c\\u982d\\u548c\\u7dca\\u9589\\u7684\\u773c\\u775b\",\n    \"Disappointed face\": \"\\u9762\\u5c0d\\u5931\\u671b\",\n    \"Worried face\": \"\\u9762\\u5c0d\\u64d4\\u5fc3\",\n    \"Angry face\": \"\\u61a4\\u6012\\u7684\\u81c9\",\n    \"Pouting face\": \"\\u9762\\u5c0d\\u5658\\u5634\",\n    \"Crying face\": \"\\u54ed\\u6ce3\\u7684\\u81c9\",\n    \"Persevering face\": \"\\u600e\\u5948\\u81c9\",\n    \"Face with look of triumph\": \"\\u9762\\u5e36\\u770b\\u7684\\u52dd\\u5229\",\n    \"Disappointed but relieved face\": \"\\u5931\\u671b\\uff0c\\u4f46\\u81c9\\u4e0a\\u91cb\\u7136\",\n    \"Frowning face with open mouth\": \"\\u9762\\u5c0d\\u76ba\\u8457\\u7709\\u982d\\u5f35\\u53e3\",\n    \"Anguished face\": \"\\u9762\\u5c0d\\u75db\\u82e6\",\n    \"Fearful face\": \"\\u53ef\\u6015\\u7684\\u81c9\",\n    \"Weary face\": \"\\u9762\\u5c0d\\u53ad\\u5026\",\n    \"Sleepy face\": \"\\u9762\\u5c0d\\u56f0\",\n    \"Tired face\": \"\\u75b2\\u618a\\u7684\\u81c9\",\n    \"Grimacing face\": \"\\u7319\\u7370\\u7684\\u81c9\",\n    \"Loudly crying face\": \"\\u5927\\u8072\\u54ed\\u81c9\",\n    \"Face with open mouth\": \"\\u9762\\u5c0d\\u5f35\\u958b\\u5634\",\n    \"Hushed face\": \"\\u5b89\\u975c\\u7684\\u81c9\",\n    \"Face with open mouth and cold sweat\": \"\\u9762\\u5c0d\\u5f35\\u958b\\u5634\\uff0c\\u4e00\\u8eab\\u51b7\\u6c57\",\n    \"Face screaming in fear\": \"\\u9762\\u5c0d\\u5c16\\u53eb\\u5728\\u6050\\u61fc\\u4e2d\",\n    \"Astonished face\": \"\\u9762\\u5c0d\\u9a5a\\u8a1d\",\n    \"Flushed face\": \"\\u7d05\\u64b2\\u64b2\\u7684\\u81c9\\u86cb\",\n    \"Sleeping face\": \"\\u719f\\u7761\\u7684\\u81c9\",\n    \"Dizzy face\": \"\\u9762\\u5c0d\\u7729\",\n    \"Face without mouth\": \"\\u81c9\\u4e0a\\u6c92\\u6709\\u5634\",\n    \"Face with medical mask\": \"\\u9762\\u5c0d\\u91ab\\u7642\\u53e3\\u7f69\",\n\n    // Line breaker\n    \"Break\": \"\\u63db\\u884c\",\n\n    // Math\n    \"Subscript\": \"\\u4e0b\\u6a19\",\n    \"Superscript\": \"\\u4e0a\\u6a19\",\n\n    // Full screen\n    \"Fullscreen\": \"\\u5168\\u87a2\\u5e55\",\n\n    // Horizontal line\n    \"Insert Horizontal Line\": \"\\u63d2\\u5165\\u6c34\\u5e73\\u7dda\",\n\n    // Clear formatting\n    \"Clear Formatting\": \"\\u6e05\\u9664\\u683c\\u5f0f\",\n\n    // Save\n    \"Save\": \"保存\",\n\n    // Undo, redo\n    \"Undo\": \"\\u5fa9\\u539f\",\n    \"Redo\": \"\\u53d6\\u6d88\\u5fa9\\u539f\",\n\n    // Select all\n    \"Select All\": \"\\u5168\\u9078\",\n\n    // Code view\n    \"Code View\": \"\\u539f\\u59cb\\u78bc\",\n\n    // Quote\n    \"Quote\": \"\\u5f15\\u6587\",\n    \"Increase\": \"\\u7e2e\\u6392\",\n    \"Decrease\": \"\\u53bb\\u9664\\u7e2e\\u6392\",\n\n    // Quick Insert\n    \"Quick Insert\": \"\\u5feb\\u63d2\",\n\n    // Spcial Characters\n    \"Special Characters\": \"特殊字符\",\n    \"Latin\": \"拉丁\",\n    \"Greek\": \"希臘語\",\n    \"Cyrillic\": \"西里爾\",\n    \"Punctuation\": \"標點\",\n    \"Currency\": \"貨幣\",\n    \"Arrows\": \"箭頭\",\n    \"Math\": \"數學\",\n    \"Misc\": \"雜項\",\n\n    // Print.\n    \"Print\": \"打印\",\n\n    // Spell Checker.\n    \"Spell Checker\": \"拼寫檢查器\",\n\n    // Help\n    \"Help\": \"幫幫我\",\n    \"Shortcuts\": \"快捷鍵\",\n    \"Inline Editor\": \"內聯編輯器\",\n    \"Show the editor\": \"顯示編輯\",\n    \"Common actions\": \"共同行動\",\n    \"Copy\": \"複製\",\n    \"Cut\": \"切\",\n    \"Paste\": \"糊\",\n    \"Basic Formatting\": \"基本格式\",\n    \"Increase quote level\": \"提高報價水平\",\n    \"Decrease quote level\": \"降低報價水平\",\n    \"Image / Video\": \"圖像/視頻\",\n    \"Resize larger\": \"調整大小更大\",\n    \"Resize smaller\": \"調整大小更小\",\n    \"Table\": \"表\",\n    \"Select table cell\": \"選擇表單元格\",\n    \"Extend selection one cell\": \"擴展選擇一個單元格\",\n    \"Extend selection one row\": \"擴展選擇一行\",\n    \"Navigation\": \"導航\",\n    \"Focus popup / toolbar\": \"焦點彈出/工具欄\",\n    \"Return focus to previous position\": \"將焦點返回到上一個位置\",\n\n    // Embed.ly\n    \"Embed URL\": \"嵌入網址\",\n    \"Paste in a URL to embed\": \"粘貼在一個網址中嵌入\",\n\n    // Word Paste.\n    \"The pasted content is coming from a Microsoft Word document. Do you want to keep the format or clean it up?\": \"粘貼的內容來自微軟Word文檔。你想保留格式還是清理它？\",\n    \"Keep\": \"保持\",\n    \"Clean\": \"清潔\",\n    \"Word Paste Detected\": \"檢測到字貼\"\n  },\n  direction: \"ltr\"\n};\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/handsontable/handsontable.css",
    "content": "/**\n * Fix for bootstrap styles\n */\n.handsontable .table th, .handsontable .table td {\n  border-top: none;\n}\n\n.handsontable tr {\n  background: #fff;\n}\n\n.handsontable td {\n  background-color: inherit;\n}\n\n.handsontable .table caption + thead tr:first-child th,\n.handsontable .table caption + thead tr:first-child td,\n.handsontable .table colgroup + thead tr:first-child th,\n.handsontable .table colgroup + thead tr:first-child td,\n.handsontable .table thead:first-child tr:first-child th,\n.handsontable .table thead:first-child tr:first-child td {\n  border-top: 1px solid #CCCCCC;\n}\n\n/* table-bordered */\n.handsontable .table-bordered {\n  border: 0;\n  border-collapse: separate;\n}\n\n.handsontable .table-bordered th,\n.handsontable .table-bordered td {\n  border-left: none;\n}\n\n.handsontable .table-bordered th:first-child,\n.handsontable .table-bordered td:first-child {\n  border-left: 1px solid #CCCCCC;\n}\n\n.handsontable .table > tbody > tr > td,\n.handsontable .table > tbody > tr > th,\n.handsontable .table > tfoot > tr > td,\n.handsontable .table > tfoot > tr > th,\n.handsontable .table > thead > tr > td,\n.handsontable .table > thead > tr > th {\n  line-height: 21px;\n  padding: 0 4px;\n}\n\n.col-lg-1.handsontable, .col-lg-10.handsontable, .col-lg-11.handsontable, .col-lg-12.handsontable,\n.col-lg-2.handsontable, .col-lg-3.handsontable, .col-lg-4.handsontable, .col-lg-5.handsontable, .col-lg-6.handsontable, .col-lg-7.handsontable, .col-lg-8.handsontable, .col-lg-9.handsontable,\n.col-md-1.handsontable, .col-md-10.handsontable, .col-md-11.handsontable, .col-md-12.handsontable,\n.col-md-2.handsontable, .col-md-3.handsontable, .col-md-4.handsontable, .col-md-5.handsontable, .col-md-6.handsontable, .col-md-7.handsontable, .col-md-8.handsontable, .col-md-9.handsontable\n.col-sm-1.handsontable, .col-sm-10.handsontable, .col-sm-11.handsontable, .col-sm-12.handsontable,\n.col-sm-2.handsontable, .col-sm-3.handsontable, .col-sm-4.handsontable, .col-sm-5.handsontable, .col-sm-6.handsontable, .col-sm-7.handsontable, .col-sm-8.handsontable, .col-sm-9.handsontable\n.col-xs-1.handsontable, .col-xs-10.handsontable, .col-xs-11.handsontable, .col-xs-12.handsontable,\n.col-xs-2.handsontable, .col-xs-3.handsontable, .col-xs-4.handsontable, .col-xs-5.handsontable, .col-xs-6.handsontable, .col-xs-7.handsontable, .col-xs-8.handsontable, .col-xs-9.handsontable {\n  padding-left: 0;\n  padding-right: 0;\n}\n\n.handsontable .table-striped > tbody > tr:nth-of-type(even) {\n  background-color: #FFF;\n}\n\n.handsontable {\n  position: relative;\n}\n\n.handsontable .hide{\n  display: none;\n}\n\n.handsontable .relative {\n  position: relative;\n}\n\n.handsontable.htAutoSize {\n  visibility: hidden;\n  left: -99000px;\n  position: absolute;\n  top: -99000px;\n}\n\n.handsontable .wtHider {\n  width: 0;\n}\n\n.handsontable .wtSpreader {\n  position: relative;\n  width: 0; /*must be 0, otherwise blank space appears in scroll demo after scrolling max to the right */\n  height: auto;\n}\n\n.handsontable table,\n.handsontable tbody,\n.handsontable thead,\n.handsontable td,\n.handsontable th,\n.handsontable input,\n.handsontable textarea,\n.handsontable div {\n  box-sizing: content-box;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n}\n\n.handsontable input,\n.handsontable textarea {\n  min-height: initial;\n}\n\n.handsontable table.htCore {\n  border-collapse: separate;\n  /* it must be separate, otherwise there are offset miscalculations in WebKit: http://stackoverflow.com/questions/2655987/border-collapse-differences-in-ff-and-webkit */\n  /* this actually only changes appearance of user selection - does not make text unselectable */\n  /* -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -o-user-select: none;\n  -ms-user-select: none;\n  user-select: none; */ /* no browser supports unprefixed version */\n  border-spacing: 0;\n  margin: 0;\n  border-width: 0;\n  table-layout: fixed;\n  width: 0;\n  outline-width: 0;\n  cursor: default;\n  /* reset bootstrap table style. for more info see: https://github.com/handsontable/handsontable/issues/224 */\n  max-width: none;\n  max-height: none;\n}\n\n.handsontable col {\n  width: 50px;\n}\n\n.handsontable col.rowHeader {\n  width: 50px;\n}\n\n.handsontable th,\n.handsontable td {\n  border-top-width: 0;\n  border-left-width: 0;\n  border-right: 1px solid #CCC;\n  border-bottom: 1px solid #CCC;\n  height: 22px;\n  empty-cells: show;\n  line-height: 21px;\n  padding: 0 4px 0 4px;\n  /* top, bottom padding different than 0 is handled poorly by FF with HTML5 doctype */\n  background-color: #FFF;\n  vertical-align: top;\n  overflow: hidden;\n  outline-width: 0;\n  white-space: pre-line;\n  /* preserve new line character in cell */\n  background-clip: padding-box;\n}\n\n.handsontable td.htInvalid {\n  background-color: #ff4c42 !important; /*gives priority over td.area selection background*/\n}\n\n.handsontable td.htNoWrap {\n  white-space: nowrap;\n}\n\n.handsontable th:last-child {\n  /*Foundation framework fix*/\n  border-right: 1px solid #CCC;\n  border-bottom: 1px solid #CCC;\n}\n\n.handsontable tr:first-child th.htNoFrame,\n.handsontable th:first-child.htNoFrame,\n.handsontable th.htNoFrame {\n  border-left-width: 0;\n  background-color: white;\n  border-color: #FFF;\n}\n\n.handsontable th:first-child,\n.handsontable th:nth-child(2),\n.handsontable td:first-of-type,\n.handsontable .htNoFrame + th,\n.handsontable .htNoFrame + td {\n  border-left: 1px solid #CCC;\n}\n\n.handsontable.htRowHeaders thead tr th:nth-child(2) {\n  border-left: 1px solid #CCC;\n}\n\n.handsontable tr:first-child th,\n.handsontable tr:first-child td {\n  border-top: 1px solid #CCC;\n}\n\n.ht_master:not(.innerBorderLeft):not(.emptyColumns) ~ .handsontable tbody tr th,\n.ht_master:not(.innerBorderLeft):not(.emptyColumns) ~ .handsontable:not(.ht_clone_top) thead tr th:first-child {\n  border-right-width: 0;\n}\n\n.ht_master:not(.innerBorderTop) thead tr:last-child th,\n.ht_master:not(.innerBorderTop) ~ .handsontable thead tr:last-child th,\n.ht_master:not(.innerBorderTop) thead tr.lastChild th,\n.ht_master:not(.innerBorderTop) ~ .handsontable thead tr.lastChild th {\n  border-bottom-width: 0;\n}\n\n.handsontable th {\n  background-color: #f0f0f0;\n  color: #222;\n  text-align: center;\n  font-weight: normal;\n  white-space: nowrap;\n}\n\n.handsontable thead th {\n  padding: 0;\n}\n\n.handsontable th.active {\n  background-color: #CCC;\n}\n.handsontable thead th .relative {\n  padding: 2px 4px;\n}\n\n#hot-display-license-info {\n  font-size: 10px;\n  color: #323232 ;\n  padding: 5px 0 3px 0;\n  font-family: Helvetica, Arial, sans-serif;\n  text-align: left;\n}\n\n/* plugins */\n\n/* row + column resizer*/\n.handsontable .manualColumnResizer {\n  position: fixed;\n  top: 0;\n  cursor: col-resize;\n  z-index: 110;\n  width: 5px;\n  height: 25px;\n}\n\n.handsontable .manualRowResizer {\n  position: fixed;\n  left: 0;\n  cursor: row-resize;\n  z-index: 110;\n  height: 5px;\n  width: 50px;\n}\n\n.handsontable .manualColumnResizer:hover,\n.handsontable .manualColumnResizer.active,\n.handsontable .manualRowResizer:hover,\n.handsontable .manualRowResizer.active {\n  background-color: #34a9db;\n}\n\n.handsontable .manualColumnResizerGuide {\n  position: fixed;\n  right: 0;\n  top: 0;\n  background-color: #34a9db;\n  display: none;\n  width: 0;\n  border-right: 1px dashed #777;\n  margin-left: 5px;\n}\n\n.handsontable .manualRowResizerGuide {\n  position: fixed;\n  left: 0;\n  bottom: 0;\n  background-color: #34a9db;\n  display: none;\n  height: 0;\n  border-bottom: 1px dashed #777;\n  margin-top: 5px;\n}\n\n.handsontable .manualColumnResizerGuide.active,\n.handsontable .manualRowResizerGuide.active {\n  display: block;\n  z-index: 199;\n}\n\n.handsontable .columnSorting {\n  position: relative;\n}\n\n.handsontable .columnSorting.sortAction:hover {\n  text-decoration: underline;\n  cursor: pointer;\n}\n\n.handsontable span.colHeader {\n  display: inline-block;\n  line-height: 1.1;\n}\n\n/* Arrow position */\n.handsontable span.colHeader.columnSorting::before {\n  /* Centering start */\n  top: 50%;\n  margin-top: -6px; /* One extra pixel for purpose of proper positioning of sorting arrow, when `font-size` set to default */\n  /* Centering end */\n\n  padding-left: 8px; /* For purpose of continuous mouse over experience, when moving between the `span` and the `::before` elements */\n  position: absolute;\n  right: -9px;\n\n  content: '';\n  height: 10px;\n  width: 5px;\n  background-size: contain;\n  background-repeat: no-repeat;\n  background-position-x: right;\n}\n\n.handsontable span.colHeader.columnSorting.ascending::before {\n  /* arrow up; 20 x 40 px, scaled to 5 x 10 px; base64 size: 0.3kB */\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC\");\n}\n\n.handsontable span.colHeader.columnSorting.descending::before {\n  /* arrow down; 20 x 40 px, scaled to 5 x 10 px; base64 size: 0.3kB */\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=\");\n}\n\n.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled)::after {\n  content: '*';\n  display: inline-block;\n  position: relative;\n  /* The multi-line header and header with longer text need more padding to not hide arrow, \n  we make header wider in `GhostTable` to make some space for arrow which is positioned absolutely in the main table */\n  padding-right: 20px;\n}\n\n/* Selection */\n.handsontable .wtBorder {\n  position: absolute;\n  font-size: 0;\n}\n.handsontable .wtBorder.hidden{\n  display:none !important;\n}\n\n/* A layer order of the selection types */\n.handsontable .wtBorder.current {\n  z-index: 10;\n}\n.handsontable .wtBorder.area {\n  z-index: 8;\n}\n.handsontable .wtBorder.fill {\n  z-index: 6;\n}\n\n.handsontable td.area,\n.handsontable td.area-1,\n.handsontable td.area-2,\n.handsontable td.area-3,\n.handsontable td.area-4,\n.handsontable td.area-5,\n.handsontable td.area-6,\n.handsontable td.area-7 {\n  position: relative;\n}\n\n.handsontable td.area:before,\n.handsontable td.area-1:before,\n.handsontable td.area-2:before,\n.handsontable td.area-3:before,\n.handsontable td.area-4:before,\n.handsontable td.area-5:before,\n.handsontable td.area-6:before,\n.handsontable td.area-7:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  bottom: -100%\\9; /* Fix for IE9 to spread the \":before\" pseudo element to 100% height of the parent element */\n  background: #005eff;\n}\n\n/* Fix for IE10 and IE11 to spread the \":before\" pseudo element to 100% height of the parent element */\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .handsontable td.area:before,\n  .handsontable td.area-1:before,\n  .handsontable td.area-2:before,\n  .handsontable td.area-3:before,\n  .handsontable td.area-4:before,\n  .handsontable td.area-5:before,\n  .handsontable td.area-6:before,\n  .handsontable td.area-7:before {\n    bottom: -100%;\n  }\n}\n\n.handsontable td.area:before {\n  opacity: 0.1;\n}\n.handsontable td.area-1:before {\n  opacity: 0.2;\n}\n.handsontable td.area-2:before {\n  opacity: 0.27;\n}\n.handsontable td.area-3:before {\n  opacity: 0.35;\n}\n.handsontable td.area-4:before {\n  opacity: 0.41;\n}\n.handsontable td.area-5:before {\n  opacity: 0.47;\n}\n.handsontable td.area-6:before {\n  opacity: 0.54;\n}\n.handsontable td.area-7:before {\n  opacity: 0.58;\n}\n\n.handsontable tbody th.ht__highlight,\n.handsontable thead th.ht__highlight {\n  background-color: #dcdcdc;\n}\n\n.handsontable tbody th.ht__active_highlight,\n.handsontable thead th.ht__active_highlight {\n  background-color: #8eb0e7;\n  color: #000;\n}\n\n/* fill handle */\n\n.handsontable .wtBorder.corner {\n  font-size: 0;\n  cursor: crosshair;\n}\n\n.handsontable .htBorder.htFillBorder {\n  background: red;\n  width: 1px;\n  height: 1px;\n}\n\n.handsontableInput {\n  border: none;\n  outline: none;\n  margin: 0;\n  padding: 1px 5px 0 5px;\n  font-family: inherit;\n  line-height: 21px;\n  font-size: inherit;\n  box-shadow: 0 0 0 2px #5292F7 inset;\n  resize: none;\n  /*below are needed to overwrite stuff added by jQuery UI Bootstrap theme*/\n  display: block;\n  color: #000;\n  border-radius: 0;\n  background-color: #FFF;\n  /*overwrite styles potentionally made by a framework*/\n}\n\n.handsontableInputHolder {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 104;\n}\n\n.htSelectEditor {\n  -webkit-appearance: menulist-button !important;\n  position: absolute;\n  width: auto;\n}\n\n/*\nTextRenderer readOnly cell\n*/\n\n.handsontable .htDimmed {\n  color: #777;\n}\n\n.handsontable .htSubmenu {\n  position: relative;\n}\n\n.handsontable .htSubmenu :after{\n  content: '▶';\n  color: #777;\n  position: absolute;\n  right: 5px;\n  font-size: 9px;\n}\n\n\n/*\nTextRenderer horizontal alignment\n*/\n.handsontable .htLeft{\n  text-align: left;\n}\n.handsontable .htCenter{\n  text-align: center;\n}\n.handsontable .htRight{\n  text-align: right;\n}\n.handsontable .htJustify{\n  text-align: justify;\n}\n/*\nTextRenderer vertical alignment\n*/\n.handsontable .htTop{\n  vertical-align: top;\n}\n.handsontable .htMiddle{\n  vertical-align: middle;\n}\n.handsontable .htBottom{\n  vertical-align: bottom;\n}\n\n/*\nTextRenderer placeholder value\n*/\n\n.handsontable .htPlaceholder {\n  color: #999;\n}\n\n/*\nAutocompleteRenderer down arrow\n*/\n\n.handsontable .htAutocompleteArrow {\n  float: right;\n  font-size: 10px;\n  color: #EEE;\n  cursor: default;\n  width: 16px;\n  text-align: center;\n}\n\n.handsontable td .htAutocompleteArrow:hover {\n  color: #777;\n}\n\n.handsontable td.area .htAutocompleteArrow {\n  color: #d3d3d3;\n}\n\n/*\nCheckboxRenderer\n*/\n.handsontable .htCheckboxRendererInput {\n  display: inline-block;\n  vertical-align: middle;\n}\n.handsontable .htCheckboxRendererInput.noValue {\n  opacity: 0.5;\n}\n.handsontable .htCheckboxRendererLabel {\n  cursor: pointer;\n  display: inline-block;\n  width: 100%;\n}\n\n/**\n * Handsontable in Handsontable\n */\n\n.handsontable .handsontable.ht_clone_top .wtHider {\n  padding: 0 0 5px 0;\n}\n\n/**\n* Autocomplete Editor\n*/\n.handsontable .autocompleteEditor.handsontable {\n  padding-right: 17px;\n}\n.handsontable .autocompleteEditor.handsontable.htMacScroll {\n  padding-right: 15px;\n}\n\n\n/**\n * Handsontable listbox theme\n */\n\n.handsontable.listbox {\n  margin: 0;\n}\n\n.handsontable.listbox .ht_master table {\n  border: 1px solid #ccc;\n  border-collapse: separate;\n  background: white;\n}\n\n.handsontable.listbox th,\n.handsontable.listbox tr:first-child th,\n.handsontable.listbox tr:last-child th,\n.handsontable.listbox tr:first-child td,\n.handsontable.listbox td {\n  border-color: transparent;\n}\n\n.handsontable.listbox th,\n.handsontable.listbox td {\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.handsontable.listbox td.htDimmed {\n  cursor: default;\n  color: inherit;\n  font-style: inherit;\n}\n\n.handsontable.listbox .wtBorder {\n  visibility: hidden;\n}\n\n.handsontable.listbox tr td.current,\n.handsontable.listbox tr:hover td {\n  background: #eee;\n}\n\n.ht_clone_top {\n  z-index: 101;\n}\n\n.ht_clone_left {\n  z-index: 102;\n}\n\n.ht_clone_top_left_corner,\n.ht_clone_bottom_left_corner {\n  z-index: 103;\n}\n\n.ht_clone_debug {\n  z-index: 103;\n}\n\n.handsontable td.htSearchResult {\n  background: #fcedd9;\n  color: #583707;\n}\n\n/*\nCell borders\n*/\n.htBordered{\n  /*box-sizing: border-box !important;*/\n  border-width: 1px;\n}\n.htBordered.htTopBorderSolid {\n  border-top-style: solid;\n  border-top-color: #000;\n}\n.htBordered.htRightBorderSolid {\n  border-right-style: solid;\n  border-right-color: #000;\n}\n.htBordered.htBottomBorderSolid {\n  border-bottom-style: solid;\n  border-bottom-color: #000;\n}\n.htBordered.htLeftBorderSolid {\n  border-left-style: solid;\n  border-left-color: #000;\n}\n\n.handsontable tbody tr th:nth-last-child(2) {\n  border-right: 1px solid #CCC;\n}\n\n.handsontable thead tr:nth-last-child(2) th.htGroupIndicatorContainer {\n  border-bottom: 1px solid #CCC;\n  padding-bottom: 5px;\n}\n\n\n.ht_clone_top_left_corner thead tr th:nth-last-child(2) {\n  border-right: 1px solid #CCC;\n}\n\n.htCollapseButton {\n  width: 10px;\n  height: 10px;\n  line-height: 10px;\n  text-align: center;\n  border-radius: 5px;\n  border: 1px solid #f3f3f3;\n  -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n  box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n  cursor: pointer;\n  margin-bottom: 3px;\n  position: relative;\n}\n\n.htCollapseButton:after {\n  content: \"\";\n  height: 300%;\n  width: 1px;\n  display: block;\n  background: #ccc;\n  margin-left: 4px;\n  position: absolute;\n  /*top: -300%;*/\n  bottom: 10px;\n}\n\n\nthead .htCollapseButton {\n  right: 5px;\n  position: absolute;\n  top: 5px;\n  background: #fff;\n}\n\nthead .htCollapseButton:after {\n  height: 1px;\n  width: 700%;\n  right: 10px;\n  top: 4px;\n}\n\n.handsontable tr th .htExpandButton {\n  position: absolute;\n  width: 10px;\n  height: 10px;\n  line-height: 10px;\n  text-align: center;\n  border-radius: 5px;\n  border: 1px solid #f3f3f3;\n  -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n  box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4);\n  cursor: pointer;\n  top: 0;\n  display: none;\n}\n\n.handsontable thead tr th .htExpandButton {\n  /*left: 5px;*/\n  top: 5px;\n}\n\n.handsontable tr th .htExpandButton.clickable {\n  display: block;\n}\n\n.collapsibleIndicator {\n  position: absolute;\n  top: 50%;\n  transform: translate(0% ,-50%);\n  right: 5px;\n  border: 1px solid #A6A6A6;\n  line-height: 10px;\n  color: #222;\n  border-radius: 10px;\n  font-size: 10px;\n  width: 10px;\n  height: 10px;\n  cursor: pointer;\n  -webkit-box-shadow: 0 0 0 6px rgba(238,238,238,1);\n  -moz-box-shadow: 0 0 0 6px rgba(238,238,238,1);\n  box-shadow: 0 0 0 6px rgba(238,238,238,1);\n  background: #eee;\n}\n\n.handsontable col.hidden {\n  width: 0 !important;\n}\n\n.handsontable table tr th.lightRightBorder {\n  border-right: 1px solid #E6E6E6;\n}\n\n.handsontable tr.hidden,\n.handsontable tr.hidden td,\n.handsontable tr.hidden th {\n  display: none;\n}\n\n.ht_master,\n.ht_clone_left,\n.ht_clone_top,\n.ht_clone_bottom {\n  overflow: hidden;\n}\n\n.ht_master .wtHolder {\n  overflow: auto;\n}\n\n.handsontable .ht_master thead,\n.handsontable .ht_master tr th,\n.handsontable .ht_clone_left thead {\n  visibility: hidden;\n}\n\n.ht_clone_top .wtHolder,\n.ht_clone_left .wtHolder,\n.ht_clone_bottom .wtHolder {\n  overflow: hidden;\n}\n\n/*\n\n Handsontable Mobile Text Editor stylesheet\n\n */\n\n.handsontable.mobile,\n.handsontable.mobile .wtHolder {\n  -webkit-touch-callout:none;\n  -webkit-user-select:none;\n  -khtml-user-select:none;\n  -moz-user-select:none;\n  -ms-user-select:none;\n  user-select:none;\n  -webkit-tap-highlight-color:rgba(0,0,0,0);\n  -webkit-overflow-scrolling: touch;\n}\n\n.htMobileEditorContainer {\n  display: none;\n  position: absolute;\n  top: 0;\n  width: 70%;\n  height: 54pt;\n  background: #f8f8f8;\n  border-radius: 20px;\n  border: 1px solid #ebebeb;\n  z-index: 999;\n  box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  -webkit-text-size-adjust: none;\n}\n\n.topLeftSelectionHandle:not(.ht_master .topLeftSelectionHandle),\n.topLeftSelectionHandle-HitArea:not(.ht_master .topLeftSelectionHandle-HitArea) {\n  z-index: 9999;\n}\n\n/* Initial left/top coordinates - overwritten when actual position is set */\n.topLeftSelectionHandle,\n.topLeftSelectionHandle-HitArea,\n.bottomRightSelectionHandle,\n.bottomRightSelectionHandle-HitArea {\n  left: -10000px;\n  top: -10000px;\n}\n\n.htMobileEditorContainer.active {\n  display: block;\n}\n\n.htMobileEditorContainer .inputs {\n  position: absolute;\n  right: 210pt;\n  bottom: 10pt;\n  top: 10pt;\n  left: 14px;\n  height: 34pt;\n}\n\n.htMobileEditorContainer .inputs textarea {\n  font-size: 13pt;\n  border: 1px solid #a1a1a1;\n  -webkit-appearance: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  position: absolute;\n  left: 14px;\n  right: 14px;\n  top: 0;\n  bottom: 0;\n  padding: 7pt;\n}\n\n.htMobileEditorContainer .cellPointer {\n  position: absolute;\n  top: -13pt;\n  height: 0;\n  width: 0;\n  left: 30px;\n\n  border-left: 13pt solid transparent;\n  border-right: 13pt solid transparent;\n  border-bottom: 13pt solid #ebebeb;\n}\n\n.htMobileEditorContainer .cellPointer.hidden {\n  display: none;\n}\n\n.htMobileEditorContainer .cellPointer:before {\n  content: '';\n  display: block;\n  position: absolute;\n  top: 2px;\n  height: 0;\n  width: 0;\n  left: -13pt;\n\n  border-left: 13pt solid transparent;\n  border-right: 13pt solid transparent;\n  border-bottom: 13pt solid #f8f8f8;\n}\n\n.htMobileEditorContainer .moveHandle {\n  position: absolute;\n  top: 10pt;\n  left: 5px;\n  width: 30px;\n  bottom: 0px;\n  cursor: move;\n  z-index: 9999;\n}\n\n.htMobileEditorContainer .moveHandle:after {\n  content: \"..\\a..\\a..\\a..\";\n  white-space: pre;\n  line-height: 10px;\n  font-size: 20pt;\n  display: inline-block;\n  margin-top: -8px;\n  color: #ebebeb;\n}\n\n.htMobileEditorContainer .positionControls {\n  width: 205pt;\n  position: absolute;\n  right: 5pt;\n  top: 0;\n  bottom: 0;\n}\n\n.htMobileEditorContainer .positionControls > div {\n  width: 50pt;\n  height: 100%;\n  float: left;\n}\n\n.htMobileEditorContainer .positionControls > div:after {\n  content: \" \";\n  display: block;\n  width: 15pt;\n  height: 15pt;\n  text-align: center;\n  line-height: 50pt;\n}\n\n.htMobileEditorContainer .leftButton:after,\n.htMobileEditorContainer .rightButton:after,\n.htMobileEditorContainer .upButton:after,\n.htMobileEditorContainer .downButton:after {\n  transform-origin: 5pt 5pt;\n  -webkit-transform-origin: 5pt 5pt;\n  margin: 21pt 0 0 21pt;\n}\n\n.htMobileEditorContainer .leftButton:after {\n  border-top: 2px solid #288ffe;\n  border-left: 2px solid #288ffe;\n  -webkit-transform: rotate(-45deg);\n  /*margin-top: 17pt;*/\n  /*margin-left: 20pt;*/\n}\n.htMobileEditorContainer .leftButton:active:after {\n  border-color: #cfcfcf;\n}\n\n.htMobileEditorContainer .rightButton:after {\n  border-top: 2px solid #288ffe;\n  border-left: 2px solid #288ffe;\n  -webkit-transform: rotate(135deg);\n  /*margin-top: 17pt;*/\n  /*margin-left: 10pt;*/\n}\n.htMobileEditorContainer .rightButton:active:after {\n  border-color: #cfcfcf;\n}\n\n.htMobileEditorContainer .upButton:after {\n  /*border-top: 2px solid #cfcfcf;*/\n  border-top: 2px solid #288ffe;\n  border-left: 2px solid #288ffe;\n  -webkit-transform: rotate(45deg);\n  /*margin-top: 22pt;*/\n  /*margin-left: 15pt;*/\n}\n.htMobileEditorContainer .upButton:active:after {\n  border-color: #cfcfcf;\n}\n\n.htMobileEditorContainer .downButton:after {\n  border-top: 2px solid #288ffe;\n  border-left: 2px solid #288ffe;\n  -webkit-transform: rotate(225deg);\n  /*margin-top: 15pt;*/\n  /*margin-left: 15pt;*/\n}\n.htMobileEditorContainer .downButton:active:after {\n  border-color: #cfcfcf;\n}\n\n.handsontable.hide-tween {\n  -webkit-animation: opacity-hide 0.3s;\n  animation: opacity-hide 0.3s;\n  animation-fill-mode: forwards;\n  -webkit-animation-fill-mode: forwards;\n}\n\n.handsontable.show-tween {\n  -webkit-animation: opacity-show 0.3s;\n  animation: opacity-show 0.3s;\n  animation-fill-mode: forwards;\n  -webkit-animation-fill-mode: forwards;\n}\n\n.htCommentCell {\n    position: relative;\n}\n\n.htCommentCell:after {\n    content: '';\n    position: absolute;\n    top: 0;\n    right: 0;\n    border-left: 6px solid transparent;\n    border-top: 6px solid black;\n}\n\n.htComments {\n    display: none;\n    z-index: 1059;\n    position: absolute;\n}\n\n.htCommentTextArea {\n    box-shadow: rgba(0, 0, 0, 0.117647) 0 1px 3px, rgba(0, 0, 0, 0.239216) 0 1px 2px;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n    border: none;\n    border-left: 3px solid #ccc;\n    background-color: #fff;\n    width: 215px;\n    height: 90px;\n    font-size: 12px;\n    padding: 5px;\n    outline: 0px !important;\n    -webkit-appearance: none;\n}\n\n.htCommentTextArea:focus {\n    box-shadow: rgba(0, 0, 0, 0.117647) 0 1px 3px, rgba(0, 0, 0, 0.239216) 0 1px 2px, inset 0 0 0 1px #5292f7;\n    border-left: 3px solid #5292f7;\n}\n\n/*!\n * Handsontable ContextMenu\n */\n\n.htContextMenu:not(.htGhostTable) {\n  display: none;\n  position: absolute;\n  z-index: 1060; /* needs to be higher than 1050 - z-index for Twitter Bootstrap modal (#1569) */\n}\n\n.htContextMenu .ht_clone_top,\n.htContextMenu .ht_clone_left,\n.htContextMenu .ht_clone_corner,\n.htContextMenu .ht_clone_debug {\n  display: none;\n}\n\n.htContextMenu table.htCore {\n  border: 1px solid #ccc;\n  border-bottom-width: 2px;\n  border-right-width: 2px;\n}\n\n.htContextMenu .wtBorder {\n  visibility: hidden;\n}\n\n.htContextMenu table tbody tr td {\n  background: white;\n  border-width: 0;\n  padding: 4px 6px 0 6px;\n  cursor: pointer;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.htContextMenu table tbody tr td:first-child {\n  border: 0;\n}\n\n.htContextMenu table tbody tr td.htDimmed {\n  font-style: normal;\n  color: #323232;\n}\n\n.htContextMenu table tbody tr td.current,\n.htContextMenu table tbody tr td.zeroclipboard-is-hover {\n  background: #f3f3f3;\n}\n\n.htContextMenu table tbody tr td.htSeparator {\n  border-top: 1px solid #e6e6e6;\n  height: 0;\n  padding: 0;\n  cursor: default;\n}\n\n.htContextMenu table tbody tr td.htDisabled {\n  color: #999;\n  cursor: default;\n}\n\n.htContextMenu table tbody tr td.htDisabled:hover {\n  background: #fff;\n  color: #999;\n  cursor: default;\n}\n\n.htContextMenu table tbody tr.htHidden {\n  display: none;\n}\n\n.htContextMenu table tbody tr td .htItemWrapper {\n  margin-left: 10px;\n  margin-right: 6px;\n}\n\n.htContextMenu table tbody tr td div span.selected {\n  margin-top: -2px;\n  position: absolute;\n  left: 4px;\n}\n\n.htContextMenu .ht_master .wtHolder {\n  overflow: hidden;\n}\n\ntextarea#HandsontableCopyPaste {\n  position: fixed !important;\n  top: 0 !important;\n  right: 100% !important;\n  overflow: hidden;\n  opacity: 0;\n  outline: 0 none !important;\n}\n\n.htRowHeaders .ht_master.innerBorderLeft ~ .ht_clone_top_left_corner th:nth-child(2),\n.htRowHeaders .ht_master.innerBorderLeft ~ .ht_clone_left td:first-of-type {\n  border-left: 0 none;\n}\n\n.handsontable .wtHider {\n  position: relative;\n}\n.handsontable.ht__manualColumnMove.after-selection--columns thead th.ht__highlight {\n  cursor: move;\n  cursor: -moz-grab;\n  cursor: -webkit-grab;\n  cursor: grab;\n}\n.handsontable.ht__manualColumnMove.on-moving--columns,\n.handsontable.ht__manualColumnMove.on-moving--columns thead th.ht__highlight {\n  cursor: move;\n  cursor: -moz-grabbing;\n  cursor: -webkit-grabbing;\n  cursor: grabbing;\n}\n.handsontable.ht__manualColumnMove.on-moving--columns .manualColumnResizer {\n  display: none;\n}\n.handsontable .ht__manualColumnMove--guideline,\n.handsontable .ht__manualColumnMove--backlight {\n  position: absolute;\n  height: 100%;\n  display: none;\n}\n.handsontable .ht__manualColumnMove--guideline {\n  background: #757575;\n  width: 2px;\n  top: 0;\n  margin-left: -1px;\n  z-index: 105;\n}\n.handsontable .ht__manualColumnMove--backlight {\n  background: #343434;\n  background: rgba(52, 52, 52, 0.25);\n  display: none;\n  z-index: 105;\n  pointer-events: none;\n}\n.handsontable.on-moving--columns.show-ui .ht__manualColumnMove--guideline,\n.handsontable.on-moving--columns .ht__manualColumnMove--backlight {\n  display: block;\n}\n\n.handsontable .wtHider {\n  position: relative;\n}\n.handsontable.ht__manualRowMove.after-selection--rows tbody th.ht__highlight {\n  cursor: move;\n  cursor: -moz-grab;\n  cursor: -webkit-grab;\n  cursor: grab;\n}\n.handsontable.ht__manualRowMove.on-moving--rows,\n.handsontable.ht__manualRowMove.on-moving--rows tbody th.ht__highlight {\n  cursor: move;\n  cursor: -moz-grabbing;\n  cursor: -webkit-grabbing;\n  cursor: grabbing;\n}\n.handsontable.ht__manualRowMove.on-moving--rows .manualRowResizer {\n  display: none;\n}\n.handsontable .ht__manualRowMove--guideline,\n.handsontable .ht__manualRowMove--backlight {\n  position: absolute;\n  width: 100%;\n  display: none;\n}\n.handsontable .ht__manualRowMove--guideline {\n  background: #757575;\n  height: 2px;\n  left: 0;\n  margin-top: -1px;\n  z-index: 105;\n}\n.handsontable .ht__manualRowMove--backlight {\n  background: #343434;\n  background: rgba(52, 52, 52, 0.25);\n  display: none;\n  z-index: 105;\n  pointer-events: none;\n}\n.handsontable.on-moving--rows.show-ui .ht__manualRowMove--guideline,\n.handsontable.on-moving--rows .ht__manualRowMove--backlight {\n  display: block;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"]:not([class*=\"fullySelectedMergedCell\"]):before {\n    opacity: 0;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-multiple\"]:before {\n    opacity: 0.1;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-0\"]:before {\n    opacity: 0.1;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-1\"]:before {\n    opacity: 0.2;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-2\"]:before {\n    opacity: 0.27;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-3\"]:before {\n    opacity: 0.35;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-4\"]:before {\n    opacity: 0.41;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-5\"]:before {\n    opacity: 0.47;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-6\"]:before {\n    opacity: 0.54;\n}\n\n.handsontable tbody td[rowspan][class*=\"area\"][class*=\"highlight\"][class*=\"fullySelectedMergedCell-7\"]:before {\n    opacity: 0.58;\n}\n"
  },
  {
    "path": "modules/system/assets/vendor/handsontable/handsontable.js",
    "content": "var Handsontable=(()=>{var gf=Object.create;var As=Object.defineProperty;var wf=Object.getOwnPropertyDescriptor;var Cf=Object.getOwnPropertyNames;var yf=Object.getPrototypeOf,Ef=Object.prototype.hasOwnProperty;var Sf=(s,t)=>()=>(s&&(t=s(s=0)),t);var ri=(s,t)=>()=>(t||s((t={exports:{}}).exports,t),t.exports),It=(s,t)=>{for(var e in t)As(s,e,{get:t[e],enumerable:!0})},zh=(s,t,e,o)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of Cf(t))!Ef.call(s,i)&&i!==e&&As(s,i,{get:()=>t[i],enumerable:!(o=wf(t,i))||o.enumerable});return s};var Wo=(s,t,e)=>(e=s!=null?gf(yf(s)):{},zh(t||!s||!s.__esModule?As(e,\"default\",{value:s,enumerable:!0}):e,s)),$h=s=>zh(As({},\"__esModule\",{value:!0}),s);var Yh=ri(()=>{});var tc={};It(tc,{default:()=>St});var St,So=Sf(()=>{St=window.moment});var ac=ri((nc,lc)=>{function Qf(){var s={minHeight:200,maxHeight:300,minWidth:100,maxWidth:300},t,e=document.body,o=document.createTextNode(\"\"),i=document.createElement(\"SPAN\"),r=function(w,R,A){w.addEventListener(R,A,!1)},n=function(w,R,A){w.removeEventListener(R,A,!1)},l=function(w){var R,A;w?/^[a-zA-Z \\.,\\\\\\/\\|0-9]$/.test(w)||(w=\".\"):w=\"\",o.textContent!==void 0?o.textContent=t.value+w:o.data=t.value+w,i.style.fontSize=m(t).fontSize,i.style.fontFamily=m(t).fontFamily,i.style.whiteSpace=\"pre\",e.appendChild(i),R=i.clientWidth+2,e.removeChild(i),t.style.height=s.minHeight+\"px\",s.minWidth>R?t.style.width=s.minWidth+\"px\":R>s.maxWidth?t.style.width=s.maxWidth+\"px\":t.style.width=R+\"px\",A=t.scrollHeight?t.scrollHeight-1:0,s.minHeight>A?t.style.height=s.minHeight+\"px\":s.maxHeight<A?(t.style.height=s.maxHeight+\"px\",t.style.overflowY=\"visible\"):t.style.height=A+\"px\"},a=function(){window.setTimeout(l,0)},h=function(w){if(w&&w.minHeight)if(w.minHeight==\"inherit\")s.minHeight=t.clientHeight;else{var R=parseInt(w.minHeight);isNaN(R)||(s.minHeight=R)}if(w&&w.maxHeight)if(w.maxHeight==\"inherit\")s.maxHeight=t.clientHeight;else{var A=parseInt(w.maxHeight);isNaN(A)||(s.maxHeight=A)}if(w&&w.minWidth)if(w.minWidth==\"inherit\")s.minWidth=t.clientWidth;else{var O=parseInt(w.minWidth);isNaN(O)||(s.minWidth=O)}if(w&&w.maxWidth)if(w.maxWidth==\"inherit\")s.maxWidth=t.clientWidth;else{var D=parseInt(w.maxWidth);isNaN(D)||(s.maxWidth=D)}i.firstChild||(i.className=\"autoResize\",i.style.display=\"inline-block\",i.appendChild(o))},u=function(w,R,A){t=w,h(R),t.nodeName==\"TEXTAREA\"&&(t.style.resize=\"none\",t.style.overflowY=\"\",t.style.height=s.minHeight+\"px\",t.style.minWidth=s.minWidth+\"px\",t.style.maxWidth=s.maxWidth+\"px\",t.style.overflowY=\"hidden\"),A&&(r(t,\"change\",l),r(t,\"cut\",a),r(t,\"paste\",a),r(t,\"drop\",a),r(t,\"keydown\",a),r(t,\"focus\",l),r(t,\"compositionstart\",a),r(t,\"compositionupdate\",a),r(t,\"compositionend\",a)),l()};function m(w){return w.currentStyle||document.defaultView.getComputedStyle(w)}return{init:function(w,R,A){u(w,R,A)},unObserve:function(){n(t,\"change\",l),n(t,\"cut\",a),n(t,\"paste\",a),n(t,\"drop\",a),n(t,\"keydown\",a),n(t,\"focus\",l),n(t,\"compositionstart\",a),n(t,\"compositionupdate\",a),n(t,\"compositionend\",a)},resize:l}}typeof nc<\"u\"&&(lc.exports=Qf)});var pc=ri((cl,mc)=>{(function(s,t){\"use strict\";var e;if(typeof cl==\"object\"){try{e=(So(),$h(tc))}catch{}mc.exports=t(e)}else typeof define==\"function\"&&define.amd?define(function(o){var i=\"moment\";try{e=o(i)}catch{}return t(e)}):s.Pikaday=t(s.moment)})(cl,function(s){\"use strict\";var t=typeof s==\"function\",e=!!window.addEventListener,o=window.document,i=window.setTimeout,r=function(p,d,T,b){e?p.addEventListener(d,T,!!b):p.attachEvent(\"on\"+d,T)},n=function(p,d,T,b){e?p.removeEventListener(d,T,!!b):p.detachEvent(\"on\"+d,T)},l=function(p){return p.trim?p.trim():p.replace(/^\\s+|\\s+$/g,\"\")},a=function(p,d){return(\" \"+p.className+\" \").indexOf(\" \"+d+\" \")!==-1},h=function(p,d){a(p,d)||(p.className=p.className===\"\"?d:p.className+\" \"+d)},u=function(p,d){p.className=l((\" \"+p.className+\" \").replace(\" \"+d+\" \",\" \"))},m=function(p){return/Array/.test(Object.prototype.toString.call(p))},w=function(p){return/Date/.test(Object.prototype.toString.call(p))&&!isNaN(p.getTime())},R=function(p){var d=p.getDay();return d===0||d===6},A=function(p){return p%4===0&&p%100!==0||p%400===0},O=function(p,d){return[31,A(p)?29:28,31,30,31,30,31,31,30,31,30,31][d]},D=function(p){w(p)&&p.setHours(0,0,0,0)},B=function(p,d){return p.getTime()===d.getTime()},$=function(p,d,T){var b,H;for(b in d)H=p[b]!==void 0,H&&typeof d[b]==\"object\"&&d[b]!==null&&d[b].nodeName===void 0?w(d[b])?T&&(p[b]=new Date(d[b].getTime())):m(d[b])?T&&(p[b]=d[b].slice(0)):p[b]=$({},d[b],T):(T||!H)&&(p[b]=d[b]);return p},et=function(p,d,T){var b;o.createEvent?(b=o.createEvent(\"HTMLEvents\"),b.initEvent(d,!0,!1),b=$(b,T),p.dispatchEvent(b)):o.createEventObject&&(b=o.createEventObject(),b=$(b,T),p.fireEvent(\"on\"+d,b))},ft=function(p){return p.month<0&&(p.year-=Math.ceil(Math.abs(p.month)/12),p.month+=12),p.month>11&&(p.year+=Math.floor(Math.abs(p.month)/12),p.month-=12),p},q={field:null,bound:void 0,ariaLabel:\"Use the arrow keys to pick a date\",position:\"bottom left\",reposition:!0,format:\"YYYY-MM-DD\",toString:null,parse:null,defaultDate:null,setDefaultDate:!1,firstDay:0,firstWeekOfYearMinDays:4,formatStrict:!1,minDate:null,maxDate:null,yearRange:10,showWeekNumber:!1,pickWholeWeek:!1,minYear:0,maxYear:9999,minMonth:void 0,maxMonth:void 0,startRange:null,endRange:null,isRTL:!1,yearSuffix:\"\",showMonthAfterYear:!1,showDaysInNextAndPreviousMonths:!1,enableSelectionDaysInNextAndPreviousMonths:!1,numberOfMonths:1,mainCalendar:\"left\",container:void 0,blurFieldOnSelect:!0,i18n:{previousMonth:\"Previous Month\",nextMonth:\"Next Month\",months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],weekdays:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],weekdaysShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"]},theme:null,events:[],onSelect:null,onOpen:null,onClose:null,onDraw:null,keyboardInput:!0},ct=function(p,d,T){for(d+=p.firstDay;d>=7;)d-=7;return T?p.i18n.weekdaysShort[d]:p.i18n.weekdays[d]},it=function(p){var d=[],T=\"false\";if(p.isEmpty)if(p.showDaysInNextAndPreviousMonths)d.push(\"is-outside-current-month\"),p.enableSelectionDaysInNextAndPreviousMonths||d.push(\"is-selection-disabled\");else return'<td class=\"is-empty\"></td>';return p.isDisabled&&d.push(\"is-disabled\"),p.isToday&&d.push(\"is-today\"),p.isSelected&&(d.push(\"is-selected\"),T=\"true\"),p.hasEvent&&d.push(\"has-event\"),p.isInRange&&d.push(\"is-inrange\"),p.isStartRange&&d.push(\"is-startrange\"),p.isEndRange&&d.push(\"is-endrange\"),'<td data-day=\"'+p.day+'\" class=\"'+d.join(\" \")+'\" aria-selected=\"'+T+'\"><button class=\"pika-button pika-day\" type=\"button\" data-pika-year=\"'+p.year+'\" data-pika-month=\"'+p.month+'\" data-pika-day=\"'+p.day+'\">'+p.day+\"</button></td>\"},c=function(p,d){p.setHours(0,0,0,0);var T=p.getDate(),b=p.getDay(),H=d,_=H-1,x=7,F=function(Yt){return(Yt+x-1)%x};p.setDate(T+_-F(b));var U=new Date(p.getFullYear(),0,H),j=1440*60*1e3,dt=(p.getTime()-U.getTime())/j,Dt=1+Math.round((dt-_+F(U.getDay()))/x);return Dt},f=function(p,d,T,b){var H=new Date(T,d,p),_=t?s(H).isoWeek():c(H,b);return'<td class=\"pika-week\">'+_+\"</td>\"},C=function(p,d,T,b){return'<tr class=\"pika-row'+(T?\" pick-whole-week\":\"\")+(b?\" is-selected\":\"\")+'\">'+(d?p.reverse():p).join(\"\")+\"</tr>\"},S=function(p){return\"<tbody>\"+p.join(\"\")+\"</tbody>\"},N=function(p){var d,T=[];for(p.showWeekNumber&&T.push(\"<th></th>\"),d=0;d<7;d++)T.push('<th scope=\"col\"><abbr title=\"'+ct(p,d)+'\">'+ct(p,d,!0)+\"</abbr></th>\");return\"<thead><tr>\"+(p.isRTL?T.reverse():T).join(\"\")+\"</tr></thead>\"},g=function(p,d,T,b,H,_){var x,F,U,j=p._o,dt=T===j.minYear,Dt=T===j.maxYear,Yt='<div id=\"'+_+'\" class=\"pika-title\" role=\"heading\" aria-live=\"assertive\">',ye,xe,$e=!0,_e=!0;for(U=[],x=0;x<12;x++)U.push('<option value=\"'+(T===H?x-d:12+x-d)+'\"'+(x===b?' selected=\"selected\"':\"\")+(dt&&x<j.minMonth||Dt&&x>j.maxMonth?' disabled=\"disabled\"':\"\")+\">\"+j.i18n.months[x]+\"</option>\");for(ye='<div class=\"pika-label\">'+j.i18n.months[b]+'<select class=\"pika-select pika-select-month\" tabindex=\"-1\">'+U.join(\"\")+\"</select></div>\",m(j.yearRange)?(x=j.yearRange[0],F=j.yearRange[1]+1):(x=T-j.yearRange,F=1+T+j.yearRange),U=[];x<F&&x<=j.maxYear;x++)x>=j.minYear&&U.push('<option value=\"'+x+'\"'+(x===T?' selected=\"selected\"':\"\")+\">\"+x+\"</option>\");return xe='<div class=\"pika-label\">'+T+j.yearSuffix+'<select class=\"pika-select pika-select-year\" tabindex=\"-1\">'+U.join(\"\")+\"</select></div>\",j.showMonthAfterYear?Yt+=xe+ye:Yt+=ye+xe,dt&&(b===0||j.minMonth>=b)&&($e=!1),Dt&&(b===11||j.maxMonth<=b)&&(_e=!1),d===0&&(Yt+='<button class=\"pika-prev'+($e?\"\":\" is-disabled\")+'\" type=\"button\">'+j.i18n.previousMonth+\"</button>\"),d===p._o.numberOfMonths-1&&(Yt+='<button class=\"pika-next'+(_e?\"\":\" is-disabled\")+'\" type=\"button\">'+j.i18n.nextMonth+\"</button>\"),Yt+=\"</div>\"},y=function(p,d,T){return'<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"'+T+'\">'+N(p)+S(d)+\"</table>\"},E=function(p){var d=this,T=d.config(p);d._onMouseDown=function(H){if(d._v){H=H||window.event;var _=H.target||H.srcElement;if(_)if(a(_,\"is-disabled\")||(a(_,\"pika-button\")&&!a(_,\"is-empty\")&&!a(_.parentNode,\"is-disabled\")?(d.setDate(new Date(_.getAttribute(\"data-pika-year\"),_.getAttribute(\"data-pika-month\"),_.getAttribute(\"data-pika-day\"))),T.bound&&i(function(){d.hide(),T.blurFieldOnSelect&&T.field&&T.field.blur()},100)):a(_,\"pika-prev\")?d.prevMonth():a(_,\"pika-next\")&&d.nextMonth()),a(_,\"pika-select\"))d._c=!0;else if(H.preventDefault)H.preventDefault();else return H.returnValue=!1,!1}},d._onChange=function(H){H=H||window.event;var _=H.target||H.srcElement;_&&(a(_,\"pika-select-month\")?d.gotoMonth(_.value):a(_,\"pika-select-year\")&&d.gotoYear(_.value))},d._onKeyChange=function(H){if(H=H||window.event,d.isVisible())switch(H.keyCode){case 13:case 27:T.field&&T.field.blur();break;case 37:d.adjustDate(\"subtract\",1);break;case 38:d.adjustDate(\"subtract\",7);break;case 39:d.adjustDate(\"add\",1);break;case 40:d.adjustDate(\"add\",7);break;case 8:case 46:d.setDate(null);break}},d._parseFieldValue=function(){if(T.parse)return T.parse(T.field.value,T.format);if(t){var H=s(T.field.value,T.format,T.formatStrict);return H&&H.isValid()?H.toDate():null}else return new Date(Date.parse(T.field.value))},d._onInputChange=function(H){var _;H.firedBy!==d&&(_=d._parseFieldValue(),w(_)&&d.setDate(_),d._v||d.show())},d._onInputFocus=function(){d.show()},d._onInputClick=function(){d.show()},d._onInputBlur=function(){var H=o.activeElement;do if(a(H,\"pika-single\"))return;while(H=H.parentNode);d._c||(d._b=i(function(){d.hide()},50)),d._c=!1},d._onClick=function(H){H=H||window.event;var _=H.target||H.srcElement,x=_;if(_){!e&&a(_,\"pika-select\")&&(_.onchange||(_.setAttribute(\"onchange\",\"return;\"),r(_,\"change\",d._onChange)));do if(a(x,\"pika-single\")||x===T.trigger)return;while(x=x.parentNode);d._v&&_!==T.trigger&&x!==T.trigger&&d.hide()}},d.el=o.createElement(\"div\"),d.el.className=\"pika-single\"+(T.isRTL?\" is-rtl\":\"\")+(T.theme?\" \"+T.theme:\"\"),r(d.el,\"mousedown\",d._onMouseDown,!0),r(d.el,\"touchend\",d._onMouseDown,!0),r(d.el,\"change\",d._onChange),T.keyboardInput&&r(o,\"keydown\",d._onKeyChange),T.field&&(T.container?T.container.appendChild(d.el):T.bound?o.body.appendChild(d.el):T.field.parentNode.insertBefore(d.el,T.field.nextSibling),r(T.field,\"change\",d._onInputChange),T.defaultDate||(T.defaultDate=d._parseFieldValue(),T.setDefaultDate=!0));var b=T.defaultDate;w(b)?T.setDefaultDate?d.setDate(b,!0):d.gotoDate(b):d.gotoDate(new Date),T.bound?(this.hide(),d.el.className+=\" is-bound\",r(T.trigger,\"click\",d._onInputClick),r(T.trigger,\"focus\",d._onInputFocus),r(T.trigger,\"blur\",d._onInputBlur)):this.show()};return E.prototype={config:function(p){this._o||(this._o=$({},q,!0));var d=$(this._o,p,!0);d.isRTL=!!d.isRTL,d.field=d.field&&d.field.nodeName?d.field:null,d.theme=typeof d.theme==\"string\"&&d.theme?d.theme:null,d.bound=!!(d.bound!==void 0?d.field&&d.bound:d.field),d.trigger=d.trigger&&d.trigger.nodeName?d.trigger:d.field,d.disableWeekends=!!d.disableWeekends,d.disableDayFn=typeof d.disableDayFn==\"function\"?d.disableDayFn:null;var T=parseInt(d.numberOfMonths,10)||1;if(d.numberOfMonths=T>4?4:T,w(d.minDate)||(d.minDate=!1),w(d.maxDate)||(d.maxDate=!1),d.minDate&&d.maxDate&&d.maxDate<d.minDate&&(d.maxDate=d.minDate=!1),d.minDate&&this.setMinDate(d.minDate),d.maxDate&&this.setMaxDate(d.maxDate),m(d.yearRange)){var b=new Date().getFullYear()-10;d.yearRange[0]=parseInt(d.yearRange[0],10)||b,d.yearRange[1]=parseInt(d.yearRange[1],10)||b}else d.yearRange=Math.abs(parseInt(d.yearRange,10))||q.yearRange,d.yearRange>100&&(d.yearRange=100);return d},toString:function(p){return p=p||this._o.format,w(this._d)?this._o.toString?this._o.toString(this._d,p):t?s(this._d).format(p):this._d.toDateString():\"\"},getMoment:function(){return t?s(this._d):null},setMoment:function(p,d){t&&s.isMoment(p)&&this.setDate(p.toDate(),d)},getDate:function(){return w(this._d)?new Date(this._d.getTime()):null},setDate:function(p,d){if(!p)return this._d=null,this._o.field&&(this._o.field.value=\"\",et(this._o.field,\"change\",{firedBy:this})),this.draw();if(typeof p==\"string\"&&(p=new Date(Date.parse(p))),!!w(p)){var T=this._o.minDate,b=this._o.maxDate;w(T)&&p<T?p=T:w(b)&&p>b&&(p=b),this._d=new Date(p.getTime()),D(this._d),this.gotoDate(this._d),this._o.field&&(this._o.field.value=this.toString(),et(this._o.field,\"change\",{firedBy:this})),!d&&typeof this._o.onSelect==\"function\"&&this._o.onSelect.call(this,this.getDate())}},clear:function(){this.setDate(null)},gotoDate:function(p){var d=!0;if(w(p)){if(this.calendars){var T=new Date(this.calendars[0].year,this.calendars[0].month,1),b=new Date(this.calendars[this.calendars.length-1].year,this.calendars[this.calendars.length-1].month,1),H=p.getTime();b.setMonth(b.getMonth()+1),b.setDate(b.getDate()-1),d=H<T.getTime()||b.getTime()<H}d&&(this.calendars=[{month:p.getMonth(),year:p.getFullYear()}],this._o.mainCalendar===\"right\"&&(this.calendars[0].month+=1-this._o.numberOfMonths)),this.adjustCalendars()}},adjustDate:function(p,d){var T=this.getDate()||new Date,b=parseInt(d)*24*60*60*1e3,H;p===\"add\"?H=new Date(T.valueOf()+b):p===\"subtract\"&&(H=new Date(T.valueOf()-b)),this.setDate(H)},adjustCalendars:function(){this.calendars[0]=ft(this.calendars[0]);for(var p=1;p<this._o.numberOfMonths;p++)this.calendars[p]=ft({month:this.calendars[0].month+p,year:this.calendars[0].year});this.draw()},gotoToday:function(){this.gotoDate(new Date)},gotoMonth:function(p){isNaN(p)||(this.calendars[0].month=parseInt(p,10),this.adjustCalendars())},nextMonth:function(){this.calendars[0].month++,this.adjustCalendars()},prevMonth:function(){this.calendars[0].month--,this.adjustCalendars()},gotoYear:function(p){isNaN(p)||(this.calendars[0].year=parseInt(p,10),this.adjustCalendars())},setMinDate:function(p){p instanceof Date?(D(p),this._o.minDate=p,this._o.minYear=p.getFullYear(),this._o.minMonth=p.getMonth()):(this._o.minDate=q.minDate,this._o.minYear=q.minYear,this._o.minMonth=q.minMonth,this._o.startRange=q.startRange),this.draw()},setMaxDate:function(p){p instanceof Date?(D(p),this._o.maxDate=p,this._o.maxYear=p.getFullYear(),this._o.maxMonth=p.getMonth()):(this._o.maxDate=q.maxDate,this._o.maxYear=q.maxYear,this._o.maxMonth=q.maxMonth,this._o.endRange=q.endRange),this.draw()},setStartRange:function(p){this._o.startRange=p},setEndRange:function(p){this._o.endRange=p},draw:function(p){if(!(!this._v&&!p)){var d=this._o,T=d.minYear,b=d.maxYear,H=d.minMonth,_=d.maxMonth,x=\"\",F;this._y<=T&&(this._y=T,!isNaN(H)&&this._m<H&&(this._m=H)),this._y>=b&&(this._y=b,!isNaN(_)&&this._m>_&&(this._m=_));for(var U=0;U<d.numberOfMonths;U++)F=\"pika-title-\"+Math.random().toString(36).replace(/[^a-z]+/g,\"\").substr(0,2),x+='<div class=\"pika-lendar\">'+g(this,U,this.calendars[U].year,this.calendars[U].month,this.calendars[0].year,F)+this.render(this.calendars[U].year,this.calendars[U].month,F)+\"</div>\";this.el.innerHTML=x,d.bound&&d.field.type!==\"hidden\"&&i(function(){d.trigger.focus()},1),typeof this._o.onDraw==\"function\"&&this._o.onDraw(this),d.bound&&d.field.setAttribute(\"aria-label\",d.ariaLabel)}},adjustPosition:function(){var p,d,T,b,H,_,x,F,U,j,dt,Dt;if(!this._o.container){if(this.el.style.position=\"absolute\",p=this._o.trigger,d=p,T=this.el.offsetWidth,b=this.el.offsetHeight,H=window.innerWidth||o.documentElement.clientWidth,_=window.innerHeight||o.documentElement.clientHeight,x=window.pageYOffset||o.body.scrollTop||o.documentElement.scrollTop,dt=!0,Dt=!0,typeof p.getBoundingClientRect==\"function\")j=p.getBoundingClientRect(),F=j.left+window.pageXOffset,U=j.bottom+window.pageYOffset;else for(F=d.offsetLeft,U=d.offsetTop+d.offsetHeight;d=d.offsetParent;)F+=d.offsetLeft,U+=d.offsetTop;(this._o.reposition&&F+T>H||this._o.position.indexOf(\"right\")>-1&&F-T+p.offsetWidth>0)&&(F=F-T+p.offsetWidth,dt=!1),(this._o.reposition&&U+b>_+x||this._o.position.indexOf(\"top\")>-1&&U-b-p.offsetHeight>0)&&(U=U-b-p.offsetHeight,Dt=!1),this.el.style.left=F+\"px\",this.el.style.top=U+\"px\",h(this.el,dt?\"left-aligned\":\"right-aligned\"),h(this.el,Dt?\"bottom-aligned\":\"top-aligned\"),u(this.el,dt?\"right-aligned\":\"left-aligned\"),u(this.el,Dt?\"top-aligned\":\"bottom-aligned\")}},render:function(p,d,T){var b=this._o,H=new Date,_=O(p,d),x=new Date(p,d,1).getDay(),F=[],U=[];D(H),b.firstDay>0&&(x-=b.firstDay,x<0&&(x+=7));for(var j=d===0?11:d-1,dt=d===11?0:d+1,Dt=d===0?p-1:p,Yt=d===11?p+1:p,ye=O(Dt,j),xe=_+x,$e=xe;$e>7;)$e-=7;xe+=7-$e;for(var _e=!1,ie=0,wo=0;ie<xe;ie++){var kt=new Date(p,d,1+(ie-x)),Ye=w(this._d)?B(kt,this._d):!1,Ee=B(kt,H),Ze=b.events.indexOf(kt.toDateString())!==-1,Hs=ie<x||ie>=_+x,Se=1+(ie-x),si=d,Xr=p,uf=b.startRange&&B(b.startRange,kt),df=b.endRange&&B(b.endRange,kt),ff=b.startRange&&b.endRange&&b.startRange<kt&&kt<b.endRange,mf=b.minDate&&kt<b.minDate||b.maxDate&&kt>b.maxDate||b.disableWeekends&&R(kt)||b.disableDayFn&&b.disableDayFn(kt);Hs&&(ie<x?(Se=ye+Se,si=j,Xr=Dt):(Se=Se-_,si=dt,Xr=Yt));var pf={day:Se,month:si,year:Xr,hasEvent:Ze,isSelected:Ye,isToday:Ee,isDisabled:mf,isEmpty:Hs,isStartRange:uf,isEndRange:df,isInRange:ff,showDaysInNextAndPreviousMonths:b.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:b.enableSelectionDaysInNextAndPreviousMonths};b.pickWholeWeek&&Ye&&(_e=!0),U.push(it(pf)),++wo===7&&(b.showWeekNumber&&U.unshift(f(ie-x,d,p,b.firstWeekOfYearMinDays)),F.push(C(U,b.isRTL,b.pickWholeWeek,_e)),U=[],wo=0,_e=!1)}return y(b,F,T)},isVisible:function(){return this._v},show:function(){this.isVisible()||(this._v=!0,this.draw(),u(this.el,\"is-hidden\"),this._o.bound&&(r(o,\"click\",this._onClick),this.adjustPosition()),typeof this._o.onOpen==\"function\"&&this._o.onOpen.call(this))},hide:function(){var p=this._v;p!==!1&&(this._o.bound&&n(o,\"click\",this._onClick),this._o.container||(this.el.style.position=\"static\",this.el.style.left=\"auto\",this.el.style.top=\"auto\"),h(this.el,\"is-hidden\"),this._v=!1,p!==void 0&&typeof this._o.onClose==\"function\"&&this._o.onClose.call(this))},destroy:function(){var p=this._o;this.hide(),n(this.el,\"mousedown\",this._onMouseDown,!0),n(this.el,\"touchend\",this._onMouseDown,!0),n(this.el,\"change\",this._onChange),p.keyboardInput&&n(o,\"keydown\",this._onKeyChange),p.field&&(n(p.field,\"change\",this._onInputChange),p.bound&&(n(p.trigger,\"click\",this._onInputClick),n(p.trigger,\"focus\",this._onInputFocus),n(p.trigger,\"blur\",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}},E})});var Ml=ri(Ks=>{(function(s){\"use strict\";function t(o){return o.split('\"').length-1}var e={parse:function(o){var i,r,n,l=[],a=0,h,u,m,w;for(n=o.replace(/\\r\\n|\\r/g,`\n`).split(`\n`),n.length>1&&n[n.length-1]===\"\"&&n.pop(),i=0,r=n.length;i<r;i+=1){for(n[i]=n[i].split(\"\t\"),h=0,u=n[i].length;h<u;h+=1)l[a]||(l[a]=[]),m&&h===0?(w=l[a].length-1,l[a][w]=l[a][w]+`\n`+n[i][0],m&&t(n[i][0])&1&&(m=!1,l[a][w]=l[a][w].substring(0,l[a][w].length-1).replace(/\"\"/g,'\"'))):h===u-1&&n[i][h].indexOf('\"')===0&&t(n[i][h])&1?(l[a].push(n[i][h].substring(1).replace(/\"\"/g,'\"')),m=!0):(l[a].push(n[i][h].replace(/\"\"/g,'\"')),m=!1);m||(a+=1)}return l},stringify:function(o){var i,r,n,l,a=\"\",h;for(i=0,r=o.length;i<r;i+=1){for(l=o[i].length,n=0;n<l;n+=1)n>0&&(a+=\"\t\"),h=o[i][n],typeof h==\"string\"?h.indexOf(`\n`)>-1?a+='\"'+h.replace(/\"/g,'\"\"')+'\"':a+=h:h==null?a+=\"\":a+=h;i!==r-1&&(a+=`\n`)}return a}};typeof Ks<\"u\"?(Ks.parse=e.parse,Ks.stringify=e.stringify):s.SheetClip=e})(window)});var Jd=ri(de=>{var zp=de&&de.__extends||function(s,t){for(var e in t)t.hasOwnProperty(e)&&(s[e]=t[e]);function o(){this.constructor=s}s.prototype=t===null?Object.create(t):(o.prototype=t.prototype,new o)},Fh=Error,Le;(function(s){var t=function(g){if(q(g)){for(var E=new Array(g.length),y=0;y<E.length;y++)E[y]=\"\"+y;return E}if(Object.keys)return Object.keys(g);var E=[];for(var p in g)g.hasOwnProperty(p)&&E.push(p);return E};function e(g,y){switch(typeof g){case\"undefined\":case\"boolean\":case\"string\":case\"number\":return g===y;case\"object\":if(g===null)return y===null;if(q(g)){if(!q(y)||g.length!==y.length)return!1;for(var E=0,p=g.length;E<p;E++)if(!e(g[E],y[E]))return!1;return!0}var d=t(y),T=d.length;if(t(g).length!==T)return!1;for(var E=0;E<T;E++)if(!e(g[E],y[E]))return!1;return!0;default:return!1}}var o={add:function(g,y){return g[y]=this.value,!0},remove:function(g,y){return delete g[y],!0},replace:function(g,y){return g[y]=this.value,!0},move:function(g,y,E){var p={op:\"_get\",path:this.from};return it(E,[p]),it(E,[{op:\"remove\",path:this.from}]),it(E,[{op:\"add\",path:this.path,value:p.value}]),!0},copy:function(g,y,E){var p={op:\"_get\",path:this.from};return it(E,[p]),it(E,[{op:\"add\",path:this.path,value:p.value}]),!0},test:function(g,y){return e(g[y],this.value)},_get:function(g,y){this.value=g[y]}},i={add:function(g,y){return g.splice(y,0,this.value),!0},remove:function(g,y){return g.splice(y,1),!0},replace:function(g,y){return g[y]=this.value,!0},move:o.move,copy:o.copy,test:o.test,_get:o._get},r={add:function(g){r.remove.call(this,g);for(var y in this.value)this.value.hasOwnProperty(y)&&(g[y]=this.value[y]);return!0},remove:function(g){for(var y in g)g.hasOwnProperty(y)&&o.remove.call(this,g,y);return!0},replace:function(g){return it(g,[{op:\"remove\",path:this.path}]),it(g,[{op:\"add\",path:this.path,value:this.value}]),!0},move:o.move,copy:o.copy,test:function(g){return JSON.stringify(g)===JSON.stringify(this.value)},_get:function(g){this.value=g}},n={add:function(g,y){var E={op:\"add\",path:y+l(this.name),value:this.object[this.name]};g.push(E)},delete:function(g,y){var E={op:\"remove\",path:y+l(this.name)};g.push(E)},update:function(g,y){var E={op:\"replace\",path:y+l(this.name),value:this.object[this.name]};g.push(E)}};function l(g){return g.indexOf(\"/\")===-1&&g.indexOf(\"~\")===-1?g:g.replace(/~/g,\"~0\").replace(/\\//g,\"~1\")}function a(g,y){var E;for(var p in g)if(g.hasOwnProperty(p)){if(g[p]===y)return l(p)+\"/\";if(typeof g[p]==\"object\"&&(E=a(g[p],y),E!=\"\"))return l(p)+\"/\"+E}return\"\"}function h(g,y){if(g===y)return\"/\";var E=a(g,y);if(E===\"\")throw new Fh(\"Object not found in root\");return\"/\"+E}var u=[],m=(function(){function g(y){this.observers=[],this.obj=y}return g})(),w=(function(){function g(y,E){this.callback=y,this.observer=E}return g})();function R(g){for(var y=0,E=u.length;y<E;y++)if(u[y].obj===g)return u[y]}function A(g,y){for(var E=0,p=g.observers.length;E<p;E++)if(g.observers[E].callback===y)return g.observers[E].observer}function O(g,y){for(var E=0,p=g.observers.length;E<p;E++)if(g.observers[E].observer===y){g.observers.splice(E,1);return}}function D(g,y){y.unobserve()}s.unobserve=D;function B(g){return typeof g==\"object\"?JSON.parse(JSON.stringify(g)):g}function $(g,y){var E=[],p=g,d,T=R(g);if(T?d=A(T,y):(T=new m(g),u.push(T)),d)return d;if(d={},T.value=B(g),y){d.callback=y,d.next=null;var b=this.intervals||[100,1e3,1e4,6e4];if(b.push===void 0)throw new Fh(\"jsonpatch.intervals must be an array\");var H=0,_=function(){et(d)},x=function(){clearTimeout(d.next),d.next=setTimeout(function(){_(),H=0,d.next=setTimeout(F,b[H++])},0)},F=function(){_(),H==b.length&&(H=b.length-1),d.next=setTimeout(F,b[H++])};typeof window<\"u\"&&(window.addEventListener?(window.addEventListener(\"mousedown\",x),window.addEventListener(\"mouseup\",x),window.addEventListener(\"keydown\",x)):(document.documentElement.attachEvent(\"onmousedown\",x),document.documentElement.attachEvent(\"onmouseup\",x),document.documentElement.attachEvent(\"onkeydown\",x))),d.next=setTimeout(F,b[H++])}return d.patches=E,d.object=g,d.unobserve=function(){et(d),clearTimeout(d.next),O(T,d),T.observers.length===0&&u.splice(u.indexOf(T),1),typeof window<\"u\"&&(window.removeEventListener?(window.removeEventListener(\"mousedown\",x),window.removeEventListener(\"mouseup\",x),window.removeEventListener(\"keydown\",x)):(document.documentElement.detachEvent(\"onmousedown\",x),document.documentElement.detachEvent(\"onmouseup\",x),document.documentElement.detachEvent(\"onkeydown\",x)))},T.observers.push(new w(y,d)),d}s.observe=$;function et(g){for(var y,E=0,p=u.length;E<p;E++)if(u[E].obj===g.object){y=u[E];break}ft(y.value,g.object,g.patches,\"\"),g.patches.length&&it(y.value,g.patches);var d=g.patches;return d.length>0&&(g.patches=[],g.callback&&g.callback(d)),d}s.generate=et;function ft(g,y,E,p){for(var d=t(y),T=t(g),b=!1,H=!1,_=T.length-1;_>=0;_--){var x=T[_],F=g[x];if(y.hasOwnProperty(x)){var U=y[x];typeof F==\"object\"&&F!=null&&typeof U==\"object\"&&U!=null?ft(F,U,E,p+\"/\"+l(x)):F!=U&&(b=!0,E.push({op:\"replace\",path:p+\"/\"+l(x),value:B(U)}))}else E.push({op:\"remove\",path:p+\"/\"+l(x)}),H=!0}if(!(!H&&d.length==T.length))for(var _=0;_<d.length;_++){var x=d[_];g.hasOwnProperty(x)||E.push({op:\"add\",path:p+\"/\"+l(x),value:B(y[x])})}}var q;Array.isArray?q=Array.isArray:q=function(g){return g.push&&typeof g.length==\"number\"};function ct(g){for(var y=0,E=g.length,p;y<E;){if(p=g.charCodeAt(y),p>=48&&p<=57){y++;continue}return!1}return!0}function it(g,y,E){for(var p=!1,d=0,T=y.length,b,H;d<T;){b=y[d],d++;for(var _=b.path||\"\",x=_.split(\"/\"),F=g,U=1,j=x.length,dt=void 0;;){if(H=x[U],E&&dt===void 0&&(F[H]===void 0?dt=x.slice(0,U).join(\"/\"):U==j-1&&(dt=b.path),dt!==void 0&&this.validator(b,d-1,g,dt)),U++,H===void 0&&U>=j){p=r[b.op].call(b,F,H,g);break}if(q(F)){if(H===\"-\")H=F.length;else{if(E&&!ct(H))throw new f(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\",\"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\",d-1,b.path,b);H=parseInt(H,10)}if(U>=j){if(E&&b.op===\"add\"&&H>F.length)throw new f(\"The specified index MUST NOT be greater than the number of elements in the array\",\"OPERATION_VALUE_OUT_OF_BOUNDS\",d-1,b.path,b);p=i[b.op].call(b,F,H,g);break}}else if(H&&H.indexOf(\"~\")!=-1&&(H=H.replace(/~1/g,\"/\").replace(/~0/g,\"~\")),U>=j){p=o[b.op].call(b,F,H,g);break}F=F[H]}}return p}s.apply=it;function c(g,y){var E=[];return ft(g,y,E,\"\"),E}s.compare=c;var f=(function(g){zp(y,g);function y(E,p,d,T,b){g.call(this,E),this.message=E,this.name=p,this.index=d,this.operation=T,this.tree=b}return y})(Fh);s.JsonPatchError=f,s.Error=f;function C(g){if(g===void 0)return!0;if(Array.isArray(g)||typeof g==\"object\"){for(var y in g)if(C(g[y]))return!0}return!1}function S(g,y,E,p){if(typeof g!=\"object\"||g===null||q(g))throw new f(\"Operation is not an object\",\"OPERATION_NOT_AN_OBJECT\",y,g,E);if(o[g.op]){if(typeof g.path!=\"string\")throw new f(\"Operation `path` property is not a string\",\"OPERATION_PATH_INVALID\",y,g,E);if((g.op===\"move\"||g.op===\"copy\")&&typeof g.from!=\"string\")throw new f(\"Operation `from` property is not present (applicable in `move` and `copy` operations)\",\"OPERATION_FROM_REQUIRED\",y,g,E);if((g.op===\"add\"||g.op===\"replace\"||g.op===\"test\")&&g.value===void 0)throw new f(\"Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)\",\"OPERATION_VALUE_REQUIRED\",y,g,E);if((g.op===\"add\"||g.op===\"replace\"||g.op===\"test\")&&C(g.value))throw new f(\"Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)\",\"OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED\",y,g,E);if(E){if(g.op==\"add\"){var d=g.path.split(\"/\").length,T=p.split(\"/\").length;if(d!==T+1&&d!==T)throw new f(\"Cannot perform an `add` operation at the desired path\",\"OPERATION_PATH_CANNOT_ADD\",y,g,E)}else if(g.op===\"replace\"||g.op===\"remove\"||g.op===\"_get\"){if(g.path!==p)throw new f(\"Cannot perform the operation at a path that does not exist\",\"OPERATION_PATH_UNRESOLVABLE\",y,g,E)}else if(g.op===\"move\"||g.op===\"copy\"){var b={op:\"_get\",path:g.from,value:void 0},H=s.validate([b],E);if(H&&H.name===\"OPERATION_PATH_UNRESOLVABLE\")throw new f(\"Cannot perform the operation from a path that does not exist\",\"OPERATION_FROM_UNRESOLVABLE\",y,g,E)}}}else throw new f(\"Operation `op` property is not one of operations defined in RFC-6902\",\"OPERATION_OP_INVALID\",y,g,E)}s.validator=S;function N(g,y){try{if(!q(g))throw new f(\"Patch sequence must be an array\",\"SEQUENCE_NOT_AN_ARRAY\");if(y)y=JSON.parse(JSON.stringify(y)),it.call(this,y,g,!0);else for(var E=0;E<g.length;E++)this.validator(g[E],E)}catch(p){if(p instanceof f)return p;throw p}}s.validate=N})(Le||(Le={}));typeof de<\"u\"&&(de.apply=Le.apply,de.observe=Le.observe,de.unobserve=Le.unobserve,de.generate=Le.generate,de.compare=Le.compare,de.validate=Le.validate,de.validator=Le.validator,de.JsonPatchError=Le.JsonPatchError,de.Error=Le.Error)});var Jp={};It(Jp,{default:()=>Qp});var jr=new Map;function Pt(s=\"common\"){jr.has(s)||jr.set(s,new Map);let t=jr.get(s);function e(l,a){t.set(l,a)}function o(l){return t.get(l)}function i(l){return t.has(l)}function r(){return[...t.keys()]}function n(){return[...t.values()]}return{register:e,getItem:o,hasItem:i,getNames:r,getValues:n}}var Jr={};It(Jr,{arrayAvg:()=>Tf,arrayEach:()=>v,arrayFilter:()=>Kt,arrayFlatten:()=>Ls,arrayMap:()=>ht,arrayMax:()=>Qr,arrayMin:()=>Rf,arrayReduce:()=>Tt,arraySum:()=>Gh,arrayUnique:()=>bf,extendArray:()=>Ns,pivot:()=>qr,to2dArray:()=>Kr});function Kr(s){let t=s.length,e=0;for(;e<t;)s[e]=[s[e]],e+=1}function Ns(s,t){let e=t.length,o=0;for(;o<e;)s.push(t[o]),o+=1}function qr(s){let t=[];if(!s||s.length===0||!s[0]||s[0].length===0)return t;let e=s.length,o=s[0].length;for(let i=0;i<e;i++)for(let r=0;r<o;r++)t[r]||(t[r]=[]),t[r][i]=s[i][r];return t}function Tt(s,t,e,o){let i=-1,r=s,n=e;Array.isArray(s)||(r=Array.from(s));let l=r.length;for(o&&l&&(i+=1,n=r[i]),i+=1;i<l;)n=t(n,r[i],i,r),i+=1;return n}function Kt(s,t){let e=0,o=s;Array.isArray(s)||(o=Array.from(s));let i=o.length,r=[],n=-1;for(;e<i;){let l=o[e];t(l,e,o)&&(n+=1,r[n]=l),e+=1}return r}function ht(s,t){let e=0,o=s;Array.isArray(s)||(o=Array.from(s));let i=o.length,r=[],n=-1;for(;e<i;){let l=o[e];n+=1,r[n]=t(l,e,o),e+=1}return r}function v(s,t){let e=0,o=s;Array.isArray(s)||(o=Array.from(s));let i=o.length;for(;e<i&&t(o[e],e,o)!==!1;)e+=1;return s}function Gh(s){return Tt(s,(t,e)=>t+e,0)}function Qr(s){return Tt(s,(t,e)=>t>e?t:e,Array.isArray(s)?s[0]:void 0)}function Rf(s){return Tt(s,(t,e)=>t<e?t:e,Array.isArray(s)?s[0]:void 0)}function Tf(s){return s.length?Gh(s)/s.length:0}function Ls(s){return Tt(s,(t,e)=>t.concat(Array.isArray(e)?Ls(e):e),[])}function bf(s){let t=[];return v(s,e=>{t.indexOf(e)===-1&&t.push(e)}),t}var Zr={};It(Zr,{clone:()=>ni,createObjectPropListener:()=>oo,deepClone:()=>Rt,deepExtend:()=>eo,deepObjectSize:()=>ai,defineGetter:()=>De,duckSchema:()=>to,extend:()=>Ft,getProperty:()=>xs,hasOwnProperty:()=>ot,inherit:()=>Re,isObject:()=>K,isObjectEqual:()=>li,mixin:()=>Lt,objectEach:()=>X});function to(s){let t;return Array.isArray(s)?t=[]:(t={},X(s,(e,o)=>{o!==\"__children\"&&(e&&typeof e==\"object\"&&!Array.isArray(e)?t[o]=to(e):Array.isArray(e)?e.length&&typeof e[0]==\"object\"&&!Array.isArray(e[0])?t[o]=[to(e[0])]:t[o]=[]:t[o]=null)})),t}function Re(s,t){return t.prototype.constructor=t,s.prototype=new t,s.prototype.constructor=s,s}function Ft(s,t){return X(t,(e,o)=>{s[o]=e}),s}function eo(s,t){X(t,(e,o)=>{t[o]&&typeof t[o]==\"object\"?(s[o]||(Array.isArray(t[o])?s[o]=[]:Object.prototype.toString.call(t[o])===\"[object Date]\"?s[o]=t[o]:s[o]={}),eo(s[o],t[o])):s[o]=t[o]})}function Rt(s){return typeof s==\"object\"?JSON.parse(JSON.stringify(s)):s}function ni(s){let t={};return X(s,(e,o)=>{t[o]=e}),t}function Lt(s,...t){return s.MIXINS||(s.MIXINS=[]),v(t,e=>{s.MIXINS.push(e.MIXIN_NAME),X(e,(o,i)=>{if(s.prototype[i]!==void 0)throw new Error(`Mixin conflict. Property '${i}' already exist and cannot be overwritten.`);if(typeof o==\"function\")s.prototype[i]=o;else{let r=function(a,h){let u=`_${a}`,m=w=>{let R=w;return(Array.isArray(R)||K(R))&&(R=Rt(R)),R};return function(){return this[u]===void 0&&(this[u]=m(h)),this[u]}},n=function(a){let h=`_${a}`;return function(u){this[h]=u}};Object.defineProperty(s.prototype,i,{get:r(i,o),set:n(i),configurable:!0})}})}),s}function li(s,t){return JSON.stringify(s)===JSON.stringify(t)}function K(s){return Object.prototype.toString.call(s)===\"[object Object]\"}function De(s,t,e,o){o.value=e,o.writable=o.writable!==!1,o.enumerable=o.enumerable!==!1,o.configurable=o.configurable!==!1,Object.defineProperty(s,t,o)}function X(s,t){for(let e in s)if((!s.hasOwnProperty||s.hasOwnProperty&&Object.prototype.hasOwnProperty.call(s,e))&&t(s[e],e,s)===!1)break;return s}function xs(s,t){let e=t.split(\".\"),o=s;return X(e,i=>{if(o=o[i],o===void 0)return o=void 0,!1}),o}function ai(s){if(!K(s))return 0;let t=function(e){let o=0;return K(e)?X(e,i=>{o+=t(i)}):o+=1,o};return t(s)}function oo(s,t=\"value\"){let e=`_${t}`,o={_touched:!1,[e]:s,isTouched(){return this._touched}};return Object.defineProperty(o,t,{get(){return this[e]},set(i){this._touched=!0,this[e]=i},enumerable:!0,configurable:!0}),o}function ot(s,t){return Object.prototype.hasOwnProperty.call(s,t)}var Fo=[\"afterCellMetaReset\",\"afterChange\",\"afterChangesObserved\",\"afterContextMenuDefaultOptions\",\"beforeContextMenuSetItems\",\"afterDropdownMenuDefaultOptions\",\"beforeDropdownMenuSetItems\",\"afterContextMenuHide\",\"beforeContextMenuShow\",\"afterContextMenuShow\",\"afterCopyLimit\",\"beforeCreateCol\",\"afterCreateCol\",\"beforeCreateRow\",\"afterCreateRow\",\"afterDeselect\",\"afterDestroy\",\"afterDocumentKeyDown\",\"afterDrawSelection\",\"beforeRemoveCellClassNames\",\"afterGetCellMeta\",\"afterGetColHeader\",\"afterGetRowHeader\",\"afterInit\",\"afterLoadData\",\"afterMomentumScroll\",\"afterOnCellCornerMouseDown\",\"afterOnCellCornerDblClick\",\"afterOnCellMouseDown\",\"afterOnCellMouseUp\",\"afterOnCellContextMenu\",\"afterOnCellMouseOver\",\"afterOnCellMouseOut\",\"afterRemoveCol\",\"afterRemoveRow\",\"afterRender\",\"beforeRenderer\",\"afterRenderer\",\"afterScrollHorizontally\",\"afterScrollVertically\",\"afterSelection\",\"afterSelectionByProp\",\"afterSelectionEnd\",\"afterSelectionEndByProp\",\"afterSetCellMeta\",\"afterRemoveCellMeta\",\"afterSetDataAtCell\",\"afterSetDataAtRowProp\",\"afterUpdateSettings\",\"afterValidate\",\"beforeLanguageChange\",\"afterLanguageChange\",\"beforeAutofill\",\"beforeCellAlignment\",\"beforeChange\",\"beforeChangeRender\",\"beforeDrawBorders\",\"beforeGetCellMeta\",\"beforeRemoveCellMeta\",\"beforeInit\",\"beforeInitWalkontable\",\"beforeKeyDown\",\"beforeOnCellMouseDown\",\"beforeOnCellMouseUp\",\"beforeOnCellContextMenu\",\"beforeOnCellMouseOver\",\"beforeOnCellMouseOut\",\"beforeRemoveCol\",\"beforeRemoveRow\",\"beforeRender\",\"beforeSetRangeStartOnly\",\"beforeSetRangeStart\",\"beforeSetRangeEnd\",\"beforeTouchScroll\",\"beforeValidate\",\"beforeValueRender\",\"construct\",\"init\",\"modifyCol\",\"unmodifyCol\",\"unmodifyRow\",\"modifyColHeader\",\"modifyColWidth\",\"modifyRow\",\"modifyRowHeader\",\"modifyRowHeight\",\"modifyData\",\"modifyRowData\",\"modifyGetCellCoords\",\"persistentStateLoad\",\"persistentStateReset\",\"persistentStateSave\",\"beforeColumnSort\",\"afterColumnSort\",\"modifyAutofillRange\",\"modifyCopyableRange\",\"beforeCut\",\"afterCut\",\"beforeCopy\",\"afterCopy\",\"beforePaste\",\"afterPaste\",\"beforeColumnMove\",\"afterColumnMove\",\"beforeRowMove\",\"afterRowMove\",\"beforeColumnResize\",\"afterColumnResize\",\"beforeRowResize\",\"afterRowResize\",\"afterGetColumnHeaderRenderers\",\"afterGetRowHeaderRenderers\",\"beforeStretchingColumnWidth\",\"beforeFilter\",\"afterFilter\",\"modifyColumnHeaderHeight\",\"beforeUndo\",\"afterUndo\",\"beforeRedo\",\"afterRedo\",\"modifyRowHeaderWidth\",\"beforeAutofillInsidePopulate\",\"modifyTransformStart\",\"modifyTransformEnd\",\"afterModifyTransformStart\",\"afterModifyTransformEnd\",\"afterViewportRowCalculatorOverride\",\"afterViewportColumnCalculatorOverride\",\"afterPluginsInitialized\",\"skipLengthCache\",\"afterTrimRow\",\"afterUntrimRow\",\"beforeDropdownMenuShow\",\"afterDropdownMenuShow\",\"afterDropdownMenuHide\",\"hiddenRow\",\"hiddenColumn\",\"beforeAddChild\",\"afterAddChild\",\"beforeDetachChild\",\"afterDetachChild\",\"afterBeginEditing\",\"beforeMergeCells\",\"afterMergeCells\",\"beforeUnmergeCells\",\"afterUnmergeCells\",\"afterListen\",\"afterUnlisten\"],_s=class{static getSingleton(){return Of()}constructor(){this.globalBucket=this.createEmptyBucket()}createEmptyBucket(){let t=Object.create(null);return v(Fo,e=>t[e]=[]),t}getBucket(t=null){return t?(t.pluginHookBucket||(t.pluginHookBucket=this.createEmptyBucket()),t.pluginHookBucket):this.globalBucket}add(t,e,o=null){if(Array.isArray(e))v(e,i=>this.add(t,i,o));else{let i=this.getBucket(o);if(typeof i[t]>\"u\"&&(this.register(t),i[t]=[]),e.skip=!1,i[t].indexOf(e)===-1){let r=!1;e.initialHook&&v(i[t],(n,l)=>{if(n.initialHook)return i[t][l]=e,r=!0,!1}),r||i[t].push(e)}}return this}once(t,e,o=null){Array.isArray(e)?v(e,i=>this.once(t,i,o)):(e.runOnce=!0,this.add(t,e,o))}remove(t,e,o=null){let i=this.getBucket(o);return typeof i[t]<\"u\"&&i[t].indexOf(e)>=0?(e.skip=!0,!0):!1}has(t,e=null){let o=this.getBucket(e);return!!(o[t]!==void 0&&o[t].length)}run(t,e,o,i,r,n,l,a){{let h=this.globalBucket[e],u=h?h.length:0,m=0;if(u)for(;m<u;){if(!h[m]||h[m].skip){m+=1;continue}let w=h[m].call(t,o,i,r,n,l,a);w!==void 0&&(o=w),h[m]&&h[m].runOnce&&this.remove(e,h[m]),m+=1}}{let h=this.getBucket(t)[e],u=h?h.length:0,m=0;if(u)for(;m<u;){if(!h[m]||h[m].skip){m+=1;continue}let w=h[m].call(t,o,i,r,n,l,a);w!==void 0&&(o=w),h[m]&&h[m].runOnce&&this.remove(e,h[m],t),m+=1}}return o}destroy(t=null){X(this.getBucket(t),(e,o,i)=>i[o].length=0)}register(t){this.isRegistered(t)||Fo.push(t)}deregister(t){this.isRegistered(t)&&Fo.splice(Fo.indexOf(t),1)}isRegistered(t){return Fo.indexOf(t)>=0}getRegistered(){return Fo}},vf=new _s;function Of(){return vf}var V=_s;var Vo=new WeakMap,tn=class s{static get DEFAULT_WIDTH(){return 50}constructor(t,e,o,i,r,n,l,a=h=>h){Vo.set(this,{viewportWidth:t,scrollOffset:e,totalColumns:o,columnWidthFn:i,overrideFn:r,onlyFullyVisible:n,stretchingColumnWidthFn:a}),this.count=0,this.startColumn=null,this.endColumn=null,this.startPosition=null,this.stretchAllRatio=0,this.stretchLastWidth=0,this.stretch=l,this.totalTargetWidth=0,this.needVerifyLastColumnWidth=!0,this.stretchAllColumnsWidth=[],this.calculate()}calculate(){let t=0,e=!0,o=[],i,r=Vo.get(this),n=r.onlyFullyVisible,l=r.overrideFn,a=r.scrollOffset,h=r.totalColumns,u=r.viewportWidth;for(let m=0;m<h;m++){i=this._getColumnWidth(m),t<=a&&!n&&(this.startColumn=m);let w=a>0?u+1:u;if(t>=a&&t+i<=a+w&&((this.startColumn===null||this.startColumn===void 0)&&(this.startColumn=m),this.endColumn=m),o.push(t),t+=i,n||(this.endColumn=m),t>=a+u){e=!1;break}}if(this.endColumn===h-1&&e)for(this.startColumn=this.endColumn;this.startColumn>0;){let m=o[this.endColumn]+i-o[this.startColumn-1];if((m<=u||!n)&&(this.startColumn-=1),m>u)break}this.startColumn!==null&&l&&l(this),this.startPosition=o[this.startColumn],this.startPosition===void 0&&(this.startPosition=null),this.startColumn!==null&&(this.count=this.endColumn-this.startColumn+1)}refreshStretching(t){if(this.stretch===\"none\")return;let e=t;this.totalTargetWidth=e;let o=Vo.get(this),i=o.totalColumns,r=0;for(let l=0;l<i;l++){let a=this._getColumnWidth(l),h=o.stretchingColumnWidthFn(void 0,l);typeof h==\"number\"?e-=h:r+=a}let n=e-r;if(this.stretch===\"all\"&&n>0)this.stretchAllRatio=e/r,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0;else if(this.stretch===\"last\"&&e!==1/0){let l=this._getColumnWidth(i-1),a=n+l;this.stretchLastWidth=a>=0?a:l}}getStretchedColumnWidth(t,e){let o=null;return this.stretch===\"all\"&&this.stretchAllRatio!==0?o=this._getStretchedAllColumnWidth(t,e):this.stretch===\"last\"&&this.stretchLastWidth!==0&&(o=this._getStretchedLastColumnWidth(t)),o}_getStretchedAllColumnWidth(t,e){let o=0,i=Vo.get(this),r=i.totalColumns;if(!this.stretchAllColumnsWidth[t]){let n=Math.round(e*this.stretchAllRatio),l=i.stretchingColumnWidthFn(n,t);l===void 0?this.stretchAllColumnsWidth[t]=n:this.stretchAllColumnsWidth[t]=isNaN(l)?this._getColumnWidth(t):l}if(this.stretchAllColumnsWidth.length===r&&this.needVerifyLastColumnWidth){this.needVerifyLastColumnWidth=!1;for(let n=0;n<this.stretchAllColumnsWidth.length;n++)o+=this.stretchAllColumnsWidth[n];o!==this.totalTargetWidth&&(this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length-1]+=this.totalTargetWidth-o)}return this.stretchAllColumnsWidth[t]}_getStretchedLastColumnWidth(t){let o=Vo.get(this).totalColumns;return t===o-1?this.stretchLastWidth:null}_getColumnWidth(t){let e=Vo.get(this).columnWidthFn(t);return isNaN(e)&&(e=s.DEFAULT_WIDTH),e}},Co=tn;var Xh=new WeakMap,en=class s{static get DEFAULT_HEIGHT(){return 23}constructor(t,e,o,i,r,n,l){Xh.set(this,{viewportHeight:t,scrollOffset:e,totalRows:o,rowHeightFn:i,overrideFn:r,onlyFullyVisible:n,horizontalScrollbarHeight:l}),this.count=0,this.startRow=null,this.endRow=null,this.startPosition=null,this.calculate()}calculate(){let t=0,e=!0,o=[],i=Xh.get(this),r=i.onlyFullyVisible,n=i.overrideFn,l=i.rowHeightFn,a=i.scrollOffset,h=i.totalRows,u=i.viewportHeight,m=i.horizontalScrollbarHeight||0,w;for(let R=0;R<h;R++)if(w=l(R),isNaN(w)&&(w=s.DEFAULT_HEIGHT),t<=a&&!r&&(this.startRow=R),t>=a&&t+w<=a+u-m&&(this.startRow===null&&(this.startRow=R),this.endRow=R),o.push(t),t+=w,r||(this.endRow=R),t>=a+u-m){e=!1;break}if(this.endRow===h-1&&e)for(this.startRow=this.endRow;this.startRow>0;){let R=o[this.endRow]+w-o[this.startRow-1];if((R<=u-m||!r)&&(this.startRow-=1),R>=u-m)break}this.startRow!==null&&n&&n(this),this.startPosition=o[this.startRow],this.startPosition===void 0&&(this.startPosition=null),this.startRow!==null&&(this.count=this.endRow-this.startRow+1)}},on=en;var sn=class{constructor(t,e){this.row=null,this.col=null,typeof t<\"u\"&&typeof e<\"u\"&&(this.row=t,this.col=e)}isValid(t){return!(this.row<0||this.col<0||this.row>=t.getSetting(\"totalRows\")||this.col>=t.getSetting(\"totalColumns\"))}isEqual(t){return t===this?!0:this.row===t.row&&this.col===t.col}isSouthEastOf(t){return this.row>=t.row&&this.col>=t.col}isNorthWestOf(t){return this.row<=t.row&&this.col<=t.col}isSouthWestOf(t){return this.row>=t.row&&this.col<=t.col}isNorthEastOf(t){return this.row<=t.row&&this.col>=t.col}toObject(){return{row:this.row,col:this.col}}},M=sn;var rn=class{constructor(t,e=t,o=t){this.highlight=t,this.from=e,this.to=o}setHighlight(t){return this.highlight=t,this}setFrom(t){return this.from=t,this}setTo(t){return this.to=t,this}isValid(t){return this.from.isValid(t)&&this.to.isValid(t)}isSingle(){return this.from.row===this.to.row&&this.from.col===this.to.col}getHeight(){return Math.max(this.from.row,this.to.row)-Math.min(this.from.row,this.to.row)+1}getWidth(){return Math.max(this.from.col,this.to.col)-Math.min(this.from.col,this.to.col)+1}includes(t){let{row:e,col:o}=t,i=this.getTopLeftCorner(),r=this.getBottomRightCorner();return i.row<=e&&r.row>=e&&i.col<=o&&r.col>=o}includesRange(t){return this.includes(t.getTopLeftCorner())&&this.includes(t.getBottomRightCorner())}isEqual(t){return Math.min(this.from.row,this.to.row)===Math.min(t.from.row,t.to.row)&&Math.max(this.from.row,this.to.row)===Math.max(t.from.row,t.to.row)&&Math.min(this.from.col,this.to.col)===Math.min(t.from.col,t.to.col)&&Math.max(this.from.col,this.to.col)===Math.max(t.from.col,t.to.col)}overlaps(t){return t.isSouthEastOf(this.getTopLeftCorner())&&t.isNorthWestOf(this.getBottomRightCorner())}isSouthEastOf(t){return this.getTopLeftCorner().isSouthEastOf(t)||this.getBottomRightCorner().isSouthEastOf(t)}isNorthWestOf(t){return this.getTopLeftCorner().isNorthWestOf(t)||this.getBottomRightCorner().isNorthWestOf(t)}isOverlappingHorizontally(t){return this.getTopRightCorner().col>=t.getTopLeftCorner().col&&this.getTopRightCorner().col<=t.getTopRightCorner().col||this.getTopLeftCorner().col<=t.getTopRightCorner().col&&this.getTopLeftCorner().col>=t.getTopLeftCorner().col}isOverlappingVertically(t){return this.getBottomRightCorner().row>=t.getTopRightCorner().row&&this.getBottomRightCorner().row<=t.getBottomRightCorner().row||this.getTopRightCorner().row<=t.getBottomRightCorner().row&&this.getTopRightCorner().row>=t.getTopRightCorner().row}expand(t){let e=this.getTopLeftCorner(),o=this.getBottomRightCorner();return t.row<e.row||t.col<e.col||t.row>o.row||t.col>o.col?(this.from=new M(Math.min(e.row,t.row),Math.min(e.col,t.col)),this.to=new M(Math.max(o.row,t.row),Math.max(o.col,t.col)),!0):!1}expandByRange(t){if(this.includesRange(t)||!this.overlaps(t))return!1;let e=this.getTopLeftCorner(),o=this.getBottomRightCorner(),i=this.getDirection(),r=t.getTopLeftCorner(),n=t.getBottomRightCorner(),l=Math.min(e.row,r.row),a=Math.min(e.col,r.col),h=Math.max(o.row,n.row),u=Math.max(o.col,n.col),m=new M(l,a),w=new M(h,u);return this.from=m,this.to=w,this.setDirection(i),this.highlight.row===this.getBottomRightCorner().row&&this.getVerticalDirection()===\"N-S\"&&this.flipDirectionVertically(),this.highlight.col===this.getTopRightCorner().col&&this.getHorizontalDirection()===\"W-E\"&&this.flipDirectionHorizontally(),!0}getDirection(){if(this.from.isNorthWestOf(this.to))return\"NW-SE\";if(this.from.isNorthEastOf(this.to))return\"NE-SW\";if(this.from.isSouthEastOf(this.to))return\"SE-NW\";if(this.from.isSouthWestOf(this.to))return\"SW-NE\"}setDirection(t){switch(t){case\"NW-SE\":[this.from,this.to]=[this.getTopLeftCorner(),this.getBottomRightCorner()];break;case\"NE-SW\":[this.from,this.to]=[this.getTopRightCorner(),this.getBottomLeftCorner()];break;case\"SE-NW\":[this.from,this.to]=[this.getBottomRightCorner(),this.getTopLeftCorner()];break;case\"SW-NE\":[this.from,this.to]=[this.getBottomLeftCorner(),this.getTopRightCorner()];break;default:break}}getVerticalDirection(){return[\"NE-SW\",\"NW-SE\"].indexOf(this.getDirection())>-1?\"N-S\":\"S-N\"}getHorizontalDirection(){return[\"NW-SE\",\"SW-NE\"].indexOf(this.getDirection())>-1?\"W-E\":\"E-W\"}flipDirectionVertically(){switch(this.getDirection()){case\"NW-SE\":this.setDirection(\"SW-NE\");break;case\"NE-SW\":this.setDirection(\"SE-NW\");break;case\"SE-NW\":this.setDirection(\"NE-SW\");break;case\"SW-NE\":this.setDirection(\"NW-SE\");break;default:break}}flipDirectionHorizontally(){switch(this.getDirection()){case\"NW-SE\":this.setDirection(\"NE-SW\");break;case\"NE-SW\":this.setDirection(\"NW-SE\");break;case\"SE-NW\":this.setDirection(\"SW-NE\");break;case\"SW-NE\":this.setDirection(\"SE-NW\");break;default:break}}getTopLeftCorner(){return new M(Math.min(this.from.row,this.to.row),Math.min(this.from.col,this.to.col))}getBottomRightCorner(){return new M(Math.max(this.from.row,this.to.row),Math.max(this.from.col,this.to.col))}getTopRightCorner(){return new M(Math.min(this.from.row,this.to.row),Math.max(this.from.col,this.to.col))}getBottomLeftCorner(){return new M(Math.max(this.from.row,this.to.row),Math.min(this.from.col,this.to.col))}isCorner(t,e){return e&&e.includes(t)&&(this.getTopLeftCorner().isEqual(new M(e.from.row,e.from.col))||this.getTopRightCorner().isEqual(new M(e.from.row,e.to.col))||this.getBottomLeftCorner().isEqual(new M(e.to.row,e.from.col))||this.getBottomRightCorner().isEqual(new M(e.to.row,e.to.col)))?!0:t.isEqual(this.getTopLeftCorner())||t.isEqual(this.getTopRightCorner())||t.isEqual(this.getBottomLeftCorner())||t.isEqual(this.getBottomRightCorner())}getOppositeCorner(t,e){if(!(t instanceof M))return!1;if(e&&e.includes(t)){if(this.getTopLeftCorner().isEqual(new M(e.from.row,e.from.col)))return this.getBottomRightCorner();if(this.getTopRightCorner().isEqual(new M(e.from.row,e.to.col)))return this.getBottomLeftCorner();if(this.getBottomLeftCorner().isEqual(new M(e.to.row,e.from.col)))return this.getTopRightCorner();if(this.getBottomRightCorner().isEqual(new M(e.to.row,e.to.col)))return this.getTopLeftCorner()}if(t.isEqual(this.getBottomRightCorner()))return this.getTopLeftCorner();if(t.isEqual(this.getTopLeftCorner()))return this.getBottomRightCorner();if(t.isEqual(this.getTopRightCorner()))return this.getBottomLeftCorner();if(t.isEqual(this.getBottomLeftCorner()))return this.getTopRightCorner()}getBordersSharedWith(t){if(!this.includesRange(t))return[];let e={top:Math.min(this.from.row,this.to.row),bottom:Math.max(this.from.row,this.to.row),left:Math.min(this.from.col,this.to.col),right:Math.max(this.from.col,this.to.col)},o={top:Math.min(t.from.row,t.to.row),bottom:Math.max(t.from.row,t.to.row),left:Math.min(t.from.col,t.to.col),right:Math.max(t.from.col,t.to.col)},i=[];return e.top===o.top&&i.push(\"top\"),e.right===o.right&&i.push(\"right\"),e.bottom===o.bottom&&i.push(\"bottom\"),e.left===o.left&&i.push(\"left\"),i}getInner(){let t=this.getTopLeftCorner(),e=this.getBottomRightCorner(),o=[];for(let i=t.row;i<=e.row;i++)for(let r=t.col;r<=e.col;r++)!(this.from.row===i&&this.from.col===r)&&!(this.to.row===i&&this.to.col===r)&&o.push(new M(i,r));return o}getAll(){let t=this.getTopLeftCorner(),e=this.getBottomRightCorner(),o=[];for(let i=t.row;i<=e.row;i++)for(let r=t.col;r<=e.col;r++)t.row===i&&t.col===r?o.push(t):e.row===i&&e.col===r?o.push(e):o.push(new M(i,r));return o}forAll(t){let e=this.getTopLeftCorner(),o=this.getBottomRightCorner();for(let i=e.row;i<=o.row;i++)for(let r=e.col;r<=o.col;r++)if(t(i,r)===!1)return}toObject(){return{from:this.from.toObject(),to:this.to.toObject()}}},Ct=rn;var nn=class{constructor(t,e,o){this.offset=t,this.total=e,this.countTH=o}offsetted(t){return t+this.offset}unOffsetted(t){return t-this.offset}renderedToSource(t){return this.offsetted(t)}sourceToRendered(t){return this.unOffsetted(t)}offsettedTH(t){return t-this.countTH}unOffsettedTH(t){return t+this.countTH}visibleRowHeadedColumnToSourceColumn(t){return this.renderedToSource(this.offsettedTH(t))}sourceColumnToVisibleRowHeadedColumn(t){return this.unOffsettedTH(this.sourceToRendered(t))}},ln=nn;var an=class{constructor(t,e,o){this.offset=t,this.total=e,this.countTH=o}offsetted(t){return t+this.offset}unOffsetted(t){return t-this.offset}renderedToSource(t){return this.offsetted(t)}sourceToRendered(t){return this.unOffsetted(t)}offsettedTH(t){return t-this.countTH}unOffsettedTH(t){return t+this.countTH}visibleColHeadedRowToSourceRow(t){return this.renderedToSource(this.offsettedTH(t))}sourceRowToVisibleColHeadedRow(t){return this.unOffsettedTH(this.sourceToRendered(t))}},hn=an;var Nn={};It(Nn,{HTML_CHARACTERS:()=>Jh,addClass:()=>L,addEvent:()=>Df,closest:()=>Ie,closestDown:()=>zo,empty:()=>xt,fastInnerHTML:()=>Te,fastInnerText:()=>Pe,getCaretPosition:()=>di,getComputedStyle:()=>je,getCssTransform:()=>re,getParent:()=>Rn,getScrollLeft:()=>Yo,getScrollTop:()=>so,getScrollableElement:()=>be,getScrollbarWidth:()=>at,getSelectionEndPosition:()=>vn,getSelectionText:()=>On,getStyle:()=>Go,getTrimmingContainer:()=>Be,getWindowScrollLeft:()=>qt,getWindowScrollTop:()=>fe,hasClass:()=>z,hasHorizontalScrollbar:()=>Hn,hasVerticalScrollbar:()=>Mn,index:()=>bn,innerHeight:()=>Qt,innerWidth:()=>ve,isChildOf:()=>se,isChildOfWebComponentTable:()=>Tn,isInput:()=>fi,isOutsideInput:()=>An,isVisible:()=>Xe,offset:()=>rt,outerHeight:()=>lt,outerWidth:()=>st,overlayContainsElement:()=>$o,polymerUnwrap:()=>Qh,polymerWrap:()=>ui,removeClass:()=>Y,removeEvent:()=>kf,removeTextNodes:()=>Ps,resetCssTransform:()=>Gt,setCaretPosition:()=>ro,setOverlayPosition:()=>Eo});var mn={};It(mn,{isChrome:()=>cn,isEdge:()=>Mf,isIE:()=>Hf,isIE8:()=>un,isIE9:()=>dn,isMSBrowser:()=>Af,isMobileBrowser:()=>$t,isSafari:()=>fn,setBrowserMeta:()=>jh});var yo=s=>{let t={value:!1};return t.test=(e,o)=>{t.value=s(e,o)},t},ke={chrome:yo((s,t)=>/Chrome/.test(s)&&/Google/.test(t)),edge:yo(s=>/Edge/.test(s)),ie:yo(s=>/Trident/.test(s)),ie8:yo(()=>!document.createTextNode(\"test\").textContent),ie9:yo(()=>!!document.documentMode),mobile:yo(s=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(s)),safari:yo((s,t)=>/Safari/.test(s)&&/Apple Computer/.test(t))};function jh({userAgent:s=navigator.userAgent,vendor:t=navigator.vendor}={}){X(ke,({test:e})=>{e(s,t)})}jh();function cn(){return ke.chrome.value}function Mf(){return ke.edge.value}function Hf(){return ke.ie.value}function un(){return ke.ie8.value}function dn(){return ke.ie9.value}function Af(){return ke.ie.value||ke.edge.value}function $t(){return ke.mobile.value}function fn(){return ke.safari.value}var wn={};It(wn,{cancelAnimationFrame:()=>Ge,getComparisonFunction:()=>Lf,hasCaptionProblem:()=>Is,isTouchSupported:()=>ci,isWebComponentSupportedNatively:()=>gn,requestAnimationFrame:()=>io});var Kh=0,Ds=[\"ms\",\"moz\",\"webkit\",\"o\"],hi=window.requestAnimationFrame,ks=window.cancelAnimationFrame;for(let s=0;s<Ds.length&&!hi;++s)hi=window[`${Ds[s]}RequestAnimationFrame`],ks=window[`${Ds[s]}CancelAnimationFrame`]||window[`${Ds[s]}CancelRequestAnimationFrame`];hi||(hi=function(s){let t=new Date().getTime(),e=Math.max(0,16-(t-Kh)),o=window.setTimeout(()=>{s(t+e)},e);return Kh=t+e,o});ks||(ks=function(s){clearTimeout(s)});function io(s){return hi.call(window,s)}function Ge(s){ks.call(window,s)}function ci(){return\"ontouchstart\"in window}function gn(){let s=document.createElement(\"div\");return!!(s.createShadowRoot&&s.createShadowRoot.toString().match(/\\[native code\\]/))}var pn;function Nf(){let s=document.createElement(\"TABLE\");s.style.borderSpacing=\"0\",s.style.borderWidth=\"0\",s.style.padding=\"0\";let t=document.createElement(\"TBODY\");s.appendChild(t),t.appendChild(document.createElement(\"TR\")),t.firstChild.appendChild(document.createElement(\"TD\")),t.firstChild.firstChild.innerHTML=\"<tr><td>t<br>t</td></tr>\";let e=document.createElement(\"CAPTION\");e.innerHTML=\"c<br>c<br>c<br>c\",e.style.padding=\"0\",e.style.margin=\"0\",s.insertBefore(e,t),document.body.appendChild(s),pn=s.offsetHeight<2*s.lastChild.offsetHeight,document.body.removeChild(s)}function Is(){return pn===void 0&&Nf(),pn}var Uo;function Lf(s,t={}){return Uo||(typeof Intl==\"object\"?Uo=new Intl.Collator(s,t).compare:typeof String.prototype.localeCompare==\"function\"?Uo=(e,o)=>`${e}`.localeCompare(o):Uo=(e,o)=>e===o?0:e>o?-1:1,Uo)}function Rn(s,t=0){let e=-1,o=null,i=s;for(;i!==null;){if(e===t){o=i;break}i.host&&i.nodeType===Node.DOCUMENT_FRAGMENT_NODE?i=i.host:(e+=1,i=i.parentNode)}return o}function Ie(s,t,e){let o=s;for(;o!==null&&o!==e;){if(o.nodeType===Node.ELEMENT_NODE&&(t.indexOf(o.nodeName)>-1||t.indexOf(o)>-1))return o;o.host&&o.nodeType===Node.DOCUMENT_FRAGMENT_NODE?o=o.host:o=o.parentNode}return null}function zo(s,t,e){let o=[],i=s;for(;i&&(i=Ie(i,t,e),!(!i||e&&!e.contains(i)));)o.push(i),i.host&&i.nodeType===Node.DOCUMENT_FRAGMENT_NODE?i=i.host:i=i.parentNode;let r=o.length;return r?o[r-1]:null}function se(s,t){let e=s.parentNode,o=[];for(typeof t==\"string\"?o=Array.prototype.slice.call(document.querySelectorAll(t),0):o.push(t);e!==null;){if(o.indexOf(e)>-1)return!0;e=e.parentNode}return!1}function Tn(s){let t=\"hot-table\",e=!1,o=ui(s);function i(r){return r.nodeType===Node.ELEMENT_NODE&&r.nodeName===t.toUpperCase()}for(;o!==null;){if(i(o)){e=!0;break}else if(o.host&&o.nodeType===Node.DOCUMENT_FRAGMENT_NODE){if(e=i(o.host),e)break;o=o.host}o=o.parentNode}return e}function ui(s){return typeof Polymer<\"u\"&&typeof wrap==\"function\"?wrap(s):s}function Qh(s){return typeof Polymer<\"u\"&&typeof unwrap==\"function\"?unwrap(s):s}function bn(s){let t=0,e=s;if(e.previousSibling)for(;e=e.previousSibling;)t+=1;return t}function $o(s,t){let e=document.querySelector(`.ht_clone_${s}`);return e?e.contains(t):null}var xf=!!document.documentElement.classList,yn,En,Sn;function qh(s){let t=[];if(!s||!s.length)return t;let e=0;for(;s[e];)t.push(s[e]),e+=1;return t}if(xf){let s=(function(){let t=document.createElement(\"div\");return t.classList.add(\"test\",\"test2\"),t.classList.contains(\"test2\")})();yn=function(t,e){return t.classList===void 0||typeof e!=\"string\"||e===\"\"?!1:t.classList.contains(e)},En=function(t,e){let o=e;if(typeof o==\"string\"&&(o=o.split(\" \")),o=qh(o),o.length>0)if(s)t.classList.add(...o);else{let i=0;for(;o&&o[i];)t.classList.add(o[i]),i+=1}},Sn=function(t,e){let o=e;if(typeof o==\"string\"&&(o=o.split(\" \")),o=qh(o),o.length>0)if(s)t.classList.remove(...o);else{let i=0;for(;o&&o[i];)t.classList.remove(o[i]),i+=1}}}else{let s=function(t){return new RegExp(`(\\\\s|^)${t}(\\\\s|$)`)};yn=function(t,e){return t.className!==void 0&&s(e).test(t.className)},En=function(t,e){let o=0,i=t.className,r=e;if(typeof r==\"string\"&&(r=r.split(\" \")),i===\"\")i=r.join(\" \");else for(;r&&r[o];)s(r[o]).test(i)||(i+=` ${r[o]}`),o+=1;t.className=i},Sn=function(t,e){let o=0,i=t.className,r=e;for(typeof r==\"string\"&&(r=r.split(\" \"));r&&r[o];)i=i.replace(s(r[o]),\" \").trim(),o+=1;t.className!==i&&(t.className=i)}}function z(s,t){return yn(s,t)}function L(s,t){return En(s,t)}function Y(s,t){return Sn(s,t)}function Ps(s,t){if(s.nodeType===3)t.removeChild(s);else if([\"TABLE\",\"THEAD\",\"TBODY\",\"TFOOT\",\"TR\"].indexOf(s.nodeName)>-1){let e=s.childNodes;for(let o=e.length-1;o>=0;o--)Ps(e[o],s)}}function xt(s){let t;for(;t=s.lastChild;)s.removeChild(t)}var Jh=/(<(.*)>|&(.*);)/;function Te(s,t){Jh.test(t)?s.innerHTML=t:Pe(s,t)}var _f=!!document.createTextNode(\"test\").textContent;function Pe(s,t){let e=s.firstChild;e&&e.nodeType===3&&e.nextSibling===null?_f?e.textContent=t:e.data=t:(xt(s),s.appendChild(document.createTextNode(t)))}function Xe(s){let t=s;for(;Qh(t)!==document.documentElement;){if(t===null)return!1;if(t.nodeType===Node.DOCUMENT_FRAGMENT_NODE)if(t.host){if(t.host.impl)return Xe(t.host.impl);if(t.host)return Xe(t.host);throw new Error(\"Lost in Web Components world\")}else return!1;else if(t.style.display===\"none\")return!1;t=t.parentNode}return!0}function rt(s){let t=document.documentElement,e=s,o,i,r,n;if(Is()&&e.firstChild&&e.firstChild.nodeName===\"CAPTION\")return n=e.getBoundingClientRect(),{top:n.top+(window.pageYOffset||t.scrollTop)-(t.clientTop||0),left:n.left+(window.pageXOffset||t.scrollLeft)-(t.clientLeft||0)};for(o=e.offsetLeft,i=e.offsetTop,r=e;(e=e.offsetParent)&&e!==document.body;)o+=e.offsetLeft,i+=e.offsetTop,r=e;return r&&r.style.position===\"fixed\"&&(o+=window.pageXOffset||t.scrollLeft,i+=window.pageYOffset||t.scrollTop),{left:o,top:i}}function fe(){let s=window.scrollY;return s===void 0&&(s=document.documentElement.scrollTop),s}function qt(){let s=window.scrollX;return s===void 0&&(s=document.documentElement.scrollLeft),s}function so(s){return s===window?fe():s.scrollTop}function Yo(s){return s===window?qt():s.scrollLeft}function be(s){let t=[\"auto\",\"scroll\"],e=s.parentNode,o,i,r,n=\"\",l=\"\",a=\"\",h=\"\";for(;e&&e.style&&document.body!==e;){if(o=e.style.overflow,i=e.style.overflowX,r=e.style.overflowY,o===\"scroll\"||i===\"scroll\"||r===\"scroll\")return e;if(window.getComputedStyle&&(n=window.getComputedStyle(e),l=n.getPropertyValue(\"overflow\"),a=n.getPropertyValue(\"overflow-y\"),h=n.getPropertyValue(\"overflow-x\"),l===\"scroll\"||h===\"scroll\"||a===\"scroll\")||e.clientHeight<=e.scrollHeight+1&&(t.indexOf(r)!==-1||t.indexOf(o)!==-1||t.indexOf(l)!==-1||t.indexOf(a)!==-1)||e.clientWidth<=e.scrollWidth+1&&(t.indexOf(i)!==-1||t.indexOf(o)!==-1||t.indexOf(l)!==-1||t.indexOf(h)!==-1))return e;e=e.parentNode}return window}function Be(s){let t=s.parentNode;for(;t&&t.style&&document.body!==t;){if(t.style.overflow!==\"visible\"&&t.style.overflow!==\"\")return t;let e=je(t),o=[\"scroll\",\"hidden\",\"auto\"],i=e.getPropertyValue(\"overflow\"),r=e.getPropertyValue(\"overflow-y\"),n=e.getPropertyValue(\"overflow-x\");if(o.includes(i)||o.includes(r)||o.includes(n))return t;t=t.parentNode}return window}function Go(s,t){if(s){if(s===window)return t===\"width\"?window.innerWidth+\"px\":t===\"height\"?window.innerHeight+\"px\":void 0}else return;var e=s.style[t],o;if(e!==\"\"&&e!==void 0)return e;if(o=je(s),o[t]!==\"\"&&o[t]!==void 0)return o[t]}function je(s){return s.currentStyle||document.defaultView.getComputedStyle(s)}function st(s){return s.offsetWidth}function lt(s){return Is()&&s.firstChild&&s.firstChild.nodeName===\"CAPTION\"?s.offsetHeight+s.firstChild.offsetHeight:s.offsetHeight}function Qt(s){return s.clientHeight||s.innerHeight}function ve(s){return s.clientWidth||s.innerWidth}function Df(s,t,e){window.addEventListener?s.addEventListener(t,e,!1):s.attachEvent(\"on\"+t,e)}function kf(s,t,e){window.removeEventListener?s.removeEventListener(t,e,!1):s.detachEvent(\"on\"+t,e)}function di(s){if(s.selectionStart)return s.selectionStart;if(document.selection){s.focus();let t=document.selection.createRange();if(t==null)return 0;let e=s.createTextRange(),o=e.duplicate();return e.moveToBookmark(t.getBookmark()),o.setEndPoint(\"EndToStart\",e),o.text.length}return 0}function vn(s){if(s.selectionEnd)return s.selectionEnd;if(document.selection){let t=document.selection.createRange();return t==null?0:s.createTextRange().text.indexOf(t.text)+t.text.length}return 0}function On(){let s=\"\";return window.getSelection?s=window.getSelection().toString():document.selection&&document.selection.type!==\"Control\"&&(s=document.selection.createRange().text),s}function ro(s,t,e){if(e===void 0&&(e=t),s.setSelectionRange){s.focus();try{s.setSelectionRange(t,e)}catch{let i=s.parentNode,r=i.style.display;i.style.display=\"block\",s.setSelectionRange(t,e),i.style.display=r}}else if(s.createTextRange){let o=s.createTextRange();o.collapse(!0),o.moveEnd(\"character\",e),o.moveStart(\"character\",t),o.select()}}var Cn;function If(){let s=document.createElement(\"div\");s.style.height=\"200px\",s.style.width=\"100%\";let t=document.createElement(\"div\");t.style.boxSizing=\"content-box\",t.style.height=\"150px\",t.style.left=\"0px\",t.style.overflow=\"hidden\",t.style.position=\"absolute\",t.style.top=\"0px\",t.style.width=\"200px\",t.style.visibility=\"hidden\",t.appendChild(s),(document.body||document.documentElement).appendChild(t);let e=s.offsetWidth;t.style.overflow=\"scroll\";let o=s.offsetWidth;return e==o&&(o=t.clientWidth),(document.body||document.documentElement).removeChild(t),e-o}function at(){return Cn===void 0&&(Cn=If()),Cn}function Mn(s){return s.offsetWidth!==s.clientWidth}function Hn(s){return s.offsetHeight!==s.clientHeight}function Eo(s,t,e){un()||dn()?(s.style.top=e,s.style.left=t):fn()?s.style[\"-webkit-transform\"]=\"translate3d(\"+t+\",\"+e+\",0)\":s.style.transform=\"translate3d(\"+t+\",\"+e+\",0)\"}function re(s){let t;return s.style.transform&&(t=s.style.transform)!==\"\"?[\"transform\",t]:s.style[\"-webkit-transform\"]&&(t=s.style[\"-webkit-transform\"])!==\"\"?[\"-webkit-transform\",t]:-1}function Gt(s){s.style.transform&&s.style.transform!==\"\"?s.style.transform=\"\":s.style[\"-webkit-transform\"]&&s.style[\"-webkit-transform\"]!==\"\"&&(s.style[\"-webkit-transform\"]=\"\")}function fi(s){return s&&([\"INPUT\",\"SELECT\",\"TEXTAREA\"].indexOf(s.nodeName)>-1||s.contentEditable===\"true\")}function An(s){return fi(s)&&s.className.indexOf(\"handsontableInput\")==-1&&s.className.indexOf(\"copyPaste\")==-1}var Ln={};It(Ln,{isImmediatePropagationStopped:()=>Jt,isLeftClick:()=>mi,isRightClick:()=>ao,pageX:()=>no,pageY:()=>lo,stopImmediatePropagation:()=>pt,stopPropagation:()=>bt});function pt(s){s.isImmediatePropagationEnabled=!1,s.cancelBubble=!0}function Jt(s){return s.isImmediatePropagationEnabled===!1}function bt(s){typeof s.stopPropagation==\"function\"?s.stopPropagation():s.cancelBubble=!0}function no(s){return s.pageX?s.pageX:s.clientX+qt()}function lo(s){return s.pageY?s.pageY:s.clientY+fe()}function ao(s){return s.button===2}function mi(s){return s.button===0}var xn=0,Bs=class{constructor(t=null){this.context=t||this,this.context.eventListeners||(this.context.eventListeners=[])}addEventListener(t,e,o){let i=this.context;function r(n){o.call(this,Pf(i,n))}return this.context.eventListeners.push({element:t,event:e,callback:o,callbackProxy:r}),t.addEventListener(e,r,!1),xn+=1,()=>{this.removeEventListener(t,e,o)}}removeEventListener(t,e,o){let i=this.context.eventListeners.length,r;for(;i;)if(i-=1,r=this.context.eventListeners[i],r.event===e&&r.element===t){if(o&&o!==r.callback)continue;this.context.eventListeners.splice(i,1),r.element.removeEventListener(r.event,r.callbackProxy,!1),xn-=1}}clearEvents(){if(!this.context)return;let t=this.context.eventListeners.length;for(;t;){t-=1;let e=this.context.eventListeners[t];e&&this.removeEventListener(e.element,e.event,e.callback)}}clear(){this.clearEvents()}destroy(){this.clearEvents(),this.context=null}fireEvent(t,e){let o={bubbles:!0,cancelable:e!==\"mousemove\",view:window,detail:0,screenX:0,screenY:0,clientX:1,clientY:1,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:void 0},i;document.createEvent?(i=document.createEvent(\"MouseEvents\"),i.initMouseEvent(e,o.bubbles,o.cancelable,o.view,o.detail,o.screenX,o.screenY,o.clientX,o.clientY,o.ctrlKey,o.altKey,o.shiftKey,o.metaKey,o.button,o.relatedTarget||document.body.parentNode)):i=document.createEventObject(),t.dispatchEvent?t.dispatchEvent(i):t.fireEvent(`on${e}`,i)}};function Pf(s,t){let e=\"HOT-TABLE\",o,i,r,n,l;t.isTargetWebComponent=!1,t.realTarget=t.target;let a=t.stopImmediatePropagation;if(t.stopImmediatePropagation=function(){a.apply(this),pt(this)},!Bs.isHotTableEnv)return t;for(t=ui(t),l=t.path?t.path.length:0;l;){if(l-=1,t.path[l].nodeName===e)o=!0;else if(o&&t.path[l].shadowRoot){n=t.path[l];break}l===0&&!n&&(n=t.path[l])}return n||(n=t.target),t.isTargetWebComponent=!0,gn()?t.realTarget=t.srcElement||t.toElement:(ot(s,\"hot\")||s.isHotTableEnv||s.wtTable)&&(ot(s,\"hot\")?i=s.hot?s.hot.view.wt.wtTable.TABLE:null:s.isHotTableEnv?i=s.view.activeWt.wtTable.TABLE.parentNode.parentNode:s.wtTable&&(i=s.wtTable.TABLE.parentNode.parentNode),r=Ie(t.target,[e],i),r?t.realTarget=i.querySelector(e)||t.target:t.realTarget=t.target),Object.defineProperty(t,\"target\",{get(){return ui(n)},enumerable:!0,configurable:!0}),t}var G=Bs;function Zh(){return xn}var In={};It(In,{equalsIgnoreCase:()=>Fs,isPercentValue:()=>yi,randomString:()=>Ci,stripTags:()=>Vs,substitute:()=>Uf,toUpperCaseFirst:()=>Oe});var kn={};It(kn,{_injectProductInfo:()=>Ff,isDefined:()=>mt,isEmpty:()=>Bt,isRegExp:()=>Dn,isUndefined:()=>gt,stringify:()=>ne});So();function Vt(s,...t){return Tt(s,(o,i,r)=>{let n=i.replace(/(?:\\r?\\n\\s+)/g,\"\"),l=t[r]?t[r]:\"\";return o+n+l},\"\").trim()}function ne(s){let t;switch(typeof s){case\"string\":case\"number\":t=`${s}`;break;case\"object\":t=s===null?\"\":s.toString();break;case\"undefined\":t=\"\";break;default:t=s.toString();break}return t}function mt(s){return typeof s<\"u\"}function gt(s){return typeof s>\"u\"}function Bt(s){return s===null||s===\"\"||gt(s)}function Dn(s){return Object.prototype.toString.call(s)===\"[object RegExp]\"}var pi=\"length\",gi=s=>parseInt(s,16),ec=s=>parseInt(s,10),Ws=(s,t,e)=>s.substr(t,e),wi=s=>s.codePointAt(0)-65,_n=s=>`${s}`.replace(/\\-/g,\"\"),Bf=s=>gi(Ws(_n(s),gi(\"12\"),wi(\"F\")))/(gi(Ws(_n(s),wi(\"B\"),~~![][pi]))||9),Wf=()=>typeof location<\"u\"&&/^([a-z0-9\\-]+\\.)?\\x68\\x61\\x6E\\x64\\x73\\x6F\\x6E\\x74\\x61\\x62\\x6C\\x65\\x2E\\x63\\x6F\\x6D$/i.test(location.host),oc=!1;function Ff(s,t){s=_n(s||\"\");let e=\"\",o=!0,i=Vf(s),r=Wf(),n=Bt(s)||s===\"trial\";if(n||i)if(i){let l=Math.floor(St(\"2026-03-15T04:32:27.453Z\",\"DD/MM/YYYY\").toDate().getTime()/864e5),a=Bf(s);(a>45e3||a!==parseInt(a,10))&&(e=\"The license key provided to Handsontable Pro is invalid. Make sure you pass it correctly.\"),e||(l>a+1&&(e=Vt`\n          Your license key of Handsontable Pro has expired.‌‌‌‌ \n          Renew your maintenance plan at https://handsontable.com or downgrade to the previous version of the software.\n          `),o=l>a+15)}else e=\"Evaluation version of Handsontable Pro. Not licensed for use in a production environment.\";else e=\"The license key provided to Handsontable Pro is invalid. Make sure you pass it correctly.\";if(r&&(e=!1,o=!1),e&&!oc&&(console[n?\"info\":\"warn\"](e),oc=!0),o&&t.parentNode){let l=document.createElement(\"div\");l.id=\"hot-display-license-info\",l.appendChild(document.createTextNode(\"Evaluation version of Handsontable Pro.\")),l.appendChild(document.createElement(\"br\")),l.appendChild(document.createTextNode(\"Not licensed for production use.\")),t.parentNode.insertBefore(l,t.nextSibling)}}function Vf(s){let t=[][pi],e=t;if(s[pi]!==wi(\"Z\"))return!1;for(let o=\"\",i=\"B<H4P+\".split(\"\"),r=wi(i.shift());r;r=wi(i.shift()||\"A\"))--r<\"\"[pi]?e=e|(ec(`${ec(gi(o)+(gi(Ws(s,Math.abs(r),2))+[]).padStart(2,\"0\"))}`)%97||2)>>1:o=Ws(s,r,r?i[pi]===1?9:8:6);return e===t}function Oe(s){return s[0].toUpperCase()+s.substr(1)}function Fs(...s){let t=[],e=s.length;for(;e;){e-=1;let o=ne(s[e]).toLowerCase();t.indexOf(o)===-1&&t.push(o)}return t.length===1}function Ci(){function s(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}return s()+s()+s()+s()}function yi(s){return/^([0-9][0-9]?%$)|(^100%$)/.test(s)}function Uf(s,t={}){return`${s}`.replace(/(?:\\\\)?\\[([^[\\]]+)]/g,(e,o)=>e.charAt(0)===\"\\\\\"?e.substr(1,e.length-1):t[o]===void 0?\"\":t[o])}var zf=/<\\/?\\w+\\/?>|<\\w+[\\s|/][^>]*>/gi;function Vs(s){return`${s}`.replace(zf,\"\")}var Pn={};It(Pn,{curry:()=>Gf,curryRight:()=>Xf,debounce:()=>Ei,isFunction:()=>At,partial:()=>Si,pipe:()=>Yf,throttle:()=>ic,throttleAfterHits:()=>$f});function At(s){return typeof s==\"function\"}function ic(s,t=200){let e=0,o={lastCallThrottled:!0},i=null;function r(...n){let l=Date.now(),a=!1;o.lastCallThrottled=!0,e||(e=l,a=!0);let h=t-(l-e);return a?(o.lastCallThrottled=!1,s.apply(this,n)):(i&&clearTimeout(i),i=setTimeout(()=>{o.lastCallThrottled=!1,s.apply(this,n),e=0,i=void 0},h)),o}return r}function $f(s,t=200,e=10){let o=ic(s,t),i=e;function r(){i=e}function n(...l){return i?(i-=1,s.apply(this,l)):o.apply(this,l)}return n.clearHits=r,n}function Ei(s,t=200){let e=null,o;function i(...r){return e&&clearTimeout(e),e=setTimeout(()=>{o=s.apply(this,r)},t),o}return i}function Yf(...s){let[t,...e]=s;return function(...i){return Tt(e,(r,n)=>n(r),t.apply(this,i))}}function Si(s,...t){return function(...o){return s.apply(this,t.concat(o))}}function Gf(s){let t=s.length;function e(o){return function(...r){let n=o.concat(r),l;return n.length>=t?l=s.apply(this,n):l=e(n),l}}return e([])}function Xf(s){let t=s.length;function e(o){return function(...r){let n=o.concat(r.reverse()),l;return n.length>=t?l=s.apply(this,n):l=e(n),l}}return e([])}var Xo=new WeakMap,Bn=class{constructor(t){this.instance=t,this.eventManager=new G(t),Xo.set(this,{selectedCellBeforeTouchEnd:void 0,dblClickTimeout:[null,null],dblClickOrigin:[null,null]}),this.registerEvents()}registerEvents(){this.eventManager.addEventListener(this.instance.wtTable.holder,\"contextmenu\",o=>this.onContextMenu(o)),this.eventManager.addEventListener(this.instance.wtTable.TABLE,\"mouseover\",o=>this.onMouseOver(o)),this.eventManager.addEventListener(this.instance.wtTable.TABLE,\"mouseout\",o=>this.onMouseOut(o));let t=()=>{this.eventManager.addEventListener(this.instance.wtTable.holder,\"touchstart\",o=>this.onTouchStart(o)),this.eventManager.addEventListener(this.instance.wtTable.holder,\"touchend\",o=>this.onTouchEnd(o)),this.instance.momentumScrolling||(this.instance.momentumScrolling={}),this.eventManager.addEventListener(this.instance.wtTable.holder,\"scroll\",()=>{clearTimeout(this.instance.momentumScrolling._timeout),this.instance.momentumScrolling.ongoing||this.instance.getSetting(\"onBeforeTouchScroll\"),this.instance.momentumScrolling.ongoing=!0,this.instance.momentumScrolling._timeout=setTimeout(()=>{this.instance.touchApplied||(this.instance.momentumScrolling.ongoing=!1,this.instance.getSetting(\"onAfterMomentumScroll\"))},200)})},e=()=>{this.eventManager.addEventListener(this.instance.wtTable.holder,\"mouseup\",o=>this.onMouseUp(o)),this.eventManager.addEventListener(this.instance.wtTable.holder,\"mousedown\",o=>this.onMouseDown(o))};$t()?t():(ci()&&t(),e()),this.eventManager.addEventListener(window,\"resize\",()=>{if(this.instance.getSetting(\"stretchH\")!==\"none\"){if(this.instance.wtTable.holder.offsetParent===null)return;this.instance.draw()}})}selectedCellWasTouched(t){let e=Xo.get(this),i=this.parentCell(t).coords;if(e.selectedCellBeforeTouchEnd&&i){let[r,n]=[i.row,e.selectedCellBeforeTouchEnd.from.row],[l,a]=[i.col,e.selectedCellBeforeTouchEnd.from.col];return r===n&&l===a}return!1}parentCell(t){let e={},o=this.instance.wtTable.TABLE,i=zo(t,[\"TD\",\"TH\"],o);return i?(e.coords=this.instance.wtTable.getCoords(i),e.TD=i):z(t,\"wtBorder\")&&z(t,\"current\")?(e.coords=this.instance.selections.getCell().cellRange.highlight,e.TD=this.instance.wtTable.getCell(e.coords)):z(t,\"wtBorder\")&&z(t,\"area\")&&this.instance.selections.createOrGetArea().cellRange&&(e.coords=this.instance.selections.createOrGetArea().cellRange.to,e.TD=this.instance.wtTable.getCell(e.coords)),e}onMouseDown(t){let e=Xo.get(this),o=document.activeElement,i=Si(Rn,t.realTarget),r=t.realTarget;if(r===o||i(0)===o||i(1)===o)return;let n=this.parentCell(r);z(r,\"corner\")?this.instance.getSetting(\"onCellCornerMouseDown\",t,r):n.TD&&this.instance.hasSetting(\"onCellMouseDown\")&&this.instance.getSetting(\"onCellMouseDown\",t,n.coords,n.TD,this.instance),t.button!==2&&n.TD&&(e.dblClickOrigin[0]=n.TD,clearTimeout(e.dblClickTimeout[0]),e.dblClickTimeout[0]=setTimeout(()=>{e.dblClickOrigin[0]=null},1e3))}onContextMenu(t){if(this.instance.hasSetting(\"onCellContextMenu\")){let e=this.parentCell(t.realTarget);e.TD&&this.instance.getSetting(\"onCellContextMenu\",t,e.coords,e.TD,this.instance)}}onMouseOver(t){if(!this.instance.hasSetting(\"onCellMouseOver\"))return;let e=this.instance.wtTable.TABLE,o=zo(t.realTarget,[\"TD\",\"TH\"],e),i=this.instance.cloneSource||this.instance;o&&o!==i.lastMouseOver&&se(o,e)&&(i.lastMouseOver=o,this.instance.getSetting(\"onCellMouseOver\",t,this.instance.wtTable.getCoords(o),o,this.instance))}onMouseOut(t){if(!this.instance.hasSetting(\"onCellMouseOut\"))return;let e=this.instance.wtTable.TABLE,o=zo(t.realTarget,[\"TD\",\"TH\"],e),i=zo(t.relatedTarget,[\"TD\",\"TH\"],e);o&&o!==i&&se(o,e)&&this.instance.getSetting(\"onCellMouseOut\",t,this.instance.wtTable.getCoords(o),o,this.instance)}onMouseUp(t){if(t.button===2)return;let e=Xo.get(this),o=this.parentCell(t.realTarget);o.TD&&this.instance.hasSetting(\"onCellMouseUp\")&&this.instance.getSetting(\"onCellMouseUp\",t,o.coords,o.TD,this.instance),o.TD===e.dblClickOrigin[0]&&o.TD===e.dblClickOrigin[1]?(z(t.realTarget,\"corner\")?this.instance.getSetting(\"onCellCornerDblClick\",t,o.coords,o.TD,this.instance):this.instance.getSetting(\"onCellDblClick\",t,o.coords,o.TD,this.instance),e.dblClickOrigin[0]=null,e.dblClickOrigin[1]=null):o.TD===e.dblClickOrigin[0]&&(e.dblClickOrigin[1]=o.TD,clearTimeout(e.dblClickTimeout[1]),e.dblClickTimeout[1]=setTimeout(()=>{e.dblClickOrigin[1]=null},500))}onTouchStart(t){let e=Xo.get(this);e.selectedCellBeforeTouchEnd=this.instance.selections.getCell().cellRange,this.instance.touchApplied=!0,this.onMouseDown(t)}onTouchEnd(t){let e=[\"A\",\"BUTTON\",\"INPUT\"],o=t.target;this.instance.touchApplied=!1,this.selectedCellWasTouched(o)===!1&&e.includes(o.tagName)&&t.preventDefault(),this.onMouseUp(t)}destroy(){let t=Xo.get(this);clearTimeout(t.dblClickTimeout[0]),clearTimeout(t.dblClickTimeout[1]),this.eventManager.destroy()}},Us=Bn;var Fn={};It(Fn,{KEY_CODES:()=>k,isCtrlKey:()=>jf,isCtrlMetaKey:()=>Ti,isKey:()=>jo,isMetaKey:()=>Ri,isPrintableChar:()=>Wn});var k={MOUSE_LEFT:1,MOUSE_RIGHT:3,MOUSE_MIDDLE:2,BACKSPACE:8,COMMA:188,INSERT:45,DELETE:46,END:35,ENTER:13,ESCAPE:27,CONTROL:17,COMMAND_LEFT:91,COMMAND_RIGHT:93,COMMAND_FIREFOX:224,ALT:18,HOME:36,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,SPACE:32,SHIFT:16,CAPS_LOCK:20,TAB:9,ARROW_RIGHT:39,ARROW_LEFT:37,ARROW_UP:38,ARROW_DOWN:40,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,A:65,C:67,D:68,F:70,L:76,O:79,P:80,S:83,V:86,X:88};function Wn(s){return s===32||s>=48&&s<=57||s>=96&&s<=111||s>=186&&s<=192||s>=219&&s<=222||s>=226||s>=65&&s<=90}function Ri(s){return[k.ARROW_DOWN,k.ARROW_UP,k.ARROW_LEFT,k.ARROW_RIGHT,k.HOME,k.END,k.DELETE,k.BACKSPACE,k.F1,k.F2,k.F3,k.F4,k.F5,k.F6,k.F7,k.F8,k.F9,k.F10,k.F11,k.F12,k.TAB,k.PAGE_DOWN,k.PAGE_UP,k.ENTER,k.ESCAPE,k.SHIFT,k.CAPS_LOCK,k.ALT].indexOf(s)!==-1}function jf(s){let t=[];return window.navigator.platform.includes(\"Mac\")?t.push(k.COMMAND_LEFT,k.COMMAND_RIGHT,k.COMMAND_FIREFOX):t.push(k.CONTROL),t.includes(s)}function Ti(s){return[k.CONTROL,k.COMMAND_LEFT,k.COMMAND_RIGHT,k.COMMAND_FIREFOX].includes(s)}function jo(s,t){let e=t.split(\"|\"),o=!1;return v(e,i=>{if(s===k[i])return o=!0,!1}),o}var Vn=class{constructor(t){let e=parseInt(getComputedStyle(document.body).lineHeight,10),o=parseInt(getComputedStyle(document.body).fontSize,10)*1.2;this.wot=t,this.instance=this.wot,this.eventManager=new G(this.wot),this.wot.update(\"scrollbarWidth\",at()),this.wot.update(\"scrollbarHeight\",at()),this.scrollableElement=be(this.wot.wtTable.TABLE),this.prepareOverlays(),this.destroyed=!1,this.keyPressed=!1,this.spreaderLastSize={width:null,height:null},this.overlayScrollPositions={master:{top:0,left:0},top:{top:null,left:0},bottom:{top:null,left:0},left:{top:0,left:null}},this.pendingScrollCallbacks={master:{top:0,left:0},top:{left:0},bottom:{left:0},left:{top:0}},this.verticalScrolling=!1,this.horizontalScrolling=!1,this.delegatedScrollCallback=!1,this.registeredListeners=[],this.browserLineHeight=e||o,this.registerListeners()}prepareOverlays(){let t=!1;return this.topOverlay?t=this.topOverlay.updateStateOfRendering()||t:this.topOverlay=I.createOverlay(I.CLONE_TOP,this.wot),I.hasOverlay(I.CLONE_BOTTOM)||(this.bottomOverlay={needFullRender:!1,updateStateOfRendering:()=>!1}),I.hasOverlay(I.CLONE_BOTTOM_LEFT_CORNER)||(this.bottomLeftCornerOverlay={needFullRender:!1,updateStateOfRendering:()=>!1}),this.bottomOverlay?t=this.bottomOverlay.updateStateOfRendering()||t:this.bottomOverlay=I.createOverlay(I.CLONE_BOTTOM,this.wot),this.leftOverlay?t=this.leftOverlay.updateStateOfRendering()||t:this.leftOverlay=I.createOverlay(I.CLONE_LEFT,this.wot),this.topOverlay.needFullRender&&this.leftOverlay.needFullRender&&(this.topLeftCornerOverlay?t=this.topLeftCornerOverlay.updateStateOfRendering()||t:this.topLeftCornerOverlay=I.createOverlay(I.CLONE_TOP_LEFT_CORNER,this.wot)),this.bottomOverlay.needFullRender&&this.leftOverlay.needFullRender&&(this.bottomLeftCornerOverlay?t=this.bottomLeftCornerOverlay.updateStateOfRendering()||t:this.bottomLeftCornerOverlay=I.createOverlay(I.CLONE_BOTTOM_LEFT_CORNER,this.wot)),this.wot.getSetting(\"debug\")&&!this.debug&&(this.debug=I.createOverlay(I.CLONE_DEBUG,this.wot)),t}refreshAll(){if(this.wot.drawn){if(!this.wot.wtTable.holder.parentNode){this.destroy();return}this.wot.draw(!0),this.verticalScrolling&&this.leftOverlay.onScroll(),this.horizontalScrolling&&this.topOverlay.onScroll(),this.verticalScrolling=!1,this.horizontalScrolling=!1}}registerListeners(){let t=this.topOverlay.mainTableScrollableElement,e=this.leftOverlay.mainTableScrollableElement,o=[];for(o.push([document.documentElement,\"keydown\",r=>this.onKeyDown(r)]),o.push([document.documentElement,\"keyup\",()=>this.onKeyUp()]),o.push([document,\"visibilitychange\",()=>this.onKeyUp()]),o.push([t,\"scroll\",r=>this.onTableScroll(r)]),t!==e&&o.push([e,\"scroll\",r=>this.onTableScroll(r)]),window.devicePixelRatio&&window.devicePixelRatio>1||!cn()?o.push([this.instance.wtTable.wtRootElement.parentNode,\"wheel\",r=>this.onCloneWheel(r)]):(this.topOverlay.needFullRender&&o.push([this.topOverlay.clone.wtTable.holder,\"wheel\",r=>this.onCloneWheel(r)]),this.bottomOverlay.needFullRender&&o.push([this.bottomOverlay.clone.wtTable.holder,\"wheel\",r=>this.onCloneWheel(r)]),this.leftOverlay.needFullRender&&o.push([this.leftOverlay.clone.wtTable.holder,\"wheel\",r=>this.onCloneWheel(r)]),this.topLeftCornerOverlay&&this.topLeftCornerOverlay.needFullRender&&o.push([this.topLeftCornerOverlay.clone.wtTable.holder,\"wheel\",r=>this.onCloneWheel(r)]),this.bottomLeftCornerOverlay&&this.bottomLeftCornerOverlay.needFullRender&&o.push([this.bottomLeftCornerOverlay.clone.wtTable.holder,\"wheel\",r=>this.onCloneWheel(r)])),this.topOverlay.trimmingContainer!==window&&this.leftOverlay.trimmingContainer!==window&&o.push([window,\"wheel\",r=>{let n,l=r.wheelDeltaY||r.deltaY,a=r.wheelDeltaX||r.deltaX;this.topOverlay.clone.wtTable.holder.contains(r.realTarget)?n=\"top\":this.bottomOverlay.clone&&this.bottomOverlay.clone.wtTable.holder.contains(r.realTarget)?n=\"bottom\":this.leftOverlay.clone.wtTable.holder.contains(r.realTarget)?n=\"left\":this.topLeftCornerOverlay&&this.topLeftCornerOverlay.clone&&this.topLeftCornerOverlay.clone.wtTable.holder.contains(r.realTarget)?n=\"topLeft\":this.bottomLeftCornerOverlay&&this.bottomLeftCornerOverlay.clone&&this.bottomLeftCornerOverlay.clone.wtTable.holder.contains(r.realTarget)&&(n=\"bottomLeft\"),(n===\"top\"&&l!==0||n===\"left\"&&a!==0||n===\"bottom\"&&l!==0||(n===\"topLeft\"||n===\"bottomLeft\")&&(l!==0||a!==0))&&r.preventDefault()}]);o.length;){let r=o.pop();this.eventManager.addEventListener(r[0],r[1],r[2]),this.registeredListeners.push(r)}}deregisterListeners(){for(;this.registeredListeners.length;){let t=this.registeredListeners.pop();this.eventManager.removeEventListener(t[0],t[1],t[2])}}onTableScroll(t){let e=this.leftOverlay.mainTableScrollableElement,o=this.topOverlay.mainTableScrollableElement,i=t.target;this.keyPressed&&(o!==window&&i!==window&&!t.target.contains(o)||e!==window&&i!==window&&!t.target.contains(e))||this.syncScrollPositions(t)}onCloneWheel(t){this.scrollableElement!==window&&t.preventDefault();let e=this.leftOverlay.mainTableScrollableElement,o=this.topOverlay.mainTableScrollableElement,i=t.target,r=o!==window&&i!==window&&!t.target.contains(o),n=e!==window&&i!==window&&!t.target.contains(e);this.keyPressed&&(r||n)||this.translateMouseWheelToScroll(t)}onKeyDown(t){this.keyPressed=jo(t.keyCode,\"ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT\")}onKeyUp(){this.keyPressed=!1}translateMouseWheelToScroll(t){let e=isNaN(t.deltaY)?-1*t.wheelDeltaY:t.deltaY,o=isNaN(t.deltaX)?-1*t.wheelDeltaX:t.deltaX;return t.deltaMode===1&&(o+=o*this.browserLineHeight,e+=e*this.browserLineHeight),this.scrollVertically(e),this.scrollHorizontally(o),!1}scrollVertically(t){if(t===0)return 0;this.scrollableElement.scrollTop+=t}scrollHorizontally(t){if(t===0)return 0;this.scrollableElement.scrollLeft+=t}syncScrollPositions(){if(this.destroyed)return;let t=this.topOverlay.clone.wtTable.holder,e=this.leftOverlay.clone.wtTable.holder,[o,i]=[this.scrollableElement.scrollLeft,this.scrollableElement.scrollTop];if(this.horizontalScrolling=t.scrollLeft!==o,this.verticalScrolling=e.scrollTop!==i,this.horizontalScrolling){t.scrollLeft=o;let r=this.bottomOverlay.needFullRender?this.bottomOverlay.clone.wtTable.holder:null;r&&(r.scrollLeft=o)}this.verticalScrolling&&(e.scrollTop=i),this.refreshAll()}syncScrollWithMaster(){let t=this.topOverlay.mainTableScrollableElement,{scrollLeft:e,scrollTop:o}=t;this.topOverlay.needFullRender&&(this.topOverlay.clone.wtTable.holder.scrollLeft=e),this.bottomOverlay.needFullRender&&(this.bottomOverlay.clone.wtTable.holder.scrollLeft=e),this.leftOverlay.needFullRender&&(this.leftOverlay.clone.wtTable.holder.scrollTop=o)}updateMainScrollableElements(){this.deregisterListeners(),this.leftOverlay.updateMainScrollableElement(),this.topOverlay.updateMainScrollableElement(),this.bottomOverlay.needFullRender&&this.bottomOverlay.updateMainScrollableElement(),this.scrollableElement=be(this.wot.wtTable.TABLE),this.registerListeners()}destroy(){this.eventManager.destroy(),this.topOverlay.destroy(),this.bottomOverlay.clone&&this.bottomOverlay.destroy(),this.leftOverlay.destroy(),this.topLeftCornerOverlay&&this.topLeftCornerOverlay.destroy(),this.bottomLeftCornerOverlay&&this.bottomLeftCornerOverlay.clone&&this.bottomLeftCornerOverlay.destroy(),this.debug&&this.debug.destroy(),this.destroyed=!0}refresh(t=!1){if(this.topOverlay.areElementSizesAdjusted&&this.leftOverlay.areElementSizesAdjusted){let e=this.wot.wtTable.wtRootElement.parentNode||this.wot.wtTable.wtRootElement,o=e.clientWidth,i=e.clientHeight;(o!==this.spreaderLastSize.width||i!==this.spreaderLastSize.height)&&(this.spreaderLastSize.width=o,this.spreaderLastSize.height=i,this.adjustElementsSize())}this.bottomOverlay.clone&&this.bottomOverlay.refresh(t),this.leftOverlay.refresh(t),this.topOverlay.refresh(t),this.topLeftCornerOverlay&&this.topLeftCornerOverlay.refresh(t),this.bottomLeftCornerOverlay&&this.bottomLeftCornerOverlay.clone&&this.bottomLeftCornerOverlay.refresh(t),this.debug&&this.debug.refresh(t)}adjustElementsSize(t=!1){let e=this.wot.getSetting(\"totalColumns\"),o=this.wot.getSetting(\"totalRows\"),i=this.wot.wtViewport.getRowHeaderWidth(),r=this.wot.wtViewport.getColumnHeaderHeight(),n=this.wot.wtTable.hider.style;n.width=`${i+this.leftOverlay.sumCellSizes(0,e)}px`,n.height=`${r+this.topOverlay.sumCellSizes(0,o)+1}px`,this.topOverlay.adjustElementsSize(t),this.leftOverlay.adjustElementsSize(t),this.bottomOverlay.clone&&this.bottomOverlay.adjustElementsSize(t)}applyToDOM(){(!this.topOverlay.areElementSizesAdjusted||!this.leftOverlay.areElementSizesAdjusted)&&this.adjustElementsSize(),this.topOverlay.applyToDOM(),this.bottomOverlay.clone&&this.bottomOverlay.applyToDOM(),this.leftOverlay.applyToDOM()}getParentOverlay(t){if(!t)return null;let e=[this.topOverlay,this.leftOverlay,this.bottomOverlay,this.topLeftCornerOverlay,this.bottomLeftCornerOverlay],o=null;return v(e,i=>{i&&i.clone&&i.clone.wtTable.TABLE.contains(t)&&(o=i.clone)}),o}},Un=Vn;var zn={};It(zn,{isNumeric:()=>me,rangeEach:()=>P,rangeEachReverse:()=>Ke,valueAccordingPercent:()=>bi});function me(s){var t=typeof s;return t==\"number\"?!isNaN(s)&&isFinite(s):t==\"string\"?s.length?s.length==1?/\\d/.test(s):/^\\s*[+-]?\\s*(?:(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)|(?:0x[a-f\\d]+))\\s*$/i.test(s):!1:t==\"object\"?!!s&&typeof s.valueOf()==\"number\"&&!(s instanceof Date):!1}function P(s,t,e){let o=-1;for(typeof t==\"function\"?(e=t,t=s):o=s-1;++o<=t&&e(o)!==!1;);}function Ke(s,t,e){let o=s+1;for(typeof t==\"function\"&&(e=t,t=0);--o>=t&&e(o)!==!1;);}function bi(s,t){return t=parseInt(t.toString().replace(\"%\",\"\"),10),t=parseInt(s*t/100,10),t}var $n=class{constructor(t){this.wot=t,this.instance=t}scrollViewport(t,e,o,i,r){let n=this.scrollViewportHorizontally(t.col,o,r),l=this.scrollViewportVertically(t.row,e,i);return n||l}scrollViewportHorizontally(t,e,o){if(!this.wot.drawn)return!1;let{fixedColumnsLeft:i,leftOverlay:r,totalColumns:n}=this._getVariables(),l=!1;return t>=0&&t<=Math.max(n-1,0)&&(t>=i&&(t<this.getFirstVisibleColumn()||o)?l=r.scrollTo(t):(t>this.getLastVisibleColumn()||e)&&(l=r.scrollTo(t,!0))),l}scrollViewportVertically(t,e,o){if(!this.wot.drawn)return!1;let{fixedRowsBottom:i,fixedRowsTop:r,topOverlay:n,totalRows:l}=this._getVariables(),a=!1;return t>=0&&t<=Math.max(l-1,0)&&(t>=r&&(t<this.getFirstVisibleRow()||e)?a=n.scrollTo(t):(t>this.getLastVisibleRow()&&t<l-i||o)&&(a=n.scrollTo(t,!0))),a}getFirstVisibleRow(){let{topOverlay:t,wtTable:e,wtViewport:o,totalRows:i,fixedRowsTop:r}=this._getVariables(),n=e.getFirstVisibleRow();if(t.mainTableScrollableElement===window){let l=rt(e.wtRootElement),a=Qt(e.hider),h=Qt(window),u=so(window);if(l.top+a-h<=u){let m=o.getColumnHeaderHeight();m+=t.sumCellSizes(0,r),Ke(i,1,w=>{if(m+=t.sumCellSizes(w-1,w),l.top+a-m<=u)return n=w,!1})}}return n}getLastVisibleRow(){let{topOverlay:t,wtTable:e,wtViewport:o,totalRows:i}=this._getVariables(),r=e.getLastVisibleRow();if(t.mainTableScrollableElement===window){let n=rt(e.wtRootElement),l=Qt(window),a=so(window);if(n.top>a){let h=o.getColumnHeaderHeight();P(1,i,u=>{if(h+=t.sumCellSizes(u-1,u),n.top+h-a>=l)return r=u-2,!1})}}return r}getFirstVisibleColumn(){let{leftOverlay:t,wtTable:e,wtViewport:o,totalColumns:i}=this._getVariables(),r=e.getFirstVisibleColumn();if(t.mainTableScrollableElement===window){let n=rt(e.wtRootElement),l=ve(e.hider),a=ve(window),h=Yo(window);if(n.left+l-a<=h){let u=o.getRowHeaderWidth();Ke(i,1,m=>{if(u+=t.sumCellSizes(m-1,m),n.left+l-u<=h)return r=m,!1})}}return r}getLastVisibleColumn(){let{leftOverlay:t,wtTable:e,wtViewport:o,totalColumns:i}=this._getVariables(),r=e.getLastVisibleColumn();if(t.mainTableScrollableElement===window){let n=rt(e.wtRootElement),l=ve(window),a=Yo(window);if(n.left>a){let h=o.getRowHeaderWidth();P(1,i,u=>{if(h+=t.sumCellSizes(u-1,u),n.left+h-a>=l)return r=u-2,!1})}}return r}_getVariables(){let t=this.wot,e=t.wtOverlays.topOverlay,o=t.wtOverlays.leftOverlay,i=t.wtTable,r=t.wtViewport,n=t.getSetting(\"totalRows\"),l=t.getSetting(\"totalColumns\"),a=t.getSetting(\"fixedRowsTop\"),h=t.getSetting(\"fixedRowsBottom\"),u=t.getSetting(\"fixedColumnsLeft\");return{topOverlay:e,leftOverlay:o,wtTable:i,wtViewport:r,totalRows:n,totalColumns:l,fixedRowsTop:a,fixedRowsBottom:h,fixedColumnsLeft:u}}},zs=$n;var Yn=class{constructor(t,e){this.wot=t,this.instance=t,this.defaults={table:void 0,debug:!1,externalRowCalculator:!1,stretchH:\"none\",currentRowClassName:null,currentColumnClassName:null,preventOverflow(){return!1},data:void 0,freezeOverlays:!1,fixedColumnsLeft:0,fixedRowsTop:0,fixedRowsBottom:0,minSpareRows:0,rowHeaders(){return[]},columnHeaders(){return[]},totalRows:void 0,totalColumns:void 0,cellRenderer:(o,i,r)=>{let n=this.getSetting(\"data\",o,i);Pe(r,n??\"\")},columnWidth(){},rowHeight(){},defaultRowHeight:23,defaultColumnWidth:50,selections:null,hideBorderOnMouseDownOver:!1,viewportRowCalculatorOverride:null,viewportColumnCalculatorOverride:null,onCellMouseDown:null,onCellContextMenu:null,onCellMouseOver:null,onCellMouseOut:null,onCellMouseUp:null,onCellDblClick:null,onCellCornerMouseDown:null,onCellCornerDblClick:null,beforeDraw:null,onDraw:null,onBeforeRemoveCellClassNames:null,onAfterDrawSelection:null,onBeforeDrawBorders:null,onScrollVertically:null,onScrollHorizontally:null,onBeforeTouchScroll:null,onAfterMomentumScroll:null,onBeforeStretchingColumnWidth:o=>o,onModifyRowHeaderWidth:null,onModifyGetCellCoords:null,scrollbarWidth:10,scrollbarHeight:10,renderAllRows:!1,groups:!1,rowHeaderWidth:null,columnHeaderHeight:null,headerClassName:null},this.settings={},X(this.defaults,(o,i)=>{if(e[i]!==void 0)this.settings[i]=e[i];else{if(o===void 0)throw new Error(`A required setting \"${i}\" was not provided`);this.settings[i]=o}})}update(t,e){return e===void 0?X(t,(o,i)=>{this.settings[i]=o}):this.settings[t]=e,this.wot}getSetting(t,e,o,i,r){return typeof this.settings[t]==\"function\"?this.settings[t](e,o,i,r):e!==void 0&&Array.isArray(this.settings[t])?this.settings[t][e]:this.settings[t]}has(t){return!!this.settings[t]}},Gn=Yn;function pe(...s){mt(console)&&console.warn(...s)}function sc(...s){mt(console)&&console.error(...s)}var rc=!1,Xn=class{constructor(t){this.wtTable=t,this.wot=t.instance,this.instance=t.instance,this.rowFilter=t.rowFilter,this.columnFilter=t.columnFilter,this.TABLE=t.TABLE,this.THEAD=t.THEAD,this.TBODY=t.TBODY,this.COLGROUP=t.COLGROUP,this.rowHeaders=[],this.rowHeaderCount=0,this.columnHeaders=[],this.columnHeaderCount=0,this.fixedRowsTop=0,this.fixedRowsBottom=0}render(){if(!this.wtTable.isWorkingOnClone()){let l={};if(this.wot.getSetting(\"beforeDraw\",!0,l),l.skipRender===!0)return}this.rowHeaders=this.wot.getSetting(\"rowHeaders\"),this.rowHeaderCount=this.rowHeaders.length,this.fixedRowsTop=this.wot.getSetting(\"fixedRowsTop\"),this.fixedRowsBottom=this.wot.getSetting(\"fixedRowsBottom\"),this.columnHeaders=this.wot.getSetting(\"columnHeaders\"),this.columnHeaderCount=this.columnHeaders.length;let t=this.wtTable.getRenderedColumnsCount(),e=this.wtTable.getRenderedRowsCount(),o=this.wot.getSetting(\"totalColumns\"),i=this.wot.getSetting(\"totalRows\"),r,n=!1;if((I.isOverlayTypeOf(this.wot.cloneOverlay,I.CLONE_BOTTOM)||I.isOverlayTypeOf(this.wot.cloneOverlay,I.CLONE_BOTTOM_LEFT_CORNER))&&(this.columnHeaders=[],this.columnHeaderCount=0),o>=0&&(this.adjustAvailableNodes(),n=!0,this.renderColumnHeaders(),this.renderRows(i,e,t),this.wtTable.isWorkingOnClone()||(r=this.wot.wtViewport.getWorkspaceWidth(),this.wot.wtViewport.containerWidth=null),this.adjustColumnWidths(t),this.markOversizedColumnHeaders(),this.adjustColumnHeaderHeights()),n||this.adjustAvailableNodes(),this.removeRedundantRows(e),(!this.wtTable.isWorkingOnClone()||this.wot.isOverlayName(I.CLONE_BOTTOM))&&this.markOversizedRows(),this.wtTable.isWorkingOnClone())this.wot.isOverlayName(I.CLONE_BOTTOM)&&this.wot.cloneSource.wtOverlays.adjustElementsSize();else{this.wot.wtViewport.createVisibleCalculators(),this.wot.wtOverlays.refresh(!1),this.wot.wtOverlays.applyToDOM();let l=st(this.wtTable.hider),a=st(this.wtTable.TABLE);if(l!==0&&a!==l&&this.adjustColumnWidths(t),r!==this.wot.wtViewport.getWorkspaceWidth()){this.wot.wtViewport.containerWidth=null;let h=this.wtTable.getFirstRenderedColumn(),u=this.wtTable.getLastRenderedColumn(),m=this.wot.getSetting(\"defaultColumnWidth\"),w=this.wot.getSetting(\"rowHeaderWidth\");if(w=this.instance.getSetting(\"onModifyRowHeaderWidth\",w),w!=null)for(let R=0;R<this.rowHeaderCount;R++){let A=Array.isArray(w)?w[R]:w;A=A??m,this.COLGROUP.childNodes[R].style.width=`${A}px`}for(let R=h;R<u;R++){let A=this.wtTable.getStretchedColumnWidth(R),O=this.columnFilter.sourceToRendered(R);this.COLGROUP.childNodes[O+this.rowHeaderCount].style.width=`${A}px`}}this.wot.getSetting(\"onDraw\",!0)}}removeRedundantRows(t){for(;this.wtTable.tbodyChildrenLength>t;)this.TBODY.removeChild(this.TBODY.lastChild),this.wtTable.tbodyChildrenLength-=1}renderRows(t,e,o){let i,r=0,n=this.rowFilter.renderedToSource(r),l=this.wtTable.isWorkingOnClone();for(;n<t&&n>=0&&(!rc&&r>1e3&&(rc=!0,pe(Vt`Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting the number \n          of rendered rows by specifying the table height and/or turning off the \"renderAllRows\" option.`)),!(e!==void 0&&r===e));){if(i=this.getOrCreateTrForRow(r,i),this.renderRowHeaders(n,i),this.adjustColumns(i,o+this.rowHeaderCount),this.renderCells(n,i,o),(!l||this.wot.isOverlayName(I.CLONE_BOTTOM))&&this.resetOversizedRow(n),i.firstChild){let a=this.wot.wtTable.getRowHeight(n);a?(a-=1,i.firstChild.style.height=`${a}px`):i.firstChild.style.height=\"\"}r+=1,n=this.rowFilter.renderedToSource(r)}}resetOversizedRow(t){this.wot.getSetting(\"externalRowCalculator\")||this.wot.wtViewport.oversizedRows&&this.wot.wtViewport.oversizedRows[t]&&(this.wot.wtViewport.oversizedRows[t]=void 0)}markOversizedRows(){if(this.wot.getSetting(\"externalRowCalculator\"))return;let t=this.instance.wtTable.TBODY.childNodes.length,e=t*this.instance.wtSettings.settings.defaultRowHeight,o=Qt(this.instance.wtTable.TBODY)-1,i,r,n,l,a;if(!(e===o&&!this.instance.getSetting(\"fixedRowsBottom\")))for(;t;)t-=1,n=this.instance.wtTable.rowFilter.renderedToSource(t),i=this.instance.wtTable.getRowHeight(n),l=this.instance.wtTable.getTrForRow(n),a=l.querySelector(\"th\"),a?r=Qt(a):r=Qt(l)-1,(!i&&this.instance.wtSettings.settings.defaultRowHeight<r||i<r)&&(r+=1,this.instance.wtViewport.oversizedRows[n]=r)}markOversizedColumnHeaders(){let t=this.wot.getOverlayName();if(!this.columnHeaderCount||this.wot.wtViewport.hasOversizedColumnHeadersMarked[t]||this.wtTable.isWorkingOnClone())return;let e=this.wtTable.getRenderedColumnsCount();for(let o=0;o<this.columnHeaderCount;o++)for(let i=-1*this.rowHeaderCount;i<e;i++)this.markIfOversizedColumnHeader(i);this.wot.wtViewport.hasOversizedColumnHeadersMarked[t]=!0}adjustColumnHeaderHeights(){let t=this.wot.getSetting(\"columnHeaders\"),e=this.wot.wtTable.THEAD.childNodes,o=this.wot.wtViewport.oversizedColumnHeaders;for(let i=0,r=t.length;i<r;i++)if(o[i]){if(!e[i]||e[i].childNodes.length===0)return;e[i].childNodes[0].style.height=`${o[i]}px`}}markIfOversizedColumnHeader(t){let e=this.wot.wtTable.columnFilter.renderedToSource(t),o=this.columnHeaderCount,i=this.wot.wtSettings.settings.defaultRowHeight,r,n,l,a=this.wot.getSetting(\"columnHeaderHeight\")||[];for(;o;)o-=1,r=this.wot.wtTable.getColumnHeaderHeight(o),n=this.wot.wtTable.getColumnHeader(e,o),n&&(l=Qt(n),(!r&&i<l||r<l)&&(this.wot.wtViewport.oversizedColumnHeaders[o]=l),Array.isArray(a)?a[o]!==null&&a[o]!==void 0&&(this.wot.wtViewport.oversizedColumnHeaders[o]=a[o]):isNaN(a)||(this.wot.wtViewport.oversizedColumnHeaders[o]=a),this.wot.wtViewport.oversizedColumnHeaders[o]<(a[o]||a)&&(this.wot.wtViewport.oversizedColumnHeaders[o]=a[o]||a))}renderCells(t,e,o){let i,r;for(let n=0;n<o;n++)r=this.columnFilter.renderedToSource(n),n===0?i=e.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(r)]:i=i.nextSibling,i.nodeName===\"TH\"&&(i=qf(i,e)),z(i,\"hide\")||(i.className=\"\"),i.removeAttribute(\"style\"),this.wot.wtSettings.settings.cellRenderer(t,r,i);return i}adjustColumnWidths(t){let e=0,i=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder,r=this.wot.getSetting(\"defaultColumnWidth\"),n=this.wot.getSetting(\"rowHeaderWidth\");if(i.offsetHeight<i.scrollHeight&&(this.wot.getSetting(\"preventOverflow\")||(e=at())),this.wot.wtViewport.columnsRenderCalculator.refreshStretching(this.wot.wtViewport.getViewportWidth()-e),n=this.instance.getSetting(\"onModifyRowHeaderWidth\",n),n!=null)for(let l=0;l<this.rowHeaderCount;l++){let a=Array.isArray(n)?n[l]:n;a=a??r,this.COLGROUP.childNodes[l].style.width=`${a}px`}for(let l=0;l<t;l++){let a=this.wtTable.getStretchedColumnWidth(this.columnFilter.renderedToSource(l));this.COLGROUP.childNodes[l+this.rowHeaderCount].style.width=`${a}px`}}appendToTbody(t){this.TBODY.appendChild(t),this.wtTable.tbodyChildrenLength+=1}getOrCreateTrForRow(t,e){let o;return t>=this.wtTable.tbodyChildrenLength?(o=this.createRow(),this.appendToTbody(o)):t===0?o=this.TBODY.firstChild:o=e.nextSibling,o.className&&o.removeAttribute(\"class\"),o}createRow(){let t=document.createElement(\"TR\");for(let e=0;e<this.rowHeaderCount;e++)t.appendChild(document.createElement(\"TH\"));return t}renderRowHeader(t,e,o){o.className=\"\",o.removeAttribute(\"style\"),this.rowHeaders[e](t,o,e)}renderRowHeaders(t,e){for(let o=e.firstChild,i=0;i<this.rowHeaderCount;i++)o?o.nodeName===\"TD\"&&(o=Kf(o,e)):(o=document.createElement(\"TH\"),e.appendChild(o)),this.renderRowHeader(t,i,o),o=o.nextSibling}adjustAvailableNodes(){this.adjustColGroups(),this.adjustThead()}renderColumnHeaders(){if(!this.columnHeaderCount)return;let t=this.wtTable.getRenderedColumnsCount();for(let e=0;e<this.columnHeaderCount;e++){let o=this.getTrForColumnHeaders(e);for(let i=-1*this.rowHeaderCount;i<t;i++){let r=this.columnFilter.renderedToSource(i);this.renderColumnHeader(e,r,o.childNodes[i+this.rowHeaderCount])}}}adjustColGroups(){let t=this.wtTable.getRenderedColumnsCount();for(;this.wtTable.colgroupChildrenLength<t+this.rowHeaderCount;)this.COLGROUP.appendChild(document.createElement(\"COL\")),this.wtTable.colgroupChildrenLength+=1;for(;this.wtTable.colgroupChildrenLength>t+this.rowHeaderCount;)this.COLGROUP.removeChild(this.COLGROUP.lastChild),this.wtTable.colgroupChildrenLength-=1;this.rowHeaderCount&&L(this.COLGROUP.childNodes[0],\"rowHeader\")}adjustThead(){let t=this.wtTable.getRenderedColumnsCount(),e=this.THEAD.firstChild;if(this.columnHeaders.length){for(let i=0,r=this.columnHeaders.length;i<r;i++){for(e=this.THEAD.childNodes[i],e||(e=document.createElement(\"TR\"),this.THEAD.appendChild(e)),this.theadChildrenLength=e.childNodes.length;this.theadChildrenLength<t+this.rowHeaderCount;)e.appendChild(document.createElement(\"TH\")),this.theadChildrenLength+=1;for(;this.theadChildrenLength>t+this.rowHeaderCount;)e.removeChild(e.lastChild),this.theadChildrenLength-=1}let o=this.THEAD.childNodes.length;if(o>this.columnHeaders.length)for(let i=this.columnHeaders.length;i<o;i++)this.THEAD.removeChild(this.THEAD.lastChild)}else e&&xt(e)}getTrForColumnHeaders(t){return this.THEAD.childNodes[t]}renderColumnHeader(t,e,o){return o.className=\"\",o.removeAttribute(\"style\"),this.columnHeaders[t](e,o,t)}adjustColumns(t,e){let o=t.childNodes.length;for(;o<e;){let i=document.createElement(\"TD\");t.appendChild(i),o+=1}for(;o>e;)t.removeChild(t.lastChild),o-=1}removeRedundantColumns(t){for(;this.wtTable.tbodyChildrenLength>t;)this.TBODY.removeChild(this.TBODY.lastChild),this.wtTable.tbodyChildrenLength-=1}};function Kf(s,t){let e=document.createElement(\"TH\");return t.insertBefore(e,s),t.removeChild(s),e}function qf(s,t){let e=document.createElement(\"TD\");return t.insertBefore(e,s),t.removeChild(s),e}var jn=Xn;var Kn=class{constructor(t,e){this.wot=t,this.instance=this.wot,this.TABLE=e,this.TBODY=null,this.THEAD=null,this.COLGROUP=null,this.tableOffset=0,this.holderOffset=0,Ps(this.TABLE),this.spreader=this.createSpreader(this.TABLE),this.hider=this.createHider(this.spreader),this.holder=this.createHolder(this.hider),this.wtRootElement=this.holder.parentNode,this.alignOverlaysWithTrimmingContainer(),this.fixTableDomTree(),this.colgroupChildrenLength=this.COLGROUP.childNodes.length,this.theadChildrenLength=this.THEAD.firstChild?this.THEAD.firstChild.childNodes.length:0,this.tbodyChildrenLength=this.TBODY.childNodes.length,this.rowFilter=null,this.columnFilter=null,this.correctHeaderWidth=!1;let o=this.wot.wtSettings.settings.rowHeaderWidth;this.wot.wtSettings.settings.rowHeaderWidth=()=>this._modifyRowHeaderWidth(o)}fixTableDomTree(){this.TBODY=this.TABLE.querySelector(\"tbody\"),this.TBODY||(this.TBODY=document.createElement(\"tbody\"),this.TABLE.appendChild(this.TBODY)),this.THEAD=this.TABLE.querySelector(\"thead\"),this.THEAD||(this.THEAD=document.createElement(\"thead\"),this.TABLE.insertBefore(this.THEAD,this.TBODY)),this.COLGROUP=this.TABLE.querySelector(\"colgroup\"),this.COLGROUP||(this.COLGROUP=document.createElement(\"colgroup\"),this.TABLE.insertBefore(this.COLGROUP,this.THEAD)),this.wot.getSetting(\"columnHeaders\").length&&!this.THEAD.childNodes.length&&this.THEAD.appendChild(document.createElement(\"TR\"))}createSpreader(t){let e=t.parentNode,o;return(!e||e.nodeType!==1||!z(e,\"wtHolder\"))&&(o=document.createElement(\"div\"),o.className=\"wtSpreader\",e&&e.insertBefore(o,t),o.appendChild(t)),o.style.position=\"relative\",o}createHider(t){let e=t.parentNode,o;return(!e||e.nodeType!==1||!z(e,\"wtHolder\"))&&(o=document.createElement(\"div\"),o.className=\"wtHider\",e&&e.insertBefore(o,t),o.appendChild(t)),o}createHolder(t){let e=t.parentNode,o;return(!e||e.nodeType!==1||!z(e,\"wtHolder\"))&&(o=document.createElement(\"div\"),o.style.position=\"relative\",o.className=\"wtHolder\",e&&e.insertBefore(o,t),this.isWorkingOnClone()||(o.parentNode.className+=\"ht_master handsontable\"),o.appendChild(t)),o}alignOverlaysWithTrimmingContainer(){let t=Be(this.wtRootElement),e=this.wot.getSetting(\"preventOverflow\");this.isWorkingOnClone()||(this.holder.parentNode.style.position=\"relative\",t===window?e===\"horizontal\"?(this.holder.style.overflowX=\"auto\",this.holder.style.overflowY=\"visible\",this.wtRootElement.style.overflow=\"visible\"):e||(this.holder.style.overflow=\"visible\",this.wtRootElement.style.overflow=\"visible\"):e===\"horizontal\"?(this.wtRootElement.style.width=\"100%\",this.holder.style.width=\"100%\",this.holder.style.overflowX=\"hidden\",this.holder.style.overflowY=\"hidden\"):(this.holder.style.width=Go(t,\"width\"),this.holder.style.height=Go(t,\"height\"),this.holder.style.overflow=\"\"))}isWorkingOnClone(){return!!this.wot.cloneSource}draw(t){let{wtOverlays:e,wtViewport:o}=this.wot,i=this.instance.getSetting(\"totalRows\"),r=this.wot.getSetting(\"rowHeaders\").length,n=this.wot.getSetting(\"columnHeaders\").length,l=!1,a=t;if(!this.isWorkingOnClone()&&(this.holderOffset=rt(this.holder),a=o.createRenderCalculators(a),r&&!this.wot.getSetting(\"fixedColumnsLeft\"))){let h=e.leftOverlay.getScrollPosition(),u=this.correctHeaderWidth;this.correctHeaderWidth=h>0,u!==this.correctHeaderWidth&&(a=!1)}if(this.isWorkingOnClone()||(l=e.prepareOverlays()),a)this.isWorkingOnClone()||o.createVisibleCalculators(),e&&e.refresh(!0);else{this.isWorkingOnClone()?this.tableOffset=this.wot.cloneSource.wtTable.tableOffset:this.tableOffset=rt(this.TABLE);let h;I.isOverlayTypeOf(this.wot.cloneOverlay,I.CLONE_DEBUG)||I.isOverlayTypeOf(this.wot.cloneOverlay,I.CLONE_TOP)||I.isOverlayTypeOf(this.wot.cloneOverlay,I.CLONE_TOP_LEFT_CORNER)?h=0:I.isOverlayTypeOf(this.instance.cloneOverlay,I.CLONE_BOTTOM)||I.isOverlayTypeOf(this.instance.cloneOverlay,I.CLONE_BOTTOM_LEFT_CORNER)?h=Math.max(i-this.wot.getSetting(\"fixedRowsBottom\"),0):h=o.rowsRenderCalculator.startRow;let u;I.isOverlayTypeOf(this.wot.cloneOverlay,I.CLONE_DEBUG)||I.isOverlayTypeOf(this.wot.cloneOverlay,I.CLONE_LEFT)||I.isOverlayTypeOf(this.wot.cloneOverlay,I.CLONE_TOP_LEFT_CORNER)||I.isOverlayTypeOf(this.wot.cloneOverlay,I.CLONE_BOTTOM_LEFT_CORNER)?u=0:u=o.columnsRenderCalculator.startColumn,this.rowFilter=new hn(h,i,n),this.columnFilter=new ln(u,this.wot.getSetting(\"totalColumns\"),r),this.alignOverlaysWithTrimmingContainer(),this._doDraw()}return this.refreshSelections(a),this.isWorkingOnClone()||(e.topOverlay.resetFixedPosition(),e.bottomOverlay.clone&&e.bottomOverlay.resetFixedPosition(),e.leftOverlay.resetFixedPosition(),e.topLeftCornerOverlay&&e.topLeftCornerOverlay.resetFixedPosition(),e.bottomLeftCornerOverlay&&e.bottomLeftCornerOverlay.clone&&e.bottomLeftCornerOverlay.resetFixedPosition()),l&&e.syncScrollWithMaster(),this.wot.drawn=!0,this}_doDraw(){new jn(this).render()}removeClassFromCells(t){let e=this.TABLE.querySelectorAll(`.${t}`);for(let o=0,i=e.length;o<i;o++)Y(e[o],t)}refreshSelections(t){if(!this.wot.selections)return;let e=Array.from(this.wot.selections),o=e.length;if(t){let i=[];for(let l=0;l<o;l++){let{highlightHeaderClassName:a,highlightRowClassName:h,highlightColumnClassName:u}=e[l].settings,m=e[l].classNames,w=m.length;for(let R=0;R<w;R++)i.includes(m[R])||i.push(m[R]);a&&!i.includes(a)&&i.push(a),h&&!i.includes(h)&&i.push(h),u&&!i.includes(u)&&i.push(u)}let r=this.wot.getSetting(\"onBeforeRemoveCellClassNames\");if(Array.isArray(r))for(let l=0;l<r.length;l++)i.push(r[l]);let n=i.length;for(let l=0;l<n;l++)this.removeClassFromCells(i[l])}for(let i=0;i<o;i++)e[i].draw(this.wot,t)}getCell(t){let e=t.row,o=t.col,i=this.wot.getSetting(\"onModifyGetCellCoords\",e,o);if(i&&Array.isArray(i)&&([e,o]=i),this.isRowBeforeRenderedRows(e))return-1;if(this.isRowAfterRenderedRows(e))return-2;let r=this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)];if(r)return r.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(o)]}getColumnHeader(t,e=0){let o=this.THEAD.childNodes[e];if(o)return o.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(t)]}getRowHeader(t){if(this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0)===0)return null;let e=this.TBODY.childNodes[this.rowFilter.sourceToRendered(t)];if(e)return e.childNodes[0]}getCoords(t){let e=t;if(e.nodeName!==\"TD\"&&e.nodeName!==\"TH\"&&(e=Ie(e,[\"TD\",\"TH\"])),e===null)return null;let o=e.parentNode,i=o.parentNode,r=bn(o),n=e.cellIndex;return $o(I.CLONE_TOP_LEFT_CORNER,e)||$o(I.CLONE_TOP,e)?i.nodeName===\"THEAD\"&&(r-=i.childNodes.length):i===this.THEAD?r=this.rowFilter.visibleColHeadedRowToSourceRow(r):r=this.rowFilter.renderedToSource(r),$o(I.CLONE_TOP_LEFT_CORNER,e)||$o(I.CLONE_LEFT,e)?n=this.columnFilter.offsettedTH(n):n=this.columnFilter.visibleRowHeadedColumnToSourceColumn(n),new M(r,n)}getTrForRow(t){return this.TBODY.childNodes[this.rowFilter.sourceToRendered(t)]}getFirstRenderedRow(){return this.wot.wtViewport.rowsRenderCalculator.startRow}getFirstVisibleRow(){return this.wot.wtViewport.rowsVisibleCalculator.startRow}getFirstRenderedColumn(){return this.wot.wtViewport.columnsRenderCalculator.startColumn}getFirstVisibleColumn(){return this.wot.wtViewport.columnsVisibleCalculator.startColumn}getLastRenderedRow(){return this.wot.wtViewport.rowsRenderCalculator.endRow}getLastVisibleRow(){return this.wot.wtViewport.rowsVisibleCalculator.endRow}getLastRenderedColumn(){return this.wot.wtViewport.columnsRenderCalculator.endColumn}getLastVisibleColumn(){return this.wot.wtViewport.columnsVisibleCalculator.endColumn}isRowBeforeRenderedRows(t){return this.rowFilter&&this.rowFilter.sourceToRendered(t)<0&&t>=0}isRowAfterViewport(t){return this.rowFilter&&this.rowFilter.sourceToRendered(t)>this.getLastVisibleRow()}isRowAfterRenderedRows(t){return this.rowFilter&&this.rowFilter.sourceToRendered(t)>this.getLastRenderedRow()}isColumnBeforeViewport(t){return this.columnFilter&&this.columnFilter.sourceToRendered(t)<0&&t>=0}isColumnAfterViewport(t){return this.columnFilter&&this.columnFilter.sourceToRendered(t)>this.getLastVisibleColumn()}isLastRowFullyVisible(){return this.getLastVisibleRow()===this.getLastRenderedRow()}isLastColumnFullyVisible(){return this.getLastVisibleColumn()===this.getLastRenderedColumn()}getRenderedColumnsCount(){let t=this.wot.wtViewport.columnsRenderCalculator.count,e=this.wot.getSetting(\"totalColumns\");if(this.wot.isOverlayName(I.CLONE_DEBUG))t=e;else if(this.wot.isOverlayName(I.CLONE_LEFT)||this.wot.isOverlayName(I.CLONE_TOP_LEFT_CORNER)||this.wot.isOverlayName(I.CLONE_BOTTOM_LEFT_CORNER))return Math.min(this.wot.getSetting(\"fixedColumnsLeft\"),e);return t}getRenderedRowsCount(){let t=this.wot.wtViewport.rowsRenderCalculator.count,e=this.wot.getSetting(\"totalRows\");return this.wot.isOverlayName(I.CLONE_DEBUG)?t=e:this.wot.isOverlayName(I.CLONE_TOP)||this.wot.isOverlayName(I.CLONE_TOP_LEFT_CORNER)?t=Math.min(this.wot.getSetting(\"fixedRowsTop\"),e):(this.wot.isOverlayName(I.CLONE_BOTTOM)||this.wot.isOverlayName(I.CLONE_BOTTOM_LEFT_CORNER))&&(t=Math.min(this.wot.getSetting(\"fixedRowsBottom\"),e)),t}getVisibleRowsCount(){return this.wot.wtViewport.rowsVisibleCalculator.count}allRowsInViewport(){return this.wot.getSetting(\"totalRows\")===this.getVisibleRowsCount()}getRowHeight(t){let e=this.wot.wtSettings.settings.rowHeight(t),o=this.wot.wtViewport.oversizedRows[t];return o!==void 0&&(e=e===void 0?o:Math.max(e,o)),e}getColumnHeaderHeight(t){let e=this.wot.wtSettings.settings.defaultRowHeight,o=this.wot.wtViewport.oversizedColumnHeaders[t];return o!==void 0&&(e=e?Math.max(e,o):o),e}getVisibleColumnsCount(){return this.wot.wtViewport.columnsVisibleCalculator.count}allColumnsInViewport(){return this.wot.getSetting(\"totalColumns\")===this.getVisibleColumnsCount()}getColumnWidth(t){let e=this.wot.wtSettings.settings.columnWidth;return typeof e==\"function\"?e=e(t):typeof e==\"object\"&&(e=e[t]),e||this.wot.wtSettings.settings.defaultColumnWidth}getStretchedColumnWidth(t){let e=this.getColumnWidth(t),o=e??this.instance.wtSettings.settings.defaultColumnWidth,i=this.wot.wtViewport.columnsRenderCalculator;if(i){let r=i.getStretchedColumnWidth(t,o);r&&(o=r)}return o}_modifyRowHeaderWidth(t){let e=At(t)?t():null;return Array.isArray(e)?(e=[...e],e[e.length-1]=this._correctRowHeaderWidth(e[e.length-1])):e=this._correctRowHeaderWidth(e),e}_correctRowHeaderWidth(t){let e=t;return typeof t!=\"number\"&&(e=this.wot.getSetting(\"defaultColumnWidth\")),this.correctHeaderWidth&&(e+=1),e}},$s=Kn;var qn=class{constructor(t){this.wot=t,this.instance=this.wot,this.oversizedRows=[],this.oversizedColumnHeaders=[],this.hasOversizedColumnHeadersMarked={},this.clientHeight=0,this.containerWidth=NaN,this.rowHeaderWidth=NaN,this.rowsVisibleCalculator=null,this.columnsVisibleCalculator=null,this.eventManager=new G(this.wot),this.eventManager.addEventListener(window,\"resize\",()=>{this.clientHeight=this.getWorkspaceHeight()})}getWorkspaceHeight(){let t=this.instance.wtOverlays.topOverlay.trimmingContainer,e,o=0;return t===window?o=document.documentElement.clientHeight:(e=lt(t),o=e>0&&t.clientHeight>0?t.clientHeight:1/0),o}getWorkspaceWidth(){let t,e=this.wot.getSetting(\"totalColumns\"),o=this.instance.wtOverlays.leftOverlay.trimmingContainer,i,r=this.wot.getSetting(\"stretchH\"),n=document.documentElement.offsetWidth;if(this.wot.getSetting(\"preventOverflow\")){let a=this.instance.wtTable.hider,h=a.style.width;a.style.width=\"0\";let u=st(this.instance.wtTable.wtRootElement);return a.style.width=h,u}return this.wot.getSetting(\"freezeOverlays\")?t=Math.min(n-this.getWorkspaceOffset().left,n):t=Math.min(this.getContainerFillWidth(),n-this.getWorkspaceOffset().left,n),o===window&&e>0&&this.sumColumnWidths(0,e-1)>t?document.documentElement.clientWidth:o!==window&&(i=Go(this.instance.wtOverlays.leftOverlay.trimmingContainer,\"overflow\"),i===\"scroll\"||i===\"hidden\"||i===\"auto\")?Math.max(t,o.clientWidth):r===\"none\"||!r?Math.max(t,st(this.instance.wtTable.TABLE)):t}hasVerticalScroll(){return this.getWorkspaceActualHeight()>this.getWorkspaceHeight()}hasHorizontalScroll(){return this.getWorkspaceActualWidth()>this.getWorkspaceWidth()}sumColumnWidths(t,e){let o=this.wot.wtTable,i=0,r=t;for(;r<e;)i+=o.getColumnWidth(r),r+=1;return i}getContainerFillWidth(){if(this.containerWidth)return this.containerWidth;let t=this.instance.wtTable.holder,e=document.createElement(\"div\");e.style.width=\"100%\",e.style.height=\"1px\",t.appendChild(e);let o=e.offsetWidth;return this.containerWidth=o,t.removeChild(e),o}getWorkspaceOffset(){return rt(this.wot.wtTable.TABLE)}getWorkspaceActualHeight(){return lt(this.wot.wtTable.TABLE)}getWorkspaceActualWidth(){return st(this.wot.wtTable.TABLE)||st(this.wot.wtTable.TBODY)||st(this.wot.wtTable.THEAD)}getColumnHeaderHeight(){return isNaN(this.columnHeaderHeight)&&(this.columnHeaderHeight=lt(this.wot.wtTable.THEAD)),this.columnHeaderHeight}getViewportHeight(){let t=this.getWorkspaceHeight();if(t===1/0)return t;let e=this.getColumnHeaderHeight();return e>0&&(t-=e),t}getRowHeaderWidth(){let t=this.instance.getSetting(\"rowHeaderWidth\"),e=this.instance.getSetting(\"rowHeaders\");if(t){this.rowHeaderWidth=0;for(let o=0,i=e.length;o<i;o++)this.rowHeaderWidth+=t[o]||t}if(this.wot.cloneSource)return this.wot.cloneSource.wtViewport.getRowHeaderWidth();if(isNaN(this.rowHeaderWidth))if(e.length){let o=this.instance.wtTable.TABLE.querySelector(\"TH\");this.rowHeaderWidth=0;for(let i=0,r=e.length;i<r;i++)o?(this.rowHeaderWidth+=st(o),o=o.nextSibling):this.rowHeaderWidth+=50}else this.rowHeaderWidth=0;return this.rowHeaderWidth=this.instance.getSetting(\"onModifyRowHeaderWidth\",this.rowHeaderWidth)||this.rowHeaderWidth,this.rowHeaderWidth}getViewportWidth(){let t=this.getWorkspaceWidth();if(t===1/0)return t;let e=this.getRowHeaderWidth();return e>0?t-e:t}createRowsCalculator(t=!1){let e,o,i;this.rowHeaderWidth=NaN,this.wot.wtSettings.settings.renderAllRows&&!t?e=1/0:e=this.getViewportHeight();let r=this.wot.wtOverlays.topOverlay.getScrollPosition()-this.wot.wtOverlays.topOverlay.getTableParentOffset();r<0&&(r=0);let n=this.wot.getSetting(\"fixedRowsTop\"),l=this.wot.getSetting(\"fixedRowsBottom\"),a=this.wot.getSetting(\"totalRows\");return n&&(i=this.wot.wtOverlays.topOverlay.sumCellSizes(0,n),r+=i,e-=i),l&&this.wot.wtOverlays.bottomOverlay.clone&&(i=this.wot.wtOverlays.bottomOverlay.sumCellSizes(a-l,a),e-=i),this.wot.wtTable.holder.clientHeight===this.wot.wtTable.holder.offsetHeight?o=0:o=at(),new on(e,r,this.wot.getSetting(\"totalRows\"),h=>this.wot.wtTable.getRowHeight(h),t?null:this.wot.wtSettings.settings.viewportRowCalculatorOverride,t,o)}createColumnsCalculator(t=!1){let e=this.getViewportWidth(),o=this.wot.wtOverlays.leftOverlay.getScrollPosition()-this.wot.wtOverlays.leftOverlay.getTableParentOffset();this.columnHeaderHeight=NaN,o<0&&(o=0);let i=this.wot.getSetting(\"fixedColumnsLeft\");if(i){let r=this.wot.wtOverlays.leftOverlay.sumCellSizes(0,i);o+=r,e-=r}return this.wot.wtTable.holder.clientWidth!==this.wot.wtTable.holder.offsetWidth&&(this.wot.getSetting(\"preventOverflow\")||(e-=at())),new Co(e,o,this.wot.getSetting(\"totalColumns\"),r=>this.wot.wtTable.getColumnWidth(r),t?null:this.wot.wtSettings.settings.viewportColumnCalculatorOverride,t,this.wot.getSetting(\"stretchH\"),(r,n)=>this.wot.getSetting(\"onBeforeStretchingColumnWidth\",r,n))}createRenderCalculators(t=!1){let e=t;if(e){let o=this.createRowsCalculator(!0),i=this.createColumnsCalculator(!0);this.areAllProposedVisibleRowsAlreadyRendered(o)&&this.areAllProposedVisibleColumnsAlreadyRendered(i)||(e=!1)}return e||(this.rowsRenderCalculator=this.createRowsCalculator(),this.columnsRenderCalculator=this.createColumnsCalculator()),this.rowsVisibleCalculator=null,this.columnsVisibleCalculator=null,e}createVisibleCalculators(){this.rowsVisibleCalculator=this.createRowsCalculator(!0),this.columnsVisibleCalculator=this.createColumnsCalculator(!0)}areAllProposedVisibleRowsAlreadyRendered(t){return this.rowsVisibleCalculator?t.startRow<this.rowsRenderCalculator.startRow||t.startRow===this.rowsRenderCalculator.startRow&&t.startRow>0?!1:!(t.endRow>this.rowsRenderCalculator.endRow||t.endRow===this.rowsRenderCalculator.endRow&&t.endRow<this.wot.getSetting(\"totalRows\")-1):!1}areAllProposedVisibleColumnsAlreadyRendered(t){return this.columnsVisibleCalculator?t.startColumn<this.columnsRenderCalculator.startColumn||t.startColumn===this.columnsRenderCalculator.startColumn&&t.startColumn>0?!1:!(t.endColumn>this.columnsRenderCalculator.endColumn||t.endColumn===this.columnsRenderCalculator.endColumn&&t.endColumn<this.wot.getSetting(\"totalColumns\")-1):!1}resetHasOversizedColumnHeadersMarked(){X(this.hasOversizedColumnHeadersMarked,(t,e,o)=>{o[e]=void 0})}},Qn=qn;var Jn=class{constructor(t){let e=[];if(this.guid=`wt_${Ci()}`,t.cloneSource?(this.cloneSource=t.cloneSource,this.cloneOverlay=t.cloneOverlay,this.wtSettings=t.cloneSource.wtSettings,this.wtTable=new $s(this,t.table,t.wtRootElement),this.wtScroll=new zs(this),this.wtViewport=t.cloneSource.wtViewport,this.wtEvent=new Us(this),this.selections=this.cloneSource.selections):(this.wtSettings=new Gn(this,t),this.wtTable=new $s(this,t.table),this.wtScroll=new zs(this),this.wtViewport=new Qn(this),this.wtEvent=new Us(this),this.selections=this.getSetting(\"selections\"),this.wtOverlays=new Un(this),this.exportSettingsAsClassNames()),this.wtTable.THEAD.childNodes.length&&this.wtTable.THEAD.childNodes[0].childNodes.length){for(let o=0,i=this.wtTable.THEAD.childNodes[0].childNodes.length;o<i;o++)e.push(this.wtTable.THEAD.childNodes[0].childNodes[o].innerHTML);this.getSetting(\"columnHeaders\").length||this.update(\"columnHeaders\",[function(o,i){Pe(i,e[o])}])}this.drawn=!1,this.drawInterrupted=!1}draw(t=!1){return this.drawInterrupted=!1,!t&&!Xe(this.wtTable.TABLE)?this.drawInterrupted=!0:this.wtTable.draw(t),this}getCell(t,e=!1){if(!e)return this.wtTable.getCell(t);let o=this.wtSettings.getSetting(\"totalRows\"),i=this.wtSettings.getSetting(\"fixedRowsTop\"),r=this.wtSettings.getSetting(\"fixedRowsBottom\"),n=this.wtSettings.getSetting(\"fixedColumnsLeft\");if(t.row<i&&t.col<n)return this.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell(t);if(t.row<i)return this.wtOverlays.topOverlay.clone.wtTable.getCell(t);if(t.col<n&&t.row>=o-r){if(this.wtOverlays.bottomLeftCornerOverlay&&this.wtOverlays.bottomLeftCornerOverlay.clone)return this.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell(t)}else{if(t.col<n)return this.wtOverlays.leftOverlay.clone.wtTable.getCell(t);if(t.row<o&&t.row>o-r&&this.wtOverlays.bottomOverlay&&this.wtOverlays.bottomOverlay.clone)return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(t)}return this.wtTable.getCell(t)}update(t,e){return this.wtSettings.update(t,e)}scrollViewport(t,e,o,i,r){return this.wtScroll.scrollViewport(t,e,o,i,r)}scrollViewportHorizontally(t,e,o){return this.wtScroll.scrollViewportHorizontally(t,e,o)}scrollViewportVertically(t,e,o){return this.wtScroll.scrollViewportVertically(t,e,o)}getViewport(){return[this.wtTable.getFirstVisibleRow(),this.wtTable.getFirstVisibleColumn(),this.wtTable.getLastVisibleRow(),this.wtTable.getLastVisibleColumn()]}getOverlayName(){return this.cloneOverlay?this.cloneOverlay.type:\"master\"}isOverlayName(t){return this.cloneOverlay?this.cloneOverlay.type===t:!1}exportSettingsAsClassNames(){let t={rowHeaders:[\"array\"],columnHeaders:[\"array\"]},e=[],o=[];X(t,(i,r)=>{i.indexOf(\"array\")>-1&&this.getSetting(r).length&&o.push(`ht${Oe(r)}`),e.push(`ht${Oe(r)}`)}),Y(this.wtTable.wtRootElement.parentNode,e),L(this.wtTable.wtRootElement.parentNode,o)}getSetting(t,e,o,i,r){return this.wtSettings.getSetting(t,e,o,i,r)}hasSetting(t){return this.wtSettings.has(t)}destroy(){this.wtOverlays.destroy(),this.wtEvent.destroy()}},vi=Jn;var Oi={},Zn=class s{static get CLONE_TOP(){return\"top\"}static get CLONE_BOTTOM(){return\"bottom\"}static get CLONE_LEFT(){return\"left\"}static get CLONE_TOP_LEFT_CORNER(){return\"top_left_corner\"}static get CLONE_BOTTOM_LEFT_CORNER(){return\"bottom_left_corner\"}static get CLONE_DEBUG(){return\"debug\"}static get CLONE_TYPES(){return[s.CLONE_TOP,s.CLONE_BOTTOM,s.CLONE_LEFT,s.CLONE_TOP_LEFT_CORNER,s.CLONE_BOTTOM_LEFT_CORNER,s.CLONE_DEBUG]}static registerOverlay(t,e){if(s.CLONE_TYPES.indexOf(t)===-1)throw new Error(`Unsupported overlay (${t}).`);Oi[t]=e}static createOverlay(t,e){return new Oi[t](e)}static hasOverlay(t){return Oi[t]!==void 0}static isOverlayTypeOf(t,e){return!t||!Oi[e]?!1:t instanceof Oi[e]}constructor(t){De(this,\"wot\",t,{writable:!1}),this.instance=this.wot,this.type=\"\",this.mainTableScrollableElement=null,this.TABLE=this.wot.wtTable.TABLE,this.hider=this.wot.wtTable.hider,this.spreader=this.wot.wtTable.spreader,this.holder=this.wot.wtTable.holder,this.wtRootElement=this.wot.wtTable.wtRootElement,this.trimmingContainer=Be(this.hider.parentNode.parentNode),this.areElementSizesAdjusted=!1,this.updateStateOfRendering()}updateStateOfRendering(){let t=this.needFullRender;this.needFullRender=this.shouldBeRendered();let e=t!==this.needFullRender;return e&&!this.needFullRender&&this.reset(),e}shouldBeRendered(){return!0}updateTrimmingContainer(){this.trimmingContainer=Be(this.hider.parentNode.parentNode)}updateMainScrollableElement(){this.mainTableScrollableElement=be(this.wot.wtTable.TABLE)}makeClone(t){if(s.CLONE_TYPES.indexOf(t)===-1)throw new Error(`Clone type \"${t}\" is not supported.`);let e=document.createElement(\"DIV\"),o=document.createElement(\"TABLE\");e.className=`ht_clone_${t} handsontable`,e.style.position=\"absolute\",e.style.top=0,e.style.left=0,e.style.overflow=\"hidden\",o.className=this.wot.wtTable.TABLE.className,e.appendChild(o),this.type=t,this.wot.wtTable.wtRootElement.parentNode.appendChild(e);let i=this.wot.getSetting(\"preventOverflow\");return i===!0||i===\"horizontal\"&&this.type===s.CLONE_TOP||i===\"vertical\"&&this.type===s.CLONE_LEFT?this.mainTableScrollableElement=window:this.mainTableScrollableElement=be(this.wot.wtTable.TABLE),new vi({cloneSource:this.wot,cloneOverlay:this,table:o})}refresh(t=!1){let e=this.shouldBeRendered();this.clone&&(this.needFullRender||e)&&this.clone.draw(t),this.needFullRender=e}reset(){if(!this.clone)return;let t=this.clone.wtTable.holder,e=this.clone.wtTable.hider,o=t.style,i=e.style,r=t.parentNode.style;v([o,i,r],n=>{n.width=\"\",n.height=\"\"})}destroy(){new G(this.clone).destroy()}},I=Zn;var tl=class extends I{constructor(t){super(t),this.clone=this.makeClone(I.CLONE_DEBUG),this.clone.wtTable.holder.style.opacity=.4,this.clone.wtTable.holder.style.textShadow=\"0 0 2px #ff0000\",L(this.clone.wtTable.holder.parentNode,\"wtDebugVisible\")}};I.registerOverlay(I.CLONE_DEBUG,tl);var el=class extends I{constructor(t){super(t),this.clone=this.makeClone(I.CLONE_LEFT)}shouldBeRendered(){return!!(this.wot.getSetting(\"fixedColumnsLeft\")||this.wot.getSetting(\"rowHeaders\").length)}resetFixedPosition(){if(!this.needFullRender||!this.wot.wtTable.holder.parentNode)return;let t=this.clone.wtTable.holder.parentNode,e=0,o=this.wot.getSetting(\"preventOverflow\");if(this.trimmingContainer===window&&(!o||o!==\"horizontal\")){let i=this.wot.wtTable.hider.getBoundingClientRect(),r=Math.ceil(i.left),n=Math.ceil(i.right),l,a;a=this.wot.wtTable.hider.style.top,a=a===\"\"?0:a,r<0&&n-t.offsetWidth>0?l=-r:l=0,e=l,l+=\"px\",Eo(t,l,a)}else e=this.getScrollPosition(),Gt(t);this.adjustHeaderBordersPosition(e),this.adjustElementsSize()}setScrollPosition(t){let e=!1;return this.mainTableScrollableElement===window&&window.scrollX!==t?(window.scrollTo(t,fe()),e=!0):this.mainTableScrollableElement.scrollLeft!==t&&(this.mainTableScrollableElement.scrollLeft=t,e=!0),e}onScroll(){this.wot.getSetting(\"onScrollVertically\")}sumCellSizes(t,e){let o=this.wot.wtSettings.defaultColumnWidth,i=t,r=0;for(;i<e;)r+=this.wot.wtTable.getStretchedColumnWidth(i)||o,i+=1;return r}adjustElementsSize(t=!1){this.updateTrimmingContainer(),(this.needFullRender||t)&&(this.adjustRootElementSize(),this.adjustRootChildrenSize(),t||(this.areElementSizesAdjusted=!0))}adjustRootElementSize(){let t=this.wot.wtTable.holder,e=t.clientHeight===t.offsetHeight?0:at(),i=this.clone.wtTable.holder.parentNode.style,r=this.wot.getSetting(\"preventOverflow\");if(this.trimmingContainer!==window||r===\"vertical\"){let l=this.wot.wtViewport.getWorkspaceHeight()-e;l=Math.min(l,Qt(this.wot.wtTable.wtRootElement)),i.height=`${l}px`}else i.height=\"\";this.clone.wtTable.holder.style.height=i.height;let n=st(this.clone.wtTable.TABLE);i.width=`${n===0?n:n+4}px`}adjustRootChildrenSize(){let t=at();this.clone.wtTable.hider.style.height=this.hider.style.height,this.clone.wtTable.holder.style.height=this.clone.wtTable.holder.parentNode.style.height,t===0&&(t=30),this.clone.wtTable.holder.style.width=`${parseInt(this.clone.wtTable.holder.parentNode.style.width,10)+t}px`}applyToDOM(){let t=this.wot.getSetting(\"totalColumns\");if(this.areElementSizesAdjusted||this.adjustElementsSize(),typeof this.wot.wtViewport.columnsRenderCalculator.startPosition==\"number\")this.spreader.style.left=`${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;else if(t===0)this.spreader.style.left=\"0\";else throw new Error(\"Incorrect value of the columnsRenderCalculator\");this.spreader.style.right=\"\",this.needFullRender&&this.syncOverlayOffset()}syncOverlayOffset(){typeof this.wot.wtViewport.rowsRenderCalculator.startPosition==\"number\"?this.clone.wtTable.spreader.style.top=`${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`:this.clone.wtTable.spreader.style.top=\"\"}scrollTo(t,e){let o=this.getTableParentOffset(),r=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder,n=0;return e&&r.offsetWidth!==r.clientWidth&&(n=at()),e?(o+=this.sumCellSizes(0,t+1),o-=this.wot.wtViewport.getViewportWidth()):o+=this.sumCellSizes(this.wot.getSetting(\"fixedColumnsLeft\"),t),o+=n,this.setScrollPosition(o)}getTableParentOffset(){let t=this.wot.getSetting(\"preventOverflow\"),e=0;return!t&&this.trimmingContainer===window&&(e=this.wot.wtTable.holderOffset.left),e}getScrollPosition(){return Yo(this.mainTableScrollableElement)}adjustHeaderBordersPosition(t){let e=this.wot.wtTable.holder.parentNode,o=this.wot.getSetting(\"rowHeaders\"),i=this.wot.getSetting(\"fixedColumnsLeft\");if(this.wot.getSetting(\"totalRows\")?Y(e,\"emptyRows\"):L(e,\"emptyRows\"),i&&!o.length)L(e,\"innerBorderLeft\");else if(!i&&o.length){let n=z(e,\"innerBorderLeft\");t?L(e,\"innerBorderLeft\"):Y(e,\"innerBorderLeft\"),(!n&&t||n&&!t)&&this.wot.wtOverlays.adjustElementsSize()}}};I.registerOverlay(I.CLONE_LEFT,el);var ol=class extends I{constructor(t){super(t),this.clone=this.makeClone(I.CLONE_TOP)}shouldBeRendered(){return!!(this.wot.getSetting(\"fixedRowsTop\")||this.wot.getSetting(\"columnHeaders\").length)}resetFixedPosition(){if(!this.needFullRender||!this.wot.wtTable.holder.parentNode)return;let t=this.clone.wtTable.holder.parentNode,e=0,o=this.wot.getSetting(\"preventOverflow\");if(this.trimmingContainer===window&&(!o||o!==\"vertical\")){let i=this.wot.wtTable.hider.getBoundingClientRect(),r=Math.ceil(i.top),n=Math.ceil(i.bottom),l,a;l=this.wot.wtTable.hider.style.left,l=l===\"\"?0:l,r<0&&n-t.offsetHeight>0?a=-r:a=0,e=a,a+=\"px\",Eo(t,l,a)}else e=this.getScrollPosition(),Gt(t);this.adjustHeaderBordersPosition(e),this.adjustElementsSize()}setScrollPosition(t){let e=!1;return this.mainTableScrollableElement===window&&window.scrollY!==t?(window.scrollTo(qt(),t),e=!0):this.mainTableScrollableElement.scrollTop!==t&&(this.mainTableScrollableElement.scrollTop=t,e=!0),e}onScroll(){this.wot.getSetting(\"onScrollHorizontally\")}sumCellSizes(t,e){let o=this.wot.wtSettings.settings.defaultRowHeight,i=t,r=0;for(;i<e;){let n=this.wot.wtTable.getRowHeight(i);r+=n===void 0?o:n,i+=1}return r}adjustElementsSize(t=!1){this.updateTrimmingContainer(),(this.needFullRender||t)&&(this.adjustRootElementSize(),this.adjustRootChildrenSize(),t||(this.areElementSizesAdjusted=!0))}adjustRootElementSize(){let t=this.wot.wtTable.holder,e=t.clientWidth===t.offsetWidth?0:at(),i=this.clone.wtTable.holder.parentNode.style,r=this.wot.getSetting(\"preventOverflow\");if(this.trimmingContainer!==window||r===\"horizontal\"){let l=this.wot.wtViewport.getWorkspaceWidth()-e;l=Math.min(l,ve(this.wot.wtTable.wtRootElement)),i.width=`${l}px`}else i.width=\"\";this.clone.wtTable.holder.style.width=i.width;let n=lt(this.clone.wtTable.TABLE);i.height=`${n===0?n:n+4}px`}adjustRootChildrenSize(){let t=at();this.clone.wtTable.hider.style.width=this.hider.style.width,this.clone.wtTable.holder.style.width=this.clone.wtTable.holder.parentNode.style.width,t===0&&(t=30),this.clone.wtTable.holder.style.height=`${parseInt(this.clone.wtTable.holder.parentNode.style.height,10)+t}px`}applyToDOM(){let t=this.wot.getSetting(\"totalRows\");if(this.areElementSizesAdjusted||this.adjustElementsSize(),typeof this.wot.wtViewport.rowsRenderCalculator.startPosition==\"number\")this.spreader.style.top=`${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;else if(t===0)this.spreader.style.top=\"0\";else throw new Error(\"Incorrect value of the rowsRenderCalculator\");this.spreader.style.bottom=\"\",this.needFullRender&&this.syncOverlayOffset()}syncOverlayOffset(){typeof this.wot.wtViewport.columnsRenderCalculator.startPosition==\"number\"?this.clone.wtTable.spreader.style.left=`${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`:this.clone.wtTable.spreader.style.left=\"\"}scrollTo(t,e){let o=this.getTableParentOffset(),r=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder,n=0;if(e&&r.offsetHeight!==r.clientHeight&&(n=at()),e){let l=this.wot.getSetting(\"fixedRowsBottom\"),a=this.wot.getSetting(\"totalRows\");o+=this.sumCellSizes(0,t+1),o-=this.wot.wtViewport.getViewportHeight()-this.sumCellSizes(a-l,a),o+=1}else o+=this.sumCellSizes(this.wot.getSetting(\"fixedRowsTop\"),t);return o+=n,this.setScrollPosition(o)}getTableParentOffset(){return this.mainTableScrollableElement===window?this.wot.wtTable.holderOffset.top:0}getScrollPosition(){return so(this.mainTableScrollableElement)}redrawSelectionBorders(t){if(t&&t.cellRange){let e=t.getBorder(this.wot),o=t.getCorners();e.disappear(),e.appear(o)}}redrawAllSelectionsBorders(){let t=this.wot.selections;this.redrawSelectionBorders(t.getCell()),v(t.getAreas(),e=>{this.redrawSelectionBorders(e)}),this.redrawSelectionBorders(t.getFill()),this.wot.wtTable.wot.wtOverlays.leftOverlay.refresh()}adjustHeaderBordersPosition(t){let e=this.wot.wtTable.holder.parentNode;if(this.wot.getSetting(\"totalColumns\")?Y(e,\"emptyColumns\"):L(e,\"emptyColumns\"),this.wot.getSetting(\"fixedRowsTop\")===0&&this.wot.getSetting(\"columnHeaders\").length>0){let i=z(e,\"innerBorderTop\");t||this.wot.getSetting(\"totalRows\")===0?L(e,\"innerBorderTop\"):Y(e,\"innerBorderTop\"),(!i&&t||i&&!t)&&(this.wot.wtOverlays.adjustElementsSize(),this.redrawAllSelectionsBorders())}if(this.wot.getSetting(\"rowHeaders\").length===0){let i=this.clone.wtTable.THEAD.querySelectorAll(\"th:nth-of-type(2)\");if(i)for(let r=0;r<i.length;r++)i[r].style[\"border-left-width\"]=0}}};I.registerOverlay(I.CLONE_TOP,ol);var il=class extends I{constructor(t){super(t),this.clone=this.makeClone(I.CLONE_TOP_LEFT_CORNER)}shouldBeRendered(){return!!((this.wot.getSetting(\"fixedRowsTop\")||this.wot.getSetting(\"columnHeaders\").length)&&(this.wot.getSetting(\"fixedColumnsLeft\")||this.wot.getSetting(\"rowHeaders\").length))}resetFixedPosition(){if(this.updateTrimmingContainer(),!this.wot.wtTable.holder.parentNode)return;let t=this.clone.wtTable.holder.parentNode,e=lt(this.clone.wtTable.TABLE),o=st(this.clone.wtTable.TABLE),i=this.wot.getSetting(\"preventOverflow\");if(this.trimmingContainer===window){let r=this.wot.wtTable.hider.getBoundingClientRect(),n=Math.ceil(r.top),l=Math.ceil(r.left),a=Math.ceil(r.bottom),h=Math.ceil(r.right),u=\"0\",m=\"0\";(!i||i===\"vertical\")&&l<0&&h-t.offsetWidth>0&&(u=`${-l}px`),(!i||i===\"horizontal\")&&n<0&&a-t.offsetHeight>0&&(m=`${-n}px`),Eo(t,u,m)}else Gt(t);t.style.height=`${e===0?e:e+4}px`,t.style.width=`${o===0?o:o+4}px`}};I.registerOverlay(I.CLONE_TOP_LEFT_CORNER,il);var sl=class extends I{constructor(t){super(t),this.clone=this.makeClone(I.CLONE_BOTTOM)}repositionOverlay(){let t=at(),e=this.clone.wtTable.holder.parentNode;this.wot.wtTable.holder.clientHeight===this.wot.wtTable.holder.offsetHeight&&(t=0),e.style.top=\"\",e.style.bottom=`${t}px`}shouldBeRendered(){return!!this.wot.getSetting(\"fixedRowsBottom\")}resetFixedPosition(){if(!this.needFullRender||!this.wot.wtTable.holder.parentNode)return;let t=this.clone.wtTable.holder.parentNode,e=0;if(t.style.top=\"\",this.wot.wtOverlays.leftOverlay.trimmingContainer===window){let o=this.wot.wtTable.hider.getBoundingClientRect(),i=Math.ceil(o.bottom),r,n,l=document.body.offsetHeight;r=this.wot.wtTable.hider.style.left,r=r===\"\"?0:r,i>l?n=i-l:n=0,e=n,n+=\"px\",t.style.top=\"\",t.style.left=r,t.style.bottom=n}else e=this.getScrollPosition(),Gt(t),this.repositionOverlay();this.adjustHeaderBordersPosition(e)}setScrollPosition(t){this.mainTableScrollableElement===window?window.scrollTo(qt(),t):this.mainTableScrollableElement.scrollTop=t}onScroll(){this.wot.getSetting(\"onScrollVertically\")}sumCellSizes(t,e){let o=t,i=0,r=this.wot.wtSettings.settings.defaultRowHeight;for(;o<e;){let n=this.wot.wtTable.getRowHeight(o);i+=n===void 0?r:n,o+=1}return i}adjustElementsSize(t=!1){this.updateTrimmingContainer(),(this.needFullRender||t)&&(this.adjustRootElementSize(),this.adjustRootChildrenSize(),t||(this.areElementSizesAdjusted=!0))}adjustRootElementSize(){let t=this.wot.wtTable.holder,e=t.clientWidth===t.offsetWidth?0:at(),i=this.clone.wtTable.holder.parentNode.style;this.trimmingContainer===window?i.width=\"\":i.width=`${this.wot.wtViewport.getWorkspaceWidth()-e}px`,this.clone.wtTable.holder.style.width=i.width;let r=lt(this.clone.wtTable.TABLE);i.height=`${r}px`}adjustRootChildrenSize(){let t=at();this.clone.wtTable.hider.style.width=this.hider.style.width,this.clone.wtTable.holder.style.width=this.clone.wtTable.holder.parentNode.style.width,t===0&&(t=30),this.clone.wtTable.holder.style.height=`${parseInt(this.clone.wtTable.holder.parentNode.style.height,10)+t}px`}applyToDOM(){let t=this.wot.getSetting(\"totalRows\");if(this.areElementSizesAdjusted||this.adjustElementsSize(),typeof this.wot.wtViewport.rowsRenderCalculator.startPosition==\"number\")this.spreader.style.top=`${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;else if(t===0)this.spreader.style.top=\"0\";else throw new Error(\"Incorrect value of the rowsRenderCalculator\");this.spreader.style.bottom=\"\",this.needFullRender&&this.syncOverlayOffset()}syncOverlayOffset(){typeof this.wot.wtViewport.columnsRenderCalculator.startPosition==\"number\"?this.clone.wtTable.spreader.style.left=`${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`:this.clone.wtTable.spreader.style.left=\"\"}scrollTo(t,e){let o=this.getTableParentOffset(),r=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder,n=0;e&&r.offsetHeight!==r.clientHeight&&(n=at()),e?(o+=this.sumCellSizes(0,t+1),o-=this.wot.wtViewport.getViewportHeight(),o+=1):o+=this.sumCellSizes(this.wot.getSetting(\"fixedRowsBottom\"),t),o+=n,this.setScrollPosition(o)}getTableParentOffset(){return this.mainTableScrollableElement===window?this.wot.wtTable.holderOffset.top:0}getScrollPosition(){return so(this.mainTableScrollableElement)}adjustHeaderBordersPosition(t){if(this.wot.getSetting(\"fixedRowsBottom\")===0&&this.wot.getSetting(\"columnHeaders\").length>0){let e=this.wot.wtTable.holder.parentNode,o=z(e,\"innerBorderTop\");t?L(e,\"innerBorderTop\"):Y(e,\"innerBorderTop\"),(!o&&t||o&&!t)&&this.wot.wtOverlays.adjustElementsSize()}if(this.wot.getSetting(\"rowHeaders\").length===0){let e=this.clone.wtTable.THEAD.querySelector(\"th:nth-of-type(2)\");e&&(e.style[\"border-left-width\"]=0)}}};I.registerOverlay(I.CLONE_BOTTOM,sl);var rl=class extends I{constructor(t){super(t),this.clone=this.makeClone(I.CLONE_BOTTOM_LEFT_CORNER)}shouldBeRendered(){return!!(this.wot.getSetting(\"fixedRowsBottom\")&&(this.wot.getSetting(\"fixedColumnsLeft\")||this.wot.getSetting(\"rowHeaders\").length))}repositionOverlay(){let t=at(),e=this.clone.wtTable.holder.parentNode;this.wot.wtTable.holder.clientHeight===this.wot.wtTable.holder.offsetHeight&&(t=0),e.style.top=\"\",e.style.bottom=`${t}px`}resetFixedPosition(){if(this.updateTrimmingContainer(),!this.wot.wtTable.holder.parentNode)return;let t=this.clone.wtTable.holder.parentNode,e=lt(this.clone.wtTable.TABLE),o=st(this.clone.wtTable.TABLE);if(t.style.top=\"\",this.trimmingContainer===window){let i=this.wot.wtTable.hider.getBoundingClientRect(),r=Math.ceil(i.bottom),n=Math.ceil(i.left),l,a,h=document.body.offsetHeight;n<0?l=-n:l=0,r>h?a=r-h:a=0,a+=\"px\",l+=\"px\",t.style.top=\"\",t.style.left=l,t.style.bottom=a}else Gt(t),this.repositionOverlay();t.style.height=`${e}px`,t.style.width=`${o}px`}};I.registerOverlay(I.CLONE_BOTTOM_LEFT_CORNER,rl);var nl=class{constructor(t,e){e&&(this.eventManager=new G(t),this.instance=t,this.wot=t,this.settings=e,this.mouseDown=!1,this.main=null,this.top=null,this.left=null,this.bottom=null,this.right=null,this.topStyle=null,this.leftStyle=null,this.bottomStyle=null,this.rightStyle=null,this.cornerDefaultStyle={width:\"6px\",height:\"6px\",borderWidth:\"1px\",borderStyle:\"solid\",borderColor:\"#FFF\"},this.corner=null,this.cornerStyle=null,this.createBorders(e),this.registerListeners())}registerListeners(){this.eventManager.addEventListener(document.body,\"mousedown\",()=>this.onMouseDown()),this.eventManager.addEventListener(document.body,\"mouseup\",()=>this.onMouseUp());for(let t=0,e=this.main.childNodes.length;t<e;t++)this.eventManager.addEventListener(this.main.childNodes[t],\"mouseenter\",o=>this.onMouseEnter(o,this.main.childNodes[t]))}onMouseDown(){this.mouseDown=!0}onMouseUp(){this.mouseDown=!1}onMouseEnter(t,e){if(!this.mouseDown||!this.wot.getSetting(\"hideBorderOnMouseDownOver\"))return;t.preventDefault(),pt(t);let o=this,i=e.getBoundingClientRect();e.style.display=\"none\";function r(l){if(l.clientY<Math.floor(i.top)||l.clientY>Math.ceil(i.top+i.height)||l.clientX<Math.floor(i.left)||l.clientX>Math.ceil(i.left+i.width))return!0}function n(l){r(l)&&(o.eventManager.removeEventListener(document.body,\"mousemove\",n),e.style.display=\"block\")}this.eventManager.addEventListener(document.body,\"mousemove\",n)}createBorders(t){this.main=document.createElement(\"div\");let e=[\"top\",\"left\",\"bottom\",\"right\",\"corner\"],o=this.main.style;o.position=\"absolute\",o.top=0,o.left=0;for(let r=0;r<5;r++){let n=e[r],l=document.createElement(\"div\");l.className=`wtBorder ${this.settings.className||\"\"}`,this.settings[n]&&this.settings[n].hide&&(l.className+=\" hidden\"),o=l.style,o.backgroundColor=this.settings[n]&&this.settings[n].color?this.settings[n].color:t.border.color,o.height=this.settings[n]&&this.settings[n].width?`${this.settings[n].width}px`:`${t.border.width}px`,o.width=this.settings[n]&&this.settings[n].width?`${this.settings[n].width}px`:`${t.border.width}px`,this.main.appendChild(l)}this.top=this.main.childNodes[0],this.left=this.main.childNodes[1],this.bottom=this.main.childNodes[2],this.right=this.main.childNodes[3],this.topStyle=this.top.style,this.leftStyle=this.left.style,this.bottomStyle=this.bottom.style,this.rightStyle=this.right.style,this.corner=this.main.childNodes[4],this.corner.className+=\" corner\",this.cornerStyle=this.corner.style,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.height=this.cornerDefaultStyle.height,this.cornerStyle.border=[this.cornerDefaultStyle.borderWidth,this.cornerDefaultStyle.borderStyle,this.cornerDefaultStyle.borderColor].join(\" \"),$t()&&this.createMultipleSelectorHandles(),this.disappear();let i=this.wot.wtTable.bordersHolder;i||(i=document.createElement(\"div\"),i.className=\"htBorders\",this.wot.wtTable.bordersHolder=i,this.wot.wtTable.spreader.appendChild(i)),i.appendChild(this.main)}createMultipleSelectorHandles(){this.selectionHandles={topLeft:document.createElement(\"DIV\"),topLeftHitArea:document.createElement(\"DIV\"),bottomRight:document.createElement(\"DIV\"),bottomRightHitArea:document.createElement(\"DIV\")};let t=10,e=40;this.selectionHandles.topLeft.className=\"topLeftSelectionHandle\",this.selectionHandles.topLeftHitArea.className=\"topLeftSelectionHandle-HitArea\",this.selectionHandles.bottomRight.className=\"bottomRightSelectionHandle\",this.selectionHandles.bottomRightHitArea.className=\"bottomRightSelectionHandle-HitArea\",this.selectionHandles.styles={topLeft:this.selectionHandles.topLeft.style,topLeftHitArea:this.selectionHandles.topLeftHitArea.style,bottomRight:this.selectionHandles.bottomRight.style,bottomRightHitArea:this.selectionHandles.bottomRightHitArea.style};let o={position:\"absolute\",height:`${e}px`,width:`${e}px`,\"border-radius\":`${parseInt(e/1.5,10)}px`};X(o,(r,n)=>{this.selectionHandles.styles.bottomRightHitArea[n]=r,this.selectionHandles.styles.topLeftHitArea[n]=r});let i={position:\"absolute\",height:`${t}px`,width:`${t}px`,\"border-radius\":`${parseInt(t/1.5,10)}px`,background:\"#F5F5FF\",border:\"1px solid #4285c8\"};X(i,(r,n)=>{this.selectionHandles.styles.bottomRight[n]=r,this.selectionHandles.styles.topLeft[n]=r}),this.main.appendChild(this.selectionHandles.topLeft),this.main.appendChild(this.selectionHandles.bottomRight),this.main.appendChild(this.selectionHandles.topLeftHitArea),this.main.appendChild(this.selectionHandles.bottomRightHitArea)}isPartRange(t,e){let o=this.wot.selections.createOrGetArea();return!!(o.cellRange&&(t!==o.cellRange.to.row||e!==o.cellRange.to.col))}updateMultipleSelectionHandlesPosition(t,e,o,i,r,n){let l=parseInt(this.selectionHandles.styles.topLeft.width,10),a=parseInt(this.selectionHandles.styles.topLeftHitArea.width,10);this.selectionHandles.styles.topLeft.top=`${parseInt(o-l,10)}px`,this.selectionHandles.styles.topLeft.left=`${parseInt(i-l,10)}px`,this.selectionHandles.styles.topLeftHitArea.top=`${parseInt(o-a/4*3,10)}px`,this.selectionHandles.styles.topLeftHitArea.left=`${parseInt(i-a/4*3,10)}px`,this.selectionHandles.styles.bottomRight.top=`${parseInt(o+n,10)}px`,this.selectionHandles.styles.bottomRight.left=`${parseInt(i+r,10)}px`,this.selectionHandles.styles.bottomRightHitArea.top=`${parseInt(o+n-a/4,10)}px`,this.selectionHandles.styles.bottomRightHitArea.left=`${parseInt(i+r-a/4,10)}px`,this.settings.border.cornerVisible&&this.settings.border.cornerVisible()?(this.selectionHandles.styles.topLeft.display=\"block\",this.selectionHandles.styles.topLeftHitArea.display=\"block\",this.isPartRange(t,e)?(this.selectionHandles.styles.bottomRight.display=\"none\",this.selectionHandles.styles.bottomRightHitArea.display=\"none\"):(this.selectionHandles.styles.bottomRight.display=\"block\",this.selectionHandles.styles.bottomRightHitArea.display=\"block\")):(this.selectionHandles.styles.topLeft.display=\"none\",this.selectionHandles.styles.bottomRight.display=\"none\",this.selectionHandles.styles.topLeftHitArea.display=\"none\",this.selectionHandles.styles.bottomRightHitArea.display=\"none\"),t===this.wot.wtSettings.getSetting(\"fixedRowsTop\")||e===this.wot.wtSettings.getSetting(\"fixedColumnsLeft\")?(this.selectionHandles.styles.topLeft.zIndex=\"9999\",this.selectionHandles.styles.topLeftHitArea.zIndex=\"9999\"):(this.selectionHandles.styles.topLeft.zIndex=\"\",this.selectionHandles.styles.topLeftHitArea.zIndex=\"\")}appear(t){if(this.disabled)return;let e,o,i,r,n=this.wot.wtTable.getRenderedRowsCount();for(let C=0;C<n;C+=1){let S=this.wot.wtTable.rowFilter.renderedToSource(C);if(S>=t[0]&&S<=t[2]){e=S;break}}for(let C=n-1;C>=0;C-=1){let S=this.wot.wtTable.rowFilter.renderedToSource(C);if(S>=t[0]&&S<=t[2]){o=S;break}}let l=this.wot.wtTable.getRenderedColumnsCount();for(let C=0;C<l;C+=1){let S=this.wot.wtTable.columnFilter.renderedToSource(C);if(S>=t[1]&&S<=t[3]){i=S;break}}for(let C=l-1;C>=0;C-=1){let S=this.wot.wtTable.columnFilter.renderedToSource(C);if(S>=t[1]&&S<=t[3]){r=S;break}}if(e===void 0||i===void 0){this.disappear();return}let a=this.wot.wtTable.getCell(new M(e,i)),h=e!==o||i!==r,u=h?this.wot.wtTable.getCell(new M(o,r)):a,m=rt(a),w=h?rt(u):m,R=rt(this.wot.wtTable.TABLE),A=m.top,O=m.left,D=O-R.left-1,B=w.left+st(u)-O;if(this.isEntireColumnSelected(e,o)){let C=this.getDimensionsFromHeader(\"columns\",i,r,R),S=null;C&&([S,D,B]=C),S&&(a=S)}let $=A-R.top-1,et=w.top+lt(u)-A;if(this.isEntireRowSelected(i,r)){let C=this.getDimensionsFromHeader(\"rows\",e,o,R),S=null;C&&([S,$,et]=C),S&&(a=S)}let ft=je(a);parseInt(ft.borderTopWidth,10)>0&&($+=1,et=et>0?et-1:0),parseInt(ft.borderLeftWidth,10)>0&&(D+=1,B=B>0?B-1:0),this.topStyle.top=`${$}px`,this.topStyle.left=`${D}px`,this.topStyle.width=`${B}px`,this.topStyle.display=\"block\",this.leftStyle.top=`${$}px`,this.leftStyle.left=`${D}px`,this.leftStyle.height=`${et}px`,this.leftStyle.display=\"block\";let q=Math.floor(this.settings.border.width/2);this.bottomStyle.top=`${$+et-q}px`,this.bottomStyle.left=`${D}px`,this.bottomStyle.width=`${B}px`,this.bottomStyle.display=\"block\",this.rightStyle.top=`${$}px`,this.rightStyle.left=`${D+B-q}px`,this.rightStyle.height=`${et+1}px`,this.rightStyle.display=\"block\";let ct=this.settings.border.cornerVisible;ct=typeof ct==\"function\"?ct(this.settings.layerLevel):ct;let it=this.wot.getSetting(\"onModifyGetCellCoords\",o,r),[c,f]=[o,r];if(it&&Array.isArray(it)&&([,,c,f]=it),$t()||!ct||this.isPartRange(c,f))this.cornerStyle.display=\"none\";else{this.cornerStyle.top=`${$+et-4}px`,this.cornerStyle.left=`${D+B-4}px`,this.cornerStyle.borderRightWidth=this.cornerDefaultStyle.borderWidth,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.display=\"none\";let C=Be(this.wot.wtTable.TABLE),S=C===window;S&&(C=document.documentElement),r===this.wot.getSetting(\"totalColumns\")-1&&(S?u.getBoundingClientRect().left:u.offsetLeft)+st(u)+parseInt(this.cornerDefaultStyle.width,10)/2>=ve(C)&&(this.cornerStyle.left=`${Math.floor(D+B-3-parseInt(this.cornerDefaultStyle.width,10)/2)}px`,this.cornerStyle.borderRightWidth=0),o===this.wot.getSetting(\"totalRows\")-1&&(S?u.getBoundingClientRect().top:u.offsetTop)+lt(u)+parseInt(this.cornerDefaultStyle.height,10)/2>=Qt(C)&&(this.cornerStyle.top=`${Math.floor($+et-3-parseInt(this.cornerDefaultStyle.height,10)/2)}px`,this.cornerStyle.borderBottomWidth=0),this.cornerStyle.display=\"block\"}$t()&&this.updateMultipleSelectionHandlesPosition(o,r,$,D,B,et)}isEntireColumnSelected(t,e){return t===this.wot.wtTable.getFirstRenderedRow()&&e===this.wot.wtTable.getLastRenderedRow()}isEntireRowSelected(t,e){return t===this.wot.wtTable.getFirstRenderedColumn()&&e===this.wot.wtTable.getLastRenderedColumn()}getDimensionsFromHeader(t,e,o,i){let r=this.wot.wtTable.wtRootElement.parentNode,n=null,l=null,a=null,h=null,u=null,m=null,w=null,R=null;switch(t){case\"rows\":n=(...A)=>this.wot.wtTable.getRowHeader(...A),l=(...A)=>lt(...A),a=\"ht__selection--rows\",m=\"top\";break;case\"columns\":n=(...A)=>this.wot.wtTable.getColumnHeader(...A),l=(...A)=>st(...A),a=\"ht__selection--columns\",m=\"left\";break;default:}if(r.className.includes(a)){let A=this.wot.getSetting(\"columnHeaders\").length;if(w=n(e,A-1),R=n(o,A-1),!w||!R)return!1;let O=rt(w),D=rt(R);return w&&R&&(h=O[m]-i[m]-1,u=D[m]+l(R)-O[m]),[w,h,u]}return!1}changeBorderStyle(t,e){let o=this[t].style,i=e[t];!i||i.hide?L(this[t],\"hidden\"):(z(this[t],\"hidden\")&&Y(this[t],\"hidden\"),o.backgroundColor=i.color,(t===\"top\"||t===\"bottom\")&&(o.height=`${i.width}px`),(t===\"right\"||t===\"left\")&&(o.width=`${i.width}px`))}changeBorderToDefaultStyle(t){let e={width:1,color:\"#000\"},o=this[t].style;o.backgroundColor=e.color,o.width=`${e.width}px`,o.height=`${e.width}px`}toggleHiddenClass(t,e){this.changeBorderToDefaultStyle(t),e?L(this[t],\"hidden\"):Y(this[t],\"hidden\")}disappear(){this.topStyle.display=\"none\",this.leftStyle.display=\"none\",this.bottomStyle.display=\"none\",this.rightStyle.display=\"none\",this.cornerStyle.display=\"none\",$t()&&(this.selectionHandles.styles.topLeft.display=\"none\",this.selectionHandles.styles.bottomRight.display=\"none\")}},ll=nl;var al=class{constructor(t,e){this.settings=t,this.cellRange=e||null,this.instanceBorders={},this.classNames=[this.settings.className],this.classNameGenerator=this.linearClassNameGenerator(this.settings.className,this.settings.layerLevel)}getBorder(t){return this.instanceBorders[t.guid]||(this.instanceBorders[t.guid]=new ll(t,this.settings)),this.instanceBorders[t.guid]}isEmpty(){return this.cellRange===null}add(t){return this.isEmpty()?this.cellRange=new Ct(t):this.cellRange.expand(t),this}replace(t,e){if(!this.isEmpty()){if(this.cellRange.from.isEqual(t))return this.cellRange.from=e,!0;if(this.cellRange.to.isEqual(t))return this.cellRange.to=e,!0}return!1}clear(){return this.cellRange=null,this}getCorners(){let t=this.cellRange.getTopLeftCorner(),e=this.cellRange.getBottomRightCorner();return[t.row,t.col,e.row,e.col]}addClassAtCoords(t,e,o,i,r=!1){let n=t.wtTable.getCell(new M(e,o));if(typeof n==\"object\"){let l=i;r&&(l=this.classNameGenerator(n),this.classNames.includes(l)||this.classNames.push(l)),L(n,l)}return this}linearClassNameGenerator(t,e){return function o(i,r=-1){if(e===0||r===0)return t;let n=r>=0?r:e,l=t;n-=1;let a=n===0?t:`${t}-${n}`;if(z(i,a)){let h=n+1;l=`${t}-${h}`}else l=o(i,n);return l}}draw(t){if(this.isEmpty()){this.settings.border&&this.getBorder(t).disappear();return}let e=t.wtTable.getRenderedRowsCount(),o=t.wtTable.getRenderedColumnsCount(),i=this.getCorners(),[r,n,l,a]=i;for(let h=0;h<o;h+=1){let u=t.wtTable.columnFilter.renderedToSource(h);if(u>=n&&u<=a){let m=t.wtTable.getColumnHeader(u);if(m){let w=[];this.settings.highlightHeaderClassName&&w.push(this.settings.highlightHeaderClassName),this.settings.highlightColumnClassName&&w.push(this.settings.highlightColumnClassName),L(m,w)}}}for(let h=0;h<e;h+=1){let u=t.wtTable.rowFilter.renderedToSource(h);if(u>=r&&u<=l){let m=t.wtTable.getRowHeader(u);if(m){let w=[];this.settings.highlightHeaderClassName&&w.push(this.settings.highlightHeaderClassName),this.settings.highlightRowClassName&&w.push(this.settings.highlightRowClassName),L(m,w)}}for(let m=0;m<o;m+=1){let w=t.wtTable.columnFilter.renderedToSource(m);u>=r&&u<=l&&w>=n&&w<=a?this.settings.className&&this.addClassAtCoords(t,u,w,this.settings.className,this.settings.markIntersections):u>=r&&u<=l?this.settings.highlightRowClassName&&this.addClassAtCoords(t,u,w,this.settings.highlightRowClassName):w>=n&&w<=a&&this.settings.highlightColumnClassName&&this.addClassAtCoords(t,u,w,this.settings.highlightColumnClassName);let R=t.getSetting(\"onAfterDrawSelection\",u,w,i,this.settings.layerLevel);typeof R==\"string\"&&this.addClassAtCoords(t,u,w,R)}}t.getSetting(\"onBeforeDrawBorders\",i,this.settings.className),this.settings.border&&this.getBorder(t).appear(i)}},le=al;var vt={VIRGIN:\"STATE_VIRGIN\",EDITING:\"STATE_EDITING\",WAITING:\"STATE_WAITING\",FINISHED:\"STATE_FINISHED\"};function _t(s){this.instance=s,this.state=vt.VIRGIN,this._opened=!1,this._fullEditMode=!1,this._closeCallback=null,this.init()}_t.prototype._fireCallbacks=function(s){this._closeCallback&&(this._closeCallback(s),this._closeCallback=null)};_t.prototype.init=function(){};_t.prototype.getValue=function(){throw Error(\"Editor getValue() method unimplemented\")};_t.prototype.setValue=function(){throw Error(\"Editor setValue() method unimplemented\")};_t.prototype.open=function(){throw Error(\"Editor open() method unimplemented\")};_t.prototype.close=function(){throw Error(\"Editor close() method unimplemented\")};_t.prototype.prepare=function(s,t,e,o,i,r){this.TD=o,this.row=s,this.col=t,this.prop=e,this.originalValue=i,this.cellProperties=r,this.state=vt.VIRGIN};_t.prototype.extend=function(){let s=this.constructor;function t(...o){s.apply(this,o)}function e(o,i){function r(){}return r.prototype=i.prototype,o.prototype=new r,o.prototype.constructor=o,o}return e(t,s)};_t.prototype.saveValue=function(s,t){let e,o;t?(e=this.instance.getSelectedLast(),e[0]>e[2]&&(o=e[0],e[0]=e[2],e[2]=o),e[1]>e[3]&&(o=e[1],e[1]=e[3],e[3]=o)):e=[this.row,this.col,null,null],this.instance.populateFromArray(e[0],e[1],s,e[2],e[3],\"edit\")};_t.prototype.beginEditing=function(s,t){if(this.state===vt.VIRGIN){if(this.instance.view.scrollViewport(new M(this.row,this.col)),this.state=vt.EDITING,this.isInFullEditMode()){let e=typeof s==\"string\"?s:ne(this.originalValue);this.setValue(e)}this.open(t),this._opened=!0,this.focus(),this.instance.view.render(),this.instance.runHooks(\"afterBeginEditing\",this.row,this.col)}};_t.prototype.finishEditing=function(s,t,e){let o=this,i;if(e){let r=this._closeCallback;this._closeCallback=function(n){r&&r(n),e(n),o.instance.view.render()}}if(!this.isWaiting()){if(this.state===vt.VIRGIN){this.instance._registerTimeout(()=>{o._fireCallbacks(!0)});return}if(this.state===vt.EDITING){if(s){this.cancelChanges(),this.instance.view.render();return}let r=this.getValue();this.instance.getSettings().trimWhitespace?i=[[typeof r==\"string\"?String.prototype.trim.call(r||\"\"):r]]:i=[[r]],this.state=vt.WAITING,this.saveValue(i,t),this.instance.getCellValidator(this.cellProperties)?this.instance.addHookOnce(\"postAfterValidate\",n=>{o.state=vt.FINISHED,o.discardEditor(n)}):(this.state=vt.FINISHED,this.discardEditor(!0))}}};_t.prototype.cancelChanges=function(){this.state=vt.FINISHED,this.discardEditor()};_t.prototype.discardEditor=function(s){this.state===vt.FINISHED&&(s===!1&&this.cellProperties.allowInvalid!==!0?(this.instance.selectCell(this.row,this.col),this.focus(),this.state=vt.EDITING,this._fireCallbacks(!1)):(this.close(),this._opened=!1,this._fullEditMode=!1,this.state=vt.VIRGIN,this._fireCallbacks(!0)))};_t.prototype.enableFullEditMode=function(){this._fullEditMode=!0};_t.prototype.isInFullEditMode=function(){return this._fullEditMode};_t.prototype.isOpened=function(){return this._opened};_t.prototype.isWaiting=function(){return this.state===vt.WAITING};_t.prototype.checkEditorSection=function(){let s=this.instance.countRows(),t=\"\";return this.row<this.instance.getSettings().fixedRowsTop?this.col<this.instance.getSettings().fixedColumnsLeft?t=\"top-left-corner\":t=\"top\":this.instance.getSettings().fixedRowsBottom&&this.row>=s-this.instance.getSettings().fixedRowsBottom?this.col<this.instance.getSettings().fixedColumnsLeft?t=\"bottom-left-corner\":t=\"bottom\":this.col<this.instance.getSettings().fixedColumnsLeft&&(t=\"left\"),t};var Me=_t;var hc=Wo(ac());var Ut=Me.prototype.extend();Ut.prototype.init=function(){let s=this;this.createElements(),this.eventManager=new G(this),this.bindEvents(),this.autoResize=(0,hc.default)(),this.holderZIndex=-1,this.instance.addHook(\"afterDestroy\",()=>{s.destroy()})};Ut.prototype.prepare=function(s,t,e,o,i,r,...n){let l=this.state;if(Me.prototype.prepare.apply(this,[s,t,e,o,i,r,...n]),!r.readOnly){this.refreshDimensions(!0);let{allowInvalid:a,fragmentSelection:h}=r;a&&(this.TEXTAREA.value=\"\"),l!==vt.FINISHED&&this.hideEditableElement(),!h&&!$t()&&this.instance._registerImmediate(()=>this.focus())}};Ut.prototype.hideEditableElement=function(){this.textareaParentStyle.top=\"-9999px\",this.textareaParentStyle.left=\"-9999px\",this.textareaParentStyle.zIndex=\"-1\",this.textareaParentStyle.position=\"fixed\"};Ut.prototype.showEditableElement=function(){this.textareaParentStyle.zIndex=this.holderZIndex>=0?this.holderZIndex:\"\",this.textareaParentStyle.position=\"\"};Ut.prototype.getValue=function(){return this.TEXTAREA.value};Ut.prototype.setValue=function(s){this.TEXTAREA.value=s};Ut.prototype.beginEditing=function(...s){this.state===vt.VIRGIN&&(this.TEXTAREA.value=\"\",Me.prototype.beginEditing.apply(this,s))};var cc=function(t){let o=this.getActiveEditor(),i=(t.ctrlKey||t.metaKey)&&!t.altKey;if(!(t.target!==o.TEXTAREA||Jt(t))){switch(t.keyCode){case k.ARROW_RIGHT:o.isInFullEditMode()&&(!o.isWaiting()&&!o.allowKeyEventPropagation||!o.isWaiting()&&o.allowKeyEventPropagation&&!o.allowKeyEventPropagation(t.keyCode))&&pt(t);break;case k.ARROW_LEFT:o.isInFullEditMode()&&(!o.isWaiting()&&!o.allowKeyEventPropagation||!o.isWaiting()&&o.allowKeyEventPropagation&&!o.allowKeyEventPropagation(t.keyCode))&&pt(t);break;case k.ARROW_UP:case k.ARROW_DOWN:o.isInFullEditMode()&&(!o.isWaiting()&&!o.allowKeyEventPropagation||!o.isWaiting()&&o.allowKeyEventPropagation&&!o.allowKeyEventPropagation(t.keyCode))&&pt(t);break;case k.ENTER:{let r=this.selection.isMultiple();if(i&&!r||t.altKey){if(o.isOpened()){let n=di(o.TEXTAREA),l=o.getValue(),a=`${l.slice(0,n)}\n${l.slice(n)}`;o.setValue(a),ro(o.TEXTAREA,n+1)}else o.beginEditing(`${o.originalValue}\n`);pt(t)}t.preventDefault();break}case k.BACKSPACE:case k.DELETE:case k.HOME:case k.END:pt(t);break;default:break}[k.ARROW_UP,k.ARROW_RIGHT,k.ARROW_DOWN,k.ARROW_LEFT].indexOf(t.keyCode)===-1&&o.autoResize.resize(String.fromCharCode(t.keyCode))}};Ut.prototype.open=function(){this.refreshDimensions(),this.showEditableElement(),this.instance.addHook(\"beforeKeyDown\",cc)};Ut.prototype.close=function(){this.autoResize.unObserve(),document.activeElement===this.TEXTAREA&&this.instance.listen(),this.hideEditableElement(),this.instance.removeHook(\"beforeKeyDown\",cc)};Ut.prototype.focus=function(){this.TEXTAREA.select(),ro(this.TEXTAREA,this.TEXTAREA.value.length)};Ut.prototype.createElements=function(){this.TEXTAREA=document.createElement(\"TEXTAREA\"),this.TEXTAREA.tabIndex=-1,L(this.TEXTAREA,\"handsontableInput\"),this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,this.TEXTAREA_PARENT=document.createElement(\"DIV\"),L(this.TEXTAREA_PARENT,\"handsontableInputHolder\"),this.textareaParentStyle=this.TEXTAREA_PARENT.style,this.textareaParentStyle.zIndex=\"-1\",this.TEXTAREA_PARENT.appendChild(this.TEXTAREA),this.instance.rootElement.appendChild(this.TEXTAREA_PARENT)};Ut.prototype.getEditedCell=function(){let s=this.checkEditorSection(),t;switch(s){case\"top\":t=this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({row:this.row,col:this.col}),this.holderZIndex=101;break;case\"top-left-corner\":t=this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({row:this.row,col:this.col}),this.holderZIndex=103;break;case\"bottom-left-corner\":t=this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell({row:this.row,col:this.col}),this.holderZIndex=103;break;case\"left\":t=this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({row:this.row,col:this.col}),this.holderZIndex=102;break;case\"bottom\":t=this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.getCell({row:this.row,col:this.col}),this.holderZIndex=102;break;default:t=this.instance.getCell(this.row,this.col),this.holderZIndex=-1;break}return t!==-1&&t!==-2?t:void 0};Ut.prototype.refreshValue=function(){let s=this.instance.toPhysicalRow(this.row),t=this.instance.getSourceDataAtCell(s,this.col);this.originalValue=t,this.setValue(t),this.refreshDimensions()};Ut.prototype.refreshDimensions=function(s=!1){if(this.state!==vt.EDITING&&!s)return;if(this.TD=this.getEditedCell(),!this.TD){s||this.close(!0);return}let t=rt(this.TD),e=rt(this.instance.rootElement),o=this.instance.view.wt.wtOverlays.topOverlay.mainTableScrollableElement,i=this.instance.view.wt.wtOverlays.leftOverlay.mainTableScrollableElement,r=this.instance.countRows(),n=o!==window?o.scrollTop:0,l=i!==window?i.scrollLeft:0,a=this.checkEditorSection(),h=[\"\",\"left\"].includes(a)?n:0,u=[\"\",\"top\",\"bottom\"].includes(a)?l:0,m=t.top===e.top?0:1,w=this.instance.getSettings(),R=this.instance.hasColHeaders(),A=this.TD.style.backgroundColor,O=t.top-e.top-m-h,D=t.left-e.left-1-u,B;switch(a){case\"top\":B=re(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode);break;case\"left\":B=re(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode);break;case\"top-left-corner\":B=re(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode);break;case\"bottom-left-corner\":B=re(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);break;case\"bottom\":B=re(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode);break;default:break}(R&&this.instance.getSelectedLast()[0]===0||w.fixedRowsBottom&&this.instance.getSelectedLast()[0]===r-w.fixedRowsBottom)&&(O+=1),this.instance.getSelectedLast()[1]===0&&(D+=1),B&&B!==-1?this.textareaParentStyle[B[0]]=B[1]:Gt(this.TEXTAREA_PARENT),this.textareaParentStyle.top=`${O}px`,this.textareaParentStyle.left=`${D}px`,this.showEditableElement();let $=this.instance.view.wt.wtViewport.rowsRenderCalculator.startPosition,et=this.instance.view.wt.wtViewport.columnsRenderCalculator.startPosition,ft=this.instance.view.wt.wtOverlays.leftOverlay.getScrollPosition(),q=this.instance.view.wt.wtOverlays.topOverlay.getScrollPosition(),ct=at(),it=this.TD.offsetTop+$-q,c=this.TD.offsetLeft+et-ft,f=ve(this.TD)-8,C=Mn(o)?ct:0,S=Hn(i)?ct:0,N=this.instance.view.maximumVisibleElementWidth(c)-9-C,g=this.TD.scrollHeight+1,y=Math.max(this.instance.view.maximumVisibleElementHeight(it)-S,23),E=je(this.TD);this.TEXTAREA.style.fontSize=E.fontSize,this.TEXTAREA.style.fontFamily=E.fontFamily,this.TEXTAREA.style.backgroundColor=A,this.autoResize.init(this.TEXTAREA,{minHeight:Math.min(g,y),maxHeight:y,minWidth:Math.min(f,N),maxWidth:N},!0)};Ut.prototype.bindEvents=function(){let s=this;this.eventManager.addEventListener(this.TEXTAREA,\"cut\",t=>{bt(t)}),this.eventManager.addEventListener(this.TEXTAREA,\"paste\",t=>{bt(t)}),this.instance.addHook(\"afterScrollHorizontally\",()=>{s.refreshDimensions()}),this.instance.addHook(\"afterScrollVertically\",()=>{s.refreshDimensions()}),this.instance.addHook(\"afterColumnResize\",()=>{s.refreshDimensions(),s.focus()}),this.instance.addHook(\"afterRowResize\",()=>{s.refreshDimensions(),s.focus()}),this.instance.addHook(\"afterDestroy\",()=>{s.eventManager.destroy()})};Ut.prototype.destroy=function(){this.eventManager.destroy()};var zt=Ut;var qe=zt.prototype.extend();qe.prototype.createElements=function(...s){zt.prototype.createElements.apply(this,s);let t=document.createElement(\"DIV\");t.className=\"handsontableEditor\",this.TEXTAREA_PARENT.appendChild(t),this.htContainer=t,this.assignHooks()};qe.prototype.prepare=function(s,t,e,o,i,r,...n){zt.prototype.prepare.apply(this,[s,t,e,o,i,r,...n]);let l=this,a={startRows:0,startCols:0,minRows:0,minCols:0,className:\"listbox\",copyPaste:!1,autoColumnSize:!1,autoRowSize:!1,readOnly:!0,fillHandle:!1,autoWrapCol:!1,autoWrapRow:!1,afterOnCellMouseDown(h,u){let m=this.getSourceData(u.row,u.col);m!==void 0&&l.setValue(m),l.instance.destroyEditor()}};this.cellProperties.handsontable&&Ft(a,r.handsontable),this.htOptions=a};var uc=function(s){if(Jt(s))return;let t=this.getActiveEditor(),e=t.htEditor.getInstance(),o,i;if(s.keyCode===k.ARROW_DOWN){if(!e.getSelectedLast()&&!e.flipped)o=0;else if(e.getSelectedLast()){if(e.flipped)o=e.getSelectedLast()[0]+1;else if(!e.flipped){let r=e.countRows()-1;i=e.getSelectedLast()[0],o=Math.min(r,i+1)}}}else s.keyCode===k.ARROW_UP&&(!e.getSelectedLast()&&e.flipped?o=e.countRows()-1:e.getSelectedLast()&&(e.flipped?(i=e.getSelectedLast()[0],o=Math.max(0,i-1)):(i=e.getSelectedLast()[0],o=i-1)));o!==void 0&&(o<0||e.flipped&&o>e.countRows()-1?e.deselectCell():e.selectCell(o,0),e.getData().length&&(s.preventDefault(),pt(s),t.instance.listen(),t.TEXTAREA.focus()))};qe.prototype.open=function(...s){this.instance.addHook(\"beforeKeyDown\",uc),zt.prototype.open.apply(this,s),this.htEditor&&this.htEditor.destroy(),this.htContainer.style.display===\"none\"&&(this.htContainer.style.display=\"\"),this.htEditor=new this.instance.constructor(this.htContainer,this.htOptions),this.htEditor.init(),this.htEditor.rootElement.style.display=\"\",this.cellProperties.strict?this.htEditor.selectCell(0,0):this.htEditor.deselectCell(),ro(this.TEXTAREA,0,this.TEXTAREA.value.length)};qe.prototype.close=function(...s){this.htEditor.rootElement.style.display=\"none\",this.instance.removeHook(\"beforeKeyDown\",uc),zt.prototype.close.apply(this,s)};qe.prototype.focus=function(...s){zt.prototype.focus.apply(this,s)};qe.prototype.beginEditing=function(...s){let t=this.instance.getSettings().onBeginEditing;t&&t()===!1||zt.prototype.beginEditing.apply(this,s)};qe.prototype.finishEditing=function(...s){if(this.htEditor&&this.htEditor.isListening()&&this.instance.listen(),this.htEditor&&this.htEditor.getSelectedLast()){let t=this.htEditor.getInstance().getValue();t!==void 0&&this.setValue(t)}return zt.prototype.finishEditing.apply(this,s)};qe.prototype.assignHooks=function(){this.instance.addHook(\"afterDestroy\",()=>{this.htEditor&&this.htEditor.destroy()})};var He=qe;var Et=He.prototype.extend();Et.prototype.init=function(...s){He.prototype.init.apply(this,s),this.query=null,this.strippedChoices=[],this.rawChoices=[]};Et.prototype.getValue=function(){let s=this.rawChoices.find(t=>this.stripValueIfNeeded(t)===this.TEXTAREA.value);return mt(s)?s:this.TEXTAREA.value};Et.prototype.createElements=function(...s){He.prototype.createElements.apply(this,s),L(this.htContainer,\"autocompleteEditor\"),L(this.htContainer,window.navigator.platform.indexOf(\"Mac\")===-1?\"\":\"htMacScroll\")};var Ys=!1;function dc(s){Ys=!1;let t=this.getActiveEditor();if(Wn(s.keyCode)||s.keyCode===k.BACKSPACE||s.keyCode===k.DELETE||s.keyCode===k.INSERT){let e=0;if(s.keyCode===k.C&&(s.ctrlKey||s.metaKey))return;t.isOpened()||(e+=10),t.htEditor&&t.instance._registerTimeout(()=>{t.queryChoices(t.TEXTAREA.value),Ys=!0},e)}}Et.prototype.prepare=function(...s){He.prototype.prepare.apply(this,s)};Et.prototype.open=function(...s){this.instance.addHook(\"beforeKeyDown\",dc),this.TEXTAREA_PARENT.style.overflow=\"auto\",He.prototype.open.apply(this,s),this.TEXTAREA_PARENT.style.overflow=\"\";let t=this.htEditor.getInstance(),e=this,o=this.cellProperties.trimDropdown===void 0?!0:this.cellProperties.trimDropdown;this.showEditableElement(),this.focus(),this.htContainer.parentNode!==document.body&&(this._originalParent=this.htContainer.parentNode,document.body.appendChild(this.htContainer)),this.htContainer.style.position=\"absolute\",this.htContainer.style.zIndex=\"9999\",this.htContainer.style.top=\"-9999px\",this.htContainer.style.left=\"-9999px\",this._onScrollUpdatePosition=()=>{this.htContainer.parentNode===document.body&&this.TD&&this.updateDropdownPosition()},this.instance.addHook(\"afterScrollHorizontally\",this._onScrollUpdatePosition),this.instance.addHook(\"afterScrollVertically\",this._onScrollUpdatePosition),t.updateSettings({colWidths:o?[st(this.TEXTAREA)-2]:void 0,width:o?st(this.TEXTAREA)+at()+2:void 0,afterRenderer(i,r,n,l,a){let{filteringCaseSensitive:h,allowHtml:u}=e.cellProperties,m=ne(a),w,R;m&&!u&&(w=h===!0?m.indexOf(this.query):m.toLowerCase().indexOf(e.query.toLowerCase()),w!==-1&&(R=m.substr(w,e.query.length),m=m.replace(R,`<strong>${R}</strong>`))),i.innerHTML=m},autoColumnSize:!0,modifyColWidth(i,r){let n=this.getPlugin(\"autoColumnSize\").widths,l=i;return n[r]&&(l=n[r]),o?l:l+15}}),this.htEditor.view.wt.wtTable.holder.parentNode.style[\"padding-right\"]=`${at()+2}px`,Ys&&(Ys=!1),e.instance._registerTimeout(()=>{e.queryChoices(e.TEXTAREA.value)})};Et.prototype.updateDropdownPosition=function(){if(this.htContainer.parentNode===document.body&&this.TD){let s=this.TD.getBoundingClientRect(),t=window.pageYOffset||document.documentElement.scrollTop,e=window.pageXOffset||document.documentElement.scrollLeft;this.htContainer.style.top=`${s.bottom+t}px`,this.htContainer.style.left=`${s.left+e}px`}};Et.prototype.queryChoices=function(s){this.query=s;let t=this.cellProperties.source;typeof t==\"function\"?t.call(this.cellProperties,s,e=>{this.rawChoices=e,this.updateChoicesList(this.stripValuesIfNeeded(e))}):Array.isArray(t)?(this.rawChoices=t,this.updateChoicesList(this.stripValuesIfNeeded(t))):this.updateChoicesList([])};Et.prototype.updateChoicesList=function(s){let t=di(this.TEXTAREA),e=vn(this.TEXTAREA),o=this.cellProperties.sortByRelevance,i=this.cellProperties.filter,r=null,n=null,l=s;o&&(r=Et.sortByRelevance(this.stripValueIfNeeded(this.getValue()),l,this.cellProperties.filteringCaseSensitive));let a=Array.isArray(r)?r.length:0;if(i===!1)a&&(n=r[0]);else{let h=[];for(let u=0,m=l.length;u<m&&!(o&&a<=u);u++)a?h.push(l[r[u]]):h.push(l[u]);n=0,l=h}this.strippedChoices=l,this.htEditor.loadData(qr([l])),this.updateDropdownHeight(),this.flipDropdownIfNeeded(),this.cellProperties.strict===!0&&this.highlightBestMatchingChoice(n),this.instance.listen(!1),ro(this.TEXTAREA,t,t===e?void 0:e)};Et.prototype.flipDropdownIfNeeded=function(){if(this.htContainer.parentNode===document.body){this.updateDropdownPosition();let u=this.TD.getBoundingClientRect(),m=this.getDropdownHeight(),w=window.innerHeight-u.bottom,R=u.top;if(m>w&&R>w){let A=window.pageYOffset||document.documentElement.scrollTop;this.htContainer.style.top=`${u.top+A-m}px`,this.htEditor.flipped=!0}else this.htEditor.flipped=void 0;return!!this.htEditor.flipped}let s=rt(this.TEXTAREA),t=lt(this.TEXTAREA),e=this.getDropdownHeight(),o=Be(this.instance.view.wt.wtTable.TABLE),i=o.scrollTop,r=lt(this.instance.view.wt.wtTable.THEAD),n={row:0,col:0};o!==window&&(n=rt(o));let l=s.top-n.top-r+i,a=o.scrollHeight-l-r-t,h=e>a&&l>a;return h?this.flipDropdown(e):this.unflipDropdown(),this.limitDropdownIfNeeded(h?l:a,e),h};Et.prototype.limitDropdownIfNeeded=function(s,t){if(t>s){let e=0,o=0,i=0,r=null;do i=this.htEditor.getRowHeight(o)||this.htEditor.view.wt.wtSettings.settings.defaultRowHeight,e+=i,o+=1;while(e<s);r=e-i,this.htEditor.flipped&&(this.htEditor.rootElement.style.top=`${parseInt(this.htEditor.rootElement.style.top,10)+t-r}px`),this.setDropdownHeight(e-i)}};Et.prototype.flipDropdown=function(s){let t=this.htEditor.rootElement.style;t.position=\"absolute\",t.top=`${-s}px`,this.htEditor.flipped=!0};Et.prototype.unflipDropdown=function(){let s=this.htEditor.rootElement.style;s.position===\"absolute\"&&(s.position=\"\",s.top=\"\"),this.htEditor.flipped=void 0};Et.prototype.updateDropdownHeight=function(){let s=this.htEditor.getColWidth(0)+at()+2,t=this.cellProperties.trimDropdown;this.htEditor.updateSettings({height:this.getDropdownHeight(),width:t?void 0:s}),this.htEditor.view.wt.wtTable.alignOverlaysWithTrimmingContainer()};Et.prototype.setDropdownHeight=function(s){this.htEditor.updateSettings({height:s})};Et.prototype.finishEditing=function(s,...t){He.prototype.finishEditing.apply(this,[s,...t])};Et.prototype.highlightBestMatchingChoice=function(s){typeof s==\"number\"?this.htEditor.selectCell(s,0,void 0,void 0,void 0,!1):this.htEditor.deselectCell()};Et.sortByRelevance=function(s,t,e){let o=[],i,r=s.length,n,l,a=[],h,u=t.length;if(r===0){for(h=0;h<u;h++)a.push(h);return a}for(h=0;h<u;h++)i=Vs(ne(t[h])),e?n=i.indexOf(s):n=i.toLowerCase().indexOf(s.toLowerCase()),n!==-1&&(l=i.length-n-r,o.push({baseIndex:h,index:n,charsLeft:l,value:i}));for(o.sort((m,w)=>{if(w.index===-1)return-1;if(m.index===-1)return 1;if(m.index<w.index)return-1;if(w.index<m.index)return 1;if(m.index===w.index){if(m.charsLeft<w.charsLeft)return-1;if(m.charsLeft>w.charsLeft)return 1}return 0}),h=0,u=o.length;h<u;h++)a.push(o[h].baseIndex);return a};Et.prototype.getDropdownHeight=function(){let s=this.htEditor.getInstance().getRowHeight(0)||23,t=this.cellProperties.visibleRows;return this.strippedChoices.length>=t?t*s:this.strippedChoices.length*s+8};Et.prototype.stripValueIfNeeded=function(s){return this.stripValuesIfNeeded([s])[0]};Et.prototype.stripValuesIfNeeded=function(s){let{allowHtml:t}=this.cellProperties,e=ht(s,i=>ne(i));return ht(e,i=>t?i:Vs(i))};Et.prototype.allowKeyEventPropagation=function(s){let t=this.htEditor.getSelectedRangeLast(),e={row:t?t.from.row:-1},o=!1;return s===k.ARROW_DOWN&&e.row>0&&e.row<this.htEditor.countRows()-1&&(o=!0),s===k.ARROW_UP&&e.row>-1&&(o=!0),o};Et.prototype.close=function(...s){this._onScrollUpdatePosition&&(this.instance.removeHook(\"afterScrollHorizontally\",this._onScrollUpdatePosition),this.instance.removeHook(\"afterScrollVertically\",this._onScrollUpdatePosition),this._onScrollUpdatePosition=null),this._originalParent&&this.htContainer.parentNode===document.body&&(this._originalParent.appendChild(this.htContainer),this.htContainer.style.position=\"\",this.htContainer.style.zIndex=\"\",this.htContainer.style.top=\"\",this.htContainer.style.left=\"\"),this.instance.removeHook(\"beforeKeyDown\",dc),He.prototype.close.apply(this,s)};Et.prototype.discardEditor=function(...s){He.prototype.discardEditor.apply(this,s),this.instance.view.render()};var Gs=Et;var hl=class extends Me{beginEditing(t,e){if(e&&e.type===\"mouseup\"){let o=this.TD.querySelector('input[type=\"checkbox\"]');z(o,\"htBadValue\")||o.click()}}finishEditing(){}init(){}open(){}close(){}getValue(){}setValue(){}focus(){}},fc=hl;So();var ul=Wo(pc());var dl=class extends zt{constructor(t){super(t),this.defaultDateFormat=\"DD/MM/YYYY\",this.isCellEdited=!1,this.parentDestroyed=!1}init(){if(typeof St!=\"function\")throw new Error(\"You need to include moment.js to your project.\");if(typeof ul.default!=\"function\")throw new Error(\"You need to include Pikaday to your project.\");super.init(),this.instance.addHook(\"afterDestroy\",()=>{this.parentDestroyed=!0,this.destroyElements()})}createElements(){super.createElements(),this.datePicker=document.createElement(\"DIV\"),this.datePickerStyle=this.datePicker.style,this.datePickerStyle.position=\"absolute\",this.datePickerStyle.top=0,this.datePickerStyle.left=0,this.datePickerStyle.zIndex=9999,L(this.datePicker,\"htDatepickerHolder\"),document.body.appendChild(this.datePicker),this.$datePicker=new ul.default(this.getDatePickerConfig()),new G(this).addEventListener(this.datePicker,\"mousedown\",e=>bt(e)),this.hideDatepicker()}destroyElements(){this.$datePicker.destroy()}prepare(t,e,o,i,r,n){super.prepare(t,e,o,i,r,n)}open(t=null){super.open(),this.showDatepicker(t)}close(){this._opened=!1,this.instance._registerTimeout(()=>{this.instance._refreshBorders()}),super.close()}finishEditing(t=!1,e=!1){if(t){let o=this.originalValue;o!==void 0&&this.setValue(o)}this.hideDatepicker(),super.finishEditing(t,e)}showDatepicker(t){this.$datePicker.config(this.getDatePickerConfig());let e=this.TD.getBoundingClientRect(),o=this.cellProperties.dateFormat||this.defaultDateFormat,i=this.$datePicker.config(),r,n=this.instance.view.isMouseDown(),l=t?Ri(t.keyCode):!1;this.datePickerStyle.top=`${window.pageYOffset+e.top+lt(this.TD)}px`,this.datePickerStyle.left=`${window.pageXOffset+e.left}px`,this.$datePicker._onInputFocus=function(){},i.format=o,this.originalValue?(r=this.originalValue,St(r,o,!0).isValid()&&this.$datePicker.setMoment(St(r,o),!0),this.getValue()!==this.originalValue&&this.setValue(this.originalValue),!l&&!n&&this.setValue(\"\")):this.cellProperties.defaultDate?(r=this.cellProperties.defaultDate,i.defaultDate=r,St(r,o,!0).isValid()&&this.$datePicker.setMoment(St(r,o),!0),!l&&!n&&this.setValue(\"\")):this.$datePicker.gotoToday(),this.datePickerStyle.display=\"block\",this.$datePicker.show()}hideDatepicker(){this.datePickerStyle.display=\"none\",this.$datePicker.hide()}getDatePickerConfig(){let t=this.TEXTAREA,e={};this.cellProperties&&this.cellProperties.datePickerConfig&&eo(e,this.cellProperties.datePickerConfig);let o=e.onSelect,i=e.onClose;return e.field=t,e.trigger=t,e.container=this.datePicker,e.bound=!1,e.format=e.format||this.defaultDateFormat,e.reposition=e.reposition||!1,e.onSelect=r=>{let n=r;isNaN(n.getTime())||(n=St(n).format(this.cellProperties.dateFormat||this.defaultDateFormat)),this.setValue(n),this.hideDatepicker(),o&&o()},e.onClose=()=>{this.parentDestroyed||this.finishEditing(!1),i&&i()},e}},gc=dl;var Xs=class extends Gs{prepare(t,e,o,i,r,n){super.prepare(t,e,o,i,r,n),this.cellProperties.filter=!1,this.cellProperties.strict=!0}};V.getSingleton().add(\"beforeValidate\",function(s,t,e){let o=this.getCellMeta(t,this.propToCol(e));o.editor===Xs&&o.strict===void 0&&(o.filter=!1,o.strict=!0)});var wc=Xs;var fl=class extends zt{},Cc=fl;var ml=class extends zt{createElements(){super.createElements(),this.TEXTAREA=document.createElement(\"input\"),this.TEXTAREA.setAttribute(\"type\",\"password\"),this.TEXTAREA.className=\"handsontableInput\",this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,xt(this.TEXTAREA_PARENT),this.TEXTAREA_PARENT.appendChild(this.TEXTAREA)}},yc=ml;var ae=Me.prototype.extend();ae.prototype.init=function(){this.select=document.createElement(\"SELECT\"),L(this.select,\"htSelectEditor\"),this.select.style.display=\"none\",this.instance.rootElement.appendChild(this.select),this.registerHooks()};ae.prototype.registerHooks=function(){this.instance.addHook(\"afterScrollHorizontally\",()=>this.refreshDimensions()),this.instance.addHook(\"afterScrollVertically\",()=>this.refreshDimensions()),this.instance.addHook(\"afterColumnResize\",()=>this.refreshDimensions()),this.instance.addHook(\"afterRowResize\",()=>this.refreshDimensions())};ae.prototype.prepare=function(...s){Me.prototype.prepare.apply(this,s);let t=this.cellProperties.selectOptions,e;typeof t==\"function\"?e=this.prepareOptions(t(this.row,this.col,this.prop)):e=this.prepareOptions(t),xt(this.select),X(e,(o,i)=>{let r=document.createElement(\"OPTION\");r.value=i,Te(r,o),this.select.appendChild(r)})};ae.prototype.prepareOptions=function(s){let t={};if(Array.isArray(s))for(let e=0,o=s.length;e<o;e++)t[s[e]]=s[e];else typeof s==\"object\"&&(t=s);return t};ae.prototype.getValue=function(){return this.select.value};ae.prototype.setValue=function(s){this.select.value=s};var Ec=function(s){let e=this.getActiveEditor(),o=e.select.selectedIndex-1,i=e.select.selectedIndex+1;switch(s.keyCode){case k.ARROW_UP:o>=0&&(e.select[o].selected=!0),pt(s),s.preventDefault();break;case k.ARROW_DOWN:i<=e.select.length-1&&(e.select[i].selected=!0),pt(s),s.preventDefault();break;default:break}};ae.prototype.open=function(){this._opened=!0,this.refreshDimensions(),this.select.style.display=\"\",this.instance.addHook(\"beforeKeyDown\",Ec)};ae.prototype.close=function(){this._opened=!1,this.select.style.display=\"none\",this.instance.removeHook(\"beforeKeyDown\",Ec)};ae.prototype.focus=function(){this.select.focus()};ae.prototype.refreshValue=function(){let s=this.instance.getSourceDataAtCell(this.row,this.prop);this.originalValue=s,this.setValue(s),this.refreshDimensions()};ae.prototype.refreshDimensions=function(){if(this.state!==vt.EDITING)return;if(this.TD=this.getEditedCell(),!this.TD){this.close();return}let s=rt(this.TD),t=rt(this.instance.rootElement),e=be(this.TD),o=this.checkEditorSection(),i=st(this.TD)+1,r=lt(this.TD)+1,n=s.top-t.top-1-(e.scrollTop||0),l=s.left-t.left-1-(e.scrollLeft||0),a;switch(o){case\"top\":a=re(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode);break;case\"left\":a=re(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode);break;case\"top-left-corner\":a=re(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode);break;case\"bottom-left-corner\":a=re(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);break;case\"bottom\":a=re(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode);break;default:break}this.instance.getSelectedLast()[0]===0&&(n+=1),this.instance.getSelectedLast()[1]===0&&(l+=1);let h=this.select.style;a&&a!==-1?h[a[0]]=a[1]:Gt(this.select);let u=je(this.TD);parseInt(u.borderTopWidth,10)>0&&(r-=1),parseInt(u.borderLeftWidth,10)>0&&(i-=1),h.height=`${r}px`,h.minWidth=`${i}px`,h.top=`${n}px`,h.left=`${l}px`,h.margin=\"0px\"};ae.prototype.getEditedCell=function(){let s=this.checkEditorSection(),t;switch(s){case\"top\":t=this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({row:this.row,col:this.col}),this.select.style.zIndex=101;break;case\"corner\":t=this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({row:this.row,col:this.col}),this.select.style.zIndex=103;break;case\"left\":t=this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({row:this.row,col:this.col}),this.select.style.zIndex=102;break;default:t=this.instance.getCell(this.row,this.col),this.select.style.zIndex=\"\";break}return t!==-1&&t!==-2?t:void 0};var Sc=ae;var pl=new WeakMap,{register:Jf,getItem:Rc,hasItem:Zf,getNames:Tc,getValues:$y}=Pt(\"editors\");Xt(\"base\",Me);Xt(\"autocomplete\",Gs);Xt(\"checkbox\",fc);Xt(\"date\",gc);Xt(\"dropdown\",wc);Xt(\"handsontable\",He);Xt(\"numeric\",Cc);Xt(\"password\",yc);Xt(\"select\",Sc);Xt(\"text\",zt);function tm(s){let t={},e=s;this.getConstructor=function(){return s},this.getInstance=function(o){return o.guid in t||(t[o.guid]=new e(o)),t[o.guid]},V.getSingleton().add(\"afterDestroy\",function(){t[this.guid]=null})}function js(s,t){let e;if(typeof s==\"function\")pl.get(s)||Xt(null,s),e=pl.get(s);else if(typeof s==\"string\")e=Rc(s);else throw Error('Only strings and functions can be passed as \"editor\" parameter');if(!e)throw Error(`No editor registered under name \"${s}\"`);return e.getInstance(t)}function Nt(s){if(!Zf(s))throw Error(`No registered editor found under \"${s}\" name`);return Rc(s).getConstructor()}function Xt(s,t){let e=new tm(t);typeof s==\"string\"&&Jf(s,e),pl.set(t,e)}function em(s,t,e,o,i,r,n){let l=[],a=[];n.className&&(t.className?t.className=`${t.className} ${n.className}`:t.className=n.className),n.readOnly&&l.push(n.readOnlyCellClassName),n.valid===!1&&n.invalidCellClassName?l.push(n.invalidCellClassName):a.push(n.invalidCellClassName),n.wordWrap===!1&&n.noWordWrapClassName&&l.push(n.noWordWrapClassName),!r&&n.placeholder&&l.push(n.placeholderCellClassName),Y(t,a),L(t,l)}var bc=em;var om=document.createElement(\"DIV\");om.className=\"htAutocompleteWrapper\";var gl=document.createElement(\"DIV\");gl.className=\"htAutocompleteArrow\";gl.appendChild(document.createTextNode(\"\\u25BC\"));function im(s,t,e,o,i,r,n,...l){let a=n.allowHtml?\"html\":\"text\",h=gl.cloneNode(!0);if(nt(a).apply(this,[s,t,e,o,i,r,n,...l]),t.firstChild||t.appendChild(document.createTextNode(\"\\xA0\")),t.insertBefore(h,t.firstChild),L(t,\"htAutocomplete\"),!s.acArrowListener){let u=new G(s);s.acArrowListener=function(m){z(m.target,\"htAutocompleteArrow\")&&s.view.wt.getSetting(\"onCellDblClick\",null,new M(e,o),t)},u.addEventListener(s.rootElement,\"mousedown\",s.acArrowListener),s.addHookOnce(\"afterDestroy\",()=>{u.destroy()})}}var vc=im;var Oc=new WeakMap,Mc=new WeakMap,sm=\"htBadValue\";function rm(s,t,e,o,i,r,n,...l){nt(\"base\").apply(this,[s,t,e,o,i,r,n,...l]),nm(s);let a=lm(),h=n.label,u=!1;if(typeof n.checkedTemplate>\"u\"&&(n.checkedTemplate=!0),typeof n.uncheckedTemplate>\"u\"&&(n.uncheckedTemplate=!1),xt(t),r===n.checkedTemplate||Fs(r,n.checkedTemplate)?a.checked=!0:r===n.uncheckedTemplate||Fs(r,n.uncheckedTemplate)?a.checked=!1:r===null?L(a,\"noValue\"):(a.style.display=\"none\",L(a,sm),u=!0),a.setAttribute(\"data-row\",e),a.setAttribute(\"data-col\",o),!u&&h){let A=\"\";h.value?A=typeof h.value==\"function\"?h.value.call(this,e,o,i,r):h.value:h.property&&(A=s.getDataAtRowProp(e,h.property));let O=am(A);h.position===\"before\"?O.appendChild(a):O.insertBefore(a,O.firstChild),a=O}t.appendChild(a),u&&t.appendChild(document.createTextNode(\"#bad-value#\")),Oc.has(s)||(Oc.set(s,!0),s.addHook(\"beforeKeyDown\",m));function m(A){let O=\"SPACE|ENTER\",D=\"DELETE|BACKSPACE\",B=Si(jo,A.keyCode);!s.getSettings().enterBeginsEditing&&B(\"ENTER\")||(B(`${O}|${D}`)&&!Jt(A)&&R(()=>{pt(A),A.preventDefault()}),B(O)&&w(),B(D)&&w(!0))}function w(A=!1){let O=s.getSelectedRangeLast();if(!O)return;let{row:D,col:B}=O.getTopLeftCorner(),{row:$,col:et}=O.getBottomRightCorner(),ft=[];for(let q=D;q<=$;q+=1)for(let ct=B;ct<=et;ct+=1){let it=s.getCellMeta(q,ct);if(it.type!==\"checkbox\")return;if(it.readOnly===!0)continue;typeof it.checkedTemplate>\"u\"&&(it.checkedTemplate=!0),typeof it.uncheckedTemplate>\"u\"&&(it.uncheckedTemplate=!1);let c=s.getDataAtCell(q,ct);A===!1?[it.checkedTemplate,it.checkedTemplate.toString()].includes(c)?ft.push([q,ct,it.uncheckedTemplate]):[it.uncheckedTemplate,it.uncheckedTemplate.toString(),null,void 0].includes(c)&&ft.push([q,ct,it.checkedTemplate]):ft.push([q,ct,it.uncheckedTemplate])}ft.length>0&&s.setDataAtCell(ft)}function R(A){let O=s.getSelectedRangeLast();if(!O)return;let D=O.getTopLeftCorner(),B=O.getBottomRightCorner();for(let $=D.row;$<=B.row;$++)for(let et=D.col;et<=B.col;et++){let ft=s.getCellMeta($,et);if(ft.type!==\"checkbox\")return;let q=s.getCell($,et);if(q==null)A($,et,ft);else{let ct=q.querySelectorAll(\"input[type=checkbox]\");ct.length>0&&!ft.readOnly&&A(ct)}}}}function nm(s){let t=Mc.get(s);return t||(t=new G(s),t.addEventListener(s.rootElement,\"click\",e=>cm(e,s)),t.addEventListener(s.rootElement,\"mouseup\",e=>hm(e,s)),t.addEventListener(s.rootElement,\"change\",e=>um(e,s)),Mc.set(s,t)),t}function lm(){let s=document.createElement(\"input\");return s.className=\"htCheckboxRendererInput\",s.type=\"checkbox\",s.setAttribute(\"autocomplete\",\"off\"),s.setAttribute(\"tabindex\",\"-1\"),s.cloneNode(!1)}function am(s){let t=document.createElement(\"label\");return t.className=\"htCheckboxRendererLabel\",t.appendChild(document.createTextNode(s)),t.cloneNode(!0)}function hm(s,t){wl(s.target)&&setTimeout(t.listen,10)}function cm(s,t){if(!wl(s.target))return!1;let e=parseInt(s.target.getAttribute(\"data-row\"),10),o=parseInt(s.target.getAttribute(\"data-col\"),10);t.getCellMeta(e,o).readOnly&&s.preventDefault()}function um(s,t){if(!wl(s.target))return!1;let e=parseInt(s.target.getAttribute(\"data-row\"),10),o=parseInt(s.target.getAttribute(\"data-col\"),10),i=t.getCellMeta(e,o);if(!i.readOnly){let r=null;s.target.checked?r=i.uncheckedTemplate===void 0?!0:i.checkedTemplate:r=i.uncheckedTemplate===void 0?!1:i.uncheckedTemplate,t.setDataAtCell(e,o,r)}}function wl(s){return s.tagName===\"INPUT\"&&s.getAttribute(\"type\")===\"checkbox\"}var Hc=rm;function dm(s,t,e,o,i,r,...n){nt(\"base\").apply(this,[s,t,e,o,i,r,...n]),Te(t,r??\"\")}var Ac=dm;var We=Wo(Yh());function fm(s,t,e,o,i,r,n){let l=r;if(me(l)){let a=n.numericFormat,h=a&&a.culture||\"-\",u=a&&a.pattern,m=n.className||\"\",w=m.length?m.split(\" \"):[];if(We.default&&typeof We.default.languages==\"function\"){if(typeof h<\"u\"&&!We.default.languages()[h]){let R=h.replace(\"-\",\"\"),A=We.default.allLanguages?We.default.allLanguages[h]:We.default[R];A&&We.default.registerLanguage(A)}We.default.setLanguage(h),l=(0,We.default)(l).format(u||\"0\")}w.indexOf(\"htLeft\")<0&&w.indexOf(\"htCenter\")<0&&w.indexOf(\"htRight\")<0&&w.indexOf(\"htJustify\")<0&&w.push(\"htRight\"),w.indexOf(\"htNumeric\")<0&&w.push(\"htNumeric\"),n.className=w.join(\" \")}nt(\"text\")(s,t,e,o,i,l,n)}var Nc=fm;function mm(s,t,e,o,i,r,n,...l){nt(\"text\").apply(this,[s,t,e,o,i,r,n,...l]);let a=n.hashLength||t.innerHTML.length,h=n.hashSymbol||\"*\",u=\"\";P(a-1,()=>{u+=h}),Te(t,u)}var Lc=mm;function pm(s,t,e,o,i,r,n,...l){nt(\"base\").apply(this,[s,t,e,o,i,r,n,...l]);let a=r;if(!a&&n.placeholder&&(a=n.placeholder),a=ne(a),s.getSettings().trimWhitespace||(a=a.replace(/ /g,\"\\xA0\")),n.rendererTemplate){xt(t);let h=document.createElement(\"TEMPLATE\");h.setAttribute(\"bind\",\"{{}}\"),h.innerHTML=n.rendererTemplate,HTMLTemplateElement.decorate(h),h.model=s.getSourceDataAtRow(e),t.appendChild(h)}else Pe(t,a)}var xc=pm;var{register:Ae,getItem:gm,hasItem:wm,getNames:_c,getValues:AE}=Pt(\"renderers\");Ae(\"base\",bc);Ae(\"autocomplete\",vc);Ae(\"checkbox\",Hc);Ae(\"html\",Ac);Ae(\"numeric\",Nc);Ae(\"password\",Lc);Ae(\"text\",xc);function nt(s){if(typeof s==\"function\")return s;if(!wm(s))throw Error(`No registered renderer found under \"${s}\" name`);return gm(s)}function Cl(s,t){let e=s;if(e==null&&(e=\"\"),this.allowEmpty&&e===\"\"){t(!0);return}this.strict&&this.source?typeof this.source==\"function\"?this.source(e,Dc(e,t)):Dc(e,t)(this.source):t(!0)}function Dc(s,t){let e=s;return function(o){let i=!1;for(let r=0,n=o.length;r<n;r++)if(e===o[r]){i=!0;break}t(i)}}So();var El={};It(El,{getNormalizedDate:()=>yl});function yl(s){let t=new Date(s);return isNaN(new Date(`${s}T00:00`).getDate())?t:new Date(t.getTime()+t.getTimezoneOffset()*6e4)}function Sl(s,t){let e=js(\"date\",this.instance),o=s,i=!0;o==null&&(o=\"\");let r=St(new Date(o)).isValid()||St(o,this.dateFormat||e.defaultDateFormat,!0).isValid(),n=St(o,this.dateFormat||e.defaultDateFormat,!0).isValid();if(this.allowEmpty&&o===\"\"&&(r=!0,n=!0),r||(i=!1),!r&&n&&(i=!0),r&&!n)if(this.correctFormat===!0){let l=Cm(o,this.dateFormat),a=this.instance.runHooks(\"unmodifyRow\",this.row),h=this.instance.runHooks(\"unmodifyCol\",this.col);this.instance.setDataAtCell(a,h,l,\"dateValidator\"),i=!0}else i=!1;t(i)}function Cm(s,t){let e=St(yl(s)),o=St(s,t),i=s.search(/[A-z]/g)>-1,r;return e.isValid()&&e.format(\"x\")===o.format(\"x\")||!o.isValid()||i?r=e:r=o,r.format(t)}function Rl(s,t){let e=s;e==null&&(e=\"\"),this.allowEmpty&&e===\"\"?t(!0):t(e===\"\"?!1:me(s))}So();var ym=[\"YYYY-MM-DDTHH:mm:ss.SSSZ\",\"X\",\"x\"];function Tl(s,t){let e=this.timeFormat||\"h:mm:ss a\",o=!0,i=s;i===null&&(i=\"\"),i=/^\\d{3,}$/.test(i)?parseInt(i,10):i;let r=/^\\d{1,2}$/.test(i);r&&(i+=\":00\");let n=St(i,ym,!0).isValid()?St(i):St(i,e),l=n.isValid(),a=St(i,e,!0).isValid()&&!r;if(this.allowEmpty&&i===\"\"&&(l=!0,a=!0),l||(o=!1),!l&&a&&(o=!0),l&&!a)if(this.correctFormat===!0){let h=n.format(e),u=this.instance.runHooks(\"unmodifyRow\",this.row),m=this.instance.runHooks(\"unmodifyCol\",this.col);this.instance.setDataAtCell(u,m,h,\"timeValidator\"),o=!0}else o=!1;t(o)}var{register:ho,getItem:Em,hasItem:Sm,getNames:kc,getValues:YE}=Pt(\"validators\");ho(\"autocomplete\",Cl);ho(\"date\",Sl);ho(\"numeric\",Rl);ho(\"time\",Tl);function jt(s){if(typeof s==\"function\")return s;if(!Sm(s))throw Error(`No registered validator found under \"${s}\" name`);return Em(s)}var bl=\"autocomplete\",Ic={editor:Nt(bl),renderer:nt(bl),validator:jt(bl)};var Pc=\"checkbox\",Bc={editor:Nt(Pc),renderer:nt(Pc)};var Wc=\"date\",Fc={editor:Nt(Wc),renderer:nt(\"autocomplete\"),validator:jt(Wc)};var Rm=\"dropdown\",Vc={editor:Nt(Rm),renderer:nt(\"autocomplete\"),validator:jt(\"autocomplete\")};var Tm=\"handsontable\",Uc={editor:Nt(Tm),renderer:nt(\"autocomplete\")};var vl=\"numeric\",zc={editor:Nt(vl),renderer:nt(vl),validator:jt(vl),dataType:\"number\"};var $c=\"password\",Yc={editor:Nt($c),renderer:nt($c),copyable:!1};var Gc=\"text\",Xc={editor:Nt(Gc),renderer:nt(Gc)};var bm=\"time\",jc={editor:Nt(\"text\"),renderer:nt(\"text\"),validator:jt(bm)};var{register:vm,getItem:Om,hasItem:Mm,getNames:Kc,getValues:BS}=Pt(\"cellTypes\");Ne(\"autocomplete\",Ic);Ne(\"checkbox\",Bc);Ne(\"date\",Fc);Ne(\"dropdown\",Vc);Ne(\"handsontable\",Uc);Ne(\"numeric\",zc);Ne(\"password\",Yc);Ne(\"text\",Xc);Ne(\"time\",jc);function Ro(s){if(!Mm(s))throw Error(`You declared cell type \"${s}\" as a string that is not mapped to a known object.\n                 Cell type must be an object or a string mapped to an object registered by \"Handsontable.cellTypes.registerCellType\" method`);return Om(s)}function Ne(s,t){let{editor:e,renderer:o,validator:i}=t;e&&Xt(s,e),o&&Ae(s,o),i&&ho(s,i),vm(s,t)}var Ol={};It(Ol,{columnFactory:()=>To});function To(s,t){function e(){}Re(e,s);for(let o=0,i=t.length;o<i;o++)e.prototype[t[o]]=void 0;return e}var xl=Wo(Ml());var Nl={};It(Nl,{cellMethodLookupFactory:()=>bo,createEmptySpreadsheetData:()=>Lm,createSpreadsheetData:()=>Am,createSpreadsheetObjectData:()=>Nm,spreadsheetColumnIndex:()=>Hm,spreadsheetColumnLabel:()=>Mi,translateRowsToColumns:()=>Al});var qc=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",Hl=qc.length;function Mi(s){let t=s+1,e=\"\",o;for(;t>0;)o=(t-1)%Hl,e=String.fromCharCode(65+o)+e,t=parseInt((t-o)/Hl,10);return e}function Hm(s){let t=0;if(s)for(let e=0,o=s.length-1;e<s.length;e+=1,o-=1)t+=Hl**o*(qc.indexOf(s[e])+1);return t-=1,t}function Am(s=100,t=4){let e=[],o,i;for(o=0;o<s;o++){let r=[];for(i=0;i<t;i++)r.push(Mi(i)+(o+1));e.push(r)}return e}function Nm(s=100,t=4){let e=[],o,i;for(o=0;o<s;o++){let r={};for(i=0;i<t;i++)r[`prop${i}`]=Mi(i)+(o+1);e.push(r)}return e}function Lm(s,t){let e=[],o;for(let i=0;i<s;i++){o=[];for(let r=0;r<t;r++)o.push(\"\");e.push(o)}return e}function Al(s){let t=[],e,o,i,r,n=0;for(e=0,o=s.length;e<o;e++)for(i=0,r=s[e].length;i<r;i++)i===n&&(t.push([]),n+=1),t[i].push(s[e][i]);return t}function bo(s,t){let e=typeof t>\"u\"?!0:t;return function(i,r){return(function n(l){if(l){if(ot(l,s)&&l[s]!==void 0)return l[s];if(ot(l,\"type\")&&l.type){if(typeof l.type!=\"string\")throw new Error(\"Cell type must be a string \");let a=Ro(l.type);if(ot(a,s))return a[s];if(e)return}}else return;return n(Object.getPrototypeOf(l))})(typeof i==\"number\"?this.getCellMeta(i,r):i)}}var Ll=class s{static create(t,e){return new s(t,e)}constructor(t,e){this.timer=null,this.func=t,this.delay=xm(e),this.stopped=!0,this._then=null,this._callback=()=>this.__callback()}start(){return this.stopped&&(this._then=Date.now(),this.stopped=!1,this.timer=io(this._callback)),this}stop(){return this.stopped||(this.stopped=!0,Ge(this.timer),this.timer=null),this}__callback(){if(this.timer=io(this._callback),this.delay){let t=Date.now(),e=t-this._then;e>this.delay&&(this._then=t-e%this.delay,this.func())}else this.func()}},Qc=Ll;function xm(s){let t=s;return typeof t==\"string\"&&/fps$/.test(t)&&(t=1e3/parseInt(t.replace(\"fps\",\"\")||0,10)),t}function _m(){let s={arrayMap:[],weakMap:new WeakMap};return{get(i){if(t(i))return s.arrayMap[i];if(e(i))return s.weakMap.get(i)},set(i,r){if(t(i))s.arrayMap[i]=r;else if(e(i))s.weakMap.set(i,r);else throw new Error(\"Invalid key type\")},delete(i){t(i)?delete s.arrayMap[i]:e(i)&&s.weakMap.delete(i)}};function t(i){return i!==null&&!o(i)&&(typeof i==\"string\"||typeof i==\"number\")}function e(i){return i!==null&&(typeof i==\"object\"||typeof i==\"function\")}function o(i){return i!==i}}var Jc=_m;function ut(s,t,e){this.instance=s,this.priv=t,this.GridSettings=e,this.dataSource=this.instance.getSettings().data,this.cachedLength=null,this.skipCache=!1,this.latestSourceRowsCount=0,this.dataSource&&this.dataSource[0]?this.duckSchema=this.recursiveDuckSchema(this.dataSource[0]):this.duckSchema={},this.createMap(),this.interval=Qc.create(()=>this.clearLengthCache(),\"15fps\"),this.instance.addHook(\"skipLengthCache\",o=>this.onSkipLengthCache(o)),this.onSkipLengthCache(500)}ut.prototype.DESTINATION_RENDERER=1;ut.prototype.DESTINATION_CLIPBOARD_GENERATOR=2;ut.prototype.recursiveDuckSchema=function(s){return to(s)};ut.prototype.recursiveDuckColumns=function(s,t,e){let o=t,i=e,r;return typeof o>\"u\"&&(o=0,i=\"\"),typeof s==\"object\"&&!Array.isArray(s)&&X(s,(n,l)=>{n===null?(r=i+l,this.colToPropCache.push(r),this.propToColCache.set(r,o),o+=1):o=this.recursiveDuckColumns(n,o,`${l}.`)}),o};ut.prototype.createMap=function(){let s,t=this.getSchema();if(typeof t>\"u\")throw new Error(\"trying to create `columns` definition but you didn't provide `schema` nor `data`\");this.colToPropCache=[],this.propToColCache=new Jc;let e=this.instance.getSettings().columns;if(e){let o=this.instance.getSettings().maxCols,i=Math.min(o,e.length),r=0,n=!1,l=ai(t);for(typeof e==\"function\"&&(i=l>0?l:this.instance.countSourceCols(),n=!0),s=0;s<i;s++){let a=n?e(s):e[s];if(K(a)){if(typeof a.data<\"u\"){let h=n?r:s;this.colToPropCache[h]=a.data,this.propToColCache.set(a.data,h)}r+=1}}}else this.recursiveDuckColumns(t)};ut.prototype.colToProp=function(s){let t=this.instance.runHooks(\"modifyCol\",s);return!isNaN(t)&&this.colToPropCache&&typeof this.colToPropCache[t]<\"u\"?this.colToPropCache[t]:t};ut.prototype.propToCol=function(s){let t;return typeof this.propToColCache.get(s)>\"u\"?t=s:t=this.propToColCache.get(s),t=this.instance.runHooks(\"unmodifyCol\",t),t};ut.prototype.getSchema=function(){let s=this.instance.getSettings().dataSchema;return s?typeof s==\"function\"?s():s:this.duckSchema};ut.prototype.createRow=function(s,t=1,e){let o=0,i=s;if((typeof i!=\"number\"||i>=this.instance.countSourceRows())&&(i=this.instance.countSourceRows()),this.instance.runHooks(\"beforeCreateRow\",i,t,e)===!1)return 0;let n=this.instance.getSettings().maxRows,l=this.instance.countCols();for(;o<t&&this.instance.countSourceRows()<n;){let a=null;this.instance.dataType===\"array\"?this.instance.getSettings().dataSchema?a=Rt(this.getSchema()):(a=[],P(l-1,()=>a.push(null))):this.instance.dataType===\"function\"?a=this.instance.getSettings().dataSchema(i):(a={},eo(a,this.getSchema())),i===this.instance.countSourceRows()?this.dataSource.push(a):this.spliceData(i,0,a),o+=1}return this.instance.runHooks(\"afterCreateRow\",i,o,e),this.instance.forceFullRender=!0,o};ut.prototype.createCol=function(s,t=1,e){if(!this.instance.isColumnModificationAllowed())throw new Error(\"Cannot create new column. When data source in an object, you can only have as much columns as defined in first data row, data schema or in the 'columns' setting.If you want to be able to add new columns, you have to use array datasource.\");let o=this.instance.countSourceRows(),i=this.dataSource,r=this.instance.countCols(),n=typeof s!=\"number\"||s>=r?r:s,l,a=0,h;this.instance.runHooks(\"beforeCreateCol\",n,t,e),h=n;let u=this.instance.getSettings().maxCols;for(;a<t&&this.instance.countCols()<u;){if(l=To(this.GridSettings,this.priv.columnsSettingConflicts),typeof n!=\"number\"||n>=this.instance.countCols()){if(o>0)for(let m=0;m<o;m++)typeof i[m]>\"u\"&&(i[m]=[]),i[m].push(null);else i.push([null]);this.priv.columnSettings.push(l)}else{for(let m=0;m<o;m++)i[m].splice(h,0,null);this.priv.columnSettings.splice(h,0,l)}a+=1,h+=1}return this.instance.runHooks(\"afterCreateCol\",n,a,e),this.instance.forceFullRender=!0,a};ut.prototype.removeRow=function(s,t=1,e){let o=typeof s!=\"number\"?-t:s,i=this.instance.runHooks(\"modifyRemovedAmount\",t,o);o=(this.instance.countSourceRows()+o)%this.instance.countSourceRows();let r=this.visualRowsToPhysical(o,i);if(this.instance.runHooks(\"beforeRemoveRow\",o,i,r,e)===!1)return;let l=this.dataSource,a=this.filterData(o,i);a&&(l.length=0,Array.prototype.push.apply(l,a)),this.instance.runHooks(\"afterRemoveRow\",o,i,r,e),this.instance.forceFullRender=!0};ut.prototype.removeCol=function(s,t=1,e){if(this.instance.dataType===\"object\"||this.instance.getSettings().columns)throw new Error(\"cannot remove column with object data source or columns option specified\");let o=typeof s!=\"number\"?-t:s;o=(this.instance.countCols()+o)%this.instance.countCols();let i=this.visualColumnsToPhysical(o,t),r=i.slice(0).sort((u,m)=>m-u);if(this.instance.runHooks(\"beforeRemoveCol\",o,t,i,e)===!1)return;let l=!0,a=r.length,h=this.dataSource;for(let u=0;u<a;u++)l&&i[0]!==i[u]-u&&(l=!1);if(l)for(let u=0,m=this.instance.countSourceRows();u<m;u++)h[u].splice(i[0],t);else{for(let u=0,m=this.instance.countSourceRows();u<m;u++)for(let w=0;w<a;w++)h[u].splice(r[w],1);for(let u=0;u<a;u++)this.priv.columnSettings.splice(i[u],1)}this.instance.runHooks(\"afterRemoveCol\",o,t,i,e),this.instance.forceFullRender=!0};ut.prototype.spliceCol=function(s,t,e,...o){let i=this.instance.getDataAtCol(s),r=i.slice(t,t+e),n=i.slice(t+e);Ns(o,n);let l=0;for(;l<e;)o.push(null),l+=1;return Kr(o),this.instance.populateFromArray(t,s,o,null,null,\"spliceCol\"),r};ut.prototype.spliceRow=function(s,t,e,...o){let i=this.instance.getSourceDataAtRow(s),r=i.slice(t,t+e),n=i.slice(t+e);Ns(o,n);let l=0;for(;l<e;)o.push(null),l+=1;return this.instance.populateFromArray(s,t,[o],null,null,\"spliceRow\"),r};ut.prototype.spliceData=function(s,t,e){this.instance.runHooks(\"beforeDataSplice\",s,t,e)!==!1&&this.dataSource.splice(s,t,e)};ut.prototype.filterData=function(s,t){let e=this.visualRowsToPhysical(s,t);if(this.instance.runHooks(\"beforeDataFilter\",s,t,e)!==!1)return this.dataSource.filter((r,n)=>e.indexOf(n)===-1)};ut.prototype.get=function(s,t){let e=this.instance.runHooks(\"modifyRow\",s),o=this.dataSource[e],i=this.instance.runHooks(\"modifyRowData\",e);o=isNaN(i)?i:o;let r=null;if(o&&o.hasOwnProperty&&ot(o,t))r=o[t];else if(typeof t==\"string\"&&t.indexOf(\".\")>-1){let n=t.split(\".\"),l=o;if(!l)return null;for(let a=0,h=n.length;a<h;a++)if(l=l[n[a]],typeof l>\"u\")return null;r=l}else typeof t==\"function\"&&(r=t(this.dataSource.slice(e,e+1)[0]));if(this.instance.hasHook(\"modifyData\")){let n=oo(r);this.instance.runHooks(\"modifyData\",e,this.propToCol(t),n,\"get\"),n.isTouched()&&(r=n.value)}return r};var Dm=bo(\"copyable\",!1);ut.prototype.getCopyable=function(s,t){return Dm.call(this.instance,s,this.propToCol(t))?this.get(s,t):\"\"};ut.prototype.set=function(s,t,e,o){let i=this.instance.runHooks(\"modifyRow\",s,o||\"datamapGet\"),r=e,n=this.dataSource[i],l=this.instance.runHooks(\"modifyRowData\",i);if(n=isNaN(l)?l:n,this.instance.hasHook(\"modifyData\")){let a=oo(r);this.instance.runHooks(\"modifyData\",i,this.propToCol(t),a,\"set\"),a.isTouched()&&(r=a.value)}if(n&&n.hasOwnProperty&&ot(n,t))n[t]=r;else if(typeof t==\"string\"&&t.indexOf(\".\")>-1){let a=t.split(\".\"),h=n,u=0,m;for(u=0,m=a.length-1;u<m;u++)typeof h[a[u]]>\"u\"&&(h[a[u]]={}),h=h[a[u]];h[a[u]]=r}else typeof t==\"function\"?t(this.dataSource.slice(i,i+1)[0],r):n[t]=r};ut.prototype.visualRowsToPhysical=function(s,t){let e=this.instance.countSourceRows(),o=[],i=(e+s)%e,r=t,n;for(;i<e&&r;)n=this.instance.runHooks(\"modifyRow\",i),o.push(n),r-=1,i+=1;return o};ut.prototype.visualColumnsToPhysical=function(s,t){let e=this.instance.countCols(),o=(e+s)%e,i=[],r=t;for(;o<e&&r;){let n=this.instance.runHooks(\"modifyCol\",o);i.push(n),r-=1,o+=1}return i};ut.prototype.clear=function(){for(let s=0;s<this.instance.countSourceRows();s++)for(let t=0;t<this.instance.countCols();t++)this.set(s,this.colToProp(t),\"\")};ut.prototype.clearLengthCache=function(){this.cachedLength=null};ut.prototype.getLength=function(){let s=this.instance.getSettings().maxRows,t;s<0||s===0?t=0:t=s||1/0;let e=this.instance.countSourceRows();if(this.instance.hasHook(\"modifyRow\")){let o=this.skipCache;this.interval.start(),e!==this.latestSourceRowsCount&&(o=!0),this.latestSourceRowsCount=e,this.cachedLength===null||o?(P(e-1,i=>{this.instance.runHooks(\"modifyRow\",i)===null&&(e-=1)}),this.cachedLength=e):e=this.cachedLength}else this.interval.stop();return Math.min(e,t)};ut.prototype.getAll=function(){let s={row:0,col:0},t={row:Math.max(this.instance.countSourceRows()-1,0),col:Math.max(this.instance.countCols()-1,0)};return s.row-t.row===0&&!this.instance.countSourceRows()?[]:this.getRange(s,t,ut.prototype.DESTINATION_RENDERER)};ut.prototype.getRange=function(s,t,e){let o=[],i,r,n,l=this.instance.getSettings().maxRows,a=this.instance.getSettings().maxCols;if(l===0||a===0)return[];let h=e===this.DESTINATION_CLIPBOARD_GENERATOR?this.getCopyable:this.get,u=Math.min(Math.max(l-1,0),Math.max(s.row,t.row)),m=Math.min(Math.max(a-1,0),Math.max(s.col,t.col));for(i=Math.min(s.row,t.row);i<=u;i++){n=[];let w=this.instance.runHooks(\"modifyRow\",i);for(r=Math.min(s.col,t.col);r<=m&&w!==null;r++)n.push(h.call(this,i,this.colToProp(r)));w!==null&&o.push(n)}return o};ut.prototype.getText=function(s,t){return xl.default.stringify(this.getRange(s,t,this.DESTINATION_RENDERER))};ut.prototype.getCopyableText=function(s,t){return xl.default.stringify(this.getRange(s,t,this.DESTINATION_CLIPBOARD_GENERATOR))};ut.prototype.onSkipLengthCache=function(s){this.skipCache=!0,setTimeout(()=>{this.skipCache=!1},s)};ut.prototype.destroy=function(){this.interval.stop(),this.interval=null,this.instance=null,this.priv=null,this.GridSettings=null,this.dataSource=null,this.cachedLength=null,this.duckSchema=null};var Zc=ut;function _l(s,t,e){let o=this,i=new G(s),r=!1,n=!1,l;function a(O){let D=typeof t.settings.enterMoves==\"function\"?t.settings.enterMoves(event):t.settings.enterMoves;O?e.transformStart(-D.row,-D.col):e.transformStart(D.row,D.col,!0)}function h(O){O?e.transformEnd(-1,0):e.transformStart(-1,0)}function u(O){O?e.transformEnd(1,0):e.transformStart(1,0)}function m(O){O?e.transformEnd(0,1):e.transformStart(0,1)}function w(O){O?e.transformEnd(0,-1):e.transformStart(0,-1)}function R(O){if(!s.isListening()||(s.runHooks(\"beforeKeyDown\",O),r||O.keyCode===229)||Jt(O)||(t.lastKeyCode=O.keyCode,!e.isSelected()))return;let D=(O.ctrlKey||O.metaKey)&&!O.altKey;if(l&&!l.isWaiting()&&!Ri(O.keyCode)&&!Ti(O.keyCode)&&!D&&!o.isEditorOpened()){o.openEditor(\"\",O);return}let B=O.shiftKey?e.setRangeEnd:e.setRangeStart,$;switch(O.keyCode){case k.A:!o.isEditorOpened()&&D&&(s.selectAll(),O.preventDefault(),bt(O));break;case k.ARROW_UP:o.isEditorOpened()&&!l.isWaiting()&&o.closeEditorAndSaveChanges(D),h(O.shiftKey),O.preventDefault(),bt(O);break;case k.ARROW_DOWN:o.isEditorOpened()&&!l.isWaiting()&&o.closeEditorAndSaveChanges(D),u(O.shiftKey),O.preventDefault(),bt(O);break;case k.ARROW_RIGHT:o.isEditorOpened()&&!l.isWaiting()&&o.closeEditorAndSaveChanges(D),m(O.shiftKey),O.preventDefault(),bt(O);break;case k.ARROW_LEFT:o.isEditorOpened()&&!l.isWaiting()&&o.closeEditorAndSaveChanges(D),w(O.shiftKey),O.preventDefault(),bt(O);break;case k.TAB:$=typeof t.settings.tabMoves==\"function\"?t.settings.tabMoves(O):t.settings.tabMoves,O.shiftKey?e.transformStart(-$.row,-$.col):e.transformStart($.row,$.col,!0),O.preventDefault(),bt(O);break;case k.BACKSPACE:case k.DELETE:s.emptySelectedCells(),o.prepareEditor(),O.preventDefault();break;case k.F2:l&&l.enableFullEditMode(),o.openEditor(null,O),O.preventDefault();break;case k.ENTER:o.isEditorOpened()?(l&&l.state!==vt.WAITING&&o.closeEditorAndSaveChanges(D),a(O.shiftKey)):s.getSettings().enterBeginsEditing?(l&&l.enableFullEditMode(),o.openEditor(null,O)):a(O.shiftKey),O.preventDefault(),pt(O);break;case k.ESCAPE:o.isEditorOpened()&&(o.closeEditorAndRestoreOriginalValue(D),l.focus()),O.preventDefault();break;case k.HOME:O.ctrlKey||O.metaKey?B.call(e,new M(0,e.selectedRange.current().from.col)):B.call(e,new M(e.selectedRange.current().from.row,0)),O.preventDefault(),bt(O);break;case k.END:O.ctrlKey||O.metaKey?B.call(e,new M(s.countRows()-1,e.selectedRange.current().from.col)):B.call(e,new M(e.selectedRange.current().from.row,s.countCols()-1)),O.preventDefault(),bt(O);break;case k.PAGE_UP:e.transformStart(-s.countVisibleRows(),0),O.preventDefault(),bt(O);break;case k.PAGE_DOWN:e.transformStart(s.countVisibleRows(),0),O.preventDefault(),bt(O);break;default:break}}function A(){s.addHook(\"afterDocumentKeyDown\",R),i.addEventListener(document.documentElement,\"keydown\",D=>{r||s.runHooks(\"afterDocumentKeyDown\",D)}),i.addEventListener(document.documentElement,\"compositionstart\",D=>{!r&&l&&!l.isOpened()&&s.isListening()&&o.openEditor(\"\",D)});function O(D,B,$){$.nodeName===\"TD\"&&(l&&l.enableFullEditMode(),o.openEditor(null,D))}s.view.wt.update(\"onCellDblClick\",O)}this.lockEditor=function(){n=!0},this.unlockEditor=function(){n=!1},this.destroyEditor=function(O){n||this.closeEditor(O)},this.getActiveEditor=function(){return l},this.prepareEditor=function(){if(n)return;if(l&&l.isWaiting()){this.closeEditor(!1,!1,it=>{it&&o.prepareEditor()});return}let O=s.selection.selectedRange.current();if(!O||!O.highlight)return;let D=O.highlight.row,B=O.highlight.col,$=s.colToProp(B),et=s.getCell(D,B),ft=s.getSourceDataAtCell(s.runHooks(\"modifyRow\",D),B),q=s.getCellMeta(D,B),ct=s.getCellEditor(q);ct?(l=js(ct,s),l.prepare(D,B,$,et,ft,q)):l=void 0},this.isEditorOpened=function(){return l&&l.isOpened()},this.openEditor=function(O,D){if(!l)return;l.cellProperties.readOnly?D&&D.keyCode===k.ENTER&&a():l.beginEditing(O,D)},this.closeEditor=function(O,D,B){l?l.finishEditing(O,D,B):B&&B(!1)},this.closeEditorAndSaveChanges=function(O){return this.closeEditor(!1,O)},this.closeEditorAndRestoreOriginalValue=function(O){return this.closeEditor(!0,O)},this.destroy=function(){r=!0},A()}var tu=new WeakMap;_l.getInstance=function(s,t,e,o){let i=tu.get(s);return i||(i=new _l(s,t,e,o),tu.set(s,i)),i};var eu=_l;var he=new WeakMap;function J(s,t){let e=Oe(s);V.getSingleton().add(\"construct\",function(){he.has(this)||he.set(this,{});let o=he.get(this);o[e]||(o[e]=new t(this))}),V.getSingleton().add(\"afterDestroy\",function(){if(he.has(this)){let o=he.get(this);X(o,i=>i.destroy()),he.delete(this)}})}function ou(s,t){if(typeof t!=\"string\")throw Error('Only strings can be passed as \"plugin\" parameter');let e=Oe(t);if(!(!he.has(s)||!he.get(s)[e]))return he.get(s)[e]}function iu(s){return he.has(s)?Object.keys(he.get(s)):[]}function su(s,t){let e=null;return he.has(s)&&X(he.get(s),(o,i)=>{o===t&&(e=i)}),e}function ru({isShiftKey:s,isLeftClick:t,isRightClick:e,coords:o,selection:i,controller:r}){let n=i.isSelected()?i.getSelectedRange().current():null,l=i.isSelectedByCorner(),a=i.isSelectedByRowHeader();if(s&&n)o.row>=0&&o.col>=0&&!r.cells?i.setRangeEnd(o):(l||a)&&o.row>=0&&o.col>=0&&!r.cells?i.setRangeEnd(new M(o.row,o.col)):l&&o.row<0&&!r.column?i.setRangeEnd(new M(n.to.row,o.col)):a&&o.col<0&&!r.row?i.setRangeEnd(new M(o.row,n.to.col)):(!l&&!a&&o.col<0||l&&o.col<0)&&!r.row?i.selectRows(n.from.row,o.row):(!l&&!a&&o.row<0||a&&o.row<0)&&!r.column&&i.selectColumns(n.from.col,o.col);else{let h=new M(o.row,o.col);h.row<0&&(h.row=0),h.col<0&&(h.col=0);let u=!i.inInSelection(h),m=t||e&&u;o.row<0&&o.col>=0&&!r.column?m&&i.selectColumns(o.col):o.col<0&&o.row>=0&&!r.row?m&&i.selectRows(o.row):o.col>=0&&o.row>=0&&!r.cells?m&&i.setRangeStart(o):o.col<0&&o.row<0&&i.setRangeStart(o)}}function km({isLeftClick:s,coords:t,selection:e,controller:o}){if(!s)return;let i=e.isSelectedByRowHeader(),r=e.isSelectedByColumnHeader(),n=e.tableProps.countCols(),l=e.tableProps.countRows();r&&!o.column?e.setRangeEnd(new M(l-1,t.col)):i&&!o.row?e.setRangeEnd(new M(t.row,n-1)):o.cell||e.setRangeEnd(t)}var Im=new Map([[\"mousedown\",ru],[\"mouseover\",km],[\"touchstart\",ru]]);function qs(s,{coords:t,selection:e,controller:o}){Im.get(s.type)({coords:t,selection:e,controller:o,isShiftKey:s.shiftKey,isLeftClick:mi(s)||s.type===\"touchstart\",isRightClick:ao(s)})}var nu=function(){window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty()};function Wt(s){let t=this;this.eventManager=new G(s),this.instance=s,this.settings=s.getSettings(),this.selectionMouseDown=!1;let e=s.rootElement.getAttribute(\"style\");e&&s.rootElement.setAttribute(\"data-originalstyle\",e),L(s.rootElement,\"handsontable\");let o=document.createElement(\"TABLE\");L(o,\"htCore\"),s.getSettings().tableClassName&&L(o,s.getSettings().tableClassName),this.THEAD=document.createElement(\"THEAD\"),o.appendChild(this.THEAD),this.TBODY=document.createElement(\"TBODY\"),o.appendChild(this.TBODY),s.table=o,s.container.insertBefore(o,s.container.firstChild),this.eventManager.addEventListener(s.rootElement,\"mousedown\",n=>{this.selectionMouseDown=!0,t.isTextSelectionAllowed(n.target)||(nu(),n.preventDefault(),window.focus())}),this.eventManager.addEventListener(s.rootElement,\"mouseup\",()=>{this.selectionMouseDown=!1}),this.eventManager.addEventListener(s.rootElement,\"mousemove\",n=>{this.selectionMouseDown&&!t.isTextSelectionAllowed(n.target)&&(this.settings.fragmentSelection&&nu(),n.preventDefault())}),this.eventManager.addEventListener(document.documentElement,\"keyup\",n=>{s.selection.isInProgress()&&!n.shiftKey&&s.selection.finish()});let i;this.isMouseDown=function(){return i},this.eventManager.addEventListener(document.documentElement,\"mouseup\",n=>{s.selection.isInProgress()&&mi(n)&&s.selection.finish(),i=!1,(An(document.activeElement)||!s.selection.isSelected()&&!ao(n))&&s.unlisten()}),this.eventManager.addEventListener(document.documentElement,\"contextmenu\",n=>{s.selection.isInProgress()&&ao(n)&&(s.selection.finish(),i=!1)}),this.eventManager.addEventListener(document.documentElement,\"touchend\",()=>{s.selection.isInProgress()&&s.selection.finish(),i=!1}),this.eventManager.addEventListener(document.documentElement,\"mousedown\",n=>{let l=n.target,a=n.x||n.clientX,h=n.y||n.clientY,u=n.target;if(i||!s.rootElement)return;if(u===s.view.wt.wtTable.holder){let w=at();if(document.elementFromPoint(a+w,h)!==s.view.wt.wtTable.holder||document.elementFromPoint(a,h+w)!==s.view.wt.wtTable.holder)return}else for(;u!==document.documentElement;){if(u===null){if(n.isTargetWebComponent)break;return}if(u===s.rootElement)return;u=u.parentNode}(typeof t.settings.outsideClickDeselects==\"function\"?t.settings.outsideClickDeselects(l):t.settings.outsideClickDeselects)?s.deselectCell():s.destroyEditor(!1,!1)}),this.eventManager.addEventListener(o,\"selectstart\",n=>{t.settings.fragmentSelection||fi(n.target)||n.preventDefault()});let r={debug:()=>t.settings.debug,externalRowCalculator:this.instance.getPlugin(\"autoRowSize\")&&this.instance.getPlugin(\"autoRowSize\").isEnabled(),table:o,preventOverflow:()=>this.settings.preventOverflow,stretchH:()=>t.settings.stretchH,data:s.getDataAtCell,totalRows:()=>s.countRows(),totalColumns:()=>s.countCols(),fixedColumnsLeft:()=>t.settings.fixedColumnsLeft,fixedRowsTop:()=>t.settings.fixedRowsTop,fixedRowsBottom:()=>t.settings.fixedRowsBottom,minSpareRows:()=>t.settings.minSpareRows,renderAllRows:t.settings.renderAllRows,rowHeaders:()=>{let n=[];return s.hasRowHeaders()&&n.push((l,a)=>t.appendRowHeader(l,a)),s.runHooks(\"afterGetRowHeaderRenderers\",n),n},columnHeaders:()=>{let n=[];return s.hasColHeaders()&&n.push((l,a)=>{t.appendColHeader(l,a)}),s.runHooks(\"afterGetColumnHeaderRenderers\",n),n},columnWidth:s.getColWidth,rowHeight:s.getRowHeight,cellRenderer(n,l,a){let h=t.instance.getCellMeta(n,l),u=t.instance.colToProp(l),m=t.instance.getDataAtRowProp(n,u);t.instance.hasHook(\"beforeValueRender\")&&(m=t.instance.runHooks(\"beforeValueRender\",m,h)),t.instance.runHooks(\"beforeRenderer\",a,n,l,u,m,h),t.instance.getCellRenderer(h)(t.instance,a,n,l,u,m,h),t.instance.runHooks(\"afterRenderer\",a,n,l,u,m,h)},selections:t.instance.selection.highlight,hideBorderOnMouseDownOver:()=>t.settings.fragmentSelection,onCellMouseDown:(n,l,a,h)=>{let u={row:!1,column:!1,cell:!1};s.listen(),t.activeWt=h,i=!0,s.runHooks(\"beforeOnCellMouseDown\",n,l,a,u),!Jt(n)&&(qs(n,{coords:l,selection:s.selection,controller:u}),s.runHooks(\"afterOnCellMouseDown\",n,l,a),t.activeWt=t.wt)},onCellContextMenu:(n,l,a,h)=>{t.activeWt=h,i=!1,s.selection.isInProgress()&&s.selection.finish(),s.runHooks(\"beforeOnCellContextMenu\",n,l,a),!Jt(n)&&(s.runHooks(\"afterOnCellContextMenu\",n,l,a),t.activeWt=t.wt)},onCellMouseOut:(n,l,a,h)=>{t.activeWt=h,s.runHooks(\"beforeOnCellMouseOut\",n,l,a),!Jt(n)&&(s.runHooks(\"afterOnCellMouseOut\",n,l,a),t.activeWt=t.wt)},onCellMouseOver:(n,l,a,h)=>{let u={row:!1,column:!1,cell:!1};t.activeWt=h,s.runHooks(\"beforeOnCellMouseOver\",n,l,a,u),!Jt(n)&&(i&&qs(n,{coords:l,selection:s.selection,controller:u}),s.runHooks(\"afterOnCellMouseOver\",n,l,a),t.activeWt=t.wt)},onCellMouseUp:(n,l,a,h)=>{t.activeWt=h,s.runHooks(\"beforeOnCellMouseUp\",n,l,a),s.runHooks(\"afterOnCellMouseUp\",n,l,a),t.activeWt=t.wt},onCellCornerMouseDown(n){n.preventDefault(),s.runHooks(\"afterOnCellCornerMouseDown\",n)},onCellCornerDblClick(n){n.preventDefault(),s.runHooks(\"afterOnCellCornerDblClick\",n)},beforeDraw(n,l){t.beforeRender(n,l)},onDraw(n){t.onDraw(n)},onScrollVertically(){s.runHooks(\"afterScrollVertically\")},onScrollHorizontally(){s.runHooks(\"afterScrollHorizontally\")},onBeforeRemoveCellClassNames:()=>s.runHooks(\"beforeRemoveCellClassNames\"),onAfterDrawSelection:(n,l,a,h)=>s.runHooks(\"afterDrawSelection\",n,l,a,h),onBeforeDrawBorders(n,l){s.runHooks(\"beforeDrawBorders\",n,l)},onBeforeTouchScroll(){s.runHooks(\"beforeTouchScroll\")},onAfterMomentumScroll(){s.runHooks(\"afterMomentumScroll\")},onBeforeStretchingColumnWidth:(n,l)=>s.runHooks(\"beforeStretchingColumnWidth\",n,l),onModifyRowHeaderWidth:n=>s.runHooks(\"modifyRowHeaderWidth\",n),onModifyGetCellCoords:(n,l,a)=>s.runHooks(\"modifyGetCellCoords\",n,l,a),viewportRowCalculatorOverride(n){let l=s.countRows(),a=t.settings.viewportRowRenderingOffset;if(a===\"auto\"&&t.settings.fixedRowsTop&&(a=10),typeof a==\"number\"&&(n.startRow=Math.max(n.startRow-a,0),n.endRow=Math.min(n.endRow+a,l-1)),a===\"auto\"){let h=n.startRow+n.endRow-n.startRow,u=Math.ceil(h/l*12);n.startRow=Math.max(n.startRow-u,0),n.endRow=Math.min(n.endRow+u,l-1)}s.runHooks(\"afterViewportRowCalculatorOverride\",n)},viewportColumnCalculatorOverride(n){let l=s.countCols(),a=t.settings.viewportColumnRenderingOffset;if(a===\"auto\"&&t.settings.fixedColumnsLeft&&(a=10),typeof a==\"number\"&&(n.startColumn=Math.max(n.startColumn-a,0),n.endColumn=Math.min(n.endColumn+a,l-1)),a===\"auto\"){let h=n.startColumn+n.endColumn-n.startColumn,u=Math.ceil(h/l*12);n.startRow=Math.max(n.startColumn-u,0),n.endColumn=Math.min(n.endColumn+u,l-1)}s.runHooks(\"afterViewportColumnCalculatorOverride\",n)},rowHeaderWidth:()=>t.settings.rowHeaderWidth,columnHeaderHeight(){let n=s.runHooks(\"modifyColumnHeaderHeight\");return t.settings.columnHeaderHeight||n}};s.runHooks(\"beforeInitWalkontable\",r),this.wt=new vi(r),this.activeWt=this.wt,this.eventManager.addEventListener(t.wt.wtTable.spreader,\"mousedown\",n=>{n.target===t.wt.wtTable.spreader&&n.which===3&&bt(n)}),this.eventManager.addEventListener(t.wt.wtTable.spreader,\"contextmenu\",n=>{n.target===t.wt.wtTable.spreader&&n.which===3&&bt(n)}),this.eventManager.addEventListener(document.documentElement,\"click\",()=>{t.settings.observeDOMVisibility&&t.wt.drawInterrupted&&(t.instance.forceFullRender=!0,t.render())})}Wt.prototype.isTextSelectionAllowed=function(s){if(fi(s))return!0;let t=se(s,this.instance.view.wt.wtTable.spreader);return!!(this.settings.fragmentSelection===!0&&t||this.settings.fragmentSelection===\"cell\"&&this.isSelectedOnlyCell()&&t||!this.settings.fragmentSelection&&this.isCellEdited()&&this.isSelectedOnlyCell())};Wt.prototype.isSelectedOnlyCell=function(){let[s,t,e,o]=this.instance.getSelectedLast()||[];return s!==void 0&&s===e&&t===o};Wt.prototype.isCellEdited=function(){let s=this.instance.getActiveEditor();return s&&s.isOpened()};Wt.prototype.beforeRender=function(s,t){s&&this.instance.runHooks(\"beforeRender\",this.instance.forceFullRender,t)};Wt.prototype.onDraw=function(s){s&&this.instance.runHooks(\"afterRender\",this.instance.forceFullRender)};Wt.prototype.render=function(){this.wt.draw(!this.instance.forceFullRender),this.instance.forceFullRender=!1,this.instance.renderCall=!1};Wt.prototype.getCellAtCoords=function(s,t){let e=this.wt.getCell(s,t);return e<0?null:e};Wt.prototype.scrollViewport=function(s,t,e,o,i){return this.wt.scrollViewport(s,t,e,o,i)};Wt.prototype.scrollViewportHorizontally=function(s,t,e){return this.wt.scrollViewportHorizontally(s,t,e)};Wt.prototype.scrollViewportVertically=function(s,t,e){return this.wt.scrollViewportVertically(s,t,e)};Wt.prototype.appendRowHeader=function(s,t){if(t.firstChild){let e=t.firstChild;if(!z(e,\"relative\")){xt(t),this.appendRowHeader(s,t);return}this.updateCellHeader(e.querySelector(\".rowHeader\"),s,this.instance.getRowHeader)}else{let e=document.createElement(\"div\"),o=document.createElement(\"span\");e.className=\"relative\",o.className=\"rowHeader\",this.updateCellHeader(o,s,this.instance.getRowHeader),e.appendChild(o),t.appendChild(e)}this.instance.runHooks(\"afterGetRowHeader\",s,t)};Wt.prototype.appendColHeader=function(s,t){if(t.firstChild){let e=t.firstChild;z(e,\"relative\")?this.updateCellHeader(e.querySelector(\".colHeader\"),s,this.instance.getColHeader):(xt(t),this.appendColHeader(s,t))}else{let e=document.createElement(\"div\"),o=document.createElement(\"span\");e.className=\"relative\",o.className=\"colHeader\",this.updateCellHeader(o,s,this.instance.getColHeader),e.appendChild(o),t.appendChild(e)}this.instance.runHooks(\"afterGetColHeader\",s,t)};Wt.prototype.updateCellHeader=function(s,t,e){let o=t,i=this.wt.wtOverlays.getParentOverlay(s)||this.wt;s.parentNode&&(z(s,\"colHeader\")?o=i.wtTable.columnFilter.sourceToRendered(t):z(s,\"rowHeader\")&&(o=i.wtTable.rowFilter.sourceToRendered(t))),o>-1?Te(s,e(t)):(Pe(s,\"\\xA0\"),L(s,\"cornerHeader\"))};Wt.prototype.maximumVisibleElementWidth=function(s){let e=this.wt.wtViewport.getWorkspaceWidth()-s;return e>0?e:0};Wt.prototype.maximumVisibleElementHeight=function(s){let e=this.wt.wtViewport.getWorkspaceHeight()-s;return e>0?e:0};Wt.prototype.mainViewIsActive=function(){return this.wt===this.activeWt};Wt.prototype.destroy=function(){this.wt.destroy(),this.eventManager.destroy()};var lu=Wt;var Dl=class{constructor(t,e=[]){this.hot=t,this.data=e,this.dataType=\"array\",this.colToProp=()=>{},this.propToCol=()=>{}}getData(t=!1){let e=this.data;return t&&(e=this.getByRange({row:0,col:0},{row:Math.max(this.countRows()-1,0),col:Math.max(this.countColumns()-1,0)},!0)),e}setData(t){this.data=t}getAtColumn(t){let e=[];return v(this.data,o=>{let i=this.colToProp(t),r;typeof i==\"string\"?r=xs(o,i):typeof i==\"function\"?r=i(o):r=o[i],e.push(r)}),e}getAtRow(t){return this.data[t]}getAtCell(t,e){let o=null,i=this.hot.runHooks(\"modifyRowData\",t),r=isNaN(i)?i:this.data[t];if(r){let n=this.colToProp(e);typeof n==\"string\"?o=xs(r,n):typeof n==\"function\"?o=n(this.data.slice(t,t+1)[0]):o=r[n]}return o}getByRange(t,e,o=!1){let i=Math.min(t.row,e.row),r=Math.min(t.col,e.col),n=Math.max(t.row,e.row),l=Math.max(t.col,e.col),a=[];return P(i,n,h=>{let u=this.getAtRow(h),m;this.dataType===\"array\"?m=u.slice(r,l+1):this.dataType===\"object\"&&(m=o?[]:{},P(r,l,w=>{let R=this.colToProp(w);o?m.push(u[R]):m[R]=u[R]})),a.push(m)}),a}countRows(){return Array.isArray(this.data)?this.data.length:0}countColumns(){let t=0;return Array.isArray(this.data)&&(this.dataType===\"array\"?t=this.data[0].length:this.dataType===\"object\"&&(t=Object.keys(this.data[0]).length)),t}destroy(){this.data=null,this.hot=null}},au=Dl;var Il=class{constructor(t){this.hot=t}toVisualRow(t){return this.hot.runHooks(\"unmodifyRow\",t)}toVisualColumn(t){return this.hot.runHooks(\"unmodifyCol\",t)}toVisual(t,e){let o;return K(t)?o={row:this.toVisualRow(t.row),column:this.toVisualColumn(t.column)}:o=[this.toVisualRow(t),this.toVisualColumn(e)],o}toPhysicalRow(t){return this.hot.runHooks(\"modifyRow\",t)}toPhysicalColumn(t){return this.hot.runHooks(\"modifyCol\",t)}toPhysical(t,e){let o;return K(t)?o={row:this.toPhysicalRow(t.row),column:this.toPhysicalColumn(t.column)}:o=[this.toPhysicalRow(t),this.toPhysicalColumn(e)],o}},hu=new WeakMap,kl=new WeakMap;function Qs(s){let t=s instanceof co?s:Pm(s),e;return kl.has(t)?e=kl.get(t):(e=new Il(t),kl.set(t,e)),e}function Pm(s){if(!hu.has(s))throw Error(\"Record translator was not registered for this object identity\");return hu.get(s)}var Bm=new WeakMap,Pl=Symbol(\"rootInstance\");function cu(s){Bm.set(s,!0)}function uu(s){return s===Pl}function du(){}du.prototype={licenseKey:\"trial\",data:void 0,dataSchema:void 0,width:void 0,height:void 0,startRows:5,startCols:5,rowHeaders:void 0,colHeaders:null,colWidths:void 0,rowHeights:void 0,columns:void 0,cells:void 0,cell:[],comments:!1,customBorders:!1,minRows:0,minCols:0,maxRows:1/0,maxCols:1/0,minSpareRows:0,minSpareCols:0,allowInsertRow:!0,allowInsertColumn:!0,allowRemoveRow:!0,allowRemoveColumn:!0,selectionMode:\"multiple\",fillHandle:{autoInsertRow:!1},fixedRowsTop:0,fixedRowsBottom:0,fixedColumnsLeft:0,outsideClickDeselects:!0,enterBeginsEditing:!0,enterMoves:{row:1,col:0},tabMoves:{row:0,col:1},autoWrapRow:!0,autoWrapCol:!0,persistentState:void 0,currentRowClassName:void 0,currentColClassName:void 0,currentHeaderClassName:\"ht__highlight\",activeHeaderClassName:\"ht__active_highlight\",className:void 0,tableClassName:void 0,stretchH:\"none\",isEmptyRow(s){let t,e,o,i;for(t=0,e=this.countCols();t<e;t++)if(o=this.getDataAtCell(s,t),o!==\"\"&&o!==null&&mt(o))return typeof o==\"object\"?(i=this.getCellMeta(s,t),li(this.getSchema()[i.prop],o)):!1;return!0},isEmptyCol(s){let t,e,o;for(t=0,e=this.countRows();t<e;t++)if(o=this.getDataAtCell(t,s),o!==\"\"&&o!==null&&mt(o))return!1;return!0},observeDOMVisibility:!0,allowInvalid:!0,allowEmpty:!0,invalidCellClassName:\"htInvalid\",placeholder:void 0,placeholderCellClassName:\"htPlaceholder\",readOnlyCellClassName:\"htDimmed\",renderer:void 0,commentedCellClassName:\"htCommentCell\",fragmentSelection:!1,readOnly:!1,skipColumnOnPaste:!1,search:!1,type:\"text\",copyable:!0,editor:void 0,visibleRows:10,trimDropdown:!0,debug:!1,wordWrap:!0,noWordWrapClassName:\"htNoWrap\",contextMenu:void 0,copyPaste:!0,undo:void 0,columnSorting:void 0,manualColumnMove:void 0,manualColumnResize:void 0,manualRowMove:void 0,manualRowResize:void 0,mergeCells:!1,multiColumnSorting:void 0,viewportRowRenderingOffset:\"auto\",viewportColumnRenderingOffset:\"auto\",validator:void 0,disableVisualSelection:!1,manualColumnFreeze:void 0,trimWhitespace:!0,source:void 0,title:void 0,checkedTemplate:void 0,uncheckedTemplate:void 0,label:void 0,numericFormat:void 0,language:\"en-US\",selectOptions:void 0,autoColumnSize:void 0,autoRowSize:void 0,dateFormat:\"DD/MM/YYYY\",correctFormat:!1,defaultDate:void 0,strict:void 0,allowHtml:!1,renderAllRows:void 0,preventOverflow:!1,bindRowsWithHeaders:void 0,collapsibleColumns:void 0,columnSummary:void 0,dropdownMenu:void 0,filters:void 0,formulas:void 0,ganttChart:void 0,headerTooltips:void 0,hiddenColumns:void 0,hiddenRows:void 0,nestedHeaders:void 0,trimRows:void 0,rowHeaderWidth:void 0,columnHeaderHeight:void 0,observeChanges:void 0,sortByRelevance:!0,filter:!0,filteringCaseSensitive:!1,dragToScroll:!0,nestedRows:void 0};var Js=du;function fu(s,t){return X(t,(e,o)=>{gt(s[o])&&(s[o]=e)}),s}function Bl(s){let e=/^([a-zA-Z]{2})-([a-zA-Z]{2})$/.exec(s);return e?`${e[1].toLowerCase()}-${e[2].toUpperCase()}`:s}function mu(s,t){let e=Bl(t);Hi(e)?s.language=e:(s.language=Zs,Wl(t))}function Wl(s){mt(s)&&sc(Vt`Language with code \"${s}\" was not found. You should register particular language \n    before using it. Read more about this issue at: https://docs.handsontable.com/i18n/missing-language-code.`)}var wt={};It(wt,{CONTEXTMENU_ITEMS_ADD_COMMENT:()=>Yi,CONTEXTMENU_ITEMS_ALIGNMENT:()=>Ki,CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM:()=>os,CONTEXTMENU_ITEMS_ALIGNMENT_CENTER:()=>Qi,CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY:()=>Zi,CONTEXTMENU_ITEMS_ALIGNMENT_LEFT:()=>qi,CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE:()=>es,CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT:()=>Ji,CONTEXTMENU_ITEMS_ALIGNMENT_TOP:()=>ts,CONTEXTMENU_ITEMS_BORDERS:()=>is,CONTEXTMENU_ITEMS_BORDERS_BOTTOM:()=>ns,CONTEXTMENU_ITEMS_BORDERS_LEFT:()=>ls,CONTEXTMENU_ITEMS_BORDERS_RIGHT:()=>rs,CONTEXTMENU_ITEMS_BORDERS_TOP:()=>ss,CONTEXTMENU_ITEMS_CLEAR_COLUMN:()=>Bi,CONTEXTMENU_ITEMS_COPY:()=>Wi,CONTEXTMENU_ITEMS_CUT:()=>Fi,CONTEXTMENU_ITEMS_EDIT_COMMENT:()=>Gi,CONTEXTMENU_ITEMS_FREEZE_COLUMN:()=>Vi,CONTEXTMENU_ITEMS_HIDE_COLUMN:()=>Ul,CONTEXTMENU_ITEMS_HIDE_ROW:()=>$l,CONTEXTMENU_ITEMS_INSERT_LEFT:()=>Li,CONTEXTMENU_ITEMS_INSERT_RIGHT:()=>xi,CONTEXTMENU_ITEMS_MERGE_CELLS:()=>zi,CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD:()=>Vl,CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD:()=>Fl,CONTEXTMENU_ITEMS_READ_ONLY:()=>Pi,CONTEXTMENU_ITEMS_READ_ONLY_COMMENT:()=>ji,CONTEXTMENU_ITEMS_REDO:()=>Ii,CONTEXTMENU_ITEMS_REMOVE_BORDERS:()=>as,CONTEXTMENU_ITEMS_REMOVE_COLUMN:()=>Di,CONTEXTMENU_ITEMS_REMOVE_COMMENT:()=>Xi,CONTEXTMENU_ITEMS_REMOVE_ROW:()=>_i,CONTEXTMENU_ITEMS_ROW_ABOVE:()=>Ai,CONTEXTMENU_ITEMS_ROW_BELOW:()=>Ni,CONTEXTMENU_ITEMS_SHOW_COLUMN:()=>zl,CONTEXTMENU_ITEMS_SHOW_ROW:()=>Yl,CONTEXTMENU_ITEMS_UNDO:()=>ki,CONTEXTMENU_ITEMS_UNFREEZE_COLUMN:()=>Ui,CONTEXTMENU_ITEMS_UNMERGE_CELLS:()=>$i,CONTEXT_MENU_ITEMS_NAMESPACE:()=>tt,FILTERS_BUTTONS_CANCEL:()=>Ea,FILTERS_BUTTONS_CLEAR:()=>Ca,FILTERS_BUTTONS_OK:()=>ya,FILTERS_BUTTONS_PLACEHOLDER_SEARCH:()=>Sa,FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE:()=>Ta,FILTERS_BUTTONS_PLACEHOLDER_VALUE:()=>Ra,FILTERS_BUTTONS_SELECT_ALL:()=>wa,FILTERS_CONDITIONS_AFTER:()=>la,FILTERS_CONDITIONS_BEFORE:()=>aa,FILTERS_CONDITIONS_BEGINS_WITH:()=>Ql,FILTERS_CONDITIONS_BETWEEN:()=>ra,FILTERS_CONDITIONS_BY_VALUE:()=>Wm,FILTERS_CONDITIONS_CONTAINS:()=>Zl,FILTERS_CONDITIONS_EMPTY:()=>Xl,FILTERS_CONDITIONS_ENDS_WITH:()=>Jl,FILTERS_CONDITIONS_EQUAL:()=>Kl,FILTERS_CONDITIONS_GREATER_THAN:()=>ea,FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL:()=>oa,FILTERS_CONDITIONS_LESS_THAN:()=>ia,FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL:()=>sa,FILTERS_CONDITIONS_NAMESPACE:()=>Ot,FILTERS_CONDITIONS_NONE:()=>Gl,FILTERS_CONDITIONS_NOT_BETWEEN:()=>na,FILTERS_CONDITIONS_NOT_CONTAIN:()=>ta,FILTERS_CONDITIONS_NOT_EMPTY:()=>jl,FILTERS_CONDITIONS_NOT_EQUAL:()=>ql,FILTERS_CONDITIONS_TODAY:()=>ha,FILTERS_CONDITIONS_TOMORROW:()=>ca,FILTERS_CONDITIONS_YESTERDAY:()=>ua,FILTERS_DIVS_FILTER_BY_CONDITION:()=>da,FILTERS_DIVS_FILTER_BY_VALUE:()=>fa,FILTERS_LABELS_CONJUNCTION:()=>ma,FILTERS_LABELS_DISJUNCTION:()=>pa,FILTERS_NAMESPACE:()=>Zt,FILTERS_VALUES_BLANK_CELLS:()=>ga});var tt=\"ContextMenu:items\",Ai=`${tt}.insertRowAbove`,Ni=`${tt}.insertRowBelow`,Li=`${tt}.insertColumnOnTheLeft`,xi=`${tt}.insertColumnOnTheRight`,_i=`${tt}.removeRow`,Di=`${tt}.removeColumn`,ki=`${tt}.undo`,Ii=`${tt}.redo`,Pi=`${tt}.readOnly`,Bi=`${tt}.clearColumn`,Wi=`${tt}.copy`,Fi=`${tt}.cut`,Vi=`${tt}.freezeColumn`,Ui=`${tt}.unfreezeColumn`,zi=`${tt}.mergeCells`,$i=`${tt}.unmergeCells`,Yi=`${tt}.addComment`,Gi=`${tt}.editComment`,Xi=`${tt}.removeComment`,ji=`${tt}.readOnlyComment`,Ki=`${tt}.align`,qi=`${tt}.align.left`,Qi=`${tt}.align.center`,Ji=`${tt}.align.right`,Zi=`${tt}.align.justify`,ts=`${tt}.align.top`,es=`${tt}.align.middle`,os=`${tt}.align.bottom`,is=`${tt}.borders`,ss=`${tt}.borders.top`,rs=`${tt}.borders.right`,ns=`${tt}.borders.bottom`,ls=`${tt}.borders.left`,as=`${tt}.borders.remove`,Fl=`${tt}.nestedHeaders.insertChildRow`,Vl=`${tt}.nestedHeaders.detachFromParent`,Ul=`${tt}.hideColumn`,zl=`${tt}.showColumn`,$l=`${tt}.hideRow`,Yl=`${tt}.showRow`,Zt=\"Filters:\",Ot=`${Zt}conditions`,Gl=`${Ot}.none`,Xl=`${Ot}.isEmpty`,jl=`${Ot}.isNotEmpty`,Kl=`${Ot}.isEqualTo`,ql=`${Ot}.isNotEqualTo`,Ql=`${Ot}.beginsWith`,Jl=`${Ot}.endsWith`,Zl=`${Ot}.contains`,ta=`${Ot}.doesNotContain`,Wm=`${Ot}.byValue`,ea=`${Ot}.greaterThan`,oa=`${Ot}.greaterThanOrEqualTo`,ia=`${Ot}.lessThan`,sa=`${Ot}.lessThanOrEqualTo`,ra=`${Ot}.isBetween`,na=`${Ot}.isNotBetween`,la=`${Ot}.after`,aa=`${Ot}.before`,ha=`${Ot}.today`,ca=`${Ot}.tomorrow`,ua=`${Ot}.yesterday`,da=`${Zt}labels.filterByCondition`,fa=`${Zt}labels.filterByValue`,ma=`${Zt}labels.conjunction`,pa=`${Zt}labels.disjunction`,ga=`${Zt}values.blankCells`,wa=`${Zt}buttons.selectAll`,Ca=`${Zt}buttons.clear`,ya=`${Zt}buttons.ok`,Ea=`${Zt}buttons.cancel`,Sa=`${Zt}buttons.placeholder.search`,Ra=`${Zt}buttons.placeholder.value`,Ta=`${Zt}buttons.placeholder.secondValue`;var Fm={languageCode:\"en-US\",[Ai]:\"Insert row above\",[Ni]:\"Insert row below\",[Li]:\"Insert column left\",[xi]:\"Insert column right\",[_i]:[\"Remove row\",\"Remove rows\"],[Di]:[\"Remove column\",\"Remove columns\"],[ki]:\"Undo\",[Ii]:\"Redo\",[Pi]:\"Read only\",[Bi]:\"Clear column\",[Ki]:\"Alignment\",[qi]:\"Left\",[Qi]:\"Center\",[Ji]:\"Right\",[Zi]:\"Justify\",[ts]:\"Top\",[es]:\"Middle\",[os]:\"Bottom\",[Vi]:\"Freeze column\",[Ui]:\"Unfreeze column\",[is]:\"Borders\",[ss]:\"Top\",[rs]:\"Right\",[ns]:\"Bottom\",[ls]:\"Left\",[as]:\"Remove border(s)\",[Yi]:\"Add comment\",[Gi]:\"Edit comment\",[Xi]:\"Delete comment\",[ji]:\"Read-only comment\",[zi]:\"Merge cells\",[$i]:\"Unmerge cells\",[Wi]:\"Copy\",[Fi]:\"Cut\",[Fl]:\"Insert child row\",[Vl]:\"Detach from parent\",[Ul]:[\"Hide column\",\"Hide columns\"],[zl]:[\"Show column\",\"Show columns\"],[$l]:[\"Hide row\",\"Hide rows\"],[Yl]:[\"Show row\",\"Show rows\"],[Gl]:\"None\",[Xl]:\"Is empty\",[jl]:\"Is not empty\",[Kl]:\"Is equal to\",[ql]:\"Is not equal to\",[Ql]:\"Begins with\",[Jl]:\"Ends with\",[Zl]:\"Contains\",[ta]:\"Does not contain\",[ea]:\"Greater than\",[oa]:\"Greater than or equal to\",[ia]:\"Less than\",[sa]:\"Less than or equal to\",[ra]:\"Is between\",[na]:\"Is not between\",[la]:\"After\",[aa]:\"Before\",[ha]:\"Today\",[ca]:\"Tomorrow\",[ua]:\"Yesterday\",[ga]:\"Blank cells\",[da]:\"Filter by condition\",[fa]:\"Filter by value\",[ma]:\"And\",[pa]:\"Or\",[wa]:\"Select all\",[Ca]:\"Clear\",[ya]:\"OK\",[Ea]:\"Cancel\",[Sa]:\"Search\",[Ra]:\"Value\",[Ta]:\"Second value\"},ba=Fm;var Zs=ba.languageCode,{register:Vm,getItem:pu,hasItem:Um,getValues:zm}=Pt(\"languagesDictionaries\");function va(s,t){let e=s,o=t;return K(s)&&(o=s,e=o.languageCode),$m(e,o),Vm(e,Rt(o)),Rt(o)}function tr(s){return Hi(s)?Rt(pu(s)):null}function Hi(s){return Um(s)}function $m(s,t){s!==Zs&&fu(t,pu(Zs))}function gu(){return zm()}va(ba);function Oa(s,t){return Array.isArray(s)&&Number.isInteger(t)?s[t]:s}var{register:Ym,getValues:Gm}=Pt(\"phraseFormatters\");function Xm(s,t){Ym(s,t)}function wu(){return Gm()}Xm(\"pluralize\",Oa);function er(s,t,e){let o=tr(s);if(o===null)return null;let i=o[t];if(gt(i))return null;let r=jm(i,e);return Array.isArray(r)?r[0]:r}function jm(s,t){let e=s;return v(wu(),o=>{e=o(s,t)}),e}var hs=new G,uo=new Set,Ko=0;function Cu(){Ko===0&&(hs.addEventListener(document,\"keydown\",s=>{uo.has(s.keyCode)||uo.add(s.keyCode)}),hs.addEventListener(document,\"keyup\",s=>{uo.has(s.keyCode)&&uo.delete(s.keyCode)}),hs.addEventListener(document,\"visibilitychange\",()=>{document.hidden&&uo.clear()}),hs.addEventListener(window,\"blur\",()=>{uo.clear()})),Ko+=1}function yu(){Ko>0&&(Ko-=1),Ko===0&&Km()}function Km(){hs.clearEvents(),uo.clear(),Ko=0}function cs(){return Array.from(uo.values()).some(t=>Ti(t))}function qm({activeHeaderClassName:s}){return new le({highlightHeaderClassName:s})}var Eu=qm;function Qm({layerLevel:s,areaCornerVisible:t}){return new le({className:\"area\",markIntersections:!0,layerLevel:Math.min(s,7),border:{width:1,color:\"#4b89ff\",cornerVisible:t}})}var Su=Qm;function Jm({cellCornerVisible:s}){return new le({className:\"current\",border:{width:2,color:\"#4b89ff\",cornerVisible:s}})}var Ru=Jm;function Zm({border:s,cellRange:t}){return new le(s,t)}var Tu=Zm;function tp(){return new le({className:\"fill\",border:{width:1,color:\"#ff0000\"}})}var bu=tp;function ep({headerClassName:s,rowClassName:t,columnClassName:e}){return new le({className:\"highlight\",highlightHeaderClassName:s,highlightRowClassName:t,highlightColumnClassName:e})}var vu=ep;var{register:qo,getItem:op}=Pt(\"highlight/types\");qo(\"active-header\",Eu);qo(\"area\",Su);qo(\"cell\",Ru);qo(\"custom-selection\",Tu);qo(\"fill\",bu);qo(\"header\",vu);function vo(s,t){return op(s)(t)}var ip=\"active-header\",Ha=\"area\",or=\"cell\",sp=\"fill\",Aa=\"header\",rp=\"custom-selection\",Ma=class{constructor(t){this.options=t,this.layerLevel=0,this.cell=vo(or,t),this.fill=vo(sp,t),this.areas=new Map,this.headers=new Map,this.activeHeaders=new Map,this.customSelections=[]}isEnabledFor(t){let e=t===\"current\"?or:t,o=this.options.disableHighlight;return typeof o==\"string\"&&(o=[o]),o===!1||Array.isArray(o)&&!o.includes(e)}useLayerLevel(t=0){return this.layerLevel=t,this}getCell(){return this.cell}getFill(){return this.fill}createOrGetArea(){let t=this.layerLevel,e;return this.areas.has(t)?e=this.areas.get(t):(e=vo(Ha,{layerLevel:t,...this.options}),this.areas.set(t,e)),e}getAreas(){return[...this.areas.values()]}createOrGetHeader(){let t=this.layerLevel,e;return this.headers.has(t)?e=this.headers.get(t):(e=vo(Aa,{...this.options}),this.headers.set(t,e)),e}getHeaders(){return[...this.headers.values()]}createOrGetActiveHeader(){let t=this.layerLevel,e;return this.activeHeaders.has(t)?e=this.activeHeaders.get(t):(e=vo(ip,{...this.options}),this.activeHeaders.set(t,e)),e}getActiveHeaders(){return[...this.activeHeaders.values()]}getCustomSelections(){return[...this.customSelections.values()]}addCustomSelection(t){this.customSelections.push(vo(rp,{...t}))}clear(){this.cell.clear(),this.fill.clear(),v(this.areas.values(),t=>{t.clear()}),v(this.headers.values(),t=>{t.clear()}),v(this.activeHeaders.values(),t=>{t.clear()})}[Symbol.iterator](){return[this.cell,this.fill,...this.areas.values(),...this.headers.values(),...this.activeHeaders.values(),...this.customSelections][Symbol.iterator]()}},Na=Ma;var La=class{constructor(){this.ranges=[]}isEmpty(){return this.size()===0}set(t){return this.clear(),this.ranges.push(new Ct(t)),this}add(t){return this.ranges.push(new Ct(t)),this}current(){return this.peekByIndex(0)}previous(){return this.peekByIndex(-1)}includes(t){return this.ranges.some(e=>e.includes(t))}clear(){return this.ranges.length=0,this}size(){return this.ranges.length}peekByIndex(t=0){let e=this.size()+t-1,o;return e>=0&&(o=this.ranges[e]),o}[Symbol.iterator](){return this.ranges[Symbol.iterator]()}},Ou=La;var np=\"localHooks\",Mu={_localHooks:Object.create(null),addLocalHook(s,t){return this._localHooks[s]||(this._localHooks[s]=[]),this._localHooks[s].push(t),this},runLocalHooks(s,...t){this._localHooks[s]&&v(this._localHooks[s],e=>e.apply(this,t))},clearLocalHooks(){return this._localHooks={},this}};De(Mu,\"MIXIN_NAME\",np,{writable:!1,enumerable:!1});var ge=Mu;var ir=class{constructor(t,e){this.range=t,this.options=e}transformStart(t,e,o){let i=new M(t,e);this.runLocalHooks(\"beforeTransformStart\",i);let r=this.options.countRows(),n=this.options.countCols(),l=this.options.fixedRowsBottom(),a=this.options.minSpareRows(),h=this.options.minSpareCols(),u=this.options.autoWrapRow(),m=this.options.autoWrapCol(),w=this.range.current().highlight;w.row+t>r-1?o&&a>0&&!(l&&w.row>=r-l-1)?(this.runLocalHooks(\"insertRowRequire\",r),r=this.options.countRows()):m&&(i.row=1-r,i.col=w.col+i.col===n-1?1-n:1):m&&w.row+i.row<0&&w.col+i.col>=0&&(i.row=r-1,i.col=w.col+i.col===0?n-1:-1),w.col+i.col>n-1?o&&h>0?(this.runLocalHooks(\"insertColRequire\",n),n=this.options.countCols()):u&&(i.row=w.row+i.row===r-1?1-r:1,i.col=1-n):u&&w.col+i.col<0&&w.row+i.row>=0&&(i.row=w.row+i.row===0?r-1:-1,i.col=n-1);let R=new M(w.row+i.row,w.col+i.col),A=0,O=0;return R.row<0?(A=-1,R.row=0):R.row>0&&R.row>=r&&(A=1,R.row=r-1),R.col<0?(O=-1,R.col=0):R.col>0&&R.col>=n&&(O=1,R.col=n-1),this.runLocalHooks(\"afterTransformStart\",R,A,O),R}transformEnd(t,e){let o=new M(t,e);this.runLocalHooks(\"beforeTransformEnd\",o);let i=this.options.countRows(),r=this.options.countCols(),n=this.range.current(),l=new M(n.to.row+o.row,n.to.col+o.col),a=0,h=0;return l.row<0?(a=-1,l.row=0):l.row>0&&l.row>=i&&(a=1,l.row=i-1),l.col<0?(h=-1,l.col=0):l.col>0&&l.col>=r&&(h=1,l.col=r-1),this.runLocalHooks(\"afterTransformEnd\",l,a,h),l}};Lt(ir,ge);var Hu=ir;var us=0,ds=1,Nu=2,_a=3,lp=[_a,Nu],ap=[[\"number\"],[\"number\",\"string\"],[\"number\",\"undefined\"],[\"number\",\"string\",\"undefined\"]],xa=Symbol(\"root\"),Au=Symbol(\"child\");function Qe(s,t=xa){if(t!==xa&&t!==Au)throw new Error(\"The second argument is used internally only and cannot be overwritten.\");let e=Array.isArray(s),o=t===xa,i=us;if(e){let r=s[0];s.length===0?i=ds:o&&r instanceof Ct?i=_a:o&&Array.isArray(r)?i=Qe(r,Au):s.length>=2&&s.length<=4&&!s.some((l,a)=>!ap[a].includes(typeof l))&&(i=Nu)}return i}function fo(s,{keepDirection:t=!1,propToCol:e}={}){if(!lp.includes(s))throw new Error(\"Unsupported selection ranges schema type was provided.\");return function(o){let i=s===_a,r=i?o.from.row:o[0],n=i?o.from.col:o[1],l=i?o.to.row:o[2],a=i?o.to.col:o[3];if(typeof e==\"function\"&&(typeof n==\"string\"&&(n=e(n)),typeof a==\"string\"&&(a=e(a))),gt(l)&&(l=r),gt(a)&&(a=n),!t){let h=r,u=n,m=l,w=a;r=Math.min(h,m),n=Math.min(u,w),l=Math.max(h,m),a=Math.max(u,w)}return[r,n,l,a]}}function Lu(s){let t=Qe(s);if(t===us||t===ds)return[];let e=fo(t),o=new Set;v(s,n=>{let[,l,,a]=e(n),h=a-l+1;v(Array.from(new Array(h),(u,m)=>l+m),u=>{o.has(u)||o.add(u)})});let i=Array.from(o).sort((n,l)=>n-l);return Tt(i,(n,l,a,h)=>(a!==0&&l===h[a-1]+1?n[n.length-1][1]+=1:n.push([l,1]),n),[])}function xu(s){let t=Qe(s);if(t===us||t===ds)return[];let e=fo(t),o=new Set;v(s,n=>{let[l,,a]=e(n),h=a-l+1;v(Array.from(new Array(h),(u,m)=>l+m),u=>{o.has(u)||o.add(u)})});let i=Array.from(o).sort((n,l)=>n-l);return Tt(i,(n,l,a,h)=>(a!==0&&l===h[a-1]+1?n[n.length-1][1]+=1:n.push([l,1]),n),[])}function Je(s,t=1/0){return typeof s==\"number\"&&s>=0&&s<t}var sr=class{constructor(t,e){this.settings=t,this.tableProps=e,this.inProgress=!1,this.selectedByCorner=!1,this.selectedByRowHeader=new Set,this.selectedByColumnHeader=new Set,this.selectedRange=new Ou,this.highlight=new Na({headerClassName:t.currentHeaderClassName,activeHeaderClassName:t.activeHeaderClassName,rowClassName:t.currentRowClassName,columnClassName:t.currentColClassName,disableHighlight:this.settings.disableVisualSelection,cellCornerVisible:(...o)=>this.isCellCornerVisible(...o),areaCornerVisible:(...o)=>this.isAreaCornerVisible(...o)}),this.transformation=new Hu(this.selectedRange,{countRows:()=>this.tableProps.countRows(),countCols:()=>this.tableProps.countCols(),fixedRowsBottom:()=>t.fixedRowsBottom,minSpareRows:()=>t.minSpareRows,minSpareCols:()=>t.minSpareCols,autoWrapRow:()=>t.autoWrapRow,autoWrapCol:()=>t.autoWrapCol}),this.transformation.addLocalHook(\"beforeTransformStart\",(...o)=>this.runLocalHooks(\"beforeModifyTransformStart\",...o)),this.transformation.addLocalHook(\"afterTransformStart\",(...o)=>this.runLocalHooks(\"afterModifyTransformStart\",...o)),this.transformation.addLocalHook(\"beforeTransformEnd\",(...o)=>this.runLocalHooks(\"beforeModifyTransformEnd\",...o)),this.transformation.addLocalHook(\"afterTransformEnd\",(...o)=>this.runLocalHooks(\"afterModifyTransformEnd\",...o)),this.transformation.addLocalHook(\"insertRowRequire\",(...o)=>this.runLocalHooks(\"insertRowRequire\",...o)),this.transformation.addLocalHook(\"insertColRequire\",(...o)=>this.runLocalHooks(\"insertColRequire\",...o))}getSelectedRange(){return this.selectedRange}begin(){this.inProgress=!0}finish(){this.runLocalHooks(\"afterSelectionFinished\",Array.from(this.selectedRange)),this.inProgress=!1}isInProgress(){return this.inProgress}setRangeStart(t,e,o=!1){let i=this.settings.selectionMode===\"multiple\",r=gt(e)?cs():e,n=t.row<0,l=t.col<0,a=n&&l;n&&(t.row=0),l&&(t.col=0),this.selectedByCorner=a,this.runLocalHooks(`beforeSetRangeStart${o?\"Only\":\"\"}`,t),(!i||i&&!r&&gt(e))&&this.selectedRange.clear(),this.selectedRange.add(t),this.getLayerLevel()===0&&(this.selectedByRowHeader.clear(),this.selectedByColumnHeader.clear()),!a&&l&&this.selectedByRowHeader.add(this.getLayerLevel()),!a&&n&&this.selectedByColumnHeader.add(this.getLayerLevel()),o||this.setRangeEnd(t)}setRangeStartOnly(t,e){this.setRangeStart(t,e,!0)}setRangeEnd(t){if(this.selectedRange.isEmpty())return;this.runLocalHooks(\"beforeSetRangeEnd\",t),this.begin();let e=this.selectedRange.current();this.settings.selectionMode!==\"single\"&&e.setTo(new M(t.row,t.col)),this.highlight.getCell().clear(),this.highlight.isEnabledFor(or)&&this.highlight.getCell().add(this.selectedRange.current().highlight);let o=this.getLayerLevel();o<this.highlight.layerLevel&&(v(this.highlight.getAreas(),l=>{l.clear()}),v(this.highlight.getHeaders(),l=>{l.clear()}),v(this.highlight.getActiveHeaders(),l=>{l.clear()})),this.highlight.useLayerLevel(o);let i=this.highlight.createOrGetArea(),r=this.highlight.createOrGetHeader(),n=this.highlight.createOrGetActiveHeader();i.clear(),r.clear(),n.clear(),this.highlight.isEnabledFor(Ha)&&(this.isMultiple()||o>=1)&&(i.add(e.from).add(e.to),o===1&&(this.highlight.useLayerLevel(o-1).createOrGetArea().add(this.selectedRange.previous().from),this.highlight.useLayerLevel(o))),this.highlight.isEnabledFor(Aa)&&(this.settings.selectionMode===\"single\"?r.add(e.highlight):r.add(e.from).add(e.to)),this.isSelectedByRowHeader()&&this.tableProps.countCols()===e.getWidth()&&n.add(new M(e.from.row,-1)).add(new M(e.to.row,-1)),this.isSelectedByColumnHeader()&&this.tableProps.countRows()===e.getHeight()&&n.add(new M(-1,e.from.col)).add(new M(-1,e.to.col)),this.runLocalHooks(\"afterSetRangeEnd\",t)}isMultiple(){let t=oo(!this.selectedRange.current().isSingle());return this.runLocalHooks(\"afterIsMultipleSelection\",t),t.value}transformStart(t,e,o){this.setRangeStart(this.transformation.transformStart(t,e,o))}transformEnd(t,e){this.setRangeEnd(this.transformation.transformEnd(t,e))}getLayerLevel(){return this.selectedRange.size()-1}isSelected(){return!this.selectedRange.isEmpty()}isSelectedByRowHeader(t=this.getLayerLevel()){return t===-1?this.selectedByRowHeader.size>0:this.selectedByRowHeader.has(t)}isSelectedByColumnHeader(t=this.getLayerLevel()){return t===-1?this.selectedByColumnHeader.size>0:this.selectedByColumnHeader.has(t)}isSelectedByAnyHeader(){return this.isSelectedByRowHeader(-1)||this.isSelectedByColumnHeader(-1)}isSelectedByCorner(){return this.selectedByCorner}inInSelection(t){return this.selectedRange.includes(t)}isCellCornerVisible(){return this.settings.fillHandle&&!this.tableProps.isEditorOpened()&&!this.isMultiple()}isAreaCornerVisible(t){return Number.isInteger(t)&&t!==this.getLayerLevel()?!1:this.settings.fillHandle&&!this.tableProps.isEditorOpened()&&this.isMultiple()}clear(){this.selectedRange.clear(),this.highlight.clear()}deselect(){this.isSelected()&&(this.inProgress=!1,this.clear(),this.runLocalHooks(\"afterDeselect\"))}selectAll(){this.clear(),this.setRangeStart(new M(-1,-1)),this.selectedByRowHeader.add(this.getLayerLevel()),this.selectedByColumnHeader.add(this.getLayerLevel()),this.setRangeEnd(new M(this.tableProps.countRows()-1,this.tableProps.countCols()-1))}selectCells(t){let e=Qe(t);if(e===ds)return!1;if(e===us)throw new Error(Vt`Unsupported format of the selection ranges was passed. To select cells pass \n        the coordinates as an array of arrays ([[rowStart, columnStart/columnPropStart, rowEnd, columnEnd/columnPropEnd]]) \n        or as an array of CellRange objects.`);let o=fo(e,{propToCol:l=>this.tableProps.propToCol(l),keepDirection:!0}),i=this.tableProps.countRows(),r=this.tableProps.countCols(),n=!t.some(l=>{let[a,h,u,m]=o(l);return!(Je(a,i)&&Je(h,r)&&Je(u,i)&&Je(m,r))});return n&&(this.clear(),v(t,l=>{let[a,h,u,m]=o(l);this.setRangeStartOnly(new M(a,h),!1),this.setRangeEnd(new M(u,m)),this.finish()})),n}selectColumns(t,e=t){let o=typeof t==\"string\"?this.tableProps.propToCol(t):t,i=typeof e==\"string\"?this.tableProps.propToCol(e):e,r=this.tableProps.countCols(),n=Je(o,r)&&Je(i,r);return n&&(this.setRangeStartOnly(new M(-1,o)),this.setRangeEnd(new M(this.tableProps.countRows()-1,i)),this.finish()),n}selectRows(t,e=t){let o=this.tableProps.countRows(),i=Je(t,o)&&Je(e,o);return i&&(this.setRangeStartOnly(new M(t,-1)),this.setRangeEnd(new M(e,this.tableProps.countCols()-1)),this.finish()),i}};Lt(sr,ge);var Da=sr;var ka=null;function co(s,t,e=!1){let o=!1,i=this,r=function(){},n=new G(i),l,a,h,u,m;Ft(r.prototype,Js.prototype),Ft(r.prototype,t),Ft(r.prototype,ft(t)),mu(r.prototype,t.language),uu(e)&&cu(this),Cu(),this.isDestroyed=!1,this.rootElement=s,this.isHotTableEnv=Tn(this.rootElement),G.isHotTableEnv=this.isHotTableEnv,this.container=document.createElement(\"div\"),this.renderCall=!1,s.insertBefore(this.container,s.firstChild),this.guid=`ht_${Ci()}`;let w=Qs(i);h=new au(i),(!this.rootElement.id||this.rootElement.id.substring(0,3)===\"ht_\")&&(this.rootElement.id=this.guid),l={cellSettings:[],columnSettings:[],columnsSettingConflicts:[\"data\",\"width\",\"language\"],settings:new r,selRange:null,isPopulated:null,scrollable:null,firstRun:!0};let R=new Da(l.settings,{countCols:()=>i.countCols(),countRows:()=>i.countRows(),propToCol:c=>a.propToCol(c),isEditorOpened:()=>i.getActiveEditor()?i.getActiveEditor().isOpened():!1});this.selection=R,this.selection.addLocalHook(\"beforeSetRangeStart\",c=>{this.runHooks(\"beforeSetRangeStart\",c)}),this.selection.addLocalHook(\"beforeSetRangeStartOnly\",c=>{this.runHooks(\"beforeSetRangeStartOnly\",c)}),this.selection.addLocalHook(\"beforeSetRangeEnd\",c=>{this.runHooks(\"beforeSetRangeEnd\",c),c.row<0&&(c.row=this.view.wt.wtTable.getFirstVisibleRow()),c.col<0&&(c.col=this.view.wt.wtTable.getFirstVisibleColumn())}),this.selection.addLocalHook(\"afterSetRangeEnd\",c=>{let f=oo(!1),C=this.selection.getSelectedRange(),{from:S,to:N}=C.current(),g=C.size()-1;this.runHooks(\"afterSelection\",S.row,S.col,N.row,N.col,f,g),this.runHooks(\"afterSelectionByProp\",S.row,i.colToProp(S.col),N.row,i.colToProp(N.col),f,g);let y=this.selection.isSelectedByAnyHeader(),E=this.selection.selectedRange.current(),p=!0;o&&(p=!1),f.isTouched()&&(p=!f.value);let d=this.selection.isSelectedByRowHeader(),T=this.selection.isSelectedByColumnHeader();p!==!1&&(y?d?this.view.scrollViewportVertically(c.row):T&&this.view.scrollViewportHorizontally(c.col):E&&!this.selection.isMultiple()?this.view.scrollViewport(E.from):this.view.scrollViewport(c)),d&&T?L(this.rootElement,[\"ht__selection--rows\",\"ht__selection--columns\"]):d?(Y(this.rootElement,\"ht__selection--columns\"),L(this.rootElement,\"ht__selection--rows\")):T?(Y(this.rootElement,\"ht__selection--rows\"),L(this.rootElement,\"ht__selection--columns\")):Y(this.rootElement,[\"ht__selection--rows\",\"ht__selection--columns\"]),this._refreshBorders(null)}),this.selection.addLocalHook(\"afterSelectionFinished\",c=>{let f=c.length-1,{from:C,to:S}=c[f];this.runHooks(\"afterSelectionEnd\",C.row,C.col,S.row,S.col,f),this.runHooks(\"afterSelectionEndByProp\",C.row,i.colToProp(C.col),S.row,i.colToProp(S.col),f)}),this.selection.addLocalHook(\"afterIsMultipleSelection\",c=>{let f=this.runHooks(\"afterIsMultipleSelection\",c.value);c.value&&(c.value=f)}),this.selection.addLocalHook(\"beforeModifyTransformStart\",c=>{this.runHooks(\"modifyTransformStart\",c)}),this.selection.addLocalHook(\"afterModifyTransformStart\",(c,f,C)=>{this.runHooks(\"afterModifyTransformStart\",c,f,C)}),this.selection.addLocalHook(\"beforeModifyTransformEnd\",c=>{this.runHooks(\"modifyTransformEnd\",c)}),this.selection.addLocalHook(\"afterModifyTransformEnd\",(c,f,C)=>{this.runHooks(\"afterModifyTransformEnd\",c,f,C)}),this.selection.addLocalHook(\"afterDeselect\",()=>{m.destroyEditor(),this._refreshBorders(),Y(this.rootElement,[\"ht__selection--rows\",\"ht__selection--columns\"]),this.runHooks(\"afterDeselect\")}),this.selection.addLocalHook(\"insertRowRequire\",c=>{this.alter(\"insert_row\",c,1,\"auto\")}),this.selection.addLocalHook(\"insertColRequire\",c=>{this.alter(\"insert_col\",c,1,\"auto\")}),u={alter(c,f,C=1,S,N){let g;function y(p,d,T,b){let H=()=>{let x;return b===\"array\"?x=[]:b===\"object\"&&(x={}),x},_=ht(new Array(T),()=>H());_.unshift(d,0),p.splice(..._)}let E=p=>{if(p.length===0)return[];let d=[...p];return d.sort(([b],[H])=>b===H?0:b>H?1:-1),Tt(d,(b,[H,_])=>{let x=b[b.length-1],[F,U]=x,j=F+U;if(H<=j){let dt=Math.max(_-(j-H),0);x[1]+=dt}else b.push([H,_]);return b},[d[0]])};switch(c){case\"insert_row\":let p=i.countSourceRows();if(i.getSettings().maxRows===p)return;f=mt(f)?f:p,g=a.createRow(f,C,S),y(l.cellSettings,f,C,\"array\"),g&&(R.isSelected()&&R.selectedRange.current().from.row>=f?(R.selectedRange.current().from.row+=g,R.transformEnd(g,0)):i._refreshBorders());break;case\"insert_col\":g=a.createCol(f,C,S);for(let b=0,H=i.countSourceRows();b<H;b++)l.cellSettings[b]&&y(l.cellSettings[b],f,C);if(g){if(Array.isArray(i.getSettings().colHeaders)){let b=[f,0];b.length+=g,Array.prototype.splice.apply(i.getSettings().colHeaders,b)}R.isSelected()&&R.selectedRange.current().from.col>=f?(R.selectedRange.current().from.col+=g,R.transformEnd(0,g)):i._refreshBorders()}break;case\"remove_row\":let d=b=>{let H=0;v(b,([_,x])=>{let F=Bt(_)?i.countRows()-1:Math.max(_-H,0);Number.isInteger(_)&&(_=Math.max(_-H,0)),a.removeRow(_,x,S),l.cellSettings.splice(F,C);let U=i.countRows(),j=i.getSettings().fixedRowsTop;j>=F+1&&(i.getSettings().fixedRowsTop-=Math.min(x,j-F));let dt=i.getSettings().fixedRowsBottom;dt&&F>=U-dt&&(i.getSettings().fixedRowsBottom-=Math.min(x,dt)),H+=x})};Array.isArray(f)?d(E(f)):d([[f,C]]),u.adjustRowsAndCols(),i._refreshBorders();break;case\"remove_col\":let T=b=>{let H=0;v(b,([_,x])=>{let F=Bt(_)?i.countCols()-1:Math.max(_-H,0),U=w.toPhysicalColumn(F);Number.isInteger(_)&&(_=Math.max(_-H,0)),a.removeCol(_,x,S);for(let dt=0,Dt=i.countSourceRows();dt<Dt;dt++)l.cellSettings[dt]&&l.cellSettings[dt].splice(U,x);let j=i.getSettings().fixedColumnsLeft;j>=F+1&&(i.getSettings().fixedColumnsLeft-=Math.min(x,j-F)),Array.isArray(i.getSettings().colHeaders)&&(typeof U>\"u\"&&(U=-1),i.getSettings().colHeaders.splice(U,x)),H+=x})};Array.isArray(f)?T(E(f)):T([[f,C]]),u.adjustRowsAndCols(),i._refreshBorders();break;default:throw new Error(`There is no such action \"${c}\"`)}N||u.adjustRowsAndCols()},adjustRowsAndCols(){if(l.settings.minRows){let C=i.countRows();if(C<l.settings.minRows)for(let S=0,N=l.settings.minRows;S<N-C;S++)a.createRow(i.countRows(),1,\"auto\")}if(l.settings.minSpareRows){let C=i.countEmptyRows(!0);if(C<l.settings.minSpareRows)for(;C<l.settings.minSpareRows&&i.countSourceRows()<l.settings.maxRows;C++)a.createRow(i.countRows(),1,\"auto\")}{let C;if((l.settings.minCols||l.settings.minSpareCols)&&(C=i.countEmptyCols(!0)),l.settings.minCols&&!l.settings.columns&&i.countCols()<l.settings.minCols)for(;i.countCols()<l.settings.minCols;C++)a.createCol(i.countCols(),1,\"auto\");if(l.settings.minSpareCols&&!l.settings.columns&&i.dataType===\"array\"&&C<l.settings.minSpareCols)for(;C<l.settings.minSpareCols&&i.countCols()<l.settings.maxCols;C++)a.createCol(i.countCols(),1,\"auto\")}let c=i.countRows(),f=i.countCols();(c===0||f===0)&&R.deselect(),R.isSelected()&&v(R.selectedRange,C=>{let S=!1,N=C.from.row,g=C.from.col,y=C.to.row,E=C.to.col;N>c-1?(N=c-1,S=!0,y>N&&(y=N)):y>c-1&&(y=c-1,S=!0,N>y&&(N=y)),g>f-1?(g=f-1,S=!0,E>g&&(E=g)):E>f-1&&(E=f-1,S=!0,g>E&&(g=E)),S&&i.selectCell(N,g,y,E)}),i.view&&i.view.wt.wtOverlays.adjustElementsSize()},populateFromArray(c,f,C,S,N,g,y){let E,p,d,T,b=[],H={};if(p=f.length,p===0)return!1;let _,x,F,U;switch(N){case\"shift_down\":for(_=C?C.col-c.col+1:0,x=C?C.row-c.row+1:0,f=Al(f),d=0,T=f.length,F=Math.max(T,_);d<F;d++)if(d<T){for(E=0,p=f[d].length;E<x-p;E++)f[d].push(f[d][E%p]);f[d].unshift(c.col+d,c.row,0),i.spliceCol(...f[d])}else f[d%T][0]=c.col+d,i.spliceCol(...f[d%T]);break;case\"shift_right\":for(_=C?C.col-c.col+1:0,x=C?C.row-c.row+1:0,E=0,p=f.length,U=Math.max(p,x);E<U;E++)if(E<p){for(d=0,T=f[E].length;d<_-T;d++)f[E].push(f[E][d%T]);f[E].unshift(c.row+E,c.col,0),i.spliceRow(...f[E])}else f[E%p][0]=c.row+E,i.spliceRow(...f[E%p]);break;default:H.row=c.row,H.col=c.col;let j={row:C&&c?C.row-c.row+1:1,col:C&&c?C.col-c.col+1:1},dt=0,Dt=0,Yt=!0,ye,xe=function(wo,kt=null){let Ye=f[wo%f.length];return kt!==null?Ye[kt%Ye.length]:Ye},$e=f.length,_e=C?C.row-c.row+1:0;for(C?p=_e:p=Math.max($e,_e),E=0;E<p&&!(C&&H.row>C.row&&_e>$e||!l.settings.allowInsertRow&&H.row>i.countRows()-1||H.row>=l.settings.maxRows);E++){let ie=E-dt,wo=xe(ie).length,kt=C?C.col-c.col+1:0;if(C?T=kt:T=Math.max(wo,kt),H.col=c.col,ye=i.getCellMeta(H.row,H.col),(S===\"CopyPaste.paste\"||S===\"Autofill.autofill\")&&ye.skipRowOnPaste){dt+=1,H.row+=1,p+=1;continue}for(Dt=0,d=0;d<T&&!(C&&H.col>C.col&&kt>wo||!l.settings.allowInsertColumn&&H.col>i.countCols()-1||H.col>=l.settings.maxCols);d++){if(ye=i.getCellMeta(H.row,H.col),(S===\"CopyPaste.paste\"||S===\"Autofill.fill\")&&ye.skipColumnOnPaste){Dt+=1,H.col+=1,T+=1;continue}if(ye.readOnly){H.col+=1;continue}let Ye=d-Dt,Ee=xe(ie,Ye),Ze=i.getDataAtCell(H.row,H.col),Hs={row:ie,col:Ye};if(S===\"Autofill.fill\"){let Se=i.runHooks(\"beforeAutofillInsidePopulate\",Hs,g,f,y,{},j);Se&&(Ee=gt(Se.value)?Ee:Se.value)}if(Ee!==null&&typeof Ee==\"object\")if(Ze===null||typeof Ze!=\"object\")Yt=!1;else{let Se=to(Ze[0]||Ze),si=to(Ee[0]||Ee);li(Se,si)?Ee=Rt(Ee):Yt=!1}else Ze!==null&&typeof Ze==\"object\"&&(Yt=!1);Yt&&b.push([H.row,H.col,Ee]),Yt=!0,H.col+=1}H.row+=1}i.setDataAtCell(b,null,null,S||\"populateFromArray\");break}}};function A(c){let f=Bl(c);Hi(f)?(i.runHooks(\"beforeLanguageChange\",f),r.prototype.language=f,i.runHooks(\"afterLanguageChange\",f)):Wl(c)}this.init=function(){h.setData(l.settings.data),i.runHooks(\"beforeInit\"),$t()&&L(i.rootElement,\"mobile\"),this.updateSettings(l.settings,!0),this.view=new lu(this),m=eu.getInstance(i,l,R,a),this.forceFullRender=!0,i.runHooks(\"init\"),this.view.render(),typeof l.firstRun==\"object\"&&(i.runHooks(\"afterChange\",l.firstRun[0],l.firstRun[1]),l.firstRun=!1),i.runHooks(\"afterInit\")};function O(){let c=!1;return{validatorsInQueue:0,valid:!0,addValidatorToQueue(){this.validatorsInQueue+=1,c=!1},removeValidatorFormQueue(){this.validatorsInQueue=this.validatorsInQueue-1<0?0:this.validatorsInQueue-1,this.checkIfQueueIsEmpty()},onQueueEmpty(){},checkIfQueueIsEmpty(){this.validatorsInQueue===0&&c===!1&&(c=!0,this.onQueueEmpty(this.valid))}}}function D(c){let f=c.replace(\",\",\".\");return isNaN(parseFloat(f))===!1?parseFloat(f):c}function B(c,f,C){let S=new O,N=y=>y.length>0&&/^\\s*[+-.]?\\s*(?:(?:\\d+(?:(\\.|,)\\d+)?(?:e[+-]?\\d+)?)|(?:0x[a-f\\d]+))\\s*$/.test(y);S.onQueueEmpty=g;for(let y=c.length-1;y>=0;y--)if(c[y]===null)c.splice(y,1);else{let[E,p,,d]=c[y],T=a.propToCol(p),b=i.getCellMeta(E,T);b.type===\"numeric\"&&typeof d==\"string\"&&N(d)&&(c[y][3]=D(d)),i.getCellValidator(b)&&(S.addValidatorToQueue(),i.validateCell(c[y][3],b,(function(H,_){return function(x){if(typeof x!=\"boolean\")throw new Error(\"Validation error: result is not boolean\");if(x===!1&&_.allowInvalid===!1){c.splice(H,1),_.valid=!0;let F=i.getCell(_.visualRow,_.visualCol);F!==null&&Y(F,i.getSettings().invalidCellClassName)}S.removeValidatorFormQueue()}})(y,b),f))}S.checkIfQueueIsEmpty();function g(){let y;c.length&&(y=i.runHooks(\"beforeChange\",c,f||\"edit\"),At(y)?pe(\"Your beforeChange callback returns a function. It's not supported since Handsontable 0.12.1 (and the returned function will not be executed).\"):y===!1&&c.splice(0,c.length)),C()}}function $(c,f){let C=c.length-1;if(C<0)return;for(;C>=0;C--){let N=!1;if(c[C]===null){c.splice(C,1);continue}if(!((c[C][2]===null||c[C][2]===void 0)&&(c[C][3]===null||c[C][3]===void 0))){if(l.settings.allowInsertRow){for(;c[C][0]>i.countRows()-1;)if(a.createRow(void 0,void 0,f)===0){N=!0;break}}if(!N){if(i.dataType===\"array\"&&(!l.settings.columns||l.settings.columns.length===0)&&l.settings.allowInsertColumn)for(;a.propToCol(c[C][1])>i.countCols()-1;)a.createCol(void 0,void 0,f);a.set(c[C][0],c[C][1],c[C][3])}}}i.forceFullRender=!0,u.adjustRowsAndCols(),i.runHooks(\"beforeChangeRender\",c,f),m.lockEditor(),i._refreshBorders(null),m.unlockEditor(),i.view.wt.wtOverlays.adjustElementsSize(),i.runHooks(\"afterChange\",c,f||\"edit\");let S=i.getActiveEditor();S&&mt(S.refreshValue)&&S.refreshValue()}this.validateCell=function(c,f,C,S){let N=i.getCellValidator(f);function g(y,E=!0){if(!E||f.hidden===!0){C(y);return}let p=f.visualCol,d=f.visualRow,T=i.getCell(d,p,!0);T&&T.nodeName!==\"TH\"&&i.view.wt.wtSettings.settings.cellRenderer(d,p,T),C(y)}Dn(N)&&(N=(function(y){return function(E,p){p(y.test(E))}})(N)),At(N)?(c=i.runHooks(\"beforeValidate\",c,f.visualRow,f.prop,S),i._registerTimeout(setTimeout(()=>{N.call(f,c,y=>{y=i.runHooks(\"afterValidate\",y,c,f.visualRow,f.prop,S),f.valid=y,g(y),i.runHooks(\"postAfterValidate\",y,c,f.visualRow,f.prop,S)})},0))):i._registerTimeout(setTimeout(()=>{f.valid=!0,g(f.valid,!1)},0))};function et(c,f,C){return typeof c==\"object\"?c:[[c,f,C]]}this.setDataAtCell=function(c,f,C,S){let N=et(c,f,C),g=[],y=S,E,p,d;for(E=0,p=N.length;E<p;E++){if(typeof N[E]!=\"object\")throw new Error(\"Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter\");if(typeof N[E][1]!=\"number\")throw new Error(\"Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`\");d=a.colToProp(N[E][1]),g.push([N[E][0],d,h.getAtCell(w.toPhysicalRow(N[E][0]),N[E][1]),N[E][2]])}!y&&typeof c==\"object\"&&(y=f),i.runHooks(\"afterSetDataAtCell\",g,y),B(g,y,()=>{$(g,y)})},this.setDataAtRowProp=function(c,f,C,S){let N=et(c,f,C),g=[],y=S,E,p;for(E=0,p=N.length;E<p;E++)g.push([N[E][0],N[E][1],h.getAtCell(w.toPhysicalRow(N[E][0]),N[E][1]),N[E][2]]);!y&&typeof c==\"object\"&&(y=f),i.runHooks(\"afterSetDataAtRowProp\",g,y),B(g,y,()=>{$(g,y)})},this.listen=function(c=!0){if(c){let f=!document.activeElement||document.activeElement&&document.activeElement.nodeName===void 0;document.activeElement&&document.activeElement!==document.body&&!f?document.activeElement.blur():f&&document.body.focus()}i&&!i.isListening()&&(ka=i.guid,i.runHooks(\"afterListen\"))},this.unlisten=function(){this.isListening()&&(ka=null,i.runHooks(\"afterUnlisten\"))},this.isListening=function(){return ka===i.guid},this.destroyEditor=function(c=!1,f=!0){i._refreshBorders(c,f)},this.populateFromArray=function(c,f,C,S,N,g,y,E,p){if(!(typeof C==\"object\"&&typeof C[0]==\"object\"))throw new Error(\"populateFromArray parameter `input` must be an array of arrays\");let d=typeof S==\"number\"?new M(S,N):null;return u.populateFromArray(new M(c,f),C,d,g,y,E,p)},this.spliceCol=function(c,f,C,...S){return a.spliceCol(c,f,C,...S)},this.spliceRow=function(c,f,C,...S){return a.spliceRow(c,f,C,...S)},this.getSelected=function(){if(R.isSelected())return ht(R.getSelectedRange(),({from:c,to:f})=>[c.row,c.col,f.row,f.col])},this.getSelectedLast=function(){let c=this.getSelected(),f;return c&&c.length>0&&(f=c[c.length-1]),f},this.getSelectedRange=function(){if(R.isSelected())return Array.from(R.getSelectedRange())},this.getSelectedRangeLast=function(){let c=this.getSelectedRange(),f;return c&&c.length>0&&(f=c[c.length-1]),f},this.emptySelectedCells=function(){if(!R.isSelected())return;let c=[];v(R.getSelectedRange(),f=>{let C=f.getTopLeftCorner(),S=f.getBottomRightCorner();P(C.row,S.row,N=>{P(C.col,S.col,g=>{this.getCellMeta(N,g).readOnly||c.push([N,g,\"\"])})})}),c.length>0&&this.setDataAtCell(c)},this.render=function(){i.view&&(i.renderCall=!0,i.forceFullRender=!0,m.lockEditor(),i._refreshBorders(null),m.unlockEditor())},this.loadData=function(c){if(Array.isArray(l.settings.dataSchema)?i.dataType=\"array\":At(l.settings.dataSchema)?i.dataType=\"function\":i.dataType=\"object\",a&&a.destroy(),a=new Zc(i,l,r),typeof c==\"object\"&&c!==null)c.push&&c.splice||(c=[c]);else if(c===null){let C=a.getSchema();c=[];let S,N=0,g=0;for(N=0,g=l.settings.startRows;N<g;N++)if((i.dataType===\"object\"||i.dataType===\"function\")&&l.settings.dataSchema)S=Rt(C),c.push(S);else if(i.dataType===\"array\")S=Rt(C[0]),c.push(S);else{S=[];for(let y=0,E=l.settings.startCols;y<E;y++)S.push(null);c.push(S)}}else throw new Error(`loadData only accepts array of objects or array of arrays (${typeof c} given)`);l.isPopulated=!1,r.prototype.data=c,Array.isArray(c[0])&&(i.dataType=\"array\"),a.dataSource=c,h.data=c,h.dataType=i.dataType,h.colToProp=a.colToProp.bind(a),h.propToCol=a.propToCol.bind(a),f(),u.adjustRowsAndCols(),i.runHooks(\"afterLoadData\",l.firstRun),l.firstRun?l.firstRun=[null,\"loadData\"]:(i.runHooks(\"afterChange\",null,\"loadData\"),i.render()),l.isPopulated=!0;function f(){l.cellSettings.length=0}},this.getData=function(c,f,C,S){return gt(c)?a.getAll():a.getRange(new M(c,f),new M(C,S),a.DESTINATION_RENDERER)},this.getCopyableText=function(c,f,C,S){return a.getCopyableText(new M(c,f),new M(C,S))},this.getCopyableData=function(c,f){return a.getCopyable(c,a.colToProp(f))},this.getSchema=function(){return a.getSchema()},this.updateSettings=function(c,f=!1){let C=!1,S,N,g;if(mt(c.rows))throw new Error('\"rows\" setting is no longer supported. do you mean startRows, minRows or maxRows?');if(mt(c.cols))throw new Error('\"cols\" setting is no longer supported. do you mean startCols, minCols or maxCols?');for(S in c)if(S!==\"data\")if(S===\"language\"){A(c.language);continue}else V.getSingleton().getRegistered().indexOf(S)>-1?(At(c[S])||Array.isArray(c[S]))&&(c[S].initialHook=!0,i.addHook(S,c[S])):!f&&ot(c,S)&&(r.prototype[S]=c[S]);c.data===void 0&&l.settings.data===void 0?i.loadData(null):c.data!==void 0?i.loadData(c.data):c.columns!==void 0&&a.createMap(),g=i.countCols();let y=c.columns||r.prototype.columns;if(y&&At(y)&&(g=i.countSourceCols(),C=!0),(c.cell!==void 0||c.cells!==void 0||c.columns!==void 0)&&(l.cellSettings.length=0),g>0){let d,T;for(S=0,N=0;S<g;S++)C&&!y(S)||(l.columnSettings[N]=To(r,l.columnsSettingConflicts),d=l.columnSettings[N].prototype,y&&(C?T=y(S):T=y[N],T&&(Ft(d,T),Ft(d,ft(T)))),N+=1)}mt(c.cell)&&X(c.cell,d=>{i.setCellMetaObject(d.row,d.col,d)}),i.runHooks(\"afterCellMetaReset\"),mt(c.className)&&(r.prototype.className&&Y(i.rootElement,r.prototype.className),c.className&&L(i.rootElement,c.className));let E=i.rootElement.style.height;E!==\"\"&&(E=parseInt(i.rootElement.style.height,10));let p=c.height;if(At(p)&&(p=p()),f&&i.rootElement.getAttribute(\"style\")&&i.rootElement.setAttribute(\"data-initialstyle\",i.rootElement.getAttribute(\"style\")),p===null){let d=i.rootElement.getAttribute(\"data-initialstyle\");d&&(d.indexOf(\"height\")>-1||d.indexOf(\"overflow\")>-1)?i.rootElement.setAttribute(\"style\",d):(i.rootElement.style.height=\"\",i.rootElement.style.overflow=\"\")}else p===\"auto\"?(i.rootElement.style.height=\"\",i.rootElement.style.overflow=\"\"):p!==void 0&&(i.rootElement.style.height=`${p}px`,i.rootElement.style.overflow=\"hidden\");if(typeof c.width<\"u\"){let d=c.width;At(d)&&(d=d()),i.rootElement.style.width=`${d}px`}f||(a.clearLengthCache(),i.view&&i.view.wt.wtViewport.resetHasOversizedColumnHeadersMarked(),i.runHooks(\"afterUpdateSettings\",c)),u.adjustRowsAndCols(),i.view&&!l.firstRun&&(i.forceFullRender=!0,m.lockEditor(),i._refreshBorders(null),m.unlockEditor()),!f&&i.view&&(E===\"\"||p===\"\"||p===void 0)&&E!==p&&i.view.wt.wtOverlays.updateMainScrollableElements()},this.getValue=function(){let c=i.getSelectedLast();if(r.prototype.getValue){if(At(r.prototype.getValue))return r.prototype.getValue.call(i);if(c)return i.getData()[c[0][0]][r.prototype.getValue]}else if(c)return i.getDataAtCell(c[0],c[1])};function ft(c){if(!ot(c,\"type\"))return;let f={},C;typeof c.type==\"object\"?C=c.type:typeof c.type==\"string\"&&(C=Ro(c.type));for(let S in C)ot(C,S)&&!ot(c,S)&&(f[S]=C[S]);return f}this.getSettings=function(){return l.settings},this.clear=function(){this.selectAll(),this.emptySelectedCells()},this.alter=function(c,f,C,S,N){u.alter(c,f,C,S,N)},this.getCell=function(c,f,C=!1){return i.view.getCellAtCoords(new M(c,f),C)},this.getCoords=function(c){return this.view.wt.wtTable.getCoords.call(this.view.wt.wtTable,c)},this.colToProp=function(c){return a.colToProp(c)},this.propToCol=function(c){return a.propToCol(c)},this.toVisualRow=c=>w.toVisualRow(c),this.toVisualColumn=c=>w.toVisualColumn(c),this.toPhysicalRow=c=>w.toPhysicalRow(c),this.toPhysicalColumn=c=>w.toPhysicalColumn(c),this.getDataAtCell=function(c,f){return a.get(c,a.colToProp(f))},this.getDataAtRowProp=function(c,f){return a.get(c,f)},this.getDataAtCol=function(c){return[].concat(...a.getRange(new M(0,c),new M(l.settings.data.length-1,c),a.DESTINATION_RENDERER))},this.getDataAtProp=function(c){let f=a.getRange(new M(0,a.propToCol(c)),new M(l.settings.data.length-1,a.propToCol(c)),a.DESTINATION_RENDERER);return[].concat(...f)},this.getSourceData=function(c,f,C,S){let N;return c===void 0?N=h.getData():N=h.getByRange(new M(c,f),new M(C,S)),N},this.getSourceDataArray=function(c,f,C,S){let N;return c===void 0?N=h.getData(!0):N=h.getByRange(new M(c,f),new M(C,S),!0),N},this.getSourceDataAtCol=function(c){return h.getAtColumn(c)},this.getSourceDataAtRow=function(c){return h.getAtRow(c)},this.getSourceDataAtCell=function(c,f){return h.getAtCell(c,f)},this.getDataAtRow=function(c){return a.getRange(new M(c,0),new M(c,this.countCols()-1),a.DESTINATION_RENDERER)[0]||[]},this.getDataType=function(c,f,C,S){let N=c===void 0?[0,0,this.countRows(),this.countCols()]:[c,f,C,S],[g,y]=N,[,,E,p]=N,d=null,T=null;E===void 0&&(E=g),p===void 0&&(p=y);let b=\"mixed\";return P(Math.min(g,E),Math.max(g,E),H=>{let _=!0;return P(Math.min(y,p),Math.max(y,p),x=>(T=this.getCellMeta(H,x).type,d?_=d===T:d=T,_)),b=_?T:\"mixed\",_}),b},this.removeCellMeta=function(c,f,C){let[S,N]=w.toPhysical(c,f),g=l.cellSettings[S][N][C];i.runHooks(\"beforeRemoveCellMeta\",c,f,C,g)!==!1&&(delete l.cellSettings[S][N][C],i.runHooks(\"afterRemoveCellMeta\",c,f,C,g)),g=null},this.spliceCellsMeta=function(c,f,...C){l.cellSettings.splice(c,f,...C)},this.setCellMetaObject=function(c,f,C){typeof C==\"object\"&&X(C,(S,N)=>{this.setCellMeta(c,f,N,S)})},this.setCellMeta=function(c,f,C,S){let[N,g]=w.toPhysical(c,f);l.columnSettings[g]||(l.columnSettings[g]=To(r,l.columnsSettingConflicts)),l.cellSettings[N]||(l.cellSettings[N]=[]),l.cellSettings[N][g]||(l.cellSettings[N][g]=new l.columnSettings[g]),l.cellSettings[N][g][C]=S,i.runHooks(\"afterSetCellMeta\",c,f,C,S)},this.getCellsMeta=function(){return Ls(l.cellSettings)},this.getCellMeta=function(c,f){let C=a.colToProp(f),[S,N]=w.toPhysical(c,f),g=S;g===null&&(g=c),l.columnSettings[N]||(l.columnSettings[N]=To(r,l.columnsSettingConflicts)),l.cellSettings[g]||(l.cellSettings[g]=[]),l.cellSettings[g][N]||(l.cellSettings[g][N]=new l.columnSettings[N]);let y=l.cellSettings[g][N];if(y.row=g,y.col=N,y.visualRow=c,y.visualCol=f,y.prop=C,y.instance=i,i.runHooks(\"beforeGetCellMeta\",c,f,y),Ft(y,ft(y)),y.cells){let E=y.cells.call(y,g,N,C);E&&(Ft(y,E),Ft(y,ft(E)))}return i.runHooks(\"afterGetCellMeta\",c,f,y),y},this.getCellMetaAtRow=function(c){return l.cellSettings[c]},this.isColumnModificationAllowed=function(){return!(i.dataType===\"object\"||i.getSettings().columns)};let q=bo(\"renderer\");this.getCellRenderer=function(c,f){return nt(q.call(this,c,f))},this.getCellEditor=bo(\"editor\");let ct=bo(\"validator\");this.getCellValidator=function(c,f){let C=ct.call(this,c,f);return typeof C==\"string\"&&(C=jt(C)),C},this.validateCells=function(c){this._validateCells(c)},this.validateRows=function(c,f){if(!Array.isArray(c))throw new Error(\"validateRows parameter `rows` must be an array\");this._validateCells(f,c)},this.validateColumns=function(c,f){if(!Array.isArray(c))throw new Error(\"validateColumns parameter `columns` must be an array\");this._validateCells(f,void 0,c)},this._validateCells=function(c,f,C){let S=new O;c&&(S.onQueueEmpty=c);let N=i.countRows()-1;for(;N>=0;){if(f!==void 0&&f.indexOf(N)===-1){N-=1;continue}let g=i.countCols()-1;for(;g>=0;){if(C!==void 0&&C.indexOf(g)===-1){g-=1;continue}S.addValidatorToQueue(),i.validateCell(i.getDataAtCell(N,g),i.getCellMeta(N,g),y=>{if(typeof y!=\"boolean\")throw new Error(\"Validation error: result is not boolean\");y===!1&&(S.valid=!1),S.removeValidatorFormQueue()},\"validateCells\"),g-=1}N-=1}S.checkIfQueueIsEmpty()},this.getRowHeader=function(c){let f=l.settings.rowHeaders,C=c;return C!==void 0&&(C=i.runHooks(\"modifyRowHeader\",C)),C===void 0?(f=[],P(i.countRows()-1,S=>{f.push(i.getRowHeader(S))})):Array.isArray(f)&&f[C]!==void 0?f=f[C]:At(f)?f=f(C):f&&typeof f!=\"string\"&&typeof f!=\"number\"&&(f=C+1),f},this.hasRowHeaders=function(){return!!l.settings.rowHeaders},this.hasColHeaders=function(){if(l.settings.colHeaders!==void 0&&l.settings.colHeaders!==null)return!!l.settings.colHeaders;for(let c=0,f=i.countCols();c<f;c++)if(i.getColHeader(c))return!0;return!1},this.getColHeader=function(c){let f=l.settings.columns&&At(l.settings.columns),C=i.runHooks(\"modifyColHeader\",c),S=l.settings.colHeaders;if(C===void 0){let N=[],g=f?i.countSourceCols():i.countCols();for(let y=0;y<g;y++)N.push(i.getColHeader(y));S=N}else{let N=function(p){let d=[],T=i.countSourceCols(),b=0;for(;b<T;b++)At(i.getSettings().columns)&&i.getSettings().columns(b)&&d.push(b);return d[p]},g=C,y=i.runHooks(\"modifyCol\",g),E=N(y);l.settings.colHeaders===!1?S=null:l.settings.columns&&At(l.settings.columns)&&l.settings.columns(E)&&l.settings.columns(E).title?S=l.settings.columns(E).title:l.settings.columns&&l.settings.columns[y]&&l.settings.columns[y].title?S=l.settings.columns[y].title:Array.isArray(l.settings.colHeaders)&&l.settings.colHeaders[y]!==void 0?S=l.settings.colHeaders[y]:At(l.settings.colHeaders)?S=l.settings.colHeaders(y):l.settings.colHeaders&&typeof l.settings.colHeaders!=\"string\"&&typeof l.settings.colHeaders!=\"number\"&&(S=Mi(g))}return S},this._getColWidthFromSettings=function(c){let f=i.getCellMeta(0,c),C=f.width;if((C===void 0||C===l.settings.width)&&(C=f.colWidths),C!=null){switch(typeof C){case\"object\":C=C[c];break;case\"function\":C=C(c);break;default:break}typeof C==\"string\"&&(C=parseInt(C,10))}return C},this.getColWidth=function(c){let f=i._getColWidthFromSettings(c);return f=i.runHooks(\"modifyColWidth\",f,c),f===void 0&&(f=Co.DEFAULT_WIDTH),f},this._getRowHeightFromSettings=function(c){let f=l.settings.rowHeights;if(f!=null){switch(typeof f){case\"object\":f=f[c];break;case\"function\":f=f(c);break;default:break}typeof f==\"string\"&&(f=parseInt(f,10))}return f},this.getRowHeight=function(c){let f=i._getRowHeightFromSettings(c);return f=i.runHooks(\"modifyRowHeight\",f,c),f},this.countSourceRows=function(){return i.runHooks(\"modifySourceLength\")||(i.getSourceData()?i.getSourceData().length:0)},this.countSourceCols=function(){let c=0,f=i.getSourceData()&&i.getSourceData()[0]?i.getSourceData()[0]:[];return K(f)?c=ai(f):c=f.length||0,c},this.countRows=function(){return a.getLength()},this.countCols=function(){let c=this.getSettings().maxCols,f=!1,C=0;if(i.dataType===\"array\"&&(f=l.settings.data&&l.settings.data[0]&&l.settings.data[0].length),f&&(C=l.settings.data[0].length),l.settings.columns)if(At(l.settings.columns))if(i.dataType===\"array\"){let N=0;for(let g=0;g<C;g++)l.settings.columns(g)&&(N+=1);C=N}else(i.dataType===\"object\"||i.dataType===\"function\")&&(C=a.colToPropCache.length);else C=l.settings.columns.length;else(i.dataType===\"object\"||i.dataType===\"function\")&&(C=a.colToPropCache.length);return Math.min(c,C)},this.rowOffset=function(){return i.view.wt.wtTable.getFirstRenderedRow()},this.colOffset=function(){return i.view.wt.wtTable.getFirstRenderedColumn()},this.countRenderedRows=function(){return i.view.wt.drawn?i.view.wt.wtTable.getRenderedRowsCount():-1},this.countVisibleRows=function(){return i.view.wt.drawn?i.view.wt.wtTable.getVisibleRowsCount():-1},this.countRenderedCols=function(){return i.view.wt.drawn?i.view.wt.wtTable.getRenderedColumnsCount():-1},this.countVisibleCols=function(){return i.view.wt.drawn?i.view.wt.wtTable.getVisibleColumnsCount():-1},this.countEmptyRows=function(c=!1){let f=0;return Ke(i.countRows()-1,C=>{if(i.isEmptyRow(C))f+=1;else if(c===!0)return!1}),f},this.countEmptyCols=function(c=!1){if(i.countRows()<1)return 0;let f=0;return Ke(i.countCols()-1,C=>{if(i.isEmptyCol(C))f+=1;else if(c===!0)return!1}),f},this.isEmptyRow=function(c){return l.settings.isEmptyRow.call(i,c)},this.isEmptyCol=function(c){return l.settings.isEmptyCol.call(i,c)},this.selectCell=function(c,f,C,S,N=!0,g=!0){return gt(c)||gt(f)?!1:this.selectCells([[c,f,C,S]],N,g)},this.selectCells=function(c=[[]],f=!0,C=!0){f===!1&&(o=!0);let S=R.selectCells(c);return S&&C&&i.listen(),o=!1,S},this.selectCellByProp=function(c,f,C,S,N=!0,g=!0){return pe(Vt`Deprecation warning: This method is going to be removed in the next release.\n      If you want to select a cell using props, please use the \\`selectCell\\` method.`),this.selectCells([[c,f,C,S]],N,g)},this.selectColumns=function(c,f=c){return R.selectColumns(c,f)},this.selectRows=function(c,f=c){return R.selectRows(c,f)},this.deselectCell=function(){R.deselect()},this.selectAll=function(){o=!0,R.selectAll(),o=!1},this.scrollViewportTo=function(c,f,C=!1,S=!1){let N=!C,g=!S,y=!1;return c!==void 0&&f!==void 0&&(y=i.view.scrollViewport(new M(c,f),N,S,C,g)),typeof c==\"number\"&&typeof f!=\"number\"&&(y=i.view.scrollViewportVertically(c,N,C)),typeof f==\"number\"&&typeof c!=\"number\"&&(y=i.view.scrollViewportHorizontally(f,S,g)),y},this.destroy=function(){i._clearTimeouts(),i._clearImmediates(),i.view&&i.view.destroy(),h&&h.destroy(),h=null,yu(),xt(i.rootElement),n.destroy(),m&&m.destroy(),i.runHooks(\"afterDestroy\"),V.getSingleton().destroy(i),X(i,(c,f,C)=>{At(c)?C[f]=it(f):f!==\"guid\"&&(C[f]=null)}),i.isDestroyed=!0,a&&a.destroy(),a=null,l=null,u=null,R=null,m=null,i=null,r=null};function it(c){return()=>{throw new Error(`The \"${c}\" method cannot be called because this Handsontable instance has been destroyed`)}}this.getActiveEditor=function(){return m.getActiveEditor()},this.getPlugin=function(c){return ou(this,c)},this.getInstance=function(){return i},this.addHook=function(c,f){V.getSingleton().add(c,f,i)},this.hasHook=function(c){return V.getSingleton().has(c,i)},this.addHookOnce=function(c,f){V.getSingleton().once(c,f,i)},this.removeHook=function(c,f){V.getSingleton().remove(c,f,i)},this.runHooks=function(c,f,C,S,N,g,y){return V.getSingleton().run(i,c,f,C,S,N,g,y)},this.getTranslatedPhrase=function(c,f){return er(l.settings.language,c,f)},this.timeouts=[],this._registerTimeout=function(c,f=0){let C=c;typeof C==\"function\"&&(C=setTimeout(C,f)),this.timeouts.push(C)},this._clearTimeouts=function(){v(this.timeouts,c=>{clearTimeout(c)})},this.immediates=[],this._registerImmediate=function(c){this.immediates.push(setTimeout(c,0))},this._clearImmediates=function(){v(this.immediates,c=>{clearTimeout(c)})},this._refreshBorders=function(c=!1,f=!0){m.destroyEditor(c),i.view.render(),f&&R.isSelected()&&m.prepareEditor()},V.getSingleton().run(i,\"construct\")}function Ia(s){let t=typeof window>\"u\"?!1:window.jQuery;t&&(t.fn.handsontable=function(e,...o){let i=this.first(),r=i.data(\"handsontable\");if(typeof e!=\"string\"){let l=e||{};return r?r.updateSettings(l):(r=new s.Core(i[0],l),i.data(\"handsontable\",r),r.init()),i}let n;if(r)if(typeof r[e]<\"u\")n=r[e].call(r,...o),e===\"destroy\"&&i.removeData();else throw new Error(`Handsontable do not provide action: ${e}`);return n})}var Pa=class{constructor(t){this.hot=t,this.container=null,this.injected=!1,this.rows=[],this.columns=[],this.samples=null,this.settings={useHeaders:!0}}addRow(t,e){if(this.columns.length)throw new Error(\"Doesn't support multi-dimensional table\");this.rows.length||(this.container=this.createContainer(this.hot.rootElement.className));let o={row:t};this.rows.push(o),this.samples=e,this.table=this.createTable(this.hot.table.className),this.table.colGroup.appendChild(this.createColGroupsCol()),this.table.tr.appendChild(this.createRow(t)),this.container.container.appendChild(this.table.fragment),o.table=this.table.table}addColumnHeadersRow(t){let e=this.hot.getColHeader(0);if(e!=null){let o={row:-1};this.rows.push(o),this.container=this.createContainer(this.hot.rootElement.className),this.samples=t,this.table=this.createTable(this.hot.table.className),this.table.colGroup.appendChild(this.createColGroupsCol()),this.table.tHead.appendChild(this.createColumnHeadersRow()),this.container.container.appendChild(this.table.fragment),o.table=this.table.table}}addColumn(t,e){if(this.rows.length)throw new Error(\"Doesn't support multi-dimensional table\");this.columns.length||(this.container=this.createContainer(this.hot.rootElement.className));let o={col:t};this.columns.push(o),this.samples=e,this.table=this.createTable(this.hot.table.className),this.getSetting(\"useHeaders\")&&this.hot.getColHeader(t)!==null&&this.hot.view.appendColHeader(t,this.table.th),this.table.tBody.appendChild(this.createCol(t)),this.container.container.appendChild(this.table.fragment),o.table=this.table.table}getHeights(t){this.injected||this.injectTable(),v(this.rows,e=>{t(e.row,lt(e.table)-1)})}getWidths(t){this.injected||this.injectTable(),v(this.columns,e=>{t(e.col,st(e.table))})}setSettings(t){this.settings=t}setSetting(t,e){this.settings||(this.settings={}),this.settings[t]=e}getSettings(){return this.settings}getSetting(t){return this.settings?this.settings[t]:null}createColGroupsCol(){let e=document.createDocumentFragment();return this.hot.hasRowHeaders()&&e.appendChild(this.createColElement(-1)),this.samples.forEach(o=>{v(o.strings,i=>{e.appendChild(this.createColElement(i.col))})}),e}createRow(t){let e=document,o=e.createDocumentFragment(),i=e.createElement(\"th\");return this.hot.hasRowHeaders()&&(this.hot.view.appendRowHeader(t,i),o.appendChild(i)),this.samples.forEach(r=>{v(r.strings,n=>{let l=n.col,a=this.hot.getCellMeta(t,l);a.col=l,a.row=t;let h=this.hot.getCellRenderer(a),u=e.createElement(\"td\");h(this.hot,u,t,l,this.hot.colToProp(l),n.value,a),o.appendChild(u)})}),o}createColumnHeadersRow(){let t=document,e=t.createDocumentFragment();if(this.hot.hasRowHeaders()){let o=t.createElement(\"th\");this.hot.view.appendColHeader(-1,o),e.appendChild(o)}return this.samples.forEach(o=>{v(o.strings,i=>{let r=i.col,n=t.createElement(\"th\");this.hot.view.appendColHeader(r,n),e.appendChild(n)})}),e}createCol(t){let e=document,o=e.createDocumentFragment();return this.samples.forEach(i=>{v(i.strings,r=>{let n=r.row,l=this.hot.getCellMeta(n,t);l.col=t,l.row=n;let a=this.hot.getCellRenderer(l),h=e.createElement(\"td\"),u=e.createElement(\"tr\");h.setAttribute(\"ghost-table\",1),a(this.hot,h,n,t,this.hot.colToProp(t),r.value,l),u.appendChild(h),o.appendChild(u)})}),o}clean(){this.rows.length=0,this.rows[-1]=void 0,this.columns.length=0,this.samples&&this.samples.clear(),this.samples=null,this.removeTable()}injectTable(t=null){this.injected||((t||this.hot.rootElement).appendChild(this.container.fragment),this.injected=!0)}removeTable(){this.injected&&this.container.container.parentNode&&(this.container.container.parentNode.removeChild(this.container.container),this.container=null,this.injected=!1)}createColElement(t){let o=document.createElement(\"col\");return o.style.width=`${this.hot.view.wt.wtTable.getStretchedColumnWidth(t)}px`,o}createTable(t=\"\"){let e=document,o=e.createDocumentFragment(),i=e.createElement(\"table\"),r=e.createElement(\"thead\"),n=e.createElement(\"tbody\"),l=e.createElement(\"colgroup\"),a=e.createElement(\"tr\"),h=e.createElement(\"th\");return this.isVertical()&&i.appendChild(l),this.isHorizontal()&&(a.appendChild(h),r.appendChild(a),i.style.tableLayout=\"auto\",i.style.width=\"auto\"),i.appendChild(r),this.isVertical()&&n.appendChild(a),i.appendChild(n),L(i,t),o.appendChild(i),{fragment:o,table:i,tHead:r,tBody:n,colGroup:l,tr:a,th:h}}createContainer(t=\"\"){let e=document,o=e.createDocumentFragment(),i=e.createElement(\"div\"),r=`htGhostTable htAutoSize ${t.trim()}`;return L(i,r),o.appendChild(i),{fragment:o,container:i}}isVertical(){return!!(this.rows.length&&!this.columns.length)}isHorizontal(){return!!(this.columns.length&&!this.rows.length)}},Qo=Pa;var Gr={};It(Gr,{AutoColumnSize:()=>ku,AutoFill:()=>Wu,AutoRowSize:()=>Fu,Base:()=>Z,ColumnSorting:()=>sd,Comments:()=>md,ContextMenu:()=>Rd,CopyPaste:()=>Od,CustomBorders:()=>Hd,DragToScroll:()=>Ad,ManualColumnFreeze:()=>Nd,ManualColumnMove:()=>Bd,ManualColumnResize:()=>Wd,ManualRowMove:()=>$d,ManualRowResize:()=>Yd,MergeCells:()=>qd,MultipleSelectionHandles:()=>Qd,ObserveChanges:()=>of,PersistentState:()=>Du,Search:()=>sf,TouchScroll:()=>rf,UndoRedo:()=>hf});var Oo=new WeakMap,Mo=null,Ba=class{constructor(t){De(this,\"hot\",t,{writable:!1}),De(this,\"t\",Qs(t),{writable:!1}),Oo.set(this,{hooks:{}}),Mo=null,this.pluginName=null,this.pluginsInitializedCallbacks=[],this.isPluginsReady=!1,this.enabled=!1,this.initialized=!1,this.hot.addHook(\"afterPluginsInitialized\",()=>this.onAfterPluginsInitialized()),this.hot.addHook(\"afterUpdateSettings\",e=>this.onUpdateSettings(e)),this.hot.addHook(\"beforeInit\",()=>this.init())}init(){this.pluginName=su(this.hot,this),this.isEnabled&&this.isEnabled()&&this.enablePlugin(),Mo||(Mo=iu(this.hot)),Mo.indexOf(this.pluginName)>=0&&Mo.splice(Mo.indexOf(this.pluginName),1),Mo.length||this.hot.runHooks(\"afterPluginsInitialized\"),this.initialized=!0}enablePlugin(){this.enabled=!0}disablePlugin(){this.eventManager&&this.eventManager.clear(),this.clearHooks(),this.enabled=!1}addHook(t,e){Oo.get(this).hooks[t]=Oo.get(this).hooks[t]||[];let o=Oo.get(this).hooks[t];this.hot.addHook(t,e),o.push(e),Oo.get(this).hooks[t]=o}removeHooks(t){v(Oo.get(this).hooks[t]||[],e=>{this.hot.removeHook(t,e)})}clearHooks(){let t=Oo.get(this).hooks;X(t,(e,o)=>this.removeHooks(o)),t.length=0}callOnPluginsReady(t){this.isPluginsReady?t():this.pluginsInitializedCallbacks.push(t)}onAfterPluginsInitialized(){v(this.pluginsInitializedCallbacks,t=>t()),this.pluginsInitializedCallbacks.length=0,this.isPluginsReady=!0}onUpdateSettings(){this.isEnabled&&(this.enabled&&!this.isEnabled()&&this.disablePlugin(),!this.enabled&&this.isEnabled()&&this.enablePlugin(),this.enabled&&this.isEnabled()&&this.updatePlugin())}updatePlugin(){}destroy(){this.eventManager&&this.eventManager.destroy(),this.clearHooks(),X(this,(t,e)=>{e!==\"hot\"&&e!==\"t\"&&(this[e]=null)}),delete this.t,delete this.hot}},Z=Ba;var Wa=class{constructor(t){this.prefix=t,this.savedKeys=[],this.loadSavedKeys()}saveValue(t,e){window.localStorage.setItem(`${this.prefix}_${t}`,JSON.stringify(e)),this.savedKeys.indexOf(t)===-1&&(this.savedKeys.push(t),this.saveSavedKeys())}loadValue(t,e){let o=typeof t>\"u\"?e:t,i=window.localStorage.getItem(`${this.prefix}_${o}`);return i===null?void 0:JSON.parse(i)}reset(t){window.localStorage.removeItem(`${this.prefix}_${t}`)}resetAll(){v(this.savedKeys,(t,e)=>{window.localStorage.removeItem(`${this.prefix}_${this.savedKeys[e]}`)}),this.clearSavedKeys()}loadSavedKeys(){let t=window.localStorage.getItem(`${this.prefix}__persistentStateKeys`),e=typeof t==\"string\"?JSON.parse(t):void 0;this.savedKeys=e||[]}saveSavedKeys(){window.localStorage.setItem(`${this.prefix}__persistentStateKeys`,JSON.stringify(this.savedKeys))}clearSavedKeys(){this.savedKeys.length=0,this.saveSavedKeys()}},_u=Wa;V.getSingleton().register(\"persistentStateSave\");V.getSingleton().register(\"persistentStateLoad\");V.getSingleton().register(\"persistentStateReset\");var rr=class extends Z{constructor(t){super(t),this.storage=void 0}isEnabled(){return!!this.hot.getSettings().persistentState}enablePlugin(){this.enabled||(this.storage||(this.storage=new _u(this.hot.rootElement.id)),this.addHook(\"persistentStateSave\",(t,e)=>this.saveValue(t,e)),this.addHook(\"persistentStateLoad\",(t,e)=>this.loadValue(t,e)),this.addHook(\"persistentStateReset\",()=>this.resetValue()),super.enablePlugin())}disablePlugin(){this.storage=void 0,super.disablePlugin()}updatePlugin(){this.disablePlugin(),this.enablePlugin(),super.updatePlugin()}loadValue(t,e){e.value=this.storage.loadValue(t)}saveValue(t,e){this.storage.saveValue(t,e)}resetValue(t){typeof t>\"u\"?this.storage.resetAll():this.storage.reset(t)}destroy(){super.destroy()}};J(\"persistentState\",rr);var Du=rr;var Fa=class s{static get SAMPLE_COUNT(){return 3}constructor(t){this.samples=null,this.dataFactory=t,this.customSampleCount=null,this.allowDuplicates=!1}getSampleCount(){return this.customSampleCount?this.customSampleCount:s.SAMPLE_COUNT}setSampleCount(t){this.customSampleCount=t}setAllowDuplicates(t){this.allowDuplicates=t}generateRowSamples(t,e){return this.generateSamples(\"row\",e,t)}generateColumnSamples(t,e){return this.generateSamples(\"col\",e,t)}generateSamples(t,e,o){let i=new Map,{from:r,to:n}=typeof o==\"number\"?{from:o,to:o}:o;return P(r,n,l=>{let a=this.generateSample(t,e,l);i.set(l,a)}),i}generateSample(t,e,o){if(t!==\"row\"&&t!==\"col\")throw new Error(\"Unsupported sample type\");let i=new Map,r=t===\"row\"?\"col\":\"row\",n=[];return P(e.from,e.to,l=>{let{value:a,bundleCountSeed:h}=t===\"row\"?this.dataFactory(o,l):this.dataFactory(l,o),u=h>0,m;K(a)?m=Object.keys(a).length:Array.isArray(a)?m=a.length:m=ne(a).length,u&&(m+=h),i.has(m)||i.set(m,{needed:this.getSampleCount(),strings:[]});let w=i.get(m);w.needed&&(!(n.indexOf(a)>-1)||this.allowDuplicates||u)&&(w.strings.push({value:a,[r]:l}),n.push(a),w.needed-=1)}),i}},nr=Fa;var Va=new WeakMap,lr=class s extends Z{static get CALCULATION_STEP(){return 50}static get SYNC_CALCULATION_LIMIT(){return 50}constructor(t){super(t),Va.set(this,{cachedColumnHeaders:[]}),this.widths=[],this.ghostTable=new Qo(this.hot),this.samplesGenerator=new nr((e,o)=>{let i=this.hot.getCellMeta(e,o),r=\"\";i.spanned||(r=this.hot.getDataAtCell(e,o));let n=0;if(i.label){let{value:l,property:a}=i.label,h=\"\";l?h=typeof l==\"function\"?l(e,o,this.hot.colToProp(o),r):l:a&&(h=this.hot.getDataAtRowProp(e,a)),n=h.length}return{value:r,bundleCountSeed:n}}),this.firstCalculation=!0,this.inProgress=!1,this.addHook(\"beforeColumnResize\",(e,o,i)=>this.onBeforeColumnResize(e,o,i))}isEnabled(){return this.hot.getSettings().autoColumnSize!==!1&&!this.hot.getSettings().colWidths}enablePlugin(){if(this.enabled)return;let t=this.hot.getSettings().autoColumnSize;t&&t.useHeaders!==null&&t.useHeaders!==void 0&&this.ghostTable.setSetting(\"useHeaders\",t.useHeaders),this.setSamplingOptions(),this.addHook(\"afterLoadData\",()=>this.onAfterLoadData()),this.addHook(\"beforeChange\",e=>this.onBeforeChange(e)),this.addHook(\"beforeRender\",e=>this.onBeforeRender(e)),this.addHook(\"modifyColWidth\",(e,o)=>this.getColumnWidth(o,e)),this.addHook(\"afterInit\",()=>this.onAfterInit()),super.enablePlugin()}updatePlugin(){let t=this.findColumnsWhereHeaderWasChanged();t.length&&this.clearCache(t),super.updatePlugin()}disablePlugin(){super.disablePlugin()}calculateColumnsWidth(t={from:0,to:this.hot.countCols()-1},e={from:0,to:this.hot.countRows()-1},o=!1){let i=typeof t==\"number\"?{from:t,to:t}:t,r=typeof e==\"number\"?{from:e,to:e}:e;P(i.from,i.to,n=>{if(o||this.widths[n]===void 0&&!this.hot._getColWidthFromSettings(n)){let l=this.samplesGenerator.generateColumnSamples(n,r);v(l,([a,h])=>this.ghostTable.addColumn(a,h))}}),this.ghostTable.columns.length&&(this.ghostTable.getWidths((n,l)=>{this.widths[n]=l}),this.ghostTable.clean())}calculateAllColumnsWidth(t={from:0,to:this.hot.countRows()-1}){let e=0,o=this.hot.countCols()-1,i=null;this.inProgress=!0;let r=()=>{if(!this.hot){Ge(i),this.inProgress=!1;return}this.calculateColumnsWidth({from:e,to:Math.min(e+s.CALCULATION_STEP,o)},t),e=e+s.CALCULATION_STEP+1,e<o?i=io(r):(Ge(i),this.inProgress=!1,this.hot.view.wt.wtOverlays.adjustElementsSize(!0),this.hot.view.wt.wtOverlays.leftOverlay.needFullRender&&this.hot.view.wt.wtOverlays.leftOverlay.clone.draw())},n=this.getSyncCalculationLimit();this.firstCalculation&&n>=0&&(this.calculateColumnsWidth({from:0,to:n},t),this.firstCalculation=!1,e=n+1),e<o?r():this.inProgress=!1}setSamplingOptions(){let t=this.hot.getSettings().autoColumnSize,e=t&&ot(t,\"samplingRatio\")?this.hot.getSettings().autoColumnSize.samplingRatio:void 0,o=t&&ot(t,\"allowSampleDuplicates\")?this.hot.getSettings().autoColumnSize.allowSampleDuplicates:void 0;e&&!isNaN(e)&&this.samplesGenerator.setSampleCount(parseInt(e,10)),o&&this.samplesGenerator.setAllowDuplicates(o)}recalculateAllColumnsWidth(){this.hot.view&&Xe(this.hot.view.wt.wtTable.TABLE)&&(this.clearCache(),this.calculateAllColumnsWidth())}getSyncCalculationLimit(){let t=s.SYNC_CALCULATION_LIMIT,e=this.hot.countCols()-1;return K(this.hot.getSettings().autoColumnSize)&&(t=this.hot.getSettings().autoColumnSize.syncLimit,yi(t)?t=bi(e,t):t>>=0),Math.min(t,e)}getColumnWidth(t,e=void 0,o=!0){let i=e;return i===void 0&&(i=this.widths[t],o&&typeof i==\"number\"&&(i=Math.max(i,Co.DEFAULT_WIDTH))),i}getFirstVisibleColumn(){let t=this.hot.view.wt;return t.wtViewport.columnsVisibleCalculator?t.wtTable.getFirstVisibleColumn():t.wtViewport.columnsRenderCalculator?t.wtTable.getFirstRenderedColumn():-1}getLastVisibleColumn(){let t=this.hot.view.wt;return t.wtViewport.columnsVisibleCalculator?t.wtTable.getLastVisibleColumn():t.wtViewport.columnsRenderCalculator?t.wtTable.getLastRenderedColumn():-1}findColumnsWhereHeaderWasChanged(){let t=this.hot.getColHeader(),{cachedColumnHeaders:e}=Va.get(this);return Tt(t,(i,r,n)=>{let l=e.length;return(l-1<n||e[n]!==r)&&i.push(n),l-1<n?e.push(r):e[n]=r,i},[])}clearCache(t=[]){t.length?v(t,e=>{this.widths[e]=void 0}):this.widths.length=0}isNeedRecalculate(){return!!Kt(this.widths,t=>t===void 0).length}onBeforeRender(){let t=this.hot.renderCall,e=this.hot.countRows(),o=this.getFirstVisibleColumn(),i=this.getLastVisibleColumn();o===null||i===null||e&&(this.calculateColumnsWidth({from:o,to:i},void 0,t),this.isNeedRecalculate()&&!this.inProgress&&this.calculateAllColumnsWidth())}onAfterLoadData(){this.hot.view?this.recalculateAllColumnsWidth():setTimeout(()=>{this.hot&&this.recalculateAllColumnsWidth()},0)}onBeforeChange(t){let e=ht(t,([,o])=>this.hot.propToCol(o));this.clearCache(e)}onBeforeColumnResize(t,e,o){let i=e;return o&&(this.calculateColumnsWidth(t,void 0,!0),i=this.getColumnWidth(t,void 0,!1)),i}onAfterInit(){Va.get(this).cachedColumnHeaders=this.hot.getColHeader()}destroy(){this.ghostTable.clean(),super.destroy()}};J(\"autoColumnSize\",lr);var ku=lr;var Jo={horizontal:\"horizontal\",vertical:\"vertical\"};function Iu(s,t,e,o){let i=e.length,r=e?e[0].length:0,n=[],l=t.row-s.row,a=t.col-s.col;if([\"down\",\"up\"].indexOf(o)!==-1){let h=[];for(let u=0;u<=a;u++){let m=parseInt(e[0][u],10),w=parseInt(e[i-1][u],10),R=(o===\"down\"?w-m:m-w)/(i-1)||0;h.push(R)}n.push(h)}if([\"right\",\"left\"].indexOf(o)!==-1)for(let h=0;h<=l;h++){let u=parseInt(e[h][0],10),m=parseInt(e[h][r-1],10),w=(o===\"right\"?m-u:u-m)/(r-1)||0;n.push([w])}return n}function Pu(s,t){let e,o,i;return t[0]===s[0]&&t[1]<s[1]?(i=\"left\",e=new M(t[0],t[1]),o=new M(t[2],s[1]-1)):t[2]===s[2]&&t[0]===s[0]&&t[3]>s[3]?(i=\"right\",e=new M(t[0],s[3]+1),o=new M(t[2],t[3])):t[0]<s[0]&&t[1]===s[1]?(i=\"up\",e=new M(t[0],t[1]),o=new M(s[0]-1,t[3])):t[2]>s[2]&&t[1]===s[1]&&(i=\"down\",e=new M(s[2]+1,t[1]),o=new M(t[2],t[3])),{directionOfDrag:i,startOfDragCoords:e,endOfDragCoords:o}}function Bu(s){let t={};return s===!0?(t.directions=Object.keys(Jo),t.autoInsertRow=!0):K(s)?(mt(s.autoInsertRow)?s.direction===Jo.horizontal?t.autoInsertRow=!1:t.autoInsertRow=s.autoInsertRow:t.autoInsertRow=!1,mt(s.direction)?t.directions=[s.direction]:t.directions=Object.keys(Jo)):typeof s==\"string\"?(t.directions=[s],t.autoInsertRow=!0):(t.directions=[],t.autoInsertRow=!1),t}V.getSingleton().register(\"modifyAutofillRange\");V.getSingleton().register(\"beforeAutofill\");var hp=\"insert_row\",cp=200,ar=class extends Z{constructor(t){super(t),this.eventManager=new G(this),this.addingStarted=!1,this.mouseDownOnCellCorner=!1,this.mouseDragOutside=!1,this.handleDraggedCells=0,this.directions=[],this.autoInsertRow=!1}isEnabled(){return this.hot.getSettings().fillHandle}enablePlugin(){this.enabled||(this.mapSettings(),this.registerEvents(),this.addHook(\"afterOnCellCornerMouseDown\",t=>this.onAfterCellCornerMouseDown(t)),this.addHook(\"afterOnCellCornerDblClick\",t=>this.onCellCornerDblClick(t)),this.addHook(\"beforeOnCellMouseOver\",(t,e)=>this.onBeforeCellMouseOver(e)),super.enablePlugin())}updatePlugin(){this.disablePlugin(),this.enablePlugin(),super.updatePlugin()}disablePlugin(){this.clearMappedSettings(),super.disablePlugin()}getSelectionData(){let t={from:this.hot.getSelectedRangeLast().from,to:this.hot.getSelectedRangeLast().to};return this.hot.getData(t.from.row,t.from.col,t.to.row,t.to.col)}fillIn(){if(this.hot.selection.highlight.getFill().isEmpty())return!1;let t=this.hot.selection.highlight.getFill().getCorners();this.resetSelectionOfDraggedArea();let e=this.getCornersOfSelectedCells();t=this.hot.runHooks(\"modifyAutofillRange\",t,e);let{directionOfDrag:o,startOfDragCoords:i,endOfDragCoords:r}=Pu(e,t);if(i&&i.row>-1&&i.col>-1){let n=this.getSelectionData();this.hot.runHooks(\"beforeAutofill\",i,r,n);let l=Iu(i,r,n,o),a=n;if([\"up\",\"left\"].indexOf(o)>-1){a=[];let h=null,u=null;if(o===\"up\"){h=r.row-i.row+1,u=h%n.length;for(let m=0;m<h;m++)a.push(n[(m+(n.length-u))%n.length])}else{h=r.col-i.col+1,u=h%n[0].length;for(let m=0;m<n.length;m++){a.push([]);for(let w=0;w<h;w++)a[m].push(n[m][(w+(n[m].length-u))%n[m].length])}}}this.hot.populateFromArray(i.row,i.col,a,r.row,r.col,`${this.pluginName}.fill`,null,o,l),this.setSelection(t)}else this.hot._refreshBorders();return!0}reduceSelectionAreaIfNeeded(t){return t.row<0&&(t.row=0),t.col<0&&(t.col=0),t}getCoordsOfDragAndDropBorders(t){let e=this.hot.getSelectedRangeLast().getTopLeftCorner(),o=this.hot.getSelectedRangeLast().getBottomRightCorner(),i;if(this.directions.includes(Jo.vertical)&&(o.row<t.row||e.row>t.row))i=new M(t.row,o.col);else if(this.directions.includes(Jo.horizontal))i=new M(o.row,t.col);else return;return this.reduceSelectionAreaIfNeeded(i)}showBorder(t){let e=this.getCoordsOfDragAndDropBorders(t);e&&this.redrawBorders(e)}addRow(){this.hot._registerTimeout(setTimeout(()=>{this.hot.alter(hp,void 0,1,`${this.pluginName}.fill`),this.addingStarted=!1},cp))}addNewRowIfNeeded(){if(this.hot.selection.highlight.getFill().cellRange&&this.addingStarted===!1&&this.autoInsertRow){let t=this.hot.getSelectedLast(),e=this.hot.selection.highlight.getFill().getCorners(),o=this.hot.countRows();t[2]<o-1&&e[2]===o-1&&(this.addingStarted=!0,this.addRow())}}getCornersOfSelectedCells(){return this.hot.selection.isMultiple()?this.hot.selection.highlight.createOrGetArea().getCorners():this.hot.selection.highlight.getCell().getCorners()}getIndexOfLastAdjacentFilledInRow(t){let e=this.hot.getData(),o=this.hot.countRows(),i;for(let r=t[2]+1;r<o;r++){for(let a=t[1];a<=t[3];a++)if(e[r][a])return-1;let n=e[r][t[1]-1],l=e[r][t[3]+1];(n||l)&&(i=r)}return i}addSelectionFromStartAreaToSpecificRowIndex(t,e){this.hot.selection.highlight.getFill().clear().add(new M(t[0],t[1])).add(new M(e,t[3]))}setSelection(t){this.hot.selectCell(...t,!1,!1)}selectAdjacent(){let t=this.getCornersOfSelectedCells(),e=this.getIndexOfLastAdjacentFilledInRow(t);return e===-1||e===void 0?!1:(this.addSelectionFromStartAreaToSpecificRowIndex(t,e),!0)}resetSelectionOfDraggedArea(){this.handleDraggedCells=0,this.hot.selection.highlight.getFill().clear()}redrawBorders(t){this.hot.selection.highlight.getFill().clear().add(this.hot.getSelectedRangeLast().from).add(this.hot.getSelectedRangeLast().to).add(t),this.hot.view.render()}getIfMouseWasDraggedOutside(t){let e=rt(this.hot.table).top-(window.pageYOffset||document.documentElement.scrollTop)+lt(this.hot.table),o=rt(this.hot.table).left-(window.pageXOffset||document.documentElement.scrollLeft)+st(this.hot.table);return t.clientY>e&&t.clientX<=o}registerEvents(){this.eventManager.addEventListener(document.documentElement,\"mouseup\",()=>this.onMouseUp()),this.eventManager.addEventListener(document.documentElement,\"mousemove\",t=>this.onMouseMove(t))}onCellCornerDblClick(){this.selectAdjacent()&&this.fillIn()}onAfterCellCornerMouseDown(){this.handleDraggedCells=1,this.mouseDownOnCellCorner=!0}onBeforeCellMouseOver(t){this.mouseDownOnCellCorner&&!this.hot.view.isMouseDown()&&this.handleDraggedCells&&(this.handleDraggedCells+=1,this.showBorder(t),this.addNewRowIfNeeded())}onMouseUp(){this.handleDraggedCells&&(this.handleDraggedCells>1&&this.fillIn(),this.handleDraggedCells=0,this.mouseDownOnCellCorner=!1)}onMouseMove(t){let e=this.getIfMouseWasDraggedOutside(t);this.addingStarted===!1&&this.handleDraggedCells>0&&e?(this.mouseDragOutside=!0,this.addingStarted=!0):this.mouseDragOutside=!1,this.mouseDragOutside&&this.autoInsertRow&&this.addRow()}clearMappedSettings(){this.directions.length=0,this.autoInsertRow=!1}mapSettings(){let t=Bu(this.hot.getSettings().fillHandle);this.directions=t.directions,this.autoInsertRow=t.autoInsertRow}destroy(){super.destroy()}};J(\"autofill\",ar);var Wu=ar;var hr=class s extends Z{static get CALCULATION_STEP(){return 50}static get SYNC_CALCULATION_LIMIT(){return 500}constructor(t){super(t),this.heights=[],this.ghostTable=new Qo(this.hot),this.samplesGenerator=new nr((e,o)=>{let i;return e>=0?i=this.hot.getDataAtCell(e,o):e===-1&&(i=this.hot.getColHeader(o)),{value:i}}),this.firstCalculation=!0,this.inProgress=!1,this.addHook(\"beforeRowResize\",(e,o,i)=>this.onBeforeRowResize(e,o,i))}isEnabled(){return this.hot.getSettings().autoRowSize===!0||K(this.hot.getSettings().autoRowSize)}enablePlugin(){this.enabled||(this.setSamplingOptions(),this.addHook(\"afterLoadData\",()=>this.onAfterLoadData()),this.addHook(\"beforeChange\",t=>this.onBeforeChange(t)),this.addHook(\"beforeColumnMove\",()=>this.recalculateAllRowsHeight()),this.addHook(\"beforeColumnResize\",()=>this.recalculateAllRowsHeight()),this.addHook(\"beforeColumnSort\",()=>this.clearCache()),this.addHook(\"beforeRender\",t=>this.onBeforeRender(t)),this.addHook(\"beforeRowMove\",(t,e)=>this.onBeforeRowMove(t,e)),this.addHook(\"modifyRowHeight\",(t,e)=>this.getRowHeight(e,t)),this.addHook(\"modifyColumnHeaderHeight\",()=>this.getColumnHeaderHeight()),super.enablePlugin())}disablePlugin(){super.disablePlugin()}calculateRowsHeight(t={from:0,to:this.hot.countRows()-1},e={from:0,to:this.hot.countCols()-1},o=!1){let i=typeof t==\"number\"?{from:t,to:t}:t,r=typeof e==\"number\"?{from:e,to:e}:e;if(this.hot.getColHeader(0)!==null){let n=this.samplesGenerator.generateRowSamples(-1,r);this.ghostTable.addColumnHeadersRow(n.get(-1))}P(i.from,i.to,n=>{if(o||this.heights[n]===void 0){let l=this.samplesGenerator.generateRowSamples(n,r);v(l,([a,h])=>this.ghostTable.addRow(a,h))}}),this.ghostTable.rows.length&&(this.ghostTable.getHeights((n,l)=>{this.heights[n]=l}),this.ghostTable.clean())}calculateAllRowsHeight(t={from:0,to:this.hot.countCols()-1}){let e=0,o=this.hot.countRows()-1,i=null;this.inProgress=!0;let r=()=>{if(!this.hot){Ge(i),this.inProgress=!1;return}this.calculateRowsHeight({from:e,to:Math.min(e+s.CALCULATION_STEP,o)},t),e=e+s.CALCULATION_STEP+1,e<o?i=io(r):(Ge(i),this.inProgress=!1,this.hot.view.wt.wtOverlays.adjustElementsSize(!0),this.hot.view.wt.wtOverlays.leftOverlay.needFullRender&&this.hot.view.wt.wtOverlays.leftOverlay.clone.draw())},n=this.getSyncCalculationLimit();this.firstCalculation&&n>=0&&(this.calculateRowsHeight({from:0,to:n},t),this.firstCalculation=!1,e=n+1),e<o?r():(this.inProgress=!1,this.hot.view.wt.wtOverlays.adjustElementsSize(!1))}setSamplingOptions(){let t=this.hot.getSettings().autoRowSize,e=t&&ot(t,\"samplingRatio\")?this.hot.getSettings().autoRowSize.samplingRatio:void 0,o=t&&ot(t,\"allowSampleDuplicates\")?this.hot.getSettings().autoRowSize.allowSampleDuplicates:void 0;e&&!isNaN(e)&&this.samplesGenerator.setSampleCount(parseInt(e,10)),o&&this.samplesGenerator.setAllowDuplicates(o)}recalculateAllRowsHeight(){Xe(this.hot.view.wt.wtTable.TABLE)&&(this.clearCache(),this.calculateAllRowsHeight())}getSyncCalculationLimit(){let t=s.SYNC_CALCULATION_LIMIT,e=this.hot.countRows()-1;return K(this.hot.getSettings().autoRowSize)&&(t=this.hot.getSettings().autoRowSize.syncLimit,yi(t)?t=bi(e,t):t>>=0),Math.min(t,e)}getRowHeight(t,e=void 0){let o=e;return this.heights[t]!==void 0&&this.heights[t]>(e||0)&&(o=this.heights[t]),o}getColumnHeaderHeight(){return this.heights[-1]}getFirstVisibleRow(){let t=this.hot.view.wt;return t.wtViewport.rowsVisibleCalculator?t.wtTable.getFirstVisibleRow():t.wtViewport.rowsRenderCalculator?t.wtTable.getFirstRenderedRow():-1}getLastVisibleRow(){let t=this.hot.view.wt;return t.wtViewport.rowsVisibleCalculator?t.wtTable.getLastVisibleRow():t.wtViewport.rowsRenderCalculator?t.wtTable.getLastRenderedRow():-1}clearCache(){this.heights.length=0,this.heights[-1]=void 0}clearCacheByRange(t){let{from:e,to:o}=typeof t==\"number\"?{from:t,to:t}:t;P(Math.min(e,o),Math.max(e,o),i=>{this.heights[i]=void 0})}isNeedRecalculate(){return!!Kt(this.heights,t=>t===void 0).length}onBeforeRender(){let t=this.hot.renderCall,e=this.hot.getSettings().fixedRowsBottom,o=this.getFirstVisibleRow(),i=this.getLastVisibleRow();if(!(o===null||i===null)){if(this.calculateRowsHeight({from:o,to:i},void 0,t),e){let r=this.hot.countRows()-1;this.calculateRowsHeight({from:r-e,to:r})}this.isNeedRecalculate()&&!this.inProgress&&this.calculateAllRowsHeight()}}onBeforeRowMove(t,e){this.clearCacheByRange({from:t,to:e}),this.calculateAllRowsHeight()}onBeforeRowResize(t,e,o){let i=e;return o&&(this.calculateRowsHeight(t,void 0,!0),i=this.getRowHeight(t)),i}onAfterLoadData(){this.hot.view?this.recalculateAllRowsHeight():setTimeout(()=>{this.hot&&this.recalculateAllRowsHeight()},0)}onBeforeChange(t){let e=null;t.length===1?e=t[0][0]:t.length>1&&(e={from:t[0][0],to:t[t.length-1][0]}),e!==null&&this.clearCacheByRange(e)}destroy(){this.ghostTable.clean(),super.destroy()}};J(\"autoRowSize\",hr);var Fu=hr;var up=[\"sortEmptyCells\",\"indicator\",\"headerAction\",\"compareFunctionFactory\"],dp=!1,fp=!0,mp=!0,cr=class{constructor(){this.sortedColumnsStates=[],this.sortEmptyCells=dp,this.indicator=fp,this.headerAction=mp,this.compareFunctionFactory=void 0}updateAllColumnsProperties(t){K(t)&&X(t,(e,o)=>{up.includes(o)&&(this[o]=e)})}getAllColumnsProperties(){let t={sortEmptyCells:this.sortEmptyCells,indicator:this.indicator,headerAction:this.headerAction};return typeof this.compareFunctionFactory==\"function\"&&(t.compareFunctionFactory=this.compareFunctionFactory),t}getFirstSortedColumn(){let t;return this.getNumberOfSortedColumns()>0&&(t=this.sortedColumnsStates[0].column),t}getSortOrderOfColumn(t){let e=this.sortedColumnsStates.find(({column:i})=>t===i),o;return K(e)&&(o=e.sortOrder),o}getSortedColumns(){return ht(this.sortedColumnsStates,({column:t})=>t)}getIndexOfColumnInSortQueue(t){return this.getSortedColumns().indexOf(t)}getNumberOfSortedColumns(){return this.sortedColumnsStates.length}isListOfSortedColumnsEmpty(){return this.getNumberOfSortedColumns()===0}isColumnSorted(t){return this.getSortedColumns().includes(t)}getSortStates(){return Rt(this.sortedColumnsStates)}getColumnSortState(t){if(this.isColumnSorted(t))return Rt(this.sortedColumnsStates[this.getIndexOfColumnInSortQueue(t)])}setSortStates(t){this.sortedColumnsStates=t}destroy(){this.sortedColumnsStates.length=0,this.sortedColumnsStates=null}};var fs=\"asc\",ms=\"desc\",pp=\"colHeader\";function gp(s){if(gt(s))return!1;let{column:t,sortOrder:e}=s;return Number.isInteger(t)&&[fs,ms].includes(e)}function Vu(s){if(Array.isArray(s)===!1||s.every(o=>K(o))===!1)return!1;let t=s.map(({column:o})=>o);return new Set(t).size===t.length&&s.every(gp)}function Ua(s){if(s!==ms)return s===fs?ms:fs}function za(s){return s.querySelector(`.${pp}`)}function $a(s,t){if(s<0||!t.parentNode)return!1;let e=t.parentNode.parentNode.childNodes;return Array.from(e).indexOf(t.parentNode)-e.length===-1}function Ya(s,t,e){return s===-1&&t>=0&&ao(e)===!1}var wp=\"ascending\",Cp=\"descending\",Uu=\"indicatorDisabled\",zu=\"columnSorting\",$u=\"sortAction\",Yu=new Map([[fs,wp],[ms,Cp]]);function Gu(s,t,e,o){let i=[zu];if(o&&i.push($u),e===!1)i.push(Uu);else if(s.isColumnSorted(t)){let r=s.getSortOrderOfColumn(t);i.push(Yu.get(r))}return i}function Xu(){return Array.from(Yu.values()).concat($u,Uu,zu)}var yp=\"arrayMapper\",ju={_arrayMap:[],getValueByIndex(s){let t=this._arrayMap.length,e=null;return s<t&&(e=this._arrayMap[s]),e},getIndexByValue(s){let t;return(t=this._arrayMap.indexOf(s))===-1?null:t},insertItems(s,t=1){let e=Qr(this._arrayMap)+1,o=[];return P(t-1,i=>{o.push(this._arrayMap.splice(s+i,0,e+i))}),o},removeItems(s,t=1){let e=[];if(Array.isArray(s)){let o=[].concat(this._arrayMap);s.sort((i,r)=>r-i);for(let i=0,r=s.length;i<r;i++){let n=s[i];this._arrayMap.splice(n,1),e.push(o[n])}}else e=this._arrayMap.splice(s,t);return e},unshiftItems(s,t=1){let e=this.removeItems(s,t);function o(i){return Tt(e,(r,n)=>{let l=r;return i>n&&(l+=1),l},0)}this._arrayMap=ht(this._arrayMap,i=>{let r=i,n=o(r);return n&&(r-=n),r})},shiftItems(s,t=1){this._arrayMap=ht(this._arrayMap,e=>{let o=e;return o>=s&&(o+=t),o}),P(t-1,e=>{this._arrayMap.splice(s+e,0,s+e)})},swapIndexes(s,t){this._arrayMap.splice(t,0,...this._arrayMap.splice(s,1))},clearMap(){this._arrayMap.length=0}};De(ju,\"MIXIN_NAME\",yp,{writable:!1,enumerable:!1});var Zo=ju;var ur=class{createMap(t){let e=t===void 0?this._arrayMap.length:t;this._arrayMap.length=0,P(e-1,o=>{this._arrayMap[o]=o})}destroy(){this._arrayMap=null}};Lt(ur,Zo);var Ku=ur;function qu(s,t,e){return function(o,i){let{sortEmptyCells:r}=e;return typeof o==\"string\"&&(o=o.toLowerCase()),typeof i==\"string\"&&(i=i.toLowerCase()),o===i?we:Bt(o)?Bt(i)?we:r?s===\"asc\"?Mt:Ht:Ht:Bt(i)?r?s===\"asc\"?Ht:Mt:Mt:isNaN(o)&&!isNaN(i)?s===\"asc\"?Ht:Mt:!isNaN(o)&&isNaN(i)?s===\"asc\"?Mt:Ht:(isNaN(o)||isNaN(i)||(o=parseFloat(o),i=parseFloat(i)),o<i?s===\"asc\"?Mt:Ht:o>i?s===\"asc\"?Ht:Mt:we)}}var Ga=\"default\";function Qu(s,t,e){return function(o,i){let r=parseFloat(o),n=parseFloat(i),{sortEmptyCells:l}=e;if(r===n||isNaN(r)&&isNaN(n))return we;if(l){if(Bt(o))return s===\"asc\"?Mt:Ht;if(Bt(i))return s===\"asc\"?Ht:Mt}return isNaN(r)?Ht:isNaN(n)?Mt:r<n?s===\"asc\"?Mt:Ht:r>n?s===\"asc\"?Ht:Mt:we}}var Ju=\"numeric\";So();function Zu(s,t,e){return function(o,i){let{sortEmptyCells:r}=e;if(o===i)return we;if(Bt(o))return Bt(i)?we:r?s===\"asc\"?Mt:Ht:Ht;if(Bt(i))return r?s===\"asc\"?Ht:Mt:Mt;let n=t.dateFormat,l=St(o,n),a=St(i,n);return l.isValid()?a.isValid()?a.isAfter(l)?s===\"asc\"?Mt:Ht:a.isBefore(l)?s===\"asc\"?Ht:Mt:we:Mt:Ht}}var td=\"date\";var{register:Xa,getItem:ed,hasItem:Ep}=Pt(\"sorting.compareFunctionFactory\"),{register:ja,getItem:Ka}=Pt(\"sorting.mainSortComparator\");function qa(s){return Ep(s)?ed(s):ed(Ga)}Xa(Ju,Qu);Xa(td,Zu);Xa(Ga,qu);var dr=class{constructor(t){this.data=t,this.next=null,this.prev=null}},Qa=class{constructor(){this.first=null,this.last=null}push(t){let e=new dr(t);if(this.first===null)this.first=e,this.last=e;else{let o=this.last;this.last=e,e.prev=o,o.next=e}}unshift(t){let e=new dr(t);if(this.first===null)this.first=e,this.last=e;else{let o=this.first;this.first=e,e.next=o,o.prev=e}}inorder(t){let e=this.first;for(;e;)t(e),e=e.next}remove(t){if(this.first===null)return!1;let e=this.first,o,i;for(;e;){if(e.data===t)return o=e.next,i=e.prev,o&&(o.prev=i),i&&(i.next=o),e===this.first&&(this.first=o),e===this.last&&(this.last=i),!0;e=e.next}return!1}hasCycle(){let t=this.first,e=this.first;for(;;){if(t===null||(t=t.next,t===null))return!1;if(t=t.next,e=e.next,t===e)return!0}}pop(){if(this.last===null)return null;let t=this.last;return this.last=this.last.prev,t}shift(){if(this.first===null)return null;let t=this.first;return this.first=this.first.next,t}recursiveReverse(){function t(o,i){i&&(t(i,i.next),i.next=o)}if(!this.first)return;t(this.first,this.first.next),this.first.next=null;let e=this.first;this.first=this.last,this.last=e}reverse(){if(!this.first||!this.first.next)return;let t=this.first.next,e=this.first,o;for(;t;)o=t.next,t.next=e,e.prev=t,e=t,t=o;this.first.next=null,this.last.prev=null,o=this.first,this.first=e,this.last=o}};var Ja=Qa;var Sp=function(s,t){let e=s.toString(),o=t.toString();return e===o?0:e<o?-1:1};function ps(s,t=Sp,e=0,o=s.length){if(Math.abs(o-e)<=1)return[];let i=Math.ceil((e+o)/2);return ps(s,t,e,i),ps(s,t,i,o),Rp(s,t,e,i,o)}function Rp(s,t,e,o,i){let r=new Ja,n=new Ja,l=o-e,a=i-o,h=Math.max(l,a),u=i-e;for(let w=0;w<h;w+=1)w<l&&r.push(s[e+w]),w<a&&n.push(s[o+w]);let m=0;for(;m<u;)r.first&&n.first?t(r.first.data,n.first.data)>0?s[e+m]=n.shift().data:s[e+m]=r.shift().data:r.first?s[e+m]=r.shift().data:s[e+m]=n.shift().data,m+=1;return s}var we=0,Mt=-1,Ht=1;function Za(s,t,...e){let o=Ka(t);ps(s,o(...e))}function od(s,t){return function(e,o){let[,...i]=e,[,...r]=o;return(function(l){let a=s[l],h=t[l],u=i[l],m=r[l],w=h.columnSorting;return(w.compareFunctionFactory?w.compareFunctionFactory:qa(h.type))(a,h,w)(u,m)})(0)}}var id=\"append\",Tp=\"replace\",th=\"columnSorting\";ja(th,od);V.getSingleton().register(\"beforeColumnSort\");V.getSingleton().register(\"afterColumnSort\");var fr=class extends Z{constructor(t){super(t),this.columnStatesManager=new cr,this.rowsMapper=new Ku(this),this.blockPluginTranslation=!0,this.columnMetaCache=new Map,this.pluginKey=th}isEnabled(){return!!this.hot.getSettings()[this.pluginKey]}enablePlugin(){this.enabled||(gt(this.hot.getSettings().observeChanges)&&this.enableObserveChangesPlugin(),this.addHook(\"afterTrimRow\",()=>this.sortByPresetSortStates()),this.addHook(\"afterUntrimRow\",()=>this.sortByPresetSortStates()),this.addHook(\"modifyRow\",(t,e)=>this.onModifyRow(t,e)),this.addHook(\"unmodifyRow\",(t,e)=>this.onUnmodifyRow(t,e)),this.addHook(\"afterGetColHeader\",(t,e)=>this.onAfterGetColHeader(t,e)),this.addHook(\"beforeOnCellMouseDown\",(t,e,o,i)=>this.onBeforeOnCellMouseDown(t,e,o,i)),this.addHook(\"afterOnCellMouseDown\",(t,e)=>this.onAfterOnCellMouseDown(t,e)),this.addHook(\"afterCreateRow\",(t,e)=>this.onAfterCreateRow(t,e)),this.addHook(\"afterRemoveRow\",(t,e)=>this.onAfterRemoveRow(t,e)),this.addHook(\"afterInit\",()=>this.loadOrSortBySettings()),this.addHook(\"afterLoadData\",t=>this.onAfterLoadData(t)),this.addHook(\"afterCreateCol\",()=>this.onAfterCreateCol()),this.addHook(\"afterRemoveCol\",()=>this.onAfterRemoveCol()),this.hot.view&&this.loadOrSortBySettings(),super.enablePlugin())}disablePlugin(){let t=(e,o)=>{let i=za(o);$a(e,o)===!1||i===null||this.updateHeaderClasses(i)};this.hot.addHook(\"afterGetColHeader\",t),this.hot.addHookOnce(\"afterRender\",()=>{this.hot.removeHook(\"afterGetColHeader\",t)}),this.rowsMapper.clearMap(),super.disablePlugin()}sort(t){let e=this.getSortConfig(),o=this.getNormalizedSortConfigs(t),i=this.areValidSortConfigs(o);if(this.hot.runHooks(\"beforeColumnSort\",e,o,i)!==!1){if(i){let n=({column:a,...h})=>({column:this.hot.toPhysicalColumn(a),...h}),l=ht(o,a=>n(a));this.columnStatesManager.setSortStates(l),this.sortByPresetSortStates(),this.saveAllSortSettings(),this.hot.render(),this.hot.view.wt.draw(!0)}this.hot.runHooks(\"afterColumnSort\",e,this.getSortConfig(),i)}}clearSort(){this.sort([])}isSorted(){return this.enabled&&!this.columnStatesManager.isListOfSortedColumnsEmpty()}getSortConfig(t){let e=({column:i,...r})=>({column:this.hot.toVisualColumn(i),...r});if(mt(t)){let i=this.hot.toPhysicalColumn(t),r=this.columnStatesManager.getColumnSortState(i);return mt(r)?e(r):void 0}let o=this.columnStatesManager.getSortStates();return ht(o,i=>e(i))}setSortConfig(t){let e=this.getNormalizedSortConfigs(t);if(this.areValidSortConfigs(e)){let o=({column:r,...n})=>({column:this.hot.toPhysicalColumn(r),...n}),i=ht(e,r=>o(r));this.columnStatesManager.setSortStates(i)}}getNormalizedSortConfigs(t=[]){return Array.isArray(t)?t.slice(0,1):[t].slice(0,1)}areValidSortConfigs(t){if(Array.isArray(t)===!1)return!1;let e=t.map(({column:r})=>r),o=this.hot.countCols(),i=e.every(r=>r<=o&&r>=0);return Vu(t)&&i}saveAllSortSettings(){let t=this.columnStatesManager.getAllColumnsProperties();t.initialConfig=this.columnStatesManager.getSortStates(),this.hot.runHooks(\"persistentStateSave\",\"columnSorting\",t)}getAllSavedSortSettings(){let t={};this.hot.runHooks(\"persistentStateLoad\",\"columnSorting\",t);let e=t.value,o=({column:i,...r})=>({column:this.hot.toVisualColumn(i),...r});return mt(e)&&Array.isArray(e.initialConfig)&&(e.initialConfig=ht(e.initialConfig,o)),e}getColumnNextConfig(t){let e=this.hot.toPhysicalColumn(t);if(this.columnStatesManager.isColumnSorted(e)){let i=this.getSortConfig(t),r=Ua(i.sortOrder);return mt(r)?(i.sortOrder=r,i):void 0}let o=this.hot.countCols();if(Number.isInteger(t)&&t>=0&&t<o)return{column:t,sortOrder:Ua()}}getNextSortConfig(t,e=id){let o=this.hot.toPhysicalColumn(t),i=this.columnStatesManager.getIndexOfColumnInSortQueue(o),r=this.columnStatesManager.isColumnSorted(o),n=this.getSortConfig(),l=this.getColumnNextConfig(t);if(r){if(gt(l))return[...n.slice(0,i),...n.slice(i+1)];if(e===id)return[...n.slice(0,i),...n.slice(i+1),l];if(e===Tp)return[...n.slice(0,i),l,...n.slice(i+1)]}return mt(l)?n.concat(l):n}setMergedPluginSettings(t){let e=this.hot.toPhysicalColumn(t),o=this.hot.getSettings()[this.pluginKey],i=this.columnStatesManager.getAllColumnsProperties(),r=this.hot.getCellMeta(0,t),n=Object.getPrototypeOf(r),a=Object.hasOwnProperty.call(n,this.pluginKey)?n[this.pluginKey]:{};this.columnMetaCache.set(e,Object.assign(i,o,a))}getFirstCellSettings(t){let e=this.blockPluginTranslation;this.blockPluginTranslation=!0,(this.columnMetaCache.size===0||this.columnMetaCache.size<this.hot.countCols())&&this.rebuildColumnMetaCache();let o=this.hot.getCellMeta(0,t);this.blockPluginTranslation=e;let i=Object.create(o);return i[this.pluginKey]=this.columnMetaCache.get(this.hot.toPhysicalColumn(t)),i}rebuildColumnMetaCache(){let t=this.hot.countCols();t===0?this.columnMetaCache.clear():P(t-1,e=>this.setMergedPluginSettings(e))}getNumberOfRowsToSort(t){let e=this.hot.getSettings();return e.maxRows<=t?e.maxRows:t-e.minSpareRows}sortByPresetSortStates(){if(this.columnStatesManager.isListOfSortedColumnsEmpty()){this.rowsMapper.clearMap();return}let t=[],e=this.columnStatesManager.getSortedColumns(),o=this.hot.countRows();this.blockPluginTranslation=!0;let i=r=>ht(e,n=>this.hot.getDataAtCell(r,this.hot.toVisualColumn(n)));for(let r=0;r<this.getNumberOfRowsToSort(o);r+=1)t.push([r].concat(i(r)));Za(t,this.pluginKey,ht(e,r=>this.columnStatesManager.getSortOrderOfColumn(r)),ht(e,r=>this.getFirstCellSettings(this.hot.toVisualColumn(r))));for(let r=t.length;r<o;r+=1)t.push([r].concat(i(r)));this.blockPluginTranslation=!1,this.rowsMapper._arrayMap=ht(t,r=>r[0])}loadOrSortBySettings(){this.columnMetaCache.clear();let t=this.getAllSavedSortSettings();if(K(t))this.sortBySettings(t);else{let e=this.hot.getSettings()[this.pluginKey];this.sortBySettings(e)}}sortBySettings(t){if(K(t)){this.columnStatesManager.updateAllColumnsProperties(t);let e=t.initialConfig;(Array.isArray(e)||K(e))&&this.sort(e)}else this.hot.render()}enableObserveChangesPlugin(){let t=this;this.hot._registerTimeout(setTimeout(()=>{t.hot.updateSettings({observeChanges:!0})},0))}onModifyRow(t,e){if(this.blockPluginTranslation===!1&&e!==this.pluginName&&this.isSorted()){let o=this.rowsMapper.getValueByIndex(t);t=o===null?t:o}return t}onUnmodifyRow(t,e){return this.blockPluginTranslation===!1&&e!==this.pluginName&&this.isSorted()&&(t=this.rowsMapper.getIndexByValue(t)),t}onAfterGetColHeader(t,e){let o=za(e);if($a(t,e)===!1||o===null)return;let i=this.hot.toPhysicalColumn(t),r=this.getFirstCellSettings(t)[this.pluginKey],n=r.indicator,l=r.headerAction;this.updateHeaderClasses(o,this.columnStatesManager,i,n,l)}updateHeaderClasses(t,...e){Y(t,Xu(t)),this.enabled!==!1&&L(t,Gu(...e))}onUpdateSettings(t){super.onUpdateSettings(),this.columnMetaCache.clear(),mt(t[this.pluginKey])&&this.sortBySettings(t[this.pluginKey])}onAfterLoadData(t){this.rowsMapper.clearMap(),this.columnMetaCache.clear(),t===!0&&this.hot.view&&this.loadOrSortBySettings()}onAfterCreateRow(t,e){this.rowsMapper.shiftItems(t,e)}onAfterRemoveRow(t,e){this.rowsMapper.unshiftItems(t,e)}onAfterCreateCol(){this.columnMetaCache.clear()}onAfterRemoveCol(){this.columnMetaCache.clear()}wasClickableHeaderClicked(t,e){return this.getFirstCellSettings(e)[this.pluginKey].headerAction&&t.realTarget.nodeName===\"SPAN\"}onBeforeOnCellMouseDown(t,e,o,i){Ya(e.row,e.col,t)!==!1&&this.wasClickableHeaderClicked(t,e.col)&&cs()&&(i.column=!0)}onAfterOnCellMouseDown(t,e){Ya(e.row,e.col,t)!==!1&&this.wasClickableHeaderClicked(t,e.col)&&(cs()&&(this.hot.deselectCell(),this.hot.selectColumns(e.col)),this.sort(this.getColumnNextConfig(e.col)))}destroy(){this.rowsMapper.destroy(),this.columnStatesManager.destroy(),super.destroy()}};J(th,fr);var sd=fr;var eh=class s{static get CLASS_EDITOR_CONTAINER(){return\"htCommentsContainer\"}static get CLASS_EDITOR(){return\"htComments\"}static get CLASS_INPUT(){return\"htCommentTextArea\"}static get CLASS_CELL(){return\"htCommentCell\"}constructor(){this.editor=this.createEditor(),this.editorStyle=this.editor.style,this.hidden=!0,this.hide()}setPosition(t,e){this.editorStyle.left=`${t}px`,this.editorStyle.top=`${e}px`}setSize(t,e){if(t&&e){let o=this.getInputElement();o.style.width=`${t}px`,o.style.height=`${e}px`}}resetSize(){let t=this.getInputElement();t.style.width=\"\",t.style.height=\"\"}setReadOnlyState(t){let e=this.getInputElement();e.readOnly=t}show(){this.editorStyle.display=\"block\",this.hidden=!1}hide(){this.editorStyle.display=\"none\",this.hidden=!0}isVisible(){return this.editorStyle.display===\"block\"}setValue(t=\"\"){let e=t||\"\";this.getInputElement().value=e}getValue(){return this.getInputElement().value}isFocused(){return document.activeElement===this.getInputElement()}focus(){this.getInputElement().focus()}createEditor(){let t=document.createElement(\"div\"),e=document.createElement(\"textarea\"),o=document.querySelector(`.${s.CLASS_EDITOR_CONTAINER}`);return o||(o=document.createElement(\"div\"),L(o,s.CLASS_EDITOR_CONTAINER),document.body.appendChild(o)),L(t,s.CLASS_EDITOR),L(e,s.CLASS_INPUT),t.appendChild(e),o.appendChild(t),t}getInputElement(){return this.editor.querySelector(`.${s.CLASS_INPUT}`)}destroy(){this.editor.parentNode.removeChild(this.editor),this.editor=null,this.editorStyle=null}},rd=eh;var yt=\"---------\";function oh(){return{name:yt}}function ld(s){return ht(s,t=>({start:t.getTopLeftCorner(),end:t.getBottomRightCorner()}))}function gs(s){return z(s,\"htSeparator\")}function ad(s){return z(s,\"htSubmenu\")}function ws(s){return z(s,\"htDisabled\")}function Cs(s){return z(s,\"htSelectionDisabled\")}function te(s){let t=s.getSelected();return!t||t[0]<0?null:t}function bp(s,t){return s.indexOf(t)!==-1?s:`${s.replace(\"htTop\",\"\").replace(\"htMiddle\",\"\").replace(\"htBottom\",\"\").replace(\"  \",\"\")} ${t}`}function vp(s,t){return s.indexOf(t)!==-1?s:`${s.replace(\"htLeft\",\"\").replace(\"htCenter\",\"\").replace(\"htRight\",\"\").replace(\"htJustify\",\"\").replace(\"  \",\"\")} ${t}`}function mo(s,t){let e={};return v(s,({from:o,to:i})=>{for(let r=o.row;r<=i.row;r++)for(let n=o.col;n<=i.col;n++)e[r]||(e[r]=[]),e[r][n]=t(r,n)}),e}function Fe(s,t,e,o,i){v(s,({from:r,to:n})=>{if(r.row===n.row&&r.col===n.col)nd(r.row,r.col,t,e,o,i);else for(let l=r.row;l<=n.row;l++)for(let a=r.col;a<=n.col;a++)nd(l,a,t,e,o,i)})}function nd(s,t,e,o,i,r){let n=i(s,t),l=o;n.className&&(e===\"vertical\"?l=bp(n.className,o):l=vp(n.className,o)),r(s,t,\"className\",l)}function ce(s,t){let e=!1;return Array.isArray(s)&&v(s,o=>(o.forAll((i,r)=>{if(t(i,r))return e=!0,!1}),e)),e}function Ce(s){return`<span class=\"selected\">\\u2713</span>${s}`}function hd(s,t){return!s.hidden||!(typeof s.hidden==\"function\"&&s.hidden.call(t))}function cd(s,t){let e=s.slice(0);for(let o=0;o<e.length&&e[o].name===t;)e.shift();return e}function Op(s,t){let e=s.slice(0);return e.reverse(),e=cd(e,t),e.reverse(),e}function Mp(s){let t=[];return v(s,(e,o)=>{o>0?t[t.length-1].name!==e.name&&t.push(e):t.push(e)}),t}function ud(s,t=yt){let e=s.slice(0);return e=cd(e,t),e=Op(e,t),e=Mp(e),e}var Hp=250,Ap=250,mr=class{constructor(t){this.wasLastActionShow=!0,this.showDebounced=null,this.hidingTimer=null,this.updateDelay(t)}hide(){this.wasLastActionShow=!1,this.hidingTimer=setTimeout(()=>{this.wasLastActionShow===!1&&this.runLocalHooks(\"hide\")},Ap)}show(t){this.wasLastActionShow=!0,this.showDebounced(t)}cancelHiding(){this.wasLastActionShow=!0,clearTimeout(this.hidingTimer),this.hidingTimer=null}updateDelay(t=Hp){this.showDebounced=Ei(e=>{this.wasLastActionShow&&this.runLocalHooks(\"show\",e.from.row,e.from.col)},t)}destroy(){this.clearLocalHooks()}};Lt(mr,ge);var dd=mr;var pr=new WeakMap,Ve=\"comment\",ti=\"value\",fd=\"style\",gr=\"readOnly\",wr=class extends Z{constructor(t){super(t),this.editor=null,this.displaySwitch=null,this.eventManager=null,this.range={},this.mouseDown=!1,this.contextMenuEvent=!1,this.timer=null,pr.set(this,{tempEditorDimensions:{},cellBelowCursor:null})}isEnabled(){return!!this.hot.getSettings().comments}enablePlugin(){this.enabled||(this.editor||(this.editor=new rd),this.eventManager||(this.eventManager=new G(this)),this.displaySwitch||(this.displaySwitch=new dd(this.getDisplayDelaySetting())),this.addHook(\"afterContextMenuDefaultOptions\",t=>this.addToContextMenu(t)),this.addHook(\"afterRenderer\",(t,e,o,i,r,n)=>this.onAfterRenderer(t,n)),this.addHook(\"afterScrollHorizontally\",()=>this.hide()),this.addHook(\"afterScrollVertically\",()=>this.hide()),this.addHook(\"afterBeginEditing\",()=>this.onAfterBeginEditing()),this.displaySwitch.addLocalHook(\"hide\",()=>this.hide()),this.displaySwitch.addLocalHook(\"show\",(t,e)=>this.showAtCell(t,e)),this.registerListeners(),super.enablePlugin())}updatePlugin(){this.disablePlugin(),this.enablePlugin(),super.updatePlugin(),this.displaySwitch.updateDelay(this.getDisplayDelaySetting())}disablePlugin(){super.disablePlugin()}registerListeners(){this.eventManager.addEventListener(document,\"mouseover\",t=>this.onMouseOver(t)),this.eventManager.addEventListener(document,\"mousedown\",t=>this.onMouseDown(t)),this.eventManager.addEventListener(document,\"mouseup\",()=>this.onMouseUp()),this.eventManager.addEventListener(this.editor.getInputElement(),\"blur\",()=>this.onEditorBlur()),this.eventManager.addEventListener(this.editor.getInputElement(),\"mousedown\",t=>this.onEditorMouseDown(t)),this.eventManager.addEventListener(this.editor.getInputElement(),\"mouseup\",t=>this.onEditorMouseUp(t))}setRange(t){this.range=t}clearRange(){this.range={}}targetIsCellWithComment(t){let e=Ie(t.target,\"TD\",\"TBODY\");return!!(e&&z(e,\"htCommentCell\")&&Ie(e,[this.hot.rootElement]))}targetIsCommentTextArea(t){return this.editor.getInputElement()===t.target}setComment(t){if(!this.range.from)throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');let e=this.editor.getValue(),o=\"\";t!=null?o=t:e!=null&&(o=e);let i=this.range.from.row,r=this.range.from.col;this.updateCommentMeta(i,r,{[ti]:o}),this.hot.render()}setCommentAtCell(t,e,o){this.setRange({from:new M(t,e)}),this.setComment(o)}removeComment(t=!0){if(!this.range.from)throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');this.hot.setCellMeta(this.range.from.row,this.range.from.col,Ve,void 0),t&&this.hot.render(),this.hide()}removeCommentAtCell(t,e,o=!0){this.setRange({from:new M(t,e)}),this.removeComment(o)}getComment(){let t=this.range.from.row,e=this.range.from.col;return this.getCommentMeta(t,e,ti)}getCommentAtCell(t,e){return this.getCommentMeta(t,e,ti)}show(){if(!this.range.from)throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');let t=this.hot.getCellMeta(this.range.from.row,this.range.from.col);return this.refreshEditor(!0),this.editor.setValue(t[Ve]?t[Ve][ti]:\"\"),this.editor.hidden&&this.editor.show(),!0}showAtCell(t,e){return this.setRange({from:new M(t,e)}),this.show()}hide(){this.editor.hidden||this.editor.hide()}refreshEditor(t=!1){if(!t&&(!this.range.from||!this.editor.isVisible()))return;let e=be(this.hot.view.wt.wtTable.TABLE),o=this.hot.view.wt.wtTable.getCell(this.range.from),i=this.range.from.row,r=this.range.from.col,n=rt(o),l=this.hot.view.wt.wtTable.getStretchedColumnWidth(r),a=n.top<0?0:n.top,h=n.left;this.hot.view.wt.wtViewport.hasVerticalScroll()&&e!==window&&(a-=this.hot.view.wt.wtOverlays.topOverlay.getScrollPosition()),this.hot.view.wt.wtViewport.hasHorizontalScroll()&&e!==window&&(h-=this.hot.view.wt.wtOverlays.leftOverlay.getScrollPosition());let u=h+l,m=a,w=this.getCommentMeta(i,r,fd),R=this.getCommentMeta(i,r,gr);w?this.editor.setSize(w.width,w.height):this.editor.resetSize(),this.editor.setReadOnlyState(R),this.editor.setPosition(u,m)}checkSelectionCommentsConsistency(){let t=this.hot.getSelectedRangeLast();if(!t)return!1;let e=!1,o=t.from;return this.getCommentMeta(o.row,o.col,ti)&&(e=!0),e}updateCommentMeta(t,e,o){let i=this.hot.getCellMeta(t,e)[Ve],r;i?(r=Rt(i),eo(r,o)):r=o,this.hot.setCellMeta(t,e,Ve,r)}getCommentMeta(t,e,o){let i=this.hot.getCellMeta(t,e);if(i[Ve])return i[Ve][o]}onMouseDown(t){if(this.mouseDown=!0,!(!this.hot.view||!this.hot.view.wt)){if(!this.contextMenuEvent&&!this.targetIsCommentTextArea(t)){let e=Ie(t.target,\"TD\",\"TBODY\"),o=null;e&&(o=this.hot.view.wt.wtTable.getCoords(e)),(!e||this.range.from&&o&&(this.range.from.row!==o.row||this.range.from.col!==o.col))&&this.hide()}this.contextMenuEvent=!1}}onMouseOver(t){let e=pr.get(this);if(e.cellBelowCursor=document.elementFromPoint(t.clientX,t.clientY),!(this.mouseDown||this.editor.isFocused()||z(t.target,\"wtBorder\")||e.cellBelowCursor!==t.target||!this.editor))if(this.targetIsCellWithComment(t)){let o=this.hot.view.wt.wtTable.getCoords(t.target),i={from:new M(o.row,o.col)};this.displaySwitch.show(i)}else se(t.target,document)&&!this.targetIsCommentTextArea(t)&&this.displaySwitch.hide()}onMouseUp(){this.mouseDown=!1}onAfterRenderer(t,e){e[Ve]&&e[Ve][ti]&&L(t,e.commentedCellClassName)}onEditorBlur(){this.setComment()}onEditorMouseDown(t){let e=pr.get(this);e.tempEditorDimensions={width:st(t.target),height:lt(t.target)}}onEditorMouseUp(t){let e=pr.get(this),o=st(t.target),i=lt(t.target);(o!==e.tempEditorDimensions.width+1||i!==e.tempEditorDimensions.height+2)&&this.updateCommentMeta(this.range.from.row,this.range.from.col,{[fd]:{width:o,height:i}})}onContextMenuAddComment(){this.displaySwitch.cancelHiding();let t=this.hot.getSelectedRangeLast();this.contextMenuEvent=!0,this.setRange({from:t.from}),this.show(),setTimeout(()=>{this.hot&&(this.hot.deselectCell(),this.editor.focus())},10)}onContextMenuRemoveComment(){let{from:t,to:e}=this.hot.getSelectedRangeLast();this.contextMenuEvent=!0;for(let o=t.row;o<=e.row;o++)for(let i=t.col;i<=e.col;i++)this.removeCommentAtCell(o,i,!1);this.hot.render()}onContextMenuMakeReadOnly(){let{from:t,to:e}=this.hot.getSelectedRangeLast();this.contextMenuEvent=!0;for(let o=t.row;o<=e.row;o++)for(let i=t.col;i<=e.col;i++){let r=!!this.getCommentMeta(o,i,gr);this.updateCommentMeta(o,i,{[gr]:!r})}}addToContextMenu(t){t.items.push({name:\"---------\"},{key:\"commentsAddEdit\",name:()=>this.checkSelectionCommentsConsistency()?this.hot.getTranslatedPhrase(Gi):this.hot.getTranslatedPhrase(Yi),callback:()=>this.onContextMenuAddComment(),disabled(){return!(this.getSelectedLast()&&!this.selection.isSelectedByCorner())}},{key:\"commentsRemove\",name(){return this.getTranslatedPhrase(Xi)},callback:()=>this.onContextMenuRemoveComment(),disabled:()=>this.hot.selection.isSelectedByCorner()},{key:\"commentsReadOnly\",name(){let e=this.getTranslatedPhrase(ji);return ce(this.getSelectedRangeLast(),(i,r)=>{let n=this.getCellMeta(i,r)[Ve];if(n&&(n=n[gr]),n)return!0})&&(e=Ce(e)),e},callback:()=>this.onContextMenuMakeReadOnly(),disabled:()=>this.hot.selection.isSelectedByCorner()||!this.checkSelectionCommentsConsistency()})}getDisplayDelaySetting(){let t=this.hot.getSettings().comments;if(K(t))return t.displayDelay}onAfterBeginEditing(){this.hide()}destroy(){this.editor&&this.editor.destroy(),this.displaySwitch&&this.displaySwitch.destroy(),super.destroy()}};J(\"comments\",wr);var md=wr;var ih=class{constructor(t){this.hot=t,this.commands={},this.commonCallback=null}registerCommand(t,e){this.commands[t]=e}setCommonCallback(t){this.commonCallback=t}execute(t,...e){let o=t.split(\":\"),i=o[0],r=o.length===2?o[1]:null,n=this.commands[i];if(!n)throw new Error(`Menu command '${i}' not exists.`);if(r&&n.submenu&&(n=Np(r,n.submenu.items)),n.disabled===!0||typeof n.disabled==\"function\"&&n.disabled.call(this.hot)===!0||ot(n,\"submenu\"))return;let l=[];typeof n.callback==\"function\"&&l.push(n.callback),typeof this.commonCallback==\"function\"&&l.push(this.commonCallback),e.unshift(o.join(\":\")),v(l,a=>a.apply(this.hot,e))}};function Np(s,t){let e;return v(t,o=>{let i=o.key?o.key.split(\":\"):null;if(Array.isArray(i)&&i[1]===s)return e=o,!1}),e}var pd=ih;var ee=\"alignment\";function sh(){return{key:ee,name(){return this.getTranslatedPhrase(Ki)},disabled(){return!(this.getSelectedRange()&&!this.selection.isSelectedByCorner())},submenu:{items:[{key:`${ee}:left`,name(){let s=this.getTranslatedPhrase(qi);return ce(this.getSelectedRange(),(e,o)=>{let i=this.getCellMeta(e,o).className;if(i&&i.indexOf(\"htLeft\")!==-1)return!0})&&(s=Ce(s)),s},callback(){let s=this.getSelectedRange(),t=mo(s,(i,r)=>this.getCellMeta(i,r).className),e=\"horizontal\",o=\"htLeft\";this.runHooks(\"beforeCellAlignment\",t,s,e,o),Fe(s,e,o,(i,r)=>this.getCellMeta(i,r),(i,r,n,l)=>this.setCellMeta(i,r,n,l)),this.render()},disabled:!1},{key:`${ee}:center`,name(){let s=this.getTranslatedPhrase(Qi);return ce(this.getSelectedRange(),(e,o)=>{let i=this.getCellMeta(e,o).className;if(i&&i.indexOf(\"htCenter\")!==-1)return!0})&&(s=Ce(s)),s},callback(){let s=this.getSelectedRange(),t=mo(s,(i,r)=>this.getCellMeta(i,r).className),e=\"horizontal\",o=\"htCenter\";this.runHooks(\"beforeCellAlignment\",t,s,e,o),Fe(s,e,o,(i,r)=>this.getCellMeta(i,r),(i,r,n,l)=>this.setCellMeta(i,r,n,l)),this.render()},disabled:!1},{key:`${ee}:right`,name(){let s=this.getTranslatedPhrase(Ji);return ce(this.getSelectedRange(),(e,o)=>{let i=this.getCellMeta(e,o).className;if(i&&i.indexOf(\"htRight\")!==-1)return!0})&&(s=Ce(s)),s},callback(){let s=this.getSelectedRange(),t=mo(s,(i,r)=>this.getCellMeta(i,r).className),e=\"horizontal\",o=\"htRight\";this.runHooks(\"beforeCellAlignment\",t,s,e,o),Fe(s,e,o,(i,r)=>this.getCellMeta(i,r),(i,r,n,l)=>this.setCellMeta(i,r,n,l)),this.render()},disabled:!1},{key:`${ee}:justify`,name(){let s=this.getTranslatedPhrase(Zi);return ce(this.getSelectedRange(),(e,o)=>{let i=this.getCellMeta(e,o).className;if(i&&i.indexOf(\"htJustify\")!==-1)return!0})&&(s=Ce(s)),s},callback(){let s=this.getSelectedRange(),t=mo(s,(i,r)=>this.getCellMeta(i,r).className),e=\"horizontal\",o=\"htJustify\";this.runHooks(\"beforeCellAlignment\",t,s,e,o),Fe(s,e,o,(i,r)=>this.getCellMeta(i,r),(i,r,n,l)=>this.setCellMeta(i,r,n,l)),this.render()},disabled:!1},{name:yt},{key:`${ee}:top`,name(){let s=this.getTranslatedPhrase(ts);return ce(this.getSelectedRange(),(e,o)=>{let i=this.getCellMeta(e,o).className;if(i&&i.indexOf(\"htTop\")!==-1)return!0})&&(s=Ce(s)),s},callback(){let s=this.getSelectedRange(),t=mo(s,(i,r)=>this.getCellMeta(i,r).className),e=\"vertical\",o=\"htTop\";this.runHooks(\"beforeCellAlignment\",t,s,e,o),Fe(s,e,o,(i,r)=>this.getCellMeta(i,r),(i,r,n,l)=>this.setCellMeta(i,r,n,l)),this.render()},disabled:!1},{key:`${ee}:middle`,name(){let s=this.getTranslatedPhrase(es);return ce(this.getSelectedRange(),(e,o)=>{let i=this.getCellMeta(e,o).className;if(i&&i.indexOf(\"htMiddle\")!==-1)return!0})&&(s=Ce(s)),s},callback(){let s=this.getSelectedRange(),t=mo(s,(i,r)=>this.getCellMeta(i,r).className),e=\"vertical\",o=\"htMiddle\";this.runHooks(\"beforeCellAlignment\",t,s,e,o),Fe(s,e,o,(i,r)=>this.getCellMeta(i,r),(i,r,n,l)=>this.setCellMeta(i,r,n,l)),this.render()},disabled:!1},{key:`${ee}:bottom`,name(){let s=this.getTranslatedPhrase(os);return ce(this.getSelectedRange(),(e,o)=>{let i=this.getCellMeta(e,o).className;if(i&&i.indexOf(\"htBottom\")!==-1)return!0})&&(s=Ce(s)),s},callback(){let s=this.getSelectedRange(),t=mo(s,(i,r)=>this.getCellMeta(i,r).className),e=\"vertical\",o=\"htBottom\";this.runHooks(\"beforeCellAlignment\",t,s,e,o),Fe(s,e,o,(i,r)=>this.getCellMeta(i,r),(i,r,n,l)=>this.setCellMeta(i,r,n,l)),this.render()},disabled:!1}]}}}var ys=\"clear_column\";function rh(){return{key:ys,name(){return this.getTranslatedPhrase(Bi)},callback(s,t){let e=t[0].start.col;this.countRows()&&this.populateFromArray(0,e,[[null]],Math.max(t[0].start.row,t[0].end.row),e,\"ContextMenu.clearColumn\")},disabled(){let s=te(this);if(!s)return!0;let[t,e,o]=s[0],r=[t,0,o,this.countCols()-1].join(\",\")===s.join(\",\");return e<0||this.countCols()>=this.getSettings().maxCols||r}}}var Ho=\"col_left\";function nh(){return{key:Ho,name(){return this.getTranslatedPhrase(Li)},callback(s,t){let e=t[Math.max(t.length-1,0)];this.alter(\"insert_col\",e.start.col,1,\"ContextMenu.columnLeft\")},disabled(){let s=te(this);if(!s||!this.isColumnModificationAllowed())return!0;let[t,e,o]=s[0],r=[t,0,o,this.countCols()-1].join(\",\")===s.join(\",\"),n=this.countCols()===1;return e<0||this.countCols()>=this.getSettings().maxCols||!n&&r},hidden(){return!this.getSettings().allowInsertColumn}}}var Ao=\"col_right\";function lh(){return{key:Ao,name(){return this.getTranslatedPhrase(xi)},callback(s,t){let e=t[Math.max(t.length-1,0)];this.alter(\"insert_col\",e.end.col+1,1,\"ContextMenu.columnRight\")},disabled(){let s=te(this);if(!s||!this.isColumnModificationAllowed())return!0;let[t,e,o]=s[0],r=[t,0,o,this.countCols()-1].join(\",\")===s.join(\",\"),n=this.countCols()===1;return e<0||this.countCols()>=this.getSettings().maxCols||!n&&r},hidden(){return!this.getSettings().allowInsertColumn}}}var No=\"make_read_only\";function ah(){return{key:No,name(){let s=this.getTranslatedPhrase(Pi);return ce(this.getSelectedRange(),(e,o)=>this.getCellMeta(e,o).readOnly)&&(s=Ce(s)),s},callback(){let s=this.getSelectedRange(),t=ce(s,(e,o)=>this.getCellMeta(e,o).readOnly);v(s,e=>{e.forAll((o,i)=>{this.setCellMeta(o,i,\"readOnly\",!t)})}),this.render()},disabled(){return!(this.getSelectedRange()&&!this.selection.isSelectedByCorner())}}}var Lo=\"redo\";function hh(){return{key:Lo,name(){return this.getTranslatedPhrase(Ii)},callback(){this.redo()},disabled(){return this.undoRedo&&!this.undoRedo.isRedoAvailable()}}}var xo=\"remove_col\";function ch(){return{key:xo,name(){let s=this.getSelected(),t=0;if(s)if(s.length>1)t=1;else{let[,e,,o]=s[0];e-o!==0&&(t=1)}return this.getTranslatedPhrase(Di,t)},callback(){this.alter(\"remove_col\",Lu(this.getSelected()),null,\"ContextMenu.removeColumn\")},disabled(){let s=te(this),t=this.countCols();return s?this.selection.isSelectedByRowHeader()||this.selection.isSelectedByCorner()||!this.isColumnModificationAllowed()||!t:!0},hidden(){return!this.getSettings().allowRemoveColumn}}}var _o=\"remove_row\";function uh(){return{key:_o,name(){let s=this.getSelected(),t=0;if(s)if(s.length>1)t=1;else{let[e,,o]=s[0];e-o!==0&&(t=1)}return this.getTranslatedPhrase(_i,t)},callback(){this.alter(\"remove_row\",xu(this.getSelected()),1,\"ContextMenu.removeRow\")},disabled(){let s=te(this),t=this.countRows();return s?this.selection.isSelectedByColumnHeader()||this.selection.isSelectedByCorner()||!t:!0},hidden(){return!this.getSettings().allowRemoveRow}}}var Do=\"row_above\";function dh(){return{key:Do,name(){return this.getTranslatedPhrase(Ai)},callback(s,t){let e=t[Math.max(t.length-1,0)];this.alter(\"insert_row\",e.start.row,1,\"ContextMenu.rowAbove\")},disabled(){return te(this)?this.selection.isSelectedByColumnHeader()||this.countRows()>=this.getSettings().maxRows:!0},hidden(){return!this.getSettings().allowInsertRow}}}var ko=\"row_below\";function fh(){return{key:ko,name(){return this.getTranslatedPhrase(Ni)},callback(s,t){let e=t[Math.max(t.length-1,0)];this.alter(\"insert_row\",e.end.row+1,1,\"ContextMenu.rowBelow\")},disabled(){return te(this)?this.selection.isSelectedByColumnHeader()||this.countRows()>=this.getSettings().maxRows:!0},hidden(){return!this.getSettings().allowInsertRow}}}var Io=\"undo\";function mh(){return{key:Io,name(){return this.getTranslatedPhrase(ki)},callback(){this.undo()},disabled(){return this.undoRedo&&!this.undoRedo.isUndoAvailable()}}}var gd=[Do,ko,Ho,Ao,ys,_o,xo,Io,Lo,No,ee,yt],Lp={[yt]:oh,[Do]:dh,[ko]:fh,[Ho]:nh,[Ao]:lh,[ys]:rh,[_o]:uh,[xo]:ch,[Io]:mh,[Lo]:hh,[No]:ah,[ee]:sh};function wd(){let s={};return X(Lp,(t,e)=>{s[e]=t()}),s}var ph=class{constructor(t,e=null){this.hot=t,this.predefinedItems=wd(),this.defaultOrderPattern=e}setPredefinedItems(t){let e={};this.defaultOrderPattern.length=0,X(t,(o,i)=>{let r=\"\";o.name===yt?(e[yt]=o,r=yt):isNaN(parseInt(i,10))?(o.key=o.key===void 0?i:o.key,e[i]=o,r=o.key):(e[o.key]=o,r=o.key),this.defaultOrderPattern.push(r)}),this.predefinedItems=e}getItems(t=null){return xp(t,this.defaultOrderPattern,this.predefinedItems)}};function xp(s=null,t=[],e={}){let o=[],i=s;return i&&i.items?i=i.items:Array.isArray(i)||(i=t),K(i)?X(i,(r,n)=>{let l=e[typeof r==\"string\"?r:n];l||(l=r),K(r)?Ft(l,r):typeof l==\"string\"&&(l={name:l}),l.key===void 0&&(l.key=n),o.push(l)}):v(i,(r,n)=>{let l=e[r];!l&&gd.indexOf(r)>=0||(l||(l={name:r,key:`${n}`}),K(r)&&Ft(l,r),l.key===void 0&&(l.key=n),o.push(l))}),o}var Cd=ph;var gh=class{constructor(t){let e=fe(),o=qt(),i,r,n,l,a,h;this.type=this.getSourceType(t),this.type===\"literal\"?(i=parseInt(t.top,10),n=parseInt(t.left,10),a=t.height||0,h=t.width||0,r=i,l=n,i+=e,n+=o):this.type===\"event\"&&(i=parseInt(lo(t),10),n=parseInt(no(t),10),a=t.target.clientHeight,h=t.target.clientWidth,r=i-e,l=n-o),this.top=i,this.topRelative=r,this.left=n,this.leftRelative=l,this.scrollTop=e,this.scrollLeft=o,this.cellHeight=a,this.cellWidth=h}getSourceType(t){let e=\"literal\";return t instanceof Event&&(e=\"event\"),e}fitsAbove(t){return this.topRelative>=t.offsetHeight}fitsBelow(t,e=window.innerHeight){return this.topRelative+t.offsetHeight<=e}fitsOnRight(t,e=window.innerWidth){return this.leftRelative+this.cellWidth+t.offsetWidth<=e}fitsOnLeft(t){return this.leftRelative>=t.offsetWidth}},yd=gh;var Ed=215,Cr=class s{constructor(t,e){this.hot=t,this.options=e||{parent:null,name:null,className:\"\",keepInViewport:!0,standalone:!1,minWidth:Ed},this.eventManager=new G(this),this.container=this.createContainer(this.options.name),this.hotMenu=null,this.hotSubMenus={},this.parentMenu=this.options.parent||null,this.menuItems=null,this.origOutsideClickDeselects=null,this.keyEvent=!1,this.offset={above:0,below:0,left:0,right:0},this._afterScrollCallback=null,this.registerEvents()}registerEvents(){this.eventManager.addEventListener(document.documentElement,\"mousedown\",t=>this.onDocumentMouseDown(t))}setMenuItems(t){this.menuItems=t}setOffset(t,e=0){this.offset[t]=e}isSubMenu(){return this.parentMenu!==null}open(){this.runLocalHooks(\"beforeOpen\"),this.container.removeAttribute(\"style\"),this.container.style.display=\"block\";let t=Ei(r=>this.openSubMenu(r),300),e=this.options.minWidth||Ed,o=Kt(this.menuItems,r=>hd(r,this.hot));o=ud(o,yt);let i={data:o,colHeaders:!1,autoColumnSize:!0,modifyColWidth(r){return mt(r)&&r<e?e:r},autoRowSize:!1,readOnly:!0,copyPaste:!1,columns:[{data:\"name\",renderer:(r,n,l,a,h,u)=>this.menuItemRenderer(r,n,l,a,h,u)}],renderAllRows:!0,fragmentSelection:\"cell\",disableVisualSelection:\"area\",beforeKeyDown:r=>this.onBeforeKeyDown(r),afterOnCellMouseOver:(r,n)=>{this.isAllSubMenusClosed()?t(n.row):this.openSubMenu(n.row)},rowHeights:r=>o[r].name===yt?1:23};this.origOutsideClickDeselects=this.hot.getSettings().outsideClickDeselects,this.hot.getSettings().outsideClickDeselects=!1,this.hotMenu=new co(this.container,i),this.hotMenu.addHook(\"afterInit\",()=>this.onAfterInit()),this.hotMenu.addHook(\"afterSelection\",(...r)=>this.onAfterSelection(...r)),this.hotMenu.init(),this.hotMenu.listen(),this.blockMainTableCallbacks(),this.runLocalHooks(\"afterOpen\")}close(t=!1){this.isOpened()&&(t&&this.parentMenu?this.parentMenu.close():(this.closeAllSubMenus(),this.container.style.display=\"none\",this.releaseMainTableCallbacks(),this.hotMenu.destroy(),this.hotMenu=null,this.hot.getSettings().outsideClickDeselects=this.origOutsideClickDeselects,this.runLocalHooks(\"afterClose\"),this.parentMenu&&this.parentMenu.hotMenu.listen()))}openSubMenu(t){if(!this.hotMenu)return!1;let e=this.hotMenu.getCell(t,0);if(this.closeAllSubMenus(),!e||!ad(e))return!1;let o=this.hotMenu.getSourceDataAtRow(t),i=new s(this.hot,{parent:this,name:o.name,className:this.options.className,keepInViewport:!0});return i.setMenuItems(o.submenu.items),i.open(),i.setPosition(e.getBoundingClientRect()),this.hotSubMenus[o.key]=i,i}closeSubMenu(t){let e=this.hotMenu.getSourceDataAtRow(t),o=this.hotSubMenus[e.key];o&&(o.destroy(),delete this.hotSubMenus[e.key])}closeAllSubMenus(){v(this.hotMenu.getData(),(t,e)=>this.closeSubMenu(e))}isAllSubMenusClosed(){return Object.keys(this.hotSubMenus).length===0}destroy(){this.clearLocalHooks(),this.close(),this.parentMenu=null,this.eventManager.destroy()}isOpened(){return this.hotMenu!==null}executeCommand(t){if(!this.isOpened()||!this.hotMenu.getSelectedLast())return;let e=this.hotMenu.getSourceDataAtRow(this.hotMenu.getSelectedLast()[0]);if(this.runLocalHooks(\"select\",e,t),e.isCommand===!1||e.name===yt)return;let o=this.hot.getSelectedRange(),i=o?ld(o):[],r=!0;(e.disabled===!0||typeof e.disabled==\"function\"&&e.disabled.call(this.hot)===!0||e.submenu)&&(r=!1),this.runLocalHooks(\"executeCommand\",e.key,i,t),this.isSubMenu()&&this.parentMenu.runLocalHooks(\"executeCommand\",e.key,i,t),r&&this.close(!0)}setPosition(t){let e=new yd(t);this.options.keepInViewport?(e.fitsBelow(this.container)?this.setPositionBelowCursor(e):e.fitsAbove(this.container)?this.setPositionAboveCursor(e):this.setPositionBelowCursor(e),e.fitsOnRight(this.container)?this.setPositionOnRightOfCursor(e):this.setPositionOnLeftOfCursor(e)):(this.setPositionBelowCursor(e),this.setPositionOnRightOfCursor(e))}setPositionAboveCursor(t){let e=this.offset.above+t.top-this.container.offsetHeight;this.isSubMenu()&&(e=t.top+t.cellHeight-this.container.offsetHeight+3),this.container.style.top=`${e}px`}setPositionBelowCursor(t){let e=this.offset.below+t.top;this.isSubMenu()&&(e=t.top-1),this.container.style.top=`${e}px`}setPositionOnRightOfCursor(t){let e;this.isSubMenu()?e=1+t.left+t.cellWidth:e=this.offset.right+1+t.left,this.container.style.left=`${e}px`}setPositionOnLeftOfCursor(t){let e=this.offset.left+t.left-this.container.offsetWidth+at()+4;this.container.style.left=`${e}px`}selectFirstCell(){let t=this.hotMenu.getCell(0,0);gs(t)||ws(t)||Cs(t)?this.selectNextCell(0,0):this.hotMenu.selectCell(0,0)}selectLastCell(){let t=this.hotMenu.countRows()-1,e=this.hotMenu.getCell(t,0);gs(e)||ws(e)||Cs(e)?this.selectPrevCell(t,0):this.hotMenu.selectCell(t,0)}selectNextCell(t,e){let o=t+1,i=o<this.hotMenu.countRows()?this.hotMenu.getCell(o,e):null;i&&(gs(i)||ws(i)||Cs(i)?this.selectNextCell(o,e):this.hotMenu.selectCell(o,e))}selectPrevCell(t,e){let o=t-1,i=o>=0?this.hotMenu.getCell(o,e):null;i&&(gs(i)||ws(i)||Cs(i)?this.selectPrevCell(o,e):this.hotMenu.selectCell(o,e))}menuItemRenderer(t,e,o,i,r,n){let l=t.getSourceDataAtRow(o),a=document.createElement(\"div\"),h=A=>ot(A,\"submenu\"),u=A=>new RegExp(yt,\"i\").test(A.name),m=A=>A.disabled===!0||typeof A.disabled==\"function\"&&A.disabled.call(this.hot)===!0,w=A=>A.disableSelection,R=n;typeof R==\"function\"&&(R=R.call(this.hot)),xt(e),L(a,\"htItemWrapper\"),e.appendChild(a),u(l)?L(e,\"htSeparator\"):typeof l.renderer==\"function\"?(L(e,\"htCustomMenuRenderer\"),e.appendChild(l.renderer(t,a,o,i,r,R))):Te(a,R),m(l)?(L(e,\"htDisabled\"),this.eventManager.addEventListener(e,\"mouseenter\",()=>t.deselectCell())):w(l)?(L(e,\"htSelectionDisabled\"),this.eventManager.addEventListener(e,\"mouseenter\",()=>t.deselectCell())):h(l)?(L(e,\"htSubmenu\"),w(l)?this.eventManager.addEventListener(e,\"mouseenter\",()=>t.deselectCell()):this.eventManager.addEventListener(e,\"mouseenter\",()=>t.selectCell(o,i,void 0,void 0,!1,!1))):(Y(e,\"htSubmenu\"),Y(e,\"htDisabled\"),w(l)?this.eventManager.addEventListener(e,\"mouseenter\",()=>t.deselectCell()):this.eventManager.addEventListener(e,\"mouseenter\",()=>t.selectCell(o,i,void 0,void 0,!1,!1)))}createContainer(t=null){let e=t,o;return e?(At(e)&&(e=e.call(this.hot),e===null||gt(e)?e=\"\":e=e.toString()),e=e.replace(/[^A-z0-9]/g,\"_\"),e=`${this.options.className}Sub_${e}`,o=document.querySelector(`.${this.options.className}.${e}`)):o=document.querySelector(`.${this.options.className}`),o||(o=document.createElement(\"div\"),L(o,`htMenu ${this.options.className}`),e&&L(o,e),document.getElementsByTagName(\"body\")[0].appendChild(o)),o}blockMainTableCallbacks(){this._afterScrollCallback=function(){},this.hot.addHook(\"afterScrollVertically\",this._afterScrollCallback),this.hot.addHook(\"afterScrollHorizontally\",this._afterScrollCallback)}releaseMainTableCallbacks(){this._afterScrollCallback&&(this.hot.removeHook(\"afterScrollVertically\",this._afterScrollCallback),this.hot.removeHook(\"afterScrollHorizontally\",this._afterScrollCallback),this._afterScrollCallback=null)}onBeforeKeyDown(t){let e=this.hotMenu.getSelectedLast(),o=!1;switch(this.keyEvent=!0,t.keyCode){case k.ESCAPE:this.close(),o=!0;break;case k.ENTER:e&&(this.hotMenu.getSourceDataAtRow(e[0]).submenu?o=!0:(this.executeCommand(t),this.close(!0)));break;case k.ARROW_DOWN:e?this.selectNextCell(e[0],e[1]):this.selectFirstCell(),o=!0;break;case k.ARROW_UP:e?this.selectPrevCell(e[0],e[1]):this.selectLastCell(),o=!0;break;case k.ARROW_RIGHT:if(e){let i=this.openSubMenu(e[0]);i&&i.selectFirstCell()}o=!0;break;case k.ARROW_LEFT:e&&this.isSubMenu()&&(this.close(),this.parentMenu&&this.parentMenu.hotMenu.listen(),o=!0);break;default:break}o&&(t.preventDefault(),pt(t)),this.keyEvent=!1}onAfterInit(){let t=this.hotMenu.getSettings().data,e=this.hotMenu.view.wt.wtTable.hider.style,o=this.hotMenu.view.wt.wtTable.holder.style,i=parseInt(e.width,10),r=Tt(t,(n,l)=>n+(l.name===yt?1:26),0);o.width=`${i+22}px`,o.height=`${r+4}px`,e.height=o.height}onAfterSelection(t,e,o,i,r){this.keyEvent===!1&&(r.value=!0)}onDocumentMouseDown(t){this.isOpened()&&(this.container&&se(t.target,this.container)&&this.executeCommand(t),this.options.standalone&&this.hotMenu&&!se(t.target,this.hotMenu.rootElement)?this.close(!0):(this.isAllSubMenusClosed()||this.isSubMenu())&&!se(t.target,\".htMenu\")&&se(t.target,document)&&this.close(!0))}};Lt(Cr,ge);var Sd=Cr;V.getSingleton().register(\"afterContextMenuDefaultOptions\");V.getSingleton().register(\"beforeContextMenuShow\");V.getSingleton().register(\"afterContextMenuShow\");V.getSingleton().register(\"afterContextMenuHide\");V.getSingleton().register(\"afterContextMenuExecute\");var Es=class s extends Z{static get DEFAULT_ITEMS(){return[Do,ko,yt,Ho,Ao,yt,_o,xo,yt,Io,Lo,yt,No,yt,ee]}constructor(t){super(t),this.eventManager=new G(this),this.commandExecutor=new pd(this.hot),this.itemsFactory=null,this.menu=null}isEnabled(){return this.hot.getSettings().contextMenu}enablePlugin(){if(this.enabled)return;this.itemsFactory=new Cd(this.hot,s.DEFAULT_ITEMS);let t=this.hot.getSettings().contextMenu,e={items:this.itemsFactory.getItems(t)};typeof t.callback==\"function\"&&this.commandExecutor.setCommonCallback(t.callback),super.enablePlugin();let o=()=>{if(!this.hot)return;this.hot.runHooks(\"afterContextMenuDefaultOptions\",e),this.itemsFactory.setPredefinedItems(e.items);let i=this.itemsFactory.getItems(t);this.menu=new Sd(this.hot,{className:\"htContextMenu\",keepInViewport:!0}),this.hot.runHooks(\"beforeContextMenuSetItems\",i),this.menu.setMenuItems(i),this.menu.addLocalHook(\"beforeOpen\",()=>this.onMenuBeforeOpen()),this.menu.addLocalHook(\"afterOpen\",()=>this.onMenuAfterOpen()),this.menu.addLocalHook(\"afterClose\",()=>this.onMenuAfterClose()),this.menu.addLocalHook(\"executeCommand\",(...r)=>this.executeCommand.call(this,...r)),this.addHook(\"afterOnCellContextMenu\",r=>this.onAfterOnCellContextMenu(r)),v(i,r=>this.commandExecutor.registerCommand(r.key,r))};this.callOnPluginsReady(()=>{this.isPluginsReady?setTimeout(o,0):o()})}updatePlugin(){this.disablePlugin(),this.enablePlugin(),super.updatePlugin()}disablePlugin(){this.close(),this.menu&&(this.menu.destroy(),this.menu=null),super.disablePlugin()}open(t){this.menu&&(this.menu.open(),this.menu.setPosition({top:parseInt(lo(t),10)-fe(),left:parseInt(no(t),10)-qt()}),this.menu.hotMenu.isHotTableEnv=this.hot.isHotTableEnv)}close(){this.menu&&this.menu.close()}executeCommand(t,...e){this.commandExecutor.execute(t,...e)}onAfterOnCellContextMenu(t){let e=this.hot.getSettings(),o=e.rowHeaders,i=e.colHeaders;function r(l){return l.nodeName===\"TD\"||l.parentNode.nodeName===\"TD\"}let n=t.realTarget;this.close(),!z(n,\"handsontableInput\")&&(t.preventDefault(),bt(t),!(!(o||i)&&!r(n)&&!(z(n,\"current\")&&z(n,\"wtBorder\")))&&this.open(t))}onMenuBeforeOpen(){this.hot.runHooks(\"beforeContextMenuShow\",this)}onMenuAfterOpen(){this.hot.runHooks(\"afterContextMenuShow\",this)}onMenuAfterClose(){this.hot.listen(),this.hot.runHooks(\"afterContextMenuHide\",this)}destroy(){this.close(),this.menu&&this.menu.destroy(),super.destroy()}};Es.SEPARATOR={name:yt};J(\"contextMenu\",Es);var Rd=Es;var vs=Wo(Ml());function wh(s){return{key:\"copy\",name(){return this.getTranslatedPhrase(Wi)},callback(){s.copy()},disabled(){let t=this.getSelected();return!t||t.length>1},hidden:!1}}function Ch(s){return{key:\"cut\",name(){return this.getTranslatedPhrase(Fi)},callback(){s.cut()},disabled(){let t=this.getSelected();return!t||t.length>1},hidden:!1}}var Ss=class{constructor(){this.data={}}setData(t,e){this.data[t]=e}getData(t){return this.data[t]||void 0}};var Rs=class{constructor(){this.clipboardData=new Ss}};var bs=class{constructor(){this.mainElement=null,this.eventManager=new G(this),this.listenersCount=new WeakSet}useSecondaryElement(){let t=Dp();this.listenersCount.has(t)||(this.listenersCount.add(t),Td(this.eventManager,t,this)),this.mainElement=t}setFocusableElement(t){this.listenersCount.has(t)||(this.listenersCount.add(t),Td(this.eventManager,t,this)),this.mainElement=t}getFocusableElement(){return this.mainElement}focus(){this.mainElement.value=\" \",$t()||this.mainElement.select()}};Lt(bs,ge);var Ts=0;function bd(){let s=new bs;return Ts+=1,s}function _p(s){s.eventManager.clear()}var yh=(s,t)=>e=>t.runLocalHooks(s,e);function Td(s,t,e){s.addEventListener(t,\"copy\",yh(\"copy\",e)),s.addEventListener(t,\"cut\",yh(\"cut\",e)),s.addEventListener(t,\"paste\",yh(\"paste\",e))}var Ue;function Dp(){if(Ue)return Ue.parentElement||document.body.appendChild(Ue),Ue;let s=document.createElement(\"textarea\");return Ue=s,s.id=\"HandsontableCopyPaste\",s.className=\"copyPaste\",s.tabIndex=-1,s.autocomplete=\"off\",s.wrap=\"hard\",s.value=\" \",document.body.appendChild(s),s}function Eh(s){s instanceof bs&&(Ts>0&&(Ts-=1),_p(s),Ts<=0&&(Ts=0,Ue&&Ue.parentNode&&(Ue.parentNode.removeChild(Ue),Ue=null),s.mainElement=null))}function Sh(s){let t=s.length,e=[\"<table>\"],o=document.createElement(\"div\");document.documentElement.appendChild(o);for(let i=0;i<t;i+=1){let r=s[i],n=r.length,l=[];i===0&&e.push(\"<tbody>\");for(let a=0;a<n;a+=1)o.innerText=`${Bt(r[a])?\"\":r[a]}`,l.push(`<td>${o.innerHTML}</td>`);e.push(\"<tr>\",...l,\"</tr>\"),i+1===t&&e.push(\"</tbody>\")}return document.documentElement.removeChild(o),e.push(\"</table>\"),e.join(\"\")}function kp(s){return(s&&s.nodeName||\"\").toLowerCase()===\"table\"}function vd(s){let t=[],e=s;if(typeof e==\"string\"){let o=document.createElement(\"div\");o.innerHTML=e.replace(/\\n/g,\"\"),e=o.querySelector(\"table\")}if(e&&kp(e)){let o=e.rows,i=o&&o.length,r=[];for(let n=0;n<i;n+=1){let l=o[n].cells,a=l.length,h=[];for(let u=0;u<a;u+=1){let m=l[u];m.innerHTML=m.innerHTML.trim().replace(/<br(.|)>(\\n?)/,`\n`);let w=m.innerText;h.push(w)}r.push(h)}t.push(...r)}return t}V.getSingleton().register(\"afterCopyLimit\");V.getSingleton().register(\"modifyCopyableRange\");V.getSingleton().register(\"beforeCut\");V.getSingleton().register(\"afterCut\");V.getSingleton().register(\"beforePaste\");V.getSingleton().register(\"afterPaste\");V.getSingleton().register(\"beforeCopy\");V.getSingleton().register(\"afterCopy\");var Ip=1e3,Pp=1e3,Po=new WeakMap,yr=class extends Z{constructor(t){super(t),this.columnsLimit=Pp,this.copyableRanges=[],this.pasteMode=\"overwrite\",this.rowsLimit=Ip,Po.set(this,{isTriggeredByCopy:!1,isTriggeredByCut:!1,isBeginEditing:!1,isFragmentSelectionEnabled:!1})}isEnabled(){return!!this.hot.getSettings().copyPaste}enablePlugin(){if(this.enabled)return;let t=this.hot.getSettings(),e=Po.get(this);e.isFragmentSelectionEnabled=t.fragmentSelection,typeof t.copyPaste==\"object\"&&(this.pasteMode=t.copyPaste.pasteMode||this.pasteMode,this.rowsLimit=t.copyPaste.rowsLimit||this.rowsLimit,this.columnsLimit=t.copyPaste.columnsLimit||this.columnsLimit),this.addHook(\"afterContextMenuDefaultOptions\",o=>this.onAfterContextMenuDefaultOptions(o)),this.addHook(\"afterOnCellMouseUp\",()=>this.onAfterOnCellMouseUp()),this.addHook(\"afterSelectionEnd\",()=>this.onAfterSelectionEnd()),this.addHook(\"beforeKeyDown\",()=>this.onBeforeKeyDown()),this.focusableElement=bd(),this.focusableElement.addLocalHook(\"copy\",o=>this.onCopy(o)).addLocalHook(\"cut\",o=>this.onCut(o)).addLocalHook(\"paste\",o=>this.onPaste(o)),super.enablePlugin()}updatePlugin(){this.disablePlugin(),this.enablePlugin(),this.getOrCreateFocusableElement(),super.updatePlugin()}disablePlugin(){this.focusableElement&&Eh(this.focusableElement),super.disablePlugin()}copy(){let t=Po.get(this);t.isTriggeredByCopy=!0,this.getOrCreateFocusableElement(),this.focusableElement.focus(),document.execCommand(\"copy\")}cut(){let t=Po.get(this);t.isTriggeredByCut=!0,this.getOrCreateFocusableElement(),this.focusableElement.focus(),document.execCommand(\"cut\")}getRangedCopyableData(t){let e=[],o=[],i=[];return v(t,r=>{P(r.startRow,r.endRow,n=>{o.indexOf(n)===-1&&o.push(n)}),P(r.startCol,r.endCol,n=>{i.indexOf(n)===-1&&i.push(n)})}),v(o,r=>{let n=[];v(i,l=>{n.push(this.hot.getCopyableData(r,l))}),e.push(n)}),vs.default.stringify(e)}getRangedData(t){let e=[],o=[],i=[];return v(t,r=>{P(r.startRow,r.endRow,n=>{o.indexOf(n)===-1&&o.push(n)}),P(r.startCol,r.endCol,n=>{i.indexOf(n)===-1&&i.push(n)})}),v(o,r=>{let n=[];v(i,l=>{n.push(this.hot.getCopyableData(r,l))}),e.push(n)}),e}paste(t=\"\",e=t){if(!t&&!e)return;let o=new Rs;t&&o.clipboardData.setData(\"text/plain\",t),e&&o.clipboardData.setData(\"text/html\",e),this.getOrCreateFocusableElement(),this.onPaste(o)}setCopyableText(){let t=this.hot.getSelectedRangeLast();if(!t)return;let e=t.getTopLeftCorner(),o=t.getBottomRightCorner(),i=e.row,r=e.col,n=o.row,l=o.col,a=Math.min(n,i+this.rowsLimit-1),h=Math.min(l,r+this.columnsLimit-1);this.copyableRanges.length=0,this.copyableRanges.push({startRow:i,startCol:r,endRow:a,endCol:h}),this.copyableRanges=this.hot.runHooks(\"modifyCopyableRange\",this.copyableRanges),(n!==a||l!==h)&&this.hot.runHooks(\"afterCopyLimit\",n-i+1,l-r+1,this.rowsLimit,this.columnsLimit)}getOrCreateFocusableElement(){let t=this.hot.getActiveEditor(),e=t?t.TEXTAREA:void 0;e?this.focusableElement.setFocusableElement(e):this.focusableElement.useSecondaryElement()}isEditorOpened(){let t=this.hot.getActiveEditor();return t&&t.isOpened()}populateValues(t,e=this.hot.getSelectedLast()){if(!t.length)return;let o=t.length-1,i=t[0].length-1,r=Math.min(e[0],e[2]),n=Math.max(e[0],e[2],o+r),l=Math.min(e[1],e[3]),a=Math.max(e[1],e[3],i+l),h=[];for(let u=r,m=0;u<=n;u+=1){let w=[];for(let R=l,A=0;R<=a;R+=1)w.push(t[m][A]),A=A===i?0:A+=1;h.push(w),m=m===o?0:m+=1}return this.hot.populateFromArray(r,l,h,void 0,void 0,\"CopyPaste.paste\",this.pasteMode),[r,l,n,a]}onCopy(t){let e=Po.get(this);if(!this.hot.isListening()&&!e.isTriggeredByCopy||this.isEditorOpened())return;this.setCopyableText(),e.isTriggeredByCopy=!1;let o=this.getRangedData(this.copyableRanges);if(!!this.hot.runHooks(\"beforeCopy\",o,this.copyableRanges)){let r=vs.default.stringify(o);if(t&&t.clipboardData){let n=Sh(o);t.clipboardData.setData(\"text/plain\",r),t.clipboardData.setData(\"text/html\",n)}else typeof ClipboardEvent>\"u\"&&window.clipboardData.setData(\"Text\",r);this.hot.runHooks(\"afterCopy\",o,this.copyableRanges)}t.preventDefault()}onCut(t){let e=Po.get(this);if(!this.hot.isListening()&&!e.isTriggeredByCut||this.isEditorOpened())return;this.setCopyableText(),e.isTriggeredByCut=!1;let o=this.getRangedData(this.copyableRanges);if(!!this.hot.runHooks(\"beforeCut\",o,this.copyableRanges)){let r=vs.default.stringify(o);if(t&&t.clipboardData){let n=Sh(o);t.clipboardData.setData(\"text/plain\",r),t.clipboardData.setData(\"text/html\",n)}else typeof ClipboardEvent>\"u\"&&window.clipboardData.setData(\"Text\",r);this.hot.emptySelectedCells(),this.hot.runHooks(\"afterCut\",o,this.copyableRanges)}t.preventDefault()}onPaste(t){if(!this.hot.isListening()||this.isEditorOpened())return;t&&t.preventDefault&&t.preventDefault();let e;if(t&&typeof t.clipboardData<\"u\"){let a=t.clipboardData.getData(\"text/html\");a&&/(<table)|(<TABLE)/.test(a)?e=vd(a):e=t.clipboardData.getData(\"text/plain\")}else typeof ClipboardEvent>\"u\"&&typeof window.clipboardData<\"u\"&&(e=window.clipboardData.getData(\"Text\"));let o=typeof e!=\"string\"?e:vs.default.parse(e);if(o.length===0||this.hot.runHooks(\"beforePaste\",o,this.copyableRanges)===!1)return;let[i,r,n,l]=this.populateValues(o);this.hot.selectCell(i,r,Math.min(this.hot.countRows()-1,n),Math.min(this.hot.countCols()-1,l)),this.hot.runHooks(\"afterPaste\",o,this.copyableRanges)}onAfterContextMenuDefaultOptions(t){t.items.push({name:\"---------\"},wh(this),Ch(this))}onAfterOnCellMouseUp(){!this.hot.isListening()||this.isEditorOpened()||(this.getOrCreateFocusableElement(),this.focusableElement.focus())}onAfterSelectionEnd(){let{isFragmentSelectionEnabled:t}=Po.get(this);this.isEditorOpened()||(this.getOrCreateFocusableElement(),!(t&&this.focusableElement.getFocusableElement()!==document.activeElement&&On())&&(this.setCopyableText(),this.focusableElement.focus()))}onBeforeKeyDown(){if(!this.hot.isListening()||this.isEditorOpened())return;let t=document.activeElement,e=this.hot.getActiveEditor();!e||t!==this.focusableElement.getFocusableElement()&&t!==e.select||(this.getOrCreateFocusableElement(),this.focusableElement.focus())}destroy(){this.focusableElement&&(Eh(this.focusableElement),this.focusableElement=null),super.destroy()}};J(\"CopyPaste\",yr);var Od=yr;function Rh(s,t){return`border_row${s}col${t}`}function ei(){return{width:1,color:\"#000\"}}function ze(){return{hide:!0}}function Bp(){return{width:1,color:\"#000\",cornerVisible:!1}}function Er(s,t){return{id:Rh(s,t),border:Bp(),row:s,col:t,top:ze(),right:ze(),bottom:ze(),left:ze()}}function Md(s,t){return ot(t,\"border\")&&(s.border=t.border),ot(t,\"top\")&&(t.top?(K(t.top)||(t.top=ei()),s.top=t.top):(t.top=ze(),s.top=t.top)),ot(t,\"right\")&&(t.right?(K(t.right)||(t.right=ei()),s.right=t.right):(t.right=ze(),s.right=t.right)),ot(t,\"bottom\")&&(t.bottom?(K(t.bottom)||(t.bottom=ei()),s.bottom=t.bottom):(t.bottom=ze(),s.bottom=t.bottom)),ot(t,\"left\")&&(t.left?(K(t.left)||(t.left=ei()),s.left=t.left):(t.left=ze(),s.left=t.left)),s}function oe(s,t){let e=!1;return v(s.getSelectedRange(),o=>{o.forAll((i,r)=>{let n=s.getCellMeta(i,r).borders;if(n)if(t){if(!ot(n[t],\"hide\")||n[t].hide===!1)return e=!0,!1}else return e=!0,!1})}),e}function po(s){return`<span class=\"selected\">\\u2713</span>${s}`}function Sr(s){return{key:\"borders:bottom\",name(){let t=this.getTranslatedPhrase(ns);return oe(this,\"bottom\")&&(t=po(t)),t},callback(t,e){let o=oe(this,\"bottom\");s.prepareBorder(e,\"bottom\",o)}}}function Rr(s){return{key:\"borders:left\",name(){let t=this.getTranslatedPhrase(ls);return oe(this,\"left\")&&(t=po(t)),t},callback(t,e){let o=oe(this,\"left\");s.prepareBorder(e,\"left\",o)}}}function Tr(s){return{key:\"borders:no_borders\",name(){return this.getTranslatedPhrase(as)},callback(t,e){s.prepareBorder(e,\"noBorders\")},disabled(){return!oe(this)}}}function br(s){return{key:\"borders:right\",name(){let t=this.getTranslatedPhrase(rs);return oe(this,\"right\")&&(t=po(t)),t},callback(t,e){let o=oe(this,\"right\");s.prepareBorder(e,\"right\",o)}}}function vr(s){return{key:\"borders:top\",name(){let t=this.getTranslatedPhrase(ss);return oe(this,\"top\")&&(t=po(t)),t},callback(t,e){let o=oe(this,\"top\");s.prepareBorder(e,\"top\",o)}}}var Or=class extends Z{constructor(t){super(t),this.savedBorders=[]}isEnabled(){return!!this.hot.getSettings().customBorders}enablePlugin(){this.enabled||(this.addHook(\"afterContextMenuDefaultOptions\",t=>this.onAfterContextMenuDefaultOptions(t)),this.addHook(\"afterInit\",()=>this.onAfterInit()),super.enablePlugin())}disablePlugin(){this.hideBorders(),super.disablePlugin()}updatePlugin(){this.disablePlugin(),this.enablePlugin(),this.changeBorderSettings(),super.updatePlugin()}setBorders(t,e){let i=e?Object.keys(e):[\"top\",\"right\",\"bottom\",\"left\"],r=Qe(t),n=fo(r);v(t,l=>{let[a,h,u,m]=n(l);for(let w=a;w<=u;w+=1)for(let R=h;R<=m;R+=1)v(i,A=>{this.prepareBorderFromCustomAdded(w,R,e,A)})})}getBorders(t){if(!Array.isArray(t))return this.savedBorders;let e=Qe(t),o=fo(e),i=[];return v(t,r=>{let[n,l,a,h]=o(r);for(let u=n;u<=a;u+=1)for(let m=l;m<=h;m+=1)v(this.savedBorders,w=>{w.row===u&&w.col===m&&i.push(w)})}),i}clearBorders(t){t?this.setBorders(t):(v(this.savedBorders,e=>{this.clearBordersFromSelectionSettings(e.id),this.clearNullCellRange(),this.hot.removeCellMeta(e.row,e.col,\"borders\")}),this.savedBorders.length=0)}insertBorderIntoSettings(t,e){this.checkSavedBorders(t)||this.savedBorders.push(t);let i={row:t.row,col:t.col},r=new Ct(i,i,i);this.checkCustomSelections(t,r,e)||(this.hot.selection.highlight.addCustomSelection({border:t,cellRange:r}),this.hot.view.wt.draw(!0))}prepareBorderFromCustomAdded(t,e,o,i){let r=Er(t,e);o&&(r=Md(r,o),v(this.hot.selection.highlight.customSelections,n=>{if(r.id===n.settings.id)return Object.assign(n.settings,o),r=n.settings,!1})),this.hot.setCellMeta(t,e,\"borders\",r),this.insertBorderIntoSettings(r,i)}prepareBorderFromCustomAddedRange(t){let e=t.range;P(e.from.row,e.to.row,o=>{P(e.from.col,e.to.col,i=>{let r=Er(o,i),n=0;o===e.from.row&&(n+=1,ot(t,\"top\")&&(r.top=t.top)),o===e.to.row&&(n+=1,ot(t,\"bottom\")&&(r.bottom=t.bottom)),i===e.from.col&&(n+=1,ot(t,\"left\")&&(r.left=t.left)),i===e.to.col&&(n+=1,ot(t,\"right\")&&(r.right=t.right)),n>0&&(this.hot.setCellMeta(o,i,\"borders\",r),this.insertBorderIntoSettings(r))})})}removeAllBorders(t,e){let o=Rh(t,e);this.spliceBorder(o),this.clearBordersFromSelectionSettings(o),this.clearNullCellRange(),this.hot.removeCellMeta(t,e,\"borders\")}setBorder(t,e,o,i){let r=this.hot.getCellMeta(t,e).borders;(!r||r.border===void 0)&&(r=Er(t,e)),i?(r[o]=ze(),this.countHide(r)===4?this.removeAllBorders(t,e):(this.checkCustomSelectionsFromContextMenu(r,o,i)||this.insertBorderIntoSettings(r),this.hot.setCellMeta(t,e,\"borders\",r))):(r[o]=ei(),this.checkCustomSelectionsFromContextMenu(r,o,i)||this.insertBorderIntoSettings(r),this.hot.setCellMeta(t,e,\"borders\",r))}prepareBorder(t,e,o){v(t,({start:i,end:r})=>{if(i.row===r.row&&i.col===r.col)e===\"noBorders\"?this.removeAllBorders(i.row,i.col):this.setBorder(i.row,i.col,e,o);else switch(e){case\"noBorders\":P(i.col,r.col,n=>{P(i.row,r.row,l=>{this.removeAllBorders(l,n)})});break;case\"top\":P(i.col,r.col,n=>{this.setBorder(i.row,n,e,o)});break;case\"right\":P(i.row,r.row,n=>{this.setBorder(n,r.col,e,o)});break;case\"bottom\":P(i.col,r.col,n=>{this.setBorder(r.row,n,e,o)});break;case\"left\":P(i.row,r.row,n=>{this.setBorder(n,i.col,e,o)});break;default:break}})}createCustomBorders(t){v(t,e=>{e.range?this.prepareBorderFromCustomAddedRange(e):this.prepareBorderFromCustomAdded(e.row,e.col,e)})}countHide(t){let e=Object.values(t);return Tt(e,(o,i)=>{let r=o;return i.hide&&(r+=1),r},0)}clearBordersFromSelectionSettings(t){let e=ht(this.hot.selection.highlight.customSelections,o=>o.settings.id).indexOf(t);e>-1&&this.hot.selection.highlight.customSelections[e].clear(),this.hot.view.wt.draw(!0)}clearNullCellRange(){v(this.hot.selection.highlight.customSelections,(t,e)=>{if(t.cellRange===null)return this.hot.selection.highlight.customSelections.splice(e,1),!1})}hideBorders(){v(this.savedBorders,t=>{this.clearBordersFromSelectionSettings(t.id)})}spliceBorder(t){let e=ht(this.savedBorders,o=>o.id).indexOf(t);e>-1&&this.savedBorders.splice(e,1)}checkSavedBorders(t){let e=!1;return this.countHide(t)===4?(this.spliceBorder(t.id),e=!0):v(this.savedBorders,(i,r)=>{if(t.id===i.id)return this.savedBorders[r]=t,e=!0,!1}),e}checkCustomSelectionsFromContextMenu(t,e,o){let i=!1;return v(this.hot.selection.highlight.customSelections,r=>{if(t.id===r.settings.id)return X(r.instanceBorders,n=>{n.toggleHiddenClass(e,o)}),i=!0,!1}),i}checkCustomSelections(t,e,o){let i=this.countHide(t),r=!1;return i===4?(this.removeAllBorders(t.row,t.col),this.clearBordersFromSelectionSettings(t.id),this.clearNullCellRange(),r=!0):v(this.hot.selection.highlight.customSelections,n=>{if(t.id===n.settings.id)return n.cellRange=e,o&&X(n.instanceBorders,l=>{l.changeBorderStyle(o,t)}),r=!0,!1}),r}changeBorderSettings(){let t=this.hot.getSettings().customBorders;Array.isArray(t)?(t.length||(this.savedBorders=t),this.createCustomBorders(t)):t!==void 0&&this.createCustomBorders(this.savedBorders)}onAfterContextMenuDefaultOptions(t){this.hot.getSettings().customBorders&&t.items.push({name:\"---------\"},{key:\"borders\",name(){return this.getTranslatedPhrase(is)},disabled(){return this.selection.isSelectedByCorner()},submenu:{items:[vr(this),br(this),Sr(this),Rr(this),Tr(this)]}})}onAfterInit(){this.changeBorderSettings()}destroy(){super.destroy()}};J(\"customBorders\",Or);var Hd=Or;var Mr=class extends Z{constructor(t){super(t),this.eventManager=new G(this),this.boundaries=null,this.callback=null,this.listening=!1}isEnabled(){return!!this.hot.getSettings().dragToScroll}enablePlugin(){this.enabled||(this.addHook(\"afterOnCellMouseDown\",()=>this.setupListening()),this.addHook(\"afterOnCellCornerMouseDown\",()=>this.setupListening()),this.registerEvents(),super.enablePlugin())}updatePlugin(){this.disablePlugin(),this.enablePlugin(),super.updatePlugin()}disablePlugin(){this.unregisterEvents(),super.disablePlugin()}setBoundaries(t){this.boundaries=t}setCallback(t){this.callback=t}check(t,e){let o=0,i=0;e<this.boundaries.top?i=e-this.boundaries.top:e>this.boundaries.bottom&&(i=e-this.boundaries.bottom),t<this.boundaries.left?o=t-this.boundaries.left:t>this.boundaries.right&&(o=t-this.boundaries.right),this.callback(o,i)}registerEvents(){this.eventManager.addEventListener(document,\"mouseup\",()=>this.onMouseUp()),this.eventManager.addEventListener(document,\"mousemove\",t=>this.onMouseMove(t))}unregisterEvents(){this.eventManager.clear()}setupListening(){let t=this.hot.view.wt.wtTable.holder;t!==window&&(this.setBoundaries(t.getBoundingClientRect()),this.setCallback((e,o)=>{e<0?t.scrollLeft-=50:e>0&&(t.scrollLeft+=50),o<0?t.scrollTop-=20:o>0&&(t.scrollTop+=20)}),this.listening=!0)}onMouseMove(t){this.listening&&this.check(t.clientX,t.clientY)}onMouseUp(){this.listening=!1}destroy(){super.destroy()}};J(\"dragToScroll\",Mr);var Ad=Mr;function Th(s){return{key:\"freeze_column\",name(){return this.getTranslatedPhrase(Vi)},callback(t,e){let[{start:{col:o}}]=e;s.freezeColumn(o),this.render(),this.view.wt.wtOverlays.adjustElementsSize(!0)},hidden(){let t=this.getSelectedRange(),e=!1;return(t===void 0||t.length>1||t[0].from.col!==t[0].to.col||t[0].from.col<=this.getSettings().fixedColumnsLeft-1)&&(e=!0),e}}}function bh(s){return{key:\"unfreeze_column\",name(){return this.getTranslatedPhrase(Ui)},callback(t,e){let[{start:{col:o}}]=e;s.unfreezeColumn(o),this.render(),this.view.wt.wtOverlays.adjustElementsSize(!0)},hidden(){let t=this.getSelectedRange(),e=!1;return(t===void 0||t.length>1||t[0].from.col!==t[0].to.col||t[0].from.col>=this.getSettings().fixedColumnsLeft)&&(e=!0),e}}}var Os=new WeakMap,Hr=class extends Z{constructor(t){super(t),Os.set(this,{moveByFreeze:!1,afterFirstUse:!1}),this.frozenColumnsBasePositions=[],this.manualColumnMovePlugin=void 0}isEnabled(){return!!this.hot.getSettings().manualColumnFreeze}enablePlugin(){this.enabled||(this.addHook(\"afterContextMenuDefaultOptions\",t=>this.addContextMenuEntry(t)),this.addHook(\"afterInit\",()=>this.onAfterInit()),this.addHook(\"beforeColumnMove\",(t,e)=>this.onBeforeColumnMove(t,e)),super.enablePlugin())}disablePlugin(){let t=Os.get(this);t.afterFirstUse=!1,t.moveByFreeze=!1,super.disablePlugin()}updatePlugin(){this.disablePlugin(),this.enablePlugin(),super.updatePlugin()}freezeColumn(t){let e=Os.get(this),o=this.hot.getSettings();e.afterFirstUse||(e.afterFirstUse=!0),!(o.fixedColumnsLeft===this.hot.countCols()||t<=o.fixedColumnsLeft-1)&&(e.moveByFreeze=!0,t!==this.getMovePlugin().columnsMapper.getValueByIndex(t)&&(this.frozenColumnsBasePositions[o.fixedColumnsLeft]=t),this.getMovePlugin().moveColumn(t,o.fixedColumnsLeft),o.fixedColumnsLeft+=1)}unfreezeColumn(t){let e=Os.get(this),o=this.hot.getSettings();if(e.afterFirstUse||(e.afterFirstUse=!0),o.fixedColumnsLeft<=0||t>o.fixedColumnsLeft-1)return;let i=this.getBestColumnReturnPosition(t);e.moveByFreeze=!0,o.fixedColumnsLeft-=1,this.getMovePlugin().moveColumn(t,i+1)}getMovePlugin(){return this.manualColumnMovePlugin||(this.manualColumnMovePlugin=this.hot.getPlugin(\"manualColumnMove\")),this.manualColumnMovePlugin}getBestColumnReturnPosition(t){let e=this.getMovePlugin(),i=this.hot.getSettings().fixedColumnsLeft,r=e.columnsMapper.getValueByIndex(i),n;if(this.frozenColumnsBasePositions[t]===null||this.frozenColumnsBasePositions[t]===void 0)for(n=e.columnsMapper.getValueByIndex(t);r!==null&&r<=n;)i+=1,r=e.columnsMapper.getValueByIndex(i);else{for(n=this.frozenColumnsBasePositions[t],this.frozenColumnsBasePositions[t]=void 0;r!==null&&r<=n;)i+=1,r=e.columnsMapper.getValueByIndex(i);i=r}return i-1}addContextMenuEntry(t){t.items.push({name:\"---------\"},Th(this),bh(this))}onAfterInit(){this.getMovePlugin().isEnabled()||this.getMovePlugin().enablePlugin()}onBeforeColumnMove(t,e){let o=Os.get(this);if(o.afterFirstUse&&!o.moveByFreeze){let i=this.hot.getSettings().fixedColumnsLeft,r=e<i;if(r||v(t,n=>{if(n<i)return r=!0,!1}),r)return!1}o.moveByFreeze&&(o.moveByFreeze=!1)}destroy(){super.destroy()}};J(\"manualColumnFreeze\",Hr);var Nd=Hr;var Ar=class{constructor(t){this.manualColumnMove=t}createMap(t){let e=t===void 0?this._arrayMap.length:t;this._arrayMap.length=0,P(e-1,o=>{this._arrayMap[o]=o})}destroy(){this._arrayMap=null}moveColumn(t,e){let o=this._arrayMap[t];this._arrayMap[t]=null,this._arrayMap.splice(e,0,o)}clearNull(){this._arrayMap=Kt(this._arrayMap,t=>t!==null)}};Lt(Ar,Zo);var Ld=Ar;var xd=0,_d=1,Dd=2,oi=\"px\",vh=class{constructor(t){this.hot=t,this._element=null,this.state=xd}appendTo(t){t.appendChild(this._element),this.state=Dd}build(){this._element=document.createElement(\"div\"),this.state=_d}destroy(){this.isAppended()&&this._element.parentElement.removeChild(this._element),this._element=null,this.state=xd}isAppended(){return this.state===Dd}isBuilt(){return this.state>=_d}setPosition(t,e){me(t)&&(this._element.style.top=t+oi),me(e)&&(this._element.style.left=e+oi)}getPosition(){return{top:this._element.style.top?parseInt(this._element.style.top,10):0,left:this._element.style.left?parseInt(this._element.style.left,10):0}}setSize(t,e){me(t)&&(this._element.style.width=t+oi),me(e)&&(this._element.style.height=e+oi)}getSize(){return{width:this._element.style.width?parseInt(this._element.style.width,10):0,height:this._element.style.height?parseInt(this._element.style.height,10):0}}setOffset(t,e){me(t)&&(this._element.style.marginTop=t+oi),me(e)&&(this._element.style.marginLeft=e+oi)}getOffset(){return{top:this._element.style.marginTop?parseInt(this._element.style.marginTop,10):0,left:this._element.style.marginLeft?parseInt(this._element.style.marginLeft,10):0}}},Nr=vh;var Wp=\"ht__manualColumnMove--backlight\",Oh=class extends Nr{build(){super.build(),L(this._element,Wp)}},kd=Oh;var Fp=\"ht__manualColumnMove--guideline\",Mh=class extends Nr{build(){super.build(),L(this._element,Fp)}},Id=Mh;V.getSingleton().register(\"beforeColumnMove\");V.getSingleton().register(\"afterColumnMove\");V.getSingleton().register(\"unmodifyCol\");var Bo=new WeakMap,Pd=\"ht__manualColumnMove\",Lr=\"show-ui\",Hh=\"on-moving--columns\",Ah=\"after-selection--columns\",xr=class extends Z{constructor(t){super(t),Bo.set(this,{columnsToMove:[],countCols:0,fixedColumns:0,pressed:void 0,disallowMoving:void 0,target:{eventPageX:void 0,coords:void 0,TD:void 0,col:void 0}}),this.removedColumns=[],this.columnsMapper=new Ld(this),this.eventManager=new G(this),this.backlight=new kd(t),this.guideline=new Id(t)}isEnabled(){return!!this.hot.getSettings().manualColumnMove}enablePlugin(){this.enabled||(this.addHook(\"beforeOnCellMouseDown\",(t,e,o,i)=>this.onBeforeOnCellMouseDown(t,e,o,i)),this.addHook(\"beforeOnCellMouseOver\",(t,e,o,i)=>this.onBeforeOnCellMouseOver(t,e,o,i)),this.addHook(\"afterScrollVertically\",()=>this.onAfterScrollVertically()),this.addHook(\"modifyCol\",(t,e)=>this.onModifyCol(t,e)),this.addHook(\"beforeRemoveCol\",(t,e)=>this.onBeforeRemoveCol(t,e)),this.addHook(\"afterRemoveCol\",()=>this.onAfterRemoveCol()),this.addHook(\"afterCreateCol\",(t,e)=>this.onAfterCreateCol(t,e)),this.addHook(\"afterLoadData\",()=>this.onAfterLoadData()),this.addHook(\"unmodifyCol\",t=>this.onUnmodifyCol(t)),this.registerEvents(),L(this.hot.rootElement,Pd),super.enablePlugin())}updatePlugin(){this.disablePlugin(),this.enablePlugin(),this.onAfterPluginsInitialized(),super.updatePlugin()}disablePlugin(){let t=this.hot.getSettings().manualColumnMove;Array.isArray(t)&&this.columnsMapper.clearMap(),Y(this.hot.rootElement,Pd),this.unregisterEvents(),this.backlight.destroy(),this.guideline.destroy(),super.disablePlugin()}moveColumn(t,e){this.moveColumns([t],e)}moveColumns(t,e){let o=[...t],i=Bo.get(this),r=this.hot.runHooks(\"beforeColumnMove\",o,e);i.disallowMoving=!r,r!==!1&&(v(t,(n,l,a)=>{a[l]=this.columnsMapper.getValueByIndex(n)}),v(t,(n,l)=>{let a=this.columnsMapper.getIndexByValue(n);a!==e&&this.columnsMapper.moveColumn(a,e+l)}),this.columnsMapper.clearNull()),this.hot.runHooks(\"afterColumnMove\",o,e)}changeSelection(t,e){this.hot.selectColumns(t,e)}getColumnsWidth(t,e){let o=0;for(let i=t;i<e;i++){let r=0;i<0?r=this.hot.view.wt.wtViewport.getRowHeaderWidth()||0:r=this.hot.view.wt.wtTable.getStretchedColumnWidth(i)||0,o+=r}return o}initialSettings(){let t=this.hot.getSettings().manualColumnMove;Array.isArray(t)?this.moveColumns(t,0):t!==void 0&&this.persistentStateLoad()}isFixedColumnsLeft(t){return t<this.hot.getSettings().fixedColumnsLeft}persistentStateSave(){this.hot.runHooks(\"persistentStateSave\",\"manualColumnMove\",this.columnsMapper._arrayMap)}persistentStateLoad(){let t={};this.hot.runHooks(\"persistentStateLoad\",\"manualColumnMove\",t),t.value&&(this.columnsMapper._arrayMap=t.value)}prepareColumnsToMoving(t,e){let o=[];return P(t,e,i=>{o.push(i)}),o}refreshPositions(){let t=Bo.get(this),e=this.hot.view.wt.wtTable.getFirstVisibleColumn(),o=this.hot.view.wt.wtTable.getLastVisibleColumn(),i=this.hot.view.wt.wtTable,r=this.hot.view.wt.wtOverlays.scrollableElement,n=typeof r.scrollX==\"number\"?r.scrollX:r.scrollLeft,l=this.hot.view.THEAD.offsetLeft+this.getColumnsWidth(0,t.coordsColumn),a=t.target.eventPageX-(t.rootElementOffset-(r.scrollX===void 0?n:0)),h=i.hider.offsetWidth,u=i.TBODY.offsetLeft,m=this.backlight.getOffset().left,w=this.backlight.getSize().width,R=0;if(t.rootElementOffset+i.holder.offsetWidth+n<t.target.eventPageX&&t.coordsColumn<t.countCols&&(t.coordsColumn+=1),t.hasRowHeaders&&(R=this.hot.view.wt.wtOverlays.leftOverlay.clone.wtTable.getColumnHeader(-1).offsetWidth),this.isFixedColumnsLeft(t.coordsColumn)&&(l+=n),l+=R,t.coordsColumn<0)t.fixedColumns>0?t.target.col=0:t.target.col=e>0?e-1:e;else if(t.target.TD.offsetWidth/2+l<=a){let D=t.coordsColumn>=t.countCols?t.countCols-1:t.coordsColumn;t.target.col=D+1,l+=t.target.TD.offsetWidth,t.target.col>o&&o<t.countCols&&this.hot.scrollViewportTo(void 0,o+1,void 0,!0)}else t.target.col=t.coordsColumn,t.target.col<=e&&t.target.col>=t.fixedColumns&&e>0&&this.hot.scrollViewportTo(void 0,e-1);t.target.col<=e&&t.target.col>=t.fixedColumns&&e>0&&this.hot.scrollViewportTo(void 0,e-1);let A=a,O=l;a+w+m>=h?A=h-w-m:a+m<u+R&&(A=u+R+Math.abs(m)),l>=h-1?O=h-1:O===0?O=1:r.scrollX!==void 0&&t.coordsColumn<t.fixedColumns&&(O-=t.rootElementOffset<=r.scrollX?t.rootElementOffset:0),this.backlight.setPosition(null,A),this.guideline.setPosition(null,O)}updateColumnsMapper(){let t=this.hot.countSourceCols(),e=this.columnsMapper._arrayMap.length;if(e===0)this.columnsMapper.createMap(t||this.hot.getSettings().startCols);else if(e<t){let o=t-e;this.columnsMapper.insertItems(e,o)}else if(e>t){let o=t-1,i=[];v(this.columnsMapper._arrayMap,(r,n)=>{r>o&&i.push(n)}),this.columnsMapper.removeItems(i)}}registerEvents(){this.eventManager.addEventListener(document.documentElement,\"mousemove\",t=>this.onMouseMove(t)),this.eventManager.addEventListener(document.documentElement,\"mouseup\",()=>this.onMouseUp())}unregisterEvents(){this.eventManager.clear()}onBeforeOnCellMouseDown(t,e,o,i){let r=this.hot.view.wt.wtTable,n=this.hot.selection.isSelectedByColumnHeader(),l=this.hot.getSelectedRangeLast(),a=Bo.get(this),h=t.realTarget.className.indexOf(\"sortAction\")>-1;if(!l||!n||a.pressed||t.button!==0||h){a.pressed=!1,a.columnsToMove.length=0,Y(this.hot.rootElement,[Hh,Lr]);return}let u=this.guideline.isBuilt()&&!this.guideline.isAppended(),m=this.backlight.isBuilt()&&!this.backlight.isAppended();u&&m&&(this.guideline.appendTo(r.hider),this.backlight.appendTo(r.hider));let{from:w,to:R}=l,A=Math.min(w.col,R.col),O=Math.max(w.col,R.col);if(e.row<0&&e.col>=A&&e.col<=O){i.column=!0,a.pressed=!0,a.target.eventPageX=t.pageX,a.coordsColumn=e.col,a.target.TD=o,a.target.col=e.col,a.columnsToMove=this.prepareColumnsToMoving(A,O),a.hasRowHeaders=!!this.hot.getSettings().rowHeaders,a.countCols=this.hot.countCols(),a.fixedColumns=this.hot.getSettings().fixedColumnsLeft,a.rootElementOffset=rt(this.hot.rootElement).left;let D=a.hasRowHeaders?-1:0,B=r.holder.scrollTop+r.getColumnHeaderHeight(0)+1,$=e.col<a.fixedColumns,et=this.hot.view.wt.wtOverlays.scrollableElement,ft=et.scrollX?et.scrollX-a.rootElementOffset:0,q=t.layerX-($?ft:0),ct=Math.abs(this.getColumnsWidth(A,e.col)+q);this.backlight.setPosition(B,this.getColumnsWidth(D,A)+ct),this.backlight.setSize(this.getColumnsWidth(A,O+1),r.hider.offsetHeight-B),this.backlight.setOffset(null,ct*-1),L(this.hot.rootElement,Hh)}else Y(this.hot.rootElement,Ah),a.pressed=!1,a.columnsToMove.length=0}onMouseMove(t){let e=Bo.get(this);if(e.pressed){if(t.realTarget===this.backlight.element){let o=this.backlight.getSize().width;this.backlight.setSize(0),setTimeout(function(){this.backlight.setPosition(o)})}e.target.eventPageX=t.pageX,this.refreshPositions()}}onBeforeOnCellMouseOver(t,e,o,i){let r=this.hot.getSelectedRangeLast(),n=Bo.get(this);!r||!n.pressed||(n.columnsToMove.indexOf(e.col)>-1?Y(this.hot.rootElement,Lr):L(this.hot.rootElement,Lr),i.row=!0,i.column=!0,i.cell=!0,n.coordsColumn=e.col,n.target.TD=o)}onMouseUp(){let t=Bo.get(this);if(t.coordsColumn=void 0,t.pressed=!1,t.backlightWidth=0,Y(this.hot.rootElement,[Hh,Lr,Ah]),this.hot.selection.isSelectedByColumnHeader()&&L(this.hot.rootElement,Ah),!(t.columnsToMove.length<1||t.target.col===void 0||t.columnsToMove.indexOf(t.target.col)>-1)){if(this.moveColumns(t.columnsToMove,t.target.col),this.persistentStateSave(),this.hot.render(),this.hot.view.wt.wtOverlays.adjustElementsSize(!0),!t.disallowMoving){let e=this.columnsMapper.getIndexByValue(t.columnsToMove[0]),o=this.columnsMapper.getIndexByValue(t.columnsToMove[t.columnsToMove.length-1]);this.changeSelection(e,o)}t.columnsToMove.length=0}}onAfterScrollVertically(){let t=this.hot.view.wt.wtTable,e=t.getColumnHeaderHeight(0)+1,o=t.holder.scrollTop,i=e+o;this.backlight.setPosition(i),this.backlight.setSize(null,t.hider.offsetHeight-i)}onAfterCreateCol(t,e){this.columnsMapper.shiftItems(t,e)}onBeforeRemoveCol(t,e){this.removedColumns.length=0,t!==!1&&P(t,t+e-1,o=>{this.removedColumns.push(this.hot.runHooks(\"modifyCol\",o,this.pluginName))})}onAfterRemoveCol(){this.columnsMapper.unshiftItems(this.removedColumns)}onAfterLoadData(){this.updateColumnsMapper()}onModifyCol(t,e){let o=t;if(e!==this.pluginName){let i=this.columnsMapper.getValueByIndex(o);o=i===null?o:i}return o}onUnmodifyCol(t){let e=this.columnsMapper.getIndexByValue(t);return e===null?t:e}onAfterPluginsInitialized(){this.updateColumnsMapper(),this.initialSettings(),this.backlight.build(),this.guideline.build()}destroy(){this.backlight.destroy(),this.guideline.destroy(),super.destroy()}};J(\"ManualColumnMove\",xr);var Bd=xr;var _r=class extends Z{constructor(t){super(t),this.currentTH=null,this.currentCol=null,this.selectedCols=[],this.currentWidth=null,this.newSize=null,this.startY=null,this.startWidth=null,this.startOffset=null,this.handle=document.createElement(\"DIV\"),this.guide=document.createElement(\"DIV\"),this.eventManager=new G(this),this.pressed=null,this.dblclick=0,this.autoresizeTimeout=null,this.manualColumnWidths=[],L(this.handle,\"manualColumnResizer\"),L(this.guide,\"manualColumnResizerGuide\")}isEnabled(){return this.hot.getSettings().manualColumnResize}enablePlugin(){if(this.enabled)return;this.manualColumnWidths=[];let t=this.hot.getSettings().manualColumnResize,e=this.loadManualColumnWidths();this.addHook(\"modifyColWidth\",(o,i)=>this.onModifyColWidth(o,i)),this.addHook(\"beforeStretchingColumnWidth\",(o,i)=>this.onBeforeStretchingColumnWidth(o,i)),this.addHook(\"beforeColumnResize\",(o,i,r)=>this.onBeforeColumnResize(o,i,r)),typeof e<\"u\"?this.manualColumnWidths=e:Array.isArray(t)?this.manualColumnWidths=t:this.manualColumnWidths=[],this.bindEvents(),super.enablePlugin()}updatePlugin(){let t=this.hot.getSettings().manualColumnResize;Array.isArray(t)?this.manualColumnWidths=t:t||(this.manualColumnWidths=[])}disablePlugin(){super.disablePlugin()}saveManualColumnWidths(){this.hot.runHooks(\"persistentStateSave\",\"manualColumnWidths\",this.manualColumnWidths)}loadManualColumnWidths(){let t={};return this.hot.runHooks(\"persistentStateLoad\",\"manualColumnWidths\",t),t.value}setupHandlePosition(t){if(!t.parentNode)return!1;this.currentTH=t;let e=this.hot.view.wt.wtTable.getCoords(t).col,o=lt(this.currentTH);if(e>=0){let i=this.currentTH.getBoundingClientRect();if(this.currentCol=e,this.selectedCols=[],this.hot.selection.isSelected()&&this.hot.selection.isSelectedByColumnHeader()){let{from:r,to:n}=this.hot.getSelectedRangeLast(),l=r.col,a=n.col;l>=a&&(l=n.col,a=r.col),this.currentCol>=l&&this.currentCol<=a?P(l,a,h=>this.selectedCols.push(h)):this.selectedCols.push(this.currentCol)}else this.selectedCols.push(this.currentCol);this.startOffset=i.left-6,this.startWidth=parseInt(i.width,10),this.handle.style.top=`${i.top}px`,this.handle.style.left=`${this.startOffset+this.startWidth}px`,this.handle.style.height=`${o}px`,this.hot.rootElement.appendChild(this.handle)}}refreshHandlePosition(){this.handle.style.left=`${this.startOffset+this.currentWidth}px`}setupGuidePosition(){let t=parseInt(lt(this.handle),10),e=parseInt(this.handle.style.top,10)+t,o=parseInt(this.hot.view.maximumVisibleElementHeight(0),10);L(this.handle,\"active\"),L(this.guide,\"active\"),this.guide.style.top=`${e}px`,this.guide.style.left=this.handle.style.left,this.guide.style.height=`${o-t}px`,this.hot.rootElement.appendChild(this.guide)}refreshGuidePosition(){this.guide.style.left=this.handle.style.left}hideHandleAndGuide(){Y(this.handle,\"active\"),Y(this.guide,\"active\")}checkIfColumnHeader(t){if(t!==this.hot.rootElement){let e=t.parentNode;return e.tagName===\"THEAD\"?!0:this.checkIfColumnHeader(e)}return!1}getTHFromTargetElement(t){return t.tagName!==\"TABLE\"?t.tagName===\"TH\"?t:this.getTHFromTargetElement(t.parentNode):null}onMouseOver(t){if(this.checkIfColumnHeader(t.target)){let e=this.getTHFromTargetElement(t.target);if(!e)return;let o=e.getAttribute(\"colspan\");e&&(o===null||o===1)&&(this.pressed||this.setupHandlePosition(e))}}afterMouseDownTimeout(){let t=()=>{this.hot.forceFullRender=!0,this.hot.view.render(),this.hot.view.wt.wtOverlays.adjustElementsSize(!0)},e=(o,i)=>{let r=this.hot.runHooks(\"beforeColumnResize\",o,this.newSize,!0);r!==void 0&&(this.newSize=r),this.hot.getSettings().stretchH===\"all\"?this.clearManualSize(o):this.setManualSize(o,this.newSize),i&&t(),this.saveManualColumnWidths(),this.hot.runHooks(\"afterColumnResize\",o,this.newSize,!0)};this.dblclick>=2&&(this.selectedCols.length>1?(v(this.selectedCols,i=>{e(i)}),t()):v(this.selectedCols,i=>{e(i,!0)})),this.dblclick=0,this.autoresizeTimeout=null}onMouseDown(t){z(t.target,\"manualColumnResizer\")&&(this.setupGuidePosition(),this.pressed=this.hot,this.autoresizeTimeout===null&&(this.autoresizeTimeout=setTimeout(()=>this.afterMouseDownTimeout(),500),this.hot._registerTimeout(this.autoresizeTimeout)),this.dblclick+=1,this.startX=no(t),this.newSize=this.startWidth)}onMouseMove(t){this.pressed&&(this.currentWidth=this.startWidth+(no(t)-this.startX),v(this.selectedCols,e=>{this.newSize=this.setManualSize(e,this.currentWidth)}),this.refreshHandlePosition(),this.refreshGuidePosition())}onMouseUp(){let t=()=>{this.hot.forceFullRender=!0,this.hot.view.render(),this.hot.view.wt.wtOverlays.adjustElementsSize(!0)},e=(o,i)=>{this.hot.runHooks(\"beforeColumnResize\",o,this.newSize,!1),i&&t(),this.saveManualColumnWidths(),this.hot.runHooks(\"afterColumnResize\",o,this.newSize)};this.pressed&&(this.hideHandleAndGuide(),this.pressed=!1,this.newSize!==this.startWidth&&(this.selectedCols.length>1?(v(this.selectedCols,i=>{e(i)}),t()):v(this.selectedCols,i=>{e(i,!0)})),this.setupHandlePosition(this.currentTH))}bindEvents(){this.eventManager.addEventListener(this.hot.rootElement,\"mouseover\",t=>this.onMouseOver(t)),this.eventManager.addEventListener(this.hot.rootElement,\"mousedown\",t=>this.onMouseDown(t)),this.eventManager.addEventListener(window,\"mousemove\",t=>this.onMouseMove(t)),this.eventManager.addEventListener(window,\"mouseup\",()=>this.onMouseUp())}setManualSize(t,e){let o=Math.max(e,20),i=this.hot.runHooks(\"modifyCol\",t);return this.manualColumnWidths[i]=o,o}clearManualSize(t){let e=this.hot.runHooks(\"modifyCol\",t);this.manualColumnWidths[e]=void 0}onModifyColWidth(t,e){let o=t;if(this.enabled){let i=this.hot.runHooks(\"modifyCol\",e),r=this.manualColumnWidths[i];this.hot.getSettings().manualColumnResize&&r&&(o=r)}return o}onBeforeStretchingColumnWidth(t,e){let o=this.manualColumnWidths[e];return o===void 0&&(o=t),o}onBeforeColumnResize(){this.hot.view.wt.wtViewport.hasOversizedColumnHeadersMarked={}}};J(\"manualColumnResize\",_r);var Wd=_r;var Dr=class{constructor(t){this.manualRowMove=t}createMap(t){let e=t===void 0?this._arrayMap.length:t;this._arrayMap.length=0,P(e-1,o=>{this._arrayMap[o]=o})}destroy(){this._arrayMap=null}moveRow(t,e){let o=this._arrayMap[t];this._arrayMap[t]=null,this._arrayMap.splice(e,0,o)}clearNull(){this._arrayMap=Kt(this._arrayMap,t=>t!==null)}};Lt(Dr,Zo);var Fd=Dr;var Nh=class{constructor(t){this.hot=t,this._element=null,this.state=0}appendTo(t){t.appendChild(this._element),this.state=2}build(){this._element=document.createElement(\"div\"),this.state=1}destroy(){this.isAppended()&&this._element.parentElement.removeChild(this._element),this._element=null,this.state=0}isAppended(){return this.state===2}isBuilt(){return this.state>=1}setPosition(t,e){t!==void 0&&(this._element.style.top=t+\"px\"),e!==void 0&&(this._element.style.left=e+\"px\")}getPosition(){return{top:this._element.style.top?parseInt(this._element.style.top,10):0,left:this._element.style.left?parseInt(this._element.style.left,10):0}}setSize(t,e){t&&(this._element.style.width=t+\"px\"),e&&(this._element.style.height=e+\"px\")}getSize(){return{width:this._element.style.width?parseInt(this._element.style.width,10):0,height:this._element.style.height?parseInt(this._element.style.height,10):0}}setOffset(t,e){t&&(this._element.style.marginTop=t+\"px\"),e&&(this._element.style.marginLeft=e+\"px\")}getOffset(){return{top:this._element.style.marginTop?parseInt(this._element.style.marginTop,10):0,left:this._element.style.marginLeft?parseInt(this._element.style.marginLeft,10):0}}},kr=Nh;var Vp=\"ht__manualRowMove--backlight\",Lh=class extends kr{build(){super.build(),L(this._element,Vp)}},Vd=Lh;var Up=\"ht__manualRowMove--guideline\",xh=class extends kr{build(){super.build(),L(this._element,Up)}},Ud=xh;V.getSingleton().register(\"beforeRowMove\");V.getSingleton().register(\"afterRowMove\");V.getSingleton().register(\"unmodifyRow\");var go=new WeakMap,zd=\"ht__manualRowMove\",Ir=\"show-ui\",_h=\"on-moving--rows\",Dh=\"after-selection--rows\",Pr=class extends Z{constructor(t){super(t),go.set(this,{rowsToMove:[],pressed:void 0,disallowMoving:void 0,target:{eventPageY:void 0,coords:void 0,TD:void 0,row:void 0}}),this.removedRows=[],this.rowsMapper=new Fd(this),this.eventManager=new G(this),this.backlight=new Vd(t),this.guideline=new Ud(t)}isEnabled(){return!!this.hot.getSettings().manualRowMove}enablePlugin(){this.enabled||(this.addHook(\"beforeOnCellMouseDown\",(t,e,o,i)=>this.onBeforeOnCellMouseDown(t,e,o,i)),this.addHook(\"beforeOnCellMouseOver\",(t,e,o,i)=>this.onBeforeOnCellMouseOver(t,e,o,i)),this.addHook(\"afterScrollHorizontally\",()=>this.onAfterScrollHorizontally()),this.addHook(\"modifyRow\",(t,e)=>this.onModifyRow(t,e)),this.addHook(\"beforeRemoveRow\",(t,e)=>this.onBeforeRemoveRow(t,e)),this.addHook(\"afterRemoveRow\",()=>this.onAfterRemoveRow()),this.addHook(\"afterCreateRow\",(t,e)=>this.onAfterCreateRow(t,e)),this.addHook(\"afterLoadData\",()=>this.onAfterLoadData()),this.addHook(\"beforeColumnSort\",(t,e)=>this.onBeforeColumnSort(t,e)),this.addHook(\"unmodifyRow\",t=>this.onUnmodifyRow(t)),this.registerEvents(),L(this.hot.rootElement,zd),super.enablePlugin())}updatePlugin(){this.disablePlugin(),this.enablePlugin(),this.onAfterPluginsInitialized(),super.updatePlugin()}disablePlugin(){let t=this.hot.getSettings().manualRowMove;Array.isArray(t)&&this.rowsMapper.clearMap(),Y(this.hot.rootElement,zd),this.unregisterEvents(),this.backlight.destroy(),this.guideline.destroy(),super.disablePlugin()}moveRow(t,e){this.moveRows([t],e)}moveRows(t,e){let o=[...t],i=go.get(this),r=this.hot.runHooks(\"beforeRowMove\",o,e);i.disallowMoving=r===!1,i.disallowMoving||(v(t,(n,l,a)=>{a[l]=this.rowsMapper.getValueByIndex(n)}),v(t,(n,l)=>{let a=this.rowsMapper.getIndexByValue(n);a!==e&&this.rowsMapper.moveRow(a,e+l)}),this.rowsMapper.clearNull()),this.hot.runHooks(\"afterRowMove\",o,e)}changeSelection(t,e){this.hot.selectRows(t,e)}getRowsHeight(t,e){let o=0;for(let i=t;i<e;i++){let r=this.hot.view.wt.wtTable.getRowHeight(i)||23;o+=r}return o}initialSettings(){let t=this.hot.getSettings().manualRowMove;if(Array.isArray(t))this.moveRows(t,0);else if(t!==void 0){let e=this.persistentStateLoad();e.length&&this.moveRows(e,0)}}isFixedRowTop(t){return t<this.hot.getSettings().fixedRowsTop}isFixedRowBottom(t){return t>this.hot.getSettings().fixedRowsBottom}persistentStateSave(){this.hot.runHooks(\"persistentStateSave\",\"manualRowMove\",this.rowsMapper._arrayMap)}persistentStateLoad(){let t={};return this.hot.runHooks(\"persistentStateLoad\",\"manualRowMove\",t),t.value?t.value:[]}prepareRowsToMoving(){let t=this.hot.getSelectedRangeLast(),e=[];if(!t)return e;let{from:o,to:i}=t,r=Math.min(o.row,i.row),n=Math.max(o.row,i.row);return P(r,n,l=>{e.push(l)}),e}refreshPositions(){let t=go.get(this),e=t.target.coords,o=this.hot.view.wt.wtTable.getFirstVisibleRow(),i=this.hot.view.wt.wtTable.getLastVisibleRow(),r=this.hot.getSettings().fixedRowsTop,n=this.hot.countRows();e.row<r&&o>0&&this.hot.scrollViewportTo(o-1),e.row>=i&&i<n&&this.hot.scrollViewportTo(i+1,void 0,!0);let l=this.hot.view.wt.wtTable,a=t.target.TD,h=rt(this.hot.rootElement),u=this.hot.view.THEAD.offsetHeight+this.getRowsHeight(0,e.row),m=t.target.eventPageY-h.top+l.holder.scrollTop,w=l.hider.offsetHeight,R=l.TBODY.offsetTop,A=this.backlight.getOffset().top,O=this.backlight.getSize().height;this.isFixedRowTop(e.row)&&(u+=l.holder.scrollTop),e.row<0?t.target.row=o>0?o-1:o:a.offsetHeight/2+u<=m?(t.target.row=e.row+1,u+=e.row===0?a.offsetHeight-1:a.offsetHeight):t.target.row=e.row;let D=m,B=u;m+O+A>=w?D=w-O-A:m+A<R&&(D=R+Math.abs(A)),u>=w-1&&(B=w-1);let $=0;this.hot.view.wt.wtOverlays.topOverlay&&($=this.hot.view.wt.wtOverlays.topOverlay.clone.wtTable.TABLE.offsetHeight),e.row>=r&&B-l.holder.scrollTop<$&&this.hot.scrollViewportTo(e.row),this.backlight.setPosition(D),this.guideline.setPosition(B)}updateRowsMapper(){let t=this.hot.countSourceRows(),e=this.rowsMapper._arrayMap.length;if(e===0)this.rowsMapper.createMap(t||this.hot.getSettings().startRows);else if(e<t){let o=t-e;this.rowsMapper.insertItems(e,o)}else if(e>t){let o=t-1,i=[];v(this.rowsMapper._arrayMap,(r,n)=>{r>o&&i.push(n)}),this.rowsMapper.removeItems(i)}}registerEvents(){this.eventManager.addEventListener(document.documentElement,\"mousemove\",t=>this.onMouseMove(t)),this.eventManager.addEventListener(document.documentElement,\"mouseup\",()=>this.onMouseUp())}unregisterEvents(){this.eventManager.clear()}onBeforeColumnSort(t,e){let o=go.get(this);o.disallowMoving=e!==void 0}onBeforeOnCellMouseDown(t,e,o,i){let r=this.hot.view.wt.wtTable,n=this.hot.selection.isSelectedByRowHeader(),l=this.hot.getSelectedRangeLast(),a=go.get(this);if(!l||!n||a.pressed||t.button!==0){a.pressed=!1,a.rowsToMove.length=0,Y(this.hot.rootElement,[_h,Ir]);return}let h=this.guideline.isBuilt()&&!this.guideline.isAppended(),u=this.backlight.isBuilt()&&!this.backlight.isAppended();h&&u&&(this.guideline.appendTo(r.hider),this.backlight.appendTo(r.hider));let{from:m,to:w}=l,R=Math.min(m.row,w.row),A=Math.max(m.row,w.row);if(e.col<0&&e.row>=R&&e.row<=A){i.row=!0,a.pressed=!0,a.target.eventPageY=t.pageY,a.target.coords=e,a.target.TD=o,a.rowsToMove=this.prepareRowsToMoving();let O=r.holder.scrollLeft+this.hot.view.wt.wtViewport.getRowHeaderWidth();this.backlight.setPosition(null,O),this.backlight.setSize(r.hider.offsetWidth-O,this.getRowsHeight(R,A+1)),this.backlight.setOffset((this.getRowsHeight(R,e.row)+t.layerY)*-1,null),L(this.hot.rootElement,_h),this.refreshPositions()}else Y(this.hot.rootElement,Dh),a.pressed=!1,a.rowsToMove.length=0}onMouseMove(t){let e=go.get(this);if(e.pressed){if(t.realTarget===this.backlight.element){let o=this.backlight.getSize().height;this.backlight.setSize(null,0),setTimeout(function(){this.backlight.setPosition(null,o)})}e.target.eventPageY=t.pageY,this.refreshPositions()}}onBeforeOnCellMouseOver(t,e,o,i){let r=this.hot.getSelectedRangeLast(),n=go.get(this);!r||!n.pressed||(n.rowsToMove.indexOf(e.row)>-1?Y(this.hot.rootElement,Ir):L(this.hot.rootElement,Ir),i.row=!0,i.column=!0,i.cell=!0,n.target.coords=e,n.target.TD=o)}onMouseUp(){let t=go.get(this),e=t.target.row,o=t.rowsToMove.length;if(t.pressed=!1,t.backlightHeight=0,Y(this.hot.rootElement,[_h,Ir,Dh]),this.hot.selection.isSelectedByRowHeader()&&L(this.hot.rootElement,Dh),!(o<1||e===void 0||t.rowsToMove.indexOf(e)>-1||t.rowsToMove[o-1]===e-1)){if(this.moveRows(t.rowsToMove,e),this.persistentStateSave(),this.hot.render(),!t.disallowMoving){let i=this.rowsMapper.getIndexByValue(t.rowsToMove[0]),r=this.rowsMapper.getIndexByValue(t.rowsToMove[o-1]);this.changeSelection(i,r)}t.rowsToMove.length=0}}onAfterScrollHorizontally(){let t=this.hot.view.wt.wtTable,e=this.hot.view.wt.wtViewport.getRowHeaderWidth(),o=t.holder.scrollLeft,i=e+o;this.backlight.setPosition(null,i),this.backlight.setSize(t.hider.offsetWidth-i)}onAfterCreateRow(t,e){this.rowsMapper.shiftItems(t,e)}onBeforeRemoveRow(t,e){this.removedRows.length=0,t!==!1&&P(t,t+e-1,o=>{this.removedRows.push(this.hot.runHooks(\"modifyRow\",o,this.pluginName))})}onAfterRemoveRow(){this.rowsMapper.unshiftItems(this.removedRows)}onAfterLoadData(){this.updateRowsMapper()}onModifyRow(t,e){let o=t;if(e!==this.pluginName){let i=this.rowsMapper.getValueByIndex(o);o=i===null?o:i}return o}onUnmodifyRow(t){let e=this.rowsMapper.getIndexByValue(t);return e===null?t:e}onAfterPluginsInitialized(){this.updateRowsMapper(),this.initialSettings(),this.backlight.build(),this.guideline.build()}destroy(){this.backlight.destroy(),this.guideline.destroy(),this.rowsMapper.destroy(),super.destroy()}};J(\"ManualRowMove\",Pr);var $d=Pr;var Br=class extends Z{constructor(t){super(t),this.currentTH=null,this.currentRow=null,this.selectedRows=[],this.currentHeight=null,this.newSize=null,this.startY=null,this.startHeight=null,this.startOffset=null,this.handle=document.createElement(\"DIV\"),this.guide=document.createElement(\"DIV\"),this.eventManager=new G(this),this.pressed=null,this.dblclick=0,this.autoresizeTimeout=null,this.manualRowHeights=[],L(this.handle,\"manualRowResizer\"),L(this.guide,\"manualRowResizerGuide\")}isEnabled(){return this.hot.getSettings().manualRowResize}enablePlugin(){if(this.enabled)return;this.manualRowHeights=[];let t=this.hot.getSettings().manualRowResize,e=this.loadManualRowHeights();typeof e<\"u\"?this.manualRowHeights=e:Array.isArray(t)?this.manualRowHeights=t:this.manualRowHeights=[],this.addHook(\"modifyRowHeight\",(o,i)=>this.onModifyRowHeight(o,i)),this.bindEvents(),super.enablePlugin()}updatePlugin(){let t=this.hot.getSettings().manualRowResize;Array.isArray(t)?this.manualRowHeights=t:t||(this.manualRowHeights=[])}disablePlugin(){super.disablePlugin()}saveManualRowHeights(){this.hot.runHooks(\"persistentStateSave\",\"manualRowHeights\",this.manualRowHeights)}loadManualRowHeights(){let t={};return this.hot.runHooks(\"persistentStateLoad\",\"manualRowHeights\",t),t.value}setupHandlePosition(t){this.currentTH=t;let e=this.hot.view.wt.wtTable.getCoords(t).row,o=st(this.currentTH);if(e>=0){let i=this.currentTH.getBoundingClientRect();if(this.currentRow=e,this.selectedRows=[],this.hot.selection.isSelected()&&this.hot.selection.isSelectedByRowHeader()){let{from:r,to:n}=this.hot.getSelectedRangeLast(),l=r.row,a=n.row;l>=a&&(l=n.row,a=r.row),this.currentRow>=l&&this.currentRow<=a?P(l,a,h=>this.selectedRows.push(h)):this.selectedRows.push(this.currentRow)}else this.selectedRows.push(this.currentRow);this.startOffset=i.top-6,this.startHeight=parseInt(i.height,10),this.handle.style.left=`${i.left}px`,this.handle.style.top=`${this.startOffset+this.startHeight}px`,this.handle.style.width=`${o}px`,this.hot.rootElement.appendChild(this.handle)}}refreshHandlePosition(){this.handle.style.top=`${this.startOffset+this.currentHeight}px`}setupGuidePosition(){let t=parseInt(st(this.handle),10),e=parseInt(this.handle.style.left,10)+t,o=parseInt(this.hot.view.maximumVisibleElementWidth(0),10);L(this.handle,\"active\"),L(this.guide,\"active\"),this.guide.style.top=this.handle.style.top,this.guide.style.left=`${e}px`,this.guide.style.width=`${o-t}px`,this.hot.rootElement.appendChild(this.guide)}refreshGuidePosition(){this.guide.style.top=this.handle.style.top}hideHandleAndGuide(){Y(this.handle,\"active\"),Y(this.guide,\"active\")}checkIfRowHeader(t){if(t!==this.hot.rootElement){let e=t.parentNode;return e.tagName===\"TBODY\"?!0:this.checkIfRowHeader(e)}return!1}getTHFromTargetElement(t){return t.tagName!==\"TABLE\"?t.tagName===\"TH\"?t:this.getTHFromTargetElement(t.parentNode):null}onMouseOver(t){if(this.checkIfRowHeader(t.target)){let e=this.getTHFromTargetElement(t.target);e&&(this.pressed||this.setupHandlePosition(e))}}afterMouseDownTimeout(){let t=()=>{this.hot.forceFullRender=!0,this.hot.view.render(),this.hot.view.wt.wtOverlays.adjustElementsSize(!0)},e=(o,i)=>{let r=this.hot.runHooks(\"beforeRowResize\",o,this.newSize,!0);r!==void 0&&(this.newSize=r),this.setManualSize(o,this.newSize),i&&t(),this.hot.runHooks(\"afterRowResize\",o,this.newSize,!0)};this.dblclick>=2&&(this.selectedRows.length>1?(v(this.selectedRows,i=>{e(i)}),t()):v(this.selectedRows,i=>{e(i,!0)})),this.dblclick=0,this.autoresizeTimeout=null}onMouseDown(t){z(t.target,\"manualRowResizer\")&&(this.setupGuidePosition(),this.pressed=this.hot,this.autoresizeTimeout===null&&(this.autoresizeTimeout=setTimeout(()=>this.afterMouseDownTimeout(),500),this.hot._registerTimeout(this.autoresizeTimeout)),this.dblclick+=1,this.startY=lo(t),this.newSize=this.startHeight)}onMouseMove(t){this.pressed&&(this.currentHeight=this.startHeight+(lo(t)-this.startY),v(this.selectedRows,e=>{this.newSize=this.setManualSize(e,this.currentHeight)}),this.refreshHandlePosition(),this.refreshGuidePosition())}onMouseUp(){let t=()=>{this.hot.forceFullRender=!0,this.hot.view.render(),this.hot.view.wt.wtOverlays.adjustElementsSize(!0)},e=(o,i)=>{this.hot.runHooks(\"beforeRowResize\",o,this.newSize),i&&t(),this.saveManualRowHeights(),this.hot.runHooks(\"afterRowResize\",o,this.newSize,!1)};this.pressed&&(this.hideHandleAndGuide(),this.pressed=!1,this.newSize!==this.startHeight&&(this.selectedRows.length>1?(v(this.selectedRows,i=>{e(i)}),t()):v(this.selectedRows,i=>{e(i,!0)})),this.setupHandlePosition(this.currentTH))}bindEvents(){this.eventManager.addEventListener(this.hot.rootElement,\"mouseover\",t=>this.onMouseOver(t)),this.eventManager.addEventListener(this.hot.rootElement,\"mousedown\",t=>this.onMouseDown(t)),this.eventManager.addEventListener(window,\"mousemove\",t=>this.onMouseMove(t)),this.eventManager.addEventListener(window,\"mouseup\",()=>this.onMouseUp())}setManualSize(t,e){let o=this.hot.runHooks(\"modifyRow\",t);return this.manualRowHeights[o]=e,e}onModifyRowHeight(t,e){if(this.enabled){let o=this.hot.getPlugin(\"autoRowSize\"),i=o?o.heights[e]:null,r=this.hot.runHooks(\"modifyRow\",e),n=this.manualRowHeights[r];if(n!==void 0&&(n===i||n>(t||0)))return n}return t}};J(\"manualRowResize\",Br);var Yd=Br;var kh=class{constructor(t,e,o,i){this.row=t,this.col=e,this.rowspan=o,this.colspan=i,this.removed=!1}static NEGATIVE_VALUES_WARNING(t){return Vt`The merged cell declared with {row: ${t.row}, col: ${t.col}, rowspan: \n    ${t.rowspan}, colspan: ${t.colspan}} contains negative values, which is not supported. It \n    will not be added to the collection.`}static IS_OUT_OF_BOUNDS_WARNING(t){return Vt`The merged cell declared at [${t.row}, ${t.col}] is positioned (or positioned partially) \n       outside of the table range. It was not added to the table, please fix your setup.`}static IS_SINGLE_CELL(t){return Vt`The merged cell declared at [${t.row}, ${t.col}] has both \"rowspan\" \n     and \"colspan\" declared as \"1\", which makes it a single cell. It cannot be added to the collection.`}static ZERO_SPAN_WARNING(t){return Vt`The merged cell declared at [${t.row}, ${t.col}] has \"rowspan\" or \"colspan\" declared as \n      \"0\", which is not supported. It cannot be added to the collection.`}static containsNegativeValues(t){return t.row<0||t.col<0||t.rowspan<0||t.colspan<0}static isSingleCell(t){return t.colspan===1&&t.rowspan===1}static containsZeroSpan(t){return t.colspan===0||t.rowspan===0}static isOutOfBounds(t,e,o){return t.row<0||t.col<0||t.row>=e||t.row+t.rowspan-1>=e||t.col>=o||t.col+t.colspan-1>=o}normalize(t){let e=t.countRows(),o=t.countCols();this.row<0?this.row=0:this.row>e-1&&(this.row=e-1),this.col<0?this.col=0:this.col>o-1&&(this.col=o-1),this.row+this.rowspan>e-1&&(this.rowspan=e-this.row),this.col+this.colspan>o-1&&(this.colspan=o-this.col)}includes(t,e){return this.row<=t&&this.col<=e&&this.row+this.rowspan-1>=t&&this.col+this.colspan-1>=e}includesHorizontally(t){return this.col<=t&&this.col+this.colspan-1>=t}includesVertically(t){return this.row<=t&&this.row+this.rowspan-1>=t}shift(t,e){let o=t[0]||t[1],i=e+Math.abs(t[0]||t[1])-1,r=t[0]?\"colspan\":\"rowspan\",n=t[0]?\"col\":\"row\",l=Math.min(e,i),a=Math.max(e,i),h=this[n],u=this[n]+this[r]-1;if(h>=e&&(this[n]+=o),o>0)e<=u&&e>h&&(this[r]+=o);else if(o<0){if(l<=h&&a>=u)return this.removed=!0,!1;if(h>=l&&h<=a){let m=a-h+1,w=Math.abs(o)-m;this[n]-=w+o,this[r]-=m}else if(h<=l&&u>=a)this[r]+=o;else if(h<=l&&u>=l&&u<a){let m=u-l+1;this[r]-=m}}return!0}isFarther(t,e){return t?e===\"down\"?t.row+t.rowspan-1<this.row+this.rowspan-1:e===\"up\"?t.row>this.row:e===\"right\"?t.col+t.colspan-1<this.col+this.colspan-1:e===\"left\"?t.col>this.col:null:!0}getLastRow(){return this.row+this.rowspan-1}getLastColumn(){return this.col+this.colspan-1}getRange(){return new Ct(new M(this.row,this.col),new M(this.row,this.col),new M(this.getLastRow(),this.getLastColumn()))}},ue=kh;function Ms(s,t,e,o){t?t.row===e&&t.col===o?(s.setAttribute(\"rowspan\",t.rowspan.toString()),s.setAttribute(\"colspan\",t.colspan.toString())):(s.removeAttribute(\"rowspan\"),s.removeAttribute(\"colspan\"),s.style.display=\"none\"):(s.removeAttribute(\"rowspan\"),s.removeAttribute(\"colspan\"),s.style.display=\"\")}var Ih=class s{constructor(t){this.plugin=t,this.mergedCells=[],this.hot=t.hot}static IS_OVERLAPPING_WARNING(t){return Vt`The merged cell declared at [${t.row}, ${t.col}], overlaps with the other declared merged \n    cell. The overlapping merged cell was not added to the table, please fix your setup.`}get(t,e){let o=this.mergedCells,i=!1;return v(o,r=>r.row<=t&&r.row+r.rowspan-1>=t&&r.col<=e&&r.col+r.colspan-1>=e?(i=r,!1):!0),i}getByRange(t){let e=this.mergedCells,o=!1;return v(e,i=>i.row<=t.from.row&&i.row+i.rowspan-1>=t.to.row&&i.col<=t.from.col&&i.col+i.colspan-1>=t.to.col?(o=i,o):!0),o}getWithinRange(t,e=!1){let o=this.mergedCells,i=[],r=t;if(!r.includesRange){let n=new M(r.from.row,r.from.col),l=new M(r.to.row,r.to.col);r=new Ct(n,n,l)}return v(o,n=>{let l=new M(n.row,n.col),a=new M(n.row+n.rowspan-1,n.col+n.colspan-1),h=new Ct(l,l,a);e?r.overlaps(h)&&i.push(n):r.includesRange(h)&&i.push(n)}),i.length?i:!1}add(t){let e=this.mergedCells,o=t.row,i=t.col,r=t.rowspan,n=t.colspan,l=new ue(o,i,r,n),a=this.get(o,i),h=this.isOverlapping(l);return!a&&!h?(this.hot&&l.normalize(this.hot),e.push(l),l):(pe(s.IS_OVERLAPPING_WARNING(l)),!1)}remove(t,e){let o=this.mergedCells,i=this.get(t,e),r=i?this.mergedCells.indexOf(i):null;return i&&r!==!1?(o.splice(r,1),i):!1}clear(){let t=this.mergedCells,e=[],o=[];v(t,i=>{let r=this.hot.getCell(i.row,i.col);r&&e.push([r,this.get(i.row,i.col),i.row,i.col])}),this.mergedCells.length=0,v(e,(i,r)=>{P(0,i.rowspan-1,n=>{P(0,i.colspan-1,l=>{if(l!==0||n!==0){let a=this.hot.getCell(i.row+n,i.col+l);a&&o.push([a,null,null,null])}})}),e[r][1]=null}),v(e,i=>{Ms(...i)}),v(o,i=>{Ms(...i)})}isOverlapping(t){let e=new Ct(null,new M(t.row,t.col),new M(t.row+t.rowspan-1,t.col+t.colspan-1)),o=!1;return v(this.mergedCells,i=>new Ct(null,new M(i.row,i.col),new M(i.row+i.rowspan-1,i.col+i.colspan-1)).overlaps(e)?(o=!0,!1):!0),o}isMergedParent(t,e){let o=this.mergedCells,i=!1;return v(o,r=>r.row===t&&r.col===e?(i=!0,!1):!0),i}shiftCollections(t,e,o){let i=[0,0];switch(t){case\"right\":i[0]+=o;break;case\"left\":i[0]-=o;break;case\"down\":i[1]+=o;break;case\"up\":i[1]-=o;break;default:}v(this.mergedCells,r=>{r.shift(i,e)}),Ke(this.mergedCells.length-1,0,r=>{let n=this.mergedCells[r];n&&n.removed&&this.mergedCells.splice(this.mergedCells.indexOf(n),1)})}},Gd=Ih;var Ph=class{constructor(t){this.plugin=t,this.mergedCellsCollection=this.plugin.mergedCellsCollection,this.currentFillData=null}correctSelectionAreaSize(t){if(t[0]===t[2]&&t[1]===t[3]){let e=this.mergedCellsCollection.get(t[0],t[1]);e&&(t[2]=t[0]+e.rowspan-1,t[3]=t[1]+e.colspan-1)}}getDirection(t,e){let o=null;return e[0]===t[0]&&e[1]===t[1]&&e[3]===t[3]?o=\"down\":e[2]===t[2]&&e[1]===t[1]&&e[3]===t[3]?o=\"up\":e[1]===t[1]&&e[2]===t[2]?o=\"right\":o=\"left\",o}snapDragArea(t,e,o,i){let r=e.slice(0),n=this.getAutofillSize(t,e,o),[l,a,h,u]=t,w=[\"up\",\"down\"].indexOf(o)>-1?h-l+1:u-a+1,R=Math.floor(n/w)*w,A=n-R,O=this.getFarthestCollection(t,e,o,i);if(O){if(o===\"down\"){let D=O.row+O.rowspan-l-A;r[2]+D>=this.plugin.hot.countRows()?r[2]-=A:r[2]+=A?D:0}else if(o===\"right\"){let D=O.col+O.colspan-a-A;r[3]+D>=this.plugin.hot.countCols()?r[3]-=A:r[3]+=A?D:0}else if(o===\"up\"){let D=h-A-O.row+1;r[0]+D<0?r[0]+=A:r[0]-=A?D:0}else if(o===\"left\"){let D=u-A-O.col+1;r[1]+D<0?r[1]+=A:r[1]-=A?D:0}}return this.updateCurrentFillCache({baseArea:t,dragDirection:o,foundMergedCells:i,fillSize:n,dragArea:r,cycleLength:w}),r}updateCurrentFillCache(t){this.currentFillData||(this.currentFillData={}),Ft(this.currentFillData,t)}getAutofillSize(t,e,o){let[i,r,n,l]=t,[a,h,u,m]=e;switch(o){case\"up\":return i-a;case\"down\":return u-n;case\"left\":return r-h;case\"right\":return m-l;default:return null}}getDragArea(t,e,o){let[i,r,n,l]=t,[a,h,u,m]=e;switch(o){case\"up\":return[a,h,i-1,l];case\"down\":return[n+1,r,u,l];case\"left\":return[a,h,n,r-1];case\"right\":return[i,l+1,u,m];default:return null}}getFarthestCollection(t,e,o,i){let[r,n,l,a]=t,h=[\"up\",\"down\"].indexOf(o)>-1,u=h?l:a,m=h?r:n,w=this.getAutofillSize(t,e,o),R=h?l-r+1:a-n+1,A=Math.floor(w/R)*R,O=w-A,D=null,B=null,$=null;switch(o){case\"up\":D=\"includesVertically\",$=u-O+1;break;case\"left\":D=\"includesHorizontally\",$=u-O+1;break;case\"down\":D=\"includesVertically\",$=m+O-1;break;case\"right\":D=\"includesHorizontally\",$=m+O-1;break;default:}return v(i,et=>{et[D]($)&&et.isFarther(B,o)&&(B=et)}),B}recreateAfterDataPopulation(t){if(!this.currentFillData)return;let e=this.getRangeFromChanges(t),o=this.currentFillData.foundMergedCells,i=this.currentFillData.dragDirection,r=(h,u)=>{switch(i){case\"up\":return h.row-u>=e.from.row;case\"down\":return h.row+h.rowspan-1+u<=e.to.row;case\"left\":return h.col-u>=e.from.column;case\"right\":return h.col+h.colspan-1+u<=e.to.column;default:return null}},n=0,l=null,a=1;do for(let h=0;h<o.length;h+=1){if(l=o[h],n=a*this.currentFillData.cycleLength,r(l,n))switch(i){case\"up\":this.plugin.mergedCellsCollection.add({row:l.row-n,rowspan:l.rowspan,col:l.col,colspan:l.colspan});break;case\"down\":this.plugin.mergedCellsCollection.add({row:l.row+n,rowspan:l.rowspan,col:l.col,colspan:l.colspan});break;case\"left\":this.plugin.mergedCellsCollection.add({row:l.row,rowspan:l.rowspan,col:l.col-n,colspan:l.colspan});break;case\"right\":this.plugin.mergedCellsCollection.add({row:l.row,rowspan:l.rowspan,col:l.col+n,colspan:l.colspan});break;default:}h===o.length-1&&(a+=1)}while(r(l,n));this.currentFillData=null,this.plugin.hot.render()}getRangeFromChanges(t){let e={min:null,max:null},o={min:null,max:null};return v(t,i=>{let r=i[0],n=this.plugin.hot.propToCol(i[1]);(e.min===null||r<e.min)&&(e.min=r),(e.max===null||r>e.max)&&(e.max=r),(o.min===null||n<o.min)&&(o.min=n),(o.max===null||n>o.max)&&(o.max=n)}),{from:{row:e.min,column:o.min},to:{row:e.max,column:o.max}}}dragAreaOverlapsCollections(t,e,o){let i=this.getDragArea(t,e,o),[r,n,l,a]=i,h=new M(r,n),u=new M(l,a),m=new Ct(h,h,u);return!!this.mergedCellsCollection.getWithinRange(m,!0)}},Xd=Ph;var Bh=class{constructor(t){this.plugin=t,this.fullySelectedMergedCellClassName=\"fullySelectedMergedCell\"}snapDelta(t,e,o){let i=e.to,r=i.row+t.row,n=i.col+t.col;t.row?this.jumpOverMergedCell(t,o,r):t.col&&this.jumpOverMergedCell(t,o,n)}jumpOverMergedCell(t,e,o){let i=t.row||t.col,r=null,n=null,l=null;t.row?(r=e.includesVertically(o),n=e.row,l=e.getLastRow()):t.col&&(r=e.includesHorizontally(o),n=e.col,l=e.getLastColumn()),i!==0&&(i>0?r&&o!==n&&(i+=l-o+1):r&&o!==l&&(i-=o-n+1),t.row?t.row=i:t.col&&(t.col=i))}getUpdatedSelectionRange(t,e){return new Ct(t.highlight,t.from,new M(t.to.row+e.row,t.to.col+e.col))}getSelectedMergedCellClassName(t,e,o,i){let[r,n,l,a]=o;if(i!==void 0&&t>=r&&t<=l&&e>=n&&e<=a){if(!this.plugin.mergedCellsCollection.isMergedParent(t,e))return;let u=this.plugin.mergedCellsCollection.get(t,e);if(!u)return;if(u.row+u.rowspan-1<=l&&u.col+u.colspan-1<=a)return`${this.fullySelectedMergedCellClassName}-${i}`;if(this.plugin.selectionCalculations.isMergeCellFullySelected(u,this.plugin.hot.getSelectedRange()))return`${this.fullySelectedMergedCellClassName}-multiple`}}isMergeCellFullySelected(t,e){let o=[];if(!e||!t)return!1;for(let i=0;i<t.rowspan;i+=1)for(let r=0;r<t.colspan;r+=1)o.push(new M(t.row+i,t.col+r));for(let i=0;i<o.length;i+=1){let r=[];for(let n=0;n<e.length;n+=1)r[n]=e[n].includes(o[i]);if(!r.includes(!0))return!1}return!0}getSelectedMergedCellClassNameToRemove(){let t=[];for(let e=0;e<=7;e+=1)t.push(`${this.fullySelectedMergedCellClassName}-${e}`);return t.push(`${this.fullySelectedMergedCellClassName}-multiple`),t}},jd=Bh;function Wh(s){return{key:\"mergeCells\",name(){let t=this.getSelectedLast();if(t){let e=s.mergedCellsCollection.get(t[0],t[1]);if(e.row===t[0]&&e.col===t[1]&&e.row+e.rowspan-1===t[2]&&e.col+e.colspan-1===t[3])return this.getTranslatedPhrase($i)}return this.getTranslatedPhrase(zi)},callback(){s.toggleMergeOnSelection()},disabled(){let t=this.getSelectedLast();return t?ue.isSingleCell({row:t[0],col:t[1],rowspan:t[2]-t[0]+1,colspan:t[3]-t[1]+1})||this.selection.isSelectedByCorner():!0},hidden:!1}}V.getSingleton().register(\"beforeMergeCells\");V.getSingleton().register(\"afterMergeCells\");V.getSingleton().register(\"beforeUnmergeCells\");V.getSingleton().register(\"afterUnmergeCells\");var Kd=new WeakMap,Wr=class extends Z{constructor(t){super(t),Kd.set(this,{lastDesiredCoords:null}),this.mergedCellsCollection=null,this.autofillCalculations=null,this.selectionCalculations=null}isEnabled(){return!!this.hot.getSettings().mergeCells}enablePlugin(){this.enabled||(this.mergedCellsCollection=new Gd(this),this.autofillCalculations=new Xd(this),this.selectionCalculations=new jd(this),this.addHook(\"afterInit\",(...t)=>this.onAfterInit(...t)),this.addHook(\"beforeKeyDown\",(...t)=>this.onBeforeKeyDown(...t)),this.addHook(\"modifyTransformStart\",(...t)=>this.onModifyTransformStart(...t)),this.addHook(\"afterModifyTransformStart\",(...t)=>this.onAfterModifyTransformStart(...t)),this.addHook(\"modifyTransformEnd\",(...t)=>this.onModifyTransformEnd(...t)),this.addHook(\"modifyGetCellCoords\",(...t)=>this.onModifyGetCellCoords(...t)),this.addHook(\"beforeSetRangeEnd\",(...t)=>this.onBeforeSetRangeEnd(...t)),this.addHook(\"afterIsMultipleSelection\",(...t)=>this.onAfterIsMultipleSelection(...t)),this.addHook(\"afterRenderer\",(...t)=>this.onAfterRenderer(...t)),this.addHook(\"afterContextMenuDefaultOptions\",(...t)=>this.addMergeActionsToContextMenu(...t)),this.addHook(\"afterGetCellMeta\",(...t)=>this.onAfterGetCellMeta(...t)),this.addHook(\"afterViewportRowCalculatorOverride\",(...t)=>this.onAfterViewportRowCalculatorOverride(...t)),this.addHook(\"afterViewportColumnCalculatorOverride\",(...t)=>this.onAfterViewportColumnCalculatorOverride(...t)),this.addHook(\"modifyAutofillRange\",(...t)=>this.onModifyAutofillRange(...t)),this.addHook(\"afterCreateCol\",(...t)=>this.onAfterCreateCol(...t)),this.addHook(\"afterRemoveCol\",(...t)=>this.onAfterRemoveCol(...t)),this.addHook(\"afterCreateRow\",(...t)=>this.onAfterCreateRow(...t)),this.addHook(\"afterRemoveRow\",(...t)=>this.onAfterRemoveRow(...t)),this.addHook(\"afterChange\",(...t)=>this.onAfterChange(...t)),this.addHook(\"beforeDrawBorders\",(...t)=>this.onBeforeDrawAreaBorders(...t)),this.addHook(\"afterDrawSelection\",(...t)=>this.onAfterDrawSelection(...t)),this.addHook(\"beforeRemoveCellClassNames\",(...t)=>this.onBeforeRemoveCellClassNames(...t)),super.enablePlugin())}disablePlugin(){this.clearCollections(),this.hot.render(),super.disablePlugin()}updatePlugin(){let t=this.hot.getSettings().mergeCells;this.disablePlugin(),this.enablePlugin(),this.generateFromSettings(t),super.updatePlugin()}validateSetting(t){let e=!0;return t?(ue.containsNegativeValues(t)?(pe(ue.NEGATIVE_VALUES_WARNING(t)),e=!1):ue.isOutOfBounds(t,this.hot.countRows(),this.hot.countCols())?(pe(ue.IS_OUT_OF_BOUNDS_WARNING(t)),e=!1):ue.isSingleCell(t)?(pe(ue.IS_SINGLE_CELL(t)),e=!1):ue.containsZeroSpan(t)&&(pe(ue.ZERO_SPAN_WARNING(t)),e=!1),e):!1}generateFromSettings(t){if(Array.isArray(t)){let e=[];v(t,i=>{if(!this.validateSetting(i))return;let r=new M(i.row,i.col),n=new M(i.row+i.rowspan-1,i.col+i.colspan-1),l=new Ct(r,r,n);e.push(this.mergeRange(l,!0,!0))}),e=e.filter(i=>i!==!0);let o=this.getBulkCollectionData(e);this.hot.populateFromArray(...o)}}getBulkCollectionData(t){let e=this.getBulkCollectionDataRange(t),i=this.hot.getData(...e).splice(0);return v(t,r=>{let[n,l,a]=r;v(a,(h,u)=>{v(h,(m,w)=>{i[n-e[0]+u][l-e[1]+w]=m})})}),[e[0],e[1],i]}getBulkCollectionDataRange(t){let e=[0,0],o=[0,0],i=null,r=null,n=null;return v(t,l=>{i=l[0],r=l[1],n=l[2],e[0]=Math.min(i,e[0]),e[1]=Math.min(r,e[1]),o[0]=Math.max(i+n.length-1,o[0]),o[1]=Math.max(r+n[0].length-1,o[1])}),[...e,...o]}clearCollections(){this.mergedCellsCollection.clear()}canMergeRange(t,e=!1){return e?!0:this.validateSetting(t)}toggleMergeOnSelection(){let t=this.hot.getSelectedRangeLast();if(!t)return;t.setDirection(\"NW-SE\");let{from:e,to:o}=t;this.toggleMerge(t),this.hot.selectCell(e.row,e.col,o.row,o.col,!1)}mergeSelection(t=this.hot.getSelectedRangeLast()){if(!t)return;t.setDirection(\"NW-SE\");let{from:e,to:o}=t;this.unmergeRange(t,!0),this.mergeRange(t),this.hot.selectCell(e.row,e.col,o.row,o.col,!1)}unmergeSelection(t=this.hot.getSelectedRangeLast()){if(!t)return;let{from:e,to:o}=t;this.unmergeRange(t,!0),this.hot.selectCell(e.row,e.col,o.row,o.col,!1)}mergeRange(t,e=!1,o=!1){let i=t.getTopLeftCorner(),r=t.getBottomRightCorner(),n={row:i.row,col:i.col,rowspan:r.row-i.row+1,colspan:r.col-i.col+1},l=[],a=null;return this.canMergeRange(n,e)?(this.hot.runHooks(\"beforeMergeCells\",t,e),P(0,n.rowspan-1,u=>{P(0,n.colspan-1,m=>{let w=null;l[u]||(l[u]=[]),u===0&&m===0?w=this.hot.getDataAtCell(n.row,n.col):this.hot.setCellMeta(n.row+u,n.col+m,\"hidden\",!0),l[u][m]=w})}),this.hot.setCellMeta(n.row,n.col,\"spanned\",!0),this.mergedCellsCollection.add(n)?(o?a=[n.row,n.col,l]:this.hot.populateFromArray(n.row,n.col,l,void 0,void 0,this.pluginName),this.hot.runHooks(\"afterMergeCells\",t,n,e),a):!0):!1}unmergeRange(t,e=!1){let o=this.mergedCellsCollection.getWithinRange(t);o&&(this.hot.runHooks(\"beforeUnmergeCells\",t,e),v(o,i=>{this.mergedCellsCollection.remove(i.row,i.col),P(0,i.rowspan-1,r=>{P(0,i.colspan-1,n=>{this.hot.removeCellMeta(i.row+r,i.col+n,\"hidden\")})}),this.hot.removeCellMeta(i.row,i.col,\"spanned\")}),this.hot.render(),this.hot.runHooks(\"afterUnmergeCells\",t,e))}toggleMerge(t){let e=this.mergedCellsCollection.get(t.from.row,t.from.col);e.row===t.from.row&&e.col===t.from.col&&e.row+e.rowspan-1===t.to.row&&e.col+e.colspan-1===t.to.col?this.unmergeRange(t):this.mergeSelection(t)}merge(t,e,o,i){let r=new M(t,e),n=new M(o,i);this.mergeRange(new Ct(r,r,n))}unmerge(t,e,o,i){let r=new M(t,e),n=new M(o,i);this.unmergeRange(new Ct(r,r,n))}onAfterInit(){this.generateFromSettings(this.hot.getSettings().mergeCells),this.hot.render()}onBeforeKeyDown(t){(t.ctrlKey||t.metaKey)&&!t.altKey&&t.keyCode===77&&(this.toggleMerge(this.hot.getSelectedRangeLast()),this.hot.render(),pt(t))}onAfterIsMultipleSelection(t){if(t){let e=this.mergedCellsCollection.mergedCells,o=this.hot.getSelectedRangeLast();for(let i=0;i<e.length;i+=1)if(o.highlight.row===e[i].row&&o.highlight.col===e[i].col&&o.to.row===e[i].row+e[i].rowspan-1&&o.to.col===e[i].col+e[i].colspan-1)return!1}return t}onModifyTransformStart(t){let e=Kd.get(this),o=this.hot.getSelectedRangeLast(),i={row:t.row,col:t.col},r=null,n=new M(o.highlight.row,o.highlight.col),l=this.mergedCellsCollection.get(n.row,n.col);if(e.lastDesiredCoords||(e.lastDesiredCoords=new M(null,null)),l){let h=new M(l.row,l.col),u=new M(l.row+l.rowspan-1,l.col+l.colspan-1);new Ct(h,h,u).includes(e.lastDesiredCoords)||(e.lastDesiredCoords=new M(null,null)),i.row=e.lastDesiredCoords.row?e.lastDesiredCoords.row-n.row:i.row,i.col=e.lastDesiredCoords.col?e.lastDesiredCoords.col-n.col:i.col,t.row>0?i.row=l.row+l.rowspan-1-n.row+t.row:t.row<0&&(i.row=n.row-l.row+t.row),t.col>0?i.col=l.col+l.colspan-1-n.col+t.col:t.col<0&&(i.col=n.col-l.col+t.col)}r=new M(o.highlight.row+i.row,o.highlight.col+i.col);let a=this.mergedCellsCollection.get(r.row,r.col);a&&(e.lastDesiredCoords=r,i={row:a.row-n.row,col:a.col-n.col}),i.row!==0&&(t.row=i.row),i.col!==0&&(t.col=i.col)}onModifyTransformEnd(t){let e=this.hot.getSelectedRangeLast(),o=ni(t),i=this.selectionCalculations.getUpdatedSelectionRange(e,t),r=ni(o),n=this.mergedCellsCollection.getWithinRange(i,!0);do r=ni(o),this.selectionCalculations.getUpdatedSelectionRange(e,o),v(n,l=>{this.selectionCalculations.snapDelta(o,e,l)});while(o.row!==r.row||o.col!==r.col);t.row=o.row,t.col=o.col}onModifyGetCellCoords(t,e){let o=this.mergedCellsCollection.get(t,e);return o?[o.row,o.col,o.row+o.rowspan-1,o.col+o.colspan-1]:void 0}addMergeActionsToContextMenu(t){t.items.push({name:\"---------\"},Wh(this))}onAfterRenderer(t,e,o){let i=this.mergedCellsCollection.get(e,o);Ms(t,i,e,o)}onBeforeSetRangeEnd(t){let e=this.hot.getSelectedRangeLast();e.highlight=new M(e.highlight.row,e.highlight.col),e.to=t;let o=!1;if(!(e.from.row===0&&e.to.row===this.hot.countRows()-1||e.from.col===0&&e.to.col===this.hot.countCols()-1))do{o=!1;for(let i=0;i<this.mergedCellsCollection.mergedCells.length;i+=1){let n=this.mergedCellsCollection.mergedCells[i].getRange();e.expandByRange(n)&&(t.row=e.to.row,t.col=e.to.col,o=!0)}}while(o)}onAfterGetCellMeta(t,e,o){let i=this.mergedCellsCollection.get(t,e);i&&(i.row!==t||i.col!==e)&&(o.copyable=!1)}onAfterViewportRowCalculatorOverride(t){let e=this.hot.countCols(),o;P(0,e-1,i=>{if(o=this.mergedCellsCollection.get(t.startRow,i),o&&o.row<t.startRow)return t.startRow=o.row,this.onAfterViewportRowCalculatorOverride.call(this,t);if(o=this.mergedCellsCollection.get(t.endRow,i),o){let r=o.row+o.rowspan-1;if(r>t.endRow)return t.endRow=r,this.onAfterViewportRowCalculatorOverride.call(this,t)}return!0})}onAfterViewportColumnCalculatorOverride(t){let e=this.hot.countRows(),o;P(0,e-1,i=>{if(o=this.mergedCellsCollection.get(i,t.startColumn),o&&o.col<t.startColumn)return t.startColumn=o.col,this.onAfterViewportColumnCalculatorOverride.call(this,t);if(o=this.mergedCellsCollection.get(i,t.endColumn),o){let r=o.col+o.colspan-1;if(r>t.endColumn)return t.endColumn=r,this.onAfterViewportColumnCalculatorOverride.call(this,t)}return!0})}onModifyAutofillRange(t,e){this.autofillCalculations.correctSelectionAreaSize(e);let o=this.autofillCalculations.getDirection(e,t),i=t;if(this.autofillCalculations.dragAreaOverlapsCollections(e,i,o))return i=e,i;let r=this.mergedCellsCollection.getWithinRange({from:{row:e[0],col:e[1]},to:{row:e[2],col:e[3]}});return r&&(i=this.autofillCalculations.snapDragArea(e,i,o,r)),i}onAfterCreateCol(t,e){this.mergedCellsCollection.shiftCollections(\"right\",t,e)}onAfterRemoveCol(t,e){this.mergedCellsCollection.shiftCollections(\"left\",t,e)}onAfterCreateRow(t,e,o){o!==\"auto\"&&this.mergedCellsCollection.shiftCollections(\"down\",t,e)}onAfterRemoveRow(t,e){this.mergedCellsCollection.shiftCollections(\"up\",t,e)}onAfterChange(t,e){e===\"Autofill.fill\"&&this.autofillCalculations.recreateAfterDataPopulation(t)}onBeforeDrawAreaBorders(t,e){if(e&&e===\"area\"){let o=this.hot.getSelectedRangeLast(),i=this.mergedCellsCollection.getWithinRange(o);v(i,r=>{o.getBottomRightCorner().row===r.getLastRow()&&o.getBottomRightCorner().col===r.getLastColumn()&&(t[2]=r.row,t[3]=r.col)})}}onAfterModifyTransformStart(t,e,o){if(!this.enabled)return;let i=this.mergedCellsCollection.get(t.row,t.col);if(!i)return;let r=e>0,n=e<0,l=o<0,a=o>0,h=i.row+i.rowspan-1===this.hot.countRows()-1,u=i.row===0,m=i.col+i.colspan-1===this.hot.countCols()-1,w=i.col===0;(r&&h||n&&u||a&&m||l&&w)&&(t.row=i.row,t.col=i.col)}onAfterDrawSelection(t,e,o,i){return this.selectionCalculations.getSelectedMergedCellClassName(t,e,o,i)}onBeforeRemoveCellClassNames(){return this.selectionCalculations.getSelectedMergedCellClassNameToRemove()}};J(\"mergeCells\",Wr);var qd=Wr;var Fr=class extends Z{constructor(t){super(t),this.dragged=[],this.eventManager=null,this.lastSetCell=null}isEnabled(){return $t()}enablePlugin(){this.enabled||(this.eventManager||(this.eventManager=new G(this)),this.registerListeners(),super.enablePlugin())}registerListeners(){let t=this;function e(o){if(t.dragged.length===1)return t.dragged.splice(0,t.dragged.length),!0;let i=t.dragged.indexOf(o);if(i===-1)return!1;i===0?t.dragged=t.dragged.slice(0,1):i===1&&(t.dragged=t.dragged.slice(-1))}this.eventManager.addEventListener(this.hot.rootElement,\"touchstart\",o=>{let i;if(z(o.target,\"topLeftSelectionHandle-HitArea\"))return i=t.hot.getSelectedRangeLast(),t.dragged.push(\"topLeft\"),t.touchStartRange={width:i.getWidth(),height:i.getHeight(),direction:i.getDirection()},o.preventDefault(),!1;if(z(o.target,\"bottomRightSelectionHandle-HitArea\"))return i=t.hot.getSelectedRangeLast(),t.dragged.push(\"bottomRight\"),t.touchStartRange={width:i.getWidth(),height:i.getHeight(),direction:i.getDirection()},o.preventDefault(),!1}),this.eventManager.addEventListener(this.hot.rootElement,\"touchend\",o=>{if(z(o.target,\"topLeftSelectionHandle-HitArea\"))return e.call(t,\"topLeft\"),t.touchStartRange=void 0,o.preventDefault(),!1;if(z(o.target,\"bottomRightSelectionHandle-HitArea\"))return e.call(t,\"bottomRight\"),t.touchStartRange=void 0,o.preventDefault(),!1}),this.eventManager.addEventListener(this.hot.rootElement,\"touchmove\",o=>{let i=fe(),r=qt(),n,l,a,h,u,m;if(t.dragged.length===0)return;let w=document.elementFromPoint(o.touches[0].screenX-r,o.touches[0].screenY-i);!w||w===t.lastSetCell||((w.nodeName===\"TD\"||w.nodeName===\"TH\")&&(n=t.hot.getCoords(w),n.col===-1&&(n.col=0),l=t.hot.getSelectedRangeLast(),a=l.getWidth(),h=l.getHeight(),u=l.getDirection(),a===1&&h===1&&t.hot.selection.setRangeEnd(n),m=t.getCurrentRangeCoords(l,n,t.touchStartRange.direction,u,t.dragged[0]),m.start!==null&&t.hot.selection.setRangeStart(m.start),t.hot.selection.setRangeEnd(m.end),t.lastSetCell=w),o.preventDefault())})}getCurrentRangeCoords(t,e,o,i,r){let n=t.getTopLeftCorner(),l=t.getBottomRightCorner(),a=t.getBottomLeftCorner(),h=t.getTopRightCorner(),u={start:null,end:null};switch(o){case\"NE-SW\":switch(i){case\"NE-SW\":case\"NW-SE\":r===\"topLeft\"?u={start:new M(e.row,t.highlight.col),end:new M(a.row,e.col)}:u={start:new M(t.highlight.row,e.col),end:new M(e.row,n.col)};break;case\"SE-NW\":r===\"bottomRight\"&&(u={start:new M(l.row,e.col),end:new M(e.row,n.col)});break;default:break}break;case\"NW-SE\":switch(i){case\"NE-SW\":r===\"topLeft\"?u={start:e,end:a}:u.end=e;break;case\"NW-SE\":r===\"topLeft\"?u={start:e,end:l}:u.end=e;break;case\"SE-NW\":r===\"topLeft\"?u={start:e,end:n}:u.end=e;break;case\"SW-NE\":r===\"topLeft\"?u={start:e,end:h}:u.end=e;break;default:break}break;case\"SW-NE\":switch(i){case\"NW-SE\":r===\"bottomRight\"?u={start:new M(e.row,n.col),end:new M(a.row,e.col)}:u={start:new M(n.row,e.col),end:new M(e.row,l.col)};break;case\"SW-NE\":r===\"topLeft\"?u={start:new M(t.highlight.row,e.col),end:new M(e.row,l.col)}:u={start:new M(e.row,n.col),end:new M(n.row,e.col)};break;case\"SE-NW\":r===\"bottomRight\"?u={start:new M(e.row,h.col),end:new M(n.row,e.col)}:r===\"topLeft\"&&(u={start:a,end:e});break;default:break}break;case\"SE-NW\":switch(i){case\"NW-SE\":case\"NE-SW\":case\"SW-NE\":r===\"topLeft\"&&(u.end=e);break;case\"SE-NW\":r===\"topLeft\"?u.end=e:u={start:e,end:n};break;default:break}break;default:break}return u}isDragged(){return this.dragged.length>0}};J(\"multipleSelectionHandles\",Fr);var Qd=Fr;var Vr=Wo(Jd());function tf(s){let t=[],e=Kt(s,o=>!(/[/]length/ig.test(o.path)||!Zd(o.path)));return e=ht(e,o=>{let i=Zd(o.path);return o.row=i.row,o.col=i.col,o}),e=Kt(e,o=>{if([\"add\",\"remove\"].indexOf(o.op)!==-1&&!isNaN(o.col)){if(t.indexOf(o.col)!==-1)return!1;t.push(o.col)}return!0}),t.length=0,e}function Zd(s){let t=s.match(/^\\/(\\d+)\\/?(.*)?$/);if(!t)return null;let[,e,o]=t;return{row:parseInt(e,10),col:/^\\d*$/.test(o)?parseInt(o,10):o}}var Ur=class{constructor(t){this.observedData=null,this.observer=null,this.paused=!1,this.setObservedData(t)}setObservedData(t){this.observer&&Vr.default.unobserve(this.observedData,this.observer),this.observedData=t,this.observer=Vr.default.observe(this.observedData,e=>this.onChange(e))}isPaused(){return this.paused}pause(){this.paused=!0}resume(){this.paused=!1}onChange(t){this.runLocalHooks(\"change\",tf(t))}destroy(){Vr.default.unobserve(this.observedData,this.observer),this.observedData=null,this.observer=null}};Lt(Ur,ge);var ef=Ur;var zr=class extends Z{constructor(t){super(t),this.observer=null}isEnabled(){return this.hot.getSettings().observeChanges}enablePlugin(){this.enabled||(this.observer||(this.observer=new ef(this.hot.getSourceData()),this._exposePublicApi()),this.observer.addLocalHook(\"change\",t=>this.onDataChange(t)),this.addHook(\"afterCreateRow\",()=>this.onAfterTableAlter()),this.addHook(\"afterRemoveRow\",()=>this.onAfterTableAlter()),this.addHook(\"afterCreateCol\",()=>this.onAfterTableAlter()),this.addHook(\"afterRemoveCol\",()=>this.onAfterTableAlter()),this.addHook(\"afterChange\",(t,e)=>this.onAfterTableAlter(e)),this.addHook(\"afterLoadData\",t=>this.onAfterLoadData(t)),super.enablePlugin())}disablePlugin(){this.observer&&(this.observer.destroy(),this.observer=null,this._deletePublicApi()),super.disablePlugin()}onDataChange(t){if(!this.observer.isPaused()){let e=`${this.pluginName}.change`,o={add:i=>{isNaN(i.col)?this.hot.runHooks(\"afterCreateRow\",i.row,1,e):this.hot.runHooks(\"afterCreateCol\",i.col,1,e)},remove:i=>{isNaN(i.col)?this.hot.runHooks(\"afterRemoveRow\",i.row,1,e):this.hot.runHooks(\"afterRemoveCol\",i.col,1,e)},replace:i=>{this.hot.runHooks(\"afterChange\",[[i.row,i.col,null,i.value]],e)}};v(t,i=>{o[i.op]&&o[i.op](i)}),this.hot.render()}this.hot.runHooks(\"afterChangesObserved\")}onAfterTableAlter(t){t!==\"loadData\"&&(this.observer.pause(),this.hot.addHookOnce(\"afterChangesObserved\",()=>this.observer.resume()))}onAfterLoadData(t){t||this.observer.setObservedData(this.hot.getSourceData())}destroy(){this.observer&&(this.observer.destroy(),this._deletePublicApi()),super.destroy()}_exposePublicApi(){let t=this.hot;t.pauseObservingChanges=()=>this.observer.pause(),t.resumeObservingChanges=()=>this.observer.resume(),t.isPausedObservingChanges=()=>this.observer.isPaused()}_deletePublicApi(){let t=this.hot;delete t.pauseObservingChanges,delete t.resumeObservingChanges,delete t.isPausedObservingChanges}},of=zr;J(\"observeChanges\",zr);var $p=\"htSearchResult\",Yp=function(s,t,e,o,i){s.getCellMeta(t,e).isSearchResult=i},Gp=function(s,t){return gt(s)||s===null||!s.toLowerCase||s.length===0||gt(t)||t===null?!1:t.toString().toLowerCase().indexOf(s.toLowerCase())!==-1},$r=class extends Z{constructor(t){super(t),this.callback=Yp,this.queryMethod=Gp,this.searchResultClass=$p}isEnabled(){return this.hot.getSettings().search}enablePlugin(){if(this.enabled)return;let t=this.hot.getSettings().search;this.updatePluginSettings(t),this.addHook(\"beforeRenderer\",(...e)=>this.onBeforeRenderer(...e)),super.enablePlugin()}disablePlugin(){let t=(...e)=>this.onBeforeRenderer(...e);this.hot.addHook(\"beforeRenderer\",t),this.hot.addHookOnce(\"afterRender\",()=>{this.hot.removeHook(\"beforeRenderer\",t)}),super.disablePlugin()}updatePlugin(){this.disablePlugin(),this.enablePlugin(),super.updatePlugin()}query(t,e=this.getCallback(),o=this.getQueryMethod()){let i=this.hot.countRows(),r=this.hot.countCols(),n=[],l=this.hot;return P(0,i-1,a=>{P(0,r-1,h=>{let u=this.hot.getDataAtCell(a,h),m=this.hot.getCellMeta(a,h),w=m.search.callback||e,A=(m.search.queryMethod||o)(t,u);if(A){let O={row:a,col:h,data:u};n.push(O)}w&&w(l,a,h,u,A)})}),n}getCallback(){return this.callback}setCallback(t){this.callback=t}getQueryMethod(){return this.queryMethod}setQueryMethod(t){this.queryMethod=t}getSearchResultClass(){return this.searchResultClass}setSearchResultClass(t){this.searchResultClass=t}updatePluginSettings(t){K(t)&&(t.searchResultClass&&this.setSearchResultClass(t.searchResultClass),t.queryMethod&&this.setQueryMethod(t.queryMethod),t.callback&&this.setCallback(t.callback))}onBeforeRenderer(t,e,o,i,r,n){let l=n.className||[],a=[];typeof l==\"string\"?a=l.split(\" \"):a.push(...l),this.isEnabled()&&n.isSearchResult?a.includes(this.searchResultClass)||a.push(`${this.searchResultClass}`):a.includes(this.searchResultClass)&&a.splice(a.indexOf(this.searchResultClass),1),n.className=a.join(\" \")}destroy(){super.destroy()}};J(\"search\",$r);var sf=$r;var Yr=class extends Z{constructor(t){super(t),this.scrollbars=[],this.clones=[],this.lockedCollection=!1,this.freezeOverlays=!1}isEnabled(){return ci()}enablePlugin(){this.enabled||(this.addHook(\"afterRender\",()=>this.onAfterRender()),this.registerEvents(),super.enablePlugin())}updatePlugin(){this.lockedCollection=!1,super.updatePlugin()}disablePlugin(){super.disablePlugin()}registerEvents(){this.addHook(\"beforeTouchScroll\",()=>this.onBeforeTouchScroll()),this.addHook(\"afterMomentumScroll\",()=>this.onAfterMomentumScroll())}onAfterRender(){if(this.lockedCollection)return;let{topOverlay:t,bottomOverlay:e,leftOverlay:o,topLeftCornerOverlay:i,bottomLeftCornerOverlay:r}=this.hot.view.wt.wtOverlays;this.lockedCollection=!0,this.scrollbars.length=0,this.scrollbars.push(t),e.clone&&this.scrollbars.push(e),this.scrollbars.push(o),i&&this.scrollbars.push(i),r&&r.clone&&this.scrollbars.push(r),this.clones.length=0,t.needFullRender&&this.clones.push(t.clone.wtTable.holder.parentNode),e.needFullRender&&this.clones.push(e.clone.wtTable.holder.parentNode),o.needFullRender&&this.clones.push(o.clone.wtTable.holder.parentNode),i&&this.clones.push(i.clone.wtTable.holder.parentNode),r&&r.clone&&this.clones.push(r.clone.wtTable.holder.parentNode)}onBeforeTouchScroll(){this.freezeOverlays=!0,v(this.clones,t=>{L(t,\"hide-tween\")})}onAfterMomentumScroll(){this.freezeOverlays=!1,v(this.clones,t=>{Y(t,\"hide-tween\"),L(t,\"show-tween\")}),setTimeout(()=>{v(this.clones,t=>{Y(t,\"show-tween\")})},400),v(this.scrollbars,t=>{t.refresh(),t.resetFixedPosition()}),this.hot.view.wt.wtOverlays.syncScrollWithMaster()}};J(\"touchScroll\",Yr);var rf=Yr;function W(s){let t=this;this.instance=s,this.doneActions=[],this.undoneActions=[],this.ignoreNewActions=!1,s.addHook(\"afterChange\",(e,o)=>{e&&o!==\"UndoRedo.undo\"&&o!==\"UndoRedo.redo\"&&o!==\"MergeCells\"&&t.done(new W.ChangeAction(e))}),s.addHook(\"afterCreateRow\",(e,o,i)=>{if(i===\"UndoRedo.undo\"||i===\"UndoRedo.undo\"||i===\"auto\")return;let r=new W.CreateRowAction(e,o);t.done(r)}),s.addHook(\"beforeRemoveRow\",(e,o,i,r)=>{if(r===\"UndoRedo.undo\"||r===\"UndoRedo.redo\"||r===\"auto\")return;let n=t.instance.getSourceDataArray(),l=(n.length+e)%n.length,a=s.toPhysicalRow(l),h=Rt(n.slice(a,a+o));t.done(new W.RemoveRowAction(l,h))}),s.addHook(\"afterCreateCol\",(e,o,i)=>{i===\"UndoRedo.undo\"||i===\"UndoRedo.redo\"||i===\"auto\"||t.done(new W.CreateColumnAction(e,o))}),s.addHook(\"beforeRemoveCol\",(e,o,i,r)=>{if(r===\"UndoRedo.undo\"||r===\"UndoRedo.redo\"||r===\"auto\")return;let n=t.instance.getSourceDataArray(),l=(t.instance.countCols()+e)%t.instance.countCols(),a=[],h=[],u=[];P(n.length-1,A=>{let O=[],D=n[A];P(l,l+(o-1),B=>{O.push(D[s.runHooks(\"modifyCol\",B)])}),a.push(O)}),P(o-1,A=>{u.push(s.runHooks(\"modifyCol\",l+A))}),Array.isArray(s.getSettings().colHeaders)&&P(o-1,A=>{h.push(s.getSettings().colHeaders[s.runHooks(\"modifyCol\",l+A)]||null)});let m=t.instance.getPlugin(\"manualColumnMove\"),w=m.isEnabled()?m.columnsMapper.__arrayMap:[],R=new W.RemoveColumnAction(l,u,a,h,w);t.done(R)}),s.addHook(\"beforeCellAlignment\",(e,o,i,r)=>{let n=new W.CellAlignmentAction(e,o,i,r);t.done(n)}),s.addHook(\"beforeFilter\",e=>{t.done(new W.FiltersAction(e))}),s.addHook(\"beforeRowMove\",(e,o)=>{e!==!1&&t.done(new W.RowMoveAction(e,o))}),s.addHook(\"beforeMergeCells\",(e,o)=>{o||t.done(new W.MergeCellsAction(s,e))}),s.addHook(\"afterUnmergeCells\",(e,o)=>{o||t.done(new W.UnmergeCellsAction(s,e))})}W.prototype.done=function(s){this.ignoreNewActions||(this.doneActions.push(s),this.undoneActions.length=0)};W.prototype.undo=function(){if(this.isUndoAvailable()){let s=this.doneActions.pop(),t=Rt(s),e=this.instance;if(e.runHooks(\"beforeUndo\",t)===!1)return;this.ignoreNewActions=!0;let i=this;s.undo(this.instance,()=>{i.ignoreNewActions=!1,i.undoneActions.push(s)}),e.runHooks(\"afterUndo\",t)}};W.prototype.redo=function(){if(this.isRedoAvailable()){let s=this.undoneActions.pop(),t=Rt(s),e=this.instance;if(e.runHooks(\"beforeRedo\",t)===!1)return;this.ignoreNewActions=!0;let i=this;s.redo(this.instance,()=>{i.ignoreNewActions=!1,i.doneActions.push(s)}),e.runHooks(\"afterRedo\",t)}};W.prototype.isUndoAvailable=function(){return this.doneActions.length>0};W.prototype.isRedoAvailable=function(){return this.undoneActions.length>0};W.prototype.clear=function(){this.doneActions.length=0,this.undoneActions.length=0};W.Action=function(){};W.Action.prototype.undo=function(){};W.Action.prototype.redo=function(){};W.ChangeAction=function(s){this.changes=s,this.actionType=\"change\"};Re(W.ChangeAction,W.Action);W.ChangeAction.prototype.undo=function(s,t){let e=Rt(this.changes),o=s.countEmptyRows(!0),i=s.countEmptyCols(!0);for(let r=0,n=e.length;r<n;r++)e[r].splice(3,1);s.addHookOnce(\"afterChange\",t),s.setDataAtRowProp(e,null,null,\"UndoRedo.undo\");for(let r=0,n=e.length;r<n;r++)s.getSettings().minSpareRows&&e[r][0]+1+s.getSettings().minSpareRows===s.countRows()&&o===s.getSettings().minSpareRows&&(s.alter(\"remove_row\",parseInt(e[r][0]+1,10),s.getSettings().minSpareRows),s.undoRedo.doneActions.pop()),s.getSettings().minSpareCols&&e[r][1]+1+s.getSettings().minSpareCols===s.countCols()&&i===s.getSettings().minSpareCols&&(s.alter(\"remove_col\",parseInt(e[r][1]+1,10),s.getSettings().minSpareCols),s.undoRedo.doneActions.pop())};W.ChangeAction.prototype.redo=function(s,t){let e=Rt(this.changes);for(let o=0,i=e.length;o<i;o++)e[o].splice(2,1);s.addHookOnce(\"afterChange\",t),s.setDataAtRowProp(e,null,null,\"UndoRedo.redo\")};W.CreateRowAction=function(s,t){this.index=s,this.amount=t,this.actionType=\"insert_row\"};Re(W.CreateRowAction,W.Action);W.CreateRowAction.prototype.undo=function(s,t){let e=s.countRows(),o=s.getSettings().minSpareRows;this.index>=e&&this.index-o<e&&(this.index-=o),s.addHookOnce(\"afterRemoveRow\",t),s.alter(\"remove_row\",this.index,this.amount,\"UndoRedo.undo\")};W.CreateRowAction.prototype.redo=function(s,t){s.addHookOnce(\"afterCreateRow\",t),s.alter(\"insert_row\",this.index,this.amount,\"UndoRedo.redo\")};W.RemoveRowAction=function(s,t){this.index=s,this.data=t,this.actionType=\"remove_row\"};Re(W.RemoveRowAction,W.Action);W.RemoveRowAction.prototype.undo=function(s,t){s.alter(\"insert_row\",this.index,this.data.length,\"UndoRedo.undo\"),s.addHookOnce(\"afterRender\",t),s.populateFromArray(this.index,0,this.data,void 0,void 0,\"UndoRedo.undo\")};W.RemoveRowAction.prototype.redo=function(s,t){s.addHookOnce(\"afterRemoveRow\",t),s.alter(\"remove_row\",this.index,this.data.length,\"UndoRedo.redo\")};W.CreateColumnAction=function(s,t){this.index=s,this.amount=t,this.actionType=\"insert_col\"};Re(W.CreateColumnAction,W.Action);W.CreateColumnAction.prototype.undo=function(s,t){s.addHookOnce(\"afterRemoveCol\",t),s.alter(\"remove_col\",this.index,this.amount,\"UndoRedo.undo\")};W.CreateColumnAction.prototype.redo=function(s,t){s.addHookOnce(\"afterCreateCol\",t),s.alter(\"insert_col\",this.index,this.amount,\"UndoRedo.redo\")};W.RemoveColumnAction=function(s,t,e,o,i){this.index=s,this.indexes=t,this.data=e,this.amount=this.data[0].length,this.headers=o,this.columnPositions=i.slice(0),this.actionType=\"remove_col\"};Re(W.RemoveColumnAction,W.Action);W.RemoveColumnAction.prototype.undo=function(s,t){let e,o=this.indexes.slice(0).sort(),i=(a,h,u)=>u[this.indexes.indexOf(o[h])],r=[];P(this.data.length-1,a=>{r[a]=ht(this.data[a],i)});let n=[];n=ht(this.headers,i);let l=[];s.runHooks(\"beforeCreateCol\",this.indexes[0],this.indexes.length,\"UndoRedo.undo\"),P(this.data.length-1,a=>{e=s.getSourceDataAtRow(a),P(o.length-1,h=>{e.splice(o[h],0,r[a][h]),l.push([a,o[h],null,r[a][h]])})}),s.getPlugin(\"formulas\")&&s.getPlugin(\"formulas\").onAfterSetDataAtCell(l),typeof this.headers<\"u\"&&P(n.length-1,a=>{s.getSettings().colHeaders.splice(o[a],0,n[a])}),s.getPlugin(\"manualColumnMove\")&&(s.getPlugin(\"manualColumnMove\").columnsMapper.__arrayMap=this.columnPositions),s.addHookOnce(\"afterRender\",t),s.runHooks(\"afterCreateCol\",this.indexes[0],this.indexes.length,\"UndoRedo.undo\"),s.getPlugin(\"formulas\")&&s.getPlugin(\"formulas\").recalculateFull(),s.render()};W.RemoveColumnAction.prototype.redo=function(s,t){s.addHookOnce(\"afterRemoveCol\",t),s.alter(\"remove_col\",this.index,this.amount,\"UndoRedo.redo\")};W.CellAlignmentAction=function(s,t,e,o){this.stateBefore=s,this.range=t,this.type=e,this.alignment=o};W.CellAlignmentAction.prototype.undo=function(s,t){v(this.range,({from:e,to:o})=>{for(let i=e.row;i<=o.row;i+=1)for(let r=e.col;r<=o.col;r+=1)s.setCellMeta(i,r,\"className\",this.stateBefore[i][r]||\" htLeft\")}),s.addHookOnce(\"afterRender\",t),s.render()};W.CellAlignmentAction.prototype.redo=function(s,t){Fe(this.range,this.type,this.alignment,(e,o)=>s.getCellMeta(e,o),(e,o,i,r)=>s.setCellMeta(e,o,i,r)),s.addHookOnce(\"afterRender\",t),s.render()};W.FiltersAction=function(s){this.conditionsStack=s,this.actionType=\"filter\"};Re(W.FiltersAction,W.Action);W.FiltersAction.prototype.undo=function(s,t){let e=s.getPlugin(\"filters\");s.addHookOnce(\"afterRender\",t),e.conditionCollection.importAllConditions(this.conditionsStack.slice(0,this.conditionsStack.length-1)),e.filter()};W.FiltersAction.prototype.redo=function(s,t){let e=s.getPlugin(\"filters\");s.addHookOnce(\"afterRender\",t),e.conditionCollection.importAllConditions(this.conditionsStack),e.filter()};var Vh=class extends W.Action{constructor(t,e){super(),this.cellRange=e,this.rangeData=t.getData(e.from.row,e.from.col,e.to.row,e.to.col)}undo(t,e){let o=t.getPlugin(\"mergeCells\");t.addHookOnce(\"afterRender\",e),o.unmergeRange(this.cellRange,!0),t.populateFromArray(this.cellRange.from.row,this.cellRange.from.col,this.rangeData,void 0,void 0,\"MergeCells\")}redo(t,e){let o=t.getPlugin(\"mergeCells\");t.addHookOnce(\"afterRender\",e),o.mergeRange(this.cellRange)}};W.MergeCellsAction=Vh;var Uh=class extends W.Action{constructor(t,e){super(),this.cellRange=e}undo(t,e){let o=t.getPlugin(\"mergeCells\");t.addHookOnce(\"afterRender\",e),o.mergeRange(this.cellRange,!0)}redo(t,e){let o=t.getPlugin(\"mergeCells\");t.addHookOnce(\"afterRender\",e),o.unmergeRange(this.cellRange,!0),t.render()}};W.UnmergeCellsAction=Uh;W.RowMoveAction=function(s,t){this.rows=s.slice(),this.target=t};Re(W.RowMoveAction,W.Action);W.RowMoveAction.prototype.undo=function(s,t){let e=s.getPlugin(\"manualRowMove\");s.addHookOnce(\"afterRender\",t);let o=this.rows[0]<this.target?-1*this.rows.length:0,i=this.rows[0]>this.target?this.rows[0]+this.rows.length:this.rows[0],r=[],n=this.rows.length+o;for(let l=o;l<n;l+=1)r.push(this.target+l);e.moveRows(r.slice(),i),s.render(),s.selectCell(this.rows[0],0,this.rows[this.rows.length-1],s.countCols()-1,!1,!1)};W.RowMoveAction.prototype.redo=function(s,t){let e=s.getPlugin(\"manualRowMove\");s.addHookOnce(\"afterRender\",t),e.moveRows(this.rows.slice(),this.target),s.render();let o=this.rows[0]<this.target?this.target-this.rows.length:this.target;s.selectCell(o,0,o+this.rows.length-1,s.countCols()-1,!1,!1)};function af(){let s=this;typeof s.getSettings().undo>\"u\"||s.getSettings().undo?s.undoRedo||(s.undoRedo=new W(s),Xp(s),s.addHook(\"beforeKeyDown\",nf),s.addHook(\"afterChange\",lf)):s.undoRedo&&(delete s.undoRedo,jp(s),s.removeHook(\"beforeKeyDown\",nf),s.removeHook(\"afterChange\",lf))}function nf(s){let t=this;(s.ctrlKey||s.metaKey)&&!s.altKey&&(s.keyCode===89||s.shiftKey&&s.keyCode===90?(t.undoRedo.redo(),pt(s)):s.keyCode===90&&(t.undoRedo.undo(),pt(s)))}function lf(s,t){let e=this;if(t===\"loadData\")return e.undoRedo.clear()}function Xp(s){s.undo=function(){return s.undoRedo.undo()},s.redo=function(){return s.undoRedo.redo()},s.isUndoAvailable=function(){return s.undoRedo.isUndoAvailable()},s.isRedoAvailable=function(){return s.undoRedo.isRedoAvailable()},s.clearUndo=function(){return s.undoRedo.clear()}}function jp(s){delete s.undo,delete s.redo,delete s.isUndoAvailable,delete s.isRedoAvailable,delete s.clearUndo}var ii=V.getSingleton();ii.add(\"afterInit\",af);ii.add(\"afterUpdateSettings\",af);ii.register(\"beforeUndo\");ii.register(\"afterUndo\");ii.register(\"beforeRedo\");ii.register(\"afterRedo\");var hf=W;function Q(s,t){let e=new co(s,t||{},Pl);return e.init(),e}Ia(Q);Q.Core=co;Q.DefaultSettings=Js;Q.EventManager=G;Q._getListenersCounter=Zh;Q.buildDate=\"2026-03-15T04:32:27.453Z\";Q.packageName=\"handsontable\";Q.version=\"6.2.2\";var cf=\"\";cf&&(Q.baseVersion=cf);Q.hooks=V.getSingleton();Q.__GhostTable=Qo;var Kp=[Jr,mn,Nl,El,wn,Pn,kn,zn,Zr,Ol,In,Fn],qp=[Nn,Ln];Q.helper={};Q.dom={};v(Kp,s=>{v(Object.getOwnPropertyNames(s),t=>{t.charAt(0)!==\"_\"&&(Q.helper[t]=s[t])})});v(qp,s=>{v(Object.getOwnPropertyNames(s),t=>{t.charAt(0)!==\"_\"&&(Q.dom[t]=s[t])})});Q.cellTypes={};v(Kc(),s=>{Q.cellTypes[s]=Ro(s)});Q.cellTypes.registerCellType=Ne;Q.cellTypes.getCellType=Ro;Q.editors={};v(Tc(),s=>{Q.editors[`${Oe(s)}Editor`]=Nt(s)});Q.editors.registerEditor=Xt;Q.editors.getEditor=Nt;Q.renderers={};v(_c(),s=>{let t=nt(s);s===\"base\"&&(Q.renderers.cellDecorator=t),Q.renderers[`${Oe(s)}Renderer`]=t});Q.renderers.registerRenderer=Ae;Q.renderers.getRenderer=nt;Q.validators={};v(kc(),s=>{Q.validators[`${Oe(s)}Validator`]=jt(s)});Q.validators.registerValidator=ho;Q.validators.getValidator=jt;Q.plugins={};v(Object.getOwnPropertyNames(Gr),s=>{let t=Gr[s];s===\"Base\"?Q.plugins[`${s}Plugin`]=t:Q.plugins[s]=t});Q.plugins.registerPlugin=J;Q.languages={};Q.languages.dictionaryKeys=wt;Q.languages.getLanguageDictionary=tr;Q.languages.getLanguagesDictionaries=gu;Q.languages.registerLanguageDictionary=va;Q.languages.getTranslatedPhrase=(...s)=>er(...s);var Qp=Q;return $h(Jp);})();\n/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * json-patch-duplex.js version: 0.5.7\n * (c) 2013 Joachim Wester\n * MIT license\n */\n/**\n * @preserve\n * Authors: Handsoncode\n * Last updated: Nov 15, 2017\n *\n * Description: Definition file for English - United States language-country.\n */\nHandsontable=Handsontable.default||Handsontable;window.Handsontable=Handsontable;\n"
  },
  {
    "path": "modules/system/assets/vendor/jcrop/MIT-LICENSE.txt",
    "content": "Copyright (c) 2011 Tapmodo Interactive LLC,\n  http://github.com/tapmodo/Jcrop\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n"
  },
  {
    "path": "modules/system/assets/vendor/jcrop/OCTOBER-README.md",
    "content": "There's a hack in line 1090 in jquery.Jcrop.js. The hack prevents DOM element leakage through the event that is not unbound in the destroy() method. --ab Apr 08 2015"
  },
  {
    "path": "modules/system/assets/vendor/jcrop/README.md",
    "content": "Jcrop Image Cropping Plugin\n===========================\n\nJcrop is the quick and easy way to add image cropping functionality to\nyour web application. It combines the ease-of-use of a typical jQuery\nplugin with a powerful cross-platform DHTML cropping engine that is\nfaithful to familiar desktop graphics applications.\n\nCross-platform Compatibility\n----------------------------\n\n* Firefox 2+\n* Safari 3+\n* Opera 9.5+\n* Google Chrome 0.2+\n* Internet Explorer 6+\n\nFeature Overview\n----------------\n\n* Attaches unobtrusively to any image\n* Supports aspect ratio locking\n* Supports minSize/maxSize setting\n* Callbacks for selection done, or while moving\n* Keyboard support for nudging selection\n* API features to create interactivity, including animation\n* Support for CSS styling\n* Experimental touch-screen support (iOS, Android, etc)\n\nContributors\n============\n\n**Special thanks to the following contributors:**\n\n* [Bruno Agutoli](mailto:brunotla1@gmail.com)\n* dhorrigan\n* Phil-B\n* jaymecd\n* all others who have committed their time and effort to help improve Jcrop\n\nMIT License\n===========\n\n**Jcrop is free software under MIT License.**\n\n#### Copyright (c) 2008-2012 Tapmodo Interactive LLC,<br />http://github.com/tapmodo/Jcrop\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n"
  },
  {
    "path": "modules/system/assets/vendor/jcrop/js/jquery.Jcrop.js",
    "content": "/**\n * jquery.Jcrop.js v0.9.12\n * jQuery Image Cropping Plugin - released under MIT License \n * Author: Kelly Hallman <khallman@gmail.com>\n * http://github.com/tapmodo/Jcrop\n * Copyright (c) 2008-2013 Tapmodo Interactive LLC {{{\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n *\n * }}}\n */\n\n(function ($) {\n\n  $.Jcrop = function (obj, opt) {\n    var options = $.extend({}, $.Jcrop.defaults),\n        docOffset,\n        _ua = navigator.userAgent.toLowerCase(),\n        is_msie = /msie/.test(_ua),\n        ie6mode = /msie [1-6]\\./.test(_ua);\n\n    // Internal Methods {{{\n    function px(n) {\n      return Math.round(n) + 'px';\n    }\n    function cssClass(cl) {\n      return options.baseClass + '-' + cl;\n    }\n    function supportsColorFade() {\n      return $.fx.step.hasOwnProperty('backgroundColor');\n    }\n    function getPos(obj) //{{{\n    {\n      var pos = $(obj).offset();\n      return [pos.left, pos.top];\n    }\n    //}}}\n    function mouseAbs(e) //{{{\n    {\n      return [(e.pageX - docOffset[0]), (e.pageY - docOffset[1])];\n    }\n    //}}}\n    function setOptions(opt) //{{{\n    {\n      if (typeof(opt) !== 'object') opt = {};\n      options = $.extend(options, opt);\n\n      $.each(['onChange','onSelect','onRelease','onDblClick'],function(i,e) {\n        if (typeof(options[e]) !== 'function') options[e] = function () {};\n      });\n    }\n    //}}}\n    function startDragMode(mode, pos, touch) //{{{\n    {\n      docOffset = getPos($img);\n      Tracker.setCursor(mode === 'move' ? mode : mode + '-resize');\n\n      if (mode === 'move') {\n        return Tracker.activateHandlers(createMover(pos), doneSelect, touch);\n      }\n\n      var fc = Coords.getFixed();\n      var opp = oppLockCorner(mode);\n      var opc = Coords.getCorner(oppLockCorner(opp));\n\n      Coords.setPressed(Coords.getCorner(opp));\n      Coords.setCurrent(opc);\n\n      Tracker.activateHandlers(dragmodeHandler(mode, fc), doneSelect, touch);\n    }\n    //}}}\n    function dragmodeHandler(mode, f) //{{{\n    {\n      return function (pos) {\n        if (!options.aspectRatio) {\n          switch (mode) {\n          case 'e':\n            pos[1] = f.y2;\n            break;\n          case 'w':\n            pos[1] = f.y2;\n            break;\n          case 'n':\n            pos[0] = f.x2;\n            break;\n          case 's':\n            pos[0] = f.x2;\n            break;\n          }\n        } else {\n          switch (mode) {\n          case 'e':\n            pos[1] = f.y + 1;\n            break;\n          case 'w':\n            pos[1] = f.y + 1;\n            break;\n          case 'n':\n            pos[0] = f.x + 1;\n            break;\n          case 's':\n            pos[0] = f.x + 1;\n            break;\n          }\n        }\n        Coords.setCurrent(pos);\n        Selection.update();\n      };\n    }\n    //}}}\n    function createMover(pos) //{{{\n    {\n      var lloc = pos;\n      KeyManager.watchKeys();\n\n      return function (pos) {\n        Coords.moveOffset([pos[0] - lloc[0], pos[1] - lloc[1]]);\n        lloc = pos;\n\n        Selection.update();\n      };\n    }\n    //}}}\n    function oppLockCorner(ord) //{{{\n    {\n      switch (ord) {\n      case 'n':\n        return 'sw';\n      case 's':\n        return 'nw';\n      case 'e':\n        return 'nw';\n      case 'w':\n        return 'ne';\n      case 'ne':\n        return 'sw';\n      case 'nw':\n        return 'se';\n      case 'se':\n        return 'nw';\n      case 'sw':\n        return 'ne';\n      }\n    }\n    //}}}\n    function createDragger(ord) //{{{\n    {\n      return function (e) {\n        if (options.disabled) {\n          return false;\n        }\n        if ((ord === 'move') && !options.allowMove) {\n          return false;\n        }\n        \n        // Fix position of crop area when dragged the very first time.\n        // Necessary when crop image is in a hidden element when page is loaded.\n        docOffset = getPos($img);\n\n        btndown = true;\n        startDragMode(ord, mouseAbs(e));\n        e.stopPropagation();\n        e.preventDefault();\n        return false;\n      };\n    }\n    //}}}\n    function presize($obj, w, h) //{{{\n    {\n      var nw = $obj.width(),\n          nh = $obj.height();\n      if ((nw > w) && w > 0) {\n        nw = w;\n        nh = (w / $obj.width()) * $obj.height();\n      }\n      if ((nh > h) && h > 0) {\n        nh = h;\n        nw = (h / $obj.height()) * $obj.width();\n      }\n      xscale = $obj.width() / nw;\n      yscale = $obj.height() / nh;\n      $obj.width(nw).height(nh);\n    }\n    //}}}\n    function unscale(c) //{{{\n    {\n      return {\n        x: c.x * xscale,\n        y: c.y * yscale,\n        x2: c.x2 * xscale,\n        y2: c.y2 * yscale,\n        w: c.w * xscale,\n        h: c.h * yscale\n      };\n    }\n    //}}}\n    function doneSelect(pos) //{{{\n    {\n      var c = Coords.getFixed();\n      if ((c.w > options.minSelect[0]) && (c.h > options.minSelect[1])) {\n        Selection.enableHandles();\n        Selection.done();\n      } else {\n        Selection.release();\n      }\n      Tracker.setCursor(options.allowSelect ? 'crosshair' : 'default');\n    }\n    //}}}\n    function newSelection(e) //{{{\n    {\n      if (options.disabled) {\n        return false;\n      }\n      if (!options.allowSelect) {\n        return false;\n      }\n      btndown = true;\n      docOffset = getPos($img);\n      Selection.disableHandles();\n      Tracker.setCursor('crosshair');\n      var pos = mouseAbs(e);\n      Coords.setPressed(pos);\n      Selection.update();\n      Tracker.activateHandlers(selectDrag, doneSelect, e.type.substring(0,5)==='touch');\n      KeyManager.watchKeys();\n\n      e.stopPropagation();\n      e.preventDefault();\n      return false;\n    }\n    //}}}\n    function selectDrag(pos) //{{{\n    {\n      Coords.setCurrent(pos);\n      Selection.update();\n    }\n    //}}}\n    function newTracker() //{{{\n    {\n      var trk = $('<div></div>').addClass(cssClass('tracker'));\n      if (is_msie) {\n        trk.css({\n          opacity: 0,\n          backgroundColor: 'white'\n        });\n      }\n      return trk;\n    }\n    //}}}\n\n    // }}}\n    // Initialization {{{\n    // Sanitize some options {{{\n    if (typeof(obj) !== 'object') {\n      obj = $(obj)[0];\n    }\n    if (typeof(opt) !== 'object') {\n      opt = {};\n    }\n    // }}}\n    setOptions(opt);\n    // Initialize some jQuery objects {{{\n    // The values are SET on the image(s) for the interface\n    // If the original image has any of these set, they will be reset\n    // However, if you destroy() the Jcrop instance the original image's\n    // character in the DOM will be as you left it.\n    var img_css = {\n      border: 'none',\n      visibility: 'visible',\n      margin: 0,\n      padding: 0,\n      position: 'absolute',\n      top: 0,\n      left: 0\n    };\n\n    var $origimg = $(obj),\n      img_mode = true;\n\n    if (obj.tagName == 'IMG') {\n      // Fix size of crop image.\n      // Necessary when crop image is within a hidden element when page is loaded.\n      if ($origimg[0].width != 0 && $origimg[0].height != 0) {\n        // Obtain dimensions from contained img element.\n        $origimg.width($origimg[0].width);\n        $origimg.height($origimg[0].height);\n      } else {\n        // Obtain dimensions from temporary image in case the original is not loaded yet (e.g. IE 7.0). \n        var tempImage = new Image();\n        tempImage.src = $origimg[0].src;\n        $origimg.width(tempImage.width);\n        $origimg.height(tempImage.height);\n      } \n\n      var $img = $origimg.clone().removeAttr('id').css(img_css).show();\n\n      $img.width($origimg.width());\n      $img.height($origimg.height());\n      $origimg.after($img).hide();\n\n    } else {\n      $img = $origimg.css(img_css).show();\n      img_mode = false;\n      if (options.shade === null) { options.shade = true; }\n    }\n\n    presize($img, options.boxWidth, options.boxHeight);\n\n    var boundx = $img.width(),\n        boundy = $img.height(),\n        \n        \n        $div = $('<div />').width(boundx).height(boundy).addClass(cssClass('holder')).css({\n        position: 'relative',\n        backgroundColor: options.bgColor\n      }).insertAfter($origimg).append($img);\n\n    if (options.addClass) {\n      $div.addClass(options.addClass);\n    }\n\n    var $img2 = $('<div />'),\n\n        $img_holder = $('<div />') \n        .width('100%').height('100%').css({\n          zIndex: 310,\n          position: 'absolute',\n          overflow: 'hidden'\n        }),\n\n        $hdl_holder = $('<div />') \n        .width('100%').height('100%').css('zIndex', 320), \n\n        $sel = $('<div />') \n        .css({\n          position: 'absolute',\n          zIndex: 600\n        }).dblclick(function(){\n          var c = Coords.getFixed();\n          options.onDblClick.call(api,c);\n        }).insertBefore($img).append($img_holder, $hdl_holder); \n\n    if (img_mode) {\n\n      $img2 = $('<img />')\n          .attr('src', $img.attr('src')).css(img_css).width(boundx).height(boundy),\n\n      $img_holder.append($img2);\n\n    }\n\n    if (ie6mode) {\n      $sel.css({\n        overflowY: 'hidden'\n      });\n    }\n\n    var bound = options.boundary;\n    var $trk = newTracker().width(boundx + (bound * 2)).height(boundy + (bound * 2)).css({\n      position: 'absolute',\n      top: px(-bound),\n      left: px(-bound),\n      zIndex: 290\n    }).mousedown(newSelection);\n\n    /* }}} */\n    // Set more variables {{{\n    var bgcolor = options.bgColor,\n        bgopacity = options.bgOpacity,\n        xlimit, ylimit, xmin, ymin, xscale, yscale, enabled = true,\n        btndown, animating, shift_down;\n\n    docOffset = getPos($img);\n    // }}}\n    // }}}\n    // Internal Modules {{{\n    // Touch Module {{{ \n    var Touch = (function () {\n      // Touch support detection function adapted (under MIT License)\n      // from code by Jeffrey Sambells - http://github.com/iamamused/\n      function hasTouchSupport() {\n        var support = {}, events = ['touchstart', 'touchmove', 'touchend'],\n            el = document.createElement('div'), i;\n\n        try {\n          for(i=0; i<events.length; i++) {\n            var eventName = events[i];\n            eventName = 'on' + eventName;\n            var isSupported = (eventName in el);\n            if (!isSupported) {\n              el.setAttribute(eventName, 'return;');\n              isSupported = typeof el[eventName] == 'function';\n            }\n            support[events[i]] = isSupported;\n          }\n          return support.touchstart && support.touchend && support.touchmove;\n        }\n        catch(err) {\n          return false;\n        }\n      }\n\n      function detectSupport() {\n        if ((options.touchSupport === true) || (options.touchSupport === false)) return options.touchSupport;\n          else return hasTouchSupport();\n      }\n      return {\n        createDragger: function (ord) {\n          return function (e) {\n            if (options.disabled) {\n              return false;\n            }\n            if ((ord === 'move') && !options.allowMove) {\n              return false;\n            }\n            docOffset = getPos($img);\n            btndown = true;\n            startDragMode(ord, mouseAbs(Touch.cfilter(e)), true);\n            e.stopPropagation();\n            e.preventDefault();\n            return false;\n          };\n        },\n        newSelection: function (e) {\n          return newSelection(Touch.cfilter(e));\n        },\n        cfilter: function (e){\n          e.pageX = e.originalEvent.changedTouches[0].pageX;\n          e.pageY = e.originalEvent.changedTouches[0].pageY;\n          return e;\n        },\n        fixTouchSupport: function(e) {\n          if ($(e.currentTarget).hasClass('jcrop-tracker')) e.stopPropagation();\n        },\n        isSupported: hasTouchSupport,\n        support: detectSupport()\n      };\n    }());\n    // }}}\n    // Coords Module {{{\n    var Coords = (function () {\n      var x1 = 0,\n          y1 = 0,\n          x2 = 0,\n          y2 = 0,\n          ox, oy;\n\n      function setPressed(pos) //{{{\n      {\n        pos = rebound(pos);\n        x2 = x1 = pos[0];\n        y2 = y1 = pos[1];\n      }\n      //}}}\n      function setCurrent(pos) //{{{\n      {\n        pos = rebound(pos);\n        ox = pos[0] - x2;\n        oy = pos[1] - y2;\n        x2 = pos[0];\n        y2 = pos[1];\n      }\n      //}}}\n      function getOffset() //{{{\n      {\n        return [ox, oy];\n      }\n      //}}}\n      function moveOffset(offset) //{{{\n      {\n        var ox = offset[0],\n            oy = offset[1];\n\n        if (0 > x1 + ox) {\n          ox -= ox + x1;\n        }\n        if (0 > y1 + oy) {\n          oy -= oy + y1;\n        }\n\n        if (boundy < y2 + oy) {\n          oy += boundy - (y2 + oy);\n        }\n        if (boundx < x2 + ox) {\n          ox += boundx - (x2 + ox);\n        }\n\n        x1 += ox;\n        x2 += ox;\n        y1 += oy;\n        y2 += oy;\n      }\n      //}}}\n      function getCorner(ord) //{{{\n      {\n        var c = getFixed();\n        switch (ord) {\n        case 'ne':\n          return [c.x2, c.y];\n        case 'nw':\n          return [c.x, c.y];\n        case 'se':\n          return [c.x2, c.y2];\n        case 'sw':\n          return [c.x, c.y2];\n        }\n      }\n      //}}}\n      function getFixed() //{{{\n      {\n        if (!options.aspectRatio) {\n          return getRect();\n        }\n        // This function could use some optimization I think...\n        var aspect = options.aspectRatio,\n            min_x = options.minSize[0] / xscale,\n            \n            \n            //min_y = options.minSize[1]/yscale,\n            max_x = options.maxSize[0] / xscale,\n            max_y = options.maxSize[1] / yscale,\n            rw = x2 - x1,\n            rh = y2 - y1,\n            rwa = Math.abs(rw),\n            rha = Math.abs(rh),\n            real_ratio = rwa / rha,\n            xx, yy, w, h;\n\n        if (max_x === 0) {\n          max_x = boundx * 10;\n        }\n        if (max_y === 0) {\n          max_y = boundy * 10;\n        }\n        if (real_ratio < aspect) {\n          yy = y2;\n          w = rha * aspect;\n          xx = rw < 0 ? x1 - w : w + x1;\n\n          if (xx < 0) {\n            xx = 0;\n            h = Math.abs((xx - x1) / aspect);\n            yy = rh < 0 ? y1 - h : h + y1;\n          } else if (xx > boundx) {\n            xx = boundx;\n            h = Math.abs((xx - x1) / aspect);\n            yy = rh < 0 ? y1 - h : h + y1;\n          }\n        } else {\n          xx = x2;\n          h = rwa / aspect;\n          yy = rh < 0 ? y1 - h : y1 + h;\n          if (yy < 0) {\n            yy = 0;\n            w = Math.abs((yy - y1) * aspect);\n            xx = rw < 0 ? x1 - w : w + x1;\n          } else if (yy > boundy) {\n            yy = boundy;\n            w = Math.abs(yy - y1) * aspect;\n            xx = rw < 0 ? x1 - w : w + x1;\n          }\n        }\n\n        // Magic %-)\n        if (xx > x1) { // right side\n          if (xx - x1 < min_x) {\n            xx = x1 + min_x;\n          } else if (xx - x1 > max_x) {\n            xx = x1 + max_x;\n          }\n          if (yy > y1) {\n            yy = y1 + (xx - x1) / aspect;\n          } else {\n            yy = y1 - (xx - x1) / aspect;\n          }\n        } else if (xx < x1) { // left side\n          if (x1 - xx < min_x) {\n            xx = x1 - min_x;\n          } else if (x1 - xx > max_x) {\n            xx = x1 - max_x;\n          }\n          if (yy > y1) {\n            yy = y1 + (x1 - xx) / aspect;\n          } else {\n            yy = y1 - (x1 - xx) / aspect;\n          }\n        }\n\n        if (xx < 0) {\n          x1 -= xx;\n          xx = 0;\n        } else if (xx > boundx) {\n          x1 -= xx - boundx;\n          xx = boundx;\n        }\n\n        if (yy < 0) {\n          y1 -= yy;\n          yy = 0;\n        } else if (yy > boundy) {\n          y1 -= yy - boundy;\n          yy = boundy;\n        }\n\n        return makeObj(flipCoords(x1, y1, xx, yy));\n      }\n      //}}}\n      function rebound(p) //{{{\n      {\n        if (p[0] < 0) p[0] = 0;\n        if (p[1] < 0) p[1] = 0;\n\n        if (p[0] > boundx) p[0] = boundx;\n        if (p[1] > boundy) p[1] = boundy;\n\n        return [Math.round(p[0]), Math.round(p[1])];\n      }\n      //}}}\n      function flipCoords(x1, y1, x2, y2) //{{{\n      {\n        var xa = x1,\n            xb = x2,\n            ya = y1,\n            yb = y2;\n        if (x2 < x1) {\n          xa = x2;\n          xb = x1;\n        }\n        if (y2 < y1) {\n          ya = y2;\n          yb = y1;\n        }\n        return [xa, ya, xb, yb];\n      }\n      //}}}\n      function getRect() //{{{\n      {\n        var xsize = x2 - x1,\n            ysize = y2 - y1,\n            delta;\n\n        if (xlimit && (Math.abs(xsize) > xlimit)) {\n          x2 = (xsize > 0) ? (x1 + xlimit) : (x1 - xlimit);\n        }\n        if (ylimit && (Math.abs(ysize) > ylimit)) {\n          y2 = (ysize > 0) ? (y1 + ylimit) : (y1 - ylimit);\n        }\n\n        if (ymin / yscale && (Math.abs(ysize) < ymin / yscale)) {\n          y2 = (ysize > 0) ? (y1 + ymin / yscale) : (y1 - ymin / yscale);\n        }\n        if (xmin / xscale && (Math.abs(xsize) < xmin / xscale)) {\n          x2 = (xsize > 0) ? (x1 + xmin / xscale) : (x1 - xmin / xscale);\n        }\n\n        if (x1 < 0) {\n          x2 -= x1;\n          x1 -= x1;\n        }\n        if (y1 < 0) {\n          y2 -= y1;\n          y1 -= y1;\n        }\n        if (x2 < 0) {\n          x1 -= x2;\n          x2 -= x2;\n        }\n        if (y2 < 0) {\n          y1 -= y2;\n          y2 -= y2;\n        }\n        if (x2 > boundx) {\n          delta = x2 - boundx;\n          x1 -= delta;\n          x2 -= delta;\n        }\n        if (y2 > boundy) {\n          delta = y2 - boundy;\n          y1 -= delta;\n          y2 -= delta;\n        }\n        if (x1 > boundx) {\n          delta = x1 - boundy;\n          y2 -= delta;\n          y1 -= delta;\n        }\n        if (y1 > boundy) {\n          delta = y1 - boundy;\n          y2 -= delta;\n          y1 -= delta;\n        }\n\n        return makeObj(flipCoords(x1, y1, x2, y2));\n      }\n      //}}}\n      function makeObj(a) //{{{\n      {\n        return {\n          x: a[0],\n          y: a[1],\n          x2: a[2],\n          y2: a[3],\n          w: a[2] - a[0],\n          h: a[3] - a[1]\n        };\n      }\n      //}}}\n\n      return {\n        flipCoords: flipCoords,\n        setPressed: setPressed,\n        setCurrent: setCurrent,\n        getOffset: getOffset,\n        moveOffset: moveOffset,\n        getCorner: getCorner,\n        getFixed: getFixed\n      };\n    }());\n\n    //}}}\n    // Shade Module {{{\n    var Shade = (function() {\n      var enabled = false,\n          holder = $('<div />').css({\n            position: 'absolute',\n            zIndex: 240,\n            opacity: 0\n          }),\n          shades = {\n            top: createShade(),\n            left: createShade().height(boundy),\n            right: createShade().height(boundy),\n            bottom: createShade()\n          };\n\n      function resizeShades(w,h) {\n        shades.left.css({ height: px(h) });\n        shades.right.css({ height: px(h) });\n      }\n      function updateAuto()\n      {\n        return updateShade(Coords.getFixed());\n      }\n      function updateShade(c)\n      {\n        shades.top.css({\n          left: px(c.x),\n          width: px(c.w),\n          height: px(c.y)\n        });\n        shades.bottom.css({\n          top: px(c.y2),\n          left: px(c.x),\n          width: px(c.w),\n          height: px(boundy-c.y2)\n        });\n        shades.right.css({\n          left: px(c.x2),\n          width: px(boundx-c.x2)\n        });\n        shades.left.css({\n          width: px(c.x)\n        });\n      }\n      function createShade() {\n        return $('<div />').css({\n          position: 'absolute',\n          backgroundColor: options.shadeColor||options.bgColor\n        }).appendTo(holder);\n      }\n      function enableShade() {\n        if (!enabled) {\n          enabled = true;\n          holder.insertBefore($img);\n          updateAuto();\n          Selection.setBgOpacity(1,0,1);\n          $img2.hide();\n\n          setBgColor(options.shadeColor||options.bgColor,1);\n          if (Selection.isAwake())\n          {\n            setOpacity(options.bgOpacity,1);\n          }\n            else setOpacity(1,1);\n        }\n      }\n      function setBgColor(color,now) {\n        colorChangeMacro(getShades(),color,now);\n      }\n      function disableShade() {\n        if (enabled) {\n          holder.remove();\n          $img2.show();\n          enabled = false;\n          if (Selection.isAwake()) {\n            Selection.setBgOpacity(options.bgOpacity,1,1);\n          } else {\n            Selection.setBgOpacity(1,1,1);\n            Selection.disableHandles();\n          }\n          colorChangeMacro($div,0,1);\n        }\n      }\n      function setOpacity(opacity,now) {\n        if (enabled) {\n          if (options.bgFade && !now) {\n            holder.animate({\n              opacity: 1-opacity\n            },{\n              queue: false,\n              duration: options.fadeTime\n            });\n          }\n          else holder.css({opacity:1-opacity});\n        }\n      }\n      function refreshAll() {\n        options.shade ? enableShade() : disableShade();\n        if (Selection.isAwake()) setOpacity(options.bgOpacity);\n      }\n      function getShades() {\n        return holder.children();\n      }\n\n      return {\n        update: updateAuto,\n        updateRaw: updateShade,\n        getShades: getShades,\n        setBgColor: setBgColor,\n        enable: enableShade,\n        disable: disableShade,\n        resize: resizeShades,\n        refresh: refreshAll,\n        opacity: setOpacity\n      };\n    }());\n    // }}}\n    // Selection Module {{{\n    var Selection = (function () {\n      var awake,\n          hdep = 370,\n          borders = {},\n          handle = {},\n          dragbar = {},\n          seehandles = false;\n\n      // Private Methods\n      function insertBorder(type) //{{{\n      {\n        var jq = $('<div />').css({\n          position: 'absolute',\n          opacity: options.borderOpacity\n        }).addClass(cssClass(type));\n        $img_holder.append(jq);\n        return jq;\n      }\n      //}}}\n      function dragDiv(ord, zi) //{{{\n      {\n        var jq = $('<div />').mousedown(createDragger(ord)).css({\n          cursor: ord + '-resize',\n          position: 'absolute',\n          zIndex: zi\n        }).addClass('ord-'+ord);\n\n        if (Touch.support) {\n          jq.bind('touchstart.jcrop', Touch.createDragger(ord));\n        }\n\n        $hdl_holder.append(jq);\n        return jq;\n      }\n      //}}}\n      function insertHandle(ord) //{{{\n      {\n        var hs = options.handleSize,\n\n          div = dragDiv(ord, hdep++).css({\n            opacity: options.handleOpacity\n          }).addClass(cssClass('handle'));\n\n        if (hs) { div.width(hs).height(hs); }\n\n        return div;\n      }\n      //}}}\n      function insertDragbar(ord) //{{{\n      {\n        return dragDiv(ord, hdep++).addClass('jcrop-dragbar');\n      }\n      //}}}\n      function createDragbars(li) //{{{\n      {\n        var i;\n        for (i = 0; i < li.length; i++) {\n          dragbar[li[i]] = insertDragbar(li[i]);\n        }\n      }\n      //}}}\n      function createBorders(li) //{{{\n      {\n        var cl,i;\n        for (i = 0; i < li.length; i++) {\n          switch(li[i]){\n            case'n': cl='hline'; break;\n            case's': cl='hline bottom'; break;\n            case'e': cl='vline right'; break;\n            case'w': cl='vline'; break;\n          }\n          borders[li[i]] = insertBorder(cl);\n        }\n      }\n      //}}}\n      function createHandles(li) //{{{\n      {\n        var i;\n        for (i = 0; i < li.length; i++) {\n          handle[li[i]] = insertHandle(li[i]);\n        }\n      }\n      //}}}\n      function moveto(x, y) //{{{\n      {\n        if (!options.shade) {\n          $img2.css({\n            top: px(-y),\n            left: px(-x)\n          });\n        }\n        $sel.css({\n          top: px(y),\n          left: px(x)\n        });\n      }\n      //}}}\n      function resize(w, h) //{{{\n      {\n        $sel.width(Math.round(w)).height(Math.round(h));\n      }\n      //}}}\n      function refresh() //{{{\n      {\n        var c = Coords.getFixed();\n\n        Coords.setPressed([c.x, c.y]);\n        Coords.setCurrent([c.x2, c.y2]);\n\n        updateVisible();\n      }\n      //}}}\n\n      // Internal Methods\n      function updateVisible(select) //{{{\n      {\n        if (awake) {\n          return update(select);\n        }\n      }\n      //}}}\n      function update(select) //{{{\n      {\n        var c = Coords.getFixed();\n\n        resize(c.w, c.h);\n        moveto(c.x, c.y);\n        if (options.shade) Shade.updateRaw(c);\n\n        awake || show();\n\n        if (select) {\n          options.onSelect.call(api, unscale(c));\n        } else {\n          options.onChange.call(api, unscale(c));\n        }\n      }\n      //}}}\n      function setBgOpacity(opacity,force,now) //{{{\n      {\n        if (!awake && !force) return;\n        if (options.bgFade && !now) {\n          $img.animate({\n            opacity: opacity\n          },{\n            queue: false,\n            duration: options.fadeTime\n          });\n        } else {\n          $img.css('opacity', opacity);\n        }\n      }\n      //}}}\n      function show() //{{{\n      {\n        $sel.show();\n\n        if (options.shade) Shade.opacity(bgopacity);\n          else setBgOpacity(bgopacity,true);\n\n        awake = true;\n      }\n      //}}}\n      function release() //{{{\n      {\n        disableHandles();\n        $sel.hide();\n\n        if (options.shade) Shade.opacity(1);\n          else setBgOpacity(1);\n\n        awake = false;\n        options.onRelease.call(api);\n      }\n      //}}}\n      function showHandles() //{{{\n      {\n        if (seehandles) {\n          $hdl_holder.show();\n        }\n      }\n      //}}}\n      function enableHandles() //{{{\n      {\n        seehandles = true;\n        if (options.allowResize) {\n          $hdl_holder.show();\n          return true;\n        }\n      }\n      //}}}\n      function disableHandles() //{{{\n      {\n        seehandles = false;\n        $hdl_holder.hide();\n      } \n      //}}}\n      function animMode(v) //{{{\n      {\n        if (v) {\n          animating = true;\n          disableHandles();\n        } else {\n          animating = false;\n          enableHandles();\n        }\n      } \n      //}}}\n      function done() //{{{\n      {\n        animMode(false);\n        refresh();\n      } \n      //}}}\n      // Insert draggable elements {{{\n      // Insert border divs for outline\n\n      if (options.dragEdges && $.isArray(options.createDragbars))\n        createDragbars(options.createDragbars);\n\n      if ($.isArray(options.createHandles))\n        createHandles(options.createHandles);\n\n      if (options.drawBorders && $.isArray(options.createBorders))\n        createBorders(options.createBorders);\n\n      //}}}\n\n      // This is a hack for iOS5 to support drag/move touch functionality\n      // Hack OctoberCMS - the event handler was moved to the Touch module.\n      // The closure used before was handling a reference to the target object,\n      // preventing it from removing from DOM after the control is destroyed.\n      $(document).bind('touchstart.jcrop-ios', Touch.fixTouchSupport);\n\n      var $track = newTracker().mousedown(createDragger('move')).css({\n        cursor: 'move',\n        position: 'absolute',\n        zIndex: 360\n      });\n\n      if (Touch.support) {\n        $track.bind('touchstart.jcrop', Touch.createDragger('move'));\n      }\n\n      $img_holder.append($track);\n      disableHandles();\n\n      return {\n        updateVisible: updateVisible,\n        update: update,\n        release: release,\n        refresh: refresh,\n        isAwake: function () {\n          return awake;\n        },\n        setCursor: function (cursor) {\n          $track.css('cursor', cursor);\n        },\n        enableHandles: enableHandles,\n        enableOnly: function () {\n          seehandles = true;\n        },\n        showHandles: showHandles,\n        disableHandles: disableHandles,\n        animMode: animMode,\n        setBgOpacity: setBgOpacity,\n        done: done\n      };\n    }());\n    \n    //}}}\n    // Tracker Module {{{\n    var Tracker = (function () {\n      var onMove = function () {},\n          onDone = function () {},\n          trackDoc = options.trackDocument;\n\n      function toFront(touch) //{{{\n      {\n        $trk.css({\n          zIndex: 450\n        });\n\n        if (touch)\n          $(document)\n            .bind('touchmove.jcrop', trackTouchMove)\n            .bind('touchend.jcrop', trackTouchEnd);\n\n        else if (trackDoc)\n          $(document)\n            .bind('mousemove.jcrop',trackMove)\n            .bind('mouseup.jcrop',trackUp);\n      } \n      //}}}\n      function toBack() //{{{\n      {\n        $trk.css({\n          zIndex: 290\n        });\n        $(document).unbind('.jcrop');\n      } \n      //}}}\n      function trackMove(e) //{{{\n      {\n        onMove(mouseAbs(e));\n        return false;\n      } \n      //}}}\n      function trackUp(e) //{{{\n      {\n        e.preventDefault();\n        e.stopPropagation();\n\n        if (btndown) {\n          btndown = false;\n\n          onDone(mouseAbs(e));\n\n          if (Selection.isAwake()) {\n            options.onSelect.call(api, unscale(Coords.getFixed()));\n          }\n\n          toBack();\n          onMove = function () {};\n          onDone = function () {};\n        }\n\n        return false;\n      }\n      //}}}\n      function activateHandlers(move, done, touch) //{{{\n      {\n        btndown = true;\n        onMove = move;\n        onDone = done;\n        toFront(touch);\n        return false;\n      }\n      //}}}\n      function trackTouchMove(e) //{{{\n      {\n        onMove(mouseAbs(Touch.cfilter(e)));\n        return false;\n      }\n      //}}}\n      function trackTouchEnd(e) //{{{\n      {\n        return trackUp(Touch.cfilter(e));\n      }\n      //}}}\n      function setCursor(t) //{{{\n      {\n        $trk.css('cursor', t);\n      }\n      //}}}\n\n      if (!trackDoc) {\n        $trk.mousemove(trackMove).mouseup(trackUp).mouseout(trackUp);\n      }\n\n      $img.before($trk);\n      return {\n        activateHandlers: activateHandlers,\n        setCursor: setCursor\n      };\n    }());\n    //}}}\n    // KeyManager Module {{{\n    var KeyManager = (function () {\n      var $keymgr = $('<input type=\"radio\" />').css({\n        position: 'fixed',\n        left: '-120px',\n        width: '12px'\n      }).addClass('jcrop-keymgr'),\n\n        $keywrap = $('<div />').css({\n          position: 'absolute',\n          overflow: 'hidden'\n        }).append($keymgr);\n\n      function watchKeys() //{{{\n      {\n        if (options.keySupport) {\n          $keymgr.show();\n          $keymgr.focus();\n        }\n      }\n      //}}}\n      function onBlur(e) //{{{\n      {\n        $keymgr.hide();\n      }\n      //}}}\n      function doNudge(e, x, y) //{{{\n      {\n        if (options.allowMove) {\n          Coords.moveOffset([x, y]);\n          Selection.updateVisible(true);\n        }\n        e.preventDefault();\n        e.stopPropagation();\n      }\n      //}}}\n      function parseKey(e) //{{{\n      {\n        if (e.ctrlKey || e.metaKey) {\n          return true;\n        }\n        shift_down = e.shiftKey ? true : false;\n        var nudge = shift_down ? 10 : 1;\n\n        switch (e.keyCode) {\n        case 37:\n          doNudge(e, -nudge, 0);\n          break;\n        case 39:\n          doNudge(e, nudge, 0);\n          break;\n        case 38:\n          doNudge(e, 0, -nudge);\n          break;\n        case 40:\n          doNudge(e, 0, nudge);\n          break;\n        case 27:\n          if (options.allowSelect) Selection.release();\n          break;\n        case 9:\n          return true;\n        }\n\n        return false;\n      }\n      //}}}\n\n      if (options.keySupport) {\n        $keymgr.keydown(parseKey).blur(onBlur);\n        if (ie6mode || !options.fixedSupport) {\n          $keymgr.css({\n            position: 'absolute',\n            left: '-20px'\n          });\n          $keywrap.append($keymgr).insertBefore($img);\n        } else {\n          $keymgr.insertBefore($img);\n        }\n      }\n\n\n      return {\n        watchKeys: watchKeys\n      };\n    }());\n    //}}}\n    // }}}\n    // API methods {{{\n    function setClass(cname) //{{{\n    {\n      $div.removeClass().addClass(cssClass('holder')).addClass(cname);\n    }\n    //}}}\n    function animateTo(a, callback) //{{{\n    {\n      var x1 = a[0] / xscale,\n          y1 = a[1] / yscale,\n          x2 = a[2] / xscale,\n          y2 = a[3] / yscale;\n\n      if (animating) {\n        return;\n      }\n\n      var animto = Coords.flipCoords(x1, y1, x2, y2),\n          c = Coords.getFixed(),\n          initcr = [c.x, c.y, c.x2, c.y2],\n          animat = initcr,\n          interv = options.animationDelay,\n          ix1 = animto[0] - initcr[0],\n          iy1 = animto[1] - initcr[1],\n          ix2 = animto[2] - initcr[2],\n          iy2 = animto[3] - initcr[3],\n          pcent = 0,\n          velocity = options.swingSpeed;\n\n      x1 = animat[0];\n      y1 = animat[1];\n      x2 = animat[2];\n      y2 = animat[3];\n\n      Selection.animMode(true);\n      var anim_timer;\n\n      function queueAnimator() {\n        window.setTimeout(animator, interv);\n      }\n      var animator = (function () {\n        return function () {\n          pcent += (100 - pcent) / velocity;\n\n          animat[0] = Math.round(x1 + ((pcent / 100) * ix1));\n          animat[1] = Math.round(y1 + ((pcent / 100) * iy1));\n          animat[2] = Math.round(x2 + ((pcent / 100) * ix2));\n          animat[3] = Math.round(y2 + ((pcent / 100) * iy2));\n\n          if (pcent >= 99.8) {\n            pcent = 100;\n          }\n          if (pcent < 100) {\n            setSelectRaw(animat);\n            queueAnimator();\n          } else {\n            Selection.done();\n            Selection.animMode(false);\n            if (typeof(callback) === 'function') {\n              callback.call(api);\n            }\n          }\n        };\n      }());\n      queueAnimator();\n    }\n    //}}}\n    function setSelect(rect) //{{{\n    {\n      setSelectRaw([rect[0] / xscale, rect[1] / yscale, rect[2] / xscale, rect[3] / yscale]);\n      options.onSelect.call(api, unscale(Coords.getFixed()));\n      Selection.enableHandles();\n    }\n    //}}}\n    function setSelectRaw(l) //{{{\n    {\n      Coords.setPressed([l[0], l[1]]);\n      Coords.setCurrent([l[2], l[3]]);\n      Selection.update();\n    }\n    //}}}\n    function tellSelect() //{{{\n    {\n      return unscale(Coords.getFixed());\n    }\n    //}}}\n    function tellScaled() //{{{\n    {\n      return Coords.getFixed();\n    }\n    //}}}\n    function setOptionsNew(opt) //{{{\n    {\n      setOptions(opt);\n      interfaceUpdate();\n    }\n    //}}}\n    function disableCrop() //{{{\n    {\n      options.disabled = true;\n      Selection.disableHandles();\n      Selection.setCursor('default');\n      Tracker.setCursor('default');\n    }\n    //}}}\n    function enableCrop() //{{{\n    {\n      options.disabled = false;\n      interfaceUpdate();\n    }\n    //}}}\n    function cancelCrop() //{{{\n    {\n      Selection.done();\n      Tracker.activateHandlers(null, null);\n    }\n    //}}}\n    function destroy() //{{{\n    {\n      $(document).unbind('touchstart.jcrop-ios', Touch.fixTouchSupport);\n      $div.remove();\n      $origimg.show();\n      $origimg.css('visibility','visible');\n      $(obj).removeData('Jcrop');\n    }\n    //}}}\n    function setImage(src, callback) //{{{\n    {\n      Selection.release();\n      disableCrop();\n      var img = new Image();\n      img.onload = function () {\n        var iw = img.width;\n        var ih = img.height;\n        var bw = options.boxWidth;\n        var bh = options.boxHeight;\n        $img.width(iw).height(ih);\n        $img.attr('src', src);\n        $img2.attr('src', src);\n        presize($img, bw, bh);\n        boundx = $img.width();\n        boundy = $img.height();\n        $img2.width(boundx).height(boundy);\n        $trk.width(boundx + (bound * 2)).height(boundy + (bound * 2));\n        $div.width(boundx).height(boundy);\n        Shade.resize(boundx,boundy);\n        enableCrop();\n\n        if (typeof(callback) === 'function') {\n          callback.call(api);\n        }\n      };\n      img.src = src;\n    }\n    //}}}\n    function colorChangeMacro($obj,color,now) {\n      var mycolor = color || options.bgColor;\n      if (options.bgFade && supportsColorFade() && options.fadeTime && !now) {\n        $obj.animate({\n          backgroundColor: mycolor\n        }, {\n          queue: false,\n          duration: options.fadeTime\n        });\n      } else {\n        $obj.css('backgroundColor', mycolor);\n      }\n    }\n    function interfaceUpdate(alt) //{{{\n    // This method tweaks the interface based on options object.\n    // Called when options are changed and at end of initialization.\n    {\n      if (options.allowResize) {\n        if (alt) {\n          Selection.enableOnly();\n        } else {\n          Selection.enableHandles();\n        }\n      } else {\n        Selection.disableHandles();\n      }\n\n      Tracker.setCursor(options.allowSelect ? 'crosshair' : 'default');\n      Selection.setCursor(options.allowMove ? 'move' : 'default');\n\n      if (options.hasOwnProperty('trueSize')) {\n        xscale = options.trueSize[0] / boundx;\n        yscale = options.trueSize[1] / boundy;\n      }\n\n      if (options.hasOwnProperty('setSelect')) {\n        setSelect(options.setSelect);\n        Selection.done();\n        delete(options.setSelect);\n      }\n\n      Shade.refresh();\n\n      if (options.bgColor != bgcolor) {\n        colorChangeMacro(\n          options.shade? Shade.getShades(): $div,\n          options.shade?\n            (options.shadeColor || options.bgColor):\n            options.bgColor\n        );\n        bgcolor = options.bgColor;\n      }\n\n      if (bgopacity != options.bgOpacity) {\n        bgopacity = options.bgOpacity;\n        if (options.shade) Shade.refresh();\n          else Selection.setBgOpacity(bgopacity);\n      }\n\n      xlimit = options.maxSize[0] || 0;\n      ylimit = options.maxSize[1] || 0;\n      xmin = options.minSize[0] || 0;\n      ymin = options.minSize[1] || 0;\n\n      if (options.hasOwnProperty('outerImage')) {\n        $img.attr('src', options.outerImage);\n        delete(options.outerImage);\n      }\n\n      Selection.refresh();\n    }\n    //}}}\n    //}}}\n\n    if (Touch.support) $trk.bind('touchstart.jcrop', Touch.newSelection);\n\n    $hdl_holder.hide();\n    interfaceUpdate(true);\n\n    var api = {\n      setImage: setImage,\n      animateTo: animateTo,\n      setSelect: setSelect,\n      setOptions: setOptionsNew,\n      tellSelect: tellSelect,\n      tellScaled: tellScaled,\n      setClass: setClass,\n\n      disable: disableCrop,\n      enable: enableCrop,\n      cancel: cancelCrop,\n      release: Selection.release,\n      destroy: destroy,\n\n      focus: KeyManager.watchKeys,\n\n      getBounds: function () {\n        return [boundx * xscale, boundy * yscale];\n      },\n      getWidgetSize: function () {\n        return [boundx, boundy];\n      },\n      getScaleFactor: function () {\n        return [xscale, yscale];\n      },\n      getOptions: function() {\n        // careful: internal values are returned\n        return options;\n      },\n\n      ui: {\n        holder: $div,\n        selection: $sel\n      }\n    };\n\n    if (is_msie) $div.bind('selectstart', function () { return false; });\n\n    $origimg.data('Jcrop', api);\n    return api;\n  };\n  $.fn.Jcrop = function (options, callback) //{{{\n  {\n    var api;\n    // Iterate over each object, attach Jcrop\n    this.each(function () {\n      // If we've already attached to this object\n      if ($(this).data('Jcrop')) {\n        // The API can be requested this way (undocumented)\n        if (options === 'api') return $(this).data('Jcrop');\n        // Otherwise, we just reset the options...\n        else $(this).data('Jcrop').setOptions(options);\n      }\n      // If we haven't been attached, preload and attach\n      else {\n        if (this.tagName == 'IMG')\n          $.Jcrop.Loader(this,function(){\n            $(this).css({display:'block',visibility:'hidden'});\n            api = $.Jcrop(this, options);\n            if ($.isFunction(callback)) callback.call(api);\n          });\n        else {\n          $(this).css({display:'block',visibility:'hidden'});\n          api = $.Jcrop(this, options);\n          if ($.isFunction(callback)) callback.call(api);\n        }\n      }\n    });\n\n    // Return \"this\" so the object is chainable (jQuery-style)\n    return this;\n  };\n  //}}}\n  // $.Jcrop.Loader - basic image loader {{{\n\n  $.Jcrop.Loader = function(imgobj,success,error){\n    var $img = $(imgobj), img = $img[0];\n\n    function completeCheck(){\n      if (img.complete) {\n        $img.unbind('.jcloader');\n        if ($.isFunction(success)) success.call(img);\n      }\n      else window.setTimeout(completeCheck,50);\n    }\n\n    $img\n      .bind('load.jcloader',completeCheck)\n      .bind('error.jcloader',function(e){\n        $img.unbind('.jcloader');\n        if ($.isFunction(error)) error.call(img);\n      });\n\n    if (img.complete && $.isFunction(success)){\n      $img.unbind('.jcloader');\n      success.call(img);\n    }\n  };\n\n  //}}}\n  // Global Defaults {{{\n  $.Jcrop.defaults = {\n\n    // Basic Settings\n    allowSelect: true,\n    allowMove: true,\n    allowResize: true,\n\n    trackDocument: true,\n\n    // Styling Options\n    baseClass: 'jcrop',\n    addClass: null,\n    bgColor: 'black',\n    bgOpacity: 0.6,\n    bgFade: false,\n    borderOpacity: 0.4,\n    handleOpacity: 0.5,\n    handleSize: null,\n\n    aspectRatio: 0,\n    keySupport: true,\n    createHandles: ['n','s','e','w','nw','ne','se','sw'],\n    createDragbars: ['n','s','e','w'],\n    createBorders: ['n','s','e','w'],\n    drawBorders: true,\n    dragEdges: true,\n    fixedSupport: true,\n    touchSupport: null,\n\n    shade: null,\n\n    boxWidth: 0,\n    boxHeight: 0,\n    boundary: 2,\n    fadeTime: 400,\n    animationDelay: 20,\n    swingSpeed: 3,\n\n    minSelect: [0, 0],\n    maxSize: [0, 0],\n    minSize: [0, 0],\n\n    // Callbacks / Event Handlers\n    onChange: function () {},\n    onSelect: function () {},\n    onDblClick: function () {},\n    onRelease: function () {}\n  };\n\n  // }}}\n}(jQuery));\n"
  },
  {
    "path": "modules/system/assets/vendor/js-cookie/js.cookie.esm.js",
    "content": "function d(r){for(var t=1;t<arguments.length;t++){var f=arguments[t];for(var p in f)r[p]=f[p]}return r}var g={read:function(r){return r[0]==='\"'&&(r=r.slice(1,-1)),r.replace(/(%[\\dA-F]{2})+/gi,decodeURIComponent)},write:function(r){return encodeURIComponent(r).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function s(r,t){function f(n,c,e){if(!(typeof document>\"u\")){e=d({},t,e),typeof e.expires==\"number\"&&(e.expires=new Date(Date.now()+e.expires*864e5)),e.expires&&(e.expires=e.expires.toUTCString()),n=encodeURIComponent(n).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var o=\"\";for(var i in e)e[i]&&(o+=\"; \"+i,e[i]!==!0&&(o+=\"=\"+e[i].split(\";\")[0]));return document.cookie=n+\"=\"+r.write(c,n)+o}}function p(n){if(!(typeof document>\"u\"||arguments.length&&!n)){for(var c=document.cookie?document.cookie.split(\"; \"):[],e={},o=0;o<c.length;o++){var i=c[o].split(\"=\"),v=i.slice(1).join(\"=\");try{var u=decodeURIComponent(i[0]);if(e[u]=r.read(v,u),n===u)break}catch{}}return n?e[n]:e}}return Object.create({set:f,get:p,remove:function(n,c){f(n,\"\",d({},c,{expires:-1}))},withAttributes:function(n){return s(this.converter,d({},this.attributes,n))},withConverter:function(n){return s(d({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(r)}})}var C=s(g,{path:\"/\"});export{C as default};\n/*! Bundled license information:\n\njs-cookie/dist/js.cookie.mjs:\n  (*! js-cookie v3.0.5 | MIT *)\n*/\n"
  },
  {
    "path": "modules/system/assets/vendor/larajax/framework-bundle.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Larajax: Frontend JavaScript Framework\n * https://larajax.org\n * --------------------------------------------------------------------------\n * Copyright 2025 Responsiv Pty. Ltd.\n * --------------------------------------------------------------------------\n */\n\nimport \"../../../../../vendor/larajax/larajax/resources/src/framework-bundle\";\nimport \"./migrate\";"
  },
  {
    "path": "modules/system/assets/vendor/larajax/framework.js",
    "content": "/**\n * --------------------------------------------------------------------------\n * Larajax: Frontend JavaScript Framework\n * https://larajax.org\n * --------------------------------------------------------------------------\n * Copyright 2025 Responsiv Pty. Ltd.\n * --------------------------------------------------------------------------\n */\n\nimport \"../../../../../vendor/larajax/larajax/resources/src/framework\";\nimport \"./migrate\";"
  },
  {
    "path": "modules/system/assets/vendor/larajax/migrate.js",
    "content": "// Set oc namespace from jax\nwindow.oc = window.jax;\nwindow.oc.serializeJSON = window.oc.values;\n\n// jQuery compatibility layer\n(function() {\n    // Avoid detection from webpack\n    var $ = window['jQ' + 'uery'];\n    if ($ === undefined) {\n        return;\n    }\n\n    bindRequestFunc();\n    bindRenderFunc();\n    bindjQueryEvents();\n    bindOcNamespace();\n\n    function bindRequestFunc() {\n        var old = $.fn.request;\n\n        $.fn.request = function(handler, option) {\n            var options = typeof option === 'object' ? option : {};\n            return oc.request(this.get(0), handler, options);\n        }\n\n        $.fn.request.Constructor = oc.request;\n\n        // Basic function\n        $.request = function(handler, option) {\n            return $(document).request(handler, option);\n        }\n\n        // No conflict\n        $.fn.request.noConflict = function() {\n            $.fn.request = old;\n            return this;\n        }\n    }\n\n    function bindRenderFunc() {\n        $.fn.render = function(callback) {\n            $(document).on('render', callback);\n        };\n    }\n\n    function bindOcNamespace() {\n        if ($.oc === undefined) {\n            $.oc = {};\n        }\n\n        $.oc.flashMsg = window.jax.flashMsg;\n        $.oc.stripeLoadIndicator = window.jax.progressBar;\n    }\n\n    function bindjQueryEvents() {\n        // Element\n        migratejQueryEvent(document, 'ajax:setup', 'ajaxSetup', ['context']);\n        migratejQueryEvent(document, 'ajax:promise', 'ajaxPromise', ['context']);\n        migratejQueryEvent(document, 'ajax:fail', 'ajaxFail', ['context', 'data', 'responseCode', 'xhr']);\n        migratejQueryEvent(document, 'ajax:done', 'ajaxDone', ['context', 'data', 'responseCode', 'xhr']);\n        migratejQueryEvent(document, 'ajax:always', 'ajaxAlways', ['context', 'data', 'responseCode', 'xhr']);\n        migratejQueryEvent(document, 'ajax:before-redirect', 'ajaxRedirect');\n\n        // Updated Element\n        migratejQueryEvent(document, 'ajax:update', 'ajaxUpdate', ['context', 'data', 'responseCode', 'xhr']);\n        migratejQueryEvent(document, 'ajax:before-replace', 'ajaxBeforeReplace');\n\n        // Trigger Element\n        migratejQueryEvent(document, 'ajax:before-request', 'oc.beforeRequest', ['context']);\n        migratejQueryEvent(document, 'ajax:before-update', 'ajaxBeforeUpdate', ['context', 'data', 'responseCode', 'xhr']);\n        migratejQueryEvent(document, 'ajax:request-success', 'ajaxSuccess', ['context', 'data', 'responseCode', 'xhr']);\n        migratejQueryEvent(document, 'ajax:request-complete', 'ajaxComplete', ['context', 'data', 'responseCode', 'xhr']);\n        migratejQueryEvent(document, 'ajax:request-error', 'ajaxError', ['context', 'message', 'responseCode', 'xhr']);\n        migratejQueryEvent(document, 'ajax:before-validate', 'ajaxValidation', ['context', 'message', 'fields']);\n\n        // Window\n        migratejQueryEvent(window, 'ajax:before-send', 'ajaxBeforeSend', ['context']);\n        migratejQueryEvent(window, 'ajax:update-complete', 'ajaxUpdateComplete', ['context', 'data', 'responseCode', 'xhr']);\n        migratejQueryEvent(window, 'ajax:invalid-field', 'ajaxInvalidField', ['element', 'fieldName', 'errorMsg', 'isFirst']);\n        migratejQueryEvent(window, 'ajax:confirm-message', 'ajaxConfirmMessage', ['message', 'promise']);\n        migratejQueryEvent(window, 'ajax:error-message', 'ajaxErrorMessage', ['message']);\n\n        // Data adapter\n        migratejQueryAttachData(document, 'ajax:setup', 'a[data-request], button[data-request], form[data-request], a[data-handler], button[data-handler]');\n    }\n\n    function migratejQueryEvent(target, jsName, jqName, detailNames) {\n        detailNames = detailNames || [];\n        $(target).on(jsName, function(ev) {\n            triggerjQueryEvent(ev.originalEvent, jqName, detailNames);\n        });\n    }\n\n    function triggerjQueryEvent(ev, eventName, detailNames) {\n        detailNames = detailNames || [];\n        var jQueryEvent = $.Event(eventName),\n            args = buildDetailArgs(ev, detailNames);\n\n        $(ev.target).trigger(jQueryEvent, args);\n\n        if (jQueryEvent.isDefaultPrevented()) {\n            ev.preventDefault();\n        }\n    }\n\n    function buildDetailArgs(ev, detailNames) {\n        var args = [];\n\n        detailNames.forEach(function(name) {\n            args.push(ev.detail[name]);\n        });\n\n        return args;\n    }\n\n    // For instances where data() is populated in the jQ instance\n    function migratejQueryAttachData(target, eventName, selector) {\n        $(target).on(eventName, selector, function(event) {\n            var dataObj = $(this).data('request-data');\n            if (!dataObj) {\n                return;\n            }\n\n            var options = event.detail.context.options;\n            if (dataObj.constructor === {}.constructor) {\n                Object.assign(options.data, dataObj);\n            }\n            else if (typeof dataObj === 'string') {\n                Object.assign(options.data, paramToObj('request-data', dataObj));\n            }\n        });\n    }\n\n    function paramToObj(name, value) {\n        if (value === undefined) {\n            value = '';\n        }\n\n        if (typeof value === 'object') {\n            return value;\n        }\n\n        if (value.charAt(0) !== '{') {\n            value = \"{\" + value + \"}\";\n        }\n\n        try {\n            return oc.parseJSON(value);\n        }\n        catch (e) {\n            throw new Error('Error parsing the ' + name + ' attribute value. ' + e);\n        }\n    }\n})();\n"
  },
  {
    "path": "modules/system/assets/vendor/mitt/mitt.esm.js",
    "content": "function n(t){return{all:t=t||new Map,on:function(e,f){var i=t.get(e);i?i.push(f):t.set(e,[f])},off:function(e,f){var i=t.get(e);i&&(f?i.splice(i.indexOf(f)>>>0,1):t.set(e,[]))},emit:function(e,f){var i=t.get(e);i&&i.slice().map(function(c){c(f)}),(i=t.get(\"*\"))&&i.slice().map(function(c){c(e,f)})}}}export{n as default};\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/af.js",
    "content": "//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var af = moment.defineLocale('af', {\n        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM: function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Vandag om] LT',\n            nextDay: '[Môre om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[Gister om] LT',\n            lastWeek: '[Laas] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oor %s',\n            past: '%s gelede',\n            s: \"'n paar sekondes\",\n            ss: '%d sekondes',\n            m: \"'n minuut\",\n            mm: '%d minute',\n            h: \"'n uur\",\n            hh: '%d ure',\n            d: \"'n dag\",\n            dd: '%d dae',\n            M: \"'n maand\",\n            MM: '%d maande',\n            y: \"'n jaar\",\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            ); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week: {\n            dow: 1, // Maandag is die eerste dag van die week.\n            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        },\n    });\n\n    return af;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ar-dz.js",
    "content": "//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'جانفي',\n            'فيفري',\n            'مارس',\n            'أفريل',\n            'ماي',\n            'جوان',\n            'جويلية',\n            'أوت',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arDz;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ar-kw.js",
    "content": "//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arKw;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ar-ly.js",
    "content": "//! moment.js locale configuration\n//! locale : Arabic (Libya) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '1',\n            2: '2',\n            3: '3',\n            4: '4',\n            5: '5',\n            6: '6',\n            7: '7',\n            8: '8',\n            9: '9',\n            0: '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arLy;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ar-ma.js",
    "content": "//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arMa;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ar-ps.js",
    "content": "//! moment.js locale configuration\n//! locale : Arabic (Palestine) [ar-ps]\n//! author : Majd Al-Shihabi : https://github.com/majdal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arPs = moment.defineLocale('ar-ps', {\n        months: 'كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل'.split(\n            '_'\n        ),\n        monthsShort:\n            'ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .split('') // reversed since negative lookbehind not supported everywhere\n                .reverse()\n                .join('')\n                .replace(/[١٢](?![\\u062a\\u0643])/g, function (match) {\n                    return numberMap[match];\n                })\n                .split('')\n                .reverse()\n                .join('')\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return arPs;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ar-sa.js",
    "content": "//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return arSa;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ar-tn.js",
    "content": "//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arTn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ar.js",
    "content": "//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var ar = moment.defineLocale('ar', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ar;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/az.js",
    "content": "//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı',\n    };\n\n    var az = moment.defineLocale('az', {\n        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays:\n            'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n                '_'\n            ),\n        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[sabah saat] LT',\n            nextWeek: '[gələn həftə] dddd [saat] LT',\n            lastDay: '[dünən] LT',\n            lastWeek: '[keçən həftə] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s əvvəl',\n            s: 'bir neçə saniyə',\n            ss: '%d saniyə',\n            m: 'bir dəqiqə',\n            mm: '%d dəqiqə',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir il',\n            yy: '%d il',\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM: function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal: function (number) {\n            if (number === 0) {\n                // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = (number % 100) - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return az;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/be.js",
    "content": "//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            dd: 'дзень_дні_дзён',\n            MM: 'месяц_месяцы_месяцаў',\n            yy: 'год_гады_гадоў',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months: {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n                '_'\n            ),\n            standalone:\n                'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays: {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n                '_'\n            ),\n            standalone:\n                'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n                    '_'\n                ),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n        },\n        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n        },\n        calendar: {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'праз %s',\n            past: '%s таму',\n            s: 'некалькі секунд',\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithPlural,\n            hh: relativeTimeWithPlural,\n            d: 'дзень',\n            dd: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM: function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) &&\n                        number % 100 !== 12 &&\n                        number % 100 !== 13\n                        ? number + '-і'\n                        : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return be;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/bg.js",
    "content": "//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bg = moment.defineLocale('bg', {\n        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Днес в] LT',\n            nextDay: '[Утре в] LT',\n            nextWeek: 'dddd [в] LT',\n            lastDay: '[Вчера в] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Миналата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Миналия] dddd [в] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'след %s',\n            past: 'преди %s',\n            s: 'няколко секунди',\n            ss: '%d секунди',\n            m: 'минута',\n            mm: '%d минути',\n            h: 'час',\n            hh: '%d часа',\n            d: 'ден',\n            dd: '%d дена',\n            w: 'седмица',\n            ww: '%d седмици',\n            M: 'месец',\n            MM: '%d месеца',\n            y: 'година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bg;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/bm.js",
    "content": "//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bm = moment.defineLocale('bm', {\n        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n            '_'\n        ),\n        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'MMMM [tile] D [san] YYYY',\n            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bi lɛrɛ] LT',\n            nextDay: '[Sini lɛrɛ] LT',\n            nextWeek: 'dddd [don lɛrɛ] LT',\n            lastDay: '[Kunu lɛrɛ] LT',\n            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s kɔnɔ',\n            past: 'a bɛ %s bɔ',\n            s: 'sanga dama dama',\n            ss: 'sekondi %d',\n            m: 'miniti kelen',\n            mm: 'miniti %d',\n            h: 'lɛrɛ kelen',\n            hh: 'lɛrɛ %d',\n            d: 'tile kelen',\n            dd: 'tile %d',\n            M: 'kalo kelen',\n            MM: 'kalo %d',\n            y: 'san kelen',\n            yy: 'san %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return bm;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/bn-bd.js",
    "content": "//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bnBd = moment.defineLocale('bn-bd', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n\n        meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'রাত') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ভোর') {\n                return hour;\n            } else if (meridiem === 'সকাল') {\n                return hour;\n            } else if (meridiem === 'দুপুর') {\n                return hour >= 3 ? hour : hour + 12;\n            } else if (meridiem === 'বিকাল') {\n                return hour + 12;\n            } else if (meridiem === 'সন্ধ্যা') {\n                return hour + 12;\n            }\n        },\n\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 6) {\n                return 'ভোর';\n            } else if (hour < 12) {\n                return 'সকাল';\n            } else if (hour < 15) {\n                return 'দুপুর';\n            } else if (hour < 18) {\n                return 'বিকাল';\n            } else if (hour < 20) {\n                return 'সন্ধ্যা';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bnBd;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/bn.js",
    "content": "//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bn = moment.defineLocale('bn', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/bo.js",
    "content": "//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '༡',\n            2: '༢',\n            3: '༣',\n            4: '༤',\n            5: '༥',\n            6: '༦',\n            7: '༧',\n            8: '༨',\n            9: '༩',\n            0: '༠',\n        },\n        numberMap = {\n            '༡': '1',\n            '༢': '2',\n            '༣': '3',\n            '༤': '4',\n            '༥': '5',\n            '༦': '6',\n            '༧': '7',\n            '༨': '8',\n            '༩': '9',\n            '༠': '0',\n        };\n\n    var bo = moment.defineLocale('bo', {\n        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n                '_'\n            ),\n        monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n        monthsParseExact: true,\n        weekdays:\n            'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n                '_'\n            ),\n        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n            '_'\n        ),\n        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[དི་རིང] LT',\n            nextDay: '[སང་ཉིན] LT',\n            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay: '[ཁ་སང] LT',\n            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ལ་',\n            past: '%s སྔན་ལ',\n            s: 'ལམ་སང',\n            ss: '%d སྐར་ཆ།',\n            m: 'སྐར་མ་གཅིག',\n            mm: '%d སྐར་མ',\n            h: 'ཆུ་ཚོད་གཅིག',\n            hh: '%d ཆུ་ཚོད',\n            d: 'ཉིན་གཅིག',\n            dd: '%d ཉིན་',\n            M: 'ཟླ་བ་གཅིག',\n            MM: '%d ཟླ་བ',\n            y: 'ལོ་གཅིག',\n            yy: '%d ལོ',\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bo;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/br.js",
    "content": "//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            mm: 'munutenn',\n            MM: 'miz',\n            dd: 'devezh',\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            m: 'v',\n            b: 'v',\n            d: 'z',\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var monthsParse = [\n            /^gen/i,\n            /^c[ʼ\\']hwe/i,\n            /^meu/i,\n            /^ebr/i,\n            /^mae/i,\n            /^(mez|eve)/i,\n            /^gou/i,\n            /^eos/i,\n            /^gwe/i,\n            /^her/i,\n            /^du/i,\n            /^ker/i,\n        ],\n        monthsRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        monthsStrictRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n        monthsShortStrictRegex =\n            /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        fullWeekdaysParse = [\n            /^sul/i,\n            /^lun/i,\n            /^meurzh/i,\n            /^merc[ʼ\\']her/i,\n            /^yaou/i,\n            /^gwener/i,\n            /^sadorn/i,\n        ],\n        shortWeekdaysParse = [\n            /^Sul/i,\n            /^Lun/i,\n            /^Meu/i,\n            /^Mer/i,\n            /^Yao/i,\n            /^Gwe/i,\n            /^Sad/i,\n        ],\n        minWeekdaysParse = [\n            /^Su/i,\n            /^Lu/i,\n            /^Me([^r]|$)/i,\n            /^Mer/i,\n            /^Ya/i,\n            /^Gw/i,\n            /^Sa/i,\n        ];\n\n    var br = moment.defineLocale('br', {\n        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n            '_'\n        ),\n        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParse: minWeekdaysParse,\n        fullWeekdaysParse: fullWeekdaysParse,\n        shortWeekdaysParse: shortWeekdaysParse,\n        minWeekdaysParse: minWeekdaysParse,\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [a viz] MMMM YYYY',\n            LLL: 'D [a viz] MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hiziv da] LT',\n            nextDay: '[Warcʼhoazh da] LT',\n            nextWeek: 'dddd [da] LT',\n            lastDay: '[Decʼh da] LT',\n            lastWeek: 'dddd [paset da] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'a-benn %s',\n            past: '%s ʼzo',\n            s: 'un nebeud segondennoù',\n            ss: '%d eilenn',\n            m: 'ur vunutenn',\n            mm: relativeTimeWithMutation,\n            h: 'un eur',\n            hh: '%d eur',\n            d: 'un devezh',\n            dd: relativeTimeWithMutation,\n            M: 'ur miz',\n            MM: relativeTimeWithMutation,\n            y: 'ur bloaz',\n            yy: specialMutationForYears,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'añ' : 'vet';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n        isPM: function (token) {\n            return token === 'g.m.';\n        },\n        meridiem: function (hour, minute, isLower) {\n            return hour < 12 ? 'a.m.' : 'g.m.';\n        },\n    });\n\n    return br;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/bs.js",
    "content": "//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! author : Rasid Redzic : https://github.com/rasidre\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 'm':\n                return withoutSuffix\n                    ? 'jedna minuta'\n                    : isFuture\n                      ? 'jednu minutu'\n                      : 'jedne minute';\n        }\n    }\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jedan sat';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: processRelativeTime,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bs;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ca.js",
    "content": "//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ca = moment.defineLocale('ca', {\n        months: {\n            standalone:\n                'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n                    '_'\n                ),\n            format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n                '_'\n            ),\n        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a les] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextDay: function () {\n                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastDay: function () {\n                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [passat a ' +\n                    (this.hours() !== 1 ? 'les' : 'la') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'uns segons',\n            ss: '%d segons',\n            m: 'un minut',\n            mm: '%d minuts',\n            h: 'una hora',\n            hh: '%d hores',\n            d: 'un dia',\n            dd: '%d dies',\n            M: 'un mes',\n            MM: '%d mesos',\n            y: 'un any',\n            yy: '%d anys',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                      ? 'n'\n                      : number === 3\n                        ? 'r'\n                        : number === 4\n                          ? 't'\n                          : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ca;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/cs.js",
    "content": "//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = {\n            standalone:\n                'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n                    '_'\n                ),\n            format: 'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n                '_'\n            ),\n            isFormat: /DD?[o.]?(\\[[^\\[\\]]*\\]|\\s)+MMMM/,\n        },\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n        monthsParse = [\n            /^led/i,\n            /^úno/i,\n            /^bře/i,\n            /^dub/i,\n            /^kvě/i,\n            /^(čvn|červen$|června)/i,\n            /^(čvc|červenec|července)/i,\n            /^srp/i,\n            /^zář/i,\n            /^říj/i,\n            /^lis/i,\n            /^pro/i,\n        ],\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsRegex =\n            /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return n > 1 && n < 5 && ~~(n / 10) !== 1;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex:\n            /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex:\n            /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n            l: 'D. M. YYYY',\n        },\n        calendar: {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'před %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cs;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/cv.js",
    "content": "//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cv = moment.defineLocale('cv', {\n        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n            '_'\n        ),\n        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays:\n            'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n                '_'\n            ),\n        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        },\n        calendar: {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (output) {\n                var affix = /сехет$/i.exec(output)\n                    ? 'рен'\n                    : /ҫул$/i.exec(output)\n                      ? 'тан'\n                      : 'ран';\n                return output + affix;\n            },\n            past: '%s каялла',\n            s: 'пӗр-ик ҫеккунт',\n            ss: '%d ҫеккунт',\n            m: 'пӗр минут',\n            mm: '%d минут',\n            h: 'пӗр сехет',\n            hh: '%d сехет',\n            d: 'пӗр кун',\n            dd: '%d кун',\n            M: 'пӗр уйӑх',\n            MM: '%d уйӑх',\n            y: 'пӗр ҫул',\n            yy: '%d ҫул',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal: '%d-мӗш',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return cv;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/cy.js",
    "content": "//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n            '_'\n        ),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n            '_'\n        ),\n        weekdays:\n            'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact: true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '',\n                    'af',\n                    'il',\n                    'ydd',\n                    'ydd',\n                    'ed',\n                    'ed',\n                    'ed',\n                    'fed',\n                    'fed',\n                    'fed', // 1af to 10fed\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'fed', // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cy;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/da.js",
    "content": "//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var da = moment.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'på dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[i] dddd[s kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'få sekunder',\n            ss: '%d sekunder',\n            m: 'et minut',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dage',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'et år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return da;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/de-at.js",
    "content": "//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deAt;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/de-ch.js",
    "content": "//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deCh;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/de.js",
    "content": "//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return de;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/dv.js",
    "content": "//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'ޖެނުއަރީ',\n            'ފެބްރުއަރީ',\n            'މާރިޗު',\n            'އޭޕްރީލު',\n            'މޭ',\n            'ޖޫން',\n            'ޖުލައި',\n            'އޯގަސްޓު',\n            'ސެޕްޓެމްބަރު',\n            'އޮކްޓޯބަރު',\n            'ނޮވެމްބަރު',\n            'ޑިސެމްބަރު',\n        ],\n        weekdays = [\n            'އާދިއްތަ',\n            'ހޯމަ',\n            'އަންގާރަ',\n            'ބުދަ',\n            'ބުރާސްފަތި',\n            'ހުކުރު',\n            'ހޮނިހިރު',\n        ];\n\n    var dv = moment.defineLocale('dv', {\n        months: months,\n        monthsShort: months,\n        weekdays: weekdays,\n        weekdaysShort: weekdays,\n        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/M/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM: function (input) {\n            return 'މފ' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar: {\n            sameDay: '[މިއަދު] LT',\n            nextDay: '[މާދަމާ] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[އިއްޔެ] LT',\n            lastWeek: '[ފާއިތުވި] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ތެރޭގައި %s',\n            past: 'ކުރިން %s',\n            s: 'ސިކުންތުކޮޅެއް',\n            ss: 'd% ސިކުންތު',\n            m: 'މިނިޓެއް',\n            mm: 'މިނިޓު %d',\n            h: 'ގަޑިއިރެއް',\n            hh: 'ގަޑިއިރު %d',\n            d: 'ދުވަހެއް',\n            dd: 'ދުވަސް %d',\n            M: 'މަހެއް',\n            MM: 'މަސް %d',\n            y: 'އަހަރެއް',\n            yy: 'އަހަރު %d',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 7, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return dv;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/el.js",
    "content": "//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl:\n            'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n                '_'\n            ),\n        monthsGenitiveEl:\n            'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n                '_'\n            ),\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (\n                typeof format === 'string' &&\n                /D/.test(format.substring(0, format.indexOf('MMMM')))\n            ) {\n                // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n            '_'\n        ),\n        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM: function (input) {\n            return (input + '').toLowerCase()[0] === 'μ';\n        },\n        meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendarEl: {\n            sameDay: '[Σήμερα {}] LT',\n            nextDay: '[Αύριο {}] LT',\n            nextWeek: 'dddd [{}] LT',\n            lastDay: '[Χθες {}] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        calendar: function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n        },\n        relativeTime: {\n            future: 'σε %s',\n            past: '%s πριν',\n            s: 'λίγα δευτερόλεπτα',\n            ss: '%d δευτερόλεπτα',\n            m: 'ένα λεπτό',\n            mm: '%d λεπτά',\n            h: 'μία ώρα',\n            hh: '%d ώρες',\n            d: 'μία μέρα',\n            dd: '%d μέρες',\n            M: 'ένας μήνας',\n            MM: '%d μήνες',\n            y: 'ένας χρόνος',\n            yy: '%d χρόνια',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4st is the first week of the year.\n        },\n    });\n\n    return el;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/en-au.js",
    "content": "//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enAu = moment.defineLocale('en-au', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enAu;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/en-ca.js",
    "content": "//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enCa = moment.defineLocale('en-ca', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'YYYY-MM-DD',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY h:mm A',\n            LLLL: 'dddd, MMMM D, YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    return enCa;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/en-gb.js",
    "content": "//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enGb = moment.defineLocale('en-gb', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enGb;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/en-ie.js",
    "content": "//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIe = moment.defineLocale('en-ie', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enIe;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/en-il.js",
    "content": "//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIl = moment.defineLocale('en-il', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    return enIl;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/en-in.js",
    "content": "//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIn = moment.defineLocale('en-in', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return enIn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/en-nz.js",
    "content": "//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enNz = moment.defineLocale('en-nz', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enNz;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/en-sg.js",
    "content": "//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enSg = moment.defineLocale('en-sg', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enSg;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/eo.js",
    "content": "//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eo = moment.defineLocale('eo', {\n        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: '[la] D[-an de] MMMM, YYYY',\n            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar: {\n            sameDay: '[Hodiaŭ je] LT',\n            nextDay: '[Morgaŭ je] LT',\n            nextWeek: 'dddd[n je] LT',\n            lastDay: '[Hieraŭ je] LT',\n            lastWeek: '[pasintan] dddd[n je] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'post %s',\n            past: 'antaŭ %s',\n            s: 'kelkaj sekundoj',\n            ss: '%d sekundoj',\n            m: 'unu minuto',\n            mm: '%d minutoj',\n            h: 'unu horo',\n            hh: '%d horoj',\n            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n            dd: '%d tagoj',\n            M: 'unu monato',\n            MM: '%d monatoj',\n            y: 'unu jaro',\n            yy: '%d jaroj',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal: '%da',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eo;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/es-do.js",
    "content": "//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return esDo;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/es-mx.js",
    "content": "//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esMx = moment.defineLocale('es-mx', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return esMx;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/es-us.js",
    "content": "//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'MM/DD/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return esUs;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/es.js",
    "content": "//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return es;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/et.js",
    "content": "//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            ss: [number + 'sekundi', number + 'sekundit'],\n            m: ['ühe minuti', 'üks minut'],\n            mm: [number + ' minuti', number + ' minutit'],\n            h: ['ühe tunni', 'tund aega', 'üks tund'],\n            hh: [number + ' tunni', number + ' tundi'],\n            d: ['ühe päeva', 'üks päev'],\n            M: ['kuu aja', 'kuu aega', 'üks kuu'],\n            MM: [number + ' kuu', number + ' kuud'],\n            y: ['ühe aasta', 'aasta', 'üks aasta'],\n            yy: [number + ' aasta', number + ' aastat'],\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays:\n            'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n                '_'\n            ),\n        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Täna,] LT',\n            nextDay: '[Homme,] LT',\n            nextWeek: '[Järgmine] dddd LT',\n            lastDay: '[Eile,] LT',\n            lastWeek: '[Eelmine] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s pärast',\n            past: '%s tagasi',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: '%d päeva',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return et;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/eu.js",
    "content": "//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eu = moment.defineLocale('eu', {\n        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n            '_'\n        ),\n        monthsShort:\n            'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n                '_'\n            ),\n        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY[ko] MMMM[ren] D[a]',\n            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l: 'YYYY-M-D',\n            ll: 'YYYY[ko] MMM D[a]',\n            lll: 'YYYY[ko] MMM D[a] HH:mm',\n            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n        },\n        calendar: {\n            sameDay: '[gaur] LT[etan]',\n            nextDay: '[bihar] LT[etan]',\n            nextWeek: 'dddd LT[etan]',\n            lastDay: '[atzo] LT[etan]',\n            lastWeek: '[aurreko] dddd LT[etan]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s barru',\n            past: 'duela %s',\n            s: 'segundo batzuk',\n            ss: '%d segundo',\n            m: 'minutu bat',\n            mm: '%d minutu',\n            h: 'ordu bat',\n            hh: '%d ordu',\n            d: 'egun bat',\n            dd: '%d egun',\n            M: 'hilabete bat',\n            MM: '%d hilabete',\n            y: 'urte bat',\n            yy: '%d urte',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eu;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/fa.js",
    "content": "//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '۱',\n            2: '۲',\n            3: '۳',\n            4: '۴',\n            5: '۵',\n            6: '۶',\n            7: '۷',\n            8: '۸',\n            9: '۹',\n            0: '۰',\n        },\n        numberMap = {\n            '۱': '1',\n            '۲': '2',\n            '۳': '3',\n            '۴': '4',\n            '۵': '5',\n            '۶': '6',\n            '۷': '7',\n            '۸': '8',\n            '۹': '9',\n            '۰': '0',\n        };\n\n    var fa = moment.defineLocale('fa', {\n        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n                '_'\n            ),\n        weekdays:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar: {\n            sameDay: '[امروز ساعت] LT',\n            nextDay: '[فردا ساعت] LT',\n            nextWeek: 'dddd [ساعت] LT',\n            lastDay: '[دیروز ساعت] LT',\n            lastWeek: 'dddd [پیش] [ساعت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'در %s',\n            past: '%s پیش',\n            s: 'چند ثانیه',\n            ss: '%d ثانیه',\n            m: 'یک دقیقه',\n            mm: '%d دقیقه',\n            h: 'یک ساعت',\n            hh: '%d ساعت',\n            d: 'یک روز',\n            dd: '%d روز',\n            M: 'یک ماه',\n            MM: '%d ماه',\n            y: 'یک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal: '%dم',\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return fa;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/fi.js",
    "content": "//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersPast =\n            'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n                ' '\n            ),\n        numbersFuture = [\n            'nolla',\n            'yhden',\n            'kahden',\n            'kolmen',\n            'neljän',\n            'viiden',\n            'kuuden',\n            numbersPast[7],\n            numbersPast[8],\n            numbersPast[9],\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                result = isFuture ? 'sekunnin' : 'sekuntia';\n                break;\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10\n            ? isFuture\n                ? numbersFuture[number]\n                : numbersPast[number]\n            : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n            '_'\n        ),\n        monthsShort:\n            'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n                '_'\n            ),\n        weekdays:\n            'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n                '_'\n            ),\n        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[ta] YYYY',\n            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l: 'D.M.YYYY',\n            ll: 'Do MMM YYYY',\n            lll: 'Do MMM YYYY, [klo] HH.mm',\n            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n        },\n        calendar: {\n            sameDay: '[tänään] [klo] LT',\n            nextDay: '[huomenna] [klo] LT',\n            nextWeek: 'dddd [klo] LT',\n            lastDay: '[eilen] [klo] LT',\n            lastWeek: '[viime] dddd[na] [klo] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s päästä',\n            past: '%s sitten',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fi;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/fil.js",
    "content": "//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fil = moment.defineLocale('fil', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fil;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/fo.js",
    "content": "//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fo = moment.defineLocale('fo', {\n        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D. MMMM, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Í dag kl.] LT',\n            nextDay: '[Í morgin kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[Í gjár kl.] LT',\n            lastWeek: '[síðstu] dddd [kl] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'um %s',\n            past: '%s síðani',\n            s: 'fá sekund',\n            ss: '%d sekundir',\n            m: 'ein minuttur',\n            mm: '%d minuttir',\n            h: 'ein tími',\n            hh: '%d tímar',\n            d: 'ein dagur',\n            dd: '%d dagar',\n            M: 'ein mánaður',\n            MM: '%d mánaðir',\n            y: 'eitt ár',\n            yy: '%d ár',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fo;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/fr-ca.js",
    "content": "//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n    });\n\n    return frCa;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/fr-ch.js",
    "content": "//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return frCh;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/fr.js",
    "content": "//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsStrictRegex =\n            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsShortStrictRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n        monthsRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsParse = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    var fr = moment.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fr;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/fy.js",
    "content": "//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact: true,\n        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n            '_'\n        ),\n        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oer %s',\n            past: '%s lyn',\n            s: 'in pear sekonden',\n            ss: '%d sekonden',\n            m: 'ien minút',\n            mm: '%d minuten',\n            h: 'ien oere',\n            hh: '%d oeren',\n            d: 'ien dei',\n            dd: '%d dagen',\n            M: 'ien moanne',\n            MM: '%d moannen',\n            y: 'ien jier',\n            yy: '%d jierren',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fy;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ga.js",
    "content": "//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Eanáir',\n            'Feabhra',\n            'Márta',\n            'Aibreán',\n            'Bealtaine',\n            'Meitheamh',\n            'Iúil',\n            'Lúnasa',\n            'Meán Fómhair',\n            'Deireadh Fómhair',\n            'Samhain',\n            'Nollaig',\n        ],\n        monthsShort = [\n            'Ean',\n            'Feabh',\n            'Márt',\n            'Aib',\n            'Beal',\n            'Meith',\n            'Iúil',\n            'Lún',\n            'M.F.',\n            'D.F.',\n            'Samh',\n            'Noll',\n        ],\n        weekdays = [\n            'Dé Domhnaigh',\n            'Dé Luain',\n            'Dé Máirt',\n            'Dé Céadaoin',\n            'Déardaoin',\n            'Dé hAoine',\n            'Dé Sathairn',\n        ],\n        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné ag] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d míonna',\n            y: 'bliain',\n            yy: '%d bliain',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ga;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/gd.js",
    "content": "//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Am Faoilleach',\n            'An Gearran',\n            'Am Màrt',\n            'An Giblean',\n            'An Cèitean',\n            'An t-Ògmhios',\n            'An t-Iuchar',\n            'An Lùnastal',\n            'An t-Sultain',\n            'An Dàmhair',\n            'An t-Samhain',\n            'An Dùbhlachd',\n        ],\n        monthsShort = [\n            'Faoi',\n            'Gear',\n            'Màrt',\n            'Gibl',\n            'Cèit',\n            'Ògmh',\n            'Iuch',\n            'Lùn',\n            'Sult',\n            'Dàmh',\n            'Samh',\n            'Dùbh',\n        ],\n        weekdays = [\n            'Didòmhnaich',\n            'Diluain',\n            'Dimàirt',\n            'Diciadain',\n            'Diardaoin',\n            'Dihaoine',\n            'Disathairne',\n        ],\n        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n        weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[An-diugh aig] LT',\n            nextDay: '[A-màireach aig] LT',\n            nextWeek: 'dddd [aig] LT',\n            lastDay: '[An-dè aig] LT',\n            lastWeek: 'dddd [seo chaidh] [aig] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ann an %s',\n            past: 'bho chionn %s',\n            s: 'beagan diogan',\n            ss: '%d diogan',\n            m: 'mionaid',\n            mm: '%d mionaidean',\n            h: 'uair',\n            hh: '%d uairean',\n            d: 'latha',\n            dd: '%d latha',\n            M: 'mìos',\n            MM: '%d mìosan',\n            y: 'bliadhna',\n            yy: '%d bliadhna',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gd;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/gl.js",
    "content": "//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var gl = moment.defineLocale('gl', {\n        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort:\n            'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n            },\n            lastDay: function () {\n                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past: 'hai %s',\n            s: 'uns segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'unha hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gl;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/gom-deva.js",
    "content": "//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n            m: ['एका मिणटान', 'एक मिनूट'],\n            mm: [number + ' मिणटांनी', number + ' मिणटां'],\n            h: ['एका वरान', 'एक वर'],\n            hh: [number + ' वरांनी', number + ' वरां'],\n            d: ['एका दिसान', 'एक दीस'],\n            dd: [number + ' दिसांनी', number + ' दीस'],\n            M: ['एका म्हयन्यान', 'एक म्हयनो'],\n            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n            y: ['एका वर्सान', 'एक वर्स'],\n            yy: [number + ' वर्सांनी', number + ' वर्सां'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomDeva = moment.defineLocale('gom-deva', {\n        months: {\n            standalone:\n                'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n                    '_'\n                ),\n            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [वाजतां]',\n            LTS: 'A h:mm:ss [वाजतां]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n        },\n        calendar: {\n            sameDay: '[आयज] LT',\n            nextDay: '[फाल्यां] LT',\n            nextWeek: '[फुडलो] dddd[,] LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[फाटलो] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s आदीं',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'वेर' only applies to day of the month\n                case 'D':\n                    return number + 'वेर';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राती') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळीं') {\n                return hour;\n            } else if (meridiem === 'दनपारां') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'सांजे') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'राती';\n            } else if (hour < 12) {\n                return 'सकाळीं';\n            } else if (hour < 16) {\n                return 'दनपारां';\n            } else if (hour < 20) {\n                return 'सांजे';\n            } else {\n                return 'राती';\n            }\n        },\n    });\n\n    return gomDeva;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/gom-latn.js",
    "content": "//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['thoddea sekondamni', 'thodde sekond'],\n            ss: [number + ' sekondamni', number + ' sekond'],\n            m: ['eka mintan', 'ek minut'],\n            mm: [number + ' mintamni', number + ' mintam'],\n            h: ['eka voran', 'ek vor'],\n            hh: [number + ' voramni', number + ' voram'],\n            d: ['eka disan', 'ek dis'],\n            dd: [number + ' disamni', number + ' dis'],\n            M: ['eka mhoinean', 'ek mhoino'],\n            MM: [number + ' mhoineamni', number + ' mhoine'],\n            y: ['eka vorsan', 'ek voros'],\n            yy: [number + ' vorsamni', number + ' vorsam'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months: {\n            standalone:\n                'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n                    '_'\n                ),\n            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [vazta]',\n            LTS: 'A h:mm:ss [vazta]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [vazta]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n        },\n        calendar: {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Fuddlo] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fattlo] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s adim',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /rati|sokallim|donparam|sanje/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokallim') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokallim';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        },\n    });\n\n    return gomLatn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/gu.js",
    "content": "//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '૧',\n            2: '૨',\n            3: '૩',\n            4: '૪',\n            5: '૫',\n            6: '૬',\n            7: '૭',\n            8: '૮',\n            9: '૯',\n            0: '૦',\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0',\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n            '_'\n        ),\n        monthsShort:\n            'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n            '_'\n        ),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પહેલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ',\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return gu;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/he.js",
    "content": "//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var he = moment.defineLocale('he', {\n        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n            '_'\n        ),\n        monthsShort:\n            'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [ב]MMMM YYYY',\n            LLL: 'D [ב]MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[היום ב־]LT',\n            nextDay: '[מחר ב־]LT',\n            nextWeek: 'dddd [בשעה] LT',\n            lastDay: '[אתמול ב־]LT',\n            lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'בעוד %s',\n            past: 'לפני %s',\n            s: 'מספר שניות',\n            ss: '%d שניות',\n            m: 'דקה',\n            mm: '%d דקות',\n            h: 'שעה',\n            hh: function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d: 'יום',\n            dd: function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M: 'חודש',\n            MM: function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y: 'שנה',\n            yy: function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            },\n        },\n        meridiemParse:\n            /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM: function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        },\n    });\n\n    return he;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/hi.js",
    "content": "//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        },\n        monthsParse = [\n            /^जन/i,\n            /^फ़र|फर/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सितं|सित/i,\n            /^अक्टू/i,\n            /^नव|नवं/i,\n            /^दिसं|दिस/i,\n        ],\n        shortMonthsParse = [\n            /^जन/i,\n            /^फ़र/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सित/i,\n            /^अक्टू/i,\n            /^नव/i,\n            /^दिस/i,\n        ];\n\n    var hi = moment.defineLocale('hi', {\n        months: {\n            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n                '_'\n            ),\n            standalone:\n                'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm बजे',\n            LTS: 'A h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n        },\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: shortMonthsParse,\n\n        monthsRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsShortRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsStrictRegex:\n            /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n        monthsShortStrictRegex:\n            /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[कल] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[कल] LT',\n            lastWeek: '[पिछले] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s में',\n            past: '%s पहले',\n            s: 'कुछ ही क्षण',\n            ss: '%d सेकंड',\n            m: 'एक मिनट',\n            mm: '%d मिनट',\n            h: 'एक घंटा',\n            hh: '%d घंटे',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महीने',\n            MM: '%d महीने',\n            y: 'एक वर्ष',\n            yy: '%d वर्ष',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return hi;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/hr.js",
    "content": "//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months: {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n                '_'\n            ),\n            standalone:\n                'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM YYYY',\n            LLL: 'Do MMMM YYYY H:mm',\n            LLLL: 'dddd, Do MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prošlu] [nedjelju] [u] LT';\n                    case 3:\n                        return '[prošlu] [srijedu] [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hr;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/hu.js",
    "content": "//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt  : https://github.com/passatgt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var weekEndings =\n        'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix)\n                    ? ' másodperc'\n                    : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY. MMMM D.',\n            LLL: 'YYYY. MMMM D. H:mm',\n            LLLL: 'YYYY. MMMM D., dddd H:mm',\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar: {\n            sameDay: '[ma] LT[-kor]',\n            nextDay: '[holnap] LT[-kor]',\n            nextWeek: function () {\n                return week.call(this, true);\n            },\n            lastDay: '[tegnap] LT[-kor]',\n            lastWeek: function () {\n                return week.call(this, false);\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s múlva',\n            past: '%s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return hu;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/hy-am.js",
    "content": "//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months: {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n                '_'\n            ),\n            standalone:\n                'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays:\n            'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n                '_'\n            ),\n        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY թ.',\n            LLL: 'D MMMM YYYY թ., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n        },\n        calendar: {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s հետո',\n            past: '%s առաջ',\n            s: 'մի քանի վայրկյան',\n            ss: '%d վայրկյան',\n            m: 'րոպե',\n            mm: '%d րոպե',\n            h: 'ժամ',\n            hh: '%d ժամ',\n            d: 'օր',\n            dd: '%d օր',\n            M: 'ամիս',\n            MM: '%d ամիս',\n            y: 'տարի',\n            yy: '%d տարի',\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem: function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hyAm;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/id.js",
    "content": "//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var id = moment.defineLocale('id', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Besok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kemarin pukul] LT',\n            lastWeek: 'dddd [lalu pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lalu',\n            s: 'beberapa detik',\n            ss: '%d detik',\n            m: 'semenit',\n            mm: '%d menit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return id;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/is.js",
    "content": "//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nokkrar sekúndur'\n                    : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n                    );\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return (\n                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n                    );\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture\n                            ? 'klukkustundir'\n                            : 'klukkustundum')\n                    );\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n        },\n        calendar: {\n            sameDay: '[í dag kl.] LT',\n            nextDay: '[á morgun kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[í gær kl.] LT',\n            lastWeek: '[síðasta] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'eftir %s',\n            past: 'fyrir %s síðan',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: 'klukkustund',\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return is;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/it-ch.js",
    "content": "//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var itCh = moment.defineLocale('it-ch', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return itCh;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/it.js",
    "content": "//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var it = moment.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return it;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ja.js",
    "content": "//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ja = moment.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    return ja;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/jv.js",
    "content": "//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var jv = moment.defineLocale('jv', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar: {\n            sameDay: '[Dinten puniko pukul] LT',\n            nextDay: '[Mbenjang pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kala wingi pukul] LT',\n            lastWeek: 'dddd [kepengker pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'wonten ing %s',\n            past: '%s ingkang kepengker',\n            s: 'sawetawis detik',\n            ss: '%d detik',\n            m: 'setunggal menit',\n            mm: '%d menit',\n            h: 'setunggal jam',\n            hh: '%d jam',\n            d: 'sedinten',\n            dd: '%d dinten',\n            M: 'sewulan',\n            MM: '%d wulan',\n            y: 'setaun',\n            yy: '%d taun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return jv;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ka.js",
    "content": "//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ka = moment.defineLocale('ka', {\n        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n            '_'\n        ),\n        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays: {\n            standalone:\n                'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n                    '_'\n                ),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n                '_'\n            ),\n            isFormat: /(წინა|შემდეგ)/,\n        },\n        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[დღეს] LT[-ზე]',\n            nextDay: '[ხვალ] LT[-ზე]',\n            lastDay: '[გუშინ] LT[-ზე]',\n            nextWeek: '[შემდეგ] dddd LT[-ზე]',\n            lastWeek: '[წინა] dddd LT-ზე',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return s.replace(\n                    /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,\n                    function ($0, $1, $2) {\n                        return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n                    }\n                );\n            },\n            past: function (s) {\n                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if (/წელი/.test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n                return s;\n            },\n            s: 'რამდენიმე წამი',\n            ss: '%d წამი',\n            m: 'წუთი',\n            mm: '%d წუთი',\n            h: 'საათი',\n            hh: '%d საათი',\n            d: 'დღე',\n            dd: '%d დღე',\n            M: 'თვე',\n            MM: '%d თვე',\n            y: 'წელი',\n            yy: '%d წელი',\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal: function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if (\n                number < 20 ||\n                (number <= 100 && number % 20 === 0) ||\n                number % 100 === 0\n            ) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week: {\n            dow: 1,\n            doy: 7,\n        },\n    });\n\n    return ka;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/kk.js",
    "content": "//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші',\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n            '_'\n        ),\n        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n            '_'\n        ),\n        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгін сағат] LT',\n            nextDay: '[Ертең сағат] LT',\n            nextWeek: 'dddd [сағат] LT',\n            lastDay: '[Кеше сағат] LT',\n            lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ішінде',\n            past: '%s бұрын',\n            s: 'бірнеше секунд',\n            ss: '%d секунд',\n            m: 'бір минут',\n            mm: '%d минут',\n            h: 'бір сағат',\n            hh: '%d сағат',\n            d: 'бір күн',\n            dd: '%d күн',\n            M: 'бір ай',\n            MM: '%d ай',\n            y: 'бір жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return kk;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/km.js",
    "content": "//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '១',\n            2: '២',\n            3: '៣',\n            4: '៤',\n            5: '៥',\n            6: '៦',\n            7: '៧',\n            8: '៨',\n            9: '៩',\n            0: '០',\n        },\n        numberMap = {\n            '១': '1',\n            '២': '2',\n            '៣': '3',\n            '៤': '4',\n            '៥': '5',\n            '៦': '6',\n            '៧': '7',\n            '៨': '8',\n            '៩': '9',\n            '០': '0',\n        };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort:\n            'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n                '_'\n            ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ',\n        },\n        dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n        ordinal: 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return km;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/kn.js",
    "content": "//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '೧',\n            2: '೨',\n            3: '೩',\n            4: '೪',\n            5: '೫',\n            6: '೬',\n            7: '೭',\n            8: '೮',\n            9: '೯',\n            0: '೦',\n        },\n        numberMap = {\n            '೧': '1',\n            '೨': '2',\n            '೩': '3',\n            '೪': '4',\n            '೫': '5',\n            '೬': '6',\n            '೭': '7',\n            '೮': '8',\n            '೯': '9',\n            '೦': '0',\n        };\n\n    var kn = moment.defineLocale('kn', {\n        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n            '_'\n        ),\n        monthsShort:\n            'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[ಇಂದು] LT',\n            nextDay: '[ನಾಳೆ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ನಿನ್ನೆ] LT',\n            lastWeek: '[ಕೊನೆಯ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ನಂತರ',\n            past: '%s ಹಿಂದೆ',\n            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss: '%d ಸೆಕೆಂಡುಗಳು',\n            m: 'ಒಂದು ನಿಮಿಷ',\n            mm: '%d ನಿಮಿಷ',\n            h: 'ಒಂದು ಗಂಟೆ',\n            hh: '%d ಗಂಟೆ',\n            d: 'ಒಂದು ದಿನ',\n            dd: '%d ದಿನ',\n            M: 'ಒಂದು ತಿಂಗಳು',\n            MM: '%d ತಿಂಗಳು',\n            y: 'ಒಂದು ವರ್ಷ',\n            yy: '%d ವರ್ಷ',\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal: function (number) {\n            return number + 'ನೇ';\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return kn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ko.js",
    "content": "//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ko = moment.defineLocale('ko', {\n        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n            '_'\n        ),\n        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY년 MMMM D일',\n            LLL: 'YYYY년 MMMM D일 A h:mm',\n            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n            l: 'YYYY.MM.DD.',\n            ll: 'YYYY년 MMMM D일',\n            lll: 'YYYY년 MMMM D일 A h:mm',\n            llll: 'YYYY년 MMMM D일 dddd A h:mm',\n        },\n        calendar: {\n            sameDay: '오늘 LT',\n            nextDay: '내일 LT',\n            nextWeek: 'dddd LT',\n            lastDay: '어제 LT',\n            lastWeek: '지난주 dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s 후',\n            past: '%s 전',\n            s: '몇 초',\n            ss: '%d초',\n            m: '1분',\n            mm: '%d분',\n            h: '한 시간',\n            hh: '%d시간',\n            d: '하루',\n            dd: '%d일',\n            M: '한 달',\n            MM: '%d달',\n            y: '일 년',\n            yy: '%d년',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse: /오전|오후/,\n        isPM: function (token) {\n            return token === '오후';\n        },\n        meridiem: function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        },\n    });\n\n    return ko;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ku-kmr.js",
    "content": "//! moment.js locale configuration\n//! locale : Northern Kurdish [ku-kmr]\n//! authors : Mazlum Özdogan : https://github.com/mergehez\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(num, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['çend sanîye', 'çend sanîyeyan'],\n            ss: [num + ' sanîye', num + ' sanîyeyan'],\n            m: ['deqîqeyek', 'deqîqeyekê'],\n            mm: [num + ' deqîqe', num + ' deqîqeyan'],\n            h: ['saetek', 'saetekê'],\n            hh: [num + ' saet', num + ' saetan'],\n            d: ['rojek', 'rojekê'],\n            dd: [num + ' roj', num + ' rojan'],\n            w: ['hefteyek', 'hefteyekê'],\n            ww: [num + ' hefte', num + ' hefteyan'],\n            M: ['mehek', 'mehekê'],\n            MM: [num + ' meh', num + ' mehan'],\n            y: ['salek', 'salekê'],\n            yy: [num + ' sal', num + ' salan'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    // function obliqueNumSuffix(num) {\n    //     if(num.includes(':'))\n    //         num = parseInt(num.split(':')[0]);\n    //     else\n    //         num = parseInt(num);\n    //     return num == 0 || num % 10 == 1 ? 'ê'\n    //                         : (num > 10 && num % 10 == 0 ? 'î' : 'an');\n    // }\n    function ezafeNumSuffix(num) {\n        num = '' + num;\n        var l = num.substring(num.length - 1),\n            ll = num.length > 1 ? num.substring(num.length - 2) : '';\n        if (\n            !(ll == 12 || ll == 13) &&\n            (l == '2' || l == '3' || ll == '50' || l == '70' || l == '80')\n        )\n            return 'yê';\n        return 'ê';\n    }\n\n    var kuKmr = moment.defineLocale('ku-kmr', {\n        // According to the spelling rules defined by the work group of Weqfa Mezopotamyayê (Mesopotamia Foundation)\n        // this should be: 'Kanûna Paşîn_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Çirîya Pêşîn_Çirîya Paşîn_Kanûna Pêşîn'\n        // But the names below are more well known and handy\n        months: 'Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar'.split(\n            '_'\n        ),\n        monthsShort: 'Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî'.split('_'),\n        weekdaysShort: 'Yek_Du_Sê_Çar_Pên_În_Şem'.split('_'),\n        weekdaysMin: 'Ye_Du_Sê_Ça_Pê_În_Şe'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'bn' : 'BN';\n            } else {\n                return isLower ? 'pn' : 'PN';\n            }\n        },\n        meridiemParse: /bn|BN|pn|PN/,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[a] YYYY[an]',\n            LLL: 'Do MMMM[a] YYYY[an] HH:mm',\n            LLLL: 'dddd, Do MMMM[a] YYYY[an] HH:mm',\n            ll: 'Do MMM[.] YYYY[an]',\n            lll: 'Do MMM[.] YYYY[an] HH:mm',\n            llll: 'ddd[.], Do MMM[.] YYYY[an] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Îro di saet] LT [de]',\n            nextDay: '[Sibê di saet] LT [de]',\n            nextWeek: 'dddd [di saet] LT [de]',\n            lastDay: '[Duh di saet] LT [de]',\n            lastWeek: 'dddd[a borî di saet] LT [de]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'di %s de',\n            past: 'berî %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(?:yê|ê|\\.)/,\n        ordinal: function (num, period) {\n            var p = period.toLowerCase();\n            if (p.includes('w') || p.includes('m')) return num + '.';\n\n            return num + ezafeNumSuffix(num);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return kuKmr;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ku.js",
    "content": "//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        months = [\n            'کانونی دووەم',\n            'شوبات',\n            'ئازار',\n            'نیسان',\n            'ئایار',\n            'حوزەیران',\n            'تەمموز',\n            'ئاب',\n            'ئەیلوول',\n            'تشرینی یەكەم',\n            'تشرینی دووەم',\n            'كانونی یەکەم',\n        ];\n\n    var ku = moment.defineLocale('ku', {\n        months: months,\n        monthsShort: months,\n        weekdays:\n            'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar: {\n            sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay: '[به‌یانی كاتژمێر] LT',\n            nextWeek: 'dddd [كاتژمێر] LT',\n            lastDay: '[دوێنێ كاتژمێر] LT',\n            lastWeek: 'dddd [كاتژمێر] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'له‌ %s',\n            past: '%s',\n            s: 'چه‌ند چركه‌یه‌ك',\n            ss: 'چركه‌ %d',\n            m: 'یه‌ك خوله‌ك',\n            mm: '%d خوله‌ك',\n            h: 'یه‌ك كاتژمێر',\n            hh: '%d كاتژمێر',\n            d: 'یه‌ك ڕۆژ',\n            dd: '%d ڕۆژ',\n            M: 'یه‌ك مانگ',\n            MM: '%d مانگ',\n            y: 'یه‌ك ساڵ',\n            yy: '%d ساڵ',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ku;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ky.js",
    "content": "//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү',\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n            '_'\n        ),\n        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n            '_'\n        ),\n        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгүн саат] LT',\n            nextDay: '[Эртең саат] LT',\n            nextWeek: 'dddd [саат] LT',\n            lastDay: '[Кечээ саат] LT',\n            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ичинде',\n            past: '%s мурун',\n            s: 'бирнече секунд',\n            ss: '%d секунд',\n            m: 'бир мүнөт',\n            mm: '%d мүнөт',\n            h: 'бир саат',\n            hh: '%d саат',\n            d: 'бир күн',\n            dd: '%d күн',\n            M: 'бир ай',\n            MM: '%d ай',\n            y: 'бир жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ky;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/lb.js",
    "content": "//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eng Minutt', 'enger Minutt'],\n            h: ['eng Stonn', 'enger Stonn'],\n            d: ['een Dag', 'engem Dag'],\n            M: ['ee Mount', 'engem Mount'],\n            y: ['ee Joer', 'engem Joer'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10,\n                firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            },\n        },\n        relativeTime: {\n            future: processFutureTime,\n            past: processPastTime,\n            s: 'e puer Sekonnen',\n            ss: '%d Sekonnen',\n            m: processRelativeTime,\n            mm: '%d Minutten',\n            h: processRelativeTime,\n            hh: '%d Stonnen',\n            d: processRelativeTime,\n            dd: '%d Deeg',\n            M: processRelativeTime,\n            MM: '%d Méint',\n            y: processRelativeTime,\n            yy: '%d Joer',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lb;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/lo.js",
    "content": "//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var lo = moment.defineLocale('lo', {\n        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n                '_'\n            ),\n        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar: {\n            sameDay: '[ມື້ນີ້ເວລາ] LT',\n            nextDay: '[ມື້ອື່ນເວລາ] LT',\n            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ອີກ %s',\n            past: '%sຜ່ານມາ',\n            s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss: '%d ວິນາທີ',\n            m: '1 ນາທີ',\n            mm: '%d ນາທີ',\n            h: '1 ຊົ່ວໂມງ',\n            hh: '%d ຊົ່ວໂມງ',\n            d: '1 ມື້',\n            dd: '%d ມື້',\n            M: '1 ເດືອນ',\n            MM: '%d ເດືອນ',\n            y: '1 ປີ',\n            yy: '%d ປີ',\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal: function (number) {\n            return 'ທີ່' + number;\n        },\n    });\n\n    return lo;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/lt.js",
    "content": "//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundė_sekundžių_sekundes',\n        m: 'minutė_minutės_minutę',\n        mm: 'minutės_minučių_minutes',\n        h: 'valanda_valandos_valandą',\n        hh: 'valandos_valandų_valandas',\n        d: 'diena_dienos_dieną',\n        dd: 'dienos_dienų_dienas',\n        M: 'mėnuo_mėnesio_mėnesį',\n        MM: 'mėnesiai_mėnesių_mėnesius',\n        y: 'metai_metų_metus',\n        yy: 'metai_metų_metus',\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix\n            ? forms(key)[0]\n            : isFuture\n              ? forms(key)[1]\n              : forms(key)[2];\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return (\n                result + translateSingular(number, withoutSuffix, key[0], isFuture)\n            );\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months: {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n                '_'\n            ),\n            standalone:\n                'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n                    '_'\n                ),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n        },\n        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays: {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n                '_'\n            ),\n            standalone:\n                'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n                    '_'\n                ),\n            isFormat: /dddd HH:mm/,\n        },\n        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY [m.] MMMM D [d.]',\n            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l: 'YYYY-MM-DD',\n            ll: 'YYYY [m.] MMMM D [d.]',\n            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n        },\n        calendar: {\n            sameDay: '[Šiandien] LT',\n            nextDay: '[Rytoj] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[Vakar] LT',\n            lastWeek: '[Praėjusį] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'po %s',\n            past: 'prieš %s',\n            s: translateSeconds,\n            ss: translate,\n            m: translateSingular,\n            mm: translate,\n            h: translateSingular,\n            hh: translate,\n            d: translateSingular,\n            dd: translate,\n            M: translateSingular,\n            MM: translate,\n            y: translateSingular,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal: function (number) {\n            return number + '-oji';\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lt;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/lv.js",
    "content": "//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        h: 'stundas_stundām_stunda_stundas'.split('_'),\n        hh: 'stundas_stundām_stunda_stundas'.split('_'),\n        d: 'dienas_dienām_diena_dienas'.split('_'),\n        dd: 'dienas_dienām_diena_dienas'.split('_'),\n        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        y: 'gada_gadiem_gads_gadi'.split('_'),\n        yy: 'gada_gadiem_gads_gadi'.split('_'),\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays:\n            'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY.',\n            LL: 'YYYY. [gada] D. MMMM',\n            LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n        },\n        calendar: {\n            sameDay: '[Šodien pulksten] LT',\n            nextDay: '[Rīt pulksten] LT',\n            nextWeek: 'dddd [pulksten] LT',\n            lastDay: '[Vakar pulksten] LT',\n            lastWeek: '[Pagājušā] dddd [pulksten] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'pēc %s',\n            past: 'pirms %s',\n            s: relativeSeconds,\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithSingular,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithSingular,\n            hh: relativeTimeWithPlural,\n            d: relativeTimeWithSingular,\n            dd: relativeTimeWithPlural,\n            M: relativeTimeWithSingular,\n            MM: relativeTimeWithPlural,\n            y: relativeTimeWithSingular,\n            yy: relativeTimeWithPlural,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lv;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/me.js",
    "content": "//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                  ? wordKey[1]\n                  : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'dan',\n            dd: translator.translate,\n            M: 'mjesec',\n            MM: translator.translate,\n            y: 'godinu',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return me;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/mi.js",
    "content": "//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n            '_'\n        ),\n        monthsShort:\n            'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n                '_'\n            ),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mi;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/mk.js",
    "content": "//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mk = moment.defineLocale('mk', {\n        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Денес во] LT',\n            nextDay: '[Утре во] LT',\n            nextWeek: '[Во] dddd [во] LT',\n            lastDay: '[Вчера во] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пред %s',\n            s: 'неколку секунди',\n            ss: '%d секунди',\n            m: 'една минута',\n            mm: '%d минути',\n            h: 'еден час',\n            hh: '%d часа',\n            d: 'еден ден',\n            dd: '%d дена',\n            M: 'еден месец',\n            MM: '%d месеци',\n            y: 'една година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return mk;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ml.js",
    "content": "//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ml = moment.defineLocale('ml', {\n        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n                '_'\n            ),\n        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm -നു',\n            LTS: 'A h:mm:ss -നു',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm -നു',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n        },\n        calendar: {\n            sameDay: '[ഇന്ന്] LT',\n            nextDay: '[നാളെ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ഇന്നലെ] LT',\n            lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s കഴിഞ്ഞ്',\n            past: '%s മുൻപ്',\n            s: 'അൽപ നിമിഷങ്ങൾ',\n            ss: '%d സെക്കൻഡ്',\n            m: 'ഒരു മിനിറ്റ്',\n            mm: '%d മിനിറ്റ്',\n            h: 'ഒരു മണിക്കൂർ',\n            hh: '%d മണിക്കൂർ',\n            d: 'ഒരു ദിവസം',\n            dd: '%d ദിവസം',\n            M: 'ഒരു മാസം',\n            MM: '%d മാസം',\n            y: 'ഒരു വർഷം',\n            yy: '%d വർഷം',\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        },\n    });\n\n    return ml;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/mn.js",
    "content": "//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n            '_'\n        ),\n        monthsShort:\n            '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY оны MMMMын D',\n            LLL: 'YYYY оны MMMMын D HH:mm',\n            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM: function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar: {\n            sameDay: '[Өнөөдөр] LT',\n            nextDay: '[Маргааш] LT',\n            nextWeek: '[Ирэх] dddd LT',\n            lastDay: '[Өчигдөр] LT',\n            lastWeek: '[Өнгөрсөн] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s дараа',\n            past: '%s өмнө',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        },\n    });\n\n    return mn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/mr.js",
    "content": "//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंद';\n                    break;\n                case 'ss':\n                    output = '%d सेकंद';\n                    break;\n                case 'm':\n                    output = 'एक मिनिट';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटे';\n                    break;\n                case 'h':\n                    output = 'एक तास';\n                    break;\n                case 'hh':\n                    output = '%d तास';\n                    break;\n                case 'd':\n                    output = 'एक दिवस';\n                    break;\n                case 'dd':\n                    output = '%d दिवस';\n                    break;\n                case 'M':\n                    output = 'एक महिना';\n                    break;\n                case 'MM':\n                    output = '%d महिने';\n                    break;\n                case 'y':\n                    output = 'एक वर्ष';\n                    break;\n                case 'yy':\n                    output = '%d वर्षे';\n                    break;\n            }\n        } else {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंदां';\n                    break;\n                case 'ss':\n                    output = '%d सेकंदां';\n                    break;\n                case 'm':\n                    output = 'एका मिनिटा';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटां';\n                    break;\n                case 'h':\n                    output = 'एका तासा';\n                    break;\n                case 'hh':\n                    output = '%d तासां';\n                    break;\n                case 'd':\n                    output = 'एका दिवसा';\n                    break;\n                case 'dd':\n                    output = '%d दिवसां';\n                    break;\n                case 'M':\n                    output = 'एका महिन्या';\n                    break;\n                case 'MM':\n                    output = '%d महिन्यां';\n                    break;\n                case 'y':\n                    output = 'एका वर्षा';\n                    break;\n                case 'yy':\n                    output = '%d वर्षां';\n                    break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm वाजता',\n            LTS: 'A h:mm:ss वाजता',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm वाजता',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[उद्या] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr,\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n                return hour;\n            } else if (\n                meridiem === 'दुपारी' ||\n                meridiem === 'सायंकाळी' ||\n                meridiem === 'रात्री'\n            ) {\n                return hour >= 12 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour >= 0 && hour < 6) {\n                return 'पहाटे';\n            } else if (hour < 12) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return mr;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ms-my.js",
    "content": "//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var msMy = moment.defineLocale('ms-my', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return msMy;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ms.js",
    "content": "//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ms = moment.defineLocale('ms', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ms;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/mt.js",
    "content": "//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mt = moment.defineLocale('mt', {\n        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays:\n            'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n                '_'\n            ),\n        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Illum fil-]LT',\n            nextDay: '[Għada fil-]LT',\n            nextWeek: 'dddd [fil-]LT',\n            lastDay: '[Il-bieraħ fil-]LT',\n            lastWeek: 'dddd [li għadda] [fil-]LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'f’ %s',\n            past: '%s ilu',\n            s: 'ftit sekondi',\n            ss: '%d sekondi',\n            m: 'minuta',\n            mm: '%d minuti',\n            h: 'siegħa',\n            hh: '%d siegħat',\n            d: 'ġurnata',\n            dd: '%d ġranet',\n            M: 'xahar',\n            MM: '%d xhur',\n            y: 'sena',\n            yy: '%d sni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mt;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/my.js",
    "content": "//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '၁',\n            2: '၂',\n            3: '၃',\n            4: '၄',\n            5: '၅',\n            6: '၆',\n            7: '၇',\n            8: '၈',\n            9: '၉',\n            0: '၀',\n        },\n        numberMap = {\n            '၁': '1',\n            '၂': '2',\n            '၃': '3',\n            '၄': '4',\n            '၅': '5',\n            '၆': '6',\n            '၇': '7',\n            '၈': '8',\n            '၉': '9',\n            '၀': '0',\n        };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n            '_'\n        ),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n            '_'\n        ),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss: '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်',\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return my;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/nb.js",
    "content": "//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nb = moment.defineLocale('nb', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'noen sekunder',\n            ss: '%d sekunder',\n            m: 'ett minutt',\n            mm: '%d minutter',\n            h: 'én time',\n            hh: '%d timer',\n            d: 'én dag',\n            dd: '%d dager',\n            w: 'én uke',\n            ww: '%d uker',\n            M: 'én måned',\n            MM: '%d måneder',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nb;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ne.js",
    "content": "//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    var ne = moment.defineLocale('ne', {\n        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n            '_'\n        ),\n        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'Aको h:mm बजे',\n            LTS: 'Aको h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[भोलि] LT',\n            nextWeek: '[आउँदो] dddd[,] LT',\n            lastDay: '[हिजो] LT',\n            lastWeek: '[गएको] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमा',\n            past: '%s अगाडि',\n            s: 'केही क्षण',\n            ss: '%d सेकेण्ड',\n            m: 'एक मिनेट',\n            mm: '%d मिनेट',\n            h: 'एक घण्टा',\n            hh: '%d घण्टा',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महिना',\n            MM: '%d महिना',\n            y: 'एक बर्ष',\n            yy: '%d बर्ष',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ne;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/nl-be.js",
    "content": "//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^(maart|mrt\\.?)$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nlBe;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/nl.js",
    "content": "//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^(maart|mrt\\.?)$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nl;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/nn.js",
    "content": "//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nn = moment.defineLocale('nn', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s sidan',\n            s: 'nokre sekund',\n            ss: '%d sekund',\n            m: 'eit minutt',\n            mm: '%d minutt',\n            h: 'ein time',\n            hh: '%d timar',\n            d: 'ein dag',\n            dd: '%d dagar',\n            w: 'ei veke',\n            ww: '%d veker',\n            M: 'ein månad',\n            MM: '%d månader',\n            y: 'eit år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/oc-lnc.js",
    "content": "//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ocLnc = moment.defineLocale('oc-lnc', {\n        months: {\n            standalone:\n                'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n                    '_'\n                ),\n            format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n            '_'\n        ),\n        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: '[uèi a] LT',\n            nextDay: '[deman a] LT',\n            nextWeek: 'dddd [a] LT',\n            lastDay: '[ièr a] LT',\n            lastWeek: 'dddd [passat a] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'unas segondas',\n            ss: '%d segondas',\n            m: 'una minuta',\n            mm: '%d minutas',\n            h: 'una ora',\n            hh: '%d oras',\n            d: 'un jorn',\n            dd: '%d jorns',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                      ? 'n'\n                      : number === 3\n                        ? 'r'\n                        : number === 4\n                          ? 't'\n                          : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4,\n        },\n    });\n\n    return ocLnc;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/pa-in.js",
    "content": "//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '੧',\n            2: '੨',\n            3: '੩',\n            4: '੪',\n            5: '੫',\n            6: '੬',\n            7: '੭',\n            8: '੮',\n            9: '੯',\n            0: '੦',\n        },\n        numberMap = {\n            '੧': '1',\n            '੨': '2',\n            '੩': '3',\n            '੪': '4',\n            '੫': '5',\n            '੬': '6',\n            '੭': '7',\n            '੮': '8',\n            '੯': '9',\n            '੦': '0',\n        };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n                '_'\n            ),\n        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm ਵਜੇ',\n            LTS: 'A h:mm:ss ਵਜੇ',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n        },\n        calendar: {\n            sameDay: '[ਅਜ] LT',\n            nextDay: '[ਕਲ] LT',\n            nextWeek: '[ਅਗਲਾ] dddd, LT',\n            lastDay: '[ਕਲ] LT',\n            lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ਵਿੱਚ',\n            past: '%s ਪਿਛਲੇ',\n            s: 'ਕੁਝ ਸਕਿੰਟ',\n            ss: '%d ਸਕਿੰਟ',\n            m: 'ਇਕ ਮਿੰਟ',\n            mm: '%d ਮਿੰਟ',\n            h: 'ਇੱਕ ਘੰਟਾ',\n            hh: '%d ਘੰਟੇ',\n            d: 'ਇੱਕ ਦਿਨ',\n            dd: '%d ਦਿਨ',\n            M: 'ਇੱਕ ਮਹੀਨਾ',\n            MM: '%d ਮਹੀਨੇ',\n            y: 'ਇੱਕ ਸਾਲ',\n            yy: '%d ਸਾਲ',\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return paIn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/pl.js",
    "content": "//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsNominative =\n            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n                '_'\n            ),\n        monthsSubjective =\n            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n                '_'\n            ),\n        monthsParse = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays:\n            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate,\n            M: 'miesiąc',\n            MM: translate,\n            y: 'rok',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pl;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/pt-br.js",
    "content": "//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'poucos segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        invalidDate: 'Data inválida',\n    });\n\n    return ptBr;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/pt.js",
    "content": "//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pt = moment.defineLocale('pt', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            w: 'uma semana',\n            ww: '%d semanas',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pt;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ro.js",
    "content": "//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                ss: 'secunde',\n                mm: 'minute',\n                hh: 'ore',\n                dd: 'zile',\n                ww: 'săptămâni',\n                MM: 'luni',\n                yy: 'ani',\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n            '_'\n        ),\n        monthsShort:\n            'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'peste %s',\n            past: '%s în urmă',\n            s: 'câteva secunde',\n            ss: relativeTimeWithPlural,\n            m: 'un minut',\n            mm: relativeTimeWithPlural,\n            h: 'o oră',\n            hh: relativeTimeWithPlural,\n            d: 'o zi',\n            dd: relativeTimeWithPlural,\n            w: 'o săptămână',\n            ww: relativeTimeWithPlural,\n            M: 'o lună',\n            MM: relativeTimeWithPlural,\n            y: 'un an',\n            yy: relativeTimeWithPlural,\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ro;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ru.js",
    "content": "//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone:\n                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                    '_'\n                ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone:\n                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                    '_'\n                ),\n        },\n        weekdays: {\n            standalone:\n                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                    '_'\n                ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex:\n            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соответствует только сокращённым формам\n        monthsShortStrictRegex:\n            /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., H:mm',\n            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n        },\n        calendar: {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'через %s',\n            past: '%s назад',\n            s: 'несколько секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'час',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            w: 'неделя',\n            ww: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM: function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ru;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/sd.js",
    "content": "//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوري',\n            'فيبروري',\n            'مارچ',\n            'اپريل',\n            'مئي',\n            'جون',\n            'جولاءِ',\n            'آگسٽ',\n            'سيپٽمبر',\n            'آڪٽوبر',\n            'نومبر',\n            'ڊسمبر',\n        ],\n        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n    var sd = moment.defineLocale('sd', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[اڄ] LT',\n            nextDay: '[سڀاڻي] LT',\n            nextWeek: 'dddd [اڳين هفتي تي] LT',\n            lastDay: '[ڪالهه] LT',\n            lastWeek: '[گزريل هفتي] dddd [تي] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s پوء',\n            past: '%s اڳ',\n            s: 'چند سيڪنڊ',\n            ss: '%d سيڪنڊ',\n            m: 'هڪ منٽ',\n            mm: '%d منٽ',\n            h: 'هڪ ڪلاڪ',\n            hh: '%d ڪلاڪ',\n            d: 'هڪ ڏينهن',\n            dd: '%d ڏينهن',\n            M: 'هڪ مهينو',\n            MM: '%d مهينا',\n            y: 'هڪ سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sd;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/se.js",
    "content": "//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var se = moment.defineLocale('se', {\n        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n            '_'\n        ),\n        monthsShort:\n            'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays:\n            'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n                '_'\n            ),\n        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'MMMM D. [b.] YYYY',\n            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s geažes',\n            past: 'maŋit %s',\n            s: 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m: 'okta minuhta',\n            mm: '%d minuhtat',\n            h: 'okta diimmu',\n            hh: '%d diimmut',\n            d: 'okta beaivi',\n            dd: '%d beaivvit',\n            M: 'okta mánnu',\n            MM: '%d mánut',\n            y: 'okta jahki',\n            yy: '%d jagit',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return se;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/si.js",
    "content": "//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n            '_'\n        ),\n        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n            '_'\n        ),\n        weekdays:\n            'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n                '_'\n            ),\n        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'a h:mm',\n            LTS: 'a h:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY MMMM D',\n            LLL: 'YYYY MMMM D, a h:mm',\n            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n        },\n        calendar: {\n            sameDay: '[අද] LT[ට]',\n            nextDay: '[හෙට] LT[ට]',\n            nextWeek: 'dddd LT[ට]',\n            lastDay: '[ඊයේ] LT[ට]',\n            lastWeek: '[පසුගිය] dddd LT[ට]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sකින්',\n            past: '%sකට පෙර',\n            s: 'තත්පර කිහිපය',\n            ss: 'තත්පර %d',\n            m: 'මිනිත්තුව',\n            mm: 'මිනිත්තු %d',\n            h: 'පැය',\n            hh: 'පැය %d',\n            d: 'දිනය',\n            dd: 'දින %d',\n            M: 'මාසය',\n            MM: 'මාස %d',\n            y: 'වසර',\n            yy: 'වසර %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal: function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM: function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        },\n    });\n\n    return si;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/sk.js",
    "content": "//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months =\n            'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n                '_'\n            ),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return n > 1 && n < 5;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months: months,\n        monthsShort: monthsShort,\n        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pred %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sk;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/sl.js",
    "content": "//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nekaj sekund'\n                    : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD. MM. YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danes ob] LT',\n            nextDay: '[jutri ob] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay: '[včeraj ob] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'čez %s',\n            past: 'pred %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sl;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/sq.js",
    "content": "//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sq = moment.defineLocale('sq', {\n        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n            '_'\n        ),\n        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Sot në] LT',\n            nextDay: '[Nesër në] LT',\n            nextWeek: 'dddd [në] LT',\n            lastDay: '[Dje në] LT',\n            lastWeek: 'dddd [e kaluar në] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'në %s',\n            past: '%s më parë',\n            s: 'disa sekonda',\n            ss: '%d sekonda',\n            m: 'një minutë',\n            mm: '%d minuta',\n            h: 'një orë',\n            hh: '%d orë',\n            d: 'një ditë',\n            dd: '%d ditë',\n            M: 'një muaj',\n            MM: '%d muaj',\n            y: 'një vit',\n            yy: '%d vite',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sq;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/sr-cyrl.js",
    "content": "//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једног минута'],\n            mm: ['минут', 'минута', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            d: ['један дан', 'једног дана'],\n            dd: ['дан', 'дана', 'дана'],\n            M: ['један месец', 'једног месеца'],\n            MM: ['месец', 'месеца', 'месеци'],\n            y: ['једну годину', 'једне године'],\n            yy: ['годину', 'године', 'година'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'једна година';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'годину') {\n                return number + ' година';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n            '_'\n        ),\n        monthsShort:\n            'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay: '[јуче у] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пре %s',\n            s: 'неколико секунди',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return srCyrl;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/sr.js",
    "content": "//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            d: ['jedan dan', 'jednog dana'],\n            dd: ['dan', 'dana', 'dana'],\n            M: ['jedan mesec', 'jednog meseca'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            y: ['jednu godinu', 'jedne godine'],\n            yy: ['godinu', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'jedna godina';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'godinu') {\n                return number + ' godina';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pre %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sr;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ss.js",
    "content": "//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ss = moment.defineLocale('ss', {\n        months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n            '_'\n        ),\n        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays:\n            'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n                '_'\n            ),\n        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Namuhla nga] LT',\n            nextDay: '[Kusasa nga] LT',\n            nextWeek: 'dddd [nga] LT',\n            lastDay: '[Itolo nga] LT',\n            lastWeek: 'dddd [leliphelile] [nga] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'nga %s',\n            past: 'wenteka nga %s',\n            s: 'emizuzwana lomcane',\n            ss: '%d mzuzwana',\n            m: 'umzuzu',\n            mm: '%d emizuzu',\n            h: 'lihora',\n            hh: '%d emahora',\n            d: 'lilanga',\n            dd: '%d emalanga',\n            M: 'inyanga',\n            MM: '%d tinyanga',\n            y: 'umnyaka',\n            yy: '%d iminyaka',\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: '%d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ss;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/sv.js",
    "content": "//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sv = moment.defineLocale('sv', {\n        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: 'för %s sedan',\n            s: 'några sekunder',\n            ss: '%d sekunder',\n            m: 'en minut',\n            mm: '%d minuter',\n            h: 'en timme',\n            hh: '%d timmar',\n            d: 'en dag',\n            dd: '%d dagar',\n            M: 'en månad',\n            MM: '%d månader',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? ':e'\n                        : b === 1\n                          ? ':a'\n                          : b === 2\n                            ? ':a'\n                            : b === 3\n                              ? ':e'\n                              : ':e';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sv;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/sw.js",
    "content": "//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sw = moment.defineLocale('sw', {\n        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays:\n            'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n                '_'\n            ),\n        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'hh:mm A',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[leo saa] LT',\n            nextDay: '[kesho saa] LT',\n            nextWeek: '[wiki ijayo] dddd [saat] LT',\n            lastDay: '[jana] LT',\n            lastWeek: '[wiki iliyopita] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s baadaye',\n            past: 'tokea %s',\n            s: 'hivi punde',\n            ss: 'sekunde %d',\n            m: 'dakika moja',\n            mm: 'dakika %d',\n            h: 'saa limoja',\n            hh: 'masaa %d',\n            d: 'siku moja',\n            dd: 'siku %d',\n            M: 'mwezi mmoja',\n            MM: 'miezi %d',\n            y: 'mwaka mmoja',\n            yy: 'miaka %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sw;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ta.js",
    "content": "//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '௧',\n            2: '௨',\n            3: '௩',\n            4: '௪',\n            5: '௫',\n            6: '௬',\n            7: '௭',\n            8: '௮',\n            9: '௯',\n            0: '௦',\n        },\n        numberMap = {\n            '௧': '1',\n            '௨': '2',\n            '௩': '3',\n            '௪': '4',\n            '௫': '5',\n            '௬': '6',\n            '௭': '7',\n            '௮': '8',\n            '௯': '9',\n            '௦': '0',\n        };\n\n    var ta = moment.defineLocale('ta', {\n        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n            '_'\n        ),\n        monthsShort:\n            'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n                '_'\n            ),\n        weekdays:\n            'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n                '_'\n            ),\n        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n            '_'\n        ),\n        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, HH:mm',\n            LLLL: 'dddd, D MMMM YYYY, HH:mm',\n        },\n        calendar: {\n            sameDay: '[இன்று] LT',\n            nextDay: '[நாளை] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[நேற்று] LT',\n            lastWeek: '[கடந்த வாரம்] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s இல்',\n            past: '%s முன்',\n            s: 'ஒரு சில விநாடிகள்',\n            ss: '%d விநாடிகள்',\n            m: 'ஒரு நிமிடம்',\n            mm: '%d நிமிடங்கள்',\n            h: 'ஒரு மணி நேரம்',\n            hh: '%d மணி நேரம்',\n            d: 'ஒரு நாள்',\n            dd: '%d நாட்கள்',\n            M: 'ஒரு மாதம்',\n            MM: '%d மாதங்கள்',\n            y: 'ஒரு வருடம்',\n            yy: '%d ஆண்டுகள்',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal: function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை'; // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ta;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/te.js",
    "content": "//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var te = moment.defineLocale('te', {\n        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n            '_'\n        ),\n        monthsShort:\n            'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n                '_'\n            ),\n        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[నేడు] LT',\n            nextDay: '[రేపు] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[నిన్న] LT',\n            lastWeek: '[గత] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s లో',\n            past: '%s క్రితం',\n            s: 'కొన్ని క్షణాలు',\n            ss: '%d సెకన్లు',\n            m: 'ఒక నిమిషం',\n            mm: '%d నిమిషాలు',\n            h: 'ఒక గంట',\n            hh: '%d గంటలు',\n            d: 'ఒక రోజు',\n            dd: '%d రోజులు',\n            M: 'ఒక నెల',\n            MM: '%d నెలలు',\n            y: 'ఒక సంవత్సరం',\n            yy: '%d సంవత్సరాలు',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n        ordinal: '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return te;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/tet.js",
    "content": "//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tet = moment.defineLocale('tet', {\n        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'iha %s',\n            past: '%s liuba',\n            s: 'segundu balun',\n            ss: 'segundu %d',\n            m: 'minutu ida',\n            mm: 'minutu %d',\n            h: 'oras ida',\n            hh: 'oras %d',\n            d: 'loron ida',\n            dd: 'loron %d',\n            M: 'fulan ida',\n            MM: 'fulan %d',\n            y: 'tinan ida',\n            yy: 'tinan %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tet;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/tg.js",
    "content": "//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум',\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months: {\n            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n                '_'\n            ),\n            standalone:\n                'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n            '_'\n        ),\n        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Имрӯз соати] LT',\n            nextDay: '[Фардо соати] LT',\n            lastDay: '[Дирӯз соати] LT',\n            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'баъди %s',\n            past: '%s пеш',\n            s: 'якчанд сония',\n            m: 'як дақиқа',\n            mm: '%d дақиқа',\n            h: 'як соат',\n            hh: '%d соат',\n            d: 'як рӯз',\n            dd: '%d рӯз',\n            M: 'як моҳ',\n            MM: '%d моҳ',\n            y: 'як сол',\n            yy: '%d сол',\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1th is the first week of the year.\n        },\n    });\n\n    return tg;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/th.js",
    "content": "//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var th = moment.defineLocale('th', {\n        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n            '_'\n        ),\n        monthsShort:\n            'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY เวลา H:mm',\n            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar: {\n            sameDay: '[วันนี้ เวลา] LT',\n            nextDay: '[พรุ่งนี้ เวลา] LT',\n            nextWeek: 'dddd[หน้า เวลา] LT',\n            lastDay: '[เมื่อวานนี้ เวลา] LT',\n            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'อีก %s',\n            past: '%sที่แล้ว',\n            s: 'ไม่กี่วินาที',\n            ss: '%d วินาที',\n            m: '1 นาที',\n            mm: '%d นาที',\n            h: '1 ชั่วโมง',\n            hh: '%d ชั่วโมง',\n            d: '1 วัน',\n            dd: '%d วัน',\n            w: '1 สัปดาห์',\n            ww: '%d สัปดาห์',\n            M: '1 เดือน',\n            MM: '%d เดือน',\n            y: '1 ปี',\n            yy: '%d ปี',\n        },\n    });\n\n    return th;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/tk.js",
    "content": "//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inji\",\n        5: \"'inji\",\n        8: \"'inji\",\n        70: \"'inji\",\n        80: \"'inji\",\n        2: \"'nji\",\n        7: \"'nji\",\n        20: \"'nji\",\n        50: \"'nji\",\n        3: \"'ünji\",\n        4: \"'ünji\",\n        100: \"'ünji\",\n        6: \"'njy\",\n        9: \"'unjy\",\n        10: \"'unjy\",\n        30: \"'unjy\",\n        60: \"'ynjy\",\n        90: \"'ynjy\",\n    };\n\n    var tk = moment.defineLocale('tk', {\n        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n            '_'\n        ),\n        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün sagat] LT',\n            nextDay: '[ertir sagat] LT',\n            nextWeek: '[indiki] dddd [sagat] LT',\n            lastDay: '[düýn] LT',\n            lastWeek: '[geçen] dddd [sagat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s soň',\n            past: '%s öň',\n            s: 'birnäçe sekunt',\n            m: 'bir minut',\n            mm: '%d minut',\n            h: 'bir sagat',\n            hh: '%d sagat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir aý',\n            MM: '%d aý',\n            y: 'bir ýyl',\n            yy: '%d ýyl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'unjy\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tk;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/tl-ph.js",
    "content": "//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlPh;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/tlh.js",
    "content": "//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'leS'\n                : output.indexOf('jar') !== -1\n                  ? time.slice(0, -3) + 'waQ'\n                  : output.indexOf('DIS') !== -1\n                    ? time.slice(0, -3) + 'nem'\n                    : time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'Hu’'\n                : output.indexOf('jar') !== -1\n                  ? time.slice(0, -3) + 'wen'\n                  : output.indexOf('DIS') !== -1\n                    ? time.slice(0, -3) + 'ben'\n                    : time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n            ten = Math.floor((number % 100) / 10),\n            one = number % 10,\n            word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[one];\n        }\n        return word === '' ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n            '_'\n        ),\n        monthsShort:\n            'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        weekdaysShort:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: translateFuture,\n            past: translatePast,\n            s: 'puS lup',\n            ss: translate,\n            m: 'wa’ tup',\n            mm: translate,\n            h: 'wa’ rep',\n            hh: translate,\n            d: 'wa’ jaj',\n            dd: translate,\n            M: 'wa’ jar',\n            MM: translate,\n            y: 'wa’ DIS',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlh;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/tr.js",
    "content": "//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'öö' : 'ÖÖ';\n            } else {\n                return isLower ? 'ös' : 'ÖS';\n            }\n        },\n        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n        isPM: function (input) {\n            return input === 'ös' || input === 'ÖS';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[yarın saat] LT',\n            nextWeek: '[gelecek] dddd [saat] LT',\n            lastDay: '[dün] LT',\n            lastWeek: '[geçen] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s önce',\n            s: 'birkaç saniye',\n            ss: '%d saniye',\n            m: 'bir dakika',\n            mm: '%d dakika',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            w: 'bir hafta',\n            ww: '%d hafta',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir yıl',\n            yy: '%d yıl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'ıncı\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tr;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/tzl.js",
    "content": "//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM [dallas] YYYY',\n            LLL: 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM: function (input) {\n            return \"d'o\" === input.toLowerCase();\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? \"d'o\" : \"D'O\";\n            } else {\n                return isLower ? \"d'a\" : \"D'A\";\n            }\n        },\n        calendar: {\n            sameDay: '[oxhi à] LT',\n            nextDay: '[demà à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[ieiri à] LT',\n            lastWeek: '[sür el] dddd [lasteu à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'osprei %s',\n            past: 'ja%s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['viensas secunds', \"'iensas secunds\"],\n            ss: [number + ' secunds', '' + number + ' secunds'],\n            m: [\"'n míut\", \"'iens míut\"],\n            mm: [number + ' míuts', '' + number + ' míuts'],\n            h: [\"'n þora\", \"'iensa þora\"],\n            hh: [number + ' þoras', '' + number + ' þoras'],\n            d: [\"'n ziua\", \"'iensa ziua\"],\n            dd: [number + ' ziuas', '' + number + ' ziuas'],\n            M: [\"'n mes\", \"'iens mes\"],\n            MM: [number + ' mesen', '' + number + ' mesen'],\n            y: [\"'n ar\", \"'iens ar\"],\n            yy: [number + ' ars', '' + number + ' ars'],\n        };\n        return isFuture\n            ? format[key][0]\n            : withoutSuffix\n              ? format[key][0]\n              : format[key][1];\n    }\n\n    return tzl;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/tzm-latn.js",
    "content": "//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n            '_'\n        ),\n        monthsShort:\n            'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n                '_'\n            ),\n        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dadkh s yan %s',\n            past: 'yan %s',\n            s: 'imik',\n            ss: '%d imik',\n            m: 'minuḍ',\n            mm: '%d minuḍ',\n            h: 'saɛa',\n            hh: '%d tassaɛin',\n            d: 'ass',\n            dd: '%d ossan',\n            M: 'ayowr',\n            MM: '%d iyyirn',\n            y: 'asgas',\n            yy: '%d isgasn',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzmLatn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/tzm.js",
    "content": "//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzm = moment.defineLocale('tzm', {\n        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n                '_'\n            ),\n        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past: 'ⵢⴰⵏ %s',\n            s: 'ⵉⵎⵉⴽ',\n            ss: '%d ⵉⵎⵉⴽ',\n            m: 'ⵎⵉⵏⵓⴺ',\n            mm: '%d ⵎⵉⵏⵓⴺ',\n            h: 'ⵙⴰⵄⴰ',\n            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d: 'ⴰⵙⵙ',\n            dd: '%d oⵙⵙⴰⵏ',\n            M: 'ⴰⵢoⵓⵔ',\n            MM: '%d ⵉⵢⵢⵉⵔⵏ',\n            y: 'ⴰⵙⴳⴰⵙ',\n            yy: '%d ⵉⵙⴳⴰⵙⵏ',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzm;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ug-cn.js",
    "content": "//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n                '_'\n            ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل',\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return ugCn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/uk.js",
    "content": "//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative:\n                    'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n                        '_'\n                    ),\n                accusative:\n                    'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n                        '_'\n                    ),\n                genitive:\n                    'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n                        '_'\n                    ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n              ? 'genitive'\n              : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone:\n                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'годину',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            M: 'місяць',\n            MM: relativeTimeWithPlural,\n            y: 'рік',\n            yy: relativeTimeWithPlural,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uk;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/ur.js",
    "content": "//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوری',\n            'فروری',\n            'مارچ',\n            'اپریل',\n            'مئی',\n            'جون',\n            'جولائی',\n            'اگست',\n            'ستمبر',\n            'اکتوبر',\n            'نومبر',\n            'دسمبر',\n        ],\n        days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n    var ur = moment.defineLocale('ur', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[آج بوقت] LT',\n            nextDay: '[کل بوقت] LT',\n            nextWeek: 'dddd [بوقت] LT',\n            lastDay: '[گذشتہ روز بوقت] LT',\n            lastWeek: '[گذشتہ] dddd [بوقت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s بعد',\n            past: '%s قبل',\n            s: 'چند سیکنڈ',\n            ss: '%d سیکنڈ',\n            m: 'ایک منٹ',\n            mm: '%d منٹ',\n            h: 'ایک گھنٹہ',\n            hh: '%d گھنٹے',\n            d: 'ایک دن',\n            dd: '%d دن',\n            M: 'ایک ماہ',\n            MM: '%d ماہ',\n            y: 'ایک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ur;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/uz-latn.js",
    "content": "//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays:\n            'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n                '_'\n            ),\n        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bugun soat] LT [da]',\n            nextDay: '[Ertaga] LT [da]',\n            nextWeek: 'dddd [kuni soat] LT [da]',\n            lastDay: '[Kecha soat] LT [da]',\n            lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Yaqin %s ichida',\n            past: 'Bir necha %s oldin',\n            s: 'soniya',\n            ss: '%d soniya',\n            m: 'bir daqiqa',\n            mm: '%d daqiqa',\n            h: 'bir soat',\n            hh: '%d soat',\n            d: 'bir kun',\n            dd: '%d kun',\n            M: 'bir oy',\n            MM: '%d oy',\n            y: 'bir yil',\n            yy: '%d yil',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uzLatn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/uz.js",
    "content": "//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uz = moment.defineLocale('uz', {\n        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бугун соат] LT [да]',\n            nextDay: '[Эртага] LT [да]',\n            nextWeek: 'dddd [куни соат] LT [да]',\n            lastDay: '[Кеча соат] LT [да]',\n            lastWeek: '[Утган] dddd [куни соат] LT [да]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Якин %s ичида',\n            past: 'Бир неча %s олдин',\n            s: 'фурсат',\n            ss: '%d фурсат',\n            m: 'бир дакика',\n            mm: '%d дакика',\n            h: 'бир соат',\n            hh: '%d соат',\n            d: 'бир кун',\n            dd: '%d кун',\n            M: 'бир ой',\n            MM: '%d ой',\n            y: 'бир йил',\n            yy: '%d йил',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return uz;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/vi.js",
    "content": "//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var vi = moment.defineLocale('vi', {\n        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n            '_'\n        ),\n        monthsShort:\n            'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n            '_'\n        ),\n        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /sa|ch/i,\n        isPM: function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [năm] YYYY',\n            LLL: 'D MMMM [năm] YYYY HH:mm',\n            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n            l: 'DD/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần trước lúc] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s tới',\n            past: '%s trước',\n            s: 'vài giây',\n            ss: '%d giây',\n            m: 'một phút',\n            mm: '%d phút',\n            h: 'một giờ',\n            hh: '%d giờ',\n            d: 'một ngày',\n            dd: '%d ngày',\n            w: 'một tuần',\n            ww: '%d tuần',\n            M: 'một tháng',\n            MM: '%d tháng',\n            y: 'một năm',\n            yy: '%d năm',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return vi;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/x-pseudo.js",
    "content": "//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n            '_'\n        ),\n        monthsShort:\n            'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n                '_'\n            ),\n        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[T~ódá~ý át] LT',\n            nextDay: '[T~ómó~rró~w át] LT',\n            nextWeek: 'dddd [át] LT',\n            lastDay: '[Ý~ést~érdá~ý át] LT',\n            lastWeek: '[L~ást] dddd [át] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'í~ñ %s',\n            past: '%s á~gó',\n            s: 'á ~féw ~sécó~ñds',\n            ss: '%d s~écóñ~ds',\n            m: 'á ~míñ~úté',\n            mm: '%d m~íñú~tés',\n            h: 'á~ñ hó~úr',\n            hh: '%d h~óúrs',\n            d: 'á ~dáý',\n            dd: '%d d~áýs',\n            M: 'á ~móñ~th',\n            MM: '%d m~óñt~hs',\n            y: 'á ~ýéár',\n            yy: '%d ý~éárs',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return xPseudo;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/yo.js",
    "content": "//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var yo = moment.defineLocale('yo', {\n        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n            '_'\n        ),\n        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Ònì ni] LT',\n            nextDay: '[Ọ̀la ni] LT',\n            nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n            lastDay: '[Àna ni] LT',\n            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ní %s',\n            past: '%s kọjá',\n            s: 'ìsẹjú aayá die',\n            ss: 'aayá %d',\n            m: 'ìsẹjú kan',\n            mm: 'ìsẹjú %d',\n            h: 'wákati kan',\n            hh: 'wákati %d',\n            d: 'ọjọ́ kan',\n            dd: 'ọjọ́ %d',\n            M: 'osù kan',\n            MM: 'osù %d',\n            y: 'ọdún kan',\n            yy: 'ọdún %d',\n        },\n        dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n        ordinal: 'ọjọ́ %d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return yo;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/zh-cn.js",
    "content": "//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日Ah点mm分',\n            LLLL: 'YYYY年M月D日ddddAh点mm分',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[下]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            lastDay: '[昨天]LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[上]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s后',\n            past: '%s前',\n            s: '几秒',\n            ss: '%d 秒',\n            m: '1 分钟',\n            mm: '%d 分钟',\n            h: '1 小时',\n            hh: '%d 小时',\n            d: '1 天',\n            dd: '%d 天',\n            w: '1 周',\n            ww: '%d 周',\n            M: '1 个月',\n            MM: '%d 个月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return zhCn;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/zh-hk.js",
    "content": "//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1200) {\n                return '上午';\n            } else if (hm === 1200) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: '[下]ddddLT',\n            lastDay: '[昨天]LT',\n            lastWeek: '[上]ddddLT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhHk;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/zh-mo.js",
    "content": "//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhMo = moment.defineLocale('zh-mo', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s內',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhMo;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/locale/zh-tw.js",
    "content": "//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhTw;\n\n})));\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/moment-timezone.esm.js",
    "content": "var H2=(s=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(s,{get:(a,J)=>(typeof require<\"u\"?require:a)[J]}):s)(function(s){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+s+'\" is not supported')});var l1=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var Y2=l1((Z1,v0)=>{(function(s,a){typeof Z1==\"object\"&&typeof v0<\"u\"?v0.exports=a():typeof define==\"function\"&&define.amd?define(a):s.moment=a()})(Z1,function(){\"use strict\";var s;function a(){return s.apply(null,arguments)}function J(M){s=M}function k(M){return M instanceof Array||Object.prototype.toString.call(M)===\"[object Array]\"}function I(M){return M!=null&&Object.prototype.toString.call(M)===\"[object Object]\"}function f(M,z){return Object.prototype.hasOwnProperty.call(M,z)}function r0(M){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(M).length===0;var z;for(z in M)if(f(M,z))return!1;return!0}function w(M){return M===void 0}function K(M){return typeof M==\"number\"||Object.prototype.toString.call(M)===\"[object Number]\"}function z0(M){return M instanceof Date||Object.prototype.toString.call(M)===\"[object Date]\"}function I0(M,z){var b=[],p,O=M.length;for(p=0;p<O;++p)b.push(z(M[p],p));return b}function Z(M,z){for(var b in z)f(z,b)&&(M[b]=z[b]);return f(z,\"toString\")&&(M.toString=z.toString),f(z,\"valueOf\")&&(M.valueOf=z.valueOf),M}function Y(M,z,b,p){return u2(M,z,b,p,!0).utc()}function h0(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function L(M){return M._pf==null&&(M._pf=h0()),M._pf}var T0;Array.prototype.some?T0=Array.prototype.some:T0=function(M){var z=Object(this),b=z.length>>>0,p;for(p=0;p<b;p++)if(p in z&&M.call(this,z[p],p,z))return!0;return!1};function m0(M){var z=null,b=!1,p=M._d&&!isNaN(M._d.getTime());if(p&&(z=L(M),b=T0.call(z.parsedDateParts,function(O){return O!=null}),p=z.overflow<0&&!z.empty&&!z.invalidEra&&!z.invalidMonth&&!z.invalidWeekday&&!z.weekdayMismatch&&!z.nullInput&&!z.invalidFormat&&!z.userInvalidated&&(!z.meridiem||z.meridiem&&b),M._strict&&(p=p&&z.charsLeftOver===0&&z.unusedTokens.length===0&&z.bigHour===void 0)),Object.isFrozen==null||!Object.isFrozen(M))M._isValid=p;else return p;return M._isValid}function b0(M){var z=Y(NaN);return M!=null?Z(L(z),M):L(z).userInvalidated=!0,z}var M1=a.momentProperties=[],U0=!1;function p0(M,z){var b,p,O,A=M1.length;if(w(z._isAMomentObject)||(M._isAMomentObject=z._isAMomentObject),w(z._i)||(M._i=z._i),w(z._f)||(M._f=z._f),w(z._l)||(M._l=z._l),w(z._strict)||(M._strict=z._strict),w(z._tzm)||(M._tzm=z._tzm),w(z._isUTC)||(M._isUTC=z._isUTC),w(z._offset)||(M._offset=z._offset),w(z._pf)||(M._pf=L(z)),w(z._locale)||(M._locale=z._locale),A>0)for(b=0;b<A;b++)p=M1[b],O=z[p],w(O)||(M[p]=O);return M}function t0(M){p0(this,M),this._d=new Date(M._d!=null?M._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),U0===!1&&(U0=!0,a.updateOffset(this),U0=!1)}function F(M){return M instanceof t0||M!=null&&M._isAMomentObject!=null}function z1(M){a.suppressDeprecationWarnings===!1&&typeof console<\"u\"&&console.warn&&console.warn(\"Deprecation warning: \"+M)}function U(M,z){var b=!0;return Z(function(){if(a.deprecationHandler!=null&&a.deprecationHandler(null,M),b){var p=[],O,A,o,n=arguments.length;for(A=0;A<n;A++){if(O=\"\",typeof arguments[A]==\"object\"){O+=`\n[`+A+\"] \";for(o in arguments[0])f(arguments[0],o)&&(O+=o+\": \"+arguments[0][o]+\", \");O=O.slice(0,-2)}else O=arguments[A];p.push(O)}z1(M+`\nArguments: `+Array.prototype.slice.call(p).join(\"\")+`\n`+new Error().stack),b=!1}return z.apply(this,arguments)},z)}var b1={};function p1(M,z){a.deprecationHandler!=null&&a.deprecationHandler(M,z),b1[M]||(z1(z),b1[M]=!0)}a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;function V(M){return typeof Function<\"u\"&&M instanceof Function||Object.prototype.toString.call(M)===\"[object Function]\"}function h1(M){var z,b;for(b in M)f(M,b)&&(z=M[b],V(z)?this[b]=z:this[\"_\"+b]=z);this._config=M,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)}function A0(M,z){var b=Z({},M),p;for(p in z)f(z,p)&&(I(M[p])&&I(z[p])?(b[p]={},Z(b[p],M[p]),Z(b[p],z[p])):z[p]!=null?b[p]=z[p]:delete b[p]);for(p in M)f(M,p)&&!f(z,p)&&I(M[p])&&(b[p]=Z({},b[p]));return b}function S0(M){M!=null&&this.set(M)}var x;Object.keys?x=Object.keys:x=function(M){var z,b=[];for(z in M)f(M,z)&&b.push(z);return b};var T1={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"};function m1(M,z,b){var p=this._calendar[M]||this._calendar.sameElse;return V(p)?p.call(z,b):p}function G(M,z,b){var p=\"\"+Math.abs(M),O=z-p.length,A=M>=0;return(A?b?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,O)).toString().substr(1)+p}var x0=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,g0=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,H0={},f0={};function i(M,z,b,p){var O=p;typeof p==\"string\"&&(O=function(){return this[p]()}),M&&(f0[M]=O),z&&(f0[z[0]]=function(){return G(O.apply(this,arguments),z[1],z[2])}),b&&(f0[b]=function(){return this.localeData().ordinal(O.apply(this,arguments),M)})}function Y0(M){return M.match(/\\[[\\s\\S]/)?M.replace(/^\\[|\\]$/g,\"\"):M.replace(/\\\\/g,\"\")}function c0(M){var z=M.match(x0),b,p;for(b=0,p=z.length;b<p;b++)f0[z[b]]?z[b]=f0[z[b]]:z[b]=Y0(z[b]);return function(O){var A=\"\",o;for(o=0;o<p;o++)A+=V(z[o])?z[o].call(O,M):z[o];return A}}function T(M,z){return M.isValid()?(z=H(z,M.localeData()),H0[z]=H0[z]||c0(z),H0[z](M)):M.localeData().invalidDate()}function H(M,z){var b=5;function p(O){return z.longDateFormat(O)||O}for(g0.lastIndex=0;b>=0&&g0.test(M);)M=M.replace(g0,p),g0.lastIndex=0,b-=1;return M}var O1={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};function A1(M){var z=this._longDateFormat[M],b=this._longDateFormat[M.toUpperCase()];return z||!b?z:(this._longDateFormat[M]=b.match(x0).map(function(p){return p===\"MMMM\"||p===\"MM\"||p===\"DD\"||p===\"dddd\"?p.slice(1):p}).join(\"\"),this._longDateFormat[M])}var S1=\"Invalid date\";function N0(){return this._invalidDate}var c=\"%d\",q=/\\d{1,2}/;function W(M){return this._ordinal.replace(\"%d\",M)}var e={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function r(M,z,b,p){var O=this._relativeTime[b];return V(O)?O(M,z,b,p):O.replace(/%d/i,M)}function l(M,z){var b=this._relativeTime[M>0?\"future\":\"past\"];return V(b)?b(z):b.replace(/%s/i,z)}var y={D:\"date\",dates:\"date\",date:\"date\",d:\"day\",days:\"day\",day:\"day\",e:\"weekday\",weekdays:\"weekday\",weekday:\"weekday\",E:\"isoWeekday\",isoweekdays:\"isoWeekday\",isoweekday:\"isoWeekday\",DDD:\"dayOfYear\",dayofyears:\"dayOfYear\",dayofyear:\"dayOfYear\",h:\"hour\",hours:\"hour\",hour:\"hour\",ms:\"millisecond\",milliseconds:\"millisecond\",millisecond:\"millisecond\",m:\"minute\",minutes:\"minute\",minute:\"minute\",M:\"month\",months:\"month\",month:\"month\",Q:\"quarter\",quarters:\"quarter\",quarter:\"quarter\",s:\"second\",seconds:\"second\",second:\"second\",gg:\"weekYear\",weekyears:\"weekYear\",weekyear:\"weekYear\",GG:\"isoWeekYear\",isoweekyears:\"isoWeekYear\",isoweekyear:\"isoWeekYear\",w:\"week\",weeks:\"week\",week:\"week\",W:\"isoWeek\",isoweeks:\"isoWeek\",isoweek:\"isoWeek\",y:\"year\",years:\"year\",year:\"year\"};function u(M){return typeof M==\"string\"?y[M]||y[M.toLowerCase()]:void 0}function S(M){var z={},b,p;for(p in M)f(M,p)&&(b=u(p),b&&(z[b]=M[p]));return z}var $1={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function V2(M){var z=[],b;for(b in M)f(M,b)&&z.push({unit:b,priority:$1[b]});return z.sort(function(p,O){return p.priority-O.priority}),z}var M2=/\\d/,j=/\\d\\d/,z2=/\\d{3}/,g1=/\\d{4}/,c1=/[+-]?\\d{6}/,g=/\\d\\d?/,b2=/\\d\\d\\d\\d?/,p2=/\\d\\d\\d\\d\\d\\d?/,o1=/\\d{1,3}/,_1=/\\d{1,4}/,q1=/[+-]?\\d{1,6}/,_0=/\\d+/,W1=/[+-]?\\d+/,Q2=/Z|[+-]\\d\\d:?\\d\\d/gi,d1=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,J2=/[+-]?\\d+(\\.\\d{1,3})?/,F0=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,E0=/^[1-9]\\d?/,E1=/^([1-9]\\d|\\d)/,a1;a1={};function R(M,z,b){a1[M]=V(z)?z:function(p,O){return p&&b?b:z}}function Z2(M,z){return f(a1,M)?a1[M](z._strict,z._locale):new RegExp($2(M))}function $2(M){return o0(M.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(z,b,p,O,A){return b||p||O||A}))}function o0(M){return M.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function Q(M){return M<0?Math.ceil(M)||0:Math.floor(M)}function N(M){var z=+M,b=0;return z!==0&&isFinite(z)&&(b=Q(z)),b}var y1={};function m(M,z){var b,p=z,O;for(typeof M==\"string\"&&(M=[M]),K(z)&&(p=function(A,o){o[z]=N(A)}),O=M.length,b=0;b<O;b++)y1[M[b]]=p}function G0(M,z){m(M,function(b,p,O,A){O._w=O._w||{},z(b,O._w,O,A)})}function MM(M,z,b){z!=null&&f(y1,M)&&y1[M](z,b._a,b,M)}function e1(M){return M%4===0&&M%100!==0||M%400===0}var P=0,q0=1,O0=2,D=3,$=4,W0=5,B0=6,zM=7,bM=8;i(\"Y\",0,0,function(){var M=this.year();return M<=9999?G(M,4):\"+\"+M}),i(0,[\"YY\",2],0,function(){return this.year()%100}),i(0,[\"YYYY\",4],0,\"year\"),i(0,[\"YYYYY\",5],0,\"year\"),i(0,[\"YYYYYY\",6,!0],0,\"year\"),R(\"Y\",W1),R(\"YY\",g,j),R(\"YYYY\",_1,g1),R(\"YYYYY\",q1,c1),R(\"YYYYYY\",q1,c1),m([\"YYYYY\",\"YYYYYY\"],P),m(\"YYYY\",function(M,z){z[P]=M.length===2?a.parseTwoDigitYear(M):N(M)}),m(\"YY\",function(M,z){z[P]=a.parseTwoDigitYear(M)}),m(\"Y\",function(M,z){z[P]=parseInt(M,10)});function j0(M){return e1(M)?366:365}a.parseTwoDigitYear=function(M){return N(M)+(N(M)>68?1900:2e3)};var O2=y0(\"FullYear\",!0);function pM(){return e1(this.year())}function y0(M,z){return function(b){return b!=null?(A2(this,M,b),a.updateOffset(this,z),this):K0(this,M)}}function K0(M,z){if(!M.isValid())return NaN;var b=M._d,p=M._isUTC;switch(z){case\"Milliseconds\":return p?b.getUTCMilliseconds():b.getMilliseconds();case\"Seconds\":return p?b.getUTCSeconds():b.getSeconds();case\"Minutes\":return p?b.getUTCMinutes():b.getMinutes();case\"Hours\":return p?b.getUTCHours():b.getHours();case\"Date\":return p?b.getUTCDate():b.getDate();case\"Day\":return p?b.getUTCDay():b.getDay();case\"Month\":return p?b.getUTCMonth():b.getMonth();case\"FullYear\":return p?b.getUTCFullYear():b.getFullYear();default:return NaN}}function A2(M,z,b){var p,O,A,o,n;if(!(!M.isValid()||isNaN(b))){switch(p=M._d,O=M._isUTC,z){case\"Milliseconds\":return void(O?p.setUTCMilliseconds(b):p.setMilliseconds(b));case\"Seconds\":return void(O?p.setUTCSeconds(b):p.setSeconds(b));case\"Minutes\":return void(O?p.setUTCMinutes(b):p.setMinutes(b));case\"Hours\":return void(O?p.setUTCHours(b):p.setHours(b));case\"Date\":return void(O?p.setUTCDate(b):p.setDate(b));case\"FullYear\":break;default:return}A=b,o=M.month(),n=M.date(),n=n===29&&o===1&&!e1(A)?28:n,O?p.setUTCFullYear(A,o,n):p.setFullYear(A,o,n)}}function OM(M){return M=u(M),V(this[M])?this[M]():this}function AM(M,z){if(typeof M==\"object\"){M=S(M);var b=V2(M),p,O=b.length;for(p=0;p<O;p++)this[b[p].unit](M[b[p].unit])}else if(M=u(M),V(this[M]))return this[M](z);return this}function cM(M,z){return(M%z+z)%z}var C;Array.prototype.indexOf?C=Array.prototype.indexOf:C=function(M){var z;for(z=0;z<this.length;++z)if(this[z]===M)return z;return-1};function C1(M,z){if(isNaN(M)||isNaN(z))return NaN;var b=cM(z,12);return M+=(z-b)/12,b===1?e1(M)?29:28:31-b%7%2}i(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),i(\"MMM\",0,0,function(M){return this.localeData().monthsShort(this,M)}),i(\"MMMM\",0,0,function(M){return this.localeData().months(this,M)}),R(\"M\",g,E0),R(\"MM\",g,j),R(\"MMM\",function(M,z){return z.monthsShortRegex(M)}),R(\"MMMM\",function(M,z){return z.monthsRegex(M)}),m([\"M\",\"MM\"],function(M,z){z[q0]=N(M)-1}),m([\"MMM\",\"MMMM\"],function(M,z,b,p){var O=b._locale.monthsParse(M,p,b._strict);O!=null?z[q0]=O:L(b).invalidMonth=M});var oM=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),c2=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),o2=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,qM=F0,WM=F0;function dM(M,z){return M?k(this._months)?this._months[M.month()]:this._months[(this._months.isFormat||o2).test(z)?\"format\":\"standalone\"][M.month()]:k(this._months)?this._months:this._months.standalone}function aM(M,z){return M?k(this._monthsShort)?this._monthsShort[M.month()]:this._monthsShort[o2.test(z)?\"format\":\"standalone\"][M.month()]:k(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function eM(M,z,b){var p,O,A,o=M.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],p=0;p<12;++p)A=Y([2e3,p]),this._shortMonthsParse[p]=this.monthsShort(A,\"\").toLocaleLowerCase(),this._longMonthsParse[p]=this.months(A,\"\").toLocaleLowerCase();return b?z===\"MMM\"?(O=C.call(this._shortMonthsParse,o),O!==-1?O:null):(O=C.call(this._longMonthsParse,o),O!==-1?O:null):z===\"MMM\"?(O=C.call(this._shortMonthsParse,o),O!==-1?O:(O=C.call(this._longMonthsParse,o),O!==-1?O:null)):(O=C.call(this._longMonthsParse,o),O!==-1?O:(O=C.call(this._shortMonthsParse,o),O!==-1?O:null))}function nM(M,z,b){var p,O,A;if(this._monthsParseExact)return eM.call(this,M,z,b);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),p=0;p<12;p++){if(O=Y([2e3,p]),b&&!this._longMonthsParse[p]&&(this._longMonthsParse[p]=new RegExp(\"^\"+this.months(O,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[p]=new RegExp(\"^\"+this.monthsShort(O,\"\").replace(\".\",\"\")+\"$\",\"i\")),!b&&!this._monthsParse[p]&&(A=\"^\"+this.months(O,\"\")+\"|^\"+this.monthsShort(O,\"\"),this._monthsParse[p]=new RegExp(A.replace(\".\",\"\"),\"i\")),b&&z===\"MMMM\"&&this._longMonthsParse[p].test(M))return p;if(b&&z===\"MMM\"&&this._shortMonthsParse[p].test(M))return p;if(!b&&this._monthsParse[p].test(M))return p}}function q2(M,z){if(!M.isValid())return M;if(typeof z==\"string\"){if(/^\\d+$/.test(z))z=N(z);else if(z=M.localeData().monthsParse(z),!K(z))return M}var b=z,p=M.date();return p=p<29?p:Math.min(p,C1(M.year(),b)),M._isUTC?M._d.setUTCMonth(b,p):M._d.setMonth(b,p),M}function W2(M){return M!=null?(q2(this,M),a.updateOffset(this,!0),this):K0(this,\"Month\")}function RM(){return C1(this.year(),this.month())}function iM(M){return this._monthsParseExact?(f(this,\"_monthsRegex\")||d2.call(this),M?this._monthsShortStrictRegex:this._monthsShortRegex):(f(this,\"_monthsShortRegex\")||(this._monthsShortRegex=qM),this._monthsShortStrictRegex&&M?this._monthsShortStrictRegex:this._monthsShortRegex)}function rM(M){return this._monthsParseExact?(f(this,\"_monthsRegex\")||d2.call(this),M?this._monthsStrictRegex:this._monthsRegex):(f(this,\"_monthsRegex\")||(this._monthsRegex=WM),this._monthsStrictRegex&&M?this._monthsStrictRegex:this._monthsRegex)}function d2(){function M(t,B){return B.length-t.length}var z=[],b=[],p=[],O,A,o,n;for(O=0;O<12;O++)A=Y([2e3,O]),o=o0(this.monthsShort(A,\"\")),n=o0(this.months(A,\"\")),z.push(o),b.push(n),p.push(n),p.push(o);z.sort(M),b.sort(M),p.sort(M),this._monthsRegex=new RegExp(\"^(\"+p.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+b.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+z.join(\"|\")+\")\",\"i\")}function tM(M,z,b,p,O,A,o){var n;return M<100&&M>=0?(n=new Date(M+400,z,b,p,O,A,o),isFinite(n.getFullYear())&&n.setFullYear(M)):n=new Date(M,z,b,p,O,A,o),n}function V0(M){var z,b;return M<100&&M>=0?(b=Array.prototype.slice.call(arguments),b[0]=M+400,z=new Date(Date.UTC.apply(null,b)),isFinite(z.getUTCFullYear())&&z.setUTCFullYear(M)):z=new Date(Date.UTC.apply(null,arguments)),z}function n1(M,z,b){var p=7+z-b,O=(7+V0(M,0,p).getUTCDay()-z)%7;return-O+p-1}function a2(M,z,b,p,O){var A=(7+b-p)%7,o=n1(M,p,O),n=1+7*(z-1)+A+o,t,B;return n<=0?(t=M-1,B=j0(t)+n):n>j0(M)?(t=M+1,B=n-j0(M)):(t=M,B=n),{year:t,dayOfYear:B}}function Q0(M,z,b){var p=n1(M.year(),z,b),O=Math.floor((M.dayOfYear()-p-1)/7)+1,A,o;return O<1?(o=M.year()-1,A=O+d0(o,z,b)):O>d0(M.year(),z,b)?(A=O-d0(M.year(),z,b),o=M.year()+1):(o=M.year(),A=O),{week:A,year:o}}function d0(M,z,b){var p=n1(M,z,b),O=n1(M+1,z,b);return(j0(M)-p+O)/7}i(\"w\",[\"ww\",2],\"wo\",\"week\"),i(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),R(\"w\",g,E0),R(\"ww\",g,j),R(\"W\",g,E0),R(\"WW\",g,j),G0([\"w\",\"ww\",\"W\",\"WW\"],function(M,z,b,p){z[p.substr(0,1)]=N(M)});function fM(M){return Q0(M,this._week.dow,this._week.doy).week}var LM={dow:0,doy:6};function uM(){return this._week.dow}function sM(){return this._week.doy}function NM(M){var z=this.localeData().week(this);return M==null?z:this.add((M-z)*7,\"d\")}function BM(M){var z=Q0(this,1,4).week;return M==null?z:this.add((M-z)*7,\"d\")}i(\"d\",0,\"do\",\"day\"),i(\"dd\",0,0,function(M){return this.localeData().weekdaysMin(this,M)}),i(\"ddd\",0,0,function(M){return this.localeData().weekdaysShort(this,M)}),i(\"dddd\",0,0,function(M){return this.localeData().weekdays(this,M)}),i(\"e\",0,0,\"weekday\"),i(\"E\",0,0,\"isoWeekday\"),R(\"d\",g),R(\"e\",g),R(\"E\",g),R(\"dd\",function(M,z){return z.weekdaysMinRegex(M)}),R(\"ddd\",function(M,z){return z.weekdaysShortRegex(M)}),R(\"dddd\",function(M,z){return z.weekdaysRegex(M)}),G0([\"dd\",\"ddd\",\"dddd\"],function(M,z,b,p){var O=b._locale.weekdaysParse(M,p,b._strict);O!=null?z.d=O:L(b).invalidWeekday=M}),G0([\"d\",\"e\",\"E\"],function(M,z,b,p){z[p]=N(M)});function lM(M,z){return typeof M!=\"string\"?M:isNaN(M)?(M=z.weekdaysParse(M),typeof M==\"number\"?M:null):parseInt(M,10)}function XM(M,z){return typeof M==\"string\"?z.weekdaysParse(M)%7||7:isNaN(M)?null:M}function D1(M,z){return M.slice(z,7).concat(M.slice(0,z))}var hM=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),e2=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),TM=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),mM=F0,SM=F0,gM=F0;function _M(M,z){var b=k(this._weekdays)?this._weekdays:this._weekdays[M&&M!==!0&&this._weekdays.isFormat.test(z)?\"format\":\"standalone\"];return M===!0?D1(b,this._week.dow):M?b[M.day()]:b}function EM(M){return M===!0?D1(this._weekdaysShort,this._week.dow):M?this._weekdaysShort[M.day()]:this._weekdaysShort}function yM(M){return M===!0?D1(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin}function CM(M,z,b){var p,O,A,o=M.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],p=0;p<7;++p)A=Y([2e3,1]).day(p),this._minWeekdaysParse[p]=this.weekdaysMin(A,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[p]=this.weekdaysShort(A,\"\").toLocaleLowerCase(),this._weekdaysParse[p]=this.weekdays(A,\"\").toLocaleLowerCase();return b?z===\"dddd\"?(O=C.call(this._weekdaysParse,o),O!==-1?O:null):z===\"ddd\"?(O=C.call(this._shortWeekdaysParse,o),O!==-1?O:null):(O=C.call(this._minWeekdaysParse,o),O!==-1?O:null):z===\"dddd\"?(O=C.call(this._weekdaysParse,o),O!==-1||(O=C.call(this._shortWeekdaysParse,o),O!==-1)?O:(O=C.call(this._minWeekdaysParse,o),O!==-1?O:null)):z===\"ddd\"?(O=C.call(this._shortWeekdaysParse,o),O!==-1||(O=C.call(this._weekdaysParse,o),O!==-1)?O:(O=C.call(this._minWeekdaysParse,o),O!==-1?O:null)):(O=C.call(this._minWeekdaysParse,o),O!==-1||(O=C.call(this._weekdaysParse,o),O!==-1)?O:(O=C.call(this._shortWeekdaysParse,o),O!==-1?O:null))}function DM(M,z,b){var p,O,A;if(this._weekdaysParseExact)return CM.call(this,M,z,b);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),p=0;p<7;p++){if(O=Y([2e3,1]).day(p),b&&!this._fullWeekdaysParse[p]&&(this._fullWeekdaysParse[p]=new RegExp(\"^\"+this.weekdays(O,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[p]=new RegExp(\"^\"+this.weekdaysShort(O,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[p]=new RegExp(\"^\"+this.weekdaysMin(O,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[p]||(A=\"^\"+this.weekdays(O,\"\")+\"|^\"+this.weekdaysShort(O,\"\")+\"|^\"+this.weekdaysMin(O,\"\"),this._weekdaysParse[p]=new RegExp(A.replace(\".\",\"\"),\"i\")),b&&z===\"dddd\"&&this._fullWeekdaysParse[p].test(M))return p;if(b&&z===\"ddd\"&&this._shortWeekdaysParse[p].test(M))return p;if(b&&z===\"dd\"&&this._minWeekdaysParse[p].test(M))return p;if(!b&&this._weekdaysParse[p].test(M))return p}}function kM(M){if(!this.isValid())return M!=null?this:NaN;var z=K0(this,\"Day\");return M!=null?(M=lM(M,this.localeData()),this.add(M-z,\"d\")):z}function wM(M){if(!this.isValid())return M!=null?this:NaN;var z=(this.day()+7-this.localeData()._week.dow)%7;return M==null?z:this.add(M-z,\"d\")}function PM(M){if(!this.isValid())return M!=null?this:NaN;if(M!=null){var z=XM(M,this.localeData());return this.day(this.day()%7?z:z-7)}else return this.day()||7}function vM(M){return this._weekdaysParseExact?(f(this,\"_weekdaysRegex\")||k1.call(this),M?this._weekdaysStrictRegex:this._weekdaysRegex):(f(this,\"_weekdaysRegex\")||(this._weekdaysRegex=mM),this._weekdaysStrictRegex&&M?this._weekdaysStrictRegex:this._weekdaysRegex)}function IM(M){return this._weekdaysParseExact?(f(this,\"_weekdaysRegex\")||k1.call(this),M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(f(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=SM),this._weekdaysShortStrictRegex&&M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function UM(M){return this._weekdaysParseExact?(f(this,\"_weekdaysRegex\")||k1.call(this),M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(f(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=gM),this._weekdaysMinStrictRegex&&M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function k1(){function M(v,i0){return i0.length-v.length}var z=[],b=[],p=[],O=[],A,o,n,t,B;for(A=0;A<7;A++)o=Y([2e3,1]).day(A),n=o0(this.weekdaysMin(o,\"\")),t=o0(this.weekdaysShort(o,\"\")),B=o0(this.weekdays(o,\"\")),z.push(n),b.push(t),p.push(B),O.push(n),O.push(t),O.push(B);z.sort(M),b.sort(M),p.sort(M),O.sort(M),this._weekdaysRegex=new RegExp(\"^(\"+O.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+p.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+b.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+z.join(\"|\")+\")\",\"i\")}function w1(){return this.hours()%12||12}function xM(){return this.hours()||24}i(\"H\",[\"HH\",2],0,\"hour\"),i(\"h\",[\"hh\",2],0,w1),i(\"k\",[\"kk\",2],0,xM),i(\"hmm\",0,0,function(){return\"\"+w1.apply(this)+G(this.minutes(),2)}),i(\"hmmss\",0,0,function(){return\"\"+w1.apply(this)+G(this.minutes(),2)+G(this.seconds(),2)}),i(\"Hmm\",0,0,function(){return\"\"+this.hours()+G(this.minutes(),2)}),i(\"Hmmss\",0,0,function(){return\"\"+this.hours()+G(this.minutes(),2)+G(this.seconds(),2)});function n2(M,z){i(M,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),z)})}n2(\"a\",!0),n2(\"A\",!1);function R2(M,z){return z._meridiemParse}R(\"a\",R2),R(\"A\",R2),R(\"H\",g,E1),R(\"h\",g,E0),R(\"k\",g,E0),R(\"HH\",g,j),R(\"hh\",g,j),R(\"kk\",g,j),R(\"hmm\",b2),R(\"hmmss\",p2),R(\"Hmm\",b2),R(\"Hmmss\",p2),m([\"H\",\"HH\"],D),m([\"k\",\"kk\"],function(M,z,b){var p=N(M);z[D]=p===24?0:p}),m([\"a\",\"A\"],function(M,z,b){b._isPm=b._locale.isPM(M),b._meridiem=M}),m([\"h\",\"hh\"],function(M,z,b){z[D]=N(M),L(b).bigHour=!0}),m(\"hmm\",function(M,z,b){var p=M.length-2;z[D]=N(M.substr(0,p)),z[$]=N(M.substr(p)),L(b).bigHour=!0}),m(\"hmmss\",function(M,z,b){var p=M.length-4,O=M.length-2;z[D]=N(M.substr(0,p)),z[$]=N(M.substr(p,2)),z[W0]=N(M.substr(O)),L(b).bigHour=!0}),m(\"Hmm\",function(M,z,b){var p=M.length-2;z[D]=N(M.substr(0,p)),z[$]=N(M.substr(p))}),m(\"Hmmss\",function(M,z,b){var p=M.length-4,O=M.length-2;z[D]=N(M.substr(0,p)),z[$]=N(M.substr(p,2)),z[W0]=N(M.substr(O))});function HM(M){return(M+\"\").toLowerCase().charAt(0)===\"p\"}var YM=/[ap]\\.?m?\\.?/i,FM=y0(\"Hours\",!0);function GM(M,z,b){return M>11?b?\"pm\":\"PM\":b?\"am\":\"AM\"}var i2={calendar:T1,longDateFormat:O1,invalidDate:S1,ordinal:c,dayOfMonthOrdinalParse:q,relativeTime:e,months:oM,monthsShort:c2,week:LM,weekdays:hM,weekdaysMin:TM,weekdaysShort:e2,meridiemParse:YM},E={},J0={},Z0;function jM(M,z){var b,p=Math.min(M.length,z.length);for(b=0;b<p;b+=1)if(M[b]!==z[b])return b;return p}function r2(M){return M&&M.toLowerCase().replace(\"_\",\"-\")}function KM(M){for(var z=0,b,p,O,A;z<M.length;){for(A=r2(M[z]).split(\"-\"),b=A.length,p=r2(M[z+1]),p=p?p.split(\"-\"):null;b>0;){if(O=R1(A.slice(0,b).join(\"-\")),O)return O;if(p&&p.length>=b&&jM(A,p)>=b-1)break;b--}z++}return Z0}function VM(M){return!!(M&&M.match(\"^[^/\\\\\\\\]*$\"))}function R1(M){var z=null,b;if(E[M]===void 0&&typeof v0<\"u\"&&v0&&v0.exports&&VM(M))try{z=Z0._abbr,b=H2,b(\"./locale/\"+M),L0(z)}catch{E[M]=null}return E[M]}function L0(M,z){var b;return M&&(w(z)?b=a0(M):b=P1(M,z),b?Z0=b:typeof console<\"u\"&&console.warn&&console.warn(\"Locale \"+M+\" not found. Did you forget to load it?\")),Z0._abbr}function P1(M,z){if(z!==null){var b,p=i2;if(z.abbr=M,E[M]!=null)p1(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),p=E[M]._config;else if(z.parentLocale!=null)if(E[z.parentLocale]!=null)p=E[z.parentLocale]._config;else if(b=R1(z.parentLocale),b!=null)p=b._config;else return J0[z.parentLocale]||(J0[z.parentLocale]=[]),J0[z.parentLocale].push({name:M,config:z}),null;return E[M]=new S0(A0(p,z)),J0[M]&&J0[M].forEach(function(O){P1(O.name,O.config)}),L0(M),E[M]}else return delete E[M],null}function QM(M,z){if(z!=null){var b,p,O=i2;E[M]!=null&&E[M].parentLocale!=null?E[M].set(A0(E[M]._config,z)):(p=R1(M),p!=null&&(O=p._config),z=A0(O,z),p==null&&(z.abbr=M),b=new S0(z),b.parentLocale=E[M],E[M]=b),L0(M)}else E[M]!=null&&(E[M].parentLocale!=null?(E[M]=E[M].parentLocale,M===L0()&&L0(M)):E[M]!=null&&delete E[M]);return E[M]}function a0(M){var z;if(M&&M._locale&&M._locale._abbr&&(M=M._locale._abbr),!M)return Z0;if(!k(M)){if(z=R1(M),z)return z;M=[M]}return KM(M)}function JM(){return x(E)}function v1(M){var z,b=M._a;return b&&L(M).overflow===-2&&(z=b[q0]<0||b[q0]>11?q0:b[O0]<1||b[O0]>C1(b[P],b[q0])?O0:b[D]<0||b[D]>24||b[D]===24&&(b[$]!==0||b[W0]!==0||b[B0]!==0)?D:b[$]<0||b[$]>59?$:b[W0]<0||b[W0]>59?W0:b[B0]<0||b[B0]>999?B0:-1,L(M)._overflowDayOfYear&&(z<P||z>O0)&&(z=O0),L(M)._overflowWeeks&&z===-1&&(z=zM),L(M)._overflowWeekday&&z===-1&&(z=bM),L(M).overflow=z),M}var ZM=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,$M=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,Mz=/Z|[+-]\\d\\d(?::?\\d\\d)?/,i1=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],I1=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],zz=/^\\/?Date\\((-?\\d+)/i,bz=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,pz={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function t2(M){var z,b,p=M._i,O=ZM.exec(p)||$M.exec(p),A,o,n,t,B=i1.length,v=I1.length;if(O){for(L(M).iso=!0,z=0,b=B;z<b;z++)if(i1[z][1].exec(O[1])){o=i1[z][0],A=i1[z][2]!==!1;break}if(o==null){M._isValid=!1;return}if(O[3]){for(z=0,b=v;z<b;z++)if(I1[z][1].exec(O[3])){n=(O[2]||\" \")+I1[z][0];break}if(n==null){M._isValid=!1;return}}if(!A&&n!=null){M._isValid=!1;return}if(O[4])if(Mz.exec(O[4]))t=\"Z\";else{M._isValid=!1;return}M._f=o+(n||\"\")+(t||\"\"),x1(M)}else M._isValid=!1}function Oz(M,z,b,p,O,A){var o=[Az(M),c2.indexOf(z),parseInt(b,10),parseInt(p,10),parseInt(O,10)];return A&&o.push(parseInt(A,10)),o}function Az(M){var z=parseInt(M,10);return z<=49?2e3+z:z<=999?1900+z:z}function cz(M){return M.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function oz(M,z,b){if(M){var p=e2.indexOf(M),O=new Date(z[0],z[1],z[2]).getDay();if(p!==O)return L(b).weekdayMismatch=!0,b._isValid=!1,!1}return!0}function qz(M,z,b){if(M)return pz[M];if(z)return 0;var p=parseInt(b,10),O=p%100,A=(p-O)/100;return A*60+O}function f2(M){var z=bz.exec(cz(M._i)),b;if(z){if(b=Oz(z[4],z[3],z[2],z[5],z[6],z[7]),!oz(z[1],b,M))return;M._a=b,M._tzm=qz(z[8],z[9],z[10]),M._d=V0.apply(null,M._a),M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),L(M).rfc2822=!0}else M._isValid=!1}function Wz(M){var z=zz.exec(M._i);if(z!==null){M._d=new Date(+z[1]);return}if(t2(M),M._isValid===!1)delete M._isValid;else return;if(f2(M),M._isValid===!1)delete M._isValid;else return;M._strict?M._isValid=!1:a.createFromInputFallback(M)}a.createFromInputFallback=U(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(M){M._d=new Date(M._i+(M._useUTC?\" UTC\":\"\"))});function C0(M,z,b){return M??z??b}function dz(M){var z=new Date(a.now());return M._useUTC?[z.getUTCFullYear(),z.getUTCMonth(),z.getUTCDate()]:[z.getFullYear(),z.getMonth(),z.getDate()]}function U1(M){var z,b,p=[],O,A,o;if(!M._d){for(O=dz(M),M._w&&M._a[O0]==null&&M._a[q0]==null&&az(M),M._dayOfYear!=null&&(o=C0(M._a[P],O[P]),(M._dayOfYear>j0(o)||M._dayOfYear===0)&&(L(M)._overflowDayOfYear=!0),b=V0(o,0,M._dayOfYear),M._a[q0]=b.getUTCMonth(),M._a[O0]=b.getUTCDate()),z=0;z<3&&M._a[z]==null;++z)M._a[z]=p[z]=O[z];for(;z<7;z++)M._a[z]=p[z]=M._a[z]==null?z===2?1:0:M._a[z];M._a[D]===24&&M._a[$]===0&&M._a[W0]===0&&M._a[B0]===0&&(M._nextDay=!0,M._a[D]=0),M._d=(M._useUTC?V0:tM).apply(null,p),A=M._useUTC?M._d.getUTCDay():M._d.getDay(),M._tzm!=null&&M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),M._nextDay&&(M._a[D]=24),M._w&&typeof M._w.d<\"u\"&&M._w.d!==A&&(L(M).weekdayMismatch=!0)}}function az(M){var z,b,p,O,A,o,n,t,B;z=M._w,z.GG!=null||z.W!=null||z.E!=null?(A=1,o=4,b=C0(z.GG,M._a[P],Q0(_(),1,4).year),p=C0(z.W,1),O=C0(z.E,1),(O<1||O>7)&&(t=!0)):(A=M._locale._week.dow,o=M._locale._week.doy,B=Q0(_(),A,o),b=C0(z.gg,M._a[P],B.year),p=C0(z.w,B.week),z.d!=null?(O=z.d,(O<0||O>6)&&(t=!0)):z.e!=null?(O=z.e+A,(z.e<0||z.e>6)&&(t=!0)):O=A),p<1||p>d0(b,A,o)?L(M)._overflowWeeks=!0:t!=null?L(M)._overflowWeekday=!0:(n=a2(b,p,O,A,o),M._a[P]=n.year,M._dayOfYear=n.dayOfYear)}a.ISO_8601=function(){},a.RFC_2822=function(){};function x1(M){if(M._f===a.ISO_8601){t2(M);return}if(M._f===a.RFC_2822){f2(M);return}M._a=[],L(M).empty=!0;var z=\"\"+M._i,b,p,O,A,o,n=z.length,t=0,B,v;for(O=H(M._f,M._locale).match(x0)||[],v=O.length,b=0;b<v;b++)A=O[b],p=(z.match(Z2(A,M))||[])[0],p&&(o=z.substr(0,z.indexOf(p)),o.length>0&&L(M).unusedInput.push(o),z=z.slice(z.indexOf(p)+p.length),t+=p.length),f0[A]?(p?L(M).empty=!1:L(M).unusedTokens.push(A),MM(A,p,M)):M._strict&&!p&&L(M).unusedTokens.push(A);L(M).charsLeftOver=n-t,z.length>0&&L(M).unusedInput.push(z),M._a[D]<=12&&L(M).bigHour===!0&&M._a[D]>0&&(L(M).bigHour=void 0),L(M).parsedDateParts=M._a.slice(0),L(M).meridiem=M._meridiem,M._a[D]=ez(M._locale,M._a[D],M._meridiem),B=L(M).era,B!==null&&(M._a[P]=M._locale.erasConvertYear(B,M._a[P])),U1(M),v1(M)}function ez(M,z,b){var p;return b==null?z:M.meridiemHour!=null?M.meridiemHour(z,b):(M.isPM!=null&&(p=M.isPM(b),p&&z<12&&(z+=12),!p&&z===12&&(z=0)),z)}function nz(M){var z,b,p,O,A,o,n=!1,t=M._f.length;if(t===0){L(M).invalidFormat=!0,M._d=new Date(NaN);return}for(O=0;O<t;O++)A=0,o=!1,z=p0({},M),M._useUTC!=null&&(z._useUTC=M._useUTC),z._f=M._f[O],x1(z),m0(z)&&(o=!0),A+=L(z).charsLeftOver,A+=L(z).unusedTokens.length*10,L(z).score=A,n?A<p&&(p=A,b=z):(p==null||A<p||o)&&(p=A,b=z,o&&(n=!0));Z(M,b||z)}function Rz(M){if(!M._d){var z=S(M._i),b=z.day===void 0?z.date:z.day;M._a=I0([z.year,z.month,b,z.hour,z.minute,z.second,z.millisecond],function(p){return p&&parseInt(p,10)}),U1(M)}}function iz(M){var z=new t0(v1(L2(M)));return z._nextDay&&(z.add(1,\"d\"),z._nextDay=void 0),z}function L2(M){var z=M._i,b=M._f;return M._locale=M._locale||a0(M._l),z===null||b===void 0&&z===\"\"?b0({nullInput:!0}):(typeof z==\"string\"&&(M._i=z=M._locale.preparse(z)),F(z)?new t0(v1(z)):(z0(z)?M._d=z:k(b)?nz(M):b?x1(M):rz(M),m0(M)||(M._d=null),M))}function rz(M){var z=M._i;w(z)?M._d=new Date(a.now()):z0(z)?M._d=new Date(z.valueOf()):typeof z==\"string\"?Wz(M):k(z)?(M._a=I0(z.slice(0),function(b){return parseInt(b,10)}),U1(M)):I(z)?Rz(M):K(z)?M._d=new Date(z):a.createFromInputFallback(M)}function u2(M,z,b,p,O){var A={};return(z===!0||z===!1)&&(p=z,z=void 0),(b===!0||b===!1)&&(p=b,b=void 0),(I(M)&&r0(M)||k(M)&&M.length===0)&&(M=void 0),A._isAMomentObject=!0,A._useUTC=A._isUTC=O,A._l=b,A._i=M,A._f=z,A._strict=p,iz(A)}function _(M,z,b,p){return u2(M,z,b,p,!1)}var tz=U(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var M=_.apply(null,arguments);return this.isValid()&&M.isValid()?M<this?this:M:b0()}),fz=U(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var M=_.apply(null,arguments);return this.isValid()&&M.isValid()?M>this?this:M:b0()});function s2(M,z){var b,p;if(z.length===1&&k(z[0])&&(z=z[0]),!z.length)return _();for(b=z[0],p=1;p<z.length;++p)(!z[p].isValid()||z[p][M](b))&&(b=z[p]);return b}function Lz(){var M=[].slice.call(arguments,0);return s2(\"isBefore\",M)}function uz(){var M=[].slice.call(arguments,0);return s2(\"isAfter\",M)}var sz=function(){return Date.now?Date.now():+new Date},$0=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Nz(M){var z,b=!1,p,O=$0.length;for(z in M)if(f(M,z)&&!(C.call($0,z)!==-1&&(M[z]==null||!isNaN(M[z]))))return!1;for(p=0;p<O;++p)if(M[$0[p]]){if(b)return!1;parseFloat(M[$0[p]])!==N(M[$0[p]])&&(b=!0)}return!0}function Bz(){return this._isValid}function lz(){return M0(NaN)}function r1(M){var z=S(M),b=z.year||0,p=z.quarter||0,O=z.month||0,A=z.week||z.isoWeek||0,o=z.day||0,n=z.hour||0,t=z.minute||0,B=z.second||0,v=z.millisecond||0;this._isValid=Nz(z),this._milliseconds=+v+B*1e3+t*6e4+n*1e3*60*60,this._days=+o+A*7,this._months=+O+p*3+b*12,this._data={},this._locale=a0(),this._bubble()}function t1(M){return M instanceof r1}function H1(M){return M<0?Math.round(-1*M)*-1:Math.round(M)}function Xz(M,z,b){var p=Math.min(M.length,z.length),O=Math.abs(M.length-z.length),A=0,o;for(o=0;o<p;o++)(b&&M[o]!==z[o]||!b&&N(M[o])!==N(z[o]))&&A++;return A+O}function N2(M,z){i(M,0,0,function(){var b=this.utcOffset(),p=\"+\";return b<0&&(b=-b,p=\"-\"),p+G(~~(b/60),2)+z+G(~~b%60,2)})}N2(\"Z\",\":\"),N2(\"ZZ\",\"\"),R(\"Z\",d1),R(\"ZZ\",d1),m([\"Z\",\"ZZ\"],function(M,z,b){b._useUTC=!0,b._tzm=Y1(d1,M)});var hz=/([\\+\\-]|\\d\\d)/gi;function Y1(M,z){var b=(z||\"\").match(M),p,O,A;return b===null?null:(p=b[b.length-1]||[],O=(p+\"\").match(hz)||[\"-\",0,0],A=+(O[1]*60)+N(O[2]),A===0?0:O[0]===\"+\"?A:-A)}function F1(M,z){var b,p;return z._isUTC?(b=z.clone(),p=(F(M)||z0(M)?M.valueOf():_(M).valueOf())-b.valueOf(),b._d.setTime(b._d.valueOf()+p),a.updateOffset(b,!1),b):_(M).local()}function G1(M){return-Math.round(M._d.getTimezoneOffset())}a.updateOffset=function(){};function Tz(M,z,b){var p=this._offset||0,O;if(!this.isValid())return M!=null?this:NaN;if(M!=null){if(typeof M==\"string\"){if(M=Y1(d1,M),M===null)return this}else Math.abs(M)<16&&!b&&(M=M*60);return!this._isUTC&&z&&(O=G1(this)),this._offset=M,this._isUTC=!0,O!=null&&this.add(O,\"m\"),p!==M&&(!z||this._changeInProgress?h2(this,M0(M-p,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}else return this._isUTC?p:G1(this)}function mz(M,z){return M!=null?(typeof M!=\"string\"&&(M=-M),this.utcOffset(M,z),this):-this.utcOffset()}function Sz(M){return this.utcOffset(0,M)}function gz(M){return this._isUTC&&(this.utcOffset(0,M),this._isUTC=!1,M&&this.subtract(G1(this),\"m\")),this}function _z(){if(this._tzm!=null)this.utcOffset(this._tzm,!1,!0);else if(typeof this._i==\"string\"){var M=Y1(Q2,this._i);M!=null?this.utcOffset(M):this.utcOffset(0,!0)}return this}function Ez(M){return this.isValid()?(M=M?_(M).utcOffset():0,(this.utcOffset()-M)%60===0):!1}function yz(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Cz(){if(!w(this._isDSTShifted))return this._isDSTShifted;var M={},z;return p0(M,this),M=L2(M),M._a?(z=M._isUTC?Y(M._a):_(M._a),this._isDSTShifted=this.isValid()&&Xz(M._a,z.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Dz(){return this.isValid()?!this._isUTC:!1}function kz(){return this.isValid()?this._isUTC:!1}function B2(){return this.isValid()?this._isUTC&&this._offset===0:!1}var wz=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,Pz=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function M0(M,z){var b=M,p=null,O,A,o;return t1(M)?b={ms:M._milliseconds,d:M._days,M:M._months}:K(M)||!isNaN(+M)?(b={},z?b[z]=+M:b.milliseconds=+M):(p=wz.exec(M))?(O=p[1]===\"-\"?-1:1,b={y:0,d:N(p[O0])*O,h:N(p[D])*O,m:N(p[$])*O,s:N(p[W0])*O,ms:N(H1(p[B0]*1e3))*O}):(p=Pz.exec(M))?(O=p[1]===\"-\"?-1:1,b={y:l0(p[2],O),M:l0(p[3],O),w:l0(p[4],O),d:l0(p[5],O),h:l0(p[6],O),m:l0(p[7],O),s:l0(p[8],O)}):b==null?b={}:typeof b==\"object\"&&(\"from\"in b||\"to\"in b)&&(o=vz(_(b.from),_(b.to)),b={},b.ms=o.milliseconds,b.M=o.months),A=new r1(b),t1(M)&&f(M,\"_locale\")&&(A._locale=M._locale),t1(M)&&f(M,\"_isValid\")&&(A._isValid=M._isValid),A}M0.fn=r1.prototype,M0.invalid=lz;function l0(M,z){var b=M&&parseFloat(M.replace(\",\",\".\"));return(isNaN(b)?0:b)*z}function l2(M,z){var b={};return b.months=z.month()-M.month()+(z.year()-M.year())*12,M.clone().add(b.months,\"M\").isAfter(z)&&--b.months,b.milliseconds=+z-+M.clone().add(b.months,\"M\"),b}function vz(M,z){var b;return M.isValid()&&z.isValid()?(z=F1(z,M),M.isBefore(z)?b=l2(M,z):(b=l2(z,M),b.milliseconds=-b.milliseconds,b.months=-b.months),b):{milliseconds:0,months:0}}function X2(M,z){return function(b,p){var O,A;return p!==null&&!isNaN(+p)&&(p1(z,\"moment().\"+z+\"(period, number) is deprecated. Please use moment().\"+z+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),A=b,b=p,p=A),O=M0(b,p),h2(this,O,M),this}}function h2(M,z,b,p){var O=z._milliseconds,A=H1(z._days),o=H1(z._months);M.isValid()&&(p=p??!0,o&&q2(M,K0(M,\"Month\")+o*b),A&&A2(M,\"Date\",K0(M,\"Date\")+A*b),O&&M._d.setTime(M._d.valueOf()+O*b),p&&a.updateOffset(M,A||o))}var Iz=X2(1,\"add\"),Uz=X2(-1,\"subtract\");function T2(M){return typeof M==\"string\"||M instanceof String}function xz(M){return F(M)||z0(M)||T2(M)||K(M)||Yz(M)||Hz(M)||M===null||M===void 0}function Hz(M){var z=I(M)&&!r0(M),b=!1,p=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],O,A,o=p.length;for(O=0;O<o;O+=1)A=p[O],b=b||f(M,A);return z&&b}function Yz(M){var z=k(M),b=!1;return z&&(b=M.filter(function(p){return!K(p)&&T2(M)}).length===0),z&&b}function Fz(M){var z=I(M)&&!r0(M),b=!1,p=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"],O,A;for(O=0;O<p.length;O+=1)A=p[O],b=b||f(M,A);return z&&b}function Gz(M,z){var b=M.diff(z,\"days\",!0);return b<-6?\"sameElse\":b<-1?\"lastWeek\":b<0?\"lastDay\":b<1?\"sameDay\":b<2?\"nextDay\":b<7?\"nextWeek\":\"sameElse\"}function jz(M,z){arguments.length===1&&(arguments[0]?xz(arguments[0])?(M=arguments[0],z=void 0):Fz(arguments[0])&&(z=arguments[0],M=void 0):(M=void 0,z=void 0));var b=M||_(),p=F1(b,this).startOf(\"day\"),O=a.calendarFormat(this,p)||\"sameElse\",A=z&&(V(z[O])?z[O].call(this,b):z[O]);return this.format(A||this.localeData().calendar(O,this,_(b)))}function Kz(){return new t0(this)}function Vz(M,z){var b=F(M)?M:_(M);return this.isValid()&&b.isValid()?(z=u(z)||\"millisecond\",z===\"millisecond\"?this.valueOf()>b.valueOf():b.valueOf()<this.clone().startOf(z).valueOf()):!1}function Qz(M,z){var b=F(M)?M:_(M);return this.isValid()&&b.isValid()?(z=u(z)||\"millisecond\",z===\"millisecond\"?this.valueOf()<b.valueOf():this.clone().endOf(z).valueOf()<b.valueOf()):!1}function Jz(M,z,b,p){var O=F(M)?M:_(M),A=F(z)?z:_(z);return this.isValid()&&O.isValid()&&A.isValid()?(p=p||\"()\",(p[0]===\"(\"?this.isAfter(O,b):!this.isBefore(O,b))&&(p[1]===\")\"?this.isBefore(A,b):!this.isAfter(A,b))):!1}function Zz(M,z){var b=F(M)?M:_(M),p;return this.isValid()&&b.isValid()?(z=u(z)||\"millisecond\",z===\"millisecond\"?this.valueOf()===b.valueOf():(p=b.valueOf(),this.clone().startOf(z).valueOf()<=p&&p<=this.clone().endOf(z).valueOf())):!1}function $z(M,z){return this.isSame(M,z)||this.isAfter(M,z)}function Mb(M,z){return this.isSame(M,z)||this.isBefore(M,z)}function zb(M,z,b){var p,O,A;if(!this.isValid())return NaN;if(p=F1(M,this),!p.isValid())return NaN;switch(O=(p.utcOffset()-this.utcOffset())*6e4,z=u(z),z){case\"year\":A=f1(this,p)/12;break;case\"month\":A=f1(this,p);break;case\"quarter\":A=f1(this,p)/3;break;case\"second\":A=(this-p)/1e3;break;case\"minute\":A=(this-p)/6e4;break;case\"hour\":A=(this-p)/36e5;break;case\"day\":A=(this-p-O)/864e5;break;case\"week\":A=(this-p-O)/6048e5;break;default:A=this-p}return b?A:Q(A)}function f1(M,z){if(M.date()<z.date())return-f1(z,M);var b=(z.year()-M.year())*12+(z.month()-M.month()),p=M.clone().add(b,\"months\"),O,A;return z-p<0?(O=M.clone().add(b-1,\"months\"),A=(z-p)/(p-O)):(O=M.clone().add(b+1,\"months\"),A=(z-p)/(O-p)),-(b+A)||0}a.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",a.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";function bb(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function pb(M){if(!this.isValid())return null;var z=M!==!0,b=z?this.clone().utc():this;return b.year()<0||b.year()>9999?T(b,z?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):V(Date.prototype.toISOString)?z?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace(\"Z\",T(b,\"Z\")):T(b,z?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")}function Ob(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var M=\"moment\",z=\"\",b,p,O,A;return this.isLocal()||(M=this.utcOffset()===0?\"moment.utc\":\"moment.parseZone\",z=\"Z\"),b=\"[\"+M+'(\"]',p=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",O=\"-MM-DD[T]HH:mm:ss.SSS\",A=z+'[\")]',this.format(b+p+O+A)}function Ab(M){M||(M=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var z=T(this,M);return this.localeData().postformat(z)}function cb(M,z){return this.isValid()&&(F(M)&&M.isValid()||_(M).isValid())?M0({to:this,from:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function ob(M){return this.from(_(),M)}function qb(M,z){return this.isValid()&&(F(M)&&M.isValid()||_(M).isValid())?M0({from:this,to:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function Wb(M){return this.to(_(),M)}function m2(M){var z;return M===void 0?this._locale._abbr:(z=a0(M),z!=null&&(this._locale=z),this)}var S2=U(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(M){return M===void 0?this.localeData():this.locale(M)});function g2(){return this._locale}var L1=1e3,D0=60*L1,u1=60*D0,_2=(365*400+97)*24*u1;function k0(M,z){return(M%z+z)%z}function E2(M,z,b){return M<100&&M>=0?new Date(M+400,z,b)-_2:new Date(M,z,b).valueOf()}function y2(M,z,b){return M<100&&M>=0?Date.UTC(M+400,z,b)-_2:Date.UTC(M,z,b)}function db(M){var z,b;if(M=u(M),M===void 0||M===\"millisecond\"||!this.isValid())return this;switch(b=this._isUTC?y2:E2,M){case\"year\":z=b(this.year(),0,1);break;case\"quarter\":z=b(this.year(),this.month()-this.month()%3,1);break;case\"month\":z=b(this.year(),this.month(),1);break;case\"week\":z=b(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":z=b(this.year(),this.month(),this.date());break;case\"hour\":z=this._d.valueOf(),z-=k0(z+(this._isUTC?0:this.utcOffset()*D0),u1);break;case\"minute\":z=this._d.valueOf(),z-=k0(z,D0);break;case\"second\":z=this._d.valueOf(),z-=k0(z,L1);break}return this._d.setTime(z),a.updateOffset(this,!0),this}function ab(M){var z,b;if(M=u(M),M===void 0||M===\"millisecond\"||!this.isValid())return this;switch(b=this._isUTC?y2:E2,M){case\"year\":z=b(this.year()+1,0,1)-1;break;case\"quarter\":z=b(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":z=b(this.year(),this.month()+1,1)-1;break;case\"week\":z=b(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":z=b(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":z=this._d.valueOf(),z+=u1-k0(z+(this._isUTC?0:this.utcOffset()*D0),u1)-1;break;case\"minute\":z=this._d.valueOf(),z+=D0-k0(z,D0)-1;break;case\"second\":z=this._d.valueOf(),z+=L1-k0(z,L1)-1;break}return this._d.setTime(z),a.updateOffset(this,!0),this}function eb(){return this._d.valueOf()-(this._offset||0)*6e4}function nb(){return Math.floor(this.valueOf()/1e3)}function Rb(){return new Date(this.valueOf())}function ib(){var M=this;return[M.year(),M.month(),M.date(),M.hour(),M.minute(),M.second(),M.millisecond()]}function rb(){var M=this;return{years:M.year(),months:M.month(),date:M.date(),hours:M.hours(),minutes:M.minutes(),seconds:M.seconds(),milliseconds:M.milliseconds()}}function tb(){return this.isValid()?this.toISOString():null}function fb(){return m0(this)}function Lb(){return Z({},L(this))}function ub(){return L(this).overflow}function sb(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}i(\"N\",0,0,\"eraAbbr\"),i(\"NN\",0,0,\"eraAbbr\"),i(\"NNN\",0,0,\"eraAbbr\"),i(\"NNNN\",0,0,\"eraName\"),i(\"NNNNN\",0,0,\"eraNarrow\"),i(\"y\",[\"y\",1],\"yo\",\"eraYear\"),i(\"y\",[\"yy\",2],0,\"eraYear\"),i(\"y\",[\"yyy\",3],0,\"eraYear\"),i(\"y\",[\"yyyy\",4],0,\"eraYear\"),R(\"N\",j1),R(\"NN\",j1),R(\"NNN\",j1),R(\"NNNN\",Eb),R(\"NNNNN\",yb),m([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],function(M,z,b,p){var O=b._locale.erasParse(M,p,b._strict);O?L(b).era=O:L(b).invalidEra=M}),R(\"y\",_0),R(\"yy\",_0),R(\"yyy\",_0),R(\"yyyy\",_0),R(\"yo\",Cb),m([\"y\",\"yy\",\"yyy\",\"yyyy\"],P),m([\"yo\"],function(M,z,b,p){var O;b._locale._eraYearOrdinalRegex&&(O=M.match(b._locale._eraYearOrdinalRegex)),b._locale.eraYearOrdinalParse?z[P]=b._locale.eraYearOrdinalParse(M,O):z[P]=parseInt(M,10)});function Nb(M,z){var b,p,O,A=this._eras||a0(\"en\")._eras;for(b=0,p=A.length;b<p;++b){switch(typeof A[b].since){case\"string\":O=a(A[b].since).startOf(\"day\"),A[b].since=O.valueOf();break}switch(typeof A[b].until){case\"undefined\":A[b].until=1/0;break;case\"string\":O=a(A[b].until).startOf(\"day\").valueOf(),A[b].until=O.valueOf();break}}return A}function Bb(M,z,b){var p,O,A=this.eras(),o,n,t;for(M=M.toUpperCase(),p=0,O=A.length;p<O;++p)if(o=A[p].name.toUpperCase(),n=A[p].abbr.toUpperCase(),t=A[p].narrow.toUpperCase(),b)switch(z){case\"N\":case\"NN\":case\"NNN\":if(n===M)return A[p];break;case\"NNNN\":if(o===M)return A[p];break;case\"NNNNN\":if(t===M)return A[p];break}else if([o,n,t].indexOf(M)>=0)return A[p]}function lb(M,z){var b=M.since<=M.until?1:-1;return z===void 0?a(M.since).year():a(M.since).year()+(z-M.offset)*b}function Xb(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M)if(b=this.clone().startOf(\"day\").valueOf(),p[M].since<=b&&b<=p[M].until||p[M].until<=b&&b<=p[M].since)return p[M].name;return\"\"}function hb(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M)if(b=this.clone().startOf(\"day\").valueOf(),p[M].since<=b&&b<=p[M].until||p[M].until<=b&&b<=p[M].since)return p[M].narrow;return\"\"}function Tb(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M)if(b=this.clone().startOf(\"day\").valueOf(),p[M].since<=b&&b<=p[M].until||p[M].until<=b&&b<=p[M].since)return p[M].abbr;return\"\"}function mb(){var M,z,b,p,O=this.localeData().eras();for(M=0,z=O.length;M<z;++M)if(b=O[M].since<=O[M].until?1:-1,p=this.clone().startOf(\"day\").valueOf(),O[M].since<=p&&p<=O[M].until||O[M].until<=p&&p<=O[M].since)return(this.year()-a(O[M].since).year())*b+O[M].offset;return this.year()}function Sb(M){return f(this,\"_erasNameRegex\")||K1.call(this),M?this._erasNameRegex:this._erasRegex}function gb(M){return f(this,\"_erasAbbrRegex\")||K1.call(this),M?this._erasAbbrRegex:this._erasRegex}function _b(M){return f(this,\"_erasNarrowRegex\")||K1.call(this),M?this._erasNarrowRegex:this._erasRegex}function j1(M,z){return z.erasAbbrRegex(M)}function Eb(M,z){return z.erasNameRegex(M)}function yb(M,z){return z.erasNarrowRegex(M)}function Cb(M,z){return z._eraYearOrdinalRegex||_0}function K1(){var M=[],z=[],b=[],p=[],O,A,o,n,t,B=this.eras();for(O=0,A=B.length;O<A;++O)o=o0(B[O].name),n=o0(B[O].abbr),t=o0(B[O].narrow),z.push(o),M.push(n),b.push(t),p.push(o),p.push(n),p.push(t);this._erasRegex=new RegExp(\"^(\"+p.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+z.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+M.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+b.join(\"|\")+\")\",\"i\")}i(0,[\"gg\",2],0,function(){return this.weekYear()%100}),i(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100});function s1(M,z){i(0,[M,M.length],0,z)}s1(\"gggg\",\"weekYear\"),s1(\"ggggg\",\"weekYear\"),s1(\"GGGG\",\"isoWeekYear\"),s1(\"GGGGG\",\"isoWeekYear\"),R(\"G\",W1),R(\"g\",W1),R(\"GG\",g,j),R(\"gg\",g,j),R(\"GGGG\",_1,g1),R(\"gggg\",_1,g1),R(\"GGGGG\",q1,c1),R(\"ggggg\",q1,c1),G0([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(M,z,b,p){z[p.substr(0,2)]=N(M)}),G0([\"gg\",\"GG\"],function(M,z,b,p){z[p]=a.parseTwoDigitYear(M)});function Db(M){return C2.call(this,M,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function kb(M){return C2.call(this,M,this.isoWeek(),this.isoWeekday(),1,4)}function wb(){return d0(this.year(),1,4)}function Pb(){return d0(this.isoWeekYear(),1,4)}function vb(){var M=this.localeData()._week;return d0(this.year(),M.dow,M.doy)}function Ib(){var M=this.localeData()._week;return d0(this.weekYear(),M.dow,M.doy)}function C2(M,z,b,p,O){var A;return M==null?Q0(this,p,O).year:(A=d0(M,p,O),z>A&&(z=A),Ub.call(this,M,z,b,p,O))}function Ub(M,z,b,p,O){var A=a2(M,z,b,p,O),o=V0(A.year,0,A.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}i(\"Q\",0,\"Qo\",\"quarter\"),R(\"Q\",M2),m(\"Q\",function(M,z){z[q0]=(N(M)-1)*3});function xb(M){return M==null?Math.ceil((this.month()+1)/3):this.month((M-1)*3+this.month()%3)}i(\"D\",[\"DD\",2],\"Do\",\"date\"),R(\"D\",g,E0),R(\"DD\",g,j),R(\"Do\",function(M,z){return M?z._dayOfMonthOrdinalParse||z._ordinalParse:z._dayOfMonthOrdinalParseLenient}),m([\"D\",\"DD\"],O0),m(\"Do\",function(M,z){z[O0]=N(M.match(g)[0])});var D2=y0(\"Date\",!0);i(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),R(\"DDD\",o1),R(\"DDDD\",z2),m([\"DDD\",\"DDDD\"],function(M,z,b){b._dayOfYear=N(M)});function Hb(M){var z=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return M==null?z:this.add(M-z,\"d\")}i(\"m\",[\"mm\",2],0,\"minute\"),R(\"m\",g,E1),R(\"mm\",g,j),m([\"m\",\"mm\"],$);var Yb=y0(\"Minutes\",!1);i(\"s\",[\"ss\",2],0,\"second\"),R(\"s\",g,E1),R(\"ss\",g,j),m([\"s\",\"ss\"],W0);var Fb=y0(\"Seconds\",!1);i(\"S\",0,0,function(){return~~(this.millisecond()/100)}),i(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),i(0,[\"SSS\",3],0,\"millisecond\"),i(0,[\"SSSS\",4],0,function(){return this.millisecond()*10}),i(0,[\"SSSSS\",5],0,function(){return this.millisecond()*100}),i(0,[\"SSSSSS\",6],0,function(){return this.millisecond()*1e3}),i(0,[\"SSSSSSS\",7],0,function(){return this.millisecond()*1e4}),i(0,[\"SSSSSSSS\",8],0,function(){return this.millisecond()*1e5}),i(0,[\"SSSSSSSSS\",9],0,function(){return this.millisecond()*1e6}),R(\"S\",o1,M2),R(\"SS\",o1,j),R(\"SSS\",o1,z2);var u0,k2;for(u0=\"SSSS\";u0.length<=9;u0+=\"S\")R(u0,_0);function Gb(M,z){z[B0]=N((\"0.\"+M)*1e3)}for(u0=\"S\";u0.length<=9;u0+=\"S\")m(u0,Gb);k2=y0(\"Milliseconds\",!1),i(\"z\",0,0,\"zoneAbbr\"),i(\"zz\",0,0,\"zoneName\");function jb(){return this._isUTC?\"UTC\":\"\"}function Kb(){return this._isUTC?\"Coordinated Universal Time\":\"\"}var d=t0.prototype;d.add=Iz,d.calendar=jz,d.clone=Kz,d.diff=zb,d.endOf=ab,d.format=Ab,d.from=cb,d.fromNow=ob,d.to=qb,d.toNow=Wb,d.get=OM,d.invalidAt=ub,d.isAfter=Vz,d.isBefore=Qz,d.isBetween=Jz,d.isSame=Zz,d.isSameOrAfter=$z,d.isSameOrBefore=Mb,d.isValid=fb,d.lang=S2,d.locale=m2,d.localeData=g2,d.max=fz,d.min=tz,d.parsingFlags=Lb,d.set=AM,d.startOf=db,d.subtract=Uz,d.toArray=ib,d.toObject=rb,d.toDate=Rb,d.toISOString=pb,d.inspect=Ob,typeof Symbol<\"u\"&&Symbol.for!=null&&(d[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),d.toJSON=tb,d.toString=bb,d.unix=nb,d.valueOf=eb,d.creationData=sb,d.eraName=Xb,d.eraNarrow=hb,d.eraAbbr=Tb,d.eraYear=mb,d.year=O2,d.isLeapYear=pM,d.weekYear=Db,d.isoWeekYear=kb,d.quarter=d.quarters=xb,d.month=W2,d.daysInMonth=RM,d.week=d.weeks=NM,d.isoWeek=d.isoWeeks=BM,d.weeksInYear=vb,d.weeksInWeekYear=Ib,d.isoWeeksInYear=wb,d.isoWeeksInISOWeekYear=Pb,d.date=D2,d.day=d.days=kM,d.weekday=wM,d.isoWeekday=PM,d.dayOfYear=Hb,d.hour=d.hours=FM,d.minute=d.minutes=Yb,d.second=d.seconds=Fb,d.millisecond=d.milliseconds=k2,d.utcOffset=Tz,d.utc=Sz,d.local=gz,d.parseZone=_z,d.hasAlignedHourOffset=Ez,d.isDST=yz,d.isLocal=Dz,d.isUtcOffset=kz,d.isUtc=B2,d.isUTC=B2,d.zoneAbbr=jb,d.zoneName=Kb,d.dates=U(\"dates accessor is deprecated. Use date instead.\",D2),d.months=U(\"months accessor is deprecated. Use month instead\",W2),d.years=U(\"years accessor is deprecated. Use year instead\",O2),d.zone=U(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",mz),d.isDSTShifted=U(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",Cz);function Vb(M){return _(M*1e3)}function Qb(){return _.apply(null,arguments).parseZone()}function w2(M){return M}var h=S0.prototype;h.calendar=m1,h.longDateFormat=A1,h.invalidDate=N0,h.ordinal=W,h.preparse=w2,h.postformat=w2,h.relativeTime=r,h.pastFuture=l,h.set=h1,h.eras=Nb,h.erasParse=Bb,h.erasConvertYear=lb,h.erasAbbrRegex=gb,h.erasNameRegex=Sb,h.erasNarrowRegex=_b,h.months=dM,h.monthsShort=aM,h.monthsParse=nM,h.monthsRegex=rM,h.monthsShortRegex=iM,h.week=fM,h.firstDayOfYear=sM,h.firstDayOfWeek=uM,h.weekdays=_M,h.weekdaysMin=yM,h.weekdaysShort=EM,h.weekdaysParse=DM,h.weekdaysRegex=vM,h.weekdaysShortRegex=IM,h.weekdaysMinRegex=UM,h.isPM=HM,h.meridiem=GM;function N1(M,z,b,p){var O=a0(),A=Y().set(p,z);return O[b](A,M)}function P2(M,z,b){if(K(M)&&(z=M,M=void 0),M=M||\"\",z!=null)return N1(M,z,b,\"month\");var p,O=[];for(p=0;p<12;p++)O[p]=N1(M,p,b,\"month\");return O}function V1(M,z,b,p){typeof M==\"boolean\"?(K(z)&&(b=z,z=void 0),z=z||\"\"):(z=M,b=z,M=!1,K(z)&&(b=z,z=void 0),z=z||\"\");var O=a0(),A=M?O._week.dow:0,o,n=[];if(b!=null)return N1(z,(b+A)%7,p,\"day\");for(o=0;o<7;o++)n[o]=N1(z,(o+A)%7,p,\"day\");return n}function Jb(M,z){return P2(M,z,\"months\")}function Zb(M,z){return P2(M,z,\"monthsShort\")}function $b(M,z,b){return V1(M,z,b,\"weekdays\")}function Mp(M,z,b){return V1(M,z,b,\"weekdaysShort\")}function zp(M,z,b){return V1(M,z,b,\"weekdaysMin\")}L0(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(M){var z=M%10,b=N(M%100/10)===1?\"th\":z===1?\"st\":z===2?\"nd\":z===3?\"rd\":\"th\";return M+b}}),a.lang=U(\"moment.lang is deprecated. Use moment.locale instead.\",L0),a.langData=U(\"moment.langData is deprecated. Use moment.localeData instead.\",a0);var e0=Math.abs;function bp(){var M=this._data;return this._milliseconds=e0(this._milliseconds),this._days=e0(this._days),this._months=e0(this._months),M.milliseconds=e0(M.milliseconds),M.seconds=e0(M.seconds),M.minutes=e0(M.minutes),M.hours=e0(M.hours),M.months=e0(M.months),M.years=e0(M.years),this}function v2(M,z,b,p){var O=M0(z,b);return M._milliseconds+=p*O._milliseconds,M._days+=p*O._days,M._months+=p*O._months,M._bubble()}function pp(M,z){return v2(this,M,z,1)}function Op(M,z){return v2(this,M,z,-1)}function I2(M){return M<0?Math.floor(M):Math.ceil(M)}function Ap(){var M=this._milliseconds,z=this._days,b=this._months,p=this._data,O,A,o,n,t;return M>=0&&z>=0&&b>=0||M<=0&&z<=0&&b<=0||(M+=I2(Q1(b)+z)*864e5,z=0,b=0),p.milliseconds=M%1e3,O=Q(M/1e3),p.seconds=O%60,A=Q(O/60),p.minutes=A%60,o=Q(A/60),p.hours=o%24,z+=Q(o/24),t=Q(U2(z)),b+=t,z-=I2(Q1(t)),n=Q(b/12),b%=12,p.days=z,p.months=b,p.years=n,this}function U2(M){return M*4800/146097}function Q1(M){return M*146097/4800}function cp(M){if(!this.isValid())return NaN;var z,b,p=this._milliseconds;if(M=u(M),M===\"month\"||M===\"quarter\"||M===\"year\")switch(z=this._days+p/864e5,b=this._months+U2(z),M){case\"month\":return b;case\"quarter\":return b/3;case\"year\":return b/12}else switch(z=this._days+Math.round(Q1(this._months)),M){case\"week\":return z/7+p/6048e5;case\"day\":return z+p/864e5;case\"hour\":return z*24+p/36e5;case\"minute\":return z*1440+p/6e4;case\"second\":return z*86400+p/1e3;case\"millisecond\":return Math.floor(z*864e5)+p;default:throw new Error(\"Unknown unit \"+M)}}function n0(M){return function(){return this.as(M)}}var x2=n0(\"ms\"),op=n0(\"s\"),qp=n0(\"m\"),Wp=n0(\"h\"),dp=n0(\"d\"),ap=n0(\"w\"),ep=n0(\"M\"),np=n0(\"Q\"),Rp=n0(\"y\"),ip=x2;function rp(){return M0(this)}function tp(M){return M=u(M),this.isValid()?this[M+\"s\"]():NaN}function X0(M){return function(){return this.isValid()?this._data[M]:NaN}}var fp=X0(\"milliseconds\"),Lp=X0(\"seconds\"),up=X0(\"minutes\"),sp=X0(\"hours\"),Np=X0(\"days\"),Bp=X0(\"months\"),lp=X0(\"years\");function Xp(){return Q(this.days()/7)}var R0=Math.round,w0={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function hp(M,z,b,p,O){return O.relativeTime(z||1,!!b,M,p)}function Tp(M,z,b,p){var O=M0(M).abs(),A=R0(O.as(\"s\")),o=R0(O.as(\"m\")),n=R0(O.as(\"h\")),t=R0(O.as(\"d\")),B=R0(O.as(\"M\")),v=R0(O.as(\"w\")),i0=R0(O.as(\"y\")),s0=A<=b.ss&&[\"s\",A]||A<b.s&&[\"ss\",A]||o<=1&&[\"m\"]||o<b.m&&[\"mm\",o]||n<=1&&[\"h\"]||n<b.h&&[\"hh\",n]||t<=1&&[\"d\"]||t<b.d&&[\"dd\",t];return b.w!=null&&(s0=s0||v<=1&&[\"w\"]||v<b.w&&[\"ww\",v]),s0=s0||B<=1&&[\"M\"]||B<b.M&&[\"MM\",B]||i0<=1&&[\"y\"]||[\"yy\",i0],s0[2]=z,s0[3]=+M>0,s0[4]=p,hp.apply(null,s0)}function mp(M){return M===void 0?R0:typeof M==\"function\"?(R0=M,!0):!1}function Sp(M,z){return w0[M]===void 0?!1:z===void 0?w0[M]:(w0[M]=z,M===\"s\"&&(w0.ss=z-1),!0)}function gp(M,z){if(!this.isValid())return this.localeData().invalidDate();var b=!1,p=w0,O,A;return typeof M==\"object\"&&(z=M,M=!1),typeof M==\"boolean\"&&(b=M),typeof z==\"object\"&&(p=Object.assign({},w0,z),z.s!=null&&z.ss==null&&(p.ss=z.s-1)),O=this.localeData(),A=Tp(this,!b,p,O),b&&(A=O.pastFuture(+this,A)),O.postformat(A)}var J1=Math.abs;function P0(M){return(M>0)-(M<0)||+M}function B1(){if(!this.isValid())return this.localeData().invalidDate();var M=J1(this._milliseconds)/1e3,z=J1(this._days),b=J1(this._months),p,O,A,o,n=this.asSeconds(),t,B,v,i0;return n?(p=Q(M/60),O=Q(p/60),M%=60,p%=60,A=Q(b/12),b%=12,o=M?M.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",t=n<0?\"-\":\"\",B=P0(this._months)!==P0(n)?\"-\":\"\",v=P0(this._days)!==P0(n)?\"-\":\"\",i0=P0(this._milliseconds)!==P0(n)?\"-\":\"\",t+\"P\"+(A?B+A+\"Y\":\"\")+(b?B+b+\"M\":\"\")+(z?v+z+\"D\":\"\")+(O||p||M?\"T\":\"\")+(O?i0+O+\"H\":\"\")+(p?i0+p+\"M\":\"\")+(M?i0+o+\"S\":\"\")):\"P0D\"}var X=r1.prototype;X.isValid=Bz,X.abs=bp,X.add=pp,X.subtract=Op,X.as=cp,X.asMilliseconds=x2,X.asSeconds=op,X.asMinutes=qp,X.asHours=Wp,X.asDays=dp,X.asWeeks=ap,X.asMonths=ep,X.asQuarters=np,X.asYears=Rp,X.valueOf=ip,X._bubble=Ap,X.clone=rp,X.get=tp,X.milliseconds=fp,X.seconds=Lp,X.minutes=up,X.hours=sp,X.days=Np,X.weeks=Xp,X.months=Bp,X.years=lp,X.humanize=gp,X.toISOString=B1,X.toString=B1,X.toJSON=B1,X.locale=m2,X.localeData=g2,X.toIsoString=U(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",B1),X.lang=S2,i(\"X\",0,0,\"unix\"),i(\"x\",0,0,\"valueOf\"),R(\"x\",W1),R(\"X\",J2),m(\"X\",function(M,z,b){b._d=new Date(parseFloat(M)*1e3)}),m(\"x\",function(M,z,b){b._d=new Date(N(M))});return a.version=\"2.30.1\",J(_),a.fn=d,a.min=Lz,a.max=uz,a.now=sz,a.utc=Y,a.unix=Vb,a.months=Jb,a.isDate=z0,a.locale=L0,a.invalid=b0,a.duration=M0,a.isMoment=F,a.weekdays=$b,a.parseZone=Qb,a.localeData=a0,a.isDuration=t1,a.monthsShort=Zb,a.weekdaysMin=zp,a.defineLocale=P1,a.updateLocale=QM,a.locales=JM,a.weekdaysShort=Mp,a.normalizeUnits=u,a.relativeTimeRounding=mp,a.relativeTimeThreshold=Sp,a.calendarFormat=Gz,a.prototype=d,a.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},a})});var G2=l1((F2,X1)=>{(function(s,a){\"use strict\";typeof X1==\"object\"&&X1.exports?X1.exports=a(Y2()):typeof define==\"function\"&&define.amd?define([\"moment\"],a):a(s.moment)})(F2,function(s){\"use strict\";s.version===void 0&&s.default&&(s=s.default);var a=\"0.5.48\",J={},k={},I={},f={},r0={},w;(!s||typeof s.version!=\"string\")&&c0(\"Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/\");var K=s.version.split(\".\"),z0=+K[0],I0=+K[1];(z0<2||z0===2&&I0<6)&&c0(\"Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js \"+s.version+\". See momentjs.com\");function Z(c){return c>96?c-87:c>64?c-29:c-48}function Y(c){var q=0,W=c.split(\".\"),e=W[0],r=W[1]||\"\",l=1,y,u=0,S=1;for(c.charCodeAt(0)===45&&(q=1,S=-1),q;q<e.length;q++)y=Z(e.charCodeAt(q)),u=60*u+y;for(q=0;q<r.length;q++)l=l/60,y=Z(r.charCodeAt(q)),u+=y*l;return u*S}function h0(c){for(var q=0;q<c.length;q++)c[q]=Y(c[q])}function L(c,q){for(var W=0;W<q;W++)c[W]=Math.round((c[W-1]||0)+c[W]*6e4);c[q-1]=1/0}function T0(c,q){var W=[],e;for(e=0;e<q.length;e++)W[e]=c[q[e]];return W}function m0(c){var q=c.split(\"|\"),W=q[2].split(\" \"),e=q[3].split(\"\"),r=q[4].split(\" \");return h0(W),h0(e),h0(r),L(r,e.length),{name:q[0],abbrs:T0(q[1].split(\" \"),e),offsets:T0(W,e),untils:r,population:q[5]|0}}function b0(c){c&&this._set(m0(c))}function M1(c,q){var W=q.length;if(c<q[0])return 0;if(W>1&&q[W-1]===1/0&&c>=q[W-2])return W-1;if(c>=q[W-1])return-1;for(var e,r=0,l=W-1;l-r>1;)e=Math.floor((r+l)/2),q[e]<=c?r=e:l=e;return l}b0.prototype={_set:function(c){this.name=c.name,this.abbrs=c.abbrs,this.untils=c.untils,this.offsets=c.offsets,this.population=c.population},_index:function(c){var q=+c,W=this.untils,e;if(e=M1(q,W),e>=0)return e},countries:function(){var c=this.name;return Object.keys(I).filter(function(q){return I[q].zones.indexOf(c)!==-1})},parse:function(c){var q=+c,W=this.offsets,e=this.untils,r=e.length-1,l,y,u,S;for(S=0;S<r;S++)if(l=W[S],y=W[S+1],u=W[S&&S-1],l<y&&T.moveAmbiguousForward?l=y:l>u&&T.moveInvalidForward&&(l=u),q<e[S]-l*6e4)return W[S];return W[r]},abbr:function(c){return this.abbrs[this._index(c)]},offset:function(c){return c0(\"zone.offset has been deprecated in favor of zone.utcOffset\"),this.offsets[this._index(c)]},utcOffset:function(c){return this.offsets[this._index(c)]}};function U0(c,q){this.name=c,this.zones=q}function p0(c){var q=c.toTimeString(),W=q.match(/\\([a-z ]+\\)/i);W&&W[0]?(W=W[0].match(/[A-Z]/g),W=W?W.join(\"\"):void 0):(W=q.match(/[A-Z]{3,5}/g),W=W?W[0]:void 0),W===\"GMT\"&&(W=void 0),this.at=+c,this.abbr=W,this.offset=c.getTimezoneOffset()}function t0(c){this.zone=c,this.offsetScore=0,this.abbrScore=0}t0.prototype.scoreOffsetAt=function(c){this.offsetScore+=Math.abs(this.zone.utcOffset(c.at)-c.offset),this.zone.abbr(c.at).replace(/[^A-Z]/g,\"\")!==c.abbr&&this.abbrScore++};function F(c,q){for(var W,e;e=((q.at-c.at)/12e4|0)*6e4;)W=new p0(new Date(c.at+e)),W.offset===c.offset?c=W:q=W;return c}function z1(){var c=new Date().getFullYear()-2,q=new p0(new Date(c,0,1)),W=q.offset,e=[q],r,l,y,u;for(u=1;u<48;u++)y=new Date(c,u,1).getTimezoneOffset(),y!==W&&(l=new p0(new Date(c,u,1)),r=F(q,l),e.push(r),e.push(new p0(new Date(r.at+6e4))),q=l,W=y);for(u=0;u<4;u++)e.push(new p0(new Date(c+u,0,1))),e.push(new p0(new Date(c+u,6,1)));return e}function U(c,q){return c.offsetScore!==q.offsetScore?c.offsetScore-q.offsetScore:c.abbrScore!==q.abbrScore?c.abbrScore-q.abbrScore:c.zone.population!==q.zone.population?q.zone.population-c.zone.population:q.zone.name.localeCompare(c.zone.name)}function b1(c,q){var W,e;for(h0(q),W=0;W<q.length;W++)e=q[W],r0[e]=r0[e]||{},r0[e][c]=!0}function p1(c){var q=c.length,W={},e=[],r={},l,y,u,S;for(l=0;l<q;l++)if(u=c[l].offset,!r.hasOwnProperty(u)){S=r0[u]||{};for(y in S)S.hasOwnProperty(y)&&(W[y]=!0);r[u]=!0}for(l in W)W.hasOwnProperty(l)&&e.push(f[l]);return e}function V(){try{var c=Intl.DateTimeFormat().resolvedOptions().timeZone;if(c&&c.length>3){var q=f[A0(c)];if(q)return q;c0(\"Moment Timezone found \"+c+\" from the Intl api, but did not have that data loaded.\")}}catch{}var W=z1(),e=W.length,r=p1(W),l=[],y,u,S;for(u=0;u<r.length;u++){for(y=new t0(x(r[u]),e),S=0;S<e;S++)y.scoreOffsetAt(W[S]);l.push(y)}return l.sort(U),l.length>0?l[0].zone.name:void 0}function h1(c){return(!w||c)&&(w=V()),w}function A0(c){return(c||\"\").toLowerCase().replace(/\\//g,\"_\")}function S0(c){var q,W,e,r;for(typeof c==\"string\"&&(c=[c]),q=0;q<c.length;q++)e=c[q].split(\"|\"),W=e[0],r=A0(W),J[r]=c[q],f[r]=W,b1(r,e[2].split(\" \"))}function x(c,q){c=A0(c);var W=J[c],e;return W instanceof b0?W:typeof W==\"string\"?(W=new b0(W),J[c]=W,W):k[c]&&q!==x&&(e=x(k[c],x))?(W=J[c]=new b0,W._set(e),W.name=f[c],W):null}function T1(){var c,q=[];for(c in f)f.hasOwnProperty(c)&&(J[c]||J[k[c]])&&f[c]&&q.push(f[c]);return q.sort()}function m1(){return Object.keys(I)}function G(c){var q,W,e,r;for(typeof c==\"string\"&&(c=[c]),q=0;q<c.length;q++)W=c[q].split(\"|\"),e=A0(W[0]),r=A0(W[1]),k[e]=r,f[e]=W[0],k[r]=e,f[r]=W[1]}function x0(c){var q,W,e,r;if(!(!c||!c.length))for(q=0;q<c.length;q++)r=c[q].split(\"|\"),W=r[0].toUpperCase(),e=r[1].split(\" \"),I[W]=new U0(W,e)}function g0(c){return c=c.toUpperCase(),I[c]||null}function H0(c,q){if(c=g0(c),!c)return null;var W=c.zones.sort();return q?W.map(function(e){var r=x(e);return{name:e,offset:r.utcOffset(new Date)}}):W}function f0(c){S0(c.zones),G(c.links),x0(c.countries),T.dataVersion=c.version}function i(c){return i.didShowError||(i.didShowError=!0,c0(\"moment.tz.zoneExists('\"+c+\"') has been deprecated in favor of !moment.tz.zone('\"+c+\"')\")),!!x(c)}function Y0(c){var q=c._f===\"X\"||c._f===\"x\";return!!(c._a&&c._tzm===void 0&&!q)}function c0(c){typeof console<\"u\"&&typeof console.error==\"function\"&&console.error(c)}function T(c){var q=Array.prototype.slice.call(arguments,0,-1),W=arguments[arguments.length-1],e=s.utc.apply(null,q),r;return!s.isMoment(c)&&Y0(e)&&(r=x(W))&&e.add(r.parse(e),\"minutes\"),e.tz(W),e}T.version=a,T.dataVersion=\"\",T._zones=J,T._links=k,T._names=f,T._countries=I,T.add=S0,T.link=G,T.load=f0,T.zone=x,T.zoneExists=i,T.guess=h1,T.names=T1,T.Zone=b0,T.unpack=m0,T.unpackBase60=Y,T.needsOffset=Y0,T.moveInvalidForward=!0,T.moveAmbiguousForward=!1,T.countries=m1,T.zonesForCountry=H0;var H=s.fn;s.tz=T,s.defaultZone=null,s.updateOffset=function(c,q){var W=s.defaultZone,e;if(c._z===void 0&&(W&&Y0(c)&&!c._isUTC&&c.isValid()&&(c._d=s.utc(c._a)._d,c.utc().add(W.parse(c),\"minutes\")),c._z=W),c._z)if(e=c._z.utcOffset(c),Math.abs(e)<16&&(e=e/60),c.utcOffset!==void 0){var r=c._z;c.utcOffset(-e,q),c._z=r}else c.zone(e,q)},H.tz=function(c,q){if(c){if(typeof c!=\"string\")throw new Error(\"Time zone name must be a string, got \"+c+\" [\"+typeof c+\"]\");return this._z=x(c),this._z?s.updateOffset(this,q):c0(\"Moment Timezone has no data for \"+c+\". See http://momentjs.com/timezone/docs/#/data-loading/.\"),this}if(this._z)return this._z.name};function O1(c){return function(){return this._z?this._z.abbr(this):c.call(this)}}function A1(c){return function(){return this._z=null,c.apply(this,arguments)}}function S1(c){return function(){return arguments.length>0&&(this._z=null),c.apply(this,arguments)}}H.zoneName=O1(H.zoneName),H.zoneAbbr=O1(H.zoneAbbr),H.utc=A1(H.utc),H.local=A1(H.local),H.utcOffset=S1(H.utcOffset),s.tz.setDefault=function(c){return(z0<2||z0===2&&I0<9)&&c0(\"Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js \"+s.version+\".\"),s.defaultZone=c?x(c):null,s};var N0=s.momentProperties;return Object.prototype.toString.call(N0)===\"[object Array]\"?(N0.push(\"_z\"),N0.push(\"_a\")):N0&&(N0._z=null),s})});var j2=l1((kp,_p)=>{_p.exports={version:\"2025b\",zones:[\"Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5\",\"Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5\",\"Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5\",\"Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6\",\"Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4\",\"Africa/Maputo|LMT CAT|-2a.i -20|01|-2sw2a.i|26e5\",\"Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6\",\"Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5\",\"Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3\",\"Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4\",\"Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5\",\"Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|\",\"Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5\",\"Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5\",\"Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5\",\"Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|\",\"Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5\",\"Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5\",\"Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326\",\"America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4\",\"America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5\",\"America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4\",\"America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|\",\"America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|\",\"America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|\",\"America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|\",\"America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|\",\"America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|\",\"America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|\",\"America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|\",\"America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0|28e5\",\"America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5\",\"America/Bahia_Banderas|LMT MST CST MDT CDT|71 70 60 60 50|01213121313131313131313131313131313142424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3\",\"America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5\",\"America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4\",\"America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5\",\"America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3\",\"America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2\",\"America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5\",\"America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4\",\"America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2\",\"America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|LMT CST EST CDT EDT|5L.4 60 50 50 40|01213132431313131313131313131313131313131312|-1UQG0 2q3C0 2tx0 wgP0 1lb0 14p0 1lb0 14o0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5\",\"America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3\",\"America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\",\"America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|01213124242313131313131313131313131313131313131313131313131321313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5\",\"America/Coyhaique|LMT SMT -05 -04 -03|4M.g 4G.J 50 40 30|012131323232323232323434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvb.I MJbS.t fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0|\",\"America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5\",\"America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4\",\"America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8\",\"America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3\",\"America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2\",\"America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5\",\"America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5\",\"America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5\",\"America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3\",\"America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5\",\"America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mp0 8lz0 SN0 1cL0 pHB0 83r0 AU0 5MN0 1Rz0 38N0 Wn0 1qP0 11z0 1o10 11z0 3NA0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5\",\"America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5\",\"America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3\",\"America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3\",\"America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2\",\"America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2\",\"America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5\",\"America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5\",\"America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4\",\"America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4\",\"America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5\",\"America/Hermosillo|LMT MST CST MDT|7n.Q 70 60 60|01213121313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0|64e4\",\"America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2\",\"America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2\",\"America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4\",\"America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3\",\"America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5\",\"America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6\",\"America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6\",\"America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4\",\"America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5\",\"America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5\",\"America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4\",\"America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4\",\"America/Mazatlan|LMT MST CST MDT|75.E 70 60 60|01213121313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4\",\"America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2\",\"America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q3C0 24n0 wG10 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5\",\"America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2\",\"America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\",\"America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mxUf.k 2LHcf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2\",\"America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3\",\"America/Monterrey|LMT MST CST MDT CDT|6F.g 70 60 60 50|012131242424242424242424242424242424242424242424242424242424242|-1UQG0 dep0 8lz0 16p0 11z0 1dd0 2gmp0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5\",\"America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1qL0 11B0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5\",\"America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6\",\"America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2\",\"America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2\",\"America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|\",\"America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3\",\"America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4\",\"America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4\",\"America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4\",\"America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|\",\"America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4\",\"America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2\",\"America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5\",\"America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4\",\"America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229\",\"America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4\",\"America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5\",\"America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5\",\"America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|012132323232323232323232323232323232323232323232323232323232323232323232323232323232323232121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 2pA0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452\",\"America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2\",\"America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4\",\"America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3\",\"America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5\",\"America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656\",\"America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642\",\"Antarctica/Casey|-00 +08 +11|0 -80 -b0|012121212121212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1 13bX|10\",\"Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70\",\"Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4\",\"Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1\",\"Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60\",\"Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\",\"Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"Antarctica/Rothera|-00 -03|0 30|01|gOo0|130\",\"Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5\",\"Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40\",\"Antarctica/Vostok|-00 +07 +05|0 -70 -50|01012|-tjA0 1rWh0 1Nj0 1aTv0|25\",\"Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5\",\"Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|0123232323232323232323212323232323232323232323232321|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 L4m0|15e5\",\"Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5\",\"Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3\",\"Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4\",\"Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4\",\"Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4\",\"Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|\",\"Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5\",\"Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4\",\"Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6\",\"Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|\",\"Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5\",\"Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4\",\"Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4\",\"Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6\",\"Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4\",\"Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6\",\"Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5\",\"Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6\",\"Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le80 1dnX0 1nfA0 Xld0|19e4\",\"Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5\",\"Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4\",\"Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|\",\"Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5\",\"Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4\",\"Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5c0 aVX0 BAM0|90e5\",\"Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5\",\"Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6\",\"Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4\",\"Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4\",\"Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5\",\"Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4\",\"Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6\",\"Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5\",\"Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5\",\"Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2\",\"Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5\",\"Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5\",\"Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4\",\"Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3\",\"Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5\",\"Asia/Manila|LMT LMT PST PDT JST|fU.8 -83.Q -80 -90 -90|012323432323232|-54m83.Q 2d8A3.Q 1urM0 un0 bW10 nb0 7qo0 1MM0 klB0 lz0 TwN0 1bb0 uNB0 rz0|24e6\",\"Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4\",\"Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4\",\"Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5\",\"Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5\",\"Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4\",\"Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4\",\"Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5\",\"Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 Mv90|\",\"Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4\",\"Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5\",\"Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4\",\"Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4\",\"Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6\",\"Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2\",\"Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5\",\"Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5\",\"Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5\",\"Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 Dc0 1iMu JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\",\"Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3\",\"Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6\",\"Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5\",\"Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2\",\"Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4\",\"Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5\",\"Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5\",\"Atlantic/Azores|LMT HMT -02 -01 +00 WET WEST|1G.E 1S.w 20 10 0 0 -10|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232323434343434343434343434356434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 CT90 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 Ap0 An0 wo0 Eo0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4\",\"Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3\",\"Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4\",\"Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4\",\"Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3\",\"Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 BJ90 1a00 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4\",\"Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30\",\"Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2\",\"Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5\",\"Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3\",\"Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4\",\"Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4\",\"Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368\",\"Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10\",\"Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5\",\"Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5\",\"Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5\",\"Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2\",\"Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5\",\"Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Etc/GMT-0|GMT|0|0||\",\"Etc/GMT-1|+01|-10|0||\",\"Etc/GMT-10|+10|-a0|0||\",\"Etc/GMT-11|+11|-b0|0||\",\"Etc/GMT-12|+12|-c0|0||\",\"Etc/GMT-13|+13|-d0|0||\",\"Etc/GMT-14|+14|-e0|0||\",\"Etc/GMT-2|+02|-20|0||\",\"Etc/GMT-3|+03|-30|0||\",\"Etc/GMT-4|+04|-40|0||\",\"Etc/GMT-5|+05|-50|0||\",\"Etc/GMT-6|+06|-60|0||\",\"Etc/GMT-7|+07|-70|0||\",\"Etc/GMT-8|+08|-80|0||\",\"Etc/GMT-9|+09|-90|0||\",\"Etc/GMT+1|-01|10|0||\",\"Etc/GMT+10|-10|a0|0||\",\"Etc/GMT+11|-11|b0|0||\",\"Etc/GMT+12|-12|c0|0||\",\"Etc/GMT+2|-02|20|0||\",\"Etc/GMT+3|-03|30|0||\",\"Etc/GMT+4|-04|40|0||\",\"Etc/GMT+5|-05|50|0||\",\"Etc/GMT+6|-06|60|0||\",\"Etc/GMT+7|-07|70|0||\",\"Etc/GMT+8|-08|80|0||\",\"Etc/GMT+9|-09|90|0||\",\"Etc/UTC|UTC|0|0||\",\"Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3\",\"Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5\",\"Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6\",\"Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5\",\"Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5\",\"Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5\",\"Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4\",\"Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4\",\"Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3\",\"Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4\",\"Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5\",\"Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4\",\"Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121212124121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 oiK0 1cM0 1cM0 1fB0 1cM0 1cM0 1cM0 1fA0 1a00 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5\",\"Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4\",\"Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5\",\"Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6\",\"Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6\",\"Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4\",\"Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5\",\"Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5\",\"Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|\",\"Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5\",\"Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4\",\"Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4\",\"Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5\",\"Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5\",\"Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4\",\"Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5\",\"Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5\",\"Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4\",\"Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2\",\"Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4\",\"Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4\",\"Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3\",\"Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3\",\"Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4\",\"Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3\",\"Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1\",\"Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483\",\"Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4\",\"Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3\",\"Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3\",\"Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125\",\"Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4\",\"Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4\",\"Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2\",\"Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2\",\"Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2\",\"Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2\",\"Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3\",\"Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2\",\"Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3\",\"Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3\",\"Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56\",\"Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3\",\"Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4\",\"Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3\"],links:[\"Africa/Abidjan|Africa/Accra\",\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|Atlantic/Reykjavik\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Abidjan|Iceland\",\"Africa/Cairo|Egypt\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|US/Alaska\",\"America/Argentina/Buenos_Aires|America/Buenos_Aires\",\"America/Argentina/Catamarca|America/Argentina/ComodRivadavia\",\"America/Argentina/Catamarca|America/Catamarca\",\"America/Argentina/Cordoba|America/Cordoba\",\"America/Argentina/Cordoba|America/Rosario\",\"America/Argentina/Jujuy|America/Jujuy\",\"America/Argentina/Mendoza|America/Mendoza\",\"America/Chicago|CST6CDT\",\"America/Chicago|US/Central\",\"America/Denver|America/Shiprock\",\"America/Denver|MST7MDT\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Detroit|US/Michigan\",\"America/Edmonton|America/Yellowknife\",\"America/Edmonton|Canada/Mountain\",\"America/Fort_Wayne|America/Indiana/Indianapolis\",\"America/Fort_Wayne|America/Indianapolis\",\"America/Fort_Wayne|US/East-Indiana\",\"America/Godthab|America/Nuuk\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/Indiana/Knox|America/Knox_IN\",\"America/Indiana/Knox|US/Indiana-Starke\",\"America/Iqaluit|America/Pangnirtung\",\"America/Jamaica|Jamaica\",\"America/Kentucky/Louisville|America/Louisville\",\"America/Los_Angeles|PST8PDT\",\"America/Los_Angeles|US/Pacific\",\"America/Manaus|Brazil/West\",\"America/Mazatlan|Mexico/BajaSur\",\"America/Mexico_City|Mexico/General\",\"America/New_York|EST5EDT\",\"America/New_York|US/Eastern\",\"America/Noronha|Brazil/DeNoronha\",\"America/Panama|America/Atikokan\",\"America/Panama|America/Cayman\",\"America/Panama|America/Coral_Harbour\",\"America/Panama|EST\",\"America/Phoenix|America/Creston\",\"America/Phoenix|MST\",\"America/Phoenix|US/Arizona\",\"America/Puerto_Rico|America/Anguilla\",\"America/Puerto_Rico|America/Antigua\",\"America/Puerto_Rico|America/Aruba\",\"America/Puerto_Rico|America/Blanc-Sablon\",\"America/Puerto_Rico|America/Curacao\",\"America/Puerto_Rico|America/Dominica\",\"America/Puerto_Rico|America/Grenada\",\"America/Puerto_Rico|America/Guadeloupe\",\"America/Puerto_Rico|America/Kralendijk\",\"America/Puerto_Rico|America/Lower_Princes\",\"America/Puerto_Rico|America/Marigot\",\"America/Puerto_Rico|America/Montserrat\",\"America/Puerto_Rico|America/Port_of_Spain\",\"America/Puerto_Rico|America/St_Barthelemy\",\"America/Puerto_Rico|America/St_Kitts\",\"America/Puerto_Rico|America/St_Lucia\",\"America/Puerto_Rico|America/St_Thomas\",\"America/Puerto_Rico|America/St_Vincent\",\"America/Puerto_Rico|America/Tortola\",\"America/Puerto_Rico|America/Virgin\",\"America/Regina|Canada/Saskatchewan\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Tijuana|America/Ensenada\",\"America/Tijuana|America/Santa_Isabel\",\"America/Tijuana|Mexico/BajaNorte\",\"America/Toronto|America/Montreal\",\"America/Toronto|America/Nassau\",\"America/Toronto|America/Nipigon\",\"America/Toronto|America/Thunder_Bay\",\"America/Toronto|Canada/Eastern\",\"America/Vancouver|Canada/Pacific\",\"America/Whitehorse|Canada/Yukon\",\"America/Winnipeg|America/Rainy_River\",\"America/Winnipeg|Canada/Central\",\"Asia/Ashgabat|Asia/Ashkhabad\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Bangkok|Indian/Christmas\",\"Asia/Brunei|Asia/Kuching\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Dubai|Indian/Mahe\",\"Asia/Dubai|Indian/Reunion\",\"Asia/Ho_Chi_Minh|Asia/Saigon\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Macau|Asia/Macao\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Nicosia|Europe/Nicosia\",\"Asia/Qatar|Asia/Bahrain\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Rangoon|Indian/Cocos\",\"Asia/Riyadh|Antarctica/Syowa\",\"Asia/Riyadh|Asia/Aden\",\"Asia/Riyadh|Asia/Kuwait\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|PRC\",\"Asia/Taipei|ROC\",\"Asia/Tehran|Iran\",\"Asia/Thimphu|Asia/Thimbu\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Choibalsan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Urumqi|Asia/Kashgar\",\"Atlantic/Faroe|Atlantic/Faeroe\",\"Australia/Adelaide|Australia/South\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Broken_Hill|Australia/Yancowinna\",\"Australia/Darwin|Australia/North\",\"Australia/Hobart|Australia/Currie\",\"Australia/Hobart|Australia/Tasmania\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Melbourne|Australia/Victoria\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/NSW\",\"Etc/GMT-0|Etc/GMT\",\"Etc/GMT-0|Etc/GMT+0\",\"Etc/GMT-0|Etc/GMT0\",\"Etc/GMT-0|Etc/Greenwich\",\"Etc/GMT-0|GMT\",\"Etc/GMT-0|GMT+0\",\"Etc/GMT-0|GMT-0\",\"Etc/GMT-0|GMT0\",\"Etc/GMT-0|Greenwich\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Athens|EET\",\"Europe/Belgrade|Europe/Ljubljana\",\"Europe/Belgrade|Europe/Podgorica\",\"Europe/Belgrade|Europe/Sarajevo\",\"Europe/Belgrade|Europe/Skopje\",\"Europe/Belgrade|Europe/Zagreb\",\"Europe/Berlin|Arctic/Longyearbyen\",\"Europe/Berlin|Atlantic/Jan_Mayen\",\"Europe/Berlin|Europe/Copenhagen\",\"Europe/Berlin|Europe/Oslo\",\"Europe/Berlin|Europe/Stockholm\",\"Europe/Brussels|CET\",\"Europe/Brussels|Europe/Amsterdam\",\"Europe/Brussels|Europe/Luxembourg\",\"Europe/Brussels|MET\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Helsinki|Europe/Mariehamn\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Kiev|Europe/Kyiv\",\"Europe/Kiev|Europe/Uzhgorod\",\"Europe/Kiev|Europe/Zaporozhye\",\"Europe/Lisbon|Portugal\",\"Europe/Lisbon|WET\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|W-SU\",\"Europe/Paris|Europe/Monaco\",\"Europe/Prague|Europe/Bratislava\",\"Europe/Rome|Europe/San_Marino\",\"Europe/Rome|Europe/Vatican\",\"Europe/Warsaw|Poland\",\"Europe/Zurich|Europe/Busingen\",\"Europe/Zurich|Europe/Vaduz\",\"Indian/Maldives|Indian/Kerguelen\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Enderbury|Pacific/Kanton\",\"Pacific/Guadalcanal|Pacific/Pohnpei\",\"Pacific/Guadalcanal|Pacific/Ponape\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|HST\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kwajalein|Kwajalein\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Port_Moresby|Antarctica/DumontDUrville\",\"Pacific/Port_Moresby|Pacific/Chuuk\",\"Pacific/Port_Moresby|Pacific/Truk\",\"Pacific/Port_Moresby|Pacific/Yap\",\"Pacific/Tarawa|Pacific/Funafuti\",\"Pacific/Tarawa|Pacific/Majuro\",\"Pacific/Tarawa|Pacific/Wake\",\"Pacific/Tarawa|Pacific/Wallis\"],countries:[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Puerto_Rico America/Antigua\",\"AI|America/Puerto_Rico America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Asia/Singapore Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla Asia/Tokyo\",\"AW|America/Puerto_Rico America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Puerto_Rico America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Kuching Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Puerto_Rico America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Toronto America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston\",\"CC|Asia/Yangon Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Coyhaique America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Puerto_Rico America/Curacao\",\"CX|Asia/Bangkok Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Berlin Europe/Copenhagen\",\"DM|America/Puerto_Rico America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Puerto_Rico America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Abidjan Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Puerto_Rico America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Africa/Abidjan Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Puerto_Rico America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Puerto_Rico America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Brussels Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Paris Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Puerto_Rico America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Puerto_Rico America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana\",\"MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Brussels Europe/Amsterdam\",\"NO|Europe/Berlin Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Asia/Dubai Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Asia/Dubai Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Berlin Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Berlin Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Puerto_Rico America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Asia/Dubai Indian/Maldives Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Puerto_Rico America/Port_of_Spain\",\"TV|Pacific/Tarawa Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kyiv\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Puerto_Rico America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Puerto_Rico America/Tortola\",\"VI|America/Puerto_Rico America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Tarawa Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}});var yp=l1((wp,K2)=>{var Ep=K2.exports=G2();Ep.tz.load(j2())});export default yp();\n/*! Bundled license information:\n\nmoment/moment.js:\n  (*! moment.js *)\n  (*! version : 2.30.1 *)\n  (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)\n  (*! license : MIT *)\n  (*! momentjs.com *)\n\nmoment-timezone/moment-timezone.js:\n  (*! moment-timezone.js *)\n  (*! version : 0.5.48 *)\n  (*! Copyright (c) JS Foundation and other contributors *)\n  (*! license : MIT *)\n  (*! github.com/moment/moment-timezone *)\n*/\n"
  },
  {
    "path": "modules/system/assets/vendor/moment/moment.esm.js",
    "content": "var Ys=(P=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(P,{get:(l,$e)=>(typeof require<\"u\"?require:l)[$e]}):P)(function(P){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+P+'\" is not supported')});var pi=(P,l)=>()=>(l||P((l={exports:{}}).exports,l),l.exports);var Oi=pi((Tt,me)=>{(function(P,l){typeof Tt==\"object\"&&typeof me<\"u\"?me.exports=l():typeof define==\"function\"&&define.amd?define(l):P.moment=l()})(Tt,function(){\"use strict\";var P;function l(){return P.apply(null,arguments)}function $e(e){P=e}function R(e){return e instanceof Array||Object.prototype.toString.call(e)===\"[object Array]\"}function te(e){return e!=null&&Object.prototype.toString.call(e)===\"[object Object]\"}function w(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function qe(e){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(e).length===0;var t;for(t in e)if(w(e,t))return!1;return!0}function T(e){return e===void 0}function A(e){return typeof e==\"number\"||Object.prototype.toString.call(e)===\"[object Number]\"}function _e(e){return e instanceof Date||Object.prototype.toString.call(e)===\"[object Date]\"}function bt(e,t){var s=[],r,a=e.length;for(r=0;r<a;++r)s.push(t(e[r],r));return s}function Q(e,t){for(var s in t)w(t,s)&&(e[s]=t[s]);return w(t,\"toString\")&&(e.toString=t.toString),w(t,\"valueOf\")&&(e.valueOf=t.valueOf),e}function U(e,t,s,r){return ts(e,t,s,r,!0).utc()}function ps(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function c(e){return e._pf==null&&(e._pf=ps()),e._pf}var Be;Array.prototype.some?Be=Array.prototype.some:Be=function(e){var t=Object(this),s=t.length>>>0,r;for(r=0;r<s;r++)if(r in t&&e.call(this,t[r],r,t))return!0;return!1};function Je(e){var t=null,s=!1,r=e._d&&!isNaN(e._d.getTime());if(r&&(t=c(e),s=Be.call(t.parsedDateParts,function(a){return a!=null}),r=t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&s),e._strict&&(r=r&&t.charsLeftOver===0&&t.unusedTokens.length===0&&t.bigHour===void 0)),Object.isFrozen==null||!Object.isFrozen(e))e._isValid=r;else return r;return e._isValid}function Oe(e){var t=U(NaN);return e!=null?Q(c(t),e):c(t).userInvalidated=!0,t}var xt=l.momentProperties=[],Qe=!1;function Xe(e,t){var s,r,a,n=xt.length;if(T(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),T(t._i)||(e._i=t._i),T(t._f)||(e._f=t._f),T(t._l)||(e._l=t._l),T(t._strict)||(e._strict=t._strict),T(t._tzm)||(e._tzm=t._tzm),T(t._isUTC)||(e._isUTC=t._isUTC),T(t._offset)||(e._offset=t._offset),T(t._pf)||(e._pf=c(t)),T(t._locale)||(e._locale=t._locale),n>0)for(s=0;s<n;s++)r=xt[s],a=t[r],T(a)||(e[r]=a);return e}function ye(e){Xe(this,e),this._d=new Date(e._d!=null?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),Qe===!1&&(Qe=!0,l.updateOffset(this),Qe=!1)}function F(e){return e instanceof ye||e!=null&&e._isAMomentObject!=null}function Nt(e){l.suppressDeprecationWarnings===!1&&typeof console<\"u\"&&console.warn&&console.warn(\"Deprecation warning: \"+e)}function x(e,t){var s=!0;return Q(function(){if(l.deprecationHandler!=null&&l.deprecationHandler(null,e),s){var r=[],a,n,i,u=arguments.length;for(n=0;n<u;n++){if(a=\"\",typeof arguments[n]==\"object\"){a+=`\n[`+n+\"] \";for(i in arguments[0])w(arguments[0],i)&&(a+=i+\": \"+arguments[0][i]+\", \");a=a.slice(0,-2)}else a=arguments[n];r.push(a)}Nt(e+`\nArguments: `+Array.prototype.slice.call(r).join(\"\")+`\n`+new Error().stack),s=!1}return t.apply(this,arguments)},t)}var Wt={};function Pt(e,t){l.deprecationHandler!=null&&l.deprecationHandler(e,t),Wt[e]||(Nt(t),Wt[e]=!0)}l.suppressDeprecationWarnings=!1,l.deprecationHandler=null;function I(e){return typeof Function<\"u\"&&e instanceof Function||Object.prototype.toString.call(e)===\"[object Function]\"}function Os(e){var t,s;for(s in e)w(e,s)&&(t=e[s],I(t)?this[s]=t:this[\"_\"+s]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)}function Ke(e,t){var s=Q({},e),r;for(r in t)w(t,r)&&(te(e[r])&&te(t[r])?(s[r]={},Q(s[r],e[r]),Q(s[r],t[r])):t[r]!=null?s[r]=t[r]:delete s[r]);for(r in e)w(e,r)&&!w(t,r)&&te(e[r])&&(s[r]=Q({},s[r]));return s}function et(e){e!=null&&this.set(e)}var tt;Object.keys?tt=Object.keys:tt=function(e){var t,s=[];for(t in e)w(e,t)&&s.push(t);return s};var Ts={sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"};function bs(e,t,s){var r=this._calendar[e]||this._calendar.sameElse;return I(r)?r.call(t,s):r}function H(e,t,s){var r=\"\"+Math.abs(e),a=t-r.length,n=e>=0;return(n?s?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,a)).toString().substr(1)+r}var st=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Te=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,rt={},ne={};function h(e,t,s,r){var a=r;typeof r==\"string\"&&(a=function(){return this[r]()}),e&&(ne[e]=a),t&&(ne[t[0]]=function(){return H(a.apply(this,arguments),t[1],t[2])}),s&&(ne[s]=function(){return this.localeData().ordinal(a.apply(this,arguments),e)})}function xs(e){return e.match(/\\[[\\s\\S]/)?e.replace(/^\\[|\\]$/g,\"\"):e.replace(/\\\\/g,\"\")}function Ns(e){var t=e.match(st),s,r;for(s=0,r=t.length;s<r;s++)ne[t[s]]?t[s]=ne[t[s]]:t[s]=xs(t[s]);return function(a){var n=\"\",i;for(i=0;i<r;i++)n+=I(t[i])?t[i].call(a,e):t[i];return n}}function be(e,t){return e.isValid()?(t=Rt(t,e.localeData()),rt[t]=rt[t]||Ns(t),rt[t](e)):e.localeData().invalidDate()}function Rt(e,t){var s=5;function r(a){return t.longDateFormat(a)||a}for(Te.lastIndex=0;s>=0&&Te.test(e);)e=e.replace(Te,r),Te.lastIndex=0,s-=1;return e}var Ws={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};function Ps(e){var t=this._longDateFormat[e],s=this._longDateFormat[e.toUpperCase()];return t||!s?t:(this._longDateFormat[e]=s.match(st).map(function(r){return r===\"MMMM\"||r===\"MM\"||r===\"DD\"||r===\"dddd\"?r.slice(1):r}).join(\"\"),this._longDateFormat[e])}var Rs=\"Invalid date\";function Fs(){return this._invalidDate}var Cs=\"%d\",Ls=/\\d{1,2}/;function Us(e){return this._ordinal.replace(\"%d\",e)}var Is={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",w:\"a week\",ww:\"%d weeks\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function Hs(e,t,s,r){var a=this._relativeTime[s];return I(a)?a(e,t,s,r):a.replace(/%d/i,e)}function Es(e,t){var s=this._relativeTime[e>0?\"future\":\"past\"];return I(s)?s(t):s.replace(/%s/i,t)}var Ft={D:\"date\",dates:\"date\",date:\"date\",d:\"day\",days:\"day\",day:\"day\",e:\"weekday\",weekdays:\"weekday\",weekday:\"weekday\",E:\"isoWeekday\",isoweekdays:\"isoWeekday\",isoweekday:\"isoWeekday\",DDD:\"dayOfYear\",dayofyears:\"dayOfYear\",dayofyear:\"dayOfYear\",h:\"hour\",hours:\"hour\",hour:\"hour\",ms:\"millisecond\",milliseconds:\"millisecond\",millisecond:\"millisecond\",m:\"minute\",minutes:\"minute\",minute:\"minute\",M:\"month\",months:\"month\",month:\"month\",Q:\"quarter\",quarters:\"quarter\",quarter:\"quarter\",s:\"second\",seconds:\"second\",second:\"second\",gg:\"weekYear\",weekyears:\"weekYear\",weekyear:\"weekYear\",GG:\"isoWeekYear\",isoweekyears:\"isoWeekYear\",isoweekyear:\"isoWeekYear\",w:\"week\",weeks:\"week\",week:\"week\",W:\"isoWeek\",isoweeks:\"isoWeek\",isoweek:\"isoWeek\",y:\"year\",years:\"year\",year:\"year\"};function N(e){return typeof e==\"string\"?Ft[e]||Ft[e.toLowerCase()]:void 0}function at(e){var t={},s,r;for(r in e)w(e,r)&&(s=N(r),s&&(t[s]=e[r]));return t}var As={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function Vs(e){var t=[],s;for(s in e)w(e,s)&&t.push({unit:s,priority:As[s]});return t.sort(function(r,a){return r.priority-a.priority}),t}var Ct=/\\d/,b=/\\d\\d/,Lt=/\\d{3}/,nt=/\\d{4}/,xe=/[+-]?\\d{6}/,g=/\\d\\d?/,Ut=/\\d\\d\\d\\d?/,It=/\\d\\d\\d\\d\\d\\d?/,Ne=/\\d{1,3}/,it=/\\d{1,4}/,We=/[+-]?\\d{1,6}/,ie=/\\d+/,Pe=/[+-]?\\d+/,Gs=/Z|[+-]\\d\\d:?\\d\\d/gi,Re=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,js=/[+-]?\\d+(\\.\\d{1,3})?/,we=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,oe=/^[1-9]\\d?/,ot=/^([1-9]\\d|\\d)/,Fe;Fe={};function d(e,t,s){Fe[e]=I(t)?t:function(r,a){return r&&s?s:t}}function zs(e,t){return w(Fe,e)?Fe[e](t._strict,t._locale):new RegExp(Zs(e))}function Zs(e){return V(e.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(t,s,r,a,n){return s||r||a||n}))}function V(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function W(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function m(e){var t=+e,s=0;return t!==0&&isFinite(t)&&(s=W(t)),s}var lt={};function M(e,t){var s,r=t,a;for(typeof e==\"string\"&&(e=[e]),A(t)&&(r=function(n,i){i[t]=m(n)}),a=e.length,s=0;s<a;s++)lt[e[s]]=r}function ke(e,t){M(e,function(s,r,a,n){a._w=a._w||{},t(s,a._w,a,n)})}function $s(e,t,s){t!=null&&w(lt,e)&&lt[e](t,s._a,s,e)}function Ce(e){return e%4===0&&e%100!==0||e%400===0}var p=0,G=1,E=2,Y=3,C=4,j=5,se=6,qs=7,Bs=8;h(\"Y\",0,0,function(){var e=this.year();return e<=9999?H(e,4):\"+\"+e}),h(0,[\"YY\",2],0,function(){return this.year()%100}),h(0,[\"YYYY\",4],0,\"year\"),h(0,[\"YYYYY\",5],0,\"year\"),h(0,[\"YYYYYY\",6,!0],0,\"year\"),d(\"Y\",Pe),d(\"YY\",g,b),d(\"YYYY\",it,nt),d(\"YYYYY\",We,xe),d(\"YYYYYY\",We,xe),M([\"YYYYY\",\"YYYYYY\"],p),M(\"YYYY\",function(e,t){t[p]=e.length===2?l.parseTwoDigitYear(e):m(e)}),M(\"YY\",function(e,t){t[p]=l.parseTwoDigitYear(e)}),M(\"Y\",function(e,t){t[p]=parseInt(e,10)});function Me(e){return Ce(e)?366:365}l.parseTwoDigitYear=function(e){return m(e)+(m(e)>68?1900:2e3)};var Ht=le(\"FullYear\",!0);function Js(){return Ce(this.year())}function le(e,t){return function(s){return s!=null?(Et(this,e,s),l.updateOffset(this,t),this):ge(this,e)}}function ge(e,t){if(!e.isValid())return NaN;var s=e._d,r=e._isUTC;switch(t){case\"Milliseconds\":return r?s.getUTCMilliseconds():s.getMilliseconds();case\"Seconds\":return r?s.getUTCSeconds():s.getSeconds();case\"Minutes\":return r?s.getUTCMinutes():s.getMinutes();case\"Hours\":return r?s.getUTCHours():s.getHours();case\"Date\":return r?s.getUTCDate():s.getDate();case\"Day\":return r?s.getUTCDay():s.getDay();case\"Month\":return r?s.getUTCMonth():s.getMonth();case\"FullYear\":return r?s.getUTCFullYear():s.getFullYear();default:return NaN}}function Et(e,t,s){var r,a,n,i,u;if(!(!e.isValid()||isNaN(s))){switch(r=e._d,a=e._isUTC,t){case\"Milliseconds\":return void(a?r.setUTCMilliseconds(s):r.setMilliseconds(s));case\"Seconds\":return void(a?r.setUTCSeconds(s):r.setSeconds(s));case\"Minutes\":return void(a?r.setUTCMinutes(s):r.setMinutes(s));case\"Hours\":return void(a?r.setUTCHours(s):r.setHours(s));case\"Date\":return void(a?r.setUTCDate(s):r.setDate(s));case\"FullYear\":break;default:return}n=s,i=e.month(),u=e.date(),u=u===29&&i===1&&!Ce(n)?28:u,a?r.setUTCFullYear(n,i,u):r.setFullYear(n,i,u)}}function Qs(e){return e=N(e),I(this[e])?this[e]():this}function Xs(e,t){if(typeof e==\"object\"){e=at(e);var s=Vs(e),r,a=s.length;for(r=0;r<a;r++)this[s[r].unit](e[s[r].unit])}else if(e=N(e),I(this[e]))return this[e](t);return this}function Ks(e,t){return(e%t+t)%t}var v;Array.prototype.indexOf?v=Array.prototype.indexOf:v=function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1};function ut(e,t){if(isNaN(e)||isNaN(t))return NaN;var s=Ks(t,12);return e+=(t-s)/12,s===1?Ce(e)?29:28:31-s%7%2}h(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),h(\"MMM\",0,0,function(e){return this.localeData().monthsShort(this,e)}),h(\"MMMM\",0,0,function(e){return this.localeData().months(this,e)}),d(\"M\",g,oe),d(\"MM\",g,b),d(\"MMM\",function(e,t){return t.monthsShortRegex(e)}),d(\"MMMM\",function(e,t){return t.monthsRegex(e)}),M([\"M\",\"MM\"],function(e,t){t[G]=m(e)-1}),M([\"MMM\",\"MMMM\"],function(e,t,s,r){var a=s._locale.monthsParse(e,r,s._strict);a!=null?t[G]=a:c(s).invalidMonth=e});var er=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),At=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),Vt=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,tr=we,sr=we;function rr(e,t){return e?R(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Vt).test(t)?\"format\":\"standalone\"][e.month()]:R(this._months)?this._months:this._months.standalone}function ar(e,t){return e?R(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Vt.test(t)?\"format\":\"standalone\"][e.month()]:R(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function nr(e,t,s){var r,a,n,i=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)n=U([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(n,\"\").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(n,\"\").toLocaleLowerCase();return s?t===\"MMM\"?(a=v.call(this._shortMonthsParse,i),a!==-1?a:null):(a=v.call(this._longMonthsParse,i),a!==-1?a:null):t===\"MMM\"?(a=v.call(this._shortMonthsParse,i),a!==-1?a:(a=v.call(this._longMonthsParse,i),a!==-1?a:null)):(a=v.call(this._longMonthsParse,i),a!==-1?a:(a=v.call(this._shortMonthsParse,i),a!==-1?a:null))}function ir(e,t,s){var r,a,n;if(this._monthsParseExact)return nr.call(this,e,t,s);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(a=U([2e3,r]),s&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp(\"^\"+this.months(a,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[r]=new RegExp(\"^\"+this.monthsShort(a,\"\").replace(\".\",\"\")+\"$\",\"i\")),!s&&!this._monthsParse[r]&&(n=\"^\"+this.months(a,\"\")+\"|^\"+this.monthsShort(a,\"\"),this._monthsParse[r]=new RegExp(n.replace(\".\",\"\"),\"i\")),s&&t===\"MMMM\"&&this._longMonthsParse[r].test(e))return r;if(s&&t===\"MMM\"&&this._shortMonthsParse[r].test(e))return r;if(!s&&this._monthsParse[r].test(e))return r}}function Gt(e,t){if(!e.isValid())return e;if(typeof t==\"string\"){if(/^\\d+$/.test(t))t=m(t);else if(t=e.localeData().monthsParse(t),!A(t))return e}var s=t,r=e.date();return r=r<29?r:Math.min(r,ut(e.year(),s)),e._isUTC?e._d.setUTCMonth(s,r):e._d.setMonth(s,r),e}function jt(e){return e!=null?(Gt(this,e),l.updateOffset(this,!0),this):ge(this,\"Month\")}function or(){return ut(this.year(),this.month())}function lr(e){return this._monthsParseExact?(w(this,\"_monthsRegex\")||zt.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(w(this,\"_monthsShortRegex\")||(this._monthsShortRegex=tr),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function ur(e){return this._monthsParseExact?(w(this,\"_monthsRegex\")||zt.call(this),e?this._monthsStrictRegex:this._monthsRegex):(w(this,\"_monthsRegex\")||(this._monthsRegex=sr),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function zt(){function e(f,_){return _.length-f.length}var t=[],s=[],r=[],a,n,i,u;for(a=0;a<12;a++)n=U([2e3,a]),i=V(this.monthsShort(n,\"\")),u=V(this.months(n,\"\")),t.push(i),s.push(u),r.push(u),r.push(i);t.sort(e),s.sort(e),r.sort(e),this._monthsRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\")}function dr(e,t,s,r,a,n,i){var u;return e<100&&e>=0?(u=new Date(e+400,t,s,r,a,n,i),isFinite(u.getFullYear())&&u.setFullYear(e)):u=new Date(e,t,s,r,a,n,i),u}function Se(e){var t,s;return e<100&&e>=0?(s=Array.prototype.slice.call(arguments),s[0]=e+400,t=new Date(Date.UTC.apply(null,s)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Le(e,t,s){var r=7+t-s,a=(7+Se(e,0,r).getUTCDay()-t)%7;return-a+r-1}function Zt(e,t,s,r,a){var n=(7+s-r)%7,i=Le(e,r,a),u=1+7*(t-1)+n+i,f,_;return u<=0?(f=e-1,_=Me(f)+u):u>Me(e)?(f=e+1,_=u-Me(e)):(f=e,_=u),{year:f,dayOfYear:_}}function De(e,t,s){var r=Le(e.year(),t,s),a=Math.floor((e.dayOfYear()-r-1)/7)+1,n,i;return a<1?(i=e.year()-1,n=a+z(i,t,s)):a>z(e.year(),t,s)?(n=a-z(e.year(),t,s),i=e.year()+1):(i=e.year(),n=a),{week:n,year:i}}function z(e,t,s){var r=Le(e,t,s),a=Le(e+1,t,s);return(Me(e)-r+a)/7}h(\"w\",[\"ww\",2],\"wo\",\"week\"),h(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),d(\"w\",g,oe),d(\"ww\",g,b),d(\"W\",g,oe),d(\"WW\",g,b),ke([\"w\",\"ww\",\"W\",\"WW\"],function(e,t,s,r){t[r.substr(0,1)]=m(e)});function hr(e){return De(e,this._week.dow,this._week.doy).week}var fr={dow:0,doy:6};function cr(){return this._week.dow}function mr(){return this._week.doy}function _r(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,\"d\")}function yr(e){var t=De(this,1,4).week;return e==null?t:this.add((e-t)*7,\"d\")}h(\"d\",0,\"do\",\"day\"),h(\"dd\",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),h(\"ddd\",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),h(\"dddd\",0,0,function(e){return this.localeData().weekdays(this,e)}),h(\"e\",0,0,\"weekday\"),h(\"E\",0,0,\"isoWeekday\"),d(\"d\",g),d(\"e\",g),d(\"E\",g),d(\"dd\",function(e,t){return t.weekdaysMinRegex(e)}),d(\"ddd\",function(e,t){return t.weekdaysShortRegex(e)}),d(\"dddd\",function(e,t){return t.weekdaysRegex(e)}),ke([\"dd\",\"ddd\",\"dddd\"],function(e,t,s,r){var a=s._locale.weekdaysParse(e,r,s._strict);a!=null?t.d=a:c(s).invalidWeekday=e}),ke([\"d\",\"e\",\"E\"],function(e,t,s,r){t[r]=m(e)});function wr(e,t){return typeof e!=\"string\"?e:isNaN(e)?(e=t.weekdaysParse(e),typeof e==\"number\"?e:null):parseInt(e,10)}function kr(e,t){return typeof e==\"string\"?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function dt(e,t){return e.slice(t,7).concat(e.slice(0,t))}var Mr=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),$t=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),gr=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),Sr=we,Dr=we,vr=we;function Yr(e,t){var s=R(this._weekdays)?this._weekdays:this._weekdays[e&&e!==!0&&this._weekdays.isFormat.test(t)?\"format\":\"standalone\"];return e===!0?dt(s,this._week.dow):e?s[e.day()]:s}function pr(e){return e===!0?dt(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Or(e){return e===!0?dt(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Tr(e,t,s){var r,a,n,i=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)n=U([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(n,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(n,\"\").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(n,\"\").toLocaleLowerCase();return s?t===\"dddd\"?(a=v.call(this._weekdaysParse,i),a!==-1?a:null):t===\"ddd\"?(a=v.call(this._shortWeekdaysParse,i),a!==-1?a:null):(a=v.call(this._minWeekdaysParse,i),a!==-1?a:null):t===\"dddd\"?(a=v.call(this._weekdaysParse,i),a!==-1||(a=v.call(this._shortWeekdaysParse,i),a!==-1)?a:(a=v.call(this._minWeekdaysParse,i),a!==-1?a:null)):t===\"ddd\"?(a=v.call(this._shortWeekdaysParse,i),a!==-1||(a=v.call(this._weekdaysParse,i),a!==-1)?a:(a=v.call(this._minWeekdaysParse,i),a!==-1?a:null)):(a=v.call(this._minWeekdaysParse,i),a!==-1||(a=v.call(this._weekdaysParse,i),a!==-1)?a:(a=v.call(this._shortWeekdaysParse,i),a!==-1?a:null))}function br(e,t,s){var r,a,n;if(this._weekdaysParseExact)return Tr.call(this,e,t,s);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(a=U([2e3,1]).day(r),s&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp(\"^\"+this.weekdays(a,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysShort(a,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysMin(a,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[r]||(n=\"^\"+this.weekdays(a,\"\")+\"|^\"+this.weekdaysShort(a,\"\")+\"|^\"+this.weekdaysMin(a,\"\"),this._weekdaysParse[r]=new RegExp(n.replace(\".\",\"\"),\"i\")),s&&t===\"dddd\"&&this._fullWeekdaysParse[r].test(e))return r;if(s&&t===\"ddd\"&&this._shortWeekdaysParse[r].test(e))return r;if(s&&t===\"dd\"&&this._minWeekdaysParse[r].test(e))return r;if(!s&&this._weekdaysParse[r].test(e))return r}}function xr(e){if(!this.isValid())return e!=null?this:NaN;var t=ge(this,\"Day\");return e!=null?(e=wr(e,this.localeData()),this.add(e-t,\"d\")):t}function Nr(e){if(!this.isValid())return e!=null?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,\"d\")}function Wr(e){if(!this.isValid())return e!=null?this:NaN;if(e!=null){var t=kr(e,this.localeData());return this.day(this.day()%7?t:t-7)}else return this.day()||7}function Pr(e){return this._weekdaysParseExact?(w(this,\"_weekdaysRegex\")||ht.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(w(this,\"_weekdaysRegex\")||(this._weekdaysRegex=Sr),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Rr(e){return this._weekdaysParseExact?(w(this,\"_weekdaysRegex\")||ht.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(w(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=Dr),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Fr(e){return this._weekdaysParseExact?(w(this,\"_weekdaysRegex\")||ht.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(w(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=vr),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function ht(){function e(O,J){return J.length-O.length}var t=[],s=[],r=[],a=[],n,i,u,f,_;for(n=0;n<7;n++)i=U([2e3,1]).day(n),u=V(this.weekdaysMin(i,\"\")),f=V(this.weekdaysShort(i,\"\")),_=V(this.weekdays(i,\"\")),t.push(u),s.push(f),r.push(_),a.push(u),a.push(f),a.push(_);t.sort(e),s.sort(e),r.sort(e),a.sort(e),this._weekdaysRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\")}function ft(){return this.hours()%12||12}function Cr(){return this.hours()||24}h(\"H\",[\"HH\",2],0,\"hour\"),h(\"h\",[\"hh\",2],0,ft),h(\"k\",[\"kk\",2],0,Cr),h(\"hmm\",0,0,function(){return\"\"+ft.apply(this)+H(this.minutes(),2)}),h(\"hmmss\",0,0,function(){return\"\"+ft.apply(this)+H(this.minutes(),2)+H(this.seconds(),2)}),h(\"Hmm\",0,0,function(){return\"\"+this.hours()+H(this.minutes(),2)}),h(\"Hmmss\",0,0,function(){return\"\"+this.hours()+H(this.minutes(),2)+H(this.seconds(),2)});function qt(e,t){h(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}qt(\"a\",!0),qt(\"A\",!1);function Bt(e,t){return t._meridiemParse}d(\"a\",Bt),d(\"A\",Bt),d(\"H\",g,ot),d(\"h\",g,oe),d(\"k\",g,oe),d(\"HH\",g,b),d(\"hh\",g,b),d(\"kk\",g,b),d(\"hmm\",Ut),d(\"hmmss\",It),d(\"Hmm\",Ut),d(\"Hmmss\",It),M([\"H\",\"HH\"],Y),M([\"k\",\"kk\"],function(e,t,s){var r=m(e);t[Y]=r===24?0:r}),M([\"a\",\"A\"],function(e,t,s){s._isPm=s._locale.isPM(e),s._meridiem=e}),M([\"h\",\"hh\"],function(e,t,s){t[Y]=m(e),c(s).bigHour=!0}),M(\"hmm\",function(e,t,s){var r=e.length-2;t[Y]=m(e.substr(0,r)),t[C]=m(e.substr(r)),c(s).bigHour=!0}),M(\"hmmss\",function(e,t,s){var r=e.length-4,a=e.length-2;t[Y]=m(e.substr(0,r)),t[C]=m(e.substr(r,2)),t[j]=m(e.substr(a)),c(s).bigHour=!0}),M(\"Hmm\",function(e,t,s){var r=e.length-2;t[Y]=m(e.substr(0,r)),t[C]=m(e.substr(r))}),M(\"Hmmss\",function(e,t,s){var r=e.length-4,a=e.length-2;t[Y]=m(e.substr(0,r)),t[C]=m(e.substr(r,2)),t[j]=m(e.substr(a))});function Lr(e){return(e+\"\").toLowerCase().charAt(0)===\"p\"}var Ur=/[ap]\\.?m?\\.?/i,Ir=le(\"Hours\",!0);function Hr(e,t,s){return e>11?s?\"pm\":\"PM\":s?\"am\":\"AM\"}var Jt={calendar:Ts,longDateFormat:Ws,invalidDate:Rs,ordinal:Cs,dayOfMonthOrdinalParse:Ls,relativeTime:Is,months:er,monthsShort:At,week:fr,weekdays:Mr,weekdaysMin:gr,weekdaysShort:$t,meridiemParse:Ur},D={},ve={},Ye;function Er(e,t){var s,r=Math.min(e.length,t.length);for(s=0;s<r;s+=1)if(e[s]!==t[s])return s;return r}function Qt(e){return e&&e.toLowerCase().replace(\"_\",\"-\")}function Ar(e){for(var t=0,s,r,a,n;t<e.length;){for(n=Qt(e[t]).split(\"-\"),s=n.length,r=Qt(e[t+1]),r=r?r.split(\"-\"):null;s>0;){if(a=Ue(n.slice(0,s).join(\"-\")),a)return a;if(r&&r.length>=s&&Er(n,r)>=s-1)break;s--}t++}return Ye}function Vr(e){return!!(e&&e.match(\"^[^/\\\\\\\\]*$\"))}function Ue(e){var t=null,s;if(D[e]===void 0&&typeof me<\"u\"&&me&&me.exports&&Vr(e))try{t=Ye._abbr,s=Ys,s(\"./locale/\"+e),X(t)}catch{D[e]=null}return D[e]}function X(e,t){var s;return e&&(T(t)?s=Z(e):s=ct(e,t),s?Ye=s:typeof console<\"u\"&&console.warn&&console.warn(\"Locale \"+e+\" not found. Did you forget to load it?\")),Ye._abbr}function ct(e,t){if(t!==null){var s,r=Jt;if(t.abbr=e,D[e]!=null)Pt(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),r=D[e]._config;else if(t.parentLocale!=null)if(D[t.parentLocale]!=null)r=D[t.parentLocale]._config;else if(s=Ue(t.parentLocale),s!=null)r=s._config;else return ve[t.parentLocale]||(ve[t.parentLocale]=[]),ve[t.parentLocale].push({name:e,config:t}),null;return D[e]=new et(Ke(r,t)),ve[e]&&ve[e].forEach(function(a){ct(a.name,a.config)}),X(e),D[e]}else return delete D[e],null}function Gr(e,t){if(t!=null){var s,r,a=Jt;D[e]!=null&&D[e].parentLocale!=null?D[e].set(Ke(D[e]._config,t)):(r=Ue(e),r!=null&&(a=r._config),t=Ke(a,t),r==null&&(t.abbr=e),s=new et(t),s.parentLocale=D[e],D[e]=s),X(e)}else D[e]!=null&&(D[e].parentLocale!=null?(D[e]=D[e].parentLocale,e===X()&&X(e)):D[e]!=null&&delete D[e]);return D[e]}function Z(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Ye;if(!R(e)){if(t=Ue(e),t)return t;e=[e]}return Ar(e)}function jr(){return tt(D)}function mt(e){var t,s=e._a;return s&&c(e).overflow===-2&&(t=s[G]<0||s[G]>11?G:s[E]<1||s[E]>ut(s[p],s[G])?E:s[Y]<0||s[Y]>24||s[Y]===24&&(s[C]!==0||s[j]!==0||s[se]!==0)?Y:s[C]<0||s[C]>59?C:s[j]<0||s[j]>59?j:s[se]<0||s[se]>999?se:-1,c(e)._overflowDayOfYear&&(t<p||t>E)&&(t=E),c(e)._overflowWeeks&&t===-1&&(t=qs),c(e)._overflowWeekday&&t===-1&&(t=Bs),c(e).overflow=t),e}var zr=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,Zr=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,$r=/Z|[+-]\\d\\d(?::?\\d\\d)?/,Ie=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/],[\"YYYYMM\",/\\d{6}/,!1],[\"YYYY\",/\\d{4}/,!1]],_t=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],qr=/^\\/?Date\\((-?\\d+)/i,Br=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,Jr={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Xt(e){var t,s,r=e._i,a=zr.exec(r)||Zr.exec(r),n,i,u,f,_=Ie.length,O=_t.length;if(a){for(c(e).iso=!0,t=0,s=_;t<s;t++)if(Ie[t][1].exec(a[1])){i=Ie[t][0],n=Ie[t][2]!==!1;break}if(i==null){e._isValid=!1;return}if(a[3]){for(t=0,s=O;t<s;t++)if(_t[t][1].exec(a[3])){u=(a[2]||\" \")+_t[t][0];break}if(u==null){e._isValid=!1;return}}if(!n&&u!=null){e._isValid=!1;return}if(a[4])if($r.exec(a[4]))f=\"Z\";else{e._isValid=!1;return}e._f=i+(u||\"\")+(f||\"\"),wt(e)}else e._isValid=!1}function Qr(e,t,s,r,a,n){var i=[Xr(e),At.indexOf(t),parseInt(s,10),parseInt(r,10),parseInt(a,10)];return n&&i.push(parseInt(n,10)),i}function Xr(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function Kr(e){return e.replace(/\\([^()]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function ea(e,t,s){if(e){var r=$t.indexOf(e),a=new Date(t[0],t[1],t[2]).getDay();if(r!==a)return c(s).weekdayMismatch=!0,s._isValid=!1,!1}return!0}function ta(e,t,s){if(e)return Jr[e];if(t)return 0;var r=parseInt(s,10),a=r%100,n=(r-a)/100;return n*60+a}function Kt(e){var t=Br.exec(Kr(e._i)),s;if(t){if(s=Qr(t[4],t[3],t[2],t[5],t[6],t[7]),!ea(t[1],s,e))return;e._a=s,e._tzm=ta(t[8],t[9],t[10]),e._d=Se.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),c(e).rfc2822=!0}else e._isValid=!1}function sa(e){var t=qr.exec(e._i);if(t!==null){e._d=new Date(+t[1]);return}if(Xt(e),e._isValid===!1)delete e._isValid;else return;if(Kt(e),e._isValid===!1)delete e._isValid;else return;e._strict?e._isValid=!1:l.createFromInputFallback(e)}l.createFromInputFallback=x(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(e){e._d=new Date(e._i+(e._useUTC?\" UTC\":\"\"))});function ue(e,t,s){return e??t??s}function ra(e){var t=new Date(l.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function yt(e){var t,s,r=[],a,n,i;if(!e._d){for(a=ra(e),e._w&&e._a[E]==null&&e._a[G]==null&&aa(e),e._dayOfYear!=null&&(i=ue(e._a[p],a[p]),(e._dayOfYear>Me(i)||e._dayOfYear===0)&&(c(e)._overflowDayOfYear=!0),s=Se(i,0,e._dayOfYear),e._a[G]=s.getUTCMonth(),e._a[E]=s.getUTCDate()),t=0;t<3&&e._a[t]==null;++t)e._a[t]=r[t]=a[t];for(;t<7;t++)e._a[t]=r[t]=e._a[t]==null?t===2?1:0:e._a[t];e._a[Y]===24&&e._a[C]===0&&e._a[j]===0&&e._a[se]===0&&(e._nextDay=!0,e._a[Y]=0),e._d=(e._useUTC?Se:dr).apply(null,r),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),e._tzm!=null&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Y]=24),e._w&&typeof e._w.d<\"u\"&&e._w.d!==n&&(c(e).weekdayMismatch=!0)}}function aa(e){var t,s,r,a,n,i,u,f,_;t=e._w,t.GG!=null||t.W!=null||t.E!=null?(n=1,i=4,s=ue(t.GG,e._a[p],De(S(),1,4).year),r=ue(t.W,1),a=ue(t.E,1),(a<1||a>7)&&(f=!0)):(n=e._locale._week.dow,i=e._locale._week.doy,_=De(S(),n,i),s=ue(t.gg,e._a[p],_.year),r=ue(t.w,_.week),t.d!=null?(a=t.d,(a<0||a>6)&&(f=!0)):t.e!=null?(a=t.e+n,(t.e<0||t.e>6)&&(f=!0)):a=n),r<1||r>z(s,n,i)?c(e)._overflowWeeks=!0:f!=null?c(e)._overflowWeekday=!0:(u=Zt(s,r,a,n,i),e._a[p]=u.year,e._dayOfYear=u.dayOfYear)}l.ISO_8601=function(){},l.RFC_2822=function(){};function wt(e){if(e._f===l.ISO_8601){Xt(e);return}if(e._f===l.RFC_2822){Kt(e);return}e._a=[],c(e).empty=!0;var t=\"\"+e._i,s,r,a,n,i,u=t.length,f=0,_,O;for(a=Rt(e._f,e._locale).match(st)||[],O=a.length,s=0;s<O;s++)n=a[s],r=(t.match(zs(n,e))||[])[0],r&&(i=t.substr(0,t.indexOf(r)),i.length>0&&c(e).unusedInput.push(i),t=t.slice(t.indexOf(r)+r.length),f+=r.length),ne[n]?(r?c(e).empty=!1:c(e).unusedTokens.push(n),$s(n,r,e)):e._strict&&!r&&c(e).unusedTokens.push(n);c(e).charsLeftOver=u-f,t.length>0&&c(e).unusedInput.push(t),e._a[Y]<=12&&c(e).bigHour===!0&&e._a[Y]>0&&(c(e).bigHour=void 0),c(e).parsedDateParts=e._a.slice(0),c(e).meridiem=e._meridiem,e._a[Y]=na(e._locale,e._a[Y],e._meridiem),_=c(e).era,_!==null&&(e._a[p]=e._locale.erasConvertYear(_,e._a[p])),yt(e),mt(e)}function na(e,t,s){var r;return s==null?t:e.meridiemHour!=null?e.meridiemHour(t,s):(e.isPM!=null&&(r=e.isPM(s),r&&t<12&&(t+=12),!r&&t===12&&(t=0)),t)}function ia(e){var t,s,r,a,n,i,u=!1,f=e._f.length;if(f===0){c(e).invalidFormat=!0,e._d=new Date(NaN);return}for(a=0;a<f;a++)n=0,i=!1,t=Xe({},e),e._useUTC!=null&&(t._useUTC=e._useUTC),t._f=e._f[a],wt(t),Je(t)&&(i=!0),n+=c(t).charsLeftOver,n+=c(t).unusedTokens.length*10,c(t).score=n,u?n<r&&(r=n,s=t):(r==null||n<r||i)&&(r=n,s=t,i&&(u=!0));Q(e,s||t)}function oa(e){if(!e._d){var t=at(e._i),s=t.day===void 0?t.date:t.day;e._a=bt([t.year,t.month,s,t.hour,t.minute,t.second,t.millisecond],function(r){return r&&parseInt(r,10)}),yt(e)}}function la(e){var t=new ye(mt(es(e)));return t._nextDay&&(t.add(1,\"d\"),t._nextDay=void 0),t}function es(e){var t=e._i,s=e._f;return e._locale=e._locale||Z(e._l),t===null||s===void 0&&t===\"\"?Oe({nullInput:!0}):(typeof t==\"string\"&&(e._i=t=e._locale.preparse(t)),F(t)?new ye(mt(t)):(_e(t)?e._d=t:R(s)?ia(e):s?wt(e):ua(e),Je(e)||(e._d=null),e))}function ua(e){var t=e._i;T(t)?e._d=new Date(l.now()):_e(t)?e._d=new Date(t.valueOf()):typeof t==\"string\"?sa(e):R(t)?(e._a=bt(t.slice(0),function(s){return parseInt(s,10)}),yt(e)):te(t)?oa(e):A(t)?e._d=new Date(t):l.createFromInputFallback(e)}function ts(e,t,s,r,a){var n={};return(t===!0||t===!1)&&(r=t,t=void 0),(s===!0||s===!1)&&(r=s,s=void 0),(te(e)&&qe(e)||R(e)&&e.length===0)&&(e=void 0),n._isAMomentObject=!0,n._useUTC=n._isUTC=a,n._l=s,n._i=e,n._f=t,n._strict=r,la(n)}function S(e,t,s,r){return ts(e,t,s,r,!1)}var da=x(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=S.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:Oe()}),ha=x(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=S.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:Oe()});function ss(e,t){var s,r;if(t.length===1&&R(t[0])&&(t=t[0]),!t.length)return S();for(s=t[0],r=1;r<t.length;++r)(!t[r].isValid()||t[r][e](s))&&(s=t[r]);return s}function fa(){var e=[].slice.call(arguments,0);return ss(\"isBefore\",e)}function ca(){var e=[].slice.call(arguments,0);return ss(\"isAfter\",e)}var ma=function(){return Date.now?Date.now():+new Date},pe=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function _a(e){var t,s=!1,r,a=pe.length;for(t in e)if(w(e,t)&&!(v.call(pe,t)!==-1&&(e[t]==null||!isNaN(e[t]))))return!1;for(r=0;r<a;++r)if(e[pe[r]]){if(s)return!1;parseFloat(e[pe[r]])!==m(e[pe[r]])&&(s=!0)}return!0}function ya(){return this._isValid}function wa(){return L(NaN)}function He(e){var t=at(e),s=t.year||0,r=t.quarter||0,a=t.month||0,n=t.week||t.isoWeek||0,i=t.day||0,u=t.hour||0,f=t.minute||0,_=t.second||0,O=t.millisecond||0;this._isValid=_a(t),this._milliseconds=+O+_*1e3+f*6e4+u*1e3*60*60,this._days=+i+n*7,this._months=+a+r*3+s*12,this._data={},this._locale=Z(),this._bubble()}function Ee(e){return e instanceof He}function kt(e){return e<0?Math.round(-1*e)*-1:Math.round(e)}function ka(e,t,s){var r=Math.min(e.length,t.length),a=Math.abs(e.length-t.length),n=0,i;for(i=0;i<r;i++)(s&&e[i]!==t[i]||!s&&m(e[i])!==m(t[i]))&&n++;return n+a}function rs(e,t){h(e,0,0,function(){var s=this.utcOffset(),r=\"+\";return s<0&&(s=-s,r=\"-\"),r+H(~~(s/60),2)+t+H(~~s%60,2)})}rs(\"Z\",\":\"),rs(\"ZZ\",\"\"),d(\"Z\",Re),d(\"ZZ\",Re),M([\"Z\",\"ZZ\"],function(e,t,s){s._useUTC=!0,s._tzm=Mt(Re,e)});var Ma=/([\\+\\-]|\\d\\d)/gi;function Mt(e,t){var s=(t||\"\").match(e),r,a,n;return s===null?null:(r=s[s.length-1]||[],a=(r+\"\").match(Ma)||[\"-\",0,0],n=+(a[1]*60)+m(a[2]),n===0?0:a[0]===\"+\"?n:-n)}function gt(e,t){var s,r;return t._isUTC?(s=t.clone(),r=(F(e)||_e(e)?e.valueOf():S(e).valueOf())-s.valueOf(),s._d.setTime(s._d.valueOf()+r),l.updateOffset(s,!1),s):S(e).local()}function St(e){return-Math.round(e._d.getTimezoneOffset())}l.updateOffset=function(){};function ga(e,t,s){var r=this._offset||0,a;if(!this.isValid())return e!=null?this:NaN;if(e!=null){if(typeof e==\"string\"){if(e=Mt(Re,e),e===null)return this}else Math.abs(e)<16&&!s&&(e=e*60);return!this._isUTC&&t&&(a=St(this)),this._offset=e,this._isUTC=!0,a!=null&&this.add(a,\"m\"),r!==e&&(!t||this._changeInProgress?os(this,L(e-r,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,l.updateOffset(this,!0),this._changeInProgress=null)),this}else return this._isUTC?r:St(this)}function Sa(e,t){return e!=null?(typeof e!=\"string\"&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function Da(e){return this.utcOffset(0,e)}function va(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(St(this),\"m\")),this}function Ya(){if(this._tzm!=null)this.utcOffset(this._tzm,!1,!0);else if(typeof this._i==\"string\"){var e=Mt(Gs,this._i);e!=null?this.utcOffset(e):this.utcOffset(0,!0)}return this}function pa(e){return this.isValid()?(e=e?S(e).utcOffset():0,(this.utcOffset()-e)%60===0):!1}function Oa(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ta(){if(!T(this._isDSTShifted))return this._isDSTShifted;var e={},t;return Xe(e,this),e=es(e),e._a?(t=e._isUTC?U(e._a):S(e._a),this._isDSTShifted=this.isValid()&&ka(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function ba(){return this.isValid()?!this._isUTC:!1}function xa(){return this.isValid()?this._isUTC:!1}function as(){return this.isValid()?this._isUTC&&this._offset===0:!1}var Na=/^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,Wa=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function L(e,t){var s=e,r=null,a,n,i;return Ee(e)?s={ms:e._milliseconds,d:e._days,M:e._months}:A(e)||!isNaN(+e)?(s={},t?s[t]=+e:s.milliseconds=+e):(r=Na.exec(e))?(a=r[1]===\"-\"?-1:1,s={y:0,d:m(r[E])*a,h:m(r[Y])*a,m:m(r[C])*a,s:m(r[j])*a,ms:m(kt(r[se]*1e3))*a}):(r=Wa.exec(e))?(a=r[1]===\"-\"?-1:1,s={y:re(r[2],a),M:re(r[3],a),w:re(r[4],a),d:re(r[5],a),h:re(r[6],a),m:re(r[7],a),s:re(r[8],a)}):s==null?s={}:typeof s==\"object\"&&(\"from\"in s||\"to\"in s)&&(i=Pa(S(s.from),S(s.to)),s={},s.ms=i.milliseconds,s.M=i.months),n=new He(s),Ee(e)&&w(e,\"_locale\")&&(n._locale=e._locale),Ee(e)&&w(e,\"_isValid\")&&(n._isValid=e._isValid),n}L.fn=He.prototype,L.invalid=wa;function re(e,t){var s=e&&parseFloat(e.replace(\",\",\".\"));return(isNaN(s)?0:s)*t}function ns(e,t){var s={};return s.months=t.month()-e.month()+(t.year()-e.year())*12,e.clone().add(s.months,\"M\").isAfter(t)&&--s.months,s.milliseconds=+t-+e.clone().add(s.months,\"M\"),s}function Pa(e,t){var s;return e.isValid()&&t.isValid()?(t=gt(t,e),e.isBefore(t)?s=ns(e,t):(s=ns(t,e),s.milliseconds=-s.milliseconds,s.months=-s.months),s):{milliseconds:0,months:0}}function is(e,t){return function(s,r){var a,n;return r!==null&&!isNaN(+r)&&(Pt(t,\"moment().\"+t+\"(period, number) is deprecated. Please use moment().\"+t+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),n=s,s=r,r=n),a=L(s,r),os(this,a,e),this}}function os(e,t,s,r){var a=t._milliseconds,n=kt(t._days),i=kt(t._months);e.isValid()&&(r=r??!0,i&&Gt(e,ge(e,\"Month\")+i*s),n&&Et(e,\"Date\",ge(e,\"Date\")+n*s),a&&e._d.setTime(e._d.valueOf()+a*s),r&&l.updateOffset(e,n||i))}var Ra=is(1,\"add\"),Fa=is(-1,\"subtract\");function ls(e){return typeof e==\"string\"||e instanceof String}function Ca(e){return F(e)||_e(e)||ls(e)||A(e)||Ua(e)||La(e)||e===null||e===void 0}function La(e){var t=te(e)&&!qe(e),s=!1,r=[\"years\",\"year\",\"y\",\"months\",\"month\",\"M\",\"days\",\"day\",\"d\",\"dates\",\"date\",\"D\",\"hours\",\"hour\",\"h\",\"minutes\",\"minute\",\"m\",\"seconds\",\"second\",\"s\",\"milliseconds\",\"millisecond\",\"ms\"],a,n,i=r.length;for(a=0;a<i;a+=1)n=r[a],s=s||w(e,n);return t&&s}function Ua(e){var t=R(e),s=!1;return t&&(s=e.filter(function(r){return!A(r)&&ls(e)}).length===0),t&&s}function Ia(e){var t=te(e)&&!qe(e),s=!1,r=[\"sameDay\",\"nextDay\",\"lastDay\",\"nextWeek\",\"lastWeek\",\"sameElse\"],a,n;for(a=0;a<r.length;a+=1)n=r[a],s=s||w(e,n);return t&&s}function Ha(e,t){var s=e.diff(t,\"days\",!0);return s<-6?\"sameElse\":s<-1?\"lastWeek\":s<0?\"lastDay\":s<1?\"sameDay\":s<2?\"nextDay\":s<7?\"nextWeek\":\"sameElse\"}function Ea(e,t){arguments.length===1&&(arguments[0]?Ca(arguments[0])?(e=arguments[0],t=void 0):Ia(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var s=e||S(),r=gt(s,this).startOf(\"day\"),a=l.calendarFormat(this,r)||\"sameElse\",n=t&&(I(t[a])?t[a].call(this,s):t[a]);return this.format(n||this.localeData().calendar(a,this,S(s)))}function Aa(){return new ye(this)}function Va(e,t){var s=F(e)?e:S(e);return this.isValid()&&s.isValid()?(t=N(t)||\"millisecond\",t===\"millisecond\"?this.valueOf()>s.valueOf():s.valueOf()<this.clone().startOf(t).valueOf()):!1}function Ga(e,t){var s=F(e)?e:S(e);return this.isValid()&&s.isValid()?(t=N(t)||\"millisecond\",t===\"millisecond\"?this.valueOf()<s.valueOf():this.clone().endOf(t).valueOf()<s.valueOf()):!1}function ja(e,t,s,r){var a=F(e)?e:S(e),n=F(t)?t:S(t);return this.isValid()&&a.isValid()&&n.isValid()?(r=r||\"()\",(r[0]===\"(\"?this.isAfter(a,s):!this.isBefore(a,s))&&(r[1]===\")\"?this.isBefore(n,s):!this.isAfter(n,s))):!1}function za(e,t){var s=F(e)?e:S(e),r;return this.isValid()&&s.isValid()?(t=N(t)||\"millisecond\",t===\"millisecond\"?this.valueOf()===s.valueOf():(r=s.valueOf(),this.clone().startOf(t).valueOf()<=r&&r<=this.clone().endOf(t).valueOf())):!1}function Za(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function $a(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function qa(e,t,s){var r,a,n;if(!this.isValid())return NaN;if(r=gt(e,this),!r.isValid())return NaN;switch(a=(r.utcOffset()-this.utcOffset())*6e4,t=N(t),t){case\"year\":n=Ae(this,r)/12;break;case\"month\":n=Ae(this,r);break;case\"quarter\":n=Ae(this,r)/3;break;case\"second\":n=(this-r)/1e3;break;case\"minute\":n=(this-r)/6e4;break;case\"hour\":n=(this-r)/36e5;break;case\"day\":n=(this-r-a)/864e5;break;case\"week\":n=(this-r-a)/6048e5;break;default:n=this-r}return s?n:W(n)}function Ae(e,t){if(e.date()<t.date())return-Ae(t,e);var s=(t.year()-e.year())*12+(t.month()-e.month()),r=e.clone().add(s,\"months\"),a,n;return t-r<0?(a=e.clone().add(s-1,\"months\"),n=(t-r)/(r-a)):(a=e.clone().add(s+1,\"months\"),n=(t-r)/(a-r)),-(s+n)||0}l.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",l.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";function Ba(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")}function Ja(e){if(!this.isValid())return null;var t=e!==!0,s=t?this.clone().utc():this;return s.year()<0||s.year()>9999?be(s,t?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):I(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace(\"Z\",be(s,\"Z\")):be(s,t?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")}function Qa(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var e=\"moment\",t=\"\",s,r,a,n;return this.isLocal()||(e=this.utcOffset()===0?\"moment.utc\":\"moment.parseZone\",t=\"Z\"),s=\"[\"+e+'(\"]',r=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",a=\"-MM-DD[T]HH:mm:ss.SSS\",n=t+'[\")]',this.format(s+r+a+n)}function Xa(e){e||(e=this.isUtc()?l.defaultFormatUtc:l.defaultFormat);var t=be(this,e);return this.localeData().postformat(t)}function Ka(e,t){return this.isValid()&&(F(e)&&e.isValid()||S(e).isValid())?L({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function en(e){return this.from(S(),e)}function tn(e,t){return this.isValid()&&(F(e)&&e.isValid()||S(e).isValid())?L({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function sn(e){return this.to(S(),e)}function us(e){var t;return e===void 0?this._locale._abbr:(t=Z(e),t!=null&&(this._locale=t),this)}var ds=x(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(e){return e===void 0?this.localeData():this.locale(e)});function hs(){return this._locale}var Ve=1e3,de=60*Ve,Ge=60*de,fs=(365*400+97)*24*Ge;function he(e,t){return(e%t+t)%t}function cs(e,t,s){return e<100&&e>=0?new Date(e+400,t,s)-fs:new Date(e,t,s).valueOf()}function ms(e,t,s){return e<100&&e>=0?Date.UTC(e+400,t,s)-fs:Date.UTC(e,t,s)}function rn(e){var t,s;if(e=N(e),e===void 0||e===\"millisecond\"||!this.isValid())return this;switch(s=this._isUTC?ms:cs,e){case\"year\":t=s(this.year(),0,1);break;case\"quarter\":t=s(this.year(),this.month()-this.month()%3,1);break;case\"month\":t=s(this.year(),this.month(),1);break;case\"week\":t=s(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":t=s(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":t=s(this.year(),this.month(),this.date());break;case\"hour\":t=this._d.valueOf(),t-=he(t+(this._isUTC?0:this.utcOffset()*de),Ge);break;case\"minute\":t=this._d.valueOf(),t-=he(t,de);break;case\"second\":t=this._d.valueOf(),t-=he(t,Ve);break}return this._d.setTime(t),l.updateOffset(this,!0),this}function an(e){var t,s;if(e=N(e),e===void 0||e===\"millisecond\"||!this.isValid())return this;switch(s=this._isUTC?ms:cs,e){case\"year\":t=s(this.year()+1,0,1)-1;break;case\"quarter\":t=s(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":t=s(this.year(),this.month()+1,1)-1;break;case\"week\":t=s(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":t=s(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":t=s(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":t=this._d.valueOf(),t+=Ge-he(t+(this._isUTC?0:this.utcOffset()*de),Ge)-1;break;case\"minute\":t=this._d.valueOf(),t+=de-he(t,de)-1;break;case\"second\":t=this._d.valueOf(),t+=Ve-he(t,Ve)-1;break}return this._d.setTime(t),l.updateOffset(this,!0),this}function nn(){return this._d.valueOf()-(this._offset||0)*6e4}function on(){return Math.floor(this.valueOf()/1e3)}function ln(){return new Date(this.valueOf())}function un(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function dn(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function hn(){return this.isValid()?this.toISOString():null}function fn(){return Je(this)}function cn(){return Q({},c(this))}function mn(){return c(this).overflow}function _n(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}h(\"N\",0,0,\"eraAbbr\"),h(\"NN\",0,0,\"eraAbbr\"),h(\"NNN\",0,0,\"eraAbbr\"),h(\"NNNN\",0,0,\"eraName\"),h(\"NNNNN\",0,0,\"eraNarrow\"),h(\"y\",[\"y\",1],\"yo\",\"eraYear\"),h(\"y\",[\"yy\",2],0,\"eraYear\"),h(\"y\",[\"yyy\",3],0,\"eraYear\"),h(\"y\",[\"yyyy\",4],0,\"eraYear\"),d(\"N\",Dt),d(\"NN\",Dt),d(\"NNN\",Dt),d(\"NNNN\",On),d(\"NNNNN\",Tn),M([\"N\",\"NN\",\"NNN\",\"NNNN\",\"NNNNN\"],function(e,t,s,r){var a=s._locale.erasParse(e,r,s._strict);a?c(s).era=a:c(s).invalidEra=e}),d(\"y\",ie),d(\"yy\",ie),d(\"yyy\",ie),d(\"yyyy\",ie),d(\"yo\",bn),M([\"y\",\"yy\",\"yyy\",\"yyyy\"],p),M([\"yo\"],function(e,t,s,r){var a;s._locale._eraYearOrdinalRegex&&(a=e.match(s._locale._eraYearOrdinalRegex)),s._locale.eraYearOrdinalParse?t[p]=s._locale.eraYearOrdinalParse(e,a):t[p]=parseInt(e,10)});function yn(e,t){var s,r,a,n=this._eras||Z(\"en\")._eras;for(s=0,r=n.length;s<r;++s){switch(typeof n[s].since){case\"string\":a=l(n[s].since).startOf(\"day\"),n[s].since=a.valueOf();break}switch(typeof n[s].until){case\"undefined\":n[s].until=1/0;break;case\"string\":a=l(n[s].until).startOf(\"day\").valueOf(),n[s].until=a.valueOf();break}}return n}function wn(e,t,s){var r,a,n=this.eras(),i,u,f;for(e=e.toUpperCase(),r=0,a=n.length;r<a;++r)if(i=n[r].name.toUpperCase(),u=n[r].abbr.toUpperCase(),f=n[r].narrow.toUpperCase(),s)switch(t){case\"N\":case\"NN\":case\"NNN\":if(u===e)return n[r];break;case\"NNNN\":if(i===e)return n[r];break;case\"NNNNN\":if(f===e)return n[r];break}else if([i,u,f].indexOf(e)>=0)return n[r]}function kn(e,t){var s=e.since<=e.until?1:-1;return t===void 0?l(e.since).year():l(e.since).year()+(t-e.offset)*s}function Mn(){var e,t,s,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e)if(s=this.clone().startOf(\"day\").valueOf(),r[e].since<=s&&s<=r[e].until||r[e].until<=s&&s<=r[e].since)return r[e].name;return\"\"}function gn(){var e,t,s,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e)if(s=this.clone().startOf(\"day\").valueOf(),r[e].since<=s&&s<=r[e].until||r[e].until<=s&&s<=r[e].since)return r[e].narrow;return\"\"}function Sn(){var e,t,s,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e)if(s=this.clone().startOf(\"day\").valueOf(),r[e].since<=s&&s<=r[e].until||r[e].until<=s&&s<=r[e].since)return r[e].abbr;return\"\"}function Dn(){var e,t,s,r,a=this.localeData().eras();for(e=0,t=a.length;e<t;++e)if(s=a[e].since<=a[e].until?1:-1,r=this.clone().startOf(\"day\").valueOf(),a[e].since<=r&&r<=a[e].until||a[e].until<=r&&r<=a[e].since)return(this.year()-l(a[e].since).year())*s+a[e].offset;return this.year()}function vn(e){return w(this,\"_erasNameRegex\")||vt.call(this),e?this._erasNameRegex:this._erasRegex}function Yn(e){return w(this,\"_erasAbbrRegex\")||vt.call(this),e?this._erasAbbrRegex:this._erasRegex}function pn(e){return w(this,\"_erasNarrowRegex\")||vt.call(this),e?this._erasNarrowRegex:this._erasRegex}function Dt(e,t){return t.erasAbbrRegex(e)}function On(e,t){return t.erasNameRegex(e)}function Tn(e,t){return t.erasNarrowRegex(e)}function bn(e,t){return t._eraYearOrdinalRegex||ie}function vt(){var e=[],t=[],s=[],r=[],a,n,i,u,f,_=this.eras();for(a=0,n=_.length;a<n;++a)i=V(_[a].name),u=V(_[a].abbr),f=V(_[a].narrow),t.push(i),e.push(u),s.push(f),r.push(i),r.push(u),r.push(f);this._erasRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._erasNameRegex=new RegExp(\"^(\"+t.join(\"|\")+\")\",\"i\"),this._erasAbbrRegex=new RegExp(\"^(\"+e.join(\"|\")+\")\",\"i\"),this._erasNarrowRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\")}h(0,[\"gg\",2],0,function(){return this.weekYear()%100}),h(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100});function je(e,t){h(0,[e,e.length],0,t)}je(\"gggg\",\"weekYear\"),je(\"ggggg\",\"weekYear\"),je(\"GGGG\",\"isoWeekYear\"),je(\"GGGGG\",\"isoWeekYear\"),d(\"G\",Pe),d(\"g\",Pe),d(\"GG\",g,b),d(\"gg\",g,b),d(\"GGGG\",it,nt),d(\"gggg\",it,nt),d(\"GGGGG\",We,xe),d(\"ggggg\",We,xe),ke([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(e,t,s,r){t[r.substr(0,2)]=m(e)}),ke([\"gg\",\"GG\"],function(e,t,s,r){t[r]=l.parseTwoDigitYear(e)});function xn(e){return _s.call(this,e,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function Nn(e){return _s.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Wn(){return z(this.year(),1,4)}function Pn(){return z(this.isoWeekYear(),1,4)}function Rn(){var e=this.localeData()._week;return z(this.year(),e.dow,e.doy)}function Fn(){var e=this.localeData()._week;return z(this.weekYear(),e.dow,e.doy)}function _s(e,t,s,r,a){var n;return e==null?De(this,r,a).year:(n=z(e,r,a),t>n&&(t=n),Cn.call(this,e,t,s,r,a))}function Cn(e,t,s,r,a){var n=Zt(e,t,s,r,a),i=Se(n.year,0,n.dayOfYear);return this.year(i.getUTCFullYear()),this.month(i.getUTCMonth()),this.date(i.getUTCDate()),this}h(\"Q\",0,\"Qo\",\"quarter\"),d(\"Q\",Ct),M(\"Q\",function(e,t){t[G]=(m(e)-1)*3});function Ln(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}h(\"D\",[\"DD\",2],\"Do\",\"date\"),d(\"D\",g,oe),d(\"DD\",g,b),d(\"Do\",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),M([\"D\",\"DD\"],E),M(\"Do\",function(e,t){t[E]=m(e.match(g)[0])});var ys=le(\"Date\",!0);h(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),d(\"DDD\",Ne),d(\"DDDD\",Lt),M([\"DDD\",\"DDDD\"],function(e,t,s){s._dayOfYear=m(e)});function Un(e){var t=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return e==null?t:this.add(e-t,\"d\")}h(\"m\",[\"mm\",2],0,\"minute\"),d(\"m\",g,ot),d(\"mm\",g,b),M([\"m\",\"mm\"],C);var In=le(\"Minutes\",!1);h(\"s\",[\"ss\",2],0,\"second\"),d(\"s\",g,ot),d(\"ss\",g,b),M([\"s\",\"ss\"],j);var Hn=le(\"Seconds\",!1);h(\"S\",0,0,function(){return~~(this.millisecond()/100)}),h(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),h(0,[\"SSS\",3],0,\"millisecond\"),h(0,[\"SSSS\",4],0,function(){return this.millisecond()*10}),h(0,[\"SSSSS\",5],0,function(){return this.millisecond()*100}),h(0,[\"SSSSSS\",6],0,function(){return this.millisecond()*1e3}),h(0,[\"SSSSSSS\",7],0,function(){return this.millisecond()*1e4}),h(0,[\"SSSSSSSS\",8],0,function(){return this.millisecond()*1e5}),h(0,[\"SSSSSSSSS\",9],0,function(){return this.millisecond()*1e6}),d(\"S\",Ne,Ct),d(\"SS\",Ne,b),d(\"SSS\",Ne,Lt);var K,ws;for(K=\"SSSS\";K.length<=9;K+=\"S\")d(K,ie);function En(e,t){t[se]=m((\"0.\"+e)*1e3)}for(K=\"S\";K.length<=9;K+=\"S\")M(K,En);ws=le(\"Milliseconds\",!1),h(\"z\",0,0,\"zoneAbbr\"),h(\"zz\",0,0,\"zoneName\");function An(){return this._isUTC?\"UTC\":\"\"}function Vn(){return this._isUTC?\"Coordinated Universal Time\":\"\"}var o=ye.prototype;o.add=Ra,o.calendar=Ea,o.clone=Aa,o.diff=qa,o.endOf=an,o.format=Xa,o.from=Ka,o.fromNow=en,o.to=tn,o.toNow=sn,o.get=Qs,o.invalidAt=mn,o.isAfter=Va,o.isBefore=Ga,o.isBetween=ja,o.isSame=za,o.isSameOrAfter=Za,o.isSameOrBefore=$a,o.isValid=fn,o.lang=ds,o.locale=us,o.localeData=hs,o.max=ha,o.min=da,o.parsingFlags=cn,o.set=Xs,o.startOf=rn,o.subtract=Fa,o.toArray=un,o.toObject=dn,o.toDate=ln,o.toISOString=Ja,o.inspect=Qa,typeof Symbol<\"u\"&&Symbol.for!=null&&(o[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){return\"Moment<\"+this.format()+\">\"}),o.toJSON=hn,o.toString=Ba,o.unix=on,o.valueOf=nn,o.creationData=_n,o.eraName=Mn,o.eraNarrow=gn,o.eraAbbr=Sn,o.eraYear=Dn,o.year=Ht,o.isLeapYear=Js,o.weekYear=xn,o.isoWeekYear=Nn,o.quarter=o.quarters=Ln,o.month=jt,o.daysInMonth=or,o.week=o.weeks=_r,o.isoWeek=o.isoWeeks=yr,o.weeksInYear=Rn,o.weeksInWeekYear=Fn,o.isoWeeksInYear=Wn,o.isoWeeksInISOWeekYear=Pn,o.date=ys,o.day=o.days=xr,o.weekday=Nr,o.isoWeekday=Wr,o.dayOfYear=Un,o.hour=o.hours=Ir,o.minute=o.minutes=In,o.second=o.seconds=Hn,o.millisecond=o.milliseconds=ws,o.utcOffset=ga,o.utc=Da,o.local=va,o.parseZone=Ya,o.hasAlignedHourOffset=pa,o.isDST=Oa,o.isLocal=ba,o.isUtcOffset=xa,o.isUtc=as,o.isUTC=as,o.zoneAbbr=An,o.zoneName=Vn,o.dates=x(\"dates accessor is deprecated. Use date instead.\",ys),o.months=x(\"months accessor is deprecated. Use month instead\",jt),o.years=x(\"years accessor is deprecated. Use year instead\",Ht),o.zone=x(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",Sa),o.isDSTShifted=x(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",Ta);function Gn(e){return S(e*1e3)}function jn(){return S.apply(null,arguments).parseZone()}function ks(e){return e}var k=et.prototype;k.calendar=bs,k.longDateFormat=Ps,k.invalidDate=Fs,k.ordinal=Us,k.preparse=ks,k.postformat=ks,k.relativeTime=Hs,k.pastFuture=Es,k.set=Os,k.eras=yn,k.erasParse=wn,k.erasConvertYear=kn,k.erasAbbrRegex=Yn,k.erasNameRegex=vn,k.erasNarrowRegex=pn,k.months=rr,k.monthsShort=ar,k.monthsParse=ir,k.monthsRegex=ur,k.monthsShortRegex=lr,k.week=hr,k.firstDayOfYear=mr,k.firstDayOfWeek=cr,k.weekdays=Yr,k.weekdaysMin=Or,k.weekdaysShort=pr,k.weekdaysParse=br,k.weekdaysRegex=Pr,k.weekdaysShortRegex=Rr,k.weekdaysMinRegex=Fr,k.isPM=Lr,k.meridiem=Hr;function ze(e,t,s,r){var a=Z(),n=U().set(r,t);return a[s](n,e)}function Ms(e,t,s){if(A(e)&&(t=e,e=void 0),e=e||\"\",t!=null)return ze(e,t,s,\"month\");var r,a=[];for(r=0;r<12;r++)a[r]=ze(e,r,s,\"month\");return a}function Yt(e,t,s,r){typeof e==\"boolean\"?(A(t)&&(s=t,t=void 0),t=t||\"\"):(t=e,s=t,e=!1,A(t)&&(s=t,t=void 0),t=t||\"\");var a=Z(),n=e?a._week.dow:0,i,u=[];if(s!=null)return ze(t,(s+n)%7,r,\"day\");for(i=0;i<7;i++)u[i]=ze(t,(i+n)%7,r,\"day\");return u}function zn(e,t){return Ms(e,t,\"months\")}function Zn(e,t){return Ms(e,t,\"monthsShort\")}function $n(e,t,s){return Yt(e,t,s,\"weekdays\")}function qn(e,t,s){return Yt(e,t,s,\"weekdaysShort\")}function Bn(e,t,s){return Yt(e,t,s,\"weekdaysMin\")}X(\"en\",{eras:[{since:\"0001-01-01\",until:1/0,offset:1,name:\"Anno Domini\",narrow:\"AD\",abbr:\"AD\"},{since:\"0000-12-31\",until:-1/0,offset:1,name:\"Before Christ\",narrow:\"BC\",abbr:\"BC\"}],dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,s=m(e%100/10)===1?\"th\":t===1?\"st\":t===2?\"nd\":t===3?\"rd\":\"th\";return e+s}}),l.lang=x(\"moment.lang is deprecated. Use moment.locale instead.\",X),l.langData=x(\"moment.langData is deprecated. Use moment.localeData instead.\",Z);var $=Math.abs;function Jn(){var e=this._data;return this._milliseconds=$(this._milliseconds),this._days=$(this._days),this._months=$(this._months),e.milliseconds=$(e.milliseconds),e.seconds=$(e.seconds),e.minutes=$(e.minutes),e.hours=$(e.hours),e.months=$(e.months),e.years=$(e.years),this}function gs(e,t,s,r){var a=L(t,s);return e._milliseconds+=r*a._milliseconds,e._days+=r*a._days,e._months+=r*a._months,e._bubble()}function Qn(e,t){return gs(this,e,t,1)}function Xn(e,t){return gs(this,e,t,-1)}function Ss(e){return e<0?Math.floor(e):Math.ceil(e)}function Kn(){var e=this._milliseconds,t=this._days,s=this._months,r=this._data,a,n,i,u,f;return e>=0&&t>=0&&s>=0||e<=0&&t<=0&&s<=0||(e+=Ss(pt(s)+t)*864e5,t=0,s=0),r.milliseconds=e%1e3,a=W(e/1e3),r.seconds=a%60,n=W(a/60),r.minutes=n%60,i=W(n/60),r.hours=i%24,t+=W(i/24),f=W(Ds(t)),s+=f,t-=Ss(pt(f)),u=W(s/12),s%=12,r.days=t,r.months=s,r.years=u,this}function Ds(e){return e*4800/146097}function pt(e){return e*146097/4800}function ei(e){if(!this.isValid())return NaN;var t,s,r=this._milliseconds;if(e=N(e),e===\"month\"||e===\"quarter\"||e===\"year\")switch(t=this._days+r/864e5,s=this._months+Ds(t),e){case\"month\":return s;case\"quarter\":return s/3;case\"year\":return s/12}else switch(t=this._days+Math.round(pt(this._months)),e){case\"week\":return t/7+r/6048e5;case\"day\":return t+r/864e5;case\"hour\":return t*24+r/36e5;case\"minute\":return t*1440+r/6e4;case\"second\":return t*86400+r/1e3;case\"millisecond\":return Math.floor(t*864e5)+r;default:throw new Error(\"Unknown unit \"+e)}}function q(e){return function(){return this.as(e)}}var vs=q(\"ms\"),ti=q(\"s\"),si=q(\"m\"),ri=q(\"h\"),ai=q(\"d\"),ni=q(\"w\"),ii=q(\"M\"),oi=q(\"Q\"),li=q(\"y\"),ui=vs;function di(){return L(this)}function hi(e){return e=N(e),this.isValid()?this[e+\"s\"]():NaN}function ae(e){return function(){return this.isValid()?this._data[e]:NaN}}var fi=ae(\"milliseconds\"),ci=ae(\"seconds\"),mi=ae(\"minutes\"),_i=ae(\"hours\"),yi=ae(\"days\"),wi=ae(\"months\"),ki=ae(\"years\");function Mi(){return W(this.days()/7)}var B=Math.round,fe={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function gi(e,t,s,r,a){return a.relativeTime(t||1,!!s,e,r)}function Si(e,t,s,r){var a=L(e).abs(),n=B(a.as(\"s\")),i=B(a.as(\"m\")),u=B(a.as(\"h\")),f=B(a.as(\"d\")),_=B(a.as(\"M\")),O=B(a.as(\"w\")),J=B(a.as(\"y\")),ee=n<=s.ss&&[\"s\",n]||n<s.s&&[\"ss\",n]||i<=1&&[\"m\"]||i<s.m&&[\"mm\",i]||u<=1&&[\"h\"]||u<s.h&&[\"hh\",u]||f<=1&&[\"d\"]||f<s.d&&[\"dd\",f];return s.w!=null&&(ee=ee||O<=1&&[\"w\"]||O<s.w&&[\"ww\",O]),ee=ee||_<=1&&[\"M\"]||_<s.M&&[\"MM\",_]||J<=1&&[\"y\"]||[\"yy\",J],ee[2]=t,ee[3]=+e>0,ee[4]=r,gi.apply(null,ee)}function Di(e){return e===void 0?B:typeof e==\"function\"?(B=e,!0):!1}function vi(e,t){return fe[e]===void 0?!1:t===void 0?fe[e]:(fe[e]=t,e===\"s\"&&(fe.ss=t-1),!0)}function Yi(e,t){if(!this.isValid())return this.localeData().invalidDate();var s=!1,r=fe,a,n;return typeof e==\"object\"&&(t=e,e=!1),typeof e==\"boolean\"&&(s=e),typeof t==\"object\"&&(r=Object.assign({},fe,t),t.s!=null&&t.ss==null&&(r.ss=t.s-1)),a=this.localeData(),n=Si(this,!s,r,a),s&&(n=a.pastFuture(+this,n)),a.postformat(n)}var Ot=Math.abs;function ce(e){return(e>0)-(e<0)||+e}function Ze(){if(!this.isValid())return this.localeData().invalidDate();var e=Ot(this._milliseconds)/1e3,t=Ot(this._days),s=Ot(this._months),r,a,n,i,u=this.asSeconds(),f,_,O,J;return u?(r=W(e/60),a=W(r/60),e%=60,r%=60,n=W(s/12),s%=12,i=e?e.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",f=u<0?\"-\":\"\",_=ce(this._months)!==ce(u)?\"-\":\"\",O=ce(this._days)!==ce(u)?\"-\":\"\",J=ce(this._milliseconds)!==ce(u)?\"-\":\"\",f+\"P\"+(n?_+n+\"Y\":\"\")+(s?_+s+\"M\":\"\")+(t?O+t+\"D\":\"\")+(a||r||e?\"T\":\"\")+(a?J+a+\"H\":\"\")+(r?J+r+\"M\":\"\")+(e?J+i+\"S\":\"\")):\"P0D\"}var y=He.prototype;y.isValid=ya,y.abs=Jn,y.add=Qn,y.subtract=Xn,y.as=ei,y.asMilliseconds=vs,y.asSeconds=ti,y.asMinutes=si,y.asHours=ri,y.asDays=ai,y.asWeeks=ni,y.asMonths=ii,y.asQuarters=oi,y.asYears=li,y.valueOf=ui,y._bubble=Kn,y.clone=di,y.get=hi,y.milliseconds=fi,y.seconds=ci,y.minutes=mi,y.hours=_i,y.days=yi,y.weeks=Mi,y.months=wi,y.years=ki,y.humanize=Yi,y.toISOString=Ze,y.toString=Ze,y.toJSON=Ze,y.locale=us,y.localeData=hs,y.toIsoString=x(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",Ze),y.lang=ds,h(\"X\",0,0,\"unix\"),h(\"x\",0,0,\"valueOf\"),d(\"x\",Pe),d(\"X\",js),M(\"X\",function(e,t,s){s._d=new Date(parseFloat(e)*1e3)}),M(\"x\",function(e,t,s){s._d=new Date(m(e))});return l.version=\"2.30.1\",$e(S),l.fn=o,l.min=fa,l.max=ca,l.now=ma,l.utc=U,l.unix=Gn,l.months=zn,l.isDate=_e,l.locale=X,l.invalid=Oe,l.duration=L,l.isMoment=F,l.weekdays=$n,l.parseZone=jn,l.localeData=Z,l.isDuration=Ee,l.monthsShort=Zn,l.weekdaysMin=Bn,l.defineLocale=ct,l.updateLocale=Gr,l.locales=jr,l.weekdaysShort=qn,l.normalizeUnits=N,l.relativeTimeRounding=Di,l.relativeTimeThreshold=vi,l.calendarFormat=Ha,l.prototype=o,l.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},l})});export default Oi();\n/*! Bundled license information:\n\nmoment/moment.js:\n  (*! moment.js *)\n  (*! version : 2.30.1 *)\n  (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)\n  (*! license : MIT *)\n  (*! momentjs.com *)\n*/\n"
  },
  {
    "path": "modules/system/assets/vendor/mousewheel/mousewheel.js",
    "content": "/*!\n * jQuery Mousewheel v3.2.0\n * https://github.com/jquery/jquery-mousewheel\n */\n\n( function( factory ) {\n    if ( typeof define === \"function\" && define.amd ) {\n\n        // AMD. Register as an anonymous module.\n        define( [ \"jquery\" ], factory );\n    } else if ( typeof exports === \"object\" ) {\n\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n\n        // Browser globals\n        factory( jQuery );\n    }\n} )( function( $ ) {\n\n    var toFix  = [ \"wheel\", \"mousewheel\", \"DOMMouseScroll\", \"MozMousePixelScroll\" ],\n        toBind = ( \"onwheel\" in window.document || window.document.documentMode >= 9 ) ?\n                    [ \"wheel\" ] : [ \"mousewheel\", \"DomMouseScroll\", \"MozMousePixelScroll\" ],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[ --i ] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: \"3.2.0\",\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[ --i ], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n\n            // Store the line height and page height for this particular element\n            $.data( this, \"mousewheel-line-height\", special.getLineHeight( this ) );\n            $.data( this, \"mousewheel-page-height\", special.getPageHeight( this ) );\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[ --i ], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n\n            // Clean up the data we added to the element\n            $.removeData( this, \"mousewheel-line-height\" );\n            $.removeData( this, \"mousewheel-page-height\" );\n        },\n\n        getLineHeight: function( elem ) {\n            var $elem = $( elem ),\n                $parent = $elem[ \"offsetParent\" in $.fn ? \"offsetParent\" : \"parent\" ]();\n            if ( !$parent.length ) {\n                $parent = $( \"body\" );\n            }\n            return parseInt( $parent.css( \"fontSize\" ), 10 ) ||\n                parseInt( $elem.css( \"fontSize\" ), 10 ) || 16;\n        },\n\n        getPageHeight: function( elem ) {\n            return $( elem ).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend( {\n        mousewheel: function( fn ) {\n            return fn ? this.on( \"mousewheel\", fn ) : this.trigger( \"mousewheel\" );\n        },\n\n        unmousewheel: function( fn ) {\n            return this.off( \"mousewheel\", fn );\n        }\n    } );\n\n\n    function handler( event ) {\n        var orgEvent   = event || window.event,\n            args       = slice.call( arguments, 1 ),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0;\n        event = $.event.fix( orgEvent );\n        event.type = \"mousewheel\";\n\n        // Old school scrollwheel delta\n        if ( \"detail\" in orgEvent ) {\n            deltaY = orgEvent.detail * -1;\n        }\n        if ( \"wheelDelta\" in orgEvent ) {\n            deltaY = orgEvent.wheelDelta;\n        }\n        if ( \"wheelDeltaY\" in orgEvent ) {\n            deltaY = orgEvent.wheelDeltaY;\n        }\n        if ( \"wheelDeltaX\" in orgEvent ) {\n            deltaX = orgEvent.wheelDeltaX * -1;\n        }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( \"axis\" in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( \"deltaY\" in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( \"deltaX\" in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) {\n                delta  = deltaX * -1;\n            }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) {\n            return;\n        }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data( this, \"mousewheel-line-height\" );\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data( this, \"mousewheel-page-height\" );\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs( deltaY ), Math.abs( deltaX ) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas( orgEvent, absDelta ) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas( orgEvent, absDelta ) ) {\n\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? \"floor\" : \"ceil\" ]( delta  / lowestDelta );\n        deltaX = Math[ deltaX >= 1 ? \"floor\" : \"ceil\" ]( deltaX / lowestDelta );\n        deltaY = Math[ deltaY >= 1 ? \"floor\" : \"ceil\" ]( deltaY / lowestDelta );\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            event.offsetX = event.clientX - boundingRect.left;\n            event.offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift( event, delta, deltaX, deltaY );\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if ( nullLowestDeltaTimeout ) {\n            window.clearTimeout( nullLowestDeltaTimeout );\n        }\n        nullLowestDeltaTimeout = window.setTimeout( nullLowestDelta, 200 );\n\n        return ( $.event.dispatch || $.event.handle ).apply( this, args );\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas( orgEvent, absDelta ) {\n\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === \"mousewheel\" &&\n            absDelta % 120 === 0;\n    }\n\n} );\n"
  },
  {
    "path": "modules/system/assets/vendor/october-icons/icons.css",
    "content": "/*\n * October CMS Icon Font\n */\n\n@font-face {\n    font-family: 'octo-icon';\n    src:\n        url('octo-icon.ttf?v1') format('truetype'),\n        url('octo-icon.woff?v1') format('woff'),\n        url('octo-icon.svg?v1#octo-icon') format('svg');\n    font-weight: normal;\n    font-style: normal;\n    font-display: block;\n}\n\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n    /* use !important to prevent issues with browser extensions that change fonts */\n    font-family: 'octo-icon' !important;\n    speak: none;\n    font-style: normal;\n    font-weight: normal;\n    font-variant: normal;\n    text-transform: none;\n    line-height: 1;\n\n    /* Better Font Rendering */\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n/*\n * Prefixed icons (\"oc-\")\n */\n\n[class^=\"oc-icon-\"],\n[class*=\" oc-icon-\"] {\n    &:before {\n        display: inline-block;\n        margin-right: 8px;\n        /* use !important to prevent issues with browser extensions that change fonts */\n        font-family: 'octo-icon' !important;\n        speak: none;\n        font-style: normal;\n        font-weight: normal;\n        font-variant: normal;\n        text-transform: none;\n        line-height: 1;\n        -webkit-font-smoothing: antialiased;\n        -moz-osx-font-smoothing: grayscale;\n        vertical-align: baseline;\n    }\n\n    &.empty:before {\n        margin-right: 0;\n    }\n}\n\n/*\n * All Icons\n */\n\n.oc-icon-database-flash:before, .icon-database-flash:before { content: \"\\eb54\"; }\n.oc-icon-exit:before, .icon-exit:before { content: \"\\e901\"; }\n.oc-icon-app-window:before, .icon-app-window:before { content: \"\\e902\"; }\n.oc-icon-user-account:before, .icon-user-account:before { content: \"\\e903\"; }\n.oc-icon-settings:before, .icon-settings:before { content: \"\\e904\"; }\n.oc-icon-delete:before, .icon-delete:before { content: \"\\e905\"; }\n.oc-icon-fullscreen:before, .icon-fullscreen:before { content: \"\\e906\"; }\n.oc-icon-save-cloud:before, .icon-save-cloud:before { content: \"\\e907\"; }\n.oc-icon-search-code:before, .icon-search-code:before { content: \"\\e908\"; }\n.oc-icon-search-up:before, .icon-search-up:before { content: \"\\e909\"; }\n.oc-icon-angle-down-arrow:before, .icon-angle-down-arrow:before { content: \"\\e90a\"; }\n.oc-icon-angle-up-arrow:before, .icon-angle-up-arrow:before { content: \"\\e90b\"; }\n.oc-icon-text-format-ul:before, .icon-text-format-ul:before { content: \"\\e90c\"; }\n.oc-icon-text-format-ol:before, .icon-text-format-ol:before { content: \"\\e90d\"; }\n.oc-icon-fullscreen-collapse:before, .icon-fullscreen-collapse:before { content: \"\\e90e\"; }\n.oc-icon-text-bold:before, .icon-text-bold:before { content: \"\\e90f\"; }\n.oc-icon-text-left:before, .icon-text-left:before { content: \"\\e910\"; }\n.oc-icon-text-right:before, .icon-text-right:before { content: \"\\e911\"; }\n.oc-icon-text-center:before, .icon-text-center:before { content: \"\\e912\"; }\n.oc-icon-text-italic:before, .icon-text-italic:before { content: \"\\e913\"; }\n.oc-icon-text-underline:before, .icon-text-underline:before { content: \"\\e914\"; }\n.oc-icon-text-insert-table:before, .icon-text-insert-table:before { content: \"\\e915\"; }\n.oc-icon-text-justify:before, .icon-text-justify:before { content: \"\\e916\"; }\n.oc-icon-info-circle:before, .icon-info-circle:before { content: \"\\e917\"; }\n.oc-icon-magic-wand:before, .icon-magic-wand:before { content: \"\\e918\"; }\n.oc-icon-quote:before, .icon-quote:before { content: \"\\e919\"; }\n.oc-icon-horizontal-line:before, .icon-horizontal-line:before { content: \"\\e91a\"; }\n.oc-icon-text-link:before, .icon-text-link:before { content: \"\\e91b\"; }\n.oc-icon-components:before, .icon-components:before { content: \"\\e91c\"; }\n.oc-icon-text-strikethrough:before, .icon-text-strikethrough:before { content: \"\\e91d\"; }\n.oc-icon-text-colors:before, .icon-text-colors:before { content: \"\\e91e\"; }\n.oc-icon-text-emoticons:before, .icon-text-emoticons:before { content: \"\\e91f\"; }\n.oc-icon-text-subscript:before, .icon-text-subscript:before { content: \"\\e920\"; }\n.oc-icon-text-superscript:before, .icon-text-superscript:before { content: \"\\e921\"; }\n.oc-icon-text-increase-indent:before, .icon-text-increase-indent:before { content: \"\\e922\"; }\n.oc-icon-text-decrease-indent:before, .icon-text-decrease-indent:before { content: \"\\e923\"; }\n.oc-icon-text-inline-style:before, .icon-text-inline-style:before { content: \"\\e924\"; }\n.oc-icon-volume:before, .icon-volume:before { content: \"\\e925\"; }\n.oc-icon-text-video:before, .icon-text-video:before { content: \"\\e926\"; }\n.oc-icon-text-image:before, .icon-text-image:before { content: \"\\e927\"; }\n.oc-icon-text-redo:before, .icon-text-redo:before { content: \"\\e928\"; }\n.oc-icon-text-undo:before, .icon-text-undo:before { content: \"\\e929\"; }\n.oc-icon-attachment:before, .icon-attachment:before { content: \"\\e92a\"; }\n.oc-icon-edit-code:before, .icon-edit-code:before { content: \"\\e92b\"; }\n.oc-icon-cursor-arrow:before, .icon-cursor-arrow:before { content: \"\\e92c\"; }\n.oc-icon-text-clear-formatting:before, .icon-text-clear-formatting:before { content: \"\\e92d\"; }\n.oc-icon-text-eraser:before, .icon-text-eraser:before { content: \"\\e92e\"; }\n.oc-icon-text-h1:before, .icon-text-h1:before { content: \"\\e92f\"; }\n.oc-icon-text-h3:before, .icon-text-h3:before { content: \"\\e930\"; }\n.oc-icon-text-h2:before, .icon-text-h2:before { content: \"\\e931\"; }\n.oc-icon-text-code-block:before, .icon-text-code-block:before { content: \"\\e932\"; }\n.oc-icon-preview:before, .icon-preview:before { content: \"\\e933\"; }\n.oc-icon-window-split:before, .icon-window-split:before { content: \"\\e934\"; }\n.oc-icon-list-add:before, .icon-list-add:before { content: \"\\e935\"; }\n.oc-icon-list-remove:before, .icon-list-remove:before { content: \"\\e936\"; }\n.oc-icon-create:before, .icon-create:before { content: \"\\e937\"; }\n.oc-icon-text-unlink:before, .icon-text-unlink:before { content: \"\\e938\"; }\n.oc-icon-check-multi:before, .icon-check-multi:before { content: \"\\e939\"; }\n.oc-icon-add-above:before, .icon-add-above:before { content: \"\\e93a\"; }\n.oc-icon-add-below:before, .icon-add-below:before { content: \"\\e93b\"; }\n.oc-icon-callout-success:before, .icon-callout-success:before { content: \"\\e93c\"; }\n.oc-icon-callout-danger:before, .icon-callout-danger:before { content: \"\\e93d\"; }\n.oc-icon-cross:before, .icon-cross:before { content: \"\\e93e\"; }\n.oc-icon-callout-info:before, .icon-callout-info:before { content: \"\\e93f\"; }\n.oc-icon-text-plus:before, .icon-text-plus:before { content: \"\\e940\"; }\n.oc-icon-log-settings:before, .icon-log-settings:before { content: \"\\e941\"; }\n.oc-icon-power:before, .icon-power:before { content: \"\\e942\"; }\n.oc-icon-text-paint-brush:before, .icon-text-paint-brush:before { content: \"\\e943\"; }\n.oc-icon-mail-branding:before, .icon-mail-branding:before { content: \"\\e944\"; }\n.oc-icon-mail-messages:before, .icon-mail-messages:before { content: \"\\e945\"; }\n.oc-icon-mail-settings:before, .icon-mail-settings:before { content: \"\\e946\"; }\n.oc-icon-mail-templates:before, .icon-mail-templates:before { content: \"\\e947\"; }\n.oc-icon-download-cloud:before, .icon-download-cloud:before { content: \"\\e948\"; }\n.oc-icon-text-lock:before, .icon-text-lock:before { content: \"\\e949\"; }\n.oc-icon-text-users:before, .icon-text-users:before { content: \"\\e94a\"; }\n.oc-icon-code-snippet:before, .icon-code-snippet:before { content: \"\\e94b\"; }\n.oc-icon-translate:before, .icon-translate:before { content: \"\\e94c\"; }\n.oc-icon-globe-site:before, .icon-globe-site:before { content: \"\\e94d\"; }\n.oc-icon-id-card-1:before, .icon-id-card-1:before { content: \"\\e94e\"; }\n.oc-icon-user-group:before, .icon-user-group:before { content: \"\\e94f\"; }\n.oc-icon-user-actions-key:before, .icon-user-actions-key:before { content: \"\\e950\"; }\n.oc-icon-calendar-add:before, .icon-calendar-add:before { content: \"\\e951\"; }\n.oc-icon-calendar-3:before, .icon-calendar-3:before { content: \"\\e952\"; }\n.oc-icon-calendar-disable:before, .icon-calendar-disable:before { content: \"\\e953\"; }\n.oc-icon-calendar-enable:before, .icon-calendar-enable:before { content: \"\\e954\"; }\n.oc-icon-calendar-clock:before, .icon-calendar-clock:before { content: \"\\e955\"; }\n.oc-icon-notes-edit:before, .icon-notes-edit:before { content: \"\\e958\"; }\n.oc-icon-calendar-check-1:before, .icon-calendar-check-1:before { content: \"\\e959\"; }\n.oc-icon-keyboard-return:before, .icon-keyboard-return:before { content: \"\\e95a\"; }\n.oc-icon-list-reorder:before, .icon-list-reorder:before { content: \"\\e95b\"; }\n.oc-icon-common-file-remove:before, .icon-common-file-remove:before { content: \"\\e95c\"; }\n.oc-icon-common-file-sync:before, .icon-common-file-sync:before { content: \"\\e95d\"; }\n.oc-icon-harddrive-upload:before, .icon-harddrive-upload:before { content: \"\\e95e\"; }\n.oc-icon-common-file-upload:before, .icon-common-file-upload:before { content: \"\\e95f\"; }\n.oc-icon-set-parent:before, .icon-set-parent:before { content: \"\\e960\"; }\n.oc-icon-common-file-star:before, .icon-common-file-star:before { content: \"\\e961\"; }\n.oc-icon-add-bold:before, .icon-add-bold:before { content: \"\\e962\"; }\n.oc-icon-layers-grid-add:before, .icon-layers-grid-add:before { content: \"\\e963\"; }\n.oc-icon-collapse:before, .icon-collapse:before { content: \"\\e964\"; }\n.oc-icon-location-target:before, .icon-location-target:before { content: \"\\1f32b\"; }\n.oc-icon-id-badge-1:before, .icon-id-badge-1:before { content: \"\\eb39\"; }\n.oc-icon-language-letters:before, .icon-language-letters:before { content: \"\\eb56\"; }\n.oc-icon-address-book:before, .icon-address-book:before { content: \"\\f2ba\"; }\n.oc-icon-address-card:before, .icon-address-card:before { content: \"\\f2bc\"; }\n.oc-icon-adjust:before, .icon-adjust:before { content: \"\\f042\"; }\n.oc-icon-align-center:before, .icon-align-center:before { content: \"\\f037\"; }\n.oc-icon-align-justify:before, .icon-align-justify:before { content: \"\\f039\"; }\n.oc-icon-align-left:before, .icon-align-left:before { content: \"\\f036\"; }\n.oc-icon-align-right:before, .icon-align-right:before { content: \"\\f038\"; }\n.oc-icon-ambulance:before, .icon-ambulance:before { content: \"\\f0f9\"; }\n.oc-icon-american-sign-language-interpreting:before, .icon-american-sign-language-interpreting:before { content: \"\\f2a3\"; }\n.oc-icon-anchor:before, .icon-anchor:before { content: \"\\f13d\"; }\n.oc-icon-android:before, .icon-android:before { content: \"\\f17b\"; }\n.oc-icon-angellist:before, .icon-angellist:before { content: \"\\f209\"; }\n.oc-icon-angle-double-down:before, .icon-angle-double-down:before { content: \"\\f103\"; }\n.oc-icon-angle-double-left:before, .icon-angle-double-left:before { content: \"\\f100\"; }\n.oc-icon-angle-double-right:before, .icon-angle-double-right:before { content: \"\\f101\"; }\n.oc-icon-angle-double-up:before, .icon-angle-double-up:before { content: \"\\f102\"; }\n.oc-icon-angle-down:before, .icon-angle-down:before { content: \"\\f107\"; }\n.oc-icon-angle-left:before, .icon-angle-left:before { content: \"\\f104\"; }\n.oc-icon-angle-right:before, .icon-angle-right:before { content: \"\\f105\"; }\n.oc-icon-angle-up:before, .icon-angle-up:before { content: \"\\f106\"; }\n.oc-icon-apple:before, .icon-apple:before { content: \"\\f179\"; }\n.oc-icon-archive:before, .icon-archive:before { content: \"\\f187\"; }\n.oc-icon-area-chart:before, .icon-area-chart:before { content: \"\\f1fe\"; }\n.oc-icon-arrow-circle-down:before, .icon-arrow-circle-down:before { content: \"\\f0ab\"; }\n.oc-icon-arrow-circle-left:before, .icon-arrow-circle-left:before { content: \"\\f0a8\"; }\n.oc-icon-arrow-circle-right:before, .icon-arrow-circle-right:before { content: \"\\f0a9\"; }\n.oc-icon-arrow-circle-up:before, .icon-arrow-circle-up:before { content: \"\\f0aa\"; }\n.oc-icon-arrow-full-circle-down:before, .icon-arrow-full-circle-down:before { content: \"\\f01a\"; }\n.oc-icon-arrow-full-circle-left:before, .icon-arrow-full-circle-left:before { content: \"\\f190\"; }\n.oc-icon-arrow-full-circle-right:before, .icon-arrow-full-circle-right:before { content: \"\\f18e\"; }\n.oc-icon-arrow-full-circle-up:before, .icon-arrow-full-circle-up:before { content: \"\\f01b\"; }\n.oc-icon-arrow-down:before, .icon-arrow-down:before { content: \"\\f063\"; }\n.oc-icon-arrow-left:before, .icon-arrow-left:before { content: \"\\f060\"; }\n.oc-icon-arrow-right:before, .icon-arrow-right:before { content: \"\\f061\"; }\n.oc-icon-arrow-up:before, .icon-arrow-up:before { content: \"\\f062\"; }\n.oc-icon-move:before, .icon-move:before { content: \"\\f047\"; }\n.oc-icon-arrows-alt:before, .icon-arrows-alt:before { content: \"\\f0b2\"; }\n.oc-icon-arrows-h:before, .icon-arrows-h:before { content: \"\\f07e\"; }\n.oc-icon-arrows-v:before, .icon-arrows-v:before { content: \"\\f07d\"; }\n.oc-icon-asl-interpreting:before, .icon-asl-interpreting:before { content: \"\\f2a4\"; }\n.oc-icon-assistive-listening-systems:before, .icon-assistive-listening-systems:before { content: \"\\f2a2\"; }\n.oc-icon-asterisk:before, .icon-asterisk:before { content: \"\\f069\"; }\n.oc-icon-at:before, .icon-at:before { content: \"\\f1fa\"; }\n.oc-icon-audio-description:before, .icon-audio-description:before { content: \"\\f29e\"; }\n.oc-icon-automobile:before, .icon-automobile:before { content: \"\\f1b9\"; }\n.oc-icon-backward:before, .icon-backward:before { content: \"\\f04a\"; }\n.oc-icon-balance-scale:before, .icon-balance-scale:before { content: \"\\f24e\"; }\n.oc-icon-ban:before, .icon-ban:before { content: \"\\f05e\"; }\n.oc-icon-bank:before, .icon-bank:before { content: \"\\f19c\"; }\n.oc-icon-bar-chart:before, .icon-bar-chart:before { content: \"\\f080\"; }\n.oc-icon-barcode:before, .icon-barcode:before { content: \"\\f02a\"; }\n.oc-icon-bars:before, .icon-bars:before { content: \"\\f0c9\"; }\n.oc-icon-bathtub:before, .icon-bathtub:before { content: \"\\f2ce\"; }\n.oc-icon-battery:before, .icon-battery:before { content: \"\\f240\"; }\n.oc-icon-battery-0:before, .icon-battery-0:before { content: \"\\f244\"; }\n.oc-icon-battery-1:before, .icon-battery-1:before { content: \"\\f243\"; }\n.oc-icon-battery-2:before, .icon-battery-2:before { content: \"\\f242\"; }\n.oc-icon-battery-3:before, .icon-battery-3:before { content: \"\\f241\"; }\n.oc-icon-battery-4:before, .icon-battery-4:before { content: \"\\f245\"; }\n.oc-icon-bed:before, .icon-bed:before { content: \"\\f236\"; }\n.oc-icon-beer:before, .icon-beer:before { content: \"\\f0fc\"; }\n.oc-icon-bell:before, .icon-bell:before { content: \"\\f0f3\"; }\n.oc-icon-bell-slash:before, .icon-bell-slash:before { content: \"\\f1f6\"; }\n.oc-icon-bicycle:before, .icon-bicycle:before { content: \"\\f206\"; }\n.oc-icon-binoculars:before, .icon-binoculars:before { content: \"\\f1e5\"; }\n.oc-icon-birthday-cake:before, .icon-birthday-cake:before { content: \"\\f1fd\"; }\n.oc-icon-bitcoin:before, .icon-bitcoin:before { content: \"\\f15a\"; }\n.oc-icon-blind:before, .icon-blind:before { content: \"\\f29d\"; }\n.oc-icon-bluetooth:before, .icon-bluetooth:before { content: \"\\f293\"; }\n.oc-icon-bluetooth-b:before, .icon-bluetooth-b:before { content: \"\\f294\"; }\n.oc-icon-bold:before, .icon-bold:before { content: \"\\f032\"; }\n.oc-icon-bolt:before, .icon-bolt:before { content: \"\\f0e7\"; }\n.oc-icon-bomb:before, .icon-bomb:before { content: \"\\f1e2\"; }\n.oc-icon-book:before, .icon-book:before { content: \"\\f02d\"; }\n.oc-icon-bookmark:before, .icon-bookmark:before { content: \"\\f02e\"; }\n.oc-icon-braille:before, .icon-braille:before { content: \"\\f2a1\"; }\n.oc-icon-briefcase:before, .icon-briefcase:before { content: \"\\f0b1\"; }\n.oc-icon-btc:before, .icon-btc:before { content: \"\\f15b\"; }\n.oc-icon-bug:before, .icon-bug:before { content: \"\\f188\"; }\n.oc-icon-building:before, .icon-building:before { content: \"\\f1ad\"; }\n.oc-icon-bullhorn:before, .icon-bullhorn:before { content: \"\\f0a1\"; }\n.oc-icon-bullseye:before, .icon-bullseye:before { content: \"\\f140\"; }\n.oc-icon-bus:before, .icon-bus:before { content: \"\\f207\"; }\n.oc-icon-cab:before, .icon-cab:before { content: \"\\f1ba\"; }\n.oc-icon-calculator:before, .icon-calculator:before { content: \"\\f1ec\"; }\n.oc-icon-calendar:before, .icon-calendar:before { content: \"\\f073\"; }\n.oc-icon-calendar-check:before, .icon-calendar-check:before { content: \"\\f274\"; }\n.oc-icon-calendar-minus:before, .icon-calendar-minus:before { content: \"\\f272\"; }\n.oc-icon-calendar-empty:before, .icon-calendar-empty:before { content: \"\\f133\"; }\n.oc-icon-calendar-plus:before, .icon-calendar-plus:before { content: \"\\f271\"; }\n.oc-icon-calendar-times:before, .icon-calendar-times:before { content: \"\\f273\"; }\n.oc-icon-camera:before, .icon-camera:before { content: \"\\f030\"; }\n.oc-icon-camera-retro:before, .icon-camera-retro:before { content: \"\\f083\"; }\n.oc-icon-car:before, .icon-car:before { content: \"\\f1bb\"; }\n.oc-icon-caret-down:before, .icon-caret-down:before { content: \"\\f0d7\"; }\n.oc-icon-caret-left:before, .icon-caret-left:before { content: \"\\f0d9\"; }\n.oc-icon-caret-right:before, .icon-caret-right:before { content: \"\\f0da\"; }\n.oc-icon-caret-up:before, .icon-caret-up:before { content: \"\\f0d8\"; }\n.oc-icon-caret-square-down:before, .icon-caret-square-down:before { content: \"\\f150\"; }\n.oc-icon-caret-square-left:before, .icon-caret-square-left:before { content: \"\\f191\"; }\n.oc-icon-caret-square-right:before, .icon-caret-square-right:before { content: \"\\f152\"; }\n.oc-icon-caret-square-up:before, .icon-caret-square-up:before { content: \"\\f151\"; }\n.oc-icon-cart-arrow-down:before, .icon-cart-arrow-down:before { content: \"\\f218\"; }\n.oc-icon-cart-plus:before, .icon-cart-plus:before { content: \"\\f217\"; }\n.oc-icon-cc:before, .icon-cc:before { content: \"\\f20a\"; }\n.oc-icon-cc-amex:before, .icon-cc-amex:before { content: \"\\f1f3\"; }\n.oc-icon-cc-diners-club:before, .icon-cc-diners-club:before { content: \"\\f24c\"; }\n.oc-icon-cc-discover:before, .icon-cc-discover:before { content: \"\\f1f2\"; }\n.oc-icon-cc-jcb:before, .icon-cc-jcb:before { content: \"\\f24b\"; }\n.oc-icon-cc-mastercard:before, .icon-cc-mastercard:before { content: \"\\f1f1\"; }\n.oc-icon-cc-paypal:before, .icon-cc-paypal:before { content: \"\\f1f4\"; }\n.oc-icon-cc-stripe:before, .icon-cc-stripe:before { content: \"\\f1f5\"; }\n.oc-icon-cc-visa:before, .icon-cc-visa:before { content: \"\\f1f0\"; }\n.oc-icon-certificate:before, .icon-certificate:before { content: \"\\f0a3\"; }\n.oc-icon-chain:before, .icon-chain:before { content: \"\\f0c1\"; }\n.oc-icon-chain-broken:before, .icon-chain-broken:before { content: \"\\f127\"; }\n.oc-icon-check:before, .icon-check:before { content: \"\\f00c\"; }\n.oc-icon-check-circle:before, .icon-check-circle:before { content: \"\\f058\"; }\n.oc-icon-check-square:before, .icon-check-square:before { content: \"\\f14a\"; }\n.oc-icon-chevron-circle-down:before, .icon-chevron-circle-down:before { content: \"\\f13a\"; }\n.oc-icon-chevron-circle-left:before, .icon-chevron-circle-left:before { content: \"\\f137\"; }\n.oc-icon-chevron-circle-right:before, .icon-chevron-circle-right:before { content: \"\\f138\"; }\n.oc-icon-chevron-circle-up:before, .icon-chevron-circle-up:before { content: \"\\f139\"; }\n.oc-icon-chevron-down:before, .icon-chevron-down:before { content: \"\\f078\"; }\n.oc-icon-chevron-left:before, .icon-chevron-left:before { content: \"\\f053\"; }\n.oc-icon-chevron-right:before, .icon-chevron-right:before { content: \"\\f054\"; }\n.oc-icon-chevron-up:before, .icon-chevron-up:before { content: \"\\f077\"; }\n.oc-icon-child:before, .icon-child:before { content: \"\\f1ae\"; }\n.oc-icon-chrome:before, .icon-chrome:before { content: \"\\f268\"; }\n.oc-icon-circle-full:before, .icon-circle-full:before { content: \"\\f111\"; }\n.oc-icon-circle:before, .icon-circle:before { content: \"\\f10c\"; }\n.oc-icon-circle-notch:before, .icon-circle-notch:before { content: \"\\f1ce\"; }\n.oc-icon-clipboard:before, .icon-clipboard:before { content: \"\\f0ea\"; }\n.oc-icon-clock:before, .icon-clock:before { content: \"\\f017\"; }\n.oc-icon-clone:before, .icon-clone:before { content: \"\\f24d\"; }\n.oc-icon-close:before, .icon-close:before { content: \"\\f00d\"; }\n.oc-icon-cloud:before, .icon-cloud:before { content: \"\\f0c2\"; }\n.oc-icon-cloud-download:before, .icon-cloud-download:before { content: \"\\f0ed\"; }\n.oc-icon-cloud-upload:before, .icon-cloud-upload:before { content: \"\\f0ee\"; }\n.oc-icon-cny:before, .icon-cny:before { content: \"\\f157\"; }\n.oc-icon-code:before, .icon-code:before { content: \"\\f121\"; }\n.oc-icon-code-fork:before, .icon-code-fork:before { content: \"\\f126\"; }\n.oc-icon-coffee:before, .icon-coffee:before { content: \"\\f0f4\"; }\n.oc-icon-cog:before, .icon-cog:before { content: \"\\f013\"; }\n.oc-icon-cogs:before, .icon-cogs:before { content: \"\\f085\"; }\n.oc-icon-columns:before, .icon-columns:before { content: \"\\f0db\"; }\n.oc-icon-comment:before, .icon-comment:before { content: \"\\f075\"; }\n.oc-icon-commenting:before, .icon-commenting:before { content: \"\\f27b\"; }\n.oc-icon-comments:before, .icon-comments:before { content: \"\\f086\"; }\n.oc-icon-compass:before, .icon-compass:before { content: \"\\f14e\"; }\n.oc-icon-compress:before, .icon-compress:before { content: \"\\f066\"; }\n.oc-icon-copy:before, .icon-copy:before { content: \"\\f0c5\"; }\n.oc-icon-copyright:before, .icon-copyright:before { content: \"\\f1f9\"; }\n.oc-icon-creative-commons:before, .icon-creative-commons:before { content: \"\\f25e\"; }\n.oc-icon-credit-card:before, .icon-credit-card:before { content: \"\\f09d\"; }\n.oc-icon-crop:before, .icon-crop:before { content: \"\\f125\"; }\n.oc-icon-crosshairs:before, .icon-crosshairs:before { content: \"\\f05b\"; }\n.oc-icon-css3:before, .icon-css3:before { content: \"\\f13c\"; }\n.oc-icon-cube:before, .icon-cube:before { content: \"\\f1b2\"; }\n.oc-icon-cubes:before, .icon-cubes:before { content: \"\\f1b3\"; }\n.oc-icon-cut:before, .icon-cut:before { content: \"\\f0c4\"; }\n.oc-icon-cutlery:before, .icon-cutlery:before { content: \"\\f0f5\"; }\n.oc-icon-dashboard:before, .icon-dashboard:before { content: \"\\f0e4\"; }\n.oc-icon-database:before, .icon-database:before { content: \"\\f1c0\"; }\n.oc-icon-deaf:before, .icon-deaf:before { content: \"\\f2a5\"; }\n.oc-icon-deafness:before, .icon-deafness:before { content: \"\\f2a6\"; }\n.oc-icon-dedent:before, .icon-dedent:before { content: \"\\f03b\"; }\n.oc-icon-desktop:before, .icon-desktop:before { content: \"\\f108\"; }\n.oc-icon-diamond:before, .icon-diamond:before { content: \"\\f219\"; }\n.oc-icon-dollar:before, .icon-dollar:before { content: \"\\f155\"; }\n.oc-icon-dot-circle:before, .icon-dot-circle:before { content: \"\\f192\"; }\n.oc-icon-download:before, .icon-download:before { content: \"\\f019\"; }\n.oc-icon-dribbble:before, .icon-dribbble:before { content: \"\\f17d\"; }\n.oc-icon-drivers-license:before, .icon-drivers-license:before { content: \"\\f2c3\"; }\n.oc-icon-edge:before, .icon-edge:before { content: \"\\f282\"; }\n.oc-icon-edit:before, .icon-edit:before { content: \"\\f044\"; }\n.oc-icon-eject:before, .icon-eject:before { content: \"\\f052\"; }\n.oc-icon-ellipsis-h:before, .icon-ellipsis-h:before { content: \"\\f141\"; }\n.oc-icon-ellipsis-v:before, .icon-ellipsis-v:before { content: \"\\f142\"; }\n.oc-icon-envelope:before, .icon-envelope:before { content: \"\\f0e0\"; }\n.oc-icon-envelope-open:before, .icon-envelope-open:before { content: \"\\f2b7\"; }\n.oc-icon-envelope-square:before, .icon-envelope-square:before { content: \"\\f199\"; }\n.oc-icon-leaf-2:before, .icon-leaf-2:before { content: \"\\f299\"; }\n.oc-icon-eraser:before, .icon-eraser:before { content: \"\\f12d\"; }\n.oc-icon-eur:before, .icon-eur:before { content: \"\\f153\"; }\n.oc-icon-euro:before, .icon-euro:before { content: \"\\f154\"; }\n.oc-icon-exchange:before, .icon-exchange:before { content: \"\\f0ec\"; }\n.oc-icon-exclamation:before, .icon-exclamation:before { content: \"\\f12a\"; }\n.oc-icon-exclamation-circle:before, .icon-exclamation-circle:before { content: \"\\f06a\"; }\n.oc-icon-exclamation-triangle:before, .icon-exclamation-triangle:before { content: \"\\f071\"; }\n.oc-icon-expand:before, .icon-expand:before { content: \"\\f065\"; }\n.oc-icon-external-link:before, .icon-external-link:before { content: \"\\f08e\"; }\n.oc-icon-external-link-square:before, .icon-external-link-square:before { content: \"\\f14c\"; }\n.oc-icon-eye:before, .icon-eye:before { content: \"\\f06e\"; }\n.oc-icon-eye-slash:before, .icon-eye-slash:before { content: \"\\f070\"; }\n.oc-icon-eyedropper:before, .icon-eyedropper:before { content: \"\\f1fb\"; }\n.oc-icon-fa:before, .icon-fa:before { content: \"\\f2b4\"; }\n.oc-icon-fast-backward:before, .icon-fast-backward:before { content: \"\\f049\"; }\n.oc-icon-fast-forward:before, .icon-fast-forward:before { content: \"\\f050\"; }\n.oc-icon-fax:before, .icon-fax:before { content: \"\\f1ac\"; }\n.oc-icon-feed:before, .icon-feed:before { content: \"\\f09e\"; }\n.oc-icon-female:before, .icon-female:before { content: \"\\f182\"; }\n.oc-icon-fighter-jet:before, .icon-fighter-jet:before { content: \"\\f0fb\"; }\n.oc-icon-file:before, .icon-file:before { content: \"\\f15c\"; }\n.oc-icon-file-archive:before, .icon-file-archive:before { content: \"\\f1c6\"; }\n.oc-icon-file-audio:before, .icon-file-audio:before { content: \"\\f1c7\"; }\n.oc-icon-file-code:before, .icon-file-code:before { content: \"\\f1c9\"; }\n.oc-icon-file-excel:before, .icon-file-excel:before { content: \"\\f1c3\"; }\n.oc-icon-file-image:before, .icon-file-image:before { content: \"\\f1c5\"; }\n.oc-icon-file-movie:before, .icon-file-movie:before { content: \"\\f1c8\"; }\n.oc-icon-file-pdf:before, .icon-file-pdf:before { content: \"\\f1c1\"; }\n.oc-icon-file-photo:before, .icon-file-photo:before { content: \"\\f1ca\"; }\n.oc-icon-file-picture:before, .icon-file-picture:before { content: \"\\f1cc\"; }\n.oc-icon-file-powerpoint:before, .icon-file-powerpoint:before { content: \"\\f1c4\"; }\n.oc-icon-file-sound:before, .icon-file-sound:before { content: \"\\f1cd\"; }\n.oc-icon-file-text:before, .icon-file-text:before { content: \"\\f15d\"; }\n.oc-icon-file-video:before, .icon-file-video:before { content: \"\\f1cf\"; }\n.oc-icon-file-word:before, .icon-file-word:before { content: \"\\f1c2\"; }\n.oc-icon-file-zip:before, .icon-file-zip:before { content: \"\\f1d0\"; }\n.oc-icon-files:before, .icon-files:before { content: \"\\f0c6\"; }\n.oc-icon-film:before, .icon-film:before { content: \"\\f008\"; }\n.oc-icon-filter:before, .icon-filter:before { content: \"\\f0b0\"; }\n.oc-icon-fire:before, .icon-fire:before { content: \"\\f06d\"; }\n.oc-icon-fire-extinguisher:before, .icon-fire-extinguisher:before { content: \"\\f134\"; }\n.oc-icon-flag:before, .icon-flag:before { content: \"\\f024\"; }\n.oc-icon-flag-checkered:before, .icon-flag-checkered:before { content: \"\\f11e\"; }\n.oc-icon-flash:before, .icon-flash:before { content: \"\\f0e8\"; }\n.oc-icon-flask:before, .icon-flask:before { content: \"\\f0c3\"; }\n.oc-icon-floppy:before, .icon-floppy:before { content: \"\\f0c7\"; }\n.oc-icon-folder:before, .icon-folder:before { content: \"\\f114\"; }\n.oc-icon-folder-open:before, .icon-folder-open:before { content: \"\\f115\"; }\n.oc-icon-font:before, .icon-font:before { content: \"\\f031\"; }\n.oc-icon-forward:before, .icon-forward:before { content: \"\\f04e\"; }\n.oc-icon-frown:before, .icon-frown:before { content: \"\\f119\"; }\n.oc-icon-futbol:before, .icon-futbol:before { content: \"\\f1e3\"; }\n.oc-icon-gamepad:before, .icon-gamepad:before { content: \"\\f11b\"; }\n.oc-icon-legal:before, .icon-legal:before { content: \"\\f0e3\"; }\n.oc-icon-gbp:before, .icon-gbp:before { content: \"\\f156\"; }\n.oc-icon-gear:before, .icon-gear:before { content: \"\\f014\"; }\n.oc-icon-gears:before, .icon-gears:before { content: \"\\f087\"; }\n.oc-icon-genderless:before, .icon-genderless:before { content: \"\\f22d\"; }\n.oc-icon-gift:before, .icon-gift:before { content: \"\\f06b\"; }\n.oc-icon-git:before, .icon-git:before { content: \"\\f1d3\"; }\n.oc-icon-git-square:before, .icon-git-square:before { content: \"\\f1d2\"; }\n.oc-icon-glass:before, .icon-glass:before { content: \"\\f000\"; }\n.oc-icon-globe:before, .icon-globe:before { content: \"\\f0ac\"; }\n.oc-icon-google:before, .icon-google:before { content: \"\\f1a0\"; }\n.oc-icon-graduation-cap:before, .icon-graduation-cap:before { content: \"\\f19d\"; }\n.oc-icon-october:before, .icon-october:before { content: \"\\f2d6\"; }\n.oc-icon-group:before, .icon-group:before { content: \"\\f0c0\"; }\n.oc-icon-hand-grab:before, .icon-hand-grab:before { content: \"\\f255\"; }\n.oc-icon-hand-lizard:before, .icon-hand-lizard:before { content: \"\\f258\"; }\n.oc-icon-hand-down:before, .icon-hand-down:before { content: \"\\f0a7\"; }\n.oc-icon-hand-left:before, .icon-hand-left:before { content: \"\\f0a5\"; }\n.oc-icon-hand-right:before, .icon-hand-right:before { content: \"\\f0a4\"; }\n.oc-icon-hand-up:before, .icon-hand-up:before { content: \"\\f0a6\"; }\n.oc-icon-hand-paper:before, .icon-hand-paper:before { content: \"\\f256\"; }\n.oc-icon-hand-peace:before, .icon-hand-peace:before { content: \"\\f25b\"; }\n.oc-icon-hand-pointer:before, .icon-hand-pointer:before { content: \"\\f25a\"; }\n.oc-icon-hand-rock:before, .icon-hand-rock:before { content: \"\\f257\"; }\n.oc-icon-hand-scissors:before, .icon-hand-scissors:before { content: \"\\f259\"; }\n.oc-icon-hand-spock:before, .icon-hand-spock:before { content: \"\\f25c\"; }\n.oc-icon-hand-stop:before, .icon-hand-stop:before { content: \"\\f25d\"; }\n.oc-icon-handshake:before, .icon-handshake:before { content: \"\\f2b8\"; }\n.oc-icon-hard-of-hearing:before, .icon-hard-of-hearing:before { content: \"\\f2a7\"; }\n.oc-icon-hashtag:before, .icon-hashtag:before { content: \"\\f292\"; }\n.oc-icon-hdd:before, .icon-hdd:before { content: \"\\f0a0\"; }\n.oc-icon-header:before, .icon-header:before { content: \"\\f1dc\"; }\n.oc-icon-headphones:before, .icon-headphones:before { content: \"\\f025\"; }\n.oc-icon-heart:before, .icon-heart:before { content: \"\\f004\"; }\n.oc-icon-heartbeat:before, .icon-heartbeat:before { content: \"\\f21e\"; }\n.oc-icon-history:before, .icon-history:before { content: \"\\f1da\"; }\n.oc-icon-home:before, .icon-home:before { content: \"\\f015\"; }\n.oc-icon-hospital:before, .icon-hospital:before { content: \"\\f0f8\"; }\n.oc-icon-hotel:before, .icon-hotel:before { content: \"\\f237\"; }\n.oc-icon-hourglass-0:before, .icon-hourglass-0:before { content: \"\\f250\"; }\n.oc-icon-hourglass-1:before, .icon-hourglass-1:before { content: \"\\f251\"; }\n.oc-icon-hourglass-2:before, .icon-hourglass-2:before { content: \"\\f252\"; }\n.oc-icon-hourglass-3:before, .icon-hourglass-3:before { content: \"\\f253\"; }\n.oc-icon-html5:before, .icon-html5:before { content: \"\\f13b\"; }\n.oc-icon-i-cursor:before, .icon-i-cursor:before { content: \"\\f24f\"; }\n.oc-icon-id-badge:before, .icon-id-badge:before { content: \"\\f2c1\"; }\n.oc-icon-id-card:before, .icon-id-card:before { content: \"\\f2c6\"; }\n.oc-icon-ils:before, .icon-ils:before { content: \"\\f20b\"; }\n.oc-icon-image:before, .icon-image:before { content: \"\\f03e\"; }\n.oc-icon-inbox:before, .icon-inbox:before { content: \"\\f01c\"; }\n.oc-icon-indent:before, .icon-indent:before { content: \"\\f03c\"; }\n.oc-icon-industry:before, .icon-industry:before { content: \"\\f275\"; }\n.oc-icon-info:before, .icon-info:before { content: \"\\f129\"; }\n.oc-icon-info-circle-1:before, .icon-info-circle-1:before { content: \"\\f05a\"; }\n.oc-icon-inr:before, .icon-inr:before { content: \"\\f158\"; }\n.oc-icon-instagram:before, .icon-instagram:before { content: \"\\f16d\"; }\n.oc-icon-institution:before, .icon-institution:before { content: \"\\f19e\"; }\n.oc-icon-intersex:before, .icon-intersex:before { content: \"\\f224\"; }\n.oc-icon-italic:before, .icon-italic:before { content: \"\\f033\"; }\n.oc-icon-jpy:before, .icon-jpy:before { content: \"\\f159\"; }\n.oc-icon-key:before, .icon-key:before { content: \"\\f084\"; }\n.oc-icon-keyboard:before, .icon-keyboard:before { content: \"\\f11c\"; }\n.oc-icon-krw:before, .icon-krw:before { content: \"\\f15e\"; }\n.oc-icon-language:before, .icon-language:before { content: \"\\f1ab\"; }\n.oc-icon-laptop:before, .icon-laptop:before { content: \"\\f109\"; }\n.oc-icon-leaf:before, .icon-leaf:before { content: \"\\f06c\"; }\n.oc-icon-legal-1:before, .icon-legal-1:before { content: \"\\f0e9\"; }\n.oc-icon-lemon:before, .icon-lemon:before { content: \"\\f094\"; }\n.oc-icon-life-bouy:before, .icon-life-bouy:before { content: \"\\f1d5\"; }\n.oc-icon-life-buoy:before, .icon-life-buoy:before { content: \"\\f1d6\"; }\n.oc-icon-life-ring:before, .icon-life-ring:before { content: \"\\f1d7\"; }\n.oc-icon-life-saver:before, .icon-life-saver:before { content: \"\\f1d8\"; }\n.oc-icon-lightbulb:before, .icon-lightbulb:before { content: \"\\f0eb\"; }\n.oc-icon-line-chart:before, .icon-line-chart:before { content: \"\\f201\"; }\n.oc-icon-link:before, .icon-link:before { content: \"\\f0c8\"; }\n.oc-icon-linux:before, .icon-linux:before { content: \"\\f17c\"; }\n.oc-icon-list:before, .icon-list:before { content: \"\\f03a\"; }\n.oc-icon-list-alt:before, .icon-list-alt:before { content: \"\\f022\"; }\n.oc-icon-list-ol:before, .icon-list-ol:before { content: \"\\f0cb\"; }\n.oc-icon-list-ul:before, .icon-list-ul:before { content: \"\\f0ca\"; }\n.oc-icon-location-arrow:before, .icon-location-arrow:before { content: \"\\f124\"; }\n.oc-icon-lock:before, .icon-lock:before { content: \"\\f023\"; }\n.oc-icon-long-arrow-down:before, .icon-long-arrow-down:before { content: \"\\f175\"; }\n.oc-icon-long-arrow-left:before, .icon-long-arrow-left:before { content: \"\\f177\"; }\n.oc-icon-long-arrow-right:before, .icon-long-arrow-right:before { content: \"\\f178\"; }\n.oc-icon-long-arrow-up:before, .icon-long-arrow-up:before { content: \"\\f176\"; }\n.oc-icon-low-vision:before, .icon-low-vision:before { content: \"\\f2a8\"; }\n.oc-icon-magic:before, .icon-magic:before { content: \"\\f0d0\"; }\n.oc-icon-magnet:before, .icon-magnet:before { content: \"\\f076\"; }\n.oc-icon-mail-forward:before, .icon-mail-forward:before { content: \"\\f064\"; }\n.oc-icon-mail-reply:before, .icon-mail-reply:before { content: \"\\f113\"; }\n.oc-icon-mail-reply-all:before, .icon-mail-reply-all:before { content: \"\\f123\"; }\n.oc-icon-level-up:before, .icon-level-up:before { content: \"\\f148\"; }\n.oc-icon-level-down:before, .icon-level-down:before { content: \"\\f149\"; }\n.oc-icon-male:before, .icon-male:before { content: \"\\f183\"; }\n.oc-icon-map-marker:before, .icon-map-marker:before { content: \"\\f041\"; }\n.oc-icon-map:before, .icon-map:before { content: \"\\f278\"; }\n.oc-icon-map-pin:before, .icon-map-pin:before { content: \"\\f276\"; }\n.oc-icon-map-signs:before, .icon-map-signs:before { content: \"\\f277\"; }\n.oc-icon-mars:before, .icon-mars:before { content: \"\\f222\"; }\n.oc-icon-mars-double:before, .icon-mars-double:before { content: \"\\f227\"; }\n.oc-icon-mars-stroke:before, .icon-mars-stroke:before { content: \"\\f229\"; }\n.oc-icon-mars-stroke-h:before, .icon-mars-stroke-h:before { content: \"\\f22b\"; }\n.oc-icon-mars-stroke-v:before, .icon-mars-stroke-v:before { content: \"\\f22a\"; }\n.oc-icon-medkit:before, .icon-medkit:before { content: \"\\f0fa\"; }\n.oc-icon-meh:before, .icon-meh:before { content: \"\\f11a\"; }\n.oc-icon-mercury:before, .icon-mercury:before { content: \"\\f223\"; }\n.oc-icon-microchip:before, .icon-microchip:before { content: \"\\f2db\"; }\n.oc-icon-microphone:before, .icon-microphone:before { content: \"\\f130\"; }\n.oc-icon-microphone-slash:before, .icon-microphone-slash:before { content: \"\\f131\"; }\n.oc-icon-minus:before, .icon-minus:before { content: \"\\f068\"; }\n.oc-icon-minus-circle:before, .icon-minus-circle:before { content: \"\\f056\"; }\n.oc-icon-minus-square:before, .icon-minus-square:before { content: \"\\f147\"; }\n.oc-icon-mobile:before, .icon-mobile:before { content: \"\\f10b\"; }\n.oc-icon-money:before, .icon-money:before { content: \"\\f0d6\"; }\n.oc-icon-moon:before, .icon-moon:before { content: \"\\f186\"; }\n.oc-icon-mortar-board:before, .icon-mortar-board:before { content: \"\\f19f\"; }\n.oc-icon-motorcycle:before, .icon-motorcycle:before { content: \"\\f21c\"; }\n.oc-icon-mouse-pointer:before, .icon-mouse-pointer:before { content: \"\\f264\"; }\n.oc-icon-music:before, .icon-music:before { content: \"\\f001\"; }\n.oc-icon-navicon:before, .icon-navicon:before { content: \"\\f0cc\"; }\n.oc-icon-neuter:before, .icon-neuter:before { content: \"\\f22c\"; }\n.oc-icon-newspaper:before, .icon-newspaper:before { content: \"\\f1ea\"; }\n.oc-icon-object-group:before, .icon-object-group:before { content: \"\\f266\"; }\n.oc-icon-object-ungroup:before, .icon-object-ungroup:before { content: \"\\f267\"; }\n.oc-icon-outdent:before, .icon-outdent:before { content: \"\\f03d\"; }\n.oc-icon-pagelines:before, .icon-pagelines:before { content: \"\\f18c\"; }\n.oc-icon-paint-brush:before, .icon-paint-brush:before { content: \"\\f1fc\"; }\n.oc-icon-paper-plane:before, .icon-paper-plane:before { content: \"\\f1dd\"; }\n.oc-icon-paperclip:before, .icon-paperclip:before { content: \"\\f0cd\"; }\n.oc-icon-paragraph:before, .icon-paragraph:before { content: \"\\f1de\"; }\n.oc-icon-paste:before, .icon-paste:before { content: \"\\f0ef\"; }\n.oc-icon-pause:before, .icon-pause:before { content: \"\\f04c\"; }\n.oc-icon-pause-circle:before, .icon-pause-circle:before { content: \"\\f28c\"; }\n.oc-icon-paw:before, .icon-paw:before { content: \"\\f1b0\"; }\n.oc-icon-pencil:before, .icon-pencil:before { content: \"\\f040\"; }\n.oc-icon-pencil-square:before, .icon-pencil-square:before { content: \"\\f14b\"; }\n.oc-icon-pencil-square-1:before, .icon-pencil-square-1:before { content: \"\\f045\"; }\n.oc-icon-percent:before, .icon-percent:before { content: \"\\f295\"; }\n.oc-icon-phone:before, .icon-phone:before { content: \"\\f095\"; }\n.oc-icon-phone-square:before, .icon-phone-square:before { content: \"\\f098\"; }\n.oc-icon-photo:before, .icon-photo:before { content: \"\\f03f\"; }\n.oc-icon-pie-chart:before, .icon-pie-chart:before { content: \"\\f200\"; }\n.oc-icon-plane:before, .icon-plane:before { content: \"\\f072\"; }\n.oc-icon-play:before, .icon-play:before { content: \"\\f04b\"; }\n.oc-icon-play-circle:before, .icon-play-circle:before { content: \"\\f144\"; }\n.oc-icon-plug:before, .icon-plug:before { content: \"\\f1e6\"; }\n.oc-icon-plus:before, .icon-plus:before { content: \"\\f067\"; }\n.oc-icon-plus-circle:before, .icon-plus-circle:before { content: \"\\f055\"; }\n.oc-icon-plus-square:before, .icon-plus-square:before { content: \"\\f196\"; }\n.oc-icon-podcast:before, .icon-podcast:before { content: \"\\f2cf\"; }\n.oc-icon-power-off:before, .icon-power-off:before { content: \"\\f011\"; }\n.oc-icon-print:before, .icon-print:before { content: \"\\f02f\"; }\n.oc-icon-puzzle-piece:before, .icon-puzzle-piece:before { content: \"\\f12e\"; }\n.oc-icon-qrcode:before, .icon-qrcode:before { content: \"\\f029\"; }\n.oc-icon-question:before, .icon-question:before { content: \"\\f128\"; }\n.oc-icon-question-circle:before, .icon-question-circle:before { content: \"\\f059\"; }\n.oc-icon-quote-left:before, .icon-quote-left:before { content: \"\\f10e\"; }\n.oc-icon-quote-right:before, .icon-quote-right:before { content: \"\\f10f\"; }\n.oc-icon-random:before, .icon-random:before { content: \"\\f074\"; }\n.oc-icon-recycle:before, .icon-recycle:before { content: \"\\f1b8\"; }\n.oc-icon-refresh:before, .icon-refresh:before { content: \"\\f021\"; }\n.oc-icon-registered:before, .icon-registered:before { content: \"\\f269\"; }\n.oc-icon-remove:before, .icon-remove:before { content: \"\\f00e\"; }\n.oc-icon-reorder:before, .icon-reorder:before { content: \"\\f0ce\"; }\n.oc-icon-repeat:before, .icon-repeat:before { content: \"\\f01e\"; }\n.oc-icon-retweet:before, .icon-retweet:before { content: \"\\f079\"; }\n.oc-icon-rmb:before, .icon-rmb:before { content: \"\\f15f\"; }\n.oc-icon-road:before, .icon-road:before { content: \"\\f018\"; }\n.oc-icon-rocket:before, .icon-rocket:before { content: \"\\f135\"; }\n.oc-icon-rotate-left:before, .icon-rotate-left:before { content: \"\\f0e2\"; }\n.oc-icon-rotate-right:before, .icon-rotate-right:before { content: \"\\f01f\"; }\n.oc-icon-rouble:before, .icon-rouble:before { content: \"\\f160\"; }\n.oc-icon-rss:before, .icon-rss:before { content: \"\\f09f\"; }\n.oc-icon-rss-square-square:before, .icon-rss-square-square:before { content: \"\\f143\"; }\n.oc-icon-rub:before, .icon-rub:before { content: \"\\f161\"; }\n.oc-icon-ruble:before, .icon-ruble:before { content: \"\\f162\"; }\n.oc-icon-rupee:before, .icon-rupee:before { content: \"\\f163\"; }\n.oc-icon-s15:before, .icon-s15:before { content: \"\\f2d0\"; }\n.oc-icon-safari:before, .icon-safari:before { content: \"\\f26a\"; }\n.oc-icon-save:before, .icon-save:before { content: \"\\f0cf\"; }\n.oc-icon-scissors:before, .icon-scissors:before { content: \"\\f0d1\"; }\n.oc-icon-search:before, .icon-search:before { content: \"\\f002\"; }\n.oc-icon-search-minus:before, .icon-search-minus:before { content: \"\\f010\"; }\n.oc-icon-search-plus:before, .icon-search-plus:before { content: \"\\f00f\"; }\n.oc-icon-send:before, .icon-send:before { content: \"\\f1e7\"; }\n.oc-icon-server:before, .icon-server:before { content: \"\\f233\"; }\n.oc-icon-share-alt:before, .icon-share-alt:before { content: \"\\f1e8\"; }\n.oc-icon-share-alt-square:before, .icon-share-alt-square:before { content: \"\\f1e9\"; }\n.oc-icon-share-square:before, .icon-share-square:before { content: \"\\f14d\"; }\n.oc-icon-shekel:before, .icon-shekel:before { content: \"\\f20c\"; }\n.oc-icon-shield:before, .icon-shield:before { content: \"\\f132\"; }\n.oc-icon-ship:before, .icon-ship:before { content: \"\\f21a\"; }\n.oc-icon-shopping-bag:before, .icon-shopping-bag:before { content: \"\\f290\"; }\n.oc-icon-shopping-basket:before, .icon-shopping-basket:before { content: \"\\f291\"; }\n.oc-icon-shopping-cart:before, .icon-shopping-cart:before { content: \"\\f07a\"; }\n.oc-icon-shower:before, .icon-shower:before { content: \"\\f2cc\"; }\n.oc-icon-sign-in:before, .icon-sign-in:before { content: \"\\f090\"; }\n.oc-icon-sign-language:before, .icon-sign-language:before { content: \"\\f2a9\"; }\n.oc-icon-sign-out:before, .icon-sign-out:before { content: \"\\f08b\"; }\n.oc-icon-signal:before, .icon-signal:before { content: \"\\f012\"; }\n.oc-icon-signing:before, .icon-signing:before { content: \"\\f2aa\"; }\n.oc-icon-sitemap:before, .icon-sitemap:before { content: \"\\f0f0\"; }\n.oc-icon-sliders:before, .icon-sliders:before { content: \"\\f1eb\"; }\n.oc-icon-smile:before, .icon-smile:before { content: \"\\f118\"; }\n.oc-icon-snowflake:before, .icon-snowflake:before { content: \"\\f2dc\"; }\n.oc-icon-soccer-ball:before, .icon-soccer-ball:before { content: \"\\f1ef\"; }\n.oc-icon-sort:before, .icon-sort:before { content: \"\\f0dc\"; }\n.oc-icon-sort-alpha-asc:before, .icon-sort-alpha-asc:before { content: \"\\f164\"; }\n.oc-icon-sort-alpha-desc:before, .icon-sort-alpha-desc:before { content: \"\\f165\"; }\n.oc-icon-sort-amount-asc:before, .icon-sort-amount-asc:before { content: \"\\f166\"; }\n.oc-icon-sort-amount-desc:before, .icon-sort-amount-desc:before { content: \"\\f167\"; }\n.oc-icon-sort-down:before, .icon-sort-down:before { content: \"\\f0df\"; }\n.oc-icon-sort-numeric-asc:before, .icon-sort-numeric-asc:before { content: \"\\f168\"; }\n.oc-icon-sort-numeric-desc:before, .icon-sort-numeric-desc:before { content: \"\\f169\"; }\n.oc-icon-sort-up:before, .icon-sort-up:before { content: \"\\f0e1\"; }\n.oc-icon-space-shuttle:before, .icon-space-shuttle:before { content: \"\\f197\"; }\n.oc-icon-spinner:before, .icon-spinner:before { content: \"\\f110\"; }\n.oc-icon-spoon:before, .icon-spoon:before { content: \"\\f1b1\"; }\n.oc-icon-square:before, .icon-square:before { content: \"\\f0d2\"; }\n.oc-icon-star-full:before, .icon-star-full:before { content: \"\\f005\"; }\n.oc-icon-star-half-full:before, .icon-star-half-full:before { content: \"\\f12b\"; }\n.oc-icon-star-half:before, .icon-star-half:before { content: \"\\f12f\"; }\n.oc-icon-star:before, .icon-star:before { content: \"\\f006\"; }\n.oc-icon-step-backward:before, .icon-step-backward:before { content: \"\\f04d\"; }\n.oc-icon-step-forward:before, .icon-step-forward:before { content: \"\\f051\"; }\n.oc-icon-stethoscope:before, .icon-stethoscope:before { content: \"\\f0f1\"; }\n.oc-icon-sticky-note:before, .icon-sticky-note:before { content: \"\\f26d\"; }\n.oc-icon-stop:before, .icon-stop:before { content: \"\\f04f\"; }\n.oc-icon-stop-circle:before, .icon-stop-circle:before { content: \"\\f28e\"; }\n.oc-icon-street-view:before, .icon-street-view:before { content: \"\\f21d\"; }\n.oc-icon-strikethrough:before, .icon-strikethrough:before { content: \"\\f0d3\"; }\n.oc-icon-subscript:before, .icon-subscript:before { content: \"\\f136\"; }\n.oc-icon-subway:before, .icon-subway:before { content: \"\\f239\"; }\n.oc-icon-suitcase:before, .icon-suitcase:before { content: \"\\f0f2\"; }\n.oc-icon-sun:before, .icon-sun:before { content: \"\\f189\"; }\n.oc-icon-superscript:before, .icon-superscript:before { content: \"\\f13e\"; }\n.oc-icon-subway1:before, .icon-subway1:before { content: \"\\f23a\"; }\n.oc-icon-table:before, .icon-table:before { content: \"\\f0d4\"; }\n.oc-icon-tablet:before, .icon-tablet:before { content: \"\\f10a\"; }\n.oc-icon-tachometer:before, .icon-tachometer:before { content: \"\\f0ff\"; }\n.oc-icon-tag:before, .icon-tag:before { content: \"\\f02b\"; }\n.oc-icon-tags:before, .icon-tags:before { content: \"\\f02c\"; }\n.oc-icon-tasks:before, .icon-tasks:before { content: \"\\f0ae\"; }\n.oc-icon-taxi:before, .icon-taxi:before { content: \"\\f1bc\"; }\n.oc-icon-television:before, .icon-television:before { content: \"\\f26e\"; }\n.oc-icon-terminal:before, .icon-terminal:before { content: \"\\f120\"; }\n.oc-icon-text-height:before, .icon-text-height:before { content: \"\\f034\"; }\n.oc-icon-text-width:before, .icon-text-width:before { content: \"\\f035\"; }\n.oc-icon-th:before, .icon-th:before { content: \"\\f00a\"; }\n.oc-icon-th-large:before, .icon-th-large:before { content: \"\\f009\"; }\n.oc-icon-th-list:before, .icon-th-list:before { content: \"\\f00b\"; }\n.oc-icon-thermometer-0:before, .icon-thermometer-0:before { content: \"\\f2cb\"; }\n.oc-icon-thermometer-1:before, .icon-thermometer-1:before { content: \"\\f2ca\"; }\n.oc-icon-thermometer-2:before, .icon-thermometer-2:before { content: \"\\f2c9\"; }\n.oc-icon-thermometer-3:before, .icon-thermometer-3:before { content: \"\\f2c8\"; }\n.oc-icon-thermometer-4:before, .icon-thermometer-4:before { content: \"\\f2d1\"; }\n.oc-icon-thumb-tack:before, .icon-thumb-tack:before { content: \"\\f08d\"; }\n.oc-icon-thumbs-down:before, .icon-thumbs-down:before { content: \"\\f16a\"; }\n.oc-icon-thumbs-up:before, .icon-thumbs-up:before { content: \"\\f08c\"; }\n.oc-icon-ticket:before, .icon-ticket:before { content: \"\\f145\"; }\n.oc-icon-times:before, .icon-times:before { content: \"\\f020\"; }\n.oc-icon-times-circle:before, .icon-times-circle:before { content: \"\\f057\"; }\n.oc-icon-times-rectangle:before, .icon-times-rectangle:before { content: \"\\f2de\"; }\n.oc-icon-tint:before, .icon-tint:before { content: \"\\f05f\"; }\n.oc-icon-toggle-off:before, .icon-toggle-off:before { content: \"\\f204\"; }\n.oc-icon-toggle-on:before, .icon-toggle-on:before { content: \"\\f205\"; }\n.oc-icon-toggle-down:before, .icon-toggle-down:before { content: \"\\f171\"; }\n.oc-icon-toggle-left:before, .icon-toggle-left:before { content: \"\\f193\"; }\n.oc-icon-toggle-right:before, .icon-toggle-right:before { content: \"\\f172\"; }\n.oc-icon-toggle-up:before, .icon-toggle-up:before { content: \"\\f173\"; }\n.oc-icon-trademark:before, .icon-trademark:before { content: \"\\f26f\"; }\n.oc-icon-train:before, .icon-train:before { content: \"\\f238\"; }\n.oc-icon-transgender:before, .icon-transgender:before { content: \"\\f225\"; }\n.oc-icon-transgender-alt:before, .icon-transgender-alt:before { content: \"\\f226\"; }\n.oc-icon-trash:before, .icon-trash:before { content: \"\\f1f8\"; }\n.oc-icon-trash-1:before, .icon-trash-1:before { content: \"\\f026\"; }\n.oc-icon-tree:before, .icon-tree:before { content: \"\\f1be\"; }\n.oc-icon-trophy:before, .icon-trophy:before { content: \"\\f091\"; }\n.oc-icon-truck:before, .icon-truck:before { content: \"\\f0d5\"; }\n.oc-icon-try:before, .icon-try:before { content: \"\\f195\"; }\n.oc-icon-tty:before, .icon-tty:before { content: \"\\f1ff\"; }\n.oc-icon-turkish-lira:before, .icon-turkish-lira:before { content: \"\\f198\"; }\n.oc-icon-tv:before, .icon-tv:before { content: \"\\f270\"; }\n.oc-icon-umbrella:before, .icon-umbrella:before { content: \"\\f116\"; }\n.oc-icon-underline:before, .icon-underline:before { content: \"\\f117\"; }\n.oc-icon-universal-access:before, .icon-universal-access:before { content: \"\\f29a\"; }\n.oc-icon-university:before, .icon-university:before { content: \"\\f1a1\"; }\n.oc-icon-unlink:before, .icon-unlink:before { content: \"\\f13f\"; }\n.oc-icon-unlock:before, .icon-unlock:before { content: \"\\f09c\"; }\n.oc-icon-unlock-alt:before, .icon-unlock-alt:before { content: \"\\f14f\"; }\n.oc-icon-unsorted:before, .icon-unsorted:before { content: \"\\f174\"; }\n.oc-icon-upload:before, .icon-upload:before { content: \"\\f093\"; }\n.oc-icon-usb:before, .icon-usb:before { content: \"\\f287\"; }\n.oc-icon-usd:before, .icon-usd:before { content: \"\\f17a\"; }\n.oc-icon-user:before, .icon-user:before { content: \"\\f007\"; }\n.oc-icon-user-circle:before, .icon-user-circle:before { content: \"\\f2be\"; }\n.oc-icon-user-md:before, .icon-user-md:before { content: \"\\f17e\"; }\n.oc-icon-user-plus:before, .icon-user-plus:before { content: \"\\f234\"; }\n.oc-icon-user-secret:before, .icon-user-secret:before { content: \"\\f21b\"; }\n.oc-icon-user-times:before, .icon-user-times:before { content: \"\\f235\"; }\n.oc-icon-users:before, .icon-users:before { content: \"\\f17f\"; }\n.oc-icon-vcard:before, .icon-vcard:before { content: \"\\f2df\"; }\n.oc-icon-venus:before, .icon-venus:before { content: \"\\f221\"; }\n.oc-icon-venus-double:before, .icon-venus-double:before { content: \"\\f228\"; }\n.oc-icon-venus-mars:before, .icon-venus-mars:before { content: \"\\f22e\"; }\n.oc-icon-video-camera:before, .icon-video-camera:before { content: \"\\f07f\"; }\n.oc-icon-volume-control-phone:before, .icon-volume-control-phone:before { content: \"\\f2a0\"; }\n.oc-icon-volume-down:before, .icon-volume-down:before { content: \"\\f027\"; }\n.oc-icon-volume-off:before, .icon-volume-off:before { content: \"\\f028\"; }\n.oc-icon-volume-up:before, .icon-volume-up:before { content: \"\\f082\"; }\n.oc-icon-warning:before, .icon-warning:before { content: \"\\f08f\"; }\n.oc-icon-wheelchair:before, .icon-wheelchair:before { content: \"\\f194\"; }\n.oc-icon-wheelchair-alt:before, .icon-wheelchair-alt:before { content: \"\\f29b\"; }\n.oc-icon-wifi:before, .icon-wifi:before { content: \"\\f202\"; }\n.oc-icon-wikipedia-w:before, .icon-wikipedia-w:before { content: \"\\f27c\"; }\n.oc-icon-window-close:before, .icon-window-close:before { content: \"\\f2e1\"; }\n.oc-icon-window-maximize:before, .icon-window-maximize:before { content: \"\\f2e2\"; }\n.oc-icon-window-minimize:before, .icon-window-minimize:before { content: \"\\f2e3\"; }\n.oc-icon-window-restore:before, .icon-window-restore:before { content: \"\\f2e4\"; }\n.oc-icon-windows:before, .icon-windows:before { content: \"\\f18a\"; }\n.oc-icon-won:before, .icon-won:before { content: \"\\f18f\"; }\n.oc-icon-wrench:before, .icon-wrench:before { content: \"\\f0ad\"; }\n.oc-icon-yen:before, .icon-yen:before { content: \"\\f19a\"; }\n"
  },
  {
    "path": "modules/system/assets/vendor/p-queue/p-queue.esm.js",
    "content": "var z=Object.create;var C=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var k=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var D=(n,e,t,r)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let i of S(e))!$.call(n,i)&&i!==t&&C(n,i,{get:()=>e[i],enumerable:!(r=L(e,i))||r.enumerable});return n};var F=(n,e,t)=>(t=n!=null?z(q(n)):{},D(e||!n||!n.__esModule?C(t,\"default\",{value:n,enumerable:!0}):t,n));var O=k((B,b)=>{\"use strict\";var M=Object.prototype.hasOwnProperty,l=\"~\";function v(){}Object.create&&(v.prototype=Object.create(null),new v().__proto__||(l=!1));function V(n,e,t){this.fn=n,this.context=e,this.once=t||!1}function P(n,e,t,r,i){if(typeof t!=\"function\")throw new TypeError(\"The listener must be a function\");var s=new V(t,r||n,i),u=l?l+e:e;return n._events[u]?n._events[u].fn?n._events[u]=[n._events[u],s]:n._events[u].push(s):(n._events[u]=s,n._eventsCount++),n}function g(n,e){--n._eventsCount===0?n._events=new v:delete n._events[e]}function h(){this._events=new v,this._eventsCount=0}h.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)M.call(t,r)&&e.push(l?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};h.prototype.listeners=function(e){var t=l?l+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,s=r.length,u=new Array(s);i<s;i++)u[i]=r[i].fn;return u};h.prototype.listenerCount=function(e){var t=l?l+e:e,r=this._events[t];return r?r.fn?1:r.length:0};h.prototype.emit=function(e,t,r,i,s,u){var f=l?l+e:e;if(!this._events[f])return!1;var o=this._events[f],d=arguments.length,m,a;if(o.fn){switch(o.once&&this.removeListener(e,o.fn,void 0,!0),d){case 1:return o.fn.call(o.context),!0;case 2:return o.fn.call(o.context,t),!0;case 3:return o.fn.call(o.context,t,r),!0;case 4:return o.fn.call(o.context,t,r,i),!0;case 5:return o.fn.call(o.context,t,r,i,s),!0;case 6:return o.fn.call(o.context,t,r,i,s,u),!0}for(a=1,m=new Array(d-1);a<d;a++)m[a-1]=arguments[a];o.fn.apply(o.context,m)}else{var w=o.length,c;for(a=0;a<w;a++)switch(o[a].once&&this.removeListener(e,o[a].fn,void 0,!0),d){case 1:o[a].fn.call(o[a].context);break;case 2:o[a].fn.call(o[a].context,t);break;case 3:o[a].fn.call(o[a].context,t,r);break;case 4:o[a].fn.call(o[a].context,t,r,i);break;default:if(!m)for(c=1,m=new Array(d-1);c<d;c++)m[c-1]=arguments[c];o[a].fn.apply(o[a].context,m)}}return!0};h.prototype.on=function(e,t,r){return P(this,e,t,r,!1)};h.prototype.once=function(e,t,r){return P(this,e,t,r,!0)};h.prototype.removeListener=function(e,t,r,i){var s=l?l+e:e;if(!this._events[s])return this;if(!t)return g(this,s),this;var u=this._events[s];if(u.fn)u.fn===t&&(!i||u.once)&&(!r||u.context===r)&&g(this,s);else{for(var f=0,o=[],d=u.length;f<d;f++)(u[f].fn!==t||i&&!u[f].once||r&&u[f].context!==r)&&o.push(u[f]);o.length?this._events[s]=o.length===1?o[0]:o:g(this,s)}return this};h.prototype.removeAllListeners=function(e){var t;return e?(t=l?l+e:e,this._events[t]&&g(this,t)):(this._events=new v,this._eventsCount=0),this};h.prototype.off=h.prototype.removeListener;h.prototype.addListener=h.prototype.on;h.prefixed=l;h.EventEmitter=h;typeof b<\"u\"&&(b.exports=h)});var E=F(O(),1);var p=class extends Error{constructor(e){super(e),this.name=\"TimeoutError\"}},x=class extends Error{constructor(e){super(),this.name=\"AbortError\",this.message=e}},N=n=>globalThis.DOMException===void 0?new x(n):new DOMException(n),A=n=>{let e=n.reason===void 0?N(\"This operation was aborted.\"):n.reason;return e instanceof Error?e:N(e)};function I(n,e){let{milliseconds:t,fallback:r,message:i,customTimers:s={setTimeout,clearTimeout}}=e,u,f,d=new Promise((m,a)=>{if(typeof t!=\"number\"||Math.sign(t)!==1)throw new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${t}\\``);if(e.signal){let{signal:c}=e;c.aborted&&a(A(c)),f=()=>{a(A(c))},c.addEventListener(\"abort\",f,{once:!0})}if(t===Number.POSITIVE_INFINITY){n.then(m,a);return}let w=new p;u=s.setTimeout.call(void 0,()=>{if(r){try{m(r())}catch(c){a(c)}return}typeof n.cancel==\"function\"&&n.cancel(),i===!1?m():i instanceof Error?a(i):(w.message=i??`Promise timed out after ${t} milliseconds`,a(w))},t),(async()=>{try{m(await n)}catch(c){a(c)}})()}).finally(()=>{d.clear(),f&&e.signal&&e.signal.removeEventListener(\"abort\",f)});return d.clear=()=>{s.clearTimeout.call(void 0,u),u=void 0},d}function _(n,e,t){let r=0,i=n.length;for(;i>0;){let s=Math.trunc(i/2),u=r+s;t(n[u],e)<=0?(r=++u,i-=s+1):i=s}return r}var y=class{#e=[];enqueue(e,t){t={priority:0,...t};let r={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(r);return}let i=_(this.#e,r,(s,u)=>u.priority-s.priority);this.#e.splice(i,0,r)}setPriority(e,t){let r=this.#e.findIndex(s=>s.id===e);if(r===-1)throw new ReferenceError(`No promise function with the id \"${e}\" exists in the queue.`);let[i]=this.#e.splice(r,1);this.enqueue(i.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var T=class extends E.default{#e;#o;#s=0;#d;#u;#m=0;#r;#a;#t;#v;#n=0;#h;#i;#p;#g=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:y,...e},!(typeof e.intervalCap==\"number\"&&e.intervalCap>=1))throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${e.intervalCap?.toString()??\"\"}\\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${e.interval?.toString()??\"\"}\\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#o=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#d=e.intervalCap,this.#u=e.interval,this.#t=new e.queueClass,this.#v=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#p=e.throwOnTimeout===!0,this.#i=e.autoStart===!1}get#b(){return this.#o||this.#s<this.#d}get#E(){return this.#n<this.#h}#x(){this.#n--,this.#l(),this.emit(\"next\")}#I(){this.#w(),this.#y(),this.#a=void 0}get#_(){let e=Date.now();if(this.#r===void 0){let t=this.#m-e;if(t<0)this.#s=this.#e?this.#n:0;else return this.#a===void 0&&(this.#a=setTimeout(()=>{this.#I()},t)),!0}return!1}#l(){if(this.#t.size===0)return this.#r&&clearInterval(this.#r),this.#r=void 0,this.emit(\"empty\"),this.#n===0&&this.emit(\"idle\"),!1;if(!this.#i){let e=!this.#_;if(this.#b&&this.#E){let t=this.#t.dequeue();return t?(this.emit(\"active\"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#o||this.#r!==void 0||(this.#r=setInterval(()=>{this.#w()},this.#u),this.#m=Date.now()+this.#u)}#w(){this.#s===0&&this.#n===0&&this.#r&&(clearInterval(this.#r),this.#r=void 0),this.#s=this.#e?this.#n:0,this.#f()}#f(){for(;this.#l(););}get concurrency(){return this.#h}set concurrency(e){if(!(typeof e==\"number\"&&e>=1))throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${e}\\` (${typeof e})`);this.#h=e,this.#f()}async#T(e){return new Promise((t,r)=>{e.addEventListener(\"abort\",()=>{r(e.reason)},{once:!0})})}setPriority(e,t){this.#t.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#g++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#p,...t},new Promise((r,i)=>{this.#t.enqueue(async()=>{this.#n++;try{t.signal?.throwIfAborted(),this.#s++;let s=e({signal:t.signal});t.timeout&&(s=I(Promise.resolve(s),{milliseconds:t.timeout})),t.signal&&(s=Promise.race([s,this.#T(t.signal)]));let u=await s;r(u),this.emit(\"completed\",u)}catch(s){if(s instanceof p&&!t.throwOnTimeout){r();return}i(s),this.emit(\"error\",s)}finally{this.#x()}},t),this.emit(\"add\"),this.#l()})}async addAll(e,t){return Promise.all(e.map(async r=>this.add(r,t)))}start(){return this.#i?(this.#i=!1,this.#f(),this):this}pause(){this.#i=!0}clear(){this.#t=new this.#v}async onEmpty(){this.#t.size!==0&&await this.#c(\"empty\")}async onSizeLessThan(e){this.#t.size<e||await this.#c(\"next\",()=>this.#t.size<e)}async onIdle(){this.#n===0&&this.#t.size===0||await this.#c(\"idle\")}async#c(e,t){return new Promise(r=>{let i=()=>{t&&!t()||(this.off(e,i),r())};this.on(e,i)})}get size(){return this.#t.size}sizeBy(e){return this.#t.filter(e).length}get pending(){return this.#n}get isPaused(){return this.#i}};export{T as default};\n"
  },
  {
    "path": "modules/system/assets/vendor/phosphor-icons/style.css",
    "content": "@font-face {\n  font-family: \"Phosphor\";\n  src:\n    url(\"./Phosphor.woff2\") format(\"woff2\"),\n    url(\"./Phosphor.woff\") format(\"woff\"),\n    url(\"./Phosphor.ttf\") format(\"truetype\"),\n    url(\"./Phosphor.svg#Phosphor\") format(\"svg\");\n  font-weight: normal;\n  font-style: normal;\n  font-display: block;\n}\n\n.ph {\n  /* use !important to prevent issues with browser extensions that change fonts */\n  font-family: \"Phosphor\" !important;\n  speak: never;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n\n  /* Enable Ligatures ================ */\n  letter-spacing: 0;\n  -webkit-font-feature-settings: \"liga\";\n  -moz-font-feature-settings: \"liga=1\";\n  -moz-font-feature-settings: \"liga\";\n  -ms-font-feature-settings: \"liga\" 1;\n  font-feature-settings: \"liga\";\n  -webkit-font-variant-ligatures: discretionary-ligatures;\n  font-variant-ligatures: discretionary-ligatures;\n\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.ph.ph-acorn:before {\n  content: \"\\eb9a\";\n}\n.ph.ph-address-book:before {\n  content: \"\\e6f8\";\n}\n.ph.ph-address-book-tabs:before {\n  content: \"\\ee4e\";\n}\n.ph.ph-air-traffic-control:before {\n  content: \"\\ecd8\";\n}\n.ph.ph-airplane:before {\n  content: \"\\e002\";\n}\n.ph.ph-airplane-in-flight:before {\n  content: \"\\e4fe\";\n}\n.ph.ph-airplane-landing:before {\n  content: \"\\e502\";\n}\n.ph.ph-airplane-takeoff:before {\n  content: \"\\e504\";\n}\n.ph.ph-airplane-taxiing:before {\n  content: \"\\e500\";\n}\n.ph.ph-airplane-tilt:before {\n  content: \"\\e5d6\";\n}\n.ph.ph-airplay:before {\n  content: \"\\e004\";\n}\n.ph.ph-alarm:before {\n  content: \"\\e006\";\n}\n.ph.ph-alien:before {\n  content: \"\\e8a6\";\n}\n.ph.ph-align-bottom:before {\n  content: \"\\e506\";\n}\n.ph.ph-align-bottom-simple:before {\n  content: \"\\eb0c\";\n}\n.ph.ph-align-center-horizontal:before {\n  content: \"\\e50a\";\n}\n.ph.ph-align-center-horizontal-simple:before {\n  content: \"\\eb0e\";\n}\n.ph.ph-align-center-vertical:before {\n  content: \"\\e50c\";\n}\n.ph.ph-align-center-vertical-simple:before {\n  content: \"\\eb10\";\n}\n.ph.ph-align-left:before {\n  content: \"\\e50e\";\n}\n.ph.ph-align-left-simple:before {\n  content: \"\\eaee\";\n}\n.ph.ph-align-right:before {\n  content: \"\\e510\";\n}\n.ph.ph-align-right-simple:before {\n  content: \"\\eb12\";\n}\n.ph.ph-align-top:before {\n  content: \"\\e512\";\n}\n.ph.ph-align-top-simple:before {\n  content: \"\\eb14\";\n}\n.ph.ph-amazon-logo:before {\n  content: \"\\e96c\";\n}\n.ph.ph-ambulance:before {\n  content: \"\\e572\";\n}\n.ph.ph-anchor:before {\n  content: \"\\e514\";\n}\n.ph.ph-anchor-simple:before {\n  content: \"\\e5d8\";\n}\n.ph.ph-android-logo:before {\n  content: \"\\e008\";\n}\n.ph.ph-angle:before {\n  content: \"\\e7bc\";\n}\n.ph.ph-angular-logo:before {\n  content: \"\\eb80\";\n}\n.ph.ph-aperture:before {\n  content: \"\\e00a\";\n}\n.ph.ph-app-store-logo:before {\n  content: \"\\e974\";\n}\n.ph.ph-app-window:before {\n  content: \"\\e5da\";\n}\n.ph.ph-apple-logo:before {\n  content: \"\\e516\";\n}\n.ph.ph-apple-podcasts-logo:before {\n  content: \"\\eb96\";\n}\n.ph.ph-approximate-equals:before {\n  content: \"\\edaa\";\n}\n.ph.ph-archive:before {\n  content: \"\\e00c\";\n}\n.ph.ph-armchair:before {\n  content: \"\\e012\";\n}\n.ph.ph-arrow-arc-left:before {\n  content: \"\\e014\";\n}\n.ph.ph-arrow-arc-right:before {\n  content: \"\\e016\";\n}\n.ph.ph-arrow-bend-double-up-left:before {\n  content: \"\\e03a\";\n}\n.ph.ph-arrow-bend-double-up-right:before {\n  content: \"\\e03c\";\n}\n.ph.ph-arrow-bend-down-left:before {\n  content: \"\\e018\";\n}\n.ph.ph-arrow-bend-down-right:before {\n  content: \"\\e01a\";\n}\n.ph.ph-arrow-bend-left-down:before {\n  content: \"\\e01c\";\n}\n.ph.ph-arrow-bend-left-up:before {\n  content: \"\\e01e\";\n}\n.ph.ph-arrow-bend-right-down:before {\n  content: \"\\e020\";\n}\n.ph.ph-arrow-bend-right-up:before {\n  content: \"\\e022\";\n}\n.ph.ph-arrow-bend-up-left:before {\n  content: \"\\e024\";\n}\n.ph.ph-arrow-bend-up-right:before {\n  content: \"\\e026\";\n}\n.ph.ph-arrow-circle-down:before {\n  content: \"\\e028\";\n}\n.ph.ph-arrow-circle-down-left:before {\n  content: \"\\e02a\";\n}\n.ph.ph-arrow-circle-down-right:before {\n  content: \"\\e02c\";\n}\n.ph.ph-arrow-circle-left:before {\n  content: \"\\e05a\";\n}\n.ph.ph-arrow-circle-right:before {\n  content: \"\\e02e\";\n}\n.ph.ph-arrow-circle-up:before {\n  content: \"\\e030\";\n}\n.ph.ph-arrow-circle-up-left:before {\n  content: \"\\e032\";\n}\n.ph.ph-arrow-circle-up-right:before {\n  content: \"\\e034\";\n}\n.ph.ph-arrow-clockwise:before {\n  content: \"\\e036\";\n}\n.ph.ph-arrow-counter-clockwise:before {\n  content: \"\\e038\";\n}\n.ph.ph-arrow-down:before {\n  content: \"\\e03e\";\n}\n.ph.ph-arrow-down-left:before {\n  content: \"\\e040\";\n}\n.ph.ph-arrow-down-right:before {\n  content: \"\\e042\";\n}\n.ph.ph-arrow-elbow-down-left:before {\n  content: \"\\e044\";\n}\n.ph.ph-arrow-elbow-down-right:before {\n  content: \"\\e046\";\n}\n.ph.ph-arrow-elbow-left:before {\n  content: \"\\e048\";\n}\n.ph.ph-arrow-elbow-left-down:before {\n  content: \"\\e04a\";\n}\n.ph.ph-arrow-elbow-left-up:before {\n  content: \"\\e04c\";\n}\n.ph.ph-arrow-elbow-right:before {\n  content: \"\\e04e\";\n}\n.ph.ph-arrow-elbow-right-down:before {\n  content: \"\\e050\";\n}\n.ph.ph-arrow-elbow-right-up:before {\n  content: \"\\e052\";\n}\n.ph.ph-arrow-elbow-up-left:before {\n  content: \"\\e054\";\n}\n.ph.ph-arrow-elbow-up-right:before {\n  content: \"\\e056\";\n}\n.ph.ph-arrow-fat-down:before {\n  content: \"\\e518\";\n}\n.ph.ph-arrow-fat-left:before {\n  content: \"\\e51a\";\n}\n.ph.ph-arrow-fat-line-down:before {\n  content: \"\\e51c\";\n}\n.ph.ph-arrow-fat-line-left:before {\n  content: \"\\e51e\";\n}\n.ph.ph-arrow-fat-line-right:before {\n  content: \"\\e520\";\n}\n.ph.ph-arrow-fat-line-up:before {\n  content: \"\\e522\";\n}\n.ph.ph-arrow-fat-lines-down:before {\n  content: \"\\e524\";\n}\n.ph.ph-arrow-fat-lines-left:before {\n  content: \"\\e526\";\n}\n.ph.ph-arrow-fat-lines-right:before {\n  content: \"\\e528\";\n}\n.ph.ph-arrow-fat-lines-up:before {\n  content: \"\\e52a\";\n}\n.ph.ph-arrow-fat-right:before {\n  content: \"\\e52c\";\n}\n.ph.ph-arrow-fat-up:before {\n  content: \"\\e52e\";\n}\n.ph.ph-arrow-left:before {\n  content: \"\\e058\";\n}\n.ph.ph-arrow-line-down:before {\n  content: \"\\e05c\";\n}\n.ph.ph-arrow-line-down-left:before {\n  content: \"\\e05e\";\n}\n.ph.ph-arrow-line-down-right:before {\n  content: \"\\e060\";\n}\n.ph.ph-arrow-line-left:before {\n  content: \"\\e062\";\n}\n.ph.ph-arrow-line-right:before {\n  content: \"\\e064\";\n}\n.ph.ph-arrow-line-up:before {\n  content: \"\\e066\";\n}\n.ph.ph-arrow-line-up-left:before {\n  content: \"\\e068\";\n}\n.ph.ph-arrow-line-up-right:before {\n  content: \"\\e06a\";\n}\n.ph.ph-arrow-right:before {\n  content: \"\\e06c\";\n}\n.ph.ph-arrow-square-down:before {\n  content: \"\\e06e\";\n}\n.ph.ph-arrow-square-down-left:before {\n  content: \"\\e070\";\n}\n.ph.ph-arrow-square-down-right:before {\n  content: \"\\e072\";\n}\n.ph.ph-arrow-square-in:before {\n  content: \"\\e5dc\";\n}\n.ph.ph-arrow-square-left:before {\n  content: \"\\e074\";\n}\n.ph.ph-arrow-square-out:before {\n  content: \"\\e5de\";\n}\n.ph.ph-arrow-square-right:before {\n  content: \"\\e076\";\n}\n.ph.ph-arrow-square-up:before {\n  content: \"\\e078\";\n}\n.ph.ph-arrow-square-up-left:before {\n  content: \"\\e07a\";\n}\n.ph.ph-arrow-square-up-right:before {\n  content: \"\\e07c\";\n}\n.ph.ph-arrow-u-down-left:before {\n  content: \"\\e07e\";\n}\n.ph.ph-arrow-u-down-right:before {\n  content: \"\\e080\";\n}\n.ph.ph-arrow-u-left-down:before {\n  content: \"\\e082\";\n}\n.ph.ph-arrow-u-left-up:before {\n  content: \"\\e084\";\n}\n.ph.ph-arrow-u-right-down:before {\n  content: \"\\e086\";\n}\n.ph.ph-arrow-u-right-up:before {\n  content: \"\\e088\";\n}\n.ph.ph-arrow-u-up-left:before {\n  content: \"\\e08a\";\n}\n.ph.ph-arrow-u-up-right:before {\n  content: \"\\e08c\";\n}\n.ph.ph-arrow-up:before {\n  content: \"\\e08e\";\n}\n.ph.ph-arrow-up-left:before {\n  content: \"\\e090\";\n}\n.ph.ph-arrow-up-right:before {\n  content: \"\\e092\";\n}\n.ph.ph-arrows-clockwise:before {\n  content: \"\\e094\";\n}\n.ph.ph-arrows-counter-clockwise:before {\n  content: \"\\e096\";\n}\n.ph.ph-arrows-down-up:before {\n  content: \"\\e098\";\n}\n.ph.ph-arrows-horizontal:before {\n  content: \"\\eb06\";\n}\n.ph.ph-arrows-in:before {\n  content: \"\\e09a\";\n}\n.ph.ph-arrows-in-cardinal:before {\n  content: \"\\e09c\";\n}\n.ph.ph-arrows-in-line-horizontal:before {\n  content: \"\\e530\";\n}\n.ph.ph-arrows-in-line-vertical:before {\n  content: \"\\e532\";\n}\n.ph.ph-arrows-in-simple:before {\n  content: \"\\e09e\";\n}\n.ph.ph-arrows-left-right:before {\n  content: \"\\e0a0\";\n}\n.ph.ph-arrows-merge:before {\n  content: \"\\ed3e\";\n}\n.ph.ph-arrows-out:before {\n  content: \"\\e0a2\";\n}\n.ph.ph-arrows-out-cardinal:before {\n  content: \"\\e0a4\";\n}\n.ph.ph-arrows-out-line-horizontal:before {\n  content: \"\\e534\";\n}\n.ph.ph-arrows-out-line-vertical:before {\n  content: \"\\e536\";\n}\n.ph.ph-arrows-out-simple:before {\n  content: \"\\e0a6\";\n}\n.ph.ph-arrows-split:before {\n  content: \"\\ed3c\";\n}\n.ph.ph-arrows-vertical:before {\n  content: \"\\eb04\";\n}\n.ph.ph-article:before {\n  content: \"\\e0a8\";\n}\n.ph.ph-article-medium:before {\n  content: \"\\e5e0\";\n}\n.ph.ph-article-ny-times:before {\n  content: \"\\e5e2\";\n}\n.ph.ph-asclepius:before {\n  content: \"\\ee34\";\n}\n.ph.ph-caduceus:before {\n  content: \"\\ee34\";\n}\n.ph.ph-asterisk:before {\n  content: \"\\e0aa\";\n}\n.ph.ph-asterisk-simple:before {\n  content: \"\\e832\";\n}\n.ph.ph-at:before {\n  content: \"\\e0ac\";\n}\n.ph.ph-atom:before {\n  content: \"\\e5e4\";\n}\n.ph.ph-avocado:before {\n  content: \"\\ee04\";\n}\n.ph.ph-axe:before {\n  content: \"\\e9fc\";\n}\n.ph.ph-baby:before {\n  content: \"\\e774\";\n}\n.ph.ph-baby-carriage:before {\n  content: \"\\e818\";\n}\n.ph.ph-backpack:before {\n  content: \"\\e922\";\n}\n.ph.ph-backspace:before {\n  content: \"\\e0ae\";\n}\n.ph.ph-bag:before {\n  content: \"\\e0b0\";\n}\n.ph.ph-bag-simple:before {\n  content: \"\\e5e6\";\n}\n.ph.ph-balloon:before {\n  content: \"\\e76c\";\n}\n.ph.ph-bandaids:before {\n  content: \"\\e0b2\";\n}\n.ph.ph-bank:before {\n  content: \"\\e0b4\";\n}\n.ph.ph-barbell:before {\n  content: \"\\e0b6\";\n}\n.ph.ph-barcode:before {\n  content: \"\\e0b8\";\n}\n.ph.ph-barn:before {\n  content: \"\\ec72\";\n}\n.ph.ph-barricade:before {\n  content: \"\\e948\";\n}\n.ph.ph-baseball:before {\n  content: \"\\e71a\";\n}\n.ph.ph-baseball-cap:before {\n  content: \"\\ea28\";\n}\n.ph.ph-baseball-helmet:before {\n  content: \"\\ee4a\";\n}\n.ph.ph-basket:before {\n  content: \"\\e964\";\n}\n.ph.ph-basketball:before {\n  content: \"\\e724\";\n}\n.ph.ph-bathtub:before {\n  content: \"\\e81e\";\n}\n.ph.ph-battery-charging:before {\n  content: \"\\e0ba\";\n}\n.ph.ph-battery-charging-vertical:before {\n  content: \"\\e0bc\";\n}\n.ph.ph-battery-empty:before {\n  content: \"\\e0be\";\n}\n.ph.ph-battery-full:before {\n  content: \"\\e0c0\";\n}\n.ph.ph-battery-high:before {\n  content: \"\\e0c2\";\n}\n.ph.ph-battery-low:before {\n  content: \"\\e0c4\";\n}\n.ph.ph-battery-medium:before {\n  content: \"\\e0c6\";\n}\n.ph.ph-battery-plus:before {\n  content: \"\\e808\";\n}\n.ph.ph-battery-plus-vertical:before {\n  content: \"\\ec50\";\n}\n.ph.ph-battery-vertical-empty:before {\n  content: \"\\e7c6\";\n}\n.ph.ph-battery-vertical-full:before {\n  content: \"\\e7c4\";\n}\n.ph.ph-battery-vertical-high:before {\n  content: \"\\e7c2\";\n}\n.ph.ph-battery-vertical-low:before {\n  content: \"\\e7be\";\n}\n.ph.ph-battery-vertical-medium:before {\n  content: \"\\e7c0\";\n}\n.ph.ph-battery-warning:before {\n  content: \"\\e0c8\";\n}\n.ph.ph-battery-warning-vertical:before {\n  content: \"\\e0ca\";\n}\n.ph.ph-beach-ball:before {\n  content: \"\\ed24\";\n}\n.ph.ph-beanie:before {\n  content: \"\\ea2a\";\n}\n.ph.ph-bed:before {\n  content: \"\\e0cc\";\n}\n.ph.ph-beer-bottle:before {\n  content: \"\\e7b0\";\n}\n.ph.ph-beer-stein:before {\n  content: \"\\eb62\";\n}\n.ph.ph-behance-logo:before {\n  content: \"\\e7f4\";\n}\n.ph.ph-bell:before {\n  content: \"\\e0ce\";\n}\n.ph.ph-bell-ringing:before {\n  content: \"\\e5e8\";\n}\n.ph.ph-bell-simple:before {\n  content: \"\\e0d0\";\n}\n.ph.ph-bell-simple-ringing:before {\n  content: \"\\e5ea\";\n}\n.ph.ph-bell-simple-slash:before {\n  content: \"\\e0d2\";\n}\n.ph.ph-bell-simple-z:before {\n  content: \"\\e5ec\";\n}\n.ph.ph-bell-slash:before {\n  content: \"\\e0d4\";\n}\n.ph.ph-bell-z:before {\n  content: \"\\e5ee\";\n}\n.ph.ph-belt:before {\n  content: \"\\ea2c\";\n}\n.ph.ph-bezier-curve:before {\n  content: \"\\eb00\";\n}\n.ph.ph-bicycle:before {\n  content: \"\\e0d6\";\n}\n.ph.ph-binary:before {\n  content: \"\\ee60\";\n}\n.ph.ph-binoculars:before {\n  content: \"\\ea64\";\n}\n.ph.ph-biohazard:before {\n  content: \"\\e9e0\";\n}\n.ph.ph-bird:before {\n  content: \"\\e72c\";\n}\n.ph.ph-blueprint:before {\n  content: \"\\eda0\";\n}\n.ph.ph-bluetooth:before {\n  content: \"\\e0da\";\n}\n.ph.ph-bluetooth-connected:before {\n  content: \"\\e0dc\";\n}\n.ph.ph-bluetooth-slash:before {\n  content: \"\\e0de\";\n}\n.ph.ph-bluetooth-x:before {\n  content: \"\\e0e0\";\n}\n.ph.ph-boat:before {\n  content: \"\\e786\";\n}\n.ph.ph-bomb:before {\n  content: \"\\ee0a\";\n}\n.ph.ph-bone:before {\n  content: \"\\e7f2\";\n}\n.ph.ph-book:before {\n  content: \"\\e0e2\";\n}\n.ph.ph-book-bookmark:before {\n  content: \"\\e0e4\";\n}\n.ph.ph-book-open:before {\n  content: \"\\e0e6\";\n}\n.ph.ph-book-open-text:before {\n  content: \"\\e8f2\";\n}\n.ph.ph-book-open-user:before {\n  content: \"\\ede0\";\n}\n.ph.ph-bookmark:before {\n  content: \"\\e0e8\";\n}\n.ph.ph-bookmark-simple:before {\n  content: \"\\e0ea\";\n}\n.ph.ph-bookmarks:before {\n  content: \"\\e0ec\";\n}\n.ph.ph-bookmarks-simple:before {\n  content: \"\\e5f0\";\n}\n.ph.ph-books:before {\n  content: \"\\e758\";\n}\n.ph.ph-boot:before {\n  content: \"\\ecca\";\n}\n.ph.ph-boules:before {\n  content: \"\\e722\";\n}\n.ph.ph-bounding-box:before {\n  content: \"\\e6ce\";\n}\n.ph.ph-bowl-food:before {\n  content: \"\\eaa4\";\n}\n.ph.ph-bowl-steam:before {\n  content: \"\\e8e4\";\n}\n.ph.ph-bowling-ball:before {\n  content: \"\\ea34\";\n}\n.ph.ph-box-arrow-down:before {\n  content: \"\\e00e\";\n}\n.ph.ph-archive-box:before {\n  content: \"\\e00e\";\n}\n.ph.ph-box-arrow-up:before {\n  content: \"\\ee54\";\n}\n.ph.ph-boxing-glove:before {\n  content: \"\\ea36\";\n}\n.ph.ph-brackets-angle:before {\n  content: \"\\e862\";\n}\n.ph.ph-brackets-curly:before {\n  content: \"\\e860\";\n}\n.ph.ph-brackets-round:before {\n  content: \"\\e864\";\n}\n.ph.ph-brackets-square:before {\n  content: \"\\e85e\";\n}\n.ph.ph-brain:before {\n  content: \"\\e74e\";\n}\n.ph.ph-brandy:before {\n  content: \"\\e6b4\";\n}\n.ph.ph-bread:before {\n  content: \"\\e81c\";\n}\n.ph.ph-bridge:before {\n  content: \"\\ea68\";\n}\n.ph.ph-briefcase:before {\n  content: \"\\e0ee\";\n}\n.ph.ph-briefcase-metal:before {\n  content: \"\\e5f2\";\n}\n.ph.ph-broadcast:before {\n  content: \"\\e0f2\";\n}\n.ph.ph-broom:before {\n  content: \"\\ec54\";\n}\n.ph.ph-browser:before {\n  content: \"\\e0f4\";\n}\n.ph.ph-browsers:before {\n  content: \"\\e0f6\";\n}\n.ph.ph-bug:before {\n  content: \"\\e5f4\";\n}\n.ph.ph-bug-beetle:before {\n  content: \"\\e5f6\";\n}\n.ph.ph-bug-droid:before {\n  content: \"\\e5f8\";\n}\n.ph.ph-building:before {\n  content: \"\\e100\";\n}\n.ph.ph-building-apartment:before {\n  content: \"\\e0fe\";\n}\n.ph.ph-building-office:before {\n  content: \"\\e0ff\";\n}\n.ph.ph-buildings:before {\n  content: \"\\e102\";\n}\n.ph.ph-bulldozer:before {\n  content: \"\\ec6c\";\n}\n.ph.ph-bus:before {\n  content: \"\\e106\";\n}\n.ph.ph-butterfly:before {\n  content: \"\\ea6e\";\n}\n.ph.ph-cable-car:before {\n  content: \"\\e49c\";\n}\n.ph.ph-cactus:before {\n  content: \"\\e918\";\n}\n.ph.ph-cake:before {\n  content: \"\\e780\";\n}\n.ph.ph-calculator:before {\n  content: \"\\e538\";\n}\n.ph.ph-calendar:before {\n  content: \"\\e108\";\n}\n.ph.ph-calendar-blank:before {\n  content: \"\\e10a\";\n}\n.ph.ph-calendar-check:before {\n  content: \"\\e712\";\n}\n.ph.ph-calendar-dot:before {\n  content: \"\\e7b2\";\n}\n.ph.ph-calendar-dots:before {\n  content: \"\\e7b4\";\n}\n.ph.ph-calendar-heart:before {\n  content: \"\\e8b0\";\n}\n.ph.ph-calendar-minus:before {\n  content: \"\\ea14\";\n}\n.ph.ph-calendar-plus:before {\n  content: \"\\e714\";\n}\n.ph.ph-calendar-slash:before {\n  content: \"\\ea12\";\n}\n.ph.ph-calendar-star:before {\n  content: \"\\e8b2\";\n}\n.ph.ph-calendar-x:before {\n  content: \"\\e10c\";\n}\n.ph.ph-call-bell:before {\n  content: \"\\e7de\";\n}\n.ph.ph-camera:before {\n  content: \"\\e10e\";\n}\n.ph.ph-camera-plus:before {\n  content: \"\\ec58\";\n}\n.ph.ph-camera-rotate:before {\n  content: \"\\e7a4\";\n}\n.ph.ph-camera-slash:before {\n  content: \"\\e110\";\n}\n.ph.ph-campfire:before {\n  content: \"\\e9d8\";\n}\n.ph.ph-car:before {\n  content: \"\\e112\";\n}\n.ph.ph-car-battery:before {\n  content: \"\\ee30\";\n}\n.ph.ph-car-profile:before {\n  content: \"\\e8cc\";\n}\n.ph.ph-car-simple:before {\n  content: \"\\e114\";\n}\n.ph.ph-cardholder:before {\n  content: \"\\e5fa\";\n}\n.ph.ph-cards:before {\n  content: \"\\e0f8\";\n}\n.ph.ph-cards-three:before {\n  content: \"\\ee50\";\n}\n.ph.ph-caret-circle-double-down:before {\n  content: \"\\e116\";\n}\n.ph.ph-caret-circle-double-left:before {\n  content: \"\\e118\";\n}\n.ph.ph-caret-circle-double-right:before {\n  content: \"\\e11a\";\n}\n.ph.ph-caret-circle-double-up:before {\n  content: \"\\e11c\";\n}\n.ph.ph-caret-circle-down:before {\n  content: \"\\e11e\";\n}\n.ph.ph-caret-circle-left:before {\n  content: \"\\e120\";\n}\n.ph.ph-caret-circle-right:before {\n  content: \"\\e122\";\n}\n.ph.ph-caret-circle-up:before {\n  content: \"\\e124\";\n}\n.ph.ph-caret-circle-up-down:before {\n  content: \"\\e13e\";\n}\n.ph.ph-caret-double-down:before {\n  content: \"\\e126\";\n}\n.ph.ph-caret-double-left:before {\n  content: \"\\e128\";\n}\n.ph.ph-caret-double-right:before {\n  content: \"\\e12a\";\n}\n.ph.ph-caret-double-up:before {\n  content: \"\\e12c\";\n}\n.ph.ph-caret-down:before {\n  content: \"\\e136\";\n}\n.ph.ph-caret-left:before {\n  content: \"\\e138\";\n}\n.ph.ph-caret-line-down:before {\n  content: \"\\e134\";\n}\n.ph.ph-caret-line-left:before {\n  content: \"\\e132\";\n}\n.ph.ph-caret-line-right:before {\n  content: \"\\e130\";\n}\n.ph.ph-caret-line-up:before {\n  content: \"\\e12e\";\n}\n.ph.ph-caret-right:before {\n  content: \"\\e13a\";\n}\n.ph.ph-caret-up:before {\n  content: \"\\e13c\";\n}\n.ph.ph-caret-up-down:before {\n  content: \"\\e140\";\n}\n.ph.ph-carrot:before {\n  content: \"\\ed38\";\n}\n.ph.ph-cash-register:before {\n  content: \"\\ed80\";\n}\n.ph.ph-cassette-tape:before {\n  content: \"\\ed2e\";\n}\n.ph.ph-castle-turret:before {\n  content: \"\\e9d0\";\n}\n.ph.ph-cat:before {\n  content: \"\\e748\";\n}\n.ph.ph-cell-signal-full:before {\n  content: \"\\e142\";\n}\n.ph.ph-cell-signal-high:before {\n  content: \"\\e144\";\n}\n.ph.ph-cell-signal-low:before {\n  content: \"\\e146\";\n}\n.ph.ph-cell-signal-medium:before {\n  content: \"\\e148\";\n}\n.ph.ph-cell-signal-none:before {\n  content: \"\\e14a\";\n}\n.ph.ph-cell-signal-slash:before {\n  content: \"\\e14c\";\n}\n.ph.ph-cell-signal-x:before {\n  content: \"\\e14e\";\n}\n.ph.ph-cell-tower:before {\n  content: \"\\ebaa\";\n}\n.ph.ph-certificate:before {\n  content: \"\\e766\";\n}\n.ph.ph-chair:before {\n  content: \"\\e950\";\n}\n.ph.ph-chalkboard:before {\n  content: \"\\e5fc\";\n}\n.ph.ph-chalkboard-simple:before {\n  content: \"\\e5fe\";\n}\n.ph.ph-chalkboard-teacher:before {\n  content: \"\\e600\";\n}\n.ph.ph-champagne:before {\n  content: \"\\eaca\";\n}\n.ph.ph-charging-station:before {\n  content: \"\\e8d0\";\n}\n.ph.ph-chart-bar:before {\n  content: \"\\e150\";\n}\n.ph.ph-chart-bar-horizontal:before {\n  content: \"\\e152\";\n}\n.ph.ph-chart-donut:before {\n  content: \"\\eaa6\";\n}\n.ph.ph-chart-line:before {\n  content: \"\\e154\";\n}\n.ph.ph-chart-line-down:before {\n  content: \"\\e8b6\";\n}\n.ph.ph-chart-line-up:before {\n  content: \"\\e156\";\n}\n.ph.ph-chart-pie:before {\n  content: \"\\e158\";\n}\n.ph.ph-chart-pie-slice:before {\n  content: \"\\e15a\";\n}\n.ph.ph-chart-polar:before {\n  content: \"\\eaa8\";\n}\n.ph.ph-chart-scatter:before {\n  content: \"\\eaac\";\n}\n.ph.ph-chat:before {\n  content: \"\\e15c\";\n}\n.ph.ph-chat-centered:before {\n  content: \"\\e160\";\n}\n.ph.ph-chat-centered-dots:before {\n  content: \"\\e164\";\n}\n.ph.ph-chat-centered-slash:before {\n  content: \"\\e162\";\n}\n.ph.ph-chat-centered-text:before {\n  content: \"\\e166\";\n}\n.ph.ph-chat-circle:before {\n  content: \"\\e168\";\n}\n.ph.ph-chat-circle-dots:before {\n  content: \"\\e16c\";\n}\n.ph.ph-chat-circle-slash:before {\n  content: \"\\e16a\";\n}\n.ph.ph-chat-circle-text:before {\n  content: \"\\e16e\";\n}\n.ph.ph-chat-dots:before {\n  content: \"\\e170\";\n}\n.ph.ph-chat-slash:before {\n  content: \"\\e15e\";\n}\n.ph.ph-chat-teardrop:before {\n  content: \"\\e172\";\n}\n.ph.ph-chat-teardrop-dots:before {\n  content: \"\\e176\";\n}\n.ph.ph-chat-teardrop-slash:before {\n  content: \"\\e174\";\n}\n.ph.ph-chat-teardrop-text:before {\n  content: \"\\e178\";\n}\n.ph.ph-chat-text:before {\n  content: \"\\e17a\";\n}\n.ph.ph-chats:before {\n  content: \"\\e17c\";\n}\n.ph.ph-chats-circle:before {\n  content: \"\\e17e\";\n}\n.ph.ph-chats-teardrop:before {\n  content: \"\\e180\";\n}\n.ph.ph-check:before {\n  content: \"\\e182\";\n}\n.ph.ph-check-circle:before {\n  content: \"\\e184\";\n}\n.ph.ph-check-fat:before {\n  content: \"\\eba6\";\n}\n.ph.ph-check-square:before {\n  content: \"\\e186\";\n}\n.ph.ph-check-square-offset:before {\n  content: \"\\e188\";\n}\n.ph.ph-checkerboard:before {\n  content: \"\\e8c4\";\n}\n.ph.ph-checks:before {\n  content: \"\\e53a\";\n}\n.ph.ph-cheers:before {\n  content: \"\\ea4a\";\n}\n.ph.ph-cheese:before {\n  content: \"\\e9fe\";\n}\n.ph.ph-chef-hat:before {\n  content: \"\\ed8e\";\n}\n.ph.ph-cherries:before {\n  content: \"\\e830\";\n}\n.ph.ph-church:before {\n  content: \"\\ecea\";\n}\n.ph.ph-cigarette:before {\n  content: \"\\ed90\";\n}\n.ph.ph-cigarette-slash:before {\n  content: \"\\ed92\";\n}\n.ph.ph-circle:before {\n  content: \"\\e18a\";\n}\n.ph.ph-circle-dashed:before {\n  content: \"\\e602\";\n}\n.ph.ph-circle-half:before {\n  content: \"\\e18c\";\n}\n.ph.ph-circle-half-tilt:before {\n  content: \"\\e18e\";\n}\n.ph.ph-circle-notch:before {\n  content: \"\\eb44\";\n}\n.ph.ph-circles-four:before {\n  content: \"\\e190\";\n}\n.ph.ph-circles-three:before {\n  content: \"\\e192\";\n}\n.ph.ph-circles-three-plus:before {\n  content: \"\\e194\";\n}\n.ph.ph-circuitry:before {\n  content: \"\\e9c2\";\n}\n.ph.ph-city:before {\n  content: \"\\ea6a\";\n}\n.ph.ph-clipboard:before {\n  content: \"\\e196\";\n}\n.ph.ph-clipboard-text:before {\n  content: \"\\e198\";\n}\n.ph.ph-clock:before {\n  content: \"\\e19a\";\n}\n.ph.ph-clock-afternoon:before {\n  content: \"\\e19c\";\n}\n.ph.ph-clock-clockwise:before {\n  content: \"\\e19e\";\n}\n.ph.ph-clock-countdown:before {\n  content: \"\\ed2c\";\n}\n.ph.ph-clock-counter-clockwise:before {\n  content: \"\\e1a0\";\n}\n.ph.ph-clock-user:before {\n  content: \"\\edec\";\n}\n.ph.ph-closed-captioning:before {\n  content: \"\\e1a4\";\n}\n.ph.ph-cloud:before {\n  content: \"\\e1aa\";\n}\n.ph.ph-cloud-arrow-down:before {\n  content: \"\\e1ac\";\n}\n.ph.ph-cloud-arrow-up:before {\n  content: \"\\e1ae\";\n}\n.ph.ph-cloud-check:before {\n  content: \"\\e1b0\";\n}\n.ph.ph-cloud-fog:before {\n  content: \"\\e53c\";\n}\n.ph.ph-cloud-lightning:before {\n  content: \"\\e1b2\";\n}\n.ph.ph-cloud-moon:before {\n  content: \"\\e53e\";\n}\n.ph.ph-cloud-rain:before {\n  content: \"\\e1b4\";\n}\n.ph.ph-cloud-slash:before {\n  content: \"\\e1b6\";\n}\n.ph.ph-cloud-snow:before {\n  content: \"\\e1b8\";\n}\n.ph.ph-cloud-sun:before {\n  content: \"\\e540\";\n}\n.ph.ph-cloud-warning:before {\n  content: \"\\ea98\";\n}\n.ph.ph-cloud-x:before {\n  content: \"\\ea96\";\n}\n.ph.ph-clover:before {\n  content: \"\\edc8\";\n}\n.ph.ph-club:before {\n  content: \"\\e1ba\";\n}\n.ph.ph-coat-hanger:before {\n  content: \"\\e7fe\";\n}\n.ph.ph-coda-logo:before {\n  content: \"\\e7ce\";\n}\n.ph.ph-code:before {\n  content: \"\\e1bc\";\n}\n.ph.ph-code-block:before {\n  content: \"\\eafe\";\n}\n.ph.ph-code-simple:before {\n  content: \"\\e1be\";\n}\n.ph.ph-codepen-logo:before {\n  content: \"\\e978\";\n}\n.ph.ph-codesandbox-logo:before {\n  content: \"\\ea06\";\n}\n.ph.ph-coffee:before {\n  content: \"\\e1c2\";\n}\n.ph.ph-coffee-bean:before {\n  content: \"\\e1c0\";\n}\n.ph.ph-coin:before {\n  content: \"\\e60e\";\n}\n.ph.ph-coin-vertical:before {\n  content: \"\\eb48\";\n}\n.ph.ph-coins:before {\n  content: \"\\e78e\";\n}\n.ph.ph-columns:before {\n  content: \"\\e546\";\n}\n.ph.ph-columns-plus-left:before {\n  content: \"\\e544\";\n}\n.ph.ph-columns-plus-right:before {\n  content: \"\\e542\";\n}\n.ph.ph-command:before {\n  content: \"\\e1c4\";\n}\n.ph.ph-compass:before {\n  content: \"\\e1c8\";\n}\n.ph.ph-compass-rose:before {\n  content: \"\\e1c6\";\n}\n.ph.ph-compass-tool:before {\n  content: \"\\ea0e\";\n}\n.ph.ph-computer-tower:before {\n  content: \"\\e548\";\n}\n.ph.ph-confetti:before {\n  content: \"\\e81a\";\n}\n.ph.ph-contactless-payment:before {\n  content: \"\\ed42\";\n}\n.ph.ph-control:before {\n  content: \"\\eca6\";\n}\n.ph.ph-cookie:before {\n  content: \"\\e6ca\";\n}\n.ph.ph-cooking-pot:before {\n  content: \"\\e764\";\n}\n.ph.ph-copy:before {\n  content: \"\\e1ca\";\n}\n.ph.ph-copy-simple:before {\n  content: \"\\e1cc\";\n}\n.ph.ph-copyleft:before {\n  content: \"\\e86a\";\n}\n.ph.ph-copyright:before {\n  content: \"\\e54a\";\n}\n.ph.ph-corners-in:before {\n  content: \"\\e1ce\";\n}\n.ph.ph-corners-out:before {\n  content: \"\\e1d0\";\n}\n.ph.ph-couch:before {\n  content: \"\\e7f6\";\n}\n.ph.ph-court-basketball:before {\n  content: \"\\ee36\";\n}\n.ph.ph-cow:before {\n  content: \"\\eabe\";\n}\n.ph.ph-cowboy-hat:before {\n  content: \"\\ed12\";\n}\n.ph.ph-cpu:before {\n  content: \"\\e610\";\n}\n.ph.ph-crane:before {\n  content: \"\\ed48\";\n}\n.ph.ph-crane-tower:before {\n  content: \"\\ed49\";\n}\n.ph.ph-credit-card:before {\n  content: \"\\e1d2\";\n}\n.ph.ph-cricket:before {\n  content: \"\\ee12\";\n}\n.ph.ph-crop:before {\n  content: \"\\e1d4\";\n}\n.ph.ph-cross:before {\n  content: \"\\e8a0\";\n}\n.ph.ph-crosshair:before {\n  content: \"\\e1d6\";\n}\n.ph.ph-crosshair-simple:before {\n  content: \"\\e1d8\";\n}\n.ph.ph-crown:before {\n  content: \"\\e614\";\n}\n.ph.ph-crown-cross:before {\n  content: \"\\ee5e\";\n}\n.ph.ph-crown-simple:before {\n  content: \"\\e616\";\n}\n.ph.ph-cube:before {\n  content: \"\\e1da\";\n}\n.ph.ph-cube-focus:before {\n  content: \"\\ed0a\";\n}\n.ph.ph-cube-transparent:before {\n  content: \"\\ec7c\";\n}\n.ph.ph-currency-btc:before {\n  content: \"\\e618\";\n}\n.ph.ph-currency-circle-dollar:before {\n  content: \"\\e54c\";\n}\n.ph.ph-currency-cny:before {\n  content: \"\\e54e\";\n}\n.ph.ph-currency-dollar:before {\n  content: \"\\e550\";\n}\n.ph.ph-currency-dollar-simple:before {\n  content: \"\\e552\";\n}\n.ph.ph-currency-eth:before {\n  content: \"\\eada\";\n}\n.ph.ph-currency-eur:before {\n  content: \"\\e554\";\n}\n.ph.ph-currency-gbp:before {\n  content: \"\\e556\";\n}\n.ph.ph-currency-inr:before {\n  content: \"\\e558\";\n}\n.ph.ph-currency-jpy:before {\n  content: \"\\e55a\";\n}\n.ph.ph-currency-krw:before {\n  content: \"\\e55c\";\n}\n.ph.ph-currency-kzt:before {\n  content: \"\\ec4c\";\n}\n.ph.ph-currency-ngn:before {\n  content: \"\\eb52\";\n}\n.ph.ph-currency-rub:before {\n  content: \"\\e55e\";\n}\n.ph.ph-cursor:before {\n  content: \"\\e1dc\";\n}\n.ph.ph-cursor-click:before {\n  content: \"\\e7c8\";\n}\n.ph.ph-cursor-text:before {\n  content: \"\\e7d8\";\n}\n.ph.ph-cylinder:before {\n  content: \"\\e8fc\";\n}\n.ph.ph-database:before {\n  content: \"\\e1de\";\n}\n.ph.ph-desk:before {\n  content: \"\\ed16\";\n}\n.ph.ph-desktop:before {\n  content: \"\\e560\";\n}\n.ph.ph-desktop-tower:before {\n  content: \"\\e562\";\n}\n.ph.ph-detective:before {\n  content: \"\\e83e\";\n}\n.ph.ph-dev-to-logo:before {\n  content: \"\\ed0e\";\n}\n.ph.ph-device-mobile:before {\n  content: \"\\e1e0\";\n}\n.ph.ph-device-mobile-camera:before {\n  content: \"\\e1e2\";\n}\n.ph.ph-device-mobile-slash:before {\n  content: \"\\ee46\";\n}\n.ph.ph-device-mobile-speaker:before {\n  content: \"\\e1e4\";\n}\n.ph.ph-device-rotate:before {\n  content: \"\\edf2\";\n}\n.ph.ph-device-tablet:before {\n  content: \"\\e1e6\";\n}\n.ph.ph-device-tablet-camera:before {\n  content: \"\\e1e8\";\n}\n.ph.ph-device-tablet-speaker:before {\n  content: \"\\e1ea\";\n}\n.ph.ph-devices:before {\n  content: \"\\eba4\";\n}\n.ph.ph-diamond:before {\n  content: \"\\e1ec\";\n}\n.ph.ph-diamonds-four:before {\n  content: \"\\e8f4\";\n}\n.ph.ph-dice-five:before {\n  content: \"\\e1ee\";\n}\n.ph.ph-dice-four:before {\n  content: \"\\e1f0\";\n}\n.ph.ph-dice-one:before {\n  content: \"\\e1f2\";\n}\n.ph.ph-dice-six:before {\n  content: \"\\e1f4\";\n}\n.ph.ph-dice-three:before {\n  content: \"\\e1f6\";\n}\n.ph.ph-dice-two:before {\n  content: \"\\e1f8\";\n}\n.ph.ph-disc:before {\n  content: \"\\e564\";\n}\n.ph.ph-disco-ball:before {\n  content: \"\\ed98\";\n}\n.ph.ph-discord-logo:before {\n  content: \"\\e61a\";\n}\n.ph.ph-divide:before {\n  content: \"\\e1fa\";\n}\n.ph.ph-dna:before {\n  content: \"\\e924\";\n}\n.ph.ph-dog:before {\n  content: \"\\e74a\";\n}\n.ph.ph-door:before {\n  content: \"\\e61c\";\n}\n.ph.ph-door-open:before {\n  content: \"\\e7e6\";\n}\n.ph.ph-dot:before {\n  content: \"\\ecde\";\n}\n.ph.ph-dot-outline:before {\n  content: \"\\ece0\";\n}\n.ph.ph-dots-nine:before {\n  content: \"\\e1fc\";\n}\n.ph.ph-dots-six:before {\n  content: \"\\e794\";\n}\n.ph.ph-dots-six-vertical:before {\n  content: \"\\eae2\";\n}\n.ph.ph-dots-three:before {\n  content: \"\\e1fe\";\n}\n.ph.ph-dots-three-circle:before {\n  content: \"\\e200\";\n}\n.ph.ph-dots-three-circle-vertical:before {\n  content: \"\\e202\";\n}\n.ph.ph-dots-three-outline:before {\n  content: \"\\e204\";\n}\n.ph.ph-dots-three-outline-vertical:before {\n  content: \"\\e206\";\n}\n.ph.ph-dots-three-vertical:before {\n  content: \"\\e208\";\n}\n.ph.ph-download:before {\n  content: \"\\e20a\";\n}\n.ph.ph-download-simple:before {\n  content: \"\\e20c\";\n}\n.ph.ph-dress:before {\n  content: \"\\ea7e\";\n}\n.ph.ph-dresser:before {\n  content: \"\\e94e\";\n}\n.ph.ph-dribbble-logo:before {\n  content: \"\\e20e\";\n}\n.ph.ph-drone:before {\n  content: \"\\ed74\";\n}\n.ph.ph-drop:before {\n  content: \"\\e210\";\n}\n.ph.ph-drop-half:before {\n  content: \"\\e566\";\n}\n.ph.ph-drop-half-bottom:before {\n  content: \"\\eb40\";\n}\n.ph.ph-drop-simple:before {\n  content: \"\\ee32\";\n}\n.ph.ph-drop-slash:before {\n  content: \"\\e954\";\n}\n.ph.ph-dropbox-logo:before {\n  content: \"\\e7d0\";\n}\n.ph.ph-ear:before {\n  content: \"\\e70c\";\n}\n.ph.ph-ear-slash:before {\n  content: \"\\e70e\";\n}\n.ph.ph-egg:before {\n  content: \"\\e812\";\n}\n.ph.ph-egg-crack:before {\n  content: \"\\eb64\";\n}\n.ph.ph-eject:before {\n  content: \"\\e212\";\n}\n.ph.ph-eject-simple:before {\n  content: \"\\e6ae\";\n}\n.ph.ph-elevator:before {\n  content: \"\\ecc0\";\n}\n.ph.ph-empty:before {\n  content: \"\\edbc\";\n}\n.ph.ph-engine:before {\n  content: \"\\ea80\";\n}\n.ph.ph-envelope:before {\n  content: \"\\e214\";\n}\n.ph.ph-envelope-open:before {\n  content: \"\\e216\";\n}\n.ph.ph-envelope-simple:before {\n  content: \"\\e218\";\n}\n.ph.ph-envelope-simple-open:before {\n  content: \"\\e21a\";\n}\n.ph.ph-equalizer:before {\n  content: \"\\ebbc\";\n}\n.ph.ph-equals:before {\n  content: \"\\e21c\";\n}\n.ph.ph-eraser:before {\n  content: \"\\e21e\";\n}\n.ph.ph-escalator-down:before {\n  content: \"\\ecba\";\n}\n.ph.ph-escalator-up:before {\n  content: \"\\ecbc\";\n}\n.ph.ph-exam:before {\n  content: \"\\e742\";\n}\n.ph.ph-exclamation-mark:before {\n  content: \"\\ee44\";\n}\n.ph.ph-exclude:before {\n  content: \"\\e882\";\n}\n.ph.ph-exclude-square:before {\n  content: \"\\e880\";\n}\n.ph.ph-export:before {\n  content: \"\\eaf0\";\n}\n.ph.ph-eye:before {\n  content: \"\\e220\";\n}\n.ph.ph-eye-closed:before {\n  content: \"\\e222\";\n}\n.ph.ph-eye-slash:before {\n  content: \"\\e224\";\n}\n.ph.ph-eyedropper:before {\n  content: \"\\e568\";\n}\n.ph.ph-eyedropper-sample:before {\n  content: \"\\eac4\";\n}\n.ph.ph-eyeglasses:before {\n  content: \"\\e7ba\";\n}\n.ph.ph-eyes:before {\n  content: \"\\ee5c\";\n}\n.ph.ph-face-mask:before {\n  content: \"\\e56a\";\n}\n.ph.ph-facebook-logo:before {\n  content: \"\\e226\";\n}\n.ph.ph-factory:before {\n  content: \"\\e760\";\n}\n.ph.ph-faders:before {\n  content: \"\\e228\";\n}\n.ph.ph-faders-horizontal:before {\n  content: \"\\e22a\";\n}\n.ph.ph-fallout-shelter:before {\n  content: \"\\e9de\";\n}\n.ph.ph-fan:before {\n  content: \"\\e9f2\";\n}\n.ph.ph-farm:before {\n  content: \"\\ec70\";\n}\n.ph.ph-fast-forward:before {\n  content: \"\\e6a6\";\n}\n.ph.ph-fast-forward-circle:before {\n  content: \"\\e22c\";\n}\n.ph.ph-feather:before {\n  content: \"\\e9c0\";\n}\n.ph.ph-fediverse-logo:before {\n  content: \"\\ed66\";\n}\n.ph.ph-figma-logo:before {\n  content: \"\\e22e\";\n}\n.ph.ph-file:before {\n  content: \"\\e230\";\n}\n.ph.ph-file-archive:before {\n  content: \"\\eb2a\";\n}\n.ph.ph-file-arrow-down:before {\n  content: \"\\e232\";\n}\n.ph.ph-file-arrow-up:before {\n  content: \"\\e61e\";\n}\n.ph.ph-file-audio:before {\n  content: \"\\ea20\";\n}\n.ph.ph-file-c:before {\n  content: \"\\eb32\";\n}\n.ph.ph-file-c-sharp:before {\n  content: \"\\eb30\";\n}\n.ph.ph-file-cloud:before {\n  content: \"\\e95e\";\n}\n.ph.ph-file-code:before {\n  content: \"\\e914\";\n}\n.ph.ph-file-cpp:before {\n  content: \"\\eb2e\";\n}\n.ph.ph-file-css:before {\n  content: \"\\eb34\";\n}\n.ph.ph-file-csv:before {\n  content: \"\\eb1c\";\n}\n.ph.ph-file-dashed:before {\n  content: \"\\e704\";\n}\n.ph.ph-file-dotted:before {\n  content: \"\\e704\";\n}\n.ph.ph-file-doc:before {\n  content: \"\\eb1e\";\n}\n.ph.ph-file-html:before {\n  content: \"\\eb38\";\n}\n.ph.ph-file-image:before {\n  content: \"\\ea24\";\n}\n.ph.ph-file-ini:before {\n  content: \"\\eb33\";\n}\n.ph.ph-file-jpg:before {\n  content: \"\\eb1a\";\n}\n.ph.ph-file-js:before {\n  content: \"\\eb24\";\n}\n.ph.ph-file-jsx:before {\n  content: \"\\eb3a\";\n}\n.ph.ph-file-lock:before {\n  content: \"\\e95c\";\n}\n.ph.ph-file-magnifying-glass:before {\n  content: \"\\e238\";\n}\n.ph.ph-file-search:before {\n  content: \"\\e238\";\n}\n.ph.ph-file-md:before {\n  content: \"\\ed50\";\n}\n.ph.ph-file-minus:before {\n  content: \"\\e234\";\n}\n.ph.ph-file-pdf:before {\n  content: \"\\e702\";\n}\n.ph.ph-file-plus:before {\n  content: \"\\e236\";\n}\n.ph.ph-file-png:before {\n  content: \"\\eb18\";\n}\n.ph.ph-file-ppt:before {\n  content: \"\\eb20\";\n}\n.ph.ph-file-py:before {\n  content: \"\\eb2c\";\n}\n.ph.ph-file-rs:before {\n  content: \"\\eb28\";\n}\n.ph.ph-file-sql:before {\n  content: \"\\ed4e\";\n}\n.ph.ph-file-svg:before {\n  content: \"\\ed08\";\n}\n.ph.ph-file-text:before {\n  content: \"\\e23a\";\n}\n.ph.ph-file-ts:before {\n  content: \"\\eb26\";\n}\n.ph.ph-file-tsx:before {\n  content: \"\\eb3c\";\n}\n.ph.ph-file-txt:before {\n  content: \"\\eb35\";\n}\n.ph.ph-file-video:before {\n  content: \"\\ea22\";\n}\n.ph.ph-file-vue:before {\n  content: \"\\eb3e\";\n}\n.ph.ph-file-x:before {\n  content: \"\\e23c\";\n}\n.ph.ph-file-xls:before {\n  content: \"\\eb22\";\n}\n.ph.ph-file-zip:before {\n  content: \"\\e958\";\n}\n.ph.ph-files:before {\n  content: \"\\e710\";\n}\n.ph.ph-film-reel:before {\n  content: \"\\e8c0\";\n}\n.ph.ph-film-script:before {\n  content: \"\\eb50\";\n}\n.ph.ph-film-slate:before {\n  content: \"\\e8c2\";\n}\n.ph.ph-film-strip:before {\n  content: \"\\e792\";\n}\n.ph.ph-fingerprint:before {\n  content: \"\\e23e\";\n}\n.ph.ph-fingerprint-simple:before {\n  content: \"\\e240\";\n}\n.ph.ph-finn-the-human:before {\n  content: \"\\e56c\";\n}\n.ph.ph-fire:before {\n  content: \"\\e242\";\n}\n.ph.ph-fire-extinguisher:before {\n  content: \"\\e9e8\";\n}\n.ph.ph-fire-simple:before {\n  content: \"\\e620\";\n}\n.ph.ph-fire-truck:before {\n  content: \"\\e574\";\n}\n.ph.ph-first-aid:before {\n  content: \"\\e56e\";\n}\n.ph.ph-first-aid-kit:before {\n  content: \"\\e570\";\n}\n.ph.ph-fish:before {\n  content: \"\\e728\";\n}\n.ph.ph-fish-simple:before {\n  content: \"\\e72a\";\n}\n.ph.ph-flag:before {\n  content: \"\\e244\";\n}\n.ph.ph-flag-banner:before {\n  content: \"\\e622\";\n}\n.ph.ph-flag-banner-fold:before {\n  content: \"\\ecf2\";\n}\n.ph.ph-flag-checkered:before {\n  content: \"\\ea38\";\n}\n.ph.ph-flag-pennant:before {\n  content: \"\\ecf0\";\n}\n.ph.ph-flame:before {\n  content: \"\\e624\";\n}\n.ph.ph-flashlight:before {\n  content: \"\\e246\";\n}\n.ph.ph-flask:before {\n  content: \"\\e79e\";\n}\n.ph.ph-flip-horizontal:before {\n  content: \"\\ed6a\";\n}\n.ph.ph-flip-vertical:before {\n  content: \"\\ed6c\";\n}\n.ph.ph-floppy-disk:before {\n  content: \"\\e248\";\n}\n.ph.ph-floppy-disk-back:before {\n  content: \"\\eaf4\";\n}\n.ph.ph-flow-arrow:before {\n  content: \"\\e6ec\";\n}\n.ph.ph-flower:before {\n  content: \"\\e75e\";\n}\n.ph.ph-flower-lotus:before {\n  content: \"\\e6cc\";\n}\n.ph.ph-flower-tulip:before {\n  content: \"\\eacc\";\n}\n.ph.ph-flying-saucer:before {\n  content: \"\\eb4a\";\n}\n.ph.ph-folder:before {\n  content: \"\\e24a\";\n}\n.ph.ph-folder-notch:before {\n  content: \"\\e24a\";\n}\n.ph.ph-folder-dashed:before {\n  content: \"\\e8f8\";\n}\n.ph.ph-folder-dotted:before {\n  content: \"\\e8f8\";\n}\n.ph.ph-folder-lock:before {\n  content: \"\\ea3c\";\n}\n.ph.ph-folder-minus:before {\n  content: \"\\e254\";\n}\n.ph.ph-folder-notch-minus:before {\n  content: \"\\e254\";\n}\n.ph.ph-folder-open:before {\n  content: \"\\e256\";\n}\n.ph.ph-folder-notch-open:before {\n  content: \"\\e256\";\n}\n.ph.ph-folder-plus:before {\n  content: \"\\e258\";\n}\n.ph.ph-folder-notch-plus:before {\n  content: \"\\e258\";\n}\n.ph.ph-folder-simple:before {\n  content: \"\\e25a\";\n}\n.ph.ph-folder-simple-dashed:before {\n  content: \"\\ec2a\";\n}\n.ph.ph-folder-simple-dotted:before {\n  content: \"\\ec2a\";\n}\n.ph.ph-folder-simple-lock:before {\n  content: \"\\eb5e\";\n}\n.ph.ph-folder-simple-minus:before {\n  content: \"\\e25c\";\n}\n.ph.ph-folder-simple-plus:before {\n  content: \"\\e25e\";\n}\n.ph.ph-folder-simple-star:before {\n  content: \"\\ec2e\";\n}\n.ph.ph-folder-simple-user:before {\n  content: \"\\eb60\";\n}\n.ph.ph-folder-star:before {\n  content: \"\\ea86\";\n}\n.ph.ph-folder-user:before {\n  content: \"\\eb46\";\n}\n.ph.ph-folders:before {\n  content: \"\\e260\";\n}\n.ph.ph-football:before {\n  content: \"\\e718\";\n}\n.ph.ph-football-helmet:before {\n  content: \"\\ee4c\";\n}\n.ph.ph-footprints:before {\n  content: \"\\ea88\";\n}\n.ph.ph-fork-knife:before {\n  content: \"\\e262\";\n}\n.ph.ph-four-k:before {\n  content: \"\\ea5c\";\n}\n.ph.ph-frame-corners:before {\n  content: \"\\e626\";\n}\n.ph.ph-framer-logo:before {\n  content: \"\\e264\";\n}\n.ph.ph-function:before {\n  content: \"\\ebe4\";\n}\n.ph.ph-funnel:before {\n  content: \"\\e266\";\n}\n.ph.ph-funnel-simple:before {\n  content: \"\\e268\";\n}\n.ph.ph-funnel-simple-x:before {\n  content: \"\\e26a\";\n}\n.ph.ph-funnel-x:before {\n  content: \"\\e26c\";\n}\n.ph.ph-game-controller:before {\n  content: \"\\e26e\";\n}\n.ph.ph-garage:before {\n  content: \"\\ecd6\";\n}\n.ph.ph-gas-can:before {\n  content: \"\\e8ce\";\n}\n.ph.ph-gas-pump:before {\n  content: \"\\e768\";\n}\n.ph.ph-gauge:before {\n  content: \"\\e628\";\n}\n.ph.ph-gavel:before {\n  content: \"\\ea32\";\n}\n.ph.ph-gear:before {\n  content: \"\\e270\";\n}\n.ph.ph-gear-fine:before {\n  content: \"\\e87c\";\n}\n.ph.ph-gear-six:before {\n  content: \"\\e272\";\n}\n.ph.ph-gender-female:before {\n  content: \"\\e6e0\";\n}\n.ph.ph-gender-intersex:before {\n  content: \"\\e6e6\";\n}\n.ph.ph-gender-male:before {\n  content: \"\\e6e2\";\n}\n.ph.ph-gender-neuter:before {\n  content: \"\\e6ea\";\n}\n.ph.ph-gender-nonbinary:before {\n  content: \"\\e6e4\";\n}\n.ph.ph-gender-transgender:before {\n  content: \"\\e6e8\";\n}\n.ph.ph-ghost:before {\n  content: \"\\e62a\";\n}\n.ph.ph-gif:before {\n  content: \"\\e274\";\n}\n.ph.ph-gift:before {\n  content: \"\\e276\";\n}\n.ph.ph-git-branch:before {\n  content: \"\\e278\";\n}\n.ph.ph-git-commit:before {\n  content: \"\\e27a\";\n}\n.ph.ph-git-diff:before {\n  content: \"\\e27c\";\n}\n.ph.ph-git-fork:before {\n  content: \"\\e27e\";\n}\n.ph.ph-git-merge:before {\n  content: \"\\e280\";\n}\n.ph.ph-git-pull-request:before {\n  content: \"\\e282\";\n}\n.ph.ph-github-logo:before {\n  content: \"\\e576\";\n}\n.ph.ph-gitlab-logo:before {\n  content: \"\\e694\";\n}\n.ph.ph-gitlab-logo-simple:before {\n  content: \"\\e696\";\n}\n.ph.ph-globe:before {\n  content: \"\\e288\";\n}\n.ph.ph-globe-hemisphere-east:before {\n  content: \"\\e28a\";\n}\n.ph.ph-globe-hemisphere-west:before {\n  content: \"\\e28c\";\n}\n.ph.ph-globe-simple:before {\n  content: \"\\e28e\";\n}\n.ph.ph-globe-simple-x:before {\n  content: \"\\e284\";\n}\n.ph.ph-globe-stand:before {\n  content: \"\\e290\";\n}\n.ph.ph-globe-x:before {\n  content: \"\\e286\";\n}\n.ph.ph-goggles:before {\n  content: \"\\ecb4\";\n}\n.ph.ph-golf:before {\n  content: \"\\ea3e\";\n}\n.ph.ph-goodreads-logo:before {\n  content: \"\\ed10\";\n}\n.ph.ph-google-cardboard-logo:before {\n  content: \"\\e7b6\";\n}\n.ph.ph-google-chrome-logo:before {\n  content: \"\\e976\";\n}\n.ph.ph-google-drive-logo:before {\n  content: \"\\e8f6\";\n}\n.ph.ph-google-logo:before {\n  content: \"\\e292\";\n}\n.ph.ph-google-photos-logo:before {\n  content: \"\\eb92\";\n}\n.ph.ph-google-play-logo:before {\n  content: \"\\e294\";\n}\n.ph.ph-google-podcasts-logo:before {\n  content: \"\\eb94\";\n}\n.ph.ph-gps:before {\n  content: \"\\edd8\";\n}\n.ph.ph-gps-fix:before {\n  content: \"\\edd6\";\n}\n.ph.ph-gps-slash:before {\n  content: \"\\edd4\";\n}\n.ph.ph-gradient:before {\n  content: \"\\eb42\";\n}\n.ph.ph-graduation-cap:before {\n  content: \"\\e62c\";\n}\n.ph.ph-grains:before {\n  content: \"\\ec68\";\n}\n.ph.ph-grains-slash:before {\n  content: \"\\ec6a\";\n}\n.ph.ph-graph:before {\n  content: \"\\eb58\";\n}\n.ph.ph-graphics-card:before {\n  content: \"\\e612\";\n}\n.ph.ph-greater-than:before {\n  content: \"\\edc4\";\n}\n.ph.ph-greater-than-or-equal:before {\n  content: \"\\eda2\";\n}\n.ph.ph-grid-four:before {\n  content: \"\\e296\";\n}\n.ph.ph-grid-nine:before {\n  content: \"\\ec8c\";\n}\n.ph.ph-guitar:before {\n  content: \"\\ea8a\";\n}\n.ph.ph-hair-dryer:before {\n  content: \"\\ea66\";\n}\n.ph.ph-hamburger:before {\n  content: \"\\e790\";\n}\n.ph.ph-hammer:before {\n  content: \"\\e80e\";\n}\n.ph.ph-hand:before {\n  content: \"\\e298\";\n}\n.ph.ph-hand-arrow-down:before {\n  content: \"\\ea4e\";\n}\n.ph.ph-hand-arrow-up:before {\n  content: \"\\ee5a\";\n}\n.ph.ph-hand-coins:before {\n  content: \"\\ea8c\";\n}\n.ph.ph-hand-deposit:before {\n  content: \"\\ee82\";\n}\n.ph.ph-hand-eye:before {\n  content: \"\\ea4c\";\n}\n.ph.ph-hand-fist:before {\n  content: \"\\e57a\";\n}\n.ph.ph-hand-grabbing:before {\n  content: \"\\e57c\";\n}\n.ph.ph-hand-heart:before {\n  content: \"\\e810\";\n}\n.ph.ph-hand-palm:before {\n  content: \"\\e57e\";\n}\n.ph.ph-hand-peace:before {\n  content: \"\\e7cc\";\n}\n.ph.ph-hand-pointing:before {\n  content: \"\\e29a\";\n}\n.ph.ph-hand-soap:before {\n  content: \"\\e630\";\n}\n.ph.ph-hand-swipe-left:before {\n  content: \"\\ec94\";\n}\n.ph.ph-hand-swipe-right:before {\n  content: \"\\ec92\";\n}\n.ph.ph-hand-tap:before {\n  content: \"\\ec90\";\n}\n.ph.ph-hand-waving:before {\n  content: \"\\e580\";\n}\n.ph.ph-hand-withdraw:before {\n  content: \"\\ee80\";\n}\n.ph.ph-handbag:before {\n  content: \"\\e29c\";\n}\n.ph.ph-handbag-simple:before {\n  content: \"\\e62e\";\n}\n.ph.ph-hands-clapping:before {\n  content: \"\\e6a0\";\n}\n.ph.ph-hands-praying:before {\n  content: \"\\ecc8\";\n}\n.ph.ph-handshake:before {\n  content: \"\\e582\";\n}\n.ph.ph-hard-drive:before {\n  content: \"\\e29e\";\n}\n.ph.ph-hard-drives:before {\n  content: \"\\e2a0\";\n}\n.ph.ph-hard-hat:before {\n  content: \"\\ed46\";\n}\n.ph.ph-hash:before {\n  content: \"\\e2a2\";\n}\n.ph.ph-hash-straight:before {\n  content: \"\\e2a4\";\n}\n.ph.ph-head-circuit:before {\n  content: \"\\e7d4\";\n}\n.ph.ph-headlights:before {\n  content: \"\\e6fe\";\n}\n.ph.ph-headphones:before {\n  content: \"\\e2a6\";\n}\n.ph.ph-headset:before {\n  content: \"\\e584\";\n}\n.ph.ph-heart:before {\n  content: \"\\e2a8\";\n}\n.ph.ph-heart-break:before {\n  content: \"\\ebe8\";\n}\n.ph.ph-heart-half:before {\n  content: \"\\ec48\";\n}\n.ph.ph-heart-straight:before {\n  content: \"\\e2aa\";\n}\n.ph.ph-heart-straight-break:before {\n  content: \"\\eb98\";\n}\n.ph.ph-heartbeat:before {\n  content: \"\\e2ac\";\n}\n.ph.ph-hexagon:before {\n  content: \"\\e2ae\";\n}\n.ph.ph-high-definition:before {\n  content: \"\\ea8e\";\n}\n.ph.ph-high-heel:before {\n  content: \"\\e8e8\";\n}\n.ph.ph-highlighter:before {\n  content: \"\\ec76\";\n}\n.ph.ph-highlighter-circle:before {\n  content: \"\\e632\";\n}\n.ph.ph-hockey:before {\n  content: \"\\ec86\";\n}\n.ph.ph-hoodie:before {\n  content: \"\\ecd0\";\n}\n.ph.ph-horse:before {\n  content: \"\\e2b0\";\n}\n.ph.ph-hospital:before {\n  content: \"\\e844\";\n}\n.ph.ph-hourglass:before {\n  content: \"\\e2b2\";\n}\n.ph.ph-hourglass-high:before {\n  content: \"\\e2b4\";\n}\n.ph.ph-hourglass-low:before {\n  content: \"\\e2b6\";\n}\n.ph.ph-hourglass-medium:before {\n  content: \"\\e2b8\";\n}\n.ph.ph-hourglass-simple:before {\n  content: \"\\e2ba\";\n}\n.ph.ph-hourglass-simple-high:before {\n  content: \"\\e2bc\";\n}\n.ph.ph-hourglass-simple-low:before {\n  content: \"\\e2be\";\n}\n.ph.ph-hourglass-simple-medium:before {\n  content: \"\\e2c0\";\n}\n.ph.ph-house:before {\n  content: \"\\e2c2\";\n}\n.ph.ph-house-line:before {\n  content: \"\\e2c4\";\n}\n.ph.ph-house-simple:before {\n  content: \"\\e2c6\";\n}\n.ph.ph-hurricane:before {\n  content: \"\\e88e\";\n}\n.ph.ph-ice-cream:before {\n  content: \"\\e804\";\n}\n.ph.ph-identification-badge:before {\n  content: \"\\e6f6\";\n}\n.ph.ph-identification-card:before {\n  content: \"\\e2c8\";\n}\n.ph.ph-image:before {\n  content: \"\\e2ca\";\n}\n.ph.ph-image-broken:before {\n  content: \"\\e7a8\";\n}\n.ph.ph-image-square:before {\n  content: \"\\e2cc\";\n}\n.ph.ph-images:before {\n  content: \"\\e836\";\n}\n.ph.ph-images-square:before {\n  content: \"\\e834\";\n}\n.ph.ph-infinity:before {\n  content: \"\\e634\";\n}\n.ph.ph-lemniscate:before {\n  content: \"\\e634\";\n}\n.ph.ph-info:before {\n  content: \"\\e2ce\";\n}\n.ph.ph-instagram-logo:before {\n  content: \"\\e2d0\";\n}\n.ph.ph-intersect:before {\n  content: \"\\e2d2\";\n}\n.ph.ph-intersect-square:before {\n  content: \"\\e87a\";\n}\n.ph.ph-intersect-three:before {\n  content: \"\\ecc4\";\n}\n.ph.ph-intersection:before {\n  content: \"\\edba\";\n}\n.ph.ph-invoice:before {\n  content: \"\\ee42\";\n}\n.ph.ph-island:before {\n  content: \"\\ee06\";\n}\n.ph.ph-jar:before {\n  content: \"\\e7e0\";\n}\n.ph.ph-jar-label:before {\n  content: \"\\e7e1\";\n}\n.ph.ph-jeep:before {\n  content: \"\\e2d4\";\n}\n.ph.ph-joystick:before {\n  content: \"\\ea5e\";\n}\n.ph.ph-kanban:before {\n  content: \"\\eb54\";\n}\n.ph.ph-key:before {\n  content: \"\\e2d6\";\n}\n.ph.ph-key-return:before {\n  content: \"\\e782\";\n}\n.ph.ph-keyboard:before {\n  content: \"\\e2d8\";\n}\n.ph.ph-keyhole:before {\n  content: \"\\ea78\";\n}\n.ph.ph-knife:before {\n  content: \"\\e636\";\n}\n.ph.ph-ladder:before {\n  content: \"\\e9e4\";\n}\n.ph.ph-ladder-simple:before {\n  content: \"\\ec26\";\n}\n.ph.ph-lamp:before {\n  content: \"\\e638\";\n}\n.ph.ph-lamp-pendant:before {\n  content: \"\\ee2e\";\n}\n.ph.ph-laptop:before {\n  content: \"\\e586\";\n}\n.ph.ph-lasso:before {\n  content: \"\\edc6\";\n}\n.ph.ph-lastfm-logo:before {\n  content: \"\\e842\";\n}\n.ph.ph-layout:before {\n  content: \"\\e6d6\";\n}\n.ph.ph-leaf:before {\n  content: \"\\e2da\";\n}\n.ph.ph-lectern:before {\n  content: \"\\e95a\";\n}\n.ph.ph-lego:before {\n  content: \"\\e8c6\";\n}\n.ph.ph-lego-smiley:before {\n  content: \"\\e8c7\";\n}\n.ph.ph-less-than:before {\n  content: \"\\edac\";\n}\n.ph.ph-less-than-or-equal:before {\n  content: \"\\eda4\";\n}\n.ph.ph-letter-circle-h:before {\n  content: \"\\ebf8\";\n}\n.ph.ph-letter-circle-p:before {\n  content: \"\\ec08\";\n}\n.ph.ph-letter-circle-v:before {\n  content: \"\\ec14\";\n}\n.ph.ph-lifebuoy:before {\n  content: \"\\e63a\";\n}\n.ph.ph-lightbulb:before {\n  content: \"\\e2dc\";\n}\n.ph.ph-lightbulb-filament:before {\n  content: \"\\e63c\";\n}\n.ph.ph-lighthouse:before {\n  content: \"\\e9f6\";\n}\n.ph.ph-lightning:before {\n  content: \"\\e2de\";\n}\n.ph.ph-lightning-a:before {\n  content: \"\\ea84\";\n}\n.ph.ph-lightning-slash:before {\n  content: \"\\e2e0\";\n}\n.ph.ph-line-segment:before {\n  content: \"\\e6d2\";\n}\n.ph.ph-line-segments:before {\n  content: \"\\e6d4\";\n}\n.ph.ph-line-vertical:before {\n  content: \"\\ed70\";\n}\n.ph.ph-link:before {\n  content: \"\\e2e2\";\n}\n.ph.ph-link-break:before {\n  content: \"\\e2e4\";\n}\n.ph.ph-link-simple:before {\n  content: \"\\e2e6\";\n}\n.ph.ph-link-simple-break:before {\n  content: \"\\e2e8\";\n}\n.ph.ph-link-simple-horizontal:before {\n  content: \"\\e2ea\";\n}\n.ph.ph-link-simple-horizontal-break:before {\n  content: \"\\e2ec\";\n}\n.ph.ph-linkedin-logo:before {\n  content: \"\\e2ee\";\n}\n.ph.ph-linktree-logo:before {\n  content: \"\\edee\";\n}\n.ph.ph-linux-logo:before {\n  content: \"\\eb02\";\n}\n.ph.ph-list:before {\n  content: \"\\e2f0\";\n}\n.ph.ph-list-bullets:before {\n  content: \"\\e2f2\";\n}\n.ph.ph-list-checks:before {\n  content: \"\\eadc\";\n}\n.ph.ph-list-dashes:before {\n  content: \"\\e2f4\";\n}\n.ph.ph-list-heart:before {\n  content: \"\\ebde\";\n}\n.ph.ph-list-magnifying-glass:before {\n  content: \"\\ebe0\";\n}\n.ph.ph-list-numbers:before {\n  content: \"\\e2f6\";\n}\n.ph.ph-list-plus:before {\n  content: \"\\e2f8\";\n}\n.ph.ph-list-star:before {\n  content: \"\\ebdc\";\n}\n.ph.ph-lock:before {\n  content: \"\\e2fa\";\n}\n.ph.ph-lock-key:before {\n  content: \"\\e2fe\";\n}\n.ph.ph-lock-key-open:before {\n  content: \"\\e300\";\n}\n.ph.ph-lock-laminated:before {\n  content: \"\\e302\";\n}\n.ph.ph-lock-laminated-open:before {\n  content: \"\\e304\";\n}\n.ph.ph-lock-open:before {\n  content: \"\\e306\";\n}\n.ph.ph-lock-simple:before {\n  content: \"\\e308\";\n}\n.ph.ph-lock-simple-open:before {\n  content: \"\\e30a\";\n}\n.ph.ph-lockers:before {\n  content: \"\\ecb8\";\n}\n.ph.ph-log:before {\n  content: \"\\ed82\";\n}\n.ph.ph-magic-wand:before {\n  content: \"\\e6b6\";\n}\n.ph.ph-magnet:before {\n  content: \"\\e680\";\n}\n.ph.ph-magnet-straight:before {\n  content: \"\\e682\";\n}\n.ph.ph-magnifying-glass:before {\n  content: \"\\e30c\";\n}\n.ph.ph-magnifying-glass-minus:before {\n  content: \"\\e30e\";\n}\n.ph.ph-magnifying-glass-plus:before {\n  content: \"\\e310\";\n}\n.ph.ph-mailbox:before {\n  content: \"\\ec1e\";\n}\n.ph.ph-map-pin:before {\n  content: \"\\e316\";\n}\n.ph.ph-map-pin-area:before {\n  content: \"\\ee3a\";\n}\n.ph.ph-map-pin-line:before {\n  content: \"\\e318\";\n}\n.ph.ph-map-pin-plus:before {\n  content: \"\\e314\";\n}\n.ph.ph-map-pin-simple:before {\n  content: \"\\ee3e\";\n}\n.ph.ph-map-pin-simple-area:before {\n  content: \"\\ee3c\";\n}\n.ph.ph-map-pin-simple-line:before {\n  content: \"\\ee38\";\n}\n.ph.ph-map-trifold:before {\n  content: \"\\e31a\";\n}\n.ph.ph-markdown-logo:before {\n  content: \"\\e508\";\n}\n.ph.ph-marker-circle:before {\n  content: \"\\e640\";\n}\n.ph.ph-martini:before {\n  content: \"\\e31c\";\n}\n.ph.ph-mask-happy:before {\n  content: \"\\e9f4\";\n}\n.ph.ph-mask-sad:before {\n  content: \"\\eb9e\";\n}\n.ph.ph-mastodon-logo:before {\n  content: \"\\ed68\";\n}\n.ph.ph-math-operations:before {\n  content: \"\\e31e\";\n}\n.ph.ph-matrix-logo:before {\n  content: \"\\ed64\";\n}\n.ph.ph-medal:before {\n  content: \"\\e320\";\n}\n.ph.ph-medal-military:before {\n  content: \"\\ecfc\";\n}\n.ph.ph-medium-logo:before {\n  content: \"\\e322\";\n}\n.ph.ph-megaphone:before {\n  content: \"\\e324\";\n}\n.ph.ph-megaphone-simple:before {\n  content: \"\\e642\";\n}\n.ph.ph-member-of:before {\n  content: \"\\edc2\";\n}\n.ph.ph-memory:before {\n  content: \"\\e9c4\";\n}\n.ph.ph-messenger-logo:before {\n  content: \"\\e6d8\";\n}\n.ph.ph-meta-logo:before {\n  content: \"\\ed02\";\n}\n.ph.ph-meteor:before {\n  content: \"\\e9ba\";\n}\n.ph.ph-metronome:before {\n  content: \"\\ec8e\";\n}\n.ph.ph-microphone:before {\n  content: \"\\e326\";\n}\n.ph.ph-microphone-slash:before {\n  content: \"\\e328\";\n}\n.ph.ph-microphone-stage:before {\n  content: \"\\e75c\";\n}\n.ph.ph-microscope:before {\n  content: \"\\ec7a\";\n}\n.ph.ph-microsoft-excel-logo:before {\n  content: \"\\eb6c\";\n}\n.ph.ph-microsoft-outlook-logo:before {\n  content: \"\\eb70\";\n}\n.ph.ph-microsoft-powerpoint-logo:before {\n  content: \"\\eace\";\n}\n.ph.ph-microsoft-teams-logo:before {\n  content: \"\\eb66\";\n}\n.ph.ph-microsoft-word-logo:before {\n  content: \"\\eb6a\";\n}\n.ph.ph-minus:before {\n  content: \"\\e32a\";\n}\n.ph.ph-minus-circle:before {\n  content: \"\\e32c\";\n}\n.ph.ph-minus-square:before {\n  content: \"\\ed4c\";\n}\n.ph.ph-money:before {\n  content: \"\\e588\";\n}\n.ph.ph-money-wavy:before {\n  content: \"\\ee68\";\n}\n.ph.ph-monitor:before {\n  content: \"\\e32e\";\n}\n.ph.ph-monitor-arrow-up:before {\n  content: \"\\e58a\";\n}\n.ph.ph-monitor-play:before {\n  content: \"\\e58c\";\n}\n.ph.ph-moon:before {\n  content: \"\\e330\";\n}\n.ph.ph-moon-stars:before {\n  content: \"\\e58e\";\n}\n.ph.ph-moped:before {\n  content: \"\\e824\";\n}\n.ph.ph-moped-front:before {\n  content: \"\\e822\";\n}\n.ph.ph-mosque:before {\n  content: \"\\ecee\";\n}\n.ph.ph-motorcycle:before {\n  content: \"\\e80a\";\n}\n.ph.ph-mountains:before {\n  content: \"\\e7ae\";\n}\n.ph.ph-mouse:before {\n  content: \"\\e33a\";\n}\n.ph.ph-mouse-left-click:before {\n  content: \"\\e334\";\n}\n.ph.ph-mouse-middle-click:before {\n  content: \"\\e338\";\n}\n.ph.ph-mouse-right-click:before {\n  content: \"\\e336\";\n}\n.ph.ph-mouse-scroll:before {\n  content: \"\\e332\";\n}\n.ph.ph-mouse-simple:before {\n  content: \"\\e644\";\n}\n.ph.ph-music-note:before {\n  content: \"\\e33c\";\n}\n.ph.ph-music-note-simple:before {\n  content: \"\\e33e\";\n}\n.ph.ph-music-notes:before {\n  content: \"\\e340\";\n}\n.ph.ph-music-notes-minus:before {\n  content: \"\\ee0c\";\n}\n.ph.ph-music-notes-plus:before {\n  content: \"\\eb7c\";\n}\n.ph.ph-music-notes-simple:before {\n  content: \"\\e342\";\n}\n.ph.ph-navigation-arrow:before {\n  content: \"\\eade\";\n}\n.ph.ph-needle:before {\n  content: \"\\e82e\";\n}\n.ph.ph-network:before {\n  content: \"\\edde\";\n}\n.ph.ph-network-slash:before {\n  content: \"\\eddc\";\n}\n.ph.ph-network-x:before {\n  content: \"\\edda\";\n}\n.ph.ph-newspaper:before {\n  content: \"\\e344\";\n}\n.ph.ph-newspaper-clipping:before {\n  content: \"\\e346\";\n}\n.ph.ph-not-equals:before {\n  content: \"\\eda6\";\n}\n.ph.ph-not-member-of:before {\n  content: \"\\edae\";\n}\n.ph.ph-not-subset-of:before {\n  content: \"\\edb0\";\n}\n.ph.ph-not-superset-of:before {\n  content: \"\\edb2\";\n}\n.ph.ph-notches:before {\n  content: \"\\ed3a\";\n}\n.ph.ph-note:before {\n  content: \"\\e348\";\n}\n.ph.ph-note-blank:before {\n  content: \"\\e34a\";\n}\n.ph.ph-note-pencil:before {\n  content: \"\\e34c\";\n}\n.ph.ph-notebook:before {\n  content: \"\\e34e\";\n}\n.ph.ph-notepad:before {\n  content: \"\\e63e\";\n}\n.ph.ph-notification:before {\n  content: \"\\e6fa\";\n}\n.ph.ph-notion-logo:before {\n  content: \"\\e9a0\";\n}\n.ph.ph-nuclear-plant:before {\n  content: \"\\ed7c\";\n}\n.ph.ph-number-circle-eight:before {\n  content: \"\\e352\";\n}\n.ph.ph-number-circle-five:before {\n  content: \"\\e358\";\n}\n.ph.ph-number-circle-four:before {\n  content: \"\\e35e\";\n}\n.ph.ph-number-circle-nine:before {\n  content: \"\\e364\";\n}\n.ph.ph-number-circle-one:before {\n  content: \"\\e36a\";\n}\n.ph.ph-number-circle-seven:before {\n  content: \"\\e370\";\n}\n.ph.ph-number-circle-six:before {\n  content: \"\\e376\";\n}\n.ph.ph-number-circle-three:before {\n  content: \"\\e37c\";\n}\n.ph.ph-number-circle-two:before {\n  content: \"\\e382\";\n}\n.ph.ph-number-circle-zero:before {\n  content: \"\\e388\";\n}\n.ph.ph-number-eight:before {\n  content: \"\\e350\";\n}\n.ph.ph-number-five:before {\n  content: \"\\e356\";\n}\n.ph.ph-number-four:before {\n  content: \"\\e35c\";\n}\n.ph.ph-number-nine:before {\n  content: \"\\e362\";\n}\n.ph.ph-number-one:before {\n  content: \"\\e368\";\n}\n.ph.ph-number-seven:before {\n  content: \"\\e36e\";\n}\n.ph.ph-number-six:before {\n  content: \"\\e374\";\n}\n.ph.ph-number-square-eight:before {\n  content: \"\\e354\";\n}\n.ph.ph-number-square-five:before {\n  content: \"\\e35a\";\n}\n.ph.ph-number-square-four:before {\n  content: \"\\e360\";\n}\n.ph.ph-number-square-nine:before {\n  content: \"\\e366\";\n}\n.ph.ph-number-square-one:before {\n  content: \"\\e36c\";\n}\n.ph.ph-number-square-seven:before {\n  content: \"\\e372\";\n}\n.ph.ph-number-square-six:before {\n  content: \"\\e378\";\n}\n.ph.ph-number-square-three:before {\n  content: \"\\e37e\";\n}\n.ph.ph-number-square-two:before {\n  content: \"\\e384\";\n}\n.ph.ph-number-square-zero:before {\n  content: \"\\e38a\";\n}\n.ph.ph-number-three:before {\n  content: \"\\e37a\";\n}\n.ph.ph-number-two:before {\n  content: \"\\e380\";\n}\n.ph.ph-number-zero:before {\n  content: \"\\e386\";\n}\n.ph.ph-numpad:before {\n  content: \"\\e3c8\";\n}\n.ph.ph-nut:before {\n  content: \"\\e38c\";\n}\n.ph.ph-ny-times-logo:before {\n  content: \"\\e646\";\n}\n.ph.ph-octagon:before {\n  content: \"\\e38e\";\n}\n.ph.ph-office-chair:before {\n  content: \"\\ea46\";\n}\n.ph.ph-onigiri:before {\n  content: \"\\ee2c\";\n}\n.ph.ph-open-ai-logo:before {\n  content: \"\\e7d2\";\n}\n.ph.ph-option:before {\n  content: \"\\e8a8\";\n}\n.ph.ph-orange:before {\n  content: \"\\ee40\";\n}\n.ph.ph-orange-slice:before {\n  content: \"\\ed36\";\n}\n.ph.ph-oven:before {\n  content: \"\\ed8c\";\n}\n.ph.ph-package:before {\n  content: \"\\e390\";\n}\n.ph.ph-paint-brush:before {\n  content: \"\\e6f0\";\n}\n.ph.ph-paint-brush-broad:before {\n  content: \"\\e590\";\n}\n.ph.ph-paint-brush-household:before {\n  content: \"\\e6f2\";\n}\n.ph.ph-paint-bucket:before {\n  content: \"\\e392\";\n}\n.ph.ph-paint-roller:before {\n  content: \"\\e6f4\";\n}\n.ph.ph-palette:before {\n  content: \"\\e6c8\";\n}\n.ph.ph-panorama:before {\n  content: \"\\eaa2\";\n}\n.ph.ph-pants:before {\n  content: \"\\ec88\";\n}\n.ph.ph-paper-plane:before {\n  content: \"\\e394\";\n}\n.ph.ph-paper-plane-right:before {\n  content: \"\\e396\";\n}\n.ph.ph-paper-plane-tilt:before {\n  content: \"\\e398\";\n}\n.ph.ph-paperclip:before {\n  content: \"\\e39a\";\n}\n.ph.ph-paperclip-horizontal:before {\n  content: \"\\e592\";\n}\n.ph.ph-parachute:before {\n  content: \"\\ea7c\";\n}\n.ph.ph-paragraph:before {\n  content: \"\\e960\";\n}\n.ph.ph-parallelogram:before {\n  content: \"\\ecc6\";\n}\n.ph.ph-park:before {\n  content: \"\\ecb2\";\n}\n.ph.ph-password:before {\n  content: \"\\e752\";\n}\n.ph.ph-path:before {\n  content: \"\\e39c\";\n}\n.ph.ph-patreon-logo:before {\n  content: \"\\e98a\";\n}\n.ph.ph-pause:before {\n  content: \"\\e39e\";\n}\n.ph.ph-pause-circle:before {\n  content: \"\\e3a0\";\n}\n.ph.ph-paw-print:before {\n  content: \"\\e648\";\n}\n.ph.ph-paypal-logo:before {\n  content: \"\\e98c\";\n}\n.ph.ph-peace:before {\n  content: \"\\e3a2\";\n}\n.ph.ph-pen:before {\n  content: \"\\e3aa\";\n}\n.ph.ph-pen-nib:before {\n  content: \"\\e3ac\";\n}\n.ph.ph-pen-nib-straight:before {\n  content: \"\\e64a\";\n}\n.ph.ph-pencil:before {\n  content: \"\\e3ae\";\n}\n.ph.ph-pencil-circle:before {\n  content: \"\\e3b0\";\n}\n.ph.ph-pencil-line:before {\n  content: \"\\e3b2\";\n}\n.ph.ph-pencil-ruler:before {\n  content: \"\\e906\";\n}\n.ph.ph-pencil-simple:before {\n  content: \"\\e3b4\";\n}\n.ph.ph-pencil-simple-line:before {\n  content: \"\\ebc6\";\n}\n.ph.ph-pencil-simple-slash:before {\n  content: \"\\ecf6\";\n}\n.ph.ph-pencil-slash:before {\n  content: \"\\ecf8\";\n}\n.ph.ph-pentagon:before {\n  content: \"\\ec7e\";\n}\n.ph.ph-pentagram:before {\n  content: \"\\ec5c\";\n}\n.ph.ph-pepper:before {\n  content: \"\\e94a\";\n}\n.ph.ph-percent:before {\n  content: \"\\e3b6\";\n}\n.ph.ph-person:before {\n  content: \"\\e3a8\";\n}\n.ph.ph-person-arms-spread:before {\n  content: \"\\ecfe\";\n}\n.ph.ph-person-simple:before {\n  content: \"\\e72e\";\n}\n.ph.ph-person-simple-bike:before {\n  content: \"\\e734\";\n}\n.ph.ph-person-simple-circle:before {\n  content: \"\\ee58\";\n}\n.ph.ph-person-simple-hike:before {\n  content: \"\\ed54\";\n}\n.ph.ph-person-simple-run:before {\n  content: \"\\e730\";\n}\n.ph.ph-person-simple-ski:before {\n  content: \"\\e71c\";\n}\n.ph.ph-person-simple-snowboard:before {\n  content: \"\\e71e\";\n}\n.ph.ph-person-simple-swim:before {\n  content: \"\\e736\";\n}\n.ph.ph-person-simple-tai-chi:before {\n  content: \"\\ed5c\";\n}\n.ph.ph-person-simple-throw:before {\n  content: \"\\e732\";\n}\n.ph.ph-person-simple-walk:before {\n  content: \"\\e73a\";\n}\n.ph.ph-perspective:before {\n  content: \"\\ebe6\";\n}\n.ph.ph-phone:before {\n  content: \"\\e3b8\";\n}\n.ph.ph-phone-call:before {\n  content: \"\\e3ba\";\n}\n.ph.ph-phone-disconnect:before {\n  content: \"\\e3bc\";\n}\n.ph.ph-phone-incoming:before {\n  content: \"\\e3be\";\n}\n.ph.ph-phone-list:before {\n  content: \"\\e3cc\";\n}\n.ph.ph-phone-outgoing:before {\n  content: \"\\e3c0\";\n}\n.ph.ph-phone-pause:before {\n  content: \"\\e3ca\";\n}\n.ph.ph-phone-plus:before {\n  content: \"\\ec56\";\n}\n.ph.ph-phone-slash:before {\n  content: \"\\e3c2\";\n}\n.ph.ph-phone-transfer:before {\n  content: \"\\e3c6\";\n}\n.ph.ph-phone-x:before {\n  content: \"\\e3c4\";\n}\n.ph.ph-phosphor-logo:before {\n  content: \"\\e3ce\";\n}\n.ph.ph-pi:before {\n  content: \"\\ec80\";\n}\n.ph.ph-piano-keys:before {\n  content: \"\\e9c8\";\n}\n.ph.ph-picnic-table:before {\n  content: \"\\ee26\";\n}\n.ph.ph-picture-in-picture:before {\n  content: \"\\e64c\";\n}\n.ph.ph-piggy-bank:before {\n  content: \"\\ea04\";\n}\n.ph.ph-pill:before {\n  content: \"\\e700\";\n}\n.ph.ph-ping-pong:before {\n  content: \"\\ea42\";\n}\n.ph.ph-pint-glass:before {\n  content: \"\\edd0\";\n}\n.ph.ph-pinterest-logo:before {\n  content: \"\\e64e\";\n}\n.ph.ph-pinwheel:before {\n  content: \"\\eb9c\";\n}\n.ph.ph-pipe:before {\n  content: \"\\ed86\";\n}\n.ph.ph-pipe-wrench:before {\n  content: \"\\ed88\";\n}\n.ph.ph-pix-logo:before {\n  content: \"\\ecc2\";\n}\n.ph.ph-pizza:before {\n  content: \"\\e796\";\n}\n.ph.ph-placeholder:before {\n  content: \"\\e650\";\n}\n.ph.ph-planet:before {\n  content: \"\\e652\";\n}\n.ph.ph-plant:before {\n  content: \"\\ebae\";\n}\n.ph.ph-play:before {\n  content: \"\\e3d0\";\n}\n.ph.ph-play-circle:before {\n  content: \"\\e3d2\";\n}\n.ph.ph-play-pause:before {\n  content: \"\\e8be\";\n}\n.ph.ph-playlist:before {\n  content: \"\\e6aa\";\n}\n.ph.ph-plug:before {\n  content: \"\\e946\";\n}\n.ph.ph-plug-charging:before {\n  content: \"\\eb5c\";\n}\n.ph.ph-plugs:before {\n  content: \"\\eb56\";\n}\n.ph.ph-plugs-connected:before {\n  content: \"\\eb5a\";\n}\n.ph.ph-plus:before {\n  content: \"\\e3d4\";\n}\n.ph.ph-plus-circle:before {\n  content: \"\\e3d6\";\n}\n.ph.ph-plus-minus:before {\n  content: \"\\e3d8\";\n}\n.ph.ph-plus-square:before {\n  content: \"\\ed4a\";\n}\n.ph.ph-poker-chip:before {\n  content: \"\\e594\";\n}\n.ph.ph-police-car:before {\n  content: \"\\ec4a\";\n}\n.ph.ph-polygon:before {\n  content: \"\\e6d0\";\n}\n.ph.ph-popcorn:before {\n  content: \"\\eb4e\";\n}\n.ph.ph-popsicle:before {\n  content: \"\\ebbe\";\n}\n.ph.ph-potted-plant:before {\n  content: \"\\ec22\";\n}\n.ph.ph-power:before {\n  content: \"\\e3da\";\n}\n.ph.ph-prescription:before {\n  content: \"\\e7a2\";\n}\n.ph.ph-presentation:before {\n  content: \"\\e654\";\n}\n.ph.ph-presentation-chart:before {\n  content: \"\\e656\";\n}\n.ph.ph-printer:before {\n  content: \"\\e3dc\";\n}\n.ph.ph-prohibit:before {\n  content: \"\\e3de\";\n}\n.ph.ph-prohibit-inset:before {\n  content: \"\\e3e0\";\n}\n.ph.ph-projector-screen:before {\n  content: \"\\e658\";\n}\n.ph.ph-projector-screen-chart:before {\n  content: \"\\e65a\";\n}\n.ph.ph-pulse:before {\n  content: \"\\e000\";\n}\n.ph.ph-activity:before {\n  content: \"\\e000\";\n}\n.ph.ph-push-pin:before {\n  content: \"\\e3e2\";\n}\n.ph.ph-push-pin-simple:before {\n  content: \"\\e65c\";\n}\n.ph.ph-push-pin-simple-slash:before {\n  content: \"\\e65e\";\n}\n.ph.ph-push-pin-slash:before {\n  content: \"\\e3e4\";\n}\n.ph.ph-puzzle-piece:before {\n  content: \"\\e596\";\n}\n.ph.ph-qr-code:before {\n  content: \"\\e3e6\";\n}\n.ph.ph-question:before {\n  content: \"\\e3e8\";\n}\n.ph.ph-question-mark:before {\n  content: \"\\e3e9\";\n}\n.ph.ph-queue:before {\n  content: \"\\e6ac\";\n}\n.ph.ph-quotes:before {\n  content: \"\\e660\";\n}\n.ph.ph-rabbit:before {\n  content: \"\\eac2\";\n}\n.ph.ph-racquet:before {\n  content: \"\\ee02\";\n}\n.ph.ph-radical:before {\n  content: \"\\e3ea\";\n}\n.ph.ph-radio:before {\n  content: \"\\e77e\";\n}\n.ph.ph-radio-button:before {\n  content: \"\\eb08\";\n}\n.ph.ph-radioactive:before {\n  content: \"\\e9dc\";\n}\n.ph.ph-rainbow:before {\n  content: \"\\e598\";\n}\n.ph.ph-rainbow-cloud:before {\n  content: \"\\e59a\";\n}\n.ph.ph-ranking:before {\n  content: \"\\ed62\";\n}\n.ph.ph-read-cv-logo:before {\n  content: \"\\ed0c\";\n}\n.ph.ph-receipt:before {\n  content: \"\\e3ec\";\n}\n.ph.ph-receipt-x:before {\n  content: \"\\ed40\";\n}\n.ph.ph-record:before {\n  content: \"\\e3ee\";\n}\n.ph.ph-rectangle:before {\n  content: \"\\e3f0\";\n}\n.ph.ph-rectangle-dashed:before {\n  content: \"\\e3f2\";\n}\n.ph.ph-recycle:before {\n  content: \"\\e75a\";\n}\n.ph.ph-reddit-logo:before {\n  content: \"\\e59c\";\n}\n.ph.ph-repeat:before {\n  content: \"\\e3f6\";\n}\n.ph.ph-repeat-once:before {\n  content: \"\\e3f8\";\n}\n.ph.ph-replit-logo:before {\n  content: \"\\eb8a\";\n}\n.ph.ph-resize:before {\n  content: \"\\ed6e\";\n}\n.ph.ph-rewind:before {\n  content: \"\\e6a8\";\n}\n.ph.ph-rewind-circle:before {\n  content: \"\\e3fa\";\n}\n.ph.ph-road-horizon:before {\n  content: \"\\e838\";\n}\n.ph.ph-robot:before {\n  content: \"\\e762\";\n}\n.ph.ph-rocket:before {\n  content: \"\\e3fc\";\n}\n.ph.ph-rocket-launch:before {\n  content: \"\\e3fe\";\n}\n.ph.ph-rows:before {\n  content: \"\\e5a2\";\n}\n.ph.ph-rows-plus-bottom:before {\n  content: \"\\e59e\";\n}\n.ph.ph-rows-plus-top:before {\n  content: \"\\e5a0\";\n}\n.ph.ph-rss:before {\n  content: \"\\e400\";\n}\n.ph.ph-rss-simple:before {\n  content: \"\\e402\";\n}\n.ph.ph-rug:before {\n  content: \"\\ea1a\";\n}\n.ph.ph-ruler:before {\n  content: \"\\e6b8\";\n}\n.ph.ph-sailboat:before {\n  content: \"\\e78a\";\n}\n.ph.ph-scales:before {\n  content: \"\\e750\";\n}\n.ph.ph-scan:before {\n  content: \"\\ebb6\";\n}\n.ph.ph-scan-smiley:before {\n  content: \"\\ebb4\";\n}\n.ph.ph-scissors:before {\n  content: \"\\eae0\";\n}\n.ph.ph-scooter:before {\n  content: \"\\e820\";\n}\n.ph.ph-screencast:before {\n  content: \"\\e404\";\n}\n.ph.ph-screwdriver:before {\n  content: \"\\e86e\";\n}\n.ph.ph-scribble:before {\n  content: \"\\e806\";\n}\n.ph.ph-scribble-loop:before {\n  content: \"\\e662\";\n}\n.ph.ph-scroll:before {\n  content: \"\\eb7a\";\n}\n.ph.ph-seal:before {\n  content: \"\\e604\";\n}\n.ph.ph-circle-wavy:before {\n  content: \"\\e604\";\n}\n.ph.ph-seal-check:before {\n  content: \"\\e606\";\n}\n.ph.ph-circle-wavy-check:before {\n  content: \"\\e606\";\n}\n.ph.ph-seal-percent:before {\n  content: \"\\e60a\";\n}\n.ph.ph-seal-question:before {\n  content: \"\\e608\";\n}\n.ph.ph-circle-wavy-question:before {\n  content: \"\\e608\";\n}\n.ph.ph-seal-warning:before {\n  content: \"\\e60c\";\n}\n.ph.ph-circle-wavy-warning:before {\n  content: \"\\e60c\";\n}\n.ph.ph-seat:before {\n  content: \"\\eb8e\";\n}\n.ph.ph-seatbelt:before {\n  content: \"\\edfe\";\n}\n.ph.ph-security-camera:before {\n  content: \"\\eca4\";\n}\n.ph.ph-selection:before {\n  content: \"\\e69a\";\n}\n.ph.ph-selection-all:before {\n  content: \"\\e746\";\n}\n.ph.ph-selection-background:before {\n  content: \"\\eaf8\";\n}\n.ph.ph-selection-foreground:before {\n  content: \"\\eaf6\";\n}\n.ph.ph-selection-inverse:before {\n  content: \"\\e744\";\n}\n.ph.ph-selection-plus:before {\n  content: \"\\e69c\";\n}\n.ph.ph-selection-slash:before {\n  content: \"\\e69e\";\n}\n.ph.ph-shapes:before {\n  content: \"\\ec5e\";\n}\n.ph.ph-share:before {\n  content: \"\\e406\";\n}\n.ph.ph-share-fat:before {\n  content: \"\\ed52\";\n}\n.ph.ph-share-network:before {\n  content: \"\\e408\";\n}\n.ph.ph-shield:before {\n  content: \"\\e40a\";\n}\n.ph.ph-shield-check:before {\n  content: \"\\e40c\";\n}\n.ph.ph-shield-checkered:before {\n  content: \"\\e708\";\n}\n.ph.ph-shield-chevron:before {\n  content: \"\\e40e\";\n}\n.ph.ph-shield-plus:before {\n  content: \"\\e706\";\n}\n.ph.ph-shield-slash:before {\n  content: \"\\e410\";\n}\n.ph.ph-shield-star:before {\n  content: \"\\ec34\";\n}\n.ph.ph-shield-warning:before {\n  content: \"\\e412\";\n}\n.ph.ph-shipping-container:before {\n  content: \"\\e78c\";\n}\n.ph.ph-shirt-folded:before {\n  content: \"\\ea92\";\n}\n.ph.ph-shooting-star:before {\n  content: \"\\ecfa\";\n}\n.ph.ph-shopping-bag:before {\n  content: \"\\e416\";\n}\n.ph.ph-shopping-bag-open:before {\n  content: \"\\e418\";\n}\n.ph.ph-shopping-cart:before {\n  content: \"\\e41e\";\n}\n.ph.ph-shopping-cart-simple:before {\n  content: \"\\e420\";\n}\n.ph.ph-shovel:before {\n  content: \"\\e9e6\";\n}\n.ph.ph-shower:before {\n  content: \"\\e776\";\n}\n.ph.ph-shrimp:before {\n  content: \"\\eab4\";\n}\n.ph.ph-shuffle:before {\n  content: \"\\e422\";\n}\n.ph.ph-shuffle-angular:before {\n  content: \"\\e424\";\n}\n.ph.ph-shuffle-simple:before {\n  content: \"\\e426\";\n}\n.ph.ph-sidebar:before {\n  content: \"\\eab6\";\n}\n.ph.ph-sidebar-simple:before {\n  content: \"\\ec24\";\n}\n.ph.ph-sigma:before {\n  content: \"\\eab8\";\n}\n.ph.ph-sign-in:before {\n  content: \"\\e428\";\n}\n.ph.ph-sign-out:before {\n  content: \"\\e42a\";\n}\n.ph.ph-signature:before {\n  content: \"\\ebac\";\n}\n.ph.ph-signpost:before {\n  content: \"\\e89c\";\n}\n.ph.ph-sim-card:before {\n  content: \"\\e664\";\n}\n.ph.ph-siren:before {\n  content: \"\\e9b8\";\n}\n.ph.ph-sketch-logo:before {\n  content: \"\\e42c\";\n}\n.ph.ph-skip-back:before {\n  content: \"\\e5a4\";\n}\n.ph.ph-skip-back-circle:before {\n  content: \"\\e42e\";\n}\n.ph.ph-skip-forward:before {\n  content: \"\\e5a6\";\n}\n.ph.ph-skip-forward-circle:before {\n  content: \"\\e430\";\n}\n.ph.ph-skull:before {\n  content: \"\\e916\";\n}\n.ph.ph-skype-logo:before {\n  content: \"\\e8dc\";\n}\n.ph.ph-slack-logo:before {\n  content: \"\\e5a8\";\n}\n.ph.ph-sliders:before {\n  content: \"\\e432\";\n}\n.ph.ph-sliders-horizontal:before {\n  content: \"\\e434\";\n}\n.ph.ph-slideshow:before {\n  content: \"\\ed32\";\n}\n.ph.ph-smiley:before {\n  content: \"\\e436\";\n}\n.ph.ph-smiley-angry:before {\n  content: \"\\ec62\";\n}\n.ph.ph-smiley-blank:before {\n  content: \"\\e438\";\n}\n.ph.ph-smiley-meh:before {\n  content: \"\\e43a\";\n}\n.ph.ph-smiley-melting:before {\n  content: \"\\ee56\";\n}\n.ph.ph-smiley-nervous:before {\n  content: \"\\e43c\";\n}\n.ph.ph-smiley-sad:before {\n  content: \"\\e43e\";\n}\n.ph.ph-smiley-sticker:before {\n  content: \"\\e440\";\n}\n.ph.ph-smiley-wink:before {\n  content: \"\\e666\";\n}\n.ph.ph-smiley-x-eyes:before {\n  content: \"\\e442\";\n}\n.ph.ph-snapchat-logo:before {\n  content: \"\\e668\";\n}\n.ph.ph-sneaker:before {\n  content: \"\\e80c\";\n}\n.ph.ph-sneaker-move:before {\n  content: \"\\ed60\";\n}\n.ph.ph-snowflake:before {\n  content: \"\\e5aa\";\n}\n.ph.ph-soccer-ball:before {\n  content: \"\\e716\";\n}\n.ph.ph-sock:before {\n  content: \"\\ecce\";\n}\n.ph.ph-solar-panel:before {\n  content: \"\\ed7a\";\n}\n.ph.ph-solar-roof:before {\n  content: \"\\ed7b\";\n}\n.ph.ph-sort-ascending:before {\n  content: \"\\e444\";\n}\n.ph.ph-sort-descending:before {\n  content: \"\\e446\";\n}\n.ph.ph-soundcloud-logo:before {\n  content: \"\\e8de\";\n}\n.ph.ph-spade:before {\n  content: \"\\e448\";\n}\n.ph.ph-sparkle:before {\n  content: \"\\e6a2\";\n}\n.ph.ph-speaker-hifi:before {\n  content: \"\\ea08\";\n}\n.ph.ph-speaker-high:before {\n  content: \"\\e44a\";\n}\n.ph.ph-speaker-low:before {\n  content: \"\\e44c\";\n}\n.ph.ph-speaker-none:before {\n  content: \"\\e44e\";\n}\n.ph.ph-speaker-simple-high:before {\n  content: \"\\e450\";\n}\n.ph.ph-speaker-simple-low:before {\n  content: \"\\e452\";\n}\n.ph.ph-speaker-simple-none:before {\n  content: \"\\e454\";\n}\n.ph.ph-speaker-simple-slash:before {\n  content: \"\\e456\";\n}\n.ph.ph-speaker-simple-x:before {\n  content: \"\\e458\";\n}\n.ph.ph-speaker-slash:before {\n  content: \"\\e45a\";\n}\n.ph.ph-speaker-x:before {\n  content: \"\\e45c\";\n}\n.ph.ph-speedometer:before {\n  content: \"\\ee74\";\n}\n.ph.ph-sphere:before {\n  content: \"\\ee66\";\n}\n.ph.ph-spinner:before {\n  content: \"\\e66a\";\n}\n.ph.ph-spinner-ball:before {\n  content: \"\\ee28\";\n}\n.ph.ph-spinner-gap:before {\n  content: \"\\e66c\";\n}\n.ph.ph-spiral:before {\n  content: \"\\e9fa\";\n}\n.ph.ph-split-horizontal:before {\n  content: \"\\e872\";\n}\n.ph.ph-split-vertical:before {\n  content: \"\\e876\";\n}\n.ph.ph-spotify-logo:before {\n  content: \"\\e66e\";\n}\n.ph.ph-spray-bottle:before {\n  content: \"\\e7e4\";\n}\n.ph.ph-square:before {\n  content: \"\\e45e\";\n}\n.ph.ph-square-half:before {\n  content: \"\\e462\";\n}\n.ph.ph-square-half-bottom:before {\n  content: \"\\eb16\";\n}\n.ph.ph-square-logo:before {\n  content: \"\\e690\";\n}\n.ph.ph-square-split-horizontal:before {\n  content: \"\\e870\";\n}\n.ph.ph-square-split-vertical:before {\n  content: \"\\e874\";\n}\n.ph.ph-squares-four:before {\n  content: \"\\e464\";\n}\n.ph.ph-stack:before {\n  content: \"\\e466\";\n}\n.ph.ph-stack-minus:before {\n  content: \"\\edf4\";\n}\n.ph.ph-stack-overflow-logo:before {\n  content: \"\\eb78\";\n}\n.ph.ph-stack-plus:before {\n  content: \"\\edf6\";\n}\n.ph.ph-stack-simple:before {\n  content: \"\\e468\";\n}\n.ph.ph-stairs:before {\n  content: \"\\e8ec\";\n}\n.ph.ph-stamp:before {\n  content: \"\\ea48\";\n}\n.ph.ph-standard-definition:before {\n  content: \"\\ea90\";\n}\n.ph.ph-star:before {\n  content: \"\\e46a\";\n}\n.ph.ph-star-and-crescent:before {\n  content: \"\\ecf4\";\n}\n.ph.ph-star-four:before {\n  content: \"\\e6a4\";\n}\n.ph.ph-star-half:before {\n  content: \"\\e70a\";\n}\n.ph.ph-star-of-david:before {\n  content: \"\\e89e\";\n}\n.ph.ph-steam-logo:before {\n  content: \"\\ead4\";\n}\n.ph.ph-steering-wheel:before {\n  content: \"\\e9ac\";\n}\n.ph.ph-steps:before {\n  content: \"\\ecbe\";\n}\n.ph.ph-stethoscope:before {\n  content: \"\\e7ea\";\n}\n.ph.ph-sticker:before {\n  content: \"\\e5ac\";\n}\n.ph.ph-stool:before {\n  content: \"\\ea44\";\n}\n.ph.ph-stop:before {\n  content: \"\\e46c\";\n}\n.ph.ph-stop-circle:before {\n  content: \"\\e46e\";\n}\n.ph.ph-storefront:before {\n  content: \"\\e470\";\n}\n.ph.ph-strategy:before {\n  content: \"\\ea3a\";\n}\n.ph.ph-stripe-logo:before {\n  content: \"\\e698\";\n}\n.ph.ph-student:before {\n  content: \"\\e73e\";\n}\n.ph.ph-subset-of:before {\n  content: \"\\edc0\";\n}\n.ph.ph-subset-proper-of:before {\n  content: \"\\edb6\";\n}\n.ph.ph-subtitles:before {\n  content: \"\\e1a8\";\n}\n.ph.ph-subtitles-slash:before {\n  content: \"\\e1a6\";\n}\n.ph.ph-subtract:before {\n  content: \"\\ebd6\";\n}\n.ph.ph-subtract-square:before {\n  content: \"\\ebd4\";\n}\n.ph.ph-subway:before {\n  content: \"\\e498\";\n}\n.ph.ph-suitcase:before {\n  content: \"\\e5ae\";\n}\n.ph.ph-suitcase-rolling:before {\n  content: \"\\e9b0\";\n}\n.ph.ph-suitcase-simple:before {\n  content: \"\\e5b0\";\n}\n.ph.ph-sun:before {\n  content: \"\\e472\";\n}\n.ph.ph-sun-dim:before {\n  content: \"\\e474\";\n}\n.ph.ph-sun-horizon:before {\n  content: \"\\e5b6\";\n}\n.ph.ph-sunglasses:before {\n  content: \"\\e816\";\n}\n.ph.ph-superset-of:before {\n  content: \"\\edb8\";\n}\n.ph.ph-superset-proper-of:before {\n  content: \"\\edb4\";\n}\n.ph.ph-swap:before {\n  content: \"\\e83c\";\n}\n.ph.ph-swatches:before {\n  content: \"\\e5b8\";\n}\n.ph.ph-swimming-pool:before {\n  content: \"\\ecb6\";\n}\n.ph.ph-sword:before {\n  content: \"\\e5ba\";\n}\n.ph.ph-synagogue:before {\n  content: \"\\ecec\";\n}\n.ph.ph-syringe:before {\n  content: \"\\e968\";\n}\n.ph.ph-t-shirt:before {\n  content: \"\\e670\";\n}\n.ph.ph-table:before {\n  content: \"\\e476\";\n}\n.ph.ph-tabs:before {\n  content: \"\\e778\";\n}\n.ph.ph-tag:before {\n  content: \"\\e478\";\n}\n.ph.ph-tag-chevron:before {\n  content: \"\\e672\";\n}\n.ph.ph-tag-simple:before {\n  content: \"\\e47a\";\n}\n.ph.ph-target:before {\n  content: \"\\e47c\";\n}\n.ph.ph-taxi:before {\n  content: \"\\e902\";\n}\n.ph.ph-tea-bag:before {\n  content: \"\\e8e6\";\n}\n.ph.ph-telegram-logo:before {\n  content: \"\\e5bc\";\n}\n.ph.ph-television:before {\n  content: \"\\e754\";\n}\n.ph.ph-television-simple:before {\n  content: \"\\eae6\";\n}\n.ph.ph-tennis-ball:before {\n  content: \"\\e720\";\n}\n.ph.ph-tent:before {\n  content: \"\\e8ba\";\n}\n.ph.ph-terminal:before {\n  content: \"\\e47e\";\n}\n.ph.ph-terminal-window:before {\n  content: \"\\eae8\";\n}\n.ph.ph-test-tube:before {\n  content: \"\\e7a0\";\n}\n.ph.ph-text-a-underline:before {\n  content: \"\\ed34\";\n}\n.ph.ph-text-aa:before {\n  content: \"\\e6ee\";\n}\n.ph.ph-text-align-center:before {\n  content: \"\\e480\";\n}\n.ph.ph-text-align-justify:before {\n  content: \"\\e482\";\n}\n.ph.ph-text-align-left:before {\n  content: \"\\e484\";\n}\n.ph.ph-text-align-right:before {\n  content: \"\\e486\";\n}\n.ph.ph-text-b:before {\n  content: \"\\e5be\";\n}\n.ph.ph-text-bolder:before {\n  content: \"\\e5be\";\n}\n.ph.ph-text-columns:before {\n  content: \"\\ec96\";\n}\n.ph.ph-text-h:before {\n  content: \"\\e6ba\";\n}\n.ph.ph-text-h-five:before {\n  content: \"\\e6c4\";\n}\n.ph.ph-text-h-four:before {\n  content: \"\\e6c2\";\n}\n.ph.ph-text-h-one:before {\n  content: \"\\e6bc\";\n}\n.ph.ph-text-h-six:before {\n  content: \"\\e6c6\";\n}\n.ph.ph-text-h-three:before {\n  content: \"\\e6c0\";\n}\n.ph.ph-text-h-two:before {\n  content: \"\\e6be\";\n}\n.ph.ph-text-indent:before {\n  content: \"\\ea1e\";\n}\n.ph.ph-text-italic:before {\n  content: \"\\e5c0\";\n}\n.ph.ph-text-outdent:before {\n  content: \"\\ea1c\";\n}\n.ph.ph-text-strikethrough:before {\n  content: \"\\e5c2\";\n}\n.ph.ph-text-subscript:before {\n  content: \"\\ec98\";\n}\n.ph.ph-text-superscript:before {\n  content: \"\\ec9a\";\n}\n.ph.ph-text-t:before {\n  content: \"\\e48a\";\n}\n.ph.ph-text-t-slash:before {\n  content: \"\\e488\";\n}\n.ph.ph-text-underline:before {\n  content: \"\\e5c4\";\n}\n.ph.ph-textbox:before {\n  content: \"\\eb0a\";\n}\n.ph.ph-thermometer:before {\n  content: \"\\e5c6\";\n}\n.ph.ph-thermometer-cold:before {\n  content: \"\\e5c8\";\n}\n.ph.ph-thermometer-hot:before {\n  content: \"\\e5ca\";\n}\n.ph.ph-thermometer-simple:before {\n  content: \"\\e5cc\";\n}\n.ph.ph-threads-logo:before {\n  content: \"\\ed9e\";\n}\n.ph.ph-three-d:before {\n  content: \"\\ea5a\";\n}\n.ph.ph-thumbs-down:before {\n  content: \"\\e48c\";\n}\n.ph.ph-thumbs-up:before {\n  content: \"\\e48e\";\n}\n.ph.ph-ticket:before {\n  content: \"\\e490\";\n}\n.ph.ph-tidal-logo:before {\n  content: \"\\ed1c\";\n}\n.ph.ph-tiktok-logo:before {\n  content: \"\\eaf2\";\n}\n.ph.ph-tilde:before {\n  content: \"\\eda8\";\n}\n.ph.ph-timer:before {\n  content: \"\\e492\";\n}\n.ph.ph-tip-jar:before {\n  content: \"\\e7e2\";\n}\n.ph.ph-tipi:before {\n  content: \"\\ed30\";\n}\n.ph.ph-tire:before {\n  content: \"\\edd2\";\n}\n.ph.ph-toggle-left:before {\n  content: \"\\e674\";\n}\n.ph.ph-toggle-right:before {\n  content: \"\\e676\";\n}\n.ph.ph-toilet:before {\n  content: \"\\e79a\";\n}\n.ph.ph-toilet-paper:before {\n  content: \"\\e79c\";\n}\n.ph.ph-toolbox:before {\n  content: \"\\eca0\";\n}\n.ph.ph-tooth:before {\n  content: \"\\e9cc\";\n}\n.ph.ph-tornado:before {\n  content: \"\\e88c\";\n}\n.ph.ph-tote:before {\n  content: \"\\e494\";\n}\n.ph.ph-tote-simple:before {\n  content: \"\\e678\";\n}\n.ph.ph-towel:before {\n  content: \"\\ede6\";\n}\n.ph.ph-tractor:before {\n  content: \"\\ec6e\";\n}\n.ph.ph-trademark:before {\n  content: \"\\e9f0\";\n}\n.ph.ph-trademark-registered:before {\n  content: \"\\e3f4\";\n}\n.ph.ph-traffic-cone:before {\n  content: \"\\e9a8\";\n}\n.ph.ph-traffic-sign:before {\n  content: \"\\e67a\";\n}\n.ph.ph-traffic-signal:before {\n  content: \"\\e9aa\";\n}\n.ph.ph-train:before {\n  content: \"\\e496\";\n}\n.ph.ph-train-regional:before {\n  content: \"\\e49e\";\n}\n.ph.ph-train-simple:before {\n  content: \"\\e4a0\";\n}\n.ph.ph-tram:before {\n  content: \"\\e9ec\";\n}\n.ph.ph-translate:before {\n  content: \"\\e4a2\";\n}\n.ph.ph-trash:before {\n  content: \"\\e4a6\";\n}\n.ph.ph-trash-simple:before {\n  content: \"\\e4a8\";\n}\n.ph.ph-tray:before {\n  content: \"\\e4aa\";\n}\n.ph.ph-tray-arrow-down:before {\n  content: \"\\e010\";\n}\n.ph.ph-archive-tray:before {\n  content: \"\\e010\";\n}\n.ph.ph-tray-arrow-up:before {\n  content: \"\\ee52\";\n}\n.ph.ph-treasure-chest:before {\n  content: \"\\ede2\";\n}\n.ph.ph-tree:before {\n  content: \"\\e6da\";\n}\n.ph.ph-tree-evergreen:before {\n  content: \"\\e6dc\";\n}\n.ph.ph-tree-palm:before {\n  content: \"\\e91a\";\n}\n.ph.ph-tree-structure:before {\n  content: \"\\e67c\";\n}\n.ph.ph-tree-view:before {\n  content: \"\\ee48\";\n}\n.ph.ph-trend-down:before {\n  content: \"\\e4ac\";\n}\n.ph.ph-trend-up:before {\n  content: \"\\e4ae\";\n}\n.ph.ph-triangle:before {\n  content: \"\\e4b0\";\n}\n.ph.ph-triangle-dashed:before {\n  content: \"\\e4b2\";\n}\n.ph.ph-trolley:before {\n  content: \"\\e5b2\";\n}\n.ph.ph-trolley-suitcase:before {\n  content: \"\\e5b4\";\n}\n.ph.ph-trophy:before {\n  content: \"\\e67e\";\n}\n.ph.ph-truck:before {\n  content: \"\\e4b4\";\n}\n.ph.ph-truck-trailer:before {\n  content: \"\\e4b6\";\n}\n.ph.ph-tumblr-logo:before {\n  content: \"\\e8d4\";\n}\n.ph.ph-twitch-logo:before {\n  content: \"\\e5ce\";\n}\n.ph.ph-twitter-logo:before {\n  content: \"\\e4ba\";\n}\n.ph.ph-umbrella:before {\n  content: \"\\e684\";\n}\n.ph.ph-umbrella-simple:before {\n  content: \"\\e686\";\n}\n.ph.ph-union:before {\n  content: \"\\edbe\";\n}\n.ph.ph-unite:before {\n  content: \"\\e87e\";\n}\n.ph.ph-unite-square:before {\n  content: \"\\e878\";\n}\n.ph.ph-upload:before {\n  content: \"\\e4be\";\n}\n.ph.ph-upload-simple:before {\n  content: \"\\e4c0\";\n}\n.ph.ph-usb:before {\n  content: \"\\e956\";\n}\n.ph.ph-user:before {\n  content: \"\\e4c2\";\n}\n.ph.ph-user-check:before {\n  content: \"\\eafa\";\n}\n.ph.ph-user-circle:before {\n  content: \"\\e4c4\";\n}\n.ph.ph-user-circle-check:before {\n  content: \"\\ec38\";\n}\n.ph.ph-user-circle-dashed:before {\n  content: \"\\ec36\";\n}\n.ph.ph-user-circle-gear:before {\n  content: \"\\e4c6\";\n}\n.ph.ph-user-circle-minus:before {\n  content: \"\\e4c8\";\n}\n.ph.ph-user-circle-plus:before {\n  content: \"\\e4ca\";\n}\n.ph.ph-user-focus:before {\n  content: \"\\e6fc\";\n}\n.ph.ph-user-gear:before {\n  content: \"\\e4cc\";\n}\n.ph.ph-user-list:before {\n  content: \"\\e73c\";\n}\n.ph.ph-user-minus:before {\n  content: \"\\e4ce\";\n}\n.ph.ph-user-plus:before {\n  content: \"\\e4d0\";\n}\n.ph.ph-user-rectangle:before {\n  content: \"\\e4d2\";\n}\n.ph.ph-user-sound:before {\n  content: \"\\eca8\";\n}\n.ph.ph-user-square:before {\n  content: \"\\e4d4\";\n}\n.ph.ph-user-switch:before {\n  content: \"\\e756\";\n}\n.ph.ph-users:before {\n  content: \"\\e4d6\";\n}\n.ph.ph-users-four:before {\n  content: \"\\e68c\";\n}\n.ph.ph-users-three:before {\n  content: \"\\e68e\";\n}\n.ph.ph-van:before {\n  content: \"\\e826\";\n}\n.ph.ph-vault:before {\n  content: \"\\e76e\";\n}\n.ph.ph-vector-three:before {\n  content: \"\\ee62\";\n}\n.ph.ph-vector-two:before {\n  content: \"\\ee64\";\n}\n.ph.ph-vibrate:before {\n  content: \"\\e4d8\";\n}\n.ph.ph-video:before {\n  content: \"\\e740\";\n}\n.ph.ph-video-camera:before {\n  content: \"\\e4da\";\n}\n.ph.ph-video-camera-slash:before {\n  content: \"\\e4dc\";\n}\n.ph.ph-video-conference:before {\n  content: \"\\edce\";\n}\n.ph.ph-vignette:before {\n  content: \"\\eba2\";\n}\n.ph.ph-vinyl-record:before {\n  content: \"\\ecac\";\n}\n.ph.ph-virtual-reality:before {\n  content: \"\\e7b8\";\n}\n.ph.ph-virus:before {\n  content: \"\\e7d6\";\n}\n.ph.ph-visor:before {\n  content: \"\\ee2a\";\n}\n.ph.ph-voicemail:before {\n  content: \"\\e4de\";\n}\n.ph.ph-volleyball:before {\n  content: \"\\e726\";\n}\n.ph.ph-wall:before {\n  content: \"\\e688\";\n}\n.ph.ph-wallet:before {\n  content: \"\\e68a\";\n}\n.ph.ph-warehouse:before {\n  content: \"\\ecd4\";\n}\n.ph.ph-warning:before {\n  content: \"\\e4e0\";\n}\n.ph.ph-warning-circle:before {\n  content: \"\\e4e2\";\n}\n.ph.ph-warning-diamond:before {\n  content: \"\\e7fc\";\n}\n.ph.ph-warning-octagon:before {\n  content: \"\\e4e4\";\n}\n.ph.ph-washing-machine:before {\n  content: \"\\ede8\";\n}\n.ph.ph-watch:before {\n  content: \"\\e4e6\";\n}\n.ph.ph-wave-sawtooth:before {\n  content: \"\\ea9c\";\n}\n.ph.ph-wave-sine:before {\n  content: \"\\ea9a\";\n}\n.ph.ph-wave-square:before {\n  content: \"\\ea9e\";\n}\n.ph.ph-wave-triangle:before {\n  content: \"\\eaa0\";\n}\n.ph.ph-waveform:before {\n  content: \"\\e802\";\n}\n.ph.ph-waveform-slash:before {\n  content: \"\\e800\";\n}\n.ph.ph-waves:before {\n  content: \"\\e6de\";\n}\n.ph.ph-webcam:before {\n  content: \"\\e9b2\";\n}\n.ph.ph-webcam-slash:before {\n  content: \"\\ecdc\";\n}\n.ph.ph-webhooks-logo:before {\n  content: \"\\ecae\";\n}\n.ph.ph-wechat-logo:before {\n  content: \"\\e8d2\";\n}\n.ph.ph-whatsapp-logo:before {\n  content: \"\\e5d0\";\n}\n.ph.ph-wheelchair:before {\n  content: \"\\e4e8\";\n}\n.ph.ph-wheelchair-motion:before {\n  content: \"\\e89a\";\n}\n.ph.ph-wifi-high:before {\n  content: \"\\e4ea\";\n}\n.ph.ph-wifi-low:before {\n  content: \"\\e4ec\";\n}\n.ph.ph-wifi-medium:before {\n  content: \"\\e4ee\";\n}\n.ph.ph-wifi-none:before {\n  content: \"\\e4f0\";\n}\n.ph.ph-wifi-slash:before {\n  content: \"\\e4f2\";\n}\n.ph.ph-wifi-x:before {\n  content: \"\\e4f4\";\n}\n.ph.ph-wind:before {\n  content: \"\\e5d2\";\n}\n.ph.ph-windmill:before {\n  content: \"\\e9f8\";\n}\n.ph.ph-windows-logo:before {\n  content: \"\\e692\";\n}\n.ph.ph-wine:before {\n  content: \"\\e6b2\";\n}\n.ph.ph-wrench:before {\n  content: \"\\e5d4\";\n}\n.ph.ph-x:before {\n  content: \"\\e4f6\";\n}\n.ph.ph-x-circle:before {\n  content: \"\\e4f8\";\n}\n.ph.ph-x-logo:before {\n  content: \"\\e4bc\";\n}\n.ph.ph-x-square:before {\n  content: \"\\e4fa\";\n}\n.ph.ph-yarn:before {\n  content: \"\\ed9a\";\n}\n.ph.ph-yin-yang:before {\n  content: \"\\e92a\";\n}\n.ph.ph-youtube-logo:before {\n  content: \"\\e4fc\";\n}\n"
  },
  {
    "path": "modules/system/assets/vendor/pikaday/README.md",
    "content": "Pikaday\n========\n\n[![NPM version][npm-image]][npm-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n\n\n### A refreshing JavaScript Datepicker\n\n* Lightweight (less than 5kb minified and gzipped)\n* No dependencies (but plays well with [Moment.js][moment])\n* Modular CSS classes for easy styling\n\n[**Try Pikaday Demo →**][Pikaday]\n\n![Pikaday Screenshot][screenshot]\n\n**Production ready?** Since version 1.0.0 Pikaday is stable and used in production. If you do however find bugs or have feature requests please submit them to the [GitHub issue tracker][issues].\nAlso see the [changelog](CHANGELOG.md)\n\n## Installation\nYou can install Pikaday as an NPM package:\n\n```shell\nnpm install pikaday\n```\n\nOr link directly to the CDN:\n\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/pikaday/pikaday.js\"></script>\n```\n\n## Styles\nYou will also need to include Pikaday CSS file. This step depends on how Pikaday was installed. Either import from NPM:\n\n```css\n@import './node_modules/pikaday/css/pikaday.css';\n```\n\nOr link to the CDN:\n\n```html\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.jsdelivr.net/npm/pikaday/css/pikaday.css\">\n```\n\n## Usage\n\n**Pikaday** can be bound to an input field:\n\n```html\n<input type=\"text\" id=\"datepicker\">\n```\n\nAdd the JavaScript to the end of your document:\n\n```html\n<script src=\"pikaday.js\"></script>\n<script>\n    var picker = new Pikaday({ field: document.getElementById('datepicker') });\n</script>\n```\n\nIf you're using **jQuery** make sure to pass only the first element:\n\n```javascript\nvar picker = new Pikaday({ field: $('#datepicker')[0] });\n```\n\nIf the Pikaday instance is not bound to a field you can append the element anywhere:\n\n```javascript\nvar field = document.getElementById('datepicker');\nvar picker = new Pikaday({\n    onSelect: function(date) {\n        field.value = picker.toString();\n    }\n});\nfield.parentNode.insertBefore(picker.el, field.nextSibling);\n```\n\n### Formatting\n\nBy default, dates are formatted and parsed using standard JavaScript Date object.\nIf [Moment.js][moment] is available in scope, it will be used to format and parse input values. You can pass an additional `format` option to the configuration which will be passed to the `moment` constructor.\nSee the [moment.js example][] for a full version.\n\n```html\n<input type=\"text\" id=\"datepicker\" value=\"9 Oct 2014\">\n\n<script src=\"moment.js\"></script>\n<script src=\"pikaday.js\"></script>\n<script>\n    var picker = new Pikaday({\n        field: document.getElementById('datepicker'),\n        format: 'D MMM YYYY',\n        onSelect: function() {\n            console.log(this.getMoment().format('Do MMMM YYYY'));\n        }\n    });\n</script>\n```\n\nFor more advanced and flexible formatting you can pass your own `toString` function to the configuration which will be used to format the date object.\nThis function has the following signature:\n\n`toString(date, format = 'YYYY-MM-DD')`\n\nYou should return a string from it.\n\nBe careful, though. If the formatted string that you return cannot be correctly parsed by the `Date.parse` method (or by `moment` if it is available), then you must provide your own `parse` function in the config. This function will be passed the formatted string and the format:\n\n`parse(dateString, format = 'YYYY-MM-DD')`\n\n```javascript\nvar picker = new Pikaday({\n    field: document.getElementById('datepicker'),\n    format: 'D/M/YYYY',\n    toString(date, format) {\n        // you should do formatting based on the passed format,\n        // but we will just return 'D/M/YYYY' for simplicity\n        const day = date.getDate();\n        const month = date.getMonth() + 1;\n        const year = date.getFullYear();\n        return `${day}/${month}/${year}`;\n    },\n    parse(dateString, format) {\n        // dateString is the result of `toString` method\n        const parts = dateString.split('/');\n        const day = parseInt(parts[0], 10);\n        const month = parseInt(parts[1], 10) - 1;\n        const year = parseInt(parts[2], 10);\n        return new Date(year, month, day);\n    }\n});\n```\n\n### Configuration\n\nAs the examples demonstrate above\nPikaday has many useful options:\n\n* `field` bind the datepicker to a form field\n* `trigger` use a different element to trigger opening the datepicker, see [trigger example][] (default to `field`)\n* `bound` automatically show/hide the datepicker on `field` focus (default `true` if `field` is set)\n* `ariaLabel` data-attribute on the input field with an aria assistance text (only applied when `bound` is set)\n* `position` preferred position of the datepicker relative to the form field, e.g.: `top right`, `bottom right` **Note:** automatic adjustment may occur to avoid datepicker from being displayed outside the viewport, see [positions example][] (default to 'bottom left')\n* `reposition` can be set to false to not reposition datepicker within the viewport, forcing it to take the configured `position` (default: true)\n* `container` DOM node to render calendar into, see [container example][] (default: undefined)\n* `format` the default output format for `.toString()` and `field` value (requires [Moment.js][moment] for custom formatting)\n* `formatStrict` the default flag for moment's strict date parsing (requires [Moment.js][moment] for custom formatting)\n* `toString(date, format)` function which will be used for custom formatting. This function will take precedence over `moment`.\n* `parse(dateString, format)` function which will be used for parsing input string and getting a date object from it. This function will take precedence over `moment`.\n* `defaultDate` the initial date to view when first opened\n* `setDefaultDate` Boolean (true/false). make the `defaultDate` the initial selected value\n* `firstDay` first day of the week (0: Sunday, 1: Monday, etc)\n* `minDate` the minimum/earliest date that can be selected (this should be a native Date object - e.g. `new Date()` or `moment().toDate()`)\n* `maxDate` the maximum/latest date that can be selected (this should be a native Date object - e.g. `new Date()` or `moment().toDate()`)\n* `disableWeekends` disallow selection of Saturdays or Sundays\n* `disableDayFn` callback function that gets passed a Date object for each day in view. Should return true to disable selection of that day.\n* `yearRange` number of years either side (e.g. `10`) or array of upper/lower range (e.g. `[1900,2015]`)\n* `showWeekNumber` show the ISO week number at the head of the row (default `false`)\n* `pickWholeWeek` select a whole week instead of a day (default `false`)\n* `isRTL` reverse the calendar for right-to-left languages\n* `i18n` language defaults for month and weekday names (see internationalization below)\n* `yearSuffix` additional text to append to the year in the title\n* `showMonthAfterYear` render the month after year in the title (default `false`)\n* `showDaysInNextAndPreviousMonths` render days of the calendar grid that fall in the next or previous months (default: false)\n* `enableSelectionDaysInNextAndPreviousMonths` allows user to select date that is in the next or previous months (default: false)\n* `numberOfMonths` number of visible calendars\n* `mainCalendar` when `numberOfMonths` is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`). Only used for the first display or when a selected date is not already visible\n* `events` array of dates that you would like to differentiate from regular days (e.g. `['Sat Jun 28 2017', 'Sun Jun 29 2017', 'Tue Jul 01 2017',]`)\n* `theme` define a classname that can be used as a hook for styling different themes, see [theme example][] (default `null`)\n* `blurFieldOnSelect` defines if the field is blurred when a date is selected (default `true`)\n* `onSelect` callback function for when a date is selected\n* `onOpen` callback function for when the picker becomes visible\n* `onClose` callback function for when the picker is hidden\n* `onDraw` callback function for when the picker draws a new month\n* `keyboardInput` enable keyboard input support (default `true`)\n\n### Styling\n\nIf the `reposition` configuration-option is enabled (default), Pikaday will apply CSS-classes to the datepicker according to how it is positioned:\n\n* `top-aligned`\n* `left-aligned`\n* `right-aligned`\n* `bottom-aligned`\n\nNote that the DOM element at any time will typically have 2 CSS-classes (eg. `top-aligned right-aligned` etc).\n\n## jQuery Plugin\n\nThe normal version of Pikaday does not require jQuery, however there is a jQuery plugin if that floats your boat (see `plugins/pikaday.jquery.js` in the repository). This version requires jQuery, naturally, and can be used like other plugins:\nSee the [jQuery example][] for a full version.\n\n```html\n<script src=\"//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"></script>\n<script src=\"pikaday.js\"></script>\n<script src=\"plugins/pikaday.jquery.js\"></script>\n<script>\n\n// activate datepickers for all elements with a class of `datepicker`\n$('.datepicker').pikaday({ firstDay: 1 });\n\n// chain a few methods for the first datepicker, jQuery style!\n$('.datepicker').eq(0).pikaday('show').pikaday('gotoYear', 2042);\n\n</script>\n```\n\n## AMD support\n\nIf you use a modular script loader, Pikaday is not bound to the global object and will fit nicely in your build process. You can require Pikaday just like any other module.\nSee the [AMD example][] for a full version.\n\n```javascript\nrequire(['pikaday'], function(Pikaday) {\n    var picker = new Pikaday({ field: document.getElementById('datepicker') });\n});\n```\nThe same applies for the jQuery plugin mentioned above.\nSee the [jQuery AMD example][] for a full version.\n\n```javascript\nrequire(['jquery', 'pikaday.jquery'], function($) {\n    $('#datepicker').pikaday();\n});\n```\n\n## CommonJS module support\n\nIf you use a CommonJS compatible environment you can use the require function to import Pikaday.\n\n\n```javascript\nvar pikaday = require('pikaday');\n```\n\nWhen you bundle all your required modules with [Browserify][browserify] and you don't use [Moment.js][moment] specify the ignore option:\n\n`browserify main.js -o bundle.js -i moment`\n\n## Ruby on Rails\n\nIf you're using **Ruby on Rails**, make sure to check out the [Pikaday gem][gem].\n\n## Methods\n\nYou can control the date picker after creation:\n\n```javascript\nvar picker = new Pikaday({ field: document.getElementById('datepicker') });\n```\n\n### Get and set date\n\n`picker.toString('YYYY-MM-DD')`\n\nReturns the selected date in a string format. If [Moment.js][moment] exists (recommended) then Pikaday can return any format that Moment understands.\nYou can also provide your own `toString` function and do the formatting yourself. Read more in the [formatting](#formatting) section.\n\nIf neither `moment` object exists nor `toString` function is provided, JavaScript's default [`.toDateString()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toDateString) method will be used.\n\n`picker.getDate()`\n\nReturns a basic JavaScript `Date` object of the selected day, or `null` if no selection.\n\n`picker.setDate('2015-01-01')`\n\nSet the current selection. This will be restricted within the bounds of `minDate` and `maxDate` options if they're specified. You can optionally pass a boolean as the second parameter to prevent triggering of the onSelect callback (true), allowing the date to be set silently.\n\n`picker.getMoment()`\n\nReturns a [Moment.js][moment] object for the selected date (Moment must be loaded before Pikaday).\n\n`picker.setMoment(moment('14th February 2014', 'DDo MMMM YYYY'))`\n\nSet the current selection with a [Moment.js][moment] object (see `setDate` for details).\n\n### Clear and reset date\n\n`picker.clear()`\n\nWill clear and reset the input where picker is bound to.\n\n### Change current view\n\n`picker.gotoDate(new Date(2014, 1))`\n\nChange the current view to see a specific date. This example will jump to February 2014 ([month is a zero-based index][mdn_date]).\n\n`picker.gotoToday()`\n\nShortcut for `picker.gotoDate(new Date())`\n\n`picker.gotoMonth(2)`\n\nChange the current view by month (0: January, 1: Februrary, etc).\n\n`picker.nextMonth()`\n`picker.prevMonth()`\n\nGo to the next or previous month (this will change year if necessary).\n\n`picker.gotoYear()`\n\nChange the year being viewed.\n\n`picker.setMinDate()`\n\nUpdate the minimum/earliest date that can be selected.\n\n`picker.setMaxDate()`\n\nUpdate the maximum/latest date that can be selected.\n\n`picker.setStartRange()`\n\nUpdate the range start date. For using two Pikaday instances to select a date range.\n\n`picker.setEndRange()`\n\nUpdate the range end date. For using two Pikaday instances to select a date range.\n\n### Show and hide datepicker\n\n`picker.isVisible()`\n\nReturns `true` or `false`.\n\n`picker.show()`\n\nMake the picker visible.\n\n`picker.adjustPosition()`\n\nRecalculate and change the position of the picker.\n\n`picker.hide()`\n\nHide the picker making it invisible.\n\n`picker.destroy()`\n\nHide the picker and remove all event listeners — no going back!\n\n### Internationalization\n\nThe default `i18n` configuration format looks like this:\n\n```javascript\ni18n: {\n    previousMonth : 'Previous Month',\n    nextMonth     : 'Next Month',\n    months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n    weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n    weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n}\n```\n\nYou must provide 12 months and 7 weekdays (with abbreviations). Always specify weekdays in this order with Sunday first. You can change the `firstDay` option to reorder if necessary (0: Sunday, 1: Monday, etc). You can also set `isRTL` to `true` for languages that are read right-to-left.\n\n\n## Extensions\n\n### Timepicker\n\nPikaday is a pure datepicker. It will not support picking a time of day. However, there have been efforts to add time support to Pikaday.\nSee [#1][issue1] and [#18][issue18]. These reside in their own fork.\n\nYou can use the work [@owenmead][owenmead] did most recently at [owenmead/Pikaday][owen Pika]\nA more simple time selection approach done by [@xeeali][xeeali] at [xeeali/Pikaday][xeeali Pika] is based on version 1.2.0.\nAlso [@stas][stas] has a fork [stas/Pikaday][stas Pika], but is now quite old\n\n\n## Browser Compatibility\n\n* IE 7+\n* Chrome 8+\n* Firefox 3.5+\n* Safari 3+\n* Opera 10.6+\n\n[![browser compatibility](https://ci.testling.com/rikkert/pikaday.png)\n](https://ci.testling.com/rikkert/pikaday)\n\n\n* * *\n\n## Authors\n\n* David Bushell [https://dbushell.com][Bushell] [@dbushell][Bushell Twitter]\n* Ramiro Rikkert [GitHub][Rikkert] [@RamRik][Rikkert Twitter]\n\nThanks to [@shoogledesigns][shoogledesigns] for the name.\n\nCopyright © 2014 David Bushell | BSD & MIT license\n\n  [Pikaday]:     https://pikaday.com/                                             \"Pikaday\"\n  [moment]:      http://momentjs.com/                                             \"moment.js\"\n  [browserify]:  http://browserify.org/                                           \"browserify\"\n  [screenshot]:  https://raw.github.com/Pikaday/Pikaday/master/examples/screenshot.png  \"Screenshot\"\n  [issues]:      https://github.com/Pikaday/Pikaday/issues                        \"Issue tracker\"\n  [gem]:         https://rubygems.org/gems/pikaday-gem                            \"RoR gem\"\n  [mdn_date]:    https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date  \"Date\"\n  [Bushell]:     https://dbushell.com/                                            \"dbushell.com\"\n  [Bushell Twitter]: https://twitter.com/dbushell                                 \"@dbushell\"\n  [Rikkert]:     https://github.com/rikkert                                       \"Rikkert GitHub\"\n  [Rikkert Twitter]: https://twitter.com/ramrik                                   \"@ramrik\"\n  [shoogledesigns]:  https://twitter.com/shoogledesigns/status/255209384261586944 \"@shoogledesigns\"\n  [issue1]:      https://github.com/Pikaday/Pikaday/issues/1                      \"Issue 1\"\n  [issue18]:     https://github.com/Pikaday/Pikaday/issues/18                     \"Issue 18\"\n  [stas]:        https://github.com/stas                                          \"@stas\"\n  [stas Pika]:   https://github.com/stas/Pikaday                                  \"Pikaday\"\n  [owenmead]:    https://github.com/owenmead                                      \"@owenmead\"\n  [owen Pika]:   https://github.com/owenmead/Pikaday                              \"Pikaday\"\n  [xeeali]:      https://github.com/xeeali                                        \"@xeeali\"\n  [xeeali Pika]: https://github.com/xeeali/Pikaday                                \"Pikaday\"\n  [moment.js example]: https://pikaday.com/examples/moment.html    \"Pikaday w/ moment.js\"\n  [jQuery example]: https://pikaday.com/examples/jquery.html       \"Pikaday w/ jQuery\"\n  [AMD example]: https://pikaday.com/examples/amd.html             \"Pikaday w/ AMD\"\n  [jQuery AMD example]: https://pikaday.com/examples/jquery-amd.html \"Pikaday w/ jQuery + AMD\"\n  [trigger example]: https://pikaday.com/examples/trigger.html     \"Pikaday using custom trigger\"\n  [positions example]: https://pikaday.com/examples/positions.html \"Pikaday using different position options\"\n  [container example]: https://pikaday.com/examples/container.html \"Pikaday using custom calendar container\"\n  [theme example]: https://pikaday.com/examples/theme.html         \"Pikaday using multiple themes\"\n\n\n\n[npm-image]: https://img.shields.io/npm/v/pikaday.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/pikaday\n[license-image]: https://img.shields.io/:license-mit-blue.svg?style=flat-square\n[license-url]: LICENSE.md\n[downloads-image]: http://img.shields.io/npm/dm/pikaday.svg?style=flat-square\n[downloads-url]: https://npmjs.org/package/pikaday\n"
  },
  {
    "path": "modules/system/assets/vendor/pikaday/css/pikaday.css",
    "content": "@charset \"UTF-8\";\n\n/*!\n * Pikaday\n * Copyright © 2014 David Bushell | BSD & MIT license | https://dbushell.com/\n */\n\n.pika-single {\n    z-index: 9999;\n    display: block;\n    position: relative;\n    color: #333;\n    background: #fff;\n    border: 1px solid #ccc;\n    border-bottom-color: #bbb;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n\n/*\nclear child float (pika-lendar), using the famous micro clearfix hack\nhttp://nicolasgallagher.com/micro-clearfix-hack/\n*/\n.pika-single:before,\n.pika-single:after {\n    content: \" \";\n    display: table;\n}\n.pika-single:after { clear: both }\n\n.pika-single.is-hidden {\n    display: none;\n}\n\n.pika-single.is-bound {\n    position: absolute;\n    box-shadow: 0 5px 15px -5px rgba(0,0,0,.5);\n}\n\n.pika-lendar {\n    float: left;\n    width: 240px;\n    margin: 8px;\n}\n\n.pika-title {\n    position: relative;\n    text-align: center;\n}\n\n.pika-label {\n    display: inline-block;\n    position: relative;\n    z-index: 9999;\n    overflow: hidden;\n    margin: 0;\n    padding: 5px 3px;\n    font-size: 14px;\n    line-height: 20px;\n    font-weight: bold;\n    background-color: #fff;\n}\n.pika-title select {\n    cursor: pointer;\n    position: absolute;\n    z-index: 9998;\n    margin: 0;\n    left: 0;\n    top: 5px;\n    opacity: 0;\n}\n\n.pika-prev,\n.pika-next {\n    display: block;\n    cursor: pointer;\n    position: relative;\n    outline: none;\n    border: 0;\n    padding: 0;\n    width: 20px;\n    height: 30px;\n    /* hide text using text-indent trick, using width value (it's enough) */\n    text-indent: 20px;\n    white-space: nowrap;\n    overflow: hidden;\n    background-color: transparent;\n    background-position: center center;\n    background-repeat: no-repeat;\n    background-size: 75% 75%;\n    opacity: .5;\n}\n\n.pika-prev:hover,\n.pika-next:hover {\n    opacity: 1;\n}\n\n.pika-prev,\n.is-rtl .pika-next {\n    float: left;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==');\n}\n\n.pika-next,\n.is-rtl .pika-prev {\n    float: right;\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=');\n}\n\n.pika-prev.is-disabled,\n.pika-next.is-disabled {\n    cursor: default;\n    opacity: .2;\n}\n\n.pika-select {\n    display: inline-block;\n}\n\n.pika-table {\n    width: 100%;\n    border-collapse: collapse;\n    border-spacing: 0;\n    border: 0;\n}\n\n.pika-table th,\n.pika-table td {\n    width: 14.285714285714286%;\n    padding: 0;\n}\n\n.pika-table th {\n    color: #999;\n    font-size: 12px;\n    line-height: 25px;\n    font-weight: bold;\n    text-align: center;\n}\n\n.pika-button {\n    cursor: pointer;\n    display: block;\n    box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    outline: none;\n    border: 0;\n    margin: 0;\n    width: 100%;\n    padding: 5px;\n    color: #666;\n    font-size: 12px;\n    line-height: 15px;\n    text-align: right;\n    background: #f5f5f5;\n    height: initial;\n}\n\n.pika-week {\n    font-size: 11px;\n    color: #999;\n}\n\n.is-today .pika-button {\n    color: #33aaff;\n    font-weight: bold;\n}\n\n.is-selected .pika-button,\n.has-event .pika-button {\n    color: #fff;\n    font-weight: bold;\n    background: #33aaff;\n    box-shadow: inset 0 1px 3px #178fe5;\n    border-radius: 3px;\n}\n\n.has-event .pika-button {\n    background: #005da9;\n    box-shadow: inset 0 1px 3px #0076c9;\n}\n\n.is-disabled .pika-button,\n.is-inrange .pika-button {\n    background: #D5E9F7;\n}\n\n.is-startrange .pika-button {\n    color: #fff;\n    background: #6CB31D;\n    box-shadow: none;\n    border-radius: 3px;\n}\n\n.is-endrange .pika-button {\n    color: #fff;\n    background: #33aaff;\n    box-shadow: none;\n    border-radius: 3px;\n}\n\n.is-disabled .pika-button {\n    pointer-events: none;\n    cursor: default;\n    color: #999;\n    opacity: .3;\n}\n\n.is-outside-current-month .pika-button {\n    color: #999;\n    opacity: .3;\n}\n\n.is-selection-disabled {\n    pointer-events: none;\n    cursor: default;\n}\n\n.pika-button:hover,\n.pika-row.pick-whole-week:hover .pika-button {\n    color: #fff;\n    background: #ff8000;\n    box-shadow: none;\n    border-radius: 3px;\n}\n\n/* styling for abbr */\n.pika-table abbr {\n    border-bottom: none;\n    cursor: help;\n}\n"
  },
  {
    "path": "modules/system/assets/vendor/pikaday/js/pikaday.jquery.js",
    "content": "/*!\n * Pikaday jQuery plugin.\n *\n * Copyright © 2013 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n    'use strict';\n\n    if (typeof exports === 'object') {\n        // CommonJS module\n        factory(require('jquery'), require('pikaday'));\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery', 'pikaday'], factory);\n    } else {\n        // Browser globals\n        factory(root.jQuery, root.Pikaday);\n    }\n}(this, function ($, Pikaday)\n{\n    'use strict';\n\n    $.fn.pikaday = function()\n    {\n        var args = arguments;\n\n        if (!args || !args.length) {\n            args = [{ }];\n        }\n\n        return this.each(function()\n        {\n            var self   = $(this),\n                plugin = self.data('pikaday');\n\n            if (!(plugin instanceof Pikaday)) {\n                if (typeof args[0] === 'object') {\n                    var options = $.extend({}, args[0]);\n                    options.field = self[0];\n                    self.data('pikaday', new Pikaday(options));\n                }\n            } else {\n                if (typeof args[0] === 'string' && typeof plugin[args[0]] === 'function') {\n                    plugin[args[0]].apply(plugin, Array.prototype.slice.call(args,1));\n\n                    if (args[0] === 'destroy') {\n                        self.removeData('pikaday');\n                    }\n                }\n            }\n        });\n    };\n\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/pikaday/js/pikaday.js",
    "content": "/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n    'use strict';\n\n    var moment;\n    if (typeof exports === 'object') {\n        // CommonJS module\n        // Load moment.js as an optional dependency\n        try { moment = require('moment'); } catch (e) {}\n        module.exports = factory(moment);\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(function (req)\n        {\n            // Load moment.js as an optional dependency\n            var id = 'moment';\n            try { moment = req(id); } catch (e) {}\n            return factory(moment);\n        });\n    } else {\n        root.Pikaday = factory(root.moment);\n    }\n}(this, function (moment)\n{\n    'use strict';\n\n    /**\n     * feature detection and helper functions\n     */\n    var hasMoment = typeof moment === 'function',\n\n    hasEventListeners = !!window.addEventListener,\n\n    document = window.document,\n\n    sto = window.setTimeout,\n\n    addEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.addEventListener(e, callback, !!capture);\n        } else {\n            el.attachEvent('on' + e, callback);\n        }\n    },\n\n    removeEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.removeEventListener(e, callback, !!capture);\n        } else {\n            el.detachEvent('on' + e, callback);\n        }\n    },\n\n    trim = function(str)\n    {\n        return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n    },\n\n    hasClass = function(el, cn)\n    {\n        return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n    },\n\n    addClass = function(el, cn)\n    {\n        if (!hasClass(el, cn)) {\n            el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n        }\n    },\n\n    removeClass = function(el, cn)\n    {\n        el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n    },\n\n    isArray = function(obj)\n    {\n        return (/Array/).test(Object.prototype.toString.call(obj));\n    },\n\n    isDate = function(obj)\n    {\n        return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n    },\n\n    isWeekend = function(date)\n    {\n        var day = date.getDay();\n        return day === 0 || day === 6;\n    },\n\n    isLeapYear = function(year)\n    {\n        // solution lifted from date.js (MIT license): https://github.com/datejs/Datejs\n        return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n    },\n\n    getDaysInMonth = function(year, month)\n    {\n        return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n    },\n\n    setToStartOfDay = function(date)\n    {\n        if (isDate(date)) date.setHours(0,0,0,0);\n    },\n\n    compareDates = function(a,b)\n    {\n        // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n        return a.getTime() === b.getTime();\n    },\n\n    extend = function(to, from, overwrite)\n    {\n        var prop, hasProp;\n        for (prop in from) {\n            hasProp = to[prop] !== undefined;\n            if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n                if (isDate(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = new Date(from[prop].getTime());\n                    }\n                }\n                else if (isArray(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = from[prop].slice(0);\n                    }\n                } else {\n                    to[prop] = extend({}, from[prop], overwrite);\n                }\n            } else if (overwrite || !hasProp) {\n                to[prop] = from[prop];\n            }\n        }\n        return to;\n    },\n\n    fireEvent = function(el, eventName, data)\n    {\n        var ev;\n\n        if (document.createEvent) {\n            ev = document.createEvent('HTMLEvents');\n            ev.initEvent(eventName, true, false);\n            ev = extend(ev, data);\n            el.dispatchEvent(ev);\n        } else if (document.createEventObject) {\n            ev = document.createEventObject();\n            ev = extend(ev, data);\n            el.fireEvent('on' + eventName, ev);\n        }\n    },\n\n    adjustCalendar = function(calendar) {\n        if (calendar.month < 0) {\n            calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n            calendar.month += 12;\n        }\n        if (calendar.month > 11) {\n            calendar.year += Math.floor(Math.abs(calendar.month)/12);\n            calendar.month -= 12;\n        }\n        return calendar;\n    },\n\n    /**\n     * defaults and localisation\n     */\n    defaults = {\n\n        // bind the picker to a form field\n        field: null,\n\n        // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n        bound: undefined,\n\n        // data-attribute on the input field with an aria assistance text (only applied when `bound` is set)\n        ariaLabel: 'Use the arrow keys to pick a date',\n\n        // position of the datepicker, relative to the field (default to bottom & left)\n        // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n        position: 'bottom left',\n\n        // automatically fit in the viewport even if it means repositioning from the position option\n        reposition: true,\n\n        // the default output format for `.toString()` and `field` value\n        format: 'YYYY-MM-DD',\n\n        // the toString function which gets passed a current date object and format\n        // and returns a string\n        toString: null,\n\n        // used to create date object from current input string\n        parse: null,\n\n        // the initial date to view when first opened\n        defaultDate: null,\n\n        // make the `defaultDate` the initial selected value\n        setDefaultDate: false,\n\n        // first day of week (0: Sunday, 1: Monday etc)\n        firstDay: 0,\n\n        // minimum number of days in the week that gets week number one\n        // default ISO 8601, week 01 is the week with the first Thursday (4)\n        firstWeekOfYearMinDays: 4,\n\n        // the default flag for moment's strict date parsing\n        formatStrict: false,\n\n        // the minimum/earliest date that can be selected\n        minDate: null,\n        // the maximum/latest date that can be selected\n        maxDate: null,\n\n        // number of years either side, or array of upper/lower range\n        yearRange: 10,\n\n        // show week numbers at head of row\n        showWeekNumber: false,\n\n        // Week picker mode\n        pickWholeWeek: false,\n\n        // used internally (don't config outside)\n        minYear: 0,\n        maxYear: 9999,\n        minMonth: undefined,\n        maxMonth: undefined,\n\n        startRange: null,\n        endRange: null,\n\n        isRTL: false,\n\n        // Additional text to append to the year in the calendar title\n        yearSuffix: '',\n\n        // Render the month after year in the calendar title\n        showMonthAfterYear: false,\n\n        // Render days of the calendar grid that fall in the next or previous month\n        showDaysInNextAndPreviousMonths: false,\n\n        // Allows user to select days that fall in the next or previous month\n        enableSelectionDaysInNextAndPreviousMonths: false,\n\n        // how many months are visible\n        numberOfMonths: 1,\n\n        // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n        // only used for the first display or when a selected date is not visible\n        mainCalendar: 'left',\n\n        // Specify a DOM element to render the calendar in\n        container: undefined,\n\n        // Blur field when date is selected\n        blurFieldOnSelect : true,\n\n        // internationalization\n        i18n: {\n            previousMonth : 'Previous Month',\n            nextMonth     : 'Next Month',\n            months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n            weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n            weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n        },\n\n        // Theme Classname\n        theme: null,\n\n        // events array\n        events: [],\n\n        // callback function\n        onSelect: null,\n        onOpen: null,\n        onClose: null,\n        onDraw: null,\n\n        // Enable keyboard input\n        keyboardInput: true\n    },\n\n\n    /**\n     * templating functions to abstract HTML rendering\n     */\n    renderDayName = function(opts, day, abbr)\n    {\n        day += opts.firstDay;\n        while (day >= 7) {\n            day -= 7;\n        }\n        return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n    },\n\n    renderDay = function(opts)\n    {\n        var arr = [];\n        var ariaSelected = 'false';\n        if (opts.isEmpty) {\n            if (opts.showDaysInNextAndPreviousMonths) {\n                arr.push('is-outside-current-month');\n\n                if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n                    arr.push('is-selection-disabled');\n                }\n\n            } else {\n                return '<td class=\"is-empty\"></td>';\n            }\n        }\n        if (opts.isDisabled) {\n            arr.push('is-disabled');\n        }\n        if (opts.isToday) {\n            arr.push('is-today');\n        }\n        if (opts.isSelected) {\n            arr.push('is-selected');\n            ariaSelected = 'true';\n        }\n        if (opts.hasEvent) {\n            arr.push('has-event');\n        }\n        if (opts.isInRange) {\n            arr.push('is-inrange');\n        }\n        if (opts.isStartRange) {\n            arr.push('is-startrange');\n        }\n        if (opts.isEndRange) {\n            arr.push('is-endrange');\n        }\n        return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\" aria-selected=\"' + ariaSelected + '\">' +\n                 '<button class=\"pika-button pika-day\" type=\"button\" ' +\n                    'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n                        opts.day +\n                 '</button>' +\n               '</td>';\n    },\n\n    isoWeek = function(date, firstWeekOfYearMinDays) {\n        // Ensure we're at the start of the day.\n        date.setHours(0, 0, 0, 0);\n\n        // Thursday in current week decides the year because January 4th\n        // is always in the first week according to ISO8601.\n        var yearDay        = date.getDate(),\n            weekDay        = date.getDay(),\n            dayInFirstWeek = firstWeekOfYearMinDays,\n            dayShift       = dayInFirstWeek - 1, // counting starts at 0\n            daysPerWeek    = 7,\n            prevWeekDay    = function(day) { return (day + daysPerWeek - 1) % daysPerWeek; };\n\n        // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n        date.setDate(yearDay + dayShift - prevWeekDay(weekDay));\n\n        var jan4th      = new Date(date.getFullYear(), 0, dayInFirstWeek),\n            msPerDay    = 24 * 60 * 60 * 1000,\n            daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay,\n            weekNum     = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);\n\n        return weekNum;\n    },\n\n    renderWeek = function (d, m, y, firstWeekOfYearMinDays) {\n        var date = new Date(y, m, d),\n            week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);\n\n        return '<td class=\"pika-week\">' + week + '</td>';\n    },\n\n    renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n    {\n        return '<tr class=\"pika-row' + (pickWholeWeek ? ' pick-whole-week' : '') + (isRowSelected ? ' is-selected' : '') + '\">' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n    },\n\n    renderBody = function(rows)\n    {\n        return '<tbody>' + rows.join('') + '</tbody>';\n    },\n\n    renderHead = function(opts)\n    {\n        var i, arr = [];\n        if (opts.showWeekNumber) {\n            arr.push('<th></th>');\n        }\n        for (i = 0; i < 7; i++) {\n            arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n        }\n        return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n    },\n\n    renderTitle = function(instance, c, year, month, refYear, randId)\n    {\n        var i, j, arr,\n            opts = instance._o,\n            isMinYear = year === opts.minYear,\n            isMaxYear = year === opts.maxYear,\n            html = '<div id=\"' + randId + '\" class=\"pika-title\" role=\"heading\" aria-live=\"assertive\">',\n            monthHtml,\n            yearHtml,\n            prev = true,\n            next = true;\n\n        for (arr = [], i = 0; i < 12; i++) {\n            arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n                (i === month ? ' selected=\"selected\"': '') +\n                ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? ' disabled=\"disabled\"' : '') + '>' +\n                opts.i18n.months[i] + '</option>');\n        }\n\n        monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (isArray(opts.yearRange)) {\n            i = opts.yearRange[0];\n            j = opts.yearRange[1] + 1;\n        } else {\n            i = year - opts.yearRange;\n            j = 1 + year + opts.yearRange;\n        }\n\n        for (arr = []; i < j && i <= opts.maxYear; i++) {\n            if (i >= opts.minYear) {\n                arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected=\"selected\"': '') + '>' + (i) + '</option>');\n            }\n        }\n        yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (opts.showMonthAfterYear) {\n            html += yearHtml + monthHtml;\n        } else {\n            html += monthHtml + yearHtml;\n        }\n\n        if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n            prev = false;\n        }\n\n        if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n            next = false;\n        }\n\n        if (c === 0) {\n            html += '<button class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n        }\n        if (c === (instance._o.numberOfMonths - 1) ) {\n            html += '<button class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n        }\n\n        return html += '</div>';\n    },\n\n    renderTable = function(opts, data, randId)\n    {\n        return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"' + randId + '\">' + renderHead(opts) + renderBody(data) + '</table>';\n    },\n\n\n    /**\n     * Pikaday constructor\n     */\n    Pikaday = function(options)\n    {\n        var self = this,\n            opts = self.config(options);\n\n        self._onMouseDown = function(e)\n        {\n            if (!self._v) {\n                return;\n            }\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n\n            if (!hasClass(target, 'is-disabled')) {\n                if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n                    self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n                    if (opts.bound) {\n                        sto(function() {\n                            self.hide();\n                            if (opts.blurFieldOnSelect && opts.field) {\n                                opts.field.blur();\n                            }\n                        }, 100);\n                    }\n                }\n                else if (hasClass(target, 'pika-prev')) {\n                    self.prevMonth();\n                }\n                else if (hasClass(target, 'pika-next')) {\n                    self.nextMonth();\n                }\n            }\n            if (!hasClass(target, 'pika-select')) {\n                // if this is touch event prevent mouse events emulation\n                if (e.preventDefault) {\n                    e.preventDefault();\n                } else {\n                    e.returnValue = false;\n                    return false;\n                }\n            } else {\n                self._c = true;\n            }\n        };\n\n        self._onChange = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n            if (hasClass(target, 'pika-select-month')) {\n                self.gotoMonth(target.value);\n            }\n            else if (hasClass(target, 'pika-select-year')) {\n                self.gotoYear(target.value);\n            }\n        };\n\n        self._onKeyChange = function(e)\n        {\n            e = e || window.event;\n\n            if (self.isVisible()) {\n\n                switch(e.keyCode){\n                    case 13:\n                    case 27:\n                        if (opts.field) {\n                            opts.field.blur();\n                        }\n                        break;\n                    case 37:\n                        self.adjustDate('subtract', 1);\n                        break;\n                    case 38:\n                        self.adjustDate('subtract', 7);\n                        break;\n                    case 39:\n                        self.adjustDate('add', 1);\n                        break;\n                    case 40:\n                        self.adjustDate('add', 7);\n                        break;\n                    case 8:\n                    case 46:\n                        self.setDate(null);\n                        break;\n                }\n            }\n        };\n\n        self._parseFieldValue = function()\n        {\n            if (opts.parse) {\n                return opts.parse(opts.field.value, opts.format);\n            } else if (hasMoment) {\n                var date = moment(opts.field.value, opts.format, opts.formatStrict);\n                return (date && date.isValid()) ? date.toDate() : null;\n            } else {\n                return new Date(Date.parse(opts.field.value));\n            }\n        };\n\n        self._onInputChange = function(e)\n        {\n            var date;\n\n            if (e.firedBy === self) {\n                return;\n            }\n            date = self._parseFieldValue();\n            if (isDate(date)) {\n              self.setDate(date);\n            }\n            if (!self._v) {\n                self.show();\n            }\n        };\n\n        self._onInputFocus = function()\n        {\n            self.show();\n        };\n\n        self._onInputClick = function()\n        {\n            self.show();\n        };\n\n        self._onInputBlur = function()\n        {\n            // IE allows pika div to gain focus; catch blur the input field\n            var pEl = document.activeElement;\n            do {\n                if (hasClass(pEl, 'pika-single')) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n\n            if (!self._c) {\n                self._b = sto(function() {\n                    self.hide();\n                }, 50);\n            }\n            self._c = false;\n        };\n\n        self._onClick = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement,\n                pEl = target;\n            if (!target) {\n                return;\n            }\n            if (!hasEventListeners && hasClass(target, 'pika-select')) {\n                if (!target.onchange) {\n                    target.setAttribute('onchange', 'return;');\n                    addEvent(target, 'change', self._onChange);\n                }\n            }\n            do {\n                if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n                self.hide();\n            }\n        };\n\n        self.el = document.createElement('div');\n        self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n        addEvent(self.el, 'mousedown', self._onMouseDown, true);\n        addEvent(self.el, 'touchend', self._onMouseDown, true);\n        addEvent(self.el, 'change', self._onChange);\n\n        if (opts.keyboardInput) {\n            addEvent(document, 'keydown', self._onKeyChange);\n        }\n\n        if (opts.field) {\n            if (opts.container) {\n                opts.container.appendChild(self.el);\n            } else if (opts.bound) {\n                document.body.appendChild(self.el);\n            } else {\n                opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n            }\n            addEvent(opts.field, 'change', self._onInputChange);\n\n            if (!opts.defaultDate) {\n                opts.defaultDate = self._parseFieldValue();\n                opts.setDefaultDate = true;\n            }\n        }\n\n        var defDate = opts.defaultDate;\n\n        if (isDate(defDate)) {\n            if (opts.setDefaultDate) {\n                self.setDate(defDate, true);\n            } else {\n                self.gotoDate(defDate);\n            }\n        } else {\n            self.gotoDate(new Date());\n        }\n\n        if (opts.bound) {\n            this.hide();\n            self.el.className += ' is-bound';\n            addEvent(opts.trigger, 'click', self._onInputClick);\n            addEvent(opts.trigger, 'focus', self._onInputFocus);\n            addEvent(opts.trigger, 'blur', self._onInputBlur);\n        } else {\n            this.show();\n        }\n    };\n\n\n    /**\n     * public Pikaday API\n     */\n    Pikaday.prototype = {\n\n\n        /**\n         * configure functionality\n         */\n        config: function(options)\n        {\n            if (!this._o) {\n                this._o = extend({}, defaults, true);\n            }\n\n            var opts = extend(this._o, options, true);\n\n            opts.isRTL = !!opts.isRTL;\n\n            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n            opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n            opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n            opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n            opts.disableWeekends = !!opts.disableWeekends;\n\n            opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n            var nom = parseInt(opts.numberOfMonths, 10) || 1;\n            opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n            if (!isDate(opts.minDate)) {\n                opts.minDate = false;\n            }\n            if (!isDate(opts.maxDate)) {\n                opts.maxDate = false;\n            }\n            if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n                opts.maxDate = opts.minDate = false;\n            }\n            if (opts.minDate) {\n                this.setMinDate(opts.minDate);\n            }\n            if (opts.maxDate) {\n                this.setMaxDate(opts.maxDate);\n            }\n\n            if (isArray(opts.yearRange)) {\n                var fallback = new Date().getFullYear() - 10;\n                opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n                opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n            } else {\n                opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n                if (opts.yearRange > 100) {\n                    opts.yearRange = 100;\n                }\n            }\n\n            return opts;\n        },\n\n        /**\n         * return a formatted string of the current selection (using Moment.js if available)\n         */\n        toString: function(format)\n        {\n            format = format || this._o.format;\n            if (!isDate(this._d)) {\n                return '';\n            }\n            if (this._o.toString) {\n              return this._o.toString(this._d, format);\n            }\n            if (hasMoment) {\n              return moment(this._d).format(format);\n            }\n            return this._d.toDateString();\n        },\n\n        /**\n         * return a Moment.js object of the current selection (if available)\n         */\n        getMoment: function()\n        {\n            return hasMoment ? moment(this._d) : null;\n        },\n\n        /**\n         * set the current selection from a Moment.js object (if available)\n         */\n        setMoment: function(date, preventOnSelect)\n        {\n            if (hasMoment && moment.isMoment(date)) {\n                this.setDate(date.toDate(), preventOnSelect);\n            }\n        },\n\n        /**\n         * return a Date object of the current selection\n         */\n        getDate: function()\n        {\n            return isDate(this._d) ? new Date(this._d.getTime()) : null;\n        },\n\n        /**\n         * set the current selection\n         */\n        setDate: function(date, preventOnSelect)\n        {\n            if (!date) {\n                this._d = null;\n\n                if (this._o.field) {\n                    this._o.field.value = '';\n                    fireEvent(this._o.field, 'change', { firedBy: this });\n                }\n\n                return this.draw();\n            }\n            if (typeof date === 'string') {\n                date = new Date(Date.parse(date));\n            }\n            if (!isDate(date)) {\n                return;\n            }\n\n            var min = this._o.minDate,\n                max = this._o.maxDate;\n\n            if (isDate(min) && date < min) {\n                date = min;\n            } else if (isDate(max) && date > max) {\n                date = max;\n            }\n\n            this._d = new Date(date.getTime());\n            setToStartOfDay(this._d);\n            this.gotoDate(this._d);\n\n            if (this._o.field) {\n                this._o.field.value = this.toString();\n                fireEvent(this._o.field, 'change', { firedBy: this });\n            }\n            if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n                this._o.onSelect.call(this, this.getDate());\n            }\n        },\n\n        /**\n         * clear and reset the date\n         */\n        clear: function()\n        {\n            this.setDate(null);\n        },\n\n        /**\n         * change view to a specific date\n         */\n        gotoDate: function(date)\n        {\n            var newCalendar = true;\n\n            if (!isDate(date)) {\n                return;\n            }\n\n            if (this.calendars) {\n                var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n                    lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n                    visibleDate = date.getTime();\n                // get the end of the month\n                lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n                lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n                newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n            }\n\n            if (newCalendar) {\n                this.calendars = [{\n                    month: date.getMonth(),\n                    year: date.getFullYear()\n                }];\n                if (this._o.mainCalendar === 'right') {\n                    this.calendars[0].month += 1 - this._o.numberOfMonths;\n                }\n            }\n\n            this.adjustCalendars();\n        },\n\n        adjustDate: function(sign, days) {\n\n            var day = this.getDate() || new Date();\n            var difference = parseInt(days)*24*60*60*1000;\n\n            var newDay;\n\n            if (sign === 'add') {\n                newDay = new Date(day.valueOf() + difference);\n            } else if (sign === 'subtract') {\n                newDay = new Date(day.valueOf() - difference);\n            }\n\n            this.setDate(newDay);\n        },\n\n        adjustCalendars: function() {\n            this.calendars[0] = adjustCalendar(this.calendars[0]);\n            for (var c = 1; c < this._o.numberOfMonths; c++) {\n                this.calendars[c] = adjustCalendar({\n                    month: this.calendars[0].month + c,\n                    year: this.calendars[0].year\n                });\n            }\n            this.draw();\n        },\n\n        gotoToday: function()\n        {\n            this.gotoDate(new Date());\n        },\n\n        /**\n         * change view to a specific month (zero-index, e.g. 0: January)\n         */\n        gotoMonth: function(month)\n        {\n            if (!isNaN(month)) {\n                this.calendars[0].month = parseInt(month, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        nextMonth: function()\n        {\n            this.calendars[0].month++;\n            this.adjustCalendars();\n        },\n\n        prevMonth: function()\n        {\n            this.calendars[0].month--;\n            this.adjustCalendars();\n        },\n\n        /**\n         * change view to a specific full year (e.g. \"2012\")\n         */\n        gotoYear: function(year)\n        {\n            if (!isNaN(year)) {\n                this.calendars[0].year = parseInt(year, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        /**\n         * change the minDate\n         */\n        setMinDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.minDate = value;\n                this._o.minYear  = value.getFullYear();\n                this._o.minMonth = value.getMonth();\n            } else {\n                this._o.minDate = defaults.minDate;\n                this._o.minYear  = defaults.minYear;\n                this._o.minMonth = defaults.minMonth;\n                this._o.startRange = defaults.startRange;\n            }\n\n            this.draw();\n        },\n\n        /**\n         * change the maxDate\n         */\n        setMaxDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.maxDate = value;\n                this._o.maxYear = value.getFullYear();\n                this._o.maxMonth = value.getMonth();\n            } else {\n                this._o.maxDate = defaults.maxDate;\n                this._o.maxYear = defaults.maxYear;\n                this._o.maxMonth = defaults.maxMonth;\n                this._o.endRange = defaults.endRange;\n            }\n\n            this.draw();\n        },\n\n        setStartRange: function(value)\n        {\n            this._o.startRange = value;\n        },\n\n        setEndRange: function(value)\n        {\n            this._o.endRange = value;\n        },\n\n        /**\n         * refresh the HTML\n         */\n        draw: function(force)\n        {\n            if (!this._v && !force) {\n                return;\n            }\n            var opts = this._o,\n                minYear = opts.minYear,\n                maxYear = opts.maxYear,\n                minMonth = opts.minMonth,\n                maxMonth = opts.maxMonth,\n                html = '',\n                randId;\n\n            if (this._y <= minYear) {\n                this._y = minYear;\n                if (!isNaN(minMonth) && this._m < minMonth) {\n                    this._m = minMonth;\n                }\n            }\n            if (this._y >= maxYear) {\n                this._y = maxYear;\n                if (!isNaN(maxMonth) && this._m > maxMonth) {\n                    this._m = maxMonth;\n                }\n            }\n\n            for (var c = 0; c < opts.numberOfMonths; c++) {\n                randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n                html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';\n            }\n\n            this.el.innerHTML = html;\n\n            if (opts.bound) {\n                if(opts.field.type !== 'hidden') {\n                    sto(function() {\n                        opts.trigger.focus();\n                    }, 1);\n                }\n            }\n\n            if (typeof this._o.onDraw === 'function') {\n                this._o.onDraw(this);\n            }\n\n            if (opts.bound) {\n                // let the screen reader user know to use arrow keys\n                opts.field.setAttribute('aria-label', opts.ariaLabel);\n            }\n        },\n\n        adjustPosition: function()\n        {\n            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;\n\n            if (this._o.container) return;\n\n            this.el.style.position = 'absolute';\n\n            field = this._o.trigger;\n            pEl = field;\n            width = this.el.offsetWidth;\n            height = this.el.offsetHeight;\n            viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n            viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n            scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n            leftAligned = true;\n            bottomAligned = true;\n\n            if (typeof field.getBoundingClientRect === 'function') {\n                clientRect = field.getBoundingClientRect();\n                left = clientRect.left + window.pageXOffset;\n                top = clientRect.bottom + window.pageYOffset;\n            } else {\n                left = pEl.offsetLeft;\n                top  = pEl.offsetTop + pEl.offsetHeight;\n                while((pEl = pEl.offsetParent)) {\n                    left += pEl.offsetLeft;\n                    top  += pEl.offsetTop;\n                }\n            }\n\n            // default position is bottom & left\n            if ((this._o.reposition && left + width > viewportWidth) ||\n                (\n                    this._o.position.indexOf('right') > -1 &&\n                    left - width + field.offsetWidth > 0\n                )\n            ) {\n                left = left - width + field.offsetWidth;\n                leftAligned = false;\n            }\n            if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n                (\n                    this._o.position.indexOf('top') > -1 &&\n                    top - height - field.offsetHeight > 0\n                )\n            ) {\n                top = top - height - field.offsetHeight;\n                bottomAligned = false;\n            }\n\n            this.el.style.left = left + 'px';\n            this.el.style.top = top + 'px';\n\n            addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');\n            addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');\n            removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');\n            removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');\n        },\n\n        /**\n         * render HTML for a particular month\n         */\n        render: function(year, month, randId)\n        {\n            var opts   = this._o,\n                now    = new Date(),\n                days   = getDaysInMonth(year, month),\n                before = new Date(year, month, 1).getDay(),\n                data   = [],\n                row    = [];\n            setToStartOfDay(now);\n            if (opts.firstDay > 0) {\n                before -= opts.firstDay;\n                if (before < 0) {\n                    before += 7;\n                }\n            }\n            var previousMonth = month === 0 ? 11 : month - 1,\n                nextMonth = month === 11 ? 0 : month + 1,\n                yearOfPreviousMonth = month === 0 ? year - 1 : year,\n                yearOfNextMonth = month === 11 ? year + 1 : year,\n                daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n            var cells = days + before,\n                after = cells;\n            while(after > 7) {\n                after -= 7;\n            }\n            cells += 7 - after;\n            var isWeekSelected = false;\n            for (var i = 0, r = 0; i < cells; i++)\n            {\n                var day = new Date(year, month, 1 + (i - before)),\n                    isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n                    isToday = compareDates(day, now),\n                    hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n                    isEmpty = i < before || i >= (days + before),\n                    dayNumber = 1 + (i - before),\n                    monthNumber = month,\n                    yearNumber = year,\n                    isStartRange = opts.startRange && compareDates(opts.startRange, day),\n                    isEndRange = opts.endRange && compareDates(opts.endRange, day),\n                    isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n                    isDisabled = (opts.minDate && day < opts.minDate) ||\n                                 (opts.maxDate && day > opts.maxDate) ||\n                                 (opts.disableWeekends && isWeekend(day)) ||\n                                 (opts.disableDayFn && opts.disableDayFn(day));\n\n                if (isEmpty) {\n                    if (i < before) {\n                        dayNumber = daysInPreviousMonth + dayNumber;\n                        monthNumber = previousMonth;\n                        yearNumber = yearOfPreviousMonth;\n                    } else {\n                        dayNumber = dayNumber - days;\n                        monthNumber = nextMonth;\n                        yearNumber = yearOfNextMonth;\n                    }\n                }\n\n                var dayConfig = {\n                        day: dayNumber,\n                        month: monthNumber,\n                        year: yearNumber,\n                        hasEvent: hasEvent,\n                        isSelected: isSelected,\n                        isToday: isToday,\n                        isDisabled: isDisabled,\n                        isEmpty: isEmpty,\n                        isStartRange: isStartRange,\n                        isEndRange: isEndRange,\n                        isInRange: isInRange,\n                        showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n                        enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n                    };\n\n                if (opts.pickWholeWeek && isSelected) {\n                    isWeekSelected = true;\n                }\n\n                row.push(renderDay(dayConfig));\n\n                if (++r === 7) {\n                    if (opts.showWeekNumber) {\n                        row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));\n                    }\n                    data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n                    row = [];\n                    r = 0;\n                    isWeekSelected = false;\n                }\n            }\n            return renderTable(opts, data, randId);\n        },\n\n        isVisible: function()\n        {\n            return this._v;\n        },\n\n        show: function()\n        {\n            if (!this.isVisible()) {\n                this._v = true;\n                this.draw();\n                removeClass(this.el, 'is-hidden');\n                if (this._o.bound) {\n                    addEvent(document, 'click', this._onClick);\n                    this.adjustPosition();\n                }\n                if (typeof this._o.onOpen === 'function') {\n                    this._o.onOpen.call(this);\n                }\n            }\n        },\n\n        hide: function()\n        {\n            var v = this._v;\n            if (v !== false) {\n                if (this._o.bound) {\n                    removeEvent(document, 'click', this._onClick);\n                }\n\n                if (!this._o.container) {\n                    this.el.style.position = 'static'; // reset\n                    this.el.style.left = 'auto';\n                    this.el.style.top = 'auto';\n                }\n                addClass(this.el, 'is-hidden');\n                this._v = false;\n                if (v !== undefined && typeof this._o.onClose === 'function') {\n                    this._o.onClose.call(this);\n                }\n            }\n        },\n\n        /**\n         * GAME OVER\n         */\n        destroy: function()\n        {\n            var opts = this._o;\n\n            this.hide();\n            removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n            removeEvent(this.el, 'touchend', this._onMouseDown, true);\n            removeEvent(this.el, 'change', this._onChange);\n            if (opts.keyboardInput) {\n                removeEvent(document, 'keydown', this._onKeyChange);\n            }\n            if (opts.field) {\n                removeEvent(opts.field, 'change', this._onInputChange);\n                if (opts.bound) {\n                    removeEvent(opts.trigger, 'click', this._onInputClick);\n                    removeEvent(opts.trigger, 'focus', this._onInputFocus);\n                    removeEvent(opts.trigger, 'blur', this._onInputBlur);\n                }\n            }\n            if (this.el.parentNode) {\n                this.el.parentNode.removeChild(this.el);\n            }\n        }\n\n    };\n\n    return Pikaday;\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-apollo.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"com\",/^#[^\\n\\r]*/,null,\"#\"],[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"str\",/^\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,null,'\"']],[[\"kwd\",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\\s/,\nnull],[\"typ\",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[ES]?BANK=?|BLOCK|BNKSUM|E?CADR|COUNT\\*?|2?DEC\\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\\s/,null],[\"lit\",/^'(?:-*(?:\\w|\\\\[!-~])(?:[\\w-]*|\\\\[!-~])[!=?]?)?/],[\"pln\",/^-*(?:[!-z]|\\\\[!-~])(?:[\\w-]*|\\\\[!-~])[!=?]?/],[\"pun\",/^[^\\w\\t\\n\\r \"'-);\\\\\\xa0]+/]]),[\"apollo\",\"agc\",\"aea\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-basic.js",
    "content": "var a=null;\nPR.registerLangHandler(PR.createSimpleLexer([[\"str\",/^\"(?:[^\\n\\r\"\\\\]|\\\\.)*(?:\"|$)/,a,'\"'],[\"pln\",/^\\s+/,a,\" \\r\\n\\t\\u00a0\"]],[[\"com\",/^REM[^\\n\\r]*/,a],[\"kwd\",/^\\b(?:AND|CLOSE|CLR|CMD|CONT|DATA|DEF ?FN|DIM|END|FOR|GET|GOSUB|GOTO|IF|INPUT|LET|LIST|LOAD|NEW|NEXT|NOT|ON|OPEN|OR|POKE|PRINT|READ|RESTORE|RETURN|RUN|SAVE|STEP|STOP|SYS|THEN|TO|VERIFY|WAIT)\\b/,a],[\"pln\",/^[a-z][^\\W_]?(?:\\$|%)?/i,a],[\"lit\",/^(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?/i,a,\"0123456789\"],[\"pun\",\n/^.[^\\s\\w\"$%.]*/,a]]),[\"basic\",\"cbm\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-clj.js",
    "content": "/*\n Copyright (C) 2011 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\nvar a=null;\nPR.registerLangHandler(PR.createSimpleLexer([[\"opn\",/^[([{]+/,a,\"([{\"],[\"clo\",/^[)\\]}]+/,a,\")]}\"],[\"com\",/^;[^\\n\\r]*/,a,\";\"],[\"pln\",/^[\\t\\n\\r \\xa0]+/,a,\"\\t\\n\\r \\u00a0\"],[\"str\",/^\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,a,'\"']],[[\"kwd\",/^(?:def|if|do|let|quote|var|fn|loop|recur|throw|try|monitor-enter|monitor-exit|defmacro|defn|defn-|macroexpand|macroexpand-1|for|doseq|dosync|dotimes|and|or|when|not|assert|doto|proxy|defstruct|first|rest|cons|defprotocol|deftype|defrecord|reify|defmulti|defmethod|meta|with-meta|ns|in-ns|create-ns|import|intern|refer|alias|namespace|resolve|ref|deref|refset|new|set!|memfn|to-array|into-array|aset|gen-class|reduce|map|filter|find|nil?|empty?|hash-map|hash-set|vec|vector|seq|flatten|reverse|assoc|dissoc|list|list?|disj|get|union|difference|intersection|extend|extend-type|extend-protocol|prn)\\b/,a],\n[\"typ\",/^:[\\dA-Za-z-]+/]]),[\"clj\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-css.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\f\\r ]+/,null,\" \\t\\r\\n\\u000c\"]],[[\"str\",/^\"(?:[^\\n\\f\\r\"\\\\]|\\\\(?:\\r\\n?|\\n|\\f)|\\\\[\\S\\s])*\"/,null],[\"str\",/^'(?:[^\\n\\f\\r'\\\\]|\\\\(?:\\r\\n?|\\n|\\f)|\\\\[\\S\\s])*'/,null],[\"lang-css-str\",/^url\\(([^\"')]+)\\)/i],[\"kwd\",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\\w-]|$)/i,null],[\"lang-css-kw\",/^(-?(?:[_a-z]|\\\\[\\da-f]+ ?)(?:[\\w-]|\\\\\\\\[\\da-f]+ ?)*)\\s*:/i],[\"com\",/^\\/\\*[^*]*\\*+(?:[^*/][^*]*\\*+)*\\//],\n[\"com\",/^(?:<\\!--|--\\>)/],[\"lit\",/^(?:\\d+|\\d*\\.\\d+)(?:%|[a-z]+)?/i],[\"lit\",/^#[\\da-f]{3,6}\\b/i],[\"pln\",/^-?(?:[_a-z]|\\\\[\\da-f]+ ?)(?:[\\w-]|\\\\\\\\[\\da-f]+ ?)*/i],[\"pun\",/^[^\\s\\w\"']+/]]),[\"css\"]);PR.registerLangHandler(PR.createSimpleLexer([],[[\"kwd\",/^-?(?:[_a-z]|\\\\[\\da-f]+ ?)(?:[\\w-]|\\\\\\\\[\\da-f]+ ?)*/i]]),[\"css-kw\"]);PR.registerLangHandler(PR.createSimpleLexer([],[[\"str\",/^[^\"')]+/]]),[\"css-str\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-dart.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"]],[[\"com\",/^#!.*/],[\"kwd\",/^\\b(?:import|library|part of|part|as|show|hide)\\b/i],[\"com\",/^\\/\\/.*/],[\"com\",/^\\/\\*[^*]*\\*+(?:[^*/][^*]*\\*+)*\\//],[\"kwd\",/^\\b(?:class|interface)\\b/i],[\"kwd\",/^\\b(?:assert|break|case|catch|continue|default|do|else|finally|for|if|in|is|new|return|super|switch|this|throw|try|while)\\b/i],[\"kwd\",/^\\b(?:abstract|const|extends|factory|final|get|implements|native|operator|set|static|typedef|var)\\b/i],\n[\"typ\",/^\\b(?:bool|double|dynamic|int|num|object|string|void)\\b/i],[\"kwd\",/^\\b(?:false|null|true)\\b/i],[\"str\",/^r?'''[\\S\\s]*?[^\\\\]'''/],[\"str\",/^r?\"\"\"[\\S\\s]*?[^\\\\]\"\"\"/],[\"str\",/^r?'('|[^\\n\\f\\r]*?[^\\\\]')/],[\"str\",/^r?\"(\"|[^\\n\\f\\r]*?[^\\\\]\")/],[\"pln\",/^[$_a-z]\\w*/i],[\"pun\",/^[!%&*+/:<-?^|~-]/],[\"lit\",/^\\b0x[\\da-f]+/i],[\"lit\",/^\\b\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?/i],[\"lit\",/^\\b\\.\\d+(?:e[+-]?\\d+)?/i],[\"pun\",/^[(),.;[\\]{}]/]]),\n[\"dart\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-erlang.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t-\\r ]+/,null,\"\\t\\n\\u000b\\u000c\\r \"],[\"str\",/^\"(?:[^\\n\\f\\r\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,null,'\"'],[\"lit\",/^[a-z]\\w*/],[\"lit\",/^'(?:[^\\n\\f\\r'\\\\]|\\\\[^&])+'?/,null,\"'\"],[\"lit\",/^\\?[^\\t\\n ({]+/,null,\"?\"],[\"lit\",/^(?:0o[0-7]+|0x[\\da-f]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)/i,null,\"0123456789\"]],[[\"com\",/^%[^\\n]*/],[\"kwd\",/^(?:module|attributes|do|let|in|letrec|apply|call|primop|case|of|end|when|fun|try|catch|receive|after|char|integer|float,atom,string,var)\\b/],\n[\"kwd\",/^-[_a-z]+/],[\"typ\",/^[A-Z_]\\w*/],[\"pun\",/^[,.;]/]]),[\"erlang\",\"erl\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-go.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"pln\",/^(?:\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)|'(?:[^'\\\\]|\\\\[\\S\\s])+(?:'|$)|`[^`]*(?:`|$))/,null,\"\\\"'\"]],[[\"com\",/^(?:\\/\\/[^\\n\\r]*|\\/\\*[\\S\\s]*?\\*\\/)/],[\"pln\",/^(?:[^\"'/`]|\\/(?![*/]))+/]]),[\"go\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-hs.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t-\\r ]+/,null,\"\\t\\n\\u000b\\u000c\\r \"],[\"str\",/^\"(?:[^\\n\\f\\r\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,null,'\"'],[\"str\",/^'(?:[^\\n\\f\\r'\\\\]|\\\\[^&])'?/,null,\"'\"],[\"lit\",/^(?:0o[0-7]+|0x[\\da-f]+|\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)/i,null,\"0123456789\"]],[[\"com\",/^(?:--+[^\\n\\f\\r]*|{-(?:[^-]|-+[^}-])*-})/],[\"kwd\",/^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^\\d'A-Za-z]|$)/,\nnull],[\"pln\",/^(?:[A-Z][\\w']*\\.)*[A-Za-z][\\w']*/],[\"pun\",/^[^\\d\\t-\\r \"'A-Za-z]+/]]),[\"hs\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-lisp.js",
    "content": "var a=null;\nPR.registerLangHandler(PR.createSimpleLexer([[\"opn\",/^\\(+/,a,\"(\"],[\"clo\",/^\\)+/,a,\")\"],[\"com\",/^;[^\\n\\r]*/,a,\";\"],[\"pln\",/^[\\t\\n\\r \\xa0]+/,a,\"\\t\\n\\r \\u00a0\"],[\"str\",/^\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,a,'\"']],[[\"kwd\",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\\b/,a],\n[\"lit\",/^[+-]?(?:[#0]x[\\da-f]+|\\d+\\/\\d+|(?:\\.\\d+|\\d+(?:\\.\\d*)?)(?:[de][+-]?\\d+)?)/i],[\"lit\",/^'(?:-*(?:\\w|\\\\[!-~])(?:[\\w-]*|\\\\[!-~])[!=?]?)?/],[\"pln\",/^-*(?:[_a-z]|\\\\[!-~])(?:[\\w-]*|\\\\[!-~])[!=?]?/i],[\"pun\",/^[^\\w\\t\\n\\r \"'-);\\\\\\xa0]+/]]),[\"cl\",\"el\",\"lisp\",\"lsp\",\"scm\",\"ss\",\"rkt\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-llvm.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"str\",/^!?\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,null,'\"'],[\"com\",/^;[^\\n\\r]*/,null,\";\"]],[[\"pln\",/^[!%@](?:[$\\-.A-Z_a-z][\\w$\\-.]*|\\d+)/],[\"kwd\",/^[^\\W\\d]\\w*/,null],[\"lit\",/^\\d+\\.\\d+/],[\"lit\",/^(?:\\d+|0[Xx][\\dA-Fa-f]+)/],[\"pun\",/^[(-*,:<->[\\]{}]|\\.\\.\\.$/]]),[\"llvm\",\"ll\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-lua.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"str\",/^(?:\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)|'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$))/,null,\"\\\"'\"]],[[\"com\",/^--(?:\\[(=*)\\[[\\S\\s]*?(?:]\\1]|$)|[^\\n\\r]*)/],[\"str\",/^\\[(=*)\\[[\\S\\s]*?(?:]\\1]|$)/],[\"kwd\",/^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\\b/,null],[\"lit\",/^[+-]?(?:0x[\\da-f]+|(?:\\.\\d+|\\d+(?:\\.\\d*)?)(?:e[+-]?\\d+)?)/i],\n[\"pln\",/^[_a-z]\\w*/i],[\"pun\",/^[^\\w\\t\\n\\r \\xa0][^\\w\\t\\n\\r \"'+=\\xa0-]*/]]),[\"lua\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-matlab.js",
    "content": "var a=null,b=window.PR,c=[[b.PR_PLAIN,/^[\\t-\\r \\xa0]+/,a,\" \\t\\r\\n\\u000b\\u000c\\u00a0\"],[b.PR_COMMENT,/^%{[^%]*%+(?:[^%}][^%]*%+)*}/,a],[b.PR_COMMENT,/^%[^\\n\\r]*/,a,\"%\"],[\"syscmd\",/^![^\\n\\r]*/,a,\"!\"]],d=[[\"linecont\",/^\\.\\.\\.\\s*[\\n\\r]/,a],[\"err\",/^\\?\\?\\? [^\\n\\r]*/,a],[\"wrn\",/^Warning: [^\\n\\r]*/,a],[\"codeoutput\",/^>>\\s+/,a],[\"codeoutput\",/^octave:\\d+>\\s+/,a],[\"lang-matlab-operators\",/^((?:[A-Za-z]\\w*(?:\\.[A-Za-z]\\w*)*|[).\\]}])')/,a],[\"lang-matlab-identifiers\",/^([A-Za-z]\\w*(?:\\.[A-Za-z]\\w*)*)(?!')/,a],\n[b.PR_STRING,/^'(?:[^']|'')*'/,a],[b.PR_LITERAL,/^[+-]?\\.?\\d+(?:\\.\\d*)?(?:[Ee][+-]?\\d+)?[ij]?/,a],[b.PR_TAG,/^[()[\\]{}]/,a],[b.PR_PUNCTUATION,/^[!&*-/:->@\\\\^|~]/,a]],e=[[\"lang-matlab-identifiers\",/^([A-Za-z]\\w*(?:\\.[A-Za-z]\\w*)*)/,a],[b.PR_TAG,/^[()[\\]{}]/,a],[b.PR_PUNCTUATION,/^[!&*-/:->@\\\\^|~]/,a],[\"transpose\",/^'/,a]];\nb.registerLangHandler(b.createSimpleLexer([],[[b.PR_KEYWORD,/^\\b(?:break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while)\\b/,a],[\"const\",/^\\b(?:true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout)\\b/,a],[b.PR_TYPE,/^\\b(?:cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse)\\b/,a],[\"fun\",/^\\b(?:abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan[2dh]?|audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|bessel[h-ky]|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:.(?:close|closeVar|computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers.Map|contour(?:[3cf]|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab.io.MatFile|matlab.mixin.(?:Copyable|Heterogeneous(?:.getDefaultScalarElement)?)|matlabrc|matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta.(?:class(?:.fromName)?|DynamicProperty|EnumeratedValue|event|MetaData|method|package(?:.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|ncwriteschema|ndgrid|ndims|ne|NET(?:.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|NetException|setStaticProperty))?|netcdf.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:.(?:create|getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:.isPlatformSupported)?|VideoWriter(?:.getProfiles)?|view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|ylabel|ylim|zeros|zip|zlabel|zlim|zoom)\\b/,\na],[\"fun_tbx\",/^\\b(?:addedvarplot|andrewsplot|anova[12n]|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|cholcov|Classification(?:BaggedEnsemble|Discriminant(?:.(?:fit|make|template))?|Ensemble|KNN(?:.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:.fit)?|geo(?:cdf|inv|mean|pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|LinearModel(?:.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:.fit)?|nan(?:cov|max|mean|median|min|std|sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|regstats|relieff|ridge|robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztest)\\b/,\na],[\"fun_tbx\",/^\\b(?:adapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|reflect|regionprops|registration.metric.(?:MattesMutualInformation|MeanSquares)|registration.optimizer.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb)\\b/,\na],[\"fun_tbx\",/^\\b(?:bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog)\\b/,a],[\"ident\",/^[A-Za-z]\\w*(?:\\.[A-Za-z]\\w*)*/,a]]),[\"matlab-identifiers\"]);b.registerLangHandler(b.createSimpleLexer([],e),[\"matlab-operators\"]);b.registerLangHandler(b.createSimpleLexer(c,d),[\"matlab\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-ml.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"com\",/^#(?:if[\\t\\n\\r \\xa0]+(?:[$_a-z][\\w']*|``[^\\t\\n\\r`]*(?:``|$))|else|endif|light)/i,null,\"#\"],[\"str\",/^(?:\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)|'(?:[^'\\\\]|\\\\[\\S\\s])(?:'|$))/,null,\"\\\"'\"]],[[\"com\",/^(?:\\/\\/[^\\n\\r]*|\\(\\*[\\S\\s]*?\\*\\))/],[\"kwd\",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\\b/],\n[\"lit\",/^[+-]?(?:0x[\\da-f]+|(?:\\.\\d+|\\d+(?:\\.\\d*)?)(?:e[+-]?\\d+)?)/i],[\"pln\",/^(?:[_a-z][\\w']*[!#?]?|``[^\\t\\n\\r`]*(?:``|$))/i],[\"pun\",/^[^\\w\\t\\n\\r \"'\\xa0]+/]]),[\"fs\",\"ml\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-mumps.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"str\",/^\"(?:[^\"]|\\\\.)*\"/,null,'\"']],[[\"com\",/^;[^\\n\\r]*/,null,\";\"],[\"dec\",/^\\$(?:d|device|ec|ecode|es|estack|et|etrap|h|horolog|i|io|j|job|k|key|p|principal|q|quit|st|stack|s|storage|sy|system|t|test|tl|tlevel|tr|trestart|x|y|z[a-z]*|a|ascii|c|char|d|data|e|extract|f|find|fn|fnumber|g|get|j|justify|l|length|na|name|o|order|p|piece|ql|qlength|qs|qsubscript|q|query|r|random|re|reverse|s|select|st|stack|t|text|tr|translate|nan)\\b/i,\nnull],[\"kwd\",/^(?:[^$]b|break|c|close|d|do|e|else|f|for|g|goto|h|halt|h|hang|i|if|j|job|k|kill|l|lock|m|merge|n|new|o|open|q|quit|r|read|s|set|tc|tcommit|tre|trestart|tro|trollback|ts|tstart|u|use|v|view|w|write|x|xecute)\\b/i,null],[\"lit\",/^[+-]?(?:\\.\\d+|\\d+(?:\\.\\d*)?)(?:e[+-]?\\d+)?/i],[\"pln\",/^[a-z][^\\W_]*/i],[\"pun\",/^[^\\w\\t\\n\\r\"$%;^\\xa0]|_/]]),[\"mumps\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-n.js",
    "content": "var a=null;\nPR.registerLangHandler(PR.createSimpleLexer([[\"str\",/^(?:'(?:[^\\n\\r'\\\\]|\\\\.)*'|\"(?:[^\\n\\r\"\\\\]|\\\\.)*(?:\"|$))/,a,'\"'],[\"com\",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\\b|[^\\n\\r]*)/,a,\"#\"],[\"pln\",/^\\s+/,a,\" \\r\\n\\t\\u00a0\"]],[[\"str\",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,a],[\"str\",/^<#[^#>]*(?:#>|$)/,a],[\"str\",/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h|[a-z]\\w*)>/,a],[\"com\",/^\\/\\/[^\\n\\r]*/,a],[\"com\",/^\\/\\*[\\S\\s]*?(?:\\*\\/|$)/,\na],[\"kwd\",/^(?:abstract|and|as|base|catch|class|def|delegate|enum|event|extern|false|finally|fun|implements|interface|internal|is|macro|match|matches|module|mutable|namespace|new|null|out|override|params|partial|private|protected|public|ref|sealed|static|struct|syntax|this|throw|true|try|type|typeof|using|variant|virtual|volatile|when|where|with|assert|assert2|async|break|checked|continue|do|else|ensures|for|foreach|if|late|lock|new|nolate|otherwise|regexp|repeat|requires|return|surroundwith|unchecked|unless|using|while|yield)\\b/,\na],[\"typ\",/^(?:array|bool|byte|char|decimal|double|float|int|list|long|object|sbyte|short|string|ulong|uint|ufloat|ulong|ushort|void)\\b/,a],[\"lit\",/^@[$_a-z][\\w$@]*/i,a],[\"typ\",/^@[A-Z]+[a-z][\\w$@]*/,a],[\"pln\",/^'?[$_a-z][\\w$@]*/i,a],[\"lit\",/^(?:0x[\\da-f]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+-]?\\d+)?)[a-z]*/i,a,\"0123456789\"],[\"pun\",/^.[^\\s\\w\"-$'./@`]*/,a]]),[\"n\",\"nemerle\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-pascal.js",
    "content": "var a=null;\nPR.registerLangHandler(PR.createSimpleLexer([[\"str\",/^'(?:[^\\n\\r'\\\\]|\\\\.)*(?:'|$)/,a,\"'\"],[\"pln\",/^\\s+/,a,\" \\r\\n\\t\\u00a0\"]],[[\"com\",/^\\(\\*[\\S\\s]*?(?:\\*\\)|$)|^{[\\S\\s]*?(?:}|$)/,a],[\"kwd\",/^(?:absolute|and|array|asm|assembler|begin|case|const|constructor|destructor|div|do|downto|else|end|external|for|forward|function|goto|if|implementation|in|inline|interface|interrupt|label|mod|not|object|of|or|packed|procedure|program|record|repeat|set|shl|shr|then|to|type|unit|until|uses|var|virtual|while|with|xor)\\b/i,a],\n[\"lit\",/^(?:true|false|self|nil)/i,a],[\"pln\",/^[a-z][^\\W_]*/i,a],[\"lit\",/^(?:\\$[\\da-f]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?)/i,a,\"0123456789\"],[\"pun\",/^.[^\\s\\w$'./@]*/,a]]),[\"pascal\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-proto.js",
    "content": "PR.registerLangHandler(PR.sourceDecorator({keywords:\"bytes,default,double,enum,extend,extensions,false,group,import,max,message,option,optional,package,repeated,required,returns,rpc,service,syntax,to,true\",types:/^(bool|(double|s?fixed|[su]?int)(32|64)|float|string)\\b/,cStyleComments:!0}),[\"proto\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-r.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"str\",/^\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,null,'\"'],[\"str\",/^'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)/,null,\"'\"]],[[\"com\",/^#.*/],[\"kwd\",/^(?:if|else|for|while|repeat|in|next|break|return|switch|function)(?![\\w.])/],[\"lit\",/^0[Xx][\\dA-Fa-f]+([Pp]\\d+)?[Li]?/],[\"lit\",/^[+-]?(\\d+(\\.\\d+)?|\\.\\d+)([Ee][+-]?\\d+)?[Li]?/],[\"lit\",/^(?:NULL|NA(?:_(?:integer|real|complex|character)_)?|Inf|TRUE|FALSE|NaN|\\.\\.(?:\\.|\\d+))(?![\\w.])/],\n[\"pun\",/^(?:<<?-|->>?|-|==|<=|>=|<|>|&&?|!=|\\|\\|?|[!*+/^]|%.*?%|[$=@~]|:{1,3}|[(),;?[\\]{}])/],[\"pln\",/^(?:[A-Za-z]+[\\w.]*|\\.[^\\W\\d][\\w.]*)(?![\\w.])/],[\"str\",/^`.+`/]]),[\"r\",\"s\",\"R\",\"S\",\"Splus\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-rd.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"com\",/^%[^\\n\\r]*/,null,\"%\"]],[[\"lit\",/^\\\\(?:cr|l?dots|R|tab)\\b/],[\"kwd\",/^\\\\[@-Za-z]+/],[\"kwd\",/^#(?:ifn?def|endif)/],[\"pln\",/^\\\\[{}]/],[\"pun\",/^[()[\\]{}]+/]]),[\"Rd\",\"rd\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-scala.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"str\",/^\"(?:\"\"(?:\"\"?(?!\")|[^\"\\\\]|\\\\.)*\"{0,3}|(?:[^\\n\\r\"\\\\]|\\\\.)*\"?)/,null,'\"'],[\"lit\",/^`(?:[^\\n\\r\\\\`]|\\\\.)*`?/,null,\"`\"],[\"pun\",/^[!#%&(--:-@[-^{-~]+/,null,\"!#%&()*+,-:;<=>?@[\\\\]^{|}~\"]],[[\"str\",/^'(?:[^\\n\\r'\\\\]|\\\\(?:'|[^\\n\\r']+))'/],[\"lit\",/^'[$A-Z_a-z][\\w$]*(?![\\w$'])/],[\"kwd\",/^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\\b/],\n[\"lit\",/^(?:true|false|null|this)\\b/],[\"lit\",/^(?:0(?:[0-7]+|x[\\da-f]+)l?|(?:0|[1-9]\\d*)(?:(?:\\.\\d+)?(?:e[+-]?\\d+)?f?|l?)|\\\\.\\d+(?:e[+-]?\\d+)?f?)/i],[\"typ\",/^[$_]*[A-Z][\\d$A-Z_]*[a-z][\\w$]*/],[\"pln\",/^[$A-Z_a-z][\\w$]*/],[\"com\",/^\\/(?:\\/.*|\\*(?:\\/|\\**[^*/])*(?:\\*+\\/?)?)/],[\"pun\",/^(?:\\.+|\\/)/]]),[\"scala\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-sql.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"str\",/^(?:\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*')/,null,\"\\\"'\"]],[[\"com\",/^(?:--[^\\n\\r]*|\\/\\*[\\S\\s]*?(?:\\*\\/|$))/],[\"kwd\",/^(?:add|all|alter|and|any|apply|as|asc|authorization|backup|begin|between|break|browse|bulk|by|cascade|case|check|checkpoint|close|clustered|coalesce|collate|column|commit|compute|connect|constraint|contains|containstable|continue|convert|create|cross|current|current_date|current_time|current_timestamp|current_user|cursor|database|dbcc|deallocate|declare|default|delete|deny|desc|disk|distinct|distributed|double|drop|dummy|dump|else|end|errlvl|escape|except|exec|execute|exists|exit|fetch|file|fillfactor|following|for|foreign|freetext|freetexttable|from|full|function|goto|grant|group|having|holdlock|identity|identitycol|identity_insert|if|in|index|inner|insert|intersect|into|is|join|key|kill|left|like|lineno|load|match|matched|merge|natural|national|nocheck|nonclustered|nocycle|not|null|nullif|of|off|offsets|on|open|opendatasource|openquery|openrowset|openxml|option|or|order|outer|over|partition|percent|pivot|plan|preceding|precision|primary|print|proc|procedure|public|raiserror|read|readtext|reconfigure|references|replication|restore|restrict|return|revoke|right|rollback|rowcount|rowguidcol|rows?|rule|save|schema|select|session_user|set|setuser|shutdown|some|start|statistics|system_user|table|textsize|then|to|top|tran|transaction|trigger|truncate|tsequal|unbounded|union|unique|unpivot|update|updatetext|use|user|using|values|varying|view|waitfor|when|where|while|with|within|writetext|xml)(?=[^\\w-]|$)/i,\nnull],[\"lit\",/^[+-]?(?:0x[\\da-f]+|(?:\\.\\d+|\\d+(?:\\.\\d*)?)(?:e[+-]?\\d+)?)/i],[\"pln\",/^[_a-z][\\w-]*/i],[\"pun\",/^[^\\w\\t\\n\\r \"'\\xa0][^\\w\\t\\n\\r \"'+\\xa0-]*/]]),[\"sql\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-tcl.js",
    "content": "var a=null;\nPR.registerLangHandler(PR.createSimpleLexer([[\"opn\",/^{+/,a,\"{\"],[\"clo\",/^}+/,a,\"}\"],[\"com\",/^#[^\\n\\r]*/,a,\"#\"],[\"pln\",/^[\\t\\n\\r \\xa0]+/,a,\"\\t\\n\\r \\u00a0\"],[\"str\",/^\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,a,'\"']],[[\"kwd\",/^(?:after|append|apply|array|break|case|catch|continue|error|eval|exec|exit|expr|for|foreach|if|incr|info|proc|return|set|switch|trace|uplevel|upvar|while)\\b/,a],[\"lit\",/^[+-]?(?:[#0]x[\\da-f]+|\\d+\\/\\d+|(?:\\.\\d+|\\d+(?:\\.\\d*)?)(?:[de][+-]?\\d+)?)/i],[\"lit\",\n/^'(?:-*(?:\\w|\\\\[!-~])(?:[\\w-]*|\\\\[!-~])[!=?]?)?/],[\"pln\",/^-*(?:[_a-z]|\\\\[!-~])(?:[\\w-]*|\\\\[!-~])[!=?]?/i],[\"pun\",/^[^\\w\\t\\n\\r \"'-);\\\\\\xa0]+/]]),[\"tcl\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-tex.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"],[\"com\",/^%[^\\n\\r]*/,null,\"%\"]],[[\"kwd\",/^\\\\[@-Za-z]+/],[\"kwd\",/^\\\\./],[\"typ\",/^[$&]/],[\"lit\",/[+-]?(?:\\.\\d+|\\d+(?:\\.\\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],[\"pun\",/^[()=[\\]{}]+/]]),[\"latex\",\"tex\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-vb.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0\\u2028\\u2029]+/,null,\"\\t\\n\\r \\u00a0\\u2028\\u2029\"],[\"str\",/^(?:[\"\\u201c\\u201d](?:[^\"\\u201c\\u201d]|[\"\\u201c\\u201d]{2})(?:[\"\\u201c\\u201d]c|$)|[\"\\u201c\\u201d](?:[^\"\\u201c\\u201d]|[\"\\u201c\\u201d]{2})*(?:[\"\\u201c\\u201d]|$))/i,null,'\"\\u201c\\u201d'],[\"com\",/^['\\u2018\\u2019](?:_(?:\\r\\n?|[^\\r]?)|[^\\n\\r_\\u2028\\u2029])*/,null,\"'\\u2018\\u2019\"]],[[\"kwd\",/^(?:addhandler|addressof|alias|and|andalso|ansi|as|assembly|auto|boolean|byref|byte|byval|call|case|catch|cbool|cbyte|cchar|cdate|cdbl|cdec|char|cint|class|clng|cobj|const|cshort|csng|cstr|ctype|date|decimal|declare|default|delegate|dim|directcast|do|double|each|else|elseif|end|endif|enum|erase|error|event|exit|finally|for|friend|function|get|gettype|gosub|goto|handles|if|implements|imports|in|inherits|integer|interface|is|let|lib|like|long|loop|me|mod|module|mustinherit|mustoverride|mybase|myclass|namespace|new|next|not|notinheritable|notoverridable|object|on|option|optional|or|orelse|overloads|overridable|overrides|paramarray|preserve|private|property|protected|public|raiseevent|readonly|redim|removehandler|resume|return|select|set|shadows|shared|short|single|static|step|stop|string|structure|sub|synclock|then|throw|to|try|typeof|unicode|until|variant|wend|when|while|with|withevents|writeonly|xor|endif|gosub|let|variant|wend)\\b/i,\nnull],[\"com\",/^rem\\b.*/i],[\"lit\",/^(?:true\\b|false\\b|nothing\\b|\\d+(?:e[+-]?\\d+[dfr]?|[dfilrs])?|(?:&h[\\da-f]+|&o[0-7]+)[ils]?|\\d*\\.\\d+(?:e[+-]?\\d+)?[dfr]?|#\\s+(?:\\d+[/-]\\d+[/-]\\d+(?:\\s+\\d+:\\d+(?::\\d+)?(\\s*(?:am|pm))?)?|\\d+:\\d+(?::\\d+)?(\\s*(?:am|pm))?)\\s+#)/i],[\"pln\",/^(?:(?:[a-z]|_\\w)\\w*(?:\\[[!#%&@]+])?|\\[(?:[a-z]|_\\w)\\w*])/i],[\"pun\",/^[^\\w\\t\\n\\r \"'[\\]\\xa0\\u2018\\u2019\\u201c\\u201d\\u2028\\u2029]+/],[\"pun\",/^(?:\\[|])/]]),[\"vb\",\"vbs\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-vhdl.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \\u00a0\"]],[[\"str\",/^(?:[box]?\"(?:[^\"]|\"\")*\"|'.')/i],[\"com\",/^--[^\\n\\r]*/],[\"kwd\",/^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\\w-]|$)/i,\nnull],[\"typ\",/^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\\w-]|$)/i,null],[\"typ\",/^'(?:active|ascending|base|delayed|driving|driving_value|event|high|image|instance_name|last_active|last_event|last_value|left|leftof|length|low|path_name|pos|pred|quiet|range|reverse_range|right|rightof|simple_name|stable|succ|transaction|val|value)(?=[^\\w-]|$)/i,null],[\"lit\",/^\\d+(?:_\\d+)*(?:#[\\w.\\\\]+#(?:[+-]?\\d+(?:_\\d+)*)?|(?:\\.\\d+(?:_\\d+)*)?(?:e[+-]?\\d+(?:_\\d+)*)?)/i],\n[\"pln\",/^(?:[a-z]\\w*|\\\\[^\\\\]*\\\\)/i],[\"pun\",/^[^\\w\\t\\n\\r \"'\\xa0][^\\w\\t\\n\\r \"'\\xa0-]*/]]),[\"vhdl\",\"vhd\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-wiki.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"pln\",/^[\\d\\t a-gi-z\\xa0]+/,null,\"\\t \\u00a0abcdefgijklmnopqrstuvwxyz0123456789\"],[\"pun\",/^[*=[\\]^~]+/,null,\"=*~^[]\"]],[[\"lang-wiki.meta\",/(?:^^|\\r\\n?|\\n)(#[a-z]+)\\b/],[\"lit\",/^[A-Z][a-z][\\da-z]+[A-Z][a-z][^\\W_]+\\b/],[\"lang-\",/^{{{([\\S\\s]+?)}}}/],[\"lang-\",/^`([^\\n\\r`]+)`/],[\"str\",/^https?:\\/\\/[^\\s#/?]*(?:\\/[^\\s#?]*)?(?:\\?[^\\s#]*)?(?:#\\S*)?/i],[\"pln\",/^(?:\\r\\n|[\\S\\s])[^\\n\\r#*=A-[^`h{~]*/]]),[\"wiki\"]);\nPR.registerLangHandler(PR.createSimpleLexer([[\"kwd\",/^#[a-z]+/i,null,\"#\"]],[]),[\"wiki.meta\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-xq.js",
    "content": "PR.registerLangHandler(PR.createSimpleLexer([[\"var pln\",/^\\$[\\w-]+/,null,\"$\"]],[[\"pln\",/^[\\s=][<>][\\s=]/],[\"lit\",/^@[\\w-]+/],[\"tag\",/^<\\/?[a-z](?:[\\w-.:]*\\w)?|\\/?>$/i],[\"com\",/^\\(:[\\S\\s]*?:\\)/],[\"pln\",/^[(),/;[\\]{}]$/],[\"str\",/^(?:\"(?:[^\"\\\\{]|\\\\[\\S\\s])*(?:\"|$)|'(?:[^'\\\\{]|\\\\[\\S\\s])*(?:'|$))/,null,\"\\\"'\"],[\"kwd\",/^(?:xquery|where|version|variable|union|typeswitch|treat|to|then|text|stable|sortby|some|self|schema|satisfies|returns|return|ref|processing-instruction|preceding-sibling|preceding|precedes|parent|only|of|node|namespace|module|let|item|intersect|instance|in|import|if|function|for|follows|following-sibling|following|external|except|every|else|element|descending|descendant-or-self|descendant|define|default|declare|comment|child|cast|case|before|attribute|assert|ascending|as|ancestor-or-self|ancestor|after|eq|order|by|or|and|schema-element|document-node|node|at)\\b/],\n[\"typ\",/^(?:xs:yearMonthDuration|xs:unsignedLong|xs:time|xs:string|xs:short|xs:QName|xs:Name|xs:long|xs:integer|xs:int|xs:gYearMonth|xs:gYear|xs:gMonthDay|xs:gDay|xs:float|xs:duration|xs:double|xs:decimal|xs:dayTimeDuration|xs:dateTime|xs:date|xs:byte|xs:boolean|xs:anyURI|xf:yearMonthDuration)\\b/,null],[\"fun pln\",/^(?:xp:dereference|xinc:node-expand|xinc:link-references|xinc:link-expand|xhtml:restructure|xhtml:clean|xhtml:add-lists|xdmp:zip-manifest|xdmp:zip-get|xdmp:zip-create|xdmp:xquery-version|xdmp:word-convert|xdmp:with-namespaces|xdmp:version|xdmp:value|xdmp:user-roles|xdmp:user-last-login|xdmp:user|xdmp:url-encode|xdmp:url-decode|xdmp:uri-is-file|xdmp:uri-format|xdmp:uri-content-type|xdmp:unquote|xdmp:unpath|xdmp:triggers-database|xdmp:trace|xdmp:to-json|xdmp:tidy|xdmp:subbinary|xdmp:strftime|xdmp:spawn-in|xdmp:spawn|xdmp:sleep|xdmp:shutdown|xdmp:set-session-field|xdmp:set-response-encoding|xdmp:set-response-content-type|xdmp:set-response-code|xdmp:set-request-time-limit|xdmp:set|xdmp:servers|xdmp:server-status|xdmp:server-name|xdmp:server|xdmp:security-database|xdmp:security-assert|xdmp:schema-database|xdmp:save|xdmp:role-roles|xdmp:role|xdmp:rethrow|xdmp:restart|xdmp:request-timestamp|xdmp:request-status|xdmp:request-cancel|xdmp:request|xdmp:redirect-response|xdmp:random|xdmp:quote|xdmp:query-trace|xdmp:query-meters|xdmp:product-edition|xdmp:privilege-roles|xdmp:privilege|xdmp:pretty-print|xdmp:powerpoint-convert|xdmp:platform|xdmp:permission|xdmp:pdf-convert|xdmp:path|xdmp:octal-to-integer|xdmp:node-uri|xdmp:node-replace|xdmp:node-kind|xdmp:node-insert-child|xdmp:node-insert-before|xdmp:node-insert-after|xdmp:node-delete|xdmp:node-database|xdmp:mul64|xdmp:modules-root|xdmp:modules-database|xdmp:merging|xdmp:merge-cancel|xdmp:merge|xdmp:md5|xdmp:logout|xdmp:login|xdmp:log-level|xdmp:log|xdmp:lock-release|xdmp:lock-acquire|xdmp:load|xdmp:invoke-in|xdmp:invoke|xdmp:integer-to-octal|xdmp:integer-to-hex|xdmp:http-put|xdmp:http-post|xdmp:http-options|xdmp:http-head|xdmp:http-get|xdmp:http-delete|xdmp:hosts|xdmp:host-status|xdmp:host-name|xdmp:host|xdmp:hex-to-integer|xdmp:hash64|xdmp:hash32|xdmp:has-privilege|xdmp:groups|xdmp:group-serves|xdmp:group-servers|xdmp:group-name|xdmp:group-hosts|xdmp:group|xdmp:get-session-field-names|xdmp:get-session-field|xdmp:get-response-encoding|xdmp:get-response-code|xdmp:get-request-username|xdmp:get-request-user|xdmp:get-request-url|xdmp:get-request-protocol|xdmp:get-request-path|xdmp:get-request-method|xdmp:get-request-header-names|xdmp:get-request-header|xdmp:get-request-field-names|xdmp:get-request-field-filename|xdmp:get-request-field-content-type|xdmp:get-request-field|xdmp:get-request-client-certificate|xdmp:get-request-client-address|xdmp:get-request-body|xdmp:get-current-user|xdmp:get-current-roles|xdmp:get|xdmp:function-name|xdmp:function-module|xdmp:function|xdmp:from-json|xdmp:forests|xdmp:forest-status|xdmp:forest-restore|xdmp:forest-restart|xdmp:forest-name|xdmp:forest-delete|xdmp:forest-databases|xdmp:forest-counts|xdmp:forest-clear|xdmp:forest-backup|xdmp:forest|xdmp:filesystem-file|xdmp:filesystem-directory|xdmp:exists|xdmp:excel-convert|xdmp:eval-in|xdmp:eval|xdmp:estimate|xdmp:email|xdmp:element-content-type|xdmp:elapsed-time|xdmp:document-set-quality|xdmp:document-set-property|xdmp:document-set-properties|xdmp:document-set-permissions|xdmp:document-set-collections|xdmp:document-remove-properties|xdmp:document-remove-permissions|xdmp:document-remove-collections|xdmp:document-properties|xdmp:document-locks|xdmp:document-load|xdmp:document-insert|xdmp:document-get-quality|xdmp:document-get-properties|xdmp:document-get-permissions|xdmp:document-get-collections|xdmp:document-get|xdmp:document-forest|xdmp:document-delete|xdmp:document-add-properties|xdmp:document-add-permissions|xdmp:document-add-collections|xdmp:directory-properties|xdmp:directory-locks|xdmp:directory-delete|xdmp:directory-create|xdmp:directory|xdmp:diacritic-less|xdmp:describe|xdmp:default-permissions|xdmp:default-collections|xdmp:databases|xdmp:database-restore-validate|xdmp:database-restore-status|xdmp:database-restore-cancel|xdmp:database-restore|xdmp:database-name|xdmp:database-forests|xdmp:database-backup-validate|xdmp:database-backup-status|xdmp:database-backup-purge|xdmp:database-backup-cancel|xdmp:database-backup|xdmp:database|xdmp:collection-properties|xdmp:collection-locks|xdmp:collection-delete|xdmp:collation-canonical-uri|xdmp:castable-as|xdmp:can-grant-roles|xdmp:base64-encode|xdmp:base64-decode|xdmp:architecture|xdmp:apply|xdmp:amp-roles|xdmp:amp|xdmp:add64|xdmp:add-response-header|xdmp:access|trgr:trigger-set-recursive|trgr:trigger-set-permissions|trgr:trigger-set-name|trgr:trigger-set-module|trgr:trigger-set-event|trgr:trigger-set-description|trgr:trigger-remove-permissions|trgr:trigger-module|trgr:trigger-get-permissions|trgr:trigger-enable|trgr:trigger-disable|trgr:trigger-database-online-event|trgr:trigger-data-event|trgr:trigger-add-permissions|trgr:remove-trigger|trgr:property-content|trgr:pre-commit|trgr:post-commit|trgr:get-trigger-by-id|trgr:get-trigger|trgr:document-scope|trgr:document-content|trgr:directory-scope|trgr:create-trigger|trgr:collection-scope|trgr:any-property-content|thsr:set-entry|thsr:remove-term|thsr:remove-synonym|thsr:remove-entry|thsr:query-lookup|thsr:lookup|thsr:load|thsr:insert|thsr:expand|thsr:add-synonym|spell:suggest-detailed|spell:suggest|spell:remove-word|spell:make-dictionary|spell:load|spell:levenshtein-distance|spell:is-correct|spell:insert|spell:double-metaphone|spell:add-word|sec:users-collection|sec:user-set-roles|sec:user-set-password|sec:user-set-name|sec:user-set-description|sec:user-set-default-permissions|sec:user-set-default-collections|sec:user-remove-roles|sec:user-privileges|sec:user-get-roles|sec:user-get-description|sec:user-get-default-permissions|sec:user-get-default-collections|sec:user-doc-permissions|sec:user-doc-collections|sec:user-add-roles|sec:unprotect-collection|sec:uid-for-name|sec:set-realm|sec:security-version|sec:security-namespace|sec:security-installed|sec:security-collection|sec:roles-collection|sec:role-set-roles|sec:role-set-name|sec:role-set-description|sec:role-set-default-permissions|sec:role-set-default-collections|sec:role-remove-roles|sec:role-privileges|sec:role-get-roles|sec:role-get-description|sec:role-get-default-permissions|sec:role-get-default-collections|sec:role-doc-permissions|sec:role-doc-collections|sec:role-add-roles|sec:remove-user|sec:remove-role-from-users|sec:remove-role-from-role|sec:remove-role-from-privileges|sec:remove-role-from-amps|sec:remove-role|sec:remove-privilege|sec:remove-amp|sec:protect-collection|sec:privileges-collection|sec:privilege-set-roles|sec:privilege-set-name|sec:privilege-remove-roles|sec:privilege-get-roles|sec:privilege-add-roles|sec:priv-doc-permissions|sec:priv-doc-collections|sec:get-user-names|sec:get-unique-elem-id|sec:get-role-names|sec:get-role-ids|sec:get-privilege|sec:get-distinct-permissions|sec:get-collection|sec:get-amp|sec:create-user-with-role|sec:create-user|sec:create-role|sec:create-privilege|sec:create-amp|sec:collections-collection|sec:collection-set-permissions|sec:collection-remove-permissions|sec:collection-get-permissions|sec:collection-add-permissions|sec:check-admin|sec:amps-collection|sec:amp-set-roles|sec:amp-remove-roles|sec:amp-get-roles|sec:amp-doc-permissions|sec:amp-doc-collections|sec:amp-add-roles|search:unparse|search:suggest|search:snippet|search:search|search:resolve-nodes|search:resolve|search:remove-constraint|search:parse|search:get-default-options|search:estimate|search:check-options|prof:value|prof:reset|prof:report|prof:invoke|prof:eval|prof:enable|prof:disable|prof:allowed|ppt:clean|pki:template-set-request|pki:template-set-name|pki:template-set-key-type|pki:template-set-key-options|pki:template-set-description|pki:template-in-use|pki:template-get-version|pki:template-get-request|pki:template-get-name|pki:template-get-key-type|pki:template-get-key-options|pki:template-get-id|pki:template-get-description|pki:need-certificate|pki:is-temporary|pki:insert-trusted-certificates|pki:insert-template|pki:insert-signed-certificates|pki:insert-certificate-revocation-list|pki:get-trusted-certificate-ids|pki:get-template-ids|pki:get-template-certificate-authority|pki:get-template-by-name|pki:get-template|pki:get-pending-certificate-requests-xml|pki:get-pending-certificate-requests-pem|pki:get-pending-certificate-request|pki:get-certificates-for-template-xml|pki:get-certificates-for-template|pki:get-certificates|pki:get-certificate-xml|pki:get-certificate-pem|pki:get-certificate|pki:generate-temporary-certificate-if-necessary|pki:generate-temporary-certificate|pki:generate-template-certificate-authority|pki:generate-certificate-request|pki:delete-template|pki:delete-certificate|pki:create-template|pdf:make-toc|pdf:insert-toc-headers|pdf:get-toc|pdf:clean|p:status-transition|p:state-transition|p:remove|p:pipelines|p:insert|p:get-by-id|p:get|p:execute|p:create|p:condition|p:collection|p:action|ooxml:runs-merge|ooxml:package-uris|ooxml:package-parts-insert|ooxml:package-parts|msword:clean|mcgm:polygon|mcgm:point|mcgm:geospatial-query-from-elements|mcgm:geospatial-query|mcgm:circle|math:tanh|math:tan|math:sqrt|math:sinh|math:sin|math:pow|math:modf|math:log10|math:log|math:ldexp|math:frexp|math:fmod|math:floor|math:fabs|math:exp|math:cosh|math:cos|math:ceil|math:atan2|math:atan|math:asin|math:acos|map:put|map:map|map:keys|map:get|map:delete|map:count|map:clear|lnk:to|lnk:remove|lnk:insert|lnk:get|lnk:from|lnk:create|kml:polygon|kml:point|kml:interior-polygon|kml:geospatial-query-from-elements|kml:geospatial-query|kml:circle|kml:box|gml:polygon|gml:point|gml:interior-polygon|gml:geospatial-query-from-elements|gml:geospatial-query|gml:circle|gml:box|georss:point|georss:geospatial-query|georss:circle|geo:polygon|geo:point|geo:interior-polygon|geo:geospatial-query-from-elements|geo:geospatial-query|geo:circle|geo:box|fn:zero-or-one|fn:years-from-duration|fn:year-from-dateTime|fn:year-from-date|fn:upper-case|fn:unordered|fn:true|fn:translate|fn:trace|fn:tokenize|fn:timezone-from-time|fn:timezone-from-dateTime|fn:timezone-from-date|fn:sum|fn:subtract-dateTimes-yielding-yearMonthDuration|fn:subtract-dateTimes-yielding-dayTimeDuration|fn:substring-before|fn:substring-after|fn:substring|fn:subsequence|fn:string-to-codepoints|fn:string-pad|fn:string-length|fn:string-join|fn:string|fn:static-base-uri|fn:starts-with|fn:seconds-from-time|fn:seconds-from-duration|fn:seconds-from-dateTime|fn:round-half-to-even|fn:round|fn:root|fn:reverse|fn:resolve-uri|fn:resolve-QName|fn:replace|fn:remove|fn:QName|fn:prefix-from-QName|fn:position|fn:one-or-more|fn:number|fn:not|fn:normalize-unicode|fn:normalize-space|fn:node-name|fn:node-kind|fn:nilled|fn:namespace-uri-from-QName|fn:namespace-uri-for-prefix|fn:namespace-uri|fn:name|fn:months-from-duration|fn:month-from-dateTime|fn:month-from-date|fn:minutes-from-time|fn:minutes-from-duration|fn:minutes-from-dateTime|fn:min|fn:max|fn:matches|fn:lower-case|fn:local-name-from-QName|fn:local-name|fn:last|fn:lang|fn:iri-to-uri|fn:insert-before|fn:index-of|fn:in-scope-prefixes|fn:implicit-timezone|fn:idref|fn:id|fn:hours-from-time|fn:hours-from-duration|fn:hours-from-dateTime|fn:floor|fn:false|fn:expanded-QName|fn:exists|fn:exactly-one|fn:escape-uri|fn:escape-html-uri|fn:error|fn:ends-with|fn:encode-for-uri|fn:empty|fn:document-uri|fn:doc-available|fn:doc|fn:distinct-values|fn:distinct-nodes|fn:default-collation|fn:deep-equal|fn:days-from-duration|fn:day-from-dateTime|fn:day-from-date|fn:data|fn:current-time|fn:current-dateTime|fn:current-date|fn:count|fn:contains|fn:concat|fn:compare|fn:collection|fn:codepoints-to-string|fn:codepoint-equal|fn:ceiling|fn:boolean|fn:base-uri|fn:avg|fn:adjust-time-to-timezone|fn:adjust-dateTime-to-timezone|fn:adjust-date-to-timezone|fn:abs|feed:unsubscribe|feed:subscription|feed:subscribe|feed:request|feed:item|feed:description|excel:clean|entity:enrich|dom:set-pipelines|dom:set-permissions|dom:set-name|dom:set-evaluation-context|dom:set-domain-scope|dom:set-description|dom:remove-pipeline|dom:remove-permissions|dom:remove|dom:get|dom:evaluation-context|dom:domains|dom:domain-scope|dom:create|dom:configuration-set-restart-user|dom:configuration-set-permissions|dom:configuration-set-evaluation-context|dom:configuration-set-default-domain|dom:configuration-get|dom:configuration-create|dom:collection|dom:add-pipeline|dom:add-permissions|dls:retention-rules|dls:retention-rule-remove|dls:retention-rule-insert|dls:retention-rule|dls:purge|dls:node-expand|dls:link-references|dls:link-expand|dls:documents-query|dls:document-versions-query|dls:document-version-uri|dls:document-version-query|dls:document-version-delete|dls:document-version-as-of|dls:document-version|dls:document-update|dls:document-unmanage|dls:document-set-quality|dls:document-set-property|dls:document-set-properties|dls:document-set-permissions|dls:document-set-collections|dls:document-retention-rules|dls:document-remove-properties|dls:document-remove-permissions|dls:document-remove-collections|dls:document-purge|dls:document-manage|dls:document-is-managed|dls:document-insert-and-manage|dls:document-include-query|dls:document-history|dls:document-get-permissions|dls:document-extract-part|dls:document-delete|dls:document-checkout-status|dls:document-checkout|dls:document-checkin|dls:document-add-properties|dls:document-add-permissions|dls:document-add-collections|dls:break-checkout|dls:author-query|dls:as-of-query|dbk:convert|dbg:wait|dbg:value|dbg:stopped|dbg:stop|dbg:step|dbg:status|dbg:stack|dbg:out|dbg:next|dbg:line|dbg:invoke|dbg:function|dbg:finish|dbg:expr|dbg:eval|dbg:disconnect|dbg:detach|dbg:continue|dbg:connect|dbg:clear|dbg:breakpoints|dbg:break|dbg:attached|dbg:attach|cvt:save-converted-documents|cvt:part-uri|cvt:destination-uri|cvt:basepath|cvt:basename|cts:words|cts:word-query-weight|cts:word-query-text|cts:word-query-options|cts:word-query|cts:word-match|cts:walk|cts:uris|cts:uri-match|cts:train|cts:tokenize|cts:thresholds|cts:stem|cts:similar-query-weight|cts:similar-query-nodes|cts:similar-query|cts:shortest-distance|cts:search|cts:score|cts:reverse-query-weight|cts:reverse-query-nodes|cts:reverse-query|cts:remainder|cts:registered-query-weight|cts:registered-query-options|cts:registered-query-ids|cts:registered-query|cts:register|cts:query|cts:quality|cts:properties-query-query|cts:properties-query|cts:polygon-vertices|cts:polygon|cts:point-longitude|cts:point-latitude|cts:point|cts:or-query-queries|cts:or-query|cts:not-query-weight|cts:not-query-query|cts:not-query|cts:near-query-weight|cts:near-query-queries|cts:near-query-options|cts:near-query-distance|cts:near-query|cts:highlight|cts:geospatial-co-occurrences|cts:frequency|cts:fitness|cts:field-words|cts:field-word-query-weight|cts:field-word-query-text|cts:field-word-query-options|cts:field-word-query-field-name|cts:field-word-query|cts:field-word-match|cts:entity-highlight|cts:element-words|cts:element-word-query-weight|cts:element-word-query-text|cts:element-word-query-options|cts:element-word-query-element-name|cts:element-word-query|cts:element-word-match|cts:element-values|cts:element-value-ranges|cts:element-value-query-weight|cts:element-value-query-text|cts:element-value-query-options|cts:element-value-query-element-name|cts:element-value-query|cts:element-value-match|cts:element-value-geospatial-co-occurrences|cts:element-value-co-occurrences|cts:element-range-query-weight|cts:element-range-query-value|cts:element-range-query-options|cts:element-range-query-operator|cts:element-range-query-element-name|cts:element-range-query|cts:element-query-query|cts:element-query-element-name|cts:element-query|cts:element-pair-geospatial-values|cts:element-pair-geospatial-value-match|cts:element-pair-geospatial-query-weight|cts:element-pair-geospatial-query-region|cts:element-pair-geospatial-query-options|cts:element-pair-geospatial-query-longitude-name|cts:element-pair-geospatial-query-latitude-name|cts:element-pair-geospatial-query-element-name|cts:element-pair-geospatial-query|cts:element-pair-geospatial-boxes|cts:element-geospatial-values|cts:element-geospatial-value-match|cts:element-geospatial-query-weight|cts:element-geospatial-query-region|cts:element-geospatial-query-options|cts:element-geospatial-query-element-name|cts:element-geospatial-query|cts:element-geospatial-boxes|cts:element-child-geospatial-values|cts:element-child-geospatial-value-match|cts:element-child-geospatial-query-weight|cts:element-child-geospatial-query-region|cts:element-child-geospatial-query-options|cts:element-child-geospatial-query-element-name|cts:element-child-geospatial-query-child-name|cts:element-child-geospatial-query|cts:element-child-geospatial-boxes|cts:element-attribute-words|cts:element-attribute-word-query-weight|cts:element-attribute-word-query-text|cts:element-attribute-word-query-options|cts:element-attribute-word-query-element-name|cts:element-attribute-word-query-attribute-name|cts:element-attribute-word-query|cts:element-attribute-word-match|cts:element-attribute-values|cts:element-attribute-value-ranges|cts:element-attribute-value-query-weight|cts:element-attribute-value-query-text|cts:element-attribute-value-query-options|cts:element-attribute-value-query-element-name|cts:element-attribute-value-query-attribute-name|cts:element-attribute-value-query|cts:element-attribute-value-match|cts:element-attribute-value-geospatial-co-occurrences|cts:element-attribute-value-co-occurrences|cts:element-attribute-range-query-weight|cts:element-attribute-range-query-value|cts:element-attribute-range-query-options|cts:element-attribute-range-query-operator|cts:element-attribute-range-query-element-name|cts:element-attribute-range-query-attribute-name|cts:element-attribute-range-query|cts:element-attribute-pair-geospatial-values|cts:element-attribute-pair-geospatial-value-match|cts:element-attribute-pair-geospatial-query-weight|cts:element-attribute-pair-geospatial-query-region|cts:element-attribute-pair-geospatial-query-options|cts:element-attribute-pair-geospatial-query-longitude-name|cts:element-attribute-pair-geospatial-query-latitude-name|cts:element-attribute-pair-geospatial-query-element-name|cts:element-attribute-pair-geospatial-query|cts:element-attribute-pair-geospatial-boxes|cts:document-query-uris|cts:document-query|cts:distance|cts:directory-query-uris|cts:directory-query-depth|cts:directory-query|cts:destination|cts:deregister|cts:contains|cts:confidence|cts:collections|cts:collection-query-uris|cts:collection-query|cts:collection-match|cts:classify|cts:circle-radius|cts:circle-center|cts:circle|cts:box-west|cts:box-south|cts:box-north|cts:box-east|cts:box|cts:bearing|cts:arc-intersection|cts:and-query-queries|cts:and-query-options|cts:and-query|cts:and-not-query-positive-query|cts:and-not-query-negative-query|cts:and-not-query|css:get|css:convert|cpf:success|cpf:failure|cpf:document-set-state|cpf:document-set-processing-status|cpf:document-set-last-updated|cpf:document-set-error|cpf:document-get-state|cpf:document-get-processing-status|cpf:document-get-last-updated|cpf:document-get-error|cpf:check-transition|alert:spawn-matching-actions|alert:rule-user-id-query|alert:rule-set-user-id|alert:rule-set-query|alert:rule-set-options|alert:rule-set-name|alert:rule-set-description|alert:rule-set-action|alert:rule-remove|alert:rule-name-query|alert:rule-insert|alert:rule-id-query|alert:rule-get-user-id|alert:rule-get-query|alert:rule-get-options|alert:rule-get-name|alert:rule-get-id|alert:rule-get-description|alert:rule-get-action|alert:rule-action-query|alert:remove-triggers|alert:make-rule|alert:make-log-action|alert:make-config|alert:make-action|alert:invoke-matching-actions|alert:get-my-rules|alert:get-all-rules|alert:get-actions|alert:find-matching-rules|alert:create-triggers|alert:config-set-uri|alert:config-set-trigger-ids|alert:config-set-options|alert:config-set-name|alert:config-set-description|alert:config-set-cpf-domain-names|alert:config-set-cpf-domain-ids|alert:config-insert|alert:config-get-uri|alert:config-get-trigger-ids|alert:config-get-options|alert:config-get-name|alert:config-get-id|alert:config-get-description|alert:config-get-cpf-domain-names|alert:config-get-cpf-domain-ids|alert:config-get|alert:config-delete|alert:action-set-options|alert:action-set-name|alert:action-set-module-root|alert:action-set-module-db|alert:action-set-module|alert:action-set-description|alert:action-remove|alert:action-insert|alert:action-get-options|alert:action-get-name|alert:action-get-module-root|alert:action-get-module-db|alert:action-get-module|alert:action-get-description|zero-or-one|years-from-duration|year-from-dateTime|year-from-date|upper-case|unordered|true|translate|trace|tokenize|timezone-from-time|timezone-from-dateTime|timezone-from-date|sum|subtract-dateTimes-yielding-yearMonthDuration|subtract-dateTimes-yielding-dayTimeDuration|substring-before|substring-after|substring|subsequence|string-to-codepoints|string-pad|string-length|string-join|string|static-base-uri|starts-with|seconds-from-time|seconds-from-duration|seconds-from-dateTime|round-half-to-even|round|root|reverse|resolve-uri|resolve-QName|replace|remove|QName|prefix-from-QName|position|one-or-more|number|not|normalize-unicode|normalize-space|node-name|node-kind|nilled|namespace-uri-from-QName|namespace-uri-for-prefix|namespace-uri|name|months-from-duration|month-from-dateTime|month-from-date|minutes-from-time|minutes-from-duration|minutes-from-dateTime|min|max|matches|lower-case|local-name-from-QName|local-name|last|lang|iri-to-uri|insert-before|index-of|in-scope-prefixes|implicit-timezone|idref|id|hours-from-time|hours-from-duration|hours-from-dateTime|floor|false|expanded-QName|exists|exactly-one|escape-uri|escape-html-uri|error|ends-with|encode-for-uri|empty|document-uri|doc-available|doc|distinct-values|distinct-nodes|default-collation|deep-equal|days-from-duration|day-from-dateTime|day-from-date|data|current-time|current-dateTime|current-date|count|contains|concat|compare|collection|codepoints-to-string|codepoint-equal|ceiling|boolean|base-uri|avg|adjust-time-to-timezone|adjust-dateTime-to-timezone|adjust-date-to-timezone|abs)\\b/],\n[\"pln\",/^[\\w:-]+/],[\"pln\",/^[\\t\\n\\r \\xa0]+/]]),[\"xq\",\"xquery\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/lang-yaml.js",
    "content": "var a=null;\nPR.registerLangHandler(PR.createSimpleLexer([[\"pun\",/^[:>?|]+/,a,\":|>?\"],[\"dec\",/^%(?:YAML|TAG)[^\\n\\r#]+/,a,\"%\"],[\"typ\",/^&\\S+/,a,\"&\"],[\"typ\",/^!\\S*/,a,\"!\"],[\"str\",/^\"(?:[^\"\\\\]|\\\\.)*(?:\"|$)/,a,'\"'],[\"str\",/^'(?:[^']|'')*(?:'|$)/,a,\"'\"],[\"com\",/^#[^\\n\\r]*/,a,\"#\"],[\"pln\",/^\\s+/,a,\" \\t\\r\\n\"]],[[\"dec\",/^(?:---|\\.\\.\\.)(?:[\\n\\r]|$)/],[\"pun\",/^-/],[\"kwd\",/^\\w+:[\\n\\r ]/],[\"pln\",/^\\w+/]]),[\"yaml\",\"yml\"]);\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/prettify.css",
    "content": ".pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}"
  },
  {
    "path": "modules/system/assets/vendor/prettify/prettify.js",
    "content": "!function(){var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;\n(function(){function S(a){function d(e){var b=e.charCodeAt(0);if(b!==92)return b;var a=e.charAt(1);return(b=r[a])?b:\"0\"<=a&&a<=\"7\"?parseInt(e.substring(1),8):a===\"u\"||a===\"x\"?parseInt(e.substring(2),16):e.charCodeAt(1)}function g(e){if(e<32)return(e<16?\"\\\\x0\":\"\\\\x\")+e.toString(16);e=String.fromCharCode(e);return e===\"\\\\\"||e===\"-\"||e===\"]\"||e===\"^\"?\"\\\\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\S\\s]|[^\\\\]/g),e=[],a=\nb[0]===\"^\",c=[\"[\"];a&&c.push(\"^\");for(var a=a?1:0,f=b.length;a<f;++a){var h=b[a];if(/\\\\[bdsw]/i.test(h))c.push(h);else{var h=d(h),l;a+2<f&&\"-\"===b[a+1]?(l=d(b[a+2]),a+=2):l=h;e.push([h,l]);l<65||h>122||(l<65||h>90||e.push([Math.max(65,h)|32,Math.min(l,90)|32]),l<97||h>122||e.push([Math.max(97,h)&-33,Math.min(l,122)&-33]))}}e.sort(function(e,a){return e[0]-a[0]||a[1]-e[1]});b=[];f=[];for(a=0;a<e.length;++a)h=e[a],h[0]<=f[1]+1?f[1]=Math.max(f[1],h[1]):b.push(f=h);for(a=0;a<b.length;++a)h=b[a],c.push(g(h[0])),\nh[1]>h[0]&&(h[1]+1>h[0]&&c.push(\"-\"),c.push(g(h[1])));c.push(\"]\");return c.join(\"\")}function s(e){for(var a=e.source.match(/\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*]|\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\\\d+|\\\\[^\\dux]|\\(\\?[!:=]|[()^]|[^()[\\\\^]+/g),c=a.length,d=[],f=0,h=0;f<c;++f){var l=a[f];l===\"(\"?++h:\"\\\\\"===l.charAt(0)&&(l=+l.substring(1))&&(l<=h?d[l]=-1:a[f]=g(l))}for(f=1;f<d.length;++f)-1===d[f]&&(d[f]=++x);for(h=f=0;f<c;++f)l=a[f],l===\"(\"?(++h,d[h]||(a[f]=\"(?:\")):\"\\\\\"===l.charAt(0)&&(l=+l.substring(1))&&l<=h&&\n(a[f]=\"\\\\\"+d[l]);for(f=0;f<c;++f)\"^\"===a[f]&&\"^\"!==a[f+1]&&(a[f]=\"\");if(e.ignoreCase&&m)for(f=0;f<c;++f)l=a[f],e=l.charAt(0),l.length>=2&&e===\"[\"?a[f]=b(l):e!==\"\\\\\"&&(a[f]=l.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return\"[\"+String.fromCharCode(a&-33,a|32)+\"]\"}));return a.join(\"\")}for(var x=0,m=!1,j=!1,k=0,c=a.length;k<c;++k){var i=a[k];if(i.ignoreCase)j=!0;else if(/[a-z]/i.test(i.source.replace(/\\\\u[\\da-f]{4}|\\\\x[\\da-f]{2}|\\\\[^UXux]/gi,\"\"))){m=!0;j=!1;break}}for(var r={b:8,t:9,n:10,v:11,\nf:12,r:13},n=[],k=0,c=a.length;k<c;++k){i=a[k];if(i.global||i.multiline)throw Error(\"\"+i);n.push(\"(?:\"+s(i)+\")\")}return RegExp(n.join(\"|\"),j?\"gi\":\"g\")}function T(a,d){function g(a){var c=a.nodeType;if(c==1){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)g(c);c=a.nodeName.toLowerCase();if(\"br\"===c||\"li\"===c)s[j]=\"\\n\",m[j<<1]=x++,m[j++<<1|1]=a}}else if(c==3||c==4)c=a.nodeValue,c.length&&(c=d?c.replace(/\\r\\n?/g,\"\\n\"):c.replace(/[\\t\\n\\r ]+/g,\" \"),s[j]=c,m[j<<1]=x,x+=c.length,m[j++<<1|1]=\na)}var b=/(?:^|\\s)nocode(?:\\s|$)/,s=[],x=0,m=[],j=0;g(a);return{a:s.join(\"\").replace(/\\n$/,\"\"),d:m}}function H(a,d,g,b){d&&(a={a:d,e:a},g(a),b.push.apply(b,a.g))}function U(a){for(var d=void 0,g=a.firstChild;g;g=g.nextSibling)var b=g.nodeType,d=b===1?d?a:g:b===3?V.test(g.nodeValue)?a:d:d;return d===a?void 0:d}function C(a,d){function g(a){for(var j=a.e,k=[j,\"pln\"],c=0,i=a.a.match(s)||[],r={},n=0,e=i.length;n<e;++n){var z=i[n],w=r[z],t=void 0,f;if(typeof w===\"string\")f=!1;else{var h=b[z.charAt(0)];\nif(h)t=z.match(h[1]),w=h[0];else{for(f=0;f<x;++f)if(h=d[f],t=z.match(h[1])){w=h[0];break}t||(w=\"pln\")}if((f=w.length>=5&&\"lang-\"===w.substring(0,5))&&!(t&&typeof t[1]===\"string\"))f=!1,w=\"src\";f||(r[z]=w)}h=c;c+=z.length;if(f){f=t[1];var l=z.indexOf(f),B=l+f.length;t[2]&&(B=z.length-t[2].length,l=B-f.length);w=w.substring(5);H(j+h,z.substring(0,l),g,k);H(j+h+l,f,I(w,f),k);H(j+h+B,z.substring(B),g,k)}else k.push(j+h,w)}a.g=k}var b={},s;(function(){for(var g=a.concat(d),j=[],k={},c=0,i=g.length;c<i;++c){var r=\ng[c],n=r[3];if(n)for(var e=n.length;--e>=0;)b[n.charAt(e)]=r;r=r[1];n=\"\"+r;k.hasOwnProperty(n)||(j.push(r),k[n]=q)}j.push(/[\\S\\s]/);s=S(j)})();var x=d.length;return g}function v(a){var d=[],g=[];a.tripleQuotedStrings?d.push([\"str\",/^(?:'''(?:[^'\\\\]|\\\\[\\S\\s]|''?(?=[^']))*(?:'''|$)|\"\"\"(?:[^\"\\\\]|\\\\[\\S\\s]|\"\"?(?=[^\"]))*(?:\"\"\"|$)|'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$))/,q,\"'\\\"\"]):a.multiLineStrings?d.push([\"str\",/^(?:'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)|`(?:[^\\\\`]|\\\\[\\S\\s])*(?:`|$))/,\nq,\"'\\\"`\"]):d.push([\"str\",/^(?:'(?:[^\\n\\r'\\\\]|\\\\.)*(?:'|$)|\"(?:[^\\n\\r\"\\\\]|\\\\.)*(?:\"|$))/,q,\"\\\"'\"]);a.verbatimStrings&&g.push([\"str\",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,q]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push([\"com\",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,\"#\"]):d.push([\"com\",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\\b|[^\\n\\r]*)/,q,\"#\"]),g.push([\"str\",/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h(?:h|pp|\\+\\+)?|[a-z]\\w*)>/,q])):d.push([\"com\",\n/^#[^\\n\\r]*/,q,\"#\"]));a.cStyleComments&&(g.push([\"com\",/^\\/\\/[^\\n\\r]*/,q]),g.push([\"com\",/^\\/\\*[\\S\\s]*?(?:\\*\\/|$)/,q]));if(b=a.regexLiterals){var s=(b=b>1?\"\":\"\\n\\r\")?\".\":\"[\\\\S\\\\s]\";g.push([\"lang-regex\",RegExp(\"^(?:^^\\\\.?|[+-]|[!=]=?=?|\\\\#|%=?|&&?=?|\\\\(|\\\\*=?|[+\\\\-]=|->|\\\\/=?|::?|<<?=?|>>?>?=?|,|;|\\\\?|@|\\\\[|~|{|\\\\^\\\\^?=?|\\\\|\\\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*(\"+(\"/(?=[^/*\"+b+\"])(?:[^/\\\\x5B\\\\x5C\"+b+\"]|\\\\x5C\"+s+\"|\\\\x5B(?:[^\\\\x5C\\\\x5D\"+b+\"]|\\\\x5C\"+\ns+\")*(?:\\\\x5D|$))+/\")+\")\")])}(b=a.types)&&g.push([\"typ\",b]);b=(\"\"+a.keywords).replace(/^ | $/g,\"\");b.length&&g.push([\"kwd\",RegExp(\"^(?:\"+b.replace(/[\\s,]+/g,\"|\")+\")\\\\b\"),q]);d.push([\"pln\",/^\\s+/,q,\" \\r\\n\\t\\u00a0\"]);b=\"^.[^\\\\s\\\\w.$@'\\\"`/\\\\\\\\]*\";a.regexLiterals&&(b+=\"(?!s*/)\");g.push([\"lit\",/^@[$_a-z][\\w$@]*/i,q],[\"typ\",/^(?:[@_]?[A-Z]+[a-z][\\w$@]*|\\w+_t\\b)/,q],[\"pln\",/^[$_a-z][\\w$@]*/i,q],[\"lit\",/^(?:0x[\\da-f]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+-]?\\d+)?)[a-z]*/i,q,\"0123456789\"],[\"pln\",/^\\\\[\\S\\s]?/,\nq],[\"pun\",RegExp(b),q]);return C(d,g)}function J(a,d,g){function b(a){var c=a.nodeType;if(c==1&&!x.test(a.className))if(\"br\"===a.nodeName)s(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&g){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(j.createTextNode(d),a.nextSibling),s(a),c||a.parentNode.removeChild(a)}}function s(a){function b(a,c){var d=\nc?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=b(e,1),g=a.nextSibling;e.appendChild(d);for(var i=g;i;i=g)g=i.nextSibling,e.appendChild(i)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var x=/(?:^|\\s)nocode(?:\\s|$)/,m=/\\r\\n?|\\n/,j=a.ownerDocument,k=j.createElement(\"li\");a.firstChild;)k.appendChild(a.firstChild);for(var c=[k],i=0;i<c.length;++i)b(c[i]);d===(d|0)&&c[0].setAttribute(\"value\",d);var r=j.createElement(\"ol\");\nr.className=\"linenums\";for(var d=Math.max(0,d-1|0)||0,i=0,n=c.length;i<n;++i)k=c[i],k.className=\"L\"+(i+d)%10,k.firstChild||k.appendChild(j.createTextNode(\"\\u00a0\")),r.appendChild(k);a.appendChild(r)}function p(a,d){for(var g=d.length;--g>=0;){var b=d[g];F.hasOwnProperty(b)?D.console&&console.warn(\"cannot override language handler %s\",b):F[b]=a}}function I(a,d){if(!a||!F.hasOwnProperty(a))a=/^\\s*</.test(d)?\"default-markup\":\"default-code\";return F[a]}function K(a){var d=a.h;try{var g=T(a.c,a.i),b=g.a;\na.a=b;a.d=g.d;a.e=0;I(d,b)(a);var s=/\\bMSIE\\s(\\d+)/.exec(navigator.userAgent),s=s&&+s[1]<=8,d=/\\n/g,x=a.a,m=x.length,g=0,j=a.d,k=j.length,b=0,c=a.g,i=c.length,r=0;c[i]=m;var n,e;for(e=n=0;e<i;)c[e]!==c[e+2]?(c[n++]=c[e++],c[n++]=c[e++]):e+=2;i=n;for(e=n=0;e<i;){for(var p=c[e],w=c[e+1],t=e+2;t+2<=i&&c[t+1]===w;)t+=2;c[n++]=p;c[n++]=w;e=t}c.length=n;var f=a.c,h;if(f)h=f.style.display,f.style.display=\"none\";try{for(;b<k;){var l=j[b+2]||m,B=c[r+2]||m,t=Math.min(l,B),A=j[b+1],G;if(A.nodeType!==1&&(G=x.substring(g,\nt))){s&&(G=G.replace(d,\"\\r\"));A.nodeValue=G;var L=A.ownerDocument,o=L.createElement(\"span\");o.className=c[r+1];var v=A.parentNode;v.replaceChild(o,A);o.appendChild(A);g<l&&(j[b+1]=A=L.createTextNode(x.substring(t,l)),v.insertBefore(A,o.nextSibling))}g=t;g>=l&&(b+=2);g>=B&&(r+=2)}}finally{if(f)f.style.display=h}}catch(u){D.console&&console.log(u&&u.stack||u)}}var D=window,y=[\"break,continue,do,else,for,if,return,while\"],E=[[y,\"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"],\n\"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof\"],M=[E,\"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where\"],N=[E,\"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient\"],\nO=[N,\"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where\"],E=[E,\"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN\"],P=[y,\"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None\"],\nQ=[y,\"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END\"],W=[y,\"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use\"],y=[y,\"case,done,elif,esac,eval,fi,function,in,local,set,then,until\"],R=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)\\b/,\nV=/\\S/,X=v({keywords:[M,O,E,\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",P,Q,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),F={};p(X,[\"default-code\"]);p(C([],[[\"pln\",/^[^<?]+/],[\"dec\",/^<!\\w[^>]*(?:>|$)/],[\"com\",/^<\\!--[\\S\\s]*?(?:--\\>|$)/],[\"lang-\",/^<\\?([\\S\\s]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\S\\s]+?)(?:%>|$)/],[\"pun\",/^(?:<[%?]|[%?]>)/],[\"lang-\",\n/^<xmp\\b[^>]*>([\\S\\s]+?)<\\/xmp\\b[^>]*>/i],[\"lang-js\",/^<script\\b[^>]*>([\\S\\s]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\S\\s]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i]]),[\"default-markup\",\"htm\",\"html\",\"mxml\",\"xhtml\",\"xml\",\"xsl\"]);p(C([[\"pln\",/^\\s+/,q,\" \\t\\r\\n\"],[\"atv\",/^(?:\"[^\"]*\"?|'[^']*'?)/,q,\"\\\"'\"]],[[\"tag\",/^^<\\/?[a-z](?:[\\w-.:]*\\w)?|\\/?>$/i],[\"atn\",/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],[\"lang-uq.val\",/^=\\s*([^\\s\"'>]*(?:[^\\s\"'/>]|\\/(?=\\s)))/],[\"pun\",/^[/<->]+/],\n[\"lang-js\",/^on\\w+\\s*=\\s*\"([^\"]+)\"/i],[\"lang-js\",/^on\\w+\\s*=\\s*'([^']+)'/i],[\"lang-js\",/^on\\w+\\s*=\\s*([^\\s\"'>]+)/i],[\"lang-css\",/^style\\s*=\\s*\"([^\"]+)\"/i],[\"lang-css\",/^style\\s*=\\s*'([^']+)'/i],[\"lang-css\",/^style\\s*=\\s*([^\\s\"'>]+)/i]]),[\"in.tag\"]);p(C([],[[\"atv\",/^[\\S\\s]+/]]),[\"uq.val\"]);p(v({keywords:M,hashComments:!0,cStyleComments:!0,types:R}),[\"c\",\"cc\",\"cpp\",\"cxx\",\"cyc\",\"m\"]);p(v({keywords:\"null,true,false\"}),[\"json\"]);p(v({keywords:O,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:R}),\n[\"cs\"]);p(v({keywords:N,cStyleComments:!0}),[\"java\"]);p(v({keywords:y,hashComments:!0,multiLineStrings:!0}),[\"bash\",\"bsh\",\"csh\",\"sh\"]);p(v({keywords:P,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),[\"cv\",\"py\",\"python\"]);p(v({keywords:\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),[\"perl\",\"pl\",\"pm\"]);p(v({keywords:Q,\nhashComments:!0,multiLineStrings:!0,regexLiterals:!0}),[\"rb\",\"ruby\"]);p(v({keywords:E,cStyleComments:!0,regexLiterals:!0}),[\"javascript\",\"js\"]);p(v({keywords:\"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes\",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),[\"coffee\"]);p(v({keywords:W,cStyleComments:!0,multilineStrings:!0}),[\"rc\",\"rs\",\"rust\"]);\np(C([],[[\"str\",/^[\\S\\s]+/]]),[\"regex\"]);var Y=D.PR={createSimpleLexer:C,registerLangHandler:p,sourceDecorator:v,PR_ATTRIB_NAME:\"atn\",PR_ATTRIB_VALUE:\"atv\",PR_COMMENT:\"com\",PR_DECLARATION:\"dec\",PR_KEYWORD:\"kwd\",PR_LITERAL:\"lit\",PR_NOCODE:\"nocode\",PR_PLAIN:\"pln\",PR_PUNCTUATION:\"pun\",PR_SOURCE:\"src\",PR_STRING:\"str\",PR_TAG:\"tag\",PR_TYPE:\"typ\",prettyPrintOne:D.prettyPrintOne=function(a,d,g){var b=document.createElement(\"div\");b.innerHTML=\"<pre>\"+a+\"</pre>\";b=b.firstChild;g&&J(b,g,!0);K({h:d,j:g,c:b,i:1});\nreturn b.innerHTML},prettyPrint:D.prettyPrint=function(a,d){function g(){for(var b=D.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;i<p.length&&c.now()<b;i++){for(var d=p[i],j=h,k=d;k=k.previousSibling;){var m=k.nodeType,o=(m===7||m===8)&&k.nodeValue;if(o?!/^\\??prettify\\b/.test(o):m!==3||/\\S/.test(k.nodeValue))break;if(o){j={};o.replace(/\\b(\\w+)=([\\w%+\\-.:]+)/g,function(a,b,c){j[b]=c});break}}k=d.className;if((j!==h||e.test(k))&&!v.test(k)){m=!1;for(o=d.parentNode;o;o=o.parentNode)if(f.test(o.tagName)&&\no.className&&e.test(o.className)){m=!0;break}if(!m){d.className+=\" prettyprinted\";m=j.lang;if(!m){var m=k.match(n),y;if(!m&&(y=U(d))&&t.test(y.tagName))m=y.className.match(n);m&&(m=m[1])}if(w.test(d.tagName))o=1;else var o=d.currentStyle,u=s.defaultView,o=(o=o?o.whiteSpace:u&&u.getComputedStyle?u.getComputedStyle(d,q).getPropertyValue(\"white-space\"):0)&&\"pre\"===o.substring(0,3);u=j.linenums;if(!(u=u===\"true\"||+u))u=(u=k.match(/\\blinenums\\b(?::(\\d+))?/))?u[1]&&u[1].length?+u[1]:!0:!1;u&&J(d,u,o);r=\n{h:m,c:d,j:u,i:o};K(r)}}}i<p.length?setTimeout(g,250):\"function\"===typeof a&&a()}for(var b=d||document.body,s=b.ownerDocument||document,b=[b.getElementsByTagName(\"pre\"),b.getElementsByTagName(\"code\"),b.getElementsByTagName(\"xmp\")],p=[],m=0;m<b.length;++m)for(var j=0,k=b[m].length;j<k;++j)p.push(b[m][j]);var b=q,c=Date;c.now||(c={now:function(){return+new Date}});var i=0,r,n=/\\blang(?:uage)?-([\\w.]+)(?!\\S)/,e=/\\bprettyprint\\b/,v=/\\bprettyprinted\\b/,w=/pre|xmp/i,t=/^code$/i,f=/^(?:pre|code|xmp)$/i,\nh={};g()}};typeof define===\"function\"&&define.amd&&define(\"google-code-prettify\",[],function(){return Y})})();}()\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/run_prettify.js",
    "content": "!function(){var r=null;\n(function(){function X(e){function j(){try{J.doScroll(\"left\")}catch(e){P(j,50);return}w(\"poll\")}function w(j){if(!(j.type==\"readystatechange\"&&x.readyState!=\"complete\")&&((j.type==\"load\"?n:x)[z](i+j.type,w,!1),!m&&(m=!0)))e.call(n,j.type||j)}var Y=x.addEventListener,m=!1,C=!0,t=Y?\"addEventListener\":\"attachEvent\",z=Y?\"removeEventListener\":\"detachEvent\",i=Y?\"\":\"on\";if(x.readyState==\"complete\")e.call(n,\"lazy\");else{if(x.createEventObject&&J.doScroll){try{C=!n.frameElement}catch(A){}C&&j()}x[t](i+\"DOMContentLoaded\",\nw,!1);x[t](i+\"readystatechange\",w,!1);n[t](i+\"load\",w,!1)}}function Q(){S&&X(function(){var e=K.length;$(e?function(){for(var j=0;j<e;++j)(function(e){P(function(){n.exports[K[e]].apply(n,arguments)},0)})(j)}:void 0)})}for(var n=window,P=n.setTimeout,x=document,J=x.documentElement,L=x.head||x.getElementsByTagName(\"head\")[0]||J,z=\"\",A=x.scripts,m=A.length;--m>=0;){var M=A[m],T=M.src.match(/^[^#?]*\\/run_prettify\\.js(\\?[^#]*)?(?:#.*)?$/);if(T){z=T[1]||\"\";M.parentNode.removeChild(M);break}}var S=!0,D=\n[],N=[],K=[];z.replace(/[&?]([^&=]+)=([^&]+)/g,function(e,j,w){w=decodeURIComponent(w);j=decodeURIComponent(j);j==\"autorun\"?S=!/^[0fn]/i.test(w):j==\"lang\"?D.push(w):j==\"skin\"?N.push(w):j==\"callback\"&&K.push(w)});m=0;for(z=D.length;m<z;++m)(function(){var e=x.createElement(\"script\");e.onload=e.onerror=e.onreadystatechange=function(){if(e&&(!e.readyState||/loaded|complete/.test(e.readyState)))e.onerror=e.onload=e.onreadystatechange=r,--R,R||P(Q,0),e.parentNode&&e.parentNode.removeChild(e),e=r};e.type=\n\"text/javascript\";e.src=\"https://google-code-prettify.googlecode.com/svn/loader/lang-\"+encodeURIComponent(D[m])+\".js\";L.insertBefore(e,L.firstChild)})(D[m]);for(var R=D.length,A=[],m=0,z=N.length;m<z;++m)A.push(\"https://google-code-prettify.googlecode.com/svn/loader/skins/\"+encodeURIComponent(N[m])+\".css\");A.push(\"https://google-code-prettify.googlecode.com/svn/loader/prettify.css\");(function(e){function j(m){if(m!==w){var n=x.createElement(\"link\");n.rel=\"stylesheet\";n.type=\"text/css\";if(m+1<w)n.error=\nn.onerror=function(){j(m+1)};n.href=e[m];L.appendChild(n)}}var w=e.length;j(0)})(A);var $=function(){window.PR_SHOULD_USE_CONTINUATION=!0;var e;(function(){function j(a){function d(f){var b=f.charCodeAt(0);if(b!==92)return b;var a=f.charAt(1);return(b=i[a])?b:\"0\"<=a&&a<=\"7\"?parseInt(f.substring(1),8):a===\"u\"||a===\"x\"?parseInt(f.substring(2),16):f.charCodeAt(1)}function h(f){if(f<32)return(f<16?\"\\\\x0\":\"\\\\x\")+f.toString(16);f=String.fromCharCode(f);return f===\"\\\\\"||f===\"-\"||f===\"]\"||f===\"^\"?\"\\\\\"+f:\nf}function b(f){var b=f.substring(1,f.length-1).match(/\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\S\\s]|[^\\\\]/g),f=[],a=b[0]===\"^\",c=[\"[\"];a&&c.push(\"^\");for(var a=a?1:0,g=b.length;a<g;++a){var k=b[a];if(/\\\\[bdsw]/i.test(k))c.push(k);else{var k=d(k),o;a+2<g&&\"-\"===b[a+1]?(o=d(b[a+2]),a+=2):o=k;f.push([k,o]);o<65||k>122||(o<65||k>90||f.push([Math.max(65,k)|32,Math.min(o,90)|32]),o<97||k>122||f.push([Math.max(97,k)&-33,Math.min(o,122)&-33]))}}f.sort(function(f,a){return f[0]-\na[0]||a[1]-f[1]});b=[];g=[];for(a=0;a<f.length;++a)k=f[a],k[0]<=g[1]+1?g[1]=Math.max(g[1],k[1]):b.push(g=k);for(a=0;a<b.length;++a)k=b[a],c.push(h(k[0])),k[1]>k[0]&&(k[1]+1>k[0]&&c.push(\"-\"),c.push(h(k[1])));c.push(\"]\");return c.join(\"\")}function e(f){for(var a=f.source.match(/\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*]|\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\\\d+|\\\\[^\\dux]|\\(\\?[!:=]|[()^]|[^()[\\\\^]+/g),c=a.length,d=[],g=0,k=0;g<c;++g){var o=a[g];o===\"(\"?++k:\"\\\\\"===o.charAt(0)&&(o=+o.substring(1))&&(o<=k?d[o]=-1:a[g]=h(o))}for(g=\n1;g<d.length;++g)-1===d[g]&&(d[g]=++j);for(k=g=0;g<c;++g)o=a[g],o===\"(\"?(++k,d[k]||(a[g]=\"(?:\")):\"\\\\\"===o.charAt(0)&&(o=+o.substring(1))&&o<=k&&(a[g]=\"\\\\\"+d[o]);for(g=0;g<c;++g)\"^\"===a[g]&&\"^\"!==a[g+1]&&(a[g]=\"\");if(f.ignoreCase&&F)for(g=0;g<c;++g)o=a[g],f=o.charAt(0),o.length>=2&&f===\"[\"?a[g]=b(o):f!==\"\\\\\"&&(a[g]=o.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return\"[\"+String.fromCharCode(a&-33,a|32)+\"]\"}));return a.join(\"\")}for(var j=0,F=!1,l=!1,I=0,c=a.length;I<c;++I){var p=a[I];if(p.ignoreCase)l=\n!0;else if(/[a-z]/i.test(p.source.replace(/\\\\u[\\da-f]{4}|\\\\x[\\da-f]{2}|\\\\[^UXux]/gi,\"\"))){F=!0;l=!1;break}}for(var i={b:8,t:9,n:10,v:11,f:12,r:13},q=[],I=0,c=a.length;I<c;++I){p=a[I];if(p.global||p.multiline)throw Error(\"\"+p);q.push(\"(?:\"+e(p)+\")\")}return RegExp(q.join(\"|\"),l?\"gi\":\"g\")}function m(a,d){function h(a){var c=a.nodeType;if(c==1){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)h(c);c=a.nodeName.toLowerCase();if(\"br\"===c||\"li\"===c)e[l]=\"\\n\",F[l<<1]=j++,F[l++<<1|1]=a}}else if(c==\n3||c==4)c=a.nodeValue,c.length&&(c=d?c.replace(/\\r\\n?/g,\"\\n\"):c.replace(/[\\t\\n\\r ]+/g,\" \"),e[l]=c,F[l<<1]=j,j+=c.length,F[l++<<1|1]=a)}var b=/(?:^|\\s)nocode(?:\\s|$)/,e=[],j=0,F=[],l=0;h(a);return{a:e.join(\"\").replace(/\\n$/,\"\"),d:F}}function n(a,d,h,b){d&&(a={a:d,e:a},h(a),b.push.apply(b,a.g))}function x(a){for(var d=void 0,h=a.firstChild;h;h=h.nextSibling)var b=h.nodeType,d=b===1?d?a:h:b===3?S.test(h.nodeValue)?a:d:d;return d===a?void 0:d}function C(a,d){function h(a){for(var l=a.e,j=[l,\"pln\"],c=\n0,p=a.a.match(e)||[],m={},q=0,f=p.length;q<f;++q){var B=p[q],y=m[B],u=void 0,g;if(typeof y===\"string\")g=!1;else{var k=b[B.charAt(0)];if(k)u=B.match(k[1]),y=k[0];else{for(g=0;g<i;++g)if(k=d[g],u=B.match(k[1])){y=k[0];break}u||(y=\"pln\")}if((g=y.length>=5&&\"lang-\"===y.substring(0,5))&&!(u&&typeof u[1]===\"string\"))g=!1,y=\"src\";g||(m[B]=y)}k=c;c+=B.length;if(g){g=u[1];var o=B.indexOf(g),H=o+g.length;u[2]&&(H=B.length-u[2].length,o=H-g.length);y=y.substring(5);n(l+k,B.substring(0,o),h,j);n(l+k+o,g,A(y,\ng),j);n(l+k+H,B.substring(H),h,j)}else j.push(l+k,y)}a.g=j}var b={},e;(function(){for(var h=a.concat(d),l=[],i={},c=0,p=h.length;c<p;++c){var m=h[c],q=m[3];if(q)for(var f=q.length;--f>=0;)b[q.charAt(f)]=m;m=m[1];q=\"\"+m;i.hasOwnProperty(q)||(l.push(m),i[q]=r)}l.push(/[\\S\\s]/);e=j(l)})();var i=d.length;return h}function t(a){var d=[],h=[];a.tripleQuotedStrings?d.push([\"str\",/^(?:'''(?:[^'\\\\]|\\\\[\\S\\s]|''?(?=[^']))*(?:'''|$)|\"\"\"(?:[^\"\\\\]|\\\\[\\S\\s]|\"\"?(?=[^\"]))*(?:\"\"\"|$)|'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$))/,\nr,\"'\\\"\"]):a.multiLineStrings?d.push([\"str\",/^(?:'(?:[^'\\\\]|\\\\[\\S\\s])*(?:'|$)|\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)|`(?:[^\\\\`]|\\\\[\\S\\s])*(?:`|$))/,r,\"'\\\"`\"]):d.push([\"str\",/^(?:'(?:[^\\n\\r'\\\\]|\\\\.)*(?:'|$)|\"(?:[^\\n\\r\"\\\\]|\\\\.)*(?:\"|$))/,r,\"\\\"'\"]);a.verbatimStrings&&h.push([\"str\",/^@\"(?:[^\"]|\"\")*(?:\"|$)/,r]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push([\"com\",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,r,\"#\"]):d.push([\"com\",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\\b|[^\\n\\r]*)/,\nr,\"#\"]),h.push([\"str\",/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h(?:h|pp|\\+\\+)?|[a-z]\\w*)>/,r])):d.push([\"com\",/^#[^\\n\\r]*/,r,\"#\"]));a.cStyleComments&&(h.push([\"com\",/^\\/\\/[^\\n\\r]*/,r]),h.push([\"com\",/^\\/\\*[\\S\\s]*?(?:\\*\\/|$)/,r]));if(b=a.regexLiterals){var e=(b=b>1?\"\":\"\\n\\r\")?\".\":\"[\\\\S\\\\s]\";h.push([\"lang-regex\",RegExp(\"^(?:^^\\\\.?|[+-]|[!=]=?=?|\\\\#|%=?|&&?=?|\\\\(|\\\\*=?|[+\\\\-]=|->|\\\\/=?|::?|<<?=?|>>?>?=?|,|;|\\\\?|@|\\\\[|~|{|\\\\^\\\\^?=?|\\\\|\\\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*(\"+\n(\"/(?=[^/*\"+b+\"])(?:[^/\\\\x5B\\\\x5C\"+b+\"]|\\\\x5C\"+e+\"|\\\\x5B(?:[^\\\\x5C\\\\x5D\"+b+\"]|\\\\x5C\"+e+\")*(?:\\\\x5D|$))+/\")+\")\")])}(b=a.types)&&h.push([\"typ\",b]);b=(\"\"+a.keywords).replace(/^ | $/g,\"\");b.length&&h.push([\"kwd\",RegExp(\"^(?:\"+b.replace(/[\\s,]+/g,\"|\")+\")\\\\b\"),r]);d.push([\"pln\",/^\\s+/,r,\" \\r\\n\\t\\u00a0\"]);b=\"^.[^\\\\s\\\\w.$@'\\\"`/\\\\\\\\]*\";a.regexLiterals&&(b+=\"(?!s*/)\");h.push([\"lit\",/^@[$_a-z][\\w$@]*/i,r],[\"typ\",/^(?:[@_]?[A-Z]+[a-z][\\w$@]*|\\w+_t\\b)/,r],[\"pln\",/^[$_a-z][\\w$@]*/i,r],[\"lit\",/^(?:0x[\\da-f]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+-]?\\d+)?)[a-z]*/i,\nr,\"0123456789\"],[\"pln\",/^\\\\[\\S\\s]?/,r],[\"pun\",RegExp(b),r]);return C(d,h)}function z(a,d,h){function b(a){var c=a.nodeType;if(c==1&&!j.test(a.className))if(\"br\"===a.nodeName)e(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&h){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(l.createTextNode(d),a.nextSibling),e(a),c||a.parentNode.removeChild(a)}}\nfunction e(a){function b(a,c){var d=c?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),h=a.nextSibling;f.appendChild(d);for(var e=h;e;e=h)h=e.nextSibling,f.appendChild(e)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var j=/(?:^|\\s)nocode(?:\\s|$)/,m=/\\r\\n?|\\n/,l=a.ownerDocument,i=l.createElement(\"li\");a.firstChild;)i.appendChild(a.firstChild);for(var c=[i],p=0;p<c.length;++p)b(c[p]);d===(d|0)&&c[0].setAttribute(\"value\",\nd);var n=l.createElement(\"ol\");n.className=\"linenums\";for(var d=Math.max(0,d-1|0)||0,p=0,q=c.length;p<q;++p)i=c[p],i.className=\"L\"+(p+d)%10,i.firstChild||i.appendChild(l.createTextNode(\"\\u00a0\")),n.appendChild(i);a.appendChild(n)}function i(a,d){for(var h=d.length;--h>=0;){var b=d[h];U.hasOwnProperty(b)?V.console&&console.warn(\"cannot override language handler %s\",b):U[b]=a}}function A(a,d){if(!a||!U.hasOwnProperty(a))a=/^\\s*</.test(d)?\"default-markup\":\"default-code\";return U[a]}function D(a){var d=\na.h;try{var h=m(a.c,a.i),b=h.a;a.a=b;a.d=h.d;a.e=0;A(d,b)(a);var e=/\\bMSIE\\s(\\d+)/.exec(navigator.userAgent),e=e&&+e[1]<=8,d=/\\n/g,i=a.a,j=i.length,h=0,l=a.d,n=l.length,b=0,c=a.g,p=c.length,t=0;c[p]=j;var q,f;for(f=q=0;f<p;)c[f]!==c[f+2]?(c[q++]=c[f++],c[q++]=c[f++]):f+=2;p=q;for(f=q=0;f<p;){for(var x=c[f],y=c[f+1],u=f+2;u+2<=p&&c[u+1]===y;)u+=2;c[q++]=x;c[q++]=y;f=u}c.length=q;var g=a.c,k;if(g)k=g.style.display,g.style.display=\"none\";try{for(;b<n;){var o=l[b+2]||j,H=c[t+2]||j,u=Math.min(o,H),E=l[b+\n1],W;if(E.nodeType!==1&&(W=i.substring(h,u))){e&&(W=W.replace(d,\"\\r\"));E.nodeValue=W;var Z=E.ownerDocument,s=Z.createElement(\"span\");s.className=c[t+1];var z=E.parentNode;z.replaceChild(s,E);s.appendChild(E);h<o&&(l[b+1]=E=Z.createTextNode(i.substring(u,o)),z.insertBefore(E,s.nextSibling))}h=u;h>=o&&(b+=2);h>=H&&(t+=2)}}finally{if(g)g.style.display=k}}catch(v){V.console&&console.log(v&&v.stack||v)}}var V=window,G=[\"break,continue,do,else,for,if,return,while\"],O=[[G,\"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"],\n\"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof\"],J=[O,\"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where\"],K=[O,\"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient\"],\nL=[K,\"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where\"],O=[O,\"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN\"],M=[G,\"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None\"],\nN=[G,\"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END\"],R=[G,\"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use\"],G=[G,\"case,done,elif,esac,eval,fi,function,in,local,set,then,until\"],Q=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)\\b/,\nS=/\\S/,T=t({keywords:[J,L,O,\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",M,N,G],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),U={};i(T,[\"default-code\"]);i(C([],[[\"pln\",/^[^<?]+/],[\"dec\",/^<!\\w[^>]*(?:>|$)/],[\"com\",/^<\\!--[\\S\\s]*?(?:--\\>|$)/],[\"lang-\",/^<\\?([\\S\\s]+?)(?:\\?>|$)/],[\"lang-\",/^<%([\\S\\s]+?)(?:%>|$)/],[\"pun\",/^(?:<[%?]|[%?]>)/],[\"lang-\",\n/^<xmp\\b[^>]*>([\\S\\s]+?)<\\/xmp\\b[^>]*>/i],[\"lang-js\",/^<script\\b[^>]*>([\\S\\s]*?)(<\\/script\\b[^>]*>)/i],[\"lang-css\",/^<style\\b[^>]*>([\\S\\s]*?)(<\\/style\\b[^>]*>)/i],[\"lang-in.tag\",/^(<\\/?[a-z][^<>]*>)/i]]),[\"default-markup\",\"htm\",\"html\",\"mxml\",\"xhtml\",\"xml\",\"xsl\"]);i(C([[\"pln\",/^\\s+/,r,\" \\t\\r\\n\"],[\"atv\",/^(?:\"[^\"]*\"?|'[^']*'?)/,r,\"\\\"'\"]],[[\"tag\",/^^<\\/?[a-z](?:[\\w-.:]*\\w)?|\\/?>$/i],[\"atn\",/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],[\"lang-uq.val\",/^=\\s*([^\\s\"'>]*(?:[^\\s\"'/>]|\\/(?=\\s)))/],[\"pun\",/^[/<->]+/],\n[\"lang-js\",/^on\\w+\\s*=\\s*\"([^\"]+)\"/i],[\"lang-js\",/^on\\w+\\s*=\\s*'([^']+)'/i],[\"lang-js\",/^on\\w+\\s*=\\s*([^\\s\"'>]+)/i],[\"lang-css\",/^style\\s*=\\s*\"([^\"]+)\"/i],[\"lang-css\",/^style\\s*=\\s*'([^']+)'/i],[\"lang-css\",/^style\\s*=\\s*([^\\s\"'>]+)/i]]),[\"in.tag\"]);i(C([],[[\"atv\",/^[\\S\\s]+/]]),[\"uq.val\"]);i(t({keywords:J,hashComments:!0,cStyleComments:!0,types:Q}),[\"c\",\"cc\",\"cpp\",\"cxx\",\"cyc\",\"m\"]);i(t({keywords:\"null,true,false\"}),[\"json\"]);i(t({keywords:L,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:Q}),\n[\"cs\"]);i(t({keywords:K,cStyleComments:!0}),[\"java\"]);i(t({keywords:G,hashComments:!0,multiLineStrings:!0}),[\"bash\",\"bsh\",\"csh\",\"sh\"]);i(t({keywords:M,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),[\"cv\",\"py\",\"python\"]);i(t({keywords:\"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END\",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),[\"perl\",\"pl\",\"pm\"]);i(t({keywords:N,\nhashComments:!0,multiLineStrings:!0,regexLiterals:!0}),[\"rb\",\"ruby\"]);i(t({keywords:O,cStyleComments:!0,regexLiterals:!0}),[\"javascript\",\"js\"]);i(t({keywords:\"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes\",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),[\"coffee\"]);i(t({keywords:R,cStyleComments:!0,multilineStrings:!0}),[\"rc\",\"rs\",\"rust\"]);\ni(C([],[[\"str\",/^[\\S\\s]+/]]),[\"regex\"]);var X=V.PR={createSimpleLexer:C,registerLangHandler:i,sourceDecorator:t,PR_ATTRIB_NAME:\"atn\",PR_ATTRIB_VALUE:\"atv\",PR_COMMENT:\"com\",PR_DECLARATION:\"dec\",PR_KEYWORD:\"kwd\",PR_LITERAL:\"lit\",PR_NOCODE:\"nocode\",PR_PLAIN:\"pln\",PR_PUNCTUATION:\"pun\",PR_SOURCE:\"src\",PR_STRING:\"str\",PR_TAG:\"tag\",PR_TYPE:\"typ\",prettyPrintOne:function(a,d,e){var b=document.createElement(\"div\");b.innerHTML=\"<pre>\"+a+\"</pre>\";b=b.firstChild;e&&z(b,e,!0);D({h:d,j:e,c:b,i:1});return b.innerHTML},\nprettyPrint:e=e=function(a,d){function e(){for(var b=V.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;p<j.length&&c.now()<b;p++){for(var d=j[p],m=k,l=d;l=l.previousSibling;){var n=l.nodeType,s=(n===7||n===8)&&l.nodeValue;if(s?!/^\\??prettify\\b/.test(s):n!==3||/\\S/.test(l.nodeValue))break;if(s){m={};s.replace(/\\b(\\w+)=([\\w%+\\-.:]+)/g,function(a,b,c){m[b]=c});break}}l=d.className;if((m!==k||f.test(l))&&!w.test(l)){n=!1;for(s=d.parentNode;s;s=s.parentNode)if(g.test(s.tagName)&&s.className&&f.test(s.className)){n=\n!0;break}if(!n){d.className+=\" prettyprinted\";n=m.lang;if(!n){var n=l.match(q),A;if(!n&&(A=x(d))&&u.test(A.tagName))n=A.className.match(q);n&&(n=n[1])}if(y.test(d.tagName))s=1;else var s=d.currentStyle,v=i.defaultView,s=(s=s?s.whiteSpace:v&&v.getComputedStyle?v.getComputedStyle(d,r).getPropertyValue(\"white-space\"):0)&&\"pre\"===s.substring(0,3);v=m.linenums;if(!(v=v===\"true\"||+v))v=(v=l.match(/\\blinenums\\b(?::(\\d+))?/))?v[1]&&v[1].length?+v[1]:!0:!1;v&&z(d,v,s);t={h:n,c:d,j:v,i:s};D(t)}}}p<j.length?\nP(e,250):\"function\"===typeof a&&a()}for(var b=d||document.body,i=b.ownerDocument||document,b=[b.getElementsByTagName(\"pre\"),b.getElementsByTagName(\"code\"),b.getElementsByTagName(\"xmp\")],j=[],m=0;m<b.length;++m)for(var l=0,n=b[m].length;l<n;++l)j.push(b[m][l]);var b=r,c=Date;c.now||(c={now:function(){return+new Date}});var p=0,t,q=/\\blang(?:uage)?-([\\w.]+)(?!\\S)/,f=/\\bprettyprint\\b/,w=/\\bprettyprinted\\b/,y=/pre|xmp/i,u=/^code$/i,g=/^(?:pre|code|xmp)$/i,k={};e()}};typeof define===\"function\"&&define.amd&&\ndefine(\"google-code-prettify\",[],function(){return X})})();return e}();R||P(Q,0)})();}()\n"
  },
  {
    "path": "modules/system/assets/vendor/prettify/theme-desert.css",
    "content": "/* desert scheme ported from vim to google prettify */\npre.prettyprint { display: block; background-color: #333 }\npre .nocode { background-color: none; color: #000 }\npre .str { color: #ffa0a0 } /* string  - pink */\npre .kwd { color: #f0e68c; font-weight: bold }\npre .com { color: #87ceeb } /* comment - skyblue */\npre .typ { color: #98fb98 } /* type    - lightgreen */\npre .lit { color: #cd5c5c } /* literal - darkred */\npre .pun { color: #fff }    /* punctuation */\npre .pln { color: #fff }    /* plaintext */\npre .tag { color: #f0e68c; font-weight: bold } /* html/xml tag    - lightyellow */\npre .atn { color: #bdb76b; font-weight: bold } /* attribute name  - khaki */\npre .atv { color: #ffa0a0 } /* attribute value - pink */\npre .dec { color: #98fb98 } /* decimal         - lightgreen */\n\n/* Specify class=linenums on a pre to get line numbering */\nol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE } /* IE indents via margin-left */\nli.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }\n/* Alternate shading for lines */\nli.L1,li.L3,li.L5,li.L7,li.L9 { }\n\n@media print {\n  pre.prettyprint { background-color: none }\n  pre .str, code .str { color: #060 }\n  pre .kwd, code .kwd { color: #006; font-weight: bold }\n  pre .com, code .com { color: #600; font-style: italic }\n  pre .typ, code .typ { color: #404; font-weight: bold }\n  pre .lit, code .lit { color: #044 }\n  pre .pun, code .pun { color: #440 }\n  pre .pln, code .pln { color: #000 }\n  pre .tag, code .tag { color: #006; font-weight: bold }\n  pre .atn, code .atn { color: #404 }\n  pre .atv, code .atv { color: #060 }\n}"
  },
  {
    "path": "modules/system/assets/vendor/select2/css/select2.less",
    "content": ".select2-container {\n  box-sizing: border-box;\n  display: inline-block;\n  margin: 0;\n  position: relative;\n  vertical-align: middle; }\n  .select2-container .select2-selection--single {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    height: 28px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--single .select2-selection__rendered {\n      display: block;\n      padding-left: 8px;\n      padding-right: 20px;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n    .select2-container .select2-selection--single .select2-selection__clear {\n      background-color: transparent;\n      border: none;\n      font-size: 1em; }\n  .select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n    padding-right: 8px;\n    padding-left: 20px; }\n  .select2-container .select2-selection--multiple {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    min-height: 32px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--multiple .select2-selection__rendered {\n      display: inline;\n      list-style: none;\n      padding: 0; }\n    .select2-container .select2-selection--multiple .select2-selection__clear {\n      background-color: transparent;\n      border: none;\n      font-size: 1em; }\n  .select2-container .select2-search--inline .select2-search__field {\n    box-sizing: border-box;\n    border: none;\n    font-size: 100%;\n    margin-top: 5px;\n    margin-left: 5px;\n    padding: 0;\n    max-width: 100%;\n    resize: none;\n    height: 18px;\n    vertical-align: bottom;\n    overflow: hidden;\n    word-break: keep-all; }\n    .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {\n      -webkit-appearance: none; }\n\n.select2-dropdown {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  box-sizing: border-box;\n  display: block;\n  position: absolute;\n  left: -100000px;\n  width: 100%;\n  /*z-index: 1051;*/ }\n\n.select2-results {\n  display: block; }\n\n.select2-results__options {\n  list-style: none;\n  margin: 0;\n  padding: 0; }\n\n.select2-results__option {\n  padding: 6px;\n  user-select: none;\n  -webkit-user-select: none; }\n\n.select2-results__option--selectable {\n  cursor: pointer; }\n\n.select2-container--open .select2-dropdown {\n  left: 0; }\n\n.select2-container--open .select2-dropdown--above {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--open .select2-dropdown--below {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-search--dropdown {\n  display: block;\n  padding: 4px; }\n  .select2-search--dropdown .select2-search__field {\n    padding: 4px;\n    width: 100%;\n    box-sizing: border-box; }\n    .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {\n      -webkit-appearance: none; }\n  .select2-search--dropdown.select2-search--hide {\n    display: none; }\n\n.select2-close-mask {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  display: block;\n  position: fixed;\n  left: 0;\n  top: 0;\n  min-height: 100%;\n  min-width: 100%;\n  height: auto;\n  width: auto;\n  opacity: 0;\n  z-index: 99;\n  background-color: #fff; }\n\n.select2-hidden-accessible {\n  border: 0 !important;\n  clip: rect(0 0 0 0) !important;\n  -webkit-clip-path: inset(50%) !important;\n  clip-path: inset(50%) !important;\n  height: 1px !important;\n  overflow: hidden !important;\n  padding: 0 !important;\n  position: absolute !important;\n  width: 1px !important;\n  white-space: nowrap !important; }\n"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/af.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/af\",[],function(){return{errorLoading:function(){return\"Die resultate kon nie gelaai word nie.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Verwyders asseblief \"+n+\" character\";return 1!=n&&(r+=\"s\"),r},inputTooShort:function(e){return\"Voer asseblief \"+(e.minimum-e.input.length)+\" of meer karakters\"},loadingMore:function(){return\"Meer resultate word gelaai…\"},maximumSelected:function(e){var n=\"Kies asseblief net \"+e.maximum+\" item\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"Geen resultate gevind\"},searching:function(){return\"Besig…\"},removeAllItems:function(){return\"Verwyder alle items\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ar.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ar\",[],function(){return{errorLoading:function(){return\"لا يمكن تحميل النتائج\"},inputTooLong:function(n){return\"الرجاء حذف \"+(n.input.length-n.maximum)+\" عناصر\"},inputTooShort:function(n){return\"الرجاء إضافة \"+(n.minimum-n.input.length)+\" عناصر\"},loadingMore:function(){return\"جاري تحميل نتائج إضافية...\"},maximumSelected:function(n){return\"تستطيع إختيار \"+n.maximum+\" بنود فقط\"},noResults:function(){return\"لم يتم العثور على أي نتائج\"},searching:function(){return\"جاري البحث…\"},removeAllItems:function(){return\"قم بإزالة كل العناصر\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/az.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/az\",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+\" simvol silin\"},inputTooShort:function(n){return n.minimum-n.input.length+\" simvol daxil edin\"},loadingMore:function(){return\"Daha çox nəticə yüklənir…\"},maximumSelected:function(n){return\"Sadəcə \"+n.maximum+\" element seçə bilərsiniz\"},noResults:function(){return\"Nəticə tapılmadı\"},searching:function(){return\"Axtarılır…\"},removeAllItems:function(){return\"Bütün elementləri sil\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/bg.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/bg\",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"Моля въведете с \"+e+\" по-малко символ\";return e>1&&(u+=\"a\"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u=\"Моля въведете още \"+e+\" символ\";return e>1&&(u+=\"a\"),u},loadingMore:function(){return\"Зареждат се още…\"},maximumSelected:function(n){var e=\"Можете да направите до \"+n.maximum+\" \";return n.maximum>1?e+=\"избора\":e+=\"избор\",e},noResults:function(){return\"Няма намерени съвпадения\"},searching:function(){return\"Търсене…\"},removeAllItems:function(){return\"Премахнете всички елементи\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/bn.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/bn\",[],function(){return{errorLoading:function(){return\"ফলাফলগুলি লোড করা যায়নি।\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"অনুগ্রহ করে \"+e+\" টি অক্ষর মুছে দিন।\";return 1!=e&&(u=\"অনুগ্রহ করে \"+e+\" টি অক্ষর মুছে দিন।\"),u},inputTooShort:function(n){return n.minimum-n.input.length+\" টি অক্ষর অথবা অধিক অক্ষর লিখুন।\"},loadingMore:function(){return\"আরো ফলাফল লোড হচ্ছে ...\"},maximumSelected:function(n){var e=n.maximum+\" টি আইটেম নির্বাচন করতে পারবেন।\";return 1!=n.maximum&&(e=n.maximum+\" টি আইটেম নির্বাচন করতে পারবেন।\"),e},noResults:function(){return\"কোন ফলাফল পাওয়া যায়নি।\"},searching:function(){return\"অনুসন্ধান করা হচ্ছে ...\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/bs.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/bs\",[],function(){function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?r:t}return{errorLoading:function(){return\"Preuzimanje nije uspijelo.\"},inputTooLong:function(n){var r=n.input.length-n.maximum,t=\"Obrišite \"+r+\" simbol\";return t+=e(r,\"\",\"a\",\"a\")},inputTooShort:function(n){var r=n.minimum-n.input.length,t=\"Ukucajte bar još \"+r+\" simbol\";return t+=e(r,\"\",\"a\",\"a\")},loadingMore:function(){return\"Preuzimanje još rezultata…\"},maximumSelected:function(n){var r=\"Možete izabrati samo \"+n.maximum+\" stavk\";return r+=e(n.maximum,\"u\",\"e\",\"i\")},noResults:function(){return\"Ništa nije pronađeno\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Uklonite sve stavke\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ca.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/ca\",[],function(){return{errorLoading:function(){return\"La càrrega ha fallat\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Si us plau, elimina \"+n+\" car\";return r+=1==n?\"àcter\":\"àcters\"},inputTooShort:function(e){var n=e.minimum-e.input.length,r=\"Si us plau, introdueix \"+n+\" car\";return r+=1==n?\"àcter\":\"àcters\"},loadingMore:function(){return\"Carregant més resultats…\"},maximumSelected:function(e){var n=\"Només es pot seleccionar \"+e.maximum+\" element\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No s'han trobat resultats\"},searching:function(){return\"Cercant…\"},removeAllItems:function(){return\"Treu tots els elements\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/cs.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/cs\",[],function(){function e(e,n){switch(e){case 2:return n?\"dva\":\"dvě\";case 3:return\"tři\";case 4:return\"čtyři\"}return\"\"}return{errorLoading:function(){return\"Výsledky nemohly být načteny.\"},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?\"Prosím, zadejte o jeden znak méně.\":t<=4?\"Prosím, zadejte o \"+e(t,!0)+\" znaky méně.\":\"Prosím, zadejte o \"+t+\" znaků méně.\"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?\"Prosím, zadejte ještě jeden znak.\":t<=4?\"Prosím, zadejte ještě další \"+e(t,!0)+\" znaky.\":\"Prosím, zadejte ještě dalších \"+t+\" znaků.\"},loadingMore:function(){return\"Načítají se další výsledky…\"},maximumSelected:function(n){var t=n.maximum;return 1==t?\"Můžete zvolit jen jednu položku.\":t<=4?\"Můžete zvolit maximálně \"+e(t,!1)+\" položky.\":\"Můžete zvolit maximálně \"+t+\" položek.\"},noResults:function(){return\"Nenalezeny žádné položky.\"},searching:function(){return\"Vyhledávání…\"},removeAllItems:function(){return\"Odstraňte všechny položky\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/da.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/da\",[],function(){return{errorLoading:function(){return\"Resultaterne kunne ikke indlæses.\"},inputTooLong:function(e){return\"Angiv venligst \"+(e.input.length-e.maximum)+\" tegn mindre\"},inputTooShort:function(e){return\"Angiv venligst \"+(e.minimum-e.input.length)+\" tegn mere\"},loadingMore:function(){return\"Indlæser flere resultater…\"},maximumSelected:function(e){var n=\"Du kan kun vælge \"+e.maximum+\" emne\";return 1!=e.maximum&&(n+=\"r\"),n},noResults:function(){return\"Ingen resultater fundet\"},searching:function(){return\"Søger…\"},removeAllItems:function(){return\"Fjern alle elementer\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/de.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/de\",[],function(){return{errorLoading:function(){return\"Die Ergebnisse konnten nicht geladen werden.\"},inputTooLong:function(e){return\"Bitte \"+(e.input.length-e.maximum)+\" Zeichen weniger eingeben\"},inputTooShort:function(e){return\"Bitte \"+(e.minimum-e.input.length)+\" Zeichen mehr eingeben\"},loadingMore:function(){return\"Lade mehr Ergebnisse…\"},maximumSelected:function(e){var n=\"Sie können nur \"+e.maximum+\" Element\";return 1!=e.maximum&&(n+=\"e\"),n+=\" auswählen\"},noResults:function(){return\"Keine Übereinstimmungen gefunden\"},searching:function(){return\"Suche…\"},removeAllItems:function(){return\"Entferne alle Elemente\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/dsb.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/dsb\",[],function(){var n=[\"znamuško\",\"znamušce\",\"znamuška\",\"znamuškow\"],e=[\"zapisk\",\"zapiska\",\"zapiski\",\"zapiskow\"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return\"Wuslědki njejsu se dali zacytaś.\"},inputTooLong:function(e){var a=e.input.length-e.maximum;return\"Pšosym lašuj \"+a+\" \"+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return\"Pšosym zapódaj nanejmjenjej \"+a+\" \"+u(a,n)},loadingMore:function(){return\"Dalšne wuslědki se zacytaju…\"},maximumSelected:function(n){return\"Móžoš jano \"+n.maximum+\" \"+u(n.maximum,e)+\"wubraś.\"},noResults:function(){return\"Žedne wuslědki namakane\"},searching:function(){return\"Pyta se…\"},removeAllItems:function(){return\"Remove all items\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/el.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/el\",[],function(){return{errorLoading:function(){return\"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν.\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"Παρακαλώ διαγράψτε \"+e+\" χαρακτήρ\";return 1==e&&(u+=\"α\"),1!=e&&(u+=\"ες\"),u},inputTooShort:function(n){return\"Παρακαλώ συμπληρώστε \"+(n.minimum-n.input.length)+\" ή περισσότερους χαρακτήρες\"},loadingMore:function(){return\"Φόρτωση περισσότερων αποτελεσμάτων…\"},maximumSelected:function(n){var e=\"Μπορείτε να επιλέξετε μόνο \"+n.maximum+\" επιλογ\";return 1==n.maximum&&(e+=\"ή\"),1!=n.maximum&&(e+=\"ές\"),e},noResults:function(){return\"Δεν βρέθηκαν αποτελέσματα\"},searching:function(){return\"Αναζήτηση…\"},removeAllItems:function(){return\"Καταργήστε όλα τα στοιχεία\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/en.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Please delete \"+n+\" character\";return 1!=n&&(r+=\"s\"),r},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var n=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"},removeItem:function(){return\"Remove item\"},search:function(){return\"Search\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/eo.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/eo\",[],function(){return{errorLoading:function(){return\"La rezultoj ne povas esti ŝargitaj.\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=\"Bonvolu forigi \"+e+\" signo\";return r+=1==e?\"n\":\"jn\"},inputTooShort:function(n){return\"Bv. enigi \"+(n.minimum-n.input.length)+\" aŭ pli multajn signojn\"},loadingMore:function(){return\"Ŝargado de pliaj rezultoj…\"},maximumSelected:function(n){var e=\"Vi povas elekti nur \"+n.maximum+\" ero\";return 1==n.maximum?e+=\"n\":e+=\"jn\",e},noResults:function(){return\"Neniuj rezultoj trovitaj\"},searching:function(){return\"Serĉado…\"},removeAllItems:function(){return\"Forigi ĉiujn erojn\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/es.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/es\",[],function(){return{errorLoading:function(){return\"No se pudieron cargar los resultados\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Por favor, elimine \"+n+\" car\";return r+=1==n?\"ácter\":\"acteres\"},inputTooShort:function(e){var n=e.minimum-e.input.length,r=\"Por favor, introduzca \"+n+\" car\";return r+=1==n?\"ácter\":\"acteres\"},loadingMore:function(){return\"Cargando más resultados…\"},maximumSelected:function(e){var n=\"Sólo puede seleccionar \"+e.maximum+\" elemento\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No se encontraron resultados\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Eliminar todos los elementos\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/et.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/et\",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" vähem\"},inputTooShort:function(e){var n=e.minimum-e.input.length,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" rohkem\"},loadingMore:function(){return\"Laen tulemusi…\"},maximumSelected:function(e){var n=\"Saad vaid \"+e.maximum+\" tulemus\";return 1==e.maximum?n+=\"e\":n+=\"t\",n+=\" valida\"},noResults:function(){return\"Tulemused puuduvad\"},searching:function(){return\"Otsin…\"},removeAllItems:function(){return\"Eemalda kõik esemed\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/eu.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/eu\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Idatzi \";return n+=1==t?\"karaktere bat\":t+\" karaktere\",n+=\" gutxiago\"},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Idatzi \";return n+=1==t?\"karaktere bat\":t+\" karaktere\",n+=\" gehiago\"},loadingMore:function(){return\"Emaitza gehiago kargatzen…\"},maximumSelected:function(e){return 1===e.maximum?\"Elementu bakarra hauta dezakezu\":e.maximum+\" elementu hauta ditzakezu soilik\"},noResults:function(){return\"Ez da bat datorrenik aurkitu\"},searching:function(){return\"Bilatzen…\"},removeAllItems:function(){return\"Kendu elementu guztiak\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/fa.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/fa\",[],function(){return{errorLoading:function(){return\"امکان بارگذاری نتایج وجود ندارد.\"},inputTooLong:function(n){return\"لطفاً \"+(n.input.length-n.maximum)+\" کاراکتر را حذف نمایید\"},inputTooShort:function(n){return\"لطفاً تعداد \"+(n.minimum-n.input.length)+\" کاراکتر یا بیشتر وارد نمایید\"},loadingMore:function(){return\"در حال بارگذاری نتایج بیشتر...\"},maximumSelected:function(n){return\"شما تنها می‌توانید \"+n.maximum+\" آیتم را انتخاب نمایید\"},noResults:function(){return\"هیچ نتیجه‌ای یافت نشد\"},searching:function(){return\"در حال جستجو...\"},removeAllItems:function(){return\"همه موارد را حذف کنید\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/fi.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/fi\",[],function(){return{errorLoading:function(){return\"Tuloksia ei saatu ladattua.\"},inputTooLong:function(n){return\"Ole hyvä ja anna \"+(n.input.length-n.maximum)+\" merkkiä vähemmän\"},inputTooShort:function(n){return\"Ole hyvä ja anna \"+(n.minimum-n.input.length)+\" merkkiä lisää\"},loadingMore:function(){return\"Ladataan lisää tuloksia…\"},maximumSelected:function(n){return\"Voit valita ainoastaan \"+n.maximum+\" kpl\"},noResults:function(){return\"Ei tuloksia\"},searching:function(){return\"Haetaan…\"},removeAllItems:function(){return\"Poista kaikki kohteet\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/fr.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/fr\",[],function(){return{errorLoading:function(){return\"Les résultats ne peuvent pas être chargés.\"},inputTooLong:function(e){var n=e.input.length-e.maximum;return\"Supprimez \"+n+\" caractère\"+(n>1?\"s\":\"\")},inputTooShort:function(e){var n=e.minimum-e.input.length;return\"Saisissez au moins \"+n+\" caractère\"+(n>1?\"s\":\"\")},loadingMore:function(){return\"Chargement de résultats supplémentaires…\"},maximumSelected:function(e){return\"Vous pouvez seulement sélectionner \"+e.maximum+\" élément\"+(e.maximum>1?\"s\":\"\")},noResults:function(){return\"Aucun résultat trouvé\"},searching:function(){return\"Recherche en cours…\"},removeAllItems:function(){return\"Supprimer tous les éléments\"},removeItem:function(){return\"Supprimer l'élément\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/gl.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/gl\",[],function(){return{errorLoading:function(){return\"Non foi posíbel cargar os resultados.\"},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?\"Elimine un carácter\":\"Elimine \"+n+\" caracteres\"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?\"Engada un carácter\":\"Engada \"+n+\" caracteres\"},loadingMore:function(){return\"Cargando máis resultados…\"},maximumSelected:function(e){return 1===e.maximum?\"Só pode seleccionar un elemento\":\"Só pode seleccionar \"+e.maximum+\" elementos\"},noResults:function(){return\"Non se atoparon resultados\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Elimina todos os elementos\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/he.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/he\",[],function(){return{errorLoading:function(){return\"שגיאה בטעינת התוצאות\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=\"נא למחוק \";return r+=1===e?\"תו אחד\":e+\" תווים\"},inputTooShort:function(n){var e=n.minimum-n.input.length,r=\"נא להכניס \";return r+=1===e?\"תו אחד\":e+\" תווים\",r+=\" או יותר\"},loadingMore:function(){return\"טוען תוצאות נוספות…\"},maximumSelected:function(n){var e=\"באפשרותך לבחור עד \";return 1===n.maximum?e+=\"פריט אחד\":e+=n.maximum+\" פריטים\",e},noResults:function(){return\"לא נמצאו תוצאות\"},searching:function(){return\"מחפש…\"},removeAllItems:function(){return\"הסר את כל הפריטים\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/hi.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hi\",[],function(){return{errorLoading:function(){return\"परिणामों को लोड नहीं किया जा सका।\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+\" अक्षर को हटा दें\";return e>1&&(r=e+\" अक्षरों को हटा दें \"),r},inputTooShort:function(n){return\"कृपया \"+(n.minimum-n.input.length)+\" या अधिक अक्षर दर्ज करें\"},loadingMore:function(){return\"अधिक परिणाम लोड हो रहे है...\"},maximumSelected:function(n){return\"आप केवल \"+n.maximum+\" आइटम का चयन कर सकते हैं\"},noResults:function(){return\"कोई परिणाम नहीं मिला\"},searching:function(){return\"खोज रहा है...\"},removeAllItems:function(){return\"सभी वस्तुओं को हटा दें\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/hr.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hr\",[],function(){function n(n){var e=\" \"+n+\" znak\";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+=\"a\"):e+=\"ova\",e}return{errorLoading:function(){return\"Preuzimanje nije uspjelo.\"},inputTooLong:function(e){return\"Unesite \"+n(e.input.length-e.maximum)},inputTooShort:function(e){return\"Unesite još \"+n(e.minimum-e.input.length)},loadingMore:function(){return\"Učitavanje rezultata…\"},maximumSelected:function(n){return\"Maksimalan broj odabranih stavki je \"+n.maximum},noResults:function(){return\"Nema rezultata\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Ukloni sve stavke\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/hsb.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hsb\",[],function(){var n=[\"znamješko\",\"znamješce\",\"znamješka\",\"znamješkow\"],e=[\"zapisk\",\"zapiskaj\",\"zapiski\",\"zapiskow\"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return\"Wuslědki njedachu so začitać.\"},inputTooLong:function(e){var a=e.input.length-e.maximum;return\"Prošu zhašej \"+a+\" \"+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return\"Prošu zapodaj znajmjeńša \"+a+\" \"+u(a,n)},loadingMore:function(){return\"Dalše wuslědki so začitaja…\"},maximumSelected:function(n){return\"Móžeš jenož \"+n.maximum+\" \"+u(n.maximum,e)+\"wubrać\"},noResults:function(){return\"Žane wuslědki namakane\"},searching:function(){return\"Pyta so…\"},removeAllItems:function(){return\"Remove all items\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/hu.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/hu\",[],function(){return{errorLoading:function(){return\"Az eredmények betöltése nem sikerült.\"},inputTooLong:function(e){return\"Túl hosszú. \"+(e.input.length-e.maximum)+\" karakterrel több, mint kellene.\"},inputTooShort:function(e){return\"Túl rövid. Még \"+(e.minimum-e.input.length)+\" karakter hiányzik.\"},loadingMore:function(){return\"Töltés…\"},maximumSelected:function(e){return\"Csak \"+e.maximum+\" elemet lehet kiválasztani.\"},noResults:function(){return\"Nincs találat.\"},searching:function(){return\"Keresés…\"},removeAllItems:function(){return\"Távolítson el minden elemet\"},removeItem:function(){return\"Elem eltávolítása\"},search:function(){return\"Keresés\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/hy.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hy\",[],function(){return{errorLoading:function(){return\"Արդյունքները հնարավոր չէ բեռնել։\"},inputTooLong:function(n){return\"Խնդրում ենք հեռացնել \"+(n.input.length-n.maximum)+\" նշան\"},inputTooShort:function(n){return\"Խնդրում ենք մուտքագրել \"+(n.minimum-n.input.length)+\" կամ ավել նշաններ\"},loadingMore:function(){return\"Բեռնվում են նոր արդյունքներ․․․\"},maximumSelected:function(n){return\"Դուք կարող եք ընտրել առավելագույնը \"+n.maximum+\" կետ\"},noResults:function(){return\"Արդյունքներ չեն գտնվել\"},searching:function(){return\"Որոնում․․․\"},removeAllItems:function(){return\"Հեռացնել բոլոր տարրերը\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/id.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/id\",[],function(){return{errorLoading:function(){return\"Data tidak boleh diambil.\"},inputTooLong:function(n){return\"Hapuskan \"+(n.input.length-n.maximum)+\" huruf\"},inputTooShort:function(n){return\"Masukkan \"+(n.minimum-n.input.length)+\" huruf lagi\"},loadingMore:function(){return\"Mengambil data…\"},maximumSelected:function(n){return\"Anda hanya dapat memilih \"+n.maximum+\" pilihan\"},noResults:function(){return\"Tidak ada data yang sesuai\"},searching:function(){return\"Mencari…\"},removeAllItems:function(){return\"Hapus semua item\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/is.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/is\",[],function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,e=\"Vinsamlegast styttið texta um \"+t+\" staf\";return t<=1?e:e+\"i\"},inputTooShort:function(n){var t=n.minimum-n.input.length,e=\"Vinsamlegast skrifið \"+t+\" staf\";return t>1&&(e+=\"i\"),e+=\" í viðbót\"},loadingMore:function(){return\"Sæki fleiri niðurstöður…\"},maximumSelected:function(n){return\"Þú getur aðeins valið \"+n.maximum+\" atriði\"},noResults:function(){return\"Ekkert fannst\"},searching:function(){return\"Leita…\"},removeAllItems:function(){return\"Fjarlægðu öll atriði\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/it.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/it\",[],function(){return{errorLoading:function(){return\"I risultati non possono essere caricati.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Per favore cancella \"+n+\" caratter\";return t+=1!==n?\"i\":\"e\"},inputTooShort:function(e){return\"Per favore inserisci \"+(e.minimum-e.input.length)+\" o più caratteri\"},loadingMore:function(){return\"Caricando più risultati…\"},maximumSelected:function(e){var n=\"Puoi selezionare solo \"+e.maximum+\" element\";return 1!==e.maximum?n+=\"i\":n+=\"o\",n},noResults:function(){return\"Nessun risultato trovato\"},searching:function(){return\"Sto cercando…\"},removeAllItems:function(){return\"Rimuovi tutti gli oggetti\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ja.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ja\",[],function(){return{errorLoading:function(){return\"結果が読み込まれませんでした\"},inputTooLong:function(n){return n.input.length-n.maximum+\" 文字を削除してください\"},inputTooShort:function(n){return\"少なくとも \"+(n.minimum-n.input.length)+\" 文字を入力してください\"},loadingMore:function(){return\"読み込み中…\"},maximumSelected:function(n){return n.maximum+\" 件しか選択できません\"},noResults:function(){return\"対象が見つかりません\"},searching:function(){return\"検索しています…\"},removeAllItems:function(){return\"すべてのアイテムを削除\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ka.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ka\",[],function(){return{errorLoading:function(){return\"მონაცემების ჩატვირთვა შეუძლებელია.\"},inputTooLong:function(n){return\"გთხოვთ აკრიფეთ \"+(n.input.length-n.maximum)+\" სიმბოლოთი ნაკლები\"},inputTooShort:function(n){return\"გთხოვთ აკრიფეთ \"+(n.minimum-n.input.length)+\" სიმბოლო ან მეტი\"},loadingMore:function(){return\"მონაცემების ჩატვირთვა…\"},maximumSelected:function(n){return\"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს \"+n.maximum+\" ელემენტი\"},noResults:function(){return\"რეზულტატი არ მოიძებნა\"},searching:function(){return\"ძიება…\"},removeAllItems:function(){return\"ამოიღე ყველა ელემენტი\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/km.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/km\",[],function(){return{errorLoading:function(){return\"មិនអាចទាញយកទិន្នន័យ\"},inputTooLong:function(n){return\"សូមលុបចេញ  \"+(n.input.length-n.maximum)+\" អក្សរ\"},inputTooShort:function(n){return\"សូមបញ្ចូល\"+(n.minimum-n.input.length)+\" អក្សរ រឺ ច្រើនជាងនេះ\"},loadingMore:function(){return\"កំពុងទាញយកទិន្នន័យបន្ថែម...\"},maximumSelected:function(n){return\"អ្នកអាចជ្រើសរើសបានតែ \"+n.maximum+\" ជម្រើសប៉ុណ្ណោះ\"},noResults:function(){return\"មិនមានលទ្ធផល\"},searching:function(){return\"កំពុងស្វែងរក...\"},removeAllItems:function(){return\"លុបធាតុទាំងអស់\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ko.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ko\",[],function(){return{errorLoading:function(){return\"결과를 불러올 수 없습니다.\"},inputTooLong:function(n){return\"너무 깁니다. \"+(n.input.length-n.maximum)+\" 글자 지워주세요.\"},inputTooShort:function(n){return\"너무 짧습니다. \"+(n.minimum-n.input.length)+\" 글자 더 입력해주세요.\"},loadingMore:function(){return\"불러오는 중…\"},maximumSelected:function(n){return\"최대 \"+n.maximum+\"개까지만 선택 가능합니다.\"},noResults:function(){return\"결과가 없습니다.\"},searching:function(){return\"검색 중…\"},removeAllItems:function(){return\"모든 항목 삭제\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/lt.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/lt\",[],function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum,t=\"Pašalinkite \"+i+\" simbol\";return t+=n(i,\"į\",\"ius\",\"ių\")},inputTooShort:function(e){var i=e.minimum-e.input.length,t=\"Įrašykite dar \"+i+\" simbol\";return t+=n(i,\"į\",\"ius\",\"ių\")},loadingMore:function(){return\"Kraunama daugiau rezultatų…\"},maximumSelected:function(e){var i=\"Jūs galite pasirinkti tik \"+e.maximum+\" element\";return i+=n(e.maximum,\"ą\",\"us\",\"ų\")},noResults:function(){return\"Atitikmenų nerasta\"},searching:function(){return\"Ieškoma…\"},removeAllItems:function(){return\"Pašalinti visus elementus\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/lv.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/lv\",[],function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i=\"Lūdzu ievadiet par  \"+u;return(i+=\" simbol\"+e(u,\"iem\",\"u\",\"iem\"))+\" mazāk\"},inputTooShort:function(n){var u=n.minimum-n.input.length,i=\"Lūdzu ievadiet vēl \"+u;return i+=\" simbol\"+e(u,\"us\",\"u\",\"us\")},loadingMore:function(){return\"Datu ielāde…\"},maximumSelected:function(n){var u=\"Jūs varat izvēlēties ne vairāk kā \"+n.maximum;return u+=\" element\"+e(n.maximum,\"us\",\"u\",\"us\")},noResults:function(){return\"Sakritību nav\"},searching:function(){return\"Meklēšana…\"},removeAllItems:function(){return\"Noņemt visus vienumus\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/mk.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/mk\",[],function(){return{inputTooLong:function(n){var e=(n.input.length,n.maximum,\"Ве молиме внесете \"+n.maximum+\" помалку карактер\");return 1!==n.maximum&&(e+=\"и\"),e},inputTooShort:function(n){var e=(n.minimum,n.input.length,\"Ве молиме внесете уште \"+n.maximum+\" карактер\");return 1!==n.maximum&&(e+=\"и\"),e},loadingMore:function(){return\"Вчитување резултати…\"},maximumSelected:function(n){var e=\"Можете да изберете само \"+n.maximum+\" ставк\";return 1===n.maximum?e+=\"а\":e+=\"и\",e},noResults:function(){return\"Нема пронајдено совпаѓања\"},searching:function(){return\"Пребарување…\"},removeAllItems:function(){return\"Отстрани ги сите предмети\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ms.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ms\",[],function(){return{errorLoading:function(){return\"Keputusan tidak berjaya dimuatkan.\"},inputTooLong:function(n){return\"Sila hapuskan \"+(n.input.length-n.maximum)+\" aksara\"},inputTooShort:function(n){return\"Sila masukkan \"+(n.minimum-n.input.length)+\" atau lebih aksara\"},loadingMore:function(){return\"Sedang memuatkan keputusan…\"},maximumSelected:function(n){return\"Anda hanya boleh memilih \"+n.maximum+\" pilihan\"},noResults:function(){return\"Tiada padanan yang ditemui\"},searching:function(){return\"Mencari…\"},removeAllItems:function(){return\"Keluarkan semua item\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/nb.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/nb\",[],function(){return{errorLoading:function(){return\"Kunne ikke hente resultater.\"},inputTooLong:function(e){return\"Vennligst fjern \"+(e.input.length-e.maximum)+\" tegn\"},inputTooShort:function(e){return\"Vennligst skriv inn \"+(e.minimum-e.input.length)+\" tegn til\"},loadingMore:function(){return\"Laster flere resultater…\"},maximumSelected:function(e){return\"Du kan velge maks \"+e.maximum+\" elementer\"},noResults:function(){return\"Ingen treff\"},searching:function(){return\"Søker…\"},removeAllItems:function(){return\"Fjern alle elementer\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ne.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ne\",[],function(){return{errorLoading:function(){return\"नतिजाहरु देखाउन सकिएन।\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"कृपया \"+e+\" अक्षर मेटाउनुहोस्।\";return 1!=e&&(u+=\"कृपया \"+e+\" अक्षरहरु मेटाउनुहोस्।\"),u},inputTooShort:function(n){return\"कृपया बाँकी रहेका \"+(n.minimum-n.input.length)+\" वा अरु धेरै अक्षरहरु भर्नुहोस्।\"},loadingMore:function(){return\"अरु नतिजाहरु भरिँदैछन् …\"},maximumSelected:function(n){var e=\"तँपाई \"+n.maximum+\" वस्तु मात्र छान्न पाउँनुहुन्छ।\";return 1!=n.maximum&&(e=\"तँपाई \"+n.maximum+\" वस्तुहरु मात्र छान्न पाउँनुहुन्छ।\"),e},noResults:function(){return\"कुनै पनि नतिजा भेटिएन।\"},searching:function(){return\"खोजि हुँदैछ…\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/nl.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/nl\",[],function(){return{errorLoading:function(){return\"De resultaten konden niet worden geladen.\"},inputTooLong:function(e){return\"Gelieve \"+(e.input.length-e.maximum)+\" karakters te verwijderen\"},inputTooShort:function(e){return\"Gelieve \"+(e.minimum-e.input.length)+\" of meer karakters in te voeren\"},loadingMore:function(){return\"Meer resultaten laden…\"},maximumSelected:function(e){var n=1==e.maximum?\"kan\":\"kunnen\",r=\"Er \"+n+\" maar \"+e.maximum+\" item\";return 1!=e.maximum&&(r+=\"s\"),r+=\" worden geselecteerd\"},noResults:function(){return\"Geen resultaten gevonden…\"},searching:function(){return\"Zoeken…\"},removeAllItems:function(){return\"Verwijder alle items\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/pa.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/pa\",[],function(){return{errorLoading:function(){return\"ਨਤੀਜੇ ਲੋਡ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ ।\"},inputTooLong:function(n){var e=n.input.length-n.maximum;return\"ਕ੍ਰਿਪਾ ਕਰਕੇ \"+e+(1!=e?\" ਅੱਖਰਾਂ ਨੂੰ \":\" ਅੱਖਰ \")+\"ਮਿਟਾਓ ।\"},inputTooShort:function(n){var e=n.minimum-n.input.length;return\"ਕ੍ਰਿਪਾ ਕਰਕੇ \"+e+\" ਜਾਂ \"+e+\" ਤੋਂ ਵੱਧ\"+(e>1?\" ਅੱਖਰਾਂ \":\" ਅੱਖਰ \")+\"ਦੀ ਵਰਤੋਂ ਕਰੋ ।\"},loadingMore:function(){return\"ਹੋਰ ਨਤੀਜੇ ਲੋਡ ਹੋ ਰਹੇ ਹਨ ...।\"},maximumSelected:function(n){var e=\"ਤੁਸੀਂ ਸਿਰਫ਼ \"+n.maximum+\" ਨਤੀਜਾ ਚੁਣ ਸਕਦੇ ਹੋ ।\";return 1!=n.maximum&&(e=\"ਤੁਸੀਂ ਸਿਰਫ਼ \"+n.maximum+\" ਨਤੀਜੇ ਚੁਣ ਸਕਦੇ ਹੋ ।\"),e},noResults:function(){return\"ਨਤੀਜਾ ਨਹੀਂ ਮਿਲ ਰਿਹਾ ਹੈ ।\"},searching:function(){return\"ਖ਼ੋਜ ਕਰ ਰਹੇਂ ਹਾਂ ...।\"},removeAllItems:function(){return\"ਸਾਰੇ ਨਤੀਜੇ ਮਿਟਾਓ ।\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/pl.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/pl\",[],function(){var n=[\"znak\",\"znaki\",\"znaków\"],e=[\"element\",\"elementy\",\"elementów\"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return\"Nie można załadować wyników.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Usuń \"+t+\" \"+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Podaj przynajmniej \"+t+\" \"+r(t,n)},loadingMore:function(){return\"Trwa ładowanie…\"},maximumSelected:function(n){return\"Możesz zaznaczyć tylko \"+n.maximum+\" \"+r(n.maximum,e)},noResults:function(){return\"Brak wyników\"},searching:function(){return\"Trwa wyszukiwanie…\"},removeAllItems:function(){return\"Usuń wszystkie przedmioty\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ps.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ps\",[],function(){return{errorLoading:function(){return\"پايلي نه سي ترلاسه کېدای\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=\"د مهربانۍ لمخي \"+e+\" توری ړنګ کړئ\";return 1!=e&&(r=r.replace(\"توری\",\"توري\")),r},inputTooShort:function(n){return\"لږ تر لږه \"+(n.minimum-n.input.length)+\" يا ډېر توري وليکئ\"},loadingMore:function(){return\"نوري پايلي ترلاسه کيږي...\"},maximumSelected:function(n){var e=\"تاسو يوازي \"+n.maximum+\" قلم په نښه کولای سی\";return 1!=n.maximum&&(e=e.replace(\"قلم\",\"قلمونه\")),e},noResults:function(){return\"پايلي و نه موندل سوې\"},searching:function(){return\"لټول کيږي...\"},removeAllItems:function(){return\"ټول توکي لرې کړئ\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/pt-br.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/pt-br\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Apague \"+n+\" caracter\";return 1!=n&&(r+=\"es\"),r},inputTooShort:function(e){return\"Digite \"+(e.minimum-e.input.length)+\" ou mais caracteres\"},loadingMore:function(){return\"Carregando mais resultados…\"},maximumSelected:function(e){var n=\"Você só pode selecionar \"+e.maximum+\" ite\";return 1==e.maximum?n+=\"m\":n+=\"ns\",n},noResults:function(){return\"Nenhum resultado encontrado\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Remover todos os itens\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/pt.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/pt\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,n=\"Por favor apague \"+r+\" \";return n+=1!=r?\"caracteres\":\"caractere\"},inputTooShort:function(e){return\"Introduza \"+(e.minimum-e.input.length)+\" ou mais caracteres\"},loadingMore:function(){return\"A carregar mais resultados…\"},maximumSelected:function(e){var r=\"Apenas pode seleccionar \"+e.maximum+\" \";return r+=1!=e.maximum?\"itens\":\"item\"},noResults:function(){return\"Sem resultados\"},searching:function(){return\"A procurar…\"},removeAllItems:function(){return\"Remover todos os itens\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ro.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/ro\",[],function(){return{errorLoading:function(){return\"Rezultatele nu au putut fi incărcate.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vă rugăm să ștergeți\"+t+\" caracter\";return 1!==t&&(n+=\"e\"),n},inputTooShort:function(e){return\"Vă rugăm să introduceți \"+(e.minimum-e.input.length)+\" sau mai multe caractere\"},loadingMore:function(){return\"Se încarcă mai multe rezultate…\"},maximumSelected:function(e){var t=\"Aveți voie să selectați cel mult \"+e.maximum;return t+=\" element\",1!==e.maximum&&(t+=\"e\"),t},noResults:function(){return\"Nu au fost găsite rezultate\"},searching:function(){return\"Căutare…\"},removeAllItems:function(){return\"Eliminați toate elementele\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/ru.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ru\",[],function(){function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}return{errorLoading:function(){return\"Невозможно загрузить результаты\"},inputTooLong:function(e){var r=e.input.length-e.maximum,u=\"Пожалуйста, введите на \"+r+\" символ\";return u+=n(r,\"\",\"a\",\"ов\"),u+=\" меньше\"},inputTooShort:function(e){var r=e.minimum-e.input.length,u=\"Пожалуйста, введите ещё хотя бы \"+r+\" символ\";return u+=n(r,\"\",\"a\",\"ов\")},loadingMore:function(){return\"Загрузка данных…\"},maximumSelected:function(e){var r=\"Вы можете выбрать не более \"+e.maximum+\" элемент\";return r+=n(e.maximum,\"\",\"a\",\"ов\")},noResults:function(){return\"Совпадений не найдено\"},searching:function(){return\"Поиск…\"},removeAllItems:function(){return\"Удалить все элементы\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/sk.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sk\",[],function(){var e={2:function(e){return e?\"dva\":\"dve\"},3:function(){return\"tri\"},4:function(){return\"štyri\"}};return{errorLoading:function(){return\"Výsledky sa nepodarilo načítať.\"},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?\"Prosím, zadajte o jeden znak menej\":t>=2&&t<=4?\"Prosím, zadajte o \"+e[t](!0)+\" znaky menej\":\"Prosím, zadajte o \"+t+\" znakov menej\"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?\"Prosím, zadajte ešte jeden znak\":t<=4?\"Prosím, zadajte ešte ďalšie \"+e[t](!0)+\" znaky\":\"Prosím, zadajte ešte ďalších \"+t+\" znakov\"},loadingMore:function(){return\"Načítanie ďalších výsledkov…\"},maximumSelected:function(n){return 1==n.maximum?\"Môžete zvoliť len jednu položku\":n.maximum>=2&&n.maximum<=4?\"Môžete zvoliť najviac \"+e[n.maximum](!1)+\" položky\":\"Môžete zvoliť najviac \"+n.maximum+\" položiek\"},noResults:function(){return\"Nenašli sa žiadne položky\"},searching:function(){return\"Vyhľadávanie…\"},removeAllItems:function(){return\"Odstráňte všetky položky\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/sl.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sl\",[],function(){return{errorLoading:function(){return\"Zadetkov iskanja ni bilo mogoče naložiti.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Prosim zbrišite \"+n+\" znak\";return 2==n?t+=\"a\":1!=n&&(t+=\"e\"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t=\"Prosim vpišite še \"+n+\" znak\";return 2==n?t+=\"a\":1!=n&&(t+=\"e\"),t},loadingMore:function(){return\"Nalagam več zadetkov…\"},maximumSelected:function(e){var n=\"Označite lahko največ \"+e.maximum+\" predmet\";return 2==e.maximum?n+=\"a\":1!=e.maximum&&(n+=\"e\"),n},noResults:function(){return\"Ni zadetkov.\"},searching:function(){return\"Iščem…\"},removeAllItems:function(){return\"Odstranite vse elemente\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/sq.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sq\",[],function(){return{errorLoading:function(){return\"Rezultatet nuk mund të ngarkoheshin.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Të lutem fshi \"+n+\" karakter\";return 1!=n&&(t+=\"e\"),t},inputTooShort:function(e){return\"Të lutem shkruaj \"+(e.minimum-e.input.length)+\" ose më shumë karaktere\"},loadingMore:function(){return\"Duke ngarkuar më shumë rezultate…\"},maximumSelected:function(e){var n=\"Mund të zgjedhësh vetëm \"+e.maximum+\" element\";return 1!=e.maximum&&(n+=\"e\"),n},noResults:function(){return\"Nuk u gjet asnjë rezultat\"},searching:function(){return\"Duke kërkuar…\"},removeAllItems:function(){return\"Hiq të gjitha sendet\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/sr-cyrl.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sr-cyrl\",[],function(){function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:u}return{errorLoading:function(){return\"Преузимање није успело.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,u=\"Обришите \"+r+\" симбол\";return u+=n(r,\"\",\"а\",\"а\")},inputTooShort:function(e){var r=e.minimum-e.input.length,u=\"Укуцајте бар још \"+r+\" симбол\";return u+=n(r,\"\",\"а\",\"а\")},loadingMore:function(){return\"Преузимање још резултата…\"},maximumSelected:function(e){var r=\"Можете изабрати само \"+e.maximum+\" ставк\";return r+=n(e.maximum,\"у\",\"е\",\"и\")},noResults:function(){return\"Ништа није пронађено\"},searching:function(){return\"Претрага…\"},removeAllItems:function(){return\"Уклоните све ставке\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/sr.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sr\",[],function(){function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:t}return{errorLoading:function(){return\"Preuzimanje nije uspelo.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,t=\"Obrišite \"+r+\" simbol\";return t+=n(r,\"\",\"a\",\"a\")},inputTooShort:function(e){var r=e.minimum-e.input.length,t=\"Ukucajte bar još \"+r+\" simbol\";return t+=n(r,\"\",\"a\",\"a\")},loadingMore:function(){return\"Preuzimanje još rezultata…\"},maximumSelected:function(e){var r=\"Možete izabrati samo \"+e.maximum+\" stavk\";return r+=n(e.maximum,\"u\",\"e\",\"i\")},noResults:function(){return\"Ništa nije pronađeno\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Уклоните све ставке\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/sv.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sv\",[],function(){return{errorLoading:function(){return\"Resultat kunde inte laddas.\"},inputTooLong:function(n){return\"Vänligen sudda ut \"+(n.input.length-n.maximum)+\" tecken\"},inputTooShort:function(n){return\"Vänligen skriv in \"+(n.minimum-n.input.length)+\" eller fler tecken\"},loadingMore:function(){return\"Laddar fler resultat…\"},maximumSelected:function(n){return\"Du kan max välja \"+n.maximum+\" element\"},noResults:function(){return\"Inga träffar\"},searching:function(){return\"Söker…\"},removeAllItems:function(){return\"Ta bort alla objekt\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/te.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/te\",[],function(){return{errorLoading:function(){return\"ఫలితాలు చూపించలేకపోతున్నాము\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e;return r+=1!=e?\" అక్షరాలు తొలిగించండి\":\" అక్షరం తొలిగించండి\"},inputTooShort:function(n){return n.minimum-n.input.length+\" లేక మరిన్ని అక్షరాలను జోడించండి\"},loadingMore:function(){return\"మరిన్ని ఫలితాలు…\"},maximumSelected:function(n){var e=\"మీరు \"+n.maximum;return 1!=n.maximum?e+=\" అంశాల్ని మాత్రమే ఎంచుకోగలరు\":e+=\" అంశాన్ని మాత్రమే ఎంచుకోగలరు\",e},noResults:function(){return\"ఫలితాలు లేవు\"},searching:function(){return\"శోధిస్తున్నాము…\"},removeAllItems:function(){return\"అన్ని అంశాల్ని తొలిగించండి\"},removeItem:function(){return\"తొలిగించు\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/th.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/th\",[],function(){return{errorLoading:function(){return\"ไม่สามารถค้นข้อมูลได้\"},inputTooLong:function(n){return\"โปรดลบออก \"+(n.input.length-n.maximum)+\" ตัวอักษร\"},inputTooShort:function(n){return\"โปรดพิมพ์เพิ่มอีก \"+(n.minimum-n.input.length)+\" ตัวอักษร\"},loadingMore:function(){return\"กำลังค้นข้อมูลเพิ่ม…\"},maximumSelected:function(n){return\"คุณสามารถเลือกได้ไม่เกิน \"+n.maximum+\" รายการ\"},noResults:function(){return\"ไม่พบข้อมูล\"},searching:function(){return\"กำลังค้นข้อมูล…\"},removeAllItems:function(){return\"ลบรายการทั้งหมด\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/tk.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/tk\",[],function(){return{errorLoading:function(){return\"Netije ýüklenmedi.\"},inputTooLong:function(e){return e.input.length-e.maximum+\" harp bozuň.\"},inputTooShort:function(e){return\"Ýene-de iň az \"+(e.minimum-e.input.length)+\" harp ýazyň.\"},loadingMore:function(){return\"Köpräk netije görkezilýär…\"},maximumSelected:function(e){return\"Diňe \"+e.maximum+\" sanysyny saýlaň.\"},noResults:function(){return\"Netije tapylmady.\"},searching:function(){return\"Gözlenýär…\"},removeAllItems:function(){return\"Remove all items\"}}}),e.define,e.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/tr.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/tr\",[],function(){return{errorLoading:function(){return\"Sonuç yüklenemedi\"},inputTooLong:function(n){return n.input.length-n.maximum+\" karakter daha girmelisiniz\"},inputTooShort:function(n){return\"En az \"+(n.minimum-n.input.length)+\" karakter daha girmelisiniz\"},loadingMore:function(){return\"Daha fazla…\"},maximumSelected:function(n){return\"Sadece \"+n.maximum+\" seçim yapabilirsiniz\"},noResults:function(){return\"Sonuç bulunamadı\"},searching:function(){return\"Aranıyor…\"},removeAllItems:function(){return\"Tüm öğeleri kaldır\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/uk.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/uk\",[],function(){function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5?u:r}return{errorLoading:function(){return\"Неможливо завантажити результати\"},inputTooLong:function(e){return\"Будь ласка, видаліть \"+(e.input.length-e.maximum)+\" \"+n(e.maximum,\"літеру\",\"літери\",\"літер\")},inputTooShort:function(n){return\"Будь ласка, введіть \"+(n.minimum-n.input.length)+\" або більше літер\"},loadingMore:function(){return\"Завантаження інших результатів…\"},maximumSelected:function(e){return\"Ви можете вибрати лише \"+e.maximum+\" \"+n(e.maximum,\"пункт\",\"пункти\",\"пунктів\")},noResults:function(){return\"Нічого не знайдено\"},searching:function(){return\"Пошук…\"},removeAllItems:function(){return\"Видалити всі елементи\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/vi.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/vi\",[],function(){return{inputTooLong:function(n){return\"Vui lòng xóa bớt \"+(n.input.length-n.maximum)+\" ký tự\"},inputTooShort:function(n){return\"Vui lòng nhập thêm từ \"+(n.minimum-n.input.length)+\" ký tự trở lên\"},loadingMore:function(){return\"Đang lấy thêm kết quả…\"},maximumSelected:function(n){return\"Chỉ có thể chọn được \"+n.maximum+\" lựa chọn\"},noResults:function(){return\"Không tìm thấy kết quả\"},searching:function(){return\"Đang tìm…\"},removeAllItems:function(){return\"Xóa tất cả các mục\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/zh-cn.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/zh-cn\",[],function(){return{errorLoading:function(){return\"无法载入结果。\"},inputTooLong:function(n){return\"请删除\"+(n.input.length-n.maximum)+\"个字符\"},inputTooShort:function(n){return\"请再输入至少\"+(n.minimum-n.input.length)+\"个字符\"},loadingMore:function(){return\"载入更多结果…\"},maximumSelected:function(n){return\"最多只能选择\"+n.maximum+\"个项目\"},noResults:function(){return\"未找到结果\"},searching:function(){return\"搜索中…\"},removeAllItems:function(){return\"删除所有项目\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/i18n/zh-tw.js",
    "content": "/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/zh-tw\",[],function(){return{inputTooLong:function(n){return\"請刪掉\"+(n.input.length-n.maximum)+\"個字元\"},inputTooShort:function(n){return\"請再輸入\"+(n.minimum-n.input.length)+\"個字元\"},loadingMore:function(){return\"載入中…\"},maximumSelected:function(n){return\"你只能選擇最多\"+n.maximum+\"項\"},noResults:function(){return\"沒有找到相符的項目\"},searching:function(){return\"搜尋中…\"},removeAllItems:function(){return\"刪除所有項目\"}}}),n.define,n.require}();"
  },
  {
    "path": "modules/system/assets/vendor/select2/js/select2.full.js",
    "content": "/*!\n * Select2 4.1.0-rc.0\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id with a prefix.\n    // If an id already exists, it simply returns it with a prefix.\n\n    var select2Id = element.getAttribute('data-select2-id');\n\n    if (select2Id != null) {\n      return select2Id;\n    }\n\n    // If element has id, use it.\n    if (element.id) {\n      select2Id = 'select2-data-' + element.id;\n    } else {\n      select2Id = 'select2-data-' + (++id).toString() +\n        '-' + Utils.generateChars(4);\n    }\n\n    element.setAttribute('data-select2-id', select2Id);\n\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n\n    element.removeAttribute('data-select2-id');\n  };\n\n  Utils.copyNonInternalCssClasses = function (dest, src) {\n    var classes;\n\n    var destinationClasses = dest.getAttribute('class').trim().split(/\\s+/);\n\n    destinationClasses = destinationClasses.filter(function (clazz) {\n      // Save all Select2 classes\n      return clazz.indexOf('select2-') === 0;\n    });\n\n    var sourceClasses = src.getAttribute('class').trim().split(/\\s+/);\n\n    sourceClasses = sourceClasses.filter(function (clazz) {\n      // Only copy non-Select2 classes\n      return clazz.indexOf('select2-') !== 0;\n    });\n\n    var replacements = destinationClasses.concat(sourceClasses);\n\n    dest.setAttribute('class', replacements.join(' '));\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"alert\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option--selectable');\n\n    var $selected = $options.filter('.select2-results__option--selected');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = selected.map(function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option--selectable');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && selectedIds.indexOf(id) > -1)) {\n          this.classList.add('select2-results__option--selected');\n          $option.attr('aria-selected', 'true');\n        } else {\n          this.classList.remove('select2-results__option--selected');\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.classList.add('select2-results__option');\n    option.classList.add('select2-results__option--selectable');\n\n    var attrs = {\n      'role': 'option'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      attrs['aria-disabled'] = 'true';\n\n      option.classList.remove('select2-results__option--selectable');\n      option.classList.add('select2-results__option--disabled');\n    }\n\n    if (data.id == null) {\n      option.classList.remove('select2-results__option--selectable');\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n\n      option.classList.remove('select2-results__option--selectable');\n      option.classList.add('select2-results__option--group');\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested',\n        'role': 'none'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.hasClass('select2-results__option--selected')) {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('.select2-results__option--selectable');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('.select2-results__option--selectable');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element[0].classList.add('select2-results__option--highlighted');\n      params.element[0].setAttribute('aria-selected', 'true');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option--selectable',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.hasClass('select2-results__option--selected')) {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option--selectable',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted')\n          .attr('aria-selected', 'false');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('.select2-results__option--selectable');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n    $selection.attr('aria-disabled', 'false');\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n      self.$selection.attr('aria-disabled', 'false');\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n      self.$selection.attr('aria-disabled', 'true');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  BaseSelection.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  BaseSelection.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection[0].classList.add('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n    this.$selection.attr('aria-controls', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n\n    var title = selection.title || selection.text;\n\n    if (title) {\n      $rendered.attr('title', title);\n    } else {\n      $rendered.removeAttr('title');\n    }\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection[0].classList.add('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n    this.$selection.find('.select2-selection__rendered').attr('id', id);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.isDisabled()) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n\n    this.$selection.on(\n      'keydown',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.isDisabled()) {\n          return;\n        }\n\n        evt.stopPropagation();\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<button type=\"button\" class=\"select2-selection__choice__remove\" ' +\n        'tabindex=\"-1\">' +\n          '<span aria-hidden=\"true\">&times;</span>' +\n        '</button>' +\n        '<span class=\"select2-selection__choice__display\"></span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    var selectionIdPrefix = this.$selection.find('.select2-selection__rendered')\n      .attr('id') + '-choice-';\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      var selectionId = selectionIdPrefix + Utils.generateChars(4) + '-';\n\n      if (selection.id) {\n        selectionId += selection.id;\n      } else {\n        selectionId += Utils.generateChars(4);\n      }\n\n      $selection.find('.select2-selection__choice__display')\n        .append(formatted)\n        .attr('id', selectionId);\n\n      var title = selection.title || selection.text;\n\n      if (title) {\n        $selection.attr('title', title);\n      }\n\n      var removeItem = this.options.get('translations').get('removeItem');\n\n      var $remove = $selection.find('.select2-selection__choice__remove');\n\n      $remove.attr('title', removeItem());\n      $remove.attr('aria-label', removeItem());\n      $remove.attr('aria-describedby', selectionId);\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    $rendered.append($selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n\n], function () {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder[0].classList.add('select2-selection__placeholder');\n    $placeholder[0].classList.remove('select2-selection__choice');\n\n    var placeholderTitle = placeholder.title ||\n      placeholder.text ||\n      $placeholder.text();\n\n    this.$selection.find('.select2-selection__rendered').attr(\n      'title',\n      placeholderTitle\n    );\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.isDisabled()) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('input').trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__clear').remove();\n    this.$selection[0].classList.remove('select2-selection--clearable');\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var selectionId = this.$selection.find('.select2-selection__rendered')\n      .attr('id');\n\n    var removeAll = this.options.get('translations').get('removeAllItems');\n\n    var $remove = $(\n      '<button type=\"button\" class=\"select2-selection__clear\" tabindex=\"-1\">' +\n        '<span aria-hidden=\"true\">&times;</span>' +\n      '</button>'\n    );\n    $remove.attr('title', removeAll());\n    $remove.attr('aria-label', removeAll());\n    $remove.attr('aria-describedby', selectionId);\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.prepend($remove);\n    this.$selection[0].classList.add('select2-selection--clearable');\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var searchLabel = this.options.get('translations').get('search');\n    var $search = $(\n      '<span class=\"select2-search select2-search--inline\">' +\n        '<textarea class=\"select2-search__field\"'+\n        ' type=\"search\" tabindex=\"-1\"' +\n        ' autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" >' +\n        '</textarea>' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('textarea');\n\n    this.$search.prop('autocomplete', this.options.get('autocomplete'));\n    this.$search.attr('aria-label', searchLabel());\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n    $rendered.append(this.$searchContainer);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n    var selectionId = container.id + '-container';\n\n    decorated.call(this, container, $container);\n\n    self.$search.attr('aria-describedby', selectionId);\n\n    container.on('open', function () {\n      self.$search.attr('aria-controls', resultsId);\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.resizeSearch();\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$selection\n          .find('.select2-selection__choice').last();\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\n      if (self.$search.val()) {\n        evt.stopPropagation();\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '100%';\n\n    if (this.$search.attr('placeholder') === '') {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/selectionCss',[\n  '../utils'\n], function (Utils) {\n  function SelectionCSS () { }\n\n  SelectionCSS.prototype.render = function (decorated) {\n    var $selection = decorated.call(this);\n\n    var selectionCssClass = this.options.get('selectionCssClass') || '';\n\n    if (selectionCssClass.indexOf(':all:') !== -1) {\n      selectionCssClass = selectionCssClass.replace(':all:', '');\n\n      Utils.copyNonInternalCssClasses($selection[0], this.$element[0]);\n    }\n\n    $selection.addClass(selectionCssClass);\n\n    return $selection;\n  };\n\n  return SelectionCSS;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if (relayEvents.indexOf(name) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if (preventableEvents.indexOf(name) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var self = this;\n\n    var data = Array.prototype.map.call(\n      this.$element[0].querySelectorAll(':checked'),\n      function (selectedElement) {\n        return self.item($(selectedElement));\n      }\n    );\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if (\n      data.element != null && data.element.tagName.toLowerCase() === 'option'\n    ) {\n      data.element.selected = true;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if (val.indexOf(id) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('input').trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('input').trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if (\n      data.element != null &&\n      data.element.tagName.toLowerCase() === 'option'\n    ) {\n      data.element.selected = false;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && val.indexOf(id) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('input').trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      if (\n        this.tagName.toLowerCase() !== 'option' &&\n        this.tagName.toLowerCase() !== 'optgroup'\n      ) {\n        return;\n      }\n\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    this.$element.append($options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $(option);\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    var option = $option[0];\n\n    if (option.tagName.toLowerCase() === 'option') {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if (option.tagName.toLowerCase() === 'optgroup') {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    this._dataToConvert = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.bind = function (container, $container) {\n    ArrayAdapter.__super__.bind.call(this, container, $container);\n\n    this.addOptions(this.convertToOptions(this._dataToConvert));\n  };\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if (existingIds.indexOf(item.id) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        $option.append($children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if (typeof this._request.abort === 'function') {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !Array.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if (Array.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', 'true');\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    if (params.term == null) {\n      return null;\n    }\n\n    var term = params.term.trim();\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if (separators.indexOf(termChar) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.bind =\n    function (decorated, container, $container) {\n      var self = this;\n\n      decorated.call(this, container, $container);\n\n      container.on('select', function () {\n        self._checkIfMaximumSelected();\n      });\n  };\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this._checkIfMaximumSelected(function () {\n        decorated.call(self, params, callback);\n      });\n  };\n\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\n    function (_, successCallback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n\n        if (successCallback) {\n          successCallback();\n        }\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery'\n], function ($) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n    var searchLabel = this.options.get('translations').get('search');\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    this.$search.prop('autocomplete', this.options.get('autocomplete'));\n    this.$search.attr('aria-label', searchLabel());\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n      self.$search.attr('aria-controls', resultsId);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer[0].classList.remove('select2-search--hide');\n        } else {\n          self.$searchContainer[0].classList.add('select2-search--hide');\n        }\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"option\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      // Must bind after the results handlers to ensure correct sizing\n      self._bindContainerResultHandlers(container);\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown[0].classList.remove('select2');\n    $dropdown[0].classList.add('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._bindContainerResultHandlers =\n      function (decorated, container) {\n\n    // These should only be bound once\n    if (this._containerResultsHandlersBound) {\n      return;\n    }\n\n    var self = this;\n\n    container.on('results:all', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:append', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:message', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('select', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('unselect', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    this._containerResultsHandlersBound = true;\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown[0].classList\n      .contains('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown[0].classList\n      .contains('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = {\n      top: 0,\n      left: 0\n    };\n\n    if (\n      $.contains(document.body, $offsetParent[0]) ||\n      $offsetParent[0].isConnected\n      ) {\n      parentOffset = $offsetParent.offset();\n    }\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown[0].classList.remove('select2-dropdown--below');\n      this.$dropdown[0].classList.remove('select2-dropdown--above');\n      this.$dropdown[0].classList.add('select2-dropdown--' + newDirection);\n\n      this.$container[0].classList.remove('select2-container--below');\n      this.$container[0].classList.remove('select2-container--above');\n      this.$container[0].classList.add('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/dropdown/dropdownCss',[\n  '../utils'\n], function (Utils) {\n  function DropdownCSS () { }\n\n  DropdownCSS.prototype.render = function (decorated) {\n    var $dropdown = decorated.call(this);\n\n    var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n\n    if (dropdownCssClass.indexOf(':all:') !== -1) {\n      dropdownCssClass = dropdownCssClass.replace(':all:', '');\n\n      Utils.copyNonInternalCssClasses($dropdown[0], this.$element[0]);\n    }\n\n    $dropdown.addClass(dropdownCssClass);\n\n    return $dropdown;\n  };\n\n  return DropdownCSS;\n});\n\nS2.define('select2/dropdown/tagsSearchHighlight',[\n  '../utils'\n], function (Utils) {\n  function TagsSearchHighlight () { }\n\n  TagsSearchHighlight.prototype.highlightFirstItem = function (decorated) {\n    var $options = this.$results\n    .find(\n      '.select2-results__option--selectable' +\n      ':not(.select2-results__option--selected)'\n    );\n\n    if ($options.length > 0) {\n      var $firstOption = $options.first();\n      var data = Utils.GetData($firstOption[0], 'data');\n      var firstElement = data.element;\n\n      if (firstElement && firstElement.getAttribute) {\n        if (firstElement.getAttribute('data-select2-tag') === 'true') {\n          $firstOption.trigger('mouseenter');\n\n          return;\n        }\n      }\n    }\n\n    decorated.call(this);\n  };\n\n  return TagsSearchHighlight;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    },\n    removeItem: function () {\n      return 'Remove item';\n    },\n    search: function() {\n      return 'Search';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/selectionCss',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n  './dropdown/dropdownCss',\n  './dropdown/tagsSearchHighlight',\n\n  './i18n/en'\n], function ($,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, SelectionCSS, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n             DropdownCSS, TagsSearchHighlight,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n\n      if (options.tags) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          TagsSearchHighlight\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (options.dropdownCssClass != null) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (options.selectionCssClass != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    // If the defaults were not previously applied from an element, it is\n    // possible for the language option to have not been resolved\n    options.language = this._resolveLanguage(options.language);\n\n    // Always fall back to English since it will always be complete\n    options.language.push('en');\n\n    var uniqueLanguages = [];\n\n    for (var l = 0; l < options.language.length; l++) {\n      var language = options.language[l];\n\n      if (uniqueLanguages.indexOf(language) === -1) {\n        uniqueLanguages.push(language);\n      }\n    }\n\n    options.language = uniqueLanguages;\n\n    options.translations = this._processTranslations(\n      options.language,\n      options.debug\n    );\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if (params.term == null || params.term.trim() === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdLanguageBase: './i18n/',\n      autocomplete: 'off',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: {},\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.applyFromElement = function (options, $element) {\n    var optionLanguage = options.language;\n    var defaultLanguage = this.defaults.language;\n    var elementLanguage = $element.prop('lang');\n    var parentLanguage = $element.closest('[lang]').prop('lang');\n\n    var languages = Array.prototype.concat.call(\n      this._resolveLanguage(elementLanguage),\n      this._resolveLanguage(optionLanguage),\n      this._resolveLanguage(defaultLanguage),\n      this._resolveLanguage(parentLanguage)\n    );\n\n    options.language = languages;\n\n    return options;\n  };\n\n  Defaults.prototype._resolveLanguage = function (language) {\n    if (!language) {\n      return [];\n    }\n\n    if ($.isEmptyObject(language)) {\n      return [];\n    }\n\n    if ($.isPlainObject(language)) {\n      return [language];\n    }\n\n    var languages;\n\n    if (!Array.isArray(language)) {\n      languages = [language];\n    } else {\n      languages = language;\n    }\n\n    var resolvedLanguages = [];\n\n    for (var l = 0; l < languages.length; l++) {\n      resolvedLanguages.push(languages[l]);\n\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = languages[l].split('-');\n        var baseLanguage = languageParts[0];\n\n        resolvedLanguages.push(baseLanguage);\n      }\n    }\n\n    return resolvedLanguages;\n  };\n\n  Defaults.prototype._processTranslations = function (languages, debug) {\n    var translations = new Translation();\n\n    for (var l = 0; l < languages.length; l++) {\n      var languageData = new Translation();\n\n      var language = languages[l];\n\n      if (typeof language === 'string') {\n        try {\n          // Try to load it with the original name\n          languageData = Translation.loadPath(language);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            language = this.defaults.amdLanguageBase + language;\n            languageData = Translation.loadPath(language);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files\n            if (debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + language + '\" could ' +\n                'not be automatically loaded. A fallback will be used instead.'\n              );\n            }\n          }\n        }\n      } else if ($.isPlainObject(language)) {\n        languageData = new Translation(language);\n      } else {\n        languageData = language;\n      }\n\n      translations.extend(languageData);\n    }\n\n    return translations;\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'jquery',\n  './defaults',\n  './utils'\n], function ($, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    if ($element != null) {\n      this.options = Defaults.applyFromElement(this.options, $element);\n    }\n\n    this.options = Defaults.apply(this.options);\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.autocomplete == null && $e.prop('autocomplete')) {\n      this.options.autocomplete = $e.prop('autocomplete');\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if (excludedData.indexOf(key) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element[0].classList.add('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    this._observer = new window.MutationObserver(function (mutations) {\n      self._syncA();\n      self._syncS(mutations);\n    });\n    this._observer.observe(this.$element[0], {\n      attributes: true,\n      childList: true,\n      subtree: false\n    });\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if (nonRelayEvents.indexOf(name) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container[0].classList.add('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container[0].classList.remove('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container[0].classList.remove('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container[0].classList.add('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container[0].classList.remove('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || (key === KEYS.UP && evt.altKey)) {\n          self.close(evt);\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER || key === KEYS.TAB) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.isDisabled()) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._isChangeMutation = function (mutations) {\n    var self = this;\n\n    if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          return true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      return true;\n    } else if (Array.isArray(mutations)) {\n      return mutations.some(function (mutation) {\n        return self._isChangeMutation(mutation);\n      });\n    }\n\n    return false;\n  };\n\n  Select2.prototype._syncSubtree = function (mutations) {\n    var changed = this._isChangeMutation(mutations);\n    var self = this;\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    if (this.isDisabled()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function (evt) {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', { originalEvent : evt });\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  Select2.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  Select2.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container[0].classList.contains('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container[0].classList.contains('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container[0].classList.add('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if (Array.isArray(newVal)) {\n      newVal = newVal.map(function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('input').trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    Utils.RemoveData(this.$container[0]);\n    this.$container.remove();\n\n    this._observer.disconnect();\n    this._observer = null;\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element[0].classList.remove('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container[0].classList\n      .add('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('select2/dropdown/attachContainer',[\n\n], function () {\n  function AttachContainer (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  AttachContainer.prototype.position =\n    function (decorated, $dropdown, $container) {\n    var $dropdownContainer = $container.find('.dropdown-wrapper');\n    $dropdownContainer.append($dropdown);\n\n    $dropdown[0].classList.add('select2-dropdown--below');\n    $container[0].classList.add('select2-container--below');\n  };\n\n  return AttachContainer;\n});\n\nS2.define('select2/dropdown/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n    'blur',\n    'change',\n    'click',\n    'dblclick',\n    'focus',\n    'focusin',\n    'focusout',\n    'input',\n    'keydown',\n    'keyup',\n    'keypress',\n    'mousedown',\n    'mouseenter',\n    'mouseleave',\n    'mousemove',\n    'mouseover',\n    'mouseup',\n    'search',\n    'touchend',\n    'touchstart'\n    ];\n\n    this.$dropdown.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\nS2.define('select2/selection/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n      'blur',\n      'change',\n      'click',\n      'dblclick',\n      'focus',\n      'focusin',\n      'focusout',\n      'input',\n      'keydown',\n      'keyup',\n      'keypress',\n      'mousedown',\n      'mouseenter',\n      'mouseleave',\n      'mousemove',\n      'mouseover',\n      'mouseup',\n      'search',\n      'touchend',\n      'touchstart'\n    ];\n\n    this.$selection.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\n/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n    if ( typeof S2.define === 'function' && S2.define.amd ) {\n        // AMD. Register as an anonymous module.\n        S2.define('jquery-mousewheel',['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisible by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if (thisMethods.indexOf(options) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n"
  },
  {
    "path": "modules/system/assets/vendor/sortablejs/sortable.esm.js",
    "content": "function de(o,t){(t==null||t>o.length)&&(t=o.length);for(var e=0,n=Array(t);e<t;e++)n[e]=o[e];return n}function Ve(o){if(Array.isArray(o))return de(o)}function Ze(o,t,e){return(t=rn(t))in o?Object.defineProperty(o,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):o[t]=e,o}function $(){return $=Object.assign?Object.assign.bind():function(o){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var n in e)({}).hasOwnProperty.call(e,n)&&(o[n]=e[n])}return o},$.apply(null,arguments)}function Qe(o){if(typeof Symbol<\"u\"&&o[Symbol.iterator]!=null||o[\"@@iterator\"]!=null)return Array.from(o)}function Je(){throw new TypeError(`Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _e(o,t){var e=Object.keys(o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(o);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(o,i).enumerable})),e.push.apply(e,n)}return e}function Q(o){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?arguments[t]:{};t%2?_e(Object(e),!0).forEach(function(n){Ze(o,n,e[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(e)):_e(Object(e)).forEach(function(n){Object.defineProperty(o,n,Object.getOwnPropertyDescriptor(e,n))})}return o}function tn(o,t){if(o==null)return{};var e,n,i=en(o,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);for(n=0;n<r.length;n++)e=r[n],t.indexOf(e)===-1&&{}.propertyIsEnumerable.call(o,e)&&(i[e]=o[e])}return i}function en(o,t){if(o==null)return{};var e={};for(var n in o)if({}.hasOwnProperty.call(o,n)){if(t.indexOf(n)!==-1)continue;e[n]=o[n]}return e}function nn(o){return Ve(o)||Qe(o)||an(o)||Je()}function on(o,t){if(typeof o!=\"object\"||!o)return o;var e=o[Symbol.toPrimitive];if(e!==void 0){var n=e.call(o,t||\"default\");if(typeof n!=\"object\")return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(t===\"string\"?String:Number)(o)}function rn(o){var t=on(o,\"string\");return typeof t==\"symbol\"?t:t+\"\"}function he(o){\"@babel/helpers - typeof\";return he=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(t){return typeof t}:function(t){return t&&typeof Symbol==\"function\"&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},he(o)}function an(o,t){if(o){if(typeof o==\"string\")return de(o,t);var e={}.toString.call(o).slice(8,-1);return e===\"Object\"&&o.constructor&&(e=o.constructor.name),e===\"Map\"||e===\"Set\"?Array.from(o):e===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?de(o,t):void 0}}var ln=\"1.15.7\";function et(o){if(typeof window<\"u\"&&window.navigator)return!!navigator.userAgent.match(o)}var nt=et(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i),Xt=et(/Edge/i),Ce=et(/firefox/i),xt=et(/safari/i)&&!et(/chrome/i)&&!et(/android/i),be=et(/iP(ad|od|hone)/i),Re=et(/chrome/i)&&et(/android/i),ke={capture:!1,passive:!1};function y(o,t,e){o.addEventListener(t,e,!nt&&ke)}function b(o,t,e){o.removeEventListener(t,e,!nt&&ke)}function Vt(o,t){if(t){if(t[0]===\">\"&&(t=t.substring(1)),o)try{if(o.matches)return o.matches(t);if(o.msMatchesSelector)return o.msMatchesSelector(t);if(o.webkitMatchesSelector)return o.webkitMatchesSelector(t)}catch{return!1}return!1}}function Xe(o){return o.host&&o!==document&&o.host.nodeType&&o.host!==o?o.host:o.parentNode}function G(o,t,e,n){if(o){e=e||document;do{if(t!=null&&(t[0]===\">\"?o.parentNode===e&&Vt(o,t):Vt(o,t))||n&&o===e)return o;if(o===e)break}while(o=Xe(o))}return null}var Te=/\\s+/g;function I(o,t,e){if(o&&t)if(o.classList)o.classList[e?\"add\":\"remove\"](t);else{var n=(\" \"+o.className+\" \").replace(Te,\" \").replace(\" \"+t+\" \",\" \");o.className=(n+(e?\" \"+t:\"\")).replace(Te,\" \")}}function h(o,t,e){var n=o&&o.style;if(n){if(e===void 0)return document.defaultView&&document.defaultView.getComputedStyle?e=document.defaultView.getComputedStyle(o,\"\"):o.currentStyle&&(e=o.currentStyle),t===void 0?e:e[t];!(t in n)&&t.indexOf(\"webkit\")===-1&&(t=\"-webkit-\"+t),n[t]=e+(typeof e==\"string\"?\"\":\"px\")}}function ht(o,t){var e=\"\";if(typeof o==\"string\")e=o;else do{var n=h(o,\"transform\");n&&n!==\"none\"&&(e=n+\" \"+e)}while(!t&&(o=o.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(e)}function Ye(o,t,e){if(o){var n=o.getElementsByTagName(t),i=0,r=n.length;if(e)for(;i<r;i++)e(n[i],i);return n}return[]}function Z(){var o=document.scrollingElement;return o||document.documentElement}function T(o,t,e,n,i){if(!(!o.getBoundingClientRect&&o!==window)){var r,a,l,s,u,d,f;if(o!==window&&o.parentNode&&o!==Z()?(r=o.getBoundingClientRect(),a=r.top,l=r.left,s=r.bottom,u=r.right,d=r.height,f=r.width):(a=0,l=0,s=window.innerHeight,u=window.innerWidth,d=window.innerHeight,f=window.innerWidth),(t||e)&&o!==window&&(i=i||o.parentNode,!nt))do if(i&&i.getBoundingClientRect&&(h(i,\"transform\")!==\"none\"||e&&h(i,\"position\")!==\"static\")){var p=i.getBoundingClientRect();a-=p.top+parseInt(h(i,\"border-top-width\")),l-=p.left+parseInt(h(i,\"border-left-width\")),s=a+r.height,u=l+r.width;break}while(i=i.parentNode);if(n&&o!==window){var D=ht(i||o),w=D&&D.a,S=D&&D.d;D&&(a/=S,l/=w,f/=w,d/=S,s=a+d,u=l+f)}return{top:a,left:l,bottom:s,right:u,width:f,height:d}}}function Oe(o,t,e){for(var n=lt(o,!0),i=T(o)[t];n;){var r=T(n)[e],a=void 0;if(e===\"top\"||e===\"left\"?a=i>=r:a=i<=r,!a)return n;if(n===Z())break;n=lt(n,!1)}return!1}function yt(o,t,e,n){for(var i=0,r=0,a=o.children;r<a.length;){if(a[r].style.display!==\"none\"&&a[r]!==g.ghost&&(n||a[r]!==g.dragged)&&G(a[r],e.draggable,o,!1)){if(i===t)return a[r];i++}r++}return null}function ye(o,t){for(var e=o.lastElementChild;e&&(e===g.ghost||h(e,\"display\")===\"none\"||t&&!Vt(e,t));)e=e.previousElementSibling;return e||null}function P(o,t){var e=0;if(!o||!o.parentNode)return-1;for(;o=o.previousElementSibling;)o.nodeName.toUpperCase()!==\"TEMPLATE\"&&o!==g.clone&&(!t||Vt(o,t))&&e++;return e}function Ae(o){var t=0,e=0,n=Z();if(o)do{var i=ht(o),r=i.a,a=i.d;t+=o.scrollLeft*r,e+=o.scrollTop*a}while(o!==n&&(o=o.parentNode));return[t,e]}function sn(o,t){for(var e in o)if(o.hasOwnProperty(e)){for(var n in t)if(t.hasOwnProperty(n)&&t[n]===o[e][n])return Number(e)}return-1}function lt(o,t){if(!o||!o.getBoundingClientRect)return Z();var e=o,n=!1;do if(e.clientWidth<e.scrollWidth||e.clientHeight<e.scrollHeight){var i=h(e);if(e.clientWidth<e.scrollWidth&&(i.overflowX==\"auto\"||i.overflowX==\"scroll\")||e.clientHeight<e.scrollHeight&&(i.overflowY==\"auto\"||i.overflowY==\"scroll\")){if(!e.getBoundingClientRect||e===document.body)return Z();if(n||t)return e;n=!0}}while(e=e.parentNode);return Z()}function un(o,t){if(o&&t)for(var e in t)t.hasOwnProperty(e)&&(o[e]=t[e]);return o}function ne(o,t){return Math.round(o.top)===Math.round(t.top)&&Math.round(o.left)===Math.round(t.left)&&Math.round(o.height)===Math.round(t.height)&&Math.round(o.width)===Math.round(t.width)}var Mt;function Be(o,t){return function(){if(!Mt){var e=arguments,n=this;e.length===1?o.call(n,e[0]):o.apply(n,e),Mt=setTimeout(function(){Mt=void 0},t)}}}function cn(){clearTimeout(Mt),Mt=void 0}function He(o,t,e){o.scrollLeft+=t,o.scrollTop+=e}function we(o){var t=window.Polymer,e=window.jQuery||window.Zepto;return t&&t.dom?t.dom(o).cloneNode(!0):e?e(o).clone(!0)[0]:o.cloneNode(!0)}function Ie(o,t){h(o,\"position\",\"absolute\"),h(o,\"top\",t.top),h(o,\"left\",t.left),h(o,\"width\",t.width),h(o,\"height\",t.height)}function oe(o){h(o,\"position\",\"\"),h(o,\"top\",\"\"),h(o,\"left\",\"\"),h(o,\"width\",\"\"),h(o,\"height\",\"\")}function Ge(o,t,e){var n={};return Array.from(o.children).forEach(function(i){var r,a,l,s;if(!(!G(i,t.draggable,o,!1)||i.animated||i===e)){var u=T(i);n.left=Math.min((r=n.left)!==null&&r!==void 0?r:1/0,u.left),n.top=Math.min((a=n.top)!==null&&a!==void 0?a:1/0,u.top),n.right=Math.max((l=n.right)!==null&&l!==void 0?l:-1/0,u.right),n.bottom=Math.max((s=n.bottom)!==null&&s!==void 0?s:-1/0,u.bottom)}}),n.width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}var R=\"Sortable\"+new Date().getTime();function fn(){var o=[],t;return{captureAnimationState:function(){if(o=[],!!this.options.animation){var n=[].slice.call(this.el.children);n.forEach(function(i){if(!(h(i,\"display\")===\"none\"||i===g.ghost)){o.push({target:i,rect:T(i)});var r=Q({},o[o.length-1].rect);if(i.thisAnimationDuration){var a=ht(i,!0);a&&(r.top-=a.f,r.left-=a.e)}i.fromRect=r}})}},addAnimationState:function(n){o.push(n)},removeAnimationState:function(n){o.splice(sn(o,{target:n}),1)},animateAll:function(n){var i=this;if(!this.options.animation){clearTimeout(t),typeof n==\"function\"&&n();return}var r=!1,a=0;o.forEach(function(l){var s=0,u=l.target,d=u.fromRect,f=T(u),p=u.prevFromRect,D=u.prevToRect,w=l.rect,S=ht(u,!0);S&&(f.top-=S.f,f.left-=S.e),u.toRect=f,u.thisAnimationDuration&&ne(p,f)&&!ne(d,f)&&(w.top-f.top)/(w.left-f.left)===(d.top-f.top)/(d.left-f.left)&&(s=hn(w,p,D,i.options)),ne(f,d)||(u.prevFromRect=d,u.prevToRect=f,s||(s=i.options.animation),i.animate(u,w,f,s)),s&&(r=!0,a=Math.max(a,s),clearTimeout(u.animationResetTimer),u.animationResetTimer=setTimeout(function(){u.animationTime=0,u.prevFromRect=null,u.fromRect=null,u.prevToRect=null,u.thisAnimationDuration=null},s),u.thisAnimationDuration=s)}),clearTimeout(t),r?t=setTimeout(function(){typeof n==\"function\"&&n()},a):typeof n==\"function\"&&n(),o=[]},animate:function(n,i,r,a){if(a){h(n,\"transition\",\"\"),h(n,\"transform\",\"\");var l=ht(this.el),s=l&&l.a,u=l&&l.d,d=(i.left-r.left)/(s||1),f=(i.top-r.top)/(u||1);n.animatingX=!!d,n.animatingY=!!f,h(n,\"transform\",\"translate3d(\"+d+\"px,\"+f+\"px,0)\"),this.forRepaintDummy=dn(n),h(n,\"transition\",\"transform \"+a+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),h(n,\"transform\",\"translate3d(0,0,0)\"),typeof n.animated==\"number\"&&clearTimeout(n.animated),n.animated=setTimeout(function(){h(n,\"transition\",\"\"),h(n,\"transform\",\"\"),n.animated=!1,n.animatingX=!1,n.animatingY=!1},a)}}}}function dn(o){return o.offsetWidth}function hn(o,t,e,n){return Math.sqrt(Math.pow(t.top-o.top,2)+Math.pow(t.left-o.left,2))/Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))*n.animation}var pt=[],ie={initializeByDefault:!0},Yt={mount:function(t){for(var e in ie)ie.hasOwnProperty(e)&&!(e in t)&&(t[e]=ie[e]);pt.forEach(function(n){if(n.pluginName===t.pluginName)throw\"Sortable: Cannot mount plugin \".concat(t.pluginName,\" more than once\")}),pt.push(t)},pluginEvent:function(t,e,n){var i=this;this.eventCanceled=!1,n.cancel=function(){i.eventCanceled=!0};var r=t+\"Global\";pt.forEach(function(a){e[a.pluginName]&&(e[a.pluginName][r]&&e[a.pluginName][r](Q({sortable:e},n)),e.options[a.pluginName]&&e[a.pluginName][t]&&e[a.pluginName][t](Q({sortable:e},n)))})},initializePlugins:function(t,e,n,i){pt.forEach(function(l){var s=l.pluginName;if(!(!t.options[s]&&!l.initializeByDefault)){var u=new l(t,e,t.options);u.sortable=t,u.options=t.options,t[s]=u,$(n,u.defaults)}});for(var r in t.options)if(t.options.hasOwnProperty(r)){var a=this.modifyOption(t,r,t.options[r]);typeof a<\"u\"&&(t.options[r]=a)}},getEventProperties:function(t,e){var n={};return pt.forEach(function(i){typeof i.eventProperties==\"function\"&&$(n,i.eventProperties.call(e[i.pluginName],t))}),n},modifyOption:function(t,e,n){var i;return pt.forEach(function(r){t[r.pluginName]&&r.optionListeners&&typeof r.optionListeners[e]==\"function\"&&(i=r.optionListeners[e].call(t[r.pluginName],n))}),i}};function At(o){var t=o.sortable,e=o.rootEl,n=o.name,i=o.targetEl,r=o.cloneEl,a=o.toEl,l=o.fromEl,s=o.oldIndex,u=o.newIndex,d=o.oldDraggableIndex,f=o.newDraggableIndex,p=o.originalEvent,D=o.putSortable,w=o.extraEventProperties;if(t=t||e&&e[R],!!t){var S,X=t.options,W=\"on\"+n.charAt(0).toUpperCase()+n.substr(1);window.CustomEvent&&!nt&&!Xt?S=new CustomEvent(n,{bubbles:!0,cancelable:!0}):(S=document.createEvent(\"Event\"),S.initEvent(n,!0,!0)),S.to=a||e,S.from=l||e,S.item=i||e,S.clone=r,S.oldIndex=s,S.newIndex=u,S.oldDraggableIndex=d,S.newDraggableIndex=f,S.originalEvent=p,S.pullMode=D?D.lastPutMode:void 0;var E=Q(Q({},w),Yt.getEventProperties(n,t));for(var _ in E)S[_]=E[_];e&&e.dispatchEvent(S),X[W]&&X[W].call(t,S)}}var pn=[\"evt\"],B=function(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=n.evt,r=tn(n,pn);Yt.pluginEvent.bind(g)(t,e,Q({dragEl:c,parentEl:N,ghostEl:v,rootEl:O,nextEl:dt,lastDownEl:zt,cloneEl:A,cloneHidden:at,dragStarted:It,putSortable:F,activeSortable:g.active,originalEvent:i,oldIndex:bt,oldDraggableIndex:Ft,newIndex:L,newDraggableIndex:rt,hideGhostForTarget:We,unhideGhostForTarget:ze,cloneNowHidden:function(){at=!0},cloneNowShown:function(){at=!1},dispatchSortableEvent:function(l){Y({sortable:e,name:l,originalEvent:i})}},r))};function Y(o){At(Q({putSortable:F,cloneEl:A,targetEl:c,rootEl:O,oldIndex:bt,oldDraggableIndex:Ft,newIndex:L,newDraggableIndex:rt},o))}var c,N,v,O,dt,zt,A,at,bt,L,Ft,rt,Ht,F,vt=!1,Zt=!1,Qt=[],ct,q,re,ae,Ne,Pe,It,gt,Rt,kt=!1,Gt=!1,Ut,k,le=[],pe=!1,Jt=[],ee=typeof document<\"u\",jt=be,xe=Xt||nt?\"cssFloat\":\"float\",gn=ee&&!Re&&!be&&\"draggable\"in document.createElement(\"div\"),je=(function(){if(ee){if(nt)return!1;var o=document.createElement(\"x\");return o.style.cssText=\"pointer-events:auto\",o.style.pointerEvents===\"auto\"}})(),Ke=function(t,e){var n=h(t),i=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),r=yt(t,0,e),a=yt(t,1,e),l=r&&h(r),s=a&&h(a),u=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+T(r).width,d=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+T(a).width;if(n.display===\"flex\")return n.flexDirection===\"column\"||n.flexDirection===\"column-reverse\"?\"vertical\":\"horizontal\";if(n.display===\"grid\")return n.gridTemplateColumns.split(\" \").length<=1?\"vertical\":\"horizontal\";if(r&&l.float&&l.float!==\"none\"){var f=l.float===\"left\"?\"left\":\"right\";return a&&(s.clear===\"both\"||s.clear===f)?\"vertical\":\"horizontal\"}return r&&(l.display===\"block\"||l.display===\"flex\"||l.display===\"table\"||l.display===\"grid\"||u>=i&&n[xe]===\"none\"||a&&n[xe]===\"none\"&&u+d>i)?\"vertical\":\"horizontal\"},mn=function(t,e,n){var i=n?t.left:t.top,r=n?t.right:t.bottom,a=n?t.width:t.height,l=n?e.left:e.top,s=n?e.right:e.bottom,u=n?e.width:e.height;return i===l||r===s||i+a/2===l+u/2},vn=function(t,e){var n;return Qt.some(function(i){var r=i[R].options.emptyInsertThreshold;if(!(!r||ye(i))){var a=T(i),l=t>=a.left-r&&t<=a.right+r,s=e>=a.top-r&&e<=a.bottom+r;if(l&&s)return n=i}}),n},Le=function(t){function e(r,a){return function(l,s,u,d){var f=l.options.group.name&&s.options.group.name&&l.options.group.name===s.options.group.name;if(r==null&&(a||f))return!0;if(r==null||r===!1)return!1;if(a&&r===\"clone\")return r;if(typeof r==\"function\")return e(r(l,s,u,d),a)(l,s,u,d);var p=(a?l:s).options.group.name;return r===!0||typeof r==\"string\"&&r===p||r.join&&r.indexOf(p)>-1}}var n={},i=t.group;(!i||he(i)!=\"object\")&&(i={name:i}),n.name=i.name,n.checkPull=e(i.pull,!0),n.checkPut=e(i.put),n.revertClone=i.revertClone,t.group=n},We=function(){!je&&v&&h(v,\"display\",\"none\")},ze=function(){!je&&v&&h(v,\"display\",\"\")};ee&&!Re&&document.addEventListener(\"click\",function(o){if(Zt)return o.preventDefault(),o.stopPropagation&&o.stopPropagation(),o.stopImmediatePropagation&&o.stopImmediatePropagation(),Zt=!1,!1},!0);var ft=function(t){if(c){t=t.touches?t.touches[0]:t;var e=vn(t.clientX,t.clientY);if(e){var n={};for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[R]._onDragOver(n)}}},bn=function(t){c&&c.parentNode[R]._isOutsideThisEl(t.target)};function g(o,t){if(!(o&&o.nodeType&&o.nodeType===1))throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(o));this.el=o,this.options=t=$({},t),o[R]=this;var e={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(o.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ke(o,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(a,l){a.setData(\"Text\",l.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:g.supportPointer!==!1&&\"PointerEvent\"in window&&(!xt||be),emptyInsertThreshold:5};Yt.initializePlugins(this,o,e);for(var n in e)!(n in t)&&(t[n]=e[n]);Le(t);for(var i in this)i.charAt(0)===\"_\"&&typeof this[i]==\"function\"&&(this[i]=this[i].bind(this));this.nativeDraggable=t.forceFallback?!1:gn,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?y(o,\"pointerdown\",this._onTapStart):(y(o,\"mousedown\",this._onTapStart),y(o,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(y(o,\"dragover\",this),y(o,\"dragenter\",this)),Qt.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),$(this,fn())}g.prototype={constructor:g,_isOutsideThisEl:function(t){!this.el.contains(t)&&t!==this.el&&(gt=null)},_getDirection:function(t,e){return typeof this.options.direction==\"function\"?this.options.direction.call(this,t,e,c):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,i=this.options,r=i.preventOnFilter,a=t.type,l=t.touches&&t.touches[0]||t.pointerType&&t.pointerType===\"touch\"&&t,s=(l||t).target,u=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,d=i.filter;if(Tn(n),!c&&!(/mousedown|pointerdown/.test(a)&&t.button!==0||i.disabled)&&!u.isContentEditable&&!(!this.nativeDraggable&&xt&&s&&s.tagName.toUpperCase()===\"SELECT\")&&(s=G(s,i.draggable,n,!1),!(s&&s.animated)&&zt!==s)){if(bt=P(s),Ft=P(s,i.draggable),typeof d==\"function\"){if(d.call(this,t,s,this)){Y({sortable:e,rootEl:u,name:\"filter\",targetEl:s,toEl:n,fromEl:n}),B(\"filter\",e,{evt:t}),r&&t.preventDefault();return}}else if(d&&(d=d.split(\",\").some(function(f){if(f=G(u,f.trim(),n,!1),f)return Y({sortable:e,rootEl:f,name:\"filter\",targetEl:s,fromEl:n,toEl:n}),B(\"filter\",e,{evt:t}),!0}),d)){r&&t.preventDefault();return}i.handle&&!G(u,i.handle,n,!1)||this._prepareDragStart(t,l,s)}}},_prepareDragStart:function(t,e,n){var i=this,r=i.el,a=i.options,l=r.ownerDocument,s;if(n&&!c&&n.parentNode===r){var u=T(n);if(O=r,c=n,N=c.parentNode,dt=c.nextSibling,zt=n,Ht=a.group,g.dragged=c,ct={target:c,clientX:(e||t).clientX,clientY:(e||t).clientY},Ne=ct.clientX-u.left,Pe=ct.clientY-u.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,c.style[\"will-change\"]=\"all\",s=function(){if(B(\"delayEnded\",i,{evt:t}),g.eventCanceled){i._onDrop();return}i._disableDelayedDragEvents(),!Ce&&i.nativeDraggable&&(c.draggable=!0),i._triggerDragStart(t,e),Y({sortable:i,name:\"choose\",originalEvent:t}),I(c,a.chosenClass,!0)},a.ignore.split(\",\").forEach(function(d){Ye(c,d.trim(),se)}),y(l,\"dragover\",ft),y(l,\"mousemove\",ft),y(l,\"touchmove\",ft),a.supportPointer?(y(l,\"pointerup\",i._onDrop),!this.nativeDraggable&&y(l,\"pointercancel\",i._onDrop)):(y(l,\"mouseup\",i._onDrop),y(l,\"touchend\",i._onDrop),y(l,\"touchcancel\",i._onDrop)),Ce&&this.nativeDraggable&&(this.options.touchStartThreshold=4,c.draggable=!0),B(\"delayStart\",this,{evt:t}),a.delay&&(!a.delayOnTouchOnly||e)&&(!this.nativeDraggable||!(Xt||nt))){if(g.eventCanceled){this._onDrop();return}a.supportPointer?(y(l,\"pointerup\",i._disableDelayedDrag),y(l,\"pointercancel\",i._disableDelayedDrag)):(y(l,\"mouseup\",i._disableDelayedDrag),y(l,\"touchend\",i._disableDelayedDrag),y(l,\"touchcancel\",i._disableDelayedDrag)),y(l,\"mousemove\",i._delayedDragTouchMoveHandler),y(l,\"touchmove\",i._delayedDragTouchMoveHandler),a.supportPointer&&y(l,\"pointermove\",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(s,a.delay)}else s()}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){c&&se(c),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;b(t,\"mouseup\",this._disableDelayedDrag),b(t,\"touchend\",this._disableDelayedDrag),b(t,\"touchcancel\",this._disableDelayedDrag),b(t,\"pointerup\",this._disableDelayedDrag),b(t,\"pointercancel\",this._disableDelayedDrag),b(t,\"mousemove\",this._delayedDragTouchMoveHandler),b(t,\"touchmove\",this._delayedDragTouchMoveHandler),b(t,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||t.pointerType==\"touch\"&&t,!this.nativeDraggable||e?this.options.supportPointer?y(document,\"pointermove\",this._onTouchMove):e?y(document,\"touchmove\",this._onTouchMove):y(document,\"mousemove\",this._onTouchMove):(y(c,\"dragend\",this),y(O,\"dragstart\",this._onDragStart));try{document.selection?$t(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(t,e){if(vt=!1,O&&c){B(\"dragStarted\",this,{evt:e}),this.nativeDraggable&&y(document,\"dragover\",bn);var n=this.options;!t&&I(c,n.dragClass,!1),I(c,n.ghostClass,!0),g.active=this,t&&this._appendGhost(),Y({sortable:this,name:\"start\",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(q){this._lastX=q.clientX,this._lastY=q.clientY,We();for(var t=document.elementFromPoint(q.clientX,q.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(q.clientX,q.clientY),t!==e);)e=t;if(c.parentNode[R]._isOutsideThisEl(t),e)do{if(e[R]){var n=void 0;if(n=e[R]._onDragOver({clientX:q.clientX,clientY:q.clientY,target:t,rootEl:e}),n&&!this.options.dragoverBubble)break}t=e}while(e=Xe(e));ze()}},_onTouchMove:function(t){if(ct){var e=this.options,n=e.fallbackTolerance,i=e.fallbackOffset,r=t.touches?t.touches[0]:t,a=v&&ht(v,!0),l=v&&a&&a.a,s=v&&a&&a.d,u=jt&&k&&Ae(k),d=(r.clientX-ct.clientX+i.x)/(l||1)+(u?u[0]-le[0]:0)/(l||1),f=(r.clientY-ct.clientY+i.y)/(s||1)+(u?u[1]-le[1]:0)/(s||1);if(!g.active&&!vt){if(n&&Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))<n)return;this._onDragStart(t,!0)}if(v){a?(a.e+=d-(re||0),a.f+=f-(ae||0)):a={a:1,b:0,c:0,d:1,e:d,f};var p=\"matrix(\".concat(a.a,\",\").concat(a.b,\",\").concat(a.c,\",\").concat(a.d,\",\").concat(a.e,\",\").concat(a.f,\")\");h(v,\"webkitTransform\",p),h(v,\"mozTransform\",p),h(v,\"msTransform\",p),h(v,\"transform\",p),re=d,ae=f,q=r}t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!v){var t=this.options.fallbackOnBody?document.body:O,e=T(c,!0,jt,!0,t),n=this.options;if(jt){for(k=t;h(k,\"position\")===\"static\"&&h(k,\"transform\")===\"none\"&&k!==document;)k=k.parentNode;k!==document.body&&k!==document.documentElement?(k===document&&(k=Z()),e.top+=k.scrollTop,e.left+=k.scrollLeft):k=Z(),le=Ae(k)}v=c.cloneNode(!0),I(v,n.ghostClass,!1),I(v,n.fallbackClass,!0),I(v,n.dragClass,!0),h(v,\"transition\",\"\"),h(v,\"transform\",\"\"),h(v,\"box-sizing\",\"border-box\"),h(v,\"margin\",0),h(v,\"top\",e.top),h(v,\"left\",e.left),h(v,\"width\",e.width),h(v,\"height\",e.height),h(v,\"opacity\",\"0.8\"),h(v,\"position\",jt?\"absolute\":\"fixed\"),h(v,\"zIndex\",\"100000\"),h(v,\"pointerEvents\",\"none\"),g.ghost=v,t.appendChild(v),h(v,\"transform-origin\",Ne/parseInt(v.style.width)*100+\"% \"+Pe/parseInt(v.style.height)*100+\"%\")}},_onDragStart:function(t,e){var n=this,i=t.dataTransfer,r=n.options;if(B(\"dragStart\",this,{evt:t}),g.eventCanceled){this._onDrop();return}B(\"setupClone\",this),g.eventCanceled||(A=we(c),A.removeAttribute(\"id\"),A.draggable=!1,A.style[\"will-change\"]=\"\",this._hideClone(),I(A,this.options.chosenClass,!1),g.clone=A),n.cloneId=$t(function(){B(\"clone\",n),!g.eventCanceled&&(n.options.removeCloneOnHide||O.insertBefore(A,c),n._hideClone(),Y({sortable:n,name:\"clone\"}))}),!e&&I(c,r.dragClass,!0),e?(Zt=!0,n._loopId=setInterval(n._emulateDragOver,50)):(b(document,\"mouseup\",n._onDrop),b(document,\"touchend\",n._onDrop),b(document,\"touchcancel\",n._onDrop),i&&(i.effectAllowed=\"move\",r.setData&&r.setData.call(n,i,c)),y(document,\"drop\",n),h(c,\"transform\",\"translateZ(0)\")),vt=!0,n._dragStartId=$t(n._dragStarted.bind(n,e,t)),y(document,\"selectstart\",n),It=!0,window.getSelection().removeAllRanges(),xt&&h(document.body,\"user-select\",\"none\")},_onDragOver:function(t){var e=this.el,n=t.target,i,r,a,l=this.options,s=l.group,u=g.active,d=Ht===s,f=l.sort,p=F||u,D,w=this,S=!1;if(pe)return;function X(_t,$e){B(_t,w,Q({evt:t,isOwner:d,axis:D?\"vertical\":\"horizontal\",revert:a,dragRect:i,targetRect:r,canSort:f,fromSortable:p,target:n,completed:E,onMove:function(Se,qe){return Kt(O,e,c,i,Se,T(Se),t,qe)},changed:_},$e))}function W(){X(\"dragOverAnimationCapture\"),w.captureAnimationState(),w!==p&&p.captureAnimationState()}function E(_t){return X(\"dragOverCompleted\",{insertion:_t}),_t&&(d?u._hideClone():u._showClone(w),w!==p&&(I(c,F?F.options.ghostClass:u.options.ghostClass,!1),I(c,l.ghostClass,!0)),F!==w&&w!==g.active?F=w:w===g.active&&F&&(F=null),p===w&&(w._ignoreWhileAnimating=n),w.animateAll(function(){X(\"dragOverAnimationComplete\"),w._ignoreWhileAnimating=null}),w!==p&&(p.animateAll(),p._ignoreWhileAnimating=null)),(n===c&&!c.animated||n===e&&!n.animated)&&(gt=null),!l.dragoverBubble&&!t.rootEl&&n!==document&&(c.parentNode[R]._isOutsideThisEl(t.target),!_t&&ft(t)),!l.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),S=!0}function _(){L=P(c),rt=P(c,l.draggable),Y({sortable:w,name:\"change\",toEl:e,newIndex:L,newDraggableIndex:rt,originalEvent:t})}if(t.preventDefault!==void 0&&t.cancelable&&t.preventDefault(),n=G(n,l.draggable,e,!0),X(\"dragOver\"),g.eventCanceled)return S;if(c.contains(t.target)||n.animated&&n.animatingX&&n.animatingY||w._ignoreWhileAnimating===n)return E(!1);if(Zt=!1,u&&!l.disabled&&(d?f||(a=N!==O):F===this||(this.lastPutMode=Ht.checkPull(this,u,c,t))&&s.checkPut(this,u,c,t))){if(D=this._getDirection(t,n)===\"vertical\",i=T(c),X(\"dragOverValid\"),g.eventCanceled)return S;if(a)return N=O,W(),this._hideClone(),X(\"revert\"),g.eventCanceled||(dt?O.insertBefore(c,dt):O.appendChild(c)),E(!0);var M=ye(e,l.draggable);if(!M||Dn(t,D,this)&&!M.animated){if(M===c)return E(!1);if(M&&e===t.target&&(n=M),n&&(r=T(n)),Kt(O,e,c,i,n,r,t,!!n)!==!1)return W(),M&&M.nextSibling?e.insertBefore(c,M.nextSibling):e.appendChild(c),N=e,_(),E(!0)}else if(M&&En(t,D,this)){var J=yt(e,0,l,!0);if(J===c)return E(!1);if(n=J,r=T(n),Kt(O,e,c,i,n,r,t,!1)!==!1)return W(),e.insertBefore(c,J),N=e,_(),E(!0)}else if(n.parentNode===e){r=T(n);var z=0,st,wt=c.parentNode!==e,j=!mn(c.animated&&c.toRect||i,n.animated&&n.toRect||r,D),Et=D?\"top\":\"left\",ot=Oe(n,\"top\",\"top\")||Oe(c,\"top\",\"top\"),Dt=ot?ot.scrollTop:void 0;gt!==n&&(st=r[Et],kt=!1,Gt=!j&&l.invertSwap||wt),z=Sn(t,n,r,D,j?1:l.swapThreshold,l.invertedSwapThreshold==null?l.swapThreshold:l.invertedSwapThreshold,Gt,gt===n);var tt;if(z!==0){var ut=P(c);do ut-=z,tt=N.children[ut];while(tt&&(h(tt,\"display\")===\"none\"||tt===v))}if(z===0||tt===n)return E(!1);gt=n,Rt=z;var St=n.nextElementSibling,it=!1;it=z===1;var Bt=Kt(O,e,c,i,n,r,t,it);if(Bt!==!1)return(Bt===1||Bt===-1)&&(it=Bt===1),pe=!0,setTimeout(wn,30),W(),it&&!St?e.appendChild(c):n.parentNode.insertBefore(c,it?St:n),ot&&He(ot,0,Dt-ot.scrollTop),N=c.parentNode,st!==void 0&&!Gt&&(Ut=Math.abs(st-T(n)[Et])),_(),E(!0)}if(e.contains(c))return E(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function(){b(document,\"mousemove\",this._onTouchMove),b(document,\"touchmove\",this._onTouchMove),b(document,\"pointermove\",this._onTouchMove),b(document,\"dragover\",ft),b(document,\"mousemove\",ft),b(document,\"touchmove\",ft)},_offUpEvents:function(){var t=this.el.ownerDocument;b(t,\"mouseup\",this._onDrop),b(t,\"touchend\",this._onDrop),b(t,\"pointerup\",this._onDrop),b(t,\"pointercancel\",this._onDrop),b(t,\"touchcancel\",this._onDrop),b(document,\"selectstart\",this)},_onDrop:function(t){var e=this.el,n=this.options;if(L=P(c),rt=P(c,n.draggable),B(\"drop\",this,{evt:t}),N=c&&c.parentNode,L=P(c),rt=P(c,n.draggable),g.eventCanceled){this._nulling();return}vt=!1,Gt=!1,kt=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),ge(this.cloneId),ge(this._dragStartId),this.nativeDraggable&&(b(document,\"drop\",this),b(e,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),xt&&h(document.body,\"user-select\",\"\"),h(c,\"transform\",\"\"),t&&(It&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),v&&v.parentNode&&v.parentNode.removeChild(v),(O===N||F&&F.lastPutMode!==\"clone\")&&A&&A.parentNode&&A.parentNode.removeChild(A),c&&(this.nativeDraggable&&b(c,\"dragend\",this),se(c),c.style[\"will-change\"]=\"\",It&&!vt&&I(c,F?F.options.ghostClass:this.options.ghostClass,!1),I(c,this.options.chosenClass,!1),Y({sortable:this,name:\"unchoose\",toEl:N,newIndex:null,newDraggableIndex:null,originalEvent:t}),O!==N?(L>=0&&(Y({rootEl:N,name:\"add\",toEl:N,fromEl:O,originalEvent:t}),Y({sortable:this,name:\"remove\",toEl:N,originalEvent:t}),Y({rootEl:N,name:\"sort\",toEl:N,fromEl:O,originalEvent:t}),Y({sortable:this,name:\"sort\",toEl:N,originalEvent:t})),F&&F.save()):L!==bt&&L>=0&&(Y({sortable:this,name:\"update\",toEl:N,originalEvent:t}),Y({sortable:this,name:\"sort\",toEl:N,originalEvent:t})),g.active&&((L==null||L===-1)&&(L=bt,rt=Ft),Y({sortable:this,name:\"end\",toEl:N,originalEvent:t}),this.save()))),this._nulling()},_nulling:function(){B(\"nulling\",this),O=c=N=v=dt=A=zt=at=ct=q=It=L=rt=bt=Ft=gt=Rt=F=Ht=g.dragged=g.ghost=g.clone=g.active=null;var t=this.el;Jt.forEach(function(e){t.contains(e)&&(e.checked=!0)}),Jt.length=re=ae=0},handleEvent:function(t){switch(t.type){case\"drop\":case\"dragend\":this._onDrop(t);break;case\"dragenter\":case\"dragover\":c&&(this._onDragOver(t),yn(t));break;case\"selectstart\":t.preventDefault();break}},toArray:function(){for(var t=[],e,n=this.el.children,i=0,r=n.length,a=this.options;i<r;i++)e=n[i],G(e,a.draggable,this.el,!1)&&t.push(e.getAttribute(a.dataIdAttr)||Cn(e));return t},sort:function(t,e){var n={},i=this.el;this.toArray().forEach(function(r,a){var l=i.children[a];G(l,this.options.draggable,i,!1)&&(n[r]=l)},this),e&&this.captureAnimationState(),t.forEach(function(r){n[r]&&(i.removeChild(n[r]),i.appendChild(n[r]))}),e&&this.animateAll()},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return G(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var n=this.options;if(e===void 0)return n[t];var i=Yt.modifyOption(this,t,e);typeof i<\"u\"?n[t]=i:n[t]=e,t===\"group\"&&Le(n)},destroy:function(){B(\"destroy\",this);var t=this.el;t[R]=null,b(t,\"mousedown\",this._onTapStart),b(t,\"touchstart\",this._onTapStart),b(t,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(b(t,\"dragover\",this),b(t,\"dragenter\",this)),Array.prototype.forEach.call(t.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),Qt.splice(Qt.indexOf(this.el),1),this.el=t=null},_hideClone:function(){if(!at){if(B(\"hideClone\",this),g.eventCanceled)return;h(A,\"display\",\"none\"),this.options.removeCloneOnHide&&A.parentNode&&A.parentNode.removeChild(A),at=!0}},_showClone:function(t){if(t.lastPutMode!==\"clone\"){this._hideClone();return}if(at){if(B(\"showClone\",this),g.eventCanceled)return;c.parentNode==O&&!this.options.group.revertClone?O.insertBefore(A,c):dt?O.insertBefore(A,dt):O.appendChild(A),this.options.group.revertClone&&this.animate(c,A),h(A,\"display\",\"\"),at=!1}}};function yn(o){o.dataTransfer&&(o.dataTransfer.dropEffect=\"move\"),o.cancelable&&o.preventDefault()}function Kt(o,t,e,n,i,r,a,l){var s,u=o[R],d=u.options.onMove,f;return window.CustomEvent&&!nt&&!Xt?s=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}):(s=document.createEvent(\"Event\"),s.initEvent(\"move\",!0,!0)),s.to=t,s.from=o,s.dragged=e,s.draggedRect=n,s.related=i||t,s.relatedRect=r||T(t),s.willInsertAfter=l,s.originalEvent=a,o.dispatchEvent(s),d&&(f=d.call(u,s,a)),f}function se(o){o.draggable=!1}function wn(){pe=!1}function En(o,t,e){var n=T(yt(e.el,0,e.options,!0)),i=Ge(e.el,e.options,v),r=10;return t?o.clientX<i.left-r||o.clientY<n.top&&o.clientX<n.right:o.clientY<i.top-r||o.clientY<n.bottom&&o.clientX<n.left}function Dn(o,t,e){var n=T(ye(e.el,e.options.draggable)),i=Ge(e.el,e.options,v),r=10;return t?o.clientX>i.right+r||o.clientY>n.bottom&&o.clientX>n.left:o.clientY>i.bottom+r||o.clientX>n.right&&o.clientY>n.top}function Sn(o,t,e,n,i,r,a,l){var s=n?o.clientY:o.clientX,u=n?e.height:e.width,d=n?e.top:e.left,f=n?e.bottom:e.right,p=!1;if(!a){if(l&&Ut<u*i){if(!kt&&(Rt===1?s>d+u*r/2:s<f-u*r/2)&&(kt=!0),kt)p=!0;else if(Rt===1?s<d+Ut:s>f-Ut)return-Rt}else if(s>d+u*(1-i)/2&&s<f-u*(1-i)/2)return _n(t)}return p=p||a,p&&(s<d+u*r/2||s>f-u*r/2)?s>d+u/2?1:-1:0}function _n(o){return P(c)<P(o)?1:-1}function Cn(o){for(var t=o.tagName+o.className+o.src+o.href+o.textContent,e=t.length,n=0;e--;)n+=t.charCodeAt(e);return n.toString(36)}function Tn(o){Jt.length=0;for(var t=o.getElementsByTagName(\"input\"),e=t.length;e--;){var n=t[e];n.checked&&Jt.push(n)}}function $t(o){return setTimeout(o,0)}function ge(o){return clearTimeout(o)}ee&&y(document,\"touchmove\",function(o){(g.active||vt)&&o.cancelable&&o.preventDefault()});g.utils={on:y,off:b,css:h,find:Ye,is:function(t,e){return!!G(t,e,t,!1)},extend:un,throttle:Be,closest:G,toggleClass:I,clone:we,index:P,nextTick:$t,cancelNextTick:ge,detectDirection:Ke,getChild:yt,expando:R};g.get=function(o){return o[R]};g.mount=function(){for(var o=arguments.length,t=new Array(o),e=0;e<o;e++)t[e]=arguments[e];t[0].constructor===Array&&(t=t[0]),t.forEach(function(n){if(!n.prototype||!n.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(n));n.utils&&(g.utils=Q(Q({},g.utils),n.utils)),Yt.mount(n)})};g.create=function(o,t){return new g(o,t)};g.version=ln;var x=[],Nt,me,ve=!1,ue,ce,te,Pt;function On(){function o(){this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(var t in this)t.charAt(0)===\"_\"&&typeof this[t]==\"function\"&&(this[t]=this[t].bind(this))}return o.prototype={dragStarted:function(e){var n=e.originalEvent;this.sortable.nativeDraggable?y(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?y(document,\"pointermove\",this._handleFallbackAutoScroll):n.touches?y(document,\"touchmove\",this._handleFallbackAutoScroll):y(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var n=e.originalEvent;!this.options.dragOverBubble&&!n.rootEl&&this._handleAutoScroll(n)},drop:function(){this.sortable.nativeDraggable?b(document,\"dragover\",this._handleAutoScroll):(b(document,\"pointermove\",this._handleFallbackAutoScroll),b(document,\"touchmove\",this._handleFallbackAutoScroll),b(document,\"mousemove\",this._handleFallbackAutoScroll)),Me(),qt(),cn()},nulling:function(){te=me=Nt=ve=Pt=ue=ce=null,x.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,n){var i=this,r=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,l=document.elementFromPoint(r,a);if(te=e,n||this.options.forceAutoScrollFallback||Xt||nt||xt){fe(e,this.options,l,n);var s=lt(l,!0);ve&&(!Pt||r!==ue||a!==ce)&&(Pt&&Me(),Pt=setInterval(function(){var u=lt(document.elementFromPoint(r,a),!0);u!==s&&(s=u,qt()),fe(e,i.options,u,n)},10),ue=r,ce=a)}else{if(!this.options.bubbleScroll||lt(l,!0)===Z()){qt();return}fe(e,this.options,lt(l,!1),!1)}}},$(o,{pluginName:\"scroll\",initializeByDefault:!0})}function qt(){x.forEach(function(o){clearInterval(o.pid)}),x=[]}function Me(){clearInterval(Pt)}var fe=Be(function(o,t,e,n){if(t.scroll){var i=(o.touches?o.touches[0]:o).clientX,r=(o.touches?o.touches[0]:o).clientY,a=t.scrollSensitivity,l=t.scrollSpeed,s=Z(),u=!1,d;me!==e&&(me=e,qt(),Nt=t.scroll,d=t.scrollFn,Nt===!0&&(Nt=lt(e,!0)));var f=0,p=Nt;do{var D=p,w=T(D),S=w.top,X=w.bottom,W=w.left,E=w.right,_=w.width,M=w.height,J=void 0,z=void 0,st=D.scrollWidth,wt=D.scrollHeight,j=h(D),Et=D.scrollLeft,ot=D.scrollTop;D===s?(J=_<st&&(j.overflowX===\"auto\"||j.overflowX===\"scroll\"||j.overflowX===\"visible\"),z=M<wt&&(j.overflowY===\"auto\"||j.overflowY===\"scroll\"||j.overflowY===\"visible\")):(J=_<st&&(j.overflowX===\"auto\"||j.overflowX===\"scroll\"),z=M<wt&&(j.overflowY===\"auto\"||j.overflowY===\"scroll\"));var Dt=J&&(Math.abs(E-i)<=a&&Et+_<st)-(Math.abs(W-i)<=a&&!!Et),tt=z&&(Math.abs(X-r)<=a&&ot+M<wt)-(Math.abs(S-r)<=a&&!!ot);if(!x[f])for(var ut=0;ut<=f;ut++)x[ut]||(x[ut]={});(x[f].vx!=Dt||x[f].vy!=tt||x[f].el!==D)&&(x[f].el=D,x[f].vx=Dt,x[f].vy=tt,clearInterval(x[f].pid),(Dt!=0||tt!=0)&&(u=!0,x[f].pid=setInterval(function(){n&&this.layer===0&&g.active._onTouchMove(te);var St=x[this.layer].vy?x[this.layer].vy*l:0,it=x[this.layer].vx?x[this.layer].vx*l:0;typeof d==\"function\"&&d.call(g.dragged.parentNode[R],it,St,o,te,x[this.layer].el)!==\"continue\"||He(x[this.layer].el,it,St)}.bind({layer:f}),24))),f++}while(t.bubbleScroll&&p!==s&&(p=lt(p,!1)));ve=u}},30),Ue=function(t){var e=t.originalEvent,n=t.putSortable,i=t.dragEl,r=t.activeSortable,a=t.dispatchSortableEvent,l=t.hideGhostForTarget,s=t.unhideGhostForTarget;if(e){var u=n||r;l();var d=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e,f=document.elementFromPoint(d.clientX,d.clientY);s(),u&&!u.el.contains(f)&&(a(\"spill\"),this.onSpill({dragEl:i,putSortable:n}))}};function Ee(){}Ee.prototype={startIndex:null,dragStart:function(t){var e=t.oldDraggableIndex;this.startIndex=e},onSpill:function(t){var e=t.dragEl,n=t.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();var i=yt(this.sortable.el,this.startIndex,this.options);i?this.sortable.el.insertBefore(e,i):this.sortable.el.appendChild(e),this.sortable.animateAll(),n&&n.animateAll()},drop:Ue};$(Ee,{pluginName:\"revertOnSpill\"});function De(){}De.prototype={onSpill:function(t){var e=t.dragEl,n=t.putSortable,i=n||this.sortable;i.captureAnimationState(),e.parentNode&&e.parentNode.removeChild(e),i.animateAll()},drop:Ue};$(De,{pluginName:\"removeOnSpill\"});var U;function Pn(){function o(){this.defaults={swapClass:\"sortable-swap-highlight\"}}return o.prototype={dragStart:function(e){var n=e.dragEl;U=n},dragOverValid:function(e){var n=e.completed,i=e.target,r=e.onMove,a=e.activeSortable,l=e.changed,s=e.cancel;if(a.options.swap){var u=this.sortable.el,d=this.options;if(i&&i!==u){var f=U;r(i)!==!1?(I(i,d.swapClass,!0),U=i):U=null,f&&f!==U&&I(f,d.swapClass,!1)}l(),n(!0),s()}},drop:function(e){var n=e.activeSortable,i=e.putSortable,r=e.dragEl,a=i||this.sortable,l=this.options;U&&I(U,l.swapClass,!1),U&&(l.swap||i&&i.options.swap)&&r!==U&&(a.captureAnimationState(),a!==n&&n.captureAnimationState(),An(r,U),a.animateAll(),a!==n&&n.animateAll())},nulling:function(){U=null}},$(o,{pluginName:\"swap\",eventProperties:function(){return{swapItem:U}}})}function An(o,t){var e=o.parentNode,n=t.parentNode,i,r;!e||!n||e.isEqualNode(t)||n.isEqualNode(o)||(i=P(o),r=P(t),e.isEqualNode(n)&&i<r&&r++,e.insertBefore(t,e.children[i]),n.insertBefore(o,n.children[r]))}var m=[],K=[],Ct,V,Tt=!1,H=!1,mt=!1,C,Ot,Lt;function xn(){function o(t){for(var e in this)e.charAt(0)===\"_\"&&typeof this[e]==\"function\"&&(this[e]=this[e].bind(this));t.options.avoidImplicitDeselect||(t.options.supportPointer?y(document,\"pointerup\",this._deselectMultiDrag):(y(document,\"mouseup\",this._deselectMultiDrag),y(document,\"touchend\",this._deselectMultiDrag))),y(document,\"keydown\",this._checkKeyDown),y(document,\"keyup\",this._checkKeyUp),this.defaults={selectedClass:\"sortable-selected\",multiDragKey:null,avoidImplicitDeselect:!1,setData:function(i,r){var a=\"\";m.length&&V===t?m.forEach(function(l,s){a+=(s?\", \":\"\")+l.textContent}):a=r.textContent,i.setData(\"Text\",a)}}}return o.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal:function(e){var n=e.dragEl;C=n},delayEnded:function(){this.isMultiDrag=~m.indexOf(C)},setupClone:function(e){var n=e.sortable,i=e.cancel;if(this.isMultiDrag){for(var r=0;r<m.length;r++)K.push(we(m[r])),K[r].sortableIndex=m[r].sortableIndex,K[r].draggable=!1,K[r].style[\"will-change\"]=\"\",I(K[r],this.options.selectedClass,!1),m[r]===C&&I(K[r],this.options.chosenClass,!1);n._hideClone(),i()}},clone:function(e){var n=e.sortable,i=e.rootEl,r=e.dispatchSortableEvent,a=e.cancel;this.isMultiDrag&&(this.options.removeCloneOnHide||m.length&&V===n&&(Fe(!0,i),r(\"clone\"),a()))},showClone:function(e){var n=e.cloneNowShown,i=e.rootEl,r=e.cancel;this.isMultiDrag&&(Fe(!1,i),K.forEach(function(a){h(a,\"display\",\"\")}),n(),Lt=!1,r())},hideClone:function(e){var n=this,i=e.sortable,r=e.cloneNowHidden,a=e.cancel;this.isMultiDrag&&(K.forEach(function(l){h(l,\"display\",\"none\"),n.options.removeCloneOnHide&&l.parentNode&&l.parentNode.removeChild(l)}),r(),Lt=!0,a())},dragStartGlobal:function(e){var n=e.sortable;!this.isMultiDrag&&V&&V.multiDrag._deselectMultiDrag(),m.forEach(function(i){i.sortableIndex=P(i)}),m=m.sort(function(i,r){return i.sortableIndex-r.sortableIndex}),mt=!0},dragStarted:function(e){var n=this,i=e.sortable;if(this.isMultiDrag){if(this.options.sort&&(i.captureAnimationState(),this.options.animation)){m.forEach(function(a){a!==C&&h(a,\"position\",\"absolute\")});var r=T(C,!1,!0,!0);m.forEach(function(a){a!==C&&Ie(a,r)}),H=!0,Tt=!0}i.animateAll(function(){H=!1,Tt=!1,n.options.animation&&m.forEach(function(a){oe(a)}),n.options.sort&&Wt()})}},dragOver:function(e){var n=e.target,i=e.completed,r=e.cancel;H&&~m.indexOf(n)&&(i(!1),r())},revert:function(e){var n=e.fromSortable,i=e.rootEl,r=e.sortable,a=e.dragRect;m.length>1&&(m.forEach(function(l){r.addAnimationState({target:l,rect:H?T(l):a}),oe(l),l.fromRect=a,n.removeAnimationState(l)}),H=!1,In(!this.options.removeCloneOnHide,i))},dragOverCompleted:function(e){var n=e.sortable,i=e.isOwner,r=e.insertion,a=e.activeSortable,l=e.parentEl,s=e.putSortable,u=this.options;if(r){if(i&&a._hideClone(),Tt=!1,u.animation&&m.length>1&&(H||!i&&!a.options.sort&&!s)){var d=T(C,!1,!0,!0);m.forEach(function(p){p!==C&&(Ie(p,d),l.appendChild(p))}),H=!0}if(!i)if(H||Wt(),m.length>1){var f=Lt;a._showClone(n),a.options.animation&&!Lt&&f&&K.forEach(function(p){a.addAnimationState({target:p,rect:Ot}),p.fromRect=Ot,p.thisAnimationDuration=null})}else a._showClone(n)}},dragOverAnimationCapture:function(e){var n=e.dragRect,i=e.isOwner,r=e.activeSortable;if(m.forEach(function(l){l.thisAnimationDuration=null}),r.options.animation&&!i&&r.multiDrag.isMultiDrag){Ot=$({},n);var a=ht(C,!0);Ot.top-=a.f,Ot.left-=a.e}},dragOverAnimationComplete:function(){H&&(H=!1,Wt())},drop:function(e){var n=e.originalEvent,i=e.rootEl,r=e.parentEl,a=e.sortable,l=e.dispatchSortableEvent,s=e.oldIndex,u=e.putSortable,d=u||this.sortable;if(n){var f=this.options,p=r.children;if(!mt)if(f.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),I(C,f.selectedClass,!~m.indexOf(C)),~m.indexOf(C))m.splice(m.indexOf(C),1),Ct=null,At({sortable:a,rootEl:i,name:\"deselect\",targetEl:C,originalEvent:n});else{if(m.push(C),At({sortable:a,rootEl:i,name:\"select\",targetEl:C,originalEvent:n}),n.shiftKey&&Ct&&a.el.contains(Ct)){var D=P(Ct),w=P(C);~D&&~w&&D!==w&&(function(){var E,_;w>D?(_=D,E=w):(_=w,E=D+1);for(var M=f.filter;_<E;_++)if(!~m.indexOf(p[_])&&G(p[_],f.draggable,r,!1)){var J=M&&(typeof M==\"function\"?M.call(a,n,p[_],a):M.split(\",\").some(function(z){return G(p[_],z.trim(),r,!1)}));J||(I(p[_],f.selectedClass,!0),m.push(p[_]),At({sortable:a,rootEl:i,name:\"select\",targetEl:p[_],originalEvent:n}))}})()}else Ct=C;V=d}if(mt&&this.isMultiDrag){if(H=!1,(r[R].options.sort||r!==i)&&m.length>1){var S=T(C),X=P(C,\":not(.\"+this.options.selectedClass+\")\");if(!Tt&&f.animation&&(C.thisAnimationDuration=null),d.captureAnimationState(),!Tt&&(f.animation&&(C.fromRect=S,m.forEach(function(E){if(E.thisAnimationDuration=null,E!==C){var _=H?T(E):S;E.fromRect=_,d.addAnimationState({target:E,rect:_})}})),Wt(),m.forEach(function(E){p[X]?r.insertBefore(E,p[X]):r.appendChild(E),X++}),s===P(C))){var W=!1;m.forEach(function(E){if(E.sortableIndex!==P(E)){W=!0;return}}),W&&(l(\"update\"),l(\"sort\"))}m.forEach(function(E){oe(E)}),d.animateAll()}V=d}(i===r||u&&u.lastPutMode!==\"clone\")&&K.forEach(function(E){E.parentNode&&E.parentNode.removeChild(E)})}},nullingGlobal:function(){this.isMultiDrag=mt=!1,K.length=0},destroyGlobal:function(){this._deselectMultiDrag(),b(document,\"pointerup\",this._deselectMultiDrag),b(document,\"mouseup\",this._deselectMultiDrag),b(document,\"touchend\",this._deselectMultiDrag),b(document,\"keydown\",this._checkKeyDown),b(document,\"keyup\",this._checkKeyUp)},_deselectMultiDrag:function(e){if(!(typeof mt<\"u\"&&mt)&&V===this.sortable&&!(e&&G(e.target,this.options.draggable,this.sortable.el,!1))&&!(e&&e.button!==0))for(;m.length;){var n=m[0];I(n,this.options.selectedClass,!1),m.shift(),At({sortable:this.sortable,rootEl:this.sortable.el,name:\"deselect\",targetEl:n,originalEvent:e})}},_checkKeyDown:function(e){e.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(e){e.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},$(o,{pluginName:\"multiDrag\",utils:{select:function(e){var n=e.parentNode[R];!n||!n.options.multiDrag||~m.indexOf(e)||(V&&V!==n&&(V.multiDrag._deselectMultiDrag(),V=n),I(e,n.options.selectedClass,!0),m.push(e))},deselect:function(e){var n=e.parentNode[R],i=m.indexOf(e);!n||!n.options.multiDrag||!~i||(I(e,n.options.selectedClass,!1),m.splice(i,1))}},eventProperties:function(){var e=this,n=[],i=[];return m.forEach(function(r){n.push({multiDragElement:r,index:r.sortableIndex});var a;H&&r!==C?a=-1:H?a=P(r,\":not(.\"+e.options.selectedClass+\")\"):a=P(r),i.push({multiDragElement:r,index:a})}),{items:nn(m),clones:[].concat(K),oldIndicies:n,newIndicies:i}},optionListeners:{multiDragKey:function(e){return e=e.toLowerCase(),e===\"ctrl\"?e=\"Control\":e.length>1&&(e=e.charAt(0).toUpperCase()+e.substr(1)),e}}})}function In(o,t){m.forEach(function(e,n){var i=t.children[e.sortableIndex+(o?Number(n):0)];i?t.insertBefore(e,i):t.appendChild(e)})}function Fe(o,t){K.forEach(function(e,n){var i=t.children[e.sortableIndex+(o?Number(n):0)];i?t.insertBefore(e,i):t.appendChild(e)})}function Wt(){m.forEach(function(o){o!==C&&o.parentNode&&o.parentNode.removeChild(o)})}g.mount(new On);g.mount(De,Ee);var Mn=g;export{xn as MultiDrag,g as Sortable,Pn as Swap,Mn as default};\n/*! Bundled license information:\n\nsortablejs/modular/sortable.esm.js:\n  (**!\n   * Sortable 1.15.7\n   * @author\tRubaXa   <trash@rubaxa.org>\n   * @author\towenm    <owen23355@gmail.com>\n   * @license MIT\n   *)\n*/\n"
  },
  {
    "path": "modules/system/assets/vendor/syntaxhighlighter/LGPL-LICENSE",
    "content": "\t\t   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions. \n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version. \n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary."
  },
  {
    "path": "modules/system/assets/vendor/syntaxhighlighter/MIT-LICENSE",
    "content": "Copyright (c) 2003, 2004 Jim Weirich\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "modules/system/assets/vendor/syntaxhighlighter/scripts/shAutoloader.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\neval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c])}}return p}('(2(){1 h=5;h.I=2(){2 n(c,a){4(1 d=0;d<c.9;d++)i[c[d]]=a}2 o(c){1 a=r.H(\"J\"),d=3;a.K=c;a.M=\"L/t\";a.G=\"t\";a.u=a.v=2(){6(!d&&(!8.7||8.7==\"F\"||8.7==\"z\")){d=q;e[c]=q;a:{4(1 p y e)6(e[p]==3)B a;j&&5.C(k)}a.u=a.v=x;a.D.O(a)}};r.N.R(a)}1 f=Q,l=h.P(),i={},e={},j=3,k=x,b;5.T=2(c){k=c;j=q};4(b=0;b<f.9;b++){1 m=f[b].w?f[b]:f[b].S(/\\\\s+/),g=m.w();n(m,g)}4(b=0;b<l.9;b++)6(g=i[l[b].E.A]){e[g]=3;o(g)}}})();',56,56,'|var|function|false|for|SyntaxHighlighter|if|readyState|this|length|||||||||||||||||true|document||javascript|onload|onreadystatechange|pop|null|in|complete|brush|break|highlight|parentNode|params|loaded|language|createElement|autoloader|script|src|text|type|body|removeChild|findElements|arguments|appendChild|split|all'.split('|'),0,{}))\n"
  },
  {
    "path": "modules/system/assets/vendor/syntaxhighlighter/scripts/shBrushPhp.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n;(function()\n{\n\t// CommonJS\n\ttypeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;\n\n\tfunction Brush()\n\t{\n\t\tvar funcs\t=\t'abs acos acosh addcslashes addslashes ' +\n\t\t\t\t\t\t'array_change_key_case array_chunk array_combine array_count_values array_diff '+\n\t\t\t\t\t\t'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+\n\t\t\t\t\t\t'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+\n\t\t\t\t\t\t'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+\n\t\t\t\t\t\t'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+\n\t\t\t\t\t\t'array_push array_rand array_reduce array_reverse array_search array_shift '+\n\t\t\t\t\t\t'array_slice array_splice array_sum array_udiff array_udiff_assoc '+\n\t\t\t\t\t\t'array_udiff_uassoc array_uintersect array_uintersect_assoc '+\n\t\t\t\t\t\t'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+\n\t\t\t\t\t\t'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+\n\t\t\t\t\t\t'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+\n\t\t\t\t\t\t'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+\n\t\t\t\t\t\t'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+\n\t\t\t\t\t\t'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+\n\t\t\t\t\t\t'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+\n\t\t\t\t\t\t'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+\n\t\t\t\t\t\t'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+\n\t\t\t\t\t\t'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+\n\t\t\t\t\t\t'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+\n\t\t\t\t\t\t'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+\n\t\t\t\t\t\t'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+\n\t\t\t\t\t\t'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+\n\t\t\t\t\t\t'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+\n\t\t\t\t\t\t'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+\n\t\t\t\t\t\t'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+\n\t\t\t\t\t\t'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+\n\t\t\t\t\t\t'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+\n\t\t\t\t\t\t'parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir '+\n\t\t\t\t\t\t'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+\n\t\t\t\t\t\t'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+\n\t\t\t\t\t\t'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+\n\t\t\t\t\t\t'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+\n\t\t\t\t\t\t'strtoupper strtr strval substr substr_compare';\n\n\t\tvar keywords =\t'abstract and array as break case catch cfunction class clone const continue declare default die do ' +\n\t\t\t\t\t\t'else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach ' +\n\t\t\t\t\t\t'function include include_once global goto if implements interface instanceof namespace new ' +\n\t\t\t\t\t\t'old_function or private protected public return require require_once static switch ' +\n\t\t\t\t\t\t'throw try use var while xor ';\n\t\t\n\t\tvar constants\t= '__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: /\\$\\w+/g,\t\t\t\t\t\t\t\t\t\t\tcss: 'variable' },\t\t\t// variables\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' },\t\t\t// common functions\n\t\t\t{ regex: new RegExp(this.getKeywords(constants), 'gmi'),\tcss: 'constants' },\t\t\t// constants\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\t\t\t// keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['php'];\n\n\tSyntaxHighlighter.brushes.Php = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "modules/system/assets/vendor/syntaxhighlighter/scripts/shBrushPlain.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n;(function()\n{\n\t// CommonJS\n\ttypeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;\n\n\tfunction Brush()\n\t{\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['text', 'plain'];\n\n\tSyntaxHighlighter.brushes.Plain = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "modules/system/assets/vendor/syntaxhighlighter/scripts/shBrushXml.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n;(function()\n{\n\t// CommonJS\n\ttypeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;\n\n\tfunction Brush()\n\t{\n\t\tfunction process(match, regexInfo)\n\t\t{\n\t\t\tvar constructor = SyntaxHighlighter.Match,\n\t\t\t\tcode = match[0],\n\t\t\t\ttag = new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(?<name>[:\\\\w-\\\\.]+)', 'xg').exec(code),\n\t\t\t\tresult = []\n\t\t\t\t;\n\t\t\n\t\t\tif (match.attributes != null) \n\t\t\t{\n\t\t\t\tvar attributes,\n\t\t\t\t\tregex = new XRegExp('(?<name> [\\\\w:\\\\-\\\\.]+)' +\n\t\t\t\t\t\t\t\t\t\t'\\\\s*=\\\\s*' +\n\t\t\t\t\t\t\t\t\t\t'(?<value> \".*?\"|\\'.*?\\'|\\\\w+)',\n\t\t\t\t\t\t\t\t\t\t'xg');\n\n\t\t\t\twhile ((attributes = regex.exec(code)) != null) \n\t\t\t\t{\n\t\t\t\t\tresult.push(new constructor(attributes.name, match.index + attributes.index, 'color1'));\n\t\t\t\t\tresult.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tag != null)\n\t\t\t\tresult.push(\n\t\t\t\t\tnew constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')\n\t\t\t\t);\n\n\t\t\treturn result;\n\t\t}\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: new XRegExp('(\\\\&lt;|<)\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\](\\\\&gt;|>)', 'gm'),\t\t\tcss: 'color2' },\t// <![ ... [ ... ]]>\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t// <!-- ... -->\n\t\t\t{ regex: new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(\\\\w+)(?<attributes>.*?)[\\\\s\\\\/\\\\?]*(&gt;|>)', 'sg'), func: process }\n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['xml', 'xhtml', 'xslt', 'html'];\n\n\tSyntaxHighlighter.brushes.Xml = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "modules/system/assets/vendor/syntaxhighlighter/scripts/shCore.js",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\neval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c])}}return p}('K M;I(M)1S 2U(\"2a\\'t 4k M 4K 2g 3l 4G 4H\");(6(){6 r(f,e){I(!M.1R(f))1S 3m(\"3s 15 4R\");K a=f.1w;f=M(f.1m,t(f)+(e||\"\"));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?\"g\":\"\")+(f.4s?\"i\":\"\")+(f.4p?\"m\":\"\")+(f.4v?\"x\":\"\")+(f.3n?\"y\":\"\")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a<f.L;a++)I(f[a]===e)H a;H-1}M=6(f,e){K a=[],b=M.1B,c=0,d,h;I(M.1R(f)){I(e!==1d)1S 3m(\"2a\\'t 5r 5I 5F 5B 5C 15 5E 5p\");H r(f)}I(v)1S 2U(\"2a\\'t W 3l M 59 5m 5g 5x 5i\");e=e||\"\";O(d={2N:11,19:[],2K:6(g){H e.1i(g)>-1},3d:6(g){e+=g}};c<f.L;)I(h=B(f,c,b,d)){a.U(h.3k);c+=h.1C[0].L||1}Y I(h=n.X.W(z[b],f.1a(c))){a.U(h[0]);c+=h[0].L}Y{h=f.3a(c);I(h===\"[\")b=M.2I;Y I(h===\"]\")b=M.1B;a.U(h);c++}a=15(a.1K(\"\"),n.Q.W(e,w,\"\"));a.1w={1m:f,19:d.2N?d.19:N};H a};M.3v=\"1.5.0\";M.2I=1;M.1B=2;K C=/\\\\$(?:(\\\\d\\\\d?|[$&`\\'])|{([$\\\\w]+)})/g,w=/[^5h]+|([\\\\s\\\\S])(?=[\\\\s\\\\S]*\\\\1)/g,A=/^(?:[?*+]|{\\\\d+(?:,\\\\d*)?})\\\\??/,v=11,u=[],n={X:15.Z.X,1A:15.Z.1A,1C:1r.Z.1C,Q:1r.Z.Q,1e:1r.Z.1e},x=n.X.W(/()??/,\"\")[1]===1d,D=6(){K f=/^/g;n.1A.W(f,\"\");H!f.12}(),y=6(){K f=/x/g;n.Q.W(\"x\",f,\"\");H!f.12}(),E=15.Z.3n!==1d,z={};z[M.2I]=/^(?:\\\\\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\\\29-26-f]{2}|u[\\\\29-26-f]{4}|c[A-3o-z]|[\\\\s\\\\S]))/;z[M.1B]=/^(?:\\\\\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\\\d*|x[\\\\29-26-f]{2}|u[\\\\29-26-f]{4}|c[A-3o-z]|[\\\\s\\\\S])|\\\\(\\\\?[:=!]|[?*+]\\\\?|{\\\\d+(?:,\\\\d*)?}\\\\??)/;M.1h=6(f,e,a,b){u.U({2q:r(f,\"g\"+(E?\"y\":\"\")),2b:e,3r:a||M.1B,2p:b||N})};M.2n=6(f,e){K a=f+\"/\"+(e||\"\");H M.2n[a]||(M.2n[a]=M(f,e))};M.3c=6(f){H r(f,\"g\")};M.5l=6(f){H f.Q(/[-[\\\\]{}()*+?.,\\\\\\\\^$|#\\\\s]/g,\"\\\\\\\\$&\")};M.5e=6(f,e,a,b){e=r(e,\"g\"+(b&&E?\"y\":\"\"));e.12=a=a||0;f=e.X(f);H b?f&&f.P===a?f:N:f};M.3q=6(){M.1h=6(){1S 2U(\"2a\\'t 55 1h 54 3q\")}};M.1R=6(f){H 53.Z.1q.W(f)===\"[2m 15]\"};M.3p=6(f,e,a,b){O(K c=r(e,\"g\"),d=-1,h;h=c.X(f);){a.W(b,h,++d,f,c);c.12===h.P&&c.12++}I(e.1J)e.12=0};M.57=6(f,e){H 6 a(b,c){K d=e[c].1I?e[c]:{1I:e[c]},h=r(d.1I,\"g\"),g=[],i;O(i=0;i<b.L;i++)M.3p(b[i],h,6(k){g.U(d.3j?k[d.3j]||\"\":k[0])});H c===e.L-1||!g.L?g:a(g,c+1)}([f],0)};15.Z.1p=6(f,e){H J.X(e[0])};15.Z.W=6(f,e){H J.X(e)};15.Z.X=6(f){K e=n.X.1p(J,14),a;I(e){I(!x&&e.L>1&&p(e,\"\")>-1){a=15(J.1m,n.Q.W(t(J),\"g\",\"\"));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;b<e.L;b++)I(a=J.1w.19[b-1])e[a]=e[b];!D&&J.1J&&!e[0].L&&J.12>e.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()===\"3f\"&&e.1i(\"${\")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+=\"\";I(1j e===\"6\")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;d<b.L;d++)I(b[d])14[0][b[d]]=14[d+1]}I(a&&f.1J)f.12=14[14.L-2]+14[0].L;H e.1p(N,14)});Y{c=J+\"\";c=n.Q.W(c,f,6(){K d=14;H n.Q.W(e,C,6(h,g,i){I(g)5b(g){24\"$\":H\"$\";24\"&\":H d[0];24\"`\":H d[d.L-1].1a(0,d[d.L-2]);24\"\\'\":H d[d.L-1].1a(d[d.L-2]+d[0].L);5a:i=\"\";g=+g;I(!g)H h;O(;g>d.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||\"\":\"$\")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+\"\",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P<a.L&&3b.Z.U.1p(b,d.1a(1));h=d[0].L;c=f.12;I(b.L>=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,\"\")||h)b.U(\"\")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\\\(\\\\?#[^)]*\\\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?\"\":\"(?:)\"});M.1h(/\\\\((?!\\\\?)/,6(){J.19.U(N);H\"(\"});M.1h(/\\\\(\\\\?<([$\\\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H\"(\"});M.1h(/\\\\\\\\k<([\\\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?\"\\\\\\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?\"\":\"(?:)\"):f[0]});M.1h(/\\\\[\\\\^?]/,6(f){H f[0]===\"[]\"?\"\\\\\\\\b\\\\\\\\B\":\"[\\\\\\\\s\\\\\\\\S]\"});M.1h(/^\\\\(\\\\?([5A]+)\\\\)/,6(f){J.3d(f[1]);H\"\"});M.1h(/(?:\\\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?\"\":\"(?:)\"},M.1B,6(){H J.2K(\"x\")});M.1h(/\\\\./,6(){H\"[\\\\\\\\s\\\\\\\\S]\"},M.1B,6(){H J.2K(\"s\")})})();1j 2e!=\"1d\"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=\" \"+b)}6 t(a){H a.1i(\"3e\")==0?a:\"3e\"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={\"#\":\"1c\",\".\":\"1l\"}[b.1o(0,1)]||\"3h\",g,i;g=h!=\"3h\"?b.1o(1):b.5u();I((a[h]||\"\").1i(g)!=-1)H a;O(a=0;d&&a<d.L&&i==N;a++)i=p(d[a],b,c);H i}6 C(a,b){K c={},d;O(d 2g a)c[d]=a[d];O(d 2g b)c[d]=b[d];H c}6 w(a,b,c,d){6 h(g){g=g||1P.5y;I(!g.1F){g.1F=g.52;g.3N=6(){J.5w=11}}c.W(d||1P,g)}a.3g?a.3g(\"4U\"+b,h):a.4y(b,h,11)}6 A(a,b){K c=e.1Y.2j,d=N;I(c==N){c={};O(K h 2g e.1U){K g=e.1U[h];d=g.4x;I(d!=N){g.1V=h.4w();O(g=0;g<d.L;g++)c[d[g]]=h}}e.1Y.2j=c}d=e.1U[c[a]];d==N&&b!=11&&1P.1X(e.13.1x.1X+(e.13.1x.3E+a));H d}6 v(a,b){O(K c=a.1e(\"\\\\n\"),d=0;d<c.L;d++)c[d]=b(c[d],d);H c.1K(\"\\\\n\")}6 u(a,b){I(a==N||a.L==0||a==\"\\\\n\")H a;a=a.Q(/</g,\"&1y;\");a=a.Q(/ {2,}/g,6(c){O(K d=\"\",h=0;h<c.L-1;h++)d+=e.13.1W;H d+\" \"});I(b!=N)a=v(a,6(c){I(c.L==0)H\"\";K d=\"\";c=c.Q(/^(&2s;| )+/,6(h){d=h;H\"\"});I(c.L==0)H d;H d+\\'<17 1g=\"\\'+b+\\'\">\\'+c+\"</17>\"});H a}6 n(a,b){a.1e(\"\\\\n\");O(K c=\"\",d=0;d<50;d++)c+=\"                    \";H a=v(a,6(h){I(h.1i(\"\\\\t\")==-1)H h;O(K g=0;(g=h.1i(\"\\\\t\"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\\\s+|\\\\s+$/g,\"\")}6 D(a,b){I(a.P<b.P)H-1;Y I(a.P>b.P)H 1;Y I(a.L<b.L)H-1;Y I(a.L>b.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i==\"3f\")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d=\"\",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\\'<a 2h=\"\\'+c+\\'\">\\'+c+\"</a>\"+d})}6 z(){O(K a=1E.36(\"1k\"),b=[],c=0;c<a.L;c++)a[c].3s==\"20\"&&b.U(a[c]);H b}6 f(a){a=a.1F;K b=p(a,\".20\",R);a=p(a,\".3O\",R);K c=1E.4i(\"3t\");I(!(!a||!b||p(a,\"3t\"))){B(b.1c);r(b,\"1m\");O(K d=a.3G,h=[],g=0;g<d.L;g++)h.U(d[g].4z||d[g].4A);h=h.1K(\"\\\\r\");c.39(1E.4D(h));a.39(c);c.2C();c.4C();w(c,\"4u\",6(){c.2G.4E(c);b.1l=b.1l.Q(\"1m\",\"\")})}}I(1j 3F!=\"1d\"&&1j M==\"1d\")M=3F(\"M\").M;K e={2v:{\"1g-27\":\"\",\"2i-1s\":1,\"2z-1s-2t\":11,1M:N,1t:N,\"42-45\":R,\"43-22\":4,1u:R,16:R,\"3V-17\":R,2l:11,\"41-40\":R,2k:11,\"1z-1k\":11},13:{1W:\"&2s;\",2M:R,46:11,44:11,34:\"4n\",1x:{21:\"4o 1m\",2P:\"?\",1X:\"1v\\\\n\\\\n\",3E:\"4r\\'t 4t 1D O: \",4g:\"4m 4B\\'t 51 O 1z-1k 4F: \",37:\\'<!4T 1z 4S \"-//4V//3H 4W 1.0 4Z//4Y\" \"1Z://2y.3L.3K/4X/3I/3H/3I-4P.4J\"><1z 4I=\"1Z://2y.3L.3K/4L/5L\"><3J><4N 1Z-4M=\"5G-5M\" 6K=\"2O/1z; 6J=6I-8\" /><1t>6L 1v</1t></3J><3B 1L=\"25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;\"><T 1L=\"2O-3D:3C;3w-32:1.6z;\"><T 1L=\"25-22:6A-6E;\">1v</T><T 1L=\"25-22:.6C;3w-6B:6R;\"><T>3v 3.0.76 (72 73 3x)</T><T><a 2h=\"1Z://3u.2w/1v\" 1F=\"38\" 1L=\"2f:#3y\">1Z://3u.2w/1v</a></T><T>70 17 6U 71.</T><T>6T 6X-3x 6Y 6D.</T></T><T>6t 61 60 J 1k, 5Z <a 2h=\"6u://2y.62.2w/63-66/65?64=5X-5W&5P=5O\" 1L=\"2f:#3y\">5R</a> 5V <2R/>5U 5T 5S!</T></T></3B></1z>\\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\//2c,6m:/\\\\/\\\\/.*$/2c,6l:/#.*$/2c,6k:/\"([^\\\\\\\\\"\\\\n]|\\\\\\\\.)*\"/g,6o:/\\'([^\\\\\\\\\\'\\\\n]|\\\\\\\\.)*\\'/g,6p:1f M(\\'\"([^\\\\\\\\\\\\\\\\\"]|\\\\\\\\\\\\\\\\.)*\"\\',\"3z\"),6s:1f M(\"\\'([^\\\\\\\\\\\\\\\\\\']|\\\\\\\\\\\\\\\\.)*\\'\",\"3z\"),6q:/(&1y;|<)!--[\\\\s\\\\S]*?--(&1G;|>)/2c,3M:/\\\\w+:\\\\/\\\\/[\\\\w-.\\\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\\\?=?/g,1b:/\\\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\\\/\\\\s*1k\\\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\\'<T 1g=\"16\">\\',d=e.16.2x,h=d.2X,g=0;g<h.L;g++)c+=(d[h[g]].1H||b)(a,h[g]);c+=\"</T>\";H c},2o:6(a,b,c){H\\'<2W><a 2h=\"#\" 1g=\"6e 6h\\'+b+\" \"+b+\\'\">\\'+c+\"</a></2W>\"},2b:6(a){K b=a.1F,c=b.1l||\"\";b=B(p(b,\".20\",R).1c);K d=6(h){H(h=15(h+\"6f(\\\\\\\\w+)\").X(c))?h[1]:N}(\"6g\");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:[\"21\",\"2P\"],21:{1H:6(a){I(a.V(\"2l\")!=R)H\"\";K b=a.V(\"1t\");H e.16.2o(a,\"21\",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q(\"47\",\"\")}},2P:{2B:6(){K a=\"68=0\";a+=\", 18=\"+(31.30-33)/2+\", 32=\"+(31.2Z-2Y)/2+\", 30=33, 2Z=2Y\";a=a.Q(/^,/,\"\");a=1P.6Z(\"\",\"38\",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h<c.L;h++)d.U(c[h]);c=d}c=c;d=[];I(e.13.2M)c=c.1O(z());I(c.L===0)H d;O(h=0;h<c.L;h++){O(K g=c[h],i=a,k=c[h].1l,j=3W 0,l={},m=1f M(\"^\\\\\\\\[(?<2V>(.*?))\\\\\\\\]$\"),s=1f M(\"(?<27>[\\\\\\\\w-]+)\\\\\\\\s*:\\\\\\\\s*(?<1T>[\\\\\\\\w-%#]+|\\\\\\\\[.*?\\\\\\\\]|\\\\\".*?\\\\\"|\\'.*?\\')\\\\\\\\s*;?\",\"g\");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\\'\"]|[\\'\"]$/g,\"\");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\\\s*,\\\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g<c.L;g++){b=c[g];K i=b.1F,k=b.1n,j=k.1D,l;I(j!=N){I(k[\"1z-1k\"]==\"R\"||e.2v[\"1z-1k\"]==R){d=1f e.4l(j);j=\"4O\"}Y I(d=A(j))d=1f d;Y 6H;l=i.3X;I(h.2M){l=l;K m=x(l),s=11;I(m.1i(\"<![6G[\")==0){m=m.4h(9);s=R}K o=m.L;I(m.1i(\"]]\\\\>\")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||\"\")!=\"\")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||\"\")!=\"\")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,\"4k\",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;m<j.L;m++)j[m].P+=l}K c=A(a),d,h=1f e.1U.5Y,g=J,i=\"2F 1H 2Q\".1e(\" \");I(c!=N){d=1f c;O(K k=0;k<i.L;k++)(6(){K j=i[k];g[j]=6(){H h[j].1p(h,14)}})();d.28==N?1P.1X(e.13.1x.1X+(e.13.1x.4g+a)):h.2J.U({1I:d.28.17,2D:6(j){O(K l=j.17,m=[],s=d.2J,o=j.P+j.18.L,F=d.28,q,G=0;G<s.L;G++){q=y(l,s[G]);b(q,o);m=m.1O(q)}I(F.18!=N&&j.18!=N){q=y(j.18,F.18);b(q,j.P);m=m.1O(q)}I(F.1b!=N&&j.1b!=N){q=y(j.1b,F.1b);b(q,j.P+j[0].5Q(j.1b));m=m.1O(q)}O(j=0;j<m.L;j++)m[j].1V=c.1V;H m}})}};e.4j=6(){};e.4j.Z={V:6(a,b){K c=J.1n[a];c=c==N?b:c;K d={\"R\":R,\"11\":11}[c];H d==N?c:d},3Y:6(a){H 1E.4i(a)},4c:6(a,b){K c=[];I(a!=N)O(K d=0;d<a.L;d++)I(1j a[d]==\"2m\")c=c.1O(y(b,a[d]));H J.4e(c.6b(D))},4e:6(a){O(K b=0;b<a.L;b++)I(a[b]!==N)O(K c=a[b],d=c.P+c.L,h=b+1;h<a.L&&a[b]!==N;h++){K g=a[h];I(g!==N)I(g.P>d)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P<d)a[h]=N}H a},4d:6(a){K b=[],c=2u(J.V(\"2i-1s\"));v(a,6(d,h){b.U(h+c)});H b},3U:6(a){K b=J.V(\"1M\",[]);I(1j b!=\"2m\"&&b.U==N)b=[b];a:{a=a.1q();K c=3W 0;O(c=c=1Q.6c(c||0,0);c<b.L;c++)I(b[c]==a){b=c;1N a}b=-1}H b!=-1},2r:6(a,b,c){a=[\"1s\",\"6i\"+b,\"P\"+a,\"6r\"+(b%2==0?1:2).1q()];J.3U(b)&&a.U(\"67\");b==0&&a.U(\"1N\");H\\'<T 1g=\"\\'+a.1K(\" \")+\\'\">\\'+c+\"</T>\"},3Q:6(a,b){K c=\"\",d=a.1e(\"\\\\n\").L,h=2u(J.V(\"2i-1s\")),g=J.V(\"2z-1s-2t\");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i<d;i++){K k=b?b[i]:h+i,j;I(k==0)j=e.13.1W;Y{j=g;O(K l=k.1q();l.L<j;)l=\"0\"+l;j=l}a=j;c+=J.2r(i,k,a)}H c},49:6(a,b){a=x(a);K c=a.1e(\"\\\\n\");J.V(\"2z-1s-2t\");K d=2u(J.V(\"2i-1s\"));a=\"\";O(K h=J.V(\"1D\"),g=0;g<c.L;g++){K i=c[g],k=/^(&2s;|\\\\s)+/.X(i),j=N,l=b?b[g]:d+g;I(k!=N){j=k[0].1q();i=i.1o(j.L);j=j.Q(\" \",e.13.1W)}i=x(i);I(i.L==0)i=e.13.1W;a+=J.2r(g,l,(j!=N?\\'<17 1g=\"\\'+h+\\' 5N\">\\'+j+\"</17>\":\"\")+i)}H a},4f:6(a){H a?\"<4a>\"+a+\"</4a>\":\"\"},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+\" \":\"\"}O(K d=0,h=\"\",g=J.V(\"1D\",\"\"),i=0;i<b.L;i++){K k=b[i],j;I(!(k===N||k.L===0)){j=c(k);h+=u(a.1o(d,k.P-d),j+\"48\")+u(k.1T,j+k.23);d=k.P+k.L+(k.75||0)}}h+=u(a.1o(d),c()+\"48\");H h},1H:6(a){K b=\"\",c=[\"20\"],d;I(J.V(\"2k\")==R)J.1n.16=J.1n.1u=11;1l=\"20\";J.V(\"2l\")==R&&c.U(\"47\");I((1u=J.V(\"1u\"))==11)c.U(\"6S\");c.U(J.V(\"1g-27\"));c.U(J.V(\"1D\"));a=a.Q(/^[ ]*[\\\\n]+|[\\\\n]*[ ]*$/g,\"\").Q(/\\\\r/g,\" \");b=J.V(\"43-22\");I(J.V(\"42-45\")==R)a=n(a,b);Y{O(K h=\"\",g=0;g<b;g++)h+=\" \";a=a.Q(/\\\\t/g,h)}a=a;a:{b=a=a;h=/<2R\\\\s*\\\\/?>|&1y;2R\\\\s*\\\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,\"\\\\n\");I(e.13.44==R)b=b.Q(h,\"\");b=b.1e(\"\\\\n\");h=/^\\\\s*/;g=4Q;O(K i=0;i<b.L&&g>0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i<b.L;i++)b[i]=b[i].1o(g);a=b.1K(\"\\\\n\")}I(1u)d=J.4d(a);b=J.4c(J.2J,a);b=J.4b(a,b);b=J.49(b,d);I(J.V(\"41-40\"))b=E(b);1j 2H!=\"1d\"&&2H.3S&&2H.3S.1C(/5s/)&&c.U(\"5t\");H b=\\'<T 1c=\"\\'+t(J.1c)+\\'\" 1g=\"\\'+c.1K(\" \")+\\'\">\\'+(J.V(\"16\")?e.16.1H(J):\"\")+\\'<3Z 5z=\"0\" 5H=\"0\" 5J=\"0\">\\'+J.4f(J.V(\"1t\"))+\"<3T><3P>\"+(1u?\\'<2d 1g=\"1u\">\\'+J.3Q(a)+\"</2d>\":\"\")+\\'<2d 1g=\"17\"><T 1g=\"3O\">\\'+b+\"</T></2d></3P></3T></3Z></T>\"},2F:6(a){I(a===N)a=\"\";J.17=a;K b=J.3Y(\"T\");b.3X=J.1H(a);J.V(\"16\")&&w(p(b,\".16\"),\"5c\",e.16.2b);J.V(\"3V-17\")&&w(p(b,\".17\"),\"56\",f);H b},2Q:6(a){J.1c=\"\"+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V(\"2k\")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\\\s+|\\\\s+$/g,\"\").Q(/\\\\s+/g,\"|\");H\"\\\\\\\\b(?:\"+a+\")\\\\\\\\b\"},5f:6(a){J.28={18:{1I:a.18,23:\"1k\"},1b:{1I:a.1b,23:\"1k\"},17:1f M(\"(?<18>\"+a.18.1m+\")(?<17>.*?)(?<1b>\"+a.1b.1m+\")\",\"5o\")}}};H e}();1j 2e!=\"1d\"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{}))\n"
  },
  {
    "path": "modules/system/assets/vendor/syntaxhighlighter/styles/shCore.css",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n.syntaxhighlighter a,\n.syntaxhighlighter div,\n.syntaxhighlighter code,\n.syntaxhighlighter table,\n.syntaxhighlighter table td,\n.syntaxhighlighter table tr,\n.syntaxhighlighter table tbody,\n.syntaxhighlighter table thead,\n.syntaxhighlighter table caption,\n.syntaxhighlighter textarea {\n  -moz-border-radius: 0 0 0 0 !important;\n  -webkit-border-radius: 0 0 0 0 !important;\n  background: none !important;\n  border: 0 !important;\n  bottom: auto !important;\n  float: none !important;\n  height: auto !important;\n  left: auto !important;\n  line-height: 1.1em !important;\n  margin: 0 !important;\n  outline: 0 !important;\n  overflow: visible !important;\n  padding: 0 !important;\n  position: static !important;\n  right: auto !important;\n  text-align: left !important;\n  top: auto !important;\n  vertical-align: baseline !important;\n  width: auto !important;\n  box-sizing: content-box !important;\n  font-family: \"Consolas\", \"Bitstream Vera Sans Mono\", \"Courier New\", Courier, monospace !important;\n  font-weight: normal !important;\n  font-style: normal !important;\n  font-size: 1em !important;\n  min-height: inherit !important;\n  min-height: auto !important;\n}\n\n.syntaxhighlighter {\n  width: 100% !important;\n  margin: 1em 0 1em 0 !important;\n  position: relative !important;\n  overflow: auto !important;\n  font-size: 1em !important;\n}\n.syntaxhighlighter.source {\n  overflow: hidden !important;\n}\n.syntaxhighlighter .bold {\n  font-weight: bold !important;\n}\n.syntaxhighlighter .italic {\n  font-style: italic !important;\n}\n.syntaxhighlighter .line {\n  white-space: pre !important;\n}\n.syntaxhighlighter table {\n  width: 100% !important;\n}\n.syntaxhighlighter table caption {\n  text-align: left !important;\n  padding: .5em 0 0.5em 1em !important;\n}\n.syntaxhighlighter table td.code {\n  width: 100% !important;\n}\n.syntaxhighlighter table td.code .container {\n  position: relative !important;\n}\n.syntaxhighlighter table td.code .container textarea {\n  box-sizing: border-box !important;\n  position: absolute !important;\n  left: 0 !important;\n  top: 0 !important;\n  width: 100% !important;\n  height: 100% !important;\n  border: none !important;\n  background: white !important;\n  padding-left: 1em !important;\n  overflow: hidden !important;\n  white-space: pre !important;\n}\n.syntaxhighlighter table td.gutter .line {\n  text-align: right !important;\n  padding: 0 0.5em 0 1em !important;\n}\n.syntaxhighlighter table td.code .line {\n  padding: 0 1em !important;\n}\n.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {\n  padding-left: 0em !important;\n}\n.syntaxhighlighter.show {\n  display: block !important;\n}\n.syntaxhighlighter.collapsed table {\n  display: none !important;\n}\n.syntaxhighlighter.collapsed .toolbar {\n  padding: 0.1em 0.8em 0em 0.8em !important;\n  font-size: 1em !important;\n  position: static !important;\n  width: auto !important;\n  height: auto !important;\n}\n.syntaxhighlighter.collapsed .toolbar span {\n  display: inline !important;\n  margin-right: 1em !important;\n}\n.syntaxhighlighter.collapsed .toolbar span a {\n  padding: 0 !important;\n  display: none !important;\n}\n.syntaxhighlighter.collapsed .toolbar span a.expandSource {\n  display: inline !important;\n}\n.syntaxhighlighter .toolbar {\n  position: absolute !important;\n  right: 1px !important;\n  top: 1px !important;\n  width: 11px !important;\n  height: 11px !important;\n  font-size: 10px !important;\n  z-index: 10 !important;\n}\n.syntaxhighlighter .toolbar span.title {\n  display: inline !important;\n}\n.syntaxhighlighter .toolbar a {\n  display: block !important;\n  text-align: center !important;\n  text-decoration: none !important;\n  padding-top: 1px !important;\n}\n.syntaxhighlighter .toolbar a.expandSource {\n  display: none !important;\n}\n.syntaxhighlighter.ie {\n  font-size: .9em !important;\n  padding: 1px 0 1px 0 !important;\n}\n.syntaxhighlighter.ie .toolbar {\n  line-height: 8px !important;\n}\n.syntaxhighlighter.ie .toolbar a {\n  padding-top: 0px !important;\n}\n.syntaxhighlighter.printing .line.alt1 .content,\n.syntaxhighlighter.printing .line.alt2 .content,\n.syntaxhighlighter.printing .line.highlighted .number,\n.syntaxhighlighter.printing .line.highlighted.alt1 .content,\n.syntaxhighlighter.printing .line.highlighted.alt2 .content {\n  background: none !important;\n}\n.syntaxhighlighter.printing .line .number {\n  color: #bbbbbb !important;\n}\n.syntaxhighlighter.printing .line .content {\n  color: black !important;\n}\n.syntaxhighlighter.printing .toolbar {\n  display: none !important;\n}\n.syntaxhighlighter.printing a {\n  text-decoration: none !important;\n}\n.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {\n  color: black !important;\n}\n.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {\n  color: #008200 !important;\n}\n.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {\n  color: blue !important;\n}\n.syntaxhighlighter.printing .keyword {\n  color: #006699 !important;\n  font-weight: bold !important;\n}\n.syntaxhighlighter.printing .preprocessor {\n  color: gray !important;\n}\n.syntaxhighlighter.printing .variable {\n  color: #aa7700 !important;\n}\n.syntaxhighlighter.printing .value {\n  color: #009900 !important;\n}\n.syntaxhighlighter.printing .functions {\n  color: #ff1493 !important;\n}\n.syntaxhighlighter.printing .constants {\n  color: #0066cc !important;\n}\n.syntaxhighlighter.printing .script {\n  font-weight: bold !important;\n}\n.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {\n  color: gray !important;\n}\n.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {\n  color: #ff1493 !important;\n}\n.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {\n  color: red !important;\n}\n.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {\n  color: black !important;\n}\n"
  },
  {
    "path": "modules/system/assets/vendor/syntaxhighlighter/styles/shCoreDefault.css",
    "content": "/**\n * SyntaxHighlighter\n * http://alexgorbatchev.com/SyntaxHighlighter\n *\n * SyntaxHighlighter is donationware. If you are using it, please donate.\n * http://alexgorbatchev.com/SyntaxHighlighter/donate.html\n *\n * @version\n * 3.0.83 (July 02 2010)\n * \n * @copyright\n * Copyright (C) 2004-2010 Alex Gorbatchev.\n *\n * @license\n * Dual licensed under the MIT and GPL licenses.\n */\n.syntaxhighlighter a,\n.syntaxhighlighter div,\n.syntaxhighlighter code,\n.syntaxhighlighter table,\n.syntaxhighlighter table td,\n.syntaxhighlighter table tr,\n.syntaxhighlighter table tbody,\n.syntaxhighlighter table thead,\n.syntaxhighlighter table caption,\n.syntaxhighlighter textarea {\n  -moz-border-radius: 0 0 0 0 !important;\n  -webkit-border-radius: 0 0 0 0 !important;\n  background: none !important;\n  border: 0 !important;\n  bottom: auto !important;\n  float: none !important;\n  height: auto !important;\n  left: auto !important;\n  line-height: 1.1em !important;\n  margin: 0 !important;\n  outline: 0 !important;\n  overflow: visible !important;\n  padding: 0 !important;\n  position: static !important;\n  right: auto !important;\n  text-align: left !important;\n  top: auto !important;\n  vertical-align: baseline !important;\n  width: auto !important;\n  box-sizing: content-box !important;\n  font-family: \"Consolas\", \"Bitstream Vera Sans Mono\", \"Courier New\", Courier, monospace !important;\n  font-weight: normal !important;\n  font-style: normal !important;\n  font-size: 1em !important;\n  min-height: inherit !important;\n  min-height: auto !important;\n}\n\n.syntaxhighlighter {\n  width: 100% !important;\n  margin: 1em 0 1em 0 !important;\n  position: relative !important;\n  overflow: auto !important;\n  font-size: 1em !important;\n}\n.syntaxhighlighter.source {\n  overflow: hidden !important;\n}\n.syntaxhighlighter .bold {\n  font-weight: bold !important;\n}\n.syntaxhighlighter .italic {\n  font-style: italic !important;\n}\n.syntaxhighlighter .line {\n  white-space: pre !important;\n}\n.syntaxhighlighter table {\n  width: 100% !important;\n}\n.syntaxhighlighter table caption {\n  text-align: left !important;\n  padding: .5em 0 0.5em 1em !important;\n}\n.syntaxhighlighter table td.code {\n  width: 100% !important;\n}\n.syntaxhighlighter table td.code .container {\n  position: relative !important;\n}\n.syntaxhighlighter table td.code .container textarea {\n  box-sizing: border-box !important;\n  position: absolute !important;\n  left: 0 !important;\n  top: 0 !important;\n  width: 100% !important;\n  height: 100% !important;\n  border: none !important;\n  background: white !important;\n  padding-left: 1em !important;\n  overflow: hidden !important;\n  white-space: pre !important;\n}\n.syntaxhighlighter table td.gutter .line {\n  text-align: right !important;\n  padding: 0 0.5em 0 1em !important;\n}\n.syntaxhighlighter table td.code .line {\n  padding: 0 1em !important;\n}\n.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {\n  padding-left: 0em !important;\n}\n.syntaxhighlighter.show {\n  display: block !important;\n}\n.syntaxhighlighter.collapsed table {\n  display: none !important;\n}\n.syntaxhighlighter.collapsed .toolbar {\n  padding: 0.1em 0.8em 0em 0.8em !important;\n  font-size: 1em !important;\n  position: static !important;\n  width: auto !important;\n  height: auto !important;\n}\n.syntaxhighlighter.collapsed .toolbar span {\n  display: inline !important;\n  margin-right: 1em !important;\n}\n.syntaxhighlighter.collapsed .toolbar span a {\n  padding: 0 !important;\n  display: none !important;\n}\n.syntaxhighlighter.collapsed .toolbar span a.expandSource {\n  display: inline !important;\n}\n.syntaxhighlighter .toolbar {\n  position: absolute !important;\n  right: 1px !important;\n  top: 1px !important;\n  width: 11px !important;\n  height: 11px !important;\n  font-size: 10px !important;\n  z-index: 10 !important;\n}\n.syntaxhighlighter .toolbar span.title {\n  display: inline !important;\n}\n.syntaxhighlighter .toolbar a {\n  display: block !important;\n  text-align: center !important;\n  text-decoration: none !important;\n  padding-top: 1px !important;\n}\n.syntaxhighlighter .toolbar a.expandSource {\n  display: none !important;\n}\n.syntaxhighlighter.ie {\n  font-size: .9em !important;\n  padding: 1px 0 1px 0 !important;\n}\n.syntaxhighlighter.ie .toolbar {\n  line-height: 8px !important;\n}\n.syntaxhighlighter.ie .toolbar a {\n  padding-top: 0px !important;\n}\n.syntaxhighlighter.printing .line.alt1 .content,\n.syntaxhighlighter.printing .line.alt2 .content,\n.syntaxhighlighter.printing .line.highlighted .number,\n.syntaxhighlighter.printing .line.highlighted.alt1 .content,\n.syntaxhighlighter.printing .line.highlighted.alt2 .content {\n  background: none !important;\n}\n.syntaxhighlighter.printing .line .number {\n  color: #bbbbbb !important;\n}\n.syntaxhighlighter.printing .line .content {\n  color: black !important;\n}\n.syntaxhighlighter.printing .toolbar {\n  display: none !important;\n}\n.syntaxhighlighter.printing a {\n  text-decoration: none !important;\n}\n.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {\n  color: black !important;\n}\n.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {\n  color: #008200 !important;\n}\n.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {\n  color: blue !important;\n}\n.syntaxhighlighter.printing .keyword {\n  color: #006699 !important;\n  font-weight: bold !important;\n}\n.syntaxhighlighter.printing .preprocessor {\n  color: gray !important;\n}\n.syntaxhighlighter.printing .variable {\n  color: #aa7700 !important;\n}\n.syntaxhighlighter.printing .value {\n  color: #009900 !important;\n}\n.syntaxhighlighter.printing .functions {\n  color: #ff1493 !important;\n}\n.syntaxhighlighter.printing .constants {\n  color: #0066cc !important;\n}\n.syntaxhighlighter.printing .script {\n  font-weight: bold !important;\n}\n.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {\n  color: gray !important;\n}\n.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {\n  color: #ff1493 !important;\n}\n.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {\n  color: red !important;\n}\n.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {\n  color: black !important;\n}\n\n.syntaxhighlighter {\n  background-color: white !important;\n}\n.syntaxhighlighter .line.alt1 {\n  background-color: white !important;\n}\n.syntaxhighlighter .line.alt2 {\n  background-color: white !important;\n}\n.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {\n  background-color: #e0e0e0 !important;\n}\n.syntaxhighlighter .line.highlighted.number {\n  color: black !important;\n}\n.syntaxhighlighter table caption {\n  color: black !important;\n}\n.syntaxhighlighter .gutter {\n  color: #afafaf !important;\n}\n.syntaxhighlighter .gutter .line {\n  border-right: 3px solid #6ce26c !important;\n}\n.syntaxhighlighter .gutter .line.highlighted {\n  background-color: #6ce26c !important;\n  color: white !important;\n}\n.syntaxhighlighter.printing .line .content {\n  border: none !important;\n}\n.syntaxhighlighter.collapsed {\n  overflow: visible !important;\n}\n.syntaxhighlighter.collapsed .toolbar {\n  color: blue !important;\n  background: white !important;\n  border: 1px solid #6ce26c !important;\n}\n.syntaxhighlighter.collapsed .toolbar a {\n  color: blue !important;\n}\n.syntaxhighlighter.collapsed .toolbar a:hover {\n  color: red !important;\n}\n.syntaxhighlighter .toolbar {\n  color: white !important;\n  background: #6ce26c !important;\n  border: none !important;\n}\n.syntaxhighlighter .toolbar a {\n  color: white !important;\n}\n.syntaxhighlighter .toolbar a:hover {\n  color: black !important;\n}\n.syntaxhighlighter .plain, .syntaxhighlighter .plain a {\n  color: black !important;\n}\n.syntaxhighlighter .comments, .syntaxhighlighter .comments a {\n  color: #008200 !important;\n}\n.syntaxhighlighter .string, .syntaxhighlighter .string a {\n  color: blue !important;\n}\n.syntaxhighlighter .keyword {\n  color: #006699 !important;\n}\n.syntaxhighlighter .preprocessor {\n  color: gray !important;\n}\n.syntaxhighlighter .variable {\n  color: #aa7700 !important;\n}\n.syntaxhighlighter .value {\n  color: #009900 !important;\n}\n.syntaxhighlighter .functions {\n  color: #ff1493 !important;\n}\n.syntaxhighlighter .constants {\n  color: #0066cc !important;\n}\n.syntaxhighlighter .script {\n  font-weight: bold !important;\n  color: #006699 !important;\n  background-color: none !important;\n}\n.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {\n  color: gray !important;\n}\n.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {\n  color: #ff1493 !important;\n}\n.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {\n  color: red !important;\n}\n\n.syntaxhighlighter .keyword {\n  font-weight: bold !important;\n}\n"
  },
  {
    "path": "modules/system/assets/vendor/vue/vue.esm.js",
    "content": "function Ie(e){let t=Object.create(null);for(let n of e.split(\",\"))t[n]=1;return n=>n in t}var ne=Object.freeze({}),Bn=Object.freeze([]),Te=()=>{},Hn=()=>!1,on=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ti=e=>e.startsWith(\"onUpdate:\"),ee=Object.assign,Po=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},gh=Object.prototype.hasOwnProperty,ie=(e,t)=>gh.call(e,t),B=Array.isArray,yn=e=>ls(e)===\"[object Map]\",kn=e=>ls(e)===\"[object Set]\",Fl=e=>ls(e)===\"[object Date]\",yh=e=>ls(e)===\"[object RegExp]\",G=e=>typeof e==\"function\",Y=e=>typeof e==\"string\",Xe=e=>typeof e==\"symbol\",se=e=>e!==null&&typeof e==\"object\",sr=e=>(se(e)||G(e))&&G(e.then)&&G(e.catch),rc=Object.prototype.toString,ls=e=>rc.call(e),$o=e=>ls(e).slice(8,-1),ir=e=>ls(e)===\"[object Object]\",rr=e=>Y(e)&&e!==\"NaN\"&&e[0]!==\"-\"&&\"\"+parseInt(e,10)===e,Ut=Ie(\",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"),oc=Ie(\"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"),or=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},bh=/-\\w/g,le=or(e=>e.replace(bh,t=>t.slice(1).toUpperCase())),vh=/\\B([A-Z])/g,Fe=or(e=>e.replace(vh,\"-$1\").toLowerCase()),Ot=or(e=>e.charAt(0).toUpperCase()+e.slice(1)),xt=or(e=>e?`on${Ot(e)}`:\"\"),ke=(e,t)=>!Object.is(e,t),nn=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},zn=(e,t,n,s=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},lr=e=>{let t=parseFloat(e);return isNaN(t)?e:t},Ei=e=>{let t=Y(e)?Number(e):NaN;return isNaN(t)?e:t},Ll,Gs=()=>Ll||(Ll=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:typeof window<\"u\"?window:typeof global<\"u\"?global:{});function _h(e,t){return e+JSON.stringify(t,(n,s)=>typeof s==\"function\"?s.toString():s)}var Es={1:\"TEXT\",2:\"CLASS\",4:\"STYLE\",8:\"PROPS\",16:\"FULL_PROPS\",32:\"NEED_HYDRATION\",64:\"STABLE_FRAGMENT\",128:\"KEYED_FRAGMENT\",256:\"UNKEYED_FRAGMENT\",512:\"NEED_PATCH\",1024:\"DYNAMIC_SLOTS\",2048:\"DEV_ROOT_FRAGMENT\",[-1]:\"CACHED\",[-2]:\"BAIL\"},Sh={1:\"STABLE\",2:\"DYNAMIC\",3:\"FORWARDED\"},wh=\"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\",Th=Ie(wh),Vl=2;function Eh(e,t=0,n=e.length){if(t=Math.max(0,Math.min(t,e.length)),n=Math.max(0,Math.min(n,e.length)),t>n)return\"\";let s=e.split(/(\\r?\\n)/),i=s.filter((l,a)=>a%2===1);s=s.filter((l,a)=>a%2===0);let r=0,o=[];for(let l=0;l<s.length;l++)if(r+=s[l].length+(i[l]&&i[l].length||0),r>=t){for(let a=l-Vl;a<=l+Vl||n>r;a++){if(a<0||a>=s.length)continue;let u=a+1;o.push(`${u}${\" \".repeat(Math.max(3-String(u).length,0))}|  ${s[a]}`);let f=s[a].length,c=i[a]&&i[a].length||0;if(a===l){let d=t-(r-(f+c)),g=Math.max(1,n>r?f-d:n-t);o.push(\"   |  \"+\" \".repeat(d)+\"^\".repeat(g))}else if(a>l){if(n>r){let d=Math.max(Math.min(n-r,f),1);o.push(\"   |  \"+\"^\".repeat(d))}r+=f+c}}break}return o.join(`\n`)}function as(e){if(B(e)){let t={};for(let n=0;n<e.length;n++){let s=e[n],i=Y(s)?lc(s):as(s);if(i)for(let r in i)t[r]=i[r]}return t}else if(Y(e)||se(e))return e}var Ch=/;(?![^(]*\\))/g,xh=/:([^]+)/,Ah=/\\/\\*[^]*?\\*\\//g;function lc(e){let t={};return e.replace(Ah,\"\").split(Ch).forEach(n=>{if(n){let s=n.split(xh);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Nh(e){if(!e)return\"\";if(Y(e))return e;let t=\"\";for(let n in e){let s=e[n];if(Y(s)||typeof s==\"number\"){let i=n.startsWith(\"--\")?n:Fe(n);t+=`${i}:${s};`}}return t}function cs(e){let t=\"\";if(Y(e))t=e;else if(B(e))for(let n=0;n<e.length;n++){let s=cs(e[n]);s&&(t+=s+\" \")}else if(se(e))for(let n in e)e[n]&&(t+=n+\" \");return t.trim()}function Ih(e){if(!e)return null;let{class:t,style:n}=e;return t&&!Y(t)&&(e.class=cs(t)),n&&(e.style=as(n)),e}var Oh=\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\",kh=\"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\",Rh=\"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\",Mh=\"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\",ac=Ie(Oh),cc=Ie(kh),fc=Ie(Rh),Ph=Ie(Mh),uc=\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\",$h=Ie(uc),Hl=Ie(uc+\",async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected\");function Do(e){return!!e||e===\"\"}var Dh=Ie(\"accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap\"),Fh=Ie(\"xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan\");function Lh(e){if(e==null)return!1;let t=typeof e;return t===\"string\"||t===\"number\"||t===\"boolean\"}var Vh=/[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;function Hh(e,t){return e.replace(Vh,n=>`\\\\${n}`)}function Bh(e,t){if(e.length!==t.length)return!1;let n=!0;for(let s=0;n&&s<e.length;s++)n=qt(e[s],t[s]);return n}function qt(e,t){if(e===t)return!0;let n=Fl(e),s=Fl(t);if(n||s)return n&&s?e.getTime()===t.getTime():!1;if(n=Xe(e),s=Xe(t),n||s)return e===t;if(n=B(e),s=B(t),n||s)return n&&s?Bh(e,t):!1;if(n=se(e),s=se(t),n||s){if(!n||!s)return!1;let i=Object.keys(e).length,r=Object.keys(t).length;if(i!==r)return!1;for(let o in e){let l=e.hasOwnProperty(o),a=t.hasOwnProperty(o);if(l&&!a||!l&&a||!qt(e[o],t[o]))return!1}}return String(e)===String(t)}function ar(e,t){return e.findIndex(n=>qt(n,t))}var hc=e=>!!(e&&e.__v_isRef===!0),dc=e=>Y(e)?e:e==null?\"\":B(e)||se(e)&&(e.toString===rc||!G(e.toString))?hc(e)?dc(e.value):JSON.stringify(e,pc,2):String(e),pc=(e,t)=>hc(t)?pc(e,t.value):yn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],r)=>(n[Rr(s,r)+\" =>\"]=i,n),{})}:kn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Rr(n))}:Xe(t)?Rr(t):se(t)&&!B(t)&&!ir(t)?String(t):t,Rr=(e,t=\"\")=>{var n;return Xe(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};function mc(e){return e==null?\"initial\":typeof e==\"string\"?e===\"\"?\" \":e:((typeof e!=\"number\"||!Number.isFinite(e))&&console.warn(\"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",e),String(e))}function nt(e,...t){console.warn(`[Vue warn] ${e}`,...t)}var $e,Ms=class{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=$e,!t&&$e&&(this.index=($e.scopes||($e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].pause();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].resume();for(t=0,n=this.effects.length;t<n;t++)this.effects[t].resume()}}run(t){if(this._active){let n=$e;try{return $e=this,t()}finally{$e=n}}else nt(\"cannot run an inactive effect scope.\")}on(){++this._on===1&&(this.prevScope=$e,$e=this)}off(){this._on>0&&--this._on===0&&($e=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(this.effects.length=0,n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.cleanups.length=0,this.scopes){for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){let i=this.parent.scopes.pop();i&&i!==this&&(this.parent.scopes[this.index]=i,i.index=this.index)}this.parent=void 0}}};function Uh(e){return new Ms(e)}function gc(){return $e}function jh(e,t=!1){$e?$e.cleanups.push(e):t||nt(\"onScopeDispose() is called when there is no active effect scope to be associated with.\")}var ce,Mr=new WeakSet,Cn=class{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,$e&&$e.active&&$e.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Mr.has(this)&&(Mr.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||bc(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Bl(this),vc(this);let t=ce,n=gt;ce=this,gt=!0;try{return this.fn()}finally{ce!==this&&nt(\"Active effect was not restored correctly - this is likely a Vue internal bug.\"),_c(this),ce=t,gt=n,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)Vo(t);this.deps=this.depsTail=void 0,Bl(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Mr.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Gr(this)&&this.run()}get dirty(){return Gr(this)}},yc=0,Cs,xs;function bc(e,t=!1){if(e.flags|=8,t){e.next=xs,xs=e;return}e.next=Cs,Cs=e}function Fo(){yc++}function Lo(){if(--yc>0)return;if(xs){let t=xs;for(xs=void 0;t;){let n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Cs;){let t=Cs;for(Cs=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function vc(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function _c(e){let t,n=e.depsTail,s=n;for(;s;){let i=s.prevDep;s.version===-1?(s===n&&(n=i),Vo(s),Kh(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=i}e.deps=t,e.depsTail=n}function Gr(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Sc(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Sc(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ps)||(e.globalVersion=Ps,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Gr(e))))return;e.flags|=2;let t=e.dep,n=ce,s=gt;ce=e,gt=!0;try{vc(e);let i=e.fn(e._value);(t.version===0||ke(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{ce=n,gt=s,_c(e),e.flags&=-3}}function Vo(e,t=!1){let{dep:n,prevSub:s,nextSub:i}=e;if(s&&(s.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=s,e.nextSub=void 0),n.subsHead===e&&(n.subsHead=i),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let r=n.computed.deps;r;r=r.nextDep)Vo(r,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Kh(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}function Wh(e,t){e.effect instanceof Cn&&(e=e.effect.fn);let n=new Cn(e);t&&ee(n,t);try{n.run()}catch(i){throw n.stop(),i}let s=n.run.bind(n);return s.effect=n,s}function qh(e){e.effect.stop()}var gt=!0,wc=[];function bt(){wc.push(gt),gt=!1}function vt(){let e=wc.pop();gt=e===void 0?!0:e}function Bl(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let n=ce;ce=void 0;try{t()}finally{ce=n}}}var Ps=0,Jr=class{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},Yn=class{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0,this.subsHead=void 0}track(t){if(!ce||!gt||ce===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==ce)n=this.activeLink=new Jr(ce,this),ce.deps?(n.prevDep=ce.depsTail,ce.depsTail.nextDep=n,ce.depsTail=n):ce.deps=ce.depsTail=n,Tc(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){let s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=ce.depsTail,n.nextDep=void 0,ce.depsTail.nextDep=n,ce.depsTail=n,ce.deps===n&&(ce.deps=s)}return ce.onTrack&&ce.onTrack(ee({effect:ce},t)),n}trigger(t){this.version++,Ps++,this.notify(t)}notify(t){Fo();try{for(let n=this.subsHead;n;n=n.nextSub)n.sub.onTrigger&&!(n.sub.flags&8)&&n.sub.onTrigger(ee({effect:n.sub},t));for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Lo()}}};function Tc(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Tc(s)}let n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subsHead===void 0&&(e.dep.subsHead=e),e.dep.subs=e}}var Ci=new WeakMap,bn=Symbol(\"Object iterate\"),zr=Symbol(\"Map keys iterate\"),$s=Symbol(\"Array iterate\");function Ne(e,t,n){if(gt&&ce){let s=Ci.get(e);s||Ci.set(e,s=new Map);let i=s.get(n);i||(s.set(n,i=new Yn),i.map=s,i.key=n),i.track({target:e,type:t,key:n})}}function Nt(e,t,n,s,i,r){let o=Ci.get(e);if(!o){Ps++;return}let l=a=>{a&&a.trigger({target:e,type:t,key:n,newValue:s,oldValue:i,oldTarget:r})};if(Fo(),t===\"clear\")o.forEach(l);else{let a=B(e),u=a&&rr(n);if(a&&n===\"length\"){let f=Number(s);o.forEach((c,d)=>{(d===\"length\"||d===$s||!Xe(d)&&d>=f)&&l(c)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),u&&l(o.get($s)),t){case\"add\":a?u&&l(o.get(\"length\")):(l(o.get(bn)),yn(e)&&l(o.get(zr)));break;case\"delete\":a||(l(o.get(bn)),yn(e)&&l(o.get(zr)));break;case\"set\":yn(e)&&l(o.get(bn));break}}Lo()}function Gh(e,t){let n=Ci.get(e);return n&&n.get(t)}function Dn(e){let t=Q(e);return t===e?t:(Ne(t,\"iterate\",$s),Re(e)?t:t.map(_t))}function cr(e){return Ne(e=Q(e),\"iterate\",$s),e}function At(e,t){return lt(e)?Xn(jt(e)?_t(t):t):_t(t)}var Jh={__proto__:null,[Symbol.iterator](){return Pr(this,Symbol.iterator,e=>At(this,e))},concat(...e){return Dn(this).concat(...e.map(t=>B(t)?Dn(t):t))},entries(){return Pr(this,\"entries\",e=>(e[1]=At(this,e[1]),e))},every(e,t){return Mt(this,\"every\",e,t,void 0,arguments)},filter(e,t){return Mt(this,\"filter\",e,t,n=>n.map(s=>At(this,s)),arguments)},find(e,t){return Mt(this,\"find\",e,t,n=>At(this,n),arguments)},findIndex(e,t){return Mt(this,\"findIndex\",e,t,void 0,arguments)},findLast(e,t){return Mt(this,\"findLast\",e,t,n=>At(this,n),arguments)},findLastIndex(e,t){return Mt(this,\"findLastIndex\",e,t,void 0,arguments)},forEach(e,t){return Mt(this,\"forEach\",e,t,void 0,arguments)},includes(...e){return $r(this,\"includes\",e)},indexOf(...e){return $r(this,\"indexOf\",e)},join(e){return Dn(this).join(e)},lastIndexOf(...e){return $r(this,\"lastIndexOf\",e)},map(e,t){return Mt(this,\"map\",e,t,void 0,arguments)},pop(){return ps(this,\"pop\")},push(...e){return ps(this,\"push\",e)},reduce(e,...t){return Ul(this,\"reduce\",e,t)},reduceRight(e,...t){return Ul(this,\"reduceRight\",e,t)},shift(){return ps(this,\"shift\")},some(e,t){return Mt(this,\"some\",e,t,void 0,arguments)},splice(...e){return ps(this,\"splice\",e)},toReversed(){return Dn(this).toReversed()},toSorted(e){return Dn(this).toSorted(e)},toSpliced(...e){return Dn(this).toSpliced(...e)},unshift(...e){return ps(this,\"unshift\",e)},values(){return Pr(this,\"values\",e=>At(this,e))}};function Pr(e,t,n){let s=cr(e),i=s[t]();return s!==e&&!Re(e)&&(i._next=i.next,i.next=()=>{let r=i._next();return r.done||(r.value=n(r.value)),r}),i}var zh=Array.prototype;function Mt(e,t,n,s,i,r){let o=cr(e),l=o!==e&&!Re(e),a=o[t];if(a!==zh[t]){let c=a.apply(e,r);return l?_t(c):c}let u=n;o!==e&&(l?u=function(c,d){return n.call(this,At(e,c),d,e)}:n.length>2&&(u=function(c,d){return n.call(this,c,d,e)}));let f=a.call(o,u,s);return l&&i?i(f):f}function Ul(e,t,n,s){let i=cr(e),r=i!==e&&!Re(e),o=n,l=!1;i!==e&&(r?(l=s.length===0,o=function(u,f,c){return l&&(l=!1,u=At(e,u)),n.call(this,u,At(e,f),c,e)}):n.length>3&&(o=function(u,f,c){return n.call(this,u,f,c,e)}));let a=i[t](o,...s);return l?At(e,a):a}function $r(e,t,n){let s=Q(e);Ne(s,\"iterate\",$s);let i=s[t](...n);return(i===-1||i===!1)&&xn(n[0])?(n[0]=Q(n[0]),s[t](...n)):i}function ps(e,t,n=[]){bt(),Fo();let s=Q(e)[t].apply(e,n);return Lo(),vt(),s}var Yh=Ie(\"__proto__,__v_isRef,__isVue\"),Ec=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!==\"arguments\"&&e!==\"caller\").map(e=>Symbol[e]).filter(Xe));function Xh(e){Xe(e)||(e=String(e));let t=Q(this);return Ne(t,\"has\",e),t.hasOwnProperty(e)}var xi=class{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n===\"__v_skip\")return t.__v_skip;let i=this._isReadonly,r=this._isShallow;if(n===\"__v_isReactive\")return!i;if(n===\"__v_isReadonly\")return i;if(n===\"__v_isShallow\")return r;if(n===\"__v_raw\")return s===(i?r?Nc:Ac:r?xc:Cc).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;let o=B(t);if(!i){let a;if(o&&(a=Jh[n]))return a;if(n===\"hasOwnProperty\")return Xh}let l=Reflect.get(t,n,ye(t)?t:s);if((Xe(n)?Ec.has(n):Yh(n))||(i||Ne(t,\"get\",n),r))return l;if(ye(l)){let a=o&&rr(n)?l:l.value;return i&&se(a)?Ds(a):a}return se(l)?i?Ds(l):ur(l):l}},Ai=class extends xi{constructor(t=!1){super(!1,t)}set(t,n,s,i){let r=t[n],o=B(t)&&rr(n);if(!this._isShallow){let u=lt(r);if(!Re(s)&&!lt(s)&&(r=Q(r),s=Q(s)),!o&&ye(r)&&!ye(s))return u?(nt(`Set operation on key \"${String(n)}\" failed: target is readonly.`,t[n]),!0):(r.value=s,!0)}let l=o?Number(n)<t.length:ie(t,n),a=Reflect.set(t,n,s,ye(t)?t:i);return t===Q(i)&&(l?ke(s,r)&&Nt(t,\"set\",n,s,r):Nt(t,\"add\",n,s)),a}deleteProperty(t,n){let s=ie(t,n),i=t[n],r=Reflect.deleteProperty(t,n);return r&&s&&Nt(t,\"delete\",n,void 0,i),r}has(t,n){let s=Reflect.has(t,n);return(!Xe(n)||!Ec.has(n))&&Ne(t,\"has\",n),s}ownKeys(t){return Ne(t,\"iterate\",B(t)?\"length\":bn),Reflect.ownKeys(t)}},Ni=class extends xi{constructor(t=!1){super(!0,t)}set(t,n){return nt(`Set operation on key \"${String(n)}\" failed: target is readonly.`,t),!0}deleteProperty(t,n){return nt(`Delete operation on key \"${String(n)}\" failed: target is readonly.`,t),!0}},Zh=new Ai,Qh=new Ni,ed=new Ai(!0),td=new Ni(!0),Yr=e=>e,ii=e=>Reflect.getPrototypeOf(e);function nd(e,t,n){return function(...s){let i=this.__v_raw,r=Q(i),o=yn(r),l=e===\"entries\"||e===Symbol.iterator&&o,a=e===\"keys\"&&o,u=i[e](...s),f=n?Yr:t?Xn:_t;return!t&&Ne(r,\"iterate\",a?zr:bn),ee(Object.create(u),{next(){let{value:c,done:d}=u.next();return d?{value:c,done:d}:{value:l?[f(c[0]),f(c[1])]:f(c),done:d}}})}}function ri(e){return function(...t){{let n=t[0]?`on key \"${t[0]}\" `:\"\";nt(`${Ot(e)} operation ${n}failed: target is readonly.`,Q(this))}return e===\"delete\"?!1:e===\"clear\"?void 0:this}}function sd(e,t){let n={get(i){let r=this.__v_raw,o=Q(r),l=Q(i);e||(ke(i,l)&&Ne(o,\"get\",i),Ne(o,\"get\",l));let{has:a}=ii(o),u=t?Yr:e?Xn:_t;if(a.call(o,i))return u(r.get(i));if(a.call(o,l))return u(r.get(l));r!==o&&r.get(i)},get size(){let i=this.__v_raw;return!e&&Ne(Q(i),\"iterate\",bn),i.size},has(i){let r=this.__v_raw,o=Q(r),l=Q(i);return e||(ke(i,l)&&Ne(o,\"has\",i),Ne(o,\"has\",l)),i===l?r.has(i):r.has(i)||r.has(l)},forEach(i,r){let o=this,l=o.__v_raw,a=Q(l),u=t?Yr:e?Xn:_t;return!e&&Ne(a,\"iterate\",bn),l.forEach((f,c)=>i.call(r,u(f),u(c),o))}};return ee(n,e?{add:ri(\"add\"),set:ri(\"set\"),delete:ri(\"delete\"),clear:ri(\"clear\")}:{add(i){let r=Q(this),o=ii(r),l=Q(i),a=!t&&!Re(i)&&!lt(i)?l:i;return o.has.call(r,a)||ke(i,a)&&o.has.call(r,i)||ke(l,a)&&o.has.call(r,l)||(r.add(a),Nt(r,\"add\",a,a)),this},set(i,r){!t&&!Re(r)&&!lt(r)&&(r=Q(r));let o=Q(this),{has:l,get:a}=ii(o),u=l.call(o,i);u?jl(o,l,i):(i=Q(i),u=l.call(o,i));let f=a.call(o,i);return o.set(i,r),u?ke(r,f)&&Nt(o,\"set\",i,r,f):Nt(o,\"add\",i,r),this},delete(i){let r=Q(this),{has:o,get:l}=ii(r),a=o.call(r,i);a?jl(r,o,i):(i=Q(i),a=o.call(r,i));let u=l?l.call(r,i):void 0,f=r.delete(i);return a&&Nt(r,\"delete\",i,void 0,u),f},clear(){let i=Q(this),r=i.size!==0,o=yn(i)?new Map(i):new Set(i),l=i.clear();return r&&Nt(i,\"clear\",void 0,void 0,o),l}}),[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach(i=>{n[i]=nd(i,e,t)}),n}function fr(e,t){let n=sd(e,t);return(s,i,r)=>i===\"__v_isReactive\"?!e:i===\"__v_isReadonly\"?e:i===\"__v_raw\"?s:Reflect.get(ie(n,i)&&i in s?n:s,i,r)}var id={get:fr(!1,!1)},rd={get:fr(!1,!0)},od={get:fr(!0,!1)},ld={get:fr(!0,!0)};function jl(e,t,n){let s=Q(n);if(s!==n&&t.call(e,s)){let i=$o(e);nt(`Reactive ${i} contains both the raw and reactive versions of the same object${i===\"Map\"?\" as keys\":\"\"}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}var Cc=new WeakMap,xc=new WeakMap,Ac=new WeakMap,Nc=new WeakMap;function ad(e){switch(e){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}function cd(e){return e.__v_skip||!Object.isExtensible(e)?0:ad($o(e))}function ur(e){return lt(e)?e:hr(e,!1,Zh,id,Cc)}function Ic(e){return hr(e,!1,ed,rd,xc)}function Ds(e){return hr(e,!0,Qh,od,Ac)}function dt(e){return hr(e,!0,td,ld,Nc)}function hr(e,t,n,s,i){if(!se(e))return nt(`value cannot be made ${t?\"readonly\":\"reactive\"}: ${String(e)}`),e;if(e.__v_raw&&!(t&&e.__v_isReactive))return e;let r=cd(e);if(r===0)return e;let o=i.get(e);if(o)return o;let l=new Proxy(e,r===2?s:n);return i.set(e,l),l}function jt(e){return lt(e)?jt(e.__v_raw):!!(e&&e.__v_isReactive)}function lt(e){return!!(e&&e.__v_isReadonly)}function Re(e){return!!(e&&e.__v_isShallow)}function xn(e){return e?!!e.__v_raw:!1}function Q(e){let t=e&&e.__v_raw;return t?Q(t):e}function Oc(e){return!ie(e,\"__v_skip\")&&Object.isExtensible(e)&&zn(e,\"__v_skip\",!0),e}var _t=e=>se(e)?ur(e):e,Xn=e=>se(e)?Ds(e):e;function ye(e){return e?e.__v_isRef===!0:!1}function vn(e){return Rc(e,!1)}function kc(e){return Rc(e,!0)}function Rc(e,t){return ye(e)?e:new Xr(e,t)}var Xr=class{constructor(t,n){this.dep=new Yn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Q(t),this._value=n?t:_t(t),this.__v_isShallow=n}get value(){return this.dep.track({target:this,type:\"get\",key:\"value\"}),this._value}set value(t){let n=this._rawValue,s=this.__v_isShallow||Re(t)||lt(t);t=s?t:Q(t),ke(t,n)&&(this._rawValue=t,this._value=s?t:_t(t),this.dep.trigger({target:this,type:\"set\",key:\"value\",newValue:t,oldValue:n}))}};function fd(e){e.dep&&e.dep.trigger({target:e,type:\"set\",key:\"value\",newValue:e._value})}function Js(e){return ye(e)?e.value:e}function ud(e){return G(e)?e():Js(e)}var hd={get:(e,t,n)=>t===\"__v_raw\"?e:Js(Reflect.get(e,t,n)),set:(e,t,n,s)=>{let i=e[t];return ye(i)&&!ye(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Ho(e){return jt(e)?e:new Proxy(e,hd)}var Zr=class{constructor(t){this.__v_isRef=!0,this._value=void 0;let n=this.dep=new Yn,{get:s,set:i}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=i}get value(){return this._value=this._get()}set value(t){this._set(t)}};function Mc(e){return new Zr(e)}function dd(e){xn(e)||nt(\"toRefs() expects a reactive object but received a plain one.\");let t=B(e)?new Array(e.length):{};for(let n in e)t[n]=Pc(e,n);return t}var Qr=class{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._raw=Q(t);let i=!0,r=t;if(!B(t)||!rr(String(n)))do i=!xn(r)||Re(r);while(i&&(r=r.__v_raw));this._shallow=i}get value(){let t=this._object[this._key];return this._shallow&&(t=Js(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&ye(this._raw[this._key])){let n=this._object[this._key];if(ye(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return Gh(this._raw,this._key)}},eo=class{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}};function pd(e,t,n){return ye(e)?e:G(e)?new eo(e):se(e)&&arguments.length>1?Pc(e,t,n):vn(e)}function Pc(e,t,n){return new Qr(e,t,n)}var to=class{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Yn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ps-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&ce!==this)return bc(this,!0),!0}get value(){let t=this.dep.track({target:this,type:\"get\",key:\"value\"});return Sc(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter?this.setter(t):nt(\"Write operation failed: computed value is readonly\")}};function md(e,t,n=!1){let s,i;G(e)?s=e:(s=e.get,i=e.set);let r=new to(s,i,n);return t&&!n&&(r.onTrack=t.onTrack,r.onTrigger=t.onTrigger),r}var gd={GET:\"get\",HAS:\"has\",ITERATE:\"iterate\"},yd={SET:\"set\",ADD:\"add\",DELETE:\"delete\",CLEAR:\"clear\"},oi={},Ii=new WeakMap,Qt;function bd(){return Qt}function $c(e,t=!1,n=Qt){if(n){let s=Ii.get(n);s||Ii.set(n,s=[]),s.push(e)}else t||nt(\"onWatcherCleanup() was called when there was no active watcher to associate with.\")}function vd(e,t,n=ne){let{immediate:s,deep:i,once:r,scheduler:o,augmentJob:l,call:a}=n,u=y=>{(n.onWarn||nt)(\"Invalid watch source: \",y,\"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.\")},f=y=>i?y:Re(y)||i===!1||i===0?Ht(y,1):Ht(y),c,d,g,b,v=!1,P=!1;if(ye(e)?(d=()=>e.value,v=Re(e)):jt(e)?(d=()=>f(e),v=!0):B(e)?(P=!0,v=e.some(y=>jt(y)||Re(y)),d=()=>e.map(y=>{if(ye(y))return y.value;if(jt(y))return f(y);if(G(y))return a?a(y,2):y();u(y)})):G(e)?t?d=a?()=>a(e,2):e:d=()=>{if(g){bt();try{g()}finally{vt()}}let y=Qt;Qt=c;try{return a?a(e,3,[b]):e(b)}finally{Qt=y}}:(d=Te,u(e)),t&&i){let y=d,A=i===!0?1/0:i;d=()=>Ht(y(),A)}let k=gc(),T=()=>{c.stop(),k&&k.active&&Po(k.effects,c)};if(r&&t){let y=t;t=(...A)=>{y(...A),T()}}let p=P?new Array(e.length).fill(oi):oi,S=y=>{if(!(!(c.flags&1)||!c.dirty&&!y))if(t){let A=c.run();if(i||v||(P?A.some((V,N)=>ke(V,p[N])):ke(A,p))){g&&g();let V=Qt;Qt=c;try{let N=[A,p===oi?void 0:P&&p[0]===oi?[]:p,b];p=A,a?a(t,3,N):t(...N)}finally{Qt=V}}}else c.run()};return l&&l(S),c=new Cn(d),c.scheduler=o?()=>o(S,!1):S,b=y=>$c(y,!1,c),g=c.onStop=()=>{let y=Ii.get(c);if(y){if(a)a(y,4);else for(let A of y)A();Ii.delete(c)}},c.onTrack=n.onTrack,c.onTrigger=n.onTrigger,t?s?S(!0):p=c.run():o?o(S.bind(null,!0),!0):c.run(),T.pause=c.pause.bind(c),T.resume=c.resume.bind(c),T.stop=T,T}function Ht(e,t=1/0,n){if(t<=0||!se(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ye(e))Ht(e.value,t,n);else if(B(e))for(let s=0;s<e.length;s++)Ht(e[s],t,n);else if(kn(e)||yn(e))e.forEach(s=>{Ht(s,t,n)});else if(ir(e)){for(let s in e)Ht(e[s],t,n);for(let s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ht(e[s],t,n)}return e}var _n=[];function Un(e){_n.push(e)}function jn(){_n.pop()}var Dr=!1;function C(e,...t){if(Dr)return;Dr=!0,bt();let n=_n.length?_n[_n.length-1].component:null,s=n&&n.appContext.config.warnHandler,i=_d();if(s)Rn(s,n,11,[e+t.map(r=>{var o,l;return(l=(o=r.toString)==null?void 0:o.call(r))!=null?l:JSON.stringify(r)}).join(\"\"),n&&n.proxy,i.map(({vnode:r})=>`at <${Qs(n,r.type)}>`).join(`\n`),i]);else{let r=[`[Vue warn]: ${e}`,...t];i.length&&r.push(`\n`,...Sd(i)),console.warn(...r)}vt(),Dr=!1}function _d(){let e=_n[_n.length-1];if(!e)return[];let t=[];for(;e;){let n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});let s=e.component&&e.component.parent;e=s&&s.vnode}return t}function Sd(e){let t=[];return e.forEach((n,s)=>{t.push(...s===0?[]:[`\n`],...wd(n))}),t}function wd({vnode:e,recurseCount:t}){let n=t>0?`... (${t} recursive calls)`:\"\",s=e.component?e.component.parent==null:!1,i=` at <${Qs(e.component,e.type,s)}`,r=\">\"+n;return e.props?[i,...Td(e.props),r]:[i+r]}function Td(e){let t=[],n=Object.keys(e);return n.slice(0,3).forEach(s=>{t.push(...Dc(s,e[s]))}),n.length>3&&t.push(\" ...\"),t}function Dc(e,t,n){return Y(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t==\"number\"||typeof t==\"boolean\"||t==null?n?t:[`${e}=${t}`]:ye(t)?(t=Dc(e,Q(t.value),!0),n?t:[`${e}=Ref<`,t,\">\"]):G(t)?[`${e}=fn${t.name?`<${t.name}>`:\"\"}`]:(t=Q(t),n?t:[`${e}=`,t])}function Bo(e,t){e!==void 0&&(typeof e!=\"number\"?C(`${t} is not a valid number - got ${JSON.stringify(e)}.`):isNaN(e)&&C(`${t} is NaN - the duration expression might be incorrect.`))}var Ed={SETUP_FUNCTION:0,0:\"SETUP_FUNCTION\",RENDER_FUNCTION:1,1:\"RENDER_FUNCTION\",NATIVE_EVENT_HANDLER:5,5:\"NATIVE_EVENT_HANDLER\",COMPONENT_EVENT_HANDLER:6,6:\"COMPONENT_EVENT_HANDLER\",VNODE_HOOK:7,7:\"VNODE_HOOK\",DIRECTIVE_HOOK:8,8:\"DIRECTIVE_HOOK\",TRANSITION_HOOK:9,9:\"TRANSITION_HOOK\",APP_ERROR_HANDLER:10,10:\"APP_ERROR_HANDLER\",APP_WARN_HANDLER:11,11:\"APP_WARN_HANDLER\",FUNCTION_REF:12,12:\"FUNCTION_REF\",ASYNC_COMPONENT_LOADER:13,13:\"ASYNC_COMPONENT_LOADER\",SCHEDULER:14,14:\"SCHEDULER\",COMPONENT_UPDATE:15,15:\"COMPONENT_UPDATE\",APP_UNMOUNT_CLEANUP:16,16:\"APP_UNMOUNT_CLEANUP\"},dr={sp:\"serverPrefetch hook\",bc:\"beforeCreate hook\",c:\"created hook\",bm:\"beforeMount hook\",m:\"mounted hook\",bu:\"beforeUpdate hook\",u:\"updated\",bum:\"beforeUnmount hook\",um:\"unmounted hook\",a:\"activated hook\",da:\"deactivated hook\",ec:\"errorCaptured hook\",rtc:\"renderTracked hook\",rtg:\"renderTriggered hook\",0:\"setup function\",1:\"render function\",2:\"watcher getter\",3:\"watcher callback\",4:\"watcher cleanup function\",5:\"native event handler\",6:\"component event handler\",7:\"vnode hook\",8:\"directive hook\",9:\"transition hook\",10:\"app errorHandler\",11:\"app warnHandler\",12:\"ref function\",13:\"async component loader\",14:\"scheduler flush\",15:\"component update\",16:\"app unmount cleanup function\"};function Rn(e,t,n,s){try{return s?e(...s):e()}catch(i){ln(i,t,n)}}function at(e,t,n,s){if(G(e)){let i=Rn(e,t,n,s);return i&&sr(i)&&i.catch(r=>{ln(r,t,n)}),i}if(B(e)){let i=[];for(let r=0;r<e.length;r++)i.push(at(e[r],t,n,s));return i}else C(`Invalid value type passed to callWithAsyncErrorHandling(): ${typeof e}`)}function ln(e,t,n,s=!0){let i=t?t.vnode:null,{errorHandler:r,throwUnhandledErrorInProduction:o}=t&&t.appContext.config||ne;if(t){let l=t.parent,a=t.proxy,u=dr[n];for(;l;){let f=l.ec;if(f){for(let c=0;c<f.length;c++)if(f[c](e,a,u)===!1)return}l=l.parent}if(r){bt(),Rn(r,null,10,[e,a,u]),vt();return}}Cd(e,n,i,s,o)}function Cd(e,t,n,s=!0,i=!1){{let r=dr[t];if(n&&Un(n),C(`Unhandled error${r?` during execution of ${r}`:\"\"}`),n&&jn(),s)throw e;console.error(e)}}var je=[],Tt=-1,Kn=[],en=null,Vn=0,Fc=Promise.resolve(),Oi=null,xd=100;function pr(e){let t=Oi||Fc;return e?t.then(this?e.bind(this):e):t}function Ad(e){let t=Tt+1,n=je.length;for(;t<n;){let s=t+n>>>1,i=je[s],r=Fs(i);r<e||r===e&&i.flags&2?t=s+1:n=s}return t}function mr(e){if(!(e.flags&1)){let t=Fs(e),n=je[je.length-1];!n||!(e.flags&2)&&t>=Fs(n)?je.push(e):je.splice(Ad(t),0,e),e.flags|=1,Lc()}}function Lc(){Oi||(Oi=Fc.then(Vc))}function Zn(e){B(e)?Kn.push(...e):en&&e.id===-1?en.splice(Vn+1,0,e):e.flags&1||(Kn.push(e),e.flags|=1),Lc()}function Kl(e,t,n=Tt+1){for(t=t||new Map;n<je.length;n++){let s=je[n];if(s&&s.flags&2){if(e&&s.id!==e.uid||Uo(t,s))continue;je.splice(n,1),n--,s.flags&4&&(s.flags&=-2),s(),s.flags&4||(s.flags&=-2)}}}function ki(e){if(Kn.length){let t=[...new Set(Kn)].sort((n,s)=>Fs(n)-Fs(s));if(Kn.length=0,en){en.push(...t);return}for(en=t,e=e||new Map,Vn=0;Vn<en.length;Vn++){let n=en[Vn];Uo(e,n)||(n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2)}en=null,Vn=0}}var Fs=e=>e.id==null?e.flags&2?-1:1/0:e.id;function Vc(e){e=e||new Map;let t=n=>Uo(e,n);try{for(Tt=0;Tt<je.length;Tt++){let n=je[Tt];if(n&&!(n.flags&8)){if(t(n))continue;n.flags&4&&(n.flags&=-2),Rn(n,n.i,n.i?15:14),n.flags&4||(n.flags&=-2)}}}finally{for(;Tt<je.length;Tt++){let n=je[Tt];n&&(n.flags&=-2)}Tt=-1,je.length=0,ki(e),Oi=null,(je.length||Kn.length)&&Vc(e)}}function Uo(e,t){let n=e.get(t)||0;if(n>xd){let s=t.i,i=s&&es(s.type);return ln(`Maximum recursive updates exceeded${i?` in component <${i}>`:\"\"}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,null,10),!0}return e.set(t,n+1),!1}var pt=!1,pi=new Map;Gs().__VUE_HMR_RUNTIME__={createRecord:Fr(Hc),rerender:Fr(Od),reload:Fr(kd)};var An=new Map;function Nd(e){let t=e.type.__hmrId,n=An.get(t);n||(Hc(t,e.type),n=An.get(t)),n.instances.add(e)}function Id(e){An.get(e.type.__hmrId).instances.delete(e)}function Hc(e,t){return An.has(e)?!1:(An.set(e,{initialDef:Ri(t),instances:new Set}),!0)}function Ri(e){return Jf(e)?e.__vccOpts:e}function Od(e,t){let n=An.get(e);n&&(n.initialDef.render=t,[...n.instances].forEach(s=>{t&&(s.render=t,Ri(s.type).render=t),s.renderCache=[],pt=!0,s.job.flags&8||s.update(),pt=!1}))}function kd(e,t){let n=An.get(e);if(!n)return;t=Ri(t),Wl(n.initialDef,t);let s=[...n.instances];for(let i=0;i<s.length;i++){let r=s[i],o=Ri(r.type),l=pi.get(o);l||(o!==n.initialDef&&Wl(o,t),pi.set(o,l=new Set)),l.add(r),r.appContext.propsCache.delete(r.type),r.appContext.emitsCache.delete(r.type),r.appContext.optionsCache.delete(r.type),r.ceReload?(l.add(r),r.ceReload(t.styles),l.delete(r)):r.parent?mr(()=>{r.job.flags&8||(pt=!0,r.parent.update(),pt=!1,l.delete(r))}):r.appContext.reload?r.appContext.reload():typeof window<\"u\"?window.location.reload():console.warn(\"[HMR] Root or manually mounted instance modified. Full reload required.\"),r.root.ce&&r!==r.root&&r.root.ce._removeChildStyle(o)}Zn(()=>{pi.clear()})}function Wl(e,t){ee(e,t);for(let n in e)n!==\"__file\"&&!(n in t)&&delete e[n]}function Fr(e){return(t,n)=>{try{return e(t,n)}catch(s){console.error(s),console.warn(\"[HMR] Something went wrong during Vue component hot-reload. Full reload required.\")}}}var ut,_s=[],no=!1;function zs(e,...t){ut?ut.emit(e,...t):no||_s.push({event:e,args:t})}function jo(e,t){var n,s;ut=e,ut?(ut.enabled=!0,_s.forEach(({event:i,args:r})=>ut.emit(i,...r)),_s=[]):typeof window<\"u\"&&window.HTMLElement&&!((s=(n=window.navigator)==null?void 0:n.userAgent)!=null&&s.includes(\"jsdom\"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(r=>{jo(r,t)}),setTimeout(()=>{ut||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,no=!0,_s=[])},3e3)):(no=!0,_s=[])}function Rd(e,t){zs(\"app:init\",e,t,{Fragment:Ce,Text:It,Comment:me,Static:sn})}function Md(e){zs(\"app:unmount\",e)}var so=Ko(\"component:added\"),Bc=Ko(\"component:updated\"),Pd=Ko(\"component:removed\"),$d=e=>{ut&&typeof ut.cleanupBuffer==\"function\"&&!ut.cleanupBuffer(e)&&Pd(e)};function Ko(e){return t=>{zs(e,t.appContext.app,t.uid,t.parent?t.parent.uid:void 0,t)}}var Dd=Uc(\"perf:start\"),Fd=Uc(\"perf:end\");function Uc(e){return(t,n,s)=>{zs(e,t.appContext.app,t.uid,t,n,s)}}function Ld(e,t,n){zs(\"component:emit\",e.appContext.app,e,t,n)}var Ee=null,gr=null;function Ls(e){let t=Ee;return Ee=e,gr=e&&e.type.__scopeId||null,t}function Vd(e){gr=e}function Hd(){gr=null}var Bd=e=>Wo;function Wo(e,t=Ee,n){if(!t||e._n)return e;let s=(...i)=>{s._d&&Us(-1);let r=Ls(t),o;try{o=e(...i)}finally{Ls(r),s._d&&Us(1)}return Bc(t),o};return s._n=!0,s._c=!0,s._d=!0,s}function jc(e){oc(e)&&C(\"Do not use built-in directive ids as custom directive id: \"+e)}function Ud(e,t){if(Ee===null)return C(\"withDirectives can only be used inside render functions.\"),e;let n=Zs(Ee),s=e.dirs||(e.dirs=[]);for(let i=0;i<t.length;i++){let[r,o,l,a=ne]=t[i];r&&(G(r)&&(r={mounted:r,updated:r}),r.deep&&Ht(o),s.push({dir:r,instance:n,value:o,oldValue:void 0,arg:l,modifiers:a}))}return e}function Et(e,t,n,s){let i=e.dirs,r=t&&t.dirs;for(let o=0;o<i.length;o++){let l=i[o];r&&(l.oldValue=r[o].value);let a=l.dir[s];a&&(bt(),at(a,n,8,[e.el,l,e,t]),vt())}}function Kc(e,t){if((!we||we.isMounted)&&C(\"provide() can only be used inside setup().\"),we){let n=we.provides,s=we.parent&&we.parent.provides;s===n&&(n=we.provides=Object.create(s)),n[e]=t}}function As(e,t,n=!1){let s=He();if(s||Tn){let i=Tn?Tn._context.provides:s?s.parent==null||s.ce?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(i&&e in i)return i[e];if(arguments.length>1)return n&&G(t)?t.call(s&&s.proxy):t;C(`injection \"${String(e)}\" not found.`)}else C(\"inject() can only be used inside setup() or functional components.\")}function jd(){return!!(He()||Tn)}var Wc=Symbol.for(\"v-scx\"),qc=()=>{{let e=As(Wc);return e||C(\"Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.\"),e}};function Kd(e,t){return Ys(e,null,t)}function Wd(e,t){return Ys(e,null,ee({},t,{flush:\"post\"}))}function Gc(e,t){return Ys(e,null,ee({},t,{flush:\"sync\"}))}function Wn(e,t,n){return G(t)||C(\"`watch(fn, options?)` signature has been moved to a separate API. Use `watchEffect(fn, options?)` instead. `watch` now only supports `watch(source, cb, options?) signature.\"),Ys(e,t,n)}function Ys(e,t,n=ne){let{immediate:s,deep:i,flush:r,once:o}=n;t||(s!==void 0&&C('watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.'),i!==void 0&&C('watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.'),o!==void 0&&C('watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.'));let l=ee({},n);l.onWarn=C;let a=t&&s||!t&&r!==\"post\",u;if(In){if(r===\"sync\"){let g=qc();u=g.__watcherHandles||(g.__watcherHandles=[])}else if(!a){let g=()=>{};return g.stop=Te,g.resume=Te,g.pause=Te,g}}let f=we;l.call=(g,b,v)=>at(g,f,b,v);let c=!1;r===\"post\"?l.scheduler=g=>{Se(g,f&&f.suspense)}:r!==\"sync\"&&(c=!0,l.scheduler=(g,b)=>{b?g():mr(g)}),l.augmentJob=g=>{t&&(g.flags|=4),c&&(g.flags|=2,f&&(g.id=f.uid,g.i=f))};let d=vd(e,t,l);return In&&(u?u.push(d):a&&d()),d}function qd(e,t,n){let s=this.proxy,i=Y(e)?e.includes(\".\")?Jc(s,e):()=>s[e]:e.bind(s,s),r;G(t)?r=t:(r=t.handler,n=t);let o=us(this),l=Ys(i,r.bind(s),n);return o(),l}function Jc(e,t){let n=t.split(\".\");return()=>{let s=e;for(let i=0;i<n.length&&s;i++)s=s[n[i]];return s}}var zc=Symbol(\"_vte\"),Yc=e=>e.__isTeleport,Sn=e=>e&&(e.disabled||e.disabled===\"\"),ql=e=>e&&(e.defer||e.defer===\"\"),Gl=e=>typeof SVGElement<\"u\"&&e instanceof SVGElement,Jl=e=>typeof MathMLElement==\"function\"&&e instanceof MathMLElement,io=(e,t)=>{let n=e&&e.to;if(Y(n))if(t){let s=t(n);return!s&&!Sn(e)&&C(`Failed to locate Teleport target with selector \"${n}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`),s}else return C(\"Current renderer does not support string target for Teleports. (missing querySelector renderer option)\"),null;else return!n&&!Sn(e)&&C(`Invalid Teleport target: ${n}`),n},Xc={name:\"Teleport\",__isTeleport:!0,process(e,t,n,s,i,r,o,l,a,u){let{mc:f,pc:c,pbc:d,o:{insert:g,querySelector:b,createText:v,createComment:P}}=u,k=Sn(t.props),{shapeFlag:T,children:p,dynamicChildren:S}=t;if(pt&&(a=!1,S=null),e==null){let y=t.el=P(\"teleport start\"),A=t.anchor=P(\"teleport end\");g(y,n,s),g(A,n,s);let V=(_,x)=>{T&16&&f(p,_,x,i,r,o,l,a)},N=()=>{let _=t.target=io(t.props,b),x=ro(_,t,v,g);_?(o!==\"svg\"&&Gl(_)?o=\"svg\":o!==\"mathml\"&&Jl(_)&&(o=\"mathml\"),i&&i.isCE&&(i.ce._teleportTargets||(i.ce._teleportTargets=new Set)).add(_),k||(V(_,x),mi(t,!1))):k||C(\"Invalid Teleport target on mount:\",_,`(${typeof _})`)};k&&(V(n,A),mi(t,!0)),ql(t.props)?(t.el.__isMounted=!1,Se(()=>{N(),delete t.el.__isMounted},r)):N()}else{if(ql(t.props)&&e.el.__isMounted===!1){Se(()=>{Xc.process(e,t,n,s,i,r,o,l,a,u)},r);return}t.el=e.el,t.targetStart=e.targetStart;let y=t.anchor=e.anchor,A=t.target=e.target,V=t.targetAnchor=e.targetAnchor,N=Sn(e.props),_=N?n:A,x=N?y:V;if(o===\"svg\"||Gl(A)?o=\"svg\":(o===\"mathml\"||Jl(A))&&(o=\"mathml\"),S?(d(e.dynamicChildren,S,_,i,r,o,l),Li(e,t,!1)):a||c(e,t,_,x,i,r,o,l,!1),k)N?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):li(t,n,y,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){let $=t.target=io(t.props,b);$?li(t,$,null,u,0):C(\"Invalid Teleport target on update:\",A,`(${typeof A})`)}else N&&li(t,A,V,u,1);mi(t,k)}},remove(e,t,n,{um:s,o:{remove:i}},r){let{shapeFlag:o,children:l,anchor:a,targetStart:u,targetAnchor:f,target:c,props:d}=e;if(c&&(i(u),i(f)),r&&i(a),o&16){let g=r||!Sn(d);for(let b=0;b<l.length;b++){let v=l[b];s(v,t,n,g,!!v.dynamicChildren)}}},move:li,hydrate:Gd};function li(e,t,n,{o:{insert:s},m:i},r=2){r===0&&s(e.targetAnchor,t,n);let{el:o,anchor:l,shapeFlag:a,children:u,props:f}=e,c=r===2;if(c&&s(o,t,n),(!c||Sn(f))&&a&16)for(let d=0;d<u.length;d++)i(u[d],t,n,2);c&&s(l,t,n)}function Gd(e,t,n,s,i,r,{o:{nextSibling:o,parentNode:l,querySelector:a,insert:u,createText:f}},c){function d(P,k){let T=k;for(;T;){if(T&&T.nodeType===8){if(T.data===\"teleport start anchor\")t.targetStart=T;else if(T.data===\"teleport anchor\"){t.targetAnchor=T,P._lpa=t.targetAnchor&&o(t.targetAnchor);break}}T=o(T)}}function g(P,k){k.anchor=c(o(P),k,l(P),n,s,i,r)}let b=t.target=io(t.props,a),v=Sn(t.props);if(b){let P=b._lpa||b.firstChild;t.shapeFlag&16&&(v?(g(e,t),d(b,P),t.targetAnchor||ro(b,t,f,u,l(e)===b?e:null)):(t.anchor=o(e),d(b,P),t.targetAnchor||ro(b,t,f,u),c(P&&o(P),t,b,n,s,i,r))),mi(t,v)}else v&&t.shapeFlag&16&&(g(e,t),t.targetStart=e,t.targetAnchor=o(e));return t.anchor&&o(t.anchor)}var Jd=Xc;function mi(e,t){let n=e.ctx;if(n&&n.ut){let s,i;for(t?(s=e.el,i=e.anchor):(s=e.targetStart,i=e.targetAnchor);s&&s!==i;)s.nodeType===1&&s.setAttribute(\"data-v-owner\",n.uid),s=s.nextSibling;n.ut()}}function ro(e,t,n,s,i=null){let r=t.targetStart=n(\"\"),o=t.targetAnchor=n(\"\");return r[zc]=o,e&&(s(r,e,i),s(o,e,i)),o}var Ct=Symbol(\"_leaveCb\"),ms=Symbol(\"_enterCb\");function qo(){let e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Xs(()=>{e.isMounted=!0}),_r(()=>{e.isUnmounting=!0}),e}var it=[Function,Array],Go={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:it,onEnter:it,onAfterEnter:it,onEnterCancelled:it,onBeforeLeave:it,onLeave:it,onAfterLeave:it,onLeaveCancelled:it,onBeforeAppear:it,onAppear:it,onAfterAppear:it,onAppearCancelled:it},Zc=e=>{let t=e.subTree;return t.component?Zc(t.component):t},zd={name:\"BaseTransition\",props:Go,setup(e,{slots:t}){let n=He(),s=qo();return()=>{let i=t.default&&yr(t.default(),!0);if(!i||!i.length)return;let r=Qc(i),o=Q(e),{mode:l}=o;if(l&&l!==\"in-out\"&&l!==\"out-in\"&&l!==\"default\"&&C(`invalid <transition> mode: ${l}`),s.isLeaving)return Lr(r);let a=zl(r);if(!a)return Lr(r);let u=Qn(a,o,s,n,c=>u=c);a.type!==me&&Gt(a,u);let f=n.subTree&&zl(n.subTree);if(f&&f.type!==me&&!ht(f,a)&&Zc(n).type!==me){let c=Qn(f,o,s,n);if(Gt(f,c),l===\"out-in\"&&a.type!==me)return s.isLeaving=!0,c.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete c.afterLeave,f=void 0},Lr(r);l===\"in-out\"&&a.type!==me?c.delayLeave=(d,g,b)=>{let v=tf(s,f);v[String(f.key)]=f,d[Ct]=()=>{g(),d[Ct]=void 0,delete u.delayedLeave,f=void 0},u.delayedLeave=()=>{b(),delete u.delayedLeave,f=void 0}}:f=void 0}else f&&(f=void 0);return r}}};function Qc(e){let t=e[0];if(e.length>1){let n=!1;for(let s of e)if(s.type!==me){if(n){C(\"<transition> can only be used on a single element or component. Use <transition-group> for lists.\");break}t=s,n=!0}}return t}var ef=zd;function tf(e,t){let{leavingVNodes:n}=e,s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Qn(e,t,n,s,i){let{appear:r,mode:o,persisted:l=!1,onBeforeEnter:a,onEnter:u,onAfterEnter:f,onEnterCancelled:c,onBeforeLeave:d,onLeave:g,onAfterLeave:b,onLeaveCancelled:v,onBeforeAppear:P,onAppear:k,onAfterAppear:T,onAppearCancelled:p}=t,S=String(e.key),y=tf(n,e),A=(_,x)=>{_&&at(_,s,9,x)},V=(_,x)=>{let $=x[1];A(_,x),B(_)?_.every(w=>w.length<=1)&&$():_.length<=1&&$()},N={mode:o,persisted:l,beforeEnter(_){let x=a;if(!n.isMounted)if(r)x=P||a;else return;_[Ct]&&_[Ct](!0);let $=y[S];$&&ht(e,$)&&$.el[Ct]&&$.el[Ct](),A(x,[_])},enter(_){if(y[S]===e)return;let x=u,$=f,w=c;if(!n.isMounted)if(r)x=k||u,$=T||f,w=p||c;else return;let L=!1;_[ms]=z=>{L||(L=!0,z?A(w,[_]):A($,[_]),N.delayedLeave&&N.delayedLeave(),_[ms]=void 0)};let J=_[ms].bind(null,!1);x?V(x,[_,J]):J()},leave(_,x){let $=String(e.key);if(_[ms]&&_[ms](!0),n.isUnmounting)return x();A(d,[_]);let w=!1;_[Ct]=J=>{w||(w=!0,x(),J?A(v,[_]):A(b,[_]),_[Ct]=void 0,y[$]===e&&delete y[$])};let L=_[Ct].bind(null,!1);y[$]=e,g?V(g,[_,L]):L()},clone(_){let x=Qn(_,t,n,s,i);return i&&i(x),x}};return N}function Lr(e){if(fs(e))return e=ct(e),e.children=null,e}function zl(e){if(!fs(e))return Yc(e.type)&&e.children?Qc(e.children):e;if(e.component)return e.component.subTree;let{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&G(n.default))return n.default()}}function Gt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Gt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function yr(e,t=!1,n){let s=[],i=0;for(let r=0;r<e.length;r++){let o=e[r],l=n==null?o.key:String(n)+String(o.key!=null?o.key:r);o.type===Ce?(o.patchFlag&128&&i++,s=s.concat(yr(o.children,t,l))):(t||o.type!==me)&&s.push(l!=null?ct(o,{key:l}):o)}if(i>1)for(let r=0;r<s.length;r++)s[r].patchFlag=-2;return s}function Jo(e,t){return G(e)?ee({name:e.name},t,{setup:e}):e}function Yd(){let e=He();return e?(e.appContext.config.idPrefix||\"v\")+\"-\"+e.ids[0]+e.ids[1]++:(C(\"useId() is called when there is no active component instance to be associated with.\"),\"\")}function zo(e){e.ids=[e.ids[0]+e.ids[2]+++\"-\",0,0]}var oo=new WeakSet;function Xd(e){let t=He(),n=kc(null);if(t){let i=t.refs===ne?t.refs={}:t.refs;lo(i,e)?C(`useTemplateRef('${e}') already exists.`):Object.defineProperty(i,e,{enumerable:!0,get:()=>n.value,set:r=>n.value=r})}else C(\"useTemplateRef() is called when there is no active component instance to be associated with.\");let s=Ds(n);return oo.add(s),s}function lo(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}var Mi=new WeakMap;function qn(e,t,n,s,i=!1){if(B(e)){e.forEach((v,P)=>qn(v,t&&(B(t)?t[P]:t),n,s,i));return}if(Kt(s)&&!i){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&qn(e,t,n,s.component.subTree);return}let r=s.shapeFlag&4?Zs(s.component):s.el,o=i?null:r,{i:l,r:a}=e;if(!l){C(\"Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.\");return}let u=t&&t.r,f=l.refs===ne?l.refs={}:l.refs,c=l.setupState,d=Q(c),g=c===ne?Hn:v=>(ie(d,v)&&!ye(d[v])&&C(`Template ref \"${v}\" used on a non-ref value. It will not work in the production build.`),oo.has(d[v])||lo(f,v)?!1:ie(d,v)),b=(v,P)=>!(oo.has(v)||P&&lo(f,P));if(u!=null&&u!==a){if(Yl(t),Y(u))f[u]=null,g(u)&&(c[u]=null);else if(ye(u)){let v=t;b(u,v.k)&&(u.value=null),v.k&&(f[v.k]=null)}}if(G(a))Rn(a,l,12,[o,f]);else{let v=Y(a),P=ye(a);if(v||P){let k=()=>{if(e.f){let T=v?g(a)?c[a]:f[a]:b(a)||!e.k?a.value:f[e.k];if(i)B(T)&&Po(T,r);else if(B(T))T.includes(r)||T.push(r);else if(v)f[a]=[r],g(a)&&(c[a]=f[a]);else{let p=[r];b(a,e.k)&&(a.value=p),e.k&&(f[e.k]=p)}}else v?(f[a]=o,g(a)&&(c[a]=o)):P?(b(a,e.k)&&(a.value=o),e.k&&(f[e.k]=o)):C(\"Invalid template ref type:\",a,`(${typeof a})`)};if(o){let T=()=>{k(),Mi.delete(e)};T.id=-1,Mi.set(e,T),Se(T,n)}else Yl(e),k()}else C(\"Invalid template ref type:\",a,`(${typeof a})`)}}function Yl(e){let t=Mi.get(e);t&&(t.flags|=8,Mi.delete(e))}var Xl=!1,an=()=>{Xl||(console.error(\"Hydration completed but contains mismatches.\"),Xl=!0)},Zd=e=>e.namespaceURI.includes(\"svg\")&&e.tagName!==\"foreignObject\",Qd=e=>e.namespaceURI.includes(\"MathML\"),ai=e=>{if(e.nodeType===1){if(Zd(e))return\"svg\";if(Qd(e))return\"mathml\"}},dn=e=>e.nodeType===8;function ep(e){let{mt:t,p:n,o:{patchProp:s,createText:i,nextSibling:r,parentNode:o,remove:l,insert:a,createComment:u}}=e,f=(p,S)=>{if(!S.hasChildNodes()){C(\"Attempting to hydrate existing markup but container is empty. Performing full mount instead.\"),n(null,p,S),ki(),S._vnode=p;return}c(S.firstChild,p,null,null,null),ki(),S._vnode=p},c=(p,S,y,A,V,N=!1)=>{N=N||!!S.dynamicChildren;let _=dn(p)&&p.data===\"[\",x=()=>v(p,S,y,A,V,_),{type:$,ref:w,shapeFlag:L,patchFlag:J}=S,z=p.nodeType;S.el=p,zn(p,\"__vnode\",S,!0),zn(p,\"__vueParentComponent\",y,!0),J===-2&&(N=!1,S.dynamicChildren=null);let K=null;switch($){case It:z!==3?S.children===\"\"?(a(S.el=i(\"\"),o(p),p),K=p):K=x():(p.data!==S.children&&(C(\"Hydration text mismatch in\",p.parentNode,`\n  - rendered on server: ${JSON.stringify(p.data)}\n  - expected on client: ${JSON.stringify(S.children)}`),an(),p.data=S.children),K=r(p));break;case me:T(p)?(K=r(p),k(S.el=p.content.firstChild,p,y)):z!==8||_?K=x():K=r(p);break;case sn:if(_&&(p=r(p),z=p.nodeType),z===1||z===3){K=p;let W=!S.children.length;for(let j=0;j<S.staticCount;j++)W&&(S.children+=K.nodeType===1?K.outerHTML:K.data),j===S.staticCount-1&&(S.anchor=K),K=r(K);return _?r(K):K}else x();break;case Ce:_?K=b(p,S,y,A,V,N):K=x();break;default:if(L&1)(z!==1||S.type.toLowerCase()!==p.tagName.toLowerCase())&&!T(p)?K=x():K=d(p,S,y,A,V,N);else if(L&6){S.slotScopeIds=V;let W=o(p);if(_?K=P(p):dn(p)&&p.data===\"teleport start\"?K=P(p,p.data,\"teleport end\"):K=r(p),t(S,W,null,y,A,ai(W),N),Kt(S)&&!S.type.__asyncResolved){let j;_?(j=ge(Ce),j.anchor=K?K.previousSibling:W.lastChild):j=p.nodeType===3?rl(\"\"):ge(\"div\"),j.el=p,S.component.subTree=j}}else L&64?z!==8?K=x():K=S.type.hydrate(p,S,y,A,V,N,e,g):L&128?K=S.type.hydrate(p,S,y,A,ai(o(p)),V,N,e,c):C(\"Invalid HostVNode type:\",$,`(${typeof $})`)}return w!=null&&qn(w,null,A,S),K},d=(p,S,y,A,V,N)=>{N=N||!!S.dynamicChildren;let{type:_,props:x,patchFlag:$,shapeFlag:w,dirs:L,transition:J}=S,z=_===\"input\"||_===\"option\";{L&&Et(S,null,y,\"created\");let K=!1;if(T(p)){K=kf(null,J)&&y&&y.vnode.props&&y.vnode.props.appear;let j=p.content.firstChild;if(K){let re=j.getAttribute(\"class\");re&&(j.$cls=re),J.beforeEnter(j)}k(j,p,y),S.el=p=j}if(w&16&&!(x&&(x.innerHTML||x.textContent))){let j=g(p.firstChild,S,p,y,A,V,N),re=!1;for(;j;){Ss(p,1)||(re||(C(\"Hydration children mismatch on\",p,`\nServer rendered element contains more child nodes than client vdom.`),re=!0),an());let Ze=j;j=j.nextSibling,l(Ze)}}else if(w&8){let j=S.children;j[0]===`\n`&&(p.tagName===\"PRE\"||p.tagName===\"TEXTAREA\")&&(j=j.slice(1));let{textContent:re}=p;re!==j&&re!==j.replace(/\\r\\n|\\r/g,`\n`)&&(Ss(p,0)||(C(\"Hydration text content mismatch on\",p,`\n  - rendered on server: ${re}\n  - expected on client: ${j}`),an()),p.textContent=S.children)}if(x){let j=p.tagName.includes(\"-\");for(let re in x)!(L&&L.some(Ze=>Ze.dir.created))&&tp(p,re,x[re],S,y)&&an(),(z&&(re.endsWith(\"value\")||re===\"indeterminate\")||on(re)&&!Ut(re)||re[0]===\".\"||j&&!Ut(re))&&s(p,re,null,x[re],void 0,y)}let W;(W=x&&x.onVnodeBeforeMount)&&Je(W,y,S),L&&Et(S,null,y,\"beforeMount\"),((W=x&&x.onVnodeMounted)||L||K)&&$f(()=>{W&&Je(W,y,S),K&&J.enter(p),L&&Et(S,null,y,\"mounted\")},A)}return p.nextSibling},g=(p,S,y,A,V,N,_)=>{_=_||!!S.dynamicChildren;let x=S.children,$=x.length,w=!1;for(let L=0;L<$;L++){let J=_?x[L]:x[L]=Ke(x[L]),z=J.type===It;p?(z&&!_&&L+1<$&&Ke(x[L+1]).type===It&&(a(i(p.data.slice(J.children.length)),y,r(p)),p.data=J.children),p=c(p,J,A,V,N,_)):z&&!J.children?a(J.el=i(\"\"),y):(Ss(y,1)||(w||(C(\"Hydration children mismatch on\",y,`\nServer rendered element contains fewer child nodes than client vdom.`),w=!0),an()),n(null,J,y,null,A,V,ai(y),N))}return p},b=(p,S,y,A,V,N)=>{let{slotScopeIds:_}=S;_&&(V=V?V.concat(_):_);let x=o(p),$=g(r(p),S,x,y,A,V,N);return $&&dn($)&&$.data===\"]\"?r(S.anchor=$):(an(),a(S.anchor=u(\"]\"),x,$),$)},v=(p,S,y,A,V,N)=>{if(Ss(p.parentElement,1)||(C(`Hydration node mismatch:\n- rendered on server:`,p,p.nodeType===3?\"(text)\":dn(p)&&p.data===\"[\"?\"(start of fragment)\":\"\",`\n- expected on client:`,S.type),an()),S.el=null,N){let $=P(p);for(;;){let w=r(p);if(w&&w!==$)l(w);else break}}let _=r(p),x=o(p);return l(p),n(null,S,x,_,y,A,ai(x),V),y&&(y.vnode.el=S.el,Er(y,S.el)),_},P=(p,S=\"[\",y=\"]\")=>{let A=0;for(;p;)if(p=r(p),p&&dn(p)&&(p.data===S&&A++,p.data===y)){if(A===0)return r(p);A--}return p},k=(p,S,y)=>{let A=S.parentNode;A&&A.replaceChild(p,S);let V=y;for(;V;)V.vnode.el===S&&(V.vnode.el=V.subTree.el=p),V=V.parent},T=p=>p.nodeType===1&&p.tagName===\"TEMPLATE\";return[f,c]}function tp(e,t,n,s,i){let r,o,l,a;if(t===\"class\")e.$cls?(l=e.$cls,delete e.$cls):l=e.getAttribute(\"class\"),a=cs(n),np(Zl(l||\"\"),Zl(a))||(r=2,o=\"class\");else if(t===\"style\"){l=e.getAttribute(\"style\")||\"\",a=Y(n)?n:Nh(as(n));let u=Ql(l),f=Ql(a);if(s.dirs)for(let{dir:c,value:d}of s.dirs)c.name===\"show\"&&!d&&f.set(\"display\",\"none\");i&&nf(i,s,f),sp(u,f)||(r=3,o=\"style\")}else(e instanceof SVGElement&&Fh(t)||e instanceof HTMLElement&&(Hl(t)||Dh(t)))&&(Hl(t)?(l=e.hasAttribute(t),a=Do(n)):n==null?(l=e.hasAttribute(t),a=!1):(e.hasAttribute(t)?l=e.getAttribute(t):t===\"value\"&&e.tagName===\"TEXTAREA\"?l=e.value:l=!1,a=Lh(n)?String(n):!1),l!==a&&(r=4,o=t));if(r!=null&&!Ss(e,r)){let u=d=>d===!1?\"(not rendered)\":`${o}=\"${d}\"`,f=`Hydration ${sf[r]} mismatch on`,c=`\n  - rendered on server: ${u(l)}\n  - expected on client: ${u(a)}\n  Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n  You should fix the source of the mismatch.`;return C(f,e,c),!0}return!1}function Zl(e){return new Set(e.trim().split(/\\s+/))}function np(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function Ql(e){let t=new Map;for(let n of e.split(\";\")){let[s,i]=n.split(\":\");s=s.trim(),i=i&&i.trim(),s&&i&&t.set(s,i)}return t}function sp(e,t){if(e.size!==t.size)return!1;for(let[n,s]of e)if(s!==t.get(n))return!1;return!0}function nf(e,t,n){let s=e.subTree;if(e.getCssVars&&(t===s||s&&s.type===Ce&&s.children.includes(t))){let i=e.getCssVars();for(let r in i){let o=mc(i[r]);n.set(`--${Hh(r)}`,o)}}t===s&&e.parent&&nf(e.parent,e.vnode,n)}var ea=\"data-allow-mismatch\",sf={0:\"text\",1:\"children\",2:\"class\",3:\"style\",4:\"attribute\"};function Ss(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(ea);)e=e.parentElement;let n=e&&e.getAttribute(ea);if(n==null)return!1;if(n===\"\")return!0;{let s=n.split(\",\");return t===0&&s.includes(\"children\")?!0:s.includes(sf[t])}}var ip=Gs().requestIdleCallback||(e=>setTimeout(e,1)),rp=Gs().cancelIdleCallback||(e=>clearTimeout(e)),op=(e=1e4)=>t=>{let n=ip(t,{timeout:e});return()=>rp(n)};function lp(e){let{top:t,left:n,bottom:s,right:i}=e.getBoundingClientRect(),{innerHeight:r,innerWidth:o}=window;return(t>0&&t<r||s>0&&s<r)&&(n>0&&n<o||i>0&&i<o)}var ap=e=>(t,n)=>{let s=new IntersectionObserver(i=>{for(let r of i)if(r.isIntersecting){s.disconnect(),t();break}},e);return n(i=>{if(i instanceof Element){if(lp(i))return t(),s.disconnect(),!1;s.observe(i)}}),()=>s.disconnect()},cp=e=>t=>{if(e){let n=matchMedia(e);if(n.matches)t();else return n.addEventListener(\"change\",t,{once:!0}),()=>n.removeEventListener(\"change\",t)}},fp=(e=[])=>(t,n)=>{Y(e)&&(e=[e]);let s=!1,i=o=>{s||(s=!0,r(),t(),o.target.dispatchEvent(new o.constructor(o.type,o)))},r=()=>{n(o=>{for(let l of e)o.removeEventListener(l,i)})};return n(o=>{for(let l of e)o.addEventListener(l,i,{once:!0})}),r};function up(e,t){if(dn(e)&&e.data===\"[\"){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(dn(s))if(s.data===\"]\"){if(--n===0)break}else s.data===\"[\"&&n++;s=s.nextSibling}}else t(e)}var Kt=e=>!!e.type.__asyncLoader;function hp(e){G(e)&&(e={loader:e});let{loader:t,loadingComponent:n,errorComponent:s,delay:i=200,hydrate:r,timeout:o,suspensible:l=!0,onError:a}=e,u=null,f,c=0,d=()=>(c++,u=null,g()),g=()=>{let b;return u||(b=u=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),a)return new Promise((P,k)=>{a(v,()=>P(d()),()=>k(v),c+1)});throw v}).then(v=>{if(b!==u&&u)return u;if(v||C(\"Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.\"),v&&(v.__esModule||v[Symbol.toStringTag]===\"Module\")&&(v=v.default),v&&!se(v)&&!G(v))throw new Error(`Invalid async component load result: ${v}`);return f=v,v}))};return Jo({name:\"AsyncComponentWrapper\",__asyncLoader:g,__asyncHydrate(b,v,P){let k=!1;(v.bu||(v.bu=[])).push(()=>k=!0);let T=()=>{if(k){C(`Skipping lazy hydration for component '${es(f)||f.__file}': it was updated before lazy hydration performed.`);return}P()},p=r?()=>{let S=r(T,y=>up(b,y));S&&(v.bum||(v.bum=[])).push(S)}:T;f?p():g().then(()=>!v.isUnmounted&&p())},get __asyncResolved(){return f},setup(){let b=we;if(zo(b),f)return()=>ci(f,b);let v=p=>{u=null,ln(p,b,13,!s)};if(l&&b.suspense||In)return g().then(p=>()=>ci(p,b)).catch(p=>(v(p),()=>s?ge(s,{error:p}):null));let P=vn(!1),k=vn(),T=vn(!!i);return i&&setTimeout(()=>{T.value=!1},i),o!=null&&setTimeout(()=>{if(!P.value&&!k.value){let p=new Error(`Async component timed out after ${o}ms.`);v(p),k.value=p}},o),g().then(()=>{P.value=!0,b.parent&&fs(b.parent.vnode)&&b.parent.update()}).catch(p=>{v(p),k.value=p}),()=>{if(P.value&&f)return ci(f,b);if(k.value&&s)return ge(s,{error:k.value});if(n&&!T.value)return ci(n,b)}}})}function ci(e,t){let{ref:n,props:s,children:i,ce:r}=t.vnode,o=ge(e,s,i);return o.ref=n,o.ce=r,delete t.vnode.ce,o}var fs=e=>e.type.__isKeepAlive,dp={name:\"KeepAlive\",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){let n=He(),s=n.ctx;if(!s.renderer)return()=>{let T=t.default&&t.default();return T&&T.length===1?T[0]:T};let i=new Map,r=new Set,o=null;n.__v_cache=i;let l=n.suspense,{renderer:{p:a,m:u,um:f,o:{createElement:c}}}=s,d=c(\"div\");s.activate=(T,p,S,y,A)=>{let V=T.component;u(T,p,S,0,l),a(V.vnode,T,p,S,V,l,y,T.slotScopeIds,A),Se(()=>{V.isDeactivated=!1,V.a&&nn(V.a);let N=T.props&&T.props.onVnodeMounted;N&&Je(N,V.parent,T)},l),so(V)},s.deactivate=T=>{let p=T.component;Vi(p.m),Vi(p.a),u(T,d,null,1,l),Se(()=>{p.da&&nn(p.da);let S=T.props&&T.props.onVnodeUnmounted;S&&Je(S,p.parent,T),p.isDeactivated=!0},l),so(p),p.__keepAliveStorageContainer=d};function g(T){Vr(T),f(T,n,l,!0)}function b(T){i.forEach((p,S)=>{let y=es(Kt(p)?p.type.__asyncResolved||{}:p.type);y&&!T(y)&&v(S)})}function v(T){let p=i.get(T);p&&(!o||!ht(p,o))?g(p):o&&Vr(o),i.delete(T),r.delete(T)}Wn(()=>[e.include,e.exclude],([T,p])=>{T&&b(S=>ws(T,S)),p&&b(S=>!ws(p,S))},{flush:\"post\",deep:!0});let P=null,k=()=>{P!=null&&(Hi(n.subTree.type)?Se(()=>{i.set(P,fi(n.subTree))},n.subTree.suspense):i.set(P,fi(n.subTree)))};return Xs(k),vr(k),_r(()=>{i.forEach(T=>{let{subTree:p,suspense:S}=n,y=fi(p);if(T.type===y.type&&T.key===y.key){Vr(y);let A=y.component.da;A&&Se(A,S);return}g(T)})}),()=>{if(P=null,!t.default)return o=null;let T=t.default(),p=T[0];if(T.length>1)return C(\"KeepAlive should contain exactly one component child.\"),o=null,T;if(!kt(p)||!(p.shapeFlag&4)&&!(p.shapeFlag&128))return o=null,p;let S=fi(p);if(S.type===me)return o=null,S;let y=S.type,A=es(Kt(S)?S.type.__asyncResolved||{}:y),{include:V,exclude:N,max:_}=e;if(V&&(!A||!ws(V,A))||N&&A&&ws(N,A))return S.shapeFlag&=-257,o=S,p;let x=S.key==null?y:S.key,$=i.get(x);return S.el&&(S=ct(S),p.shapeFlag&128&&(p.ssContent=S)),P=x,$?(S.el=$.el,S.component=$.component,S.transition&&Gt(S,S.transition),S.shapeFlag|=512,r.delete(x),r.add(x)):(r.add(x),_&&r.size>parseInt(_,10)&&v(r.values().next().value)),S.shapeFlag|=256,o=S,Hi(p.type)?p:S}}},pp=dp;function ws(e,t){return B(e)?e.some(n=>ws(n,t)):Y(e)?e.split(\",\").includes(t):yh(e)?(e.lastIndex=0,e.test(t)):!1}function rf(e,t){lf(e,\"a\",t)}function of(e,t){lf(e,\"da\",t)}function lf(e,t,n=we){let s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(br(t,s,n),n){let i=n.parent;for(;i&&i.parent;)fs(i.parent.vnode)&&mp(s,t,n,i),i=i.parent}}function mp(e,t,n,s){let i=br(t,e,s,!0);Sr(()=>{Po(s[t],i)},n)}function Vr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function fi(e){return e.shapeFlag&128?e.ssContent:e}function br(e,t,n=we,s=!1){if(n){let i=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...o)=>{bt();let l=us(n),a=at(t,n,e,o);return l(),vt(),a});return s?i.unshift(r):i.push(r),r}else{let i=xt(dr[e].replace(/ hook$/,\"\"));C(`${i} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.`)}}var Jt=e=>(t,n=we)=>{(!In||e===\"sp\")&&br(e,(...s)=>t(...s),n)},af=Jt(\"bm\"),Xs=Jt(\"m\"),Yo=Jt(\"bu\"),vr=Jt(\"u\"),_r=Jt(\"bum\"),Sr=Jt(\"um\"),cf=Jt(\"sp\"),ff=Jt(\"rtg\"),uf=Jt(\"rtc\");function hf(e,t=we){br(\"ec\",e,t)}var Pi=\"components\",gp=\"directives\";function yp(e,t){return Zo(Pi,e,!0,t)||e}var Xo=Symbol.for(\"v-ndc\");function bp(e){return Y(e)?Zo(Pi,e,!1)||e:e||Xo}function vp(e){return Zo(gp,e)}function Zo(e,t,n=!0,s=!1){let i=Ee||we;if(i){let r=i.type;if(e===Pi){let l=es(r,!1);if(l&&(l===t||l===le(t)||l===Ot(le(t))))return r}let o=ta(i[e]||r[e],t)||ta(i.appContext[e],t);if(!o&&s)return r;if(n&&!o){let l=e===Pi?`\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.`:\"\";C(`Failed to resolve ${e.slice(0,-1)}: ${t}${l}`)}return o}else C(`resolve${Ot(e.slice(0,-1))} can only be used in render() or setup().`)}function ta(e,t){return e&&(e[t]||e[le(t)]||e[Ot(le(t))])}function _p(e,t,n,s){let i,r=n&&n[s],o=B(e);if(o||Y(e)){let l=o&&jt(e),a=!1,u=!1;l&&(a=!Re(e),u=lt(e),e=cr(e)),i=new Array(e.length);for(let f=0,c=e.length;f<c;f++)i[f]=t(a?u?Xn(_t(e[f])):_t(e[f]):e[f],f,void 0,r&&r[f])}else if(typeof e==\"number\")if(!Number.isInteger(e)||e<0)C(`The v-for range expects a positive integer value but got ${e}.`),i=[];else{i=new Array(e);for(let l=0;l<e;l++)i[l]=t(l+1,l,void 0,r&&r[l])}else if(se(e))if(e[Symbol.iterator])i=Array.from(e,(l,a)=>t(l,a,void 0,r&&r[a]));else{let l=Object.keys(e);i=new Array(l.length);for(let a=0,u=l.length;a<u;a++){let f=l[a];i[a]=t(e[f],f,a,r&&r[a])}}else i=[];return n&&(n[s]=i),i}function Sp(e,t){for(let n=0;n<t.length;n++){let s=t[n];if(B(s))for(let i=0;i<s.length;i++)e[s[i].name]=s[i].fn;else s&&(e[s.name]=s.key?(...i)=>{let r=s.fn(...i);return r&&(r.key=s.key),r}:s.fn)}return e}function wp(e,t,n={},s,i){if(Ee.ce||Ee.parent&&Kt(Ee.parent)&&Ee.parent.ce){let u=Object.keys(n).length>0;return t!==\"default\"&&(n.name=t),Bs(),Bi(Ce,null,[ge(\"slot\",n,s&&s())],u?-2:64)}let r=e[t];r&&r.length>1&&(C(\"SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.\"),r=()=>[]),r&&r._c&&(r._d=!1),Bs();let o=r&&Qo(r(n)),l=n.key||o&&o.key,a=Bi(Ce,{key:(l&&!Xe(l)?l:`_${t}`)+(!o&&s?\"_fb\":\"\")},o||(s?s():[]),o&&e._===1?64:-2);return!i&&a.scopeId&&(a.slotScopeIds=[a.scopeId+\"-s\"]),r&&r._c&&(r._d=!0),a}function Qo(e){return e.some(t=>kt(t)?!(t.type===me||t.type===Ce&&!Qo(t.children)):!0)?e:null}function Tp(e,t){let n={};if(!se(e))return C(\"v-on with no argument expects an object value.\"),n;for(let s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:xt(s)]=e[s];return n}var ao=e=>e?jf(e)?Zs(e):ao(e.parent):null,wn=ee(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>dt(e.props),$attrs:e=>dt(e.attrs),$slots:e=>dt(e.slots),$refs:e=>dt(e.refs),$parent:e=>ao(e.parent),$root:e=>ao(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>tl(e),$forceUpdate:e=>e.f||(e.f=()=>{mr(e.update)}),$nextTick:e=>e.n||(e.n=pr.bind(e.proxy)),$watch:e=>qd.bind(e)}),el=e=>e===\"_\"||e===\"$\",Hr=(e,t)=>e!==ne&&!e.__isScriptSetup&&ie(e,t),Ns={get({_:e},t){if(t===\"__v_skip\")return!0;let{ctx:n,setupState:s,data:i,props:r,accessCache:o,type:l,appContext:a}=e;if(t===\"__isVue\")return!0;if(t[0]!==\"$\"){let d=o[t];if(d!==void 0)switch(d){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return r[t]}else{if(Hr(s,t))return o[t]=1,s[t];if(i!==ne&&ie(i,t))return o[t]=2,i[t];if(ie(r,t))return o[t]=3,r[t];if(n!==ne&&ie(n,t))return o[t]=4,n[t];co&&(o[t]=0)}}let u=wn[t],f,c;if(u)return t===\"$attrs\"?(Ne(e.attrs,\"get\",\"\"),Di()):t===\"$slots\"&&Ne(e,\"get\",t),u(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==ne&&ie(n,t))return o[t]=4,n[t];if(c=a.config.globalProperties,ie(c,t))return c[t];Ee&&(!Y(t)||t.indexOf(\"__v\")!==0)&&(i!==ne&&el(t[0])&&ie(i,t)?C(`Property ${JSON.stringify(t)} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`):e===Ee&&C(`Property ${JSON.stringify(t)} was accessed during render but is not defined on instance.`))},set({_:e},t,n){let{data:s,setupState:i,ctx:r}=e;return Hr(i,t)?(i[t]=n,!0):i.__isScriptSetup&&ie(i,t)?(C(`Cannot mutate <script setup> binding \"${t}\" from Options API.`),!1):s!==ne&&ie(s,t)?(s[t]=n,!0):ie(e.props,t)?(C(`Attempting to mutate prop \"${t}\". Props are readonly.`),!1):t[0]===\"$\"&&t.slice(1)in e?(C(`Attempting to mutate public property \"${t}\". Properties starting with $ are reserved and readonly.`),!1):(t in e.appContext.config.globalProperties?Object.defineProperty(r,t,{enumerable:!0,configurable:!0,value:n}):r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,props:r,type:o}},l){let a;return!!(n[l]||e!==ne&&l[0]!==\"$\"&&ie(e,l)||Hr(t,l)||ie(r,l)||ie(s,l)||ie(wn,l)||ie(i.config.globalProperties,l)||(a=o.__cssModules)&&a[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ie(n,\"value\")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};Ns.ownKeys=e=>(C(\"Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.\"),Reflect.ownKeys(e));var Ep=ee({},Ns,{get(e,t){if(t!==Symbol.unscopables)return Ns.get(e,t,e)},has(e,t){let n=t[0]!==\"_\"&&!Th(t);return!n&&Ns.has(e,t)&&C(`Property ${JSON.stringify(t)} should not start with _ which is a reserved prefix for Vue internals.`),n}});function Cp(e){let t={};return Object.defineProperty(t,\"_\",{configurable:!0,enumerable:!1,get:()=>e}),Object.keys(wn).forEach(n=>{Object.defineProperty(t,n,{configurable:!0,enumerable:!1,get:()=>wn[n](e),set:Te})}),t}function xp(e){let{ctx:t,propsOptions:[n]}=e;n&&Object.keys(n).forEach(s=>{Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>e.props[s],set:Te})})}function Ap(e){let{ctx:t,setupState:n}=e;Object.keys(Q(n)).forEach(s=>{if(!n.__isScriptSetup){if(el(s[0])){C(`setup() return property ${JSON.stringify(s)} should not start with \"$\" or \"_\" which are reserved prefixes for Vue internals.`);return}Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>n[s],set:Te})}})}var Mn=e=>C(`${e}() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.`);function Np(){return Mn(\"defineProps\"),null}function Ip(){return Mn(\"defineEmits\"),null}function Op(e){Mn(\"defineExpose\")}function kp(e){Mn(\"defineOptions\")}function Rp(){return Mn(\"defineSlots\"),null}function Mp(){Mn(\"defineModel\")}function Pp(e,t){return Mn(\"withDefaults\"),null}function $p(){return df(\"useSlots\").slots}function Dp(){return df(\"useAttrs\").attrs}function df(e){let t=He();return t||C(`${e}() called without active instance.`),t.setupContext||(t.setupContext=Gf(t))}function Vs(e){return B(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function Fp(e,t){let n=Vs(e);for(let s in t){if(s.startsWith(\"__skip\"))continue;let i=n[s];i?B(i)||G(i)?i=n[s]={type:i,default:t[s]}:i.default=t[s]:i===null?i=n[s]={default:t[s]}:C(`props default key \"${s}\" has no corresponding declaration.`),i&&t[`__skip_${s}`]&&(i.skipFactory=!0)}return n}function Lp(e,t){return!e||!t?e||t:B(e)&&B(t)?e.concat(t):ee({},Vs(e),Vs(t))}function Vp(e,t){let n={};for(let s in e)t.includes(s)||Object.defineProperty(n,s,{enumerable:!0,get:()=>e[s]});return n}function Hp(e){let t=He(),n=In;t||C(\"withAsyncContext called without active current instance. This is likely a bug.\");let s=e();ji(),n&&Jn(!1);let i=()=>{us(t),n&&Jn(!0)},r=()=>{He()!==t&&t.scope.off(),ji(),n&&Jn(!1)};return sr(s)&&(s=s.catch(o=>{throw i(),Promise.resolve().then(()=>Promise.resolve().then(r)),o})),[s,()=>{i(),Promise.resolve().then(r)}]}function Bp(){let e=Object.create(null);return(t,n)=>{e[n]?C(`${t} property \"${n}\" is already defined in ${e[n]}.`):e[n]=t}}var co=!0;function Up(e){let t=tl(e),n=e.proxy,s=e.ctx;co=!1,t.beforeCreate&&na(t.beforeCreate,e,\"bc\");let{data:i,computed:r,methods:o,watch:l,provide:a,inject:u,created:f,beforeMount:c,mounted:d,beforeUpdate:g,updated:b,activated:v,deactivated:P,beforeDestroy:k,beforeUnmount:T,destroyed:p,unmounted:S,render:y,renderTracked:A,renderTriggered:V,errorCaptured:N,serverPrefetch:_,expose:x,inheritAttrs:$,components:w,directives:L,filters:J}=t,z=Bp();{let[W]=e.propsOptions;if(W)for(let j in W)z(\"Props\",j)}if(u&&jp(u,s,z),o)for(let W in o){let j=o[W];G(j)?(Object.defineProperty(s,W,{value:j.bind(n),configurable:!0,enumerable:!0,writable:!0}),z(\"Methods\",W)):C(`Method \"${W}\" has type \"${typeof j}\" in the component definition. Did you reference the function correctly?`)}if(i){G(i)||C(\"The data option must be a function. Plain object usage is no longer supported.\");let W=i.call(n,n);if(sr(W)&&C(\"data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.\"),!se(W))C(\"data() should return an object.\");else{e.data=ur(W);for(let j in W)z(\"Data\",j),el(j[0])||Object.defineProperty(s,j,{configurable:!0,enumerable:!0,get:()=>W[j],set:Te})}}if(co=!0,r)for(let W in r){let j=r[W],re=G(j)?j.bind(n,n):G(j.get)?j.get.bind(n,n):Te;re===Te&&C(`Computed property \"${W}\" has no getter.`);let Ze=!G(j)&&G(j.set)?j.set.bind(n):()=>{C(`Write operation failed: computed property \"${W}\" is readonly.`)},Rt=zf({get:re,set:Ze});Object.defineProperty(s,W,{enumerable:!0,configurable:!0,get:()=>Rt.value,set:Pn=>Rt.value=Pn}),z(\"Computed\",W)}if(l)for(let W in l)pf(l[W],s,n,W);if(a){let W=G(a)?a.call(n):a;Reflect.ownKeys(W).forEach(j=>{Kc(j,W[j])})}f&&na(f,e,\"c\");function K(W,j){B(j)?j.forEach(re=>W(re.bind(n))):j&&W(j.bind(n))}if(K(af,c),K(Xs,d),K(Yo,g),K(vr,b),K(rf,v),K(of,P),K(hf,N),K(uf,A),K(ff,V),K(_r,T),K(Sr,S),K(cf,_),B(x))if(x.length){let W=e.exposed||(e.exposed={});x.forEach(j=>{Object.defineProperty(W,j,{get:()=>n[j],set:re=>n[j]=re,enumerable:!0})})}else e.exposed||(e.exposed={});y&&e.render===Te&&(e.render=y),$!=null&&(e.inheritAttrs=$),w&&(e.components=w),L&&(e.directives=L),_&&zo(e)}function jp(e,t,n=Te){B(e)&&(e=fo(e));for(let s in e){let i=e[s],r;se(i)?\"default\"in i?r=As(i.from||s,i.default,!0):r=As(i.from||s):r=As(i),ye(r)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>r.value,set:o=>r.value=o}):t[s]=r,n(\"Inject\",s)}}function na(e,t,n){at(B(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function pf(e,t,n,s){let i=s.includes(\".\")?Jc(n,s):()=>n[s];if(Y(e)){let r=t[e];G(r)?Wn(i,r):C(`Invalid watch handler specified by key \"${e}\"`,r)}else if(G(e))Wn(i,e.bind(n));else if(se(e))if(B(e))e.forEach(r=>pf(r,t,n,s));else{let r=G(e.handler)?e.handler.bind(n):t[e.handler];G(r)?Wn(i,r,e):C(`Invalid watch handler specified by key \"${e.handler}\"`,r)}else C(`Invalid watch option: \"${s}\"`,e)}function tl(e){let t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:r,config:{optionMergeStrategies:o}}=e.appContext,l=r.get(t),a;return l?a=l:!i.length&&!n&&!s?a=t:(a={},i.length&&i.forEach(u=>$i(a,u,o,!0)),$i(a,t,o)),se(t)&&r.set(t,a),a}function $i(e,t,n,s=!1){let{mixins:i,extends:r}=t;r&&$i(e,r,n,!0),i&&i.forEach(o=>$i(e,o,n,!0));for(let o in t)if(s&&o===\"expose\")C('\"expose\" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.');else{let l=Kp[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}var Kp={data:sa,props:ia,emits:ia,methods:Ts,computed:Ts,beforeCreate:Ue,created:Ue,beforeMount:Ue,mounted:Ue,beforeUpdate:Ue,updated:Ue,beforeDestroy:Ue,beforeUnmount:Ue,destroyed:Ue,unmounted:Ue,activated:Ue,deactivated:Ue,errorCaptured:Ue,serverPrefetch:Ue,components:Ts,directives:Ts,watch:qp,provide:sa,inject:Wp};function sa(e,t){return t?e?function(){return ee(G(e)?e.call(this,this):e,G(t)?t.call(this,this):t)}:t:e}function Wp(e,t){return Ts(fo(e),fo(t))}function fo(e){if(B(e)){let t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function Ue(e,t){return e?[...new Set([].concat(e,t))]:t}function Ts(e,t){return e?ee(Object.create(null),e,t):t}function ia(e,t){return e?B(e)&&B(t)?[...new Set([...e,...t])]:ee(Object.create(null),Vs(e),Vs(t??{})):t}function qp(e,t){if(!e)return t;if(!t)return e;let n=ee(Object.create(null),e);for(let s in t)n[s]=Ue(e[s],t[s]);return n}function mf(){return{app:null,config:{isNativeTag:Hn,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}var Gp=0;function Jp(e,t){return function(s,i=null){G(s)||(s=ee({},s)),i!=null&&!se(i)&&(C(\"root props passed to app.mount() must be an object.\"),i=null);let r=mf(),o=new WeakSet,l=[],a=!1,u=r.app={_uid:Gp++,_component:s,_props:i,_container:null,_context:r,_instance:null,version:_o,get config(){return r.config},set config(f){C(\"app.config cannot be replaced. Modify individual options instead.\")},use(f,...c){return o.has(f)?C(\"Plugin has already been applied to target app.\"):f&&G(f.install)?(o.add(f),f.install(u,...c)):G(f)?(o.add(f),f(u,...c)):C('A plugin must either be a function or an object with an \"install\" function.'),u},mixin(f){return r.mixins.includes(f)?C(\"Mixin has already been applied to target app\"+(f.name?`: ${f.name}`:\"\")):r.mixins.push(f),u},component(f,c){return yo(f,r.config),c?(r.components[f]&&C(`Component \"${f}\" has already been registered in target app.`),r.components[f]=c,u):r.components[f]},directive(f,c){return jc(f),c?(r.directives[f]&&C(`Directive \"${f}\" has already been registered in target app.`),r.directives[f]=c,u):r.directives[f]},mount(f,c,d){if(a)C(\"App has already been mounted.\\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. `const createMyApp = () => createApp(App)`\");else{f.__vue_app__&&C(\"There is already an app instance mounted on the host container.\\n If you want to mount another app on the same host container, you need to unmount the previous app by calling `app.unmount()` first.\");let g=u._ceVNode||ge(s,i);return g.appContext=r,d===!0?d=\"svg\":d===!1&&(d=void 0),r.reload=()=>{let b=ct(g);b.el=null,e(b,f,d)},c&&t?t(g,f):e(g,f,d),a=!0,u._container=f,f.__vue_app__=u,u._instance=g.component,Rd(u,_o),Zs(g.component)}},onUnmount(f){typeof f!=\"function\"&&C(`Expected function as first argument to app.onUnmount(), but got ${typeof f}`),l.push(f)},unmount(){a?(at(l,u._instance,16),e(null,u._container),u._instance=null,Md(u),delete u._container.__vue_app__):C(\"Cannot unmount an app that is not mounted.\")},provide(f,c){return f in r.provides&&(ie(r.provides,f)?C(`App already provides property with key \"${String(f)}\". It will be overwritten with the new value.`):C(`App already provides property with key \"${String(f)}\" inherited from its parent element. It will be overwritten with the new value.`)),r.provides[f]=c,u},runWithContext(f){let c=Tn;Tn=u;try{return f()}finally{Tn=c}}};return u}}var Tn=null;function zp(e,t,n=ne){let s=He();if(!s)return C(\"useModel() called without active instance.\"),vn();let i=le(t);if(!s.propsOptions[0][i])return C(`useModel() called with prop \"${t}\" which is not declared.`),vn();let r=Fe(t),o=gf(e,i),l=Mc((a,u)=>{let f,c=ne,d;return Gc(()=>{let g=e[i];ke(f,g)&&(f=g,u())}),{get(){return a(),n.get?n.get(f):f},set(g){let b=n.set?n.set(g):g;if(!ke(b,f)&&!(c!==ne&&ke(g,c)))return;let v=s.vnode.props;v&&(t in v||i in v||r in v)&&(`onUpdate:${t}`in v||`onUpdate:${i}`in v||`onUpdate:${r}`in v)||(f=g,u()),s.emit(`update:${t}`,b),ke(g,b)&&ke(g,c)&&!ke(b,d)&&u(),c=g,d=b}}});return l[Symbol.iterator]=()=>{let a=0;return{next(){return a<2?{value:a++?o||ne:l,done:!1}:{done:!0}}}},l}var gf=(e,t)=>t===\"modelValue\"||t===\"model-value\"?e.modelModifiers:e[`${t}Modifiers`]||e[`${le(t)}Modifiers`]||e[`${Fe(t)}Modifiers`];function Yp(e,t,...n){if(e.isUnmounted)return;let s=e.vnode.props||ne;{let{emitsOptions:f,propsOptions:[c]}=e;if(f)if(!(t in f))(!c||!(xt(le(t))in c))&&C(`Component emitted event \"${t}\" but it is neither declared in the emits option nor as an \"${xt(le(t))}\" prop.`);else{let d=f[t];G(d)&&(d(...n)||C(`Invalid event arguments: event validation failed for event \"${t}\".`))}}let i=n,r=t.startsWith(\"update:\"),o=r&&gf(s,t.slice(7));o&&(o.trim&&(i=n.map(f=>Y(f)?f.trim():f)),o.number&&(i=n.map(lr))),Ld(e,t,i);{let f=t.toLowerCase();f!==t&&s[xt(f)]&&C(`Event \"${f}\" is emitted in component ${Qs(e,e.type)} but the handler is registered for \"${t}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${Fe(t)}\" instead of \"${t}\".`)}let l,a=s[l=xt(t)]||s[l=xt(le(t))];!a&&r&&(a=s[l=xt(Fe(t))]),a&&at(a,e,6,i);let u=s[l+\"Once\"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,at(u,e,6,i)}}var Xp=new WeakMap;function yf(e,t,n=!1){let s=n?Xp:t.emitsCache,i=s.get(e);if(i!==void 0)return i;let r=e.emits,o={},l=!1;if(!G(e)){let a=u=>{let f=yf(u,t,!0);f&&(l=!0,ee(o,f))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!r&&!l?(se(e)&&s.set(e,null),null):(B(r)?r.forEach(a=>o[a]=null):ee(o,r),se(e)&&s.set(e,o),o)}function wr(e,t){return!e||!on(t)?!1:(t=t.slice(2).replace(/Once$/,\"\"),ie(e,t[0].toLowerCase()+t.slice(1))||ie(e,Fe(t))||ie(e,t))}var uo=!1;function Di(){uo=!0}function gi(e){let{type:t,vnode:n,proxy:s,withProxy:i,propsOptions:[r],slots:o,attrs:l,emit:a,render:u,renderCache:f,props:c,data:d,setupState:g,ctx:b,inheritAttrs:v}=e,P=Ls(e),k,T;uo=!1;try{if(n.shapeFlag&4){let y=i||s,A=g.__isScriptSetup?new Proxy(y,{get(V,N,_){return C(`Property '${String(N)}' was accessed via 'this'. Avoid using 'this' in templates.`),Reflect.get(V,N,_)}}):y;k=Ke(u.call(A,y,f,dt(c),g,d,b)),T=l}else{let y=t;l===c&&Di(),k=Ke(y.length>1?y(dt(c),{get attrs(){return Di(),dt(l)},slots:o,emit:a}):y(dt(c),null)),T=t.props?l:Zp(l)}}catch(y){Is.length=0,ln(y,e,1),k=ge(me)}let p=k,S;if(k.patchFlag>0&&k.patchFlag&2048&&([p,S]=bf(k)),T&&v!==!1){let y=Object.keys(T),{shapeFlag:A}=p;if(y.length){if(A&7)r&&y.some(Ti)&&(T=Qp(T,r)),p=ct(p,T,!1,!0);else if(!uo&&p.type!==me){let V=Object.keys(l),N=[],_=[];for(let x=0,$=V.length;x<$;x++){let w=V[x];on(w)?Ti(w)||N.push(w[2].toLowerCase()+w.slice(3)):_.push(w)}_.length&&C(`Extraneous non-props attributes (${_.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text or teleport root nodes.`),N.length&&C(`Extraneous non-emits event listeners (${N.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the \"emits\" option.`)}}}return n.dirs&&(ra(p)||C(\"Runtime directive used on component with non-element root node. The directives will not function as intended.\"),p=ct(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(ra(p)||C(\"Component inside <Transition> renders non-element root node that cannot be animated.\"),Gt(p,n.transition)),S?S(p):k=p,Ls(P),k}var bf=e=>{let t=e.children,n=e.dynamicChildren,s=Tr(t,!1);if(s){if(s.patchFlag>0&&s.patchFlag&2048)return bf(s)}else return[e,void 0];let i=t.indexOf(s),r=n?n.indexOf(s):-1,o=l=>{t[i]=l,n&&(r>-1?n[r]=l:l.patchFlag>0&&(e.dynamicChildren=[...n,l]))};return[Ke(s),o]};function Tr(e,t=!0){let n;for(let s=0;s<e.length;s++){let i=e[s];if(kt(i)){if(i.type!==me||i.children===\"v-if\"){if(n)return;if(n=i,t&&n.patchFlag>0&&n.patchFlag&2048)return Tr(n.children)}}else return}return n}var Zp=e=>{let t;for(let n in e)(n===\"class\"||n===\"style\"||on(n))&&((t||(t={}))[n]=e[n]);return t},Qp=(e,t)=>{let n={};for(let s in e)(!Ti(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n},ra=e=>e.shapeFlag&7||e.type===me;function em(e,t,n){let{props:s,children:i,component:r}=e,{props:o,children:l,patchFlag:a}=t,u=r.emitsOptions;if((i||l)&&pt||t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return s?oa(s,o,u):!!o;if(a&8){let f=t.dynamicProps;for(let c=0;c<f.length;c++){let d=f[c];if(vf(o,s,d)&&!wr(u,d))return!0}}}else return(i||l)&&(!l||!l.$stable)?!0:s===o?!1:s?o?oa(s,o,u):!0:!!o;return!1}function oa(e,t,n){let s=Object.keys(t);if(s.length!==Object.keys(e).length)return!0;for(let i=0;i<s.length;i++){let r=s[i];if(vf(t,e,r)&&!wr(n,r))return!0}return!1}function vf(e,t,n){let s=e[n],i=t[n];return n===\"style\"&&se(s)&&se(i)?!qt(s,i):s!==i}function Er({vnode:e,parent:t},n){for(;t;){let s=t.subTree;if(s.suspense&&s.suspense.activeBranch===e&&(s.el=e.el),s===e)(e=t.vnode).el=n,t=t.parent;else break}}var _f={},Sf=()=>Object.create(_f),wf=e=>Object.getPrototypeOf(e)===_f;function tm(e,t,n,s=!1){let i={},r=Sf();e.propsDefaults=Object.create(null),Tf(e,t,i,r);for(let o in e.propsOptions[0])o in i||(i[o]=void 0);Cf(t||{},i,e),n?e.props=s?i:Ic(i):e.type.props?e.props=i:e.props=r,e.attrs=r}function nm(e){for(;e;){if(e.type.__hmrId)return!0;e=e.parent}}function sm(e,t,n,s){let{props:i,attrs:r,vnode:{patchFlag:o}}=e,l=Q(i),[a]=e.propsOptions,u=!1;if(!nm(e)&&(s||o>0)&&!(o&16)){if(o&8){let f=e.vnode.dynamicProps;for(let c=0;c<f.length;c++){let d=f[c];if(wr(e.emitsOptions,d))continue;let g=t[d];if(a)if(ie(r,d))g!==r[d]&&(r[d]=g,u=!0);else{let b=le(d);i[b]=ho(a,l,b,g,e,!1)}else g!==r[d]&&(r[d]=g,u=!0)}}}else{Tf(e,t,i,r)&&(u=!0);let f;for(let c in l)(!t||!ie(t,c)&&((f=Fe(c))===c||!ie(t,f)))&&(a?n&&(n[c]!==void 0||n[f]!==void 0)&&(i[c]=ho(a,l,c,void 0,e,!0)):delete i[c]);if(r!==l)for(let c in r)(!t||!ie(t,c))&&(delete r[c],u=!0)}u&&Nt(e.attrs,\"set\",\"\"),Cf(t||{},i,e)}function Tf(e,t,n,s){let[i,r]=e.propsOptions,o=!1,l;if(t)for(let a in t){if(Ut(a))continue;let u=t[a],f;i&&ie(i,f=le(a))?!r||!r.includes(f)?n[f]=u:(l||(l={}))[f]=u:wr(e.emitsOptions,a)||(!(a in s)||u!==s[a])&&(s[a]=u,o=!0)}if(r){let a=Q(n),u=l||ne;for(let f=0;f<r.length;f++){let c=r[f];n[c]=ho(i,a,c,u[c],e,!ie(u,c))}}return o}function ho(e,t,n,s,i,r){let o=e[n];if(o!=null){let l=ie(o,\"default\");if(l&&s===void 0){let a=o.default;if(o.type!==Function&&!o.skipFactory&&G(a)){let{propsDefaults:u}=i;if(n in u)s=u[n];else{let f=us(i);s=u[n]=a.call(null,t),f()}}else s=a;i.ce&&i.ce._setProp(n,s)}o[0]&&(r&&!l?s=!1:o[1]&&(s===\"\"||s===Fe(n))&&(s=!0))}return s}var im=new WeakMap;function Ef(e,t,n=!1){let s=n?im:t.propsCache,i=s.get(e);if(i)return i;let r=e.props,o={},l=[],a=!1;if(!G(e)){let f=c=>{a=!0;let[d,g]=Ef(c,t,!0);ee(o,d),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!r&&!a)return se(e)&&s.set(e,Bn),Bn;if(B(r))for(let f=0;f<r.length;f++){Y(r[f])||C(\"props must be strings when using array syntax.\",r[f]);let c=le(r[f]);la(c)&&(o[c]=ne)}else if(r){se(r)||C(\"invalid props options\",r);for(let f in r){let c=le(f);if(la(c)){let d=r[f],g=o[c]=B(d)||G(d)?{type:d}:ee({},d),b=g.type,v=!1,P=!0;if(B(b))for(let k=0;k<b.length;++k){let T=b[k],p=G(T)&&T.name;if(p===\"Boolean\"){v=!0;break}else p===\"String\"&&(P=!1)}else v=G(b)&&b.name===\"Boolean\";g[0]=v,g[1]=P,(v||ie(g,\"default\"))&&l.push(c)}}}let u=[o,l];return se(e)&&s.set(e,u),u}function la(e){return e[0]!==\"$\"&&!Ut(e)?!0:(C(`Invalid prop name: \"${e}\" is a reserved property.`),!1)}function rm(e){return e===null?\"null\":typeof e==\"function\"?e.name||\"\":typeof e==\"object\"&&e.constructor&&e.constructor.name||\"\"}function Cf(e,t,n){let s=Q(t),i=n.propsOptions[0],r=Object.keys(e).map(o=>le(o));for(let o in i){let l=i[o];l!=null&&om(o,s[o],l,dt(s),!r.includes(o))}}function om(e,t,n,s,i){let{type:r,required:o,validator:l,skipCheck:a}=n;if(o&&i){C('Missing required prop: \"'+e+'\"');return}if(!(t==null&&!o)){if(r!=null&&r!==!0&&!a){let u=!1,f=B(r)?r:[r],c=[];for(let d=0;d<f.length&&!u;d++){let{valid:g,expectedType:b}=am(t,f[d]);c.push(b||\"\"),u=g}if(!u){C(cm(e,t,c));return}}l&&!l(t,s)&&C('Invalid prop: custom validator check failed for prop \"'+e+'\".')}}var lm=Ie(\"String,Number,Boolean,Function,Symbol,BigInt\");function am(e,t){let n,s=rm(t);if(s===\"null\")n=e===null;else if(lm(s)){let i=typeof e;n=i===s.toLowerCase(),!n&&i===\"object\"&&(n=e instanceof t)}else s===\"Object\"?n=se(e):s===\"Array\"?n=B(e):n=e instanceof t;return{valid:n,expectedType:s}}function cm(e,t,n){if(n.length===0)return`Prop type [] for prop \"${e}\" won't match anything. Did you mean to use type Array instead?`;let s=`Invalid prop: type check failed for prop \"${e}\". Expected ${n.map(Ot).join(\" | \")}`,i=n[0],r=$o(t),o=aa(t,i),l=aa(t,r);return n.length===1&&ca(i)&&!fm(i,r)&&(s+=` with value ${o}`),s+=`, got ${r} `,ca(r)&&(s+=`with value ${l}.`),s}function aa(e,t){return t===\"String\"?`\"${e}\"`:t===\"Number\"?`${Number(e)}`:`${e}`}function ca(e){return[\"string\",\"number\",\"boolean\"].some(n=>e.toLowerCase()===n)}function fm(...e){return e.some(t=>t.toLowerCase()===\"boolean\")}var nl=e=>e===\"_\"||e===\"_ctx\"||e===\"$stable\",sl=e=>B(e)?e.map(Ke):[Ke(e)],um=(e,t,n)=>{if(t._n)return t;let s=Wo((...i)=>(we&&!(n===null&&Ee)&&!(n&&n.root!==we.root)&&C(`Slot \"${e}\" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`),sl(t(...i))),n);return s._c=!1,s},xf=(e,t,n)=>{let s=e._ctx;for(let i in e){if(nl(i))continue;let r=e[i];if(G(r))t[i]=um(i,r,s);else if(r!=null){C(`Non-function value encountered for slot \"${i}\". Prefer function slots for better performance.`);let o=sl(r);t[i]=()=>o}}},Af=(e,t)=>{fs(e.vnode)||C(\"Non-function value encountered for default slot. Prefer function slots for better performance.\");let n=sl(t);e.slots.default=()=>n},po=(e,t,n)=>{for(let s in t)(n||!nl(s))&&(e[s]=t[s])},hm=(e,t,n)=>{let s=e.slots=Sf();if(e.vnode.shapeFlag&32){let i=t._;i?(po(s,t,n),n&&zn(s,\"_\",i,!0)):xf(t,s)}else t&&Af(e,t)},dm=(e,t,n)=>{let{vnode:s,slots:i}=e,r=!0,o=ne;if(s.shapeFlag&32){let l=t._;l?pt?(po(i,t,n),Nt(e,\"set\",\"$slots\")):n&&l===1?r=!1:po(i,t,n):(r=!t.$stable,xf(t,i)),o=t}else t&&(Af(e,t),o={default:1});if(r)for(let l in i)!nl(l)&&o[l]==null&&delete i[l]},gs,Lt;function Pt(e,t){e.appContext.config.performance&&Fi()&&Lt.mark(`vue-${t}-${e.uid}`),Dd(e,t,Fi()?Lt.now():Date.now())}function $t(e,t){if(e.appContext.config.performance&&Fi()){let n=`vue-${t}-${e.uid}`,s=n+\":end\",i=`<${Qs(e,e.type)}> ${t}`;Lt.mark(s),Lt.measure(i,n,s),Lt.clearMeasures(i),Lt.clearMarks(n),Lt.clearMarks(s)}Fd(e,t,Fi()?Lt.now():Date.now())}function Fi(){return gs!==void 0||(typeof window<\"u\"&&window.performance?(gs=!0,Lt=window.performance):gs=!1),gs}var Se=$f;function Nf(e){return Of(e)}function If(e){return Of(e,ep)}function Of(e,t){let n=Gs();n.__VUE__=!0,jo(n.__VUE_DEVTOOLS_GLOBAL_HOOK__,n);let{insert:s,remove:i,patchProp:r,createElement:o,createText:l,createComment:a,setText:u,setElementText:f,parentNode:c,nextSibling:d,setScopeId:g=Te,insertStaticContent:b}=e,v=(h,m,E,M=null,I=null,O=null,H=void 0,F=null,D=pt?!1:!!m.dynamicChildren)=>{if(h===m)return;h&&!ht(h,m)&&(M=si(h),zt(h,I,O,!0),h=null),m.patchFlag===-2&&(D=!1,m.dynamicChildren=null);let{type:R,ref:X,shapeFlag:U}=m;switch(R){case It:P(h,m,E,M);break;case me:k(h,m,E,M);break;case sn:h==null?T(m,E,M,H):p(h,m,E,H);break;case Ce:L(h,m,E,M,I,O,H,F,D);break;default:U&1?A(h,m,E,M,I,O,H,F,D):U&6?J(h,m,E,M,I,O,H,F,D):U&64||U&128?R.process(h,m,E,M,I,O,H,F,D,$n):C(\"Invalid VNode type:\",R,`(${typeof R})`)}X!=null&&I?qn(X,h&&h.ref,O,m||h,!m):X==null&&h&&h.ref!=null&&qn(h.ref,null,O,h,!0)},P=(h,m,E,M)=>{if(h==null)s(m.el=l(m.children),E,M);else{let I=m.el=h.el;m.children!==h.children&&u(I,m.children)}},k=(h,m,E,M)=>{h==null?s(m.el=a(m.children||\"\"),E,M):m.el=h.el},T=(h,m,E,M)=>{[h.el,h.anchor]=b(h.children,m,E,M,h.el,h.anchor)},p=(h,m,E,M)=>{if(m.children!==h.children){let I=d(h.anchor);y(h),[m.el,m.anchor]=b(m.children,E,I,M)}else m.el=h.el,m.anchor=h.anchor},S=({el:h,anchor:m},E,M)=>{let I;for(;h&&h!==m;)I=d(h),s(h,E,M),h=I;s(m,E,M)},y=({el:h,anchor:m})=>{let E;for(;h&&h!==m;)E=d(h),i(h),h=E;i(m)},A=(h,m,E,M,I,O,H,F,D)=>{if(m.type===\"svg\"?H=\"svg\":m.type===\"math\"&&(H=\"mathml\"),h==null)V(m,E,M,I,O,H,F,D);else{let R=h.el&&h.el._isVueCE?h.el:null;try{R&&R._beginPatch(),x(h,m,I,O,H,F,D)}finally{R&&R._endPatch()}}},V=(h,m,E,M,I,O,H,F)=>{let D,R,{props:X,shapeFlag:U,transition:q,dirs:Z}=h;if(D=h.el=o(h.type,O,X&&X.is,X),U&8?f(D,h.children):U&16&&_(h.children,D,null,M,I,Br(h,O),H,F),Z&&Et(h,null,M,\"created\"),N(D,h,h.scopeId,H,M),X){for(let he in X)he!==\"value\"&&!Ut(he)&&r(D,he,null,X[he],O,M);\"value\"in X&&r(D,\"value\",null,X.value,O),(R=X.onVnodeBeforeMount)&&Je(R,M,h)}zn(D,\"__vnode\",h,!0),zn(D,\"__vueParentComponent\",M,!0),Z&&Et(h,null,M,\"beforeMount\");let oe=kf(I,q);oe&&q.beforeEnter(D),s(D,m,E),((R=X&&X.onVnodeMounted)||oe||Z)&&Se(()=>{R&&Je(R,M,h),oe&&q.enter(D),Z&&Et(h,null,M,\"mounted\")},I)},N=(h,m,E,M,I)=>{if(E&&g(h,E),M)for(let O=0;O<M.length;O++)g(h,M[O]);if(I){let O=I.subTree;if(O.patchFlag>0&&O.patchFlag&2048&&(O=Tr(O.children)||O),m===O||Hi(O.type)&&(O.ssContent===m||O.ssFallback===m)){let H=I.vnode;N(h,H,H.scopeId,H.slotScopeIds,I.parent)}}},_=(h,m,E,M,I,O,H,F,D=0)=>{for(let R=D;R<h.length;R++){let X=h[R]=F?Vt(h[R]):Ke(h[R]);v(null,X,m,E,M,I,O,H,F)}},x=(h,m,E,M,I,O,H)=>{let F=m.el=h.el;F.__vnode=m;let{patchFlag:D,dynamicChildren:R,dirs:X}=m;D|=h.patchFlag&16;let U=h.props||ne,q=m.props||ne,Z;if(E&&cn(E,!1),(Z=q.onVnodeBeforeUpdate)&&Je(Z,E,m,h),X&&Et(m,h,E,\"beforeUpdate\"),E&&cn(E,!0),pt&&(D=0,H=!1,R=null),(U.innerHTML&&q.innerHTML==null||U.textContent&&q.textContent==null)&&f(F,\"\"),R?($(h.dynamicChildren,R,F,E,M,Br(m,I),O),Li(h,m)):H||re(h,m,F,null,E,M,Br(m,I),O,!1),D>0){if(D&16)w(F,U,q,E,I);else if(D&2&&U.class!==q.class&&r(F,\"class\",null,q.class,I),D&4&&r(F,\"style\",U.style,q.style,I),D&8){let oe=m.dynamicProps;for(let he=0;he<oe.length;he++){let ue=oe[he],We=U[ue],Me=q[ue];(Me!==We||ue===\"value\")&&r(F,ue,We,Me,I,E)}}D&1&&h.children!==m.children&&f(F,m.children)}else!H&&R==null&&w(F,U,q,E,I);((Z=q.onVnodeUpdated)||X)&&Se(()=>{Z&&Je(Z,E,m,h),X&&Et(m,h,E,\"updated\")},M)},$=(h,m,E,M,I,O,H)=>{for(let F=0;F<m.length;F++){let D=h[F],R=m[F],X=D.el&&(D.type===Ce||!ht(D,R)||D.shapeFlag&198)?c(D.el):E;v(D,R,X,null,M,I,O,H,!0)}},w=(h,m,E,M,I)=>{if(m!==E){if(m!==ne)for(let O in m)!Ut(O)&&!(O in E)&&r(h,O,m[O],null,I,M);for(let O in E){if(Ut(O))continue;let H=E[O],F=m[O];H!==F&&O!==\"value\"&&r(h,O,F,H,I,M)}\"value\"in E&&r(h,\"value\",m.value,E.value,I)}},L=(h,m,E,M,I,O,H,F,D)=>{let R=m.el=h?h.el:l(\"\"),X=m.anchor=h?h.anchor:l(\"\"),{patchFlag:U,dynamicChildren:q,slotScopeIds:Z}=m;(pt||U&2048)&&(U=0,D=!1,q=null),Z&&(F=F?F.concat(Z):Z),h==null?(s(R,E,M),s(X,E,M),_(m.children||[],E,X,I,O,H,F,D)):U>0&&U&64&&q&&h.dynamicChildren&&h.dynamicChildren.length===q.length?($(h.dynamicChildren,q,E,I,O,H,F),Li(h,m)):re(h,m,E,X,I,O,H,F,D)},J=(h,m,E,M,I,O,H,F,D)=>{m.slotScopeIds=F,h==null?m.shapeFlag&512?I.ctx.activate(m,E,M,H,D):z(m,E,M,I,O,H,D):K(h,m,D)},z=(h,m,E,M,I,O,H)=>{let F=h.component=Uf(h,M,I);if(F.type.__hmrId&&Nd(F),Un(h),Pt(F,\"mount\"),fs(h)&&(F.ctx.renderer=$n),Pt(F,\"init\"),Kf(F,!1,H),$t(F,\"init\"),pt&&(h.el=null),F.asyncDep){if(I&&I.registerDep(F,W,H),!h.el){let D=F.subTree=ge(me);k(null,D,m,E),h.placeholder=D.el}}else W(F,h,m,E,I,O,H);jn(),$t(F,\"mount\")},K=(h,m,E)=>{let M=m.component=h.component;if(em(h,m,E))if(M.asyncDep&&!M.asyncResolved){Un(m),j(M,m,E),jn();return}else M.next=m,M.update();else m.el=h.el,M.vnode=m},W=(h,m,E,M,I,O,H)=>{let F=()=>{if(h.isMounted){let{next:U,bu:q,u:Z,parent:oe,vnode:he}=h;{let Qe=Rf(h);if(Qe){U&&(U.el=he.el,j(h,U,H)),Qe.asyncDep.then(()=>{Se(()=>{h.isUnmounted||R()},I)});return}}let ue=U,We;Un(U||h.vnode),cn(h,!1),U?(U.el=he.el,j(h,U,H)):U=he,q&&nn(q),(We=U.props&&U.props.onVnodeBeforeUpdate)&&Je(We,oe,U,he),cn(h,!0),Pt(h,\"render\");let Me=gi(h);$t(h,\"render\");let ft=h.subTree;h.subTree=Me,Pt(h,\"patch\"),v(ft,Me,c(ft.el),si(ft),h,I,O),$t(h,\"patch\"),U.el=Me.el,ue===null&&Er(h,Me.el),Z&&Se(Z,I),(We=U.props&&U.props.onVnodeUpdated)&&Se(()=>Je(We,oe,U,he),I),Bc(h),jn()}else{let U,{el:q,props:Z}=m,{bm:oe,m:he,parent:ue,root:We,type:Me}=h,ft=Kt(m);if(cn(h,!1),oe&&nn(oe),!ft&&(U=Z&&Z.onVnodeBeforeMount)&&Je(U,ue,m),cn(h,!0),q&&kr){let Qe=()=>{Pt(h,\"render\"),h.subTree=gi(h),$t(h,\"render\"),Pt(h,\"hydrate\"),kr(q,h.subTree,h,I,null),$t(h,\"hydrate\")};ft&&Me.__asyncHydrate?Me.__asyncHydrate(q,h,Qe):Qe()}else{We.ce&&We.ce._hasShadowRoot()&&We.ce._injectChildStyle(Me,h.parent?h.parent.type:void 0),Pt(h,\"render\");let Qe=h.subTree=gi(h);$t(h,\"render\"),Pt(h,\"patch\"),v(null,Qe,E,M,h,I,O),$t(h,\"patch\"),m.el=Qe.el}if(he&&Se(he,I),!ft&&(U=Z&&Z.onVnodeMounted)){let Qe=m;Se(()=>Je(U,ue,Qe),I)}(m.shapeFlag&256||ue&&Kt(ue.vnode)&&ue.vnode.shapeFlag&256)&&h.a&&Se(h.a,I),h.isMounted=!0,so(h),m=E=M=null}};h.scope.on();let D=h.effect=new Cn(F);h.scope.off();let R=h.update=D.run.bind(D),X=h.job=D.runIfDirty.bind(D);X.i=h,X.id=h.uid,D.scheduler=()=>mr(X),cn(h,!0),D.onTrack=h.rtc?U=>nn(h.rtc,U):void 0,D.onTrigger=h.rtg?U=>nn(h.rtg,U):void 0,R()},j=(h,m,E)=>{m.component=h;let M=h.vnode.props;h.vnode=m,h.next=null,sm(h,m.props,M,E),dm(h,m.children,E),bt(),Kl(h),vt()},re=(h,m,E,M,I,O,H,F,D=!1)=>{let R=h&&h.children,X=h?h.shapeFlag:0,U=m.children,{patchFlag:q,shapeFlag:Z}=m;if(q>0){if(q&128){Rt(R,U,E,M,I,O,H,F,D);return}else if(q&256){Ze(R,U,E,M,I,O,H,F,D);return}}Z&8?(X&16&&hs(R,I,O),U!==R&&f(E,U)):X&16?Z&16?Rt(R,U,E,M,I,O,H,F,D):hs(R,I,O,!0):(X&8&&f(E,\"\"),Z&16&&_(U,E,M,I,O,H,F,D))},Ze=(h,m,E,M,I,O,H,F,D)=>{h=h||Bn,m=m||Bn;let R=h.length,X=m.length,U=Math.min(R,X),q;for(q=0;q<U;q++){let Z=m[q]=D?Vt(m[q]):Ke(m[q]);v(h[q],Z,E,null,I,O,H,F,D)}R>X?hs(h,I,O,!0,!1,U):_(m,E,M,I,O,H,F,D,U)},Rt=(h,m,E,M,I,O,H,F,D)=>{let R=0,X=m.length,U=h.length-1,q=X-1;for(;R<=U&&R<=q;){let Z=h[R],oe=m[R]=D?Vt(m[R]):Ke(m[R]);if(ht(Z,oe))v(Z,oe,E,null,I,O,H,F,D);else break;R++}for(;R<=U&&R<=q;){let Z=h[U],oe=m[q]=D?Vt(m[q]):Ke(m[q]);if(ht(Z,oe))v(Z,oe,E,null,I,O,H,F,D);else break;U--,q--}if(R>U){if(R<=q){let Z=q+1,oe=Z<X?m[Z].el:M;for(;R<=q;)v(null,m[R]=D?Vt(m[R]):Ke(m[R]),E,oe,I,O,H,F,D),R++}}else if(R>q)for(;R<=U;)zt(h[R],I,O,!0),R++;else{let Z=R,oe=R,he=new Map;for(R=oe;R<=q;R++){let Be=m[R]=D?Vt(m[R]):Ke(m[R]);Be.key!=null&&(he.has(Be.key)&&C(\"Duplicate keys found during update:\",JSON.stringify(Be.key),\"Make sure keys are unique.\"),he.set(Be.key,R))}let ue,We=0,Me=q-oe+1,ft=!1,Qe=0,ds=new Array(Me);for(R=0;R<Me;R++)ds[R]=0;for(R=Z;R<=U;R++){let Be=h[R];if(We>=Me){zt(Be,I,O,!0);continue}let St;if(Be.key!=null)St=he.get(Be.key);else for(ue=oe;ue<=q;ue++)if(ds[ue-oe]===0&&ht(Be,m[ue])){St=ue;break}St===void 0?zt(Be,I,O,!0):(ds[St-oe]=R+1,St>=Qe?Qe=St:ft=!0,v(Be,m[St],E,null,I,O,H,F,D),We++)}let Pl=ft?pm(ds):Bn;for(ue=Pl.length-1,R=Me-1;R>=0;R--){let Be=oe+R,St=m[Be],$l=m[Be+1],Dl=Be+1<X?$l.el||Mf($l):M;ds[R]===0?v(null,St,E,Dl,I,O,H,F,D):ft&&(ue<0||R!==Pl[ue]?Pn(St,E,Dl,2):ue--)}}},Pn=(h,m,E,M,I=null)=>{let{el:O,type:H,transition:F,children:D,shapeFlag:R}=h;if(R&6){Pn(h.component.subTree,m,E,M);return}if(R&128){h.suspense.move(m,E,M);return}if(R&64){H.move(h,m,E,$n);return}if(H===Ce){s(O,m,E);for(let U=0;U<D.length;U++)Pn(D[U],m,E,M);s(h.anchor,m,E);return}if(H===sn){S(h,m,E);return}if(M!==2&&R&1&&F)if(M===0)F.beforeEnter(O),s(O,m,E),Se(()=>F.enter(O),I);else{let{leave:U,delayLeave:q,afterLeave:Z}=F,oe=()=>{h.ctx.isUnmounted?i(O):s(O,m,E)},he=()=>{O._isLeaving&&O[Ct](!0),U(O,()=>{oe(),Z&&Z()})};q?q(O,oe,he):he()}else s(O,m,E)},zt=(h,m,E,M=!1,I=!1)=>{let{type:O,props:H,ref:F,children:D,dynamicChildren:R,shapeFlag:X,patchFlag:U,dirs:q,cacheIndex:Z}=h;if(U===-2&&(I=!1),F!=null&&(bt(),qn(F,null,E,h,!0),vt()),Z!=null&&(m.renderCache[Z]=void 0),X&256){m.ctx.deactivate(h);return}let oe=X&1&&q,he=!Kt(h),ue;if(he&&(ue=H&&H.onVnodeBeforeUnmount)&&Je(ue,m,h),X&6)mh(h.component,E,M);else{if(X&128){h.suspense.unmount(E,M);return}oe&&Et(h,null,m,\"beforeUnmount\"),X&64?h.type.remove(h,m,E,$n,M):R&&!R.hasOnce&&(O!==Ce||U>0&&U&64)?hs(R,m,E,!1,!0):(O===Ce&&U&384||!I&&X&16)&&hs(D,m,E),M&&Nr(h)}(he&&(ue=H&&H.onVnodeUnmounted)||oe)&&Se(()=>{ue&&Je(ue,m,h),oe&&Et(h,null,m,\"unmounted\")},E)},Nr=h=>{let{type:m,el:E,anchor:M,transition:I}=h;if(m===Ce){h.patchFlag>0&&h.patchFlag&2048&&I&&!I.persisted?h.children.forEach(H=>{H.type===me?i(H.el):Nr(H)}):ph(E,M);return}if(m===sn){y(h);return}let O=()=>{i(E),I&&!I.persisted&&I.afterLeave&&I.afterLeave()};if(h.shapeFlag&1&&I&&!I.persisted){let{leave:H,delayLeave:F}=I,D=()=>H(E,O);F?F(h.el,O,D):D()}else O()},ph=(h,m)=>{let E;for(;h!==m;)E=d(h),i(h),h=E;i(m)},mh=(h,m,E)=>{h.type.__hmrId&&Id(h);let{bum:M,scope:I,job:O,subTree:H,um:F,m:D,a:R}=h;Vi(D),Vi(R),M&&nn(M),I.stop(),O&&(O.flags|=8,zt(H,h,m,E)),F&&Se(F,m),Se(()=>{h.isUnmounted=!0},m),$d(h)},hs=(h,m,E,M=!1,I=!1,O=0)=>{for(let H=O;H<h.length;H++)zt(h[H],m,E,M,I)},si=h=>{if(h.shapeFlag&6)return si(h.component.subTree);if(h.shapeFlag&128)return h.suspense.next();let m=d(h.anchor||h.el),E=m&&m[zc];return E?d(E):m},Ir=!1,Ml=(h,m,E)=>{let M;h==null?m._vnode&&(zt(m._vnode,null,null,!0),M=m._vnode.component):v(m._vnode||null,h,m,null,null,null,E),m._vnode=h,Ir||(Ir=!0,Kl(M),ki(),Ir=!1)},$n={p:v,um:zt,m:Pn,r:Nr,mt:z,mc:_,pc:re,pbc:$,n:si,o:e},Or,kr;return t&&([Or,kr]=t($n)),{render:Ml,hydrate:Or,createApp:Jp(Ml,Or)}}function Br({type:e,props:t},n){return n===\"svg\"&&e===\"foreignObject\"||n===\"mathml\"&&e===\"annotation-xml\"&&t&&t.encoding&&t.encoding.includes(\"html\")?void 0:n}function cn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function kf(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Li(e,t,n=!1){let s=e.children,i=t.children;if(B(s)&&B(i))for(let r=0;r<s.length;r++){let o=s[r],l=i[r];l.shapeFlag&1&&!l.dynamicChildren&&((l.patchFlag<=0||l.patchFlag===32)&&(l=i[r]=Vt(i[r]),l.el=o.el),!n&&l.patchFlag!==-2&&Li(o,l)),l.type===It&&(l.patchFlag===-1&&(l=i[r]=Vt(l)),l.el=o.el),l.type===me&&!l.el&&(l.el=o.el),l.el&&(l.el.__vnode=l)}}function pm(e){let t=e.slice(),n=[0],s,i,r,o,l,a=e.length;for(s=0;s<a;s++){let u=e[s];if(u!==0){if(i=n[n.length-1],e[i]<u){t[s]=i,n.push(s);continue}for(r=0,o=n.length-1;r<o;)l=r+o>>1,e[n[l]]<u?r=l+1:o=l;u<e[n[r]]&&(r>0&&(t[s]=n[r-1]),n[r]=s)}}for(r=n.length,o=n[r-1];r-- >0;)n[r]=o,o=t[o];return n}function Rf(e){let t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Rf(t)}function Vi(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}function Mf(e){if(e.placeholder)return e.placeholder;let t=e.component;return t?Mf(t.subTree):null}var Hi=e=>e.__isSuspense,mo=0,mm={name:\"Suspense\",__isSuspense:!0,process(e,t,n,s,i,r,o,l,a,u){if(e==null)ym(t,n,s,i,r,o,l,a,u);else{if(r&&r.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}bm(e,t,n,s,i,o,l,a,u)}},hydrate:vm,normalize:_m},gm=mm;function Hs(e,t){let n=e.props&&e.props[t];G(n)&&n()}function ym(e,t,n,s,i,r,o,l,a){let{p:u,o:{createElement:f}}=a,c=f(\"div\"),d=e.suspense=Pf(e,i,s,t,c,n,r,o,l,a);u(null,d.pendingBranch=e.ssContent,c,null,s,d,r,o),d.deps>0?(Hs(e,\"onPending\"),Hs(e,\"onFallback\"),u(null,e.ssFallback,t,n,s,null,r,o),Gn(d,e.ssFallback)):d.resolve(!1,!0)}function bm(e,t,n,s,i,r,o,l,{p:a,um:u,o:{createElement:f}}){let c=t.suspense=e.suspense;c.vnode=t,t.el=e.el;let d=t.ssContent,g=t.ssFallback,{activeBranch:b,pendingBranch:v,isInFallback:P,isHydrating:k}=c;if(v)c.pendingBranch=d,ht(v,d)?(a(v,d,c.hiddenContainer,null,i,c,r,o,l),c.deps<=0?c.resolve():P&&(k||(a(b,g,n,s,i,null,r,o,l),Gn(c,g)))):(c.pendingId=mo++,k?(c.isHydrating=!1,c.activeBranch=v):u(v,i,c),c.deps=0,c.effects.length=0,c.hiddenContainer=f(\"div\"),P?(a(null,d,c.hiddenContainer,null,i,c,r,o,l),c.deps<=0?c.resolve():(a(b,g,n,s,i,null,r,o,l),Gn(c,g))):b&&ht(b,d)?(a(b,d,n,s,i,c,r,o,l),c.resolve(!0)):(a(null,d,c.hiddenContainer,null,i,c,r,o,l),c.deps<=0&&c.resolve()));else if(b&&ht(b,d))a(b,d,n,s,i,c,r,o,l),Gn(c,d);else if(Hs(t,\"onPending\"),c.pendingBranch=d,d.shapeFlag&512?c.pendingId=d.component.suspenseId:c.pendingId=mo++,a(null,d,c.hiddenContainer,null,i,c,r,o,l),c.deps<=0)c.resolve();else{let{timeout:T,pendingId:p}=c;T>0?setTimeout(()=>{c.pendingId===p&&c.fallback(g)},T):T===0&&c.fallback(g)}}var fa=!1;function Pf(e,t,n,s,i,r,o,l,a,u,f=!1){fa||(fa=!0,console[console.info?\"info\":\"log\"](\"<Suspense> is an experimental feature and its API will likely change.\"));let{p:c,m:d,um:g,n:b,o:{parentNode:v,remove:P}}=u,k,T=Sm(e);T&&t&&t.pendingBranch&&(k=t.pendingId,t.deps++);let p=e.props?Ei(e.props.timeout):void 0;Bo(p,\"Suspense timeout\");let S=r,y={vnode:e,parent:t,parentComponent:n,namespace:o,container:s,hiddenContainer:i,deps:0,pendingId:mo++,timeout:typeof p==\"number\"?p:-1,activeBranch:null,pendingBranch:null,isInFallback:!f,isHydrating:f,isUnmounted:!1,effects:[],resolve(A=!1,V=!1){{if(!A&&!y.pendingBranch)throw new Error(\"suspense.resolve() is called without a pending branch.\");if(y.isUnmounted)throw new Error(\"suspense.resolve() is called on an already unmounted suspense boundary.\")}let{vnode:N,activeBranch:_,pendingBranch:x,pendingId:$,effects:w,parentComponent:L,container:J,isInFallback:z}=y,K=!1;y.isHydrating?y.isHydrating=!1:A||(K=_&&x.transition&&x.transition.mode===\"out-in\",K&&(_.transition.afterLeave=()=>{$===y.pendingId&&(d(x,J,r===S?b(_):r,0),Zn(w),z&&N.ssFallback&&(N.ssFallback.el=null))}),_&&(v(_.el)===J&&(r=b(_)),g(_,L,y,!0),!K&&z&&N.ssFallback&&Se(()=>N.ssFallback.el=null,y)),K||d(x,J,r,0)),Gn(y,x),y.pendingBranch=null,y.isInFallback=!1;let W=y.parent,j=!1;for(;W;){if(W.pendingBranch){W.effects.push(...w),j=!0;break}W=W.parent}!j&&!K&&Zn(w),y.effects=[],T&&t&&t.pendingBranch&&k===t.pendingId&&(t.deps--,t.deps===0&&!V&&t.resolve()),Hs(N,\"onResolve\")},fallback(A){if(!y.pendingBranch)return;let{vnode:V,activeBranch:N,parentComponent:_,container:x,namespace:$}=y;Hs(V,\"onFallback\");let w=b(N),L=()=>{y.isInFallback&&(c(null,A,x,w,_,null,$,l,a),Gn(y,A))},J=A.transition&&A.transition.mode===\"out-in\";J&&(N.transition.afterLeave=L),y.isInFallback=!0,g(N,_,null,!0),J||L()},move(A,V,N){y.activeBranch&&d(y.activeBranch,A,V,N),y.container=A},next(){return y.activeBranch&&b(y.activeBranch)},registerDep(A,V,N){let _=!!y.pendingBranch;_&&y.deps++;let x=A.vnode.el;A.asyncDep.catch($=>{ln($,A,0)}).then($=>{if(A.isUnmounted||y.isUnmounted||y.pendingId!==A.suspenseId)return;A.asyncResolved=!0;let{vnode:w}=A;Un(w),bo(A,$,!1),x&&(w.el=x);let L=!x&&A.subTree.el;V(A,w,v(x||A.subTree.el),x?null:b(A.subTree),y,o,N),L&&(w.placeholder=null,P(L)),Er(A,w.el),jn(),_&&--y.deps===0&&y.resolve()})},unmount(A,V){y.isUnmounted=!0,y.activeBranch&&g(y.activeBranch,n,A,V),y.pendingBranch&&g(y.pendingBranch,n,A,V)}};return y}function vm(e,t,n,s,i,r,o,l,a){let u=t.suspense=Pf(t,s,n,e.parentNode,document.createElement(\"div\"),null,i,r,o,l,!0),f=a(e,u.pendingBranch=t.ssContent,n,u,r,o);return u.deps===0&&u.resolve(!1,!0),f}function _m(e){let{shapeFlag:t,children:n}=e,s=t&32;e.ssContent=ua(s?n.default:n),e.ssFallback=s?ua(n.fallback):ge(me)}function ua(e){let t;if(G(e)){let n=Nn&&e._c;n&&(e._d=!1,Bs()),e=e(),n&&(e._d=!0,t=Le,Df())}if(B(e)){let n=Tr(e);!n&&e.filter(s=>s!==Xo).length>0&&C(\"<Suspense> slots expect a single root node.\"),e=n}return e=Ke(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function $f(e,t){t&&t.pendingBranch?B(e)?t.effects.push(...e):t.effects.push(e):Zn(e)}function Gn(e,t){e.activeBranch=t;let{vnode:n,parentComponent:s}=e,i=t.el;for(;!i&&t.component;)t=t.component.subTree,i=t.el;n.el=i,s&&s.subTree===n&&(s.vnode.el=i,Er(s,i))}function Sm(e){let t=e.props&&e.props.suspensible;return t!=null&&t!==!1}var Ce=Symbol.for(\"v-fgt\"),It=Symbol.for(\"v-txt\"),me=Symbol.for(\"v-cmt\"),sn=Symbol.for(\"v-stc\"),Is=[],Le=null;function Bs(e=!1){Is.push(Le=e?null:[])}function Df(){Is.pop(),Le=Is[Is.length-1]||null}var Nn=1;function Us(e,t=!1){Nn+=e,e<0&&Le&&t&&(Le.hasOnce=!0)}function Ff(e){return e.dynamicChildren=Nn>0?Le||Bn:null,Df(),Nn>0&&Le&&Le.push(e),e}function wm(e,t,n,s,i,r){return Ff(il(e,t,n,s,i,r,!0))}function Bi(e,t,n,s,i){return Ff(ge(e,t,n,s,i,!0))}function kt(e){return e?e.__v_isVNode===!0:!1}function ht(e,t){if(t.shapeFlag&6&&e.component){let n=pi.get(t.type);if(n&&n.has(e.component))return e.shapeFlag&=-257,t.shapeFlag&=-513,!1}return e.type===t.type&&e.key===t.key}var go;function Tm(e){go=e}var Em=(...e)=>Cm(...go?go(e,Ee):e),Lf=({key:e})=>e??null,yi=({ref:e,ref_key:t,ref_for:n})=>(typeof e==\"number\"&&(e=\"\"+e),e!=null?Y(e)||ye(e)||G(e)?{i:Ee,r:e,k:t,f:!!n}:e:null);function il(e,t=null,n=null,s=0,i=null,r=e===Ce?0:1,o=!1,l=!1){let a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Lf(t),ref:t&&yi(t),scopeId:gr,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Ee};return l?(ol(a,n),r&128&&e.normalize(a)):n&&(a.shapeFlag|=Y(n)?8:16),a.key!==a.key&&C(\"VNode created with invalid key (NaN). VNode type:\",a.type),Nn>0&&!o&&Le&&(a.patchFlag>0||r&6)&&a.patchFlag!==32&&Le.push(a),a}var ge=Em;function Cm(e,t=null,n=null,s=0,i=null,r=!1){if((!e||e===Xo)&&(e||C(`Invalid vnode type when creating vnode: ${e}.`),e=me),kt(e)){let l=ct(e,t,!0);return n&&ol(l,n),Nn>0&&!r&&Le&&(l.shapeFlag&6?Le[Le.indexOf(e)]=l:Le.push(l)),l.patchFlag=-2,l}if(Jf(e)&&(e=e.__vccOpts),t){t=Vf(t);let{class:l,style:a}=t;l&&!Y(l)&&(t.class=cs(l)),se(a)&&(xn(a)&&!B(a)&&(a=ee({},a)),t.style=as(a))}let o=Y(e)?1:Hi(e)?128:Yc(e)?64:se(e)?4:G(e)?2:0;return o&4&&xn(e)&&(e=Q(e),C(\"Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with `markRaw` or using `shallowRef` instead of `ref`.\",`\nComponent that was made reactive: `,e)),il(e,t,n,s,i,o,r,!0)}function Vf(e){return e?xn(e)||wf(e)?ee({},e):e:null}function ct(e,t,n=!1,s=!1){let{props:i,ref:r,patchFlag:o,children:l,transition:a}=e,u=t?Bf(i||{},t):i,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&Lf(u),ref:t&&t.ref?n&&r?B(r)?r.concat(yi(t)):[r,yi(t)]:yi(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o===-1&&B(l)?l.map(Hf):l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ce?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ct(e.ssContent),ssFallback:e.ssFallback&&ct(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&s&&Gt(f,a.clone(f)),f}function Hf(e){let t=ct(e);return B(e.children)&&(t.children=e.children.map(Hf)),t}function rl(e=\" \",t=0){return ge(It,null,e,t)}function xm(e,t){let n=ge(sn,null,e);return n.staticCount=t,n}function Am(e=\"\",t=!1){return t?(Bs(),Bi(me,null,e)):ge(me,null,e)}function Ke(e){return e==null||typeof e==\"boolean\"?ge(me):B(e)?ge(Ce,null,e.slice()):kt(e)?Vt(e):ge(It,null,String(e))}function Vt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ct(e)}function ol(e,t){let n=0,{shapeFlag:s}=e;if(t==null)t=null;else if(B(t))n=16;else if(typeof t==\"object\")if(s&65){let i=t.default;i&&(i._c&&(i._d=!1),ol(e,i()),i._c&&(i._d=!0));return}else{n=32;let i=t._;!i&&!wf(t)?t._ctx=Ee:i===3&&Ee&&(Ee.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else G(t)?(t={default:t,_ctx:Ee},n=32):(t=String(t),s&64?(n=16,t=[rl(t)]):n=8);e.children=t,e.shapeFlag|=n}function Bf(...e){let t={};for(let n=0;n<e.length;n++){let s=e[n];for(let i in s)if(i===\"class\")t.class!==s.class&&(t.class=cs([t.class,s.class]));else if(i===\"style\")t.style=as([t.style,s.style]);else if(on(i)){let r=t[i],o=s[i];o&&r!==o&&!(B(r)&&r.includes(o))&&(t[i]=r?[].concat(r,o):o)}else i!==\"\"&&(t[i]=s[i])}return t}function Je(e,t,n,s=null){at(e,t,7,[n,s])}var Nm=mf(),Im=0;function Uf(e,t,n){let s=e.type,i=(t?t.appContext:e.appContext)||Nm,r={uid:Im++,vnode:e,type:s,parent:t,appContext:i,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Ms(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(i.provides),ids:t?t.ids:[\"\",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Ef(s,i),emitsOptions:yf(s,i),emit:null,emitted:null,propsDefaults:ne,inheritAttrs:s.inheritAttrs,ctx:ne,data:ne,props:ne,attrs:ne,slots:ne,refs:ne,setupState:ne,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return r.ctx=Cp(r),r.root=t?t.root:r,r.emit=Yp.bind(null,r),e.ce&&e.ce(r),r}var we=null,He=()=>we||Ee,Ui,Jn;{let e=Gs(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),r=>{i.length>1?i.forEach(o=>o(r)):i[0](r)}};Ui=t(\"__VUE_INSTANCE_SETTERS__\",n=>we=n),Jn=t(\"__VUE_SSR_SETTERS__\",n=>In=n)}var us=e=>{let t=we;return Ui(e),e.scope.on(),()=>{e.scope.off(),Ui(t)}},ji=()=>{we&&we.scope.off(),Ui(null)},Om=Ie(\"slot,component\");function yo(e,{isNativeTag:t}){(Om(e)||t(e))&&C(\"Do not use built-in or reserved HTML elements as component id: \"+e)}function jf(e){return e.vnode.shapeFlag&4}var In=!1;function Kf(e,t=!1,n=!1){t&&Jn(t);let{props:s,children:i}=e.vnode,r=jf(e);tm(e,s,r,t),hm(e,i,n||t);let o=r?km(e,t):void 0;return t&&Jn(!1),o}function km(e,t){let n=e.type;{if(n.name&&yo(n.name,e.appContext.config),n.components){let i=Object.keys(n.components);for(let r=0;r<i.length;r++)yo(i[r],e.appContext.config)}if(n.directives){let i=Object.keys(n.directives);for(let r=0;r<i.length;r++)jc(i[r])}n.compilerOptions&&ll()&&C('\"compilerOptions\" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.')}e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Ns),xp(e);let{setup:s}=n;if(s){bt();let i=e.setupContext=s.length>1?Gf(e):null,r=us(e),o=Rn(s,e,0,[dt(e.props),i]),l=sr(o);if(vt(),r(),(l||e.sp)&&!Kt(e)&&zo(e),l){if(o.then(ji,ji),t)return o.then(a=>{bo(e,a,t)}).catch(a=>{ln(a,e,0)});if(e.asyncDep=o,!e.suspense){let a=Qs(e,n);C(`Component <${a}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`)}}else bo(e,o,t)}else qf(e,t)}function bo(e,t,n){G(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:se(t)?(kt(t)&&C(\"setup() should not return VNodes directly - return a render function instead.\"),e.devtoolsRawSetupState=t,e.setupState=Ho(t),Ap(e)):t!==void 0&&C(`setup() should return an object. Received: ${t===null?\"null\":typeof t}`),qf(e,n)}var Os,vo;function Wf(e){Os=e,vo=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,Ep))}}var ll=()=>!Os;function qf(e,t,n){let s=e.type;if(!e.render){if(!t&&Os&&!s.render){let i=s.template||tl(e).template;if(i){Pt(e,\"compile\");let{isCustomElement:r,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:a}=s,u=ee(ee({isCustomElement:r,delimiters:l},o),a);s.render=Os(i,u),$t(e,\"compile\")}}e.render=s.render||Te,vo&&vo(e)}{let i=us(e);bt();try{Up(e)}finally{vt(),i()}}!s.render&&e.render===Te&&!t&&(!Os&&s.template?C('Component provided template option but runtime compilation is not supported in this build of Vue. Use \"vue.esm-browser.js\" instead.'):C(\"Component is missing template or render function: \",s))}var Rm={get(e,t){return Di(),Ne(e,\"get\",\"\"),e[t]},set(){return C(\"setupContext.attrs is readonly.\"),!1},deleteProperty(){return C(\"setupContext.attrs is readonly.\"),!1}};function Mm(e){return new Proxy(e.slots,{get(t,n){return Ne(e,\"get\",\"$slots\"),t[n]}})}function Gf(e){let t=n=>{if(e.exposed&&C(\"expose() should be called only once per setup().\"),n!=null){let s=typeof n;s===\"object\"&&(B(n)?s=\"array\":ye(n)&&(s=\"ref\")),s!==\"object\"&&C(`expose() should be passed a plain object, received ${s}.`)}e.exposed=n||{}};{let n,s;return Object.freeze({get attrs(){return n||(n=new Proxy(e.attrs,Rm))},get slots(){return s||(s=Mm(e))},get emit(){return(i,...r)=>e.emit(i,...r)},expose:t})}}function Zs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ho(Oc(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in wn)return wn[n](e)},has(t,n){return n in t||n in wn}})):e.proxy}var Pm=/(?:^|[-_])\\w/g,$m=e=>e.replace(Pm,t=>t.toUpperCase()).replace(/[-_]/g,\"\");function es(e,t=!0){return G(e)?e.displayName||e.name:e.name||t&&e.__name}function Qs(e,t,n=!1){let s=es(t);if(!s&&t.__file){let i=t.__file.match(/([^/\\\\]+)\\.\\w+$/);i&&(s=i[1])}if(!s&&e){let i=r=>{for(let o in r)if(r[o]===t)return o};s=i(e.components)||e.parent&&i(e.parent.type.components)||i(e.appContext.components)}return s?$m(s):n?\"App\":\"Anonymous\"}function Jf(e){return G(e)&&\"__vccOpts\"in e}var zf=(e,t)=>{let n=md(e,t,In);{let s=He();s&&s.appContext.config.warnRecursiveComputed&&(n._warnRecursive=!0)}return n};function Yf(e,t,n){try{Us(-1);let s=arguments.length;return s===2?se(t)&&!B(t)?kt(t)?ge(e,null,[t]):ge(e,t):ge(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&kt(n)&&(n=[n]),ge(e,t,n))}finally{Us(1)}}function Xf(){if(typeof window>\"u\")return;let e={style:\"color:#3ba776\"},t={style:\"color:#1677ff\"},n={style:\"color:#f5222d\"},s={style:\"color:#eb2f96\"},i={__vue_custom_formatter:!0,header(c){if(!se(c))return null;if(c.__isVue)return[\"div\",e,\"VueInstance\"];if(ye(c)){bt();let d=c.value;return vt(),[\"div\",{},[\"span\",e,f(c)],\"<\",l(d),\">\"]}else{if(jt(c))return[\"div\",{},[\"span\",e,Re(c)?\"ShallowReactive\":\"Reactive\"],\"<\",l(c),`>${lt(c)?\" (readonly)\":\"\"}`];if(lt(c))return[\"div\",{},[\"span\",e,Re(c)?\"ShallowReadonly\":\"Readonly\"],\"<\",l(c),\">\"]}return null},hasBody(c){return c&&c.__isVue},body(c){if(c&&c.__isVue)return[\"div\",{},...r(c.$)]}};function r(c){let d=[];c.type.props&&c.props&&d.push(o(\"props\",Q(c.props))),c.setupState!==ne&&d.push(o(\"setup\",c.setupState)),c.data!==ne&&d.push(o(\"data\",Q(c.data)));let g=a(c,\"computed\");g&&d.push(o(\"computed\",g));let b=a(c,\"inject\");return b&&d.push(o(\"injected\",b)),d.push([\"div\",{},[\"span\",{style:s.style+\";opacity:0.66\"},\"$ (internal): \"],[\"object\",{object:c}]]),d}function o(c,d){return d=ee({},d),Object.keys(d).length?[\"div\",{style:\"line-height:1.25em;margin-bottom:0.6em\"},[\"div\",{style:\"color:#476582\"},c],[\"div\",{style:\"padding-left:1.25em\"},...Object.keys(d).map(g=>[\"div\",{},[\"span\",s,g+\": \"],l(d[g],!1)])]]:[\"span\",{}]}function l(c,d=!0){return typeof c==\"number\"?[\"span\",t,c]:typeof c==\"string\"?[\"span\",n,JSON.stringify(c)]:typeof c==\"boolean\"?[\"span\",s,c]:se(c)?[\"object\",{object:d?Q(c):c}]:[\"span\",n,String(c)]}function a(c,d){let g=c.type;if(G(g))return;let b={};for(let v in c.ctx)u(g,v,d)&&(b[v]=c.ctx[v]);return b}function u(c,d,g){let b=c[g];if(B(b)&&b.includes(d)||se(b)&&d in b||c.extends&&u(c.extends,d,g)||c.mixins&&c.mixins.some(v=>u(v,d,g)))return!0}function f(c){return Re(c)?\"ShallowRef\":c.effect?\"ComputedRef\":\"Ref\"}window.devtoolsFormatters?window.devtoolsFormatters.push(i):window.devtoolsFormatters=[i]}function Dm(e,t,n,s){let i=n[s];if(i&&Zf(i,e))return i;let r=t();return r.memo=e.slice(),r.cacheIndex=s,n[s]=r}function Zf(e,t){let n=e.memo;if(n.length!=t.length)return!1;for(let s=0;s<n.length;s++)if(ke(n[s],t[s]))return!1;return Nn>0&&Le&&Le.push(e),!0}var _o=\"3.5.30\",be=C,Fm=dr,Lm=ut,Vm=jo,Hm={createComponentInstance:Uf,setupComponent:Kf,renderComponentRoot:gi,setCurrentRenderingInstance:Ls,isVNode:kt,normalizeVNode:Ke,getComponentPublicInstance:Zs,ensureValidVNode:Qo,pushWarningContext:Un,popWarningContext:jn},Bm=Hm,Um=null,jm=null,Km=null,So,ha=typeof window<\"u\"&&window.trustedTypes;if(ha)try{So=ha.createPolicy(\"vue\",{createHTML:e=>e})}catch(e){be(`Error creating trusted types policy: ${e}`)}var Qf=So?e=>So.createHTML(e):e=>e,Wm=\"http://www.w3.org/2000/svg\",qm=\"http://www.w3.org/1998/Math/MathML\",Ft=typeof document<\"u\"?document:null,da=Ft&&Ft.createElement(\"template\"),eu={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{let i=t===\"svg\"?Ft.createElementNS(Wm,e):t===\"mathml\"?Ft.createElementNS(qm,e):n?Ft.createElement(e,{is:n}):Ft.createElement(e);return e===\"select\"&&s&&s.multiple!=null&&i.setAttribute(\"multiple\",s.multiple),i},createText:e=>Ft.createTextNode(e),createComment:e=>Ft.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ft.querySelector(e),setScopeId(e,t){e.setAttribute(t,\"\")},insertStaticContent(e,t,n,s,i,r){let o=n?n.previousSibling:t.lastChild;if(i&&(i===r||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===r||!(i=i.nextSibling)););else{da.innerHTML=Qf(s===\"svg\"?`<svg>${e}</svg>`:s===\"mathml\"?`<math>${e}</math>`:e);let l=da.content;if(s===\"svg\"||s===\"mathml\"){let a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Yt=\"transition\",ys=\"animation\",ts=Symbol(\"_vtc\"),tu={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},nu=ee({},Go,tu),Gm=e=>(e.displayName=\"Transition\",e.props=nu,e),Jm=Gm((e,{slots:t})=>Yf(ef,su(e),t)),fn=(e,t=[])=>{B(e)?e.forEach(n=>n(...t)):e&&e(...t)},pa=e=>e?B(e)?e.some(t=>t.length>1):e.length>1:!1;function su(e){let t={};for(let w in e)w in tu||(t[w]=e[w]);if(e.css===!1)return t;let{name:n=\"v\",type:s,duration:i,enterFromClass:r=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=r,appearActiveClass:u=o,appearToClass:f=l,leaveFromClass:c=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,b=zm(i),v=b&&b[0],P=b&&b[1],{onBeforeEnter:k,onEnter:T,onEnterCancelled:p,onLeave:S,onLeaveCancelled:y,onBeforeAppear:A=k,onAppear:V=T,onAppearCancelled:N=p}=t,_=(w,L,J,z)=>{w._enterCancelled=z,Zt(w,L?f:l),Zt(w,L?u:o),J&&J()},x=(w,L)=>{w._isLeaving=!1,Zt(w,c),Zt(w,g),Zt(w,d),L&&L()},$=w=>(L,J)=>{let z=w?V:T,K=()=>_(L,w,J);fn(z,[L,K]),ma(()=>{Zt(L,w?a:r),wt(L,w?f:l),pa(z)||ga(L,s,v,K)})};return ee(t,{onBeforeEnter(w){fn(k,[w]),wt(w,r),wt(w,o)},onBeforeAppear(w){fn(A,[w]),wt(w,a),wt(w,u)},onEnter:$(!1),onAppear:$(!0),onLeave(w,L){w._isLeaving=!0;let J=()=>x(w,L);wt(w,c),w._enterCancelled?(wt(w,d),wo(w)):(wo(w),wt(w,d)),ma(()=>{w._isLeaving&&(Zt(w,c),wt(w,g),pa(S)||ga(w,s,P,J))}),fn(S,[w,J])},onEnterCancelled(w){_(w,!1,void 0,!0),fn(p,[w])},onAppearCancelled(w){_(w,!0,void 0,!0),fn(N,[w])},onLeaveCancelled(w){x(w),fn(y,[w])}})}function zm(e){if(e==null)return null;if(se(e))return[Ur(e.enter),Ur(e.leave)];{let t=Ur(e);return[t,t]}}function Ur(e){let t=Ei(e);return Bo(t,\"<transition> explicit duration\"),t}function wt(e,t){t.split(/\\s+/).forEach(n=>n&&e.classList.add(n)),(e[ts]||(e[ts]=new Set)).add(t)}function Zt(e,t){t.split(/\\s+/).forEach(s=>s&&e.classList.remove(s));let n=e[ts];n&&(n.delete(t),n.size||(e[ts]=void 0))}function ma(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}var Ym=0;function ga(e,t,n,s){let i=e._endId=++Ym,r=()=>{i===e._endId&&s()};if(n!=null)return setTimeout(r,n);let{type:o,timeout:l,propCount:a}=iu(e,t);if(!o)return s();let u=o+\"end\",f=0,c=()=>{e.removeEventListener(u,d),r()},d=g=>{g.target===e&&++f>=a&&c()};setTimeout(()=>{f<a&&c()},l+1),e.addEventListener(u,d)}function iu(e,t){let n=window.getComputedStyle(e),s=b=>(n[b]||\"\").split(\", \"),i=s(`${Yt}Delay`),r=s(`${Yt}Duration`),o=ya(i,r),l=s(`${ys}Delay`),a=s(`${ys}Duration`),u=ya(l,a),f=null,c=0,d=0;t===Yt?o>0&&(f=Yt,c=o,d=r.length):t===ys?u>0&&(f=ys,c=u,d=a.length):(c=Math.max(o,u),f=c>0?o>u?Yt:ys:null,d=f?f===Yt?r.length:a.length:0);let g=f===Yt&&/\\b(?:transform|all)(?:,|$)/.test(s(`${Yt}Property`).toString());return{type:f,timeout:c,propCount:d,hasTransform:g}}function ya(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,s)=>ba(n)+ba(e[s])))}function ba(e){return e===\"auto\"?0:Number(e.slice(0,-1).replace(\",\",\".\"))*1e3}function wo(e){return(e?e.ownerDocument:document).body.offsetHeight}function Xm(e,t,n){let s=e[ts];s&&(t=(t?[t,...s]:[...s]).join(\" \")),t==null?e.removeAttribute(\"class\"):n?e.setAttribute(\"class\",t):e.className=t}var Ki=Symbol(\"_vod\"),ru=Symbol(\"_vsh\"),ou={name:\"show\",beforeMount(e,{value:t},{transition:n}){e[Ki]=e.style.display===\"none\"?\"\":e.style.display,n&&t?n.beforeEnter(e):bs(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),bs(e,!0),s.enter(e)):s.leave(e,()=>{bs(e,!1)}):bs(e,t))},beforeUnmount(e,{value:t}){bs(e,t)}};function bs(e,t){e.style.display=t?e[Ki]:\"none\",e[ru]=!t}function Zm(){ou.getSSRProps=({value:e})=>{if(!e)return{style:{display:\"none\"}}}}var lu=Symbol(\"CSS_VAR_TEXT\");function Qm(e){let t=He();if(!t){be(\"useCssVars is called without current active component instance.\");return}let n=t.ut=(i=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner=\"${t.uid}\"]`)).forEach(r=>Wi(r,i))};t.getCssVars=()=>e(t.proxy);let s=()=>{let i=e(t.proxy);t.ce?Wi(t.ce,i):To(t.subTree,i),n(i)};Yo(()=>{Zn(s)}),Xs(()=>{Wn(s,Te,{flush:\"post\"});let i=new MutationObserver(s);i.observe(t.subTree.el.parentNode,{childList:!0}),Sr(()=>i.disconnect())})}function To(e,t){if(e.shapeFlag&128){let n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{To(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Wi(e.el,t);else if(e.type===Ce)e.children.forEach(n=>To(n,t));else if(e.type===sn){let{el:n,anchor:s}=e;for(;n&&(Wi(n,t),n!==s);)n=n.nextSibling}}function Wi(e,t){if(e.nodeType===1){let n=e.style,s=\"\";for(let i in t){let r=mc(t[i]);n.setProperty(`--${i}`,r),s+=`--${i}: ${r};`}n[lu]=s}}var eg=/(?:^|;)\\s*display\\s*:/;function tg(e,t,n){let s=e.style,i=Y(n),r=!1;if(n&&!i){if(t)if(Y(t))for(let o of t.split(\";\")){let l=o.slice(0,o.indexOf(\":\")).trim();n[l]==null&&bi(s,l,\"\")}else for(let o in t)n[o]==null&&bi(s,o,\"\");for(let o in n)o===\"display\"&&(r=!0),bi(s,o,n[o])}else if(i){if(t!==n){let o=s[lu];o&&(n+=\";\"+o),s.cssText=n,r=eg.test(n)}}else t&&e.removeAttribute(\"style\");Ki in e&&(e[Ki]=r?s.display:\"\",e[ru]&&(s.display=\"none\"))}var ng=/[^\\\\];\\s*$/,va=/\\s*!important$/;function bi(e,t,n){if(B(n))n.forEach(s=>bi(e,t,s));else if(n==null&&(n=\"\"),ng.test(n)&&be(`Unexpected semicolon at the end of '${t}' style value: '${n}'`),t.startsWith(\"--\"))e.setProperty(t,n);else{let s=sg(e,t);va.test(n)?e.setProperty(Fe(s),n.replace(va,\"\"),\"important\"):e[s]=n}}var _a=[\"Webkit\",\"Moz\",\"ms\"],jr={};function sg(e,t){let n=jr[t];if(n)return n;let s=le(t);if(s!==\"filter\"&&s in e)return jr[t]=s;s=Ot(s);for(let i=0;i<_a.length;i++){let r=_a[i]+s;if(r in e)return jr[t]=r}return t}var Sa=\"http://www.w3.org/1999/xlink\";function wa(e,t,n,s,i,r=$h(t)){s&&t.startsWith(\"xlink:\")?n==null?e.removeAttributeNS(Sa,t.slice(6,t.length)):e.setAttributeNS(Sa,t,n):n==null||r&&!Do(n)?e.removeAttribute(t):e.setAttribute(t,r?\"\":Xe(n)?String(n):n)}function Ta(e,t,n,s,i){if(t===\"innerHTML\"||t===\"textContent\"){n!=null&&(e[t]=t===\"innerHTML\"?Qf(n):n);return}let r=e.tagName;if(t===\"value\"&&r!==\"PROGRESS\"&&!r.includes(\"-\")){let l=r===\"OPTION\"?e.getAttribute(\"value\")||\"\":e.value,a=n==null?e.type===\"checkbox\"?\"on\":\"\":String(n);(l!==a||!(\"_value\"in e))&&(e.value=a),n==null&&e.removeAttribute(t),e._value=n;return}let o=!1;if(n===\"\"||n==null){let l=typeof e[t];l===\"boolean\"?n=Do(n):n==null&&l===\"string\"?(n=\"\",o=!0):l===\"number\"&&(n=0,o=!0)}try{e[t]=n}catch(l){o||be(`Failed setting prop \"${t}\" on <${r.toLowerCase()}>: value ${n} is invalid.`,l)}o&&e.removeAttribute(i||t)}function Bt(e,t,n,s){e.addEventListener(t,n,s)}function ig(e,t,n,s){e.removeEventListener(t,n,s)}var Ea=Symbol(\"_vei\");function rg(e,t,n,s,i=null){let r=e[Ea]||(e[Ea]={}),o=r[t];if(s&&o)o.value=xa(s,t);else{let[l,a]=og(t);if(s){let u=r[t]=cg(xa(s,t),i);Bt(e,l,u,a)}else o&&(ig(e,l,o,a),r[t]=void 0)}}var Ca=/(?:Once|Passive|Capture)$/;function og(e){let t;if(Ca.test(e)){t={};let s;for(;s=e.match(Ca);)e=e.slice(0,e.length-s[0].length),t[s[0].toLowerCase()]=!0}return[e[2]===\":\"?e.slice(3):Fe(e.slice(2)),t]}var Kr=0,lg=Promise.resolve(),ag=()=>Kr||(lg.then(()=>Kr=0),Kr=Date.now());function cg(e,t){let n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;at(fg(s,n.value),t,5,[s])};return n.value=e,n.attached=ag(),n}function xa(e,t){return G(e)||B(e)?e:(be(`Wrong type passed as event handler to ${t} - did you forget @ or : in front of your prop?\nExpected function or array of functions, received type ${typeof e}.`),Te)}function fg(e,t){if(B(t)){let n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>i=>!i._stopped&&s&&s(i))}else return t}var Aa=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,au=(e,t,n,s,i,r)=>{let o=i===\"svg\";t===\"class\"?Xm(e,s,o):t===\"style\"?tg(e,n,s):on(t)?Ti(t)||rg(e,t,n,s,r):(t[0]===\".\"?(t=t.slice(1),!0):t[0]===\"^\"?(t=t.slice(1),!1):ug(e,t,s,o))?(Ta(e,t,s),!e.tagName.includes(\"-\")&&(t===\"value\"||t===\"checked\"||t===\"selected\")&&wa(e,t,s,o,r,t!==\"value\")):e._isVueCE&&(hg(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Y(s)))?Ta(e,le(t),s,r,t):(t===\"true-value\"?e._trueValue=s:t===\"false-value\"&&(e._falseValue=s),wa(e,t,s,o))};function ug(e,t,n,s){if(s)return!!(t===\"innerHTML\"||t===\"textContent\"||t in e&&Aa(t)&&G(n));if(t===\"spellcheck\"||t===\"draggable\"||t===\"translate\"||t===\"autocorrect\"||t===\"sandbox\"&&e.tagName===\"IFRAME\"||t===\"form\"||t===\"list\"&&e.tagName===\"INPUT\"||t===\"type\"&&e.tagName===\"TEXTAREA\")return!1;if(t===\"width\"||t===\"height\"){let i=e.tagName;if(i===\"IMG\"||i===\"VIDEO\"||i===\"CANVAS\"||i===\"SOURCE\")return!1}return Aa(t)&&Y(n)?!1:t in e}function hg(e,t){let n=e._def.props;if(!n)return!1;let s=le(t);return Array.isArray(n)?n.some(i=>le(i)===s):Object.keys(n).some(i=>le(i)===s)}var Na={};function cu(e,t,n){let s=Jo(e,t);ir(s)&&(s=ee({},s,t));class i extends qi{constructor(o){super(s,o,n)}}return i.def=s,i}var dg=((e,t)=>cu(e,t,wu)),pg=typeof HTMLElement<\"u\"?HTMLElement:class{},qi=class e extends pg{constructor(t,n={},s=Eo){super(),this._def=t,this._props=n,this._createApp=s,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._styleAnchors=new WeakMap,this._ob=null,this.shadowRoot&&s!==Eo?this._root=this.shadowRoot:(this.shadowRoot&&be(\"Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use `defineSSRCustomElement`.\"),t.shadowRoot!==!1?(this.attachShadow(ee({},t.shadowRootOptions,{mode:\"open\"})),this._root=this.shadowRoot):this._root=this)}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.assignedSlot||t.parentNode||t.host);)if(t instanceof e){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,pr(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(t){for(let n of t)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let s=0;s<this.attributes.length;s++)this._setAttr(this.attributes[s].name);this._ob=new MutationObserver(this._processMutations.bind(this)),this._ob.observe(this,{attributes:!0});let t=(s,i=!1)=>{this._resolved=!0,this._pendingResolve=void 0;let{props:r,styles:o}=s,l;if(r&&!B(r))for(let a in r){let u=r[a];(u===Number||u&&u.type===Number)&&(a in this._props&&(this._props[a]=Ei(this._props[a])),(l||(l=Object.create(null)))[le(a)]=!0)}this._numberProps=l,this._resolveProps(s),this.shadowRoot?this._applyStyles(o):o&&be(\"Custom element style injection is not supported when using shadowRoot: false\"),this._mount(s)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(s=>{s.configureApp=this._def.configureApp,t(this._def=s,!0)}):t(this._def)}_mount(t){t.name||(t.name=\"VueElement\"),this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);let n=this._instance&&this._instance.exposed;if(n)for(let s in n)ie(this,s)?be(`Exposed property \"${s}\" already exists on custom element.`):Object.defineProperty(this,s,{get:()=>Js(n[s])})}_resolveProps(t){let{props:n}=t,s=B(n)?n:Object.keys(n||{});for(let i of Object.keys(this))i[0]!==\"_\"&&s.includes(i)&&this._setProp(i,this[i]);for(let i of s.map(le))Object.defineProperty(this,i,{get(){return this._getProp(i)},set(r){this._setProp(i,r,!0,!this._patching)}})}_setAttr(t){if(t.startsWith(\"data-v-\"))return;let n=this.hasAttribute(t),s=n?this.getAttribute(t):Na,i=le(t);n&&this._numberProps&&this._numberProps[i]&&(s=Ei(s)),this._setProp(i,s,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,s=!0,i=!1){if(n!==this._props[t]&&(this._dirty=!0,n===Na?delete this._props[t]:(this._props[t]=n,t===\"key\"&&this._app&&(this._app._ceVNode.key=n)),i&&this._instance&&this._update(),s)){let r=this._ob;r&&(this._processMutations(r.takeRecords()),r.disconnect()),n===!0?this.setAttribute(Fe(t),\"\"):typeof n==\"string\"||typeof n==\"number\"?this.setAttribute(Fe(t),n+\"\"):n||this.removeAttribute(Fe(t)),r&&r.observe(this,{attributes:!0})}}_update(){let t=this._createVNode();this._app&&(t.appContext=this._app._context),Su(t,this._root)}_createVNode(){let t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));let n=ge(this._def,ee(t,this._props));return this._instance||(n.ce=s=>{this._instance=s,s.ce=this,s.isCE=!0,s.ceReload=r=>{this._styles&&(this._styles.forEach(o=>this._root.removeChild(o)),this._styles.length=0),this._styleAnchors.delete(this._def),this._applyStyles(r),this._instance=null,this._update()};let i=(r,o)=>{this.dispatchEvent(new CustomEvent(r,ir(o[0])?ee({detail:o},o[0]):{detail:o}))};s.emit=(r,...o)=>{i(r,o),Fe(r)!==r&&i(Fe(r),o)},this._setParent()}),n}_applyStyles(t,n,s){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}let i=this._nonce,r=this.shadowRoot,o=s?this._getStyleAnchor(s)||this._getStyleAnchor(this._def):this._getRootStyleInsertionAnchor(r),l=null;for(let a=t.length-1;a>=0;a--){let u=document.createElement(\"style\");if(i&&u.setAttribute(\"nonce\",i),u.textContent=t[a],r.insertBefore(u,l||o),l=u,a===0&&(s||this._styleAnchors.set(this._def,u),n&&this._styleAnchors.set(n,u)),n){if(n.__hmrId){this._childStyles||(this._childStyles=new Map);let f=this._childStyles.get(n.__hmrId);f||this._childStyles.set(n.__hmrId,f=[]),f.push(u)}}else(this._styles||(this._styles=[])).push(u)}}_getStyleAnchor(t){if(!t)return null;let n=this._styleAnchors.get(t);return n&&n.parentNode===this.shadowRoot?n:(n&&this._styleAnchors.delete(t),null)}_getRootStyleInsertionAnchor(t){for(let n=0;n<t.childNodes.length;n++){let s=t.childNodes[n];if(!(s instanceof HTMLStyleElement))return s}return null}_parseSlots(){let t=this._slots={},n;for(;n=this.firstChild;){let s=n.nodeType===1&&n.getAttribute(\"slot\")||\"default\";(t[s]||(t[s]=[])).push(n),this.removeChild(n)}}_renderSlots(){let t=this._getSlots(),n=this._instance.type.__scopeId;for(let s=0;s<t.length;s++){let i=t[s],r=i.getAttribute(\"name\")||\"default\",o=this._slots[r],l=i.parentNode;if(o)for(let a of o){if(n&&a.nodeType===1){let u=n+\"-s\",f=document.createTreeWalker(a,1);a.setAttribute(u,\"\");let c;for(;c=f.nextNode();)c.setAttribute(u,\"\")}l.insertBefore(a,i)}else for(;i.firstChild;)l.insertBefore(i.firstChild,i);l.removeChild(i)}}_getSlots(){let t=[this];this._teleportTargets&&t.push(...this._teleportTargets);let n=new Set;for(let s of t){let i=s.querySelectorAll(\"slot\");for(let r=0;r<i.length;r++)n.add(i[r])}return Array.from(n)}_injectChildStyle(t,n){this._applyStyles(t.styles,t,n)}_beginPatch(){this._patching=!0,this._dirty=!1}_endPatch(){this._patching=!1,this._dirty&&this._instance&&this._update()}_hasShadowRoot(){return this._def.shadowRoot!==!1}_removeChildStyle(t){if(this._styleChildren.delete(t),this._styleAnchors.delete(t),this._childStyles&&t.__hmrId){let n=this._childStyles.get(t.__hmrId);n&&(n.forEach(s=>this._root.removeChild(s)),n.length=0)}}};function fu(e){let t=He(),n=t&&t.ce;return n||(be(t?`${e||\"useHost\"} can only be used in components defined via defineCustomElement.`:`${e||\"useHost\"} called without an active component instance.`),null)}function mg(){let e=fu(\"useShadowRoot\");return e&&e.shadowRoot}function gg(e=\"$style\"){{let t=He();if(!t)return be(\"useCssModule must be called inside setup()\"),ne;let n=t.type.__cssModules;if(!n)return be(\"Current instance does not have CSS modules injected.\"),ne;let s=n[e];return s||(be(`Current instance does not have CSS module named \"${e}\".`),ne)}}var uu=new WeakMap,hu=new WeakMap,Gi=Symbol(\"_moveCb\"),Ia=Symbol(\"_enterCb\"),yg=e=>(delete e.props.mode,e),bg=yg({name:\"TransitionGroup\",props:ee({},nu,{tag:String,moveClass:String}),setup(e,{slots:t}){let n=He(),s=qo(),i,r;return vr(()=>{if(!i.length)return;let o=e.moveClass||`${e.name||\"v\"}-move`;if(!Tg(i[0].el,n.vnode.el,o)){i=[];return}i.forEach(_g),i.forEach(Sg);let l=i.filter(wg);wo(n.vnode.el),l.forEach(a=>{let u=a.el,f=u.style;wt(u,o),f.transform=f.webkitTransform=f.transitionDuration=\"\";let c=u[Gi]=d=>{d&&d.target!==u||(!d||d.propertyName.endsWith(\"transform\"))&&(u.removeEventListener(\"transitionend\",c),u[Gi]=null,Zt(u,o))};u.addEventListener(\"transitionend\",c)}),i=[]}),()=>{let o=Q(e),l=su(o),a=o.tag||Ce;if(i=[],r)for(let u=0;u<r.length;u++){let f=r[u];f.el&&f.el instanceof Element&&(i.push(f),Gt(f,Qn(f,l,s,n)),uu.set(f,du(f.el)))}r=t.default?yr(t.default()):[];for(let u=0;u<r.length;u++){let f=r[u];f.key!=null?Gt(f,Qn(f,l,s,n)):f.type!==It&&be(\"<TransitionGroup> children must be keyed.\")}return ge(a,null,r)}}}),vg=bg;function _g(e){let t=e.el;t[Gi]&&t[Gi](),t[Ia]&&t[Ia]()}function Sg(e){hu.set(e,du(e.el))}function wg(e){let t=uu.get(e),n=hu.get(e),s=t.left-n.left,i=t.top-n.top;if(s||i){let r=e.el,o=r.style,l=r.getBoundingClientRect(),a=1,u=1;return r.offsetWidth&&(a=l.width/r.offsetWidth),r.offsetHeight&&(u=l.height/r.offsetHeight),(!Number.isFinite(a)||a===0)&&(a=1),(!Number.isFinite(u)||u===0)&&(u=1),Math.abs(a-1)<.01&&(a=1),Math.abs(u-1)<.01&&(u=1),o.transform=o.webkitTransform=`translate(${s/a}px,${i/u}px)`,o.transitionDuration=\"0s\",e}}function du(e){let t=e.getBoundingClientRect();return{left:t.left,top:t.top}}function Tg(e,t,n){let s=e.cloneNode(),i=e[ts];i&&i.forEach(l=>{l.split(/\\s+/).forEach(a=>a&&s.classList.remove(a))}),n.split(/\\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display=\"none\";let r=t.nodeType===1?t:t.parentNode;r.appendChild(s);let{hasTransform:o}=iu(s);return r.removeChild(s),o}var rn=e=>{let t=e.props[\"onUpdate:modelValue\"]||!1;return B(t)?n=>nn(t,n):t};function Eg(e){e.target.composing=!0}function Oa(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(\"input\")))}var ot=Symbol(\"_assign\");function ka(e,t,n){return t&&(e=e.trim()),n&&(e=lr(e)),e}var Ji={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e[ot]=rn(i);let r=s||i.props&&i.props.type===\"number\";Bt(e,t?\"change\":\"input\",o=>{o.target.composing||e[ot](ka(e.value,n,r))}),(n||r)&&Bt(e,\"change\",()=>{e.value=ka(e.value,n,r)}),t||(Bt(e,\"compositionstart\",Eg),Bt(e,\"compositionend\",Oa),Bt(e,\"change\",Oa))},mounted(e,{value:t}){e.value=t??\"\"},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:r}},o){if(e[ot]=rn(o),e.composing)return;let l=(r||e.type===\"number\")&&!/^0\\d/.test(e.value)?lr(e.value):e.value,a=t??\"\";l!==a&&(document.activeElement===e&&e.type!==\"range\"&&(s&&t===n||i&&e.value.trim()===a)||(e.value=a))}},al={deep:!0,created(e,t,n){e[ot]=rn(n),Bt(e,\"change\",()=>{let s=e._modelValue,i=ns(e),r=e.checked,o=e[ot];if(B(s)){let l=ar(s,i),a=l!==-1;if(r&&!a)o(s.concat(i));else if(!r&&a){let u=[...s];u.splice(l,1),o(u)}}else if(kn(s)){let l=new Set(s);r?l.add(i):l.delete(i),o(l)}else o(mu(e,r))})},mounted:Ra,beforeUpdate(e,t,n){e[ot]=rn(n),Ra(e,t,n)}};function Ra(e,{value:t,oldValue:n},s){e._modelValue=t;let i;if(B(t))i=ar(t,s.props.value)>-1;else if(kn(t))i=t.has(s.props.value);else{if(t===n)return;i=qt(t,mu(e,!0))}e.checked!==i&&(e.checked=i)}var cl={created(e,{value:t},n){e.checked=qt(t,n.props.value),e[ot]=rn(n),Bt(e,\"change\",()=>{e[ot](ns(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[ot]=rn(s),t!==n&&(e.checked=qt(t,s.props.value))}},pu={deep:!0,created(e,{value:t,modifiers:{number:n}},s){let i=kn(t);Bt(e,\"change\",()=>{let r=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?lr(ns(o)):ns(o));e[ot](e.multiple?i?new Set(r):r:r[0]),e._assigning=!0,pr(()=>{e._assigning=!1})}),e[ot]=rn(s)},mounted(e,{value:t}){Ma(e,t)},beforeUpdate(e,t,n){e[ot]=rn(n)},updated(e,{value:t}){e._assigning||Ma(e,t)}};function Ma(e,t){let n=e.multiple,s=B(t);if(n&&!s&&!kn(t)){be(`<select multiple v-model> expects an Array or Set value for its binding, but got ${Object.prototype.toString.call(t).slice(8,-1)}.`);return}for(let i=0,r=e.options.length;i<r;i++){let o=e.options[i],l=ns(o);if(n)if(s){let a=typeof l;a===\"string\"||a===\"number\"?o.selected=t.some(u=>String(u)===String(l)):o.selected=ar(t,l)>-1}else o.selected=t.has(l);else if(qt(ns(o),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}function ns(e){return\"_value\"in e?e._value:e.value}function mu(e,t){let n=t?\"_trueValue\":\"_falseValue\";return n in e?e[n]:t}var gu={created(e,t,n){ui(e,t,n,null,\"created\")},mounted(e,t,n){ui(e,t,n,null,\"mounted\")},beforeUpdate(e,t,n,s){ui(e,t,n,s,\"beforeUpdate\")},updated(e,t,n,s){ui(e,t,n,s,\"updated\")}};function yu(e,t){switch(e){case\"SELECT\":return pu;case\"TEXTAREA\":return Ji;default:switch(t){case\"checkbox\":return al;case\"radio\":return cl;default:return Ji}}}function ui(e,t,n,s,i){let o=yu(e.tagName,n.props&&n.props.type)[i];o&&o(e,t,n,s)}function Cg(){Ji.getSSRProps=({value:e})=>({value:e}),cl.getSSRProps=({value:e},t)=>{if(t.props&&qt(t.props.value,e))return{checked:!0}},al.getSSRProps=({value:e},t)=>{if(B(e)){if(t.props&&ar(e,t.props.value)>-1)return{checked:!0}}else if(kn(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},gu.getSSRProps=(e,t)=>{if(typeof t.type!=\"string\")return;let n=yu(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}var xg=[\"ctrl\",\"shift\",\"alt\",\"meta\"],Ag={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>\"button\"in e&&e.button!==0,middle:e=>\"button\"in e&&e.button!==1,right:e=>\"button\"in e&&e.button!==2,exact:(e,t)=>xg.some(n=>e[`${n}Key`]&&!t.includes(n))},Ng=(e,t)=>{if(!e)return e;let n=e._withMods||(e._withMods={}),s=t.join(\".\");return n[s]||(n[s]=((i,...r)=>{for(let o=0;o<t.length;o++){let l=Ag[t[o]];if(l&&l(i,t))return}return e(i,...r)}))},Ig={esc:\"escape\",space:\" \",up:\"arrow-up\",left:\"arrow-left\",right:\"arrow-right\",down:\"arrow-down\",delete:\"backspace\"},Og=(e,t)=>{let n=e._withKeys||(e._withKeys={}),s=t.join(\".\");return n[s]||(n[s]=(i=>{if(!(\"key\"in i))return;let r=Fe(i.key);if(t.some(o=>o===r||Ig[o]===r))return e(i)}))},bu=ee({patchProp:au},eu),ks,Pa=!1;function vu(){return ks||(ks=Nf(bu))}function _u(){return ks=Pa?ks:If(bu),Pa=!0,ks}var Su=((...e)=>{vu().render(...e)}),kg=((...e)=>{_u().hydrate(...e)}),Eo=((...e)=>{let t=vu().createApp(...e);Eu(t),Cu(t);let{mount:n}=t;return t.mount=s=>{let i=xu(s);if(!i)return;let r=t._component;!G(r)&&!r.render&&!r.template&&(r.template=i.innerHTML),i.nodeType===1&&(i.textContent=\"\");let o=n(i,!1,Tu(i));return i instanceof Element&&(i.removeAttribute(\"v-cloak\"),i.setAttribute(\"data-v-app\",\"\")),o},t}),wu=((...e)=>{let t=_u().createApp(...e);Eu(t),Cu(t);let{mount:n}=t;return t.mount=s=>{let i=xu(s);if(i)return n(i,!0,Tu(i))},t});function Tu(e){if(e instanceof SVGElement)return\"svg\";if(typeof MathMLElement==\"function\"&&e instanceof MathMLElement)return\"mathml\"}function Eu(e){Object.defineProperty(e.config,\"isNativeTag\",{value:t=>ac(t)||cc(t)||fc(t),writable:!1})}function Cu(e){if(ll()){let t=e.config.isCustomElement;Object.defineProperty(e.config,\"isCustomElement\",{get(){return t},set(){be(\"The `isCustomElement` config option is deprecated. Use `compilerOptions.isCustomElement` instead.\")}});let n=e.config.compilerOptions,s='The `compilerOptions` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka \"full build\"). Since you are using the runtime-only build, `compilerOptions` must be passed to `@vue/compiler-dom` in the build setup instead.\\n- For vue-loader: pass it via vue-loader\\'s `compilerOptions` loader option.\\n- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\\n- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc';Object.defineProperty(e.config,\"compilerOptions\",{get(){return be(s),n},set(){be(s)}})}}function xu(e){if(Y(e)){let t=document.querySelector(e);return t||be(`Failed to mount app: mount target selector \"${e}\" returned null.`),t}return window.ShadowRoot&&e instanceof window.ShadowRoot&&e.mode===\"closed\"&&be('mounting on a ShadowRoot with `{mode: \"closed\"}` may lead to unpredictable bugs'),e}var $a=!1,Rg=()=>{$a||($a=!0,Cg(),Zm())},Mg=Object.freeze({__proto__:null,BaseTransition:ef,BaseTransitionPropsValidators:Go,Comment:me,DeprecationTypes:Km,EffectScope:Ms,ErrorCodes:Ed,ErrorTypeStrings:Fm,Fragment:Ce,KeepAlive:pp,ReactiveEffect:Cn,Static:sn,Suspense:gm,Teleport:Jd,Text:It,TrackOpTypes:gd,Transition:Jm,TransitionGroup:vg,TriggerOpTypes:yd,VueElement:qi,assertNumber:Bo,callWithAsyncErrorHandling:at,callWithErrorHandling:Rn,camelize:le,capitalize:Ot,cloneVNode:ct,compatUtils:jm,computed:zf,createApp:Eo,createBlock:Bi,createCommentVNode:Am,createElementBlock:wm,createElementVNode:il,createHydrationRenderer:If,createPropsRestProxy:Vp,createRenderer:Nf,createSSRApp:wu,createSlots:Sp,createStaticVNode:xm,createTextVNode:rl,createVNode:ge,customRef:Mc,defineAsyncComponent:hp,defineComponent:Jo,defineCustomElement:cu,defineEmits:Ip,defineExpose:Op,defineModel:Mp,defineOptions:kp,defineProps:Np,defineSSRCustomElement:dg,defineSlots:Rp,devtools:Lm,effect:Wh,effectScope:Uh,getCurrentInstance:He,getCurrentScope:gc,getCurrentWatcher:bd,getTransitionRawChildren:yr,guardReactiveProps:Vf,h:Yf,handleError:ln,hasInjectionContext:jd,hydrate:kg,hydrateOnIdle:op,hydrateOnInteraction:fp,hydrateOnMediaQuery:cp,hydrateOnVisible:ap,initCustomFormatter:Xf,initDirectivesForSSR:Rg,inject:As,isMemoSame:Zf,isProxy:xn,isReactive:jt,isReadonly:lt,isRef:ye,isRuntimeOnly:ll,isShallow:Re,isVNode:kt,markRaw:Oc,mergeDefaults:Fp,mergeModels:Lp,mergeProps:Bf,nextTick:pr,nodeOps:eu,normalizeClass:cs,normalizeProps:Ih,normalizeStyle:as,onActivated:rf,onBeforeMount:af,onBeforeUnmount:_r,onBeforeUpdate:Yo,onDeactivated:of,onErrorCaptured:hf,onMounted:Xs,onRenderTracked:uf,onRenderTriggered:ff,onScopeDispose:jh,onServerPrefetch:cf,onUnmounted:Sr,onUpdated:vr,onWatcherCleanup:$c,openBlock:Bs,patchProp:au,popScopeId:Hd,provide:Kc,proxyRefs:Ho,pushScopeId:Vd,queuePostFlushCb:Zn,reactive:ur,readonly:Ds,ref:vn,registerRuntimeCompiler:Wf,render:Su,renderList:_p,renderSlot:wp,resolveComponent:yp,resolveDirective:vp,resolveDynamicComponent:bp,resolveFilter:Um,resolveTransitionHooks:Qn,setBlockTracking:Us,setDevtoolsHook:Vm,setTransitionHooks:Gt,shallowReactive:Ic,shallowReadonly:dt,shallowRef:kc,ssrContextKey:Wc,ssrUtils:Bm,stop:qh,toDisplayString:dc,toHandlerKey:xt,toHandlers:Tp,toRaw:Q,toRef:pd,toRefs:dd,toValue:ud,transformVNodeArgs:Tm,triggerRef:fd,unref:Js,useAttrs:Dp,useCssModule:gg,useCssVars:Qm,useHost:fu,useId:Yd,useModel:zp,useSSRContext:qc,useShadowRoot:mg,useSlots:$p,useTemplateRef:Xd,useTransitionState:qo,vModelCheckbox:al,vModelDynamic:gu,vModelRadio:cl,vModelSelect:pu,vModelText:Ji,vShow:ou,version:_o,warn:be,watch:Wn,watchEffect:Kd,watchPostEffect:Wd,watchSyncEffect:Gc,withAsyncContext:Hp,withCtx:Wo,withDefaults:Pp,withDirectives:Ud,withKeys:Og,withMemo:Dm,withModifiers:Ng,withScopeId:Bd});function Pg(){console.info(`You are running a development build of Vue.\nMake sure to use the production build (*.prod.js) when deploying for production.`),Xf()}var js=Symbol(\"Fragment\"),Rs=Symbol(\"Teleport\"),fl=Symbol(\"Suspense\"),zi=Symbol(\"KeepAlive\"),Au=Symbol(\"BaseTransition\"),On=Symbol(\"openBlock\"),Nu=Symbol(\"createBlock\"),Iu=Symbol(\"createElementBlock\"),ul=Symbol(\"createVNode\"),hl=Symbol(\"createElementVNode\"),ei=Symbol(\"createCommentVNode\"),dl=Symbol(\"createTextVNode\"),Ou=Symbol(\"createStaticVNode\"),pl=Symbol(\"resolveComponent\"),ml=Symbol(\"resolveDynamicComponent\"),gl=Symbol(\"resolveDirective\"),$g=Symbol(\"resolveFilter\"),yl=Symbol(\"withDirectives\"),bl=Symbol(\"renderList\"),ku=Symbol(\"renderSlot\"),Ru=Symbol(\"createSlots\"),Cr=Symbol(\"toDisplayString\"),Yi=Symbol(\"mergeProps\"),vl=Symbol(\"normalizeClass\"),_l=Symbol(\"normalizeStyle\"),Ks=Symbol(\"normalizeProps\"),ti=Symbol(\"guardReactiveProps\"),Sl=Symbol(\"toHandlers\"),Co=Symbol(\"camelize\"),Dg=Symbol(\"capitalize\"),xo=Symbol(\"toHandlerKey\"),Xi=Symbol(\"setBlockTracking\"),Fg=Symbol(\"pushScopeId\"),Lg=Symbol(\"popScopeId\"),wl=Symbol(\"withCtx\"),Vg=Symbol(\"unref\"),Hg=Symbol(\"isRef\"),Tl=Symbol(\"withMemo\"),Mu=Symbol(\"isMemoSame\"),ss={[js]:\"Fragment\",[Rs]:\"Teleport\",[fl]:\"Suspense\",[zi]:\"KeepAlive\",[Au]:\"BaseTransition\",[On]:\"openBlock\",[Nu]:\"createBlock\",[Iu]:\"createElementBlock\",[ul]:\"createVNode\",[hl]:\"createElementVNode\",[ei]:\"createCommentVNode\",[dl]:\"createTextVNode\",[Ou]:\"createStaticVNode\",[pl]:\"resolveComponent\",[ml]:\"resolveDynamicComponent\",[gl]:\"resolveDirective\",[$g]:\"resolveFilter\",[yl]:\"withDirectives\",[bl]:\"renderList\",[ku]:\"renderSlot\",[Ru]:\"createSlots\",[Cr]:\"toDisplayString\",[Yi]:\"mergeProps\",[vl]:\"normalizeClass\",[_l]:\"normalizeStyle\",[Ks]:\"normalizeProps\",[ti]:\"guardReactiveProps\",[Sl]:\"toHandlers\",[Co]:\"camelize\",[Dg]:\"capitalize\",[xo]:\"toHandlerKey\",[Xi]:\"setBlockTracking\",[Fg]:\"pushScopeId\",[Lg]:\"popScopeId\",[wl]:\"withCtx\",[Vg]:\"unref\",[Hg]:\"isRef\",[Tl]:\"withMemo\",[Mu]:\"isMemoSame\"};function Bg(e){Object.getOwnPropertySymbols(e).forEach(t=>{ss[t]=e[t]})}var st={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:\"\"};function Ug(e,t=\"\"){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:st}}function Ws(e,t,n,s,i,r,o,l=!1,a=!1,u=!1,f=st){return e&&(l?(e.helper(On),e.helper(os(e.inSSR,u))):e.helper(rs(e.inSSR,u)),o&&e.helper(yl)),{type:13,tag:t,props:n,children:s,patchFlag:i,dynamicProps:r,directives:o,isBlock:l,disableTracking:a,isComponent:u,loc:f}}function En(e,t=st){return{type:17,loc:t,elements:e}}function rt(e,t=st){return{type:15,loc:t,properties:e}}function xe(e,t){return{type:16,loc:st,key:Y(e)?te(e,!0):e,value:t}}function te(e,t=!1,n=st,s=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:s}}function yt(e,t=st){return{type:8,loc:t,children:e}}function Ae(e,t=[],n=st){return{type:14,loc:n,callee:e,arguments:t}}function is(e,t=void 0,n=!1,s=!1,i=st){return{type:18,params:e,returns:t,newline:n,isSlot:s,loc:i}}function Ao(e,t,n,s=!0){return{type:19,test:e,consequent:t,alternate:n,newline:s,loc:st}}function jg(e,t,n=!1,s=!1){return{type:20,index:e,value:t,needPauseTracking:n,inVOnce:s,needArraySpread:!1,loc:st}}function Kg(e){return{type:21,body:e,loc:st}}function rs(e,t){return e||t?ul:hl}function os(e,t){return e||t?Nu:Iu}function El(e,{helper:t,removeHelper:n,inSSR:s}){e.isBlock||(e.isBlock=!0,n(rs(s,e.isComponent)),t(On),t(os(s,e.isComponent)))}var Da=new Uint8Array([123,123]),Fa=new Uint8Array([125,125]);function La(e){return e>=97&&e<=122||e>=65&&e<=90}function et(e){return e===32||e===10||e===9||e===12||e===13}function Xt(e){return e===47||e===62||et(e)}function Zi(e){let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);return t}var Oe={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101]),TextareaEnd:new Uint8Array([60,47,116,101,120,116,97,114,101,97])},No=class{constructor(t,n){this.stack=t,this.cbs=n,this.state=1,this.buffer=\"\",this.sectionStart=0,this.index=0,this.entityStart=0,this.baseState=1,this.inRCDATA=!1,this.inXML=!1,this.inVPre=!1,this.newlines=[],this.mode=0,this.delimiterOpen=Da,this.delimiterClose=Fa,this.delimiterIndex=-1,this.currentSequence=void 0,this.sequenceIndex=0}get inSFCRoot(){return this.mode===2&&this.stack.length===0}reset(){this.state=1,this.mode=0,this.buffer=\"\",this.sectionStart=0,this.index=0,this.baseState=1,this.inRCDATA=!1,this.currentSequence=void 0,this.newlines.length=0,this.delimiterOpen=Da,this.delimiterClose=Fa}getPos(t){let n=1,s=t+1,i=this.newlines.length,r=-1;if(i>100){let o=-1,l=i;for(;o+1<l;){let a=o+l>>>1;this.newlines[a]<t?o=a:l=a}r=o}else for(let o=i-1;o>=0;o--)if(t>this.newlines[o]){r=o;break}return r>=0&&(n=r+2,s=t-this.newlines[r]),{column:s,line:n,offset:t}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(t){t===60?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):!this.inVPre&&t===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(t))}stateInterpolationOpen(t){if(t===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){let n=this.index+1-this.delimiterOpen.length;n>this.sectionStart&&this.cbs.ontext(this.sectionStart,n),this.state=3,this.sectionStart=n}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(t)):(this.state=1,this.stateText(t))}stateInterpolation(t){t===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(t))}stateInterpolationClose(t){t===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(t))}stateSpecialStartSequence(t){let n=this.sequenceIndex===this.currentSequence.length;if(!(n?Xt(t):(t|32)===this.currentSequence[this.sequenceIndex]))this.inRCDATA=!1;else if(!n){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=6,this.stateInTagName(t)}stateInRCDATA(t){if(this.sequenceIndex===this.currentSequence.length){if(t===62||et(t)){let n=this.index-this.currentSequence.length;if(this.sectionStart<n){let s=this.index;this.index=n,this.cbs.ontext(this.sectionStart,n),this.index=s}this.sectionStart=n+2,this.stateInClosingTagName(t),this.inRCDATA=!1;return}this.sequenceIndex=0}(t|32)===this.currentSequence[this.sequenceIndex]?this.sequenceIndex+=1:this.sequenceIndex===0?this.currentSequence===Oe.TitleEnd||this.currentSequence===Oe.TextareaEnd&&!this.inSFCRoot?!this.inVPre&&t===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(t)):this.fastForwardTo(60)&&(this.sequenceIndex=1):this.sequenceIndex=+(t===60)}stateCDATASequence(t){t===Oe.Cdata[this.sequenceIndex]?++this.sequenceIndex===Oe.Cdata.length&&(this.state=28,this.currentSequence=Oe.CdataEnd,this.sequenceIndex=0,this.sectionStart=this.index+1):(this.sequenceIndex=0,this.state=23,this.stateInDeclaration(t))}fastForwardTo(t){for(;++this.index<this.buffer.length;){let n=this.buffer.charCodeAt(this.index);if(n===10&&this.newlines.push(this.index),n===t)return!0}return this.index=this.buffer.length-1,!1}stateInCommentLike(t){t===this.currentSequence[this.sequenceIndex]?++this.sequenceIndex===this.currentSequence.length&&(this.currentSequence===Oe.CdataEnd?this.cbs.oncdata(this.sectionStart,this.index-2):this.cbs.oncomment(this.sectionStart,this.index-2),this.sequenceIndex=0,this.sectionStart=this.index+1,this.state=1):this.sequenceIndex===0?this.fastForwardTo(this.currentSequence[0])&&(this.sequenceIndex=1):t!==this.currentSequence[this.sequenceIndex-1]&&(this.sequenceIndex=0)}startSpecial(t,n){this.enterRCDATA(t,n),this.state=31}enterRCDATA(t,n){this.inRCDATA=!0,this.currentSequence=t,this.sequenceIndex=n}stateBeforeTagName(t){t===33?(this.state=22,this.sectionStart=this.index+1):t===63?(this.state=24,this.sectionStart=this.index+1):La(t)?(this.sectionStart=this.index,this.mode===0?this.state=6:this.inSFCRoot?this.state=34:this.inXML?this.state=6:t===116?this.state=30:this.state=t===115?29:6):t===47?this.state=8:(this.state=1,this.stateText(t))}stateInTagName(t){Xt(t)&&this.handleTagName(t)}stateInSFCRootTagName(t){if(Xt(t)){let n=this.buffer.slice(this.sectionStart,this.index);n!==\"template\"&&this.enterRCDATA(Zi(\"</\"+n),0),this.handleTagName(t)}}handleTagName(t){this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=11,this.stateBeforeAttrName(t)}stateBeforeClosingTagName(t){et(t)||(t===62?(this.cbs.onerr(14,this.index),this.state=1,this.sectionStart=this.index+1):(this.state=La(t)?9:27,this.sectionStart=this.index))}stateInClosingTagName(t){(t===62||et(t))&&(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=10,this.stateAfterClosingTagName(t))}stateAfterClosingTagName(t){t===62&&(this.state=1,this.sectionStart=this.index+1)}stateBeforeAttrName(t){t===62?(this.cbs.onopentagend(this.index),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):t===47?(this.state=7,this.peek()!==62&&this.cbs.onerr(22,this.index)):t===60&&this.peek()===47?(this.cbs.onopentagend(this.index),this.state=5,this.sectionStart=this.index):et(t)||(t===61&&this.cbs.onerr(19,this.index),this.handleAttrStart(t))}handleAttrStart(t){t===118&&this.peek()===45?(this.state=13,this.sectionStart=this.index):t===46||t===58||t===64||t===35?(this.cbs.ondirname(this.index,this.index+1),this.state=14,this.sectionStart=this.index+1):(this.state=12,this.sectionStart=this.index)}stateInSelfClosingTag(t){t===62?(this.cbs.onselfclosingtag(this.index),this.state=1,this.sectionStart=this.index+1,this.inRCDATA=!1):et(t)||(this.state=11,this.stateBeforeAttrName(t))}stateInAttrName(t){t===61||Xt(t)?(this.cbs.onattribname(this.sectionStart,this.index),this.handleAttrNameEnd(t)):(t===34||t===39||t===60)&&this.cbs.onerr(17,this.index)}stateInDirName(t){t===61||Xt(t)?(this.cbs.ondirname(this.sectionStart,this.index),this.handleAttrNameEnd(t)):t===58?(this.cbs.ondirname(this.sectionStart,this.index),this.state=14,this.sectionStart=this.index+1):t===46&&(this.cbs.ondirname(this.sectionStart,this.index),this.state=16,this.sectionStart=this.index+1)}stateInDirArg(t){t===61||Xt(t)?(this.cbs.ondirarg(this.sectionStart,this.index),this.handleAttrNameEnd(t)):t===91?this.state=15:t===46&&(this.cbs.ondirarg(this.sectionStart,this.index),this.state=16,this.sectionStart=this.index+1)}stateInDynamicDirArg(t){t===93?this.state=14:(t===61||Xt(t))&&(this.cbs.ondirarg(this.sectionStart,this.index+1),this.handleAttrNameEnd(t),this.cbs.onerr(27,this.index))}stateInDirModifier(t){t===61||Xt(t)?(this.cbs.ondirmodifier(this.sectionStart,this.index),this.handleAttrNameEnd(t)):t===46&&(this.cbs.ondirmodifier(this.sectionStart,this.index),this.sectionStart=this.index+1)}handleAttrNameEnd(t){this.sectionStart=this.index,this.state=17,this.cbs.onattribnameend(this.index),this.stateAfterAttrName(t)}stateAfterAttrName(t){t===61?this.state=18:t===47||t===62?(this.cbs.onattribend(0,this.sectionStart),this.sectionStart=-1,this.state=11,this.stateBeforeAttrName(t)):et(t)||(this.cbs.onattribend(0,this.sectionStart),this.handleAttrStart(t))}stateBeforeAttrValue(t){t===34?(this.state=19,this.sectionStart=this.index+1):t===39?(this.state=20,this.sectionStart=this.index+1):et(t)||(this.sectionStart=this.index,this.state=21,this.stateInAttrValueNoQuotes(t))}handleInAttrValue(t,n){(t===n||this.fastForwardTo(n))&&(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(n===34?3:2,this.index+1),this.state=11)}stateInAttrValueDoubleQuotes(t){this.handleInAttrValue(t,34)}stateInAttrValueSingleQuotes(t){this.handleInAttrValue(t,39)}stateInAttrValueNoQuotes(t){et(t)||t===62?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(1,this.index),this.state=11,this.stateBeforeAttrName(t)):(t===34||t===39||t===60||t===61||t===96)&&this.cbs.onerr(18,this.index)}stateBeforeDeclaration(t){t===91?(this.state=26,this.sequenceIndex=0):this.state=t===45?25:23}stateInDeclaration(t){(t===62||this.fastForwardTo(62))&&(this.state=1,this.sectionStart=this.index+1)}stateInProcessingInstruction(t){(t===62||this.fastForwardTo(62))&&(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=1,this.sectionStart=this.index+1)}stateBeforeComment(t){t===45?(this.state=28,this.currentSequence=Oe.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=23}stateInSpecialComment(t){(t===62||this.fastForwardTo(62))&&(this.cbs.oncomment(this.sectionStart,this.index),this.state=1,this.sectionStart=this.index+1)}stateBeforeSpecialS(t){t===Oe.ScriptEnd[3]?this.startSpecial(Oe.ScriptEnd,4):t===Oe.StyleEnd[3]?this.startSpecial(Oe.StyleEnd,4):(this.state=6,this.stateInTagName(t))}stateBeforeSpecialT(t){t===Oe.TitleEnd[3]?this.startSpecial(Oe.TitleEnd,4):t===Oe.TextareaEnd[3]?this.startSpecial(Oe.TextareaEnd,4):(this.state=6,this.stateInTagName(t))}startEntity(){}stateInEntity(){}parse(t){for(this.buffer=t;this.index<this.buffer.length;){let n=this.buffer.charCodeAt(this.index);switch(n===10&&this.state!==33&&this.newlines.push(this.index),this.state){case 1:{this.stateText(n);break}case 2:{this.stateInterpolationOpen(n);break}case 3:{this.stateInterpolation(n);break}case 4:{this.stateInterpolationClose(n);break}case 31:{this.stateSpecialStartSequence(n);break}case 32:{this.stateInRCDATA(n);break}case 26:{this.stateCDATASequence(n);break}case 19:{this.stateInAttrValueDoubleQuotes(n);break}case 12:{this.stateInAttrName(n);break}case 13:{this.stateInDirName(n);break}case 14:{this.stateInDirArg(n);break}case 15:{this.stateInDynamicDirArg(n);break}case 16:{this.stateInDirModifier(n);break}case 28:{this.stateInCommentLike(n);break}case 27:{this.stateInSpecialComment(n);break}case 11:{this.stateBeforeAttrName(n);break}case 6:{this.stateInTagName(n);break}case 34:{this.stateInSFCRootTagName(n);break}case 9:{this.stateInClosingTagName(n);break}case 5:{this.stateBeforeTagName(n);break}case 17:{this.stateAfterAttrName(n);break}case 20:{this.stateInAttrValueSingleQuotes(n);break}case 18:{this.stateBeforeAttrValue(n);break}case 8:{this.stateBeforeClosingTagName(n);break}case 10:{this.stateAfterClosingTagName(n);break}case 29:{this.stateBeforeSpecialS(n);break}case 30:{this.stateBeforeSpecialT(n);break}case 21:{this.stateInAttrValueNoQuotes(n);break}case 7:{this.stateInSelfClosingTag(n);break}case 23:{this.stateInDeclaration(n);break}case 22:{this.stateBeforeDeclaration(n);break}case 25:{this.stateBeforeComment(n);break}case 24:{this.stateInProcessingInstruction(n);break}case 33:{this.stateInEntity();break}}this.index++}this.cleanup(),this.finish()}cleanup(){this.sectionStart!==this.index&&(this.state===1||this.state===32&&this.sequenceIndex===0?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):(this.state===19||this.state===20||this.state===21)&&(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))}finish(){this.handleTrailingData(),this.cbs.onend()}handleTrailingData(){let t=this.buffer.length;this.sectionStart>=t||(this.state===28?this.currentSequence===Oe.CdataEnd?this.cbs.oncdata(this.sectionStart,t):this.cbs.oncomment(this.sectionStart,t):this.state===6||this.state===11||this.state===18||this.state===17||this.state===12||this.state===13||this.state===14||this.state===15||this.state===16||this.state===20||this.state===19||this.state===21||this.state===9||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,n){}};function Cl(e){throw e}function Pu(e){console.warn(`[Vue warn] ${e.message}`)}function fe(e,t,n,s){let i=(n||Wg)[e]+(s||\"\"),r=new SyntaxError(String(i));return r.code=e,r.loc=t,r}var Wg={0:\"Illegal comment.\",1:\"CDATA section is allowed only in XML context.\",2:\"Duplicate attribute.\",3:\"End tag cannot have attributes.\",4:\"Illegal '/' in tags.\",5:\"Unexpected EOF in tag.\",6:\"Unexpected EOF in CDATA section.\",7:\"Unexpected EOF in comment.\",8:\"Unexpected EOF in script.\",9:\"Unexpected EOF in tag.\",10:\"Incorrectly closed comment.\",11:\"Incorrectly opened comment.\",12:\"Illegal tag name. Use '&lt;' to print '<'.\",13:\"Attribute value was expected.\",14:\"End tag name was expected.\",15:\"Whitespace was expected.\",16:\"Unexpected '<!--' in comment.\",17:`Attribute name cannot contain U+0022 (\"), U+0027 ('), and U+003C (<).`,18:\"Unquoted attribute value cannot contain U+0022 (\\\"), U+0027 ('), U+003C (<), U+003D (=), and U+0060 (`).\",19:\"Attribute name cannot start with '='.\",21:\"'<?' is allowed only in XML context.\",20:\"Unexpected null character.\",22:\"Illegal '/' in tags.\",23:\"Invalid end tag.\",24:\"Element is missing end tag.\",25:\"Interpolation end sign was not found.\",27:\"End bracket for dynamic directive argument was not found. Note that dynamic directive argument cannot contain spaces.\",26:\"Legal directive name was expected.\",28:\"v-if/v-else-if is missing expression.\",29:\"v-if/else branches must use unique keys.\",30:\"v-else/v-else-if has no adjacent v-if or v-else-if.\",31:\"v-for is missing expression.\",32:\"v-for has invalid expression.\",33:\"<template v-for> key should be placed on the <template> tag.\",34:\"v-bind is missing expression.\",53:\"v-bind with same-name shorthand only allows static argument.\",35:\"v-on is missing expression.\",36:\"Unexpected custom directive on <slot> outlet.\",37:\"Mixed v-slot usage on both the component and nested <template>. When there are multiple named slots, all slots should use <template> syntax to avoid scope ambiguity.\",38:\"Duplicate slot names found. \",39:\"Extraneous children found when component already has explicitly named default slot. These children will be ignored.\",40:\"v-slot can only be used on components or <template> tags.\",41:\"v-model is missing expression.\",42:\"v-model value must be a valid JavaScript member expression.\",43:\"v-model cannot be used on v-for or v-slot scope variables because they are not writable.\",44:`v-model cannot be used on a prop, because local prop bindings are not writable.\nUse a v-bind binding combined with a v-on listener that emits update:x event instead.`,45:\"v-model cannot be used on a const binding because it is not writable.\",46:\"Error parsing JavaScript expression: \",47:\"<KeepAlive> expects exactly one child component.\",52:\"@vnode-* hooks in templates are no longer supported. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted. @vnode-* hooks support has been removed in 3.4.\",48:'\"prefixIdentifiers\" option is not supported in this build of compiler.',49:\"ES module mode is not supported in this build of compiler.\",50:'\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.',51:'\"scopeId\" option is only supported in module mode.',54:\"\"},Ye=e=>e.type===4&&e.isStatic;function $u(e){switch(e){case\"Teleport\":case\"teleport\":return Rs;case\"Suspense\":case\"suspense\":return fl;case\"KeepAlive\":case\"keep-alive\":return zi;case\"BaseTransition\":case\"base-transition\":return Au}}var qg=/^$|^\\d|[^\\$\\w\\xA0-\\uFFFF]/,xl=e=>!qg.test(e),Du=/[A-Za-z_$\\xA0-\\uFFFF]/,Gg=/[\\.\\?\\w$\\xA0-\\uFFFF]/,Jg=/\\s+[.[]\\s*|\\s*[.[]\\s+/g,Fu=e=>e.type===4?e.content:e.loc.source,zg=e=>{let t=Fu(e).trim().replace(Jg,l=>l.trim()),n=0,s=[],i=0,r=0,o=null;for(let l=0;l<t.length;l++){let a=t.charAt(l);switch(n){case 0:if(a===\"[\")s.push(n),n=1,i++;else if(a===\"(\")s.push(n),n=2,r++;else if(!(l===0?Du:Gg).test(a))return!1;break;case 1:a===\"'\"||a==='\"'||a===\"`\"?(s.push(n),n=3,o=a):a===\"[\"?i++:a===\"]\"&&(--i||(n=s.pop()));break;case 2:if(a===\"'\"||a==='\"'||a===\"`\")s.push(n),n=3,o=a;else if(a===\"(\")r++;else if(a===\")\"){if(l===t.length-1)return!1;--r||(n=s.pop())}break;case 3:a===o&&(n=s.pop(),o=null);break}}return!i&&!r},Lu=zg,Yg=/^\\s*(?:async\\s*)?(?:\\([^)]*?\\)|[\\w$_]+)\\s*(?::[^=]+)?=>|^\\s*(?:async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/,Xg=e=>Yg.test(Fu(e)),Zg=Xg;function Va(e,t){if(!e)throw new Error(t||\"unexpected compiler condition\")}function ze(e,t,n=!1){for(let s=0;s<e.props.length;s++){let i=e.props[s];if(i.type===7&&(n||i.exp)&&(Y(t)?i.name===t:t.test(i.name)))return i}}function qs(e,t,n=!1,s=!1){for(let i=0;i<e.props.length;i++){let r=e.props[i];if(r.type===6){if(n)continue;if(r.name===t&&(r.value||s))return r}else if(r.name===\"bind\"&&(r.exp||s)&&pn(r.arg,t))return r}}function pn(e,t){return!!(e&&Ye(e)&&e.content===t)}function Qg(e){return e.props.some(t=>t.type===7&&t.name===\"bind\"&&(!t.arg||t.arg.type!==4||!t.arg.isStatic))}function Wr(e){return e.type===5||e.type===2}function Ha(e){return e.type===7&&e.name===\"pre\"}function ey(e){return e.type===7&&e.name===\"slot\"}function Qi(e){return e.type===1&&e.tagType===3}function er(e){return e.type===1&&e.tagType===2}var ty=new Set([Ks,ti]);function Vu(e,t=[]){if(e&&!Y(e)&&e.type===14){let n=e.callee;if(!Y(n)&&ty.has(n))return Vu(e.arguments[0],t.concat(e))}return[e,t]}function tr(e,t,n){let s,i=e.type===13?e.props:e.arguments[2],r=[],o;if(i&&!Y(i)&&i.type===14){let l=Vu(i);i=l[0],r=l[1],o=r[r.length-1]}if(i==null||Y(i))s=rt([t]);else if(i.type===14){let l=i.arguments[0];!Y(l)&&l.type===15?Ba(t,l)||l.properties.unshift(t):i.callee===Sl?s=Ae(n.helper(Yi),[rt([t]),i]):i.arguments.unshift(rt([t])),!s&&(s=i)}else i.type===15?(Ba(t,i)||i.properties.unshift(t),s=i):(s=Ae(n.helper(Yi),[rt([t]),i]),o&&o.callee===ti&&(o=r[r.length-2]));e.type===13?o?o.arguments[0]=s:e.props=s:o?o.arguments[0]=s:e.arguments[2]=s}function Ba(e,t){let n=!1;if(e.key.type===4){let s=e.key.content;n=t.properties.some(i=>i.key.type===4&&i.key.content===s)}return n}function Al(e,t){return`_${t}_${e.replace(/[^\\w]/g,(n,s)=>n===\"-\"?\"_\":e.charCodeAt(s).toString())}`}function ny(e){return e.type===14&&e.callee===Tl?e.arguments[1].returns:e}var sy=/([\\s\\S]*?)\\s+(?:in|of)\\s+(\\S[\\s\\S]*)/;function Hu(e){for(let t=0;t<e.length;t++)if(!et(e.charCodeAt(t)))return!1;return!0}function Nl(e){return e.type===2&&Hu(e.content)||e.type===12&&Nl(e.content)}function Il(e){return e.type===3||Nl(e)}var Bu={parseMode:\"base\",ns:0,delimiters:[\"{{\",\"}}\"],getNamespace:()=>0,isVoidTag:Hn,isPreTag:Hn,isIgnoreNewlineTag:Hn,isCustomElement:Hn,onError:Cl,onWarn:Pu,comments:!0,prefixIdentifiers:!1},de=Bu,nr=null,Wt=\"\",De=null,ae=null,Ge=\"\",Dt=-1,un=-1,Ol=0,tn=!1,Io=null,ve=[],pe=new No(ve,{onerr:qe,ontext(e,t){hi(Pe(e,t),e,t)},ontextentity(e,t,n){hi(e,t,n)},oninterpolation(e,t){if(tn)return hi(Pe(e,t),e,t);let n=e+pe.delimiterOpen.length,s=t-pe.delimiterClose.length;for(;et(Wt.charCodeAt(n));)n++;for(;et(Wt.charCodeAt(s-1));)s--;let i=Pe(n,s);i.includes(\"&\")&&(i=de.decodeEntities(i,!1)),Oo({type:5,content:_i(i,!1,_e(n,s)),loc:_e(e,t)})},onopentagname(e,t){let n=Pe(e,t);De={type:1,tag:n,ns:de.getNamespace(n,ve[0],de.ns),tagType:0,props:[],children:[],loc:_e(e-1,t),codegenNode:void 0}},onopentagend(e){ja(e)},onclosetag(e,t){let n=Pe(e,t);if(!de.isVoidTag(n)){let s=!1;for(let i=0;i<ve.length;i++)if(ve[i].tag.toLowerCase()===n.toLowerCase()){s=!0,i>0&&qe(24,ve[0].loc.start.offset);for(let o=0;o<=i;o++){let l=ve.shift();vi(l,t,o<i)}break}s||qe(23,Uu(e,60))}},onselfclosingtag(e){let t=De.tag;De.isSelfClosing=!0,ja(e),ve[0]&&ve[0].tag===t&&vi(ve.shift(),e)},onattribname(e,t){ae={type:6,name:Pe(e,t),nameLoc:_e(e,t),value:void 0,loc:_e(e)}},ondirname(e,t){let n=Pe(e,t),s=n===\".\"||n===\":\"?\"bind\":n===\"@\"?\"on\":n===\"#\"?\"slot\":n.slice(2);if(!tn&&s===\"\"&&qe(26,e),tn||s===\"\")ae={type:6,name:n,nameLoc:_e(e,t),value:void 0,loc:_e(e)};else if(ae={type:7,name:s,rawName:n,exp:void 0,arg:void 0,modifiers:n===\".\"?[te(\"prop\")]:[],loc:_e(e)},s===\"pre\"){tn=pe.inVPre=!0,Io=De;let i=De.props;for(let r=0;r<i.length;r++)i[r].type===7&&(i[r]=py(i[r]))}},ondirarg(e,t){if(e===t)return;let n=Pe(e,t);if(tn&&!Ha(ae))ae.name+=n,mn(ae.nameLoc,t);else{let s=n[0]!==\"[\";ae.arg=_i(s?n:n.slice(1,-1),s,_e(e,t),s?3:0)}},ondirmodifier(e,t){let n=Pe(e,t);if(tn&&!Ha(ae))ae.name+=\".\"+n,mn(ae.nameLoc,t);else if(ae.name===\"slot\"){let s=ae.arg;s&&(s.content+=\".\"+n,mn(s.loc,t))}else{let s=te(n,!0,_e(e,t));ae.modifiers.push(s)}},onattribdata(e,t){Ge+=Pe(e,t),Dt<0&&(Dt=e),un=t},onattribentity(e,t,n){Ge+=e,Dt<0&&(Dt=t),un=n},onattribnameend(e){let t=ae.loc.start.offset,n=Pe(t,e);ae.type===7&&(ae.rawName=n),De.props.some(s=>(s.type===7?s.rawName:s.name)===n)&&qe(2,t)},onattribend(e,t){if(De&&ae){if(mn(ae.loc,t),e!==0)if(Ge.includes(\"&\")&&(Ge=de.decodeEntities(Ge,!0)),ae.type===6)ae.name===\"class\"&&(Ge=Ku(Ge).trim()),e===1&&!Ge&&qe(13,t),ae.value={type:2,content:Ge,loc:e===1?_e(Dt,un):_e(Dt-1,un+1)},pe.inSFCRoot&&De.tag===\"template\"&&ae.name===\"lang\"&&Ge&&Ge!==\"html\"&&pe.enterRCDATA(Zi(\"</template\"),0);else{let n=0;ae.exp=_i(Ge,!1,_e(Dt,un),0,n),ae.name===\"for\"&&(ae.forParseResult=ry(ae.exp))}(ae.type!==7||ae.name!==\"pre\")&&De.props.push(ae)}Ge=\"\",Dt=un=-1},oncomment(e,t){de.comments&&Oo({type:3,content:Pe(e,t),loc:_e(e-4,t+3)})},onend(){let e=Wt.length;if(pe.state!==1)switch(pe.state){case 5:case 8:qe(5,e);break;case 3:case 4:qe(25,pe.sectionStart);break;case 28:pe.currentSequence===Oe.CdataEnd?qe(6,e):qe(7,e);break;case 6:case 7:case 9:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:qe(9,e);break}for(let t=0;t<ve.length;t++)vi(ve[t],e-1),qe(24,ve[t].loc.start.offset)},oncdata(e,t){ve[0].ns!==0?hi(Pe(e,t),e,t):qe(1,e-9)},onprocessinginstruction(e){(ve[0]?ve[0].ns:de.ns)===0&&qe(21,e-1)}}),Ua=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,iy=/^\\(|\\)$/g;function ry(e){let t=e.loc,n=e.content,s=n.match(sy);if(!s)return;let[,i,r]=s,o=(c,d,g=!1)=>{let b=t.start.offset+d,v=b+c.length;return _i(c,!1,_e(b,v),0,g?1:0)},l={source:o(r.trim(),n.indexOf(r,i.length)),value:void 0,key:void 0,index:void 0,finalized:!1},a=i.trim().replace(iy,\"\").trim(),u=i.indexOf(a),f=a.match(Ua);if(f){a=a.replace(Ua,\"\").trim();let c=f[1].trim(),d;if(c&&(d=n.indexOf(c,u+a.length),l.key=o(c,d,!0)),f[2]){let g=f[2].trim();g&&(l.index=o(g,n.indexOf(g,l.key?d+c.length:u+a.length),!0))}}return a&&(l.value=o(a,u,!0)),l}function Pe(e,t){return Wt.slice(e,t)}function ja(e){pe.inSFCRoot&&(De.innerLoc=_e(e+1,e+1)),Oo(De);let{tag:t,ns:n}=De;n===0&&de.isPreTag(t)&&Ol++,de.isVoidTag(t)?vi(De,e):(ve.unshift(De),(n===1||n===2)&&(pe.inXML=!0)),De=null}function hi(e,t,n){{let r=ve[0]&&ve[0].tag;r!==\"script\"&&r!==\"style\"&&e.includes(\"&\")&&(e=de.decodeEntities(e,!1))}let s=ve[0]||nr,i=s.children[s.children.length-1];i&&i.type===2?(i.content+=e,mn(i.loc,n)):s.children.push({type:2,content:e,loc:_e(t,n)})}function vi(e,t,n=!1){n?mn(e.loc,Uu(t,60)):mn(e.loc,oy(t,62)+1),pe.inSFCRoot&&(e.children.length?e.innerLoc.end=ee({},e.children[e.children.length-1].loc.end):e.innerLoc.end=ee({},e.innerLoc.start),e.innerLoc.source=Pe(e.innerLoc.start.offset,e.innerLoc.end.offset));let{tag:s,ns:i,children:r}=e;if(tn||(s===\"slot\"?e.tagType=2:ay(e)?e.tagType=3:cy(e)&&(e.tagType=1)),pe.inRCDATA||(e.children=ju(r)),i===0&&de.isIgnoreNewlineTag(s)){let o=r[0];o&&o.type===2&&(o.content=o.content.replace(/^\\r?\\n/,\"\"))}i===0&&de.isPreTag(s)&&Ol--,Io===e&&(tn=pe.inVPre=!1,Io=null),pe.inXML&&(ve[0]?ve[0].ns:de.ns)===0&&(pe.inXML=!1)}function oy(e,t){let n=e;for(;Wt.charCodeAt(n)!==t&&n<Wt.length-1;)n++;return n}function Uu(e,t){let n=e;for(;Wt.charCodeAt(n)!==t&&n>=0;)n--;return n}var ly=new Set([\"if\",\"else\",\"else-if\",\"for\",\"slot\"]);function ay({tag:e,props:t}){if(e===\"template\"){for(let n=0;n<t.length;n++)if(t[n].type===7&&ly.has(t[n].name))return!0}return!1}function cy({tag:e,props:t}){if(de.isCustomElement(e))return!1;if(e===\"component\"||fy(e.charCodeAt(0))||$u(e)||de.isBuiltInComponent&&de.isBuiltInComponent(e)||de.isNativeTag&&!de.isNativeTag(e))return!0;for(let n=0;n<t.length;n++){let s=t[n];if(s.type===6&&s.name===\"is\"&&s.value&&s.value.content.startsWith(\"vue:\"))return!0}return!1}function fy(e){return e>64&&e<91}var uy=/\\r\\n/g;function ju(e){let t=de.whitespace!==\"preserve\",n=!1;for(let s=0;s<e.length;s++){let i=e[s];if(i.type===2)if(Ol)i.content=i.content.replace(uy,`\n`);else if(Hu(i.content)){let r=e[s-1]&&e[s-1].type,o=e[s+1]&&e[s+1].type;!r||!o||t&&(r===3&&(o===3||o===1)||r===1&&(o===3||o===1&&hy(i.content)))?(n=!0,e[s]=null):i.content=\" \"}else t&&(i.content=Ku(i.content))}return n?e.filter(Boolean):e}function hy(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n===10||n===13)return!0}return!1}function Ku(e){let t=\"\",n=!1;for(let s=0;s<e.length;s++)et(e.charCodeAt(s))?n||(t+=\" \",n=!0):(t+=e[s],n=!1);return t}function Oo(e){(ve[0]||nr).children.push(e)}function _e(e,t){return{start:pe.getPos(e),end:t==null?t:pe.getPos(t),source:t==null?t:Pe(e,t)}}function dy(e){return _e(e.start.offset,e.end.offset)}function mn(e,t){e.end=pe.getPos(t),e.source=Pe(e.start.offset,t)}function py(e){let t={type:6,name:e.rawName,nameLoc:_e(e.loc.start.offset,e.loc.start.offset+e.rawName.length),value:void 0,loc:e.loc};if(e.exp){let n=e.exp.loc;n.end.offset<e.loc.end.offset&&(n.start.offset--,n.start.column--,n.end.offset++,n.end.column++),t.value={type:2,content:e.exp.content,loc:n}}return t}function _i(e,t=!1,n,s=0,i=0){return te(e,t,n,s)}function qe(e,t,n){de.onError(fe(e,_e(t,t),void 0,n))}function my(){pe.reset(),De=null,ae=null,Ge=\"\",Dt=-1,un=-1,ve.length=0}function gy(e,t){if(my(),Wt=e,de=ee({},Bu),t){let i;for(i in t)t[i]!=null&&(de[i]=t[i])}if(!de.decodeEntities)throw new Error(\"[@vue/compiler-core] decodeEntities option is required in browser builds.\");pe.mode=de.parseMode===\"html\"?1:de.parseMode===\"sfc\"?2:0,pe.inXML=de.ns===1||de.ns===2;let n=t&&t.delimiters;n&&(pe.delimiterOpen=Zi(n[0]),pe.delimiterClose=Zi(n[1]));let s=nr=Ug([],e);return pe.parse(Wt),s.loc=_e(0,e.length),s.children=ju(s.children),nr=null,s}function yy(e,t){Si(e,void 0,t,!!Wu(e))}function Wu(e){let t=e.children.filter(n=>n.type!==3);return t.length===1&&t[0].type===1&&!er(t[0])?t[0]:null}function Si(e,t,n,s=!1,i=!1){let{children:r}=e,o=[];for(let f=0;f<r.length;f++){let c=r[f];if(c.type===1&&c.tagType===0){let d=s?0:tt(c,n);if(d>0){if(d>=2){c.codegenNode.patchFlag=-1,o.push(c);continue}}else{let g=c.codegenNode;if(g.type===13){let b=g.patchFlag;if((b===void 0||b===512||b===1)&&Gu(c,n)>=2){let v=Ju(c);v&&(g.props=n.hoist(v))}g.dynamicProps&&(g.dynamicProps=n.hoist(g.dynamicProps))}}}else if(c.type===12&&(s?0:tt(c,n))>=2){c.codegenNode.type===14&&c.codegenNode.arguments.length>0&&c.codegenNode.arguments.push(`-1 /* ${Es[-1]} */`),o.push(c);continue}if(c.type===1){let d=c.tagType===1;d&&n.scopes.vSlot++,Si(c,e,n,!1,i),d&&n.scopes.vSlot--}else if(c.type===11)Si(c,e,n,c.children.length===1,!0);else if(c.type===9)for(let d=0;d<c.branches.length;d++)Si(c.branches[d],e,n,c.branches[d].children.length===1,i)}let l=!1;if(o.length===r.length&&e.type===1){if(e.tagType===0&&e.codegenNode&&e.codegenNode.type===13&&B(e.codegenNode.children))e.codegenNode.children=a(En(e.codegenNode.children)),l=!0;else if(e.tagType===1&&e.codegenNode&&e.codegenNode.type===13&&e.codegenNode.children&&!B(e.codegenNode.children)&&e.codegenNode.children.type===15){let f=u(e.codegenNode,\"default\");f&&(f.returns=a(En(f.returns)),l=!0)}else if(e.tagType===3&&t&&t.type===1&&t.tagType===1&&t.codegenNode&&t.codegenNode.type===13&&t.codegenNode.children&&!B(t.codegenNode.children)&&t.codegenNode.children.type===15){let f=ze(e,\"slot\",!0),c=f&&f.arg&&u(t.codegenNode,f.arg);c&&(c.returns=a(En(c.returns)),l=!0)}}if(!l)for(let f of o)f.codegenNode=n.cache(f.codegenNode);function a(f){let c=n.cache(f);return c.needArraySpread=!0,c}function u(f,c){if(f.children&&!B(f.children)&&f.children.type===15){let d=f.children.properties.find(g=>g.key===c||g.key.content===c);return d&&d.value}}o.length&&n.transformHoist&&n.transformHoist(r,n,e)}function tt(e,t){let{constantCache:n}=t;switch(e.type){case 1:if(e.tagType!==0)return 0;let s=n.get(e);if(s!==void 0)return s;let i=e.codegenNode;if(i.type!==13||i.isBlock&&e.tag!==\"svg\"&&e.tag!==\"foreignObject\"&&e.tag!==\"math\")return 0;if(i.patchFlag===void 0){let o=3,l=Gu(e,t);if(l===0)return n.set(e,0),0;l<o&&(o=l);for(let a=0;a<e.children.length;a++){let u=tt(e.children[a],t);if(u===0)return n.set(e,0),0;u<o&&(o=u)}if(o>1)for(let a=0;a<e.props.length;a++){let u=e.props[a];if(u.type===7&&u.name===\"bind\"&&u.exp){let f=tt(u.exp,t);if(f===0)return n.set(e,0),0;f<o&&(o=f)}}if(i.isBlock){for(let a=0;a<e.props.length;a++)if(e.props[a].type===7)return n.set(e,0),0;t.removeHelper(On),t.removeHelper(os(t.inSSR,i.isComponent)),i.isBlock=!1,t.helper(rs(t.inSSR,i.isComponent))}return n.set(e,o),o}else return n.set(e,0),0;case 2:case 3:return 3;case 9:case 11:case 10:return 0;case 5:case 12:return tt(e.content,t);case 4:return e.constType;case 8:let r=3;for(let o=0;o<e.children.length;o++){let l=e.children[o];if(Y(l)||Xe(l))continue;let a=tt(l,t);if(a===0)return 0;a<r&&(r=a)}return r;case 20:return 2;default:return 0}}var by=new Set([vl,_l,Ks,ti]);function qu(e,t){if(e.type===14&&!Y(e.callee)&&by.has(e.callee)){let n=e.arguments[0];if(n.type===4)return tt(n,t);if(n.type===14)return qu(n,t)}return 0}function Gu(e,t){let n=3,s=Ju(e);if(s&&s.type===15){let{properties:i}=s;for(let r=0;r<i.length;r++){let{key:o,value:l}=i[r],a=tt(o,t);if(a===0)return a;a<n&&(n=a);let u;if(l.type===4?u=tt(l,t):l.type===14?u=qu(l,t):u=0,u===0)return u;u<n&&(n=u)}}return n}function Ju(e){let t=e.codegenNode;if(t.type===13)return t.props}function vy(e,{filename:t=\"\",prefixIdentifiers:n=!1,hoistStatic:s=!1,hmr:i=!1,cacheHandlers:r=!1,nodeTransforms:o=[],directiveTransforms:l={},transformHoist:a=null,isBuiltInComponent:u=Te,isCustomElement:f=Te,expressionPlugins:c=[],scopeId:d=null,slotted:g=!0,ssr:b=!1,inSSR:v=!1,ssrCssVars:P=\"\",bindingMetadata:k=ne,inline:T=!1,isTS:p=!1,onError:S=Cl,onWarn:y=Pu,compatConfig:A}){let V=t.replace(/\\?.*$/,\"\").match(/([^/\\\\]+)\\.\\w+$/),N={filename:t,selfName:V&&Ot(le(V[1])),prefixIdentifiers:n,hoistStatic:s,hmr:i,cacheHandlers:r,nodeTransforms:o,directiveTransforms:l,transformHoist:a,isBuiltInComponent:u,isCustomElement:f,expressionPlugins:c,scopeId:d,slotted:g,ssr:b,inSSR:v,ssrCssVars:P,bindingMetadata:k,inline:T,isTS:p,onError:S,onWarn:y,compatConfig:A,root:e,helpers:new Map,components:new Set,directives:new Set,hoists:[],imports:[],cached:[],constantCache:new WeakMap,temps:0,identifiers:Object.create(null),scopes:{vFor:0,vSlot:0,vPre:0,vOnce:0},parent:null,grandParent:null,currentNode:e,childIndex:0,inVOnce:!1,helper(_){let x=N.helpers.get(_)||0;return N.helpers.set(_,x+1),_},removeHelper(_){let x=N.helpers.get(_);if(x){let $=x-1;$?N.helpers.set(_,$):N.helpers.delete(_)}},helperString(_){return`_${ss[N.helper(_)]}`},replaceNode(_){{if(!N.currentNode)throw new Error(\"Node being replaced is already removed.\");if(!N.parent)throw new Error(\"Cannot replace root node.\")}N.parent.children[N.childIndex]=N.currentNode=_},removeNode(_){if(!N.parent)throw new Error(\"Cannot remove root node.\");let x=N.parent.children,$=_?x.indexOf(_):N.currentNode?N.childIndex:-1;if($<0)throw new Error(\"node being removed is not a child of current parent\");!_||_===N.currentNode?(N.currentNode=null,N.onNodeRemoved()):N.childIndex>$&&(N.childIndex--,N.onNodeRemoved()),N.parent.children.splice($,1)},onNodeRemoved:Te,addIdentifiers(_){},removeIdentifiers(_){},hoist(_){Y(_)&&(_=te(_)),N.hoists.push(_);let x=te(`_hoisted_${N.hoists.length}`,!1,_.loc,2);return x.hoisted=_,x},cache(_,x=!1,$=!1){let w=jg(N.cached.length,_,x,$);return N.cached.push(w),w}};return N}function _y(e,t){let n=vy(e,t);xr(e,n),t.hoistStatic&&yy(e,n),t.ssr||Sy(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.transformed=!0}function Sy(e,t){let{helper:n}=t,{children:s}=e;if(s.length===1){let i=Wu(e);if(i&&i.codegenNode){let r=i.codegenNode;r.type===13&&El(r,t),e.codegenNode=r}else e.codegenNode=s[0]}else if(s.length>1){let i=64;s.filter(r=>r.type!==3).length===1&&(i|=2048),e.codegenNode=Ws(t,n(js),void 0,e.children,i,void 0,void 0,!0,void 0,!1)}}function wy(e,t){let n=0,s=()=>{n--};for(;n<e.children.length;n++){let i=e.children[n];Y(i)||(t.grandParent=t.parent,t.parent=e,t.childIndex=n,t.onNodeRemoved=s,xr(i,t))}}function xr(e,t){t.currentNode=e;let{nodeTransforms:n}=t,s=[];for(let r=0;r<n.length;r++){let o=n[r](e,t);if(o&&(B(o)?s.push(...o):s.push(o)),t.currentNode)e=t.currentNode;else return}switch(e.type){case 3:t.ssr||t.helper(ei);break;case 5:t.ssr||t.helper(Cr);break;case 9:for(let r=0;r<e.branches.length;r++)xr(e.branches[r],t);break;case 10:case 11:case 1:case 0:wy(e,t);break}t.currentNode=e;let i=s.length;for(;i--;)s[i]()}function zu(e,t){let n=Y(e)?s=>s===e:s=>e.test(s);return(s,i)=>{if(s.type===1){let{props:r}=s;if(s.tagType===3&&r.some(ey))return;let o=[];for(let l=0;l<r.length;l++){let a=r[l];if(a.type===7&&n(a.name)){r.splice(l,1),l--;let u=t(s,a,i);u&&o.push(u)}}return o}}}var Ar=\"/*@__PURE__*/\",Yu=e=>`${ss[e]}: _${ss[e]}`;function Ty(e,{mode:t=\"function\",prefixIdentifiers:n=t===\"module\",sourceMap:s=!1,filename:i=\"template.vue.html\",scopeId:r=null,optimizeImports:o=!1,runtimeGlobalName:l=\"Vue\",runtimeModuleName:a=\"vue\",ssrRuntimeModuleName:u=\"vue/server-renderer\",ssr:f=!1,isTS:c=!1,inSSR:d=!1}){let g={mode:t,prefixIdentifiers:n,sourceMap:s,filename:i,scopeId:r,optimizeImports:o,runtimeGlobalName:l,runtimeModuleName:a,ssrRuntimeModuleName:u,ssr:f,isTS:c,inSSR:d,source:e.source,code:\"\",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(v){return`_${ss[v]}`},push(v,P=-2,k){g.code+=v},indent(){b(++g.indentLevel)},deindent(v=!1){v?--g.indentLevel:b(--g.indentLevel)},newline(){b(g.indentLevel)}};function b(v){g.push(`\n`+\"  \".repeat(v),0)}return g}function Ey(e,t={}){let n=Ty(e,t);t.onContextCreated&&t.onContextCreated(n);let{mode:s,push:i,prefixIdentifiers:r,indent:o,deindent:l,newline:a,scopeId:u,ssr:f}=n,c=Array.from(e.helpers),d=c.length>0,g=!r&&s!==\"module\";Cy(e,n);let v=f?\"ssrRender\":\"render\",k=(f?[\"_ctx\",\"_push\",\"_parent\",\"_attrs\"]:[\"_ctx\",\"_cache\"]).join(\", \");if(i(`function ${v}(${k}) {`),o(),g&&(i(\"with (_ctx) {\"),o(),d&&(i(`const { ${c.map(Yu).join(\", \")} } = _Vue\n`,-1),a())),e.components.length&&(Ka(e.components,\"component\",n),(e.directives.length||e.temps>0)&&a()),e.directives.length&&(Ka(e.directives,\"directive\",n),e.temps>0&&a()),e.temps>0){i(\"let \");for(let T=0;T<e.temps;T++)i(`${T>0?\", \":\"\"}_temp${T}`)}return(e.components.length||e.directives.length||e.temps)&&(i(`\n`,0),a()),f||i(\"return \"),e.codegenNode?Ve(e.codegenNode,n):i(\"null\"),g&&(l(),i(\"}\")),l(),i(\"}\"),{ast:e,code:n.code,preamble:\"\",map:n.map?n.map.toJSON():void 0}}function Cy(e,t){let{ssr:n,prefixIdentifiers:s,push:i,newline:r,runtimeModuleName:o,runtimeGlobalName:l,ssrRuntimeModuleName:a}=t,u=l,f=Array.from(e.helpers);if(f.length>0&&(i(`const _Vue = ${u}\n`,-1),e.hoists.length)){let c=[ul,hl,ei,dl,Ou].filter(d=>f.includes(d)).map(Yu).join(\", \");i(`const { ${c} } = _Vue\n`,-1)}xy(e.hoists,t),r(),i(\"return \")}function Ka(e,t,{helper:n,push:s,newline:i,isTS:r}){let o=n(t===\"component\"?pl:gl);for(let l=0;l<e.length;l++){let a=e[l],u=a.endsWith(\"__self\");u&&(a=a.slice(0,-6)),s(`const ${Al(a,t)} = ${o}(${JSON.stringify(a)}${u?\", true\":\"\"})${r?\"!\":\"\"}`),l<e.length-1&&i()}}function xy(e,t){if(!e.length)return;t.pure=!0;let{push:n,newline:s}=t;s();for(let i=0;i<e.length;i++){let r=e[i];r&&(n(`const _hoisted_${i+1} = `),Ve(r,t),s())}t.pure=!1}function Ay(e){return Y(e)||e.type===4||e.type===2||e.type===5||e.type===8}function kl(e,t){let n=e.length>3||e.some(s=>B(s)||!Ay(s));t.push(\"[\"),n&&t.indent(),ni(e,t,n),n&&t.deindent(),t.push(\"]\")}function ni(e,t,n=!1,s=!0){let{push:i,newline:r}=t;for(let o=0;o<e.length;o++){let l=e[o];Y(l)?i(l,-3):B(l)?kl(l,t):Ve(l,t),o<e.length-1&&(n?(s&&i(\",\"),r()):s&&i(\", \"))}}function Ve(e,t){if(Y(e)){t.push(e,-3);return}if(Xe(e)){t.push(t.helper(e));return}switch(e.type){case 1:case 9:case 11:Va(e.codegenNode!=null,\"Codegen node is missing for element/if/for node. Apply appropriate transforms first.\"),Ve(e.codegenNode,t);break;case 2:Ny(e,t);break;case 4:Xu(e,t);break;case 5:Iy(e,t);break;case 12:Ve(e.codegenNode,t);break;case 8:Zu(e,t);break;case 3:ky(e,t);break;case 13:Ry(e,t);break;case 14:Py(e,t);break;case 15:$y(e,t);break;case 17:Dy(e,t);break;case 18:Fy(e,t);break;case 19:Ly(e,t);break;case 20:Vy(e,t);break;case 21:ni(e.body,t,!0,!1);break;case 22:break;case 23:break;case 24:break;case 25:break;case 26:break;case 10:break;default:return Va(!1,`unhandled codegen node type: ${e.type}`),e}}function Ny(e,t){t.push(JSON.stringify(e.content),-3,e)}function Xu(e,t){let{content:n,isStatic:s}=e;t.push(s?JSON.stringify(n):n,-3,e)}function Iy(e,t){let{push:n,helper:s,pure:i}=t;i&&n(Ar),n(`${s(Cr)}(`),Ve(e.content,t),n(\")\")}function Zu(e,t){for(let n=0;n<e.children.length;n++){let s=e.children[n];Y(s)?t.push(s,-3):Ve(s,t)}}function Oy(e,t){let{push:n}=t;if(e.type===8)n(\"[\"),Zu(e,t),n(\"]\");else if(e.isStatic){let s=xl(e.content)?e.content:JSON.stringify(e.content);n(s,-2,e)}else n(`[${e.content}]`,-3,e)}function ky(e,t){let{push:n,helper:s,pure:i}=t;i&&n(Ar),n(`${s(ei)}(${JSON.stringify(e.content)})`,-3,e)}function Ry(e,t){let{push:n,helper:s,pure:i}=t,{tag:r,props:o,children:l,patchFlag:a,dynamicProps:u,directives:f,isBlock:c,disableTracking:d,isComponent:g}=e,b;if(a)if(a<0)b=a+` /* ${Es[a]} */`;else{let P=Object.keys(Es).map(Number).filter(k=>k>0&&a&k).map(k=>Es[k]).join(\", \");b=a+` /* ${P} */`}f&&n(s(yl)+\"(\"),c&&n(`(${s(On)}(${d?\"true\":\"\"}), `),i&&n(Ar);let v=c?os(t.inSSR,g):rs(t.inSSR,g);n(s(v)+\"(\",-2,e),ni(My([r,o,l,b,u]),t),n(\")\"),c&&n(\")\"),f&&(n(\", \"),Ve(f,t),n(\")\"))}function My(e){let t=e.length;for(;t--&&e[t]==null;);return e.slice(0,t+1).map(n=>n||\"null\")}function Py(e,t){let{push:n,helper:s,pure:i}=t,r=Y(e.callee)?e.callee:s(e.callee);i&&n(Ar),n(r+\"(\",-2,e),ni(e.arguments,t),n(\")\")}function $y(e,t){let{push:n,indent:s,deindent:i,newline:r}=t,{properties:o}=e;if(!o.length){n(\"{}\",-2,e);return}let l=o.length>1||o.some(a=>a.value.type!==4);n(l?\"{\":\"{ \"),l&&s();for(let a=0;a<o.length;a++){let{key:u,value:f}=o[a];Oy(u,t),n(\": \"),Ve(f,t),a<o.length-1&&(n(\",\"),r())}l&&i(),n(l?\"}\":\" }\")}function Dy(e,t){kl(e.elements,t)}function Fy(e,t){let{push:n,indent:s,deindent:i}=t,{params:r,returns:o,body:l,newline:a,isSlot:u}=e;u&&n(`_${ss[wl]}(`),n(\"(\",-2,e),B(r)?ni(r,t):r&&Ve(r,t),n(\") => \"),(a||l)&&(n(\"{\"),s()),o?(a&&n(\"return \"),B(o)?kl(o,t):Ve(o,t)):l&&Ve(l,t),(a||l)&&(i(),n(\"}\")),u&&n(\")\")}function Ly(e,t){let{test:n,consequent:s,alternate:i,newline:r}=e,{push:o,indent:l,deindent:a,newline:u}=t;if(n.type===4){let c=!xl(n.content);c&&o(\"(\"),Xu(n,t),c&&o(\")\")}else o(\"(\"),Ve(n,t),o(\")\");r&&l(),t.indentLevel++,r||o(\" \"),o(\"? \"),Ve(s,t),t.indentLevel--,r&&u(),r||o(\" \"),o(\": \");let f=i.type===19;f||t.indentLevel++,Ve(i,t),f||t.indentLevel--,r&&a(!0)}function Vy(e,t){let{push:n,helper:s,indent:i,deindent:r,newline:o}=t,{needPauseTracking:l,needArraySpread:a}=e;a&&n(\"[...(\"),n(`_cache[${e.index}] || (`),l&&(i(),n(`${s(Xi)}(-1`),e.inVOnce&&n(\", true\"),n(\"),\"),o(),n(\"(\")),n(`_cache[${e.index}] = `),Ve(e.value,t),l&&(n(`).cacheIndex = ${e.index},`),o(),n(`${s(Xi)}(1),`),o(),n(`_cache[${e.index}]`),r()),n(\")\"),a&&n(\")]\")}var Hy=new RegExp(\"\\\\b\"+\"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\"),By=/'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;function gn(e,t,n=!1,s=!1){let i=e.content;if(i.trim())try{new Function(s?` ${i} `:`return ${n?`(${i}) => {}`:`(${i})`}`)}catch(r){let o=r.message,l=i.replace(By,\"\").match(Hy);l&&(o=`avoid using JavaScript keyword as property name: \"${l[0]}\"`),t.onError(fe(46,e.loc,void 0,o))}}var Uy=(e,t)=>{if(e.type===5)e.content=qr(e.content,t);else if(e.type===1){let n=ze(e,\"memo\");for(let s=0;s<e.props.length;s++){let i=e.props[s];if(i.type===7&&i.name!==\"for\"){let r=i.exp,o=i.arg;r&&r.type===4&&!(i.name===\"on\"&&o)&&!(n&&o&&o.type===4&&o.content===\"key\")&&(i.exp=qr(r,t,i.name===\"slot\")),o&&o.type===4&&!o.isStatic&&(i.arg=qr(o,t))}}}};function qr(e,t,n=!1,s=!1,i=Object.create(t.identifiers)){return gn(e,t,n,s),e}var jy=zu(/^(?:if|else|else-if)$/,(e,t,n)=>Ky(e,t,n,(s,i,r)=>{let o=n.parent.children,l=o.indexOf(s),a=0;for(;l-->=0;){let u=o[l];u&&u.type===9&&(a+=u.branches.length)}return()=>{if(r)s.codegenNode=qa(i,a,n);else{let u=qy(s.codegenNode);u.alternate=qa(i,a+s.branches.length-1,n)}}}));function Ky(e,t,n,s){if(t.name!==\"else\"&&(!t.exp||!t.exp.content.trim())){let i=t.exp?t.exp.loc:e.loc;n.onError(fe(28,t.loc)),t.exp=te(\"true\",!1,i)}if(t.exp&&gn(t.exp,n),t.name===\"if\"){let i=Wa(e,t),r={type:9,loc:dy(e.loc),branches:[i]};if(n.replaceNode(r),s)return s(r,i,!0)}else{let i=n.parent.children,r=[],o=i.indexOf(e);for(;o-->=-1;){let l=i[o];if(l&&Il(l)){n.removeNode(l),l.type===3&&r.unshift(l);continue}if(l&&l.type===9){(t.name===\"else-if\"||t.name===\"else\")&&l.branches[l.branches.length-1].condition===void 0&&n.onError(fe(30,e.loc)),n.removeNode();let a=Wa(e,t);r.length&&!(n.parent&&n.parent.type===1&&(n.parent.tag===\"transition\"||n.parent.tag===\"Transition\"))&&(a.children=[...r,...a.children]);{let f=a.userKey;f&&l.branches.forEach(({userKey:c})=>{Wy(c,f)&&n.onError(fe(29,a.userKey.loc))})}l.branches.push(a);let u=s&&s(l,a,!1);xr(a,n),u&&u(),n.currentNode=null}else n.onError(fe(30,e.loc));break}}}function Wa(e,t){let n=e.tagType===3;return{type:10,loc:e.loc,condition:t.name===\"else\"?void 0:t.exp,children:n&&!ze(e,\"for\")?e.children:[e],userKey:qs(e,\"key\"),isTemplateIf:n}}function qa(e,t,n){return e.condition?Ao(e.condition,Ga(e,t,n),Ae(n.helper(ei),['\"v-if\"',\"true\"])):Ga(e,t,n)}function Ga(e,t,n){let{helper:s}=n,i=xe(\"key\",te(`${t}`,!1,st,2)),{children:r}=e,o=r[0];if(r.length!==1||o.type!==1)if(r.length===1&&o.type===11){let a=o.codegenNode;return tr(a,i,n),a}else{let a=64;return!e.isTemplateIf&&r.filter(u=>u.type!==3).length===1&&(a|=2048),Ws(n,s(js),rt([i]),r,a,void 0,void 0,!0,!1,!1,e.loc)}else{let a=o.codegenNode,u=ny(a);return u.type===13&&El(u,n),tr(u,i,n),a}}function Wy(e,t){if(!e||e.type!==t.type)return!1;if(e.type===6){if(e.value.content!==t.value.content)return!1}else{let n=e.exp,s=t.exp;if(n.type!==s.type||n.type!==4||n.isStatic!==s.isStatic||n.content!==s.content)return!1}return!0}function qy(e){for(;;)if(e.type===19)if(e.alternate.type===19)e=e.alternate;else return e;else e.type===20&&(e=e.value)}var Gy=zu(\"for\",(e,t,n)=>{let{helper:s,removeHelper:i}=n;return Jy(e,t,n,r=>{let o=Ae(s(bl),[r.source]),l=Qi(e),a=ze(e,\"memo\"),u=qs(e,\"key\",!1,!0);u&&u.type;let f=u&&(u.type===6?u.value?te(u.value.content,!0):void 0:u.exp),c=u&&f?xe(\"key\",f):null,d=r.source.type===4&&r.source.constType>0,g=d?64:u?128:256;return r.codegenNode=Ws(n,s(js),void 0,o,g,void 0,void 0,!0,!d,!1,e.loc),()=>{let b,{children:v}=r;l&&e.children.some(T=>{if(T.type===1){let p=qs(T,\"key\");if(p)return n.onError(fe(33,p.loc)),!0}});let P=v.length!==1||v[0].type!==1,k=er(e)?e:l&&e.children.length===1&&er(e.children[0])?e.children[0]:null;if(k?(b=k.codegenNode,l&&c&&tr(b,c,n)):P?b=Ws(n,s(js),c?rt([c]):void 0,e.children,64,void 0,void 0,!0,void 0,!1):(b=v[0].codegenNode,l&&c&&tr(b,c,n),b.isBlock!==!d&&(b.isBlock?(i(On),i(os(n.inSSR,b.isComponent))):i(rs(n.inSSR,b.isComponent))),b.isBlock=!d,b.isBlock?(s(On),s(os(n.inSSR,b.isComponent))):s(rs(n.inSSR,b.isComponent))),a){let T=is(ko(r.parseResult,[te(\"_cached\")]));T.body=Kg([yt([\"const _memo = (\",a.exp,\")\"]),yt([\"if (_cached\",...f?[\" && _cached.key === \",f]:[],` && ${n.helperString(Mu)}(_cached, _memo)) return _cached`]),yt([\"const _item = \",b]),te(\"_item.memo = _memo\"),te(\"return _item\")]),o.arguments.push(T,te(\"_cache\"),te(String(n.cached.length))),n.cached.push(null)}else o.arguments.push(is(ko(r.parseResult),b,!0))}})});function Jy(e,t,n,s){if(!t.exp){n.onError(fe(31,t.loc));return}let i=t.forParseResult;if(!i){n.onError(fe(32,t.loc));return}Qu(i,n);let{addIdentifiers:r,removeIdentifiers:o,scopes:l}=n,{source:a,value:u,key:f,index:c}=i,d={type:11,loc:t.loc,source:a,valueAlias:u,keyAlias:f,objectIndexAlias:c,parseResult:i,children:Qi(e)?e.children:[e]};n.replaceNode(d),l.vFor++;let g=s&&s(d);return()=>{l.vFor--,g&&g()}}function Qu(e,t){e.finalized||(gn(e.source,t),e.key&&gn(e.key,t,!0),e.index&&gn(e.index,t,!0),e.value&&gn(e.value,t,!0),e.finalized=!0)}function ko({value:e,key:t,index:n},s=[]){return zy([e,t,n,...s])}function zy(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map((n,s)=>n||te(\"_\".repeat(s+1),!1))}var Ja=te(\"undefined\",!1),Yy=(e,t)=>{if(e.type===1&&(e.tagType===1||e.tagType===3)){let n=ze(e,\"slot\");if(n)return n.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},Xy=(e,t,n,s)=>is(e,n,!1,!0,n.length?n[0].loc:s);function Zy(e,t,n=Xy){t.helper(wl);let{children:s,loc:i}=e,r=[],o=[],l=t.scopes.vSlot>0||t.scopes.vFor>0,a=ze(e,\"slot\",!0);if(a){let{arg:P,exp:k}=a;P&&!Ye(P)&&(l=!0),r.push(xe(P||te(\"default\",!0),n(k,void 0,s,i)))}let u=!1,f=!1,c=[],d=new Set,g=0;for(let P=0;P<s.length;P++){let k=s[P],T;if(!Qi(k)||!(T=ze(k,\"slot\",!0))){k.type!==3&&c.push(k);continue}if(a){t.onError(fe(37,T.loc));break}u=!0;let{children:p,loc:S}=k,{arg:y=te(\"default\",!0),exp:A,loc:V}=T,N;Ye(y)?N=y?y.content:\"default\":l=!0;let _=ze(k,\"for\"),x=n(A,_,p,S),$,w;if($=ze(k,\"if\"))l=!0,o.push(Ao($.exp,di(y,x,g++),Ja));else if(w=ze(k,/^else(?:-if)?$/,!0)){let L=P,J;for(;L--&&(J=s[L],!!Il(J)););if(J&&Qi(J)&&ze(J,/^(?:else-)?if$/)){let z=o[o.length-1];for(;z.alternate.type===19;)z=z.alternate;z.alternate=w.exp?Ao(w.exp,di(y,x,g++),Ja):di(y,x,g++)}else t.onError(fe(30,w.loc))}else if(_){l=!0;let L=_.forParseResult;L?(Qu(L,t),o.push(Ae(t.helper(bl),[L.source,is(ko(L),di(y,x),!0)]))):t.onError(fe(32,_.loc))}else{if(N){if(d.has(N)){t.onError(fe(38,V));continue}d.add(N),N===\"default\"&&(f=!0)}r.push(xe(y,x))}}if(!a){let P=(k,T)=>{let p=n(k,void 0,T,i);return xe(\"default\",p)};u?c.length&&!c.every(Nl)&&(f?t.onError(fe(39,c[0].loc)):r.push(P(void 0,c))):r.push(P(void 0,s))}let b=l?2:wi(e.children)?3:1,v=rt(r.concat(xe(\"_\",te(b+` /* ${Sh[b]} */`,!1))),i);return o.length&&(v=Ae(t.helper(Ru),[v,En(o)])),{slots:v,hasDynamicSlots:l}}function di(e,t,n){let s=[xe(\"name\",e),xe(\"fn\",t)];return n!=null&&s.push(xe(\"key\",te(String(n),!0))),rt(s)}function wi(e){for(let t=0;t<e.length;t++){let n=e[t];switch(n.type){case 1:if(n.tagType===2||wi(n.children))return!0;break;case 9:if(wi(n.branches))return!0;break;case 10:case 11:if(wi(n.children))return!0;break}}return!1}var eh=new WeakMap,Qy=(e,t)=>function(){if(e=t.currentNode,!(e.type===1&&(e.tagType===0||e.tagType===1)))return;let{tag:s,props:i}=e,r=e.tagType===1,o=r?eb(e,t):`\"${s}\"`,l=se(o)&&o.callee===ml,a,u,f=0,c,d,g,b=l||o===Rs||o===fl||!r&&(s===\"svg\"||s===\"foreignObject\"||s===\"math\");if(i.length>0){let v=th(e,t,void 0,r,l);a=v.props,f=v.patchFlag,d=v.dynamicPropNames;let P=v.directives;g=P&&P.length?En(P.map(k=>nb(k,t))):void 0,v.shouldUseBlock&&(b=!0)}if(e.children.length>0)if(o===zi&&(b=!0,f|=1024,e.children.length>1&&t.onError(fe(47,{start:e.children[0].loc.start,end:e.children[e.children.length-1].loc.end,source:\"\"}))),r&&o!==Rs&&o!==zi){let{slots:P,hasDynamicSlots:k}=Zy(e,t);u=P,k&&(f|=1024)}else if(e.children.length===1&&o!==Rs){let P=e.children[0],k=P.type,T=k===5||k===8;T&&tt(P,t)===0&&(f|=1),T||k===2?u=P:u=e.children}else u=e.children;d&&d.length&&(c=sb(d)),e.codegenNode=Ws(t,o,a,u,f===0?void 0:f,c,g,!!b,!1,r,e.loc)};function eb(e,t,n=!1){let{tag:s}=e,i=Ro(s),r=qs(e,\"is\",!1,!0);if(r)if(i){let l;if(r.type===6?l=r.value&&te(r.value.content,!0):(l=r.exp,l||(l=te(\"is\",!1,r.arg.loc))),l)return Ae(t.helper(ml),[l])}else r.type===6&&r.value.content.startsWith(\"vue:\")&&(s=r.value.content.slice(4));let o=$u(s)||t.isBuiltInComponent(s);return o?(n||t.helper(o),o):(t.helper(pl),t.components.add(s),Al(s,\"component\"))}function th(e,t,n=e.props,s,i,r=!1){let{tag:o,loc:l,children:a}=e,u=[],f=[],c=[],d=a.length>0,g=!1,b=0,v=!1,P=!1,k=!1,T=!1,p=!1,S=!1,y=[],A=x=>{u.length&&(f.push(rt(za(u),l)),u=[]),x&&f.push(x)},V=()=>{t.scopes.vFor>0&&u.push(xe(te(\"ref_for\",!0),te(\"true\")))},N=({key:x,value:$})=>{if(Ye(x)){let w=x.content,L=on(w);if(L&&(!s||i)&&w.toLowerCase()!==\"onclick\"&&w!==\"onUpdate:modelValue\"&&!Ut(w)&&(T=!0),L&&Ut(w)&&(S=!0),L&&$.type===14&&($=$.arguments[0]),$.type===20||($.type===4||$.type===8)&&tt($,t)>0)return;w===\"ref\"?v=!0:w===\"class\"?P=!0:w===\"style\"?k=!0:w!==\"key\"&&!y.includes(w)&&y.push(w),s&&(w===\"class\"||w===\"style\")&&!y.includes(w)&&y.push(w)}else p=!0};for(let x=0;x<n.length;x++){let $=n[x];if($.type===6){let{loc:w,name:L,nameLoc:J,value:z}=$,K=!0;if(L===\"ref\"&&(v=!0,V()),L===\"is\"&&(Ro(o)||z&&z.content.startsWith(\"vue:\")))continue;u.push(xe(te(L,!0,J),te(z?z.content:\"\",K,z?z.loc:w)))}else{let{name:w,arg:L,exp:J,loc:z,modifiers:K}=$,W=w===\"bind\",j=w===\"on\";if(w===\"slot\"){s||t.onError(fe(40,z));continue}if(w===\"once\"||w===\"memo\"||w===\"is\"||W&&pn(L,\"is\")&&Ro(o)||j&&r)continue;if((W&&pn(L,\"key\")||j&&d&&pn(L,\"vue:before-update\"))&&(g=!0),W&&pn(L,\"ref\")&&V(),!L&&(W||j)){p=!0,J?W?(V(),A(),f.push(J)):A({type:14,loc:z,callee:t.helper(Sl),arguments:s?[J]:[J,\"true\"]}):t.onError(fe(W?34:35,z));continue}W&&K.some(Ze=>Ze.content===\"prop\")&&(b|=32);let re=t.directiveTransforms[w];if(re){let{props:Ze,needRuntime:Rt}=re($,e,t);!r&&Ze.forEach(N),j&&L&&!Ye(L)?A(rt(Ze,l)):u.push(...Ze),Rt&&(c.push($),Xe(Rt)&&eh.set($,Rt))}else oc(w)||(c.push($),d&&(g=!0))}}let _;if(f.length?(A(),f.length>1?_=Ae(t.helper(Yi),f,l):_=f[0]):u.length&&(_=rt(za(u),l)),p?b|=16:(P&&!s&&(b|=2),k&&!s&&(b|=4),y.length&&(b|=8),T&&(b|=32)),!g&&(b===0||b===32)&&(v||S||c.length>0)&&(b|=512),!t.inSSR&&_)switch(_.type){case 15:let x=-1,$=-1,w=!1;for(let z=0;z<_.properties.length;z++){let K=_.properties[z].key;Ye(K)?K.content===\"class\"?x=z:K.content===\"style\"&&($=z):K.isHandlerKey||(w=!0)}let L=_.properties[x],J=_.properties[$];w?_=Ae(t.helper(Ks),[_]):(L&&!Ye(L.value)&&(L.value=Ae(t.helper(vl),[L.value])),J&&(k||J.value.type===4&&J.value.content.trim()[0]===\"[\"||J.value.type===17)&&(J.value=Ae(t.helper(_l),[J.value])));break;case 14:break;default:_=Ae(t.helper(Ks),[Ae(t.helper(ti),[_])]);break}return{props:_,directives:c,patchFlag:b,dynamicPropNames:y,shouldUseBlock:g}}function za(e){let t=new Map,n=[];for(let s=0;s<e.length;s++){let i=e[s];if(i.key.type===8||!i.key.isStatic){n.push(i);continue}let r=i.key.content,o=t.get(r);o?(r===\"style\"||r===\"class\"||on(r))&&tb(o,i):(t.set(r,i),n.push(i))}return n}function tb(e,t){e.value.type===17?e.value.elements.push(t.value):e.value=En([e.value,t.value],e.loc)}function nb(e,t){let n=[],s=eh.get(e);s?n.push(t.helperString(s)):(t.helper(gl),t.directives.add(e.name),n.push(Al(e.name,\"directive\")));let{loc:i}=e;if(e.exp&&n.push(e.exp),e.arg&&(e.exp||n.push(\"void 0\"),n.push(e.arg)),Object.keys(e.modifiers).length){e.arg||(e.exp||n.push(\"void 0\"),n.push(\"void 0\"));let r=te(\"true\",!1,i);n.push(rt(e.modifiers.map(o=>xe(o,r)),i))}return En(n,e.loc)}function sb(e){let t=\"[\";for(let n=0,s=e.length;n<s;n++)t+=JSON.stringify(e[n]),n<s-1&&(t+=\", \");return t+\"]\"}function Ro(e){return e===\"component\"||e===\"Component\"}var ib=(e,t)=>{if(er(e)){let{children:n,loc:s}=e,{slotName:i,slotProps:r}=rb(e,t),o=[t.prefixIdentifiers?\"_ctx.$slots\":\"$slots\",i,\"{}\",\"undefined\",\"true\"],l=2;r&&(o[2]=r,l=3),n.length&&(o[3]=is([],n,!1,!1,s),l=4),t.scopeId&&!t.slotted&&(l=5),o.splice(l),e.codegenNode=Ae(t.helper(ku),o,s)}};function rb(e,t){let n='\"default\"',s,i=[];for(let r=0;r<e.props.length;r++){let o=e.props[r];if(o.type===6)o.value&&(o.name===\"name\"?n=JSON.stringify(o.value.content):(o.name=le(o.name),i.push(o)));else if(o.name===\"bind\"&&pn(o.arg,\"name\")){if(o.exp)n=o.exp;else if(o.arg&&o.arg.type===4){let l=le(o.arg.content);n=o.exp=te(l,!1,o.arg.loc)}}else o.name===\"bind\"&&o.arg&&Ye(o.arg)&&(o.arg.content=le(o.arg.content)),i.push(o)}if(i.length>0){let{props:r,directives:o}=th(e,t,i,!1,!1);s=r,o.length&&t.onError(fe(36,o[0].loc))}return{slotName:n,slotProps:s}}var nh=(e,t,n,s)=>{let{loc:i,modifiers:r,arg:o}=e;!e.exp&&!r.length&&n.onError(fe(35,i));let l;if(o.type===4)if(o.isStatic){let c=o.content;c.startsWith(\"vnode\")&&n.onError(fe(52,o.loc)),c.startsWith(\"vue:\")&&(c=`vnode-${c.slice(4)}`);let d=t.tagType!==0||c.startsWith(\"vnode\")||!/[A-Z]/.test(c)?xt(le(c)):`on:${c}`;l=te(d,!0,o.loc)}else l=yt([`${n.helperString(xo)}(`,o,\")\"]);else l=o,l.children.unshift(`${n.helperString(xo)}(`),l.children.push(\")\");let a=e.exp;a&&!a.content.trim()&&(a=void 0);let u=n.cacheHandlers&&!a&&!n.inVOnce;if(a){let c=Lu(a),d=!(c||Zg(a)),g=a.content.includes(\";\");gn(a,n,!1,g),(d||u&&c)&&(a=yt([`${d?\"$event\":\"(...args)\"} => ${g?\"{\":\"(\"}`,a,g?\"}\":\")\"]))}let f={props:[xe(l,a||te(\"() => {}\",!1,i))]};return s&&(f=s(f)),u&&(f.props[0].value=n.cache(f.props[0].value)),f.props.forEach(c=>c.key.isHandlerKey=!0),f},ob=(e,t,n)=>{let{modifiers:s,loc:i}=e,r=e.arg,{exp:o}=e;return o&&o.type===4&&!o.content.trim()&&(o=void 0),r.type!==4?(r.children.unshift(\"(\"),r.children.push(') || \"\"')):r.isStatic||(r.content=r.content?`${r.content} || \"\"`:'\"\"'),s.some(l=>l.content===\"camel\")&&(r.type===4?r.isStatic?r.content=le(r.content):r.content=`${n.helperString(Co)}(${r.content})`:(r.children.unshift(`${n.helperString(Co)}(`),r.children.push(\")\"))),n.inSSR||(s.some(l=>l.content===\"prop\")&&Ya(r,\".\"),s.some(l=>l.content===\"attr\")&&Ya(r,\"^\")),{props:[xe(r,o)]}},Ya=(e,t)=>{e.type===4?e.isStatic?e.content=t+e.content:e.content=`\\`${t}\\${${e.content}}\\``:(e.children.unshift(`'${t}' + (`),e.children.push(\")\"))},lb=(e,t)=>{if(e.type===0||e.type===1||e.type===11||e.type===10)return()=>{let n=e.children,s,i=!1;for(let r=0;r<n.length;r++){let o=n[r];if(Wr(o)){i=!0;for(let l=r+1;l<n.length;l++){let a=n[l];if(Wr(a))s||(s=n[r]=yt([o],o.loc)),s.children.push(\" + \",a),n.splice(l,1),l--;else{s=void 0;break}}}}if(!(!i||n.length===1&&(e.type===0||e.type===1&&e.tagType===0&&!e.props.find(r=>r.type===7&&!t.directiveTransforms[r.name]))))for(let r=0;r<n.length;r++){let o=n[r];if(Wr(o)||o.type===8){let l=[];(o.type!==2||o.content!==\" \")&&l.push(o),!t.ssr&&tt(o,t)===0&&l.push(`1 /* ${Es[1]} */`),n[r]={type:12,content:o,loc:o.loc,codegenNode:Ae(t.helper(dl),l)}}}}},Xa=new WeakSet,ab=(e,t)=>{if(e.type===1&&ze(e,\"once\",!0))return Xa.has(e)||t.inVOnce||t.inSSR?void 0:(Xa.add(e),t.inVOnce=!0,t.helper(Xi),()=>{t.inVOnce=!1;let n=t.currentNode;n.codegenNode&&(n.codegenNode=t.cache(n.codegenNode,!0,!0))})},sh=(e,t,n)=>{let{exp:s,arg:i}=e;if(!s)return n.onError(fe(41,e.loc)),vs();let r=s.loc.source.trim(),o=s.type===4?s.content:r,l=n.bindingMetadata[r];if(l===\"props\"||l===\"props-aliased\")return n.onError(fe(44,s.loc)),vs();if(l===\"literal-const\"||l===\"setup-const\")return n.onError(fe(45,s.loc)),vs();if(!o.trim()||!Lu(s))return n.onError(fe(42,s.loc)),vs();let a=i||te(\"modelValue\",!0),u=i?Ye(i)?`onUpdate:${le(i.content)}`:yt(['\"onUpdate:\" + ',i]):\"onUpdate:modelValue\",f,c=n.isTS?\"($event: any)\":\"$event\";f=yt([`${c} => ((`,s,\") = $event)\"]);let d=[xe(a,e.exp),xe(u,f)];if(e.modifiers.length&&t.tagType===1){let g=e.modifiers.map(v=>v.content).map(v=>(xl(v)?v:JSON.stringify(v))+\": true\").join(\", \"),b=i?Ye(i)?`${i.content}Modifiers`:yt([i,' + \"Modifiers\"']):\"modelModifiers\";d.push(xe(b,te(`{ ${g} }`,!1,e.loc,2)))}return vs(d)};function vs(e=[]){return{props:e}}var Za=new WeakSet,cb=(e,t)=>{if(e.type===1){let n=ze(e,\"memo\");return!n||Za.has(e)||t.inSSR?void 0:(Za.add(e),()=>{let s=e.codegenNode||t.currentNode.codegenNode;s&&s.type===13&&(e.tagType!==1&&El(s,t),e.codegenNode=Ae(t.helper(Tl),[n.exp,is(void 0,s),\"_cache\",String(t.cached.length)]),t.cached.push(null))})}},fb=(e,t)=>{if(e.type===1){for(let n of e.props)if(n.type===7&&n.name===\"bind\"&&(!n.exp||n.exp.type===4&&!n.exp.content.trim())&&n.arg){let s=n.arg;if(s.type!==4||!s.isStatic)t.onError(fe(53,s.loc)),n.exp=te(\"\",!0,s.loc);else{let i=le(s.content);(Du.test(i[0])||i[0]===\"-\")&&(n.exp=te(i,!1,s.loc))}}}};function ub(e){return[[fb,ab,jy,cb,Gy,Uy,ib,Qy,Yy,lb],{on:nh,bind:ob,model:sh}]}function hb(e,t={}){let n=t.onError||Cl,s=t.mode===\"module\";t.prefixIdentifiers===!0?n(fe(48)):s&&n(fe(49));let i=!1;t.cacheHandlers&&n(fe(50)),t.scopeId&&!s&&n(fe(51));let r=ee({},t,{prefixIdentifiers:i}),o=Y(e)?gy(e,r):e,[l,a]=ub();return _y(o,ee({},r,{nodeTransforms:[...l,...t.nodeTransforms||[]],directiveTransforms:ee({},a,t.directiveTransforms||{})})),Ey(o,r)}var db=()=>({props:[]}),ih=Symbol(\"vModelRadio\"),rh=Symbol(\"vModelCheckbox\"),oh=Symbol(\"vModelText\"),lh=Symbol(\"vModelSelect\"),Mo=Symbol(\"vModelDynamic\"),ah=Symbol(\"vOnModifiersGuard\"),ch=Symbol(\"vOnKeysGuard\"),fh=Symbol(\"vShow\"),Rl=Symbol(\"Transition\"),uh=Symbol(\"TransitionGroup\");Bg({[ih]:\"vModelRadio\",[rh]:\"vModelCheckbox\",[oh]:\"vModelText\",[lh]:\"vModelSelect\",[Mo]:\"vModelDynamic\",[ah]:\"withModifiers\",[ch]:\"withKeys\",[fh]:\"vShow\",[Rl]:\"Transition\",[uh]:\"TransitionGroup\"});var Fn;function pb(e,t=!1){return Fn||(Fn=document.createElement(\"div\")),t?(Fn.innerHTML=`<div foo=\"${e.replace(/\"/g,\"&quot;\")}\">`,Fn.children[0].getAttribute(\"foo\")):(Fn.innerHTML=e,Fn.textContent)}var mb={parseMode:\"html\",isVoidTag:Ph,isNativeTag:e=>ac(e)||cc(e)||fc(e),isPreTag:e=>e===\"pre\",isIgnoreNewlineTag:e=>e===\"pre\"||e===\"textarea\",decodeEntities:pb,isBuiltInComponent:e=>{if(e===\"Transition\"||e===\"transition\")return Rl;if(e===\"TransitionGroup\"||e===\"transition-group\")return uh},getNamespace(e,t,n){let s=t?t.ns:n;if(t&&s===2)if(t.tag===\"annotation-xml\"){if(e===\"svg\")return 1;t.props.some(i=>i.type===6&&i.name===\"encoding\"&&i.value!=null&&(i.value.content===\"text/html\"||i.value.content===\"application/xhtml+xml\"))&&(s=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&e!==\"mglyph\"&&e!==\"malignmark\"&&(s=0);else t&&s===1&&(t.tag===\"foreignObject\"||t.tag===\"desc\"||t.tag===\"title\")&&(s=0);if(s===0){if(e===\"svg\")return 1;if(e===\"math\")return 2}return s}},gb=e=>{e.type===1&&e.props.forEach((t,n)=>{t.type===6&&t.name===\"style\"&&t.value&&(e.props[n]={type:7,name:\"bind\",arg:te(\"style\",!0,t.loc),exp:yb(t.value.content,t.loc),modifiers:[],loc:t.loc})})},yb=(e,t)=>{let n=lc(e);return te(JSON.stringify(n),!1,t,3)};function mt(e,t){return fe(e,t,bb)}var bb={54:\"v-html is missing expression.\",55:\"v-html will override element children.\",56:\"v-text is missing expression.\",57:\"v-text will override element children.\",58:\"v-model can only be used on <input>, <textarea> and <select> elements.\",59:\"v-model argument is not supported on plain elements.\",60:\"v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.\",61:\"Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.\",62:\"v-show is missing expression.\",63:\"<Transition> expects exactly one child element or component.\",64:\"Tags with side effect (<script> and <style>) are ignored in client component templates.\"},vb=(e,t,n)=>{let{exp:s,loc:i}=e;return s||n.onError(mt(54,i)),t.children.length&&(n.onError(mt(55,i)),t.children.length=0),{props:[xe(te(\"innerHTML\",!0,i),s||te(\"\",!0))]}},_b=(e,t,n)=>{let{exp:s,loc:i}=e;return s||n.onError(mt(56,i)),t.children.length&&(n.onError(mt(57,i)),t.children.length=0),{props:[xe(te(\"textContent\",!0),s?tt(s,n)>0?s:Ae(n.helperString(Cr),[s],i):te(\"\",!0))]}},Sb=(e,t,n)=>{let s=sh(e,t,n);if(!s.props.length||t.tagType===1)return s;e.arg&&n.onError(mt(59,e.arg.loc));function i(){let l=ze(t,\"bind\");l&&pn(l.arg,\"value\")&&n.onError(mt(61,l.loc))}let{tag:r}=t,o=n.isCustomElement(r);if(r===\"input\"||r===\"textarea\"||r===\"select\"||o){let l=oh,a=!1;if(r===\"input\"||o){let u=qs(t,\"type\");if(u){if(u.type===7)l=Mo;else if(u.value)switch(u.value.content){case\"radio\":l=ih;break;case\"checkbox\":l=rh;break;case\"file\":a=!0,n.onError(mt(60,e.loc));break;default:i();break}}else Qg(t)?l=Mo:i()}else r===\"select\"?l=lh:i();a||(s.needRuntime=n.helper(l))}else n.onError(mt(58,e.loc));return s.props=s.props.filter(l=>!(l.key.type===4&&l.key.content===\"modelValue\")),s},wb=Ie(\"passive,once,capture\"),Tb=Ie(\"stop,prevent,self,ctrl,shift,alt,meta,exact,middle\"),Eb=Ie(\"left,right\"),hh=Ie(\"onkeyup,onkeydown,onkeypress\"),Cb=(e,t,n,s)=>{let i=[],r=[],o=[];for(let l=0;l<t.length;l++){let a=t[l].content;wb(a)?o.push(a):Eb(a)?Ye(e)?hh(e.content.toLowerCase())?i.push(a):r.push(a):(i.push(a),r.push(a)):Tb(a)?r.push(a):i.push(a)}return{keyModifiers:i,nonKeyModifiers:r,eventOptionModifiers:o}},Qa=(e,t)=>Ye(e)&&e.content.toLowerCase()===\"onclick\"?te(t,!0):e.type!==4?yt([\"(\",e,`) === \"onClick\" ? \"${t}\" : (`,e,\")\"]):e,xb=(e,t,n)=>nh(e,t,n,s=>{let{modifiers:i}=e;if(!i.length)return s;let{key:r,value:o}=s.props[0],{keyModifiers:l,nonKeyModifiers:a,eventOptionModifiers:u}=Cb(r,i,n,e.loc);if(a.includes(\"right\")&&(r=Qa(r,\"onContextmenu\")),a.includes(\"middle\")&&(r=Qa(r,\"onMouseup\")),a.length&&(o=Ae(n.helper(ah),[o,JSON.stringify(a)])),l.length&&(!Ye(r)||hh(r.content.toLowerCase()))&&(o=Ae(n.helper(ch),[o,JSON.stringify(l)])),u.length){let f=u.map(Ot).join(\"\");r=Ye(r)?te(`${r.content}${f}`,!0):yt([\"(\",r,`) + \"${f}\"`])}return{props:[xe(r,o)]}}),Ab=(e,t,n)=>{let{exp:s,loc:i}=e;return s||n.onError(mt(62,i)),{props:[],needRuntime:n.helper(fh)}},Nb=(e,t)=>{if(e.type===1&&e.tagType===1&&t.isBuiltInComponent(e.tag)===Rl)return()=>{if(!e.children.length)return;dh(e)&&t.onError(mt(63,{start:e.children[0].loc.start,end:e.children[e.children.length-1].loc.end,source:\"\"}));let s=e.children[0];if(s.type===1)for(let i of s.props)i.type===7&&i.name===\"show\"&&e.props.push({type:6,name:\"persisted\",nameLoc:e.loc,value:void 0,loc:e.loc})}};function dh(e){let t=e.children=e.children.filter(s=>!Il(s)),n=t[0];return t.length!==1||n.type===11||n.type===9&&n.branches.some(dh)}var Ib=(e,t)=>{e.type===1&&e.tagType===0&&(e.tag===\"script\"||e.tag===\"style\")&&(t.onError(mt(64,e.loc)),t.removeNode())};function Ob(e,t){return e===\"template\"?!0:e in ec?ec[e].has(t):t in tc?tc[t].has(e):!(e in nc&&nc[e].has(t)||t in sc&&sc[t].has(e))}var Ln=new Set([\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"]),hn=new Set([]),ec={head:new Set([\"base\",\"basefront\",\"bgsound\",\"link\",\"meta\",\"title\",\"noscript\",\"noframes\",\"style\",\"script\",\"template\"]),optgroup:new Set([\"option\"]),select:new Set([\"optgroup\",\"option\",\"hr\"]),table:new Set([\"caption\",\"colgroup\",\"tbody\",\"tfoot\",\"thead\"]),tr:new Set([\"td\",\"th\"]),colgroup:new Set([\"col\"]),tbody:new Set([\"tr\"]),thead:new Set([\"tr\"]),tfoot:new Set([\"tr\"]),script:hn,iframe:hn,option:hn,textarea:hn,style:hn,title:hn},tc={html:hn,body:new Set([\"html\"]),head:new Set([\"html\"]),td:new Set([\"tr\"]),colgroup:new Set([\"table\"]),caption:new Set([\"table\"]),tbody:new Set([\"table\"]),tfoot:new Set([\"table\"]),col:new Set([\"colgroup\"]),th:new Set([\"tr\"]),thead:new Set([\"table\"]),tr:new Set([\"tbody\",\"thead\",\"tfoot\"]),dd:new Set([\"dl\",\"div\"]),dt:new Set([\"dl\",\"div\"]),figcaption:new Set([\"figure\"]),summary:new Set([\"details\"]),area:new Set([\"map\"])},nc={p:new Set([\"address\",\"article\",\"aside\",\"blockquote\",\"center\",\"details\",\"dialog\",\"dir\",\"div\",\"dl\",\"fieldset\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"li\",\"main\",\"nav\",\"menu\",\"ol\",\"p\",\"pre\",\"section\",\"table\",\"ul\"]),svg:new Set([\"b\",\"blockquote\",\"br\",\"code\",\"dd\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"hr\",\"i\",\"img\",\"li\",\"menu\",\"meta\",\"ol\",\"p\",\"pre\",\"ruby\",\"s\",\"small\",\"span\",\"strong\",\"sub\",\"sup\",\"table\",\"u\",\"ul\",\"var\"])},sc={a:new Set([\"a\"]),button:new Set([\"button\"]),dd:new Set([\"dd\",\"dt\"]),dt:new Set([\"dd\",\"dt\"]),form:new Set([\"form\"]),li:new Set([\"li\"]),h1:Ln,h2:Ln,h3:Ln,h4:Ln,h5:Ln,h6:Ln},kb=(e,t)=>{if(e.type===1&&e.tagType===0&&t.parent&&t.parent.type===1&&t.parent.tagType===0&&!Ob(t.parent.tag,e.tag)){let n=new SyntaxError(`<${e.tag}> cannot be child of <${t.parent.tag}>, according to HTML specifications. This can cause hydration errors or potentially disrupt future functionality.`);n.loc=e.loc,t.onWarn(n)}},Rb=[gb,Nb,kb],Mb={cloak:db,html:vb,text:_b,model:Sb,on:xb,show:Ab};function Pb(e,t={}){return hb(e,ee({},mb,t,{nodeTransforms:[Ib,...Rb,...t.nodeTransforms||[]],directiveTransforms:ee({},Mb,t.directiveTransforms||{}),transformHoist:null}))}Pg();var ic=Object.create(null);function $b(e,t){if(!Y(e))if(e.nodeType)e=e.innerHTML;else return be(\"invalid template option: \",e),Te;let n=_h(e,t),s=ic[n];if(s)return s;if(e[0]===\"#\"){let a=document.querySelector(e);a||be(`Template element not found or is empty: ${e}`),e=a?a.innerHTML:\"\"}let i=ee({hoistStatic:!0,onError:o,onWarn:a=>o(a,!0)},t);!i.isCustomElement&&typeof customElements<\"u\"&&(i.isCustomElement=a=>!!customElements.get(a));let{code:r}=Pb(e,i);function o(a,u=!1){let f=u?a.message:`Template compilation error: ${a.message}`,c=a.loc&&Eh(e,a.loc.start.offset,a.loc.end.offset);be(c?`${f}\n${c}`:f)}let l=new Function(\"Vue\",r)(Mg);return l._rc=!0,ic[n]=l}Wf($b);export{ef as BaseTransition,Go as BaseTransitionPropsValidators,me as Comment,Km as DeprecationTypes,Ms as EffectScope,Ed as ErrorCodes,Fm as ErrorTypeStrings,Ce as Fragment,pp as KeepAlive,Cn as ReactiveEffect,sn as Static,gm as Suspense,Jd as Teleport,It as Text,gd as TrackOpTypes,Jm as Transition,vg as TransitionGroup,yd as TriggerOpTypes,qi as VueElement,Bo as assertNumber,at as callWithAsyncErrorHandling,Rn as callWithErrorHandling,le as camelize,Ot as capitalize,ct as cloneVNode,jm as compatUtils,$b as compile,zf as computed,Eo as createApp,Bi as createBlock,Am as createCommentVNode,wm as createElementBlock,il as createElementVNode,If as createHydrationRenderer,Vp as createPropsRestProxy,Nf as createRenderer,wu as createSSRApp,Sp as createSlots,xm as createStaticVNode,rl as createTextVNode,ge as createVNode,Mc as customRef,hp as defineAsyncComponent,Jo as defineComponent,cu as defineCustomElement,Ip as defineEmits,Op as defineExpose,Mp as defineModel,kp as defineOptions,Np as defineProps,dg as defineSSRCustomElement,Rp as defineSlots,Lm as devtools,Wh as effect,Uh as effectScope,He as getCurrentInstance,gc as getCurrentScope,bd as getCurrentWatcher,yr as getTransitionRawChildren,Vf as guardReactiveProps,Yf as h,ln as handleError,jd as hasInjectionContext,kg as hydrate,op as hydrateOnIdle,fp as hydrateOnInteraction,cp as hydrateOnMediaQuery,ap as hydrateOnVisible,Xf as initCustomFormatter,Rg as initDirectivesForSSR,As as inject,Zf as isMemoSame,xn as isProxy,jt as isReactive,lt as isReadonly,ye as isRef,ll as isRuntimeOnly,Re as isShallow,kt as isVNode,Oc as markRaw,Fp as mergeDefaults,Lp as mergeModels,Bf as mergeProps,pr as nextTick,eu as nodeOps,cs as normalizeClass,Ih as normalizeProps,as as normalizeStyle,rf as onActivated,af as onBeforeMount,_r as onBeforeUnmount,Yo as onBeforeUpdate,of as onDeactivated,hf as onErrorCaptured,Xs as onMounted,uf as onRenderTracked,ff as onRenderTriggered,jh as onScopeDispose,cf as onServerPrefetch,Sr as onUnmounted,vr as onUpdated,$c as onWatcherCleanup,Bs as openBlock,au as patchProp,Hd as popScopeId,Kc as provide,Ho as proxyRefs,Vd as pushScopeId,Zn as queuePostFlushCb,ur as reactive,Ds as readonly,vn as ref,Wf as registerRuntimeCompiler,Su as render,_p as renderList,wp as renderSlot,yp as resolveComponent,vp as resolveDirective,bp as resolveDynamicComponent,Um as resolveFilter,Qn as resolveTransitionHooks,Us as setBlockTracking,Vm as setDevtoolsHook,Gt as setTransitionHooks,Ic as shallowReactive,dt as shallowReadonly,kc as shallowRef,Wc as ssrContextKey,Bm as ssrUtils,qh as stop,dc as toDisplayString,xt as toHandlerKey,Tp as toHandlers,Q as toRaw,pd as toRef,dd as toRefs,ud as toValue,Tm as transformVNodeArgs,fd as triggerRef,Js as unref,Dp as useAttrs,gg as useCssModule,Qm as useCssVars,fu as useHost,Yd as useId,zp as useModel,qc as useSSRContext,mg as useShadowRoot,$p as useSlots,Xd as useTemplateRef,qo as useTransitionState,al as vModelCheckbox,gu as vModelDynamic,cl as vModelRadio,pu as vModelSelect,Ji as vModelText,ou as vShow,_o as version,be as warn,Wn as watch,Kd as watchEffect,Wd as watchPostEffect,Gc as watchSyncEffect,Hp as withAsyncContext,Wo as withCtx,Pp as withDefaults,Ud as withDirectives,Og as withKeys,Dm as withMemo,Ng as withModifiers,Bd as withScopeId};\n/*! Bundled license information:\n\nvue/dist/vue.esm-browser.js:\n  (**\n  * vue v3.5.30\n  * (c) 2018-present Yuxi (Evan) You and Vue contributors\n  * @license MIT\n  **)\n*/\n"
  },
  {
    "path": "modules/system/assets/vendor/vue-router/vue-router.esm.js",
    "content": "function lt(e){let t=Object.create(null);for(let n of e.split(\",\"))t[n]=1;return n=>n in t}var He={};var _e=()=>{},Gn=()=>!1,Yn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97);var de=Object.assign,ct=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},xo=Object.prototype.hasOwnProperty,je=(e,t)=>xo.call(e,t),I=Array.isArray,Ae=e=>ut(e)===\"[object Map]\",qn=e=>ut(e)===\"[object Set]\";var F=e=>typeof e==\"function\",oe=e=>typeof e==\"string\",Ee=e=>typeof e==\"symbol\",B=e=>e!==null&&typeof e==\"object\",zn=e=>(B(e)||F(e))&&F(e.then)&&F(e.catch),Ao=Object.prototype.toString,ut=e=>Ao.call(e),Yt=e=>ut(e).slice(8,-1),Jn=e=>ut(e)===\"[object Object]\",ft=e=>oe(e)&&e!==\"NaN\"&&e[0]!==\"-\"&&\"\"+parseInt(e,10)===e;var pt=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Vo=/-\\w/g,So=pt(e=>e.replace(Vo,t=>t.slice(1).toUpperCase())),Co=/\\B([A-Z])/g,Po=pt(e=>e.replace(Co,\"-$1\").toLowerCase()),Qn=pt(e=>e.charAt(0).toUpperCase()+e.slice(1)),ko=pt(e=>e?`on${Qn(e)}`:\"\"),Y=(e,t)=>!Object.is(e,t);var Wn,dt=()=>Wn||(Wn=typeof globalThis<\"u\"?globalThis:typeof self<\"u\"?self:typeof window<\"u\"?window:typeof global<\"u\"?global:{});function ht(e){if(I(e)){let t={};for(let n=0;n<e.length;n++){let r=e[n],o=oe(r)?Lo(r):ht(r);if(o)for(let s in o)t[s]=o[s]}return t}else if(oe(e)||B(e))return e}var Io=/;(?![^(]*\\))/g,$o=/:([^]+)/,Mo=/\\/\\*[^]*?\\*\\//g;function Lo(e){let t={};return e.replace(Mo,\"\").split(Io).forEach(n=>{if(n){let r=n.split($o);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function gt(e){let t=\"\";if(oe(e))t=e;else if(I(e))for(let n=0;n<e.length;n++){let r=gt(e[n]);r&&(t+=r+\" \")}else if(B(e))for(let n in e)e[n]&&(t+=n+\" \");return t.trim()}var Fo=\"itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly\";var Uo=lt(Fo+\",async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected\");function jo(e,...t){console.warn(`[Vue warn] ${e}`,...t)}var vt;function er(){return vt}var V;var qt=new WeakSet,Ge=class{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,vt&&vt.active&&vt.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,qt.has(this)&&(qt.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||nr(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Xn(this),rr(this);let t=V,n=Q;V=this,Q=!0;try{return this.fn()}finally{or(this),V=t,Q=n,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)ln(t);this.deps=this.depsTail=void 0,Xn(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?qt.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Qt(this)&&this.run()}get dirty(){return Qt(this)}},tr=0,Ke,We;function nr(e,t=!1){if(e.flags|=8,t){e.next=We,We=e;return}e.next=Ke,Ke=e}function sn(){tr++}function an(){if(--tr>0)return;if(We){let t=We;for(We=void 0;t;){let n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ke;){let t=Ke;for(Ke=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=n}}if(e)throw e}function rr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function or(e){let t,n=e.depsTail,r=n;for(;r;){let o=r.prevDep;r.version===-1?(r===n&&(n=o),ln(r),Bo(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=o}e.deps=t,e.depsTail=n}function Qt(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(sr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function sr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ye)||(e.globalVersion=Ye,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Qt(e))))return;e.flags|=2;let t=e.dep,n=V,r=Q;V=e,Q=!0;try{rr(e);let o=e.fn(e._value);(t.version===0||Y(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{V=n,Q=r,or(e),e.flags&=-3}}function ln(e,t=!1){let{dep:n,prevSub:r,nextSub:o}=e;if(r&&(r.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let s=n.computed.deps;s;s=s.nextDep)ln(s,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Bo(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}var Q=!0,ir=[];function Je(){ir.push(Q),Q=!1}function Qe(){let e=ir.pop();Q=e===void 0?!0:e}function Xn(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let n=V;V=void 0;try{t()}finally{V=n}}}var Ye=0,Xt=class{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},qe=class{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!V||!Q||V===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==V)n=this.activeLink=new Xt(V,this),V.deps?(n.prevDep=V.depsTail,V.depsTail.nextDep=n,V.depsTail=n):V.deps=V.depsTail=n,ar(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){let r=n.nextDep;r.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=r),n.prevDep=V.depsTail,n.nextDep=void 0,V.depsTail.nextDep=n,V.depsTail=n,V.deps===n&&(V.deps=r)}return n}trigger(t){this.version++,Ye++,this.notify(t)}notify(t){sn();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{an()}}};function ar(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)ar(r)}let n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}var Zt=new WeakMap,ye=Symbol(\"\"),en=Symbol(\"\"),ze=Symbol(\"\");function U(e,t,n){if(Q&&V){let r=Zt.get(e);r||Zt.set(e,r=new Map);let o=r.get(n);o||(r.set(n,o=new qe),o.map=r,o.key=n),o.track()}}function ie(e,t,n,r,o,s){let l=Zt.get(e);if(!l){Ye++;return}let i=a=>{a&&a.trigger()};if(sn(),t===\"clear\")l.forEach(i);else{let a=I(e),p=a&&ft(n);if(a&&n===\"length\"){let u=Number(r);l.forEach((c,f)=>{(f===\"length\"||f===ze||!Ee(f)&&f>=u)&&i(c)})}else switch((n!==void 0||l.has(void 0))&&i(l.get(n)),p&&i(l.get(ze)),t){case\"add\":a?p&&i(l.get(\"length\")):(i(l.get(ye)),Ae(e)&&i(l.get(en)));break;case\"delete\":a||(i(l.get(ye)),Ae(e)&&i(l.get(en)));break;case\"set\":Ae(e)&&i(l.get(ye));break}}an()}function Ve(e){let t=x(e);return t===e?t:(U(t,\"iterate\",ze),W(e)?t:t.map(te))}function wt(e){return U(e=x(e),\"iterate\",ze),e}function Z(e,t){return ee(e)?Se(Ne(e)?te(t):t):te(t)}var Ko={__proto__:null,[Symbol.iterator](){return zt(this,Symbol.iterator,e=>Z(this,e))},concat(...e){return Ve(this).concat(...e.map(t=>I(t)?Ve(t):t))},entries(){return zt(this,\"entries\",e=>(e[1]=Z(this,e[1]),e))},every(e,t){return se(this,\"every\",e,t,void 0,arguments)},filter(e,t){return se(this,\"filter\",e,t,n=>n.map(r=>Z(this,r)),arguments)},find(e,t){return se(this,\"find\",e,t,n=>Z(this,n),arguments)},findIndex(e,t){return se(this,\"findIndex\",e,t,void 0,arguments)},findLast(e,t){return se(this,\"findLast\",e,t,n=>Z(this,n),arguments)},findLastIndex(e,t){return se(this,\"findLastIndex\",e,t,void 0,arguments)},forEach(e,t){return se(this,\"forEach\",e,t,void 0,arguments)},includes(...e){return Jt(this,\"includes\",e)},indexOf(...e){return Jt(this,\"indexOf\",e)},join(e){return Ve(this).join(e)},lastIndexOf(...e){return Jt(this,\"lastIndexOf\",e)},map(e,t){return se(this,\"map\",e,t,void 0,arguments)},pop(){return Be(this,\"pop\")},push(...e){return Be(this,\"push\",e)},reduce(e,...t){return Zn(this,\"reduce\",e,t)},reduceRight(e,...t){return Zn(this,\"reduceRight\",e,t)},shift(){return Be(this,\"shift\")},some(e,t){return se(this,\"some\",e,t,void 0,arguments)},splice(...e){return Be(this,\"splice\",e)},toReversed(){return Ve(this).toReversed()},toSorted(e){return Ve(this).toSorted(e)},toSpliced(...e){return Ve(this).toSpliced(...e)},unshift(...e){return Be(this,\"unshift\",e)},values(){return zt(this,\"values\",e=>Z(this,e))}};function zt(e,t,n){let r=wt(e),o=r[t]();return r!==e&&!W(e)&&(o._next=o.next,o.next=()=>{let s=o._next();return s.done||(s.value=n(s.value)),s}),o}var Wo=Array.prototype;function se(e,t,n,r,o,s){let l=wt(e),i=l!==e&&!W(e),a=l[t];if(a!==Wo[t]){let c=a.apply(e,s);return i?te(c):c}let p=n;l!==e&&(i?p=function(c,f){return n.call(this,Z(e,c),f,e)}:n.length>2&&(p=function(c,f){return n.call(this,c,f,e)}));let u=a.call(l,p,r);return i&&o?o(u):u}function Zn(e,t,n,r){let o=wt(e),s=o!==e&&!W(e),l=n,i=!1;o!==e&&(s?(i=r.length===0,l=function(p,u,c){return i&&(i=!1,p=Z(e,p)),n.call(this,p,Z(e,u),c,e)}):n.length>3&&(l=function(p,u,c){return n.call(this,p,u,c,e)}));let a=o[t](l,...r);return i?Z(e,a):a}function Jt(e,t,n){let r=x(e);U(r,\"iterate\",ze);let o=r[t](...n);return(o===-1||o===!1)&&Xe(n[0])?(n[0]=x(n[0]),r[t](...n)):o}function Be(e,t,n=[]){Je(),sn();let r=x(e)[t].apply(e,n);return an(),Qe(),r}var Go=lt(\"__proto__,__v_isRef,__isVue\"),lr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!==\"arguments\"&&e!==\"caller\").map(e=>Symbol[e]).filter(Ee));function Yo(e){Ee(e)||(e=String(e));let t=x(this);return U(t,\"has\",e),t.hasOwnProperty(e)}var yt=class{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){if(n===\"__v_skip\")return t.__v_skip;let o=this._isReadonly,s=this._isShallow;if(n===\"__v_isReactive\")return!o;if(n===\"__v_isReadonly\")return o;if(n===\"__v_isShallow\")return s;if(n===\"__v_raw\")return r===(o?s?ns:fr:s?ur:cr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;let l=I(t);if(!o){let a;if(l&&(a=Ko[n]))return a;if(n===\"hasOwnProperty\")return Yo}let i=Reflect.get(t,n,G(t)?t:r);if((Ee(n)?lr.has(n):Go(n))||(o||U(t,\"get\",n),s))return i;if(G(i)){let a=l&&ft(n)?i:i.value;return o&&B(a)?Ot(a):a}return B(i)?o?Ot(i):Ce(i):i}},Nt=class extends yt{constructor(t=!1){super(!1,t)}set(t,n,r,o){let s=t[n],l=I(t)&&ft(n);if(!this._isShallow){let p=ee(s);if(!W(r)&&!ee(r)&&(s=x(s),r=x(r)),!l&&G(s)&&!G(r))return p||(s.value=r),!0}let i=l?Number(n)<t.length:je(t,n),a=Reflect.set(t,n,r,G(t)?t:o);return t===x(o)&&(i?Y(r,s)&&ie(t,\"set\",n,r,s):ie(t,\"add\",n,r)),a}deleteProperty(t,n){let r=je(t,n),o=t[n],s=Reflect.deleteProperty(t,n);return s&&r&&ie(t,\"delete\",n,void 0,o),s}has(t,n){let r=Reflect.has(t,n);return(!Ee(n)||!lr.has(n))&&U(t,\"has\",n),r}ownKeys(t){return U(t,\"iterate\",I(t)?\"length\":ye),Reflect.ownKeys(t)}},tn=class extends yt{constructor(t=!1){super(!0,t)}set(t,n){return!0}deleteProperty(t,n){return!0}},qo=new Nt,zo=new tn,Jo=new Nt(!0);var nn=e=>e,mt=e=>Reflect.getPrototypeOf(e);function Qo(e,t,n){return function(...r){let o=this.__v_raw,s=x(o),l=Ae(s),i=e===\"entries\"||e===Symbol.iterator&&l,a=e===\"keys\"&&l,p=o[e](...r),u=n?nn:t?Se:te;return!t&&U(s,\"iterate\",a?en:ye),de(Object.create(p),{next(){let{value:c,done:f}=p.next();return f?{value:c,done:f}:{value:i?[u(c[0]),u(c[1])]:u(c),done:f}}})}}function _t(e){return function(...t){return e===\"delete\"?!1:e===\"clear\"?void 0:this}}function Xo(e,t){let n={get(o){let s=this.__v_raw,l=x(s),i=x(o);e||(Y(o,i)&&U(l,\"get\",o),U(l,\"get\",i));let{has:a}=mt(l),p=t?nn:e?Se:te;if(a.call(l,o))return p(s.get(o));if(a.call(l,i))return p(s.get(i));s!==l&&s.get(o)},get size(){let o=this.__v_raw;return!e&&U(x(o),\"iterate\",ye),o.size},has(o){let s=this.__v_raw,l=x(s),i=x(o);return e||(Y(o,i)&&U(l,\"has\",o),U(l,\"has\",i)),o===i?s.has(o):s.has(o)||s.has(i)},forEach(o,s){let l=this,i=l.__v_raw,a=x(i),p=t?nn:e?Se:te;return!e&&U(a,\"iterate\",ye),i.forEach((u,c)=>o.call(s,p(u),p(c),l))}};return de(n,e?{add:_t(\"add\"),set:_t(\"set\"),delete:_t(\"delete\"),clear:_t(\"clear\")}:{add(o){let s=x(this),l=mt(s),i=x(o),a=!t&&!W(o)&&!ee(o)?i:o;return l.has.call(s,a)||Y(o,a)&&l.has.call(s,o)||Y(i,a)&&l.has.call(s,i)||(s.add(a),ie(s,\"add\",a,a)),this},set(o,s){!t&&!W(s)&&!ee(s)&&(s=x(s));let l=x(this),{has:i,get:a}=mt(l),p=i.call(l,o);p||(o=x(o),p=i.call(l,o));let u=a.call(l,o);return l.set(o,s),p?Y(s,u)&&ie(l,\"set\",o,s,u):ie(l,\"add\",o,s),this},delete(o){let s=x(this),{has:l,get:i}=mt(s),a=l.call(s,o);a||(o=x(o),a=l.call(s,o));let p=i?i.call(s,o):void 0,u=s.delete(o);return a&&ie(s,\"delete\",o,void 0,p),u},clear(){let o=x(this),s=o.size!==0,l=void 0,i=o.clear();return s&&ie(o,\"clear\",void 0,void 0,l),i}}),[\"keys\",\"values\",\"entries\",Symbol.iterator].forEach(o=>{n[o]=Qo(o,e,t)}),n}function cn(e,t){let n=Xo(e,t);return(r,o,s)=>o===\"__v_isReactive\"?!e:o===\"__v_isReadonly\"?e:o===\"__v_raw\"?r:Reflect.get(je(n,o)&&o in r?n:r,o,s)}var Zo={get:cn(!1,!1)},es={get:cn(!1,!0)},ts={get:cn(!0,!1)};var cr=new WeakMap,ur=new WeakMap,fr=new WeakMap,ns=new WeakMap;function rs(e){switch(e){case\"Object\":case\"Array\":return 1;case\"Map\":case\"Set\":case\"WeakMap\":case\"WeakSet\":return 2;default:return 0}}function os(e){return e.__v_skip||!Object.isExtensible(e)?0:rs(Yt(e))}function Ce(e){return ee(e)?e:un(e,!1,qo,Zo,cr)}function Dt(e){return un(e,!1,Jo,es,ur)}function Ot(e){return un(e,!0,zo,ts,fr)}function un(e,t,n,r,o){if(!B(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;let s=os(e);if(s===0)return e;let l=o.get(e);if(l)return l;let i=new Proxy(e,s===2?r:n);return o.set(e,i),i}function Ne(e){return ee(e)?Ne(e.__v_raw):!!(e&&e.__v_isReactive)}function ee(e){return!!(e&&e.__v_isReadonly)}function W(e){return!!(e&&e.__v_isShallow)}function Xe(e){return e?!!e.__v_raw:!1}function x(e){let t=e&&e.__v_raw;return t?x(t):e}var te=e=>B(e)?Ce(e):e,Se=e=>B(e)?Ot(e):e;function G(e){return e?e.__v_isRef===!0:!1}function Tt(e){return pr(e,!1)}function Rt(e){return pr(e,!0)}function pr(e,t){return G(e)?e:new rn(e,t)}var rn=class{constructor(t,n){this.dep=new qe,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:x(t),this._value=n?t:te(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){let n=this._rawValue,r=this.__v_isShallow||W(t)||ee(t);t=r?t:x(t),Y(t,n)&&(this._rawValue=t,this._value=r?t:te(t),this.dep.trigger())}};function he(e){return G(e)?e.value:e}var on=class{constructor(t,n,r){this.fn=t,this.setter=n,this._value=void 0,this.dep=new qe(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ye-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&V!==this)return nr(this,!0),!0}get value(){let t=this.dep.track();return sr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}};function dr(e,t,n=!1){let r,o;return F(e)?r=e:(r=e.get,o=e.set),new on(r,o,n)}var Et={},bt=new WeakMap,ve;function hr(e,t=!1,n=ve){if(n){let r=bt.get(n);r||bt.set(n,r=[]),r.push(e)}}function gr(e,t,n=He){let{immediate:r,deep:o,once:s,scheduler:l,augmentJob:i,call:a}=n,p=N=>{(n.onWarn||jo)(\"Invalid watch source: \",N,\"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.\")},u=N=>o?N:W(N)||o===!1||o===0?ae(N,1):ae(N),c,f,d,_,y=!1,w=!1;if(G(e)?(f=()=>e.value,y=W(e)):Ne(e)?(f=()=>u(e),y=!0):I(e)?(w=!0,y=e.some(N=>Ne(N)||W(N)),f=()=>e.map(N=>{if(G(N))return N.value;if(Ne(N))return u(N);if(F(N))return a?a(N,2):N()})):F(e)?t?f=a?()=>a(e,2):e:f=()=>{if(d){Je();try{d()}finally{Qe()}}let N=ve;ve=c;try{return a?a(e,3,[_]):e(_)}finally{ve=N}}:f=_e,t&&o){let N=f,P=o===!0?1/0:o;f=()=>ae(N(),P)}let A=er(),v=()=>{c.stop(),A&&A.active&&ct(A.effects,c)};if(s&&t){let N=t;t=(...P)=>{N(...P),v()}}let b=w?new Array(e.length).fill(Et):Et,M=N=>{if(!(!(c.flags&1)||!c.dirty&&!N))if(t){let P=c.run();if(o||y||(w?P.some((L,Te)=>Y(L,b[Te])):Y(P,b))){d&&d();let L=ve;ve=c;try{let Te=[P,b===Et?void 0:w&&b[0]===Et?[]:b,_];b=P,a?a(t,3,Te):t(...Te)}finally{ve=L}}}else c.run()};return i&&i(M),c=new Ge(f),c.scheduler=l?()=>l(M,!1):M,_=N=>hr(N,!1,c),d=c.onStop=()=>{let N=bt.get(c);if(N){if(a)a(N,4);else for(let P of N)P();bt.delete(c)}},t?r?M(!0):b=c.run():l?l(M.bind(null,!0),!0):c.run(),v.pause=c.pause.bind(c),v.resume=c.resume.bind(c),v.stop=v,v}function ae(e,t=1/0,n){if(t<=0||!B(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,G(e))ae(e.value,t,n);else if(I(e))for(let r=0;r<e.length;r++)ae(e[r],t,n);else if(qn(e)||Ae(e))e.forEach(r=>{ae(r,t,n)});else if(Jn(e)){for(let r in e)ae(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&ae(e[r],t,n)}return e}function gn(e,t,n,r){try{return r?e(...r):e()}catch(o){_r(o,t,n)}}function mn(e,t,n,r){if(F(e)){let o=gn(e,t,n,r);return o&&zn(o)&&o.catch(s=>{_r(s,t,n)}),o}if(I(e)){let o=[];for(let s=0;s<e.length;s++)o.push(mn(e[s],t,n,r));return o}}function _r(e,t,n,r=!0){let o=t?t.vnode:null,{errorHandler:s,throwUnhandledErrorInProduction:l}=t&&t.appContext.config||He;if(t){let i=t.parent,a=t.proxy,p=`https://vuejs.org/error-reference/#runtime-${n}`;for(;i;){let u=i.ec;if(u){for(let c=0;c<u.length;c++)if(u[c](e,a,p)===!1)return}i=i.parent}if(s){Je(),gn(s,null,10,[e,a,p]),Qe();return}}cs(e,n,o,r,l)}function cs(e,t,n,r=!0,o=!1){if(o)throw e;console.error(e)}var q=[],le=-1,ke=[],ge=null,Pe=0,Er=Promise.resolve(),At=null;function vr(e){let t=At||Er;return e?t.then(this?e.bind(this):e):t}function us(e){let t=le+1,n=q.length;for(;t<n;){let r=t+n>>>1,o=q[r],s=et(o);s<e||s===e&&o.flags&2?t=r+1:n=r}return t}function fs(e){if(!(e.flags&1)){let t=et(e),n=q[q.length-1];!n||!(e.flags&2)&&t>=et(n)?q.push(e):q.splice(us(t),0,e),e.flags|=1,yr()}}function yr(){At||(At=Er.then(Nr))}function ps(e){I(e)?ke.push(...e):ge&&e.id===-1?ge.splice(Pe+1,0,e):e.flags&1||(ke.push(e),e.flags|=1),yr()}function ds(e){if(ke.length){let t=[...new Set(ke)].sort((n,r)=>et(n)-et(r));if(ke.length=0,ge){ge.push(...t);return}for(ge=t,Pe=0;Pe<ge.length;Pe++){let n=ge[Pe];n.flags&4&&(n.flags&=-2),n.flags&8||n(),n.flags&=-2}ge=null,Pe=0}}var et=e=>e.id==null?e.flags&2?-1:1/0:e.id;function Nr(e){let t=_e;try{for(le=0;le<q.length;le++){let n=q[le];n&&!(n.flags&8)&&(n.flags&4&&(n.flags&=-2),gn(n,n.i,n.i?15:14),n.flags&4||(n.flags&=-2))}}finally{for(;le<q.length;le++){let n=q[le];n&&(n.flags&=-2)}le=-1,q.length=0,ds(e),At=null,(q.length||ke.length)&&Nr(e)}}var Oe=null,hs=null;function Vt(e,t){if(z){let n=z.provides,r=z.parent&&z.parent.provides;r===n&&(n=z.provides=Object.create(r)),n[e]=t}}function J(e,t,n=!1){let r=On();if(r||fn){let o=fn?fn._context.provides:r?r.parent==null||r.ce?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides:void 0;if(o&&e in o)return o[e];if(arguments.length>1)return n&&F(t)?t.call(r&&r.proxy):t}}var gs=Symbol.for(\"v-scx\"),ms=()=>{{let e=J(gs);return e}};function Or(e,t){return br(e,null,t)}function St(e,t,n){return br(e,t,n)}function br(e,t,n=He){let{immediate:r,deep:o,flush:s,once:l}=n,i=de({},n),a=t&&r||!t&&s!==\"post\",p;if(tt){if(s===\"sync\"){let d=ms();p=d.__watcherHandles||(d.__watcherHandles=[])}else if(!a){let d=()=>{};return d.stop=_e,d.resume=_e,d.pause=_e,d}}let u=z;i.call=(d,_,y)=>mn(d,u,_,y);let c=!1;s===\"post\"?i.scheduler=d=>{bs(d,u&&u.suspense)}:s!==\"sync\"&&(c=!0,i.scheduler=(d,_)=>{_?d():fs(d)}),i.augmentJob=d=>{t&&(d.flags|=4),c&&(d.flags|=2,u&&(d.id=u.uid,d.i=u))};let f=gr(e,t,i);return tt&&(p?p.push(f):a&&f()),f}var _s=e=>e.__isTeleport;function wr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,wr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function _n(e,t){return F(e)?de({name:e.name},t,{setup:e}):e}var wa=dt().requestIdleCallback||(e=>setTimeout(e,1)),Da=dt().cancelIdleCallback||(e=>clearTimeout(e));var Es=e=>e.type.__isKeepAlive;function Dr(e,t){Rr(e,\"a\",t)}function Tr(e,t){Rr(e,\"da\",t)}function Rr(e,t,n=z){let r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(En(t,r,n),n){let o=n.parent;for(;o&&o.parent;)Es(o.parent.vnode)&&vs(r,t,n,o),o=o.parent}}function vs(e,t,n,r){let o=En(t,e,r,!0);vn(()=>{ct(r[t],o)},n)}function En(e,t,n=z,r=!1){if(n){let o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...l)=>{Je();let i=ks(n),a=mn(t,n,e,l);return i(),Qe(),a});return r?o.unshift(s):o.push(s),s}}var ce=e=>(t,n=z)=>{(!tt||e===\"sp\")&&En(e,(...r)=>t(...r),n)},Ta=ce(\"bm\"),Ra=ce(\"m\"),xa=ce(\"bu\"),Aa=ce(\"u\"),Va=ce(\"bum\"),vn=ce(\"um\"),Sa=ce(\"sp\"),Ca=ce(\"rtg\"),Pa=ce(\"rtc\");var ys=Symbol.for(\"v-ndc\");function Ns(){return{app:null,config:{isNativeTag:Gn,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}var fn=null;var Os={};var xr=e=>Object.getPrototypeOf(e)===Os;var bs=Ds;var ws=e=>e.__isSuspense;function Ds(e,t){t&&t.pendingBranch?I(e)?t.effects.push(...e):t.effects.push(e):ps(e)}var Ar=Symbol.for(\"v-fgt\"),Ts=Symbol.for(\"v-txt\"),Rs=Symbol.for(\"v-cmt\");var me=null;var yn=1;function mr(e,t=!1){yn+=e,e<0&&me&&t&&(me.hasOnce=!0)}function pn(e){return e?e.__v_isVNode===!0:!1}var Vr=({key:e})=>e??null,xt=({ref:e,ref_key:t,ref_for:n})=>(typeof e==\"number\"&&(e=\"\"+e),e!=null?oe(e)||G(e)||F(e)?{i:Oe,r:e,k:t,f:!!n}:e:null);function xs(e,t=null,n=null,r=0,o=null,s=e===Ar?0:1,l=!1,i=!1){let a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Vr(t),ref:t&&xt(t),scopeId:hs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Oe};return i?(Nn(a,n),s&128&&e.normalize(a)):n&&(a.shapeFlag|=oe(n)?8:16),yn>0&&!l&&me&&(a.patchFlag>0||s&6)&&a.patchFlag!==32&&me.push(a),a}var Ze=As;function As(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===ys)&&(e=Rs),pn(e)){let i=dn(e,t,!0);return n&&Nn(i,n),yn>0&&!s&&me&&(i.shapeFlag&6?me[me.indexOf(e)]=i:me.push(i)),i.patchFlag=-2,i}if(Is(e)&&(e=e.__vccOpts),t){t=Vs(t);let{class:i,style:a}=t;i&&!oe(i)&&(t.class=gt(i)),B(a)&&(Xe(a)&&!I(a)&&(a=de({},a)),t.style=ht(a))}let l=oe(e)?1:ws(e)?128:_s(e)?64:B(e)?4:F(e)?2:0;return xs(e,t,n,r,o,l,s,!0)}function Vs(e){return e?Xe(e)||xr(e)?de({},e):e:null}function dn(e,t,n=!1,r=!1){let{props:o,ref:s,patchFlag:l,children:i,transition:a}=e,p=t?Cs(o||{},t):o,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&Vr(p),ref:t&&t.ref?n&&s?I(s)?s.concat(xt(t)):[s,xt(t)]:xt(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ar?l===-1?16:l|16:l,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&dn(e.ssContent),ssFallback:e.ssFallback&&dn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&r&&wr(u,a.clone(u)),u}function Ss(e=\" \",t=0){return Ze(Ts,null,e,t)}function Nn(e,t){let n=0,{shapeFlag:r}=e;if(t==null)t=null;else if(I(t))n=16;else if(typeof t==\"object\")if(r&65){let o=t.default;o&&(o._c&&(o._d=!1),Nn(e,o()),o._c&&(o._d=!0));return}else{n=32;let o=t._;!o&&!xr(t)?t._ctx=Oe:o===3&&Oe&&(Oe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else F(t)?(t={default:t,_ctx:Oe},n=32):(t=String(t),r&64?(n=16,t=[Ss(t)]):n=8);e.children=t,e.shapeFlag|=n}function Cs(...e){let t={};for(let n=0;n<e.length;n++){let r=e[n];for(let o in r)if(o===\"class\")t.class!==r.class&&(t.class=gt([t.class,r.class]));else if(o===\"style\")t.style=ht([t.style,r.style]);else if(Yn(o)){let s=t[o],l=r[o];l&&s!==l&&!(I(s)&&s.includes(l))&&(t[o]=s?[].concat(s,l):l)}else o!==\"\"&&(t[o]=r[o])}return t}var ka=Ns();var z=null,On=()=>z||Oe,hn,Ps;{let e=dt(),t=(n,r)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(r),s=>{o.length>1?o.forEach(l=>l(s)):o[0](s)}};hn=t(\"__VUE_INSTANCE_SETTERS__\",n=>z=n),Ps=t(\"__VUE_SSR_SETTERS__\",n=>tt=n)}var ks=e=>{let t=z;return hn(e),e.scope.on(),()=>{e.scope.off(),hn(t)}};var tt=!1;function Is(e){return F(e)&&\"__vccOpts\"in e}var X=(e,t)=>dr(e,t,tt);function bn(e,t,n){try{mr(-1);let r=arguments.length;return r===2?B(t)&&!I(t)?pn(t)?Ze(e,null,[t]):Ze(e,t):Ze(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&pn(n)&&(n=[n]),Ze(e,t,n))}finally{mr(1)}}function Sr(){return wn().__VUE_DEVTOOLS_GLOBAL_HOOK__}function wn(){return typeof navigator<\"u\"&&typeof window<\"u\"?window:typeof globalThis<\"u\"?globalThis:{}}var Cr=typeof Proxy==\"function\";var Pr=\"devtools-plugin:setup\",kr=\"plugin:settings:set\";var Ie,Dn;function $s(){var e;return Ie!==void 0||(typeof window<\"u\"&&window.performance?(Ie=!0,Dn=window.performance):typeof globalThis<\"u\"&&(!((e=globalThis.perf_hooks)===null||e===void 0)&&e.performance)?(Ie=!0,Dn=globalThis.perf_hooks.performance):Ie=!1),Ie}function Ir(){return $s()?Dn.now():Date.now()}var Ct=class{constructor(t,n){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=t,this.hook=n;let r={};if(t.settings)for(let l in t.settings){let i=t.settings[l];r[l]=i.defaultValue}let o=`__vue-devtools-plugin-settings__${t.id}`,s=Object.assign({},r);try{let l=localStorage.getItem(o),i=JSON.parse(l);Object.assign(s,i)}catch{}this.fallbacks={getSettings(){return s},setSettings(l){try{localStorage.setItem(o,JSON.stringify(l))}catch{}s=l},now(){return Ir()}},n&&n.on(kr,(l,i)=>{l===this.plugin.id&&this.fallbacks.setSettings(i)}),this.proxiedOn=new Proxy({},{get:(l,i)=>this.target?this.target.on[i]:(...a)=>{this.onQueue.push({method:i,args:a})}}),this.proxiedTarget=new Proxy({},{get:(l,i)=>this.target?this.target[i]:i===\"on\"?this.proxiedOn:Object.keys(this.fallbacks).includes(i)?(...a)=>(this.targetQueue.push({method:i,args:a,resolve:()=>{}}),this.fallbacks[i](...a)):(...a)=>new Promise(p=>{this.targetQueue.push({method:i,args:a,resolve:p})})})}async setRealTarget(t){this.target=t;for(let n of this.onQueue)this.target.on[n.method](...n.args);for(let n of this.targetQueue)n.resolve(await this.target[n.method](...n.args))}};function $r(e,t){let n=e,r=wn(),o=Sr(),s=Cr&&n.enableEarlyProxy;if(o&&(r.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!s))o.emit(Pr,e,t);else{let l=s?new Ct(n,o):null;(r.__VUE_DEVTOOLS_PLUGINS__=r.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:n,setupFn:t,proxy:l}),l&&t(l.proxiedTarget)}}var ne=typeof document<\"u\";function Lr(e){return typeof e==\"object\"||\"displayName\"in e||\"props\"in e||\"__vccOpts\"in e}function Fr(e){return e.__esModule||e[Symbol.toStringTag]===\"Module\"||e.default&&Lr(e.default)}var R=Object.assign;function kt(e,t){let n={};for(let r in t){let o=t[r];n[r]=K(o)?o.map(e):e(o)}return n}var $e=()=>{},K=Array.isArray;function An(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}function Ur(e){let t=Array.from(arguments).slice(1);console.warn.apply(console,[\"[Vue Router warn]: \"+e].concat(t))}var Hr=/#/g,Ms=/&/g,Ls=/\\//g,Fs=/=/g,Us=/\\?/g,jr=/\\+/g,Hs=/%5B/g,js=/%5D/g,Br=/%5E/g,Bs=/%60/g,Kr=/%7B/g,Ks=/%7C/g,Wr=/%7D/g,Ws=/%20/g;function Vn(e){return e==null?\"\":encodeURI(\"\"+e).replace(Ks,\"|\").replace(Hs,\"[\").replace(js,\"]\")}function Gr(e){return Vn(e).replace(Kr,\"{\").replace(Wr,\"}\").replace(Br,\"^\")}function Tn(e){return Vn(e).replace(jr,\"%2B\").replace(Ws,\"+\").replace(Hr,\"%23\").replace(Ms,\"%26\").replace(Bs,\"`\").replace(Kr,\"{\").replace(Wr,\"}\").replace(Br,\"^\")}function Gs(e){return Tn(e).replace(Fs,\"%3D\")}function Ys(e){return Vn(e).replace(Hr,\"%23\").replace(Us,\"%3F\")}function Yr(e){return Ys(e).replace(Ls,\"%2F\")}function be(e){if(e==null)return null;try{return decodeURIComponent(\"\"+e)}catch{}return\"\"+e}var qs=/\\/$/,zs=e=>e.replace(qs,\"\");function It(e,t,n=\"/\"){let r,o={},s=\"\",l=\"\",i=t.indexOf(\"#\"),a=t.indexOf(\"?\");return a=i>=0&&a>i?-1:a,a>=0&&(r=t.slice(0,a),s=t.slice(a,i>0?i:t.length),o=e(s.slice(1))),i>=0&&(r=r||t.slice(0,i),l=t.slice(i,t.length)),r=Qs(r??t,n),{fullPath:r+s+l,path:r,query:o,hash:be(l)}}function qr(e,t){let n=t.query?e(t.query):\"\";return t.path+(n&&\"?\")+n+(t.hash||\"\")}function Sn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||\"/\"}function zr(e,t,n){let r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&ue(t.matched[r],n.matched[o])&&Cn(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ue(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Cn(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Js(e[n],t[n]))return!1;return!0}function Js(e,t){return K(e)?Mr(e,t):K(t)?Mr(t,e):e?.valueOf()===t?.valueOf()}function Mr(e,t){return K(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Qs(e,t){if(e.startsWith(\"/\"))return e;if(!e)return t;let n=t.split(\"/\"),r=e.split(\"/\"),o=r[r.length-1];(o===\"..\"||o===\".\")&&r.push(\"\");let s=n.length-1,l,i;for(l=0;l<r.length;l++)if(i=r[l],i!==\".\")if(i===\"..\")s>1&&s--;else break;return n.slice(0,s).join(\"/\")+\"/\"+r.slice(l).join(\"/\")}var pe={path:\"/\",name:void 0,params:{},query:{},hash:\"\",fullPath:\"/\",matched:[],meta:{},redirectedFrom:void 0},rt=(function(e){return e.pop=\"pop\",e.push=\"push\",e})({}),Me=(function(e){return e.back=\"back\",e.forward=\"forward\",e.unknown=\"\",e})({}),$t=\"\";function Pn(e){if(!e)if(ne){let t=document.querySelector(\"base\");e=t&&t.getAttribute(\"href\")||\"/\",e=e.replace(/^\\w+:\\/\\/[^\\/]+/,\"\")}else e=\"/\";return e[0]!==\"/\"&&e[0]!==\"#\"&&(e=\"/\"+e),zs(e)}var Xs=/^[^#]+#/;function kn(e,t){return e.replace(Xs,\"#\")+t}function Zs(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var ot=()=>({left:window.scrollX,top:window.scrollY});function Jr(e){let t;if(\"el\"in e){let n=e.el,r=typeof n==\"string\"&&n.startsWith(\"#\"),o=typeof n==\"string\"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=Zs(o,e)}else t=e;\"scrollBehavior\"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function In(e,t){return(history.state?history.state.position-t:-1)+e}var Rn=new Map;function Qr(e,t){Rn.set(e,t)}function Xr(e){let t=Rn.get(e);return Rn.delete(e),t}function $n(e){return typeof e==\"string\"||e&&typeof e==\"object\"}function Mn(e){return typeof e==\"string\"||typeof e==\"symbol\"}var S=(function(e){return e[e.MATCHER_NOT_FOUND=1]=\"MATCHER_NOT_FOUND\",e[e.NAVIGATION_GUARD_REDIRECT=2]=\"NAVIGATION_GUARD_REDIRECT\",e[e.NAVIGATION_ABORTED=4]=\"NAVIGATION_ABORTED\",e[e.NAVIGATION_CANCELLED=8]=\"NAVIGATION_CANCELLED\",e[e.NAVIGATION_DUPLICATED=16]=\"NAVIGATION_DUPLICATED\",e})({}),Zr=Symbol(\"\"),ei=(function(e){return e[e.aborted=4]=\"aborted\",e[e.cancelled=8]=\"cancelled\",e[e.duplicated=16]=\"duplicated\",e})({}),tl={[S.MATCHER_NOT_FOUND]({location:e,currentLocation:t}){return`No match for\n ${JSON.stringify(e)}${t?`\nwhile being at\n`+JSON.stringify(t):\"\"}`},[S.NAVIGATION_GUARD_REDIRECT]({from:e,to:t}){return`Redirected from \"${e.fullPath}\" to \"${ni(t)}\" via a navigation guard.`},[S.NAVIGATION_ABORTED]({from:e,to:t}){return`Navigation aborted from \"${e.fullPath}\" to \"${t.fullPath}\" via a navigation guard.`},[S.NAVIGATION_CANCELLED]({from:e,to:t}){return`Navigation cancelled from \"${e.fullPath}\" to \"${t.fullPath}\" with a new navigation.`},[S.NAVIGATION_DUPLICATED]({from:e,to:t}){return`Avoided redundant navigation to current location: \"${e.fullPath}\".`}};function we(e,t){return R(new Error,{type:e,[Zr]:!0},t)}function re(e,t){return e instanceof Error&&Zr in e&&(t==null||!!(e.type&t))}var ti=[\"params\",\"query\",\"hash\"];function ni(e){if(typeof e==\"string\")return e;if(e.path!=null)return e.path;let t={};for(let n of ti)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function eo(e){let t={};if(e===\"\"||e===\"?\")return t;let n=(e[0]===\"?\"?e.slice(1):e).split(\"&\");for(let r=0;r<n.length;++r){let o=n[r].replace(jr,\" \"),s=o.indexOf(\"=\"),l=be(s<0?o:o.slice(0,s)),i=s<0?null:be(o.slice(s+1));if(l in t){let a=t[l];K(a)||(a=t[l]=[a]),a.push(i)}else t[l]=i}return t}function Ln(e){let t=\"\";for(let n in e){let r=e[n];if(n=Gs(n),r==null){r!==void 0&&(t+=(t.length?\"&\":\"\")+n);continue}(K(r)?r.map(o=>o&&Tn(o)):[r&&Tn(r)]).forEach(o=>{o!==void 0&&(t+=(t.length?\"&\":\"\")+n,o!=null&&(t+=\"=\"+o))})}return t}function to(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=K(r)?r.map(o=>o==null?null:\"\"+o):r==null?r:\"\"+r)}return t}var Mt=Symbol(\"\"),Fn=Symbol(\"\"),st=Symbol(\"\"),Lt=Symbol(\"\"),Ft=Symbol(\"\");function Le(){let e=[];function t(r){return e.push(r),()=>{let o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function no(e,t,n){let r=()=>{e[t].delete(n)};vn(r),Tr(r),Dr(()=>{e[t].add(n)}),e[t].add(n)}function ri(e){let t=J(Mt,{}).value;t&&no(t,\"leaveGuards\",e)}function oi(e){let t=J(Mt,{}).value;t&&no(t,\"updateGuards\",e)}function fe(e,t,n,r,o,s=l=>l()){let l=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((i,a)=>{let p=f=>{f===!1?a(we(S.NAVIGATION_ABORTED,{from:n,to:t})):f instanceof Error?a(f):$n(f)?a(we(S.NAVIGATION_GUARD_REDIRECT,{from:t,to:f})):(l&&r.enterCallbacks[o]===l&&typeof f==\"function\"&&l.push(f),i())},u=s(()=>e.call(r&&r.instances[o],t,n,p)),c=Promise.resolve(u);e.length<3&&(c=c.then(p)),c.catch(f=>a(f))})}function Ut(e,t,n,r,o=s=>s()){let s=[];for(let l of e)for(let i in l.components){let a=l.components[i];if(!(t!==\"beforeRouteEnter\"&&!l.instances[i]))if(Lr(a)){let p=(a.__vccOpts||a)[t];p&&s.push(fe(p,n,r,l,i,o))}else{let p=a();s.push(()=>p.then(u=>{if(!u)throw new Error(`Couldn't resolve component \"${i}\" at \"${l.path}\"`);let c=Fr(u)?u.default:u;l.mods[i]=u,l.components[i]=c;let f=(c.__vccOpts||c)[t];return f&&fe(f,n,r,l,i,o)()}))}}return s}function si(e){return e.matched.every(t=>t.redirect)?Promise.reject(new Error(\"Cannot load a route that redirects.\")):Promise.all(e.matched.map(t=>t.components&&Promise.all(Object.keys(t.components).reduce((n,r)=>{let o=t.components[r];return typeof o==\"function\"&&!(\"displayName\"in o)&&n.push(o().then(s=>{if(!s)return Promise.reject(new Error(`Couldn't resolve component \"${r}\" at \"${t.path}\". Ensure you passed a function that returns a promise.`));let l=Fr(s)?s.default:s;t.mods[r]=s,t.components[r]=l})),n},[])))).then(()=>e)}function ro(e,t){let n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let l=0;l<s;l++){let i=t.matched[l];i&&(e.matched.find(p=>ue(p,i))?r.push(i):n.push(i));let a=e.matched[l];a&&(t.matched.find(p=>ue(p,a))||o.push(a))}return[n,r,o]}function nt(e,t){let n=R({},e,{matched:e.matched.map(r=>gi(r,[\"instances\",\"children\",\"aliasOf\"]))});return{_custom:{type:null,readOnly:!0,display:e.fullPath,tooltip:t,value:n}}}function Pt(e){return{_custom:{display:e}}}var ii=0;function oo(e,t,n){if(t.__hasDevtools)return;t.__hasDevtools=!0;let r=ii++;$r({id:\"org.vuejs.router\"+(r?\".\"+r:\"\"),label:\"Vue Router\",packageName:\"vue-router\",homepage:\"https://router.vuejs.org\",logo:\"https://router.vuejs.org/logo.png\",componentStateTypes:[\"Routing\"],app:e},o=>{typeof o.now!=\"function\"&&Ur(\"[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.\"),o.on.inspectComponent((u,c)=>{u.instanceData&&u.instanceData.state.push({type:\"Routing\",key:\"$route\",editable:!1,value:nt(t.currentRoute.value,\"Current Route\")})}),o.on.visitComponentTree(({treeNode:u,componentInstance:c})=>{if(c.__vrv_devtools){let f=c.__vrv_devtools;u.tags.push({label:(f.name?`${f.name.toString()}: `:\"\")+f.path,textColor:0,tooltip:\"This component is rendered by &lt;router-view&gt;\",backgroundColor:so})}K(c.__vrl_devtools)&&(c.__devtoolsApi=o,c.__vrl_devtools.forEach(f=>{let d=f.route.path,_=lo,y=\"\",w=0;f.error?(d=f.error,_=fi,w=pi):f.isExactActive?(_=ao,y=\"This is exactly active\"):f.isActive&&(_=io,y=\"This link is active\"),u.tags.push({label:d,textColor:w,tooltip:y,backgroundColor:_})}))}),St(t.currentRoute,()=>{a(),o.notifyComponentUpdate(),o.sendInspectorTree(i),o.sendInspectorState(i)});let s=\"router:navigations:\"+r;o.addTimelineLayer({id:s,label:`Router${r?\" \"+r:\"\"} Navigations`,color:4237508}),t.onError((u,c)=>{o.addTimelineEvent({layerId:s,event:{title:\"Error during Navigation\",subtitle:c.fullPath,logType:\"error\",time:o.now(),data:{error:u},groupId:c.meta.__navigationId}})});let l=0;t.beforeEach((u,c)=>{let f={guard:Pt(\"beforeEach\"),from:nt(c,\"Current Location during this navigation\"),to:nt(u,\"Target location\")};Object.defineProperty(u.meta,\"__navigationId\",{value:l++}),o.addTimelineEvent({layerId:s,event:{time:o.now(),title:\"Start of navigation\",subtitle:u.fullPath,data:f,groupId:u.meta.__navigationId}})}),t.afterEach((u,c,f)=>{let d={guard:Pt(\"afterEach\")};f?(d.failure={_custom:{type:Error,readOnly:!0,display:f?f.message:\"\",tooltip:\"Navigation Failure\",value:f}},d.status=Pt(\"\\u274C\")):d.status=Pt(\"\\u2705\"),d.from=nt(c,\"Current Location during this navigation\"),d.to=nt(u,\"Target location\"),o.addTimelineEvent({layerId:s,event:{title:\"End of navigation\",subtitle:u.fullPath,time:o.now(),data:d,logType:f?\"warning\":\"default\",groupId:u.meta.__navigationId}})});let i=\"router-inspector:\"+r;o.addInspector({id:i,label:\"Routes\"+(r?\" \"+r:\"\"),icon:\"book\",treeFilterPlaceholder:\"Search routes\"});function a(){if(!p)return;let u=p,c=n.getRoutes().filter(f=>!f.parent||!f.parent.record.components);c.forEach(fo),u.filter&&(c=c.filter(f=>xn(f,u.filter.toLowerCase()))),c.forEach(f=>uo(f,t.currentRoute.value)),u.rootNodes=c.map(co)}let p;o.on.getInspectorTree(u=>{p=u,u.app===e&&u.inspectorId===i&&a()}),o.on.getInspectorState(u=>{if(u.app===e&&u.inspectorId===i){let c=n.getRoutes().find(f=>f.record.__vd_id===u.nodeId);c&&(u.state={options:li(c)})}}),o.sendInspectorTree(i),o.sendInspectorState(i)})}function ai(e){return e.optional?e.repeatable?\"*\":\"?\":e.repeatable?\"+\":\"\"}function li(e){let{record:t}=e,n=[{editable:!1,key:\"path\",value:t.path}];return t.name!=null&&n.push({editable:!1,key:\"name\",value:t.name}),n.push({editable:!1,key:\"regexp\",value:e.re}),e.keys.length&&n.push({editable:!1,key:\"keys\",value:{_custom:{type:null,readOnly:!0,display:e.keys.map(r=>`${r.name}${ai(r)}`).join(\" \"),tooltip:\"Param keys\",value:e.keys}}}),t.redirect!=null&&n.push({editable:!1,key:\"redirect\",value:t.redirect}),e.alias.length&&n.push({editable:!1,key:\"aliases\",value:e.alias.map(r=>r.record.path)}),Object.keys(e.record.meta).length&&n.push({editable:!1,key:\"meta\",value:e.record.meta}),n.push({key:\"score\",editable:!1,value:{_custom:{type:null,readOnly:!0,display:e.score.map(r=>r.join(\", \")).join(\" | \"),tooltip:\"Score used to sort routes\",value:e.score}}}),n}var so=15485081,io=2450411,ao=8702998,ci=2282478,lo=16486972,ui=6710886,fi=16704226,pi=12131356;function co(e){let t=[],{record:n}=e;n.name!=null&&t.push({label:String(n.name),textColor:0,backgroundColor:ci}),n.aliasOf&&t.push({label:\"alias\",textColor:0,backgroundColor:lo}),e.__vd_match&&t.push({label:\"matches\",textColor:0,backgroundColor:so}),e.__vd_exactActive&&t.push({label:\"exact\",textColor:0,backgroundColor:ao}),e.__vd_active&&t.push({label:\"active\",textColor:0,backgroundColor:io}),n.redirect&&t.push({label:typeof n.redirect==\"string\"?`redirect: ${n.redirect}`:\"redirects\",textColor:16777215,backgroundColor:ui});let r=n.__vd_id;return r==null&&(r=String(di++),n.__vd_id=r),{id:r,label:n.path,tags:t,children:e.children.map(co)}}var di=0,hi=/^\\/(.*)\\/([a-z]*)$/;function uo(e,t){let n=t.matched.length&&ue(t.matched[t.matched.length-1],e.record);e.__vd_exactActive=e.__vd_active=n,n||(e.__vd_active=t.matched.some(r=>ue(r,e.record))),e.children.forEach(r=>uo(r,t))}function fo(e){e.__vd_match=!1,e.children.forEach(fo)}function xn(e,t){let n=String(e.re).match(hi);if(e.__vd_match=!1,!n||n.length<3)return!1;if(new RegExp(n[1].replace(/\\$$/,\"\"),n[2]).test(t))return e.children.forEach(s=>xn(s,t)),e.record.path!==\"/\"||t===\"/\"?(e.__vd_match=e.re.test(t),!0):!1;let r=e.record.path.toLowerCase(),o=be(r);return!t.startsWith(\"/\")&&(o.includes(t)||r.includes(t))||o.startsWith(t)||r.startsWith(t)||e.record.name&&String(e.record.name).includes(t)?!0:e.children.some(s=>xn(s,t))}function gi(e,t){let n={};for(let r in e)t.includes(r)||(n[r]=e[r]);return n}var mi=()=>location.protocol+\"//\"+location.host;function bo(e,t){let{pathname:n,search:r,hash:o}=t,s=e.indexOf(\"#\");if(s>-1){let l=o.includes(e.slice(s))?e.slice(s).length:1,i=o.slice(l);return i[0]!==\"/\"&&(i=\"/\"+i),Sn(i,\"\")}return Sn(n,e)+r+o}function _i(e,t,n,r){let o=[],s=[],l=null,i=({state:f})=>{let d=bo(e,location),_=n.value,y=t.value,w=0;if(f){if(n.value=d,t.value=f,l&&l===_){l=null;return}w=y?f.position-y.position:0}else r(d);o.forEach(A=>{A(n.value,_,{delta:w,type:rt.pop,direction:w?w>0?Me.forward:Me.back:Me.unknown})})};function a(){l=n.value}function p(f){o.push(f);let d=()=>{let _=o.indexOf(f);_>-1&&o.splice(_,1)};return s.push(d),d}function u(){if(document.visibilityState===\"hidden\"){let{history:f}=window;if(!f.state)return;f.replaceState(R({},f.state,{scroll:ot()}),\"\")}}function c(){for(let f of s)f();s=[],window.removeEventListener(\"popstate\",i),window.removeEventListener(\"pagehide\",u),document.removeEventListener(\"visibilitychange\",u)}return window.addEventListener(\"popstate\",i),window.addEventListener(\"pagehide\",u),document.addEventListener(\"visibilitychange\",u),{pauseListeners:a,listen:p,destroy:c}}function po(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?ot():null}}function Ei(e){let{history:t,location:n}=window,r={value:bo(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(a,p,u){let c=e.indexOf(\"#\"),f=c>-1?(n.host&&document.querySelector(\"base\")?e:e.slice(c))+a:mi()+e+a;try{t[u?\"replaceState\":\"pushState\"](p,\"\",f),o.value=p}catch(d){console.error(d),n[u?\"replace\":\"assign\"](f)}}function l(a,p){s(a,R({},t.state,po(o.value.back,a,o.value.forward,!0),p,{position:o.value.position}),!0),r.value=a}function i(a,p){let u=R({},o.value,t.state,{forward:a,scroll:ot()});s(u.current,u,!0),s(a,R({},po(r.value,a,null),{position:u.position+1},p),!1),r.value=a}return{location:r,state:o,push:i,replace:l}}function vi(e){e=Pn(e);let t=Ei(e),n=_i(e,t.state,t.location,t.replace);function r(s,l=!0){l||n.pauseListeners(),history.go(s)}let o=R({location:\"\",base:e,go:r,createHref:kn.bind(null,e)},t,n);return Object.defineProperty(o,\"location\",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,\"state\",{enumerable:!0,get:()=>t.state.value}),o}function sl(e=\"\"){let t=[],n=[[$t,{}]],r=0;e=Pn(e);function o(i,a={}){r++,r!==n.length&&n.splice(r),n.push([i,a])}function s(i,a,{direction:p,delta:u}){let c={direction:p,delta:u,type:rt.pop};for(let f of t)f(i,a,c)}let l={location:$t,state:{},base:e,createHref:kn.bind(null,e),replace(i,a){n.splice(r--,1),o(i,a)},push(i,a){o(i,a)},listen(i){return t.push(i),()=>{let a=t.indexOf(i);a>-1&&t.splice(a,1)}},destroy(){t=[],n=[[$t,{}]],r=0},go(i,a=!0){let p=this.location,u=i<0?Me.back:Me.forward;r=Math.max(0,Math.min(r+i,n.length-1)),a&&s(this.location,p,{direction:u,delta:i})}};return Object.defineProperty(l,\"location\",{enumerable:!0,get:()=>n[r][0]}),Object.defineProperty(l,\"state\",{enumerable:!0,get:()=>n[r][1]}),l}function il(e){return e=location.host?e||location.pathname+location.search:\"\",e.includes(\"#\")||(e+=\"#\"),vi(e)}var De=(function(e){return e[e.Static=0]=\"Static\",e[e.Param=1]=\"Param\",e[e.Group=2]=\"Group\",e})({}),$=(function(e){return e[e.Static=0]=\"Static\",e[e.Param=1]=\"Param\",e[e.ParamRegExp=2]=\"ParamRegExp\",e[e.ParamRegExpEnd=3]=\"ParamRegExpEnd\",e[e.EscapeNext=4]=\"EscapeNext\",e})($||{}),yi={type:De.Static,value:\"\"},Ni=/[a-zA-Z0-9_]/;function Oi(e){if(!e)return[[]];if(e===\"/\")return[[yi]];if(!e.startsWith(\"/\"))throw new Error(`Invalid path \"${e}\"`);function t(d){throw new Error(`ERR (${n})/\"${p}\": ${d}`)}let n=$.Static,r=n,o=[],s;function l(){s&&o.push(s),s=[]}let i=0,a,p=\"\",u=\"\";function c(){p&&(n===$.Static?s.push({type:De.Static,value:p}):n===$.Param||n===$.ParamRegExp||n===$.ParamRegExpEnd?(s.length>1&&(a===\"*\"||a===\"+\")&&t(`A repeatable param (${p}) must be alone in its segment. eg: '/:ids+.`),s.push({type:De.Param,value:p,regexp:u,repeatable:a===\"*\"||a===\"+\",optional:a===\"*\"||a===\"?\"})):t(\"Invalid state to consume buffer\"),p=\"\")}function f(){p+=a}for(;i<e.length;){if(a=e[i++],a===\"\\\\\"&&n!==$.ParamRegExp){r=n,n=$.EscapeNext;continue}switch(n){case $.Static:a===\"/\"?(p&&c(),l()):a===\":\"?(c(),n=$.Param):f();break;case $.EscapeNext:f(),n=r;break;case $.Param:a===\"(\"?n=$.ParamRegExp:Ni.test(a)?f():(c(),n=$.Static,a!==\"*\"&&a!==\"?\"&&a!==\"+\"&&i--);break;case $.ParamRegExp:a===\")\"?u[u.length-1]==\"\\\\\"?u=u.slice(0,-1)+a:n=$.ParamRegExpEnd:u+=a;break;case $.ParamRegExpEnd:c(),n=$.Static,a!==\"*\"&&a!==\"?\"&&a!==\"+\"&&i--,u=\"\";break;default:t(\"Unknown state\");break}}return n===$.ParamRegExp&&t(`Unfinished custom RegExp for param \"${p}\"`),c(),l(),o}var ho=\"[^/]+?\",bi={sensitive:!1,strict:!1,start:!0,end:!0},H=(function(e){return e[e._multiplier=10]=\"_multiplier\",e[e.Root=90]=\"Root\",e[e.Segment=40]=\"Segment\",e[e.SubSegment=30]=\"SubSegment\",e[e.Static=40]=\"Static\",e[e.Dynamic=20]=\"Dynamic\",e[e.BonusCustomRegExp=10]=\"BonusCustomRegExp\",e[e.BonusWildcard=-50]=\"BonusWildcard\",e[e.BonusRepeatable=-20]=\"BonusRepeatable\",e[e.BonusOptional=-8]=\"BonusOptional\",e[e.BonusStrict=.7000000000000001]=\"BonusStrict\",e[e.BonusCaseSensitive=.25]=\"BonusCaseSensitive\",e})(H||{}),wi=/[.+*?^${}()[\\]/\\\\]/g;function Di(e,t){let n=R({},bi,t),r=[],o=n.start?\"^\":\"\",s=[];for(let p of e){let u=p.length?[]:[H.Root];n.strict&&!p.length&&(o+=\"/\");for(let c=0;c<p.length;c++){let f=p[c],d=H.Segment+(n.sensitive?H.BonusCaseSensitive:0);if(f.type===De.Static)c||(o+=\"/\"),o+=f.value.replace(wi,\"\\\\$&\"),d+=H.Static;else if(f.type===De.Param){let{value:_,repeatable:y,optional:w,regexp:A}=f;s.push({name:_,repeatable:y,optional:w});let v=A||ho;if(v!==ho){d+=H.BonusCustomRegExp;try{`${v}`}catch(M){throw new Error(`Invalid custom RegExp for param \"${_}\" (${v}): `+M.message)}}let b=y?`((?:${v})(?:/(?:${v}))*)`:`(${v})`;c||(b=w&&p.length<2?`(?:/${b})`:\"/\"+b),w&&(b+=\"?\"),o+=b,d+=H.Dynamic,w&&(d+=H.BonusOptional),y&&(d+=H.BonusRepeatable),v===\".*\"&&(d+=H.BonusWildcard)}u.push(d)}r.push(u)}if(n.strict&&n.end){let p=r.length-1;r[p][r[p].length-1]+=H.BonusStrict}n.strict||(o+=\"/?\"),n.end?o+=\"$\":n.strict&&!o.endsWith(\"/\")&&(o+=\"(?:/|$)\");let l=new RegExp(o,n.sensitive?\"\":\"i\");function i(p){let u=p.match(l),c={};if(!u)return null;for(let f=1;f<u.length;f++){let d=u[f]||\"\",_=s[f-1];c[_.name]=d&&_.repeatable?d.split(\"/\"):d}return c}function a(p){let u=\"\",c=!1;for(let f of e){(!c||!u.endsWith(\"/\"))&&(u+=\"/\"),c=!1;for(let d of f)if(d.type===De.Static)u+=d.value;else if(d.type===De.Param){let{value:_,repeatable:y,optional:w}=d,A=_ in p?p[_]:\"\";if(K(A)&&!y)throw new Error(`Provided param \"${_}\" is an array but it is not repeatable (* or + modifiers)`);let v=K(A)?A.join(\"/\"):A;if(!v)if(w)f.length<2&&(u.endsWith(\"/\")?u=u.slice(0,-1):c=!0);else throw new Error(`Missing required param \"${_}\"`);u+=v}}return u||\"/\"}return{re:l,score:r,keys:s,parse:i,stringify:a}}function Ti(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===H.Static+H.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===H.Static+H.Segment?1:-1:0}function wo(e,t){let n=0,r=e.score,o=t.score;for(;n<r.length&&n<o.length;){let s=Ti(r[n],o[n]);if(s)return s;n++}if(Math.abs(o.length-r.length)===1){if(go(r))return 1;if(go(o))return-1}return o.length-r.length}function go(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var Ri={strict:!1,end:!0,sensitive:!1};function xi(e,t,n){let r=Di(Oi(e.path),n),o=R(r,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function Ai(e,t){let n=[],r=new Map;t=An(Ri,t);function o(c){return r.get(c)}function s(c,f,d){let _=!d,y=_o(c);y.aliasOf=d&&d.record;let w=An(t,c),A=[y];if(\"alias\"in c){let M=typeof c.alias==\"string\"?[c.alias]:c.alias;for(let N of M)A.push(_o(R({},y,{components:d?d.record.components:y.components,path:N,aliasOf:d?d.record:y})))}let v,b;for(let M of A){let{path:N}=M;if(f&&N[0]!==\"/\"){let P=f.record.path,L=P[P.length-1]===\"/\"?\"\":\"/\";M.path=f.record.path+(N&&L+N)}if(v=xi(M,f,w),d?d.alias.push(v):(b=b||v,b!==v&&b.alias.push(v),_&&c.name&&!Eo(v)&&l(c.name)),Do(v)&&a(v),y.children){let P=y.children;for(let L=0;L<P.length;L++)s(P[L],v,d&&d.children[L])}d=d||v}return b?()=>{l(b)}:$e}function l(c){if(Mn(c)){let f=r.get(c);f&&(r.delete(c),n.splice(n.indexOf(f),1),f.children.forEach(l),f.alias.forEach(l))}else{let f=n.indexOf(c);f>-1&&(n.splice(f,1),c.record.name&&r.delete(c.record.name),c.children.forEach(l),c.alias.forEach(l))}}function i(){return n}function a(c){let f=Ci(c,n);n.splice(f,0,c),c.record.name&&!Eo(c)&&r.set(c.record.name,c)}function p(c,f){let d,_={},y,w;if(\"name\"in c&&c.name){if(d=r.get(c.name),!d)throw we(S.MATCHER_NOT_FOUND,{location:c});w=d.record.name,_=R(mo(f.params,d.keys.filter(b=>!b.optional).concat(d.parent?d.parent.keys.filter(b=>b.optional):[]).map(b=>b.name)),c.params&&mo(c.params,d.keys.map(b=>b.name))),y=d.stringify(_)}else if(c.path!=null)y=c.path,d=n.find(b=>b.re.test(y)),d&&(_=d.parse(y),w=d.record.name);else{if(d=f.name?r.get(f.name):n.find(b=>b.re.test(f.path)),!d)throw we(S.MATCHER_NOT_FOUND,{location:c,currentLocation:f});w=d.record.name,_=R({},f.params,c.params),y=d.stringify(_)}let A=[],v=d;for(;v;)A.unshift(v.record),v=v.parent;return{name:w,path:y,params:_,matched:A,meta:Si(A)}}e.forEach(c=>s(c));function u(){n.length=0,r.clear()}return{addRoute:s,resolve:p,removeRoute:l,clearRoutes:u,getRoutes:i,getRecordMatcher:o}}function mo(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function _o(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Vi(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:\"components\"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,\"mods\",{value:{}}),t}function Vi(e){let t={},n=e.props||!1;if(\"component\"in e)t.default=n;else for(let r in e.components)t[r]=typeof n==\"object\"?n[r]:n;return t}function Eo(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Si(e){return e.reduce((t,n)=>R(t,n.meta),{})}function Ci(e,t){let n=0,r=t.length;for(;n!==r;){let s=n+r>>1;wo(e,t[s])<0?r=s:n=s+1}let o=Pi(e);return o&&(r=t.lastIndexOf(o,r-1)),r}function Pi(e){let t=e;for(;t=t.parent;)if(Do(t)&&wo(e,t)===0)return t}function Do({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function vo(e){let t=J(st),n=J(Lt),r=!1,o=null,s=X(()=>{let u=he(e.to);return t.resolve(u)}),l=X(()=>{let{matched:u}=s.value,{length:c}=u,f=u[c-1],d=n.matched;if(!f||!d.length)return-1;let _=d.findIndex(ue.bind(null,f));if(_>-1)return _;let y=yo(u[c-2]);return c>1&&yo(f)===y&&d[d.length-1].path!==y?d.findIndex(ue.bind(null,u[c-2])):_}),i=X(()=>l.value>-1&&Li(n.params,s.value.params)),a=X(()=>l.value>-1&&l.value===n.matched.length-1&&Cn(n.params,s.value.params));function p(u={}){if(Mi(u)){let c=t[he(e.replace)?\"replace\":\"push\"](he(e.to)).catch($e);return e.viewTransition&&typeof document<\"u\"&&\"startViewTransition\"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}if(__VUE_PROD_DEVTOOLS__&&ne){let u=On();if(u){let c={route:s.value,isActive:i.value,isExactActive:a.value,error:null};u.__vrl_devtools=u.__vrl_devtools||[],u.__vrl_devtools.push(c),Or(()=>{c.route=s.value,c.isActive=i.value,c.isExactActive=a.value,c.error=$n(he(e.to))?null:'Invalid \"to\" value'},{flush:\"post\"})}}return{route:s,href:X(()=>s.value.href),isActive:i,isExactActive:a,navigate:p}}function ki(e){return e.length===1?e[0]:e}var Ii=_n({name:\"RouterLink\",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:\"page\"},viewTransition:Boolean},useLink:vo,setup(e,{slots:t}){let n=Ce(vo(e)),{options:r}=J(st),o=X(()=>({[No(e.activeClass,r.linkActiveClass,\"router-link-active\")]:n.isActive,[No(e.exactActiveClass,r.linkExactActiveClass,\"router-link-exact-active\")]:n.isExactActive}));return()=>{let s=t.default&&ki(t.default(n));return e.custom?s:bn(\"a\",{\"aria-current\":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),$i=Ii;function Mi(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(\"target\");if(/\\b_blank\\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Li(e,t){for(let n in t){let r=t[n],o=e[n];if(typeof r==\"string\"){if(r!==o)return!1}else if(!K(o)||o.length!==r.length||r.some((s,l)=>s.valueOf()!==o[l].valueOf()))return!1}return!0}function yo(e){return e?e.aliasOf?e.aliasOf.path:e.path:\"\"}var No=(e,t,n)=>e??t??n,Fi=_n({name:\"RouterView\",inheritAttrs:!1,props:{name:{type:String,default:\"default\"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let r=J(Ft),o=X(()=>e.route||r.value),s=J(Fn,0),l=X(()=>{let p=he(s),{matched:u}=o.value,c;for(;(c=u[p])&&!c.components;)p++;return p}),i=X(()=>o.value.matched[l.value]);Vt(Fn,X(()=>l.value+1)),Vt(Mt,i),Vt(Ft,o);let a=Tt();return St(()=>[a.value,i.value,e.name],([p,u,c],[f,d,_])=>{u&&(u.instances[c]=p,d&&d!==u&&p&&p===f&&(u.leaveGuards.size||(u.leaveGuards=d.leaveGuards),u.updateGuards.size||(u.updateGuards=d.updateGuards))),p&&u&&(!d||!ue(u,d)||!f)&&(u.enterCallbacks[c]||[]).forEach(y=>y(p))},{flush:\"post\"}),()=>{let p=o.value,u=e.name,c=i.value,f=c&&c.components[u];if(!f)return Oo(n.default,{Component:f,route:p});let d=c.props[u],_=d?d===!0?p.params:typeof d==\"function\"?d(p):d:null,w=bn(f,R({},_,t,{onVnodeUnmounted:A=>{A.component.isUnmounted&&(c.instances[u]=null)},ref:a}));if(__VUE_PROD_DEVTOOLS__&&ne&&w.ref){let A={depth:l.value,name:c.name,path:c.path,meta:c.meta};(K(w.ref)?w.ref.map(v=>v.i):[w.ref.i]).forEach(v=>{v.__vrv_devtools=A})}return Oo(n.default,{Component:w,route:p})||w}}});function Oo(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var Ui=Fi;function al(e){let t=Ai(e.routes,e),n=e.parseQuery||eo,r=e.stringifyQuery||Ln,o=e.history,s=Le(),l=Le(),i=Le(),a=Rt(pe),p=pe;ne&&e.scrollBehavior&&\"scrollRestoration\"in history&&(history.scrollRestoration=\"manual\");let u=kt.bind(null,h=>\"\"+h),c=kt.bind(null,Yr),f=kt.bind(null,be);function d(h,m){let g,E;return Mn(h)?(g=t.getRecordMatcher(h),E=m):E=h,t.addRoute(E,g)}function _(h){let m=t.getRecordMatcher(h);m&&t.removeRoute(m)}function y(){return t.getRoutes().map(h=>h.record)}function w(h){return!!t.getRecordMatcher(h)}function A(h,m){if(m=R({},m||a.value),typeof h==\"string\"){let O=It(n,h,m.path),k=t.resolve({path:O.path},m),Ue=o.createHref(O.fullPath);return R(O,k,{params:f(k.params),hash:be(O.hash),redirectedFrom:void 0,href:Ue})}let g;if(h.path!=null)g=R({},h,{path:It(n,h.path,m.path).path});else{let O=R({},h.params);for(let k in O)O[k]==null&&delete O[k];g=R({},h,{params:c(O)}),m.params=c(m.params)}let E=t.resolve(g,m),T=h.hash||\"\";E.params=u(f(E.params));let C=qr(r,R({},h,{hash:Gr(T),path:E.path})),D=o.createHref(C);return R({fullPath:C,hash:T,query:r===Ln?to(h.query):h.query||{}},E,{redirectedFrom:void 0,href:D})}function v(h){return typeof h==\"string\"?It(n,h,a.value.path):R({},h)}function b(h,m){if(p!==h)return we(S.NAVIGATION_CANCELLED,{from:m,to:h})}function M(h){return L(h)}function N(h){return M(R(v(h),{replace:!0}))}function P(h,m){let g=h.matched[h.matched.length-1];if(g&&g.redirect){let{redirect:E}=g,T=typeof E==\"function\"?E(h,m):E;return typeof T==\"string\"&&(T=T.includes(\"?\")||T.includes(\"#\")?T=v(T):{path:T},T.params={}),R({query:h.query,hash:h.hash,params:T.path!=null?{}:h.params},T)}}function L(h,m){let g=p=A(h),E=a.value,T=h.state,C=h.force,D=h.replace===!0,O=P(g,E);if(O)return L(R(v(O),{state:typeof O==\"object\"?R({},T,O.state):T,force:C,replace:D}),m||g);let k=g;k.redirectedFrom=m;let Ue;return!C&&zr(r,E,g)&&(Ue=we(S.NAVIGATION_DUPLICATED,{to:k,from:E}),Kn(E,E,!0,!1)),(Ue?Promise.resolve(Ue):Un(k,E)).catch(j=>re(j)?re(j,S.NAVIGATION_GUARD_REDIRECT)?j:Kt(j):Bt(j,k,E)).then(j=>{if(j){if(re(j,S.NAVIGATION_GUARD_REDIRECT))return L(R({replace:D},v(j.to),{state:typeof j.to==\"object\"?R({},T,j.to.state):T,force:C}),m||k)}else j=jn(k,E,!0,D,T);return Hn(k,E,j),j})}function Te(h,m){let g=b(h,m);return g?Promise.reject(g):Promise.resolve()}function Ht(h){let m=at.values().next().value;return m&&typeof m.runWithContext==\"function\"?m.runWithContext(h):h()}function Un(h,m){let g,[E,T,C]=ro(h,m);g=Ut(E.reverse(),\"beforeRouteLeave\",h,m);for(let O of E)O.leaveGuards.forEach(k=>{g.push(fe(k,h,m))});let D=Te.bind(null,h,m);return g.push(D),xe(g).then(()=>{g=[];for(let O of s.list())g.push(fe(O,h,m));return g.push(D),xe(g)}).then(()=>{g=Ut(T,\"beforeRouteUpdate\",h,m);for(let O of T)O.updateGuards.forEach(k=>{g.push(fe(k,h,m))});return g.push(D),xe(g)}).then(()=>{g=[];for(let O of C)if(O.beforeEnter)if(K(O.beforeEnter))for(let k of O.beforeEnter)g.push(fe(k,h,m));else g.push(fe(O.beforeEnter,h,m));return g.push(D),xe(g)}).then(()=>(h.matched.forEach(O=>O.enterCallbacks={}),g=Ut(C,\"beforeRouteEnter\",h,m,Ht),g.push(D),xe(g))).then(()=>{g=[];for(let O of l.list())g.push(fe(O,h,m));return g.push(D),xe(g)}).catch(O=>re(O,S.NAVIGATION_CANCELLED)?O:Promise.reject(O))}function Hn(h,m,g){i.list().forEach(E=>Ht(()=>E(h,m,g)))}function jn(h,m,g,E,T){let C=b(h,m);if(C)return C;let D=m===pe,O=ne?history.state:{};g&&(E||D?o.replace(h.fullPath,R({scroll:D&&O&&O.scroll},T)):o.push(h.fullPath,T)),a.value=h,Kn(h,m,g,D),Kt()}let Fe;function To(){Fe||(Fe=o.listen((h,m,g)=>{if(!Re.listening)return;let E=A(h),T=P(E,Re.currentRoute.value);if(T){L(R(T,{replace:!0,force:!0}),E).catch($e);return}p=E;let C=a.value;ne&&Qr(In(C.fullPath,g.delta),ot()),Un(E,C).catch(D=>re(D,S.NAVIGATION_ABORTED|S.NAVIGATION_CANCELLED)?D:re(D,S.NAVIGATION_GUARD_REDIRECT)?(L(R(v(D.to),{force:!0}),E).then(O=>{re(O,S.NAVIGATION_ABORTED|S.NAVIGATION_DUPLICATED)&&!g.delta&&g.type===rt.pop&&o.go(-1,!1)}).catch($e),Promise.reject()):(g.delta&&o.go(-g.delta,!1),Bt(D,E,C))).then(D=>{D=D||jn(E,C,!1),D&&(g.delta&&!re(D,S.NAVIGATION_CANCELLED)?o.go(-g.delta,!1):g.type===rt.pop&&re(D,S.NAVIGATION_ABORTED|S.NAVIGATION_DUPLICATED)&&o.go(-1,!1)),Hn(E,C,D)}).catch($e)}))}let jt=Le(),Bn=Le(),it;function Bt(h,m,g){Kt(h);let E=Bn.list();return E.length?E.forEach(T=>T(h,m,g)):console.error(h),Promise.reject(h)}function Ro(){return it&&a.value!==pe?Promise.resolve():new Promise((h,m)=>{jt.add([h,m])})}function Kt(h){return it||(it=!h,To(),jt.list().forEach(([m,g])=>h?g(h):m()),jt.reset()),h}function Kn(h,m,g,E){let{scrollBehavior:T}=e;if(!ne||!T)return Promise.resolve();let C=!g&&Xr(In(h.fullPath,0))||(E||!g)&&history.state&&history.state.scroll||null;return vr().then(()=>T(h,m,C)).then(D=>D&&Jr(D)).catch(D=>Bt(D,h,m))}let Wt=h=>o.go(h),Gt,at=new Set,Re={currentRoute:a,listening:!0,addRoute:d,removeRoute:_,clearRoutes:t.clearRoutes,hasRoute:w,getRoutes:y,resolve:A,options:e,push:M,replace:N,go:Wt,back:()=>Wt(-1),forward:()=>Wt(1),beforeEach:s.add,beforeResolve:l.add,afterEach:i.add,onError:Bn.add,isReady:Ro,install(h){h.component(\"RouterLink\",$i),h.component(\"RouterView\",Ui),h.config.globalProperties.$router=Re,Object.defineProperty(h.config.globalProperties,\"$route\",{enumerable:!0,get:()=>he(a)}),ne&&!Gt&&a.value===pe&&(Gt=!0,M(o.location).catch(E=>{}));let m={};for(let E in pe)Object.defineProperty(m,E,{get:()=>a.value[E],enumerable:!0});h.provide(st,Re),h.provide(Lt,Dt(m)),h.provide(Ft,a);let g=h.unmount;at.add(h),h.unmount=function(){at.delete(h),at.size<1&&(p=pe,Fe&&Fe(),Fe=null,a.value=pe,Gt=!1,it=!1),g()},__VUE_PROD_DEVTOOLS__&&ne&&oo(h,Re,t)}};function xe(h){return h.reduce((m,g)=>m.then(()=>Ht(g)),Promise.resolve())}return Re}function ll(){return J(st)}function cl(e){return J(Lt)}export{ei as NavigationFailureType,$i as RouterLink,Ui as RouterView,pe as START_LOCATION,sl as createMemoryHistory,al as createRouter,Ai as createRouterMatcher,il as createWebHashHistory,vi as createWebHistory,re as isNavigationFailure,si as loadRouteLocation,Mt as matchedRouteKey,ri as onBeforeRouteLeave,oi as onBeforeRouteUpdate,eo as parseQuery,Lt as routeLocationKey,st as routerKey,Ft as routerViewLocationKey,Ln as stringifyQuery,vo as useLink,cl as useRoute,ll as useRouter,Fn as viewDepthKey};\n/*! Bundled license information:\n\n@vue/shared/dist/shared.esm-bundler.js:\n  (**\n  * @vue/shared v3.5.30\n  * (c) 2018-present Yuxi (Evan) You and Vue contributors\n  * @license MIT\n  **)\n\n@vue/reactivity/dist/reactivity.esm-bundler.js:\n  (**\n  * @vue/reactivity v3.5.30\n  * (c) 2018-present Yuxi (Evan) You and Vue contributors\n  * @license MIT\n  **)\n\n@vue/runtime-core/dist/runtime-core.esm-bundler.js:\n  (**\n  * @vue/runtime-core v3.5.30\n  * (c) 2018-present Yuxi (Evan) You and Vue contributors\n  * @license MIT\n  **)\n\nvue/dist/vue.runtime.esm-bundler.js:\n  (**\n  * vue v3.5.30\n  * (c) 2018-present Yuxi (Evan) You and Vue contributors\n  * @license MIT\n  **)\n\nvue-router/dist/devtools-EWN81iOl.mjs:\nvue-router/dist/vue-router.mjs:\n  (*!\n   * vue-router v4.6.4\n   * (c) 2025 Eduardo San Martin Morote\n   * @license MIT\n   *)\n*/\n"
  },
  {
    "path": "modules/system/assets/vendor/waterfall/jquery.waterfall.js",
    "content": "(function($) {\n/**\n * Runs functions given in arguments in series, each functions passing their results to the next one.\n * Return jQuery Deferred object.\n *\n * @example\n * $.waterfall(\n *    function() { return $.ajax({url : first_url}) },\n *    function() { return $.ajax({url : second_url}) },\n *    function() { return $.ajax({url : another_url}) }\n *).fail(function() {\n *    console.log(arguments)\n *).done(function() {\n *    console.log(arguments)\n *})\n *\n * @example2\n * event_chain = [];\n * event_chain.push(function() { var deferred = $.Deferred(); deferred.resolve(); return deferred; });\n * $.waterfall.apply(this, event_chain).fail(function(){}).done(function(){});\n * \n * @author Dmitry (dio) Levashov, dio@std42.ru\n * @return jQuery.Deferred\n */\n$.waterfall = function() {\n    var steps   = [],\n        dfrd    = $.Deferred(),\n        pointer = 0;\n\n    $.each(arguments, function(i, a) {\n        steps.push(function() {\n            var args = [].slice.apply(arguments), d;\n\n            if (typeof(a) == 'function') {\n                if (!((d = a.apply(null, args)) && d.promise)) {\n                    d = $.Deferred()[d === false ? 'reject' : 'resolve'](d);\n                }\n            } else if (a && a.promise) {\n                d = a;\n            } else {\n                d = $.Deferred()[a === false ? 'reject' : 'resolve'](a);\n            }\n\n            d.fail(function() {\n                dfrd.reject.apply(dfrd, [].slice.apply(arguments));\n            })\n            .done(function(data) {\n                pointer++;\n                args.push(data);\n\n                pointer == steps.length\n                    ? dfrd.resolve.apply(dfrd, args)\n                    : steps[pointer].apply(null, args);\n            });\n        });\n    });\n\n    steps.length ? steps[0]() : dfrd.resolve();\n\n    return dfrd;\n}\n\n})(jQuery);"
  },
  {
    "path": "modules/system/behaviors/SettingsModel.php",
    "content": "<?php namespace System\\Behaviors;\n\nuse Log;\nuse Cache;\nuse System;\nuse Artisan;\nuse Exception;\nuse System\\Classes\\ModelBehavior;\n\n/**\n * SettingsModel extension\n *\n * Add this the model class definition:\n *\n *     public $implement = [\\System\\Behaviors\\SettingsModel::class];\n *     public $settingsCode = 'author_plugin_code';\n *     public $settingsFields = 'fields.yaml';\n *\n * @todo This class will be deprecated soon\n * @see System\\Models\\SettingModel\n */\nclass SettingsModel extends ModelBehavior\n{\n    use \\System\\Traits\\ConfigMaker;\n\n    /**\n     * @var string recordCode\n     */\n    protected $recordCode;\n\n    /**\n     * @var array fieldConfig\n     */\n    protected $fieldConfig;\n\n    /**\n     * @var array fieldValues\n     */\n    protected $fieldValues = [];\n\n    /**\n     * @var array Internal cache of model objects.\n     */\n    private static $instances = [];\n\n    /**\n     * @inheritDoc\n     */\n    protected $requiredProperties = ['settingsFields', 'settingsCode'];\n\n    /**\n     * __construct the settings instance\n     */\n    public function __construct($model)\n    {\n        parent::__construct($model);\n\n        $this->model->setTable('system_settings');\n        $this->model->jsonable(['value']);\n        $this->model->guard([]);\n        $this->model->timestamps = false;\n\n        $this->configPath = $this->guessConfigPathFrom($model);\n\n        // Access to model's overrides is unavailable, using events instead\n        $this->model->bindEvent('model.afterFetch', [$this, 'afterModelFetch']);\n        $this->model->bindEvent('model.beforeSave', [$this, 'beforeModelSave']);\n        $this->model->bindEvent('model.afterSave', [$this, 'afterModelSave']);\n        $this->model->bindEvent('model.setAttribute', [$this, 'setSettingsValue']);\n\n        // Process attributes last for traits with attribute modifiers\n        $this->model->bindEvent('model.saveInternal', [$this, 'saveModelInternal'], -1);\n\n        // Parse the config\n        $this->recordCode = $this->model->settingsCode;\n    }\n\n    /**\n     * instance of the settings model, intended as a static method\n     */\n    public function instance()\n    {\n        if (isset(self::$instances[$this->recordCode])) {\n            return self::$instances[$this->recordCode];\n        }\n\n        $item = $this->getSettingsRecord();\n        if (!$item) {\n            $this->model->initSettingsData();\n            $item = $this->model;\n        }\n\n        return self::$instances[$this->recordCode] = $item;\n    }\n\n    /**\n     * resetDefault, this will delete the record model\n     */\n    public function resetDefault()\n    {\n        $record = $this->getSettingsRecord();\n        if (!$record) {\n            return;\n        }\n\n        $record->delete();\n        unset(self::$instances[$this->recordCode]);\n        Cache::forget($this->getCacheKey());\n    }\n\n    /**\n     * isConfigured checks if the model has been set up previously, intended as a static method\n     * @return bool\n     */\n    public function isConfigured()\n    {\n        return $this->getSettingsRecord() !== null;\n    }\n\n    /**\n     * getSettingsRecord returns the raw Model record that stores the settings.\n     * @return Model\n     */\n    public function getSettingsRecord()\n    {\n        if (!System::hasDatabase()) {\n            return null;\n        }\n\n        $record = $this->model\n            ->where('item', $this->recordCode)\n            ->remember(1440, $this->getCacheKey())\n            ->first();\n\n        return $record ?: null;\n    }\n\n    /**\n     * set a single or array key pair of values, intended as a static method\n     */\n    public function set($key, $value = null)\n    {\n        $data = is_array($key) ? $key : [$key => $value];\n        $obj = $this->instance();\n        $obj->fill($data);\n        return $obj->save();\n    }\n\n    /**\n     * get helper for getSettingsValue, intended as a static method\n     */\n    public function get($key, $default = null)\n    {\n        return $this->instance()->getSettingsValue($key, $default);\n    }\n\n    /**\n     * getSettingsValue gets a single setting value, or return a default value\n     */\n    public function getSettingsValue($key, $default = null)\n    {\n        if (array_key_exists($key, $this->fieldValues)) {\n            return $this->fieldValues[$key];\n        }\n\n        return array_get($this->fieldValues, $key, $default);\n    }\n\n    /**\n     * setSettingsValue sets a single setting value, if allowed.\n     */\n    public function setSettingsValue($key, $value)\n    {\n        if ($this->isKeyAllowed($key)) {\n            return;\n        }\n\n        $this->model->attributes[$key] = $this->fieldValues[$key] = $value;\n    }\n\n    /**\n     * initSettingsData default values to set for this model, override\n     */\n    public function initSettingsData()\n    {\n    }\n\n    /**\n     * afterModelFetch populates the field values from the database record.\n     */\n    public function afterModelFetch()\n    {\n        $this->fieldValues = $this->model->value ?: [];\n        $this->model->attributes = array_merge($this->fieldValues, $this->model->attributes);\n        $this->model->syncOriginal();\n    }\n\n    /**\n     * saveModelInternal method for the model\n     * @return void\n     */\n    public function saveModelInternal()\n    {\n        // Reset values from the attributes that may be manipulated elsewhere\n        if ($this->fieldValues) {\n            foreach ($this->fieldValues as $key => $val) {\n                if (array_key_exists($key, $this->model->attributes)) {\n                    $this->fieldValues[$key] = $this->model->attributes[$key];\n                }\n            }\n        }\n\n        // Purge the field values from the attributes\n        $this->model->attributes = array_diff_key($this->model->attributes, $this->fieldValues);\n    }\n\n    /**\n     * beforeModelSave, ensure the record code is set and the jsonable field values\n     */\n    public function beforeModelSave()\n    {\n        $this->model->item = $this->recordCode;\n        if ($this->fieldValues) {\n            $this->model->value = $this->fieldValues;\n        }\n    }\n\n    /**\n     * afterModelSave, clear the cached query entry\n     * and restart queue workers so they have the latest settings\n     * @return void\n     */\n    public function afterModelSave()\n    {\n        Cache::forget($this->getCacheKey());\n\n        try {\n            Artisan::call('queue:restart');\n        }\n        catch (Exception $e) {\n            Log::warning($e->getMessage());\n        }\n    }\n\n    /**\n     * isKeyAllowed checks if a key is legitimate or should be added to\n     * the field value collection\n     */\n    protected function isKeyAllowed($key)\n    {\n        // Let the core columns through\n        if ($key == 'id' || $key == 'value' || $key == 'item') {\n            return true;\n        }\n\n        // Let relations through\n        if ($this->model->hasRelation($key)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * getFieldConfig returns the field configuration used by this model.\n     */\n    public function getFieldConfig()\n    {\n        if ($this->fieldConfig !== null) {\n            return $this->fieldConfig;\n        }\n\n        return $this->fieldConfig = $this->makeConfig($this->model->settingsFields);\n    }\n\n    /**\n     * getCacheKey returns a cache key for this record.\n     */\n    protected function getCacheKey()\n    {\n        return 'system::settings.'.$this->recordCode;\n    }\n\n    /**\n     * clearInternalCache of model instances.\n     * @return void\n     */\n    public static function clearInternalCache()\n    {\n        static::$instances = [];\n    }\n}\n"
  },
  {
    "path": "modules/system/build-util.js",
    "content": "/**\n * October CMS Build Utilities\n *\n * Helper functions for building vendor assets\n */\nimport * as esbuild from 'esbuild';\nimport * as sass from 'sass';\nimport less from 'less';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nconst rootDir = path.resolve(__dirname, '../..');\nconst nodeModules = path.join(__dirname, 'node_modules');\nconst vendorDir = path.join(__dirname, 'assets/vendor');\nconst assetsDir = path.join(__dirname, 'assets');\n\n// Copy a single file\nexport function copy(src, dest) {\n    const srcPath = path.join(nodeModules, src);\n    const destPath = path.join(vendorDir, dest);\n    fs.mkdirSync(path.dirname(destPath), { recursive: true });\n    fs.copyFileSync(srcPath, destPath);\n    console.log(`  ✓ ${dest}`);\n}\n\n// Concatenate files into one\nexport function concat(files, dest) {\n    const destPath = path.join(assetsDir, dest);\n    fs.mkdirSync(path.dirname(destPath), { recursive: true });\n    const contents = files.map(f => {\n        let filePath;\n        if (f.startsWith('modules/')) {\n            // Absolute path from project root\n            filePath = path.join(rootDir, f);\n        } else if (f.startsWith('vendor/')) {\n            // Local vendor file in system assets\n            filePath = path.join(assetsDir, f);\n        } else {\n            // npm package\n            filePath = path.join(nodeModules, f);\n        }\n        return fs.readFileSync(filePath, 'utf8');\n    });\n    fs.writeFileSync(destPath, contents.join('\\n;\\n'));\n    console.log(`  ✓ ${dest} (${files.length} files)`);\n}\n\n// Copy a directory of files\nexport function copyDir(src, dest) {\n    const srcPath = path.join(nodeModules, src);\n    const destPath = path.join(vendorDir, dest);\n    fs.mkdirSync(destPath, { recursive: true });\n    const files = fs.readdirSync(srcPath);\n    let count = 0;\n    for (const file of files) {\n        const srcFile = path.join(srcPath, file);\n        const destFile = path.join(destPath, file);\n        if (fs.statSync(srcFile).isFile()) {\n            fs.copyFileSync(srcFile, destFile);\n            count++;\n        }\n    }\n    console.log(`  ✓ ${dest}/ (${count} files)`);\n}\n\n// Bundle an ESM package with esbuild\nexport async function bundle(entry, outfile, options = {}) {\n    const destPath = path.join(vendorDir, outfile);\n    fs.mkdirSync(path.dirname(destPath), { recursive: true });\n\n    await esbuild.build({\n        entryPoints: [entry],\n        bundle: true,\n        format: 'esm',\n        outfile: destPath,\n        minify: true,\n        ...options\n    });\n    console.log(`  ✓ ${outfile} (bundled)`);\n}\n\n// Build script (IIFE)\nexport async function script(srcFile, destFile, minify = false) {\n    const srcPath = path.join(vendorDir, srcFile);\n    const destPath = path.join(assetsDir, destFile);\n    fs.mkdirSync(path.dirname(destPath), { recursive: true });\n\n    await esbuild.build({\n        entryPoints: [srcPath],\n        bundle: true,\n        format: 'iife',\n        outfile: destPath,\n        minify,\n        ignoreAnnotations: true\n    });\n    console.log(`  ✓ ${destFile}`);\n}\n\n// Compile SCSS to CSS\nexport function compileSass(srcFile, destFile) {\n    const srcPath = path.join(vendorDir, srcFile);\n    const destPath = path.join(vendorDir, destFile);\n    fs.mkdirSync(path.dirname(destPath), { recursive: true });\n\n    const result = sass.compile(srcPath, {\n        style: 'compressed',\n        loadPaths: [nodeModules],\n        quietDeps: true,\n        silenceDeprecations: ['import', 'global-builtin', 'color-functions']\n    });\n    fs.writeFileSync(destPath, result.css);\n    console.log(`  ✓ ${destFile} (compiled)`);\n}\n\n// Compile LESS to CSS\nexport async function compileLess(srcFile, destFile) {\n    const srcPath = path.join(rootDir, srcFile);\n    const destPath = path.join(rootDir, destFile);\n    fs.mkdirSync(path.dirname(destPath), { recursive: true });\n\n    const source = fs.readFileSync(srcPath, 'utf8');\n    const result = await less.render(source, {\n        filename: srcPath,\n        compress: true\n    });\n    fs.writeFileSync(destPath, result.css);\n    console.log(`  ✓ ${destFile} (compiled)`);\n}\n\n// Bundle a Vue component library as ESM with Vue as external (uses importmap)\n// Outputs JS and CSS to a specified directory relative to project root\nexport async function bundleVueComponent(npmPackage, outDir, options = {}) {\n    const {\n        cssFile = 'dist/style.css',\n        jsFile = 'vue-component.esm.js',\n        cssOutFile = 'vue-component.min.css'\n    } = options;\n\n    const destDir = path.join(rootDir, outDir);\n    fs.mkdirSync(destDir, { recursive: true });\n\n    const outfile = path.join(destDir, jsFile);\n\n    // Bundle JS as ESM with external Vue (resolved via importmap in browser)\n    await esbuild.build({\n        entryPoints: [npmPackage],\n        bundle: true,\n        format: 'esm',\n        outfile,\n        minify: true,\n        external: ['vue']\n    });\n\n    // Remove Vue 2 auto-install code that breaks in Vue 3\n    // Pattern: `var v;typeof window<\"u\"?v=window.Vue:...;v&&v.use(...)`\n    let content = fs.readFileSync(outfile, 'utf8');\n    content = content.replace(\n        /,(\\w);typeof window<\"u\"\\?\\1=window\\.Vue:typeof global<\"u\"&&\\(\\1=global\\.Vue\\);\\1&&\\1\\.use\\(\\w+\\)/g,\n        ''\n    );\n    fs.writeFileSync(outfile, content);\n\n    // Copy CSS file\n    const cssSrcPath = path.join(nodeModules, npmPackage, cssFile);\n    if (fs.existsSync(cssSrcPath)) {\n        fs.copyFileSync(cssSrcPath, path.join(destDir, cssOutFile));\n    }\n\n    const shortPath = outDir.replace('modules/backend/vuecomponents/', '');\n    console.log(`  ✓ ${shortPath} (bundled)`);\n}\n\n// Export directory paths for use in build scripts\nexport { rootDir, nodeModules, vendorDir, assetsDir };\n"
  },
  {
    "path": "modules/system/build.js",
    "content": "/**\n * October CMS Vendor Build Script\n *\n * - Bundles ESM packages with esbuild (resolves bare imports)\n * - Compiles SCSS/LESS with sass/less (for customized Bootstrap, Froala)\n * - Copies UMD packages directly (already browser-ready)\n */\nimport * as esbuild from 'esbuild';\nimport fs from 'fs';\nimport path from 'path';\nimport {\n    copy,\n    concat,\n    copyDir,\n    bundle,\n    bundleVueComponent,\n    script,\n    compileSass,\n    compileLess,\n    rootDir,\n    vendorDir\n} from './build-util.js';\n\nconsole.log('\\n  Building vendor files...\\n');\n\n// Vendor bundle - concatenate UMD scripts (they use `this` which doesn't work in ES modules)\nconcat([\n    'jquery/dist/jquery.min.js',\n    'mustache/mustache.min.js',\n    'moment/min/moment.min.js',\n    'moment-timezone/builds/moment-timezone-with-data.min.js',\n    'vendor/pikaday/js/pikaday.js',\n    'vendor/pikaday/js/pikaday.jquery.js',\n    'vendor/prettify/prettify.js',\n    'vendor/waterfall/jquery.waterfall.js',\n    'vendor/jcrop/js/jquery.Jcrop.js',\n    'vendor/select2/js/select2.full.js',\n    'vendor/mousewheel/mousewheel.js',\n    'vendor/clockpicker/js/jquery-clockpicker.js',\n    'modules/backend/assets/foundation/migrate/vendor/raphael/raphael.js',\n], 'js/vendor.js');\n\n// Foundation bundle - backend foundation library\nconcat([\n    // Migrate vendor scripts\n    'modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.js',\n    'modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.tooltip.js',\n    'modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.resize.js',\n    'modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.time.js',\n    'modules/backend/assets/foundation/migrate/vendor/sortable/jquery-sortable.js',\n\n    // Foundation core scripts\n    'modules/backend/assets/foundation/scripts/foundation/foundation.baseclass.js',\n    'modules/backend/assets/foundation/scripts/foundation/foundation.element.js',\n    'modules/backend/assets/foundation/scripts/foundation/foundation.event.js',\n    'modules/backend/assets/foundation/scripts/foundation/foundation.controlutils.js',\n\n    // Drag scripts\n    'modules/backend/assets/foundation/scripts/drag/drag.value.js',\n    'modules/backend/assets/foundation/scripts/drag/drag.sort.js',\n    'modules/backend/assets/foundation/scripts/drag/drag.scroll.js',\n\n    // Rowlink\n    'modules/backend/assets/foundation/scripts/rowlink/rowlink.js',\n\n    // Foundation controls\n    'modules/backend/assets/foundation/controls/autocomplete/autocomplete.js',\n    'modules/backend/assets/foundation/controls/balloon-selector/balloon-selector.js',\n    'modules/backend/assets/foundation/controls/callout/callout.js',\n    'modules/backend/assets/foundation/controls/dropdown/dropdown.js',\n    'modules/backend/assets/foundation/controls/popover/popover.js',\n    'modules/backend/assets/foundation/controls/popup/popup.js',\n    'modules/backend/assets/foundation/controls/popup/popup.stacker.js',\n    'modules/backend/assets/foundation/controls/toolbar/toolbar.js',\n    'modules/backend/assets/foundation/controls/tooltip/tooltip.js',\n    'modules/backend/assets/foundation/controls/checkbox/checkbox.js',\n\n    // Inspector\n    'modules/backend/assets/foundation/controls/inspector/inspector.surface.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.manager.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.wrapper.base.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.wrapper.popup.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.wrapper.container.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.groups.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.engine.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.base.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.string.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.checkbox.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.dropdown.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.popupbase.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.text.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.set.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.objectlist.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.object.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.stringlist.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.stringlistautocomplete.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.dictionary.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.editor.autocomplete.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.helpers.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.validationset.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.validator.base.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.validator.basenumber.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.validator.required.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.validator.regex.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.validator.integer.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.validator.float.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.validator.length.js',\n    'modules/backend/assets/foundation/controls/inspector/inspector.externalparametereditor.js',\n\n    // Charts\n    'modules/backend/assets/foundation/controls/chart/chart.bar.js',\n    'modules/backend/assets/foundation/controls/chart/chart.line.js',\n    'modules/backend/assets/foundation/controls/chart/chart.meter.js',\n    'modules/backend/assets/foundation/controls/chart/chart.pie.js',\n    'modules/backend/assets/foundation/controls/chart/chart.utils.js',\n\n    // Migrate (legacy compatibility)\n    'modules/backend/assets/foundation/migrate/js/loader.js',\n    'modules/backend/assets/foundation/migrate/js/backend.js',\n    'modules/backend/assets/foundation/migrate/js/checkbox.js',\n    'modules/backend/assets/foundation/migrate/js/bs3-adapter.js',\n    'modules/backend/assets/foundation/migrate/js/list.sortable.js',\n], 'js/foundation.js');\n\n// ESM packages (need bundling to resolve bare imports)\nawait bundle('vue/dist/vue.esm-browser.js', 'vue/vue.esm.js');\nawait bundle('vue-router', 'vue-router/vue-router.esm.js');\nawait bundle('mitt', 'mitt/mitt.esm.js');\nawait bundle('bootstrap', 'bootstrap/bootstrap.esm.js');\nawait bundle('js-cookie', 'js-cookie/js.cookie.esm.js');\nawait bundle('sortablejs', 'sortablejs/sortable.esm.js');\nawait bundle('dropzone', 'dropzone/dropzone.esm.js');\nawait bundle('p-queue', 'p-queue/p-queue.esm.js');\nawait bundle('chart.js/auto', 'chartjs/chart.esm.js');\nawait bundle('chartjs-adapter-moment/dist/chartjs-adapter-moment.esm.js', 'chartjs/chartjs-adapter-moment.esm.js');\ncopyDir('moment/locale', 'moment/locale');\n\n// Vue component libraries - output to their respective component vendor directories (ESM format)\nawait bundleVueComponent('vue-multiselect', 'modules/backend/vuecomponents/dropdown/assets/vendor/vue-multiselect', {\n    cssFile: 'dist/vue-multiselect.css',\n    jsFile: 'vue-multiselect.esm.js',\n    cssOutFile: 'vue-multiselect.min.css'\n});\n\nawait bundleVueComponent('@trevoreyre/autocomplete-vue', 'modules/backend/vuecomponents/autocomplete/assets/vendor/vue-autocomplete', {\n    cssFile: 'dist/style.css',\n    jsFile: 'vue-autocomplete.esm.js',\n    cssOutFile: 'vue-autocomplete.min.css'\n});\n\n// Backend styles\nawait compileLess(\n    'modules/backend/assets/less/october.less',\n    'modules/backend/assets/css/october.css'\n);\n\n// Bootstrap\ncompileSass('bootstrap/src/bootstrap.scss', 'bootstrap/bootstrap.css');\ncompileSass('bootstrap/src/bootstrap-lite.scss', 'bootstrap/bootstrap-lite.css');\ncopy('bootstrap-icons/font/bootstrap-icons.min.css', 'bootstrap-icons/bootstrap-icons.css');\ncopyDir('bootstrap-icons/font/fonts', 'bootstrap-icons/fonts');\n\n// Phosphor Icons (static assets)\ncopy('@phosphor-icons/web/src/regular/style.css', 'phosphor-icons/style.css');\ncopy('@phosphor-icons/web/src/regular/Phosphor.woff2', 'phosphor-icons/Phosphor.woff2');\ncopy('@phosphor-icons/web/src/regular/Phosphor.woff', 'phosphor-icons/Phosphor.woff');\ncopy('@phosphor-icons/web/src/regular/Phosphor.ttf', 'phosphor-icons/Phosphor.ttf');\ncopy('@phosphor-icons/web/src/regular/Phosphor.svg', 'phosphor-icons/Phosphor.svg');\n\n// AJAX Framework (IIFE)\nawait script('larajax/framework-bundle.js', 'js/framework-bundle.min.js', true);\nawait script('larajax/framework-bundle.js', 'js/framework-bundle.js', false);\nawait script('larajax/framework.js', 'js/framework.min.js', true);\nawait script('larajax/framework.js', 'js/framework.js', false);\n\n// Froala Editor (DRM protected - only build if present)\nconst froalaDir = path.join(rootDir, 'vendor_drm/froala');\nif (fs.existsSync(froalaDir)) {\n    console.log('\\n  Building Froala editor...\\n');\n\n    // LESS stylesheets\n    await compileLess(\n        'vendor_drm/froala/less/froala_editor.less',\n        'modules/system/assets/vendor/froala/froala.css'\n    );\n    await compileLess(\n        'vendor_drm/froala/less/base_styles.less',\n        'modules/system/assets/vendor/froala/base-styles.css'\n    );\n\n    // JavaScript (bundle with esbuild)\n    const froalaOutDir = path.join(vendorDir, 'froala');\n    fs.mkdirSync(froalaOutDir, { recursive: true });\n\n    await esbuild.build({\n        entryPoints: [path.join(froalaDir, 'js/index.js')],\n        bundle: true,\n        format: 'iife',\n        outfile: path.join(froalaOutDir, 'froala.js'),\n        minify: true,\n        external: ['jquery'],\n        globalName: 'FroalaEditor'\n    });\n    console.log('  ✓ froala/froala.js (bundled)');\n}\n\n// Handsontable (DRM protected - only build if present)\nconst handsontableDir = path.join(rootDir, 'vendor_drm/handsontable');\nif (fs.existsSync(handsontableDir)) {\n    console.log('\\n  Building Handsontable...\\n');\n\n    const handsontableOutDir = path.join(vendorDir, 'handsontable');\n    fs.mkdirSync(handsontableOutDir, { recursive: true });\n\n    // Concatenate source CSS files\n    const hotCssFiles = [\n        'src/css/bootstrap.css',\n        'src/css/handsontable.css',\n        'src/css/mobile.handsontable.css',\n        'src/plugins/comments/comments.css',\n        'src/plugins/contextMenu/contextMenu.css',\n        'src/plugins/copyPaste/copyPaste.css',\n        'src/plugins/manualColumnFreeze/manualColumnFreeze.css',\n        'src/plugins/manualColumnMove/manualColumnMove.css',\n        'src/plugins/manualRowMove/manualRowMove.css',\n        'src/plugins/mergeCells/mergeCells.css',\n    ];\n    const hotCss = hotCssFiles.map(f =>\n        fs.readFileSync(path.join(handsontableDir, f), 'utf8')\n    ).join('\\n');\n    fs.writeFileSync(path.join(handsontableOutDir, 'handsontable.css'), hotCss);\n    console.log('  ✓ handsontable/handsontable.css');\n\n    // Shim file for empty imports\n    const emptyShim = path.join(handsontableDir, '_shims/empty.js');\n\n    // esbuild plugin to resolve Handsontable-specific imports\n    const hotResolvePlugin = {\n        name: 'handsontable-resolve',\n        setup(build) {\n            // Stub out @babel/polyfill (not needed in modern browsers)\n            build.onResolve({ filter: /^@babel\\/polyfill/ }, () => ({\n                path: emptyShim,\n            }));\n\n            // numbro is optional (numeric formatting) — stub it out\n            build.onResolve({ filter: /^numbro$/ }, () => ({\n                path: emptyShim,\n            }));\n\n            // Resolve pikaday JS to the vendor copy already in assets\n            build.onResolve({ filter: /^pikaday$/ }, () => ({\n                path: path.join(vendorDir, 'pikaday/js/pikaday.js'),\n            }));\n\n            // Stub pikaday CSS (already loaded globally)\n            build.onResolve({ filter: /^pikaday\\/css\\// }, () => ({\n                path: emptyShim,\n            }));\n\n            // Resolve moment to global shim (already loaded via vendor.js)\n            build.onResolve({ filter: /^moment$/ }, () => ({\n                path: path.join(handsontableDir, '_shims/moment.js'),\n            }));\n        }\n    };\n\n    // Bundle JavaScript (IIFE format, globals external)\n    await esbuild.build({\n        entryPoints: [path.join(handsontableDir, 'src/index.js')],\n        bundle: true,\n        format: 'iife',\n        outfile: path.join(handsontableOutDir, 'handsontable.js'),\n        minify: true,\n        globalName: 'Handsontable',\n        footer: { js: 'Handsontable=Handsontable.default||Handsontable;window.Handsontable=Handsontable;' },\n        external: ['jquery'],\n        loader: { '.css': 'empty' },\n        plugins: [hotResolvePlugin],\n        define: {\n            'process.env.HOT_BUILD_DATE': JSON.stringify(new Date().toISOString()),\n            'process.env.HOT_PACKAGE_NAME': JSON.stringify('handsontable'),\n            'process.env.HOT_PACKAGE_TYPE': JSON.stringify('ce'),\n            'process.env.HOT_VERSION': JSON.stringify('6.2.2'),\n            'process.env.HOT_BASE_VERSION': JSON.stringify(''),\n            'process.env.HOT_RELEASE_DATE': JSON.stringify(new Date().toISOString()),\n        },\n    });\n    console.log('  ✓ handsontable/handsontable.js (bundled)');\n}\n\nconsole.log('\\n  Done.\\n');\n"
  },
  {
    "path": "modules/system/classes/AppBase.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse October\\Rain\\Support\\ModuleServiceProvider;\n\n/**\n * AppBase class is an application level plugin\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass AppBase extends ModuleServiceProvider\n{\n    /**\n     * register method, called when the plugin is first registered.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        $appPath = app_path();\n        $appNamespace = 'app';\n\n        // Register configuration path\n        $configPath = $appPath . '/config';\n        if (is_dir($configPath)) {\n            $this->loadConfigFrom($configPath, $appNamespace);\n        }\n\n        // Register views path\n        $viewsPath = $appPath . '/views';\n        if (is_dir($viewsPath)) {\n            $this->loadViewsFrom($viewsPath, $appNamespace);\n        }\n\n        // Add init, if available\n        $initFile = $appPath . '/init.php';\n        if (file_exists($initFile)) {\n            require $initFile;\n        }\n\n        // Add routes, if available\n        $routesFile = $appPath . '/routes.php';\n        if (!App::routesAreCached() && file_exists($routesFile)) {\n            require $routesFile;\n        }\n    }\n\n    /**\n     * boot method, called right before the request route.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/CombineAssets.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse Url;\nuse File;\nuse Site;\nuse Event;\nuse Cache;\nuse Route;\nuse Config;\nuse Request;\nuse Response;\nuse System\\Helpers\\Cache as CacheHelper;\nuse ApplicationException;\nuse DateTime;\n\n/**\n * CombineAssets is used for combining JavaScript and StyleSheet files\n *\n * This works by taking a collection of asset locations, serializing them,\n * then storing them in the session with a unique ID. The ID is then used\n * to generate a URL to the `/combine` route via the system controller.\n *\n * When the combine route is hit, the unique ID is used to serve up the\n * assets -- minified, compiled or both. Special E-Tags are used to prevent\n * compilation and delivery of cached assets that are unchanged.\n *\n * Use the `CombineAssets::combine` method to combine your own assets.\n *\n * The functionality of this class is controlled by these config items:\n *\n * - cms.enable_asset_cache - Cache untouched assets\n * - cms.enable_asset_minify - Compress assets using minification\n * - cms.enable_asset_deep_hashing - Advanced caching of imports\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CombineAssets\n{\n    /**\n     * @var array jsExtensions is a list of known JavaScript extensions.\n     */\n    protected static $jsExtensions = ['js'];\n\n    /**\n     * @var array cssExtensions is a list of known StyleSheet extensions.\n     */\n    protected static $cssExtensions = ['css', 'less', 'scss', 'sass'];\n\n    /**\n     * @var array aliases for asset file paths.\n     */\n    protected $aliases = [];\n\n    /**\n     * @var array bundles that are compiled to the filesystem.\n     */\n    protected $bundles = [];\n\n    /**\n     * @var string localPath context to find assets.\n     */\n    protected $localPath;\n\n    /**\n     * @var bool useCache to cache untouched files.\n     */\n    public $useCache = false;\n\n    /**\n     * @var bool useMinify compress (minify) asset files.\n     */\n    public $useMinify = false;\n\n    /**\n     * @var bool useDeepHashing when true, cache will be busted when an import is modified.\n     * Enabling this feature will make page loading slower.\n     */\n    public $useDeepHashing = false;\n\n    /**\n     * __construct this class\n     */\n    public function __construct()\n    {\n        // Default config\n        $this->useCache = Config::get('cms.enable_asset_cache', false);\n        $this->useMinify = Config::get('cms.enable_asset_minify', false);\n        $this->useDeepHashing = Config::get('cms.enable_asset_deep_hashing', null);\n\n        if ($this->useDeepHashing === null) {\n            $this->useDeepHashing = Config::get('app.debug', false);\n        }\n\n        // jQuery Framework\n        $this->registerAlias('jquery', '~/modules/system/assets/js/vendor/jquery.min.js');\n\n        // AJAX Framework\n        $this->registerAlias('framework', '~/modules/system/assets/js/framework.min.js');\n\n        // AJAX Framework (Extras)\n        $this->registerAlias('framework.extras', '~/modules/system/assets/js/framework-bundle.min.js');\n        $this->registerAlias('framework.extras.js', '~/modules/system/assets/js/framework-bundle.min.js');\n        $this->registerAlias('framework.extras', '~/modules/system/assets/css/framework-extras.css');\n        $this->registerAlias('framework.extras.css', '~/modules/system/assets/css/framework-extras.css');\n\n        // @deprecated from v3\n        $this->registerAlias('framework.bundle', '~/modules/system/assets/js/framework-bundle.min.js');\n        $this->registerAlias('framework.bundle.js', '~/modules/system/assets/js/framework-bundle.min.js');\n        $this->registerAlias('framework.bundle', '~/modules/system/assets/css/framework-extras.css');\n        $this->registerAlias('framework.bundle.css', '~/modules/system/assets/css/framework-extras.css');\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.combiner');\n    }\n\n    /**\n     * registerCallback registers a callback function that defines bundles.\n     * The callback function should register bundles by calling the manager's\n     * `registerBundle` method. This instance is passed to the callback\n     * function as an argument. Usage:\n     *\n     *     CombineAssets::registerCallback(function ($combiner) {\n     *         $combiner->registerBundle('~/modules/backend/assets/less/october.less');\n     *     });\n     *\n     * @deprecated this will be removed in a later version\n     * @param callable $callback A callable function.\n     */\n    public static function registerCallback(callable $callback)\n    {\n        App::extendInstance('system.combiner', $callback);\n    }\n\n    /**\n     * getAssetic\n     */\n    protected function getAssetic()\n    {\n        return App::make('assetic');\n    }\n\n    /**\n     * Combines JavaScript or StyleSheet file references\n     * to produce a page relative URL to the combined contents.\n     *\n     *     $assets = [\n     *         'assets/vendor/mustache/mustache.js',\n     *         'assets/js/vendor/jquery.ui.widget.js',\n     *         'assets/js/vendor/canvas-to-blob.js',\n     *     ];\n     *\n     *     CombineAssets::combine($assets, base_path('plugins/acme/blog'));\n     *\n     * @param array $assets Collection of assets\n     * @param string $pathPrefix Prefix all assets with this path (optional)\n     * @return string URL to contents.\n     */\n    public static function combine($assets = [], $basePath = null)\n    {\n        return self::instance()->prepareRequest($assets, $basePath);\n    }\n\n    /**\n     * Combines a collection of assets files to a destination file\n     *\n     *     $assets = [\n     *         'assets/less/header.less',\n     *         'assets/less/footer.less',\n     *     ];\n     *\n     *     CombineAssets::combineToFile(\n     *         $assets,\n     *         base_path('themes/website/assets/theme.less'),\n     *         base_path('themes/website')\n     *     );\n     *\n     * @param array $assets Collection of assets\n     * @param string $destination Write the combined file to this location\n     * @param string $pathPrefix Prefix all assets with this path (optional)\n     * @return void\n     */\n    public function combineToFile($assets, $destination, $basePath = null)\n    {\n        // Prefix all assets with base path\n        if ($basePath) {\n            if (substr($basePath, -1) !== '/') {\n                $basePath = $basePath.'/';\n            }\n            $assets = array_map(function ($asset) use ($basePath) {\n                if (substr($asset, 0, 1) === '@') {\n                    return $asset;\n                }\n                return $basePath.$asset;\n            }, $assets);\n        }\n\n        [$assets, $extension] = $this->prepareAssets($assets);\n\n        $rewritePath = File::localToPublic(dirname($destination));\n\n        $combiner = $this->prepareCombiner($assets, $rewritePath, ['useCache' => false]);\n\n        $contents = $combiner->dump();\n\n        File::put($destination, $contents);\n    }\n\n    /**\n     * Returns the combined contents from a prepared cache identifier.\n     * @param string $cacheKey Cache identifier.\n     * @return string Combined file contents.\n     */\n    public function getContents($cacheKey)\n    {\n        $cacheInfo = $this->getCache($cacheKey);\n        if (!$cacheInfo) {\n            throw new ApplicationException(__(\"The combiner file ':name' is not found.\", ['name' => e($cacheKey)]));\n        }\n\n        // Ensure defaults\n        $cacheInfo += [\n            'version' => null,\n            'etag' => null,\n            'lastMod' => null,\n            'files' => null,\n            'path' => null,\n            'extension' => null,\n            'site' => null,\n            'theme' => null,\n        ];\n\n        $this->setActiveSiteContext($cacheInfo['site'], $cacheInfo['theme']);\n        $this->setLocalPath($cacheInfo['path']);\n\n        // Analyze cache information\n        $lastModifiedTime = gmdate(\"D, d M Y H:i:s \\G\\M\\T\", $cacheInfo['lastMod']);\n        $mimeType = $cacheInfo['extension'] === 'css'\n            ? 'text/css'\n            : 'application/javascript';\n\n        // Set 304 Not Modified header, if necessary\n        $response = Response::make();\n        $response->header('Content-Type', $mimeType);\n        $response->header('Cache-Control', 'private, max-age=15768000');\n        $response->setLastModified(new DateTime($lastModifiedTime));\n        $response->setEtag($cacheInfo['etag']);\n        $response->setPublic();\n        $modified = !$response->isNotModified(App::make('request'));\n\n        // Request says response is cached, no code evaluation needed\n        if ($modified) {\n            $combiner = $this->prepareCombiner($cacheInfo['files'], null, ['deepHashKey' => $cacheKey]);\n            $contents = $combiner->dump();\n            $response->setContent($contents);\n        }\n\n        return $response;\n    }\n\n    /**\n     * Prepares an array of assets by normalizing the collection\n     * and processing aliases.\n     * @param array $assets\n     * @return array\n     */\n    protected function prepareAssets(array $assets)\n    {\n        if (!is_array($assets)) {\n            $assets = [$assets];\n        }\n\n        // Split assets in to groups.\n        $combineJs = [];\n        $combineCss = [];\n\n        foreach ($assets as $asset) {\n            // Allow aliases to go through without an extension\n            if (substr($asset, 0, 1) === '@') {\n                $combineJs[] = $asset;\n                $combineCss[] = $asset;\n                continue;\n            }\n\n            $extension = File::extension($asset);\n\n            if (in_array($extension, self::$jsExtensions)) {\n                $combineJs[] = $asset;\n                continue;\n            }\n\n            if (in_array($extension, self::$cssExtensions)) {\n                $combineCss[] = $asset;\n                continue;\n            }\n        }\n\n        // Determine which group of assets to combine.\n        if (count($combineCss) > count($combineJs)) {\n            $extension = 'css';\n            $assets = $combineCss;\n        }\n        else {\n            $extension = 'js';\n            $assets = $combineJs;\n        }\n\n        // Apply registered aliases\n        if ($aliasMap = $this->getAliases($extension)) {\n            foreach ($assets as $key => $asset) {\n                if (substr($asset, 0, 1) !== '@') {\n                    continue;\n                }\n                $_asset = substr($asset, 1);\n\n                if (isset($aliasMap[$_asset])) {\n                    $assets[$key] = $aliasMap[$_asset];\n                }\n            }\n        }\n\n        return [$assets, $extension];\n    }\n\n    /**\n     * prepareRequest combines asset file references of a single type to produce\n     * a URL reference to the combined contents.\n     * @param array $assets List of asset files.\n     * @param string $basePath\n     * @return string\n     */\n    protected function prepareRequest(array $assets, $basePath = null)\n    {\n        if ($basePath !== null && substr($basePath, -1) !== '/') {\n            $basePath = $basePath.'/';\n        }\n\n        $this->setLocalPath($basePath);\n\n        [$assets, $extension] = $this->prepareAssets($assets);\n\n        // Cache and process\n        $cacheKey = $this->getCacheKey($assets);\n        $cacheInfo = $this->useCache ? $this->getCache($cacheKey) : false;\n\n        if (!$cacheInfo) {\n            $combiner = $this->prepareCombiner($assets, null, ['deepHashKey' => $cacheKey]);\n            $lastMod = $this->useDeepHashing\n                ? $this->getAssetic()->getDeepHashLastModified($combiner)\n                : $combiner->getLastModified();\n\n            $cacheInfo = [\n                'version' => $cacheKey.'-'.$lastMod,\n                'etag' => $cacheKey,\n                'lastMod' => $lastMod,\n                'files' => $assets,\n                'path' => $basePath,\n                'extension' => $extension,\n                'site' => Site::getSiteIdFromContext(),\n                'theme' => Config::get('cms.active_theme'),\n            ];\n\n            $this->putCache($cacheKey, $cacheInfo);\n        }\n\n        return $this->getCombinedUrl($cacheInfo['version']);\n    }\n\n    /**\n     * prepareCombiner returns the combined contents from a prepared cache identifier.\n     * @param array $assets List of asset files.\n     * @param string $rewritePath\n     * @return \\October\\Rain\\Assetic\\Asset\\AssetInterface\n     */\n    protected function prepareCombiner(array $assets, $rewritePath = null, $options = [])\n    {\n        /**\n         * @event cms.combiner.beforePrepare\n         * Provides an opportunity to interact with the asset combiner before assets are combined.\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.combiner.beforePrepare', function ((\\System\\Classes\\CombineAssets) $assetCombiner, (array) $assets) {\n         *         $assetCombiner->registerFilter(...)\n         *     });\n         *\n         */\n        Event::fire('cms.combiner.beforePrepare', [$this, $assets]);\n\n        return $this->getAssetic()->prepareCombiner($assets, [\n            'targetPath' => $this->getTargetPath($rewritePath),\n            'production' => $this->useMinify\n        ] + $options);\n    }\n\n    /**\n     * Returns the URL used for accessing the combined files.\n     * @param string $outputFilename A custom file name to use.\n     * @return string\n     */\n    protected function getCombinedUrl($outputFilename = 'undefined.css')\n    {\n        $combineAction = \\System\\Classes\\SystemController::class.'@combine';\n        $actionExists = Route::getRoutes()->getByAction($combineAction) !== null;\n\n        if ($actionExists) {\n            $result = Url::action($combineAction, [$outputFilename], false);\n        }\n        else {\n            $result = '/combine/'.$outputFilename;\n        }\n\n        return Url::toRelative($result);\n    }\n\n    /**\n     * setActiveSiteContext sets the theme and site, if provided\n     */\n    protected function setActiveSiteContext($siteId = null, $theme = null)\n    {\n        if ($siteId && Site::hasFeature('system_asset_combiner')) {\n            Site::applyActiveSiteId($siteId);\n        }\n\n        if ($theme) {\n            Config::set('cms.active_theme', $theme);\n        }\n    }\n\n    /**\n     * setLocalPath\n     */\n    protected function setLocalPath($path = null)\n    {\n        $this->localPath = $path;\n        $this->getAssetic()->setLocalPath($path);\n    }\n\n    /**\n     * getTargetPath returns the target path for use with the combiner. The target\n     * path helps generate relative links within CSS.\n     *\n     * /combine              returns combine/\n     * /index.php/combine    returns index-php/combine/\n     *\n     * @param string|null $path\n     * @return string The new target path\n     */\n    protected function getTargetPath($path = null)\n    {\n        if ($path === null) {\n            $baseUri = substr(Request::getBaseUrl(), strlen(Request::getBasePath()));\n            $path = $baseUri.'/combine';\n        }\n\n        if (strpos($path, '/') === 0) {\n            $path = substr($path, 1);\n        }\n\n        $path = str_replace('.', '-', $path).'/';\n        return $path;\n    }\n\n    //\n    // Filters\n    //\n\n    /**\n     * registerFilter to apply to the combining process.\n     * @param string|array $extension Extension name. Eg: css\n     * @param object $filter Collection of files to combine.\n     * @return self\n     */\n    public function registerFilter($extension, $filter, $isProduction = false)\n    {\n        $this->getAssetic()->registerFilter($extension, $filter, $isProduction);\n        return $this;\n    }\n\n    /**\n     * resetFilters clears any registered filters.\n     * @param string $extension Extension name. Eg: css\n     * @return self\n     */\n    public function resetFilters($extension = null)\n    {\n        $this->getAssetic()->resetFilters($extension);\n        return $this;\n    }\n\n    /**\n     * getFilters returns all defined filters for a given extension\n     */\n    public function getFilters(?string $extension = null, $isProduction = false): array\n    {\n        return $this->getAssetic()->getFilters($extension, $isProduction);\n    }\n\n    //\n    // Bundles\n    //\n\n    /**\n     * registerBundle\n     * @param string|array $files Files to be registered to bundle\n     * @param string $destination Destination file will be compiled to.\n     * @param string $extension Extension name. Eg: css\n     * @return self\n     */\n    public function registerBundle($files, $destination = null, $extension = null)\n    {\n        if (!is_array($files)) {\n            $files = [$files];\n        }\n\n        $firstFile = array_values($files)[0];\n\n        if ($extension === null) {\n            $extension = File::extension($firstFile);\n        }\n\n        $extension = strtolower(trim($extension));\n\n        if ($destination === null) {\n            $file = File::name($firstFile);\n            $path = dirname($firstFile);\n            $preprocessors = array_diff(self::$cssExtensions, ['css']);\n\n            if (in_array($extension, $preprocessors)) {\n                $cssPath = $path.'/../css';\n                if (\n                    in_array(strtolower(basename($path)), $preprocessors) &&\n                    File::isDirectory(File::symbolizePath($cssPath))\n                ) {\n                    $path = $cssPath;\n                }\n                $destination = $path.'/'.$file.'.css';\n            }\n            else {\n                $destination = $path.'/'.$file.'-min.'.$extension;\n            }\n        }\n\n        $this->bundles[$extension][$destination] = $files;\n\n        return $this;\n    }\n\n    /**\n     * getBundles returns bundles.\n     * @param string $extension Extension name. Eg: css\n     * @return self\n     */\n    public function getBundles($extension = null)\n    {\n        if ($extension === null) {\n            return $this->bundles;\n        }\n\n        if (isset($this->bundles[$extension])) {\n            return $this->bundles[$extension];\n        }\n\n        return null;\n    }\n\n    //\n    // Aliases\n    //\n\n    /**\n     * registerAlias to use for a longer file reference.\n     * @param string $alias Alias name. Eg: framework\n     * @param string $file Path to file to use for alias\n     * @param string $extension Extension name. Eg: css\n     * @return self\n     */\n    public function registerAlias($alias, $file, $extension = null)\n    {\n        if ($extension === null) {\n            $extension = File::extension($file);\n        }\n\n        $extension = strtolower($extension);\n\n        if (!isset($this->aliases[$extension])) {\n            $this->aliases[$extension] = [];\n        }\n\n        $this->aliases[$extension][$alias] = $file;\n\n        return $this;\n    }\n\n    /**\n     * resetAliases clears any registered aliases.\n     * @param string $extension Extension name. Eg: css\n     * @return self\n     */\n    public function resetAliases($extension = null)\n    {\n        if ($extension === null) {\n            $this->aliases = [];\n        }\n        else {\n            $this->aliases[$extension] = [];\n        }\n\n        return $this;\n    }\n\n    /**\n     * getAliases returns aliases.\n     * @param string $extension Extension name. Eg: css\n     * @return self\n     */\n    public function getAliases($extension = null)\n    {\n        if ($extension === null) {\n            return $this->aliases;\n        }\n\n        if (isset($this->aliases[$extension])) {\n            return $this->aliases[$extension];\n        }\n\n        return null;\n    }\n\n    //\n    // Cache\n    //\n\n    /**\n     * putCache stores information about a asset collection against\n     * a cache identifier.\n     * @param string $cacheKey Cache identifier.\n     * @param array $cacheInfo List of asset files.\n     * @return bool Successful\n     */\n    protected function putCache($cacheKey, array $cacheInfo)\n    {\n        $cacheKey = 'combiner.'.$cacheKey;\n\n        if (Cache::memo()->has($cacheKey)) {\n            return false;\n        }\n\n        $this->putCacheIndex($cacheKey);\n\n        Cache::forever($cacheKey, base64_encode(serialize($cacheInfo)));\n\n        return true;\n    }\n\n    /**\n     * getCache looks up information about a cache identifier.\n     * @param string $cacheKey Cache identifier\n     * @return array Cache information\n     */\n    protected function getCache($cacheKey)\n    {\n        $cacheKey = 'combiner.'.$cacheKey;\n\n        if ($cache = Cache::memo()->get($cacheKey)) {\n            return @unserialize(@base64_decode($cache));\n        }\n\n        return false;\n    }\n\n    /**\n     * getCacheKey builds a unique string based on assets\n     * @param array $assets Asset files\n     * @return string Unique identifier\n     */\n    protected function getCacheKey(array $assets)\n    {\n        $cacheKey = $this->localPath . implode('|', $assets);\n\n        // Deep hashing\n        if ($this->useDeepHashing) {\n            $cacheKey .= $this->getAssetic()->getDeepHashFromAssets($assets);\n        }\n\n        if (Site::hasFeature('system_asset_combiner')) {\n            $cacheKey .= Site::getSiteIdFromContext();\n        }\n\n        /**\n         * @event cms.combiner.getCacheKey\n         * Provides an opportunity to modify the asset combiner's cache key\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.combiner.getCacheKey', function ((\\System\\Classes\\CombineAssets) $assetCombiner, &$cacheKey) {\n         *         $cacheKey = rand();\n         *     });\n         *\n         */\n        Event::fire('cms.combiner.getCacheKey', [$this, &$cacheKey]);\n\n        return md5($cacheKey);\n    }\n\n    /**\n     * resetCache resets the combiner cache\n     */\n    public static function resetCache()\n    {\n        if ($cache = Cache::get('combiner.index')) {\n            $index = (array) @unserialize(@base64_decode($cache)) ?: [];\n\n            foreach ($index as $cacheKey) {\n                Cache::forget($cacheKey);\n            }\n\n            Cache::forget('combiner.index');\n        }\n\n        CacheHelper::instance()->clearCombiner();\n    }\n\n    /**\n     * putCacheIndex adds a cache identifier to the index store used for\n     * performing a reset of the cache. Returns false if identifier is already in store\n     * @param string $cacheKey Cache identifier\n     */\n    protected function putCacheIndex($cacheKey): bool\n    {\n        $index = [];\n\n        if ($cache = Cache::memo()->get('combiner.index')) {\n            $index = (array) @unserialize(@base64_decode($cache)) ?: [];\n        }\n\n        if (in_array($cacheKey, $index)) {\n            return false;\n        }\n\n        $index[] = $cacheKey;\n\n        Cache::forever('combiner.index', base64_encode(serialize($index)));\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/DependencyResolver.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse ReflectionException;\nuse ReflectionMethod;\n\n/**\n * DependencyResolver is a dependency injection implementation.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DependencyResolver\n{\n    use \\Illuminate\\Routing\\RouteDependencyResolverTrait;\n\n    /**\n     * @var Container container for application\n     */\n    protected $container;\n\n    /**\n     * __construct instance\n     */\n    public function __construct()\n    {\n        $this->container = App::make('app');\n    }\n\n    /**\n     * resolve\n     */\n    public function resolve($instance, string $method, array $parameters)\n    {\n        try {\n            if (method_exists($instance, $method)) {\n                return $this->resolveMethodDependencies(\n                    $parameters,\n                    new ReflectionMethod($instance, $method)\n                );\n            }\n            elseif (method_exists($instance, 'getClassMethodAsReflector')) {\n                return $this->resolveMethodDependencies(\n                    $parameters,\n                    $instance->getClassMethodAsReflector($method)\n                );\n            }\n        }\n        catch (ReflectionException $ex) {\n        }\n\n        return $parameters;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/DriverBehavior.php",
    "content": "<?php namespace System\\Classes;\n\nuse Event;\nuse October\\Contracts\\Element\\FormElement;\n\n/**\n * DriverBehavior base class.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DriverBehavior extends ModelBehavior\n{\n    use \\System\\Traits\\ConfigMaker;\n\n    /**\n     * @var string driverFields defines form fields for this driver\n     */\n    public $driverFields = 'fields.yaml';\n\n    /**\n     * @var mixed fieldConfig is extra configuration for the converter type.\n     */\n    protected $fieldConfig;\n\n    /**\n     * __construct\n     */\n    public function __construct($model = null)\n    {\n        parent::__construct($model);\n\n        $this->configPath = $this->guessConfigPathFrom($this);\n\n        if ($model) {\n            $this->initDriverHost($model);\n        }\n    }\n\n    /**\n     * initDriverHost when the converter is first created.\n     * @param \\Model $host\n     */\n    public function initDriverHost($host)\n    {\n    }\n\n    /**\n     * validateDriverHost validates the host data before saving, this method\n     * can throw a ValidationException for invalid fields. For example:\n     *\n     *     throw new \\ValidationException(['max_weight' => 'Max weight cannot be less than Min weight!']);\n     *\n     * @param \\Model $host\n     */\n    public function validateDriverHost($host)\n    {\n    }\n\n    /**\n     * defineDriverFormFields should be called externally on the form widget.\n     * Do not override this method.\n     */\n    public function defineDriverFormFields(FormElement $form, $context = null)\n    {\n        $this->defineFormFields($form, $context);\n\n        Event::fire('system.driver.extendFields', [$this, $form, $context]);\n    }\n\n    /**\n     * defineFormFields is an method for internal use to define fields used by this driver.\n     * Override this method to define form fields.\n     */\n    public function defineFormFields(FormElement $form, $context = null)\n    {\n        $config = $this->getFieldConfig();\n\n        foreach ((array) $config->fields as $name => $config) {\n            $form->addFormField($name)->useConfig($config);\n        }\n    }\n\n    /**\n     * getHostObject returns the host object with configuration.\n     * @return \\Shop\\Models\\CurrencyRate\n     */\n    public function getHostObject()\n    {\n        return $this->model;\n    }\n\n    /**\n     * getFieldConfig returns the field configuration used by this model.\n     */\n    public function getFieldConfig()\n    {\n        if ($this->fieldConfig !== null) {\n            return $this->fieldConfig;\n        }\n\n        return $this->fieldConfig = $this->makeConfig($this->driverFields);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/ErrorHandler.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse View;\nuse Lang;\nuse Config;\nuse System;\nuse October\\Rain\\Exception\\ErrorHandler as ErrorHandlerBase;\nuse October\\Rain\\Exception\\ApplicationException;\nuse October\\Rain\\Exception\\ForbiddenException;\nuse October\\Rain\\Exception\\SystemException;\nuse Symfony\\Component\\HttpKernel\\Exception\\HttpException;\nuse Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException;\nuse Illuminate\\Http\\Exceptions\\HttpResponseException;\nuse Illuminate\\Validation\\ValidationException;\nuse Illuminate\\Contracts\\Debug\\ExceptionHandler;\nuse Exception;\n\n/**\n * ErrorHandler handles application exception events\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ErrorHandler extends ErrorHandlerBase\n{\n    /**\n     * beforeReport allows hooking the application exception handler\n     */\n    public function beforeReport($exception)\n    {\n        $handler = App::make(ExceptionHandler::class);\n\n        $handler->map(\\Twig\\Error\\RuntimeError::class, function($e) {\n            return $this->handleTwigRuntimeError($e);\n        });\n    }\n\n    /**\n     * handleTwigRuntimeError maps errors that occur within Twig, usually masking Http exceptions\n     */\n    protected function handleTwigRuntimeError($exception)\n    {\n        if (!$previousException = $exception->getPrevious()) {\n            return $exception;\n        }\n\n        // The Twig runtime error is not very useful sometimes, so\n        // uncomment this for an alternative debugging option\n        // if (!$previousException instanceof \\Cms\\Classes\\CmsException) {\n        //     $exception = $previousException;\n        // }\n\n        // Convert HTTP exceptions\n        if (\n            $previousException instanceof SystemException ||\n            $previousException instanceof HttpException ||\n            $previousException instanceof HttpResponseException\n        ) {\n            $exception = $previousException;\n        }\n\n        // Convert Not Found exceptions\n        if ($this->isNotFoundException($previousException)) {\n            $exception = $previousException;\n        }\n\n        return $exception;\n    }\n\n    /**\n     * handleCustomError\n     */\n    public function handleCustomError($exception)\n    {\n        if ($exception instanceof ForbiddenException) {\n            return $this->handleCustomAccessDenied();\n        }\n\n        if ($this->isNotFoundException($exception)) {\n            return $this->handleCustomNotFound();\n        }\n\n        if (!System::checkDebugMode()) {\n            return $this->handleCustomGeneralError();\n        }\n    }\n\n    /**\n     * handleCustomGeneralError looks up an error page using the CMS route \"/error\". If the route\n     * does not exist, this function will use the error view found in the CMS module.\n     * @return mixed\n     */\n    protected function handleCustomGeneralError()\n    {\n        if (System::hasModule('Cms')) {\n            $result = \\Cms::pageError();\n        }\n        else {\n            $result = View::make('system::error');\n        }\n\n        // Extract content from response object\n        if ($result instanceof \\Symfony\\Component\\HttpFoundation\\Response) {\n            $result = $result->getContent();\n        }\n\n        return $result;\n    }\n\n    /**\n     * handleCustomAccessDenied checks if running the backend and shows the backend\n     * access denied page.\n     * @return mixed\n     */\n    protected function handleCustomAccessDenied()\n    {\n        if (App::runningInBackend()) {\n            return View::make('backend::access_denied');\n        }\n\n        return View::make('system::error');\n    }\n\n    /**\n     * handleCustomNotFound checks if using a custom 404 page, if so return the contents.\n     * Return NULL if a custom 404 is not set up.\n     * @return mixed\n     */\n    protected function handleCustomNotFound()\n    {\n        if (System::hasModule('Cms')) {\n            $result = \\Cms::pageNotFound();\n        }\n        elseif (App::runningInBackend()) {\n            $result = View::make('backend::404');\n        }\n        else {\n            $result = View::make('system::404');\n        }\n\n        // Extract content from response object\n        if ($result instanceof \\Symfony\\Component\\HttpFoundation\\Response) {\n            $result = $result->getContent();\n        }\n\n        return $result;\n    }\n\n    /**\n     * handleDetailedError displays the detailed system exception page.\n     * @return View\n     */\n    public function handleDetailedError($exception)\n    {\n        // Ensure System view path is registered\n        View::addNamespace('system', base_path('modules/system/views'));\n\n        return View::make('system::exception', ['exception' => $exception]);\n    }\n\n    /**\n     * getDetailedMessage returns a more descriptive error message based on the context.\n     * @param Exception $exception\n     * @return string\n     */\n    public static function getDetailedMessage($exception)\n    {\n        // Access denied error\n        if ($exception instanceof ForbiddenException) {\n            return $exception->getMessage() ?: __(\"Access Denied\");\n        }\n\n        // Not found error\n        if ($exception instanceof NotFoundHttpException) {\n            return $exception->getMessage() ?: __(\"Not Found\");\n        }\n\n        // ApplicationException never displays a detailed error\n        if ($exception instanceof ApplicationException) {\n            return $exception->getMessage() ?: __(\"An Error Occurred\");\n        }\n\n        // ValidationException should be shown to user\n        if ($exception instanceof ValidationException) {\n            return $exception->getMessage();\n        }\n\n        // Safe message interface\n        if (method_exists($exception, 'getSafeMessage')) {\n            return $exception->{'getSafeMessage'}();\n        }\n\n        // Debug mode is on\n        if (System::checkDebugMode()) {\n            return parent::getDetailedMessage($exception);\n        }\n\n        // Legacy exception logic\n        if (Config::get('cms.exception_policy_v1', false)) {\n            if (\n                $exception instanceof \\Illuminate\\Database\\QueryException ||\n                $exception instanceof \\ErrorException\n            ) {\n                return Lang::get('system::lang.page.custom_error.help');\n            }\n\n            return $exception->getMessage();\n        }\n\n        return Lang::get('system::lang.page.custom_error.help');\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/MailManager.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse Arr;\nuse System;\nuse Markdown;\nuse System\\Models\\MailPartial;\nuse System\\Models\\MailTemplate;\nuse System\\Models\\MailBrandSetting;\nuse System\\Helpers\\View as ViewHelper;\nuse TijsVerkoyen\\CssToInlineStyles\\CssToInlineStyles;\n\n/**\n * MailManager manages Mail sending functions\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailManager\n{\n    /**\n     * @var array A cache of customized mail templates.\n     */\n    protected $templateCache = [];\n\n    /**\n     * @var array List of registered templates in the system\n     */\n    protected $registeredTemplates;\n\n    /**\n     * @var array List of registered partials in the system\n     */\n    protected $registeredPartials;\n\n    /**\n     * @var array List of registered layouts in the system\n     */\n    protected $registeredLayouts;\n\n    /**\n     * @var bool Internal marker for rendering mode\n     */\n    protected $isHtmlRenderMode = false;\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.mailer');\n    }\n\n    /**\n     * registerCallback registers a callback function that defines mail templates.\n     * The callback function should register templates by calling the manager's\n     * registerMailTemplates() function. Thi instance is passed to the\n     * callback function as an argument. Usage:\n     *\n     *     MailManager::registerCallback(function ($manager) {\n     *         $manager->registerMailTemplates([...]);\n     *     });\n     *\n     * @deprecated this will be removed in a later version\n     * @param callable $callback A callable function.\n     */\n    public static function registerCallback(callable $callback)\n    {\n        App::extendInstance('system.mailer', $callback);\n    }\n\n    /**\n     * addContentFromEvent handles adding content from the `mailer.beforeAddContent` event\n     */\n    public function addContentFromEvent($message, $view = null, $plain = null, $raw = null, $data = [])\n    {\n        // Dual views have been supplied, this is Laravel implementation\n        if ($view !== null && $plain !== null) {\n            return false;\n        }\n\n        // When \"plain-text only\" email is sent, $view is null, this sets the flag appropriately\n        $plainOnly = $view === null;\n\n        if ($raw === null) {\n            return $this->addContentToMailer($message, $view ?: $plain, $data, $plainOnly);\n        }\n        else {\n            return $this->addRawContentToMailer($message, $raw, $data, $plainOnly);\n        }\n    }\n\n    /**\n     * addRawContentToMailer is the same as `addContentToMailer` except with raw content\n     *\n     * @return bool\n     */\n    public function addRawContentToMailer($message, $content, $data)\n    {\n        $template = new MailTemplate;\n\n        $template->fillFromContent($content);\n\n        $this->addContentToMailerInternal($message, $template, $data);\n\n        return true;\n    }\n\n    /**\n     * addContentToMailer function hijacks the `addContent` method of the\n     * `October\\Rain\\Mail\\Mailer` class, using the `mailer.beforeAddContent` event.\n     *\n     * @param \\Illuminate\\Mail\\Message $message\n     * @param string $code\n     * @param array $data\n     * @param bool $plainOnly Add only plain text content to the message\n     * @return bool\n     */\n    public function addContentToMailer($message, $code, $data, $plainOnly = false)\n    {\n        if (!is_string($code)) {\n            return false;\n        }\n\n        if (isset($this->templateCache[$code])) {\n            $template = $this->templateCache[$code];\n        }\n        else {\n            $this->templateCache[$code] = $template = MailTemplate::findOrMakeTemplate($code);\n        }\n\n        if (!$template) {\n            return false;\n        }\n\n        $this->addContentToMailerInternal($message, $template, $data, $plainOnly);\n\n        return true;\n    }\n\n    /**\n     * addContentToMailerInternal is an internal method used to share logic\n     * between `addRawContentToMailer` and `addContentToMailer`\n     *\n     * @param \\Illuminate\\Mail\\Message $message\n     * @param MailTemplate $template\n     * @param array $data\n     * @param bool $plainOnly Add only plain text content to the message\n     * @return void\n     */\n    protected function addContentToMailerInternal($message, $template, $data, $plainOnly = false)\n    {\n        // Inject global view variables\n        $globalVars = ViewHelper::getGlobalVars();\n        if (!empty($globalVars)) {\n            $data = (array) $data + $globalVars;\n        }\n\n        // Subject\n        $sMessage = $message->getSymfonyMessage();\n\n        if (empty($sMessage->getSubject())) {\n            $message->subject($this->parseTwig($template->subject, $data));\n        }\n\n        $data += [\n            'subject' => $sMessage->getSubject()\n        ];\n\n        // HTML contents\n        if (!$plainOnly) {\n            $html = $this->renderTemplate($template, $data);\n\n            $message->html($html);\n        }\n\n        // Text contents\n        $text = $this->renderTextTemplate($template, $data);\n\n        $message->text($text);\n    }\n\n    //\n    // Rendering\n    //\n\n    /**\n     * render the Markdown template into HTML\n     * @param  string  $content\n     * @param  array  $data\n     * @return string\n     */\n    public function render($content, $data = [])\n    {\n        if (!$content) {\n            return '';\n        }\n\n        $html = $this->parseTwig($content, $data);\n\n        $html = Markdown::parseIndent($html);\n\n        return $html;\n    }\n\n    /**\n     * renderTemplate\n     */\n    public function renderTemplate($template, $data = [])\n    {\n        $this->isHtmlRenderMode = true;\n\n        $html = $this->render($template->content_html, $data);\n\n        $disableAutoInlineCss = false;\n        $brandCss = MailBrandSetting::renderCss($template, $data);\n        $css = '';\n\n        // Parse template layout\n        if ($template->layout && $template->layout->content_html) {\n            // Disable inline CSS\n            if (array_get($template->layout->options, 'disable_auto_inline_css', false)) {\n                $disableAutoInlineCss = true;\n            }\n\n            // Disable branding CSS\n            if (array_get($template->layout->options, 'disable_brand_css', false)) {\n                $brandCss = '';\n            }\n\n            $css = $template->layout->content_css;\n            $html = $this->parseTwig($template->layout->content_html, [\n                'content' => $html,\n                'css' => $css,\n                'brandCss' => $brandCss\n            ] + (array) $data);\n        }\n\n        if (!$disableAutoInlineCss) {\n            $html = (new CssToInlineStyles)->convert($html, $brandCss . PHP_EOL . $css);\n        }\n\n        return $html;\n    }\n\n    /**\n     * renderText renders the Markdown template into text.\n     * @param $content\n     * @param array $data\n     * @return string\n     */\n    public function renderText($content, $data = [])\n    {\n        if (!$content) {\n            return '';\n        }\n\n        $text = $this->parseTwig($content, $data);\n\n        $text = html_entity_decode(preg_replace(\"/[\\r\\n]{2,}/\", \"\\n\\n\", $text), ENT_QUOTES, 'UTF-8');\n\n        return $text;\n    }\n\n    /**\n     * renderTextTemplate\n     */\n    public function renderTextTemplate($template, $data = [])\n    {\n        $this->isHtmlRenderMode = false;\n\n        $templateText = $template->content_text ?: $template->content_html;\n\n        $text = $this->renderText($templateText, $data);\n\n        if ($template->layout && $template->layout->content_text) {\n            $text = $this->parseTwig($template->layout->content_text, [\n                'content' => $text\n            ] + (array) $data);\n        }\n\n        return $text;\n    }\n\n    /**\n     * renderPartial\n     */\n    public function renderPartial($code, array $params = [])\n    {\n        if (!$partial = MailPartial::findOrMakePartial($code)) {\n            return '<!-- Missing partial: '.$code.' -->';\n        }\n\n        if ($this->isHtmlRenderMode) {\n            $content = $partial->content_html;\n        }\n        else {\n            $content = $partial->content_text ?: $partial->content_html;\n        }\n\n        if (!strlen(trim($content))) {\n            return '';\n        }\n\n        return $this->parseTwig($content, $params);\n    }\n\n    /**\n     * parseTwig parses Twig using the mailer environment\n     */\n    protected function parseTwig($contents, $vars = [])\n    {\n        $twig = App::make('twig.environment.mailer');\n        $template = $twig->createTemplate($contents);\n        return $template->render($vars);\n    }\n\n    //\n    // Registration\n    //\n\n    /**\n     * loadRegisteredTemplates loads registered mail templates from modules and plugins\n     * @return void\n     */\n    public function loadRegisteredTemplates()\n    {\n        // Registration logic\n        $registrar = function($provider) {\n            if (is_array($templates = $provider->registerMailTemplates())) {\n                if (isset($templates['templates'])) {\n                    $this->registerMailTemplates($templates['templates']);\n                    if (is_array($partials = $templates['partials'] ?? null)) {\n                        $this->registerMailPartials($partials);\n                    }\n                    if (is_array($layouts = $templates['layouts'] ?? null)) {\n                        $this->registerMailLayouts($layouts);\n                    }\n                }\n                else {\n                    $this->registerMailTemplates($templates);\n                }\n            }\n\n            if (is_array($layouts = $provider->registerMailLayouts())) {\n                $this->registerMailLayouts($layouts);\n            }\n\n            if (is_array($partials = $provider->registerMailPartials())) {\n                $this->registerMailPartials($partials);\n            }\n        };\n\n        // Load module items\n        foreach (System::listModules() as $module) {\n            if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                $registrar($provider);\n            }\n        }\n\n        // Load plugin widgets\n        foreach (PluginManager::instance()->getPlugins() as $pluginObj) {\n            $registrar($pluginObj);\n        }\n\n        // Load app widgets\n        if ($app = App::getProvider(\\App\\Provider::class)) {\n            $registrar($app);\n        }\n    }\n\n    /**\n     * listRegisteredTemplates returns a list of the registered templates.\n     * @return array\n     */\n    public function listRegisteredTemplates()\n    {\n        if ($this->registeredTemplates === null) {\n            $this->loadRegisteredTemplates();\n        }\n\n        return $this->registeredTemplates;\n    }\n\n    /**\n     * getViewPathForTemplate returns a view path for a registered template\n     */\n    public function getViewPathForTemplate($code): ?string\n    {\n        if ($this->registeredTemplates === null) {\n            $this->loadRegisteredTemplates();\n        }\n\n        return $this->registeredTemplates[$code] ?? null;\n    }\n\n    /**\n     * listRegisteredPartials returns a list of the registered partials.\n     * @return array\n     */\n    public function listRegisteredPartials()\n    {\n        if ($this->registeredPartials === null) {\n            $this->loadRegisteredTemplates();\n        }\n\n        return $this->registeredPartials;\n    }\n\n    /**\n     * listRegisteredLayouts returns a list of the registered layouts.\n     * @return array\n     */\n    public function listRegisteredLayouts()\n    {\n        if ($this->registeredLayouts === null) {\n            $this->loadRegisteredTemplates();\n        }\n\n        return $this->registeredLayouts;\n    }\n\n    /**\n     * registerMailTemplates registers mail views and manageable templates.\n     */\n    public function registerMailTemplates(array $definitions)\n    {\n        if (!$this->registeredTemplates) {\n            $this->registeredTemplates = [];\n        }\n\n        if (Arr::isList($definitions)) {\n            $definitions = array_combine($definitions, $definitions);\n        }\n\n        $this->registeredTemplates = $definitions + $this->registeredTemplates;\n    }\n\n    /**\n     * registerMailPartials registers mail views and manageable layouts.\n     */\n    public function registerMailPartials(array $definitions)\n    {\n        if (!$this->registeredPartials) {\n            $this->registeredPartials = [];\n        }\n\n        $this->registeredPartials = $definitions + $this->registeredPartials;\n    }\n\n    /**\n     * registerMailLayouts registers mail views and manageable layouts.\n     */\n    public function registerMailLayouts(array $definitions)\n    {\n        if (!$this->registeredLayouts) {\n            $this->registeredLayouts = [];\n        }\n\n        $this->registeredLayouts = $definitions + $this->registeredLayouts;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/ManifestCache.php",
    "content": "<?php namespace System\\Classes;\n\nuse File;\nuse System;\nuse Throwable;\nuse Exception;\n\n/**\n * ManifestCache stores data in a local disk cache\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ManifestCache\n{\n    /**\n     * @var bool useManifest or not\n     */\n    protected $useManifest;\n\n    /**\n     * @var string|null manifestPath\n     */\n    protected $manifestPath;\n\n    /**\n     * @var array manifest of loaded items\n     */\n    protected $manifest = [];\n\n    /**\n     * @var bool manifestLoaded if manifest is loaded\n     */\n    protected $manifestLoaded = false;\n\n    /**\n     * @var bool manifestDirty if manifest needs to be written\n     */\n    protected $manifestDirty = false;\n\n    /**\n     * __construct creates a new package manifest instance\n     */\n    public function __construct()\n    {\n        $this->useManifest = !System::checkDebugMode();\n        $this->manifestPath = cache_path('cms/manifest.php');\n    }\n\n    /**\n     * has determines if the given manifest value exists.\n     *\n     * @param  string  $key\n     * @return bool\n     */\n    public function has($key)\n    {\n        $this->ensureManifestIsLoaded();\n\n        return isset($this->manifest[$key]);\n    }\n\n    /**\n     * get the specified manifest value.\n     *\n     * @param  string  $key\n     * @param  mixed   $default\n     * @return mixed\n     */\n    public function get($key, $default = null)\n    {\n        $this->ensureManifestIsLoaded();\n\n        return $this->manifest[$key] ?? $default;\n    }\n\n    /**\n     * set a given manifest value.\n     *\n     * @param  array|string  $key\n     * @param  mixed   $value\n     * @return void\n     */\n    public function put($key, $value = null)\n    {\n        $this->manifestDirty = true;\n\n        $this->manifest[$key] = $value;\n    }\n\n    /**\n     * forget a manifest value\n     *\n     * @param  array|string  $key\n     * @return void\n     */\n    public function forget($key)\n    {\n        $this->manifestDirty = true;\n\n        unset($this->manifest[$key]);\n    }\n\n    /**\n     * build the manifest and write it to disk\n     */\n    public function build()\n    {\n        if (!$this->manifestDirty) {\n            return;\n        }\n\n        $this->write($this->manifest);\n    }\n\n    /**\n     * ensureManifestIsLoaded has been loaded into memory\n     */\n    protected function ensureManifestIsLoaded()\n    {\n        if ($this->manifestLoaded) {\n            return;\n        }\n\n        $manifest = [];\n\n        if ($this->useManifest && file_exists($this->manifestPath)) {\n            try {\n                $manifest = File::getRequire($this->manifestPath);\n\n                if (!is_array($manifest)) {\n                    $manifest = [];\n                }\n            }\n            catch (Throwable $ex) {\n            }\n        }\n\n        $this->manifest += $manifest;\n\n        $this->manifestLoaded = true;\n    }\n\n    /**\n     * write the given manifest array to disk\n     */\n    protected function write(array $manifest)\n    {\n        if (!$this->useManifest || $this->manifestPath === null) {\n            return;\n        }\n\n        if (!is_writable(dirname($this->manifestPath))) {\n            throw new Exception(\"The {$this->manifestPath} directory must be present and writable.\");\n        }\n\n        File::put(\n            $this->manifestPath,\n            '<?php return '.var_export($manifest, true).';'\n        );\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/MarkupExtensionItem.php",
    "content": "<?php namespace System\\Classes;\n\nuse Str;\nuse ApplicationException;\n\n/**\n * MarkupExtensionItem class\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MarkupExtensionItem\n{\n    /**\n     * {{ 'a'|filter }}\n     */\n    const TYPE_FILTER = 'filter';\n\n    /**\n     * {{ function() }}\n     */\n    const TYPE_FUNCTION = 'function';\n\n    /**\n     * {% token %}\n     */\n    const TYPE_TOKEN_PARSER = 'token';\n\n    /**\n     * @var string name\n     */\n    public $name;\n\n    /**\n     * @var string type\n     */\n    public $type;\n\n    /**\n     * @var callable callback\n     */\n    public $callback;\n\n    /**\n     * @var array options\n     */\n    public $options = [];\n\n    /**\n     * @var bool escapeOutput\n     */\n    public $escapeOutput = true;\n\n    /**\n     * useConfig\n     */\n    public function useConfig(array $data): MarkupExtensionItem\n    {\n        [$callback, $options] = $this->parseDefinition($data['definition'] ?? null);\n\n        $this->name = $data['name'] ?? $this->name;\n        $this->type = $data['type'] ?? $this->type;\n        $this->callback = $data['callback'] ?? $callback;\n        $this->options = $data['options'] ?? $this->options;\n        $this->escapeOutput = $data['escapeOutput'] ?? $this->escapeOutput;\n\n        if (is_array($options)) {\n            $this->options = $options;\n        }\n        elseif (is_bool($options)) {\n            $this->escapeOutput = $options;\n        }\n\n        return $this;\n    }\n\n    /**\n     * parseDefinition will check if a callable definition contains output escaping\n     */\n    protected function parseDefinition($definition): array\n    {\n        $options = [];\n        $callback = $definition;\n\n        // If the last item in the array is a boolean, it defines output escaping\n        // otherwise if it is an array, it defines the Twig extension options\n        if ($this->isOptionOrEscapedCheck($callback)) {\n            $options = array_pop($callback);\n        }\n\n        // Convert an array with 1 item to a scalar, to make it callable\n        // for example, ['count'] is not callable\n        if (is_array($callback) && count($callback) === 1) {\n            $callback = array_pop($callback);\n        }\n\n        return [$callback, $options];\n    }\n\n    /**\n     * isWildCallable will test if the callback uses a wildcard,\n     * for example, str_* can route to Str::*\n     */\n    public function isWildCallable(): bool\n    {\n        $callable = $this->callback;\n        $isWild = false;\n\n        if (is_string($callable) && strpos($callable, '*') !== false) {\n            $isWild = true;\n        }\n\n        if (is_array($callable)) {\n            if (is_string($callable[0]) && strpos($callable[0], '*') !== false) {\n                $isWild = true;\n            }\n\n            if (!empty($callable[1]) && strpos($callable[1], '*') !== false) {\n                $isWild = true;\n            }\n        }\n\n        return $isWild;\n    }\n\n    /**\n     * getWildCallback replaces wildcard with a real callable function\n     */\n    public function getWildCallback(string $name)\n    {\n        $callable = $this->callback;\n        $wildCallback = null;\n\n        if (is_string($callable) && strpos($callable, '*') !== false) {\n            $wildCallback = str_replace('*', $name, $callable);\n        }\n\n        if (is_array($callable)) {\n            if (is_string($callable[0]) && strpos($callable[0], '*') !== false) {\n                $wildCallback = $callable;\n                $wildCallback[0] = str_replace('*', $name, $callable[0]);\n            }\n\n            if (!empty($callable[1]) && strpos($callable[1], '*') !== false) {\n                $wildCallback = $wildCallback ?: $callable;\n                $wildCallback[1] = str_replace('*', $name, $callable[1]);\n            }\n        }\n\n        return $wildCallback;\n    }\n\n    /**\n     * getTwigCallback returns a callback function suitable for Twig\n     */\n    public function getTwigCallback()\n    {\n        // Handle a wildcard function\n        if (strpos($this->name, '*') !== false && $this->isWildCallable()) {\n            return function ($name) {\n                $arguments = array_slice(func_get_args(), 1);\n                $method = $this->getWildCallback(Str::camel($name));\n                return $method(...$arguments);\n            };\n        }\n\n        // Cannot call item method\n        $callable = $this->callback;\n        if (!is_callable($callable)) {\n            throw new ApplicationException(\"The markup filter/function for '{$this->name}' is not callable.\");\n        }\n\n        // Wrap in a closure to prevent Twig from reflecting facades\n        // when applying its named closure support\n        return function(...$args) use ($callable) {\n            return $callable(...$args);\n        };\n    }\n\n    /**\n     * getTwigOptions returns options passed to the Twig definition\n     */\n    public function getTwigOptions(): array\n    {\n        return ($this->escapeOutput ? [] : ['is_safe' => ['html']]) + $this->options;\n    }\n\n    /**\n     * isOptionOrEscapedCheck determines if the last value of the definition\n     */\n    protected function isOptionOrEscapedCheck($callback): bool\n    {\n        if (!is_array($callback) || count($callback) < 2) {\n            return false;\n        }\n\n        // Grab the last value found in the array\n        $value = $callback[array_key_last($callback)];\n\n        return is_bool($value) || is_array($value);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/MarkupManager.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse System;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Twig\\TwigFilter as TwigSimpleFilter;\nuse Twig\\TwigFunction as TwigSimpleFunction;\n\n/**\n * MarkupManager class manages Twig functions, token parsers and filters.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MarkupManager\n{\n    const EXTENSION_FILTER = 'filters';\n    const EXTENSION_FUNCTION = 'functions';\n    const EXTENSION_TOKEN_PARSER = 'tokens';\n\n    /**\n     * @var array[MarkupExtensionItem[]] items are globally registered extension items\n     */\n    protected $items;\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.markup');\n    }\n\n    /**\n     * registerCallback function that defines simple Twig extensions.\n     * The callback function should register menu items by calling the manager's\n     * `registerFunctions`, `registerFilters`, `registerTokenParsers` function.\n     * The manager instance is passed to the callback function as an argument. Usage:\n     *\n     *     MarkupManager::registerCallback(function ($manager) {\n     *         $manager->registerFilters([...]);\n     *         $manager->registerFunctions([...]);\n     *         $manager->registerTokenParsers([...]);\n     *     });\n     *\n     * @deprecated this will be removed in a later version\n     * @param callable $callback A callable function.\n     */\n    public function registerCallback(callable $callback)\n    {\n        App::extendInstance('system.markup', $callback);\n    }\n\n    /**\n     * loadExtensions parses all registrations and adds them to this class\n     */\n    protected function loadExtensions()\n    {\n        // Load module items\n        foreach (System::listModules() as $module) {\n            if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                $this->loadExtensionsFromArray($provider->registerMarkupTags());\n            }\n        }\n\n        // Load plugin items\n        foreach (PluginManager::instance()->getPlugins() as $plugin) {\n            $this->loadExtensionsFromArray($plugin->registerMarkupTags());\n        }\n\n        // Load app items\n        if ($app = App::getProvider(\\App\\Provider::class)) {\n            $this->loadExtensionsFromArray($app->registerMarkupTags());\n        }\n    }\n\n    /**\n     * loadExtensionsFromArray helper\n     */\n    protected function loadExtensionsFromArray($items)\n    {\n        if (!is_array($items)) {\n            return;\n        }\n\n        foreach ($items as $type => $definitions) {\n            if (!is_array($definitions)) {\n                return;\n            }\n\n            $this->registerExtensions($type, $definitions);\n        }\n    }\n\n    /**\n     * registerExtensions registers the CMS Twig extension items.\n     * The argument is an array of the extension definitions. The array keys represent the\n     * function/filter name, specific for the plugin/module. Each element in the\n     * array should be an associative array.\n     * @param string $type The extension type: filters, functions, tokens\n     * @param array $definitions An array of the extension definitions.\n     */\n    public function registerExtensions($type, array $definitions)\n    {\n        if ($this->items === null) {\n            $this->items = [];\n        }\n\n        if (!array_key_exists($type, $this->items)) {\n            $this->items[$type] = [];\n        }\n\n        foreach ($definitions as $name => $definition) {\n            $item = $this->defineMarkupExtensionItem([\n                'name' => $name,\n                'type' => $type,\n                'definition' => $definition,\n            ]);\n\n            switch ($type) {\n                case self::EXTENSION_TOKEN_PARSER:\n                    $this->items[$type][] = $item;\n                    break;\n                case self::EXTENSION_FILTER:\n                case self::EXTENSION_FUNCTION:\n                    $this->items[$type][$name] = $item;\n                    break;\n            }\n        }\n    }\n\n    /**\n     * defineMarkupExtensionItem\n     */\n    protected function defineMarkupExtensionItem(array $config): MarkupExtensionItem\n    {\n        return (new MarkupExtensionItem)->useConfig($config);\n    }\n\n    /**\n     * Registers a CMS Twig Filter\n     * @param array $definitions An array of the extension definitions.\n     */\n    public function registerFilters(array $definitions)\n    {\n        $this->registerExtensions(self::EXTENSION_FILTER, $definitions);\n    }\n\n    /**\n     * Registers a CMS Twig Function\n     * @param array $definitions An array of the extension definitions.\n     */\n    public function registerFunctions(array $definitions)\n    {\n        $this->registerExtensions(self::EXTENSION_FUNCTION, $definitions);\n    }\n\n    /**\n     * Registers a CMS Twig Token Parser\n     * @param array $definitions An array of the extension definitions.\n     */\n    public function registerTokenParsers(array $definitions)\n    {\n        $this->registerExtensions(self::EXTENSION_TOKEN_PARSER, $definitions);\n    }\n\n    /**\n     * listExtensions returns a list of the registered Twig extensions of a type.\n     * @param $type string The Twig extension type\n     * @return array\n     */\n    public function listExtensions($type)\n    {\n        $results = [];\n\n        if ($this->items === null) {\n            $this->loadExtensions();\n        }\n\n        if (isset($this->items[$type]) && is_array($this->items[$type])) {\n            $results = $this->items[$type];\n        }\n\n        return $results;\n    }\n\n    /**\n     * listFilters returns a list of the registered Twig filters.\n     * @return array\n     */\n    public function listFilters()\n    {\n        return $this->listExtensions(self::EXTENSION_FILTER);\n    }\n\n    /**\n     * listFunctions returns a list of the registered Twig functions.\n     * @return array\n     */\n    public function listFunctions()\n    {\n        return $this->listExtensions(self::EXTENSION_FUNCTION);\n    }\n\n    /**\n     * listTokenParsers returns a list of the registered Twig token parsers.\n     * @return array\n     */\n    public function listTokenParsers()\n    {\n        return $this->listExtensions(self::EXTENSION_TOKEN_PARSER);\n    }\n\n    /**\n     * makeTwigFunctions makes a set of Twig functions for use in a twig extension.\n     * @param  array $functions Current collection\n     * @return array\n     */\n    public function makeTwigFunctions($functions = [])\n    {\n        if (!is_array($functions)) {\n            $functions = [];\n        }\n\n        foreach ($this->listFunctions() as $item) {\n            $functions[] = new TwigSimpleFunction(\n                $item->name,\n                $item->getTwigCallback(),\n                $item->getTwigOptions()\n            );\n        }\n\n        return $functions;\n    }\n\n    /**\n     * makeTwigFilters makes a set of Twig filters for use in a twig extension.\n     * @param  array $filters Current collection\n     * @return array\n     */\n    public function makeTwigFilters($filters = [])\n    {\n        if (!is_array($filters)) {\n            $filters = [];\n        }\n\n        foreach ($this->listFilters() as $item) {\n            $filters[] = new TwigSimpleFilter(\n                $item->name,\n                $item->getTwigCallback(),\n                $item->getTwigOptions()\n            );\n        }\n\n        return $filters;\n    }\n\n    /**\n     * makeTwigTokenParsers makes a set of Twig token parsers for use in a twig extension.\n     * @param  array $parsers Current collection\n     * @return array\n     */\n    public function makeTwigTokenParsers($parsers = [])\n    {\n        if (!is_array($parsers)) {\n            $parsers = [];\n        }\n\n        foreach ($this->listTokenParsers() as $item) {\n            if (!$item->callback instanceof TwigTokenParser) {\n                continue;\n            }\n\n            $parsers[] = $item->callback;\n        }\n\n        return $parsers;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/ModelBehavior.php",
    "content": "<?php namespace System\\Classes;\n\nuse Lang;\nuse ApplicationException;\nuse October\\Rain\\Database\\ModelBehavior as ModelBehaviorBase;\n\n/**\n * ModelBehavior base class.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ModelBehavior extends ModelBehaviorBase\n{\n    /**\n     * @var array requiredProperties that must exist in the model using this behavior.\n     */\n    protected $requiredProperties = [];\n\n    /**\n     * __construct\n     * @param \\October\\Rain\\Database\\Model $model The extended model.\n     * @throws ApplicationException\n     */\n    public function __construct($model)\n    {\n        parent::__construct($model);\n\n        // Validate model properties\n        foreach ($this->requiredProperties as $property) {\n            if (!isset($model->{$property})) {\n                throw new ApplicationException(Lang::get('system::lang.behavior.missing_property', [\n                    'class' => get_class($model),\n                    'property' => $property,\n                    'behavior' => get_called_class()\n                ]));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/PagerElement.php",
    "content": "<?php namespace System\\Classes;\n\nuse View;\nuse Illuminate\\Pagination\\UrlWindow;\nuse Illuminate\\Contracts\\Support\\Arrayable;\nuse Illuminate\\Contracts\\Support\\Jsonable;\nuse JsonSerializable;\nuse ArrayAccess;\n\n/**\n * PagerElement is an internal class returned by the pager() Twig function. It also acts as\n * an abstraction from Laravel's pagination features.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PagerElement implements Arrayable, ArrayAccess, Jsonable, JsonSerializable\n{\n    /**\n     * @var mixed $paginator\n     */\n    protected $paginator;\n\n    /**\n     * @var array config values for this instance\n     */\n    public $config = [];\n\n    /**\n     * @var array view variables for this instance\n     */\n    public $vars = [];\n\n    /**\n     * __construct\n     */\n    public function __construct($paginator, $config = [])\n    {\n        $this->paginator = $paginator;\n        $this->config = $this->vars = $config;\n        $this->preparePager();\n    }\n\n    /**\n     * setArrayMode cleans up the variables for output as an array\n     */\n    public function setArrayMode()\n    {\n        $paginated = $this->paginator->toArray();\n\n        $this->vars = [\n            'links' => [\n                'first' => $paginated['first_page_url'] ?? null,\n                'last' => $paginated['last_page_url'] ?? null,\n                'prev' => $paginated['prev_page_url'] ?? null,\n                'next' => $paginated['next_page_url'] ?? null,\n            ],\n            'meta' => array_except($paginated, [\n                'data',\n                'first_page_url',\n                'last_page_url',\n                'prev_page_url',\n                'next_page_url',\n            ])\n        ];\n    }\n\n    /**\n     * preparePager\n     */\n    public function preparePager()\n    {\n        if (!$this->getConfig('template') || $this->getConfig('template') === 'array') {\n            $this->setArrayMode();\n        }\n\n        if ($this->getConfig('withQuery') === true) {\n            $this->paginator->withQueryString();\n        }\n\n        if ($appends = $this->getConfig('appends')) {\n            $this->paginator->appends($appends);\n        }\n\n        if ($fragment = $this->getConfig('fragment')) {\n            $this->paginator->fragment($fragment);\n        }\n    }\n\n    /**\n     * prepareVars for render\n     */\n    public function prepareVars()\n    {\n        $this->vars['paginator'] = $this->paginator;\n        $this->vars['elements'] = $this->getPaginatorElements();\n    }\n\n    /**\n     * render as a string\n     */\n    public function render()\n    {\n        $this->prepareVars();\n\n        if (\n            ($partial = $this->getConfig('partial')) &&\n            ($controller = $this->getCmsController())\n        ) {\n            return $controller->renderPartial($partial, $this->vars, true);\n        }\n\n        return View::make($this->getPaginatorView(), $this->vars);\n    }\n\n    /**\n     * getPaginatorView\n     */\n    protected function getPaginatorView()\n    {\n        $viewMap = [\n            'default' => 'system::pagination.default',\n            'simple' => 'system::pagination.simple',\n            'ajax' => 'system::pagination.ajax',\n            'loadmore' => 'system::pagination.loadmore'\n        ];\n\n        $defaultView = $this->paginator instanceof \\Illuminate\\Pagination\\LengthAwarePaginator\n            ? 'default'\n            : 'simple';\n\n        $template = $this->getConfig('template', $defaultView);\n\n        return $viewMap[$template] ?? $template;\n    }\n\n    /**\n     * getPaginatorElements is needed because it is locked out in Laravel\n     * @return array\n     */\n    protected function getPaginatorElements()\n    {\n        if (!$this->paginator instanceof \\Illuminate\\Pagination\\LengthAwarePaginator) {\n            return [];\n        }\n\n        $window = UrlWindow::make($this->paginator);\n\n        return array_filter([\n            $window['first'],\n            is_array($window['slider']) ? '...' : null,\n            $window['slider'],\n            is_array($window['last']) ? '...' : null,\n            $window['last'],\n        ]);\n    }\n\n    /**\n     * getCmsController\n     */\n    protected function getCmsController()\n    {\n        if (\\App::runningInFrontend() && \\System::hasModule('Cms')) {\n            return \\Cms\\Classes\\Controller::getController() ?: new \\Cms\\Classes\\Controller;\n        }\n    }\n\n    /**\n     * getConfig\n     */\n    public function getConfig($name, $default = null)\n    {\n        return $this->config[$name] ?? $default;\n    }\n\n    /**\n     * __toString\n     */\n    public function __toString()\n    {\n        return $this->render();\n    }\n\n    /**\n     * get an attribute from the element instance.\n     * @param  string  $key\n     * @param  mixed  $default\n     * @return mixed\n     */\n    public function get($key, $default = null)\n    {\n        if (array_key_exists($key, $this->vars)) {\n            return $this->vars[$key];\n        }\n\n        return $default;\n    }\n\n    /**\n     * toArray converts the element instance to an array.\n     * @return array\n     */\n    public function toArray()\n    {\n        return $this->vars;\n    }\n\n    /**\n     * jsonSerialize converts the object into something JSON serializable.\n     */\n    public function jsonSerialize(): array\n    {\n        return $this->toArray();\n    }\n\n    /**\n     * toJson converts the element instance to JSON.\n     * @param  int  $options\n     * @return string\n     */\n    public function toJson($options = 0)\n    {\n        return json_encode($this->jsonSerialize(), $options);\n    }\n\n    /**\n     * offsetExists determines if the given offset exists.\n     * @param  string  $offset\n     * @return bool\n     */\n    public function offsetExists($offset): bool\n    {\n        return isset($this->vars[$offset]);\n    }\n\n    /**\n     * offsetGet gets the value for a given offset.\n     * @param  string  $offset\n     * @return mixed\n     */\n    public function offsetGet($offset): mixed\n    {\n        return $this->get($offset);\n    }\n\n    /**\n     * offsetSet is disabled (read-only)\n     * @param  string  $offset\n     * @param  mixed  $value\n     */\n    public function offsetSet($offset, $value): void\n    {\n    }\n\n    /**\n     * offsetUnset is disabled (read-only)\n     * @param  string  $offset\n     * @return void\n     */\n    public function offsetUnset($offset): void\n    {\n    }\n\n    /**\n     * __get dynamically retrieves the value of an attribute.\n     * @param  string  $key\n     * @return mixed\n     */\n    public function __get($key)\n    {\n        return $this->get($key);\n    }\n\n    /**\n     * __set is disabled (read-only)\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return void\n     */\n    public function __set($key, $value)\n    {\n    }\n\n    /**\n     * __isset dynamically checks if an attribute is set.\n     *\n     * @param  string  $key\n     * @return bool\n     */\n    public function __isset($key)\n    {\n        return $this->offsetExists($key);\n    }\n\n    /**\n     * __unset is disabled (read-only)\n     *\n     * @param  string  $key\n     * @return void\n     */\n    public function __unset($key)\n    {\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/PluginBase.php",
    "content": "<?php namespace System\\Classes;\n\nuse Backend;\nuse Illuminate\\Console\\Application as Artisan;\nuse October\\Contracts\\Support\\OctoberPackage;\nuse October\\Rain\\Support\\ServiceProvider as ServiceProviderBase;\nuse ReflectionClass;\nuse SystemException;\nuse Yaml;\n\n/**\n * PluginBase class\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginBase extends ServiceProviderBase implements OctoberPackage\n{\n    /**\n     * @var array require plugin dependencies.\n     */\n    public $require = [];\n\n    /**\n     * @var boolean disabled determines if this plugin should be loaded (false) or not (true).\n     */\n    public $disabled = false;\n\n    /**\n     * @var bool loadedYamlConfiguration\n     */\n    protected $loadedYamlConfiguration = false;\n\n    /**\n     * pluginDetails returns information about this plugin, including plugin name and developer name.\n     *\n     * @return array\n     * @throws SystemException\n     */\n    public function pluginDetails()\n    {\n        $thisClass = get_class($this);\n\n        $configuration = $this->getConfigurationFromYaml(sprintf(\n            'Plugin configuration file plugin.yaml is not '.\n            'found for the plugin class %s. Create the file or override pluginDetails() '.\n            'method in the plugin class.',\n            $thisClass\n        ));\n\n        if (array_key_exists('plugin', $configuration)) {\n            return $configuration['plugin'];\n        }\n\n        throw new SystemException(sprintf(\n            'The plugin configuration file plugin.yaml should contain the \"plugin\" section: %s.',\n            $thisClass\n        ));\n    }\n\n    /**\n     * register method, called when the plugin is first registered.\n     */\n    public function register()\n    {\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerMarkupTags()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerComponents()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerPageSnippets()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerContentFields()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerNavigation()\n    {\n        $configuration = $this->getConfigurationFromYaml();\n\n        if (!array_key_exists('navigation', $configuration)) {\n            return [];\n        }\n\n        $navigation = $configuration['navigation'];\n\n        if (!is_array($navigation)) {\n            return [];\n        }\n\n        array_walk_recursive($navigation, static function (&$item, $key) {\n            if ($key === 'url') {\n                $item = Backend::url($item);\n            }\n        });\n\n        return $navigation;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerPermissions()\n    {\n        $configuration = $this->getConfigurationFromYaml();\n\n        if (!array_key_exists('permissions', $configuration)) {\n            return [];\n        }\n\n        return $configuration['permissions'];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerSettings()\n    {\n        $configuration = $this->getConfigurationFromYaml();\n\n        if (!array_key_exists('settings', $configuration)) {\n            return [];\n        }\n\n        $settings = $configuration['settings'];\n\n        if (!is_array($settings)) {\n            return [];\n        }\n\n        array_walk_recursive($settings, function (&$item, $key) {\n            if ($key === 'url') {\n                $item = Backend::url($item);\n            }\n        });\n\n        return $settings;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerSchedule($schedule)\n    {\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerReportWidgets()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerFormWidgets()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerFilterWidgets()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerListColumnTypes()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerMailLayouts()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerMailTemplates()\n    {\n        return [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function registerMailPartials()\n    {\n        return [];\n    }\n\n    /**\n     * discoverConsoleCommands automatically finds and registers console\n     * commands from the plugin's console directory\n     */\n    public function discoverConsoleCommands(): void\n    {\n        $reflection = new ReflectionClass(get_class($this));\n        $pluginPath = dirname($reflection->getFileName());\n        $consolePath = $pluginPath . '/console';\n\n        if (!is_dir($consolePath)) {\n            return;\n        }\n\n        $pluginClass = get_class($this);\n        $namespace = substr($pluginClass, 0, strrpos($pluginClass, '\\\\')) . '\\\\Console\\\\';\n\n        Artisan::starting(function ($artisan) use ($consolePath, $namespace) {\n            $commands = [];\n\n            foreach (glob($consolePath . '/*.php') as $file) {\n                $className = $namespace . basename($file, '.php');\n\n                if (!class_exists($className)) {\n                    continue;\n                }\n\n                $ref = new ReflectionClass($className);\n\n                if (\n                    $ref->isSubclassOf(\\Illuminate\\Console\\Command::class) &&\n                    !$ref->isAbstract()\n                ) {\n                    $commands[] = $className;\n                }\n            }\n\n            $artisan->resolveCommands($commands);\n        });\n    }\n\n    /**\n     * registerConsoleCommand registers a new console (artisan) command.\n     * @param string $key The command name\n     * @param string $class The command class\n     * @return void\n     */\n    public function registerConsoleCommand($key, $class)\n    {\n        $key = 'command.'.$key;\n\n        $this->app->singleton($key, $class);\n\n        $this->commands($key);\n    }\n\n    /**\n     * registerValidationRule registers a new validation rule.\n     * @param string $key The rule name\n     * @param mixed $rule The validation rule\n     * @return void\n     */\n    public function registerValidationRule($key, $rule)\n    {\n        $this->callAfterResolving('validator', function ($validator) use ($key, $rule) {\n            $validator->extend($key, $rule);\n        });\n    }\n\n    /**\n     * getConfigurationFromYaml reads configuration from YAML file.\n     * @param string|null $exceptionMessage\n     * @return array|bool\n     * @throws SystemException\n     */\n    protected function getConfigurationFromYaml($exceptionMessage = null)\n    {\n        if ($this->loadedYamlConfiguration !== false) {\n            return $this->loadedYamlConfiguration;\n        }\n\n        $reflection = new ReflectionClass(get_class($this));\n        $yamlFilePath = dirname($reflection->getFileName()).'/plugin.yaml';\n\n        if (file_exists($yamlFilePath)) {\n            $this->loadedYamlConfiguration = Yaml::parse(file_get_contents($yamlFilePath));\n\n            if (!is_array($this->loadedYamlConfiguration)) {\n                throw new SystemException(sprintf(\n                    'Invalid format of the plugin configuration file: %s. The file should define an array.',\n                    $yamlFilePath\n                ));\n            }\n        }\n        else {\n            if ($exceptionMessage !== null) {\n                throw new SystemException($exceptionMessage);\n            }\n\n            $this->loadedYamlConfiguration = [];\n        }\n\n        return $this->loadedYamlConfiguration;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/PluginManager.php",
    "content": "<?php namespace System\\Classes;\n\nuse Db;\nuse App;\nuse Str;\nuse File;\nuse Log;\nuse Site;\nuse Config;\nuse Schema;\nuse System;\nuse Manifest;\nuse System\\Models\\PluginSiteGroup;\nuse October\\Rain\\Composer\\ComposerManager;\nuse DirectoryIterator;\nuse UnexpectedValueException;\nuse SystemException;\nuse Throwable;\n\n/**\n * PluginManager\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginManager\n{\n    /**\n     * @var const keys for manifest storage\n     */\n    const MANIFEST_PLUGINS = 'plugins.all';\n    const MANIFEST_PLUGIN_HINTS = 'plugins.hints';\n\n    /**\n     * @var App app instance, since Plugins are an extension of a Service Provider\n     */\n    protected $app;\n\n    /**\n     * @var array plugins container object used for storing plugin information objects.\n     */\n    protected $plugins;\n\n    /**\n     * @var array pathMap of plugins and their directory paths.\n     */\n    protected $pathMap = [];\n\n    /**\n     * @var bool registered check if all plugins have had the register() method called.\n     */\n    protected $registered = false;\n\n    /**\n     * @var bool booted check if all plugins have had the boot() method called.\n     */\n    protected $booted = false;\n\n    /**\n     * @var string metaFile path to the disabled file.\n     */\n    protected $metaFile;\n\n    /**\n     * @var array disabledPlugins collection of disabled plugins for the active context.\n     */\n    protected $disabledPlugins = [];\n\n    /**\n     * @var array disabledCache stores the raw structured cache data for cross-site lookups.\n     */\n    protected $disabledCache = [];\n\n    /**\n     * @var array registrationMethodCache cache of registration method results.\n     */\n    protected $registrationMethodCache = [];\n\n    /**\n     * __construct this class\n     */\n    public function __construct()\n    {\n        $this->app = App::make('app');\n        $this->metaFile = cache_path('cms/disabled.php');\n        $this->loadDisabled();\n        $this->loadPlugins();\n\n        if ($this->app->runningInBackend() || $this->app->runningInOctane()) {\n            $this->loadDependencies();\n        }\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.plugins');\n    }\n\n    /**\n     * loadPlugins finds all available plugins and loads them in to the $plugins array\n     */\n    public function loadPlugins(): array\n    {\n        $this->plugins = [];\n\n        // Locate all plugins and binds them to the container\n        foreach ($this->getPluginNamespaces() as $namespace => $path) {\n            $this->loadPlugin($namespace, plugins_path($path));\n        }\n\n        $this->sortDependencies();\n\n        return $this->plugins;\n    }\n\n    /**\n     * unloadPlugins unloads all plugins: the negative of loadPlugins()\n     */\n    public function unloadPlugins()\n    {\n        $this->plugins = [];\n    }\n\n    /**\n     * unloadPlugins reloads all plugins\n     */\n    public function reloadPlugins()\n    {\n        $this->unloadPlugins();\n        $this->loadPlugins();\n    }\n\n    /**\n     * loadPlugin loads a single plugin in to the manager where a namespace is Acme\\Blog\n     * and the path is somewhere on the disk\n     */\n    public function loadPlugin(string $namespace, string $path)\n    {\n        $className = $namespace.'\\Plugin';\n        $classPath = $path.'/Plugin.php';\n\n        try {\n            // Autoloader failed?\n            if (!class_exists($className)) {\n                include_once $classPath;\n            }\n\n            // Not a valid plugin!\n            if (!class_exists($className)) {\n                return;\n            }\n\n            $classObj = new $className($this->app);\n        }\n        catch (Throwable $e) {\n            Log::error('Plugin ' . $className . ' could not be instantiated.', [\n                'message' => $e->getMessage(),\n                'file' => $e->getFile(),\n                'line' => $e->getLine(),\n                'trace' => $e->getTraceAsString()\n            ]);\n            return;\n        }\n\n        $classId = $this->getIdentifier($classObj);\n\n        // Check for disabled plugins\n        if ($this->isDisabled($classId)) {\n            $classObj->disabled = true;\n        }\n\n        $this->plugins[$classId] = $classObj;\n        $this->pathMap[$classId] = $path;\n\n        return $classObj;\n    }\n\n    /**\n     * registerFromProvider will ensure plugins are not forced on unit tests\n     */\n    public function registerFromProvider()\n    {\n        if ($this->app->runningUnitTests()) {\n            return;\n        }\n\n        $this->registerAll();\n    }\n\n    /**\n     * registerAll runs the register() method on all plugins and can only be called once\n     */\n    public function registerAll($force = false)\n    {\n        if ($this->registered && !$force) {\n            return;\n        }\n\n        foreach ($this->plugins as $pluginId => $plugin) {\n            $this->registerPlugin($plugin, $pluginId);\n        }\n\n        $this->registered = true;\n    }\n\n    /**\n     * registerPlugin for a single object\n     * @param PluginBase $plugin\n     * @param string $pluginId\n     * @return void\n     */\n    public function registerPlugin($plugin, $pluginId = null)\n    {\n        if (!$pluginId) {\n            $pluginId = $this->getIdentifier($plugin);\n        }\n\n        if (!$plugin || $plugin->disabled) {\n            return;\n        }\n\n        $pluginPath = $this->getPluginPath($plugin);\n        $pluginNamespace = strtolower($pluginId);\n\n        // Register plugin class autoloaders\n        $autoloadPath = $pluginPath . '/vendor/autoload.php';\n        if (is_file($autoloadPath)) {\n            ComposerManager::instance()->autoload($pluginPath . '/vendor');\n        }\n\n        // Register configuration path\n        $configPath = $pluginPath . '/config';\n        if (!$this->app->configurationIsCached() && is_dir($configPath)) {\n            Config::package($pluginNamespace, $configPath);\n        }\n\n        // Register views path\n        $viewsPath = $pluginPath . '/views';\n        if (is_dir($viewsPath)) {\n            $this->callAfterResolving('view', function ($view) use ($pluginNamespace, $viewsPath) {\n                $view->addNamespace($pluginNamespace, $viewsPath);\n            });\n        }\n\n        // Register language namespaces\n        $langPath = $pluginPath . '/lang';\n        if (is_dir($langPath)) {\n            $this->callAfterResolving('translator', function ($translator) use ($pluginNamespace, $langPath) {\n                $translator->addNamespace($pluginNamespace, $langPath);\n                if (App::runningInBackend()) {\n                    $translator->addJsonPath($langPath);\n                }\n            });\n        }\n\n        // Run the plugin's register() method\n        $plugin->register();\n\n        // Add init, if available\n        $initFile = $pluginPath . '/init.php';\n        if (file_exists($initFile)) {\n            require $initFile;\n        }\n\n        // Add routes, if available\n        $routesFile = $pluginPath . '/routes.php';\n        if (!$this->app->routesAreCached() && file_exists($routesFile)) {\n            require $routesFile;\n        }\n    }\n\n    /**\n     * bootFromProvider will ensure plugins are not forced on unit tests\n     */\n    public function bootFromProvider()\n    {\n        if ($this->app->runningUnitTests()) {\n            return;\n        }\n\n        $this->bootAll();\n    }\n\n    /**\n     * bootAll runs the boot() method on all plugins. Can only be called once.\n     */\n    public function bootAll($force = false)\n    {\n        if ($this->booted && !$force) {\n            return;\n        }\n\n        foreach ($this->plugins as $pluginId => $plugin) {\n            $this->bootPlugin($plugin, $pluginId);\n        }\n\n        $this->booted = true;\n    }\n\n    /**\n     * bootPlugin registers a single plugin object.\n     * @param PluginBase $plugin\n     * @return void\n     */\n    public function bootPlugin($plugin, $pluginId = null)\n    {\n        if (!$pluginId) {\n            $pluginId = $this->getIdentifier($plugin);\n        }\n\n        if (!$plugin || $plugin->disabled) {\n            return;\n        }\n\n        if (method_exists($plugin, 'boot')) {\n            $this->app->call([$plugin, 'boot']);\n        }\n    }\n\n    /**\n     * callAfterResolving sets up an after resolving listener, or fire immediately\n     * if already resolved.\n     */\n    protected function callAfterResolving($name, $callback)\n    {\n        $this->app->afterResolving($name, $callback);\n\n        if ($this->app->resolved($name)) {\n            $callback($this->app->make($name), $this->app);\n        }\n    }\n\n    /**\n     * getPluginPaths returns an array of plugins and their paths.\n     */\n    public function getPluginPaths()\n    {\n        return array_diff_key((array) $this->pathMap, $this->disabledPlugins);\n    }\n\n    /**\n     * getPluginPath returns the directory path to a plugin\n     */\n    public function getPluginPath($id)\n    {\n        $classId = $this->getIdentifier($id);\n\n        if (!isset($this->pathMap[$classId])) {\n            return null;\n        }\n\n        return File::normalizePath($this->pathMap[$classId]);\n    }\n\n    /**\n     * getComposerCode finds the composer code for a plugin\n     */\n    public function getComposerCode($id)\n    {\n        $path = $this->getPluginPath($id);\n        $file = $path . '/composer.json';\n\n        if (!$path || !file_exists($file)) {\n            return null;\n        }\n\n        $info = json_decode(File::get($file), true);\n\n        return $info['name'] ?? null;\n    }\n\n    /**\n     * exists checks if a plugin exists and is enabled\n     * @param   string $id Plugin identifier, eg: Namespace.PluginName\n     * @return  boolean\n     */\n    public function exists($id)\n    {\n        return !(!$this->findByIdentifier($id) || $this->isDisabled($id));\n    }\n\n    /**\n     * getPlugins an array with all registered plugins\n     * The index is the plugin namespace, the value is the plugin information object.\n     */\n    public function getPlugins()\n    {\n        return array_diff_key((array) $this->plugins, $this->disabledPlugins);\n    }\n\n    /**\n     * getAllPlugins regardless of enabled state\n     */\n    public function getAllPlugins(): ?array\n    {\n        return $this->plugins;\n    }\n\n    /**\n     * findByNamespace returns a plugin registration class based on\n     * its namespace (Author\\Plugin)\n     */\n    public function findByNamespace($namespace)\n    {\n        if (!$this->hasPlugin($namespace)) {\n            return null;\n        }\n\n        $classId = $this->getIdentifier($namespace);\n\n        return $this->plugins[$classId];\n    }\n\n    /**\n     * findByIdentifier returns a plugin registration class based on\n     * its identifier (Author.Plugin)\n     */\n    public function findByIdentifier($identifier)\n    {\n        if (!isset($this->plugins[$identifier])) {\n            $identifier = $this->normalizeIdentifier($identifier);\n        }\n\n        if (!isset($this->plugins[$identifier])) {\n            return null;\n        }\n\n        return $this->plugins[$identifier];\n    }\n\n    /**\n     * hasPlugin checks to see if a plugin has been registered\n     */\n    public function hasPlugin($namespace)\n    {\n        $classId = $this->getIdentifier($namespace);\n\n        $normalized = $this->normalizeIdentifier($classId);\n\n        return isset($this->plugins[$normalized]);\n    }\n\n    /**\n     * getPluginNamespace returns the namespace for a plugin\n     */\n    public function getPluginNamespace($id): ?string\n    {\n        if ($classObj = $this->findByIdentifier($id)) {\n            return implode('\\\\', explode('\\\\', get_class($classObj), -1));\n        }\n\n        return null;\n    }\n\n    /**\n     * getPluginNamespaces returns a flat array of vendor plugin namespaces and their paths\n     */\n    public function getPluginNamespaces()\n    {\n        if (Manifest::has(self::MANIFEST_PLUGINS)) {\n            return (array) Manifest::get(self::MANIFEST_PLUGINS);\n        }\n\n        $classNames = [];\n\n        foreach ($this->getVendorAndPluginNames() as $vendorName => $vendorList) {\n            foreach ($vendorList as $pluginName => $pluginPath) {\n                $namespace = strtolower($vendorName).'\\\\'.strtolower($pluginName);\n                $classNames[$namespace] = $pluginPath;\n            }\n        }\n\n        Manifest::put(self::MANIFEST_PLUGINS, $classNames);\n\n        return $classNames;\n    }\n\n    /**\n     * getPluginHints returns an array of all registered hints where the key\n     * is the hint name and the value is the plugin identifier.\n     */\n    public function getPluginHints(): array\n    {\n        if (Manifest::has(self::MANIFEST_PLUGIN_HINTS)) {\n            return (array) Manifest::get(self::MANIFEST_PLUGIN_HINTS);\n        }\n\n        $hintNames = [];\n\n        foreach ($this->getPlugins() as $pluginId => $plugin) {\n            if ($hintName = $plugin->pluginDetails()['hint'] ?? null) {\n                $hintNames[$hintName] = $pluginId;\n            }\n        }\n\n        Manifest::put(self::MANIFEST_PLUGIN_HINTS, $hintNames);\n\n        return $hintNames;\n    }\n\n    /**\n     * getVendorAndPluginNames returns a 2 dimensional array of vendors and their plugins.\n     */\n    public function getVendorAndPluginNames()\n    {\n        $plugins = [];\n\n        $dirPath = plugins_path();\n        if (!is_dir($dirPath) || !is_readable($dirPath)) {\n            return $plugins;\n        }\n\n        // Iterate vendors directly to avoid recursion exceptions on unreadable children\n        try {\n            $vendorIterator = new DirectoryIterator($dirPath);\n        }\n        catch (UnexpectedValueException $e) {\n            return $plugins;\n        }\n\n        foreach ($vendorIterator as $vendor) {\n            if ($vendor->isDot()) {\n                continue;\n            }\n\n            if (!$vendor->isDir() || !is_readable($vendor->getPathname())) {\n                continue;\n            }\n\n            $vendorName = $vendor->getFilename();\n            $vendorPath = $vendor->getPathname();\n\n            // Iterate plugins under this vendor, skip unreadable vendor directories\n            try {\n                $pluginIterator = new DirectoryIterator($vendorPath);\n            }\n            catch (UnexpectedValueException $e) {\n                continue;\n            }\n\n            foreach ($pluginIterator as $plugin) {\n                if ($plugin->isDot()) {\n                    continue;\n                }\n\n                if (!$plugin->isDir() || !is_readable($plugin->getPathname())) {\n                    continue;\n                }\n\n                $pluginName = $plugin->getFilename();\n                $pluginPath = $plugin->getPathname();\n\n                // Only include valid plugin directories that contain Plugin.php\n                if (is_file($pluginPath . DIRECTORY_SEPARATOR . 'Plugin.php')) {\n                    $plugins[$vendorName][$pluginName] = $vendorName . '/' . $pluginName;\n                }\n            }\n        }\n\n        return $plugins;\n    }\n\n    /**\n     * getIdentifier resolves a plugin identifier from a plugin class name or object. Pass in\n     * a plugin class name or object, and returns an identifier in format of Vendor.Plugin\n     * @param mixed\n     * @return string\n     */\n    public function getIdentifier($namespace)\n    {\n        $namespace = Str::normalizeClassName($namespace);\n\n        // Value provided is a namespace, convert to a code\n        if (strpos($namespace, '\\\\') !== null) {\n            $parts = explode('\\\\', $namespace);\n            $slice = array_slice($parts, 0, 2);\n            $namespace = implode('.', $slice);\n        }\n\n        return $namespace;\n    }\n\n    /**\n     * normalizeIdentifier takes a human plugin code (acme.blog) and makes it authentic (Acme.Blog)\n     * @param  string $identifier\n     * @return string\n     */\n    public function normalizeIdentifier($identifier)\n    {\n        foreach ($this->plugins as $id => $object) {\n            if (strtolower($id) === strtolower($identifier)) {\n                return $id;\n            }\n        }\n\n        return $identifier;\n    }\n\n    /**\n     * getRegistrationMethodValues spins over every plugin object and collects the results\n     * of a method call.\n     * @param  string $methodName\n     * @return array\n     */\n    public function getRegistrationMethodValues($methodName)\n    {\n        $cacheKey = $this->getRegistrationCacheKey($methodName);\n\n        if (isset($this->registrationMethodCache[$cacheKey])) {\n            return $this->registrationMethodCache[$cacheKey];\n        }\n\n        $results = [];\n\n        // Load module items\n        foreach (System::listModules() as $module) {\n            if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                if (method_exists($provider, $methodName)) {\n                    $results['October.'.$module] = $provider->{$methodName}();\n                }\n            }\n        }\n\n        // Load plugin items\n        foreach ($this->getPlugins() as $id => $plugin) {\n            if (method_exists($plugin, $methodName)) {\n                $results[$id] = $plugin->{$methodName}();\n            }\n        }\n\n        // Load app items\n        if ($app = App::getProvider(\\App\\Provider::class)) {\n            if (method_exists($app, $methodName)) {\n                $results['October.App'] = $app->{$methodName}();\n            }\n        }\n\n        return $this->registrationMethodCache[$cacheKey] = $results;\n    }\n\n    /**\n     * getRegistrationCacheKey returns a cache key for the given method name,\n     * scoped by the active site or site group context.\n     */\n    protected function getRegistrationCacheKey(string $methodName): string\n    {\n        if (Site::hasFeature('system_plugin_sites')) {\n            $siteId = Site::getSiteIdFromContext();\n            return $siteId ? $methodName . '.s' . $siteId : $methodName;\n        }\n\n        if (Site::hasFeature('system_plugin_site_groups')) {\n            $siteGroupId = Site::getSiteGroupIdFromContext();\n            return $siteGroupId ? $methodName . '.g' . $siteGroupId : $methodName;\n        }\n\n        return $methodName;\n    }\n\n    //\n    // Disability\n    //\n\n    /**\n     * listDisabledByConfig\n     */\n    public function listDisabledByConfig(): array\n    {\n        $disablePlugins = Config::get('system.disable_plugins');\n\n        if (!$disablePlugins) {\n            return [];\n        }\n        elseif (is_array($disablePlugins)) {\n            return $disablePlugins;\n        }\n        else {\n            return array_map('trim', explode(',', (string) $disablePlugins));\n        }\n    }\n    /**\n     * reloadDisabledCache\n     */\n    public function reloadDisabledCache()\n    {\n        $this->disabledPlugins = [];\n        $this->disabledCache = [];\n        $this->registrationMethodCache = [];\n\n        $this->loadDisabled();\n        $this->loadPlugins();\n        $this->loadDependencies();\n    }\n\n    /**\n     * clearDisabledCache\n     */\n    public function clearDisabledCache()\n    {\n        File::delete($this->metaFile);\n\n        $this->reloadDisabledCache();\n    }\n\n    /**\n     * loadDisabled loads all disables plugins from the meta file.\n     */\n    protected function loadDisabled()\n    {\n        $path = $this->metaFile;\n\n        foreach ($this->listDisabledByConfig() as $disabled) {\n            $this->disabledPlugins[$disabled] = true;\n        }\n\n        if (file_exists($path)) {\n            try {\n                $data = (array) (File::getRequire($path) ?: []);\n                $this->loadDisabledFromCache($data);\n            }\n            catch (Throwable $ex) {\n                $this->populateDisabledPluginsFromDb();\n            }\n        }\n        else {\n            $this->populateDisabledPluginsFromDb();\n            $this->writeDisabled();\n        }\n    }\n\n    /**\n     * loadDisabledFromCache loads the disabled plugins from the cached data,\n     * resolving the active site/group context into the flat disabledPlugins array.\n     */\n    protected function loadDisabledFromCache(array $data)\n    {\n        if (!isset($data['global'])) {\n            // @deprecated legacy format - flat array, regenerate cache on next clear\n            $this->disabledPlugins = array_merge($this->disabledPlugins, $data);\n            return;\n        }\n\n        $this->disabledCache = $data;\n\n        $this->disabledPlugins = array_merge(\n            $this->disabledPlugins,\n            (array) $data['global']\n        );\n\n        $this->mergeActiveSiteContext($data);\n    }\n\n    /**\n     * isDisabled determines if a plugin is disabled by looking at the meta information\n     * or the application configuration.\n     * @return boolean\n     */\n    public function isDisabled($id)\n    {\n        $code = $this->getIdentifier($id);\n\n        if (array_key_exists($code, $this->disabledPlugins)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * isDisabledForSiteDefinition checks if a plugin is disabled for a given\n     * site definition, considering the active feature flags and cached data.\n     */\n    public function isDisabledForSiteDefinition($id, $site): bool\n    {\n        $code = $this->getIdentifier($id);\n\n        if (isset($this->disabledCache['global'][$code])) {\n            return true;\n        }\n\n        if (\n            Site::hasFeature('system_plugin_sites') &&\n            isset($this->disabledCache['sites'][$site->id])\n        ) {\n            return in_array($code, (array) $this->disabledCache['sites'][$site->id]);\n        }\n\n        if (\n            Site::hasFeature('system_plugin_site_groups') &&\n            $site->group_id &&\n            isset($this->disabledCache['groups'][$site->group_id])\n        ) {\n            return in_array($code, (array) $this->disabledCache['groups'][$site->group_id]);\n        }\n\n        return false;\n    }\n\n    /**\n     * writeDisabled writes the disabled plugins to a meta file, always using\n     * the structured format with global, sites, and groups keys.\n     */\n    protected function writeDisabled()\n    {\n        // Build global from database to avoid persisting site-context entries\n        $global = [];\n        if ($this->app->hasDatabase() && Schema::hasTable('system_plugin_versions')) {\n            $disabled = Db::table('system_plugin_versions')\n                ->where('is_disabled', 1)\n                ->pluck('is_disabled', 'code')\n                ->all();\n\n            foreach ($disabled as $code => $val) {\n                $global[$code] = true;\n            }\n        }\n\n        $data = [\n            'global' => $global,\n            'sites' => [],\n            'groups' => [],\n        ];\n\n        if (\n            (Site::hasFeature('system_plugin_sites') || Site::hasFeature('system_plugin_site_groups')) &&\n            $this->app->hasDatabase() &&\n            Schema::hasTable('system_plugin_site_groups')\n        ) {\n            $rows = Db::table('system_plugin_site_groups')\n                ->where('is_enabled', 0)\n                ->get(['plugin_code', 'site_id', 'site_group_id']);\n\n            foreach ($rows as $row) {\n                if ($row->site_id) {\n                    $data['sites'][$row->site_id][] = $row->plugin_code;\n                }\n                elseif ($row->site_group_id) {\n                    $data['groups'][$row->site_group_id][] = $row->plugin_code;\n                }\n            }\n        }\n\n        try {\n            File::put(\n                $this->metaFile,\n                '<?php return '.var_export($data, true).';'\n            );\n        }\n        catch (Throwable $ex) {\n            // Cache write failure is non-fatal, will rebuild next request\n        }\n    }\n\n    /**\n     * mergeActiveSiteContext merges the per-site or per-group disabled plugins\n     * for the active context into the flat disabledPlugins array.\n     */\n    protected function mergeActiveSiteContext(array $data)\n    {\n        if (Site::hasFeature('system_plugin_sites')) {\n            $siteId = Site::getSiteIdFromContext();\n            if ($siteId && isset($data['sites'][$siteId])) {\n                foreach ((array) $data['sites'][$siteId] as $code) {\n                    $this->disabledPlugins[$code] = true;\n                }\n            }\n        }\n        elseif (Site::hasFeature('system_plugin_site_groups')) {\n            $groupId = Site::getSiteGroupIdFromContext();\n            if ($groupId && isset($data['groups'][$groupId])) {\n                foreach ((array) $data['groups'][$groupId] as $code) {\n                    $this->disabledPlugins[$code] = true;\n                }\n            }\n        }\n    }\n\n    /**\n     * populateDisabledPluginsFromDb populates information about disabled plugins from database\n     * @return void\n     */\n    protected function populateDisabledPluginsFromDb()\n    {\n        if (!$this->app->hasDatabase()) {\n            return;\n        }\n\n        if (!Schema::hasTable('system_plugin_versions')) {\n            return;\n        }\n\n        $disabled = Db::table('system_plugin_versions')->where('is_disabled', 1)->pluck('code')->all();\n\n        foreach ($disabled as $code) {\n            $this->disabledPlugins[$code] = true;\n        }\n    }\n\n    /**\n     * disablePlugin disables a single plugin in the system.\n     * @param string $id Plugin code/namespace\n     * @param bool $isUser Set to true if disabled by the user\n     * @return bool\n     */\n    public function disablePlugin($id, $isUser = false)\n    {\n        $code = $this->getIdentifier($id);\n        if (array_key_exists($code, $this->disabledPlugins)) {\n            return false;\n        }\n\n        $this->disabledPlugins[$code] = $isUser;\n        $this->writeDisabled();\n\n        if ($pluginObj = $this->findByIdentifier($code)) {\n            $pluginObj->disabled = true;\n        }\n\n        return true;\n    }\n\n    /**\n     * enablePlugin enables a single plugin in the system.\n     * @param string $id Plugin code/namespace\n     * @param bool $isUser Set to true if enabled by the user\n     * @return bool\n     */\n    public function enablePlugin($id, $isUser = false)\n    {\n        $code = $this->getIdentifier($id);\n        if (!array_key_exists($code, $this->disabledPlugins)) {\n            return false;\n        }\n\n        // Prevent system from enabling plugins disabled by the user\n        if (!$isUser && $this->disabledPlugins[$code] === true) {\n            return false;\n        }\n\n        unset($this->disabledPlugins[$code]);\n        $this->writeDisabled();\n\n        if ($pluginObj = $this->findByIdentifier($code)) {\n            $pluginObj->disabled = false;\n        }\n\n        return true;\n    }\n\n    //\n    // Dependencies\n    //\n\n    /**\n     * findMissingDependencies scans the system plugins to locate any dependencies that are not\n     * currently installed. Returns an array of plugin codes that are needed.\n     *\n     *     PluginManager::instance()->findMissingDependencies();\n     *\n     * @return array\n     */\n    public function findMissingDependencies()\n    {\n        $missing = [];\n\n        foreach ($this->plugins as $id => $plugin) {\n            $required = $this->getDependencies($plugin);\n            if (!$required) {\n                continue;\n            }\n\n            foreach ($required as $require) {\n                if (!$require || $this->hasPlugin($require)) {\n                    continue;\n                }\n\n                if (!in_array($require, $missing)) {\n                    $missing[] = $require;\n                }\n            }\n        }\n\n        return $missing;\n    }\n\n    /**\n     * loadDependencies cross checks all plugins and their dependencies, if not met plugins\n     * are disabled and vice versa.\n     * @return void\n     */\n    protected function loadDependencies()\n    {\n        foreach ($this->plugins as $id => $plugin) {\n            $required = $this->getDependencies($plugin);\n            if (!$required) {\n                continue;\n            }\n\n            $disable = false;\n\n            foreach ($required as $require) {\n                if (!$pluginObj = $this->findByIdentifier($require)) {\n                    $disable = true;\n                }\n                elseif ($pluginObj->disabled) {\n                    $disable = true;\n                }\n            }\n\n            if ($disable) {\n                $this->disablePlugin($id);\n            }\n            else {\n                $this->enablePlugin($id);\n            }\n        }\n    }\n\n    /**\n     * sortDependencies sorts a collection of plugins, in the order that they should be actioned,\n     * according to their given dependencies. Least dependent come first.\n     * @return array Collection of sorted plugin identifiers\n     */\n    protected function sortDependencies()\n    {\n        ksort($this->plugins);\n\n        // Canvas the dependency tree\n        $checklist = $this->plugins;\n        $result = [];\n\n        $loopCount = 0;\n        while (count($checklist)) {\n            if (++$loopCount > 2048) {\n                throw new SystemException('Too much recursion! Check for circular dependencies in your plugins.');\n            }\n\n            foreach ($checklist as $code => $plugin) {\n                // Get dependencies and remove any aliens\n                $depends = $this->getDependencies($plugin) ?: [];\n                $depends = array_filter($depends, function ($pluginCode) {\n                    return isset($this->plugins[$pluginCode]);\n                });\n\n                // No dependencies\n                if (!$depends) {\n                    array_push($result, $code);\n                    unset($checklist[$code]);\n                    continue;\n                }\n\n                // Find dependencies that have not been checked\n                $depends = array_diff($depends, $result);\n                if (count($depends) > 0) {\n                    continue;\n                }\n\n                // All dependencies are checked\n                array_push($result, $code);\n                unset($checklist[$code]);\n            }\n        }\n\n        // Reassemble plugin map\n        $sortedPlugins = [];\n\n        foreach ($result as $code) {\n            $sortedPlugins[$code] = $this->plugins[$code];\n        }\n\n        return $this->plugins = $sortedPlugins;\n    }\n\n    /**\n     * getDependencies returns the plugin identifiers that are required by the supplied plugin.\n     * @param  string $plugin Plugin identifier, object or class\n     * @return array\n     */\n    public function getDependencies($plugin)\n    {\n        if (is_string($plugin) && (!$plugin = $this->findByIdentifier($plugin))) {\n            return false;\n        }\n\n        if (!isset($plugin->require) || !$plugin->require) {\n            return null;\n        }\n\n        return is_array($plugin->require) ? $plugin->require : [$plugin->require];\n    }\n\n    //\n    // Management\n    //\n\n    /**\n     * deletePlugin completely roll back and delete a plugin from the system.\n     * @param string $id Plugin code/namespace\n     * @return void\n     */\n    public function deletePlugin($id)\n    {\n        $code = $this->getIdentifier($id);\n\n        // Rollback plugin\n        UpdateManager::instance()->rollbackPlugin($id);\n\n        // Delete from file system\n        if ($pluginPath = self::instance()->getPluginPath($id)) {\n            File::deleteDirectory($pluginPath);\n        }\n\n        // Clean up per-site/group overrides\n        if (Schema::hasTable('system_plugin_site_groups')) {\n            PluginSiteGroup::where('plugin_code', $code)->delete();\n        }\n    }\n\n    /**\n     * refreshPlugin tears down a plugin's database tables and rebuilds them.\n     * @param string $id Plugin code/namespace\n     * @return void\n     */\n    public function refreshPlugin($id)\n    {\n        $manager = UpdateManager::instance();\n        $manager->rollbackPlugin($id);\n        $manager->migratePlugin($id);\n    }\n\n    /**\n     * @deprecated use unloadPlugins instead\n     */\n    public function unregisterAll()\n    {\n        $this->registered = false;\n        $this->plugins = [];\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/PresetManager.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\n\n/**\n * PresetManager class manages preset lists\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PresetManager\n{\n    /**\n     * @var array presets collection of presets\n     */\n    protected $presets;\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        $this->registerPreset('icons', [\\System\\Classes\\PresetManager\\Icons::class, 'icons']);\n        $this->registerPreset('icons@phosphor', [\\System\\Classes\\PresetManager\\Icons::class, 'iconsPhosphor']);\n        $this->registerPreset('locales', [\\System\\Classes\\PresetManager\\Locales::class, 'locales']);\n        $this->registerPreset('flags', [\\System\\Classes\\PresetManager\\Locales::class, 'flags']);\n        $this->registerPreset('flags@short', [\\System\\Classes\\PresetManager\\Locales::class, 'flagsShort']);\n        $this->registerPreset('timezones', [\\System\\Classes\\PresetManager\\Dates::class, 'timezones']);\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.preset');\n    }\n\n    /**\n     * registerPreset\n     */\n    public function registerPreset(string $alias, callable $callback)\n    {\n        $this->presets[$alias] = $callback;\n    }\n\n    /**\n     * getPreset\n     */\n    public function getPreset(string $alias): array\n    {\n        if (str_starts_with($alias, 'preset:')) {\n            $alias = substr($alias, 7);\n        }\n\n        if ($this->hasPreset($alias)) {\n            return $this->presets[$alias]();\n        }\n\n        return [];\n    }\n\n    /**\n     * hasPreset\n     */\n    public function hasPreset(string $alias): bool\n    {\n        return isset($this->presets[$alias]);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/ProductDetail.php",
    "content": "<?php namespace System\\Classes;\n\nuse Db;\nuse Html;\nuse File;\nuse Markdown;\nuse Cms\\Classes\\ThemeManager;\nuse System\\Models\\PluginVersion;\nuse System\\Classes\\UpdateManager;\nuse System\\Classes\\PluginManager;\nuse Exception;\n\n/**\n * ProductDetail contains details about a plugin or theme, sourcing information\n * from either the file system or marketplace endpoint.\n */\nclass ProductDetail\n{\n    /**\n     * @var bool isFound determines if a product was found\n     */\n    protected $isFound = false;\n\n    /**\n     * @var bool isInstalled determines if a product is installed\n     */\n    protected $isInstalled = false;\n\n    /**\n     * @var bool isOrphaned is for plugins found in the database but not filesystem\n     */\n    protected $isOrphaned = false;\n\n    /**\n     * @var bool isTheme product\n     */\n    public $isTheme = false;\n\n    /**\n     * @var bool canInstall product\n     */\n    public $canInstall = false;\n\n    /**\n     * @var bool canResetData is used by orphaned plugins to remove data\n     */\n    public $canResetData = false;\n\n    /**\n     * @var string name for product\n     */\n    public $name;\n\n    /**\n     * @var string code for product\n     */\n    public $code;\n\n    /**\n     * @var string composerCode\n     */\n    public $composerCode;\n\n    /**\n     * @var string composerVersion\n     */\n    public $composerVersion = '*';\n\n    /**\n     * @var string currentVersion\n     */\n    public $currentVersion;\n\n    /**\n     * @var string author of product\n     */\n    public $author;\n\n    /**\n     * @var string Product icon\n     */\n    public $icon;\n\n    /**\n     * @var string Product image\n     */\n    public $image;\n\n    /**\n     * @var string Product website URL\n     */\n    public $homepage;\n\n    /**\n     * @var string Sales / Readme content\n     */\n    public $contentHtml;\n\n    /**\n     * @var string Upgrade guide\n     */\n    public $upgradeHtml;\n\n    /**\n     * @var string License information\n     */\n    public $licenseHtml;\n\n    /**\n     * __construct\n     */\n    public function __construct(string $productCode, bool $isTheme = false)\n    {\n        $this->code = $productCode;\n        $this->isTheme = $isTheme;\n\n        if ($isTheme) {\n            if ($this->initThemeLocal()) {\n                $this->isInstalled = true;\n                $this->isFound = true;\n                return;\n            }\n\n            if ($this->initThemeRemote()) {\n                $this->isFound = true;\n                return;\n            }\n        }\n        else {\n            if ($this->initPluginLocal()) {\n                $this->isInstalled = true;\n                $this->isFound = true;\n                return;\n            }\n\n            if ($this->initPluginRemote()) {\n                $this->isFound = true;\n                return;\n            }\n\n            if ($this->initPluginDatabase()) {\n                $this->isFound = true;\n                $this->isOrphaned = true;\n                return;\n            }\n        }\n    }\n\n    /**\n     * installed\n     */\n    public function installed(): bool\n    {\n        return $this->isInstalled;\n    }\n\n    /**\n     * exists\n     */\n    public function exists(): bool\n    {\n        return $this->isFound;\n    }\n\n    /**\n     * initPluginLocal\n     */\n    protected function initPluginLocal(): bool\n    {\n        $manager = PluginManager::instance();\n        $plugin = $manager->findByIdentifier($this->code);\n        $code = $manager->getIdentifier($plugin);\n        $path = $manager->getPluginPath($plugin);\n        $this->composerCode = $manager->getComposerCode($plugin);\n\n        if (!$path || !$plugin) {\n            return false;\n        }\n\n        // Markdown\n        $readmeFiles = ['README.md', 'readme.md'];\n        $upgradeFiles = ['UPGRADE.md', 'upgrade.md'];\n        $licenseFiles = ['LICENCE.md', 'license.md', 'LICENSE.md', 'license.md'];\n        $this->contentHtml = $this->getProductMarkdownFile($path, $readmeFiles);\n        $this->upgradeHtml = $this->getProductMarkdownFile($path, $upgradeFiles);\n        $this->licenseHtml = $this->getProductMarkdownFile($path, $licenseFiles);\n\n        // Registration file\n        $details = $plugin->pluginDetails();\n        $this->name = $details['name'] ?? 'system::lang.plugin.unnamed';\n        $this->code = $code;\n        $this->author = $details['author'] ?? null;\n        $this->icon = $details['icon'] ?? 'icon-leaf';\n        $this->homepage = $details['homepage'] ?? null;\n        $this->canInstall = true;\n\n        // Version\n        $pluginVersion = PluginVersion::whereCode($code)->first();\n        $this->currentVersion = $pluginVersion ? $pluginVersion->version : '???';\n\n        return true;\n    }\n\n    /**\n     * initPluginRemote\n     */\n    protected function initPluginRemote(): bool\n    {\n        try {\n            $details = UpdateManager::instance()->requestPluginContent($this->code);\n        }\n        catch (Exception $ex) {\n            return false;\n        }\n\n        $this->contentHtml = $details['content_html'] ?? '';\n        $this->upgradeHtml = $details['upgrade_guide_html'] ?? '';\n\n        $this->name = $details['name'] ?? null;\n        $this->code = $details['code'] ?? null;\n        $this->author = $details['author'] ?? null;\n        $this->image = $details['image'] ?? null;\n        $this->homepage = $this->normalizeProductEndpoint($details['product_url'] ?? null);\n        $this->composerCode = $details['composer_code'] ?? null;\n        $this->composerVersion = $details['composer_version'] ?? null;\n        $this->canInstall = !($details['price'] ?? 0) || ($details['in_project'] ?? false);\n\n        return true;\n    }\n\n    /**\n     * initPluginDatabase\n     */\n    protected function initPluginDatabase(): bool\n    {\n        $plugin = PluginVersion::where(Db::raw('LOWER(code)'), strtolower($this->code))->first();\n        if (!$plugin) {\n            return false;\n        }\n\n        $this->name = $plugin->code;\n        $this->currentVersion = $plugin->version;\n        $this->author = 'Unknown';\n        $this->canResetData = true;\n        $this->contentHtml = __(\"Plugin has been removed from the file system.\");\n\n        return true;\n    }\n\n    /**\n     * initThemeLocal\n     */\n    protected function initThemeLocal(): bool\n    {\n        $manager = ThemeManager::instance();\n        $dirName = $manager->findDirectoryName($this->code);\n\n        if (!$dirName) {\n            return false;\n        }\n\n        $theme = $manager->findByIdentifier($dirName);\n        $path = $manager->getThemePath($dirName);\n\n        if (!$path || !$theme) {\n            return false;\n        }\n\n        $this->composerCode = $manager->getComposerCode($dirName);\n\n        // Markdown\n        $readmeFiles = ['README.md', 'readme.md'];\n        $upgradeFiles = ['UPGRADE.md', 'upgrade.md'];\n        $licenseFiles = ['LICENCE.md', 'licence.md', 'LICENSE.md', 'license.md'];\n        $this->contentHtml = $this->getProductMarkdownFile($path, $readmeFiles);\n        $this->upgradeHtml = $this->getProductMarkdownFile($path, $upgradeFiles);\n        $this->licenseHtml = $this->getProductMarkdownFile($path, $licenseFiles);\n\n        // Registration file\n        $details = $theme->getConfig();\n        $this->name = $details['name'] ?? 'system::lang.plugin.unnamed';\n        $this->author = $details['author'] ?? null;\n        $this->icon = $details['icon'] ?? 'icon-leaf';\n        $this->homepage = $details['homepage'] ?? null;\n        $this->canInstall = true;\n\n        return true;\n    }\n\n    /**\n     * initThemeRemote\n     */\n    protected function initThemeRemote(): bool\n    {\n        try {\n            $details = UpdateManager::instance()->requestThemeContent($this->code);\n        }\n        catch (Exception $ex) {\n            return false;\n        }\n\n        $this->contentHtml = $details['content_html'] ?? '';\n        $this->upgradeHtml = $details['upgrade_guide_html'] ?? '';\n\n        $this->name = $details['name'] ?? null;\n        $this->code = $details['code'] ?? null;\n        $this->author = $details['author'] ?? null;\n        $this->image = $details['image'] ?? null;\n        $this->homepage = $this->normalizeProductEndpoint($details['product_url'] ?? null);\n        $this->composerCode = $details['composer_code'] ?? null;\n        $this->composerVersion = $details['composer_version'] ?? null;\n        $this->canInstall = !($details['price'] ?? 0) || ($details['in_project'] ?? false);\n\n        return true;\n    }\n\n    /**\n     * getProductMarkdownFile checks a path for supplied filesnames\n     * to parse as Markdown\n     */\n    protected function getProductMarkdownFile(string $path, array $filenames): string\n    {\n        $contents = '';\n\n        foreach ($filenames as $file) {\n            if (!File::exists($path . '/'.$file)) {\n                continue;\n            }\n\n            $contents = File::get($path . '/'.$file);\n\n            /*\n             * Parse markdown, clean HTML, remove first H1 tag\n             */\n            $contents = Markdown::parse($contents);\n            $contents = Html::clean($contents);\n            $contents = preg_replace('@<h1[^>]*?>.*?<\\/h1>@si', '', $contents, 1);\n        }\n\n        return $contents;\n    }\n\n    /**\n     * normalizeProductEndpoint only allows trusted hostnames for security reasons\n     */\n    protected function normalizeProductEndpoint($url)\n    {\n        $hostname = parse_url($url, PHP_URL_HOST);\n        return str_replace($hostname, 'octobercms.com', $url);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/RateLimiter.php",
    "content": "<?php namespace System\\Classes;\n\nuse Str;\nuse App;\nuse Request;\n\n/**\n * RateLimiter prevents too many attempts at logging in\n */\nclass RateLimiter\n{\n    /**\n     * @var string throttleKey\n     */\n    protected $throttleKey;\n\n    /**\n     * @var \\Illuminate\\Cache\\RateLimiter limiter instance\n     */\n    protected $limiter;\n\n    /**\n     * @var \\Illuminate\\Http\\Request request instance\n     */\n    protected $request;\n\n    /**\n     * __construct a new login rate limiter instance.\n     */\n    public function __construct(string $throttleKey)\n    {\n        $this->throttleKey = $throttleKey;\n        $this->limiter = App::make(\\Illuminate\\Cache\\RateLimiter::class);\n        $this->request = Request::instance();\n    }\n\n    /**\n     * attempts gets the number of attempts for the given key.\n     */\n    public function attempts()\n    {\n        return $this->limiter->attempts($this->throttleKey($this->request));\n    }\n\n    /**\n     * tooManyAttempts determines if the user has too many failed login attempts.\n     */\n    public function tooManyAttempts($maxAttempts = 5)\n    {\n        return $this->limiter->tooManyAttempts($this->throttleKey($this->request), $maxAttempts);\n    }\n\n    /**\n     * increment the login attempts for the user.\n     */\n    public function increment($decaySeconds = 60)\n    {\n        $this->limiter->hit($this->throttleKey($this->request), $decaySeconds);\n    }\n\n    /**\n     * availableIn determines the number of seconds until logging in is available again.\n     */\n    public function availableIn()\n    {\n        return $this->limiter->availableIn($this->throttleKey($this->request));\n    }\n\n    /**\n     * clear the login locks for the given user credentials.\n     */\n    public function clear()\n    {\n        $this->limiter->clear($this->throttleKey($this->request));\n    }\n\n    /**\n     * throttleKey gets the throttle key for the given request.\n     * @return string\n     */\n    protected function throttleKey()\n    {\n        return Str::transliterate(Str::lower($this->throttleKey)).'|'.$this->request->ip();\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/ResizeImageItem.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse Url;\nuse Str;\nuse File;\nuse Event;\nuse October\\Rain\\Database\\Attach\\File as FileModel;\nuse October\\Rain\\Element\\ElementBase;\n\n/**\n * ResizeImageItem\n *\n * @method ResizeImageItem url(string $url) url is the public location\n * @method ResizeImageItem path(string $path) path is the local location\n * @method ResizeImageItem extension(string $extension) extension for the file\n * @method ResizeImageItem source(string $source) source can be model, local, url\n * @method ResizeImageItem options(array $mode) options\n * @method ResizeImageItem width(int $width) width\n * @method ResizeImageItem height(int $height) height\n * @method ResizeImageItem cacheKey(string $cacheKey) cacheKey\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ResizeImageItem extends ElementBase\n{\n    /**\n     * isResizable checks for SVG image types\n     */\n    public function isResizable()\n    {\n        if (strtolower($this->extension) === 'svg') {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * getFilepath\n     */\n    public function getFilepath(): string\n    {\n        if ($groupFolder = $this->getGroupFolder()) {\n            return $this->getPartitionDirectory() . '/' . $groupFolder . '/' . $this->getFilename();\n        }\n\n        return $this->getPartitionDirectory() . '/' . $this->getFilename();\n    }\n\n    /**\n     * getFilename returns a generated filename for the resized image, adhering\n     * to the 255 character limit on file sizes in Linux.\n     */\n    public function getFilename(): string\n    {\n        $filename = Str::limit($this->options['filename'], 222, '');\n        $extension = $this->options['extension'];\n\n        // Group folder\n        if (isset($this->options['group'])) {\n            return \"{$filename}.{$extension}\";\n        }\n\n        // Global folder\n        $id = $this->getCacheKey();\n        return \"{$filename}_{$id}.{$extension}\";\n    }\n\n    /**\n     * getGroupFolder\n     */\n    public function getGroupFolder()\n    {\n        if ($this->options['group'] ?? null) {\n            return Str::slug($this->options['group']);\n        }\n\n        return null;\n    }\n\n    /**\n     * getPartitionDirectory\n     */\n    public function getPartitionDirectory(): string\n    {\n        $width = $this->width;\n        $height = $this->height;\n        $options = $this->options;\n        $mode = $options['mode'];\n\n        if (is_array($options['offset'] ?? null)) {\n            $offsetX = $options['offset'][0] ?? ($options['offset']['x'] ?? 0);\n            $offsetY = $options['offset'][1] ?? ($options['offset']['y'] ?? 0);\n            return \"{$width}_{$height}_{$offsetX}_{$offsetY}_{$mode}\";\n        }\n        else {\n            return \"{$width}_{$height}_{$mode}\";\n        }\n    }\n\n    /**\n     * getCacheVersion\n     */\n    public function getCacheVersion(): string\n    {\n        return $this->getCacheKey() . '-1';\n    }\n\n    /**\n     * fromCacheInfo\n     */\n    public function fromCacheInfo($cacheKey, array $cacheInfo)\n    {\n        $this->cacheKey($cacheKey);\n        $this->version($cacheInfo['version'] ?? null);\n        $this->source($cacheInfo['source'] ?? null);\n        $this->path($cacheInfo['path'] ?? null);\n        $this->extension($cacheInfo['extension'] ?? null);\n        $this->width($cacheInfo['width'] ?? 0);\n        $this->height($cacheInfo['height'] ?? 0);\n        $this->options((array) @json_decode(@base64_decode($cacheInfo['options']), true));\n        return $this;\n    }\n\n    /**\n     * getCacheInfo\n     */\n    public function getCacheInfo(): array\n    {\n        $cacheInfo = [\n            'version' => $this->getCacheVersion(),\n            'source' => $this->source,\n            'path' => $this->path,\n            'extension' => $this->extension,\n            'width' => $this->width,\n            'height' => $this->height,\n            'options' => base64_encode(json_encode($this->options)),\n        ];\n\n        return $cacheInfo;\n    }\n\n    /**\n     * getCacheKey\n     */\n    public function getCacheKey()\n    {\n        if ($this->cacheKey !== null) {\n            return $this->cacheKey;\n        }\n\n        $payload = [\n            'url' => $this->url,\n            'path' => $this->path,\n            'extension' => $this->extension,\n            'source' => $this->source,\n            'width' => $this->width,\n            'height' => $this->height,\n            'options' => $this->options\n        ];\n\n        $cacheKey = json_encode($payload);\n\n        /**\n         * @event cms.resizer.getCacheKey\n         * Provides an opportunity to modify the asset resizer's cache key\n         *\n         * Example usage:\n         *\n         *     Event::listen('cms.resizer.getCacheKey', function((\\System\\Classes\\ResizeImages) $assetCombiner, (stdClass) $dataHolder) {\n         *         $dataHolder->key = rand();\n         *     });\n         *\n         */\n        $dataHolder = (object) ['key' => $cacheKey];\n        Event::fire('cms.resizer.getCacheKey', [$this, $dataHolder]);\n        $cacheKey = $dataHolder->key;\n\n        return $this->cacheKey = md5($cacheKey);\n    }\n\n    /**\n     * toDimensions\n     */\n    public function toDimensions($width, $height)\n    {\n        $this->width((int) $width);\n        $this->height((int) $height);\n    }\n\n    /**\n     * toOptions\n     */\n    public function toOptions($options)\n    {\n        $defaultOptions = [\n            'mode' => 'auto',\n            'offset' => null,\n            'quality' => 90,\n            'sharpen' => 0,\n            'interlace' => false,\n            'filename' => 'img',\n            'group' => null,\n            'extension' => 'auto',\n            'force' => false,\n        ];\n\n        if (!is_array($options)) {\n            $options = ['mode' => $options];\n        }\n\n        $options = array_merge($defaultOptions, $options);\n\n        $options['mode'] = strtolower($options['mode']);\n\n        // Use the same extension as source image\n        if ($options['extension'] === 'auto') {\n            $options['extension'] = $this->extension;\n        }\n\n        // Check filename\n        if ($options['filename'] === true) {\n            $options['filename'] = File::anyname(basename($this->path));\n        }\n\n        // Check group name\n        if (!$this->validateGroupName($options['group'])) {\n            $options['group'] = null;\n        }\n\n        return $this->options($options);\n    }\n\n    /**\n     * fromObject\n     */\n    public function fromObject($image)\n    {\n        $result = [\n            'url' => null,\n            'path' => null,\n            'extension' => null,\n            'source' => null\n        ];\n\n        // File model\n        if ($image instanceof FileModel) {\n            $disk = $image->getDisk();\n            $path = $image->getDiskPath();\n\n            if (File::extension($path) && $disk->exists($path)) {\n                $result['url'] = $image->getPath();\n                $result['path'] = $image->getLocalPath();\n                $result['extension'] = $image->getExtension();\n                $result['source'] = 'model';\n            }\n        }\n        elseif (is_string($image)) {\n            $path = $this->parseFileName($image);\n\n            // Local path\n            if ($path !== null) {\n                $url = Url::asset(File::localToPublic($path));\n                $result['url'] = $url;\n                $result['path'] = $path;\n                $result['extension'] = File::extension($path);\n                $result['source'] = 'local';\n            }\n            // URL\n            elseif (strpos($image, '://') !== false) {\n                $result['url'] = $result['path'] = $image;\n                $result['extension'] = explode('?', File::extension($image))[0];\n                $result['source'] = 'url';\n            }\n        }\n\n        return $this->useConfig($result);\n    }\n\n    /**\n     * parseFileName to get a relative path for the file\n     * @return string\n     */\n    protected function parseFileName($filePath): ?string\n    {\n        // Local disk path\n        if (file_exists($filePath)) {\n            return $filePath;\n        }\n\n        // Pop off URI from URL\n        $path = urldecode(parse_url($filePath, PHP_URL_PATH));\n\n        foreach ($this->getAvailableSources() as $source) {\n            if ($source['disk'] !== 'local') {\n                continue;\n            }\n\n            $rootPath = $source['root'] ?? '';\n            $relativeUrl = Url::makeRelative($source['url'] ?? '');\n\n            if (!$rootPath || !$relativeUrl) {\n                continue;\n            }\n\n            if (strpos($path, $relativeUrl) === false) {\n                continue;\n            }\n\n            $pathParts = explode($relativeUrl, $path, 2);\n            $finalPath = $rootPath . end($pathParts);\n            if (file_exists($finalPath)) {\n                return $finalPath;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * getAvailableSources returns available sources\n     */\n    protected function getAvailableSources(): array\n    {\n        if ($this->availableSources) {\n            return $this->availableSources;\n        }\n\n        $config = App::make('config');\n\n        $sources = [\n            'media' => [\n                'disk' => $config->get('filesystems.disks.media.driver', 'local'),\n                'root' => $config->get('filesystems.disks.media.root', storage_path('app/media')),\n                'url' => $config->get('filesystems.disks.media.url', '/storage/app/media')\n            ],\n            'uploads' => [\n                'disk' => $config->get('filesystems.disks.uploads.driver', 'local'),\n                'root' => $config->get('filesystems.disks.uploads.root', storage_path('app/uploads')),\n                'url' => $config->get('filesystems.disks.uploads.url', '/storage/app/uploads')\n            ],\n            'app' => [\n                'disk' => 'local',\n                'root' => base_path('app'),\n                'url' => '/app'\n            ],\n            'modules' => [\n                'disk' => 'local',\n                'root' => base_path('modules'),\n                'url' => '/modules'\n            ],\n            'plugins' => [\n                'disk' => 'local',\n                'root' => base_path('plugins'),\n                'url' => '/plugins'\n            ],\n            'themes' => [\n                'disk' => 'local',\n                'root' => base_path('themes'),\n                'url' => '/themes'\n            ],\n        ];\n\n        /**\n         * @event system.resizer.getAvailableSources\n         * Provides an opportunity to modify the available sources\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.resizer.getAvailableSources', function((array) &$sources)) {\n         *         $sources['custom'] = [\n         *              'disk' => 'custom',\n         *              'root' => 'relative/path/on/disk',\n         *              'url' => 'publicly/accessible/path',\n         *         ];\n         *     });\n         *\n         */\n        Event::fire('system.resizer.getAvailableSources', [&$sources]);\n\n        return $this->availableSources = $sources;\n    }\n\n    /**\n     * validateGroupName ensures the group name is simple ASCII\n     */\n    protected function validateGroupName($groupName): bool\n    {\n        if (!is_string($groupName)) {\n            return false;\n        }\n\n        if (strpos($groupName, '..') !== false) {\n            return false;\n        }\n\n        if (strpos($groupName, './') !== false || strpos($groupName, '//') !== false) {\n            return false;\n        }\n\n        if (!preg_match('/^[a-z0-9\\_\\s\\-\\.\\/]+$/i', $groupName)) {\n            return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/ResizeImages.php",
    "content": "<?php namespace System\\Classes;\n\nuse Url;\nuse Log;\nuse App;\nuse File;\nuse Route;\nuse Event;\nuse Cache;\nuse Config;\nuse Resizer;\nuse Storage;\nuse Redirect;\nuse Exception;\nuse October\\Rain\\Filesystem\\Definitions as FileDefinitions;\nuse ApplicationException;\nuse finfo;\n\n/**\n * ResizeImages is used for resizing image files\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ResizeImages\n{\n    /**\n     * @var array availableSources to get image paths\n     */\n    protected $availableSources = [];\n\n    /**\n     * @var string storageFolder is the name of the folder in the resources disk\n     */\n    protected $storageFolder = 'resize';\n\n    /**\n     * @var string storageUrl relative or absolute URL of the Library root folder.\n     */\n    protected $storageUrl;\n\n    /**\n     * __construct this instance\n     */\n    public function __construct()\n    {\n        $this->storageUrl = rtrim(Config::get('filesystems.disks.resources.url', '/storage/app/resources'), '/');\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.resizer');\n    }\n\n    /**\n     * resize generates and returns a thumbnail URL path\n     *\n     * @param integer $width\n     * @param integer $height\n     * @param array $options [\n     *     'mode' => 'auto',\n     *     'offset' => [0, 0],\n     *     'quality' => 90,\n     *     'sharpen' => 0,\n     *     'interlace' => false,\n     *     'extension' => 'auto',\n     * ]\n     * @return string\n     */\n    public static function resize($image, $width = null, $height = null, $options = [])\n    {\n        return self::instance()->prepareRequest($image, $width, $height, $options);\n    }\n\n    /**\n     * prepareRequest checks if an image has been resized before and returns the URL,\n     * otherwise the performs the resize by passing to a route that ends up at getContents\n     */\n    protected function prepareRequest($image, $width = null, $height = null, $options = [])\n    {\n        $imageItem = (new ResizeImageItem)->fromObject($image);\n        $imageItem->toOptions($options);\n        $imageItem->toDimensions($width, $height);\n\n        if (!$imageItem->isResizable()) {\n            return $imageItem->url;\n        }\n\n        // Check is resized\n        if ($this->hasFile($imageItem)) {\n            return $this->getPublicPath($imageItem);\n        }\n\n        // Cache and process\n        $cacheKey = $imageItem->getCacheKey();\n        $cacheInfo = $this->getCache($cacheKey);\n\n        if (!$cacheInfo) {\n            $this->putCache($cacheKey, $imageItem->getCacheInfo());\n        }\n\n        // Force immediate processing if requested\n        if ($imageItem->options['force'] ?? false) {\n            $this->processImage($cacheKey);\n            return $this->getPublicPath($imageItem);\n        }\n\n        $outputFilename = $imageItem->getCacheVersion();\n\n        return $this->getResizedUrl($outputFilename);\n    }\n\n    /**\n     * getContents performs the resize and stores in on disk, creating a cache\n     */\n    public function getContents($cacheKey)\n    {\n        $cacheInfo = $this->getCache($cacheKey);\n        if (!$cacheInfo || !isset($cacheInfo['path'])) {\n            throw new ApplicationException(__(\"The resizer file ':name' is not found.\", ['name' => e($cacheKey)]));\n        }\n\n        $this->processImage($cacheKey);\n\n        $imageItem = (new ResizeImageItem)->fromCacheInfo($cacheKey, $cacheInfo);\n\n        return Redirect::to($this->getPublicPath($imageItem));\n    }\n\n    /**\n     * processImage performs the resize and stores it on disk\n     */\n    protected function processImage($cacheKey): void\n    {\n        $cacheInfo = $this->getCache($cacheKey);\n        if (!$cacheInfo || !isset($cacheInfo['path'])) {\n            return;\n        }\n\n        $imageItem = (new ResizeImageItem)->fromCacheInfo($cacheKey, $cacheInfo);\n\n        // Set local paths for resizer\n        $tempFilename = $imageItem->getPartitionDirectory() . '_' . $imageItem->getFilename();\n        $tempTargetPath = $this->getTempPath() . '/' . $tempFilename;\n        $tempSourcePath = $this->getTempPath() . '/raw_' . $tempFilename;\n        $sourcePath = $this->getSourcePathForResize($cacheInfo['path'], $tempSourcePath);\n\n        // Perform resize\n        Resizer::open($sourcePath)\n            ->resize($imageItem->width, $imageItem->height, $imageItem->options)\n            ->save($tempTargetPath);\n\n        // Save resized file to disk\n        $disk = Storage::disk('resources');\n        $filePath = $this->getStoragePath($imageItem);\n        $success = $disk->putFileAs(\n            dirname($filePath),\n            $tempTargetPath,\n            basename($filePath)\n        );\n\n        // Clean up\n        File::delete($tempTargetPath);\n\n        if (file_exists($tempSourcePath)) {\n            File::delete($tempSourcePath);\n        }\n\n        // Eagerly cache remote exists call\n        if ($success && !$this->isLocalStorage()) {\n            Cache::forever($this->getExistsCacheKey($filePath), true);\n        }\n    }\n\n    /**\n     * getSourcePathForResize creates a temp copy of external files in the local filesystem\n     */\n    protected function getSourcePathForResize($realSourcePath, $tempSourcePath)\n    {\n        $isExternal = strpos($realSourcePath, 'http') === 0;\n        $sourcePath = $isExternal ? $tempSourcePath : $realSourcePath;\n\n        if ($isExternal) {\n            // Validate file extension before fetching\n            if (!$this->validateExternalImageUrl($realSourcePath)) {\n                Log::warning(\"Blocked external image with invalid extension: {$realSourcePath}\");\n            }\n            else {\n                try {\n                    $contents = file_get_contents($realSourcePath);\n\n                    // Validate MIME type of fetched content\n                    if ($this->validateImageContents($contents)) {\n                        file_put_contents($tempSourcePath, $contents);\n                    }\n                    else {\n                        Log::warning(\"Blocked external URL with non-image content: {$realSourcePath}\");\n                    }\n                }\n                catch (Exception $ex) {\n                    Log::warning(\"Unable to fetch external image {$realSourcePath} [{$ex->getMessage()}]\");\n                }\n            }\n        }\n\n        if (!file_exists($sourcePath)) {\n            /**\n             * @event system.resizer.handleMissingImage\n             * Provides an opportunity to configure a custom image when the resizer couldn't find the original file\n             *\n             * Example usage:\n             *\n             *     Event::listen('system.resizer.handleMissingImage', function(&$sourcePath) {\n             *         $sourcePath = plugins_path('vendor/plugin/assets/broken-image.jpg');\n             *     });\n             *\n             */\n            Event::fire('system.resizer.handleMissingImage', [&$sourcePath]);\n        }\n\n        return $sourcePath;\n    }\n\n    /**\n     * validateExternalImageUrl checks if an external URL has a valid image extension\n     */\n    protected function validateExternalImageUrl(string $url): bool\n    {\n        $path = parse_url($url, PHP_URL_PATH);\n        if (!$path) {\n            return false;\n        }\n\n        $extension = strtolower(pathinfo($path, PATHINFO_EXTENSION));\n        if (!$extension) {\n            return false;\n        }\n\n        $allowedExtensions = FileDefinitions::get('image_extensions');\n\n        return in_array($extension, $allowedExtensions);\n    }\n\n    /**\n     * validateImageContents checks if the content is actually an image based on MIME type\n     */\n    protected function validateImageContents(string $contents): bool\n    {\n        if (empty($contents)) {\n            return false;\n        }\n\n        $finfo = new finfo(FILEINFO_MIME_TYPE);\n        $mimeType = $finfo->buffer($contents);\n\n        return str_starts_with($mimeType, 'image/');\n    }\n\n    /**\n     * hasFile checks file exists on storage device\n     */\n    protected function hasFile($imageItem): bool\n    {\n        $filePath = $this->getStoragePath($imageItem);\n\n        $disk = Storage::disk('resources');\n        if ($this->isLocalStorage()) {\n            return $disk->exists($filePath);\n        }\n\n        // Cache remote storage results for performance increase\n        $result = Cache::memo()->remember($this->getExistsCacheKey($filePath), now()->addDays(30), function() use ($disk, $filePath) {\n            return $disk->exists($filePath);\n        });\n\n        return $result;\n    }\n\n    /**\n     * getResizedUrl\n     */\n    protected function getResizedUrl($outputFilename = 'undefined.css')\n    {\n        $combineAction = \\System\\Classes\\SystemController::class.'@resize';\n        $actionExists = Route::getRoutes()->getByAction($combineAction) !== null;\n\n        if ($actionExists) {\n            $result = Url::action($combineAction, [$outputFilename], false);\n        }\n        else {\n            $result = '/resize/'.$outputFilename;\n        }\n\n        return Url::toRelative($result);\n    }\n\n    //\n    // Paths\n    //\n\n    /**\n     * getStoragePath returns a relative storage path for the image\n     */\n    public function getStoragePath($imageItem)\n    {\n        return $this->storageFolder . '/' . $imageItem->getFilepath();\n    }\n\n    /**\n     * getPublicPath returns the public address for the resources path\n     */\n    public function getPublicPath($imageItem)\n    {\n        $publicPath = $this->storageUrl . '/resize';\n\n        if ($this->isLocalStorage() && Config::get('system.relative_links') === true) {\n            $result = Url::toRelative($publicPath);\n        }\n        else {\n            $result = Url::asset($publicPath);\n        }\n\n        return $result . '/' . $imageItem->getFilepath();\n    }\n\n    /**\n     * getTempPath returns an internal working path\n     */\n    public function getTempPath()\n    {\n        $path = temp_path('resize');\n\n        if (!File::isDirectory($path)) {\n            File::makeDirectory($path, 0755, true, true);\n        }\n\n        return $path;\n    }\n\n    /**\n     * isLocalStorage returns true if the storage engine is local\n     */\n    protected function isLocalStorage()\n    {\n        return Config::get('filesystems.disks.resources.driver') === 'local';\n    }\n\n    //\n    // Cache\n    //\n\n    /**\n     * putCache stores information about a asset collection against\n     * a cache identifier.\n     * @param string $cacheKey Cache identifier.\n     * @param array $cacheInfo List of asset files.\n     * @return bool Successful\n     */\n    protected function putCache($cacheKey, array $cacheInfo)\n    {\n        $cacheKey = 'resizer.'.$cacheKey;\n\n        if (Cache::memo()->has($cacheKey)) {\n            return false;\n        }\n\n        $this->putCacheIndex($cacheKey);\n\n        Cache::forever($cacheKey, base64_encode(serialize($cacheInfo)));\n\n        return true;\n    }\n\n    /**\n     * getCache looks up information about a cache identifier.\n     * @param string $cacheKey Cache identifier\n     * @return array Cache information\n     */\n    protected function getCache($cacheKey)\n    {\n        $cacheKey = 'resizer.'.$cacheKey;\n\n        if ($cache = Cache::memo()->get($cacheKey)) {\n            return @unserialize(@base64_decode($cache));\n        }\n\n        return false;\n    }\n\n    /**\n     * getExistsCacheKey builds a key for caching the exists check\n     */\n    protected function getExistsCacheKey(string $filePath): string\n    {\n        return md5(json_encode([\n            'type' => 'resizer-file',\n            'path' => $filePath\n        ]));\n    }\n\n    /**\n     * resetCache resets the resizer cache\n     * @return void\n     */\n    public static function resetCache()\n    {\n        if ($cache = Cache::get('resizer.index')) {\n            $index = (array) @unserialize(@base64_decode($cache)) ?: [];\n\n            foreach ($index as $cacheKey) {\n                Cache::forget($cacheKey);\n            }\n\n            Cache::forget('resizer.index');\n        }\n\n        // CacheHelper::instance()->clearCombiner();\n    }\n\n    /**\n     * putCacheIndex adds a cache identifier to the index store used for\n     * performing a reset of the cache.\n     * @param string $cacheKey Cache identifier\n     * @return bool Returns false if identifier is already in store\n     */\n    protected function putCacheIndex($cacheKey)\n    {\n        $index = [];\n\n        if ($cache = Cache::memo()->get('resizer.index')) {\n            $index = (array) @unserialize(@base64_decode($cache)) ?: [];\n        }\n\n        if (in_array($cacheKey, $index)) {\n            return false;\n        }\n\n        $index[] = $cacheKey;\n\n        Cache::forever('resizer.index', base64_encode(serialize($index)));\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/SettingsManager.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse Event;\nuse System;\nuse Backend;\nuse BackendAuth;\nuse SystemException;\n\n/**\n * SettingsManager manages the system settings\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SettingsManager\n{\n    /**\n     * Allocated category types\n     */\n    const CATEGORY_CMS = 'system::lang.system.categories.cms';\n    const CATEGORY_MISC = 'system::lang.system.categories.misc';\n    const CATEGORY_MAIL = 'system::lang.system.categories.mail';\n    const CATEGORY_LOGS = 'system::lang.system.categories.logs';\n    const CATEGORY_TEAM = 'system::lang.system.categories.team';\n    const CATEGORY_USERS = 'system::lang.system.categories.users';\n    const CATEGORY_SOCIAL = 'system::lang.system.categories.social';\n    const CATEGORY_SYSTEM = 'system::lang.system.categories.system';\n    const CATEGORY_EVENTS = 'system::lang.system.categories.events';\n    const CATEGORY_BACKEND = 'system::lang.system.categories.backend';\n    const CATEGORY_CUSTOMERS = 'system::lang.system.categories.customers';\n    const CATEGORY_MYSETTINGS = 'system::lang.system.categories.my_settings';\n    const CATEGORY_NOTIFICATIONS = 'system::lang.system.categories.notifications';\n    const CATEGORY_SHOP = \"Shop\";\n    const CATEGORY_GLOBALS = \"Globals\";\n    const CATEGORY_COLLECTIONS = \"Collections\";\n\n    /**\n     * @var array items registered\n     */\n    protected $items;\n\n    /**\n     * @var array groupedItems by category\n     */\n    protected $groupedItems;\n\n    /**\n     * @var string contextOwner is the active plugin or module owner.\n     */\n    protected $contextOwner;\n\n    /**\n     * @var string contextItemCode for active item\n     */\n    protected $contextItemCode;\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.settings');\n    }\n\n    /**\n     * registerCallback function that defines setting items.\n     * The callback function should register setting items by calling the manager's\n     * registerSettingItems() function. The manager instance is passed to the\n     * callback function as an argument. Usage:\n     *\n     *     SettingsManager::registerCallback(function ($manager) {\n     *         $manager->registerSettingItems([...]);\n     *     });\n     *\n     * @deprecated this will be removed in a later version\n     * @param callable $callback A callable function.\n     */\n    public function registerCallback(callable $callback)\n    {\n        App::extendInstance('system.settings', $callback);\n    }\n\n    /**\n     * loadItems\n     */\n    protected function loadItems()\n    {\n        // Load module items\n        foreach (System::listModules() as $module) {\n            if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                $items = $provider->registerSettings();\n                if (is_array($items)) {\n                    $this->registerSettingItems('October.'.$module, $items);\n                }\n            }\n        }\n\n        // Load plugin items\n        foreach (PluginManager::instance()->getPlugins() as $id => $plugin) {\n            $items = $plugin->registerSettings();\n            if (is_array($items)) {\n                $this->registerSettingItems($id, $items);\n            }\n        }\n\n        // Load app items\n        if ($app = App::getProvider(\\App\\Provider::class)) {\n            $items = $app->registerSettings();\n            if (is_array($items)) {\n                $this->registerSettingItems('October.App', $items);\n            }\n        }\n\n        /**\n         * @event system.settings.extendItems\n         * Provides an opportunity to manipulate the system settings manager\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.settings.extendItems', function ((\\System\\Classes\\SettingsManager) $settingsManager) {\n         *         $settingsManager->addSettingItem(...)\n         *         $settingsManager->removeSettingItem(...)\n         *     });\n         *\n         */\n        Event::fire('system.settings.extendItems', [$this]);\n\n        // Sort settings items\n        usort($this->items, function ($a, $b) {\n            return $a->order - $b->order;\n        });\n\n        // Filter items user lacks permission for\n        $user = BackendAuth::getUser();\n        $this->items = $this->filterItemPermissions($user, $this->items);\n\n        // Process each item in to a category array\n        $catItems = [];\n        foreach ($this->items as $code => $item) {\n            // For YAML, eg: CATEGORY_SYSTEM\n            if (defined(\"static::{$item->category}\")) {\n                $category = constant(\"static::{$item->category}\");\n            }\n            else {\n                $category = $item->category ?: self::CATEGORY_MISC;\n            }\n            if (!isset($catItems[$category])) {\n                $catItems[$category] = [];\n            }\n\n            $catItems[$category][$code] = $item;\n        }\n\n        $this->groupedItems = $catItems;\n    }\n\n    /**\n     * listItems returns a collection of all settings by group, filtered by context\n     * @param  string $context\n     * @return array\n     */\n    public function listItems($context = null)\n    {\n        if ($this->items === null) {\n            $this->loadItems();\n        }\n\n        if ($context !== null) {\n            return $this->filterByContext($this->groupedItems, $context);\n        }\n\n        return $this->groupedItems;\n    }\n\n    /**\n     * listAllItems as a flat array\n     */\n    public function listAllItems(?string $context = null): array\n    {\n        if ($this->items === null) {\n            $this->loadItems();\n        }\n\n        // Emulate groups for filterByContext by wrapping and unwrapping\n        if ($context !== null) {\n            return $this->filterByContext([$this->items], $context)[0];\n        }\n\n        return $this->items;\n    }\n\n    /**\n     * filterByContext filters a set of items by a given context.\n     * @param  array $items\n     * @param  string $context\n     * @return array\n     */\n    protected function filterByContext($items, $context)\n    {\n        $filteredItems = [];\n        foreach ($items as $categoryName => $category) {\n            $filteredCategory = [];\n            foreach ($category as $item) {\n                $itemContext = is_array($item->context) ? $item->context : [$item->context];\n                if (in_array($context, $itemContext)) {\n                    $filteredCategory[] = $item;\n                }\n            }\n\n            if (count($filteredCategory)) {\n                $filteredItems[$categoryName] = $filteredCategory;\n            }\n        }\n\n        return $filteredItems;\n    }\n\n    /**\n     * registerSettingItems registers the backend setting items.\n     * The argument is an array of the settings items. The array keys represent the\n     * setting item codes, specific for the plugin/module. Each element in the\n     * array should be an associative array with the following keys:\n     * - label - specifies the settings label localization string key, required.\n     * - icon - an icon name from the Font Awesome icon collection, required if iconSvg is not provided.\n     * - iconSvg - path to a SVG icon file.\n     * - url - the back-end relative URL the setting item should point to.\n     * - class - the back-end relative URL the setting item should point to.\n     * - permissions - an array of permissions the back-end user should have, optional.\n     *   The item will be displayed if the user has any of the specified permissions.\n     * - order - a position of the item in the setting, optional.\n     * - category - a string to assign this item to a category, optional.\n     * @param string $owner Specifies the setting items owner plugin or module in the format Vendor.Module.\n     * @param array $definitions An array of the setting item definitions.\n     */\n    public function registerSettingItems($owner, array $definitions)\n    {\n        if (!$this->items) {\n            $this->items = [];\n        }\n\n        $this->addSettingItems($owner, $definitions);\n    }\n\n    /**\n     * addSettingItems dynamically adds an array of setting items\n     * @param string $owner\n     * @param array  $definitions\n     */\n    public function addSettingItems($owner, array $definitions)\n    {\n        foreach ($definitions as $code => $definition) {\n            if ($definition && is_array($definition)) {\n                $this->addSettingItem($owner, $code, $definition);\n            }\n        }\n    }\n\n    /**\n     * addSettingItem dynamically adds a single setting item\n     * @param string $owner\n     * @param string $code\n     * @param array  $definitions\n     */\n    public function addSettingItem($owner, $code, array $definition)\n    {\n        $itemKey = $this->makeItemKey($owner, $code);\n\n        if (isset($this->items[$itemKey])) {\n            $definition = array_merge((array) $this->items[$itemKey], $definition);\n        }\n\n        $item = array_merge($definition, [\n            'code' => $code,\n            'owner' => $owner\n        ]);\n\n        // Link to the generic settings page if a URL is not provided\n        if (isset($item['class']) && !isset($item['url'])) {\n            $uri = [];\n\n            if (strpos($owner, '.') !== null) {\n                [$author, $plugin] = explode('.', $owner);\n                $uri[] = strtolower($author);\n                $uri[] = strtolower($plugin);\n            }\n            else {\n                $uri[] = strtolower($owner);\n            }\n\n            $uri[] = strtolower($code);\n            $uri =  implode('/', $uri);\n            $item['url'] = Backend::url('system/settings/update/' . $uri);\n        }\n\n        $this->items[$itemKey] = $this->defineSettingsMenuItem($item);\n    }\n\n    /**\n     * defineSettingsMenuItem\n     */\n    protected function defineSettingsMenuItem(array $config): SettingsMenuItem\n    {\n        return (new SettingsMenuItem)->useConfig($config);\n    }\n\n    /**\n     * removeSettingItem using its owner and code\n     * @param string $owner\n     * @param string $code\n     */\n    public function removeSettingItem($owner, $code)\n    {\n        if (!$this->items) {\n            throw new SystemException('Unable to remove settings item before items are loaded.');\n        }\n\n        $itemKey = $this->makeItemKey($owner, $code);\n        unset($this->items[$itemKey]);\n\n        if ($this->groupedItems) {\n            foreach ($this->groupedItems as $category => $items) {\n                if (isset($items[$itemKey])) {\n                    unset($this->groupedItems[$category][$itemKey]);\n                }\n            }\n        }\n    }\n\n    /**\n     * setContext sets the navigation context. The owner specifies the setting items owner\n     * plugin or module in the format Vendor.Module. The code specifies the settings item code.\n     * @param string $owner\n     * @param string $code\n     */\n    public static function setContext($owner, $code)\n    {\n        $instance = self::instance();\n\n        $instance->contextOwner = strtolower($owner);\n\n        $instance->contextItemCode = strtolower($code);\n    }\n\n    /**\n     * getContext returns information about the current settings context.\n     * Returns an object with the following fields:\n     * - itemCode\n     * - owner\n     * @return mixed\n     */\n    public function getContext()\n    {\n        return (object) [\n            'itemCode' => $this->contextItemCode,\n            'owner' => $this->contextOwner\n        ];\n    }\n\n    /**\n     * findSettingItem locates a setting item object by its owner and code.\n     * Returns the item object or FALSE if nothing is found.\n     * @param string $owner\n     * @param string $code\n     * @return mixed\n     */\n    public function findSettingItem($owner, $code)\n    {\n        if ($this->items === null) {\n            $this->loadItems();\n        }\n\n        $owner = strtolower($owner);\n        $code = strtolower($code);\n\n        foreach ($this->items as $item) {\n            if (strtolower($item->owner) === $owner && strtolower($item->code) === $code) {\n                return $item;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * filterItemPermissions removes settings items if the supplied user lacks permission.\n     * Returns the filtered settings items.\n     * @param User $user\n     * @param array $items\n     * @return array\n     */\n    protected function filterItemPermissions($user, array $items)\n    {\n        if (!$user) {\n            return $items;\n        }\n\n        $items = array_filter($items, function ($item) use ($user) {\n            if (!$item->permissions || !count($item->permissions)) {\n                return true;\n            }\n\n            return $user->hasAnyAccess($item->permissions);\n        });\n\n        return $items;\n    }\n\n    /**\n     * makeItemKey is an internal method to make a unique key for an item.\n     * @param  object $item\n     * @return string\n     */\n    protected function makeItemKey($owner, $code)\n    {\n        return strtoupper($owner).'.'.strtoupper($code);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/SettingsMenuItem.php",
    "content": "<?php namespace System\\Classes;\n\nuse Html;\nuse October\\Rain\\Element\\Navigation\\ItemDefinition;\n\n/**\n * SettingsMenuItem\n *\n * @method SettingsMenuItem owner(string $owner) owner\n * @method SettingsMenuItem iconSvg(null|string $iconSvg) iconSvg\n * @method SettingsMenuItem counter(mixed $counter) counter\n * @method SettingsMenuItem counterLabel(null|string $counterLabel) counterLabel\n * @method SettingsMenuItem attributes(array $attributes) attributes\n * @method SettingsMenuItem permissions(array $permissions) permissions\n * @method SettingsMenuItem context(string $context) context as system, mysettings\n * @method SettingsMenuItem class(string $class) class for the model or other management record\n * @method SettingsMenuItem size(string $size) size as tiny, small, medium, large, huge, giant, adaptive\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SettingsMenuItem extends ItemDefinition\n{\n    /**\n     * initDefaultValues for this scope\n     */\n    protected function initDefaultValues()\n    {\n        parent::initDefaultValues();\n\n        $this\n            ->order(500)\n            ->context('system')\n            ->size(750)\n            ->attributes([])\n            ->permissions([])\n        ;\n    }\n\n    /**\n     * itemAttributes returns HTML attributes for the list item\n     */\n    public function itemAttributes(): string\n    {\n        if ($this->attributes === null) {\n            return '';\n        }\n\n        return Html::attributes(array_except($this->attributes, ['target']));\n    }\n\n    /**\n     * linkAttributes returns HTML for the anchor link\n     */\n    public function linkAttributes(): string\n    {\n        if (!isset($this->attributes['target'])) {\n            return '';\n        }\n\n        return Html::attributes(array_only($this->attributes, ['target']));\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/SiteCollection.php",
    "content": "<?php namespace System\\Classes;\n\nuse Site;\nuse October\\Rain\\Database\\Collection;\n\n/**\n * SiteCollection is a collection of sites\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SiteCollection extends Collection\n{\n    /**\n     * isPrimary\n     */\n    public function isPrimary()\n    {\n        return $this->where('is_primary', true);\n    }\n\n    /**\n     * isEnabled\n     */\n    public function isEnabled()\n    {\n        return $this->where('is_enabled', true);\n    }\n\n    /**\n     * isEnabledEdit\n     */\n    public function isEnabledEdit()\n    {\n        return $this->where('is_enabled_edit', true);\n    }\n\n    /**\n     * inGroup\n     */\n    public function inGroup($groupId = null)\n    {\n        if (!$groupId) {\n            return $this;\n        }\n\n        return $this->where('group_id', $groupId);\n    }\n\n    /**\n     * inLocale\n     */\n    public function inLocale($localeCode = null)\n    {\n        if (!$localeCode) {\n            return new static;\n        }\n\n        return $this->filter(function($site) use ($localeCode) {\n            return $site->matchesLocale($localeCode);\n        });\n    }\n\n    /**\n     * inSiteGroup\n     */\n    public function inSiteGroup($siteId = null)\n    {\n        $site = $siteId ? Site::getSiteFromId($siteId) : Site::getSiteFromContext();\n\n        return $this->inGroup($site?->group_id);\n    }\n\n    /**\n     * inSiteLocale\n     */\n    public function inSiteLocale($siteId = null)\n    {\n        $site = $siteId ? Site::getSiteFromId($siteId) : Site::getSiteFromContext();\n\n        return $this->inLocale($site?->hard_locale);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/SiteManager.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse Event;\nuse Config;\nuse Manifest;\nuse System\\Models\\SiteGroup;\nuse System\\Models\\SiteDefinition;\nuse October\\Rain\\Extension\\Extendable;\nuse Exception;\n\n/**\n * SiteManager class manages sites\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SiteManager extends Extendable\n{\n    use \\October\\Rain\\Support\\Traits\\Emitter;\n    use \\System\\Classes\\SiteManager\\HasEditSite;\n    use \\System\\Classes\\SiteManager\\HasActiveSite;\n    use \\System\\Classes\\SiteManager\\HasSiteContext;\n    use \\System\\Classes\\SiteManager\\HasPreferredLanguage;\n\n    /**\n     * @var string keys for manifest storage\n     */\n    const MANIFEST_SITES = 'sites.all';\n\n    /**\n     * @var array sites collection of sites\n     */\n    protected $sites;\n\n    /**\n     * @var array siteIdCache caches sites by their identifier\n     */\n    protected $siteIdCache = [];\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.sites');\n    }\n\n    /**\n     * hasFeature returns true if a multisite feature is enabled\n     */\n    public function hasFeature(?string $name = null): bool\n    {\n        if (!Config::get('multisite.enabled', true)) {\n            return false;\n        }\n\n        if (!$name) {\n            return true;\n        }\n\n        return (bool) Config::get(\"multisite.features.{$name}\", false);\n    }\n\n    /**\n     * getSiteFromRequest locates the site based on the hostname and URI\n     */\n    public function getSiteFromRequest(string $rootUrl, string $uri)\n    {\n        $sites = $this->listEnabled();\n        $host = parse_url($rootUrl, PHP_URL_HOST);\n\n        // Matching either the hostname or app URL\n        $sites = $sites->filter(function($site) use ($host, $rootUrl) {\n            return $site->is_host_restricted\n                ? $site->matchesHostname($host)\n                : $site->matchesBaseUrl($rootUrl);\n        });\n\n        // Begin fallback matching\n        $rootSites = $sites;\n\n        // Matching to the route prefix\n        $sites = $sites->filter(function($site) use ($uri) {\n            return $site->matchesRoutePrefix($uri);\n        });\n\n        // With multiples, handle prefix collisions\n        if ($sites->count() > 1) {\n            $sites = $sites->sortByDesc(function($site) {\n                return $site->is_prefixed ? $site->route_prefix : '';\n            });\n        }\n\n        // Found a root host match without any valid prefix\n        if ($rootSites->count() > 0 && $sites->count() === 0) {\n            $sites = $rootSites->each(function($site) {\n                $site->isFallbackMatch = true;\n            });\n        }\n\n        return $sites->first();\n    }\n\n    /**\n     * getSiteFromId\n     */\n    public function getSiteFromId($id)\n    {\n        if (isset($this->siteIdCache[$id])) {\n            return $this->siteIdCache[$id];\n        }\n\n        return $this->siteIdCache[$id] = $this->listSites()->find($id);\n    }\n\n    /**\n     * getPrimarySite\n     */\n    public function getPrimarySite()\n    {\n        return $this->listSites()->isPrimary()->first();\n    }\n\n    /**\n     * getAnySite returns any site, with priority to primary\n     */\n    public function getAnySite()\n    {\n        return $this->getPrimarySite() ?: $this->listEnabled()->first();\n    }\n\n    /**\n     * hasAnySite returns true if there is a frontend\n     */\n    public function hasAnySite(): bool\n    {\n        return $this->listEnabled()->count() > 0;\n    }\n\n    /**\n     * hasMultiSite returns true if there are multiple sites\n     */\n    public function hasMultiSite(): bool\n    {\n        return $this->listEnabled()->count() > 1;\n    }\n\n    /**\n     * hasSiteGroups\n     */\n    public function hasSiteGroups(): bool\n    {\n        return $this->listSites()->where('group', '<>', null)->unique('group')->count() > 1;\n    }\n\n    /**\n     * listEnabled\n     */\n    public function listEnabled()\n    {\n        return $this->listSites()->isEnabled();\n    }\n\n    /**\n     * listSites\n     */\n    public function listSites()\n    {\n        if ($this->sites !== null) {\n            return $this->sites;\n        }\n\n        if (Manifest::has(self::MANIFEST_SITES)) {\n            $this->sites = $this->listSitesFromManifest(\n                (array) Manifest::get(self::MANIFEST_SITES)\n            );\n        }\n        else {\n            try {\n                $this->sites = SiteDefinition::with('group')->get();\n            }\n            catch (Exception $ex) {\n                return new SiteCollection([SiteDefinition::makeFallbackInstance()]);\n            }\n\n            Manifest::put(\n                self::MANIFEST_SITES,\n                $this->listSitesForManifest($this->sites)\n            );\n        }\n\n        return $this->sites;\n    }\n\n    /**\n     * listSiteIds\n     */\n    public function listSiteIds()\n    {\n        return $this->listSites()->pluck('id')->all();\n    }\n\n    /**\n     * listSiteIdsInGroup\n     */\n    public function listSiteIdsInGroup($siteId = null)\n    {\n        return $this->listSites()->inSiteGroup($siteId)->pluck('id')->all();\n    }\n\n    /**\n     * listSiteIdsInLocale\n     */\n    public function listSiteIdsInLocale($siteId = null)\n    {\n        return $this->listSites()->inSiteLocale($siteId)->pluck('id')->all();\n    }\n\n    /**\n     * listSitesFromManifest\n     */\n    protected function listSitesFromManifest($sites)\n    {\n        $items = [];\n\n        foreach ($sites as $attributes) {\n            $group = null;\n            if ($groupAttrs = array_pull($attributes, 'group')) {\n                $group = new SiteGroup;\n                $group->attributes = $groupAttrs;\n                $group->syncOriginal();\n            }\n\n            $site = new SiteDefinition;\n            $site->setRelation('group', $group);\n            $site->attributes = $attributes;\n            $site->syncOriginal();\n            $items[] = $site;\n        }\n\n        return new SiteCollection($items);\n    }\n\n    /**\n     * listSitesForManifest\n     */\n    protected function listSitesForManifest($sites)\n    {\n        $items = [];\n\n        foreach ($sites as $site) {\n            $store = $site->attributes;\n            $store['group'] = $site->group ? $site->group->attributes : null;\n            $items[] = $store;\n        }\n\n        return $items;\n    }\n\n    /**\n     * broadcastSiteChange is a generic event used when the site changes\n     */\n    protected function broadcastSiteChange($siteId)\n    {\n        // Reload plugin disabled state for the new site context\n        if ($this->hasFeature('system_plugin_sites') || $this->hasFeature('system_plugin_site_groups')) {\n            PluginManager::instance()->reloadDisabledCache();\n        }\n\n        /**\n         * @event site.changed\n         * Fires when the site has been changed.\n         *\n         * Example usage:\n         *\n         *     Event::listen('site.changed', function($id) {\n         *         \\Log::info(\"Site has been changed to $id\");\n         *     });\n         *\n         */\n        Event::fire('site.changed', [$siteId]);\n    }\n\n    /**\n     * resetCache resets any memory or cache involved with the sites\n     */\n    public function resetCache()\n    {\n        $this->sites = null;\n        $this->siteIdCache = [];\n        Manifest::forget(self::MANIFEST_SITES);\n    }\n\n    /**\n     * @deprecated\n     */\n    public function listSiteIdsInContext()\n    {\n        return $this->listSiteIdsInGroup();\n    }\n\n    /**\n     * isModelMultisite returns true if the model implements multisite. If an\n     * attribute it will check that the attribute is multisite enabled (not propagated)\n     */\n    public function isModelMultisite($model, $attribute = null): bool\n    {\n        if (\n            $model &&\n            $model->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n            $model->isMultisiteEnabled()\n        ) {\n            if ($attribute !== null && $model->isAttributePropagatable($attribute)) {\n                return false;\n            }\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * isModelMultisiteGroup returns true if the model implements multisite group scoping\n     */\n    public function isModelMultisiteGroup($model): bool\n    {\n        return $model &&\n            $model->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteGroupInterface::class) &&\n            $model->isMultisiteGroupEnabled();\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/SystemController.php",
    "content": "<?php namespace System\\Classes;\n\nuse Lang;\nuse System;\nuse ApplicationException;\nuse Illuminate\\Routing\\Controller as ControllerBase;\nuse Exception;\nuse Response;\n\n/**\n * SystemController is the master controller for system related routing.\n * It is currently only responsible for serving up the asset combiner contents.\n *\n * @see System\\Classes\\CombineAssets Asset combiner class\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SystemController extends ControllerBase\n{\n    /**\n     * combine JavaScript and StyleSheet asset files\n     * @param string $name Combined file code\n     * @return string Combined content.\n     */\n    public function combine($name)\n    {\n        try {\n            if (!strpos($name, '-')) {\n                throw new ApplicationException(__(\"The combiner file ':name' is not found.\", ['name' => $name]));\n            }\n\n            $parts = explode('-', $name);\n\n            $cacheId = $parts[0];\n\n            $combiner = CombineAssets::instance();\n\n            return $combiner->getContents($cacheId);\n        }\n        catch (Exception $ex) {\n            if (System::checkDebugMode()) {\n                return Response::make(e($ex->getMessage()), 404);\n            }\n            else {\n                return Response::make('/* '.e(Lang::get('system::lang.page.custom_error.help')).' */', 404);\n            }\n        }\n    }\n\n    /**\n     * resize an image\n     * @param string $name Combined file code\n     * @return RedirectResponse\n     */\n    public function resize($name)\n    {\n        try {\n            if (!strpos($name, '-')) {\n                throw new ApplicationException(__(\"The resizer file ':name' is not found.\", ['name' => $name]));\n            }\n\n            $parts = explode('-', $name);\n\n            $cacheId = $parts[0];\n\n            $combiner = ResizeImages::instance();\n\n            return $combiner->getContents($cacheId);\n        }\n        catch (Exception $ex) {\n            if (System::checkDebugMode()) {\n                return Response::make(e($ex->getMessage()), 404);\n            }\n            else {\n                return Response::make('/* '.e(Lang::get('system::lang.page.custom_error.help')).' */', 404);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/UiElement.php",
    "content": "<?php namespace System\\Classes;\n\nuse Closure;\nuse October\\Rain\\Element\\ElementBase;\n\n/**\n * @deprecated\n */\nclass UiElement extends ElementBase\n{\n    use \\System\\Traits\\ElementRenderer;\n\n    /**\n     * __construct\n     */\n    public function __construct($body = null)\n    {\n        if (\n            is_string($body) ||\n            $body instanceof Closure ||\n            $body instanceof UiElement\n        ) {\n            $this->body($body);\n        }\n\n        parent::__construct([]);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/UiFactory.php",
    "content": "<?php namespace System\\Classes;\n\n/**\n * UiFactory creates view-based UI components.\n *\n * Usage:\n *\n *     <?= UiFactory::button(label: 'Save', primary: true) ?>\n *\n *     <?php UiFactory::card(title: 'Settings')->slot() ?>\n *         <p>Content</p>\n *     <?php UiFactory::end() ?>\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass UiFactory\n{\n    use \\System\\Classes\\UiFactory\\HasInputs;\n    use \\System\\Classes\\UiFactory\\HasButtons;\n\n    /**\n     * slot switches to a named slot on the current component\n     */\n    public static function slot(string $name): void\n    {\n        ViewComponent::captureSlot($name);\n    }\n\n    /**\n     * end closes the current component and renders it\n     */\n    public static function end(): void\n    {\n        ViewComponent::endComponent();\n    }\n\n    /**\n     * callout\n     */\n    public static function callout()\n    {\n        return new \\System\\Classes\\UiFactory\\Migrate\\Callout();\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/UpdateManager.php",
    "content": "<?php namespace System\\Classes;\n\nuse App;\nuse Date;\nuse File;\nuse Event;\nuse Schema;\nuse Config;\nuse System as SystemHelper;\nuse Cms\\Classes\\ThemeManager;\nuse System\\Models\\Parameter;\nuse System\\Models\\PluginVersion;\nuse Exception;\n\n/**\n * UpdateManager handles the CMS install and update process.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass UpdateManager\n{\n    use \\System\\Traits\\NoteMaker;\n    use \\System\\Classes\\UpdateManager\\ManagesApp;\n    use \\System\\Classes\\UpdateManager\\ManagesModules;\n    use \\System\\Classes\\UpdateManager\\ManagesPlugins;\n    use \\System\\Classes\\UpdateManager\\ManagesThemes;\n    use \\System\\Classes\\UpdateManager\\ManagesProject;\n    use \\System\\Classes\\UpdateManager\\HasGatewayAccess;\n\n    /**\n     * @var string baseDirectory for application.\n     */\n    protected $baseDirectory;\n\n    /**\n     * @var string tempDirectory for working.\n     */\n    protected $tempDirectory;\n\n    /**\n     * @var PluginManager pluginManager\n     */\n    protected $pluginManager;\n\n    /**\n     * @var ThemeManager themeManager\n     */\n    protected $themeManager;\n\n    /**\n     * @var VersionManager versionManager\n     */\n    protected $versionManager;\n\n    /**\n     * @var int migrateCount number of migrations that occurred.\n     */\n    protected $migrateCount = 0;\n\n    /**\n     * __construct this class\n     */\n    public function __construct()\n    {\n        $this->pluginManager = PluginManager::instance();\n        $this->themeManager = SystemHelper::hasModule('Cms') ? ThemeManager::instance() : null;\n        $this->versionManager = VersionManager::instance();\n        $this->tempDirectory = temp_path();\n        $this->baseDirectory = base_path();\n\n        // Ensure temp directory exists\n        if (!File::isDirectory($this->tempDirectory)) {\n            File::makeDirectory($this->tempDirectory, 0755, true);\n        }\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.updater');\n    }\n\n    /**\n     * update creates the migration table and updates.\n     */\n    public function update()\n    {\n        $this->migrateCount = 0;\n\n        $firstUp = !Schema::hasTable($this->getMigrationTableName());\n        if ($firstUp) {\n            $this->getRepository()->createRepository();\n            $this->note('Migration table created');\n        }\n\n        // Update modules\n        $this->migrateModules();\n\n        // Update plugins\n        $this->migratePlugins();\n\n        // Update app\n        $this->migrateApp();\n\n        // Reset update count\n        Parameter::set('system::update.count', 0);\n\n        // Nothing updated\n        if ($this->migrateCount === 0) {\n            $this->note('<info>Nothing to migrate.</info>');\n        }\n\n        /**\n         * @event system.updater.migrate\n         * Provides an opportunity to add migration logic to updater\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.updater.migrate', function ((\\System\\Classes\\UpdateManager) $updateManager) {\n         *         $updateManager->note('Done');\n         *     });\n         *\n         */\n        Event::fire('system.updater.migrate', [$this]);\n\n        // Seeds only run once\n        if (!$firstUp) {\n            return;\n        }\n\n        // Seed modules\n        $this->seedModules();\n\n        // Seed app\n        $this->seedApp();\n    }\n\n    /**\n     * check for new updates and returns the amount of unapplied updates\n     */\n    public function check(bool $force = false): int\n    {\n        $versions = $this->checkVersions($force);\n\n        return (int) array_get($versions, 'count', 0);\n    }\n\n    /**\n     * checkVersions checks for available versions\n     */\n    public function checkVersions(bool $force = false): array\n    {\n        // No key is set, return a skeleton schema\n        if (!Parameter::get('system::project.key')) {\n            return [\n                'count' => 0,\n                'core' => null,\n                'plugins' => []\n            ];\n        }\n\n        // Retry period not passed, skipping.\n        if (\n            !$force &&\n            ($retryTimestamp = Parameter::get('system::update.retry')) &&\n            Date::createFromTimeStamp($retryTimestamp)->isFuture()\n        ) {\n            return (array) Parameter::get('system::update.versions');\n        }\n\n        // Ask again\n        try {\n            $result = $this->requestUpdateList();\n            $versions['count'] = array_get($result, 'update', 0);\n            $versions['core'] = array_get($result, 'core.version', null);\n            $versions['plugins'] = [];\n            foreach (array_get($result, 'plugins') as $code => $plugin) {\n                $versions['plugins'][$code] = array_get($plugin, 'version');\n            }\n        }\n        catch (Exception $ex) {\n            $versions = [\n                'count' => 0,\n                'core' => null,\n                'plugins' => []\n            ];\n        }\n\n        // Remember update count, set retry date\n        Parameter::set('system::update.versions', $versions);\n        Parameter::set('system::update.retry', Date::now()->addHours(24)->timestamp);\n\n        return $versions;\n    }\n\n    /**\n     * requestUpdateList used for checking for new updates.\n     * @param  boolean $force Request application and plugins hash list regardless of version.\n     * @return array\n     */\n    public function requestUpdateList()\n    {\n        $installed = PluginVersion::all();\n        $versions = $installed->pluck('version', 'code')->all();\n        $names = $installed->pluck('name', 'code')->all();\n        $icons = $installed->pluck('icon', 'code')->all();\n        $build = Parameter::get('system::core.build');\n        $themes = [];\n\n        if ($this->themeManager) {\n            $themes = array_keys($this->themeManager->getInstalled());\n        }\n\n        $params = [\n            'plugins' => base64_encode(json_encode($versions)),\n            'themes' => base64_encode(json_encode($themes)),\n            'version' => SystemHelper::VERSION,\n            'build' => $build\n        ];\n\n        $result = [];\n        $serverData = $this->requestServerData('project/check', $params);\n        $updateCount = (int) array_get($serverData, 'update', 0);\n        $canUpdate = (bool) array_get($serverData, 'is_active', false);\n\n        // Inject known core build\n        if ($core = array_get($serverData, 'core')) {\n            $core['old_build'] = $this->getCurrentVersion();\n            $result['core'] = $core;\n        }\n\n        // Inject the application's known plugin name and version\n        $plugins = [];\n        foreach (array_get($serverData, 'plugins', []) as $code => $info) {\n            $info['name'] = $names[$code] ?? $code;\n            $info['old_version'] = $versions[$code] ?? false;\n            $info['icon'] = $icons[$code] ?? false;\n            $plugins[$code] = $info;\n            $updateCount++;\n        }\n        $result['plugins'] = $plugins;\n\n        // Recalculate the update counter\n        $result['canUpdate'] = $canUpdate !== true;\n        $result['hasUpdates'] = $updateCount > 0;\n        $result['update'] = $updateCount;\n        Parameter::set('system::update.count', $updateCount);\n        Parameter::set('system::project.is_active', $canUpdate);\n\n        return $result;\n    }\n\n    /**\n     * getComposerUrl returns the endpoint for composer\n     */\n    public function getComposerUrl(bool $withProtocol = true): string\n    {\n        $gateway = (string) Config::get('system.composer_gateway', 'gateway.octobercms.com');\n\n        return $withProtocol ? 'https://'.$gateway : $gateway;\n    }\n\n    /**\n     * uninstall rolls back all modules and plugins.\n     */\n    public function uninstall()\n    {\n        // Rollback app\n        $this->getMigrator()->reset([app_path('database/migrations')]);\n\n        // Rollback plugins\n        $plugins = array_reverse($this->pluginManager->getPlugins());\n        foreach ($plugins as $name => $plugin) {\n            $this->rollbackPlugin($name);\n        }\n\n        // Register module migration files\n        $paths = [];\n\n        foreach (SystemHelper::listModules() as $module) {\n            $paths[] = base_path('modules/'.strtolower($module).'/database/migrations');\n        }\n\n        // Rollback modules\n        $this->getMigrator()->reset($paths);\n\n        Schema::dropIfExists($this->getMigrationTableName());\n    }\n\n    /**\n     * getMigrationTableName returns the migration table name\n     */\n    public function getMigrationTableName(): string\n    {\n        return Config::get('database.migrations.table', 'migrations');\n    }\n\n    /**\n     * getComposerVersionConstraint\n     */\n    protected function getComposerVersionConstraint($versionStr)\n    {\n        return $versionStr ? '^'.$versionStr : '*';\n    }\n\n    /**\n     * getMigrator returns the migrator service\n     * @return \\Illuminate\\Database\\Migrations\\Migrator\n     */\n    protected function getMigrator()\n    {\n        $migrator = App::make('migrator');\n\n        if (isset($this->notesOutput)) {\n            $migrator->setOutput($this->notesOutput);\n        }\n\n        return $migrator;\n    }\n\n    /**\n     * getRepository returns the migrator repository\n     * @return \\Illuminate\\Database\\Migrations\\DatabaseMigrationRepository\n     */\n    protected function getRepository()\n    {\n        return App::make('migration.repository');\n    }\n\n    /**\n     * getFilePath calculates a file path for a file code\n     * @param string $fileCode\n     * @return string\n     */\n    protected function getFilePath($fileCode)\n    {\n        return temp_path(md5($fileCode) . '.arc');\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/VersionManager.php",
    "content": "<?php namespace System\\Classes;\n\nuse Db;\nuse App;\nuse Date;\nuse File;\nuse Yaml;\nuse Exception;\n\n/**\n * VersionManager manages the versions and database updates for plugins\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass VersionManager\n{\n    use \\System\\Traits\\NoteMaker;\n\n    /**\n     * Value when no updates are found.\n     */\n    const NO_VERSION_VALUE = 0;\n\n    /**\n     * Morph types for history table.\n     */\n    const HISTORY_TYPE_COMMENT = 'comment';\n    const HISTORY_TYPE_SCRIPT = 'script';\n\n    /**\n     * @var array fileVersions cache of plugin versions as files.\n     */\n    protected $fileVersions;\n\n    /**\n     * @var array databaseVersions cache of database versions\n     */\n    protected $databaseVersions;\n\n    /**\n     * @var array databaseHistory cache of database history\n     */\n    protected $databaseHistory;\n\n    /**\n     * @var \\System\\Classes\\PluginManager\n     */\n    protected $pluginManager;\n\n    /**\n     * __construct this class\n     */\n    public function __construct()\n    {\n        $this->pluginManager = PluginManager::instance();\n    }\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.versions');\n    }\n\n    /**\n     * updatePlugin updates a single plugin by its code or object with it's latest changes\n     * If the $toVersion parameter is specified, the process stops after\n     * the specified version is applied.\n     */\n    public function updatePlugin($plugin, $toVersion = null)\n    {\n        $code = is_string($plugin) ? $plugin : $this->pluginManager->getIdentifier($plugin);\n\n        if (!$this->hasVersionFile($code)) {\n            return false;\n        }\n\n        $currentVersion = $this->getLatestFileVersion($code);\n        $databaseVersion = $this->getDatabaseVersion($code);\n\n        // No updates needed\n        if ((string) $currentVersion === (string) $databaseVersion) {\n            return false;\n        }\n\n        $this->note($code);\n\n        $newUpdates = $this->getNewFileVersions($code, $databaseVersion);\n\n        foreach ($newUpdates as $version => $details) {\n            $this->applyPluginUpdate($code, $version, $details);\n\n            if ($toVersion === $version) {\n                return true;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * listNewVersions returns a list of unapplied plugin versions\n     */\n    public function listNewVersions($plugin)\n    {\n        $code = is_string($plugin) ? $plugin : $this->pluginManager->getIdentifier($plugin);\n\n        if (!$this->hasVersionFile($code)) {\n            return [];\n        }\n\n        $databaseVersion = $this->getDatabaseVersion($code);\n\n        return $this->getNewFileVersions($code, $databaseVersion);\n    }\n\n    /**\n     * hasVersion will return true if a plugin has been registered at a supplied version\n     */\n    public function hasVersion($plugin, string $version): bool\n    {\n        $code = is_string($plugin) ? $plugin : $this->pluginManager->getIdentifier($plugin);\n\n        foreach ($this->getDatabaseHistory($code) as $history) {\n            if ($history->version === $version) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * getLatestVersion returns the latest version for a plugin\n     * @param string $plugin\n     */\n    public function getLatestVersion($pluginCode)\n    {\n        $pluginCode = $this->pluginManager->normalizeIdentifier($pluginCode);\n\n        return $this->getLatestFileVersion($pluginCode);\n    }\n\n    /**\n     * applyPluginUpdate applies a single version update to a plugin.\n     */\n    protected function applyPluginUpdate($code, $version, $details)\n    {\n        $version = $this->normalizeVersion($version);\n\n        [$comments, $scripts] = $this->extractScriptsAndComments($details);\n\n        // Apply scripts, if any\n        foreach ($scripts as $script) {\n            if ($this->hasDatabaseHistory($code, $version, $script)) {\n                continue;\n            }\n\n            $this->applyDatabaseScript($code, $version, $script);\n        }\n\n        // Register the comment and update the version\n        if (!$this->hasDatabaseHistory($code, $version)) {\n            foreach ($comments as $comment) {\n                $this->applyDatabaseComment($code, $version, $comment);\n\n                $this->note(sprintf('- <info>v%s</info> %s', $version, $comment));\n            }\n        }\n\n        $this->setDatabaseVersion($code, $version);\n    }\n\n    /**\n     * removePlugin removes and packs down a plugin from the system. Files are left intact\n     * If the $toVersion parameter is specified, the process stops after the specified\n     * version is rolled back.\n     */\n    public function removePlugin($plugin, $toVersion = null): bool\n    {\n        // @todo this API is used as part of the builder plugin and could be replaced\n        // with the removePluginToVersion method in a later deprecation review along\n        // with creating a updatePluginToVersion API method -sg\n        if ($toVersion) {\n            return $this->removePluginToVersion($plugin, $toVersion, true);\n        }\n\n        $code = is_string($plugin) ? $plugin : $this->pluginManager->getIdentifier($plugin);\n\n        if (!$this->hasVersionFile($code)) {\n            return false;\n        }\n\n        $pluginHistory = $this->getDatabaseHistory($code);\n        $pluginHistory = array_reverse($pluginHistory);\n\n        foreach ($pluginHistory as $history) {\n            if ($history->type === self::HISTORY_TYPE_COMMENT) {\n                $this->removeDatabaseComment($code, $history->version);\n            }\n            elseif ($history->type === self::HISTORY_TYPE_SCRIPT) {\n                $this->removeDatabaseScript($code, $history->version, $history->detail);\n            }\n        }\n\n        $this->setDatabaseVersion($code);\n\n        $this->resetCacheForCode($code);\n\n        return true;\n    }\n\n    /**\n     * removePluginToVersion will remove the plugin version up to a specified one,\n     * you may also specify to include that version itself as part of the rollback.\n     */\n    public function removePluginToVersion($plugin, string $toVersion, bool $includeVersion = false): bool\n    {\n        $code = is_string($plugin) ? $plugin : $this->pluginManager->getIdentifier($plugin);\n\n        if (!$this->hasVersionFile($code)) {\n            return false;\n        }\n\n        $pluginHistory = $this->getDatabaseHistory($code);\n        $pluginHistory = array_reverse($pluginHistory);\n\n        $stopOnNextVersion = false;\n        $latestVersion = null;\n\n        foreach ($pluginHistory as $history) {\n            // Stop if the $toVersion filter is met and we don't want to include\n            // that version itself in the rollback.\n            if (!$includeVersion && $history->version === $toVersion) {\n                $latestVersion = $history->version;\n                break;\n            }\n\n            // Stop if the $toVersion value was found and this is a new version.\n            // The history could contain multiple items for a single version\n            // (comments and scripts).\n            if ($stopOnNextVersion && $history->version !== $toVersion) {\n                $latestVersion = $history->version;\n                break;\n            }\n\n            if ($history->type === self::HISTORY_TYPE_COMMENT) {\n                $this->removeDatabaseComment($code, $history->version);\n            }\n            elseif ($history->type === self::HISTORY_TYPE_SCRIPT) {\n                $this->removeDatabaseScript($code, $history->version, $history->detail);\n            }\n\n            if ($toVersion === $history->version) {\n                $stopOnNextVersion = true;\n            }\n        }\n\n        $this->setDatabaseVersion($code, $latestVersion);\n\n        $this->resetCacheForCode($code);\n\n        return true;\n    }\n\n    /**\n     * resetCacheForCode will reset the cache for a specified plugin code\n     */\n    protected function resetCacheForCode(string $code): void\n    {\n        if (isset($this->fileVersions[$code])) {\n            unset($this->fileVersions[$code]);\n        }\n        if (isset($this->databaseVersions[$code])) {\n            unset($this->databaseVersions[$code]);\n        }\n        if (isset($this->databaseHistory[$code])) {\n            unset($this->databaseHistory[$code]);\n        }\n    }\n\n    /**\n     * purgePlugin deletes all records from the version and history tables for a plugin\n     * @param  string $pluginCode Plugin code\n     * @return void\n     */\n    public function purgePlugin($pluginCode)\n    {\n        $versions = Db::table('system_plugin_versions')->where('code', $pluginCode);\n        if ($countVersions = $versions->count()) {\n            $versions->delete();\n        }\n\n        $history = Db::table('system_plugin_history')->where('code', $pluginCode);\n        if ($countHistory = $history->count()) {\n            $history->delete();\n        }\n\n        return ($countHistory + $countVersions) > 0;\n    }\n\n    //\n    // File representation\n    //\n\n    /**\n     * getLatestFileVersion returns the latest version of a plugin from its version file\n     */\n    protected function getLatestFileVersion($code)\n    {\n        $versionInfo = $this->getFileVersions($code);\n        if (!$versionInfo) {\n            return self::NO_VERSION_VALUE;\n        }\n\n        return trim(key(array_slice($versionInfo, -1, 1)));\n    }\n\n    /**\n     * getNewFileVersions returns any new versions from a supplied version, ie. unapplied versions\n     */\n    protected function getNewFileVersions($code, $version = null)\n    {\n        if ($version === null) {\n            $version = self::NO_VERSION_VALUE;\n        }\n\n        $versions = $this->getFileVersions($code);\n\n        // Quick check\n        $position = array_search($version, array_keys($versions));\n\n        // Version compare check\n        if ($position === false) {\n            foreach (array_keys($versions) as $index => $fileVersion) {\n                if (version_compare((string) $version, (string) $fileVersion) !== -1) {\n                    $position = $index;\n                }\n            }\n        }\n\n        if ($position === false) {\n            $position = -1;\n        }\n\n        return array_slice($versions, ++$position);\n    }\n\n    /**\n     * getFileVersions returns all versions of a plugin from its version file\n     */\n    protected function getFileVersions($code)\n    {\n        if ($this->fileVersions !== null && array_key_exists($code, $this->fileVersions)) {\n            return $this->fileVersions[$code];\n        }\n\n        // Attempt to parse version information\n        $versionInfo = [];\n\n        if ($this->hasVersionFile($code)) {\n            $versionInfo = Yaml::parseFile($this->getVersionFile($code));\n        }\n\n        if (!is_array($versionInfo)) {\n            $versionInfo = [];\n        }\n\n        // Sort result\n        uksort($versionInfo, function ($a, $b) {\n            return version_compare((string) $a, (string) $b);\n        });\n\n        // Normalize result\n        $result = [];\n\n        foreach ($versionInfo as $version => $info) {\n            $result[$this->normalizeVersion($version)] = $info;\n        }\n\n        return $this->fileVersions[$code] = $result;\n    }\n\n    /**\n     * getVersionFile returns the absolute path to a version file for a plugin, the string\n     * is empty if no file is found or resolved\n     */\n    protected function getVersionFile($code): string\n    {\n        $pluginPath = $this->pluginManager->getPluginPath($code);\n        if (!$pluginPath) {\n            return '';\n        }\n\n        return $pluginPath . '/updates/version.yaml';\n    }\n\n    /**\n     * hasVersionFile checks if a plugin has a version file\n     */\n    protected function hasVersionFile($code): bool\n    {\n        if ($versionFile = $this->getVersionFile($code)) {\n            return File::isFile($versionFile);\n        }\n\n        return false;\n    }\n\n    //\n    // Database representation\n    //\n\n    /**\n     * getDatabaseVersion returns the latest version of a plugin from the database\n     */\n    protected function getDatabaseVersion($code)\n    {\n        if ($this->databaseVersions === null) {\n            $this->databaseVersions = Db::table('system_plugin_versions')->pluck('version', 'code')->all();\n        }\n\n        if (!isset($this->databaseVersions[$code])) {\n            $this->databaseVersions[$code] = Db::table('system_plugin_versions')\n                ->where('code', $code)\n                ->value('version')\n            ;\n        }\n\n        return $this->databaseVersions[$code] ?? self::NO_VERSION_VALUE;\n    }\n\n    /**\n     * setDatabaseVersion updates a plugin version in the database, if the version\n     * is not specified then the version is reset to empty.\n     */\n    protected function setDatabaseVersion($code, $version = null)\n    {\n        $currentVersion = $this->getDatabaseVersion($code);\n\n        if ($version && !$currentVersion) {\n            Db::table('system_plugin_versions')->insert([\n                'code' => $code,\n                'version' => $version,\n                'created_at' => Date::now()\n            ]);\n        }\n        elseif ($version && $currentVersion) {\n            Db::table('system_plugin_versions')->where('code', $code)->update([\n                'version' => $version,\n                'created_at' => Date::now()\n            ]);\n        }\n        elseif ($currentVersion) {\n            Db::table('system_plugin_versions')->where('code', $code)->delete();\n        }\n\n        $this->databaseVersions[$code] = $version;\n    }\n\n    /**\n     * applyDatabaseComment registers a database update comment in the history table\n     */\n    protected function applyDatabaseComment($code, $version, $comment)\n    {\n        Db::table('system_plugin_history')->insert([\n            'code' => $code,\n            'type' => self::HISTORY_TYPE_COMMENT,\n            'version' => $version,\n            'detail' => $comment,\n            'created_at' => Date::now()\n        ]);\n    }\n\n    /**\n     * removeDatabaseComment removes a database update comment in the history table\n     */\n    protected function removeDatabaseComment($code, $version)\n    {\n        Db::table('system_plugin_history')\n            ->where('code', $code)\n            ->where('type', self::HISTORY_TYPE_COMMENT)\n            ->where('version', $version)\n            ->delete();\n    }\n\n    /**\n     * applyDatabaseScript registers a database update script in the history table\n     */\n    protected function applyDatabaseScript($code, $version, $script)\n    {\n        // Execute the database PHP script\n        $updateFile = $this->pluginManager->getPluginPath($code) . '/updates/' . $script;\n\n        if (!File::isFile($updateFile)) {\n            $this->note('- <error>v' . $version . ':  Migration file \"' . $script . '\" not found</error>');\n            return;\n        }\n\n        try {\n            $this->getUpdater()->setUp($updateFile);\n\n            Db::table('system_plugin_history')->insert([\n                'code' => $code,\n                'type' => self::HISTORY_TYPE_SCRIPT,\n                'version' => $version,\n                'detail' => $script,\n                'created_at' => Date::now()\n            ]);\n        }\n        catch (Exception $ex) {\n            $this->note('- <error>v' . $version . ':  Migration \"' . $script . '\" failed</error>');\n            throw $ex;\n        }\n    }\n\n    /**\n     * removeDatabaseScript removes a database update script in the history table\n     */\n    protected function removeDatabaseScript($code, $version, $script)\n    {\n        // Execute the database PHP script\n        $updateFile = $this->pluginManager->getPluginPath($code) . '/updates/' . $script;\n\n        $this->getUpdater()->packDown($updateFile);\n\n        Db::table('system_plugin_history')\n            ->where('code', $code)\n            ->where('type', self::HISTORY_TYPE_SCRIPT)\n            ->where('version', $version)\n            ->where('detail', $script)\n            ->delete()\n        ;\n    }\n\n    /**\n     * getDatabaseHistory returns all the update history for a plugin\n     */\n    protected function getDatabaseHistory($code)\n    {\n        if ($this->databaseHistory !== null && array_key_exists($code, $this->databaseHistory)) {\n            return $this->databaseHistory[$code];\n        }\n\n        $historyInfo = Db::table('system_plugin_history')\n            ->where('code', $code)\n            ->orderBy('id')\n            ->get()\n            ->all()\n        ;\n\n        return $this->databaseHistory[$code] = $historyInfo;\n    }\n\n    /**\n     * hasDatabaseHistory checks if a plugin has an applied update version\n     */\n    protected function hasDatabaseHistory($code, $version, $script = null)\n    {\n        $historyInfo = $this->getDatabaseHistory($code);\n        if (!$historyInfo) {\n            return false;\n        }\n\n        foreach ($historyInfo as $history) {\n            if ((string) $history->version !== (string) $version) {\n                continue;\n            }\n\n            if ($history->type === self::HISTORY_TYPE_COMMENT && !$script) {\n                return true;\n            }\n\n            if ($history->type === self::HISTORY_TYPE_SCRIPT && $history->detail === $script) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * normalizeVersion checks some versions start with v and others not\n     */\n    protected function normalizeVersion($version): string\n    {\n        return rtrim(ltrim((string) $version, 'v'), '.');\n    }\n\n    /**\n     * extractScriptsAndComments extracts script and comments from version details\n     * @return array\n     */\n    protected function extractScriptsAndComments($details)\n    {\n        if (is_array($details)) {\n            $fileNamePattern = \"/^[a-z0-9\\_\\-\\.\\/\\\\\\]+\\.php$/i\";\n\n            $comments = array_values(array_filter($details, function ($detail) use ($fileNamePattern) {\n                return !preg_match($fileNamePattern, $detail);\n            }));\n\n            $scripts = array_values(array_filter($details, function ($detail) use ($fileNamePattern) {\n                return preg_match($fileNamePattern, $detail);\n            }));\n        }\n        else {\n            $comments = (array) $details;\n            $scripts = [];\n        }\n\n        return [$comments, $scripts];\n    }\n\n    /**\n     * getUpdater returns the updater service\n     * @return \\October\\Rain\\Database\\Updater\n     */\n    protected function getUpdater()\n    {\n        return App::make('db.updater');\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/ViewComponent.php",
    "content": "<?php namespace System\\Classes;\n\nuse Illuminate\\Support\\Str;\nuse Illuminate\\View\\ComponentAttributeBag;\nuse Illuminate\\Support\\Facades\\View;\n\n/**\n * ViewComponent is a lightweight component that renders from a view file.\n *\n * Supports inline rendering and slot-based content capture:\n *\n *     <?= UiFactory::button(label: 'Save') ?>\n *\n *     <?php UiFactory::card(title: 'Hey')->slot() ?>\n *         <p>Content</p>\n *     <?php UiFactory::end() ?>\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ViewComponent\n{\n    /**\n     * @var string name of the component\n     */\n    protected string $name;\n\n    /**\n     * @var array props passed to the component view\n     */\n    protected array $props = [];\n\n    /**\n     * @var array attributes passed through to the AttributeBag\n     */\n    protected array $attributes = [];\n\n    /**\n     * @var array slots captured content keyed by slot name\n     */\n    protected array $slots = [];\n\n    /**\n     * @var string|null currentSlot being captured\n     */\n    protected ?string $currentSlot = null;\n\n    /**\n     * @var array stack of active components for nesting support\n     */\n    protected static array $stack = [];\n    /**\n     * __construct\n     */\n    public function __construct(string $name, array $props = [], array $attributes = [])\n    {\n        $this->name = $name;\n        $this->props = $props;\n        $this->attributes = $attributes;\n    }\n\n    /**\n     * slot starts capturing content for a named slot\n     */\n    public function slot(string $name = 'default'): void\n    {\n        ob_start();\n        $this->currentSlot = $name;\n        static::$stack[] = $this;\n    }\n\n    /**\n     * captureSlot switches to a new named slot, closing the previous one\n     */\n    public static function captureSlot(string $name): void\n    {\n        $instance = end(static::$stack);\n\n        if ($instance === false) {\n            throw new \\RuntimeException(\"Cannot capture slot '{$name}': no active component.\");\n        }\n\n        // Close previous slot\n        if ($instance->currentSlot !== null) {\n            $instance->slots[$instance->currentSlot] = ob_get_clean();\n        }\n\n        // Start new slot\n        ob_start();\n        $instance->currentSlot = $name;\n    }\n\n    /**\n     * endComponent captures the final slot and renders the component\n     */\n    public static function endComponent(): void\n    {\n        $instance = array_pop(static::$stack);\n\n        if ($instance === null) {\n            throw new \\RuntimeException(\"Cannot end component: no active component.\");\n        }\n\n        // Capture final slot\n        if ($instance->currentSlot !== null) {\n            $instance->slots[$instance->currentSlot] = ob_get_clean();\n        }\n\n        echo $instance->render();\n    }\n    /**\n     * __call supports fluent API for setting props\n     */\n    public function __call(string $method, array $args): static\n    {\n        $this->props[$method] = $args[0] ?? true;\n        return $this;\n    }\n\n    /**\n     * __toString renders the component inline\n     */\n    public function __toString(): string\n    {\n        return $this->render();\n    }\n\n    /**\n     * render the component view file and return HTML\n     */\n    protected function render(): string\n    {\n        $kebabAttributes = [];\n        foreach ($this->attributes as $key => $value) {\n            $kebabAttributes[Str::kebab($key)] = $value;\n        }\n\n        $attributes = new ComponentAttributeBag($kebabAttributes);\n        $slots = $this->slots;\n        $slot = $slots['default'] ?? '';\n\n        $vars = $this->props;\n        $vars['attributes'] = $attributes;\n        $vars['slots'] = $slots;\n        $vars['slot'] = $slot;\n\n        return View::make(\"system::ui.{$this->name}\", $vars)->render();\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/presetmanager/Dates.php",
    "content": "<?php namespace System\\Classes\\PresetManager;\n\nuse DateTime as PhpDateTime;\nuse DateTimeZone;\n\n/**\n * Dates is a resource file with minimal dependencies\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Dates\n{\n    /**\n     * timezones collection\n     */\n    public static function timezones(): array\n    {\n        $timezoneIdentifiers = DateTimeZone::listIdentifiers();\n        $utcTime = new PhpDateTime('now', new DateTimeZone('UTC'));\n\n        $tempTimezones = [];\n        foreach ($timezoneIdentifiers as $timezoneIdentifier) {\n            $currentTimezone = new DateTimeZone($timezoneIdentifier);\n\n            $tempTimezones[] = [\n                'offset' => (int) $currentTimezone->getOffset($utcTime),\n                'identifier' => $timezoneIdentifier\n            ];\n        }\n\n        // Sort the array by offset, identifier ascending\n        usort($tempTimezones, function ($a, $b) {\n            return $a['offset'] === $b['offset']\n                ? strcmp($a['identifier'], $b['identifier'])\n                : $a['offset'] - $b['offset'];\n        });\n\n        $timezoneList = [];\n        foreach ($tempTimezones as $tz) {\n            $sign = $tz['offset'] == 0 ? '' : ($tz['offset'] > 0 ? '+' : '-');\n            $offset = gmdate('H:i', abs($tz['offset']));\n            $timezoneList[$tz['identifier']] = '(' . $sign . $offset . ') ' . str_replace('_', ' ', $tz['identifier']);\n        }\n\n        return $timezoneList;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/presetmanager/Icons.php",
    "content": "<?php namespace System\\Classes\\PresetManager;\n\n/**\n * Icons is a resource file with minimal dependencies\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Icons\n{\n    /**\n     * icons collection\n     */\n    public static function icons(): array\n    {\n        $icons = json_decode(file_get_contents(__DIR__.'/icons.json'), true);\n\n        $result = [];\n        foreach ((array) $icons as $icon) {\n            $result[\"oc-icon-{$icon}\"] = [$icon, \"oc-icon-{$icon}\"];\n        }\n\n        // Sort icons alphabetically\n        asort($result);\n\n        return $result;\n    }\n\n    /**\n     * iconsPhosphor\n     */\n    public static function iconsPhosphor(): array\n    {\n        $icons = json_decode(file_get_contents(__DIR__.'/icons-phosphor.json'), true);\n\n        $result = [];\n        foreach ((array) $icons as $icon) {\n            $result[\"ph ph-{$icon}\"] = [$icon, \"ph ph-{$icon}\"];\n        }\n\n        // Sort icons alphabetically\n        asort($result);\n\n        return $result;\n    }\n\n    /**\n     * bootstrapIcons\n     */\n    public static function bootstrapIcons(): array\n    {\n        $icons = json_decode(file_get_contents(__DIR__.'/icons-bootstrap.json'), true);\n\n        $result = [];\n        foreach ((array) $icons as $icon) {\n            $result[\"bi-{$icon}\"] = [$icon, \"bi bi-{$icon}\"];\n        }\n\n        // Sort icons alphabetically\n        asort($result);\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/presetmanager/Locales.php",
    "content": "<?php namespace System\\Classes\\PresetManager;\n\nuse Lang;\n\n/**\n * Locales is a resource file with minimal dependencies\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Locales\n{\n    /**\n     * locales returns list of available locales\n     */\n    public static function locales(): array\n    {\n        $locales = [\n            'ar'    => Lang::get('system::lang.locale.ar'),\n            'be'    => Lang::get('system::lang.locale.be'),\n            'bg'    => Lang::get('system::lang.locale.bg'),\n            'ca'    => Lang::get('system::lang.locale.ca'),\n            'cs'    => Lang::get('system::lang.locale.cs'),\n            'da'    => Lang::get('system::lang.locale.da'),\n            'de'    => Lang::get('system::lang.locale.de'),\n            'el'    => Lang::get('system::lang.locale.el'),\n            'en'    => Lang::get('system::lang.locale.en'),\n            'en-au' => Lang::get('system::lang.locale.en-au'),\n            'en-ca' => Lang::get('system::lang.locale.en-ca'),\n            'en-gb' => Lang::get('system::lang.locale.en-gb'),\n            'es'    => Lang::get('system::lang.locale.es'),\n            'es-ar' => Lang::get('system::lang.locale.es-ar'),\n            'et'    => Lang::get('system::lang.locale.et'),\n            'fa'    => Lang::get('system::lang.locale.fa'),\n            'fi'    => Lang::get('system::lang.locale.fi'),\n            'fr'    => Lang::get('system::lang.locale.fr'),\n            'fr-ca' => Lang::get('system::lang.locale.fr-ca'),\n            'hr'    => Lang::get('system::lang.locale.hr'),\n            'hu'    => Lang::get('system::lang.locale.hu'),\n            'id'    => Lang::get('system::lang.locale.id'),\n            'it'    => Lang::get('system::lang.locale.it'),\n            'ja'    => Lang::get('system::lang.locale.ja'),\n            'ko'    => Lang::get('system::lang.locale.ko'),\n            'lt'    => Lang::get('system::lang.locale.lt'),\n            'lv'    => Lang::get('system::lang.locale.lv'),\n            'nb-no' => Lang::get('system::lang.locale.nb-no'),\n            'nn-no' => Lang::get('system::lang.locale.nn-no'),\n            'nl'    => Lang::get('system::lang.locale.nl'),\n            'pl'    => Lang::get('system::lang.locale.pl'),\n            'pt-br' => Lang::get('system::lang.locale.pt-br'),\n            'pt-pt' => Lang::get('system::lang.locale.pt-pt'),\n            'ro'    => Lang::get('system::lang.locale.ro'),\n            'ru'    => Lang::get('system::lang.locale.ru'),\n            'sk'    => Lang::get('system::lang.locale.sk'),\n            'sl'    => Lang::get('system::lang.locale.sl'),\n            'sv'    => Lang::get('system::lang.locale.sv'),\n            'th'    => Lang::get('system::lang.locale.th'),\n            'tr'    => Lang::get('system::lang.locale.tr'),\n            'uk'    => Lang::get('system::lang.locale.uk'),\n            'vn'    => Lang::get('system::lang.locale.vn'),\n            'zh-cn' => Lang::get('system::lang.locale.zh-cn'),\n            'zh-tw' => Lang::get('system::lang.locale.zh-tw'),\n        ];\n\n        // Sort locales alphabetically\n        asort($locales);\n\n        foreach ($locales as $code => &$label) {\n            $label = \"{$code} - {$label}\";\n        }\n\n        return $locales;\n    }\n\n    /**\n     * flags returns list of available locales with flag icons\n     */\n    public static function flags(): array\n    {\n        $flags = [\n            'ar'    => 'flag-sa',\n            'be'    => 'flag-by',\n            'bg'    => 'flag-bg',\n            'ca'    => 'flag-es-ct',\n            'cs'    => 'flag-cz',\n            'da'    => 'flag-dk',\n            'de'    => 'flag-de',\n            'el'    => 'flag-gr',\n            'en'    => 'flag-us',\n            'en-au' => 'flag-au',\n            'en-ca' => 'flag-ca',\n            'en-gb' => 'flag-gb',\n            'es'    => 'flag-es',\n            'es-ar' => 'flag-ar',\n            'et'    => 'flag-ee',\n            'fa'    => 'flag-ir',\n            'fi'    => 'flag-fi',\n            'fr'    => 'flag-fr',\n            'fr-ca' => 'flag-ca',\n            'hr'    => 'flag-hr',\n            'hu'    => 'flag-hu',\n            'id'    => 'flag-id',\n            'it'    => 'flag-it',\n            'ja'    => 'flag-jp',\n            'ko'    => 'flag-kr',\n            'lt'    => 'flag-lt',\n            'lv'    => 'flag-lv',\n            'nb-no' => 'flag-no',\n            'nn-no' => 'flag-no',\n            'nl'    => 'flag-nl',\n            'pl'    => 'flag-pl',\n            'pt-br' => 'flag-br',\n            'pt-pt' => 'flag-pt',\n            'ro'    => 'flag-ro',\n            'ru'    => 'flag-ru',\n            'sk'    => 'flag-sk',\n            'sl'    => 'flag-si',\n            'sv'    => 'flag-se',\n            'th'    => 'flag-th',\n            'tr'    => 'flag-tr',\n            'uk'    => 'flag-ua',\n            'vn'    => 'flag-vn',\n            'zh-cn' => 'flag-cn',\n            'zh-tw' => 'flag-hk',\n        ];\n\n        $locales = [];\n\n        foreach (self::locales() as $code => $label) {\n            if (isset($flags[$code])) {\n                $locales[$code] = [$label, $flags[$code]];\n            }\n        }\n\n        return $locales;\n    }\n\n    /**\n     * flagsShort returns list of available locales with flag icons\n     * using codes instead of full labels\n     */\n    public static function flagsShort(): array\n    {\n        $locales = self::flags();\n\n        foreach ($locales as $code => $preset) {\n            $locales[$code][0] = $code;\n        }\n\n        return $locales;\n    }\n\n    /**\n     * @deprecated\n     */\n    public static function localeIcons(): array\n    {\n        return self::flags();\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/presetmanager/icons-bootstrap.json",
    "content": "[\n    \"123\",\n    \"alarm-fill\",\n    \"alarm\",\n    \"align-bottom\",\n    \"align-center\",\n    \"align-end\",\n    \"align-middle\",\n    \"align-start\",\n    \"align-top\",\n    \"alt\",\n    \"app-indicator\",\n    \"app\",\n    \"archive-fill\",\n    \"archive\",\n    \"arrow-90deg-down\",\n    \"arrow-90deg-left\",\n    \"arrow-90deg-right\",\n    \"arrow-90deg-up\",\n    \"arrow-bar-down\",\n    \"arrow-bar-left\",\n    \"arrow-bar-right\",\n    \"arrow-bar-up\",\n    \"arrow-clockwise\",\n    \"arrow-counterclockwise\",\n    \"arrow-down-circle-fill\",\n    \"arrow-down-circle\",\n    \"arrow-down-left-circle-fill\",\n    \"arrow-down-left-circle\",\n    \"arrow-down-left-square-fill\",\n    \"arrow-down-left-square\",\n    \"arrow-down-left\",\n    \"arrow-down-right-circle-fill\",\n    \"arrow-down-right-circle\",\n    \"arrow-down-right-square-fill\",\n    \"arrow-down-right-square\",\n    \"arrow-down-right\",\n    \"arrow-down-short\",\n    \"arrow-down-square-fill\",\n    \"arrow-down-square\",\n    \"arrow-down-up\",\n    \"arrow-down\",\n    \"arrow-left-circle-fill\",\n    \"arrow-left-circle\",\n    \"arrow-left-right\",\n    \"arrow-left-short\",\n    \"arrow-left-square-fill\",\n    \"arrow-left-square\",\n    \"arrow-left\",\n    \"arrow-repeat\",\n    \"arrow-return-left\",\n    \"arrow-return-right\",\n    \"arrow-right-circle-fill\",\n    \"arrow-right-circle\",\n    \"arrow-right-short\",\n    \"arrow-right-square-fill\",\n    \"arrow-right-square\",\n    \"arrow-right\",\n    \"arrow-up-circle-fill\",\n    \"arrow-up-circle\",\n    \"arrow-up-left-circle-fill\",\n    \"arrow-up-left-circle\",\n    \"arrow-up-left-square-fill\",\n    \"arrow-up-left-square\",\n    \"arrow-up-left\",\n    \"arrow-up-right-circle-fill\",\n    \"arrow-up-right-circle\",\n    \"arrow-up-right-square-fill\",\n    \"arrow-up-right-square\",\n    \"arrow-up-right\",\n    \"arrow-up-short\",\n    \"arrow-up-square-fill\",\n    \"arrow-up-square\",\n    \"arrow-up\",\n    \"arrows-angle-contract\",\n    \"arrows-angle-expand\",\n    \"arrows-collapse\",\n    \"arrows-expand\",\n    \"arrows-fullscreen\",\n    \"arrows-move\",\n    \"aspect-ratio-fill\",\n    \"aspect-ratio\",\n    \"asterisk\",\n    \"at\",\n    \"award-fill\",\n    \"award\",\n    \"back\",\n    \"backspace-fill\",\n    \"backspace-reverse-fill\",\n    \"backspace-reverse\",\n    \"backspace\",\n    \"badge-3d-fill\",\n    \"badge-3d\",\n    \"badge-4k-fill\",\n    \"badge-4k\",\n    \"badge-8k-fill\",\n    \"badge-8k\",\n    \"badge-ad-fill\",\n    \"badge-ad\",\n    \"badge-ar-fill\",\n    \"badge-ar\",\n    \"badge-cc-fill\",\n    \"badge-cc\",\n    \"badge-hd-fill\",\n    \"badge-hd\",\n    \"badge-tm-fill\",\n    \"badge-tm\",\n    \"badge-vo-fill\",\n    \"badge-vo\",\n    \"badge-vr-fill\",\n    \"badge-vr\",\n    \"badge-wc-fill\",\n    \"badge-wc\",\n    \"bag-check-fill\",\n    \"bag-check\",\n    \"bag-dash-fill\",\n    \"bag-dash\",\n    \"bag-fill\",\n    \"bag-plus-fill\",\n    \"bag-plus\",\n    \"bag-x-fill\",\n    \"bag-x\",\n    \"bag\",\n    \"bar-chart-fill\",\n    \"bar-chart-line-fill\",\n    \"bar-chart-line\",\n    \"bar-chart-steps\",\n    \"bar-chart\",\n    \"basket-fill\",\n    \"basket\",\n    \"basket2-fill\",\n    \"basket2\",\n    \"basket3-fill\",\n    \"basket3\",\n    \"battery-charging\",\n    \"battery-full\",\n    \"battery-half\",\n    \"battery\",\n    \"bell-fill\",\n    \"bell\",\n    \"bezier\",\n    \"bezier2\",\n    \"bicycle\",\n    \"binoculars-fill\",\n    \"binoculars\",\n    \"blockquote-left\",\n    \"blockquote-right\",\n    \"book-fill\",\n    \"book-half\",\n    \"book\",\n    \"bookmark-check-fill\",\n    \"bookmark-check\",\n    \"bookmark-dash-fill\",\n    \"bookmark-dash\",\n    \"bookmark-fill\",\n    \"bookmark-heart-fill\",\n    \"bookmark-heart\",\n    \"bookmark-plus-fill\",\n    \"bookmark-plus\",\n    \"bookmark-star-fill\",\n    \"bookmark-star\",\n    \"bookmark-x-fill\",\n    \"bookmark-x\",\n    \"bookmark\",\n    \"bookmarks-fill\",\n    \"bookmarks\",\n    \"bookshelf\",\n    \"bootstrap-fill\",\n    \"bootstrap-reboot\",\n    \"bootstrap\",\n    \"border-all\",\n    \"border-bottom\",\n    \"border-center\",\n    \"border-inner\",\n    \"border-left\",\n    \"border-middle\",\n    \"border-outer\",\n    \"border-right\",\n    \"border-style\",\n    \"border-top\",\n    \"border-width\",\n    \"border\",\n    \"bounding-box-circles\",\n    \"bounding-box\",\n    \"box-arrow-down-left\",\n    \"box-arrow-down-right\",\n    \"box-arrow-down\",\n    \"box-arrow-in-down-left\",\n    \"box-arrow-in-down-right\",\n    \"box-arrow-in-down\",\n    \"box-arrow-in-left\",\n    \"box-arrow-in-right\",\n    \"box-arrow-in-up-left\",\n    \"box-arrow-in-up-right\",\n    \"box-arrow-in-up\",\n    \"box-arrow-left\",\n    \"box-arrow-right\",\n    \"box-arrow-up-left\",\n    \"box-arrow-up-right\",\n    \"box-arrow-up\",\n    \"box-seam\",\n    \"box\",\n    \"braces\",\n    \"bricks\",\n    \"briefcase-fill\",\n    \"briefcase\",\n    \"brightness-alt-high-fill\",\n    \"brightness-alt-high\",\n    \"brightness-alt-low-fill\",\n    \"brightness-alt-low\",\n    \"brightness-high-fill\",\n    \"brightness-high\",\n    \"brightness-low-fill\",\n    \"brightness-low\",\n    \"broadcast-pin\",\n    \"broadcast\",\n    \"brush-fill\",\n    \"brush\",\n    \"bucket-fill\",\n    \"bucket\",\n    \"bug-fill\",\n    \"bug\",\n    \"building\",\n    \"bullseye\",\n    \"calculator-fill\",\n    \"calculator\",\n    \"calendar-check-fill\",\n    \"calendar-check\",\n    \"calendar-date-fill\",\n    \"calendar-date\",\n    \"calendar-day-fill\",\n    \"calendar-day\",\n    \"calendar-event-fill\",\n    \"calendar-event\",\n    \"calendar-fill\",\n    \"calendar-minus-fill\",\n    \"calendar-minus\",\n    \"calendar-month-fill\",\n    \"calendar-month\",\n    \"calendar-plus-fill\",\n    \"calendar-plus\",\n    \"calendar-range-fill\",\n    \"calendar-range\",\n    \"calendar-week-fill\",\n    \"calendar-week\",\n    \"calendar-x-fill\",\n    \"calendar-x\",\n    \"calendar\",\n    \"calendar2-check-fill\",\n    \"calendar2-check\",\n    \"calendar2-date-fill\",\n    \"calendar2-date\",\n    \"calendar2-day-fill\",\n    \"calendar2-day\",\n    \"calendar2-event-fill\",\n    \"calendar2-event\",\n    \"calendar2-fill\",\n    \"calendar2-minus-fill\",\n    \"calendar2-minus\",\n    \"calendar2-month-fill\",\n    \"calendar2-month\",\n    \"calendar2-plus-fill\",\n    \"calendar2-plus\",\n    \"calendar2-range-fill\",\n    \"calendar2-range\",\n    \"calendar2-week-fill\",\n    \"calendar2-week\",\n    \"calendar2-x-fill\",\n    \"calendar2-x\",\n    \"calendar2\",\n    \"calendar3-event-fill\",\n    \"calendar3-event\",\n    \"calendar3-fill\",\n    \"calendar3-range-fill\",\n    \"calendar3-range\",\n    \"calendar3-week-fill\",\n    \"calendar3-week\",\n    \"calendar3\",\n    \"calendar4-event\",\n    \"calendar4-range\",\n    \"calendar4-week\",\n    \"calendar4\",\n    \"camera-fill\",\n    \"camera-reels-fill\",\n    \"camera-reels\",\n    \"camera-video-fill\",\n    \"camera-video-off-fill\",\n    \"camera-video-off\",\n    \"camera-video\",\n    \"camera\",\n    \"camera2\",\n    \"capslock-fill\",\n    \"capslock\",\n    \"card-checklist\",\n    \"card-heading\",\n    \"card-image\",\n    \"card-list\",\n    \"card-text\",\n    \"caret-down-fill\",\n    \"caret-down-square-fill\",\n    \"caret-down-square\",\n    \"caret-down\",\n    \"caret-left-fill\",\n    \"caret-left-square-fill\",\n    \"caret-left-square\",\n    \"caret-left\",\n    \"caret-right-fill\",\n    \"caret-right-square-fill\",\n    \"caret-right-square\",\n    \"caret-right\",\n    \"caret-up-fill\",\n    \"caret-up-square-fill\",\n    \"caret-up-square\",\n    \"caret-up\",\n    \"cart-check-fill\",\n    \"cart-check\",\n    \"cart-dash-fill\",\n    \"cart-dash\",\n    \"cart-fill\",\n    \"cart-plus-fill\",\n    \"cart-plus\",\n    \"cart-x-fill\",\n    \"cart-x\",\n    \"cart\",\n    \"cart2\",\n    \"cart3\",\n    \"cart4\",\n    \"cash-stack\",\n    \"cash\",\n    \"cast\",\n    \"chat-dots-fill\",\n    \"chat-dots\",\n    \"chat-fill\",\n    \"chat-left-dots-fill\",\n    \"chat-left-dots\",\n    \"chat-left-fill\",\n    \"chat-left-quote-fill\",\n    \"chat-left-quote\",\n    \"chat-left-text-fill\",\n    \"chat-left-text\",\n    \"chat-left\",\n    \"chat-quote-fill\",\n    \"chat-quote\",\n    \"chat-right-dots-fill\",\n    \"chat-right-dots\",\n    \"chat-right-fill\",\n    \"chat-right-quote-fill\",\n    \"chat-right-quote\",\n    \"chat-right-text-fill\",\n    \"chat-right-text\",\n    \"chat-right\",\n    \"chat-square-dots-fill\",\n    \"chat-square-dots\",\n    \"chat-square-fill\",\n    \"chat-square-quote-fill\",\n    \"chat-square-quote\",\n    \"chat-square-text-fill\",\n    \"chat-square-text\",\n    \"chat-square\",\n    \"chat-text-fill\",\n    \"chat-text\",\n    \"chat\",\n    \"check-all\",\n    \"check-circle-fill\",\n    \"check-circle\",\n    \"check-square-fill\",\n    \"check-square\",\n    \"check\",\n    \"check2-all\",\n    \"check2-circle\",\n    \"check2-square\",\n    \"check2\",\n    \"chevron-bar-contract\",\n    \"chevron-bar-down\",\n    \"chevron-bar-expand\",\n    \"chevron-bar-left\",\n    \"chevron-bar-right\",\n    \"chevron-bar-up\",\n    \"chevron-compact-down\",\n    \"chevron-compact-left\",\n    \"chevron-compact-right\",\n    \"chevron-compact-up\",\n    \"chevron-contract\",\n    \"chevron-double-down\",\n    \"chevron-double-left\",\n    \"chevron-double-right\",\n    \"chevron-double-up\",\n    \"chevron-down\",\n    \"chevron-expand\",\n    \"chevron-left\",\n    \"chevron-right\",\n    \"chevron-up\",\n    \"circle-fill\",\n    \"circle-half\",\n    \"circle-square\",\n    \"circle\",\n    \"clipboard-check\",\n    \"clipboard-data\",\n    \"clipboard-minus\",\n    \"clipboard-plus\",\n    \"clipboard-x\",\n    \"clipboard\",\n    \"clock-fill\",\n    \"clock-history\",\n    \"clock\",\n    \"cloud-arrow-down-fill\",\n    \"cloud-arrow-down\",\n    \"cloud-arrow-up-fill\",\n    \"cloud-arrow-up\",\n    \"cloud-check-fill\",\n    \"cloud-check\",\n    \"cloud-download-fill\",\n    \"cloud-download\",\n    \"cloud-drizzle-fill\",\n    \"cloud-drizzle\",\n    \"cloud-fill\",\n    \"cloud-fog-fill\",\n    \"cloud-fog\",\n    \"cloud-fog2-fill\",\n    \"cloud-fog2\",\n    \"cloud-hail-fill\",\n    \"cloud-hail\",\n    \"cloud-haze-fill\",\n    \"cloud-haze\",\n    \"cloud-haze2-fill\",\n    \"cloud-lightning-fill\",\n    \"cloud-lightning-rain-fill\",\n    \"cloud-lightning-rain\",\n    \"cloud-lightning\",\n    \"cloud-minus-fill\",\n    \"cloud-minus\",\n    \"cloud-moon-fill\",\n    \"cloud-moon\",\n    \"cloud-plus-fill\",\n    \"cloud-plus\",\n    \"cloud-rain-fill\",\n    \"cloud-rain-heavy-fill\",\n    \"cloud-rain-heavy\",\n    \"cloud-rain\",\n    \"cloud-slash-fill\",\n    \"cloud-slash\",\n    \"cloud-sleet-fill\",\n    \"cloud-sleet\",\n    \"cloud-snow-fill\",\n    \"cloud-snow\",\n    \"cloud-sun-fill\",\n    \"cloud-sun\",\n    \"cloud-upload-fill\",\n    \"cloud-upload\",\n    \"cloud\",\n    \"clouds-fill\",\n    \"clouds\",\n    \"cloudy-fill\",\n    \"cloudy\",\n    \"code-slash\",\n    \"code-square\",\n    \"code\",\n    \"collection-fill\",\n    \"collection-play-fill\",\n    \"collection-play\",\n    \"collection\",\n    \"columns-gap\",\n    \"columns\",\n    \"command\",\n    \"compass-fill\",\n    \"compass\",\n    \"cone-striped\",\n    \"cone\",\n    \"controller\",\n    \"cpu-fill\",\n    \"cpu\",\n    \"credit-card-2-back-fill\",\n    \"credit-card-2-back\",\n    \"credit-card-2-front-fill\",\n    \"credit-card-2-front\",\n    \"credit-card-fill\",\n    \"credit-card\",\n    \"crop\",\n    \"cup-fill\",\n    \"cup-straw\",\n    \"cup\",\n    \"cursor-fill\",\n    \"cursor-text\",\n    \"cursor\",\n    \"dash-circle-dotted\",\n    \"dash-circle-fill\",\n    \"dash-circle\",\n    \"dash-square-dotted\",\n    \"dash-square-fill\",\n    \"dash-square\",\n    \"dash\",\n    \"diagram-2-fill\",\n    \"diagram-2\",\n    \"diagram-3-fill\",\n    \"diagram-3\",\n    \"diamond-fill\",\n    \"diamond-half\",\n    \"diamond\",\n    \"dice-1-fill\",\n    \"dice-1\",\n    \"dice-2-fill\",\n    \"dice-2\",\n    \"dice-3-fill\",\n    \"dice-3\",\n    \"dice-4-fill\",\n    \"dice-4\",\n    \"dice-5-fill\",\n    \"dice-5\",\n    \"dice-6-fill\",\n    \"dice-6\",\n    \"disc-fill\",\n    \"disc\",\n    \"discord\",\n    \"display-fill\",\n    \"display\",\n    \"distribute-horizontal\",\n    \"distribute-vertical\",\n    \"door-closed-fill\",\n    \"door-closed\",\n    \"door-open-fill\",\n    \"door-open\",\n    \"dot\",\n    \"download\",\n    \"droplet-fill\",\n    \"droplet-half\",\n    \"droplet\",\n    \"earbuds\",\n    \"easel-fill\",\n    \"easel\",\n    \"egg-fill\",\n    \"egg-fried\",\n    \"egg\",\n    \"eject-fill\",\n    \"eject\",\n    \"emoji-angry-fill\",\n    \"emoji-angry\",\n    \"emoji-dizzy-fill\",\n    \"emoji-dizzy\",\n    \"emoji-expressionless-fill\",\n    \"emoji-expressionless\",\n    \"emoji-frown-fill\",\n    \"emoji-frown\",\n    \"emoji-heart-eyes-fill\",\n    \"emoji-heart-eyes\",\n    \"emoji-laughing-fill\",\n    \"emoji-laughing\",\n    \"emoji-neutral-fill\",\n    \"emoji-neutral\",\n    \"emoji-smile-fill\",\n    \"emoji-smile-upside-down-fill\",\n    \"emoji-smile-upside-down\",\n    \"emoji-smile\",\n    \"emoji-sunglasses-fill\",\n    \"emoji-sunglasses\",\n    \"emoji-wink-fill\",\n    \"emoji-wink\",\n    \"envelope-fill\",\n    \"envelope-open-fill\",\n    \"envelope-open\",\n    \"envelope\",\n    \"eraser-fill\",\n    \"eraser\",\n    \"exclamation-circle-fill\",\n    \"exclamation-circle\",\n    \"exclamation-diamond-fill\",\n    \"exclamation-diamond\",\n    \"exclamation-octagon-fill\",\n    \"exclamation-octagon\",\n    \"exclamation-square-fill\",\n    \"exclamation-square\",\n    \"exclamation-triangle-fill\",\n    \"exclamation-triangle\",\n    \"exclamation\",\n    \"exclude\",\n    \"eye-fill\",\n    \"eye-slash-fill\",\n    \"eye-slash\",\n    \"eye\",\n    \"eyedropper\",\n    \"eyeglasses\",\n    \"facebook\",\n    \"file-arrow-down-fill\",\n    \"file-arrow-down\",\n    \"file-arrow-up-fill\",\n    \"file-arrow-up\",\n    \"file-bar-graph-fill\",\n    \"file-bar-graph\",\n    \"file-binary-fill\",\n    \"file-binary\",\n    \"file-break-fill\",\n    \"file-break\",\n    \"file-check-fill\",\n    \"file-check\",\n    \"file-code-fill\",\n    \"file-code\",\n    \"file-diff-fill\",\n    \"file-diff\",\n    \"file-earmark-arrow-down-fill\",\n    \"file-earmark-arrow-down\",\n    \"file-earmark-arrow-up-fill\",\n    \"file-earmark-arrow-up\",\n    \"file-earmark-bar-graph-fill\",\n    \"file-earmark-bar-graph\",\n    \"file-earmark-binary-fill\",\n    \"file-earmark-binary\",\n    \"file-earmark-break-fill\",\n    \"file-earmark-break\",\n    \"file-earmark-check-fill\",\n    \"file-earmark-check\",\n    \"file-earmark-code-fill\",\n    \"file-earmark-code\",\n    \"file-earmark-diff-fill\",\n    \"file-earmark-diff\",\n    \"file-earmark-easel-fill\",\n    \"file-earmark-easel\",\n    \"file-earmark-excel-fill\",\n    \"file-earmark-excel\",\n    \"file-earmark-fill\",\n    \"file-earmark-font-fill\",\n    \"file-earmark-font\",\n    \"file-earmark-image-fill\",\n    \"file-earmark-image\",\n    \"file-earmark-lock-fill\",\n    \"file-earmark-lock\",\n    \"file-earmark-lock2-fill\",\n    \"file-earmark-lock2\",\n    \"file-earmark-medical-fill\",\n    \"file-earmark-medical\",\n    \"file-earmark-minus-fill\",\n    \"file-earmark-minus\",\n    \"file-earmark-music-fill\",\n    \"file-earmark-music\",\n    \"file-earmark-person-fill\",\n    \"file-earmark-person\",\n    \"file-earmark-play-fill\",\n    \"file-earmark-play\",\n    \"file-earmark-plus-fill\",\n    \"file-earmark-plus\",\n    \"file-earmark-post-fill\",\n    \"file-earmark-post\",\n    \"file-earmark-ppt-fill\",\n    \"file-earmark-ppt\",\n    \"file-earmark-richtext-fill\",\n    \"file-earmark-richtext\",\n    \"file-earmark-ruled-fill\",\n    \"file-earmark-ruled\",\n    \"file-earmark-slides-fill\",\n    \"file-earmark-slides\",\n    \"file-earmark-spreadsheet-fill\",\n    \"file-earmark-spreadsheet\",\n    \"file-earmark-text-fill\",\n    \"file-earmark-text\",\n    \"file-earmark-word-fill\",\n    \"file-earmark-word\",\n    \"file-earmark-x-fill\",\n    \"file-earmark-x\",\n    \"file-earmark-zip-fill\",\n    \"file-earmark-zip\",\n    \"file-earmark\",\n    \"file-easel-fill\",\n    \"file-easel\",\n    \"file-excel-fill\",\n    \"file-excel\",\n    \"file-fill\",\n    \"file-font-fill\",\n    \"file-font\",\n    \"file-image-fill\",\n    \"file-image\",\n    \"file-lock-fill\",\n    \"file-lock\",\n    \"file-lock2-fill\",\n    \"file-lock2\",\n    \"file-medical-fill\",\n    \"file-medical\",\n    \"file-minus-fill\",\n    \"file-minus\",\n    \"file-music-fill\",\n    \"file-music\",\n    \"file-person-fill\",\n    \"file-person\",\n    \"file-play-fill\",\n    \"file-play\",\n    \"file-plus-fill\",\n    \"file-plus\",\n    \"file-post-fill\",\n    \"file-post\",\n    \"file-ppt-fill\",\n    \"file-ppt\",\n    \"file-richtext-fill\",\n    \"file-richtext\",\n    \"file-ruled-fill\",\n    \"file-ruled\",\n    \"file-slides-fill\",\n    \"file-slides\",\n    \"file-spreadsheet-fill\",\n    \"file-spreadsheet\",\n    \"file-text-fill\",\n    \"file-text\",\n    \"file-word-fill\",\n    \"file-word\",\n    \"file-x-fill\",\n    \"file-x\",\n    \"file-zip-fill\",\n    \"file-zip\",\n    \"file\",\n    \"files-alt\",\n    \"files\",\n    \"film\",\n    \"filter-circle-fill\",\n    \"filter-circle\",\n    \"filter-left\",\n    \"filter-right\",\n    \"filter-square-fill\",\n    \"filter-square\",\n    \"filter\",\n    \"flag-fill\",\n    \"flag\",\n    \"flower1\",\n    \"flower2\",\n    \"flower3\",\n    \"folder-check\",\n    \"folder-fill\",\n    \"folder-minus\",\n    \"folder-plus\",\n    \"folder-symlink-fill\",\n    \"folder-symlink\",\n    \"folder-x\",\n    \"folder\",\n    \"folder2-open\",\n    \"folder2\",\n    \"fonts\",\n    \"forward-fill\",\n    \"forward\",\n    \"front\",\n    \"fullscreen-exit\",\n    \"fullscreen\",\n    \"funnel-fill\",\n    \"funnel\",\n    \"gear-fill\",\n    \"gear-wide-connected\",\n    \"gear-wide\",\n    \"gear\",\n    \"gem\",\n    \"geo-alt-fill\",\n    \"geo-alt\",\n    \"geo-fill\",\n    \"geo\",\n    \"gift-fill\",\n    \"gift\",\n    \"github\",\n    \"globe\",\n    \"globe2\",\n    \"google\",\n    \"graph-down\",\n    \"graph-up\",\n    \"grid-1x2-fill\",\n    \"grid-1x2\",\n    \"grid-3x2-gap-fill\",\n    \"grid-3x2-gap\",\n    \"grid-3x2\",\n    \"grid-3x3-gap-fill\",\n    \"grid-3x3-gap\",\n    \"grid-3x3\",\n    \"grid-fill\",\n    \"grid\",\n    \"grip-horizontal\",\n    \"grip-vertical\",\n    \"hammer\",\n    \"hand-index-fill\",\n    \"hand-index-thumb-fill\",\n    \"hand-index-thumb\",\n    \"hand-index\",\n    \"hand-thumbs-down-fill\",\n    \"hand-thumbs-down\",\n    \"hand-thumbs-up-fill\",\n    \"hand-thumbs-up\",\n    \"handbag-fill\",\n    \"handbag\",\n    \"hash\",\n    \"hdd-fill\",\n    \"hdd-network-fill\",\n    \"hdd-network\",\n    \"hdd-rack-fill\",\n    \"hdd-rack\",\n    \"hdd-stack-fill\",\n    \"hdd-stack\",\n    \"hdd\",\n    \"headphones\",\n    \"headset\",\n    \"heart-fill\",\n    \"heart-half\",\n    \"heart\",\n    \"heptagon-fill\",\n    \"heptagon-half\",\n    \"heptagon\",\n    \"hexagon-fill\",\n    \"hexagon-half\",\n    \"hexagon\",\n    \"hourglass-bottom\",\n    \"hourglass-split\",\n    \"hourglass-top\",\n    \"hourglass\",\n    \"house-door-fill\",\n    \"house-door\",\n    \"house-fill\",\n    \"house\",\n    \"hr\",\n    \"hurricane\",\n    \"image-alt\",\n    \"image-fill\",\n    \"image\",\n    \"images\",\n    \"inbox-fill\",\n    \"inbox\",\n    \"inboxes-fill\",\n    \"inboxes\",\n    \"info-circle-fill\",\n    \"info-circle\",\n    \"info-square-fill\",\n    \"info-square\",\n    \"info\",\n    \"input-cursor-text\",\n    \"input-cursor\",\n    \"instagram\",\n    \"intersect\",\n    \"journal-album\",\n    \"journal-arrow-down\",\n    \"journal-arrow-up\",\n    \"journal-bookmark-fill\",\n    \"journal-bookmark\",\n    \"journal-check\",\n    \"journal-code\",\n    \"journal-medical\",\n    \"journal-minus\",\n    \"journal-plus\",\n    \"journal-richtext\",\n    \"journal-text\",\n    \"journal-x\",\n    \"journal\",\n    \"journals\",\n    \"joystick\",\n    \"justify-left\",\n    \"justify-right\",\n    \"justify\",\n    \"kanban-fill\",\n    \"kanban\",\n    \"key-fill\",\n    \"key\",\n    \"keyboard-fill\",\n    \"keyboard\",\n    \"ladder\",\n    \"lamp-fill\",\n    \"lamp\",\n    \"laptop-fill\",\n    \"laptop\",\n    \"layer-backward\",\n    \"layer-forward\",\n    \"layers-fill\",\n    \"layers-half\",\n    \"layers\",\n    \"layout-sidebar-inset-reverse\",\n    \"layout-sidebar-inset\",\n    \"layout-sidebar-reverse\",\n    \"layout-sidebar\",\n    \"layout-split\",\n    \"layout-text-sidebar-reverse\",\n    \"layout-text-sidebar\",\n    \"layout-text-window-reverse\",\n    \"layout-text-window\",\n    \"layout-three-columns\",\n    \"layout-wtf\",\n    \"life-preserver\",\n    \"lightbulb-fill\",\n    \"lightbulb-off-fill\",\n    \"lightbulb-off\",\n    \"lightbulb\",\n    \"lightning-charge-fill\",\n    \"lightning-charge\",\n    \"lightning-fill\",\n    \"lightning\",\n    \"link-45deg\",\n    \"link\",\n    \"linkedin\",\n    \"list-check\",\n    \"list-nested\",\n    \"list-ol\",\n    \"list-stars\",\n    \"list-task\",\n    \"list-ul\",\n    \"list\",\n    \"lock-fill\",\n    \"lock\",\n    \"mailbox\",\n    \"mailbox2\",\n    \"map-fill\",\n    \"map\",\n    \"markdown-fill\",\n    \"markdown\",\n    \"mask\",\n    \"megaphone-fill\",\n    \"megaphone\",\n    \"menu-app-fill\",\n    \"menu-app\",\n    \"menu-button-fill\",\n    \"menu-button-wide-fill\",\n    \"menu-button-wide\",\n    \"menu-button\",\n    \"menu-down\",\n    \"menu-up\",\n    \"mic-fill\",\n    \"mic-mute-fill\",\n    \"mic-mute\",\n    \"mic\",\n    \"minecart-loaded\",\n    \"minecart\",\n    \"moisture\",\n    \"moon-fill\",\n    \"moon-stars-fill\",\n    \"moon-stars\",\n    \"moon\",\n    \"mouse-fill\",\n    \"mouse\",\n    \"mouse2-fill\",\n    \"mouse2\",\n    \"mouse3-fill\",\n    \"mouse3\",\n    \"music-note-beamed\",\n    \"music-note-list\",\n    \"music-note\",\n    \"music-player-fill\",\n    \"music-player\",\n    \"newspaper\",\n    \"node-minus-fill\",\n    \"node-minus\",\n    \"node-plus-fill\",\n    \"node-plus\",\n    \"nut-fill\",\n    \"nut\",\n    \"octagon-fill\",\n    \"octagon-half\",\n    \"octagon\",\n    \"option\",\n    \"outlet\",\n    \"paint-bucket\",\n    \"palette-fill\",\n    \"palette\",\n    \"palette2\",\n    \"paperclip\",\n    \"paragraph\",\n    \"patch-check-fill\",\n    \"patch-check\",\n    \"patch-exclamation-fill\",\n    \"patch-exclamation\",\n    \"patch-minus-fill\",\n    \"patch-minus\",\n    \"patch-plus-fill\",\n    \"patch-plus\",\n    \"patch-question-fill\",\n    \"patch-question\",\n    \"pause-btn-fill\",\n    \"pause-btn\",\n    \"pause-circle-fill\",\n    \"pause-circle\",\n    \"pause-fill\",\n    \"pause\",\n    \"peace-fill\",\n    \"peace\",\n    \"pen-fill\",\n    \"pen\",\n    \"pencil-fill\",\n    \"pencil-square\",\n    \"pencil\",\n    \"pentagon-fill\",\n    \"pentagon-half\",\n    \"pentagon\",\n    \"people-fill\",\n    \"people\",\n    \"percent\",\n    \"person-badge-fill\",\n    \"person-badge\",\n    \"person-bounding-box\",\n    \"person-check-fill\",\n    \"person-check\",\n    \"person-circle\",\n    \"person-dash-fill\",\n    \"person-dash\",\n    \"person-fill\",\n    \"person-lines-fill\",\n    \"person-plus-fill\",\n    \"person-plus\",\n    \"person-square\",\n    \"person-x-fill\",\n    \"person-x\",\n    \"person\",\n    \"phone-fill\",\n    \"phone-landscape-fill\",\n    \"phone-landscape\",\n    \"phone-vibrate-fill\",\n    \"phone-vibrate\",\n    \"phone\",\n    \"pie-chart-fill\",\n    \"pie-chart\",\n    \"pin-angle-fill\",\n    \"pin-angle\",\n    \"pin-fill\",\n    \"pin\",\n    \"pip-fill\",\n    \"pip\",\n    \"play-btn-fill\",\n    \"play-btn\",\n    \"play-circle-fill\",\n    \"play-circle\",\n    \"play-fill\",\n    \"play\",\n    \"plug-fill\",\n    \"plug\",\n    \"plus-circle-dotted\",\n    \"plus-circle-fill\",\n    \"plus-circle\",\n    \"plus-square-dotted\",\n    \"plus-square-fill\",\n    \"plus-square\",\n    \"plus\",\n    \"power\",\n    \"printer-fill\",\n    \"printer\",\n    \"puzzle-fill\",\n    \"puzzle\",\n    \"question-circle-fill\",\n    \"question-circle\",\n    \"question-diamond-fill\",\n    \"question-diamond\",\n    \"question-octagon-fill\",\n    \"question-octagon\",\n    \"question-square-fill\",\n    \"question-square\",\n    \"question\",\n    \"rainbow\",\n    \"receipt-cutoff\",\n    \"receipt\",\n    \"reception-0\",\n    \"reception-1\",\n    \"reception-2\",\n    \"reception-3\",\n    \"reception-4\",\n    \"record-btn-fill\",\n    \"record-btn\",\n    \"record-circle-fill\",\n    \"record-circle\",\n    \"record-fill\",\n    \"record\",\n    \"record2-fill\",\n    \"record2\",\n    \"reply-all-fill\",\n    \"reply-all\",\n    \"reply-fill\",\n    \"reply\",\n    \"rss-fill\",\n    \"rss\",\n    \"rulers\",\n    \"save-fill\",\n    \"save\",\n    \"save2-fill\",\n    \"save2\",\n    \"scissors\",\n    \"screwdriver\",\n    \"search\",\n    \"segmented-nav\",\n    \"server\",\n    \"share-fill\",\n    \"share\",\n    \"shield-check\",\n    \"shield-exclamation\",\n    \"shield-fill-check\",\n    \"shield-fill-exclamation\",\n    \"shield-fill-minus\",\n    \"shield-fill-plus\",\n    \"shield-fill-x\",\n    \"shield-fill\",\n    \"shield-lock-fill\",\n    \"shield-lock\",\n    \"shield-minus\",\n    \"shield-plus\",\n    \"shield-shaded\",\n    \"shield-slash-fill\",\n    \"shield-slash\",\n    \"shield-x\",\n    \"shield\",\n    \"shift-fill\",\n    \"shift\",\n    \"shop-window\",\n    \"shop\",\n    \"shuffle\",\n    \"signpost-2-fill\",\n    \"signpost-2\",\n    \"signpost-fill\",\n    \"signpost-split-fill\",\n    \"signpost-split\",\n    \"signpost\",\n    \"sim-fill\",\n    \"sim\",\n    \"skip-backward-btn-fill\",\n    \"skip-backward-btn\",\n    \"skip-backward-circle-fill\",\n    \"skip-backward-circle\",\n    \"skip-backward-fill\",\n    \"skip-backward\",\n    \"skip-end-btn-fill\",\n    \"skip-end-btn\",\n    \"skip-end-circle-fill\",\n    \"skip-end-circle\",\n    \"skip-end-fill\",\n    \"skip-end\",\n    \"skip-forward-btn-fill\",\n    \"skip-forward-btn\",\n    \"skip-forward-circle-fill\",\n    \"skip-forward-circle\",\n    \"skip-forward-fill\",\n    \"skip-forward\",\n    \"skip-start-btn-fill\",\n    \"skip-start-btn\",\n    \"skip-start-circle-fill\",\n    \"skip-start-circle\",\n    \"skip-start-fill\",\n    \"skip-start\",\n    \"slack\",\n    \"slash-circle-fill\",\n    \"slash-circle\",\n    \"slash-square-fill\",\n    \"slash-square\",\n    \"slash\",\n    \"sliders\",\n    \"smartwatch\",\n    \"snow\",\n    \"snow2\",\n    \"snow3\",\n    \"sort-alpha-down-alt\",\n    \"sort-alpha-down\",\n    \"sort-alpha-up-alt\",\n    \"sort-alpha-up\",\n    \"sort-down-alt\",\n    \"sort-down\",\n    \"sort-numeric-down-alt\",\n    \"sort-numeric-down\",\n    \"sort-numeric-up-alt\",\n    \"sort-numeric-up\",\n    \"sort-up-alt\",\n    \"sort-up\",\n    \"soundwave\",\n    \"speaker-fill\",\n    \"speaker\",\n    \"speedometer\",\n    \"speedometer2\",\n    \"spellcheck\",\n    \"square-fill\",\n    \"square-half\",\n    \"square\",\n    \"stack\",\n    \"star-fill\",\n    \"star-half\",\n    \"star\",\n    \"stars\",\n    \"stickies-fill\",\n    \"stickies\",\n    \"sticky-fill\",\n    \"sticky\",\n    \"stop-btn-fill\",\n    \"stop-btn\",\n    \"stop-circle-fill\",\n    \"stop-circle\",\n    \"stop-fill\",\n    \"stop\",\n    \"stoplights-fill\",\n    \"stoplights\",\n    \"stopwatch-fill\",\n    \"stopwatch\",\n    \"subtract\",\n    \"suit-club-fill\",\n    \"suit-club\",\n    \"suit-diamond-fill\",\n    \"suit-diamond\",\n    \"suit-heart-fill\",\n    \"suit-heart\",\n    \"suit-spade-fill\",\n    \"suit-spade\",\n    \"sun-fill\",\n    \"sun\",\n    \"sunglasses\",\n    \"sunrise-fill\",\n    \"sunrise\",\n    \"sunset-fill\",\n    \"sunset\",\n    \"symmetry-horizontal\",\n    \"symmetry-vertical\",\n    \"table\",\n    \"tablet-fill\",\n    \"tablet-landscape-fill\",\n    \"tablet-landscape\",\n    \"tablet\",\n    \"tag-fill\",\n    \"tag\",\n    \"tags-fill\",\n    \"tags\",\n    \"telegram\",\n    \"telephone-fill\",\n    \"telephone-forward-fill\",\n    \"telephone-forward\",\n    \"telephone-inbound-fill\",\n    \"telephone-inbound\",\n    \"telephone-minus-fill\",\n    \"telephone-minus\",\n    \"telephone-outbound-fill\",\n    \"telephone-outbound\",\n    \"telephone-plus-fill\",\n    \"telephone-plus\",\n    \"telephone-x-fill\",\n    \"telephone-x\",\n    \"telephone\",\n    \"terminal-fill\",\n    \"terminal\",\n    \"text-center\",\n    \"text-indent-left\",\n    \"text-indent-right\",\n    \"text-left\",\n    \"text-paragraph\",\n    \"text-right\",\n    \"textarea-resize\",\n    \"textarea-t\",\n    \"textarea\",\n    \"thermometer-half\",\n    \"thermometer-high\",\n    \"thermometer-low\",\n    \"thermometer-snow\",\n    \"thermometer-sun\",\n    \"thermometer\",\n    \"three-dots-vertical\",\n    \"three-dots\",\n    \"toggle-off\",\n    \"toggle-on\",\n    \"toggle2-off\",\n    \"toggle2-on\",\n    \"toggles\",\n    \"toggles2\",\n    \"tools\",\n    \"tornado\",\n    \"trash-fill\",\n    \"trash\",\n    \"trash2-fill\",\n    \"trash2\",\n    \"tree-fill\",\n    \"tree\",\n    \"triangle-fill\",\n    \"triangle-half\",\n    \"triangle\",\n    \"trophy-fill\",\n    \"trophy\",\n    \"tropical-storm\",\n    \"truck-flatbed\",\n    \"truck\",\n    \"tsunami\",\n    \"tv-fill\",\n    \"tv\",\n    \"twitch\",\n    \"twitter\",\n    \"type-bold\",\n    \"type-h1\",\n    \"type-h2\",\n    \"type-h3\",\n    \"type-italic\",\n    \"type-strikethrough\",\n    \"type-underline\",\n    \"type\",\n    \"ui-checks-grid\",\n    \"ui-checks\",\n    \"ui-radios-grid\",\n    \"ui-radios\",\n    \"umbrella-fill\",\n    \"umbrella\",\n    \"union\",\n    \"unlock-fill\",\n    \"unlock\",\n    \"upc-scan\",\n    \"upc\",\n    \"upload\",\n    \"vector-pen\",\n    \"view-list\",\n    \"view-stacked\",\n    \"vinyl-fill\",\n    \"vinyl\",\n    \"voicemail\",\n    \"volume-down-fill\",\n    \"volume-down\",\n    \"volume-mute-fill\",\n    \"volume-mute\",\n    \"volume-off-fill\",\n    \"volume-off\",\n    \"volume-up-fill\",\n    \"volume-up\",\n    \"vr\",\n    \"wallet-fill\",\n    \"wallet\",\n    \"wallet2\",\n    \"watch\",\n    \"water\",\n    \"whatsapp\",\n    \"wifi-1\",\n    \"wifi-2\",\n    \"wifi-off\",\n    \"wifi\",\n    \"wind\",\n    \"window-dock\",\n    \"window-sidebar\",\n    \"window\",\n    \"wrench\",\n    \"x-circle-fill\",\n    \"x-circle\",\n    \"x-diamond-fill\",\n    \"x-diamond\",\n    \"x-octagon-fill\",\n    \"x-octagon\",\n    \"x-square-fill\",\n    \"x-square\",\n    \"x\",\n    \"youtube\",\n    \"zoom-in\",\n    \"zoom-out\",\n    \"bank\",\n    \"bank2\",\n    \"bell-slash-fill\",\n    \"bell-slash\",\n    \"cash-coin\",\n    \"check-lg\",\n    \"coin\",\n    \"currency-bitcoin\",\n    \"currency-dollar\",\n    \"currency-euro\",\n    \"currency-exchange\",\n    \"currency-pound\",\n    \"currency-yen\",\n    \"dash-lg\",\n    \"exclamation-lg\",\n    \"file-earmark-pdf-fill\",\n    \"file-earmark-pdf\",\n    \"file-pdf-fill\",\n    \"file-pdf\",\n    \"gender-ambiguous\",\n    \"gender-female\",\n    \"gender-male\",\n    \"gender-trans\",\n    \"headset-vr\",\n    \"info-lg\",\n    \"mastodon\",\n    \"messenger\",\n    \"piggy-bank-fill\",\n    \"piggy-bank\",\n    \"pin-map-fill\",\n    \"pin-map\",\n    \"plus-lg\",\n    \"question-lg\",\n    \"recycle\",\n    \"reddit\",\n    \"safe-fill\",\n    \"safe2-fill\",\n    \"safe2\",\n    \"sd-card-fill\",\n    \"sd-card\",\n    \"skype\",\n    \"slash-lg\",\n    \"translate\",\n    \"x-lg\",\n    \"safe\",\n    \"apple\",\n    \"microsoft\",\n    \"windows\",\n    \"behance\",\n    \"dribbble\",\n    \"line\",\n    \"medium\",\n    \"paypal\",\n    \"pinterest\",\n    \"signal\",\n    \"snapchat\",\n    \"spotify\",\n    \"stack-overflow\",\n    \"strava\",\n    \"wordpress\",\n    \"vimeo\",\n    \"activity\",\n    \"easel2-fill\",\n    \"easel2\",\n    \"easel3-fill\",\n    \"easel3\",\n    \"fan\",\n    \"fingerprint\",\n    \"graph-down-arrow\",\n    \"graph-up-arrow\",\n    \"hypnotize\",\n    \"magic\",\n    \"person-rolodex\",\n    \"person-video\",\n    \"person-video2\",\n    \"person-video3\",\n    \"person-workspace\",\n    \"radioactive\",\n    \"webcam-fill\",\n    \"webcam\",\n    \"yin-yang\",\n    \"bandaid-fill\",\n    \"bandaid\",\n    \"bluetooth\",\n    \"body-text\",\n    \"boombox\",\n    \"boxes\",\n    \"dpad-fill\",\n    \"dpad\",\n    \"ear-fill\",\n    \"ear\",\n    \"envelope-check-fill\",\n    \"envelope-check\",\n    \"envelope-dash-fill\",\n    \"envelope-dash\",\n    \"envelope-exclamation-fill\",\n    \"envelope-exclamation\",\n    \"envelope-plus-fill\",\n    \"envelope-plus\",\n    \"envelope-slash-fill\",\n    \"envelope-slash\",\n    \"envelope-x-fill\",\n    \"envelope-x\",\n    \"explicit-fill\",\n    \"explicit\",\n    \"git\",\n    \"infinity\",\n    \"list-columns-reverse\",\n    \"list-columns\",\n    \"meta\",\n    \"nintendo-switch\",\n    \"pc-display-horizontal\",\n    \"pc-display\",\n    \"pc-horizontal\",\n    \"pc\",\n    \"playstation\",\n    \"plus-slash-minus\",\n    \"projector-fill\",\n    \"projector\",\n    \"qr-code-scan\",\n    \"qr-code\",\n    \"quora\",\n    \"quote\",\n    \"robot\",\n    \"send-check-fill\",\n    \"send-check\",\n    \"send-dash-fill\",\n    \"send-dash\",\n    \"send-exclamation-fill\",\n    \"send-exclamation\",\n    \"send-fill\",\n    \"send-plus-fill\",\n    \"send-plus\",\n    \"send-slash-fill\",\n    \"send-slash\",\n    \"send-x-fill\",\n    \"send-x\",\n    \"send\",\n    \"steam\",\n    \"terminal-dash\",\n    \"terminal-plus\",\n    \"terminal-split\",\n    \"ticket-detailed-fill\",\n    \"ticket-detailed\",\n    \"ticket-fill\",\n    \"ticket-perforated-fill\",\n    \"ticket-perforated\",\n    \"ticket\",\n    \"tiktok\",\n    \"window-dash\",\n    \"window-desktop\",\n    \"window-fullscreen\",\n    \"window-plus\",\n    \"window-split\",\n    \"window-stack\",\n    \"window-x\",\n    \"xbox\",\n    \"ethernet\",\n    \"hdmi-fill\",\n    \"hdmi\",\n    \"usb-c-fill\",\n    \"usb-c\",\n    \"usb-fill\",\n    \"usb-plug-fill\",\n    \"usb-plug\",\n    \"usb-symbol\",\n    \"usb\",\n    \"boombox-fill\",\n    \"displayport\",\n    \"gpu-card\",\n    \"memory\",\n    \"modem-fill\",\n    \"modem\",\n    \"motherboard-fill\",\n    \"motherboard\",\n    \"optical-audio-fill\",\n    \"optical-audio\",\n    \"pci-card\",\n    \"router-fill\",\n    \"router\",\n    \"thunderbolt-fill\",\n    \"thunderbolt\",\n    \"usb-drive-fill\",\n    \"usb-drive\",\n    \"usb-micro-fill\",\n    \"usb-micro\",\n    \"usb-mini-fill\",\n    \"usb-mini\",\n    \"cloud-haze2\",\n    \"device-hdd-fill\",\n    \"device-hdd\",\n    \"device-ssd-fill\",\n    \"device-ssd\",\n    \"displayport-fill\",\n    \"mortarboard-fill\",\n    \"mortarboard\",\n    \"terminal-x\",\n    \"arrow-through-heart-fill\",\n    \"arrow-through-heart\",\n    \"badge-sd-fill\",\n    \"badge-sd\",\n    \"bag-heart-fill\",\n    \"bag-heart\",\n    \"balloon-fill\",\n    \"balloon-heart-fill\",\n    \"balloon-heart\",\n    \"balloon\",\n    \"box2-fill\",\n    \"box2-heart-fill\",\n    \"box2-heart\",\n    \"box2\",\n    \"braces-asterisk\",\n    \"calendar-heart-fill\",\n    \"calendar-heart\",\n    \"calendar2-heart-fill\",\n    \"calendar2-heart\",\n    \"chat-heart-fill\",\n    \"chat-heart\",\n    \"chat-left-heart-fill\",\n    \"chat-left-heart\",\n    \"chat-right-heart-fill\",\n    \"chat-right-heart\",\n    \"chat-square-heart-fill\",\n    \"chat-square-heart\",\n    \"clipboard-check-fill\",\n    \"clipboard-data-fill\",\n    \"clipboard-fill\",\n    \"clipboard-heart-fill\",\n    \"clipboard-heart\",\n    \"clipboard-minus-fill\",\n    \"clipboard-plus-fill\",\n    \"clipboard-pulse\",\n    \"clipboard-x-fill\",\n    \"clipboard2-check-fill\",\n    \"clipboard2-check\",\n    \"clipboard2-data-fill\",\n    \"clipboard2-data\",\n    \"clipboard2-fill\",\n    \"clipboard2-heart-fill\",\n    \"clipboard2-heart\",\n    \"clipboard2-minus-fill\",\n    \"clipboard2-minus\",\n    \"clipboard2-plus-fill\",\n    \"clipboard2-plus\",\n    \"clipboard2-pulse-fill\",\n    \"clipboard2-pulse\",\n    \"clipboard2-x-fill\",\n    \"clipboard2-x\",\n    \"clipboard2\",\n    \"emoji-kiss-fill\",\n    \"emoji-kiss\",\n    \"envelope-heart-fill\",\n    \"envelope-heart\",\n    \"envelope-open-heart-fill\",\n    \"envelope-open-heart\",\n    \"envelope-paper-fill\",\n    \"envelope-paper-heart-fill\",\n    \"envelope-paper-heart\",\n    \"envelope-paper\",\n    \"filetype-aac\",\n    \"filetype-ai\",\n    \"filetype-bmp\",\n    \"filetype-cs\",\n    \"filetype-css\",\n    \"filetype-csv\",\n    \"filetype-doc\",\n    \"filetype-docx\",\n    \"filetype-exe\",\n    \"filetype-gif\",\n    \"filetype-heic\",\n    \"filetype-html\",\n    \"filetype-java\",\n    \"filetype-jpg\",\n    \"filetype-js\",\n    \"filetype-jsx\",\n    \"filetype-key\",\n    \"filetype-m4p\",\n    \"filetype-md\",\n    \"filetype-mdx\",\n    \"filetype-mov\",\n    \"filetype-mp3\",\n    \"filetype-mp4\",\n    \"filetype-otf\",\n    \"filetype-pdf\",\n    \"filetype-php\",\n    \"filetype-png\",\n    \"filetype-ppt\",\n    \"filetype-psd\",\n    \"filetype-py\",\n    \"filetype-raw\",\n    \"filetype-rb\",\n    \"filetype-sass\",\n    \"filetype-scss\",\n    \"filetype-sh\",\n    \"filetype-svg\",\n    \"filetype-tiff\",\n    \"filetype-tsx\",\n    \"filetype-ttf\",\n    \"filetype-txt\",\n    \"filetype-wav\",\n    \"filetype-woff\",\n    \"filetype-xls\",\n    \"filetype-xml\",\n    \"filetype-yml\",\n    \"heart-arrow\",\n    \"heart-pulse-fill\",\n    \"heart-pulse\",\n    \"heartbreak-fill\",\n    \"heartbreak\",\n    \"hearts\",\n    \"hospital-fill\",\n    \"hospital\",\n    \"house-heart-fill\",\n    \"house-heart\",\n    \"incognito\",\n    \"magnet-fill\",\n    \"magnet\",\n    \"person-heart\",\n    \"person-hearts\",\n    \"phone-flip\",\n    \"plugin\",\n    \"postage-fill\",\n    \"postage-heart-fill\",\n    \"postage-heart\",\n    \"postage\",\n    \"postcard-fill\",\n    \"postcard-heart-fill\",\n    \"postcard-heart\",\n    \"postcard\",\n    \"search-heart-fill\",\n    \"search-heart\",\n    \"sliders2-vertical\",\n    \"sliders2\",\n    \"trash3-fill\",\n    \"trash3\",\n    \"valentine\",\n    \"valentine2\",\n    \"wrench-adjustable-circle-fill\",\n    \"wrench-adjustable-circle\",\n    \"wrench-adjustable\",\n    \"filetype-json\",\n    \"filetype-pptx\",\n    \"filetype-xlsx\",\n    \"1-circle-fill\",\n    \"1-circle\",\n    \"1-square-fill\",\n    \"1-square\",\n    \"2-circle-fill\",\n    \"2-circle\",\n    \"2-square-fill\",\n    \"2-square\",\n    \"3-circle-fill\",\n    \"3-circle\",\n    \"3-square-fill\",\n    \"3-square\",\n    \"4-circle-fill\",\n    \"4-circle\",\n    \"4-square-fill\",\n    \"4-square\",\n    \"5-circle-fill\",\n    \"5-circle\",\n    \"5-square-fill\",\n    \"5-square\",\n    \"6-circle-fill\",\n    \"6-circle\",\n    \"6-square-fill\",\n    \"6-square\",\n    \"7-circle-fill\",\n    \"7-circle\",\n    \"7-square-fill\",\n    \"7-square\",\n    \"8-circle-fill\",\n    \"8-circle\",\n    \"8-square-fill\",\n    \"8-square\",\n    \"9-circle-fill\",\n    \"9-circle\",\n    \"9-square-fill\",\n    \"9-square\",\n    \"airplane-engines-fill\",\n    \"airplane-engines\",\n    \"airplane-fill\",\n    \"airplane\",\n    \"alexa\",\n    \"alipay\",\n    \"android\",\n    \"android2\",\n    \"box-fill\",\n    \"box-seam-fill\",\n    \"browser-chrome\",\n    \"browser-edge\",\n    \"browser-firefox\",\n    \"browser-safari\",\n    \"c-circle-fill\",\n    \"c-circle\",\n    \"c-square-fill\",\n    \"c-square\",\n    \"capsule-pill\",\n    \"capsule\",\n    \"car-front-fill\",\n    \"car-front\",\n    \"cassette-fill\",\n    \"cassette\",\n    \"cc-circle-fill\",\n    \"cc-circle\",\n    \"cc-square-fill\",\n    \"cc-square\",\n    \"cup-hot-fill\",\n    \"cup-hot\",\n    \"currency-rupee\",\n    \"dropbox\",\n    \"escape\",\n    \"fast-forward-btn-fill\",\n    \"fast-forward-btn\",\n    \"fast-forward-circle-fill\",\n    \"fast-forward-circle\",\n    \"fast-forward-fill\",\n    \"fast-forward\",\n    \"filetype-sql\",\n    \"fire\",\n    \"google-play\",\n    \"h-circle-fill\",\n    \"h-circle\",\n    \"h-square-fill\",\n    \"h-square\",\n    \"indent\",\n    \"lungs-fill\",\n    \"lungs\",\n    \"microsoft-teams\",\n    \"p-circle-fill\",\n    \"p-circle\",\n    \"p-square-fill\",\n    \"p-square\",\n    \"pass-fill\",\n    \"pass\",\n    \"prescription\",\n    \"prescription2\",\n    \"r-circle-fill\",\n    \"r-circle\",\n    \"r-square-fill\",\n    \"r-square\",\n    \"repeat-1\",\n    \"repeat\",\n    \"rewind-btn-fill\",\n    \"rewind-btn\",\n    \"rewind-circle-fill\",\n    \"rewind-circle\",\n    \"rewind-fill\",\n    \"rewind\",\n    \"train-freight-front-fill\",\n    \"train-freight-front\",\n    \"train-front-fill\",\n    \"train-front\",\n    \"train-lightrail-front-fill\",\n    \"train-lightrail-front\",\n    \"truck-front-fill\",\n    \"truck-front\",\n    \"ubuntu\",\n    \"unindent\",\n    \"unity\",\n    \"universal-access-circle\",\n    \"universal-access\",\n    \"virus\",\n    \"virus2\",\n    \"wechat\",\n    \"yelp\",\n    \"sign-stop-fill\",\n    \"sign-stop-lights-fill\",\n    \"sign-stop-lights\",\n    \"sign-stop\",\n    \"sign-turn-left-fill\",\n    \"sign-turn-left\",\n    \"sign-turn-right-fill\",\n    \"sign-turn-right\",\n    \"sign-turn-slight-left-fill\",\n    \"sign-turn-slight-left\",\n    \"sign-turn-slight-right-fill\",\n    \"sign-turn-slight-right\",\n    \"sign-yield-fill\",\n    \"sign-yield\",\n    \"ev-station-fill\",\n    \"ev-station\",\n    \"fuel-pump-diesel-fill\",\n    \"fuel-pump-diesel\",\n    \"fuel-pump-fill\",\n    \"fuel-pump\",\n    \"0-circle-fill\",\n    \"0-circle\",\n    \"0-square-fill\",\n    \"0-square\",\n    \"rocket-fill\",\n    \"rocket-takeoff-fill\",\n    \"rocket-takeoff\",\n    \"rocket\",\n    \"stripe\",\n    \"subscript\",\n    \"superscript\",\n    \"trello\",\n    \"envelope-at-fill\",\n    \"envelope-at\",\n    \"regex\",\n    \"text-wrap\",\n    \"sign-dead-end-fill\",\n    \"sign-dead-end\",\n    \"sign-do-not-enter-fill\",\n    \"sign-do-not-enter\",\n    \"sign-intersection-fill\",\n    \"sign-intersection-side-fill\",\n    \"sign-intersection-side\",\n    \"sign-intersection-t-fill\",\n    \"sign-intersection-t\",\n    \"sign-intersection-y-fill\",\n    \"sign-intersection-y\",\n    \"sign-intersection\",\n    \"sign-merge-left-fill\",\n    \"sign-merge-left\",\n    \"sign-merge-right-fill\",\n    \"sign-merge-right\",\n    \"sign-no-left-turn-fill\",\n    \"sign-no-left-turn\",\n    \"sign-no-parking-fill\",\n    \"sign-no-parking\",\n    \"sign-no-right-turn-fill\",\n    \"sign-no-right-turn\",\n    \"sign-railroad-fill\",\n    \"sign-railroad\",\n    \"building-add\",\n    \"building-check\",\n    \"building-dash\",\n    \"building-down\",\n    \"building-exclamation\",\n    \"building-fill-add\",\n    \"building-fill-check\",\n    \"building-fill-dash\",\n    \"building-fill-down\",\n    \"building-fill-exclamation\",\n    \"building-fill-gear\",\n    \"building-fill-lock\",\n    \"building-fill-slash\",\n    \"building-fill-up\",\n    \"building-fill-x\",\n    \"building-fill\",\n    \"building-gear\",\n    \"building-lock\",\n    \"building-slash\",\n    \"building-up\",\n    \"building-x\",\n    \"buildings-fill\",\n    \"buildings\",\n    \"bus-front-fill\",\n    \"bus-front\",\n    \"ev-front-fill\",\n    \"ev-front\",\n    \"globe-americas\",\n    \"globe-asia-australia\",\n    \"globe-central-south-asia\",\n    \"globe-europe-africa\",\n    \"house-add-fill\",\n    \"house-add\",\n    \"house-check-fill\",\n    \"house-check\",\n    \"house-dash-fill\",\n    \"house-dash\",\n    \"house-down-fill\",\n    \"house-down\",\n    \"house-exclamation-fill\",\n    \"house-exclamation\",\n    \"house-gear-fill\",\n    \"house-gear\",\n    \"house-lock-fill\",\n    \"house-lock\",\n    \"house-slash-fill\",\n    \"house-slash\",\n    \"house-up-fill\",\n    \"house-up\",\n    \"house-x-fill\",\n    \"house-x\",\n    \"person-add\",\n    \"person-down\",\n    \"person-exclamation\",\n    \"person-fill-add\",\n    \"person-fill-check\",\n    \"person-fill-dash\",\n    \"person-fill-down\",\n    \"person-fill-exclamation\",\n    \"person-fill-gear\",\n    \"person-fill-lock\",\n    \"person-fill-slash\",\n    \"person-fill-up\",\n    \"person-fill-x\",\n    \"person-gear\",\n    \"person-lock\",\n    \"person-slash\",\n    \"person-up\",\n    \"scooter\",\n    \"taxi-front-fill\",\n    \"taxi-front\",\n    \"amd\",\n    \"database-add\",\n    \"database-check\",\n    \"database-dash\",\n    \"database-down\",\n    \"database-exclamation\",\n    \"database-fill-add\",\n    \"database-fill-check\",\n    \"database-fill-dash\",\n    \"database-fill-down\",\n    \"database-fill-exclamation\",\n    \"database-fill-gear\",\n    \"database-fill-lock\",\n    \"database-fill-slash\",\n    \"database-fill-up\",\n    \"database-fill-x\",\n    \"database-fill\",\n    \"database-gear\",\n    \"database-lock\",\n    \"database-slash\",\n    \"database-up\",\n    \"database-x\",\n    \"database\",\n    \"houses-fill\",\n    \"houses\",\n    \"nvidia\",\n    \"person-vcard-fill\",\n    \"person-vcard\",\n    \"sina-weibo\",\n    \"tencent-qq\",\n    \"wikipedia\"\n]\n"
  },
  {
    "path": "modules/system/classes/presetmanager/icons-phosphor.json",
    "content": "[\n    \"address-book\",\n    \"airplane\",\n    \"airplane-in-flight\",\n    \"airplane-landing\",\n    \"airplane-takeoff\",\n    \"airplane-tilt\",\n    \"airplay\",\n    \"air-traffic-control\",\n    \"alarm\",\n    \"alien\",\n    \"align-bottom\",\n    \"align-bottom-simple\",\n    \"align-center-horizontal\",\n    \"align-center-horizontal-simple\",\n    \"align-center-vertical\",\n    \"align-center-vertical-simple\",\n    \"align-left\",\n    \"align-left-simple\",\n    \"align-right\",\n    \"align-right-simple\",\n    \"align-top\",\n    \"align-top-simple\",\n    \"amazon-logo\",\n    \"anchor\",\n    \"anchor-simple\",\n    \"android-logo\",\n    \"angular-logo\",\n    \"aperture\",\n    \"apple-logo\",\n    \"apple-podcasts-logo\",\n    \"app-store-logo\",\n    \"app-window\",\n    \"archive\",\n    \"archive-box\",\n    \"archive-tray\",\n    \"armchair\",\n    \"arrow-arc-left\",\n    \"arrow-arc-right\",\n    \"arrow-bend-double-up-left\",\n    \"arrow-bend-double-up-right\",\n    \"arrow-bend-down-left\",\n    \"arrow-bend-down-right\",\n    \"arrow-bend-left-down\",\n    \"arrow-bend-left-up\",\n    \"arrow-bend-right-down\",\n    \"arrow-bend-right-up\",\n    \"arrow-bend-up-left\",\n    \"arrow-bend-up-right\",\n    \"arrow-circle-down\",\n    \"arrow-circle-down-left\",\n    \"arrow-circle-down-right\",\n    \"arrow-circle-left\",\n    \"arrow-circle-right\",\n    \"arrow-circle-up\",\n    \"arrow-circle-up-left\",\n    \"arrow-circle-up-right\",\n    \"arrow-clockwise\",\n    \"arrow-counter-clockwise\",\n    \"arrow-down\",\n    \"arrow-down-left\",\n    \"arrow-down-right\",\n    \"arrow-elbow-down-left\",\n    \"arrow-elbow-down-right\",\n    \"arrow-elbow-left\",\n    \"arrow-elbow-left-down\",\n    \"arrow-elbow-left-up\",\n    \"arrow-elbow-right\",\n    \"arrow-elbow-right-down\",\n    \"arrow-elbow-right-up\",\n    \"arrow-elbow-up-left\",\n    \"arrow-elbow-up-right\",\n    \"arrow-fat-down\",\n    \"arrow-fat-left\",\n    \"arrow-fat-line-down\",\n    \"arrow-fat-line-left\",\n    \"arrow-fat-line-right\",\n    \"arrow-fat-lines-down\",\n    \"arrow-fat-lines-left\",\n    \"arrow-fat-lines-right\",\n    \"arrow-fat-lines-up\",\n    \"arrow-fat-line-up\",\n    \"arrow-fat-right\",\n    \"arrow-fat-up\",\n    \"arrow-left\",\n    \"arrow-line-down\",\n    \"arrow-line-down-left\",\n    \"arrow-line-down-right\",\n    \"arrow-line-left\",\n    \"arrow-line-right\",\n    \"arrow-line-up\",\n    \"arrow-line-up-left\",\n    \"arrow-line-up-right\",\n    \"arrow-right\",\n    \"arrows-clockwise\",\n    \"arrows-counter-clockwise\",\n    \"arrows-down-up\",\n    \"arrows-horizontal\",\n    \"arrows-in\",\n    \"arrows-in-cardinal\",\n    \"arrows-in-line-horizontal\",\n    \"arrows-in-line-vertical\",\n    \"arrows-in-simple\",\n    \"arrows-left-right\",\n    \"arrows-merge\",\n    \"arrows-out\",\n    \"arrows-out-cardinal\",\n    \"arrows-out-line-horizontal\",\n    \"arrows-out-line-vertical\",\n    \"arrows-out-simple\",\n    \"arrow-square-down\",\n    \"arrow-square-down-left\",\n    \"arrow-square-down-right\",\n    \"arrow-square-in\",\n    \"arrow-square-left\",\n    \"arrow-square-out\",\n    \"arrow-square-right\",\n    \"arrow-square-up\",\n    \"arrow-square-up-left\",\n    \"arrow-square-up-right\",\n    \"arrows-split\",\n    \"arrows-vertical\",\n    \"arrow-u-down-left\",\n    \"arrow-u-down-right\",\n    \"arrow-u-left-down\",\n    \"arrow-u-left-up\",\n    \"arrow-up\",\n    \"arrow-up-left\",\n    \"arrow-up-right\",\n    \"arrow-u-right-down\",\n    \"arrow-u-right-up\",\n    \"arrow-u-up-left\",\n    \"arrow-u-up-right\",\n    \"article\",\n    \"article-medium\",\n    \"article-ny-times\",\n    \"asterisk\",\n    \"asterisk-simple\",\n    \"at\",\n    \"atom\",\n    \"baby\",\n    \"backpack\",\n    \"backspace\",\n    \"bag\",\n    \"bag-simple\",\n    \"balloon\",\n    \"bandaids\",\n    \"bank\",\n    \"barbell\",\n    \"barcode\",\n    \"barricade\",\n    \"baseball\",\n    \"baseball-cap\",\n    \"basket\",\n    \"basketball\",\n    \"bathtub\",\n    \"battery-charging\",\n    \"battery-charging-vertical\",\n    \"battery-empty\",\n    \"battery-full\",\n    \"battery-high\",\n    \"battery-low\",\n    \"battery-medium\",\n    \"battery-plus\",\n    \"battery-plus-vertical\",\n    \"battery-vertical-empty\",\n    \"battery-vertical-full\",\n    \"battery-vertical-high\",\n    \"battery-vertical-low\",\n    \"battery-vertical-medium\",\n    \"battery-warning\",\n    \"battery-warning-vertical\",\n    \"bed\",\n    \"beer-bottle\",\n    \"beer-stein\",\n    \"behance-logo\",\n    \"bell\",\n    \"bell-ringing\",\n    \"bell-simple\",\n    \"bell-simple-ringing\",\n    \"bell-simple-slash\",\n    \"bell-simple-z\",\n    \"bell-slash\",\n    \"bell-z\",\n    \"bezier-curve\",\n    \"bicycle\",\n    \"binoculars\",\n    \"bird\",\n    \"bluetooth\",\n    \"bluetooth-connected\",\n    \"bluetooth-slash\",\n    \"bluetooth-x\",\n    \"boat\",\n    \"bone\",\n    \"book\",\n    \"book-bookmark\",\n    \"bookmark\",\n    \"bookmarks\",\n    \"bookmark-simple\",\n    \"bookmarks-simple\",\n    \"book-open\",\n    \"book-open-text\",\n    \"books\",\n    \"boot\",\n    \"bounding-box\",\n    \"bowl-food\",\n    \"brackets-angle\",\n    \"brackets-curly\",\n    \"brackets-round\",\n    \"brackets-square\",\n    \"brain\",\n    \"brandy\",\n    \"bridge\",\n    \"briefcase\",\n    \"briefcase-metal\",\n    \"broadcast\",\n    \"broom\",\n    \"browser\",\n    \"browsers\",\n    \"bug\",\n    \"bug-beetle\",\n    \"bug-droid\",\n    \"buildings\",\n    \"bus\",\n    \"butterfly\",\n    \"cactus\",\n    \"cake\",\n    \"calculator\",\n    \"calendar\",\n    \"calendar-blank\",\n    \"calendar-check\",\n    \"calendar-plus\",\n    \"calendar-x\",\n    \"call-bell\",\n    \"camera\",\n    \"camera-plus\",\n    \"camera-rotate\",\n    \"camera-slash\",\n    \"campfire\",\n    \"car\",\n    \"cardholder\",\n    \"cards\",\n    \"caret-circle-double-down\",\n    \"caret-circle-double-left\",\n    \"caret-circle-double-right\",\n    \"caret-circle-double-up\",\n    \"caret-circle-down\",\n    \"caret-circle-left\",\n    \"caret-circle-right\",\n    \"caret-circle-up\",\n    \"caret-circle-up-down\",\n    \"caret-double-down\",\n    \"caret-double-left\",\n    \"caret-double-right\",\n    \"caret-double-up\",\n    \"caret-down\",\n    \"caret-left\",\n    \"caret-right\",\n    \"caret-up\",\n    \"caret-up-down\",\n    \"car-profile\",\n    \"carrot\",\n    \"car-simple\",\n    \"cassette-tape\",\n    \"castle-turret\",\n    \"cat\",\n    \"cell-signal-full\",\n    \"cell-signal-high\",\n    \"cell-signal-low\",\n    \"cell-signal-medium\",\n    \"cell-signal-none\",\n    \"cell-signal-slash\",\n    \"cell-signal-x\",\n    \"certificate\",\n    \"chair\",\n    \"chalkboard\",\n    \"chalkboard-simple\",\n    \"chalkboard-teacher\",\n    \"champagne\",\n    \"charging-station\",\n    \"chart-bar\",\n    \"chart-bar-horizontal\",\n    \"chart-donut\",\n    \"chart-line\",\n    \"chart-line-down\",\n    \"chart-line-up\",\n    \"chart-pie\",\n    \"chart-pie-slice\",\n    \"chart-polar\",\n    \"chart-scatter\",\n    \"chat\",\n    \"chat-centered\",\n    \"chat-centered-dots\",\n    \"chat-centered-text\",\n    \"chat-circle\",\n    \"chat-circle-dots\",\n    \"chat-circle-text\",\n    \"chat-dots\",\n    \"chats\",\n    \"chats-circle\",\n    \"chats-teardrop\",\n    \"chat-teardrop\",\n    \"chat-teardrop-dots\",\n    \"chat-teardrop-text\",\n    \"chat-text\",\n    \"check\",\n    \"check-circle\",\n    \"check-fat\",\n    \"checks\",\n    \"check-square\",\n    \"check-square-offset\",\n    \"church\",\n    \"circle\",\n    \"circle-dashed\",\n    \"circle-half\",\n    \"circle-half-tilt\",\n    \"circle-notch\",\n    \"circles-four\",\n    \"circles-three\",\n    \"circles-three-plus\",\n    \"circuitry\",\n    \"clipboard\",\n    \"clipboard-text\",\n    \"clock\",\n    \"clock-afternoon\",\n    \"clock-clockwise\",\n    \"clock-countdown\",\n    \"clock-counter-clockwise\",\n    \"closed-captioning\",\n    \"cloud\",\n    \"cloud-arrow-down\",\n    \"cloud-arrow-up\",\n    \"cloud-check\",\n    \"cloud-fog\",\n    \"cloud-lightning\",\n    \"cloud-moon\",\n    \"cloud-rain\",\n    \"cloud-slash\",\n    \"cloud-snow\",\n    \"cloud-sun\",\n    \"cloud-warning\",\n    \"cloud-x\",\n    \"club\",\n    \"coat-hanger\",\n    \"coda-logo\",\n    \"code\",\n    \"code-block\",\n    \"codepen-logo\",\n    \"codesandbox-logo\",\n    \"code-simple\",\n    \"coffee\",\n    \"coin\",\n    \"coins\",\n    \"coin-vertical\",\n    \"columns\",\n    \"command\",\n    \"compass\",\n    \"compass-tool\",\n    \"computer-tower\",\n    \"confetti\",\n    \"contactless-payment\",\n    \"control\",\n    \"cookie\",\n    \"cooking-pot\",\n    \"copy\",\n    \"copyleft\",\n    \"copyright\",\n    \"copy-simple\",\n    \"corners-in\",\n    \"corners-out\",\n    \"couch\",\n    \"cpu\",\n    \"credit-card\",\n    \"crop\",\n    \"cross\",\n    \"crosshair\",\n    \"crosshair-simple\",\n    \"crown\",\n    \"crown-simple\",\n    \"cube\",\n    \"cube-focus\",\n    \"cube-transparent\",\n    \"currency-btc\",\n    \"currency-circle-dollar\",\n    \"currency-cny\",\n    \"currency-dollar\",\n    \"currency-dollar-simple\",\n    \"currency-eth\",\n    \"currency-eur\",\n    \"currency-gbp\",\n    \"currency-inr\",\n    \"currency-jpy\",\n    \"currency-krw\",\n    \"currency-kzt\",\n    \"currency-ngn\",\n    \"currency-rub\",\n    \"cursor\",\n    \"cursor-click\",\n    \"cursor-text\",\n    \"cylinder\",\n    \"database\",\n    \"desktop\",\n    \"desktop-tower\",\n    \"detective\",\n    \"device-mobile\",\n    \"device-mobile-camera\",\n    \"device-mobile-speaker\",\n    \"devices\",\n    \"device-tablet\",\n    \"device-tablet-camera\",\n    \"device-tablet-speaker\",\n    \"dev-to-logo\",\n    \"diamond\",\n    \"diamonds-four\",\n    \"dice-five\",\n    \"dice-four\",\n    \"dice-one\",\n    \"dice-six\",\n    \"dice-three\",\n    \"dice-two\",\n    \"disc\",\n    \"discord-logo\",\n    \"divide\",\n    \"dna\",\n    \"dog\",\n    \"door\",\n    \"door-open\",\n    \"dot\",\n    \"dot-outline\",\n    \"dots-nine\",\n    \"dots-six\",\n    \"dots-six-vertical\",\n    \"dots-three\",\n    \"dots-three-circle\",\n    \"dots-three-circle-vertical\",\n    \"dots-three-outline\",\n    \"dots-three-outline-vertical\",\n    \"dots-three-vertical\",\n    \"download\",\n    \"download-simple\",\n    \"dress\",\n    \"dribbble-logo\",\n    \"drop\",\n    \"dropbox-logo\",\n    \"drop-half\",\n    \"drop-half-bottom\",\n    \"ear\",\n    \"ear-slash\",\n    \"egg\",\n    \"egg-crack\",\n    \"eject\",\n    \"eject-simple\",\n    \"elevator\",\n    \"engine\",\n    \"envelope\",\n    \"envelope-open\",\n    \"envelope-simple\",\n    \"envelope-simple-open\",\n    \"equalizer\",\n    \"equals\",\n    \"eraser\",\n    \"escalator-down\",\n    \"escalator-up\",\n    \"exam\",\n    \"exclude\",\n    \"exclude-square\",\n    \"export\",\n    \"eye\",\n    \"eye-closed\",\n    \"eyedropper\",\n    \"eyedropper-sample\",\n    \"eyeglasses\",\n    \"eye-slash\",\n    \"facebook-logo\",\n    \"face-mask\",\n    \"factory\",\n    \"faders\",\n    \"faders-horizontal\",\n    \"fan\",\n    \"fast-forward\",\n    \"fast-forward-circle\",\n    \"feather\",\n    \"figma-logo\",\n    \"file\",\n    \"file-archive\",\n    \"file-arrow-down\",\n    \"file-arrow-up\",\n    \"file-audio\",\n    \"file-cloud\",\n    \"file-code\",\n    \"file-css\",\n    \"file-csv\",\n    \"file-dashed\",\n    \"file-dotted\",\n    \"file-doc\",\n    \"file-html\",\n    \"file-image\",\n    \"file-jpg\",\n    \"file-js\",\n    \"file-jsx\",\n    \"file-lock\",\n    \"file-magnifying-glass\",\n    \"file-search\",\n    \"file-minus\",\n    \"file-pdf\",\n    \"file-plus\",\n    \"file-png\",\n    \"file-ppt\",\n    \"file-rs\",\n    \"files\",\n    \"file-sql\",\n    \"file-svg\",\n    \"file-text\",\n    \"file-ts\",\n    \"file-tsx\",\n    \"file-video\",\n    \"file-vue\",\n    \"file-x\",\n    \"file-xls\",\n    \"file-zip\",\n    \"film-reel\",\n    \"film-script\",\n    \"film-slate\",\n    \"film-strip\",\n    \"fingerprint\",\n    \"fingerprint-simple\",\n    \"finn-the-human\",\n    \"fire\",\n    \"fire-extinguisher\",\n    \"fire-simple\",\n    \"first-aid\",\n    \"first-aid-kit\",\n    \"fish\",\n    \"fish-simple\",\n    \"flag\",\n    \"flag-banner\",\n    \"flag-checkered\",\n    \"flag-pennant\",\n    \"flame\",\n    \"flashlight\",\n    \"flask\",\n    \"floppy-disk\",\n    \"floppy-disk-back\",\n    \"flow-arrow\",\n    \"flower\",\n    \"flower-lotus\",\n    \"flower-tulip\",\n    \"flying-saucer\",\n    \"folder\",\n    \"folder-dashed\",\n    \"folder-dotted\",\n    \"folder-lock\",\n    \"folder-minus\",\n    \"folder-notch\",\n    \"folder-notch-minus\",\n    \"folder-notch-open\",\n    \"folder-notch-plus\",\n    \"folder-open\",\n    \"folder-plus\",\n    \"folders\",\n    \"folder-simple\",\n    \"folder-simple-dashed\",\n    \"folder-simple-dotted\",\n    \"folder-simple-lock\",\n    \"folder-simple-minus\",\n    \"folder-simple-plus\",\n    \"folder-simple-star\",\n    \"folder-simple-user\",\n    \"folder-star\",\n    \"folder-user\",\n    \"football\",\n    \"footprints\",\n    \"fork-knife\",\n    \"frame-corners\",\n    \"framer-logo\",\n    \"function\",\n    \"funnel\",\n    \"funnel-simple\",\n    \"game-controller\",\n    \"garage\",\n    \"gas-can\",\n    \"gas-pump\",\n    \"gauge\",\n    \"gavel\",\n    \"gear\",\n    \"gear-fine\",\n    \"gear-six\",\n    \"gender-female\",\n    \"gender-intersex\",\n    \"gender-male\",\n    \"gender-neuter\",\n    \"gender-nonbinary\",\n    \"gender-transgender\",\n    \"ghost\",\n    \"gif\",\n    \"gift\",\n    \"git-branch\",\n    \"git-commit\",\n    \"git-diff\",\n    \"git-fork\",\n    \"github-logo\",\n    \"gitlab-logo\",\n    \"gitlab-logo-simple\",\n    \"git-merge\",\n    \"git-pull-request\",\n    \"globe\",\n    \"globe-hemisphere-east\",\n    \"globe-hemisphere-west\",\n    \"globe-simple\",\n    \"globe-stand\",\n    \"goggles\",\n    \"goodreads-logo\",\n    \"google-cardboard-logo\",\n    \"google-chrome-logo\",\n    \"google-drive-logo\",\n    \"google-logo\",\n    \"google-photos-logo\",\n    \"google-play-logo\",\n    \"google-podcasts-logo\",\n    \"gradient\",\n    \"graduation-cap\",\n    \"grains\",\n    \"grains-slash\",\n    \"graph\",\n    \"grid-four\",\n    \"grid-nine\",\n    \"guitar\",\n    \"hamburger\",\n    \"hammer\",\n    \"hand\",\n    \"handbag\",\n    \"handbag-simple\",\n    \"hand-coins\",\n    \"hand-eye\",\n    \"hand-fist\",\n    \"hand-grabbing\",\n    \"hand-heart\",\n    \"hand-palm\",\n    \"hand-pointing\",\n    \"hands-clapping\",\n    \"handshake\",\n    \"hand-soap\",\n    \"hands-praying\",\n    \"hand-swipe-left\",\n    \"hand-swipe-right\",\n    \"hand-tap\",\n    \"hand-waving\",\n    \"hard-drive\",\n    \"hard-drives\",\n    \"hash\",\n    \"hash-straight\",\n    \"headlights\",\n    \"headphones\",\n    \"headset\",\n    \"heart\",\n    \"heartbeat\",\n    \"heart-break\",\n    \"heart-half\",\n    \"heart-straight\",\n    \"heart-straight-break\",\n    \"hexagon\",\n    \"high-heel\",\n    \"highlighter-circle\",\n    \"hoodie\",\n    \"horse\",\n    \"hourglass\",\n    \"hourglass-high\",\n    \"hourglass-low\",\n    \"hourglass-medium\",\n    \"hourglass-simple\",\n    \"hourglass-simple-high\",\n    \"hourglass-simple-low\",\n    \"hourglass-simple-medium\",\n    \"house\",\n    \"house-line\",\n    \"house-simple\",\n    \"ice-cream\",\n    \"identification-badge\",\n    \"identification-card\",\n    \"image\",\n    \"images\",\n    \"image-square\",\n    \"images-square\",\n    \"infinity\",\n    \"info\",\n    \"instagram-logo\",\n    \"intersect\",\n    \"intersect-square\",\n    \"intersect-three\",\n    \"jeep\",\n    \"kanban\",\n    \"key\",\n    \"keyboard\",\n    \"keyhole\",\n    \"key-return\",\n    \"knife\",\n    \"ladder\",\n    \"ladder-simple\",\n    \"lamp\",\n    \"laptop\",\n    \"layout\",\n    \"leaf\",\n    \"lifebuoy\",\n    \"lightbulb\",\n    \"lightbulb-filament\",\n    \"lighthouse\",\n    \"lightning\",\n    \"lightning-a\",\n    \"lightning-slash\",\n    \"line-segment\",\n    \"line-segments\",\n    \"link\",\n    \"link-break\",\n    \"linkedin-logo\",\n    \"link-simple\",\n    \"link-simple-break\",\n    \"link-simple-horizontal\",\n    \"link-simple-horizontal-break\",\n    \"linux-logo\",\n    \"list\",\n    \"list-bullets\",\n    \"list-checks\",\n    \"list-dashes\",\n    \"list-magnifying-glass\",\n    \"list-numbers\",\n    \"list-plus\",\n    \"lock\",\n    \"lockers\",\n    \"lock-key\",\n    \"lock-key-open\",\n    \"lock-laminated\",\n    \"lock-laminated-open\",\n    \"lock-open\",\n    \"lock-simple\",\n    \"lock-simple-open\",\n    \"magic-wand\",\n    \"magnet\",\n    \"magnet-straight\",\n    \"magnifying-glass\",\n    \"magnifying-glass-minus\",\n    \"magnifying-glass-plus\",\n    \"map-pin\",\n    \"map-pin-line\",\n    \"map-trifold\",\n    \"marker-circle\",\n    \"martini\",\n    \"mask-happy\",\n    \"mask-sad\",\n    \"math-operations\",\n    \"medal\",\n    \"medal-military\",\n    \"medium-logo\",\n    \"megaphone\",\n    \"megaphone-simple\",\n    \"messenger-logo\",\n    \"meta-logo\",\n    \"metronome\",\n    \"microphone\",\n    \"microphone-slash\",\n    \"microphone-stage\",\n    \"microsoft-excel-logo\",\n    \"microsoft-outlook-logo\",\n    \"microsoft-powerpoint-logo\",\n    \"microsoft-teams-logo\",\n    \"microsoft-word-logo\",\n    \"minus\",\n    \"minus-circle\",\n    \"minus-square\",\n    \"money\",\n    \"monitor\",\n    \"monitor-play\",\n    \"moon\",\n    \"moon-stars\",\n    \"moped\",\n    \"moped-front\",\n    \"mosque\",\n    \"motorcycle\",\n    \"mountains\",\n    \"mouse\",\n    \"mouse-simple\",\n    \"music-note\",\n    \"music-notes\",\n    \"music-note-simple\",\n    \"music-notes-plus\",\n    \"music-notes-simple\",\n    \"navigation-arrow\",\n    \"needle\",\n    \"newspaper\",\n    \"newspaper-clipping\",\n    \"notches\",\n    \"note\",\n    \"note-blank\",\n    \"notebook\",\n    \"notepad\",\n    \"note-pencil\",\n    \"notification\",\n    \"notion-logo\",\n    \"number-circle-eight\",\n    \"number-circle-five\",\n    \"number-circle-four\",\n    \"number-circle-nine\",\n    \"number-circle-one\",\n    \"number-circle-seven\",\n    \"number-circle-six\",\n    \"number-circle-three\",\n    \"number-circle-two\",\n    \"number-circle-zero\",\n    \"number-eight\",\n    \"number-five\",\n    \"number-four\",\n    \"number-nine\",\n    \"number-one\",\n    \"number-seven\",\n    \"number-six\",\n    \"number-square-eight\",\n    \"number-square-five\",\n    \"number-square-four\",\n    \"number-square-nine\",\n    \"number-square-one\",\n    \"number-square-seven\",\n    \"number-square-six\",\n    \"number-square-three\",\n    \"number-square-two\",\n    \"number-square-zero\",\n    \"number-three\",\n    \"number-two\",\n    \"number-zero\",\n    \"nut\",\n    \"ny-times-logo\",\n    \"octagon\",\n    \"office-chair\",\n    \"option\",\n    \"orange-slice\",\n    \"package\",\n    \"paint-brush\",\n    \"paint-brush-broad\",\n    \"paint-brush-household\",\n    \"paint-bucket\",\n    \"paint-roller\",\n    \"palette\",\n    \"pants\",\n    \"paperclip\",\n    \"paperclip-horizontal\",\n    \"paper-plane\",\n    \"paper-plane-right\",\n    \"paper-plane-tilt\",\n    \"parachute\",\n    \"paragraph\",\n    \"parallelogram\",\n    \"park\",\n    \"password\",\n    \"path\",\n    \"patreon-logo\",\n    \"pause\",\n    \"pause-circle\",\n    \"paw-print\",\n    \"paypal-logo\",\n    \"peace\",\n    \"pen\",\n    \"pencil\",\n    \"pencil-circle\",\n    \"pencil-line\",\n    \"pencil-simple\",\n    \"pencil-simple-line\",\n    \"pencil-simple-slash\",\n    \"pencil-slash\",\n    \"pen-nib\",\n    \"pen-nib-straight\",\n    \"pentagram\",\n    \"pepper\",\n    \"percent\",\n    \"person\",\n    \"person-arms-spread\",\n    \"person-simple\",\n    \"person-simple-bike\",\n    \"person-simple-run\",\n    \"person-simple-throw\",\n    \"person-simple-walk\",\n    \"perspective\",\n    \"phone\",\n    \"phone-call\",\n    \"phone-disconnect\",\n    \"phone-incoming\",\n    \"phone-outgoing\",\n    \"phone-plus\",\n    \"phone-slash\",\n    \"phone-x\",\n    \"phosphor-logo\",\n    \"pi\",\n    \"piano-keys\",\n    \"picture-in-picture\",\n    \"piggy-bank\",\n    \"pill\",\n    \"pinterest-logo\",\n    \"pinwheel\",\n    \"pizza\",\n    \"placeholder\",\n    \"planet\",\n    \"plant\",\n    \"play\",\n    \"play-circle\",\n    \"playlist\",\n    \"play-pause\",\n    \"plug\",\n    \"plug-charging\",\n    \"plugs\",\n    \"plugs-connected\",\n    \"plus\",\n    \"plus-circle\",\n    \"plus-minus\",\n    \"plus-square\",\n    \"poker-chip\",\n    \"police-car\",\n    \"polygon\",\n    \"popcorn\",\n    \"potted-plant\",\n    \"power\",\n    \"prescription\",\n    \"presentation\",\n    \"presentation-chart\",\n    \"printer\",\n    \"prohibit\",\n    \"prohibit-inset\",\n    \"projector-screen\",\n    \"projector-screen-chart\",\n    \"pulse\",\n    \"activity\",\n    \"push-pin\",\n    \"push-pin-simple\",\n    \"push-pin-simple-slash\",\n    \"push-pin-slash\",\n    \"puzzle-piece\",\n    \"qr-code\",\n    \"question\",\n    \"queue\",\n    \"quotes\",\n    \"radical\",\n    \"radio\",\n    \"radioactive\",\n    \"radio-button\",\n    \"rainbow\",\n    \"rainbow-cloud\",\n    \"read-cv-logo\",\n    \"receipt\",\n    \"receipt-x\",\n    \"record\",\n    \"rectangle\",\n    \"recycle\",\n    \"reddit-logo\",\n    \"repeat\",\n    \"repeat-once\",\n    \"rewind\",\n    \"rewind-circle\",\n    \"road-horizon\",\n    \"robot\",\n    \"rocket\",\n    \"rocket-launch\",\n    \"rows\",\n    \"rss\",\n    \"rss-simple\",\n    \"rug\",\n    \"ruler\",\n    \"scales\",\n    \"scan\",\n    \"scissors\",\n    \"scooter\",\n    \"screencast\",\n    \"scribble-loop\",\n    \"scroll\",\n    \"seal:before,\",\n    \"seal-check:before,\",\n    \"seal-question:before,\",\n    \"seal-warning:before,\",\n    \"selection\",\n    \"selection-all\",\n    \"selection-background\",\n    \"selection-foreground\",\n    \"selection-inverse\",\n    \"selection-plus\",\n    \"selection-slash\",\n    \"shapes\",\n    \"share\",\n    \"share-fat\",\n    \"share-network\",\n    \"shield\",\n    \"shield-check\",\n    \"shield-checkered\",\n    \"shield-chevron\",\n    \"shield-plus\",\n    \"shield-slash\",\n    \"shield-star\",\n    \"shield-warning\",\n    \"shirt-folded\",\n    \"shooting-star\",\n    \"shopping-bag\",\n    \"shopping-bag-open\",\n    \"shopping-cart\",\n    \"shopping-cart-simple\",\n    \"shower\",\n    \"shrimp\",\n    \"shuffle\",\n    \"shuffle-angular\",\n    \"shuffle-simple\",\n    \"sidebar\",\n    \"sidebar-simple\",\n    \"sigma\",\n    \"signature\",\n    \"sign-in\",\n    \"sign-out\",\n    \"signpost\",\n    \"sim-card\",\n    \"siren\",\n    \"sketch-logo\",\n    \"skip-back\",\n    \"skip-back-circle\",\n    \"skip-forward\",\n    \"skip-forward-circle\",\n    \"skull\",\n    \"slack-logo\",\n    \"sliders\",\n    \"sliders-horizontal\",\n    \"slideshow\",\n    \"smiley\",\n    \"smiley-angry\",\n    \"smiley-blank\",\n    \"smiley-meh\",\n    \"smiley-nervous\",\n    \"smiley-sad\",\n    \"smiley-sticker\",\n    \"smiley-wink\",\n    \"smiley-x-eyes\",\n    \"snapchat-logo\",\n    \"sneaker\",\n    \"sneaker-move\",\n    \"snowflake\",\n    \"soccer-ball\",\n    \"sort-ascending\",\n    \"sort-descending\",\n    \"soundcloud-logo\",\n    \"spade\",\n    \"sparkle\",\n    \"speaker-hifi\",\n    \"speaker-high\",\n    \"speaker-low\",\n    \"speaker-none\",\n    \"speaker-simple-high\",\n    \"speaker-simple-low\",\n    \"speaker-simple-none\",\n    \"speaker-simple-slash\",\n    \"speaker-simple-x\",\n    \"speaker-slash\",\n    \"speaker-x\",\n    \"spinner\",\n    \"spinner-gap\",\n    \"spiral\",\n    \"split-horizontal\",\n    \"split-vertical\",\n    \"spotify-logo\",\n    \"square\",\n    \"square-half\",\n    \"square-half-bottom\",\n    \"square-logo\",\n    \"squares-four\",\n    \"square-split-horizontal\",\n    \"square-split-vertical\",\n    \"stack\",\n    \"stack-overflow-logo\",\n    \"stack-simple\",\n    \"stairs\",\n    \"stamp\",\n    \"star\",\n    \"star-and-crescent\",\n    \"star-four\",\n    \"star-half\",\n    \"star-of-david\",\n    \"steering-wheel\",\n    \"steps\",\n    \"stethoscope\",\n    \"sticker\",\n    \"stool\",\n    \"stop\",\n    \"stop-circle\",\n    \"storefront\",\n    \"strategy\",\n    \"stripe-logo\",\n    \"student\",\n    \"subtitles\",\n    \"subtract\",\n    \"subtract-square\",\n    \"suitcase\",\n    \"suitcase-rolling\",\n    \"suitcase-simple\",\n    \"sun\",\n    \"sun-dim\",\n    \"sunglasses\",\n    \"sun-horizon\",\n    \"swap\",\n    \"swatches\",\n    \"swimming-pool\",\n    \"sword\",\n    \"synagogue\",\n    \"syringe\",\n    \"table\",\n    \"tabs\",\n    \"tag\",\n    \"tag-chevron\",\n    \"tag-simple\",\n    \"target\",\n    \"taxi\",\n    \"telegram-logo\",\n    \"television\",\n    \"television-simple\",\n    \"tennis-ball\",\n    \"tent\",\n    \"terminal\",\n    \"terminal-window\",\n    \"test-tube\",\n    \"text-aa\",\n    \"text-align-center\",\n    \"text-align-justify\",\n    \"text-align-left\",\n    \"text-align-right\",\n    \"text-a-underline\",\n    \"text-b:before,\",\n    \"textbox\",\n    \"text-columns\",\n    \"text-h\",\n    \"text-h-five\",\n    \"text-h-four\",\n    \"text-h-one\",\n    \"text-h-six\",\n    \"text-h-three\",\n    \"text-h-two\",\n    \"text-indent\",\n    \"text-italic\",\n    \"text-outdent\",\n    \"text-strikethrough\",\n    \"text-t\",\n    \"text-underline\",\n    \"thermometer\",\n    \"thermometer-cold\",\n    \"thermometer-hot\",\n    \"thermometer-simple\",\n    \"thumbs-down\",\n    \"thumbs-up\",\n    \"ticket\",\n    \"tidal-logo\",\n    \"tiktok-logo\",\n    \"timer\",\n    \"tipi\",\n    \"toggle-left\",\n    \"toggle-right\",\n    \"toilet\",\n    \"toilet-paper\",\n    \"toolbox\",\n    \"tooth\",\n    \"tote\",\n    \"tote-simple\",\n    \"trademark\",\n    \"trademark-registered\",\n    \"traffic-cone\",\n    \"traffic-sign\",\n    \"traffic-signal\",\n    \"train\",\n    \"train-regional\",\n    \"train-simple\",\n    \"tram\",\n    \"translate\",\n    \"trash\",\n    \"trash-simple\",\n    \"tray\",\n    \"tree\",\n    \"tree-evergreen\",\n    \"tree-palm\",\n    \"tree-structure\",\n    \"trend-down\",\n    \"trend-up\",\n    \"triangle\",\n    \"trophy\",\n    \"truck\",\n    \"t-shirt\",\n    \"twitch-logo\",\n    \"twitter-logo\",\n    \"umbrella\",\n    \"umbrella-simple\",\n    \"unite\",\n    \"unite-square\",\n    \"upload\",\n    \"upload-simple\",\n    \"usb\",\n    \"user\",\n    \"user-circle\",\n    \"user-circle-gear\",\n    \"user-circle-minus\",\n    \"user-circle-plus\",\n    \"user-focus\",\n    \"user-gear\",\n    \"user-list\",\n    \"user-minus\",\n    \"user-plus\",\n    \"user-rectangle\",\n    \"users\",\n    \"users-four\",\n    \"user-square\",\n    \"users-three\",\n    \"user-switch\",\n    \"van\",\n    \"vault\",\n    \"vibrate\",\n    \"video\",\n    \"video-camera\",\n    \"video-camera-slash\",\n    \"vignette\",\n    \"vinyl-record\",\n    \"virtual-reality\",\n    \"virus\",\n    \"voicemail\",\n    \"volleyball\",\n    \"wall\",\n    \"wallet\",\n    \"warehouse\",\n    \"warning\",\n    \"warning-circle\",\n    \"warning-diamond\",\n    \"warning-octagon\",\n    \"watch\",\n    \"waveform\",\n    \"waves\",\n    \"wave-sawtooth\",\n    \"wave-sine\",\n    \"wave-square\",\n    \"wave-triangle\",\n    \"webcam\",\n    \"webcam-slash\",\n    \"webhooks-logo\",\n    \"wechat-logo\",\n    \"whatsapp-logo\",\n    \"wheelchair\",\n    \"wheelchair-motion\",\n    \"wifi-high\",\n    \"wifi-low\",\n    \"wifi-medium\",\n    \"wifi-none\",\n    \"wifi-slash\",\n    \"wifi-x\",\n    \"wind\",\n    \"windows-logo\",\n    \"wine\",\n    \"wrench\",\n    \"x\",\n    \"x-circle\",\n    \"x-square\",\n    \"yin-yang\",\n    \"youtube-logo\"\n]\n"
  },
  {
    "path": "modules/system/classes/presetmanager/icons.json",
    "content": "[\n    \"database-flash\",\n    \"exit\",\n    \"app-window\",\n    \"user-account\",\n    \"settings\",\n    \"delete\",\n    \"fullscreen\",\n    \"save-cloud\",\n    \"search-code\",\n    \"search-up\",\n    \"angle-down-arrow\",\n    \"angle-up-arrow\",\n    \"text-format-ul\",\n    \"text-format-ol\",\n    \"fullscreen-collapse\",\n    \"text-bold\",\n    \"text-left\",\n    \"text-right\",\n    \"text-center\",\n    \"text-italic\",\n    \"text-underline\",\n    \"text-insert-table\",\n    \"text-justify\",\n    \"info-circle\",\n    \"magic-wand\",\n    \"quote\",\n    \"horizontal-line\",\n    \"text-link\",\n    \"components\",\n    \"text-strikethrough\",\n    \"text-colors\",\n    \"text-emoticons\",\n    \"text-subscript\",\n    \"text-superscript\",\n    \"text-increase-indent\",\n    \"text-decrease-indent\",\n    \"text-inline-style\",\n    \"volume\",\n    \"text-video\",\n    \"text-image\",\n    \"text-redo\",\n    \"text-undo\",\n    \"attachment\",\n    \"edit-code\",\n    \"cursor-arrow\",\n    \"text-clear-formatting\",\n    \"text-eraser\",\n    \"text-h1\",\n    \"text-h3\",\n    \"text-h2\",\n    \"text-code-block\",\n    \"preview\",\n    \"window-split\",\n    \"list-add\",\n    \"list-remove\",\n    \"create\",\n    \"text-unlink\",\n    \"check-multi\",\n    \"add-above\",\n    \"add-below\",\n    \"callout-success\",\n    \"callout-danger\",\n    \"cross\",\n    \"callout-info\",\n    \"text-plus\",\n    \"log-settings\",\n    \"power\",\n    \"text-paint-brush\",\n    \"mail-branding\",\n    \"mail-messages\",\n    \"mail-settings\",\n    \"mail-templates\",\n    \"download-cloud\",\n    \"text-lock\",\n    \"text-users\",\n    \"code-snippet\",\n    \"translate\",\n    \"globe-site\",\n    \"id-card-1\",\n    \"user-group\",\n    \"user-actions-key\",\n    \"calendar-add\",\n    \"calendar-3\",\n    \"calendar-disable\",\n    \"calendar-enable\",\n    \"calendar-clock\",\n    \"notes-edit\",\n    \"calendar-check-1\",\n    \"keyboard-return\",\n    \"list-reorder\",\n    \"common-file-remove\",\n    \"common-file-sync\",\n    \"harddrive-upload\",\n    \"common-file-upload\",\n    \"set-parent\",\n    \"common-file-star\",\n    \"add-bold\",\n    \"layers-grid-add\",\n    \"collapse\",\n    \"location-target\",\n    \"id-badge-1\",\n    \"language-letters\",\n    \"address-book\",\n    \"address-card\",\n    \"adjust\",\n    \"align-center\",\n    \"align-justify\",\n    \"align-left\",\n    \"align-right\",\n    \"ambulance\",\n    \"american-sign-language-interpreting\",\n    \"anchor\",\n    \"android\",\n    \"angellist\",\n    \"angle-double-down\",\n    \"angle-double-left\",\n    \"angle-double-right\",\n    \"angle-double-up\",\n    \"angle-down\",\n    \"angle-left\",\n    \"angle-right\",\n    \"angle-up\",\n    \"apple\",\n    \"archive\",\n    \"area-chart\",\n    \"arrow-circle-down\",\n    \"arrow-circle-left\",\n    \"arrow-circle-right\",\n    \"arrow-circle-up\",\n    \"arrow-full-circle-down\",\n    \"arrow-full-circle-left\",\n    \"arrow-full-circle-right\",\n    \"arrow-full-circle-up\",\n    \"arrow-down\",\n    \"arrow-left\",\n    \"arrow-right\",\n    \"arrow-up\",\n    \"move\",\n    \"arrows-alt\",\n    \"arrows-h\",\n    \"arrows-v\",\n    \"asl-interpreting\",\n    \"assistive-listening-systems\",\n    \"asterisk\",\n    \"at\",\n    \"audio-description\",\n    \"automobile\",\n    \"backward\",\n    \"balance-scale\",\n    \"ban\",\n    \"bank\",\n    \"bar-chart\",\n    \"barcode\",\n    \"bars\",\n    \"bathtub\",\n    \"battery\",\n    \"battery-0\",\n    \"battery-1\",\n    \"battery-2\",\n    \"battery-3\",\n    \"battery-4\",\n    \"bed\",\n    \"beer\",\n    \"bell\",\n    \"bell-slash\",\n    \"bicycle\",\n    \"binoculars\",\n    \"birthday-cake\",\n    \"bitcoin\",\n    \"blind\",\n    \"bluetooth\",\n    \"bluetooth-b\",\n    \"bold\",\n    \"bolt\",\n    \"bomb\",\n    \"book\",\n    \"bookmark\",\n    \"braille\",\n    \"briefcase\",\n    \"btc\",\n    \"bug\",\n    \"building\",\n    \"bullhorn\",\n    \"bullseye\",\n    \"bus\",\n    \"cab\",\n    \"calculator\",\n    \"calendar\",\n    \"calendar-check\",\n    \"calendar-minus\",\n    \"calendar-empty\",\n    \"calendar-plus\",\n    \"calendar-times\",\n    \"camera\",\n    \"camera-retro\",\n    \"car\",\n    \"caret-down\",\n    \"caret-left\",\n    \"caret-right\",\n    \"caret-up\",\n    \"caret-square-down\",\n    \"caret-square-left\",\n    \"caret-square-right\",\n    \"caret-square-up\",\n    \"cart-arrow-down\",\n    \"cart-plus\",\n    \"cc\",\n    \"cc-amex\",\n    \"cc-diners-club\",\n    \"cc-discover\",\n    \"cc-jcb\",\n    \"cc-mastercard\",\n    \"cc-paypal\",\n    \"cc-stripe\",\n    \"cc-visa\",\n    \"certificate\",\n    \"chain\",\n    \"chain-broken\",\n    \"check\",\n    \"check-circle\",\n    \"check-square\",\n    \"chevron-circle-down\",\n    \"chevron-circle-left\",\n    \"chevron-circle-right\",\n    \"chevron-circle-up\",\n    \"chevron-down\",\n    \"chevron-left\",\n    \"chevron-right\",\n    \"chevron-up\",\n    \"child\",\n    \"chrome\",\n    \"circle-full\",\n    \"circle\",\n    \"circle-notch\",\n    \"clipboard\",\n    \"clock\",\n    \"clone\",\n    \"close\",\n    \"cloud\",\n    \"cloud-download\",\n    \"cloud-upload\",\n    \"cny\",\n    \"code\",\n    \"code-fork\",\n    \"coffee\",\n    \"cog\",\n    \"cogs\",\n    \"columns\",\n    \"comment\",\n    \"commenting\",\n    \"comments\",\n    \"compass\",\n    \"compress\",\n    \"copy\",\n    \"copyright\",\n    \"creative-commons\",\n    \"credit-card\",\n    \"crop\",\n    \"crosshairs\",\n    \"css3\",\n    \"cube\",\n    \"cubes\",\n    \"cut\",\n    \"cutlery\",\n    \"dashboard\",\n    \"database\",\n    \"deaf\",\n    \"deafness\",\n    \"dedent\",\n    \"desktop\",\n    \"diamond\",\n    \"dollar\",\n    \"dot-circle\",\n    \"download\",\n    \"dribbble\",\n    \"drivers-license\",\n    \"edge\",\n    \"edit\",\n    \"eject\",\n    \"ellipsis-h\",\n    \"ellipsis-v\",\n    \"envelope\",\n    \"envelope-open\",\n    \"envelope-square\",\n    \"leaf-2\",\n    \"eraser\",\n    \"eur\",\n    \"euro\",\n    \"exchange\",\n    \"exclamation\",\n    \"exclamation-circle\",\n    \"exclamation-triangle\",\n    \"expand\",\n    \"external-link\",\n    \"external-link-square-link-square\",\n    \"eye\",\n    \"eye-slash\",\n    \"eyedropper\",\n    \"fa\",\n    \"fast-backward\",\n    \"fast-forward\",\n    \"fax\",\n    \"feed\",\n    \"female\",\n    \"fighter-jet\",\n    \"file\",\n    \"file-archive\",\n    \"file-audio\",\n    \"file-code\",\n    \"file-excel\",\n    \"file-image\",\n    \"file-movie\",\n    \"file-pdf\",\n    \"file-photo\",\n    \"file-picture\",\n    \"file-powerpoint\",\n    \"file-sound\",\n    \"file-text\",\n    \"file-video\",\n    \"file-word\",\n    \"file-zip\",\n    \"files\",\n    \"film\",\n    \"filter\",\n    \"fire\",\n    \"fire-extinguisher\",\n    \"flag\",\n    \"flag-checkered\",\n    \"flash\",\n    \"flask\",\n    \"floppy\",\n    \"folder\",\n    \"folder-open\",\n    \"font\",\n    \"forward\",\n    \"frown\",\n    \"futbol\",\n    \"gamepad\",\n    \"legal\",\n    \"gbp\",\n    \"gear\",\n    \"gears\",\n    \"genderless\",\n    \"gift\",\n    \"git\",\n    \"git-square\",\n    \"glass\",\n    \"globe\",\n    \"google\",\n    \"graduation-cap\",\n    \"october\",\n    \"group\",\n    \"hand-grab\",\n    \"hand-lizard\",\n    \"hand-down\",\n    \"hand-left\",\n    \"hand-right\",\n    \"hand-up\",\n    \"hand-paper\",\n    \"hand-peace\",\n    \"hand-pointer\",\n    \"hand-rock\",\n    \"hand-scissors\",\n    \"hand-spock\",\n    \"hand-stop\",\n    \"handshake\",\n    \"hard-of-hearing\",\n    \"hashtag\",\n    \"hdd\",\n    \"header\",\n    \"headphones\",\n    \"heart\",\n    \"heartbeat\",\n    \"history\",\n    \"home\",\n    \"hospital\",\n    \"hotel\",\n    \"hourglass-0\",\n    \"hourglass-1\",\n    \"hourglass-2\",\n    \"hourglass-3\",\n    \"html5\",\n    \"i-cursor\",\n    \"id-badge\",\n    \"id-card\",\n    \"ils\",\n    \"image\",\n    \"inbox\",\n    \"indent\",\n    \"industry\",\n    \"info\",\n    \"info-circle-1\",\n    \"inr\",\n    \"instagram\",\n    \"institution\",\n    \"intersex\",\n    \"italic\",\n    \"jpy\",\n    \"key\",\n    \"keyboard\",\n    \"krw\",\n    \"language\",\n    \"laptop\",\n    \"leaf\",\n    \"legal-1\",\n    \"lemon\",\n    \"life-bouy\",\n    \"life-buoy\",\n    \"life-ring\",\n    \"life-saver\",\n    \"lightbulb\",\n    \"line-chart\",\n    \"link\",\n    \"linux\",\n    \"list\",\n    \"list-alt\",\n    \"list-ol\",\n    \"list-ul\",\n    \"location-arrow\",\n    \"lock\",\n    \"long-arrow-down\",\n    \"long-arrow-left\",\n    \"long-arrow-right\",\n    \"long-arrow-up\",\n    \"low-vision\",\n    \"magic\",\n    \"magnet\",\n    \"mail-forward\",\n    \"mail-reply\",\n    \"mail-reply-all\",\n    \"level-up\",\n    \"level-down\",\n    \"male\",\n    \"map-marker\",\n    \"map\",\n    \"map-pin\",\n    \"map-signs\",\n    \"mars\",\n    \"mars-double\",\n    \"mars-stroke\",\n    \"mars-stroke-h\",\n    \"mars-stroke-v\",\n    \"medkit\",\n    \"meh\",\n    \"mercury\",\n    \"microchip\",\n    \"microphone\",\n    \"microphone-slash\",\n    \"minus\",\n    \"minus-circle\",\n    \"minus-square\",\n    \"mobile\",\n    \"money\",\n    \"moon\",\n    \"mortar-board\",\n    \"motorcycle\",\n    \"mouse-pointer\",\n    \"music\",\n    \"navicon\",\n    \"neuter\",\n    \"newspaper\",\n    \"object-group\",\n    \"object-ungroup\",\n    \"outdent\",\n    \"pagelines\",\n    \"paint-brush\",\n    \"paper-plane\",\n    \"paperclip\",\n    \"paragraph\",\n    \"paste\",\n    \"pause\",\n    \"pause-circle\",\n    \"paw\",\n    \"pencil\",\n    \"pencil-square\",\n    \"pencil-square-1\",\n    \"percent\",\n    \"phone\",\n    \"phone-square\",\n    \"photo\",\n    \"pie-chart\",\n    \"plane\",\n    \"play\",\n    \"play-circle\",\n    \"plug\",\n    \"plus\",\n    \"plus-circle\",\n    \"plus-square\",\n    \"podcast\",\n    \"power-off\",\n    \"print\",\n    \"puzzle-piece\",\n    \"qrcode\",\n    \"question\",\n    \"question-circle\",\n    \"quote-left\",\n    \"quote-right\",\n    \"random\",\n    \"recycle\",\n    \"refresh\",\n    \"registered\",\n    \"remove\",\n    \"reorder\",\n    \"repeat\",\n    \"retweet\",\n    \"rmb\",\n    \"road\",\n    \"rocket\",\n    \"rotate-left\",\n    \"rotate-right\",\n    \"rouble\",\n    \"rss\",\n    \"rss-square-square\",\n    \"rub\",\n    \"ruble\",\n    \"rupee\",\n    \"s15\",\n    \"safari\",\n    \"save\",\n    \"scissors\",\n    \"search\",\n    \"search-minus\",\n    \"search-plus\",\n    \"send\",\n    \"server\",\n    \"share-alt\",\n    \"share-alt-square\",\n    \"share-square\",\n    \"shekel\",\n    \"shield\",\n    \"ship\",\n    \"shopping-bag\",\n    \"shopping-basket\",\n    \"shopping-cart\",\n    \"shower\",\n    \"sign-in\",\n    \"sign-language\",\n    \"sign-out\",\n    \"signal\",\n    \"signing\",\n    \"sitemap\",\n    \"sliders\",\n    \"smile\",\n    \"snowflake\",\n    \"soccer-ball\",\n    \"sort\",\n    \"sort-alpha-asc\",\n    \"sort-alpha-desc\",\n    \"sort-amount-asc\",\n    \"sort-amount-desc\",\n    \"sort-down\",\n    \"sort-numeric-asc\",\n    \"sort-numeric-desc\",\n    \"sort-up\",\n    \"space-shuttle\",\n    \"spinner\",\n    \"spoon\",\n    \"square\",\n    \"star-full\",\n    \"star-half\",\n    \"star\",\n    \"step-backward\",\n    \"step-forward\",\n    \"stethoscope\",\n    \"sticky-note\",\n    \"stop\",\n    \"stop-circle\",\n    \"street-view\",\n    \"strikethrough\",\n    \"subscript\",\n    \"subway\",\n    \"suitcase\",\n    \"sun\",\n    \"superscript\",\n    \"subway1\",\n    \"table\",\n    \"tablet\",\n    \"tachometer\",\n    \"tag\",\n    \"tags\",\n    \"tasks\",\n    \"taxi\",\n    \"television\",\n    \"terminal\",\n    \"text-height\",\n    \"text-width\",\n    \"th\",\n    \"th-large\",\n    \"th-list\",\n    \"thermometer-0\",\n    \"thermometer-1\",\n    \"thermometer-2\",\n    \"thermometer-3\",\n    \"thermometer-4\",\n    \"thumb-tack\",\n    \"thumbs-down\",\n    \"thumbs-up\",\n    \"ticket\",\n    \"times\",\n    \"times-circle\",\n    \"times-rectangle\",\n    \"tint\",\n    \"toggle-off\",\n    \"toggle-on\",\n    \"toggle-down\",\n    \"toggle-left\",\n    \"toggle-right\",\n    \"toggle-up\",\n    \"trademark\",\n    \"train\",\n    \"transgender\",\n    \"transgender-alt\",\n    \"trash\",\n    \"trash-1\",\n    \"tree\",\n    \"trophy\",\n    \"truck\",\n    \"try\",\n    \"tty\",\n    \"turkish-lira\",\n    \"tv\",\n    \"umbrella\",\n    \"underline\",\n    \"universal-access\",\n    \"university\",\n    \"unlink\",\n    \"unlock\",\n    \"unlock-alt\",\n    \"unsorted\",\n    \"upload\",\n    \"usb\",\n    \"usd\",\n    \"user\",\n    \"user-circle\",\n    \"user-md\",\n    \"user-plus\",\n    \"user-secret\",\n    \"user-times\",\n    \"users\",\n    \"vcard\",\n    \"venus\",\n    \"venus-double\",\n    \"venus-mars\",\n    \"video-camera\",\n    \"volume-control-phone\",\n    \"volume-down\",\n    \"volume-off\",\n    \"volume-up\",\n    \"warning\",\n    \"wheelchair\",\n    \"wheelchair-alt\",\n    \"wifi\",\n    \"wikipedia-w\",\n    \"window-close\",\n    \"window-maximize\",\n    \"window-minimize\",\n    \"window-restore\",\n    \"windows\",\n    \"won\",\n    \"wrench\",\n    \"yen\"\n]\n"
  },
  {
    "path": "modules/system/classes/sitemanager/HasActiveSite.php",
    "content": "<?php namespace System\\Classes\\SiteManager;\n\nuse App;\nuse Cms;\nuse Event;\nuse Config;\nuse System\\Models\\SiteDefinition;\n\n/**\n * HasActiveSite\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasActiveSite\n{\n    /**\n     * applyActiveSiteId\n     */\n    public function applyActiveSiteId($id)\n    {\n        if ($site = $this->getSiteFromId($id)) {\n            $this->applyActiveSite($site);\n        }\n    }\n\n    /**\n     * applyActiveSite applies active site configuration values to the application,\n     * typically used for frontend requests.\n     */\n    public function applyActiveSite(SiteDefinition $site)\n    {\n        if ($site->theme) {\n            if (Config::get('cms.original_theme') === null) {\n                Config::set('cms.original_theme', Config::get('cms.active_theme'));\n            }\n\n            Config::set('cms.active_theme', $site->theme);\n        }\n\n        if ($site->locale) {\n            if (Config::get('app.original_locale') === null) {\n                Config::set('app.original_locale', Config::get('app.locale'));\n            }\n\n            App::setLocale($site->locale);\n\n            if ($site->fallback_locale) {\n                if (Config::get('app.original_fallback_locale') === null) {\n                    Config::set('app.original_fallback_locale', Config::get('app.fallback_locale'));\n                }\n\n                App::setFallbackLocale($site->fallback_locale);\n            }\n        }\n\n        if ($site->is_custom_url) {\n            Config::set('app.url', $site->app_url);\n        }\n\n        if ($site->timezone) {\n            Config::set('cms.timezone', $site->timezone);\n        }\n\n        if ($site->is_prefixed) {\n            Cms::setUrlPrefix($site->route_prefix);\n        }\n\n        $this->setActiveSite($site);\n    }\n\n    /**\n     * getActiveSite\n     */\n    public function getActiveSite()\n    {\n        return $this->getSiteFromId($this->getActiveSiteId())\n            ?: $this->getPrimarySite();\n    }\n\n    /**\n     * getActiveSiteId\n     */\n    public function getActiveSiteId()\n    {\n        return Config::get('system.active_site');\n    }\n\n    /**\n     * setActiveSite\n     */\n    public function setActiveSiteId($id)\n    {\n        Config::set('system.active_site', $id);\n\n        /**\n         * @event system.site.setActiveSite\n         * Fires when the active site has been changed.\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.site.setActiveSite', function($id) {\n         *         \\Log::info(\"Site has been changed to $id\");\n         *     });\n         *\n         */\n        Event::fire('system.site.setActiveSite', [$id]);\n\n        $this->broadcastSiteChange($id);\n    }\n\n    /**\n     * setActiveSite\n     */\n    public function setActiveSite($site)\n    {\n        $this->setActiveSiteId($site->id);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/sitemanager/HasEditSite.php",
    "content": "<?php namespace System\\Classes\\SiteManager;\n\nuse Cms;\nuse Event;\nuse Cookie;\nuse Config;\nuse BackendAuth;\nuse Backend\\Models\\UserPreference;\nuse System\\Models\\SiteDefinition;\n\n/**\n * HasEditSite\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasEditSite\n{\n    /**\n     * @var mixed editSiteCache\n     */\n    protected $editSiteCache;\n\n    /**\n     * getEditSiteFromRequest resolves the edit site from the current request\n     * by checking cookie, user preference, and falling back to any edit site.\n     */\n    public function getEditSiteFromRequest()\n    {\n        /**\n         * @event system.site.getEditSite\n         * Overrides the edit site object.\n         *\n         * If a value is returned from this halting event, it will be used as the edit\n         * site object. Example usage:\n         *\n         *     Event::listen('system.site.getEditSite', function() {\n         *         return SiteDefinition::find(1);\n         *     });\n         *\n         */\n        $apiResult = Event::fire('system.site.getEditSite', [], true);\n        if ($apiResult !== null) {\n            return $apiResult;\n        }\n\n        $id = Cookie::get('admin_site');\n\n        if (!$id && BackendAuth::getUser()) {\n            $id = UserPreference::forUser()->get('system::site.edit', null);\n        }\n\n        if (!$id) {\n            return $this->getAnyEditSite();\n        }\n\n        return $this->getSiteFromId($id) ?: $this->getAnyEditSite();\n    }\n\n    /**\n     * applyEditSiteId\n     */\n    public function applyEditSiteId($id)\n    {\n        if ($site = $this->getSiteFromId($id)) {\n            $this->applyEditSite($site);\n        }\n    }\n\n    /**\n     * applyEditSite applies edit site configuration values to the application,\n     * typically used for backend requests.\n     */\n    public function applyEditSite(SiteDefinition $site)\n    {\n        if ($site->theme) {\n            Config::set('cms.edit_theme', $site->theme);\n        }\n\n        if ($site->is_prefixed) {\n            Cms::setUrlPrefix($site->route_prefix);\n        }\n\n        $this->setEditSite($site);\n    }\n\n    /**\n     * getEditSite returns the edit theme\n     */\n    public function getEditSite()\n    {\n        if ($this->editSiteCache !== null) {\n            return $this->editSiteCache;\n        }\n\n        $editSite = $this->getSiteFromId($this->getEditSiteId());\n\n        if (!$editSite || !$editSite->matchesRole(BackendAuth::getUser())) {\n            $editSite = $this->getAnyEditSite();\n        }\n\n        return $this->editSiteCache = $editSite;\n    }\n\n    /**\n     * getEditSiteId\n     */\n    public function getEditSiteId()\n    {\n        return Config::get('system.edit_site');\n    }\n\n    /**\n     * hasAnyEditSite returns true if there are edit sites\n     */\n    public function getAnyEditSite()\n    {\n        return $this->listEditEnabled()->isPrimary()->first()\n            ?: $this->listEditEnabled()->first();\n    }\n\n    /**\n     * hasAnyEditSite returns true if there are edit sites\n     */\n    public function hasAnyEditSite(): bool\n    {\n        return $this->listEditSites()->isEnabledEdit()->count() > 0;\n    }\n\n    /**\n     * hasMultiEditSite returns true if there are multiple sites for editing\n     */\n    public function hasMultiEditSite(): bool\n    {\n        return $this->listEditSites()->isEnabledEdit()->count() > 1;\n    }\n\n    /**\n     * listEditEnabled\n     */\n    public function listEditEnabled()\n    {\n        return $this->listEditSites()->isEnabledEdit();\n    }\n\n    /**\n     * listEditSites\n     */\n    public function listEditSites()\n    {\n        return $this->listSites()->filter(function($site) {\n            return $site->matchesRole(BackendAuth::getUser());\n        });\n    }\n\n    /**\n     * setEditSiteId\n     */\n    public function setEditSiteId($id)\n    {\n        $this->editSiteCache = null;\n\n        Config::set('system.edit_site', $id);\n\n        /**\n         * @event system.site.setEditSite\n         * Fires when the edit site has been changed.\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.site.setEditSite', function($id) {\n         *         \\Log::info(\"Site has been changed to $id\");\n         *     });\n         *\n         */\n        Event::fire('system.site.setEditSite', [$id]);\n\n        $this->broadcastSiteChange($id);\n    }\n\n    /**\n     * setEditSite\n     */\n    public function setEditSite($site)\n    {\n        $this->setEditSiteId($site->id);\n    }\n\n    /**\n     * storeEditSitePreference persists the edit site selection to user\n     * preference and cookie when the user actively switches sites.\n     */\n    public function storeEditSitePreference($id)\n    {\n        UserPreference::forUser()->set('system::site.edit', $id);\n\n        Cookie::queue(Cookie::forever('admin_site', $id));\n\n        $this->resetCache();\n\n        /**\n         * @event system.site.setEditSite\n         * Fires when the edit site has been changed.\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.site.setEditSite', function($id) {\n         *         \\Log::info(\"Site has been changed to $id\");\n         *     });\n         *\n         */\n        Event::fire('system.site.setEditSite', [$id]);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/sitemanager/HasPreferredLanguage.php",
    "content": "<?php namespace System\\Classes\\SiteManager;\n\n/**\n * HasPreferredLanguage implements browser detection logic\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasPreferredLanguage\n{\n    /**\n     * getSiteFromBrowser locates the site based on the browser locale, e.g. HTTP_ACCEPT_LANGUAGE\n     */\n    public function getSiteFromBrowser(string $acceptLanguage, $groupId = null)\n    {\n        $locales = $this->getLocalesFromBrowser($acceptLanguage);\n\n        $sites = $this->listEnabled()->inGroup($groupId);\n\n        foreach ($locales as $locale => $priority) {\n            if ($foundSite = $sites->inLocale($locale)->first()) {\n                return $foundSite;\n            }\n        }\n\n        return $sites->isPrimary()->first() ?: $sites->first();\n    }\n\n    /**\n     * getLocalesFromBrowser based on an accepted string, e.g. en-GB,en-US;q=0.9,en;q=0.8\n     * Returns a sorted array in format of `[(string) locale => (float) priority]`\n     */\n    public function getLocalesFromBrowser(string $acceptedStr): array\n    {\n        $result = $matches = [];\n        $acceptedStr = strtolower($acceptedStr);\n\n        // Find explicit matches\n        preg_match_all('/([\\w-]+)(?:[^,\\d]+([\\d.]+))?/', $acceptedStr, $matches, PREG_SET_ORDER);\n        foreach ($matches as $match) {\n            $locale = $match[1] ?? '';\n            $priority = (float) ($match[2] ?? 1.0);\n\n            if ($locale) {\n                $result[$locale] = $priority;\n            }\n        }\n\n        // Estimate other locales by popping off the region (en-us -> en)\n        foreach ($result as $locale => $priority) {\n            $shortLocale = explode('-', $locale)[0];\n            if ($shortLocale !== $locale && !array_key_exists($shortLocale, $result)) {\n                $result[$shortLocale] = $priority - 0.1;\n            }\n        }\n\n        arsort($result);\n        return $result;\n    }\n\n    /**\n     * @deprecated use Site::listEnabled()->inLocale()->first()\n     */\n    public function getSiteForLocale(string $locale)\n    {\n        return $this->listEnabled()->inLocale($locale)->first();\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/sitemanager/HasSiteContext.php",
    "content": "<?php namespace System\\Classes\\SiteManager;\n\nuse App;\nuse System\\Models\\SiteDefinition;\nuse Closure;\n\n/**\n * HasSiteContext\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasSiteContext\n{\n    /**\n     * @var bool globalContext disables site filters globally.\n     */\n    protected $globalContext = false;\n\n    /**\n     * @var SiteDefinition|null siteContext overrides the current site context.\n     */\n    protected $siteContext = null;\n\n    /**\n     * getSiteIdFromContext\n     * @return int|null\n     */\n    public function getSiteIdFromContext()\n    {\n        $site = $this->getSiteFromContext();\n\n        if (!$site || !$site->id) {\n            return null;\n        }\n\n        return (int) $site->id;\n    }\n\n    /**\n     * getSiteGroupIdFromContext returns the site group id for the active site.\n     * @return int\n     */\n    public function getSiteGroupIdFromContext()\n    {\n        $site = $this->getSiteFromContext();\n\n        return (int) ($site->group_id ?? 1);\n    }\n\n    /**\n     * getSiteCodeFromContext\n     * @return string|null\n     */\n    public function getSiteCodeFromContext()\n    {\n        $site = $this->getSiteFromContext();\n\n        if (!$site || !$site->code) {\n            return null;\n        }\n\n        return (string) $site->code;\n    }\n\n    /**\n     * getSiteFromContext\n     * @return SiteDefinition\n     */\n    public function getSiteFromContext()\n    {\n        if ($this->siteContext !== null) {\n            return $this->siteContext;\n        }\n\n        return App::runningInBackend()\n            ? $this->getEditSite()\n            : $this->getActiveSite();\n    }\n\n    /**\n     * hasGlobalContext\n     */\n    public function hasGlobalContext(): bool\n    {\n        return $this->globalContext;\n    }\n\n    /**\n     * withGlobalContext\n     */\n    public function withGlobalContext(Closure $callback)\n    {\n        $previous = $this->globalContext;\n\n        $this->globalContext = true;\n\n        try {\n            return $callback();\n        }\n        finally {\n            $this->globalContext = $previous;\n        }\n    }\n\n    /**\n     * withContext\n     */\n    public function withContext($siteId, Closure $callback)\n    {\n        $previous = $this->siteContext;\n\n        $site = $this->getSiteFromId($siteId);\n\n        if ($site) {\n            $this->broadcastSiteChange($site->id);\n        }\n\n        try {\n            $this->siteContext = $site;\n\n            return $callback();\n        }\n        finally {\n            $this->siteContext = $previous;\n\n            if ($previousId = $this->getSiteIdFromContext()) {\n                $this->broadcastSiteChange($previousId);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/uifactory/HasButtons.php",
    "content": "<?php namespace System\\Classes\\UiFactory;\n\nuse System\\Classes\\ViewComponent;\n\n/**\n * HasButtons\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasButtons\n{\n    /**\n     * button creates a button component\n     * @param string $label Button label\n     * @param string $href Link URL (optional)\n     * @param string $icon Icon class\n     * @param bool $primary Primary styling\n     * @param bool $secondary Secondary styling\n     */\n    public static function button(\n        string $_migrate = '',\n        string $label = '',\n        string $href = '',\n        string $icon = '',\n        bool $primary = false,\n        bool $secondary = false,\n        bool $danger = false,\n        string|array $hotkey = '',\n        ...$attributes\n    ): ViewComponent|\\System\\Classes\\UiFactory\\Migrate\\Button {\n        if ($_migrate !== '') {\n            return new \\System\\Classes\\UiFactory\\Migrate\\Button($_migrate, $label);\n        }\n\n        return new ViewComponent('button', compact(\n            'label',\n            'href',\n            'icon',\n            'primary',\n            'secondary',\n            'danger',\n            'hotkey'\n        ), $attributes);\n    }\n\n    /**\n     * popupButton creates a popup button component\n     *\n     * @param string $label Button label\n     * @param string $handler AJAX handler for the popup contents\n     * @param string $icon Icon class\n     * @param bool $primary Primary styling\n     * @param bool $secondary Secondary styling\n     * @param array $requestData Request data to pass with the AJAX request\n     */\n    public static function popupButton(\n        string $_migrate = '',\n        string $label = '',\n        string $handler = '',\n        string $icon = '',\n        bool $primary = false,\n        bool $secondary = false,\n        bool $danger = false,\n        string|array $hotkey = '',\n        array $requestData = [],\n        ...$attributes\n    ): ViewComponent|\\System\\Classes\\UiFactory\\Migrate\\PopupButton {\n        if ($_migrate !== '') {\n            return new \\System\\Classes\\UiFactory\\Migrate\\PopupButton($_migrate, $label);\n        }\n\n        return new ViewComponent('button.popup-button', compact(\n            'label',\n            'handler',\n            'icon',\n            'primary',\n            'secondary',\n            'danger',\n            'hotkey',\n            'requestData'\n        ), $attributes);\n    }\n\n    /**\n     * ajaxButton creates an AJAX button component\n     *\n     * @param string $label Button label\n     * @param string $handler AJAX handler to associate to the button\n     * @param string $icon Icon class\n     * @param bool $primary Primary styling\n     * @param bool $secondary Secondary styling\n     * @param array $requestData Request data to pass with the AJAX request\n     */\n    public static function ajaxButton(\n        string $_migrate = '',\n        string $label = '',\n        string $handler = '',\n        string $icon = '',\n        bool $primary = false,\n        bool $secondary = false,\n        bool $danger = false,\n        string|array $hotkey = '',\n        array $requestData = [],\n        ...$attributes\n    ): ViewComponent|\\System\\Classes\\UiFactory\\Migrate\\AjaxButton {\n        if ($_migrate !== '') {\n            return new \\System\\Classes\\UiFactory\\Migrate\\AjaxButton($_migrate, $label);\n        }\n\n        return new ViewComponent('button.ajax-button', compact(\n            'label',\n            'handler',\n            'icon',\n            'primary',\n            'secondary',\n            'danger',\n            'hotkey',\n            'requestData'\n        ), $attributes);\n    }\n\n    /**\n     * iconButton creates an icon-only button component\n     *\n     * @param string $label Accessible label (renders as title attribute)\n     * @param string $icon Icon class (applied to the element, not as a child)\n     * @param string $handler AJAX handler (optional)\n     * @param bool $danger Danger hover styling\n     */\n    public static function iconButton(\n        string $label = '',\n        string $icon = '',\n        string $handler = '',\n        bool $danger = false,\n        string|array $hotkey = '',\n        ...$attributes\n    ): ViewComponent {\n        return new ViewComponent('button.icon-button', compact(\n            'label',\n            'icon',\n            'handler',\n            'danger',\n            'hotkey'\n        ), $attributes);\n    }\n\n    /**\n     * dropdownButton creates a dropdown button component (slot-based)\n     *\n     * Usage:\n     *     <?php Ui::dropdownButton(label: 'Actions', secondary: true)->slot() ?>\n     *         <?= Ui::dropdownItem(label: 'Edit', handler: 'onEdit') ?>\n     *     <?php Ui::end() ?>\n     *\n     * @param string $label Button label\n     * @param string $icon Icon class\n     * @param bool $primary Primary styling\n     * @param bool $secondary Secondary styling\n     * @param bool $caret Show dropdown caret arrow\n     */\n    public static function dropdownButton(\n        string $label = '',\n        string $icon = '',\n        bool $primary = false,\n        bool $secondary = false,\n        bool $caret = true,\n        ...$attributes\n    ): ViewComponent {\n        return new ViewComponent('button.dropdown-button', compact(\n            'label',\n            'icon',\n            'primary',\n            'secondary',\n            'caret'\n        ), $attributes);\n    }\n\n    /**\n     * dropdownItem creates a dropdown menu item component\n     *\n     * @param string $label Item label\n     * @param string $handler AJAX handler (optional)\n     * @param string $href Link URL (optional)\n     * @param string $icon Icon class (optional)\n     */\n    public static function dropdownItem(\n        string $label = '',\n        string $handler = '',\n        string $href = '',\n        string $icon = '',\n        ...$attributes\n    ): ViewComponent {\n        return new ViewComponent('button.dropdown-item', compact(\n            'label',\n            'handler',\n            'href',\n            'icon'\n        ), $attributes);\n    }\n\n    /**\n     * dropdownDivider creates a dropdown menu separator\n     */\n    public static function dropdownDivider(): ViewComponent\n    {\n        return new ViewComponent('button.dropdown-divider');\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/uifactory/HasInputs.php",
    "content": "<?php namespace System\\Classes\\UiFactory;\n\nuse System\\Classes\\ViewComponent;\n\n/**\n * HasInputs\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasInputs\n{\n    /**\n     * searchInput creates a search input\n     * @param string $name Input name\n     * @param string $value Input value\n     * @param string $placeholder Placeholder text\n     * @param bool $handler AJAX handler\n     */\n    public static function searchInput(\n        string $name = '',\n        ?string $value = null,\n        string $placeholder = '',\n        string $handler = '',\n        ...$attributes\n    ): ViewComponent {\n        return new ViewComponent('input.search-input', compact(\n            'name',\n            'value',\n            'placeholder',\n            'handler'\n        ), $attributes);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/uifactory/migrate/AjaxButton.php",
    "content": "<?php namespace System\\Classes\\UiFactory\\Migrate;\n\n/**\n * AjaxButton\n *\n * @method AjaxButton ajaxHandler(string $ajaxHandler) ajaxHandler\n * @method AjaxButton ajaxData(array $ajaxData) ajaxData\n * @method AjaxButton ajaxSuccess(array $ajaxSuccess) ajaxSuccess JS function\n * @method AjaxButton confirmMessage(string $confirmMessage) confirmMessage\n * @method AjaxButton loadingMessage(string $loadingMessage) loadingMessage\n * @method AjaxButton listCheckedRequest(bool $listCheckedRequest) listCheckedRequest includes selected list checkboxes in the AJAX request\n * @method AjaxButton attachLoading(bool $attachLoading) attachLoading attach loading indicator when an AJAX request is running\n * @method AjaxButton attachPopupLoading(bool $attachPopupLoading) attachPopupLoading\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass AjaxButton extends Button\n{\n    /**\n     * __construct\n     */\n    public function __construct($label = 'Button', $ajaxHandler = 'onAjax', $config = [])\n    {\n        $this->ajaxHandler($ajaxHandler);\n\n        parent::__construct($label, $config);\n    }\n\n    /**\n     * buildAttributes\n     */\n    protected function buildAttributes(array $attr = []): array\n    {\n        $attr = parent::buildAttributes($attr);\n\n        $attr['data-request'] = $this->ajaxHandler;\n\n        if ($this->ajaxData !== null) {\n            $attr['data-request-data'] = $this->ajaxData;\n        }\n\n        if ($this->ajaxSuccess !== null) {\n            $attr['data-request-success'] = $this->ajaxSuccess;\n        }\n\n        if ($this->confirmMessage !== null) {\n            $attr['data-request-confirm'] = __($this->confirmMessage);\n        }\n\n        if ($this->loadingMessage !== null) {\n            $attr['data-request-message'] = __($this->loadingMessage);\n        }\n\n        if ($this->attachLoading) {\n            $attr['data-attach-loading'] = true;\n        }\n\n        if ($this->attachPopupLoading) {\n            $attr['data-popup-load-indicator'] = true;\n        }\n\n        if ($this->listCheckedRequest) {\n            $attr['data-list-checked-request'] = true;\n        }\n\n        return $attr;\n    }\n\n    /**\n     * formDeleteButton\n     */\n    public function formDeleteButton(): static\n    {\n        $this->label('');\n\n        $this->replaceCssClass('oc-icon-delete btn-icon danger pull-right');\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/uifactory/migrate/Button.php",
    "content": "<?php namespace System\\Classes\\UiFactory\\Migrate;\n\nuse Html;\nuse Backend;\nuse System\\Classes\\UiElement;\n\n/**\n * Button\n *\n * @method Button label(string $label) label for the button\n * @method Button icon(string $icon) icon\n * @method Button circleIcon(string $circleIcon) circleIcon button\n * @method Button linkUrl(string $linkUrl) linkUrl will use an anchor button\n * @method Button cssClass(string $cssClass) cssClass for the button\n * @method Button replaceCssClass(string $replaceCssClass) replaceCssClass defaults for the button\n * @method Button type(string $type) type of button\n * @method Button attributes(array $attributes) attributes in HTML\n * @method Button primary(bool $primary) primary button\n * @method Button outline(bool $outline) outline button\n * @method Button redirectBack(bool $redirectBack) redirectBack\n * @method Button dismissPopup(bool $dismissPopup) dismissPopup\n * @method Button loadingPopup(bool $loadingPopup) loadingPopup\n * @method Button listCheckedTrigger(bool $listCheckedTrigger) listCheckedTrigger enables the button when a list checkbox is selected\n * @method Button labelHtml(bool $labelHtml) labelHtml\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Button extends UiElement\n{\n    /**\n     * __construct\n     */\n    public function __construct($label = 'Button', $linkOrConfig = null, $config = [])\n    {\n        $this->label($label);\n\n        if (is_array($linkOrConfig)) {\n            $config = $linkOrConfig;\n        }\n        elseif ($linkOrConfig !== null && $linkOrConfig !== '') {\n            $this->linkTo($linkOrConfig);\n        }\n\n        parent::__construct($config);\n    }\n\n    /**\n     * initDefaultValues override method\n     */\n    protected function initDefaultValues()\n    {\n        $this->type('default');\n    }\n\n    /**\n     * render the element\n     */\n    public function render(): callable\n    {\n        return function() { ?>\n\n            <?php if ($this->linkUrl): ?>\n\n                <a\n                    href=\"<?= $this->linkUrl ?>\"\n                    <?= Html::attributes($this->buildAttributes()) ?>\n                ><?= $this->buildLabel() ?></a>\n\n            <?php else: ?>\n\n                <button\n                    <?= Html::attributes($this->buildAttributes()) ?>\n                ><?= $this->buildLabel() ?></button>\n\n            <?php endif ?>\n\n        <?php };\n    }\n\n    /**\n     * buildLabel\n     */\n    protected function buildLabel()\n    {\n        $html = '';\n\n        if ($iconName = $this->icon) {\n            $html .= '<i class=\"'.$iconName.'\"></i> ';\n        }\n\n        if (!$this->circleIcon) {\n            $html .= $this->labelHtml ? $this->label : e(__($this->label));\n        }\n\n        return $html;\n    }\n\n    /**\n     * buildAttributes\n     */\n    protected function buildAttributes(array $attr = []): array\n    {\n        $attr['type'] = $this->type === 'primary' ? 'submit' : 'button';\n\n        if ($this->hotkey) {\n            $attr['data-hotkey'] = implode(',', (array) $this->hotkey);\n        }\n\n        if ($this->redirectBack) {\n            $attr['data-browser-redirect-back'] = true;\n        }\n\n        if ($this->loadingPopup) {\n            $attr['data-popup-load-indicator'] = true;\n        }\n\n        if ($this->listCheckedTrigger) {\n            $attr['data-list-checked-trigger'] = true;\n            $attr['disabled'] = true;\n        }\n\n        if ($this->circleIcon) {\n            $attr['title'] = $this->labelHtml ? $this->label : __($this->label);\n        }\n\n        if ($this->dismissPopup) {\n            $attr['data-dismiss'] = 'popup';\n        }\n\n        $attr['class'] = $this->buildCssClass();\n\n        if (is_array($customAttrs = $this->attributes)) {\n            $attr = array_merge($customAttrs, $attr);\n        }\n\n        return $attr;\n    }\n\n    /**\n     * buildCssClass\n     */\n    protected function buildCssClass(): string\n    {\n        if ($this->replaceCssClass !== null) {\n            return $this->replaceCssClass;\n        }\n\n        $css = [];\n\n        $css[] = 'btn';\n\n        if ($this->outline) {\n            $css[] = 'btn-outline-'.$this->type;\n        }\n        else {\n            $css[] = 'btn-'.$this->type;\n        }\n\n        if ($this->circleIcon) {\n            $css[] = 'btn-circle';\n        }\n\n        if ($this->internalCssClass) {\n            $css[] = $this->internalCssClass;\n        }\n\n        $css[] = $this->cssClass;\n\n        return implode(' ', $css);\n    }\n\n    /**\n     * hotkey sets a hotkey pattern\n     */\n    public function hotkey(...$hotkeys): static\n    {\n        $this->config['hotkey'] = $hotkeys;\n        return $this;\n    }\n\n    /**\n     * linkTo\n     */\n    public function linkTo(string $linkUrl, bool $isRaw = false): static\n    {\n        $this->linkUrl = $isRaw ? $linkUrl : Backend::url($linkUrl);\n\n        return $this;\n    }\n\n    /**\n     * circleIcon shows a circle button with an icon inside\n     */\n    public function circleIcon(string $circleIcon): static\n    {\n        $this->config['circleIcon'] = true;\n\n        $this->icon($circleIcon);\n\n        return $this;\n    }\n\n    /**\n     * primary\n     */\n    public function primary(): static\n    {\n        $this->type('primary');\n        return $this;\n    }\n\n    /**\n     * secondary\n     */\n    public function secondary(): static\n    {\n        $this->type('secondary');\n        return $this;\n    }\n\n    /**\n     * success\n     */\n    public function success(): static\n    {\n        $this->type('success');\n        return $this;\n    }\n\n    /**\n     * danger\n     */\n    public function danger(): static\n    {\n        $this->type('danger');\n        return $this;\n    }\n\n    /**\n     * warning\n     */\n    public function warning(): static\n    {\n        $this->type('warning');\n        return $this;\n    }\n\n    /**\n     * info\n     */\n    public function info(): static\n    {\n        $this->type('info');\n        return $this;\n    }\n\n    /**\n     * textLink displays a button just like a text link with no padding\n     */\n    public function textLink(): static\n    {\n        if ($this->linkUrl === null) {\n            $this->linkUrl('javascript:;');\n        }\n\n        $this->type('link');\n        $this->internalCssClass('p-0');\n        return $this;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/uifactory/migrate/Callout.php",
    "content": "<?php namespace System\\Classes\\UiFactory\\Migrate;\n\nuse System\\Classes\\UiElement;\n\n/**\n * Callout\n *\n * @method Callout type(string $type) type\n * @method Callout icon(string $icon) icon\n * @method Callout label(string $label) label\n * @method Callout comment(string $comment) comment\n * @method Callout commentHtml(string $commentHtml) commentHtml\n * @method Callout cssClass(string $cssClass) cssClass\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Callout extends UiElement\n{\n    /**\n     * initDefaultValues override method\n     */\n    protected function initDefaultValues()\n    {\n        $this->type('info')->icon();\n    }\n\n    /**\n     * render the element\n     */\n    public function render(): callable\n    {\n        return function() { ?>\n\n            <div class=\"<?= $this->buildCssClass() ?>\">\n                <?php if ($this->action): ?>\n                    <div class=\"action\">\n                        <?= $this->action ?>\n                    </div>\n                <?php endif ?>\n                <?php if ($this->hasHeader()): ?>\n                    <div class=\"header\">\n                        <?php if (is_string($this->icon)): ?>\n                            <div class=\"custom-icon\">\n                                <i class=\"<?= $this->icon ?>\"></i>\n                            </div>\n                        <?php endif ?>\n                        <?php if ($this->label): ?>\n                            <h3><?= $this->label ?></h3>\n                        <?php endif ?>\n                        <?php if ($this->commentHtml): ?>\n                            <?= $this->commentHtml ?>\n                        <?php elseif ($this->comment): ?>\n                            <p><?= $this->comment ?></p>\n                        <?php endif ?>\n                    </div>\n                <?php endif ?>\n                <?php if ($this->body): ?>\n                    <div class=\"content\">\n                        <?= $this->renderBody($this->body) ?>\n                    </div>\n                <?php endif ?>\n            </div>\n\n        <?php };\n    }\n\n    /**\n     * buildCssClass\n     */\n    protected function buildCssClass(): string\n    {\n        $css = [];\n        $css[] = 'callout fade show';\n        $css[] = 'callout-'.$this->type;\n\n        if (!$this->icon || !$this->hasHeader()) {\n            $css[] = 'no-icon';\n        }\n\n        if (is_string($this->icon)) {\n            $css[] = 'has-custom-icon';\n        }\n\n        if (!$this->label) {\n            $css[] = 'no-title';\n        }\n\n        if (!$this->comment) {\n            $css[] = 'no-subheader';\n        }\n\n        $css[] = $this->cssClass;\n\n        return implode(' ', $css);\n    }\n\n    /**\n     * hasHeader\n     */\n    protected function hasHeader(): bool\n    {\n        return $this->label || $this->comment || $this->commentHtml;\n    }\n\n    /**\n     * success\n     */\n    public function success(): static\n    {\n        $this->type('success');\n        return $this;\n    }\n\n    /**\n     * danger\n     */\n    public function danger(): static\n    {\n        $this->type('danger');\n        return $this;\n    }\n\n    /**\n     * warning\n     */\n    public function warning(): static\n    {\n        $this->type('warning');\n        return $this;\n    }\n\n    /**\n     * tip\n     */\n    public function tip(): static\n    {\n        $this->type('info');\n        return $this;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/uifactory/migrate/PopupButton.php",
    "content": "<?php namespace System\\Classes\\UiFactory\\Migrate;\n\n/**\n * PopupButton\n *\n * @method PopupButton ajaxHandler(string $ajaxHandler) ajaxHandler\n * @method PopupButton ajaxData(array $ajaxData) ajaxData\n * @method PopupButton size(string $size) size of the popup\n * @method PopupButton keyboard(bool $keyboard) keyboard can close the popup\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PopupButton extends AjaxButton\n{\n    /**\n     * buildAttributes\n     */\n    protected function buildAttributes(array $attr = []): array\n    {\n        $attr = parent::buildAttributes($attr);\n\n        $attr['data-control'] = 'popup';\n\n        // Popup uses data-handler\n        unset($attr['data-request']);\n        $attr['data-handler'] = $this->ajaxHandler;\n\n        if ($this->size !== null) {\n            $attr['data-size'] = $this->size;\n        }\n\n        if ($this->keyboard === false) {\n            $attr['data-keyboard'] = 'false';\n        }\n\n        return $attr;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/updatemanager/HasGatewayAccess.php",
    "content": "<?php namespace System\\Classes\\UpdateManager;\n\nuse Url;\nuse Lang;\nuse Http;\nuse Date;\nuse Config;\nuse System;\nuse Request;\nuse System\\Models\\Parameter;\nuse System\\Models\\PluginVersion;\nuse ApplicationException;\nuse Exception;\n\n/**\n * HasGatewayAccess\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasGatewayAccess\n{\n    /**\n     * @var string Secure API Key\n     */\n    protected $key;\n\n    /**\n     * @var string Secure API Secret\n     */\n    protected $secret;\n\n    /**\n     * requestServerData contacts the update server for a response.\n     * @param  string $uri\n     * @param  array  $postData\n     * @return array\n     */\n    public function requestServerData($uri, $postData = [])\n    {\n        $result = $this->makeHttpRequest($this->createServerUrl($uri), $postData);\n        $contents = $result->body();\n\n        if ($result->status() === 404) {\n            throw new ApplicationException(Lang::get('system::lang.server.response_not_found'));\n        }\n\n        if ($result->status() !== 200) {\n            throw new ApplicationException(\n                strlen($contents)\n                ? $contents\n                : Lang::get('system::lang.server.response_empty')\n            );\n        }\n\n        $resultData = false;\n\n        try {\n            $resultData = @json_decode($contents, true);\n        }\n        catch (Exception $ex) {\n            throw new ApplicationException(Lang::get('system::lang.server.response_invalid'));\n        }\n\n        if ($resultData === false || (is_string($resultData) && !strlen($resultData))) {\n            throw new ApplicationException(Lang::get('system::lang.server.response_invalid'));\n        }\n\n        return $resultData;\n    }\n\n    /**\n     * requestServerFile downloads a file from the update server.\n     * @param string $uri\n     * @param string $fileCode\n     * @param array $postData\n     */\n    public function requestServerFile($uri, $fileCode, $postData = [])\n    {\n        $filePath = $this->getFilePath($fileCode);\n\n        $result = $this->makeHttpRequest($this->createServerUrl($uri), $postData);\n\n        if ($result->status() === 404) {\n            throw new ApplicationException(Lang::get('system::lang.server.response_not_found'));\n        }\n\n        if ($result->status() !== 200) {\n            throw new ApplicationException(\n                strlen($contents = $result->body())\n                ? $contents\n                : Lang::get('system::lang.server.response_empty')\n            );\n        }\n\n        // Guzzle response\n        file_put_contents($filePath, $result->toPsrResponse()->getBody());\n    }\n\n    /**\n     * Set the API security for all transmissions.\n     * @param string $key    API Key\n     * @param string $secret API Secret\n     */\n    public function setSecurity($key, $secret)\n    {\n        $this->key = $key;\n        $this->secret = $secret;\n    }\n\n    /**\n     * createServerUrl creates a complete gateway server URL from supplied URI\n     * @param string $uri URI\n     * @return string URL\n     */\n    protected function createServerUrl($uri)\n    {\n        $gateway = Config::get('system.update_gateway', 'https://gateway.octobercms.com/api');\n        if (substr($gateway, -1) !== '/') {\n            $gateway .= '/';\n        }\n\n        return $gateway . $uri;\n    }\n\n    /**\n     * makeHttpRequest makes a specialized server request to a URL.\n     * @param string $url\n     * @param array $postData\n     * @return \\Illuminate\\Http\\Client\\Response\n     */\n    protected function makeHttpRequest($url, $postData)\n    {\n        // New HTTP instance\n        $http = Http::asForm();\n        $headers = [];\n\n        // Post data\n        $postData['protocol_version'] = '2.0';\n        $postData['client'] = 'October CMS';\n        $postData['server'] = base64_encode(json_encode([\n            'october' => System::VERSION,\n            'php' => PHP_VERSION,\n            'url' => Url::to('/'),\n            'ip' => Request::ip(),\n        ] + Parameter::getGatewayServiceData()));\n\n        // Include project key if available\n        if ($projectKey = Parameter::get('system::project.key')) {\n            $postData['project'] = $projectKey;\n        }\n\n        // Signed request\n        if ($this->key && $this->secret) {\n            $postData['nonce'] = $this->createNonce();\n            $headers['Rest-Key'] = $this->key;\n            $headers['Rest-Sign'] = $this->createSignature($postData, $this->secret);\n        }\n\n        // Gateway auth\n        if ($credentials = Config::get('system.update_gateway_auth')) {\n            if (is_string($credentials)) {\n                $credentials = explode(':', $credentials);\n            }\n\n            list($user, $pass) = $credentials;\n            $http->withBasicAuth($user, $pass);\n        }\n\n        // Attach headers\n        if ($headers) {\n            $http->withHeaders($headers);\n        }\n\n        return $http->post($url, $postData);\n    }\n\n    /**\n     * Create a nonce based on millisecond time\n     * @return int\n     */\n    protected function createNonce()\n    {\n        $mt = explode(' ', microtime());\n        return $mt[1] . substr($mt[0], 2, 6);\n    }\n\n    /**\n     * Create a unique signature for transmission.\n     * @return string\n     */\n    protected function createSignature($data, $secret)\n    {\n        return base64_encode(hash_hmac('sha512', http_build_query($data, '', '&'), base64_decode($secret), true));\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/updatemanager/ManagesApp.php",
    "content": "<?php namespace System\\Classes\\UpdateManager;\n\nuse App;\nuse Event;\n\n/**\n * ManagesApp\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait ManagesApp\n{\n    /**\n     * migrateApp runs migrations on the app directory\n     */\n    public function migrateApp()\n    {\n        $migrator = $this->getMigrator();\n\n        // Suppress the \"Nothing to migrate\" message\n        if (isset($this->notesOutput)) {\n            $migrator->setOutput(new \\Symfony\\Component\\Console\\Output\\NullOutput);\n\n            Event::listen(\\Illuminate\\Database\\Events\\MigrationsStarted::class, function() use ($migrator) {\n                $migrator->setOutput($this->notesOutput);\n            });\n        }\n\n        if ($migrator->run(app_path('database/migrations'))) {\n            $this->migrateCount++;\n        }\n    }\n\n    /**\n     * rollbackPlugin rolls back application migrations\n     */\n    public function rollbackApp()\n    {\n        // This method attempts to roll back everything, as per Laravel monolith logic,\n        // so silence the command to ignore \"Migration not found\" errors.\n        $migrator = App::make('migrator');\n\n        // if (isset($this->notesOutput)) {\n        //     $migrator->setOutput($this->notesOutput);\n        // }\n\n        // @todo Potential issue here since a migration file collision could unintentionally\n        // rollback a core module migration. Ideally the migration table needs to be extended\n        // to include a module/namespace column to correctly isolate migrations from each other.\n        $migrator->reset((array) app_path('database/migrations'));\n    }\n\n    /**\n     * seedModule runs seeds  on the app directory\n     */\n    public function seedApp()\n    {\n        $className = 'App\\Database\\Seeds\\DatabaseSeeder';\n        if (!class_exists($className)) {\n            return;\n        }\n\n        $this->note('<info>Seeding App</info>');\n\n        $seeder = App::make($className);\n\n        if ($cmd = $this->getNotesCommand()) {\n            $seeder->setCommand($cmd);\n        }\n\n        $seeder->run();\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/updatemanager/ManagesModules.php",
    "content": "<?php namespace System\\Classes\\UpdateManager;\n\nuse App;\nuse File;\nuse Lang;\nuse Http;\nuse Event;\nuse System as SystemHelper;\nuse System\\Models\\Parameter;\nuse October\\Rain\\Composer\\ComposerManager;\nuse ApplicationException;\nuse SystemException;\nuse Exception;\n\n/**\n * ManagesModules\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait ManagesModules\n{\n    /**\n     * migrateModules migrates all modules\n     */\n    public function migrateModules()\n    {\n        foreach (SystemHelper::listModules() as $module) {\n            $this->migrateModule($module);\n        }\n    }\n\n    /**\n     * migrateModule runs migrations on a single module\n     */\n    public function migrateModule(string $module)\n    {\n        $migrator = $this->getMigrator();\n\n        // Suppress the \"Nothing to migrate\" message\n        if (isset($this->notesOutput)) {\n            $migrator->setOutput(new \\Symfony\\Component\\Console\\Output\\NullOutput);\n\n            Event::listen(\\Illuminate\\Database\\Events\\MigrationsStarted::class, function() use ($migrator) {\n                $migrator->setOutput($this->notesOutput);\n            });\n        }\n\n        if ($migrator->run(base_path('modules/'.strtolower($module).'/database/migrations'))) {\n            $this->migrateCount++;\n        }\n    }\n\n    /**\n     * seedModules seeds all modules\n     */\n    public function seedModules()\n    {\n        foreach (SystemHelper::listModules() as $module) {\n            $this->seedModule($module);\n        }\n    }\n\n    /**\n     * seedModule runs seeds on a module\n     */\n    public function seedModule(string $module)\n    {\n        $className = $module.'\\Database\\Seeds\\DatabaseSeeder';\n        if (!class_exists($className)) {\n            return;\n        }\n\n        $this->note(sprintf('<info>Seeding Module</info>: %s', $module));\n\n        $seeder = App::make($className);\n\n        if ($cmd = $this->getNotesCommand()) {\n            $seeder->setCommand($cmd);\n        }\n\n        $seeder->run();\n    }\n\n    /**\n     * getCurrentVersion returns the current version, with or without build\n     */\n    public function getCurrentVersion(): string\n    {\n        $version = SystemHelper::VERSION;\n\n        $build = $this->getCurrentBuildNumber();\n        if ($build !== null) {\n            $version .= '.' . $build;\n        }\n\n        return $version;\n    }\n\n    /**\n     * getCurrentBuildNumber return the current build number\n     */\n    public function getCurrentBuildNumber(): ?string\n    {\n        return Parameter::get('system::core.build');\n    }\n\n    /**\n     * setBuild sets the build number and hash\n     */\n    public function setBuild(string $build): void\n    {\n        Parameter::set('system::core.build', $build);\n        Parameter::set('system::update.retry', null);\n    }\n\n    /**\n     * setBuildNumberManually asks the gateway for the latest build number and stores it.\n     */\n    public function setBuildNumberManually()\n    {\n        $version = null;\n\n        try {\n            // Locate version from october/system package\n            $versions = ComposerManager::instance()->getPackageVersions(['october/system']);\n            $version = $versions['october/system'] ?? null;\n        }\n        catch (Exception $ex) {\n        }\n\n        try {\n            // Locate version from root composer package (october/october),\n            // only when the build number has never been set (fresh install)\n            if ($version === null && $this->getCurrentBuildNumber() === null) {\n                $version = ComposerManager::instance()->getRootVersion();\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        try {\n            // Locate version from seed file\n            if ($version === null) {\n                if (\n                    File::exists($seedFile = storage_path('cms/version.json')) &&\n                    ($contents = json_decode(File::get($seedFile), true)) &&\n                    isset($contents['version'])\n                ) {\n                    $version = $contents['version'] ?? null;\n                    File::delete($seedFile);\n                }\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        try {\n            // Locate version from october/rain package\n            if ($version === null) {\n                $versions = ComposerManager::instance()->getPackageVersions(['october/rain']);\n                $version = $versions['october/rain'] ?? null;\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        if ($version === null) {\n            return '0';\n        }\n\n        $build = $this->getBuildFromVersion($version);\n\n        $this->setBuild((int) $build);\n\n        return $build;\n    }\n\n    /**\n     * requestChangelog returns the latest changelog information.\n     */\n    public function requestChangelog()\n    {\n        $result = Http::get('https://octobercms.com/changelog?json='.SystemHelper::VERSION);\n        $contents = $result->body();\n\n        if ($result->status() === 404) {\n            throw new ApplicationException(Lang::get('system::lang.server.response_empty'));\n        }\n\n        if ($result->status() !== 200) {\n            throw new ApplicationException(\n                strlen($contents)\n                ? $contents\n                : Lang::get('system::lang.server.response_empty')\n            );\n        }\n\n        try {\n            $resultData = json_decode($contents, true);\n        }\n        catch (Exception $ex) {\n            throw new ApplicationException(Lang::get('system::lang.server.response_invalid'));\n        }\n\n        return $resultData;\n    }\n\n    /**\n     * getBuildFromVersion will return the patch version of a semver string\n     * eg: 1.2.3 -> 3, 1.2.3-dev -> 3\n     */\n    protected function getBuildFromVersion(string $version): int\n    {\n        $parts = explode('.', $version);\n        if (count($parts) !== 3) {\n            return 0;\n        }\n\n        $lastPart = $parts[2];\n        if (!is_numeric($lastPart)) {\n            $lastPart = explode('-', $lastPart)[0];\n        }\n\n        if (!is_numeric($lastPart)) {\n            return 0;\n        }\n\n        return $lastPart;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/updatemanager/ManagesPlugins.php",
    "content": "<?php namespace System\\Classes\\UpdateManager;\n\nuse Lang;\nuse October\\Rain\\Composer\\ComposerManager;\nuse ApplicationException;\n\n/**\n * ManagesPlugins\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait ManagesPlugins\n{\n    /**\n     * installPlugin using composer\n     */\n    public function installPlugin($name)\n    {\n        [$package, $version] = $this->findPluginComposerCode($name);\n        if (!$package) {\n            throw new ApplicationException(\"Package [$name] not found\");\n        }\n\n        $composer = ComposerManager::instance();\n        $composer->require([$package => $this->getComposerVersionConstraint($version)]);\n    }\n\n    /**\n     * findPluginComposerCode locates a composer code for a plugin\n     */\n    protected function findPluginComposerCode(string $code): array\n    {\n        // Local\n        if ($plugin = $this->pluginManager->findByIdentifier($code)) {\n            $composerCode = $this->pluginManager->getComposerCode($plugin);\n            $composerVersion = $this->versionManager->getLatestVersion($code);\n        }\n        // Remote\n        else {\n            $details = $this->requestPluginDetails($code);\n            $composerCode = $details['composer_code'] ?? '';\n            $composerVersion = $details['composer_version'] ?? '';\n        }\n\n        return [$composerCode, $composerVersion];\n    }\n\n    /**\n     * uninstallPlugin attempts to remove the plugin using composer before\n     * deleting from the filesystem\n     */\n    public function uninstallPlugin($name)\n    {\n        if (!$this->pluginManager->hasPlugin($name)) {\n            throw new ApplicationException(\"Plugin [$name] not found\");\n        }\n\n        // Remove via composer\n        $composer = ComposerManager::instance();\n        $composerCode = $this->pluginManager->getComposerCode($name);\n\n        if ($composerCode && $composer->hasPackage($composerCode)) {\n            $this->rollbackPlugin($name);\n            $composer->remove([$composerCode]);\n        }\n\n        $this->pluginManager->deletePlugin($name);\n    }\n\n    /**\n     * requestPluginDetails looks up a plugin from the update server\n     */\n    public function requestPluginDetails(string $name): array\n    {\n        return $this->requestServerData('package/detail', ['name' => $name, 'type' => 'plugin']);\n    }\n\n    /**\n     * requestPluginContent looks up content for a plugin from the update server\n     */\n    public function requestPluginContent(string $name): array\n    {\n        return $this->requestServerData('package/content', ['name' => $name, 'type' => 'plugin']);\n    }\n\n    /**\n     * migratePlugins migrates all plugins\n     */\n    public function migratePlugins()\n    {\n        $plugins = $this->pluginManager->getPlugins();\n        foreach ($plugins as $code => $plugin) {\n            $this->migratePlugin($code);\n        }\n    }\n\n    /**\n     * migratePlugin runs update on a single plugin\n     */\n    public function migratePlugin(string $name)\n    {\n        // Update the plugin database and version\n        $plugin = $this->pluginManager->findByIdentifier($name);\n\n        if (!$plugin) {\n            $this->note('<error>Unable to find</error> ' . $name);\n            return;\n        }\n\n        $this->versionManager->setNotesOutput($this->notesOutput);\n\n        if ($this->versionManager->updatePlugin($plugin)) {\n            $this->migrateCount++;\n        }\n    }\n\n    /**\n     * updatePlugin\n     * @deprecated use migratePlugin\n     */\n    public function updatePlugin(string $name)\n    {\n        $this->migratePlugin($name);\n    }\n\n    /**\n     * rollbackPlugin removes an existing plugin database and version record\n     */\n    public function rollbackPlugin(string $name)\n    {\n        $plugin = $this->pluginManager->findByIdentifier($name);\n\n        if (!$plugin && $this->versionManager->purgePlugin($name)) {\n            $this->note('<info>Purged from database</info> ' . $name);\n            return;\n        }\n\n        if ($this->versionManager->removePlugin($plugin)) {\n            $this->note('<info>Rolled back</info> ' . $name);\n            return;\n        }\n\n        $this->note('<error>Unable to find</error> ' . $name);\n    }\n\n    /**\n     * rollbackPlugin removes an existing plugin database and version record\n     */\n    public function rollbackPluginToVersion(string $name, string $toVersion)\n    {\n        $toVersion = ltrim($toVersion, 'v');\n\n        $plugin = $this->pluginManager->findByIdentifier($name);\n\n        if (!$plugin && $this->versionManager->purgePlugin($name)) {\n            $this->note('<info>Purged from database</info> ' . $name);\n            return;\n        }\n\n        if (!$this->versionManager->hasVersion($plugin, $toVersion)) {\n            throw new ApplicationException(Lang::get('system::lang.updates.plugin_version_not_found'));\n        }\n\n        if ($this->versionManager->removePluginToVersion($plugin, $toVersion)) {\n            $this->note(\"<info>Rolled back</info> {$name} <info>to version</info> {$toVersion}\");\n            return;\n        }\n\n        $this->note('<error>Unable to find</error> ' . $name);\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/updatemanager/ManagesProject.php",
    "content": "<?php namespace System\\Classes\\UpdateManager;\n\nuse File;\nuse Cache;\nuse System as SystemHelper;\nuse System\\Models\\Parameter;\nuse October\\Rain\\Composer\\ComposerManager;\n\n/**\n * ManagesProject\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait ManagesProject\n{\n    /**\n     * canUpdateProject checks if composer is ready to access the gateway using authentication\n     */\n    public function canUpdateProject(): bool\n    {\n        $canUpdate = (bool) ($this->requestProjectDetails($this->getComposerProjectKey())['is_active'] ?? false);\n\n        Parameter::set('system::project.is_active', $canUpdate);\n\n        return $canUpdate;\n    }\n\n    /**\n     * getComposerProjectKey returns the project key used by composer\n     */\n    public function getComposerProjectKey(): ?string\n    {\n        return ComposerManager::instance()\n            ->getAuthCredentials($this->getComposerUrl(false))['password'] ?? null;\n    }\n\n    /**\n     * getProjectKey locates the project key from the file system and seeds the parameter\n     */\n    public function getProjectKey()\n    {\n        if (\n            File::exists($seedFile = storage_path('cms/project.json')) &&\n            ($contents = json_decode(File::get($seedFile), true)) &&\n            isset($contents['project'])\n        ) {\n            Parameter::set('system::project.key', $contents['project']);\n            File::delete($seedFile);\n        }\n\n        return Parameter::get('system::project.key');\n    }\n\n    /**\n     * getProjectDetails returns the active project details\n     */\n    public function getProjectDetails(): ?object\n    {\n        if (!$projectKey = $this->getProjectKey()) {\n            return null;\n        }\n\n        $projectId = Parameter::get('system::project.id');\n\n        if (!$projectId) {\n            $details = $this->requestProjectDetails($projectKey);\n            if (!isset($details['id'])) {\n                return null;\n            }\n\n            Parameter::set([\n                'system::project.id' => $details['id'],\n                'system::project.key' => $details['project_id'],\n                'system::project.name' => $details['name'],\n                'system::project.owner' => $details['owner'],\n                'system::project.is_active' => $details['is_active']\n            ]);\n        }\n\n        return (object) [\n            'id' => $projectId,\n            'key' => $projectKey,\n            'name' => Parameter::get('system::project.name'),\n            'owner' => Parameter::get('system::project.owner'),\n            'is_active' => Parameter::get('system::project.is_active'),\n        ];\n    }\n\n    /**\n     * storeProjectDetails\n     */\n    public function storeProjectDetails(array $details)\n    {\n        // Save project locally\n        Parameter::set([\n            'system::project.id' => $details['id'],\n            'system::project.key' => $details['project_id'],\n            'system::project.name' => $details['name'],\n            'system::project.owner' => $details['owner'],\n            'system::project.is_active' => $details['is_active']\n        ]);\n\n        // Save authentication token\n        ComposerManager::instance()->addAuthCredentials(\n            $this->getComposerUrl(false),\n            $details['email'],\n            $details['project_id']\n        );\n    }\n\n    /**\n     * syncProjectPackages compares installed packages to project packages\n     */\n    public function syncProjectPackages(): array\n    {\n        $crossCheckPackage = function(string $composerCode, array $packages): bool {\n            foreach ($packages as $package) {\n                $name = $package['name'] ?? null;\n                if ($name === $composerCode) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n\n        $plugins = $themes = [];\n        $packages = ComposerManager::instance()->listAllPackages();\n        $project = $this->requestProjectDetails();\n\n        foreach (($project['plugins'] ?? []) as $plugin) {\n            $toCode = $plugin['code'] ?? null;\n            $composerCode = $plugin['composer_code'] ?? null;\n            $composerVersion = $plugin['composer_version'] ?? '*';\n\n            if ($composerCode === null || $crossCheckPackage($composerCode, $packages)) {\n                continue;\n            }\n\n            $plugins[$toCode] = [$composerCode, $composerVersion];\n        }\n\n        foreach (($project['themes'] ?? []) as $theme) {\n            $toCode = $theme['code'] ?? null;\n            $composerCode = $theme['composer_code'] ?? null;\n            $composerVersion = $theme['composer_version'] ?? '*';\n\n            if ($composerCode === null || $crossCheckPackage($composerCode, $packages)) {\n                continue;\n            }\n\n            $themes[$toCode] = [$composerCode, $composerVersion];\n        }\n\n        return array_merge($plugins, $themes);\n    }\n\n    /**\n     * requestProjectDetails requests details about a project based on its identifier\n     */\n    public function requestProjectDetails(?string $projectKey = null): array\n    {\n        if ($projectKey === null) {\n            $projectKey = $this->getProjectKey();\n        }\n\n        return $this->requestServerData('project/detail', ['id' => $projectKey]);\n    }\n\n    /**\n     * requestBrowseProject will list project details and cache it\n     */\n    public function requestBrowseProject()\n    {\n        $cacheKey = 'system-market-project';\n\n        if ($cache = Cache::memo()->get($cacheKey)) {\n            return @json_decode(@base64_decode($cache), true) ?: [];\n        }\n\n        $data = $this->requestProjectDetails();\n\n        // 5 minutes\n        $expiresAt = now()->addMinutes(5);\n        Cache::put($cacheKey, base64_encode(json_encode($data)), $expiresAt);\n\n        return $data;\n    }\n\n    /**\n     * requestBrowseProducts will list available products\n     */\n    public function requestBrowseProducts($type = null, $page = null)\n    {\n        if ($type !== 'plugin' && $type !== 'theme') {\n            $type = 'plugin';\n        }\n\n        $cacheKey = \"system-market-browse-{$type}-{$page}\";\n\n        if ($cache = Cache::memo()->get($cacheKey)) {\n            return @json_decode(@base64_decode($cache), true) ?: [];\n        }\n\n        $data = $this->requestServerData('package/browse', [\n            'type' => $type,\n            'page' => $page,\n            'version' => SystemHelper::VERSION\n        ]);\n\n        // 60 minutes\n        $expiresAt = now()->addMinutes(60);\n        Cache::put($cacheKey, base64_encode(json_encode($data)), $expiresAt);\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "modules/system/classes/updatemanager/ManagesThemes.php",
    "content": "<?php namespace System\\Classes\\UpdateManager;\n\nuse Lang;\nuse System;\nuse System as SystemHelper;\nuse Cms\\Models\\ThemeSeed;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse October\\Rain\\Composer\\ComposerManager;\nuse October\\Rain\\Filesystem\\Zip;\nuse ApplicationException;\n\n/**\n * ManagesThemes\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait ManagesThemes\n{\n    /**\n     * installTheme using composer\n     */\n    public function installTheme($name)\n    {\n        [$package, $version] = $this->findThemeComposerCode($name);\n        if (!$package) {\n            throw new ApplicationException(\"Package [$name] not found\");\n        }\n\n        $composer = ComposerManager::instance();\n        $composer->require([$package => $this->getComposerVersionConstraint($version)]);\n\n        // Lock theme\n        $themeFolder = strtolower(str_replace('.', '-', System::composerToOctoberCode($package)));\n        $this->themeManager->createChildTheme($themeFolder);\n        $this->themeManager->performLockOnTheme($themeFolder);\n    }\n\n    /**\n     * findThemeComposerCode locates a composer code for a plugin\n     */\n    protected function findThemeComposerCode(string $code): array\n    {\n        // Local\n        if ($this->themeManager->findByIdentifier($code)) {\n            $composerCode = $this->themeManager->getComposerCode($code);\n            $composerVersion = $this->themeManager->getLatestVersion($code);\n        }\n        // Remote\n        else {\n            $details = $this->requestThemeDetails($code);\n            $composerCode = $details['composer_code'] ?? '';\n            $composerVersion = $details['composer_version'] ?? '';\n        }\n\n        return [$composerCode, $composerVersion];\n    }\n\n    /**\n     * uninstallTheme attempts to remove the theme using composer before\n     * deleting from the filesystem\n     */\n    public function uninstallTheme($name)\n    {\n        $themeExists = CmsTheme::exists($name);\n        if (!$themeExists) {\n            $name = (string) $this->themeManager->findDirectoryName($name);\n        }\n\n        if (!CmsTheme::exists($name)) {\n            throw new ApplicationException(\"Theme [$name] not found\");\n        }\n\n        // Remove via composer\n        $composer = ComposerManager::instance();\n        $composerCode = $this->themeManager->getComposerCode($name);\n\n        if ($composerCode && $composer->hasPackage($composerCode)) {\n            $composer->remove([$composerCode]);\n        }\n\n        $this->themeManager->deleteTheme($name);\n    }\n\n    /**\n     * requestThemeDetails looks up a theme from the update server\n     */\n    public function requestThemeDetails(string $name): array\n    {\n        return $this->requestServerData('package/detail', ['name' => $name, 'type' => 'theme']);\n    }\n\n    /**\n     * requestThemeContent looks up content for a theme from the update server\n     */\n    public function requestThemeContent(string $name): array\n    {\n        return $this->requestServerData('package/content', ['name' => $name, 'type' => 'theme']);\n    }\n\n    /**\n     * downloadTheme downloads a theme from the update server.\n     * @param string $name\n     * @param string $hash\n     */\n    public function downloadTheme($name)\n    {\n        $fileCode = $name . md5($name);\n\n        $this->requestServerFile('package/download', $fileCode, [\n            'type' => 'theme',\n            'name' => $name,\n            'version' => SystemHelper::VERSION\n        ]);\n    }\n\n    /**\n     * extractTheme extracts a theme after it has been downloaded.\n     */\n    public function extractTheme($name)\n    {\n        $fileCode = $name . md5($name);\n        $filePath = $this->getFilePath($fileCode);\n        $innerPath = str_replace('.', '-', strtolower($name));\n\n        if (!Zip::extract($filePath, themes_path($innerPath))) {\n            throw new ApplicationException(Lang::get('system::lang.zip.extract_failed', ['file' => $filePath]));\n        }\n\n        @unlink($filePath);\n    }\n\n    /**\n     * seedTheme seeds a theme blueprints, data and language files\n     */\n    public function seedTheme(string $name)\n    {\n        $themeName = str_replace('.', '-', strtolower($name));\n        if (!CmsTheme::exists($themeName)) {\n            throw new ApplicationException(\"Theme [$name] not found\");\n        }\n\n        $theme = CmsTheme::load($themeName);\n        $model = new ThemeSeed;\n\n        $model->seed($theme);\n    }\n}\n"
  },
  {
    "path": "modules/system/composer.json",
    "content": "{\n    \"name\": \"october/system\",\n    \"type\": \"october-module\",\n    \"description\": \"System module for October CMS\",\n    \"homepage\": \"https://octobercms.com\",\n    \"keywords\": [\"october cms\", \"october\", \"system\"],\n    \"authors\": [\n        {\n            \"name\": \"Alexey Bobkov\",\n            \"email\": \"aleksey.bobkov@gmail.com\"\n        },\n        {\n            \"name\": \"Samuel Georges\",\n            \"email\": \"daftspunky@gmail.com\"\n        }\n    ]\n}\n"
  },
  {
    "path": "modules/system/console/ComposerScript.php",
    "content": "<?php namespace System\\Console;\n\nuse Composer\\Installer\\PackageEvent;\nuse Composer\\Script\\Event;\n\n/**\n * ComposerScript is a collection of composer script logic\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ComposerScript\n{\n    /**\n     * postAutoloadDump\n     */\n    public static function postAutoloadDump(Event $event)\n    {\n        self::clearMeta();\n\n        static::passthruArtisan('package:discover');\n    }\n\n    /**\n     * postUpdateCmd occurs after the update command has been executed, or after\n     * the install command has been executed without a lock file present.\n     */\n    public static function postUpdateCmd(Event $event)\n    {\n        static::passthruArtisan('october:util set build');\n\n        static::passthruArtisan('october:mirror --composer');\n    }\n\n    /**\n     * prePackageUninstall occurs before a package is uninstalled\n     */\n    public static function prePackageUninstall(PackageEvent $event)\n    {\n        $package = $event->getOperation()->getPackage();\n\n        if (self::isOfType($package, 'plugin')) {\n            static::passthruArtisan(\"plugin:remove {$package} --composer\");\n        }\n    }\n\n    /**\n     * isOfType checks if a package is a plugin or theme\n     *\n     * rainlab-vanilla-theme dev-master, theme -> true\n     */\n    protected static function isOfType(string $package, string $type): bool\n    {\n        if (substr($package, -strlen('-'.$type)) === (string) '-'.$type) {\n            return true;\n        }\n\n        if (strpos($package, '-'.$type.'-') !== false) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * clearMeta purges meta files (discovered package cache, etc) to prevent errors\n     */\n    protected static function clearMeta()\n    {\n        $metaFiles = [\n            'storage/framework/packages.php',\n            'storage/framework/classes.php',\n            'storage/framework/services.php',\n            'storage/cms/manifest.php'\n        ];\n\n        foreach ($metaFiles as $filePath) {\n            if (file_exists($packagesMeta = __DIR__ . '/../../../'.$filePath)) {\n                @unlink($packagesMeta);\n            }\n        }\n    }\n\n    /**\n     * passthruArtisan\n     */\n    protected static function passthruArtisan($command, &$errCode = null)\n    {\n        passthru('\"'.PHP_BINARY.'\" artisan ' .$command);\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberAbout.php",
    "content": "<?php namespace System\\Console;\n\nuse Illuminate\\Foundation\\Console\\AboutCommand as AboutCommandBase;\nuse System\\Classes\\UpdateManager;\n\n/**\n * OctoberAbout command\n */\nclass OctoberAbout extends AboutCommandBase\n{\n    /**\n     * @var string signature for the console command.\n     */\n    protected $signature = 'october:about {--only= : The section to display}\n        {--json : Output the information as JSON}';\n\n    /**\n     * @var string description for the console command.\n     */\n    protected $description = 'Display basic information about this application';\n\n    /**\n     * Gather information about the application.\n     *\n     * @return void\n     */\n    protected function gatherApplicationInformation()\n    {\n        parent::gatherApplicationInformation();\n\n        static::addToSection('October CMS', fn () => [\n            'October CMS Version' => UpdateManager::instance()->getCurrentVersion(),\n            'Plugin Updates Count' => UpdateManager::instance()->check(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberDown.php",
    "content": "<?php namespace System\\Console;\n\nuse Illuminate\\Console\\Command;\n\n/**\n * OctoberDown is deprecated\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n * @deprecated\n * @see System\\Console\\OctoberMigrate\n */\nclass OctoberDown extends Command\n{\n    /**\n     * @var string name of console command\n     */\n    protected $name = 'october:down';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = '[Deprecated] Destroys all database tables for October and all plugins.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->error('Command october:down is deprecated, please use october:migrate --rollback instead');\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberFresh.php",
    "content": "<?php namespace System\\Console;\n\nuse File;\nuse Artisan;\nuse Illuminate\\Console\\Command;\nuse System\\Classes\\PluginManager;\n\n/**\n * OctoberFresh is a console command to remove boilerplate.\n *\n * This removes the demo theme and plugin. A great way to start a fresh project!\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass OctoberFresh extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'october:fresh\n        {--f|force : Force the operation to run.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Removes the demo theme and plugin.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        if (!$this->confirmToProceed('Are you sure?')) {\n            return;\n        }\n\n        $demoThemePath = themes_path().'/demo';\n\n        if (File::exists($demoThemePath)) {\n            File::deleteDirectory($demoThemePath);\n\n            $manager = PluginManager::instance();\n            $manager->deletePlugin('October.Demo');\n\n            $this->info('Demo has been removed! Enjoy a fresh start.');\n        }\n        else {\n            $this->error('Demo theme is already removed.');\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberMigrate.php",
    "content": "<?php namespace System\\Console;\n\nuse Illuminate\\Console\\Command;\nuse System\\Classes\\UpdateManager;\nuse October\\Rain\\Database\\Updater;\n\n/**\n * OctoberMigrate migrates the database up or down.\n *\n * This builds up all database tables that are registered for October CMS and all plugins.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass OctoberMigrate extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature for the console command.\n     */\n    protected $signature = 'october:migrate {--f|force : Force the operation to run.}\n        {--r|rollback : Destroys all database tables and records.}\n        {--skip-errors : Continue with migration through exceptions.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Builds database tables for October CMS and all plugins.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $skipErrors = $this->option('skip-errors');\n        if ($skipErrors) {\n            Updater::skipErrors();\n        }\n\n        if ($this->option('rollback')) {\n            return $this->handleRollback();\n        }\n\n        $this->line('Migrating Application and Plugins');\n\n        UpdateManager::instance()->setNotesCommand($this)->update();\n\n        if ($skipErrors) {\n            Updater::skipErrors(false);\n        }\n    }\n\n    /**\n     * handleRollback performs a database rollback\n     */\n    protected function handleRollback()\n    {\n        if (!$this->confirmToProceed('This will DESTROY all database tables.')) {\n            return;\n        }\n\n        UpdateManager::instance()->setNotesCommand($this)->uninstall();\n    }\n\n    /**\n     * getDefaultConfirmCallback specifies the default confirmation callback\n     */\n    protected function getDefaultConfirmCallback()\n    {\n        return function() {\n            return true;\n        };\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberMirror.php",
    "content": "<?php namespace System\\Console;\n\nuse File;\nuse Event;\nuse System;\nuse Config;\nuse stdClass;\nuse Illuminate\\Console\\Command;\nuse Exception;\n\n/**\n * OctoberMirror command to implement a \"public\" folder.\n *\n * This command will create symbolic links to files and directories\n * that are commonly required to be publicly available.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass OctoberMirror extends Command\n{\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'october:mirror\n        {destination? : The destination path relative to the current directory. Eg: public}\n        {--composer : Command triggered from composer.}\n        {--relative : Create symlinks relative to the public directory.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Generates a mirrored public folder using symbolic links.';\n\n    /**\n     * @var array files to symlink\n     */\n    protected $files = [\n        '.htaccess',\n        'web.config',\n        'index.php',\n        'favicon.ico',\n        'robots.txt',\n        'humans.txt',\n        'sitemap.xml',\n    ];\n\n    /**\n     * @var array directories to symlink\n     */\n    protected $directories = [\n        'app/assets',\n        'app/resources',\n        'storage/app/uploads/public',\n        'storage/app/public',\n        'storage/app/media',\n        'storage/app/resources',\n        'storage/temp/public',\n    ];\n\n    /**\n     * @var array wildcards to symlink\n     */\n    protected $wildcards = [\n        'modules/*/assets',\n        'modules/*/resources',\n        'modules/*/behaviors/*/assets',\n        'modules/*/behaviors/*/resources',\n        'modules/*/widgets/*/assets',\n        'modules/*/widgets/*/resources',\n        'modules/*/formwidgets/*/assets',\n        'modules/*/formwidgets/*/resources',\n        'modules/*/filterwidgets/*/assets',\n        'modules/*/filterwidgets/*/resources',\n        'modules/*/reportwidgets/*/assets',\n        'modules/*/reportwidgets/*/resources',\n        'modules/*/vuecomponents/*/assets',\n        'modules/*/vuecomponents/*/resources',\n\n        'plugins/*/*/assets',\n        'plugins/*/*/resources',\n        'plugins/*/*/behaviors/*/assets',\n        'plugins/*/*/behaviors/*/resources',\n        'plugins/*/*/reportwidgets/*/assets',\n        'plugins/*/*/reportwidgets/*/resources',\n        'plugins/*/*/formwidgets/*/assets',\n        'plugins/*/*/formwidgets/*/resources',\n        'plugins/*/*/filterwidgets/*/assets',\n        'plugins/*/*/filterwidgets/*/resources',\n        'plugins/*/*/widgets/*/assets',\n        'plugins/*/*/widgets/*/resources',\n        'plugins/*/*/vuecomponents/*/assets',\n        'plugins/*/*/vuecomponents/*/resources',\n\n        'themes/*/assets',\n        'themes/*/resources',\n    ];\n\n    /**\n     * @var string destinationPath for the symlink\n     */\n    protected $destinationPath;\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        // Called internally via composer\n        if ($this->option('composer') && !$this->useAutoMirror()) {\n            return;\n        }\n\n        $this->getDestinationPath();\n\n        $this->line(sprintf('<info>Mirror Path:</info> [%s]', $this->destinationPath));\n\n        $paths = new stdClass;\n        $paths->files = $this->files;\n        $paths->directories = $this->directories;\n        $paths->wildcards = $this->wildcards;\n\n        /**\n         * @event system.console.mirror.extendPaths\n         * Enables extending the `php artisan october:mirror` command\n         *\n         * You will have access to a $paths stdClass with `files`, `directories`, `wildcards` properties available for modifying.\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.console.mirror.extendPaths', function ($paths) {\n         *          $paths->directories = array_merge($paths->directories, ['plugins/myauthor/myplugin/public']);\n         *     });\n         *\n         */\n        Event::fire('system.console.mirror.extendPaths', [$paths]);\n\n        foreach ($paths->directories as $directory) {\n            $this->mirrorDirectory($directory);\n        }\n\n        foreach ($paths->wildcards as $wildcard) {\n            $this->mirrorWildcard($wildcard);\n        }\n\n        foreach ($paths->files as $file) {\n            $this->mirrorFile($file);\n        }\n    }\n\n    /**\n     * mirrorFile mirrors a single file\n     */\n    protected function mirrorFile(string $src)\n    {\n        $dest = $this->getDestinationPath().'/'.$src;\n\n        if (!File::isFile($src) || File::isFile($dest)) {\n            return false;\n        }\n\n        // Disabled until junctions can be resolved\n        // if ($this->isWindows()) {\n        //     File::copy($src, $dest);\n        // }\n        // else {\n        //     $this->makeSymlink($src, $dest);\n        // }\n\n        $this->makeSymlink($src, $dest);\n\n        $this->info(\" - Mirrored: {$src}\");\n    }\n\n    /**\n     * mirrorDirectory mirrors a directory\n     */\n    protected function mirrorDirectory(string $src)\n    {\n        $dest = $this->getDestinationPath().'/'.$src;\n\n        if (!File::isDirectory($src) || File::isDirectory($dest)) {\n            return false;\n        }\n\n        if (!File::isDirectory(dirname($dest))) {\n            File::makeDirectory(dirname($dest), 0755, true);\n        }\n\n        // Disabled until junctions can be resolved\n        // if ($this->isWindows()) {\n        //     $this->makeJunction($src, $dest);\n        // }\n        // else {\n        //     $this->makeSymlink($src, $dest);\n        // }\n\n        $this->makeSymlink($src, $dest);\n\n        $this->info(\" - Mirrored: {$src}\");\n    }\n\n    /**\n     * mirrorWildcard matches a wild card and mirrors it\n     */\n    protected function mirrorWildcard(string $wildcard)\n    {\n        if (strpos($wildcard, '*') === false) {\n            return $this->mirrorDirectory($wildcard);\n        }\n\n        [$start, $end] = explode('*', $wildcard, 2);\n\n        $startDir = base_path().'/'.$start;\n\n        if (!File::isDirectory($startDir)) {\n            return false;\n        }\n\n        foreach (File::directories($startDir) as $directory) {\n            $this->mirrorWildcard($start.basename($directory).$end);\n        }\n    }\n\n    /**\n     * mirror performs the symlink operation\n     */\n    protected function makeSymlink(string $src, string $dest)\n    {\n        if ($this->option('relative')) {\n            $finalSrc = $this->makeRelativePath($dest, $src);\n        }\n        else {\n            $finalSrc = base_path($src);\n        }\n\n        try {\n            symlink($finalSrc, $dest);\n        }\n        catch (Exception $ex) {\n            $msg = $ex->getMessage();\n            $this->output->error(\"Could not mirror directory at {$dest}: {$msg}\");\n            exit(1);\n        }\n    }\n\n    /**\n     * makeJunction performs a junction in windows\n     */\n    protected function makeJunction(string $src, string $dest)\n    {\n        $cmd = sprintf(\n            'mklink /J %s %s',\n            str_replace('/', DIRECTORY_SEPARATOR, $src),\n            str_replace('/', DIRECTORY_SEPARATOR, $dest)\n        );\n\n        $result = $code = null;\n        exec($cmd . ' 2>&1', $result, $code);\n\n        if ($code !== 0) {\n            $msg = $result[0];\n            $this->output->error(\"Could not mirror directory at {$dest}: {$msg}\");\n            exit(1);\n        }\n    }\n\n    /**\n     * makeRelativePath will count the number of to reach the base using a relative path.\n     * For example: from:public/index.php, to:index.php = ../index.php\n     */\n    protected function makeRelativePath($from, $to)\n    {\n        $from = str_replace(DIRECTORY_SEPARATOR, '/', $from);\n        $to = str_replace(DIRECTORY_SEPARATOR, '/', $to);\n\n        $dir = explode('/', is_file($from) ? dirname($from) : rtrim($from, '/'));\n        $file = explode('/', $to);\n\n        while ($dir && $file && ($dir[0] === $file[0])) {\n            array_shift($dir);\n            array_shift($file);\n        }\n\n        $out = str_repeat('../', count($dir)) . implode('/', $file);\n\n        if (strpos($out, '../') === 0) {\n            $out = rtrim(substr($out, 3), '/');\n        }\n\n        return $out;\n    }\n\n    /**\n     * getDestinationPath will look at the destination argument of default to the public path\n     */\n    protected function getDestinationPath()\n    {\n        if ($this->destinationPath !== null) {\n            return $this->destinationPath;\n        }\n\n        $destPath = $this->argument('destination');\n\n        // Default to public folder\n        if (!$destPath) {\n            if (!File::exists(base_path('public'))) {\n                File::makeDirectory(base_path('public'));\n            }\n\n            return $this->destinationPath = 'public';\n        }\n\n        if (!File::isDirectory($destPath)) {\n            $this->output->error(\"Directory does not exist [{$destPath}]. Please create it first and try again\");\n            exit(1);\n        }\n\n        return $this->destinationPath = $destPath;\n    }\n\n    /**\n     * useAutoMirror setting\n     */\n    protected function useAutoMirror(): bool\n    {\n        $setting = Config::get('system.auto_mirror_public', false);\n        if ($setting === null) {\n            return !System::checkDebugMode();\n        }\n\n        return (bool) $setting;\n    }\n\n    /**\n     * isWindows determines if host machine is running a Windows OS\n     */\n    protected function isWindows(): bool\n    {\n        return '\\\\' === DIRECTORY_SEPARATOR;\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberOptimize.php",
    "content": "<?php\n\nnamespace System\\Console;\n\nuse System;\nuse Illuminate\\Console\\Command;\n\n/**\n * OctoberOptimize optimizes the framework and platform files\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass OctoberOptimize extends Command\n{\n    /**\n     * @var string name of console command\n     */\n    protected $name = 'october:optimize';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Cache the framework and platform files';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->components->info('Caching the framework and platform files');\n\n        $commands = collect([\n            'config' => fn () => $this->callSilent('config:cache') == 0,\n            'routes' => fn () => $this->callSilent('route:cache') == 0,\n        ]);\n\n        if (System::hasModule('Cms')) {\n            $commands->put('theme', fn () => $this->callSilent('theme:cache') == 0);\n        }\n\n        $commands->each(fn ($task, $description) => $this->components->task($description, $task));\n\n        $this->newLine();\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberPasswd.php",
    "content": "<?php namespace System\\Console;\n\nuse Str;\nuse BackendAuth;\nuse Backend\\Models\\User;\nuse Illuminate\\Console\\Command;\n\n/**\n * OctoberPasswd changes the password of a backend user\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass OctoberPasswd extends Command\n{\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'october:passwd\n        {username? : The username of the backend user.}\n        {password? : The new password.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Change the password of a Backend user.';\n\n    /**\n     * @var bool displayPassword will show the user their password\n     */\n    protected $displayPassword = false;\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        if (!$username = $this->argument('username')) {\n            $username = $this->ask('Username to reset');\n        }\n\n        // Lookup user\n        $user = User::where('login', $username)->orWhere('email', $username)->first();\n\n        if (!$user) {\n            $this->error('The specified user does not exist.');\n            return;\n        }\n\n        // Determine password\n        if (!$password = $this->argument('password')) {\n            $password = $this->secret('Enter new password (leave blank for random password)');\n        }\n\n        if (!$password) {\n            $password = $this->generatePassword();\n        }\n\n        // Change password\n        $user->password = $password;\n        $user->forceSave();\n\n        // Clear throttles\n        BackendAuth::clearThrottleForUserId($user->id);\n\n        $this->output->success('Password successfully changed');\n\n        if ($this->displayPassword) {\n            $this->line('Password set to <info>' . $password . '</info>.');\n        }\n    }\n\n    /**\n     * generatePassword returns an automatically generated password\n     */\n    protected function generatePassword(): string\n    {\n        $this->displayPassword = true;\n\n        return Str::random(22);\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberUp.php",
    "content": "<?php namespace System\\Console;\n\nuse Illuminate\\Console\\Command;\n\n/**\n * OctoberUp is deprecated\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n * @deprecated\n * @see System\\Console\\OctoberMigrate\n */\nclass OctoberUp extends Command\n{\n    /**\n     * @var string name of console command\n     */\n    protected $name = 'october:up';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = '[Deprecated] Builds database tables for October and all plugins.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->error('Command october:up is deprecated, please use october:migrate instead');\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberUpdate.php",
    "content": "<?php namespace System\\Console;\n\nuse Illuminate\\Console\\Command;\nuse System\\Helpers\\Cache as CacheHelper;\nuse System\\Classes\\UpdateManager;\nuse October\\Rain\\Composer\\ComposerManager;\nuse Exception;\n\n/**\n * OctoberUpdate performs a system update.\n *\n * This updates October CMS and all plugins, database and libraries.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass OctoberUpdate extends Command\n{\n    /**\n     * @var string name of console command\n     */\n    protected $name = 'october:update';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Updates October CMS and all plugins, database and files.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $composer = ComposerManager::instance();\n        $composer->setOutputCommand($this, $this->input);\n\n        if (!UpdateManager::instance()->canUpdateProject()) {\n            $this->output->error(__(\"License is unpaid or has expired. Please visit octobercms.com to obtain a license.\"));\n            exit(1);\n        }\n\n        $this->output->section(__('Updating package manager'));\n        try {\n            $composer->update(['composer/composer']);\n        }\n        catch (Exception $ex) {\n        }\n\n        $this->output->section(__('Updating application files'));\n        $composer->update();\n\n        CacheHelper::instance()->clearMeta();\n\n        $this->output->section(__('Setting build number'));\n        static::passthruArtisan('october:util set build');\n        $this->newLine()->newLine();\n\n        $this->output->section(__('Finishing update process'));\n        $errCode = null;\n        static::passthruArtisan('october:migrate', $errCode);\n        $this->newLine();\n\n        if ($errCode !== 0) {\n            $this->output->error('Migration failed. Check output above');\n            exit(1);\n        }\n\n        $this->output->success(__('Update process complete'));\n    }\n\n    /**\n     * passthruArtisan\n     */\n    protected static function passthruArtisan($command, &$errCode = null)\n    {\n        passthru('\"'.PHP_BINARY.'\" artisan ' .$command, $errCode);\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberUtil.php",
    "content": "<?php namespace System\\Console;\n\nuse Illuminate\\Console\\Command;\nuse ApplicationException;\n\n/**\n * OctoberUtil is a console command for other utility commands\n *\n * This provides functionality that doesn't quite deserve its own dedicated\n * console class. It is used mostly developer tools and maintenance tasks.\n *\n * Currently supported commands:\n *\n * - purge thumbs: Deletes all thumbnail files in the uploads directory.\n * - purge orphans: Deletes files in \"system_files\" that do not belong to any other model.\n * - purge uploads: Deletes files in the uploads directory that do not exist in the \"system_files\" table.\n * - purge deferred: Cleans up all records that have deferred bindings\n * - git pull: Perform \"git pull\" on all plugins and themes.\n * - compile assets: Compile registered Language, LESS and JS files.\n * - compile js: Compile registered JS files only.\n * - compile less: Compile registered LESS files only.\n * - compile scss: Compile registered SCSS files only.\n * - compile lang: Compile registered Language files only.\n * - compile docs: Compile complex documentation file for a theme or plugin.\n * - set build: Pull the latest stable build number from the update gateway and set it as the current build number.\n *\n * Available patch versions:\n *\n * - patch 2.0\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass OctoberUtil extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n    use \\System\\Console\\OctoberUtilPatches;\n    use \\System\\Console\\OctoberUtilCommands;\n    use \\System\\Console\\OctoberUtilRefitLang;\n    use \\System\\Console\\OctoberUtilPackageDocs;\n\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'october:util\n        {name?* : The utility command to perform.}\n        {--f|force : Force the operation to run when in production.}\n        {--debug : Run the operation in debug / development mode.}\n        {--value= : Specify a generic value for the command.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Utility commands for October';\n\n    /**\n     * Execute the console command.\n     */\n    public function handle()\n    {\n        $command = implode(' ', (array) $this->argument('name'));\n        $method = str_replace('.', 'Point', 'util'.studly_case($command));\n        $list = $this->getAvailableCommands();\n\n        if (!$this->argument('name')) {\n            $message = 'There are no commands defined in the \"util\" namespace.';\n            if (count($list) === 1) {\n                $message .= \"\\n\\nDid you mean this?\\n    \";\n            }\n            else {\n                $message .= \"\\n\\nDid you mean one of these?\\n    \";\n            }\n\n            $message .= implode(\"\\n    \", $list);\n            throw new ApplicationException($message);\n        }\n\n        if (!method_exists($this, $method)) {\n            $this->error(sprintf('Utility command \"%s\" does not exist!', $command));\n            return;\n        }\n\n        $this->$method();\n    }\n\n    /**\n     * getAvailableCommands\n     */\n    protected function getAvailableCommands(): array\n    {\n        $methods = preg_grep('/^util/', get_class_methods(get_called_class()));\n        $list = array_map(function ($item) {\n            if (starts_with($item, 'utilPatch')) {\n                return;\n            }\n\n            return \"october:\".snake_case($item, \" \");\n        }, $methods);\n\n        return $list;\n    }\n\n    /**\n     * getDefaultConfirmCallback specifies the default confirmation callback\n     */\n    protected function getDefaultConfirmCallback()\n    {\n        return function () {\n            return true;\n        };\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberUtilCommands.php",
    "content": "<?php namespace System\\Console;\n\nuse App;\nuse Lang;\nuse File;\nuse Config;\nuse System;\nuse System\\Classes\\CombineAssets;\nuse System\\Models\\File as FileModel;\n\n/**\n * OctoberUtilCommands is a dedicated class for utility commands\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait OctoberUtilCommands\n{\n    /**\n     * utilSetBuild\n     */\n    protected function utilSetBuild()\n    {\n        // Cannot set without a database.\n        if (!System::hasDatabase()) {\n            return;\n        }\n\n        $seeder = App::make(\\System\\Database\\Seeds\\SeedSetBuildNumber::class);\n\n        $seeder->setCommand($this);\n\n        $seeder->run($this->option('value'));\n    }\n\n    /**\n     * utilCompileJs\n     */\n    protected function utilCompileJs()\n    {\n        $this->utilCompileAssets('js');\n    }\n\n    /**\n     * utilCompileLess\n     */\n    protected function utilCompileLess()\n    {\n        $this->utilCompileAssets('less');\n    }\n\n    /**\n     * utilCompileScss\n     */\n    protected function utilCompileScss()\n    {\n        $this->utilCompileAssets('scss');\n    }\n\n    /**\n     * utilCompileAssets\n     */\n    protected function utilCompileAssets($type = null)\n    {\n        $this->comment('Compiling registered asset bundles...');\n\n        Config::set('cms.enable_asset_minify', !$this->option('debug'));\n        $combiner = CombineAssets::instance();\n        $bundles = $combiner->getBundles($type);\n\n        if (!$bundles) {\n            $this->comment('Nothing to compile!');\n            return;\n        }\n\n        if ($type) {\n            $bundles = [$bundles];\n        }\n\n        foreach ($bundles as $bundleType) {\n            foreach ($bundleType as $destination => $assets) {\n                $destination = File::symbolizePath($destination);\n                $publicDest = File::localToPublic(realpath(dirname($destination))) . '/' . basename($destination);\n\n                $combiner->combineToFile($assets, $destination);\n                $shortAssets = implode(', ', array_map('basename', $assets));\n                $this->comment($shortAssets);\n                $this->comment(sprintf(' -> %s', $publicDest));\n            }\n        }\n\n        if ($type === null) {\n            $this->utilCompileLang();\n        }\n    }\n\n    /**\n     * utilCompileLang\n     */\n    protected function utilCompileLang()\n    {\n        if (!$locales = Lang::get('system::lang.locale')) {\n            return;\n        }\n\n        $this->comment('Compiling client-side language files...');\n\n        $locales = array_keys($locales);\n        $stub = base_path('modules/system/assets/js/lang/lang.stub');\n\n        $messages = [];\n\n        foreach ($locales as $locale) {\n            // Generate messages\n            foreach (System::listModules() as $module) {\n                $module = strtolower($module);\n\n                // Process code-based client translations (client.php)\n                $fallbackPath = base_path(\"modules/{$module}/lang/en/client.php\");\n                $srcPath = base_path(\"modules/{$module}/lang/{$locale}/client.php\");\n                if (file_exists($fallbackPath)) {\n                    $messages = array_replace_recursive($messages, require $fallbackPath);\n                    if (file_exists($srcPath) && $fallbackPath != $srcPath) {\n                        $messages = array_replace_recursive($messages, require $srcPath);\n                    }\n                }\n\n                // Process English-based client exports (client-export.php)\n                $exportPath = base_path(\"modules/{$module}/lang/en/client-export.php\");\n                if (file_exists($exportPath)) {\n                    $exportStrings = require $exportPath;\n                    $jsonPath = base_path(\"modules/{$module}/lang/{$locale}.json\");\n                    $jsonTranslations = [];\n                    if (file_exists($jsonPath)) {\n                        $jsonTranslations = json_decode(file_get_contents($jsonPath), true) ?: [];\n                    }\n\n                    foreach ($exportStrings as $englishString) {\n                        $messages[$englishString] = $jsonTranslations[$englishString] ?? $englishString;\n                    }\n                }\n            }\n\n            // Compile from stub and save file\n            $destPath = base_path('modules/system/assets/js/lang/lang.'.$locale.'.js');\n\n            $contents = str_replace(\n                ['{{locale}}', '{{messages}}'],\n                [$locale, json_encode($messages, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT)],\n                File::get($stub)\n            ).PHP_EOL;\n\n            // Include the moment localization data\n            $momentPath = base_path('modules/backend/assets/vendor/moment/locale/'.$locale.'.js');\n            if (file_exists($momentPath)) {\n                $contents .= PHP_EOL.File::get($momentPath).PHP_EOL;\n            }\n\n            // Include the select localization data\n            $selectPath = base_path('modules/backend/assets/vendor/select2/js/i18n/'.$locale.'.js');\n            if (file_exists($selectPath)) {\n                $contents .= PHP_EOL.File::get($selectPath).PHP_EOL;\n            }\n\n            // Include the froala localization data\n            $froalaPath = base_path('modules/backend/assets/vendor/froala/languages/'.str_replace('-', '_', strtolower($locale)).'.js');\n            if (file_exists($froalaPath)) {\n                $contents .= PHP_EOL.File::get($froalaPath).PHP_EOL;\n            }\n\n            File::put($destPath, $contents);\n\n            // Output notes\n            $publicDest = File::localToPublic(realpath(dirname($destPath))) . '/' . basename($destPath);\n\n            $this->comment($locale.'/'.basename($destPath));\n            $this->comment(sprintf(' -> %s', $publicDest));\n        }\n    }\n\n    /**\n     * utilPurgeResizer deletes all resizer files in the resources directory\n     */\n    protected function utilPurgeResizer()\n    {\n        if (!$this->confirmToProceed('This will PERMANENTLY DELETE all thumbs in the resizer directory.')) {\n            return;\n        }\n\n        $path = base_path('storage/app/resources/resize');\n\n        if (File::isDirectory($path)) {\n            File::cleanDirectory($path);\n        }\n    }\n\n    /**\n     * utilPurgeThumbs deletes all thumbnail files in the uploads directory\n     */\n    protected function utilPurgeThumbs()\n    {\n        if (!$this->confirmToProceed('This will PERMANENTLY DELETE all thumbs in the uploads directory.')) {\n            return;\n        }\n\n        $totalCount = 0;\n        $uploadsPath = Config::get('filesystems.disks.local.root', storage_path('app'));\n        $uploadsPath .= '/uploads';\n\n        /*\n         * Recursive function to scan the directory for files beginning\n         * with \"thumb_\" and repeat itself on directories.\n         */\n        $purgeFunc = function ($targetDir) use (&$purgeFunc, &$totalCount) {\n            if ($files = File::glob($targetDir.'/thumb_*')) {\n                foreach ($files as $file) {\n                    $this->info('Purged: '. basename($file));\n                    $totalCount++;\n                    @unlink($file);\n                }\n            }\n\n            if ($dirs = File::directories($targetDir)) {\n                foreach ($dirs as $dir) {\n                    $purgeFunc($dir);\n                }\n            }\n        };\n\n        $purgeFunc($uploadsPath);\n\n        if ($totalCount > 0) {\n            $this->comment(sprintf('Successfully deleted %s thumbs', $totalCount));\n        }\n        else {\n            $this->comment('No thumbs found to delete');\n        }\n    }\n\n    /**\n     * utilPurgeUploads deletes files in the uploads directory that do not exist in the \"system_files\" table\n     */\n    protected function utilPurgeUploads()\n    {\n        if (!$this->confirmToProceed('This will PERMANENTLY DELETE files in the uploads directory that do not exist in the \"system_files\" table.')) {\n            return;\n        }\n\n        $uploadsDisk = Config::get('filesystems.disks.uploads.driver', 'local');\n        if ($uploadsDisk !== 'local') {\n            $this->error('Purging uploads is only supported on the local disk');\n            return;\n        }\n\n        $purgeFunc = function($localPath) {\n            $chunks = collect(File::allFiles($localPath))->chunk(50);\n            $filesToDelete = [];\n\n            foreach ($chunks as $chunk) {\n                $filenames = [];\n                foreach ($chunk as $file) {\n                    $filenames[] = $file->getFileName();\n                }\n\n                $foundModels = FileModel::whereIn('disk_name', $filenames)->pluck('disk_name')->all();\n\n                foreach ($chunk as $file) {\n                    if (!in_array($file->getFileName(), $foundModels)) {\n                        $filesToDelete[$file->getFileName()] = $file->getPath() . DIRECTORY_SEPARATOR . $file->getFileName();\n                    }\n                }\n            }\n\n            return $filesToDelete;\n        };\n\n        // Local path on disk\n        $localPath = Config::get('filesystems.disks.uploads.root', storage_path('app/uploads'));\n\n        // Protected directory\n        $this->comment('Scanning directory: '.$localPath.'/protected');\n        $filesToDelete = $purgeFunc($localPath.'/protected');\n\n        if (count($filesToDelete)) {\n            $this->comment('Found the following files to delete');\n            $this->comment(implode(', ', array_keys($filesToDelete)));\n            if ($this->confirmToProceed('Please confirm file destruction.')) {\n                foreach ($filesToDelete as $path) {\n                    File::delete($path);\n                }\n            }\n        }\n        else {\n            $this->comment('No files found to purge.');\n        }\n\n        // Public directory\n        $this->comment('Scanning directory: '.$localPath.'/public');\n        $filesToDelete = $purgeFunc($localPath.'/public');\n\n        if (count($filesToDelete)) {\n            $this->comment('Found the following files to delete');\n            $this->comment(implode(', ', array_keys($filesToDelete)));\n            if ($this->confirmToProceed('Please confirm file destruction.')) {\n                foreach ($filesToDelete as $path) {\n                    File::delete($path);\n                }\n            }\n        }\n        else {\n            $this->comment('No files found to purge.');\n        }\n    }\n\n    /**\n     * utilPurgeOrphans deletes files in \"system_files\" that do not belong to any other model\n     */\n    protected function utilPurgeOrphans()\n    {\n        if (!$this->confirmToProceed('This will PERMANENTLY DELETE files in \"system_files\" that do not belong to any other model.')) {\n            return;\n        }\n\n        $orphanedFiles = 0;\n\n        // Locate orphans\n        $files = FileModel::whereNull('attachment_id')->get();\n\n        foreach ($files as $file) {\n            $file->delete();\n            $orphanedFiles += 1;\n        }\n\n        if ($orphanedFiles > 0) {\n            $this->comment(sprintf('Successfully deleted %d orphaned record(s).', $orphanedFiles));\n        }\n        else {\n            $this->comment('No records to purge.');\n        }\n    }\n\n    /**\n     * utilPurgeDeferred cleans up all records that have deferred bindings\n     */\n    protected function utilPurgeDeferred()\n    {\n        \\October\\Rain\\Database\\Models\\DeferredBinding::cleanUp(-1);\n\n        $this->comment('Cleared all deferred bindings.');\n    }\n\n    /**\n     * utilGitPull requires the git binary to be installed\n     */\n    protected function utilGitPull()\n    {\n        foreach (File::directories(plugins_path()) as $authorDir) {\n            foreach (File::directories($authorDir) as $pluginDir) {\n                if (!File::isDirectory($pluginDir.'/.git')) {\n                    continue;\n                }\n\n                $exec = 'cd ' . $pluginDir . ' && ';\n                $exec .= 'git pull 2>&1';\n                echo 'Updating plugin: '. basename(dirname($pluginDir)) .'.'. basename($pluginDir) . PHP_EOL;\n                echo shell_exec($exec);\n            }\n        }\n\n        foreach (File::directories(themes_path()) as $themeDir) {\n            if (!File::isDirectory($themeDir.'/.git')) {\n                continue;\n            }\n\n            $exec = 'cd ' . $themeDir . ' && ';\n            $exec .= 'git pull 2>&1';\n            echo 'Updating theme: '. basename($themeDir) . PHP_EOL;\n            echo shell_exec($exec);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberUtilPackageDocs.php",
    "content": "<?php namespace System\\Console;\n\nuse Yaml;\nuse File;\n\n/**\n * OctoberUtilPackageDocs compiles a documentation file for the October CMS website\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait OctoberUtilPackageDocs\n{\n    /**\n     * utilCompileDocs\n     */\n    protected function utilCompileDocs()\n    {\n        $input = $this->option('value');\n        if (!$input) {\n            $this->comment('Missing theme or plugin name.');\n            $input = $this->ask('Enter theme or plugin name');\n        }\n\n        if (str_contains($input, '.')) {\n            $pluginDir = strtolower(str_replace('.', '/', $input));\n            $targetPath = plugins_path(\"{$pluginDir}/docs/docs.yaml\");\n        }\n        else {\n            $themeDir = strtolower($input);\n            $targetPath = themes_path(\"{$themeDir}/docs/docs.yaml\");\n        }\n\n        if (!file_exists($targetPath)) {\n            $nicePath = File::nicePath($targetPath);\n            $this->error(\"Could not find docs file at path: {$nicePath}\");\n            return;\n        }\n\n        $lockFile = dirname($targetPath) . \"/docs-lock.json\";\n        $this->compileDocsInternal($targetPath, $lockFile);\n\n        $niceLockFile = File::nicePath($lockFile);\n\n        $this->line('');\n        $this->comment(\"*** Docs compiled: {$niceLockFile}\");\n        $this->line('');\n        $this->comment(\"Paste the contents of this file in the Documentation tab on the plugin management page.\");\n    }\n\n    /**\n     * compileDocsInternal\n     */\n    protected function compileDocsInternal($configFile, $lockFile)\n    {\n        $config = Yaml::parseFile($configFile);\n        $config['content'] = $content = [];\n\n        if (isset($config['navigation'])) {\n            $config['navigation'] = $this->compileDocsContentInternal(\n                dirname($configFile),\n                $config['navigation'],\n                $config['content']\n            );\n        }\n\n        file_put_contents($lockFile, json_encode($config, JSON_PRETTY_PRINT));\n    }\n\n    /**\n     * compileDocsContentInternal\n     */\n    protected function compileDocsContentInternal($baseDir, $navArray, &$contentArray)\n    {\n        foreach ($navArray as &$item) {\n            // Process links\n            if ($itemLink = $item['link'] ?? '') {\n                if (($contentPath = realpath($baseDir . $itemLink)) && file_exists($contentPath)) {\n                    $itemSlug = $this->compileDocsContentLink($itemLink);\n                    $item['slug'] = $itemSlug;\n                    $contentArray[$itemSlug] = file_get_contents($contentPath);\n                }\n                unset($item['link']);\n            }\n\n            // Process children\n            if (isset($item['children'])) {\n                $item['children'] = $this->compileDocsContentInternal($baseDir, $item['children'], $contentArray);\n            }\n        };\n\n        return $navArray;\n    }\n\n    /**\n     * compileDocsContentLink\n     */\n    protected function compileDocsContentLink($linkPath)\n    {\n        return trim(str_replace('.', '', File::anyname($linkPath)), '/');\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberUtilPatches.php",
    "content": "<?php namespace System\\Console;\n\nuse Db;\nuse Schema;\nuse Exception;\n\n/**\n * OctoberUtilPatches is a dedicated class for version patches\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait OctoberUtilPatches\n{\n    /**\n     * utilPatch2Point0 october:util patch2.0\n     */\n    protected function utilPatch2Point0()\n    {\n        if (!$this->confirmToProceed('This will patch your database for October CMS 2.0. Please make sure you have a backup before proceeding.')) {\n            return;\n        }\n\n        $this->line('');\n        $this->comment('*** Patching DEFERRED BINDINGS table');\n\n        if (Schema::hasColumn('deferred_bindings', 'str_slave_id')) {\n            $this->comment('Patch already applied to schema');\n        }\n        else {\n            try {\n                $this->comment('Cleaning up indexes');\n                Schema::table('deferred_bindings', function($table) {\n                    $table->dropIndex(['slave_type']);\n                });\n            }\n            catch (Exception $ex) {\n            }\n            try {\n                Schema::table('deferred_bindings', function($table) {\n                    $table->dropIndex(['slave_id']);\n                });\n            }\n            catch (Exception $ex) {\n            }\n            try {\n                Schema::table('deferred_bindings', function($table) {\n                    $table->dropIndex(['session_key']);\n                });\n            }\n            catch (Exception $ex) {\n            }\n\n            Db::transaction(function() {\n                $this->comment('Optimizing columns');\n                Schema::table('deferred_bindings', function($table) {\n                    $table->renameColumn('slave_id', 'str_slave_id');\n                });\n\n                Schema::table('deferred_bindings', function($table) {\n                    $table->string('str_slave_id')->nullable()->change();\n                });\n\n                Schema::table('deferred_bindings', function($table) {\n                    $table->integer('slave_id')->after('slave_type')->nullable();\n                });\n            });\n        }\n\n        $this->line('');\n        $this->comment('*** Transferring DEFERRED BINDINGS data');\n\n        $failedRows = [];\n        Db::table('deferred_bindings')->whereNull('slave_id')->orderBy('id')\n            ->chunkById(100, function($bindings) use (&$failedRows) {\n                foreach ($bindings as $binding) {\n                    if (is_null($binding->str_slave_id)) {\n                        // Field is already null\n                    }\n                    elseif (!is_numeric($binding->str_slave_id)) {\n                        $failedRows[] = $binding->id;\n                        $this->output->write('!', false);\n                    }\n                    else {\n                        Db::table('deferred_bindings')\n                            ->where('id', $binding->id)\n                            ->update(['slave_id' => (int) $binding->str_slave_id])\n                        ;\n                        $this->output->write('.', false);\n                    }\n                }\n            });\n\n        $this->comment('Transfer complete');\n\n        if (count($failedRows) > 0) {\n            $this->line('');\n            $this->warn('Warning! String values detected for DEFERRED BINDINGS rows:');\n            $this->warn(sprintf('[%s]', implode(' ', $failedRows)));\n            $this->warn('You must address these columns manually, they have not been transferred.');\n            $this->warn('Contact support if you require assistance. Copy these numbers down and do not lose this list.');\n            $this->line('');\n        }\n\n        $this->line('');\n        $this->comment('*** Patching SYSTEM FILES table');\n\n        if (Schema::hasColumn('system_files', 'str_attachment_id')) {\n            $this->comment('Patch already applied to schema');\n        }\n        else {\n            try {\n                $this->comment('Cleaning up indexes');\n                Schema::table('system_files', function($table) {\n                    $table->dropIndex(['attachment_id']);\n                });\n            }\n            catch (Exception $ex) {\n            }\n            try {\n                Schema::table('system_files', function($table) {\n                    $table->dropIndex(['attachment_type']);\n                });\n            }\n            catch (Exception $ex) {\n            }\n\n            Db::transaction(function() {\n                $this->comment('Optimizing columns');\n                Schema::table('system_files', function($table) {\n                    $table->renameColumn('attachment_id', 'str_attachment_id');\n                });\n\n                Schema::table('system_files', function($table) {\n                    $table->string('str_attachment_id')->nullable()->change();\n                });\n\n                Schema::table('system_files', function($table) {\n                    $table->integer('attachment_id')->after('field')->nullable();\n                });\n\n                Schema::table('system_files', function($table) {\n                    $table->index(['attachment_id', 'attachment_type'], 'system_files_master_index');\n                });\n            });\n        }\n\n        $this->line('');\n        $this->comment('*** Transferring SYSTEM FILES data');\n\n        $failedRows = [];\n        Db::table('system_files')->whereNull('attachment_id')->orderBy('id')\n            ->chunkById(100, function($files) use (&$failedRows) {\n                foreach ($files as $file) {\n                    if (is_null($file->str_attachment_id)) {\n                        // Field is already null\n                    }\n                    elseif (!is_numeric($file->str_attachment_id)) {\n                        $failedRows[] = $file->id;\n                        $this->output->write('!', false);\n                    }\n                    else {\n                        Db::table('system_files')\n                            ->where('id', $file->id)\n                            ->update(['attachment_id' => (int) $file->str_attachment_id])\n                        ;\n                        $this->output->write('.', false);\n                    }\n                }\n            });\n\n        $this->comment('Transfer complete');\n\n        if (count($failedRows) > 0) {\n            $this->line('');\n            $this->warn('Warning! String values detected for SYSTEM FILES rows:');\n            $this->warn(sprintf('[%s]', implode(' ', $failedRows)));\n            $this->warn('You must address these columns manually, they have not been transferred.');\n            $this->warn('Contact support if you require assistance. Copy these numbers down and do not lose this list.');\n            $this->line('');\n        }\n\n        $this->output->success('October CMS Version 2.0 applied!');\n    }\n}\n"
  },
  {
    "path": "modules/system/console/OctoberUtilRefitLang.php",
    "content": "<?php namespace System\\Console;\n\nuse File;\nuse System;\nuse Exception;\nuse System\\Models\\PluginVersion;\n\n/**\n * OctoberUtilRefitLang is a dedicated class for the refit lang util command\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait OctoberUtilRefitLang\n{\n    /**\n     * @var string refitFinalMessage\n     */\n    protected $refitFinalMessage;\n\n    /**\n     * utilImportCrowdin excepts a directory above the root\n     * called \"crowdin\" with the export data\n     */\n    protected function utilImportCrowdin()\n    {\n        $this->comment('Importing crowdin translations.');\n\n        $supplements = [\n            'es-es' => 'es'\n        ];\n\n        $path = realpath(base_path('../crowdin'));\n\n        foreach (File::directories($path) as $dir) {\n            $lang = strtolower(basename($dir));\n            if (isset($supplements[$lang])) {\n                $lang = $supplements[$lang];\n            }\n\n            $modules = '';\n            foreach (File::files($dir) as $source) {\n                $module = File::anyname(basename($source));\n                $destination = base_path(\"modules/{$module}/lang/{$lang}.json\");\n                if (file_exists($destination)) {\n                    $modules .= $module.' ';\n                    $existingArr = json_decode(File::get($destination), true) ?: [];\n                    $crowdinArr = json_decode(File::get($source), true) ?: [];\n                    $mergedArr = array_merge($existingArr, $crowdinArr);\n                    File::put($destination, $this->refitLangJsonEncode($mergedArr));\n                }\n            }\n\n            $this->comment(\"{$modules}→ [{$lang}]\");\n        }\n    }\n\n    /**\n     * utilLangWipeJson\n     */\n    protected function utilWipeLangJson()\n    {\n        $input = $this->option('value');\n        if (!$input) {\n            $this->comment('Missing language key.');\n            $input = $this->ask('Enter JSON language key');\n        }\n\n        $modules = System::listModules();\n        $locales = $this->refitLangFindLocales();\n\n        foreach ($modules as $module) {\n            $fileDir = base_path('modules/'.strtolower($module));\n            foreach ($locales as $locale) {\n                $this->refitLangJsonDelete($fileDir, $locale, $input);\n            }\n        }\n\n        foreach (PluginVersion::all() as $plugin) {\n            $fileDir = plugins_path(str_replace('.', '/', $plugin->code));\n            foreach ($locales as $locale) {\n                $this->refitLangJsonDelete($fileDir, $locale, $input);\n            }\n        }\n    }\n\n    /**\n     * utilLangWipe\n     */\n    protected function utilWipeLang()\n    {\n        $input = $this->option('value');\n        if (!$input) {\n            $this->comment('Missing language key.');\n            $input = $this->ask('Enter PHP language key');\n        }\n\n        $this->refitLangInternal($input, false);\n    }\n\n    /**\n     * utilRefitLang\n     */\n    protected function utilRefitLang()\n    {\n        $input = $this->option('value');\n        if (!$input) {\n            $this->comment('Missing language key.');\n            $input = $this->ask('Enter PHP language key');\n        }\n\n        $this->refitLangInternal($input);\n    }\n\n    /**\n     * refitLangInternal\n     */\n    protected function refitLangInternal($input, $rewrite = true)\n    {\n        // Ex[author.plugin::lang.some.key]\n        $parts = explode('::', $input);\n\n        // Ex[author.plugin]\n        $namespace = $parts[0];\n\n        // Ex[lang.some.key]\n        $langKey = $parts[1];\n        $langParts = explode('.', $langKey);\n\n        // Ex[lang.php]\n        $fileName = array_shift($langParts) . '.php';\n\n        // Ex[some.key]\n        $arrPath = implode('.', $langParts);\n\n        // Ex[/path/to/plugins/author/plugin]\n        if (strpos($namespace, '.') !== false) {\n            $fileDir = plugins_path(str_replace('.', '/', $namespace));\n        }\n        else {\n            $fileDir = base_path('modules/'.$namespace);\n        }\n\n        // Ex[cs,de,en]\n        $dirs = array_map(function($path) {\n            return basename($path);\n        }, File::directories($fileDir . '/lang'));\n\n        // Rewrite the language key for each lang\n        if ($rewrite) {\n            foreach ($dirs as $lang) {\n                $this->refitLangKeyRewrite($fileDir, $lang, $arrPath);\n            }\n        }\n\n        // Delete the language key for each lang\n        foreach ($dirs as $lang) {\n            $this->refitLangPhpDelete($fileDir, $lang, $arrPath);\n        }\n\n        $this->comment($this->refitFinalMessage);\n    }\n\n    /**\n     * refitLangKeyRewrite will add the php lang to the json lang\n     */\n    protected function refitLangKeyRewrite(string $basePath, string $lang, string $key, ?string $fileName = null)\n    {\n        if (!$fileName) {\n            $fileName = 'lang.php';\n        }\n\n        $englishPath = \"{$basePath}/lang/en/{$fileName}\";\n        $englishArr = include($englishPath);\n\n        $legacyPath = \"{$basePath}/lang/{$lang}/{$fileName}\";\n        $legacyArr = include($legacyPath);\n\n        $newPath = \"{$basePath}/lang/{$lang}.json\";\n        $newArr = [];\n\n        if (file_exists($newPath)) {\n            $newArr = json_decode(file_get_contents($newPath), true);\n        }\n\n        $english = array_get($englishArr, $key);\n        if (!$english) {\n            throw new Exception(\"[!!] Missing key for english [{$key}] in [{$englishPath}]\");\n        }\n\n        $translated = array_get($legacyArr, $key);\n        if (!$translated) {\n            $this->comment(\"[{$lang}] Missing key [{$key}] in [{$legacyPath}]\");\n            return;\n        }\n\n        $newArr[$english] = $translated;\n\n        File::put($newPath, $this->refitLangJsonEncode($newArr));\n\n        $this->comment(\"[{$lang}] → {$english}:{$translated}\");\n\n        if ($lang === 'en') {\n            $this->comment(PHP_EOL);\n            $this->refitFinalMessage = \"<?= __(\\\"{$english}\\\") ?>\";\n        }\n    }\n\n    /**\n     * refitLangJsonDelete will delete the JSON lang key and rewrite the file\n     */\n    protected function refitLangJsonDelete(string $basePath, string $lang, string $key)\n    {\n        $jsonPath = \"{$basePath}/lang/{$lang}.json\";\n\n        if (file_exists($jsonPath)) {\n            $newArr = json_decode(file_get_contents($jsonPath), true);\n            if (isset($newArr[$key])) {\n                unset($newArr[$key]);\n                File::put($jsonPath, $this->refitLangJsonEncode($newArr));\n                $this->comment(\"[{$lang}] → {$key} (deleted)\");\n            }\n        }\n    }\n\n    /**\n     * refitLangPhpDelete will delete the php lang key and rewrite the file\n     */\n    protected function refitLangPhpDelete(string $basePath, string $lang, string $key, ?string $fileName = null)\n    {\n        if (!$fileName) {\n            $fileName = 'lang.php';\n        }\n\n        $legacyPath = \"{$basePath}/lang/{$lang}/{$fileName}\";\n\n        if (file_exists($legacyPath)) {\n            $legacyArr = include($legacyPath);\n            if (array_get($legacyArr, $key)) {\n                array_forget($legacyArr, $key);\n                File::put($legacyPath, '<?php return '.$this->refitVarExportShort($legacyArr, true).';'.PHP_EOL);\n                $this->comment(\"[{$lang}] → {$key} (deleted)\");\n            }\n        }\n    }\n\n    /**\n     * refitVarExportShort\n     */\n    protected function refitVarExportShort($data, $return = true)\n    {\n        $dump = var_export($data, true);\n\n        // Array starts\n        $dump = preg_replace('#(?:\\A|\\n)([ ]*)array \\(#i', '[', $dump);\n\n        // Array ends\n        $dump = preg_replace('#\\n([ ]*)\\),#', \"\\n$1],\", $dump);\n\n        // Array empties\n        $dump = preg_replace('#=> \\[\\n\\s+\\],\\n#', \"=> [],\\n\", $dump);\n\n        // Object states\n        if (gettype($data) == 'object') {\n            $dump = str_replace('__set_state(array(', '__set_state([', $dump);\n            $dump = preg_replace('#\\)\\)$#', \"])\", $dump);\n        }\n        else {\n            $dump = preg_replace('#\\)$#', \"]\", $dump);\n        }\n\n        // 2 char to 4 char indent\n        // $dump = str_replace('  ', '    ', $dump);\n\n        if ($return === true) {\n            return $dump;\n        }\n        else {\n            echo $dump;\n        }\n    }\n\n    /**\n     * refitLangJsonEncode\n     */\n    protected function refitLangJsonEncode($newArr)\n    {\n        $indentFour = json_encode($newArr, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);\n        $indentTwo = preg_replace('/^(  +?)\\\\1(?=[^ ])/m', '$1', $indentFour);\n        return $indentTwo;\n    }\n\n    /**\n     * refitLangFindLocales\n     */\n    protected function refitLangFindLocales()\n    {\n        return [\n            'ar',\n            'be',\n            'bg',\n            'ca',\n            'cs',\n            'da',\n            'de',\n            'el',\n            'en',\n            'en-au',\n            'en-ca',\n            'en-gb',\n            'es',\n            'es-ar',\n            'et',\n            'fa',\n            'fi',\n            'fr',\n            'fr-ca',\n            'hu',\n            'id',\n            'it',\n            'ja',\n            'ko',\n            'lt',\n            'lv',\n            'nb-no',\n            'nn-no',\n            'nl',\n            'pl',\n            'pt-br',\n            'pt-pt',\n            'ro',\n            'ru',\n            'sk',\n            'sl',\n            'sv',\n            'th',\n            'tr',\n            'uk',\n            'vn',\n            'zh-cn',\n            'zh-tw',\n\n            // Alternatives\n            'zh-CN',\n            'zh-TW',\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/console/PluginCheck.php",
    "content": "<?php namespace System\\Console;\n\nuse System as SystemHelper;\nuse System\\Helpers\\Cache as CacheHelper;\nuse October\\Rain\\Composer\\ComposerManager;\nuse Illuminate\\Console\\Command;\n\n/**\n * PluginCheck checks for missing plugin dependencies and installs them\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginCheck extends Command\n{\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'plugin:check\n        {--no-migrate : Do not run migration after install.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Checks for missing plugin dependencies and installs them.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->line('Checking Dependencies...');\n\n        $this->installRequiredPlugins();\n    }\n\n    /**\n     * installRequiredPlugins\n     */\n    protected function installRequiredPlugins()\n    {\n        $pluginRequire = \\System\\Classes\\PluginManager::instance()->findMissingDependencies();\n        $themeRequire = SystemHelper::hasModule('Cms') ? \\Cms\\Classes\\ThemeManager::instance()->findMissingDependencies() : [];\n\n        $deps = array_unique(array_merge($pluginRequire, $themeRequire));\n\n        // Prompt?\n        // foreach ($deps as $dep) {\n        //     $this->info('[ ] '.$dep);\n        // }\n\n        foreach ($deps as $dep) {\n            $this->call('plugin:install', ['name' => $dep, '--no-migrate' => true, '--no-update' => true]);\n        }\n\n        if (count($deps)) {\n            // Composer update\n            $this->comment(\"Executing: composer update\");\n\n            $composer = ComposerManager::instance();\n            $composer->setOutputCommand($this, $this->input);\n            $composer->update();\n\n            // Migrate database\n            if (!$this->option('no-migrate')) {\n                $this->comment(\"Executing: php artisan october:migrate\");\n                $this->line('');\n\n                $errCode = null;\n                static::passthruArtisan('october:migrate', $errCode);\n                $this->line('');\n\n                if ($errCode !== 0) {\n                    $this->output->error('Migration failed. Check output above');\n                    exit(1);\n                }\n            }\n        }\n\n        // Clear meta cache\n        CacheHelper::instance()->clearMeta();\n\n        // Success\n        $this->info('All dependencies installed');\n    }\n\n    /**\n     * passthruArtisan\n     */\n    protected static function passthruArtisan($command, &$errCode = null)\n    {\n        passthru('\"'.PHP_BINARY.'\" artisan ' .$command, $errCode);\n    }\n}\n"
  },
  {
    "path": "modules/system/console/PluginDisable.php",
    "content": "<?php namespace System\\Console;\n\nuse System\\Models\\PluginVersion;\nuse System\\Classes\\PluginManager;\nuse Illuminate\\Console\\Command;\n\n/**\n * PluginDisable disables a plugin in file system and user preferences\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginDisable extends Command\n{\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'plugin:disable\n        {name : Name of the plugin, eg: Author.Plugin}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Disable an existing plugin.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $manager = PluginManager::instance();\n        $name = $manager->normalizeIdentifier($this->argument('name'));\n\n        // Lookup\n        if (!$manager->hasPlugin($name)) {\n            return $this->output->error(\"Unable to find plugin '{$name}'\");\n        }\n\n        // Disable in filesystem\n        $manager->disablePlugin($name);\n\n        // Disable user preference\n        if ($plugin = PluginVersion::where('code', $name)->first()) {\n            $plugin->is_disabled = true;\n            $plugin->save();\n        }\n\n        $this->output->success(\"Plugin '{$name}' disabled\");\n    }\n}\n"
  },
  {
    "path": "modules/system/console/PluginEnable.php",
    "content": "<?php namespace System\\Console;\n\nuse System\\Models\\PluginVersion;\nuse System\\Classes\\PluginManager;\nuse Illuminate\\Console\\Command;\n\n/**\n * PluginDisable enables a plugin in the file system and user preferences\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginEnable extends Command\n{\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'plugin:enable\n        {name : Name of the plugin, eg: Author.Plugin}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Enable an existing plugin.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $manager = PluginManager::instance();\n        $name = $manager->normalizeIdentifier($this->argument('name'));\n\n        // Lookup\n        if (!$manager->hasPlugin($name)) {\n            return $this->output->error(\"Unable to find plugin '{$name}'\");\n        }\n\n        // Enable in filesystem\n        $manager->enablePlugin($name);\n\n       // Enable user preference\n        if ($plugin = PluginVersion::where('code', $name)->first()) {\n            $plugin->is_disabled = false;\n            $plugin->save();\n        }\n\n        $this->output->success(\"Plugin '{$name}' enabled\");\n    }\n}\n"
  },
  {
    "path": "modules/system/console/PluginInstall.php",
    "content": "<?php namespace System\\Console;\n\nuse System;\nuse Illuminate\\Console\\Command;\nuse System\\Classes\\UpdateManager;\nuse System\\Helpers\\Cache as CacheHelper;\nuse October\\Rain\\Composer\\ComposerManager;\nuse Exception;\n\n/**\n * PluginInstall installs a new plugin.\n *\n * This adds a new plugin by requesting it from the October marketplace.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginInstall extends Command\n{\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'plugin:install\n        {name : The name of the plugin. Eg: AuthorName.PluginName}\n        {--oc : Package uses the oc- prefix.}\n        {--f|from= : Provide a custom source.}\n        {--w|want= : Provide a custom version.}\n        {--no-migrate : Do not run migration after install.}\n        {--no-update : Do not run composer update after install.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Install a plugin from the October marketplace or custom source.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $name = $this->argument('name');\n\n        $this->line(\"Installing Plugin: {$name}\");\n\n        if ($src = $this->option('from')) {\n            $this->info(\"Added Repo: {$src}\");\n            $composerCode = System::octoberToComposerCode(\n                $name,\n                'plugin',\n                (bool) $this->option('oc')\n            );\n            $composerVersion = '*';\n\n            $this->addRepoFromSource($composerCode, $src);\n        }\n        else {\n            $info = UpdateManager::instance()->requestPluginDetails($name);\n            $composerCode = array_get($info, 'composer_code');\n            $composerVersion = '^'.array_get($info, 'composer_version');\n        }\n\n        // Splice in version\n        if ($requireVersion = $this->getWantOption()) {\n            $composerVersion = $requireVersion;\n        }\n\n        // Composer require\n        $this->comment(\"Executing: composer require {$composerCode} {$composerVersion}\");\n        $this->line('');\n\n        $composer = ComposerManager::instance();\n        $composer->setOutputCommand($this, $this->input);\n\n        try {\n            if ($this->option('no-update')) {\n                $composer->addPackages([$composerCode => $composerVersion]);\n            }\n            else {\n                $composer->require([$composerCode => $composerVersion]);\n            }\n        }\n        catch (Exception $ex) {\n            if ($src = $this->option('from')) {\n                $this->info(\"Reverted repo change\");\n                $this->removeRepoFromSource($composerCode);\n            }\n            throw $ex;\n        }\n\n        // Clear meta cache\n        CacheHelper::instance()->clearMeta();\n\n        // Run migrations\n        if (!$this->option('no-migrate')) {\n            $this->comment(\"Executing: php artisan october:migrate\");\n            $this->line('');\n\n            // Migrate database\n            $errCode = null;\n            static::passthruArtisan('october:migrate', $errCode);\n            $this->line('');\n\n            if ($errCode !== 0) {\n                $this->output->error('Migration failed. Check output above');\n                exit(1);\n            }\n        }\n\n        $this->output->success(\"Plugin '{$name}' installed\");\n    }\n\n    /**\n     * addRepoFromSource adds a plugin to composer's repositories\n     */\n    protected function addRepoFromSource($composerCode, $src)\n    {\n        if (file_exists(base_path($src))) {\n            if (file_exists(base_path($src . '/.git'))) {\n                $srcType = 'git';\n            }\n            else {\n                $srcType = 'path';\n            }\n        }\n        else {\n            $srcType = 'git';\n        }\n\n        ComposerManager::instance()->addRepository($composerCode, $srcType, $src);\n    }\n\n    /**\n     * removeRepoFromSource removes a plugin from composer's repo\n     */\n    protected function removeRepoFromSource($composerCode)\n    {\n        ComposerManager::instance()->removeRepository($composerCode);\n    }\n\n    /**\n     * passthruArtisan\n     */\n    protected static function passthruArtisan($command, &$errCode = null)\n    {\n        passthru('\"'.PHP_BINARY.'\" artisan ' .$command, $errCode);\n    }\n\n    /**\n     * getWantOption adds the ^ character to a standard version number (1.0)\n     */\n    protected function getWantOption()\n    {\n        $want = $this->option('want');\n\n        $parts = explode('.', $want);\n        if (count($parts) === 2 && is_numeric($parts[0]) && is_numeric($parts[1])) {\n            $want = '^'.$want;\n        }\n\n        return $want;\n    }\n}\n"
  },
  {
    "path": "modules/system/console/PluginList.php",
    "content": "<?php namespace System\\Console;\n\nuse Illuminate\\Console\\Command;\nuse System\\Models\\PluginVersion;\n\n/**\n * PluginList lists existing plugins\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginList extends Command\n{\n    /**\n     * @var string name of console command\n     */\n    protected $name = 'plugin:list';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'List plugins available in the system';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $tableRows = [];\n\n        foreach (PluginVersion::all() as $plugin) {\n            $tableRows[] = [\n                $plugin->code,\n                $plugin->version,\n                (!$plugin->is_disabled) ? 'Yes': 'No'\n            ];\n        }\n\n        $this->output->table(['Plugin', 'Version', 'Enabled'], $tableRows);\n    }\n}\n"
  },
  {
    "path": "modules/system/console/PluginRefresh.php",
    "content": "<?php namespace System\\Console;\n\nuse App;\nuse Illuminate\\Console\\Command;\nuse System\\Classes\\UpdateManager;\nuse System\\Classes\\PluginManager;\nuse October\\Rain\\Database\\Updater;\n\n/**\n * PluginRefresh refreshes a plugin or the app directory.\n *\n * This destroys all database tables for a specific plugin, then builds them up again.\n * It is a great way for developers to debug and develop new plugins.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginRefresh extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature for the command\n     */\n    protected $signature = 'plugin:refresh\n        {namespace : App or Plugin Namespace. <info>(eg: Acme.Blog)</info>}\n        {--f|force : Force the operation to run.}\n        {--rollback=false : Specify a version to rollback to, otherwise rollback to the beginning.}\n        {--skip-errors : Continue with migration through exceptions.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Rollback and migrate database tables for a plugin.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $skipErrors = $this->option('skip-errors');\n        if ($skipErrors) {\n            Updater::skipErrors();\n        }\n\n        if ($this->isAppNamespace()) {\n            $this->handleApp();\n        }\n        else {\n            $this->handlePlugin();\n        }\n\n        if ($skipErrors) {\n            Updater::skipErrors(false);\n        }\n    }\n\n    /**\n     * handleApp refreshes the app namespace\n     *\n     * @todo this method should be properly isolated to the \"App\" namespace, it currently\n     * relies on a file not being found to protect tables and if the internals are ever\n     * made smarter to locate missing migration files, it could be seriously problematic.\n     */\n    public function handleApp()\n    {\n        $message = \"This will DESTROY database tables for the app directory.\";\n        if (!$this->confirmToProceed($message)) {\n            return;\n        }\n\n        // This rollback depends on vendor logic, which may be unsafe (see below)\n        $message = \"Do not run this command without a backup of the database.\";\n        if (!$this->confirmToProceed($message)) {\n            return;\n        }\n\n        $this->components->info('Rolling back app migrations.');\n\n        $manager = UpdateManager::instance()->setNotesCommand($this);\n        $manager->rollbackApp();\n\n        if (!$this->isRollback()) {\n            $manager->migrateApp();\n            $manager->seedApp();\n        }\n    }\n\n    /**\n     * handlePlugin refreshes a plugin\n     */\n    public function handlePlugin()\n    {\n        $manager = PluginManager::instance();\n        $name = $manager->normalizeIdentifier($this->argument('namespace'));\n\n        if (!$manager->hasPlugin($name)) {\n            return $this->output->error(\"Unable to find plugin [{$name}]\");\n        }\n\n        $message = \"This will DESTROY database tables for plugin [{$name}].\";\n        if ($this->isRollback()) {\n            $toVersion = $this->option('rollback');\n            $message = \"This will DESTROY database tables for plugin [{$name}] up to version [{$toVersion}].\";\n        }\n\n        if (!$this->confirmToProceed($message)) {\n            return;\n        }\n\n        if ($this->isRollback()) {\n            return $this->handleRollback($name);\n        }\n        else {\n            return $this->handleRefresh($name);\n        }\n    }\n\n    /**\n     * handleRefresh performs a database rollback\n     */\n    protected function handleRefresh($name)\n    {\n        // Rollback plugin migration\n        $manager = UpdateManager::instance()->setNotesCommand($this);\n        $manager->rollbackPlugin($name);\n\n        // Rerun migration\n        $this->line('Reinstalling plugin...');\n        $manager->migratePlugin($name);\n    }\n\n    /**\n     * handleRollback performs a database rollback\n     */\n    protected function handleRollback($name)\n    {\n        // Rollback plugin migration\n        $manager = UpdateManager::instance()->setNotesCommand($this);\n\n        if ($toVersion = $this->option('rollback')) {\n            $manager->rollbackPluginToVersion($name, $toVersion);\n        }\n        else {\n            $manager->rollbackPlugin($name);\n        }\n    }\n\n    /**\n     * getDefaultConfirmCallback specifies the default confirmation callback\n     */\n    protected function getDefaultConfirmCallback()\n    {\n        return function() {\n            return true;\n        };\n    }\n\n    /**\n     * isRollback overcomes an issue where Laravel no longer provides an optional option\n     */\n    protected function isRollback(): bool\n    {\n        return $this->option('rollback') !== 'false';\n    }\n\n    /**\n     * isAppNamespace\n     */\n    protected function isAppNamespace(): bool\n    {\n        return mb_strtolower(trim($this->argument('namespace'))) === 'app';\n    }\n}\n"
  },
  {
    "path": "modules/system/console/PluginRemove.php",
    "content": "<?php namespace System\\Console;\n\nuse Config;\nuse System;\nuse Illuminate\\Console\\Command;\nuse System\\Classes\\UpdateManager;\nuse System\\Classes\\PluginManager;\nuse System\\Helpers\\Cache as CacheHelper;\n\n/**\n * PluginRemove removes a plugin.\n *\n * This completely deletes an existing plugin, including database tables, files\n * and directories.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginRemove extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature for the console command\n     */\n    protected $signature = 'plugin:remove\n        {name : The name of the plugin. Eg: AuthorName.PluginName}\n        {--composer : Command triggered from composer.}\n        {--f|force : Force the operation to run.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Removes an existing plugin.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->line('Removing Plugin...');\n\n        if ($this->handleComposer() === true) {\n            return;\n        }\n\n        $manager = PluginManager::instance();\n        $name = $manager->normalizeIdentifier($this->argument('name'));\n\n        // Lookup\n        if (!$manager->hasPlugin($name)) {\n            return $this->output->error(\"Unable to find plugin '{$name}'\");\n        }\n\n        if (!$this->confirmToProceed(sprintf('This will DELETE plugin \"%s\" from the filesystem and database.', $name))) {\n            return;\n        }\n\n        // Remove via composer\n        if ($composerCode = $manager->getComposerCode($name)) {\n            $this->comment(\"Executing: composer remove {$composerCode}\");\n            $this->newLine();\n            UpdateManager::instance()->uninstallPlugin($name);\n        }\n        // Remove via filesystem\n        else {\n            $manager->deletePlugin($name);\n        }\n\n        // Clear meta cache\n        CacheHelper::instance()->clearMeta();\n\n        $this->output->success(\"Plugin '{$name}' removed\");\n    }\n\n    /**\n     * handleComposer is internally used by composer\n     */\n    protected function handleComposer(): bool\n    {\n        // Called internally via composer\n        if (!$this->option('composer')) {\n            return false;\n        }\n\n        // Clear meta cache\n        CacheHelper::instance()->clearMeta();\n\n        // Disabled by config\n        if (Config::get('system.auto_rollback_plugins') !== true) {\n            return true;\n        }\n\n        $manager = PluginManager::instance();\n        $name = $manager->normalizeIdentifier($this->argument('name'));\n        $name = System::composerToOctoberCode($name);\n\n        // Lookup\n        if (!$manager->hasPlugin($name)) {\n            return true;\n        }\n\n        // Rollback plugin\n        UpdateManager::instance()->setNotesCommand($this)->rollbackPlugin($name);\n\n        return true;\n    }\n\n    /**\n     * getDefaultConfirmCallback specifies the default confirmation callback\n     */\n    protected function getDefaultConfirmCallback()\n    {\n        return function () {\n            return true;\n        };\n    }\n}\n"
  },
  {
    "path": "modules/system/console/PluginSeed.php",
    "content": "<?php namespace System\\Console;\n\nuse Str;\nuse File;\nuse System\\Classes\\PluginManager;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * PluginSeed\n */\nclass PluginSeed extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature for the command\n     */\n    protected $signature = 'plugin:seed\n        {namespace : Plugin Namespace. <info>(eg: Acme.Blog)</info>}\n        {class : Class name of the root seeder. <info>(default: Acme\\Blog\\Updates\\Seeders\\DatabaseSeeder)</info>}\n        {--f|force : Force the operation to run.}\n        {--c|class : Class name of the root seeder. <info>(default: Acme\\Blog\\Updates\\Seeders\\DatabaseSeeder)</info>}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Seed the database with records for a plugin.';\n\n    /**\n     * handle the console command.\n     * @return int\n     */\n    public function handle()\n    {\n        if (!$this->confirmToProceed()) {\n            return 1;\n        }\n\n        $this->components->info('Seeding database.');\n\n        Model::unguarded(function () {\n            if ($this->isAppNamespace()) {\n                $this->getAppSeeder()->__invoke();\n            }\n            else {\n                $this->getSeeder()->__invoke();\n            }\n        });\n\n        return 0;\n    }\n\n    /**\n     * getSeeder instance from the container.\n     * @return \\Illuminate\\Database\\Seeder\n     */\n    protected function getSeeder()\n    {\n        $class = $this->input->getArgument('class') ?? $this->input->getOption('class');\n\n        if (!$class) {\n            $class = 'DatabaseSeeder';\n        }\n\n        $manager = PluginManager::instance();\n        $name = $manager->normalizeIdentifier($this->argument('namespace'));\n\n        $file = str_replace('\\\\_', '/', $class) . '.php';\n        $path = $manager->getPluginPath($name) . '/updates/seeders/' . $file;\n\n        if (is_file($path)) {\n            require_once $path;\n            $namespace = $manager->getPluginNamespace($name);\n            $class = \"{$namespace}\\\\Updates\\\\Seeders\\\\{$class}\";\n        }\n\n        if (!class_exists($class) && !is_file($path)) {\n            $nicePath = File::nicePath($path);\n            $this->output->error(\"Seed file at [{$nicePath}] not found.\");\n            exit(1);\n        }\n\n        return $this->laravel->make($class)\n            ->setContainer($this->laravel)\n            ->setCommand($this);\n    }\n\n    /**\n     * getAppSeeder instance directed at the app context.\n     * @return \\Illuminate\\Database\\Seeder\n     */\n    protected function getAppSeeder()\n    {\n        $class = $this->input->getArgument('class') ?? $this->input->getOption('class');\n\n        if (!$class) {\n            $class = 'DatabaseSeeder';\n        }\n\n        if (!str_contains($class, '\\\\')) {\n            $class = 'App\\\\Database\\\\Seeders\\\\'.$class;\n        }\n\n        if ($class === 'App\\\\Database\\\\Seeders\\\\DatabaseSeeder' && !class_exists($class)) {\n            $class = 'DatabaseSeeder';\n        }\n\n        return $this->laravel->make($class)\n            ->setContainer($this->laravel)\n            ->setCommand($this);\n    }\n\n    /**\n     * isAppNamespace\n     */\n    protected function isAppNamespace(): bool\n    {\n        return mb_strtolower(trim($this->argument('namespace'))) === 'app';\n    }\n}\n"
  },
  {
    "path": "modules/system/console/PluginTest.php",
    "content": "<?php namespace System\\Console;\n\nuse DOMDocument;\nuse DOMXPath;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Str;\nuse SebastianBergmann\\Environment\\Console;\nuse Symfony\\Component\\Process\\Exception\\ProcessSignaledException;\nuse Symfony\\Component\\Process\\Exception\\RuntimeException;\nuse Symfony\\Component\\Process\\Process;\nuse System\\Classes\\PluginManager;\n\n/**\n * PluginTest command\n */\nclass PluginTest extends Command\n{\n    /**\n     * @var string signature for the console command.\n     */\n    protected $signature = 'plugin:test\n        {namespace : App or Plugin Namespace. <info>(eg: Acme.Blog)</info>}\n        {--without-tty : Disable output to TTY}\n        {--p|parallel : Run the tests in parallel}';\n\n    /**\n     * @var string description for the console command.\n     */\n    protected $description = 'Run unit tests for an October CMS plugin';\n\n    /**\n     * configure command to ignore unknown options (allows passing PHPUnit/Pest options directly)\n     */\n    protected function configure(): void\n    {\n        parent::configure();\n\n        $this->ignoreValidationErrors();\n    }\n\n    /**\n     * handle executes the console command.\n     *\n     * @return mixed\n     */\n    public function handle()\n    {\n        if (!$this->isValidNamespace()) {\n            $name = $this->pluginCode();\n            return $this->output->error(\"Unable to find plugin [{$name}]\");\n        }\n\n        $options = array_slice($_SERVER['argv'], $this->option('without-tty') ? 4 : 3);\n\n        $command = array_merge(\n            $this->binary(),\n            $this->option('parallel') ? $this->paratestArguments($options) : $this->phpunitArguments($options)\n        );\n\n        $process = (new Process($command, null, $this->env()))->setTimeout(null);\n\n        try {\n            if (!$this->option('without-tty')) {\n                $process->setTty(true);\n            }\n        }\n        catch (RuntimeException $e) {\n            // TTY not supported on Windows, colors handled via --colors flag\n        }\n\n        try {\n            return $process->run(function ($type, $line) {\n                $this->output->write($line);\n            });\n        }\n        catch (ProcessSignaledException $e) {\n            if (extension_loaded('pcntl') && $e->getSignal() !== SIGINT) {\n                throw $e;\n            }\n        }\n    }\n\n    /**\n     * binary of PHP to execute.\n     */\n    protected function binary(): array\n    {\n        $pestPath = base_path('vendor/pestphp/pest/bin/pest');\n        $paratestPath = base_path('vendor/brianium/paratest/bin/paratest');\n        $phpunitPath = 'vendor/phpunit/phpunit/phpunit';\n\n        if ($this->usingPest()) {\n            $binary = $this->option('parallel')\n                ? [$pestPath, '--parallel']\n                : [$pestPath];\n        } else {\n            $binary = $this->option('parallel')\n                ? [$paratestPath]\n                : [$phpunitPath];\n        }\n\n        if (PHP_SAPI === 'phpdbg') {\n            return array_merge([PHP_BINARY, '-qrr'], $binary);\n        }\n\n        return array_merge([PHP_BINARY], $binary);\n    }\n\n    /**\n     * usingPest determines if Pest is being used.\n     */\n    protected function usingPest(): bool\n    {\n        return function_exists('\\Pest\\version');\n    }\n\n    /**\n     * phpunitArguments gets the array of arguments for running PHPUnit.\n     */\n    protected function phpunitArguments(array $options): array\n    {\n        $options = array_values(array_filter($options, function ($option) {\n            return !Str::startsWith($option, '--env=')\n                && $option !== '--without-tty'\n                && $option !== '--ansi'\n                && $option !== '--no-ansi'\n                && $option !== '-q'\n                && $option !== '--quiet'\n                && $option !== '-p'\n                && $option !== '--parallel';\n        }));\n\n        return array_merge($this->commonArguments(), ['--configuration='.$this->getTestConfigurationFile()], $options);\n    }\n\n    /**\n     * paratestArguments gets the array of arguments for running ParaTest.\n     */\n    protected function paratestArguments(array $options): array\n    {\n        $options = array_values(array_filter($options, function ($option) {\n            return !Str::startsWith($option, '--env=')\n                && $option !== '--without-tty'\n                && $option !== '--ansi'\n                && $option !== '--no-ansi'\n                && $option !== '-q'\n                && $option !== '--quiet'\n                && $option !== '-p'\n                && $option !== '--parallel';\n        }));\n\n        return array_merge($this->commonArguments(), ['--configuration='.$this->getTestConfigurationFile()], $options);\n    }\n\n    /**\n     * commonArguments gets common arguments for PHPUnit/Pest.\n     */\n    protected function commonArguments(): array\n    {\n        $args = [];\n\n        if ($this->option('ansi')) {\n            $args[] = '--colors=always';\n        } elseif ($this->option('no-ansi')) {\n            $args[] = '--colors=never';\n        } elseif ((new Console)->hasColorSupport()) {\n            $args[] = '--colors=always';\n        }\n\n        return $args;\n    }\n\n    /**\n     * getTestConfigurationFile\n     */\n    protected function getTestConfigurationFile()\n    {\n        $lookupMethod = $this->isAppNamespace() ? 'app_path' : [$this, 'pluginPath'];\n\n        $file = $lookupMethod('phpunit.xml');\n        if (!file_exists($file)) {\n            $file = $lookupMethod('phpunit.xml.dist');\n        }\n\n        return $file;\n    }\n\n    /**\n     * env gets the PHP binary environment variables.\n     */\n    protected function env(): array|null\n    {\n        $document = new DomDocument;\n        $document->loadXML(file_get_contents($this->getTestConfigurationFile()));\n        $vars = (new DOMXPath($document))->query('php/env');\n\n        $env = [];\n        foreach ($vars as $var) {\n            $env[$var->getAttribute('name')] = $var->getAttribute('value');\n        }\n        return $env;\n    }\n\n    protected function isAppNamespace(): bool\n    {\n        return mb_strtolower(trim($this->argument('namespace'))) === 'app';\n    }\n\n    protected function isValidNamespace(): bool\n    {\n        if ($this->isAppNamespace()) {\n            return true;\n        }\n\n        return PluginManager::instance()->hasPlugin($this->pluginCode());\n    }\n\n    protected function pluginPath($path = ''): string\n    {\n        return PluginManager::instance()->getPluginPath($this->pluginCode()) . '/' . $path;\n    }\n\n    protected function pluginCode(): string\n    {\n        return PluginManager::instance()->normalizeIdentifier($this->argument('namespace'));\n    }\n}\n"
  },
  {
    "path": "modules/system/console/ProjectSync.php",
    "content": "<?php namespace System\\Console;\n\nuse System;\nuse System\\Classes\\UpdateManager;\nuse October\\Rain\\Composer\\ComposerManager;\nuse Illuminate\\Console\\Command;\nuse Exception;\n\n/**\n * ProjectSync installs all plugins and themes belonging to a project\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ProjectSync extends Command\n{\n     /**\n     * @var string name of console command\n     */\n    protected $name = 'project:sync';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Install plugins and themes belonging to a project.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->line('Synchronizing Project...');\n\n        try {\n            // Install project packages\n            $this->installDefinedPlugins();\n\n            // Composer update\n            $this->comment(\"Executing: composer update\");\n            $composer = ComposerManager::instance();\n            $composer->setOutputCommand($this, $this->input);\n            $composer->update();\n\n            // Check dependencies\n            static::passthruArtisan('plugin:check --no-migrate');\n\n            // Lock themes\n            if (System::hasModule('Cms')) {\n                static::passthruArtisan('theme:check');\n            }\n\n            // Migrate database\n            $this->comment(\"Executing: php artisan october:migrate\");\n            $this->line('');\n\n            $errCode = null;\n            static::passthruArtisan('october:migrate', $errCode);\n\n            if ($errCode !== 0) {\n                $this->output->error('Migration failed. Check output above');\n                exit(1);\n            }\n\n            $this->output->success(\"Project synchronized\");\n        }\n        catch (Exception $e) {\n            $this->output->error($e->getMessage());\n        }\n    }\n\n    /**\n     * installDefinedPlugins\n     */\n    protected function installDefinedPlugins()\n    {\n        $installPackages = UpdateManager::instance()->syncProjectPackages();\n\n        // Nothing to do\n        if (count($installPackages) === 0) {\n            $this->info('All packages already installed');\n            return;\n        }\n\n        // Composer install differences\n        foreach ($installPackages as $installPackage) {\n            [$composerCode, $composerVersion] = $installPackage;\n            $composerVersion = '^'.$composerVersion;\n            $this->comment(\"Executing: composer require {$composerCode} {$composerVersion} --no-update\");\n            $this->line('');\n\n            $composer = ComposerManager::instance();\n            $composer->setOutputCommand($this, $this->input);\n            $composer->addPackages([$composerCode => $composerVersion]);\n        }\n    }\n\n    /**\n     * passthruArtisan\n     */\n    protected static function passthruArtisan($command, &$errCode = null)\n    {\n        passthru('\"'.PHP_BINARY.'\" artisan ' .$command, $errCode);\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/EventLogs.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Lang;\nuse Flash;\nuse System;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\SettingsManager;\nuse System\\Models\\EventLog;\n\n/**\n * EventLogs controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass EventLogs extends Controller\n{\n    /**\n     * @var array implement extensions in this controller\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n        \\Backend\\Behaviors\\ListController::class\n    ];\n\n    /**\n     * @var array formConfig `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array listConfig `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array requiredPermissions to view this page\n     */\n    public $requiredPermissions = ['utilities.logs'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.System', 'event_logs');\n    }\n\n    /**\n     * index_onRefresh\n     */\n    public function index_onRefresh()\n    {\n        return $this->listRefresh();\n    }\n\n    /**\n     * index_onEmptyLog\n     */\n    public function index_onEmptyLog()\n    {\n        EventLog::truncate();\n        Flash::success(__(\"Event log emptied\"));\n        return $this->listRefresh();\n    }\n\n    /**\n     * index_onDelete\n     */\n    public function index_onDelete()\n    {\n        if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) {\n            foreach ($checkedIds as $recordId) {\n                if (!$record = EventLog::find($recordId)) {\n                    continue;\n                }\n                $record->delete();\n            }\n\n            Flash::success(Lang::get('backend::lang.list.delete_selected_success'));\n        }\n        else {\n            Flash::error(Lang::get('backend::lang.list.delete_selected_empty'));\n        }\n\n        return $this->listRefresh();\n    }\n\n    /**\n     * preview page action\n     */\n    public function preview($id)\n    {\n        $this->addCss('/modules/system/assets/css/pages/eventlogs.css');\n        $this->addJs('/modules/system/assets/js/pages/eventlogs.beautifier.js');\n\n        if (System::checkDebugMode()) {\n            $this->addJs('/modules/system/assets/js/pages/eventlogs.beautifier.links.js');\n        }\n\n        return $this->asExtension('FormController')->preview($id);\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/MailBrandSettings.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Lang;\nuse File;\nuse Flash;\nuse Block;\nuse Config;\nuse Redirect;\nuse BackendMenu;\nuse Backend\\Classes\\SettingsController;\nuse System\\Models\\MailBrandSetting;\nuse System\\Classes\\SettingsManager;\nuse System\\Classes\\MailManager;\nuse System\\Models\\MailLayout;\nuse System\\Models\\MailTemplate;\n\n/**\n * MailBrandSettings for customizing mail brand settings\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass MailBrandSettings extends SettingsController\n{\n    /**\n     * @var array implement extensions\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class\n    ];\n\n    /**\n     * @var array formConfig `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var string settingsItemCode determines the settings code\n     */\n    public $settingsItemCode = 'mail_brand_settings';\n\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    public $requiredPermissions = ['mail.templates'];\n\n    /**\n     * __construct the controller\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        $this->pageTitle = \"Customize Mail Appearance\";\n    }\n\n    /**\n     * index action\n     */\n    public function index()\n    {\n        $this->addJs('/modules/system/assets/js/pages/mailbrandsettings.js');\n        $this->addCss('/modules/system/assets/css/pages/mailbrandsettings.css');\n\n        $setting = MailBrandSetting::instance();\n        $setting->resetCache();\n\n        return $this->create();\n    }\n\n    /**\n     * index_onSave\n     */\n    public function index_onSave()\n    {\n        return $this->create_onSave();\n    }\n\n    /**\n     * index_onResetDefault\n     */\n    public function index_onResetDefault()\n    {\n        $setting = MailBrandSetting::instance();\n        $setting->resetDefault();\n\n        Flash::success(Lang::get('backend::lang.form.reset_success'));\n\n        return Redirect::refresh();\n    }\n\n    /**\n     * onUpdateSampleMessage\n     */\n    public function onUpdateSampleMessage()\n    {\n        $this->formGetWidget()->setFormValues();\n\n        return ['previewHtml' => $this->renderSampleMessage()];\n    }\n\n    /**\n     * renderSampleMessage\n     */\n    public function renderSampleMessage()\n    {\n        $data = [\n            'subject' => Config::get('app.name'),\n            'appName' => Config::get('app.name'),\n            'texts' => Lang::get('system::lang.mail_brand.sample_template')\n        ];\n\n        $layout = new MailLayout;\n        $layout->fillFromCode('default');\n\n        $template = new MailTemplate;\n        $template->layout = $layout;\n        $template->content_html = File::get(base_path('modules/system/models/mailbrandsetting/sample_template.htm'));\n\n        return MailManager::instance()->renderTemplate($template, $data);\n    }\n\n    /**\n     * renderSampleMessageAsScript template\n     */\n    protected function renderSampleMessageAsScript()\n    {\n        return '<script type=\"text/template\" id=\"'.$this->getId('mailPreviewTemplate').'\">'.$this->renderSampleMessage().'</script>';\n    }\n\n    /**\n     * formCreateModelObject\n     */\n    public function formCreateModelObject()\n    {\n        return MailBrandSetting::instance();\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/MailLayouts.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Lang;\nuse Flash;\nuse Redirect;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\SettingsManager;\n\n/**\n * Mail layouts controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailLayouts extends Controller\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array Permissions required to view this page.\n     */\n    public $requiredPermissions = ['mail.templates'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.System', 'mail_templates');\n    }\n\n    /**\n     * update_onResetDefault handler\n     */\n    public function update_onResetDefault($recordId)\n    {\n        $model = $this->formFindModelObject($recordId);\n\n        $model->fillFromCode();\n        $model->save();\n\n        Flash::success(Lang::get('backend::lang.form.reset_success'));\n\n        return Redirect::refresh();\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/MailPartials.php",
    "content": "<?php namespace System\\Controllers;\n\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\SettingsManager;\n\n/**\n * Mail partials controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailPartials extends Controller\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array Permissions required to view this page.\n     */\n    public $requiredPermissions = ['mail.templates'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.System', 'mail_templates');\n    }\n\n    /**\n     * formBeforeSave event\n     */\n    public function formBeforeSave($model)\n    {\n        $model->is_custom = false;\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/MailTemplates.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Mail;\nuse Flash;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Models\\MailTemplate;\nuse System\\Classes\\SettingsManager;\nuse ApplicationException;\nuse Throwable;\n\n/**\n * MailTemplates controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailTemplates extends Controller\n{\n    /**\n     * @var array implement extensions by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n        \\Backend\\Behaviors\\ListController::class\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = [\n        'templates' => 'config_templates_list.yaml',\n        'layouts' => 'config_layouts_list.yaml',\n        'partials' => 'config_partials_list.yaml'\n    ];\n\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    public $requiredPermissions = ['mail.templates'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.System', 'mail_templates');\n    }\n\n    /**\n     * index\n     */\n    public function index($tab = null)\n    {\n        MailTemplate::syncAll();\n        $this->asExtension('ListController')->index();\n        $this->bodyClass = 'compact-container';\n\n        $this->vars['activeTab'] = $tab ?: 'templates';\n    }\n\n    /**\n     * formBeforeSave\n     */\n    public function formBeforeSave($model)\n    {\n        $model->is_custom = true;\n    }\n\n    /**\n     * onTest\n     */\n    public function onTest($recordId)\n    {\n        try {\n            $model = $this->formFindModelObject($recordId);\n            $user = $this->user;\n\n            Mail::sendTo([$user->email => $user->full_name], $model->code);\n\n            Flash::success(__(\"Test message sent.\"));\n        }\n        catch (Throwable $ex) {\n            throw new ApplicationException($ex->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/Market.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Lang;\nuse Flash;\nuse Backend;\nuse Response;\nuse BackendMenu;\nuse Cms\\Classes\\ThemeManager;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\ProductDetail;\nuse System\\Classes\\UpdateManager;\nuse System\\Classes\\PluginManager;\nuse System\\Classes\\SettingsManager;\nuse System\\Widgets\\Changelog;\nuse System\\Widgets\\Updater;\nuse ApplicationException;\nuse Exception;\n\n/**\n * Market controller for installing projects, themes and plugins\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass Market extends Controller\n{\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    public $requiredPermissions = ['general.backend.perform_updates'];\n\n    /**\n     * @var System\\Widgets\\Changelog changelogWidget\n     */\n    protected $changelogWidget;\n\n    /**\n     * @var System\\Widgets\\Updater updaterWidget\n     */\n    protected $updaterWidget;\n\n    /**\n     * @var bool turboRouter\n     */\n    public $turboRouter = false;\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'updates');\n        SettingsManager::setContext('October.System', 'updates');\n\n        $this->changelogWidget = new Changelog($this);\n        $this->changelogWidget->bindToController();\n\n        $this->updaterWidget = new Updater($this);\n        $this->updaterWidget->bindToController();\n    }\n\n    /**\n     * index shows marketplace information\n     */\n    public function index($tab = null)\n    {\n        if (get('search')) {\n            return Response::make($this->onSearchProducts());\n        }\n\n        try {\n            // $this->bodyClass = 'compact-container';\n            $this->pageTitle = 'Marketplace';\n            $this->pageSize = 1400;\n\n            $this->addJs('/modules/system/assets/js/pages/market.installprocess.js');\n            $this->addCss('/modules/system/assets/css/pages/market.css');\n\n            $projectDetails = UpdateManager::instance()->getProjectDetails();\n            $defaultTab = $projectDetails ? 'project' : 'plugins';\n\n            $this->vars['projectDetails'] = $projectDetails;\n            $this->vars['activeTab'] = $tab ?: $defaultTab;\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n    }\n\n    /**\n     * plugin\n     */\n    public function plugin($urlCode = null, $tab = null)\n    {\n        try {\n            $this->pageTitle = 'system::lang.updates.details_title_plugin';\n            $this->pageSize = 950;\n            $this->addJs('/modules/system/assets/js/pages/market.details.js');\n            $this->addCss('/modules/system/assets/css/pages/market.css');\n\n            $code = $this->slugToCode($urlCode);\n            $product = new ProductDetail($code);\n\n            if (!$product->exists()) {\n                throw new ApplicationException(Lang::get('system::lang.updates.plugin_not_found'));\n            }\n\n            // Fetch from server\n            // if (get('fetch')) {\n            //     $fetchedContent = UpdateManager::instance()->requestPluginContent($code);\n            //     $product->upgradeHtml = array_get($fetchedContent, 'upgrade_guide_html');\n            // }\n\n            $this->vars['projectDetails'] = UpdateManager::instance()->getProjectDetails();\n            $this->vars['activeTab'] = $tab ?: 'readme';\n            $this->vars['urlCode'] = $urlCode;\n            $this->vars['product'] = $product;\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n    }\n\n    /**\n     * theme\n     */\n    public function theme($urlCode = null, $tab = null)\n    {\n        try {\n            $this->pageTitle = 'system::lang.updates.details_title_theme';\n            $this->pageSize = 950;\n            $this->addJs('/modules/system/assets/js/pages/market.details.js');\n            $this->addCss('/modules/system/assets/css/pages/market.css');\n\n            $code = $this->slugToCode($urlCode);\n            $product = new ProductDetail($code, true);\n\n            if (!$product->exists()) {\n                throw new ApplicationException(Lang::get('system::lang.updates.theme_not_found'));\n            }\n\n            $this->vars['projectDetails'] = UpdateManager::instance()->getProjectDetails();\n            $this->vars['activeTab'] = $tab ?: 'readme';\n            $this->vars['urlCode'] = $urlCode;\n            $this->vars['product'] = $product;\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n    }\n\n    /**\n     * onBrowseProject\n     */\n    public function onBrowseProject()\n    {\n        $project = UpdateManager::instance()->requestBrowseProject();\n        $pluginManager = PluginManager::instance();\n        $themeManager = ThemeManager::instance();\n\n        $products = collect();\n\n        foreach (($project['plugins'] ?? []) as $plugin) {\n            $installed = $pluginManager->hasPlugin($plugin['code'] ?? null);\n            $slug = $this->codeToSlug($plugin['code'] ?? null);\n\n            $plugin['type'] = 'plugin';\n            $plugin['slug'] = $slug;\n            $plugin['detailUrl'] = $this->actionUrl('plugin') . '/' . $slug;\n            $plugin['installed'] = $installed;\n            $plugin['version'] = $plugin['composer_version'] ?? '*';\n            $plugin['handler'] = $installed\n                ? $this->updaterWidget->getEventHandler('onRemovePlugin')\n                : $this->updaterWidget->getEventHandler('onInstallPlugin');\n\n            $products->add($plugin);\n        }\n\n        foreach (($project['themes'] ?? []) as $theme) {\n            $installed = $themeManager->isInstalled($theme['code'] ?? null);\n            $slug = $this->codeToSlug($theme['code'] ?? null);\n\n            $theme['type'] = 'theme';\n            $theme['slug'] = $slug;\n            $theme['detailUrl'] = $this->actionUrl('theme') . '/' . $slug;\n            $theme['installed'] = $installed;\n            $theme['version'] = $theme['composer_version'] ?? '*';\n            $theme['handler'] = $installed\n                ? $this->updaterWidget->getEventHandler('onRemoveTheme')\n                : $this->updaterWidget->getEventHandler('onInstallThemeCheck');\n\n            $products->add($theme);\n        }\n\n        $products->sortBy('updated_at');\n\n        return $project + [\n            'products' => $products\n        ];\n    }\n\n    /**\n     * onSearchProducts\n     */\n    public function onSearchProducts()\n    {\n        $searchType = get('search', 'plugin');\n        $serverUri = $searchType == 'plugin' ? 'plugin/search' : 'theme/search';\n\n        $manager = UpdateManager::instance();\n        return $manager->requestServerData($serverUri, ['query' => get('query')]);\n    }\n\n    /**\n     * onSelectProduct\n     */\n    public function onSelectProduct()\n    {\n        $slug = $this->codeToSlug(post('code'));\n        $type = post('type') === 'theme' ? 'theme' : 'plugin';\n        return Backend::redirect('system/market/'.$type.'/'.$slug);\n    }\n\n    /**\n     * onBrowsePackages\n     */\n    public function onBrowsePackages()\n    {\n        $type = post('type', 'plugin');\n        $page = get($type.'_page');\n\n        $packages = UpdateManager::instance()->requestBrowseProducts($type, $page);\n\n        // Inject slug attribute for URLs\n        foreach (array_get($packages, 'data', []) as $key => $package) {\n            $packages['data'][$key]['slug'] = $this->codeToSlug($package['code']);\n        }\n\n        return ['result' => $packages];\n    }\n\n    /**\n     * onResetProductData removes orphaned product data from the database\n     * It only supports plugins at the moment.\n     */\n    public function onResetProductData()\n    {\n        if ($code = post('code')) {\n            UpdateManager::instance()->rollbackPlugin($code);\n            Flash::success(__(\"Data has been removed.\"));\n        }\n\n        return Backend::redirect('system/updates');\n    }\n\n    /**\n     * slugToCode converts a slug to a product code\n     * rainlab-blog -> rainlab.blog\n     */\n    protected function slugToCode(string $code): string\n    {\n        $parts = explode('-', $code, 2);\n\n        if (!isset($parts[1])) {\n            return strtolower($code);\n        }\n        else {\n            return strtolower($parts[0].'.'.$parts[1]);\n        }\n    }\n\n    /**\n     * codeToSlug converts a product code to a slug\n     * RainLab.Blog -> rainlab-blog\n     */\n    protected function codeToSlug(string $code): string\n    {\n        return strtolower(str_replace('.', '-', $code));\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/RequestLogs.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Lang;\nuse Flash;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\SettingsManager;\nuse System\\Models\\RequestLog;\n\n/**\n * Request Logs controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RequestLogs extends Controller\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class,\n        \\Backend\\Behaviors\\ListController::class\n    ];\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array Permissions required to view this page.\n     */\n    public $requiredPermissions = ['utilities.logs'];\n\n    /**\n     * Constructor.\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.System', 'request_logs');\n    }\n\n    public function index_onRefresh()\n    {\n        return $this->listRefresh();\n    }\n\n    public function index_onEmptyLog()\n    {\n        RequestLog::truncate();\n        Flash::success(Lang::get('system::lang.request_log.empty_success'));\n        return $this->listRefresh();\n    }\n\n    public function index_onDelete()\n    {\n        if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) {\n            foreach ($checkedIds as $recordId) {\n                if (!$record = RequestLog::find($recordId)) {\n                    continue;\n                }\n                $record->delete();\n            }\n\n            Flash::success(Lang::get('backend::lang.list.delete_selected_success'));\n        }\n        else {\n            Flash::error(Lang::get('backend::lang.list.delete_selected_empty'));\n        }\n\n        return $this->listRefresh();\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/Settings.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Lang;\nuse Flash;\nuse Backend;\nuse Redirect;\nuse BackendMenu;\nuse System\\Classes\\SettingsManager;\nuse Backend\\Classes\\Controller;\nuse ApplicationException;\nuse Exception;\n\n/**\n * Settings controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass Settings extends Controller\n{\n    /**\n     * @var WidgetBase formWidget reference to the widget object\n     */\n    protected $formWidget;\n\n    /**\n     * @var array requiredPermissions to view this page\n     */\n    public $requiredPermissions = [];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        if ($this->action == 'backend_preferences') {\n            $this->requiredPermissions = ['preferences'];\n        }\n\n        $this->addCss('/modules/system/assets/css/pages/settings.css', 'global');\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n    }\n\n    /**\n     * index action\n     */\n    public function index()\n    {\n        if ($first = array_first(SettingsManager::instance()->listAllItems('system'))) {\n            return Redirect::intended($first->url);\n        }\n\n        return Backend::redirect('/');\n    }\n\n    /**\n     * mysettings action\n     */\n    public function mysettings()\n    {\n        if ($first = array_first(SettingsManager::instance()->listAllItems('mysettings'))) {\n            return Redirect::intended($first->url);\n        }\n\n        return Backend::redirect('/');\n    }\n\n    //\n    // Generated Form\n    //\n\n    /**\n     * update action\n     */\n    public function update($author, $plugin, $code = null)\n    {\n        SettingsManager::setContext($author.'.'.$plugin, $code);\n\n        $this->vars['parentLink'] = Backend::url('system/settings');\n        $this->vars['parentLabel'] = __('Settings');\n\n        try {\n            if (!$item = $this->findSettingItem($author, $plugin, $code)) {\n                throw new ApplicationException(__('Unable to find the specified settings.'));\n            }\n\n            $this->pageTitle = $item->label;\n            $this->pageSize = Backend::sizeToPixels($item->size) ?: null;\n\n            if ($item->context == 'mysettings') {\n                $this->vars['parentLink'] = Backend::url('system/settings/mysettings');\n                $this->vars['parentLabel'] = Lang::get('backend::lang.mysettings.menu_label');\n            }\n\n            $model = $this->createModel($item);\n\n            $this->initWidgets($model);\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n    }\n\n    /**\n     * update_onSave AJAX handler\n     */\n    public function update_onSave($author, $plugin, $code = null)\n    {\n        $item = $this->findSettingItem($author, $plugin, $code);\n        $model = $this->createModel($item);\n        $this->initWidgets($model);\n\n        $saveData = $this->formWidget->getSaveData();\n        foreach ($saveData as $attribute => $value) {\n            $model->{$attribute} = $value;\n        }\n\n        // Multisite\n        if ($this->formHasMultisite($model)) {\n            $this->tagMultisiteModel($model);\n        }\n\n        $model->save(['propagate' => true, 'sessionKey' => $this->formWidget->getSessionKey()]);\n\n        Flash::success(__(':name settings updated', ['name' => __($item->label)]));\n\n        // Handle redirect\n        if ($redirectUrl = post('redirect', true)) {\n            $redirectUrl = ($item->context == 'mysettings')\n                ? 'system/settings/mysettings'\n                : 'system/settings';\n\n            return Backend::redirect($redirectUrl);\n        }\n    }\n\n    /**\n     * update_onResetDefault AJAX handler\n     */\n    public function update_onResetDefault($author, $plugin, $code = null)\n    {\n        $item = $this->findSettingItem($author, $plugin, $code);\n        $model = $this->createModel($item);\n        $model->resetDefault();\n\n        Flash::success(Lang::get('backend::lang.form.reset_success'));\n\n        return Backend::redirect('system/settings/update/'.$author.'/'.$plugin.'/'.$code);\n    }\n\n    /**\n     * formRender renders the form\n     */\n    public function formRender($options = [])\n    {\n        if (!$this->formWidget) {\n            throw new ApplicationException(Lang::get('backend::lang.form.behavior_not_ready'));\n        }\n\n        return $this->formWidget->render($options);\n    }\n\n    /**\n     * initWidgets prepare the widgets used by this action\n     * @param Model $model\n     */\n    protected function initWidgets($model)\n    {\n        $config = $model->getFieldConfig();\n        $config->model = $model;\n        $config->arrayName = class_basename($model);\n        $config->context = 'update';\n\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $config);\n        $widget->bindToController();\n        $this->formWidget = $widget;\n    }\n\n    /**\n     * createModel is an internal method to prepare the form model object\n     */\n    protected function createModel($item)\n    {\n        if (!isset($item->class) || !strlen($item->class)) {\n            throw new ApplicationException(__('The settings page is missing a Model definition.'));\n        }\n\n        $class = $item->class;\n        return $class::instance();\n    }\n\n    /**\n     * findSettingItem locates a setting item for a module or plugin\n     */\n    protected function findSettingItem($author, $plugin, $code)\n    {\n        $manager = SettingsManager::instance();\n\n        $moduleOwner = $author;\n        $moduleCode = $plugin;\n        $item = $manager->findSettingItem($moduleOwner, $moduleCode);\n\n        if (!$item) {\n            $pluginOwner = $author . '.' . $plugin;\n            $pluginCode = $code;\n            $item = $manager->findSettingItem($pluginOwner, $pluginCode);\n        }\n\n        return $item;\n    }\n\n    /**\n     * formHasMultisite\n     */\n    protected function formHasMultisite($model)\n    {\n        return $model &&\n            $model->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n            $model->isMultisiteEnabled();\n    }\n\n    /**\n     * tagMultisiteModel\n     */\n    public function tagMultisiteModel($model)\n    {\n        if ($model->site_root_id) {\n            return;\n        }\n\n        $rootModel = $this->findMultisiteRootModel($model);\n        if (!$rootModel) {\n            return;\n        }\n\n        $model->site_root_id = $rootModel->id;\n    }\n\n    /**\n     * findMultisiteRootModel\n     */\n    public function findMultisiteRootModel($model)\n    {\n        // Find nearest existing model\n        if (!$model->exists) {\n            $model = $model->newQuery()->withSites()->first();\n            if (!$model) {\n                return;\n            }\n        }\n\n        // Model is root\n        if ((int) $model->site_root_id === (int) $model->id) {\n            return $model;\n        }\n\n        // Find root model\n        return $model->newQuery()->withSites()\n            ->where('id', $model->site_root_id)\n            ->first();\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/SiteGroups.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Site;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\SettingsManager;\nuse System\\Models\\SiteGroup;\nuse NotFoundException;\n\n/**\n * SiteGroups controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SiteGroups extends Controller\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\ListController::class,\n        \\Backend\\Behaviors\\FormController::class,\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    public $requiredPermissions = ['settings.manage_sites'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.System', 'sites');\n    }\n\n    /**\n     * beforeDisplay\n     */\n    public function beforeDisplay()\n    {\n        if (!Site::hasFeature()) {\n            throw new NotFoundException;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/Sites.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Site;\nuse Config;\nuse System;\nuse BackendMenu;\nuse Backend\\Classes\\Controller;\nuse System\\Classes\\SettingsManager;\nuse System\\Models\\SiteDefinition;\nuse System\\Models\\SiteGroup;\nuse NotFoundException;\n\n/**\n * Sites controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Sites extends Controller\n{\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\ListController::class,\n        \\Backend\\Behaviors\\FormController::class,\n    ];\n\n    /**\n     * @var array `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    public $requiredPermissions = ['settings.manage_sites'];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'settings');\n        SettingsManager::setContext('October.System', 'sites');\n    }\n\n    /**\n     * beforeDisplay\n     */\n    public function beforeDisplay()\n    {\n        if (!Site::hasFeature()) {\n            throw new NotFoundException;\n        }\n    }\n\n    /**\n     * index\n     */\n    public function index()\n    {\n        SiteDefinition::syncPrimarySite();\n\n        $this->vars['useGroups'] = Site::hasSiteGroups();\n        $this->vars['groups'] = Site::hasSiteGroups() ? SiteGroup::all() : [];\n\n        $this->asExtension('ListController')->index();\n    }\n\n    /**\n     * onRefreshList\n     */\n    public function onRefreshList()\n    {\n        return array_merge($this->listRefresh(), [\n            '#' . $this->getId('listTabs') => $this->makePartial('list_tabs')\n        ]);\n    }\n\n    /**\n     * formExtendFields adds available permission fields to the User form.\n     * Mark default groups as checked for new Users.\n     */\n    public function formExtendFields($form)\n    {\n        $model = $form->model;\n\n        if (!$model->is_primary) {\n            $form->getField('_primary_site_hint')->hidden();\n        }\n\n        if ($model->isCustomLocale($model->locale)) {\n            $form->getField('locale')->value('custom');\n            $form->getField('_custom_locale')->value($model->locale);\n        }\n\n        $form->getField('app_url')->comment(sprintf(__('Current default value: :value', ['value' => '<strong>%s</strong>']), Config::get('app.url')))->commentHtml();\n        $form->getField('theme')->comment(sprintf(__('Current default value: :value', ['value' => '<strong>%s</strong>']), Config::get('cms.active_theme', 'demo')))->commentHtml();\n        $form->getField('timezone')->comment(sprintf(__('Current default value: :value', ['value' => '<strong>%s</strong>']), Config::get('cms.timezone', 'UTC')))->commentHtml();\n        $form->getField('locale')->comment(sprintf(__('Current default value: :value', ['value' => '<strong>%s</strong>']), Config::get('app.original_locale', Config::get('app.locale', 'en'))))->commentHtml();\n\n        // Remove themes without module\n        if (!System::hasModule('Cms')) {\n            $form->removeField('theme');\n        }\n\n        // Remove group if not configured\n        if (!SiteGroup::isConfigured()) {\n            $form->removeField('group');\n        }\n    }\n\n    /**\n     * listExtendColumns modifies columns based on dynamic logic.\n     */\n    public function listExtendColumns($list)\n    {\n        // Remove themes without module\n        if (!System::hasModule('Cms')) {\n            $list->removeColumn('theme');\n        }\n\n        // Remove group if not configured\n        if (!Site::hasSiteGroups()) {\n            $list->removeColumn('group');\n        }\n        elseif (!get('group')) {\n            $list->getColumn('group')->invisible(false);\n        }\n    }\n\n    /**\n     * listExtendQuery\n     */\n    public function listExtendQuery($query, $definition = null)\n    {\n        if ($groupId = get('group')) {\n            $query->where('group_id', $groupId);\n        }\n    }\n\n    /**\n     * {@inheritDoc}\n     */\n    public function listInjectRowClass($record, $definition = null)\n    {\n        $classes = [];\n\n        if (!$record->is_enabled) {\n            $classes[] = 'disabled';\n        }\n\n        if (count($classes) > 0) {\n            return join(' ', $classes);\n        }\n    }\n\n    /**\n     * formBeforeSave\n     */\n    public function formBeforeSave($model)\n    {\n        if (post('SiteDefinition[locale]') === 'custom') {\n            $this->formSetSaveValue('locale', post('SiteDefinition[_custom_locale]'));\n        }\n\n        if (post('SiteDefinition[is_enabled]')) {\n            $this->formSetSaveValue('is_enabled_edit', true);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/Updates.php",
    "content": "<?php namespace System\\Controllers;\n\nuse Lang;\nuse Flash;\nuse Backend;\nuse BackendAuth;\nuse BackendMenu;\nuse System\\Models\\PluginVersion;\nuse System\\Classes\\UpdateManager;\nuse System\\Classes\\PluginManager;\nuse System\\Classes\\SettingsManager;\nuse System\\Helpers\\Cache as CacheHelper;\nuse System\\Widgets\\Changelog;\nuse System\\Widgets\\Updater;\nuse Backend\\Classes\\Controller;\nuse October\\Rain\\Composer\\ComposerManager;\nuse ValidationException;\nuse Exception;\n\n/**\n * Updates controller\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n *\n */\nclass Updates extends Controller\n{\n    use \\System\\Controllers\\Updates\\HasComposerEditor;\n\n    /**\n     * @var array Extensions implemented by this controller.\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\ListController::class\n    ];\n\n    /**\n     * @var array `ListController` configuration.\n     */\n    public $listConfig = [\n        'list' => 'config_list.yaml',\n        'manage' => 'config_manage_list.yaml'\n    ];\n\n    /**\n     * @var array requiredPermissions to view this page.\n     */\n    public $requiredPermissions = ['general.backend.perform_updates'];\n\n    /**\n     * @var System\\Widgets\\Changelog\n     */\n    protected $changelogWidget;\n\n    /**\n     * @var System\\Widgets\\Updater\n     */\n    protected $updaterWidget;\n\n    /**\n     * __construct the class\n     */\n    public function __construct()\n    {\n        parent::__construct();\n\n        BackendMenu::setContext('October.System', 'system', 'updates');\n        SettingsManager::setContext('October.System', 'updates');\n\n        $this->changelogWidget = new Changelog($this);\n        $this->changelogWidget->bindToController();\n\n        $this->updaterWidget = new Updater($this);\n        $this->updaterWidget->bindToController();\n    }\n\n    /**\n     * index controller\n     */\n    public function index()\n    {\n        $this->addJs('/modules/system/assets/js/pages/updates.js');\n\n        try {\n            $this->vars['projectDetails'] = UpdateManager::instance()->getProjectDetails();\n        }\n        catch (Exception $ex) {\n            $this->vars['projectDetails'] = null;\n        }\n\n        $this->vars['currentVersion'] = UpdateManager::instance()->getCurrentVersion();\n        $this->vars['pluginsActiveCount'] = PluginVersion::applyEnabled()->count();\n        $this->vars['pluginsCount'] = PluginVersion::count();\n        return $this->asExtension('ListController')->index();\n    }\n\n    /**\n     * index_onCompareVersions\n     */\n    public function index_onCompareVersions()\n    {\n        $force = (bool) post('force', false);\n\n        return UpdateManager::instance()->checkVersions($force);\n    }\n\n    /**\n     * manage controller for plugins\n     */\n    public function manage()\n    {\n        $this->pageTitle = \"Manage Plugins\";\n        PluginManager::instance()->clearDisabledCache();\n\n        $this->vars['canUpdate'] = BackendAuth::userHasAccess('general.backend.perform_updates');\n        return $this->asExtension('ListController')->index();\n    }\n\n    /**\n     * manage_onBulkAction performs a bulk action on the provided plugins\n     */\n    public function manage_onBulkAction()\n    {\n        if (\n            ($bulkAction = post('action')) &&\n            ($checkedIds = post('checked')) &&\n            is_array($checkedIds) &&\n            count($checkedIds)\n        ) {\n            $manager = PluginManager::instance();\n\n            foreach ($checkedIds as $pluginId) {\n                if (!$plugin = PluginVersion::find($pluginId)) {\n                    continue;\n                }\n\n                switch ($bulkAction) {\n                    case 'disable':\n                        $plugin->setContextDisabled();\n                        break;\n\n                    case 'enable':\n                        $plugin->setContextEnabled();\n                        break;\n\n                    case 'refresh':\n                        if ($plugin->orphaned) {\n                            UpdateManager::instance()->rollbackPlugin($plugin->code);\n                        }\n                        else {\n                            $manager->refreshPlugin($plugin->code);\n                        }\n                        break;\n\n                    case 'remove':\n                        $manager->deletePlugin($plugin->code);\n                        break;\n                }\n            }\n        }\n\n        // Reload plugin dependency tree\n        PluginManager::instance()->clearDisabledCache();\n\n        Flash::success(Lang::get(\"system::lang.plugins.{$bulkAction}_success\"));\n        return $this->listRefresh('manage');\n    }\n\n    /**\n     * manage_onClearCache clears the application cache\n     */\n    public function manage_onClearCache()\n    {\n        CacheHelper::clear();\n\n        Flash::success(__(\"Cache cleared successfully.\"));\n    }\n\n    /**\n     * listInjectRowClass is an override for the ListController behavior\n     * Modifies the CSS class for each row in the list to\n     *\n     * - hidden - Disabled by configuration\n     * - safe disabled - Orphaned or disabled\n     * - negative - Disabled by system\n     * - frozen - Frozen by the user\n     * - positive - Default CSS class\n     *\n     * @see Backend\\Behaviors\\ListController\n     * @return string\n     */\n    public function listInjectRowClass($record, $definition = null)\n    {\n        if ($record->disabledByConfig) {\n            return 'hidden';\n        }\n\n        if ($record->orphaned || $record->context_disabled) {\n            return 'safe disabled';\n        }\n\n        if ($record->disabledBySystem) {\n            return 'negative';\n        }\n\n        if ($definition !== 'manage') {\n            return;\n        }\n\n        return 'positive';\n    }\n\n    /**\n     * onLoadProjectForm displays the form for entering a license key\n     */\n    public function onLoadProjectForm()\n    {\n        return $this->makePartial('project_form');\n    }\n\n    /**\n     * onAttachProject validates the project ID and execute the project installation\n     */\n    public function onAttachProject()\n    {\n        try {\n            if (!$projectId = trim(post('project_id'))) {\n                throw new ValidationException(['project_id' => Lang::get('system::lang.project.id.missing')]);\n            }\n\n            // Validate input with gateway\n            $manager = UpdateManager::instance();\n            $result = $manager->requestProjectDetails($projectId);\n\n            // Check project status\n            $isActive = $result['is_active'] ?? false;\n            if (!$isActive) {\n                throw new ValidationException(['project_id' => __(\"License is unpaid or has expired. Please visit octobercms.com to obtain a license.\")]);\n            }\n\n            // Store project details\n            $manager->storeProjectDetails($result);\n\n            // Add gateway as a composer repo\n            $this->ensureComposerRegistered();\n\n            Flash::success(__(\"Thanks for being a customer of October CMS!\"));\n            return Backend::redirect('system/updates');\n        }\n        catch (Exception $ex) {\n            throw new ValidationException(['project_id' => $ex->getMessage()]);\n        }\n    }\n\n    /**\n     * Make sure composer is ready to receive updates\n     */\n    protected function ensureComposerRegistered()\n    {\n        $manager = UpdateManager::instance();\n        $composer = ComposerManager::instance();\n\n        $composerUrl = $manager->getComposerUrl();\n\n        if (!$composer->hasRepository($composerUrl)) {\n            $composer->addOctoberRepository($composerUrl);\n        }\n\n        if (!$composer->getPackageVersions(['october/system'])) {\n            $composer->addPackages(['october/all' => \"^\".\\System\\Facades\\System::VERSION]);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/eventlogs/_field_message.php",
    "content": "<?= e($value, true); ?>\n"
  },
  {
    "path": "modules/system/controllers/eventlogs/_hint.php",
    "content": "\n<p>\n    <?= __(\"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\") ?>\n</p>\n"
  },
  {
    "path": "modules/system/controllers/eventlogs/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::ajaxButton(\n        label: __(\"Refresh\"),\n        handler: 'onRefresh',\n        icon: 'oc-icon-refresh',\n        primary: true,\n        dataRequestMessage: __(\"Updating...\")\n    ) ?>\n    <?= Ui::ajaxButton(\n        label: __(\"Empty Event Log\"),\n        handler: 'onEmptyLog',\n        icon: 'oc-icon-eraser',\n        secondary: true,\n        dataRequestConfirm: __(\"Are you sure?\"),\n        dataRequestMessage: __(\"Emptying Event Log...\")\n    ) ?>\n\n    <div class=\"toolbar-divider\"></div>\n\n    <?= Ui::ajaxButton(\n        label: __(\"Delete Selected\"),\n        handler: 'onDelete',\n        icon: 'oc-icon-delete',\n        secondary: true,\n        dataListCheckedTrigger: true,\n        dataListCheckedRequest: true,\n        dataStripeLoadIndicator: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/eventlogs/_message_column.php",
    "content": "<?= e($record->summary, true) ?>"
  },
  {
    "path": "modules/system/controllers/eventlogs/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\n# Record name\nname: Event Log\n\n# Model Form Field configuration\nform: ~/modules/system/models/eventlog/fields.yaml\n\n# Model Class name\nmodelClass: System\\Models\\EventLog\n\n# Default redirect location\ndefaultRedirect: system/eventlogs\n\n# Preview page\npreview:\n    title: Event\n"
  },
  {
    "path": "modules/system/controllers/eventlogs/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: \"Event Log\"\nlist: ~/modules/system/models/eventlog/columns.yaml\nfilter: ~/modules/system/models/eventlog/scopes.yaml\nmodelClass: System\\Models\\EventLog\nrecordUrl: system/eventlogs/preview/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 30\nshowSetup: true\nshowCheckboxes: true\ndefaultSort:\n    column: created_at\n    direction: desc\n\ntoolbar:\n    buttons: list_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n\n"
  },
  {
    "path": "modules/system/controllers/eventlogs/index.php",
    "content": "<div class=\"padded-container container-flush\">\n    <?= $this->makeHintPartial('system_eventlogs_hint', 'hint') ?>\n</div>\n\n<?= $this->listRender() ?>\n"
  },
  {
    "path": "modules/system/controllers/eventlogs/preview.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/eventlogs') ?>\"><?= __(\"Event Log\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <div class=\"scoreboard\">\n        <div data-control=\"toolbar\">\n            <div class=\"scoreboard-item title-value\">\n                <h4><?= __(\"Event ID\") ?></h4>\n                <p>#<?= $formModel->id ?></p>\n            </div>\n            <div class=\"scoreboard-item title-value\">\n                <h4><?= __(\"Level\") ?></h4>\n                <p><?= $formModel->level ?></p>\n            </div>\n            <div class=\"scoreboard-item title-value\">\n                <h4><?= __(\"Date & Time\") ?></h4>\n                <p><?= $formModel->created_at->toDayDateTimeString() ?></p>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"layout-item stretch layout-column\">\n        <?= $this->formRenderPreview() ?>\n    </div>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n\n<?php endif ?>\n\n<p>\n    <a href=\"<?= Backend::url('system/eventlogs') ?>\" class=\"btn btn-default oc-icon-chevron-left\">\n        <?= __(\"Return to Event Log\") ?>\n    </a>\n</p>\n"
  },
  {
    "path": "modules/system/controllers/mailbrandsettings/_field_mail_preview.php",
    "content": "<div\n    id=\"<?= $this->getId('mailPreviewContainer') ?>\"\n    data-control=\"mailpreview\"\n    data-preview-template-id=\"<?= $this->getId('mailPreviewTemplate') ?>\"></div>\n"
  },
  {
    "path": "modules/system/controllers/mailbrandsettings/_form_buttons.php",
    "content": "<div>\n    <?= Ui::ajaxButton(\n        label: __(\"Save Changes\"),\n        handler: 'onSave',\n        primary: true,\n        hotkey: ['ctrl+s', 'cmd+s'],\n        dataRequestData: \"redirect: false\",\n        dataRequestMessage: __(\"Saving...\")\n    ) ?>\n\n    <span class=\"btn-text\">\n        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n        <?= Ui::button(\n            label: __(\"Cancel\"),\n            href: Backend::url('system/settings'),\n            class: 'btn-link p-0'\n        ) ?>\n    </span>\n\n    <span class=\"pull-right btn-text\">\n        <?= Ui::ajaxButton(\n            label: __(\"Reset to Default\"),\n            handler: 'onResetDefault',\n            class: 'btn-link p-0',\n            dataRequestData: \"redirect: false\",\n            dataRequestConfirm: __(\"Are you sure?\"),\n            dataRequestMessage: __(\"Resetting...\")\n        ) ?>\n    </span>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/mailbrandsettings/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\n# Record name\nname: \"Mail Branding\"\n\n# Fields are defined by extension\nform: ~/modules/system/models/mailbrandsetting/fields.yaml\n\n# Model Class name\nmodelClass: System\\Models\\MailBrandSetting\n\n# Default redirect location\ndefaultRedirect: system/settings\n\n# Form Design\ndesign:\n    displayMode: sidebar\n"
  },
  {
    "path": "modules/system/controllers/mailbrandsettings/index.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= $this->renderSampleMessageAsScript() ?>\n<?= $this->formRenderDesign() ?>\n"
  },
  {
    "path": "modules/system/controllers/maillayouts/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\nname: \"Layout\"\nform: ~/modules/system/models/maillayout/fields.yaml\nmodelClass: System\\Models\\MailLayout\ndefaultRedirect: system/mailtemplates/index/layouts\n\ncreate:\n    redirect: system/maillayouts/update/:id\n    redirectClose: system/mailtemplates/index/layouts\n\nupdate:\n    redirect: system/mailtemplates\n    redirectClose: system/mailtemplates/index/layouts\n"
  },
  {
    "path": "modules/system/controllers/maillayouts/create.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/mailtemplates/index/layouts') ?>\"><?= __(\"Mail Layouts\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\">><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons pt-4\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Create\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Create & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <?= Ui::button(\n                        label: __(\"Cancel\"),\n                        href: Backend::url('system/mailtemplates/index/layouts'),\n                        class: 'btn-link p-0'\n                    ) ?>\n                </span>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Mail Templates\"),\n            href: Backend::url('system/mailtemplates/index/layouts'),\n            secondary: true\n        ) ?>\n    </p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/maillayouts/update.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/mailtemplates/index/layouts') ?>\"><?= __(\"Mail Layouts\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row min-size\">\n            <div class=\"scoreboard\">\n                <div data-control=\"toolbar\">\n                    <div class=\"scoreboard-item title-value\">\n                        <h4><?= __(\"Layout\") ?></h4>\n                        <p><?= e($formModel->code) ?></p>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons pt-4\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Save\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestData: \"redirect: false\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Save & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?php if ($formModel->is_locked): ?>\n                    <?= Ui::ajaxButton(\n                        label: __(\"Reset to Default\"),\n                        handler: 'onResetDefault',\n                        class: 'btn-danger pull-right',\n                        dataRequestConfirm: __(\"Are you sure?\"),\n                        dataRequestMessage: __(\"Resetting...\")\n                    ) ?>\n                <?php else: ?>\n                    <?= Ui::iconButton(\n                        label: __(\"Delete\"),\n                        icon: 'oc-icon-delete',\n                        handler: 'onDelete',\n                        danger: true,\n                        class: 'pull-right',\n                        dataRequestConfirm: __(\"Are you sure?\"),\n                        dataRequestMessage: __(\"Deleting :name...\", ['name' => $formRecordName])\n                    ) ?>\n                <?php endif ?>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <?= Ui::button(\n                        label: __(\"Cancel\"),\n                        href: Backend::url('system/mailtemplates/index/layouts'),\n                        class: 'btn-link p-0'\n                    ) ?>\n                </span>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Mail Templates\"),\n            href: Backend::url('system/mailtemplates/index/layouts'),\n            secondary: true\n        ) ?>\n    </p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/mailpartials/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\nname: \"Partial\"\nform: ~/modules/system/models/mailpartial/fields.yaml\nmodelClass: System\\Models\\MailPartial\ndefaultRedirect: system/mailtemplates/index/partials\n\ncreate:\n    redirect: system/mailpartials/update/:id\n    redirectClose: system/mailtemplates/index/partials\n\nupdate:\n    redirect: system/mailtemplates/index/partials\n    redirectClose: system/mailtemplates/index/partials\n"
  },
  {
    "path": "modules/system/controllers/mailpartials/create.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/mailtemplates/index/partials') ?>\"><?= __(\"Mail Partials\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons pt-4\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Create\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Create & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <?= Ui::button(\n                        label: __(\"Cancel\"),\n                        href: Backend::url('system/mailtemplates/index/partials'),\n                        class: 'btn-link p-0'\n                    ) ?>\n                </span>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Mail Templates\"),\n            href: Backend::url('system/mailtemplates/index/partials'),\n            secondary: true\n        ) ?>\n    </p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/mailpartials/update.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/mailtemplates/index/partials') ?>\"><?= __(\"Mail Partials\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row min-size\">\n            <div class=\"scoreboard\">\n                <div data-control=\"toolbar\">\n                    <div class=\"scoreboard-item title-value\">\n                        <h4><?= __(\"Partial\") ?></h4>\n                        <p><?= e($formModel->code) ?></p>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons pt-4\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Save\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestData: \"redirect: false\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Save & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::iconButton(\n                    label: __(\"Delete\"),\n                    icon: 'oc-icon-delete',\n                    handler: 'onDelete',\n                    danger: true,\n                    class: 'pull-right',\n                    dataRequestConfirm: __(\"Are you sure?\"),\n                    dataRequestMessage: __(\"Deleting :name...\", ['name' => $formRecordName])\n                ) ?>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <?= Ui::button(\n                        label: __(\"Cancel\"),\n                        href: Backend::url('system/mailtemplates/index/partials'),\n                        class: 'btn-link p-0'\n                    ) ?>\n                </span>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Mail Templates\"),\n            href: Backend::url('system/mailtemplates/index/partials'),\n            secondary: true\n        ) ?>\n    </p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/_list_layouts_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::button(\n        label: __(\"New Layout\"),\n        href: Backend::url('system/maillayouts/create'),\n        icon: 'oc-icon-plus',\n        primary: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/_list_partials_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::button(\n        label: __(\"New Partial\"),\n        href: Backend::url('system/mailpartials/create'),\n        icon: 'oc-icon-plus',\n        primary: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/_list_templates_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::button(\n        label: __(\"New Template\"),\n        href: Backend::url('system/mailtemplates/create'),\n        icon: 'oc-icon-plus',\n        primary: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\nname: \"Template\"\nform: ~/modules/system/models/mailtemplate/fields.yaml\nmodelClass: System\\Models\\MailTemplate\ndefaultRedirect: system/mailtemplates\n\ncreate:\n    redirect: system/mailtemplates/update/:id\n    redirectClose: system/mailtemplates\n\nupdate:\n    redirect: system/mailtemplates\n    redirectClose: system/mailtemplates\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/config_layouts_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: \"Mail Layouts\"\nlist: ~/modules/system/models/maillayout/columns.yaml\nmodelClass: System\\Models\\MailLayout\nrecordUrl: system/maillayouts/update/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 20\nshowSetup: true\n\ntoolbar:\n    buttons: list_layouts_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/config_partials_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: \"Mail Partials\"\nlist: ~/modules/system/models/mailpartial/columns.yaml\nmodelClass: System\\Models\\MailPartial\nrecordUrl: system/mailpartials/update/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 20\nshowSetup: true\n\ntoolbar:\n    buttons: list_partials_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/config_templates_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: \"Mail Templates\"\nlist: ~/modules/system/models/mailtemplate/columns.yaml\nmodelClass: System\\Models\\MailTemplate\nrecordUrl: system/mailtemplates/update/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 20\nshowSetup: true\n\ntoolbar:\n    buttons: list_templates_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/create.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/mailtemplates') ?>\"><?= __(\"Mail Templates\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons pt-4\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Create\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Create & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n                ) ?>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <?= Ui::button(\n                        label: __(\"Cancel\"),\n                        href: Backend::url('system/mailtemplates'),\n                        class: 'btn-link p-0'\n                    ) ?>\n                </span>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Mail Templates\"),\n            href: Backend::url('system/mailtemplates'),\n            secondary: true\n        ) ?>\n    </p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/index.php",
    "content": "<div class=\"control-tabs content-tabs tabs-flush\" data-control=\"tab\">\n    <ul class=\"nav nav-tabs\">\n        <li class=\"<?= $activeTab == 'templates' ? 'active' : '' ?>\">\n            <a href=\"#templates\" data-tab-url=\"<?= Backend::url('system/mailtemplates/index/templates') ?>\">\n                <?= __(\"Templates\") ?>\n            </a>\n        </li>\n        <li class=\"<?= $activeTab == 'layouts' ? 'active' : '' ?>\">\n            <a href=\"#layouts\" data-tab-url=\"<?= Backend::url('system/mailtemplates/index/layouts') ?>\">\n                <?= __(\"Layouts\") ?>\n            </a>\n        </li>\n        <li class=\"<?= $activeTab == 'partials' ? 'active' : '' ?>\">\n            <a href=\"#partials\" data-tab-url=\"<?= Backend::url('system/mailtemplates/index/partials') ?>\">\n                <?= __(\"Partials\") ?>\n            </a>\n        </li>\n    </ul>\n    <div class=\"tab-content\">\n        <div class=\"tab-pane <?= $activeTab == 'templates' ? 'active' : '' ?>\">\n            <?= $this->listRender('templates') ?>\n        </div>\n        <div class=\"tab-pane <?= $activeTab == 'layouts' ? 'active' : '' ?>\">\n            <?= $this->listRender('layouts') ?>\n        </div>\n        <div class=\"tab-pane <?= $activeTab == 'partials' ? 'active' : '' ?>\">\n            <?= $this->listRender('partials') ?>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/mailtemplates/update.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/mailtemplates') ?>\"><?= __(\"Mail Templates\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?= Form::open(['class'=>'layout']) ?>\n\n        <div class=\"layout-row min-size\">\n            <div class=\"scoreboard\">\n                <div data-control=\"toolbar\">\n                    <div class=\"scoreboard-item title-value\">\n                        <h4><?= __(\"Template\") ?></h4>\n                        <p><?= e($formModel->code) ?></p>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons pt-4\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Save\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestData: \"redirect: false\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Save & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n                ) ?>\n                <?= Ui::ajaxButton(\n                    label: __(\"Send Test\"),\n                    handler: 'onTest',\n                    class: 'btn-info',\n                    dataRequestConfirm: __(\"Send a test message to :email?\", ['email' => BackendAuth::getUser()->email]),\n                    dataRequestMessage: __(\"Sending...\")\n                ) ?>\n                <?= Ui::iconButton(\n                    label: __(\"Delete\"),\n                    icon: 'oc-icon-delete',\n                    handler: 'onDelete',\n                    danger: true,\n                    class: 'pull-right',\n                    dataRequestConfirm: __(\"Are you sure?\"),\n                    dataRequestMessage: __(\"Deleting :name...\", ['name' => $formRecordName])\n                ) ?>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <?= Ui::button(\n                        label: __(\"Cancel\"),\n                        href: Backend::url('system/mailtemplates'),\n                        class: 'btn-link p-0'\n                    ) ?>\n                </span>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Mail Templates\"),\n            href: Backend::url('system/mailtemplates'),\n            secondary: true\n        ) ?>\n    </p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/market/_details_scoreboard.php",
    "content": "<div class=\"scoreboard\">\n    <div data-control=\"toolbar\">\n        <div class=\"scoreboard-item title-value\">\n            <?php if ($product->isTheme): ?>\n                <h4><?= e(trans('system::lang.theme.label')) ?></h4>\n            <?php else: ?>\n                <h4><?= e(trans('system::lang.plugin.label')) ?></h4>\n            <?php endif ?>\n            <p class=\"oc-<?= $product->icon ?>\"><?= e(__($product->name)) ?></p>\n            <p class=\"description\">\n                <?= e($product->code) ?>\n            </p>\n        </div>\n        <div class=\"scoreboard-item title-value\">\n            <h4><?= e(trans('system::lang.updates.details_author')) ?></h4>\n            <p><?= e(__($product->author)) ?></p>\n            <p class=\"description\">\n                <?php if ($product->homepage): ?>\n                    <a href=\"<?= e($product->homepage) ?>\" target=\"_blank\">\n                        <?= e(trans('system::lang.updates.details_view_homepage')) ?>\n                    </a>\n                <?php else: ?>\n                    <a href=\"<?= e($product->isTheme ? 'https://octobercms.com/themes' : 'https://octobercms.com/plugins') ?>\" target=\"_blank\">\n                        <?= e(trans('system::lang.updates.details_view_homepage')) ?>\n                    </a>\n                <?php endif ?>\n            </p>\n        </div>\n        <?php if ($product->currentVersion): ?>\n            <div class=\"scoreboard-item title-value\">\n                <h4><?= e(trans('system::lang.updates.details_current_version')) ?></h4>\n                <p><?= e($product->currentVersion) ?></p>\n                <p class=\"description\">\n                    <a\n                        href=\"javascript:;\"\n                        data-control=\"popup\"\n                        data-handler=\"<?= $this->changelogWidget->getEventHandler('onLoadPluginChangelog') ?>\"\n                        data-request-data=\"code: '<?= e($product->code) ?>'\"\n                    >\n                        <?= e(__('View Changelog')) ?>\n                    </a>\n                </p>\n            </div>\n        <?php endif ?>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/market/_details_toolbar.php",
    "content": "<?php\n$installHandler = $product->isTheme\n    ? $this->updaterWidget->getEventHandler('onInstallThemeCheck')\n    : $this->updaterWidget->getEventHandler('onInstallPlugin');\n\n$removeHandler = $product->isTheme\n    ? $this->updaterWidget->getEventHandler('onRemoveTheme')\n    : $this->updaterWidget->getEventHandler('onRemovePlugin');\n?>\n<div class=\"text-sm-end text-center\">\n    <div class=\"action-button-wrapper\">\n        <?php if ($projectDetails): ?>\n            <?php if (!$product->installed()): ?>\n                <?php if ($product->canInstall): ?>\n                    <a\n                        href=\"javascript:;\"\n                        data-control=\"popup\"\n                        data-handler=\"<?= $installHandler ?>\"\n                        data-request-data=\"code: '<?= e($product->code) ?>'\"\n                        class=\"btn btn-success\">\n                        <i class=\"icon-plus\"></i>\n                        <?= __(\"Install\") ?>\n                    </a>\n                <?php elseif ($product->canResetData): ?>\n                    <a\n                        href=\"javascript:;\"\n                        data-request=\"onResetProductData\"\n                        data-request-confirm=\"<?= __(\"Are you sure?\") ?>\"\n                        data-request-data=\"code: '<?= e($product->code) ?>'\"\n                        class=\"btn btn-danger\">\n                        <i class=\"icon-bomb\"></i>\n                        <?= __(\"Remove Data\") ?>\n                    </a>\n                <?php else: ?>\n                    <a\n                        href=\"<?= e($product->homepage) ?>\"\n                        target=\"_blank\"\n                        rel=\"nofollow\"\n                        class=\"btn btn-success\">\n                        <i class=\"icon-external-link\"></i>\n                        <?= __(\"Buy Now\") ?>\n                    </a>\n                <?php endif ?>\n            <?php else: ?>\n                <a\n                    href=\"javascript:;\"\n                    data-control=\"popup\"\n                    data-handler=\"<?= $removeHandler ?>\"\n                    data-request-confirm=\"<?= __(\"Are you sure?\") ?>\"\n                    data-request-data=\"code: '<?= e($product->code) ?>'\"\n                    class=\"btn btn-danger\">\n                    <i class=\"icon-chain-broken\"></i>\n                    <?= __(\"Remove\") ?>\n                </a>\n                <?php /*\n                <a\n                    href=\"<?= Backend::url('system/updates/manage') ?>\"\n                    class=\"btn btn-default oc-icon-cog\">\n                    <?= __(\"Manage\") ?>\n                </a>\n                */ ?>\n            <?php endif ?>\n        <?php else: ?>\n            <a\n                href=\"javascript:;\"\n                class=\"btn btn-success disabled\">\n                <i class=\"icon-plus\"></i>\n                <?= __(\"Install\") ?>\n            </a>\n        <?php endif ?>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/market/_install_plugins.php",
    "content": "<div>\n\n    <!-- Search -->\n    <form\n        role=\"form\"\n        id=\"installPluginsForm\"\n        onsubmit=\"$.oc.installProcess.searchSubmit(this); return false\">\n        <input type=\"hidden\" name=\"type\" value=\"plugin\" />\n        <div class=\"product-search\">\n            <input\n                name=\"code\"\n                id=\"pluginSearchInput\"\n                class=\"product-search-input search-input-lg typeahead\"\n                placeholder=\"<?= __(\"search plugins to install...\") ?>\"\n                data-search-type=\"plugin\"\n                />\n            <i class=\"icon icon-search\"></i>\n            <i class=\"icon loading\" style=\"display: none\"></i>\n        </div>\n    </form>\n\n    <!-- Browse Products -->\n    <div class=\"browse-products-container\">\n        <div\n            id=\"browsePlugins\"\n            class=\"browse-products browse-plugins\"\n            data-handler=\"onBrowsePackages\"\n            data-view-type=\"plugin\"\n            data-view=\"plugin/product\"></div>\n\n        <div\n            id=\"browsePluginsPagination\"\n            data-view=\"plugin/pagination\"></div>\n    </div>\n\n</div>\n\n<script type=\"text/template\" data-partial=\"plugin/product\">\n    <a href=\"<?= Backend::url('system/market/plugin') ?>/{{slug}}\" class=\"product-card product-plugin\">\n        <div class=\"image\"><img src=\"{{image}}\" alt=\"\"></div>\n        <div class=\"details\">\n            <h4>{{name}}</h4>\n            <p class=\"description\">{{description}}</p>\n        </div>\n        <div class=\"bottom-controls\">\n            <div class=\"author-details\">\n                {{code}} by {{author}}\n            </div>\n        </div>\n    </a>\n</script>\n\n<script type=\"text/template\" data-partial=\"plugin/pagination\">\n    <?= $this->makePartial('pagination', ['pageUrl' => Backend::url('system/market/index/plugins').'?plugin_page' ]) ?>\n</script>\n"
  },
  {
    "path": "modules/system/controllers/market/_install_recommended.php",
    "content": "<!-- TODO -->\n"
  },
  {
    "path": "modules/system/controllers/market/_install_themes.php",
    "content": "<div>\n\n    <!-- Search -->\n    <form\n        role=\"form\"\n        id=\"installThemesForm\"\n        onsubmit=\"$.oc.installProcess.searchSubmit(this); return false\">\n        <input type=\"hidden\" name=\"type\" value=\"theme\" />\n        <div class=\"product-search\">\n            <input\n                name=\"code\"\n                id=\"themeSearchInput\"\n                class=\"product-search-input search-input-lg typeahead\"\n                placeholder=\"<?= __(\"search themes to install...\") ?>\"\n                data-search-type=\"theme\"\n                />\n            <i class=\"icon icon-search\"></i>\n            <i class=\"icon loading\" style=\"display: none\"></i>\n        </div>\n    </form>\n\n    <!-- Browse Products -->\n    <div class=\"browse-products-container\">\n        <div\n            id=\"browseThemes\"\n            class=\"browse-products browse-themes\"\n            data-handler=\"onBrowsePackages\"\n            data-view-type=\"theme\"\n            data-view=\"theme/product\"></div>\n\n        <div\n            id=\"browseThemesPagination\"\n            data-view=\"theme/pagination\"></div>\n    </div>\n\n</div>\n\n<script type=\"text/template\" data-partial=\"theme/product\">\n    <a href=\"<?= Backend::url('system/market/theme') ?>/{{slug}}\" class=\"product-card product-theme\">\n        <div class=\"image\"><img src=\"{{image}}\" alt=\"\"></div>\n        <div class=\"details\">\n            <h4>{{name}}</h4>\n        </div>\n        <div class=\"bottom-controls\">\n            <div class=\"author-details\">\n                {{code}} by {{author}}\n            </div>\n        </div>\n    </a>\n</script>\n\n<script type=\"text/template\" data-partial=\"theme/pagination\">\n    <?= $this->makePartial('pagination', ['pageUrl' => Backend::url('system/market/index/themes').'?theme_page' ]) ?>\n</script>\n"
  },
  {
    "path": "modules/system/controllers/market/_manage_project.php",
    "content": "<div>\n    <!-- Manage Project -->\n    <div class=\"browse-products-container\" style=\"max-width: 960px\">\n        <div class=\"loading-indicator-container p-t-lg\" id=\"manageProjectLoader\">\n            <div class=\"loading-indicator is-transparent\">\n                <span></span>\n                <div><?= e(trans('system::lang.market.content_loading')) ?></div>\n            </div>\n        </div>\n\n        <table class=\"table project-table m-b-0\">\n            <tbody\n                id=\"manageProject\"\n                class=\"manage-project\"\n                data-handler=\"onBrowseProject\"\n                data-view=\"project/product\"\n                style=\"display: none\">\n                <tr>\n                    <td>\n                        <div class=\"alert alert-info mb-0\">\n                            <p class=\"p-3 mb-0 text-center\">\n                                <?= __(\"Project has no plugins or themes. Visit the :link to add some.\", ['link' => '<a href=\"https://octobercms.com/plugins\" target=\"_blank\">'.__(\"October CMS Marketplace\").'</a>']) ?>\n                            </p>\n                        </div>\n                    </td>\n                </tr>\n            </tbody>\n        </table>\n    </div>\n</div>\n\n<script type=\"text/template\" data-partial=\"project/product\">\n    <tr>\n        <td style=\"width: 100px\">\n            <div class=\"image text-center\"><img src=\"{{image}}\" alt=\"\"></div>\n        </td>\n        <td>\n            <div class=\"details\">\n                <h4 class=\"mt-2\"><a href=\"{{detailUrl}}\">{{name}}</a> by {{author}}</h4>\n                <p class=\"description\">{{description}}</p>\n            </div>\n        </td>\n        <td class=\"controls\">\n            <div class=\"text-sm-end text-center\">\n                <div class=\"action-button-wrapper in-project\">\n                    {{^installed}}\n                        <a\n                            href=\"javascript:;\"\n                            data-control=\"popup\"\n                            data-handler=\"{{handler}}\"\n                            data-request-data=\"code: '{{code}}'\"\n                            class=\"btn btn-success\">\n                            <i class=\"icon-plus\"></i>\n                            <?= __(\"Install\") ?>\n                        </a>\n                    {{/installed}}\n                    {{#installed}}\n                        <a\n                            href=\"javascript:;\"\n                            data-control=\"popup\"\n                            data-handler=\"{{handler}}\"\n                            data-request-data=\"code: '{{code}}'\"\n                            class=\"btn btn-danger\">\n                            <i class=\"icon-delete\"></i>\n                            <?= __(\"Remove\") ?>\n                        </a>\n                    {{/installed}}\n                </div>\n            </div>\n        </td>\n    </tr>\n</script>\n"
  },
  {
    "path": "modules/system/controllers/market/_pagination.php",
    "content": "<nav>\n    <ul class=\"pagination\">\n        {{#pageCurrentGt1}}\n            <li class=\"page-item\">\n                <a\n                    href=\"<?= $pageUrl ?>=1\"\n                    class=\"page-link page-first\"\n                    data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                    title=\"<?= e(trans('backend::lang.list.first_page')) ?>\">\n                    <i class=\"icon-angle-double-left\"></i>\n                </a>\n            </li>\n        {{/pageCurrentGt1}}\n        {{^pageCurrentGt1}}\n            <li class=\"page-item\">\n                <span\n                    class=\"page-link page-first\"\n                    title=\"<?= e(trans('backend::lang.list.first_page')) ?>\">\n                    <i class=\"icon-angle-double-left\"></i>\n                </span>\n            </li>\n        {{/pageCurrentGt1}}\n\n        {{#pageCurrentGt1}}\n            <li class=\"page-item\">\n                <a\n                    href=\"<?= $pageUrl ?>={{pageCurrentMinus1}}\"\n                    class=\"page-link page-back\"\n                    data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                    title=\"<?= e(trans('backend::lang.list.prev_page')) ?>\">\n                    <i class=\"icon-angle-left\"></i>\n                </a>\n            </li>\n        {{/pageCurrentGt1}}\n        {{^pageCurrentGt1}}\n            <li class=\"page-item\">\n                <span\n                    class=\"page-link page-back\"\n                    title=\"<?= e(trans('backend::lang.list.prev_page')) ?>\">\n                    <i class=\"icon-angle-left\"></i>\n                </span>\n            </li>\n        {{/pageCurrentGt1}}\n\n        <li class=\"page-item active\">\n            <span class=\"page-link page-active\">\n                {{pageCurrent}}\n            </span>\n        </li>\n\n        {{#hasMorePages}}\n            <li class=\"page-item\">\n                <a\n                    href=\"<?= $pageUrl ?>={{pageCurrentPlus1}}\"\n                    class=\"page-link page-next\"\n                    data-load-indicator=\"<?= e(trans('backend::lang.list.loading')) ?>\"\n                    title=\"<?= e(trans('backend::lang.list.next_page')) ?>\">\n                    <i class=\"icon-angle-right\"></i>\n                </a>\n            </li>\n        {{/hasMorePages}}\n        {{^hasMorePages}}\n            <li class=\"page-item\">\n                <span\n                    class=\"page-link page-next\"\n                    title=\"<?= e(trans('backend::lang.list.next_page')) ?>\">\n                    <i class=\"icon-angle-right\"></i>\n                </span>\n            </li>\n        {{/hasMorePages}}\n    </ul>\n</nav>\n"
  },
  {
    "path": "modules/system/controllers/market/index.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/updates') ?>\"><?= __(\"Software Updates\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?php if ($warnings = $this->updaterWidget->renderWarnings()): ?>\n        <?= $warnings ?>\n    <?php endif ?>\n\n    <div class=\"control-tabs content-tabs\" data-control=\"tab\">\n\n\n        <?php if ($projectDetails): ?>\n            <div class=\"me-2\" style=\"position:absolute;top:0;right:0;z-index:2\">\n                <a\n                    href=\"javascript:;\"\n                    data-control=\"popup\"\n                    data-handler=\"<?= $this->updaterWidget->getEventHandler('onSyncProject') ?>\"\n                    class=\"btn btn-primary oc-icon-refresh\">\n                    <?= __(\"Sync Project\") ?>\n                </a>\n            </div>\n        <?php endif ?>\n\n        <ul class=\"nav nav-tabs\">\n            <?php if ($projectDetails): ?>\n                <li class=\"<?= $activeTab == 'project' ? 'active' : '' ?>\">\n                    <a\n                        href=\"#tabProject\"\n                        data-tab-url=\"<?= Backend::url('system/market/index/project') ?>\">\n                        <?= __(\"Project\") ?>\n                    </a>\n                </li>\n            <?php endif ?>\n            <?php /*\n            <li class=\"<?= $activeTab == 'recommended' ? 'active' : '' ?>\">\n                <a\n                    href=\"#tabRecommended\"\n                    data-tab-url=\"<?= Backend::url('system/market/index/recommended') ?>\">\n                    <?= __(\"Recommended\") ?>\n                </a>\n            </li>\n            */ ?>\n            <li class=\"<?= $activeTab == 'plugins' ? 'active' : '' ?>\">\n                <a\n                    href=\"#tabPlugins\"\n                    data-tab-url=\"<?= Backend::url('system/market/index/plugins') ?>\">\n                    <?= __(\"Plugins\") ?>\n                </a>\n            </li>\n            <li class=\"<?= $activeTab == 'themes' ? 'active' : '' ?>\">\n                <a\n                    href=\"#tabThemes\"\n                    data-tab-url=\"<?= Backend::url('system/market/index/themes') ?>\">\n                    <?= e(trans('system::lang.updates.themes')) ?>\n                </a>\n            </li>\n        </ul>\n        <div class=\"tab-content\">\n            <?php if ($projectDetails): ?>\n                <div class=\"tab-pane pane-bordered <?= $activeTab == 'project' ? 'active' : '' ?>\">\n                    <div class=\"padded-container\">\n                        <?= $this->makePartial('manage_project') ?>\n                    </div>\n                </div>\n            <?php endif ?>\n            <?php /*\n            <div class=\"tab-pane pane-bordered <?= $activeTab == 'recommended' ? 'active' : '' ?>\">\n                <div class=\"padded-container\">\n                    <?= $this->makePartial('install_recommended') ?>\n                </div>\n            </div>\n            */ ?>\n            <div class=\"tab-pane pane-bordered <?= $activeTab == 'plugins' ? 'active' : '' ?>\">\n                <div class=\"padded-container\">\n                    <?= $this->makePartial('install_plugins') ?>\n                </div>\n            </div>\n            <div class=\"tab-pane pane-bordered <?= $activeTab == 'themes' ? 'active' : '' ?>\">\n                <div class=\"padded-container\">\n                    <?= $this->makePartial('install_themes') ?>\n                </div>\n            </div>\n        </div>\n    </div>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e($this->fatalError) ?></p>\n    <p><a href=\"<?= Backend::url('system/updates') ?>\" class=\"btn btn-default\"><?= __(\"Return to System Settings\") ?></a></p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/market/plugin.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/updates') ?>\"><?= e(__('Software Updates')) ?></a></li>\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/market') ?>\"><?= e(__('Marketplace')) ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?php if ($warnings = $this->updaterWidget->renderWarnings()): ?>\n        <?= $warnings ?>\n    <?php endif ?>\n\n    <div class=\"row\">\n        <div class=\"col-sm-9\">\n            <?= $this->makePartial('details_scoreboard') ?>\n        </div>\n        <div class=\"col-sm-3\">\n            <?= $this->makePartial('details_toolbar') ?>\n        </div>\n    </div>\n\n    <div class=\"control-tabs primary-tabs\" data-control=\"tab\">\n        <ul class=\"nav nav-tabs\">\n            <li class=\"<?= $activeTab == 'readme' ? 'active' : '' ?>\">\n                <a\n                    href=\"#readme\"\n                    data-tab-url=\"<?= Backend::url('system/market/plugin/'.$urlCode.'/readme') ?>\">\n                    <?= e(__('Documentation')) ?>\n                </a>\n            </li>\n            <?php if ($product->upgradeHtml): ?>\n                <li class=\"<?= $activeTab == 'upgrades' ? 'active' : '' ?>\">\n                    <a\n                        href=\"#upgrades\"\n                        data-tab-url=\"<?= Backend::url('system/market/plugin/'.$urlCode.'/upgrades') ?>\">\n                        <?= e(__('Upgrade Guide')) ?>\n                    </a>\n                </li>\n            <?php endif ?>\n            <?php if ($product->licenseHtml): ?>\n                <li class=\"<?= $activeTab == 'license' ? 'active' : '' ?>\">\n                    <a\n                        href=\"#license\"\n                        data-tab-url=\"<?= Backend::url('system/market/plugin/'.$urlCode.'/license') ?>\">\n                        <?= e(__('License')) ?>\n                    </a>\n                </li>\n            <?php endif ?>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane <?= $activeTab == 'readme' ? 'active' : '' ?>\">\n                <div class=\"plugin-details-content\">\n                    <?php if ($product->contentHtml): ?>\n                        <?= $product->contentHtml ?>\n                    <?php else: ?>\n                        <?= Ui::callout(function() { ?>\n                            <p><?= e(__('There is no documentation provided.')) ?></p>\n                        <?php }) ?>\n                    <?php endif ?>\n                </div>\n            </div>\n            <?php if ($product->upgradeHtml): ?>\n                <div class=\"tab-pane <?= $activeTab == 'upgrades' ? 'active' : '' ?>\">\n                    <div class=\"plugin-details-content\">\n                        <?= $product->upgradeHtml ?>\n                    </div>\n                </div>\n            <?php endif ?>\n            <?php if ($product->licenseHtml): ?>\n                <div class=\"tab-pane <?= $activeTab == 'license' ? 'active' : '' ?>\">\n                    <div class=\"plugin-details-content\">\n                        <?= $product->licenseHtml ?>\n                    </div>\n                </div>\n            <?php endif ?>\n        </div>\n    </div>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e($this->fatalError) ?></p>\n    <p><a href=\"<?= Backend::url('system/updates') ?>\" class=\"btn btn-default\"><?= __('Return to System Settings') ?></a></p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/market/theme.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/updates') ?>\"><?= e(__('Software Updates')) ?></a></li>\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/market') ?>\"><?= e(__('Marketplace')) ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <?php if ($warnings = $this->updaterWidget->renderWarnings()): ?>\n        <?= $warnings ?>\n    <?php endif ?>\n\n    <div class=\"row\">\n        <div class=\"col-sm-9\">\n            <?= $this->makePartial('details_scoreboard') ?>\n        </div>\n        <div class=\"col-sm-3\">\n            <?= $this->makePartial('details_toolbar') ?>\n        </div>\n    </div>\n\n    <div class=\"control-tabs primary-tabs\" data-control=\"tab\">\n        <ul class=\"nav nav-tabs\">\n            <li class=\"<?= $activeTab == 'readme' ? 'active' : '' ?>\">\n                <a\n                    href=\"#readme\"\n                    data-tab-url=\"<?= Backend::url('system/market/theme/'.$urlCode.'/readme') ?>\">\n                    <?= e(__('Documentation')) ?>\n                </a>\n            </li>\n            <?php if ($product->upgradeHtml): ?>\n                <li class=\"<?= $activeTab == 'upgrades' ? 'active' : '' ?>\">\n                    <a\n                        href=\"#upgrades\"\n                        data-tab-url=\"<?= Backend::url('system/market/theme/'.$urlCode.'/upgrades') ?>\">\n                        <?= e(__('Upgrade Guide')) ?>\n                    </a>\n                </li>\n            <?php endif ?>\n            <?php if ($product->licenseHtml): ?>\n                <li class=\"<?= $activeTab == 'license' ? 'active' : '' ?>\">\n                    <a\n                        href=\"#license\"\n                        data-tab-url=\"<?= Backend::url('system/market/theme/'.$urlCode.'/license') ?>\">\n                        <?= e(__('License')) ?>\n                    </a>\n                </li>\n            <?php endif ?>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane <?= $activeTab == 'readme' ? 'active' : '' ?>\">\n                <div class=\"plugin-details-content\">\n                    <?php if ($product->contentHtml): ?>\n                        <?= $product->contentHtml ?>\n                    <?php else: ?>\n                        <?= Ui::callout(function() { ?>\n                            <p><?= e(__('There is no documentation provided.')) ?></p>\n                        <?php }) ?>\n                    <?php endif ?>\n                </div>\n            </div>\n            <?php if ($product->upgradeHtml): ?>\n                <div class=\"tab-pane <?= $activeTab == 'upgrades' ? 'active' : '' ?>\">\n                    <div class=\"plugin-details-content\">\n                        <?= $product->upgradeHtml ?>\n                    </div>\n                </div>\n            <?php endif ?>\n            <?php if ($product->licenseHtml): ?>\n                <div class=\"tab-pane <?= $activeTab == 'license' ? 'active' : '' ?>\">\n                    <div class=\"plugin-details-content\">\n                        <?= $product->licenseHtml ?>\n                    </div>\n                </div>\n            <?php endif ?>\n        </div>\n    </div>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e($this->fatalError) ?></p>\n    <p><a href=\"<?= Backend::url('system/updates') ?>\" class=\"btn btn-default\"><?= __('Return to System Settings') ?></a></p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/requestlogs/_hint.php",
    "content": "\n<p>\n    <?= __(\"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\") ?>\n</p>\n"
  },
  {
    "path": "modules/system/controllers/requestlogs/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::ajaxButton(\n        label: __(\"Refresh\"),\n        handler: 'onRefresh',\n        icon: 'oc-icon-refresh',\n        primary: true,\n        dataRequestMessage: __(\"Updating...\")\n    ) ?>\n    <?= Ui::ajaxButton(\n        label: __(\"Empty Request Log\"),\n        handler: 'onEmptyLog',\n        icon: 'oc-icon-eraser',\n        secondary: true,\n        dataRequestConfirm: __(\"Are you sure?\"),\n        dataRequestMessage: __(\"Emptying log...\")\n    ) ?>\n\n    <div class=\"toolbar-divider\"></div>\n\n    <?= Ui::ajaxButton(\n        label: __(\"Delete Selected\"),\n        handler: 'onDelete',\n        icon: 'oc-icon-delete',\n        secondary: true,\n        dataListCheckedTrigger: true,\n        dataListCheckedRequest: true,\n        dataStripeLoadIndicator: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/requestlogs/_referer_field.php",
    "content": "<?php if ($formModel->referer && count($formModel->referer) > 0): ?>\n    <div class=\"form-control control-simplelist with-icons\">\n        <ul>\n            <?php foreach ((array) $formModel->referer as $referer): ?>\n                <li class=\"oc-icon-file\"><?= e($referer) ?></li>\n            <?php endforeach ?>\n        </ul>\n    </div>\n<?php else: ?>\n    <div class=\"form-control\"><em><?= __(\"There were no detected referrers to this URL.\") ?></em></div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/requestlogs/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\n# Record name\nname: Event Log\n\n# Model Form Field configuration\nform: ~/modules/system/models/requestlog/fields.yaml\n\n# Model Class name\nmodelClass: System\\Models\\RequestLog\n\n# Default redirect location\ndefaultRedirect: system/requestlogs\n\n# Preview page\npreview:\n    title: Request\n"
  },
  {
    "path": "modules/system/controllers/requestlogs/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: \"Request Log\"\nlist: ~/modules/system/models/requestlog/columns.yaml\nmodelClass: System\\Models\\RequestLog\nrecordUrl: system/requestlogs/preview/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 30\nshowSetup: true\nshowCheckboxes: true\ndefaultSort:\n    column: count\n    direction: desc\n\ntoolbar:\n    buttons: list_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt"
  },
  {
    "path": "modules/system/controllers/requestlogs/index.php",
    "content": "<div class=\"padded-container container-flush\">\n    <?= $this->makeHintPartial('system_requestlogs_hint', 'hint') ?>\n</div>\n\n<?= $this->listRender() ?>\n"
  },
  {
    "path": "modules/system/controllers/requestlogs/preview.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/requestlogs') ?>\"><?= __(\"Request Log\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?php if (!$this->fatalError): ?>\n\n    <div class=\"scoreboard\">\n        <div data-control=\"toolbar\">\n            <div class=\"scoreboard-item title-value\">\n                <h4><?= __(\"Log ID\") ?></h4>\n                <p>#<?= $formModel->id ?></p>\n            </div>\n            <div class=\"scoreboard-item title-value\">\n                <h4><?= __(\"Status\") ?></h4>\n                <p><?= $formModel->status_code ?></p>\n            </div>\n            <div class=\"scoreboard-item title-value\">\n                <h4><?= __(\"Counter\") ?></h4>\n                <p><?= $formModel->count ?></p>\n            </div>\n            <div class=\"scoreboard-item title-value\">\n                <h4><?= __(\"Referers\") ?></h4>\n                <p><?= $formModel->referer ? count($formModel->referer) : 0 ?></p>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"layout-item stretch layout-column\">\n        <?= $this->formRenderPreview() ?>\n    </div>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n\n<?php endif ?>\n\n<p>\n    <a href=\"<?= Backend::url('system/requestlogs') ?>\" class=\"btn btn-default oc-icon-chevron-left\">\n        <?= e(trans('system::lang.request_log.return_link')) ?>\n    </a>\n</p>\n"
  },
  {
    "path": "modules/system/controllers/settings/index.php",
    "content": "<div class=\"layout\">\n    <div class=\"layout-cell oc-logo-transparent\"></div>\n</div>\n\n<script>\n    $(document).ready(function() {\n        var $search = $('#settings-search-input'),\n            focusSearch = function() {\n                setTimeout(function() { $search.focus().select() }, 10);\n            }\n\n        focusSearch();\n    });\n</script>\n"
  },
  {
    "path": "modules/system/controllers/settings/update.php",
    "content": "<?php if (!$this->fatalError): ?>\n    <?= Form::open(['class' => 'layout design-settings']) ?>\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Save\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestData: \"redirect: false\",\n                    dataRequestMessage: __(\"Saving...\")\n                ) ?>\n\n                <?= Ui::ajaxButton(\n                    label: __(\"Save & Close\"),\n                    handler: 'onSave',\n                    secondary: true,\n                    hotkey: ['ctrl+enter', 'cmd+enter'],\n                    dataRequestData: \"close: true\",\n                    dataRequestMessage: __(\"Saving...\")\n                ) ?>\n\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <?= Ui::button(\n                        label: __(\"Cancel\"),\n                        href: Backend::url('system/settings'),\n                        class: 'btn-link p-0'\n                    ) ?>\n                </span>\n\n                <span class=\"pull-right btn-text\">\n                    <?= Ui::ajaxButton(\n                        label: __(\"Reset to Default\"),\n                        handler: 'onResetDefault',\n                        href: 'javascript:;',\n                        class: 'btn-link p-0',\n                        dataRequestData: \"redirect: false\",\n                        dataRequestConfirm: __(\"Are you sure?\"),\n                        dataRequestMessage: __(\"Resetting...\")\n                    ) ?>\n                </span>\n            </div>\n        </div>\n    <?= Form::close() ?>\n\n<?php else: ?>\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to System Settings\"),\n            href: $parentLink,\n            secondary: true\n        ) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/sitegroups/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <a\n        href=\"<?= Backend::url('system/sitegroups/create') ?>\"\n        class=\"btn btn-primary oc-icon-plus\">\n        <?= __(\"Create Group\") ?>\n    </a>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/sitegroups/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\nname: Site Groups\nform: ~/modules/system/models/sitegroup/fields.yaml\nmodelClass: System\\Models\\SiteGroup\ndefaultRedirect: system/sitegroups\n\ndesign:\n    displayMode: basic\n    size: 950\n\ncreate:\n    redirect: system/sitegroups/update/:id\n    redirectClose: system/sitegroups\n\nupdate:\n    redirect: system/sitegroups\n    redirectClose: system/sitegroups\n"
  },
  {
    "path": "modules/system/controllers/sitegroups/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: Site Groups\nlist: ~/modules/system/models/sitegroup/columns.yaml\nmodelClass: System\\Models\\SiteGroup\nrecordUrl: system/sitegroups/update/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 20\nshowSetup: true\n\ntoolbar:\n    buttons: list_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n"
  },
  {
    "path": "modules/system/controllers/sitegroups/create.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/sites') ?>\"><?= __(\"Sites\") ?></a></li>\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/sitegroups') ?>\"><?= __(\"Site Groups\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= $this->formRenderDesign() ?>\n"
  },
  {
    "path": "modules/system/controllers/sitegroups/index.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/settings') ?>\"><?= __(\"Settings\") ?></a></li>\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/sites') ?>\"><?= __(\"Sites\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= $this->listRender() ?>\n"
  },
  {
    "path": "modules/system/controllers/sitegroups/update.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/sites') ?>\"><?= __(\"Sites\") ?></a></li>\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/sitegroups') ?>\"><?= __(\"Site Groups\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= $this->formRenderDesign() ?>\n"
  },
  {
    "path": "modules/system/controllers/sites/_form_buttons.php",
    "content": "<div>\n    <?php if (!$this->formGetModel()->exists): ?>\n        <?= Ui::ajaxButton(\n            label: __(\"Create\"),\n            handler: 'onSave',\n            primary: true,\n            hotkey: ['ctrl+s', 'cmd+s'],\n            dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n        ) ?>\n\n        <?= Ui::ajaxButton(\n            label: __(\"Create & Close\"),\n            handler: 'onSave',\n            secondary: true,\n            hotkey: ['ctrl+enter', 'cmd+enter'],\n            dataBrowserRedirectBack: true,\n            dataRequestData: \"close: true\",\n            dataRequestMessage: __(\"Creating :name...\", ['name' => $formRecordName])\n        ) ?>\n    <?php else: ?>\n        <?= Ui::ajaxButton(\n            label: __(\"Save\"),\n            handler: 'onSave',\n            primary: true,\n            hotkey: ['ctrl+s', 'cmd+s'],\n            dataRequestData: \"redirect: false\",\n            dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n        ) ?>\n\n        <?= Ui::ajaxButton(\n            label: __(\"Save & Close\"),\n            handler: 'onSave',\n            secondary: true,\n            hotkey: ['ctrl+enter', 'cmd+enter'],\n            dataBrowserRedirectBack: true,\n            dataRequestData: \"close: true\",\n            dataRequestMessage: __(\"Saving :name...\", ['name' => $formRecordName])\n        ) ?>\n\n        <?php if (!$formModel->is_primary): ?>\n            <?= Ui::iconButton(\n                label: __(\"Delete\"),\n                icon: 'icon-delete',\n                handler: 'onDelete',\n                danger: true,\n                hotkey: ['shift+option+d'],\n                class: 'pull-right',\n                dataBrowserRedirectBack: true,\n                dataRequestConfirm: __(\"Delete this record?\"),\n                dataRequestMessage: __(\"Deleting :name...\", ['name' => $formRecordName])\n            ) ?>\n        <?php endif ?>\n    <?php endif ?>\n\n    <span class=\"btn-text\">\n        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n        <?= Ui::ajaxButton(\n            label: __(\"Cancel\"),\n            handler: 'onCancel',\n            hotkey: ['shift+option+c'],\n            href: 'javascript:;',\n            class: 'btn-link p-0',\n            dataBrowserRedirectBack: true,\n            dataRequestData: \"close: true\",\n            dataRequestMessage: __(\"Loading...\")\n        ) ?>\n    </span>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/sites/_list_container.php",
    "content": "<?php if ($toolbar): ?>\n    <?= $toolbar->render() ?>\n<?php endif ?>\n\n<?php if (!$useGroups): ?>\n    <div class=\"list-widget-container\">\n        <?php if ($filter): ?>\n            <?= $filter->render() ?>\n        <?php endif ?>\n\n        <?= $list->render() ?>\n    </div>\n<?php else: ?>\n    <div class=\"ps-lg-4\">\n        <div class=\"list-with-sidebar\">\n            <div class=\"sidebar-area\" id=\"<?= $this->getId('listTabs') ?>\">\n                <?= $this->makePartial('list_tabs') ?>\n            </div>\n            <div class=\"sidebar-list\">\n                <div class=\"layout-row\">\n                    <div class=\"list-widget-container\">\n                        <?php if ($filter): ?>\n                            <?= $filter->render() ?>\n                        <?php endif ?>\n\n                        <?= $list->render() ?>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/controllers/sites/_list_tabs.php",
    "content": "<div class=\"control-tabs pill-tabs is-vertical\">\n    <ul class=\"nav nav-tabs\" data-disposable=\"\" role=\"tablist\">\n        <li class=\"<?= !get('group') ? 'active' : '' ?>\">\n            <a href=\"javascript:;\" data-request=\"onRefreshList\" data-request-query=\"group: null\">\n                <span class=\"badge-colorpicker\"></span>\n                <span class=\"title\">\n                    <span><?= __(\"All Sites\") ?></span>\n                </span>\n            </a>\n        </li>\n        <?php foreach ($groups as $group): ?>\n            <li class=\"<?= get('group') == $group->id ? 'active' : '' ?>\">\n                <a href=\"javascript:;\" data-request=\"onRefreshList\" data-request-query=\"group: '<?= $group->id ?>'\">\n                    <span class=\"badge-colorpicker\"></span>\n                    <span class=\"title\">\n                        <span><?= e($group->name) ?></span>\n                    </span>\n                </a>\n            </li>\n        <?php endforeach ?>\n    </ul>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/sites/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?= Ui::button(\n        label: __(\"Create Site\"),\n        href: Backend::url('system/sites/create'),\n        icon: 'oc-icon-plus',\n        primary: true\n    ) ?>\n    <?= Ui::button(\n        label: __(\"Manage Site Groups\"),\n        href: Backend::url('system/sitegroups'),\n        icon: 'oc-icon-clone',\n        secondary: true\n    ) ?>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/sites/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\nname: Site\nform: ~/modules/system/models/sitedefinition/fields.yaml\nmodelClass: System\\Models\\SiteDefinition\ndefaultRedirect: system/sites\n\ndesign:\n    displayMode: basic\n    size: 950\n\ncreate:\n    redirect: system/sites/update/:id\n    redirectClose: system/sites\n\nupdate:\n    redirect: system/sites\n    redirectClose: system/sites\n"
  },
  {
    "path": "modules/system/controllers/sites/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\ntitle: Sites\nlist: ~/modules/system/models/sitedefinition/columns.yaml\nmodelClass: System\\Models\\SiteDefinition\nrecordUrl: system/sites/update/:id\nnoRecordsMessage: backend::lang.list.no_records\nrecordsPerPage: 20\nshowSetup: true\nexpandLastColumn: true\n\ntoolbar:\n    buttons: list_toolbar\n    search:\n        prompt: backend::lang.list.search_prompt\n\nstructure:\n    showTree: false\n    showReorder: true\n    maxDepth: 1\n"
  },
  {
    "path": "modules/system/controllers/sites/create.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/sites') ?>\"><?= __(\"Sites\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= $this->formRenderDesign() ?>\n"
  },
  {
    "path": "modules/system/controllers/sites/index.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/settings') ?>\"><?= __(\"Settings\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= $this->listRender() ?>\n"
  },
  {
    "path": "modules/system/controllers/sites/update.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/sites') ?>\"><?= __(\"Sites\") ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= $this->formRenderDesign() ?>\n"
  },
  {
    "path": "modules/system/controllers/updates/HasComposerEditor.php",
    "content": "<?php namespace System\\Controllers\\Updates;\n\nuse File;\nuse Flash;\nuse ValidationException;\n\n/**\n * HasComposerEditor contains logic for editing the composer.json file\n */\ntrait HasComposerEditor\n{\n    /**\n     * manage_onLoadComposerForm displays the composer.json editor popup\n     */\n    public function manage_onLoadComposerForm()\n    {\n        $composerFile = base_path('composer.json');\n\n        $widget = $this->makeComposerFormWidget();\n        $widget->getField('content')->value(File::get($composerFile));\n\n        $this->vars['widget'] = $widget;\n\n        return $this->makePartial('composer_form');\n    }\n\n    /**\n     * manage_onSaveComposer validates and saves the composer.json file\n     */\n    public function manage_onSaveComposer()\n    {\n        $content = post('Composer')['content'] ?? '';\n\n        try {\n            json_decode($content, flags: JSON_THROW_ON_ERROR);\n        }\n        catch (\\JsonException $ex) {\n            throw new ValidationException(['content' => __(\"Invalid JSON: :error\", [\n                'error' => $ex->getMessage()\n            ])]);\n        }\n\n        File::put(base_path('composer.json'), $content);\n\n        Flash::success(__(\"Composer file updated successfully.\"));\n    }\n\n    /**\n     * makeComposerFormWidget creates a form widget for the composer editor\n     */\n    protected function makeComposerFormWidget()\n    {\n        $config = $this->makeConfig([\n            'alias' => 'formComposerEditor',\n            'arrayName' => 'Composer',\n            'model' => new \\Model,\n            'fields' => [\n                'content' => [\n                    'type' => 'codeeditor',\n                    'language' => 'json',\n                    'size' => 'giant',\n                    'stretch' => true,\n                ]\n            ]\n        ]);\n\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $config);\n        $widget->bindToController();\n\n        return $widget;\n    }\n}\n"
  },
  {
    "path": "modules/system/controllers/updates/_column_code.php",
    "content": "<?php\n    $icon = null;\n\n    if ($record->context_disabled) {\n        $icon = 'eye-slash';\n    }\n    elseif ($record->disabledBySystem) {\n        $icon = 'exclamation';\n    }\n    elseif ($record->orphaned) {\n        $icon = 'question';\n    }\n?>\n<span class=\"<?= $icon ? 'oc-icon-'.$icon : '' ?>\">\n    <?= $value ?>\n</span>\n"
  },
  {
    "path": "modules/system/controllers/updates/_column_is_enabled.php",
    "content": "<?php\n    $action = $record->context_disabled ? 'enable' : 'disable';\n?>\n<div class=\"form-check form-switch nolink\">\n    <input\n        class=\"form-check-input\"\n        data-request=\"onBulkAction\"\n        data-request-data=\"action: '<?= $action ?>', checked: [<?= $record->id ?>]\"\n        data-request-update=\"list_manage_toolbar: '#plugin-toolbar'\"\n        type=\"checkbox\"\n        name=\"disable_<?= $record->id ?>\"\n        value=\"<?= !$record->context_disabled ?>\"\n        <?php if (!$record->context_disabled): ?>checked<?php endif ?>\n        data-stripe-load-indicator\n    >\n</div>\n"
  },
  {
    "path": "modules/system/controllers/updates/_column_latest.php",
    "content": "<span data-plugin-latest-code=\"<?= e($record->code) ?>\" class=\"oc-loading\"></span>\n"
  },
  {
    "path": "modules/system/controllers/updates/_column_version.php",
    "content": "<span data-plugin-current-code=\"<?= e($record->code) ?>\" data-plugin-current-version=\"<?= e($value) ?>\"><?= e($value) ?></span>\n"
  },
  {
    "path": "modules/system/controllers/updates/_composer_form.php",
    "content": "<?= Form::ajax('onSaveComposer', [\n    'id' => 'composerEditorForm',\n    'data-popup-load-indicator' => true,\n    'data-popup-size' => 'adaptive',\n]) ?>\n\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __('Edit Composer') ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n\n    <div class=\"modal-body pb-3\">\n        <?= $widget->render() ?>\n    </div>\n    <div class=\"modal-footer\">\n        <?= Ui::ajaxButton(\n            label: __(\"Save\"),\n            handler: 'onSaveComposer',\n            primary: true,\n            dataPopupLoadIndicator: true\n        ) ?>\n        <?= Ui::button(\n            label: __(\"Cancel\"),\n            secondary: true,\n            dataDismiss: 'popup'\n        ) ?>\n    </div>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/system/controllers/updates/_list_manage_toolbar.php",
    "content": "<div id=\"plugin-toolbar\">\n    <div data-control=\"toolbar\">\n        <?= Ui::button(\n            label: __(\"Return to Software Updates\"),\n            href: Backend::url('system/updates'),\n            icon: 'oc-icon-chevron-left',\n            secondary: true\n        ) ?>\n\n        <?php Ui::dropdownButton(\n            label: __(\"Select Action...\"),\n            secondary: true,\n            dataListCheckedTrigger: true\n        )->slot() ?>\n\n            <?= Ui::dropdownItem(\n                label: __(\"Disable Plugins\"),\n                icon: 'icon-ban',\n                handler: 'onBulkAction',\n                dataRequestData: \"action: 'disable'\",\n                dataListCheckedRequest: true,\n                dataRequestConfirm: __(\"Are you sure you want to :action these plugins?\", ['action' => __(\"disable\")]),\n                dataStripeLoadIndicator: true\n            ) ?>\n\n            <?= Ui::dropdownItem(\n                label: __(\"Enable Plugins\"),\n                icon: 'icon-check',\n                handler: 'onBulkAction',\n                dataRequestData: \"action: 'enable'\",\n                dataListCheckedRequest: true,\n                dataRequestConfirm: __(\"Are you sure you want to :action these plugins?\", ['action' => __(\"enable\")]),\n                dataStripeLoadIndicator: true\n            ) ?>\n\n            <?php if ($canUpdate): ?>\n                <?= Ui::dropdownDivider() ?>\n\n                <?= Ui::dropdownItem(\n                    label: __(\"Reset Plugin Data\"),\n                    icon: 'icon-bomb',\n                    handler: 'onBulkAction',\n                    dataRequestData: \"action: 'refresh'\",\n                    dataListCheckedRequest: true,\n                    dataRequestConfirm: __(\"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\"),\n                    dataStripeLoadIndicator: true\n                ) ?>\n            <?php endif ?>\n\n        <?php Ui::end() ?>\n\n        <?= Ui::ajaxButton(\n            label: __(\"Clear Cache\"),\n            handler: 'onClearCache',\n            icon: 'oc-icon-refresh',\n            secondary: true,\n            dataRequestConfirm: __(\"Are you sure you want to clear the application cache?\"),\n            dataStripeLoadIndicator: true\n        ) ?>\n\n        <?= Ui::popupButton(\n            label: __(\"Edit Composer\"),\n            handler: 'onLoadComposerForm',\n            icon: 'icon-code',\n            secondary: true\n        ) ?>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/updates/_list_toolbar.php",
    "content": "<div data-control=\"toolbar\">\n    <?php if (!$projectDetails): ?>\n        <?= Ui::popupButton(\n            label: __(\"Register Software\"),\n            handler: 'onLoadProjectForm',\n            icon: 'icon-bolt',\n            primary: true\n        ) ?>\n    <?php else: ?>\n        <?= Ui::popupButton(\n            label: __(\"Check For Updates\"),\n            handler: $this->updaterWidget->getEventHandler('onLoadUpdates'),\n            icon: 'icon-refresh',\n            primary: true\n        ) ?>\n    <?php endif ?>\n        <?= Ui::button(\n            label: __(\"Install Packages\"),\n            href: Backend::url('system/market'),\n            icon: 'icon-plus',\n            secondary: true\n        ) ?>\n    <?php if (System::hasModule('Cms')): ?>\n        <?= Ui::button(\n            label: __(\"Manage Themes\"),\n            href: Backend::url('cms/themes'),\n            icon: 'icon-image',\n            secondary: true\n        ) ?>\n    <?php endif ?>\n        <?= Ui::button(\n            label: __(\"Manage Plugins\"),\n            href: Backend::url('system/updates/manage'),\n            icon: 'icon-puzzle-piece',\n            secondary: true\n        ) ?>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/updates/_project_form.php",
    "content": "<?= Form::open([\n    'id' => 'projectForm',\n    'class' => 'onboarding-modal',\n    'data-popup-size' => 500\n]) ?>\n    <div class=\"modal-header\">\n        <div class=\"onboarding-logo oc-logo-white mb-3\"></div>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n    <div class=\"modal-body\">\n        <div class=\"px-3 pt-3\">\n            <h4 class=\"mb-4\"><?= __(\"Register Software\") ?></h4>\n            <p class=\"pb-2\">A project with a license key is required if you want to install or update modules, plugins and themes via the October CMS gateway.</p>\n\n            <?php if ($this->fatalError): ?>\n                <p class=\"flash-message static error\"><?= e($fatalError) ?></p>\n            <?php endif ?>\n\n            <div class=\"form-group\">\n                <span class=\"form-text pull-right\">\n                    <a target=\"_blank\" href=\"https://octobercms.com/help/site/projects#project-id\"><?= __('How to find your License Key') ?></a>\n                </span>\n                <label class=\"form-label\" for=\"projectId\"><?= __('License Key') ?></label>\n                <input\n                    name=\"project_id\"\n                    type=\"text\"\n                    class=\"form-control form-control-lg\"\n                    id=\"projectId\"\n                    value=\"<?= e(post('project_id')) ?>\"\n                    autocomplete=\"off\" />\n            </div>\n        </div>\n    </div>\n    <div class=\"modal-footer\">\n        <div class=\"px-3 pb-3\">\n            <?= Ui::ajaxButton(\n                label: __(\"Attach to Project\"),\n                handler: 'onAttachProject',\n                primary: true,\n                class: 'btn-lg me-2',\n                dataPopupLoadIndicator: true\n            ) ?>\n            <?= Ui::button(\n                label: __(\"Cancel\"),\n                secondary: true,\n                class: 'btn-lg',\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n    </div>\n    <script>\n        setTimeout(\n            function(){ $('#projectId').select() },\n            310\n        )\n    </script>\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/system/controllers/updates/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\n# Manage Updates\ntitle: Manage Updates\n\nlist: ~/modules/system/models/pluginversion/columns.yaml\n\nmodelClass: System\\Models\\PluginVersion\n\n# There are no records in this view\nnoRecordsMessage: backend::lang.list.no_records\n\nrecordUrl: system/market/plugin/:slug\n\ntoolbar:\n    buttons: list_toolbar\n"
  },
  {
    "path": "modules/system/controllers/updates/config_manage_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\n# Manage Updates\ntitle: Manage Plugins\n\nlist: ~/modules/system/models/pluginversion/columns_manage.yaml\n\nmodelClass: System\\Models\\PluginVersion\n\n# There are no records in this view\nnoRecordsMessage: backend::lang.list.no_records\n\nshowSetup: false\nshowCheckboxes: true\ndefaultSort:\n    column: code\n    direction: asc\n\nrecordOnClick: $.oc.listToggleChecked(this)\n\ntoolbar:\n    buttons: list_manage_toolbar\n"
  },
  {
    "path": "modules/system/controllers/updates/index.php",
    "content": "<div data-control=\"updatelist\">\n    <div class=\"scoreboard\">\n        <div data-control=\"toolbar\">\n            <?php if ($projectDetails): ?>\n                <div class=\"scoreboard-item title-value\">\n                    <h4><?= e(__('Project')) ?></h4>\n                    <p class=\"oc-icon-chain\"><?= e($projectDetails->name) ?></p>\n                    <p class=\"description\">\n                        <?= e(__('Owner')) ?>: <?= e($projectDetails->owner) ?> (<a\n                            href=\"javascript:;\"\n                            data-control=\"popup\"\n                            data-handler=\"onLoadProjectForm\">reset</a>)\n                    </p>\n                </div>\n            <?php endif ?>\n            <div class=\"scoreboard-item title-value\">\n                <h4><?= e(__('Plugins')) ?></h4>\n                <p><?= $pluginsCount ?></p>\n                <p class=\"description\">\n                    <?= e(__('Disabled')) ?>: <?= $pluginsCount - $pluginsActiveCount ?>\n                </p>\n            </div>\n            <?php if ($currentVersion): ?>\n                <div class=\"scoreboard-item title-value\">\n                    <h4><?= e(__('Current Build')) ?></h4>\n                    <p><span data-core-current-version=\"<?= $currentVersion ?>\"><?= $currentVersion ?></span></p>\n                    <p class=\"description\">\n                        <span data-core-has-updates style=\"display:none\"><?= e(__('Updates Available')) ?></span>\n                        <span data-core-no-updates><?= e(__('Up to Date')) ?></span>\n                    </p>\n                </div>\n                <div class=\"scoreboard-item title-value\">\n                    <h4><?= e(__('Latest Build')) ?></h4>\n                    <p><span data-core-latest-version class=\"oc-loading\"></span></p>\n                    <p class=\"description\">\n                        <a\n                            href=\"javascript:;\"\n                            data-control=\"popup\"\n                            data-handler=\"<?= $this->changelogWidget->getEventHandler('onLoadChangelog') ?>\">\n                            <?= e(__('View Changelog')) ?>\n                        </a>\n                    </p>\n                </div>\n            <?php endif ?>\n        </div>\n    </div>\n\n    <?php if ($warnings = $this->updaterWidget->renderWarnings()): ?>\n        <div class=\"padded-container container-flush\">\n            <?= $warnings ?>\n        </div>\n    <?php endif ?>\n\n    <div class=\"layout-row p-b\">\n        <?= $this->listRender() ?>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/system/controllers/updates/manage.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('system/updates') ?>\"><?= e(__('Software Updates')) ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= $this->listRender('manage') ?>\n"
  },
  {
    "path": "modules/system/database/migrations/2013_10_01_000001_Db_Deferred_Bindings.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('deferred_bindings', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('master_type');\n            $table->string('master_field');\n            $table->string('slave_type');\n            $table->integer('slave_id');\n            $table->string('session_key');\n            $table->mediumText('pivot_data')->nullable();\n            $table->boolean('is_bind')->default(true);\n            $table->integer('sort_order')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('deferred_bindings');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2013_10_01_000002_Db_System_Files.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        try {\n            Schema::create('system_files', function (Blueprint $table) {\n                $table->increments('id');\n                $table->string('disk_name');\n                $table->string('file_name');\n                $table->integer('file_size');\n                $table->string('content_type');\n                $table->string('title')->nullable();\n                $table->text('description')->nullable();\n                $table->string('field')->nullable();\n                $table->integer('attachment_id')->nullable();\n                $table->string('attachment_type')->nullable();\n                $table->boolean('is_public')->default(true);\n                $table->integer('sort_order')->nullable();\n                $table->timestamps();\n\n                $table->index(['attachment_type', 'attachment_id', 'field'], 'system_files_master_index');\n            });\n        }\n        catch (Exception $ex) {\n            $this->down();\n            throw $ex;\n        }\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_files');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2013_10_01_000003_Db_System_Plugin_Versions.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_plugin_versions', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('code')->index();\n            $table->string('version', 50);\n            $table->boolean('is_frozen')->default(0);\n            $table->boolean('is_disabled')->default(0);\n            $table->timestamp('created_at')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_plugin_versions');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2013_10_01_000004_Db_System_Plugin_History.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_plugin_history', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('code')->index();\n            $table->string('type', 20)->index();\n            $table->string('version', 50);\n            $table->mediumText('detail')->nullable();\n            $table->timestamp('created_at')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_plugin_history');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2013_10_01_000005_Db_System_Settings.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_settings', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('item')->nullable()->index();\n            $table->mediumtext('value')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_settings');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2013_10_01_000006_Db_System_Parameters.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_parameters', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('namespace', 100);\n            $table->string('group', 50);\n            $table->string('item', 150);\n            $table->mediumText('value')->nullable();\n            $table->index(['namespace', 'group', 'item'], 'item_index');\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_parameters');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2013_10_01_000008_Db_System_Mail_Templates.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_mail_templates', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('code')->nullable();\n            $table->string('subject')->nullable();\n            $table->text('description')->nullable();\n            $table->text('content_html')->nullable();\n            $table->text('content_text')->nullable();\n            $table->integer('layout_id')->index()->nullable();\n            $table->boolean('is_custom')->default(0);\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_mail_templates');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2013_10_01_000009_Db_System_Mail_Layouts.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_mail_layouts', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->nullable();\n            $table->string('code')->nullable();\n            $table->text('content_html')->nullable();\n            $table->text('content_text')->nullable();\n            $table->text('content_css')->nullable();\n            $table->boolean('is_locked')->default(0);\n            $table->text('options')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_mail_layouts');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2014_10_01_000010_Db_Jobs.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create($this->getTableName(), function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('queue');\n            $table->text('payload');\n            $table->tinyInteger('attempts')->unsigned();\n            $table->unsignedInteger('reserved_at')->nullable();\n            $table->unsignedInteger('available_at');\n            $table->unsignedInteger('created_at');\n            $table->index(['queue', 'reserved_at']);\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists($this->getTableName());\n    }\n\n    protected function getTableName()\n    {\n        return Config::get('queue.connections.database.table', 'jobs');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2014_10_01_000011_Db_System_Event_Logs.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_event_logs', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('level')->nullable()->index();\n            $table->text('message')->nullable();\n            $table->mediumtext('details')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_event_logs');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2014_10_01_000012_Db_System_Request_Logs.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_request_logs', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('status_code')->nullable();\n            $table->text('url')->nullable();\n            $table->text('referer')->nullable();\n            $table->integer('count')->default(0);\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_request_logs');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2014_10_01_000013_Db_System_Sessions.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('sessions', function (Blueprint $table) {\n            $table->string('id')->unique();\n            $table->text('payload')->nullable();\n            $table->integer('last_activity')->nullable();\n            $table->unsignedInteger('user_id')->nullable();\n            $table->string('ip_address', 45)->nullable();\n            $table->text('user_agent')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('sessions');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2015_10_01_000016_Db_Cache.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('cache', function (Blueprint $table) {\n            $table->string('key')->unique();\n            $table->longText('value');\n            $table->integer('expiration');\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('cache');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2015_10_01_000017_Db_System_Revisions.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_revisions', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('revisionable_type');\n            $table->integer('revisionable_id');\n            $table->integer('user_id')->unsigned()->nullable()->index();\n            $table->string('field')->nullable()->index();\n            $table->string('cast')->nullable();\n            $table->text('old_value')->nullable();\n            $table->text('new_value')->nullable();\n            $table->timestamps();\n            $table->index(['revisionable_id', 'revisionable_type']);\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_revisions');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2015_10_01_000018_Db_FailedJobs.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create($this->getTableName(), function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('uuid')->unique()->nullable();\n            $table->text('connection');\n            $table->text('queue');\n            $table->text('payload');\n            $table->longText('exception')->nullable();\n            $table->timestamp('failed_at')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists($this->getTableName());\n    }\n\n    protected function getTableName()\n    {\n        return Config::get('queue.failed.table', 'failed_jobs');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2017_10_01_000023_Db_System_Mail_Partials.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_mail_partials', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->nullable();\n            $table->string('code')->nullable();\n            $table->text('content_html')->nullable();\n            $table->text('content_text')->nullable();\n            $table->boolean('is_custom')->default(0);\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_mail_partials');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2021_10_01_000025_Db_Add_Pivot_Data_To_Deferred_Bindings.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        if (!Schema::hasColumn('deferred_bindings', 'pivot_data')) {\n            Schema::table('deferred_bindings', function (Blueprint $table) {\n                $table->mediumText('pivot_data')->nullable();\n            });\n        }\n    }\n\n    public function down()\n    {\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2022_10_01_000026_Db_System_Site_Definitions.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_site_definitions', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->nullable();\n            $table->string('code')->index()->nullable();\n            $table->integer('sort_order')->nullable();\n            $table->boolean('is_custom_url')->default(0);\n            $table->string('app_url')->nullable();\n            $table->string('theme')->nullable();\n            $table->string('locale')->nullable();\n            $table->string('fallback_locale')->nullable();\n            $table->string('timezone')->nullable();\n            $table->boolean('is_host_restricted')->default(0);\n            $table->mediumText('allow_hosts')->nullable();\n            $table->boolean('is_prefixed')->default(0);\n            $table->string('route_prefix')->nullable();\n            $table->boolean('is_styled')->default(0);\n            $table->string('color_foreground')->nullable();\n            $table->string('color_background')->nullable();\n            $table->boolean('is_role_restricted')->default(0);\n            $table->mediumText('allow_roles')->nullable();\n            $table->boolean('is_primary')->default(0);\n            $table->boolean('is_enabled')->default(0);\n            $table->boolean('is_enabled_edit')->default(0);\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_site_definitions');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2023_10_01_000027_Db_Add_Site_To_Settings.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::table('system_settings', function (Blueprint $table) {\n            $table->integer('site_id')->nullable()->unsigned();\n            $table->integer('site_root_id')->nullable()->unsigned();\n        });\n    }\n\n    public function down()\n    {\n        if (Schema::hasColumn('system_settings', 'site_id')) {\n            Schema::dropColumns('system_settings', 'site_id');\n        }\n\n        if (Schema::hasColumn('system_settings', 'site_root_id')) {\n            Schema::dropColumns('system_settings', 'site_root_id');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2023_10_01_000028_Db_Add_Restrict_Roles_To_Sites.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        if (!Schema::hasColumns('system_site_definitions', ['is_role_restricted', 'allow_roles'])) {\n            Schema::table('system_site_definitions', function (Blueprint $table) {\n                $table->boolean('is_role_restricted')->default(0);\n                $table->mediumText('allow_roles')->nullable();\n            });\n        }\n\n        if (Schema::hasColumn('system_site_definitions', 'is_restricted')) {\n            Schema::table('system_site_definitions', function (Blueprint $table) {\n                $table->renameColumn('is_restricted', 'is_host_restricted');\n            });\n        }\n    }\n\n    public function down()\n    {\n        if (Schema::hasColumn('system_site_definitions', 'is_role_restricted')) {\n            Schema::dropColumns('system_site_definitions', 'is_role_restricted');\n        }\n\n        if (Schema::hasColumn('system_site_definitions', 'allow_roles')) {\n            Schema::dropColumns('system_site_definitions', 'allow_roles');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2023_10_01_000029_Db_System_Site_Groups.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_site_groups', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->nullable();\n            $table->string('code')->index()->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_site_groups');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2023_10_01_000030_Db_Add_Group_To_Sites.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        if (!Schema::hasColumn('system_site_definitions', 'group_id')) {\n            Schema::table('system_site_definitions', function (Blueprint $table) {\n                $table->integer('group_id')->index()->nullable();\n            });\n        }\n    }\n\n    public function down()\n    {\n        if (Schema::hasColumn('system_site_definitions', 'group_id')) {\n            Schema::dropColumns('system_site_definitions', 'group_id');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2024_10_01_000031_Db_Add_Sort_Order_To_Deferred_Bindings.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        if (!Schema::hasColumn('deferred_bindings', 'sort_order')) {\n            Schema::table('deferred_bindings', function (Blueprint $table) {\n                $table->integer('sort_order')->nullable();\n            });\n        }\n    }\n\n    public function down()\n    {\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2024_10_01_000032_Db_Add_Fallback_Locale_To_Sites.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        if (!Schema::hasColumn('system_site_definitions', 'fallback_locale')) {\n            Schema::table('system_site_definitions', function (Blueprint $table) {\n                $table->string('fallback_locale')->nullable();\n            });\n        }\n    }\n\n    public function down()\n    {\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2026_10_01_000033_Db_System_Translate_Attributes.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_translate_attributes', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('model_type', 512);\n            $table->integer('model_id');\n            $table->string('locale', 16);\n            $table->string('attribute', 128);\n            $table->mediumText('value')->nullable();\n            $table->index(\n                ['model_type', 'model_id', 'locale'],\n                'sys_translate_type_id_locale_index'\n            );\n            $table->unique(\n                ['model_type', 'model_id', 'locale', 'attribute'],\n                'sys_translate_unique_index'\n            );\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_translate_attributes');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2026_10_01_000034_Db_Add_Site_Group_To_Settings.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::table('system_settings', function (Blueprint $table) {\n            $table->integer('site_group_id')->nullable()->unsigned();\n        });\n    }\n\n    public function down()\n    {\n        if (Schema::hasColumn('system_settings', 'site_group_id')) {\n            Schema::dropColumns('system_settings', 'site_group_id');\n        }\n    }\n};\n"
  },
  {
    "path": "modules/system/database/migrations/2026_10_01_000035_Db_System_Plugin_Site_Groups.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('system_plugin_site_groups', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('plugin_code')->index();\n            $table->integer('site_id')->unsigned()->nullable()->index();\n            $table->integer('site_group_id')->unsigned()->nullable()->index();\n            $table->boolean('is_enabled')->default(true);\n            $table->unique(['plugin_code', 'site_id', 'site_group_id'], 'plugin_site_group_unique');\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('system_plugin_site_groups');\n    }\n};\n"
  },
  {
    "path": "modules/system/database/seeds/DatabaseSeeder.php",
    "content": "<?php namespace System\\Database\\Seeds;\n\nuse Model;\nuse Seeder;\n\n/**\n * DatabaseSeeder\n */\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * run the database seeds.\n     */\n    public function run()\n    {\n        Model::unguard();\n\n        $this->call(\\System\\Database\\Seeds\\SeedSetupPrimarySite::class, true);\n        $this->call(\\System\\Database\\Seeds\\SeedSetupMailLayouts::class, true);\n        $this->call(\\System\\Database\\Seeds\\SeedArtisanAutoexec::class, true);\n        $this->call(\\System\\Database\\Seeds\\SeedSetBuildNumber::class, true);\n\n        Model::reguard();\n    }\n}\n"
  },
  {
    "path": "modules/system/database/seeds/SeedArtisanAutoexec.php",
    "content": "<?php namespace System\\Database\\Seeds;\n\nuse File;\nuse Seeder;\nuse Artisan;\n\n/**\n * SeedArtisanAutoexec\n */\nclass SeedArtisanAutoexec extends Seeder\n{\n    /**\n     * run\n     */\n    public function run()\n    {\n        $this->line('');\n\n        $seedFile = storage_path('cms/autoexec.json');\n        if (!File::exists($seedFile)) {\n            return;\n        }\n\n        $contents = json_decode(File::get($seedFile), true);\n        if (!$contents || !is_array($contents)) {\n            return;\n        }\n\n        try {\n            $out = isset($this->command) ? $this->command->getOutput() : null;\n            foreach ($contents as $artisanCmd) {\n                Artisan::call($artisanCmd, [], $out);\n            }\n        }\n        finally {\n            File::delete($seedFile);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/database/seeds/SeedSetBuildNumber.php",
    "content": "<?php namespace System\\Database\\Seeds;\n\nuse Seeder;\nuse System;\nuse System\\Classes\\UpdateManager;\nuse Exception;\n\n/**\n * SeedSetBuildNumber\n */\nclass SeedSetBuildNumber extends Seeder\n{\n    /**\n     * run\n     */\n    public function run($buildNumber = null)\n    {\n        $this->line('');\n\n        try {\n            if ($buildNumber) {\n                UpdateManager::instance()->setBuild((int) $buildNumber);\n            }\n            else {\n                $build = UpdateManager::instance()->setBuildNumberManually();\n            }\n\n            $this->line('* You are using October CMS version: v' . System::VERSION . '.' . $build, 'comment');\n        }\n        catch (Exception $ex) {\n            $this->line('*** Unable to set build: [' . $ex->getMessage() . ']', 'comment');\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/database/seeds/SeedSetupMailLayouts.php",
    "content": "<?php namespace System\\Database\\Seeds;\n\nuse Seeder;\nuse System\\Models\\MailLayout;\n\n/**\n * SeedSetupMailLayouts\n */\nclass SeedSetupMailLayouts extends Seeder\n{\n    public function run()\n    {\n        MailLayout::createLayouts();\n    }\n}\n"
  },
  {
    "path": "modules/system/database/seeds/SeedSetupPrimarySite.php",
    "content": "<?php namespace System\\Database\\Seeds;\n\nuse Seeder;\nuse System\\Models\\SiteGroup;\nuse System\\Models\\SiteDefinition;\n\n/**\n * SeedSetupPrimarySite\n */\nclass SeedSetupPrimarySite extends Seeder\n{\n    public function run()\n    {\n        SiteGroup::syncDefaultGroup();\n\n        SiteDefinition::syncPrimarySite();\n    }\n}\n"
  },
  {
    "path": "modules/system/facades/Manifest.php",
    "content": "<?php namespace System\\Facades;\n\nuse October\\Rain\\Support\\Facade;\n\n/**\n * Manifest facade\n *\n * @method static bool has(string $name)\n * @method static void get(string $key, mixed $default)\n * @method static void put(string $key, mixed $value)\n * @method static void forget(string $name)\n * @method static void build()\n *\n * @see \\System\\Classes\\ManifestCache\n */\nclass Manifest extends Facade\n{\n    /**\n     * getFacadeAccessor returns the registered name of the component\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'system.manifest';\n    }\n}\n"
  },
  {
    "path": "modules/system/facades/System.php",
    "content": "<?php namespace System\\Facades;\n\nuse October\\Rain\\Support\\Facade;\n\n/**\n * System facade\n *\n * @method static bool hasModule(string $name)\n * @method static array listModules()\n * @method static bool hasDatabase()\n * @method static bool checkDebugMode()\n * @method static bool checkSafeMode()\n * @method static string composerToOctoberCode(string $name)\n * @method static string octoberToComposerCode(string $name, string $type, bool $prefix)\n *\n * @see \\System\\Helpers\\System\n */\nclass System extends Facade\n{\n    /**\n     * @var string VERSION for October CMS, including major and minor.\n     */\n    const VERSION = '4.2';\n\n    /**\n     * getFacadeAccessor returns the registered name of the component\n     * @return string\n     */\n    protected static function getFacadeAccessor()\n    {\n        return 'system.helper';\n    }\n}\n"
  },
  {
    "path": "modules/system/facades/Ui.php",
    "content": "<?php namespace System\\Facades;\n\nuse October\\Rain\\Support\\Facade;\n\n/**\n * Ui helper\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Ui extends \\System\\Classes\\UiFactory\n{\n}\n"
  },
  {
    "path": "modules/system/helpers/Cache.php",
    "content": "<?php namespace System\\Helpers;\n\nuse App;\nuse File;\nuse Cache as CacheFacade;\nuse Config;\n\n/**\n * Cache helper\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Cache\n{\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('system.cacher');\n    }\n\n    /**\n     * clear from the console command\n     */\n    public static function clear()\n    {\n        CacheFacade::flush();\n        self::clearInternal();\n    }\n\n    /**\n     * clearInternal\n     */\n    public static function clearInternal()\n    {\n        $instance = self::instance();\n        $instance->clearCombiner();\n        $instance->clearCache();\n        $instance->clearThemeCache();\n        $instance->clearBlueprintCache();\n\n        if (Config::get('cms.enable_twig_cache', true)) {\n            $instance->clearTwig();\n        }\n\n        $instance->clearMeta();\n    }\n\n    /**\n     * clearCombiner\n     */\n    public function clearCombiner()\n    {\n        foreach (File::directories(storage_path().'/cms/combiner') as $directory) {\n            File::deleteDirectory($directory);\n        }\n    }\n\n    /**\n     * clearCache\n     */\n    public function clearCache()\n    {\n        foreach (File::directories(storage_path().'/cms/cache') as $directory) {\n            File::deleteDirectory($directory);\n        }\n    }\n\n    /**\n     * clearTwig\n     */\n    public function clearTwig()\n    {\n        foreach (File::directories(storage_path().'/cms/twig') as $directory) {\n            File::deleteDirectory($directory);\n        }\n    }\n\n    /**\n     * clearThemeCache\n     */\n    public function clearThemeCache()\n    {\n        collect(File::files(cache_path('cms')))\n            ->reject(function($file) {\n                return !starts_with($file->getFilename(), 'theme-');\n            })\n            ->each(function($file) {\n                File::delete(cache_path('cms/'.$file->getFilename()));\n            });\n    }\n\n    /**\n     * clearBlueprintCache\n     */\n    public function clearBlueprintCache()\n    {\n        collect(File::files(cache_path('cms')))\n            ->reject(function($file) {\n                return !starts_with($file->getFilename(), 'blueprint-');\n            })\n            ->each(function($file) {\n                File::delete(cache_path('cms/'.$file->getFilename()));\n            });\n    }\n\n    /**\n     * clearMeta\n     */\n    public function clearMeta()\n    {\n        File::delete(cache_path('cms/manifest.php'));\n\n        File::delete(App::getCachedClassesPath());\n\n        File::delete(App::getCachedCompilePath());\n\n        File::delete(App::getCachedConfigPath());\n\n        File::delete(App::getCachedServicesPath());\n\n        File::delete(App::getCachedPackagesPath());\n\n        File::delete(App::getCachedRoutesPath());\n    }\n}\n"
  },
  {
    "path": "modules/system/helpers/DateTime.php",
    "content": "<?php namespace System\\Helpers;\n\nuse Date;\nuse Carbon\\Carbon;\nuse DateTime as PhpDateTime;\nuse InvalidArgumentException;\nuse Exception;\n\n/**\n * DateTime helper\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DateTime\n{\n    /**\n     * timeSince returns a human readable time difference from the value to the\n     * current time. Eg: **10 minutes ago**\n     *\n     * @return string\n     */\n    public static function timeSince($datetime)\n    {\n        return self::makeCarbon($datetime)->diffForHumans();\n    }\n\n    /**\n     * timeTense returns 24-hour time and the day using the grammatical tense\n     * of the current time. Eg: Today at 12:49, Yesterday at 4:00\n     * or 18 Sep 2015 at 14:33.\n     *\n     * @return string\n     */\n    public static function timeTense($datetime)\n    {\n        $datetime = self::makeCarbon($datetime);\n        $time = $datetime->format('H:i');\n        $date = $datetime->format('j M Y');\n\n        if ($datetime->isToday()) {\n            $date = 'Today';\n        }\n        elseif ($datetime->isYesterday()) {\n            $date = 'Yesterday';\n        }\n        elseif ($datetime->isTomorrow()) {\n            $date = 'Tomorrow';\n        }\n\n        return $date.' at '.$time;\n    }\n\n    /**\n     * makeCarbon converts mixed inputs to a Carbon object.\n     *\n     * @return Carbon\\Carbon\n     */\n    public static function makeCarbon($value, $throwException = true)\n    {\n        if ($value instanceof Carbon) {\n            // Do nothing\n        }\n        elseif ($value instanceof PhpDateTime) {\n            $value = Date::instance($value);\n        }\n        elseif (is_numeric($value)) {\n            $value = Date::createFromTimestamp($value);\n        }\n        elseif (preg_match('/^(\\d{4})-(\\d{2})-(\\d{2})$/', $value)) {\n            $value = Date::createFromFormat('Y-m-d', $value)->startOfDay();\n        }\n        else {\n            try {\n                $value = Date::parse($value);\n            }\n            catch (Exception $ex) {\n                // Do nothing\n            }\n        }\n\n        if (!$value instanceof Carbon && $throwException) {\n            throw new InvalidArgumentException('Invalid date value supplied to DateTime helper.');\n        }\n\n        return $value;\n    }\n\n    /**\n     * momentFormat converts a PHP date format to \"Moment.js\" format.\n     * @param string $format\n     * @return string\n     */\n    public static function momentFormat($format)\n    {\n        if (!$format) {\n            return '';\n        }\n\n        $replacements = [\n            'd' => 'DD',\n            'D' => 'ddd',\n            'j' => 'D',\n            'l' => 'dddd',\n            'N' => 'E',\n            'S' => 'o',\n            'w' => 'e',\n            'z' => 'DDD',\n            'W' => 'W',\n            'F' => 'MMMM',\n            'm' => 'MM',\n            'M' => 'MMM',\n            'n' => 'M',\n            't' => '', // no equivalent\n            'L' => '', // no equivalent\n            'o' => 'YYYY',\n            'Y' => 'YYYY',\n            'y' => 'YY',\n            'a' => 'a',\n            'A' => 'A',\n            'B' => '', // no equivalent\n            'g' => 'h',\n            'G' => 'H',\n            'h' => 'hh',\n            'H' => 'HH',\n            'i' => 'mm',\n            's' => 'ss',\n            'u' => 'SSS',\n            'e' => 'zz', // deprecated since version 1.6.0 of moment.js\n            'I' => '', // no equivalent\n            'O' => '', // no equivalent\n            'P' => '', // no equivalent\n            'T' => '', // no equivalent\n            'Z' => '', // no equivalent\n            'c' => '', // no equivalent\n            'r' => '', // no equivalent\n            'U' => 'X',\n        ];\n\n        foreach ($replacements as $from => $to) {\n            $replacements['\\\\'.$from] = '['.$from.']';\n        }\n\n        return strtr($format, $replacements);\n    }\n\n    /**\n     * @deprecated use `\\System\\Helpers\\Preset::timezones()`\n     */\n    public static function listTimezones()\n    {\n        return \\System\\Helpers\\Preset::timezones();\n    }\n}\n"
  },
  {
    "path": "modules/system/helpers/DateTimeHelper.php",
    "content": "<?php namespace System\\Helpers;\n\n/**\n * @deprecated\n * @see DateTimeHelper\n */\nclass DateTimeHelper extends DateTime\n{\n}\n"
  },
  {
    "path": "modules/system/helpers/LocaleHelper.php",
    "content": "<?php namespace System\\Helpers;\n\n/**\n * @deprecated see System\\Helpers\\Preset\n */\nclass LocaleHelper\n{\n    /**\n     * @deprecated use `\\System\\Helpers\\Preset::locales()`\n     */\n    public static function listLocales()\n    {\n        return \\System\\Helpers\\Preset::locales();\n    }\n\n    /**\n     * @deprecated use `\\System\\Helpers\\Preset::flags()`\n     */\n    public static function listLocalesWithFlags()\n    {\n        return \\System\\Helpers\\Preset::flags();\n    }\n\n    /**\n     * @deprecated use `Arr::trans()`\n     */\n    public static function translateArray(array $arr): array\n    {\n        return \\Arr::trans($arr);\n    }\n}\n"
  },
  {
    "path": "modules/system/helpers/Preset.php",
    "content": "<?php namespace System\\Helpers;\n\nuse System\\Classes\\PresetManager;\n\n/**\n * Presets\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Preset\n{\n    /**\n     * icons returns list of available system icons\n     */\n    public static function icons(): array\n    {\n        return PresetManager::instance()->getPreset('icons');\n    }\n\n    /**\n     * locales returns list of available locales\n     */\n    public static function locales(): array\n    {\n        return PresetManager::instance()->getPreset('locales');\n    }\n\n    /**\n     * flags returns list of available locales with flag icons\n     */\n    public static function flags($variant = null): array\n    {\n        return PresetManager::instance()->getPreset($variant ? \"flags@{$variant}\" : 'flags');\n    }\n\n    /**\n     * timezones returns list of available timezones\n     */\n    public static function timezones(): array\n    {\n        return PresetManager::instance()->getPreset('timezones');\n    }\n\n    /**\n     * @deprecated\n     */\n    public static function localeIcons(): array\n    {\n        return self::flags();\n    }\n}\n"
  },
  {
    "path": "modules/system/helpers/System.php",
    "content": "<?php namespace System\\Helpers;\n\nuse App;\nuse File;\nuse Config;\nuse Schema;\nuse Manifest;\n\n/**\n * System Helper\n *\n * @package october\\system\n * @see \\System\\Facades\\System\n * @author Alexey Bobkov, Samuel Georges\n */\nclass System\n{\n    /**\n     * @var string MANIFEST_MODULES for manifest storage\n     */\n    const MANIFEST_MODULES = 'modules.all';\n\n    /**\n     * @var string MANIFEST_DB_CHECK for manifest storage\n     */\n    const MANIFEST_DB_CHECK = 'database.check';\n\n    /**\n     * @var bool hasDatabaseCache helps multiple calls to hasDatabase()\n     */\n    protected $hasDatabaseCache = null;\n\n    /**\n     * listModulesCache helps multiple calls to listModules()\n     */\n    protected $listModulesCache = null;\n\n    /**\n     * listModules returns a list of module names that are enabled\n     */\n    public function listModules(): array\n    {\n        if ($this->listModulesCache !== null) {\n            return $this->listModulesCache;\n        }\n\n        // Check manifest\n        if (Manifest::has(self::MANIFEST_MODULES)) {\n            return (array) Manifest::get(self::MANIFEST_MODULES);\n        }\n\n        $loadModules = Config::get('system.load_modules');\n\n        // Lazy\n        if (!$loadModules) {\n            $foundModules = [];\n            foreach (File::directories(base_path('modules')) as $dir) {\n                $foundModules[] = ucfirst(basename($dir));\n            }\n\n            $result = $foundModules;\n        }\n        // Eager\n        elseif (is_array($loadModules)) {\n            $result = $loadModules;\n        }\n        else {\n            $result = array_map('trim', explode(',', (string) $loadModules));\n        }\n\n        // System comes first\n        if ($systemKey = array_search('System', $result)) {\n            unset($result[$systemKey]);\n            array_unshift($result, 'System');\n        }\n\n        // Store result\n        Manifest::put(self::MANIFEST_MODULES, $result);\n\n        return $this->listModulesCache = $result;\n    }\n\n    /**\n     * hasModule checks for a module inside the system\n     */\n    public function hasModule($name): bool\n    {\n        return in_array($name, $this->listModules()) &&\n            class_exists('\\\\' . $name . '\\ServiceProvider');\n    }\n\n    /**\n     * hasDatabase checks if a database connection can be made\n     * and the migrations table exists\n     */\n    public function hasDatabase(): bool\n    {\n        if ($this->hasDatabaseCache !== null) {\n            return $this->hasDatabaseCache;\n        }\n\n        if (Manifest::get(self::MANIFEST_DB_CHECK) === true) {\n            return $this->hasDatabaseCache = true;\n        }\n\n        $loadedValue = App::hasDatabase() &&\n            Schema::hasTable(Config::get('database.migrations.table', 'migrations'));\n\n        Manifest::put(self::MANIFEST_DB_CHECK, (bool) $loadedValue);\n\n        return $this->hasDatabaseCache = $loadedValue;\n    }\n\n    /**\n     * checkProjectValid\n     */\n    public function checkProjectValid($flag = 2): bool\n    {\n        return (\\System\\Models\\Parameter::getProjectStatusFlag() & $flag) === $flag;\n    }\n\n    /**\n     * checkDebugMode returns true if debug mode is on\n     */\n    public function checkDebugMode(): bool\n    {\n        return Config::get('app.debug', false);\n    }\n\n    /**\n     * checkSafeMode will return true if cms.safe_mode config is enabled\n     */\n    public function checkSafeMode(): bool\n    {\n        $safeMode = Config::get('cms.safe_mode', null);\n\n        if ($safeMode === null) {\n            $safeMode = !Config::get('app.debug', false);\n        }\n\n        return $safeMode;\n    }\n\n    /**\n     * checkBaseDir returns true if a file path is inside the base directory\n     */\n    public function checkBaseDir($filePath): bool\n    {\n        $restrictBaseDir = Config::get('system.restrict_base_dir', true);\n\n        if ($restrictBaseDir && !File::isLocalPath($filePath)) {\n            return false;\n        }\n\n        if (!$restrictBaseDir && realpath($filePath) === false) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * composerToOctoberCode converts a composer code to an October CMS code\n     * rainlab/mailchimp-plugin-9999999-dev -> rainlab.mailchimp\n     */\n    public function composerToOctoberCode(string $name): string\n    {\n        // Remove suffix\n        $name = explode('-plugin', $name, -1)[0] ?? $name;\n        $name = explode('-theme', $name, -1)[0] ?? $name;\n\n        $parts = explode('/', $name, 2);\n\n        // Remove prefix\n        $vendor = $parts[0];\n        $package = $parts[1] ?? '';\n        $package = ltrim($package, 'oc-');\n\n        return rtrim($vendor.'.'.$package, '.');\n    }\n\n    /**\n     * octoberToComposerCode converts an October CMS code to a composer code\n     * RainLab.Mailchimp -> rainlab/mailchimp-plugin\n     */\n    public function octoberToComposerCode(string $name, string $type, bool $prefix = false): string\n    {\n        // Add suffix\n        $code = str_replace('.', '/', strtolower($name)) . '-' . $type;\n\n        $parts = explode('/', $code, 2);\n\n        // Add prefix\n        if (!$prefix || count($parts) !== 2) {\n            return $code;\n        }\n\n        return $parts[0] . '/' . 'oc-' . $parts[1];\n    }\n}\n"
  },
  {
    "path": "modules/system/helpers/View.php",
    "content": "<?php namespace System\\Helpers;\n\nuse View as ViewFacade;\n\n/**\n * This helper class is used to extract basic variables\n * (scalar or array) from the global `View` Facade.\n *\n * You can register these global variables with `View::share`.\n *\n *     View::share('siteName', 'October CMS');\n *\n * Then available globally for use in the front-end and mail templates.\n */\nclass View\n{\n    /**\n     * @var array globalVarCache for global variables.\n     */\n    protected static $globalVarCache;\n\n    /**\n     * getGlobalVars returns shared view variables, this should be used for simple rendering cycles.\n     * Such as content blocks and mail templates.\n     *\n     * @return array\n     */\n    public static function getGlobalVars()\n    {\n        if (static::$globalVarCache !== null) {\n            return static::$globalVarCache;\n        }\n\n        $vars = array_filter(ViewFacade::getShared(), function ($var) {\n            return is_scalar($var) || is_array($var);\n        });\n\n        return static::$globalVarCache = $vars;\n    }\n}\n"
  },
  {
    "path": "modules/system/lang/ar/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'التنسيق',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/ar/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'نظام إدارة المحتوى أكتوبر',\n    'tagline' => 'عودة إلى الأساس',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'fi' => 'Suomi',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n  ],\n  'settings' => [],\n  'pagination' => [\n    'previous' => 'السابق',\n    'next' => 'التالي',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/ar/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'             => ':attribute يجب أن يكون مقبولاً.',\n    'active_url'           => ':attribute ليس عنوان ويب صحيح.',\n    'after'                => ':attribute يجب أن يكون تاريخ بعد :date.',\n    'after_or_equal'       => ':attribute يجب أن يكون أكبر من أو يساوي :date.',\n    'alpha'                => ':attribute يجب أن يحتوي على حروف فقط.',\n    'alpha_dash'           => ':attribute يجب أن يحتوي على حروف وأرقام وعلامات خاصة.',\n    'alpha_num'            => ':attribute يجب أن يحتوي على حروف وأرقام فقط.',\n    'array'                => ':attribute يجب أن يكون مصفوفة.',\n    'before'               => ':attribute يجب أن يكون قبل تاريخ :date.',\n    'before_or_equal'      => ':attribute يجب أن يكون أكبر من أو يساوي :date.',\n    'date'                 => ':attribute ليس تاريخ صحيح.',\n    'date_format'          => ':attribute لا يناسب صيغة التاريخ :format.',\n    'distinct'             => ':attribute به قيمة مكررة.',\n    'email'                => ':attribute يجب أن يكون بريد إلكتروني صحيح.',\n    'filled'               => ':attribute لا يمكن أن يكون فارغاً.',\n    'required'             => ':attribute مطلوب.',\n    'string'               => ':attribute يجب أن يكون نصاً.',\n    'unique'               => ':attribute موجود بالفعل.',\n    'uploaded'             => 'فشل تحميل :attribute.',\n    'url'                  => 'صيغة عنوان :attribute غير صحيحة.',\n];\n"
  },
  {
    "path": "modules/system/lang/ar.json",
    "content": "{\n  \"Check For Updates\": \"تحقق من وجود تحديثات\",\n  \"Install Packages\": \"تثبيت الحزم\",\n  \"Manage Themes\": \"إدارة السمات\",\n  \"Manage Plugins\": \"إدارة الإضافات\",\n  \"Project\": \"مشروع\",\n  \"Owner\": \"صاحب\",\n  \"Plugins\": \"الإضافات\",\n  \"Recommended\": \"مُستَحسَن\",\n  \"Disabled\": \"عاجز\",\n  \"Current Build\": \"البناء الحالي\",\n  \"Updates Available\": \"التحديثات متوفرة\",\n  \"Up to Date\": \"حتى الآن\",\n  \"Latest Build\": \"أحدث إصدار\",\n  \"View Changelog\": \"مشاهدة ملف Changelog\",\n  \"Software Updates\": \"تحديثات النظام\",\n  \"Update the system modules and plugins.\": \"قم بتحديث وحدات النظام والإضافات.\",\n  \"General\": \"عام\",\n  \"Mail\": \"بريد\",\n  \"Utilities\": \"خدمات\",\n  \"Settings\": \"الإعدادات\",\n  \"Show All Settings\": \"إظهار كافة الإعدادات\",\n  \"Unable to find the specified settings.\": \"تعذر العثور على الإعدادات المحددة.\",\n  \"The settings page is missing a Model definition.\": \"صفحة الإعدادات تفتقد إلى تعريف الطراز.\",\n  \":name settings updated\": \": تم تحديث إعدادات الاسم\",\n  \"Return to System Settings\": \"ارجع إلى إعدادات النظام\",\n  \"Search Settings...\": \"البحث عن إعداد ...\",\n  \"Disable mail branding CSS\": \"تعطيل CSS للعلامات التجارية للبريد\",\n  \"Manage Sites\": \"إدارة المواقع\",\n  \"Manage the websites available for this application.\": \"إدارة المواقع المتاحة لهذا التطبيق.\",\n  \"Marketplace\": \"المتجر\",\n  \"There is no documentation provided.\": \"لا توجد وثائق متوفرة.\",\n  \"Documentation\": \"توثيق\",\n  \"Upgrade Guide\": \"دليل الترقية\",\n  \"License\": \"رخصة\",\n  \"Attach to Project\": \"نعلق على المشروع\",\n  \"Manage Updates\": \"إدارة التحديثات\",\n  \"Software Update\": \"تحديث النظام\",\n  \"Return to Software Updates\": \"ارجع إلى تحديثات النظام\",\n  \"Try Again\": \"حاول ثانية\",\n  \"Unpacking application files\": \"تفريغ ملفات التطبيق\",\n  \"Update Failed\": \"فشل التحديث\",\n  \"Unpacking plugin: :name\": \"تفريغ البرنامج :name الاسم\",\n  \"The primary site is used by default and cannot be deleted.\": \"يتم استخدام الموقع الأساسي بشكل افتراضي ولا يمكن حذفه.\",\n  \"Disabled sites are not shown on the frontend.\": \"لا تظهر المواقع المعطلة على الواجهة الأمامية.\",\n  \"Enabled in the Admin Panel\": \"تم التمكين في لوحة المسؤول\",\n  \"Configuration\": \"ترتيب\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"استخدم هذا إذا كنت تريد تمكين الموقع في لوحة الإدارة.\",\n  \"Install\": \"تثبيت\",\n  \"Sync Project\": \"مشروع المزامنة\",\n  \"Name\": \"اسم\",\n  \"Unique Code\": \"رمز فريد\",\n  \"Theme\": \"سمة\",\n  \"Sites\": \"المواقع\",\n  \"Create Site\": \"إنشاء موقع\",\n  \"Base URL\": \"عنوان URL الأساسي\",\n  \"Status\": \"حالة\",\n  \"Current default value: :value\": \"القيمة الافتراضية :value القيمة\",\n  \"Locale\": \"محلي\",\n  \"Timezone\": \"وحدة زمنية\",\n  \"Custom application URL\": \"عنوان URL المخصص للتطبيق\",\n  \"Override the application URL when this site is active.\": \"تجاوز عنوان URL للتطبيق عندما يكون هذا الموقع نشطًا.\",\n  \"Use a CMS route prefix\": \"استخدم بادئة مسار CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"يمكن للبادئة تحديد هذا الموقع عند استخدام اسم مضيف مشترك.\",\n  \"Define matching hostnames\": \"تحديد أسماء المضيف المتطابقة\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"حدد أسماء المجال والأنماط التي يجب استخدامها لخدمة هذا الموقع.\",\n  \"Display a style for this site\": \"عرض لون لهذا الموقع\",\n  \"To help identify this site, display a color in the admin panel.\": \"للمساعدة في تحديد هذا الموقع ، اعرض لونًا في لوحة الإدارة.\",\n  \"Save\": \"يحفظ\",\n  \"Save and Close\": \"احفظ وأغلق\",\n  \"Use Default\": \"استخدم الافتراضي\",\n  \"Use Custom\": \"استخدام العرف\",\n  \"Specify a custom locale code.\": \"حدد رمز محلي مخصص.\",\n  \"Failed\": \"باءت بالفشل\",\n  \"or\": \"أو\",\n  \"Code\": \"شفرة\",\n  \"October CMS Marketplace\": \"أكتوبر CMS السوق\",\n  \"Visit the :link to add some.\": \"لا يحتوي المشروع على مكونات إضافية أو سمات. قم بزيارة الرابط: لإضافة البعض.\",\n  \"Buy Now\": \"اشتري الآن\",\n  \"Updating package manager\": \"تحديث مدير الحزم\",\n  \"Updating application files\": \"تحديث ملفات التطبيق\",\n  \"Setting build number\": \"تحديد رقم البناء\",\n  \"Finishing update process\": \"الانتهاء من عملية التحديث\",\n  \"Installing plugin: :name\": \"تثبيت البرنامج المساعد:: name\",\n  \"Finishing installation process\": \"الانتهاء من عملية التثبيت\",\n  \"Removing theme: :name\": \"إزالة الموضوع:: الاسم\",\n  \"Please specify a Theme name to install.\": \"الرجاء تحديد اسم موضوع لتثبيته.\",\n  \"Installing theme: :name\": \"تثبيت الموضوع:: الاسم\",\n  \"Removing plugin: :name\": \"إزالة البرنامج المساعد:: name\",\n  \"Please specify a Plugin name to install.\": \"الرجاء تحديد اسم البرنامج المساعد لتثبيته.\",\n  \"Update process complete\": \"اكتملت عملية التحديث\",\n  \"Package installed successfully\": \"تم تثبيت البرنامج المساعد بنجاح\",\n  \"Check Dependencies\": \"تحقق من التبعيات\",\n  \"Install Dependencies\": \"تثبيت التبعيات\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"هناك تبعيات مفقودة مطلوبة حتى يعمل النظام بشكل صحيح.\",\n  \"License Key\": \"مفتاح الترخيص\",\n  \"How to find your License Key\": \"كيف تجد مفتاح الترخيص الخاص بك\",\n  \"The password attribute is required.\": \"سمة كلمة المرور مطلوبة.\",\n  \"The login attribute is required.\": \"سمة تسجيل الدخول مطلوبة.\",\n  \"Cannot login user since they are not activated.\": \"لا يمكن تسجيل دخول المستخدم لأنه لم يتم تنشيطه.\",\n  \"Cannot login user since they are banned.\": \"لا يمكن تسجيل دخول المستخدم لأنهم ممنوعون.\",\n  \"Cannot login user since they are suspended.\": \"لا يمكن تسجيل دخول المستخدم لأنه تم تعليقه.\",\n  \"A user was not found with the given credentials.\": \"لم يتم العثور على مستخدم ببيانات الاعتماد المقدمة.\",\n  \"A user was found but the password did not match.\": \"تم العثور على مستخدم ولكن كلمة المرور غير متطابقة.\",\n  \"User is not logged in\": \"المستخدم لم يسجل الدخول\",\n  \"Register Software\": \"تسجيل البرامج\",\n  \"View the Dashboard\": \"اعرض لوحة القيادة\",\n  \"Set the Default Dashboard\": \"قم بتعيين لوحة المعلومات الافتراضية\",\n  \"Log File\": \"ملف تسجيل\",\n  \"Sendmail\": \"ارسل بريد\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"له\",\n  \"Postmark\": \"ختم البريد\",\n  \"No encryption\": \"لا يوجد تشفير\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"تكوين البريد\",\n  \"Manage email configuration.\": \"إدارة تكوين البريد الإلكتروني.\",\n  \"Sender Name\": \"اسم المرسل\",\n  \"Sender Email\": \"البريد الإلكتروني المرسل\",\n  \"Mail Method\": \"طريقة البريد\",\n  \"SMTP Address\": \"عنوان SMTP\",\n  \"SMTP Port\": \"منفذ SMTP\",\n  \"SMTP Encryption Protocol\": \"بروتوكول تشفير SMTP\",\n  \"SMTP Authorization Required\": \"مطلوب تفويض SMTP\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"استخدم مربع الاختيار هذا إذا كان خادم SMTP يتطلب إذنًا.\",\n  \"Username\": \"اسم المستخدم\",\n  \"Password\": \"كلمة المرور\",\n  \"Sendmail Path\": \"مسار Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"يرجى تحديد مسار برنامج sendmail.\",\n  \"Mailgun Domain\": \"مجال Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"يرجى تحديد اسم مجال Mailgun.\",\n  \"Mailgun Secret\": \"سر Mailgun\",\n  \"Enter your Mailgun API key.\": \"أدخل مفتاح Mailgun API الخاص بك.\",\n  \"SES Key\": \"مفتاح SES\",\n  \"Enter your SES API key\": \"أدخل مفتاح SES API الخاص بك\",\n  \"SES Secret\": \"سر SES\",\n  \"Enter your SES API secret key\": \"أدخل مفتاح سري SES API الخاص بك\",\n  \"SES Region\": \"منطقة SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"أدخل منطقة SES الخاصة بك (على سبيل المثال us-east-1)\",\n  \"Postmark Token\": \"رمز ختم البريد\",\n  \"Enter your Postmark API secret key\": \"أدخل مفتاح سر Postmark API الخاص بك\",\n  \"Define administrator roles\": \"تحديد أدوار المسؤول\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"قصر الوصول إلى هذا الموقع على المسؤول فقط مع الأدوار التالية.\"\n}"
  },
  {
    "path": "modules/system/lang/be/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => \"Фарматаванне\",\n        'quote' => \"Цытата\",\n        'code' => \"Код\",\n        'header1' => \"Загаловак 1\",\n        'header2' => \"Загаловак 2\",\n        'header3' => \"Загаловак 3\",\n        'header4' => \"Загаловак 4\",\n        'header5' => \"Загаловак 5\",\n        'header6' => \"Загаловак 6\",\n        'bold' => \"Тоўсты шрыфт\",\n        'italic' => \"Курсіў\",\n        'unorderedlist' => \"Несартаваны ліст\",\n        'orderedlist' => \"Сартаваны ліст\",\n        'video' => \"Відэа\",\n        'image' => \"Выява\",\n        'link' => \"Спасылка\",\n        'horizontalrule' => \"Insert Horizontal Rul\",\n        'fullscreen' => \"Поўны экран\",\n        'preview' => \"Прадпрагляд\",\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Уставіць медыя спасылку\",\n        'insert_image' => \"Уставіць медыя выяву\",\n        'insert_video' => \"Уставіць медыя відэа\",\n        'insert_audio' => \"Уставіць медыя аўдыё\",\n        'invalid_file_empty_insert' => \"Калі ласка, выберыце файл, каб уставіць спасылку\",\n        'invalid_file_single_insert' => \"Калі ласка, выберыце адзін файл\",\n        'invalid_image_empty_insert' => \"Калі ласка, выберыце выявы, каб уставіць\",\n        'invalid_video_empty_insert' => \"Калі ласка, выберыце відэа файл, каб уставіць\",\n        'invalid_audio_empty_insert' => \"Калі ласка, выберыце аўдыё файл, каб уставіць\",\n    ],\n    'alert' => [\n        'confirm_button_text' => \"Добра\",\n        'cancel_button_text' => \"Адмена\",\n        'widget_remove_confirm' => 'Remove this widget?'\n    ],\n    'datepicker' => [\n        'previousMonth' => \"Папярэдні месяц\",\n        'nextMonth' => \"Наступны месяц\",\n        'months' => [\"Студзень\", \"Люты\", \"Сакавік\", \"Красавік\", \"Травень\", \"Чэрвень\", \"Ліпень\", \"Жнівень\", \"Верасень\", \"Кастрычнік\", \"Лістапад\", \"Снежань\"],\n        'weekdays' => [\"Нядзеля\", \"Панядзелак\", \"Аўторак\", \"Серада\", \"Чацвер\", \"Пятніца\", \"Субота\"],\n        'weekdaysShort' => [\"Нд\", \"Пн\", \"Аўт\", \"Ср\", \"Чацв\", \"Пн\", \"Сб\"]\n    ],\n    'filter' => [\n        'group' => [\n            'all' => \"ўсе\"\n        ],\n        'dates' => [\n            'all' => \"ўсе\",\n            'filter_button_text' => \"Фільтр\",\n            'reset_button_text'  => \"Скінуць\",\n            'date_placeholder' => \"Дата\",\n            'after_placeholder' => \"Папярэдняя\",\n            'before_placeholder' => \"Наступная\"\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => \"Паказаць трасіроўку стэка\",\n        'hide_stacktrace' => \"Hide the stacktrace\",\n        'tabs' => [\n            'formatted' => \"Адфарматавана\",\n            'raw' => \"Сыра\",\n        ],\n        'editor' => [\n            'title' => \"Рэдактар зыходнага коду\",\n            'description' => \"Ваша аперацыйная сістэма павінна быць настроена на праслухоўванне адной з гэтых схем URL\",\n            'openWith' => \"Адчыніць з дапамогай\",\n            'remember_choice' => \"Запомніць абраны варыянт для гэтай сесіі\",\n            'open' => \"Адчыніць\",\n            'cancel' => \"Адмяніць\"\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/be/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Вяртанне да вытокаў',\n  ],\n  'directory' => [\n    'create_fail' => 'Немагчыма стварыць каталог: \":name\"',\n  ],\n  'file' => [\n    'create_fail' => 'Немагчыма стварыць файл: \":name\"',\n  ],\n  'combiner' => [],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Няправільны токен бяспекі',\n    ],\n  ],\n  'system' => [\n    'name' => 'Сістэма',\n    'menu_label' => 'Сістэма',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Рознае',\n      'logs' => 'Дзённік',\n      'mail' => 'Пошта',\n      'shop' => 'Крама',\n      'team' => 'Каманда',\n      'users' => 'Карыстальнікі',\n      'system' => 'Сістэма',\n      'social' => 'Сацыяльнае',\n      'events' => 'Падзеі',\n      'customers' => 'Кліенты',\n      'my_settings' => 'Маі налады',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Тэма',\n    'unnamed' => 'Тэма без назвы',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Усталяваць тэмы',\n    'installed' => 'Усталяваныя тэмы',\n    'no_themes' => 'Няма тэм, ўсталяваных з крамы',\n    'recommended' => 'Рэкамендаваныя',\n    'remove_confirm' => 'Вы ўпэўнены, што жадаеце выдаліць гэтую тэму?',\n  ],\n  'plugin' => [\n    'label' => 'Плагін',\n    'unnamed' => 'Плагін без назвы',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Уключыць альбо выключыць',\n    'enable_or_disable_title' => 'Уключыць альбо выключыць плагіны',\n    'install' => 'Усталяваць плагіны',\n    'install_products' => 'Усталяваць прадукты',\n    'installed' => 'Усталяваныя плагіны',\n    'no_plugins' => 'Няма плагінаў, усталяваных з крамы',\n    'recommended' => 'Рэкамендаваныя',\n    'remove' => 'Выдаліць',\n    'refresh' => 'Абнавіць',\n    'disabled_label' => 'Выключаныя',\n    'disabled_help' => 'Выключаныя плагіны ігнаруюцца прыкладаннем',\n    'frozen_label' => 'Замарозіць абнаўленні',\n    'frozen_help' => 'Замарожаныя плагіны не будуць абнаўляцца',\n    'selected_amount' => 'Абрана плагінаў: :amount',\n    'remove_confirm' => 'Вы ўпэўнены, што жадаеце выдаліць гэты плагін?',\n    'remove_success' => 'Плагіны паспяхова выдаленыя',\n    'refresh_success' => 'Плагіны паспяхова абноўленыя',\n    'disable_confirm' => 'Вы ўпэўнены?',\n    'disable_success' => 'Плагіны паспяхова выключаныя',\n    'enable_success' => 'Плагіны паспяхова ўключаныя',\n  ],\n  'project' => [\n    'attach' => 'Далучыць праект',\n    'detach' => 'Аддзяліць праект',\n    'none' => 'Няма',\n    'id' => [\n      'missing' => 'Калі ласка, укажыце ID праекту, які Вы жадаеце выкарыстоўваць',\n    ],\n    'detach_confirm' => 'Вы ўпэўнены, што жадаеце аддзяліць гэты праект?',\n    'unbind_success' => 'Праект быў аддзелены',\n  ],\n  'settings' => [\n    'search' => 'Пошук',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Патрабуецца падключэнне SSL',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Унікальнае імя, каб звяртацца да шаблону',\n    'test_send' => 'Адправіць тэставае паведамленне',\n    'test_confirm' => 'Адправіць тэставае паведамленне на адрас :email. Працягнуць?',\n    'creating' => 'Стварэнне шаблону...',\n    'creating_layout' => 'Стварэнне макету...',\n    'saving' => 'Захаванне шаблону...',\n    'saving_layout' => 'Захаванне макету...',\n    'delete_confirm' => 'Выдаліць гэты шаблон?',\n    'delete_layout_confirm' => 'Выдаліць гэты макет?',\n    'deleting' => 'Выдаленне шаблону...',\n    'deleting_layout' => 'Выдаленне макету...',\n    'sending' => 'Адпраўленне тэставага паведамлення...',\n    'return' => 'Вярнуцца да спісу шаблонаў',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Аўтар',\n    'core_build' => 'Зборка :build',\n    'core_build_help' => 'Апошняя зборка даступная',\n    'themes' => 'Тэмы',\n    'plugin_version_none' => 'Новы плагін',\n    'plugin_current_version' => 'Бягучая версія',\n    'theme_new_install' => 'Усталяванне новай тэмы',\n    'theme_extracting' => 'Распакоўка тэмы: \":name\"',\n    'update_label' => 'Абнавіць праграму',\n    'update_loading' => 'Загрузка даступных абнаўленняў...',\n    'force_label' => 'Прымусіць абнаўленне',\n    'found' => [\n      'label' => 'Знойдзены новыя абнаўленні!',\n      'help' => 'Націсніце \"Абнавіць праграму\", каб пачаць абнаўленне',\n    ],\n    'none' => [\n      'label' => 'Няма абнаўленняў',\n      'help' => 'Не было знойдзена абнаўленняў',\n    ],\n    'important_action' => [\n      'empty' => 'Выберыце дзеянне',\n      'confirm' => 'Пацвердзіць абнаўленне',\n      'skip' => 'Прапусціць гэты плагін (аднойчы)',\n      'ignore' => 'Прапусціць гэта плагін (заўсёды)',\n    ],\n    'important_action_required' => 'Патрабуецца дзеянне',\n    'important_view_guide' => 'Прагледзець кіраўніцтва па абнаўленні',\n    'important_alert_text' => 'Некаторыя абнаўленні патрабуюць Вашай увагі',\n    'details_title' => 'Дэталі плагіну',\n    'details_view_homepage' => 'Прагледзець хатнюю старонку',\n    'details_changelog' => 'Гісторыя змяненняў',\n    'details_changelog_missing' => 'Няма гісторыі змяненняў',\n    'details_current_version' => 'Бягучая версія',\n    'details_author' => 'Аўтар',\n  ],\n  'server' => [\n    'connect_error' => 'Памылка падключэння да серверу',\n    'response_not_found' => 'Немагчыма знайсці сервер абнаўленняў',\n    'response_invalid' => 'Няправільны адказ з сервера',\n    'response_empty' => 'Пусты адказ с сервера',\n    'file_error' => 'Сервер не змог даставіць пакет',\n    'file_corrupt' => 'Файл з сервера прыйшоў сапсаваны',\n  ],\n  'behavior' => [\n    'missing_property' => 'Клас \":class\" павінен вызначаць уласцівасць \"$:property\", якая выкарыстоўваецца паводзінамі \":behavior\"',\n  ],\n  'config' => [\n    'not_found' => 'Немагчыма адшукаць файл канфігурацыі \":file\", вызначаны ў \":location\"',\n    'required' => 'Выкарастаная ў \":location\" канфігурацыя павінна мець значэнне для \":property\"',\n  ],\n  'zip' => [\n    'extract_failed' => 'Немагчыма выняць файл \":file\"',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Ачысціць ліст запытаў',\n    'empty_loading' => 'Ачыстка лісту запытаў...',\n    'empty_success' => 'Ліст запытаў паспяхова ачышчаны',\n    'return_link' => 'Вярнуцца да лісту запытаў',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Сістэма',\n    'manage_system_settings' => 'Кіраванне сістэмныя налады',\n    'manage_software_updates' => 'Кіраванне абнаўленнямі праграмнага забеспячэння',\n    'access_logs' => 'Прагледзець сістэмныя запісы',\n    'manage_mail_templates' => 'Кіраванне шаблонамі пошты',\n    'manage_mail_settings' => 'Кіраванне наладамі пошты',\n    'manage_other_administrators' => 'Кіраванне іншымі адміністратарамі',\n  ],\n  'media' => [\n    'invalid_path' => 'Няправільны шлях да файлу: \":path\"',\n    'folder_size_items' => 'аб\\'ект(аў)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/be/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \"Атрыбут :attribute павінен быць прыняты\",\n    \"active_url\"       => \"Атрыбут :attribute не правільны URL\",\n    \"after\"            => \"Атрыбут :attribute павінен быць датай пасля даты :date\",\n    \"alpha\"            => \"Атрыбут :attribute можа ўтрымліваць толькі літары\",\n    \"alpha_dash\"       => \"Атрыбут :attribute можа ўтрымліваць толькі літары, лічбы і злучок\",\n    \"alpha_num\"        => \"Атрыбут :attribute можа ўтрымліваць толькі літары і лічбы\",\n    \"array\"            => \"Атрыбут :attribute павінен быць масівам\",\n    \"before\"           => \"Атрыбут :attribute павінен быць датай перад датай :date\",\n    \"between\"          => [\n        \"numeric\" => \"Атрыбут :attribute павінен быць паміж :min - :max\",\n        \"file\"    => \"Атрыбут :attribute павінен быць паміж :min - :max кілабайт\",\n        \"string\"  => \"Атрыбут :attribute павінен быць паміж :min - :max сімвалаў\",\n        \"array\"   => \"Атрыбут :attribute павінен мець паміж :min - :max прадметаў\",\n    ],\n    \"confirmed\"        => \"Пацверджанне атрыбута :attribute не супадае\",\n    \"date\"             => \"Атрыбут :attribute не з'яўляецца правільнай датай\",\n    \"date_format\"      => \"Фармат атрыбута :attribute не супадае з фарматам :format\",\n    \"different\"        => \"Атрыбут :attribute і іншы атрыбут :other павінны быць рознымі\",\n    \"digits\"           => \"Атрыбут :attribute павінен складацца з :digits лічбаў\",\n    \"digits_between\"   => \"Атрыбут :attribute павінен быць паміж :min і :max лічбамі\",\n    \"email\"            => \"Фармат атрыбуту :attribute няправільны\",\n    \"exists\"           => \"Абраны атрыбут :attribute няправільны\",\n    \"image\"            => \"Атрыбут :attribute павінен быць выявай\",\n    \"in\"               => \"Абраны атрыбут :attribute няправільны\",\n    \"integer\"          => \"Атрыбут :attribute павінен быць цэлым лікам\",\n    \"ip\"               => \"Атрыбут :attribute павінен быць правільным IP адрасам\",\n    \"max\"              => [\n        \"numeric\" => \"Атрыбут :attribute не можа быць больш за :max\",\n        \"file\"    => \"Атрыбут :attribute не можа быць больш за :max кілабайт\",\n        \"string\"  => \"Атрыбут :attribute не можа быць больш за :max сімвалаў\",\n        \"array\"   => \"Атрыбут :attribute не можа мець больш за :max элементаў\",\n    ],\n    \"mimes\"            => \"Атрыбут :attribute павінен быць файлам тыпу: :values\",\n    \"extensions\"       => \"Атрыбут :attribute павінен мець пашырэнне: :values\",\n    \"min\"              => [\n        \"numeric\" => \"Атрыбут :attribute павінен быць меньш за :min\",\n        \"file\"    => \"Атрыбут :attribute павінен быць меньш за :min кілабайт\",\n        \"string\"  => \"Атрыбут :attribute павінен быць меньш чым :min сімвалаў\",\n        \"array\"   => \"Атрыбут :attribute павінен мець меньш за :min элементаў\",\n    ],\n    \"not_in\"           => \"Абраны атрыбут :attribute няправільны\",\n    \"numeric\"          => \"Атрыбут :attribute павінен быць лічбай\",\n    \"regex\"            => \"Фармат атрыбуту :attribute няправільны\",\n    \"required\"         => \"Атрыбут :attribute з'яўляецца абавязковым\",\n    \"required_if\"      => \"Атрыбут :attribute патрабуецца, калі інша поле :other роўнае :value.\",\n    \"required_with\"    => \"Атрыбут :attribute патрабуецца, калі ёсць :values\",\n    \"required_without\" => \"Атрыбут :attribute патрабуецца, калі няма :values\",\n    \"same\"             => \"Атрыбут :attribute і іншы атрыбут :other павінны супадаць\",\n    \"size\"             => [\n        \"numeric\" => \"Атрыбут :attribute павінен мець памер :size\",\n        \"file\"    => \"Атрыбут :attribute павінен быць :size кілабайт\",\n        \"string\"  => \"Атрыбут :attribute павінен быць :size сімвалаў\",\n        \"array\"   => \"Атрыбут :attribute павінен мець :size элементаў\",\n    ],\n    \"unique\"           => \"Атрыбут :attribute ужо заняты\",\n    \"url\"              => \"Фармат атрыбуту :attribute няправільны\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/be.json",
    "content": "{\n  \"Check For Updates\": \"Праверыць абнаўленні\",\n  \"Install Packages\": \"Ўсталяваць пакеты\",\n  \"Manage Themes\": \"Кіраванне тэмамі\",\n  \"Manage Plugins\": \"Кіраванне плагінамі\",\n  \"Project\": \"Праект\",\n  \"Owner\": \"Уласнік\",\n  \"Plugins\": \"Плагіны\",\n  \"Recommended\": \"Рэкамендуецца\",\n  \"Disabled\": \"Адключанае\",\n  \"Current Build\": \"Бягучая зборка\",\n  \"Updates Available\": \"Даступныя абнаўлення\",\n  \"Up to Date\": \"Сучасны\",\n  \"Latest Build\": \"Апошняя зборка\",\n  \"View Changelog\": \"Праглядзець журнал змен\",\n  \"Software Updates\": \"Абнаўленні і плагіны\",\n  \"Update the system modules and plugins.\": \"Абнаўленне сістэмы, кіраванне і ўсталяванне плагінаў і тэм\",\n  \"General\": \"Агульныя налады\",\n  \"Mail\": \"Пошта\",\n  \"Utilities\": \"Камунальныя паслугі\",\n  \"Settings\": \"Налады\",\n  \"Show All Settings\": \"Паказаць усе налады\",\n  \"Unable to find the specified settings.\": \"Не атрымалася знайці налады\",\n  \"The settings page is missing a Model definition.\": \"На старонцы налад не вызначана мадэль\",\n  \":name settings updated\": \":name налады абноўленыя\",\n  \"Return to System Settings\": \"Вярнуцца да сістэмных налад\",\n  \"Search Settings...\": \"Знайсці наладу...\",\n  \"Disable mail branding CSS\": \"Адключыць CSS брэндынгу пошты\",\n  \"Manage Sites\": \"Кіраванне сайтамі\",\n  \"Manage the websites available for this application.\": \"Кіруйце вэб-сайтамі, даступнымі для гэтага прыкладання.\",\n  \"Marketplace\": \"Рынак\",\n  \"There is no documentation provided.\": \"Няма дакументацыі\",\n  \"Documentation\": \"Дакументацыя\",\n  \"Upgrade Guide\": \"Кіраўніцтва па абнаўленні\",\n  \"License\": \"Ліцэнзія\",\n  \"Attach to Project\": \"Далучыць да праекту\",\n  \"Manage Updates\": \"Кіраванне абнаўленнямі\",\n  \"Software Update\": \"Абнаўленне праграмы\",\n  \"Return to Software Updates\": \"Вярнуцца да абнаўленняў сістэмы\",\n  \"Try Again\": \"Паспрабаваць зноў\",\n  \"Unpacking application files\": \"Распакоўка файлаў прыкладання\",\n  \"Update Failed\": \"Не атрымалася абнавіць\",\n  \"Unpacking plugin: :name\": \"Распакоўка плагіну: \\\":name\\\"\",\n  \"The primary site is used by default and cannot be deleted.\": \"Асноўны сайт выкарыстоўваецца па змаўчанні і не можа быць выдалены.\",\n  \"Disabled sites are not shown on the frontend.\": \"Адключаныя сайты не паказваюцца на інтэрфейсе.\",\n  \"Enabled in the Admin Panel\": \"Уключана ў панэлі адміністратара\",\n  \"Configuration\": \"Канфігурацыя\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Выкарыстоўвайце гэта, калі вы хочаце, каб сайт быў уключаны ў панэлі адміністратара.\",\n  \"Install\": \"Усталяваць\",\n  \"Sync Project\": \"Праект сінхранізацыі\",\n  \"Name\": \"Імя\",\n  \"Unique Code\": \"Унікальны код\",\n  \"Theme\": \"Тэма\",\n  \"Sites\": \"Сайты\",\n  \"Create Site\": \"Стварыць сайт\",\n  \"Base URL\": \"Базавы URL\",\n  \"Status\": \"Статус\",\n  \"Current default value: :value\": \"Бягучае значэнне па змаўчанні: :value\",\n  \"Locale\": \"Мясцовы\",\n  \"Timezone\": \"Часавы пояс\",\n  \"Custom application URL\": \"Карыстальніцкі URL-адрас прыкладання\",\n  \"Override the application URL when this site is active.\": \"Перавызначыць URL прыкладання, калі гэты сайт актыўны.\",\n  \"Use a CMS route prefix\": \"Выкарыстоўвайце прэфікс маршруту CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Прэфікс можа ідэнтыфікаваць гэты сайт пры выкарыстанні агульнага імя хаста.\",\n  \"Define matching hostnames\": \"Вызначце адпаведныя імёны хастоў\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Укажыце даменныя імёны і шаблоны, якія павінны выкарыстоўвацца для абслугоўвання гэтага сайта.\",\n  \"Display a style for this site\": \"Паказаць колер для гэтага сайта\",\n  \"To help identify this site, display a color in the admin panel.\": \"Каб дапамагчы ідэнтыфікаваць гэты сайт, пакажыце колер у панэлі адміністратара.\",\n  \"Save\": \"Захаваць\",\n  \"Save and Close\": \"Захаваць і зачыніць\",\n  \"Use Default\": \"Выкарыстоўваць па змаўчанні\",\n  \"Use Custom\": \"Выкарыстоўвайце Custom\",\n  \"Specify a custom locale code.\": \"Укажыце карыстальніцкі код мовы.\",\n  \"Failed\": \"Не атрымалася\",\n  \"or\": \"або\",\n  \"Code\": \"Код\",\n  \"October CMS Marketplace\": \"Кастрычніцкі CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Праект не мае плагінаў або тэм. Наведайце :link, каб дадаць.\",\n  \"Buy Now\": \"Купіць зараз\",\n  \"Updating package manager\": \"Абнаўленне дыспетчара пакетаў\",\n  \"Updating application files\": \"Загрузка файлаў прыкладання\",\n  \"Setting build number\": \"Налада нумара зборкі\",\n  \"Finishing update process\": \"Сканчэнне працэсу абнаўлення\",\n  \"Installing plugin: :name\": \"Загрузка плагіну: \\\":name\\\"\",\n  \"Finishing installation process\": \"Завяршэнне працэсу ўсталявання\",\n  \"Removing theme: :name\": \"Выдаленне тэмы: :name\",\n  \"Please specify a Theme name to install.\": \"Калі ласка, укажыце назву тэмы, каб усталяваць\",\n  \"Installing theme: :name\": \"Загрузка тэмы: \\\":name\\\"\",\n  \"Removing plugin: :name\": \"Выдаленне плагіна: :name\",\n  \"Please specify a Plugin name to install.\": \"Калі ласка, укажыце назву плагіна, каб усталяваць\",\n  \"Update process complete\": \"Працэс абнаўлення скончаны\",\n  \"Package installed successfully\": \"Плагін быў паспяхова ўсталяваны\",\n  \"Check Dependencies\": \"Праверце залежнасці\",\n  \"Install Dependencies\": \"Усталяваць залежнасці\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Адсутнічаюць залежнасці, неабходныя для правільнай працы сістэмы.\",\n  \"License Key\": \"Ліцэнзійны ключ\",\n  \"How to find your License Key\": \"Як знайсці свой ліцэнзійны ключ\",\n  \"The password attribute is required.\": \"Патрабуецца атрыбут пароля.\",\n  \"The login attribute is required.\": \"Патрабуецца атрыбут уваходу.\",\n  \"Cannot login user since they are not activated.\": \"Немагчыма ўвайсці ў сістэму, бо яны не актываваныя.\",\n  \"Cannot login user since they are banned.\": \"Карыстальнік не можа ўвайсці, бо ён забаронены.\",\n  \"Cannot login user since they are suspended.\": \"Немагчыма ўвайсці ў сістэму карыстальніка, бо ён прыпынены.\",\n  \"A user was not found with the given credentials.\": \"Не знойдзены карыстальнік з дадзенымі ўліковымі дадзенымі.\",\n  \"A user was found but the password did not match.\": \"Карыстальнік знойдзены, але пароль не супадае.\",\n  \"User is not logged in\": \"Карыстальнік не ўвайшоў у сістэму\",\n  \"Register Software\": \"Рэгістрацыя праграмнага забеспячэння\",\n  \"View the Dashboard\": \"Прагледзець панэль кіравання\",\n  \"Set the Default Dashboard\": \"Усталюйце прыборную панэль па змаўчанні\",\n  \"Log File\": \"Log File\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Паштовы штэмпель\",\n  \"No encryption\": \"Няма шыфравання\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Налады пошты\",\n  \"Manage email configuration.\": \"Кіраваць наладамі электроннай пошты\",\n  \"Sender Name\": \"Імя адпраўніка\",\n  \"Sender Email\": \"Адрас пошты адпраўніка\",\n  \"Mail Method\": \"Метад пошты\",\n  \"SMTP Address\": \"Адрас SMTP\",\n  \"SMTP Port\": \"Порт SMTP\",\n  \"SMTP Encryption Protocol\": \"Пратакол шыфравання SMTP\",\n  \"SMTP Authorization Required\": \"Патрабуецца аўтарызацыя SMTP\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Ужывайце гэты сцяжок, калі Ваш SMTP сервер патрабуе аўтарызацыю\",\n  \"Username\": \"Імя\",\n  \"Password\": \"Пароль\",\n  \"Sendmail Path\": \"Шлях sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Калі ласка, укажыце шлях дла праграмы sendmail\",\n  \"Mailgun Domain\": \"Дамен Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Калі ласка, укажыце імя дамена Mailgun\",\n  \"Mailgun Secret\": \"Сакрэт Mailgun\",\n  \"Enter your Mailgun API key.\": \"Увядзіце ключ Mailgun API\",\n  \"SES Key\": \"Ключ SES\",\n  \"Enter your SES API key\": \"Увядзіце ключ SES API\",\n  \"SES Secret\": \"Сакрэт SES\",\n  \"Enter your SES API secret key\": \"Увядзіце сакрэтны ключ SES API\",\n  \"SES Region\": \"Рэгіён SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Увядзіце рэгіён SES (e.g. us-east-1)\",\n  \"Postmark Token\": \"Жэтон паштовай маркі\",\n  \"Enter your Postmark API secret key\": \"Увядзіце сакрэтны ключ API Postmark\",\n  \"Define administrator roles\": \"Вызначце ролі адміністратара\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Абмежаваць доступ да гэтага сайта толькі адміністратарам з наступнымі ролямі.\",\n  \"Manage Backend Preferences\": \"Кіраванне перавагамі панэлі кіравання\",\n  \"Manage Code Editor Preferences\": \"Кіраванне перавагамі рэдакатару коду\",\n  \"Customize Backend Styles\": \"Наладзіць панэль кіравання\",\n  \"Mail Templates\": \"Шаблоны пошты\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Змяненне шаблонаў пошты, якія адпраўляюцца карыстальнікам і адміністратарам, змяненне макетаў\",\n  \"Event Log\": \"Ліст падзей\",\n  \"View system log messages with their recorded time and details.\": \"Прагледзець сістэмныя падзеі з іх запісаным часам і дэталямі\",\n  \"Request Log\": \"Спіс запытаў\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Прагледзець дрэнныя запыты альбо перанакіраванні, такія як \\\"Старонка не знойдзеная\\\" (404)\",\n  \"Test message sent.\": \"Тэставае паведамленне адпраўлена\",\n  \"New Layout\": \"Новы макет\",\n  \"New Template\": \"Новы шаблон\",\n  \"Template\": \"Шаблон\",\n  \"Templates\": \"Шаблоны\",\n  \"Layouts\": \"Макеты\",\n  \"Layout\": \"Макет\",\n  \"Mail Layouts\": \"Макеты пошты\",\n  \"Unique code used to refer to this template\": \"Унікальны код, каб звяртацца да шаблону\",\n  \"-- No layout --\": \"-- Няма макету --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Звычайны тэкст\",\n  \"Subject\": \"Тэма\",\n  \"Email message subject\": \"Тэма паштовага ліста\",\n  \"Description\": \"Апісанне\",\n  \"Drivers Not Installed\": \"Драйверы не ўсталяваныя\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Гэты метад пошты патрабуе, каб \\\":plugin\\\" быў усталяваны да таго, як Вы зможаце адпраўляць пошту\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID падзеі\",\n  \"Level\": \"Узровень\",\n  \"Date & Time\": \"Дата і час\",\n  \"Message\": \"Паведамленне\",\n  \"Version\": \"Версія\",\n  \"Log ID\": \"ID запісу\",\n  \"Counter\": \"Лічыльнік\",\n  \"Referers\": \"Крыніцы\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Гэты ліст адлюстроўвае спіс магчымых памылак, якія могуць ўзнікнуць у прыкладанні, напрыклад, выключэнні і адладкавая інфармацыя\",\n  \"Event\": \"Падзея\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Гэтыя запісы паказваюць спіс браузерных запытаў, якія могуць патрабаваць увагі. Напрыклад, калі наведвальнік адчыняе старонку, якой няма, будзе створаны запіс з кодам 404\",\n  \"Request\": \"Запыт\",\n  \"Event log emptied\": \"Спіс падзей паспяхова ачышчаны\",\n  \"Empty Event Log\": \"Ачысціць спіс падзей\",\n  \"Emptying Event Log...\": \"Ачыстка спісу падзей...\",\n  \"Return to Event Log\": \"Вярнуцца да спісу падзей\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Вы ўпэўнены?\",\n  \"Plugin has been removed from the file system.\": \"Плагін быў выдалены з файлавай сістэмы\",\n  \"search plugins to install...\": \"пошук плагінаў, каб усталяваць...\",\n  \"search themes to install...\": \"пошук тэм, каб усталяваць...\",\n  \"Install Theme\": \"Усталяваць тэму\",\n  \"Theme Name\": \"Імя тэма\",\n  \"Install Plugin\": \"Усталяваць плагін\",\n  \"Plugin Name\": \"Назва плагіну\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Назавіце плагін па яго ўнікальнаму коду. Напрыклад, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Назавіце тэму па яе ўнікальнаму коду. Напрыклад, RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Аб'яднальны файл \\\":name\\\" не знойдзены\"\n}"
  },
  {
    "path": "modules/system/lang/bg/client.php",
    "content": "<?php\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n    'markdowneditor' => [\n        'formatting' => 'Форматиране',\n        'quote' => 'Цитат',\n        'code' => 'Код',\n        'header1' => 'Хедър 1',\n        'header2' => 'Хедър 2',\n        'header3' => 'Хедър 3',\n        'header4' => 'Хедър 4',\n        'header5' => 'Хедър 5',\n        'header6' => 'Хедър 6',\n        'bold' => 'Подчертан',\n        'italic' => 'Наклонен',\n        'unorderedlist' => 'Неподреден Списък',\n        'orderedlist' => 'Подреден Списък',\n        'video' => 'Видео',\n        'image' => 'Изображение',\n        'link' => 'Връзка',\n        'horizontalrule' => 'Вмъкване на хоризонтална линия',\n        'fullscreen' => 'На цял екран',\n        'preview' => 'Предварителен преглед',\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Вмъкване на линк\",\n        'insert_image' => \"Вмъкване на изображение\",\n        'insert_video' => \"Вмъкване на видео файл\",\n        'insert_audio' => \"Вмъкване на звуков файл\",\n        'invalid_file_empty_insert' => \"Моля, изберете файл за да го вмъкнете като линк.\",\n        'invalid_file_single_insert' => \"Моля, изберете един файл.\",\n        'invalid_image_empty_insert' => \"Моля, изберете изображение(я) за да вмъкнете.\",\n        'invalid_video_empty_insert' => \"Моля, изберете видео файл за вмъкване.\",\n        'invalid_audio_empty_insert' => \"Моля, изберете звуков файл за вмъкване.\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'Потвърди',\n        'cancel_button_text' => 'Откажи',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/bg/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Връщане към основите',\n  ],\n  'directory' => [\n    'create_fail' => 'Не може да създаде директория(папка): :name',\n  ],\n  'file' => [\n    'create_fail' => 'Не може да създаде файл: :name',\n  ],\n  'combiner' => [],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Невалиден код за сигурност (token)',\n    ],\n  ],\n  'system' => [\n    'name' => 'Система',\n    'menu_label' => 'Система',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Разни',\n      'logs' => 'Логове',\n      'mail' => 'Имейл',\n      'shop' => 'Магазин',\n      'team' => 'Екип',\n      'users' => 'Потребители',\n      'system' => 'Система',\n      'social' => 'Социален',\n      'events' => 'Събития',\n      'customers' => 'Клиенти',\n      'my_settings' => 'Моите настройки',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Тема',\n    'unnamed' => 'Тема без име',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Инсталиране на теми',\n    'installed' => 'Инсталирани теми',\n    'no_themes' => 'Няма инсталирани теми от маркета.',\n    'recommended' => 'Препоръчано',\n    'remove_confirm' => 'Наистина ли искате да премахнете тази тема?',\n  ],\n  'plugin' => [\n    'label' => 'Добавки',\n    'unnamed' => 'Без име добавка',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Включване или изключване',\n    'enable_or_disable_title' => 'Включване или изключване на добавки',\n    'install' => 'Инсталиране на добавки',\n    'install_products' => 'Инсталиране на продукти',\n    'installed' => 'Инсталирани добавки',\n    'no_plugins' => 'Няма инсталирани добавки от маркета',\n    'recommended' => 'Препоръчано',\n    'remove' => 'Премахни',\n    'refresh' => 'Презареди',\n    'disabled_label' => 'Изключен',\n    'disabled_help' => 'Добавки които са изключени се игнорират от приложението',\n    'frozen_label' => 'Замрази обновяването',\n    'frozen_help' => 'Добавки които са замразени, ще бъдат игнорирани при обновяване.',\n    'selected_amount' => 'Избрани добавки: :amount',\n    'remove_confirm' => 'Наистина ли искате да премахнете тази добавка?',\n    'remove_success' => 'Успешно премахнати добавки от системата.',\n    'refresh_success' => 'Успешно обновени добавки в системата.',\n    'disable_confirm' => 'Наистина ли искате да ги изключите?',\n    'disable_success' => 'Успешно изключени на добавките.',\n    'enable_success' => 'Успешно включване на добавките.',\n  ],\n  'project' => [\n    'attach' => 'Прикрепете Проект',\n    'detach' => 'Премахнете Проект',\n    'none' => 'Нито един',\n    'id' => [\n      'missing' => 'Моля, задайте Проект ID за да го използвате.',\n    ],\n    'detach_confirm' => 'Сигурни ли сте, че искате да премахнете този Проект?',\n    'unbind_success' => 'Този Проект е премахнат успешно.',\n  ],\n  'settings' => [\n    'search' => 'Търсене',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL връзка се изисква.',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Уникален име за обозначаване на този шаблон',\n    'test_send' => 'Изпрати тестово съобщение',\n    'test_confirm' => 'Тестово съобщение ще бъде изпратено до :email. Продължавам?',\n    'creating' => 'Създаване на Шаблон...',\n    'creating_layout' => 'Създаване на Оформление...',\n    'saving' => 'Запазване на Шаблон...',\n    'saving_layout' => 'Запазване на Оформление...',\n    'delete_confirm' => 'Наистина ли искате да изтриете този Шаблон?',\n    'delete_layout_confirm' => 'Наистина ли искате да изтриете това Оформление?',\n    'deleting' => 'Изтриване на Шаблон...',\n    'deleting_layout' => 'Изтриване на Оформление...',\n    'sending' => 'Изпращане на тестово съобщение...',\n    'return' => 'Назад към списъка с шаблон',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Автор',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Изработка :build',\n    'core_build_help' => 'Последни изработка е на разположение.',\n    'themes' => 'Теми',\n    'plugin_version_none' => 'Нова Добавка',\n    'plugin_current_version' => 'Текуща версия',\n    'theme_new_install' => 'Нова инсталация на Тема.',\n    'theme_extracting' => 'Разопаковане на Тема: :name',\n    'update_label' => 'актуализация на софтуер',\n    'update_loading' => 'Зареждане на наличните актуализации...',\n    'force_label' => 'Принудителна актуализация',\n    'found' => [\n      'label' => 'Намерени нови актуализации!',\n      'help' => 'Кликнете \"Софтуерна Актуализация\", за да започнете процеса на актуализиране.',\n    ],\n    'none' => [\n      'label' => 'Няма актуализации',\n      'help' => 'Няма намерени нови актуализации.',\n    ],\n    'important_action' => [\n      'empty' => 'Изберете действие',\n      'confirm' => 'Потвърждаване на актуализация',\n      'skip' => 'Пропусни тази добавка (само веднъж)',\n      'ignore' => 'Пропусни тази добавка (винаги)',\n    ],\n    'important_action_required' => 'Изисква действие',\n    'important_view_guide' => 'Вижте ръководство за актуализация',\n    'important_alert_text' => 'Някои актуализации на които трябва да обърнете внимание.',\n    'details_title' => 'Детайли за добавка',\n    'details_view_homepage' => 'Виж начална страница',\n    'details_current_version' => 'Текуща версия',\n    'details_author' => 'Автор',\n  ],\n  'server' => [\n    'connect_error' => 'Грешка при свързването със сървъра.',\n    'response_not_found' => 'Сървърът за актуализация не може да бъде намерен.',\n    'response_invalid' => 'Невалиден отговор от сървъра.',\n    'response_empty' => 'Празен отговор от сървъра.',\n    'file_error' => 'Сървър не успя да достави пакета.',\n    'file_corrupt' => 'Файл от сървъра е развален (разрушен).',\n  ],\n  'behavior' => [\n    'missing_property' => 'Класът :class трябва да има свойството $:property използвано :behavior поведение.',\n  ],\n  'config' => [\n    'not_found' => 'Не може да се намери конфигурационен файл :file определен за :location.',\n    'required' => 'Конфигурация използва в :location трябва да предостави стойност \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Не може да се разопакова (извлече) ядрото на файл \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Изтрии заявките в регистъра',\n    'empty_loading' => 'Изтриване на заявките в регистъра...',\n    'empty_success' => 'Успешно изчистване дневника (регистъра) на заявките..',\n    'return_link' => 'Назад към регистъра на заявките',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Система',\n    'manage_system_settings' => 'Управление на системните настройки',\n    'manage_software_updates' => 'Управление на софтуерни актуализации',\n    'access_logs' => 'Вижте системните логове',\n    'manage_mail_templates' => 'Управление на шаблони за електронна поща',\n    'manage_mail_settings' => 'Управление на настройките за поща',\n    'manage_other_administrators' => 'Управление на други администратори',\n  ],\n  'media' => [\n    'invalid_path' => 'Невалиден път за файл е посочено: \\':path\\'.',\n    'folder_size_items' => 'предмет(и)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/bg/validation.php",
    "content": "<?php\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n    \"accepted\"         => \"Този :attribute трябва да се приеме.\",\n    \"active_url\"       => \"Този :attribute не е валидно URL.\",\n    \"after\"            => \"Този :attribute трябва да е дата след :date.\",\n    \"alpha\"            => \"Този :attribute може само да съдържа букви.\",\n    \"alpha_dash\"       => \"Този :attribute може само да съдържа букви, числа, и тирета.\",\n    \"alpha_num\"        => \"Този :attribute може само да съдържа букви и числа.\",\n    \"array\"            => \"Този :attribute трябва да е масив.\",\n    \"before\"           => \"Този :attribute трябва да бъде дата преди :date.\",\n    \"between\"          => [\n        \"numeric\" => \"Този :attribute трябва да бъде между :min - :max.\",\n        \"file\"    => \"Този :attribute трябва да бъде между :min - :max килобайта.\",\n        \"string\"  => \"Този :attribute трябва да бъде между :min - :max знака.\",\n        \"array\"   => \"Този :attribute must have between :min - :max елементи.\",\n    ],\n    \"confirmed\"        => \"Този :attribute потвърждението не съответства.\",\n    \"date\"             => \"Този :attribute не е валидна дата.\",\n    \"date_format\"      => \"Този :attribute не съответства на формата :format.\",\n    \"different\"        => \"Този :attribute и :other трябва да бъдат различенни.\",\n    \"digits\"           => \"Този :attribute трябва да е :digits цифри.\",\n    \"digits_between\"   => \"Този :attribute трябва да бъде между :min and :max цифри.\",\n    \"email\"            => \"Този :attribute е с невалиден формат.\",\n    \"exists\"           => \"Този избран :attribute е невалиден.\",\n    \"image\"            => \"Този :attribute трябва да е изображение.\",\n    \"in\"               => \"Този избран :attribute е невалиден.\",\n    \"integer\"          => \"Този :attribute трябва да е цяло число.\",\n    \"ip\"               => \"Този :attribute трябва да е валиден IP адрес.\",\n    \"max\"              => [\n        \"numeric\" => \"Този :attribute не може да бъде по-голяма от :max.\",\n        \"file\"    => \"Този :attribute не може да бъде по-голяма от :max килобайта.\",\n        \"string\"  => \"Този :attribute не може да бъде по-голяма от :max знака.\",\n        \"array\"   => \"Този :attribute не трябва да има повече :max елементи.\",\n    ],\n    \"mimes\"            => \"Този :attribute трябва да бъде файл от тип: :values.\",\n    \"extensions\"       => \"Този :attribute трябва да има разширение: :values.\",\n    \"min\"              => [\n        \"numeric\" => \"Този :attribute трябва да е поне :min.\",\n        \"file\"    => \"Този :attribute трябва да е поне :min килобайта.\",\n        \"string\"  => \"Този :attribute трябва да е поне :min знака.\",\n        \"array\"   => \"Този :attribute трябва да има поне :min елемента.\",\n    ],\n    \"not_in\"           => \"Този избран :attribute е невалиден.\",\n    \"numeric\"          => \"Този :attribute трябва да е число.\",\n    \"regex\"            => \"Този :attribute е с невалиден формат.\",\n    \"required\"         => \"Този :attribute е задължително поле.\",\n    \"required_if\"      => \"Този :attribute е задължително поле когато :other е :value.\",\n    \"required_with\"    => \"Този :attribute е задължително поле когато :values е предоставен.\",\n    \"required_without\" => \"Този :attribute е задължително поле когато :values не е предоставен.\",\n    \"same\"             => \"Този :attribute и :other трябва да съвпадат.\",\n    \"size\"             => [\n        \"numeric\" => \"Този :attribute трябва да е :size.\",\n        \"file\"    => \"Този :attribute трябва да е :size килобайта.\",\n        \"string\"  => \"Този :attribute трябва да е :size знака.\",\n        \"array\"   => \"Този :attribute трябва да съдържа :size елементи.\",\n    ],\n    \"unique\"           => \"Този :attribute е вече зает.\",\n    \"url\"              => \"Този :attribute е с невалиден формат.\",\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n    'custom' => [],\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n    'attributes' => [],\n];\n"
  },
  {
    "path": "modules/system/lang/bg.json",
    "content": "{\n  \"Check For Updates\": \"Провери за актуализации\",\n  \"Install Packages\": \"Инсталирайте пакети\",\n  \"Manage Themes\": \"Управление на теми\",\n  \"Manage Plugins\": \"Управление на добавки\",\n  \"Project\": \"Проект\",\n  \"Owner\": \"Собственик\",\n  \"Plugins\": \"Добавки\",\n  \"Recommended\": \"Препоръчва се\",\n  \"Disabled\": \"Изключено\",\n  \"Current Build\": \"Текуща изработка\",\n  \"Updates Available\": \"Налични актуализации\",\n  \"Up to Date\": \"Актуален\",\n  \"Latest Build\": \"Най-новата сборка\",\n  \"View Changelog\": \"Вижте дневника на промените\",\n  \"Software Updates\": \"Актуализация\",\n  \"Update the system modules and plugins.\": \"Актуализиране на системата, управление и инсталиране на добавки и теми.\",\n  \"General\": \"Общи\",\n  \"Mail\": \"поща\",\n  \"Utilities\": \"комунални услуги\",\n  \"Settings\": \"Настройки\",\n  \"Show All Settings\": \"Показване на всички настройки\",\n  \"Unable to find the specified settings.\": \"Неуспешно намиране на конкретните Настройки.\",\n  \"The settings page is missing a Model definition.\": \"Страницата за Настройки липсва дефиниция на модел.\",\n  \":name settings updated\": \"Настройките за :name бяха успешно променени.\",\n  \"Return to System Settings\": \"Връщане към системните настройки.\",\n  \"Search Settings...\": \"Намерете настройка...\",\n  \"Disable mail branding CSS\": \"Деактивирайте CSS за брандиране на поща\",\n  \"Manage Sites\": \"Управление на сайтове\",\n  \"Manage the websites available for this application.\": \"Управлявайте уебсайтовете, налични за това приложение.\",\n  \"Marketplace\": \"Пазар\",\n  \"There is no documentation provided.\": \"Не е предоставена документация.\",\n  \"Documentation\": \"Документация\",\n  \"Upgrade Guide\": \"Ръководство За Ъпгрейд\",\n  \"License\": \"Разрешително\",\n  \"Attach to Project\": \"Закачете за Проект\",\n  \"Manage Updates\": \"Управление Актуализации\",\n  \"Software Update\": \"Софтуерни Актуализации\",\n  \"Return to Software Updates\": \"Назад към система за актуализация\",\n  \"Try Again\": \"Опитай отново\",\n  \"Unpacking application files\": \"Разопаковане на файловете на приложението\",\n  \"Update Failed\": \"Актуализация се провали\",\n  \"Unpacking plugin: :name\": \"Разопаковане на Добавка: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Основният сайт се използва по подразбиране и не може да бъде изтрит.\",\n  \"Disabled sites are not shown on the frontend.\": \"Деактивираните сайтове не се показват в интерфейса.\",\n  \"Enabled in the Admin Panel\": \"Активирано в административния панел\",\n  \"Configuration\": \"Конфигурация\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Използвайте това, ако искате сайтът да бъде активиран в административния панел.\",\n  \"Install\": \"Инсталирай\",\n  \"Sync Project\": \"Синхронизиране на проекта\",\n  \"Name\": \"Име\",\n  \"Unique Code\": \"Уникален код\",\n  \"Theme\": \"Тема\",\n  \"Sites\": \"сайтове\",\n  \"Create Site\": \"Създаване на сайт\",\n  \"Base URL\": \"Основен URL адрес\",\n  \"Status\": \"Статус\",\n  \"Current default value: :value\": \"Текуща стойност по подразбиране: :value\",\n  \"Locale\": \"Местен\",\n  \"Timezone\": \"Часова зона\",\n  \"Custom application URL\": \"Персонализиран URL адрес на приложението\",\n  \"Override the application URL when this site is active.\": \"Замени URL адреса на приложението, когато този сайт е активен.\",\n  \"Use a CMS route prefix\": \"Използвайте префикс на CMS маршрут\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Префиксът може да идентифицира този сайт, когато се използва споделено име на хост.\",\n  \"Define matching hostnames\": \"Дефинирайте съвпадащи имена на хостове\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Посочете имена на домейни и модели, които трябва да се използват за обслужване на този сайт.\",\n  \"Display a style for this site\": \"Показване на цвят за този сайт\",\n  \"To help identify this site, display a color in the admin panel.\": \"За да помогнете за идентифицирането на този сайт, покажете цвят в административния панел.\",\n  \"Save\": \"Запазване\",\n  \"Save and Close\": \"Запази и затвори\",\n  \"Use Default\": \"Използвай първоначалните\",\n  \"Use Custom\": \"Използвайте Custom\",\n  \"Specify a custom locale code.\": \"Посочете персонализиран код за локализация.\",\n  \"Failed\": \"Се провали\",\n  \"or\": \"или\",\n  \"Code\": \"Код\",\n  \"October CMS Marketplace\": \"Октомври CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Проектът няма плъгини или теми. Посетете връзката :, за да добавите някои.\",\n  \"Buy Now\": \"Купи сега\",\n  \"Updating package manager\": \"Мениджърът на пакети се актуализира\",\n  \"Updating application files\": \"Изтеглянето на файловете на приложението\",\n  \"Setting build number\": \"Задаване на номер на компилация\",\n  \"Finishing update process\": \"Завършване на инсталационния процес\",\n  \"Installing plugin: :name\": \"Изтегляне на Добавка: :name\",\n  \"Finishing installation process\": \"Завършване на инсталационния процес.\",\n  \"Removing theme: :name\": \"Премахване на тема: : име\",\n  \"Please specify a Theme name to install.\": \"Моля, укажете име на Темата за инсталиране.\",\n  \"Installing theme: :name\": \"Изтегляне на Тема: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Премахване на плъгина: :име\",\n  \"Please specify a Plugin name to install.\": \"Моля, укажете име на Добавката за инсталиране.\",\n  \"Update process complete\": \"Процесът на актуализация е извършена успешно.\",\n  \"Package installed successfully\": \"Добавката е инсталирана успешно.\",\n  \"Check Dependencies\": \"Проверете зависимостите\",\n  \"Install Dependencies\": \"Инсталиране на зависимости\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Липсват зависимости, необходими за правилното функциониране на системата.\",\n  \"License Key\": \"Лицензионен ключ\",\n  \"How to find your License Key\": \"Как да намерите вашия лицензен ключ\",\n  \"The password attribute is required.\": \"Атрибутът парола е задължителен.\",\n  \"The login attribute is required.\": \"Атрибутът за влизане е задължителен.\",\n  \"Cannot login user since they are not activated.\": \"Потребителят не може да влезе, тъй като не е активиран.\",\n  \"Cannot login user since they are banned.\": \"Потребителят не може да влезе, тъй като е забранен.\",\n  \"Cannot login user since they are suspended.\": \"Потребителят не може да влезе, тъй като е спрян.\",\n  \"A user was not found with the given credentials.\": \"Не е намерен потребител с дадените идентификационни данни.\",\n  \"A user was found but the password did not match.\": \"Беше намерен потребител, но паролата не съвпадаше.\",\n  \"User is not logged in\": \"Потребителят не е влязъл\",\n  \"Register Software\": \"Регистрирайте софтуер\",\n  \"View the Dashboard\": \"Преглед на таблото\",\n  \"Set the Default Dashboard\": \"Задайте таблото за управление по подразбиране\",\n  \"Log File\": \"Регистрационен файл\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"НЕГОВОТО\",\n  \"Postmark\": \"Пощенско клеймо\",\n  \"No encryption\": \"Без криптиране\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Имейл настройка\",\n  \"Manage email configuration.\": \"Управление на конфигурацията на имейли.\",\n  \"Sender Name\": \"Име на подателя\",\n  \"Sender Email\": \"Имейл на подателя\",\n  \"Mail Method\": \"Имейл метод\",\n  \"SMTP Address\": \"SMTP адрес\",\n  \"SMTP Port\": \"SMTP порт\",\n  \"SMTP Encryption Protocol\": \"SMTP протокол за криптиране\",\n  \"SMTP Authorization Required\": \"SMTP изисква потвърждение.\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Отбележете тази отметка ако вашия SMTP сървър изисква потвърждение.\",\n  \"Username\": \"Потребител\",\n  \"Password\": \"Парола\",\n  \"Sendmail Path\": \"Sendmail директория\",\n  \"Please specify the path of the sendmail program.\": \"Моля, посочете директория на Sendmail програмата.\",\n  \"Mailgun Domain\": \"Mailgun домейн\",\n  \"Please specify the Mailgun domain name.\": \"Моля, посочете домейна за Mailgun.\",\n  \"Mailgun Secret\": \"Mailgun тайна\",\n  \"Enter your Mailgun API key.\": \"Въведете своя Mailgun API ключ.\",\n  \"SES Key\": \"SES ключ\",\n  \"Enter your SES API key\": \"Въведете вашия SES API ключ\",\n  \"SES Secret\": \"SES Secret\",\n  \"Enter your SES API secret key\": \"Въведете вашия SES API таен ключ\",\n  \"SES Region\": \"SES регион\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Въведете вашия SES регион (напр. us-east-1)\",\n  \"Postmark Token\": \"Токен за пощенско клеймо\",\n  \"Enter your Postmark API secret key\": \"Въведете своя таен ключ за API на Postmark\",\n  \"Define administrator roles\": \"Определете администраторски роли\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Ограничете достъпа до този сайт само до администратор със следните роли.\",\n  \"Group\": \"Група\",\n  \"Create Group\": \"Създай Група\",\n  \"Site Group\": \"Група от сайтове\",\n  \"Site Groups\": \"Групи от сайтове\",\n  \"Manage Site Groups\": \"Управление на Групи от сайтове\",\n  \"Group Name\": \"Име на групата\",\n  \"All Sites\": \"Всички сайтове\",\n  \"Manage Backend Preferences\": \"Управление на предпочитанията на админ панела\",\n  \"Manage Code Editor Preferences\": \"Управление на предпочитанията на редактор на код\",\n  \"Customize Backend Styles\": \"Персонализиране на админ панела\",\n  \"Mail Templates\": \"Имейл шаблони\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modify the mail templates that are sent to users and administrators, manage email layouts.\",\n  \"Mail Branding\": \"Mail Branding\",\n  \"Modify the colors and appearance of mail templates.\": \"Промяна на цветове и външен вид на имейл шаблоните.\",\n  \"Event Log\": \"Дневник (регистъра) на събития\",\n  \"View system log messages with their recorded time and details.\": \"Вижте съобщения в системните дневници с времето на записване и детайлите.\",\n  \"Request Log\": \"Дневник (регистър) на заявките\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Преглед на лоши или пренасочени заявки, като например \\\"страницата не е намерена (404)\\\".\",\n  \"Log Settings\": \"Настройки на лог\",\n  \"Specify which areas should use logging.\": \"Specify which areas should use logging.\",\n  \"Test message sent.\": \"Тестово съобщение е изпратено успешно.\",\n  \"New Layout\": \"Ново оформление\",\n  \"New Partial\": \"New Partial\",\n  \"New Template\": \"Нов шаблони\",\n  \"Template\": \"Шаблон\",\n  \"Templates\": \"Шаблони\",\n  \"Layouts\": \"Оформления\",\n  \"Partials\": \"Partials\",\n  \"Partial\": \"Partial\",\n  \"Mail Partials\": \"Mail Partials\",\n  \"Layout\": \"Оформление\",\n  \"Mail Layouts\": \"Имейл оформления\",\n  \"Unique code used to refer to this template\": \"Уникаленен код за обозначаване на този шаблон\",\n  \"-- No layout --\": \"-- Няма оформление --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Обикновен текст\",\n  \"Disable automatic inline CSS\": \"Disable automatic inline CSS\",\n  \"Options\": \"Options\",\n  \"Subject\": \"Тема\",\n  \"Email message subject\": \"Тема на имейла\",\n  \"Description\": \"Описание\",\n  \"Drivers Not Installed\": \"Няма инсталирани драйвъри.\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Този имейл метод изисква добавката \\\":plugin\\\" да се инсталира преди да можете да изпращате имейл.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Събитие ID\",\n  \"Level\": \"Ниво\",\n  \"Date & Time\": \"Дата и час\",\n  \"Message\": \"Съобщение\",\n  \"Logging\": \"Logging\",\n  \"Log Bad Requests\": \"Log Bad Requests\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Заявки на браузъра, които може да изискват внимание, като например грешки 404.\",\n  \"Log Theme Changes\": \"Log Theme Changes\",\n  \"When a change is made to the theme using the backend.\": \"When a change is made to the theme using the backend.\",\n  \"Log System Events\": \"Log System Events\",\n  \"Store system events in the database in addition to the file-based log.\": \"Store system events in the database in addition to the file-based log.\",\n  \"Background\": \"Фон\",\n  \"Body background\": \"Body background\",\n  \"Content background\": \"Content background\",\n  \"Inner content background\": \"Inner content background\",\n  \"Buttons\": \"Бутони\",\n  \"Button text color\": \"Button text color\",\n  \"Primary button background\": \"Primary button background\",\n  \"Positive button background\": \"Positive button background\",\n  \"Negative button background\": \"Negative button background\",\n  \"Typography\": \"Типография\",\n  \"Header color\": \"Header color\",\n  \"Headings color\": \"Headings color\",\n  \"Text color\": \"Text color\",\n  \"Link color\": \"Link color\",\n  \"Footer color\": \"Footer color\",\n  \"Borders\": \"Borders\",\n  \"Body border color\": \"Body border color\",\n  \"Subcopy border color\": \"Subcopy border color\",\n  \"Table border color\": \"Table border color\",\n  \"Components\": \"Components\",\n  \"Panel background\": \"Panel background\",\n  \"Promotion background\": \"Promotion background\",\n  \"Promotion border color\": \"Promotion border color\",\n  \"Customize Mail Appearance\": \"Customize Mail Appearance\",\n  \"Version\": \"Версия\",\n  \"Enabled\": \"Enabled\",\n  \"Latest\": \"Последни\",\n  \"Log ID\": \"Входно ID\",\n  \"Counter\": \"Брояч\",\n  \"Referers\": \"Референти\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Този дневник (регистър) показва списък на потенциални грешки, които възникват в приложението, като изключения и информацията за грешки.\",\n  \"Event\": \"Event\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Този дневник показва списък с заявките на браузъра, които могат да изискват внимание. Например, ако един посетител отваря CMS страница, която не може да се намери, се създава запис с код за грешка 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Заявка\",\n  \"Event log emptied\": \"Успешно изчистване дневника (регистъра) на събитията.\",\n  \"Empty Event Log\": \"Изтрии събитията в регистъра\",\n  \"Emptying Event Log...\": \"Изтриване на събитията в регистъра...\",\n  \"Return to Event Log\": \"Назад към регистъра на събитията\",\n  \"Installed\": \"Инсталирано\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Сигурни ли сте че искате да ги презаредите?\",\n  \"Reset Plugin Data\": \"Reset Plugin Data\",\n  \"Enable Plugins\": \"Enable Plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Are you sure you want to :action these plugins?\",\n  \"enable\": \"enable\",\n  \"disable\": \"disable\",\n  \"Disable Plugins\": \"Disable Plugins\",\n  \"Select Action...\": \"Изберете действие...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Добавката е премахната от системата.\",\n  \"search plugins to install...\": \"потърси добавка за инсталиране...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"потърси тема за инсталиране...\",\n  \"Install Theme\": \"Инсталиране на Тема\",\n  \"Theme Name\": \"Име на тема\",\n  \"Install Plugin\": \"Инсталиране на Добавка\",\n  \"Plugin Name\": \"Име на добавка\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Именувайте добавката с уникално име. Например: RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Именувайте темата с уникално име. Например: RainLab.Vanilla\",\n  \"Select Installation Method\": \"Изберете метод на инсталиране\",\n  \"Make a Copy (Recommended)\": \"Направи копие (Препоръчително)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Инсталирай с Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Промени статус\",\n  \"Site Definitions\": \"Site Definitions\",\n  \"System Updates\": \"Актуализация\",\n  \"Find a Setting...\": \"Намерете настройка...\",\n  \"Return to System Updates\": \"Назад към система за актуализация\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\"\n}"
  },
  {
    "path": "modules/system/lang/ca/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatar',\n        'quote' => 'Quota',\n        'code' => 'Codi',\n        'header1' => 'Títol 1',\n        'header2' => 'Títol 2',\n        'header3' => 'Títol 3',\n        'header4' => 'Títol 4',\n        'header5' => 'Títol 5',\n        'header6' => 'Títol 6',\n        'bold' => 'Negreta',\n        'italic' => 'Cursiva',\n        'unorderedlist' => 'Llista desordenada',\n        'orderedlist' => 'Llista ordenada',\n        'video' => 'Vídeo',\n        'image' => 'Imatge',\n        'link' => 'Enllaç',\n        'horizontalrule' => 'Inserir línia horitzontal',\n        'fullscreen' => 'Pantalla completa',\n        'preview' => 'Previsualitzar',\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Inserir enllaç a mèdia',\n        'insert_image' => 'Inserir imatge de mèdia',\n        'insert_video' => 'Inserir vídeo de mèdia',\n        'insert_audio' => 'Inserir àudio de mèdia',\n        'invalid_file_empty_insert' => \"Si us plau selecciona l'arxiu a enllaçar.\",\n        'invalid_file_single_insert' => 'Si us plau selecciona un sol arxiu.',\n        'invalid_image_empty_insert' => 'Si us plau selecciona imatge(s) per inserir.',\n        'invalid_video_empty_insert' => 'Si us plau selecciona un arxiu de vídeo per inserir.',\n        'invalid_audio_empty_insert' => \"Si us plau selecciona un arxiu d'àudio per inserir.\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Cancel·lar',\n        'widget_remove_confirm' => 'Eliminar aquest widget?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Mes anterior',\n        'nextMonth' => 'Mes següent',\n        'months' => ['Gener', 'Febrer', 'Març', 'Abril', 'Maig', 'Juny', 'Juliol', 'Agost', 'Setembre', 'Octubre', 'Novembre', 'Desembre'],\n        'weekdays' => ['Diumenge', 'Dilluns', 'Dimarts', 'Dimecres', 'Dijous', 'Divendres', 'Dissabte'],\n        'weekdaysShort' => ['Dg', 'Dl', 'Dm', 'Dx', 'Dj', 'Dv', 'Ds']\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'tots'\n        ],\n        'dates' => [\n            'all' => 'tots',\n            'filter_button_text' => 'Filtrar',\n            'reset_button_text'  => 'Reiniciar',\n            'date_placeholder' => 'Data',\n            'after_placeholder' => 'Després',\n            'before_placeholder' => 'Abans'\n        ],\n        'numbers' => [\n            'all' => 'tots',\n            'filter_button_text' => 'Filtrar',\n            'reset_button_text'  => 'Reiniciar',\n            'min_placeholder' => 'Mín',\n            'max_placeholder' => 'Màx'\n        ]\n\n    ],\n    'eventlog' => [\n        'show_stacktrace' => \"Mostrar l'stacktrace\",\n        'hide_stacktrace' => \"Ocultar l'stacktrace\",\n        'tabs' => [\n            'formatted' => 'Formatat',\n            'raw' => 'Cru',\n        ],\n        'editor' => [\n            'title' => 'Editor de codi font',\n            'description' => \"El teu sistema operatiu hauria d'estar configurat per escoltar un d'aquests esquemes d'URL.\",\n            'openWith' => 'Obrir amb',\n            'remember_choice' => \"Recordar l'opció seleccionada durant aquesta sessió\",\n            'open' => 'Obrir',\n            'cancel' => 'Cancel·lar'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/ca/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Tornant als bàsics',\n  ],\n  'directory' => [\n    'create_fail' => 'No es pot crear el directori: :name',\n  ],\n  'file' => [\n    'create_fail' => 'No es pot crear l\\'arxiu: :name',\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistema',\n    'menu_label' => 'Sistema',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Misc',\n      'logs' => 'Registres',\n      'mail' => 'Correu',\n      'shop' => 'Botiga',\n      'team' => 'Equip',\n      'users' => 'Usuaris',\n      'system' => 'Sistema',\n      'social' => 'Social',\n      'backend' => 'Backend',\n      'events' => 'Esdeveniments',\n      'customers' => 'Clients',\n      'my_settings' => 'Les meves opcions',\n      'notifications' => 'Notificacions',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Tema sense nom',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Instal·lar temes',\n    'installed' => 'Temes instal·lats',\n    'no_themes' => 'No hi ha temes instal·lats des del mercat.',\n    'recommended' => 'Recomanats',\n    'remove_confirm' => 'Estàs segur que vols eliminar aquest tema?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Plugin sense nom',\n    'name' => [],\n    'by_author' => 'Per :name',\n  ],\n  'plugins' => [\n    'install' => 'Instal·lar plugins',\n    'install_products' => 'Instal·lar productes',\n    'installed' => 'Plugins instal·lats',\n    'no_plugins' => 'No hi ha plugins instal·lats des del mercat.',\n    'recommended' => 'Recomanats',\n    'plugin_label' => 'Plugin',\n    'check_yes' => 'Sí',\n    'check_no' => 'No',\n    'unfrozen' => 'Actualitzacions habilitades',\n    'freeze' => 'deshabilitar actualitzacions per',\n    'unfreeze' => 'habilitar actualitzacions per',\n    'refresh' => 'reiniciar',\n    'remove' => 'eliminar',\n    'freeze_label' => 'Deshabilitar actualitzacions',\n    'unfreeze_label' => 'Habilitar actualitzacions',\n    'freeze_success' => 'Actualitzacions deshabilitades pels plugins seleccionats.',\n    'unfreeze_success' => 'Actualitzacions habilitades pels plugins seleccionats.',\n    'enable_success' => 'Plugins seleccionats habilitats.',\n    'disable_success' => 'Plugins seleccionats deshabilitats.',\n    'refresh_success' => 'Plugins seleccionats reiniciats.',\n    'remove_confirm' => 'Estàs segur que vols eliminar els plugins seleccionats? Aixo també n\\'eliminarà totes les dades associades.',\n    'remove_success' => 'Plugins seleccionats eliminats.',\n  ],\n  'project' => [\n    'attach' => 'Vincular projecte',\n    'detach' => 'desvincular projecte',\n    'none' => 'Cap',\n    'id' => [\n      'missing' => 'Si us plau indica una ID de projecte.',\n    ],\n    'detach_confirm' => 'Estàs segur que vols desvincular aquest projecte?',\n    'unbind_success' => 'El projecte ha estat desvinculat.',\n  ],\n  'settings' => [\n    'search' => 'Cercar',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Connexió SSL requerida',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Nom únic utilitzat per referir-se a aquesta plantilla',\n    'test_send' => 'Enviar missatge de prova',\n    'test_confirm' => 'Enviar missatge de prova a :email. Continuar?',\n    'creating' => 'Creant plantilla...',\n    'creating_layout' => 'Creant disposició...',\n    'saving' => 'Guardant plantilla...',\n    'saving_layout' => 'Guardant disposició...',\n    'delete_confirm' => 'Eliminar aquesta plantilla?',\n    'delete_layout_confirm' => 'Eliminar aquesta disposició?',\n    'deleting' => 'Eliminant plantilla...',\n    'deleting_layout' => 'Eliminant disposició...',\n    'sending' => 'Enviant missatge de prova...',\n    'return' => 'Tornar a la llista de plantilles',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Capçalera',\n      'paragraph' => 'Això és un paràgraf amb Lorem Ipsum i un enllaç. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Element',\n        'description' => 'Descripció',\n        'price' => 'Preu',\n        'centered' => 'Centrat',\n        'right_aligned' => 'Alineat a la dreta',\n      ],\n      'buttons' => [\n        'primary' => 'Botó primari',\n        'positive' => 'Botó positiu',\n        'negative' => 'Botó negatiu',\n      ],\n      'panel' => 'No és fantàstic aquest panell?',\n      'more' => 'Una mica més de text',\n      'promotion' => 'Codi de cupó: OCTOBER',\n      'subcopy' => 'Això és un subcopy de l\\'email',\n      'thanks' => 'Gràcies',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Plugin no trobat',\n    'core_build' => 'Versió :build',\n    'core_build_help' => 'La última versió està disponible.',\n    'themes' => 'Temes',\n    'plugin_version_none' => 'Nou plugin',\n    'plugin_current_version' => 'Versió actual',\n    'theme_new_install' => 'Instal·lació de nou tema.',\n    'theme_extracting' => 'Desempaquetant tema: :name',\n    'update_label' => 'Actualitzar software',\n    'update_loading' => 'Carregant actualitzacions disponibles...',\n    'force_label' => 'Forçar actualització',\n    'found' => [\n      'label' => 'S\\'han trobat noves actualitzacions!',\n      'help' => 'Clica \\'Actualitzar software\\' per començar el procès d\\'actualització.',\n    ],\n    'none' => [\n      'label' => 'No hi ha actualitzacions',\n      'help' => 'No s\\'han trobat noves actualitzacions.',\n    ],\n    'important_action' => [\n      'empty' => 'Seleccionar acció',\n      'confirm' => 'Confirmar actualització',\n      'skip' => 'Saltar aquesta actualització (només aquest cop)',\n      'ignore' => 'Saltar aquesta actualització (sempre)',\n    ],\n    'important_action_required' => 'Acció requerida',\n    'important_view_guide' => 'Veure la guia d\\'actualització',\n    'important_view_release_notes' => 'Veure les notes de la versió',\n    'important_alert_text' => 'Algunes actualitzacions necessiten la teva atenció.',\n    'details_title' => 'Detalls del plugin',\n    'details_view_homepage' => 'Veure pàgina web',\n    'details_changelog' => 'Registre de canvis',\n    'details_changelog_missing' => 'No s\\'ha proveït registre de canvis.',\n    'details_current_version' => 'Versió actual',\n    'details_author' => 'Autor',\n  ],\n  'server' => [\n    'connect_error' => 'Error connectant al servidor.',\n    'response_not_found' => 'El servidor d\\'actualitzacions no s\\'ha pogut trobat.',\n    'response_invalid' => 'Resposta invàlida del servidor.',\n    'response_empty' => 'Resposta buida del servidor.',\n    'file_error' => 'El servidor no ha pogut proporcionar el paquet.',\n    'file_corrupt' => 'L\\'arxiu del servidor està corrupte.',\n  ],\n  'behavior' => [\n    'missing_property' => 'La classe :class ha de definir la propietat $:property utilitzada pel comportament :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'No ha estat possible trobar l\\'arxiu de configuració :file definit per :location.',\n    'required' => 'La configuració utilitzada a :location ha de proporcionar un valor \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'No ha estat possible extreure el fitxer de core \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Buidar registre de peticions',\n    'empty_loading' => 'Buidant registre de peticions...',\n    'empty_success' => 'Registre de peticions buit',\n    'return_link' => 'Tornar al registre de peticions',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistema',\n    'manage_system_settings' => 'Gestionar opcions del sistema',\n    'manage_software_updates' => 'Gestionar actualitzacions de software',\n    'access_logs' => 'Veure registres del sistema',\n    'manage_mail_templates' => 'Gestionar plantilles de correu',\n    'manage_mail_settings' => 'Gestionar opcions de correu',\n    'manage_other_administrators' => 'Gestionar altres administradors',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Ruta d\\'arxiu invàlida: \\':path\\'.',\n    'folder_size_items' => 'element(s)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/ca/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'             => ':attribute ha de ser acceptat.',\n    'active_url'           => ':attribute no és una URL vàlida.',\n    'after'                => ':attribute ha de ser una data posterior a :date.',\n    'after_or_equal'       => ':attribute ha de ser una data posterior o igual a :date.',\n    'alpha'                => ':attribute només pot contenir lletres.',\n    'alpha_dash'           => ':attribute només pot contenir lletres, números, i guions.',\n    'alpha_num'            => ':attribute només pot contenir lletres i números.',\n    'array'                => ':attribute ha de ser un array.',\n    'before'               => ':attribute ha de ser una data anterior a :date.',\n    'before_or_equal'      => ':attribute ha de ser una data anterior o igual a :date.',\n    'between'              => [\n        'numeric' => \":attribute ha d'estar entre :min i :max.\",\n        'file'    => \":attribute ha d'estar entre :min i :max kilobytes.\",\n        'string'  => \":attribute ha d'estar entre :min i :max caràcters.\",\n        'array'   => \":attribute ha de tenir entre :min i :max elements.\",\n    ],\n    'boolean'              => 'El camp :attribute ha de ser cert o fals.',\n    'confirmed'            => 'La confirmació de :attribute no quadra.',\n    'date'                 => ':attribute no és una data vàlida.',\n    'date_format'          => ':attribute no quadra amb el format :format.',\n    'different'            => ':attribute i :other han de ser diferents.',\n    'digits'               => ':attribute ha de tenir :digits digits.',\n    'digits_between'       => ':attribute ha de tenir entre :min i :max digits.',\n    'dimensions'           => \":attribute té dimensions d'imatge invàlides.\",\n    'distinct'             => 'El camp :attribute té un valor duplicat.',\n    'email'                => \":attribute ha de ser una adreça d'email vàlida.\",\n    'exists'               => 'El valor de :attribute seleccionat és invàlid.',\n    'file'                 => ':attribute ha de ser un arxiu.',\n    'filled'               => 'El camp :attribute ha de tenir un valor.',\n    'image'                => ':attribute ha de ser una imatge.',\n    'in'                   => 'El valor de :attribute és invàlid.',\n    'in_array'             => 'El camp :attribute no existeix a :other.',\n    'integer'              => ':attribute ha de ser un número enter.',\n    'ip'                   => ':attribute ha de ser una adreça IP vàlida.',\n    'ipv4'                 => ':attribute ha de ser una adreça IPv4 vàlida.',\n    'ipv6'                 => ':attribute ha de ser una adreça IPv6 vàlida.',\n    'json'                 => ':attribute ha de ser una cadena JSON vàlida.',\n    'max'                  => [\n        'numeric' => ':attribute no pot ser més gran de :max.',\n        'file'    => ':attribute no pot ser més gran de :max kilobytes.',\n        'string'  => ':attribute no pot ser més gran de :max caràcters.',\n        'array'   => ':attribute no pot tenir més de :max elements.',\n    ],\n    'mimes'                => ':attribute ha de ser un arxiu del tipus: :values.',\n    'mimetypes'            => ':attribute ha de ser un arxiu del tipus: :values.',\n    'min'                  => [\n        'numeric' => ':attribute ha de ser al menys :min.',\n        'file'    => ':attribute ha de ser al menys de :min kilobytes.',\n        'string'  => ':attribute ha de ser al menys de :min caràcters.',\n        'array'   => ':attribute ha de tenir al menys :min elements.',\n    ],\n    'not_in'               => 'El valor de :attribute seleccionat és invàlid.',\n    'numeric'              => ':attribute ha de ser un número.',\n    'present'              => \":attribute ha d'estar present.\",\n    'regex'                => 'El format de :attribute és invàlid.',\n    'required'             => 'El camp :attribute és obligatori.',\n    'required_if'          => 'El camp :attribute és obligatori quan :other és :value.',\n    'required_unless'      => 'El camp :attribute és obligatori a menys que :other és un de :values.',\n    'required_with'        => 'El camp :attribute és obligatori quan :values està present.',\n    'required_with_all'    => 'El camp :attribute és obligatori quan :values estan presents.',\n    'required_without'     => 'El camp :attribute és obligatori quan :values no està present.',\n    'required_without_all' => 'El camp :attribute és obligatori quan cap de :values estan presents.',\n    'same'                 => 'El camp :attribute i :other han de ser iguals.',\n    'size'                 => [\n        'numeric' => ':attribute ha de ser :size.',\n        'file'    => ':attribute ha de ser de :size kilobytes.',\n        'string'  => ':attribute ha de ser de :size caràcters.',\n        'array'   => ':attribute ha de tenir :size elements.',\n    ],\n    'string'               => ':attribute ha de ser una cadena de text.',\n    'timezone'             => ':attribute ha de ser una zona vàlida.',\n    'unique'               => ':attribute ha de ser únic.',\n    'uploaded'             => ':attribute ha fallat al pujar.',\n    'url'                  => 'El format de :attribute és invàlid.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/ca.json",
    "content": "{\n  \"Check For Updates\": \"Comprovar actualitzacions\",\n  \"Install Packages\": \"Instal·leu paquets\",\n  \"Manage Themes\": \"Gestionar temes\",\n  \"Manage Plugins\": \"Gestionar plugins\",\n  \"Project\": \"Projecte\",\n  \"Owner\": \"Autor\",\n  \"Plugins\": \"Plugins\",\n  \"Recommended\": \"Recomanat\",\n  \"Disabled\": \"Deshabilitats\",\n  \"Current Build\": \"Versió actual\",\n  \"Updates Available\": \"Actualitzacions disponibles\",\n  \"Up to Date\": \"Actualitzat\",\n  \"Latest Build\": \"Última construcció\",\n  \"View Changelog\": \"Veure registre de canvis\",\n  \"Software Updates\": \"Actualitzacions i plugins\",\n  \"Update the system modules and plugins.\": \"Actualitzar el sistema, gestionar i instal·lar plugins i temes.\",\n  \"General\": \"General\",\n  \"Mail\": \"Correu\",\n  \"Utilities\": \"Utilitats\",\n  \"Settings\": \"Opcions\",\n  \"Show All Settings\": \"Mostra tots els paràmetres\",\n  \"Unable to find the specified settings.\": \"No s'han pogut trobar les opcions especificades.\",\n  \"The settings page is missing a Model definition.\": \"La pàgina d'opcions no té una definició de Model.\",\n  \":name settings updated\": \"Opcions de :name actualitzades\",\n  \"Return to System Settings\": \"Tornar a les opcions del sistema\",\n  \"Search Settings...\": \"Cerca una configuració...\",\n  \"Disable mail branding CSS\": \"Desactiveu la marca de correu CSS\",\n  \"Manage Sites\": \"Gestiona els llocs\",\n  \"Manage the websites available for this application.\": \"Gestioneu els llocs web disponibles per a aquesta aplicació.\",\n  \"Marketplace\": \"Mercat\",\n  \"There is no documentation provided.\": \"No s'ha proveït documentació.\",\n  \"Documentation\": \"Documentació\",\n  \"Upgrade Guide\": \"Guia d'actualització\",\n  \"License\": \"Llicència\",\n  \"Attach to Project\": \"Vincular a projecte\",\n  \"Manage Updates\": \"Gestionar actualitzacions\",\n  \"Software Update\": \"Actualització de software\",\n  \"Return to Software Updates\": \"Tornar a les actualitzacions de sistema\",\n  \"Try Again\": \"Tornar-ho a intentar\",\n  \"Unpacking application files\": \"Desempaquetant arxius de l'aplicació\",\n  \"Update Failed\": \"Actualització fallida\",\n  \"Unpacking plugin: :name\": \"Desempaquetant plugin: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"El lloc principal s'utilitza de manera predeterminada i no es pot suprimir.\",\n  \"Disabled sites are not shown on the frontend.\": \"Els llocs desactivats no es mostren a la interfície.\",\n  \"Enabled in the Admin Panel\": \"Habilitat al tauler d'administració\",\n  \"Configuration\": \"Configuració\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Utilitzeu-ho si voleu que el lloc estigui habilitat al tauler d'administració.\",\n  \"Install\": \"Instal·lar\",\n  \"Sync Project\": \"Projecte de sincronització\",\n  \"Name\": \"Nom\",\n  \"Unique Code\": \"Codi únic\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Llocs\",\n  \"Create Site\": \"Crear un lloc\",\n  \"Base URL\": \"URL base\",\n  \"Status\": \"Estat\",\n  \"Current default value: :value\": \"Valor predeterminat actual: :value\",\n  \"Locale\": \"Local\",\n  \"Timezone\": \"Fus horari\",\n  \"Custom application URL\": \"URL de l'aplicació personalitzada\",\n  \"Override the application URL when this site is active.\": \"Substituïu l'URL de l'aplicació quan aquest lloc estigui actiu.\",\n  \"Use a CMS route prefix\": \"Utilitzeu un prefix de ruta CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Un prefix pot identificar aquest lloc quan s'utilitza un nom d'amfitrió compartit.\",\n  \"Define matching hostnames\": \"Definiu noms d'amfitrió coincidents\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Especifiqueu els noms de domini i els patrons que s'han d'utilitzar per servir aquest lloc.\",\n  \"Display a style for this site\": \"Mostra un color per a aquest lloc\",\n  \"To help identify this site, display a color in the admin panel.\": \"Per ajudar a identificar aquest lloc, mostra un color al tauler d'administració.\",\n  \"Save\": \"Desa\",\n  \"Save and Close\": \"Desa i tanca\",\n  \"Use Default\": \"Ús per defecte\",\n  \"Use Custom\": \"Utilitzeu personalitzat\",\n  \"Specify a custom locale code.\": \"Especifiqueu un codi local personalitzat.\",\n  \"Failed\": \"Fracassat\",\n  \"or\": \"o\",\n  \"Code\": \"Codi\",\n  \"October CMS Marketplace\": \"Mercat CMS d'octubre\",\n  \"Visit the :link to add some.\": \"El projecte no té complements ni temes. Visiteu l'enllaç: per afegir-ne alguns.\",\n  \"Buy Now\": \"Compra ara\",\n  \"Updating package manager\": \"S'està actualitzant el gestor de paquets\",\n  \"Updating application files\": \"Descarregant arxius de l'aplicació\",\n  \"Setting build number\": \"Assignant número de versió\",\n  \"Finishing update process\": \"Finalitzant el procès d'actualització\",\n  \"Installing plugin: :name\": \"Descarregant plugin: :name\",\n  \"Finishing installation process\": \"Finalitzant el procès d'instal·lació\",\n  \"Removing theme: :name\": \"Eliminació del tema: :nom\",\n  \"Please specify a Theme name to install.\": \"Si us plau indica un nom de tema per a instal·lar.\",\n  \"Installing theme: :name\": \"Descarregant tema: :name\",\n  \"Removing plugin: :name\": \"Eliminació del connector: :name\",\n  \"Please specify a Plugin name to install.\": \"Si us plau indica un nom de plugin per a instal·lar.\",\n  \"Update process complete\": \"Procès d'actualització completat\",\n  \"Package installed successfully\": \"Plugin instal·lat correctament\",\n  \"Check Dependencies\": \"Comproveu les dependències\",\n  \"Install Dependencies\": \"Instal·leu dependències\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Falten dependències necessàries perquè el sistema funcioni correctament.\",\n  \"License Key\": \"Clau de llicència\",\n  \"How to find your License Key\": \"Com trobar la vostra clau de llicència\",\n  \"The password attribute is required.\": \"L'atribut de contrasenya és obligatori.\",\n  \"The login attribute is required.\": \"L'atribut d'inici de sessió és obligatori.\",\n  \"Cannot login user since they are not activated.\": \"No es pot iniciar sessió d'usuari perquè no està activat.\",\n  \"Cannot login user since they are banned.\": \"No es pot iniciar la sessió d'usuari perquè estan prohibits.\",\n  \"Cannot login user since they are suspended.\": \"No es pot iniciar la sessió d'usuari perquè estan suspesos.\",\n  \"A user was not found with the given credentials.\": \"No s'ha trobat cap usuari amb les credencials proporcionades.\",\n  \"A user was found but the password did not match.\": \"S'ha trobat un usuari però la contrasenya no coincideix.\",\n  \"User is not logged in\": \"L'usuari no ha iniciat sessió\",\n  \"Register Software\": \"Registre de programari\",\n  \"View the Dashboard\": \"Veure l'escriptori\",\n  \"Set the Default Dashboard\": \"Estableix el tauler predeterminat\",\n  \"Log File\": \"Arxiu de registre\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Segell postal\",\n  \"No encryption\": \"Sense encriptació\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Configuració de correu\",\n  \"Manage email configuration.\": \"Gestionar la Configuració de correu.\",\n  \"Sender Name\": \"Nom del remitent\",\n  \"Sender Email\": \"Email del remitent\",\n  \"Mail Method\": \"Mètode de correu\",\n  \"SMTP Address\": \"Adreça SMTP\",\n  \"SMTP Port\": \"Port SMTP\",\n  \"SMTP Encryption Protocol\": \"Protocol d'encriptació SMTP\",\n  \"SMTP Authorization Required\": \"Autorització SMTP requerida\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Marca aquesta casella si el teu servidor SMTP server requereix autoritzaci.\",\n  \"Username\": \"Nom d'usuari\",\n  \"Password\": \"Contrasenya\",\n  \"Sendmail Path\": \"Ruta de sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Si us plau especifica una ruta per l'executable de sendmail.\",\n  \"Mailgun Domain\": \"Domini de Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Si us plau especifica el nom de domini de Mailgun.\",\n  \"Mailgun Secret\": \"Secret de Mailgun\",\n  \"Enter your Mailgun API key.\": \"Introdueix la teva clau API de Mailgun.\",\n  \"SES Key\": \"Clau de SES\",\n  \"Enter your SES API key\": \"Introdueix la teva clau API de SES\",\n  \"SES Secret\": \"Secret de SES\",\n  \"Enter your SES API secret key\": \"Introdueix el teu secret d'API de SES\",\n  \"SES Region\": \"Regió de SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Introdueix la teva regió de SES (e.g. us-east-1)\",\n  \"Postmark Token\": \"Fitxa de segell postal\",\n  \"Enter your Postmark API secret key\": \"Introduïu la vostra clau secreta de l'API Postmark\",\n  \"Define administrator roles\": \"Definir els rols d'administrador\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restringeix l'accés a aquest lloc només als administradors amb les funcions següents.\",\n  \"Manage Backend Preferences\": \"Gestionar preferències del panell\",\n  \"Manage Code Editor Preferences\": \"Gestionar preferències de l'editor de codi\",\n  \"Customize Backend Styles\": \"Personalitzar el panell\",\n  \"Mail Templates\": \"Plantilles de correu\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modifica les plantilles de correu que s'envien als usuaris i administradors, gestiona disposicions de correu.\",\n  \"Mail Branding\": \"Branding del correu\",\n  \"Modify the colors and appearance of mail templates.\": \"Modificar els colors i l'aparença de les plantilles de correu.\",\n  \"Event Log\": \"Registre d'esdeveniments\",\n  \"View system log messages with their recorded time and details.\": \"Veure els missatges de registre del sistema amb les hores i detalls guardats.\",\n  \"Request Log\": \"Registre de peticions\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Veure peticions incorrectes o redirigides, com ara Pàgina no trobada (404).\",\n  \"Log Settings\": \"Opcions de registre\",\n  \"Specify which areas should use logging.\": \"Especificar quines àrees s'han de registrar.\",\n  \"Test message sent.\": \"Missatge de prova enviat.\",\n  \"New Layout\": \"Nova disposició\",\n  \"New Partial\": \"Nou parcial\",\n  \"New Template\": \"Nova plantilla\",\n  \"Template\": \"Plantilla\",\n  \"Templates\": \"Plantilles\",\n  \"Layouts\": \"Disposicions\",\n  \"Partials\": \"Parcials\",\n  \"Partial\": \"Parcial\",\n  \"Mail Partials\": \"Parcials de correu\",\n  \"Layout\": \"Disposició\",\n  \"Mail Layouts\": \"Disposicions de correu\",\n  \"Unique code used to refer to this template\": \"Codi únic utilitzat per referir-se a aquesta plantilla\",\n  \"-- No layout --\": \"-- Cap disposició --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Text pla\",\n  \"Subject\": \"Assumpte\",\n  \"Email message subject\": \"Assumpte del missatge\",\n  \"Description\": \"Descripció\",\n  \"Drivers Not Installed\": \"Drivers no instal·lats\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Aquest mètode de correu requereix instal·lar el plugin \\\":plugin\\\" abans de que puguis enviar correu.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID d'esdeveniment\",\n  \"Level\": \"Nivell\",\n  \"Date & Time\": \"Data i hora\",\n  \"Message\": \"Missatge\",\n  \"Logging\": \"Registre\",\n  \"Log Bad Requests\": \"Registrar peticions incorrectes\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Peticions de navegador que poden requerir atenció, com ara errors 404.\",\n  \"Log Theme Changes\": \"Registrar canvis del tema\",\n  \"When a change is made to the theme using the backend.\": \"Quan es fa un canvi al tema utilitzant el panell.\",\n  \"Log System Events\": \"Registrar esdeveniments del sistema\",\n  \"Store system events in the database in addition to the file-based log.\": \"Guardar esdeveniments del sistema a la base de dades a més de al fitxer de registre.\",\n  \"Background\": \"Fons\",\n  \"Body background\": \"Fons del cos\",\n  \"Content background\": \"Fons del contingut\",\n  \"Inner content background\": \"Fons del contingut intern\",\n  \"Buttons\": \"Botons\",\n  \"Button text color\": \"Color del text del botó\",\n  \"Primary button background\": \"Fons del botó primari\",\n  \"Positive button background\": \"Fons del botó positiu\",\n  \"Negative button background\": \"Fons del botó negatiu\",\n  \"Typography\": \"Tipografia\",\n  \"Header color\": \"Color de la capçalera\",\n  \"Headings color\": \"Color dels títols\",\n  \"Text color\": \"Color del text\",\n  \"Link color\": \"Color dels enllaços\",\n  \"Footer color\": \"Color del peu\",\n  \"Borders\": \"Vores\",\n  \"Body border color\": \"Color de la vora del cos\",\n  \"Subcopy border color\": \"Color de la vora del subcopy\",\n  \"Table border color\": \"Color de la vora de la taula\",\n  \"Components\": \"Components\",\n  \"Panel background\": \"Fons del panell\",\n  \"Promotion background\": \"Fons de la promoció\",\n  \"Promotion border color\": \"Color de la vora de la promoció\",\n  \"Customize Mail Appearance\": \"Personalitzar l'aparença del correu\",\n  \"Version\": \"Versió\",\n  \"Enabled\": \"Plugin habilitat\",\n  \"Log ID\": \"ID de registre\",\n  \"Counter\": \"Comptador\",\n  \"Referers\": \"Referers\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Aquest registre mostra una llista d'errors potencials que ocorren a l'aplicació, com ara excepcions o informació de depuració.\",\n  \"Event\": \"Esdeveniment\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Aquest registre mostra una llista de peticions de navegador que podrien requerir atenció. Per exemple, si un visitant obre una pàgina de CMS que no es pot trobar, es crea un registre amb l'estat 404.\",\n  \"Request\": \"Petició\",\n  \"Event log emptied\": \"Registre d'esdeveniments buit\",\n  \"Empty Event Log\": \"Buidar registre d'esdeveniments\",\n  \"Emptying Event Log...\": \"Buidant registre d'esdeveniments...\",\n  \"Return to Event Log\": \"Tornar al registre d'esdeveniments\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Estàs segur que vols reiniciar els plugins seleccionats? Això reiniciarà les dades de cada plugin, restaurant-les a l'estat inicial.\",\n  \"Reset Plugin Data\": \"Reiniciar dades del plugin\",\n  \"Enable Plugins\": \"Habilitar plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Estàs segur de que vols :action aquests plugins?\",\n  \"enable\": \"habilitar\",\n  \"disable\": \"deshabilitar\",\n  \"Disable Plugins\": \"Deshabilitar plugins\",\n  \"Select Action...\": \"Seleccionar acció...\",\n  \"Plugin has been removed from the file system.\": \"El plugin ha estat eliminat del sistema d'arxius.\",\n  \"search plugins to install...\": \"cerca plugins per instal·lar...\",\n  \"search themes to install...\": \"cerca temes per instal·lar...\",\n  \"Install Theme\": \"Instal·lar tema\",\n  \"Theme Name\": \"Nom del tema\",\n  \"Install Plugin\": \"Instal·lar plugin\",\n  \"Plugin Name\": \"Nom del plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Anomena el tema amb el seu codi únic. Per exemple, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Anomena el tema amb el seu codi únic. Per exemple, RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"L'arxiu de combinació ':name' no s'ha trobat.\"\n}"
  },
  {
    "path": "modules/system/lang/cs/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formátování',\n        'quote' => 'Citace',\n        'code' => 'Kód',\n        'header1' => 'Nadpis 1',\n        'header2' => 'Nadpis 2',\n        'header3' => 'Nadpis 3',\n        'header4' => 'Nadpis 4',\n        'header5' => 'Nadpis 5',\n        'header6' => 'Nadpis 6',\n        'bold' => 'Tučně',\n        'italic' => 'Kurzívou',\n        'unorderedlist' => 'Nečíslovaný seznam',\n        'orderedlist' => 'Číslovaný seznam',\n        'video' => 'Video',\n        'image' => 'Obrázek',\n        'link' => 'Odkaz',\n        'horizontalrule' => 'Vložit horizontální linku',\n        'fullscreen' => 'Celá obrazovka',\n        'preview' => 'Náhled',\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Vložit odkaz\",\n        'insert_image' => \"Vložit obrázek\",\n        'insert_video' => \"Vložit video\",\n        'insert_audio' => \"Vložit zvuk\",\n        'invalid_file_empty_insert' => \"Prosím vyberte soubor, na který se vloží odkaz.\",\n        'invalid_file_single_insert' => \"Vyberte jeden soubor.\",\n        'invalid_image_empty_insert' => \"Vyberte soubor(y) pro vložení.\",\n        'invalid_video_empty_insert' => \"Vyberte video soubor pro vložení.\",\n        'invalid_audio_empty_insert' => \"Vyberte audio soubor pro vložení.\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Zrušit',\n        'widget_remove_confirm' => 'Odstranit widget?',\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Předchozí měsíc',\n        'nextMonth' => 'Následující měsíc',\n        'months' => ['Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'],\n        'weekdays' => ['Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'],\n        'weekdaysShort' => ['Ne', 'Po', 'Út', 'St', 'Čt', 'Pá', 'So'],\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'Vše',\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Filtrovat',\n            'clear_button_text'  => 'Zrušit',\n        ],\n        'dates' => [\n            'all' => 'Vše',\n            'filter_button_text' => 'Filtrovat',\n            'reset_button_text'  => 'Zrušit',\n            'date_placeholder' => 'Datum',\n            'after_placeholder' => 'Po',\n            'before_placeholder' => 'Před',\n        ],\n        'numbers' => [\n            'all' => 'Vše',\n            'filter_button_text' => 'Filtrovat',\n            'reset_button_text'  => 'Zrušit',\n            'min_placeholder' => 'Minimum',\n            'max_placeholder' => 'Maximum',\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Zobrazit stacktrace',\n        'hide_stacktrace' => 'Skrýt stacktrace',\n        'tabs' => [\n            'formatted' => 'Formátováno',\n            'raw' => 'Původní (raw)',\n        ],\n        'editor' => [\n            'title' => 'Editor zdrojového kódu',\n            'description' => 'Váš operační systém by měl být konfigurován tak, aby naslouchal jednomu z těchto schémat adres URL.',\n            'openWith' => 'Otevřít v',\n            'remember_choice' => 'Zapamatovat si vybranou volbu pro tuto relaci',\n            'open' => 'Otevřít',\n            'cancel' => 'Zrušit',\n        ],\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/cs/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Návrat ke kořenům',\n  ],\n  'directory' => [\n    'create_fail' => 'Nelze vytvořit složku: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Nelze vytvořit soubor: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Neplatný bezpečnostní token',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Systém',\n    'menu_label' => 'Systém',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Ostatní',\n      'logs' => 'Protokoly',\n      'mail' => 'E-mail',\n      'shop' => 'E-shop',\n      'team' => 'Tým',\n      'users' => 'Uživatelé',\n      'system' => 'Systém',\n      'social' => 'Sociální',\n      'backend' => 'Administrace',\n      'events' => 'Události',\n      'customers' => 'Zákazníci',\n      'my_settings' => 'Moje nastavení',\n      'notifications' => 'Oznámení',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Téma',\n    'unnamed' => 'Téma bez názvu',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Instalace témat',\n    'installed' => 'Instalované téma',\n    'no_themes' => 'Žádné téma instalované z tržiště.',\n    'recommended' => 'Doporučené',\n    'remove_confirm' => 'Opravdu chcete odstranit toto téma?',\n  ],\n  'plugin' => [\n    'label' => 'Pluginy',\n    'unnamed' => 'Plugin bez jména',\n    'name' => [],\n    'by_author' => 'Vytvořil :name',\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Aktivovat, nebo deaktivovat',\n    'enable_or_disable_title' => 'Zapne, nebo vyplne pluginy',\n    'install' => 'Instalace pluginů',\n    'install_products' => 'Instalované produkty',\n    'installed' => 'Instalované pluginy',\n    'no_plugins' => 'Žádné instalované pluginy z tržiště.',\n    'recommended' => 'Doporučené',\n    'remove' => 'Odstranit',\n    'refresh' => 'Obnovit',\n    'disabled_label' => 'Neaktivní',\n    'disabled_help' => 'Neaktivní pluginy jsou kompletně ignorovány systémem.',\n    'frozen_label' => 'Zmrazit aktualizace',\n    'frozen_help' => 'Zmrazené pluginy se neaktualizují.',\n    'selected_amount' => 'Vybrané pluginy: :amount',\n    'remove_confirm' => 'Opravdu chcete odstranit tento plugin?',\n    'remove_success' => 'Plugin úspěšně odstraněn ze systému.',\n    'refresh_success' => 'Pluginy byly úspěšně obnoveny.',\n    'disable_confirm' => 'Jste si jistí?',\n    'disable_success' => 'Pluginy úspěšně deaktivovány.',\n    'enable_success' => 'Pluginy úspěšně aktivovány.',\n  ],\n  'project' => [\n    'attach' => 'Připojit projekt',\n    'detach' => 'Odpojit projekt',\n    'none' => 'Žádný',\n    'id' => [\n      'missing' => 'Zadejte vaše Projektové ID.',\n    ],\n    'detach_confirm' => 'Jste si jistí, že chcete odpojit váš projekt?',\n    'unbind_success' => 'Projekt byl úspěšně odpojen.',\n  ],\n  'settings' => [\n    'search' => 'Hledat',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Vyžadováno SSL připojení',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikátní název přes který se odkazujeme na šablonu',\n    'test_send' => 'Poslat testovací zprávu',\n    'test_confirm' => 'Opravdu chcete odeslat testovací zprávu na adresu :email?',\n    'creating' => 'Vytvářím šablonu...',\n    'creating_layout' => 'Vytvářím layout...',\n    'saving' => 'Ukládání šablony...',\n    'saving_layout' => 'Ukládání layoutu...',\n    'delete_confirm' => 'Opravdu chcete smazat šablonu?',\n    'delete_layout_confirm' => 'Opravdu chcete smazat layout?',\n    'deleting' => 'Mazání šablony...',\n    'deleting_layout' => 'Mazání layoutu...',\n    'return' => 'Zpět na seznam šablon',\n    'sending' => 'Odesílání testovací zprávy...',\n  ],\n  'mail_brand' => [],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Plugin nenalezen',\n    'core_build' => 'Sestavení :build',\n    'core_build_help' => 'Nejnovější sestavení je dostupné.',\n    'themes' => 'Témata',\n    'plugin_version_none' => 'Nový plugin',\n    'plugin_current_version' => 'Stávající verze',\n    'theme_new_install' => 'Instalace nového téma.',\n    'theme_extracting' => 'Rozbalování téma: :name',\n    'update_label' => 'Aktualizace',\n    'update_loading' => 'Načítám dostupné aktualizace...',\n    'force_label' => 'Vynutit aktualizaci',\n    'found' => [\n      'label' => 'Nová aktualizace nalezeny!',\n      'help' => 'Klikněte na Instalovat aktualizace pro spuštění aktualizace.',\n    ],\n    'none' => [\n      'label' => 'Žádné aktualizace',\n      'help' => 'Nebyly nalezeny žádné aktualizace.',\n    ],\n    'important_action' => [\n      'empty' => 'Vyberte akci',\n      'confirm' => 'Potvrdit aktualizaci',\n      'skip' => 'Přeskočit tento plugin (pouze jednou)',\n      'ignore' => 'Přeskočit tento plugin (vždy)',\n    ],\n    'important_action_required' => 'Je vyžadována akce',\n    'important_view_guide' => 'Zobrazit aktualizační příručku',\n    'important_view_release_notes' => 'Zobrazit poznámky k verzi',\n    'important_alert_text' => 'Některé aktualizace vyžadují vaší pozornost.',\n    'details_title' => 'Detaily pluginu',\n    'details_view_homepage' => 'Zobrazit domovskou stránku',\n    'details_changelog' => 'Seznam změn',\n    'details_changelog_missing' => 'Seznam změn není k dispozici.',\n    'details_current_version' => 'Stávající verze',\n    'details_author' => 'Autor',\n  ],\n  'server' => [\n    'connect_error' => 'Chyba připojení k serveru.',\n    'response_not_found' => 'Aktualizační server nebyl nalezen.',\n    'response_invalid' => 'Špatná odpověď ze serveru.',\n    'response_empty' => 'Prázdná odpověď ze serveru.',\n    'file_error' => 'Chyba stahování balíčku ze serveru.',\n    'file_corrupt' => 'Soubor stažený ze serveru je chybný.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Třída :class musí definovat parametr $:property použitý v třídě chování :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Nepovedlo se najít konfigurační soubor :file, který je definován pro :location.',\n    'required' => 'Konfigurace použitá v :location musí obsahovat hodnotu \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Nepovedlo se rozbalit soubor \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Smazat protokol požadavků',\n    'empty_loading' => 'Mazání protokolu požadavků...',\n    'empty_success' => 'Seznam požadavků úspěšně vymazán.',\n    'return_link' => 'Zpět na záznam událostí',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Systém',\n    'manage_system_settings' => 'Správa systémového nastavení',\n    'manage_software_updates' => 'Správa aktualizací',\n    'access_logs' => 'Zobrazit záznam přístupů',\n    'manage_mail_templates' => 'Správa e-mailových šablon',\n    'manage_mail_settings' => 'Správa posílání e-mailů',\n    'manage_other_administrators' => 'Správa ostatních administrátorů',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Chybně zadaná cesta: \\':path\\'.',\n    'folder_size_items' => 'soubor(ů)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/cs/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \"The :attribute must be accepted.\",\n    \"active_url\"       => \":attribute není validní URL.\",\n    \"after\"            => \":attribute musí být datum po :date.\",\n    \"alpha\"            => \":attribute musí obsahovat pouze písmena.\",\n    \"alpha_dash\"       => \":attribute musí obsahovat pouze písmena, čísla, nebo pomlčky.\",\n    \"alpha_num\"        => \":attribute může obsahovat pouze písmena nebo čísla.\",\n    \"array\"            => \":attribute musí být pole.\",\n    \"before\"           => \":attribute musí být datum před :date.\",\n    \"between\"          => [\n        \"numeric\" => \":attribute musí být mezi :min - :max.\",\n        \"file\"    => \":attribute musí být mezi :min - :max kilobytama.\",\n        \"string\"  => \":attribute musí být mezi :min - :max znaky.\",\n        \"array\"   => \":attribute musí být mezi :min - :max položkami.\",\n    ],\n    \"confirmed\"        => \":attribute potvrzení nesouhlasí.\",\n    \"date\"             => \":attribute není validní datum.\",\n    \"date_format\"      => \":attribute neodpovídá formátu :format.\",\n    \"different\"        => \":attribute a :other musí být rozdílné.\",\n    \"digits\"           => \":attribute musí být :digits číslic.\",\n    \"digits_between\"   => \":attribute musí mít mezi :min a :max číslicemi.\",\n    \"email\"            => \":attribute má nesprávný formát.\",\n    \"exists\"           => \"Vybraný atribut :attribute již existuje.\",\n    \"image\"            => \":attribute musí být obrázek.\",\n    \"in\"               => \"Vybraný atribut :attribute není správný.\",\n    \"integer\"          => \":attribute musí být číslo.\",\n    \"ip\"               => \":attribute musí být validní IP adresa.\",\n    \"max\"              => [\n        \"numeric\" => \":attribute nesmí být delší než :max.\",\n        \"file\"    => \":attribute nesmí být větší než :max kilobytes.\",\n        \"string\"  => \":attribute nesmí být větší než :max characters.\",\n        \"array\"   => \":attribute nesmí mít více než :max položek.\",\n    ],\n    \"mimes\"            => \":attribute musí být soubor následujícího typu: :values.\",\n    \"extensions\"       => \":attribute musí mít některou z následujících přípon: :values.\",\n    \"min\"              => [\n        \"numeric\" => \":attribute musí být alespoň číslo :min.\",\n        \"file\"    => \":attribute musí mít alespoň :min kilobytů.\",\n        \"string\"  => \":attribute musí mít alespoň :min znaků.\",\n        \"array\"   => \":attribute musí mít alespoň :min položek.\",\n    ],\n    \"not_in\"           => \"selected :attribute je nesprávný.\",\n    \"numeric\"          => \":attribute musí být číslo.\",\n    \"regex\"            => \":attribute formát není správný.\",\n    \"required\"         => \":attribute pole je povinné.\",\n    \"required_if\"      => \":attribute pole je povinné pokud :other je :value.\",\n    \"required_with\"    => \":attribute pole je povinné pokud :values je uvedeno.\",\n    \"required_without\" => \":attribute pole je povinné pokud :values není uvedeno.\",\n    \"same\"             => \":attribute a :other musí souhlasit.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute musí mít velikost :size.\",\n        \"file\"    => \":attribute musí mít :size kilobytů.\",\n        \"string\"  => \":attribute musí mít :size znaků.\",\n        \"array\"   => \":attribute musí obsahovat :size položek.\",\n    ],\n    \"unique\"           => \":attribute je již použitý.\",\n    \"url\"              => \":attribute formát není správný.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/cs.json",
    "content": "{\n  \"Check For Updates\": \"Kontrola aktualizací\",\n  \"Install Packages\": \"Nainstalujte balíčky\",\n  \"Manage Themes\": \"Správa motivů\",\n  \"Manage Plugins\": \"Správa pluginů\",\n  \"Project\": \"Projekt\",\n  \"Owner\": \"Vlastník\",\n  \"Plugins\": \"Pluginy\",\n  \"Recommended\": \"Doporučeno\",\n  \"Disabled\": \"Neaktivní\",\n  \"Current Build\": \"Aktuální sestavení\",\n  \"Updates Available\": \"Dostupné aktualizace\",\n  \"Up to Date\": \"Aktuální\",\n  \"Latest Build\": \"Nejnovější sestavení\",\n  \"View Changelog\": \"Zobrazit seznam změn\",\n  \"Software Updates\": \"Aktualizace a pluginy\",\n  \"Update the system modules and plugins.\": \"Aktualizace systému, správa a instalace pluginů a témat.\",\n  \"General\": \"Obecné\",\n  \"Mail\": \"Pošta\",\n  \"Utilities\": \"Utility\",\n  \"Settings\": \"Nastavení\",\n  \"Show All Settings\": \"Zobrazit všechna nastavení\",\n  \"Unable to find the specified settings.\": \"Takové nastavení se nepovedlo najít.\",\n  \"The settings page is missing a Model definition.\": \"Stránka s nastavením vyžaduje definovat Model.\",\n  \":name settings updated\": \"Nastavení pro :name byla úspěšně uložena.\",\n  \"Return to System Settings\": \"Zpět do systémového nastavení\",\n  \"Search Settings...\": \"Najít nastavení...\",\n  \"Disable mail branding CSS\": \"Zakažte CSS pro branding pošty\",\n  \"Manage Sites\": \"Spravovat weby\",\n  \"Manage the websites available for this application.\": \"Spravujte webové stránky dostupné pro tuto aplikaci.\",\n  \"Marketplace\": \"Tržiště\",\n  \"There is no documentation provided.\": \"Není uvedená žádná dokumentace.\",\n  \"Documentation\": \"Dokumentace\",\n  \"Upgrade Guide\": \"Instalační příručka\",\n  \"License\": \"Licence\",\n  \"Attach to Project\": \"Připojit k projektu\",\n  \"Manage Updates\": \"Správa aktualizací\",\n  \"Software Update\": \"Aktualizace software\",\n  \"Return to Software Updates\": \"Zpět na systémové aktualizace\",\n  \"Try Again\": \"Zkusit znovu\",\n  \"Unpacking application files\": \"Rozbalování aplikačních souborů\",\n  \"Update Failed\": \"Aktualizace selhala\",\n  \"Unpacking plugin: :name\": \"Rozbalování pluginu: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Primární web se používá ve výchozím nastavení a nelze jej odstranit.\",\n  \"Disabled sites are not shown on the frontend.\": \"Zakázané weby se na frontendu nezobrazují.\",\n  \"Enabled in the Admin Panel\": \"Povoleno na panelu administrátora\",\n  \"Configuration\": \"Konfigurace\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Toto použijte, pokud chcete, aby byl web povolen na panelu administrátora.\",\n  \"Install\": \"Nainstalujte\",\n  \"Sync Project\": \"Synchronizovat projekt\",\n  \"Name\": \"Název\",\n  \"Unique Code\": \"Unikátní kód\",\n  \"Theme\": \"Téma\",\n  \"Sites\": \"Weby\",\n  \"Create Site\": \"Vytvořit web\",\n  \"Base URL\": \"Základní URL\",\n  \"Status\": \"Postavení\",\n  \"Current default value: :value\": \"Aktuální výchozí hodnota: :value\",\n  \"Locale\": \"Místní\",\n  \"Timezone\": \"Časové pásmo\",\n  \"Custom application URL\": \"Adresa URL vlastní aplikace\",\n  \"Override the application URL when this site is active.\": \"Když je tento web aktivní, přepište adresu URL aplikace.\",\n  \"Use a CMS route prefix\": \"Použijte předponu trasy CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Předpona může identifikovat tento web při použití sdíleného názvu hostitele.\",\n  \"Define matching hostnames\": \"Definujte odpovídající názvy hostitelů\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Zadejte názvy domén a vzory, které je třeba použít k poskytování tohoto webu.\",\n  \"Display a style for this site\": \"Zobrazit barvu pro tento web\",\n  \"To help identify this site, display a color in the admin panel.\": \"Chcete-li pomoci identifikovat tento web, zobrazte barvu na panelu administrátora.\",\n  \"Save\": \"Uložit\",\n  \"Save and Close\": \"Uložit a zavřít\",\n  \"Use Default\": \"Použít výchozí\",\n  \"Use Custom\": \"Použijte Vlastní\",\n  \"Specify a custom locale code.\": \"Zadejte vlastní kód národního prostředí.\",\n  \"Failed\": \"Nepodařilo se\",\n  \"or\": \"nebo\",\n  \"Code\": \"Kód\",\n  \"October CMS Marketplace\": \"Říjnové CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Projekt nemá žádné pluginy ani motivy. Navštivte odkaz: a přidejte nějaké.\",\n  \"Buy Now\": \"Kup nyní\",\n  \"Updating package manager\": \"Aktualizace správce balíčků\",\n  \"Updating application files\": \"Stahování aplikačních souborů\",\n  \"Setting build number\": \"Nastavení čísla sestavení\",\n  \"Finishing update process\": \"Dokončování aktualizace\",\n  \"Installing plugin: :name\": \"Stahování pluginu: :name\",\n  \"Finishing installation process\": \"Dokončování instalace\",\n  \"Removing theme: :name\": \"Odebírání motivu: :name\",\n  \"Please specify a Theme name to install.\": \"Zadejte prosím jméno téma které chcete instalovat.\",\n  \"Installing theme: :name\": \"Stahuji téma: :name\",\n  \"Extracting theme: :name\": \"Rozbalování šablony: :name\",\n  \"Seeding theme: :name\": \"Vkládání dat šablony :name\",\n  \"Removing plugin: :name\": \"Odebírání pluginu: :name\",\n  \"Please specify a Plugin name to install.\": \"Zadejte prosím jméno pluginu které chcete instalovat.\",\n  \"Update process complete\": \"Aktualizace systému proběhla úspěšně.\",\n  \"Package installed successfully\": \"Plugin byl úspěšně nainstalován.\",\n  \"Check Dependencies\": \"Zkontrolujte závislosti\",\n  \"Install Dependencies\": \"Nainstalujte závislosti\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Chybí závislosti potřebné pro správné fungování systému.\",\n  \"License Key\": \"Licenční klíč\",\n  \"How to find your License Key\": \"Jak najít svůj licenční klíč\",\n  \"The password attribute is required.\": \"Atribut heslo je povinný.\",\n  \"The login attribute is required.\": \"Atribut login je povinný.\",\n  \"Cannot login user since they are not activated.\": \"Uživatele nelze přihlásit, protože nejsou aktivováni.\",\n  \"Cannot login user since they are banned.\": \"Nelze se přihlásit, protože je zakázán.\",\n  \"Cannot login user since they are suspended.\": \"Nelze se přihlásit, protože jsou pozastaveni.\",\n  \"A user was not found with the given credentials.\": \"Nebyl nalezen uživatel s danými přihlašovacími údaji.\",\n  \"A user was found but the password did not match.\": \"Uživatel byl nalezen, ale heslo se neshodovalo.\",\n  \"User is not logged in\": \"Uživatel není přihlášen\",\n  \"Register Software\": \"Registrovat software\",\n  \"View the Dashboard\": \"Zobrazit plochu\",\n  \"Set the Default Dashboard\": \"Nastavte výchozí řídicí panel\",\n  \"Log File\": \"Soubor protokolu\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Bez šifrování\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Nastavení e-mailů\",\n  \"Manage email configuration.\": \"Konfigurace posílání e-mailových zpráv.\",\n  \"Sender Name\": \"Jméno odesílatele\",\n  \"Sender Email\": \"E-mail odesílatele\",\n  \"Mail Method\": \"Metoda posílání zpráv\",\n  \"SMTP Address\": \"SMTP adresa\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"SMTP šifrovací protokol\",\n  \"SMTP Authorization Required\": \"Vyžadována SMTP autorizace\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Zaškrtněte pokud váš SMTP vyžaduje autorizaci.\",\n  \"Username\": \"Uživatelské jméno\",\n  \"Password\": \"Heslo\",\n  \"Sendmail Path\": \"Sendmail cesta\",\n  \"Please specify the path of the sendmail program.\": \"Zadejte prosím cestu k sendmail programu.\",\n  \"Mailgun Domain\": \"Mailgun doména (domain)\",\n  \"Please specify the Mailgun domain name.\": \"Zadejte doménové jméno (domain name) pro Mailgun.\",\n  \"Mailgun Secret\": \"Mailgun tajný klíč (secret)\",\n  \"Enter your Mailgun API key.\": \"Zadejte váš Mailgun API klíč.\",\n  \"SES Key\": \"Klíč SES\",\n  \"Enter your SES API key\": \"Zadejte váš SES API klíč\",\n  \"SES Secret\": \"SES tajný klíč (secret)\",\n  \"Enter your SES API secret key\": \"Zadejte váš SES API tajný klíč (secret key)\",\n  \"SES Region\": \"SES oblast (region)\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Zadejte region SES (např. us-east-1)\",\n  \"Postmark Token\": \"Postmark Token\",\n  \"Enter your Postmark API secret key\": \"Zadejte tajný klíč Postmark API\",\n  \"Define administrator roles\": \"Definujte administrátorské role\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Omezit přístup k tomuto webu pouze na správce s následujícími rolemi.\",\n  \"Group\": \"Skupina\",\n  \"Create Group\": \"Vytvořit skupinu\",\n  \"Site Group\": \"Skupina webů\",\n  \"Site Groups\": \"Skupiny webů\",\n  \"Manage Site Groups\": \"Správa skupin webů\",\n  \"Group Name\": \"Název skupiny\",\n  \"All Sites\": \"Všechny weby\",\n  \"Manage Backend Preferences\": \"Správa nastavení administrace\",\n  \"Manage Code Editor Preferences\": \"Správa nastavení editoru kódu\",\n  \"Customize Backend Styles\": \"Nastavení administrace\",\n  \"Mail Templates\": \"E-mailové šablony\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Úprava e-mailových šablon, které se posílají uživatelům a administrátorům. Úprava e-mailových layoutů.\",\n  \"Mail Branding\": \"Personalizace e-mailu\",\n  \"Modify the colors and appearance of mail templates.\": \"Změňte barvy a vzhled e-mailových šablon.\",\n  \"Event Log\": \"Protokol událostí\",\n  \"View system log messages with their recorded time and details.\": \"Zobrazení seznamu událostí s časem a detaily.\",\n  \"Request Log\": \"Protokol požadavků\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Seznam špatných požadavků, jako třeba nenalezené stránky (404).\",\n  \"Log Settings\": \"Nastavení protokolů\",\n  \"Specify which areas should use logging.\": \"Určete, které oblasti by měly používat protokolování.\",\n  \"Test message sent.\": \"Testovací zpráva byla úspěšně odeslána.\",\n  \"New Layout\": \"Nový layout\",\n  \"New Partial\": \"Nová dílčí šablona\",\n  \"New Template\": \"Nová šablona\",\n  \"Template\": \"Šablona\",\n  \"Templates\": \"Šablony\",\n  \"Layouts\": \"Layouty\",\n  \"Partials\": \"Dílčí šablony\",\n  \"Partial\": \"Dílčí šablona\",\n  \"Mail Partials\": \"E-mailové dílčí šablony\",\n  \"Layout\": \"Rozvržení\",\n  \"Mail Layouts\": \"E-mailové layouty\",\n  \"Unique code used to refer to this template\": \"Unikátní kód přes který se odkazujeme na šablonu\",\n  \"-- No layout --\": \"-- žádný layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Čistý text\",\n  \"Disable automatic inline CSS\": \"Zakázat automatické vložené CSS\",\n  \"Options\": \"Možnosti\",\n  \"Subject\": \"Předmět\",\n  \"Email message subject\": \"Předmět e-mailové zprávy\",\n  \"Description\": \"Popis\",\n  \"Drivers Not Installed\": \"Ovladač není nainstalovaný\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Tato metoda posílání e-mailů vyžaduje nainstalovaný plugin \\\":plugin\\\" ještě před odesláním první zprávy.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID události\",\n  \"Level\": \"Úroveň\",\n  \"Date & Time\": \"Datum a čas\",\n  \"Message\": \"Zpráva\",\n  \"Logging\": \"Protokolování\",\n  \"Log Bad Requests\": \"Zaznamenávat špatné požadavky\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Požadavky prohlížeče, které mohou vyžadovat pozornost, například chyby 404.\",\n  \"Log Theme Changes\": \"Zaznamenávat změny témat\",\n  \"When a change is made to the theme using the backend.\": \"Když dojde ke změně tématu pomocí administrace.\",\n  \"Log System Events\": \"Zaznamenávat systémové události\",\n  \"Store system events in the database in addition to the file-based log.\": \"Ukládat systémové události do databáze a zároveň do souboru protokolu.\",\n  \"Background\": \"Pozadí\",\n  \"Body background\": \"Pozadí obsahu (body)\",\n  \"Content background\": \"Pozadí obsahu\",\n  \"Inner content background\": \"Pozadí vnořeného obsahu\",\n  \"Buttons\": \"Tlačítka\",\n  \"Button text color\": \"Barva textu tlačítka\",\n  \"Primary button background\": \"Pozadí primárního tlačítka\",\n  \"Positive button background\": \"Pozadí pozitivního tlačítka\",\n  \"Negative button background\": \"Pozadí negativního tlačítka\",\n  \"Typography\": \"Typografie\",\n  \"Header color\": \"Barva hlavičky\",\n  \"Headings color\": \"Barva nadpisů\",\n  \"Text color\": \"Barva textu\",\n  \"Link color\": \"Barva odkazů\",\n  \"Footer color\": \"Barva patičky\",\n  \"Borders\": \"Okraje\",\n  \"Body border color\": \"Barva ohraničení těla (body)\",\n  \"Subcopy border color\": \"Barva ohraničení podnadpisu\",\n  \"Table border color\": \"Barva okraje tabulky\",\n  \"Components\": \"Komponenty\",\n  \"Panel background\": \"Pozadí panelu\",\n  \"Promotion background\": \"Pozadí pro propagaci\",\n  \"Promotion border color\": \"Barva ohraničení propagace\",\n  \"Customize Mail Appearance\": \"Přizpůsobit vzhled e-mailu\",\n  \"Version\": \"Verze\",\n  \"Enabled\": \"Povoleno\",\n  \"Latest\": \"Nejnovější\",\n  \"Log ID\": \"ID záznamu\",\n  \"Counter\": \"Počítadlo\",\n  \"Referers\": \"Odkaz\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Záznam potencionálních chyb v aplikaci, jako třeba vyjímky, nebo ladící informace.\",\n  \"Event\": \"Událost\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Tento záznam obsahuje požadavky na vaše stránky, které vyžadují pozornost, například stránky které nebylo možné najít, nebo vrací chybový kód 404.\",\n  \"There were no detected referrers to this URL.\": \"Nebyly nalezeny žádné odkazy na tuto URL.\",\n  \"Request\": \"Požadavek\",\n  \"Event log emptied\": \"Protokol událostí úspěšně vymazán.\",\n  \"Empty Event Log\": \"Smazat protokol událostí\",\n  \"Emptying Event Log...\": \"Mazání protokolu událostí...\",\n  \"Return to Event Log\": \"Zpět na protokol událostí\",\n  \"Installed\": \"Instalováno\",\n  \"Primary Site\": \"Primární web\",\n  \"Refresh Data\": \"Obnovit data\",\n  \"Remove Data\": \"\\tOdstranit data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Jste si jistí?\",\n  \"Reset Plugin Data\": \"Obnovit data pluginu\",\n  \"Enable Plugins\": \"Povolit pluginy\",\n  \"Are you sure you want to :action these plugins?\": \"Jste si jisti, že chcete :action tyto pluginy?\",\n  \"enable\": \"povolit\",\n  \"disable\": \"zakázat\",\n  \"Disable Plugins\": \"Zakázat pluginy\",\n  \"Select Action...\": \"Zvolte akci...\",\n  \"Data has been removed.\": \"Data byla odstraněna.\",\n  \"Plugin has been removed from the file system.\": \"Plugin odstraněn ze systému.\",\n  \"search plugins to install...\": \"vyhledejte pluginy k instalaci...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin byl zakázán konfigurací.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin nemá žádné závislosti, nebo je systémem zakázán.\",\n  \"search themes to install...\": \"Vyhledat téma k instalaci...\",\n  \"Install Theme\": \"Instalace téma\",\n  \"Theme Name\": \"Název téma\",\n  \"Install Plugin\": \"Instalace pluginu\",\n  \"Plugin Name\": \"Název pluginu\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Pojmenujte plugin unikátním kódem, například RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Název téma podle jeho unikátního názvu, například RainLab.Vanilla\",\n  \"Select Installation Method\": \"Vyberte způsob instalace\",\n  \"Make a Copy (Recommended)\": \"Vytvořit kopii (doporučeno)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Udělejte si kopii tohoto motivu pro jeho přizpůsobení a ruční správu budoucích aktualizací.\",\n  \"Install with Composer\": \"Instalovat s Composerem\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Rozšiřte šablonu pomocí podřízené šablony (child theme) pro zachování budoucích aktualizací od autora šablony.\",\n  \"Seed Theme Data\": \"Vložit data šablony\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Importovat vzory (blueprints), jazykové soubory a databázový obsah tohoto motivu, pokud je to možné. Můžete to přeskočit a provést to později v nastavení vzhledu stránek.\",\n  \"Change Status\": \"Změnit stav\",\n  \"Site Definitions\": \"Definice webu\",\n  \"System Updates\": \"Aktualizace a pluginy\",\n  \"Find a Setting...\": \"Najít nastavení...\",\n  \"Return to System Updates\": \"Zpět na systémové aktualizace\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Importovat vzory (blueprints), jazykové soubory a databázový obsah tohoto motivu, pokud je to možné. Můžete to přeskočit a provést to později v nastavení vzhledu stránek.\"\n}"
  },
  {
    "path": "modules/system/lang/da/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatering',\n        'quote' => 'Citat',\n        'code' => 'Kode',\n        'header1' => 'Overskrift 1',\n        'header2' => 'Overskrift 2',\n        'header3' => 'Overskrift 3',\n        'header4' => 'Overskrift 4',\n        'header5' => 'Overskrift 5',\n        'header6' => 'Overskrift 6',\n        'bold' => 'Fed',\n        'italic' => 'Skrå',\n        'unorderedlist' => 'Usorteret Liste',\n        'orderedlist' => 'Nummereret Liste',\n        'video' => 'Video',\n        'image' => 'Billede',\n        'link' => 'Link',\n        'horizontalrule' => 'Indsæt horisontal streg',\n        'fullscreen' => 'Fuld skærm',\n        'preview' => 'Forhåndsvisning',\n    ],\n\n    'mediamanager' => [\n        'insert_link' => \"Indsæt Link\",\n        'insert_image' => \"Indsæt Billede\",\n        'insert_video' => \"Indsæt Video\",\n        'insert_audio' => \"Indsæt Lyd\",\n        'invalid_file_empty_insert' => \"Vælg venligst en fil, at indsætte et link til.\",\n        'invalid_file_single_insert' => \"Vælg venligst en enkel fil.\",\n        'invalid_image_empty_insert' => \"Vælg venligst et eller flere billeder, at indsætte.\",\n        'invalid_video_empty_insert' => \"Vælg venligst en videofil, at indsætte.\",\n        'invalid_audio_empty_insert' => \"Vælg venligst en lydfil, at indsætte.\",\n    ],\n\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Fortryd',\n    ],\n\n    'datepicker' => [\n        'previousMonth' => 'Sidste Måned',\n        'nextMonth' => 'Næste Måned',\n        'months' => ['Januar', 'Februar', 'Marts', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December'],\n        'weekdays' => ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],\n        'weekdaysShort' => ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør']\n    ],\n\n    'filter' => [\n        'group' => [\n            'all' => 'Alle'\n        ],\n        'dates' => [\n            'all' => 'alle',\n            'filter_button_text' => 'Filter',\n            'reset_button_text'  => 'Nulstil',\n            'date_placeholder' => 'Dato',\n            'after_placeholder' => 'Efter',\n            'before_placeholder' => 'Før'\n        ]\n    ],\n\n    'eventlog' => [\n        'show_stacktrace' => 'Vis stacktracen',\n        'hide_stacktrace' => 'Skjul stacktracen',\n        'tabs' => [\n            'formatted' => 'Formateret',\n            'raw' => 'Rå',\n        ],\n        'editor' => [\n            'title' => 'Kildekode redigeringsværktøj',\n            'description' => 'Dit operativsystem bør konfigureres til at lytte til et af disse URL-skemaer.',\n            'openWith' => 'Åben med',\n            'remember_choice' => 'Husk valgte mulighed for denne session',\n            'open' => 'Åben',\n            'cancel' => 'Fortryd'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/da/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Getting back to basics',\n  ],\n  'directory' => [\n    'create_fail' => 'Kan ikke oprette mappen: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Kan ikke oprette filen: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Ugyldig sikkerhedstoken',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'System',\n    'menu_label' => 'System',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Andet',\n      'logs' => 'Logs',\n      'mail' => 'Mail',\n      'shop' => 'Butik',\n      'team' => 'Team',\n      'users' => 'Brugere',\n      'system' => 'System',\n      'social' => 'Social',\n      'events' => 'Begivenheder',\n      'customers' => 'Kunder',\n      'my_settings' => 'Mine Indstillinger',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Unavngivet tema',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Installer temaer',\n    'installed' => 'Installerede temaer',\n    'no_themes' => 'Der er ikke installeret nogle temaer fra markedspladsen.',\n    'recommended' => 'Anbefalede',\n    'remove_confirm' => 'Er du sikker på at du vil fjerne dette tema?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Unavngivet plugin',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Aktiver eller deaktiver',\n    'enable_or_disable_title' => 'Aktiver eller deaktiver plugins',\n    'install' => 'Installer plugins',\n    'install_products' => 'Install produkter',\n    'installed' => 'Installerede plugins',\n    'no_plugins' => 'Der er ikke installeret nogle plugins fra markedspladsen.',\n    'recommended' => 'Anbefalede',\n    'remove' => 'Fjern',\n    'refresh' => 'Opdater',\n    'disabled_label' => 'Deaktiveret',\n    'disabled_help' => 'Plugins der er deaktiverede, bliver ignoreret af applikationen.',\n    'frozen_label' => 'Frys opdateringer',\n    'frozen_help' => 'Plugins der er frossede, bliver ignoreret i opdateringsprocessen.',\n    'selected_amount' => 'Antal plugins valgt: :amount',\n    'remove_confirm' => 'Er du sikker på at du vil fjerne dette plugin?',\n    'remove_success' => 'Disse plugins blev fjernet fra systemet.',\n    'refresh_success' => 'Disse plugins blev opdateret i systemet.',\n    'disable_confirm' => 'Er du sikker?',\n    'disable_success' => 'Disse plugins blev deaktiveret.',\n    'enable_success' => 'Disse plugins blev aktiveret.',\n  ],\n  'project' => [\n    'attach' => 'Tilknyt Projekt',\n    'detach' => 'Frakobl Projekt',\n    'none' => 'Ingen',\n    'id' => [\n      'missing' => 'Specificer venligst et projekt ID.',\n    ],\n    'detach_confirm' => 'Er du sikker på at du vil frakoble dette projekt?',\n    'unbind_success' => 'Projektet er blevet frakoblet.',\n  ],\n  'settings' => [\n    'search' => 'Søg',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL forbindelse påkrævet',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikt navn der bruges til at referere til denne skabelon',\n    'test_send' => 'Send testbesked',\n    'test_confirm' => 'Send testbesked til :email. Fortsæt?',\n    'creating' => 'Opretter skabelon...',\n    'creating_layout' => 'Opretter Layout...',\n    'saving' => 'Gemmer Skabelon...',\n    'saving_layout' => 'Gemmer Layout...',\n    'delete_confirm' => 'Slet denne skabelon?',\n    'delete_layout_confirm' => 'Slet dette layout?',\n    'deleting' => 'Sletter Skabelon...',\n    'deleting_layout' => 'Sletter Layout...',\n    'sending' => 'Sender test besked...',\n    'return' => 'Tilbage til skabelonoversigt',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Ejer',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Build :build',\n    'core_build_help' => 'Seneste build er tilgængelig.',\n    'themes' => 'Temaer',\n    'plugin_version_none' => 'Nyt plugin',\n    'plugin_current_version' => 'Nuværende version',\n    'theme_new_install' => 'Ny tema installation.',\n    'theme_extracting' => 'Udpakker tema: :name',\n    'update_label' => 'Opdater software',\n    'update_loading' => 'Loader tilgængelige opdateringer...',\n    'force_label' => 'Tvangsopdater',\n    'found' => [\n      'label' => 'Ny opdateringer blev fundet!',\n      'help' => 'Tryk opdater software, for at begynde opdateringsprocessen.',\n    ],\n    'none' => [\n      'label' => 'Ingen opdateringer',\n      'help' => 'Der blev ikke fundet nogle nye opdateringer.',\n    ],\n    'important_action' => [\n      'empty' => 'Vælg handling',\n      'confirm' => 'Bekræft opdatering',\n      'skip' => 'Skip dette plugin (Kun en gang)',\n      'ignore' => 'Skip dette plugin (altid)',\n    ],\n    'important_action_required' => 'Handling påkrævet',\n    'important_view_guide' => ' se opgraderingsguide',\n    'important_alert_text' => 'Nogle opdatering kræver din opmærksomhed.',\n    'details_title' => 'Plugindetaljer',\n    'details_view_homepage' => 'Se hjemmeside',\n    'details_current_version' => 'Nuværende version',\n    'details_author' => 'Ejer',\n  ],\n  'server' => [\n    'connect_error' => 'Fejl i forbindelse til server.',\n    'response_not_found' => 'Opdateringsserveren kunne ikke findes.',\n    'response_invalid' => 'Ugyldigt svar fra serveren.',\n    'response_empty' => 'Tomt svar fra serveren.',\n    'file_error' => 'Det lykkedes ikke serveren at sende pakken.',\n    'file_corrupt' => 'Filen fra serveren er beskadiget.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Klassen :class skal definere instansvariablen $:property, som bliver brugt af :behavior behavioren.',\n  ],\n  'config' => [\n    'not_found' => 'Kunne ikke finde konfigurationsfilen :file defineret for :location.',\n    'required' => 'Konfiguration brugt i :location skal angive værdien for \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Kunne ikke udpakke corefilen \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Tøm requestloggen',\n    'empty_loading' => 'Tømmer requestloggen...',\n    'empty_success' => 'Requestloggen blev tømt.',\n    'return_link' => 'Tilbage til requestloggen.',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'System',\n    'manage_system_settings' => 'Administrer systemindstillinger',\n    'manage_software_updates' => 'Administrer softwareopdateringer',\n    'access_logs' => 'Vis systemlogs',\n    'manage_mail_templates' => 'Administrer mailskabeloner',\n    'manage_mail_settings' => 'Administrer mailindstillinger',\n    'manage_other_administrators' => 'Administrer andre backendbrugere',\n  ],\n  'media' => [\n    'invalid_path' => 'Ugyldig sti: \\':path\\'.',\n    'folder_size_items' => 'ting',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/da/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \":attribute skal afkrydses.\",\n    \"active_url\"       => \":attribute er ikke en fyldig URL.\",\n    \"after\"            => \":attribute skal være en dato efter :date.\",\n    \"alpha\"            => \":attribute må kun indeholder bogstaver.\",\n    \"alpha_dash\"       => \":attribute må kun indeholder bogstaver, tal og bindestreger.\",\n    \"alpha_num\"        => \":attribute må kun indeholde bogstaver og tal.\",\n    \"array\"            => \":attribute skal være en array.\",\n    \"before\"           => \":attribute skal være en dato før :date.\",\n    \"between\"          => [\n        \"numeric\" => \":attribute skal være mellem :min og :max.\",\n        \"file\"    => \":attribute skal være :min og :max kilobytes.\",\n        \"string\"  => \":attribute skal være mellem :min og :max karakterer.\",\n        \"array\"   => \":attribute skal indeholde mellem :min og :max ting.\",\n    ],\n    \"confirmed\"        => \":attribute bekræftelse matcher ikke.\",\n    \"date\"             => \":attribute er ikke en gyldig dato.\",\n    \"date_format\"      => \":attribute følger ikke formatet: :format.\",\n    \"different\"        => \":attribute og :other må ikke være ens.\",\n    \"digits\"           => \":attribute skal være :digits tal.\",\n    \"digits_between\"   => \":attribute skal være mellem :min og :max tal.\",\n    \"email\"            => \":attribute formatet er ikke en gyldig mail.\",\n    \"exists\"           => \"Den valgte værdi :attribute er ikke gyldig.\",\n    \"image\"            => \":attribute skal være et billede.\",\n    \"in\"               => \"Den valgte værdi :attribute er ikke gyldig.\",\n    \"integer\"          => \":attribute skal være et heltal.\",\n    \"ip\"               => \":attribute skal være en gyldig IP adresse.\",\n    \"max\"              => [\n        \"numeric\" => \":attribute må ikke være større end :max.\",\n        \"file\"    => \":attribute må ikke være større end :max kilobytes.\",\n        \"string\"  => \":attribute må ikke være større end :max karakterer.\",\n        \"array\"   => \":attribute Må ikke indeholde mere end :max ting.\",\n    ],\n    \"mimes\"            => \":attribute skal være en fil af typen: :values.\",\n    \"extensions\"       => \":attribute skal have en filendelse som: :values.\",\n    \"min\"              => [\n        \"numeric\" => \":attribute skal mindst være :min.\",\n        \"file\"    => \":attribute skal mindst være :min kilobytes.\",\n        \"string\"  => \":attribute skal mindst være :min karakterer.\",\n        \"array\"   => \":attribute skal mindst indeholde :min ting.\",\n    ],\n    \"not_in\"           => \":attribute er en ugyldig værdi.\",\n    \"numeric\"          => \":attribute skal være numerisk.\",\n    \"regex\"            => \":attribute formatet er ugyldigt.\",\n    \"required\"         => \"Feltet :attribute skal udfyldes.\",\n    \"required_if\"      => \"Feltet :attribute skal udfyldes når :other er :value.\",\n    \"required_with\"    => \"Feltet :attribute er påkrævet når :values er til stede.\",\n    \"required_without\" => \"Feltet :attribute er påkrævet når :values ikke er til stede.\",\n    \"same\"             => \":attribute og :other skal være ens.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute skal være :size.\",\n        \"file\"    => \":attribute skal være :size kilobytes.\",\n        \"string\"  => \":attribute skal være :size karakterer.\",\n        \"array\"   => \":attribute skal indeholde :size ting.\",\n    ],\n    \"unique\"           => \":attribute er allerede taget.\",\n    \"url\"              => \":attribute formatet er ugyldigt.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/da.json",
    "content": "{\n  \"Check For Updates\": \"Check for opdateringer\",\n  \"Install Packages\": \"Installer pakker\",\n  \"Manage Themes\": \"Administrer temaer\",\n  \"Manage Plugins\": \"Administrer plugins\",\n  \"Project\": \"Projekt\",\n  \"Owner\": \"Ejer\",\n  \"Plugins\": \"Plugins\",\n  \"Recommended\": \"Anbefalede\",\n  \"Disabled\": \"Deaktiveret\",\n  \"Current Build\": \"Nuværende build\",\n  \"Updates Available\": \"Opdateringer tilgængelige\",\n  \"Up to Date\": \"Opdateret\",\n  \"Latest Build\": \"Seneste bygning\",\n  \"View Changelog\": \"Se ændringslog\",\n  \"Software Updates\": \"Opdateringer & Plugins\",\n  \"Update the system modules and plugins.\": \"Opdater systemet, og administrer og installer plugins og temaer.\",\n  \"General\": \"Generelt\",\n  \"Mail\": \"Post\",\n  \"Utilities\": \"Hjælpeprogrammer\",\n  \"Settings\": \"Indstillinger\",\n  \"Show All Settings\": \"Vis alle indstillinger\",\n  \"Unable to find the specified settings.\": \"De ønskede indstillinger kunne ikke findes.\",\n  \"The settings page is missing a Model definition.\": \"Indstillingssiden mangler en Model definition.\",\n  \":name settings updated\": \":name indstillinger opdateret\",\n  \"Return to System Settings\": \"Tilbage til systemindstillinger\",\n  \"Search Settings...\": \"Find en indstilling...\",\n  \"Disable mail branding CSS\": \"Deaktiver mail branding CSS\",\n  \"Manage Sites\": \"Administrer websteder\",\n  \"Manage the websites available for this application.\": \"Administrer de tilgængelige websteder for denne applikation.\",\n  \"Marketplace\": \"Markedsplads\",\n  \"There is no documentation provided.\": \"Der er ingen dokumentation tilgængelig.\",\n  \"Documentation\": \"Dokumentation\",\n  \"Upgrade Guide\": \"Opgraderingsguide\",\n  \"License\": \"Licens\",\n  \"Attach to Project\": \"Tilknyt til Projekt\",\n  \"Manage Updates\": \"Administrer Opdateringer\",\n  \"Software Update\": \"Softwareopdatering\",\n  \"Return to Software Updates\": \"Tilbage til systemopdateringer\",\n  \"Try Again\": \"Prøv igen\",\n  \"Unpacking application files\": \"Pakker applicationsfiler ud\",\n  \"Update Failed\": \"Opdatering fejlede\",\n  \"Unpacking plugin: :name\": \"Udpakker plugin: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Det primære websted bruges som standard og kan ikke slettes.\",\n  \"Disabled sites are not shown on the frontend.\": \"Deaktiverede websteder vises ikke på frontend.\",\n  \"Enabled in the Admin Panel\": \"Aktiveret i administratorpanelet\",\n  \"Configuration\": \"Konfiguration\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Brug dette, hvis du ønsker, at webstedet skal aktiveres i administratorpanelet.\",\n  \"Install\": \"Installere\",\n  \"Sync Project\": \"Synkroniser projekt\",\n  \"Name\": \"Navn\",\n  \"Unique Code\": \"Unik kode\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Websteder\",\n  \"Create Site\": \"Opret websted\",\n  \"Base URL\": \"Basis URL\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Aktuel standardværdi: :value\",\n  \"Locale\": \"Lokal\",\n  \"Timezone\": \"Tidszone\",\n  \"Custom application URL\": \"Brugerdefineret applikations-URL\",\n  \"Override the application URL when this site is active.\": \"Tilsidesæt applikations-URL'en, når dette websted er aktivt.\",\n  \"Use a CMS route prefix\": \"Brug et CMS-rutepræfiks\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Et præfiks kan identificere dette websted, når du bruger et delt værtsnavn.\",\n  \"Define matching hostnames\": \"Definer matchende værtsnavne\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Angiv domænenavne og mønstre, der skal bruges til at betjene dette websted.\",\n  \"Display a style for this site\": \"Vis en farve for dette websted\",\n  \"To help identify this site, display a color in the admin panel.\": \"For at hjælpe med at identificere dette websted skal du vise en farve i administrationspanelet.\",\n  \"Save\": \"Gemme\",\n  \"Save and Close\": \"Gem og luk\",\n  \"Use Default\": \"Brug standard\",\n  \"Use Custom\": \"Brug Custom\",\n  \"Specify a custom locale code.\": \"Angiv en brugerdefineret landekode.\",\n  \"Failed\": \"mislykkedes\",\n  \"or\": \"eller\",\n  \"Code\": \"Kode\",\n  \"October CMS Marketplace\": \"oktober CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Projektet har ingen plugins eller temaer. Besøg :linket for at tilføje nogle.\",\n  \"Buy Now\": \"Køb nu\",\n  \"Updating package manager\": \"Opdatering af pakkehåndtering\",\n  \"Updating application files\": \"Downloader applikationsfiler\",\n  \"Setting build number\": \"Indstilling af byggenummer\",\n  \"Finishing update process\": \"Afslutter opdateringsproces\",\n  \"Installing plugin: :name\": \"Downloader plugin: :name\",\n  \"Finishing installation process\": \"Afslutter installationsproces\",\n  \"Removing theme: :name\": \"Fjerner tema: :name\",\n  \"Please specify a Theme name to install.\": \"Angiv venligst et temanavn, at installere.\",\n  \"Installing theme: :name\": \"Downloader tema: :name\",\n  \"Removing plugin: :name\": \"Fjerner plugin: :name\",\n  \"Please specify a Plugin name to install.\": \"Angiv venligst et pluginnavn, at installere.\",\n  \"Update process complete\": \"Opdateringsprocess afsluttet\",\n  \"Package installed successfully\": \"Plugin blev installeret\",\n  \"Check Dependencies\": \"Tjek afhængigheder\",\n  \"Install Dependencies\": \"Installer afhængigheder\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Der mangler afhængigheder for at systemet kan køre korrekt.\",\n  \"License Key\": \"Licensnøgle\",\n  \"How to find your License Key\": \"Sådan finder du din licensnøgle\",\n  \"The password attribute is required.\": \"Adgangskodeattributten er påkrævet.\",\n  \"The login attribute is required.\": \"Login-attributten er påkrævet.\",\n  \"Cannot login user since they are not activated.\": \"Kan ikke logge på bruger, da de ikke er aktiveret.\",\n  \"Cannot login user since they are banned.\": \"Kan ikke logge på bruger, da de er forbudt.\",\n  \"Cannot login user since they are suspended.\": \"Kan ikke logge på bruger, da de er suspenderet.\",\n  \"A user was not found with the given credentials.\": \"Der blev ikke fundet en bruger med de angivne legitimationsoplysninger.\",\n  \"A user was found but the password did not match.\": \"Der blev fundet en bruger, men adgangskoden matchede ikke.\",\n  \"User is not logged in\": \"Brugeren er ikke logget ind\",\n  \"Register Software\": \"Registrer software\",\n  \"View the Dashboard\": \"Vis administratorpanelet\",\n  \"Set the Default Dashboard\": \"Indstil standard Dashboard\",\n  \"Log File\": \"Logfil\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Poststempel\",\n  \"No encryption\": \"Ingen kryptering\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Mail indstillinger\",\n  \"Manage email configuration.\": \"Administrer email konfiguration.\",\n  \"Sender Name\": \"Afsender navn\",\n  \"Sender Email\": \"Afsender email\",\n  \"Mail Method\": \"Mail metode\",\n  \"SMTP Address\": \"SMTP adresse\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"SMTP krypteringsprotokol\",\n  \"SMTP Authorization Required\": \"SMTP authorization påkrævet\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Sæt kryds her hvis din SMTP server kræver authorization.\",\n  \"Username\": \"Brugernavn\",\n  \"Password\": \"Adgangskode\",\n  \"Sendmail Path\": \"Sendmail sti\",\n  \"Please specify the path of the sendmail program.\": \"Angiv venligst stien til sendmail programmet.\",\n  \"Mailgun Domain\": \"Mailgun domæne\",\n  \"Please specify the Mailgun domain name.\": \"Angiv venligst Mailgun domænenavnet.\",\n  \"Mailgun Secret\": \"Mailgun hemmelighed\",\n  \"Enter your Mailgun API key.\": \"Angiv din Mailgun API key.\",\n  \"SES Key\": \"SES key\",\n  \"Enter your SES API key\": \"Angiv din SES API key\",\n  \"SES Secret\": \"SES hemmelighed\",\n  \"Enter your SES API secret key\": \"Angiv din SES API hemmelige nøgle\",\n  \"SES Region\": \"SES region\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Angiv din SES region (feks. us-east-1)\",\n  \"Postmark Token\": \"Poststempelmærke\",\n  \"Enter your Postmark API secret key\": \"Indtast din Postmark API hemmelige nøgle\",\n  \"Define administrator roles\": \"Definer administratorroller\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Begræns adgangen til dette websted til kun administratorer med følgende roller.\",\n  \"Manage Backend Preferences\": \"Administrer backendindstillinger\",\n  \"Manage Code Editor Preferences\": \"Administrer kode redigeringsværktøjets indstillinger\",\n  \"Customize Backend Styles\": \"Tilpas backenden\",\n  \"Mail Templates\": \"Mail skabeloner\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Rediger og administrer mailskabelonerne.\",\n  \"Event Log\": \"Begivenhedslog\",\n  \"View system log messages with their recorded time and details.\": \"Se system logbeskeder.\",\n  \"Request Log\": \"Requestlog\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Vis forkerte og redirectede requests, som feks. 404 requests.\",\n  \"Test message sent.\": \"Testbesked blev afsendt.\",\n  \"New Layout\": \"Nyt layout\",\n  \"New Template\": \"Ny skabelon\",\n  \"Template\": \"Skabelon\",\n  \"Templates\": \"Skabeloner\",\n  \"Layouts\": \"Layouts\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"Mail layouts\",\n  \"Unique code used to refer to this template\": \"Unik kode der bruges til at referere til denne skabelon\",\n  \"-- No layout --\": \"-- Intet layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Fritekst\",\n  \"Subject\": \"Emne\",\n  \"Email message subject\": \"Email emne\",\n  \"Description\": \"Beskrivelse\",\n  \"Drivers Not Installed\": \"Drivere ikke installerede\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Denne mail metode kræver at pluginet \\\":plugin\\\" er installeret, før du kan sende mail.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Event ID\",\n  \"Level\": \"Grad\",\n  \"Date & Time\": \"Dato & Tid\",\n  \"Message\": \"Besked\",\n  \"Version\": \"Version\",\n  \"Log ID\": \"Log ID\",\n  \"Counter\": \"Tæller\",\n  \"Referers\": \"Referers\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Denne log viser en liste af potentielle fejl i applikationen.\",\n  \"Event\": \"Event\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Denne log viser en liste af browserrequests som måske kræver din opmærksomhed. Feks. hvis en gæst åbner en CMS side der ikke findes, bliver der oprettet en record med statuskode 404.\",\n  \"Request\": \"Request\",\n  \"Event log emptied\": \"Eventloggen blev tømt.\",\n  \"Empty Event Log\": \"Tøm eventloggen\",\n  \"Emptying Event Log...\": \"Tømmer eventloggen...\",\n  \"Return to Event Log\": \"Tilbage til eventloggen\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Er du sikker?\",\n  \"Plugin has been removed from the file system.\": \"Pluginet er blevet fjernet fra filsystemet.\",\n  \"search plugins to install...\": \"Søg efter plugins...\",\n  \"search themes to install...\": \"Søg efter temaer\",\n  \"Install Theme\": \"Installer Tema\",\n  \"Theme Name\": \"Temanavn\",\n  \"Install Plugin\": \"Installer Plugin\",\n  \"Plugin Name\": \"Pluginnavn\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Navngiv pluginet med en unik kode. Feks., RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Navngiv temaet med en unik kode. Feks., RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Kombineringsfilen ':name', kunne ikke findes.\"\n}"
  },
  {
    "path": "modules/system/lang/de/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatierung',\n        'quote' => 'Zitat',\n        'code' => 'Code',\n        'header1' => 'Überschrift 1',\n        'header2' => 'Überschrift 2',\n        'header3' => 'Überschrift 3',\n        'header4' => 'Überschrift 4',\n        'header5' => 'Überschrift 5',\n        'header6' => 'Überschrift 6',\n        'bold' => 'Fett',\n        'italic' => 'Kursiv',\n        'unorderedlist' => 'Normale Liste',\n        'orderedlist' => 'Nummerierte Liste',\n        'video' => 'Video',\n        'image' => 'Bild',\n        'link' => 'Link',\n        'horizontalrule' => 'Horizontale Linie',\n        'fullscreen' => 'Vollbild',\n        'preview' => 'Vorschau',\n    ],\n\n    'mediamanager' => [\n        'insert_link' => \"Link aus Medienbibliothek\",\n        'insert_image' => \"Bild aus Medienbibliothek\",\n        'insert_video' => \"Video aus Medienbibliothek\",\n        'insert_audio' => \"Audio aus Medienbibliothek\",\n        'invalid_file_empty_insert' => \"Bitte Datei auswählen.\",\n        'invalid_file_single_insert' => \"Bitte nur eine Datei wählen.\",\n        'invalid_image_empty_insert' => \"Bitte ein Bild auswählen.\",\n        'invalid_video_empty_insert' => \"Bitte ein Video auswählen.\",\n        'invalid_audio_empty_insert' => \"Bitte eine Audiodatei auswählen.\",\n    ],\n\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Abbrechen',\n    ],\n\n    'datepicker' => [\n        'previousMonth' => 'Vorheriger Monat',\n        'nextMonth' => 'Nächsten Monat',\n        'months' => ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],\n        'weekdays' => ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],\n        'weekdaysShort' => ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa']\n    ],\n\n    'filter' => [\n        'group' => [\n            'all' => 'all'\n        ],\n        'dates' => [\n            'all' => 'all',\n            'filter_button_text' => 'Filter',\n            'reset_button_text'  => 'Reset',\n            'date_placeholder' => 'Date',\n            'after_placeholder' => 'After',\n            'before_placeholder' => 'Before'\n        ]\n    ],\n\n    'eventlog' => [\n        'show_stacktrace' => 'Show the stacktrace',\n        'hide_stacktrace' => 'Hide the stacktrace',\n        'tabs' => [\n            'formatted' => 'Formatted',\n            'raw' => 'Raw',\n        ],\n        'editor' => [\n            'title' => 'Source Code Editor',\n            'description' => 'Your operating system should be configured to listen to one of these URL schemes.',\n            'openWith' => 'Open with',\n            'remember_choice' => 'Remember selected option for this session',\n            'open' => 'Open',\n            'cancel' => 'Cancel'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/de/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Zurück zum Wesentlichen',\n  ],\n  'directory' => [\n    'create_fail' => 'Konnte Verzeichnis: :name nicht erstellen',\n  ],\n  'file' => [\n    'create_fail' => 'Konnte Datei :name nicht erstellen',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Ungültiges Sicherheitstoken',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'System',\n    'menu_label' => 'System',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Verschiedenes',\n      'logs' => 'Logs',\n      'mail' => 'Mail',\n      'shop' => 'Shop',\n      'team' => 'Team',\n      'users' => 'Benutzer',\n      'system' => 'System',\n      'social' => 'Social',\n      'events' => 'Events',\n      'customers' => 'Kunden',\n      'my_settings' => 'Meine Einstellungen',\n    ],\n  ],\n  'plugin' => [\n    'unnamed' => 'Unbenanntes Plugin',\n    'name' => [],\n  ],\n  'project' => [\n    'attach' => 'Projekt verbinden',\n    'detach' => 'Projekt trennen',\n    'none' => 'Keins',\n    'id' => [\n      'missing' => 'Bitte geben Sie eine Projekt-ID an.',\n    ],\n    'detach_confirm' => 'Möchtest du dieses Projekt wirklich trennen?',\n    'unbind_success' => 'Projekt wurde erfolgreich getrennt (detached).',\n  ],\n  'settings' => [\n    'search' => 'Suche',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL Verbindung erforderlich',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Eindeutiger Name um diese Vorlage zu referenzieren',\n    'test_send' => 'Testnachricht senden',\n    'test_confirm' => 'Eine Testnachricht wird an :email gesendet. Fortsetzen?',\n    'creating' => 'Erstelle Vorlage...',\n    'creating_layout' => 'Erstelle Layout...',\n    'saving' => 'Speichere Vorlage...',\n    'saving_layout' => 'Speichere Layout...',\n    'delete_confirm' => 'Möchtest Du diese Vorlage wirklich löschen?',\n    'delete_layout_confirm' => 'Möchtest Du dieses Layout wirklich löschen?',\n    'deleting' => 'Lösche Vorlage...',\n    'deleting_layout' => 'Lösche Layout...',\n    'sending' => 'Sende Nachricht...',\n    'return' => 'Zurück zur Vorlagen-Liste',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Build :build',\n    'core_build_help' => 'Aktuellster Build ist verfügbar.',\n    'plugin_version_none' => 'Neues Plugin',\n    'update_label' => 'Aktualisieren',\n    'update_loading' => 'Lade verfügbare Aktualisierungen...',\n    'force_label' => 'Aktualisierung erzwingen',\n    'found' => [\n      'label' => 'Neue Aktualisierungen gefunden!',\n      'help' => '\"Aktualisieren\" wählen um Prozess zu starten ',\n    ],\n    'none' => [\n      'label' => 'Keine Aktualisierungen',\n      'help' => 'Es wurden keine Aktualisierungen gefunden.',\n    ],\n  ],\n  'server' => [\n    'connect_error' => 'Fehler beim Verbinden mit dem Server.',\n    'response_not_found' => 'Der Aktualisierungs-Server kann nicht gefunden werden.',\n    'response_invalid' => 'Ungültige Antwort vom Server.',\n    'response_empty' => 'Ergebnislose Antwort vom Server.',\n    'file_error' => 'Server konnte Paket nicht zur Verfügung stellen.',\n    'file_corrupt' => 'Angelieferte Datei ist fehlerhaft.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Klasse :class muss Eingenschaft $:property besitzen, da sie von Verhalten (behaviour) :behavior benötigt wird.',\n  ],\n  'config' => [\n    'not_found' => 'Konnte Konfigurationsdatei :file definiert für :location nicht finden.',\n    'required' => 'Konfiguration, die in :location benutzt wird, muss den Wert :property zur Verfügung stellen.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Konnte Core-Datei \\':file\\' nicht entpacken.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Request-Log zurücksetzen',\n    'empty_loading' => 'Request-Log wird zurückgesetzt...',\n    'empty_success' => 'Request-Log erfolgreich zurückgesetzt.',\n    'return_link' => 'Zurück zum Request-Log',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'System',\n    'manage_system_settings' => 'Systemeinstellungen verwalten',\n    'manage_software_updates' => 'Software-Updates verwalten',\n    'access_logs' => 'Systemprotokolle einsehen',\n    'manage_mail_templates' => 'Mail-Templates verwalten',\n    'manage_mail_settings' => 'Mail-Einstellungen verwalten',\n    'manage_other_administrators' => 'Andere Administratoren verwalten',\n  ],\n  'media' => [\n    'invalid_path' => 'Ungültiger Dateipfad: \\':path\\'.',\n    'folder_size_items' => 'Datei(en)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/de/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \":attribute muss bestätigt werden.\",\n    \"active_url\"       => \":attribute ist keine gültige URL.\",\n    \"after\"            => \":attribute muss ein Datum nach :date sein.\",\n    \"alpha\"            => \":attribute darf nur Buchstaben enthalten.\",\n    \"alpha_dash\"       => \":attribute darf nur Buchstaben, Ziffern und Bindestriche enthalten.\",\n    \"alpha_num\"        => \":attribute darf nur Buchstaben und Ziffern enthalten.\",\n    \"array\"            => \":attribute muss ein Array sein.\",\n    \"before\"           => \":attribute muss ein Datum vor :date sein.\",\n    \"between\"          => [\n        \"numeric\" => \":attribute muss zwischen :min und :max liegen.\",\n        \"file\"    => \":attribute muss zwischen :min und :max kilobytes groß sein.\",\n        \"string\"  => \":attribute-Zeichenanzahl muss zwischen :min und :max liegen.\",\n        \"array\"   => \":attribute-Elementanzahl muss zwischen :min und :max liegen.\",\n    ],\n    \"confirmed\"        => \"Bestätigung zu :attribute stimmt nicht überein\",\n    \"date\"             => \":attribute ist kein gültiges Datum.\",\n    \"date_format\"      => \":attribute hat kein gültiges Datumsformat :format.\",\n    \"different\"        => \":attribute und :other müssen sich unterscheiden.\",\n    \"digits\"           => \"Das :attribute benötigt :digits Zeichen.\",\n    \"digits_between\"   => \":attribute-Zeichenanzahl muss zwischen :min und :max liegen.\",\n    \"email\"            => \"Format von :attribute ist ungültig.\",\n    \"exists\"           => \"Das ausgewählte Attribut :attribute ist ungültig.\",\n    \"image\"            => \":attribute muss ein Bild sein.\",\n    \"in\"               => \"Das ausgewählte Attribut :attribute ist ungültig.\",\n    \"integer\"          => \":attribute muss eine Ganzzahl (integer) sein.\",\n    \"ip\"               => \":attribute muss eine gültige IP-Adresse sein.\",\n    \"max\"              => [\n        \"numeric\" => \":attribute darf nicht größer als :max sein.\",\n        \"file\"    => \":attribute darf nicht größer als :max kilobytes sein.\",\n        \"string\"  => \":attribute darf nicht mehr als :max Zeichen haben.\",\n        \"array\"   => \":attribute darf nicht mehr als :max Elemente besitzen.\",\n    ],\n    \"mimes\"            => \":attribute muss eine Datei des Typs: :values sein.\",\n    \"min\"              => [\n        \"numeric\" => \":attribute muss mindestens :min sein.\",\n        \"file\"    => \":attribute darf nicht kleiner als :min kilobytes sein.\",\n        \"string\"  => \":attribute darf nicht weniger als :min Zeichen haben.\",\n        \"array\"   => \":attribute darf nicht weniger als :min Elemente besitzen.\",\n    ],\n    \"not_in\"           => \"Das ausgewählte Attribut :attribute ist ungültig.\",\n    \"numeric\"          => \":attribute muss eine Zahl sein.\",\n    \"regex\"            => \"Format von :attribute ist ungültig.\",\n    \"required\"         => \":attribute wird benötigt.\",\n    \"required_if\"      => \":attribute wird benötigt, wenn :other den Wert :value hat.\",\n    \"required_with\"    => \":attribute wird benötigt, wenn :values existiert.\",\n    \"required_without\" => \":attribute wird benötigt, wenn :values nicht existiert.\",\n    \"same\"             => \":attribute und :other müssen übereinstimmen.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute muss :size groß sein.\",\n        \"file\"    => \":attribute muss :size kilobytes groß sein.\",\n        \"string\"  => \"Name von :attribute muss :size Zeichen beinhalten.\",\n        \"array\"   => \":attribute muss :size Elemente beinhalten.\",\n    ],\n    \"unique\"           => \":attribute muss eindeutig sein.\",\n    \"url\"              => \"Format von :attribute ist ungültig.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/de.json",
    "content": "{\n  \"Check For Updates\": \"Auf Aktualisierungen überprüfen\",\n  \"Install Packages\": \"Pakete installieren\",\n  \"Manage Themes\": \"Themes verwalten\",\n  \"Manage Plugins\": \"Plugins verwalten\",\n  \"Project\": \"Projekt\",\n  \"Owner\": \"Entwickler\",\n  \"Plugins\": \"Erweiterungen\",\n  \"Recommended\": \"Empfohlen\",\n  \"Disabled\": \"Deaktiviert\",\n  \"Current Build\": \"Aktueller Build\",\n  \"Updates Available\": \"Updates verfügbar\",\n  \"Up to Date\": \"Aktuell\",\n  \"Latest Build\": \"Neuester Build\",\n  \"View Changelog\": \"Änderungsprotokoll anzeigen\",\n  \"Software Updates\": \"Aktualisierungen\",\n  \"Update the system modules and plugins.\": \"System aktualisieren, Plugins und Themes verwalten und installieren.\",\n  \"General\": \"Allgemein\",\n  \"Mail\": \"Mail\",\n  \"Utilities\": \"Werkzeuge\",\n  \"Settings\": \"Einstellungen\",\n  \"Show All Settings\": \"Alle Einstellungen anzeigen\",\n  \"Unable to find the specified settings.\": \"Die gesuchten Einstellungen können nicht gefunden werden.\",\n  \"The settings page is missing a Model definition.\": \"Der Einstellungsseite fehlt eine Model-Definition.\",\n  \":name settings updated\": \"Einstellung :name wurde erfolgreich aktualisiert.\",\n  \"Return to System Settings\": \"Zurück zu den Einstellungen\",\n  \"Search Settings...\": \"Einstellung finden...\",\n  \"Disable mail branding CSS\": \"Mail-Branding-CSS deaktivieren\",\n  \"Manage Sites\": \"Sites verwalten\",\n  \"Manage the websites available for this application.\": \"Die verfügbaren Sites verwalten.\",\n  \"Marketplace\": \"Marktplatz\",\n  \"There is no documentation provided.\": \"Keine Dokumentation vorhanden.\",\n  \"Documentation\": \"Dokumentation\",\n  \"Upgrade Guide\": \"Upgrade-Anweisungen\",\n  \"License\": \"Lizenz\",\n  \"Attach to Project\": \"Mit Projekt verknüpfen\",\n  \"Manage Updates\": \"Aktualisierungen verwalten\",\n  \"Software Update\": \"Software-Aktualisierung\",\n  \"Return to Software Updates\": \"Zu den Software-Aktualisierungen zurückkehren\",\n  \"Try Again\": \"Erneut versuchen\",\n  \"Unpacking application files\": \"Applikationsdaten werden entpackt\",\n  \"Update Failed\": \"Aktualisierung fehlgeschlagen\",\n  \"Unpacking plugin: :name\": \"Entpacke Plugin: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Die primäre Site wird standardmäßig verwendet und kann nicht gelöscht werden.\",\n  \"Disabled sites are not shown on the frontend.\": \"Deaktivierte Sites sind im Frontend nicht verfügbar.\",\n  \"Enabled in the Admin Panel\": \"Im Admin-Bereich verfügbar\",\n  \"Configuration\": \"Konfiguration\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Aktivieren, um diese Site im Backend verfügbar zu machen.\",\n  \"Install\": \"Installieren\",\n  \"Sync Project\": \"Projekt synchronisieren\",\n  \"Name\": \"Name\",\n  \"Unique Code\": \"Eindeutiger Code\",\n  \"Theme\": \"Theme\",\n  \"Sites\": \"Seiten\",\n  \"Create Site\": \"Site erstellen\",\n  \"Base URL\": \"Basis-URL\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Aktueller Standardwert: :value\",\n  \"Locale\": \"Sprache\",\n  \"Timezone\": \"Zeitzone\",\n  \"Custom application URL\": \"Benutzerdefinierte Anwendungs-URL\",\n  \"Override the application URL when this site is active.\": \"Die Anwendungs-URL wird überschrieben, wenn diese Site verwendet wird.\",\n  \"Use a CMS route prefix\": \"CMS-Routenpräfix verwenden\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Der hier eingegebene Präfix bestimmt, ob diese Site verwendet wird.\",\n  \"Define matching hostnames\": \"Zuordnung zu Hostnamen verwenden\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Der hier eingegebene Hostnamen bestimmt, ob diese Site verwendet wird.\",\n  \"Display a style for this site\": \"Farbcodierung für diese Site anzeigen\",\n  \"To help identify this site, display a color in the admin panel.\": \"Um die Identifizierung der Site zu erleichtern, wird im Backend eine Farbe angezeigt.\",\n  \"Save\": \"Speichern\",\n  \"Save and Close\": \"Speichern und schließen\",\n  \"Use Default\": \"Standardwert verwenden\",\n  \"Use Custom\": \"Benutzerdefinierten Wert verwenden\",\n  \"Specify a custom locale code.\": \"Geben Sie einen benutzerdefinierten Gebietsschemacode an.\",\n  \"Failed\": \"Fehlgeschlagen\",\n  \"or\": \"oder\",\n  \"Code\": \"Code\",\n  \"October CMS Marketplace\": \"Oktober CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Das Projekt hat keine verknüpften Plugins oder Designs. Besuchen Sie den :link, um einige hinzuzufügen.\",\n  \"Buy Now\": \"Jetzt kaufen\",\n  \"Updating package manager\": \"Paket-Manager wird aktualisiert\",\n  \"Updating application files\": \"Applikationsdaten werden heruntergeladen\",\n  \"Setting build number\": \"Build-Nummer einstellen\",\n  \"Finishing update process\": \"Schließe Aktualisierung ab\",\n  \"Installing plugin: :name\": \"Lade Plugin herunter: :name\",\n  \"Finishing installation process\": \"Schließe Installationsprozess ab\",\n  \"Removing theme: :name\": \"Theme wird entfernt: :name\",\n  \"Please specify a Theme name to install.\": \"Bitte geben Sie einen zu installierenden Theme-Namen an.\",\n  \"Installing theme: :name\": \"Theme wird installiert: :name\",\n  \"Extracting theme: :name\": \"Extrahiere Theme :name\",\n  \"Seeding theme: :name\": \"Seede Theme :name\",\n  \"Removing plugin: :name\": \"Entferne Plugin: :name\",\n  \"Please specify a Plugin name to install.\": \"Bitte geben Sie den Namen des zu installierenden Plugin an.\",\n  \"Update process complete\": \"Aktualisierungsvorgang erfolgreich.\",\n  \"Package installed successfully\": \"Das Plugin wurde erfolgreich installiert.\",\n  \"Check Dependencies\": \"Abhängigkeiten prüfen\",\n  \"Install Dependencies\": \"Abhängigkeiten installieren\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Es fehlen Abhängigkeiten für den korrekten Betrieb des Systems.\",\n  \"License Key\": \"Lizenzschlüssel\",\n  \"How to find your License Key\": \"Wie Sie Ihren Lizenzschlüssel finden\",\n  \"The password attribute is required.\": \"Das Passwort-Attribut ist erforderlich.\",\n  \"The login attribute is required.\": \"Das Login-Attribut ist erforderlich.\",\n  \"Cannot login user since they are not activated.\": \"Benutzer kann nicht angemeldet werden, da er nicht aktiviert ist.\",\n  \"Cannot login user since they are banned.\": \"Benutzer kann nicht angemeldet werden, da er gebannt wurde.\",\n  \"Cannot login user since they are suspended.\": \"Benutzer kann nicht angemeldet werden, da er gesperrt wurde.\",\n  \"A user was not found with the given credentials.\": \"Es wurde kein Benutzer mit den angegebenen Zugangsdaten gefunden.\",\n  \"A user was found but the password did not match.\": \"Ein Benutzer wurde gefunden, aber das Passwort stimmt nicht überein.\",\n  \"User is not logged in\": \"Benutzer ist nicht angemeldet\",\n  \"Register Software\": \"Software registrieren\",\n  \"View the Dashboard\": \"Dashboard einsehen\",\n  \"Set the Default Dashboard\": \"Standard-Dashboard festlegen\",\n  \"Log File\": \"Log Datei\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Keine Verschlüsselung\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Mail-Einstellungen\",\n  \"Manage email configuration.\": \"Mail-Einstellungen verwalten.\",\n  \"Sender Name\": \"Absender Name\",\n  \"Sender Email\": \"Absender-E-Mail\",\n  \"Mail Method\": \"Mail-Methode\",\n  \"SMTP Address\": \"SMTP Adresse\",\n  \"SMTP Port\": \"SMTP-Port\",\n  \"SMTP Encryption Protocol\": \"SMTP-Verschlüsselungs-Protokoll\",\n  \"SMTP Authorization Required\": \"SMTP Authorisation erforderlich\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Bitte auswählen, wenn der SMTP Server eine SMTP Authorisation erfordert.\",\n  \"Username\": \"Benutzername\",\n  \"Password\": \"Passwort\",\n  \"Sendmail Path\": \"Sendmail Pfad\",\n  \"Please specify the path of the sendmail program.\": \"Bitte gib den (absoluten) Pfad zum Sendmail Programm an.\",\n  \"Mailgun Domain\": \"Mailgun-Domain\",\n  \"Please specify the Mailgun domain name.\": \"Bitte gib die Mailgun-Domain an.\",\n  \"Mailgun Secret\": \"Mailgun-Schlüssel\",\n  \"Enter your Mailgun API key.\": \"Gib Deinen Mailgun-API-Schlüssel an.\",\n  \"SES Key\": \"SES Schlüssel\",\n  \"Enter your SES API key\": \"Geben Sie Ihren SES API-Schlüssel ein\",\n  \"SES Secret\": \"SES Geheimnis\",\n  \"Enter your SES API secret key\": \"Geben Sie Ihren SES API Geheimschlüssel ein\",\n  \"SES Region\": \"SES-Region\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Geben Sie Ihre SES-Region ein (z.B. us-east-1)\",\n  \"Postmark Token\": \"Postmark-Token\",\n  \"Enter your Postmark API secret key\": \"Geben Sie Ihren Postmark-API-Schlüssel ein\",\n  \"Define administrator roles\": \"Administratorrollen definieren\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Beschränken Sie den Zugriff auf diese Seite auf Administratoren mit den folgenden Rollen.\",\n  \"Group\": \"Gruppe\",\n  \"Create Group\": \"Gruppe erstellen\",\n  \"Site Group\": \"Site-Gruppe\",\n  \"Site Groups\": \"Site-Gruppen\",\n  \"Manage Site Groups\": \"Site-Gruppen verwalten\",\n  \"Group Name\": \"Gruppenname\",\n  \"All Sites\": \"Alle Sites\",\n  \"Manage Backend Preferences\": \"Backend-Einstellungen verwalten\",\n  \"Manage Code Editor Preferences\": \"Code-Editor-Einstellungen verwalten\",\n  \"Customize Backend Styles\": \"Backend individualisieren\",\n  \"Mail Templates\": \"Mail-Vorlagen\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Vorlagen für Mails an Benutzer und Administratoren verwalten.\",\n  \"Mail Branding\": \"Mail-Branding\",\n  \"Modify the colors and appearance of mail templates.\": \"Das Erscheinungsbild von Mail-Vorlagen anpassen.\",\n  \"Event Log\": \"Event-Log\",\n  \"View system log messages with their recorded time and details.\": \"Rufe ein Event-Log mit Zeitangaben und Fehlerdetails auf.\",\n  \"Request Log\": \"Request-Log\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Liste fehlerhafte Requests auf, z.B. Seite nicht gefunden (404).\",\n  \"Log Settings\": \"Log-Einstellungen\",\n  \"Specify which areas should use logging.\": \"Logging-Einstellungen verwalten.\",\n  \"Test message sent.\": \"Die Testnachricht wurde erfolgreich versendet.\",\n  \"New Layout\": \"Neues Layout\",\n  \"New Partial\": \"Neues Partial\",\n  \"New Template\": \"Neue Vorlage\",\n  \"Template\": \"Vorlage\",\n  \"Templates\": \"Vorlagen\",\n  \"Layouts\": \"Layouts\",\n  \"Partials\": \"Partials\",\n  \"Partial\": \"Partial\",\n  \"Mail Partials\": \"Mail-Partials\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"Mail-Layouts\",\n  \"Unique code used to refer to this template\": \"Eindeutiger Code um diese Vorlage zu referenzieren\",\n  \"-- No layout --\": \"-- Kein Layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Nur Text\",\n  \"Disable automatic inline CSS\": \"Automtische inline CSS deaktivieren\",\n  \"Options\": \"Optionen\",\n  \"Subject\": \"Betreff\",\n  \"Email message subject\": \"E-Mail-Betreff\",\n  \"Description\": \"Beschreibung\",\n  \"Drivers Not Installed\": \"Treiber nicht installiert.\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Für diese Mail-Methode muss das Plugin \\\":plugin\\\" installiert werden, bevor Du Mails verschicken kannst.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Event-ID\",\n  \"Level\": \"Level\",\n  \"Date & Time\": \"Datum & Zeit\",\n  \"Message\": \"Nachricht\",\n  \"Logging\": \"Logging\",\n  \"Log Bad Requests\": \"Fehlerhafte Requests protokollieren\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Requests, die Aufmerksamkeit erfordern, wie z. B. 404-Fehler.\",\n  \"Log Theme Changes\": \"Theme-Änderungen protokollieren\",\n  \"When a change is made to the theme using the backend.\": \"Änderungen am Theme, die über das Backend vorgenommen wurden.\",\n  \"Log System Events\": \"System-Events protokollieren\",\n  \"Store system events in the database in addition to the file-based log.\": \"System-Events zusätzlich zur Logdatei auch in der Datenbank abspeichern.\",\n  \"Background\": \"Hintergrund\",\n  \"Body background\": \"Hintergrund des Body\",\n  \"Content background\": \"Hintergrund des Inhalts\",\n  \"Inner content background\": \"Hintergrund des inneren Inhalts\",\n  \"Buttons\": \"Buttons\",\n  \"Button text color\": \"Textfarbe der Buttons\",\n  \"Primary button background\": \"Hintergrund primärer Buttons\",\n  \"Positive button background\": \"Hintergrund positiver Buttons\",\n  \"Negative button background\": \"Hintergrund negativer Buttons\",\n  \"Typography\": \"Typografie\",\n  \"Header color\": \"Farbe des Headers\",\n  \"Headings color\": \"Farbe der Überschriften\",\n  \"Text color\": \"Farbe des Texts\",\n  \"Link color\": \"Link-Farbe\",\n  \"Footer color\": \"Farbe des Footers\",\n  \"Borders\": \"Rahmen\",\n  \"Body border color\": \"Rahmenfarbe des Body\",\n  \"Subcopy border color\": \"Fahmenfarbe der Fussnoten\",\n  \"Table border color\": \"Rahmenfarbe der Tabelle\",\n  \"Components\": \"Komponenten\",\n  \"Panel background\": \"Hintergrundfarbe des Panels\",\n  \"Promotion background\": \"Hinterbrundfarbe der Promotions\",\n  \"Promotion border color\": \"Rahmenfarbe der Promotions\",\n  \"Customize Mail Appearance\": \"Erscheinungsbild von Mails anpassen\",\n  \"Version\": \"Version\",\n  \"Enabled\": \"Aktiviert\",\n  \"Latest\": \"Neueste\",\n  \"Log ID\": \"Log-ID\",\n  \"Counter\": \"Zähler\",\n  \"Referers\": \"Referer\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Dieses Event-Log listet potentielle Fehler in der Anwendung, wie Exceptions und Debugging-Informationen.\",\n  \"Event\": \"Event\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Dieses Request-Log listet Browser-Anfragen, die Ihrer Aufmerksamkeit bedürfen könnten. Falls zum Beispiel ein Besucher eine nicht existierende CMS-Seite öffnet, wird ein Eintrag mit dem Fehler 404 angelegt.\",\n  \"There were no detected referrers to this URL.\": \"Es wurde keine Verweise auf diese URL gefunden.\",\n  \"Request\": \"Request\",\n  \"Event log emptied\": \"Event-Log erfolgreich zurückgesetzt.\",\n  \"Empty Event Log\": \"Event-Log zurücksetzen\",\n  \"Emptying Event Log...\": \"Event-Log wird zurückgesetzt...\",\n  \"Return to Event Log\": \"Zurück zum Event-Log\",\n  \"Installed\": \"Installiert\",\n  \"Primary Site\": \"Primäre Site\",\n  \"Refresh Data\": \"Daten aktualisieren\",\n  \"Remove Data\": \"Daten entfernen\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Bist du sicher, dass du die ausgewählten Plugins zurücksetzen möchtest? Die Daten der Plugins werden gelöscht und der Initialzustand wird wiederhergestellt.\",\n  \"Reset Plugin Data\": \"Plugin-Daten zurücksetzen\",\n  \"Enable Plugins\": \"Plugins aktivieren\",\n  \"Are you sure you want to :action these plugins?\": \"Bist du sicher, dass du die Plugins :action möchtest?\",\n  \"enable\": \"aktivieren\",\n  \"disable\": \"deaktivieren\",\n  \"Disable Plugins\": \"Plugins deaktivieren\",\n  \"Select Action...\": \"Aktion auswählen...\",\n  \"Data has been removed.\": \"Die Daten wurden entfernt.\",\n  \"Plugin has been removed from the file system.\": \"Das Plugin wurde aus dem Dateisystem gelöscht.\",\n  \"search plugins to install...\": \"Suche Plugins zum Installieren...\",\n  \"Plugin has been disabled by configuration.\": \"Das Plugin ist in der Konfiguration deaktiviert.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Das Plugin hat fehlende Abhängigkeiten oder ist vom System deaktiviert worden.\",\n  \"search themes to install...\": \"Suche Themes zum Installieren...\",\n  \"Install Theme\": \"Theme installieren\",\n  \"Theme Name\": \"Theme-Name\",\n  \"Install Plugin\": \"Plugin installieren\",\n  \"Plugin Name\": \"Plugin-Name\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Benennen Sie das Plugin eindeutig, zum Beispiel RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Nutze einen eindeutigen Code. Zum Beispiel: RainLab.Vanilla\",\n  \"Select Installation Method\": \"Installationsmethode auswählen\",\n  \"Make a Copy (Recommended)\": \"Kopie erstellen (empfohlen)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Mache eine Kopie dieses Themes um es zu verändern und zukünftige Updates manuell zu verwalten.\",\n  \"Install with Composer\": \"Mit Composer installieren\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Erweitere das Theme mit einem Child-Theme, um zukünftige Änderungen am Theme zu erhalten.\",\n  \"Seed Theme Data\": \"Theme-Daten seeden\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Importiere die Blueprint- und Sprachdateien sowie Datenbankinhalte für dieses Theme, sofern vorhanden. Du kannst diesen Schritt überspringen und ihn später in den Frontend-Theme-Einstellungen manuell auslösen.\",\n  \"Change Status\": \"Status ändern\",\n  \"Site Definitions\": \"Site-Definitionen\",\n  \"System Updates\": \"Aktualisierungen\",\n  \"Find a Setting...\": \"Einstellung finden...\",\n  \"Return to System Updates\": \"Zu den Software-Aktualisierungen zurückkehren\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Importiere die Blueprint- und Sprachdateien sowie Datenbankinhalte für dieses Theme, sofern vorhanden. Du kannst diesen Schritt überspringen und ihn später in den Frontend-Theme-Einstellungen manuell auslösen.\"\n}"
  },
  {
    "path": "modules/system/lang/el/client.php",
    "content": "<?php\n/* Greek Language Updated on 2016-07-16 v1.02 */\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n    'markdowneditor' => [\n        'formatting' => 'Μορφοποίηση',\n        'quote' => 'Παράθεση',\n        'code' => 'Κώδικας',\n        'header1' => 'Κεφαλίδα 1',\n        'header2' => 'Κεφαλίδα 2',\n        'header3' => 'Κεφαλίδα 3',\n        'header4' => 'Κεφαλίδα 4',\n        'header5' => 'Κεφαλίδα 5',\n        'header6' => 'Κεφαλίδα 6',\n        'bold' => 'Έντονα',\n        'italic' => 'Ιταλικά',\n        'unorderedlist' => 'Μη ταξινομημένη λίστα',\n        'orderedlist' => 'Ταξινομημένη λίστα',\n        'video' => 'Βίντεο',\n        'image' => 'Εικόνα',\n        'link' => 'Σύνδεσμος',\n        'horizontalrule' => 'Εισαγωγή Οριζόντιας Γραμμής',\n        'fullscreen' => 'Πλήρης οθόνη',\n        'preview' => 'Προεπισκόπηση',\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Εισαγωγή Συνδέσμου από τα Μέσα\",\n        'insert_image' => \"Εισαγωγή Εικόνας από τα Μέσα\",\n        'insert_video' => \"Εισαγωγή Βίντεο από τα Μέσα\",\n        'insert_audio' => \"Εισαγωγή Ήχου από τα Μέσα\",\n        'invalid_file_empty_insert' => \"Παρακαλούμε επιλέξτε ένα αρχείο για να εισάγετε συνδέσμους σε αυτό.\",\n        'invalid_file_single_insert' => \"Παρακαλούμε επιλέξτε ένα μοναδικό αρχείο.\",\n        'invalid_image_empty_insert' => \"Παρακαλούμε επιλέξτε την εικόνα ή τις εικόνες για εισαγωγη.\",\n        'invalid_video_empty_insert' => \"Παρακαλούμε επιλέξτε ένα αρχείο βίντεο για εισαγωγή.\",\n        'invalid_audio_empty_insert' => \"Παρακαλούμε επιλέξτε ένα αρχείο ήχου για εισαγωγή.\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'Εντάξει',\n        'cancel_button_text' => 'Άκυρο',\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Προηγούμενος Μήνας',\n        'nextMonth' => 'Επόμενος Μήνας',\n        'months' => ['Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', 'Απρίλιος', 'Μάιος', 'Ιούνιος', 'Ιούλιος', 'Αύγουστος', 'Σεπτέμβριος', 'Οκτώβριος', 'Νοέμβριος', 'Δεκέμβριος'],\n        'weekdays' => ['Κυριακή', 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο'],\n        'weekdaysShort' => ['Κυρ', 'Δευ', 'Τρι', 'Τετ', 'Πεμ', 'Παρ', 'Σαβ']\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'όλα',\n        ],\n        'dates' => [\n            'all' => 'όλα',\n            'filter_button_text' => 'Φίλτρο',\n            'reset_button_text'  => 'Επαναφορά',\n            'date_placeholder' => 'Ημερομηνία',\n            'after_placeholder' => 'Μετά',\n            'before_placeholder' => 'Πρίν',\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Εμφάνιση stacktrace',\n        'hide_stacktrace' => 'Απόκρυψη stachtrace',\n        'tabs' => [\n            'formatted' => 'Μορφοποιημένο',\n            'raw' => 'Ακατέργαστο',\n        ],\n        'editor' => [\n            'title' => 'Επεξεργαστής πηγαίου κώδικα',\n            'description' => 'Το λειτουργικό σου σύστημα θα πρέπει να ρυθμιστεί για να ανταποκρίνεται σε μία από τις ακόλουθες URL απεικονίσεις.',\n            'openWith' => 'Άνοιγμα με',\n            'remember_choice' => 'Απομνημόνευση αυτής της επιλογής για αυτήν την περίοδο λειτουργίας',\n            'open' => 'Άνοιγμα',\n            'cancel' => 'Άκυρο',\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/el/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Επιστροφή στα βασικά',\n  ],\n  'directory' => [\n    'create_fail' => 'Δεν είναι δυνατή η δημιουργία του καταλόγου: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Δεν είναι δυνατή η δημιουργία του αρχείου: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Μη έγκυρο διακριτικό ασφαλείας',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Σύστημα',\n    'menu_label' => 'Σύστημα',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Διάφορα',\n      'logs' => 'Αρχεία Καταγραφής',\n      'mail' => 'Ηλεκτρονικό Ταχυδρομείο',\n      'shop' => 'Κατάστημα',\n      'team' => 'Ομάδα',\n      'users' => 'Χρήστες',\n      'system' => 'Σύστημα',\n      'social' => 'Κοινωνικό Δίκτυο',\n      'events' => 'Εκδηλώσεις',\n      'customers' => 'Πελάτες',\n      'my_settings' => 'Οι Ρυθμίσεις Μου',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Θέμα',\n    'unnamed' => 'Ανώνυμο θέμα',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Εγκατάσταση θεμάτων',\n    'installed' => 'Εγκατεστημένο θέματα',\n    'no_themes' => 'Δεν υπάρχουν εγκατεστημένα θέματα από το MarketPlace.',\n    'recommended' => 'Προτεινόμενα',\n    'remove_confirm' => 'Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το θέμα;',\n  ],\n  'plugin' => [\n    'label' => 'Πρόσθετο',\n    'unnamed' => 'Ανώνυμο πρόσθετο',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Ενεργοποίηση ή Απενεργοποίηση',\n    'enable_or_disable_title' => 'Ενεργοποίηση ή Απενεργοποίηση Πρόσθετων',\n    'install' => 'Εγκατάσταση πρόσθετων',\n    'install_products' => 'Εγκατάσταση προϊόντων',\n    'installed' => 'Εγκατεστημένα πρόσθετα',\n    'no_plugins' => 'Δεν υπάρχουν εγκατεστημένα πρόσθετα από τo MarketPlace.',\n    'recommended' => 'Προτεινόμενα',\n    'remove' => 'Αφαίρεση',\n    'refresh' => 'Ανανέωση',\n    'disabled_label' => 'Ανενεργό',\n    'disabled_help' => 'Τα πρόσθετα που είναι απενεργοποιημένα αγνοούνται από την εφαρμογή.',\n    'frozen_label' => 'Πάγωμα ενημερώσεων',\n    'frozen_help' => 'Τα πρόσθετα τα οποία είναι παγωμένα θα αγνοηθούν από την διαδικασία ενημέρωσης.',\n    'selected_amount' => 'Επιλεγμένα πρόσθετα',\n    'remove_confirm' => 'Είστε σίγουροι ότι θέλετε να αφαιρέσετε αυτό το πρόσθετο;',\n    'remove_success' => 'Επιτυχημένη αφαίρεση αυτών των πρόσθετων από το σύστημα.',\n    'refresh_success' => 'Επιτυχημένη ανανέωση αυτών των πρόσθετων στο σύστημα.',\n    'disable_confirm' => 'Είστε σίγουροι;',\n    'disable_success' => 'Επιτυχημένη απενεργοποίηση αυτών των πρόσθετων.',\n    'enable_success' => 'Επιτυχημένη ενεργοποίηση αυτών των πρόσθετων.',\n  ],\n  'project' => [\n    'attach' => 'Σύνδεση Project',\n    'detach' => 'Αποσύνδεση Project',\n    'none' => 'Κανένα',\n    'id' => [\n      'missing' => 'Παρακαλούμε καθορίστε το Project ID που θα χρησιμοποιήσετε.',\n    ],\n    'detach_confirm' => 'Είστε σίγουροι ότι θέλετε να αποσυνδέσετε το Project σας;',\n    'unbind_success' => 'Το Project αποσυνδέθηκε.',\n  ],\n  'settings' => [\n    'search' => 'Αναζήτηση',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Απαιτείται SSL σύνδεση',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Μοναδικό όνομα που χρησιμοποιείται για την αναφορά σε αυτό το πρότυπο',\n    'test_send' => 'Αποστολή δοκιμαστικού μηνύματος',\n    'test_confirm' => 'Ένα δοκιμαστικό μήνυμα θα σταλεί στο :email. Συνέχεια;',\n    'creating' => 'Δημιουργία Προτύπου...',\n    'creating_layout' => 'Δημιουργία Διάταξης...',\n    'saving' => 'Αποθήκευση Προτύπου...',\n    'saving_layout' => 'Αποθήκευση Διάταξης...',\n    'delete_confirm' => 'Να διαγραφεί αυτό το πρότυπο;',\n    'delete_layout_confirm' => 'Να διαγραφεί αυτή η διάταξη;',\n    'deleting' => 'Διαγραφή Προτύπου...',\n    'deleting_layout' => 'Διαγραφή Διάταξης...',\n    'sending' => 'Αποστολή δοκιμαστικού μηνύματος...',\n    'return' => 'Επιστροφή στην λίστα με τα πρότυπα',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Δημιουργός',\n    'plugin_not_found' => 'Το πρόσθετο δε βρέθηκε',\n    'core_build' => 'Έκδοση :build',\n    'core_build_help' => 'Η τελευταία έκδοση είναι διαθέσιμη.',\n    'themes' => 'Θέματα',\n    'plugin_version_none' => 'Νέο πρόσθετο',\n    'plugin_current_version' => 'Τρέχουσα έκδοση',\n    'theme_new_install' => 'Εγκατάσταση νέου θέματος.',\n    'theme_extracting' => 'Ξεπακετάρισμα θέματος: :name',\n    'update_label' => 'Ενημέρωση Λογισμικού',\n    'update_loading' => 'Φόρτωση διαθέσιμων ενημερώσεων...',\n    'force_label' => 'Εξανάγκασε την ενημέρωση',\n    'found' => [\n      'label' => 'Βρέθηκαν νέες ενημερώσεις!',\n      'help' => 'Κάντε κλικ στο Ενημέρωση Λογισμικού για να ξεκινήσει η διαδικασία της ενημέρωσης.',\n    ],\n    'none' => [\n      'label' => 'Καμία ενημέρωση',\n      'help' => 'Δεν βρέθηκαν νέες ενημερώσεις.',\n    ],\n    'important_action' => [\n      'empty' => 'Επιλογή ενέργειας',\n      'confirm' => 'Επιβεβαίωση ενημέρωσης',\n      'skip' => 'Παράκαμψη αυτού του πρόσθετου (μόνο μια φορά)',\n      'ignore' => 'Παράκαμψη αυτού του πρόσθετου (πάντα)',\n    ],\n    'important_action_required' => 'Απαιτείται ενέργεια',\n    'important_view_guide' => 'Εμφάνιση οδηγού αναβάθμισης',\n    'important_alert_text' => 'Κάποιες ενημερώσεις χρειάζονται την προσοχή σας.',\n    'details_title' => 'Λεπτομέρειες πρόσθετου',\n    'details_view_homepage' => 'Εμφάνιση αρχικής σελίδας',\n    'details_current_version' => 'Τρέχουσα έκδοση',\n    'details_author' => 'Δημιουργός',\n  ],\n  'server' => [\n    'connect_error' => 'Σφάλμα σύνδεσης στον διακομιστή.',\n    'response_not_found' => 'Δεν μπόρεσε να βρεθεί ο διακομιστής ενημερώσεων.',\n    'response_invalid' => 'Μη έγκυρη απάντηση από τον διακομιστή.',\n    'response_empty' => 'Κενή απάντηση από τον διακομιστή.',\n    'file_error' => 'Ο διακομιστής απέτυχε να παραδώσει το πακέτο.',\n    'file_corrupt' => 'Το αρχείο από τον διακομιστή είναι κατεστραμμένο.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Η κλάση :class πρέπει να καθορίζει την ιδιότητα $:property που χρησιμοποιείτε από την συμπεριφορά :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Δεν κατέστη δυνατό να βρεθεί το αρχείο διαμόρφωσης :file το οποίο ορίστηκε στην διαδρομή :location.',\n    'required' => 'Η διαμόρφωση που χρησιμοποιήθηκε στην διαδρομή :location πρέπει να παρέχει μια τιμή \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Δεν κατέστη δυνατή η αποσυμπίεση του αρχείου του πυρήνα \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Άδειασμα καταγραφής αιτήσεων',\n    'empty_loading' => 'Αδειάζει το αρχείο καταγραφής αιτήσεων',\n    'empty_success' => 'Επιτυχές άδειασμα του αρχείου καταγραφής αιτήσεων',\n    'return_link' => 'Επιστροφή στην καταγραφή αιτήσεων',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Σύστημα',\n    'manage_system_settings' => 'Διαχείριση ρυθμίσεων συστήματος',\n    'manage_software_updates' => 'Διαχείριση ενημερώσεων του λογισμικού',\n    'access_logs' => 'Προβολή των αρχείων καταγραφής του συστήματος',\n    'manage_mail_templates' => 'Διαχείριση προτύπων ηλεκτρονικού ταχυδρομείου',\n    'manage_mail_settings' => 'Διαχείριση ρυθμίσεων ηλεκτρονικού ταχυδρομείου',\n    'manage_other_administrators' => 'Διαχείριση άλλων διαχειριστών',\n  ],\n  'media' => [\n    'invalid_path' => 'Ορίστηκε μη έγκυρη διαδρομή αρχείου : \\':path\\'.',\n    'folder_size_items' => 'αντικείμενο(α)',\n  ],\n  'pagination' => [\n    'previous' => 'Προηγούμενη',\n    'next' => 'Επόμενη',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/el/validation.php",
    "content": "<?php\n/* Greek Language Updated on 2015-07-06 v1.01 */\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \"Το :attribute πρέπει να γίνει αποδεκτό.\",\n    \"active_url\"       => \"Το :attribute δεν είναι ένα έγκυρο URL.\",\n    \"after\"            => \"Η :attribute πρέπει να είναι μια ημερομηνία μετρά την :date.\",\n    \"alpha\"            => \"Το :attribute πρέπει να περιέχει μόνο γράμματα.\",\n    \"alpha_dash\"       => \"Το :attribute πρέπει να περιέχει μόνο γράμματα, νούμερα, και παύλες.\",\n    \"alpha_num\"        => \"Το :attribute πρέπει να περιέχει μόνο γράμματα και νούμερα.\",\n    \"array\"            => \"Το :attribute πρέπει να είναι ένας πίνακας.\",\n    \"before\"           => \"Η :attribute πρέπει να είναι μια ημερομηνία πριν την :date.\",\n    \"between\"          => [\n        \"numeric\" => \"Το :attribute πρέπει να είναι μεταξύ :min - :max.\",\n        \"file\"    => \"Το :attribute πρέπει να είναι μεταξύ :min - :max kilobytes.\",\n        \"string\"  => \"Το :attribute πρέπει να είναι μεταξύ :min - :max χαρακτήρες.\",\n        \"array\"   => \"Ο :attribute πρέπει να εχει μεταξύ :min - :max αντικείμενα.\",\n    ],\n    \"confirmed\"        => \"Η επαλήθευση του :attribute δεν ταυτίζεται.\",\n    \"date\"             => \"Η :attribute δεν είναι μια έγκυρη ημερομηνία.\",\n    \"date_format\"      => \"Η :attribute δεν ταυτίζεται με την μορφοποίηση :format\",\n    \"different\"        => \"Το :attribute και το :other πρέπει να είναι διαφορετικά.\",\n    \"digits\"           => \"Το :attribute πρέπει να είναι :digits ψηφία.\",\n    \"digits_between\"   => \"Το :attribute πρέπει να είναι μεταξύ :min και :max ψηφία.\",\n    \"email\"            => \"Η μορφή του :attribute είναι μη έγκυρη.\",\n    \"exists\"           => \"Η επιλεγμένη :attribute είναι μη έγκυρη.\",\n    \"image\"            => \"Η :attribute πρέπει να είναι εικόνα.\",\n    \"in\"               => \"Η επιλεγμένη :attribute είναι μη έγκυρη.\",\n    \"integer\"          => \"Ο :attribute πρέπει να είναι ένας ακέραιος αριθμός.\",\n    \"ip\"               => \"Η :attribute πρέπει να είναι μια έγκυρη IP διεύθυνση.\",\n    \"max\"              => [\n        \"numeric\" => \"Το :attribute δεν πρέπει να είναι μεγαλύτερο από :max.\",\n        \"file\"    => \"Το :attribute δεν πρέπει να είναι μεγαλύτερο από :max kilobytes.\",\n        \"string\"  => \"Το :attribute δεν πρέπει να είναι μεγαλύτερο από :max χαρακτήρες.\",\n        \"array\"   => \"Το :attribute δεν πρέπει να είναι έχει περισσότερα από :max αντικείμενα.\",\n    ],\n    \"mimes\"            => \"Το :attribute πρέπει να είναι ένα αρχείο με τύπο: :values.\",\n    \"extensions\"       => \"Το :attribute πρέπει να έχει μια επέκταση από: :values.\",\n    \"min\"              => [\n        \"numeric\" => \"Το :attribute πρέπει να είναι το λιγότερο :min.\",\n        \"file\"    => \"Το :attribute πρέπει να είναι το λιγότερο :min kilobytes.\",\n        \"string\"  => \"Το :attribute πρέπει να είναι το λιγότερο :min χαρακτήρες.\",\n        \"array\"   => \"Το :attribute πρέπει να έχει το λιγότερο :min αντικείμενα.\",\n    ],\n    \"not_in\"           => \"Το επιλεγμένο :attribute είναι μη έγκυρο.\",\n    \"numeric\"          => \"Το :attribute πρέπει να είναι ένας αριθμός.\",\n    \"regex\"            => \"Η μορφοποίηση του :attribute είναι μη έγκυρη.\",\n    \"required\"         => \"Το πεδίο :attribute απαιτείται.\",\n    \"required_if\"      => \"Το πεδίο :attribute απαιτείται όταν το :other είναι :value.\",\n    \"required_with\"    => \"Το πεδίο :attribute απαιτείται όταν οι :values είναι δηλωμένες.\",\n    \"required_without\" => \"Το πεδίο :attribute απαιτείται όταν οι :values δεν είναι δηλωμένες. \",\n    \"same\"             => \"Το :attribute και το :other δεν ταυτίζονται.\",\n    \"size\"             => [\n        \"numeric\" => \"Το :attribute πρέπει να είναι :size.\",\n        \"file\"    => \"Το :attribute πρέπει να είναι :size kilobytes.\",\n        \"string\"  => \"Το :attribute πρέπει να είναι :size χαρακτήρες.\",\n        \"array\"   => \"Το :attribute πρέπει να είναι :size αντικείμενα.\",\n    ],\n    \"unique\"           => \"Η :attribute έχει ήδη χρησιμοποιηθεί.\",\n    \"url\"              => \"Η :attribute είναι μη έγκυρη.\",\n    \n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/el.json",
    "content": "{\n  \"Check For Updates\": \"Έλεγχος για ενημερώσεις\",\n  \"Install Packages\": \"Εγκατάσταση πακέτων\",\n  \"Manage Themes\": \"Διαχείριση θεμάτων\",\n  \"Manage Plugins\": \"Διαχείριση πρόσθετων\",\n  \"Project\": \"Project\",\n  \"Owner\": \"Ιδιοκτήτης\",\n  \"Plugins\": \"Πρόσθετα\",\n  \"Recommended\": \"Συνιστάται\",\n  \"Disabled\": \"Ανενεργό\",\n  \"Current Build\": \"Τρέχουσα έκδοση\",\n  \"Updates Available\": \"Διαθέσιμες ενημερώσεις\",\n  \"Up to Date\": \"Ενημερωμένο\",\n  \"Latest Build\": \"Τελευταία κατασκευή\",\n  \"View Changelog\": \"Προβολή καταγραφής αλλαγών\",\n  \"Software Updates\": \"Ενημερώσεις & Πρόσθετα\",\n  \"Update the system modules and plugins.\": \"Ενημερώνει το σύστημα, διαχειρίζεται και εγκαθιστά πρόσθετα και θέματα.\",\n  \"General\": \"Γενικά\",\n  \"Mail\": \"Ταχυδρομείο\",\n  \"Utilities\": \"Βοηθητικά προγράμματα\",\n  \"Settings\": \"Ρυθμίσεις\",\n  \"Show All Settings\": \"Εμφάνιση όλων των ρυθμίσεων\",\n  \"Unable to find the specified settings.\": \"Δεν κατέστη δυνατόν να βρεθούν οι συγκεκριμένες ρυθμίσεις.\",\n  \"The settings page is missing a Model definition.\": \"Λείπει από την σελίδα των ρυθμίσεων ο ορισμός του μοντέλου.\",\n  \":name settings updated\": \"Οι ρυθμίσεις του :name έχουν ενημερωθεί.\",\n  \"Return to System Settings\": \"Επιστροφή στις ρυθμίσεις του συστήματος\",\n  \"Search Settings...\": \"Βρείτε μια ρύθμιση...\",\n  \"Disable mail branding CSS\": \"Απενεργοποίηση CSS επωνυμίας αλληλογραφίας\",\n  \"Manage Sites\": \"Διαχείριση τοποθεσιών\",\n  \"Manage the websites available for this application.\": \"Διαχειριστείτε τους διαθέσιμους ιστότοπους για αυτήν την εφαρμογή.\",\n  \"Marketplace\": \"Αγορά\",\n  \"There is no documentation provided.\": \"Δεν παρέχονται οδηγίες χρήσης.\",\n  \"Documentation\": \"Οδηγιες Χρήσης\",\n  \"Upgrade Guide\": \"Οδηγός Αναβάθμισης\",\n  \"License\": \"Αδεια\",\n  \"Attach to Project\": \"Σύνδεση με το Project\",\n  \"Manage Updates\": \"Διαχείριση Ενημερώσεων\",\n  \"Software Update\": \"Ενημέρωση λογισμικού\",\n  \"Return to Software Updates\": \"Επιστροφή στις ενημερώσεις του συστήματος\",\n  \"Try Again\": \"Προσπαθήστε ξανά\",\n  \"Unpacking application files\": \"Ξεπακετάρισμα αρχείων εφαρμογής\",\n  \"Update Failed\": \"Η ενημέρωση απέτυχε\",\n  \"Unpacking plugin: :name\": \"Ξεπακετάρισμα πρόσθετου: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Ο κύριος ιστότοπος χρησιμοποιείται από προεπιλογή και δεν μπορεί να διαγραφεί.\",\n  \"Disabled sites are not shown on the frontend.\": \"Οι απενεργοποιημένοι ιστότοποι δεν εμφανίζονται στη διεπαφή.\",\n  \"Enabled in the Admin Panel\": \"Ενεργοποιήθηκε στον Πίνακα Διαχειριστή\",\n  \"Configuration\": \"Διαμόρφωση\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Χρησιμοποιήστε το εάν θέλετε ο ιστότοπος να είναι ενεργοποιημένος στον πίνακα διαχείρισης.\",\n  \"Install\": \"Εγκαθιστώ\",\n  \"Sync Project\": \"Συγχρονισμός έργου\",\n  \"Name\": \"Όνομα\",\n  \"Unique Code\": \"Μοναδικός Κώδικας\",\n  \"Theme\": \"Θέμα\",\n  \"Sites\": \"Τοποθεσίες\",\n  \"Create Site\": \"Δημιουργία ιστότοπου\",\n  \"Base URL\": \"Βασική διεύθυνση URL\",\n  \"Status\": \"Κατάσταση\",\n  \"Current default value: :value\": \"Τρέχουσα προεπιλεγμένη τιμή: :value\",\n  \"Locale\": \"Τοπικός\",\n  \"Timezone\": \"Ζώνη ώρας\",\n  \"Custom application URL\": \"Προσαρμοσμένη διεύθυνση URL εφαρμογής\",\n  \"Override the application URL when this site is active.\": \"Παράκαμψη της διεύθυνσης URL της εφαρμογής όταν αυτός ο ιστότοπος είναι ενεργός.\",\n  \"Use a CMS route prefix\": \"Χρησιμοποιήστε ένα πρόθεμα διαδρομής CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Ένα πρόθεμα μπορεί να προσδιορίσει αυτόν τον ιστότοπο όταν χρησιμοποιείτε ένα κοινόχρηστο όνομα κεντρικού υπολογιστή.\",\n  \"Define matching hostnames\": \"Ορίστε τα αντίστοιχα ονόματα κεντρικών υπολογιστών\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Καθορίστε ονόματα τομέα και μοτίβα που πρέπει να χρησιμοποιούνται για την εξυπηρέτηση αυτού του ιστότοπου.\",\n  \"Display a style for this site\": \"Εμφάνιση χρώματος για αυτόν τον ιστότοπο\",\n  \"To help identify this site, display a color in the admin panel.\": \"Για να βοηθήσετε στην αναγνώριση αυτού του ιστότοπου, εμφανίστε ένα χρώμα στον πίνακα διαχείρισης.\",\n  \"Save\": \"Αποθηκεύσετε\",\n  \"Save and Close\": \"Αποθήκευσε και κλείσε\",\n  \"Use Default\": \"Χρησιμοποιήστε την προεπιλογή\",\n  \"Use Custom\": \"Χρησιμοποιήστε το Custom\",\n  \"Specify a custom locale code.\": \"Καθορίστε έναν προσαρμοσμένο κωδικό τοπικής ρύθμισης.\",\n  \"Failed\": \"Απέτυχε\",\n  \"or\": \"ή\",\n  \"Code\": \"Κώδικας\",\n  \"October CMS Marketplace\": \"Οκτώβριος CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Το έργο δεν έχει πρόσθετα ή θέματα. Επισκεφτείτε το :link για να προσθέσετε μερικά.\",\n  \"Buy Now\": \"Αγορασε τωρα\",\n  \"Updating package manager\": \"Ενημέρωση διαχειριστή πακέτων\",\n  \"Updating application files\": \"Κατέβασμα αρχείων εφαρμογής\",\n  \"Setting build number\": \"Ρύθμιση αριθμού κατασκευής\",\n  \"Finishing update process\": \"Ολοκλήρωση διαδικασίας ενημέρωσης\",\n  \"Installing plugin: :name\": \"Κατέβασμα πρόσθετου: :name\",\n  \"Finishing installation process\": \"Ολοκλήρωση διαδικασίας εγκατάστασης\",\n  \"Removing theme: :name\": \"Αφαίρεση θέματος: :name\",\n  \"Please specify a Theme name to install.\": \"Παρακαλούμε προσδιορίστε το όνομα του Θέματος για την εγκατάσταση\",\n  \"Installing theme: :name\": \"Κατέβασμα θέματος: :name\",\n  \"Removing plugin: :name\": \"Κατάργηση προσθήκης: :name\",\n  \"Please specify a Plugin name to install.\": \"Παρακαλούμε προσδιορίστε το όνομα του Πρόσθετου για την εγκατάσταση\",\n  \"Update process complete\": \"Η διαδικασία ενημέρωσης ολοκληρώθηκε\",\n  \"Package installed successfully\": \"Το πρόσθετο εγκαταστάθηκε επιτυχώς\",\n  \"Check Dependencies\": \"Ελέγξτε τις εξαρτήσεις\",\n  \"Install Dependencies\": \"Εγκατάσταση Εξαρτήσεων\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Λείπουν εξαρτήσεις που απαιτούνται για τη σωστή λειτουργία του συστήματος.\",\n  \"License Key\": \"Κλειδί άδειας χρήσης\",\n  \"How to find your License Key\": \"Πώς να βρείτε το κλειδί άδειας χρήσης\",\n  \"The password attribute is required.\": \"Απαιτείται το χαρακτηριστικό κωδικού πρόσβασης.\",\n  \"The login attribute is required.\": \"Απαιτείται η ιδιότητα σύνδεσης.\",\n  \"Cannot login user since they are not activated.\": \"Δεν είναι δυνατή η σύνδεση του χρήστη, καθώς δεν είναι ενεργοποιημένος.\",\n  \"Cannot login user since they are banned.\": \"Δεν είναι δυνατή η σύνδεση του χρήστη, επειδή είναι αποκλεισμένοι.\",\n  \"Cannot login user since they are suspended.\": \"Δεν είναι δυνατή η σύνδεση του χρήστη επειδή έχουν τεθεί σε αναστολή.\",\n  \"A user was not found with the given credentials.\": \"Δεν βρέθηκε χρήστης με τα δεδομένα διαπιστευτήρια.\",\n  \"A user was found but the password did not match.\": \"Βρέθηκε ένας χρήστης αλλά ο κωδικός πρόσβασης δεν ταιριάζει.\",\n  \"User is not logged in\": \"Ο χρήστης δεν είναι συνδεδεμένος\",\n  \"Register Software\": \"Εγγραφή λογισμικού\",\n  \"View the Dashboard\": \"Προβολή του πίνακα ελέγχου\",\n  \"Set the Default Dashboard\": \"Ορίστε τον Προεπιλεγμένο πίνακα ελέγχου\",\n  \"Log File\": \"Αρχείο καταγραφής\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Ταχυδρομική σφραγίδα\",\n  \"No encryption\": \"Χωρίς κρυπτογράφηση\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Ρυθμίσεις\",\n  \"Manage email configuration.\": \"Διαχείριση ρυθμίσεων email.\",\n  \"Sender Name\": \"Όνομα Αποστολέα\",\n  \"Sender Email\": \"eMail Αποστολέα\",\n  \"Mail Method\": \"Μέθοδος Ηλεκτρονικού Ταχυδρομείου\",\n  \"SMTP Address\": \"Διεύθυνση SMTP\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"Πρωτόκολλο κρυπτογράφησης SMTP\",\n  \"SMTP Authorization Required\": \"Απαιτείται εξουσιοδότηση SMTP\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Χρησιμοποιείστε αυτό το πλαίσιο ελέγχου αν ο διακομιστής SMTP απαιτεί εξουσιοδότηση.\",\n  \"Username\": \"Όνομα Χρήστη\",\n  \"Password\": \"Κωδικός\",\n  \"Sendmail Path\": \"Διαδρομή Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Παρακαλούμε καθορίστε την διαδρομή του λογισμικού Sendmail.\",\n  \"Mailgun Domain\": \"Mailgun Domain\",\n  \"Please specify the Mailgun domain name.\": \"Παρακαλούμε καθορίστε το Domain Name του Mailgun.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Συμπληρώστε το API κλειδί του Mailgun.\",\n  \"SES Key\": \"Κλειδί SES\",\n  \"Enter your SES API key\": \"Συμπληρώστε το API κλειδί του SES\",\n  \"SES Secret\": \"Απόρρητο SES\",\n  \"Enter your SES API secret key\": \"Συμπληρώστε το API απόρρητο κλειδί του SES\",\n  \"SES Region\": \"Περιοχή SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Συμπληρώστε την περιοχή SES (π.χ. us-east-1)\",\n  \"Postmark Token\": \"Διακριτικό σφραγίδας ταχυδρομείου\",\n  \"Enter your Postmark API secret key\": \"Εισαγάγετε το μυστικό κλειδί του API Postmark\",\n  \"Define administrator roles\": \"Καθορισμός ρόλων διαχειριστή\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Περιορίστε την πρόσβαση σε αυτόν τον ιστότοπο μόνο σε διαχειριστή με τους ακόλουθους ρόλους.\",\n  \"Manage Backend Preferences\": \"Διαχείριση προτιμήσεων του backend\",\n  \"Manage Code Editor Preferences\": \"Διαχείριση προτιμήσεων του επεξεργαστεί κώδικα\",\n  \"Customize Backend Styles\": \"Προσαρμογή του back-end\",\n  \"Mail Templates\": \"Πρότυπα\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Τροποποίηση των προτύπων του ηλεκτρονικού ταχυδρομείου τα οποία στέλνονται στους χρήστες και τους διαχειριστές, διαχείριση των διατάξεων των eMail.\",\n  \"Event Log\": \"Καταγραφή συμβάντων\",\n  \"View system log messages with their recorded time and details.\": \"Προβολή μηνυμάτων καταγραφής με τον χρόνο δημιουργίας και τις λεπτομερείς τους.\",\n  \"Request Log\": \"Καταγραφή αιτήσεων\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Εμφάνιση κακών ή ανακατευθυμένων αιτήσεων, όπως το 'Η σελίδα δεν βρέθηκε' (404).\",\n  \"Test message sent.\": \"Το δοκιμαστικό μήνυμα έχει αποσταλεί.\",\n  \"New Layout\": \"Νέα Διάταξη\",\n  \"New Template\": \"Νέο Πρότυπο\",\n  \"Template\": \"Πρότυπο\",\n  \"Templates\": \"Πρότυπα\",\n  \"Layouts\": \"Διάταξεις\",\n  \"Layout\": \"Διάταξη\",\n  \"Mail Layouts\": \"Πρότυπα Ηλεκτρονικού Ταχυδρομείου\",\n  \"Unique code used to refer to this template\": \"Μοναδικός κωδικός που χρησιμοποιείται για την αναφορά σε αυτό το πρότυπο\",\n  \"-- No layout --\": \"-- Χωρίς διάταξη --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Απλό Κείμενο\",\n  \"Subject\": \"Θέμα\",\n  \"Email message subject\": \"Θέμα μηνύματος eMail\",\n  \"Description\": \"Περιγραφή\",\n  \"Drivers Not Installed\": \"Οι οδηγοί δεν είναι εγκατεστημένοι\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Αυτή η μέθοδος ταχυδρομείου απαιτεί να είναι εγκατεστημένο το πρόσθετο \\\":plugin\\\" πριν μπορέσετε να αποστείλετε ένα ηλεκτρονικό ταχυδρομείο.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID Συμβάντος\",\n  \"Level\": \"Επίπεδο\",\n  \"Date & Time\": \"Ημέρα & Ώρα\",\n  \"Message\": \"Μήνυμα\",\n  \"Version\": \"Έκδοση\",\n  \"Log ID\": \"ID Αρχείου Καταγραφής\",\n  \"Counter\": \"Καταμέτρηση\",\n  \"Referers\": \"Παραπομπές\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Αυτό το αρχείο καταγραφής εμφανίζει μια λίστα από ενδεχόμενα λάθη τα οποία συμβαίνουν στην εφαρμογή, όπως εξαιρέσεις και πληροφορίες αποσφαλμάτωσης.\",\n  \"Event\": \"Συμβάν\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Αυτό το αρχείο καταγραφής εμφανίζει μια λίστα από τις αιτήσεις στον περιηγητή που μπορεί να χρειάζονται προσοχή. Για παραδείγματα ένας επισκέπτης ανοίξει μια σελίδα στο CMS η οποία δεν μπορεί να βρεθεί, μια εγγραφή θα δημιουργηθεί με τον κωδικό κατάστασης 404.\",\n  \"Request\": \"Αίτηση\",\n  \"Event log emptied\": \"Επιτυχές άδειασμα του αρχείου καταγραφής συμβάντων.\",\n  \"Empty Event Log\": \"Άδειασμα καταγραφής συμβάντων\",\n  \"Emptying Event Log...\": \"Αδειάζει το αρχείο καταγραφής συμβάντων...\",\n  \"Return to Event Log\": \"Επιστροφή στην καταγραφή συμβάντων\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Είστε σίγουροι;\",\n  \"Plugin has been removed from the file system.\": \"Το πρόσθετο έχει αφαιρεθεί από το σύστημα.\",\n  \"search plugins to install...\": \"αναζήτηση πρόσθετων για εγκατάσταση...\",\n  \"search themes to install...\": \"αναζήτηστε θέματα για να τα εγκαταστήσετε...\",\n  \"Install Theme\": \"Εγκατάσταση Θέματος\",\n  \"Theme Name\": \"Όνομα Θέματος\",\n  \"Install Plugin\": \"Εγκατάσταση Πρόσθετου\",\n  \"Plugin Name\": \"Όνομα Πρόσθετου\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Ονομάστε το πρόσθετο με τον μοναδικό κωδικό του. Για παράδειγμα RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Ονομάστε το θέμα με τον μοναδικό κωδικό του. Για παράδειγμα, RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Το αρχείο συγχώνευσης ':name' δεν βρέθηκε.\"\n}"
  },
  {
    "path": "modules/system/lang/en/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatting',\n        'quote' => 'Quote',\n        'code' => 'Code',\n        'header1' => 'Header 1',\n        'header2' => 'Header 2',\n        'header3' => 'Header 3',\n        'header4' => 'Header 4',\n        'header5' => 'Header 5',\n        'header6' => 'Header 6',\n        'bold' => 'Bold',\n        'italic' => 'Italic',\n        'unorderedlist' => 'Unordered List',\n        'orderedlist' => 'Ordered List',\n        'snippet' => 'Snippet',\n        'video' => 'Video',\n        'image' => 'Image',\n        'link' => 'Link',\n        'horizontalrule' => 'Insert Horizontal Rule',\n        'fullscreen' => 'Full Screen',\n        'preview' => 'Preview',\n        'strikethrough' => 'Strikethrough',\n        'cleanblock' => 'Clean Block',\n        'table' => 'Table',\n        'sidebyside' => 'Side by Side'\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Insert Media Link',\n        'insert_image' => 'Insert Media Image',\n        'insert_video' => 'Insert Media Video',\n        'insert_audio' => 'Insert Media Audio',\n        'invalid_file_empty_insert' => 'Please select file to insert a links to.',\n        'invalid_file_single_insert' => 'Please select a single file.',\n        'invalid_image_empty_insert' => 'Please select image(s) to insert.',\n        'invalid_video_empty_insert' => 'Please select a video file to insert.',\n        'invalid_audio_empty_insert' => 'Please select an audio file to insert.',\n    ],\n    'alert' => [\n        'error' => 'Error',\n        'confirm' => 'Confirm',\n        'dismiss' => 'Dismiss',\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Cancel',\n        'widget_remove_confirm' => 'Remove this widget?',\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Previous Month',\n        'nextMonth' => 'Next Month',\n        'months' => ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n        'weekdays' => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n        'weekdaysShort' => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'all',\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Apply',\n            'clear_button_text' => 'Clear',\n        ],\n        'dates' => [\n            'all' => 'all',\n            'filter_button_text' => 'Filter',\n            'reset_button_text' => 'Reset',\n            'date_placeholder' => 'Date',\n            'after_placeholder' => 'After',\n            'before_placeholder' => 'Before',\n        ],\n        'numbers' => [\n            'all' => 'all',\n            'filter_button_text' => 'Filter',\n            'reset_button_text' => 'Reset',\n            'min_placeholder' => 'Min',\n            'max_placeholder' => 'Max',\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Show the stacktrace',\n        'hide_stacktrace' => 'Hide the stacktrace',\n        'tabs' => [\n            'formatted' => 'Formatted',\n            'raw' => 'Raw',\n        ],\n        'editor' => [\n            'title' => 'Source Code Editor',\n            'description' => 'Your operating system should be configured to listen to one of these URL schemes.',\n            'openWith' => 'Open with',\n            'remember_choice' => 'Remember selected option for this session',\n            'open' => 'Open',\n            'cancel' => 'Cancel',\n        ],\n    ],\n    'upload' => [\n        'max_files' => 'You can not upload any more files.',\n        'invalid_file_type' => 'You can\\'t upload files of this type.',\n        'file_too_big' => 'File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.',\n        'response_error' => 'Server responded with {{statusCode}} code.',\n        'remove_file' => 'Remove file',\n    ],\n    'inspector' => [\n        'add' => 'Add',\n        'remove' => 'Remove',\n        'key' => 'Key',\n        'value' => 'Value',\n        'ok' => 'OK',\n        'cancel' => 'Cancel',\n        'items' => 'Items',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/en/lang.php",
    "content": "<?php return [\n  'installer' => [\n    'app_config_section' => 'Application Configuration',\n    'license_section' => 'License Key',\n    'dependencies_section' => 'Installing Dependencies',\n    'demo_section' => 'Demo Content',\n    'locale_select_label' => 'Select Language',\n    'locale_select_error' => 'Language code :code is invalid, please try again',\n    'app_url_label' => 'Application URL',\n    'backend_uri_label' => 'Backend URI',\n    'backend_uri_comment' => 'To secure your application, use a custom address for accessing the admin panel.',\n    'license_key_label' => 'License Key',\n    'license_key_comment' => 'Enter a valid License Key to proceed.',\n    'license_thanks_comment' => 'Thanks for being a customer of October CMS!',\n    'license_expired_comment' => 'License is unpaid or has expired. Please visit octobercms.com to obtain a license.',\n    'too_many_failures_label' => 'Too many failed attempts',\n    'non_interactive_label' => 'Non Interactive Mode Detected',\n    'non_interactive_comment' => 'If you see this error immediately, use these non-interactive commands instead.',\n    'install_failed_label' => 'Installation Failed',\n    'install_failed_comment' => 'Please try running these commands manually.',\n    'database_engine_label' => 'Database Engine',\n    'database_host_label' => 'Database Host',\n    'database_host_comment' => 'Hostname for the database connection.',\n    'database_port_label' => 'Database Port',\n    'database_port_comment' => '(Optional) A port for the connection.',\n    'database_name_label' => 'Database Name',\n    'database_name_comment' => 'Specify the name of the database to use.',\n    'database_login_label' => 'Database Login',\n    'database_login_comment' => 'User with create database privileges.',\n    'database_pass_label' => 'Database Password',\n    'database_pass_comment' => 'Password for the specified user.',\n    'database_path_label' => 'Database Path',\n    'database_path_comment' => 'For file-based storage, enter a path relative to the application root directory.',\n    'migrate_database_comment' => 'Please migrate the database with the following command',\n    'visit_backend_comment' => 'Then, open the administration area at this URL',\n    'open_configurator_comment' => 'Open this application in your browser',\n    'install_demo_label' => 'Install the demonstration theme and content? (Recommended)',\n    'operation_timeout_comment' => 'The operation timed out. Please increase the server\\'s timeout and try again.',\n    'operation_timeout_hint' => 'See the relevant documentation for :name.',\n  ],\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Administration Panel',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'ca' => 'Català',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fi' => 'Suomi',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hr' => 'Hrvatski',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'ru' => 'Русский',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'sv' => 'Svenska',\n    'th' => 'ไทย',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'vn' => 'Tiếng việt',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n  ],\n  'colors' => [\n    'red' => 'Red',\n    'orange' => 'Orange',\n    'amber' => 'Amber',\n    'lime' => 'Lime',\n    'green' => 'Green',\n    'teal' => 'Teal',\n    'cyan' => 'Cyan',\n    'sky' => 'Sky',\n    'blue' => 'Blue',\n    'indigo' => 'Indigo',\n    'violet' => 'Violet',\n    'pink' => 'Pink',\n    'rose' => 'Rose',\n    'slate' => 'Slate',\n  ],\n  'directory' => [\n    'create_fail' => 'Cannot create directory: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Cannot create file: :name',\n  ],\n  'combiner' => [],\n  'resizer' => [],\n  'system' => [\n    'name' => 'System',\n    'menu_label' => 'System',\n    'categories' => [\n      'cms' => 'Frontend',\n      'misc' => 'Misc',\n      'logs' => 'Logs',\n      'mail' => 'Mail',\n      'shop' => 'Shop',\n      'team' => 'Team',\n      'users' => 'Users',\n      'system' => 'System',\n      'social' => 'Social',\n      'backend' => 'Backend',\n      'events' => 'Events',\n      'customers' => 'Customers',\n      'my_settings' => 'My Settings',\n      'notifications' => 'Notifications',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Theme',\n    'unnamed' => 'Unnamed theme',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Install Themes',\n    'installed' => 'Installed themes',\n    'no_themes' => 'There are no themes installed from the marketplace.',\n    'recommended' => 'Recommended',\n    'remove_confirm' => 'Are you sure you want to remove this theme?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Unnamed plugin',\n    'name' => [],\n    'by_author' => 'By :name',\n  ],\n  'plugins' => [\n    'install' => 'Install Plugins',\n    'install_products' => 'Install Products',\n    'installed' => 'Installed Plugins',\n    'no_plugins' => 'There are no plugins installed from the marketplace.',\n    'recommended' => 'Recommended',\n    'plugin_label' => 'Plugin',\n    'bulk_actions_label' => 'Bulk actions',\n    'check_yes' => 'Yes',\n    'check_no' => 'No',\n    'unfrozen' => 'Updates Enabled',\n    'freeze' => 'disable updates for',\n    'unfreeze' => 'enable updates for',\n    'refresh' => 'reset',\n    'remove' => 'Remove',\n    'freeze_label' => 'Disable Updates',\n    'unfreeze_label' => 'Enable Updates',\n    'freeze_success' => 'Successfully disabled updates for the selected plugins.',\n    'unfreeze_success' => 'Successfully enabled updates for the selected plugins.',\n    'enable_success' => 'Successfully enabled the selected plugins.',\n    'disable_success' => 'Successfully disabled the selected plugins.',\n    'refresh_success' => 'Successfully reset the selected plugins.',\n    'remove_confirm' => 'Are you sure you want to remove the selected plugins? This will remove all associated data as well.',\n    'remove_success' => 'Successfully removed the selected plugins.',\n  ],\n  'project' => [\n    'attach' => 'Attach Project',\n    'detach' => 'Detach Project',\n    'none' => 'None',\n    'id' => [\n      'missing' => 'Please specify a Project ID to use.',\n    ],\n    'detach_confirm' => 'Are you sure you want to detach this project?',\n    'unbind_success' => 'Project has been detached.',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL Connection Required',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unique name used to refer to this template',\n    'test_send' => 'Send Test Message',\n    'test_confirm' => 'Send test message to :email. Continue?',\n    'creating' => 'Creating Template...',\n    'creating_layout' => 'Creating Layout...',\n    'saving' => 'Saving Template...',\n    'saving_layout' => 'Saving Layout...',\n    'delete_confirm' => 'Delete this template?',\n    'delete_layout_confirm' => 'Delete this layout?',\n    'deleting' => 'Deleting Template...',\n    'deleting_layout' => 'Deleting Layout...',\n    'sending' => 'Sending test message...',\n    'return' => 'Return to Template List',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Heading',\n      'paragraph' => 'This is a paragraph filled with Lorem Ipsum and a link. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Item',\n        'description' => 'Description',\n        'price' => 'Price',\n        'centered' => 'Centered',\n        'right_aligned' => 'Right-Aligned',\n      ],\n      'buttons' => [\n        'primary' => 'Primary button',\n        'positive' => 'Positive button',\n        'negative' => 'Negative button',\n      ],\n      'panel' => 'How awesome is this panel?',\n      'more' => 'Some more text',\n      'promotion' => 'Coupon code: OCTOBER',\n      'subcopy' => 'This is the subcopy of the email',\n      'thanks' => 'Thanks',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Author',\n    'plugin_not_found' => 'Plugin not found',\n    'plugin_version_not_found' => 'Plugin version not found',\n    'theme_not_found' => 'Theme not found',\n    'core_build' => 'Build :build',\n    'core_build_help' => 'Latest build is available.',\n    'changelog' => 'Changelog',\n    'changelog_view_details' => 'View Details',\n    'themes' => 'Themes',\n    'plugin_version_none' => 'New Plugin',\n    'plugin_current_version' => 'Current version',\n    'theme_new_install' => 'New theme installation.',\n    'theme_extracting' => 'Unpacking theme: :name',\n    'update_label' => 'Update Software',\n    'update_loading' => 'Loading available updates...',\n    'force_label' => 'Force Update',\n    'found' => [\n      'label' => 'Found New Updates!',\n      'help' => 'Click Update Software to begin the update process.',\n    ],\n    'none' => [\n      'label' => 'No Updates',\n      'help' => 'No new updates were found.',\n    ],\n    'important_action' => [\n      'empty' => 'Select Action',\n      'confirm' => 'Confirm Update',\n      'skip' => 'Skip This Update (Once Only)',\n      'ignore' => 'Skip This Update (Always)',\n    ],\n    'important_action_required' => 'Action Required',\n    'important_view_guide' => 'View Upgrade Guide',\n    'important_view_release_notes' => 'View Release Notes',\n    'important_alert_text' => 'Some updates need your attention.',\n    'details_title_plugin' => 'Plugin Details',\n    'details_title_theme' => 'Theme Details',\n    'details_view_homepage' => 'View Homepage',\n    'details_changelog' => 'Changelog',\n    'details_changelog_missing' => 'There is no changelog provided.',\n    'details_view_license' => 'View License',\n    'details_current_version' => 'Current version',\n    'details_author' => 'Author',\n  ],\n  'market' => [\n    'menu_description' => 'Manage and install plugins and themes.',\n    'content_loading' => 'Loading...',\n  ],\n  'server' => [\n    'connect_error' => 'Error connecting to the server.',\n    'response_not_found' => 'The update server could not be found.',\n    'response_invalid' => 'Invalid response from the server.',\n    'response_empty' => 'Empty response from the server.',\n    'file_error' => 'Server failed to deliver the package.',\n    'file_corrupt' => 'File from server is corrupt.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Class :class must define property $:property used by :behavior behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Unable to find configuration file :file defined for :location.',\n    'required' => 'Configuration used in :location must supply a value \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Unable to extract core file \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Empty Request Log',\n    'empty_loading' => 'Emptying Request Log...',\n    'empty_success' => 'Request log emptied',\n    'return_link' => 'Return to Request Log',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'System',\n    'manage_system_settings' => 'Manage system settings',\n    'manage_software_updates' => 'Manage software updates',\n    'access_logs' => 'View System Logs',\n    'manage_mail_templates' => 'Manage Mail Templates',\n    'manage_mail_settings' => 'Manage Mail Settings',\n    'manage_other_administrators' => 'Manage other administrators',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Invalid file path specified: \\':path\\'.',\n    'folder_size_items' => 'item(s)',\n  ],\n  'page' => [\n    'not_found' => [\n      'label' => 'Page Not Found',\n      'help' => 'The requested page cannot be found.',\n    ],\n    'custom_error' => [\n      'label' => 'Page Error',\n      'help' => 'We\\'re sorry, but something went wrong and the page cannot be displayed.',\n    ],\n    'invalid_token' => [\n      'label' => 'Invalid security token',\n    ],\n    'maintenance' => [\n      'label' => 'We\\'ll Be Right Back!',\n      'help' => 'We\\'re currently down for maintenance, check back soon!',\n      'message' => 'Message:',\n      'available_at' => 'Try again after:',\n    ],\n  ],\n  'pagination' => [\n    'previous' => 'Previous',\n    'prev_page' => 'Previous Page',\n    'next' => 'Next',\n    'next_page' => 'Next Page',\n    'records' => 'Records',\n    'of' => 'of',\n    'page' => 'Page',\n  ],\n  'dashboard' => [\n    'report_data_source' => [\n      'data_source_name' => 'System Information',\n      'widgets' => [\n        'version_information' => [],\n        'system_issues' => [],\n        'event_log' => [],\n        'request_log' => [],\n      ],\n    ],\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/en/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted' => 'The :attribute field must be accepted.',\n    'accepted_if' => 'The :attribute field must be accepted when :other is :value.',\n    'active_url' => 'The :attribute field must be a valid URL.',\n    'after' => 'The :attribute field must be a date after :date.',\n    'after_or_equal' => 'The :attribute field must be a date after or equal to :date.',\n    'alpha' => 'The :attribute field must only contain letters.',\n    'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.',\n    'alpha_num' => 'The :attribute field must only contain letters and numbers.',\n    'array' => 'The :attribute field must be an array.',\n    'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.',\n    'before' => 'The :attribute field must be a date before :date.',\n    'before_or_equal' => 'The :attribute field must be a date before or equal to :date.',\n    'between' => [\n        'array' => 'The :attribute field must have between :min and :max items.',\n        'file' => 'The :attribute field must be between :min and :max kilobytes.',\n        'numeric' => 'The :attribute field must be between :min and :max.',\n        'string' => 'The :attribute field must be between :min and :max characters.',\n    ],\n    'boolean' => 'The :attribute field must be true or false.',\n    'confirmed' => 'The :attribute field confirmation does not match.',\n    'current_password' => 'The password is incorrect.',\n    'date' => 'The :attribute field must be a valid date.',\n    'date_equals' => 'The :attribute field must be a date equal to :date.',\n    'date_format' => 'The :attribute field must match the format :format.',\n    'decimal' => 'The :attribute field must have :decimal decimal places.',\n    'declined' => 'The :attribute field must be declined.',\n    'declined_if' => 'The :attribute field must be declined when :other is :value.',\n    'different' => 'The :attribute field and :other must be different.',\n    'digits' => 'The :attribute field must be :digits digits.',\n    'digits_between' => 'The :attribute field must be between :min and :max digits.',\n    'dimensions' => 'The :attribute field has invalid image dimensions.',\n    'distinct' => 'The :attribute field has a duplicate value.',\n    'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.',\n    'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.',\n    'email' => 'The :attribute field must be a valid email address.',\n    'ends_with' => 'The :attribute field must end with one of the following: :values.',\n    'enum' => 'The selected :attribute is invalid.',\n    'exists' => 'The selected :attribute is invalid.',\n    'file' => 'The :attribute field must be a file.',\n    'filled' => 'The :attribute field must have a value.',\n    'gt' => [\n        'array' => 'The :attribute field must have more than :value items.',\n        'file' => 'The :attribute field must be greater than :value kilobytes.',\n        'numeric' => 'The :attribute field must be greater than :value.',\n        'string' => 'The :attribute field must be greater than :value characters.',\n    ],\n    'gte' => [\n        'array' => 'The :attribute field must have :value items or more.',\n        'file' => 'The :attribute field must be greater than or equal to :value kilobytes.',\n        'numeric' => 'The :attribute field must be greater than or equal to :value.',\n        'string' => 'The :attribute field must be greater than or equal to :value characters.',\n    ],\n    'image' => 'The :attribute field must be an image.',\n    'in' => 'The selected :attribute is invalid.',\n    'in_array' => 'The :attribute field must exist in :other.',\n    'integer' => 'The :attribute field must be an integer.',\n    'ip' => 'The :attribute field must be a valid IP address.',\n    'ipv4' => 'The :attribute field must be a valid IPv4 address.',\n    'ipv6' => 'The :attribute field must be a valid IPv6 address.',\n    'json' => 'The :attribute field must be a valid JSON string.',\n    'lowercase' => 'The :attribute field must be lowercase.',\n    'lt' => [\n        'array' => 'The :attribute field must have less than :value items.',\n        'file' => 'The :attribute field must be less than :value kilobytes.',\n        'numeric' => 'The :attribute field must be less than :value.',\n        'string' => 'The :attribute field must be less than :value characters.',\n    ],\n    'lte' => [\n        'array' => 'The :attribute field must not have more than :value items.',\n        'file' => 'The :attribute field must be less than or equal to :value kilobytes.',\n        'numeric' => 'The :attribute field must be less than or equal to :value.',\n        'string' => 'The :attribute field must be less than or equal to :value characters.',\n    ],\n    'mac_address' => 'The :attribute field must be a valid MAC address.',\n    'max' => [\n        'array' => 'The :attribute field must not have more than :max items.',\n        'file' => 'The :attribute field must not be greater than :max kilobytes.',\n        'numeric' => 'The :attribute field must not be greater than :max.',\n        'string' => 'The :attribute field must not be greater than :max characters.',\n    ],\n    'max_digits' => 'The :attribute field must not have more than :max digits.',\n    'mimes' => 'The :attribute field must be a file of type: :values.',\n    'mimetypes' => 'The :attribute field must be a file of type: :values.',\n    'min' => [\n        'array' => 'The :attribute field must have at least :min items.',\n        'file' => 'The :attribute field must be at least :min kilobytes.',\n        'numeric' => 'The :attribute field must be at least :min.',\n        'string' => 'The :attribute field must be at least :min characters.',\n    ],\n    'min_digits' => 'The :attribute field must have at least :min digits.',\n    'missing' => 'The :attribute field must be missing.',\n    'missing_if' => 'The :attribute field must be missing when :other is :value.',\n    'missing_unless' => 'The :attribute field must be missing unless :other is :value.',\n    'missing_with' => 'The :attribute field must be missing when :values is present.',\n    'missing_with_all' => 'The :attribute field must be missing when :values are present.',\n    'multiple_of' => 'The :attribute field must be a multiple of :value.',\n    'not_in' => 'The selected :attribute is invalid.',\n    'not_regex' => 'The :attribute field format is invalid.',\n    'numeric' => 'The :attribute field must be a number.',\n    'password' => [\n        'letters' => 'The :attribute field must contain at least one letter.',\n        'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.',\n        'numbers' => 'The :attribute field must contain at least one number.',\n        'symbols' => 'The :attribute field must contain at least one symbol.',\n        'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',\n    ],\n    'present' => 'The :attribute field must be present.',\n    'prohibited' => 'The :attribute field is prohibited.',\n    'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',\n    'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',\n    'prohibits' => 'The :attribute field prohibits :other from being present.',\n    'regex' => 'The :attribute field format is invalid.',\n    'required' => 'The :attribute field is required.',\n    'required_array_keys' => 'The :attribute field must contain entries for: :values.',\n    'required_if' => 'The :attribute field is required when :other is :value.',\n    'required_if_accepted' => 'The :attribute field is required when :other is accepted.',\n    'required_unless' => 'The :attribute field is required unless :other is in :values.',\n    'required_with' => 'The :attribute field is required when :values is present.',\n    'required_with_all' => 'The :attribute field is required when :values are present.',\n    'required_without' => 'The :attribute field is required when :values is not present.',\n    'required_without_all' => 'The :attribute field is required when none of :values are present.',\n    'same' => 'The :attribute field must match :other.',\n    'size' => [\n        'array' => 'The :attribute field must contain :size items.',\n        'file' => 'The :attribute field must be :size kilobytes.',\n        'numeric' => 'The :attribute field must be :size.',\n        'string' => 'The :attribute field must be :size characters.',\n    ],\n    'starts_with' => 'The :attribute field must start with one of the following: :values.',\n    'string' => 'The :attribute field must be a string.',\n    'timezone' => 'The :attribute field must be a valid timezone.',\n    'unique' => 'The :attribute has already been taken.',\n    'uploaded' => 'The :attribute failed to upload.',\n    'uppercase' => 'The :attribute field must be uppercase.',\n    'url' => 'The :attribute field must be a valid URL.',\n    'ulid' => 'The :attribute field must be a valid ULID.',\n    'uuid' => 'The :attribute field must be a valid UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/en.json",
    "content": "{\n  \"Check For Updates\": \"Check For Updates\",\n  \"Install Packages\": \"Install Packages\",\n  \"Manage Themes\": \"Manage Themes\",\n  \"Manage Plugins\": \"Manage Plugins\",\n  \"Project\": \"Project\",\n  \"Owner\": \"Owner\",\n  \"Plugins\": \"Plugins\",\n  \"Recommended\": \"Recommended\",\n  \"Disabled\": \"Disabled\",\n  \"Current Build\": \"Current Build\",\n  \"Updates Available\": \"Updates Available\",\n  \"Up to Date\": \"Up to Date\",\n  \"Latest Build\": \"Latest Build\",\n  \"View Changelog\": \"View Changelog\",\n  \"Software Updates\": \"Software Updates\",\n  \"Update the system modules and plugins.\": \"Update the system modules and plugins.\",\n  \"General\": \"General\",\n  \"Mail\": \"Mail\",\n  \"Utilities\": \"Utilities\",\n  \"Settings\": \"Settings\",\n  \"Show All Settings\": \"Show All Settings\",\n  \"Unable to find the specified settings.\": \"Unable to find the specified settings.\",\n  \"The settings page is missing a Model definition.\": \"The settings page is missing a Model definition.\",\n  \":name settings updated\": \":name settings updated\",\n  \"Return to System Settings\": \"Return to System Settings\",\n  \"Search Settings...\": \"Search Settings...\",\n  \"Disable mail branding CSS\": \"Disable mail branding CSS\",\n  \"Manage Sites\": \"Manage Sites\",\n  \"Manage the websites available for this application.\": \"Manage the websites available for this application.\",\n  \"Marketplace\": \"Marketplace\",\n  \"There is no documentation provided.\": \"There is no documentation provided.\",\n  \"Documentation\": \"Documentation\",\n  \"Upgrade Guide\": \"Upgrade Guide\",\n  \"License\": \"License\",\n  \"Attach to Project\": \"Attach to Project\",\n  \"Manage Updates\": \"Manage Updates\",\n  \"Software Update\": \"Software Update\",\n  \"Return to Software Updates\": \"Return to Software Updates\",\n  \"Try Again\": \"Try Again\",\n  \"Unpacking application files\": \"Unpacking application files\",\n  \"Update Failed\": \"Update Failed\",\n  \"Unpacking plugin: :name\": \"Unpacking plugin: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"The primary site is used by default and cannot be deleted.\",\n  \"Disabled sites are not shown on the frontend.\": \"Disabled sites are not shown on the frontend.\",\n  \"Enabled in the Admin Panel\": \"Enabled in the Admin Panel\",\n  \"Configuration\": \"Configuration\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Use this if you want the site to be enabled in the admin panel.\",\n  \"Install\": \"Install\",\n  \"Sync Project\": \"Sync Project\",\n  \"Name\": \"Name\",\n  \"Unique Code\": \"Unique Code\",\n  \"Theme\": \"Theme\",\n  \"Sites\": \"Sites\",\n  \"Create Site\": \"Create Site\",\n  \"Base URL\": \"Base URL\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Current default value: :value\",\n  \"Locale\": \"Locale\",\n  \"Timezone\": \"Timezone\",\n  \"Custom application URL\": \"Custom application URL\",\n  \"Override the application URL when this site is active.\": \"Override the application URL when this site is active.\",\n  \"Use a CMS route prefix\": \"Use a CMS route prefix\",\n  \"A prefix can identify this site when using a shared hostname.\": \"A prefix can identify this site when using a shared hostname.\",\n  \"Define matching hostnames\": \"Define matching hostnames\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Specify domain names and patterns that must be used to serve this site.\",\n  \"Display a style for this site\": \"Display a style for this site\",\n  \"To help identify this site, display a color in the admin panel.\": \"To help identify this site, display a color in the admin panel.\",\n  \"Save\": \"Save\",\n  \"Back\": \"Back\",\n  \"Edit\": \"Edit\",\n  \"Refresh\": \"Refresh\",\n  \"Save and Close\": \"Save and Close\",\n  \"Use Default\": \"Use Default\",\n  \"Use Custom\": \"Use Custom\",\n  \"Specify a custom locale code.\": \"Specify a custom locale code.\",\n  \"Failed\": \"Failed\",\n  \"or\": \"or\",\n  \"Code\": \"Code\",\n  \"October CMS Marketplace\": \"October CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Project has no plugins or themes. Visit the :link to add some.\",\n  \"Buy Now\": \"Buy Now\",\n  \"Updating package manager\": \"Updating package manager\",\n  \"Updating application files\": \"Updating application files\",\n  \"Setting build number\": \"Setting build number\",\n  \"Finishing update process\": \"Finishing update process\",\n  \"Installing plugin: :name\": \"Installing plugin: :name\",\n  \"Finishing installation process\": \"Finishing installation process\",\n  \"Removing theme: :name\": \"Removing theme: :name\",\n  \"Please specify a Theme name to install.\": \"Please specify a Theme name to install.\",\n  \"Installing theme: :name\": \"Installing theme: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Removing plugin: :name\",\n  \"Please specify a Plugin name to install.\": \"Please specify a Plugin name to install.\",\n  \"Update process complete\": \"Update process complete\",\n  \"Package installed successfully\": \"Package installed successfully\",\n  \"Check Dependencies\": \"Check Dependencies\",\n  \"Install Dependencies\": \"Install Dependencies\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"There are missing dependencies needed for the system to run correctly.\",\n  \"License Key\": \"License Key\",\n  \"How to find your License Key\": \"How to find your License Key\",\n  \"The password attribute is required.\": \"The password attribute is required.\",\n  \"The login attribute is required.\": \"The login attribute is required.\",\n  \"Cannot login user since they are not activated.\": \"Cannot login user since they are not activated.\",\n  \"Cannot login user since they are banned.\": \"Cannot login user since they are banned.\",\n  \"Cannot login user since they are suspended.\": \"Cannot login user since they are suspended.\",\n  \"A user was not found with the given credentials.\": \"A user was not found with the given credentials.\",\n  \"A user was found but the password did not match.\": \"A user was found but the password did not match.\",\n  \"User is not logged in\": \"User is not logged in\",\n  \"Register Software\": \"Register Software\",\n  \"View the Dashboard\": \"View the Dashboard\",\n  \"Set the Default Dashboard\": \"Set the Default Dashboard\",\n  \"Log File\": \"Log File\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"No encryption\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Mail Configuration\",\n  \"Manage email configuration.\": \"Manage email configuration.\",\n  \"Sender Name\": \"Sender Name\",\n  \"Sender Email\": \"Sender Email\",\n  \"Mail Method\": \"Mail Method\",\n  \"SMTP Address\": \"SMTP Address\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"SMTP Encryption Protocol\",\n  \"SMTP Authorization Required\": \"SMTP Authorization Required\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Use this checkbox if your SMTP server requires authorization.\",\n  \"Username\": \"Username\",\n  \"Password\": \"Password\",\n  \"Sendmail Path\": \"Sendmail Path\",\n  \"Please specify the path of the sendmail program.\": \"Please specify the path of the sendmail program.\",\n  \"Mailgun Domain\": \"Mailgun Domain\",\n  \"Please specify the Mailgun domain name.\": \"Please specify the Mailgun domain name.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Enter your Mailgun API key.\",\n  \"SES Key\": \"SES Key\",\n  \"Enter your SES API key\": \"Enter your SES API key\",\n  \"SES Secret\": \"SES Secret\",\n  \"Enter your SES API secret key\": \"Enter your SES API secret key\",\n  \"SES Region\": \"SES Region\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Enter your SES region (e.g. us-east-1)\",\n  \"Postmark Token\": \"Postmark Token\",\n  \"Enter your Postmark API secret key\": \"Enter your Postmark API secret key\",\n  \"Define administrator roles\": \"Define administrator roles\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restrict access to this site to only administrator with the following roles.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"All Sites\",\n  \"Manage Backend Preferences\": \"Manage Backend Preferences\",\n  \"Manage Code Editor Preferences\": \"Manage Code Editor Preferences\",\n  \"Customize Backend Styles\": \"Customize Backend Styles\",\n  \"Mail Templates\": \"Mail Templates\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modify the mail templates that are sent to users and administrators, manage email layouts.\",\n  \"Mail Branding\": \"Mail Branding\",\n  \"Modify the colors and appearance of mail templates.\": \"Modify the colors and appearance of mail templates.\",\n  \"Event Log\": \"Event Log\",\n  \"View system log messages with their recorded time and details.\": \"View system log messages with their recorded time and details.\",\n  \"Request Log\": \"Request Log\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"View bad or redirected requests, such as Page not found (404).\",\n  \"Log Settings\": \"Log Settings\",\n  \"Specify which areas should use logging.\": \"Specify which areas should use logging.\",\n  \"Test message sent.\": \"Test message sent.\",\n  \"New Layout\": \"New Layout\",\n  \"New Partial\": \"New Partial\",\n  \"New Template\": \"New Template\",\n  \"Template\": \"Template\",\n  \"Templates\": \"Templates\",\n  \"Layouts\": \"Layouts\",\n  \"Partials\": \"Partials\",\n  \"Partial\": \"Partial\",\n  \"Mail Partials\": \"Mail Partials\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"Mail Layouts\",\n  \"Unique code used to refer to this template\": \"Unique code used to refer to this template\",\n  \"-- No layout --\": \"-- No layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Plaintext\",\n  \"Disable automatic inline CSS\": \"Disable automatic inline CSS\",\n  \"Options\": \"Options\",\n  \"Subject\": \"Subject\",\n  \"Email message subject\": \"Email message subject\",\n  \"Description\": \"Description\",\n  \"Drivers Not Installed\": \"Drivers Not Installed\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Event ID\",\n  \"Level\": \"Level\",\n  \"Date & Time\": \"Date & Time\",\n  \"Message\": \"Message\",\n  \"Logging\": \"Logging\",\n  \"Log Bad Requests\": \"Log Bad Requests\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Browser requests that may require attention, such as 404 errors.\",\n  \"Log Theme Changes\": \"Log Theme Changes\",\n  \"When a change is made to the theme using the backend.\": \"When a change is made to the theme using the backend.\",\n  \"Log System Events\": \"Log System Events\",\n  \"Store system events in the database in addition to the file-based log.\": \"Store system events in the database in addition to the file-based log.\",\n  \"Background\": \"Background\",\n  \"Body background\": \"Body background\",\n  \"Content background\": \"Content background\",\n  \"Inner content background\": \"Inner content background\",\n  \"Buttons\": \"Buttons\",\n  \"Button text color\": \"Button text color\",\n  \"Primary button background\": \"Primary button background\",\n  \"Positive button background\": \"Positive button background\",\n  \"Negative button background\": \"Negative button background\",\n  \"Typography\": \"Typography\",\n  \"Header color\": \"Header color\",\n  \"Headings color\": \"Headings color\",\n  \"Text color\": \"Text color\",\n  \"Link color\": \"Link color\",\n  \"Footer color\": \"Footer color\",\n  \"Borders\": \"Borders\",\n  \"Body border color\": \"Body border color\",\n  \"Subcopy border color\": \"Subcopy border color\",\n  \"Table border color\": \"Table border color\",\n  \"Components\": \"Components\",\n  \"Panel background\": \"Panel background\",\n  \"Promotion background\": \"Promotion background\",\n  \"Promotion border color\": \"Promotion border color\",\n  \"Customize Mail Appearance\": \"Customize Mail Appearance\",\n  \"Version\": \"Version\",\n  \"Enabled\": \"Enabled\",\n  \"Latest\": \"Latest\",\n  \"Log ID\": \"Log ID\",\n  \"Counter\": \"Counter\",\n  \"Referers\": \"Referrers\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\",\n  \"Event\": \"Event\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Request\",\n  \"Event log emptied\": \"Event log emptied\",\n  \"Empty Event Log\": \"Empty Event Log\",\n  \"Emptying Event Log...\": \"Emptying Event Log...\",\n  \"Return to Event Log\": \"Return to Event Log\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\",\n  \"Reset Plugin Data\": \"Reset Plugin Data\",\n  \"Enable Plugins\": \"Enable Plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Are you sure you want to :action these plugins?\",\n  \"enable\": \"enable\",\n  \"disable\": \"disable\",\n  \"Disable Plugins\": \"Disable Plugins\",\n  \"Select Action...\": \"Select Action...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Plugin has been removed from the file system.\",\n  \"search plugins to install...\": \"search plugins to install...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"search themes to install...\",\n  \"Install Theme\": \"Install Theme\",\n  \"Theme Name\": \"Theme Name\",\n  \"Install Plugin\": \"Install Plugin\",\n  \"Plugin Name\": \"Plugin Name\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Name the plugin by its unique code. For example, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Name the theme by its unique code. For example, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\",\n  \"The resizer file ':name' is not found.\": \"The resizer file ':name' is not found.\",\n  \"The combiner file ':name' is not found.\": \"The combiner file ':name' is not found.\",\n  \"Core version information\": \"Core version information\",\n  \"View Available Updates\": \"View Available Updates\",\n  \"System Build\": \"System Build\",\n  \"System Issues\": \"System Issues\",\n  \"View issues\": \"View issues\",\n  \"View event log\": \"View event log\",\n  \"Request log\": \"Request log\",\n  \"Bad requests\": \"Bad requests\",\n  \"Issues found\": \"Issues found\",\n  \"No issues\": \"No issues\",\n  \"SMTP Timeout\": \"SMTP Timeout\",\n  \"Connection timeout in seconds (default: 30)\": \"Connection timeout in seconds (default: 30)\",\n  \"Clear Cache\": \"Clear Cache\",\n  \"Are you sure you want to clear the application cache?\": \"Are you sure you want to clear the application cache?\",\n  \"Edit Composer\": \"Edit Composer\",\n  \"Composer file updated successfully.\": \"Composer file updated successfully.\",\n  \"Invalid JSON: :error\": \"Invalid JSON: :error\",\n  \"Cache cleared successfully.\": \"Cache cleared successfully.\"\n}\n"
  },
  {
    "path": "modules/system/lang/es/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formateo',\n        'quote' => 'Cita',\n        'code' => 'Código',\n        'header1' => 'Encabezado 1',\n        'header2' => 'Encabezado 2',\n        'header3' => 'Encabezado 3',\n        'header4' => 'Encabezado 4',\n        'header5' => 'Encabezado 5',\n        'header6' => 'Encabezado 6',\n        'bold' => 'Negrita',\n        'italic' => 'Cursiva',\n        'unorderedlist' => 'Lista Desordenada',\n        'orderedlist' => 'Lista Ordenada',\n        'video' => 'Video',\n        'image' => 'Imagen',\n        'link' => 'Vínculo',\n        'horizontalrule' => 'Insertar Regla Horizontal',\n        'fullscreen' => 'Pantalla completa',\n        'preview' => 'Previsualizar'\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Insertar Media Vínculo\",\n        'insert_image' => \"Insertar Media Imagen\",\n        'insert_video' => \"Insertar Media Video\",\n        'insert_audio' => \"Insertar Media Audio\",\n        'invalid_file_empty_insert' => \"Por favor seleccione archivo para insertar vínculo.\",\n        'invalid_file_single_insert' => \"Por favor seleccione un solo archivo.\",\n        'invalid_image_empty_insert' => \"Por favor seleccione una imagen(es) para insertar.\",\n        'invalid_video_empty_insert' => \"Por favor seleccione un archivo de video para insertar.\",\n        'invalid_audio_empty_insert' => \"Por favor seleccione un archivo de audio para insertar.\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Cancelar'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Mes Anterior',\n        'nextMonth' => 'Mes Siguiente',\n        'months' => ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],\n        'weekdays' => ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'],\n        'weekdaysShort' => ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab']\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'todos'\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Aplicar',\n            'clear_button_text' => 'Limpiar',\n        ],\n        'dates' => [\n            'all' => 'todas',\n            'filter_button_text' => 'Filtrar',\n            'reset_button_text' => 'Restablecer',\n            'date_placeholder' => 'Fecha',\n            'after_placeholder' => 'Desde',\n            'before_placeholder' => 'Hasta'\n        ],\n        'numbers' => [\n            'all' => 'todos',\n            'filter_button_text' => 'Filtrar',\n            'reset_button_text' => 'Restablecer',\n            'min_placeholder' => 'Mínimo',\n            'max_placeholder' => 'Máximo',\n            'number_placeholder' => 'Número'\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Mostrar el seguimiento de la pila',\n        'hide_stacktrace' => 'Ocultar el seguimiento de la pila',\n        'tabs' => [\n            'formatted' => 'Formateado',\n            'raw' => 'Sin formato',\n        ],\n        'editor' => [\n            'title' => 'Seleccione el editor de código fuente a usar',\n            'description' => 'Su entorno de sistema operativo debe estar configurado para escuchar a uno de estos esquemas de URL.',\n            'openWith' => 'Abrir con',\n            'rememberChoice' => 'Recuerde la opción seleccionada para esta sesión del navegador',\n            'open' => 'Abrir',\n            'cancel' => 'Cancelar'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/es/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Volviendo a lo básico',\n  ],\n  'directory' => [\n    'create_fail' => 'No es posible crear el directorio: :name',\n  ],\n  'file' => [\n    'create_fail' => 'No es posible crear el archivo: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Token de seguridad invalido',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistema',\n    'menu_label' => 'Sistema',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Varios',\n      'logs' => 'Registros',\n      'mail' => 'Correo',\n      'shop' => 'Tienda',\n      'team' => 'Equipo',\n      'users' => 'Usuarios',\n      'system' => 'Sistema',\n      'social' => 'Social',\n      'events' => 'Eventos',\n      'customers' => 'Clientes',\n      'my_settings' => 'Mis Configuraciones',\n      'notifications' => 'Notificaciones',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Tema sin nombre',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Instalar temas',\n    'installed' => 'Temas Instalados',\n    'no_themes' => 'No hay temas instalados desde el mercado.',\n    'recommended' => 'Recomendado',\n    'remove_confirm' => '¿Seguro que quieres eliminar este tema?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Plugin sin nombre',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Activar o desactivar',\n    'enable_or_disable_title' => 'Activar o Desactivar Plugins',\n    'install' => 'Instalar plugins',\n    'install_products' => 'Instalar productos',\n    'installed' => 'Plugins Instalados',\n    'no_plugins' => 'No hay plugins instalados desde el mercado.',\n    'recommended' => 'Recomendado',\n    'remove' => 'Eliminar',\n    'refresh' => 'Recargar',\n    'disabled_label' => 'Desactivar',\n    'disabled_help' => 'Plugins que están deshabilitadas son ignorados por la aplicación.',\n    'frozen_label' => 'Congele actualizaciones',\n    'frozen_help' => 'Plugins que están congelados serán ignorados por el proceso de actualización.',\n    'selected_amount' => 'Plugins seleccionado: :amount',\n    'remove_confirm' => '¿Está seguro que quiere remover este plugin?',\n    'remove_success' => 'Eliminado con éxito los plugins del sistema.',\n    'refresh_success' => 'Refrescado con éxito los plugins en el sistema.',\n    'disable_confirm' => '¿Está seguro?',\n    'disable_success' => 'Plugins deshabilitados con éxito.',\n    'enable_success' => 'Plugins activados con éxito.',\n  ],\n  'project' => [\n    'attach' => 'Adjuntar Proyecto',\n    'detach' => 'Separar Proyecto',\n    'none' => 'Ninguno',\n    'id' => [\n      'missing' => 'Especifique un ID del proyecto para usar.',\n    ],\n    'detach_confirm' => '¿Está seguro de que desea separar este proyecto?',\n    'unbind_success' => 'Proyecto ha sido separado con éxito.',\n  ],\n  'settings' => [\n    'search' => 'Buscar',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Conexión SSL requerida',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Nombre único utilizado para referirse a esta plantilla',\n    'test_send' => 'Enviar mensaje de prueba',\n    'test_confirm' => 'Envio de Mensaje de prueba a :email. Continuar?',\n    'creating' => 'Creando Plantilla...',\n    'creating_layout' => 'Creando Diseño...',\n    'saving' => 'Salvando Plantilla...',\n    'saving_layout' => 'Salvando Diseño...',\n    'delete_confirm' => 'Borrar esta plantilla?',\n    'delete_layout_confirm' => 'Borrar este diseño?',\n    'deleting' => 'Borrando Plantilla...',\n    'deleting_layout' => 'Borrando Diseño...',\n    'sending' => 'Enviando mensaje de prueba...',\n    'return' => 'Volver a lista de plantillas',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Encabezado',\n      'paragraph' => 'Este es un párrafo rellenado con Lorem Ipsum y un enlace. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Item',\n        'description' => 'Descripción',\n        'price' => 'Precio',\n        'centered' => 'Centrado',\n        'right_aligned' => 'Alineado-A-La-Derecha',\n      ],\n      'buttons' => [\n        'primary' => 'Botón Principal',\n        'positive' => 'Botón Positivo',\n        'negative' => 'Botón Negativo',\n      ],\n      'panel' => '¿Este panel es increíble o qué?',\n      'more' => 'Algo más de texto',\n      'promotion' => 'Código de cupón: OCTOBER',\n      'subcopy' => 'Este es el subcopy del correo',\n      'thanks' => 'Gracias',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Versión :build',\n    'core_build_help' => 'Última versión está disponible.',\n    'themes' => 'Temas',\n    'plugin_version_none' => 'Nuevo plugin',\n    'plugin_current_version' => 'Versión actual',\n    'theme_new_install' => 'Intalación de nuevo tema.',\n    'theme_extracting' => 'Descomprimiendo tema: :name',\n    'update_label' => 'Actualizando software',\n    'update_loading' => 'Cargando actualizaciones disponibles...',\n    'force_label' => 'Forzar actualización',\n    'found' => [\n      'label' => 'Se encontraron nuevas actualizaciones!',\n      'help' => 'Click Actualizar software para comenzar con el proceso de actualización.',\n    ],\n    'none' => [\n      'label' => 'No hay actualizaciones',\n      'help' => 'No se encontraron nuevas actualizaciones disponibles.',\n    ],\n    'important_action' => [\n      'empty' => 'Seleccione acción',\n      'confirm' => 'Confirmar actualización',\n      'skip' => 'Saltar este plugin (sólo una vez)',\n      'ignore' => 'Saltar este plugin (siempre)',\n    ],\n    'important_action_required' => 'Acción requerida',\n    'important_view_guide' => 'Ver guía de actualización',\n    'important_view_release_notes' => 'Ver notas de la versión',\n    'important_alert_text' => 'Algunas actualizaciones necesitan su atención.',\n    'details_title' => 'Detalles plugin',\n    'details_view_homepage' => 'Ver página de inicio',\n    'details_changelog' => 'Registro de cambios',\n    'details_changelog_missing' => 'No hay registro de cambios proporcionado.',\n    'details_current_version' => 'Versión actual',\n    'details_author' => 'Autor',\n  ],\n  'server' => [\n    'connect_error' => 'Error al conectar con el servidor.',\n    'response_not_found' => 'El servidor de actualización no se pudo encontrar.',\n    'response_invalid' => 'Respuesta no válida del servidor.',\n    'response_empty' => 'Respuesta vacía desde el servidor.',\n    'file_error' => 'El servidor no pudo entregar el paquete.',\n    'file_corrupt' => 'El archivo se encuentra dañado.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Clase :class debe definir la propiedad $:property utilizada por :behavior comportamiento.',\n  ],\n  'config' => [\n    'not_found' => 'No se puede encontrar el archivo de configuración :file definido por :location.',\n    'required' => 'Configuración utilizada en :location debe proporcionar un valor. \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'No se puede extraer el archivo \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Vaciar el registro de acceso',\n    'empty_loading' => 'Vaciando los registros...',\n    'empty_success' => 'Los registros fueron vaciados...',\n    'return_link' => 'Regresar al registro de peticiones',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistema',\n    'manage_system_settings' => 'Gestionar la configuración del sistema',\n    'manage_software_updates' => 'Gestionar actualización de software',\n    'access_logs' => 'Ver registros del sistema',\n    'manage_mail_templates' => 'Gestionar plantillas de correo',\n    'manage_mail_settings' => 'Gestionar la configuración del correo',\n    'manage_other_administrators' => 'Gestionar otros administradores',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Ruta de archivo especificada no válida: \\':path\\'.',\n    'folder_size_items' => 'elemento(s)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/es/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \"El campo :attribute debe ser aceptado.\",\n    \"active_url\"       => \"El campo :attribute no es una URL válida\",\n    \"after\"            => \"El campo :attribute debe ser una fecha posterior a :date.\",\n    \"alpha\"            => \"El campo :attribute sólo debe contener letras.\",\n    \"alpha_dash\"       => \"El campo :attribute solo puede contener letras, numeros y barras.\",\n    \"alpha_num\"        => \"El campo :attribute solo puede contener letras y números.\",\n    \"array\"            => \"El campo :attribute debe ser un array.\",\n    \"before\"           => \"El campo :attribute debe ser una fecha anterior a :date.\",\n    \"between\"          => [\n        \"numeric\" => \"El campo :attribute debe tener estar entre :min y :max.\",\n        \"file\"    => \"El campo :attribute debe ocupar entre :min y :max kilobytes.\",\n        \"string\"  => \"El campo :attribute debe tener entre :min y :max caracteres.\",\n        \"array\"   => \"El campo :attribute debe tener entre :min y :max elementos.\"\n    ],\n    \"confirmed\"        => \"La confirmación del campo:attribute es incorrecta.\",\n    \"date\"             => \"El campo :attribute no es una fecha válida.\",\n    \"date_format\"      => \"El campo :attribute no tiene el formato :format.\",\n    \"different\"        => \"Los campos :attribute y :other debe ser distintos.\",\n    \"digits\"           => \"El campo :attribute debe tener :digits dígitos.\",\n    \"digits_between\"   => \"El campo :attribute debe tener entre :min y :max dígitos.\",\n    \"email\"            => \"El campo :attribute tiene un formato incorrecto.\",\n    \"exists\"           => \"El campo :attribute es incorrecto.\",\n    \"image\"            => \"El campo :attribute debe ser una imagen.\",\n    \"in\"               => \"El campo :attribute es incorrecto.\",\n    \"integer\"          => \"El campo :attribute debe ser un entero.\",\n    \"ip\"               => \"El campo :attribute debe ser una IP válida.\",\n    \"max\"              => [\n        \"numeric\" => \"El campo :attribute no debe ser mayor que :max.\",\n        \"file\"    => \"El campo :attribute no debe ocupar más de :max kilobytes.\",\n        \"string\"  => \"El campo :attribute no debe tener más de :max caracteres.\",\n        \"array\"   => \"El campo :attribute no debe tener más de :max elementos.\"\n    ],\n    \"mimes\"            => \"El campo :attribute debe ser un archivo del tipo: :values.\",\n    \"extensions\"       => \"El campo :attribute debe tener una extensión de: :values.\",\n    \"min\"              => [\n        \"numeric\" => \"El campo :attribute debe ser :min o más.\",\n        \"file\"    => \"El campo :attribute debe ocupar :min kilobytes o más.\",\n        \"string\"  => \"El campo :attribute debe tener :min caracteres o más.\",\n        \"array\"   => \"El campo :attribute debe tener :min elementos o más.\"\n    ],\n    \"not_in\"           => \"El campo :attribute es incorrecto.\",\n    \"numeric\"          => \"El campo :attribute debe ser un número.\",\n    \"regex\"            => \"El campo :attribute tiene un formato incorrecto.\",\n    \"required\"         => \"El campo :attribute es obligatorio.\",\n    \"required_if\"      => \"El campo :attribute es obligatorio si el campo :other es :value.\",\n    \"required_with\"    => \"El campo :attribute es obligatorio cuando el campo :values está presente.\",\n    \"required_without\" => \"El campo :attribute es obligatorio cuando el campo :values no está presente.\",\n    \"same\"             => \"Los campos :attribute y :other deben ser iguales.\",\n    \"size\"             => [\n        \"numeric\" => \"El campo :attribute debe ser :size.\",\n        \"file\"    => \"El campo :attribute debe ocupar :size kilobytes.\",\n        \"string\"  => \"El campo :attribute debe tener :size caracteres.\",\n        \"array\"   => \"El campo :attribute debe contener :size elementos.\"\n    ],\n    \"unique\"           => \"El campo :attribute ya ha sido tomado.\",\n    \"url\"              => \"El campo :attribute tiene un formato incorrecto.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => []\n\n];\n"
  },
  {
    "path": "modules/system/lang/es-ar/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Getting back to basics',\n  ],\n  'directory' => [\n    'create_fail' => 'No se puede crear el directorio: :name',\n  ],\n  'file' => [\n    'create_fail' => 'No se puede crear el archivo: :name',\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistema',\n    'menu_label' => 'Sistema',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Miscelánea',\n      'logs' => 'Registros',\n      'mail' => 'Correo',\n      'shop' => 'Comprar',\n      'team' => 'Equipo',\n      'users' => 'Usuarios',\n      'system' => 'Sistema',\n      'social' => 'Social',\n      'events' => 'Eventos',\n      'customers' => 'Clientes',\n      'my_settings' => 'Mis configuraciones',\n    ],\n  ],\n  'plugin' => [\n    'unnamed' => 'Plugin sin nombre',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Activar o desactivar',\n    'enable_or_disable_title' => 'Activar o desactivar plugins',\n    'remove' => 'Eliminar',\n    'refresh' => 'Actualizar',\n    'disabled_label' => 'Desactivado',\n    'disabled_help' => 'Los Plugins desactivados son ignorados por la aplicación.',\n    'selected_amount' => 'Plugins seleccionados: :amount',\n    'remove_confirm' => '¿Está usted seguro?',\n    'remove_success' => 'Se eliminaron exitosamente los plugins del sistema.',\n    'refresh_success' => 'Se actualizaron exitosamente los plugins del sistema.',\n    'disable_confirm' => '¿Está usted seguro?',\n    'disable_success' => 'Se desactivaron exitosamente los plugins.',\n    'enable_success' => 'Se activaron exitosamente los plugins.',\n  ],\n  'project' => [\n    'attach' => 'Adjuntar Proyecto',\n    'detach' => 'Separar Proyect',\n    'none' => 'Ningun',\n    'id' => [\n      'missing' => 'Por favor, especifique un ID del proyecto para usar.',\n    ],\n    'detach_confirm' => '¿Seguro que quieres separar este proyecto?',\n    'unbind_success' => 'El proyecto ha sido separado con éxito.',\n  ],\n  'settings' => [\n    'search' => 'Buscar',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Conexión SSL requerida',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Nombre único utilizado para referirse a esta plantilla',\n    'test_send' => 'Enviar mensaje de prueba',\n    'return' => 'Volver a la lista de plantilla',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Versión :build',\n    'core_build_help' => 'Última versión está disponible.',\n    'plugin_version_none' => 'Nuevo plugin',\n    'theme_new_install' => 'Intalación de nuevo tema.',\n    'theme_extracting' => 'Descomprimiendo tema: :name',\n    'update_label' => 'Actualizando software',\n    'update_loading' => 'Cargando actualizaciones disponibles...',\n    'force_label' => 'Forzar actualización',\n    'found' => [\n      'label' => 'Se encontraron nuevas actualizaciones!',\n      'help' => 'Click Actualizar software para comenzar con el proceso de actualización.',\n    ],\n    'none' => [\n      'label' => 'No hay actualizaciones',\n      'help' => 'No se encontraron nuevas actualizaciones disponibles.',\n    ],\n  ],\n  'server' => [\n    'connect_error' => 'Error al conectar con el servidor.',\n    'response_not_found' => 'El servidor de actualización no se pudo encontrar.',\n    'response_invalid' => 'Respuesta no válida del servidor.',\n    'response_empty' => 'Respuesta vacía desde el servidor.',\n    'file_error' => 'El servidor no pudo entregar el paquete.',\n    'file_corrupt' => 'El archivo se encuentra dañado.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Clase :class debe definir la propiedad $:property utilizada por :behavior comportamiento.',\n  ],\n  'config' => [\n    'not_found' => 'No se puede encontrar el archivo de configuración :file definido por :location.',\n    'required' => 'Configuración utilizada en :location debe proporcionar un valor. \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'No se puede extraer el archivo \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'El registro de accesos se encuentra vacío',\n    'empty_loading' => 'Borrando los logs...',\n    'empty_success' => 'Los logs fueron borrados...',\n    'return_link' => 'Regresar al registro de accesso',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'manage_system_settings' => 'Gestionar la configuración del sistema',\n    'manage_software_updates' => 'Gestionar actualización de software',\n    'manage_mail_templates' => 'Gestionar plantillas de correo',\n    'manage_other_administrators' => 'Gestionar otros administradores',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/es-ar/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \"The :attribute must be accepted.\",\n    \"active_url\"       => \"The :attribute is not a valid URL.\",\n    \"after\"            => \"The :attribute must be a date after :date.\",\n    \"alpha\"            => \"The :attribute may only contain letters.\",\n    \"alpha_dash\"       => \"The :attribute may only contain letters, numbers, and dashes.\",\n    \"alpha_num\"        => \"The :attribute may only contain letters and numbers.\",\n    \"array\"            => \"The :attribute must be an array.\",\n    \"before\"           => \"The :attribute must be a date before :date.\",\n    \"between\"          => [\n        \"numeric\" => \"The :attribute must be between :min - :max.\",\n        \"file\"    => \"The :attribute must be between :min - :max kilobytes.\",\n        \"string\"  => \"The :attribute must be between :min - :max characters.\",\n        \"array\"   => \"The :attribute must have between :min - :max items.\",\n    ],\n    \"confirmed\"        => \"The :attribute confirmation does not match.\",\n    \"date\"             => \"The :attribute is not a valid date.\",\n    \"date_format\"      => \"The :attribute does not match the format :format.\",\n    \"different\"        => \"The :attribute and :other must be different.\",\n    \"digits\"           => \"The :attribute must be :digits digits.\",\n    \"digits_between\"   => \"The :attribute must be between :min and :max digits.\",\n    \"email\"            => \"The :attribute format is invalid.\",\n    \"exists\"           => \"The selected :attribute is invalid.\",\n    \"image\"            => \"The :attribute must be an image.\",\n    \"in\"               => \"The selected :attribute is invalid.\",\n    \"integer\"          => \"The :attribute must be an integer.\",\n    \"ip\"               => \"The :attribute must be a valid IP address.\",\n    \"max\"              => [\n        \"numeric\" => \"The :attribute may not be greater than :max.\",\n        \"file\"    => \"The :attribute may not be greater than :max kilobytes.\",\n        \"string\"  => \"The :attribute may not be greater than :max characters.\",\n        \"array\"   => \"The :attribute may not have more than :max items.\",\n    ],\n    \"mimes\"            => \"The :attribute must be a file of type: :values.\",\n    \"min\"              => [\n        \"numeric\" => \"The :attribute must be at least :min.\",\n        \"file\"    => \"The :attribute must be at least :min kilobytes.\",\n        \"string\"  => \"The :attribute must be at least :min characters.\",\n        \"array\"   => \"The :attribute must have at least :min items.\",\n    ],\n    \"not_in\"           => \"The selected :attribute is invalid.\",\n    \"numeric\"          => \"The :attribute must be a number.\",\n    \"regex\"            => \"The :attribute format is invalid.\",\n    \"required\"         => \"The :attribute field is required.\",\n    \"required_if\"      => \"The :attribute field is required when :other is :value.\",\n    \"required_with\"    => \"The :attribute field is required when :values is present.\",\n    \"required_without\" => \"The :attribute field is required when :values is not present.\",\n    \"same\"             => \"The :attribute and :other must match.\",\n    \"size\"             => [\n        \"numeric\" => \"The :attribute must be :size.\",\n        \"file\"    => \"The :attribute must be :size kilobytes.\",\n        \"string\"  => \"The :attribute must be :size characters.\",\n        \"array\"   => \"The :attribute must contain :size items.\",\n    ],\n    \"unique\"           => \"The :attribute has already been taken.\",\n    \"url\"              => \"The :attribute format is invalid.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/es-ar.json",
    "content": "{\n  \"Check For Updates\": \"Chequear actualizaciones\",\n  \"Manage Plugins\": \"Administrar plugins\",\n  \"Project\": \"Proyecto\",\n  \"Owner\": \"Dueño\",\n  \"Current Build\": \"Versión actual\",\n  \"Software Updates\": \"Actualizaciones\",\n  \"Update the system modules and plugins.\": \"Actualizaciones del sistema, administrar e instalar plugins y temas.\",\n  \"Settings\": \"Configuración\",\n  \"The settings page is missing a Model definition.\": \"La página de configuración no encuentra una definición de modelo.\",\n  \":name settings updated\": \"Los ajustes para :name han sido actualizados correctamente.\",\n  \"Return to System Settings\": \"Regresar a la configuración del sistema\",\n  \"Attach to Project\": \"Adjuntar al proyecto\",\n  \"Manage Updates\": \"Administrar actualizaciones\",\n  \"Software Update\": \"Actualizaciones de software\",\n  \"Try Again\": \"Intentar nuevamente\",\n  \"Unpacking application files\": \"Descomprimiendo archivos de la aplicación\",\n  \"Update Failed\": \"Actualización falló\",\n  \"Unpacking plugin: :name\": \"Descomprimiendo plugin: :name\",\n  \"Updating application files\": \"Descargando archivos de la aplicación\",\n  \"Finishing update process\": \"Finalizando el proceso de actualización\",\n  \"Installing plugin: :name\": \"Descargando plugin: :name\",\n  \"Finishing installation process\": \"Finalizó el proceso de instalación\",\n  \"Installing theme: :name\": \"Descargando tema: :name\",\n  \"Please specify a Plugin name to install.\": \"Por favor, especifique un nombre de Plugin para instalar\",\n  \"Update process complete\": \"El proceso de actualización se realizó exitosamente.\",\n  \"Package installed successfully\": \"El plugin se ha instalado correctamente.\",\n  \"View the Dashboard\": \"Ver el Tablero\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mail Configuration\": \"Administrar Correo\",\n  \"Manage email configuration.\": \"Administrar la configuración de correo electrónico.\",\n  \"Sender Name\": \"Nombre del remitente\",\n  \"General\": \"General\",\n  \"Sender Email\": \"Remitente Email\",\n  \"Mail Method\": \"Método\",\n  \"SMTP Address\": \"Dirección SMTP\",\n  \"SMTP Port\": \"Puerto SMTP\",\n  \"SMTP Authorization Required\": \"Autorización SMTP requerida\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Usar esta opción si el servidor SMTP requiere autorización.\",\n  \"Username\": \"Nombre de usuario\",\n  \"Password\": \"Contraseña\",\n  \"Sendmail Path\": \"Ruta del Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Por favor, especifique la ruta del programa sendmail.\",\n  \"Mail Templates\": \"Plantillas de Correo\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modificar las plantillas de correo que se envían a los usuarios y administradores, administrar diseños de correo electrónico\",\n  \"Event Log\": \"Log de eventos\",\n  \"View system log messages with their recorded time and details.\": \"Ver los logs de registro del sistema.\",\n  \"Request Log\": \"Logs de acceso\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Ver listado de redirecciones con errores y paginas No encontradas (404).\",\n  \"Test message sent.\": \"El mensaje de prueba ha sido enviado con éxito.\",\n  \"New Layout\": \"Nueva Disposición\",\n  \"New Template\": \"Nueva plantilla\",\n  \"Template\": \"Plantilla\",\n  \"Templates\": \"Plantillas\",\n  \"Layouts\": \"Disposiciones\",\n  \"Layout\": \"Disposición\",\n  \"Mail Layouts\": \"Disposición del Mail\",\n  \"Name\": \"Nombre\",\n  \"Code\": \"Código\",\n  \"Unique code used to refer to this template\": \"Código único utilizado para referirse a esta plantilla \",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Texto plano\",\n  \"Subject\": \"Asunto\",\n  \"Email message subject\": \"Correo asunto del mensaje\",\n  \"Description\": \"Descripción\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID del Evento\",\n  \"Level\": \"Nivel\",\n  \"Date & Time\": \"Fecha y Hora\",\n  \"Message\": \"Mensaje\",\n  \"Version\": \"Versión\",\n  \"Status\": \"Estado\",\n  \"Log ID\": \"ID Log\",\n  \"Counter\": \"Contador\",\n  \"Referers\": \"Referencia\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Este registro muestra una lista de los posibles errores que se producen en la aplicación, como las excepciones y la información de depuración.\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Este registro muestra una lista de las peticiones del navegador que pueden requerir atención. Por ejemplo, si un usuario abre una página que no se puede encontrar, se crea un registro con el código de estado 404.\",\n  \"Event log emptied\": \"Los registros fueron borrados\",\n  \"Empty Event Log\": \"El registro de eventos se encuentra vacío\",\n  \"Emptying Event Log...\": \"Borrando los registros...\",\n  \"Return to Event Log\": \"Regresar al registro de eventos\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"¿Está usted seguro?\",\n  \"Plugin has been removed from the file system.\": \"Se eliminó el plugin del sistema de archivos.\",\n  \"Install Plugin\": \"Instalar Plugin\",\n  \"Plugin Name\": \"Nombre del plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Buscar el plugin por su nombre de codigo unico. Por ejemplo: RainLab.Blog\",\n  \"The combiner file ':name' is not found.\": \"El archivo combinado ':name' no se encuentra.\"\n}"
  },
  {
    "path": "modules/system/lang/es.json",
    "content": "{\n  \"Check For Updates\": \"Chequear actualizaciones\",\n  \"Install Packages\": \"Instalar paquetes\",\n  \"Manage Themes\": \"Administrar temas\",\n  \"Manage Plugins\": \"Gestionar extensiones\",\n  \"Project\": \"Proyecto\",\n  \"Owner\": \"Dueño\",\n  \"Plugins\": \"Extensiones\",\n  \"Recommended\": \"Recomendado\",\n  \"Disabled\": \"Desactivado\",\n  \"Current Build\": \"Compilación actual\",\n  \"Updates Available\": \"Actualizaciones disponibles\",\n  \"Up to Date\": \"Al día\",\n  \"Latest Build\": \"Última compilación\",\n  \"View Changelog\": \"Ver registro de cambios\",\n  \"Software Updates\": \"Actualizaciones\",\n  \"Update the system modules and plugins.\": \"Actualizaciones del sistema, administrar e instalar plugins y temas.\",\n  \"General\": \"General\",\n  \"Mail\": \"Correo\",\n  \"Utilities\": \"Utilidades\",\n  \"Settings\": \"Configuraciones\",\n  \"Show All Settings\": \"Mostrar todas las configuraciones\",\n  \"Unable to find the specified settings.\": \"No se encuentra la configuración especificada.\",\n  \"The settings page is missing a Model definition.\": \"La página de configuración no encuentra una definición del Modelo.\",\n  \":name settings updated\": \"Los ajustes para :name se han actualizado correctamente.\",\n  \"Return to System Settings\": \"Volver a configuración del sistema\",\n  \"Search Settings...\": \"Encuentre una configuración...\",\n  \"Disable mail branding CSS\": \"Deshabilitar CSS de marca de correo\",\n  \"Manage Sites\": \"Administrar sitios\",\n  \"Manage the websites available for this application.\": \"Administra los sitios web disponibles para esta aplicación.\",\n  \"Marketplace\": \"Mercado\",\n  \"There is no documentation provided.\": \"No hay documentación proporcionada.\",\n  \"Documentation\": \"Documentación\",\n  \"Upgrade Guide\": \"Guía de actualización\",\n  \"License\": \"Licencia\",\n  \"Attach to Project\": \"Adjuntar al proyecto\",\n  \"Manage Updates\": \"Administrar actualizaciones\",\n  \"Software Update\": \"Actualizaciones de software\",\n  \"Return to Software Updates\": \"Volver a actualizaciones del sistema\",\n  \"Try Again\": \"Intentar nuevamente\",\n  \"Unpacking application files\": \"Descomprimiendo archivos de la aplicación\",\n  \"Update Failed\": \"Falló la Actualización\",\n  \"Unpacking plugin: :name\": \"Descomprimiendo extensión :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"El sitio principal se usa de forma predeterminada y no se puede eliminar.\",\n  \"Disabled sites are not shown on the frontend.\": \"Los sitios deshabilitados no se muestran en la interfaz.\",\n  \"Enabled in the Admin Panel\": \"Habilitado en el Panel de Administración\",\n  \"Configuration\": \"Configuración\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Use esto si desea que el sitio esté habilitado en el panel de administración.\",\n  \"Install\": \"Instalar\",\n  \"Sync Project\": \"Sincronizar Proyecto\",\n  \"Name\": \"Nombre\",\n  \"Unique Code\": \"Código único\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Sitios\",\n  \"Create Site\": \"Crear sitio\",\n  \"Base URL\": \"URL base\",\n  \"Status\": \"Estado\",\n  \"Current default value: :value\": \"Valor predeterminado actual: :value\",\n  \"Locale\": \"Idioma\",\n  \"Timezone\": \"Zona horaria\",\n  \"Custom application URL\": \"URL de aplicación personalizada\",\n  \"Override the application URL when this site is active.\": \"Anule la URL de la aplicación cuando este sitio esté activo.\",\n  \"Use a CMS route prefix\": \"Usar un prefijo de ruta CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Un prefijo puede identificar este sitio cuando se usa un nombre de host compartido.\",\n  \"Define matching hostnames\": \"Definir nombres de host coincidentes\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Especifique los nombres de dominio y los patrones que se deben usar para servir este sitio.\",\n  \"Display a style for this site\": \"Mostrar un color para este sitio\",\n  \"To help identify this site, display a color in the admin panel.\": \"Para ayudar a identificar este sitio, muestra un color en el panel de administración.\",\n  \"Save\": \"Guardar\",\n  \"Save and Close\": \"Guardar y cerrar\",\n  \"Use Default\": \"Usar predeterminado\",\n  \"Use Custom\": \"Usar personalizado\",\n  \"Specify a custom locale code.\": \"Especifique un código de configuración regional personalizado.\",\n  \"Failed\": \"Ha fallado\",\n  \"or\": \"o\",\n  \"Code\": \"Código\",\n  \"October CMS Marketplace\": \"Mercado de October CMS\",\n  \"Visit the :link to add some.\": \"El proyecto no tiene complementos ni temas. Visite el :link para agregar algunos.\",\n  \"Buy Now\": \"Comprar ahora\",\n  \"Updating package manager\": \"Actualizando el administrador de paquetes\",\n  \"Updating application files\": \"Actualizando archivos de aplicación\",\n  \"Setting build number\": \"Estableciendo número de build\",\n  \"Finishing update process\": \"Finalizando el proceso de actualización\",\n  \"Installing plugin: :name\": \"Descargando plugin: :name\",\n  \"Finishing installation process\": \"Finalizó el proceso de instalación\",\n  \"Removing theme: :name\": \"Eliminando tema: :name\",\n  \"Please specify a Theme name to install.\": \"Por favor especifique un nombre de Theme a instalar.\",\n  \"Installing theme: :name\": \"Descargando tema: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Eliminando complemento: :nombre\",\n  \"Please specify a Plugin name to install.\": \"Por favor, especifique un nombre de Plugin para instalar\",\n  \"Update process complete\": \"El proceso de actualización se realizó exitosamente.\",\n  \"Package installed successfully\": \"El plugin se ha instalado correctamente.\",\n  \"Check Dependencies\": \"Comprobar dependencias\",\n  \"Install Dependencies\": \"Instalar dependencias\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Faltan dependencias necesarias para que el sistema funcione correctamente.\",\n  \"License Key\": \"Clave de licencia\",\n  \"How to find your License Key\": \"Cómo encontrar su clave de licencia\",\n  \"The password attribute is required.\": \"El atributo de contraseña es obligatorio.\",\n  \"The login attribute is required.\": \"El atributo de inicio de sesión es obligatorio.\",\n  \"Cannot login user since they are not activated.\": \"No se puede iniciar sesión de usuario ya que no están activados.\",\n  \"Cannot login user since they are banned.\": \"No se puede iniciar sesión como usuario ya que están prohibidos.\",\n  \"Cannot login user since they are suspended.\": \"No se puede iniciar sesión de usuario ya que están suspendidos.\",\n  \"A user was not found with the given credentials.\": \"No se encontró un usuario con las credenciales proporcionadas.\",\n  \"A user was found but the password did not match.\": \"Se encontró un usuario pero la contraseña no coincidía.\",\n  \"User is not logged in\": \"El usuario no ha iniciado sesión\",\n  \"Register Software\": \"Registrar Software\",\n  \"View the Dashboard\": \"Ver el Escritorio\",\n  \"Set the Default Dashboard\": \"Establecer el panel predeterminado\",\n  \"Log File\": \"Archivo de Registro\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Matasellos\",\n  \"No encryption\": \"Sin encryptación\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Configuración del correo\",\n  \"Manage email configuration.\": \"Administrar la configuración de correo electrónico.\",\n  \"Sender Name\": \"Nombre del remitente\",\n  \"Sender Email\": \"Correo del remitente\",\n  \"Mail Method\": \"Método de correo\",\n  \"SMTP Address\": \"Dirección SMTP\",\n  \"SMTP Port\": \"Puerto SMTP\",\n  \"SMTP Encryption Protocol\": \"protocolo SMTP encryptado\",\n  \"SMTP Authorization Required\": \"autorización requerida de SMTP\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Utilice esta opción si el servidor SMTP requiere autorización.\",\n  \"Username\": \"Nombre de usuario\",\n  \"Password\": \"Contraseña\",\n  \"Sendmail Path\": \"Directorio de Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Por favor, especifique la ruta de acceso del programa sendmail.\",\n  \"Mailgun Domain\": \"Dominio Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Por favor, especifique el nombre de dominio Mailgun.\",\n  \"Mailgun Secret\": \"Mailgun secret\",\n  \"Enter your Mailgun API key.\": \"Introduzca su key de Mailgun API.\",\n  \"SES Key\": \"SES key\",\n  \"Enter your SES API key\": \"Introduzca su key de SES API\",\n  \"SES Secret\": \"SES secret\",\n  \"Enter your SES API secret key\": \"Introduzca su key de SES API\",\n  \"SES Region\": \"Región SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Introduzca su región SES (e.g. us-east-1)\",\n  \"Postmark Token\": \"Ficha de matasellos\",\n  \"Enter your Postmark API secret key\": \"Ingrese su clave secreta API de matasellos\",\n  \"Define administrator roles\": \"Definir roles de administrador\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restrinja el acceso a este sitio solo al administrador con los siguientes roles.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"Todos los Sitios\",\n  \"Manage Backend Preferences\": \"Gestionar preferencias back-end\",\n  \"Manage Code Editor Preferences\": \"Gestionar preferencias editor código\",\n  \"Customize Backend Styles\": \"Perzonalizar el back-end\",\n  \"Mail Templates\": \"Plantillas de Correo\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modificar las plantillas de correo que se envían a los usuarios y administradores, administrar diseños de correo electrónico\",\n  \"Mail Branding\": \"Branding de Correo\",\n  \"Modify the colors and appearance of mail templates.\": \"Modificar los colores y apariencia de las plantillas de correo.\",\n  \"Event Log\": \"Registro de eventos\",\n  \"View system log messages with their recorded time and details.\": \"Ver los logs de registro del sistema.\",\n  \"Request Log\": \"Registros de peticiones\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Ver listado de redirecciones con errores y Paginas no encontradas (404).\",\n  \"Log Settings\": \"Configuración de Logs\",\n  \"Specify which areas should use logging.\": \"Especifique cuáles áreas deben realizar registros.\",\n  \"Test message sent.\": \"El mensaje de prueba enviado.\",\n  \"New Layout\": \"Nueva Disposición\",\n  \"New Partial\": \"Nuevo Parcial\",\n  \"New Template\": \"Nueva plantilla\",\n  \"Template\": \"Plantilla\",\n  \"Templates\": \"Plantillas\",\n  \"Layouts\": \"Disposiciones\",\n  \"Partials\": \"Parciales\",\n  \"Partial\": \"Parcial\",\n  \"Mail Partials\": \"Parciales de correo\",\n  \"Layout\": \"Disposición\",\n  \"Mail Layouts\": \"Disposición del Mail\",\n  \"Unique code used to refer to this template\": \"Código único utilizado para referirse a esta plantilla \",\n  \"-- No layout --\": \"-- Sin disposición --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Texto plano\",\n  \"Disable automatic inline CSS\": \"Deshabilitar CSS en línea automático\",\n  \"Options\": \"Opciones\",\n  \"Subject\": \"Asunto\",\n  \"Email message subject\": \"Correo asunto del mensaje\",\n  \"Description\": \"Descripción\",\n  \"Drivers Not Installed\": \"Drivers no instalados\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Este método de correo electrónico requiere que el plugin \\\":plugin\\\" este instalado antes de poder enviar correo.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID del Evento\",\n  \"Level\": \"Nivel\",\n  \"Date & Time\": \"Fecha y Hora\",\n  \"Message\": \"Mensaje\",\n  \"Logging\": \"Registros\",\n  \"Log Bad Requests\": \"Registrar malas solicitudes\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Solicitudes de navegadores que puedan requerir atención, como errores 404.\",\n  \"Log Theme Changes\": \"Registrar cambios en el tema\",\n  \"When a change is made to the theme using the backend.\": \"Cuando se realizan cambios al tema utilizando el backend.\",\n  \"Log System Events\": \"Registrar eventos de sistema\",\n  \"Store system events in the database in addition to the file-based log.\": \"Almacenar eventos de sistema en la base de datos además del registro de archivo.\",\n  \"Background\": \"Fondo\",\n  \"Body background\": \"Fondo del cuerpo\",\n  \"Content background\": \"Fondo del contenido\",\n  \"Inner content background\": \"Fondo del contenido interior\",\n  \"Buttons\": \"Botones\",\n  \"Button text color\": \"Color del texto del botón\",\n  \"Primary button background\": \"Fondo del botón Principal\",\n  \"Positive button background\": \"Fondo del botón Positivo\",\n  \"Negative button background\": \"Fondo del botón Negativo\",\n  \"Typography\": \"Tipografía\",\n  \"Header color\": \"Color del Enzabezado\",\n  \"Headings color\": \"Color de Encabezados\",\n  \"Text color\": \"Color del Texto\",\n  \"Link color\": \"Color del Enlace\",\n  \"Footer color\": \"Color del pie de página\",\n  \"Borders\": \"Bordes\",\n  \"Body border color\": \"Color del borde del cuerpo\",\n  \"Subcopy border color\": \"Color del borde del subcopy\",\n  \"Table border color\": \"Color del borde de la tabla\",\n  \"Components\": \"Componentes\",\n  \"Panel background\": \"Fondo del Panel\",\n  \"Promotion background\": \"Fondo de Promoción\",\n  \"Promotion border color\": \"Color del borde de Promoción\",\n  \"Customize Mail Appearance\": \"Personalizar apariencia del correo\",\n  \"Version\": \"Versión\",\n  \"Enabled\": \"Habilitado\",\n  \"Latest\": \"Latest\",\n  \"Log ID\": \"ID Log\",\n  \"Counter\": \"Contador\",\n  \"Referers\": \"Referencia\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Este registro muestra una lista de los posibles errores que se producen en la aplicación, como las excepciones y la información de depuración.\",\n  \"Event\": \"Evento\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Este registro muestra una lista de las peticiones del navegador que pueden requerir atención. Por ejemplo, si un usuario abre una página que no se puede encontrar, se crea un registro con el código de estado 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Petición\",\n  \"Event log emptied\": \"Los registros fueron borrados\",\n  \"Empty Event Log\": \"Vaciar el registro de eventos\",\n  \"Emptying Event Log...\": \"Borrando los registros...\",\n  \"Return to Event Log\": \"Regresar al registro de eventos\",\n  \"Installed\": \"Instalado\",\n  \"Primary Site\": \"Sitio Principal\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"¿Está seguro?\",\n  \"Reset Plugin Data\": \"Reset Plugin Data\",\n  \"Enable Plugins\": \"Enable Plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Are you sure you want to :action these plugins?\",\n  \"enable\": \"enable\",\n  \"disable\": \"disable\",\n  \"Disable Plugins\": \"Disable Plugins\",\n  \"Select Action...\": \"Select Action...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"El Plugin ha sido elimina del sistema de archivos.\",\n  \"search plugins to install...\": \"buscar plugins para instalar...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"buscar temas para instalar...\",\n  \"Install Theme\": \"Instalar Theme\",\n  \"Theme Name\": \"Nombre Tema\",\n  \"Install Plugin\": \"Instalar Plugin\",\n  \"Plugin Name\": \"Nombre del Plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Nombra el plugin por su código único. por ejemplo, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Nombre del tema por su código único. Por ejemplo, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Seleccionar método de instalación\",\n  \"Make a Copy (Recommended)\": \"Hacer una Copia (Recomendado)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Haga una copia de este tema para personalizarlo y gestionar manualmente las actualizaciones futuras.\",\n  \"Install with Composer\": \"Instalar con Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extender el tema usando un tema hijo para preservar futuras actualizaciones del autor del tema.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Cambiar Estado\",\n  \"Site Definitions\": \"Definiciones de Sitio\",\n  \"System Updates\": \"Actualizaciones\",\n  \"Find a Setting...\": \"Encuentre una configuración...\",\n  \"Return to System Updates\": \"Volver a actualizaciones del sistema\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\"\n}"
  },
  {
    "path": "modules/system/lang/et/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Vorming',\n        'quote' => 'Tsitaat',\n        'code' => 'Kood',\n        'header1' => 'Pealkiri 1',\n        'header2' => 'Pealkiri 2',\n        'header3' => 'Pealkiri 3',\n        'header4' => 'Pealkiri 4',\n        'header5' => 'Pealkiri 5',\n        'header6' => 'Pealkiri 6',\n        'bold' => 'Paks',\n        'italic' => 'Kursiiv',\n        'unorderedlist' => 'Järjestamata nimekiri',\n        'orderedlist' => 'Järjestatud nimekiri',\n        'video' => 'Video',\n        'image' => 'Pilt',\n        'link' => 'Link',\n        'horizontalrule' => 'Sisesta horisontaaljoon',\n        'fullscreen' => 'Täisekraan',\n        'preview' => 'Eelvaade',\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Sisesta link',\n        'insert_image' => 'Siseta pilt',\n        'insert_video' => 'Sisesta video',\n        'insert_audio' => 'Sisesta heliklipp',\n        'invalid_file_empty_insert' => 'Palun vali fail, millele link lisada.',\n        'invalid_file_single_insert' => 'Palun vali üks fail.',\n        'invalid_image_empty_insert' => 'Palun vali pildid, mida lisada.',\n        'invalid_video_empty_insert' => 'Palun vali videoklipp, mida lisada.',\n        'invalid_audio_empty_insert' => 'Palun vali heliklipp, mida lisada.',\n    ],\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Loobu',\n        'widget_remove_confirm' => 'Eemalda see widget?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Eelmine kuu',\n        'nextMonth' => 'Järgmine kuu',\n        'months' => ['Jaanuar', 'Veebruar', 'Märts', 'Aprill', 'Mai', 'Juuni', 'Juuli', 'August', 'September', 'Oktoober', 'November', 'Detsember'],\n        'weekdays' => ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],\n        'weekdaysShort' => ['P', 'E', 'T', 'K', 'N', 'R', 'L']\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'kõik'\n        ],\n        'dates' => [\n            'all' => 'kõik',\n            'filter_button_text' => 'Filtreeri',\n            'reset_button_text'  => 'Lähtesta',\n            'date_placeholder' => 'Kuupäev',\n            'after_placeholder' => 'Hiljem kui',\n            'before_placeholder' => 'Varem kui'\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Näita stacktrace',\n        'hide_stacktrace' => 'Peida stacktrace',\n        'tabs' => [\n            'formatted' => 'Kujundatud',\n            'raw' => 'Algne',\n        ],\n        'editor' => [\n            'title' => 'Lähtekoodi redaktor',\n            'description' => 'Sinu operatsioonisüsteem peaks olema sedistatud ühe URL skeemi jaoks.',\n            'openWith' => 'Ava programmiga',\n            'remember_choice' => 'Jäta valik selleks sessiooniks meelde',\n            'open' => 'Ava',\n            'cancel' => 'Loobu'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/et/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Tagasi põhitõdede juurde',\n  ],\n  'locale' => [\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'tr' => 'Türkçe',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n    'vn' => 'Tiếng việt',\n  ],\n  'directory' => [\n    'create_fail' => 'Kataloogi :name ei õnnestunud luua',\n  ],\n  'file' => [\n    'create_fail' => 'Faili :name ei õnnestunud luua',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Vigane turvamärk',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Süsteem',\n    'menu_label' => 'Süsteem',\n    'categories' => [\n      'cms' => 'Sisuhaldus',\n      'misc' => 'Muu',\n      'logs' => 'Logid',\n      'mail' => 'E-post',\n      'shop' => 'Pood',\n      'team' => 'Meeskond',\n      'users' => 'Kasutajad',\n      'system' => 'Süsteem',\n      'social' => 'Suhtlusvõrgustikud',\n      'events' => 'Sündmused',\n      'customers' => 'Kliendid',\n      'my_settings' => 'Minu seaded',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Teema',\n    'unnamed' => 'Nimeta teema',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Paigalda teemad',\n    'installed' => 'Paigaldatud teemad',\n    'no_themes' => 'Ühtegi ostetud teemat pole paigaldatud.',\n    'recommended' => 'Soovitatud',\n    'remove_confirm' => 'Oled sa kindel, et soovid selle teema eemaldada?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Nimeta plugin',\n    'name' => [],\n    'by_author' => 'Autor: :name',\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Luba või keela',\n    'enable_or_disable_title' => 'Luba või keela pluginaid',\n    'install' => 'Paigalda pluginaid',\n    'install_products' => 'Paigalda tooteid',\n    'installed' => 'Paigaldatud pluginad',\n    'no_plugins' => 'Ühtegi ostetud pluginat pole paigaldatud.',\n    'recommended' => 'Soovitatud',\n    'remove' => 'Eemalda',\n    'refresh' => 'Värskenda',\n    'disabled_label' => 'Keelatud',\n    'disabled_help' => 'Keelatud pluginaid süsteem ei kasuta.',\n    'frozen_label' => 'Peata uuendamised',\n    'frozen_help' => 'Peatatud uuendustega pluginaid ei uuendata automaatse uuendusprotsessi käigus.',\n    'selected_amount' => 'Valitud pluginaid: :amount',\n    'remove_confirm' => 'Oled sa kindel, et soovid selle plugina eemaldada?',\n    'remove_success' => 'Valitud pluginad on süsteemist eemaldatud.',\n    'refresh_success' => 'Valitud plugin on edukalt värskendatud.',\n    'disable_confirm' => 'Oled sa kindel?',\n    'disable_success' => 'Valitud plugin on nüüd keelatud.',\n    'enable_success' => 'Valitud pluginad on nüüd lubatud.',\n  ],\n  'project' => [\n    'attach' => 'Seosta projekt',\n    'detach' => 'Eemalda projekt',\n    'none' => 'Puudub',\n    'id' => [\n      'missing' => 'Palun sisesta projekti ID.',\n    ],\n    'detach_confirm' => 'Oled sa kindel, et soovid selle projekti eemaldada?',\n    'unbind_success' => 'Projekt on eemaldatud.',\n  ],\n  'settings' => [\n    'search' => 'Otsi',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL ühendus',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikaalne nimi, mida kasutatakse sellele mallile viitamisel',\n    'test_send' => 'Saada testkiri',\n    'test_confirm' => 'Saada testkiri aadressile :email. Jätkan?',\n    'creating' => 'Loon malli...',\n    'creating_layout' => 'Loon kujundust...',\n    'saving' => 'Salvestan malli...',\n    'saving_layout' => 'Salvestan kujundust...',\n    'delete_confirm' => 'Kustutan selle malli?',\n    'delete_layout_confirm' => 'Kustutan selle kujunduse?',\n    'deleting' => 'Kustutan malli...',\n    'deleting_layout' => 'Kustutan kujundust...',\n    'sending' => 'Saadan testkirja...',\n    'return' => 'Tagasi mallide nimekirja',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Pluginat ei leitud',\n    'core_build' => 'Versioon :build',\n    'core_build_help' => 'Uusim versioon on saadaval.',\n    'themes' => 'Teemad',\n    'plugin_version_none' => 'Uus plugin',\n    'plugin_current_version' => 'Praegune versioon',\n    'theme_new_install' => 'Uue teema paigaldamine.',\n    'theme_extracting' => 'Teema failide lahtipakkimine: :name',\n    'update_label' => 'Uuenda tarkvara',\n    'update_loading' => 'Laen saadaolevaid uuendusi...',\n    'force_label' => 'Uuenda igal juhul',\n    'found' => [\n      'label' => 'Found new updates!',\n      'help' => 'Kliki \"Uuenda tarkvara,\" et alustada uuendamise protsesse.',\n    ],\n    'none' => [\n      'label' => 'Uuendusi ei ole',\n      'help' => 'Uusi uuendusi ei leitud.',\n    ],\n    'important_action' => [\n      'empty' => 'Vali tegevus',\n      'confirm' => 'Kinnita uuendus',\n      'skip' => 'Jäta see uuendus vahele (ainult nüüd)',\n      'ignore' => 'Jäta see uuendus vahele (alati)',\n    ],\n    'important_action_required' => 'Vajalik tegevus',\n    'important_view_guide' => 'Vaata uuendamise juhendit',\n    'important_view_release_notes' => 'Vaate uuenduse märkmeid',\n    'important_alert_text' => 'Osa uuendusi vajab sinu tähelepanu.',\n    'details_title' => 'Plugina andmed',\n    'details_view_homepage' => 'Vaata kodulehte',\n    'details_changelog' => 'Muudatuste nimekiri',\n    'details_changelog_missing' => 'Muudatuste nimekirja pole.',\n    'details_current_version' => 'Praegune versioon',\n    'details_author' => 'Autor',\n  ],\n  'server' => [\n    'connect_error' => 'Ühendus serveriga nurjus.',\n    'response_not_found' => 'Uuenduste serverit ei leitud.',\n    'response_invalid' => 'Serverilt saadi vigane vastus.',\n    'response_empty' => 'Serverilt saadi tühi vastus.',\n    'file_error' => 'Paketi saatmine ebaõnnestus.',\n    'file_corrupt' => 'Saadetud fail on vigane.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Klass :class peab defineerima atribuudi $:property, mida kasutab käitumine :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Ei leitud :location jaoks seadete faili :file.',\n    'required' => ':location seade peab sisaldama \\':property\\' väärtust.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Süsteemifaili \\':file\\' lahtipakkimine ebaõnnestus.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Kustuta sündmuste logi',\n    'empty_loading' => 'Kustutan sündmuste logi...',\n    'empty_success' => 'Sündmuste logi kustutatud',\n    'return_link' => 'Tagasi sündmuste logi nimekirja',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Süsteem',\n    'manage_system_settings' => 'Süsteemi seadete muutmine',\n    'manage_software_updates' => 'Süsteemi uundamine',\n    'access_logs' => 'Logide vaatamine',\n    'manage_mail_templates' => 'Kirja mallide haldamine',\n    'manage_mail_settings' => 'E-posti seadete muutmine',\n    'manage_other_administrators' => 'Administraatorite haldamine',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Invalid file path specified: \\':path\\'.',\n    'folder_size_items' => 'item(s)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/et/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \":attribute peab olema vastuvõetud.\",\n    \"active_url\"       => \":attribute ei ole korrektne URL.\",\n    \"after\"            => \":attribute peab olema hilisem kui :date.\",\n    \"alpha\"            => \":attribute võib sisaldada ainult täthi.\",\n    \"alpha_dash\"       => \":attribute võib sisaldada ainult tähti, numbreid ja sidekriipse.\",\n    \"alpha_num\"        => \":attribute võib sisaldada ainult tähti ja numbreid.\",\n    \"array\"            => \":attribute peab olema massiiv.\",\n    \"before\"           => \":attribute peab olema varasem kui :date.\",\n    \"between\"          => [\n        \"numeric\" => \":attribute peab olema vahemikus :min - :max.\",\n        \"file\"    => \":attribute peab olema vahemikus :min - :max kb.\",\n        \"string\"  => \":attribute peab olema vahemikus :min - :max tähemärki.\",\n        \"array\"   => \":attribute sisaldama :min - :max elementi.\",\n    ],\n    \"confirmed\"        => \":attribute kordus ei kattu.\",\n    \"date\"             => \":attribute pole korrektne kuupäev.\",\n    \"date_format\"      => \":attribute ei vasta vormingule :format.\",\n    \"different\"        => \":attribute ja :other peavad olema erinevad.\",\n    \"digits\"           => \":attribute peab olema :digits märgiline.\",\n    \"digits_between\"   => \":attribute peab olema vahemikus :min and :max märki.\",\n    \"email\"            => \":attribute vorming ei ole korrektne.\",\n    \"exists\"           => \"Valitud :attribute pole korrektne.\",\n    \"image\"            => \":attribute peab olema pilt.\",\n    \"in\"               => \"Valitud :attribute pole korrektne.\",\n    \"integer\"          => \":attribute peab olema täisarv.\",\n    \"ip\"               => \":attribute peab olema IP aadress.\",\n    \"max\"              => [\n        \"numeric\" => \":attribute ei tohi olla täisarv suurem kui :max.\",\n        \"file\"    => \":attribute ei tohi olla suurem kui :max kb.\",\n        \"string\"  => \":attribute ei tohi olla suurem kui :max tähemärki.\",\n        \"array\"   => \":attribute ei tohi sisalda rohkem kui :max elementi.\",\n    ],\n    \"mimes\"            => \":attribute peab olema fail tüübiga :values.\",\n    \"extensions\"       => \":attribute peab olema laiendiga :values.\",\n    \"min\"              => [\n        \"numeric\" => \":attribute peab olema vähemalt :min.\",\n        \"file\"    => \":attribute peab olema vähemalt :min kb.\",\n        \"string\"  => \":attribute peab olema vähemalt :min tähemärki.\",\n        \"array\"   => \":attribute peab sisaldama vähemalt :min elementi.\",\n    ],\n    \"not_in\"           => \"Valitud :attribute pole korrektne.\",\n    \"numeric\"          => \":attribute peab olema number.\",\n    \"regex\"            => \":attribute vormin pole korrektne.\",\n    \"required\"         => \":attribute on kohustuslik.\",\n    \"required_if\"      => \":attribute on kohustuslik kui :other on :value.\",\n    \"required_with\"    => \":attribute on kohustuslik kui :values on olemas.\",\n    \"required_without\" => \":attribute on kohustuslik kui :values pole olemas.\",\n    \"same\"             => \":attribute ja :other peavad ühtima.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute peab olema :size.\",\n        \"file\"    => \":attribute peab olema :size kb.\",\n        \"string\"  => \":attribute peab olema :size tähemärki.\",\n        \"array\"   => \":attribute peab sialdama :size elementi.\",\n    ],\n    \"unique\"           => \":attribute on juba võetud.\",\n    \"url\"              => \":attribute vorming ei ole korrektne.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/et.json",
    "content": "{\n  \"Check For Updates\": \"Kontrolli uuendusi\",\n  \"Install Packages\": \"Installige paketid\",\n  \"Manage Themes\": \"Hallake teemasid\",\n  \"Manage Plugins\": \"Halda pluginaid\",\n  \"Project\": \"Projekt\",\n  \"Owner\": \"Omanik\",\n  \"Plugins\": \"Pluginad\",\n  \"Recommended\": \"Soovitatav\",\n  \"Disabled\": \"Keelatud\",\n  \"Current Build\": \"Praegune versioon\",\n  \"Updates Available\": \"Uuendused on saadaval\",\n  \"Up to Date\": \"Ajakohane\",\n  \"Latest Build\": \"Uusim versioon\",\n  \"View Changelog\": \"Kuva muudatuste logi\",\n  \"Software Updates\": \"Uuendused & pluginad\",\n  \"Update the system modules and plugins.\": \"Uuenda süsteemi, halda ja paigalda pluginaid ja teemasid.\",\n  \"General\": \"Üldine\",\n  \"Mail\": \"Mail\",\n  \"Utilities\": \"Kommunaalteenused\",\n  \"Settings\": \"Seaded\",\n  \"Show All Settings\": \"Kuva kõik sätted\",\n  \"Unable to find the specified settings.\": \"Soovitud seadeid ei leitud.\",\n  \"The settings page is missing a Model definition.\": \"Seadete lehel puudub modeli seos.\",\n  \":name settings updated\": \":name seaded on uuendatud\",\n  \"Return to System Settings\": \"Tagasi süsteemi seadete juurde\",\n  \"Search Settings...\": \"Leidke seade...\",\n  \"Disable mail branding CSS\": \"Keela meilibrändi CSS\",\n  \"Manage Sites\": \"Halda saite\",\n  \"Manage the websites available for this application.\": \"Hallake selle rakenduse jaoks saadaolevaid veebisaite.\",\n  \"Marketplace\": \"Turg\",\n  \"There is no documentation provided.\": \"Dokumentatsiooni pole lisatud.\",\n  \"Documentation\": \"Dokumentatsioon\",\n  \"Upgrade Guide\": \"Uuendamise juhend\",\n  \"License\": \"Litsents\",\n  \"Attach to Project\": \"Lisa projektile\",\n  \"Manage Updates\": \"Halda uuendusi\",\n  \"Software Update\": \"Tarkvara uuendus\",\n  \"Return to Software Updates\": \"Tagasi süsteemi uuenduste juurde\",\n  \"Try Again\": \"Proovi uuesti\",\n  \"Unpacking application files\": \"Pakin lahti süsteemifaile\",\n  \"Update Failed\": \"Uendamine ebaõnnestus\",\n  \"Unpacking plugin: :name\": \"Plugina failide lahtipakkimine: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Peamist saiti kasutatakse vaikimisi ja seda ei saa kustutada.\",\n  \"Disabled sites are not shown on the frontend.\": \"Keelatud saite esipaneelil ei kuvata.\",\n  \"Enabled in the Admin Panel\": \"Lubatud administraatoripaneelil\",\n  \"Configuration\": \"Seadistamine\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Kasutage seda, kui soovite, et sait oleks administraatoripaneelil lubatud.\",\n  \"Install\": \"Installige\",\n  \"Sync Project\": \"Sünkrooni projekt\",\n  \"Name\": \"Nimi\",\n  \"Unique Code\": \"Unikaalne kood\",\n  \"Theme\": \"Teema\",\n  \"Sites\": \"saidid\",\n  \"Create Site\": \"Loo sait\",\n  \"Base URL\": \"Baas-URL\",\n  \"Status\": \"Staatus\",\n  \"Current default value: :value\": \"Praegune vaikeväärtus: :value\",\n  \"Locale\": \"Kohalik\",\n  \"Timezone\": \"Ajavöönd\",\n  \"Custom application URL\": \"Kohandatud rakenduse URL\",\n  \"Override the application URL when this site is active.\": \"Alistage rakenduse URL, kui see sait on aktiivne.\",\n  \"Use a CMS route prefix\": \"Kasutage CMS-i marsruudi eesliidet\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Jagatud hostinime kasutamisel saab seda saiti tuvastada eesliide.\",\n  \"Define matching hostnames\": \"Määrake sobivad hostinimed\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Määrake domeeninimed ja mustrid, mida tuleb selle saidi teenindamiseks kasutada.\",\n  \"Display a style for this site\": \"Kuva selle saidi värv\",\n  \"To help identify this site, display a color in the admin panel.\": \"Selle saidi tuvastamise hõlbustamiseks kuvage administraatoripaneelil värv.\",\n  \"Save\": \"Salvesta\",\n  \"Save and Close\": \"Salvesta ja Sule\",\n  \"Use Default\": \"Kasuta vaikeseadet\",\n  \"Use Custom\": \"Kasutage Kohandatud\",\n  \"Specify a custom locale code.\": \"Määrake kohandatud lokaadi kood.\",\n  \"Failed\": \"Ebaõnnestunud\",\n  \"or\": \"või\",\n  \"Code\": \"Kood\",\n  \"October CMS Marketplace\": \"oktoobril CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Projektil pole pistikprogramme ega teemasid. Mõne lisamiseks külastage linki :.\",\n  \"Buy Now\": \"Osta kohe\",\n  \"Updating package manager\": \"Paketihalduri värskendamine\",\n  \"Updating application files\": \"Laen alla süsteemifaile\",\n  \"Setting build number\": \"Järjenumbri määramine\",\n  \"Finishing update process\": \"Lõpetan uuendamise protsessi\",\n  \"Installing plugin: :name\": \"Plugina allalaadimine: :name\",\n  \"Finishing installation process\": \"Lõpetan paigaldamise protsessi\",\n  \"Removing theme: :name\": \"Teema eemaldamine: :name\",\n  \"Please specify a Theme name to install.\": \"Palun sisesta teema nimi, mida paigaldada.\",\n  \"Installing theme: :name\": \"Teema allalaadimine: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Plugina eemaldamine: :name\",\n  \"Please specify a Plugin name to install.\": \"Palun sisesta plugina nimi, mida paigaldada.\",\n  \"Update process complete\": \"Uuendamise protsess lõpetatud\",\n  \"Package installed successfully\": \"Plugin on edukalt paigaldatud\",\n  \"Check Dependencies\": \"Kontrollige sõltuvusi\",\n  \"Install Dependencies\": \"Installige sõltuvused\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Süsteemi korrektseks töötamiseks on vaja puuduvaid sõltuvusi.\",\n  \"License Key\": \"Litsentsi võti\",\n  \"How to find your License Key\": \"Kuidas leida oma litsentsivõti\",\n  \"The password attribute is required.\": \"Parooli atribuut on nõutav.\",\n  \"The login attribute is required.\": \"Sisselogimise atribuut on nõutav.\",\n  \"Cannot login user since they are not activated.\": \"Ei saa kasutajat sisse logida, kuna ta pole aktiveeritud.\",\n  \"Cannot login user since they are banned.\": \"Ei saa kasutajat sisse logida, kuna ta on keelatud.\",\n  \"Cannot login user since they are suspended.\": \"Kasutajat ei saa sisse logida, kuna ta on peatatud.\",\n  \"A user was not found with the given credentials.\": \"Antud mandaatidega kasutajat ei leitud.\",\n  \"A user was found but the password did not match.\": \"Leiti kasutaja, kuid parool ei ühtinud.\",\n  \"User is not logged in\": \"Kasutaja ei ole sisse logitud\",\n  \"Register Software\": \"Registreeri tarkvara\",\n  \"View the Dashboard\": \"Juurdepääs töölauale\",\n  \"Set the Default Dashboard\": \"Määrake vaikearmatuurlaud\",\n  \"Log File\": \"Logi fail\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"Amazon SES\",\n  \"Postmark\": \"Postitempel\",\n  \"No encryption\": \"Krüpteerimist ei kasutata\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"E-posti seadistus\",\n  \"Manage email configuration.\": \"Halda e-posti seadistusi.\",\n  \"Sender Name\": \"Saatja nimi\",\n  \"Sender Email\": \"Saatja e-post\",\n  \"Mail Method\": \"Saatmise meetod\",\n  \"SMTP Address\": \"SMTP serveri aadress\",\n  \"SMTP Port\": \"SMTP port\",\n  \"SMTP Encryption Protocol\": \"SMTP krüpteerimise protokoll\",\n  \"SMTP Authorization Required\": \"SMTP autenimine\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Märgi see kast kui serveri poolt on nõutud SMTP autoriseerimine.\",\n  \"Username\": \"Kasutjanimi\",\n  \"Password\": \"Parool\",\n  \"Sendmail Path\": \"Sendmaili asukoht\",\n  \"Please specify the path of the sendmail program.\": \"Palun sisesta sendmail programmi asukoht.\",\n  \"Mailgun Domain\": \"Mailgun domeen\",\n  \"Please specify the Mailgun domain name.\": \"Palun sisesta Mailgun domeeni nimi.\",\n  \"Mailgun Secret\": \"Mailgun võti\",\n  \"Enter your Mailgun API key.\": \"Palun sisesta Mailgun API salajane võti.\",\n  \"SES Key\": \"SES avalik võti\",\n  \"Enter your SES API key\": \"Palun sisesta SES avalik võti\",\n  \"SES Secret\": \"SES salajane võti\",\n  \"Enter your SES API secret key\": \"Palun sisesta SES saljane võti\",\n  \"SES Region\": \"SES regioon\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Palun sisesta SES regiooni nimi (nt eu-west-1)\",\n  \"Postmark Token\": \"Postitempli märk\",\n  \"Enter your Postmark API secret key\": \"Sisestage oma Postmark API salavõti\",\n  \"Define administrator roles\": \"Määratlege administraatori rollid\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Piirake juurdepääs sellele saidile ainult administraatorile, kellel on järgmised rollid.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"All Sites\",\n  \"Manage Backend Preferences\": \"Haldusliidese seadete muutmine\",\n  \"Manage Code Editor Preferences\": \"Koodi redaktori seadete muutmine\",\n  \"Customize Backend Styles\": \"Haldusliidese kohandamine\",\n  \"Mail Templates\": \"Kirja mallid\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Halda kirja malle ja kujundusi, mida saadetakse kasutajatele ja administraatoritele.\",\n  \"Mail Branding\": \"Mail Branding\",\n  \"Modify the colors and appearance of mail templates.\": \"Modify the colors and appearance of mail templates.\",\n  \"Event Log\": \"Sündmuste logi\",\n  \"View system log messages with their recorded time and details.\": \"Vaata süsteemi logi kirjeid.\",\n  \"Request Log\": \"Päringute logi\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Vaata ebaõnnestunud või edasisuunatud päringuid, nt Lehte ei leitud (404).\",\n  \"Log Settings\": \"Logi seaded\",\n  \"Specify which areas should use logging.\": \"Määra millistes süsteemi osadeks peaks logi pidama.\",\n  \"Test message sent.\": \"Testkiri saadetud.\",\n  \"New Layout\": \"Uus kujundus\",\n  \"New Partial\": \"New Partial\",\n  \"New Template\": \"Uus mall\",\n  \"Template\": \"Mall\",\n  \"Templates\": \"Mallid\",\n  \"Layouts\": \"Kujundused\",\n  \"Partials\": \"Partials\",\n  \"Partial\": \"Partial\",\n  \"Mail Partials\": \"Mail Partials\",\n  \"Layout\": \"Kujundus\",\n  \"Mail Layouts\": \"Kirja kujundused\",\n  \"Unique code used to refer to this template\": \"Unikaalne kood, mida kasutatakse sellele mallile viitamisel\",\n  \"-- No layout --\": \"-- kujundust pole --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Tekstipõhine sisu\",\n  \"Disable automatic inline CSS\": \"Disable automatic inline CSS\",\n  \"Options\": \"Options\",\n  \"Subject\": \"Subjekt\",\n  \"Email message subject\": \"Kirja subjekt\",\n  \"Description\": \"Kirjeldus\",\n  \"Drivers Not Installed\": \"Draivereid pole paigaldatud\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"See e-posti saatmise meetod nõuab plugina \\\":plugin\\\" paigaldamist.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Sündmuse ID\",\n  \"Level\": \"Tase\",\n  \"Date & Time\": \"Kuupäev & kellaaeg\",\n  \"Message\": \"Sisu\",\n  \"Logging\": \"Logimine\",\n  \"Log Bad Requests\": \"Logi vigaseid päringuid\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Süsteemi juurdepääsu päringud, mis võiksid vajada tähelepanu (nt 404)\",\n  \"Log Theme Changes\": \"Logi teema muudatusi\",\n  \"When a change is made to the theme using the backend.\": \"Teema muudatused, mida tehakse haldusliideses.\",\n  \"Log System Events\": \"Logi süsteemi sündmusi\",\n  \"Store system events in the database in addition to the file-based log.\": \"Salvesta logi ka andmebaasi (lisaks kettal olevale logifailile).\",\n  \"Background\": \"Background\",\n  \"Body background\": \"Body background\",\n  \"Content background\": \"Content background\",\n  \"Inner content background\": \"Inner content background\",\n  \"Buttons\": \"Buttons\",\n  \"Button text color\": \"Button text color\",\n  \"Primary button background\": \"Primary button background\",\n  \"Positive button background\": \"Positive button background\",\n  \"Negative button background\": \"Negative button background\",\n  \"Typography\": \"Typography\",\n  \"Header color\": \"Header color\",\n  \"Headings color\": \"Headings color\",\n  \"Text color\": \"Text color\",\n  \"Link color\": \"Link color\",\n  \"Footer color\": \"Footer color\",\n  \"Borders\": \"Borders\",\n  \"Body border color\": \"Body border color\",\n  \"Subcopy border color\": \"Subcopy border color\",\n  \"Table border color\": \"Table border color\",\n  \"Components\": \"Components\",\n  \"Panel background\": \"Panel background\",\n  \"Promotion background\": \"Promotion background\",\n  \"Promotion border color\": \"Promotion border color\",\n  \"Customize Mail Appearance\": \"Customize Mail Appearance\",\n  \"Version\": \"Versioon\",\n  \"Enabled\": \"Enabled\",\n  \"Latest\": \"Latest\",\n  \"Log ID\": \"Päringu ID\",\n  \"Counter\": \"Korduste arv\",\n  \"Referers\": \"Allikas\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"See logi sisaldab veateateid, mis esinevad süsteemi töös.\",\n  \"Event\": \"Sündmus\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"See logi sisaldab süsteemi juurdepääsuinfot, mis võiks vajada tähelepanu. Näiteks salvestatakse 404 päringud kui kasutaja üritab vaadata lehte, mida ei ole olemas.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Päring\",\n  \"Event log emptied\": \"Sündmuste logi kustutatud\",\n  \"Empty Event Log\": \"Kustuta sündmuste logi\",\n  \"Emptying Event Log...\": \"Kustutan sündmuste logi...\",\n  \"Return to Event Log\": \"Tagasi sündmsute logi nimekirja\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Oled sa kindel?\",\n  \"Reset Plugin Data\": \"Reset Plugin Data\",\n  \"Enable Plugins\": \"Enable Plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Are you sure you want to :action these plugins?\",\n  \"enable\": \"enable\",\n  \"disable\": \"disable\",\n  \"Disable Plugins\": \"Disable Plugins\",\n  \"Select Action...\": \"Select Action...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Plugin on edukalt eemaldatud.\",\n  \"search plugins to install...\": \"otsi pluginaid paigaldamiseks...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"otsi paigaldamiseks teemasid...\",\n  \"Install Theme\": \"Paigalda teema\",\n  \"Theme Name\": \"Teema nimi\",\n  \"Install Plugin\": \"Paigalda plugin\",\n  \"Plugin Name\": \"Plugina nimi\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Anna pluginale nimi selle unikaalse koodi järgi. Nt RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Anna teemale nimi selle unikaalse koodi järgi, nt RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\"\n}\n"
  },
  {
    "path": "modules/system/lang/fa/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'قالب بندی',\n        'quote' => 'نقل قول',\n        'code' => 'کد',\n        'header1' => 'سرخط 1',\n        'header2' => 'سرخط 2',\n        'header3' => 'سرخط 3',\n        'header4' => 'سرخط 4',\n        'header5' => 'سرخط 5',\n        'header6' => 'سرخط 6',\n        'bold' => 'ظخیم',\n        'italic' => 'مورب',\n        'unorderedlist' => 'لیست بدون ترتیب',\n        'orderedlist' => 'لیست با ترتیب',\n        'video' => 'ویدیو',\n        'image' => 'تصویر',\n        'link' => 'لینک',\n        'horizontalrule' => 'درج خط افقی',\n        'fullscreen' => 'تمام صفحه',\n        'preview' => 'پیش نمایش',\n    ],\n    'mediamanager' => [\n        'insert_link' => \"درج آدرس رسانه\",\n        'insert_image' => \"درج تصویر\",\n        'insert_video' => \"درج ویدیو\",\n        'insert_audio' => \"درج صوت\",\n        'invalid_file_empty_insert' => \"لطفا فایلی را جهت درج لینک آن وارد نمایید\",\n        'invalid_file_single_insert' => \"لطفا یک فایل را وارد نمایید\",\n        'invalid_image_empty_insert' => \"لطفا تصویر(ها) را جهت درج انتخاب نمایید\",\n        'invalid_video_empty_insert' => \"لطفا ویدیو را جهت درج انتخاب نمایید.\",\n        'invalid_audio_empty_insert' => \"لطفا فایل صوتی را جهت درج انتخاب نمایید\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'تایید',\n        'cancel_button_text' => 'انصراف',\n        'widget_remove_confirm' => 'این ابزارک حذف شود؟'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'ماه قبل',\n        'nextMonth' => 'ماه بعد',\n        'months' => ['فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'],\n        'weekdays' => ['یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنج شنبه', 'جمعه', 'شنبه'],\n        'weekdaysShort' => ['ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش']\n    ],\n    'colorpicker' => [\n        'choose' => 'تایید',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'همه'\n        ],\n        'dates' => [\n            'all' => 'همه',\n            'filter_button_text' => 'فیلتر',\n            'reset_button_text'  => 'بازنشانی',\n            'date_placeholder' => 'تاریخ',\n            'after_placeholder' => 'بعد از',\n            'before_placeholder' => 'قبل از'\n        ],\n        'numbers' => [\n            'all' => 'همه',\n            'filter_button_text' => 'فیلتر',\n            'reset_button_text'  => 'بازنشانی',\n            'min_placeholder' => 'کم',\n            'max_placeholder' => 'زیاد'\n        ]\n\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'نمایش روند اجرا',\n        'hide_stacktrace' => 'مخفی سازی روند اجرا',\n        'tabs' => [\n            'formatted' => 'قالب بندی شده',\n            'raw' => 'خام',\n        ],\n        'editor' => [\n            'title' => 'ویرایشگر کد',\n            'description' => 'سیستم عامل شما باید برای یکی از این شمای آدرس ها پیکربندی شده باشد.',\n            'openWith' => 'باز کردن توسط',\n            'remember_choice' => 'گزینه انتخاب شده را به خاطر داشته باش',\n            'open' => 'باز کردن',\n            'cancel' => 'انصراف'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/fa/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'مدیریت محتوی اکتبر',\n    'tagline' => 'ورود به پنل مدیریت',\n  ],\n  'locale' => [\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'fi' => 'Suomi',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n  ],\n  'directory' => [\n    'create_fail' => 'مشکلی در ایجاد پوشه ی :name به وجود آمده است',\n  ],\n  'file' => [\n    'create_fail' => 'مشکلی در ایجاد فایل :name به وجود آمده است',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'کلید امنیتی معتبر نمی باشد',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'سیستم',\n    'menu_label' => 'سیستم',\n    'categories' => [\n      'cms' => 'مدیریت محتوی',\n      'misc' => 'متفرقه',\n      'logs' => 'وقایع',\n      'mail' => 'پست الکترونیکی',\n      'shop' => 'فروشگاه',\n      'team' => 'تیم',\n      'users' => 'کاربران',\n      'system' => 'سیستم',\n      'social' => 'شبکه اجتماعی',\n      'backend' => 'بخش مدیریت',\n      'events' => 'رویداد ها',\n      'customers' => 'مشتریان',\n      'my_settings' => 'تنظیمات من',\n      'notifications' => 'اطلاعیه ها',\n    ],\n  ],\n  'theme' => [\n    'label' => 'قالب',\n    'unnamed' => 'قالب بدون نام',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'نصب قالب جدید',\n    'installed' => 'قالب های نصب شده',\n    'no_themes' => 'هیچ قالبی یافت نشد',\n    'recommended' => 'پیشنهادی',\n    'remove_confirm' => 'آیا از حذف این قالب اطمینان دارید؟',\n  ],\n  'plugin' => [\n    'label' => 'افزونه',\n    'unnamed' => 'افزونه بدون نام',\n    'name' => [],\n    'by_author' => 'توسط :name',\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'فعال یا غیر فعال کردن',\n    'enable_or_disable_title' => 'فعال یا غیر فعال کردن افزونه ها',\n    'install' => 'نصب افزونه جدید',\n    'install_products' => 'نصب محصولات',\n    'installed' => 'افزونه های نصب شده',\n    'no_plugins' => 'هیچ افزونه ای نصب نشده است.',\n    'recommended' => 'پیشنهادی',\n    'remove' => 'حذف',\n    'refresh' => 'بارگذاری مجدد',\n    'disabled_label' => 'غیر فعال',\n    'disabled_help' => 'افزونه های غیر فعال توسط برنامه نادیده گرفته می شوند.',\n    'frozen_label' => 'قفل کردن به روز رسانی',\n    'frozen_help' => 'افزونه های قفل شده بهنگام به روز رسانی نادیده گرفته خواهند شد.',\n    'selected_amount' => 'افزونه های انتخاب شده: :amount',\n    'remove_confirm' => 'آیا از حذف این افزونه اطمینان دارید؟',\n    'remove_success' => 'افزونه ها با موفقیت از سیستم حذف شدند.',\n    'refresh_success' => 'افزونه ها با موفقیت بارگذاری مجدد شدند.',\n    'disable_confirm' => 'آیا اطمینان دارید؟',\n    'disable_success' => 'افزونه ها با موفقیت غیر فعال شدند.',\n    'enable_success' => 'افرونه ها با موفقیت فعال شدند.',\n  ],\n  'project' => [\n    'attach' => 'افرودن به پروژه',\n    'detach' => 'حذف از پروژه',\n    'none' => 'هیچ',\n    'id' => [\n      'missing' => 'لطفا مشخصه ی پروژه ی خود را وارد نمایید.',\n    ],\n    'detach_confirm' => 'آیا از حذف این پروژه اطمینان دارید؟',\n    'unbind_success' => 'پروژه با موفقیت پاک شد.',\n  ],\n  'settings' => [\n    'search' => 'جستجو',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'اتصال امن SSL مورد نیاز است',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'نام یکتای مشخص کننده ی این قالب',\n    'test_send' => 'ارسال پیغام آزمایشی',\n    'test_confirm' => 'پیغام آزمایشی به آدرس :email ارسال خواهد شد آیا میخواهید ادامه دهید؟',\n    'creating' => 'درحال ایجاد قالب...',\n    'creating_layout' => 'در حال ایجاد طرح بندی...',\n    'saving' => 'ذخیره سازی قالب...',\n    'saving_layout' => 'درحال ذخیره سازی طرح بندی...',\n    'delete_confirm' => 'آیا از حذف این قالب اطمینان دارید؟',\n    'delete_layout_confirm' => 'آیا از حذف این طرح بندی اطمینان دارید؟',\n    'deleting' => 'درحال حذف قالب...',\n    'deleting_layout' => 'در حال حذف طرح بندی...',\n    'sending' => 'ارسال نامه الکترونیکی آزمایشی...',\n    'return' => 'بازگشت به لیست قالب ها',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'عنوان',\n      'paragraph' => 'در این پاراگراف متن لورم ایپسوم و لینک قرار میگیرد.',\n      'table' => [\n        'item' => 'مورد',\n        'description' => 'توضیحات',\n        'price' => 'قیمت',\n        'centered' => 'وسط چین',\n        'right_aligned' => 'راست چین',\n      ],\n      'buttons' => [\n        'primary' => 'دکمه اصلی',\n        'positive' => 'دکمه مثبت',\n        'negative' => 'دکمه منفی',\n      ],\n      'panel' => 'این پنل چگونه است؟',\n      'more' => 'متن اضافی',\n      'promotion' => 'کد کپن تخفیف: OCTOBER',\n      'subcopy' => 'این یک کپی از پست الکترونیکی می باشد.',\n      'thanks' => 'با تشکر',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'تولید کننده',\n    'plugin_not_found' => 'افزونه یافت شد',\n    'core_build' => 'نسخه ی :build',\n    'core_build_help' => 'به روز رسانی جدید موجود است',\n    'themes' => 'قالب ها',\n    'plugin_version_none' => 'افزونه ی جدید',\n    'plugin_current_version' => 'نسخه کنونی',\n    'theme_new_install' => 'قالب جدید نصب شد.',\n    'theme_extracting' => 'گشودن قالب: :name',\n    'update_label' => 'بروز رسانی نرم افزار',\n    'update_loading' => 'بارگزاری بروز رسانی های موجود...',\n    'force_label' => 'اصرار در بروز رسانی',\n    'found' => [\n      'label' => 'بروز رسانی جدید وجود دارد',\n      'help' => 'بر روی بروز رسانی نرم افزار جهت شروع عملیات بروز رسانی کلیک کنید.',\n    ],\n    'none' => [\n      'label' => 'شما از آخرین نسخه استفاده می کنید',\n      'help' => 'هیچ به روز رسانی یافت نشد.',\n    ],\n    'important_action' => [\n      'empty' => 'اقدام مورد نظر را انتخاب کنید',\n      'confirm' => 'تایید به روز رسانی',\n      'skip' => 'این افزونه را به روز نکن (فقط یک بار)',\n      'ignore' => 'این افزونه را به روز نکن (همیشه)',\n    ],\n    'important_action_required' => 'انتخاب عملیات مورد نیاز است',\n    'important_view_guide' => 'نمایش راهنمای به روز رسانی',\n    'important_view_release_notes' => 'مشاهده یاداشت های انتشار',\n    'important_alert_text' => 'برخی از به روز رسانی ها به تایید شما نیاز دارند',\n    'details_title' => 'مشخصات افزونه',\n    'details_view_homepage' => 'نمایش صفحه اصلی',\n    'details_changelog' => 'تغییرات',\n    'details_changelog_missing' => 'لیست تغییرات موجود نمی باشد.',\n    'details_current_version' => 'نسخه کنونی',\n    'details_author' => 'نویسنده',\n  ],\n  'server' => [\n    'connect_error' => 'خطا در برقراری ارتباط با سرور.',\n    'response_not_found' => 'سرور به روز رسانی یافت نشد.',\n    'response_invalid' => 'پاسخ نا معتبر از سوی سرور.',\n    'response_empty' => 'پاسخ خالی از سوی سرور.',\n    'file_error' => 'خطا در ارسال یا دریافت اطلاعات به سرور.',\n    'file_corrupt' => 'فایل دریافت شده از سرور ناقص است.',\n  ],\n  'behavior' => [\n    'missing_property' => 'کلاس :class باید شامل خصوصیت $:property که در :behavior استفاده شده است باشد.',\n  ],\n  'config' => [\n    'not_found' => 'فایل پیکربندی :file تعریف شده در :location یافت نشد.',\n    'required' => 'پیکربندی استفاده شده در :location باید مقدار \\':property\\' را ارائه نماید.',\n  ],\n  'zip' => [\n    'extract_failed' => 'عدم توانایی در گشودن فایل هسته \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'پاک کردن گزارش درخواستها',\n    'empty_loading' => 'در حال پاکسازی...',\n    'empty_success' => 'گزارش درخواستها با موفقیت پاکسازی شد.',\n    'return_link' => 'بازگشت به گزارش درخواستها',\n    'id' => 'مشخصه',\n  ],\n  'permissions' => [\n    'name' => 'سیستم',\n    'manage_system_settings' => 'مدیریت تنظیمات سیستم',\n    'manage_software_updates' => 'مدیریت به روز رسانی نرم افزار',\n    'access_logs' => 'نمایش وقایع سیستم',\n    'manage_mail_templates' => 'مدیریت قالب پست الکترونیکی',\n    'manage_mail_settings' => 'مدیریت تنظیمات پست الکترونیکی',\n    'manage_other_administrators' => 'مدیریت سایر مدیران',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'آدرس فایل \\':path\\' معتبر نیست.',\n    'folder_size_items' => 'مورد(ها)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/fa/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    \"accepted\"         => \":attribute باید مورد قبولتان باشد.\",\n    \"active_url\"       => \":attribute آدرس سایت معتبری نیست.\",\n    \"after\"            => \":attribute باید تاریخی بعد از :date باشد.\",\n    'after_or_equal'       => ':attribute باید تاریخ :date و یا بعد از آن باشد.',\n    \"alpha\"            => \":attribute فقط میتواند حاوی حروف انگلیسی باشد.\",\n    \"alpha_dash\"       => \":attribute فقط میتواند شامل حروف انگلیسی، اعداد و خط تیره باشد.\",\n    \"alpha_num\"        => \":attribute فقط میتواند شامل حروف انگلیسی و عدد باشد.\",\n    \"array\"            => \":attribute باید یک آرایه باشد.\",\n    \"before\"           => \":attribute باید تاریخی قبل از :date باشد.\",\n    'before_or_equal'      => ':attribute باید تاریخ :date و یا قبل از آن باشد.',\n    \"between\"          => [\n        \"numeric\" => \":attribute میتواند مابین :min و :max باشد.\",\n        \"file\"    => \"اندازه ی :attribute بای مابین :min و :max کیلوبایت باشد.\",\n        \"string\"  => \":attribute باید مابین :min و :max کاراکتر باشد.\",\n        \"array\"   => \":attribute باید شامل :min تا :max مورد باشد.\",\n    ],\n    'boolean'              => ':attribute باید صحیح یا غلط باشد.',\n    \"confirmed\"        => \"مقداری :attribute با تاییدیه اش یکسان نیست.\",\n    \"date\"             => \":attribute تاریخ معتبری نیست.\",\n    \"date_format\"      => \"مقدار :attribute در قالب :format نمی باشد.\",\n    \"different\"        => \"مقدار :attribute و :other نباید یکسان باشد.\",\n    \"digits\"           => \"مقدار :attribute باید یک عدد :digits رقمی باشد.\",\n    \"digits_between\"   => \"مقدار :attribute باید ما بین :min و :max باشد.\",\n    'dimensions'           => ':attribute اندازه صحیح تصویر نمی باشد.',\n    'distinct'             => ':attribute دارای داده تکراری می باشد.',\n    \"email\"            => \"قالب :attribute نامعتبر است.\",\n    \"exists\"           => \":attribute انتخاب شده نامعتبر است.\",\n    'file'                 => ':attribute باید یک فایل باشد.',\n    'filled'               => 'مقداری برای :attribute وارد نشده است.',\n    'image'                => ':attribute باید یک تصویر باشد.',\n    'in'                   => ':attribute انتخاب شده صحیح نمی باشد.',\n    'in_array'             => 'مقدار :attribute در :other موجود نیست.',\n    'integer'              => 'مقدار :attribute باید یک عدد صحیح باشد.',\n    'ip'                   => ':attribute آدرس IP صحیحی نیست.',\n    'ipv4'                 => ':attribute آدرس IPv4 صحیحی نمی باشد.',\n    'ipv6'                 => ':attribute آدرس IPv6 صحیحی نمی باشد.',\n    'json'                 => ':attribute باید شامل متن JSON معتبر باشد.',\n    \"max\"              => [\n        \"numeric\" => \":attribute نباید بیشتر از :max باشد.\",\n        \"file\"    => \":attribute نباید بیش از :max کیلوبایت باشد.\",\n        \"string\"  => \":attribute نباید بیش از :max کاراکتر باشد.\",\n        \"array\"   => \":attribute نباید بیش تر از :max مورد داشته باشد.\",\n    ],\n    \"mimes\"            => \":attribute باید فایلی از نوع :values باشد.\",\n    \"extensions\"       => \"پسوند :attribute باید :values باشد.\",\n    \"min\"              => [\n        \"numeric\" => \"مقدار :attribute باید حد اقل :min باشد.\",\n        \"file\"    => \":attribute باید حداقل :min کیلوبایت باشد.\",\n        \"string\"  => \":attribute باید شامل حداقل :min کاراکتر باشد.\",\n        \"array\"   => \":attribute باید شامل حد اقل :min مورد باشد.\",\n    ],\n    \"not_in\"           => \":attribute انتخاب شده نا معتبر است.\",\n    \"numeric\"          =>  \"مقدار :attribute باید یک مقدار عددی باشد.\",\n    'present'              => 'مقداری :attribute باید درصد باشد.',\n    \"regex\"            => \"قالب :attribute نا معتبر است.\",\n    \"required\"         => \"وارد کردن :attribute الزامیست.\",\n    \"required_if\"      => \"اگر مقدار :other برابر با :value باشد وارد کردن :attribute الزامیست.\",\n    'required_unless'      => 'وارد کردن گزینه :attribute تا زمانی که مقدار :other برابر با :values باشد اجباریست.',\n    \"required_with\"    => \"فیل :attribute در صورتی که :values موجود باشد مورد نیاز است.\",\n    'required_with_all'    => 'وارد کردن گزینه :attribute رمانی که :values باشد اجباریست.',\n    \"required_without\" => \"فیلد :attribute در صورتی که مقدار :values وجود نداشته باشد مورد نیاز است.\",\n    'required_without_all' => 'وارد کردن مقدار :attribute تا زمانی که هیچ یک از :values وارد نشده باشد اجباریست.',\n    \"same\"             => \":attribute و :other باید مقدار یکسانی داشته باشند.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute باید به اندازه ی :size باشد.\",\n        \"file\"    => \":attribute باید :size کیلوبایت باشد.\",\n        \"string\"  => \":attribute باید :size کاراکتر باشد.\",\n        \"array\"   => \":attribute باید شامل :size مورد باشد.\",\n    ],\n    'string'               => ':attribute یک رشته معتبر نمی باشد.',\n    'timezone'             => ':attribute وارد شده یک منطقه معتبر نمی باشد.',\n    \"unique\"           => \":attribute استفاده شده تکراری می باشد.\",\n    'uploaded'             => 'ارسال :attribute با خطا روبرو شده است..',\n    \"url\"              => \"قالب :attribute نا معتبر است.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'پیغام مورد دلخواه',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/fa.json",
    "content": "{\n  \"Check For Updates\": \"بررسی بروز رسانی\",\n  \"Install Packages\": \"بسته ها را نصب کنید\",\n  \"Manage Themes\": \"مدیریت تم ها\",\n  \"Manage Plugins\": \"مدیریت افزونه ها\",\n  \"Project\": \"پروژه\",\n  \"Owner\": \"صاحب امتیاز\",\n  \"Plugins\": \"افرونه ها\",\n  \"Recommended\": \"توصیه شده\",\n  \"Disabled\": \"غیر فعال شده\",\n  \"Current Build\": \"نسخه ی کنونی\",\n  \"Updates Available\": \"به روز رسانی های موجود\",\n  \"Up to Date\": \"به روز\",\n  \"Latest Build\": \"آخرین ساخت\",\n  \"View Changelog\": \"مشاهده تغییرات\",\n  \"Software Updates\": \"بروز رسانی ها\",\n  \"Update the system modules and plugins.\": \"به روز رسانی ی سیستم، مدیریت افزونه ها و قالب های نصب شده.\",\n  \"General\": \"عمومی\",\n  \"Mail\": \"ایمیل\",\n  \"Utilities\": \"خدمات رفاهی\",\n  \"Settings\": \"تنظیمات\",\n  \"Show All Settings\": \"نمایش همه تنظیمات\",\n  \"Unable to find the specified settings.\": \"تنظیمات مورد نظر یافت نشد.\",\n  \"The settings page is missing a Model definition.\": \"صفحه تنظیمات شامل یک مدل تعریف نشده می باشد.\",\n  \":name settings updated\": \"تنظیمات برای :name با موفقیت تغییر یافت.\",\n  \"Return to System Settings\": \"بازگشت به تنظیمات سیستم\",\n  \"Search Settings...\": \"یافتن یک تنظیمات...\",\n  \"Disable mail branding CSS\": \"CSS نام تجاری ایمیل را غیرفعال کنید\",\n  \"Manage Sites\": \"مدیریت سایت ها\",\n  \"Manage the websites available for this application.\": \"وب سایت های موجود برای این برنامه را مدیریت کنید.\",\n  \"Marketplace\": \"بازار\",\n  \"There is no documentation provided.\": \"مستنداتی در دسترس نمی باشد\",\n  \"Documentation\": \"مستندات\",\n  \"Upgrade Guide\": \"راهنمای به روز رسانی\",\n  \"License\": \"گواهی نامه\",\n  \"Attach to Project\": \"ضمیمه کردن به نرم افزار\",\n  \"Manage Updates\": \"مدیریت بروز رسانی\",\n  \"Software Update\": \"بروز رسانی نرم افزار\",\n  \"Return to Software Updates\": \"بازگشت به صفحه به روز رسانی ها\",\n  \"Try Again\": \"تلاش مجدد\",\n  \"Unpacking application files\": \"گشودن فایل های نرم افزار\",\n  \"Update Failed\": \"بروز رسانی موفق نبود\",\n  \"Unpacking plugin: :name\": \"گشودن افزونه: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"سایت اصلی به طور پیش فرض استفاده می شود و نمی توان آن را حذف کرد.\",\n  \"Disabled sites are not shown on the frontend.\": \"سایت های غیرفعال در قسمت جلویی نمایش داده نمی شوند.\",\n  \"Enabled in the Admin Panel\": \"در پنل مدیریت فعال شده است\",\n  \"Configuration\": \"پیکربندی\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"اگر می خواهید سایت در پنل مدیریت فعال شود از این استفاده کنید.\",\n  \"Install\": \"نصب\",\n  \"Sync Project\": \"پروژه همگام سازی\",\n  \"Name\": \"نام\",\n  \"Unique Code\": \"کد منحصر به فرد\",\n  \"Theme\": \"موضوع\",\n  \"Sites\": \"سایت های\",\n  \"Create Site\": \"ایجاد سایت\",\n  \"Base URL\": \"URL پایه\",\n  \"Status\": \"وضعیت\",\n  \"Current default value: :value\": \"مقدار پیش فرض فعلی: :value\",\n  \"Locale\": \"محلی\",\n  \"Timezone\": \"منطقه زمانی\",\n  \"Custom application URL\": \"URL برنامه سفارشی\",\n  \"Override the application URL when this site is active.\": \"وقتی این سایت فعال است، URL برنامه را لغو کنید.\",\n  \"Use a CMS route prefix\": \"از پیشوند مسیر CMS استفاده کنید\",\n  \"A prefix can identify this site when using a shared hostname.\": \"یک پیشوند می تواند این سایت را هنگام استفاده از نام میزبان مشترک شناسایی کند.\",\n  \"Define matching hostnames\": \"نام هاست منطبق را تعریف کنید\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"نام دامنه و الگوهایی را که باید برای سرویس دهی به این سایت استفاده شوند، مشخص کنید.\",\n  \"Display a style for this site\": \"نمایش رنگ برای این سایت\",\n  \"To help identify this site, display a color in the admin panel.\": \"برای کمک به شناسایی این سایت، یک رنگ را در پنل مدیریت نمایش دهید.\",\n  \"Save\": \"صرفه جویی\",\n  \"Save and Close\": \"ذخیره کن و ببند\",\n  \"Use Default\": \"استفاده به طور پیش فرض\",\n  \"Use Custom\": \"از سفارشی استفاده کنید\",\n  \"Specify a custom locale code.\": \"یک کد محلی سفارشی را مشخص کنید.\",\n  \"Failed\": \"ناموفق\",\n  \"or\": \"یا\",\n  \"Code\": \"کد یکتا\",\n  \"October CMS Marketplace\": \"بازار CMS اکتبر\",\n  \"Visit the :link to add some.\": \"پروژه هیچ پلاگین یا تمی ندارد. برای افزودن مقداری از لینک: بازدید کنید.\",\n  \"Buy Now\": \"هم اکنون خریداری کنید\",\n  \"Updating package manager\": \"به روز رسانی مدیر بسته\",\n  \"Updating application files\": \"دریافت فایل های نرم افزار\",\n  \"Setting build number\": \"شماره ساخت تنظیمات\",\n  \"Finishing update process\": \"اعمال بروز رسانی\",\n  \"Installing plugin: :name\": \"دریافت افزونه: :name\",\n  \"Finishing installation process\": \"مرحله ی پایانی عملیات نصب\",\n  \"Removing theme: :name\": \"حذف موضوع: :name\",\n  \"Please specify a Theme name to install.\": \"لطفا نام قالب را جهت نصب وارد نمایید.\",\n  \"Installing theme: :name\": \"دریافت قالب: :name\",\n  \"Removing plugin: :name\": \"حذف افزونه: :name\",\n  \"Please specify a Plugin name to install.\": \"لطفا نام افزونه را جهت نصب وارد نمایید.\",\n  \"Update process complete\": \"بروز رسانی با موفقیت انجام شد.\",\n  \"Package installed successfully\": \"افزونه با موفقیت نصب شد.\",\n  \"Check Dependencies\": \"وابستگی ها را بررسی کنید\",\n  \"Install Dependencies\": \"Dependencies را نصب کنید\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"وابستگی های گم شده ای برای اجرای صحیح سیستم مورد نیاز است.\",\n  \"License Key\": \"کلید مجوز\",\n  \"How to find your License Key\": \"چگونه کلید مجوز خود را پیدا کنید\",\n  \"The password attribute is required.\": \"ویژگی رمز عبور لازم است.\",\n  \"The login attribute is required.\": \"ویژگی ورود مورد نیاز است.\",\n  \"Cannot login user since they are not activated.\": \"کاربر نمی تواند وارد شود زیرا فعال نیست.\",\n  \"Cannot login user since they are banned.\": \"کاربر نمی تواند وارد شود زیرا ممنوع است.\",\n  \"Cannot login user since they are suspended.\": \"کاربر نمی تواند وارد شود زیرا به حالت تعلیق درآمده است.\",\n  \"A user was not found with the given credentials.\": \"کاربری با اعتبار داده شده پیدا نشد.\",\n  \"A user was found but the password did not match.\": \"کاربری پیدا شد اما رمز عبور مطابقت نداشت.\",\n  \"User is not logged in\": \"کاربر وارد نشده است\",\n  \"Register Software\": \"ثبت نرم افزار\",\n  \"View the Dashboard\": \"نمایش صفحه مدیریت\",\n  \"Set the Default Dashboard\": \"داشبورد پیش فرض را تنظیم کنید\",\n  \"Log File\": \"فایل گزارش\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"مهر پست\",\n  \"No encryption\": \"بدون رمزگذاری\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"تنظیمات پست الکترونیکی\",\n  \"Manage email configuration.\": \"مدیریت تنظیمات پست الکترونیکی.\",\n  \"Sender Name\": \"نام ارسال کننده\",\n  \"Sender Email\": \"پست الکترونیکی ارسال کننده\",\n  \"Mail Method\": \"روش ارسال\",\n  \"SMTP Address\": \"آدرس SMTP\",\n  \"SMTP Port\": \"درگاه SMTP\",\n  \"SMTP Encryption Protocol\": \"پروتکل رمزگذاری SMTP\",\n  \"SMTP Authorization Required\": \"مجوز اتصال به SMTP مورد نیاز است\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"این گزینه را جهت اتصال به سرور SMTP در صورت نیاز فعال نمایید.\",\n  \"Username\": \"نام کاربری\",\n  \"Password\": \"کلمه عبور\",\n  \"Sendmail Path\": \"آدرس برنامه Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"لطفا محل ذخیره نرم افزار sendmail را مشخص نمایید.\",\n  \"Mailgun Domain\": \"دامنه ی Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"لطفا نام دامنه ی Mailgun را وارد نمایید.\",\n  \"Mailgun Secret\": \"امنیت Mailgun\",\n  \"Enter your Mailgun API key.\": \"کلید API ی مربوط به Mailgun را وارد نمایید.\",\n  \"SES Key\": \"کلید SES\",\n  \"Enter your SES API key\": \"کلید Api SES را وارد نمایید\",\n  \"SES Secret\": \"کلمه عبور SES\",\n  \"Enter your SES API secret key\": \"کلمه عبور API SES را وارد نمایید\",\n  \"SES Region\": \"منطفه SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"منطقه خود را برای SES وارد نمایید (برای مثال: us-east-1)\",\n  \"Postmark Token\": \"علامت پستی\",\n  \"Enter your Postmark API secret key\": \"کلید مخفی Postmark API خود را وارد کنید\",\n  \"Define administrator roles\": \"نقش های مدیر را تعریف کنید\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"دسترسی به این سایت را فقط به مدیر دارای نقش های زیر محدود کنید.\",\n  \"Manage Backend Preferences\": \"مدیریت تنظیمات بخش مدیریت\",\n  \"Manage Code Editor Preferences\": \"مدیریت تنظیمات ویرایشگر کد\",\n  \"Customize Backend Styles\": \"شخصی سازی قسمت مدیریت\",\n  \"Mail Templates\": \"قالب های نامه الکترونیکی\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"مدیریت و تغییر قالب های نامه الکترونیکی ای که برای کاربران و مدیران ارسال می شود، مدیریت طرح بندی نامه الکترونیکی.\",\n  \"Mail Branding\": \"پست الکترونیکی\",\n  \"Modify the colors and appearance of mail templates.\": \"تغییر رنگ بندی و تنظیمات قالب پست الکترونیکی.\",\n  \"Event Log\": \"گزارش رویدادها\",\n  \"View system log messages with their recorded time and details.\": \"نمایش گزارش های سیستمی همراه با زمان و توضیح آنها.\",\n  \"Request Log\": \"گزارش درخواست ها\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"نمایش درخواستهای مشکل ساز و انتقال داده شده مانند خطای : صفحه مورد نظر یافت نشد 404.\",\n  \"Log Settings\": \"تنظیمات وقایع\",\n  \"Specify which areas should use logging.\": \"بخش هایی را که میخواهید وقایعش ثبت گردد مشخص کنید.\",\n  \"Test message sent.\": \"پیغام آزمایشی ارسال شد.\",\n  \"New Layout\": \"طرح بندی ی جدید\",\n  \"New Partial\": \"بخش جدید\",\n  \"New Template\": \"قالب جدید\",\n  \"Template\": \"قالب\",\n  \"Templates\": \"قالب ها\",\n  \"Layouts\": \"طرح بندی ها\",\n  \"Partials\": \"بخش ها\",\n  \"Partial\": \"بخش\",\n  \"Mail Partials\": \"بخش های پست الکترونیکی\",\n  \"Layout\": \"طرح بندی\",\n  \"Mail Layouts\": \"طرح بندی نامه الکترونیکی\",\n  \"Unique code used to refer to this template\": \"کد یکتای مشخص کننده ی این قالب\",\n  \"-- No layout --\": \"-- بدون طرح بندی --\",\n  \"HTML\": \"اچ تی ام ال\",\n  \"CSS\": \"شیوه نامه\",\n  \"Plaintext\": \"متن معمولی\",\n  \"Subject\": \"موضوع\",\n  \"Email message subject\": \"موجوع نامه الکترونیکی\",\n  \"Description\": \"توضیحات\",\n  \"Drivers Not Installed\": \"درایور ها نصب نشده اند\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"این روش برای ارسال پست الکترونیکی به افزونه \\\":plugin\\\" نیاز دارد. جهت استفاده از این روش لطفا افزونه مورد نیاز را نصب نمایید.\",\n  \"ID\": \"مشخصه\",\n  \"Event ID\": \"مشخصه ی رویداد\",\n  \"Level\": \"مرحله\",\n  \"Date & Time\": \"ساعت و تاریخ\",\n  \"Message\": \"پیغام\",\n  \"Logging\": \"ثبت کردن وقایع\",\n  \"Log Bad Requests\": \"ثبت درخواست های نامشخص\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"درخواست های مرورگر که باعث خطاهایی مانند خطای 404 می شود.\",\n  \"Log Theme Changes\": \"ثبت وقایع قالب ها\",\n  \"When a change is made to the theme using the backend.\": \"ثبت تغیراتی که در بخش مدیریت برای قالب ها اعمال می گردد.\",\n  \"Log System Events\": \"ثبت رویداد های سیستمی\",\n  \"Store system events in the database in addition to the file-based log.\": \"ثبت وقایع و رویداد های سیستمی در پایگاه داده به جای فایل\",\n  \"Background\": \"پس زمینه\",\n  \"Body background\": \"پس زمینه اصلی\",\n  \"Content background\": \"پس زمینه متن\",\n  \"Inner content background\": \"پس زمینه متن داخلی\",\n  \"Buttons\": \"دکمه ها\",\n  \"Button text color\": \"رنگ متن دکمه\",\n  \"Primary button background\": \"پس رمینه دکمه اصلی\",\n  \"Positive button background\": \"پس زمینه دکمه مثبت\",\n  \"Negative button background\": \"پس رمینه دکمه منفی\",\n  \"Typography\": \"تایپوگرافی\",\n  \"Header color\": \"رنگ تیتر\",\n  \"Headings color\": \"رنگ تیتر ها\",\n  \"Text color\": \"رنگ متن\",\n  \"Link color\": \"رنگ لینک\",\n  \"Footer color\": \"رنگ پاورقی\",\n  \"Borders\": \"حاشیه ها\",\n  \"Body border color\": \"رنگ حاشیه اصلی\",\n  \"Subcopy border color\": \"رنگ حاشیه کپی\",\n  \"Table border color\": \"رنگ حاشیه جدول\",\n  \"Components\": \"اجزاء\",\n  \"Panel background\": \"پس رمینه پنل\",\n  \"Promotion background\": \"پس زمینه شاخص\",\n  \"Promotion border color\": \"رنگ حاشیه شاخص\",\n  \"Customize Mail Appearance\": \"شخصی سازی ظاهر پست الکترونیکی\",\n  \"Version\": \"نسخه\",\n  \"Log ID\": \"مشخصه ی گزارش\",\n  \"Counter\": \"شمارشگر\",\n  \"Referers\": \"منتقل شده از\",\n  \"URL\": \"آدرس\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"این گزارش نمایش دهنده خطاهای عملکردی در سیستم می باشد، مانند خطاهای در حال اجرا و اطلاعات خطایابی.\",\n  \"Event\": \"اتفاق\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"این گزارش درخواستهایی از طرف مرورگر را که نیاز به بررسی دارند را نمایش می دهد. به عنوان مثال اگر بازدید کنند صفحه ای را که موجود نیست درخواست کند، یک گزینه با کد وضعیت 404 ایجاد می شود.\",\n  \"Request\": \"درخواست\",\n  \"Event log emptied\": \"گزارشها با موفقیت پاک شدند.\",\n  \"Empty Event Log\": \"پاک سازی گزارش رویداد ها\",\n  \"Emptying Event Log...\": \"درحال پاکسازی گزارشها...\",\n  \"Return to Event Log\": \"بازگشت به گزارش رویداد ها\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"آیا اطمینان دارید؟\",\n  \"Plugin has been removed from the file system.\": \"افرونه ها با موفقیت پاک شدند.\",\n  \"search plugins to install...\": \"جستجوی افزونه جهت نصب\",\n  \"search themes to install...\": \"جستجوی قالب برای نصب\",\n  \"Install Theme\": \"نصب قالب\",\n  \"Theme Name\": \"نام قالب\",\n  \"Install Plugin\": \"نصب افزونه\",\n  \"Plugin Name\": \"نام افزونه\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"یک اسم یکتا برای نام افزونه برای مثال: RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"یک اسم یکتا برای نام قالب برای مثال Rainlab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"فایل ترکیب کننده ':name' یافت نشد.\"\n}"
  },
  {
    "path": "modules/system/lang/fi/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n    'markdowneditor' => [\n        'formatting' => 'Muotoilu',\n        'quote' => 'Lainaus',\n        'code' => 'Koodi',\n        'header1' => 'Otsikko 1',\n        'header2' => 'Otsikko 2',\n        'header3' => 'Otsikko 3',\n        'header4' => 'Otsikko 4',\n        'header5' => 'Otsikko 5',\n        'header6' => 'Otsikko 6',\n        'bold' => 'Lihavointi',\n        'italic' => 'Kursivointi',\n        'unorderedlist' => 'Järjestämätön lista',\n        'orderedlist' => 'Järjestetty lista',\n        'video' => 'Video',\n        'image' => 'Kuva',\n        'link' => 'Linkki',\n        'horizontalrule' => 'Lisää horisontaalinen jakaja',\n        'fullscreen' => 'Kokonäyttö',\n        'preview' => 'Esikatsele',\n        'strikethrough' => 'Yliviivattu',\n        'cleanblock' => 'Puhdas blokki',\n        'table' => 'Taulukko',\n        'sidebyside' => 'Vierekkäin'\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Lisää linkki Mediaan',\n        'insert_image' => 'Lisää kuva',\n        'insert_video' => 'Lisää video',\n        'insert_audio' => 'Lisää äänitiedosto',\n        'invalid_file_empty_insert' => 'Valitse liitettävä tiedosto.',\n        'invalid_file_single_insert' => 'Valitse vain yksi tiedosto.',\n        'invalid_image_empty_insert' => 'Valitse linkitettävä(t) kuva(t).',\n        'invalid_video_empty_insert' => 'Valitse linkitettävä videotiedosto.',\n        'invalid_audio_empty_insert' => 'Valitse linkitettävä äänitiedosto.',\n    ],\n    'alert' => [\n        'error' => 'Virhe',\n        'confirm' => 'Vahvista',\n        'dismiss' => 'Poistu',\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Peruuta',\n        'widget_remove_confirm' => 'Poista tämä vimpain?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Edellinen kuukausi',\n        'nextMonth' => 'Seuraava kuukausi',\n        'months' => ['tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu', 'kesäkuu', 'heinäkuu', 'elokuu', 'syyskuu', 'lokakuu', 'marraskuu', 'joulukuu'],\n        'weekdays' => ['sunnutai', 'maanantai', 'tiistai', 'keskiviikko', 'torstai', 'perjantai', 'lauantai'],\n        'weekdaysShort' => ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la']\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'kaikki'\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Ota käyttöön',\n            'clear_button_text'  => 'Tyhjennä'\n        ],\n        'dates' => [\n            'all' => 'kaikki',\n            'filter_button_text' => 'Suodata',\n            'reset_button_text'  => 'Palauta',\n            'date_placeholder' => 'Päivä',\n            'after_placeholder' => 'Jälkeen',\n            'before_placeholder' => 'Ennen'\n        ],\n        'numbers' => [\n            'all' => 'kaikki',\n            'filter_button_text' => 'Suodata',\n            'reset_button_text'  => 'Palauta',\n            'min_placeholder' => 'Väh.',\n            'max_placeholder' => 'Enint.'\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Näytä stacktrace',\n        'hide_stacktrace' => 'Piilota stacktrace',\n        'tabs' => [\n            'formatted' => 'Muotoiltu',\n            'raw' => 'Raaka',\n        ],\n        'editor' => [\n            'title' => 'Lähdekoodieditori',\n            'description' => 'Käyttöjärjestelmäsi pitäisi olla määritetty kuuntelemaan jotain näistä URL osoitteista.',\n            'openWith' => 'Avaa sovelluksessa',\n            'remember_choice' => 'Muista valittu vaihtoehto istunnon ajan',\n            'open' => 'Avaa',\n            'cancel' => 'Peruuta'\n        ],\n    ],\n    'upload' => [\n        'max_files' => 'Et voi siirtää enempää tiedostoja.',\n        'invalid_file_type' => 'Tämän tyypin tiedostot eivät ole sallittuja.',\n        'file_too_big' => 'Tiedosto on liian iso ({{filesize}}MB). Suurin sallittu tiedostokoko on: {{maxFilesize}}MB.',\n        'response_error' => 'Palvelin vastasi koodilla {{statusCode}}.',\n        'remove_file' => 'Poista tiedosto',\n    ],\n    'inspector' => [\n      'add' => 'Lisää',\n      'remove' => 'Poista',\n      'key' => 'Avain',\n      'value' => 'Arvo',\n      'ok' => 'OK',\n      'cancel' => 'Peruuta',\n      'items' => 'Kohteet',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/fi/lang.php",
    "content": "<?php return [\n  'installer' => [\n    'app_config_section' => 'Sovelluksen konfigurointi',\n    'license_section' => 'Lisenssiavain',\n    'dependencies_section' => 'Asennetaan riippuvuudet',\n    'demo_section' => 'Demosisältö',\n    'locale_select_label' => 'Valitse kieli',\n    'locale_select_error' => 'Kielikoodi :code on virheellinen, yritä uudelleen',\n    'app_url_label' => 'Sovelluksen URL-osoite',\n    'backend_uri_label' => 'Ylläpidon URI',\n    'backend_uri_comment' => 'Tee sovelluksesta turvallisempi ja käytä omaa osoitetta ylläpitopaneliin.',\n    'license_key_label' => 'Lisenssiavain',\n    'license_key_comment' => 'Anna voimassa oleva lisenssiavain jatkaaksesi.',\n    'license_thanks_comment' => 'Kiitos, että olet valinnut OctoberCMS:n!',\n    'license_expired_comment' => 'Lisenssi ei ole voimassa. Ole hyvä ja hanki lisenssi osoitteesta octobercms.com.',\n    'too_many_failures_label' => 'Liian monta väärää yritystä',\n    'non_interactive_label' => 'Ei-interaktiivinen moodi valittu',\n    'non_interactive_comment' => 'Jos saat tämän virheen heti, käytä näitä ei-interaktiivisia käskyjä.',\n    'install_failed_label' => 'Installation Failed',\n    'install_failed_comment' => 'Please try running these commands manually.',\n    'database_engine_label' => 'Database Engine',\n    'database_host_label' => 'Database Host',\n    'database_host_comment' => 'Hostname for the database connection.',\n    'database_port_label' => 'Database Port',\n    'database_port_comment' => '(Optional) A port for the connection.',\n    'database_name_label' => 'Database Name',\n    'database_name_comment' => 'Specify the name of the database to use.',\n    'database_login_label' => 'Database Login',\n    'database_login_comment' => 'User with create database privileges.',\n    'database_pass_label' => 'Database Password',\n    'database_pass_comment' => 'Password for the specified user.',\n    'database_path_label' => 'Database Path',\n    'database_path_comment' => 'For file-based storage, enter a path relative to the application root directory.',\n    'migrate_database_comment' => 'Please migrate the database with the following command',\n    'visit_backend_comment' => 'Then, open the administration area at this URL',\n    'open_configurator_comment' => 'Open this application in your browser',\n  ],\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Takaisin perusteisiin',\n  ],\n  'locale' => [\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fi' => 'Finnish (suomi)',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polskie',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n  ],\n  'directory' => [\n    'create_fail' => 'Ei voida luoda kansiota: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Ei voida luoda tiedostoa: :name',\n  ],\n  'page' => [\n    'not_found' => [\n      'label' => 'Sivua ei löydy',\n      'help' => 'Hakemaasi sivua ei löydy.',\n    ],\n    'custom_error' => [\n      'label' => 'Sivuvirhe',\n      'help' => 'Pahoittelut, tapahtui virhe eikä sivua voida näyttää.',\n    ],\n    'invalid_token' => [\n      'label' => 'Virheellinen turvatoken',\n    ],\n    'maintenance' => [\n      'label' => 'Palaamme pian!',\n      'help' => 'Päivitämme sivustoa parhaillaan, tervetuloa myöhemmin uudelleen!',\n      'message' => 'Message:',\n      'available_at' => 'Yritä uudelleen after:',\n    ],\n  ],\n  'combiner' => [],\n  'resizer' => [],\n  'system' => [\n    'name' => 'Järjestelmä',\n    'menu_label' => 'Järjestelmä',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Muut',\n      'logs' => 'Lokit',\n      'mail' => 'Sähköposti',\n      'shop' => 'Kauppa',\n      'team' => 'Tiimi',\n      'users' => 'Käyttäjät',\n      'system' => 'Järjestelmä',\n      'social' => 'Some',\n      'backend' => 'Ylläpito',\n      'events' => 'Tapahtumat',\n      'customers' => 'Asiakkaat',\n      'my_settings' => 'Omat asetukset',\n      'notifications' => 'Notifikaatiot',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Teema',\n    'unnamed' => 'Nimetön teema',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Asenna teemoja',\n    'installed' => 'Asennetut teemat',\n    'no_themes' => 'Ei asennettuja teemoja kaupasta.',\n    'recommended' => 'Suositellut',\n    'remove_confirm' => 'Haluatko varmasti poistaa tämän teeman?',\n  ],\n  'plugin' => [\n    'label' => 'Lisäosa',\n    'unnamed' => 'Nimetön lisäosa',\n    'name' => [],\n    'by_author' => 'Tekijä: :name',\n  ],\n  'plugins' => [\n    'install' => 'Asenna liitännäiset',\n    'install_products' => 'Asenna tuotteet',\n    'installed' => 'Asennetut liitännäiset',\n    'no_plugins' => 'Markkinapaikalta ei ole asennettu liitännäisiä.',\n    'recommended' => 'Suositellut',\n    'plugin_label' => 'Liitännäinen',\n    'bulk_actions_label' => 'Massatoiminnot',\n    'check_yes' => 'Kyllä',\n    'check_no' => 'Ei',\n    'unfrozen' => 'Päivitykset käytössä',\n    'freeze' => 'poista päivitykset',\n    'unfreeze' => 'salli päivitykset',\n    'refresh' => 'palauta',\n    'remove' => 'Poista',\n    'freeze_label' => 'Poista päivitykset käytöstä',\n    'unfreeze_label' => 'Salli päivitykset',\n    'freeze_success' => 'Valittujen liitännäisten päivitykset onnistuneesti poistettu käytöstä.',\n    'unfreeze_success' => 'Valittujen liitännäisten päivitykset onnistuneesti sallittu.',\n    'enable_success' => 'Valitut liitännäiset onnistuneesti otettu käyttöön.',\n    'disable_success' => 'Valitut liitännäiset onnistuneesti poistettu käytöstä.',\n    'refresh_success' => 'Valittujen liitännäisten tiedot onnistuneesti palautettu.',\n    'remove_confirm' => 'Haluatko varmasti poistaa valitut liitännäiset? Tämä poistaa kaiken niihin liittyvän datan.',\n    'remove_success' => 'Valitut liitännäiset poistettu onnistuneesti.',\n  ],\n  'project' => [\n    'attach' => 'Liitä projekti',\n    'detach' => 'Irroita projekti',\n    'none' => 'Ei yhtään',\n    'id' => [\n      'missing' => 'Määrittele projektin ID.',\n    ],\n    'detach_confirm' => 'Haluatko varmasti irrottautua projektista?',\n    'unbind_success' => 'Projekti on irrotettu.',\n  ],\n  'settings' => [\n    'search' => 'Haku',\n  ],\n  'mail' => [\n    'log_file' => 'Lokitiedosto',\n    'menu_label' => 'Sähkököpostin asennus',\n    'menu_description' => 'Hallitse sähköpostin asetuksia.',\n    'general' => 'Yleiset',\n    'method' => 'Sähköpostimenetelmä',\n    'sender_name' => 'Lähettäjän nimi',\n    'sender_email' => 'Lähettäjän sähköposti',\n    'smtp' => 'SMTP',\n    'smtp_address' => 'SMTP-osoite',\n    'smtp_authorization' => 'Pakollinen SMTP autorisointi',\n    'smtp_authorization_comment' => 'Ruksi tämä, jos SMTP-palvelimesi tarvitsee tunnistuksen.',\n    'smtp_username' => 'Käyttäjätunnus',\n    'smtp_password' => 'Salasana',\n    'smtp_port' => 'SMTP-portti',\n    'smtp_ssl' => 'SSL-yhteys vaaditaan',\n    'smtp_encryption' => 'SMTP-salausprotokolla',\n    'smtp_encryption_none' => 'Ei salausta',\n    'smtp_encryption_tls' => 'TLS',\n    'smtp_encryption_ssl' => 'SSL',\n    'sendmail' => 'Sendmail',\n    'sendmail_path' => 'Sendmail-polku',\n    'sendmail_path_comment' => 'Määritä polku sendmail-ohjelmaan.',\n    'mailgun' => 'Mailgun',\n    'mailgun_domain' => 'Mailgun domain',\n    'mailgun_domain_comment' => 'Määritä Mailgun domain nimi.',\n    'mailgun_secret' => 'Mailgun sala-avain',\n    'mailgun_secret_comment' => 'Syötä sinun Mailgun API sala-avain.',\n    'mandrill' => 'Mandrill',\n    'mandrill_secret' => 'Mandrill sala-avain',\n    'mandrill_secret_comment' => 'Syötä sinun Mandrill API sala-avain.',\n    'ses' => 'SES',\n    'ses_key' => 'SES key',\n    'ses_key_comment' => 'Syötä sinun SES API avain.',\n    'ses_secret' => 'SES sala-avain',\n    'ses_secret_comment' => 'Syötä sinun SES API sala-avain.',\n    'ses_region' => 'SES alue',\n    'ses_region_comment' => 'Syötä sinun SES alue (esim: us-east-1)',\n    'postmark' => 'Postmark',\n    'postmark_token' => 'Postmark Token',\n    'postmark_token_comment' => 'Lisää Postmark API-avain',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Uniikki koodi tälle teemalle',\n    'test_send' => 'Lähetä testiviesti',\n    'test_confirm' => 'Lähetä testiviesti :email. Jatketaanko?',\n    'creating' => 'Luodaan teema...',\n    'creating_layout' => 'Luodaan asettelu...',\n    'saving' => 'Tallennetaan teema...',\n    'saving_layout' => 'Tallennetaan asettelu...',\n    'delete_confirm' => 'Poista tämä teema?',\n    'delete_layout_confirm' => 'Poista tämä asettelu?',\n    'deleting' => 'Poistetaan teemaa...',\n    'deleting_layout' => 'Poistetaan ulkoasua...',\n    'sending' => 'Lähetetään testiviestiä...',\n    'return' => 'Palaa teemalistaan',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Otsikko',\n      'paragraph' => 'Tämä kappale sisältää Lorem Ipsumia ja linkin. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Kohde',\n        'description' => 'Kuvaus',\n        'price' => 'Hinta',\n        'centered' => 'Keskitetty',\n        'right_aligned' => 'Tasattu oikealle',\n      ],\n      'buttons' => [\n        'primary' => 'Ensisijainen nappula',\n        'positive' => 'Positiivinen nappula',\n        'negative' => 'Negatiivinen nappula',\n      ],\n      'panel' => 'Kuinka hieno tämä paneeli onkaan?',\n      'more' => 'Lisää tekstiä',\n      'promotion' => 'Kuponkikoodi: OCTOBER',\n      'subcopy' => 'Tämä on sähköpostin alateksti',\n      'thanks' => 'Kiitos',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'check_label' => 'Tarkista päivitykset',\n    'plugin_author' => 'Julkaisija',\n    'plugin_not_found' => 'Lisäosaa ei löydy',\n    'plugin_version_not_found' => 'Liitännnäisen versiota ei löydy',\n    'theme_not_found' => 'Teemaa ei löydy',\n    'core_build' => 'Rakennusversio :build',\n    'core_build_help' => 'Viimeisin versio saatavilla.',\n    'changelog' => 'Muutosloki',\n    'changelog_view_details' => 'Tarkastele muutoksia',\n    'themes' => 'Teemat',\n    'plugin_version_none' => 'Uusi lisäosa',\n    'plugin_current_version' => 'Nykyinen versio',\n    'theme_new_install' => 'Uuden teeman asennus.',\n    'theme_extracting' => 'Puretaan teemaa: :name',\n    'update_label' => 'Päivitä ohjelmisto',\n    'update_loading' => 'Ladataan saatavilla olevia päivityksiä...',\n    'force_label' => 'Pakota päivitys',\n    'found' => [\n      'label' => 'Löydettiin uusia päivityksiä!',\n      'help' => 'Klikkaa Päivitä ohjelmisto aloittaaksesi päivitysprosessi.',\n    ],\n    'none' => [\n      'label' => 'Ei päivityksiä',\n      'help' => 'Uusia päivityksiä ei löytynyt.',\n    ],\n    'important_action' => [\n      'empty' => 'Valitse toimenpide',\n      'confirm' => 'Vahvista päivitys',\n      'skip' => 'Jätä tämä pävitys väliin (vain kerran)',\n      'ignore' => 'Hyppää tämän päivityksen yli (aina)',\n    ],\n    'important_action_required' => 'Toimenpiteitä vaaditaan',\n    'important_view_guide' => 'Katso päivitysopas',\n    'important_view_release_notes' => 'Katso julkaisulista',\n    'important_alert_text' => 'Osa päivityksistä vaatii huomiotasi.',\n    'details_title_plugin' => 'Liitännäisen tiedot',\n    'details_title_theme' => 'Teeman tiedot',\n    'details_view_homepage' => 'Katso kotisivua',\n    'details_changelog' => 'Muutosloki',\n    'details_changelog_missing' => 'There is no changelog provided.',\n    'details_current_version' => 'Tämän hetkinen versio',\n    'details_author' => 'Tekijä',\n  ],\n  'server' => [\n    'connect_error' => 'Palvelimeen ei saada yhteyttä.',\n    'response_not_found' => 'Päivityspalvelinta ei löydy.',\n    'response_invalid' => 'Virheellinen vastaus palvelimelta.',\n    'response_empty' => 'Tyhjä vastaus palvelimelta.',\n    'file_error' => 'Paketin toimitus palvelimelta epäonnistui.',\n    'file_corrupt' => 'Palvelimella oleva tiedosto on vahingoittunut.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Luokan :class täytyy määritellä ominaisuus $:property, jota käyttää :behavior käyttäytyminen.',\n  ],\n  'config' => [\n    'not_found' => 'Asetustiedostoa :file ei löydy määriteltynä kohteelle :location.',\n    'required' => 'Kohteen :location asetustiedostossa on oltava arvo \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Ydintiedoston \\':file\\' purku epäonnistui.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Tyhjää pyyntöloki',\n    'empty_loading' => 'Tyhjätään pyyntölokia...',\n    'empty_success' => 'Pyyntöloki tyhjätty',\n    'return_link' => 'Palaa pyyntölokiin',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Järjestelmä',\n    'manage_system_settings' => 'Hallitse järjestelmän asetuksia',\n    'manage_software_updates' => 'Hallitse ohjelmiston päivityksiä',\n    'access_logs' => 'Katso järjestelmän lokeja',\n    'manage_mail_templates' => 'Hallitse sähköpostin teemoja',\n    'manage_mail_settings' => 'Hallitse sähköpostin asetuksia',\n    'manage_other_administrators' => 'Hallitse muita ylläpitäjiä',\n    'view_the_dashboard' => 'Katso Dashboardia',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Virheellinen tiedostopolku: \\':path\\'.',\n    'folder_size_items' => 'tiedosto(a)',\n  ],\n  'pagination' => [\n    'previous' => 'Edellinen',\n    'next' => 'Seuraava',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/fi/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n    'accepted'         => 'Kenttä :attribute täytyy hyväksyä.',\n    'active_url'       => 'Kenttä :attribute ei ole kelvollinen URL.',\n    'after'            => 'Kentän :attribute täytyy olla päivämäärä :date jälkeen.',\n    'alpha'            => 'Kenttä :attribute voi sisältää vain kirjaimia.',\n    'alpha_dash'       => 'Kenttä :attribute voi sisältää vain kirjaimia, numeroita, ja viivoja.',\n    'alpha_num'        => 'Kenttä :attribute voi sisältää vain kirjaimia ja numeroita.',\n    'array'            => 'Kentän :attribute on oltava lista.',\n    'before'           => 'Kentän :attribute täytyy olla päivämäärä ennen :date.',\n    'between'          => [\n        'numeric' => 'Kentän :attribute täytyy olla väliltä :min - :max.',\n        'file'    => 'Kentän :attribute täytyy olla väliltä :min - :max kilotavua.',\n        'string'  => 'Kentän :attribute täytyy olla väliltä :min - :max merkkiä.',\n        'array'   => 'Listan :attribute täytyy sisältää :min - :max väliltä kohdetta.',\n    ],\n    'boolean'              => 'Kentän :attribute arvo on oltava tosi tai epätosi.',\n    'confirmed'        => 'Kentän :attribute vahvistus ei vastaa toisiaan.',\n    'date'             => 'Kenttä :attribute ei ole kelvollinen päivämäärä.',\n    'date_equals'      => 'Atribuutti :attribute on vastattava päivämäärää :date.',\n    'date_format'      => 'Kenttä :attribute ei vastaa päivämääräformaattia :format.',\n    'different'        => 'Kenttä :attribute ja :other täytyy olla erilaisia.',\n    'digits'           => 'Kentän :attribute on oltava :digits numeroa.',\n    'digits_between'   => 'Kentän :attribute on oltava väliltä :min ja :max.',\n    'dimensions'           => ':Attribute sisältää virheelliset kuvan mitat.',\n    'distinct'             => ':Attribute-kentässä on kaksoiskappale.',\n    'email'                => ':Attribute on oltava validi sähköpostiosoite.',\n    'ends_with'            => ':Attribute:n tulee päättyä johonkin seuraavista: :values.',\n    'exists'               => 'Valittu :attribute on virheellinen.',\n    'file'                 => ':Attribute on oltava tiedosto.',\n    'filled'               => ':Attribute-kenttä on täytettävä arvolla.',\n    'exists'           => 'Valittu kenttä :attribute ei ole kelvollinen.',\n    'image'            => 'Kentän :attribute on oltava kuva.',\n    'in'               => 'Valittu kenttä :attribute ei ole kelvollinen.',\n    'integer'          => 'Kentän :attribute on oltava kokonaisluku.',\n    'ip'               => 'Kentän :attribute on oltava kelvollin IP osoite.',\n    'max'              => [\n        'numeric' => 'Kenttä :attribute ei voi olla suurempi kuin :max.',\n        'file'    => 'Kenttä :attribute ei voi olla suurempi kuin :max kilotavua.',\n        'string'  => 'Kenttä :attribute ei voi olla suurempi kuin :max merkkiä.',\n        'array'   => 'Lista :attribute ei saa sisältää enempää kuin :max kohdetta.',\n    ],\n    'mimes'            => 'Kentän :attribute on oltava tiedostomuotoa: :values.',\n    'extensions'       => 'Kentän :attribute on oltava päätteellä: :values.',\n    'min'              => [\n        'numeric' => 'Kentän :attribute on oltava vähintään :min.',\n        'file'    => 'Kentän :attribute on oltava vähintään :min kilotavua.',\n        'string'  => 'Kentän :attribute on oltava vähintään :min merkkiä.',\n        'array'   => 'Listassa :attribute on oltava vähintään :min kohdetta.',\n    ],\n    'not_in'           => 'valittu kenttä :attribute ei ole kelvollinen.',\n    'numeric'          => 'Kentän :attribute on oltava numero.',\n    'regex'            => 'Kentän :attribute formaatti ei ole kelvollinen.',\n    'required'         => 'Kenttä :attribute on vaadittu.',\n    'required_if'      => 'Kettä :attribute on vaadittu kun kenttä :other arvolla :value.',\n    'required_with'    => 'Kenttä :attribute on vaadittu kun :values on läsnä.',\n    'required_without' => 'Kenttä :attribute on vaadittu kun :values ei ole läsnä.',\n    'same'             => 'Kenttien :attribute ja :other täytyy vastata toisiaan.',\n    'size'             => [\n        'numeric' => 'Kentän :attribute täytyy olla :size.',\n        'file'    => 'Kentän :attribute täytyy olla :size kilotavua.',\n        'string'  => 'Kentän :attribute täytyy olla :size merkkiä.',\n        'array'   => 'Listan :attribute täytyy sisältää :size kohdetta.',\n    ],\n    'unique'           => 'Kenttä :attribute on jo varattu.',\n    'url'              => 'Kentän :attribute formaatti ei ole kelvollinen.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention 'attribute.rule' to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of 'email'. This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/fi.json",
    "content": "{\n  \"Check For Updates\": \"Tarkista päivitykset\",\n  \"Install Packages\": \"Asenna paketit\",\n  \"Manage Themes\": \"Hallitse teemoja\",\n  \"Manage Plugins\": \"Hallitse lisäosia\",\n  \"Project\": \"Projekti\",\n  \"Owner\": \"Omistaja\",\n  \"Plugins\": \"Lisäosat\",\n  \"Recommended\": \"Suositeltu\",\n  \"Disabled\": \"Pois käytöstä\",\n  \"Current Build\": \"Nykyinen versio\",\n  \"Updates Available\": \"Päivityksiä saatavilla\",\n  \"Up to Date\": \"Ajantasalla\",\n  \"Latest Build\": \"Uusin versio\",\n  \"View Changelog\": \"Näytä muutosloki\",\n  \"Software Updates\": \"Päivitykset & Lisäosat\",\n  \"Update the system modules and plugins.\": \"Päivitä järjestelmää, hallitse ja asenna lisäosia ja teemoja.\",\n  \"General\": \"Yleinen\",\n  \"Mail\": \"Sähköposti\",\n  \"Utilities\": \"Apuohjelmat\",\n  \"Settings\": \"Asetukset\",\n  \"Show All Settings\": \"Näytä kaikki asetukset\",\n  \"Unable to find the specified settings.\": \"Määriteltyjä asetuksia ei löytynyt.\",\n  \"The settings page is missing a Model definition.\": \"Asetussivulta puuttuu mallin määritelmä.\",\n  \":name settings updated\": \":name asetukset päivitetty\",\n  \"Return to System Settings\": \"Palaa järjestelmän asetuksiin\",\n  \"Search Settings...\": \"Etsi asetus...\",\n  \"Disable mail branding CSS\": \"Poista sähköpostin brändäys CSS käytöstä\",\n  \"Manage Sites\": \"Hallinnoi sivustoja\",\n  \"Manage the websites available for this application.\": \"Hallinnoi tälle sovellukselle saatavilla olevia verkkosivustoja.\",\n  \"Marketplace\": \"Markkinapaikka\",\n  \"There is no documentation provided.\": \"Dokumentaatiota ei löydy.\",\n  \"Documentation\": \"Dokumentaatio\",\n  \"Upgrade Guide\": \"Päivitysopas\",\n  \"License\": \"Lisenssi\",\n  \"Attach to Project\": \"Kiinnitä projektiin\",\n  \"Manage Updates\": \"Hallinnoi päivityksiä\",\n  \"Software Update\": \"Ohjelmistopäivitys\",\n  \"Return to Software Updates\": \"Palaa järjestelmäpäivityksiin\",\n  \"Try Again\": \"Yritä uudelleen\",\n  \"Unpacking application files\": \"Puretaan ohjelmiston tiedostoja\",\n  \"Update Failed\": \"Päivitys epäonnistui\",\n  \"Unpacking plugin: :name\": \"Puretaan lisäosaa: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Ensisijaista sivustoa käytetään oletuksena, eikä sitä voi poistaa.\",\n  \"Disabled sites are not shown on the frontend.\": \"Käytöstä poistettuja sivustoja ei näytetä käyttöliittymässä.\",\n  \"Enabled in the Admin Panel\": \"Käytössä hallintapaneelissa\",\n  \"Configuration\": \"Kokoonpano\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Käytä tätä, jos haluat, että sivusto otetaan käyttöön hallintapaneelissa.\",\n  \"Install\": \"Asenna\",\n  \"Sync Project\": \"Synkronoi projekti\",\n  \"Name\": \"Nimi\",\n  \"Unique Code\": \"Ainutlaatuinen koodi\",\n  \"Theme\": \"Teema\",\n  \"Sites\": \"Sivustot\",\n  \"Create Site\": \"Luo sivusto\",\n  \"Base URL\": \"Oletus URL-osoite\",\n  \"Status\": \"Tilakoodi\",\n  \"Current default value: :value\": \"Nykyinen oletusarvo: :value\",\n  \"Locale\": \"Kieli\",\n  \"Timezone\": \"Aikavyöhyke\",\n  \"Custom application URL\": \"Mukautetun sovelluksen URL-osoite\",\n  \"Override the application URL when this site is active.\": \"Ohita sovelluksen URL-osoite, kun tämä sivusto on aktiivinen.\",\n  \"Use a CMS route prefix\": \"Käytä CMS-reitin etuliitettä\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Etuliite voi tunnistaa tämän sivuston, kun käytetään jaettua isäntänimeä.\",\n  \"Define matching hostnames\": \"Määritä vastaavat isäntänimet\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Määritä verkkotunnusten nimet ja mallit, joita on käytettävä tämän sivuston palvelemiseen.\",\n  \"Display a style for this site\": \"Näytä tämän sivuston väri\",\n  \"To help identify this site, display a color in the admin panel.\": \"Voit helpottaa tämän sivuston tunnistamista näyttämällä värin hallintapaneelissa.\",\n  \"Save\": \"Tallenna\",\n  \"Save and Close\": \"Tallenna ja sulje\",\n  \"Use Default\": \"Käytä oletusta\",\n  \"Use Custom\": \"Käytä mukautettua\",\n  \"Specify a custom locale code.\": \"Määritä mukautettu aluekoodi.\",\n  \"Failed\": \"Epäonnistui\",\n  \"or\": \"tai\",\n  \"Code\": \"Koodi\",\n  \"October CMS Marketplace\": \"OctoberCMS Markkinapaikka\",\n  \"Visit the :link to add some.\": \"Projektissa ei ole lisäosia tai teemoja. Käy :linkissä lisätäksesi joitain.\",\n  \"Buy Now\": \"Osta nyt\",\n  \"Updating package manager\": \"Päivitetään paketinhallintaa\",\n  \"Updating application files\": \"Ladataan ohjelmiston versiota\",\n  \"Setting build number\": \"Asetetaan versionumeroa\",\n  \"Finishing update process\": \"Viimeistellään päivitysprosessia\",\n  \"Installing plugin: :name\": \"Ladataan lisäosaa: :name\",\n  \"Finishing installation process\": \"Viimeistellään asennusta\",\n  \"Removing theme: :name\": \"Poistetaan teemaa: :name\",\n  \"Please specify a Theme name to install.\": \"Määritä asennettavan teeman nimi.\",\n  \"Installing theme: :name\": \"Ladataan teemaa: :name\",\n  \"Extracting theme: :name\": \"Puretaan teemaa: :name\",\n  \"Seeding theme: :name\": \"Lähetetään teema: :name\",\n  \"Removing plugin: :name\": \"Poistetaan lisäosaa: :name\",\n  \"Please specify a Plugin name to install.\": \"Määritä asennettavan lisäosan nimi.\",\n  \"Update process complete\": \"Päivitys valmis\",\n  \"Package installed successfully\": \"Lisäosa asennettu onnistuneesti\",\n  \"Check Dependencies\": \"Tarkista riippuvuudet\",\n  \"Install Dependencies\": \"Asenna riippuvuudet\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Järjestelmän oikean toiminnan kannalta tarvittavia riippuvuuksia puuttuu.\",\n  \"License Key\": \"Lisenssiavain\",\n  \"How to find your License Key\": \"Kuinka löytää lisenssiavain\",\n  \"The password attribute is required.\": \"Salasana-attribuutti on pakollinen.\",\n  \"The login attribute is required.\": \"Kirjautumisattribuutti on pakollinen.\",\n  \"Cannot login user since they are not activated.\": \"Käyttäjää ei voi kirjautua sisään, koska käyttäjää ei ole aktivoitu.\",\n  \"Cannot login user since they are banned.\": \"Käyttäjää ei voi kirjautua sisään, koska käyttäjä on estetty.\",\n  \"Cannot login user since they are suspended.\": \"Käyttäjää ei voi kirjautua sisään, koska käyttäjä on keskeytetty.\",\n  \"A user was not found with the given credentials.\": \"Käyttäjää ei löydy annetuilla tunnuksilla.\",\n  \"A user was found but the password did not match.\": \"Käyttäjä löytyi, mutta salasana ei vastannut.\",\n  \"User is not logged in\": \"Käyttäjä ei ole kirjautunut sisään\",\n  \"Register Software\": \"Rekisteröi ohjelmisto\",\n  \"View the Dashboard\": \"Näytä koontinäkymä\",\n  \"Set the Default Dashboard\": \"Aseta oletus koontinäkymä\",\n  \"Log File\": \"Lokitiedosto\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Ei salausta\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Sähköpostin asetukset\",\n  \"Manage email configuration.\": \"Hallitse sähköpostin asetuksia.\",\n  \"Sender Name\": \"Lähettäjän nimi\",\n  \"Sender Email\": \"Lähettäjän sähköposti\",\n  \"Mail Method\": \"Sähköpostimetodi\",\n  \"SMTP Address\": \"SMTP-osoite\",\n  \"SMTP Port\": \"SMTP-portti\",\n  \"SMTP Encryption Protocol\": \"SMTP salauksen protokolla\",\n  \"SMTP Authorization Required\": \"SMTP-palvelimen valtuutus vaaditaan\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Käytä tätä valintaruutua, jos SMTP-palvelin vaatii valtuutuksen.\",\n  \"Username\": \"Käyttäjänimi\",\n  \"Password\": \"Salasana\",\n  \"Sendmail Path\": \"Sendmailin polku\",\n  \"Please specify the path of the sendmail program.\": \"Määritä sendmail-ohjelman polku.\",\n  \"Mailgun Domain\": \"Mailgun-verkkotunnus\",\n  \"Please specify the Mailgun domain name.\": \"Määritä Mailgun verkkotunnus.\",\n  \"Mailgun Secret\": \"Mailgun Secret-koodi\",\n  \"Enter your Mailgun API key.\": \"Syötä Mailgun API -avain.\",\n  \"SES Key\": \"SES-avain\",\n  \"Enter your SES API key\": \"Syötä SES API-avain\",\n  \"SES Secret\": \"SES Secret-koodi\",\n  \"Enter your SES API secret key\": \"Syötä SES APIn Secret-avain\",\n  \"SES Region\": \"SES-alue\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Anna SES-alueesi (esim. us-east-1)\",\n  \"Postmark Token\": \"Postmark Token\",\n  \"Enter your Postmark API secret key\": \"Syötä Postmark API-avain\",\n  \"Define administrator roles\": \"Määritä ylläpitäjän roolit\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Rajoita pääsyä tälle sivustolle vain ylläpitäjälle, jolla on seuraavat roolit.\",\n  \"Group\": \"Ryhmä\",\n  \"Create Group\": \"Luo ryhmä\",\n  \"Site Group\": \"Sivuston ryhmä\",\n  \"Site Groups\": \"Sivuston ryhmät\",\n  \"Manage Site Groups\": \"Hallinnoi sivuston ryhmiä\",\n  \"Group Name\": \"Ryhmän nimi\",\n  \"All Sites\": \"Kaikki sivustot\",\n  \"Manage Backend Preferences\": \"Hallitse ylläpitopuolen asetuksia\",\n  \"Manage Code Editor Preferences\": \"Hallitse koodieditorin asetuksia\",\n  \"Customize Backend Styles\": \"Muokkaa ylläpitoa\",\n  \"Mail Templates\": \"Sähköpostipohjat\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Muokkaa sähköpostimalleja, jotka lähetetään käyttäjille ja järjestelmänvalvojille, hallitse sähköpostien ulkoasua.\",\n  \"Mail Branding\": \"Sähköpostin brändäys\",\n  \"Modify the colors and appearance of mail templates.\": \"Muokkaa sähköpostiviestin värejä ja teemaa.\",\n  \"Event Log\": \"Tapahtumaloki\",\n  \"View system log messages with their recorded time and details.\": \"Näytä järjestelmän lokiviesteihin tallennettu aika ja tiedot.\",\n  \"Request Log\": \"Pyyntöloki\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Tarkastele huonoja tai uudelleenohjattuja pyyntöjä, kuten Sivua ei löydy (404).\",\n  \"Log Settings\": \"Lokiasetukset\",\n  \"Specify which areas should use logging.\": \"Määrittele, mitä tallennetaan lokiin.\",\n  \"Test message sent.\": \"Testiviesti lähetetty.\",\n  \"New Layout\": \"Uusi ulkoasu\",\n  \"New Partial\": \"Uusi sisältöpala\",\n  \"New Template\": \"Uusi teema\",\n  \"Template\": \"Teema\",\n  \"Templates\": \"Teemat\",\n  \"Layouts\": \"Ulkoasut\",\n  \"Partials\": \"Sisältöpalat\",\n  \"Partial\": \"Sisältöpala\",\n  \"Mail Partials\": \"Sähköpostin sisältöpalat\",\n  \"Layout\": \"Ulkoasu\",\n  \"Mail Layouts\": \"Sähköpostin ulkoasut\",\n  \"Unique code used to refer to this template\": \"Uniikkikoodi teemalle\",\n  \"-- No layout --\": \"-- Ei ulkoasua --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Pelkkä teksti\",\n  \"Disable automatic inline CSS\": \"Poista automaattinen inline CSS\",\n  \"Options\": \"Optiot\",\n  \"Subject\": \"Otsikko\",\n  \"Email message subject\": \"Sähköpostin aihe\",\n  \"Description\": \"Kuvaus\",\n  \"Drivers Not Installed\": \"Ajureita ei asennettu\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Tämä sähköpostimenetelmä vaatii lisäosan \\\":plugin\\\" asennettavaksi ennen kuin voit lähettää sähköpostia.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Tapahtuman ID\",\n  \"Level\": \"Taso\",\n  \"Date & Time\": \"Päivä & Aika\",\n  \"Message\": \"Viesti\",\n  \"Logging\": \"Lokit\",\n  \"Log Bad Requests\": \"Kirjaa virheelliset pyynnöt\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Selainten pyynnöt, jotka saattavat vaatia huomiota, kuten 404 virheet.\",\n  \"Log Theme Changes\": \"Kirjaa teeman muutokset\",\n  \"When a change is made to the theme using the backend.\": \"Kun muutos on tehty teemaan käyttäen hallintapaneelia.\",\n  \"Log System Events\": \"Kirjaa järjestelmän tapahtumat\",\n  \"Store system events in the database in addition to the file-based log.\": \"Tallenna järjestelmätapahtumat tietokantaan tiedostopohjaisen lokin lisäksi.\",\n  \"Background\": \"Tausta\",\n  \"Body background\": \"Body-tausta\",\n  \"Content background\": \"Sisällön tausta\",\n  \"Inner content background\": \"Keskeisen sisällön tausta\",\n  \"Buttons\": \"Painikkeet\",\n  \"Button text color\": \"Painikkeiden tekstin väri\",\n  \"Primary button background\": \"Ensisijaisen painikkeen tausta\",\n  \"Positive button background\": \"Positiivisen painikkeen tausta\",\n  \"Negative button background\": \"Negatiivisen painikkeen tausta\",\n  \"Typography\": \"Typografia\",\n  \"Header color\": \"Pääosion väri\",\n  \"Headings color\": \"Otsikoiden väri\",\n  \"Text color\": \"Tekstin väri\",\n  \"Link color\": \"Linkkiväri\",\n  \"Footer color\": \"Alatunnisteen väri\",\n  \"Borders\": \"Reunat\",\n  \"Body border color\": \"Pääosion reunuksen väri\",\n  \"Subcopy border color\": \"Alatekstin reunuksen väri\",\n  \"Table border color\": \"Taulukon reunuksen väri\",\n  \"Components\": \"Komponentit\",\n  \"Panel background\": \"Paneelin tausta\",\n  \"Promotion background\": \"Promootion tausta\",\n  \"Promotion border color\": \"Promootion reunan väri\",\n  \"Customize Mail Appearance\": \"Muokkaa sähköpostiviestin ulkoasua\",\n  \"Version\": \"Versio\",\n  \"Enabled\": \"Käytössä\",\n  \"Latest\": \"Uusimmat\",\n  \"Log ID\": \"Loki ID\",\n  \"Counter\": \"Laskuri\",\n  \"Referers\": \"Viitteet\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Tämä loki näyttää listan mahdollisista virheistä, jotka tapahtuvat sovelluksessa, kuten poikkeukset ja virheen korjaustiedot.\",\n  \"Event\": \"Tapahtuma\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Tämä loki näyttää listan selainten pyynnöistä, jotka saattavat vaatia huomiotasi. Esim. jos vierailijat avaavat CMS-sivun, jota ei löydy, kohde lisätään tilakoodilla 404.\",\n  \"There were no detected referrers to this URL.\": \"Tähän URL-osoitteeseen ei löytynyt viittauksia.\",\n  \"Request\": \"Pyyntö\",\n  \"Event log emptied\": \"Tapahtumaloki on tyhjä\",\n  \"Empty Event Log\": \"Tyhjennä tapahtumaloki\",\n  \"Emptying Event Log...\": \"Tyhjennetään tapahtumalokia...\",\n  \"Return to Event Log\": \"Palaa tapahtumalokiin\",\n  \"Installed\": \"Asennettu\",\n  \"Primary Site\": \"Ensisijainen sivusto\",\n  \"Refresh Data\": \"Päivitä tiedot\",\n  \"Remove Data\": \"Poistetaan tiedot\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Oletko varma, että haluat palauttaa valittujen liitännäisten tiedot? Tämä palauttaa jokaisen liitännäisen datan alkuperäiseen asennustilaan.\",\n  \"Reset Plugin Data\": \"Palauta liitännäistiedot\",\n  \"Enable Plugins\": \"Ota liitännäiset käyttöön\",\n  \"Are you sure you want to :action these plugins?\": \"Oletko varma, että haluat :action nämä liitännäiset?\",\n  \"enable\": \"käytä\",\n  \"disable\": \"poista käytöstä\",\n  \"Disable Plugins\": \"Poista liitännäiset käytöstä\",\n  \"Select Action...\": \"Valitse toiminto...\",\n  \"Data has been removed.\": \"Tiedot on poistettu.\",\n  \"Plugin has been removed from the file system.\": \"Liitännäinen on poistettu tiedostojärjestelmästä.\",\n  \"search plugins to install...\": \"etsi asennettavia liitännäisiä...\",\n  \"Plugin has been disabled by configuration.\": \"Liitännäinen on poistettu käytöstä asetusten takia.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Liitännäisellä on puuttuvia riippuvuuksia tai se on poistettu käytöstä järjestelmän toimesta.\",\n  \"search themes to install...\": \"etsi asennettavia teemoja...\",\n  \"Install Theme\": \"Asenna teema\",\n  \"Theme Name\": \"Teeman nimi\",\n  \"Install Plugin\": \"Asenna liitännäinen\",\n  \"Plugin Name\": \"Lisäosan nimi\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Anna lisäosalle uniikkikoodi. Esimerkiksi: RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Nimeä teema uniikilla tunnuksella. Esimerkiksi RainLab.Vanilla\",\n  \"Select Installation Method\": \"Valitse asennustapa\",\n  \"Make a Copy (Recommended)\": \"Tee kopio (suositus)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Ota kopio tästä teemasta muokkaaksesi sitä ja hoida tulevat päivitykset käsin.\",\n  \"Install with Composer\": \"Asenna Composerilla\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Laajenna teemaa lapsiteeman avulla säilyttääksesi tulevat päivitykset teeman tekijältä.\",\n  \"Seed Theme Data\": \"Tuo myös teeman data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Tuo tämän teeman Blueprint-mallit, kielitiedostot ja tietokannan sisällöt tarvittaessa. Voit ohittaa tämän ja tehdä sen myöhemmin Frontend-teemaasetusten kautta.\",\n  \"Change Status\": \"Muuta tila\",\n  \"Site Definitions\": \"Sivuston määritykset\",\n  \"System Updates\": \"Päivitykset & Lisäosat\",\n  \"Find a Setting...\": \"Etsi asetus...\",\n  \"Return to System Updates\": \"Palaa järjestelmäpäivityksiin\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Tuo tämän teeman Blueprint-mallit, kielitiedostot ja tietokannan sisällöt tarvittaessa. Voit ohittaa tämän ja tehdä sen myöhemmin Frontend-teemaasetusten kautta.\"\n}"
  },
  {
    "path": "modules/system/lang/fr/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatage',\n        'quote' => 'Citation',\n        'code' => 'Code',\n        'header1' => 'Entête 1',\n        'header2' => 'Entête 2',\n        'header3' => 'Entête 3',\n        'header4' => 'Entête 4',\n        'header5' => 'Entête 5',\n        'header6' => 'Entête 6',\n        'bold' => 'Gras',\n        'italic' => 'Italique',\n        'unorderedlist' => 'Liste non ordonnée',\n        'orderedlist' => 'Liste ordonnée',\n        'snippet' => 'Fragment',\n        'video' => 'Vidéo',\n        'image' => 'Image',\n        'link' => 'Lien',\n        'horizontalrule' => 'Insérer une ligne horizontale',\n        'fullscreen' => 'Plein écran',\n        'preview' => 'Aperçu',\n        'strikethrough' => 'Barré',\n        'cleanblock' => 'Block propre',\n        'table' => 'Tableau',\n        'sidebyside' => 'Côte à côte'\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Insérer un lien vers un fichier du gestionnaire de média\",\n        'insert_image' => \"Insérer une image du gestionnaire de média\",\n        'insert_video' => \"Insérer une vidéo du gestionnaire de média\",\n        'insert_audio' => \"Insérer un document audio du gestionnaire de média\",\n        'invalid_file_empty_insert' => \"Veuillez sélectionner un fichier à lier.\",\n        'invalid_file_single_insert' => \"Veuillez sélectionner un seul fichier.\",\n        'invalid_image_empty_insert' => \"Veuillez sélectionner au moins une image à insérer.\",\n        'invalid_video_empty_insert' => \"Veuillez sélectionner une vidéo à insérer.\",\n        'invalid_audio_empty_insert' => \"Veuillez sélectionner un document audio à insérer.\",\n    ],\n    'alert' => [\n        'error' => 'Erreur',\n        'confirm' => 'Confirmer',\n        'dismiss' => 'Masquer',\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Annuler',\n        'widget_remove_confirm' => 'Retirer ce widget ?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Mois précédent',\n        'nextMonth'  => 'Mois suivant',\n        'months' => ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],\n        'weekdays' => ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],\n        'weekdaysShort' => ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam']\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'tout'\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Appliquer',\n            'clear_button_text'  => 'Annuler'\n        ],\n        'dates' => [\n            'all' => 'toute la période',\n            'filter_button_text' => 'Filtrer',\n            'reset_button_text'  => 'Effacer',\n            'date_placeholder' => 'Date',\n            'after_placeholder' => 'Après le',\n            'before_placeholder' => 'Avant le',\n        ],\n        'numbers' => [\n            'all' => 'tous',\n            'filter_button_text' => 'Filtres',\n            'reset_button_text'  => 'Réinitialiser',\n            'min_placeholder' => 'Min',\n            'max_placeholder' => 'Max'\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Afficher la pile d’exécution',\n        'hide_stacktrace' => 'Masquer la pile d’exécution',\n        'tabs' => [\n            'formatted' => 'Message formaté',\n            'raw' => 'Message brut',\n        ],\n        'editor' => [\n            'title' => 'Sélectionnez l’éditeur de code source à utiliser',\n            'description' => 'L’environnement de votre système d’exploitation doit être configuré pour ouvrir l’un des schémas d’URL ci-dessous.',\n            'openWith' => 'Ouvrir avec',\n            'remember_choice' => 'Se souvenir de la sélection pour la durée de la session dans ce navigateur',\n            'open' => 'Ouvrir',\n            'cancel' => 'Annuler'\n        ]\n    ],\n    'upload' => [\n        'max_files' => \"Vous ne pouvez plus télécharger de fichiers.\",\n        'invalid_file_type' => \"Vous ne pouvez pas télécharger de fichiers de ce type.\",\n        'file_too_big' => \"Le fichier est trop volumineux ({{filesize}}MB). Taille maximale du fichier: {{maxFilesize}}MB.\",\n        'response_error' => \"Le serveur a répondu avec le code {{statusCode}}.\",\n        'remove_file' => \"Effacer le fichier\",\n    ],\n    'inspector' => [\n        'add' => 'Ajouter',\n        'remove' => 'Retirer',\n        'key' => 'Clé',\n        'value' => 'Valeur',\n        'ok' => 'OK',\n        'cancel' => 'Annuler',\n        'items' => 'Eléments',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/fr/lang.php",
    "content": "<?php return [\n  'installer' => [\n    'app_config_section' => 'Configuration de l\\'application',\n    'license_section' => 'Clé de license',\n    'dependencies_section' => 'Installation des dépendances',\n    'demo_section' => 'Contenu d\\'exemple',\n    'locale_select_label' => 'Choisir la langue',\n    'locale_select_error' => 'Le code de langue :code n\\'est pas valide, veuillez réessayer',\n    'app_url_label' => 'URL de l\\'application',\n    'backend_uri_label' => 'URI du backend',\n    'backend_uri_comment' => 'Pour sécuriser votre application, utilisez une adresse personnalisée pour accéder au panneau d\\'administration.',\n    'license_key_label' => 'Clé de license',\n    'license_key_comment' => 'Entrez une clé de license valide pour continuer.',\n    'license_thanks_comment' => 'Merci d\\'être client d\\'Octobre CMS!',\n    'license_expired_comment' => 'La license n\\'est pas payée ou a expiré. Veuillez visiter octobercms.com pour obtenir une license.',\n    'too_many_failures_label' => 'Trop de tentatives échouées',\n    'non_interactive_label' => 'Mode non interactif détecté',\n    'non_interactive_comment' => 'Si vous voyez cette erreur immédiatement, utilisez plutôt ces commandes non interactives.',\n    'install_failed_label' => 'L\\'installation a échoué',\n    'install_failed_comment' => 'Veuillez essayer d\\'exécuter ces commandes manuellement.',\n    'database_engine_label' => 'Moteur de base de données',\n    'database_host_label' => 'Hôte de la base de données',\n    'database_host_comment' => 'Nom d\\'hôte de la connexion à la base de données.',\n    'database_port_label' => 'Port de base de données',\n    'database_port_comment' => '(Optionnel) Un port pour la connexion.',\n    'database_name_label' => 'Nom de la base de données',\n    'database_name_comment' => 'Spécifiez le nom de la base de données à utiliser.',\n    'database_login_label' => 'Connexion à la base de données',\n    'database_login_comment' => 'Utilisateur avec des privilèges de création de base de données.',\n    'database_pass_label' => 'Mot de passe de la base de données',\n    'database_pass_comment' => 'Mot de passe de l\\'utilisateur spécifié.',\n    'database_path_label' => 'Chemin de la base de données',\n    'database_path_comment' => 'Pour le stockage basé sur des fichiers, entrez un chemin relatif au répertoire racine de l\\'application.',\n    'migrate_database_comment' => 'Veuillez migrer la base de données avec la commande suivante',\n    'visit_backend_comment' => 'Ensuite, ouvrez la zone d\\'administration à cette URL',\n    'open_configurator_comment' => 'Ouvrez cette application dans votre navigateur',\n    'install_demo_label' => 'Voulez-vous installer le thème et le plugin d\\'exemple ? (Recommandé)',\n    'operation_timeout_comment' => 'L\\'opération a pris trop de temps. Veuillez augmenter le délai du serveur puis réessayer.',\n    'operation_timeout_hint' => 'Voir la documentation appropriée pour :name.',\n  ],\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Panneau d’administration',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'ca' => 'Català',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fi' => 'Suomi',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hr' => 'Hrvatski',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'ru' => 'Русский',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'sv' => 'Svenska',\n    'th' => 'ไทย',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'vn' => 'Tiếng việt',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n  ],\n  'colors' => [\n    'red' => 'Rouge',\n    'orange' => 'Orange',\n    'amber' => 'Ambre',\n    'lime' => 'Lime',\n    'green' => 'Vert',\n    'teal' => 'Sarcelle',\n    'cyan' => 'Cyan',\n    'sky' => 'Ciel',\n    'blue' => 'Bleu',\n    'indigo' => 'Indigo',\n    'violet' => 'Violet',\n    'pink' => 'Rose',\n    'rose' => 'Rose',\n    'slate' => 'Ardoise',\n  ],\n  'directory' => [\n    'create_fail' => 'Impossible de créer le répertoire : :name',\n  ],\n  'file' => [\n    'create_fail' => 'Impossible de créer le fichier : :name',\n  ],\n  'combiner' => [],\n  'resizer' => [],\n  'system' => [\n    'name' => 'Système',\n    'menu_label' => 'Système',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Divers',\n      'logs' => 'Journaux',\n      'mail' => 'E-mail',\n      'shop' => 'Boutique',\n      'team' => 'Équipe',\n      'users' => 'Utilisateurs',\n      'system' => 'Système',\n      'social' => 'Social',\n      'backend' => 'Backend',\n      'events' => 'Évènements',\n      'customers' => 'Clients',\n      'my_settings' => 'Mes réglages',\n      'notifications' => 'Notifications',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Thème',\n    'unnamed' => 'Thème sans nom',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Installer des thèmes',\n    'installed' => 'Thèmes installés',\n    'no_themes' => 'Il n’y a aucun thème installé depuis le Marketplace.',\n    'recommended' => 'Recommandé',\n    'remove_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer ce thème ?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Plugin sans nom',\n    'name' => [],\n    'by_author' => 'Autheur: :name',\n  ],\n  'plugins' => [\n    'install' => 'Installer des plugins',\n    'install_products' => 'Installer des produits',\n    'installed' => 'Plugins installés',\n    'no_plugins' => 'Il n’y a aucun plugin installé depuis le site d’October CMS.',\n    'recommended' => 'Recommandé',\n    'plugin_label' => 'Plugin',\n    'bulk_actions_label' => 'Actions en bloc',\n    'check_yes' => 'Oui',\n    'check_no' => 'Non',\n    'unfrozen' => 'Mises à jour activées',\n    'freeze' => 'désactiver les mises à jour pour',\n    'unfreeze' => 'activer les mises à jour pour',\n    'refresh' => 'remise à l’état initial',\n    'remove' => 'Supprimer',\n    'freeze_label' => 'Désactiver les mises à jour',\n    'unfreeze_label' => 'Activer les mises à jour',\n    'freeze_success' => 'Mises à jour désactivées avec succès pour les plugins sélectionnés.',\n    'unfreeze_success' => 'Mises à jour activées avec succès pour les plugins sélectionnés.',\n    'enable_success' => 'Les plugins ont été activés avec succès.',\n    'disable_success' => 'Les plugins ont été désactivés avec succès.',\n    'refresh_success' => 'Les plugins ont été actualisés avec succès.',\n    'remove_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer ce plugin ?',\n    'remove_success' => 'Les plugins ont été supprimés avec succès.',\n  ],\n  'project' => [\n    'attach' => 'Attacher un projet',\n    'detach' => 'Détacher le Projet',\n    'none' => 'Aucun',\n    'id' => [\n      'missing' => 'Spécifier un ID de projet.',\n    ],\n    'detach_confirm' => 'Confirmer le détachement de ce projet ?',\n    'unbind_success' => 'Le projet a été détaché avec succès.',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Connexion SSL requise',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Nom unique utilisé pour identifier ce modèle',\n    'test_send' => 'Envoyer un message de test',\n    'test_confirm' => 'Un message de test sera envoyé à :email. Continuer ?',\n    'creating' => 'Création du modèle...',\n    'creating_layout' => 'Création de la maquette...',\n    'saving' => 'Sauvegarde du modèle en cours…',\n    'saving_layout' => 'Enregistrement de la maquette...',\n    'delete_confirm' => 'Supprimer ce modèle ?',\n    'delete_layout_confirm' => 'Supprimer cette maquette ?',\n    'deleting' => 'Suppression du modèle...',\n    'deleting_layout' => 'Suppression de la maquette...',\n    'sending' => 'Envoi du message de test en cours…',\n    'return' => 'Retour à la liste des modèles.',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'En-tête',\n      'paragraph' => 'C’est un paragraphe rempli de Lorem Ipsum et un lien. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Article',\n        'description' => 'Description',\n        'price' => 'Prix',\n        'centered' => 'Centré',\n        'right_aligned' => 'Aligné à droite',\n      ],\n      'buttons' => [\n        'primary' => 'Bouton principal',\n        'positive' => 'Bouton positif',\n        'negative' => 'Bouton négatif',\n      ],\n      'panel' => 'A quel point ce panneau est-il génial ?',\n      'more' => 'Un peu plus de texte',\n      'promotion' => 'Code de réduction: OCTOBER',\n      'subcopy' => 'Ceci est le pré copyright de votre courriel',\n      'thanks' => 'Merci',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Auteur',\n    'plugin_not_found' => 'Plugin non trouvé',\n    'plugin_version_not_found' => 'La version du plugin est introuvable',\n    'theme_not_found' => 'Thème non trouvé',\n    'core_build' => 'Version :build',\n    'core_build_help' => 'Une nouvelle version est disponible.',\n    'changelog' => 'Changelog',\n    'changelog_view_details' => 'Voir les détails',\n    'themes' => 'Thèmes',\n    'plugin_version_none' => 'Nouveau plugin',\n    'plugin_current_version' => 'Version actuelle',\n    'theme_new_install' => 'Installation du nouveau thème.',\n    'theme_extracting' => 'Décompression du thème : :name',\n    'update_label' => 'Mettre à jour',\n    'update_loading' => 'Chargement des mises à jour disponibles…',\n    'force_label' => 'Forcer la mise à jour',\n    'found' => [\n      'label' => 'Nouvelle mise à jour disponible !',\n      'help' => 'Cliquer sur « Mettre à jour » pour démarrer le processus.',\n    ],\n    'none' => [\n      'label' => 'Aucune mise à jour n’est disponible.',\n      'help' => 'Aucune mise à jour plus récente n’a été trouvée.',\n    ],\n    'important_action' => [\n      'empty' => 'Sélectionner l’action',\n      'confirm' => 'Confirmer la mise à jour',\n      'skip' => 'Ignorer ce plugin (cette fois uniquement)',\n      'ignore' => 'Ignorer ce plugin (toujours)',\n    ],\n    'important_action_required' => 'Action requise',\n    'important_view_guide' => 'Consulter le guide de mise à jour',\n    'important_view_release_notes' => 'Voir les notes de version',\n    'important_alert_text' => 'Des mise à jour requièrent votre attention.',\n    'details_title_plugin' => 'Détails du plugin',\n    'details_title_theme' => 'Détails du thème',\n    'details_view_homepage' => 'Voir la page d’accueil',\n    'details_changelog' => 'Journal des modifications',\n    'details_changelog_missing' => 'Aucun journal des modifications disponible.',\n    'details_view_license' => 'Voir la license',\n    'details_current_version' => 'Version actuelle',\n    'details_author' => 'Auteur',\n  ],\n  'market' => [\n    'menu_description' => 'Gérer et installer les plugins et thèmes.',\n    'content_loading' => 'Chargement...',\n  ],\n  'server' => [\n    'connect_error' => 'Erreur lors de la connexion au serveur.',\n    'response_not_found' => 'Le serveur de mise à jour n’a pas été trouvé.',\n    'response_invalid' => 'Réponse invalide du serveur.',\n    'response_empty' => 'Réponse vide du serveur',\n    'file_error' => 'Erreur du serveur lors de la transmission du paquet.',\n    'file_corrupt' => 'Le fichier provenant du serveur est corrompu.',\n  ],\n  'behavior' => [\n    'missing_property' => 'La classe :class doit définir la propriété $:property utilisée par le behavior :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Impossible de trouver le fichier de configuration :file défini dans :location.',\n    'required' => 'La configuration utilisée dans :location doit fournir une valeur \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Impossible de décompresser le fichier \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Purger le journal des requêtes',\n    'empty_loading' => 'Purge du journal des requêtes…',\n    'empty_success' => 'Le journal des requêtes a été purgé avec succès.',\n    'return_link' => 'Retour au journal des requêtes',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Système',\n    'manage_system_settings' => 'Gérer les paramètres du système',\n    'manage_software_updates' => 'Gérer les mises à jour du logiciel',\n    'access_logs' => 'Voir les journaux système',\n    'manage_mail_templates' => 'Gérer les modèles des e-mails',\n    'manage_mail_settings' => 'Gérer les paramètres des e-mails',\n    'manage_other_administrators' => 'Gérer les autres administrateurs',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Le chemin du fichier indiqué est invalide : \\':path\\'.',\n    'folder_size_items' => 'Article(s)',\n  ],\n  'page' => [\n    'not_found' => [\n      'label' => 'Page introuvable',\n      'help' => 'La page demandée n\\'a pas pu être trouvée.',\n    ],\n    'custom_error' => [\n      'label' => 'Erreur de la page',\n      'help' => 'Désolé, quelque chose s\\'est mal passé et la page n\\'a pas pu être affichée.',\n    ],\n    'invalid_token' => [\n      'label' => 'token de sécurité invalide',\n    ],\n    'maintenance' => [\n      'label' => 'Nous serons de retour prochainement !',\n      'help' => 'Notre site web est en cours de maintenance, revenez bientôt !',\n      'message' => 'Message:',\n      'available_at' => 'Veuillez essayer à nouveau dans:',\n    ],\n  ],\n  'pagination' => [\n    'previous' => 'Précédent',\n    'prev_page' => 'Page précédente',\n    'next' => 'Suivant',\n    'next_page' => 'Page suivante',\n    'records' => 'Enregistrements',\n    'of' => 'sur',\n    'page' => 'Page',\n  ],\n  'dashboard' => [\n    'report_data_source' => [\n      'data_source_name' => 'Informations système',\n      'widgets' => [\n        'version_information' => [],\n        'system_issues' => [],\n        'event_log' => [],\n        'request_log' => [],\n      ],\n    ],\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/fr/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => 'Le champ :attribute doit être accepté.',\n    'accepted_if'          => 'Le champ :attribute doit être accepté quand :other vaut :value.',\n    'active_url'           => 'Le champ :attribute n’est pas une URL valide.',\n    'after'                => 'Le champ :attribute doit être une date après le :date.',\n    'after_or_equal'       => 'Le champ :attribute doit être une date après le ou égal à :date.',\n    'alpha'                => 'Le champ :attribute ne peut contenir que des lettres.',\n    'alpha_dash'           => 'Le champ :attribute ne peut contenir que des lettres, des chiffres et des tirets.',\n    'alpha_num'            => 'Le champ :attribute ne peut contenir que des lettres et des chiffres.',\n    'array'                => 'Le champ :attribute doit être un groupe.',\n    'ascii'                => 'Le champ :attribute ne peut contenir que des lettres et des chiffres ASCII.',\n    'before'               => 'Le champ :attribute doit être une date avant le :date.',\n    'before_or_equal'      => 'Le champ :attribute doit être une date avant le ou égal à :date.',\n    'between'              => [\n        'numeric' => 'Le champ :attribute doit être compris entre :min - :max.',\n        'file'    => 'Le champ :attribute doit être compris entre :min - :max kilooctets.',\n        'string'  => 'Le champ :attribute doit être compris entre :min - :max caractères.',\n        'array'   => 'Le champ :attribute doit être compris entre :min - :max objets.',\n    ],\n    'boolean'              => 'Le champ :attribute doit être vrai (true) ou faux (false).',\n    'confirmed'            => 'Le champ de confirmation :attribute ne correspond pas.',\n    'current_password'     => 'Le mot de passe est erroné.',\n    'date'                 => 'Le champ :attribute n’est pas une date valide.',\n    'date_equals'          => 'Le champ :attribute doit être une date égale à :date.',\n    'date_format'          => 'Le champ :attribute ne correspond pas au format :format.',\n    'decimal'              => 'Le champ :attribute doit avoir :decimal décimales.',\n    'declined'             => 'Le champ :attribute doit être refusé.',\n    'declined_if'          => 'Le champ :attribute doit être refusé quand :other vaut :value.',\n    'different'            => 'Le champ :attribute et :other doivent être différents.',\n    'digits'               => 'Le champ :attribute doit être de :digits chiffres.',\n    'digits_between'       => 'Le champ :attribute doit être compris entre :min et :max chiffres.',\n    'dimensions'           => 'Le champ :attribute a des dimensions d’image invalides.',\n    'distinct'             => 'Le champ :attribute a une valeur en double..',\n    'doesnt_end_with'      => 'Le champ :attribute ne doit pas se terminer par une des valeurs suivantes: :values.',\n    'doesnt_start_with'    => 'Le champ :attribute ne doit pas commencer par une des valeurs suivantes: :values.',\n    'email'                => 'Le format du champ :attribute n’est pas valide.',\n    'ends_with'            => 'Le champ :attribute doit se terminer par une des valeurs suivantes: :values.',\n    'enum'                 => 'Le champ :attribute n’a pas une valeur valide.',\n    'exists'               => 'Le champ :attribute sélectionné n’est pas valide.',\n    'file'                 => 'Le champ :attribute doit être un fichier.',\n    'filled'               => 'Le champ :attribute doit avoir une valeur.',\n    'gt' => [\n        'array'   => 'Le champ :attribute doit avoir plus que :value éléments.',\n        'file'    => 'Le champ :attribute doit être plus grand que :value kilobytes.',\n        'numeric' => 'Le champ :attribute doit être supérieur à :value.',\n        'string'  => 'Le champ :attribute doit avoir plus que :value caractères.',\n    ],\n    'gte' => [\n        'array'   => 'Le champ :attribute doit avoir au moins :value éléments.',\n        'file'    => 'Le champ :attribute doit faire au moins :value kilobytes.',\n        'numeric' => 'Le champ :attribute doit être supérieur ou égal à :value.',\n        'string'  => 'Le champ :attribute doit avoir au moins :value caractères.',\n    ],\n    'image'                => 'Le champ :attribute doit être une image.',\n    'in'                   => 'Le champ :attribute sélectionné n’est pas valide.',\n    'in_array'             => 'Le champ :attribute n’existe pas dans :other.',\n    'integer'              => 'Le champ :attribute doit être un entier.',\n    'ip'                   => 'Le champ :attribute doit être une adresse IP valide.',\n    'ipv4'                 => 'Le champ :attribute doit être une adresse IPv4.',\n    'ipv6'                 => 'Le champ :attribute doit être une adresse IPv6.',\n    'json'                 => 'Le champ :attribute doit être une chaîne JSON.',\n    'lowercase'            => 'Le champ :attribute doit être en minuscules.',\n    'lt'                   => [\n        'array'   => 'Le champ :attribute doit avoir moins de :value éléments.',\n        'file'    => 'Le champ :attribute doit faire moins de :value kilobytes.',\n        'numeric' => 'Le champ :attribute doit valoir moins de :value.',\n        'string'  => 'Le champ :attribute doit faire moins de :value caractères.',\n    ],\n    'lte'                  => [\n        'array'   => 'Le champ :attribute doit avoir au maximum :value éléments.',\n        'file'    => 'Le champ :attribute doit faire au maximum :value kilobytes.',\n        'numeric' => 'Le champ :attribute doit valoir au maximum :value.',\n        'string'  => 'Le champ :attribute doit faire au maximum :value caractères.',\n    ],\n    'mac_address'          => 'Le champ :attribute doit être une adresse MAC valide.',\n    'max'                  => [\n        'numeric' => 'Le champ :attribute ne peut pas être supérieure à :max.',\n        'file'    => 'Le champ :attribute ne peut pas être supérieure à :max kilooctets.',\n        'string'  => 'Le champ :attribute ne peut pas être supérieure à :max caractères.',\n        'array'   => 'Le champ :attribute ne peut pas être supérieure à :max objets.',\n    ],\n    'max_digits'           => 'Le champ :attribute ne doit pas avoir plus de :max décimales.',\n    'mimes'                => 'Le champ :attribute doit être un fichier de type : :values.',\n    'mimetypes'            => 'Le champ :attribute doit être un fichier de type : :values.',\n    'min'                  => [\n        'numeric' => 'Le champ :attribute doit être au minimum de :min.',\n        'file'    => 'Le champ :attribute doit être au minimum de :min kilooctets.',\n        'string'  => 'Le champ :attribute doit être au minimum de :min caractères.',\n        'array'   => 'Le champ :attribute doit être au minimum de :min objets.',\n    ],\n    'min_digits'           => 'Le champ :attribute doit avoir au moins :min décimales.',\n    'missing'              => 'Le champ :attribute ne doit pas être saisi.',\n    'missing_if'           => 'Le champ :attribute ne doit pas être saisi quand :other vaut :value.',\n    'missing_unless'       => 'Le champ :attribute ne doit pas être saisi sauf si :other vaut :value.',\n    'missing_with'         => 'Le champ :attribute ne doit pas être saisi quand :values est présent.',\n    'missing_with_all'     => 'Le champ :attribute ne doit pas être saisi quand :values sont présents.',\n    'multiple_of'          => 'Le champ :attribute doit être un multiple de :value.',\n    'not_in'               => 'Le champ :attribute sélectionné n’est pas valide.',\n    'not_regex'            => 'Le format du champ :attribute n’est pas valide.',\n    'numeric'              => 'Le champ :attribute doit être un nombre.',\n    'password'             => [\n        'letters'       => 'Le champ :attribute doit contenir au moins une lettre.',\n        'mixed'         => 'Le champ :attribute doit contenir au moins une lettre majuscule et une lettre minuscule.',\n        'numbers'       => 'Le champ :attribute doit contenir au moins un chiffre.',\n        'symbols'       => 'Le champ :attribute doit contenir au moins un symbole.',\n        'uncompromised' => 'La valeur choisie pour :attribute est apparue dans une fuite de données. Veuillez choisir un(e) :attribute différent.',\n    ],\n    'present'              => 'Le champ :attribute doit être présent.',\n    'prohibited'           => 'Le champ :attribute est interdit.',\n    'prohibited_if'        => 'Le champ :attribute est interdit quand :other vaut :value.',\n    'prohibited_unless'    => 'Le champ :attribute est interdit sauf si :other est dans :values.',\n    'prohibits'            => 'Le champ :attribute interdit :other d’être reseigné.',\n    'regex'                => 'Le format du champ :attribute n’est pas valide.',\n    'required'             => 'Le champ :attribute est obligatoire.',\n    'required_array_keys'  => 'Le champ :attribute doit contenir des entrées pour: :values.',\n    'required_if'          => 'Le champ :attribute est obligatoire quand :other est :value.',\n    'required_if_accepted' => 'Le champ :attribute est obligatoire quand :other est accepté.',\n    'required_unless'      => 'Le champ :attribute est nécessaire à moins que :other soit dans :values.',\n    'required_with'        => 'Le champ :attribute est obligatoire quand :values est présent.',\n    'required_with_all'    => 'Le champ :attribute est requis lorsque :values est présent.',\n    'required_without'     => 'Le champ :attribute est obligatoire quand :values est absent.',\n    'required_without_all' => 'Le champ :attribute est requis lorsque aucun de :values n’est présent.',\n    'same'                 => 'Le champ :attribute et :other doivent correspondre.',\n    'size'             => [\n        'numeric' => 'Le champ :attribute doit être de :size.',\n        'file'    => 'Le champ :attribute doit être de :size kilooctets.',\n        'string'  => 'Le champ :attribute doit être de :size caractères.',\n        'array'   => 'Le champ :attribute doit contenir :size objets.',\n    ],\n    'starts_with'          => 'Le champ :attribute doit commencer par l’un des suivants: :values.',\n    'string'               => 'La champ :attribute doit être une chaîne de caractères.',\n    'timezone'             => 'La champ :attribute doit être une zone valide.',\n    'unique'               => 'Le champ :attribute doit être unique. La valeur renseignée est déjà utilisée.',\n    'uploaded'             => 'La champ :attribute n’a pas téléchargé de données.',\n    'uppercase'            => 'Le champ :attribute doit être en majuscules.',\n    'url'                  => 'Le champ :attribute n’est pas une URL valide.',\n    'ulid'                 => 'Le champ :attribute doit être un ULID valide.',\n    'uuid'                 => 'Le champ :attribute doit être un UUID valide.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/fr.json",
    "content": "{\n  \"Check For Updates\": \"Vérifier les mises à jour\",\n  \"Install Packages\": \"Installer des packages\",\n  \"Manage Themes\": \"Gérer les thèmes\",\n  \"Manage Plugins\": \"Gérer les plugins\",\n  \"Project\": \"Projet\",\n  \"Owner\": \"Auteur\",\n  \"Plugins\": \"Plugins\",\n  \"Recommended\": \"Recommandé\",\n  \"Disabled\": \"Désactivé\",\n  \"Current Build\": \"Version actuelle\",\n  \"Updates Available\": \"Mises à jour disponibles\",\n  \"Up to Date\": \"À jour\",\n  \"Latest Build\": \"Dernière version\",\n  \"View Changelog\": \"Voir le Changelog\",\n  \"Software Updates\": \"Mise à jour\",\n  \"Update the system modules and plugins.\": \"Mise à jour du système, gestion et installation des plugins et thèmes.\",\n  \"General\": \"Général\",\n  \"Mail\": \"Poster\",\n  \"Utilities\": \"Utilitaires\",\n  \"Settings\": \"Réglages\",\n  \"Show All Settings\": \"Afficher tous les paramètres\",\n  \"Unable to find the specified settings.\": \"Les paramètres spécifiés sont introuvables.\",\n  \"The settings page is missing a Model definition.\": \"La page de réglages nécessite la définition d’un Model.\",\n  \":name settings updated\": \"Les réglages pour :name ont étés mis à jour avec succès.\",\n  \"Return to System Settings\": \"Retourner à la page des réglages du système\",\n  \"Search Settings...\": \"Rechercher un paramètre...\",\n  \"Disable mail branding CSS\": \"Désactiver le CSS de la marque de messagerie\",\n  \"Manage Sites\": \"Gérer les sites\",\n  \"Manage the websites available for this application.\": \"Gérer les sites Web disponibles pour cette application.\",\n  \"Marketplace\": \"Marché\",\n  \"There is no documentation provided.\": \"Aucune documentation fournie.\",\n  \"Documentation\": \"Documentation\",\n  \"Upgrade Guide\": \"Guide de mise à jour\",\n  \"License\": \"Licence\",\n  \"Attach to Project\": \"Attacher un projet\",\n  \"Manage Updates\": \"Gérer les mises à jour\",\n  \"Software Update\": \"Mise à jour\",\n  \"Return to Software Updates\": \"Retourner aux mises à jour du système\",\n  \"Try Again\": \"Réessayer\",\n  \"Unpacking application files\": \"Décompression des fichiers de l’application\",\n  \"Update Failed\": \"Échec de la mise à jour\",\n  \"Unpacking plugin: :name\": \"Décompression du plugin : :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Le site principal est utilisé par défaut et ne peut pas être supprimé.\",\n  \"Disabled sites are not shown on the frontend.\": \"Les sites désactivés ne sont pas affichés sur le frontend.\",\n  \"Enabled in the Admin Panel\": \"Activé dans le panneau d'administration\",\n  \"Configuration\": \"Configuration\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Utilisez ceci si vous souhaitez que le site soit activé dans le panneau d'administration.\",\n  \"Install\": \"Installer\",\n  \"Sync Project\": \"Synchroniser le projet\",\n  \"Name\": \"Nom\",\n  \"Unique Code\": \"Code unique\",\n  \"Theme\": \"Thème\",\n  \"Sites\": \"Sites\",\n  \"Create Site\": \"Créer un site\",\n  \"Base URL\": \"URL de base\",\n  \"Status\": \"Statut\",\n  \"Current default value: :value\": \"Valeur par défaut actuelle : :value\",\n  \"Locale\": \"Local\",\n  \"Timezone\": \"Fuseau horaire\",\n  \"Custom application URL\": \"URL d'application personnalisée\",\n  \"Override the application URL when this site is active.\": \"Remplacer l'URL de l'application lorsque ce site est actif.\",\n  \"Use a CMS route prefix\": \"Utiliser un préfixe de route CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Un préfixe peut identifier ce site lors de l'utilisation d'un nom d'hôte partagé.\",\n  \"Define matching hostnames\": \"Définir les noms d'hôte correspondants\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Spécifiez les noms de domaine et les modèles qui doivent être utilisés pour servir ce site.\",\n  \"Display a style for this site\": \"Afficher une couleur pour ce site\",\n  \"To help identify this site, display a color in the admin panel.\": \"Pour aider à identifier ce site, affichez une couleur dans le panneau d'administration.\",\n  \"Save\": \"sauvegarder\",\n  \"Back\": \"Retour\",\n  \"Edit\": \"Modifier\",\n  \"Refresh\": \"Rafraîchir\",\n  \"Save and Close\": \"Sauver et fermer\",\n  \"Use Default\": \"Utiliser la valeur par défaut\",\n  \"Use Custom\": \"Utiliser personnalisé\",\n  \"Specify a custom locale code.\": \"Spécifiez un code de paramètres régionaux personnalisé.\",\n  \"Failed\": \"Echoué\",\n  \"or\": \"ou\",\n  \"Code\": \"Code\",\n  \"October CMS Marketplace\": \"Marketplace de October CMS\",\n  \"Visit the :link to add some.\": \"Le projet n'a pas de plugins ou de thèmes. Visitez le : lien pour en ajouter.\",\n  \"Buy Now\": \"Acheter maintenant\",\n  \"Updating package manager\": \"Téléchargement du gestionnaire de packages\",\n  \"Updating application files\": \"Téléchargement des fichiers de l’application\",\n  \"Setting build number\": \"Détermination du numéro de version\",\n  \"Finishing update process\": \"Finalisation du processus de mise à jour\",\n  \"Installing plugin: :name\": \"Téléchargement du plugin : :name\",\n  \"Finishing installation process\": \"Fin du processus d’installation\",\n  \"Removing theme: :name\": \"Suppression du thème: :name\",\n  \"Please specify a Theme name to install.\": \"Saisir le nom d’un thème à installer.\",\n  \"Installing theme: :name\": \"Téléchargement du thème : :name\",\n  \"Extracting theme: :name\": \"Extraction du thème : :name\",\n  \"Seeding theme: :name\": \"Suppression du thème : :name\",\n  \"Removing plugin: :name\": \"Suppression du plugin: :name\",\n  \"Please specify a Plugin name to install.\": \"Saisir le nom d’un plugin à installer.\",\n  \"Update process complete\": \"Mise à jour terminée avec succès.\",\n  \"Package installed successfully\": \"Le plugin a été installé avec succès.\",\n  \"Check Dependencies\": \"Vérifier les dépendances\",\n  \"Install Dependencies\": \"Installer les dépendances\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Il manque des dépendances essentielles pour le fonctionnement du système.\",\n  \"License Key\": \"Clé de license\",\n  \"How to find your License Key\": \"Comment trouver votre clé de license\",\n  \"The password attribute is required.\": \"Le mot de passe est requis.\",\n  \"The login attribute is required.\": \"L’identifiant est requis.\",\n  \"Cannot login user since they are not activated.\": \"Impossible de s’identifier car l’utilisateur n’est pas activé.\",\n  \"Cannot login user since they are banned.\": \"Impossible de s’identifier car l’utilisateur est banni.\",\n  \"Cannot login user since they are suspended.\": \"Impossible de s’identifier car l’utilisateur est temporisé.\",\n  \"A user was not found with the given credentials.\": \"Aucun utilisateur nImpossible de s’identifier car l’utilisateura été trouvé avec les identifiants donnés.\",\n  \"A user was found but the password did not match.\": \"Un utilisateur a été trouvé, mais le mot de passse ne correspond pas.\",\n  \"User is not logged in\": \"L’utilisateur n’est pas connecté\",\n  \"Register Software\": \"Enregistrer le logiciel\",\n  \"View the Dashboard\": \"Voir le tableau de bord\",\n  \"Set the Default Dashboard\": \"Gérer le tableau de bord par défaut\",\n  \"Log File\": \"Fichier journal\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Aucun cryptage\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Configuration des envois d'e-mails\",\n  \"Manage email configuration.\": \"Gérer la configuration des envois d'e-mails.\",\n  \"Sender Name\": \"Nom de l’expéditeur\",\n  \"Sender Email\": \"Adresse e-mail de l’expéditeur\",\n  \"Mail Method\": \"Méthode d’envoi\",\n  \"SMTP Address\": \"Adresse SMTP\",\n  \"SMTP Port\": \"Port SMTP\",\n  \"SMTP Encryption Protocol\": \"Protocole de sécurisation des échanges SMTP\",\n  \"SMTP Authorization Required\": \"Authentification SMTP requise\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Cocher cette case si le serveur SMTP nécessite une authentification.\",\n  \"Username\": \"Identifiant\",\n  \"Password\": \"Mot de passe\",\n  \"Sendmail Path\": \"Chemin vers Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Saisir le chemin du programme Sendmail.\",\n  \"Mailgun Domain\": \"Domaine Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Saisir le nom de domaine Mailgun.\",\n  \"Mailgun Secret\": \"Clé secrète Mailgun\",\n  \"Enter your Mailgun API key.\": \"Saisir votre clé API Mailgun.\",\n  \"SES Key\": \"Clé SES\",\n  \"Enter your SES API key\": \"Saisir votre clé API SES\",\n  \"SES Secret\": \"Clé secrète SES\",\n  \"Enter your SES API secret key\": \"Saisir votre clé secrète de l’API SES\",\n  \"SES Region\": \"Région SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Saisir votre région SES (e.g. us-east-1)\",\n  \"Postmark Token\": \"Clé secrète Postmark\",\n  \"Enter your Postmark API secret key\": \"Entrez votre clé secrète de l’API Postmark\",\n  \"Define administrator roles\": \"Définir les rôles administrateur\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restreindre l'accès à ce site à l'administrateur ayant les rôles suivants.\",\n  \"Group\": \"Groupe\",\n  \"Create Group\": \"Créer un groupe\",\n  \"Site Group\": \"Groupe du site\",\n  \"Site Groups\": \"Groupes de sites\",\n  \"Manage Site Groups\": \"Gérer les groupes de sites\",\n  \"Group Name\": \"Nom du groupe\",\n  \"All Sites\": \"Tous les sites\",\n  \"Manage Backend Preferences\": \"Gérer les préférences de l’interface d’administration\",\n  \"Manage Code Editor Preferences\": \"Gérer les préférences de l’éditeur de code\",\n  \"Customize Backend Styles\": \"Personnaliser l’interface d’administration\",\n  \"Mail Templates\": \"Modèles des e-mails\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Gérer les modèles et maquettes des e-mails envoyés aux utilisateurs et aux administrateurs.\",\n  \"Mail Branding\": \"Personnalisation des courriels\",\n  \"Modify the colors and appearance of mail templates.\": \"Modifier les couleurs et l’apparence des modèles de courriel.\",\n  \"Event Log\": \"Journal des évènements\",\n  \"View system log messages with their recorded time and details.\": \"Affiche les évènements des journaux systèmes avec leur date et les détails.\",\n  \"Request Log\": \"Journal des requêtes\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Affiche les requêtes erronées ou redirigées, comme les erreurs 404.\",\n  \"Log Settings\": \"Paramètres du journal\",\n  \"Specify which areas should use logging.\": \"Spécifiez les zones qui doivent utiliser la journalisation.\",\n  \"Test message sent.\": \"Le message de test a été envoyé avec succès.\",\n  \"New Layout\": \"Nouvelle maquette\",\n  \"New Partial\": \"Nouveau modèle partiel\",\n  \"New Template\": \"Nouveau modèle\",\n  \"Template\": \"Modèle\",\n  \"Templates\": \"Modèles\",\n  \"Layouts\": \"Maquettes\",\n  \"Partials\": \"Modèles partiels\",\n  \"Partial\": \"Modèle partiel\",\n  \"Mail Partials\": \"Modèles partiels des courriels\",\n  \"Layout\": \"Maquette\",\n  \"Mail Layouts\": \"Maquettes des e-mails\",\n  \"Unique code used to refer to this template\": \"Code unique utilisé pour identifier ce modèle\",\n  \"-- No layout --\": \"-- Aucune maquette --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Texte brut\",\n  \"Disable automatic inline CSS\": \"Désactiver le CSS automatique en ligne\",\n  \"Options\": \"Options\",\n  \"Subject\": \"Sujet\",\n  \"Email message subject\": \"Sujet de l’e-mail\",\n  \"Description\": \"Description\",\n  \"Drivers Not Installed\": \"Les drivers ne sont pas installés\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Cette méthode d’envoi d’e-mails nécessite que le plugin \\\":plugin\\\" soit installé avant de pouvoir envoyer des e-mails.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID de l’évènement\",\n  \"Level\": \"Niveau\",\n  \"Date & Time\": \"Date et heure\",\n  \"Message\": \"Message\",\n  \"Logging\": \"Enregistrement de données\",\n  \"Log Bad Requests\": \"Enregistrer les requêtes erronées.\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Requêtes du navigateur qui peuvent nécessiter une attention particulière, telles que les erreurs 404.\",\n  \"Log Theme Changes\": \"Enregistrement des modifications du thème\",\n  \"When a change is made to the theme using the backend.\": \"Lorsqu’une modification est apportée au thème à l’aide du back-end.\",\n  \"Log System Events\": \"Enregistrer les événements du système\",\n  \"Store system events in the database in addition to the file-based log.\": \"Stockez les événements système dans la base de données en plus du journal basé sur les fichiers.\",\n  \"Background\": \"Arrière-plan\",\n  \"Body background\": \"Arrière-plan du corps\",\n  \"Content background\": \"Arrière-plan du contenu\",\n  \"Inner content background\": \"Arrière-plan du contenu intérieur\",\n  \"Buttons\": \"Boutons\",\n  \"Button text color\": \"Couleur du texte des boutons\",\n  \"Primary button background\": \"Arrière-plan du bouton principal\",\n  \"Positive button background\": \"Arrière-plan du bouton positif\",\n  \"Negative button background\": \"Arrière-plan du bouton négatif\",\n  \"Typography\": \"Typographie\",\n  \"Header color\": \"Couleur de l’en-tête\",\n  \"Headings color\": \"Couleur des titres\",\n  \"Text color\": \"Couleur du texte\",\n  \"Link color\": \"Couleur des liens\",\n  \"Footer color\": \"Couleur du pied de page\",\n  \"Borders\": \"Bordures\",\n  \"Body border color\": \"Couleur de la bordure du corps\",\n  \"Subcopy border color\": \"Couleur de la bordure du pré copyright\",\n  \"Table border color\": \"Couleur de la bordure de la table\",\n  \"Components\": \"Composants\",\n  \"Panel background\": \"Arrière-plan du panneau\",\n  \"Promotion background\": \"Arrière-plan de la promotion\",\n  \"Promotion border color\": \"Couleur de la bordure de la promotion\",\n  \"Customize Mail Appearance\": \"Personnaliser l’apparence du courriel\",\n  \"Version\": \"Version\",\n  \"Enabled\": \"Plugin activé\",\n  \"Latest\": \"Le plus récent\",\n  \"Log ID\": \"ID du journal\",\n  \"Counter\": \"Compteur\",\n  \"Referers\": \"Référents\",\n  \"URL\": \"Adresse URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Ce journal affiche une liste des erreurs potentielles de l’application, telles que les exceptions et les informations de débogage.\",\n  \"Event\": \"Évènement\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Ce journal affiche une liste de requêtes potentiellement suspectes. Par exemple, si un visiteur ouvre une page introuvable du CMS, une ligne avec le code statut 404 est alors créée.\",\n  \"There were no detected referrers to this URL.\": \"Il n'y a pas de référent détecté vers cette URL.\",\n  \"Request\": \"Requête\",\n  \"Event log emptied\": \"Le journal des évènements a été purgé avec succès.\",\n  \"Empty Event Log\": \"Purger le journal des évènements\",\n  \"Emptying Event Log...\": \"Purge du journal des évènements…\",\n  \"Return to Event Log\": \"Retour au journal des évènements\",\n  \"Installed\": \"Installé\",\n  \"Primary Site\": \"Site principal\",\n  \"Refresh Data\": \"Actualiser les données\",\n  \"Remove Data\": \"Supprimer les données\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Êtes-vous sûr(e) ?\",\n  \"Reset Plugin Data\": \"Réinitialiser les données du plugin\",\n  \"Enable Plugins\": \"Activer les plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Êtes-vous sûr de vouloir :action ces plugins ?\",\n  \"enable\": \"activer\",\n  \"disable\": \"désactiver\",\n  \"Disable Plugins\": \"Désactiver les plugins\",\n  \"Select Action...\": \"Sélectionner une action...\",\n  \"Data has been removed.\": \"Les données ont été supprimées.\",\n  \"Plugin has been removed from the file system.\": \"Le plugin a été supprimé du système de fichiers.\",\n  \"search plugins to install...\": \"Recherche des plugins à installer…\",\n  \"Plugin has been disabled by configuration.\": \"Le plugin a été désactivée dans la configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Le plugin a des dépendances manquantes ou a été désactivé par le système.\",\n  \"search themes to install...\": \"Recherche des thèmes à installer…\",\n  \"Install Theme\": \"Installer un thème\",\n  \"Theme Name\": \"Nom du thème\",\n  \"Install Plugin\": \"Installer un plugin\",\n  \"Plugin Name\": \"Nom du plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Nommer le plugin avec un nom de code unique. Par exemple, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Nommer le thème avec un nom de code unique. Par exemple, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Sélectionnez la méthode d'installation\",\n  \"Make a Copy (Recommended)\": \"Faire une copie (Recommandé)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Faire une copie de ce thème pour le personnaliser et gérer manuellement les mises à jour futures.\",\n  \"Install with Composer\": \"Installer avec Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Améliorer le thème en utilisant un thème enfant afin de conserver les futures mises à jour de l'auteur du thème initial.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Importer les blueprints, les fichiers de langue et le contenu de la base de données pour ce thème. Vous pourrez le faire plus tard via les paramètres du thème du site.\",\n  \"Change Status\": \"Changer le statut\",\n  \"Site Definitions\": \"Définitions du site\",\n  \"The resizer file ':name' is not found.\": \"Le fichier de redimensionnement « :name » est introuvable.\",\n  \"The combiner file ':name' is not found.\": \"Le fichier de combinaison « :name » est introuvable.\",\n  \"Core version information\": \"Informations sur la version du noyau\",\n  \"View Available Updates\": \"Voir les mises à jour disponibles\",\n  \"System Build\": \"Build du système\",\n  \"System Issues\": \"Problèmes du système\",\n  \"View issues\": \"Voir les problèmes\",\n  \"View event log\": \"Voir le journal des événements\",\n  \"Request log\": \"Journal des requêtes\",\n  \"Bad requests\": \"Mauvaises requêtes\",\n  \"Issues found\": \"Problèmes trouvés\",\n  \"No issues\": \"Aucun problème\",\n  \"SMTP Timeout\": \"Délai d’expiration SMTP\",\n  \"Connection timeout in seconds (default: 30)\": \"Délai d’expiration de la connexion en secondes (par défaut : 30)\",\n  \"System Updates\": \"Mise à jour\",\n  \"Find a Setting...\": \"Rechercher un paramètre...\",\n  \"Return to System Updates\": \"Retourner aux mises à jour du système\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Importer les blueprints, les fichiers de langue et le contenu de la base de données pour ce thème. Vous pourrez le faire plus tard via les paramètres du thème du site.\"\n}"
  },
  {
    "path": "modules/system/lang/hu/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Forráskód',\n        'quote' => 'Idézet',\n        'code' => 'Kód',\n        'header1' => 'Címsor 1',\n        'header2' => 'Címsor 2',\n        'header3' => 'Címsor 3',\n        'header4' => 'Címsor 4',\n        'header5' => 'Címsor 5',\n        'header6' => 'Címsor 6',\n        'bold' => 'Félkövér',\n        'italic' => 'Dölt',\n        'unorderedlist' => 'Rendezett lista',\n        'orderedlist' => 'Számozott lista',\n        'video' => 'Videó',\n        'image' => 'Kép',\n        'link' => 'Hivatkozás',\n        'horizontalrule' => 'Vonal beszúrása',\n        'fullscreen' => 'Teljes képernyő',\n        'preview' => 'Előnézet'\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Hivatkozás beszúrása',\n        'insert_image' => 'Kép beszúrása',\n        'insert_video' => 'Videó beszúrása',\n        'insert_audio' => 'Audió beszúrása',\n        'invalid_file_empty_insert' => 'Hivatkozás készítéséhez jelöljön ki egy szövegrészt.',\n        'invalid_file_single_insert' => 'Kérjük jelöljön ki egy fájlt.',\n        'invalid_image_empty_insert' => 'Válasszon ki legalább egy képet a beszúráshoz.',\n        'invalid_video_empty_insert' => 'Válasszon ki legalább egy videót a beszúráshoz.',\n        'invalid_audio_empty_insert' => 'Válasszon ki legalább egy audiót a beszúráshoz.'\n    ],\n    'alert' => [\n        'error' => 'Hiba',\n        'confirm' => 'Elfogadás',\n        'dismiss' => 'Elutasítás',\n        'confirm_button_text' => 'Igen',\n        'cancel_button_text' => 'Mégsem',\n        'widget_remove_confirm' => 'Valóban törölni akarja?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Előző hónap',\n        'nextMonth' => 'Következő hónap',\n        'months' => ['január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december'],\n        'weekdays' => ['vasárnap', 'hétfő', 'kedd', 'szerda', 'csütörtök', 'péntek', 'szombat'],\n        'weekdaysShort' => ['va', 'hé', 'ke', 'sze', 'cs', 'pé', 'szo']\n    ],\n    'colorpicker' => [\n        'choose' => 'Mentés',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'összes'\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Szűrés',\n            'clear_button_text' => 'Alaphelyzet',\n        ],\n        'dates' => [\n            'all' => 'összes',\n            'filter_button_text' => 'Szűrés',\n            'reset_button_text' => 'Alaphelyzet',\n            'date_placeholder' => 'Dátum',\n            'after_placeholder' => 'Kezdete',\n            'before_placeholder' => 'Vége'\n        ],\n        'numbers' => [\n            'all' => 'összes',\n            'filter_button_text' => 'Szűrés',\n            'reset_button_text' => 'Alaphelyzet',\n            'min_placeholder' => 'Minimum',\n            'max_placeholder' => 'Maximum'\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Részletek',\n        'hide_stacktrace' => 'Rejtés',\n        'tabs' => [\n            'formatted' => 'Formázott',\n            'raw' => 'Tömörített',\n        ],\n        'editor' => [\n            'title' => 'Forráskód szerkesztő',\n            'description' => 'Az operációs rendszert úgy kell beállítani, hogy figyelembe vegye az URL sémát.',\n            'openWith' => 'Megnyitás mint',\n            'remember_choice' => 'Kiválasztott beállítások megjegyzése ebben a munkamenetben',\n            'open' => 'Megnyitás',\n            'cancel' => 'Mégsem'\n        ]\n    ],\n    'upload' => [\n        'max_files' => 'Nem tölthet fel több fájlt.',\n        'invalid_file_type' => 'Ilyen típusú fájl nem tölthető fel.',\n        'file_too_big' => 'A fájl mérete túl nagy ({{filesize}}MB). Maximum ennyi lehet: {{maxFilesize}}MB.',\n        'response_error' => 'A szerver {{statusCode}} kóddal tért vissza.',\n        'remove_file' => 'Fájl eltávolítása',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/hu/lang.php",
    "content": "<?php return [\n  'installer' => [\n    'app_config_section' => 'Weboldal konfigurálása',\n    'license_section' => 'Licenc kulcs',\n    'dependencies_section' => 'Függőségek telepítése',\n    'locale_select_label' => 'Válasszon nyelvet',\n    'locale_select_error' => 'A(z) :code nyelvi kód helytelen, kérjük módosítsa azt.',\n    'app_url_label' => 'Honlap webcíme',\n    'backend_uri_label' => 'Admin felület címe',\n    'backend_uri_comment' => 'A weboldal védelme érdekében használjon egyéni címet az adminisztrációs panel eléréséhez.',\n    'license_key_label' => 'Licenc kulcs',\n    'license_key_comment' => 'A folytatáshoz adjon meg egy érvényes licenc kulcsot.',\n    'license_thanks_comment' => 'Köszönjük, hogy az October CMS rendszert választotta!',\n    'license_expired_comment' => 'A licenc kifizetetlen vagy lejárt. Kérjük, látogasson el az octobercms.com webhelyre, hogy licenset szerezzen.',\n    'too_many_failures_label' => 'Túl sok sikertelen próbálkozás',\n    'non_interactive_label' => 'Nem interaktív mód észlelve',\n    'non_interactive_comment' => 'Ha ezt a hibát látja, használja ezeket a parancsokat.',\n    'install_failed_label' => 'Sikertelen telepítés',\n    'install_failed_comment' => 'Próbálja meg manuálisan futtatni ezeket a parancsokat.',\n    'database_engine_label' => 'Adatbázis motor',\n    'database_host_label' => 'Adatbázis hoszt',\n    'database_host_comment' => 'Az adatbázis kapcsolat gépneve.',\n    'database_port_label' => 'Adatbázis port',\n    'database_port_comment' => '(Opcionális) Csatlakozáshoz szükséges port.',\n    'database_name_label' => 'Adatbázis neve',\n    'database_name_comment' => 'Adja meg a használni kívánt adatbázis nevét',\n    'database_login_label' => 'Adatbázis belépés',\n    'database_login_comment' => 'Felhasználó adatbázis jogosultságokkal.',\n    'database_pass_label' => 'Adatbázis jelszó',\n    'database_pass_comment' => 'Jelszó a megadott felhasználó számára.',\n    'database_path_label' => 'Adatbázis útvonal',\n    'database_path_comment' => 'A fájl alapú tároláshoz adjon meg egy elérési utat az weboldal gyökérkönyvtárához képest.',\n    'migrate_database_comment' => 'Kérjük, migrálja az adatbázist a következő paranccsal',\n    'visit_backend_comment' => 'Ezután nyissa meg az adminisztrációs felületet ezen a webcímen',\n    'open_configurator_comment' => 'Nyissa meg a weboldalt a böngészőjében',\n  ],\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Visszatérés az alapokhoz',\n  ],\n  'directory' => [\n    'create_fail' => 'Nem hozható létre a könyvtár: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Nem hozható létre a fájl: :name',\n  ],\n  'combiner' => [],\n  'resizer' => [],\n  'system' => [\n    'name' => 'Rendszer',\n    'menu_label' => 'Rendszer',\n    'categories' => [\n      'cms' => 'Weboldal',\n      'misc' => 'Egyebek',\n      'logs' => 'Naplók',\n      'mail' => 'Levelezés',\n      'shop' => 'Bolt',\n      'team' => 'Csapat',\n      'users' => 'Felhasználók',\n      'system' => 'Rendszer',\n      'social' => 'Közösség',\n      'backend' => 'Admin',\n      'events' => 'Események',\n      'customers' => 'Vevők',\n      'my_settings' => 'Beállításaim',\n      'notifications' => 'Értesítések',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Téma',\n    'unnamed' => 'Névtelen téma',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Téma telepítése',\n    'installed' => 'Telepítve',\n    'no_themes' => 'A piactérről még nem lett telepítve téma.',\n    'recommended' => 'Ajánlott',\n    'remove_confirm' => 'Valóban törölni akarja a témát?',\n  ],\n  'plugin' => [\n    'label' => 'Bővítmény',\n    'unnamed' => 'Névtelen bővítmény',\n    'name' => [],\n    'by_author' => 'Fejlesztő: :name',\n  ],\n  'plugins' => [\n    'install' => 'Bővítmények telepítése',\n    'install_products' => 'Bővítmények telepítése',\n    'installed' => 'Telepítve',\n    'no_plugins' => 'A piactérről még nem lett telepítve bővítmény.',\n    'recommended' => 'Ajánlott',\n    'plugin_label' => 'Bővítmény',\n    'bulk_actions_label' => 'Csoportos műveletek',\n    'check_yes' => 'Igen',\n    'check_no' => 'Nem',\n    'unfrozen' => 'Frissítés engedélyezve',\n    'freeze' => 'nem frissíthetőek',\n    'unfreeze' => 'frissíthetőek',\n    'refresh' => 'Frissítés',\n    'remove' => 'Eltávolítás',\n    'freeze_label' => 'Frissítések tiltása',\n    'unfreeze_label' => 'Frissítések engedélyezése',\n    'freeze_success' => 'A kijelölt bővítmények frissítése sikeresen tiltva lett.',\n    'unfreeze_success' => 'A kijelölt bővítmények frissítése sikeresen engedélyezve lett.',\n    'enable_success' => 'A kijelölt bővítmények sikeresen engedélyezve lettek.',\n    'disable_success' => 'A kijelölt bővítmények sikeresen tiltva lettek.',\n    'refresh_success' => 'A kijelölt bővítmények adatai sikeresen törölve lettek.',\n    'remove_confirm' => 'Valóban törölni akarja a kijelölt bővítményeket?',\n    'remove_success' => 'A bővítmények sikeresen eltávolításra kerültek.',\n  ],\n  'project' => [\n    'attach' => 'Csatolás',\n    'detach' => 'leválasztás',\n    'none' => 'Nincs',\n    'id' => [\n      'missing' => 'Adjon meg egy projekt azonosítót.',\n    ],\n    'detach_confirm' => 'Biztosan le akarja választani a projektet?',\n    'unbind_success' => 'A projekt leválasztása sikerült.',\n  ],\n  'settings' => [\n    'search' => 'Keresés...',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL kapcsolat szükséges',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Erre a sablonra hivatkozásként használt egyedi név.',\n    'test_send' => 'Tesztüzenet küldése',\n    'test_confirm' => 'Teszt üzenet küldése a(z) \":email\" címre. Folytatja?',\n    'creating' => 'Sablon létrehozása...',\n    'creating_layout' => 'Elrendezés létrehozása...',\n    'saving' => 'Sablon mentése...',\n    'saving_layout' => 'Elrendezés mentése...',\n    'delete_confirm' => 'Valóban törölni akarja a sablont?',\n    'delete_layout_confirm' => 'Valóban törölni akarja az elrendezést?',\n    'deleting' => 'Sablon törlése...',\n    'deleting_layout' => 'Elrendezés törlése...',\n    'sending' => 'Üzenet küldése folyamatban...',\n    'return' => 'Vissza a sablonokhoz',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Címsor',\n      'paragraph' => 'Ez egy bekezdés Lorem Ipsum szöveggel és hivatkozással. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Elem',\n        'description' => 'Leírás',\n        'price' => 'Ár',\n        'centered' => 'középre igazítva',\n        'right_aligned' => 'jobbra igazítva',\n      ],\n      'buttons' => [\n        'primary' => 'Elsődleges gomb',\n        'positive' => 'Pozitív gomb',\n        'negative' => 'Negatív gomb',\n      ],\n      'panel' => 'Kiemelt szöveg',\n      'more' => 'Még több szöveg',\n      'promotion' => 'Kupon kód: OCTOBER',\n      'subcopy' => 'Utóirat helye',\n      'thanks' => 'Üdvözlettel',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Fejlesztő',\n    'plugin_not_found' => 'A bővítmény nem található',\n    'plugin_version_not_found' => 'Bővítmény verzió nem található',\n    'theme_not_found' => 'A téma nem található',\n    'core_build' => 'Új verzió: :build',\n    'core_build_help' => 'Elérhető a legújabb hivatalos kiadás.',\n    'changelog' => 'Kiadott verziók',\n    'changelog_view_details' => 'Részletek',\n    'themes' => 'Témák',\n    'plugin_version_none' => 'Új bővítmény',\n    'plugin_current_version' => 'Aktuális verzió',\n    'theme_new_install' => 'Új téma telepítése.',\n    'theme_extracting' => 'Téma kicsomagolása: :name',\n    'update_label' => 'Honlap frissítése',\n    'update_loading' => 'Frissítések betöltése...',\n    'force_label' => 'Frissítés kényszerítése',\n    'found' => [\n      'label' => 'Új verzió elérhető!',\n      'help' => 'Töltse le a legújabb frissítéseket.',\n    ],\n    'none' => [\n      'label' => 'A weboldal naprakész',\n      'help' => 'Gratulálunk! A weboldala naprakész.',\n    ],\n    'important_action' => [\n      'empty' => 'Művelet kiválasztása',\n      'confirm' => 'Frissítés elfogadása',\n      'skip' => 'Frissítés kihagyása (csak most)',\n      'ignore' => 'Frissítés kihagyása (mindig)',\n    ],\n    'important_action_required' => 'Művelet szükséges',\n    'important_view_guide' => 'Frissítési útmutató megtekintése',\n    'important_view_release_notes' => 'Kiadási megjegyzések megtekintése',\n    'important_alert_text' => 'Néhány frissítés körültekintést igényel.',\n    'details_title_plugin' => 'Bővítmény részletei',\n    'details_title_theme' => 'Téma részletei',\n    'details_view_homepage' => 'Weboldal',\n    'details_changelog' => 'Kiadott verziók',\n    'details_changelog_missing' => 'Nincs kiadási jegyzék.',\n    'details_view_license' => 'Licenc megtekintése',\n    'details_current_version' => 'Verzió',\n    'details_author' => 'Fejlesztő',\n  ],\n  'market' => [\n    'menu_description' => 'Bővítmények és témák kezelése és telepítése.',\n    'content_loading' => 'Betöltés...',\n  ],\n  'server' => [\n    'connect_error' => 'Hiba a kiszolgálóhoz való csatlakozáskor.',\n    'response_not_found' => 'A frissítési kiszolgáló nem található.',\n    'response_invalid' => 'Érvénytelen válasz érkezett a kiszolgálóról.',\n    'response_empty' => 'Üres válasz érkezett a kiszolgálóról.',\n    'file_error' => 'Nem sikerült továbbítania a kiszolgálónak a csomagot.',\n    'file_corrupt' => 'A kiszolgálóról letöltött fájl sérült.',\n  ],\n  'behavior' => [\n    'missing_property' => 'A(z) :class osztálynak kell definiálnia a(z) :behavior viselkedés által használt $:property tulajdonságot.',\n  ],\n  'config' => [\n    'not_found' => 'Nem található a(z) :location számára definiált :file konfigurációs fájl.',\n    'required' => 'A(z) :location helyen használt konfigurációnak meg kell adnia egy \\':property\\' értéket.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Nem tömöríthető ki a(z) \\':file\\' fájl.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Kiürítés',\n    'empty_loading' => 'A kiürítés folyamatban...',\n    'empty_success' => 'A kérelem napló kiürítése megtörtént.',\n    'return_link' => 'Vissza a kérelem naplóhoz',\n    'id' => 'Azonosító',\n  ],\n  'permissions' => [\n    'name' => 'Rendszer',\n    'manage_system_settings' => 'Beállítások kezelése',\n    'manage_software_updates' => 'Frissítések és bővítmények kezelése',\n    'access_logs' => 'Naplók megtekintése',\n    'manage_mail_templates' => 'Levél sablonok kezelése',\n    'manage_mail_settings' => 'Levelezési beállítások kezelése',\n    'manage_other_administrators' => 'Adminisztrátorok kezelése',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Érvénytelen elérési útvonal: \\':path\\'',\n    'folder_size_items' => 'fájl',\n  ],\n  'page' => [\n    'custom_error' => [\n      'label' => 'Oldal hiba',\n      'help' => 'Sajnáljuk, de hiba történt, ezért az oldal nem megjeleníthető.',\n    ],\n    'invalid_token' => [\n      'label' => 'Biztonsági kód érvényessége lejárt. Kérjük töltse be újra az oldalt.',\n    ],\n    'maintenance' => [\n      'label' => 'Hamarosan visszatérünk!',\n      'help' => 'A weboldal karbantartás alatt áll. Látogasson vissza később!',\n      'message' => 'Üzenet:',\n      'available_at' => 'Újrapróbálás:',\n    ],\n  ],\n  'pagination' => [\n    'previous' => 'Előző',\n    'next' => 'Következő',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/hu/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'        => 'A(z) :attribute-t el kell fogadni.',\n    'active_url'      => 'A(z) :attribute nem érvényes webcím.',\n    'after'           => 'A(z) :attribute :date utáni dátum kell legyen.',\n    'after_or_equal'  => 'A(z) :attribute :date utáni vagy vele egyenlő dátum kell legyen.',\n    'alpha'           => 'A(z) :attribute csak betűket tartalmazhat.',\n    'alpha_dash'      => 'A(z) :attribute csak betűket, számokat és kötőjeleket tartalmazhat.',\n    'alpha_num'       => 'A(z) :attribute csak betűket és számokat tartalmazhat.',\n    'array'           => 'A(z) :attribute tömb kell legyen.',\n    'before'          => 'A(z) :attribute :date előtti dátum kell legyen.',\n    'before_or_equal' => 'A(z) :attribute :date előtti vagy egyező dátum kell legyen.',\n    'between'        => [\n        'numeric' => 'A(z) :attribute :min - :max között kell legyen.',\n        'file'    => 'A(z) :attribute :min - :max kilobájt között kell legyen.',\n        'string'  => 'A(z) :attribute :min - :max karakter között kell legyen.',\n        'array'   => 'A(z) :attribute :min - :max elem között kell legyen.',\n    ],\n    'boolean'        => 'A(z) :attribute igaz vagy hamis kell legyen.',\n    'confirmed'      => 'A(z) :attribute megerősítés nem egyezik.',\n    'date'           => 'A(z) :attribute nem érvényes dátum.',\n    'date_equals'    => 'A(z) :attribute :date vele egyenlő dátum kell legyen.',\n    'date_format'    => 'A(z) :attribute nem egyezik a(z) :format formátummal.',\n    'different'      => 'A(z) :attribute és a(z) :other eltérő kell legyen.',\n    'digits'         => 'A(z) :attribute :digits számból kell álljon.',\n    'digits_between' => 'A(z) :attribute :min és :max közti számból kell álljon.',\n    'dimensions'     => 'A(z) :attribute kép mérete helytelen.',\n    'distinct'       => 'A(z) :attribute mező többször szerepel.',\n    'email'          => 'A(z) :attribute formátuma érvénytelen.',\n    'ends_with'      => 'A(z) :attribute végének ennek kell lennie: :values.',\n    'exists'         => 'A kiválasztott :attribute érvénytelen.',\n    'file'           => 'A(z) :attribute fájlnak kell lennie.',\n    'filled'         => 'A(z) :attribute értéknek kell lennie.',\n    'gt'             => [\n        'numeric' => 'A(z) :attribute nagyobbnak kell lennie mint :value.',\n        'file'    => 'A(z) :attribute nagyobbnak kell lennie mint :value kilobájt.',\n        'string'  => 'A(z) :attribute nagyobbnak kell lennie mint :value karakter.',\n        'array'   => 'A(z) :attribute többnek kell lennie mint :value elem.',\n    ],\n    'gte'            => [\n        'numeric' => 'A(z) :attribute nagyobbnak vagy egyenlőnek kell lennie mint :value.',\n        'file'    => 'A(z) :attribute nagyobbnak vagy egyenlőnek kell lennie mint :value kilobájt.',\n        'string'  => 'A(z) :attribute nagyobbnak vagy egyenlőnek kell lennie mint :value karakter.',\n        'array'   => 'A(z) :attribute többnek vagy egyenlőnek kell lennie mint :value elem.',\n    ],\n    'image'          => 'A(z) :attribute kép kell legyen.',\n    'in'             => 'A kiválasztott :attribute érvénytelen.',\n    'in_array'       => 'A(z) :attribute mező nem létezik itt: :other.',\n    'integer'        => 'A(z) :attribute egész szám kell legyen.',\n    'ip'             => 'A(z) :attribute érvényes IP cím kell legyen.',\n    'ipv4'           => 'A(z) :attribute értéke IPv4 szabvány legyen.',\n    'ipv6'           => 'A(z) :attribute értéke IPv6 szabvány legyen.',\n    'json'           => 'A(z) :attribute értéke JSON formátum legyen.',\n    'lt'             => [\n        'numeric' => 'A(z) :attribute kisebbnek kell lennie mint :value.',\n        'file'    => 'A(z) :attribute kisebbnek kell lennie mint :value kilobájt.',\n        'string'  => 'A(z) :attribute kisebbnek kell lennie mint :value karakter.',\n        'array'   => 'A(z) :attribute kevesebbnek kell lennie mint :value elem.',\n    ],\n    'lte'                  => [\n        'numeric' => 'A(z) :attribute kisebbnek vagy egyenlőnek kell lennie mint :value.',\n        'file'    => 'A(z) :attribute kisebbnek vagy egyenlőnek kell lennie mint :value kilobájt.',\n        'string'  => 'A(z) :attribute kisebbnek vagy egyenlőnek kell lennie mint :value karakter.',\n        'array'   => 'A(z) :attribute kevesebbnek vagy egyenlőnek kell lennie mint :value elem.',\n    ],\n    'max'              => [\n        'numeric' => 'A(z) :attribute nem lehet nagyobb, mint :max.',\n        'file'    => 'A(z) :attribute nem lehet nagyobb :max kilobájtnál.',\n        'string'  => 'A(z) :attribute nem lehet nagyobb :max karakternél.',\n        'array'   => 'A(z) :attribute tömbnek nem lehet több, mint :max eleme.',\n    ],\n    'mimes'          => 'A(z) :attribute fájltípus kell legyen: :values.',\n    'mimetypes'      => 'A(z) :attribute fájltípus kell legyen: :values.',\n    'min'            => [\n        'numeric' => 'A(z) :attribute legalább :min kell legyen.',\n        'file'    => 'A(z) :attribute legalább :min kilobájt kell legyen.',\n        'string'  => 'A(z) :attribute legalább :min karakter kell legyen.',\n        'array'   => 'A(z) :attribute tömbnek legalább :min eleme kell legyen.',\n    ],\n    'not_in'         => 'A kiválasztott :attribute érvénytelen.',\n    'not_regex'      => 'A(z) :attribute formátuma érvénytelen.',\n    'numeric'        => 'A(z) :attribute szám kell legyen.',\n    'present'        => 'A(z) :attribute present-nek kell lennie.',\n    'regex'          => 'A(z) :attribute formátuma érvénytelen.',\n    'required'             => 'A(z) :attribute megadása kötelező.',\n    'required_if'          => 'A(z) :attribute megadása kötelező, ha a(z) :other :value.',\n    'required_unless'      => 'A(z) :attribute megadása kötelező, hacsak a(z) :other :value.',\n    'required_with'        => 'A(z) :attribute megadása kötelező, ha a(z) :values jelen van.',\n    'required_with_all'    => 'A(z) :attribute megadása kötelező, ha az összes :values jelen van.',\n    'required_without'     => 'A(z) :attribute megadása kötelező, ha a(z) :values nincs jelen.',\n    'required_without_all' => 'A(z) :attribute megadása kötelező, ha az összes :values nincs jelen.',\n    'same'                 => 'A(z) :attribute és a(z) :other egyező kell legyen.',\n    'size'                 => [\n        'numeric' => 'A(z) :attribute :size kell legyen.',\n        'file'    => 'A(z) :attribute :size kilobájt kell legyen.',\n        'string'  => 'A(z) :attribute :size karakter kell legyen.',\n        'array'   => 'A(z) :attribute :size elemeket kell tartalmazzon.',\n    ],\n    'starts_with'    => 'A(z) :attribute a következőkkel kell kezdődnie: :values.',\n    'string'         => 'A(z) :attribute szövegnek kell lennie.',\n    'timezone'       => 'A(z) :attribute időzónának kell lennie.',\n    'unique'         => 'A(z) :attribute már foglalt.',\n    'uploaded'       => 'A(z) :attribute feltöltése sikertelen.',\n    'url'            => 'A(z) :attribute formátuma érvénytelen.',\n    'uuid'           => 'A(z) :attribute formátuma UUID kell legyen.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention 'attribute.rule' to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of 'email'. This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n        'name'    => 'név',\n        'title'   => 'cím',\n        'slug'    => 'webcím',\n        'image'   => 'kép',\n        'picture' => 'kép',\n        'content' => 'tartalom',\n        'text'    => 'szöveg',\n        'summary' => 'összegzés',\n        'email'   => 'e-mail cím',\n        'subject' => 'tárgy',\n        'message' => 'üzenet',\n    ],\n\n];\n"
  },
  {
    "path": "modules/system/lang/hu.json",
    "content": "{\n  \"Check For Updates\": \"Frissítések keresése\",\n  \"Install Packages\": \"Csomagok telepítése\",\n  \"Manage Themes\": \"Témák menedzselése\",\n  \"Manage Plugins\": \"Bővítmények kezelése\",\n  \"Project\": \"Projekt\",\n  \"Owner\": \"Fejlesztő\",\n  \"Plugins\": \"Bővítmény\",\n  \"Recommended\": \"Ajánlott\",\n  \"Disabled\": \"Letiltva\",\n  \"Current Build\": \"Verziószám\",\n  \"Updates Available\": \"Frissítés elérhető\",\n  \"Up to Date\": \"Naprakész\",\n  \"Latest Build\": \"Legújabb\",\n  \"View Changelog\": \"Részletek\",\n  \"Software Updates\": \"Gépház\",\n  \"Update the system modules and plugins.\": \"A rendszer frissítése, bővítmények kezelése.\",\n  \"General\": \"Általános\",\n  \"Mail\": \"Posta\",\n  \"Utilities\": \"Segédprogramok\",\n  \"Settings\": \"Beállítások\",\n  \"Show All Settings\": \"Összes Beállítás\",\n  \"Unable to find the specified settings.\": \"Nem található a megadott beállítás.\",\n  \"The settings page is missing a Model definition.\": \"A beállítások oldal egy Modell definíciót hiányol.\",\n  \":name settings updated\": \"A(z) :name beállításainak frissítése sikerült.\",\n  \"Return to System Settings\": \"Vissza a Beállításokhoz\",\n  \"Search Settings...\": \"Beállítás Keresése...\",\n  \"Disable mail branding CSS\": \"Email CSS letiltása\",\n  \"Manage Sites\": \"Webhelyek Kezelése\",\n  \"Manage the websites available for this application.\": \"Az alkalmazáshoz tartozó webhelyek kezelése.\",\n  \"Marketplace\": \"Piactér\",\n  \"There is no documentation provided.\": \"Nincs megadva leírás.\",\n  \"Documentation\": \"Dokumentáció\",\n  \"Upgrade Guide\": \"Frissítési Útmutató\",\n  \"License\": \"Licenc\",\n  \"Attach to Project\": \"Csatolás Projekthez\",\n  \"Manage Updates\": \"Gépház\",\n  \"Software Update\": \"Szoftver Frissítés\",\n  \"Return to Software Updates\": \"Vissza a Gépházhoz\",\n  \"Try Again\": \"Újra Próbál\",\n  \"Unpacking application files\": \"Rendszer kicsomagolása...\",\n  \"Update Failed\": \"A frissítés nem sikerült.\",\n  \"Unpacking plugin: :name\": \"Bővítmény kicsomagolása: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Az elsődleges webhely alapértelmezés szerint használatos, és nem törölhető.\",\n  \"Disabled sites are not shown on the frontend.\": \"A letiltott webhelyek nem jelennek meg a látogatói oldalon.\",\n  \"Enabled in the Admin Panel\": \"Engedélyezve az Admin Panelen\",\n  \"Configuration\": \"Konfiguráció\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Használja ezt, ha azt szeretné, hogy a webhely engedélyezve legyen az admin panelen.\",\n  \"Install\": \"Telepítés\",\n  \"Sync Project\": \"Projekt Szinkronizálása\",\n  \"Name\": \"Név\",\n  \"Unique Code\": \"Egyedi Kód\",\n  \"Theme\": \"Téma\",\n  \"Sites\": \"Webhelyek\",\n  \"Create Site\": \"Webhely Létrehozása\",\n  \"Base URL\": \"Alap URL\",\n  \"Status\": \"Kód\",\n  \"Current default value: :value\": \"Jelenlegi alapértelmezett érték: :value\",\n  \"Locale\": \"Helyi\",\n  \"Timezone\": \"Időzóna\",\n  \"Custom application URL\": \"Egyéni alkalmazás URL-je\",\n  \"Override the application URL when this site is active.\": \"Ha ez a webhely aktív, írja felül az alkalmazás URL-címét.\",\n  \"Use a CMS route prefix\": \"Használjon CMS-útvonal-előtagot\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Megosztott gazdagépnév használatakor egy előtag azonosíthatja ezt a webhelyet.\",\n  \"Define matching hostnames\": \"Határozzon meg egyező gazdagépneveket\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Adja meg azokat a domain neveket és mintákat, amelyeket a webhely kiszolgálásához használni kell.\",\n  \"Display a style for this site\": \"Szín megjelenítése ehhez az oldalhoz\",\n  \"To help identify this site, display a color in the admin panel.\": \"A webhely azonosításának megkönnyítése érdekében jelenítsen meg egy színt az adminisztrációs panelen.\",\n  \"Save\": \"Mentés\",\n  \"Save and Close\": \"Mentés és bezárás\",\n  \"Use Default\": \"Az alapértelmezett\",\n  \"Use Custom\": \"Használja az Egyéni lehetőséget\",\n  \"Specify a custom locale code.\": \"Adjon meg egy egyéni területi kódot.\",\n  \"Failed\": \"nem sikerült\",\n  \"or\": \"vagy\",\n  \"Code\": \"Kód\",\n  \"October CMS Marketplace\": \"októberi CMS piactér\",\n  \"Visit the :link to add some.\": \"A projektnek nincsenek bővítményei vagy témái. Látogassa meg a :linket néhány hozzáadásához.\",\n  \"Buy Now\": \"Vásárolj most\",\n  \"Updating package manager\": \"Csomagkezelő frissítése\",\n  \"Updating application files\": \"Rendszer letöltése...\",\n  \"Setting build number\": \"Rendszer beállítása...\",\n  \"Finishing update process\": \"Folyamat befejezése\",\n  \"Installing plugin: :name\": \"Bővítmény letöltése: :name\",\n  \"Finishing installation process\": \"A telepítési folyamat befejezése\",\n  \"Removing theme: :name\": \"Téma eltávolítása: :name\",\n  \"Please specify a Theme name to install.\": \"Adja meg a telepítendő téma nevét.\",\n  \"Installing theme: :name\": \"Téma letöltése: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Bővítmény eltávolítása: :name\",\n  \"Please specify a Plugin name to install.\": \"Adja meg a telepítendő bővítmény nevét.\",\n  \"Update process complete\": \"A frissítés sikeresen megtörtént.\",\n  \"Package installed successfully\": \"A bővítmény telepítése sikerült.\",\n  \"Check Dependencies\": \"Függőségek ellenőrzése\",\n  \"Install Dependencies\": \"Függőségek telepítése\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"A rendszer megfelelő működéséhez szükséges függőségek hiányoznak.\",\n  \"License Key\": \"Licensz kulcs\",\n  \"How to find your License Key\": \"Hol található a licensz kulcs?\",\n  \"The password attribute is required.\": \"A jelszó megadása kötelező.\",\n  \"The login attribute is required.\": \"A bejelentkezési név megadása kötelező.\",\n  \"Cannot login user since they are not activated.\": \"A felhasználói fiók aktiválásának hiányában a bejelentkezés nem lehetséges.\",\n  \"Cannot login user since they are banned.\": \"A felhasználói fiók letiltásra került, így a bejelentkezés nem lehetséges.\",\n  \"Cannot login user since they are suspended.\": \"A felhasználói fiók felfüggesztésre került, így a bejelentkezés nem lehetséges.\",\n  \"A user was not found with the given credentials.\": \"Nem található a megadott adatoknak megfelelő felhasználó.\",\n  \"A user was found but the password did not match.\": \"A megadott névvel rendelkező felhasználó jelszava nem egyezik a megadott jelszóval.\",\n  \"User is not logged in\": \"Nincs bejelentkezett felhasználó\",\n  \"Register Software\": \"Regisztrálja a szoftvert\",\n  \"View the Dashboard\": \"Vezérlőpult elérése\",\n  \"Set the Default Dashboard\": \"Vezérlőpult testreszabása\",\n  \"Log File\": \"Naplófájl\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Nincs\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Beállítások\",\n  \"Manage email configuration.\": \"A weboldal e-mail küldésének testreszabása.\",\n  \"Sender Name\": \"Feladó neve\",\n  \"Sender Email\": \"Feladó e-mail címe\",\n  \"Mail Method\": \"Levélküldés módja\",\n  \"SMTP Address\": \"SMTP címe\",\n  \"SMTP Port\": \"SMTP port\",\n  \"SMTP Encryption Protocol\": \"SMTP titkosítás típusa\",\n  \"SMTP Authorization Required\": \"SMTP hitelesítés szükséges\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Jelölje be, amennyiben az SMTP kiszolgálója hitelesítést igényel.\",\n  \"Username\": \"Felhasználónév\",\n  \"Password\": \"Jelszó\",\n  \"Sendmail Path\": \"Elérési út\",\n  \"Please specify the path of the sendmail program.\": \"Adja meg a Sendmail elérését.\",\n  \"Mailgun Domain\": \"Mailgun tartomány\",\n  \"Please specify the Mailgun domain name.\": \"Adja meg a Mailgun tartománynevét.\",\n  \"Mailgun Secret\": \"Titkos jelszó\",\n  \"Enter your Mailgun API key.\": \"Adja meg a Mailgun API kulcsát.\",\n  \"SES Key\": \"SES kulcs\",\n  \"Enter your SES API key\": \"Adja meg az API kulcsot\",\n  \"SES Secret\": \"SES kód\",\n  \"Enter your SES API secret key\": \"Adja meg az API titkos kulcsot\",\n  \"SES Region\": \"SES régió\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Adja meg a régiót (pl. us-east-1)\",\n  \"Postmark Token\": \"Postmark kód\",\n  \"Enter your Postmark API secret key\": \"Adja meg az API titkos kulcsot\",\n  \"Define administrator roles\": \"Adminisztrátori szerepkörök meghatározása\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Az oldalhoz való hozzáférés biztosítása kizárólag a megadott szerepkörrel rendelkező adminisztrátoroknak.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"All Sites\",\n  \"Manage Backend Preferences\": \"Saját beállítások kezelése\",\n  \"Manage Code Editor Preferences\": \"Kódszerkesztő testreszabása\",\n  \"Customize Backend Styles\": \"Kinézet testreszabása\",\n  \"Mail Templates\": \"Sablonok\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Levél típusok és elrendezések menedzselése.\",\n  \"Mail Branding\": \"Kinézet\",\n  \"Modify the colors and appearance of mail templates.\": \"A színek és más vizuális jellemzők módosítása.\",\n  \"Event Log\": \"Esemény napló\",\n  \"View system log messages with their recorded time and details.\": \"A rendszer hiba üzeneteinek megtekintése.\",\n  \"Request Log\": \"Kérelem napló\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Rossz vagy átirányított kérelmek megtekintése.\",\n  \"Log Settings\": \"Engedélyek\",\n  \"Specify which areas should use logging.\": \"Válassza ki, hogy mely műveleteket szeretne naplózni.\",\n  \"Test message sent.\": \"A tesztüzenet elküldése sikerült.\",\n  \"New Layout\": \"Új elrendezés\",\n  \"New Partial\": \"Új részlap\",\n  \"New Template\": \"Új sablon\",\n  \"Template\": \"Sablon\",\n  \"Templates\": \"Sablonok\",\n  \"Layouts\": \"Elrendezések\",\n  \"Partials\": \"Részlapok\",\n  \"Partial\": \"Részlap\",\n  \"Mail Partials\": \"Levél részlapok\",\n  \"Layout\": \"Elrendezés\",\n  \"Mail Layouts\": \"Levél elrendezések\",\n  \"Unique code used to refer to this template\": \"Erre a sablonra hivatkozásként használt egyedi kód.\",\n  \"-- No layout --\": \"-- nincs --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Egyszerű szöveg\",\n  \"Disable automatic inline CSS\": \"Automatikusan beágyazott CSS tiltása\",\n  \"Options\": \"Beállítások\",\n  \"Subject\": \"Tárgy\",\n  \"Email message subject\": \"Az e-mail üzenet tárgya\",\n  \"Description\": \"Leírás\",\n  \"Drivers Not Installed\": \"Hiányzó komponens\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"A levél kiküldéséhez szükséges, hogy telepítve legyen az \\\":plugin\\\" nevű bővítmény.\",\n  \"ID\": \"Azonosító\",\n  \"Event ID\": \"Azonosító\",\n  \"Level\": \"Típus\",\n  \"Date & Time\": \"Időpont\",\n  \"Message\": \"Üzenet\",\n  \"Logging\": \"Engedélyek\",\n  \"Log Bad Requests\": \"Kérelmek naplózása\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Rossz vagy átirányított kérelmek eltárolása.\",\n  \"Log Theme Changes\": \"Téma változtatások naplózása\",\n  \"When a change is made to the theme using the backend.\": \"A fájlokban történt változtatások eltárolása.\",\n  \"Log System Events\": \"Események naplózása\",\n  \"Store system events in the database in addition to the file-based log.\": \"A rendszer üzeneteinek eltárolása.\",\n  \"Background\": \"Hátterek\",\n  \"Body background\": \"Törzs háttere\",\n  \"Content background\": \"Tartalom háttere\",\n  \"Inner content background\": \"Belső tartalom háttere\",\n  \"Buttons\": \"Gombok\",\n  \"Button text color\": \"Szöveg színe\",\n  \"Primary button background\": \"Elsődleges gomb háttere\",\n  \"Positive button background\": \"Pozitív gomb háttere\",\n  \"Negative button background\": \"Negatív gomb háttere\",\n  \"Typography\": \"Tipográfia\",\n  \"Header color\": \"Fejléc színe\",\n  \"Headings color\": \"Címsorok színe\",\n  \"Text color\": \"Szöveg színe\",\n  \"Link color\": \"Hivatkozás színe\",\n  \"Footer color\": \"Lábléc színe\",\n  \"Borders\": \"Szegélyek\",\n  \"Body border color\": \"Törzs szegély színe\",\n  \"Subcopy border color\": \"Utóirat szegély színe\",\n  \"Table border color\": \"Táblázat szegély színe\",\n  \"Components\": \"Komponensek\",\n  \"Panel background\": \"Panel háttere\",\n  \"Promotion background\": \"Promóció háttere\",\n  \"Promotion border color\": \"Promóció szegély színe\",\n  \"Customize Mail Appearance\": \"Levél megjelenésének testreszabása\",\n  \"Version\": \"Verzió\",\n  \"Enabled\": \"Bővítmény engedélyezve\",\n  \"Latest\": \"Legújabb\",\n  \"Log ID\": \"Azonosító\",\n  \"Counter\": \"Számláló\",\n  \"Referers\": \"Hivatkozás\",\n  \"URL\": \"Webcím\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Ez a napló a rendszerben történt lehetséges hibákat listázza ki. Például a kivételeket és a hibakeresési információkat.\",\n  \"Event\": \"Esemény részletei\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Ez a napló a böngésző kérelmeket listázza ki. Ha például egy látogató nem létező aloldalt nyit meg, akkor egy 404-es állapotkódú bejegyzés jön létre.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Kérelem részletei\",\n  \"Event log emptied\": \"Az esemény napló kiürítése sikerült.\",\n  \"Empty Event Log\": \"Kiürítés\",\n  \"Emptying Event Log...\": \"A kiürítés folyamatban...\",\n  \"Return to Event Log\": \"Vissza az esemény naplóhoz\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Biztos benne, hogy minden egyedi adatot tötölni szeretne a bővítményekből?\",\n  \"Reset Plugin Data\": \"Bővítmény adatok törlése\",\n  \"Enable Plugins\": \"Bővítmény engedélyezése\",\n  \"Are you sure you want to :action these plugins?\": \"Biztos, hogy :action legyenek a bővítmények?\",\n  \"enable\": \"engedélyezve\",\n  \"disable\": \"tiltva\",\n  \"Disable Plugins\": \"Bővítmény tiltása\",\n  \"Select Action...\": \"Művelet kiválasztása...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"A bővítményhet tartozó fájlok törölve lettek.\",\n  \"search plugins to install...\": \"Keresés...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"Keresés...\",\n  \"Install Theme\": \"Téma telepítése\",\n  \"Theme Name\": \"Téma neve\",\n  \"Install Plugin\": \"Bővítmény telepítése\",\n  \"Plugin Name\": \"Bővítmény neve\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Nevezze meg egyedi kódja alapján a bővítményt. Például: RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"A névnek egyedinek kell lennie. Például: RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\",\n  \"System Updates\": \"Gépház\",\n  \"Find a Setting...\": \"Beállítás Keresése...\",\n  \"Return to System Updates\": \"Vissza a Gépházhoz\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\"\n}"
  },
  {
    "path": "modules/system/lang/id/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Kembali lagi ke hal dasar',\n  ],\n  'directory' => [\n    'create_fail' => 'Tidak dapat membuat direktori: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Tidak dapat membuat berkas: :name',\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistem',\n    'menu_label' => 'Sistem',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Lain-lain',\n      'logs' => 'Logs',\n      'mail' => 'Surat',\n      'shop' => 'Toko',\n      'team' => 'Tim',\n      'users' => 'Pengguna',\n      'system' => 'Sistem',\n      'social' => 'Sosial',\n      'events' => 'Peristiwa',\n      'customers' => 'Pelanggan',\n      'my_settings' => 'Pengaturanku',\n    ],\n  ],\n  'plugin' => [\n    'unnamed' => 'Plugin Tidak Bernama',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Aktif atau Deaktif',\n    'enable_or_disable_title' => 'Aktif atau Deaktif Plugin',\n    'remove' => 'Lepaskan',\n    'refresh' => 'Muat Ulang',\n    'disabled_label' => 'Deaktivasi',\n    'disabled_help' => 'Plugin yang nonaktif akan diabaikan di aplikasi.',\n    'selected_amount' => 'Plugin terpilih: :amount',\n    'remove_confirm' => 'Anda yakin akan melepaskannya?',\n    'remove_success' => 'Berhasil melepaskan plugin tersebut dari sistem.',\n    'refresh_success' => 'Berhasil memuat ulang plugin dalam sistem.',\n    'disable_confirm' => 'Anda yakin akan menonaktifkannya?',\n    'disable_success' => 'Berhasil menonaktifkan plugin tersebut.',\n    'enable_success' => 'Berhasil mengaktifkan plugin tersebut.',\n  ],\n  'project' => [\n    'attach' => 'Kaitkan Proyek',\n    'detach' => 'Lepas Proyek',\n    'none' => 'Tidak ada',\n    'id' => [\n      'missing' => 'Silakan tentukan ID Proyek yang akan digunakan.',\n    ],\n    'detach_confirm' => 'Anda yakin akan melepaskan proyek ini?',\n    'unbind_success' => 'Proyek telah berhasil dilepaskan.',\n  ],\n  'settings' => [\n    'search' => 'Pencarian',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Koneksi lewat SSL dibutuhkan',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Nama unik yang digunakan untuk merujuk acuan ini',\n    'test_send' => 'Kirim pesan ujicoba',\n    'return' => 'Kembali ke daftar templat',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Pemilik',\n    'plugin_not_found' => 'Plugin tidak ditemukan',\n    'core_build' => 'Build :build',\n    'core_build_help' => 'Tersedia Build terbaru.',\n    'plugin_version_none' => 'Plugin baru',\n    'theme_new_install' => 'Instal tema baru.',\n    'theme_extracting' => 'Ekstraksi tema: :name',\n    'update_label' => 'Pembaruan perangkat lunak',\n    'update_loading' => 'Memuat pembaruan yang tersedia...',\n    'force_label' => 'Paksa untuk pembaruan',\n    'found' => [\n      'label' => 'Terdapat pembaruan baru!',\n      'help' => 'Klik Pembaruan perangkat lunak untuk memulai proses pembaruan.',\n    ],\n    'none' => [\n      'label' => 'Tidak ada pembaruan',\n      'help' => 'Tidak ditemukan pembaruan baru.',\n    ],\n  ],\n  'server' => [\n    'connect_error' => 'Kesalahan dalam koneksi dengan server.',\n    'response_not_found' => 'Tidak menemukan respon pembaruan.',\n    'response_invalid' => 'Respon tidak valid dari server.',\n    'response_empty' => 'Respon kosong dari server.',\n    'file_error' => 'Server gagal mengirimkan file.',\n    'file_corrupt' => 'Berkas dari server telah rusak.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Kelas :class harus menggunakan properti $:property yang telah digunakan oleh behavior :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Tidak dapat menemukan berkas pengaturan :file yang digunakan untuk :location.',\n    'required' => 'Pengaturan yang digunakan pada :location harus memberikan value \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Tidak dapat membuka berkas utama \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Kosongkan catatan permintaan',\n    'empty_loading' => 'Mengosongkan catatan permintaan...',\n    'empty_success' => 'Berhasil mengosongkan catatan permintaan.',\n    'return_link' => 'Kembali ke catatan permintaan',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistem',\n    'manage_system_settings' => 'Kelola pengaturan sistem',\n    'manage_software_updates' => 'Kelola pembaruan perangkat lunak',\n    'manage_mail_templates' => 'Kelola templat surat',\n    'manage_mail_settings' => 'Kelola pengaturan surat',\n    'manage_other_administrators' => 'Kelola administrator lainnya',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/id/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"             => \"Isian :attribute harus diterima.\",\n    \"active_url\"           => \"Isian :attribute bukan URL yang valid.\",\n    \"after\"                => \"Isian :attribute harus tanggal setelah :date.\",\n    \"alpha\"                => \"Isian :attribute hanya boleh berisi huruf.\",\n    \"alpha_dash\"           => \"Isian :attribute hanya boleh berisi huruf, angka, dan strip.\",\n    \"alpha_num\"            => \"Isian :attribute hanya boleh berisi huruf dan angka.\",\n    \"array\"                => \"Isian :attribute harus berupa sebuah larik (array).\",\n    \"before\"               => \"Isian :attribute harus tanggal sebelum :date.\",\n    \"between\"              => [\n        \"numeric\" => \"Isian :attribute harus antara :min dan :max.\",\n        \"file\"    => \"Isian :attribute harus antara :min dan :max kilobita.\",\n        \"string\"  => \"Isian :attribute harus antara :min dan :max karakter.\",\n        \"array\"   => \"Isian :attribute harus antara :min dan :max butir.\",\n    ],\n    \"boolean\"              => \"Isian :attribute harus berupa true atau false\",\n    \"confirmed\"            => \"Konfirmasi :attribute tidak cocok.\",\n    \"date\"                 => \"Isian :attribute bukan tanggal yang valid.\",\n    \"date_format\"          => \"Isian :attribute tidak sesuai dengan format :format.\",\n    \"different\"            => \"Isian :attribute dan :other harus berbeda.\",\n    \"digits\"               => \"Isian :attribute harus berupa angka :digits.\",\n    \"digits_between\"       => \"Isian :attribute harus antara angka :min dan :max.\",\n    \"email\"                => \"Isian :attribute harus berupa alamat surel yang valid.\",\n    \"exists\"               => \"Isian :attribute yang dipilih tidak valid.\",\n    \"image\"                => \"Isian :attribute harus berupa gambar.\",\n    \"in\"                   => \"Isian :attribute yang dipilih tidak valid.\",\n    \"integer\"              => \"Isian :attribute harus merupakan bilangan bulat.\",\n    \"ip\"                   => \"Isian :attribute harus berupa alamat IP yang valid.\",\n    \"max\"                  => [\n        \"numeric\" => \"Isian :attribute tidak boleh lebih dari :max.\",\n        \"file\"    => \"Isian :attribute tidak boleh lebih dari :max kilobita.\",\n        \"string\"  => \"Isian :attribute tidak boleh lebih dari :max karakter.\",\n        \"array\"   => \"Isian :attribute tidak boleh lebih dari :max butir.\",\n    ],\n    \"mimes\"                => \"Isian :attribute harus berkas berjenis : :values.\",\n    \"min\"                  => [\n        \"numeric\" => \"Isian :attribute minimal :min.\",\n        \"file\"    => \"Isian :attribute minimal :min kilobita.\",\n        \"string\"  => \"Isian :attribute minimal :min karakter.\",\n        \"array\"   => \"Isian :attribute minimal :min butir.\",\n    ],\n    \"not_in\"               => \"Isian :attribute yang dipilih tidak valid.\",\n    \"numeric\"              => \"Isian :attribute harus berupa angka.\",\n    \"regex\"                => \"Format isian :attribute tidak valid.\",\n    \"required\"             => \"Bidang isian :attribute wajib diisi.\",\n    \"required_if\"          => \"Bidang isian :attribute wajib diisi bila :other adalah :value.\",\n    \"required_with\"        => \"Bidang isian :attribute wajib diisi bila terdapat :values.\",\n    \"required_with_all\"    => \"Bidang isian :attribute wajib diisi bila terdapat :values.\",\n    \"required_without\"     => \"Bidang isian :attribute wajib diisi bila tidak terdapat :values.\",\n    \"required_without_all\" => \"Bidang isian :attribute wajib diisi bila tidak terdapat ada :values.\",\n    \"same\"                 => \"Isian :attribute dan :other harus sama.\",\n    \"size\"                 => [\n        \"numeric\" => \"Isian :attribute harus berukuran :size.\",\n        \"file\"    => \"Isian :attribute harus berukuran :size kilobita.\",\n        \"string\"  => \"Isian :attribute harus berukuran :size karakter.\",\n        \"array\"   => \"Isian :attribute harus mengandung :size butir.\",\n    ],\n    \"unique\"               => \"Isian :attribute sudah ada sebelumnya.\",\n    \"url\"                  => \"Format isian :attribute tidak valid.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/id.json",
    "content": "{\n  \"Check For Updates\": \"Periksa Pembaruan\",\n  \"Install Packages\": \"Instal Packages atau Modul\",\n  \"Manage Themes\": \"Kelola Tema\",\n  \"Manage Plugins\": \"Kelola Plugin\",\n  \"Project\": \"Proyek\",\n  \"Owner\": \"Pemilik\",\n  \"Plugins\": \"Plugin\",\n  \"Recommended\": \"Direkomendasikan\",\n  \"Disabled\": \"Deaktivasi\",\n  \"Current Build\": \"Build Sekarang\",\n  \"Updates Available\": \"Pembaruan Tersedia\",\n  \"Up to Date\": \"Saat ini\",\n  \"Latest Build\": \"Build Terbaru\",\n  \"View Changelog\": \"Lihat perubahan log\",\n  \"Software Updates\": \"Pembaruan\",\n  \"Update the system modules and plugins.\": \"Pembaruan sistem, kelola dan pasang plugin dan tema.\",\n  \"General\": \"Umum\",\n  \"Mail\": \"Mail\",\n  \"Utilities\": \"Utilitas\",\n  \"Settings\": \"Pengaturan\",\n  \"Show All Settings\": \"Tampilkan Semua Pengaturan\",\n  \"Unable to find the specified settings.\": \"Tidak dapat menemukan pengaturan yang ditentukan.\",\n  \"The settings page is missing a Model definition.\": \"Halaman pengaturan belum mendefinisikan Model.\",\n  \":name settings updated\": \"Pengaturan :name berhasil diperbarui.\",\n  \"Return to System Settings\": \"Kembali ke pengaturan sistem\",\n  \"Search Settings...\": \"Temukan Pengaturan...\",\n  \"Disable mail branding CSS\": \"Nonaktifkan CSS untuk email branding\",\n  \"Manage Sites\": \"Kelola Situs\",\n  \"Manage the websites available for this application.\": \"Kelola situs yang tersedia untuk aplikasi ini.\",\n  \"Marketplace\": \"Marketplace\",\n  \"There is no documentation provided.\": \"Tidak ada dokumentasi yang disediakan.\",\n  \"Documentation\": \"Dokumentasi\",\n  \"Upgrade Guide\": \"Panduan Upgrade\",\n  \"License\": \"Lisensi\",\n  \"Attach to Project\": \"Cantumkan Ke Proyek\",\n  \"Manage Updates\": \"Kelola Pembaruan\",\n  \"Software Update\": \"Pembaruan perangkat lunak\",\n  \"Return to Software Updates\": \"Kembali ke Pembaruan Sistem\",\n  \"Try Again\": \"Coba lagi\",\n  \"Unpacking application files\": \"Membuka berkas aplikasi\",\n  \"Update Failed\": \"Pembaruan gagal\",\n  \"Unpacking plugin: :name\": \"Membuka plugin: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Situs utama digunakan secara default dan tidak dapat dihapus.\",\n  \"Disabled sites are not shown on the frontend.\": \"Situs yang dinonaktifkan tidak ditampilkan di frontend.\",\n  \"Enabled in the Admin Panel\": \"Diaktifkan di Panel Admin\",\n  \"Configuration\": \"Konfigurasi\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Gunakan ini jika Anda ingin mengaktifkan situs di panel admin.\",\n  \"Install\": \"Install\",\n  \"Sync Project\": \"Sinkronkan Proyek\",\n  \"Name\": \"Nama\",\n  \"Unique Code\": \"Kode Unik\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Situs\",\n  \"Create Site\": \"Buat Situs\",\n  \"Base URL\": \"URL Dasar\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Nilai default saat ini: :value\",\n  \"Locale\": \"Lokal\",\n  \"Timezone\": \"Zona waktu\",\n  \"Custom application URL\": \"Kustomisasi URL Aplikasi\",\n  \"Override the application URL when this site is active.\": \"Ganti URL aplikasi saat situs ini sedang aktif.\",\n  \"Use a CMS route prefix\": \"Gunakan prefix rute CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Prefix dapat mengidentifikasi situs ini saat menggunakan nama host bersama.\",\n  \"Define matching hostnames\": \"Tentukan nama host yang cocok\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Tentukan nama domain dan pola yang harus digunakan untuk melayani situs ini.\",\n  \"Display a style for this site\": \"Tampilkan warna untuk situs ini\",\n  \"To help identify this site, display a color in the admin panel.\": \"Untuk membantu mengidentifikasi situs ini, tampilkan warna di panel admin.\",\n  \"Save\": \"Simpan\",\n  \"Save and Close\": \"Simpan dan tutup\",\n  \"Use Default\": \"Gunakan Default\",\n  \"Use Custom\": \"Gunakan Kustom\",\n  \"Specify a custom locale code.\": \"Tentukan kode lokal khusus.\",\n  \"Failed\": \"Gagal\",\n  \"or\": \"atau\",\n  \"Code\": \"Kode\",\n  \"October CMS Marketplace\": \"Marketplace October CMS\",\n  \"Visit the :link to add some.\": \"Proyek tidak memiliki plugin atau tema. Kunjungi :link untuk menambahnya.\",\n  \"Buy Now\": \"Beli sekarang\",\n  \"Updating package manager\": \"Memperbarui pengelola paket\",\n  \"Updating application files\": \"Mengunduh berkas-berkas aplikasi\",\n  \"Setting build number\": \"Mengatur nomor build\",\n  \"Finishing update process\": \"Menyelesaikan proses pembaruan\",\n  \"Installing plugin: :name\": \"Mengunduh plugin: :name\",\n  \"Finishing installation process\": \"Menyelesaikan proses instalasi\",\n  \"Removing theme: :name\": \"Menghapus tema: :nama\",\n  \"Please specify a Theme name to install.\": \"Harap tentukan nama Tema untuk dipasang.\",\n  \"Installing theme: :name\": \"Mengunduh tema: :name\",\n  \"Removing plugin: :name\": \"Menghapus plugin: :nama\",\n  \"Please specify a Plugin name to install.\": \"Silakan tentukan nama Plugin yang akan dipasang.\",\n  \"Update process complete\": \"Proses pembaruan telah selesai.\",\n  \"Package installed successfully\": \"Plugin berhasil diinstal.\",\n  \"Check Dependencies\": \"Periksa Ketergantungan\",\n  \"Install Dependencies\": \"Instal Dependensi\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Ada dependensi yang hilang yang diperlukan agar sistem dapat berjalan dengan benar.\",\n  \"License Key\": \"Kunci lisensi\",\n  \"How to find your License Key\": \"Cara menemukan Kunci Lisensi Anda\",\n  \"The password attribute is required.\": \"Atribut kata sandi diperlukan.\",\n  \"The login attribute is required.\": \"Atribut login diperlukan.\",\n  \"Cannot login user since they are not activated.\": \"Tidak dapat login pengguna karena mereka tidak diaktifkan.\",\n  \"Cannot login user since they are banned.\": \"Tidak dapat masuk pengguna karena mereka dilarang.\",\n  \"Cannot login user since they are suspended.\": \"Tidak dapat masuk pengguna karena mereka ditangguhkan.\",\n  \"A user was not found with the given credentials.\": \"Pengguna tidak ditemukan dengan kredensial yang diberikan.\",\n  \"A user was found but the password did not match.\": \"Seorang pengguna ditemukan tetapi kata sandi tidak cocok.\",\n  \"User is not logged in\": \"Pengguna tidak masuk\",\n  \"Register Software\": \"Daftar Perangkat Lunak\",\n  \"View the Dashboard\": \"Tampilkan dasbor\",\n  \"Set the Default Dashboard\": \"Tetapkan Dasbor Default\",\n  \"Log File\": \"Log File\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"MILIKNYA\",\n  \"Postmark\": \"Cap pos\",\n  \"No encryption\": \"Tidak ada enkripsi\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Kelola surat\",\n  \"Manage email configuration.\": \"Mengelola susunan surat elektronik.\",\n  \"Sender Name\": \"Nama Pengirim\",\n  \"Sender Email\": \"Email Pengirim\",\n  \"Mail Method\": \"Metode Surat\",\n  \"SMTP Address\": \"Alamat SMTP\",\n  \"SMTP Port\": \"Port SMTP\",\n  \"SMTP Encryption Protocol\": \"Protokol Enkripsi SMTP\",\n  \"SMTP Authorization Required\": \"Gunakan otorisasi SMTP\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Centang checkbox ini jika aplikasi SMTP Anda memerlukan otorisasi.\",\n  \"Username\": \"Nama pengguna\",\n  \"Password\": \"Kata Sandi\",\n  \"Sendmail Path\": \"Sendmail Path\",\n  \"Please specify the path of the sendmail program.\": \"Silakan tentukan path ke program sendmail.\",\n  \"Mailgun Domain\": \"Domain Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Silakan tentukan nama domain Mailgun.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Masukan API key Mailgun.\",\n  \"SES Key\": \"Kunci SES\",\n  \"Enter your SES API key\": \"Masukkan kunci SES API Anda\",\n  \"SES Secret\": \"Rahasia SES\",\n  \"Enter your SES API secret key\": \"Masukkan kunci rahasia SES API Anda\",\n  \"SES Region\": \"Wilayah SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Masukkan wilayah SES Anda (mis. us-east-1)\",\n  \"Postmark Token\": \"Token Cap Pos\",\n  \"Enter your Postmark API secret key\": \"Masukkan kunci rahasia API Postmark Anda\",\n  \"Define administrator roles\": \"Tentukan peran administrator\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Batasi akses ke situs ini hanya untuk administrator dengan peran berikut.\",\n  \"Mail Templates\": \"Templat Surat\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Ubah templat surat yang dikirim kepada pengguna dan administrator, kelola layout surat.\",\n  \"Event Log\": \"Catatan Peristiwa\",\n  \"View system log messages with their recorded time and details.\": \"Daftar catatan pesan sistem dengan jejak waktu dan rinciannya.\",\n  \"Request Log\": \"Catatan permintaan\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Melihat daftar catatan dengan temuan bad atau redirected request, seperti contoh \\\"Halaman tidak ditemukan (404)\\\".\",\n  \"Test message sent.\": \"Pesan ujicoba berhasil dikirim.\",\n  \"New Layout\": \"Layout Baru\",\n  \"New Template\": \"Templat Baru\",\n  \"Template\": \"Templat\",\n  \"Templates\": \"Templat\",\n  \"Layouts\": \"Layout\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"Layout Surat\",\n  \"Unique code used to refer to this template\": \"Kode unik yang digunakan untuk merujuk acuan ini\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Free text\",\n  \"Subject\": \"Subjek\",\n  \"Email message subject\": \"Subjek untuk pesan surel\",\n  \"Description\": \"Deskripsi\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID Peristiwa\",\n  \"Level\": \"Tingkat\",\n  \"Date & Time\": \"Tanggal dibuat\",\n  \"Message\": \"Pesan\",\n  \"Version\": \"Versi\",\n  \"Log ID\": \"ID Catatan\",\n  \"Counter\": \"Jumlah\",\n  \"Referers\": \"Perujuk\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Catatan ini menampilkan daftar kemungkinan eror yang terjadi pada aplikasi, seperti `exception` dan informasi debug.\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Catatan ini menampilkan daftar permintaan dari browser yang mungkin memerlukan perhatian. Contohnya, jika pengunjung membuka halaman CMS yang tidak dapat ditemukan, record dibuat dengan kode status 404.\",\n  \"Event log emptied\": \"Berhasil mengosongkan catatan peristiwa.\",\n  \"Empty Event Log\": \"Kosongkan catatan peristiwa\",\n  \"Emptying Event Log...\": \"Mengosongkan catatan peristiwa...\",\n  \"Return to Event Log\": \"Kembali ke catatan peristiwa\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Anda yakin akan memuat ulang?\",\n  \"Plugin has been removed from the file system.\": \"Plugin telah dilepas dari sistem berkas.\",\n  \"Install Plugin\": \"Pasang Plugin\",\n  \"Plugin Name\": \"Nama Plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Gunakan nama plugin dengan kode uniknya. Contoh, RainLab.Blog\",\n  \"The combiner file ':name' is not found.\": \"Berkas penggabung ':name' tidak ditemukan.\"\n}"
  },
  {
    "path": "modules/system/lang/it/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formattazione',\n        'quote' => 'Citazione',\n        'code' => 'Codice',\n        'header1' => 'Titolo 1',\n        'header2' => 'Titolo 2',\n        'header3' => 'Titolo 3',\n        'header4' => 'Titolo 4',\n        'header5' => 'Titolo 5',\n        'header6' => 'Titolo 6',\n        'bold' => 'Grassetto',\n        'italic' => 'Corsivo',\n        'unorderedlist' => 'Elenco puntato',\n        'orderedlist' => 'Elenco numerato',\n        'video' => 'Video',\n        'image' => 'Immagine',\n        'link' => 'Collegamento',\n        'horizontalrule' => 'Inserisci linea orizzontale',\n        'fullscreen' => 'Schermo intero',\n        'preview' => 'Anteprima',\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Inserisci collegamento elemento multimediale\",\n        'insert_image' => \"Inserisci immagine\",\n        'insert_video' => \"Inserisci video\",\n        'insert_audio' => \"Inserisci audio\",\n        'invalid_file_empty_insert' => \"Si prega di selezionare un file di cui inserire il collegamento.\",\n        'invalid_file_single_insert' => \"Si prega di selezionare un singolo file.\",\n        'invalid_image_empty_insert' => \"Si prega di selezionare l\\'immagine/le immagini da inserire.\",\n        'invalid_video_empty_insert' => \"Si prega di selezionare un file video da inserire.\",\n        'invalid_audio_empty_insert' => \"Si prega di selezionare un file audio da inserire.\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Annulla',\n        'widget_remove_confirm' => 'Rimuovere questo widget?',\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Mese precedente',\n        'nextMonth' => 'Mese successivo',\n        'months' => ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],\n        'weekdays' => ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'],\n        'weekdaysShort' => ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'tutti',\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Applica',\n            'clear_button_text' => 'Rimuovi',\n        ],\n        'dates' => [\n            'all' => 'tutte',\n            'filter_button_text' => 'Filtra',\n            'reset_button_text'  => 'Reimposta',\n            'date_placeholder' => 'Data',\n            'after_placeholder' => 'Dopo',\n            'before_placeholder' => 'Prima',\n        ],\n        'numbers' => [\n            'all' => 'tutti',\n            'filter_button_text' => 'Filtra',\n            'reset_button_text' => 'Reset',\n            'min_placeholder' => 'Min',\n            'max_placeholder' => 'Max',\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Visualizza la traccia dello stack',\n        'hide_stacktrace' => 'Nascondi la traccia dello stack',\n        'tabs' => [\n            'formatted' => 'Formattato',\n            'raw' => 'Grezzo',\n        ],\n        'editor' => [\n            'title' => 'Editor codice sorgente',\n            'description' => 'Il tuo sistema operativo deve essere configurato per ascoltare uno di questi schemi URL.',\n            'openWith' => 'Apri con',\n            'remember_choice' => 'Ricorda l\\'opzione selezionata per questa sessione',\n            'open' => 'Apri',\n            'cancel' => 'Annulla',\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/it/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Tornare alle origini',\n  ],\n  'directory' => [\n    'create_fail' => 'Impossibile creare la cartella: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Impossibile creare il file: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Token di protezione non valido',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistema',\n    'menu_label' => 'Sistema',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Varie',\n      'logs' => 'Log',\n      'mail' => 'Mail',\n      'shop' => 'Negozio',\n      'team' => 'Team',\n      'users' => 'Utenti',\n      'system' => 'Sistema',\n      'social' => 'Social',\n      'events' => 'Eventi',\n      'customers' => 'Clienti',\n      'my_settings' => 'Impostazioni personali',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Tema senza nome',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Installa temi',\n    'installed' => 'Temi installati',\n    'no_themes' => 'Non ci sono temi installati dal marketplace.',\n    'recommended' => 'Raccomandati',\n    'remove_confirm' => 'Sei sicuro di voler rimuovere questo tema?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Plugin senza nome',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Abilita o disabilita',\n    'enable_or_disable_title' => 'Abilita o disabilita plugin',\n    'install' => 'Installa plugin',\n    'install_products' => 'Installa prodotti',\n    'installed' => 'Plugin installati',\n    'no_plugins' => 'Non ci sono temi installati dal marketplace.',\n    'recommended' => 'Raccomandati',\n    'remove' => 'Rimuovi',\n    'refresh' => 'Reinstalla',\n    'disabled_label' => 'Disabilitato',\n    'disabled_help' => 'I plugin disabilitati sono ignorati dall\\'applicazione.',\n    'frozen_label' => 'Congela aggiornamenti',\n    'frozen_help' => 'I plugin congelati verranno ignorati nel processo di aggiornamento.',\n    'selected_amount' => 'Plugin selezionati: :amount',\n    'remove_confirm' => 'Sei sicuro di voler rimuovere questo plugin?',\n    'remove_success' => 'Rimozione dei plugin dal sistema eseguita con successo.',\n    'refresh_success' => 'Reinstallazione dei plugin nel sistema eseguita con successo.',\n    'disable_confirm' => 'Sei sicuro?',\n    'disable_success' => 'Disabilitazione dei plugin eseguita con successo.',\n    'enable_success' => 'Abilitazione dei plugin eseguita con successo.',\n  ],\n  'project' => [\n    'attach' => 'Collega progetto',\n    'detach' => 'Scollega progetto',\n    'none' => 'Nessuno',\n    'id' => [\n      'missing' => 'Inserisci un ID di progetto da utilizzare.',\n    ],\n    'detach_confirm' => 'Sei sicuro di voler scollegare questo progetto?',\n    'unbind_success' => 'Il progetto è stato scollegato con successo.',\n  ],\n  'settings' => [\n    'search' => 'Cerca',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Connessione SSL richiesta',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Nome univoco utilizzato come riferimento a questo modello.',\n    'test_send' => 'Invia un messaggio di prova',\n    'test_confirm' => 'Invio del messaggio di prova a :email. Continuare?',\n    'creating' => 'Creazione modello...',\n    'creating_layout' => 'Creazione layout...',\n    'saving' => 'Salvataggio modello...',\n    'saving_layout' => 'Salvataggio layout...',\n    'delete_confirm' => 'Eliminare questo modello?',\n    'delete_layout_confirm' => 'Eliminare questo layout?',\n    'deleting' => 'Eliminazione modello...',\n    'deleting_layout' => 'Eliminazione layout...',\n    'sending' => 'Invio del messaggio di prova...',\n    'return' => 'Ritorna all\\'elenco dei modelli',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autore',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Build :build',\n    'core_build_help' => 'Disponibile l\\'ultima build.',\n    'themes' => 'Temi',\n    'plugin_version_none' => 'Nuovo plugin',\n    'plugin_current_version' => 'Versione attuale',\n    'theme_new_install' => 'Installa nuovo tema.',\n    'theme_extracting' => 'Estrazione tema: :name',\n    'update_label' => 'Aggiorna il software',\n    'update_loading' => 'Caricamento degli aggiornamenti disponibili...',\n    'force_label' => 'Forza aggiornamento',\n    'found' => [\n      'label' => 'Trovati nuovi aggiornamenti!',\n      'help' => 'Clicca Aggiorna il software per iniziare il processo di aggiornamento.',\n    ],\n    'none' => [\n      'label' => 'Nessun aggiornamento',\n      'help' => 'Nessun aggiornamento trovato.',\n    ],\n    'important_action' => [\n      'empty' => 'Seleziona azione',\n      'confirm' => 'Conferma aggiornamento',\n      'skip' => 'Salta questo plugin (solo questa volta)',\n      'ignore' => 'Salta questo plugin (sempre)',\n    ],\n    'important_action_required' => 'Azione richiesta',\n    'important_view_guide' => 'Visualizza la guida per l\\'aggiornamento',\n    'important_alert_text' => 'Alcuni aggiornamenti necessitano della tua attenzione.',\n    'details_title' => 'Dettagli plugin',\n    'details_view_homepage' => 'Visualizza homepage',\n    'details_current_version' => 'Versione attuale',\n    'details_author' => 'Autore',\n  ],\n  'server' => [\n    'connect_error' => 'Errore durante la connessione al server.',\n    'response_not_found' => 'Il server degli aggiornamento non è stato trovato.',\n    'response_invalid' => 'Il server ha fornito una risposta non valida.',\n    'response_empty' => 'Il server ha fornito una risposta vuota.',\n    'file_error' => 'Il server non è riuscito a consegnare il pacchetto.',\n    'file_corrupt' => 'Il file è corrotto.',\n  ],\n  'behavior' => [\n    'missing_property' => 'La classe :class deve definire la proprietà $:property utilizzata dal comportamento :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Il file di configurazione :file definito per :location non è stato trovato.',\n    'required' => 'La configurazione utilizzata in :location deve fornire un valore \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Estrazione del file sistema \\':file\\' non riuscita.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Svuota il registro richieste',\n    'empty_loading' => 'Svuotamento del registro richieste in corso...',\n    'empty_success' => 'Il registro richieste è stato svuotato con successo.',\n    'return_link' => 'Ritorna al registro richieste',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistema',\n    'manage_system_settings' => 'Gestisci impostazioni di sistema',\n    'manage_software_updates' => 'Gestisci aggiornamenti del software',\n    'access_logs' => 'Visualizza registri di sistema',\n    'manage_mail_templates' => 'Gestisci i modelli e-mail',\n    'manage_mail_settings' => 'Gestisci impostazioni e-mail',\n    'manage_other_administrators' => 'Gestisci altri amministratori',\n  ],\n  'media' => [\n    'invalid_path' => 'Percorso del file non valido: \\':path\\'.',\n    'folder_size_items' => 'elementi',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/it/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \":attribute deve essere accettato.\",\n    \"active_url\"       => \":attribute non è un URL valido.\",\n    \"after\"            => \":attribute deve essere una data maggiore di :date.\",\n    \"alpha\"            => \":attribute può contenere solo lettere.\",\n    \"alpha_dash\"       => \":attribute può contenere solo lettere, numeri e trattini.\",\n    \"alpha_num\"        => \":attribute può contenere solo lettere e numeri.\",\n    \"array\"            => \":attribute deve essere un array.\",\n    \"before\"           => \":attribute deve essere una data minore di :date.\",\n    \"between\"          => [\n        \"numeric\" => \":attribute deve essere compreso tra :min e :max.\",\n        \"file\"    => \":attribute deve essere compreso tra :min e :max kilobytes.\",\n        \"string\"  => \":attribute deve essere compreso tra :min e :max caratteri.\",\n        \"array\"   => \":attribute deve avere tra :min e :max elementi.\",\n    ],\n    \"confirmed\"        => \"La conferma :attribute non corrisponde.\",\n    \"date\"             => \":attribute non è una data valida.\",\n    \"date_format\"      => \":attribute non corrisponde al formato :format.\",\n    \"different\"        => \":attribute e :other devono essere diversi.\",\n    \"digits\"           => \":attribute deve essere di :digits cifre.\",\n    \"digits_between\"   => \":attribute deve essere tra :min e :max cifre.\",\n    \"email\"            => \"Il formato di :attribute non è valido.\",\n    \"exists\"           => \"Il valore di :attribute non è valido.\",\n    \"image\"            => \":attribute deve essere un'immagine.\",\n    \"in\"               => \"Il valore di  :attribute non è valido.\",\n    \"integer\"          => \":attribute deve essere un numero intero.\",\n    \"ip\"               => \":attribute deve essere un indirizzo IP valido.\",\n    \"max\"              => [\n        \"numeric\" => \":attribute non può essere maggiore di :max.\",\n        \"file\"    => \":attribute non può essere maggiore di :max kilobytes.\",\n        \"string\"  => \":attribute non può essere maggiore di :max caratteri.\",\n        \"array\"   => \":attribute non può avere più di :max elementi.\",\n    ],\n    \"mimes\"            => \":attribute deve essere un file di tipo: :values.\",\n    \"extensions\"       => \":attribute deve avere un estensione: :values.\",\n    \"min\"              => [\n        \"numeric\" => \":attribute deve essere almeno :min.\",\n        \"file\"    => \":attribute deve essere almeno :min kilobytes.\",\n        \"string\"  => \":attribute deve essere almeno :min caratteri.\",\n        \"array\"   => \":attribute deve avere almeno :min elementi.\",\n    ],\n    \"not_in\"           => \"Il valore di :attribute non è valido.\",\n    \"numeric\"          => \":attribute deve essere un numero.\",\n    \"regex\"            => \"Il formato di :attribute non è valido.\",\n    \"required\"         => \"Il campo :attribute è obbligatorio.\",\n    \"required_if\"      => \"Il campo :attribute è obbligatorio quando :other è :value.\",\n    \"required_with\"    => \"Il campo :attribute è obbligatorio quando :values è presente.\",\n    \"required_without\" => \"Il campo :attribute è obbligatorio quando :values non è presente.\",\n    \"same\"             => \":attribute e :other devono corrispondere.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute deve essere :size.\",\n        \"file\"    => \":attribute deve essere :size kilobytes.\",\n        \"string\"  => \":attribute deve essere :size caratteri.\",\n        \"array\"   => \":attribute deve contenere :size elementi.\",\n    ],\n    \"unique\"           => \":attribute è già presente.\",\n    \"url\"              => \"Il formato di :attribute non è valido.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/it.json",
    "content": "{\n  \"Check For Updates\": \"Verifica gli aggiornamenti\",\n  \"Install Packages\": \"Installa pacchetti\",\n  \"Manage Themes\": \"Gestisci temi\",\n  \"Manage Plugins\": \"Gestisci plugin\",\n  \"Project\": \"Progetto\",\n  \"Owner\": \"Proprietario\",\n  \"Plugins\": \"Plugin\",\n  \"Recommended\": \"Consigliato\",\n  \"Disabled\": \"Disabilitati\",\n  \"Current Build\": \"Build corrente\",\n  \"Updates Available\": \"Aggiornamenti disponibili\",\n  \"Up to Date\": \"Aggiornato\",\n  \"Latest Build\": \"Ultima build\",\n  \"View Changelog\": \"Visualizza il registro delle modifiche\",\n  \"Software Updates\": \"Aggiornamenti & Plugin\",\n  \"Update the system modules and plugins.\": \"Aggiorna il sistema, gestisci ed installa plugin e temi.\",\n  \"General\": \"Generale\",\n  \"Mail\": \"Posta\",\n  \"Utilities\": \"Utilità\",\n  \"Settings\": \"Impostazioni\",\n  \"Show All Settings\": \"Mostra tutte le impostazioni\",\n  \"Unable to find the specified settings.\": \"Impossibile trovare le impostazioni specificate.\",\n  \"The settings page is missing a Model definition.\": \"La pagine delle impostazioni non ha nessun modello associato.\",\n  \":name settings updated\": \"Le impostazioni per :name sono state aggiornate con successo.\",\n  \"Return to System Settings\": \"Ritorna alle impostazioni di sistema\",\n  \"Search Settings...\": \"Trova un'impostazione...\",\n  \"Disable mail branding CSS\": \"Disabilita il CSS di branding della posta\",\n  \"Manage Sites\": \"Gestisci siti\",\n  \"Manage the websites available for this application.\": \"Gestisci i siti Web disponibili per questa applicazione.\",\n  \"Marketplace\": \"Mercato\",\n  \"There is no documentation provided.\": \"Nessuna documentazione fornita.\",\n  \"Documentation\": \"Documentazione\",\n  \"Upgrade Guide\": \"Guida all'aggiornamento\",\n  \"License\": \"Licenza\",\n  \"Attach to Project\": \"Collega al progetto\",\n  \"Manage Updates\": \"Gestisci aggiornamenti\",\n  \"Software Update\": \"Aggiornamento del software\",\n  \"Return to Software Updates\": \"Ritorna agli aggiornamenti di sistema\",\n  \"Try Again\": \"Riprova\",\n  \"Unpacking application files\": \"Estrazione dei file in corso\",\n  \"Update Failed\": \"Aggiornamento fallito\",\n  \"Unpacking plugin: :name\": \"Estrazione plugin: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Il sito principale viene utilizzato per impostazione predefinita e non può essere eliminato.\",\n  \"Disabled sites are not shown on the frontend.\": \"I siti disabilitati non vengono visualizzati sul frontend.\",\n  \"Enabled in the Admin Panel\": \"Abilitato nel pannello di amministrazione\",\n  \"Configuration\": \"Configurazione\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Usalo se vuoi che il sito sia abilitato nel pannello di amministrazione.\",\n  \"Install\": \"Installare\",\n  \"Sync Project\": \"Sincronizza progetto\",\n  \"Name\": \"Nome\",\n  \"Unique Code\": \"Codice Univoco\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Siti\",\n  \"Create Site\": \"Crea sito\",\n  \"Base URL\": \"URL di base\",\n  \"Status\": \"Codice di stato\",\n  \"Current default value: :value\": \"Valore predefinito corrente: :value\",\n  \"Locale\": \"Locale\",\n  \"Timezone\": \"Fuso orario\",\n  \"Custom application URL\": \"URL dell'applicazione personalizzato\",\n  \"Override the application URL when this site is active.\": \"Sostituisci l'URL dell'applicazione quando questo sito è attivo.\",\n  \"Use a CMS route prefix\": \"Utilizzare un prefisso di percorso CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Un prefisso può identificare questo sito quando si utilizza un nome host condiviso.\",\n  \"Define matching hostnames\": \"Definisci nomi host corrispondenti\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Specifica i nomi di dominio e i modelli che devono essere utilizzati per servire questo sito.\",\n  \"Display a style for this site\": \"Visualizza un colore per questo sito\",\n  \"To help identify this site, display a color in the admin panel.\": \"Per aiutare a identificare questo sito, mostra un colore nel pannello di amministrazione.\",\n  \"Save\": \"Salva\",\n  \"Save and Close\": \"Salva e chiudi\",\n  \"Use Default\": \"Usa Predefinito\",\n  \"Use Custom\": \"Usa Personalizzato\",\n  \"Specify a custom locale code.\": \"Specificare un codice locale personalizzato.\",\n  \"Failed\": \"fallito\",\n  \"or\": \"o\",\n  \"Code\": \"Codice\",\n  \"October CMS Marketplace\": \"Mercato CMS di ottobre\",\n  \"Visit the :link to add some.\": \"Il progetto non ha plugin o temi. Visita il :link per aggiungerne alcuni.\",\n  \"Buy Now\": \"Acquista ora\",\n  \"Updating package manager\": \"Aggiornamento del gestore pacchetti\",\n  \"Updating application files\": \"Scaricamento dei file in corso\",\n  \"Setting build number\": \"Impostazione del numero di build\",\n  \"Finishing update process\": \"Completamento del processo di aggiornamento\",\n  \"Installing plugin: :name\": \"Scaricamento plugin: :name\",\n  \"Finishing installation process\": \"Sto terminando il processo di installazione\",\n  \"Removing theme: :name\": \"Rimozione del tema: :name\",\n  \"Please specify a Theme name to install.\": \"Specifica il nome del tema da installare.\",\n  \"Installing theme: :name\": \"Scaricamento tema: :name\",\n  \"Removing plugin: :name\": \"Rimozione del plug-in: :name\",\n  \"Please specify a Plugin name to install.\": \"Specifica il nome del plugin da installare.\",\n  \"Update process complete\": \"L'aggiornamento è stato eseguito con successo.\",\n  \"Package installed successfully\": \"Il plugin è stato installato con successo.\",\n  \"Check Dependencies\": \"Controlla le dipendenze\",\n  \"Install Dependencies\": \"Installa dipendenze\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Mancano dipendenze necessarie per il corretto funzionamento del sistema.\",\n  \"License Key\": \"Chiave di licenza\",\n  \"How to find your License Key\": \"Come trovare la chiave di licenza\",\n  \"The password attribute is required.\": \"L'attributo password è obbligatorio.\",\n  \"The login attribute is required.\": \"L'attributo login è obbligatorio.\",\n  \"Cannot login user since they are not activated.\": \"Impossibile accedere all'utente poiché non sono attivati.\",\n  \"Cannot login user since they are banned.\": \"Impossibile accedere all'utente poiché è stato bannato.\",\n  \"Cannot login user since they are suspended.\": \"Impossibile accedere all'utente poiché sono sospesi.\",\n  \"A user was not found with the given credentials.\": \"Non è stato trovato un utente con le credenziali fornite.\",\n  \"A user was found but the password did not match.\": \"È stato trovato un utente ma la password non corrisponde.\",\n  \"User is not logged in\": \"L'utente non è connesso\",\n  \"Register Software\": \"Registrati Software\",\n  \"View the Dashboard\": \"Visualizza la dashboard\",\n  \"Set the Default Dashboard\": \"Imposta la dashboard predefinita\",\n  \"Log File\": \"File di log\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Timbro postale\",\n  \"No encryption\": \"Nessuna crittografia\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Configurazione e-mail\",\n  \"Manage email configuration.\": \"Gestisci la configurazione delle e-mail.\",\n  \"Sender Name\": \"Nome del mittente\",\n  \"Sender Email\": \"Indirizzo e-mail del mittente\",\n  \"Mail Method\": \"Metodo di invio\",\n  \"SMTP Address\": \"Indirizzo SMTP\",\n  \"SMTP Port\": \"Porta SMTP\",\n  \"SMTP Encryption Protocol\": \"Protocollo di crittografia SMTP\",\n  \"SMTP Authorization Required\": \"Il server SMTP richiede l'autenticazione\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Seleziona se il tuo server SMTP richieste l'autenticazione.\",\n  \"Username\": \"Username\",\n  \"Password\": \"Password\",\n  \"Sendmail Path\": \"Percorso Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Inserisci il percorso al servizio sendmail.\",\n  \"Mailgun Domain\": \"Dominio Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Inserisci il nome dominio Mailgun.\",\n  \"Mailgun Secret\": \"Chiave Mailgun\",\n  \"Enter your Mailgun API key.\": \"Inserisci la tua chiave per l'utilizzo delle API Mailgun.\",\n  \"SES Key\": \"Chiave SES\",\n  \"Enter your SES API key\": \"Inserisci la chiave per l'utilizzo delle API SES\",\n  \"SES Secret\": \"Chiave privata SES\",\n  \"Enter your SES API secret key\": \"Inserisci la chiave privata per l'utilizzo delle API SES\",\n  \"SES Region\": \"Regione SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Inserisci la tua regione SES (ad es. us-east-1)\",\n  \"Postmark Token\": \"Timbro postale\",\n  \"Enter your Postmark API secret key\": \"Inserisci la chiave segreta dell'API Postmark\",\n  \"Define administrator roles\": \"Definire i ruoli dell'amministratore\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Limita l'accesso a questo sito solo agli amministratori con i seguenti ruoli.\",\n  \"Manage Backend Preferences\": \"Gestisci preferenze pannello di controllo\",\n  \"Manage Code Editor Preferences\": \"Gestisci preferenze editor di codice\",\n  \"Customize Backend Styles\": \"Personalizza il pannello di controllo\",\n  \"Mail Templates\": \"Modelli di e-mail\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modifica i modelli di e-mail inviati agli utenti ed amministratori, gestisci il layout delle e-mail.\",\n  \"Event Log\": \"Registro eventi\",\n  \"View system log messages with their recorded time and details.\": \"VIsualizza i messaggi del registro di sistema con i relativi orari di registrazione e dettagli.\",\n  \"Request Log\": \"Registro richieste\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Visualizza richieste errate o reindirizzate, come Pagina non trovata (404).\",\n  \"Test message sent.\": \"Il messaggio di prova è stato inviato con successo.\",\n  \"New Layout\": \"Nuovo layout\",\n  \"New Template\": \"Nuovo modello\",\n  \"Template\": \"Modello\",\n  \"Templates\": \"Modelli\",\n  \"Layouts\": \"Layouts\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"Layouts delle e-mail\",\n  \"Unique code used to refer to this template\": \"Codice univoco utilizzato come riferimento a questo modello\",\n  \"-- No layout --\": \"-- Nessun layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Testo piano\",\n  \"Subject\": \"Oggetto\",\n  \"Email message subject\": \"Oggetto del messaggio di posta\",\n  \"Description\": \"Descrizione\",\n  \"Drivers Not Installed\": \"Driver non installati\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Questa modalità di invio richiede che il plugin \\\":plugin\\\" sia installato prima che tu possa inviare messaggi.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID evento\",\n  \"Level\": \"Livello\",\n  \"Date & Time\": \"Data e ora\",\n  \"Message\": \"Messaggio\",\n  \"Version\": \"Versione\",\n  \"Log ID\": \"ID Registro\",\n  \"Counter\": \"Contatore\",\n  \"Referers\": \"Provenienza\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Questo registro visualizza un elenco dei potenziali errori occorsi nell'applicazione, come eccezioni e informazioni di debug.\",\n  \"Event\": \"Evento\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Questo registro visualizza un elenco delle richieste del browser che possono richiedere attenzione. Ad esempio, se un visitatore apre una pagina del CMS che non può essere trovata, viene creato un record con il codice di errore 404.\",\n  \"Request\": \"Richiesta\",\n  \"Event log emptied\": \"Il registro eventi è stato svuotato con successo.\",\n  \"Empty Event Log\": \"Svuota il registro eventi\",\n  \"Emptying Event Log...\": \"Svuotamento del registro eventi in corso...\",\n  \"Return to Event Log\": \"Ritorna al registro eventi\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Sei sicuro?\",\n  \"Plugin has been removed from the file system.\": \"Il plugin è stato rimosso dal file system.\",\n  \"search plugins to install...\": \"cerca plugin da installare...\",\n  \"search themes to install...\": \"cerca temi da installare...\",\n  \"Install Theme\": \"Installa tema\",\n  \"Theme Name\": \"Nome tema\",\n  \"Install Plugin\": \"Installa plugin\",\n  \"Plugin Name\": \"Nome del plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Cerca il plugin tramite il suo codice univoco. Ad esempio, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Cerca il tema tramite il suo codice univoco. Ad esempio, RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Il file combinatore ':name' non è stato trovato.\"\n}"
  },
  {
    "path": "modules/system/lang/ja/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => '基本に戻ろう！',\n  ],\n  'directory' => [\n    'create_fail' => 'ディレクトリ\\':name\\'を作成できません。',\n  ],\n  'file' => [\n    'create_fail' => 'ファイル\\':name\\'を作成できません。',\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'システム',\n    'menu_label' => 'システム',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'その他',\n      'logs' => 'ログ',\n      'mail' => 'メール',\n      'shop' => 'ショップ',\n      'team' => 'チーム',\n      'users' => 'ユーザー',\n      'system' => 'システム',\n      'social' => 'ソーシャル',\n      'events' => 'イベント',\n      'customers' => 'カスタマー',\n      'my_settings' => 'マイ設定',\n    ],\n  ],\n  'plugin' => [\n    'unnamed' => '名前なしプラグイン',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => '有効化・無効化',\n    'enable_or_disable_title' => 'プラグインの有効化・無効化',\n    'remove' => '削除',\n    'refresh' => '更新',\n    'disabled_label' => '無効にする',\n    'disabled_help' => 'プラグインを無効にすると、アプリケーションから参照されなくなります。',\n    'selected_amount' => 'プラグインを:amount個選択',\n    'remove_confirm' => '削除していいですか？',\n    'remove_success' => 'システムからプラグインを削除しました。',\n    'refresh_success' => 'システム内のプラグインを更新しました。',\n    'disable_confirm' => '無効にしていいですか？',\n    'disable_success' => 'プラグインを無効にしました。',\n    'enable_success' => 'プラグインを有効にしました。',\n  ],\n  'project' => [\n    'attach' => 'プロジェクト追加',\n    'detach' => 'プロジェクト切り離し',\n    'none' => '無し',\n    'id' => [\n      'missing' => '使用するプロジェクトのIDを指定してください。',\n    ],\n    'detach_confirm' => 'このプロジェクトを切り離しますか？',\n    'unbind_success' => 'プロジェクトを切り離しました。',\n  ],\n  'settings' => [\n    'search' => '検索',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL接続が必要',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'システム内で一意な名前をつけてください。',\n    'test_send' => 'テストメッセージを送信する',\n    'return' => 'テンプレートリストに戻る',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => '作者',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'ビルド :build',\n    'core_build_help' => '新しいビルドが存在します。',\n    'plugin_version_none' => '新プラグイン',\n    'theme_new_install' => '新しいテーマのインストール',\n    'theme_extracting' => 'テーマ \\':name\\' を展開しています',\n    'update_label' => 'ソフトウェアアップデート',\n    'update_loading' => 'アップデートロード中…',\n    'force_label' => '強制アップデート',\n    'found' => [\n      'label' => '新しいアップデートあり',\n      'help' => 'アップデートしたいソフトウェアをクリックしてください。',\n    ],\n    'none' => [\n      'label' => 'アップデートなし',\n      'help' => '新しいアップデートが見つかりません。',\n    ],\n  ],\n  'server' => [\n    'connect_error' => 'サーバー接続エラー。',\n    'response_not_found' => '更新サーバーが見つかりません。',\n    'response_invalid' => 'サーバーからの無効なレスポンス。',\n    'response_empty' => 'サーバーから空のレスポンス。',\n    'file_error' => 'サーバーがパッケージ配布に失敗。',\n    'file_corrupt' => 'サーバーからのファイルが壊れています。',\n  ],\n  'behavior' => [\n    'missing_property' => ':class クラスは、 :behavior ビヘイビアーにより使用される、 :property プロパティーを定義する必要があります。',\n  ],\n  'config' => [\n    'not_found' => ':location で、 :file 設定ファイルが見つかりません。',\n    'required' => ':location　の中の設定で、値の指定が必要な、 :property が見つかりません。',\n  ],\n  'zip' => [\n    'extract_failed' => 'コアファイル： \\':file\\' が取り出せません。',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'リクエストログを空にする',\n    'empty_loading' => 'リクエストログを空にしています...',\n    'empty_success' => 'リクエストログを空にしました。',\n    'return_link' => 'リクエストログに戻る',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'システム',\n    'manage_system_settings' => 'システム設定の管理',\n    'manage_software_updates' => 'ソフトウェアアップデートの管理',\n    'manage_mail_templates' => 'メールテンプレートの管理',\n    'manage_other_administrators' => '他のアドミニストレーターの管理',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/ja/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"             => \":attributeを承認してください。\",\n    \"active_url\"           => \":attributeは、有効なURLではありません。\",\n    \"after\"                => \":attributeには、:date以降の日付を指定してください。\",\n    \"alpha\"                => \":attributeには、アルファベッドのみ使用できます。\",\n    \"alpha_dash\"           => \":attributeには、英数字('A-Z','a-z','0-9')とハイフンと下線('-','_')が使用できます。\",\n    \"alpha_num\"            => \":attributeには、英数字('A-Z','a-z','0-9')が使用できます。\",\n    \"array\"                => \":attributeには、配列を指定してください。\",\n    \"before\"               => \":attributeには、:date以前の日付を指定してください。\",\n    \"between\"              => [\n        \"numeric\" => \":attributeには、:minから、:maxまでの数字を指定してください。\",\n        \"file\"    => \":attributeには、:min KBから:max KBまでのサイズのファイルを指定してください。\",\n        \"string\"  => \":attributeは、:min文字から:max文字にしてください。\",\n        \"array\"   => \":attributeの項目は、:min個から:max個にしてください。\",\n    ],\n    \"boolean\"              => \":attributeには、'true'か'false'を指定してください。\",\n    \"confirmed\"            => \":attributeと:attribute確認が一致しません。\",\n    \"date\"                 => \":attributeは、正しい日付ではありません。\",\n    \"date_format\"          => \":attributeの形式は、':format'と合いません。\",\n    \"different\"            => \":attributeと:otherには、異なるものを指定してください。\",\n    \"digits\"               => \":attributeは、:digits桁にしてください。\",\n    \"digits_between\"       => \":attributeは、:min桁から:max桁にしてください。\",\n    \"email\"                => \":attributeは、有効なメールアドレス形式で指定してください。\",\n    \"exists\"               => \"選択された:attributeは、有効ではありません。\",\n    \"image\"                => \":attributeには、画像を指定してください。\",\n    \"in\"                   => \"選択された:attributeは、有効ではありません。\",\n    \"integer\"              => \":attributeには、整数を指定してください。\",\n    \"ip\"                   => \":attributeには、有効なIPアドレスを指定してください。\",\n    \"max\"                  => [\n        \"numeric\" => \":attributeには、:max以下の数字を指定してください。\",\n        \"file\"    => \":attributeには、:max KB以下のファイルを指定してください。\",\n        \"string\"  => \":attributeは、:max文字以下にしてください。\",\n        \"array\"   => \":attributeの項目は、:max個以下にしてください。\",\n    ],\n    \"mimes\"                => \":attributeには、:valuesタイプのファイルを指定してください。\",\n    \"min\"                  => [\n        \"numeric\" => \":attributeには、:min以上の数字を指定してください。\",\n        \"file\"    => \":attributeには、:min KB以上のファイルを指定してください。\",\n        \"string\"  => \":attributeは、:min文字以上にしてください。\",\n        \"array\"   => \":attributeの項目は、:max個以上にしてください。\",\n    ],\n    \"not_in\"               => \"選択された:attributeは、有効ではありません。\",\n    \"numeric\"              => \":attributeには、数字を指定してください。\",\n    \"regex\"                => \":attributeには、有効な正規表現を指定してください。\",\n    \"required\"             => \":attributeは、必ず指定してください。\",\n    \"required_if\"          => \":otherが:valueの場合、:attributeを指定してください\",\n    \"required_with\"        => \":valuesが指定されている場合、:attributeも指定してください。\",\n    \"required_with_all\"    => \":valuesが全て指定されている場合、:attributeも指定してください。\",\n    \"required_without\"     => \":valuesが指定されていない場合、:attributeを指定してください。\",\n    \"required_without_all\" => \":valuesが全て指定されていない場合、:attributeを指定してください。\",\n    \"same\"                 => \":attributeと:otherが一致しません。\",\n    \"size\"                 => [\n        \"numeric\" => \":attributeには、:sizeを指定してください。\",\n        \"file\"    => \":attributeには、:size KBのファイルを指定してください。\",\n        \"string\"  => \":attributeは、:size文字にしてください。\",\n        \"array\"   => \":attributeの項目は、:size個にしてください。\",\n    ],\n    \"unique\"               => \"指定の:attributeは既に使用されています。\",\n    \"url\"                  => \":attributeは、有効なURL形式で指定してください。\",\n    \"timezone\"             => \":attributeには、有効なタイムゾーンを指定してください。\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'phone.regex' => '電話番号の形式が正しくありません。',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n        'name'    => '名前',\n        'email'   => 'メールアドレス',\n        'phone'   => '電話番号',\n        'subject' => 'お申し込み・お問い合わせ内容',\n        'body'    => 'メッセージ',\n    ],\n\n];\n"
  },
  {
    "path": "modules/system/lang/ja.json",
    "content": "{\n  \"Check For Updates\": \"アップデート確認\",\n  \"Install Packages\": \"パッケージをインストールする\",\n  \"Manage Themes\": \"テーマを管理する\",\n  \"Manage Plugins\": \"プラグイン管理\",\n  \"Project\": \"プロジェクト\",\n  \"Owner\": \"所有者\",\n  \"Plugins\": \"プラグイン\",\n  \"Recommended\": \"おすすめされた\",\n  \"Disabled\": \"無効\",\n  \"Current Build\": \"現在のビルド\",\n  \"Updates Available\": \"利用可能なアップデート\",\n  \"Up to Date\": \"最新の\",\n  \"Latest Build\": \"最新のビルド\",\n  \"View Changelog\": \"変更ログを表示\",\n  \"Software Updates\": \"アップデート\",\n  \"Update the system modules and plugins.\": \"システムの更新、プラグインとテーマの管理とインストール。\",\n  \"General\": \"全般\",\n  \"Mail\": \"郵便\",\n  \"Utilities\": \"ユーティリティ\",\n  \"Settings\": \"設定\",\n  \"Show All Settings\": \"すべての設定を表示\",\n  \"Unable to find the specified settings.\": \"指定された設定は使えません。\",\n  \"The settings page is missing a Model definition.\": \"モデルの定義が見つかりません。\",\n  \":name settings updated\": \":name を設定しました。\",\n  \"Return to System Settings\": \"システム設定へ戻る\",\n  \"Search Settings...\": \"設定を探す...\",\n  \"Disable mail branding CSS\": \"メールのブランディング CSS を無効にする\",\n  \"Manage Sites\": \"サイトの管理\",\n  \"Manage the websites available for this application.\": \"このアプリケーションで利用できる Web サイトを管理します。\",\n  \"Marketplace\": \"市場\",\n  \"There is no documentation provided.\": \"提供されるドキュメントはありません。\",\n  \"Documentation\": \"ドキュメンテーション\",\n  \"Upgrade Guide\": \"アップグレードガイド\",\n  \"License\": \"ライセンス\",\n  \"Attach to Project\": \"プロジェクト追加\",\n  \"Manage Updates\": \"アップデート管理\",\n  \"Software Update\": \"ソフトウェアアップデート\",\n  \"Return to Software Updates\": \"システム アップデートに戻る\",\n  \"Try Again\": \"再実行\",\n  \"Unpacking application files\": \"アプリケーションファイルの展開中\",\n  \"Update Failed\": \"アップデート失敗\",\n  \"Unpacking plugin: :name\": \"プラグイン展開中： :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"プライマリ サイトはデフォルトで使用され、削除できません。\",\n  \"Disabled sites are not shown on the frontend.\": \"無効なサイトはフロントエンドに表示されません。\",\n  \"Enabled in the Admin Panel\": \"管理パネルで有効化\",\n  \"Configuration\": \"構成\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"管理パネルでサイトを有効にする場合は、これを使用します。\",\n  \"Install\": \"インストール\",\n  \"Sync Project\": \"プロジェクトを同期\",\n  \"Name\": \"名前\",\n  \"Unique Code\": \"固有コード\",\n  \"Theme\": \"テーマ\",\n  \"Sites\": \"サイト\",\n  \"Create Site\": \"サイトを作成\",\n  \"Base URL\": \"ベース URL\",\n  \"Status\": \"ステータス\",\n  \"Current default value: :value\": \"現在のデフォルト値: :value\",\n  \"Locale\": \"ローカル\",\n  \"Timezone\": \"タイムゾーン\",\n  \"Custom application URL\": \"カスタム アプリケーション URL\",\n  \"Override the application URL when this site is active.\": \"このサイトがアクティブなときにアプリケーション URL をオーバーライドします。\",\n  \"Use a CMS route prefix\": \"CMS ルート プレフィックスを使用する\",\n  \"A prefix can identify this site when using a shared hostname.\": \"共有ホスト名を使用する場合、接頭辞でこのサイトを識別できます。\",\n  \"Define matching hostnames\": \"一致するホスト名を定義する\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"このサイトを提供するために使用する必要があるドメイン名とパターンを指定します。\",\n  \"Display a style for this site\": \"このサイトの色を表示する\",\n  \"To help identify this site, display a color in the admin panel.\": \"このサイトを識別しやすいように、管理パネルに色を表示してください。\",\n  \"Save\": \"保存\",\n  \"Save and Close\": \"保存して閉じます\",\n  \"Use Default\": \"デフォルトを使用します\",\n  \"Use Custom\": \"カスタムを使用\",\n  \"Specify a custom locale code.\": \"カスタム ロケール コードを指定します。\",\n  \"Failed\": \"失敗した\",\n  \"or\": \"また\",\n  \"Code\": \"コード\",\n  \"October CMS Marketplace\": \"10 月の CMS マーケットプレイス\",\n  \"Visit the :link to add some.\": \"プロジェクトにはプラグインやテーマはありません。 :link にアクセスして追加してください。\",\n  \"Buy Now\": \"今買う\",\n  \"Updating package manager\": \"パッケージマネージャーを更新しています\",\n  \"Updating application files\": \"アプリケーションファイルのダウンロード中\",\n  \"Setting build number\": \"ビルド番号の設定\",\n  \"Finishing update process\": \"アップデート仕上げ中\",\n  \"Installing plugin: :name\": \"プラグインダウンロード中： :name\",\n  \"Finishing installation process\": \"インストールを仕上げ中\",\n  \"Removing theme: :name\": \"テーマを削除しています: :name\",\n  \"Please specify a Theme name to install.\": \"インストールするテーマ名を指定してください。\",\n  \"Installing theme: :name\": \"テーマ ':name' をダウンロードしています\",\n  \"Removing plugin: :name\": \"プラグインを削除しています: :name\",\n  \"Please specify a Plugin name to install.\": \"インストールするプラグインの名前を指定してください。\",\n  \"Update process complete\": \"アップデートしました。\",\n  \"Package installed successfully\": \"プラグインをインストールしました。\",\n  \"Check Dependencies\": \"依存関係を確認する\",\n  \"Install Dependencies\": \"依存関係のインストール\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"システムが正しく動作するために必要な依存関係が欠落しています。\",\n  \"License Key\": \"ライセンスキー\",\n  \"How to find your License Key\": \"ライセンス キーの確認方法\",\n  \"The password attribute is required.\": \"パスワード属性は必須です。\",\n  \"The login attribute is required.\": \"ログイン属性は必須です。\",\n  \"Cannot login user since they are not activated.\": \"ユーザーはアクティブ化されていないため、ログインできません。\",\n  \"Cannot login user since they are banned.\": \"ユーザーは禁止されているためログインできません。\",\n  \"Cannot login user since they are suspended.\": \"ユーザーは一時停止されているためログインできません。\",\n  \"A user was not found with the given credentials.\": \"指定された資格情報を持つユーザーが見つかりませんでした。\",\n  \"A user was found but the password did not match.\": \"ユーザーは見つかりましたが、パスワードが一致しませんでした。\",\n  \"User is not logged in\": \"ユーザーはログインしていません\",\n  \"Register Software\": \"ソフトウェアを登録する\",\n  \"View the Dashboard\": \"ダッシュボードの表示\",\n  \"Set the Default Dashboard\": \"デフォルトのダッシュボードを設定する\",\n  \"Log File\": \"ログファイル\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"彼の\",\n  \"Postmark\": \"消印\",\n  \"No encryption\": \"暗号化なし\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"メール設定\",\n  \"Manage email configuration.\": \"メール設定の管理\",\n  \"Sender Name\": \"送信者名\",\n  \"Sender Email\": \"送信者メール\",\n  \"Mail Method\": \"メール方法\",\n  \"SMTP Address\": \"SMTPアドレス\",\n  \"SMTP Port\": \"SMTPポート\",\n  \"SMTP Encryption Protocol\": \"SMTP暗号化プロトコル\",\n  \"SMTP Authorization Required\": \"SMTP認証が必要\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"SMTPサーバーの認証が必要な場合、チェックしてください。\",\n  \"Username\": \"ユーザー名\",\n  \"Password\": \"パスワード\",\n  \"Sendmail Path\": \"Sendmailパス\",\n  \"Please specify the path of the sendmail program.\": \"Sendmailプログラムへのパスを指定してください。\",\n  \"Mailgun Domain\": \"Mailgunドメイン\",\n  \"Please specify the Mailgun domain name.\": \"Mailgunドメイン名を指定してください。\",\n  \"Mailgun Secret\": \"Mailgun APIキー\",\n  \"Enter your Mailgun API key.\": \"Mailgun APIキーを指定してください。\",\n  \"SES Key\": \"SESキー\",\n  \"Enter your SES API key\": \"SES API キーを入力してください\",\n  \"SES Secret\": \"SESの秘密\",\n  \"Enter your SES API secret key\": \"SES API 秘密キーを入力してください\",\n  \"SES Region\": \"SES地域\",\n  \"Enter your SES region (e.g. us-east-1)\": \"SES リージョンを入力します (例: us-east-1)\",\n  \"Postmark Token\": \"消印トークン\",\n  \"Enter your Postmark API secret key\": \"Postmark API 秘密キーを入力してください\",\n  \"Define administrator roles\": \"管理者の役割を定義する\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"このサイトへのアクセスは、次の役割を持つ管理者のみに制限してください。\",\n  \"Mail Templates\": \"メールテンプレート\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"メールテンプレートの変更、ユーザー・アドミニストレーターへの送信、メールレイアウトの管理。\",\n  \"Event Log\": \"イベントログ\",\n  \"View system log messages with their recorded time and details.\": \"システムログメッセージを時間や詳細付きで表示します。\",\n  \"Request Log\": \"リクエストログ\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"正しくないリクエストやリダイレクトを表示します。例えば \\\"Page not found (404)\\\" です。\",\n  \"Test message sent.\": \"テストメッセージが送信されました。\",\n  \"New Layout\": \"新規レイアウト\",\n  \"New Template\": \"新規テンプレート\",\n  \"Template\": \"テンプレート\",\n  \"Templates\": \"テンプレートs\",\n  \"Layouts\": \"レイアウトs\",\n  \"Layout\": \"レイアウト\",\n  \"Mail Layouts\": \"メールレイアウト\",\n  \"Unique code used to refer to this template\": \"システム内で一意なコードをつけてください。\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"プレーンテキスト\",\n  \"Subject\": \"サブジェクト\",\n  \"Email message subject\": \"Emailメッセージのサブジェクト\",\n  \"Description\": \"説明\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"イベントID\",\n  \"Level\": \"レベル\",\n  \"Date & Time\": \"日付と時間\",\n  \"Message\": \"メッセージ\",\n  \"Version\": \"バージョン\",\n  \"Log ID\": \"ログID\",\n  \"Counter\": \"カウンタ\",\n  \"Referers\": \"参照元\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"アプリケーションで発生した潜在的なエラーを表示します。例えば、例外やデバッグ情報です。\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\",\n  \"Event log emptied\": \"イベントログを空にしました。\",\n  \"Empty Event Log\": \"イベントログを空にする\",\n  \"Emptying Event Log...\": \"イベントログを空にしています...\",\n  \"Return to Event Log\": \"イベントログに戻る\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"更新していいですか？\",\n  \"Plugin has been removed from the file system.\": \"システムから見知らぬプラグインを削除しました。\",\n  \"Install Plugin\": \"プラグインインストール\",\n  \"Plugin Name\": \"プラグイン名\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"重複しないプラグイン名を付けてください。（例：RainLab.Blog）\",\n  \"The combiner file ':name' is not found.\": \"コンバイナファイル':name'が見つかりません。\"\n}"
  },
  {
    "path": "modules/system/lang/kaa.json",
    "content": "{\n  \"Check For Updates\": \"Jańalanıwlardı tekseriw\",\n  \"Install Packages\": \"Paketlerdi ornatıw\",\n  \"Manage Themes\": \"Temalardı basqarıw\",\n  \"Manage Plugins\": \"Plaginlerdi basqarıw\",\n  \"Project\": \"Joba\",\n  \"Owner\": \"Iyesi\",\n  \"Plugins\": \"Plaginler\",\n  \"Recommended\": \"Usınıs etiledi\",\n  \"Disabled\": \"Óshirilgen\",\n  \"Current Build\": \"Ámeldegi versiya\",\n  \"Updates Available\": \"Jańalanıwlar bar\",\n  \"Up to Date\": \"Sońǵı versiya\",\n  \"Latest Build\": \"Sońǵı versiya\",\n  \"View Changelog\": \"Ózgerisler dizimin kóriw\",\n  \"Software Updates\": \"Software Updates\",\n  \"Update the system modules and plugins.\": \"Update the system modules and plugins.\",\n  \"General\": \"Ulıwmalıq\",\n  \"Mail\": \"Pochta\",\n  \"Utilities\": \"Utilities\",\n  \"Settings\": \"Sazlawlar\",\n  \"Show All Settings\": \"Barlıq sazlawlardı kórsetiw\",\n  \"Unable to find the specified settings.\": \"Kórsetilgen sazlawlardı tabıw nátiyjesiz.\",\n  \"The settings page is missing a Model definition.\": \"The settings page is missing a Model definition.\",\n  \":name settings updated\": \":name sazlawları tabıslı jańalandı\",\n  \"Return to System Settings\": \"Sistema sazlawlarına qaytıw\",\n  \"Search Settings...\": \"Sazlawldı tabıw...\",\n  \"Disable mail branding CSS\": \"Disable mail branding CSS\",\n  \"Manage Sites\": \"Saytlardı basqarıw\",\n  \"Manage the websites available for this application.\": \"Manage the websites available for this application.\",\n  \"Marketplace\": \"Marketplace\",\n  \"There is no documentation provided.\": \"There is no documentation provided.\",\n  \"Documentation\": \"Hújjetshilik\",\n  \"Upgrade Guide\": \"Jańalaw boyınsha kórsetpe\",\n  \"License\": \"Licenziya\",\n  \"Attach to Project\": \"Jobaǵa qosıw\",\n  \"Manage Updates\": \"Jańalanıwlar basqarıwshısı\",\n  \"Software Update\": \"Software Update\",\n  \"Return to Software Updates\": \"Return to Software Updates\",\n  \"Try Again\": \"Jáne bir márte urınıw\",\n  \"Unpacking application files\": \"Unpacking application files\",\n  \"Update Failed\": \"Jańalawdı orınlaw ámelge aspadı\",\n  \"Unpacking plugin: :name\": \"Unpacking plugin: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"The primary site is used by default and cannot be deleted.\",\n  \"Disabled sites are not shown on the frontend.\": \"Óshirilgen saytlar frontendte kórinbeydi.\",\n  \"Enabled in the Admin Panel\": \"Administrator panelinde qosılǵan\",\n  \"Configuration\": \"Configuration\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Eger sayt administrator panelinde qosılǵan bolıwın qáleseńiz, usını qollanıń.\",\n  \"Install\": \"Ornatıw\",\n  \"Sync Project\": \"Jobanı sáykeslestiriw\",\n  \"Name\": \"Ataması\",\n  \"Unique Code\": \"Unique Code\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Saytlar\",\n  \"Create Site\": \"Sayt jaratıw\",\n  \"Base URL\": \"Base URL\",\n  \"Status\": \"Jaǵday\",\n  \"Current default value: :value\": \"Current default value: :value\",\n  \"Locale\": \"Til\",\n  \"Timezone\": \"Timezone\",\n  \"Custom application URL\": \"Custom application URL\",\n  \"Override the application URL when this site is active.\": \"Override the application URL when this site is active.\",\n  \"Use a CMS route prefix\": \"Use a CMS route prefix\",\n  \"A prefix can identify this site when using a shared hostname.\": \"A prefix can identify this site when using a shared hostname.\",\n  \"Define matching hostnames\": \"Define matching hostnames\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Specify domain names and patterns that must be used to serve this site.\",\n  \"Display a style for this site\": \"Display a style for this site\",\n  \"To help identify this site, display a color in the admin panel.\": \"To help identify this site, display a color in the admin panel.\",\n  \"Save\": \"Saqlaw\",\n  \"Save and Close\": \"Saqlaw hám jabıw\",\n  \"Use Default\": \"Ádepki\",\n  \"Use Custom\": \"Arnawlı\",\n  \"Specify a custom locale code.\": \"Specify a custom locale code.\",\n  \"Failed\": \"Ámelge aspadı\",\n  \"or\": \"yamasa\",\n  \"Code\": \"Kod\",\n  \"October CMS Marketplace\": \"October CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Project has no plugins or themes. Visit the :link to add some.\",\n  \"Buy Now\": \"Satıp alıw\",\n  \"Updating package manager\": \"Updating package manager\",\n  \"Updating application files\": \"Qosımsha faylları jańalanbaqta\",\n  \"Setting build number\": \"Setting build number\",\n  \"Finishing update process\": \"Jańalaw procesi juwmaqlanbaqta\",\n  \"Installing plugin: :name\": \"Plagin ornatılmaqta: :name\",\n  \"Finishing installation process\": \"Ornatıw procesi juwmaqlanbaqta\",\n  \"Removing theme: :name\": \"Tema óshirilmekte: :name\",\n  \"Please specify a Theme name to install.\": \"Ótinish, ornatıw ushın tema atamasın kórsetiń.\",\n  \"Installing theme: :name\": \"Tema ornatılmaqta: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Plagin óshirilmekte: :name\",\n  \"Please specify a Plugin name to install.\": \"Ótinish, ornatıw ushın plagin atamasın kórsetiń.\",\n  \"Update process complete\": \"Jańalaw procesi tabıslı juwmaqlandı\",\n  \"Package installed successfully\": \"Plagin tabıslı júklendi\",\n  \"Check Dependencies\": \"Check Dependencies\",\n  \"Install Dependencies\": \"Install Dependencies\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"There are missing dependencies needed for the system to run correctly.\",\n  \"License Key\": \"Licenziya gilti\",\n  \"How to find your License Key\": \"Licenziya giltin qalay tawaman\",\n  \"The password attribute is required.\": \"Parol májbúriy.\",\n  \"The login attribute is required.\": \"Login májbúriy.\",\n  \"Cannot login user since they are not activated.\": \"Kiriw múmkin emes, sebebi paydalanıwshı aktivlestirilmegen.\",\n  \"Cannot login user since they are banned.\": \"Cannot login user since they are banned.\",\n  \"Cannot login user since they are suspended.\": \"Cannot login user since they are suspended.\",\n  \"A user was not found with the given credentials.\": \"Kórsetilgen maǵlıwmatlarǵa iye paydalanıwshı tabılmadı.\",\n  \"A user was found but the password did not match.\": \"Paydalanıwshı tabıldı biraq parol sáykes emes.\",\n  \"User is not logged in\": \"User is not logged in\",\n  \"Register Software\": \"Register Software\",\n  \"View the Dashboard\": \"Basqarıw panelin kóriw\",\n  \"Set the Default Dashboard\": \"Set the Default Dashboard\",\n  \"Log File\": \"Esap faylı\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Shifrlawsız\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Pochta sazlawları\",\n  \"Manage email configuration.\": \"Elektron pochta sazlawların basqarıw.\",\n  \"Sender Name\": \"Jiberiwshi atı\",\n  \"Sender Email\": \"Jiberiwshi mánzili\",\n  \"Mail Method\": \"Usıl\",\n  \"SMTP Address\": \"SMTP mánzili\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"SMTP Encryption Protocol\",\n  \"SMTP Authorization Required\": \"SMTP Authorization Required\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Use this checkbox if your SMTP server requires authorization.\",\n  \"Username\": \"Paydalanıwshı atı\",\n  \"Password\": \"Parol\",\n  \"Sendmail Path\": \"Sendmail jolı\",\n  \"Please specify the path of the sendmail program.\": \"Ótinish, sendmailǵa joldı kórsetiń.\",\n  \"Mailgun Domain\": \"Domen Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Ótinish, Mailgun domenin kórsetiń.\",\n  \"Mailgun Secret\": \"Jasırın API gilt\",\n  \"Enter your Mailgun API key.\": \"Mailgun API giltińizdi kirgiziń.\",\n  \"SES Key\": \"SES API gilt\",\n  \"Enter your SES API key\": \"SES API giltińizdi kirgiziń\",\n  \"SES Secret\": \"SES jasırın API gilt\",\n  \"Enter your SES API secret key\": \"SES API jasırın giltińizdi kirgiziń\",\n  \"SES Region\": \"SES aymaq\",\n  \"Enter your SES region (e.g. us-east-1)\": \"SES aymaǵıńızdı kirgiziń (Mısalı: us-east-1)\",\n  \"Postmark Token\": \"Postmark Token\",\n  \"Enter your Postmark API secret key\": \"Postmark API jasırın giltińizdi kirgiziń\",\n  \"Define administrator roles\": \"Define administrator roles\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restrict access to this site to only administrator with the following roles.\",\n  \"Group\": \"Topar\",\n  \"Create Group\": \"Topar jaratıw\",\n  \"Site Group\": \"Sayt toparı\",\n  \"Site Groups\": \"Sayt toparları\",\n  \"Manage Site Groups\": \"Sayt toparların basqarıw\",\n  \"Group Name\": \"Topar ataması\",\n  \"All Sites\": \"Barlıq saytlar\",\n  \"Manage Backend Preferences\": \"Basqarıw panelinıń sazlawların basqarıw\",\n  \"Manage Code Editor Preferences\": \"Kod redaktorınıń sazlawların basqarıw\",\n  \"Customize Backend Styles\": \"Customize Backend Styles\",\n  \"Mail Templates\": \"Mail Templates\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modify the mail templates that are sent to users and administrators, manage email layouts.\",\n  \"Mail Branding\": \"Mail Branding\",\n  \"Modify the colors and appearance of mail templates.\": \"Modify the colors and appearance of mail templates.\",\n  \"Event Log\": \"Event Log\",\n  \"View system log messages with their recorded time and details.\": \"View system log messages with their recorded time and details.\",\n  \"Request Log\": \"Request Log\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"View bad or redirected requests, such as Page not found (404).\",\n  \"Log Settings\": \"Log Settings\",\n  \"Specify which areas should use logging.\": \"Specify which areas should use logging.\",\n  \"Test message sent.\": \"Test message sent.\",\n  \"New Layout\": \"Jańa maket\",\n  \"New Partial\": \"New Partial\",\n  \"New Template\": \"Jańa shablon\",\n  \"Template\": \"Shablon\",\n  \"Templates\": \"Shablonlar\",\n  \"Layouts\": \"Maketler\",\n  \"Partials\": \"Partials\",\n  \"Partial\": \"Partial\",\n  \"Mail Partials\": \"Mail Partials\",\n  \"Layout\": \"Maket\",\n  \"Mail Layouts\": \"Mail Layouts\",\n  \"Unique code used to refer to this template\": \"Unique code used to refer to this template\",\n  \"-- No layout --\": \"-- No layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Ápiwayı tekst\",\n  \"Disable automatic inline CSS\": \"Disable automatic inline CSS\",\n  \"Options\": \"Sazlawlar\",\n  \"Subject\": \"Subject\",\n  \"Email message subject\": \"Email message subject\",\n  \"Description\": \"Táriyp\",\n  \"Drivers Not Installed\": \"Drivers Not Installed\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Event ID\",\n  \"Level\": \"Dáreje\",\n  \"Date & Time\": \"Sáne hám waqıt\",\n  \"Message\": \"Xabar\",\n  \"Logging\": \"Logging\",\n  \"Log Bad Requests\": \"Log Bad Requests\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Browser requests that may require attention, such as 404 errors.\",\n  \"Log Theme Changes\": \"Log Theme Changes\",\n  \"When a change is made to the theme using the backend.\": \"When a change is made to the theme using the backend.\",\n  \"Log System Events\": \"Log System Events\",\n  \"Store system events in the database in addition to the file-based log.\": \"Store system events in the database in addition to the file-based log.\",\n  \"Background\": \"Background\",\n  \"Body background\": \"Body background\",\n  \"Content background\": \"Content background\",\n  \"Inner content background\": \"Inner content background\",\n  \"Buttons\": \"Túymeler\",\n  \"Button text color\": \"Button text color\",\n  \"Primary button background\": \"Primary button background\",\n  \"Positive button background\": \"Positive button background\",\n  \"Negative button background\": \"Negative button background\",\n  \"Typography\": \"Typography\",\n  \"Header color\": \"Header color\",\n  \"Headings color\": \"Headings color\",\n  \"Text color\": \"Text color\",\n  \"Link color\": \"Link color\",\n  \"Footer color\": \"Footer color\",\n  \"Borders\": \"Borders\",\n  \"Body border color\": \"Body border color\",\n  \"Subcopy border color\": \"Subcopy border color\",\n  \"Table border color\": \"Table border color\",\n  \"Components\": \"Components\",\n  \"Panel background\": \"Panel fonı\",\n  \"Promotion background\": \"Promo blok fonı\",\n  \"Promotion border color\": \"Promotion border color\",\n  \"Customize Mail Appearance\": \"Customize Mail Appearance\",\n  \"Version\": \"Versiya\",\n  \"Enabled\": \"Qosılǵan\",\n  \"Latest\": \"Sońǵı versiya\",\n  \"Log ID\": \"Log ID\",\n  \"Counter\": \"Counter\",\n  \"Referers\": \"Soraw deregi\",\n  \"URL\": \"Mánzil\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\",\n  \"Event\": \"Event\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Soraw\",\n  \"Event log emptied\": \"Event log emptied\",\n  \"Empty Event Log\": \"Empty Event Log\",\n  \"Emptying Event Log...\": \"Emptying Event Log...\",\n  \"Return to Event Log\": \"Return to Event Log\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\",\n  \"Reset Plugin Data\": \"Reset Plugin Data\",\n  \"Enable Plugins\": \"Enable Plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Are you sure you want to :action these plugins?\",\n  \"enable\": \"enable\",\n  \"disable\": \"disable\",\n  \"Disable Plugins\": \"Disable Plugins\",\n  \"Select Action...\": \"Select Action...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Plugin has been removed from the file system.\",\n  \"search plugins to install...\": \"search plugins to install...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"search themes to install...\",\n  \"Install Theme\": \"Install Theme\",\n  \"Theme Name\": \"Theme Name\",\n  \"Install Plugin\": \"Install Plugin\",\n  \"Plugin Name\": \"Plugin Name\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Name the plugin by its unique code. For example, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Name the theme by its unique code. For example, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\"\n}\n"
  },
  {
    "path": "modules/system/lang/kk.json",
    "content": "{\n  \"Check For Updates\": \"Жаңартуларды тексеру\",\n  \"Install Packages\": \"Пакеттерді орнату\",\n  \"Manage Themes\": \"Темаларды басқару\",\n  \"Manage Plugins\": \"Плагиндерді басқару\",\n  \"Project\": \"Проект\",\n  \"Owner\": \"Иесі\",\n  \"Plugins\": \"Плагиндер\",\n  \"Recommended\": \"Ұсынылғандар\",\n  \"Disabled\": \"Өшірулі\",\n  \"Current Build\": \"Қазіргі версия\",\n  \"Updates Available\": \"Жаңартулар қол жетімді\",\n  \"Up to Date\": \"Жаңарту\",\n  \"Latest Build\": \"Соңғы сборка\",\n  \"View Changelog\": \"Өзгертілген тізімді қарау\",\n  \"Software Updates\": \"Жүйенің жаңартулары\",\n  \"Update the system modules and plugins.\": \"Жүйенің модулдерін және плагиндерді жаңарту.\",\n  \"General\": \"Басты\",\n  \"Mail\": \"Эл. пошта\",\n  \"Utilities\": \"Қызметтік бағдарлама\",\n  \"Settings\": \"Баптаулар\",\n  \"Show All Settings\": \"Баптауларды көрсет\",\n  \"Unable to find the specified settings.\": \"Көрсетілген баптаулар табылмады.\",\n  \"The settings page is missing a Model definition.\": \"Баптаулар бетінде моделдер анықтамасы жоқ.\",\n  \":name settings updated\": \":name баптаулары сәтті сақталды\",\n  \"Return to System Settings\": \"Жүйенің баптауларына қайта оралу\",\n  \"Search Settings...\": \"Баптауларды іздеу...\",\n  \"Disable mail branding CSS\": \"Пошта брендингіне арналған CSS өшіру\",\n  \"Manage Sites\": \"Сайтты басқару\",\n  \"Manage the websites available for this application.\": \"Осы қолданба үшін қолжетімді веб-сайттарды басқару.\",\n  \"Marketplace\": \"Маркетплейс\",\n  \"There is no documentation provided.\": \"Құжаттама ұсынылмаған.\",\n  \"Documentation\": \"Құжаттама\",\n  \"Upgrade Guide\": \"Жаңарту нұсқаулары\",\n  \"License\": \"Лицензия\",\n  \"Attach to Project\": \"Жобаға қосу\",\n  \"Manage Updates\": \"Жаңартуды басқару\",\n  \"Software Update\": \"Бағдарламалық қамтаманы жаңарту\",\n  \"Return to Software Updates\": \"Жүйенің баптауларына қайта оралу\",\n  \"Try Again\": \"Тағы қайталап көру\",\n  \"Unpacking application files\": \"Қолданба файлдарын қаптамадан шығару\",\n  \"Update Failed\": \"Жаңарту орындалмады\",\n  \"Unpacking plugin: :name\": \":name плагинін қаптамадан шығару\",\n  \"The primary site is used by default and cannot be deleted.\": \"Негізгі сайт әдепкі бойынша пайдаланылады және оны жою мүмкін емес.\",\n  \"Disabled sites are not shown on the frontend.\": \"Өшірілген сайттар фронт жақта көрсетілмейді.\",\n  \"Enabled in the Admin Panel\": \"Админ панелінде қосылған\",\n  \"Configuration\": \"Баптаулар\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Сайттың админ панелінде белсенді болуын қаласаңыз, мұны пайдаланыңыз.\",\n  \"Install\": \"Орнату\",\n  \"Sync Project\": \"Жобаны синхрондау\",\n  \"Name\": \"Атауы\",\n  \"Unique Code\": \"Unique Code\",\n  \"Theme\": \"Theme\",\n  \"Sites\": \"Sites\",\n  \"Create Site\": \"Create Site\",\n  \"Base URL\": \"Base URL\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Current default value: :value\",\n  \"Locale\": \"Locale\",\n  \"Timezone\": \"Timezone\",\n  \"Custom application URL\": \"Custom application URL\",\n  \"Override the application URL when this site is active.\": \"Override the application URL when this site is active.\",\n  \"Use a CMS route prefix\": \"Use a CMS route prefix\",\n  \"A prefix can identify this site when using a shared hostname.\": \"A prefix can identify this site when using a shared hostname.\",\n  \"Define matching hostnames\": \"Define matching hostnames\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Specify domain names and patterns that must be used to serve this site.\",\n  \"Display a style for this site\": \"Display a style for this site\",\n  \"To help identify this site, display a color in the admin panel.\": \"To help identify this site, display a color in the admin panel.\",\n  \"Save\": \"Save\",\n  \"Save and Close\": \"Save and Close\",\n  \"Use Default\": \"Use Default\",\n  \"Use Custom\": \"Use Custom\",\n  \"Specify a custom locale code.\": \"Specify a custom locale code.\",\n  \"Failed\": \"Failed\",\n  \"or\": \"or\",\n  \"Code\": \"Code\",\n  \"October CMS Marketplace\": \"October CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Project has no plugins or themes. Visit the :link to add some.\",\n  \"Buy Now\": \"Buy Now\",\n  \"Updating package manager\": \"Updating package manager\",\n  \"Updating application files\": \"Updating application files\",\n  \"Setting build number\": \"Setting build number\",\n  \"Finishing update process\": \"Finishing update process\",\n  \"Installing plugin: :name\": \"Installing plugin: :name\",\n  \"Finishing installation process\": \"Finishing installation process\",\n  \"Removing theme: :name\": \"Removing theme: :name\",\n  \"Please specify a Theme name to install.\": \"Please specify a Theme name to install.\",\n  \"Installing theme: :name\": \"Installing theme: :name\",\n  \"Removing plugin: :name\": \"Removing plugin: :name\",\n  \"Please specify a Plugin name to install.\": \"Please specify a Plugin name to install.\",\n  \"Update process complete\": \"Update process complete\",\n  \"Package installed successfully\": \"Package installed successfully\",\n  \"Check Dependencies\": \"Check Dependencies\",\n  \"Install Dependencies\": \"Install Dependencies\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"There are missing dependencies needed for the system to run correctly.\",\n  \"License Key\": \"License Key\",\n  \"How to find your License Key\": \"How to find your License Key\",\n  \"The password attribute is required.\": \"The password attribute is required.\",\n  \"The login attribute is required.\": \"The login attribute is required.\",\n  \"Cannot login user since they are not activated.\": \"Cannot login user since they are not activated.\",\n  \"Cannot login user since they are banned.\": \"Cannot login user since they are banned.\",\n  \"Cannot login user since they are suspended.\": \"Жүйеге кіру мүмкін емес, себебі пайдаланушы өшірілген.\",\n  \"A user was not found with the given credentials.\": \"Көрсетілген деректері бар пайдаланушы табылмады.\",\n  \"A user was found but the password did not match.\": \"Пайдаланушы табылды, бірақ құпия сөз сәйкес келмейді.\",\n  \"User is not logged in\": \"Пайдаланушы кірмеген\",\n  \"Register Software\": \"Бағдарламалық құралды тіркеу\",\n  \"View the Dashboard\": \"Бақылау тақтасын көру\",\n  \"Set the Default Dashboard\": \"Set the Default Dashboard\",\n  \"Log File\": \"Log File\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"No encryption\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Mail Configuration\",\n  \"Manage email configuration.\": \"Manage email configuration.\",\n  \"Sender Name\": \"Sender Name\",\n  \"Sender Email\": \"Sender Email\",\n  \"Mail Method\": \"Mail Method\",\n  \"SMTP Address\": \"SMTP Address\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"SMTP Encryption Protocol\",\n  \"SMTP Authorization Required\": \"SMTP Authorization Required\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Use this checkbox if your SMTP server requires authorization.\",\n  \"Username\": \"Username\",\n  \"Password\": \"Password\",\n  \"Sendmail Path\": \"Sendmail Path\",\n  \"Please specify the path of the sendmail program.\": \"Please specify the path of the sendmail program.\",\n  \"Mailgun Domain\": \"Mailgun Domain\",\n  \"Please specify the Mailgun domain name.\": \"Please specify the Mailgun domain name.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Enter your Mailgun API key.\",\n  \"SES Key\": \"SES Key\",\n  \"Enter your SES API key\": \"Enter your SES API key\",\n  \"SES Secret\": \"SES Secret\",\n  \"Enter your SES API secret key\": \"Enter your SES API secret key\",\n  \"SES Region\": \"SES Region\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Enter your SES region (e.g. us-east-1)\",\n  \"Postmark Token\": \"Postmark Token\",\n  \"Enter your Postmark API secret key\": \"Enter your Postmark API secret key\",\n  \"Define administrator roles\": \"Define administrator roles\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restrict access to this site to only administrator with the following roles.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"All Sites\",\n  \"Manage Backend Preferences\": \"Manage Backend Preferences\",\n  \"Manage Code Editor Preferences\": \"Manage Code Editor Preferences\",\n  \"Customize Backend Styles\": \"Customize Backend Styles\",\n  \"Mail Templates\": \"Mail Templates\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modify the mail templates that are sent to users and administrators, manage email layouts.\",\n  \"Mail Branding\": \"Mail Branding\",\n  \"Modify the colors and appearance of mail templates.\": \"Modify the colors and appearance of mail templates.\",\n  \"Event Log\": \"Event Log\",\n  \"View system log messages with their recorded time and details.\": \"View system log messages with their recorded time and details.\",\n  \"Request Log\": \"Request Log\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"View bad or redirected requests, such as Page not found (404).\",\n  \"Log Settings\": \"Log Settings\",\n  \"Specify which areas should use logging.\": \"Specify which areas should use logging.\",\n  \"Test message sent.\": \"Test message sent.\",\n  \"New Layout\": \"New Layout\",\n  \"New Partial\": \"New Partial\",\n  \"New Template\": \"New Template\",\n  \"Template\": \"Template\",\n  \"Templates\": \"Templates\",\n  \"Layouts\": \"Layouts\",\n  \"Partials\": \"Partials\",\n  \"Partial\": \"Partial\",\n  \"Mail Partials\": \"Mail Partials\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"Mail Layouts\",\n  \"Unique code used to refer to this template\": \"Unique code used to refer to this template\",\n  \"-- No layout --\": \"-- No layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Plaintext\",\n  \"Disable automatic inline CSS\": \"Disable automatic inline CSS\",\n  \"Options\": \"Options\",\n  \"Subject\": \"Subject\",\n  \"Email message subject\": \"Email message subject\",\n  \"Description\": \"Description\",\n  \"Drivers Not Installed\": \"Drivers Not Installed\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Event ID\",\n  \"Level\": \"Level\",\n  \"Date & Time\": \"Date & Time\",\n  \"Message\": \"Message\",\n  \"Logging\": \"Logging\",\n  \"Log Bad Requests\": \"Log Bad Requests\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Browser requests that may require attention, such as 404 errors.\",\n  \"Log Theme Changes\": \"Log Theme Changes\",\n  \"When a change is made to the theme using the backend.\": \"When a change is made to the theme using the backend.\",\n  \"Log System Events\": \"Log System Events\",\n  \"Store system events in the database in addition to the file-based log.\": \"Store system events in the database in addition to the file-based log.\",\n  \"Background\": \"Background\",\n  \"Body background\": \"Body background\",\n  \"Content background\": \"Content background\",\n  \"Inner content background\": \"Inner content background\",\n  \"Buttons\": \"Buttons\",\n  \"Button text color\": \"Button text color\",\n  \"Primary button background\": \"Primary button background\",\n  \"Positive button background\": \"Positive button background\",\n  \"Negative button background\": \"Negative button background\",\n  \"Typography\": \"Typography\",\n  \"Header color\": \"Header color\",\n  \"Headings color\": \"Headings color\",\n  \"Text color\": \"Text color\",\n  \"Link color\": \"Link color\",\n  \"Footer color\": \"Footer color\",\n  \"Borders\": \"Borders\",\n  \"Body border color\": \"Body border color\",\n  \"Subcopy border color\": \"Subcopy border color\",\n  \"Table border color\": \"Table border color\",\n  \"Components\": \"Components\",\n  \"Panel background\": \"Panel background\",\n  \"Promotion background\": \"Promotion background\",\n  \"Promotion border color\": \"Promotion border color\",\n  \"Customize Mail Appearance\": \"Customize Mail Appearance\",\n  \"Version\": \"Version\",\n  \"Enabled\": \"Enabled\",\n  \"Latest\": \"Latest\",\n  \"Log ID\": \"Log ID\",\n  \"Counter\": \"Counter\",\n  \"Referers\": \"Referers\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\",\n  \"Event\": \"Event\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Request\",\n  \"Event log emptied\": \"Event log emptied\",\n  \"Empty Event Log\": \"Empty Event Log\",\n  \"Emptying Event Log...\": \"Emptying Event Log...\",\n  \"Return to Event Log\": \"Return to Event Log\",\n  \"Installed\": \"Installed\"\n}"
  },
  {
    "path": "modules/system/lang/ko/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => '서식',\n        'quote' => '인용',\n        'code' => '코도',\n        'header1' => '헤더 1',\n        'header2' => '헤더 2',\n        'header3' => '헤더 3',\n        'header4' => '헤더 4',\n        'header5' => '헤더 5',\n        'header6' => '헤더 6',\n        'bold' => '진하게',\n        'italic' => '이탤릭',\n        'unorderedlist' => '비순차 목록',\n        'orderedlist' => '순차 목록',\n        'video' => '동영상',\n        'image' => '이미지',\n        'link' => '링크',\n        'horizontalrule' => '가로선 삽입',\n        'fullscreen' => '전체화면',\n        'preview' => '미리보기',\n    ],\n    'mediamanager' => [\n        'insert_link' => '미디어 링크 삽입',\n        'insert_image' => '그림 삽입',\n        'insert_video' => '동영상 삽입',\n        'insert_audio' => '소리 삽입',\n        'invalid_file_empty_insert' => '링크를 삽입할 파일을 선택해주세요.',\n        'invalid_file_single_insert' => '한개의 파일을 선택해주세요.',\n        'invalid_image_empty_insert' => '삽입할 그림을 선택해 주세요.',\n        'invalid_video_empty_insert' => '삽입할 동영상을 선택해 주세요.',\n        'invalid_audio_empty_insert' => '삽입할 소리파일을 선택해 주세요.',\n    ],\n    'alert' => [\n        'confirm_button_text' => '확인',\n        'cancel_button_text' => '취소',\n        'widget_remove_confirm' => '이 위젯을 삭제하시겠습니까?'\n    ],\n    'datepicker' => [\n        'previousMonth' => '지난 달',\n        'nextMonth' => '다음 달',\n        'months' => ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],\n        'weekdays' => ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],\n        'weekdaysShort' => ['일', '월', '화', '수', '목', '금', '토']\n    ],\n    'filter' => [\n        'group' => [\n            'all' => '전체'\n        ],\n        'dates' => [\n            'all' => '전체',\n            'filter_button_text' => '필터',\n            'reset_button_text'  => '재설정',\n            'date_placeholder' => '날짜',\n            'after_placeholder' => '이후',\n            'before_placeholder' => '이전'\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => '스택 추적 보기',\n        'hide_stacktrace' => '스택 추적 감추기',\n        'tabs' => [\n            'formatted' => '정리된로그',\n            'raw' => '본래로그',\n        ],\n        'editor' => [\n            'title' => '소스코드 편집기',\n            'description' => '이런 URL 스키마를 받을 수 있도록 당신의 운영체제가 설정되어야 합니다.',\n            'openWith' => '같이 열기',\n            'remember_choice' => '이 세션의 옵션을 기억',\n            'open' => '열기',\n            'cancel' => '취소'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/ko/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => '기본으로 돌아가기',\n  ],\n  'directory' => [\n    'create_fail' => '디렉토리 \\':name\\'을 작성할 수 없습니다.',\n  ],\n  'file' => [\n    'create_fail' => '파일 \\':name\\'을 작성할 수 없습니다.',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => '잘못된 보안 토큰',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => '시스템',\n    'menu_label' => '시스템',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => '기타',\n      'logs' => '로그',\n      'mail' => '메일',\n      'shop' => '샵',\n      'team' => '팀',\n      'users' => '유저',\n      'system' => '시스템',\n      'social' => '소셜',\n      'events' => '이벤트',\n      'customers' => '고객',\n      'my_settings' => '내 설정',\n    ],\n  ],\n  'theme' => [\n    'label' => '테마',\n    'unnamed' => '이름없는 테마',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => '테마 설치',\n    'installed' => '설치된 테마',\n    'no_themes' => '마켓에서 설치된 테마가 없습니다.',\n    'recommended' => '추천',\n    'remove_confirm' => '이 테마를 삭제하시겠습니까?',\n  ],\n  'plugin' => [\n    'label' => '플러그인',\n    'unnamed' => '이름없는 플러그인',\n    'name' => [],\n    'by_author' => 'By :name',\n  ],\n  'plugins' => [\n    'enable_or_disable' => '활성화/비활성화',\n    'enable_or_disable_title' => '플러그인 활성화/비활성화',\n    'install' => '플러그인 설치',\n    'install_products' => '제품 설치',\n    'installed' => '설치된 플러그인',\n    'no_plugins' => '마켓에서 설치된 플러그인이 없습니다.',\n    'recommended' => '추천',\n    'remove' => '삭제',\n    'refresh' => '새로고침',\n    'disabled_label' => '비활성화',\n    'disabled_help' => '플러그인을 비활성화하면 애플리케이션에서 사용할수 없게됩니다.',\n    'frozen_label' => '업데이트 동결',\n    'frozen_help' => '동결된 플러그인은 업데이트 과정중에 무시됩니다.',\n    'selected_amount' => '플러그인을 :amount개 선택',\n    'remove_confirm' => '이 플러그인을 삭제하시겠습니까?',\n    'remove_success' => '시스템에서 플러그인을 삭제했습니다.',\n    'refresh_success' => '시스템에 설치된 플러그인을 변경했습니다.',\n    'disable_confirm' => '비활성화하시겠습니까?',\n    'disable_success' => '플러그인을 비활성화 했습니다.',\n    'enable_success' => '플러그인을 활성화했습니다.',\n  ],\n  'project' => [\n    'attach' => '프로젝트 연결',\n    'detach' => '프로젝트 분리',\n    'none' => '없음',\n    'id' => [\n      'missing' => '사용하실 프로젝트 ID를 설정해주세요.',\n    ],\n    'detach_confirm' => '이 프로젝트를 분리하시겠습니까?',\n    'unbind_success' => '프로젝트를 분리했습니다.',\n  ],\n  'settings' => [\n    'search' => '검색',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL접속여부',\n  ],\n  'mail_templates' => [\n    'name_comment' => '시스템상의 고유이름을 붙여주세요.',\n    'test_send' => '테스트 발송',\n    'test_confirm' => ':email 로 테스트메일을 발송합니다. 계속하시겠습니까?',\n    'creating' => '템플릿 생성중...',\n    'creating_layout' => '레이아웃 생성중...',\n    'saving' => '템플릿 저장중...',\n    'saving_layout' => '레이아웃 저장중...',\n    'delete_confirm' => '이 템플릿을 삭제하시겠습니까?',\n    'delete_layout_confirm' => '이 레이아웃을 삭제하시겠습니까?',\n    'deleting' => '템플릿을 삭제중...',\n    'deleting_layout' => '레이아웃을 삭제중...',\n    'sending' => '테스트 메시지 전송중...',\n    'return' => '템플릿 목록으로 돌아가기',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => '작성자',\n    'plugin_not_found' => '플러그인을 찾을 수 없습니다',\n    'core_build' => '빌드 :build',\n    'core_build_help' => '새로운 빌드가 존재합니다.',\n    'themes' => '테마',\n    'plugin_version_none' => '최신버전',\n    'plugin_current_version' => '현재버전',\n    'theme_new_install' => '신규테마설치',\n    'theme_extracting' => '테마 \\':name\\' 압축해제중입니다',\n    'update_label' => 'SW 업데이트',\n    'update_loading' => '업데이트 로딩중...',\n    'force_label' => '강제 업데이트',\n    'found' => [\n      'label' => '업데이트가능',\n      'help' => '업데이트 하실 SW를 클릭해주세요.',\n    ],\n    'none' => [\n      'label' => '업데이트없음',\n      'help' => '업데이트를 발견할 수 없습니다.',\n    ],\n    'important_action' => [\n      'empty' => '선택',\n      'confirm' => '업데이트',\n      'skip' => '이번만 업데이트 안함',\n      'ignore' => '계속 업데이트 안',\n    ],\n    'important_action_required' => '선택 필요',\n    'important_view_guide' => '업그레이드 가이드 보기',\n    'important_view_release_notes' => '릴리즈 노트 보기',\n    'important_alert_text' => '몇몇 업데이트는 주의가 필요합니다.',\n    'details_title' => '플러그인 상세',\n    'details_view_homepage' => '홈페이지 보기',\n    'details_changelog' => '변경로그',\n    'details_changelog_missing' => '변경로그가 제공되지 않습니다.',\n    'details_current_version' => '현재 버전',\n    'details_author' => '작성자',\n  ],\n  'server' => [\n    'connect_error' => '서버 접속 오류.',\n    'response_not_found' => '갱신할 서버를 발견할 수 없습니다.',\n    'response_invalid' => '서버로부터의 응답이 정상적이지 않습니다.',\n    'response_empty' => '서버로부터의 응답이 없습니다.',\n    'file_error' => '서버가 패키지 전송에 실패.',\n    'file_corrupt' => '서버의 파일이 정상적이지 않습니다.',\n  ],\n  'behavior' => [\n    'missing_property' => ':class 클래스는 :behavior 행동이 사용하는 :property 를 정의해야합니다.',\n  ],\n  'config' => [\n    'not_found' => ':location 에서 :file 설정파일을 발견할 수 없습니다.',\n    'required' => ':location 의 설정에 필요한 :property 값이 존재해야합니다.',\n  ],\n  'zip' => [\n    'extract_failed' => '코어파일: \\':file\\' 추출에 실패했습니다.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => '요청로그 비우기',\n    'empty_loading' => '요청로그 비우는 중입니다...',\n    'empty_success' => '요청로그를 비웠습니다.',\n    'return_link' => '요청로그로 돌아가기',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => '시스템',\n    'manage_system_settings' => '시스템설정 관리',\n    'manage_software_updates' => 'SW업데이트 관리',\n    'access_logs' => '시스템로그 보기',\n    'manage_mail_templates' => '이메일 템플릿 관리',\n    'manage_mail_settings' => '이메일 설정 관리',\n    'manage_other_administrators' => '다른 어드민 관리',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => '잘못된 경로: \\':path\\'.',\n    'folder_size_items' => '갯수',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/ko/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"             => \":attribute을 승인해주세요.\",\n    \"active_url\"           => \":attribute은 유효한URL이 아닙니다.\",\n    \"after\"                => \":attribute은 :date이후의 일자를 설정해 주세요.\",\n    \"alpha\"                => \":attribute에는 알파벳만 사용해주세요.\",\n    \"alpha_dash\"           => \":attribute에는 영문자('A-Z','a-z','0-9')와 하이픈또는 언더스코어('-','_')만 사용할 수 있습니다.\",\n    \"alpha_num\"            => \":attribute에는 영문자('A-Z','a-z','0-9')만 사용할 수 있습니다.\",\n    \"array\"                => \":attribute에는 배열을 지정해주세요.\",\n    \"before\"               => \":attribute에는 :date이전의 일자를 설정해주세요.\",\n    \"between\"              => [\n        \"numeric\" => \":attribute에는 :min부터 :max까지의 숫자를 설정해주세요.\",\n        \"file\"    => \":attribute에는 :min KB부터 :max KB까지의 사이즈에 파일만 지정해주세요.\",\n        \"string\"  => \":attribute는 :min에서 :max개의 문자로 해주세요.\",\n        \"array\"   => \":attribute 갯수는 :min개부터 :max개까지로 해주세요.\",\n    ],\n    \"boolean\"              => \":attribute속성은 'true'나'false'을 선택해주세요.\",\n    \"confirmed\"            => \":attribute와 :attribute가 일치하지 않습니다.\",\n    \"date\"                 => \":attribute는 올바른 일자로 설정해주세요.\",\n    \"date_format\"          => \":attribute의 형식이 ':format'과 일치하지 않습니다.\",\n    \"different\"            => \":attribute와 :other는 달라야합니다.\",\n    \"digits\"               => \":attribute와 :digits자릿수로 해주세요.\",\n    \"digits_between\"       => \":attribute는 :min에서 :max까지의 자릿수로 해주세요.\",\n    \"email\"                => \":attribute는 유효한 메일주소 형식을 설정해주세요.\",\n    \"exists\"               => \"선택하신:attribute은 유효하지 않습니다.\",\n    \"image\"                => \":attribute은 이미지를 선택해주세요.\",\n    \"in\"                   => \"선택된:attribute은 유효하지 않습니다.\",\n    \"integer\"              => \":attribute에는 정수를 설정해주세요.\",\n    \"ip\"                   => \":attribute에는 유효한 IP주소를 설정해주세요.\",\n    \"max\"                  => [\n        \"numeric\" => \":attribute에는 :max이하의 숫자를 설정해주세요.\",\n        \"file\"    => \":attribute에는 :max KB이하의 파일을 선택해주세요.\",\n        \"string\"  => \":attribute는 :max개문자 이하로 해주세요.\",\n        \"array\"   => \":attribute 갯수는 :max개 이하로 해주세요.\",\n    ],\n    \"mimes\"                => \":attribute에는 :values타입의 파일을 선택해주세요.\",\n    \"min\"                  => [\n        \"numeric\" => \":attribute에는 :min이상의 숫자를 설정해주세요.\",\n        \"file\"    => \":attribute에는 :min KB이상의 파일을 선택해주세요.\",\n        \"string\"  => \":attribute는 :min문자이상으로 해주세요.\",\n        \"array\"   => \":attribute 갯수는 :max개 이상으로 해주세요.\",\n    ],\n    \"not_in\"               => \"선택된:attribute는 유효하지 않습니다.\",\n    \"numeric\"              => \":attribute는 숫자만으로 설정해주세요.\",\n    \"regex\"                => \":attribute에는 유효한 정규표현식을 지정해주세요.\",\n    \"required\"             => \":attribute는 반드시 설정되어야 합니다.\",\n    \"required_if\"          => \":other가:value일경우 :attribute를 설정해야 합니다.\",\n    \"required_with\"        => \":values가 설정될경우 :attribute도 설정해야 합니다.\",\n    \"required_with_all\"    => \":values를 모두 설정했다면 :attribute도 설정해야 합니다.\",\n    \"required_without\"     => \":values가 설정되지 않았을경우 :attribute를 설정해야 합니다.\",\n    \"required_without_all\" => \":values가 모두 설정되지 않았다면 :attribute를 설정해야 합니다.\",\n    \"same\"                 => \":attribute와 :other가 일치해야 합니다.\",\n    \"size\"                 => [\n        \"numeric\" => \":attribute는 :size로 설정해주세요.\",\n        \"file\"    => \":attribute를 :size KB파일로 설정해주세요.\",\n        \"string\"  => \":attribute는 :size문자로 해주세요.\",\n        \"array\"   => \":attribute 갯수는 :size개로 해주세요.\",\n    ],\n    \"unique\"               => \"설정된 :attribute는 이미사용되고 있습니다.\",\n    \"url\"                  => \":attribute는 유효한 URL형식으로 설정해주세요.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/ko.json",
    "content": "{\n  \"Check For Updates\": \"업데이트 확인\",\n  \"Install Packages\": \"패키지 설치\",\n  \"Manage Themes\": \"테마 관리\",\n  \"Manage Plugins\": \"플러그인 관리\",\n  \"Project\": \"프로젝트\",\n  \"Owner\": \"소유자\",\n  \"Plugins\": \"플러그인\",\n  \"Recommended\": \"추천\",\n  \"Disabled\": \"비활성됨\",\n  \"Current Build\": \"현재의 빌드\",\n  \"Updates Available\": \"사용 가능한 업데이트\",\n  \"Up to Date\": \"최신 정보\",\n  \"Latest Build\": \"최신 빌드\",\n  \"View Changelog\": \"변경 로그 보기\",\n  \"Software Updates\": \"업데이트\",\n  \"Update the system modules and plugins.\": \"시스템 변경, 플러그인과 테마의 관리와 설치.\",\n  \"General\": \"일반\",\n  \"Mail\": \"우편\",\n  \"Utilities\": \"유용\",\n  \"Settings\": \"설정\",\n  \"Show All Settings\": \"모든 설정 표시\",\n  \"Unable to find the specified settings.\": \"선택하신 설정을 사용할 수 없습니다.\",\n  \"The settings page is missing a Model definition.\": \"모델의 정의를 발견할 수 없습니다.\",\n  \":name settings updated\": \":name 을 설정했습니다.\",\n  \"Return to System Settings\": \"시스템 설정으로 돌아가기\",\n  \"Search Settings...\": \"설정 찾기...\",\n  \"Disable mail branding CSS\": \"메일 브랜딩 CSS 비활성화\",\n  \"Manage Sites\": \"사이트 관리\",\n  \"Manage the websites available for this application.\": \"이 애플리케이션에 사용할 수 있는 웹사이트를 관리합니다.\",\n  \"Marketplace\": \"시장\",\n  \"There is no documentation provided.\": \"참고문서가 제공되지 않습니다.\",\n  \"Documentation\": \"참고문서\",\n  \"Upgrade Guide\": \"업그레이드 지침\",\n  \"License\": \"라이센스\",\n  \"Attach to Project\": \"프로젝트 추가\",\n  \"Manage Updates\": \"업데이트 관리\",\n  \"Software Update\": \"SW 업데이트\",\n  \"Return to Software Updates\": \"업데이트로 돌아가기\",\n  \"Try Again\": \"재실행\",\n  \"Unpacking application files\": \"애플리케이션 파일 압축해제는중\",\n  \"Update Failed\": \"업데이트 실패\",\n  \"Unpacking plugin: :name\": \"플러그인 압축해제는중: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"기본 사이트는 기본적으로 사용되며 삭제할 수 없습니다.\",\n  \"Disabled sites are not shown on the frontend.\": \"비활성화된 사이트는 프런트엔드에 표시되지 않습니다.\",\n  \"Enabled in the Admin Panel\": \"관리자 패널에서 활성화됨\",\n  \"Configuration\": \"구성\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"관리자 패널에서 사이트를 활성화하려면 이것을 사용하십시오.\",\n  \"Install\": \"설치하다\",\n  \"Sync Project\": \"동기화 프로젝트\",\n  \"Name\": \"이름\",\n  \"Unique Code\": \"고유 코드\",\n  \"Theme\": \"주제\",\n  \"Sites\": \"사이트\",\n  \"Create Site\": \"사이트 만들기\",\n  \"Base URL\": \"기본 URL\",\n  \"Status\": \"상태코드\",\n  \"Current default value: :value\": \"현재 기본값: :value\",\n  \"Locale\": \"현지의\",\n  \"Timezone\": \"시간대\",\n  \"Custom application URL\": \"맞춤 애플리케이션 URL\",\n  \"Override the application URL when this site is active.\": \"이 사이트가 활성화되면 애플리케이션 URL을 재정의합니다.\",\n  \"Use a CMS route prefix\": \"CMS 경로 접두사 사용\",\n  \"A prefix can identify this site when using a shared hostname.\": \"접두사는 공유 호스트 이름을 사용할 때 이 사이트를 식별할 수 있습니다.\",\n  \"Define matching hostnames\": \"일치하는 호스트 이름 정의\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"이 사이트를 제공하는 데 사용해야 하는 도메인 이름과 패턴을 지정하십시오.\",\n  \"Display a style for this site\": \"이 사이트의 스타일 표시\",\n  \"To help identify this site, display a color in the admin panel.\": \"이 사이트를 쉽게 식별할 수 있도록 관리자 패널에 색상을 표시하십시오.\",\n  \"Save\": \"구하다\",\n  \"Save and Close\": \"저장하고 닫습니다\",\n  \"Use Default\": \"기본값 사용\",\n  \"Use Custom\": \"사용자 정의 사용\",\n  \"Specify a custom locale code.\": \"사용자 정의 로케일 코드를 지정하십시오.\",\n  \"Failed\": \"실패한\",\n  \"or\": \"또는\",\n  \"Code\": \"코드\",\n  \"October CMS Marketplace\": \"10월 CMS 마켓플레이스\",\n  \"Visit the :link to add some.\": \"프로젝트에 플러그인이나 테마가 없습니다. 일부를 추가하려면 :link를 방문하세요.\",\n  \"Buy Now\": \"지금 구매\",\n  \"Updating package manager\": \"패키지 관리자 업데이트\",\n  \"Updating application files\": \"애플리케이션 파일 다운로드중\",\n  \"Setting build number\": \"빌드 번호 설정\",\n  \"Finishing update process\": \"업데이트 완료중\",\n  \"Installing plugin: :name\": \"플러그인 다운로드중: :name\",\n  \"Finishing installation process\": \"설치를 완료중입니다.\",\n  \"Removing theme: :name\": \"테마 제거 중: :name\",\n  \"Please specify a Theme name to install.\": \"설치할 테마명을 설정해주세요.\",\n  \"Installing theme: :name\": \"테마 ':name' 다운로드중입니다\",\n  \"Removing plugin: :name\": \"플러그인 제거: :name\",\n  \"Please specify a Plugin name to install.\": \"설치할 플러그인명을 설정해주세요.\",\n  \"Update process complete\": \"업데이트 했습니다.\",\n  \"Package installed successfully\": \"플러그인을 설치했습니다.\",\n  \"Check Dependencies\": \"종속성 확인\",\n  \"Install Dependencies\": \"종속성 설치\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"시스템이 올바르게 실행되는 데 필요한 누락된 종속성이 있습니다.\",\n  \"License Key\": \"라이센스 키\",\n  \"How to find your License Key\": \"라이센스 키를 찾는 방법\",\n  \"The password attribute is required.\": \"암호 속성은 필수입니다.\",\n  \"The login attribute is required.\": \"로그인 속성이 필요합니다.\",\n  \"Cannot login user since they are not activated.\": \"사용자가 활성화되지 않았기 때문에 로그인할 수 없습니다.\",\n  \"Cannot login user since they are banned.\": \"금지된 사용자이므로 로그인할 수 없습니다.\",\n  \"Cannot login user since they are suspended.\": \"정지된 사용자이므로 로그인할 수 없습니다.\",\n  \"A user was not found with the given credentials.\": \"주어진 자격 증명을 가진 사용자를 찾을 수 없습니다.\",\n  \"A user was found but the password did not match.\": \"사용자를 찾았지만 암호가 일치하지 않습니다.\",\n  \"User is not logged in\": \"사용자가 로그인하지 않았습니다.\",\n  \"Register Software\": \"소프트웨어 등록\",\n  \"View the Dashboard\": \"대시보드 표시\",\n  \"Set the Default Dashboard\": \"기본 대시보드 설정\",\n  \"Log File\": \"로그파일\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"소인\",\n  \"No encryption\": \"비 암호화\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"이메일 설정\",\n  \"Manage email configuration.\": \"이메일 설정 관리\",\n  \"Sender Name\": \"보내는이\",\n  \"Sender Email\": \"보내는이 주소\",\n  \"Mail Method\": \"전송 방법\",\n  \"SMTP Address\": \"SMTP주소\",\n  \"SMTP Port\": \"SMTP포트\",\n  \"SMTP Encryption Protocol\": \"SMTP 암호 프로토콜\",\n  \"SMTP Authorization Required\": \"SMTP설정이 필요\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"SMTP서버의 설정이 필요한경우 체크해주세요.\",\n  \"Username\": \"유저이름\",\n  \"Password\": \"비밀번호\",\n  \"Sendmail Path\": \"Sendmail 경로\",\n  \"Please specify the path of the sendmail program.\": \"Sendmail프로그램의 경로를 설정해주세요.\",\n  \"Mailgun Domain\": \"Mailgun도메인\",\n  \"Please specify the Mailgun domain name.\": \"Mailgun도메인명을 설정해주세요.\",\n  \"Mailgun Secret\": \"Mailgun API키\",\n  \"Enter your Mailgun API key.\": \"Mailgun API키를 설정해주세요.\",\n  \"SES Key\": \"SES 키\",\n  \"Enter your SES API key\": \"SES API 키를 입력해주세요.\",\n  \"SES Secret\": \"SES 비밀키\",\n  \"Enter your SES API secret key\": \"SES API 비밀키를 입력해주세요.\",\n  \"SES Region\": \"SES 지역\",\n  \"Enter your SES region (e.g. us-east-1)\": \"SES 지역 (예: us-east-1)\",\n  \"Postmark Token\": \"소인 토큰\",\n  \"Enter your Postmark API secret key\": \"Postmark API 비밀 키를 입력하세요.\",\n  \"Define administrator roles\": \"관리자 역할 정의\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"이 사이트에 대한 액세스를 다음 역할을 가진 관리자로만 제한하십시오.\",\n  \"Manage Backend Preferences\": \"백엔드 설정 관리\",\n  \"Manage Code Editor Preferences\": \"코드 에디터 설정 관리\",\n  \"Customize Backend Styles\": \"백엔드 브랜드 변경\",\n  \"Mail Templates\": \"이메일 템플릿\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"이메일 템플릿의 변경, 유저/어드민에 보내기, 이메일 레이아웃관리.\",\n  \"Event Log\": \"이벤트로그\",\n  \"View system log messages with their recorded time and details.\": \"시스템로그메시지의 시간이나 세부사항을 표시합니다.\",\n  \"Request Log\": \"요청로그\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"\\\"Page not found (404)\\\" 등의 올바르지 않은 요청이나 이동을 표시합니다.\",\n  \"Log Settings\": \"로그 설정\",\n  \"Specify which areas should use logging.\": \"로깅할 영역을 특정해주세요.\",\n  \"Test message sent.\": \"테스트 발송 성공했습니다.\",\n  \"New Layout\": \"신규 레이아웃\",\n  \"New Template\": \"신규 템플릿\",\n  \"Template\": \"템플릿\",\n  \"Templates\": \"템플릿들\",\n  \"Layouts\": \"레이아웃들\",\n  \"Layout\": \"레이아웃\",\n  \"Mail Layouts\": \"이메일 레이아웃\",\n  \"Unique code used to refer to this template\": \"시스템상의 고유코드를 붙여주세요.\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Plain Text\",\n  \"Subject\": \"제목\",\n  \"Email message subject\": \"이메일의 제목\",\n  \"Description\": \"설명\",\n  \"Drivers Not Installed\": \"드라이버가 설치되지 않았습니다\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"이 전송방법은 \\\":plugin\\\" 플러그인을 필요로 합니다.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"이벤트ID\",\n  \"Level\": \"레벨\",\n  \"Date & Time\": \"생성시간\",\n  \"Message\": \"메시지\",\n  \"Logging\": \"로깅\",\n  \"Log Bad Requests\": \"잘못된 요청 기록\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"404같은 주의가 필요한 브라우저 요청 기록\",\n  \"Log Theme Changes\": \"테마 변경 기록\",\n  \"When a change is made to the theme using the backend.\": \"백엔드를 사용한 테마변경 기록\",\n  \"Log System Events\": \"시스템 이벤트 기록\",\n  \"Store system events in the database in addition to the file-based log.\": \"시스템 이벤트를 DB를 파일에 기록\",\n  \"Version\": \"버전\",\n  \"Log ID\": \"로그ID\",\n  \"Counter\": \"카운트\",\n  \"Referers\": \"Referer\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"예외발생, 디버그정보 등 애플리케이션에서 발생한 잠재적 오류를 표시합니다.\",\n  \"Event\": \"이벤트\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"존재하지 않는 페이지요청등 주의가 필요한 브라우저 요청을 표시합니다.\",\n  \"Request\": \"요청\",\n  \"Event log emptied\": \"이벤트로그를 비웠습니다.\",\n  \"Empty Event Log\": \"이벤트로그 비우기\",\n  \"Emptying Event Log...\": \"이벤트로그를 비우는 중입니다...\",\n  \"Return to Event Log\": \"이벤트로그로 돌아가기\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"갱신하시겠습니까?\",\n  \"Plugin has been removed from the file system.\": \"시스템에서 불명확한 플러그인을 삭제했습니다.\",\n  \"search plugins to install...\": \"설치할 플러그인 찾는중...\",\n  \"search themes to install...\": \"설치할 테마 찾는중...\",\n  \"Install Theme\": \"테마 설치\",\n  \"Theme Name\": \"테마명\",\n  \"Install Plugin\": \"플러그인 설치\",\n  \"Plugin Name\": \"플러그인명\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"중복없는 플러그인명을 사용해주세요. (예:RainLab.Blog)\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"중복없는 테마명을 사용해주세요. (예:RainLab.Vanilla)\",\n  \"The combiner file ':name' is not found.\": \"combiner파일 ':name'을 발견할 수 없습니다.\"\n}"
  },
  {
    "path": "modules/system/lang/lt/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatavimas',\n        'quote' => 'Citata',\n        'code' => 'Kodas',\n        'header1' => 'Antraštė 1',\n        'header2' => 'Antraštė 2',\n        'header3' => 'Antraštė 3',\n        'header4' => 'Antraštė 4',\n        'header5' => 'Antraštė 5',\n        'header6' => 'Antraštė 6',\n        'bold' => 'Ryškus',\n        'italic' => 'Pasviręs',\n        'unorderedlist' => 'Nerūšiuotas Sąrašas',\n        'orderedlist' => 'Rūšiuotas Sąrašas',\n        'video' => 'Video',\n        'image' => 'Paviksliukas',\n        'link' => 'Nuoroda',\n        'horizontalrule' => 'Įterpti Horizontalią Liniją',\n        'fullscreen' => 'Visas Ekrano Dydis',\n        'preview' => 'Peržiūrėti',\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Įterpti medijos nuorodą',\n        'insert_image' => 'Įterpti Paveiksliuką',\n        'insert_video' => 'Įterpti Video',\n        'insert_audio' => 'Įterpti Audio',\n        'invalid_file_empty_insert' => 'Pasirinkite failą į kurį norite įterpti nuorodą.',\n        'invalid_file_single_insert' => 'Pasirinkite vieną failą.',\n        'invalid_image_empty_insert' => 'Pasirinkite pavaiksliuką(us) įterpimui.',\n        'invalid_video_empty_insert' => 'Pasirinkite video failą įterpimui.',\n        'invalid_audio_empty_insert' => 'Pasirinkite audio failą įterpimui.',\n    ],\n    'alert' => [\n        'confirm_button_text' => 'GERAI',\n        'cancel_button_text' => 'Atšaukti',\n        'widget_remove_confirm' => 'Pašalinti šį valdiklį?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Ankstenis mėnuo',\n        'nextMonth' => 'Sekantis Mėnuo',\n        'months' => ['Sausis', 'Vasaris', 'Kovas', 'Balandis', 'Gegužė', 'Birželis', 'Liepa', 'Rugpjūtis', 'Rugsėjis', 'Spalis', 'Lapkritis', 'Gruodis'],\n        'weekdays' => ['Sekmadienis', 'Pirmadienis', 'Antradienis', 'Trečiadienis', 'Ketvirtadienis', 'Penktadienis', 'Šeštadienis'],\n        'weekdaysShort' => ['Sek', 'Pir', 'Ant', 'Tre', 'Ket', 'Pen', 'šeš']\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'visos'\n        ],\n        'dates' => [\n            'all' => 'visos',\n            'filter_button_text' => 'Filtruoti',\n            'reset_button_text'  => 'Atstatyti',\n            'date_placeholder' => 'Data',\n            'after_placeholder' => 'Po',\n            'before_placeholder' => 'Prieš'\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Rodyti išklotinę',\n        'hide_stacktrace' => 'Slėpti išklotinę',\n        'tabs' => [\n            'formatted' => 'Formatuota',\n            'raw' => 'Nepadorotas',\n        ],\n        'editor' => [\n            'title' => 'Šaltinio kodo redaktorius',\n            'description' => 'Jūsų operacinė sistema turėtų būti suderinta vienai iš šių URL schemų nuskaitymui.',\n            'openWith' => 'Atidaryti su',\n            'remember_choice' => 'Atsiminti pasirinktą parinktį šiai sesijai',\n            'open' => 'Atidaryti',\n            'cancel' => 'Atšaukti'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/lt/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Puiki pradžia!',\n  ],\n  'locale' => [\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'lv' => 'Latvijas',\n    'lt' => 'Lietuvių',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'tr' => 'Türk',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n    'vn' => 'Tiếng việt',\n  ],\n  'directory' => [\n    'create_fail' => 'Negalime sukurti direktorijos: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Negalime sukurti failo: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Netinkama saugos žyma',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistema',\n    'menu_label' => 'Sistema',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Įvairu',\n      'logs' => 'Registrai',\n      'mail' => 'Paštas',\n      'shop' => 'Parduotuvė',\n      'team' => 'Komanda',\n      'users' => 'Nariai',\n      'system' => 'Sistema',\n      'social' => 'Social',\n      'events' => 'Įvykiai',\n      'customers' => 'Klientai',\n      'my_settings' => 'Mano nustatymai',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Dizainas',\n    'unnamed' => 'Neužvardintas dizainas',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Įdiegti dizainus',\n    'installed' => 'Įdiegti dizainai',\n    'no_themes' => 'Kolkas įdiegtų dizainų iš viešosios saugyklos nėra.',\n    'recommended' => 'Rekomenduojama',\n    'remove_confirm' => 'Ar tikrai norite pašalinti šį dizainą?',\n  ],\n  'plugin' => [\n    'label' => 'Įskiepiai',\n    'unnamed' => 'Neužvardintas įskiepis',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Įjungti ar išjungti',\n    'enable_or_disable_title' => 'Įjungti ar Išjungti įskiepius',\n    'install' => 'Įdiegti įskiepius',\n    'install_products' => 'Įdiegti produktus',\n    'installed' => 'Įdiegti įskiepiai',\n    'no_plugins' => 'Kolkas įdiegtų šablonų iš viešosios saugyklos nėra.',\n    'recommended' => 'Rekomenduojama',\n    'remove' => 'Pašalinti',\n    'refresh' => 'Perkrauti',\n    'disabled_label' => 'Išjungta',\n    'disabled_help' => 'Išjungtus įskiepius sistema ignoruos.',\n    'frozen_label' => 'Užšaldyti atnaujinimus',\n    'frozen_help' => 'Užšaldyti įskiepiai nebus atnaujinami.',\n    'selected_amount' => 'Pasirinktą įskiepių: :amount',\n    'remove_confirm' => 'Ar tikrai norite pašalinti šį įskiepį?',\n    'remove_success' => 'Šie įskiepiai buvo sėkmingai pašalinti.',\n    'refresh_success' => 'Sėkmingai perkrovėme šiuos įskiepius sistemoje.',\n    'disable_confirm' => 'Ar tikrai?',\n    'disable_success' => 'Sėkmingai išjungėme šiuos įskiepius.',\n    'enable_success' => 'Sėkmingai ijungėme šiuos įskiepius.',\n  ],\n  'project' => [\n    'attach' => 'Prijungti Projektą',\n    'detach' => 'Atjungti Projektą',\n    'none' => 'Jokio',\n    'id' => [\n      'missing' => 'Prašome nurodyti Projekto ID, kurį norite naudoti.',\n    ],\n    'detach_confirm' => 'Ar tikrai norite atjungti Projektą?',\n    'unbind_success' => 'Projektas buvo sėkmingai atjungtas.',\n  ],\n  'settings' => [\n    'search' => 'Ieškoti',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL jungtis reikalinga',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikalus vardas, kurį naudosite šiam šablonui',\n    'test_send' => 'Siųsti šį laišką',\n    'test_confirm' => 'Siųsti bandomąjį laišką į :email. Testi?',\n    'creating' => 'Šablonas kuriamas...',\n    'creating_layout' => 'Išvaizda kuriama...',\n    'saving' => 'Išsaugome Šabloną..',\n    'saving_layout' => 'Išsaugome Išvaizdą...',\n    'delete_confirm' => 'Trinti šį šabloną?',\n    'delete_layout_confirm' => 'Trinti šią išvaizdą?',\n    'deleting' => 'Šablonas trinamas...',\n    'deleting_layout' => 'Išvaizda trinama...',\n    'sending' => 'Siunčiamas bandomasis laiškas...',\n    'return' => 'Grįžti į šablonų sąrašą',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autorius',\n    'plugin_not_found' => 'Įskiepis nerastas',\n    'core_build' => 'Sudėtis :build',\n    'core_build_help' => 'Yra galima nauja sudėtis.',\n    'themes' => 'Dizainai',\n    'plugin_version_none' => 'Naujas įskiepis',\n    'plugin_current_version' => 'Dabartinė versija',\n    'theme_new_install' => 'Naujo dizaino įdiegimas.',\n    'theme_extracting' => 'Išpakuojame dizainą: :name',\n    'update_label' => 'Atnaujinti programą',\n    'update_loading' => 'Įkrauname galimus atnaujinimus...',\n    'force_label' => 'Naujinti priverstinai',\n    'found' => [\n      'label' => 'Yra atnaujinimų!',\n      'help' => 'Spauskite Atnaujinti programą, kad pradėtumėte atnaujinimo procesą.',\n    ],\n    'none' => [\n      'label' => 'Naujinimų nėra',\n      'help' => 'Naujų papildymų neradome.',\n    ],\n    'important_action' => [\n      'empty' => 'Pasirinkite veiksmą',\n      'confirm' => 'Patvirtinti atnaujinimą',\n      'skip' => 'Praleisti šį įskiepį (tik šįkart)',\n      'ignore' => 'Praleisti šį įskiepį (visada)',\n    ],\n    'important_action_required' => 'Reikalingas veiksmas',\n    'important_view_guide' => 'Žiūrėkite papildymo gidą',\n    'important_alert_text' => 'Kai kurie atnaujinami reikalauja Jūsų peržiūros.',\n    'details_title' => 'Įskiepio informacija',\n    'details_view_homepage' => 'Tinklalapis',\n    'details_changelog' => 'Pakeitimų registras',\n    'details_changelog_missing' => 'Pakeitimų registras nepateiktas.',\n    'details_current_version' => 'Dabartinė versija',\n    'details_author' => 'Autorius',\n  ],\n  'server' => [\n    'connect_error' => 'Nepavyko prisijungti prie serverio.',\n    'response_not_found' => 'Atnaujinimų serveris nerastas.',\n    'response_invalid' => 'Netinkamas serverio atsakymas.',\n    'response_empty' => 'Tuščias serverio atsakymas.',\n    'file_error' => 'Serveriui nepavyko pateikti paketo.',\n    'file_corrupt' => 'Failas iš serverio yra sugadintas.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Klasė :class turi nurodyti ypatybę $:property naudojamą :behavior funkcionalumo.',\n  ],\n  'config' => [\n    'not_found' => 'Nepavyko rasti konfigūracijos failo :file nurodyto vietai :location.',\n    'required' => 'Konfigūracija naudojama :location turi pateikti reikšmę \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Nepavyko išskleisti šakninio failo \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Išvalyti užklausų registą',\n    'empty_loading' => 'Išvalome registą...',\n    'empty_success' => 'Užklausų registras sėkmingai išvalytas.',\n    'return_link' => 'Grįžti į užklausų registrą',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistema',\n    'manage_system_settings' => 'Tvarkyti sistemos nustatymus',\n    'manage_software_updates' => 'Tvarkyti programos naujinimus',\n    'access_logs' => 'Žiūrėti sistemos registrus',\n    'manage_mail_templates' => 'Tvarkyti pašto šablonus',\n    'manage_mail_settings' => 'Tvarkyti pašto nustatymus',\n    'manage_other_administrators' => 'Manage other administrators',\n  ],\n  'media' => [\n    'invalid_path' => 'Nurodytas netinkamas kelias: \\':path\\'.',\n    'folder_size_items' => 'elementai(as)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/lt/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \"Atributas :attribute turi sutikti.\",\n    \"active_url\"       => \"Atributas :attribute nėra tinkamas URL.\",\n    \"after\"            => \"Atributas :attribute turi būti data po :date.\",\n    \"alpha\"            => \"Atributą :attribute gali sudaryti tik raides.\",\n    \"alpha_dash\"       => \"Atributą :attribute gali sudaryti tik raidės, skaičiai bei brūkšneliai.\",\n    \"alpha_num\"        => \"Atributą :attribute gali sudaryti ti raidės ir skaičiai.\",\n    \"array\"            => \"Atributas :attribute turi būti masyvas.\",\n    \"before\"           => \"Atributas :attribute turi būti data prieš :date.\",\n    \"between\"          => [\n        \"numeric\" => \"Atributas :attribute turi būti tarp :min - :max.\",\n        \"file\"    => \"Atributas :attribute turi būti tarp :min - :max kilobaitais.\",\n        \"string\"  => \"Atributas :attribute turi būti tarp :min - :max simboliais.\",\n        \"array\"   => \"Atributas :attribute privalo turėti tarp :min - :max elementais.\",\n    ],\n    \"confirmed\"        => \"Atributo :attribute patvirtinimas neatininka.\",\n    \"date\"             => \"Atributas :attribute nėra galiojanti data.\",\n    \"date_format\"      => \"Atributas :attribute neatitinka formato :format.\",\n    \"different\"        => \"Atributas :attribute ir :other turi būti skirtingi.\",\n    \"digits\"           => \"Atributas :attribute privalo turėti :digits skaitmenis.\",\n    \"digits_between\"   => \"Atributas :attribute turi būti tarp :min ir :max skaitmenų.\",\n    \"email\"            => \"Atributo :attribute formatas netinkamas.\",\n    \"exists\"           => \"Pasirinktas :attribute yra netinkamas.\",\n    \"image\"            => \"Atributas :attribute turi būti paveiksliukas.\",\n    \"in\"               => \"Pasirinktas :attribute yra netinkamas.\",\n    \"integer\"          => \"Atributas :attribute turi būti skaitmuo.\",\n    \"ip\"               => \"Atributas :attribute turi būti galiojanti IP adresas.\",\n    \"max\"              => [\n        \"numeric\" => \"Atributas :attribute negali būti didesnis nei :max.\",\n        \"file\"    => \"Atributas :attribute negali būti didesnis nei :max kilobaitais.\",\n        \"string\"  => \"Atributas :attribute negali būti didesnis nei :max simboliais.\",\n        \"array\"   => \"Atributas :attribute negali turėti daugiau nei :max elementais.\",\n    ],\n    \"mimes\"            => \"Atributas :attribute turi būti failo tipas: :values.\",\n    \"extensions\"       => \"Atributas :attribute privalo turėti galūnę: :values.\",\n    \"min\"              => [\n        \"numeric\" => \"Atributas :attribute turi būti bent :min.\",\n        \"file\"    => \"Atributas :attribute turi būti bent :min kilobaitais.\",\n        \"string\"  => \"Atributas :attribute turi būti bent :min simboliais.\",\n        \"array\"   => \"Atributas :attribute privalo turėti bent :min elementais.\",\n    ],\n    \"not_in\"           => \"Pasirinktas :attribute yra netinkamas.\",\n    \"numeric\"          => \"Atributas :attribute turi būti skaitmuo.\",\n    \"regex\"            => \"Atributo :attribute formatas yra netinkamas.\",\n    \"required\"         => \":attribute laukelis yra privalomas.\",\n    \"required_if\"      => \":attribute laukelis yra privalomas kai :other yra :value.\",\n    \"required_with\"    => \":attribute laukelis yra privalomas kai :values pateikti.\",\n    \"required_without\" => \":attribute laukelis yra privalomas kai :values nėra pateikti.\",\n    \"same\"             => \":attribute ir :other turi sutapti.\",\n    \"size\"             => [\n        \"numeric\" => \"Atributas :attribute turi būti :size.\",\n        \"file\"    => \"Atributas :attribute turi būti :size kilobaitais.\",\n        \"string\"  => \"Atributas :attribute turi būti :size simboliais.\",\n        \"array\"   => \"Atributas :attribute privalo turėti :size elementais.\",\n    ],\n    \"unique\"           => \"Atributas :attribute jau yra naudojamas.\",\n    \"url\"              => \"Atributas :attribute formatas yra netinkamas.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/lt.json",
    "content": "{\n  \"Check For Updates\": \"Ieškoti atnaujinimų\",\n  \"Install Packages\": \"Įdiegti paketus\",\n  \"Manage Themes\": \"Tvarkyti temas\",\n  \"Manage Plugins\": \"Tvarkyti įskiepius\",\n  \"Project\": \"Projektas\",\n  \"Owner\": \"Savininkas\",\n  \"Plugins\": \"Įskiepiai\",\n  \"Recommended\": \"Rekomenduojamas\",\n  \"Disabled\": \"Išjungta\",\n  \"Current Build\": \"Dabartinė sudėtis\",\n  \"Updates Available\": \"Galimi atnaujinimai\",\n  \"Up to Date\": \"Naujausia\",\n  \"Latest Build\": \"Naujausia konstrukcija\",\n  \"View Changelog\": \"Peržiūrėti pakeitimų žurnalą\",\n  \"Software Updates\": \"Naujinimai ir Priedai\",\n  \"Update the system modules and plugins.\": \"Atnaujinti sistemą, diegti ir tvarkyti dizainus bei įskiepius.\",\n  \"General\": \"Bendrasis\",\n  \"Mail\": \"Paštas\",\n  \"Utilities\": \"Komunalinės paslaugos\",\n  \"Settings\": \"Nustatymai\",\n  \"Show All Settings\": \"Rodyti visus nustatymus\",\n  \"Unable to find the specified settings.\": \"Nepavyko rasti nurodytų nustatymų.\",\n  \"The settings page is missing a Model definition.\": \"Nustatymų puslapiui trūksta Modelio aprašo.\",\n  \":name settings updated\": \":name nustatymai atnaujinti\",\n  \"Return to System Settings\": \"Grįžti į sistemos nustatymus\",\n  \"Search Settings...\": \"Rasti nustatymą...\",\n  \"Disable mail branding CSS\": \"Išjungti pašto prekės ženklo CSS\",\n  \"Manage Sites\": \"Tvarkyti svetaines\",\n  \"Manage the websites available for this application.\": \"Tvarkykite šiai programai skirtas svetaines.\",\n  \"Marketplace\": \"Turgavietė\",\n  \"There is no documentation provided.\": \"Dokumentacija nepateikta.\",\n  \"Documentation\": \"Dokumentacija\",\n  \"Upgrade Guide\": \"Papildymo Gidas\",\n  \"License\": \"Licencija\",\n  \"Attach to Project\": \"Prisegti prie Projekto\",\n  \"Manage Updates\": \"Tvarkyti Naujinimus\",\n  \"Software Update\": \"Programos naujinimas\",\n  \"Return to Software Updates\": \"Grįžti į sistmos naujinimą\",\n  \"Try Again\": \"Bandykite dar kartą\",\n  \"Unpacking application files\": \"Išskleidžiami programos failai\",\n  \"Update Failed\": \"Atnaujinimas nepavyko\",\n  \"Unpacking plugin: :name\": \"Išpakuojame įskiepį: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Pirminė svetainė naudojama pagal numatytuosius nustatymus ir jos negalima ištrinti.\",\n  \"Disabled sites are not shown on the frontend.\": \"Išjungtos svetainės nerodomos priekinėje dalyje.\",\n  \"Enabled in the Admin Panel\": \"Įjungta administratoriaus skydelyje\",\n  \"Configuration\": \"Konfigūracija\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Naudokite tai, jei norite, kad svetainė būtų įjungta administratoriaus skydelyje.\",\n  \"Install\": \"Diegti\",\n  \"Sync Project\": \"Sinchronizuoti projektą\",\n  \"Name\": \"Pavadinimas\",\n  \"Unique Code\": \"Unikalus kodas\",\n  \"Theme\": \"tema\",\n  \"Sites\": \"Svetainės\",\n  \"Create Site\": \"Sukurti svetainę\",\n  \"Base URL\": \"Bazinis URL\",\n  \"Status\": \"Statusas\",\n  \"Current default value: :value\": \"Dabartinė numatytoji vertė: :value\",\n  \"Locale\": \"Vietinis\",\n  \"Timezone\": \"Laiko zona\",\n  \"Custom application URL\": \"Tinkintas programos URL\",\n  \"Override the application URL when this site is active.\": \"Nepaisykite programos URL, kai ši svetainė aktyvi.\",\n  \"Use a CMS route prefix\": \"Naudokite TVS maršruto priešdėlį\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Priešdėlis gali identifikuoti šią svetainę, kai naudojamas bendrinamas prieglobos serverio pavadinimas.\",\n  \"Define matching hostnames\": \"Apibrėžkite atitinkančius pagrindinio kompiuterio pavadinimus\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Nurodykite domenų pavadinimus ir šablonus, kurie turi būti naudojami šiai svetainei aptarnauti.\",\n  \"Display a style for this site\": \"Rodyti šios svetainės spalvą\",\n  \"To help identify this site, display a color in the admin panel.\": \"Kad lengviau atpažintumėte šią svetainę, administratoriaus skydelyje parodykite spalvą.\",\n  \"Save\": \"Sutaupyti\",\n  \"Save and Close\": \"Išsaugoti ir uždaryti\",\n  \"Use Default\": \"Naudoti numatytą\",\n  \"Use Custom\": \"Naudokite Custom\",\n  \"Specify a custom locale code.\": \"Nurodykite pasirinktinį lokalės kodą.\",\n  \"Failed\": \"Nepavyko\",\n  \"or\": \"arba\",\n  \"Code\": \"Kodas\",\n  \"October CMS Marketplace\": \"Spalio mėn. TVS prekyvietė\",\n  \"Visit the :link to add some.\": \"Projekte nėra papildinių ar temų. Jei norite pridėti keletą, apsilankykite :nuorodoje.\",\n  \"Buy Now\": \"Pirkti dabar\",\n  \"Updating package manager\": \"Paketų tvarkyklės atnaujinimas\",\n  \"Updating application files\": \"Siunčiami programos failai\",\n  \"Setting build number\": \"Konstravimo numerio nustatymas\",\n  \"Finishing update process\": \"Užbaigiamas naujinimo procesas\",\n  \"Installing plugin: :name\": \"Siunčiame įskiepį: :name\",\n  \"Finishing installation process\": \"Užbaigiamas diegimo procesas\",\n  \"Removing theme: :name\": \"Pašalinama tema: :name\",\n  \"Please specify a Theme name to install.\": \"Nurodykite instaliuojamo Dizaino pavadinimą.\",\n  \"Installing theme: :name\": \"Siunčiame dizainą: :name\",\n  \"Removing plugin: :name\": \"Pašalinamas papildinys: :name\",\n  \"Please specify a Plugin name to install.\": \"Nurodykite instaliuojamo Įskiepio pavadinimą.\",\n  \"Update process complete\": \"Atnaujinimo procesas baigtas\",\n  \"Package installed successfully\": \"Įskiepis įdiegtas sėkmingai\",\n  \"Check Dependencies\": \"Patikrinkite priklausomybes\",\n  \"Install Dependencies\": \"Įdiekite priklausomybes\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Trūksta priklausomybių, reikalingų, kad sistema veiktų tinkamai.\",\n  \"License Key\": \"Licencijos raktas\",\n  \"How to find your License Key\": \"Kaip rasti savo licencijos raktą\",\n  \"The password attribute is required.\": \"Reikalingas slaptažodžio atributas.\",\n  \"The login attribute is required.\": \"Reikalingas prisijungimo atributas.\",\n  \"Cannot login user since they are not activated.\": \"Negaliu prisijungti prie vartotojo, nes jie nėra aktyvuoti.\",\n  \"Cannot login user since they are banned.\": \"Negaliu prisijungti prie vartotojo, nes jie yra uždrausti.\",\n  \"Cannot login user since they are suspended.\": \"Negaliu prisijungti prie naudotojo, nes jis laikinai sustabdytas.\",\n  \"A user was not found with the given credentials.\": \"Vartotojas su nurodytais kredencialais nerastas.\",\n  \"A user was found but the password did not match.\": \"Vartotojas rastas, bet slaptažodis neatitiko.\",\n  \"User is not logged in\": \"Vartotojas neprisijungęs\",\n  \"Register Software\": \"Registruokis programinė įranga\",\n  \"View the Dashboard\": \"Skydelis\",\n  \"Set the Default Dashboard\": \"Nustatykite numatytąją informacijos suvestinę\",\n  \"Log File\": \"Registro failas\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Pašto antspaudas\",\n  \"No encryption\": \"Be šifravimo\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Pašto konfigūracija\",\n  \"Manage email configuration.\": \"Tvarkyti pašto konfigūraciją.\",\n  \"Sender Name\": \"Siuntėjo vardas\",\n  \"Sender Email\": \"Siuntėjo el.paštas\",\n  \"Mail Method\": \"Pašto siuntimo metodas\",\n  \"SMTP Address\": \"SMTP adresas\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"SMTP šifravimo protokolas\",\n  \"SMTP Authorization Required\": \"SMTP leidimas reikalingas\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Pažymėkite šią varnelę jei Jūsų SMTP serveris reikalauja leidimo.\",\n  \"Username\": \"Vartotojas\",\n  \"Password\": \"Slaptažodis\",\n  \"Sendmail Path\": \"Sendmail kelias\",\n  \"Please specify the path of the sendmail program.\": \"Nurodykite kelią į sendmail programą.\",\n  \"Mailgun Domain\": \"Mailgun domenas\",\n  \"Please specify the Mailgun domain name.\": \"Nurodykite Mailgun domeno vardą.\",\n  \"Mailgun Secret\": \"Mailgun slapukas\",\n  \"Enter your Mailgun API key.\": \"Įveskite savo Mailgun API raktą.\",\n  \"SES Key\": \"SES raktas\",\n  \"Enter your SES API key\": \"Įveskite savo SES API raktą.\",\n  \"SES Secret\": \"SES slapukas\",\n  \"Enter your SES API secret key\": \"Įveskite savo SES API slaptą raktą\",\n  \"SES Region\": \"SES regionas\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Įveskite savo SES regioną (pvz. us-east-1)\",\n  \"Postmark Token\": \"Pašto antspaudas\",\n  \"Enter your Postmark API secret key\": \"Įveskite savo Postmark API slaptąjį raktą\",\n  \"Define administrator roles\": \"Apibrėžkite administratoriaus vaidmenis\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Apriboti prieigą prie šios svetainės tik administratoriui, turinčiam šiuos vaidmenis.\",\n  \"Manage Backend Preferences\": \"Tvarkyti posistemės nustatymus\",\n  \"Manage Code Editor Preferences\": \"Tvarkyti kodo redaktoriaus nustatymus\",\n  \"Customize Backend Styles\": \"Redaguoti posistemę\",\n  \"Mail Templates\": \"Pašto šablonai\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Tvarkyti pašto šablonus ir jų išvaizdas, kurie bus siunčiami vartotojams bei administratoriams.\",\n  \"Event Log\": \"Įvykių registras\",\n  \"View system log messages with their recorded time and details.\": \"Žiūrėkite sistemos registro žinutes su jų įrašymo laiku ir detalėmis.\",\n  \"Request Log\": \"Užklausų registras\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Žiūrėti blogas ar nukreiptas užklausas, tokias kaip Puslapis nerastas (404).\",\n  \"Test message sent.\": \"Bandomasis laiškas išsiųstas.\",\n  \"New Layout\": \"Nauja išvaizda\",\n  \"New Template\": \"Naujas šablonas\",\n  \"Template\": \"Šablonas\",\n  \"Templates\": \"Šablonai\",\n  \"Layouts\": \"Išvaizdos\",\n  \"Layout\": \"Išvaizda\",\n  \"Mail Layouts\": \"Pašto Išvaizdos\",\n  \"Unique code used to refer to this template\": \"Unikalus kodas, kurį naudosite šiam šablonui\",\n  \"-- No layout --\": \"-- Be išvaizdos --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Paprastas tekstas\",\n  \"Subject\": \"Tema\",\n  \"Email message subject\": \"Laiško tema\",\n  \"Description\": \"Aprašymas\",\n  \"Drivers Not Installed\": \"Valdikliai neįdiegti\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Šis metodas reikalauja, kad būtų įdiegtas \\\":plugin\\\" įskiepis. Kitokiu atveju paštas nebus siunčiamas.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Įrašo ID\",\n  \"Level\": \"Lygis\",\n  \"Date & Time\": \"Data ir Laikas\",\n  \"Message\": \"Žinutė\",\n  \"Version\": \"Versija\",\n  \"Log ID\": \"Įrašo ID\",\n  \"Counter\": \"Skaitiklis\",\n  \"Referers\": \"Siuntėjai\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Šis registras rodo potencialių klaidų, kurios atsirado programoje, sąrašą. Išimtinos klaidos ir taisymo informacija.\",\n  \"Event\": \"Įvykis\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Šis registras rodo naršyklės užklausų, kurios galimai reikalauja peržiūros, sąrašą. Pavyzdžiui jeigu lankytojas atidaro turinio puslapį, kuris neegzistuoja - tokiu atveju yra sukuriamas įrašas su statuso kodu 404.\",\n  \"Request\": \"Užklausa\",\n  \"Event log emptied\": \"Registras sėkmingai išvalytas.\",\n  \"Empty Event Log\": \"Išvalyti registrą\",\n  \"Emptying Event Log...\": \"Išvalome registą...\",\n  \"Return to Event Log\": \"Grįžti į registrą\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Ar tikrai?\",\n  \"Plugin has been removed from the file system.\": \"Įskiepis buvo pašalintas iš failų sistemos.\",\n  \"search plugins to install...\": \"ieškoti įskiepių instaliavimui...\",\n  \"search themes to install...\": \"ieškoti dizainų instaliacijai...\",\n  \"Install Theme\": \"Įdiegti dizainą\",\n  \"Theme Name\": \"Dizaino pavadinimas\",\n  \"Install Plugin\": \"Įdiegti įskiepį\",\n  \"Plugin Name\": \"Įskiepio pavadinimas\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Užvardinkite įskiepį unikaliu kodu. Pavyzdžiui, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Užvardinkite dizainą unikaliu kodu. Pavyzdžiui, RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Bendrintojo failas ':name' nerastas.\"\n}"
  },
  {
    "path": "modules/system/lang/lv/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Atgriežamies pie pamatiem',\n  ],\n  'directory' => [\n    'create_fail' => 'Nevar izveidot mapi: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Nevar izveidot failu: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Nederīga drošības atslēga',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistēma',\n    'menu_label' => 'Sistēma',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Izvēles',\n      'logs' => 'Žurnāli',\n      'mail' => 'Epasts',\n      'shop' => 'Veikals',\n      'team' => 'Komanda',\n      'users' => 'Lietotāji',\n      'system' => 'Sistēma',\n      'social' => 'Sociāli',\n      'events' => 'Notikumi',\n      'customers' => 'Klienti',\n      'my_settings' => 'Mani iestatījumi',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tēma',\n    'unnamed' => 'Nenosaukta tēma',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Instalēt tēmas',\n    'installed' => 'Instalētās tēmas',\n    'no_themes' => 'Nav tēmas, kuras būtu instalētas no tirgus plača.',\n    'recommended' => 'Ieteiktās',\n    'remove_confirm' => 'Vai esat pārliecināts, ka vēlaties noņemt šo tēmu?',\n  ],\n  'plugin' => [\n    'label' => 'Spraudnis',\n    'unnamed' => 'Nenosaukts spraudnis',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Iespējot vai atspējot',\n    'enable_or_disable_title' => 'Iespējot vai Atspējot Spraudņus',\n    'install' => 'Instalēt spraudņus',\n    'install_products' => 'Instalēt produktus',\n    'installed' => 'Instalētie spraudņi',\n    'no_plugins' => 'Nav spraudņi, kuri būtu instalēti no tirgus plača.',\n    'recommended' => 'Rekomendētie',\n    'remove' => 'Noņemt',\n    'refresh' => 'Atsvaidzināt',\n    'disabled_label' => 'Atspējots',\n    'disabled_help' => 'Atspējotie spraudņi tiek ignorēti.',\n    'frozen_label' => 'Iesaldēt spraudņus',\n    'frozen_help' => 'Spraudņi, kuri ir iesaldēti tiks ignorēti atjaunināšanas procesā.',\n    'selected_amount' => 'Izvēlēti spraudņi: :amount',\n    'remove_confirm' => 'Vai esat pārliecināts, ka vēlaties noņemt šo sparudni?',\n    'remove_success' => 'Šie spraudņi tika veiksmīgi noņemti no sistēmas.',\n    'refresh_success' => 'Šie sparudņi tika veiksmīgi atsvaidzināti sistēmā.',\n    'disable_confirm' => 'Vai esat pārliecināts?',\n    'disable_success' => 'Šie spraudņi tika veiksmīgi atspējoti.',\n    'enable_success' => 'Šie spraudņi tika veiksmīgi iespējoti.',\n  ],\n  'project' => [\n    'attach' => 'Pievienot projektu',\n    'detach' => 'Atvienot projektu',\n    'none' => 'Nekas',\n    'id' => [\n      'missing' => 'Lūdzu norādiet Projekta ID, kuru lietot.',\n    ],\n    'detach_confirm' => 'Vai esat pārliecināts, ka vēlaties atvienot šo projektu?',\n    'unbind_success' => 'Projekts tika veiksmīgi atvienots.',\n  ],\n  'settings' => [\n    'search' => 'Meklēt',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Nepieciešams SSL savienojums',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikāls nosaukums, lai identificētu šo veidni',\n    'test_send' => 'Sūtīt testa vēstuli',\n    'return' => 'Atgriezties veidņu sarakstā',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autors',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Versija :build',\n    'core_build_help' => 'Jaunāka versija ir pieejama.',\n    'themes' => 'Tēmas',\n    'plugin_version_none' => 'Jauns spraudnis',\n    'plugin_current_version' => 'Patreizējā versija',\n    'theme_new_install' => 'Jauna tēmas instalācija.',\n    'theme_extracting' => 'Atpakojam tēmu: :name',\n    'update_label' => 'Programmatūras atjaunināšana',\n    'update_loading' => 'Ielādējam pieejamos atjauninājumus...',\n    'force_label' => 'Forsēt atjaunināšanu',\n    'found' => [\n      'label' => 'Atrasti jauni atjauninājumi!',\n      'help' => 'Spiediet Atjaunināt programmatūru, lai sāktu atjaunināšanas procesu.',\n    ],\n    'none' => [\n      'label' => 'Nav atjauninājumu',\n      'help' => 'Netika atrasti jauni atjauninājumi.',\n    ],\n    'important_action' => [\n      'empty' => 'Izvēlēties darbību',\n      'confirm' => 'Apstiprināt atjauninājumu',\n      'skip' => 'Izlaist šo spraudni (vienreiz)',\n      'ignore' => 'Izlaist šo spraudni (vienmēr)',\n    ],\n    'important_action_required' => 'Jāpievērš uzmanība',\n    'important_view_guide' => 'Skatīt atjaunināšanas padomus',\n    'important_alert_text' => 'Daži atjauninājumi ir jāpārskata.',\n    'details_title' => 'Spraudņa detaļas',\n    'details_view_homepage' => 'Rādīt mājaslapu',\n    'details_current_version' => 'Patreizējā versija',\n    'details_author' => 'Autors',\n  ],\n  'server' => [\n    'connect_error' => 'Kļūda savienojoties ar serveri.',\n    'response_not_found' => 'Atjauninājumu serveris netika atrasts.',\n    'response_invalid' => 'Nederīga atbilde no autjauninājumu servera.',\n    'response_empty' => 'Tukša atbilde no autjauninājumu servera.',\n    'file_error' => 'Neizdevās saņemt failus no servera.',\n    'file_corrupt' => 'Fails no servera ir bojāts.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Klasei :class jābūt definētai īpašumam $:property tiek lietota :behavior rīcībai.',\n  ],\n  'config' => [\n    'not_found' => 'Nebija iespējams atrast konfigurācijas failu :file definēt iekš :location.',\n    'required' => 'Konfigurācijai, kura tiek lietotat :location ir jānorāda vērtība \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Nebija iespējams atarhivēt failu \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Iztukšot pieprasījumu žurnālu',\n    'empty_loading' => 'Iztukšojam pieprasījumu žurnālu...',\n    'empty_success' => 'Veiksmīgi notīrījām pieprasījumu žurnālu.',\n    'return_link' => 'Atgriezties notikumu žurnālā',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistēma',\n    'manage_system_settings' => 'Pārvaldīt sistēmas iestatījumus',\n    'manage_software_updates' => 'Pārvaldīt programmatūras atjauninājumus',\n    'access_logs' => 'Skatīt sistēmas žurnālus',\n    'manage_mail_templates' => 'Pārvaldīt epasta veidnes',\n    'manage_mail_settings' => 'Pārvaldīt epasta iestatījumus',\n    'manage_other_administrators' => 'Pārvaldīt citus administrātorus',\n  ],\n  'media' => [\n    'invalid_path' => 'Norādīts nederīgs ceļš līdz failam: \\':path\\'.',\n    'folder_size_items' => 'objekti(s)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/lv/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \":attribute jābūt apstiprinātam.\",\n    \"active_url\"       => \":attribute nav derīga URL.\",\n    \"after\"            => \":attribute jābūt datumam pēc :date.\",\n    \"alpha\"            => \":attribute drīkst saturēt tikai burtus.\",\n    \"alpha_dash\"       => \":attribute drīkst saturēt tikai burtus, skaitļus un šķērssvītras.\",\n    \"alpha_num\"        => \":attribute drīkst saturēt tikai burtus un skaitļus.\",\n    \"array\"            => \":attribute jābūt masīvam.\",\n    \"before\"           => \":attribute jābūt datumam pirms :date.\",\n    \"between\"          => [\n        \"numeric\" => \":attribute jābūt starp :min - :max.\",\n        \"file\"    => \":attribute jābūt no :min - :max kilobaitiem.\",\n        \"string\"  => \":attribute jābūt no :min - :max simboliem.\",\n        \"array\"   => \":attribute jābūt no :min - :max objektiem.\",\n    ],\n    \"confirmed\"        => \":attribute apstiprinājums nesakrīt.\",\n    \"date\"             => \":attribute ir nederīgs datums.\",\n    \"date_format\"      => \":attribute nesakrīt ar formātu :format.\",\n    \"different\"        => \":attribute un :other ir jābūt atšķirīgiem.\",\n    \"digits\"           => \":attribute ir jābūt :digits skaitļiem.\",\n    \"digits_between\"   => \":attribute jābūt no :min līdz :max skaitļiem.\",\n    \"email\"            => \":attribute nederīgs formāts.\",\n    \"exists\"           => \"Izvēlētais :attribute ir nederīgs.\",\n    \"image\"            => \":attribute ir jābūt attēlam.\",\n    \"in\"               => \"Izvēlētais :attribute ir nederīgs.\",\n    \"integer\"          => \":attribute ir jābūt skaitlim.\",\n    \"ip\"               => \":attribute ir jābūt derīgai IP adresei.\",\n    \"max\"              => [\n        \"numeric\" => \":attribute nedrīkst pārsniegt :max.\",\n        \"file\"    => \":attribute nedrīkst pārsniegt :max kilobaitus.\",\n        \"string\"  => \":attribute nedrīkst pārsniegt :max simbolus.\",\n        \"array\"   => \":attribute nedrīkst pārsniegt :max objektus.\",\n    ],\n    \"mimes\"            => \":attribute jabūt failam ar tipu: :values.\",\n    \"extensions\"       => \":attribute jābūt ar paplašinājumu: :values.\",\n    \"min\"              => [\n        \"numeric\" => \":attribute jābūt vismaz :min.\",\n        \"file\"    => \":attribute jabūt vismaz :min kilobaitiem.\",\n        \"string\"  => \":attribute jābūt vismaz :min simboliem.\",\n        \"array\"   => \":attribute jābūt vismaz :min objektiem.\",\n    ],\n    \"not_in\"           => \"Izvēlētais :attribute nav derīgs.\",\n    \"numeric\"          => \":attribute jabūt skaitlim.\",\n    \"regex\"            => \":attribute formāts nav derīgs.\",\n    \"required\"         => \":attribute lauks ir obligāts.\",\n    \"required_if\"      => \":attribute lauks ir obligāts, ja :other ir :value.\",\n    \"required_with\"    => \":attribute lauks ir obligāts, ja :values ir norādītas.\",\n    \"required_without\" => \":attribute lauks ir obligāts, ja :values nav norādītas.\",\n    \"same\"             => \":attribute un :other ir jāsakrīt.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute ir jābūt :size.\",\n        \"file\"    => \":attribute ir jābūt :size kilobaitiem.\",\n        \"string\"  => \":attribute ir jābūt :size simboliem.\",\n        \"array\"   => \":attribute ir jābūt :size objektiem.\",\n    ],\n    \"unique\"           => \":attribute ir jau aizņemts.\",\n    \"url\"              => \":attribute nederīgs formāts.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/lv.json",
    "content": "{\n  \"Check For Updates\": \"Pārbaudīt atjauninājumus\",\n  \"Install Packages\": \"Instalējiet pakotnes\",\n  \"Manage Themes\": \"Pārvaldīt motīvus\",\n  \"Manage Plugins\": \"Pārvaldīt spraudņus\",\n  \"Project\": \"Projekts\",\n  \"Owner\": \"Īpašnieks\",\n  \"Plugins\": \"Spraudņi\",\n  \"Recommended\": \"Ieteicams\",\n  \"Disabled\": \"Atspējots\",\n  \"Current Build\": \"Patreizējā versija\",\n  \"Updates Available\": \"Pieejami atjauninājumi\",\n  \"Up to Date\": \"Aktuāli\",\n  \"Latest Build\": \"Jaunākā versija\",\n  \"View Changelog\": \"Skatīt izmaiņu žurnālu\",\n  \"Software Updates\": \"Atjauninājumi\",\n  \"Update the system modules and plugins.\": \"Atjauniniet sistēmu, pārvaldiet un instalējiet spraudņus un tēmas.\",\n  \"General\": \"Galvenie\",\n  \"Mail\": \"Pasts\",\n  \"Utilities\": \"Komunālie pakalpojumi\",\n  \"Settings\": \"Iestatījumi\",\n  \"Show All Settings\": \"Rādīt visus iestatījumus\",\n  \"Unable to find the specified settings.\": \"Nebija iespējams atrast norādītos iestatījumus.\",\n  \"The settings page is missing a Model definition.\": \"Iestatījumu lapa nav norādīta Moduļa definīcijā.\",\n  \":name settings updated\": \"Iestatījumi priekš :name tika veiksmīgi atjaunināti.\",\n  \"Return to System Settings\": \"Atgriezties sistēmas iestatījumos\",\n  \"Search Settings...\": \"Atrodiet iestatījumu...\",\n  \"Disable mail branding CSS\": \"Atspējot pasta zīmola CSS\",\n  \"Manage Sites\": \"Pārvaldīt vietnes\",\n  \"Manage the websites available for this application.\": \"Pārvaldiet šai lietojumprogrammai pieejamās vietnes.\",\n  \"Marketplace\": \"Tirgus laukums\",\n  \"There is no documentation provided.\": \"Dokumentācija nav pievienota.\",\n  \"Documentation\": \"Dokumentācija\",\n  \"Upgrade Guide\": \"Atjaunināšanas padomi\",\n  \"License\": \"License\",\n  \"Attach to Project\": \"Pievienot projektam\",\n  \"Manage Updates\": \"Pārvaldīt Atjauninājumus\",\n  \"Software Update\": \"Programmatūras atjauninājumi\",\n  \"Return to Software Updates\": \"Atgriezties sistēmas atjauninājumos\",\n  \"Try Again\": \"Mēģināt vēlreiz\",\n  \"Unpacking application files\": \"Atpakojam aplikācijas failus\",\n  \"Update Failed\": \"Atjauninājums neizdevās\",\n  \"Unpacking plugin: :name\": \"Atpakojam spraudni: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Primārā vietne tiek izmantota pēc noklusējuma, un to nevar izdzēst.\",\n  \"Disabled sites are not shown on the frontend.\": \"Atspējotās vietnes priekšgalā netiek rādītas.\",\n  \"Enabled in the Admin Panel\": \"Iespējots administratora panelī\",\n  \"Configuration\": \"Konfigurācija\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Izmantojiet šo, ja vēlaties, lai vietne tiktu iespējota administrēšanas panelī.\",\n  \"Install\": \"Uzstādīt\",\n  \"Sync Project\": \"Sinhronizācijas projekts\",\n  \"Name\": \"Nosaukums\",\n  \"Unique Code\": \"Unikāls kods\",\n  \"Theme\": \"Tēma\",\n  \"Sites\": \"Vietnes\",\n  \"Create Site\": \"Izveidot vietni\",\n  \"Base URL\": \"Pamata URL\",\n  \"Status\": \"Statuss\",\n  \"Current default value: :value\": \"Pašreizējā noklusējuma vērtība: :value\",\n  \"Locale\": \"Vietējais\",\n  \"Timezone\": \"Laika zona\",\n  \"Custom application URL\": \"Pielāgotas lietojumprogrammas URL\",\n  \"Override the application URL when this site is active.\": \"Ignorēt lietojumprogrammas URL, kad šī vietne ir aktīva.\",\n  \"Use a CMS route prefix\": \"Izmantojiet CMS maršruta prefiksu\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Prefikss var identificēt šo vietni, ja tiek izmantots koplietots saimniekdatora nosaukums.\",\n  \"Define matching hostnames\": \"Definējiet atbilstošus resursdatora nosaukumus\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Norādiet domēna nosaukumus un modeļus, kas jāizmanto šīs vietnes apkalpošanai.\",\n  \"Display a style for this site\": \"Parādīt šīs vietnes krāsu\",\n  \"To help identify this site, display a color in the admin panel.\": \"Lai palīdzētu identificēt šo vietni, administrēšanas panelī parādiet krāsu.\",\n  \"Save\": \"Saglabāt\",\n  \"Save and Close\": \"Saglabāt un aizvērt\",\n  \"Use Default\": \"Izmantojiet noklusējuma iestatījumu\",\n  \"Use Custom\": \"Izmantojiet Custom\",\n  \"Specify a custom locale code.\": \"Norādiet pielāgotu lokalizācijas kodu.\",\n  \"Failed\": \"Neizdevās\",\n  \"or\": \"vai\",\n  \"Code\": \"Kods\",\n  \"October CMS Marketplace\": \"Oktobra CMS tirgus\",\n  \"Visit the :link to add some.\": \"Projektam nav spraudņu vai motīvu. Apmeklējiet saiti :, lai pievienotu dažus.\",\n  \"Buy Now\": \"Pērc tagad\",\n  \"Updating package manager\": \"Pakešu pārvaldnieka atjaunināšana\",\n  \"Updating application files\": \"Lejupielādējam aplikācijas failus\",\n  \"Setting build number\": \"Notiek būvējuma numura iestatīšana\",\n  \"Finishing update process\": \"Pabeidzam atjaunināšanas procesu\",\n  \"Installing plugin: :name\": \"Lejupielādējam spraudni: :name\",\n  \"Finishing installation process\": \"Pabeidzam instalācijas procesu\",\n  \"Removing theme: :name\": \"Notiek motīva noņemšana: :name\",\n  \"Please specify a Theme name to install.\": \"Lūdzu norādiet Tēmas nosaukumu, kuru instalēt.\",\n  \"Installing theme: :name\": \"Lejupielādējam tēmu: :name\",\n  \"Removing plugin: :name\": \"Notiek spraudņa noņemšana: :name\",\n  \"Please specify a Plugin name to install.\": \"Lūdzu norādiet Spraudņa nosaukumu, kuru instalēt.\",\n  \"Update process complete\": \"Atjaunināšanas process noritēja veiksmīgi.\",\n  \"Package installed successfully\": \"Spraudnis tika veiksmīgi instalēts.\",\n  \"Check Dependencies\": \"Pārbaudiet atkarības\",\n  \"Install Dependencies\": \"Instalējiet atkarības\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Trūkst atkarību, kas nepieciešamas, lai sistēma darbotos pareizi.\",\n  \"License Key\": \"Licences atslēga\",\n  \"How to find your License Key\": \"Kā atrast savu licences atslēgu\",\n  \"The password attribute is required.\": \"Paroles atribūts ir nepieciešams.\",\n  \"The login attribute is required.\": \"Nepieciešams pieteikšanās atribūts.\",\n  \"Cannot login user since they are not activated.\": \"Nevar pieteikties lietotājam, jo tie nav aktivizēti.\",\n  \"Cannot login user since they are banned.\": \"Nevar pieteikties lietotājam, jo viņi ir aizliegti.\",\n  \"Cannot login user since they are suspended.\": \"Nevar pieteikties lietotājam, jo viņu darbība ir apturēta.\",\n  \"A user was not found with the given credentials.\": \"Lietotājs ar norādītajiem akreditācijas datiem netika atrasts.\",\n  \"A user was found but the password did not match.\": \"Lietotājs tika atrasts, bet parole nesakrita.\",\n  \"User is not logged in\": \"Lietotājs nav pieteicies\",\n  \"Register Software\": \"Reģistrēt programmatūru\",\n  \"View the Dashboard\": \"Skatīt mērinstrumentu paneli\",\n  \"Set the Default Dashboard\": \"Iestatiet noklusējuma informācijas paneli\",\n  \"Log File\": \"Žurnāla fails\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"VIŅU\",\n  \"Postmark\": \"Pasta zīmogs\",\n  \"No encryption\": \"Nav šifrēšanas\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Epasta konfigurācija\",\n  \"Manage email configuration.\": \"Pārvaldīt epasta konfigurāciju.\",\n  \"Sender Name\": \"Sūtītāja vārds\",\n  \"Sender Email\": \"Sūtītāja Epasts\",\n  \"Mail Method\": \"Epasta metode\",\n  \"SMTP Address\": \"SMTP Adrese\",\n  \"SMTP Port\": \"SMTP Ports\",\n  \"SMTP Encryption Protocol\": \"SMTP šifrēšanas protokols\",\n  \"SMTP Authorization Required\": \"Nepieciešama SMTP autorizācija\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Lietojiet šo aili,ja SMTP serverim nepieciešama autorizācija.\",\n  \"Username\": \"Lietotājvārds\",\n  \"Password\": \"Parole\",\n  \"Sendmail Path\": \"Sendmail Ceļs\",\n  \"Please specify the path of the sendmail program.\": \"Lūdzu norādiet ceļu uz sendmail programmu.\",\n  \"Mailgun Domain\": \"Mailgun Domēns\",\n  \"Please specify the Mailgun domain name.\": \"Lūdzu norādiet Mailgun domēna nosaukumu.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Ievadiet savu Mailgun API kodu.\",\n  \"SES Key\": \"SES atslēga\",\n  \"Enter your SES API key\": \"Ievadiet savu SES API atslēgu\",\n  \"SES Secret\": \"SES noslēpums\",\n  \"Enter your SES API secret key\": \"Ievadiet savu SES API slepeno atslēgu\",\n  \"SES Region\": \"SES reģions\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Ievadiet savu SES reģionu (piemēram, us-east-1)\",\n  \"Postmark Token\": \"Pasta zīmoga žetons\",\n  \"Enter your Postmark API secret key\": \"Ievadiet savu Postmark API slepeno atslēgu\",\n  \"Define administrator roles\": \"Definējiet administratora lomas\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Ierobežot piekļuvi šai vietnei tikai administratoram ar tālāk norādītajām lomām.\",\n  \"Customize Backend Styles\": \"Pielāgot back-end\",\n  \"Mail Templates\": \"Epasta veidnes\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Pielāgojiet Epasta veidnes, kuras tiek sūtītas lietotājiem un administrātoriem, pārvldiet Epastu izkārtojumus.\",\n  \"Event Log\": \"Notikumu žurnāls\",\n  \"View system log messages with their recorded time and details.\": \"Rāda sistēmas žurnāla ziņojumus ar notikuma laiku un detaļām.\",\n  \"Request Log\": \"Pieprasījumu žurnāls\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Rāda sliktus vai pārsūtījuma pieprasījumus, kā Lapa netika atrasta (404).\",\n  \"Test message sent.\": \"Testa vēstule tika veiksmīgi nosūtīta.\",\n  \"New Layout\": \"Jauns Izkārtojumus\",\n  \"New Template\": \"Jauna Veidne\",\n  \"Template\": \"Veidne\",\n  \"Templates\": \"Veidnes\",\n  \"Layouts\": \"Izkārtojumi\",\n  \"Layout\": \"Izkārtojums\",\n  \"Mail Layouts\": \"Epasta izkārtojumi\",\n  \"Unique code used to refer to this template\": \"Unikāls kods, lai identificētu šo veidni\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Tikai teksts\",\n  \"Subject\": \"Temats\",\n  \"Email message subject\": \"Epasta vēstules temats\",\n  \"Description\": \"Apraksts\",\n  \"Drivers Not Installed\": \"Dziņi nav instalēti\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Šai pasta metodei nepieciešams spraudnis \\\":plugin\\\" instalējiet to pirms pasta sūtīšanas.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Notikuma ID\",\n  \"Level\": \"Līmenis\",\n  \"Date & Time\": \"Datums & Laiks\",\n  \"Message\": \"Ziņojums\",\n  \"Version\": \"Versija\",\n  \"Log ID\": \"Žurnāla ID\",\n  \"Counter\": \"Skaits\",\n  \"Referers\": \"Pārsūtītājs\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Šis žurnāls attēlo sarakstu ar potenciālajām kļūdām, kuras notikušas, tai skaitā izņēmumus un atkļūdošanas informāciju.\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Šis žurnāls attēlo sarakstu ar pārlūkprogrammas pieprasījumiem, kuriem vajadzētu pievērst uzmanību. Piemēram, ja apmeklētājs pieprasa CMS lapu, kura nav pieejama, tiek veikts ieraksts ar kodu 404.\",\n  \"Event log emptied\": \"Notikumu žurnāls veiksmīgi notīrīts.\",\n  \"Empty Event Log\": \"Iztukšot notikumu žurnālu\",\n  \"Emptying Event Log...\": \"Iztukšojam notikumu žurnālu...\",\n  \"Return to Event Log\": \"Atgriezties notikumu žurnālā\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Vai esat pārliecināts?\",\n  \"Plugin has been removed from the file system.\": \"Spraudņi tika noņemti no failu sistēmas.\",\n  \"search plugins to install...\": \"meklēt spraudņus, lai instalētu...\",\n  \"search themes to install...\": \"meklēt tēmas, kuras instalēt...\",\n  \"Install Theme\": \"Instalēt Tēmu\",\n  \"Theme Name\": \"Tēmas Nosaukums\",\n  \"Install Plugin\": \"Instalēt Spraudni\",\n  \"Plugin Name\": \"Spraudņa nosaukums\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Norādiet spraudņa unikālo kodu. Piemēram, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Norādiet tēmas unikālo kodu. Piemēram, RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Kombināciju fails ':name' netika atrasts.\"\n}"
  },
  {
    "path": "modules/system/lang/nb-no/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatering',\n        'quote' => 'Sitat',\n        'code' => 'Kode',\n        'header1' => 'Overskrift 1',\n        'header2' => 'Overskrift 2',\n        'header3' => 'Overskrift 3',\n        'header4' => 'Overskrift 4',\n        'header5' => 'Overskrift 5',\n        'header6' => 'Overskrift 6',\n        'bold' => 'Fet',\n        'italic' => 'Kursiv',\n        'unorderedlist' => 'Punktliste',\n        'orderedlist' => 'Nummerert liste',\n        'video' => 'Video',\n        'image' => 'Bilde',\n        'link' => 'Lenke',\n        'horizontalrule' => 'Sett inn horisontal linje',\n        'fullscreen' => 'Fullskjerm',\n        'preview' => 'Forhåndsvisning',\n    ],\n\n    'mediamanager' => [\n        'insert_link' => 'Sett inn Media lenke',\n        'insert_image' => 'Sett inn Media bilde',\n        'insert_video' => 'Sett inn Media video',\n        'insert_audio' => 'Sett inn Media lyd',\n        'invalid_file_empty_insert' => 'Velg fil å sette lenken inn i.',\n        'invalid_file_single_insert' => 'Vennligst velg én enkelt fil.',\n        'invalid_image_empty_insert' => 'Velg bilde(r) å sette inn.',\n        'invalid_video_empty_insert' => 'Velg en video å sette inn.',\n        'invalid_audio_empty_insert' => 'Velg lyd å sette inn.',\n    ],\n\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Avbryt',\n        'widget_remove_confirm' => 'Fjerne widget?'\n    ],\n\n    'datepicker' => [\n        'previousMonth' => 'Forrige måned',\n        'nextMonth' => 'Neste måned',\n        'months' => ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'july', 'august', 'september', 'oktober', 'november', 'desember'],\n        'weekdays' => ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],\n        'weekdaysShort' => ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør']\n    ],\n\n    'filter' => [\n        'group' => [\n            'all' => 'alle'\n        ],\n        'dates' => [\n            'all' => 'alle',\n            'filter_button_text' => 'Filter',\n            'reset_button_text'  => 'Tilbakestill',\n            'date_placeholder' => 'Dato',\n            'after_placeholder' => 'Etter',\n            'before_placeholder' => 'Før'\n        ]\n    ],\n\n    'eventlog' => [\n        'show_stacktrace' => 'Vis stacktrace',\n        'hide_stacktrace' => 'Skjul stacktrace',\n        'tabs' => [\n            'formatted' => 'Formattert',\n            'raw' => 'Raw',\n        ],\n        'editor' => [\n            'title' => 'Kildekodeeditor',\n            'description' => 'Ditt operativsystem bør være konfigurert for å åpne ett av disse URL-schemaene.',\n            'openWith' => 'Åpne med',\n            'remember_choice' => 'Husk valget for denne sesjonen',\n            'open' => 'Åpne',\n            'cancel' => 'Avbryt'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/nb-no/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Getting back to basics',\n  ],\n  'directory' => [\n    'create_fail' => 'Kan ikke opprette mappen: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Kan ikke opprette filen: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Ugyldig sikkerhets-token',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'System',\n    'menu_label' => 'System',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Div.',\n      'logs' => 'Logger',\n      'mail' => 'E-post',\n      'shop' => 'Shop',\n      'team' => 'Team',\n      'users' => 'Brukere',\n      'system' => 'System',\n      'social' => 'Sosialt',\n      'events' => 'Hendelser',\n      'customers' => 'Kunder',\n      'my_settings' => 'Mine innstillinger',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Tema uten navn',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Installer tema',\n    'installed' => 'Installerte temaer',\n    'no_themes' => 'Det er ingen installerte temaer fra markedsplassen.',\n    'recommended' => 'Anbefalt',\n    'remove_confirm' => 'Vil du virkelig slette dette temaet?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Plugin uten navn',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Aktivere eller deaktivere',\n    'enable_or_disable_title' => 'Aktivere eller deaktivere plugins',\n    'install' => 'Installer plugins',\n    'install_products' => 'Installer produkter',\n    'installed' => 'Installerte plugins',\n    'no_plugins' => 'Det er ingen installerte plugins fra markedsplassen.',\n    'recommended' => 'Anbefalt',\n    'remove' => 'Fjern',\n    'refresh' => 'Oppdater',\n    'disabled_label' => 'Deaktivert',\n    'disabled_help' => 'Deaktiverte plugins blir ignorert av applikasjonen.',\n    'frozen_label' => 'Frys oppdaterionger',\n    'frozen_help' => 'Fryste plugins blir ignorert ved oppdatering.',\n    'selected_amount' => 'Valgte plugins: :amount',\n    'remove_confirm' => 'Er du sikker?',\n    'remove_success' => 'Plugins har blitt fjernet fra systemet.',\n    'refresh_success' => 'Plugins har blitt oppdatert i systemet.',\n    'disable_confirm' => 'Er du sikker?',\n    'disable_success' => 'Plugins har blitt deaktivert.',\n    'enable_success' => 'Plugins har blitt aktivert.',\n  ],\n  'project' => [\n    'attach' => 'Tilkoble prosjekt',\n    'detach' => 'Avkoble prosjekt',\n    'none' => 'Ingen',\n    'id' => [\n      'missing' => 'Vennligst spesifiser en prosjekt-ID.',\n    ],\n    'detach_confirm' => 'Vil du virkelig avkoble dette prosjektet?',\n    'unbind_success' => 'Prosjektet har blitt avkoblet.',\n  ],\n  'settings' => [\n    'search' => 'Søk',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL-tilkobling påkrevd',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikt navn som tilknyttes denne layouten',\n    'test_send' => 'Send testmelding',\n    'test_confirm' => 'Sender testmelding til :email. Fortsette?',\n    'creating' => 'Oppretter mal...',\n    'creating_layout' => 'Oppretter layout...',\n    'saving' => 'Lagrer mal...',\n    'saving_layout' => 'Lagrer layout...',\n    'delete_confirm' => 'Slette denne malen?',\n    'delete_layout_confirm' => 'Slette denne layouten?',\n    'deleting' => 'Sletter mal...',\n    'deleting_layout' => 'Sletter layout...',\n    'sending' => 'Sender testmelding...',\n    'return' => 'Tilbake til mallisten',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Utgiver',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Build :build',\n    'core_build_help' => 'Siste build er tilgjengelig.',\n    'themes' => 'Teamer',\n    'plugin_version_none' => 'Ny plugin',\n    'plugin_current_version' => 'Nåværende versjon',\n    'theme_new_install' => 'Ny tema-installasjon.',\n    'theme_extracting' => 'Pakker ut tema: :name',\n    'update_label' => 'Oppdatér programvare',\n    'update_loading' => 'Henter tilgjengelige oppdateringer...',\n    'force_label' => 'Tving update',\n    'found' => [\n      'label' => 'Fant nye oppdateringer!',\n      'help' => 'Klikk på Oppdatér programvare for å oppdatere.',\n    ],\n    'none' => [\n      'label' => 'Ingen oppdateringer',\n      'help' => 'Ingen nye oppdateringer ble funnet.',\n    ],\n    'important_action' => [\n      'empty' => 'Velg handling',\n      'confirm' => 'Bekreft oppdatering',\n      'skip' => 'Hopp over plugin (bare denne gangen)',\n      'ignore' => 'Hopp over plugin (alltid)',\n    ],\n    'important_action_required' => 'Velg handling',\n    'important_view_guide' => 'Vis oppgraderingsguide',\n    'important_alert_text' => 'Noen oppdateringer krever ettersyn.',\n    'details_title' => 'Plugin detaljer',\n    'details_view_homepage' => 'Vis nettside',\n    'details_current_version' => 'Nåværende versjon',\n    'details_author' => 'Forfatter',\n  ],\n  'server' => [\n    'connect_error' => 'Kunne ikke koble til serveren.',\n    'response_not_found' => 'Oppdateringsserveren ble ikke funnet.',\n    'response_invalid' => 'Feilaktig respons fra serveren.',\n    'response_empty' => 'Tom respons fra serveren.',\n    'file_error' => 'Serveren kunne ikke levere pakken.',\n    'file_corrupt' => 'Pakken fra serveren er korrupt.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Klassen :class må definere egenskapen $:property som brukes av :behavior -egenskapen.',\n  ],\n  'config' => [\n    'not_found' => 'Fant ikke konfigurasjonsfilen :file definert for for :location.',\n    'required' => 'Konfigurasjon brukt i :location må angi verdien \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Kunne ikke pakke opp core-fil \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Tøm forespørselslogg',\n    'empty_loading' => 'Tømmer forespørselslogg...',\n    'empty_success' => 'Forespørselsloggen er tømt.',\n    'return_link' => 'Tilbake til forespørselslogg',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'System',\n    'manage_system_settings' => 'Administrer systeminnstillinger',\n    'manage_software_updates' => 'Administrer programvareoppdateringer',\n    'access_logs' => 'Se systemlogger',\n    'manage_mail_templates' => 'Administrer e-postmaler',\n    'manage_mail_settings' => 'Administrer e-postinnstillinger',\n    'manage_other_administrators' => 'Administrer andre administratorer',\n  ],\n  'media' => [\n    'invalid_path' => 'Ugyldig filsti: \\':path\\'.',\n    'folder_size_items' => 'fil(er)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/nb-no/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \":attribute må aksepteres.\",\n    \"active_url\"       => \":attribute er ikke en gyldig URL.\",\n    \"after\"            => \":attribute må være en dato etter :date.\",\n    \"alpha\"            => \":attribute kan kun inneholde bokstaver.\",\n    \"alpha_dash\"       => \":attribute kan kun inneholde bokstaver, tall og bindestreker.\",\n    \"alpha_num\"        => \":attribute kan kun inneholde bokstaver og tall.\",\n    \"array\"            => \":attribute må være et array.\",\n    \"before\"           => \":attribute må være en dato før :date.\",\n    \"between\"          => [\n        \"numeric\" => \":attribute må være mellom :min - :max.\",\n        \"file\"    => \":attribute må være mellom :min - :max kilobytes.\",\n        \"string\"  => \":attribute må være mellom :min - :max tegn.\",\n        \"array\"   => \":attribute må ha mellom :min - :max elementer.\",\n    ],\n    \"confirmed\"        => \":attribute bekreftelse samsvarer ikke.\",\n    \"date\"             => \":attribute er ikke en gyldig dato.\",\n    \"date_format\"      => \":attribute samsvarer ikke med formatet :format.\",\n    \"different\"        => \":attribute og :other må være forskjellig.\",\n    \"digits\"           => \":attribute må være :digits tall.\",\n    \"digits_between\"   => \":attribute må være mellom :min og :max tall.\",\n    \"email\"            => \":attribute format ugyldig.\",\n    \"exists\"           => \"Valgt :attribute er ugyldig.\",\n    \"image\"            => \":attribute må være et bilde.\",\n    \"in\"               => \"Valgt :attribute er ugyldig.\",\n    \"integer\"          => \":attribute må være et heltall.\",\n    \"ip\"               => \":attribute må være en gyldig IP-adresse.\",\n    \"max\"              => [\n        \"numeric\" => \":attribute kan ikke være større enn :max.\",\n        \"file\"    => \":attribute kan ikke være større enn :max kilobytes.\",\n        \"string\"  => \":attribute kan ikke inneholde mer enn :max tegn.\",\n        \"array\"   => \":attribute kan ikke ha mer enn :max elementer.\",\n    ],\n    \"mimes\"            => \":attribute må være av filtype: :values.\",\n    \"extensions\"       => \":attribute må ha filendelse: :values.\",\n    \"min\"              => [\n        \"numeric\" => \":attribute må være minst :min.\",\n        \"file\"    => \":attribute må være minst :min kilobytes.\",\n        \"string\"  => \":attribute må være minst :min tegn.\",\n        \"array\"   => \":attribute må ha minst :min elementer.\",\n    ],\n    \"not_in\"           => \"Valgt :attribute er ugyldig.\",\n    \"numeric\"          => \":attribute må være et tall.\",\n    \"regex\"            => \":attribute format er ugyldig.\",\n    \"required\"         => \":attribute felt kreves.\",\n    \"required_if\"      => \":attribute felt kreves når :other er :value.\",\n    \"required_with\"    => \":attribute felt kreves når :values er til stede.\",\n    \"required_without\" => \":attribute felt kreves når :values ikke er til stede.\",\n    \"same\"             => \":attribute og :other må samsvare.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute må være :size.\",\n        \"file\"    => \":attribute må være :size kilobytes.\",\n        \"string\"  => \":attribute må være :size tegn.\",\n        \"array\"   => \" :attribute må inneholde :size elementer.\",\n    ],\n    \"unique\"           => \":attribute er allerede i bruk.\",\n    \"url\"              => \":attribute format er ugyldig.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/nb-no.json",
    "content": "{\n  \"Check For Updates\": \"Se etter oppdateringer\",\n  \"Manage Plugins\": \"Administrere plugins\",\n  \"Project\": \"Prosjekt\",\n  \"Owner\": \"Eier\",\n  \"Plugins\": \"Plugins\",\n  \"Disabled\": \"Deaktivert\",\n  \"Current Build\": \"Nåværende build\",\n  \"Software Updates\": \"Oppdateringer\",\n  \"Update the system modules and plugins.\": \"Oppdatere systemet, administrer og installere plugins og temaer.\",\n  \"Settings\": \"Innstillinger\",\n  \"Unable to find the specified settings.\": \"Fant ikke spesifiserte innstilling.\",\n  \"The settings page is missing a Model definition.\": \"Innstillingssiden mangler en modell-definisjon.\",\n  \":name settings updated\": \"Innstillingene for :name har blitt lagret.\",\n  \"Return to System Settings\": \"Tilbake til systeminnstillinger\",\n  \"There is no documentation provided.\": \"Ingen dokumentasjon å vise.\",\n  \"Documentation\": \"Dokumentasjon\",\n  \"Upgrade Guide\": \"Oppgraderingsguide\",\n  \"Attach to Project\": \"Tilkoble prosjekt\",\n  \"Manage Updates\": \"Administrer oppdateringer\",\n  \"Software Update\": \"Programvareoppdateringer\",\n  \"Return to Software Updates\": \"Tilbake til oppdateringer\",\n  \"Try Again\": \"Prøv igjen\",\n  \"Unpacking application files\": \"Pakker ut applikasjonsfiler\",\n  \"Update Failed\": \"Oppdateringen mislyktes\",\n  \"Unpacking plugin: :name\": \"Pakker ut plugin: :name\",\n  \"Updating application files\": \"Laster ned applikasjonsfiler\",\n  \"Finishing update process\": \"Ferdiggjør oppdatering\",\n  \"Installing plugin: :name\": \"Laster ned plugin: :name\",\n  \"Finishing installation process\": \"Fullfører installasjonen\",\n  \"Please specify a Theme name to install.\": \"Oppgi tema-navn for å installere.\",\n  \"Installing theme: :name\": \"Laster ned tema: :name\",\n  \"Please specify a Plugin name to install.\": \"Vennligst oppgi pluginens navn.\",\n  \"Update process complete\": \"Oppdatering har fullført.\",\n  \"Package installed successfully\": \"Plugin har blitt installert.\",\n  \"View the Dashboard\": \"Se dashboard\",\n  \"Log File\": \"Loggfil\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"No encryption\": \"Ingen kryptering\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"E-postinnstillinger\",\n  \"Manage email configuration.\": \"Administrere e-postinnstillinger.\",\n  \"Sender Name\": \"Avsendernavn\",\n  \"General\": \"Generelt\",\n  \"Sender Email\": \"Avsenderens e-postadresse\",\n  \"Mail Method\": \"E-postmetode\",\n  \"SMTP Address\": \"SMTP-adresse\",\n  \"SMTP Port\": \"SMTP-port\",\n  \"SMTP Encryption Protocol\": \"SMTP krypteringsprotkoll\",\n  \"SMTP Authorization Required\": \"SMTP-autentisering kreves\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Kryss av dersom SMTP-tjeneren krever autentisering.\",\n  \"Username\": \"Brukernavn\",\n  \"Password\": \"Passord\",\n  \"Sendmail Path\": \"Sendmail-sti\",\n  \"Please specify the path of the sendmail program.\": \"Vennligst oppgi stien til sendmail-programmet.\",\n  \"Mailgun Domain\": \"Mailgun-domene\",\n  \"Please specify the Mailgun domain name.\": \"Vennligst oppgi Mailgun-domenenavnet.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Oppgi din Mailgun-API-nøkkel.\",\n  \"SES Key\": \"SES nøkkel\",\n  \"Enter your SES API key\": \"Oppgi din SES API-nøkkel\",\n  \"SES Secret\": \"SES secret\",\n  \"Enter your SES API secret key\": \"Oppgi din hemmelige SES API-nøkkel\",\n  \"SES Region\": \"SES region\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Legg inn din SES region (feks. us-east-1)\",\n  \"Manage Backend Preferences\": \"Administrer backend-innstillinger\",\n  \"Manage Code Editor Preferences\": \"Administrer kodeeditor-innstillinger\",\n  \"Customize Backend Styles\": \"Tilpasse backend\",\n  \"Mail Templates\": \"E-postmaler\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modifisere e-postmalene som blir sendt til brukere og administratorer, administrere e-postlayouts.\",\n  \"Event Log\": \"Hendelseslogg\",\n  \"View system log messages with their recorded time and details.\": \"Se systemloggmeldinger med registrert tid og detaljer.\",\n  \"Request Log\": \"Forespørselslogg\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Se feilaktige forespørsler, for eksempel Ikke funnet (404).\",\n  \"Test message sent.\": \"Testmeldingen er sendt.\",\n  \"New Layout\": \"Ny layout\",\n  \"New Template\": \"Ny mal\",\n  \"Template\": \"Mal\",\n  \"Templates\": \"Maler\",\n  \"Layouts\": \"Layouts\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"E-postlayouts\",\n  \"Name\": \"Navn\",\n  \"Code\": \"Kode\",\n  \"Unique code used to refer to this template\": \"Unik kode som tilknyttes denne malen\",\n  \"-- No layout --\": \"-- ingen layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Ren tekst\",\n  \"Subject\": \"Emne\",\n  \"Email message subject\": \"Emnet til e-posten\",\n  \"Description\": \"Beskrivelse\",\n  \"Drivers Not Installed\": \"Drivere ikke installert\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Denne mailmetoden krever at plugin \\\":plugin\\\" er installert før du kan sende mail.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Hendelses-ID\",\n  \"Level\": \"Nivå\",\n  \"Date & Time\": \"Tid\",\n  \"Message\": \"Melding\",\n  \"Version\": \"Versjon\",\n  \"Status\": \"Status\",\n  \"Log ID\": \"Logg-ID\",\n  \"Counter\": \"Antall\",\n  \"Referers\": \"Referers\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Denne loggen viser en liste over potensielle feilmeldinger som oppstår i applikasjonen, for eksempel unntak og debugginginformasjon.\",\n  \"Event\": \"Hendelse\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Denne loggen viser en liste over nettleserforespørsler som kan kreve oppmerksomhet. For eksempel, hvis en bruker besøker en side som ikke eksisterer, vil det bli oppført her med statuskode 404.\",\n  \"Request\": \"Forespørsel\",\n  \"Event log emptied\": \"Hendelsesloggen er tømt.\",\n  \"Empty Event Log\": \"Tøm hendelseslogg\",\n  \"Emptying Event Log...\": \"Tømmer hendelseslogg...\",\n  \"Return to Event Log\": \"Tilbake til hendelseslogg\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Er du sikker?\",\n  \"Plugin has been removed from the file system.\": \"Plugins har blitt fjernet fra systemet.\",\n  \"search plugins to install...\": \"søk etter plugins å installere...\",\n  \"search themes to install...\": \"søk etter temaer å installere...\",\n  \"Install Theme\": \"Installér tema\",\n  \"Theme Name\": \"Navn på tema\",\n  \"Install Plugin\": \"Installér\",\n  \"Plugin Name\": \"Navn på plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Navngi pluginen ved et unikt navn. For eksempel, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Navngi temaet ved et unikt navn. For eksempel, RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Kombinasjonsfilen ':name' ble ikke funnet.\"\n}"
  },
  {
    "path": "modules/system/lang/nl/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Opmaak',\n        'quote' => 'Quote',\n        'code' => 'Code',\n        'header1' => 'Koptekst 1',\n        'header2' => 'Koptekst 2',\n        'header3' => 'Koptekst 3',\n        'header4' => 'Koptekst 4',\n        'header5' => 'Koptekst 5',\n        'header6' => 'Koptekst 6',\n        'bold' => 'Vet',\n        'italic' => 'Cursief',\n        'unorderedlist' => 'Ongeordende lijst',\n        'orderedlist' => 'Gerangschikte lijst',\n        'snippet' => 'Snippet',\n        'video' => 'Video',\n        'image' => 'Afbeelding',\n        'link' => 'Hyperlink',\n        'horizontalrule' => 'Invoegen horizontale lijn',\n        'fullscreen' => 'Volledig scherm',\n        'preview' => 'Voorbeeldweergave',\n        'strikethrough' => 'Doorhalen',\n        'cleanblock' => 'Blok opschonen',\n        'table' => 'Tabel',\n        'sidebyside' => 'Zij aan zij'\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Media Link invoegen',\n        'insert_image' => 'Media Afbeelding invoegen',\n        'insert_video' => 'Media Video invoegen',\n        'insert_audio' => 'Media Audio invoegen',\n        'invalid_file_empty_insert' => 'Selecteer bestand om een link naar te maken.',\n        'invalid_file_single_insert' => 'Selecteer één bestand.',\n        'invalid_image_empty_insert' => 'Selecteer afbeelding(en) om in te voegen.',\n        'invalid_video_empty_insert' => 'Selecteer een video bestand om in te voegen.',\n        'invalid_audio_empty_insert' => 'Selecteer een audio bestand om in te voegen.',\n    ],\n    'alert' => [\n        'error' => 'Fout',\n        'confirm' => 'Bevestigen',\n        'dismiss' => 'Afwijzen',\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Annuleren',\n        'widget_remove_confirm' => 'Deze widget verwijderen?',\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Vorige maand',\n        'nextMonth' => 'Volgende maan',\n        'months' => ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'],\n        'weekdays' => ['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'],\n        'weekdaysShort' => ['Zo', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za']\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'alle',\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Toepassen',\n            'clear_button_text' => 'Resetten',\n        ],\n        'dates' => [\n            'all' => 'alle',\n            'filter_button_text' => 'Filteren',\n            'reset_button_text' => 'Resetten',\n            'date_placeholder' => 'Datum',\n            'after_placeholder' => 'Na',\n            'before_placeholder' => 'Voor',\n        ],\n        'numbers' => [\n            'all' => 'alle',\n            'filter_button_text' => 'Filteren',\n            'reset_button_text' => 'Resetten',\n            'min_placeholder' => 'Minimum',\n            'max_placeholder' => 'Maximum',\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Toon stacktrace',\n        'hide_stacktrace' => 'Verberg stacktrace',\n        'tabs' => [\n            'formatted' => 'Geformatteerd',\n            'raw' => 'Bronversie',\n        ],\n        'editor' => [\n            'title' => 'Broncode editor',\n            'description' => 'Je besturingssysteem moet in staat zijn om met deze URL-schema\\'s om te kunnen gaan.',\n            'openWith' => 'Openen met',\n            'remember_choice' => 'Onthoudt de geselecteerde optie voor deze browser-sessie',\n            'open' => 'Openen',\n            'cancel' => 'Annuleren',\n        ],\n    ],\n    'upload' => [\n        'max_files' => 'Je kan niet meer bestanden uploaden.',\n        'invalid_file_type' => 'Je kan geen bestanden van dit type uploaden.',\n        'file_too_big' => 'Het bestand is te groot ({{filesize}}MB). Maximale bestandsgrootte: {{maxFilesize}}MB.',\n        'response_error' => 'De server reageerde met de code {{statusCode}}.',\n        'remove_file' => 'Verwijder bestand',\n    ],\n    'inspector' => [\n        'add' => 'Toevoegen',\n        'remove' => 'Verwijderen',\n        'key' => 'Sleutel',\n        'value' => 'Waarde',\n        'ok' => 'Ok',\n        'cancel' => 'Annuleren',\n        'items' => 'Items',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/nl/lang.php",
    "content": "<?php return [\n  'installer' => [\n    'app_config_section' => 'Applicatie configuratie',\n    'license_section' => 'Licentiecode',\n    'dependencies_section' => 'Installeren van vereiste pakketten',\n    'demo_section' => 'Demo inhoud',\n    'locale_select_label' => 'Selecteer taal',\n    'locale_select_error' => 'Taalcode :code is ongeldig, probeer het opnieuw',\n    'app_url_label' => 'Applicatie URL',\n    'backend_uri_label' => 'Back-end URI',\n    'backend_uri_comment' => 'Voor een betere beveiliging van de applicatie is het aanbevolen om een afwijkende back-end URI te kiezen.',\n    'license_key_label' => 'Licentiecode',\n    'license_key_comment' => 'Voer een geldige licentiecode in om verder te gaan.',\n    'license_thanks_comment' => 'Bedankt dat je hebt gekozen voor October CMS!',\n    'license_expired_comment' => 'De licentie is niet betaald of is verlopen. Bezoek octobercms.com om een licentiecode te verkrijgen.',\n    'too_many_failures_label' => 'Teveel mislukte pogingen',\n    'non_interactive_label' => 'Niet-interactieve modus gedetecteerd',\n    'non_interactive_comment' => 'Zie je deze fout meteen? Gebruik dan deze niet-interactieve commando\\'s.',\n    'install_failed_label' => 'Installatie mislukt',\n    'install_failed_comment' => 'Pobeer deze commando\\'s handmatig uit te voeren.',\n    'database_engine_label' => 'Database engine',\n    'database_host_label' => 'Database hostnaam',\n    'database_host_comment' => 'Hostnaam voor de database connectie.',\n    'database_port_label' => 'Database poort',\n    'database_port_comment' => '(Optioneel) De poort voor de database connectie.',\n    'database_name_label' => 'Databasenaam',\n    'database_name_comment' => 'Voer de naam in van de database die gebruikt moet worden.',\n    'database_login_label' => 'Database gebruiker',\n    'database_login_comment' => 'De gebruiker die voldoende privileges heeft om database tabellen aan te maken.',\n    'database_pass_label' => 'Database wachtwoord',\n    'database_pass_comment' => 'Wachtwoord van de opgegeven database gebruiker.',\n    'database_path_label' => 'Database pad',\n    'database_path_comment' => 'Voor bestandsgebaseerde opslag geef je het bestandspad op relatief aan de root-directory van de applicatie.',\n    'migrate_database_comment' => 'Migreer de database met het volgende commando',\n    'visit_backend_comment' => 'En open vervolgens het beheergedeelte op deze URL',\n    'open_configurator_comment' => 'Open deze applicatie in je browser',\n    'install_demo_label' => 'Installeer demo thema en inhoud? (Aanbevolen)',\n    'operation_timeout_comment' => 'De aanroep is verlopen. Verhoog de timeout-instelling van de server en probeer het opnieuw.',\n    'operation_timeout_hint' => 'Bekijk relevante documentatie voor :name.',\n  ],\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Beheerpaneel',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'ca' => 'Català',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fi' => 'Suomi',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'ru' => 'Русский',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'sv' => 'Svenska',\n    'th' => 'ไทย',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'vn' => 'Tiếng việt',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n  ],\n  'directory' => [\n    'create_fail' => 'Map aanmaken mislukt: ',\n  ],\n  'file' => [\n    'create_fail' => 'Bestand aanmaken mislukt: :name',\n  ],\n  'combiner' => [],\n  'resizer' => [],\n  'system' => [\n    'name' => 'Systeem',\n    'menu_label' => 'Systeem',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Diversen',\n      'logs' => 'Logboeken',\n      'mail' => 'E-mail',\n      'shop' => 'Winkel',\n      'team' => 'Team',\n      'users' => 'Gebruikers',\n      'system' => 'Systeem',\n      'social' => 'Sociaal',\n      'backend' => 'Back-end',\n      'events' => 'Events',\n      'customers' => 'Klanten',\n      'my_settings' => 'Mijn instellingen',\n      'notifications' => 'Notifications',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Thema',\n    'unnamed' => 'Naamloos thema',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Installeer thema\\'s',\n    'installed' => 'Geïnstalleerde thema\\'s',\n    'no_themes' => 'Er zijn geen thema\\'s geïnstalleerd uit de marketplace.',\n    'recommended' => 'Aanbevolen',\n    'remove_confirm' => 'Weet je zeker dat je dit thema wilt verwijderen?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Naamloze plugin',\n    'name' => [],\n    'by_author' => 'Ontwikkeld door :name',\n  ],\n  'plugins' => [\n    'install' => 'Installeer plugins',\n    'install_products' => 'Installeer plugins',\n    'installed' => 'Geïnstalleerde plugins',\n    'no_plugins' => 'Er zijn geen plugins geïnstalleerd uit de marketplace.',\n    'recommended' => 'Aanbevolen',\n    'plugin_label' => 'Plugin',\n    'bulk_actions_label' => 'Bulk acties',\n    'check_yes' => 'Ja',\n    'check_no' => 'Nee',\n    'unfrozen' => 'Updates ingeschakeld',\n    'freeze' => 'Updates uitschakelen',\n    'unfreeze' => 'Updates inschakelen',\n    'refresh' => 'Verversen',\n    'remove' => 'Verwijder',\n    'freeze_label' => 'Updates uitschakelen',\n    'unfreeze_label' => 'Updates inschakelen',\n    'freeze_success' => 'Updates voor geselecteerde plugins zijn uitgeschakeld.',\n    'unfreeze_success' => 'Updates voor geselecteerde plugins zijn ingeschakeld.',\n    'enable_success' => 'Geselecteerde plugins zijn ingeschakeld.',\n    'disable_success' => 'Geselecteerde plugins zijn uitgeschakeld.',\n    'refresh_success' => 'Geselecteerde plugins zijn ge-reset.',\n    'remove_confirm' => 'Weet je zeker dat je de geselecteerde plugins wilt verwijderen? De data van de plugins zullen ook verwijderd worden.',\n    'remove_success' => 'Geselecteerde plugins zijn verwijderd.',\n  ],\n  'project' => [\n    'attach' => 'Koppel project',\n    'detach' => 'Ontkoppel project',\n    'none' => 'Geen',\n    'id' => [\n      'missing' => 'Voer een Project ID in.',\n    ],\n    'detach_confirm' => 'Weet je zeker dat je dit project wilt ontkoppelen?',\n    'unbind_success' => 'Project is succesvol ontkoppeld.',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL verbinding vereist',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Een unieke naam die refereert naar dit sjabloon',\n    'test_send' => 'Stuur testbericht',\n    'test_confirm' => 'Er zal een testbericht verstuurd worden naar :email. Zal ik doorgaan?',\n    'creating' => 'Aanmaken sjabloon...',\n    'creating_layout' => 'Aanmaken lay-out...',\n    'saving' => 'Opslaan sjabloon...',\n    'saving_layout' => 'Opslaan lay-out...',\n    'delete_confirm' => 'Weet je zeker dat je dit sjabloon wilt verwijderen?',\n    'delete_layout_confirm' => 'Weet je zeker dat je deze lay-out wilt verwijderen?',\n    'deleting' => 'Verwijderen sjabloon...',\n    'deleting_layout' => 'Verwijderen lay-out...',\n    'sending' => 'Versturen testbericht...',\n    'return' => 'Terug naar templatelijst',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Kop',\n      'paragraph' => 'Dit is een paragraaf gevuld met Lorem Ipsum en een link. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Item',\n        'description' => 'Omschrijving',\n        'price' => 'Prijs',\n        'centered' => 'Gecentreerd',\n        'right_aligned' => 'Rechts-uitgelijnd',\n      ],\n      'buttons' => [\n        'primary' => 'Primaire knop',\n        'positive' => 'Knop positief',\n        'negative' => 'Knop negatief',\n      ],\n      'panel' => 'Hoe geweldig is dit panel?',\n      'more' => 'Wat meer tekst',\n      'promotion' => 'Coupon code: OCTOBER',\n      'subcopy' => 'Voettekst',\n      'thanks' => 'Bedankt',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Auteur',\n    'plugin_not_found' => 'Plugin niet gevonden',\n    'plugin_version_not_found' => 'Plugin versie niet gevonden',\n    'theme_not_found' => 'Thema niet gevonden',\n    'core_build' => 'Versie :build',\n    'core_build_help' => 'De meest recente versie is beschikbaar.',\n    'changelog' => 'Logboek van wijzigingen',\n    'changelog_view_details' => 'Details bekijken',\n    'themes' => 'Thema\\'s',\n    'plugin_version_none' => 'Nieuwe plugin',\n    'plugin_current_version' => 'Huidige versie',\n    'theme_new_install' => 'Nieuwe thema-installatie.',\n    'theme_extracting' => 'Thema uitpakken: :name',\n    'update_label' => 'Updates installeren',\n    'update_loading' => 'Beschikbare updates laden...',\n    'force_label' => 'Forceer update',\n    'found' => [\n      'label' => 'Nieuwe updates beschikbaar!',\n      'help' => 'Klik op \\'Updates installeren\\' om te starten.',\n    ],\n    'none' => [\n      'label' => 'Geen updates',\n      'help' => 'Geen nieuwe updates gevonden.',\n    ],\n    'important_action' => [\n      'empty' => 'Selecteer actie',\n      'confirm' => 'Bevestig update',\n      'skip' => 'Sla deze plugin eenmalig over',\n      'ignore' => 'Negeer deze plugin',\n    ],\n    'important_action_required' => 'Actie vereist!',\n    'important_view_guide' => 'Toon upgrade handleiding',\n    'important_view_release_notes' => 'Bekijk release notes',\n    'important_alert_text' => 'Een aantal updates vereisen aandacht.',\n    'details_title_plugin' => 'Details plugin',\n    'details_title_theme' => 'Details thema',\n    'details_view_homepage' => 'Toon homepagina',\n    'details_changelog' => 'Changelog',\n    'details_changelog_missing' => 'Er is geen changelog aanwezig.',\n    'details_view_license' => 'Toon licentie',\n    'details_current_version' => 'Huidige versie',\n    'details_author' => 'Auteur',\n  ],\n  'market' => [\n    'menu_description' => 'Beheer plugins en thema\\'s.',\n    'content_loading' => 'Bezig met laden...',\n  ],\n  'server' => [\n    'connect_error' => 'Fout tijdens het verbinden met de server.',\n    'response_not_found' => 'De updateserver kan niet worden gevonden.',\n    'response_invalid' => 'Ongeldige reactie van de server.',\n    'response_empty' => 'Lege reactie van de server.',\n    'file_error' => 'Fout tijdens aanleveren bestand door server.',\n    'file_corrupt' => 'Door server aangeboden bestand is corrupt.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Klasse :class moet variabele $:property bevatten welke gebruikt wordt door het gedrag (behavior) :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Kan het configuratiebestand :file gedefinieerd voor :location niet vinden.',\n    'required' => 'Configuratie gebruikt in :location moet de waarde :property toewijzen.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Kan het corebestand \\':file\\' niet uitpakken.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Aanvragenlogboek legen',\n    'empty_loading' => 'Bezig met het aanvragenlogboek legen...',\n    'empty_success' => 'Het aanvragenlogboek legen is gelukt.',\n    'return_link' => 'Terug naar het aanvragenlogboek',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Systeem',\n    'manage_system_settings' => 'Beheer systeeminstellingen',\n    'manage_software_updates' => 'Beheer updates',\n    'access_logs' => 'Bekijk systeem logbestanden',\n    'manage_mail_templates' => 'Beheer e-mailsjablonen',\n    'manage_mail_settings' => 'Beheer e-mailinstellingen',\n    'manage_other_administrators' => 'Beheer mede-beheerders',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Ongeldig pad opgegeven: \\':path\\'.',\n    'folder_size_items' => 'item(s)',\n  ],\n  'page' => [\n    'not_found' => [\n      'label' => 'Pagina niet gevonden',\n      'help' => 'De gevraagde pagina kan niet gevonden worden.',\n    ],\n    'custom_error' => [\n      'label' => 'Paginafout',\n      'help' => 'Excuses, er is een fout opgetreden. De pagina kan niet worden weergegeven.',\n    ],\n    'invalid_token' => [\n      'label' => 'Ongeldige security token',\n    ],\n    'maintenance' => [\n      'label' => 'Wij zijn zo weer terug!',\n      'help' => 'Op dit moment wordt er onderhoud uitgevoerd. Kom later terug.',\n      'message' => 'Bericht:',\n      'available_at' => 'Probeer het nog eens op:',\n    ],\n  ],\n  'pagination' => [\n    'previous' => 'Vorige',\n    'next' => 'Volgende',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/nl/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted' => ':attribute moet geaccepteerd zijn.',\n    'accepted_if' => ':attribute moet geaccepteerd zijn als :other de waarde :value heeft.',\n    'active_url' => ':attribute is geen geldige URL.',\n    'after' => ':attribute moet een datum na :date zijn.',\n    'after_or_equal' => ':attribute moet een datum na of gelijk aan :date zijn.',\n    'alpha' => ':attribute mag alleen letters bevatten.',\n    'alpha_dash' => ':attribute mag alleen letters, nummers, underscores (_) en streepjes (-) bevatten.',\n    'alpha_num' => ':attribute mag alleen letters en nummers bevatten.',\n    'array' => ':attribute moet geselecteerde elementen bevatten.',\n    'ascii' => ':attribute mag alleen alfanumerieke karakters en symbolen bevatten.',\n    'before' => ':attribute moet een datum voor :date zijn.',\n    'before_or_equal' => ':attribute moet een datum voor of gelijk aan :date zijn.',\n    'between' => [\n        'numeric' => ':attribute moet tussen :min en :max zijn.',\n        'file' => ':attribute moet tussen :min en :max kilobytes zijn.',\n        'string' => ':attribute moet tussen :min en :max karakters zijn.',\n        'array' => ':attribute moet tussen :min en :max items bevatten.',\n    ],\n    'boolean' => ':attribute moet ja of nee zijn.',\n    'confirmed' => ':attribute bevestiging komt niet overeen.',\n    'current_password' => 'Het wachtwoord is onjuist.',\n    'date' => ':attribute moet een datum bevatten.',\n    'date_equals' => ':attribute moet een datum zijn gelijk aan :date.',\n    'date_format' => ':attribute moet een geldig datum formaat bevatten.',\n    'decimal' => ':attribute moet :decimal decimalen bevatten.',\n    'declined' => ':attribute moet zijn afgewezen.',\n    'declined_if' => ':attribute moet afgewezen zijn als :other de waarde :value heeft.',\n    'different' => ':attribute en :other moeten verschillend zijn.',\n    'digits' => ':attribute moet bestaan uit :digits cijfers.',\n    'digits_between' => ':attribute moet bestaan uit minimaal :min en maximaal :max cijfers.',\n    'dimensions' => ':attribute heeft geen geldige afmetingen voor afbeeldingen.',\n    'distinct' => ':attribute heeft een dubbele waarde.',\n    'doesnt_end_with' => ':attribute mag niet eindigen met: :values.',\n    'doesnt_start_with' => ':attribute mag niet starten met: :values.',\n    'email' => ':attribute is geen geldig e-mailadres.',\n    'ends_with' => ':attribute moet eindigen op een van de volgende waarden: :values.',\n    'enum' => ':attribute is ongeldig.',\n    'exists' => ':attribute bestaat niet.',\n    'file' => ':attribute moet een bestand zijn.',\n    'filled' => ':attribute is verplicht.',\n    'gt' => [\n        'numeric' => ':attribute moet groter zijn dan :value.',\n        'file' => ':attribute moet groter zijn dan :value kilobyte.',\n        'string' => ':attribute moet langer zijn dan :value karakters.',\n        'array' => ':attribute moet meer dan :value items bevatten.',\n    ],\n    'gte' => [\n        'numeric' => ':attribute moet groter of gelijk zijn aan :value.',\n        'file' => ':attribute moet minstens :value kilobyte groot zijn.',\n        'string' => ':attribute moet minstens :value karakters lang zijn.',\n        'array' => ':attribute moet minstens :value items bevatten.',\n    ],\n    'image' => ':attribute moet een afbeelding zijn.',\n    'in' => ':attribute is ongeldig.',\n    'in_array' => ':attribute bestaat niet in :other.',\n    'integer' => ':attribute moet een getal zijn.',\n    'ip' => ':attribute moet een geldig IP-adres zijn.',\n    'ipv4' => ':attribute moet een geldig IPv4-adres zijn.',\n    'ipv6' => ':attribute moet een geldig IPv6-adres zijn.',\n    'json' => ':attribute moet een geldige JSON-string zijn.',\n    'lowercase' => ':attribute mag alleen kleine letters bevatten.',\n    'lt' => [\n        'array' => ':attribute moet minder dan :value items bevatten.',\n        'file' => ':attribute moet kleiner zijn dan :value kilobyte.',\n        'numeric' => ':attribute moet kleiner zijn dan :value.',\n        'string' => ':attribute moet korter zijn dan :value karakters.',\n    ],\n    'lte' => [\n        'array' => ':attribute mag hoogstens :value items bevatten.',\n        'file' => ':attribute mag hoogstens :value kilobyte groot zijn.',\n        'numeric' => ':attribute moet kleiner of gelijk zijn aan :value.',\n        'string' => ':attribute mag hoogstens :value karakters lang zijn.',\n    ],\n    'mac_address' => ':attribute is geen geldig MAC-adres.',\n    'max' => [\n        'array' => ':attribute mag niet meer dan :max items bevatten.',\n        'file' => ':attribute mag niet meer dan :max kilobytes zijn.',\n        'numeric' => ':attribute mag niet hoger dan :max zijn.',\n        'string' => ':attribute mag niet uit meer dan :max karakters bestaan.',\n    ],\n    'max_digits' => ':attribute mag niet meer dan :max cijfers bevatten.',\n    'mimes' => ':attribute moet een bestand zijn van het bestandstype :values.',\n    'mimetypes' => ':attribute moet een bestand zijn van het bestandstype :values.',\n    'min' => [\n        'array' => ':attribute moet minimaal :min items bevatten.',\n        'file' => ':attribute moet minimaal :min kilobytes zijn.',\n        'numeric' => ':attribute moet minimaal :min zijn.',\n        'string' => ':attribute moet minimaal :min karakters zijn.',\n    ],\n    'min_digits' => ':attribute moet minstens :min cijfers bevatten.',\n    'missing' => ':attribute mag niet aanwezig zijn.',\n    'missing_if' => ':attribute mag niet aanwezig zijn als :other de waarde :value heeft.',\n    'missing_unless' => ':attribute mag niet aanwezige zijn tenzij :other de waarde :value heeft.',\n    'missing_with' => ':attribute mag niet aanwezig zijn als waarde :values aanwezig is.',\n    'missing_with_all' => ':attribute mag niet aanwezig zijn als waarden :values aanwezig zijn.',\n    'multiple_of' => ':attribute moet een meervoud zijn van :value.',\n    'not_in' => 'De gekozen waarde van :attribute is ongeldig.',\n    'not_regex' => 'Het formaat van :attribute is ongeldig.',\n    'numeric' => ':attribute moet een nummer zijn.',\n    'password' => [\n        'letters' => ':attribute moet tenminste één letter bevatten.',\n        'mixed' => ':attribute moet tenminste één hoofdletter en één kleine letter bevatten.',\n        'numbers' => ':attribute moet tenminste één cijfer bevatten.',\n        'symbols' => ':attribute moet tenminste één symbool bevatten.',\n        'uncompromised' => ':attribute is voorgekomen in een datalek. Kies een ander :attribute.',\n    ],\n    'present' => ':attribute moet bestaan.',\n    'prohibited' => ':attribute is niet toegestaan.',\n    'prohibited_if' => ':attribute is niet toegestaan als :other de waarde :value heeft.',\n    'prohibited_unless' => ':attribute is niet toegestaan tenzij :other de waarden :values bevat.',\n    'prohibits' => ':attribute staat niet toe dat :other aanwezig is.',\n    'regex' => ':attribute formaat is ongeldig.',\n    'required' => ':attribute is verplicht.',\n    'required_array_keys' => ':attribute moet waarden bevatten uit: :values.',\n    'required_if' => ':attribute is verplicht indien :other gelijk is aan :value.',\n    'required_if_accepted' => ':attribute is verplicht als :other is geaccepteerd.',\n    'required_unless' => ':attribute is verplicht tenzij :other gelijk is aan :values.',\n    'required_with' => ':attribute is verplicht i.c.m. :values',\n    'required_with_all' => ':attribute is verplicht i.c.m. :values',\n    'required_without' => ':attribute is verplicht als :values niet ingevuld is.',\n    'required_without_all' => ':attribute is verplicht als :values niet ingevuld zijn.',\n    'same' => ':attribute en :other moeten overeenkomen.',\n    'size' => [\n        'array' => ':attribute moet :size items bevatten.',\n        'file' => ':attribute moet :size kilobyte zijn.',\n        'numeric' => ':attribute moet :size zijn.',\n        'string' => ':attribute moet :size karakters zijn.',\n    ],\n    'starts_with' => ':attribute moet beginnen met een van de volgende waarden: :values.',\n    'string' => ':attribute moet een tekenreeks zijn.',\n    'timezone' => ':attribute moet een geldige tijdzone zijn.',\n    'unique' => ':attribute is al in gebruik.',\n    'uploaded' => 'Het uploaden van :attribute is mislukt.',\n    'uppercase' => ':attribute mag enkel hoofdletters bevatten.',\n    'url' => ':attribute is geen geldige URL.',\n    'ulid' => ':attribute moet een geldig ULID zijn.',\n    'uuid' => ':attribute moet een geldig UUID zijn.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/nl.json",
    "content": "{\n  \"Check For Updates\": \"Controleer op updates\",\n  \"Install Packages\": \"Installeer packages\",\n  \"Manage Themes\": \"Beheer thema's\",\n  \"Manage Plugins\": \"Beheer plugins\",\n  \"Project\": \"Project\",\n  \"Owner\": \"Eigenaar\",\n  \"Plugins\": \"Plugins\",\n  \"Recommended\": \"Aanbevolen\",\n  \"Disabled\": \"Uitgeschakeld\",\n  \"Current Build\": \"Huidige versie\",\n  \"Updates Available\": \"Updates beschikbaar\",\n  \"Up to Date\": \"Up-to-date\",\n  \"Latest Build\": \"Meest recente versie\",\n  \"View Changelog\": \"Bekijk changelog\",\n  \"Software Updates\": \"Updates & Plugins\",\n  \"Update the system modules and plugins.\": \"Werk de systeemmodules en plug-ins bij.\",\n  \"General\": \"Algemeen\",\n  \"Mail\": \"E-mail\",\n  \"Utilities\": \"Hulpmiddelen\",\n  \"Settings\": \"Instellingen\",\n  \"Show All Settings\": \"Toon alle instellingen\",\n  \"Unable to find the specified settings.\": \"Kan de opgegeven instellingen niet vinden.\",\n  \"The settings page is missing a Model definition.\": \"De instellingenpagina mist een modeldefinitie.\",\n  \":name settings updated\": \"Instellingen voor :name zijn succesvol bijgewerkt.\",\n  \"Return to System Settings\": \"Terug naar systeeminstellingen\",\n  \"Search Settings...\": \"Vind een Instelling...\",\n  \"Disable mail branding CSS\": \"CSS voor e-mailbranding uitschakelen\",\n  \"Manage Sites\": \"Sites beheren\",\n  \"Manage the websites available for this application.\": \"Beheer beschikbare websites voor deze toepassing.\",\n  \"Marketplace\": \"Marktplaats\",\n  \"There is no documentation provided.\": \"Er is geen documentatie beschikbaar.\",\n  \"Documentation\": \"Documentatie\",\n  \"Upgrade Guide\": \"Handleiding upgraden\",\n  \"License\": \"Licentie\",\n  \"Attach to Project\": \"Koppel aan project\",\n  \"Manage Updates\": \"Updates beheren\",\n  \"Software Update\": \"Software bijwerken\",\n  \"Return to Software Updates\": \"Terug naar systeemupdates\",\n  \"Try Again\": \"Probeer nogmaals\",\n  \"Unpacking application files\": \"Uitpakken van applicatiebestanden\",\n  \"Update Failed\": \"Update is mislukt\",\n  \"Unpacking plugin: :name\": \"Plugin uitpakken: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"De primaire site wordt standaard gebruikt en kan niet worden verwijderd.\",\n  \"Disabled sites are not shown on the frontend.\": \"Uitgeschakelde sites worden niet getoond op de frontend.\",\n  \"Enabled in the Admin Panel\": \"Ingeschakeld in het Beheerpaneel\",\n  \"Configuration\": \"Configuratie\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Gebruik dit als u wilt dat de site wordt ingeschakeld in het Beheerpaneel.\",\n  \"Install\": \"Installeren\",\n  \"Sync Project\": \"Synchroniseer project\",\n  \"Name\": \"Naam\",\n  \"Unique Code\": \"Unieke code\",\n  \"Theme\": \"Thema\",\n  \"Sites\": \"Sites\",\n  \"Create Site\": \"Site maken\",\n  \"Base URL\": \"Basis URL\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Huidige standaardwaarde: :value\",\n  \"Locale\": \"Taal\",\n  \"Timezone\": \"Tijdzone\",\n  \"Custom application URL\": \"Aangepaste applicatie-URL\",\n  \"Override the application URL when this site is active.\": \"Overschrijf de applicatie-URL wanneer deze site actief is.\",\n  \"Use a CMS route prefix\": \"Een CMS-routevoorvoegsel gebruiken\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Een voorvoegsel kan deze site identificeren bij gebruik van een gedeelde hostnaam.\",\n  \"Define matching hostnames\": \"Definieer overeenkomende hostnamen\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Geef domeinnamen en patronen op die moeten worden gebruikt om deze site te bedienen.\",\n  \"Display a style for this site\": \"Geef een kleur weer voor deze site\",\n  \"To help identify this site, display a color in the admin panel.\": \"Om deze site te helpen identificeren, geeft u een kleur weer in het beheerderspaneel.\",\n  \"Save\": \"Opslaan\",\n  \"Save and Close\": \"Opslaan en sluiten\",\n  \"Use Default\": \"Gebruik standaard\",\n  \"Use Custom\": \"Aangepast gebruiken\",\n  \"Specify a custom locale code.\": \"Geef een aangepaste landinstellingscode op.\",\n  \"Failed\": \"mislukt\",\n  \"or\": \"of\",\n  \"Code\": \"Code\",\n  \"October CMS Marketplace\": \"October CMS Marktplaats\",\n  \"Visit the :link to add some.\": \"Project heeft geen plug-ins of thema's. Bezoek de :link om wat toe te voegen.\",\n  \"Buy Now\": \"Nu kopen\",\n  \"Updating package manager\": \"Bijwerken pakketmanager\",\n  \"Updating application files\": \"Bestanden aan het downloaden\",\n  \"Setting build number\": \"Versie informatie bijwerken\",\n  \"Finishing update process\": \"Afronden van het updateproces\",\n  \"Installing plugin: :name\": \"Plugin downloaden: :name\",\n  \"Finishing installation process\": \"Bezig met het afronden van het installatieproces\",\n  \"Removing theme: :name\": \"Thema verwijderen: :name\",\n  \"Please specify a Theme name to install.\": \"Voor de naam van een thema in om te installeren.\",\n  \"Installing theme: :name\": \"Thema downloaden: :name\",\n  \"Extracting theme: :name\": \"Thema uitpakken: :name\",\n  \"Seeding theme: :name\": \"Vullen van het thema: :name\",\n  \"Removing plugin: :name\": \"Plugin verwijderen: :name\",\n  \"Please specify a Plugin name to install.\": \"Voer de naam van een plugin in om te installeren.\",\n  \"Update process complete\": \"Het updateproces is succesvol afgerond.\",\n  \"Package installed successfully\": \"De plugin is succesvol geïnstalleerd.\",\n  \"Check Dependencies\": \"Controleer afhankelijkheden\",\n  \"Install Dependencies\": \"Installeer afhankelijkheden\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Er missen packages die benodigd om het systeem goed te laten draaien.\",\n  \"License Key\": \"Licentie sleutel\",\n  \"How to find your License Key\": \"Waar kan ik mijn licentie sleutel vinden?\",\n  \"The password attribute is required.\": \"Het wachtwoord is verplicht.\",\n  \"The login attribute is required.\": \"De gebruikersnaam is verplicht.\",\n  \"Cannot login user since they are not activated.\": \"Inloggen niet mogelijk. Gebruiker is niet geactiveerd.\",\n  \"Cannot login user since they are banned.\": \"Inloggen niet mogelijk. Gebruiker is verbannen.\",\n  \"Cannot login user since they are suspended.\": \"Inloggen niet mogelijk. Gebruiker is opgeschort.\",\n  \"A user was not found with the given credentials.\": \"Gebruikersnaam en/of wachtwoord is onjuist.\",\n  \"A user was found but the password did not match.\": \"Het wachtwoord voor deze gebruiker komt niet overeen.\",\n  \"User is not logged in\": \"Gebruiker is niet ingelogd.\",\n  \"Register Software\": \"Registreer Software\",\n  \"View the Dashboard\": \"Toon dashboard\",\n  \"Set the Default Dashboard\": \"Beheer het standaard dashboard\",\n  \"Log File\": \"Logboek bestand\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Geen encryptie\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"E-mailinstellingen\",\n  \"Manage email configuration.\": \"Beheer e-mailinstellingen.\",\n  \"Sender Name\": \"Naam afzender\",\n  \"Sender Email\": \"E-mailadres afzender\",\n  \"Mail Method\": \"E-mail methode\",\n  \"SMTP Address\": \"SMTP adres\",\n  \"SMTP Port\": \"SMTP poort\",\n  \"SMTP Encryption Protocol\": \"SMTP encryptie protocol\",\n  \"SMTP Authorization Required\": \"SMTP authenticatie vereist\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Vink deze optie aan indien de SMTP server authenticatie vereist.\",\n  \"Username\": \"Gebruikersnaam\",\n  \"Password\": \"Wachtwoord\",\n  \"Sendmail Path\": \"Pad naar Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Geef hier het volledige pad op naar de Sendmail-applicatie.\",\n  \"Mailgun Domain\": \"Mailgun domein\",\n  \"Please specify the Mailgun domain name.\": \"Geef hier het Mailgun domeinnaam op.\",\n  \"Mailgun Secret\": \"Mailgun secret\",\n  \"Enter your Mailgun API key.\": \"Geef hier de Mailgun API key op.\",\n  \"SES Key\": \"SES key\",\n  \"Enter your SES API key\": \"Voer SES API key in\",\n  \"SES Secret\": \"SES secret\",\n  \"Enter your SES API secret key\": \"Voer SES API secret key in\",\n  \"SES Region\": \"SES regio\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Voer SES regio in (bijv. us-east-1)\",\n  \"Postmark Token\": \"Postmark Token\",\n  \"Enter your Postmark API secret key\": \"Voer Postmark API secret key in\",\n  \"Define administrator roles\": \"Bepaal beheerdersrollen\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Beperk de toegang tot deze site tot alleen beheerders met de volgende rollen.\",\n  \"Group\": \"Groep\",\n  \"Create Group\": \"Groep Maken\",\n  \"Site Group\": \"Site Groep\",\n  \"Site Groups\": \"Site Groepen\",\n  \"Manage Site Groups\": \"Beheer Site Groepen\",\n  \"Group Name\": \"Groep Naam\",\n  \"All Sites\": \"Alle Sites\",\n  \"Manage Backend Preferences\": \"Beheer back-end voorkeuren\",\n  \"Manage Code Editor Preferences\": \"Beheer code editor voorkeuren\",\n  \"Customize Backend Styles\": \"Back-end aanpassen\",\n  \"Mail Templates\": \"E-mail sjablonen\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Wijzig de e-mail sjablonen die verstuurd worden naar gebruikers en beheerders. En beheer e-mail lay-outs.\",\n  \"Mail Branding\": \"E-mail branding\",\n  \"Modify the colors and appearance of mail templates.\": \"Aanpassen van kleuren en weergave van e-mailsjablonen.\",\n  \"Event Log\": \"Gebeurtenissenlogboek\",\n  \"View system log messages with their recorded time and details.\": \"Bekijk systeemberichten met de geregistreerde tijd en detail.\",\n  \"Request Log\": \"Aanvragenlogboek\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Bekijk foutieve of doorverwezen aanvragen zoals 'Pagina niet gevonden (404)'.\",\n  \"Log Settings\": \"Log instellingen\",\n  \"Specify which areas should use logging.\": \"Specifieer welke voor welke onderdelen logging ingeschakeld moet worden.\",\n  \"Test message sent.\": \"Het testbericht is succesvol verzonden.\",\n  \"New Layout\": \"Nieuwe lay-out\",\n  \"New Partial\": \"Nieuw fragment\",\n  \"New Template\": \"Nieuw sjabloon\",\n  \"Template\": \"Sjabloon\",\n  \"Templates\": \"Sjablonen\",\n  \"Layouts\": \"Lay-outs\",\n  \"Partials\": \"Fragmenten\",\n  \"Partial\": \"Fragment\",\n  \"Mail Partials\": \"E-mail fragmenten\",\n  \"Layout\": \"Lay-out\",\n  \"Mail Layouts\": \"E-mail lay-outs\",\n  \"Unique code used to refer to this template\": \"Een unieke code die refereert naar deze lay-out\",\n  \"-- No layout --\": \"-- Geen lay-out --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Platte tekst\",\n  \"Disable automatic inline CSS\": \"Automatische inline CSS uitschakelen\",\n  \"Options\": \"Opties\",\n  \"Subject\": \"Onderwerp\",\n  \"Email message subject\": \"E-mail onderwerp\",\n  \"Description\": \"Omschrijving\",\n  \"Drivers Not Installed\": \"Stuurprogramma's niet geïnstalleerd\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Om deze e-mail methode te gebruiken moet de plugin \\\":plugin\\\" zijn geïnstalleerd.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Gebeurtenis ID\",\n  \"Level\": \"Niveau\",\n  \"Date & Time\": \"Datum & tijd\",\n  \"Message\": \"Bericht\",\n  \"Logging\": \"Loggen\",\n  \"Log Bad Requests\": \"Bijhouden ongeldige verzoeken\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Verzoeken van browsers die aandacht benodigd hebben, zoals bijvoorbeeld 404 fouten.\",\n  \"Log Theme Changes\": \"Bijhouden van thema wijzigingen\",\n  \"When a change is made to the theme using the backend.\": \"Wanneer er een wijziging zijn gemaakt binnen het thema (vanuit de back-end omgeving).\",\n  \"Log System Events\": \"Bijhouden systeemgebeurtenissen\",\n  \"Store system events in the database in addition to the file-based log.\": \"Opslaan van systeemgebeurtenissen in de database als aanvulling op het loggen in het logboekbestand.\",\n  \"Background\": \"Achtergrond\",\n  \"Body background\": \"Body\",\n  \"Content background\": \"Inhoud\",\n  \"Inner content background\": \"Binnenste inhoud\",\n  \"Buttons\": \"Knoppen\",\n  \"Button text color\": \"Knoptekst\",\n  \"Primary button background\": \"Primaire knop\",\n  \"Positive button background\": \"Positieve knop\",\n  \"Negative button background\": \"Negatieve knop\",\n  \"Typography\": \"Typografie\",\n  \"Header color\": \"Header\",\n  \"Headings color\": \"Kopteksten\",\n  \"Text color\": \"Tekst\",\n  \"Link color\": \"Hyperlinks\",\n  \"Footer color\": \"Footer\",\n  \"Borders\": \"Randen\",\n  \"Body border color\": \"Inhoud\",\n  \"Subcopy border color\": \"Voettekst\",\n  \"Table border color\": \"Tabellen\",\n  \"Components\": \"Componenten\",\n  \"Panel background\": \"Paneel achtergrond\",\n  \"Promotion background\": \"Promotie achtergrond\",\n  \"Promotion border color\": \"Promotie randkleur\",\n  \"Customize Mail Appearance\": \"Aanpassen e-mailweergave\",\n  \"Version\": \"Versie\",\n  \"Enabled\": \"Ingeschakeld\",\n  \"Latest\": \"Meest recente versie\",\n  \"Log ID\": \"Log ID\",\n  \"Counter\": \"Aantal\",\n  \"Referers\": \"Verwijzingen\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Dit logboek toont een lijst met potentiële fouten zoals exceptions of debuginformatie, welke voorkomen in de applicatie.\",\n  \"Event\": \"Gebeurtenis\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Dit logboek toont een lijst met pagina aanvragen welke mogelijk aandacht vereisen. Bijvoorbeeld: Een bezoeker opent een CMS pagina welke niet gevonden kan worden, een aantekening wordt gemaakt met statuscode 404.\",\n  \"There were no detected referrers to this URL.\": \"Er waren geen gedetecteerde aanbevelingen voor deze URL.\",\n  \"Request\": \"Verzoek\",\n  \"Event log emptied\": \"Het gebeurtenissenlogboek legen is gelukt.\",\n  \"Empty Event Log\": \"Gebeurtenissenlogboek legen\",\n  \"Emptying Event Log...\": \"Bezig met het gebeurtenissenlogboek legen...\",\n  \"Return to Event Log\": \"Terug naar gebeurtenissenlogboek\",\n  \"Installed\": \"Geïnstalleerd\",\n  \"Primary Site\": \"Primaire site\",\n  \"Refresh Data\": \"Gegevens vernieuwen\",\n  \"Remove Data\": \"Gegevens verwijderen\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Weet je zeker dat je de data van de geselecteerde plugins wilt resetten? De plugins zullen naar hun oorspronkelijke staat worden gebracht.\",\n  \"Reset Plugin Data\": \"Verwijder plugin data\",\n  \"Enable Plugins\": \"Plugin inschakelen\",\n  \"Are you sure you want to :action these plugins?\": \"De volgende actie wordt uitgevoerd voor de geselecteerde plugins: :action\",\n  \"enable\": \"Inschakelen\",\n  \"disable\": \"Uitschakelen\",\n  \"Disable Plugins\": \"Plugin uitschakelen\",\n  \"Select Action...\": \"Selecteer actie...\",\n  \"Data has been removed.\": \"Gegevens zijn verwijderd.\",\n  \"Plugin has been removed from the file system.\": \"Plugin is verwijderd van het bestandssysteem.\",\n  \"search plugins to install...\": \"Zoek plugins om te installeren\",\n  \"Plugin has been disabled by configuration.\": \"Plugin is uitgeschakeld (configuratie).\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin heeft ontbrekende afhankelijkheden of uitgeschakeld door systeem.\",\n  \"search themes to install...\": \"Zoek thema's om te installeren...\",\n  \"Install Theme\": \"Installeer thema\",\n  \"Theme Name\": \"Thema naam\",\n  \"Install Plugin\": \"Installeer plugin\",\n  \"Plugin Name\": \"Plugin naam\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Gebruik bij het invoeren van de naam de unieke code van de plugin. Bijvoorbeeld: RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Gebruik bij het invoeren van de naam de unieke code van het thema. Bijvoorbeeld: RainLab.Vanilla\",\n  \"Select Installation Method\": \"Installatiemethode selecteren\",\n  \"Make a Copy (Recommended)\": \"Kopie maken (aanbevolen)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Maak een kopie van dit thema om het aan te passen en toekomstige updates handmatig te beheren.\",\n  \"Install with Composer\": \"Installeren met Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Breid het thema uit met een \\\"child theme\\\" om toekomstige updates van de maker van het thema te behouden.\",\n  \"Seed Theme Data\": \"Vul themagegevens\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Importeer de blauwdrukbestanden, taalbestanden en database-inhoud voor dit thema, indien van toepassing. Je kunt dit overslaan en het later doen via de frontend thema-instellingen.\",\n  \"Change Status\": \"Status wijzigen\",\n  \"Site Definitions\": \"Site definities\",\n  \"System Updates\": \"Updates & Plugins\",\n  \"Find a Setting...\": \"Vind een Instelling...\",\n  \"Return to System Updates\": \"Terug naar systeemupdates\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Importeer de blauwdrukbestanden, taalbestanden en database-inhoud voor dit thema, indien van toepassing. Je kunt dit overslaan en het later doen via de frontend thema-instellingen.\"\n}"
  },
  {
    "path": "modules/system/lang/pl/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formaty',\n        'quote' => 'Cytat',\n        'code' => 'Widok kodu',\n        'header1' => 'Nagłówek 1',\n        'header2' => 'Nagłówek 2',\n        'header3' => 'Nagłówek 3',\n        'header4' => 'Nagłówek 4',\n        'header5' => 'Nagłówek 5',\n        'header6' => 'Nagłówek 6',\n        'bold' => 'Pogrubienie',\n        'italic' => 'Kursywa',\n        'unorderedlist' => '\"Lista nieuporządkowana',\n        'orderedlist' => 'Uporządkowana lista',\n        'video' => 'Wideo',\n        'image' => 'Obrazek',\n        'link' => 'Link',\n        'horizontalrule' => 'Wstaw linię poziomą',\n        'fullscreen' => 'Pełny ekran',\n        'preview' => 'Podgląd',\n    ],\n\n    'mediamanager' => [\n        'insert_link' => \"Wstaw Link\",\n        'insert_image' => \"Wstaw Obraz\",\n        'insert_video' => \"Wstaw Wideo\",\n        'insert_audio' => \"Wstaw Audio\",\n        'invalid_file_empty_insert' => \"Prosimy wybrać plik do podlinkowania.\",\n        'invalid_file_single_insert' => \"Prosimy wybrać pojedynczy plik.\",\n        'invalid_image_empty_insert' => \"Prosimy wybrać obrazy do wstawienia.\",\n        'invalid_video_empty_insert' => \"Prosimy wybrać wideo do wstawienia.\",\n        'invalid_audio_empty_insert' => \"Prosimy wybrać audio do wstawienia.\",\n    ],\n\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Anuluj',\n    ],\n\n    'datepicker' => [\n        'previousMonth' => 'Poprzedni miesiąc',\n        'nextMonth' => 'Następny miesiąc',\n        'months' => ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'],\n        'weekdays' => ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'],\n        'weekdaysShort' => ['Nie', 'Pn', 'Wt', 'Śr', 'Czw', 'Pt', 'So']\n    ],\n\n    'filter' => [\n        'group' => [\n            'all' => 'wszystkie'\n        ],\n        'dates' => [\n            'all' => 'wszystkie',\n            'filter_button_text' => 'Filtruj',\n            'reset_button_text'  => 'Resetuj',\n            'date_placeholder' => 'Data',\n            'after_placeholder' => 'Po',\n            'before_placeholder' => 'Przed'\n        ]\n    ],\n\n    'eventlog' => [\n        'show_stacktrace' => 'Pokaż stos wywołań',\n        'hide_stacktrace' => 'Ukryj stos wywołań',\n        'tabs' => [\n            'formatted' => 'Sformatowany',\n            'raw' => 'Nieprzetworzony',\n        ],\n        'editor' => [\n            'title' => 'Edytor kodu źródłowego',\n            'description' => 'Twój system operacyjny powinien być skonfigurowany aby nasłuchiwać na jednym z podanych schematów URL.',\n            'openWith' => 'Otwórz za pomocą',\n            'remember_choice' => 'Zapamiętaj wybraną opcję dla tej sesji',\n            'open' => 'Otwórz',\n            'cancel' => 'Anuluj'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/pl/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Getting back to basics',\n  ],\n  'directory' => [\n    'create_fail' => 'Nie można stworzyć katalogu: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Nie można stworzyć pliku: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Nieprawidłowy token',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'System',\n    'menu_label' => 'System',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Różne',\n      'logs' => 'Logi',\n      'mail' => 'Mail',\n      'shop' => 'Sklep',\n      'team' => 'Team',\n      'users' => 'Użytkownicy',\n      'system' => 'System',\n      'social' => 'Społecznościowe',\n      'events' => 'Wydarzenia',\n      'customers' => 'Klienci',\n      'my_settings' => 'Moje Ustawienia',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Motyw',\n    'unnamed' => 'Nienazwany motyw',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Zainstaluj motywy',\n    'installed' => 'Zainstalowane motywy',\n    'no_themes' => 'Brak motywów zainstalowanych z marketu.',\n    'recommended' => 'Polecane',\n    'remove_confirm' => 'Na pewno usunąć ten motyw?',\n  ],\n  'plugin' => [\n    'label' => 'Wtyczka',\n    'unnamed' => 'Wtyczka bez nazwy',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Włącz lub wyłącz',\n    'enable_or_disable_title' => 'Włącz lub wyłącz wtyczki',\n    'install' => 'Zainstaluj wtyczki',\n    'install_products' => 'Zainstaluj produkty',\n    'installed' => 'Zainstalowane wtyczki',\n    'no_plugins' => 'Brak wtyczek zainstalowanych z marketu.',\n    'recommended' => 'Polecane',\n    'remove' => 'Usuń',\n    'refresh' => 'Odśwież',\n    'disabled_label' => 'Wyłączona',\n    'disabled_help' => 'Wyłączone wtyczki są ignorowane przez aplikację.',\n    'frozen_label' => 'Zablokuj zaktualizacje',\n    'frozen_help' => 'Zamrożone wtyczki będą pomijane w procesie aktualizacji.',\n    'selected_amount' => 'Zaznaczono wtyczek: :amount',\n    'remove_confirm' => 'Czy na pewno?',\n    'remove_success' => 'Pomyślnie usunięto wtyczki z systemu.',\n    'refresh_success' => 'Pomyślnie odświeżono wtyczki przez system.',\n    'disable_confirm' => 'Czy na pewno?',\n    'disable_success' => 'Pomyślnie wyłączono wtyczki.',\n    'enable_success' => 'Pomyślnie włączono wtyczki.',\n    'plugin_label' => 'Wtyczka',\n    'check_yes' => 'Tak',\n    'check_no' => 'Nie',\n    'unfrozen' => 'Aktualizacje włączone',\n    'freeze' => 'Wyłączyć aktualizacje dla wybranych wtyczek',\n    'unfreeze' => 'Włączyć aktualizacje dla wybranych wtyczek',\n    'freeze_label' => 'Wyłącz aktualizacje',\n    'unfreeze_label' => 'Włącz aktualizacje',\n    'freeze_success' => 'Pomyślnie wyłączono aktualizacje dla wybranych wtyczek.',\n    'unfreeze_success' => 'Pomyślnie włączono aktualizacje dla wybranych wtyczek.',\n  ],\n  'project' => [\n    'attach' => 'Podłącz projekt',\n    'detach' => 'Odłącz projekt',\n    'none' => 'Żaden',\n    'id' => [\n      'missing' => 'Proszę podać ID projektu do użycia.',\n    ],\n    'detach_confirm' => 'Czy na pewno chcesz odłaczyć ten projekt?',\n    'unbind_success' => 'Projekt został pomyślnie odłączony.',\n  ],\n  'settings' => [\n    'search' => 'Szukaj',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Połączenie SSL wymagane',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikalna nazwa odwołująca się do tego szablonu',\n    'test_send' => 'Wyślij wiadomość testową',\n    'test_confirm' => 'Wyślij wiadomość testową do :email. Kontynuować?',\n    'creating' => 'Tworzenie szablonu...',\n    'creating_layout' => 'Tworzenie układu...',\n    'saving' => 'Zapisywanie szablonu...',\n    'saving_layout' => 'Zapisywanie układu...',\n    'delete_confirm' => 'Usunąć ten szablon?',\n    'delete_layout_confirm' => 'Usunąć ten układ?',\n    'deleting' => 'Usuwanie szablonu...',\n    'deleting_layout' => 'Usuwanie układu...',\n    'sending' => 'Wysyłanie testowej wiadomości...',\n    'return' => 'Wróć do listy szablonów',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Nagłówek',\n      'paragraph' => 'To jest paragraf wypełniony Lorem Ipsum oraz linkiem. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Pozycja',\n        'description' => 'Opis',\n        'price' => 'Cena',\n        'centered' => 'Wyśrodkowane',\n        'right_aligned' => 'Do prawej',\n      ],\n      'buttons' => [\n        'primary' => 'Główny przycisk',\n        'positive' => 'Przycisk potwierdzenia',\n        'negative' => 'Przycisk odrzucenia',\n      ],\n      'panel' => 'Czyż ten panel nie jest wspaniały?',\n      'more' => 'Trochę dodatkowego tekstu',\n      'promotion' => 'Kod kuponu: OCTOBER',\n      'subcopy' => 'To jest dopisek do wiadomości',\n      'thanks' => 'Dziękujemy',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Wtyczka nie została znaleziona',\n    'core_build' => 'Aktualna wersja :build',\n    'core_build_help' => 'Jest dostępna nowa wersja systemu.',\n    'themes' => 'Motywy',\n    'plugin_version_none' => 'Nowa wtyczka',\n    'plugin_current_version' => 'Aktualna wersja',\n    'theme_new_install' => 'Zainstaluj nowy motyw.',\n    'theme_extracting' => 'Rozpakowywanie motywu: :name',\n    'update_label' => 'Aktualizuj',\n    'update_loading' => 'Wczytywanie dostępnych aktualizacji...',\n    'force_label' => 'Wymuś aktualizację',\n    'found' => [\n      'label' => 'Znaleziono nowe aktualizacje!',\n      'help' => 'Kliknij Aktualizuj, aby rozpocząć proces aktualizacji.',\n    ],\n    'none' => [\n      'label' => 'Brak aktualizacji',\n      'help' => 'Brak nowych aktualizacji.',\n    ],\n    'important_action' => [\n      'empty' => 'Wybierz działanie',\n      'confirm' => 'Zatwierdź aktualizację',\n      'skip' => 'Pomiń tę wtyczkę (tylko teraz)',\n      'ignore' => 'Pomiń tę wtyczkę (zawsze)',\n    ],\n    'important_action_required' => 'Wymagane działanie',\n    'important_view_guide' => 'Zobacz instrukcje aktualizacji',\n    'important_alert_text' => 'Niektóre aktualizacje wymagają twojej uwagi.',\n    'details_title' => 'Szczegóły wtyczki',\n    'details_view_homepage' => 'Zobacz stronę domową',\n    'details_current_version' => 'Aktualna wersja',\n    'details_author' => 'Autor',\n  ],\n  'server' => [\n    'connect_error' => 'Błąd połączenia z serwerem.',\n    'response_not_found' => 'Serwer aktualizacji nie został odnaleziony.',\n    'response_invalid' => 'Nieprawidłowa odpowiedź serwera.',\n    'response_empty' => 'Pusta odpowiedź serwera.',\n    'file_error' => 'Serwerowi nie udało się dostarczyć pakietu.',\n    'file_corrupt' => 'Plik pobrany z serwera jest uszkodzony.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Class :class must define property $:property used by :behavior behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Plik konfiguracyjny :file nie został znaleziony w :location.',\n    'required' => 'Konfiguracja użyta w :location musi definiować wartość \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Rozpakowywanie pliku \\':file\\' nie powiodło się.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Opróźnij log żądań',\n    'empty_loading' => 'Opróżnianie logu żądań...',\n    'empty_success' => 'Prawidłowo opróżniono log żądań.',\n    'return_link' => 'Powrót do logu żądań',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'System',\n    'manage_system_settings' => 'Zarządzaj ustawienia systemu',\n    'manage_software_updates' => 'Zarządzaj aktualizacjami – software',\n    'access_logs' => 'Przeglądaj logi systemowe',\n    'manage_mail_templates' => 'Zarządzaj szablonami wiadomości',\n    'manage_mail_settings' => 'Zarządzaj ustawieniami wiadomości',\n    'manage_other_administrators' => 'Zarządzaj innymi administratorami',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Wybrano nieprawidłową ścieżkę pliku: \\':path\\'.',\n    'folder_size_items' => 'element(y)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/pl/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => ':attribute musi zostać zaakceptowany.',\n    'active_url'           => ':attribute jest nieprawidłowym adresem URL.',\n    'after'                => ':attribute musi być datą późniejszą od :date.',\n    'after_or_equal'       => ':attribute musi być datą późniejszą lub równą :date.',\n    'alpha'                => ':attribute może zawierać jedynie litery.',\n    'alpha_dash'           => ':attribute może zawierać jedynie litery, cyfry i myślniki.',\n    'alpha_num'            => ':attribute może zawierać jedynie litery i cyfry.',\n    'array'                => ':attribute musi być tablicą.',\n    'before'               => ':attribute musi być datą wcześniejszą od :date.',\n    'before_or_equal'      => ':attribute musi być datą wcześniejszą lub równą :date.',\n    'between'              => [\n        'numeric' => ':attribute musi zawierać się w granicach :min - :max.',\n        'file'    => ':attribute musi zawierać się w granicach :min - :max kilobajtów.',\n        'string'  => ':attribute musi zawierać się w granicach :min - :max znaków.',\n        'array'   => ':attribute musi składać się z :min - :max elementów.',\n    ],\n    'boolean'              => ':attribute musi mieć wartość prawda albo fałsz',\n    'confirmed'            => 'Potwierdzenie :attribute nie zgadza się.',\n    'date'                 => ':attribute nie jest prawidłową datą.',\n    'date_equals'          => ':attribute musi być datą równą :date.',\n    'date_format'          => ':attribute nie jest w formacie :format.',\n    'different'            => ':attribute oraz :other muszą się różnić.',\n    'digits'               => ':attribute musi składać się z :digits cyfr.',\n    'digits_between'       => ':attribute musi mieć od :min do :max cyfr.',\n    'dimensions'           => ':attribute ma nieprawidłowe wymiary obrazu.',\n    'distinct'             => ':attribute ma zduplikowaną wartość.',\n    'email'                => 'Format :attribute jest nieprawidłowy.',\n    'ends_with'            => ':attribute musi kończyć się jednym z następujących: :values.',\n    'exists'               => 'Zaznaczony :attribute jest nieprawidłowy.',\n    'file'                 => ':attribute musi być plikiem.',\n    'filled'               => 'Pole :attribute jest wymagane.',\n    'gt'                   => [\n        'numeric' => ':attribute musi być większe niż :value.',\n        'file'    => ':attribute musi być większe niż :value kilobajtów.',\n        'string'  => ':attribute musi mieć więcej niż :value znaków.',\n        'array'   => ':attribute musi mieć więcej niż :value elementów.',\n    ],\n    'gte'                  => [\n        'numeric' => ':attribute musi być większe lub równe :value.',\n        'file'    => ':attribute musi być większe lub równe :value kilobajtów.',\n        'string'  => ':attribute musi być dłuższe lub równe :value znaków.',\n        'array'   => ':attribute musi mieć przynajmniej :value elementów.',\n    ],\n    'image'                => ':attribute musi być obrazkiem.',\n    'in'                   => 'Zaznaczony :attribute jest nieprawidłowy.',\n    'in_array'             => ':attribute nie istnieje w :other.',\n    'integer'              => ':attribute musi być liczbą całkowitą.',\n    'ip'                   => ':attribute musi być prawidłowym adresem IP.',\n    'ipv4'                 => ':attribute musi być prawidłowym adresem IPv4.',\n    'ipv6'                 => ':attribute musi być prawidłowym adresem IPv6.',\n    'json'                 => ':attribute musi być prawidłowym ciągiem JSON.',\n    'lt'                   => [\n        'numeric' => ':attribute musi być mniejsze niż :value.',\n        'file'    => ':attribute musi być mniejsze niż :value kilobajtów.',\n        'string'  => ':attribute musi być krótsze niż :value znaków.',\n        'array'   => ':attribute musi mieć mniej niż :value items.',\n    ],\n    'lte'                  => [\n        'numeric' => ':attribute musi być mniejsze lub równe :value.',\n        'file'    => ':attribute musi być mniejsze lub równe :value kilobajtów.',\n        'string'  => ':attribute musi być krótsze lub równe :value znaków.',\n        'array'   => ':attribute nie może mieć więcej niż :value elementów.',\n    ],\n    'max'                  => [\n        'numeric' => ':attribute nie może być większy niż :max.',\n        'file'    => ':attribute nie może być większy niż :max kilobajtów.',\n        'string'  => ':attribute nie może być dłuższy niż :max znaków.',\n        'array'   => ':attribute nie może mieć więcej niż :max elementów.',\n    ],\n    'mimes'                => ':attribute musi być plikiem typu :values.',\n    'mimetypes'            => ':attribute musi być plikiem typu :values.',\n    'min'                  => [\n        'numeric' => ':attribute musi być nie mniejszy od :min.',\n        'file'    => ':attribute musi mieć przynajmniej :min kilobajtów.',\n        'string'  => ':attribute musi mieć przynajmniej :min znaków.',\n        'array'   => ':attribute musi mieć przynajmniej :min elementów.',\n    ],\n    'not_in'               => 'Zaznaczony :attribute jest nieprawidłowy.',\n    'not_regex'            => 'Format :attribute jest nieprawidłowy.',\n    'numeric'              => ':attribute musi być liczbą.',\n    'present'              => ':attribute musi być obecne.',\n    'regex'                => 'Format :attribute jest nieprawidłowy.',\n    'required'             => 'Pole :attribute jest wymagane.',\n    'required_if'          => 'Pole :attribute jest wymagane gdy :other jest :value.',\n    'required_unless'      => 'Pole :attribute jest wymagane, chyba że :other jest w :values.',\n    'required_with'        => 'Pole :attribute jest wymagane gdy :values jest obecny.',\n    'required_with_all'    => 'Pole :attribute jest wymagane gdy :values jest obecny.',\n    'required_without'     => 'Pole :attribute jest wymagane gdy :values nie jest obecny.',\n    'required_without_all' => 'Pole :attribute jest wymagane gdy żadne z :values nie są obecne.',\n    'same'                 => 'Pole :attribute i :other muszą się zgadzać.',\n    'size'                 => [\n        'numeric' => ':attribute musi mieć :size.',\n        'file'    => ':attribute musi mieć :size kilobajtów.',\n        'string'  => ':attribute musi mieć :size znaków.',\n        'array'   => ':attribute musi zawierać :size elementów.',\n    ],\n    'starts_with'          => ':attribute musi zaczynać się jednym z następujących: :values.',\n    'string'               => ':attribute musi być ciągiem znaków.',\n    'timezone'             => ':attribute musi być prawidłową strefą czasową.',\n    'unique'               => 'Taki :attribute już występuje.',\n    'uploaded'             => 'Nie udało się przesłać :attribute.',\n    'url'                  => 'Format :attribute jest nieprawidłowy.',\n    'uuid'                 => ':attribute musi być prawidłowym UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/pl.json",
    "content": "{\n  \"Check For Updates\": \"Sprawdź aktualizacje\",\n  \"Install Packages\": \"Zainstaluj pakiety\",\n  \"Manage Themes\": \"Zarządzaj motywami\",\n  \"Manage Plugins\": \"Zarządzaj Wtyczkami\",\n  \"Project\": \"Projekt\",\n  \"Owner\": \"Właściciel\",\n  \"Plugins\": \"Wtyczki\",\n  \"Recommended\": \"Recommended\",\n  \"Disabled\": \"Wyłączony\",\n  \"Current Build\": \"Aktualna wersja\",\n  \"Updates Available\": \"Dostępne aktualizacje\",\n  \"Up to Date\": \"Aktualny\",\n  \"Latest Build\": \"Najnowsza kompilacja\",\n  \"View Changelog\": \"Przeglądać zmiany rejestru\",\n  \"Software Updates\": \"Aktualizacje\",\n  \"Update the system modules and plugins.\": \"Aktualizacja systemu, zarządzaj i instaluj wtyczki oraz szablony.\",\n  \"General\": \"Ogólne\",\n  \"Mail\": \"Poczta\",\n  \"Utilities\": \"Narzędzia\",\n  \"Settings\": \"Ustawienia\",\n  \"Show All Settings\": \"Pokaż wszystkie ustawienia\",\n  \"Unable to find the specified settings.\": \"Nie można znaleźć określonych ustawień.\",\n  \"The settings page is missing a Model definition.\": \"Na stronie ustawień brakuje definicji modelu.\",\n  \":name settings updated\": \"Ustawienia dla :name zostały pomyślnie zaktualizowane.\",\n  \"Return to System Settings\": \"Wróc do ustawień systemu\",\n  \"Search Settings...\": \"Znajdź ustawienie...\",\n  \"Disable mail branding CSS\": \"Wyłącz CSS oznakowania poczty\",\n  \"Manage Sites\": \"Zarządzaj witrynami\",\n  \"Manage the websites available for this application.\": \"Zarządzaj stronami internetowymi dostępnymi dla tej aplikacji.\",\n  \"Marketplace\": \"Rynek\",\n  \"There is no documentation provided.\": \"Nie dostarczono dokumentacji.\",\n  \"Documentation\": \"Dokumentacja\",\n  \"Upgrade Guide\": \"Podręcznik Aktualizacji\",\n  \"License\": \"Licencja\",\n  \"Attach to Project\": \"Podłącz do Projektu\",\n  \"Manage Updates\": \"Zarządzaj Aktualizacjami\",\n  \"Software Update\": \"Aktualizacje\",\n  \"Return to Software Updates\": \"Wróć do aktualizacji systemu\",\n  \"Try Again\": \"Spróbuj ponownie\",\n  \"Unpacking application files\": \"Rozpakowywanie plików aplikacji\",\n  \"Update Failed\": \"Aktualizacja nie powiodła się.\",\n  \"Unpacking plugin: :name\": \"Rozpakowywanie wtyczki: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Lokacja główna jest używana domyślnie i nie można jej usunąć.\",\n  \"Disabled sites are not shown on the frontend.\": \"Wyłączone witryny nie są wyświetlane w interfejsie użytkownika.\",\n  \"Enabled in the Admin Panel\": \"Włączone w panelu administracyjnym\",\n  \"Configuration\": \"Konfiguracja\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Użyj tego, jeśli chcesz, aby witryna była włączona w panelu administracyjnym.\",\n  \"Install\": \"zainstalować\",\n  \"Sync Project\": \"Synchronizuj projekt\",\n  \"Name\": \"Nazwa\",\n  \"Unique Code\": \"Unikalny kod\",\n  \"Theme\": \"Motyw\",\n  \"Sites\": \"Witryny\",\n  \"Create Site\": \"Utwórz witrynę\",\n  \"Base URL\": \"Podstawowy adres URL\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Bieżąca wartość domyślna: :value\",\n  \"Locale\": \"Lokalny\",\n  \"Timezone\": \"Strefa czasowa\",\n  \"Custom application URL\": \"Niestandardowy adres URL aplikacji\",\n  \"Override the application URL when this site is active.\": \"Zastąp adres URL aplikacji, gdy ta witryna jest aktywna.\",\n  \"Use a CMS route prefix\": \"Użyj prefiksu trasy CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Prefiks może identyfikować tę witrynę podczas korzystania z udostępnionej nazwy hosta.\",\n  \"Define matching hostnames\": \"Zdefiniuj pasujące nazwy hostów\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Określ nazwy domen i wzorce, których należy użyć do obsługi tej witryny.\",\n  \"Display a style for this site\": \"Wyświetl kolor dla tej witryny\",\n  \"To help identify this site, display a color in the admin panel.\": \"Aby pomóc zidentyfikować tę witrynę, wyświetl kolor w panelu administracyjnym.\",\n  \"Save\": \"Ratować\",\n  \"Save and Close\": \"Zapisz i zamknij\",\n  \"Use Default\": \"Zastosowanie domyślne\",\n  \"Use Custom\": \"Użyj niestandardowego\",\n  \"Specify a custom locale code.\": \"Określ niestandardowy kod ustawień regionalnych.\",\n  \"Failed\": \"Przegrany\",\n  \"or\": \"lub\",\n  \"Code\": \"Kod\",\n  \"October CMS Marketplace\": \"Październikowy rynek CMS\",\n  \"Visit the :link to add some.\": \"Projekt nie zawiera wtyczek ani motywów. Odwiedź :link, aby dodać kilka.\",\n  \"Buy Now\": \"Kup Teraz\",\n  \"Updating package manager\": \"Updating package manager\",\n  \"Updating application files\": \"Pobieranie plików aplikacji\",\n  \"Setting build number\": \"Setting build number\",\n  \"Finishing update process\": \"Zakończenie procesu aktualizacji\",\n  \"Installing plugin: :name\": \"Pobieranie wtyczki: :name\",\n  \"Finishing installation process\": \"Proces instalacji prawie zakończony.\",\n  \"Removing theme: :name\": \"Removing theme: :name\",\n  \"Please specify a Theme name to install.\": \"Proszę podać nazwę Motywu do zainstalowania.\",\n  \"Installing theme: :name\": \"Pobieranie nowego motywu: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Removing plugin: :name\",\n  \"Please specify a Plugin name to install.\": \"Proszę podać nazwę Wtyczki do zainstalowania.\",\n  \"Update process complete\": \"Proces aktualizacji został pomyślnie zakończony.\",\n  \"Package installed successfully\": \"Wtyczka została zainstalowana pomyślnie.\",\n  \"Check Dependencies\": \"Check Dependencies\",\n  \"Install Dependencies\": \"Install Dependencies\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"There are missing dependencies needed for the system to run correctly.\",\n  \"License Key\": \"License Key\",\n  \"How to find your License Key\": \"How to find your License Key\",\n  \"The password attribute is required.\": \"The password attribute is required.\",\n  \"The login attribute is required.\": \"The login attribute is required.\",\n  \"Cannot login user since they are not activated.\": \"Cannot login user since they are not activated.\",\n  \"Cannot login user since they are banned.\": \"Cannot login user since they are banned.\",\n  \"Cannot login user since they are suspended.\": \"Cannot login user since they are suspended.\",\n  \"A user was not found with the given credentials.\": \"A user was not found with the given credentials.\",\n  \"A user was found but the password did not match.\": \"A user was found but the password did not match.\",\n  \"User is not logged in\": \"User is not logged in\",\n  \"Register Software\": \"Register Software\",\n  \"View the Dashboard\": \"Zobacz kokpit\",\n  \"Set the Default Dashboard\": \"Set the Default Dashboard\",\n  \"Log File\": \"Plik logów\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Bez szyfrowania\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Ustawienia wiadomości\",\n  \"Manage email configuration.\": \"Zarządzaj ustawieniami email.\",\n  \"Sender Name\": \"Imię nadawcy\",\n  \"Sender Email\": \"Email nadawcy\",\n  \"Mail Method\": \"Metoda wiadomości\",\n  \"SMTP Address\": \"Adres serwera SMTP\",\n  \"SMTP Port\": \"Port SMTP\",\n  \"SMTP Encryption Protocol\": \"Protokół szyfrowania SMTP\",\n  \"SMTP Authorization Required\": \"Autoryzacja SMTP wymagana\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Zaznacz to pole jeżeli Twój serwer SMTP wymaga autoryzacji.\",\n  \"Username\": \"Użytkownik\",\n  \"Password\": \"Hasło\",\n  \"Sendmail Path\": \"Ścieżka Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Proszę podać ścieżkę programu sendmail.\",\n  \"Mailgun Domain\": \"Domena Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Proszę podać nazwę domeny Mailgun.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Podaj swój klucz API Mailgun.\",\n  \"SES Key\": \"SES key\",\n  \"Enter your SES API key\": \"Podaj swój klucz API SES\",\n  \"SES Secret\": \"SES secret\",\n  \"Enter your SES API secret key\": \"Podaj swój sekretny klucz API SES\",\n  \"SES Region\": \"Region SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Podaj swój region SES (e.g. us-east-1)\",\n  \"Postmark Token\": \"Postmark Token\",\n  \"Enter your Postmark API secret key\": \"Enter your Postmark API secret key\",\n  \"Define administrator roles\": \"Define administrator roles\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restrict access to this site to only administrator with the following roles.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"All Sites\",\n  \"Manage Backend Preferences\": \"Zarządzaj ustawieniami backend\",\n  \"Manage Code Editor Preferences\": \"Zarządzaj ustawieniami edytora kodu\",\n  \"Customize Backend Styles\": \"Personalizuj zaplecze\",\n  \"Mail Templates\": \"Szablony wiadomości email\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modyfikuj szablony wiadomości wysyłanych do użytkowników, administratorów. Zarządzaj układami wiadomości.\",\n  \"Mail Branding\": \"Branding wiadomości email\",\n  \"Modify the colors and appearance of mail templates.\": \"Modyfikuj kolory i wygląd szablonów wiadomości emails.\",\n  \"Event Log\": \"Dziennik zdarzeń\",\n  \"View system log messages with their recorded time and details.\": \"Zobacz wiadomości logów systemu wraz z ich zarejestrowanym czasem oraz szczegółami.\",\n  \"Request Log\": \"Log żądań\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Zobacz złe lub przekierowane żądania, takie jak Strona nie została odnaleziona (404).\",\n  \"Log Settings\": \"Ustawienia logowania\",\n  \"Specify which areas should use logging.\": \"Skonfiguruj logowane wydarzenia\",\n  \"Test message sent.\": \"Wiadomość testowa została wysłana pomyślnie.\",\n  \"New Layout\": \"Nowy Układ\",\n  \"New Partial\": \"Nowy Fragment\",\n  \"New Template\": \"Nowy Szablon\",\n  \"Template\": \"Szablon\",\n  \"Templates\": \"Szablony\",\n  \"Layouts\": \"Układy\",\n  \"Partials\": \"Fragmenty\",\n  \"Partial\": \"Fragment\",\n  \"Mail Partials\": \"Fragmenty wiadomości\",\n  \"Layout\": \"Układ\",\n  \"Mail Layouts\": \"Układy wiadomości\",\n  \"Unique code used to refer to this template\": \"Unikalny kod\",\n  \"-- No layout --\": \"-- Brak układu --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Plaintext\",\n  \"Disable automatic inline CSS\": \"Disable automatic inline CSS\",\n  \"Options\": \"Options\",\n  \"Subject\": \"Temat\",\n  \"Email message subject\": \"Temat wiadomości\",\n  \"Description\": \"Opis\",\n  \"Drivers Not Installed\": \"Nie zainstalowano sterowników\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Ta opcja wysyłki wiadomości wymaga zainstalowania wtyczki \\\":plugin\\\".\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID Zdarzenia\",\n  \"Level\": \"Poziom\",\n  \"Date & Time\": \"Data & Czas\",\n  \"Message\": \"Wiadomośc\",\n  \"Logging\": \"Logowanie\",\n  \"Log Bad Requests\": \"Loguj nieprawidłowe żądania\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Żadania przeglądarek, które mogą wymagać uwagi (na z odpowiedzią 404 Nie znaleziono)\",\n  \"Log Theme Changes\": \"Loguj zmiany motywu\",\n  \"When a change is made to the theme using the backend.\": \"Loguje zmiany w motywie dokonane przez sekcję CMS.\",\n  \"Log System Events\": \"Loguj wydarzenia systemowe\",\n  \"Store system events in the database in addition to the file-based log.\": \"Zapisuj do bazy danych (oprócz zapisywania do pliku)\",\n  \"Background\": \"Tło\",\n  \"Body background\": \"Główne tło\",\n  \"Content background\": \"Tło treści\",\n  \"Inner content background\": \"Wewnętrzne tło treści\",\n  \"Buttons\": \"Przyciski\",\n  \"Button text color\": \"Kolor tekstu przycisków\",\n  \"Primary button background\": \"Kolor tła głównego przycisku\",\n  \"Positive button background\": \"Kolor tła pozytywnego przycisku\",\n  \"Negative button background\": \"Kolor tła negatywnego przycisku\",\n  \"Typography\": \"Typografia\",\n  \"Header color\": \"Kolor górnego nagłówka\",\n  \"Headings color\": \"Kolor nagłówków\",\n  \"Text color\": \"Kolor tekstu\",\n  \"Link color\": \"Kolor linków\",\n  \"Footer color\": \"Kolor stopki\",\n  \"Borders\": \"Ramki\",\n  \"Body border color\": \"Kolor głównej ramki\",\n  \"Subcopy border color\": \"Kolor ramki dopiska\",\n  \"Table border color\": \"Kolor ramki tabeli\",\n  \"Components\": \"Komponenty\",\n  \"Panel background\": \"Kolor panela\",\n  \"Promotion background\": \"Tło promocji\",\n  \"Promotion border color\": \"Kolor ramki promocji\",\n  \"Customize Mail Appearance\": \"Modifykuj wygląd wiadomości\",\n  \"Version\": \"Wersja\",\n  \"Enabled\": \"Wtyczka Włączona\",\n  \"Latest\": \"Latest\",\n  \"Log ID\": \"Log ID\",\n  \"Counter\": \"Licznik\",\n  \"Referers\": \"Odsyłający\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Ten log wyświetla listę potencjalnych błędów, które mogły wystąpić w aplikacji, takich jak wyjątki oraz informacje debugowania.\",\n  \"Event\": \"Zdarzenie\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Ten log wyświetla listę żądań przeglądarki, które mogą wymagać Twojej uwagi. Dla przykładu, jeżeli odwiedzający otworzy stronę CMS, której nie można odnaleźć, rekord zostanie stworzony z kodem błędu 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Żądanie\",\n  \"Event log emptied\": \"Prawidłowo opróżniono dziennik zdarzeń.\",\n  \"Empty Event Log\": \"Opróżnij dziennik zdarzeń\",\n  \"Emptying Event Log...\": \"Opróżnianie dziennika zdarzeń...\",\n  \"Return to Event Log\": \"Powrót do dziennika zdarzeń\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Czy na pewno?\",\n  \"Reset Plugin Data\": \"Zresetuj dane wtyczki\",\n  \"Enable Plugins\": \"Włącz Wtyczki\",\n  \"Are you sure you want to :action these plugins?\": \"Czy na pewno chcesz :action ?\",\n  \"enable\": \"włączyć wybrane wtyczki\",\n  \"disable\": \"wyłączyć wybrane wtyczki\",\n  \"Disable Plugins\": \"Wyłącz Wtyczki\",\n  \"Select Action...\": \"Wybierz Akcję...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Wtyczki zostały usunięte z systemu plików.\",\n  \"search plugins to install...\": \"szukaj wtyczek do instalacji...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"szukaj motywów do instalacji...\",\n  \"Install Theme\": \"Zainstaluj Motyw\",\n  \"Theme Name\": \"Nazwa motywu\",\n  \"Install Plugin\": \"Zainstaluj Wtyczkę\",\n  \"Plugin Name\": \"Nazwa Wtyczki\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Nazwij wtyczkę unikalny kodem, np. RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Nazwij motyw unikalnym kodem, na przykład: RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\",\n  \"System Updates\": \"Aktualizacje\",\n  \"Find a Setting...\": \"Znajdź ustawienie...\",\n  \"Return to System Updates\": \"Wróć do aktualizacji systemu\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\"\n}"
  },
  {
    "path": "modules/system/lang/pt-br/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatando',\n        'quote' => 'Citação',\n        'code' => 'Código',\n        'header1' => 'Cabeçalho 1',\n        'header2' => 'Cabeçalho 2',\n        'header3' => 'Cabeçalho 3',\n        'header4' => 'Cabeçalho 4',\n        'header5' => 'Cabeçalho 5',\n        'header6' => 'Cabeçalho 6',\n        'bold' => 'Negrito',\n        'italic' => 'Itálico',\n        'unorderedlist' => 'Lista não ordenada',\n        'orderedlist' => 'Lista ordenada',\n        'video' => 'Vídeo',\n        'image' => 'Imagem',\n        'link' => 'Link',\n        'horizontalrule' => 'Inserir linha horizontal',\n        'fullscreen' => 'Tela cheia',\n        'preview' => 'Visualizar',\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Inserir link\",\n        'insert_image' => \"Inserir imagem\",\n        'insert_video' => \"Inserir vídeo\",\n        'insert_audio' => \"Inserir áudio\",\n        'invalid_file_empty_insert' => \"Por favor, selecione o arquivo para criar o link.\",\n        'invalid_file_single_insert' => \"Por favor, selecione apenas um arquivo.\",\n        'invalid_image_empty_insert' => \"Por favor, selecione as imagens que deseja inserir.\",\n        'invalid_video_empty_insert' => \"Por favor, selecione os vídeos que deseja inserir.\",\n        'invalid_audio_empty_insert' => \"Por favor, selecione os áudios que deseja inserir.\",\n    ],\n    'alert' => [\n        'error' => 'Erro',\n        'confirm' => 'Confirmar',\n        'dismiss' => 'Dispensar',\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Cancelar',\n        'widget_remove_confirm' => 'Remover este widget?',\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Mês anterior',\n        'nextMonth' => 'Próximo mês',\n        'months' => ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n        'weekdays' => ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'],\n        'weekdaysShort' => ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab']\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'todos'\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Aplicar',\n            'clear_button_text'  => 'Limpar'\n        ],\n        'dates' => [\n            'all' => 'todas',\n            'filter_button_text' => 'Filtro',\n            'reset_button_text'  => 'Reiniciar',\n            'date_placeholder' => 'Data',\n            'after_placeholder' => 'Após',\n            'before_placeholder' => 'Antes'\n        ],\n        'numbers' => [\n            'all' => 'todas',\n            'filter_button_text' => 'Filtar',\n            'reset_button_text'  => 'Reiniciar',\n            'min_placeholder' => 'Min',\n            'max_placeholder' => 'Max'\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Exibir o rastreamento',\n        'hide_stacktrace' => 'Ocultar o rastreamento',\n        'tabs' => [\n            'formatted' => 'Formatado',\n            'raw' => 'Bruto',\n        ],\n        'editor' => [\n            'title' => 'Editor de código fonte',\n            'description' => 'Seu sistema operacional deve ser configurado para ouvir um desses esquemas de URL.',\n            'openWith' => 'Abrir com',\n            'remember_choice' => 'Lembrar a opção selecionada nesta sessão',\n            'open' => 'Abrir',\n            'cancel' => 'Cancelar'\n        ]\n    ],\n    'upload' => [\n        'max_files' => 'Você não pode enviar mais arquivos.',\n        'invalid_file_type' => 'Você não pode carregar arquivos deste tipo.',\n        'file_too_big' => 'O arquivo é muito grande ({{filesize}}MB). Tamanho máximo do arquivo: {{maxFilesize}}MB.',\n        'response_error' => 'O servidor respondeu com o código {{statusCode}}.',\n        'remove_file' => 'Remover arquivo',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/pt-br/lang.php",
    "content": "<?php return [\n  'installer' => [\n    'app_config_section' => 'Configuração da aplicaçao',\n    'license_section' => 'Chave de licença',\n    'dependencies_section' => 'Instalando dependências',\n    'demo_section' => 'Conteúdo de demonstração',\n    'locale_select_label' => 'Selecionar idioma',\n    'locale_select_error' => 'Código do idioma :code é inválido, tente novamente',\n    'app_url_label' => 'URL da aplicação',\n    'backend_uri_label' => 'URI do painel',\n    'backend_uri_comment' => 'Para proteger sua aplicaçao, use um endereço personalizado para acessar o painel de administração.',\n    'license_key_label' => 'Chave de licença',\n    'license_key_comment' => 'Digite uma chave de licença válida para continuar.',\n    'license_thanks_comment' => 'Obrigado por ser cliente do October CMS!',\n    'license_expired_comment' => 'A licença não foi paga ou expirou. Visite octobercms.com para obter uma licença.',\n    'too_many_failures_label' => 'Muitas tentativas falhadas',\n    'non_interactive_label' => 'Modo não interativo detectado',\n    'non_interactive_comment' => 'Se você vir este erro imediatamente, use estes comandos não interativos.',\n    'install_failed_label' => 'Falha na instalação',\n    'install_failed_comment' => 'Por favor, tente executar estes comandos manualmente.',\n    'database_engine_label' => 'Motor de Banco de Dados',\n    'database_host_label' => 'Host do banco de dados',\n    'database_host_comment' => 'Nome do host para a conexão do banco de dados.',\n    'database_port_label' => 'Porta do banco de dados',\n    'database_port_comment' => '(Opcional) Uma porta para a conexão.',\n    'database_name_label' => 'Nome do banco de dados',\n    'database_name_comment' => 'Especifique o nome do banco de dados a ser usado.',\n    'database_login_label' => 'Login do banco de dados',\n    'database_login_comment' => 'Usuário com privilégios de criação de banco de dados.',\n    'database_pass_label' => 'Senha do banco de dados',\n    'database_pass_comment' => 'Senha para o usuário especificado.',\n    'database_path_label' => 'Caminho do banco de dados',\n    'database_path_comment' => 'Para armazenamento baseado em arquivo, insira um caminho relativo ao diretório raiz do aplicativo.',\n    'migrate_database_comment' => 'Por favor, migre o banco de dados com o seguinte comando',\n    'visit_backend_comment' => 'Então, abra a área de administração nesta URL',\n    'open_configurator_comment' => 'Abra a aplicação em seu navegador',\n    'install_demo_label' => 'Instalar o tema de demonstração e conteúdo? (Recomendado)',\n  ],\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Voltando ao básico',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'ca' => 'Català',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'fi' => 'Suomi',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'th' => 'ไทย',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n    'vn' => 'Tiếng việt',\n  ],\n  'directory' => [\n    'create_fail' => 'Não é possível criar o diretório: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Não é possível criar o arquivo: :name',\n  ],\n  'combiner' => [],\n  'resizer' => [],\n  'system' => [\n    'name' => 'Sistema',\n    'menu_label' => 'Sistema',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Diversos',\n      'logs' => 'Registros',\n      'mail' => 'E-mail',\n      'shop' => 'Loja ',\n      'team' => 'Equipe',\n      'users' => 'Usuários',\n      'system' => 'Sistema',\n      'social' => 'Social',\n      'backend' => 'Backend',\n      'events' => 'Eventos',\n      'customers' => 'Clientes',\n      'my_settings' => 'Configurações',\n      'notifications' => 'Notificações',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Tema sem nome',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Instalar tema',\n    'installed' => 'Temas instalados',\n    'no_themes' => 'Não há temas instalados.',\n    'recommended' => 'Recomendado',\n    'remove_confirm' => 'Você tem certeza que deseja remover este tema?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Plugin sem nome',\n    'name' => [],\n    'by_author' => 'Por :name',\n  ],\n  'plugins' => [\n    'install' => 'Instalar plugins',\n    'install_products' => 'Instalar produtos',\n    'installed' => 'Plugins instalados',\n    'no_plugins' => 'Não há plugins instalados.',\n    'recommended' => 'Recomendado',\n    'plugin_label' => 'Plugin',\n    'bulk_actions_label' => 'Ações em massa',\n    'check_yes' => 'Sim',\n    'check_no' => 'Não',\n    'unfrozen' => 'Atualizações Ativas',\n    'freeze' => 'desativar atualizações para',\n    'unfreeze' => 'ativar atualizações para',\n    'refresh' => 'Atualizar',\n    'remove' => 'Remover',\n    'freeze_label' => 'Desativar Atualizações',\n    'unfreeze_label' => 'Ativar Atualizações',\n    'freeze_success' => 'Plugins selecionados foram desativados com sucesso.',\n    'unfreeze_success' => 'Plugins selecionados foram ativados com sucesso.',\n    'enable_success' => 'Plugins habilitados com sucesso.',\n    'disable_success' => 'Plugins desabilitados com sucesso.',\n    'refresh_success' => 'Plugins atualizados com sucesso.',\n    'remove_confirm' => 'Tem certeza de que deseja remover os plugins selecionados? Isso também removerá todos os dados associados.',\n    'remove_success' => 'Plugins removidos com sucesso do sistema.',\n  ],\n  'project' => [\n    'attach' => 'Anexar Projeto',\n    'detach' => 'Desanexar Projeto',\n    'none' => 'Nenhum',\n    'id' => [\n      'label' => 'Identificador do Projeto',\n      'help' => 'Como encontrar o identificador do seu projeto',\n      'missing' => 'Por favor, forneça um identificador de projeto para usar.',\n    ],\n    'detach_confirm' => 'Tem certeza que deseja desanexar este projeto?',\n    'unbind_success' => 'Projeto desanexado com sucesso.',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Conexão SSL obrigatória',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Nome exclusivo usado para se referir a este modelo',\n    'test_send' => 'Enviar mensagem de teste',\n    'test_confirm' => 'Enviar uma mensagem de teste para :email. Continuar?',\n    'creating' => 'Criando modelo...',\n    'creating_layout' => 'Criando esboço...',\n    'saving' => 'Salvando modelo...',\n    'saving_layout' => 'Salvando esboço...',\n    'delete_confirm' => 'Excluir este modelo?',\n    'delete_layout_confirm' => 'Excluir este esboço?',\n    'deleting' => 'Excluindo modelo...',\n    'deleting_layout' => 'Excluindo esboço...',\n    'sending' => 'Enviando mensagem de teste...',\n    'return' => 'Retornar à lista de modelos',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Título',\n      'paragraph' => 'Este é um parágrafo preenchido com o Lorem Ipsum e um link. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Item',\n        'description' => 'Descrição',\n        'price' => 'Priço',\n        'centered' => 'Centralizado',\n        'right_aligned' => 'Alinhado à direita',\n      ],\n      'buttons' => [\n        'primary' => 'Botão principal',\n        'positive' => 'Botão positivo',\n        'negative' => 'Botão negativo',\n      ],\n      'panel' => 'Esse painel não é incrível?',\n      'more' => 'Mais alguns textos',\n      'promotion' => 'Código do cupom: OCTOBER',\n      'subcopy' => 'Esta é a subcópia do email',\n      'thanks' => 'Obrigado',\n    ],\n    'fields' => [],\n  ],\n  'install' => [\n    'project_label' => 'Anexar ao projeto',\n  ],\n  'updates' => [\n    'title' => 'Gerenciar atualizações',\n    'name' => 'Atualização de software',\n    'return_link' => 'Voltar às atualizações',\n    'retry_label' => 'Tentar novamente',\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Plugin não encontrado',\n    'plugin_version_not_found' => 'Versão do plugin não encontrada',\n    'theme_not_found' => 'Tema não encontrado',\n    'core_build' => 'Compilação :build',\n    'core_build_help' => 'Última versão está disponível.',\n    'core_extracting' => 'Desempacotando arquivos do aplicativo',\n    'update_warnings_title' => 'Alguns problemas foram detectados e requerem atenção:',\n    'update_warnings_plugin_missing' => 'O plugin :parent_code requer que o :code seja instalado antes de funcionar',\n    'changelog' => 'Changelog',\n    'changelog_view_details' => 'Ver detalhes',\n    'themes' => 'Temas',\n    'plugin_extracting' => 'Desempacotando o plugin: :name',\n    'plugin_version_none' => 'Novo plugin',\n    'plugin_current_version' => 'Versão atual',\n    'theme_new_install' => 'Instalação do novo tema.',\n    'theme_extracting' => 'Desempacotando o tema: :name',\n    'update_label' => 'Atualizar',\n    'update_loading' => 'Carregando atualizações disponíveis...',\n    'update_failed_label' => 'Falha na atualização',\n    'force_label' => 'Forçar atualização',\n    'found' => [\n      'label' => 'Atualizações encontradas!',\n      'help' => 'Clique em Atualizar para iniciar o processo de atualização.',\n    ],\n    'none' => [\n      'label' => 'Nenhuma atualização',\n      'help' => 'Não há novas atualizações.',\n    ],\n    'important_action' => [\n      'empty' => 'Selecionar ação',\n      'confirm' => 'Confirmar atualização',\n      'skip' => 'Pular este plugin (apenas uma vez)',\n      'ignore' => 'Pular este plugin (sempre)',\n    ],\n    'important_action_required' => 'Ação requerida',\n    'important_view_guide' => 'Exibir guia de atualização',\n    'important_view_release_notes' => 'Ver notas de lançamento',\n    'important_alert_text' => 'Algumas atualizações precisam de sua atenção.',\n    'details_title' => 'Detalhes do plugin',\n    'details_title_plugin' => 'Detalhes do plugin',\n    'details_title_theme' => 'Detalhes do tema',\n    'details_view_homepage' => 'Visualizar página',\n    'details_readme' => 'Documentação',\n    'details_readme_missing' => 'Não foi fornecida nenhuma documentação.',\n    'details_changelog' => 'Registro de mudanças',\n    'details_changelog_missing' => 'Não há changelog fornecido.',\n    'details_upgrades' => 'Guia de atualização',\n    'details_upgrades_missing' => 'Não existem instruções de atualização.',\n    'details_license' => 'Licença',\n    'details_view_license' => 'Ver licença',\n    'details_license_missing' => 'Não há licença fornecida.',\n    'details_current_version' => 'Versão atual',\n    'details_author' => 'Autor',\n  ],\n  'market' => [\n    'menu_label' => 'Mercado',\n    'menu_description' => 'Gerencie e instale plugins e temas.',\n    'content_loading' => 'Carregando...',\n  ],\n  'server' => [\n    'connect_error' => 'Erro ao conectar-se com o servidor.',\n    'response_not_found' => 'O servidor de atualização não pôde ser encontrado.',\n    'response_invalid' => 'Resposta inválida do servidor.',\n    'response_empty' => 'Resposta vazia do servidor.',\n    'file_error' => 'Servidor não conseguiu entregar o pacote.',\n    'file_corrupt' => 'Arquivo do servidor está corrompido.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Classe :class deve definir a propriedade $:property usada pelo comportamento :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Não foi possível localizar o arquivo de configuração :file definido para :location.',\n    'required' => 'Configuração usada em :location deve fornecer um valor :property.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Não foi possível extrair arquivo do núcleo \":file\".',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Esvaziar registro de requisições.',\n    'empty_loading' => 'Esvaziando registro de requisições...',\n    'empty_success' => 'Registro de requisições esvaziado com sucesso.',\n    'return_link' => 'Retornar ao registro de requisições',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistema',\n    'manage_system_settings' => 'Gerenciar configurações do sistema',\n    'manage_software_updates' => 'Gerenciar atualizações',\n    'access_logs' => 'Exibir registros de sistema',\n    'manage_mail_templates' => 'Gerenciar modelos de e-mail',\n    'manage_mail_settings' => 'Gerenciar configurações de e-mail',\n    'manage_other_administrators' => 'Gerenciar outros administradores',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Caminho especificado inválido: \\':path\\'.',\n    'folder_size_items' => 'item(s)',\n  ],\n  'page' => [\n    'not_found' => [\n      'label' => 'Página não encontrada',\n      'help' => 'A página solicitada não pode ser encontrada.',\n    ],\n    'custom_error' => [\n      'label' => 'Erro de página',\n      'help' => 'Desculpe, mas algo deu errado e a página não pode ser exibida.',\n    ],\n    'invalid_token' => [\n      'label' => 'Token de segurança inválido',\n    ],\n    'maintenance' => [\n      'label' => 'Voltamos em breve!',\n      'help' => 'No momento, estamos em manutenção, tente novamente mais tarde!',\n      'message' => 'Mensagem:',\n      'available_at' => 'Tente novamente após after:',\n    ],\n  ],\n  'pagination' => [\n    'previous' => 'Anterior',\n    'next' => 'Próximo',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/pt-br/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => ':attribute deve ser aceito.',\n    'active_url'           => ':attribute não é uma URL válida.',\n    'after'                => ':attribute deve ser uma data posterior a :date.',\n    'after_or_equal'       => ':attribute deve ser uma data posterior ou igual a :date.',\n    'alpha'                => ':attribute só pode conter letras.',\n    'alpha_dash'           => ':attribute só pode conter letras, números e traços.',\n    'alpha_num'            => ':attribute só pode conter letras e números.',\n    'array'                => ':attribute deve ser uma matriz.',\n    'before'               => ':attribute deve ser uma data anterior :date.',\n    'before_or_equal'      => ':attribute deve ser uma data anterior ou igual a :date.',\n    'between'              => [\n        'numeric' => ':attribute deve ser entre :min e :max.',\n        'file'    => ':attribute deve ser entre :min e :max kilobytes.',\n        'string'  => ':attribute deve ser entre :min e :max caracteres.',\n        'array'   => ':attribute deve ter entre :min e :max itens.',\n    ],\n    'boolean'              => ':attribute deve ser verdadeiro ou falso.',\n    'confirmed'            => ':attribute de confirmação não confere.',\n    'date'                 => ':attribute não é uma data válida.',\n    'date_equals'          => ':attribute deve ser uma data igual a :date.',\n    'date_format'          => ':attribute não corresponde ao formato :format.',\n    'different'            => ':attribute e :other devem ser diferentes.',\n    'digits'               => ':attribute deve ter :digits dígitos.',\n    'digits_between'       => ':attribute deve ter entre :min e :max dígitos.',\n    'dimensions'           => ':attribute tem dimensões de imagem inválidas.',\n    'distinct'             => ':attribute campo tem um valor duplicado.',\n    'email'                => ':attribute deve ser um endereço de e-mail válido.',\n    'ends_with'            => ':attribute deve terminar com um dos seguintes: :values',\n    'exists'               => ':attribute selecionado é inválido.',\n    'file'                 => ':attribute deve ser um arquivo.',\n    'filled'               => ':attribute deve ter um valor.',\n    'gt' => [\n        'numeric' => ':attribute deve ser maior que :value.',\n        'file'    => ':attribute deve ser maior que :value kilobytes.',\n        'string'  => ':attribute deve ser maior que :value caracteres.',\n        'array'   => ':attribute deve conter mais de :value itens.',\n    ],\n    'gte' => [\n        'numeric' => ':attribute deve ser maior ou igual a :value.',\n        'file'    => ':attribute deve ser maior ou igual a :value kilobytes.',\n        'string'  => ':attribute deve ser maior ou igual a :value caracteres.',\n        'array'   => ':attribute deve conter :value itens ou mais.',\n    ],\n    'image'                => ':attribute deve ser uma imagem.',\n    'in'                   => ':attribute selecionado é inválido.',\n    'in_array'             => ':attribute não existe em :other.',\n    'integer'              => ':attribute deve ser um número inteiro.',\n    'ip'                   => ':attribute deve ser um endereço de IP válido.',\n    'ipv4'                 => ':attribute deve ser um endereço IPv4 válido.',\n    'ipv6'                 => ':attribute deve ser um endereço IPv6 válido.',\n    'json'                 => ':attribute deve ser uma string JSON válida.',\n    'lt' => [\n        'numeric' => ':attribute deve ser menor que :value.',\n        'file'    => ':attribute deve ser menor que :value kilobytes.',\n        'string'  => ':attribute deve ser menor que :value caracteres.',\n        'array'   => ':attribute deve conter menos de :value itens.',\n    ],\n    'lte' => [\n        'numeric' => ':attribute deve ser menor ou igual a :value.',\n        'file'    => ':attribute deve ser menor ou igual a :value kilobytes.',\n        'string'  => ':attribute deve ser menor ou igual a :value caracteres.',\n        'array'   => ':attribute não deve conter mais que :value itens.',\n    ],\n    'max' => [\n        'numeric' => ':attribute não pode ser superior a :max.',\n        'file'    => ':attribute não pode ser superior a :max kilobytes.',\n        'string'  => ':attribute não pode ser superior a :max caracteres.',\n        'array'   => ':attribute não pode ter mais do que :max itens.',\n    ],\n    'mimes'                => ':attribute deve ser um arquivo do tipo: :values.',\n    'mimetypes'            => ':attribute deve ser um arquivo do tipo: :values.',\n    'min' => [\n        'numeric' => ':attribute deve ser pelo menos :min.',\n        'file'    => ':attribute deve ter pelo menos :min kilobytes.',\n        'string'  => ':attribute deve ter pelo menos :min caracteres.',\n        'array'   => ':attribute deve ter pelo menos :min itens.',\n    ],\n    'not_in'               => ':attribute selecionado é inválido.',\n    'not_regex'            => ':attribute possui um formato inválido.',\n    'numeric'              => ':attribute deve ser um número.',\n    'password'             => 'A senha está incorreta.',\n    'present'              => ':attribute deve estar presente.',\n    'regex'                => ':attribute tem um formato inválido.',\n    'required'             => ':attribute é obrigatório.',\n    'required_if'          => ':attribute é obrigatório quando :other for :value.',\n    'required_unless'      => ':attribute é obrigatório exceto quando :other for :values.',\n    'required_with'        => ':attribute é obrigatório quando :values está presente.',\n    'required_with_all'    => ':attribute é obrigatório quando :values está presente.',\n    'required_without'     => ':attribute é obrigatório quando :values não está presente.',\n    'required_without_all' => ':attribute é obrigatório quando nenhum dos :values estão presentes.',\n    'same'                 => ':attribute e :other devem corresponder.',\n    'size'                 => [\n        'numeric' => ':attribute deve ser :size.',\n        'file'    => ':attribute deve ser :size kilobytes.',\n        'string'  => ':attribute deve ser :size caracteres.',\n        'array'   => ':attribute deve conter :size itens.',\n    ],\n    'starts_with'          => ':attribute deve começar com um dos seguintes valores: :values',\n    'string'               => ':attribute deve ser uma string.',\n    'timezone'             => ':attribute deve ser uma zona válida.',\n    'unique'               => ':attribute já está sendo utilizado.',\n    'uploaded'             => 'Ocorreu uma falha no upload do campo :attribute.',\n    'url'                  => ':attribute tem um formato inválido.',\n    'uuid' => ':attribute deve ser um UUID válido.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention 'attribute.rule' to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of 'email'. This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/pt-br.json",
    "content": "{\n  \"Check For Updates\": \"Verificar atualizações\",\n  \"Install Packages\": \"Instalar pacotes\",\n  \"Manage Themes\": \"Gerenciar temas\",\n  \"Manage Plugins\": \"Gerenciar plugins\",\n  \"Project\": \"Projeto\",\n  \"Owner\": \"Desenvolvedor\",\n  \"Plugins\": \"Plugins\",\n  \"Recommended\": \"Recomendado\",\n  \"Disabled\": \"Desabilitados\",\n  \"Current Build\": \"Compilação atual\",\n  \"Updates Available\": \"Atualizações disponíveis\",\n  \"Up to Date\": \"Atualizado\",\n  \"Latest Build\": \"Versão mais recente\",\n  \"View Changelog\": \"Visualizar Registro de mudanças\",\n  \"Software Updates\": \"Atualizações\",\n  \"Update the system modules and plugins.\": \"Atualize o sistema, gerencie e instale plugins e temas.\",\n  \"General\": \"Geral\",\n  \"Mail\": \"Email\",\n  \"Utilities\": \"Utilidades\",\n  \"Settings\": \"Configurações\",\n  \"Show All Settings\": \"Mostrar todas as configurações\",\n  \"Unable to find the specified settings.\": \"Impossível encontrar as configurações solicitadas.\",\n  \"The settings page is missing a Model definition.\": \"Falta uma definição de modelo na página de configurações.\",\n  \":name settings updated\": \"Configurações para :name foram atualizados com sucesso.\",\n  \"Return to System Settings\": \"Retornar para as configurações do sistema\",\n  \"Search Settings...\": \"Encontrar uma configuração...\",\n  \"Disable mail branding CSS\": \"Desabilitar CSS de branding de e-mail\",\n  \"Manage Sites\": \"Gerenciar sites\",\n  \"Manage the websites available for this application.\": \"Gerencie os sites disponíveis para este aplicativo.\",\n  \"Marketplace\": \"Marketplace\",\n  \"There is no documentation provided.\": \"Não foi fornecida nenhuma documentação.\",\n  \"Documentation\": \"Documentação\",\n  \"Upgrade Guide\": \"Guia de atualização\",\n  \"License\": \"Licença\",\n  \"Attach to Project\": \"Anexar ao projeto\",\n  \"Manage Updates\": \"Gerenciar atualizações\",\n  \"Software Update\": \"Atualização de software\",\n  \"Return to Software Updates\": \"Voltar às atualizações\",\n  \"Try Again\": \"Tentar novamente\",\n  \"Unpacking application files\": \"Desempacotando arquivos do aplicativo\",\n  \"Update Failed\": \"Falha na atualização\",\n  \"Unpacking plugin: :name\": \"Desempacotando o plugin: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"O site principal é usado por padrão e não pode ser excluído.\",\n  \"Disabled sites are not shown on the frontend.\": \"Disabled sites are not shown on the frontend.\",\n  \"Enabled in the Admin Panel\": \"Ativado no Painel de Administração\",\n  \"Configuration\": \"Configuração\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Use isto se você quiser que o site seja ativado no painel de administração.\",\n  \"Install\": \"Instalar\",\n  \"Sync Project\": \"Sincronizar Projeto\",\n  \"Name\": \"Nome\",\n  \"Unique Code\": \"Código único\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Sites\",\n  \"Create Site\": \"Criar Site\",\n  \"Base URL\": \"URL Base\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Valor padrão atual: :value\",\n  \"Locale\": \"Idioma\",\n  \"Timezone\": \"Fuso horário\",\n  \"Custom application URL\": \"URL da aplicação personalizada\",\n  \"Override the application URL when this site is active.\": \"Override the application URL when this site is active.\",\n  \"Use a CMS route prefix\": \"Use a CMS route prefix\",\n  \"A prefix can identify this site when using a shared hostname.\": \"A prefix can identify this site when using a shared hostname.\",\n  \"Define matching hostnames\": \"Definir hostnames correspondentes\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Specify domain names and patterns that must be used to serve this site.\",\n  \"Display a style for this site\": \"Display a style for this site\",\n  \"To help identify this site, display a color in the admin panel.\": \"To help identify this site, display a color in the admin panel.\",\n  \"Save\": \"Salvar\",\n  \"Save and Close\": \"Salvar e Fechar\",\n  \"Use Default\": \"Usar padrão\",\n  \"Use Custom\": \"Use Custom\",\n  \"Specify a custom locale code.\": \"Especificar um código de localidade personalizado.\",\n  \"Failed\": \"Falhou\",\n  \"or\": \"ou\",\n  \"Code\": \"Código\",\n  \"October CMS Marketplace\": \"October CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Project has no plugins or themes. Visit the :link to add some.\",\n  \"Buy Now\": \"Comprar agora\",\n  \"Updating package manager\": \"Atualizando gerenciador de pacotes\",\n  \"Updating application files\": \"Baixando arquivos do aplicativo\",\n  \"Setting build number\": \"Configurando o número de compilação\",\n  \"Finishing update process\": \"Finalizando processo de atualização\",\n  \"Installing plugin: :name\": \"Baixando o plugin: :name\",\n  \"Finishing installation process\": \"Finalizando processo de instalação\",\n  \"Removing theme: :name\": \"Removendo tema: :name\",\n  \"Please specify a Theme name to install.\": \"Por favor, especifique um nome de tema para instalar.\",\n  \"Installing theme: :name\": \"Baixando o tema: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Removendo o plugin: :name\",\n  \"Please specify a Plugin name to install.\": \"Por favor, especifique um nome de plugin para instalar.\",\n  \"Update process complete\": \"O processo de atualização foi realizado com sucesso.\",\n  \"Package installed successfully\": \"O plugin foi instalado com sucesso.\",\n  \"Check Dependencies\": \"Verificar Dependências\",\n  \"Install Dependencies\": \"Instalar Dependências\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"There are missing dependencies needed for the system to run correctly.\",\n  \"License Key\": \"Chave de Licença\",\n  \"How to find your License Key\": \"Como encontrar sua chave da licença\",\n  \"The password attribute is required.\": \"O atributo da senha é obrigatório.\",\n  \"The login attribute is required.\": \"O atributo do login é obrigatório.\",\n  \"Cannot login user since they are not activated.\": \"Cannot login user since they are not activated.\",\n  \"Cannot login user since they are banned.\": \"Cannot login user since they are banned.\",\n  \"Cannot login user since they are suspended.\": \"Cannot login user since they are suspended.\",\n  \"A user was not found with the given credentials.\": \"A user was not found with the given credentials.\",\n  \"A user was found but the password did not match.\": \"A user was found but the password did not match.\",\n  \"User is not logged in\": \"O usuário não está logado\",\n  \"Register Software\": \"Registrar Software\",\n  \"View the Dashboard\": \"Visualizar o painel\",\n  \"Set the Default Dashboard\": \"Gerenciar o painel padrão\",\n  \"Log File\": \"Arquivo de registro\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Sem criptografia\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Configurações de E-mail\",\n  \"Manage email configuration.\": \"Gerenciar configurações de e-mail.\",\n  \"Sender Name\": \"Nome do Remetente\",\n  \"Sender Email\": \"E-mail do Remetente\",\n  \"Mail Method\": \"Método de Envio\",\n  \"SMTP Address\": \"Endereço SMTP\",\n  \"SMTP Port\": \"Porta SMTP\",\n  \"SMTP Encryption Protocol\": \"Protocolo de criptografia SMTP\",\n  \"SMTP Authorization Required\": \"Autenticação SMTP obrigatória\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Use esta opção se o seu servidor SMTP requer autenticação.\",\n  \"Username\": \"Usuário\",\n  \"Password\": \"Senha\",\n  \"Sendmail Path\": \"Caminho do Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Por favor, especifique o caminho do programa Sendmail.\",\n  \"Mailgun Domain\": \"Domínio do Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Por favor, forneça o domínio do Mailgun.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Forneça sua chave de API do Mailgun.\",\n  \"SES Key\": \"Chave SES\",\n  \"Enter your SES API key\": \"Forneça sua chave do SES\",\n  \"SES Secret\": \"SES Secret\",\n  \"Enter your SES API secret key\": \"Forneça sua chave de API do SES.\",\n  \"SES Region\": \"Região SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Entre com sua região SES (exemplo: us-east-1)\",\n  \"Postmark Token\": \"Postmark chave secreta\",\n  \"Enter your Postmark API secret key\": \"Insira sua chave secreta da API Postmark\",\n  \"Define administrator roles\": \"Definir funções de administrador\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restrict access to this site to only administrator with the following roles.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"All Sites\",\n  \"Manage Backend Preferences\": \"Gerenciar preferências da área administrativa\",\n  \"Manage Code Editor Preferences\": \"Gerenciar preferências do editor de código\",\n  \"Customize Backend Styles\": \"Personalizar o painel\",\n  \"Mail Templates\": \"Modelos de E-mail\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modificar os modelos dos e-mails que são enviados para usuários e administradores.\",\n  \"Mail Branding\": \"Personalizar Email\",\n  \"Modify the colors and appearance of mail templates.\": \"Modifique as cores e a aparência dos modelos de email.\",\n  \"Event Log\": \"Registro de Eventos\",\n  \"View system log messages with their recorded time and details.\": \"Visualize as mensagens do sistema, com horário e detalhes.\",\n  \"Request Log\": \"Registro de Requisições\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Visualize requisições malsucedidas na aplicação, como Página não encontrada (404).\",\n  \"Log Settings\": \"Configurações de registros\",\n  \"Specify which areas should use logging.\": \"Especifique quais áreas devem usar o registro.\",\n  \"Test message sent.\": \"Mensagem de teste enviada com sucesso.\",\n  \"New Layout\": \"Novo esboço\",\n  \"New Partial\": \"Novo bloco\",\n  \"New Template\": \"Novo modelo\",\n  \"Template\": \"Modelo\",\n  \"Templates\": \"Modelos\",\n  \"Layouts\": \"Esboços\",\n  \"Partials\": \"Blocos\",\n  \"Partial\": \"Bloco\",\n  \"Mail Partials\": \"Blocos de e-mail\",\n  \"Layout\": \"Esboço\",\n  \"Mail Layouts\": \"Esboços de e-mail\",\n  \"Unique code used to refer to this template\": \"Código exclusivo usado para se referir a este modelo\",\n  \"-- No layout --\": \"-- Sem esboço --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Texto Simples\",\n  \"Disable automatic inline CSS\": \"Desativar CSS inline automático\",\n  \"Options\": \"Opções\",\n  \"Subject\": \"Assunto\",\n  \"Email message subject\": \"Assunto da mensagem\",\n  \"Description\": \"Descrição\",\n  \"Drivers Not Installed\": \"Drivers não instalados\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Este método requer que o plugin \\\":plugin\\\" esteja instalado.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Identificador do Evento\",\n  \"Level\": \"Nível\",\n  \"Date & Time\": \"Data & Hora\",\n  \"Message\": \"Mensagem\",\n  \"Logging\": \"Registros\",\n  \"Log Bad Requests\": \"Registrar requisições inválidas\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Requisições do navegador que podem exigir atenção, como erros 404.\",\n  \"Log Theme Changes\": \"Registrar alterações no tema\",\n  \"When a change is made to the theme using the backend.\": \"Quando uma alteração é feita no tema usando o backend.\",\n  \"Log System Events\": \"Registrar eventos do sistema\",\n  \"Store system events in the database in addition to the file-based log.\": \"Armazene eventos do sistema no banco de dados, além do registro baseado em arquivo.\",\n  \"Background\": \"Fundo\",\n  \"Body background\": \"Fundo do corpo\",\n  \"Content background\": \"Fundo do conteúdo\",\n  \"Inner content background\": \"Fundo de conteúdo interno\",\n  \"Buttons\": \"Botões\",\n  \"Button text color\": \"Cor do texto do botão\",\n  \"Primary button background\": \"Fundo do botão principal\",\n  \"Positive button background\": \"Fundo do botão positivo\",\n  \"Negative button background\": \"Fundo do botão negativo\",\n  \"Typography\": \"Tipografia\",\n  \"Header color\": \"Cor do cabeçalho\",\n  \"Headings color\": \"Cor dos títulos\",\n  \"Text color\": \"Cor do texto\",\n  \"Link color\": \"Cor do link\",\n  \"Footer color\": \"Cor do rodapé\",\n  \"Borders\": \"Bordas\",\n  \"Body border color\": \"Cor da borda do corpo\",\n  \"Subcopy border color\": \"Cor da borda da subcópia\",\n  \"Table border color\": \"Cor da borda da tabela\",\n  \"Components\": \"Componentes\",\n  \"Panel background\": \"Fundo do painel\",\n  \"Promotion background\": \"Fundo do cupom promocional\",\n  \"Promotion border color\": \"Cor da borda cupom promocional\",\n  \"Customize Mail Appearance\": \"Personalizar aparência de email\",\n  \"Version\": \"Versão\",\n  \"Enabled\": \"Plugin Ativo\",\n  \"Latest\": \"Mais recentes\",\n  \"Log ID\": \"ID do registro\",\n  \"Counter\": \"Contador\",\n  \"Referers\": \"Referências\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Este registro mostra a lista dos potenciais erros que ocorreram na aplicação, como exceções e informações de depuração.\",\n  \"Event\": \"Evento\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Este registro mostra uma lista de requisições que requerem atenção. Por exemplo, se um usuário solicitar uma página não encontrada, será registrado com o status 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Requisição\",\n  \"Event log emptied\": \"Registro de eventos esvaziado com sucesso.\",\n  \"Empty Event Log\": \"Esvaziar registro de eventos\",\n  \"Emptying Event Log...\": \"Esvaziando registro de eventos...\",\n  \"Return to Event Log\": \"Retornar ao registro de eventos\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Tem certeza de que deseja redefinir os plugins selecionados? Isso redefinirá os dados de cada plugin, restaurando-os para o estado de inicial.\",\n  \"Reset Plugin Data\": \"Redefinir dados do plugin\",\n  \"Enable Plugins\": \"Ativar plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Tem certeza de que deseja :action esses plugins?\",\n  \"enable\": \"ativo\",\n  \"disable\": \"inativo\",\n  \"Disable Plugins\": \"Desativar plugins\",\n  \"Select Action...\": \"Selecionar ação...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Plugin removido do sistema de arquivos.\",\n  \"search plugins to install...\": \"Buscar plugin para instalar...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin foi desativado pela configuração.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin tem dependências ausentes ou desativados pelo sistema.\",\n  \"search themes to install...\": \"Buscar temas para instalar...\",\n  \"Install Theme\": \"Instalar tema\",\n  \"Theme Name\": \"Nome do Tema\",\n  \"Install Plugin\": \"Instalar plugin\",\n  \"Plugin Name\": \"Nome do Plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Nomeie o plugin pelo seu código exclusivo. Por exemplo, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Nome do tema deve ser único. Por exemplo, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\"\n}\n"
  },
  {
    "path": "modules/system/lang/pt-pt/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatando',\n        'quote' => 'Citação',\n        'code' => 'Código',\n        'header1' => 'Cabeçalho 1',\n        'header2' => 'Cabeçalho 2',\n        'header3' => 'Cabeçalho 3',\n        'header4' => 'Cabeçalho 4',\n        'header5' => 'Cabeçalho 5',\n        'header6' => 'Cabeçalho 6',\n        'bold' => 'Negrito',\n        'italic' => 'Itálico',\n        'unorderedlist' => 'Lista não ordenada',\n        'orderedlist' => 'Lista ordenada',\n        'video' => 'Vídeo',\n        'image' => 'Imagem',\n        'link' => 'Ligação',\n        'horizontalrule' => 'Inserir linha horizontal',\n        'fullscreen' => 'Ecran cheio',\n        'preview' => 'Visualizar',\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Inserir ligação\",\n        'insert_image' => \"Inserir imagem\",\n        'insert_video' => \"Inserir vídeo\",\n        'insert_audio' => \"Inserir áudio\",\n        'invalid_file_empty_insert' => \"Por favor, selecione o ficheiro para criar a ligação.\",\n        'invalid_file_single_insert' => \"Por favor, selecione apenas um ficheiro.\",\n        'invalid_image_empty_insert' => \"Por favor, selecione as imagens que deseja inserir.\",\n        'invalid_video_empty_insert' => \"Por favor, selecione os vídeos que deseja inserir.\",\n        'invalid_audio_empty_insert' => \"Por favor, selecione os áudios que deseja inserir.\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Cancelar',\n        'widget_remove_confirm' => 'Remover este widget?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Mês anterior',\n        'nextMonth' => 'Mês seguinte',\n        'months' => ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],\n        'weekdays' => ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'],\n        'weekdaysShort' => ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab']\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'todos'\n        ],\n        'dates' => [\n            'all' => 'todas',\n            'filter_button_text' => 'Filtro',\n            'reset_button_text'  => 'Reiniciar',\n            'date_placeholder' => 'Data',\n            'after_placeholder' => 'Após',\n            'before_placeholder' => 'Antes'\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Mostrar o rastreamento',\n        'hide_stacktrace' => 'Ocultar o rastreamento',\n        'tabs' => [\n            'formatted' => 'Formatado',\n            'raw' => 'Bruto',\n        ],\n        'editor' => [\n            'title' => 'Editor de código fonte',\n            'description' => 'O sistema operativo deve ser configurado para escutar um desses esquemas de URL.',\n            'openWith' => 'Abrir com',\n            'remember_choice' => 'Lembrar a opção selecionada nesta sessão',\n            'open' => 'Abrir',\n            'cancel' => 'Cancelar'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/pt-pt/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Voltando ao básico',\n  ],\n  'locale' => [\n    'be' => 'Bielorusso',\n    'bg' => 'Búlgaro',\n    'cs' => 'Checo',\n    'da' => 'Dinamarquês',\n    'en' => 'Inglês (Estados Unidos)',\n    'en-au' => 'Inglês (Austrália)',\n    'en-ca' => 'Inglês (Canadá)',\n    'en-gb' => 'Inglês (Reino Unido)',\n    'de' => 'Alemão',\n    'el' => 'Grego',\n    'es' => 'Espanhol',\n    'es-ar' => 'Espanhol (Argentina)',\n    'fa' => 'Persa (Farsi)',\n    'fr' => 'Françês',\n    'fr-ca' => 'Françês (Canadá)',\n    'hu' => 'Húngaro',\n    'id' => 'Indonésio',\n    'it' => 'Italiano',\n    'ja' => 'Japonês',\n    'lv' => 'Letão',\n    'nb-no' => 'Norueguês',\n    'nl' => 'Holandês',\n    'pl' => 'Polaco',\n    'pt-pt' => 'Português (Portugal)',\n    'pt-br' => 'Português (Brasil)',\n    'ro' => 'Romeno',\n    'rs' => 'Srpski',\n    'ru' => 'Russo',\n    'sv' => 'Suéco',\n    'sk' => 'Esloveno',\n    'sl' => 'Slovenščina',\n    'tr' => 'Turco',\n    'zh-cn' => 'Chinês',\n    'zh-tw' => 'Tailandês',\n    'vn' => 'Tiếng việt',\n  ],\n  'directory' => [\n    'create_fail' => 'Não é possível criar a diretoria: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Não é possível criar o ficheiro: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Token de segurança inválido',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistema',\n    'menu_label' => 'Sistema',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Diversos',\n      'logs' => 'Registos',\n      'mail' => 'E-mail',\n      'shop' => 'Loja ',\n      'team' => 'Equipa',\n      'users' => 'Utilizadores',\n      'system' => 'Sistema',\n      'social' => 'Social',\n      'events' => 'Eventos',\n      'customers' => 'Clientes',\n      'my_settings' => 'Configurações',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Tema sem nome',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Instalar tema',\n    'installed' => 'Temas instalados',\n    'no_themes' => 'Não há temas instalados.',\n    'recommended' => 'Recomendado',\n    'remove_confirm' => 'Tem a certeza que deseja remover este tema?',\n  ],\n  'plugin' => [\n    'label' => 'Extensão',\n    'unnamed' => 'Extensão sem nome',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Activar ou desactivar',\n    'enable_or_disable_title' => 'Activar ou desactivar extensões',\n    'install' => 'Instalar extensões',\n    'install_products' => 'Instalar produtos',\n    'installed' => 'Extensões instaladas',\n    'no_plugins' => 'Não há extensões instaladas.',\n    'recommended' => 'Recomendada',\n    'remove' => 'Remover',\n    'refresh' => 'Actualizar',\n    'disabled_label' => 'Desactivado',\n    'disabled_help' => 'Extensões que estão desactivadas são ignoradas pela aplicação.',\n    'frozen_label' => 'Congelar actualizações',\n    'frozen_help' => 'Extensões congeladas serão ignoradas pelo processo de atualização.',\n    'selected_amount' => 'Extensões selecionadas: :amount',\n    'remove_confirm' => 'Tem a certeza?',\n    'remove_success' => 'Extensões removidas com sucesso do sistema.',\n    'refresh_success' => 'Extensões atualizadas com sucesso.',\n    'disable_confirm' => 'Tem a certeza?',\n    'disable_success' => 'Extensões desactivadas com sucesso.',\n    'enable_success' => 'Extensões desactivadas com sucesso.',\n  ],\n  'project' => [\n    'attach' => 'Anexar Projecto',\n    'detach' => 'Desanexar Projecto',\n    'none' => 'Nenhum',\n    'id' => [\n      'missing' => 'Por favor, forneça um identificador de projecto para utilizar.',\n    ],\n    'detach_confirm' => 'Tem a certeza que deseja desanexar este projecto?',\n    'unbind_success' => 'Projecto desanexado com sucesso.',\n  ],\n  'settings' => [\n    'search' => 'Procurar',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Conexão SSL obrigatória',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Nome exclusivo utilizado para se referir a este modelo',\n    'test_send' => 'Enviar mensagem de teste',\n    'test_confirm' => 'Enviar uma mensagem de teste para :email. Continuar?',\n    'creating' => 'Criando modelo...',\n    'creating_layout' => 'Criando esboço...',\n    'saving' => 'Guardando modelo...',\n    'saving_layout' => 'Guardando esboço...',\n    'delete_confirm' => 'Apagar este modelo?',\n    'delete_layout_confirm' => 'Apagar este esboço?',\n    'deleting' => 'Apagando modelo...',\n    'deleting_layout' => 'Apagando esboço...',\n    'sending' => 'Enviando mensagem de teste...',\n    'return' => 'Regressar à lista de modelos',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Extensão não encontrada',\n    'core_build' => 'Compilação :build',\n    'core_build_help' => 'Última versão está disponível.',\n    'themes' => 'Temas',\n    'plugin_version_none' => 'Nova extensão',\n    'plugin_current_version' => 'Versão actual',\n    'theme_new_install' => 'Instalação do novo tema.',\n    'theme_extracting' => 'Descomprimindo o tema: :name',\n    'update_label' => 'Actualizar',\n    'update_loading' => 'Carregando atualizações disponíveis...',\n    'force_label' => 'Forçar actualização',\n    'found' => [\n      'label' => 'Actualizações encontradas!',\n      'help' => 'Clique em Actualizar para iniciar o processo de actualização.',\n    ],\n    'none' => [\n      'label' => 'Nenhuma actualização',\n      'help' => 'Não há novas actualizações.',\n    ],\n    'important_action' => [\n      'empty' => 'Selecionar acção',\n      'confirm' => 'Confirmar actualização',\n      'skip' => 'Ignorar esta actualização (apenas uma vez)',\n      'ignore' => 'Ignorar esta actualização (sempre)',\n    ],\n    'important_action_required' => 'Acção requerida',\n    'important_view_guide' => 'Exibir guia de actualização',\n    'important_view_release_notes' => 'Ver notas da actualização',\n    'important_alert_text' => 'Algumas actualizações precisam de sua atenção.',\n    'details_title' => 'Detalhes da extensão',\n    'details_view_homepage' => 'Visualizar página',\n    'details_changelog' => 'Registo de alterações',\n    'details_changelog_missing' => 'Não foi fornecido registo de alterações.',\n    'details_current_version' => 'Versão actual',\n    'details_author' => 'Autor',\n  ],\n  'server' => [\n    'connect_error' => 'Erro ao conectar-se com o servidor.',\n    'response_not_found' => 'O servidor de actualização não foi encontrado.',\n    'response_invalid' => 'Resposta inválida do servidor.',\n    'response_empty' => 'Resposta vazia do servidor.',\n    'file_error' => 'Servidor não conseguiu entregar o pacote.',\n    'file_corrupt' => 'O ficheiro do servidor está corrompido.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Classe :class deve definir a propriedade $:property usada pelo comportamento :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Não foi possível localizar o ficheiro de configuração :file definido para :location.',\n    'required' => 'Configuração utilizada em :location deve fornecer um valor :property.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Não foi possível extrair ficheiro do núcleo \":file\".',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Esvaziar registo de requisições.',\n    'empty_loading' => 'Esvaziando registo de requisições...',\n    'empty_success' => 'Registo de requisições esvaziado com sucesso.',\n    'return_link' => 'Regressar ao registo de requisições',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistema',\n    'manage_system_settings' => 'Gerir configurações do sistema',\n    'manage_software_updates' => 'Gerir actualizações',\n    'access_logs' => 'Exibir registos de sistema',\n    'manage_mail_templates' => 'Gerir modelos de e-mail',\n    'manage_mail_settings' => 'Gerir configurações de e-mail',\n    'manage_other_administrators' => 'Gerir outros administradores',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Caminho especificado inválido: \\':path\\'.',\n    'folder_size_items' => 'item(s)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/pt-pt/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'         => ':attribute deve ser aceito.',\n    'active_url'       => ':attribute não é uma URL válida.',\n    'after'            => ':attribute deve ser uma data após :date.',\n    'alpha'            => ':attribute só pode conter letras.',\n    'alpha_dash'       => ':attribute só pode conter letras, números e traços.',\n    'alpha_num'        => ':attribute só pode conter letras e números.',\n    'array'            => ':attribute deve ser uma matriz.',\n    'before'           => ':attribute deve ser uma data antes :date.',\n    'between'          => [\n        'numeric' => ':attribute deve situar-se entre :min e :max.',\n        'file'    => ':attribute deve ter entre :min e :max kilobytes.',\n        'string'  => ':attribute deve ter entre :min e :max caracteres.',\n        'array'   => ':attribute deve ter entre :min e :max itens.',\n    ],\n    'confirmed'        => 'A confirmação de :attribute não corresponde.',\n    'date'             => ':attribute não é uma data válida.',\n    'date_format'      => ':attribute não coincide com o formato :format.',\n    'different'        => ':attribute e :other devem ser diferentes.',\n    'digits'           => ':attribute deve ser :digits dígitos.',\n    'digits_between'   => ':attribute deve ter entre :min e :max dígitos.',\n    'email'            => 'Formato de :attribute é inválido.',\n    'exists'           => ':attribute selecionado é inválido.',\n    'image'            => ':attribute deve ser uma imagem.',\n    'in'               => ':attribute selecionado é inválido.',\n    'integer'          => ':attribute deve ser um número inteiro.',\n    'ip'               => ':attribute deve ser um endereço IP válido.',\n    'max'              => [\n        'numeric' => ':attribute não pode ser maior do que :max.',\n        'file'    => ':attribute não pode ser maior do que :max kilobytes.',\n        'string'  => ':attribute não pode ser maior do que :max caracteres.',\n        'array'   => ':attribute não pode ter mais que :max itens.',\n    ],\n    'mimes'            => ':attribute deve ser um arquivo do tipo: :values.',\n    \"extensions\"       => \"O :attribute deve conter uma extensão: :values.\",\n    'min'              => [\n        'numeric' => ':attribute deve ser no mínimo :min.',\n        'file'    => ':attribute deve ter pelo menos :min kilobytes.',\n        'string'  => ':attribute deve ter pelo menos :min caracteres.',\n        'array'   => ':attribute deve ter pelo menos :min itens.',\n    ],\n    'not_in'           => ':attribute selecionado é inválido.',\n    'numeric'          => ':attribute deve ser um número.',\n    'regex'            => 'Formato de :attribute é inválido.',\n    'required'         => 'O campo :attribute é obrigatório.',\n    'required_if'      => 'O campo :attribute é obrigatório quando :other é :value.',\n    'required_with'    => 'O campo :attribute é obrigatório quando :values está presente.',\n    'required_without' => 'O campo :attribute é obrigatório quando :values não está presente.',\n    'same'             => 'O campo :attribute e :other devem corresponder.',\n    'size'             => [\n        'numeric' => ':attribute deve ser :size.',\n        'file'    => ':attribute deve ser :size kilobytes.',\n        'string'  => ':attribute deve ter :size caracteres.',\n        'array'   => ':attribute deve conter :size itens.',\n    ],\n    'unique'           => ':attribute já está em utilização.',\n    'url'              => 'Formato de :attribute é inválido.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention 'attribute.rule' to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of 'email'. This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/pt-pt.json",
    "content": "{\n  \"Check For Updates\": \"Verificar actualizações\",\n  \"Install Packages\": \"Install Packages\",\n  \"Manage Themes\": \"Manage Themes\",\n  \"Manage Plugins\": \"Gerir extensões\",\n  \"Project\": \"Projecto\",\n  \"Owner\": \"Desenvolvedor\",\n  \"Plugins\": \"Extensões\",\n  \"Recommended\": \"Recommended\",\n  \"Disabled\": \"Desactivados\",\n  \"Current Build\": \"Compilação atual\",\n  \"Updates Available\": \"Updates Available\",\n  \"Up to Date\": \"Up to Date\",\n  \"Latest Build\": \"Latest Build\",\n  \"View Changelog\": \"View Changelog\",\n  \"Software Updates\": \"Actualizações\",\n  \"Update the system modules and plugins.\": \"Actualize o sistema, gira e instale extensões e temas.\",\n  \"General\": \"Geral\",\n  \"Mail\": \"Mail\",\n  \"Utilities\": \"Utilities\",\n  \"Settings\": \"Configurações\",\n  \"Show All Settings\": \"Show All Settings\",\n  \"Unable to find the specified settings.\": \"Impossível encontrar as configurações solicitadas.\",\n  \"The settings page is missing a Model definition.\": \"Falta uma definição de modelo na página de configurações.\",\n  \":name settings updated\": \"Configurações para :name foram atualizados com sucesso.\",\n  \"Return to System Settings\": \"Regressar para as configurações do sistema\",\n  \"Search Settings...\": \"Find a Setting...\",\n  \"Disable mail branding CSS\": \"Disable mail branding CSS\",\n  \"Manage Sites\": \"Manage Sites\",\n  \"Manage the websites available for this application.\": \"Manage the websites available for this application.\",\n  \"Marketplace\": \"Marketplace\",\n  \"There is no documentation provided.\": \"Não foi fornecida nenhuma documentação.\",\n  \"Documentation\": \"Documentação\",\n  \"Upgrade Guide\": \"Guia de actualização\",\n  \"License\": \"Licença\",\n  \"Attach to Project\": \"Anexar ao projecto\",\n  \"Manage Updates\": \"Gerir actualizações\",\n  \"Software Update\": \"Actualização de software\",\n  \"Return to Software Updates\": \"Voltar às actualizações\",\n  \"Try Again\": \"Tentar novamente\",\n  \"Unpacking application files\": \"Descomprimindo ficheiros do aplicação\",\n  \"Update Failed\": \"Falha na actualização\",\n  \"Unpacking plugin: :name\": \"Descomprimindo a extensão: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"The primary site is used by default and cannot be deleted.\",\n  \"Disabled sites are not shown on the frontend.\": \"Disabled sites are not shown on the frontend.\",\n  \"Enabled in the Admin Panel\": \"Enabled in the Admin Panel\",\n  \"Configuration\": \"Configuration\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Use this if you want the site to be enabled in the admin panel.\",\n  \"Install\": \"Install\",\n  \"Sync Project\": \"Sync Project\",\n  \"Name\": \"Nome\",\n  \"Unique Code\": \"Unique Code\",\n  \"Theme\": \"Theme\",\n  \"Sites\": \"Sites\",\n  \"Create Site\": \"Create Site\",\n  \"Base URL\": \"Base URL\",\n  \"Status\": \"Estado\",\n  \"Current default value: :value\": \"Current default value: :value\",\n  \"Locale\": \"Locale\",\n  \"Timezone\": \"Timezone\",\n  \"Custom application URL\": \"Custom application URL\",\n  \"Override the application URL when this site is active.\": \"Override the application URL when this site is active.\",\n  \"Use a CMS route prefix\": \"Use a CMS route prefix\",\n  \"A prefix can identify this site when using a shared hostname.\": \"A prefix can identify this site when using a shared hostname.\",\n  \"Define matching hostnames\": \"Define matching hostnames\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Specify domain names and patterns that must be used to serve this site.\",\n  \"Display a style for this site\": \"Display a style for this site\",\n  \"To help identify this site, display a color in the admin panel.\": \"To help identify this site, display a color in the admin panel.\",\n  \"Save\": \"Save\",\n  \"Save and Close\": \"Save and Close\",\n  \"Use Default\": \"Use Default\",\n  \"Use Custom\": \"Use Custom\",\n  \"Specify a custom locale code.\": \"Specify a custom locale code.\",\n  \"Failed\": \"Failed\",\n  \"or\": \"or\",\n  \"Code\": \"Código\",\n  \"October CMS Marketplace\": \"October CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Project has no plugins or themes. Visit the :link to add some.\",\n  \"Buy Now\": \"Buy Now\",\n  \"Updating package manager\": \"Updating package manager\",\n  \"Updating application files\": \"Descarregando ficheiros da aplicação\",\n  \"Setting build number\": \"Setting build number\",\n  \"Finishing update process\": \"Finalizando processo de actualização\",\n  \"Installing plugin: :name\": \"Baixando a extensão: :name\",\n  \"Finishing installation process\": \"Finalizando o processo de instalação\",\n  \"Removing theme: :name\": \"Removing theme: :name\",\n  \"Please specify a Theme name to install.\": \"Por favor, especifique um nome de tema para instalar.\",\n  \"Installing theme: :name\": \"Descarregando o tema: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Removing plugin: :name\",\n  \"Please specify a Plugin name to install.\": \"Por favor, especifique um nome da extensão para instalar.\",\n  \"Update process complete\": \"O processo de actualização foi realizado com sucesso.\",\n  \"Package installed successfully\": \"A extensão foi instalada com sucesso.\",\n  \"Check Dependencies\": \"Check Dependencies\",\n  \"Install Dependencies\": \"Install Dependencies\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"There are missing dependencies needed for the system to run correctly.\",\n  \"License Key\": \"License Key\",\n  \"How to find your License Key\": \"How to find your License Key\",\n  \"The password attribute is required.\": \"The password attribute is required.\",\n  \"The login attribute is required.\": \"The login attribute is required.\",\n  \"Cannot login user since they are not activated.\": \"Cannot login user since they are not activated.\",\n  \"Cannot login user since they are banned.\": \"Cannot login user since they are banned.\",\n  \"Cannot login user since they are suspended.\": \"Cannot login user since they are suspended.\",\n  \"A user was not found with the given credentials.\": \"A user was not found with the given credentials.\",\n  \"A user was found but the password did not match.\": \"A user was found but the password did not match.\",\n  \"User is not logged in\": \"User is not logged in\",\n  \"Register Software\": \"Register Software\",\n  \"View the Dashboard\": \"Visualizar o painel\",\n  \"Set the Default Dashboard\": \"Set the Default Dashboard\",\n  \"Log File\": \"Ficheiro de registo\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Sem criptografia\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Configurações de E-mail\",\n  \"Manage email configuration.\": \"Gerir configurações de e-mail.\",\n  \"Sender Name\": \"Nome do Remetente\",\n  \"Sender Email\": \"E-mail do Remetente\",\n  \"Mail Method\": \"Método de Envio\",\n  \"SMTP Address\": \"Endereço SMTP\",\n  \"SMTP Port\": \"Porta SMTP\",\n  \"SMTP Encryption Protocol\": \"Protocolo de criptografia SMTP\",\n  \"SMTP Authorization Required\": \"Autenticação SMTP obrigatória\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Use esta opção se o seu servidor SMTP requer autenticação.\",\n  \"Username\": \"Utilizador\",\n  \"Password\": \"Senha\",\n  \"Sendmail Path\": \"Caminho do Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Por favor, especifique o caminho do programa Sendmail.\",\n  \"Mailgun Domain\": \"Domínio do Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Por favor, forneça o domínio do Mailgun.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Forneça sua chave de API do Mailgun.\",\n  \"SES Key\": \"Chave SES\",\n  \"Enter your SES API key\": \"Forneça sua chave do SES\",\n  \"SES Secret\": \"SES Secret\",\n  \"Enter your SES API secret key\": \"Forneça sua chave de API do SES.\",\n  \"SES Region\": \"Região SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Entre com sua região SES (exemplo: us-east-1)\",\n  \"Postmark Token\": \"Postmark Token\",\n  \"Enter your Postmark API secret key\": \"Enter your Postmark API secret key\",\n  \"Define administrator roles\": \"Define administrator roles\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restrict access to this site to only administrator with the following roles.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"All Sites\",\n  \"Manage Backend Preferences\": \"Gerir preferências da área administrativa\",\n  \"Manage Code Editor Preferences\": \"Gerir preferências do editor de código\",\n  \"Customize Backend Styles\": \"Personalizar o backend\",\n  \"Mail Templates\": \"Modelos de E-mail\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modificar os modelos dos e-mails que são enviados para utilizadores e administradores.\",\n  \"Mail Branding\": \"Mail Branding\",\n  \"Modify the colors and appearance of mail templates.\": \"Modify the colors and appearance of mail templates.\",\n  \"Event Log\": \"Registo de Eventos\",\n  \"View system log messages with their recorded time and details.\": \"Visualize as mensagens do sistema, com horário e detalhes.\",\n  \"Request Log\": \"Registo de Requisições\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Visualize requisições mal sucedidas na aplicação, como Página não encontrada (404).\",\n  \"Log Settings\": \"Configurações de registo\",\n  \"Specify which areas should use logging.\": \"Especifique que áreas devem ter registo.\",\n  \"Test message sent.\": \"Mensagem de teste enviada com sucesso.\",\n  \"New Layout\": \"Novo esboço\",\n  \"New Partial\": \"New Partial\",\n  \"New Template\": \"Novo modelo\",\n  \"Template\": \"Modelo\",\n  \"Templates\": \"Modelos\",\n  \"Layouts\": \"Esboços\",\n  \"Partials\": \"Partials\",\n  \"Partial\": \"Partial\",\n  \"Mail Partials\": \"Mail Partials\",\n  \"Layout\": \"Esboço\",\n  \"Mail Layouts\": \"Esboços de e-mail\",\n  \"Unique code used to refer to this template\": \"Código exclusivo utilizado para se referir a este modelo\",\n  \"-- No layout --\": \"-- Sem esboço --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Texto Simples\",\n  \"Disable automatic inline CSS\": \"Disable automatic inline CSS\",\n  \"Options\": \"Options\",\n  \"Subject\": \"Assunto\",\n  \"Email message subject\": \"Assunto da mensagem\",\n  \"Description\": \"Descrição\",\n  \"Drivers Not Installed\": \"Drivers não instalados\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Este método requer que a extensão \\\":plugin\\\" esteja instalada.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Identificador do Evento\",\n  \"Level\": \"Nível\",\n  \"Date & Time\": \"Data & Hora\",\n  \"Message\": \"Mensagem\",\n  \"Logging\": \"Registos\",\n  \"Log Bad Requests\": \"Registar requisições inválidas\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Requisições que requerem a sua atenção, por exemplo erros 404.\",\n  \"Log Theme Changes\": \"Registar alterações de tema\",\n  \"When a change is made to the theme using the backend.\": \"Quado uma alteração é efectuada no tema utilizando o backend.\",\n  \"Log System Events\": \"Registo de eventos de sistema\",\n  \"Store system events in the database in addition to the file-based log.\": \"Armazenar eventos na base de dados além do registo em ficheiro.\",\n  \"Background\": \"Background\",\n  \"Body background\": \"Body background\",\n  \"Content background\": \"Content background\",\n  \"Inner content background\": \"Inner content background\",\n  \"Buttons\": \"Buttons\",\n  \"Button text color\": \"Button text color\",\n  \"Primary button background\": \"Primary button background\",\n  \"Positive button background\": \"Positive button background\",\n  \"Negative button background\": \"Negative button background\",\n  \"Typography\": \"Typography\",\n  \"Header color\": \"Header color\",\n  \"Headings color\": \"Headings color\",\n  \"Text color\": \"Text color\",\n  \"Link color\": \"Link color\",\n  \"Footer color\": \"Footer color\",\n  \"Borders\": \"Borders\",\n  \"Body border color\": \"Body border color\",\n  \"Subcopy border color\": \"Subcopy border color\",\n  \"Table border color\": \"Table border color\",\n  \"Components\": \"Components\",\n  \"Panel background\": \"Panel background\",\n  \"Promotion background\": \"Promotion background\",\n  \"Promotion border color\": \"Promotion border color\",\n  \"Customize Mail Appearance\": \"Customize Mail Appearance\",\n  \"Version\": \"Versão\",\n  \"Enabled\": \"Enabled\",\n  \"Latest\": \"Latest\",\n  \"Log ID\": \"ID do registo\",\n  \"Counter\": \"Contador\",\n  \"Referers\": \"Referências\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Este registo mostra a lista dos potenciais erros que ocorreram na aplicação, como exceções e informações de depuração.\",\n  \"Event\": \"Evento\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Este registro mostra uma lista de requisições que requerem atenção. Por exemplo, se um utilizador solicitar uma página não encontrada, será registado com o status 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Requisição\",\n  \"Event log emptied\": \"Registo de eventos esvaziado com sucesso.\",\n  \"Empty Event Log\": \"Esvaziar registo de eventos\",\n  \"Emptying Event Log...\": \"Esvaziando registo de eventos...\",\n  \"Return to Event Log\": \"Regressar ao registo de eventos\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Tem a certeza?\",\n  \"Reset Plugin Data\": \"Reset Plugin Data\",\n  \"Enable Plugins\": \"Enable Plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Are you sure you want to :action these plugins?\",\n  \"enable\": \"enable\",\n  \"disable\": \"disable\",\n  \"Disable Plugins\": \"Disable Plugins\",\n  \"Select Action...\": \"Select Action...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Extensão removida do sistema de ficheiros.\",\n  \"search plugins to install...\": \"Procurar extensão para instalar...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"Procurar temas para instalar...\",\n  \"Install Theme\": \"Instalar tema\",\n  \"Theme Name\": \"Nome do Tema\",\n  \"Install Plugin\": \"Instalar extensão\",\n  \"Plugin Name\": \"Nome da extensão\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Nomeie a extensão pelo seu código exclusivo. Por exemplo, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"O nome do tema deve ser único. Por exemplo, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\"\n}\n"
  },
  {
    "path": "modules/system/lang/ro/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatare',\n        'quote' => 'Citat',\n        'code' => 'Cod',\n        'header1' => 'Antet 1',\n        'header2' => 'Antet 2',\n        'header3' => 'Antet 3',\n        'header4' => 'Antet 4',\n        'header5' => 'Antet 5',\n        'header6' => 'Antet 6',\n        'bold' => 'Îngroșat',\n        'italic' => 'Italic',\n        'unorderedlist' => 'Listă neordonată',\n        'orderedlist' => 'Listă ordonată',\n        'video' => 'Video',\n        'image' => 'Imagine',\n        'link' => 'Link',\n        'horizontalrule' => 'Introdu linie orizontală',\n        'fullscreen' => 'Umple ecranul',\n        'preview' => 'Previzualizează',\n    ],\n\n    'mediamanager' => [\n        'insert_link' => \"Introdu link\",\n        'insert_image' => \"Introdu image\",\n        'insert_video' => \"Introdu video\",\n        'insert_audio' => \"Introdu audio\",\n        'invalid_file_empty_insert' => \"Selectează un fișier către care să se facă legătura.\",\n        'invalid_file_single_insert' => \"Selectează un singur fișier.\",\n        'invalid_image_empty_insert' => \"Alege imaginile pentru a fi introduse.\",\n        'invalid_video_empty_insert' => \"Alege un fișier video pentru a fi introdus.\",\n        'invalid_audio_empty_insert' => \"Alege un fișier video pentru a fi introdus.\",\n    ],\n\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Anulează',\n    ],\n\n];\n"
  },
  {
    "path": "modules/system/lang/ro/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Intoarcerea la elementele de baza',\n  ],\n  'directory' => [\n    'create_fail' => 'Nu se poate crea directorul: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Nu se poate crea fisierul: :name',\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistem',\n    'menu_label' => 'Sistem',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Altele',\n      'logs' => 'Jurnal',\n      'mail' => 'Mail',\n      'shop' => 'Magazin',\n      'team' => 'Echipa',\n      'users' => 'Utilizatori',\n      'system' => 'Sistem',\n      'social' => 'Social',\n      'events' => 'Evenimente',\n      'customers' => 'Clienti',\n      'my_settings' => 'Setarile mele',\n    ],\n  ],\n  'plugin' => [\n    'unnamed' => 'Plugin fara nume',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Activare sau dezactivare',\n    'enable_or_disable_title' => 'Activare sau dezactivare plugin-uri',\n    'remove' => 'Inlaturare',\n    'refresh' => 'Reimprospatare',\n    'disabled_label' => 'Dezactivat',\n    'disabled_help' => 'Plugin-urile care sunt dezactivate sunt ignorate de catre aplicatie.',\n    'selected_amount' => 'Plugin-uri selectate: :amount',\n    'remove_success' => 'Plugin-urile respective au fost inlaturate cu succes din sistem.',\n    'refresh_success' => 'Plugin-urile respective au fost actualizate cu succes.',\n    'disable_success' => 'Plugin-urile respective au fost dezactivate cu succes.',\n    'enable_success' => 'Plugin-urile respective au fost activate cu succes.',\n  ],\n  'project' => [\n    'attach' => 'Atasare Proiect',\n    'detach' => 'Detasare Proiect',\n    'none' => 'Niciunul',\n    'id' => [\n      'missing' => 'Va rugam sa specificati un ID de Proiect.',\n    ],\n    'detach_confirm' => 'Sunteti sigur(a) ca doriti sa detasati acest proiect?',\n    'unbind_success' => 'Proiectul a fost detasat cu succes.',\n  ],\n  'settings' => [\n    'search' => 'Cautare',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Conexiune SSL necesara',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Nume unic folosit ca referinta la acest sablon',\n    'test_send' => 'Trimitere mesaj de test',\n    'return' => 'Intoarcere la lista de sabloane',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Versiune :build',\n    'core_build_help' => 'Ultima versiune este disponibila.',\n    'plugin_version_none' => 'Plugin nou',\n    'theme_new_install' => 'Instalare tema noua.',\n    'theme_extracting' => 'Se dezarhiveaza tema: :name',\n    'update_label' => 'Actualizare software',\n    'update_loading' => 'Se incarca actualizarile disponibile...',\n    'force_label' => 'Forteaza actualizarea',\n    'found' => [\n      'label' => 'Au fost gasite noi actualizari!',\n      'help' => 'Apasati pe \"Actualizare software\" pentru a incepe procesul de actualizare.',\n    ],\n    'none' => [\n      'label' => 'Nu exista actualizari',\n      'help' => 'Nu au fost gasite actualizari disponibile.',\n    ],\n  ],\n  'server' => [\n    'connect_error' => 'Eroare la conectarea la server.',\n    'response_not_found' => 'Serverul de actualizari nu a putut fi contactat.',\n    'response_invalid' => 'Raspuns invalid de la server.',\n    'response_empty' => 'Raspuns gol de la server.',\n    'file_error' => 'Serverul a esuat sa livreze pachetul software.',\n    'file_corrupt' => 'Fisierul de pe server este corupt.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Clasa :class trebuie sa defineasca proprietatea $:property folosita pentru caracteristica :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Nu a fost gasit fisierul de configurare :file definit pentru :location.',\n    'required' => 'Configuratia folosita in :location trebuie sa furnizeze o valoare \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Nu s-a putut extrage fisierul de baza \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Golire jurnal de cereri',\n    'empty_loading' => 'Se goleste jurnalul de cereri...',\n    'empty_success' => 'Jurnalul cu cereri a fost golit cu succes.',\n    'return_link' => 'Intoarcere la jurnal de cereri',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'manage_system_settings' => 'Gestioneaza setarile sistemului',\n    'manage_software_updates' => 'Gestioneaza actualizarile software',\n    'manage_mail_templates' => 'Gestioneaza sabloanele de email',\n    'manage_other_administrators' => 'Gestioneaza alti administratori',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/ro/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \"Atributul :attribute trebuie sa fie acceptat.\",\n    \"active_url\"       => \"Atributul :attribute nu este un URL valid.\",\n    \"after\"            => \"Atributul :attribute trebuie sa fie o data dupa data de :date.\",\n    \"alpha\"            => \"Atributul :attribute poate sa contina doar litere.\",\n    \"alpha_dash\"       => \"Atributul :attribute poate sa contina doar litere, numere, si liniute.\",\n    \"alpha_num\"        => \"Atributul :attribute poate sa contina doar litere si numere.\",\n    \"array\"            => \"Atributul :attribute trebuie sa fie de tip array.\",\n    \"before\"           => \"Atributul :attribute trebuie sa fie o data inainte de data de :date.\",\n    \"between\"          => [\n        \"numeric\" => \"Atributul :attribute trebuie sa fie intre :min - :max.\",\n        \"file\"    => \"Atributul :attribute trebuie sa fie intre :min - :max kilobytes.\",\n        \"string\"  => \"Atributul :attribute trebuie sa fie intre :min - :max caractere.\",\n        \"array\"   => \"Atributul :attribute trebuie sa aiba intre :min - :max elemente.\",\n    ],\n    \"confirmed\"        => \"Atributul :attribute de confirmare nu se potriveste.\",\n    \"date\"             => \"Atributul :attribute nu este o data valida.\",\n    \"date_format\"      => \"Atributul :attribute nu se potriveste cu formatul :format.\",\n    \"different\"        => \"Atributele :attribute si :other trebuie sa fie diferite.\",\n    \"digits\"           => \"Atributul :attribute trebuie sa aiba :digits cifre.\",\n    \"digits_between\"   => \"Atributul :attribute trebuie sa fie intre :min si :max cifre.\",\n    \"email\"            => \"Formatul atributului :attribute este invalid.\",\n    \"exists\"           => \"Atributul selectat :attribute este invalid.\",\n    \"image\"            => \"Atributul :attribute trebuie sa fie o imagine.\",\n    \"in\"               => \"Atributul selectat :attribute este invalid.\",\n    \"integer\"          => \"Atributul :attribute trebuie sa fie un numar.\",\n    \"ip\"               => \"Atributul :attribute trebuie sa fie o adresa IP valida.\",\n    \"max\"              => [\n        \"numeric\" => \"Atributul :attribute nu poate fi mai mare de :max.\",\n        \"file\"    => \"Atributul :attribute nu poate fi mai mare de :max kilobytes.\",\n        \"string\"  => \"Atributul :attribute nu poate fi mai mare de :max caractere.\",\n        \"array\"   => \"Atributul :attribute nu poate avea mai mult de :max elemente.\",\n    ],\n    \"mimes\"            => \"Atributul :attribute trebuie sa fie un fisier de tipul: :values.\",\n    \"min\"              => [\n        \"numeric\" => \"Atributul :attribute trebuie sa aiba cel putin :min caractere\",\n        \"file\"    => \"Atributul :attribute trebuie sa aiba cel putin :min kilobytes.\",\n        \"string\"  => \"Atributul :attribute trebuie sa aiba cel putin :min caractere.\",\n        \"array\"   => \"Atributul :attribute trebuie sa aiba cel putin :min elemente.\",\n    ],\n    \"not_in\"           => \"Atributul selectat :attribute este invalid.\",\n    \"numeric\"          => \"Atributul :attribute trebuie sa fie un numar.\",\n    \"regex\"            => \"Formatul atributului :attribute este invalid.\",\n    \"required\"         => \"Campul atributului :attribute este necesar.\",\n    \"required_if\"      => \"Campul atributului :attribute este necesar cand atributul :other are valoarea :value.\",\n    \"required_with\"    => \"Campul atributului :attribute este necesar cand valorea :values este prezenta.\",\n    \"required_without\" => \"Campul atributului :attribute este necesar cand valoarea :values nu este prezenta.\",\n    \"same\"             => \"Atributele :attribute si :other trebuie sa corespunda.\",\n    \"size\"             => [\n        \"numeric\" => \"Atributul :attribute trebuie sa aiba dimensiunea :size.\",\n        \"file\"    => \"Atributul :attribute trebuie sa aiba dimensiunea :size kilobytes.\",\n        \"string\"  => \"Atributul :attribute trebuie sa aiba :size caractere.\",\n        \"array\"   => \"Atributul :attribute trebuie sa contina :size elemente.\",\n    ],\n    \"unique\"           => \"Atributul :attribute exista deja.\",\n    \"url\"              => \"Formatul atributului :attribute este invalid.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/ro.json",
    "content": "{\n  \"Check For Updates\": \"Cauta actualizari disponibile\",\n  \"Install Packages\": \"Instalați pachete\",\n  \"Manage Themes\": \"Gestionați teme\",\n  \"Manage Plugins\": \"Gestionare plugin-uri\",\n  \"Project\": \"Proiect\",\n  \"Owner\": \"Proprietar\",\n  \"Plugins\": \"Pluginuri\",\n  \"Recommended\": \"Recomandat\",\n  \"Disabled\": \"Dezactivat\",\n  \"Current Build\": \"Versiune curenta\",\n  \"Updates Available\": \"Actualizări disponibile\",\n  \"Up to Date\": \"La zi\",\n  \"Latest Build\": \"Ultima versiune\",\n  \"View Changelog\": \"Vizualizați jurnalul de modificări\",\n  \"Software Updates\": \"Actualizari\",\n  \"Update the system modules and plugins.\": \"Actualizati sistemul, gestionati si instalati plugin-uri si teme.\",\n  \"General\": \"General\",\n  \"Mail\": \"Poștă\",\n  \"Utilities\": \"Utilități\",\n  \"Settings\": \"Setari\",\n  \"Show All Settings\": \"Afișați toate setările\",\n  \"Unable to find the specified settings.\": \"Nu se pot găsi setările specificate.\",\n  \"The settings page is missing a Model definition.\": \"Paginii de setari ii lipseste o definitie de Model.\",\n  \":name settings updated\": \"Setarile pentru :name au fost actualizate cu succes.\",\n  \"Return to System Settings\": \"Intoarcere la setarile sistemului.\",\n  \"Search Settings...\": \"Găsiți o setare...\",\n  \"Disable mail branding CSS\": \"Dezactivați CSS de branding de e-mail\",\n  \"Manage Sites\": \"Gestionați site-urile\",\n  \"Manage the websites available for this application.\": \"Gestionați site-urile web disponibile pentru această aplicație.\",\n  \"Marketplace\": \"Piata de desfacere\",\n  \"There is no documentation provided.\": \"Nu există documente furnizate.\",\n  \"Documentation\": \"Documentație\",\n  \"Upgrade Guide\": \"Ghid de actualizare\",\n  \"License\": \"Licență\",\n  \"Attach to Project\": \"Atasare la Proiect\",\n  \"Manage Updates\": \"Gestioneaza Actualizari\",\n  \"Software Update\": \"Actualizare Software\",\n  \"Return to Software Updates\": \"Reveniți la Actualizări de sistem\",\n  \"Try Again\": \"Incercati din nou\",\n  \"Unpacking application files\": \"Se dezarhiveaza fisierele aplicatiei\",\n  \"Update Failed\": \"Actualizarea a esuat\",\n  \"Unpacking plugin: :name\": \"Se dezarhiveaza plugin-ul: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Site-ul principal este utilizat implicit și nu poate fi șters.\",\n  \"Disabled sites are not shown on the frontend.\": \"Site-urile dezactivate nu sunt afișate pe front-end.\",\n  \"Enabled in the Admin Panel\": \"Activat în panoul de administrare\",\n  \"Configuration\": \"Configurare\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Utilizați acest lucru dacă doriți ca site-ul să fie activat în panoul de administrare.\",\n  \"Install\": \"Instalare\",\n  \"Sync Project\": \"Sincronizare proiect\",\n  \"Name\": \"Nume\",\n  \"Unique Code\": \"Cod unic\",\n  \"Theme\": \"Temă\",\n  \"Sites\": \"Site-uri\",\n  \"Create Site\": \"Creați site\",\n  \"Base URL\": \"Adresa URL de bază\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Valoarea implicită curentă: :value\",\n  \"Locale\": \"Local\",\n  \"Timezone\": \"Fus orar\",\n  \"Custom application URL\": \"Adresa URL personalizată a aplicației\",\n  \"Override the application URL when this site is active.\": \"Ignorați adresa URL a aplicației când acest site este activ.\",\n  \"Use a CMS route prefix\": \"Utilizați un prefix de rută CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Un prefix poate identifica acest site atunci când se utilizează un nume de gazdă partajat.\",\n  \"Define matching hostnames\": \"Definiți nume de gazdă potrivite\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Specificați numele de domenii și modelele care trebuie utilizate pentru a servi acest site.\",\n  \"Display a style for this site\": \"Afișați o culoare pentru acest site\",\n  \"To help identify this site, display a color in the admin panel.\": \"Pentru a ajuta la identificarea acestui site, afișați o culoare în panoul de administrare.\",\n  \"Save\": \"Salvați\",\n  \"Save and Close\": \"Salveaza si inchide\",\n  \"Use Default\": \"Utilizare implicit\",\n  \"Use Custom\": \"Utilizați Personalizat\",\n  \"Specify a custom locale code.\": \"Specificați un cod local personalizat.\",\n  \"Failed\": \"A eșuat\",\n  \"or\": \"sau\",\n  \"Code\": \"Cod\",\n  \"October CMS Marketplace\": \"Piața CMS din octombrie\",\n  \"Visit the :link to add some.\": \"Proiectul nu are pluginuri sau teme. Accesați linkul : pentru a adăuga câteva.\",\n  \"Buy Now\": \"Cumpără acum\",\n  \"Updating package manager\": \"Se actualizează managerul de pachete\",\n  \"Updating application files\": \"Se descarca fisierele aplicatiei\",\n  \"Setting build number\": \"Setarea numărului de build\",\n  \"Finishing update process\": \"Se finalizeaza procesul de actualizare\",\n  \"Installing plugin: :name\": \"Se descarca plugin-ul: :name\",\n  \"Finishing installation process\": \"Se finalizeaza procesul de instalare\",\n  \"Removing theme: :name\": \"Eliminarea temei: :name\",\n  \"Please specify a Theme name to install.\": \"Vă rugăm să specificați un nume de temă de instalat.\",\n  \"Installing theme: :name\": \"Se descarca tema: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Se elimină pluginul: :name\",\n  \"Please specify a Plugin name to install.\": \"Va rugam sa specificati un nume de Plugin pentru instalare.\",\n  \"Update process complete\": \"Procesul de actualizare a fost finalizat cu succes.\",\n  \"Package installed successfully\": \"Acest plugin a fost instalat cu succes.\",\n  \"Check Dependencies\": \"Verificați dependențe\",\n  \"Install Dependencies\": \"Instalați dependențe\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Lipsesc dependențe necesare pentru ca sistemul să funcționeze corect.\",\n  \"License Key\": \"Cheie de licență\",\n  \"How to find your License Key\": \"Cum să vă găsiți cheia de licență\",\n  \"The password attribute is required.\": \"Atributul parolei este obligatoriu.\",\n  \"The login attribute is required.\": \"Atributul de conectare este obligatoriu.\",\n  \"Cannot login user since they are not activated.\": \"Nu se poate autentifica utilizatorul deoarece nu sunt activați.\",\n  \"Cannot login user since they are banned.\": \"Nu se poate autentifica utilizatorul deoarece este interzis.\",\n  \"Cannot login user since they are suspended.\": \"Nu se poate autentifica utilizatorul deoarece sunt suspendați.\",\n  \"A user was not found with the given credentials.\": \"Nu a fost găsit un utilizator cu acreditările date.\",\n  \"A user was found but the password did not match.\": \"A fost găsit un utilizator, dar parola nu se potrivește.\",\n  \"User is not logged in\": \"Utilizatorul nu este autentificat\",\n  \"Register Software\": \"Înregistrați software-ul\",\n  \"View the Dashboard\": \"Vizualizare panou de control\",\n  \"Set the Default Dashboard\": \"Setați tabloul de bord implicit\",\n  \"Log File\": \"Fișier jurnal\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"A LUI\",\n  \"Postmark\": \"Marca poștală\",\n  \"No encryption\": \"Fără criptare\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Configuratie Email\",\n  \"Manage email configuration.\": \"Administrare configuratie email.\",\n  \"Sender Name\": \"Nume expeditor\",\n  \"Sender Email\": \"Email expeditor\",\n  \"Mail Method\": \"Metoda trimitere email\",\n  \"SMTP Address\": \"Adresa SMTP\",\n  \"SMTP Port\": \"Port SMTP\",\n  \"SMTP Encryption Protocol\": \"Protocol de criptare SMTP\",\n  \"SMTP Authorization Required\": \"Autorizatie SMTP necesara\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Utilizati aceasta bifa daca serverul SMTP necesita autorizatie.\",\n  \"Username\": \"Utilizator\",\n  \"Password\": \"Parola\",\n  \"Sendmail Path\": \"Cale catre Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Va rugam sa specificati calea catre programul sendmail.\",\n  \"Mailgun Domain\": \"Domeniul Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Vă rugăm să specificați numele domeniului Mailgun.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"Introduceți cheia API Mailgun.\",\n  \"SES Key\": \"Cheia SES\",\n  \"Enter your SES API key\": \"Introduceți cheia dvs. SES API\",\n  \"SES Secret\": \"Secretul SES\",\n  \"Enter your SES API secret key\": \"Introduceți cheia dvs. secretă SES API\",\n  \"SES Region\": \"Regiunea SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Introduceți regiunea dvs. SES (de exemplu, us-east-1)\",\n  \"Postmark Token\": \"Jeton de timbru poștal\",\n  \"Enter your Postmark API secret key\": \"Introduceți cheia dvs. secretă Postmark API\",\n  \"Define administrator roles\": \"Definiți rolurile de administrator\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restricționați accesul la acest site numai la administratorul cu următoarele roluri.\",\n  \"Group\": \"Grup\",\n  \"Create Group\": \"Creează grup\",\n  \"Site Group\": \"Grup site\",\n  \"Site Groups\": \"Grupuri site\",\n  \"Manage Site Groups\": \"Gestionează grupurile\",\n  \"Group Name\": \"Denumire grup\",\n  \"All Sites\": \"Toate site-urile\",\n  \"Manage Backend Preferences\": \"Preferinte administrare\",\n  \"Manage Code Editor Preferences\": \"Gestionați preferințele editorului de cod\",\n  \"Customize Backend Styles\": \"Personalizează Panoul de Administrare\",\n  \"Mail Templates\": \"Sabloane email\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Modificati sabloanele de email care sunt trimise catre utilizatori si administratori, administrati aspectul email-urilor.\",\n  \"Mail Branding\": \"Mail Branding\",\n  \"Modify the colors and appearance of mail templates.\": \"Modifică culorile și aspectul șabloanelor de e-mail.\",\n  \"Event Log\": \"Jurnal evenimente\",\n  \"View system log messages with their recorded time and details.\": \"Vizualizati mesajele jurnalului de sistem cu inregistrarile de timp si detaliile aferente.\",\n  \"Request Log\": \"Jurnal cereri\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Vizualizare cereri esuate sau redirectate, precum Pagini care nu au fost gasite (404).\",\n  \"Log Settings\": \"Setări log-uri\",\n  \"Specify which areas should use logging.\": \"Specifică zonele care trebuie să folosească loguri.\",\n  \"Test message sent.\": \"Mesajul de test a fost trimis cu succes.\",\n  \"New Layout\": \"Macheta noua\",\n  \"New Partial\": \"Parțial nou\",\n  \"New Template\": \"Sablon nou\",\n  \"Template\": \"Sablon\",\n  \"Templates\": \"Sabloane\",\n  \"Layouts\": \"Machete\",\n  \"Partials\": \"Parțiale\",\n  \"Partial\": \"Parțial\",\n  \"Mail Partials\": \"Parțiale Mail\",\n  \"Layout\": \"Macheta\",\n  \"Mail Layouts\": \"Machete email\",\n  \"Unique code used to refer to this template\": \"Cod unic folosit ca referinta la acest sablon\",\n  \"-- No layout --\": \"-- Fără layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Text simplu\",\n  \"Disable automatic inline CSS\": \"Dezactivează inline CSS\",\n  \"Options\": \"Opțiuni\",\n  \"Subject\": \"Subiect\",\n  \"Email message subject\": \"Subiect mesaj Email\",\n  \"Description\": \"Descriere\",\n  \"Drivers Not Installed\": \"Drivere neinstalate\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Această metodă de e-mail necesită ca plugin-ul \\\":plugin\\\" să fie instalat înainte de a putea trimite mesaje.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID eveniment\",\n  \"Level\": \"Nivel\",\n  \"Date & Time\": \"Data & Ora\",\n  \"Message\": \"Mesaj\",\n  \"Logging\": \"Loguri\",\n  \"Log Bad Requests\": \"Log Bad Requests\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Browser requests that may require attention, such as 404 errors.\",\n  \"Log Theme Changes\": \"Log Theme Changes\",\n  \"When a change is made to the theme using the backend.\": \"When a change is made to the theme using the backend.\",\n  \"Log System Events\": \"Log System Events\",\n  \"Store system events in the database in addition to the file-based log.\": \"Store system events in the database in addition to the file-based log.\",\n  \"Background\": \"Background\",\n  \"Body background\": \"Body background\",\n  \"Content background\": \"Content background\",\n  \"Inner content background\": \"Inner content background\",\n  \"Buttons\": \"Buttons\",\n  \"Button text color\": \"Button text color\",\n  \"Primary button background\": \"Primary button background\",\n  \"Positive button background\": \"Positive button background\",\n  \"Negative button background\": \"Negative button background\",\n  \"Typography\": \"Typography\",\n  \"Header color\": \"Header color\",\n  \"Headings color\": \"Headings color\",\n  \"Text color\": \"Text color\",\n  \"Link color\": \"Link color\",\n  \"Footer color\": \"Footer color\",\n  \"Borders\": \"Borders\",\n  \"Body border color\": \"Body border color\",\n  \"Subcopy border color\": \"Subcopy border color\",\n  \"Table border color\": \"Table border color\",\n  \"Components\": \"Components\",\n  \"Panel background\": \"Panel background\",\n  \"Promotion background\": \"Promotion background\",\n  \"Promotion border color\": \"Promotion border color\",\n  \"Customize Mail Appearance\": \"Customize Mail Appearance\",\n  \"Version\": \"Versiune\",\n  \"Enabled\": \"Enabled\",\n  \"Latest\": \"Latest\",\n  \"Log ID\": \"ID Jurnal\",\n  \"Counter\": \"Contor\",\n  \"Referers\": \"Refereri\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Acest jurnal afiseaza o lista de erori potentiale in aplicatie, cum ar fi exceptii sau informatie pentru depanare.\",\n  \"Event\": \"Event\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Acest jurnal afiseaza o lista de cereri efectuate de browser care pot sa necesite atentie. De exemplu, daca un vizitator deschide o pagina in CMS care nu poate fi gasita, o inregistrare va fi creata cu un cod de status 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Request\",\n  \"Event log emptied\": \"Jurnalul de evenimente a fost golit cu succes.\",\n  \"Empty Event Log\": \"Golire jurnal de evenimente\",\n  \"Emptying Event Log...\": \"Se goleste jurnalul de evenimente...\",\n  \"Return to Event Log\": \"Intoarcere la jurnalul de evenimente\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\",\n  \"Reset Plugin Data\": \"Reset Plugin Data\",\n  \"Enable Plugins\": \"Enable Plugins\",\n  \"Are you sure you want to :action these plugins?\": \"Are you sure you want to :action these plugins?\",\n  \"enable\": \"enable\",\n  \"disable\": \"disable\",\n  \"Disable Plugins\": \"Disable Plugins\",\n  \"Select Action...\": \"Select Action...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Plugin-ul a fost inlaturat din sistemul de fisiere.\",\n  \"search plugins to install...\": \"search plugins to install...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"search themes to install...\",\n  \"Install Theme\": \"Install Theme\",\n  \"Theme Name\": \"Theme Name\",\n  \"Install Plugin\": \"Instalare Plugin\",\n  \"Plugin Name\": \"Nume Plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Denumiti plugin-ul dupa codul sau unic. De exemplu, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Name the theme by its unique code. For example, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\",\n  \"System Updates\": \"Actualizari\",\n  \"Find a Setting...\": \"Găsiți o setare...\",\n  \"Return to System Updates\": \"Reveniți la Actualizări de sistem\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\"\n}"
  },
  {
    "path": "modules/system/lang/rs/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatiranje',\n        'quote' => 'Citat',\n        'code' => 'Kod',\n        'header1' => 'Zaglavlje 1',\n        'header2' => 'Zaglavlje 2',\n        'header3' => 'Zaglavlje 3',\n        'header4' => 'Zaglavlje 4',\n        'header5' => 'Zaglavlje 5',\n        'header6' => 'Zaglavlje 6',\n        'bold' => 'Podebljaj',\n        'italic' => 'Ukosi',\n        'unorderedlist' => 'Neuređena lista',\n        'orderedlist' => 'Uređena lista',\n        'video' => 'Video',\n        'image' => 'Slika',\n        'link' => 'Link',\n        'horizontalrule' => 'Ubaci horizontalnu liniju',\n        'fullscreen' => 'Ceo ekran',\n        'preview' => 'Pregled',\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Ubaci link',\n        'insert_image' => 'Ubaci sliku',\n        'insert_video' => 'Ubaci video zapis',\n        'insert_audio' => 'Ubaci zvučni zapis',\n        'invalid_file_empty_insert' => 'Odaberi fajl za ubacivanje linkova.',\n        'invalid_file_single_insert' => 'Odaberi jedan fajl za ubacivanje.',\n        'invalid_image_empty_insert' => 'Odaberi sliku/slike za ubacivanje.',\n        'invalid_video_empty_insert' => 'Odaberi video zapis za ubacivanje.',\n        'invalid_audio_empty_insert' => 'Odaberi audio zapis za ubacivanje.',\n    ],\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Otkaži',\n        'widget_remove_confirm' => 'Otkloni ovaj posrednički element?',\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Prethodni mesec',\n        'nextMonth' => 'Sledeći mesec',\n        'months' => ['Januar', 'Februar', 'Mart', 'April', 'Maj', 'Juni', 'Juli', 'Avgust', 'Septembar', 'Oktobar', 'Novembar', 'Decembar'],\n        'weekdays' => ['Nedelja', 'Ponedeljak', 'Utorak', 'Sreda', 'Četvrtak', 'Petak', 'Subota'],\n        'weekdaysShort' => ['Ned', 'Pon', 'Uto', 'Sre', 'Čet', 'Pet', 'Sub']\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'sve',\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Primeni',\n            'clear_button_text' => 'Očisti',\n        ],\n        'dates' => [\n            'all' => 'svi',\n            'filter_button_text' => 'Filtriraj',\n            'reset_button_text' => 'Resetuj',\n            'date_placeholder' => 'Datum',\n            'after_placeholder' => 'Pre',\n            'before_placeholder' => 'Posle',\n        ],\n        'numbers' => [\n            'all' => 'svi',\n            'filter_button_text' => 'Filtriraj',\n            'reset_button_text' => 'Resetuj',\n            'min_placeholder' => 'Minimum',\n            'max_placeholder' => 'Maksimum',\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Prikaži trag',\n        'hide_stacktrace' => 'Sakrij trag',\n        'tabs' => [\n            'formatted' => 'Formatiraj',\n            'raw' => 'Izvorno',\n        ],\n        'editor' => [\n            'title' => 'Izvorni kod editora',\n            'description' => 'Vaš operativni sistem treba da bude konfigurisan za osluškivanje ovih URL šema.',\n            'openWith' => 'Otvori sa',\n            'remember_choice' => 'Zapamti izabranu opciju za ovu sesiju',\n            'open' => 'Otvori',\n            'cancel' => 'Otkaži',\n        ],\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/rs/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Povratak osnovama',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'ca' => 'Català',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'ru' => 'Русский',\n    'fi' => 'Suomi',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'rs' => 'Srpski',\n    'th' => 'ไทย',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n    'vn' => 'Tiếng việt',\n  ],\n  'directory' => [\n    'create_fail' => 'Nije moguće napraviti direktorijum: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Nije moguće napraviti fajl: :name',\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistem',\n    'menu_label' => 'Sistem',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Ostalo',\n      'logs' => 'Logovi',\n      'mail' => 'Pošta',\n      'shop' => 'Prodavnica',\n      'team' => 'Tim',\n      'users' => 'Korisnici',\n      'system' => 'Sistem',\n      'social' => 'Društvene mreže',\n      'backend' => 'Pozadinski sistem',\n      'events' => 'Događaji',\n      'customers' => 'Mušterije',\n      'my_settings' => 'Moja podešavanja',\n      'notifications' => 'Obaveštenja',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Tema bez naziva',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Instaliraj teme',\n    'installed' => 'Instalirane teme',\n    'no_themes' => 'Nijedna tema nije instalirana sa tržišta.',\n    'recommended' => 'Preporučene',\n    'remove_confirm' => 'Da li zaista želite da uklonite temu?',\n  ],\n  'plugin' => [\n    'label' => 'Priključak',\n    'unnamed' => 'Neimenovani priključak',\n    'name' => [],\n    'by_author' => 'Od :name',\n  ],\n  'plugins' => [\n    'install' => 'Instaliraj priključke',\n    'install_products' => 'Instaliraj proizvode',\n    'installed' => 'Instalirani priključci',\n    'no_plugins' => 'Nijedan priključak nije instaliran sa tržišta.',\n    'recommended' => 'Preporučeni',\n    'plugin_label' => 'Priključak',\n    'bulk_actions_label' => 'Više radnji',\n    'check_yes' => 'Da',\n    'check_no' => 'Ne',\n    'unfrozen' => 'Uključeno aužuriranje',\n    'freeze' => 'isključi ažuriranje za',\n    'unfreeze' => 'uključi ažuriranje za',\n    'refresh' => 'resetuj',\n    'remove' => 'Ukloni',\n    'freeze_label' => 'Isključi ažuriranje',\n    'unfreeze_label' => 'Uključi ažuriranje',\n    'freeze_success' => 'Uspešno isključeno ažuriranje za izabrane priključke.',\n    'unfreeze_success' => 'Uspešno uključeno ažuriranje za izabrane priključke.',\n    'enable_success' => 'Izabrani priključci su uspešno uključeni.',\n    'disable_success' => 'Izabrani priključci su uspešno isključeni.',\n    'refresh_success' => 'Izabrani priključci su uspešno resetovani.',\n    'remove_confirm' => 'Da li zaista želite da uklonite sledeće priključke? Ovo će takođe ukloniti asocirane podatke.',\n    'remove_success' => 'Izabrani priključci su uspešno uklonjeni.',\n  ],\n  'project' => [\n    'attach' => 'Dodaj projekat',\n    'detach' => 'Odvoji projekat',\n    'none' => 'Nijedan',\n    'id' => [\n      'missing' => 'Specifikuj ID projekta za korišćenje.',\n    ],\n    'detach_confirm' => 'Da li zaista želite da odvojite ovaj projekat?',\n    'unbind_success' => 'Projekat je uspešno odvojen.',\n  ],\n  'settings' => [\n    'search' => 'Traži',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Potrebna SSL konekcija',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikatni naziv za referenciranje ovog šablona.',\n    'test_send' => 'Pošalji testnu poruku',\n    'test_confirm' => 'Pošalji test poruku na :email. Nastavi?',\n    'creating' => 'Pravljenje šablona...',\n    'creating_layout' => 'Pravljenje plana...',\n    'saving' => 'Čuvanje šablona...',\n    'saving_layout' => 'Čuvanje plana...',\n    'delete_confirm' => 'Izbriši ovaj šablon?',\n    'delete_layout_confirm' => 'Izbriši ovaj plan?',\n    'deleting' => 'Brisanje šablona...',\n    'deleting_layout' => 'Brisanje plana...',\n    'sending' => 'Slanje testne poruke...',\n    'return' => 'Povratak na listu šablona',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Zaglavlje',\n      'paragraph' => 'Ovo je paragraf ispunjen prozvoljnim tekstom koji ne znači ništa.',\n      'table' => [\n        'item' => 'Element',\n        'description' => 'Opis',\n        'price' => 'Cena',\n        'centered' => 'Centrirana',\n        'right_aligned' => 'Poravnjana na desno',\n      ],\n      'buttons' => [\n        'primary' => 'Primarno dugme',\n        'positive' => 'Pozitivno dugme',\n        'negative' => 'Negativno dugme',\n      ],\n      'panel' => 'Koliko je fenomenalan ovaj panel?',\n      'more' => 'Još malo teksta',\n      'promotion' => 'Kupon: OKTOBAR',\n      'subcopy' => 'Ovo je podkopija ovog mejla.',\n      'thanks' => 'Hvala',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Priključak nije pronađen',\n    'core_build' => 'Verzija :build',\n    'core_build_help' => 'Novija verzija je dostupna.',\n    'changelog' => 'Lista izmena',\n    'changelog_view_details' => 'Prikaži detalje',\n    'themes' => 'Teme',\n    'plugin_version_none' => 'Novi priključak',\n    'plugin_current_version' => 'Trenutna verzija',\n    'theme_new_install' => 'Instalacija nove teme.',\n    'theme_extracting' => 'Ekstrakcija teme: :name',\n    'update_label' => 'Ažuriranje softvera',\n    'update_loading' => 'Učitavanje mogućih ispravki...',\n    'force_label' => 'Ažuriraj na silu',\n    'found' => [\n      'label' => 'Nove ispravke su pronađene!',\n      'help' => 'Klikni na ažuriraj softver da bi započeo proces.',\n    ],\n    'none' => [\n      'label' => 'Nema ispravki',\n      'help' => 'Nove ispravke nisu pronađene.',\n    ],\n    'important_action' => [\n      'empty' => 'Izaberi radnju',\n      'confirm' => 'Potvrdi ispravke',\n      'skip' => 'Preskoči ovu ispravku (samo jednom)',\n      'ignore' => 'Preskoči ovu ispravku (uvek)',\n    ],\n    'important_action_required' => 'Akcija neophodna',\n    'important_view_guide' => 'Prikaži vodič za nadogradnju',\n    'important_view_release_notes' => 'Prikaži beleške o izdanju',\n    'important_alert_text' => 'Neke ispravke zahtevaju vašu pažnju.',\n    'details_title' => 'Detalji priključka',\n    'details_view_homepage' => 'Prikaži početnu stranicu',\n    'details_changelog' => 'Lista izmena',\n    'details_changelog_missing' => 'Nema liste izmena.',\n    'details_current_version' => 'Trenutna verzija',\n    'details_author' => 'Autor',\n  ],\n  'server' => [\n    'connect_error' => 'Greška pri povezivanju na server.',\n    'response_not_found' => 'Server za ispravke nije pronađen.',\n    'response_invalid' => 'Odgovor servera nije validan.',\n    'response_empty' => 'Odgovor servera je prazan.',\n    'file_error' => 'Server nije uspeo da dopremi paket.',\n    'file_corrupt' => 'Fajl sa servera je korumpiran.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Klasa :class mora definisati svojstvo $:property korišćeno od strane :behavior ponašanja.',\n  ],\n  'config' => [\n    'not_found' => 'Konfiguracioni fajl :file za definisanu :location lokaciju nije mogao biti pronađen.',\n    'required' => 'Konfiguracija korišćena u :location lokaciji mora obezbediti vrednost za \\':property\\' svojstvo.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Ekstrakcija glavnog fajla \\':file\\' nije moguća.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Isprazni log zahteva',\n    'empty_loading' => 'Pražnjenje loga zahteva...',\n    'empty_success' => 'Log zahteva je ispražnjen',\n    'return_link' => 'Nazad na log zahteva',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistem',\n    'manage_system_settings' => 'Upravljaj sistemskim podešavanjima',\n    'manage_software_updates' => 'Upravljaj softverskim ispravkama',\n    'access_logs' => 'Prikaži sistemske logove',\n    'manage_mail_templates' => 'Upravljaj šablonima pošte',\n    'manage_mail_settings' => 'Upravljaj podešavanjima pošte',\n    'manage_other_administrators' => 'Upravljaj drugim administratorima',\n    'impersonate_users' => 'Oponašaj korisnike',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Specificirana putanja fajla nije validna: \\':path\\'.',\n    'folder_size_items' => 'element(i)',\n  ],\n  'page' => [\n    'custom_error' => [\n      'label' => 'Greška kod stranice',\n      'help' => 'Žao nam je, nešto je pošlo po zlu i željena stranica se ne može prikazati.',\n    ],\n    'invalid_token' => [\n      'label' => 'Bezbednosni žeton nije validan.',\n    ],\n    'maintenance' => [\n      'label' => 'Odmah se vraćamo!',\n      'help' => 'Sajt je u fazi održavanja, dođite kasnije!',\n      'message' => 'Poruka:',\n      'available_at' => 'Pokušajte ponovo za:',\n    ],\n  ],\n  'pagination' => [\n    'previous' => 'Prošla',\n    'next' => 'Sledeća',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/rs/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'             => 'Polje :attribute mora biti prihvaćeno.',\n    'active_url'           => 'Polje :attribute mora sadržati validan URL.',\n    'after'                => 'Polje :attribute mora sadržati datum koji je posle sledećeg: :date.',\n    'after_or_equal'       => 'Polje :attribute mora sadržati datum koji je posle sledećeg ili: :date.',\n    'alpha'                => 'Polje :attribute mora sadržati samo slova.',\n    'alpha_dash'           => 'Polje :attribute može sadržati samo slova, brojeve, i povlake',\n    'alpha_num'            => 'Polje :attribute može sadržati samo slova ili brojeve.',\n    'array'                => 'Polje :attribute mora sadržati niz.',\n    'before'               => 'Polje :attribute mora sadržati datum koji je pre sledećeg: :date.',\n    'before_or_equal'      => 'Polje :attribute mora sadržati datum koji je pre sledećeg ili: :date.',\n    'between'              => [\n        'numeric' => 'Polje :attribute mora sadržati broj između :min i :max.',\n        'file'    => 'Polje :attribute mora sadržati fajl veličine između :min i :max kilobajta.',\n        'string'  => 'Polje :attribute mora sadržati tekst dužine između :min i :max karaktera.',\n        'array'   => 'Polje :attribute mora imati između :min i :max elemenata.',\n    ],\n    'boolean'              => 'Polje :attribute mora imati vrednost tačno ili netačno.',\n    'confirmed'            => 'Potvrda :attribute nije u odgovarajućem formatu.',\n    'date'                 => 'Polje :attribute ne sadrži validan datum.',\n    'date_format'          => 'Polje :attribute ne sadrži datum u odgovarajućem formatu :format.',\n    'different'            => 'Polja :attribute i :other moraju imati različite vrednosti.',\n    'digits'               => 'Polje :attribute mora sadržati :digits cifre.',\n    'digits_between'       => 'Polje :attribute mora sadržati između :min i :max cifre.',\n    'dimensions'           => 'Polje :attribute ne sadrži validne dimenzije.',\n    'distinct'             => 'Polje :attribute sadrži vrednost koja je duplikat.',\n    'email'                => 'Polje :attribute mora sadržati validnu email adresu.',\n    'exists'               => 'Polje :attribute nema validnu vrednost.',\n    'file'                 => 'Polje :attribute mora sadržati fajl.',\n    'filled'               => 'Polje :attribute mora imati vrednost.',\n    'image'                => 'Polje :attribute mora sadržati sliku.',\n    'in'                   => 'Polje :attribute nema validnu vrednost.',\n    'in_array'             => 'Polje :attribute ne sadrži vrednost koja postoji u polju :other.',\n    'integer'              => 'Polje :attribute mora sadržati ceo broj.',\n    'ip'                   => 'Polje :attribute mora sadržati validnu IP adresu.',\n    'ipv4'                 => 'Polje :attribute mora sadržati validnu IPv4 adresu.',\n    'ipv6'                 => 'Polje :attribute mora sadržati validnu IPv6 adresu.',\n    'json'                 => 'Polje :attribute mora sadržati validan JSON objekat.',\n    'max'                  => [\n        'numeric' => 'Polje :attribute ne sme sadržati broj veći od :max.',\n        'file'    => 'Polje :attribute ne sme sadržati fajl veći od :max kilobajta.',\n        'string'  => 'Polje :attribute ne sme sadržati tekst duži od :max karaktera.',\n        'array'   => 'Polje :attribute ne sme imati više od :max elemenata.',\n    ],\n    'mimes'                => 'Polje :attribute mora sadržati fajl tipa: :values.',\n    'mimetypes'            => 'Polje :attribute mora sadržati fajl jednog od sledećih tipova: :values.',\n    'min'                  => [\n        'numeric' => 'Polje :attribute ne sme sadržati broj manji od :min.',\n        'file'    => 'Polje :attribute ne sme sadržati fajl manji od :min kilobajta.',\n        'string'  => 'Polje :attribute ne sme sadržati tekst manji od :min karaktera.',\n        'array'   => 'Polje :attribute ne sme imati manje od :min elemenata.',\n    ],\n    'not_in'               => 'Polje :attribute nema validnu vrednost.',\n    'numeric'              => 'Polje :attribute mora sadržati broj.',\n    'present'              => 'Polje :attribute mora biti prisutno.',\n    'regex'                => 'Format polja :attribute nije validan.',\n    'required'             => 'Polje :attribute je obavezno.',\n    'required_if'          => 'Polje :attribute je obavezno kada :other ima vrednost :value.',\n    'required_unless'      => 'Polje :attribute je obavezno kada vrednost polja :other nije deo :values.',\n    'required_with'        => 'Polje :attribute je obavezno kada su vrednosti :values prisutne.',\n    'required_with_all'    => 'Polje :attribute je obavezno kada su vrednosti :values prisutne.',\n    'required_without'     => 'Polje :attribute je obavezno kada vrednosti :values nisu prisutne.',\n    'required_without_all' => 'Polje :attribute je obavezno kada nijedna od vrednosti :values nije prisutna.',\n    'same'                 => 'Polja :attribute i :other moraju imati iste vrednosti.',\n    'size'                 => [\n        'numeric' => 'Polje :attribute mora sadržati broj :size.',\n        'file'    => 'Polje :attribute mora sadržati fajl od :size kilobajta.',\n        'string'  => 'Polje :attribute mora sadržati tekst od :size karaktera.',\n        'array'   => 'Polje :attribute mora imati :size elemenata.',\n    ],\n    'string'               => 'Polje :attribute mora sadržati tekst.',\n    'timezone'             => 'Polje :attribute mora sadržati validnu vremensku zonu.',\n    'unique'               => 'Polje :attribute mora biti jedinstveno.',\n    'uploaded'             => 'Otpremanje fajla iz polja :attribute je neuspešno.',\n    'url'                  => 'Format polja :attribute nije validan.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'uobičajena-poruka',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n        'name' => 'ime',\n        'password' => 'lozinka',\n        'user' => 'korisnik',\n    ],\n\n];\n"
  },
  {
    "path": "modules/system/lang/rs.json",
    "content": "{\n  \"Check For Updates\": \"Proveri ispravke\",\n  \"Manage Plugins\": \"Upravljaj priključcima\",\n  \"Project\": \"Projekat\",\n  \"Owner\": \"Vlasnik\",\n  \"Plugins\": \"Priključci\",\n  \"Disabled\": \"Isključeni\",\n  \"Current Build\": \"Trenutna verzija\",\n  \"View Changelog\": \"Prikaži listu promena\",\n  \"Software Updates\": \"Ispravke & priključci\",\n  \"Update the system modules and plugins.\": \"Ažuriraj sistem, upravljaj i instaliraj priključke i teme.\",\n  \"Settings\": \"Podešavanja\",\n  \"Unable to find the specified settings.\": \"Nije moguće pronaći navedena podešavanja.\",\n  \"The settings page is missing a Model definition.\": \"Na stranici sa podešavanjima nedostaje definicija modela.\",\n  \":name settings updated\": \"Podešavanje :name je uspešno ažurirano.\",\n  \"Return to System Settings\": \"Nazad na sistemska podešavanja\",\n  \"There is no documentation provided.\": \"Nema dokumentacije.\",\n  \"Documentation\": \"Dokumentacija\",\n  \"Upgrade Guide\": \"Vodič za nadogradnju\",\n  \"License\": \"Licenca\",\n  \"Attach to Project\": \"Dodaj projektu\",\n  \"Project ID\": \"ID projekta\",\n  \"How to find your Project ID\": \"Kako pronaći svoj ID projekta\",\n  \"Manage Updates\": \"Upravljaj ispravkama\",\n  \"Software Update\": \"Ažuriraj softver\",\n  \"Return to Software Updates\": \"Povratak na ažuriranje sistema\",\n  \"Try Again\": \"Pokušaj ponovo\",\n  \"Unpacking application files\": \"Ekstrakcija fajlova aplikacije\",\n  \"Update Failed\": \"Ažuriranje je neuspešno\",\n  \"Unpacking plugin: :name\": \"Ektrakcija priključka: :name\",\n  \"Updating application files\": \"Dopremanje fajlova aplikacije\",\n  \"Setting build number\": \"Postavljanje broja verzije\",\n  \"Finishing update process\": \"Završavanje procesa ažuriranja\",\n  \"Installing plugin: :name\": \"Dopremanje priključka: :name\",\n  \"Finishing installation process\": \"Završavanje instalacionog procesa\",\n  \"Please specify a Theme name to install.\": \"Specificiraj naziv teme za instaliranje.\",\n  \"Installing theme: :name\": \"Dopremanje teme: :name\",\n  \"Please specify a Plugin name to install.\": \"Specificiraj naziv priključka za instaliranje.\",\n  \"Update process complete\": \"Proces ažuriranja je završen\",\n  \"Package installed successfully\": \"Priključak je instaliran uspešno\",\n  \"View the Dashboard\": \"Prikaži kontrolnu tablu\",\n  \"Set the Default Dashboard\": \"Upravljaj osnovama kontrolne table\",\n  \"Log File\": \"Fajl sa logovima\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Bez šifrovanja\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Konfiguracija pošte\",\n  \"Manage email configuration.\": \"Upravljaj konfiguracijom pošte.\",\n  \"Sender Name\": \"Ime pošiljaoca\",\n  \"General\": \"Generalno\",\n  \"Sender Email\": \"Email pošiljaoca\",\n  \"Mail Method\": \"Metod pošte\",\n  \"SMTP Address\": \"SMTP adresa\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"SMTP šifarski protokol\",\n  \"SMTP Authorization Required\": \"Potrebna SMTP autorizacija\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Čekiraj ovo polje ako tvoj server zahteva SMTP autorizaciju.\",\n  \"Username\": \"Korisničko ime\",\n  \"Password\": \"Lozinka\",\n  \"Sendmail Path\": \"Sendmail putanja\",\n  \"Please specify the path of the sendmail program.\": \"Specificiraj putanju Sendmail programa.\",\n  \"Mailgun Domain\": \"Mailgun domen\",\n  \"Please specify the Mailgun domain name.\": \"Specificiraj Mailgun domen.\",\n  \"Mailgun Secret\": \"Mailgun tajna\",\n  \"Enter your Mailgun API key.\": \"Unesi svoj Mailgun API ključ.\",\n  \"SES Key\": \"SES ključ\",\n  \"Enter your SES API key\": \"Unesi svoj SES API ključ.\",\n  \"SES Secret\": \"SES tajna\",\n  \"Enter your SES API secret key\": \"Unesi svoju SES API tajnu.\",\n  \"SES Region\": \"SES region\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Unesi svoj SES region. (e.g. us-east-1)\",\n  \"Postmark Token\": \"Postmark tajna\",\n  \"Enter your Postmark API secret key\": \"Unesi svoju Postmark API tajnu.\",\n  \"Manage Backend Preferences\": \"Upravljaj preferencama pozadinskog sistema\",\n  \"Manage Code Editor Preferences\": \"Upravljaj preferencama editora za kod\",\n  \"Customize Backend Styles\": \"Izmeni pozadinski sistem\",\n  \"Mail Templates\": \"Šabloni pošte\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Izmeni šablone pošte koji se šalju korisnicima i administratorima.\",\n  \"Mail Branding\": \"Brendovanje pošte\",\n  \"Modify the colors and appearance of mail templates.\": \"Modifikuj boje i izgled šablona pošte.\",\n  \"Event Log\": \"Log događaja\",\n  \"View system log messages with their recorded time and details.\": \"Prikaži sistemske poruke sa vremenom i detaljima.\",\n  \"Request Log\": \"Log zahteva\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Prikaži loše ili preusmerene zahteve.\",\n  \"Log Settings\": \"Log podešavanja\",\n  \"Specify which areas should use logging.\": \"Specificiraj oblasti koje se trebaju logovati.\",\n  \"Test message sent.\": \"Test poruka poslata.\",\n  \"New Layout\": \"Novi plan\",\n  \"New Partial\": \"Novi parcijal\",\n  \"New Template\": \"Novi šablon\",\n  \"Template\": \"Šablon\",\n  \"Templates\": \"Šabloni\",\n  \"Layouts\": \"Planovi\",\n  \"Partials\": \"Parcijali\",\n  \"Partial\": \"Parcijal\",\n  \"Mail Partials\": \"Parcijali pošte\",\n  \"Layout\": \"Plan\",\n  \"Mail Layouts\": \"Planovi pošte\",\n  \"Name\": \"Naziv\",\n  \"Code\": \"Kod\",\n  \"Unique code used to refer to this template\": \"Unikatan kod za referenciranje ovog šablona.\",\n  \"-- No layout --\": \"-- Bez plana --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Običan tekst\",\n  \"Disable automatic inline CSS\": \"Isključi automatsko uvođenje CSS-a.\",\n  \"Options\": \"Opcije\",\n  \"Subject\": \"Naslov\",\n  \"Email message subject\": \"Naslov e-pošte.\",\n  \"Description\": \"Opis\",\n  \"Drivers Not Installed\": \"Drajveri nisu instalirani.\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Ovaj metod pošte zahteva instaliranje \\\":plugin\\\" priključka.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID događaja\",\n  \"Level\": \"Nivo\",\n  \"Date & Time\": \"Datum & vreme\",\n  \"Message\": \"Poruka\",\n  \"Logging\": \"Logovanje\",\n  \"Log Bad Requests\": \"Log loših zahteva\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Zahtevi na koje treba obratiti pažnju.\",\n  \"Log Theme Changes\": \"Log izmena kod tema\",\n  \"When a change is made to the theme using the backend.\": \"Kada je tema promenjena preko pozadinskog sistema.\",\n  \"Log System Events\": \"Log sistemskih događaja\",\n  \"Store system events in the database in addition to the file-based log.\": \"Čuvanje sistemskih događaja u bazi podataka pored čuvanja na fajlu.\",\n  \"Background\": \"Pozadina\",\n  \"Body background\": \"Pozadina tela\",\n  \"Content background\": \"Pozadina sadržaja\",\n  \"Inner content background\": \"Pozadina unutrašnjeg sadržaja\",\n  \"Buttons\": \"Dugmići\",\n  \"Button text color\": \"Boja teksta dugmeta\",\n  \"Primary button background\": \"Primarna pozadina dugmeta\",\n  \"Positive button background\": \"Pozitivna pozadina dugmeta\",\n  \"Negative button background\": \"Negativna pozadina dugmeta\",\n  \"Typography\": \"Tipografija\",\n  \"Header color\": \"Boja zaglavlja mejla\",\n  \"Headings color\": \"Boja zaglavlja\",\n  \"Text color\": \"Boja teksta\",\n  \"Link color\": \"Boja linka\",\n  \"Footer color\": \"Boja podnožja\",\n  \"Borders\": \"Ivice\",\n  \"Body border color\": \"Boja ivica tela\",\n  \"Subcopy border color\": \"Boja ivica podkopije\",\n  \"Table border color\": \"Boja ivica tabele\",\n  \"Components\": \"Komponente\",\n  \"Panel background\": \"Pozadina panela\",\n  \"Promotion background\": \"Pozadina promocije\",\n  \"Promotion border color\": \"Boja ivica promocije\",\n  \"Customize Mail Appearance\": \"Izmeni izgled pošte\",\n  \"Version\": \"Verzija\",\n  \"Enabled\": \"Priključak uključen\",\n  \"Status\": \"Status\",\n  \"Log ID\": \"ID zahteva\",\n  \"Counter\": \"Broj\",\n  \"Referers\": \"Reference\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Ovaj log prikazuje spisak potencijalnih grešaka koje se mogu dogoditi tokom rada aplikacije.\",\n  \"Event\": \"Događaj\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Ovaj log prikazuje listu zahteva koji mogu zahtevati vašu pažnju. Na primer, kada posetilac otvori neku stranicu a ona ne postoji.\",\n  \"Request\": \"Zahtev\",\n  \"Event log emptied\": \"Log događaja je ispražnjen\",\n  \"Empty Event Log\": \"Isprazni log događaja\",\n  \"Emptying Event Log...\": \"Pražnjenje loga događaja...\",\n  \"Return to Event Log\": \"Nazad na log događaja\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Da li zaista želite da resetujete sledeće priključke? Ovo će resetovati podatke svakog priključka vraćajući ih na inicijalno stanje.\",\n  \"Reset Plugin Data\": \"Resetuj podatke priključka\",\n  \"Enable Plugins\": \"Uključi priključke\",\n  \"Are you sure you want to :action these plugins?\": \"Da li zaista želite da :action ove priključke?\",\n  \"enable\": \"uključi\",\n  \"disable\": \"isključi\",\n  \"Disable Plugins\": \"Isključi priključke\",\n  \"Select Action...\": \"Izaberi radnju...\",\n  \"Plugin has been removed from the file system.\": \"Priključak je uklonjen sa sistema.\",\n  \"search plugins to install...\": \"traži priključke za instaliranje...\",\n  \"search themes to install...\": \"traži teme za instaliranje...\",\n  \"Install Theme\": \"Instaliraj temu\",\n  \"Theme Name\": \"Naziv teme\",\n  \"Install Plugin\": \"Instaliraj priključak\",\n  \"Plugin Name\": \"Naziv priključka\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Imenuj priključak po njegovom jedinstvenom kodu. Na primer, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Imenuj temu po njenom jedinstvenom kodu. Na primer, RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Kombinovani fajl ':name' nije pronađen.\"\n}"
  },
  {
    "path": "modules/system/lang/ru/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Форматирование',\n        'quote' => 'Цитата',\n        'code' => 'Код',\n        'header1' => 'Заголовок 1',\n        'header2' => 'Заголовок 2',\n        'header3' => 'Заголовок 3',\n        'header4' => 'Заголовок 4',\n        'header5' => 'Заголовок 5',\n        'header6' => 'Заголовок 6',\n        'bold' => 'Жирный шрифт',\n        'italic' => 'Курсив',\n        'unorderedlist' => 'Ненумерованный список',\n        'orderedlist' => 'Нумированный список',\n        'video' => 'Видео',\n        'image' => 'Изображение',\n        'link' => 'Ссылка',\n        'horizontalrule' => 'Вставить горизонтальную черту',\n        'fullscreen' => 'Полный экран',\n        'preview' => 'Предпросмотр'\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Вставить медиа-ссылку\",\n        'insert_image' => \"Вставить медиа-изображение\",\n        'insert_video' => \"Вставить медиа-видео\",\n        'insert_audio' => \"Вставить медиа-аудио\",\n        'invalid_file_empty_insert' => \"Пожалуйста, выберите файл для вставки ссылки.\",\n        'invalid_file_single_insert' => \"Пожалуйста, выберите один файл.\",\n        'invalid_image_empty_insert' => \"Пожалуйста, выберите изображения для вставки.\",\n        'invalid_video_empty_insert' => \"Пожалуйста, выберите видео для вставки.\",\n        'invalid_audio_empty_insert' => \"Пожалуйста, выберите аудио для вставки.\",\n    ],\n    'alert' => [\n        'error' => 'Ошибка',\n        'confirm' => 'Подтвердите',\n        'dismiss' => 'Убрать',\n        'confirm_button_text' => 'Ок',\n        'cancel_button_text' => 'Отмена',\n        'widget_remove_confirm' => 'Удалить этот виджет?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Предыдущий месяц',\n        'nextMonth' => 'Следующий месяц',\n        'months' => ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],\n        'weekdays' => ['Воскресение', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],\n        'weekdaysShort' => ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],\n    ],\n    'colorpicker' => [\n        'choose' => 'ОК',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'все'\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Применить',\n            'clear_button_text'  => 'Очистить'\n        ],\n        'dates' => [\n            'all' => 'все',\n            'filter_button_text' => 'Фильтр',\n            'reset_button_text' => 'Сбросить',\n            'date_placeholder' => 'Дата',\n            'after_placeholder' => 'После',\n            'before_placeholder' => 'До'\n        ],\n        'numbers' => [\n            'all' => 'все',\n            'filter_button_text' => 'Фильтр',\n            'reset_button_text'  => 'Сброс',\n            'min_placeholder' => 'Min',\n            'max_placeholder' => 'Max'\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Показать трассировку стека',\n        'hide_stacktrace' => 'Скрыть трассировку стека',\n        'tabs' => [\n            'formatted' => 'Форматированный',\n            'raw' => 'Исходный'\n        ],\n        'editor' => [\n            'title' => 'Редактор исходного кода',\n            'description' => 'Ваша операционная система должна быть настроена на прослушивание к одной из этих схем URL.',\n            'openWith' => 'Открыть с помощью',\n            'remember_choice' => 'Запомнить выбранный вариант для этой сессии',\n            'open' => 'Открыть',\n            'cancel' => 'Отмена'\n        ],\n    ],\n    'upload' => [\n        'max_files' => 'Вы не можете загрузить больше файлов.',\n        'invalid_file_type' => \"Вы не можете загружать файлы этого типа.\",\n        'file_too_big' => \"Размер файла ({{filesize}}MB) слишком большой. Максимальный размер: {{maxFilesize}}MB.\",\n        'response_error' => \"Сервер ответил {{statusCode}} кодом.\",\n        'remove_file' => \"Удалить файл\",\n    ],\n    'inspector' => [\n        'add' => 'Добавить',\n        'remove' => 'Убрать',\n        'key' => 'Ключ',\n        'value' => 'Значение',\n        'ok' => 'OK',\n        'cancel' => 'Отмена',\n        'items' => 'Элементы',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/ru/lang.php",
    "content": "<?php return [\n  'installer' => [\n    'app_config_section' => 'Конфигурация приложения',\n    'license_section' => 'Лицензионный ключ',\n    'dependencies_section' => 'Установка зависимостей',\n    'demo_section' => 'Демо контент',\n    'locale_select_label' => 'Выберите язык',\n    'locale_select_error' => 'Код языка :code ошибочен, попробуйте еще раз',\n    'app_url_label' => 'URL приложения',\n    'backend_uri_label' => 'URI панели управления',\n    'backend_uri_comment' => 'Чтобы защитить свое приложение, введите иной адрес для доступа к панели администратора.',\n    'license_key_label' => 'Лицензионный ключ',\n    'license_key_comment' => 'Введите лицензионный ключ чтобы продолжить.',\n    'license_thanks_comment' => 'Спасибо за то что пользуетесь October CMS!',\n    'license_expired_comment' => 'Лицензия не оплачена или истекла. Посетите octobercms.com чтобы получить лицензию.',\n    'too_many_failures_label' => 'Слишком много неудачных попыток',\n    'non_interactive_label' => 'Обнаружен не интерактивный режим',\n    'non_interactive_comment' => 'Если вы видите эту ошибку, используйте вместо нее эти не интерактивные команды.',\n    'install_failed_label' => 'Установка не удалась',\n    'install_failed_comment' => 'Пожалуйста попробуйте ввести эти команды вручную.',\n    'database_engine_label' => 'Движок базы данных',\n    'database_host_label' => 'Хост базы данных',\n    'database_host_comment' => 'Хост для подключения к БД.',\n    'database_port_label' => 'Порт базы данных',\n    'database_port_comment' => '(Опционально) Порт для подключения к БД.',\n    'database_name_label' => 'Имя базы данных',\n    'database_name_comment' => 'Укажите имя используемой базы данных.',\n    'database_login_label' => 'Логин от пользователя базы данных',\n    'database_login_comment' => 'Пользователь с возможностью создания таблиц',\n    'database_pass_label' => 'Пароль от пользователя базы данных',\n    'database_pass_comment' => 'Пароль для указанного пользователя',\n    'database_path_label' => 'Путь к базе данных',\n    'database_path_comment' => 'Введите путь относительно корневого каталога приложения.',\n    'migrate_database_comment' => 'Пожалуйста, мигрируйте базу данных с помощью следующей команды',\n    'visit_backend_comment' => 'Затем, откройте панель управления по следующему URL',\n    'open_configurator_comment' => 'Откройте приложение в браузере',\n    'install_demo_label' => 'Установить демо шаблон и контент? (Рекомендуется)',\n    'operation_timeout_comment' => 'Время ожидания операции истекло. Пожалуйста увеличте лимит на сервере и попробуйте еще раз.',\n    'operation_timeout_hint' => 'See the relevant documentation for :name.',\n  ],\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Возвращение к истокам',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'ca' => 'Català',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'et' => 'Eesti',\n    'fa' => 'فارسی',\n    'fi' => 'Suomi',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'ru' => 'Русский',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'sv' => 'Svenska',\n    'th' => 'ไทย',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'vn' => 'Tiếng việt',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n  ],\n  'directory' => [\n    'create_fail' => 'Невозможно создать директорию: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Невозможно создать файл: :name',\n  ],\n  'combiner' => [],\n  'resizer' => [],\n  'system' => [\n    'name' => 'Система',\n    'menu_label' => 'Система',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Разное',\n      'logs' => 'Логи',\n      'mail' => 'Почта',\n      'shop' => 'Магазин',\n      'team' => 'Команда',\n      'users' => 'Пользователи',\n      'system' => 'Система',\n      'social' => 'Социальное',\n      'backend' => 'Backend',\n      'events' => 'События',\n      'customers' => 'Клиентское',\n      'my_settings' => 'Мои настройки',\n      'notifications' => 'Уведомления',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Тема',\n    'unnamed' => 'Безымянная тема',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Установить шаблоны',\n    'installed' => 'Установленные шаблоны',\n    'no_themes' => 'Нет шаблонов, установленных из маркетплейса.',\n    'recommended' => 'Рекомендуется',\n    'remove_confirm' => 'Вы уверены, что хотите удалить выбранный шаблон?',\n  ],\n  'plugin' => [\n    'label' => 'Плагин',\n    'unnamed' => 'Безымянный плагин',\n    'name' => [],\n    'by_author' => 'Создано :name',\n  ],\n  'plugins' => [\n    'install' => 'Установить плагины',\n    'install_products' => 'Установка расширений',\n    'installed' => 'Установленные плагины',\n    'no_plugins' => 'Нет плагинов, установленных из маркетплейса.',\n    'recommended' => 'Рекомендуется',\n    'plugin_label' => 'Плагин',\n    'bulk_actions_label' => 'Массовые действия',\n    'check_yes' => 'Да',\n    'check_no' => 'Нет',\n    'unfrozen' => 'Обновления включены',\n    'freeze' => 'отключить обновления для',\n    'unfreeze' => 'включить обновления для',\n    'refresh' => 'сбросить',\n    'remove' => 'Удалить',\n    'freeze_label' => 'Отключить обновления',\n    'unfreeze_label' => 'Включить обновления',\n    'freeze_success' => 'Обновления успешно отключены.',\n    'unfreeze_success' => 'Обновления успешно включены.',\n    'enable_success' => 'Выбранные плагины успешно включены.',\n    'disable_success' => 'Выбранные плагины успешно отключены.',\n    'refresh_success' => 'Выбранные плагины успешно переустановлены.',\n    'remove_confirm' => 'Вы уверены, что хотите удалить выбранные плагины? Это также удалит все связанные с ними данные.',\n    'remove_success' => 'Выбранные плагины успешно удалены.',\n  ],\n  'project' => [\n    'attach' => 'Подключить проект',\n    'detach' => 'Отсоединить проект',\n    'none' => 'Не обнаружено',\n    'id' => [\n      'missing' => 'Пожалуйста, укажите идентификатор вашего проекта для использования.',\n    ],\n    'detach_confirm' => 'Вы уверены, что хотите отсоединить этот проект?',\n    'unbind_success' => 'Проект был успешно отсоединен.',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Использовать SSL',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Уникальное имя, используемое для обозначения этого шаблона',\n    'test_send' => 'Отправить тестовое сообщение',\n    'test_confirm' => 'Тестовое сообщение будет отправлено на :email. Продолжить?',\n    'creating' => 'Создание шаблона...',\n    'creating_layout' => 'Создание макета...',\n    'saving' => 'Сохранение шаблона...',\n    'saving_layout' => 'Сохранение макета...',\n    'delete_confirm' => 'Вы действительно хотите удалить этот шаблон?',\n    'delete_layout_confirm' => 'Вы действительно хотите удалить этот макет?',\n    'deleting' => 'Удаление шаблона...',\n    'deleting_layout' => 'Удаление макета...',\n    'sending' => 'Отправка тестового сообщения...',\n    'return' => 'Вернуться к списку шаблонов',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Заголовок',\n      'paragraph' => 'Это абзац, содержит текст Lorem Ipsum и ссылку. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Пункт',\n        'description' => 'Описание',\n        'price' => 'Цена',\n        'centered' => 'По центру',\n        'right_aligned' => 'По правому краю',\n      ],\n      'buttons' => [\n        'primary' => 'Основная кнопка',\n        'positive' => 'Положительная кнопка',\n        'negative' => 'Отрицательная кнопка',\n      ],\n      'panel' => 'Насколько великолепна эта панель?',\n      'more' => 'Еще один текст',\n      'promotion' => 'Код купона: OCTOBER',\n      'subcopy' => 'Это суб-копия письма',\n      'thanks' => 'Спасибо',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Автор',\n    'plugin_not_found' => 'Плагин не найден',\n    'plugin_version_not_found' => 'Версия плагина не найдена',\n    'theme_not_found' => 'Шаблон не найден',\n    'core_build' => 'Сборка :build',\n    'core_build_help' => 'Последняя доступная сборка.',\n    'changelog' => 'История изменений',\n    'changelog_view_details' => 'Подробнее',\n    'themes' => 'Темы',\n    'plugin_version_none' => 'Новый плагин',\n    'plugin_current_version' => 'Текущая версия',\n    'theme_new_install' => 'Новая тема установлена.',\n    'theme_extracting' => 'Распаковка темы: :name',\n    'update_label' => 'Обновить',\n    'update_loading' => 'Поиск доступных обновлений...',\n    'force_label' => 'Принудительно обновить',\n    'found' => [\n      'label' => 'Доступны новые обновления!',\n      'help' => 'Выберите «Обновить», чтобы начать процесс обновления.',\n    ],\n    'none' => [\n      'label' => 'Нет обновлений',\n      'help' => 'Новые обновления не найдены.',\n    ],\n    'important_action' => [\n      'empty' => 'Выберите действие',\n      'confirm' => 'Подтвердите обновление',\n      'skip' => 'Пропустить этот плагин (только один раз)',\n      'ignore' => 'Пропустить этот плагин (всегда)',\n    ],\n    'important_action_required' => 'Необходимое действие',\n    'important_view_guide' => 'Посмотреть руководство по обновлению',\n    'important_view_release_notes' => 'Просмотреть заметки о выпуске',\n    'important_alert_text' => 'Некоторые обновления требуют вашего внимания.',\n    'details_title_plugin' => 'Информация о плагине',\n    'details_title_theme' => 'Информация о шаблоне',\n    'details_view_homepage' => 'Перейти к домашней странице',\n    'details_changelog' => 'Изменения',\n    'details_changelog_missing' => 'Нет никакого измененного списка.',\n    'details_view_license' => 'Посмотреть лицензию',\n    'details_current_version' => 'Текущая версия',\n    'details_author' => 'Автор',\n  ],\n  'market' => [\n    'menu_description' => 'Управление и установка плагинами и шаблонами.',\n    'content_loading' => 'Загрузка...',\n  ],\n  'server' => [\n    'connect_error' => 'Ошибка подключения к серверу.',\n    'response_not_found' => 'Сервер обновления не найден.',\n    'response_invalid' => 'Неверный ответ сервера.',\n    'response_empty' => 'Пустой ответ сервера.',\n    'file_error' => 'Сервер не смог доставить пакет.',\n    'file_corrupt' => 'Загруженный файл поврежден.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Класс :class должен содержать свойство $:property, используемое расширением :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Не удалось найти конфигурационный файл :file, ожидаемый для :location.',\n    'required' => 'Для конфигурации, используемой в :location не указано свойство \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Невозможно извлечь файл \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Очистить журнал запросов',\n    'empty_loading' => 'Очищение журнала запросов...',\n    'empty_success' => 'Успешное очищение журнала запросов.',\n    'return_link' => 'Вернуться к журналу запросов',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Система',\n    'manage_system_settings' => 'Настройка системных параметров',\n    'manage_software_updates' => 'Управление обновлениями',\n    'access_logs' => 'Просмотр системных логов',\n    'manage_mail_templates' => 'Управление почтовыми шаблонами',\n    'manage_mail_settings' => 'Управление настройками почты',\n    'manage_other_administrators' => 'Управление другими администраторами',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Указан недопустимый путь к файлу: \\':path\\'.',\n    'folder_size_items' => 'объектов',\n  ],\n  'page' => [\n    'not_found' => [\n      'label' => 'Страница не найдена',\n      'help' => 'Невозможно найти запрашиваемую страницу.',\n    ],\n    'custom_error' => [\n      'label' => 'Ошибка на странице',\n      'help' => 'Нам жаль, но что-то пошло не так и страница не может быть отображена.',\n    ],\n    'invalid_token' => [\n      'label' => 'Неправильный токен безопасности',\n    ],\n    'maintenance' => [\n      'label' => 'Мы скоро вернемся!',\n      'help' => 'В настоящее время мы закрыты на техническое обслуживание, вернитесь в ближайшее время!',\n      'message' => 'Подробности:',\n      'available_at' => 'Зайдите к нам после:',\n    ],\n  ],\n  'pagination' => [\n    'previous' => 'Назад',\n    'next' => 'Вперед',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/ru/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'             => 'Поле :attribute должно быть принято.',\n    'active_url'           => 'Поле :attribute неправильный URL.',\n    'after'                => 'Поле :attribute должно быть датой после :date.',\n    'after_or_equal'       => 'Поле :attribute должно быть датой после или равно :date.',\n    'alpha'                => 'Поле :attribute может содержать только буквы.',\n    'alpha_dash'           => 'Поле :attribute может содержать только буквы, цифры и дефис.',\n    'alpha_num'            => 'Поле :attribute может содержать только буквы и цифры.',\n    'array'                => 'Поле :attribute должен быть массивом.',\n    'before'               => 'Поле :attribute должно быть датой до :date.',\n    'before_or_equal'      => 'Поле :attribute должно быть датой до или равно :date.',\n    'between'              => [\n        'numeric' => 'Поле :attribute должно быть между :min до :max.',\n        'file'    => 'Поле :attribute должно быть между :min до :max килобайт.',\n        'string'  => 'Поле :attribute должно быть от :min до :max символов(а).',\n        'array'   => 'Поле :attribute должно иметь от :min до :max элементов(а).',\n    ],\n    'boolean'              => 'Поле :attribute должно быть true или false.',\n    'confirmed'            => 'Поле :attribute не совпадает с подтверждением.',\n    'date'                 => 'Поле :attribute имеет не правильный формат даты.',\n    'date_equals'          => 'Поле :attribute должно быть датой и равно :date.',\n    'date_format'          => 'Поле :attribute должно быть датой в формате :format.',\n    'different'            => 'Поле :attribute и :other должны различаться.',\n    'digits'               => 'Длина цифрового поля :attribute должна быть :digits.',\n    'digits_between'       => 'Длина цифрового поля :attribute должна быть между :min и :max.',\n    'dimensions'           => 'Поле :attribute имеет не верные размеры изображения.',\n    'distinct'             => 'Поле :attribute имеет повторяющееся значение.',\n    'email'                => 'Поле :attribute должно быть действительным адресом эл. почты.',\n    'ends_with'            => 'Поле :attribute должно заканчиваться на: :values.',\n    'exists'               => 'Выбранное значение для :attribute отсутствует.',\n    'file'                 => 'Поле :attribute должно быть файлом.',\n    'filled'               => 'Поле :attribute должно быть заполнено.',\n    'gt'                   => [\n        'numeric' => 'Поле :attribute должно быть больше :value.',\n        'file'    => 'Поле :attribute должно быть больше :value килобайт.',\n        'string'  => 'Поле :attribute должно быть длиннее :value символов(а).',\n        'array'   => 'Поле :attribute должно иметь больше :value элементов(а).',\n    ],\n    'gte'                  => [\n        'numeric' => 'Поле :attribute должно быть больше или равно :value.',\n        'file'    => 'Поле :attribute должно быть больше или равно :value килобайт.',\n        'string'  => 'Поле :attribute должно быть больше или равно :value символов(а).',\n        'array'   => 'Поля :attribute должно содержать больше или равно :value элементов(а).',\n    ],\n    'image'                => 'Поле :attribute должно быть изображением.',\n    'in'                   => 'Выбранное значение для :attribute ошибочно.',\n    'in_array'             => 'Поле :attribute не существует в :other.',\n    'integer'              => 'Поле :attribute должно быть цифрой.',\n    'ip'                   => 'Поле :attribute должно быть действительным IP-адресом.',\n    'ipv4'                 => 'Поле :attribute должно быть действительным IPv4-адресом.',\n    'ipv6'                 => 'Поле :attribute должно быть действительным IPv6-адресом.',\n    'json'                 => 'Поле :attribute должно быть корректной JSON строкой.',\n    'lt'                   => [\n        'numeric' => 'Поле :attribute должно быть меньше :value.',\n        'file'    => 'Поле :attribute должно быть меньше :value килобайт.',\n        'string'  => 'Поле :attribute должно быть меньше :value символов(а).',\n        'array'   => 'Поле :attribute должно содержать меньше :value элементов(а).',\n    ],\n    'lte'                  => [\n        'numeric' => 'Поле :attribute должно быть меньше или равно :value.',\n        'file'    => 'Поле :attribute должно быть меньше или равно :value килобайт.',\n        'string'  => 'Поле :attribute должно быть меньше или равно :value символов(а).',\n        'array'   => 'Поле :attribute должно содержать меньше или равно :value элементов(а).',\n    ],\n    'max'                  => [\n        'numeric' => 'Поле :attribute не может быть больше чем :max.',\n        'file'    => 'Поле :attribute не может быть больше чем :max килобайт.',\n        'string'  => 'Поле :attribute не может быть больше чем :max символов(а).',\n        'array'   => 'Поле :attribute не может содержать больше чем :value элементов(а).',\n    ],\n    'mimes'                => 'Поле :attribute должен быть файлом типа: :values.',\n    'mimetypes'            => 'Поле :attribute должен быть файлом типа: :values.',\n    'min'                  => [\n        'numeric' => 'Поле :attribute должно быть не менее :min.',\n        'file'    => 'Поле :attribute должно быть не менее :min килобайт.',\n        'string'  => 'Поле :attribute должно быть не менее :min символов(а).',\n        'array'   => 'Поле :attribute должно содержать не менее :min элементов(а).',\n    ],\n    'not_in'               => 'Выбранное значение для :attribute ошибочно.',\n    'not_regex'            => 'Поле :attribute имеет неправильный формат.',\n    'numeric'              => 'Поле :attribute должно быть цифрой.',\n    'present'              => 'Должно :attribute должно быть представлено.',\n    'regex'                => 'Поле :attribute имеет неправильный формат.',\n    'required'             => 'Поле :attribute обязательно.',\n    'required_if'          => 'Поле :attribute обязательно если поле :other равно :value.',\n    'required_unless'      => 'Поле :attribute обязательно если поле :other не имеет :values.',\n    'required_with'        => 'Поле :attribute обязательно для заполнения, когда :values указано.',\n    'required_with_all'    => 'Поле :attribute обязательно, когда все :values указаны.',\n    'required_without'     => 'Поле :attribute обязательно, когда :values не указано.',\n    'required_without_all' => 'Поле :attribute обязательно для заполнения, когда все :values не указаны.',\n    'same'                 => 'Поле :attribute и :other должны совпадать.',\n    'size'                 => [\n        'numeric' => 'Поле :attribute должно быть :size.',\n        'file'    => 'Поле :attribute должно быть :size килобайт.',\n        'string'  => 'Поле :attribute должно быть длиной в :size символов(а).',\n        'array'   => 'Поле :attribute должно содержать :size элементов(а).',\n    ],\n    'starts_with'          => 'Поле :attribute должно начинаться с: :values.',\n    'string'               => 'Поле :attribute должно быть символьной строкой.',\n    'timezone'             => 'Поле :attribute должно быть часовым поясом.',\n    'unique'               => 'Поле :attribute уже занято другой записью.',\n    'uploaded'             => 'Поле :attribute неуспешно загрузилось.',\n    'url'                  => 'Поле :attribute имеет ошибочный формат URL.',\n    'uuid'                 => 'Поле :attribute должно быть правильным UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/ru.json",
    "content": "{\n  \"Check For Updates\": \"Проверить наличие обновлений\",\n  \"Install Packages\": \"Установить пакеты\",\n  \"Manage Themes\": \"Управление темами\",\n  \"Manage Plugins\": \"Управление плагинами\",\n  \"Project\": \"Проект\",\n  \"Owner\": \"Владелец\",\n  \"Plugins\": \"Плагины\",\n  \"Recommended\": \"Рекомендуется\",\n  \"Disabled\": \"Отключено\",\n  \"Current Build\": \"Текущая сборка\",\n  \"Updates Available\": \"Доступны обновления\",\n  \"Up to Date\": \"Последняя версия\",\n  \"Latest Build\": \"Последняя сборка\",\n  \"View Changelog\": \"Посмотреть список изменений\",\n  \"Software Updates\": \"Обновления системы\",\n  \"Update the system modules and plugins.\": \"Обновление системных модулей и плагинов.\",\n  \"General\": \"Общее\",\n  \"Mail\": \"Почта\",\n  \"Utilities\": \"Утилиты\",\n  \"Settings\": \"Настройки\",\n  \"Show All Settings\": \"Показать все настройки\",\n  \"Unable to find the specified settings.\": \"Не удается найти указанные настройки.\",\n  \"The settings page is missing a Model definition.\": \"На странице настроек отсутствует определение модели.\",\n  \":name settings updated\": \"Настройки :name успешно обновлены.\",\n  \"Return to System Settings\": \"Вернуться к системным настройкам\",\n  \"Search Settings...\": \"Найти настройки...\",\n  \"Disable mail branding CSS\": \"Отключить CSS для брендинга почты\",\n  \"Manage Sites\": \"Управление сайтами\",\n  \"Manage the websites available for this application.\": \"Управление веб-сайтами, доступными для этого приложения.\",\n  \"Marketplace\": \"Маркетплейс\",\n  \"There is no documentation provided.\": \"Документация не предоставлена.\",\n  \"Documentation\": \"Документация\",\n  \"Upgrade Guide\": \"Инструкция по обновлению\",\n  \"License\": \"Лицензия\",\n  \"Attach to Project\": \"Добавить в проект\",\n  \"Manage Updates\": \"Менеджер обновлений\",\n  \"Software Update\": \"Обновление системы\",\n  \"Return to Software Updates\": \"Вернуться к системе обновлений\",\n  \"Try Again\": \"Попробовать еще раз\",\n  \"Unpacking application files\": \"Распаковка файлов приложения\",\n  \"Update Failed\": \"Не удалось выполнить обновление\",\n  \"Unpacking plugin: :name\": \"Распаковка плагина: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Основной сайт используется по умолчанию и не может быть удален.\",\n  \"Disabled sites are not shown on the frontend.\": \"Отключенные сайты не отображаются на фронтенде.\",\n  \"Enabled in the Admin Panel\": \"Включено в панели администратора\",\n  \"Configuration\": \"Конфигурация\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Используйте это, если хотите, чтобы сайт был активен в панели администратора.\",\n  \"Install\": \"Установить\",\n  \"Sync Project\": \"Синхронизировать проект\",\n  \"Name\": \"Название\",\n  \"Unique Code\": \"Уникальный код\",\n  \"Theme\": \"Тема\",\n  \"Sites\": \"Сайты\",\n  \"Create Site\": \"Создать сайт\",\n  \"Base URL\": \"Базовый URL\",\n  \"Status\": \"Статус\",\n  \"Current default value: :value\": \"Текущее значение по умолчанию: :value\",\n  \"Locale\": \"Язык\",\n  \"Timezone\": \"Часовой пояс\",\n  \"Custom application URL\": \"Пользовательский URL приложения\",\n  \"Override the application URL when this site is active.\": \"Переопределить URL приложения, когда этот сайт активен.\",\n  \"Use a CMS route prefix\": \"Использовать префикс роута CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Префикс может идентифицировать этот сайт при использовании общего имени хоста.\",\n  \"Define matching hostnames\": \"Введите совпадающие имена хостов\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Укажите доменные имена и паттерны, которые должны использоваться для этого сайта.\",\n  \"Display a style for this site\": \"Включить цвет для этого сайта\",\n  \"To help identify this site, display a color in the admin panel.\": \"Чтобы помочь идентифицировать этот сайт, отобразите цвет в панели администратора.\",\n  \"Save\": \"Сохранить\",\n  \"Save and Close\": \"Сохранить и закрыть\",\n  \"Use Default\": \"По умолчанию\",\n  \"Use Custom\": \"Использовать \",\n  \"Specify a custom locale code.\": \"Укажите пользовательский код локали.\",\n  \"Failed\": \"Ошибка\",\n  \"or\": \"или\",\n  \"Code\": \"Код\",\n  \"October CMS Marketplace\": \"Маркетплейс October CMS\",\n  \"Visit the :link to add some.\": \"У проекта нет плагинов или тем. Перейдите в :link, чтобы добавить их.\",\n  \"Buy Now\": \"Купить\",\n  \"Updating package manager\": \"Обновление пакетного менеджера\",\n  \"Updating application files\": \"Обновление файлов приложения\",\n  \"Setting build number\": \"Установка номера сборки\",\n  \"Finishing update process\": \"Завершение процесса обновления\",\n  \"Installing plugin: :name\": \"Загрузка плагина: :name\",\n  \"Finishing installation process\": \"Завершение процесса установки\",\n  \"Removing theme: :name\": \"Удаление темы: :name\",\n  \"Please specify a Theme name to install.\": \"Пожалуйста, укажите название темы для установки.\",\n  \"Installing theme: :name\": \"Установка темы: :name\",\n  \"Extracting theme: :name\": \"Извлечение темы: :name\",\n  \"Seeding theme: :name\": \"Сидинг темы: :name\",\n  \"Removing plugin: :name\": \"Удаление плагина: :name\",\n  \"Please specify a Plugin name to install.\": \"Пожалуйста, укажите название плагина для установки.\",\n  \"Update process complete\": \"Процесс обновления завершен\",\n  \"Package installed successfully\": \"Плагин успешно установлен\",\n  \"Check Dependencies\": \"Проверить зависимости\",\n  \"Install Dependencies\": \"Установить зависимости\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Отсутствуют зависимости, которые необходимы для корректной работы системы.\",\n  \"License Key\": \"Лицензионный ключ\",\n  \"How to find your License Key\": \"Как найти свой лицензионный ключ?\",\n  \"The password attribute is required.\": \"Пароль обязателен.\",\n  \"The login attribute is required.\": \"Логин обязателен.\",\n  \"Cannot login user since they are not activated.\": \"Невозможно авторизоваться так как пользователь не активирован.\",\n  \"Cannot login user since they are banned.\": \"Невозможно авторизоваться так как пользователь заблокирован.\",\n  \"Cannot login user since they are suspended.\": \"Невозможно авторизоваться так как действия пользователя приостановлены.\",\n  \"A user was not found with the given credentials.\": \"Пользователь с указанными данными не найден.\",\n  \"A user was found but the password did not match.\": \"Пользователь найден, но пароль не совпадает.\",\n  \"User is not logged in\": \"Пользователь не авторизован\",\n  \"Register Software\": \"Регистрация ПО\",\n  \"View the Dashboard\": \"Просмотр дашборда\",\n  \"Set the Default Dashboard\": \"Установить дашборд по умолчанию\",\n  \"Log File\": \"Файл журнала\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Без шифрования\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Настройки почты\",\n  \"Manage email configuration.\": \"Управление настройками почты.\",\n  \"Sender Name\": \"Имя отправителя\",\n  \"Sender Email\": \"Адрес отправителя\",\n  \"Mail Method\": \"Способ отправки почты\",\n  \"SMTP Address\": \"SMTP адрес\",\n  \"SMTP Port\": \"SMTP порт\",\n  \"SMTP Encryption Protocol\": \"Протокол шифрования SMTP\",\n  \"SMTP Authorization Required\": \"Использовать SMTP авторизацию\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Активируйте эту опцию, если ваш SMTP-сервер требует авторизацию.\",\n  \"Username\": \"Логин\",\n  \"Password\": \"Пароль\",\n  \"Sendmail Path\": \"Путь к Sendmail\",\n  \"Please specify the path of the sendmail program.\": \"Пожалуйста, укажите путь к sendmail.\",\n  \"Mailgun Domain\": \"Домен Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Пожалуйста, укажите домен Mailgun.\",\n  \"Mailgun Secret\": \"Серекетный ключ Mailgun\",\n  \"Enter your Mailgun API key.\": \"Введите ваш Mailgun API-ключ.\",\n  \"SES Key\": \"SES API-ключ\",\n  \"Enter your SES API key\": \"Введите ваш SES API-ключ\",\n  \"SES Secret\": \"SES секретный API-ключ\",\n  \"Enter your SES API secret key\": \"Введите ваш секретный SES API-ключ\",\n  \"SES Region\": \"SES регион\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Введите свой SES регион (например: us-east-1)\",\n  \"Postmark Token\": \"Postmark токен\",\n  \"Enter your Postmark API secret key\": \"Введите секретный ключ Postmark API\",\n  \"Define administrator roles\": \"Задайте роли администраторов\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Ограничить доступ к этому сайту только администраторам со следующими ролями.\",\n  \"Group\": \"Группа\",\n  \"Create Group\": \"Создать группу\",\n  \"Site Group\": \"Группа сайта\",\n  \"Site Groups\": \"Группы сайтов\",\n  \"Manage Site Groups\": \"Управление группами сайтов\",\n  \"Group Name\": \"Название группы\",\n  \"All Sites\": \"Все сайты\",\n  \"Manage Backend Preferences\": \"Управление настройками панели управления\",\n  \"Manage Code Editor Preferences\": \"Управление настройками редактора кода\",\n  \"Customize Backend Styles\": \"Персонализация панели управления\",\n  \"Mail Templates\": \"Почтовые шаблоны\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Изменение почтовых шаблонов, отправляемых пользователям и администраторам.\",\n  \"Mail Branding\": \"Почтовый брендинг\",\n  \"Modify the colors and appearance of mail templates.\": \"Измените цвета и внешний вид почтовых шаблонов.\",\n  \"Event Log\": \"Журнал событий\",\n  \"View system log messages with their recorded time and details.\": \"Просмотр системного журнала событий.\",\n  \"Request Log\": \"Журнал запросов\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Просмотр неудачных или перенаправленных запросов.\",\n  \"Log Settings\": \"Настройки журналов\",\n  \"Specify which areas should use logging.\": \"Укажите для каких частей CMS следует вести журнал.\",\n  \"Test message sent.\": \"Тестовое сообщение успешно отправлено.\",\n  \"New Layout\": \"Новый шаблон\",\n  \"New Partial\": \"Новый фрагмент\",\n  \"New Template\": \"Новый шаблон\",\n  \"Template\": \"Шаблон\",\n  \"Templates\": \"Шаблоны\",\n  \"Layouts\": \"Шаблоны\",\n  \"Partials\": \"Фрагменты\",\n  \"Partial\": \"Фрагмент\",\n  \"Mail Partials\": \"Почтовые фрагменты\",\n  \"Layout\": \"Шаблон\",\n  \"Mail Layouts\": \"Почтовые шаблоны\",\n  \"Unique code used to refer to this template\": \"Уникальный код, используемый для обозначения этого шаблона\",\n  \"-- No layout --\": \"-- Без шаблона --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Простой текст\",\n  \"Disable automatic inline CSS\": \"Отключить автоматическую вставку inline-стилей (inline CSS)\",\n  \"Options\": \"Настройки\",\n  \"Subject\": \"Тема\",\n  \"Email message subject\": \"Тема сообщения\",\n  \"Description\": \"Описание\",\n  \"Drivers Not Installed\": \"Плагин October.Drivers не установлен\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Этот почтовый метод требует плагин \\\":plugin\\\", чтобы отправлять письма.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID события\",\n  \"Level\": \"Уровень\",\n  \"Date & Time\": \"Дата и время\",\n  \"Message\": \"Сообщение\",\n  \"Logging\": \"Журналирование\",\n  \"Log Bad Requests\": \"Сохранять неудачные запросы\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Запросы браузера, которые могут потребовать внимания. Например, ошибки 404.\",\n  \"Log Theme Changes\": \"Сохранять изменения темы в журнал\",\n  \"When a change is made to the theme using the backend.\": \"При внесении изменений в тему из панели администратора.\",\n  \"Log System Events\": \"Сохранять системные события\",\n  \"Store system events in the database in addition to the file-based log.\": \"Сохранять системные события в базе данных в дополнение к файловому журналу.\",\n  \"Background\": \"Фон\",\n  \"Body background\": \"Фон документа\",\n  \"Content background\": \"Фон контента\",\n  \"Inner content background\": \"Внутренний фон контента\",\n  \"Buttons\": \"Кнопки\",\n  \"Button text color\": \"Цвет текста кнопки\",\n  \"Primary button background\": \"Цвет основной кнопки\",\n  \"Positive button background\": \"Цвет положительной кнопки\",\n  \"Negative button background\": \"Цвет отрицательной кнопки\",\n  \"Typography\": \"Типографика\",\n  \"Header color\": \"Цвет заголовка\",\n  \"Headings color\": \"Цвет заголовков\",\n  \"Text color\": \"Цвет текста\",\n  \"Link color\": \"Цвет ссылки\",\n  \"Footer color\": \"Цвет футера\",\n  \"Borders\": \"Границы\",\n  \"Body border color\": \"Цвет границ документа\",\n  \"Subcopy border color\": \"Цвет границы субкопии\",\n  \"Table border color\": \"Цвет границ таблицы\",\n  \"Components\": \"Компоненты\",\n  \"Panel background\": \"Фон панели\",\n  \"Promotion background\": \"Фон промо блока\",\n  \"Promotion border color\": \"Цвет рамки промо блока\",\n  \"Customize Mail Appearance\": \"Настройка внешнего вида почты\",\n  \"Version\": \"Версия\",\n  \"Enabled\": \"Включено\",\n  \"Latest\": \"Последняя версия\",\n  \"Log ID\": \"ID записи\",\n  \"Counter\": \"Счетчик\",\n  \"Referers\": \"Источник запроса\",\n  \"URL\": \"Адрес\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"В этом журнале отображается список возможных ошибок, которые возникают в работе приложения, таких как исключения и отладочная информация.\",\n  \"Event\": \"События\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"В этом журнале отображается список запросов браузера, которые могут потребовать внимания. Например, если посетитель открывает несуществующую страницу, то в журнале создается запись с кодом статуса 404.\",\n  \"There were no detected referrers to this URL.\": \"Не обнаружено ссылок на этот URL.\",\n  \"Request\": \"Запрос\",\n  \"Event log emptied\": \"Журнал событий очищен\",\n  \"Empty Event Log\": \"Очистить журнал событий\",\n  \"Emptying Event Log...\": \"Очищение журнала событий...\",\n  \"Return to Event Log\": \"Вернуться в журнал событий\",\n  \"Installed\": \"Установлено\",\n  \"Primary Site\": \"Основной сайт\",\n  \"Refresh Data\": \"Обновить данные\",\n  \"Remove Data\": \"Удалить данные\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Вы уверены, что хотите переустановить выбранные плагины? Это сбросит данные каждого плагина, вернув его к исходному состоянию.\",\n  \"Reset Plugin Data\": \"Сбросить данные плагина\",\n  \"Enable Plugins\": \"Включить плагины\",\n  \"Are you sure you want to :action these plugins?\": \"Вы действительно хотите :action?\",\n  \"enable\": \"включить\",\n  \"disable\": \"выключить\",\n  \"Disable Plugins\": \"Выключить плагины\",\n  \"Select Action...\": \"Выберите действие...\",\n  \"Data has been removed.\": \"Данные были удалены.\",\n  \"Plugin has been removed from the file system.\": \"Плагин был удален из файловой системы.\",\n  \"search plugins to install...\": \"Поиск плагинов...\",\n  \"Plugin has been disabled by configuration.\": \"Плагин был отклчен конфигурацией.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Плагин имеет отсуствующие зависимости или отключен системой.\",\n  \"search themes to install...\": \"поиск шаблонов для установки...\",\n  \"Install Theme\": \"Установить тему\",\n  \"Theme Name\": \"Название темы\",\n  \"Install Plugin\": \"Установить плагин\",\n  \"Plugin Name\": \"Имя плагина\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Введите название плагина со своим уникальным кодом. Например, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Название темы по ее уникальному коду. Например, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Выберите метод установки\",\n  \"Make a Copy (Recommended)\": \"Сделать копию (рекомендуется)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Сделайте копию этой темы, чтобы настроить ее и вручную управлять будущими обновлениями.\",\n  \"Install with Composer\": \"Установить с помощью Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Расширьте тему, используя дочернюю тему, чтобы сохранить будущие обновления от автора темы.\",\n  \"Seed Theme Data\": \"Сидинг данных темы\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Импортировать чертежи, языковые файлы и содержимое базы данных для этой темы. Это можно пропустить и сделать позже в настройках темы.\",\n  \"Change Status\": \"Изменить статус\",\n  \"Site Definitions\": \"Сайты\",\n  \"System Updates\": \"Обновления системы\",\n  \"Find a Setting...\": \"Найти настройки...\",\n  \"Return to System Updates\": \"Вернуться к системе обновлений\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Импортировать чертежи, языковые файлы и содержимое базы данных для этой темы. Это можно пропустить и сделать позже в настройках темы.\"\n}"
  },
  {
    "path": "modules/system/lang/sk/client.php",
    "content": "<?php\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n    'markdowneditor' => [\n        'formatting' => 'Formátovanie',\n        'quote' => 'Citát',\n        'code' => 'Kód',\n        'header1' => 'Nadpis 1',\n        'header2' => 'Nadpis 2',\n        'header3' => 'Nadpis 3',\n        'header4' => 'Nadpis 4',\n        'header5' => 'Nadpis 5',\n        'header6' => 'Nadpis 6',\n        'bold' => 'Tučné',\n        'italic' => 'Kurzíva',\n        'unorderedlist' => 'Nečíslovaný zoznam',\n        'orderedlist' => 'Číslovaný zoznam',\n        'video' => 'Video',\n        'image' => 'Obrázok',\n        'link' => 'Odkaz',\n        'horizontalrule' => 'Vložiť horizontálnu linku',\n        'fullscreen' => 'Celá obrazovka',\n        'preview' => 'Náhľad',\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Vložiť odkaz',\n        'insert_image' => 'Vložiť obrázok',\n        'insert_video' => 'Vložiť video',\n        'insert_audio' => 'Vložiť audio',\n        'invalid_file_empty_insert' => 'Prosím vyberte súbor, na ktorý sa vloží odkaz.',\n        'invalid_file_single_insert' => 'Prosím vyberte jeden súbor.',\n        'invalid_image_empty_insert' => 'Prosím vyberte obrázky na vloženie.',\n        'invalid_video_empty_insert' => 'Prosím vyberte video na vloženie.',\n        'invalid_audio_empty_insert' => 'Prosím vyberte audio súbor na vloženie.',\n    ],\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Zrušiť',\n        'widget_remove_confirm' => 'Skutočne zmazať tento widget?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Predchádzajúci mesiac',\n        'nextMonth' => 'Nasledujúci mesiac',\n        'months' => ['Január', 'Február', 'Marec', 'Apríl', 'Máj', 'Jún', 'Júl', 'August', 'September', 'Október', 'November', 'December'],\n        'weekdays' => ['Nedeľa', 'Pondelok', 'Utorok', 'Streda', 'Štvrtok', 'Piatok', 'Sobota'],\n        'weekdaysShort' => ['Ne', 'Po', 'Ut', 'St', 'Št', 'Pi', 'So']\n    ],\n    'colorpicker' => [\n        'choose' => 'OK',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'všetko'\n        ],\n        'dates' => [\n            'all' => 'všetko',\n            'filter_button_text' => 'Filtrovať',\n            'reset_button_text'  => 'Zrušiť',\n            'date_placeholder' => 'Dátum',\n            'after_placeholder' => 'Po',\n            'before_placeholder' => 'Pred'\n        ],\n        'numbers' => [\n            'all' => 'all',\n            'filter_button_text' => 'Filter',\n            'reset_button_text'  => 'Zrušiť',\n            'min_placeholder' => 'Min',\n            'max_placeholder' => 'Max'\n        ]\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Zobraziť stacktrace',\n        'hide_stacktrace' => 'Skryť stacktrace',\n        'tabs' => [\n            'formatted' => 'Formátované',\n            'raw' => 'Pôvodné (raw)',\n        ],\n        'editor' => [\n            'title' => 'Editor zdrojového kódu',\n            'description' => 'Váš operačný systém by mal byť konfigurovaný tak, aby počúval jednu z týchto URL shém.',\n            'openWith' => 'Otvoriť v',\n            'remember_choice' => 'Zapamätať si vybranú voľbu pre túto reláciu',\n            'open' => 'Otvoriť',\n            'cancel' => 'Zrušiť'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/sk/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Návrat k základom',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'fi' => 'Suomi',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n    'vn' => 'Tiếng việt',\n  ],\n  'directory' => [\n    'create_fail' => 'Nie je možné vytvoriť priečinok: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Nie je možné vytvoriť súbor: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Neplatný bezpečnostný token',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Systém',\n    'menu_label' => 'Systém',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Ostatné',\n      'logs' => 'Záznamy',\n      'mail' => 'E-mail',\n      'shop' => 'E-shop',\n      'team' => 'Tým',\n      'users' => 'Užívateľ',\n      'system' => 'Systém',\n      'social' => 'Sociálne',\n      'backend' => 'Administrácia',\n      'events' => 'Udalosti',\n      'customers' => 'Zákazníci',\n      'my_settings' => 'Moje nastavenia',\n      'notifications' => 'Oznámenia',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Téma',\n    'unnamed' => 'Téma bez názvu',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Inštalácia tém',\n    'installed' => 'Nainštalované témy',\n    'no_themes' => 'Žiadne témy inštalované z trhu.',\n    'recommended' => 'Odporúčané',\n    'remove_confirm' => 'Skutočne chcete odstrániť túto tému?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Plugin bez názvu',\n    'name' => [],\n    'by_author' => 'Vytvoril :name',\n  ],\n  'plugins' => [\n    'install' => 'Inštalovať pluginy',\n    'install_products' => 'Inštalovať produkty',\n    'installed' => 'Inštalované pluginy',\n    'no_plugins' => 'Žiadne pluginy inštalované z trhu.',\n    'recommended' => 'Odporúčané',\n    'plugin_label' => 'Plugin',\n    'check_yes' => 'Áno',\n    'check_no' => 'Nie',\n    'unfrozen' => 'Aktualizácie povolené',\n    'freeze' => 'zakázať aktualizácie pre',\n    'unfreeze' => 'povoliť aktualizácie pre',\n    'refresh' => 'obnoviť',\n    'remove' => 'Odstrániť',\n    'freeze_label' => 'Zakázať aktualizácie',\n    'unfreeze_label' => 'Povoliť aktualizácie',\n    'freeze_success' => 'Úspešne zakázané aktualizácie vybraných pluginov.',\n    'unfreeze_success' => 'Úspešne povolené aktualizácie vybraných pluginov.',\n    'enable_success' => 'Vybrané pluginy úspešne povolené.',\n    'disable_success' => 'Vybrané pluginy úspešne zakázané.',\n    'refresh_success' => 'Vybrané pluginy úspešne obnovené',\n    'remove_confirm' => 'Skutočne chcete zmazať vybrané pluginy? Táto akcia takisto zmaže všetky priradené dáta.',\n    'remove_success' => 'Vybrané pluginy úspešne odstránené.',\n  ],\n  'project' => [\n    'attach' => 'Pripojiť projekt',\n    'detach' => 'Odpojiť projekt',\n    'none' => 'Žiadny',\n    'id' => [\n      'missing' => 'Prosím zadajta vaše Project ID.',\n    ],\n    'detach_confirm' => 'Skutočne chcete odpojiť tento projekt?',\n    'unbind_success' => 'Projekt bol odpojený.',\n  ],\n  'settings' => [\n    'search' => 'Hľadať',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Vyžadované SSL pripojenie',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikátny názov, ktorým sa odkazujeme na túto šablónu',\n    'test_send' => 'Poslať testovaciu správu',\n    'test_confirm' => 'Poslať testovaciu správu na :email. Pokračovať?',\n    'creating' => 'Vytváranie šablóny...',\n    'creating_layout' => 'Vytváranie layoutu...',\n    'saving' => 'Ukladanie šablóny...',\n    'saving_layout' => 'Ukladanie layoutu...',\n    'delete_confirm' => 'Skutočne zmazať túto šablónu?',\n    'delete_layout_confirm' => 'Skutočne zmazať tento layout?',\n    'deleting' => 'Mazanie šablóny...',\n    'deleting_layout' => 'Mazanie layoutu...',\n    'sending' => 'Posielanie testovacej správy...',\n    'return' => 'Späť na zoznam šablón',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Nadpis',\n      'paragraph' => 'Tento odstavec obsahuje Lorem Ipsum a link. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Položka',\n        'description' => 'Popis',\n        'price' => 'Cena',\n        'centered' => 'Na stred',\n        'right_aligned' => 'Zarovnané vpravo',\n      ],\n      'buttons' => [\n        'primary' => 'Primárne tlačítko',\n        'positive' => 'Pozitívne tlačítko',\n        'negative' => 'Negatívne tlačítko',\n      ],\n      'panel' => 'Aký skvalý je tento panel?',\n      'more' => 'Nejaký ďalší text',\n      'promotion' => 'Kód kupónu: OCTOBER',\n      'subcopy' => 'Toto je subkópia e-mailu',\n      'thanks' => 'Ďakujeme',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Autor',\n    'plugin_not_found' => 'Plugin nebol nájdený',\n    'core_build' => 'Zostavenie :build',\n    'core_build_help' => 'Najnovšie zostavenie je dostupné.',\n    'themes' => 'Témy',\n    'plugin_version_none' => 'Nový plugin',\n    'plugin_current_version' => 'Aktuálna verzia',\n    'theme_new_install' => 'Inštalácia novej témy.',\n    'theme_extracting' => 'Rozbaľovanie témy: :name',\n    'update_label' => 'Aktualizácia software',\n    'update_loading' => 'Načítavanie dostupbých aktualizácií...',\n    'force_label' => 'Vynútiť aktualizácie',\n    'found' => [\n      'label' => 'Nájdené nové aktualizácie!',\n      'help' => 'Kliknite na Aktualizovať pre začatie aktualizácie.',\n    ],\n    'none' => [\n      'label' => 'Žiadne aktualizácie',\n      'help' => 'Žiadne nové aktualizácie neboli nájdené.',\n    ],\n    'important_action' => [\n      'empty' => 'Vybrať akciu',\n      'confirm' => 'Potvrdiť aktualizácie',\n      'skip' => 'Preskočiť túto aktualizáciu (iba raz)',\n      'ignore' => 'Preskočiť tento update (vždy)',\n    ],\n    'important_action_required' => 'Je vyťadovaná akcia',\n    'important_view_guide' => 'Zobraziť návod pre aktualizáciu',\n    'important_view_release_notes' => 'Zobraziť poznámky k vydaniu',\n    'important_alert_text' => 'Niektoré aktualizácie vyžadujú vašu pozornosť.',\n    'details_title' => 'Detaily pluginu',\n    'details_view_homepage' => 'Zobraziť domovskú stránku',\n    'details_changelog' => 'Zoznam zmien',\n    'details_changelog_missing' => 'Nie je poskytnutý žiadny zoznam zmien.',\n    'details_current_version' => 'Aktuálna verzia',\n    'details_author' => 'Autor',\n  ],\n  'server' => [\n    'connect_error' => 'Chyba pripojenia na server.',\n    'response_not_found' => 'Aktualizácia nebola nájdená.',\n    'response_invalid' => 'Neplatná odpoveď servra.',\n    'response_empty' => 'Prázdna odpoveď servra.',\n    'file_error' => 'Chyba sťahovania balíčku zo servra.',\n    'file_corrupt' => 'Súbor zo servra je poškodený.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Trieda :class musí definovať vlastnosť $:property použitú správaním :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Nebolo možné nájsť konfiguračný súbor :file definovaný pre :location.',\n    'required' => 'Konfigurácia použitá v :location musí podporovať hodnotu \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Nepodarilo sa rozbaliť súbor \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Vyprázdniť záznam požiadaviek',\n    'empty_loading' => 'Mazanie záznamu požiadaviek...',\n    'empty_success' => 'Záznam požiadaviek zmazaný',\n    'return_link' => 'Späť na záznam požiadaviek',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Systém',\n    'manage_system_settings' => 'Správa systémových nastavení',\n    'manage_software_updates' => 'Správa aktualizácií software',\n    'access_logs' => 'Zobrazenie systémových záznamov',\n    'manage_mail_templates' => 'Správa e-mailových šablón',\n    'manage_mail_settings' => 'Správa e-mailových nastavení',\n    'manage_other_administrators' => 'Správa ostatných administrátorov',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Chybne zadaná cesta: \\':path\\'.',\n    'folder_size_items' => 'súborov',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/sk/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'             => ':attribute musí byť akceptovaný.',\n    'active_url'           => ':attribute má neplatnú URL adresu.',\n    'after'                => ':attribute musí byť dátum po :date.',\n    'alpha'                => ':attribute môže obsahovať len písmená.',\n    'alpha_dash'           => ':attribute môže obsahovať len písmená, čísla a pomlčky.',\n    'alpha_num'            => ':attribute môže obsahovať len písmená, čísla.',\n    'array'                => ':attribute musí byť pole.',\n    'before'               => ':attribute musí byť dátum pred :date.',\n    'before_or_equal'      => ':attribute musí byť dátum pred alebo rovný :date.',\n    'between'              => [\n        'numeric' => ':attribute musí mať rozsah :min - :max.',\n        'file'    => ':attribute musí mať rozsah :min - :max kilobajtov.',\n        'string'  => ':attribute musí mať rozsah :min - :max znakov.',\n        'array'   => ':attribute musí mať rozsah :min - :max prvkov.',\n    ],\n    'boolean'              => ':attribute musí byť true alebo false.',\n    'confirmed'            => ':attribute konfirmácia sa nezhoduje.',\n    'date'                 => ':attribute má neplatný dátum.',\n    'date_format'          => ':attribute sa nezhoduje s formátom :format.',\n    'different'            => ':attribute a :other musia byť odlišné.',\n    'digits'               => ':attribute musí mať :digits číslic.',\n    'digits_between'       => ':attribute musí mať rozsah :min až :max číslic.',\n    'dimensions'           => ':attribute má neplatné rozmery obrázka.',\n    'distinct'             => ':attribute má duplicitné hodnoty.',\n    'email'                => ':attribute má neplatný formát.',\n    'exists'               => 'Označený :attribute je neplatný.',\n    'file'                 => ':attribute musí byť súbor.',\n    'filled'               => ':attribute je povinný.',\n    'gt'                   => [\n        'numeric' => ':attribute musí byť väčšia ako :value.',\n        'file'    => ':attribute musí byť väčšia ako :value kilobajtov.',\n        'string'  => ':attribute musí byť väčšia ako :value znakov.',\n        'array'   => ':attribute musí mať viac ako :value položiek.',\n    ],\n    'gte'                  => [\n        'numeric' => ':attribute musí byť väčšia alebo rovná :value.',\n        'file'    => ':attribute musí byť väčšia alebo rovná :value kilobajtov.',\n        'string'  => ':attribute musí byť väčšia alebo rovná :value znakov.',\n        'array'   => ':attribute musí mať :value položiek alebo viac.',\n    ],\n    'image'                => ':attribute musí byť obrázok.',\n    'in'                   => 'Označený :attribute je neplatný.',\n    'in_array'             => ':attribute pole neexistuje v :other.',\n    'integer'              => ':attribute musí byť celé číslo.',\n    'ip'                   => ':attribute musí byť platná IP adresa.',\n    'ipv4'                 => ':attribute musí byť platná IPv4 adresa.',\n    'ipv6'                 => ':attribute musí byť platná IPv6 adresa.',\n    'json'                 => ':attribute musí byť platný JSON.',\n    'lt'                   => [\n        'numeric' => ':attribute musí byť menšia ako :value.',\n        'file'    => ':attribute musí byť menšia ako :value kilobajtov.',\n        'string'  => ':attribute musí byť menšia ako :value znakov.',\n        'array'   => ':attribute musí mať menej ako :value položiek.',\n    ],\n    'lte'                  => [\n        'numeric' => ':attribute musí byť menšie alebo rovné :value.',\n        'file'    => ':attribute musí byť menšie alebo rovné :value kilobajtov.',\n        'string'  => ':attribute musí byť menšie alebo rovné :value znakov.',\n        'array'   => ':attribute nesmie mať viac ako :value položiek.',\n    ],\n    'max'                  => [\n        'numeric' => ':attribute nemôže byť väčší ako :max.',\n        'file'    => ':attribute nemôže byť väčší ako :max kilobajtov.',\n        'string'  => ':attribute nemôže byť väčší ako :max znakov.',\n        'array'   => ':attribute nemôže mať viac ako :max prvkov.',\n    ],\n    'mimes'                => ':attribute musí byť súbor s koncovkou: :values.',\n    'extensions'           => ':attribute musí mäť niektorú z nasledujúcich prípon: :values.',\n    'min'                  => [\n        'numeric' => ':attribute musí mať aspoň :min.',\n        'file'    => ':attribute musí mať aspoň :min kilobajtov.',\n        'string'  => ':attribute musí mať aspoň :min znakov.',\n        'array'   => ':attribute musí mať aspoň :min prvkov.',\n    ],\n    'not_in'               => 'Označený :attribute je neplatný.',\n    'not_regex'            => ':attribute má neplatný formát.',\n    'numeric'              => ':attribute musí byť číslo.',\n    'present'              => ':attribute pole musí byť prítomné.',\n    'regex'                => ':attribute má neplatný formát.',\n    'required'             => ':attribute je požadované.',\n    'required_if'          => ':attribute je požadované keď :other je :value.',\n    'required_unless'      => ':attribute pole je povinné, pokiaľ :other je v :values.',\n    'required_with'        => ':attribute je požadované keď :values je prítomné.',\n    'required_with_all'    => ':attribute pole je povinné, keď je :values.',\n    'required_without'     => ':attribute je požadované keď :values nie je prítomné.',\n    'required_without_all' => ':attribute pole je povinné, keď nie je prítomná žiadna z :values.',\n    'same'                 => ':attribute a :other sa musia zhodovať.',\n    'size'                 => [\n        'numeric' => ':attribute musí byť :size.',\n        'file'    => ':attribute musí mať :size kilobajtov.',\n        'string'  => ':attribute musí mať :size znakov.',\n        'array'   => ':attribute musí obsahovať :size prvkov.',\n    ],\n    'starts_with'          => ':attribute musí začínať jedným z nasledujúcich: :values.',\n    'string'               => ':attribute musí byť reťazec.',\n    'timezone'             => ':attribute musí byť platná časová zóna.',\n    'unique'               => ':attribute už existuje.',\n    'uploaded'             => ':attribute sa nepodarilo nahrať.',\n    'url'                  => ':attribute musí mať formát URL.',\n    'uuid'                 => ':attribute musí byť UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n];\n"
  },
  {
    "path": "modules/system/lang/sk.json",
    "content": "{\n  \"Check For Updates\": \"Skontrolovať aktualizácie\",\n  \"Install Packages\": \"Nainštalujte balíky\",\n  \"Manage Themes\": \"Spravovať témy\",\n  \"Manage Plugins\": \"Správa pluginov\",\n  \"Project\": \"Projekt\",\n  \"Owner\": \"Vlastník\",\n  \"Plugins\": \"Pluginy\",\n  \"Recommended\": \"Odporúčané\",\n  \"Disabled\": \"Neaktívny\",\n  \"Current Build\": \"Aktuálna verzia\",\n  \"Updates Available\": \"Dostupné aktualizácie\",\n  \"Up to Date\": \"Aktuálny\",\n  \"Latest Build\": \"Najnovšia verzia\",\n  \"View Changelog\": \"Zobraziť zoznam zmien\",\n  \"Software Updates\": \"Aktualizácia a pluginy\",\n  \"Update the system modules and plugins.\": \"Aktualizácie systému, správa a inštalácia pluginov a tém.\",\n  \"General\": \"Obecné\",\n  \"Mail\": \"Mail\",\n  \"Utilities\": \"Verejné služby\",\n  \"Settings\": \"Nastavenia\",\n  \"Show All Settings\": \"Zobraziť všetky nastavenia\",\n  \"Unable to find the specified settings.\": \"Zvolené nastavenie sa nepodarilo nájsť.\",\n  \"The settings page is missing a Model definition.\": \"Stránka s nastaveniami vyžaduje definíciu Modelu.\",\n  \":name settings updated\": \"Nastavenia pre :name úspešne uložené\",\n  \"Return to System Settings\": \"Návrat do systémových nastavení\",\n  \"Search Settings...\": \"Nájsť nastavenie...\",\n  \"Disable mail branding CSS\": \"Zakázať CSS na budovanie značky pošty\",\n  \"Manage Sites\": \"Spravovať stránky\",\n  \"Manage the websites available for this application.\": \"Spravujte webové stránky dostupné pre túto aplikáciu.\",\n  \"Marketplace\": \"Trhovisko\",\n  \"There is no documentation provided.\": \"Nie je poskytnutá žiadna dokumentácia.\",\n  \"Documentation\": \"Dokumentácia\",\n  \"Upgrade Guide\": \"Návod pre aktualizáciu\",\n  \"License\": \"Licencia\",\n  \"Attach to Project\": \"Pridať k projetku\",\n  \"Manage Updates\": \"Správa aktualizácií\",\n  \"Software Update\": \"Aktualizácia softwaru\",\n  \"Return to Software Updates\": \"Späť na aktualizácie systému\",\n  \"Try Again\": \"Skúsiť znova\",\n  \"Unpacking application files\": \"Rozbaľovanie súborov aplikácie\",\n  \"Update Failed\": \"Aktualizácia zlyhala\",\n  \"Unpacking plugin: :name\": \"Rozbaľovanie pluginu: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Primárna lokalita sa používa predvolene a nemožno ju odstrániť.\",\n  \"Disabled sites are not shown on the frontend.\": \"Zakázané stránky sa na frontende nezobrazujú.\",\n  \"Enabled in the Admin Panel\": \"Povolené na paneli správcu\",\n  \"Configuration\": \"Konfigurácia\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Použite to, ak chcete, aby bola lokalita povolená na paneli správcu.\",\n  \"Install\": \"Inštalácia\",\n  \"Sync Project\": \"Synchronizovať projekt\",\n  \"Name\": \"názov\",\n  \"Unique Code\": \"Jedinečný kód\",\n  \"Theme\": \"Téma\",\n  \"Sites\": \"Stránky\",\n  \"Create Site\": \"Vytvoriť stránku\",\n  \"Base URL\": \"Základná adresa URL\",\n  \"Status\": \"Stav\",\n  \"Current default value: :value\": \"Aktuálna predvolená hodnota: :value\",\n  \"Locale\": \"Miestne\",\n  \"Timezone\": \"Časové pásmo\",\n  \"Custom application URL\": \"Vlastná adresa URL aplikácie\",\n  \"Override the application URL when this site is active.\": \"Prepísať adresu URL aplikácie, keď je táto lokalita aktívna.\",\n  \"Use a CMS route prefix\": \"Použite predponu trasy CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Predpona môže identifikovať túto lokalitu pri použití zdieľaného názvu hostiteľa.\",\n  \"Define matching hostnames\": \"Definujte zodpovedajúce názvy hostiteľov\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Zadajte názvy domén a vzory, ktoré sa musia použiť na poskytovanie tejto lokality.\",\n  \"Display a style for this site\": \"Zobraziť farbu pre túto stránku\",\n  \"To help identify this site, display a color in the admin panel.\": \"Ak chcete pomôcť identifikovať túto lokalitu, zobrazte farbu na paneli správcu.\",\n  \"Save\": \"Uložiť\",\n  \"Save and Close\": \"Uložiť a zavrieť\",\n  \"Use Default\": \"Použi predvolené\",\n  \"Use Custom\": \"Použite Vlastné\",\n  \"Specify a custom locale code.\": \"Zadajte vlastný kód jazyku.\",\n  \"Failed\": \"Nepodarilo sa\",\n  \"or\": \"alebo\",\n  \"Code\": \"Kód\",\n  \"October CMS Marketplace\": \"October CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Projekt nemá žiadne doplnky ani témy. Ak chcete nejaké pridať, navštívte odkaz:\",\n  \"Buy Now\": \"Kúpte teraz\",\n  \"Updating package manager\": \"Updating package manager\",\n  \"Updating application files\": \"Sťahovanie súborov aplikácie\",\n  \"Setting build number\": \"Nastavenie čísla zostavenia\",\n  \"Finishing update process\": \"Dokončovanie aktualizácie\",\n  \"Installing plugin: :name\": \"Sťahovanie pluginu: :name\",\n  \"Finishing installation process\": \"Dokončovanie inštalačného procesu\",\n  \"Removing theme: :name\": \"Odstraňovanie témy :name\",\n  \"Please specify a Theme name to install.\": \"Prosím zadajte názov témy na nainštalovanie.\",\n  \"Installing theme: :name\": \"Sťahovanie témy: :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Odstraňovanie pluginu :name\",\n  \"Please specify a Plugin name to install.\": \"Prosím zadajte názov pluginu na nainštalovanie.\",\n  \"Update process complete\": \"Proces aktualizácie úspešne ukončený\",\n  \"Package installed successfully\": \"Plugin bol úspešne nainštalovaný\",\n  \"Check Dependencies\": \"Check Dependencies\",\n  \"Install Dependencies\": \"Inštalácia závislostí\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"There are missing dependencies needed for the system to run correctly.\",\n  \"License Key\": \"Licenčný kľúč\",\n  \"How to find your License Key\": \"Ako nájsť svoj licenčný kľúč\",\n  \"The password attribute is required.\": \"Pole heslo je povinné.\",\n  \"The login attribute is required.\": \"Pole login je povinné.\",\n  \"Cannot login user since they are not activated.\": \"Používateľ sa nedá prihlásiť, pretože nie je aktivovaný.\",\n  \"Cannot login user since they are banned.\": \"Používateľ sa nedá prihlásiť, pretože nie je aktivovaný.\",\n  \"Cannot login user since they are suspended.\": \"Používateľ sa nedá prihlásiť, pretože nie je aktivovaný.\",\n  \"A user was not found with the given credentials.\": \"Používateľ so zadanými prihlasovacími údajmi sa nenašiel.\",\n  \"A user was found but the password did not match.\": \"A user was found but the password did not match.\",\n  \"User is not logged in\": \"Užívateľ nie je prihlásený\",\n  \"Register Software\": \"Register Software\",\n  \"View the Dashboard\": \"Zobrazenie hlavného panelu\",\n  \"Set the Default Dashboard\": \"Set the Default Dashboard\",\n  \"Log File\": \"Súbor záznamov\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Bez šifrovania\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Nastavenia e-mailu\",\n  \"Manage email configuration.\": \"Správa nastavení e-mailu.\",\n  \"Sender Name\": \"Meno odosielateľa\",\n  \"Sender Email\": \"E-mail odosielateľa\",\n  \"Mail Method\": \"Metóda posielania správ\",\n  \"SMTP Address\": \"SMTP adresa\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"SMTP šifrovací protokol\",\n  \"SMTP Authorization Required\": \"Vyžadovaná SMTP autorizácia\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Použite tento ak váš SMTP server vyžaduje autorizáciu.\",\n  \"Username\": \"Užívateľské meno\",\n  \"Password\": \"Heslo\",\n  \"Sendmail Path\": \"Sendmail cest\",\n  \"Please specify the path of the sendmail program.\": \"Prosím zadajte cestu k sendmail programu.\",\n  \"Mailgun Domain\": \"Mailgun doména\",\n  \"Please specify the Mailgun domain name.\": \"Prosím zadajte názov Mailgun domény.\",\n  \"Mailgun Secret\": \"Mailgun tajný kľúč (secret)\",\n  \"Enter your Mailgun API key.\": \"Zadajta váš Mailgun API kľúč.\",\n  \"SES Key\": \"SES kľúč\",\n  \"Enter your SES API key\": \"Zadajta váš SES API kľúč.\",\n  \"SES Secret\": \"SES tajný kľúč (secret)\",\n  \"Enter your SES API secret key\": \"Zadajta váš SES API tajný kľúč.\",\n  \"SES Region\": \"SES región\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Zadajta váš SES región (napríiklad us-east-1)\",\n  \"Postmark Token\": \"Postmark Token\",\n  \"Enter your Postmark API secret key\": \"Zadajte váš Postmark API tajný kľúč\",\n  \"Define administrator roles\": \"Define administrator roles\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restrict access to this site to only administrator with the following roles.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"All Sites\",\n  \"Manage Backend Preferences\": \"Správa nastavení administrácie\",\n  \"Manage Code Editor Preferences\": \"Správa nastavení editora kódu\",\n  \"Customize Backend Styles\": \"Prispôsobenie administrácie\",\n  \"Mail Templates\": \"E-mailové šablóny\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Upravujte e-mailové šablóny, ktoré sú posielané užívateľom a administrátorom, správa e-mailového layoutu.\",\n  \"Mail Branding\": \"Personalizácia e-mailov\",\n  \"Modify the colors and appearance of mail templates.\": \"Správa farieb a vzhľadu e-mailových šablón.\",\n  \"Event Log\": \"Záznam udalostí\",\n  \"View system log messages with their recorded time and details.\": \"Zobraziť záznam systémových správ s časom a detailami.\",\n  \"Request Log\": \"Záznam požiadaviek\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Zobraziť zlé alebo presmerované požiadavky, ako napríklad Stránka nenájdená (404).\",\n  \"Log Settings\": \"Nastavenia záznamov\",\n  \"Specify which areas should use logging.\": \"Určte, ktoré obasti by mali používať záznamy.\",\n  \"Test message sent.\": \"Testovacia správa poslaná.\",\n  \"New Layout\": \"Nový layout\",\n  \"New Partial\": \"Nová čiastková šablóna\",\n  \"New Template\": \"Nová šablóna\",\n  \"Template\": \"Šablóna\",\n  \"Templates\": \"Šablóny\",\n  \"Layouts\": \"Layouty\",\n  \"Partials\": \"Čiastkové šablóny\",\n  \"Partial\": \"Čiastková šablóna\",\n  \"Mail Partials\": \"Čiastkové šablóny e-mailu\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"Layouty e-mailu\",\n  \"Unique code used to refer to this template\": \"Unikátny kód, ktorým sa odkazujeme na túto šablónu\",\n  \"-- No layout --\": \"-- Žiadny layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Čistý text\",\n  \"Disable automatic inline CSS\": \"Disable automatic inline CSS\",\n  \"Options\": \"Options\",\n  \"Subject\": \"Predmet\",\n  \"Email message subject\": \"Predmet e-mailovej správy\",\n  \"Description\": \"Popis\",\n  \"Drivers Not Installed\": \"Ovládače nie sú nainštalované\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Táto metóda posielania e-mailov vyžaduje nainštalovaný plugin \\\":plugin\\\" predtým ako môžete posielať e-maily.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID udalosti\",\n  \"Level\": \"Úroveň\",\n  \"Date & Time\": \"Dátum a čas\",\n  \"Message\": \"Správa\",\n  \"Logging\": \"Záznamenavánie\",\n  \"Log Bad Requests\": \"Zaznamenať chybné požiadavky\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Požiadavky prehliadača, ktoré môžu vyžadovať pozornosť, napríklad chyby 404.\",\n  \"Log Theme Changes\": \"Zaznamenať zmeny témy\",\n  \"When a change is made to the theme using the backend.\": \"V prípade, že je téma upravená pomocou administrácie.\",\n  \"Log System Events\": \"Zaznamenať systémové udalosti\",\n  \"Store system events in the database in addition to the file-based log.\": \"Uložiť systémové udalosti aj v databáze ako doplnok k ukladaniu v súbore.\",\n  \"Background\": \"Pozadie\",\n  \"Body background\": \"Pozadie body značky\",\n  \"Content background\": \"Pozadie obsahu\",\n  \"Inner content background\": \"Vnútorné pozadie obsahu\",\n  \"Buttons\": \"Tlačítka\",\n  \"Button text color\": \"Farba textu tlačítok\",\n  \"Primary button background\": \"Farba pozadia primárneho tlačítka\",\n  \"Positive button background\": \"Farba pozadia pozitávneho tlačítka\",\n  \"Negative button background\": \"Farba pozadia negatávneho tlačítka\",\n  \"Typography\": \"Typografia\",\n  \"Header color\": \"Farba hlavičky\",\n  \"Headings color\": \"Farba nadpisov\",\n  \"Text color\": \"Farba textu\",\n  \"Link color\": \"Farba linkov\",\n  \"Footer color\": \"Farba ukončenia strany\",\n  \"Borders\": \"Okraje\",\n  \"Body border color\": \"Farba okrajov znčky body\",\n  \"Subcopy border color\": \"Farba okrajov subkópie\",\n  \"Table border color\": \"Farba okrajov tabuľky\",\n  \"Components\": \"Komponenty\",\n  \"Panel background\": \"Pozadie panelu\",\n  \"Promotion background\": \"Pozadie reklamy\",\n  \"Promotion border color\": \"Farba okrajov reklamy\",\n  \"Customize Mail Appearance\": \"Úprava vzhľadu e-mailu\",\n  \"Version\": \"Verzia\",\n  \"Enabled\": \"Plugin aktivovaný\",\n  \"Latest\": \"Latest\",\n  \"Log ID\": \"ID záznamu\",\n  \"Counter\": \"Počítadlo\",\n  \"Referers\": \"Odkazy\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Tento záznam zobrazuje zoznam potencionálnch chýb v aplikácií, ako napríklad výnimky a ladiace informácie.\",\n  \"Event\": \"Udalosť\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Tento záznam zobrazuje zoznam požiadaviek prehliadača, ktoré môžu vyžadovať vašu pozornosť. Napríklad, ak návštevník otvorí CMS stránku, ktorú sa nepodarilo nájsť, vytvorí sa záznam so status kódom 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Požiadavka\",\n  \"Event log emptied\": \"Záznam udalostí zmazaný\",\n  \"Empty Event Log\": \"Zmazať záznam udalostí\",\n  \"Emptying Event Log...\": \"Mazanie záznamu udalostí...\",\n  \"Return to Event Log\": \"Späť na záznam udalostí\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Skutočne chcete obnoviť vybrané pluginy? Táto akcia zmaže všetky dáta pluginov a obnoví ich do pôvodného stavu po inštalácií.\",\n  \"Reset Plugin Data\": \"Obnoviť dáta pluginov\",\n  \"Enable Plugins\": \"Povoliť pluginy\",\n  \"Are you sure you want to :action these plugins?\": \"Skutočne chcete :action tieto pluginy?\",\n  \"enable\": \"povoliť\",\n  \"disable\": \"zakázať\",\n  \"Disable Plugins\": \"Zakázať pluginy\",\n  \"Select Action...\": \"Vyberte akciu...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Plugin bol odtránený z disku.\",\n  \"search plugins to install...\": \"vyhľadať pluginy na inštaláciu...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"vyhľadať témy na nainštalovanie...\",\n  \"Install Theme\": \"Inštalovať tému\",\n  \"Theme Name\": \"Názov témy\",\n  \"Install Plugin\": \"Inštalovať plugin\",\n  \"Plugin Name\": \"Názov pluginu\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Názov pluginu podľa jeho unikátneho kódu. Napríklad, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Názov témy podľa jej unikátneho kódu. Napríklad, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\",\n  \"System Updates\": \"Aktualizácia a pluginy\",\n  \"Find a Setting...\": \"Nájsť nastavenie...\",\n  \"Return to System Updates\": \"Späť na aktualizácie systému\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\"\n}"
  },
  {
    "path": "modules/system/lang/sl/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting'     => 'Oblikovanje',\n        'quote'          => 'Citat',\n        'code'           => 'Koda',\n        'header1'        => 'Naslov 1',\n        'header2'        => 'Naslov 2',\n        'header3'        => 'Naslov 3',\n        'header4'        => 'Naslov 4',\n        'header5'        => 'Naslov 5',\n        'header6'        => 'Naslov 6',\n        'bold'           => 'Krepko',\n        'italic'         => 'Ležeče',\n        'unorderedlist'  => 'Neoštevilčeni seznam',\n        'orderedlist'    => 'Številčni seznam',\n        'video'          => 'Video',\n        'image'          => 'Slika',\n        'link'           => 'Povezava',\n        'horizontalrule' => 'Vstavi vodoravno črto',\n        'fullscreen'     => 'Celozaslonski način',\n        'preview'        => 'Predogled',\n    ],\n    'mediamanager'   => [\n        'insert_link'                => 'Vstavi povezavo',\n        'insert_image'               => 'Vstavi sliko',\n        'insert_video'               => 'Vstavi video posnetek',\n        'insert_audio'               => 'Vstavi zvočni posnetek',\n        'invalid_file_empty_insert'  => 'Izberite datoteko, do katere želite vstaviti povezavo.',\n        'invalid_file_single_insert' => 'Izberite eno samo datoteko.',\n        'invalid_image_empty_insert' => 'Izberite slike za vstavljanje.',\n        'invalid_video_empty_insert' => 'Izberite video posnetek za vstavljanje.',\n        'invalid_audio_empty_insert' => 'Izberite zvočni posnetek za vstavljanje.',\n    ],\n    'alert'          => [\n        'confirm_button_text'   => 'V redu',\n        'cancel_button_text'    => 'Prekliči',\n        'widget_remove_confirm' => 'Odstrani ta vtičnik?',\n    ],\n    'datepicker'     => [\n        'previousMonth' => 'Prejšnji mesec',\n        'nextMonth'     => 'Naslednji mesec',\n        'months'        => [\n            'Januar',\n            'Februar',\n            'Marec',\n            'April',\n            'Maj',\n            'Junij',\n            'Julij',\n            'Avgust',\n            'September',\n            'Oktober',\n            'November',\n            'December',\n        ],\n        'weekdays'      => ['Nedelja', 'Ponedeljek', 'Torek', 'Sreda', 'Četrtek', 'Petek', 'Sobota'],\n        'weekdaysShort' => ['Ned', 'Pon', 'Tor', 'Sre', 'Čet', 'Pet', 'Sob'],\n    ],\n    'colorpicker'    => [\n        'choose' => 'OK',\n    ],\n    'filter'         => [\n        'group'   => [\n            'all' => 'vsi',\n        ],\n        'scopes'  => [\n            'apply_button_text' => 'Uporabi',\n            'clear_button_text' => 'Počisti',\n        ],\n        'dates'   => [\n            'all'                => 'vsi',\n            'filter_button_text' => 'Filtriraj',\n            'reset_button_text'  => 'Ponastavi',\n            'date_placeholder'   => 'Datum',\n            'after_placeholder'  => 'Po',\n            'before_placeholder' => 'Pred',\n        ],\n        'numbers' => [\n            'all'                => 'vsi',\n            'filter_button_text' => 'Filtriraj',\n            'reset_button_text'  => 'Ponastavi',\n            'min_placeholder'    => 'Min',\n            'max_placeholder'    => 'Max',\n        ],\n    ],\n    'eventlog'       => [\n        'show_stacktrace' => 'Prikaži sled dogodkov',\n        'hide_stacktrace' => 'Skrij sled dogodkov',\n        'tabs'            => [\n            'formatted' => 'Oblikovano',\n            'raw'       => 'Brez oblikovanja',\n        ],\n        'editor'          => [\n            'title'           => 'Urejevalnik izvorne kode',\n            'description'     => 'Vaš operacijski sistem mora biti nastavljen tako, da upošteva eno od teh URL shem.',\n            'openWith'        => 'Za odpiranje uporabi',\n            'remember_choice' => 'Zapomni si izbrane nastavitve za to sejo',\n            'open'            => 'Odpri',\n            'cancel'          => 'Prekliči',\n        ],\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/sl/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Nazaj k osnovam',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'ca' => 'Català',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'fi' => 'Suomi',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'th' => 'ไทย',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n    'vn' => 'Tiếng việt',\n  ],\n  'directory' => [\n    'create_fail' => 'Mape :name ni mogoče ustvariti.',\n  ],\n  'file' => [\n    'create_fail' => 'Datoteke :name ni mogoče ustvariti.',\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistem',\n    'menu_label' => 'Sistem',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Razno',\n      'logs' => 'Dnevniki',\n      'mail' => 'E-pošta',\n      'shop' => 'Trgovina',\n      'team' => 'Ekipa',\n      'users' => 'Uporabniki',\n      'system' => 'Sistem',\n      'social' => 'Družbeno',\n      'backend' => 'Administracija',\n      'events' => 'Dogodki',\n      'customers' => 'Stranke',\n      'my_settings' => 'Moje nastavitve',\n      'notifications' => 'Obvestila',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Neimenovana tema',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Namesti teme',\n    'installed' => 'Nameščene teme',\n    'no_themes' => 'Ni nameščenih tem iz trga.',\n    'recommended' => 'Priporočeno',\n    'remove_confirm' => 'Ali ste prepričani, da želite odstraniti to temo?',\n  ],\n  'plugin' => [\n    'label' => 'Vtičnik',\n    'unnamed' => 'Neimenovan vtičnik',\n    'name' => [],\n    'by_author' => 'Od :name',\n  ],\n  'plugins' => [\n    'install' => 'Namesti vtičnike',\n    'install_products' => 'Namesti produkte',\n    'installed' => 'Nameščeni vtičniki',\n    'no_plugins' => 'Ni nameščenih vtičnikov iz trga.',\n    'recommended' => 'Priporočeno',\n    'plugin_label' => 'Vtičnik',\n    'bulk_actions_label' => 'Skupna dejanja',\n    'check_yes' => 'Da',\n    'check_no' => 'Ne',\n    'unfrozen' => 'Posodobitve so omogočene',\n    'freeze' => 'onemogoči posodobitve za',\n    'unfreeze' => 'omogoči posodobitve za',\n    'refresh' => 'ponastavi',\n    'remove' => 'Odstrani',\n    'freeze_label' => 'Onemogoči posodobitve',\n    'unfreeze_label' => 'Omogoči posodobitve',\n    'freeze_success' => 'Posodobitve za izbrane vtičnike so onemogočene.',\n    'unfreeze_success' => 'Posodobitve za izbrane vtičnike so omogočene.',\n    'enable_success' => 'Izbrani vtičniki so omogočeni.',\n    'disable_success' => 'Izbrani vtičniki so onemogočeni.',\n    'refresh_success' => 'Izbrani vtičniki so bili ponastavljeni.',\n    'remove_confirm' => 'Ali ste prepričani, da želite odstraniti izbrane vtičnike? S tem boste odstranili tudi vse povezane podatke.',\n    'remove_success' => 'Izbrani vtičniki so bili odstranjeni.',\n  ],\n  'project' => [\n    'attach' => 'Pripni projekt',\n    'detach' => 'Odpni projekt',\n    'none' => 'Nobeden',\n    'id' => [\n      'missing' => 'Določite ID projekta za uporabo.',\n    ],\n    'detach_confirm' => 'Ali ste prepričani, da želite odpeti ta projekt?',\n    'unbind_success' => 'Projekt je bil odpet.',\n  ],\n  'settings' => [\n    'search' => 'Iskanje',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Obvezna SSL povezava',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikatno ime, ki se nanaša na to predlogo.',\n    'test_send' => 'Pošlji testno sporočilo',\n    'test_confirm' => 'Testno sporočilo bo poslano na :email. Nadaljujem?',\n    'creating' => 'Ustvarjanje predloge...',\n    'creating_layout' => 'Ustvarjanje postavitve...',\n    'saving' => 'Shranjevanje predloge...',\n    'saving_layout' => 'Shranjevane postavitve...',\n    'delete_confirm' => 'Želite izbrisati to predlogo?',\n    'delete_layout_confirm' => 'Želite izbrisati to postavitev?',\n    'deleting' => 'Brisanje predloge...',\n    'deleting_layout' => 'Brisanje postavitve...',\n    'sending' => 'Pošiljanje testnega sporočila...',\n    'return' => 'Vrni se na seznam predlog',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Naslov',\n      'paragraph' => 'To je odstavek, ki vsebuje Lorem Ipsum tekst in povezavo. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Element',\n        'description' => 'Opis',\n        'price' => 'Cena',\n        'centered' => 'Centrirano',\n        'right_aligned' => 'Desno-ravnano',\n      ],\n      'buttons' => [\n        'primary' => 'Primarni gumb',\n        'positive' => 'Pozitivni gumb',\n        'negative' => 'Negativni gumb',\n      ],\n      'panel' => 'Kako dobro izgleda ta barvni okvir?',\n      'more' => 'Še nekaj besedila za konec.',\n      'promotion' => 'Koda kupona: OCTOBER',\n      'subcopy' => 'Noga sporočila na koncu e-poštne predloge.',\n      'thanks' => 'Hvala',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Avtor',\n    'plugin_not_found' => 'Vtičnika ni mogoče najti',\n    'plugin_version_not_found' => 'Različice vtičnika ni mogoče najti',\n    'core_build' => 'Različica :build',\n    'core_build_help' => 'Na voljo je najnovejša različica.',\n    'update_warnings_title' => 'Odkrite so bile nekatere težave, ki zahtevajo pozornost:',\n    'update_warnings_plugin_missing' => 'Vtičnik :parent_code zahteva za pravilno delovanje namestitev :code.',\n    'changelog' => 'Dnevnik sprememb',\n    'changelog_view_details' => 'Prikaži podrobnosti',\n    'themes' => 'Teme',\n    'plugin_version_none' => 'Nov vtičnik',\n    'plugin_current_version' => 'Trenutna verzija',\n    'theme_new_install' => 'Namestitev nove teme.',\n    'theme_extracting' => 'Ekstrahiranje teme :name',\n    'update_label' => 'Posodobitev programske opreme',\n    'update_loading' => 'Nalaganje razpoložljivih posodobitev...',\n    'force_label' => 'Vsili posodobitev',\n    'found' => [\n      'label' => 'Nove posodobitve so na voljo!',\n      'help' => 'Kliknite \"Posodobitev programske opreme\" za začetek posodabljanja.',\n    ],\n    'none' => [\n      'label' => 'Ni posodobitev',\n      'help' => 'Nove posodobitve niso na voljo.',\n    ],\n    'important_action' => [\n      'empty' => 'Izberite dejanje',\n      'confirm' => 'Potrdi posodobitev',\n      'skip' => 'Preskoči to posodobitev (le tokrat)',\n      'ignore' => 'Preskoči to posodobitev (vedno)',\n    ],\n    'important_action_required' => 'Potrebno je ukrepanje',\n    'important_view_guide' => 'Oglejte si navodila za nadgradnjo',\n    'important_view_release_notes' => 'Oglejte si opombe ob izdaji',\n    'important_alert_text' => 'Nekatere posodobitve potrebujejo vašo pozornost.',\n    'details_title' => 'Podrobnosti vtičnika',\n    'details_view_homepage' => 'Odpri spletno stran',\n    'details_changelog' => 'Dnevnik sprememb',\n    'details_changelog_missing' => 'Dnevnik sprememb ni na voljo.',\n    'details_current_version' => 'Trenutna različica',\n    'details_author' => 'Avtor',\n  ],\n  'server' => [\n    'connect_error' => 'Napaka pri povezavi s strežnikom.',\n    'response_not_found' => 'Strežnika za posodobitve ni bilo mogoče najti.',\n    'response_invalid' => 'Neveljaven odgovor s strani strežnika.',\n    'response_empty' => 'Prazen odgovor s strani strežnika.',\n    'file_error' => 'Strežniku ni uspelo dostaviti paketa.',\n    'file_corrupt' => 'Datoteka s strežnika je poškodovana.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Objekt :class mora imeti definirano lastnost $:property, ki jo uporablja :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Datoteke z nastavitvami :file, definirane za :location ni mogoče najti.',\n    'required' => 'Nastavitve uporabljene v :location morajo vsebovati vrednost \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Datoteke \\':file\\' ni mogoče ekstrahirati.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Počisti dnevnik zahtev',\n    'empty_loading' => 'Čiščenje dnevnika zahtev...',\n    'empty_success' => 'Dnevnik zahtev je izpraznjen.',\n    'return_link' => 'Vrni se na seznam zahtev',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistem',\n    'manage_system_settings' => 'Upravljanje sistemskih nastavitev',\n    'manage_software_updates' => 'Upravljanje posodobitev programske opreme',\n    'access_logs' => 'Prikaz sistemskih dnevnikov',\n    'manage_mail_templates' => 'Upravljanje e-poštnih predlog',\n    'manage_mail_settings' => 'Upravljanje e-poštnih nastavitev',\n    'manage_other_administrators' => 'Upravljanje ostalih administratorjev',\n    'impersonate_users' => 'Impersonacija uporabnikov',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Podana je nepravilna lokacija datoteke: \\':path\\'.',\n    'folder_size_items' => 'element(i)',\n  ],\n  'page' => [\n    'custom_error' => [\n      'label' => 'Napaka strani',\n      'help' => 'Žal je prišlo do napake in strani ni mogoče prikazati.',\n    ],\n    'invalid_token' => [\n      'label' => 'Neveljaven varnostni ključ',\n    ],\n    'maintenance' => [\n      'label' => 'Takoj bomo nazaj!',\n      'help' => 'Trenutno potekajo vzdrževalna dela, kmalu se vrnemo!',\n      'message' => 'Sporočilo:',\n      'available_at' => 'Poskusite znova po:',\n    ],\n  ],\n  'pagination' => [\n    'previous' => 'Prejšnja',\n    'next' => 'Naslednja',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/sl/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'             => '\":attribute\" mora biti sprejet.',\n    'active_url'           => '\":attribute\" ni veljaven URL naslov.',\n    'after'                => '\":attribute\" mora biti datum po :date.',\n    'after_or_equal'       => '\":attribute\" mora biti datum, enak ali kasnejši kot :date.',\n    'alpha'                => '\":attribute\" lahko vsebuje le črke.',\n    'alpha_dash'           => '\":attribute\" lahko vsebuje le črke, številke in pomišljaje.',\n    'alpha_num'            => '\":attribute\" lahko vsebuje le črke in številke.',\n    'array'                => '\":attribute\" mora biti niz elementov.',\n    'before'               => '\":attribute\" mora biti datum pred :date.',\n    'before_or_equal'      => '\":attribute\" mora biti datum pred ali enak datumu :date.',\n    'between'              => [\n        'numeric' => '\":attribute\" mora biti med :min in :max.',\n        'file'    => '\":attribute\" mora biti med :min in max: kB.',\n        'string'  => '\":attribute\" mora vsebovati med :min in :max znakov.',\n        'array'   => '\":attribute\" mora vsebovati med :min in :max elementov.',\n    ],\n    'boolean'              => '\":attribute\" mora biti Da (true) ali Ne (false).',\n    'confirmed'            => 'Potrditev polja \":attribute\" se ne ujema.',\n    'date'                 => '\":attribute\" ni veljaven datum.',\n    'date_equals'          => '\":attribute\" mora biti datum enak :date.',\n    'date_format'          => '\":attribute\" se ne ujema s formatom :format.',\n    'different'            => '\":attribute\" in :other morata biti različna.',\n    'digits'               => '\":attribute\" mora vsebovati :digits številk.',\n    'digits_between'       => '\":attribute\" mora vsebovati med :min in :max številk.',\n    'dimensions'           => '\":attribute\" vsebuje neveljavne dimenzije slike.',\n    'distinct'             => '\":attribute\" polje ima podvojeno vrednost.',\n    'email'                => '\":attribute\" mora biti veljaven e-poštni naslov.',\n    'ends_with'            => '\":attribute\" se mora končati z eno od naslednjih vrednosti: :values.',\n    'exists'               => 'Izbran element \":attribute\" je neveljaven.',\n    'file'                 => '\":attribute\" mora biti datoteka.',\n    'filled'               => '\":attribute\" polje mora vsebovati vrednost.',\n    'gt'                   => [\n        'numeric' => ':attribute mora biti večji od :value.',\n        'file'    => ':attribute mora biti večji od :value kB.',\n        'string'  => ':attribute mora vsebovati več kot :value znakov.',\n        'array'   => ':attribute mora vsebovati več kot :value elementov.',\n    ],\n    'gte'                  => [\n        'numeric' => ':attribute mora biti večji ali enak kot :value.',\n        'file'    => ':attribute mora biti večji ali enak kot :value kB.',\n        'string'  => ':attribute mora vsebovati vsaj ali več kot :value znakov.',\n        'array'   => ':attribute mora vsebovati vsaj :value elementov ali več.',\n    ],\n    'image'                => '\":attribute\" mora biti slika.',\n    'in'                   => 'Izbran element \":attribute\" je neveljaven.',\n    'in_array'             => 'Element \":attribute\" ne obstaja v \":other\".',\n    'integer'              => '\":attribute\" mora biti celo število.',\n    'ip'                   => '\":attribute\" mora biti veljaven IP naslov.',\n    'ipv4'                 => '\":attribute\" mora biti veljaven IPv4 naslov.',\n    'ipv6'                 => '\":attribute\" mora biti veljaven IPv6 naslov.',\n    'json'                 => '\":attribute\" mora biti veljaven JSON format.',\n    'lt'                   => [\n        'numeric' => ':attribute mora biti manjši od :value.',\n        'file'    => ':attribute mora biti manjši od :value kB.',\n        'string'  => ':attribute mora vsebovati manj kot :value znakov.',\n        'array'   => ':attribute mora vsebovati manj kot :value elementov.',\n    ],\n    'lte'                  => [\n        'numeric' => ':attribute mora biti manjši ali enak kot :value.',\n        'file'    => ':attribute mora biti manjši ali enak kot :value kB.',\n        'string'  => ':attribute mora vsebovati manj ali enako kot :value znakov.',\n        'array'   => ':attribute ne sme vsebovati več kot :value elementov.',\n    ],\n    'max'                  => [\n        'numeric' => ':attribute ne sme biti večji od :max.',\n        'file'    => ':attribute ne sme biti večji od :max kB.',\n        'string'  => ':attribute ne sme biti večji od :max znakov.',\n        'array'   => ':attribute ne sme vsebovati več kot :max elementov.',\n    ],\n    'mimes'                => ':attribute mora biti datoteka tipa :values.',\n    'mimetypes'            => ':attribute mora biti datoteka tipa :values.',\n    'min'                  => [\n        'numeric' => ':attribute mora biti vsaj :min.',\n        'file'    => ':attribute mora imeti vsaj :min kB.',\n        'string'  => ':attribute mora imeti vsaj :min znakov.',\n        'array'   => ':attribute mora vsebovati vsaj :min elementov.',\n    ],\n    'not_in'               => 'Izbrani element \":attribute\" je neveljaven.',\n    'not_regex'            => 'Format za \":attribute\" je neveljaven.',\n    'numeric'              => '\":attribute\" mora biti število.',\n    'present'              => 'Polje za \":attribute\" mora obstajati.',\n    'regex'                => 'Format za \":attribute\" je neveljaven.',\n    'required'             => 'Polje za \":attribute\" je obvezno.',\n    'required_if'          => 'Polje za \":attribute\" je obvezno, kadar ima :other vrednost :value.',\n    'required_unless'      => 'Polje za \":attribute\" je obvezno, razen kadar ima :other vrednosti :values.',\n    'required_with'        => 'Polje za \":attribute\" je obvezno, kadar :values obstaja.',\n    'required_with_all'    => 'Polje za \":attribute\" je obvezno, kadar :values obstaja.',\n    'required_without'     => 'Polje za \":attribute\" je obvezno, kadar :values ne obstaja.',\n    'required_without_all' => 'Polje za \":attribute\" je obvezno, kadar nobeden od :values ne obstaja.',\n    'same'                 => '\":attribute\" in \":other\" se morata ujemati.',\n    'size'                 => [\n        'numeric' => ':attribute mora biti :size.',\n        'file'    => ':attribute mora imeti :size kB.',\n        'string'  => ':attribute mora vsebovati :size znakov.',\n        'array'   => ':attribute mora vsebovati :size elementov.',\n    ],\n    'starts_with'          => '\":attribute\" se mora začeti z eno od naslednjih vrednosti: :values.',\n    'string'               => '\":attribute\" mora biti veljaven znakovni niz.',\n    'timezone'             => '\":attribute\" mora biti veljavno območje.',\n    'unique'               => 'Element \":attribute\" je že zaseden.',\n    'uploaded'             => 'Elementa \":attribute\" ni bilo mogoče naložiti.',\n    'url'                  => 'Format za \":attribute\" je neveljaven.',\n    'uuid'                 => '\":attribute\" mora biti veljaven UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/sl.json",
    "content": "{\n  \"Check For Updates\": \"Preveri za nove posodobitve\",\n  \"Install Packages\": \"Namestite pakete\",\n  \"Manage Themes\": \"Upravljanje tem\",\n  \"Manage Plugins\": \"Upravljanje vtičnikov\",\n  \"Project\": \"Projekt\",\n  \"Owner\": \"Lastnik\",\n  \"Plugins\": \"Vtičniki\",\n  \"Recommended\": \"Priporočeno\",\n  \"Disabled\": \"Onemogočeno\",\n  \"Current Build\": \"Trenutna različica\",\n  \"Updates Available\": \"Na voljo posodobitve\",\n  \"Up to Date\": \"Ažurno\",\n  \"Latest Build\": \"Najnovejša različica\",\n  \"View Changelog\": \"Pokaži dnevnik sprememb\",\n  \"Software Updates\": \"Posodobitve in vtičniki\",\n  \"Update the system modules and plugins.\": \"Posodobitev sistema, upravljanje in nameščanje vtičnikov in tem.\",\n  \"General\": \"Splošno\",\n  \"Mail\": \"E-pošta\",\n  \"Utilities\": \"Pripomočki\",\n  \"Settings\": \"Nastavitve\",\n  \"Show All Settings\": \"Prikaži vse nastavitve\",\n  \"Unable to find the specified settings.\": \"Navedenih nastavitev ni mogoče najti.\",\n  \"The settings page is missing a Model definition.\": \"Na strani z nastavitvami manjka definicija modela.\",\n  \":name settings updated\": \"Nastavitve za \\\":name\\\" so shranjene.\",\n  \"Return to System Settings\": \"Vrni se na sistemske nastavitve\",\n  \"Search Settings...\": \"Poiščite nastavitev...\",\n  \"Disable mail branding CSS\": \"Onemogoči CSS za blagovno znamko pošte\",\n  \"Manage Sites\": \"Upravljanje spletnih mest\",\n  \"Manage the websites available for this application.\": \"Upravljajte spletna mesta, ki so na voljo za to aplikacijo.\",\n  \"Marketplace\": \"Tržnica\",\n  \"There is no documentation provided.\": \"Dokumentacija ni na voljo.\",\n  \"Documentation\": \"Dokumentacija\",\n  \"Upgrade Guide\": \"Navodila za nadgradnjo\",\n  \"License\": \"Licenca\",\n  \"Attach to Project\": \"Pripni na projekt\",\n  \"Manage Updates\": \"Upravljanje posodobitev\",\n  \"Software Update\": \"Posodobitev programske opreme\",\n  \"Return to Software Updates\": \"Vrni se na sistemske posodobitve\",\n  \"Try Again\": \"Poskusi ponovno\",\n  \"Unpacking application files\": \"Ekstrahiranje datotek aplikacije\",\n  \"Update Failed\": \"Posodabljanje ni bilo uspešno.\",\n  \"Unpacking plugin: :name\": \"Ekstrahiranje vtičnika :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Primarno mesto se uporablja privzeto in ga ni mogoče izbrisati.\",\n  \"Disabled sites are not shown on the frontend.\": \"Onemogočena spletna mesta niso prikazana na sprednji strani.\",\n  \"Enabled in the Admin Panel\": \"Omogočeno na skrbniški plošči\",\n  \"Configuration\": \"Konfiguracija\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Uporabite to, če želite, da je spletno mesto omogočeno na skrbniški plošči.\",\n  \"Install\": \"Namestite\",\n  \"Sync Project\": \"Sinhronizacija projekta\",\n  \"Name\": \"Ime\",\n  \"Unique Code\": \"Edinstvena koda\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Spletna mesta\",\n  \"Create Site\": \"Ustvari spletno mesto\",\n  \"Base URL\": \"Osnovni URL\",\n  \"Status\": \"Stanje\",\n  \"Current default value: :value\": \"Trenutna privzeta vrednost: :value\",\n  \"Locale\": \"Jezik\",\n  \"Timezone\": \"Časovni pas\",\n  \"Custom application URL\": \"URL aplikacije po meri\",\n  \"Override the application URL when this site is active.\": \"Preglasi URL aplikacije, ko je to mesto aktivno.\",\n  \"Use a CMS route prefix\": \"Uporabite predpono poti CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Predpona lahko identificira to mesto, ko uporabljate ime gostitelja v skupni rabi.\",\n  \"Define matching hostnames\": \"Določite ustrezna imena gostiteljev\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Določite imena domen in vzorce, ki jih je treba uporabiti za delovanje tega mesta.\",\n  \"Display a style for this site\": \"Prikažite barvo za to spletno mesto\",\n  \"To help identify this site, display a color in the admin panel.\": \"Za lažjo identifikacijo tega mesta prikažite barvo na skrbniški plošči.\",\n  \"Save\": \"Shrani\",\n  \"Save and Close\": \"Shrani in zapri\",\n  \"Use Default\": \"Uporabi privzeto\",\n  \"Use Custom\": \"Uporabi po meri\",\n  \"Specify a custom locale code.\": \"Določite jezikovno kodo po meri.\",\n  \"Failed\": \"Ni uspelo\",\n  \"or\": \"ali\",\n  \"Code\": \"Koda\",\n  \"October CMS Marketplace\": \"October CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Projekt nima vtičnikov ali tem. Obiščite :link in jih dodajte.\",\n  \"Buy Now\": \"Kupi zdaj\",\n  \"Updating package manager\": \"Posodabljanje upravitelja paketov\",\n  \"Updating application files\": \"Posodabljanje datotek aplikacije\",\n  \"Setting build number\": \"Nastavljanje številke različice\",\n  \"Finishing update process\": \"Zaključevanje posodabljanja\",\n  \"Installing plugin: :name\": \"Nameščanje vtičnika :name\",\n  \"Finishing installation process\": \"Zaključevanje namestitvenega postopka\",\n  \"Removing theme: :name\": \"Odstranjevanje teme: :name\",\n  \"Please specify a Theme name to install.\": \"Podajte ime teme, ki jo želite namestiti.\",\n  \"Installing theme: :name\": \"Nameščanje teme :name\",\n  \"Extracting theme: :name\": \"Extracting theme: :name\",\n  \"Seeding theme: :name\": \"Seeding theme: :name\",\n  \"Removing plugin: :name\": \"Odstranjevanje vtičnika: :name\",\n  \"Please specify a Plugin name to install.\": \"Podajte ime vtičnika, ki ga želite namestiti.\",\n  \"Update process complete\": \"Posodabljanje končano.\",\n  \"Package installed successfully\": \"Vtičnik je bil uspešno nameščen.\",\n  \"Check Dependencies\": \"Preverite odvisnosti\",\n  \"Install Dependencies\": \"Namestite odvisnosti\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Za pravilno delovanje sistema manjkajo odvisnosti.\",\n  \"License Key\": \"Licenčni ključ\",\n  \"How to find your License Key\": \"Kako najti svoj licenčni ključ\",\n  \"The password attribute is required.\": \"Zahtevan je atribut gesla.\",\n  \"The login attribute is required.\": \"Zahtevan je atribut za prijavo.\",\n  \"Cannot login user since they are not activated.\": \"Uporabnika ni mogoče prijaviti, ker ni aktiviran.\",\n  \"Cannot login user since they are banned.\": \"Uporabnika ni mogoče prijaviti, ker je suspendiran.\",\n  \"Cannot login user since they are suspended.\": \"Uporabnika ni mogoče prijaviti, ker je suspendiran.\",\n  \"A user was not found with the given credentials.\": \"Uporabnik ni bil najden z danimi poverilnicami.\",\n  \"A user was found but the password did not match.\": \"Uporabnik je bil najden, vendar se geslo ne ujema.\",\n  \"User is not logged in\": \"Uporabnik ni prijavljen\",\n  \"Register Software\": \"Registrirajte programsko opremo\",\n  \"View the Dashboard\": \"Prikaz namizja oz. nadzorne plošče\",\n  \"Set the Default Dashboard\": \"Upravljanje s privzetim namizjem oz. nadzorno ploščo\",\n  \"Log File\": \"Dnevniška datoteka\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Brez enkripcije\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Nastavitve e-pošte\",\n  \"Manage email configuration.\": \"Upravljanje z nastavitvami za pošiljanje e-pošte.\",\n  \"Sender Name\": \"Ime pošiljatelja\",\n  \"Sender Email\": \"E-pošta pošiljatelja\",\n  \"Mail Method\": \"Način za e-pošto\",\n  \"SMTP Address\": \"SMTP naslov\",\n  \"SMTP Port\": \"SMTP vrata (port)\",\n  \"SMTP Encryption Protocol\": \"Enkripcijski protokol za SMTP\",\n  \"SMTP Authorization Required\": \"Obvezna SMTP avtorizacija\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Označite, če vaš SMTP strežnik zahteva avtorizacijo.\",\n  \"Username\": \"Uporabniško ime\",\n  \"Password\": \"Geslo\",\n  \"Sendmail Path\": \"Sendmail lokacija\",\n  \"Please specify the path of the sendmail program.\": \"Določite lokacijo Sendmail programa.\",\n  \"Mailgun Domain\": \"Mailgun domena\",\n  \"Please specify the Mailgun domain name.\": \"Določite domensko ime za Mailgun (Mailgun domain name).\",\n  \"Mailgun Secret\": \"Mailgun geslo\",\n  \"Enter your Mailgun API key.\": \"Vnesite API ključ za Mailgun (Mailgun API key).\",\n  \"SES Key\": \"SES ključ\",\n  \"Enter your SES API key\": \"Vnesite API ključ za SES.\",\n  \"SES Secret\": \"SES geslo\",\n  \"Enter your SES API secret key\": \"Vnesite skrivni API ključ za SES (SES API secret key).\",\n  \"SES Region\": \"SES regija\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Vnesite SES regijo (SES region, npr. us-east-1).\",\n  \"Postmark Token\": \"Postmark geslo\",\n  \"Enter your Postmark API secret key\": \"Vnesite skrivni API ključ za Postmark (Postmark API secret key).\",\n  \"Define administrator roles\": \"Define administrator roles\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Restrict access to this site to only administrator with the following roles.\",\n  \"Group\": \"Group\",\n  \"Create Group\": \"Create Group\",\n  \"Site Group\": \"Site Group\",\n  \"Site Groups\": \"Site Groups\",\n  \"Manage Site Groups\": \"Manage Site Groups\",\n  \"Group Name\": \"Group Name\",\n  \"All Sites\": \"All Sites\",\n  \"Manage Backend Preferences\": \"Upravljanje z nastavitvami administracije\",\n  \"Manage Code Editor Preferences\": \"Upravljanje z nastavitvami urejevalnika kode\",\n  \"Customize Backend Styles\": \"Prilagajanje administracije\",\n  \"Mail Templates\": \"E-poštne predloge\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Urejanje e-poštnih predlog in vsebin, ki se pošiljajo uporabnikom.\",\n  \"Mail Branding\": \"Oblikovanje e-pošte\",\n  \"Modify the colors and appearance of mail templates.\": \"Spreminjanje barvne sheme in izgleda e-poštnih predlog.\",\n  \"Event Log\": \"Dnevnik dogodkov\",\n  \"View system log messages with their recorded time and details.\": \"Prikaz dnevnika sistemskih sporočil z zabeleženimi časi in podrobnostmi.\",\n  \"Request Log\": \"Dnevnik zahtev\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Ogled slabih ali preusmerjenih zahtev, kot npr. Strani ni bilo mogoče najti (404).\",\n  \"Log Settings\": \"Nastavitve dnevnikov\",\n  \"Specify which areas should use logging.\": \"Določanje področij, ki naj uporabljajo dnevnike beleženja.\",\n  \"Test message sent.\": \"Testno sporočilo poslano.\",\n  \"New Layout\": \"Nova postavitev\",\n  \"New Partial\": \"Nova podpredloga\",\n  \"New Template\": \"Nova predloga\",\n  \"Template\": \"Predloga\",\n  \"Templates\": \"Predloge\",\n  \"Layouts\": \"Postavitve\",\n  \"Partials\": \"Podpredloge\",\n  \"Partial\": \"Podpredloga\",\n  \"Mail Partials\": \"E-poštne predloge\",\n  \"Layout\": \"Postavitev\",\n  \"Mail Layouts\": \"E-poštne postavitve\",\n  \"Unique code used to refer to this template\": \"Unikatna koda, ki se nanaša na to predlogo.\",\n  \"-- No layout --\": \"-- brez postavitve --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Neformatirano\",\n  \"Disable automatic inline CSS\": \"Onemogoči vgrajeni CSS (inline)\",\n  \"Options\": \"Možnosti\",\n  \"Subject\": \"Zadeva\",\n  \"Email message subject\": \"Zadeva e-poštnega sporočila.\",\n  \"Description\": \"Opis\",\n  \"Drivers Not Installed\": \"Gonilniki niso nameščeni\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Ta način pošiljanja potrebuje namestitev vtičnika \\\":plugin\\\".\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID dogodka\",\n  \"Level\": \"Tip dogodka\",\n  \"Date & Time\": \"Datum in čas\",\n  \"Message\": \"Sporočilo\",\n  \"Logging\": \"Dnevniki\",\n  \"Log Bad Requests\": \"Beleži neuspešne zahteve\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Zahteve brskalnika, ki lahko potrebujejo pozornost, kot na primer napake 404.\",\n  \"Log Theme Changes\": \"Beleži spremembe tem\",\n  \"When a change is made to the theme using the backend.\": \"Kadar je sprememba teme narejena v administraciji.\",\n  \"Log System Events\": \"Dnevnik sistemskih dogodkov\",\n  \"Store system events in the database in addition to the file-based log.\": \"Shrani sistemske dogodke tudi v podatkovno bazo in ne samo v dnevniško datoteko.\",\n  \"Background\": \"Ozadje\",\n  \"Body background\": \"Ozadje strani\",\n  \"Content background\": \"Ozadje vsebine\",\n  \"Inner content background\": \"Ozadje notranje vsebine\",\n  \"Buttons\": \"Gumbi\",\n  \"Button text color\": \"Barva pisave gumba\",\n  \"Primary button background\": \"Ozadje primarnega gumba\",\n  \"Positive button background\": \"Ozadje pozitivnega gumba\",\n  \"Negative button background\": \"Ozadje negativnega gumba\",\n  \"Typography\": \"Tipografija\",\n  \"Header color\": \"Barva glave\",\n  \"Headings color\": \"Barva naslovov\",\n  \"Text color\": \"Barva besedila\",\n  \"Link color\": \"Barva povezav\",\n  \"Footer color\": \"Barva noge\",\n  \"Borders\": \"Robovi\",\n  \"Body border color\": \"Barva roba strani\",\n  \"Subcopy border color\": \"Barva roba noge sporočila\",\n  \"Table border color\": \"Barva robov tabel\",\n  \"Components\": \"Komponente\",\n  \"Panel background\": \"Ozadje barvnega okvira\",\n  \"Promotion background\": \"Ozadje promocije\",\n  \"Promotion border color\": \"Barva robov promocije\",\n  \"Customize Mail Appearance\": \"Prilagoditev videza e-pošte\",\n  \"Version\": \"Različica\",\n  \"Enabled\": \"Vtičnik je omogočen\",\n  \"Latest\": \"Latest\",\n  \"Log ID\": \"ID dnevnika\",\n  \"Counter\": \"Števec\",\n  \"Referers\": \"Reference\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Ta dnevnik prikaže napake, ki se lahko pojavijo v aplikaciji in informacije za odpravljanje napak.\",\n  \"Event\": \"Dogodek\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Ta dnevnik prikaže zahteve brskalnika, ki lahko potrebujejo pozornost. Če npr. obiskovalec odpre stran v CMS, ki je ni mogoče najti, se ustvari zapis s statusno kodo 404.\",\n  \"There were no detected referrers to this URL.\": \"There were no detected referrers to this URL.\",\n  \"Request\": \"Zahteva\",\n  \"Event log emptied\": \"Dnevnik dogodkov je izpraznjen.\",\n  \"Empty Event Log\": \"Počisti dnevnik dogodkov\",\n  \"Emptying Event Log...\": \"Čiščenje dnevnika dogodkov...\",\n  \"Return to Event Log\": \"Vrni se na dnevnik dogodkov\",\n  \"Installed\": \"Installed\",\n  \"Primary Site\": \"Primary Site\",\n  \"Refresh Data\": \"Refresh Data\",\n  \"Remove Data\": \"Remove Data\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Ali ste prepričani, da želite ponastaviti izbrane vtičnike? S tem boste ponastavili podatke vsakega posameznega vtičnika in ga obnovili v začetno stanje namestitve.\",\n  \"Reset Plugin Data\": \"Ponastavi podatke vtičnikov\",\n  \"Enable Plugins\": \"Omogoči vtičnike\",\n  \"Are you sure you want to :action these plugins?\": \"Ali ste prepričani, da želite :action-ti te vtičnike?\",\n  \"enable\": \"omogoči\",\n  \"disable\": \"onemogoči\",\n  \"Disable Plugins\": \"Onemogoči vtičnike\",\n  \"Select Action...\": \"Izberite dejanje...\",\n  \"Data has been removed.\": \"Data has been removed.\",\n  \"Plugin has been removed from the file system.\": \"Vtičnik je bil odstranjen iz datotečnega sistema.\",\n  \"search plugins to install...\": \"išči vtičnike za namestitev...\",\n  \"Plugin has been disabled by configuration.\": \"Plugin has been disabled by configuration.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Plugin has missing dependencies or disabled by system.\",\n  \"search themes to install...\": \"išči teme za namestitev...\",\n  \"Install Theme\": \"Namesti temo\",\n  \"Theme Name\": \"Ime teme\",\n  \"Install Plugin\": \"Namesti vtičnik\",\n  \"Plugin Name\": \"Ime vtičnika\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Poimenujte vtičnik po njegovi unikatni kodi, npr.: RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Poimenujte temo po njeni unikatni kodi, npr.: RainLab.Vanilla\",\n  \"Select Installation Method\": \"Select Installation Method\",\n  \"Make a Copy (Recommended)\": \"Make a Copy (Recommended)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Take a copy of this theme to customize it and manually manage future updates.\",\n  \"Install with Composer\": \"Install with Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Extend the theme using a child theme to preserve future updates from the theme author.\",\n  \"Seed Theme Data\": \"Seed Theme Data\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Change Status\",\n  \"Site Definitions\": \"Site Definitions\",\n  \"System Updates\": \"Posodobitve in vtičniki\",\n  \"Find a Setting...\": \"Poiščite nastavitev...\",\n  \"Return to System Updates\": \"Vrni se na sistemske posodobitve\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\"\n}"
  },
  {
    "path": "modules/system/lang/sv/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatering',\n        'quote' => 'Citat',\n        'code' => 'Kod',\n        'header1' => 'Rubrik 1',\n        'header2' => 'Rubrik 2',\n        'header3' => 'Rubrik 3',\n        'header4' => 'Rubrik 4',\n        'header5' => 'Rubrik 5',\n        'header6' => 'Rubrik 6',\n        'bold' => 'Fet',\n        'italic' => 'Kursiv',\n        'unorderedlist' => 'Oordnad lista',\n        'orderedlist' => 'Ordnad lista',\n        'video' => 'Video',\n        'image' => 'Bild',\n        'link' => 'Länk',\n        'horizontalrule' => 'Infoga horisontiell linje',\n        'fullscreen' => 'Fullskärm',\n        'preview' => 'Förhandsgranska',\n    ],\n\n    'mediamanager' => [\n        'insert_link' => \"Infoga medialänk\",\n        'insert_image' => \"Infoga bild\",\n        'insert_video' => \"Infoga video\",\n        'insert_audio' => \"Infoga ljud\",\n        'invalid_file_empty_insert' => \"Vänligen välj en fil att infoga till länken.\",\n        'invalid_file_single_insert' => \"Vänligen välj en enskild fil.\",\n        'invalid_image_empty_insert' => \"Vänligen välj bild(er) att infoga.\",\n        'invalid_video_empty_insert' => \"Vänligen välj en video att infoga.\",\n        'invalid_audio_empty_insert' => \"Vänligen välj en ljudfil att infoga.\",\n    ],\n\n    'alert' => [\n        'confirm_button_text' => 'OK',\n        'cancel_button_text' => 'Avbryt',\n    ],\n\n];\n"
  },
  {
    "path": "modules/system/lang/sv/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Getting back to basics',\n  ],\n  'directory' => [\n    'create_fail' => 'Kunde inte skapa mapp: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Kunde inte skapa fil: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Ogiltig säkerhetstoken',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'System',\n    'menu_label' => 'System',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Övrigt',\n      'logs' => 'Loggar',\n      'mail' => 'Mail',\n      'shop' => 'Affär',\n      'team' => 'Lag',\n      'users' => 'Användare',\n      'system' => 'System',\n      'social' => 'Social',\n      'events' => 'Händelser',\n      'customers' => 'Kunder',\n      'my_settings' => 'Mina inställningar',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'Namnlöst tema',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Installerar teman',\n    'installed' => 'Installerade teman',\n    'no_themes' => 'Det finns inga teman installerade från marknadsplatsen.',\n    'recommended' => 'Rekommenderat',\n    'remove_confirm' => 'Är du säker på att du vill radera det här temat?',\n  ],\n  'plugin' => [\n    'label' => 'Tillägg',\n    'unnamed' => 'Namnlöst tillägg',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Aktivera eller inaktivera',\n    'enable_or_disable_title' => 'Aktivera eller inaktivera tillägg',\n    'install' => 'Installera tillägg',\n    'install_products' => 'Installera produkter',\n    'installed' => 'Installerade tillägg',\n    'no_plugins' => 'Det finns inga tillägg installerade från marknadsplatsen.',\n    'recommended' => 'Rekommenderat',\n    'remove' => 'Ta bort',\n    'refresh' => 'Uppdatera',\n    'disabled_label' => 'Avaktivera',\n    'disabled_help' => 'De avaktiverade tilläggen ignorerades av systemet.',\n    'frozen_label' => 'Frys uppdateringar',\n    'frozen_help' => 'Tillägg som är frusna kommer att ignoreras av uppdateringsprocessen.',\n    'selected_amount' => 'Markerade tillägg: :amount',\n    'remove_confirm' => 'Är du säker?',\n    'remove_success' => 'Tilläggen raderades.',\n    'refresh_success' => 'Tilläggen uppdaterades.',\n    'disable_confirm' => 'Är du säker?',\n    'disable_success' => 'Tilläggen avaktiverades.',\n    'enable_success' => 'Aktiverade tilläggen.',\n  ],\n  'project' => [\n    'attach' => 'Länka projekt',\n    'detach' => 'Avlänka projekt',\n    'none' => 'Inget',\n    'id' => [\n      'missing' => 'Vänligen välj ett Projekt-ID',\n    ],\n    'detach_confirm' => 'Vill du verkligen avlänka detta projekt?',\n    'unbind_success' => 'Projektet har avlänkats',\n  ],\n  'settings' => [\n    'search' => 'Sök',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL-anslutning krävs',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Unikt namn för att hänvisa till den här mallen',\n    'test_send' => 'Skicka ett testmeddelande',\n    'return' => 'Återvänd till mallistan',\n    'test_confirm' => 'Ett testmeddelande kommer skickas till :email. Fortsätt?',\n    'saving' => 'Sparar mall...',\n    'sending' => 'Skickar testmeddelande...',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Skapare',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Build :build',\n    'core_build_help' => 'Senaste build är tillgänglig.',\n    'themes' => 'Teman',\n    'plugin_version_none' => 'Nytt tillägg',\n    'plugin_current_version' => 'Nuvarande version',\n    'theme_new_install' => 'Installation av nytt tema.',\n    'theme_extracting' => 'Packar upp temat: :name',\n    'update_label' => 'Uppdatera systemet',\n    'update_loading' => 'Laddar tillgängliga uppdateringar...',\n    'force_label' => 'Tvinga uppdatering',\n    'found' => [\n      'label' => 'Hittade nya uppdateringar!',\n      'help' => 'Klicka på Uppdatera systemet för att påbörja processen.',\n    ],\n    'none' => [\n      'label' => 'Inga uppdateringar',\n      'help' => 'Inga nya uppdateringar hittades.',\n    ],\n    'important_action' => [\n      'empty' => 'Välj åtgärd',\n      'confirm' => 'Bekräfta uppdatering',\n      'skip' => 'Hoppa över detta tillägg (en gång)',\n      'ignore' => 'Hoppa över detta tillägg (alltid)',\n    ],\n    'important_action_required' => 'Åtgärd krävs',\n    'important_view_guide' => 'Visa uppgraderingsguide',\n    'important_alert_text' => 'Några uppdateringar behöver din uppmärksamhet.',\n    'details_title' => 'Tilläggsdetaljer',\n    'details_view_homepage' => 'Visa hemsida',\n    'details_current_version' => 'Nuvarande version',\n    'details_author' => 'Författare',\n  ],\n  'server' => [\n    'connect_error' => 'Ett fel uppstod vid anslutning till servern.',\n    'response_not_found' => 'Uppdateringsserver kunde ej hittas.',\n    'response_invalid' => 'Felaktigt svar från servern.',\n    'response_empty' => 'Tomt svar från servern.',\n    'file_error' => 'Servern kunde inte leverera paketet.',\n    'file_corrupt' => 'Filen från servern är korrupt.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Klassen :class måste definiera egenskapen $:property som används av :behavior -egenskapen',\n  ],\n  'config' => [\n    'not_found' => 'Kunde inte hitta konfigurationsfilen :file definierad för :location',\n    'required' => 'Konfigurationen som används i :location måste sända med ett värde :property',\n  ],\n  'zip' => [\n    'extract_failed' => 'Kunde inte packa upp core-fil \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Töm förfrågningsloggen',\n    'empty_loading' => 'Tömmer förfrågningsloggen...',\n    'empty_success' => 'Lyckades tömma förfrågningsloggen.',\n    'return_link' => 'Återvänd till förfrågningsloggen',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'System',\n    'manage_system_settings' => 'Hantera systeminställningar',\n    'manage_software_updates' => 'Hantera systemuppdateringar',\n    'access_logs' => 'Visa systemloggen',\n    'manage_mail_templates' => 'Hantera e-postmallar',\n    'manage_mail_settings' => 'Hantera e-postinställningar',\n    'manage_other_administrators' => 'Hantera andra administratörer',\n  ],\n  'media' => [\n    'invalid_path' => 'Felaktig filsökväg angiven: \\':path\\'.',\n    'folder_size_items' => 'föremål',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/sv/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \":attribute måste accepteras.\",\n    \"active_url\"       => \":attribute är ej en korrekt URL.\",\n    \"after\"            => \":attribute måste vara ett datum efter :date.\",\n    \"alpha\"            => \":attribute får endast innehålla bokstäver.\",\n    \"alpha_dash\"       => \":attribute får endast innehålla bokstäver, nummer och streck.\",\n    \"alpha_num\"        => \":attribute får endast innehålla bokstäver och nummer\",\n    \"array\"            => \":attribute måste vara en array.\",\n    \"before\"           => \":attribute måste vara ett datum innan :date.\",\n    \"between\"          => [\n        \"numeric\" => \":attribute måste vara mellan :min - :max.\",\n        \"file\"    => \":attribute måste vara mellan :min - :max kilobytes.\",\n        \"string\"  => \":attribute måste vara mellan :min - :max tecken.\",\n        \"array\"   => \":attribute måste ha mellan :min - :max objekt.\",\n    ],\n    \"confirmed\"        => \":attribute bekräftelse matchar ej.\",\n    \"date\"             => \":attribute är inte ett korrekt datum.\",\n    \"date_format\"      => \":attribute matchar inte formatet :format.\",\n    \"different\"        => \":attribute och :other måste skilja sig åt.\",\n    \"digits\"           => \":attribute måste vara :digits siffror.\",\n    \"digits_between\"   => \":attribute måste vara between :min and :max siffror.\",\n    \"email\"            => \":attribute format är felaktigt.\",\n    \"exists\"           => \"Valt :attribute är felaktigt.\",\n    \"image\"            => \":attribute måste vara en bild.\",\n    \"in\"               => \"Valt :attribute är felaktigt.\",\n    \"integer\"          => \":attribute måste vara en siffra.\",\n    \"ip\"               => \":attribute måste vara en giltig epost-adress.\",\n    \"max\"              => [\n        \"numeric\" => \":attribute får inte vara större än :max.\",\n        \"file\"    => \":attribute får inte vara större än :max kilobytes.\",\n        \"string\"  => \":attribute får inte vara större än :max tecken.\",\n        \"array\"   => \":attribute får inte innehålla mer än :max objekt.\",\n    ],\n    \"mimes\"            => \":attribute måste vara en fil av typen: :values.\",\n    \"extensions\"       => \":attribute måste ha ett av följande filtillägg: :values.\",\n    \"min\"              => [\n        \"numeric\" => \":attribute måste vara minst :min.\",\n        \"file\"    => \":attribute måste vara minst :min kilobytes.\",\n        \"string\"  => \":attribute måste vara minst :min tecken.\",\n        \"array\"   => \":attribute måste ha minst :min objekt.\",\n    ],\n    \"not_in\"           => \"Valt :attribute är felaktigt.\",\n    \"numeric\"          => \":attribute måste vara ett number.\",\n    \"regex\"            => \":attribute format är felaktigt.\",\n    \"required\"         => \":attribute är obligatoriskt.\",\n    \"required_if\"      => \":attribute är obligatoriskt när :other is :value.\",\n    \"required_with\"    => \":attribute är obligatoriskt när :values är satt.\",\n    \"required_without\" => \":attribute är obligatoriskt när :values ej är satt.\",\n    \"same\"             => \":attribute och :other måste matcha.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute måste vara :size.\",\n        \"file\"    => \":attribute måste vara :size kilobytes.\",\n        \"string\"  => \":attribute måste vara :size tecken.\",\n        \"array\"   => \":attribute måste innehålla :size objekt.\",\n    ],\n    \"unique\"           => \":attribute är redan upptaget.\",\n    \"url\"              => \"Formatet :attribute är felaktigt.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/sv.json",
    "content": "{\n  \"Check For Updates\": \"Sök efter uppdateringar\",\n  \"Install Packages\": \"Installera paket\",\n  \"Manage Themes\": \"Hantera teman\",\n  \"Manage Plugins\": \"Hantera tillägg\",\n  \"Project\": \"Projekt\",\n  \"Owner\": \"Ägare\",\n  \"Plugins\": \"Tillägg\",\n  \"Recommended\": \"Rekommenderad\",\n  \"Disabled\": \"Avaktiverade\",\n  \"Current Build\": \"Nuvarande build\",\n  \"Updates Available\": \"Uppdateringar tillgängliga\",\n  \"Up to Date\": \"Aktuellt\",\n  \"Latest Build\": \"Senaste bygget\",\n  \"View Changelog\": \"Visa ändringslogg\",\n  \"Software Updates\": \"Uppdateringar\",\n  \"Update the system modules and plugins.\": \"Uppdatera systemet, hantera och installera tillägg och teman.\",\n  \"General\": \"Generellt\",\n  \"Mail\": \"Post\",\n  \"Utilities\": \"Verktyg\",\n  \"Settings\": \"Inställningar\",\n  \"Show All Settings\": \"Visa alla inställningar\",\n  \"Unable to find the specified settings.\": \"Det går inte att hitta de angivna inställningarna.\",\n  \"The settings page is missing a Model definition.\": \"Inställningssidan saknar en modell-definition\",\n  \":name settings updated\": \"Inställningar för :name har uppdaterats\",\n  \"Return to System Settings\": \"Återgå till systeminställningar\",\n  \"Search Settings...\": \"Hitta en inställning...\",\n  \"Disable mail branding CSS\": \"Inaktivera e-postvarumärkes-CSS\",\n  \"Manage Sites\": \"Hantera webbplatser\",\n  \"Manage the websites available for this application.\": \"Hantera de webbplatser som är tillgängliga för denna applikation.\",\n  \"Marketplace\": \"Marknad\",\n  \"There is no documentation provided.\": \"Det finns ingen dokumentation tillgänglig.\",\n  \"Documentation\": \"Dokumentation\",\n  \"Upgrade Guide\": \"Uppgraderingsguide\",\n  \"License\": \"Licens\",\n  \"Attach to Project\": \"Länka till Projekt\",\n  \"Manage Updates\": \"Hantera uppdateringar\",\n  \"Software Update\": \"Uppdatera systemet\",\n  \"Return to Software Updates\": \"Återgå till systemuppdateringar\",\n  \"Try Again\": \"Försök igen\",\n  \"Unpacking application files\": \"Packar upp applikationsfiler\",\n  \"Update Failed\": \"Updateringen misslyckades\",\n  \"Unpacking plugin: :name\": \"Packar upp tillägg: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Den primära webbplatsen används som standard och kan inte tas bort.\",\n  \"Disabled sites are not shown on the frontend.\": \"Inaktiverade webbplatser visas inte i gränssnittet.\",\n  \"Enabled in the Admin Panel\": \"Aktiverad i adminpanelen\",\n  \"Configuration\": \"Konfiguration\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Använd detta om du vill att webbplatsen ska aktiveras i adminpanelen.\",\n  \"Install\": \"Installera\",\n  \"Sync Project\": \"Synkronisera projekt\",\n  \"Name\": \"Namn\",\n  \"Unique Code\": \"Unik kod\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Webbplatser\",\n  \"Create Site\": \"Skapa webbplats\",\n  \"Base URL\": \"Bas-URL\",\n  \"Status\": \"Status\",\n  \"Current default value: :value\": \"Aktuellt standardvärde: :value\",\n  \"Locale\": \"Lokal\",\n  \"Timezone\": \"Tidszon\",\n  \"Custom application URL\": \"Anpassad applikations-URL\",\n  \"Override the application URL when this site is active.\": \"Åsidosätt applikationens URL när den här webbplatsen är aktiv.\",\n  \"Use a CMS route prefix\": \"Använd ett CMS-ruttprefix\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Ett prefix kan identifiera den här webbplatsen när du använder ett delat värdnamn.\",\n  \"Define matching hostnames\": \"Definiera matchande värdnamn\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Ange domännamn och mönster som måste användas för att betjäna den här webbplatsen.\",\n  \"Display a style for this site\": \"Visa en färg för den här webbplatsen\",\n  \"To help identify this site, display a color in the admin panel.\": \"För att hjälpa dig att identifiera den här webbplatsen, visa en färg på adminpanelen.\",\n  \"Save\": \"Spara\",\n  \"Save and Close\": \"Spara och stäng\",\n  \"Use Default\": \"Använd standard\",\n  \"Use Custom\": \"Använd Custom\",\n  \"Specify a custom locale code.\": \"Ange en anpassad lokalkod.\",\n  \"Failed\": \"Misslyckades\",\n  \"or\": \"eller\",\n  \"Code\": \"Kod\",\n  \"October CMS Marketplace\": \"Oktober CMS Marketplace\",\n  \"Visit the :link to add some.\": \"Project har inga plugins eller teman. Besök :länken för att lägga till några.\",\n  \"Buy Now\": \"Köp nu\",\n  \"Updating package manager\": \"Uppdaterar pakethanteraren\",\n  \"Updating application files\": \"Laddar ner applikationsfiler\",\n  \"Setting build number\": \"Ställa in byggnummer\",\n  \"Finishing update process\": \"Slutför uppdatering\",\n  \"Installing plugin: :name\": \"Laddar ner tillägg: :name\",\n  \"Finishing installation process\": \"Installationen är klar\",\n  \"Removing theme: :name\": \"Tar bort tema: :name\",\n  \"Please specify a Theme name to install.\": \"Vänligen specificera ett tema att installera.\",\n  \"Installing theme: :name\": \"Ladda ner temat: :name\",\n  \"Removing plugin: :name\": \"Tar bort plugin: :name\",\n  \"Please specify a Plugin name to install.\": \"Välj ett tilläggsnamn att installera\",\n  \"Update process complete\": \"Uppdateringen är slutförd.\",\n  \"Package installed successfully\": \"Tillägget har installerats\",\n  \"Check Dependencies\": \"Kontrollera beroenden\",\n  \"Install Dependencies\": \"Installera beroenden\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Det saknas beroenden som behövs för att systemet ska fungera korrekt.\",\n  \"License Key\": \"Licensnyckel\",\n  \"How to find your License Key\": \"Hur du hittar din licensnyckel\",\n  \"The password attribute is required.\": \"Lösenordsattributet krävs.\",\n  \"The login attribute is required.\": \"Inloggningsattributet krävs.\",\n  \"Cannot login user since they are not activated.\": \"Kan inte logga in användare eftersom de inte är aktiverade.\",\n  \"Cannot login user since they are banned.\": \"Kan inte logga in användare eftersom de är förbjudna.\",\n  \"Cannot login user since they are suspended.\": \"Kan inte logga in användare eftersom de är avstängda.\",\n  \"A user was not found with the given credentials.\": \"En användare hittades inte med de angivna användaruppgifterna.\",\n  \"A user was found but the password did not match.\": \"En användare hittades men lösenordet matchade inte.\",\n  \"User is not logged in\": \"Användaren är inte inloggad\",\n  \"Register Software\": \"Registrera programvara\",\n  \"View the Dashboard\": \"Visa kontrollpanelen\",\n  \"Set the Default Dashboard\": \"Ställ in standardinstrumentpanelen\",\n  \"Log File\": \"Loggfiler\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"HANS\",\n  \"Postmark\": \"Poststämpel\",\n  \"No encryption\": \"Ingen kryptering\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"E-postkonfiguration\",\n  \"Manage email configuration.\": \"Hantera e-postinställningar\",\n  \"Sender Name\": \"Avsändarnamn\",\n  \"Sender Email\": \"Avsändarens e-postadress\",\n  \"Mail Method\": \"E-postmetod\",\n  \"SMTP Address\": \"SMTP-adress\",\n  \"SMTP Port\": \"SMTP-port\",\n  \"SMTP Encryption Protocol\": \"SMTP-krypteringsprotokoll\",\n  \"SMTP Authorization Required\": \"SMTP-autentisering krävs\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Om din server kräver autentisering, markerar du denna checkbox\",\n  \"Username\": \"Användarnamn\",\n  \"Password\": \"Lösenord\",\n  \"Sendmail Path\": \"Sendmail-sökväg\",\n  \"Please specify the path of the sendmail program.\": \"Vänligen ange sökvägen till sendmail\",\n  \"Mailgun Domain\": \"Mailgun domän\",\n  \"Please specify the Mailgun domain name.\": \"Vänligen ange Mailgun domännamnet.\",\n  \"Mailgun Secret\": \"Mailgun hemlighet\",\n  \"Enter your Mailgun API key.\": \"Ange din Mailgun API-nyckel.\",\n  \"SES Key\": \"SES-nyckel\",\n  \"Enter your SES API key\": \"Ange din SES API-nyckel\",\n  \"SES Secret\": \"SES hemlighet\",\n  \"Enter your SES API secret key\": \"Ange din hemliga SES API-nyckel\",\n  \"SES Region\": \"SES-regionen\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Ange din SES-region (t.ex. us-east-1)\",\n  \"Postmark Token\": \"Poststämpel Token\",\n  \"Enter your Postmark API secret key\": \"Ange din hemliga nyckel för Poststämpel API\",\n  \"Define administrator roles\": \"Definiera administratörsroller\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Begränsa åtkomsten till denna webbplats till endast administratörer med följande roller.\",\n  \"Manage Backend Preferences\": \"Hantera inställningar för back-end\",\n  \"Manage Code Editor Preferences\": \"Hantera inställningar för kodredigerare\",\n  \"Customize Backend Styles\": \"Anpassa back-end\",\n  \"Mail Templates\": \"E-postmall\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Ändra e-postmallar som skickas till användare och administratörer, hantera e-postlayouter.\",\n  \"Event Log\": \"Händelselogg\",\n  \"View system log messages with their recorded time and details.\": \"Visa systemloggmeddelanden med respektive tid och detaljer.\",\n  \"Request Log\": \"Förfrågningslogg\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Visa otillåtna eller omdirigerade förfrågningar, så som Sidan kunde inte hittas (404).\",\n  \"Test message sent.\": \"Testmeddelandet har skickats.\",\n  \"New Layout\": \"Ny layout\",\n  \"New Template\": \"Ny mall\",\n  \"Template\": \"Mall\",\n  \"Templates\": \"Mallar\",\n  \"Layouts\": \"Layouter\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"E-postmallar\",\n  \"Unique code used to refer to this template\": \"Unik kod som används för att hänvisa till den här mallen\",\n  \"-- No layout --\": \"-- ingen layout --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Text\",\n  \"Subject\": \"Ämne\",\n  \"Email message subject\": \"Mailets ämne\",\n  \"Description\": \"Beskrivning\",\n  \"Drivers Not Installed\": \"Drivrutiner är inte installerade\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Den här e-postmetoden kräver att tillägget \\\":plugin\\\" är installerat innan du kan skicka e-post.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Händelse-ID\",\n  \"Level\": \"Nivå\",\n  \"Date & Time\": \"Datum och tid\",\n  \"Message\": \"Meddelande\",\n  \"Version\": \"Version\",\n  \"Log ID\": \"Logg-ID\",\n  \"Counter\": \"Räknare\",\n  \"Referers\": \"Hänvisning\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Denna logg visar en lista över potentiella fel som uppstår i applikationen, såsom undantag och felsökningsinformation.\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Denna loggen visar en lista med förfrågningar från webbläsare som kan kräva uppmärksamhet. Till exempel, om en besökare öppnar en CMS sida som inte kan hittas, så skapas en post med statuskoden 404.\",\n  \"Event log emptied\": \"Lyckades tömma händelseloggen.\",\n  \"Empty Event Log\": \"Töm händelseloggen\",\n  \"Emptying Event Log...\": \"Tömmer händelselogg...\",\n  \"Return to Event Log\": \"Återvänd till händelseloggen\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Är du säker?\",\n  \"Plugin has been removed from the file system.\": \"Tillägget har raderats.\",\n  \"search plugins to install...\": \"sök efter tillägg att installera...\",\n  \"search themes to install...\": \"sök efter teman att installera...\",\n  \"Install Theme\": \"Installera tema\",\n  \"Theme Name\": \"Temanamn\",\n  \"Install Plugin\": \"Installera tillägg\",\n  \"Plugin Name\": \"Tilläggsnamn\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Namnge tillägget efter dess unika kod. Exempelvis RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Namnge temat med en unik kod. Till exempel, RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Kombinationsfilen ':name' kunde ej hittas\"\n}"
  },
  {
    "path": "modules/system/lang/th/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n     */\n\n    'markdowneditor' => [\n        'formatting' => 'การจัดรูปแบบ',\n        'quote' => 'อ้างข้อความ',\n        'code' => 'โค้ด',\n        'header1' => 'หัวเรื่อง 1',\n        'header2' => 'หัวเรื่อง 2',\n        'header3' => 'หัวเรื่อง 3',\n        'header4' => 'หัวเรื่อง 4',\n        'header5' => 'หัวเรื่อง 5',\n        'header6' => 'หัวเรื่อง 6',\n        'bold' => 'ตัวหนา',\n        'italic' => 'ตัวเอียง',\n        'unorderedlist' => 'รายการแบบไม่มีลำดับ',\n        'orderedlist' => 'รายการแบบมีลำดับ',\n        'video' => 'วิดีโอ',\n        'image' => 'รูปภาพ',\n        'link' => 'ลิงก์',\n        'horizontalrule' => 'ใส่ที่คั่นบรรทัด',\n        'fullscreen' => 'เต็มหน้าจอ',\n        'preview' => 'ดูตัวอย่าง',\n    ],\n    'mediamanager' => [\n        'insert_link' => 'ใส่ลิงก์',\n        'insert_image' => 'ใส่รูปภาพ',\n        'insert_video' => 'ใส่วิดีโอ',\n        'insert_audio' => 'ใส่ไฟล์เสียง',\n        'invalid_file_empty_insert' => 'กรุณาเลือกไฟล์ที่จะใส่ลิงก์',\n        'invalid_file_single_insert' => 'กรุณาเลือกไฟล์เดียว',\n        'invalid_image_empty_insert' => 'กรุณาเลือกรูปภาพที่จะใส่',\n        'invalid_video_empty_insert' => 'กรุณาเลือกวิดีโอที่จะใส่',\n        'invalid_audio_empty_insert' => 'กรุณาเลือกไฟล์เสียงที่จะใส่',\n    ],\n    'alert' => [\n        'confirm_button_text' => 'ตกลง',\n        'cancel_button_text' => 'ยกเลิก',\n        'widget_remove_confirm' => 'ลบวิดเจ็ทนี้?',\n    ],\n    'datepicker' => [\n        'previousMonth' => 'เดือนก่อนหน้า',\n        'nextMonth' => 'เดือนถัดไป',\n        'months' => ['มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'],\n        'weekdays' => ['อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสบดี', 'ศุกร์', 'เสาร์'],\n        'weekdaysShort' => ['อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'],\n    ],\n    'colorpicker' => [\n        'choose' => 'ตกลง',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'ทั้งหมด',\n        ],\n        'scopes' => [\n            'apply_button_text' => 'นำไปใช้',\n            'clear_button_text' => 'เคลียร์',\n        ],\n        'dates' => [\n            'all' => 'ทั้งหมด',\n            'filter_button_text' => 'กรอง',\n            'reset_button_text' => 'ตั้งค่าเริ่มต้น',\n            'date_placeholder' => 'วันที่',\n            'after_placeholder' => 'หลังจาก',\n            'before_placeholder' => 'ก่อน',\n        ],\n        'numbers' => [\n            'all' => 'ทั้งหมด',\n            'filter_button_text' => 'กรอง',\n            'reset_button_text' => 'ตั้งค่าเริ่มต้น',\n            'min_placeholder' => 'น้อยที่สุด',\n            'max_placeholder' => 'มากที่สุด',\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'แสดง stacktrace',\n        'hide_stacktrace' => 'ซ่อน stacktrace',\n        'tabs' => [\n            'formatted' => 'จัดรูปแบบแล้ว',\n            'raw' => 'ข้อมูลดิบ',\n        ],\n        'editor' => [\n            'title' => 'ตัวแก้ไขซอร์สโค้ด',\n            'openWith' => 'เปิดด้วย',\n            'remember_choice' => 'จำตัวเลือกที่เลือกไว้',\n            'open' => 'เปิด',\n            'cancel' => 'ยกเลิก',\n        ],\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/th/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'กลับคืนสู่สามัญ',\n  ],\n  'directory' => [\n    'create_fail' => 'ไม่สามารถสร้างโฟลเดอร์: :name',\n  ],\n  'file' => [\n    'create_fail' => 'ไม่สามารถสร้างไฟล์: :name',\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'ระบบ',\n    'menu_label' => 'ระบบ',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'อื่นๆ',\n      'logs' => 'บันทึก (Log)',\n      'mail' => 'อีเมล',\n      'shop' => 'ร้านค้า',\n      'team' => 'ทีมงาน',\n      'users' => 'ผู้ใช้',\n      'system' => 'ระบบ',\n      'social' => 'โซเชียล',\n      'backend' => 'หลังบ้าน',\n      'events' => 'Events',\n      'customers' => 'ลูกค้า',\n      'my_settings' => 'การตั้งค่าของฉัน',\n      'notifications' => 'การแจ้งเตือน',\n    ],\n  ],\n  'theme' => [\n    'label' => 'ธีม',\n    'unnamed' => 'ธีมยังไม่ได้ตั้งชื่อ',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'ติดตั้งธีม',\n    'installed' => 'ธีมที่ติดตั้งไว้',\n    'no_themes' => 'ไม่มีธีมที่ติดตั้งจากตลาดสินค้า',\n    'recommended' => 'แนะนำ',\n    'remove_confirm' => 'คุณแน่ใจว่าต้องการลบธีมนี้?',\n  ],\n  'plugin' => [\n    'label' => 'ปลั๊กอิน',\n    'unnamed' => 'ปลั๊กอินยังไม่ได้ตั้งชื่อ',\n    'name' => [],\n    'by_author' => 'โดย :name',\n  ],\n  'plugins' => [\n    'install' => 'ติดตั้งปลั๊กอิน',\n    'install_products' => 'ติดตั้งผลิตภัณฑ์',\n    'installed' => 'ปลั๊กอินที่ติดตั้งไว้',\n    'no_plugins' => 'ยังไม่มีการติดตั้งปลั๊กอินจากตลาดสินค้า',\n    'recommended' => 'แนะนำ',\n    'plugin_label' => 'ปลั๊กอิน',\n    'bulk_actions_label' => 'การทำงานเป็นกลุ่ม',\n    'check_yes' => 'ใช่',\n    'check_no' => 'ไม่',\n    'unfrozen' => 'เปิดการอัพเดทไว้แล้ว',\n    'freeze' => 'ปิดการอัพเดทสำหรับ',\n    'unfreeze' => 'เปิดการอัพเดทสำหรับ',\n    'refresh' => 'ตั้งค่าเริ่มต้น',\n    'remove' => 'ลบ',\n    'freeze_label' => 'ปิดการอัพเดท',\n    'unfreeze_label' => 'เปิดการอัพเดท',\n    'freeze_success' => 'ปิดการอัพเดทปลั๊กอินที่เลือกเอาไว้สำเร็จ',\n    'unfreeze_success' => 'เปิดการอัพเดทปลั๊กอินที่เลือกเอาไว้สำเร็จ',\n    'enable_success' => 'เปิดใช้งานปลั๊กอินที่เลือกไว้สำเร็จ',\n    'disable_success' => 'ปิดใช้งานปลั๊กอินที่เลือกไว้สำเร็จ',\n    'refresh_success' => 'ตั้งค่าเริ่มต้นให้ปลั๊กอินที่เลือกไว้สำเร็จ',\n    'remove_confirm' => 'คุณแน่ใจว่าต้องการเอาปลั๊กอินที่เลือกไว้ออกไป? ข้อมูลที่เกี่ยวข้องจะหายไปด้วย',\n    'remove_success' => 'เอาปลั๊กอินที่เลือกไว้ออกสำเร็จ',\n  ],\n  'project' => [\n    'attach' => 'ผูกโครงการ',\n    'detach' => 'ถอดโครงการ',\n    'none' => 'ไม่มี',\n    'id' => [\n      'missing' => 'กรุณากำหนด Project ID',\n    ],\n    'detach_confirm' => 'คุณแน่ใจว่าต้องการถอดโครงการนี้?',\n    'unbind_success' => 'โครงการถูกถอดออกแล้ว',\n  ],\n  'settings' => [\n    'search' => 'ค้นหา',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'ต้องมีการเชื่อมต่อ SSL',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'ชื่อที่ไม่ซ้ำ สำหรับอ้างถึงแม่แบบนี้',\n    'test_send' => 'ส่งเนื้อหาทดสอบ',\n    'test_confirm' => 'ส่งเนื้อหาทดสอบไปที่ :email ทำต่อไป?',\n    'creating' => 'กำลังสร้างแม่แบบ...',\n    'creating_layout' => 'กำลังสร้างโครงร่าง...',\n    'saving' => 'กำลังบันทึกแม่แบบ...',\n    'saving_layout' => 'กำลังบันทึกโครงร่าง...',\n    'delete_confirm' => 'ลบแม่แบบนี้?',\n    'delete_layout_confirm' => 'ลบโครงร่างนี้?',\n    'deleting' => 'กำลังลบแม่แบบ...',\n    'deleting_layout' => 'กำลังลบโครงร่าง...',\n    'sending' => 'กำลังส่งเนื้อหาทดสอบ...',\n    'return' => 'กลับสู่หน้ารายการแม่แบบ',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'หัวเรื่อง',\n      'paragraph' => 'นี่เป็นย่อหน้าตัวอย่างที่มีทั้งตัวหนังสือและลิงก์ Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'รายการ',\n        'description' => 'รายละเอียด',\n        'price' => 'ราคา',\n        'centered' => 'จัดกึ่งกลาง',\n        'right_aligned' => 'จัดชิดขวา',\n      ],\n      'buttons' => [\n        'primary' => 'ปุ่มหลัก',\n        'positive' => 'ปุ่มด้านบวก',\n        'negative' => 'ปุ่มด้านลบ',\n      ],\n      'panel' => 'แผงข้อความนี้ดูดีแค่ไหน?',\n      'more' => 'ตัวหนังสืออื่นๆอีก',\n      'promotion' => 'รหัสคูปอง: OCTOBER',\n      'subcopy' => 'นี่เป็นสำเนาย่อยของอีเมล',\n      'thanks' => 'ขอบคุณครับ',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'ผู้สร้าง',\n    'plugin_not_found' => 'ไม่พบปลั๊กอิน',\n    'core_build' => 'การสร้างที่ :build',\n    'core_build_help' => 'การสร้างตัวล่าสุดพร้อมให้ดาวน์โหลดแล้ว',\n    'changelog' => 'บันทึกการเปลี่ยนแปลง',\n    'changelog_view_details' => 'ดูรายละเอียด',\n    'themes' => 'ธีม',\n    'plugin_version_none' => 'ปลั๊กอินใหม่',\n    'plugin_current_version' => 'รุ่นปัจจุบัน',\n    'theme_new_install' => 'การติดตั้งธีมใหม่',\n    'theme_extracting' => 'กำลังเปิดขยายกล่องธีม: :name',\n    'update_label' => 'อัพเดทซอฟต์แวร์',\n    'update_loading' => 'กำลังโหลดอัพเดทที่ใช้ได้...',\n    'force_label' => 'บังคับการอัพเดท',\n    'found' => [\n      'label' => 'พบอัพเดทใหม่!',\n      'help' => 'กดปุ่มอัพเดทซอฟต์แวร์เพื่อเริ่มกระบวนการอัพเดท',\n    ],\n    'none' => [\n      'label' => 'ไม่มีอัพเดท',\n      'help' => 'ไม่พบอัพเดทใหม่',\n    ],\n    'important_action' => [\n      'empty' => 'เลือกการทำงาน',\n      'confirm' => 'ยืนยันการอัพเดท',\n      'skip' => 'ข้ามอัพเดทนี้ (ครั้งเดียว)',\n      'ignore' => 'ข้ามอัพเดทนี้ (ตลอดไป)',\n    ],\n    'important_action_required' => 'Action required',\n    'important_view_guide' => 'ดูหนังสือแนะนำการอัพเกรด',\n    'important_view_release_notes' => 'ดูบันทึกการปล่อยโปรแกรม',\n    'important_alert_text' => 'อัพเดทบางตัวต้องมีการตรวจสอบ',\n    'details_title' => 'รายละเอียดปลั๊กอิน',\n    'details_view_homepage' => 'ดูหน้าโฮมเพจ',\n    'details_changelog' => 'บันทึกการเปลี่ยนแปลง',\n    'details_changelog_missing' => 'ไม่มีบันทึกการเปลี่ยนแปลงมาด้วย',\n    'details_current_version' => 'รุ่นปัจจุบัน',\n    'details_author' => 'ผู้สร้าง',\n  ],\n  'server' => [\n    'connect_error' => 'การเชื่อมต่อกับเซิร์ฟเวอร์ผิดพลาด',\n    'response_not_found' => 'หาเซิร์ฟเวอร์อัพเดทไม่พบ',\n    'response_invalid' => 'การตอบกลับจากเซิร์ฟเวอร์ไม่ถูกต้อง',\n    'response_empty' => 'ไม่มีการตอบกลับจากเซิร์ฟเวอร์',\n    'file_error' => 'เซิร์ฟเวอร์ไม่สามารถส่งแพคเกจได้',\n    'file_corrupt' => 'ไฟล์จากเซิร์ฟเวอร์เสียหาย',\n  ],\n  'behavior' => [\n    'missing_property' => 'คลาส :class ต้องมีการกำหนดคุณสมบัติ $:property ที่ใช้โดยพฤติกรรม :behavior',\n  ],\n  'config' => [\n    'not_found' => 'ไม่สามารถหาไฟล์การตั้งค่า :file ที่กำหนดไว้สำหรับ :location.',\n    'required' => 'การตั้งค่าที่ใช้ใน :location ต้องมีค่า \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'ไม่สามารถแยกไฟล์หลัก \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'ลบบันทึกการขอเข้าใช้งานทั้งหมด',\n    'empty_loading' => 'กำลังลบบันทึกการขอเข้าใช้งาน...',\n    'empty_success' => 'ลบบันทึกการขอเข้าใช้งานแล้ว',\n    'return_link' => 'กลับสู่หน้าบันทึกการขอเข้าใช้งาน',\n    'id' => 'ไอดี',\n  ],\n  'permissions' => [\n    'name' => 'ระบบ',\n    'manage_system_settings' => 'จัดการการตั้งค่าระบบ',\n    'manage_software_updates' => 'จัดการการอัพเดทซอฟต์แวร์',\n    'access_logs' => 'ดูบันทึกของระบบ',\n    'manage_mail_templates' => 'จัดการเทมเพลตอีเมล',\n    'manage_mail_settings' => 'จัดการการตั้งค่าอีเมล',\n    'manage_other_administrators' => 'จัดการผู้ดูแลระบบคนอื่น',\n    'impersonate_users' => 'ปลอมตัวเป็นผู้ใช้',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'ไฟล์ที่กำหนดไม่ถูกต้อง: \\':path\\'',\n    'folder_size_items' => 'รายการ',\n  ],\n  'page' => [\n    'custom_error' => [\n      'label' => 'หน้าเว็บผิดพลาด',\n      'help' => 'ขอโทษครับ, มีบางอย่างผิดพลาดและไม่สามารถแสดงหน้าเว็บได้',\n    ],\n    'maintenance' => [\n      'label' => 'เราจะรีบกลับมา!',\n      'help' => 'เรากำลังปิดปรับปรุงระบบ, ลองเข้าอีกครั้งในภายหลัง!',\n      'message' => 'ข้อความ:',\n      'available_at' => 'ลองใหม่อีกครั้งหลังจาก:',\n    ],\n    'invalid_token' => [\n      'label' => 'โทเค็นความปลอดภัยไม่ถูกต้อง',\n    ],\n  ],\n  'pagination' => [\n    'previous' => 'ก่อนหน้า',\n    'next' => 'ถัดไป',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/th.json",
    "content": "{\n  \"Check For Updates\": \"ตรวจสอบอัพเดทใหม่\",\n  \"Install Packages\": \"ติดตั้งแพ็คเกจ\",\n  \"Manage Themes\": \"จัดการธีม\",\n  \"Manage Plugins\": \"จัดการปลั๊กอิน\",\n  \"Project\": \"โครงการ\",\n  \"Owner\": \"เจ้าของ\",\n  \"Plugins\": \"ปลั๊กอิน\",\n  \"Recommended\": \"ที่แนะนำ\",\n  \"Disabled\": \"ปิดการใช้งาน\",\n  \"Current Build\": \"การสร้างตัวปัจจุบัน\",\n  \"Updates Available\": \"มีการอัปเดต\",\n  \"Up to Date\": \"ปัจจุบัน\",\n  \"Latest Build\": \"บิลด์ล่าสุด\",\n  \"View Changelog\": \"ดูบันทึกการเปลี่ยนแปลง\",\n  \"Software Updates\": \"อัพเดท & ปลั๊กอิน (Plugin)\",\n  \"Update the system modules and plugins.\": \"อัพเดทระบบ, จัดการ และลงปลั๊กอินหรือธีม\",\n  \"General\": \"ทั่วไป\",\n  \"Mail\": \"จดหมาย\",\n  \"Utilities\": \"สาธารณูปโภค\",\n  \"Settings\": \"การตั้งค่า\",\n  \"Show All Settings\": \"แสดงการตั้งค่าทั้งหมด\",\n  \"Unable to find the specified settings.\": \"ไม่พบค่าที่กำหนด\",\n  \"The settings page is missing a Model definition.\": \"หน้าการตั้งค่าไม่มีคำจำกัดความของแบบจำลอง\",\n  \":name settings updated\": \":name อัพเดทการตั้งค่าแล้ว\",\n  \"Return to System Settings\": \"กลับสู่หน้าการตั้งค่าระบบ\",\n  \"Search Settings...\": \"ค้นหาการตั้งค่า...\",\n  \"Disable mail branding CSS\": \"ปิดใช้งานการสร้างแบรนด์เมล CSS\",\n  \"Manage Sites\": \"จัดการไซต์\",\n  \"Manage the websites available for this application.\": \"จัดการเว็บไซต์ที่มีให้สำหรับแอปพลิเคชันนี้\",\n  \"Marketplace\": \"ตลาดกลาง\",\n  \"There is no documentation provided.\": \"ไม่มีเอกสารการใช้โปรแกรมมาด้วย\",\n  \"Documentation\": \"เอกสารการใช้โปรแกรม\",\n  \"Upgrade Guide\": \"คู่มือการอัพเกรด\",\n  \"License\": \"ใบอนุญาต\",\n  \"Attach to Project\": \"ผูกกับโครงการ\",\n  \"Manage Updates\": \"จัดการการอัพเดท\",\n  \"Software Update\": \"การอัพเดทซอฟต์แวร์\",\n  \"Return to Software Updates\": \"กลับสู่หน้าการอัพเดทระบบ\",\n  \"Try Again\": \"ลองอีกครั้ง\",\n  \"Unpacking application files\": \"กำลังเปิดขยายกล่องไฟล์แอพพลิเคชั่น\",\n  \"Update Failed\": \"อัพเดทไม่สำเร็จ\",\n  \"Unpacking plugin: :name\": \"กำลังเปิดขยายกล่องปลั๊กอิน: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"ไซต์หลักถูกใช้โดยค่าเริ่มต้นและไม่สามารถลบได้\",\n  \"Disabled sites are not shown on the frontend.\": \"ไซต์ที่ถูกปิดใช้งานจะไม่แสดงที่ส่วนหน้า\",\n  \"Enabled in the Admin Panel\": \"เปิดใช้งานในแผงการดูแลระบบ\",\n  \"Configuration\": \"การกำหนดค่า\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"ใช้สิ่งนี้หากคุณต้องการเปิดใช้งานไซต์ในแผงการดูแลระบบ\",\n  \"Install\": \"ติดตั้ง\",\n  \"Sync Project\": \"ซิงค์โปรเจ็กต์\",\n  \"Name\": \"ชื่อ\",\n  \"Unique Code\": \"รหัสเฉพาะ\",\n  \"Theme\": \"ธีม\",\n  \"Sites\": \"เว็บไซต์\",\n  \"Create Site\": \"สร้างเว็บไซต์\",\n  \"Base URL\": \"URL ฐาน\",\n  \"Status\": \"สถานะ\",\n  \"Current default value: :value\": \"ค่าเริ่มต้นปัจจุบัน: :value\",\n  \"Locale\": \"ท้องถิ่น\",\n  \"Timezone\": \"เขตเวลา\",\n  \"Custom application URL\": \"URL แอปพลิเคชันที่กำหนดเอง\",\n  \"Override the application URL when this site is active.\": \"แทนที่ URL ของแอปพลิเคชันเมื่อไซต์นี้เปิดใช้งานอยู่\",\n  \"Use a CMS route prefix\": \"ใช้คำนำหน้าเส้นทาง CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"คำนำหน้าสามารถระบุไซต์นี้ได้เมื่อใช้ชื่อโฮสต์ที่ใช้ร่วมกัน\",\n  \"Define matching hostnames\": \"กำหนดชื่อโฮสต์ที่ตรงกัน\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"ระบุชื่อโดเมนและรูปแบบที่จะใช้ในการให้บริการไซต์นี้\",\n  \"Display a style for this site\": \"แสดงสีสำหรับไซต์นี้\",\n  \"To help identify this site, display a color in the admin panel.\": \"เพื่อช่วยระบุไซต์นี้ ให้แสดงสีในแผงการดูแลระบบ\",\n  \"Save\": \"บันทึก\",\n  \"Save and Close\": \"บันทึกและปิด\",\n  \"Use Default\": \"ใช้ค่าเริ่มต้น\",\n  \"Use Custom\": \"ใช้กำหนดเอง\",\n  \"Specify a custom locale code.\": \"ระบุรหัสสถานที่ที่กำหนดเอง\",\n  \"Failed\": \"ล้มเหลว\",\n  \"or\": \"หรือ\",\n  \"Code\": \"โค้ด\",\n  \"October CMS Marketplace\": \"ตุลาคม CMS Marketplace\",\n  \"Visit the :link to add some.\": \"โครงการไม่มีปลั๊กอินหรือธีม ไปที่ :link เพื่อเพิ่มบางส่วน\",\n  \"Buy Now\": \"ซื้อเลย\",\n  \"Updating package manager\": \"กำลังอัปเดตตัวจัดการแพ็คเกจ\",\n  \"Updating application files\": \"กำลังดาวน์โหลดไฟล์แอพพลิเคชั่น\",\n  \"Setting build number\": \"Setting build number\",\n  \"Finishing update process\": \"กำลังจบกระบวนการอัพเดท\",\n  \"Installing plugin: :name\": \"กำลังดาวน์โหลดปลั๊กอิน: :name\",\n  \"Finishing installation process\": \"กำลังจบกระบวนการติดตั้ง\",\n  \"Removing theme: :name\": \"กำลังลบธีม: :name\",\n  \"Please specify a Theme name to install.\": \"กรุณากำหนดชื่อธีมที่จะติดตั้ง\",\n  \"Installing theme: :name\": \"กำลังดาวน์โหลดธีม: :name\",\n  \"Removing plugin: :name\": \"การลบปลั๊กอิน: :name\",\n  \"Please specify a Plugin name to install.\": \"กรุณากำหนดชื่อปลั๊กอินที่จะติดตั้ง\",\n  \"Update process complete\": \"กระบวนการอัพเดทเสร็จสมบูรณ์\",\n  \"Package installed successfully\": \"ติดตั้งปลั๊กอินสำเร็จ\",\n  \"Check Dependencies\": \"ตรวจสอบการพึ่งพา\",\n  \"Install Dependencies\": \"ติดตั้งการพึ่งพา\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"ไม่มีการพึ่งพาที่จำเป็นสำหรับระบบเพื่อให้ทำงานได้อย่างถูกต้อง\",\n  \"License Key\": \"รหัสใบอนุญาต\",\n  \"How to find your License Key\": \"วิธีค้นหารหัสใบอนุญาตของคุณ\",\n  \"The password attribute is required.\": \"จำเป็นต้องมีแอตทริบิวต์รหัสผ่าน\",\n  \"The login attribute is required.\": \"จำเป็นต้องมีแอตทริบิวต์การเข้าสู่ระบบ\",\n  \"Cannot login user since they are not activated.\": \"ไม่สามารถเข้าสู่ระบบผู้ใช้เนื่องจากไม่ได้เปิดใช้งาน\",\n  \"Cannot login user since they are banned.\": \"ผู้ใช้เข้าสู่ระบบไม่ได้เนื่องจากถูกแบน\",\n  \"Cannot login user since they are suspended.\": \"ไม่สามารถเข้าสู่ระบบผู้ใช้เนื่องจากถูกระงับ\",\n  \"A user was not found with the given credentials.\": \"ไม่พบผู้ใช้ที่มีข้อมูลประจำตัวที่กำหนด\",\n  \"A user was found but the password did not match.\": \"พบผู้ใช้แต่รหัสผ่านไม่ตรงกัน\",\n  \"User is not logged in\": \"ผู้ใช้ไม่ได้เข้าสู่ระบบ\",\n  \"Register Software\": \"ลงทะเบียนซอฟต์แวร์\",\n  \"View the Dashboard\": \"ดูหน้าแผงควบคุม\",\n  \"Set the Default Dashboard\": \"จัดการตั้งค่าเริ่มต้นหน้าแผงควบคุม\",\n  \"Log File\": \"ไฟล์บันทึก (log)\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"ตราไปรษณีย์\",\n  \"No encryption\": \"ไม่เข้ารหัส\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"การตั้งค่าอีเมล\",\n  \"Manage email configuration.\": \"จัดการการตั้งค่าอีเมล\",\n  \"Sender Name\": \"ชื่อผู้ส่ง\",\n  \"Sender Email\": \"อีเมลผู้ส่ง\",\n  \"Mail Method\": \"วิธีการส่งอีเมล\",\n  \"SMTP Address\": \"SMTP Address\",\n  \"SMTP Port\": \"พอร์ท SMTP\",\n  \"SMTP Encryption Protocol\": \"โปรโตคอลการเข้ารหัส SMTP\",\n  \"SMTP Authorization Required\": \"จำเป็นต้องมีการอนุญาต SMTP\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"เลือกกล่องตัวเลือกถ้าเซิร์ฟเวอร์ SMTP ของท่านต้องมีการอนุญาต\",\n  \"Username\": \"ชื่อผู้ใช้\",\n  \"Password\": \"รหัสผ่าน\",\n  \"Sendmail Path\": \"Sendmail path\",\n  \"Please specify the path of the sendmail program.\": \"กรุณากำหนด path ของโปรแกรม sendmail\",\n  \"Mailgun Domain\": \"โดเมน Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"กรุณากำหนดโดเมนเนมของ Mailgun\",\n  \"Mailgun Secret\": \"Mailgun secret\",\n  \"Enter your Mailgun API key.\": \"ใส่ Mailgun API key ของท่าน\",\n  \"SES Key\": \"SES key\",\n  \"Enter your SES API key\": \"ใส่ SES API key ของท่าน\",\n  \"SES Secret\": \"SES secret\",\n  \"Enter your SES API secret key\": \"ใส่ SES API secret key ของท่าน\",\n  \"SES Region\": \"SES region\",\n  \"Enter your SES region (e.g. us-east-1)\": \"ใส่ SES region ของท่าน (เช่น us-east-1)\",\n  \"Postmark Token\": \"โทเค็นตราไปรษณีย์\",\n  \"Enter your Postmark API secret key\": \"ป้อนรหัสลับ Postmark API ของคุณ\",\n  \"Define administrator roles\": \"กำหนดบทบาทของผู้ดูแลระบบ\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"จำกัดการเข้าถึงไซต์นี้เฉพาะผู้ดูแลระบบที่มีบทบาทต่อไปนี้\",\n  \"Manage Backend Preferences\": \"จัดการหน้าเว็บหลังบ้านตามใจชอบ\",\n  \"Manage Code Editor Preferences\": \"จัดการตัวแก้ไขโค้ดตามใจชอบ\",\n  \"Customize Backend Styles\": \"ปรับแต่งหน้าเว็บหลังบ้าน\",\n  \"Mail Templates\": \"แม่แบบอีเมล (template)\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"แก้ไขแม่แบบอีเมลที่จะส่งให้ผู้ใช้และผู้ดูแลระบบ, จัดการโครงร่างอีเมล\",\n  \"Mail Branding\": \"การสร้างแบรนด์อีเมล\",\n  \"Modify the colors and appearance of mail templates.\": \"แก้ไขสีและภาพลักษณ์ของแม่แบบอีเมล\",\n  \"Event Log\": \"บันทึกเหตุการณ์\",\n  \"View system log messages with their recorded time and details.\": \"ดูข้อความบันทึกระบบพร้อมด้วยเวลาที่บันทึกและรายละเอียดอื่นๆ\",\n  \"Request Log\": \"บันทึกการขอเข้าใช้งาน\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"ดูการขอเข้าใช้งานที่ไม่ดี หรือมีการเปลี่ยนเส้นทาง เช่น Page not found (404)\",\n  \"Log Settings\": \"การตั้งค่าบันทึก\",\n  \"Specify which areas should use logging.\": \"กำหนดว่าส่วนไหนที่ควรจะมีการบันทึก\",\n  \"Test message sent.\": \"ส่งเนื้อหาทดสอบแล้ว\",\n  \"New Layout\": \"โครงร่างใหม่\",\n  \"New Partial\": \"ส่วนย่อยใหม่\",\n  \"New Template\": \"แม่แบบใหม่\",\n  \"Template\": \"แม่แบบ\",\n  \"Templates\": \"แม่แบบ\",\n  \"Layouts\": \"โครงร่าง\",\n  \"Partials\": \"ส่วนย่อย\",\n  \"Partial\": \"ส่วนย่อย\",\n  \"Mail Partials\": \"ส่วนย่อยอีเมล\",\n  \"Layout\": \"โครงร่าง\",\n  \"Mail Layouts\": \"โครงร่างอีเมล\",\n  \"Unique code used to refer to this template\": \"รหัสที่ไม่ซ้ำ สำหรับอ้างถึงแม่แบบนี้\",\n  \"-- No layout --\": \"-- ไม่มีโครงร่าง --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Plaintext\",\n  \"Disable automatic inline CSS\": \"ปิดการใส่ inline style ลงใน HTML element โดยอัตโนมัติ\",\n  \"Options\": \"ตัวเลือก\",\n  \"Subject\": \"หัวข้อ\",\n  \"Email message subject\": \"หัวข้อเนื้อหาอีเมล\",\n  \"Description\": \"รายละเอียด\",\n  \"Drivers Not Installed\": \"ยังไม่ได้ติดตั้งไดรเวอร์\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"วิธีการส่งอีเมลนี้ต้องมีการติดตั้งปลั๊กอิน \\\":plugin\\\" ก่อนถึงจะส่งอีเมลได้\",\n  \"ID\": \"ไอดี\",\n  \"Event ID\": \"ไอดีเหตุการณ์\",\n  \"Level\": \"ระดับ\",\n  \"Date & Time\": \"วันเวลา\",\n  \"Message\": \"ข้อความ\",\n  \"Logging\": \"การบันทึก (Log)\",\n  \"Log Bad Requests\": \"บันทึกการร้องขอที่ไม่ดี\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"การร้องขอผ่านทางเว็บบราวเซอร์ที่อาจจะต้องเข้าไปตรวจสอบ เช่น 404 errors\",\n  \"Log Theme Changes\": \"บันทึกการเปลี่ยนธีม\",\n  \"When a change is made to the theme using the backend.\": \"บันทึกเมื่อมีการเปลี่ยนธีมทางเว็บหลังบ้าน\",\n  \"Log System Events\": \"บันทึกเหตุการณ์เกี่ยวกับระบบ\",\n  \"Store system events in the database in addition to the file-based log.\": \"เก็บเหตุการณ์เกี่ยวกับระบบในฐานข้อมูล เพิ่มเติมจากที่เก็บไว้ที่ไฟล์บันทึก\",\n  \"Background\": \"พื้นหลัง\",\n  \"Body background\": \"พื้นหลังรอบนอก\",\n  \"Content background\": \"พื้นหลังเนื้อหา\",\n  \"Inner content background\": \"พื้นหลังเนื้อหาด้านใน\",\n  \"Buttons\": \"ปุ่ม\",\n  \"Button text color\": \"สีตัวอักษรในปุ่ม\",\n  \"Primary button background\": \"พื้นหลังปุ่มหลัก\",\n  \"Positive button background\": \"พื้นหลังปุ่มด้านบวก\",\n  \"Negative button background\": \"พื้นหลังปุ่มด้านลบ\",\n  \"Typography\": \"ตัวอักษร\",\n  \"Header color\": \"สีตัวอักษร Header\",\n  \"Headings color\": \"สีตัวอักษรหัวเรื่อง\",\n  \"Text color\": \"สีตัวอักษรทั่วไป\",\n  \"Link color\": \"สีลิงก์\",\n  \"Footer color\": \"สีตัวอักษร Footer\",\n  \"Borders\": \"ขอบ\",\n  \"Body border color\": \"สีขอบด้านนอก\",\n  \"Subcopy border color\": \"สีขอบสำเนาย่อย\",\n  \"Table border color\": \"สีขอบตาราง\",\n  \"Components\": \"ส่วนประกอบ\",\n  \"Panel background\": \"สีพื้นหลังแผงข้อความ\",\n  \"Promotion background\": \"สีพื้นหลังโปรโมชั่น\",\n  \"Promotion border color\": \"สีขอบโปรโมชั่น\",\n  \"Customize Mail Appearance\": \"ปรับแก้ภาพลักษณ์อีเมล\",\n  \"Version\": \"เวอร์ชั่น\",\n  \"Enabled\": \"เปิดใช้งานปลั๊กอินแล้ว\",\n  \"Log ID\": \"ไอดีบันทึก\",\n  \"Counter\": \"จำนวนครั้ง\",\n  \"Referers\": \"เว็บไซต์อ้างอิง\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"บันทึกนี้แสดงรายการของข้อผิดพลาดที่อาจเกิดขึ้นได้ในแอป เช่น exceptions และข้อมูลการดีบั๊ก.\",\n  \"Event\": \"เหตุการณ์\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"บันทึกนี้แสดงรายการการขอเข้าใช้งานผ่านเว็บบราวเซอร์ที่อาจต้องตรวจสอบ เช่นถ้าผู้เข้าเยี่ยมชมเปิดหน้าเว็บไม่พบ และได้รับ status code 404\",\n  \"Request\": \"การขอเข้าใช้งาน\",\n  \"Event log emptied\": \"ลบบันทึกเหตุการณ์แล้ว\",\n  \"Empty Event Log\": \"ลบบันทึกเหตุการณ์ทั้งหมด\",\n  \"Emptying Event Log...\": \"กำลังลบบันทึกเหตุการณ์...\",\n  \"Return to Event Log\": \"กลับสู่หน้าบันทึกเหตุการณ์\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"คุณแน่ใจว่าต้องการตั้งค่าเริ่มต้นปลั๊กอินที่เลือกเอาไว้? ข้อมูลของปลั๊กอินแต่ละตัวจะถูกกู้คืนกลับไปสู่ค่าเริ่มต้น\",\n  \"Reset Plugin Data\": \"ตั้งค่าเริ่มต้นข้อมูลปลั๊กอิน\",\n  \"Enable Plugins\": \"เปิดใช้งานปลั๊กอิน\",\n  \"Are you sure you want to :action these plugins?\": \"คุณแน่ใจว่าต้องการ :action ปลั๊กอินเหล่านี้?\",\n  \"enable\": \"เปิด\",\n  \"disable\": \"ปิด\",\n  \"Disable Plugins\": \"ปิดใช้งานปลั๊กอิน\",\n  \"Select Action...\": \"เลือกการทำงาน...\",\n  \"Plugin has been removed from the file system.\": \"ลบปลั๊กอินออกจากระบบแล้ว\",\n  \"search plugins to install...\": \"ค้นหาปลั๊กอินเพื่อติดตั้ง...\",\n  \"search themes to install...\": \"ค้นหาธีมที่จะติดตั้ง...\",\n  \"Install Theme\": \"ติดตั้งธีม\",\n  \"Theme Name\": \"ชื่อธีม\",\n  \"Install Plugin\": \"ติดตั้งปลั๊กอิน\",\n  \"Plugin Name\": \"ชื่อปลั๊กอิน\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"ตั้งชื่อปลั๊กอินตามรหัสที่ไม่ซ้ำใคร เช่น RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"ตั้งชื่อธีมตามรหัสที่ไม่ซ้ำใคร เช่น RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"หาไฟล์ combiner ':name' ไม่พบ\"\n}"
  },
  {
    "path": "modules/system/lang/tr/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Formatlama',\n        'quote' => 'Alıntı',\n        'code' => 'Kod',\n        'header1' => 'Başlık 1',\n        'header2' => 'Başlık 2',\n        'header3' => 'Başlık 3',\n        'header4' => 'Başlık 4',\n        'header5' => 'Başlık 5',\n        'header6' => 'Başlık 6',\n        'bold' => 'Kalın',\n        'italic' => 'İtalik',\n        'unorderedlist' => 'Sırasız Liste',\n        'orderedlist' => 'Sıralı Liste',\n        'video' => 'Video',\n        'image' => 'Görsel/Resim',\n        'link' => 'Link',\n        'horizontalrule' => 'Yatay Çizgi Ekle',\n        'fullscreen' => 'Tam Ekran',\n        'preview' => 'Önizleme',\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Medya Linki Ekle\",\n        'insert_image' => \"Medya Resim Ekle\",\n        'insert_video' => \"Medya Video Ekle\",\n        'insert_audio' => \"Medya Ses Ekle\",\n        'invalid_file_empty_insert' => \"Lütfen link verilecek dosyayı seçin.\",\n        'invalid_file_single_insert' => \"Lütfen tek bir dosya seçin.\",\n        'invalid_image_empty_insert' => \"Lütfen eklenecek resim(ler)i seçin.\",\n        'invalid_video_empty_insert' => \"Lütfen eklenecek video dosyasını seçin.\",\n        'invalid_audio_empty_insert' => \"Lütfen eklenecek ses dosyasını seçin.\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'Evet',\n        'cancel_button_text' => 'İptal',\n        'widget_remove_confirm' => 'Bu eklentiyi kaldırma istediğinize emin misiniz?',\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Önceki Ay',\n        'nextMonth' => 'Sonraki Ay',\n        'months' => ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'],\n        'weekdays' => ['Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'],\n        'weekdaysShort' => ['Paz', 'Pzt', 'Sal', 'Çar', 'Per', 'Cum', 'Cmt'],\n    ],\n    'colorpicker' => [\n        'choose' => 'Seç',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'tümü',\n        ],\n        'scopes' => [\n            'apply_button_text' => 'Uygula',\n            'clear_button_text'  => 'Temizle',\n        ],\n        'dates' => [\n            'all' => 'tümü',\n            'filter_button_text' => 'Filtrele',\n            'reset_button_text'  => 'Sıfırla',\n            'date_placeholder' => 'Tarih',\n            'after_placeholder' => 'Sonra',\n            'before_placeholder' => 'Önce',\n        ],\n        'numbers' => [\n            'all' => 'all',\n            'filter_button_text' => 'Filtrele',\n            'reset_button_text'  => 'Sıfırla',\n            'min_placeholder' => 'Min',\n            'max_placeholder' => 'Max',\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Veri yığınını göster',\n        'hide_stacktrace' => 'Veri yığınını gizle',\n        'tabs' => [\n            'formatted' => 'Formatlı',\n            'raw' => 'Ham Veri',\n        ],\n        'editor' => [\n            'title' => 'Kaynak kod editörü',\n            'description' => 'İşletim sisteminiz URL şemalarına yanıt verecek şekilde yapılandırılmalıdır.',\n            'openWith' => 'Birlikte aç',\n            'remember_choice' => 'Bu oturum için seçenekleri hatırla',\n            'open' => 'Aç',\n            'cancel' => 'İptal',\n        ],\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/tr/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Sadeliğe dönüş...',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'ca' => 'Català',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'fi' => 'Suomi',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n    'vn' => 'Tiếng việt',\n  ],\n  'directory' => [\n    'create_fail' => 'Klasör oluşturulamıyor: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Dosya oluşturulamıyor: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Geçersiz güvenlik anahtarı',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Sistem',\n    'menu_label' => 'Sistem',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Çeşitli',\n      'logs' => 'Kayıtlar',\n      'mail' => 'E-Mail',\n      'shop' => 'Mağaza',\n      'team' => 'Takım',\n      'users' => 'Kullanıcılar',\n      'system' => 'Sistem',\n      'social' => 'Sosyal',\n      'backend' => 'Backend',\n      'events' => 'Olaylar',\n      'customers' => 'Müşteriler',\n      'my_settings' => 'Ayarlarım',\n      'notifications' => 'Bildirimler',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Tema',\n    'unnamed' => 'İsimsiz tema',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Temaları yükle',\n    'installed' => 'Yüklü temalar',\n    'no_themes' => 'Mağazadan yüklenmiş bir tema bulunmamaktadır.',\n    'recommended' => 'Tavsiye edilen',\n    'remove_confirm' => 'Bu temayı silmek istediğinize emin misiniz?',\n  ],\n  'plugin' => [\n    'label' => 'Eklenti',\n    'unnamed' => 'İsimsiz eklenti',\n    'name' => [],\n    'by_author' => ':name ile filtrele',\n  ],\n  'plugins' => [\n    'install' => 'Eklentileri yükle',\n    'install_products' => 'Ürünleri yükle',\n    'installed' => 'Yüklü eklentiler',\n    'no_plugins' => 'Mağazadan yüklenmiş bir eklenti bulunmamaktadır.',\n    'recommended' => 'Tavsiye edilen',\n    'plugin_label' => 'Eklenti',\n    'bulk_actions_label' => 'Toplu eylemler',\n    'check_yes' => 'Evet',\n    'check_no' => 'Hayır',\n    'unfrozen' => 'Güncellemeler Aktif',\n    'freeze' => 'için güncellemeleri devre dışı bırak',\n    'unfreeze' => 'için güncellemeleri aktifleştir',\n    'refresh' => 'yenile',\n    'remove' => 'Kaldır',\n    'freeze_label' => 'Güncellemeleri Pasifleştir',\n    'unfreeze_label' => 'Güncellemeleri Aktifleştir',\n    'freeze_success' => 'Seçilen eklentiler için güncellemeler pasifleştirildi.',\n    'unfreeze_success' => 'Seçilen eklentiler için güncellemeler aktifleştirildi.',\n    'enable_success' => 'Seçilen eklentiler etkinleştirildi.',\n    'disable_success' => 'Seçilen eklentiler pasifleştirildi.',\n    'refresh_success' => 'Eklentiler başarıyla yenilendi.',\n    'remove_confirm' => 'Seçili eklentileri kaldırmak istediğinize emin misiniz? Bu işlem, ilişkili tüm verileri de kaldıracaktır.',\n    'remove_success' => 'Eklentiler sistemden başarıyla kaldırıldı.',\n  ],\n  'project' => [\n    'attach' => 'Projeyi Eşle',\n    'detach' => 'Projeyi Ayır',\n    'none' => 'Hiçbiri',\n    'id' => [\n      'missing' => 'Lütfen kullanılacak Proje ID\\'sini belirleyin.',\n    ],\n    'detach_confirm' => 'Bu projeyi ayırmak istediğinizden emin misiniz?',\n    'unbind_success' => 'Proje ayırma işlemi tamamlandı.',\n  ],\n  'settings' => [\n    'search' => 'Ara',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'SSL bağlantısı kullan',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Bu şablona referans için benzersiz bir isim verin',\n    'test_send' => 'Test mesajı gönder',\n    'test_confirm' => 'Deneme mesajı :email eposta adresine gönderilecek. Devam etmek istiyor musunuz?',\n    'creating' => 'Şablon Oluşturuluyor...',\n    'creating_layout' => 'Layout Oluşturuluyor...',\n    'saving' => 'Şablon kaydediliyor...',\n    'saving_layout' => 'Layout kaydediliyor...',\n    'delete_confirm' => 'Bu şablonu silmek istediğinize emin misiniz?',\n    'delete_layout_confirm' => 'Bu layout\\'u silmek istediğinize emin misiniz?',\n    'deleting' => 'Şablon Siliniyor...',\n    'deleting_layout' => 'Layout Siliniyor...',\n    'sending' => 'Deneme mesajı gönderiliyor...',\n    'return' => 'Şablon listesine geri dön',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Başlık',\n      'paragraph' => 'Bu Lorem Ipsum ile doldurulmuş bir paragraf ve bir linktir. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Nesne',\n        'description' => 'Açıklama',\n        'price' => 'Fiyat',\n        'centered' => 'Ortalanmış',\n        'right_aligned' => 'Sağa Hizalı',\n      ],\n      'buttons' => [\n        'primary' => 'Ana buton',\n        'positive' => 'Positif buton',\n        'negative' => 'Negatif buton',\n      ],\n      'panel' => 'Bu panel ne kadar harika..',\n      'more' => 'Biraz daha metin',\n      'promotion' => 'Kupon Kodu: OCTOBER',\n      'subcopy' => 'Bu e-postanın alt yazısıdır',\n      'thanks' => 'Teşekkürler',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Yazar',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => 'Versiyon :build',\n    'core_build_help' => 'Son versiyon kullanılabilir.',\n    'themes' => 'Temalar',\n    'plugin_version_none' => 'Yeni eklenti',\n    'plugin_current_version' => 'Mevcut sürüm',\n    'theme_new_install' => 'Yeni tema kur.',\n    'theme_extracting' => 'Tema paketten çıkarılıyor: :name',\n    'update_label' => 'Sistemi güncelle',\n    'update_loading' => 'Kullanılabilir güncellemeler kontrol ediliyor...',\n    'force_label' => 'Güncellemeye zorla',\n    'found' => [\n      'label' => 'Güncellemeler bulundu!',\n      'help' => 'Sistemi güncelleye tıklayarak güncelleme işlemini başlatabilirsiniz.',\n    ],\n    'none' => [\n      'label' => 'Güncelleme yok',\n      'help' => 'Yeni güncelleme bulunamadı.',\n    ],\n    'important_action' => [\n      'empty' => 'Eylem seçin',\n      'confirm' => 'Güncellemeyi onayla',\n      'skip' => 'Eklentiyi geç (tek seferlik)',\n      'ignore' => 'Eklentiyi geç (her zaman)',\n    ],\n    'important_action_required' => 'Eylem gerekli',\n    'important_view_guide' => 'Yükseltme kılavuzuna göz atın',\n    'important_view_release_notes' => 'Sürüm notlarını göster',\n    'important_alert_text' => 'Bazı eklentiler işlem gerektirebilir.',\n    'details_title' => 'Eklenti detayları',\n    'details_view_homepage' => 'Anasayfa',\n    'details_changelog' => 'Değişiklikler',\n    'details_changelog_missing' => 'Değişiklik geçmişi yok.',\n    'details_current_version' => 'Mevcut sürüm',\n    'details_author' => 'Geliştirici',\n  ],\n  'server' => [\n    'connect_error' => 'Sunucuyla bağlantı kurulamadı.',\n    'response_not_found' => 'Güncelleme sunucusu bulunamadı.',\n    'response_invalid' => 'Sunucudan hatalı cevap geldi.',\n    'response_empty' => 'Sunucudan boş cevap geldi.',\n    'file_error' => 'Paket teslim edilirken sunucuda hata meydana geldi.',\n    'file_corrupt' => 'Sunucudaki dosya bozulmuş.',\n  ],\n  'behavior' => [\n    'missing_property' => ':class sınıfı :behavior davranışı tarafından kullanılan $:property özelliğini tanımlamalı.',\n  ],\n  'config' => [\n    'not_found' => ':location için tanımlanan :file adlı ayar dosyası bulunamadı.',\n    'required' => ':location konumunda kullanılan :property ayarı bir değer içermelidir.',\n  ],\n  'zip' => [\n    'extract_failed' => '\\':file\\' adlı çekirdek dosyası dosya paketinden çıkarılamadı.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'İstek günlüğünü temizle',\n    'empty_loading' => 'İstek günlüğü temizleniyor...',\n    'empty_success' => 'İstek günlüğü temizlendi.',\n    'return_link' => 'İstek günlüğüne dön',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Sistem',\n    'manage_system_settings' => 'Sistem ayarlarını düzenleyebilir',\n    'manage_software_updates' => 'Sistem güncellemelerini yönetebilir',\n    'access_logs' => 'Sistem günlüğünü görüntüleyebilir',\n    'manage_mail_templates' => 'E-posta şablonları yönetebilir',\n    'manage_mail_settings' => 'E-posta ayarlarını yönetebilir',\n    'manage_other_administrators' => 'Diğer yöneticileri düzenleyebilir',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Geçersiz dosya dizini belirtildi: \\':path\\'.',\n    'folder_size_items' => 'öğe(ler)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/tr/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'        => ':attribute kabul edilmelidir.',\n    'active_url'      => ':attribute geçerli bir URL olmalıdır.',\n    'after'           => ':attribute şundan eski bir tarih olmalıdır :date.',\n    'after_or_equal'  => ':attribute şundan eski veya aynı bir tarih olmalıdır :date.',\n    'alpha'           => ':attribute sadece harflerden oluşmalıdır.',\n    'alpha_dash'      => ':attribute sadece harfler, rakamlar ve tirelerden oluşmalıdır.',\n    'alpha_num'       => ':attribute sadece harfler ve rakamlar içermelidir.',\n    'array'           => ':attribute dizi olmalıdır.',\n    'before'          => ':attribute şundan önceki bir tarih olmalıdır :date.',\n    'before_or_equal' => ':attribute şundan önceki veya aynı bir tarih olmalıdır :date.',\n    'between'         => [\n        'numeric' => ':attribute :min - :max arasında olmalıdır.',\n        'file'    => ':attribute :min - :max arasındaki kilobayt değeri olmalıdır.',\n        'string'  => ':attribute :min - :max arasında karakterden oluşmalıdır.',\n        'array'   => ':attribute :min - :max arasında nesneye sahip olmalıdır.',\n    ],\n    'boolean'           => ':attribute alanı true veya false olmalıdır.',\n    'confirmed'         => ':attribute tekrarı eşleşmiyor.',\n    'date'              => ':attribute geçerli bir tarih olmalıdır.',\n    'date_format'       => ':attribute :format biçimi ile eşleşmiyor.',\n    'different'         => ':attribute ile :other birbirinden farklı olmalıdır.',\n    'digits'            => ':attribute :digits rakam olmalıdır.',\n    'digits_between'    => ':attribute :min ile :max arasında rakam olmalıdır.',\n    'dimensions'        => ':attribute geçersiz resim boyutlarına sahip.',\n    'distinct'          => ':attribute alanı yinelenen bir değere sahip.',\n    'email'             => ':attribute biçimi geçersiz.',\n    'exists'            => 'Seçili :attribute geçersiz.',\n    'file'              => ':attribute bir dosya olmalı.',\n    'filled'            => ':attribute alanın bir değeri içermelidir.',\n    'image'             => ':attribute alanı resim dosyası olmalıdır.',\n    'in'                => ':attribute değeri geçersiz.',\n    'in_array'          => ':attribute alanı, :other da bulunmuyor.',\n    'integer'           => ':attribute rakam olmalıdır.',\n    'ip'                => ':attribute geçerli bir IP adresi olmalıdır.',\n    'ipv4'              => ':attribute geçerli bir IPv4 adresi olmalıdır.',\n    'ipv6'              => ':attribute geçerli bir IPv6 adresi olmalıdır.',\n    'json'              => ':attribute geçerli bir JSON string olmalıdır.',\n    'max'               => [\n        'numeric' => ':attribute değeri :max değerinden küçük olmalıdır.',\n        'file'    => ':attribute değeri :max kilobayt değerinden küçük olmalıdır.',\n        'string'  => ':attribute değeri :max karakter değerinden küçük olmalıdır.',\n        'array'   => ':attribute değeri :max adedinden az nesneye sahip olmalıdır.',\n    ],\n    'mimes'         => ':attribute dosya biçimi :values olmalıdır.',\n    'mimetypes'     => ':attribute dosya biçimi :values olmalıdır.',\n    'min'           => [\n        'numeric' => ':attribute değeri :min değerinden büyük olmalıdır.',\n        'file'    => ':attribute değeri :min kilobayt değerinden büyük olmalıdır.',\n        'string'  => ':attribute değeri :min karakter değerinden büyük olmalıdır.',\n        'array'   => ':attribute en az :min nesneye sahip olmalıdır.',\n    ],\n    'not_in'               => 'Seçili :attribute geçersiz.',\n    'numeric'              => ':attribute rakam olmalıdır.',\n    'present'              => ':attribute alanı mevcut olmalı.',\n    'regex'                => ':attribute biçimi geçersiz.',\n    'required'             => ':attribute alanı zorunludur.',\n    'required_if'          => ':attribute alanı, :other :value değerine sahip olduğunda zorunludur.',\n    'required_unless'      => ':other değeri :values içinde olmadığı müddetçe :attribute alanı zorunludur.',\n    'required_with'        => ':attribute alanı :values varken zorunludur.',\n    'required_with_all'    => ':values değeri olduğu durumda :attribute alanı zorunludur.',\n    'required_without'     => ':attribute alanı :values yokken zorunludur.',\n    'required_without_all' => ':values değerleri olmadığı müddetçe :attribute alanı zorunludur.',\n    'same'              => ':attribute ile :other eşleşmelidir.',\n    'size'              => [\n        'numeric' => ':attribute :size olmalıdır.',\n        'file'    => ':attribute :size kilobyte olmalıdır.',\n        'string'  => ':attribute :size karakter olmalıdır.',\n        'array'   => ':attribute :size nesneye sahip olmalıdır.',\n    ],\n    'string'    => 'The :attribute must be a string.',\n    'timezone'  => 'The :attribute must be a valid zone.',\n    'unique'    => ':attribute daha önceden kayıt edilmiş.',\n    'uploaded'  => 'The :attribute failed to upload.',\n    'url'       => ':attribute biçimi geçersiz.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention 'attribute.rule' to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of 'email'. This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/tr.json",
    "content": "{\n  \"Check For Updates\": \"Güncellemeleri kontrol et\",\n  \"Install Packages\": \"Paketleri Yükle\",\n  \"Manage Themes\": \"Temaları Yönet\",\n  \"Manage Plugins\": \"Eklentileri yönet\",\n  \"Project\": \"Proje\",\n  \"Owner\": \"Proje Sahibi\",\n  \"Plugins\": \"Modüller\",\n  \"Recommended\": \"Tavsiye edilen\",\n  \"Disabled\": \"Devre dışı\",\n  \"Current Build\": \"Mevcut versiyon\",\n  \"Updates Available\": \"Güncellemeler mevcut\",\n  \"Up to Date\": \"Güncel\",\n  \"Latest Build\": \"Son Yapı\",\n  \"View Changelog\": \"Değişim günlüğünü incele\",\n  \"Software Updates\": \"Güncellemeler\",\n  \"Update the system modules and plugins.\": \"Sistemi güncelleyin, temaları ve eklentileri yönetin.\",\n  \"General\": \"Genel\",\n  \"Mail\": \"Posta\",\n  \"Utilities\": \"Araçlar\",\n  \"Settings\": \"Ayarlar\",\n  \"Show All Settings\": \"Tüm Ayarları Göster\",\n  \"Unable to find the specified settings.\": \"Belirtilen ayarlar bulunamadı.\",\n  \"The settings page is missing a Model definition.\": \"Ayarlar sayfasında Model tanımı eksik.\",\n  \":name settings updated\": \":name için ayarlar güncellendi.\",\n  \"Return to System Settings\": \"Sistem ayarları sayfasına dön\",\n  \"Search Settings...\": \"Bir Ayar Bul...\",\n  \"Disable mail branding CSS\": \"Posta markalama CSS'sini devre dışı bırak\",\n  \"Manage Sites\": \"Siteleri Yönet\",\n  \"Manage the websites available for this application.\": \"Bu uygulama için mevcut web sitelerini yönetin.\",\n  \"Marketplace\": \"pazar yeri\",\n  \"There is no documentation provided.\": \"Herhangi bir kılavuz bulunamadı.\",\n  \"Documentation\": \"Kılavuz\",\n  \"Upgrade Guide\": \"Yükseltme Kılavuzu\",\n  \"License\": \"Lisans\",\n  \"Attach to Project\": \"Projeye bağla\",\n  \"Manage Updates\": \"Güncellemeleri Yönet\",\n  \"Software Update\": \"Sistemi Güncelle\",\n  \"Return to Software Updates\": \"Sistem güncellemelerine geri dön\",\n  \"Try Again\": \"Tekrar dene\",\n  \"Unpacking application files\": \"Uygulama dosyaları çıkarılıyor\",\n  \"Update Failed\": \"Güncelleme hatası\",\n  \"Unpacking plugin: :name\": \"Modül dosyaları çıkarılıyor: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Birincil site varsayılan olarak kullanılır ve silinemez.\",\n  \"Disabled sites are not shown on the frontend.\": \"Devre dışı bırakılan siteler ön uçta gösterilmez.\",\n  \"Enabled in the Admin Panel\": \"Yönetici Panelinde Etkinleştirildi\",\n  \"Configuration\": \"Yapılandırma\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Sitenin yönetici panelinde etkinleştirilmesini istiyorsanız bunu kullanın.\",\n  \"Install\": \"Düzenlemek\",\n  \"Sync Project\": \"Senkronizasyon Projesi\",\n  \"Name\": \"Adı\",\n  \"Unique Code\": \"Benzersiz kod\",\n  \"Theme\": \"Tema\",\n  \"Sites\": \"Siteler\",\n  \"Create Site\": \"Site Oluştur\",\n  \"Base URL\": \"Temel URL\",\n  \"Status\": \"Durum\",\n  \"Current default value: :value\": \"Geçerli varsayılan değer: :value\",\n  \"Locale\": \"Yerel\",\n  \"Timezone\": \"Saat dilimi\",\n  \"Custom application URL\": \"Özel uygulama URL'si\",\n  \"Override the application URL when this site is active.\": \"Bu site etkinken uygulama URL'sini geçersiz kılın.\",\n  \"Use a CMS route prefix\": \"Bir CMS rota öneki kullanın\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Bir önek, paylaşılan bir ana bilgisayar adı kullanılırken bu siteyi tanımlayabilir.\",\n  \"Define matching hostnames\": \"Eşleşen ana bilgisayar adlarını tanımlayın\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Bu siteye hizmet vermek için kullanılması gereken alan adlarını ve kalıpları belirtin.\",\n  \"Display a style for this site\": \"Bu site için bir renk göster\",\n  \"To help identify this site, display a color in the admin panel.\": \"Bu siteyi tanımlamaya yardımcı olması için yönetici panelinde bir renk görüntüleyin.\",\n  \"Save\": \"Kaydetmek\",\n  \"Save and Close\": \"Kaydet ve kapat\",\n  \"Use Default\": \"Varsayılanı Kullan\",\n  \"Use Custom\": \"Özel Kullan\",\n  \"Specify a custom locale code.\": \"Özel bir yerel ayar kodu belirtin.\",\n  \"Failed\": \"Arızalı\",\n  \"or\": \"veya\",\n  \"Code\": \"Kod\",\n  \"October CMS Marketplace\": \"Ekim CMS Pazar Yeri\",\n  \"Visit the :link to add some.\": \"Projede eklenti veya tema yok. Biraz eklemek için :bağlantısını ziyaret edin.\",\n  \"Buy Now\": \"Şimdi al\",\n  \"Updating package manager\": \"Paket yöneticisi güncelleniyor\",\n  \"Updating application files\": \"Uygulama dosyaları indiriliyor\",\n  \"Setting build number\": \"Build numarası güncelleniyor\",\n  \"Finishing update process\": \"Güncelleme işlemi tamamlanıyor\",\n  \"Installing plugin: :name\": \"Modül indiriliyor: :name\",\n  \"Finishing installation process\": \"Kurulumu tamamla\",\n  \"Removing theme: :name\": \"Tema kaldırılıyor: :name\",\n  \"Please specify a Theme name to install.\": \"Lütfen yüklemek için bir tema ismi giriniz.\",\n  \"Installing theme: :name\": \"Tema indiriliyor: :name\",\n  \"Removing plugin: :name\": \"Eklenti kaldırılıyor: :name\",\n  \"Please specify a Plugin name to install.\": \"Yüklemek istediğiniz eklentinin adını giriniz.\",\n  \"Update process complete\": \"Güncelleme işlemi başarıyla tamamlandı.\",\n  \"Package installed successfully\": \"Eklenti kurulumu tamamlandı.\",\n  \"Check Dependencies\": \"Bağımlılıkları Kontrol Et\",\n  \"Install Dependencies\": \"Bağımlılıkları Yükle\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Sistemin düzgün çalışması için gereken eksik bağımlılıklar var.\",\n  \"License Key\": \"Lisans anahtarı\",\n  \"How to find your License Key\": \"Lisans Anahtarınızı nasıl bulabilirsiniz?\",\n  \"The password attribute is required.\": \"Parola özniteliği gereklidir.\",\n  \"The login attribute is required.\": \"Oturum açma özniteliği gereklidir.\",\n  \"Cannot login user since they are not activated.\": \"Etkinleştirilmedikleri için kullanıcı oturum açamıyor.\",\n  \"Cannot login user since they are banned.\": \"Yasaklandığı için kullanıcı girişi yapılamıyor.\",\n  \"Cannot login user since they are suspended.\": \"Askıya alındıklarından kullanıcı oturum açamıyor.\",\n  \"A user was not found with the given credentials.\": \"Belirtilen kimlik bilgilerine sahip bir kullanıcı bulunamadı.\",\n  \"A user was found but the password did not match.\": \"Bir kullanıcı bulundu ancak şifre eşleşmedi.\",\n  \"User is not logged in\": \"kullanıcı giriş yapmadı\",\n  \"Register Software\": \"Yazılımı Kaydet\",\n  \"View the Dashboard\": \"Panoyu görüntüleyebilir\",\n  \"Set the Default Dashboard\": \"Varsayılan kontrol panelini yönetebilir\",\n  \"Log File\": \"Günlük kayıt dosyası\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"posta damgası\",\n  \"No encryption\": \"Şifreleme yok\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Mail ayarları\",\n  \"Manage email configuration.\": \"Email ayarlarını düzenle.\",\n  \"Sender Name\": \"Gönderici Adı\",\n  \"Sender Email\": \"Gönderici Email\",\n  \"Mail Method\": \"Mail Metodu\",\n  \"SMTP Address\": \"SMTP Adresi\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"SMTP şifreleme protokolü\",\n  \"SMTP Authorization Required\": \"SMTP yetkilendirmesi kullan\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"SMTP sunucusu yetkilendirme gerektiriyorsa bu onay kutusunu işaretleyin.\",\n  \"Username\": \"Kullanıcı Adı\",\n  \"Password\": \"Şifre\",\n  \"Sendmail Path\": \"Sendmail Yolu\",\n  \"Please specify the path of the sendmail program.\": \"Sendmail programının yolunu belirtin.\",\n  \"Mailgun Domain\": \"Mailgun Domain\",\n  \"Please specify the Mailgun domain name.\": \"Mailgun domain belirtin.\",\n  \"Mailgun Secret\": \"Mailgun Gizli Anahtarı\",\n  \"Enter your Mailgun API key.\": \"Mailgun API anahtarını girin.\",\n  \"SES Key\": \"SES key\",\n  \"Enter your SES API key\": \"SES API keyi girin\",\n  \"SES Secret\": \"SES secret\",\n  \"Enter your SES API secret key\": \"SES API secret keyi girin\",\n  \"SES Region\": \"SES bölgesi\",\n  \"Enter your SES region (e.g. us-east-1)\": \"SES bölgenizi girin (örnek: us-east-1)\",\n  \"Postmark Token\": \"Posta Damgası Jetonu\",\n  \"Enter your Postmark API secret key\": \"Postmark API gizli anahtarınızı girin\",\n  \"Define administrator roles\": \"Yönetici rollerini tanımlayın\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Bu siteye erişimi yalnızca aşağıdaki rollere sahip yöneticilerle sınırlayın.\",\n  \"Manage Backend Preferences\": \"Yönetim paneli seçeneklerini düzenleyebilir\",\n  \"Manage Code Editor Preferences\": \"Kod editör ayarlarını düzenleyebilir\",\n  \"Customize Backend Styles\": \"Yönetim Panelini özelleştirebilir\",\n  \"Mail Templates\": \"Mail şablonları\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Kullanıcılar ve yöneticiler için gönderilen e-posta şablonları düzenleyin.\",\n  \"Mail Branding\": \"Mail yapılandırma\",\n  \"Modify the colors and appearance of mail templates.\": \"Posta şablonlarının renklerini ve görünümünü değiştirin.\",\n  \"Event Log\": \"Olay kaydı\",\n  \"View system log messages with their recorded time and details.\": \"Olay kayıtlarının zamanlarını ve detaylarını görüntüler.\",\n  \"Request Log\": \"İstek günlüğü\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"(404) sayfası gibi kötü ya da yeniden yönlendirilmiş istekleri görüntüler.\",\n  \"Log Settings\": \"Log ayarları\",\n  \"Specify which areas should use logging.\": \"Hangi alanlar için log kayıtları tutulacağını belirtin.\",\n  \"Test message sent.\": \"Test mesajı başarılı şekilde gönderildi.\",\n  \"New Layout\": \"Yeni Layout\",\n  \"New Partial\": \"Yeni Partial\",\n  \"New Template\": \"Yeni Şablon\",\n  \"Template\": \"Şablon\",\n  \"Templates\": \"Şablonlar\",\n  \"Layouts\": \"Layoutlar\",\n  \"Partials\": \"Partialler\",\n  \"Partial\": \"Partial\",\n  \"Mail Partials\": \"Mail Partialleri\",\n  \"Layout\": \"Layout\",\n  \"Mail Layouts\": \"Mail Layoutları\",\n  \"Unique code used to refer to this template\": \"Bu şablona referans için benzersiz bir kod verin\",\n  \"-- No layout --\": \"-- Şablon Yok --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Düzyazı\",\n  \"Disable automatic inline CSS\": \"Otomatik satır içi CSS'yi devre dışı bırak\",\n  \"Options\": \"Seçenekler\",\n  \"Subject\": \"Konu\",\n  \"Email message subject\": \"Email mesaj konusu\",\n  \"Description\": \"Açıklama\",\n  \"Drivers Not Installed\": \"Sürücüler yüklenmemiş\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Bu eposta yöntemiyle eposta gönderebilmeniz için \\\":plugin\\\" eklentisinin kurulmuş olması gerekir.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Olay Numarası\",\n  \"Level\": \"Seviye\",\n  \"Date & Time\": \"Tarih & Saat\",\n  \"Message\": \"Mesaj\",\n  \"Logging\": \"Log kaydetme\",\n  \"Log Bad Requests\": \"Hatalı istekleri kaydet\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"404 hataları gibi dikkat gerektirebilecek tarayıcı istekleri.\",\n  \"Log Theme Changes\": \"Tema değişikliklerini kaydet\",\n  \"When a change is made to the theme using the backend.\": \"Tema dosyalarında backend üzerinden bir değişiklik yapıldığında tutulan kayıtlar.\",\n  \"Log System Events\": \"Sistem olaylarını kaydet\",\n  \"Store system events in the database in addition to the file-based log.\": \"Dosya tabanlı loglara ek olarak, sistem olaylarını veritabanında da tutar.\",\n  \"Background\": \"Arkaplan\",\n  \"Body background\": \"Body arkaplanı\",\n  \"Content background\": \"İçerik arkaplanı\",\n  \"Inner content background\": \"İç içerik arkaplanı\",\n  \"Buttons\": \"Butonlar\",\n  \"Button text color\": \"Buton metni rengi\",\n  \"Primary button background\": \"Ana düğme arkaplanı\",\n  \"Positive button background\": \"Positif düğme arkaplanı\",\n  \"Negative button background\": \"Negatif düğme arkaplanı\",\n  \"Typography\": \"Tipografi\",\n  \"Header color\": \"Başlık rengi\",\n  \"Headings color\": \"Başlıkların rengi\",\n  \"Text color\": \"Metin rengi\",\n  \"Link color\": \"Link rengi\",\n  \"Footer color\": \"Footer rengi\",\n  \"Borders\": \"Borderlar\",\n  \"Body border color\": \"Body border rengi\",\n  \"Subcopy border color\": \"Altyazı border rengi\",\n  \"Table border color\": \"Tablo border rengi\",\n  \"Components\": \"Eklentiler\",\n  \"Panel background\": \"Panel arkaplanı\",\n  \"Promotion background\": \"Promosyon arkaplanı\",\n  \"Promotion border color\": \"Promosyon border rengi\",\n  \"Customize Mail Appearance\": \"Posta görünümünü özelleştir\",\n  \"Version\": \"Versiyon\",\n  \"Enabled\": \"Eklenti Aktif\",\n  \"Log ID\": \"İstek Numarası\",\n  \"Counter\": \"Sayaç\",\n  \"Referers\": \"Referer\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Bu kayıtlar, uygulamada ortaya çıkan potansiyel hataları, istisnaları ve hata ayıklama bilgilerini görüntüler.\",\n  \"Event\": \"Olay\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Bu günlük dikkat edilmesi gereken tarayıcı isteklerinin bir listesini görüntüler. Örneğin, bir ziyaretçi bulunmayan bir CMS sayfasını açarsa 404 kodu ile bir kayıt oluşturulur.\",\n  \"Request\": \"İstek\",\n  \"Event log emptied\": \"Olay kaydı temizlendi.\",\n  \"Empty Event Log\": \"Olay kaydını temizle\",\n  \"Emptying Event Log...\": \"Olay kaydı temizleniyor...\",\n  \"Return to Event Log\": \"Olay kayıtlarına dön\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Seçili eklentileri sıfırlamak istediğinize emin misiniz? Bu işlem, her eklentinin verilerini sıfırlayarak ilk yükleme durumuna geri getirir.\",\n  \"Reset Plugin Data\": \"Eklenti Verilerini Sıfırla\",\n  \"Enable Plugins\": \"Eklentileri Aktifleştir\",\n  \"Are you sure you want to :action these plugins?\": \"Seçili eklentileri :action etmek istediğinize emin misiniz?\",\n  \"enable\": \"aktifleştir\",\n  \"disable\": \"pasifleştir\",\n  \"Disable Plugins\": \"Eklentileri Pasifleştir\",\n  \"Select Action...\": \"Eylem Seçin...\",\n  \"Plugin has been removed from the file system.\": \"Eklenti sistemden kaldırıldı.\",\n  \"search plugins to install...\": \"eklenti ara...\",\n  \"search themes to install...\": \"tema ara...\",\n  \"Install Theme\": \"Temayı yükle\",\n  \"Theme Name\": \"Tema Adı\",\n  \"Install Plugin\": \"Eklenti Yükle\",\n  \"Plugin Name\": \"Eklenti Adı\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Eklenti adı eşsiz olmalıdır. Örneğin, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Temaya benzersiz bir isim verin. Örn: RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Kombine dosyası: ':name' bulunamadı.\"\n}"
  },
  {
    "path": "modules/system/lang/uk/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Форматування',\n        'quote' => 'Цитата',\n        'code' => 'Код',\n        'header1' => 'Заголовок 1',\n        'header2' => 'Заголовок 2',\n        'header3' => 'Заголовок 3',\n        'header4' => 'Заголовок 4',\n        'header5' => 'Заголовок 5',\n        'header6' => 'Заголовок 6',\n        'bold' => 'Жирний шрифт',\n        'italic' => 'Курсив',\n        'unorderedlist' => 'Ненумерованний список',\n        'orderedlist' => 'Нумірованний список',\n        'video' => 'Відео',\n        'image' => 'Зображення',\n        'link' => 'Посилання',\n        'horizontalrule' => 'Вставити горизонтальну риску',\n        'fullscreen' => 'Повний екран',\n        'preview' => 'Попередній перегляд'\n    ],\n    'mediamanager' => [\n        'insert_link' => \"Вставити медіа-посилання\",\n        'insert_image' => \"Вставити медіа-зображення\",\n        'insert_video' => \"Вставити медіа-відео\",\n        'insert_audio' => \"Вставити медіа-аудіо\",\n        'invalid_file_empty_insert' => \"Будь ласка, оберіть файл для вставки посилання.\",\n        'invalid_file_single_insert' => \"Будь ласка, оберіть один файл.\",\n        'invalid_image_empty_insert' => \"Будь ласка, оберіть зображення для вставки.\",\n        'invalid_video_empty_insert' => \"Будь ласка, оберіть відео для вставки.\",\n        'invalid_audio_empty_insert' => \"Будь ласка, оберіть аудіо для вставки.\",\n    ],\n    'alert' => [\n        'confirm_button_text' => 'Ок',\n        'cancel_button_text' => 'Скасувати',\n        'widget_remove_confirm' => 'Видалити цей віджет?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Попередній місяць',\n        'nextMonth' => 'Наступний місяць',\n        'months' => ['Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'],\n        'weekdays' => ['Неділя', 'Понеділок', 'Вівторок', 'Середа', 'Четвер', 'П\\'ятниця', 'Cубота'],\n        'weekdaysShort' => ['Нд', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'всі'\n        ],\n        'dates' => [\n            'all' => 'всі',\n            'filter_button_text' => 'Фільтр',\n            'reset_button_text' => 'Скинути',\n            'date_placeholder' => 'Дата',\n            'after_placeholder' => 'Після',\n            'before_placeholder' => 'До'\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Показати трасування стека',\n        'hide_stacktrace' => 'Приховати трасування стека',\n        'tabs' => [\n            'formatted' => 'Форматований',\n            'raw' => 'Початковий'\n        ],\n        'editor' => [\n            'title' => 'Редактор вихідного коду',\n            'description' => 'Ваша операційна система повинна бути налаштована на прослуховування до однієї з цих схем URL.',\n            'openWith' => 'Відкрити за допомогою',\n            'remember_choice' => 'Запам\\'ятати обраний варіант для цієї сесії',\n            'open' => 'Відкрити',\n            'cancel' => 'Скасувати'\n        ],\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/uk/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => 'Повернення до витоків',\n  ],\n  'directory' => [\n    'create_fail' => 'Неможливо створити директорію: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Неможливо створити файл: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Неправильний токен безпеки',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Система',\n    'menu_label' => 'Система',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Різне',\n      'logs' => 'Журнали',\n      'mail' => 'Пошта',\n      'shop' => 'Магазин',\n      'team' => 'Команда',\n      'users' => 'Користувачі',\n      'system' => 'Система',\n      'social' => 'Соціальне',\n      'backend' => 'Backend',\n      'events' => 'Події',\n      'customers' => 'Клієнтське',\n      'my_settings' => 'Мої налаштування',\n      'notifications' => 'Сповіщення',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Тема',\n    'unnamed' => 'Безіменна тема',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Встановити теми',\n    'installed' => 'Встановлені теми',\n    'no_themes' => 'Немає тем, встановлених з магазину.',\n    'recommended' => 'Рекомендуємо',\n    'remove_confirm' => 'Ви впевнені, що хочете видалити обрану тему?',\n  ],\n  'plugin' => [\n    'label' => 'Плагін',\n    'unnamed' => 'Безіменний плагін',\n    'name' => [],\n    'by_author' => 'Автор :name',\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Увімкнути або вимкнути',\n    'enable_or_disable_title' => 'Включення або відключення плагінів',\n    'install' => 'Встановити плагіни',\n    'install_products' => 'Встановити розширення',\n    'installed' => 'Встановлені плагіни',\n    'no_plugins' => 'Немає плагінів, встановлених з магазину.',\n    'recommended' => 'Рекомендуємо',\n    'remove' => 'Видалити',\n    'refresh' => 'Оновити',\n    'disabled_label' => 'Відключити',\n    'disabled_help' => 'Відключені плагіни будуть ігноруватися.',\n    'frozen_label' => 'Заморозити оновлення',\n    'frozen_help' => 'Плагіни, які були заморожені ігноруються в процесі оновлення.',\n    'selected_amount' => 'Обрано плагінів: :amount',\n    'remove_confirm' => 'Ви впевнені, що хочете видалити цей плагін?',\n    'remove_success' => 'Вибрані плагіни успішно видалені.',\n    'refresh_success' => 'Вибрані плагіни успішно оновлені.',\n    'disable_confirm' => 'Ви впевнені?',\n    'disable_success' => 'Плагіни успішно відключені.',\n    'enable_success' => 'Плагіни успішно включені.',\n  ],\n  'project' => [\n    'attach' => 'Підключити проект',\n    'detach' => 'Від\\'єднати проект',\n    'none' => 'Не підключений',\n    'id' => [\n      'missing' => 'Будь ласка, вкажіть ідентифікатор вашого проекту.',\n    ],\n    'detach_confirm' => 'Ви впевнені, що хочете від\\'єднати цей проект?',\n    'unbind_success' => 'Проект був успішно від\\'єднаний.',\n  ],\n  'settings' => [\n    'search' => 'Пошук',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Використовувати SSL',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Унікальне ім\\'я, яке використовується для позначення цього шаблону',\n    'test_send' => 'Надіслати тестове повідомлення',\n    'test_confirm' => 'Тестове повідомлення буде відправлено на :email. Продовжити?',\n    'creating' => 'Створення шаблону...',\n    'creating_layout' => 'Створення макета...',\n    'saving' => 'Збереження шаблону...',\n    'saving_layout' => 'Збереження макета...',\n    'delete_confirm' => 'Ви дійсно хочете видалити цей шаблон?',\n    'delete_layout_confirm' => 'Ви дійсно хочете видалити цей макет?',\n    'deleting' => 'Видалення шаблону...',\n    'deleting_layout' => 'Видалення макета...',\n    'sending' => 'Відправка тестового повідомлення...',\n    'return' => 'Повернутися до списку шаблонів',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Автор',\n    'plugin_not_found' => 'Плагін не знайдено',\n    'core_build' => 'Версія :build',\n    'core_build_help' => 'Остання доступна версія.',\n    'themes' => 'Теми',\n    'plugin_version_none' => 'Новий плагін',\n    'plugin_current_version' => 'Поточна версія плагіну',\n    'theme_new_install' => 'Нова тема встановлена.',\n    'theme_extracting' => 'Розпакування теми: :name',\n    'update_label' => 'Оновити',\n    'update_loading' => 'Пошук доступних оновлень...',\n    'force_label' => 'Оновити примусово',\n    'found' => [\n      'label' => 'Доступні нові оновлення!',\n      'help' => 'Натисніть «Оновити», щоб почати процес оновлення.',\n    ],\n    'none' => [\n      'label' => 'Оновлень немає',\n      'help' => 'Нові оновлення не знайдено.',\n    ],\n    'important_action' => [\n      'empty' => 'оберіть дію',\n      'confirm' => 'Підтвердіть оновлення',\n      'skip' => 'Пропустити цей плагін (тільки один раз)',\n      'ignore' => 'Пропускати цей плагін (завжди)',\n    ],\n    'important_action_required' => 'Необхідна дія',\n    'important_view_guide' => 'Переглянути керівництво по оновленню',\n    'important_view_release_notes' => 'Перегляд приміток випуску',\n    'important_alert_text' => 'Деякі оновлення вимагають вашої уваги.',\n    'details_title' => 'Інформація про плагін',\n    'details_view_homepage' => 'Перейти до домашньої сторінки',\n    'details_changelog' => 'Історія змін',\n    'details_changelog_missing' => 'Історії змін не надана.',\n    'details_current_version' => 'Поточна версія',\n    'details_author' => 'Автор',\n  ],\n  'server' => [\n    'connect_error' => 'Помилка підключення до сервера.',\n    'response_not_found' => 'Сервер оновлення не знайдено.',\n    'response_invalid' => 'Помилкова відповідь сервера.',\n    'response_empty' => 'Порожня відповідь сервера.',\n    'file_error' => 'Сервер не зміг доставити пакет.',\n    'file_corrupt' => 'Завантажений файл був пошкоджений.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Клас :class повинен містити властивість $:property, що використовується розширенням :behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Не вдалося знайти конфігураційний файл :file, очікуваний для :location.',\n    'required' => 'Для конфігурації, що використовується в :location не вказано властивість \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Неможливо зволікти файл \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Очистити журнал запитів',\n    'empty_loading' => 'Очищення журналу запитів...',\n    'empty_success' => 'Успішне очищення журналу запитів.',\n    'return_link' => 'Повернутися до журналу запитів',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Система',\n    'manage_system_settings' => 'Налаштування системних параметрів',\n    'manage_software_updates' => 'Керування оновленнями',\n    'access_logs' => 'Перегляд системних логів',\n    'manage_mail_templates' => 'Керування поштовими шаблонами',\n    'manage_mail_settings' => 'Керування налаштуваннями пошти',\n    'manage_other_administrators' => 'Керування іншими адміністраторами',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Вказано неприпустимий шлях до файлу: \":path\".',\n    'folder_size_items' => 'Об\\'єктів',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/uk/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \"Ви повинні прийняти :attribute.\",\n    \"active_url\"       => \"Поле :attribute недійсний URL.\",\n    \"after\"            => \"Поле :attribute має бути датою після :date.\",\n    \"alpha\"            => \"Поле :attribute може містити тільки літери.\",\n    \"alpha_dash\"       => \"Поле :attribute може містити тільки букви, цифри і дефіс.\",\n    \"alpha_num\"        => \"Поле :attribute може містити тільки букви і цифри.\",\n    \"array\"            => \"Поле :attribute має бути масивом.\",\n    \"before\"           => \"Поле :attribute має бути датою перед :date.\",\n    \"between\"          => [\n        \"numeric\" => \"Поле :attribute має бути між :min и :max.\",\n        \"file\"    => \"Размер :attribute повинен бути від :min до :max Килобайт.\",\n        \"string\"  => \"Длина :attribute повинна бути від :min до :max символов.\",\n        \"array\"   => \"Поле :attribute має містити :min - :max элементов.\",\n    ],\n    \"confirmed\"        => \"Поле :attribute не збігається з підтвердженням.\",\n    \"date\"             => \"Поле :attribute не є датою.\",\n    \"date_format\"      => \"Поле :attribute не відповідає формату :format.\",\n    \"different\"        => \"Поля :attribute та :other повинні відрізнятися.\",\n    \"digits\"           => \"Довжина цифрового поля :attribute повинна бути :digits.\",\n    \"digits_between\"   => \"Довжина цифрового поля :attribute повинна бути між :min та :max.\",\n    \"email\"            => \"Поле :attribute має хибний формат.\",\n    \"exists\"           => \"Вибране значення для :attribute вже існує.\",\n    \"image\"            => \"Поле :attribute має бути зображенням.\",\n    \"in\"               => \"Вибране значення для :attribute помилково.\",\n    \"integer\"          => \"Поле :attribute має бути цілим числом.\",\n    \"ip\"               => \"Поле :attribute має бути дійсним IP-адресою.\",\n    \"max\"              => [\n        \"numeric\" => \"Поле :attribute має бути не більше :max.\",\n        \"file\"    => \"Поле :attribute має бути не більше :max кілобайт.\",\n        \"string\"  => \"Поле :attribute має бути не довше :max символів.\",\n        \"array\"   => \"Поле :attribute має містити не більше :max елементів.\",\n    ],\n    \"mimes\"            => \"Поле :attribute має бути файлом одного з типів: :values.\",\n    \"extensions\"       => \"Поле :attribute повинен мати одне з розширень: :values.\",\n    \"min\"              => [\n        \"numeric\" => \"Поле :attribute має бути не менше :min.\",\n        \"file\"    => \"Поле :attribute має бути не менше :min кілобайт.\",\n        \"string\"  => \"Поле :attribute має бути не коротшою :min символів.\",\n        \"array\"   => \"Поле :attribute має містити не менше :min елементів.\",\n    ],\n    \"not_in\"           => \"Вибране значення для :attribute помилково.\",\n    \"numeric\"          => \"Поле :attribute має бути числом.\",\n    \"regex\"            => \"Поле :attribute має хибний формат.\",\n    \"required\"         => \"Поле :attribute обов'язкове для заповнення.\",\n    \"required_if\"      => \"Поле :attribute обов'язково для заповнення, коли :other дорівнює :value.\",\n    \"required_with\"    => \"Поле :attribute обов'язково для заповнення, коли :values вказано.\",\n    \"required_without\" => \"Поле :attribute обов'язково для заповнення, коли :values не вказано.\",\n    \"same\"             => \"Значення :attribute має збігатися з :other.\",\n    \"size\"             => [\n        \"numeric\" => \"Поле :attribute повинно бути :size.\",\n        \"file\"    => \"Поле :attribute повинно бути :size кілобайт.\",\n        \"string\"  => \"Поле :attribute має бути довжиною :size символів.\",\n        \"array\"   => \"Кількість елементів в поле :attribute повинно бути :size.\",\n    ],\n    \"unique\"           => \"Таке значення поля :attribute вже існує.\",\n    \"url\"              => \"Поле :attribute має хибний формат.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => []\n\n];\n"
  },
  {
    "path": "modules/system/lang/uk.json",
    "content": "{\n  \"Check For Updates\": \"Перевірити оновлення\",\n  \"Install Packages\": \"Встановити пакети\",\n  \"Manage Themes\": \"Керування темами\",\n  \"Manage Plugins\": \"Керування плагінами\",\n  \"Project\": \"Проєкт\",\n  \"Owner\": \"Власник\",\n  \"Plugins\": \"Плагіни\",\n  \"Recommended\": \"Рекомендовано\",\n  \"Disabled\": \"Відключено\",\n  \"Current Build\": \"Поточна версія системи\",\n  \"Updates Available\": \"Доступні оновлення\",\n  \"Up to Date\": \"Актуальний\",\n  \"Latest Build\": \"Остання збірка\",\n  \"View Changelog\": \"Переглянути журнал змін\",\n  \"Software Updates\": \"Оновлення\",\n  \"Update the system modules and plugins.\": \"Оновлення системи, керування плагінами та темами.\",\n  \"General\": \"Загальне\",\n  \"Mail\": \"Пошта\",\n  \"Utilities\": \"Утиліти\",\n  \"Settings\": \"Налаштування\",\n  \"Show All Settings\": \"Показати всі налаштування\",\n  \"Unable to find the specified settings.\": \"Неможливо знайти зазначені налаштування.\",\n  \"The settings page is missing a Model definition.\": \"На сторінці налаштувань відсутнє визначення моделі.\",\n  \":name settings updated\": \"Налаштування для :name успішно оновлені.\",\n  \"Return to System Settings\": \"Повернутися до системних налаштувань\",\n  \"Search Settings...\": \"Знайти налаштування...\",\n  \"Disable mail branding CSS\": \"Вимкнути CSS брендування пошти\",\n  \"Manage Sites\": \"Керування сайтами\",\n  \"Manage the websites available for this application.\": \"Керуйте сайтами, доступними для цієї програми.\",\n  \"Marketplace\": \"Маркетплейс\",\n  \"There is no documentation provided.\": \"Документація не надана.\",\n  \"Documentation\": \"Документація\",\n  \"Upgrade Guide\": \"Інструкція з оновлення\",\n  \"License\": \"Ліцензія\",\n  \"Attach to Project\": \"Приєднати до проєкту\",\n  \"Manage Updates\": \"Менеджер оновлень\",\n  \"Software Update\": \"Оновлення системи\",\n  \"Return to Software Updates\": \"Повернутися до системи оновлень\",\n  \"Try Again\": \"Спробувати ще раз\",\n  \"Unpacking application files\": \"Розпакування файлів програми\",\n  \"Update Failed\": \"Неможливо оновити програму\",\n  \"Unpacking plugin: :name\": \"Розпакування плагіна: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"Основний сайт використовується за замовчуванням і не може бути видалений.\",\n  \"Disabled sites are not shown on the frontend.\": \"Відключені сайти не відображаються на інтерфейсі.\",\n  \"Enabled in the Admin Panel\": \"Увімкнено в панелі адміністратора\",\n  \"Configuration\": \"Конфігурація\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"Використовуйте це, якщо ви хочете, щоб сайт був увімкнений на панелі адміністратора.\",\n  \"Install\": \"Встановити\",\n  \"Sync Project\": \"Синхронізувати проєкт\",\n  \"Name\": \"Назва\",\n  \"Unique Code\": \"Унікальний код\",\n  \"Theme\": \"Тема\",\n  \"Sites\": \"Сайти\",\n  \"Create Site\": \"Створити сайт\",\n  \"Base URL\": \"Базовий URL\",\n  \"Status\": \"Статус\",\n  \"Current default value: :value\": \"Поточне значення за умовчанням: :value\",\n  \"Locale\": \"Мова\",\n  \"Timezone\": \"Часовий пояс\",\n  \"Custom application URL\": \"Користувацька URL-адреса програми\",\n  \"Override the application URL when this site is active.\": \"Замінити URL-адресу програми, коли цей сайт активний.\",\n  \"Use a CMS route prefix\": \"Використовуйте префікс маршруту CMS\",\n  \"A prefix can identify this site when using a shared hostname.\": \"Префікс може ідентифікувати цей сайт під час використання спільного імені хоста.\",\n  \"Define matching hostnames\": \"Визначте відповідні імена хостів\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"Укажіть доменні імена та шаблони, які повинні використовуватися для обслуговування цього сайту.\",\n  \"Display a style for this site\": \"Відобразити колір для цього сайту\",\n  \"To help identify this site, display a color in the admin panel.\": \"Щоб допомогти ідентифікувати цей сайт, відобразіть колір на панелі адміністратора.\",\n  \"Save\": \"Зберегти\",\n  \"Save and Close\": \"Зберегти та закрити\",\n  \"Use Default\": \"Використовувати за замовчуванням\",\n  \"Use Custom\": \"Використовувати власне\",\n  \"Specify a custom locale code.\": \"Укажіть власний код мови.\",\n  \"Failed\": \"Не вдалося\",\n  \"or\": \"або\",\n  \"Code\": \"Код\",\n  \"October CMS Marketplace\": \"Маркетплейс October CMS\",\n  \"Visit the :link to add some.\": \"Проєкт не має плагінів або тем. Перейдіть за посиланням :link, щоб додати.\",\n  \"Buy Now\": \"Купити зараз\",\n  \"Updating package manager\": \"Оновлення менеджера пакунків\",\n  \"Updating application files\": \"Завантаження файлів програми\",\n  \"Setting build number\": \"Встановлення номера збірки\",\n  \"Finishing update process\": \"Завершення процесу оновлення\",\n  \"Installing plugin: :name\": \"Завантаження плагіна: :name\",\n  \"Finishing installation process\": \"Завершення процесу установки\",\n  \"Removing theme: :name\": \"Видалення теми: :name\",\n  \"Please specify a Theme name to install.\": \"Будь ласка, вкажіть назву теми для установки.\",\n  \"Installing theme: :name\": \"Завантаження теми: :name\",\n  \"Extracting theme: :name\": \"Встановлення теми: :name\",\n  \"Seeding theme: :name\": \"Сідінг теми: :name\",\n  \"Removing plugin: :name\": \"Видалення плагіну: :name\",\n  \"Please specify a Plugin name to install.\": \"Будь ласка, вкажіть назву плагіна для установки.\",\n  \"Update process complete\": \"Процес оновлення успішно завершений\",\n  \"Package installed successfully\": \"Плагін був успішно встановлений\",\n  \"Check Dependencies\": \"Перевірити залежності\",\n  \"Install Dependencies\": \"Встановити залежності\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"Не вистачає залежностей, необхідних для роботи системи.\",\n  \"License Key\": \"Ліцензійний ключ\",\n  \"How to find your License Key\": \"Як знайти ваш ліцензійний ключ\",\n  \"The password attribute is required.\": \"Атрибут пароля є обов'язковим.\",\n  \"The login attribute is required.\": \"Атрибут логіну є обов'язковим.\",\n  \"Cannot login user since they are not activated.\": \"Неможливо увійти в систему: обліковий запис не активовано.\",\n  \"Cannot login user since they are banned.\": \"Неможливо увійти в систему: обліковий запис заблоковано.\",\n  \"Cannot login user since they are suspended.\": \"Неможливо увійти в систему: обліковий запис призупинено.\",\n  \"A user was not found with the given credentials.\": \"Користувач з такими обліковими даними не знайдений.\",\n  \"A user was found but the password did not match.\": \"Користувача знайдено, але пароль не збігається.\",\n  \"User is not logged in\": \"Користувач не увійшов\",\n  \"Register Software\": \"Реєстрація програми\",\n  \"View the Dashboard\": \"Перегляд панелі керування\",\n  \"Set the Default Dashboard\": \"Встановити основну панель\",\n  \"Log File\": \"Файл журналу\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"Postmark\",\n  \"No encryption\": \"Без шифрування\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Налаштування пошти\",\n  \"Manage email configuration.\": \"Керування налаштуванням електронної пошти.\",\n  \"Sender Name\": \"Ім'я відправника\",\n  \"Sender Email\": \"Адреса відправника\",\n  \"Mail Method\": \"Метод\",\n  \"SMTP Address\": \"Сервер вихідної пошти\",\n  \"SMTP Port\": \"SMTP порт\",\n  \"SMTP Encryption Protocol\": \"Протокол шифрування для SMTP\",\n  \"SMTP Authorization Required\": \"Використовувати SMTP авторизацію\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Активуйте цю опцію, якщо ваш SMTP-сервер вимагає авторизацію.\",\n  \"Username\": \"SMTP логін\",\n  \"Password\": \"SMTP пароль\",\n  \"Sendmail Path\": \"Sendmail шлях\",\n  \"Please specify the path of the sendmail program.\": \"Будь ласка, вкажіть шлях до sendmail.\",\n  \"Mailgun Domain\": \"Mailgun домен\",\n  \"Please specify the Mailgun domain name.\": \"Будь ласка, вкажіть Mailgun домен.\",\n  \"Mailgun Secret\": \"Секретний API-ключ\",\n  \"Enter your Mailgun API key.\": \"Введіть ваш Mailgun API-ключ.\",\n  \"SES Key\": \"SES API-ключ\",\n  \"Enter your SES API key\": \"Введіть ваш SES API-ключ\",\n  \"SES Secret\": \"SES секретний API-ключ\",\n  \"Enter your SES API secret key\": \"Введіть ваш секретний SES API-ключ\",\n  \"SES Region\": \"SES регіон\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Введіть ваш SES регіон (наприклад, us-east-1)\",\n  \"Postmark Token\": \"Токен Postmark\",\n  \"Enter your Postmark API secret key\": \"Введіть ваш секретний ключ Postmark API\",\n  \"Define administrator roles\": \"Визначити ролі адміністратора\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"Обмежити доступ до цього сайту тільки адміністратором з наступними ролями.\",\n  \"Group\": \"Групи\",\n  \"Create Group\": \"Створити групу\",\n  \"Site Group\": \"Група сайту\",\n  \"Site Groups\": \"Групи сайту\",\n  \"Manage Site Groups\": \"Керування групами сайту\",\n  \"Group Name\": \"Назва групи\",\n  \"All Sites\": \"Всі сайти\",\n  \"Manage Backend Preferences\": \"Керування налаштуваннями бренду\",\n  \"Manage Code Editor Preferences\": \"Керування налаштуваннями редактора коду\",\n  \"Customize Backend Styles\": \"Персоналізація панелі керування\",\n  \"Mail Templates\": \"Шаблони пошти\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Зміна шаблонів листів, що відправляються користувачам і адміністраторам.\",\n  \"Mail Branding\": \"Брендування пошти\",\n  \"Modify the colors and appearance of mail templates.\": \"Змініть кольори та зовнішній вигляд шаблонів пошти.\",\n  \"Event Log\": \"Журнал подій\",\n  \"View system log messages with their recorded time and details.\": \"Перегляд системного журналу подій.\",\n  \"Request Log\": \"Журнал запитів\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Перегляд невдалих або перенаправлених запитів, таких як сторінка 404.\",\n  \"Log Settings\": \"Налаштування журналів\",\n  \"Specify which areas should use logging.\": \"Вкажіть для яких частин CMS слід вести журнал.\",\n  \"Test message sent.\": \"Тестове повідомлення було успішно надіслано.\",\n  \"New Layout\": \"Новий макет\",\n  \"New Partial\": \"Новий фрагмент\",\n  \"New Template\": \"Новий шаблон\",\n  \"Template\": \"Шаблон\",\n  \"Templates\": \"Шаблони\",\n  \"Layouts\": \"Макети\",\n  \"Partials\": \"Фрагменти\",\n  \"Partial\": \"Фрагмент\",\n  \"Mail Partials\": \"Поштові фрагменти\",\n  \"Layout\": \"Макет\",\n  \"Mail Layouts\": \"Макети пошти\",\n  \"Unique code used to refer to this template\": \"Унікальний код, який використовується для позначення цього шаблону\",\n  \"-- No layout --\": \"-- макет відсутній --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Звичайний текст\",\n  \"Disable automatic inline CSS\": \"Вимкнути вбудовані CSS\",\n  \"Options\": \"Параметри\",\n  \"Subject\": \"Тема\",\n  \"Email message subject\": \"Тема повідомлення\",\n  \"Description\": \"Опис\",\n  \"Drivers Not Installed\": \"Драйвера не встановлені\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Необхідно встановити плагін ':plugin', перш ніж можна буде відправляти пошту.\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"ID події\",\n  \"Level\": \"Рівень\",\n  \"Date & Time\": \"Дата & Час\",\n  \"Message\": \"Повідомлення\",\n  \"Logging\": \"Ведення журналу\",\n  \"Log Bad Requests\": \"Зберігати помилкові запити\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Запити браузерів, які потребують уваги, такі як помилка 404.\",\n  \"Log Theme Changes\": \"Зберігати зміни теми\",\n  \"When a change is made to the theme using the backend.\": \"Зміни які внесені засобами CMS.\",\n  \"Log System Events\": \"Зберігати системні події\",\n  \"Store system events in the database in addition to the file-based log.\": \"Система зберігання подій в базі даних, на додаток до журналу на основі файлів.\",\n  \"Background\": \"Фон\",\n  \"Body background\": \"Фон листа\",\n  \"Content background\": \"Фон вмісту\",\n  \"Inner content background\": \"Фон внутрішнього вмісту\",\n  \"Buttons\": \"Кнопки\",\n  \"Button text color\": \"Колір тексту кнопки\",\n  \"Primary button background\": \"Основний фон кнопки\",\n  \"Positive button background\": \"Тло позитивних кнопок\",\n  \"Negative button background\": \"Тло негативних кнопок\",\n  \"Typography\": \"Типографіка\",\n  \"Header color\": \"Колір шапки\",\n  \"Headings color\": \"Колір заголовків\",\n  \"Text color\": \"Колір тексту\",\n  \"Link color\": \"Колір посилань\",\n  \"Footer color\": \"Колір футеру\",\n  \"Borders\": \"Рамки\",\n  \"Body border color\": \"Колір рамки листа\",\n  \"Subcopy border color\": \"Колір рамки субкопії\",\n  \"Table border color\": \"Колір рамки таблиць\",\n  \"Components\": \"Компоненти\",\n  \"Panel background\": \"Фон панелі\",\n  \"Promotion background\": \"Фон промо\",\n  \"Promotion border color\": \"Колір рамки промо\",\n  \"Customize Mail Appearance\": \"Налаштування вигляду пошти\",\n  \"Version\": \"Версія\",\n  \"Enabled\": \"Увімкнено\",\n  \"Latest\": \"Останні\",\n  \"Log ID\": \"ID запису\",\n  \"Counter\": \"Лічильник\",\n  \"Referers\": \"Джерело запиту\",\n  \"URL\": \"Адреса\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"У цьому журналі відображається список можливих помилок, які виникають в роботі додатка, таких як виключення і налагоджувальна інформація.\",\n  \"Event\": \"Подія\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"У цьому журналі відображається список запитів браузера, які потребують уваги. Наприклад, якщо відвідувач відкриває неіснуючу сторінку, то в журналі створюється запис з кодом статусу 404.\",\n  \"There were no detected referrers to this URL.\": \"Не виявлено посилань на цю URL-адресу.\",\n  \"Request\": \"Запит\",\n  \"Event log emptied\": \"Успішне очищення журналу подій\",\n  \"Empty Event Log\": \"Очистити журнал подій\",\n  \"Emptying Event Log...\": \"Очищення журналу подій...\",\n  \"Return to Event Log\": \"Повернутися до журналу подій\",\n  \"Installed\": \"Встановлено\",\n  \"Primary Site\": \"Основний сайт\",\n  \"Refresh Data\": \"Оновити дані\",\n  \"Remove Data\": \"Видалити дані\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Ви точно хочете скинути обрані плагіни? Це очистить всі дані плагінів та поверне їх у початковий стан.\",\n  \"Reset Plugin Data\": \"Скинути дані плагінів\",\n  \"Enable Plugins\": \"Увімкнути плагіни\",\n  \"Are you sure you want to :action these plugins?\": \"Ви дійсно хочете :action ці плагіни?\",\n  \"enable\": \"включити\",\n  \"disable\": \"вимкнути\",\n  \"Disable Plugins\": \"Вимкнути плагіни\",\n  \"Select Action...\": \"Оберіть дію...\",\n  \"Data has been removed.\": \"Дані було видалено.\",\n  \"Plugin has been removed from the file system.\": \"Плагін був видалений з файлової системи.\",\n  \"search plugins to install...\": \"пошук плагінів для установки...\",\n  \"Plugin has been disabled by configuration.\": \"Плагін вимкнуто за допомогою конфігурації.\",\n  \"Plugin has missing dependencies or disabled by system.\": \"Плагін має відсутні залежності або відключений системою.\",\n  \"search themes to install...\": \"пошук тем для установки...\",\n  \"Install Theme\": \"Встановити тему\",\n  \"Theme Name\": \"Назва теми\",\n  \"Install Plugin\": \"Встановити плагін\",\n  \"Plugin Name\": \"Назва плагіну\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Введіть назву плагіна зі своїм унікальним кодом. Наприклад, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Назва теми по її унікальним кодом. Наприклад, RainLab.Vanilla\",\n  \"Select Installation Method\": \"Виберіть метод встановлення\",\n  \"Make a Copy (Recommended)\": \"Зробити копію (Рекомендовано)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"Зробити копію цієї теми, щоб налаштувати її та вручну керувати майбутніми оновленнями.\",\n  \"Install with Composer\": \"Встановити з Composer\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"Розширити тему з використанням дочірньої теми для збереження майбутніх оновлень від автора теми.\",\n  \"Seed Theme Data\": \"Сідінг теми даними\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\",\n  \"Change Status\": \"Змінити статус\",\n  \"Site Definitions\": \"Визначення сайту\",\n  \"System Updates\": \"Оновлення системи\",\n  \"Find a Setting...\": \"Знайти налаштування...\",\n  \"Return to System Updates\": \"Повернутися до оновлення системи\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Frontend Theme settings.\": \"Імпортувати файли blueprints, мову і вміст бази даних в цій темі, якщо це можливо. Ви можете пропустити це і зробити це пізніше через налаштування теми сайту.\"\n}"
  },
  {
    "path": "modules/system/lang/vn/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => 'Định dạng',\n        'quote' => 'Đoạn trích dẫn',\n        'code' => 'Code',\n        'header1' => 'Tiêu đề 1',\n        'header2' => 'Tiêu đề 2',\n        'header3' => 'Tiêu đề 3',\n        'header4' => 'Tiêu đề 4',\n        'header5' => 'Tiêu đề 5',\n        'header6' => 'Tiêu đề 6',\n        'bold' => 'Chữ đậm',\n        'italic' => 'Chữ nghiêng',\n        'unorderedlist' => 'Danh sách không thứ tự',\n        'orderedlist' => 'Danh sách có thứ tự',\n        'video' => 'Video',\n        'image' => 'Hình ảnh',\n        'link' => 'Link',\n        'horizontalrule' => 'Chèn dòng kẻ ngang',\n        'fullscreen' => 'Toàn màn hình',\n        'preview' => 'Xem trước',\n    ],\n    'mediamanager' => [\n        'insert_link' => 'Chèn Link',\n        'insert_image' => 'Chèn hình ảnh',\n        'insert_video' => 'Chèn Video',\n        'insert_audio' => 'Chèn tệp âm thanh',\n        'invalid_file_empty_insert' => 'Vui lòng chọn file để chèn vào link.',\n        'invalid_file_single_insert' => 'Chọn một file duy nhất.',\n        'invalid_image_empty_insert' => 'Chọn một hoặc nhiều ảnh để chèn vào.',\n        'invalid_video_empty_insert' => 'Chọn video để chèn vào.',\n        'invalid_audio_empty_insert' => 'Chọn tệp tin audio để chèn vào.',\n    ],\n    'alert' => [\n        'confirm_button_text' => 'Đồng ý',\n        'cancel_button_text' => 'Bỏ qua',\n        'widget_remove_confirm' => 'Đồng ý xóa widget này?'\n    ],\n    'datepicker' => [\n        'previousMonth' => 'Tháng trước',\n        'nextMonth' => 'Tháng tiếp theo',\n        'months' => ['Tháng giêng', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],\n        'weekdays' => ['Chủ nhật', 'Thứ 2', 'Thứ 3', 'Thứ 4', 'Thứ 5', 'Thứ 6', 'Thứ 7'],\n        'weekdaysShort' => ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7']\n    ],\n    'colorpicker' => [\n        'choose' => 'Chọn',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => 'tất cả'\n        ],\n        'dates' => [\n            'all' => 'tất cả',\n            'filter_button_text' => 'Lọc',\n            'reset_button_text'  => 'Reset',\n            'date_placeholder' => 'Ngày',\n            'after_placeholder' => 'Sau ngày',\n            'before_placeholder' => 'Trước ngày'\n        ],\n        'numbers' => [\n            'all' => 'all',\n            'filter_button_text' => 'Lọc',\n            'reset_button_text'  => 'Reset',\n            'min_placeholder' => 'Nhỏ nhất',\n            'max_placeholder' => 'Lớn nhất'\n        ]\n\n    ],\n    'eventlog' => [\n        'show_stacktrace' => 'Hiển thị ngăn xếp',\n        'hide_stacktrace' => 'Ẩn ngăn xếp',\n        'tabs' => [\n            'formatted' => 'Đã định dạng',\n            'raw' => 'Raw',\n        ],\n        'editor' => [\n            'title' => 'Trình soạn thảo code',\n            'description' => 'Hệ thống của bạn cần được cấu hình để hiểu được một trong những cấu trúc URL này',\n            'openWith' => 'Mở bằng',\n            'remember_choice' => 'Nhớ lựa chọn này cho các lần tiếp theo',\n            'open' => 'Mở ra',\n            'cancel' => 'Bỏ qua'\n        ]\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/vn/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'OctoberCMS',\n    'tagline' => 'Getting back to basics',\n  ],\n  'locale' => [\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'rs' => 'Srpski',\n    'ru' => 'Русский',\n    'fi' => 'Suomi',\n    'sv' => 'Svenska',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n    'vn' => 'Tiếng việt',\n  ],\n  'directory' => [\n    'create_fail' => 'Không thể tạo danh mục: :name',\n  ],\n  'file' => [\n    'create_fail' => 'Không thể tạo file: :name',\n  ],\n  'page' => [\n    'invalid_token' => [\n      'label' => 'Security token không hợp lệ',\n    ],\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => 'Hệ thống',\n    'menu_label' => 'Hệ thống',\n    'categories' => [\n      'cms' => 'CMS',\n      'misc' => 'Misc',\n      'logs' => 'Các bản ghi',\n      'mail' => 'Mail',\n      'shop' => 'Cửa hàng',\n      'team' => 'Team',\n      'users' => 'Người dùng',\n      'system' => 'Hệ thống',\n      'social' => 'Mạng xã hội',\n      'backend' => 'Trang quản trị',\n      'events' => 'Sự kiện',\n      'customers' => 'Khách hàng',\n      'my_settings' => 'Cài đặt của tôi',\n      'notifications' => 'Thông báo',\n    ],\n  ],\n  'theme' => [\n    'label' => 'Theme',\n    'unnamed' => 'Theme chưa được đặt tên',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => 'Cài đặt themes',\n    'installed' => 'Các theme đã cài đặt',\n    'no_themes' => 'Không có theme nào được cài đặt từ chợ theme.',\n    'recommended' => 'Được khuyến khích cài đặt',\n    'remove_confirm' => 'Bạn có chắc chắn muốn xóa theme này?',\n  ],\n  'plugin' => [\n    'label' => 'Plugin',\n    'unnamed' => 'Plugin chưa được đặt tên',\n    'name' => [],\n    'by_author' => 'Tạo bởi :name',\n  ],\n  'plugins' => [\n    'enable_or_disable' => 'Bật hoặc tắt',\n    'enable_or_disable_title' => 'Bật hoặc tắt plugin',\n    'install' => 'Cài đặt plugin',\n    'install_products' => 'Các sản phẩm để cài đặt',\n    'installed' => 'Các plugin đã cài đặt',\n    'no_plugins' => 'Không có plugin nào được cài đặt từ chợ plugin',\n    'recommended' => 'Được khuyến khích cài đặt',\n    'remove' => 'Xóa',\n    'refresh' => 'Làm mới',\n    'disabled_label' => 'Đã tắt',\n    'disabled_help' => 'Các plugin đã tắt và không được sử dụng bới ứng dụng',\n    'frozen_label' => 'Tắt cập nhật',\n    'frozen_help' => 'Những plugin tắt cập nhật sẽ không được sử lý cập nhật tự động.',\n    'selected_amount' => 'Số plugin đã được chọn: :amount',\n    'remove_confirm' => 'Xác nhận xóa plugin này?',\n    'remove_success' => 'Đã xóa các plugin ra khỏi hệ thống.',\n    'refresh_success' => 'Đã làm mới các plugin.',\n    'disable_confirm' => 'Xác nhận tắt?',\n    'disable_success' => 'Đã tắt các plugin.',\n    'enable_success' => 'Đã bật các plugin.',\n  ],\n  'project' => [\n    'attach' => 'Chèn Dự án',\n    'detach' => 'Gỡ bỏ Dự án',\n    'none' => 'Trống',\n    'id' => [\n      'missing' => 'Điền vào ID Dự án để sử dụng.',\n    ],\n    'detach_confirm' => 'Xác nhận gỡ Dự án?',\n    'unbind_success' => 'Dự án đã được gỡ ra.',\n  ],\n  'settings' => [\n    'search' => 'Tìm kiếm',\n  ],\n  'mail' => [\n    'smtp_ssl' => 'Yêu cầu sử dụng SSL',\n  ],\n  'mail_templates' => [\n    'name_comment' => 'Tên của giao diễn mẫu không được trùng nhau.',\n    'test_send' => 'Gửi mail test',\n    'test_confirm' => 'Gửi mail test đến :email. Tiếp tục?',\n    'creating' => 'Đang tạo mẫu...',\n    'creating_layout' => 'Đang tạo Layout...',\n    'saving' => 'Đang lưu mẫu...',\n    'saving_layout' => 'Đang lưu Layout...',\n    'delete_confirm' => 'Xác nhận xóa template này?',\n    'delete_layout_confirm' => 'Xác nhận xóa layout này?',\n    'deleting' => 'Đang xóa mẫu...',\n    'deleting_layout' => 'Đang xóa Layout...',\n    'sending' => 'Đang gửi mail test...',\n    'return' => 'Quay lại trang danh sách mail mẫu',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => 'Tiêu đề',\n      'paragraph' => 'Đây là đoạn văn mẫu.... This is a paragraph filled with Lorem Ipsum and a link. Cumque dicta <a>doloremque eaque</a>, enim error laboriosam pariatur possimus tenetur veritatis voluptas.',\n      'table' => [\n        'item' => 'Danh sách các mục',\n        'description' => 'Mô tả',\n        'price' => 'Giá',\n        'centered' => 'Căn giữa',\n        'right_aligned' => 'Căn phải',\n      ],\n      'buttons' => [\n        'primary' => 'Nút bấm chính',\n        'positive' => 'Nút nổi bật',\n        'negative' => 'Nút chú ý',\n      ],\n      'panel' => 'Mẫu giao diện này thật tuyện vời!',\n      'more' => 'Mô tả thêm',\n      'promotion' => 'Mã ưu đãi: OCTOBER',\n      'subcopy' => 'Thông tin thêm',\n      'thanks' => 'Lời cám ơn',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => 'Tác giả',\n    'plugin_not_found' => 'Không tìm thấy Plugin',\n    'core_build' => 'Build :build',\n    'core_build_help' => 'Phiên bản build gần nhất.',\n    'themes' => 'Themes',\n    'plugin_version_none' => 'Tạo mới plugin',\n    'plugin_current_version' => 'Phiên bản hiện tại version',\n    'theme_new_install' => 'Cài đặt theme mới.',\n    'theme_extracting' => 'Đang giải nén theme: :name',\n    'update_label' => 'cập nhật hệ thống',\n    'update_loading' => 'Đang kiểm tra các cập nhật có sẵn...',\n    'force_label' => 'Bắt buộc cập nhật',\n    'found' => [\n      'label' => 'Có cập nhật mới!',\n      'help' => 'Bấm cập nhật hệ thống để bắt đầu cập nhật.',\n    ],\n    'none' => [\n      'label' => 'Không có cập nhật',\n      'help' => 'Không tìm thấy bản cập nhật nào.',\n    ],\n    'important_action' => [\n      'empty' => 'Chọn hành động',\n      'confirm' => 'Xác nhận cập nhật',\n      'skip' => 'Bỏ qua bản cập nhật này (Chỉ lần này)',\n      'ignore' => 'Bỏ qua bản cập nhật này (luôn luôn bỏ qua)',\n    ],\n    'important_action_required' => 'Hành động này là bắt buộc',\n    'important_view_guide' => 'Xem hướng dẫn nâng cấp',\n    'important_view_release_notes' => 'Xem ghi chú',\n    'important_alert_text' => 'Một số cập nhật cần phải chú ý.',\n    'details_title' => 'Chi tiết Plugin',\n    'details_view_homepage' => 'Đến trang chủ',\n    'details_changelog' => 'Các lần thay đổi',\n    'details_changelog_missing' => 'Không có bản ghi các lần thay đổi.',\n    'details_current_version' => 'Phiên bản hiện tại',\n    'details_author' => 'Tác giả',\n  ],\n  'server' => [\n    'connect_error' => 'Lỗi kết nối đến máy chủ.',\n    'response_not_found' => 'Không tìm thấy máy chủ cập nhật.',\n    'response_invalid' => 'Phản hồi không hợp lệ từ máy chủ.',\n    'response_empty' => 'Phản hồi trống từ máy chủ.',\n    'file_error' => 'Lỗi máy chủ không thể gửi về các package.',\n    'file_corrupt' => 'File trên máy chủ bị hỏng.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Class :class cần phải khai báo thuộc tính $:property được sử dụng bởi :behavior behavior.',\n  ],\n  'config' => [\n    'not_found' => 'Không tìm thấy tệp tin cấu hình :file được khai báo cho :location.',\n    'required' => 'Cấu hình được sử dụng cho :location cần phải có giá trị \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => 'Không thể giải nén tệp tin \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => 'Xóa hết các request log',\n    'empty_loading' => 'Đang xóa request log...',\n    'empty_success' => 'Đã xóa hết request log',\n    'return_link' => 'Quay lại trang request log',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => 'Hệ thống',\n    'manage_system_settings' => 'Quản lý các cài đặt của hệ thống',\n    'manage_software_updates' => 'Quản lý các cập nhật của hệ thống',\n    'access_logs' => 'Xem các bản ghi hệ thống',\n    'manage_mail_templates' => 'Quản lý các mẫu mail',\n    'manage_mail_settings' => 'Quản lý các cài đặt mail',\n    'manage_other_administrators' => 'Quản lý các administrator khác',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => 'Đường dẫn không hợp lệ: \\':path\\'.',\n    'folder_size_items' => 'item(s)',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/vn/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'             => ':attribute phải được chấp nhận.',\n    'active_url'           => ':attribute không phải là URL hợp lệ.',\n    'after'                => ':attribute phải là ngày sau :date.',\n    'after_or_equal'       => ':attribute phải là một ngày sau hoặc bằng ngày :date.',\n    'alpha'                => ':attribute phải là chữ cái.',\n    'alpha_dash'           => ':attribute phải là chữ cái, số hoặc dấu gạch ngang.',\n    'alpha_num'            => ':attribute phải là chữ cái hoặc số.',\n    'array'                => ':attribute phải là mảng.',\n    'before'               => ':attribute phải là ngày trước ngày :date.',\n    'before_or_equal'      => ':attribute phải là một ngày trước hoặc bằng với ngày :date.',\n    'between'              => [\n        'numeric' => ':attribute phải lớn hơn :min và nhỏ hơn :max.',\n        'file'    => ':attribute  phải lớn hơn :min và nhỏ hơn :max kilobytes.',\n        'string'  => ':attribute phải lớn hơn :min và nhỏ hơn :max kí tự.',\n        'array'   => ':attribute phải lớn hơn :min và nhỏ hơn :max items.',\n    ],\n    'boolean'              => 'Trường :attribute phải là giá trị đúng hoặc sai.',\n    'confirmed'            => ':attribute không chính xác.',\n    'date'                 => ':attribute không phải là ngày.',\n    'date_format'          => ':attribute không đúng định dạng với :format.',\n    'different'            => ':attribute phải khác :other.',\n    'digits'               => ':attribute phải có :digits chữ số.',\n    'digits_between'       => ':attribute phải lớn hơn :min và nhỏ hơn :max chữ số.',\n    'dimensions'           => ':attribute kích thước không hợp lệ.',\n    'distinct'             => 'Trường :attribute bị trùng giá trị.',\n    'email'                => ':attribute phải là một email hợp lệ.',\n    'exists'               => 'Mục đã chọn :attribute không hợp lệ.',\n    'file'                 => ':attribute phải là tệp tin.',\n    'filled'               => 'Trường :attribute không được để trống.',\n    'image'                => ':attribute phải là hình ảnh.',\n    'in'                   => 'Mục đã chọn :attribute không hợp lệ.',\n    'in_array'             => 'Trường :attribute không tồn tại trong :other.',\n    'integer'              => ':attribute phải là một số nguyên.',\n    'ip'                   => ':attribute phải là một địa chỉ IP hợp lệ.',\n    'ipv4'                 => ':attribute phải là địa chỉ IPv4 hợp lệ.',\n    'ipv6'                 => ':attribute phải là địa chỉ IPv6 hợp lệ.',\n    'json'                 => ':attribute phải là chuỗi JSON hợp lệ.',\n    'max'                  => [\n        'numeric' => ':attribute không được lơn hơn :max.',\n        'file'    => ':attribute không được lơn hơn :max kilobytes.',\n        'string'  => ':attribute không được lơn hơn :max kí tự.',\n        'array'   => ':attribute không được lơn hơn :max items.',\n    ],\n    'mimes'                => 'Loại file của :attribute phải là: :values.',\n    'mimetypes'            => 'Loại file của :attribute phải là: :values.',\n    'min'                  => [\n        'numeric' => ':attribute phải lớn hơn :min.',\n        'file'    => ':attribute phải lớn hơn :min kilobytes.',\n        'string'  => ':attribute phải nhiều hơn :min kí tự.',\n        'array'   => ':attribute phải có nhiều hơn :min item.',\n    ],\n    'not_in'               => 'Mục đã chọn :attribute không hợp lệ.',\n    'numeric'              => ':attribute phải là số.',\n    'present'              => 'Phải có trường :attribute.',\n    'regex'                => 'Định dạng của :attribute không hợp lệ.',\n    'required'             => 'Trường :attribute là bắt buộc.',\n    'required_if'          => 'Trường :attribute là bắt buộc khi :other là :value.',\n    'required_unless'      => 'Trường :attribute là bắt buộc trừ khi :other là :values.',\n    'required_with'        => 'Trường :attribute là bắt buộc khi có :values.',\n    'required_with_all'    => 'Trường :attribute là bắt buộc khi có :values.',\n    'required_without'     => 'Trường :attribute là bắt buộc khi không có :values.',\n    'required_without_all' => 'Trường :attribute là bắt buộc khi không có :values.',\n    'same'                 => ':attribute phải trùng khớp với :other.',\n    'size'                 => [\n        'numeric' => ':attribute phải có kích thước :size.',\n        'file'    => ':attribute phải có kích thước :size kilobytes.',\n        'string'  => ':attribute phải có :size kí tự.',\n        'array'   => ':attribute phải có :size items.',\n    ],\n    'string'               => ':attribute phải là chuỗi.',\n    'timezone'             => ':attribute phải là múi là hợp lệ.',\n    'unique'               => ':attribute đã tồn tại.',\n    'uploaded'             => ':attribute bị lỗi khi tải lên.',\n    'url'                  => ':attribute sai định dạng.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/vn.json",
    "content": "{\n  \"Check For Updates\": \"Kiểm tra cập nhật\",\n  \"Manage Plugins\": \"Quản lý các plugin\",\n  \"Project\": \"Dự án\",\n  \"Owner\": \"Người sở hữu\",\n  \"Plugins\": \"Plugins\",\n  \"Disabled\": \"Đã tắt\",\n  \"Current Build\": \"Current build\",\n  \"Software Updates\": \"Những cập nhật & Plugins\",\n  \"Update the system modules and plugins.\": \"Cập nhật hệ thống, quản lý và cài đặt plugins, themes.\",\n  \"Settings\": \"Cài đặt\",\n  \"Unable to find the specified settings.\": \"Không tìm thấy các cấu hình được chỉ định.\",\n  \"The settings page is missing a Model definition.\": \"Không có Model cho trang cài đặt.\",\n  \":name settings updated\": \"Cấu hình cho :name thành công\",\n  \"Return to System Settings\": \"Trở lại trang cài đặt\",\n  \"There is no documentation provided.\": \"Không có tài liệu được cung cấp.\",\n  \"Documentation\": \"Tài liệu hướng dẫn\",\n  \"Upgrade Guide\": \"Hướng dẫn nâng cấp\",\n  \"License\": \"Giấy phép\",\n  \"Attach to Project\": \"Chèn Project\",\n  \"Manage Updates\": \"Quản lý các cập nhật\",\n  \"Software Update\": \"Cập nhật hệ thống\",\n  \"Return to Software Updates\": \"Quay lại trang cập nhật hệ thống\",\n  \"Try Again\": \"Thử lại\",\n  \"Unpacking application files\": \"Đang giải nén\",\n  \"Update Failed\": \"Lỗi cập nhật\",\n  \"Unpacking plugin: :name\": \"Đang giải nén plugin: :name\",\n  \"Updating application files\": \"Đang tải file ứng dụng\",\n  \"Setting build number\": \"Cài đặt build number\",\n  \"Finishing update process\": \"Cập nhật hoàn tất\",\n  \"Installing plugin: :name\": \"Đang tải plugin: :name\",\n  \"Finishing installation process\": \"Hoàn tất cài đặt\",\n  \"Please specify a Theme name to install.\": \"Điền vào tên Theme để cài đặt.\",\n  \"Installing theme: :name\": \"Đang tải theme: :name\",\n  \"Please specify a Plugin name to install.\": \"Điền vào tên Plugin để cài đặt.\",\n  \"Update process complete\": \"Cập nhật hoàn tất\",\n  \"Package installed successfully\": \"Plugin đã được cài thành công\",\n  \"View the Dashboard\": \"Xem bảng điều khiển\",\n  \"Log File\": \"Log File\",\n  \"Sendmail\": \"Gửi mail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"No encryption\": \"Không mã hóa\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"Cấu hình mail\",\n  \"Manage email configuration.\": \"Quản lý các cấu hình mail.\",\n  \"Sender Name\": \"Tên người gửi\",\n  \"General\": \"Cấu hình chung\",\n  \"Sender Email\": \"Email người gửi\",\n  \"Mail Method\": \"Phương thức gửi mail\",\n  \"SMTP Address\": \"Địa chỉ SMTP\",\n  \"SMTP Port\": \"SMTP Port\",\n  \"SMTP Encryption Protocol\": \"Giao thức mã hóa SMTP\",\n  \"SMTP Authorization Required\": \"Yêu cầu cấp quyền\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"Chọn mụ này nếu SMTP sever của bạn yêu cầu cấp quyền truy cập(requires authorization).\",\n  \"Username\": \"Tên đăng nhập\",\n  \"Password\": \"Mật khẩu\",\n  \"Sendmail Path\": \"Đường dẫn gửi mail\",\n  \"Please specify the path of the sendmail program.\": \"Please specify the path of the sendmail program.\",\n  \"Mailgun Domain\": \"Tên miền trên Mailgun\",\n  \"Please specify the Mailgun domain name.\": \"Điền tên miền trên Mailgun\",\n  \"Mailgun Secret\": \"Mã bí mật trên Mailgun(secret key)\",\n  \"Enter your Mailgun API key.\": \"Điền vào mã Mailgun API của bạn\",\n  \"SES Key\": \"Mã SES\",\n  \"Enter your SES API key\": \"Điền vào mã SES API của bạn\",\n  \"SES Secret\": \"Mã bí mật trên SES (secret key)\",\n  \"Enter your SES API secret key\": \"Điền vào mã bí mật trên SES API của bạn (secret key)\",\n  \"SES Region\": \"Ku vực SES\",\n  \"Enter your SES region (e.g. us-east-1)\": \"Điền vào khu vực SES (ví dụ us-east-1)\",\n  \"Manage Backend Preferences\": \"Cá nhân hóa trang quản trị\",\n  \"Manage Code Editor Preferences\": \"Cá nhân hóa trình biên tập(code editor)\",\n  \"Customize Backend Styles\": \"Tùy chỉnh trang quản trị\",\n  \"Mail Templates\": \"Các mẫu mail\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"Quản lý các mẫu mail sẽ được gửi cho user và administrators.\",\n  \"Mail Branding\": \"Giao diện Mail\",\n  \"Modify the colors and appearance of mail templates.\": \"Chỉnh sửa màu sắc, giao diện của mẫu mail.\",\n  \"Event Log\": \"Bản ghi các sự kiện\",\n  \"View system log messages with their recorded time and details.\": \"Xem nhật ký hệ thống với thông tin thời gian cụ thể.\",\n  \"Request Log\": \"Bản ghi các Request\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"Xem các request lỗi hoặc bị chuyển hướng, ví dụ như Không tìm thấy trang (404).\",\n  \"Log Settings\": \"Cài đặt log\",\n  \"Specify which areas should use logging.\": \"Cấu hình những mục sẽ được ghi log.\",\n  \"Test message sent.\": \"Đã gửi mail test.\",\n  \"New Layout\": \"Thêm mẫu mới\",\n  \"New Partial\": \"Thêm Partial\",\n  \"New Template\": \"Thêm mẫu mới\",\n  \"Template\": \"Giao diện mẫu\",\n  \"Templates\": \"Các giao diện mẫu\",\n  \"Layouts\": \"Các giao diễn mẫu\",\n  \"Partials\": \"Partials\",\n  \"Partial\": \"Partial\",\n  \"Mail Partials\": \"Mail Partials\",\n  \"Layout\": \"Giao diễn mẫu\",\n  \"Mail Layouts\": \"Giao diện mail mẫu\",\n  \"Name\": \"Tên Plugin\",\n  \"Code\": \"Code\",\n  \"Unique code used to refer to this template\": \"Nhập một mã không được trùng với các mẫu giao diện khác\",\n  \"-- No layout --\": \"-- Không sử dụng mẫu --\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"Văn bản thô\",\n  \"Subject\": \"Tiêu đề mail\",\n  \"Email message subject\": \"Tiêu đề của mail\",\n  \"Description\": \"Mô tả\",\n  \"Drivers Not Installed\": \"Trình điều khiển chưa được cài đặt\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"Phương thức gửi mail này cần phải cài \\\":plugin\\\" plugin, bạn cần phải cài đặt nó trước mới gửi được mail\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"Event ID\",\n  \"Level\": \"Cấp độ\",\n  \"Date & Time\": \"Ngày giờ\",\n  \"Message\": \"Nội dung\",\n  \"Logging\": \"Những lần đăng nhập\",\n  \"Log Bad Requests\": \"Bản ghi các lỗi request\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"Các lỗi request của trình duyệt, ví dụ lỗi 404.\",\n  \"Log Theme Changes\": \"Bản ghi các thay đổi của theme\",\n  \"When a change is made to the theme using the backend.\": \"Khi thay đổi theme thông qua giao diện quản trị.\",\n  \"Log System Events\": \"Ghi các sự kiện của hệ thống\",\n  \"Store system events in the database in addition to the file-based log.\": \"Lưu các sự kiện của hệ thống vào database dựa trên file log\",\n  \"Background\": \"Màu nền\",\n  \"Body background\": \"Màu nền chính\",\n  \"Content background\": \"Màu nền nội dung\",\n  \"Inner content background\": \"Màu nền bên trong nội dung\",\n  \"Buttons\": \"Màu nền của các nút bấm\",\n  \"Button text color\": \"Màu chữ của nút bấm\",\n  \"Primary button background\": \"Màu của nút bấm chính\",\n  \"Positive button background\": \"Màu của nút bấm nổi bật\",\n  \"Negative button background\": \"Màu của nút bấm chú ý\",\n  \"Typography\": \"Màu của chữ\",\n  \"Header color\": \"Màu của tiêu đề\",\n  \"Headings color\": \"Màu của tiêu đề\",\n  \"Text color\": \"Màu chữ bình thường\",\n  \"Link color\": \"Màu đường dẫn\",\n  \"Footer color\": \"Màu chữ chân trang\",\n  \"Borders\": \"Đường viền\",\n  \"Body border color\": \"Màu của đường viền toàn trang\",\n  \"Subcopy border color\": \"Màu đường viền phần mô tả thêm\",\n  \"Table border color\": \"Màu của đường viền bảng\",\n  \"Components\": \"Thành phần khác\",\n  \"Panel background\": \"Nền của bảng điều khiển\",\n  \"Promotion background\": \"Nền mục khuyến mãi\",\n  \"Promotion border color\": \"Viền của mục khuyến mãi\",\n  \"Customize Mail Appearance\": \"Tùy chỉnh giao diện của mẫu mail\",\n  \"Version\": \"Phiên bản\",\n  \"Status\": \"Trạng thái\",\n  \"Log ID\": \"Log ID\",\n  \"Counter\": \"Số lần\",\n  \"Referers\": \"Người giới thiệu\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"Bản ghi các lỗi có thể sảy ra trong ứng dụng, ví dụ exceptions và thông tin debug.\",\n  \"Event\": \"Event\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"Bản ghi các request lỗi của trình duyệt. Ví dụ, nếu có khách truy cập vào một trang nội dung mà hệ thống không tìm thấy trang đó, một bản ghi sẽ được tạo ra với mã trạng thái 404.\",\n  \"Request\": \"Request\",\n  \"Event log emptied\": \"Đã xóa các bản ghi sự kiện\",\n  \"Empty Event Log\": \"Xóa hết các bản ghi\",\n  \"Emptying Event Log...\": \"Đang xóa các bản ghi...\",\n  \"Return to Event Log\": \"Quay lại trang các bản ghi sự kiện\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"Xác nhận?\",\n  \"Plugin has been removed from the file system.\": \"Đã xóa các file của plugin ra khỏi hệ thống.\",\n  \"search plugins to install...\": \"Tìm kiếm plugin để cài đặt...\",\n  \"search themes to install...\": \"Tìm kiếm theme để cài đặt...\",\n  \"Install Theme\": \"Cài đặt Theme\",\n  \"Theme Name\": \"Tên theme\",\n  \"Install Plugin\": \"Cài đặt Plugin\",\n  \"Plugin Name\": \"Tên plugin\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"Tên của plugin không được trùng lặp. For example, RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"Tên của theme không được trùng lặp. Ví dụ RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"Không tìm thấy combiner file ':name'.\"\n}"
  },
  {
    "path": "modules/system/lang/zh-cn/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => '格式化',\n        'quote' => '引用',\n        'code' => '代码',\n        'header1' => '标题 1',\n        'header2' => '标题 2',\n        'header3' => '标题 3',\n        'header4' => '标题 4',\n        'header5' => '标题 5',\n        'header6' => '标题 6',\n        'bold' => '粗体',\n        'italic' => '斜体',\n        'unorderedlist' => '无序列表',\n        'orderedlist' => '有序列表',\n        'video' => '视频',\n        'image' => '图片',\n        'link' => '链接',\n        'horizontalrule' => '插入分割线',\n        'fullscreen' => '全屏',\n        'preview' => '预览',\n    ],\n    'mediamanager' => [\n        'insert_link' => \"插入链接\",\n        'insert_image' => \"插入图片\",\n        'insert_video' => \"插入视频\",\n        'insert_audio' => \"插入音频\",\n        'invalid_file_empty_insert' => \"请选择要插入的文件。\",\n        'invalid_file_single_insert' => \"请选择要插入的文件。\",\n        'invalid_image_empty_insert' => \"请选择要插入的图片文件。\",\n        'invalid_video_empty_insert' => \"请选择要插入的视频文件。\",\n        'invalid_audio_empty_insert' => \"请选择要插入的音频文件。\",\n    ],\n    'alert' => [\n        'error' => '错误',\n        'confirm' => '确认',\n        'dismiss' => '取消',\n        'confirm_button_text' => '确定',\n        'cancel_button_text' => '取消',\n        'widget_remove_confirm' => '删除这个小部件?',\n    ],\n    'datepicker' => [\n        'previousMonth' => '上一个月',\n        'nextMonth' => '下一个月',\n        'months' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n        'weekdays' => ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],\n        'weekdaysShort' => ['日', '一', '二', '三', '四', '五', '六']\n    ],\n    'colorpicker' => [\n        'choose' => '好',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => '全部',\n        ],\n        'scopes' => [\n            'apply_button_text' => '应用',\n            'clear_button_text' => '清除',\n        ],\n        'dates' => [\n            'all' => '全部',\n            'filter_button_text' => '筛选',\n            'reset_button_text' => '重置',\n            'date_placeholder' => '日期',\n            'after_placeholder' => '之后',\n            'before_placeholder' => '之前',\n        ],\n        'numbers' => [\n            'all' => '全部',\n            'filter_button_text' => '过滤器',\n            'reset_button_text' => '重置',\n            'min_placeholder' => '最小',\n            'max_placeholder' => '最大',\n        ],\n    ],\n    'eventlog' => [\n        'show_stacktrace' => '显示堆栈',\n        'hide_stacktrace' => '隐藏堆栈',\n        'tabs' => [\n            'formatted' => '格式化',\n            'raw' => '原始',\n        ],\n        'editor' => [\n            'title' => '源代码编辑器',\n            'description' => '您的系统应配置一个侦听这些 URL 的方案',\n            'openWith' => '打开方式',\n            'remember_choice' => '记住本次会话选择的选项',\n            'open' => '打开',\n            'cancel' => '取消',\n        ],\n    ],\n    'upload' => [\n        'max_files' => '您不能上传任何文件',\n        'invalid_file_type' => '您不能上传这种类型的文件',\n        'file_too_big' => '文件太大 ({{filesize}}MB)。 最大文件大小：{{maxFilesize}}MB',\n        'response_error' => '服务器响应 {{statusCode}} 代码',\n        'remove_file' => '删除文件',\n    ],\n    'inspector' => [\n        'add' => '新增',\n        'remove' => '移除',\n        'key' => '键',\n        'value' => '值',\n        'ok' => '确定',\n        'cancel' => '取消',\n        'items' => '项目',\n    ],\n];\n"
  },
  {
    "path": "modules/system/lang/zh-cn/lang.php",
    "content": "<?php return [\n  'installer' => [\n    'app_config_section' => '应用程序配置',\n    'license_section' => '许可证密钥',\n    'dependencies_section' => '安装依赖',\n    'demo_section' => '演示内容',\n    'locale_select_label' => '选择语言',\n    'locale_select_error' => '语言代码：代码无效，请重试',\n    'app_url_label' => '应用程序 URL',\n    'backend_uri_label' => '后端 URI',\n    'backend_uri_comment' => '为了保护您的应用程序，请使用自定义地址来访问管理面板。',\n    'license_key_label' => '许可证密钥',\n    'license_key_comment' => '输入有效的许可证密钥以继续。',\n    'license_thanks_comment' => '感谢您成为October客户！',\n    'license_expired_comment' => '许可证未支付或已过期。请访问 october.com 获取许可证。',\n    'too_many_failures_label' => '失败的尝试太多',\n    'non_interactive_label' => '检测到非交互模式',\n    'non_interactive_comment' => '如果您立即看到此错误，请改用这些非交互式命令。',\n    'install_failed_label' => '安装失败',\n    'install_failed_comment' => '请尝试手动运行这些命令。',\n    'database_engine_label' => '数据库引擎',\n    'database_host_label' => '数据库主机',\n    'database_host_comment' => '数据库连接的主机名。',\n    'database_port_label' => '数据库端口',\n    'database_port_comment' => '（可选）连接端口。',\n    'database_name_label' => '数据库名称',\n    'database_name_comment' => '指定要使用的数据库名称。',\n    'database_login_label' => '数据库登录',\n    'database_login_comment' => '具有创建数据库权限的用户。',\n    'database_pass_label' => '数据库密码',\n    'database_pass_comment' => '指定用户的密码。',\n    'database_path_label' => '数据库路径',\n    'database_path_comment' => '对于基于文件的存储，输入相对于应用程序根目录的路径。',\n    'migrate_database_comment' => '请使用以下命令迁移数据库',\n    'visit_backend_comment' => '然后，在这个 URL 打开管理区域',\n    'open_configurator_comment' => '在浏览器中打开这个应用程序',\n    'install_demo_label' => '安装演示主题和内容?(推荐)',\n    'operation_timeout_comment' => '操作超时。请增加服务器超时时间，然后重试。',\n    'operation_timeout_hint' => '有关 :name，请参阅相关文档。',\n  ],\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => '回归基础',\n  ],\n  'locale' => [\n    'ar' => 'العربية',\n    'be' => 'Беларуская',\n    'bg' => 'Български',\n    'ca' => 'Català',\n    'cs' => 'Čeština',\n    'da' => 'Dansk',\n    'de' => 'Deutsch',\n    'el' => 'Ελληνικά',\n    'en' => 'English (United States)',\n    'en-au' => 'English (Australia)',\n    'en-ca' => 'English (Canada)',\n    'en-gb' => 'English (United Kingdom)',\n    'et' => 'Eesti',\n    'es' => 'Español',\n    'es-ar' => 'Español (Argentina)',\n    'fa' => 'فارسی',\n    'fi' => 'Suomi',\n    'fr' => 'Français',\n    'fr-ca' => 'Français (Canada)',\n    'hu' => 'Magyar',\n    'id' => 'Bahasa Indonesia',\n    'it' => 'Italiano',\n    'ja' => '日本語',\n    'ko' => '한국어',\n    'lt' => 'Lietuvių',\n    'lv' => 'Latviešu',\n    'nb-no' => 'Norsk (Bokmål)',\n    'nn-no' => 'Norsk (Nynorsk)',\n    'nl' => 'Nederlands',\n    'pl' => 'Polski',\n    'pt-br' => 'Português (Brasil)',\n    'pt-pt' => 'Português (Portugal)',\n    'ro' => 'Română',\n    'ru' => 'Русский',\n    'sk' => 'Slovenský',\n    'sl' => 'Slovenščina',\n    'sv' => 'Svenska',\n    'th' => 'ไทย',\n    'tr' => 'Türkçe',\n    'uk' => 'Українська мова',\n    'vn' => 'Tiếng việt',\n    'zh-cn' => '简体中文',\n    'zh-tw' => '繁體中文',\n  ],\n  'directory' => [\n    'create_fail' => '不能创建目录: :name',\n  ],\n  'file' => [\n    'create_fail' => '不能创建文件: :name',\n  ],\n  'combiner' => [],\n  'resizer' => [],\n  'system' => [\n    'name' => '系统',\n    'menu_label' => '系统',\n    'categories' => [\n      'cms' => '内容管理',\n      'misc' => '杂项',\n      'logs' => '日志',\n      'mail' => '邮件',\n      'shop' => '商铺',\n      'team' => '团队',\n      'users' => '用户',\n      'system' => '系统',\n      'social' => '社交',\n      'backend' => '后台',\n      'events' => '事件',\n      'customers' => '自定义',\n      'my_settings' => '我的设置',\n      'notifications' => '通知',\n    ],\n  ],\n  'theme' => [\n    'label' => '主题',\n    'unnamed' => '未命名主题',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => '安装主题',\n    'installed' => '已安装主题',\n    'no_themes' => '市场上没有已安装的主题。',\n    'recommended' => '推荐',\n    'remove_confirm' => '你确定要删除这些主题吗？',\n  ],\n  'plugin' => [\n    'label' => '插件',\n    'unnamed' => '未命名的插件',\n    'name' => [],\n    'by_author' => '作者 :name',\n  ],\n  'plugins' => [\n    'install' => '安装插件',\n    'install_products' => '安装产品',\n    'installed' => '已安装插件',\n    'no_plugins' => '市场中没有已安装的插件。',\n    'recommended' => '推荐',\n    'plugin_label' => '插件',\n    'bulk_actions_label' => '批量操作',\n    'check_yes' => '启用',\n    'check_no' => '禁用',\n    'unfrozen' => '更新已启用',\n    'freeze' => '禁用更新',\n    'unfreeze' => '启用更新',\n    'refresh' => '重置',\n    'remove' => '移除',\n    'freeze_label' => '禁用更新',\n    'unfreeze_label' => '启用更新',\n    'freeze_success' => '已成功禁用所选插件的更新。',\n    'unfreeze_success' => '为所选插件成功启用更新。',\n    'enable_success' => '成功启用了这些插件',\n    'disable_success' => '成功禁用了这些插件',\n    'refresh_success' => '成功刷新了系统中的插件',\n    'remove_confirm' => '您确定要删除选定的插件吗？ 这也将删除所有相关数据。',\n    'remove_success' => '已成功删除所选插件。',\n  ],\n  'project' => [\n    'attach' => '增加项目',\n    'detach' => '删除项目',\n    'none' => '没有',\n    'id' => [\n      'missing' => '请确认你想使用的项目ID。',\n    ],\n    'detach_confirm' => '你确定要删除这个项目吗?',\n    'unbind_success' => '项目删除成功。',\n  ],\n  'mail' => [\n    'smtp_ssl' => '需要 SSL 连接',\n  ],\n  'mail_templates' => [\n    'name_comment' => '指向这个模板的唯一名称',\n    'test_send' => '发送测试消息',\n    'test_confirm' => '向 :email 发送测试消息。继续吗？',\n    'creating' => '正在创建模板...',\n    'creating_layout' => '创建布局...',\n    'saving' => '保存模板...',\n    ' Saving_layout' => '保存布局...',\n    'delete_confirm' => '删除这个模板？',\n    'delete_layout_confirm' => '要删除这个布局吗？',\n    'deleting' => '删除模板...',\n    'deleting_layout' => '正在删除布局...',\n    'sending' => '发送测试消息...',\n    'return' => '返回模板列表',\n  ],\n  'mail_brand' => [\n    'sample_template' => [\n      'heading' => '标题',\n      'paragraph' => '鸿蒙，是中国古代汉族传说中的一个时代，传说在开天辟地之前，世界是一团混沌的元气，这种自然的元气叫做鸿蒙，因此把那个时代称作<a>鸿蒙时代</a>，后来此一词也常被用来泛指称远古时代',\n      'table' => [\n        'item' => '项目',\n        'description' => '描述',\n        'price' => '价格',\n        'centered' => '居中',\n        'right_aligned' => '右对齐',\n      ],\n      'buttons' => [\n        'primary' => '主要按钮',\n        'positive' => '正面按钮',\n        'negative' => '否定按钮',\n      ],\n      'panel' => '这个面板有多棒?',\n      'more' => '更多文字',\n      'promotion' => '优惠券代码：October',\n      'subcopy' => '这是电子邮件的副本',\n      'thanks' => '谢谢, October CMS',\n    ],\n    'fields' => [],\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => '作者',\n    'plugin_not_found' => '未找到插件',\n    'plugin_version_not_found' => '未找到插件版本',\n    'theme_not_found' => '找不到主题',\n    'core_build' => '版本 :build',\n    'core_build_help' => '最新版本可用。',\n    'changelog' => '变更日志',\n    'changelog_view_details' => '查看详情',\n    'themes' => '主题',\n    'plugin_version_none' => '新插件',\n    'plugin_current_version' => '当前版本',\n    'theme_new_install' => '新主题安装。',\n    'theme_extracting' => '解压主题：:name',\n    'update_label' => '更新软件',\n    'update_loading' => '正在加载可用更新...',\n    'force_label' => '强制更新',\n    'found' => [\n      'label' => '发现新的更新!',\n      'help' => '单击更新软件开始更新过程.',\n    ],\n    'none' => [\n      'label' => '没有更新',\n      'help' => '没有发现新的更新',\n    ],\n    'important_action' => [\n      'empty' => '选择操作',\n      'confirm' => '确认更新',\n      'skip' => '跳过这个插件（仅本次）',\n      'ignore' => '跳过这个插件（总是）',\n    ],\n    'important_action_required' => '需要选择操作',\n    'important_view_guide' => '查看升级指南',\n    'important_view_release_notes' => '查看发行说明',\n    'important_alert_text' => '有些更新需要您注意。',\n    'details_title_plugin' => '插件详情',\n    'details_title_theme' => '主题详情',\n    'details_view_homepage' => '查看主页',\n    'details_changelog' => '更新日志',\n    'details_changelog_missing' => '没有提供更新日志。',\n    'details_view_license' => '查看许可证',\n    'details_current_version' => '当前版本',\n    'details_author' => '作者',\n  ],\n  'market' => [\n    'menu_description' => '管理和安装插件和主题',\n    'content_loading' => '正在加载...',\n  ],\n  'server' => [\n    'connect_error' => '连接到服务器时出错。',\n    'response_not_found' => '找不到更新服务器。',\n    'response_invalid' => '服务器返回异常。',\n    'response_empty' => '服务器返回为空。',\n    'file_error' => '服务器下载文件失败。',\n    'file_corrupt' => '服务器下载文件校验失败。',\n  ],\n  'behavior' => [\n    'missing_property' => '类 :class 必须定义 :behavior 行为使用的属性 $:property。',\n  ],\n  'config' => [\n    'not_found' => '无法找到为 :location 定义的配置文件 :file。',\n    'required' => ':location 中使用的配置必须提供一个值\\':property\\'',\n  ],\n  'zip' => [\n    'extract_failed' => '不能解压文件 \\':file\\'。',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => '清空请求日志',\n    'empty_loading' => '清空请求日志...',\n    'empty_success' => '成功清空请求日志',\n    'return_link' => '返回请求日志',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => '系统',\n    'manage_system_settings' => '管理系统设置',\n    'manage_software_updates' => '管理软件更新',\n    'access_logs' => '查看系统日志',\n    'manage_mail_templates' => '管理邮件模板',\n    'manage_mail_settings' => '管理邮件设置',\n    'manage_other_administrators' => '管理其他管理员',\n  ],\n  'log' => [],\n  'media' => [\n    'invalid_path' => '指定的文件路径无效: \\':path\\'.',\n    'folder_size_items' => '个数',\n  ],\n  'page' => [\n    'not_found' => [\n      'label' => '找不到页面',\n      'help' => '找不到请求的页面。',\n    ],\n    'custom_error' => [\n      'label' => '页面错误',\n      'help' => '抱歉，页面因为一些错误导致无法显示。',\n    ],\n    'invalid_token' => [\n      'label' => '非法安全令牌',\n    ],\n    'maintenance' => [\n      'label' => '我们马上回来！',\n      'help' => '我们目前正在停机维护，请稍后回来查看！',\n      'message' => '通知:',\n      'available_at' => '稍后再试:',\n    ],\n  ],\n  'pagination' => [\n    'previous' => '上一页',\n    'next' => '下一页',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/zh-cn/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    \"accepted\"         => \":attribute 必须被接受。\",\n    \"active_url\"       => \":attribute 不是一个有效的URL。\",\n    \"after\"            => \":attribute 必须是 :date 之后的一个日期。\",\n    'after_or_equal'       => ':attribute 必须是等于 :date 或之后的一个日期。',\n    \"alpha\"            => \":attribute 只能包含字母。\",\n    \"alpha_dash\"       => \":attribute 只能包含字母, 数字和-。\",\n    \"alpha_num\"        => \":attribute 只能包含字母和数字。\",\n    \"array\"            => \":attribute 只能是一个数组。\",\n    \"before\"           => \":attribute 必须是 :date 之前的一个日期。\",\n    'before_or_equal'      => ':attribute 必须是等于 :date 或之前的一个日期。',\n    \"between\"          => [\n        \"numeric\" => \":attribute 在 :min - :max 之间。\",\n        \"file\"    => \":attribute 在 :min - :max kilobytes之间。\",\n        \"string\"  => \":attribute 在 :min - :max 字符之间。\",\n        \"array\"   => \":attribute 在 :min - :max 个之间。\",\n    ],\n    'boolean'              => ':attribute 字段必须为布尔型。',\n    \"confirmed\"        => \":attribute 的确认不满足。\",\n    \"date\"             => \":attribute 不是一个合法的日期。\",\n    'date_equals'          => ':attribute 必须是等于 :date 的日期。',\n    \"date_format\"      => \":attribute 不符合 :format 格式。\",\n    \"different\"        => \":attribute 和 :other 必须不同。\",\n    \"digits\"           => \":attribute 必须是 :digits。\",\n    \"digits_between\"   => \":attribute 必须在 :min :max 之间。\",\n    'dimensions'           => ':attribute 的图片尺寸无效。',\n    'distinct'             => ':attribute 字段有重复值。',\n    \"email\"            => \":attribute 格式无效。\",\n    'ends_with'            => ':attribute 必须以下列之一结束: :values。',\n    \"exists\"           => \"选中的 :attribute 无效。\",\n    'file' => ':attribute 必须是一个文件。',\n    'fill' => ':attribute 字段必须有值。',\n    'gt'                   => [\n        'numeric' => ':attribute 必须大于 :value。',\n        'file' => ':attribute 必须大于 :value 千字节。',\n        'string' => ':attribute 必须大于 :value 字符。',\n        'array' => ':attribute 必须大于:value 个。',\n    ],\n    'gte'                  => [\n        'numeric' => ':attribute 必须大于或等于:value。',\n        'file' => ':attribute 必须大于或等于 :value 千字节。',\n        'string' => ':attribute 必须大于或等于:value 字符。',\n        'array' => ':attribute 必须有 :value 个或更多。',\n    ],\n    \"image\"            => \":attribute 必须是图片。\",\n    \"in\"               => \"选中的 :attribute 无效。\",\n    'in_array' => ':other 中不存在 :attribute 字段。',\n    \"integer\"          => \":attribute 必须是数字。\",\n    \"ip\"               => \":attribute 必须是一个有效的IP地址。\",\n    'ipv4' => ':attribute 必须是一个有效的 IPv4 地址。',\n    'ipv6' => ':attribute 必须是一个有效的 IPv6 地址。',\n    'json' => ':attribute 必须是一个有效的 JSON 字符串。',\n    'lt'                   => [\n        'numeric' => ':attribute 必须小于:value。',\n        'file' => ':attribute 必须小于 :value 千字节。',\n        'string' => ':attribute 必须小于 :value 字符。',\n        'array' => ':attribute 必须小于 :value 个。',\n    ],\n    'lte'                  => [\n        'numeric' => ':attribute 必须小于或等于:value。',\n         'file' => ':attribute 必须小于或等于 :value 千字节。',\n         'string' => ':attribute 必须小于或等于:value 字符。',\n         'array' => ':attribute 不能超过 :value 个。',\n    ],\n    \"max\"              => [\n        \"numeric\" => \":attribute 不能大于 :max。\",\n        \"file\"    => \":attribute 不能大于 :max kilobytes。\",\n        \"string\"  => \":attribute 不能超过 :max 字符。\",\n        \"array\"   => \":attribute 不能超过 :max 个。\",\n    ],\n    \"mimes\"            => \":attribute 必须是一个: :values 类型的文件。\",\n    'mimetypes'            => ':attribute 必须是一个类型为 :values 的文件。',\n    \"min\"              => [\n        \"numeric\" => \":attribute 必须至少 :min。\",\n        \"file\"    => \":attribute 必须至少 :min kilobytes。\",\n        \"string\"  => \":attribute 必须至少 :min 字符。\",\n        \"array\"   => \":attribute 必须至少 :min 个。\",\n    ],\n    \"not_in\"           => \"选中的 :attribute 无效。\",\n    'not_regex'            => ':attribute 格式无效。',\n    \"numeric\"          => \":attribute 必须是一个数字。\",\n    'present'              => '必须存在 :attribute 字段。',\n    \"regex\"            => \":attribute 格式无效。\",\n    \"required\"         => \"需要 :attribute 字段。\",\n    \"required_if\"      => \"需要 :attribute 字段, 当 :other 是 :value。\",\n    'required_unless'      => 'attribute 字段是必需的，除非 :other 在 :values 中。',\n    \"required_with\"    => \"需要 :attribute 字段, 当 :values 是当前值。\",\n    'required_with_all'    => '当 :values 存在时， :attribute 字段是必需的。',\n    \"required_without\" => \"需要 :attribute 字段, 当 :values 不是当前值。\",\n    'required_without_all' => '当 :values 都不存在时， :attribute 字段是必需的。',\n    \"same\"             => \":attribute 和 :other 必须匹配。\",\n    \"size\"             => [\n        \"numeric\" => \":attribute 必须是 :size。\",\n        \"file\"    => \":attribute 必须是 :size kilobytes。\",\n        \"string\"  => \":attribute 必须是 :size 字符。\",\n        \"array\"   => \":attribute 必须是 :size 个。\",\n    ],\n    'starts_with'          => ':attribute 必须是以下之一开始: :values。',\n    'string'               => ':attribute 必须是字符串。',\n    'timezone'             => ':attribute 必须是一个有效的区域。',\n    \"unique\"           => \":attribute 已占用。\",\n    'uploaded'             => ':attribute 上传失败。',\n    \"url\"              => \":attribute 格式无效。\",\n    'uuid'                 => ':attribute 必须是有效的 UUID。',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/zh-cn.json",
    "content": "{\n  \"Check For Updates\": \"检查更新\",\n  \"Install Packages\": \"应用市场\",\n  \"Manage Themes\": \"管理主题\",\n  \"Manage Plugins\": \"管理插件\",\n  \"Project\": \"项目\",\n  \"Owner\": \"拥有者\",\n  \"Plugins\": \"插件\",\n  \"Recommended\": \"推荐\",\n  \"Disabled\": \"禁用\",\n  \"Current Build\": \"当前版本\",\n  \"Updates Available\": \"可用更新\",\n  \"Up to Date\": \"最新\",\n  \"Latest Build\": \"最新版本\",\n  \"View Changelog\": \"查看变更日志\",\n  \"Software Updates\": \"系统更新\",\n  \"Update the system modules and plugins.\": \"更新系统模块和插件。\",\n  \"General\": \"general\",\n  \"Mail\": \"邮件\",\n  \"Utilities\": \"实用程序\",\n  \"Settings\": \"设置\",\n  \"Show All Settings\": \"显示所有设置\",\n  \"Unable to find the specified settings.\": \"无法找到指定的设置。\",\n  \"The settings page is missing a Model definition.\": \"设置页面缺少模型定义。\",\n  \":name settings updated\": \":name 设置已更新\",\n  \"Return to System Settings\": \"返回系统设置\",\n  \"Search Settings...\": \"查找设置...\",\n  \"Disable mail branding CSS\": \"禁用邮件品牌 CSS\",\n  \"Manage Sites\": \"管理网站\",\n  \"Manage the websites available for this application.\": \"管理此应用程序可用的网站。\",\n  \"Marketplace\": \"应用市场\",\n  \"There is no documentation provided.\": \"没有提供文档。\",\n  \"Documentation\": \"文档\",\n  \"Upgrade Guide\": \"升级指南\",\n  \"License\": \"许可证\",\n  \"Attach to Project\": \"加入项目\",\n  \"Manage Updates\": \"管理更新\",\n  \"Software Update\": \"软件更新\",\n  \"Return to Software Updates\": \"返回系统更新\",\n  \"Try Again\": \"重试\",\n  \"Unpacking application files\": \"解压应用程序文件\",\n  \"Update Failed\": \"更新失败\",\n  \"Unpacking plugin: :name\": \"解压插件：:name\",\n  \"The primary site is used by default and cannot be deleted.\": \"默认情况下使用主站点，无法删除。\",\n  \"Disabled sites are not shown on the frontend.\": \"禁用的网站不会显示在前端。\",\n  \"Enabled in the Admin Panel\": \"在管理面板中启用\",\n  \"Configuration\": \"配置\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"如果您希望在管理面板中启用站点，请使用此选项。\",\n  \"Install\": \"安装\",\n  \"Sync Project\": \"同步项目\",\n  \"Name\": \"名字\",\n  \"Unique Code\": \"唯一代码\",\n  \"Theme\": \"主题\",\n  \"Sites\": \"网站\",\n  \"Create Site\": \"创建网站\",\n  \"Base URL\": \"主机 URL\",\n  \"Status\": \"状态\",\n  \"Current default value: :value\": \"当前默认值：:value\",\n  \"Locale\": \"语言环境\",\n  \"Timezone\": \"时区\",\n  \"Custom application URL\": \"自定义应用程序URL\",\n  \"Override the application URL when this site is active.\": \"当此站点处于活动状态时复盖应用程序URL。\",\n  \"Use a CMS route prefix\": \"使用CMS路由前缀\",\n  \"A prefix can identify this site when using a shared hostname.\": \"使用共享主机名时，前缀可以标识此站点。\",\n  \"Define matching hostnames\": \"定义匹配的主机名\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"指定必须用于服务本网站的域名和模式。\",\n  \"Display a style for this site\": \"为本网站显示样式\",\n  \"To help identify this site, display a color in the admin panel.\": \"为了帮助识别这个网站，在管理面板中显示一个颜色。\",\n  \"Save\": \"保存\",\n  \"Save and Close\": \"保存并关闭\",\n  \"Use Default\": \"使用默认值\",\n  \"Use Custom\": \"使用自定义\",\n  \"Specify a custom locale code.\": \"指定自定义区域设置代码。\",\n  \"Failed\": \"失败\",\n  \"or\": \"或\",\n  \"Code\": \"代码\",\n  \"October CMS Marketplace\": \"OctoberCMS 市场\",\n  \"Visit the :link to add some.\": \"项目没有插件或主题。访问 :link 添加一些内容。\",\n  \"Buy Now\": \"立即购买\",\n  \"Updating package manager\": \"正在更新包管理器\",\n  \"Updating application files\": \"下载应用程序文件\",\n  \"Setting build number\": \"设置版本号\",\n  \"Finishing update process\": \"完成更新过程\",\n  \"Installing plugin: :name\": \"下载插件：:name\",\n  \"Finishing installation process\": \"完成安装过程\",\n  \"Removing theme: :name\": \"移除主题：:name\",\n  \"Please specify a Theme name to install.\": \"请指定要安装的主题名称。\",\n  \"Installing theme: :name\": \"下载主题：:name\",\n  \"Extracting theme: :name\": \"提取主题 :name\",\n  \"Seeding theme: :name\": \"移除主题 :name\",\n  \"Removing plugin: :name\": \"正在删除插件：:name\",\n  \"Please specify a Plugin name to install.\": \"请指定要安装的插件名称。\",\n  \"Update process complete\": \"更新过程完成\",\n  \"Package installed successfully\": \"插件安装成功\",\n  \"Check Dependencies\": \"检查依赖项\",\n  \"Install Dependencies\": \"安装依赖项\",\n  \"There are missing dependencies needed for the system to run correctly.\": \"缺少系统正确运行所需的依赖项。\",\n  \"License Key\": \"许可证密钥\",\n  \"How to find your License Key\": \"如何查找许可证密钥\",\n  \"The password attribute is required.\": \"密码属性是必填项。\",\n  \"The login attribute is required.\": \"登录属性是必填项。\",\n  \"Cannot login user since they are not activated.\": \"无法登录用户，用户未被激活。\",\n  \"Cannot login user since they are banned.\": \"无法登录用户，用户被禁止。\",\n  \"Cannot login user since they are suspended.\": \"无法登录用户，用户被锁定。\",\n  \"A user was not found with the given credentials.\": \"找不到具有给定凭据的用户。\",\n  \"A user was found but the password did not match.\": \"找到了一个用户，但密码不匹配。\",\n  \"User is not logged in\": \"用户未登录\",\n  \"Register Software\": \"注册软件\",\n  \"View the Dashboard\": \"查看仪表板\",\n  \"Set the Default Dashboard\": \"管理默认仪表板\",\n  \"Log File\": \"日志文件\",\n  \"Sendmail\": \"发送邮件\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"SES\": \"SES\",\n  \"Postmark\": \"postmark\",\n  \"No encryption\": \"不加密\",\n  \"TLS\": \"TLS\",\n  \"Mail Configuration\": \"邮件配置\",\n  \"Manage email configuration.\": \"管理电子邮件配置。\",\n  \"Sender Name\": \"发件人姓名\",\n  \"Sender Email\": \"发件人电子邮件\",\n  \"Mail Method\": \"邮件方法\",\n  \"SMTP Address\": \"SMTP 地址\",\n  \"SMTP Port\": \"SMTP 端口\",\n  \"SMTP Encryption Protocol\": \"SMTP 加密协议\",\n  \"SMTP Authorization Required\": \"需要 SMTP 授权\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"如果您的 SMTP 服务器需要授权，请使用此复选框。\",\n  \"Username\": \"用户名\",\n  \"Password\": \"密码\",\n  \"Sendmail Path\": \"邮件发送路径\",\n  \"Please specify the path of the sendmail program.\": \"请指定邮件发送程序的路径。\",\n  \"Mailgun Domain\": \"Mailgun 域\",\n  \"Please specify the Mailgun domain name.\": \"请指定Mailgun域名。\",\n  \"Mailgun Secret\": \"Mailgun 密钥\",\n  \"Enter your Mailgun API key.\": \"输入您的 Mailgun API 密钥。\",\n  \"SES Key\": \"SES 密钥\",\n  \"Enter your SES API key\": \"输入您的 SES API 密钥\",\n  \"SES Secret\": \"SES 密钥\",\n  \"Enter your SES API secret key\": \"输入您的 SES API 密钥\",\n  \"SES Region\": \"SES 区域\",\n  \"Enter your SES region (e.g. us-east-1)\": \"输入您的 SES 区域（例如 us-east-1）\",\n  \"Postmark Token\": \"Postmark 秘密\",\n  \"Enter your Postmark API secret key\": \"输入您的 Postmark API 密钥\",\n  \"Define administrator roles\": \"设置管理员角色\",\n  \"Restrict access to this site to only administrator with the following roles.\": \"仅限管理员访问此站点，具有以下角色。\",\n  \"Group\": \"组\",\n  \"Create Group\": \"创建组\",\n  \"Site Group\": \"站点组\",\n  \"Site Groups\": \"站点群组\",\n  \"Manage Site Groups\": \"管理站点群组\",\n  \"Group Name\": \"组名称\",\n  \"All Sites\": \"所有站点\",\n  \"Manage Backend Preferences\": \"管理后端首选项\",\n  \"Manage Code Editor Preferences\": \"管理代码编辑器首选项\",\n  \"Customize Backend Styles\": \"自定义后台\",\n  \"Mail Templates\": \"邮件模板\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"修改发送给用户和管理员的邮件模板，管理电子邮件布局。\",\n  \"Mail Branding\": \"自定义邮件模板\",\n  \"Modify the colors and appearance of mail templates.\": \"修改邮件模板的颜色和外观。\",\n  \"Event Log\": \"事件日志\",\n  \"View system log messages with their recorded time and details.\": \"查看系统日志消息及其记录的时间和详细信息。\",\n  \"Request Log\": \"请求日志\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"查看错误或重定向的请求，例如找不到页面 (404)。\",\n  \"Log Settings\": \"日志设置\",\n  \"Specify which areas should use logging.\": \"指定哪些区域应该使用日志记录。\",\n  \"Test message sent.\": \"测试消息已发送。\",\n  \"New Layout\": \"新布局\",\n  \"New Partial\": \"新部件\",\n  \"New Template\": \"新模板\",\n  \"Template\": \"模板\",\n  \"Templates\": \"模板\",\n  \"Layouts\": \"布局\",\n  \"Partials\": \"部件\",\n  \"Partial\": \"部件\",\n  \"Mail Partials\": \"邮件部件\",\n  \"Layout\": \"布局\",\n  \"Mail Layouts\": \"邮件布局\",\n  \"Unique code used to refer to this template\": \"指向这个模板的唯一代码\",\n  \"-- No layout --\": \"-- 无布局--\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"纯文本\",\n  \"Disable automatic inline CSS\": \"禁用自动内联 CSS\",\n  \"Options\": \"选项\",\n  \"Subject\": \"主题\",\n  \"Email message subject\": \"电子邮件主题\",\n  \"Description\": \"描述\",\n  \"Drivers Not Installed\": \"未安装驱动程序\",\n  \"This mail method requires the plugin \\\":plugin\\\" be installed before you can send mail.\": \"此邮件方法需要安装插件 \\\":plugin\\\" 才能发送邮件。\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"事件 ID\",\n  \"Level\": \"级别\",\n  \"Date & Time\": \"日期和时间\",\n  \"Message\": \"消息\",\n  \"Logging\": \"日志\",\n  \"Log Bad Requests\": \"异常请求日志\",\n  \"Browser requests that may require attention, such as 404 errors.\": \"保存需要注意的浏览器访问日志, 例如 404 错误等。\",\n  \"Log Theme Changes\": \"主题变更日志\",\n  \"When a change is made to the theme using the backend.\": \"保存后台对主题文件的修改日志。\",\n  \"Log System Events\": \"系统日志\",\n  \"Store system events in the database in addition to the file-based log.\": \"除了基于文件的日志之外，还将系统事件存储在数据库中。\",\n  \"Background\": \"背景\",\n  \"Body background\": \"主体 背景\",\n  \"Content background\": \"内容背景\",\n  \"Inner content background\": \"内部内容背景\",\n  \"Buttons\": \"按钮\",\n  \"Button text color\": \"按钮文本颜色\",\n  \"Primary button background\": \"主要 按钮背景色\",\n  \"Positive button background\": \"正面 按钮背景色\",\n  \"Negative button background\": \"否定 按钮背景色\",\n  \"Typography\": \"排版\",\n  \"Header color\": \"顶部区域颜色\",\n  \"Headings color\": \"标题颜色\",\n  \"Text color\": \"文字颜色\",\n  \"Link color\": \"链接颜色\",\n  \"Footer color\": \"底部区域颜色\",\n  \"Borders\": \"边框\",\n  \"Body border color\": \"主体 边框颜色\",\n  \"Subcopy border color\": \"副本 边框颜色\",\n  \"Table border color\": \"表格 边框颜色\",\n  \"Components\": \"组件\",\n  \"Panel background\": \"面板 背景色\",\n  \"Promotion background\": \"推广窗 背景色\",\n  \"Promotion border color\": \"推广窗 边框颜色\",\n  \"Customize Mail Appearance\": \"自定义邮件外观\",\n  \"Version\": \"版本\",\n  \"Enabled\": \"插件启用\",\n  \"Latest\": \"最新\",\n  \"Log ID\": \"日志 ID\",\n  \"Counter\": \"计数器\",\n  \"Referers\": \"来源\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"此日志显示应用程序中发生的潜在错误列表，例如异常和调试信息。\",\n  \"Event\": \"事件\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"这个日志显示了需要注意的浏览器请求. 比如如果一个访问者打开一个没有的CMS页面, 一条返回状态404的记录被创建。\",\n  \"There were no detected referrers to this URL.\": \"没有检测到此URL的引用。\",\n  \"Request\": \"请求\",\n  \"Event log emptied\": \"事件日志已清空\",\n  \"Empty Event Log\": \"清空事件日志\",\n  \"Emptying Event Log...\": \"清空事件日志...\",\n  \"Return to Event Log\": \"返回事件日志\",\n  \"Installed\": \"已安装\",\n  \"Primary Site\": \"主站点\",\n  \"Refresh Data\": \"刷新数据\",\n  \"Remove Data\": \"\\t移除数据\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"您确定要重置选定的插件吗？ 这将重置每个插件的数据，将其恢复到初始安装状态。\",\n  \"Reset Plugin Data\": \"重置插件数据\",\n  \"Enable Plugins\": \"启用插件\",\n  \"Are you sure you want to :action these plugins?\": \"您确定要：操作这些插件吗？\",\n  \"enable\": \"启用\",\n  \"disable\": \"禁用\",\n  \"Disable Plugins\": \"禁用插件\",\n  \"Select Action...\": \"选择操作...\",\n  \"Data has been removed.\": \"数据已被删除。\",\n  \"Plugin has been removed from the file system.\": \"插件从文件系统中移除了\",\n  \"search plugins to install...\": \"搜索插件...\",\n  \"Plugin has been disabled by configuration.\": \"插件已被配置禁用。\",\n  \"Plugin has missing dependencies or disabled by system.\": \"插件缺少依赖项或被系统禁用。\",\n  \"search themes to install...\": \"搜索主题...\",\n  \"Install Theme\": \"安装主题\",\n  \"Theme Name\": \"主题名称\",\n  \"Install Plugin\": \"安装插件\",\n  \"Plugin Name\": \"插件名称\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"插件的唯一名称，例如：RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"主题的唯一名称，例如：RainLab.Vanilla\",\n  \"Select Installation Method\": \"选择安装方式\",\n  \"Make a Copy (Recommended)\": \"创建一个副本(推荐)\",\n  \"Take a copy of this theme to customize it and manually manage future updates.\": \"复制此主题以进行自定义，并手动管理将来的更新。\",\n  \"Install with Composer\": \"使用Composer安装\",\n  \"Extend the theme using a child theme to preserve future updates from the theme author.\": \"使用子主题扩展主题，以保留来自主题作者的未来更新。\",\n  \"Seed Theme Data\": \"迁移 (播种) 主题数据\",\n  \"Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\": \"导入该主题的蓝图文件、语言文件和数据库内容（如果适用）。您可以跳过此步骤，稍后在前端主题设置中执行此操作。\",\n  \"Change Status\": \"更改状态\",\n  \"Site Definitions\": \"站点设置\"\n}\n"
  },
  {
    "path": "modules/system/lang/zh-tw/client.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Client-side Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | These are messages made available to the client browser via JavaScript.\n    | To compile this file run: php artisan october:util compile lang\n    |\n    */\n\n    'markdowneditor' => [\n        'formatting' => '格式',\n        'quote' => '引用',\n        'code' => '程式碼',\n        'header1' => '標題一',\n        'header2' => '標題二',\n        'header3' => '標題三',\n        'header4' => '標題四',\n        'header5' => '標題五',\n        'header6' => '標題六',\n        'bold' => '粗體',\n        'italic' => '斜體',\n        'unorderedlist' => '項目清單',\n        'orderedlist' => '數字清單',\n        'video' => '影片',\n        'image' => '圖片',\n        'link' => '連結',\n        'horizontalrule' => '插入水平線',\n        'fullscreen' => '全螢幕',\n        'preview' => '預覽',\n    ],\n    'mediamanager' => [\n        'insert_link' => '插入媒體櫃連結',\n        'insert_image' => '插入媒體櫃圖片',\n        'insert_video' => '插入媒體櫃影片',\n        'insert_audio' => '插入媒體櫃音訊',\n        'invalid_file_empty_insert' => '請選擇檔案以插入連結。',\n        'invalid_file_single_insert' => '請選擇一個檔案。',\n        'invalid_image_empty_insert' => '請選擇插入的圖片。',\n        'invalid_video_empty_insert' => '請選擇插入的影片。',\n        'invalid_audio_empty_insert' => '請選擇插入的音訊。',\n    ],\n    'alert' => [\n        'confirm_button_text' => '確認',\n        'cancel_button_text' => '取消',\n        'widget_remove_confirm' => '確定移除此元件？',\n    ],\n    'datepicker' => [\n        'previousMonth' => '上個月',\n        'nextMonth' => '下個月',\n        'months' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n        'weekdays' => ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n        'weekdaysShort' => ['週日', '週一', '週二', '週三', '週四', '週五', '週六']\n    ],\n    'colorpicker' => [\n        'choose' => '確定',\n    ],\n    'filter' => [\n        'group' => [\n            'all' => '全部',\n        ],\n        'scopes' => [\n            'apply_button_text' => '確定',\n            'clear_button_text' => '清除',\n        ],\n        'dates' => [\n            'all' => '全部',\n            'filter_button_text' => '篩選',\n            'reset_button_text' => '重置',\n            'date_placeholder' => '日期',\n            'after_placeholder' => '在此之後',\n            'before_placeholder' => '在此之前',\n        ],\n        'numbers' => [\n            'all' => '全部',\n            'filter_button_text' => '篩選',\n            'reset_button_text' => '重置',\n            'min_placeholder' => '最小值',\n            'max_placeholder' => '最大值',\n        ],\n    ]\n];\n"
  },
  {
    "path": "modules/system/lang/zh-tw/lang.php",
    "content": "<?php return [\n  'app' => [\n    'name' => 'October CMS',\n    'tagline' => '登入',\n  ],\n  'directory' => [\n    'create_fail' => '不能建立目錄: :name',\n  ],\n  'file' => [\n    'create_fail' => '不能建立檔案: :name',\n  ],\n  'combiner' => [],\n  'system' => [\n    'name' => '系統',\n    'menu_label' => '系統',\n    'categories' => [\n      'cms' => '內容管理',\n      'misc' => '雜項',\n      'logs' => '日誌',\n      'mail' => '郵件',\n      'shop' => '商舖',\n      'team' => '團隊',\n      'users' => '使用者',\n      'system' => '系統',\n      'social' => '社交',\n      'events' => '事件',\n      'customers' => '自訂',\n      'my_settings' => '我的設定',\n    ],\n  ],\n  'theme' => [\n    'unnamed' => '未命名主題',\n    'name' => [],\n  ],\n  'themes' => [\n    'install' => '安裝主題',\n    'installed' => '已安裝主題',\n    'no_themes' => '市集上沒有已安裝的主題。',\n    'recommended' => '推薦',\n    'remove_confirm' => '您確定要刪除這些主題嗎？',\n  ],\n  'plugin' => [\n    'unnamed' => '未命名的外掛',\n    'name' => [],\n  ],\n  'plugins' => [\n    'enable_or_disable' => '啟用或停用',\n    'enable_or_disable_title' => '啟用或停用外掛',\n    'install' => '安裝外掛',\n    'install_products' => '安裝產品',\n    'installed' => '已安裝外掛',\n    'no_plugins' => '市集中沒有已安裝的外掛。',\n    'recommended' => '推薦',\n    'remove' => '移除',\n    'refresh' => '更新',\n    'disabled_label' => '停用',\n    'disabled_help' => '被停用的外掛被應用程式忽略了.',\n    'selected_amount' => '選取的外掛: :數目',\n    'remove_confirm' => '您確定嗎?',\n    'remove_success' => '成功從系統移除這些外掛.',\n    'refresh_success' => '成功更新了系統中的外掛.',\n    'disable_confirm' => '您確定嗎?',\n    'disable_success' => '成功停用了這些外掛.',\n    'enable_success' => '成功啟用了這些外掛',\n  ],\n  'project' => [\n    'attach' => '增加產品',\n    'detach' => '刪除產品',\n    'none' => '沒有',\n    'id' => [\n      'missing' => '請確認您想使用的產品ID.',\n    ],\n    'detach_confirm' => '您確定要刪除這個產品嗎?',\n    'unbind_success' => '產品刪除成功.',\n  ],\n  'settings' => [\n    'search' => '搜尋',\n  ],\n  'mail' => [\n    'smtp_ssl' => '需要SSL連接',\n  ],\n  'mail_templates' => [\n    'name_comment' => '指向這個模板的唯一名稱',\n    'test_send' => '發送測試訊息',\n    'return' => '返回模板列表',\n  ],\n  'install' => [],\n  'updates' => [\n    'plugin_author' => '作者',\n    'plugin_not_found' => 'Plugin not found',\n    'core_build' => '版本 :build',\n    'core_build_help' => '新的版本可用.',\n    'themes' => '主題',\n    'plugin_version_none' => '新外掛',\n    'theme_new_install' => '新主題安裝.',\n    'theme_extracting' => '解壓縮主題: :name',\n    'update_label' => '更新軟件',\n    'update_loading' => '加載可用更新...',\n    'force_label' => '強制更新',\n    'found' => [\n      'label' => '發現新的更新!',\n      'help' => '點選更新.',\n    ],\n    'none' => [\n      'label' => '沒有更新',\n      'help' => '沒有發現新的更新.',\n    ],\n  ],\n  'server' => [\n    'connect_error' => '連接伺服器失敗.',\n    'response_not_found' => '找不到更新伺服器.',\n    'response_invalid' => '伺服器返回異常.',\n    'response_empty' => '伺服器返回為空.',\n    'file_error' => '伺服器下載檔案失敗.',\n    'file_corrupt' => '伺服器下載檔案校驗失敗.',\n  ],\n  'behavior' => [\n    'missing_property' => 'Class :class 必須定義屬性 $:property 被 :behavior behavior 使用.',\n  ],\n  'config' => [\n    'not_found' => '不能搜尋設定檔案 :file 為 :location 定義.',\n    'required' => '設定 :location 必須有 \\':property\\'.',\n  ],\n  'zip' => [\n    'extract_failed' => '不能解壓縮檔案 \\':file\\'.',\n  ],\n  'event_log' => [],\n  'request_log' => [\n    'empty_link' => '清空請求日誌',\n    'empty_loading' => '清空請求日誌...',\n    'empty_success' => '成功清空請求日誌.',\n    'return_link' => '返回請求日誌',\n    'id' => 'ID',\n  ],\n  'permissions' => [\n    'name' => '系統',\n    'manage_system_settings' => '管理系統設定',\n    'manage_software_updates' => '管理軟件更新',\n    'access_logs' => '查看訪問日誌',\n    'manage_mail_templates' => '管理郵件模板',\n    'manage_mail_settings' => '管理郵件設定',\n    'manage_other_administrators' => '管理其他管理員',\n  ],\n  'media' => [\n    'invalid_path' => '不合法的路徑: \\':path\\'.',\n    'folder_size_items' => '個數',\n  ],\n];\n"
  },
  {
    "path": "modules/system/lang/zh-tw/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    \"accepted\"         => \":attribute 必須被接受.\",\n    \"active_url\"       => \":attribute 不是一個有效的URL.\",\n    \"after\"            => \":attribute 必須是 :date 之後的一個日期.\",\n    \"alpha\"            => \":attribute 只能包含字母.\",\n    \"alpha_dash\"       => \":attribute 只能包含字母, 數字和-.\",\n    \"alpha_num\"        => \":attribute 只能包含字母和數字.\",\n    \"array\"            => \":attribute 只能是一個陣列.\",\n    \"before\"           => \":attribute 必須是 :date 之前的一個日期.\",\n    \"between\"          => [\n        \"numeric\" => \":attribute 在 :min - :max 之間.\",\n        \"file\"    => \":attribute 在 :min - :max kilobytes之間.\",\n        \"string\"  => \":attribute 在 :min - :max 字元之間.\",\n        \"array\"   => \":attribute 在 :min - :max 個之間.\",\n    ],\n    \"confirmed\"        => \":attribute 的確認不滿足.\",\n    \"date\"             => \":attribute 不是一個合法的日期.\",\n    \"date_format\"      => \":attribute 不符合 :format 格式.\",\n    \"different\"        => \":attribute 和 :other 必須不同.\",\n    \"digits\"           => \":attribute 必須是 :digits.\",\n    \"digits_between\"   => \":attribute 必須在 :min :max 之間.\",\n    \"email\"            => \":attribute 格式無效.\",\n    \"exists\"           => \"選取的 :attribute 無效.\",\n    \"image\"            => \":attribute 必須是圖片.\",\n    \"in\"               => \"選取的 :attribute 無效.\",\n    \"integer\"          => \":attribute 必須是數字.\",\n    \"ip\"               => \":attribute 必須是一個有效的IP地址.\",\n    \"max\"              => [\n        \"numeric\" => \":attribute 不能大於 :max.\",\n        \"file\"    => \":attribute 不能大於 :max kilobytes.\",\n        \"string\"  => \":attribute 不能超過 :max 字元.\",\n        \"array\"   => \":attribute 不能超過 :max 個.\",\n    ],\n    \"mimes\"            => \":attribute 必須是一個: :values 類型的檔案.\",\n    \"min\"              => [\n        \"numeric\" => \":attribute 必須至少 :min.\",\n        \"file\"    => \":attribute 必須至少 :min kilobytes.\",\n        \"string\"  => \":attribute 必須至少 :min 字元.\",\n        \"array\"   => \":attribute 必須至少 :min 個.\",\n    ],\n    \"not_in\"           => \"選取的 :attribute 無效.\",\n    \"numeric\"          => \":attribute 必須是一個數字.\",\n    \"regex\"            => \":attribute 格式無效.\",\n    \"required\"         => \"需要 :attribute 字串.\",\n    \"required_if\"      => \"需要 :attribute 字串, 當 :other 是 :value.\",\n    \"required_with\"    => \"需要 :attribute 字串, 當 :values 是目前值.\",\n    \"required_without\" => \"需要 :attribute 字串, 當 :values 不是目前值.\",\n    \"same\"             => \":attribute 和 :other 必須相符.\",\n    \"size\"             => [\n        \"numeric\" => \":attribute 必須是 :size.\",\n        \"file\"    => \":attribute 必須是 :size kilobytes.\",\n        \"string\"  => \":attribute 必須是 :size 字元.\",\n        \"array\"   => \":attribute 必須是 :size 個.\",\n    ],\n    \"unique\"           => \":attribute 已使用.\",\n    \"url\"              => \":attribute 格式無效.\",\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "modules/system/lang/zh-tw.json",
    "content": "{\n  \"Check For Updates\": \"檢查更新\",\n  \"Install Packages\": \"安裝包\",\n  \"Manage Themes\": \"管理主題\",\n  \"Manage Plugins\": \"管理外掛\",\n  \"Project\": \"產品\",\n  \"Owner\": \"擁有者\",\n  \"Plugins\": \"外掛\",\n  \"Disabled\": \"停用\",\n  \"Current Build\": \"目前版本\",\n  \"Updates Available\": \"可用更新\",\n  \"Up to Date\": \"最新\",\n  \"Latest Build\": \"最新版本\",\n  \"View Changelog\": \"查看變更日誌\",\n  \"Software Updates\": \"更新\",\n  \"Update the system modules and plugins.\": \"更新系統, 管理並安裝外掛和主題.\",\n  \"General\": \"常規\",\n  \"Mail\": \"郵件\",\n  \"Utilities\": \"實用程序\",\n  \"Settings\": \"設定\",\n  \"Show All Settings\": \"顯示所有設置\",\n  \"Unable to find the specified settings.\": \"不能找到特定的設定.\",\n  \"The settings page is missing a Model definition.\": \"設定頁缺少Model定義.\",\n  \":name settings updated\": \":name 的設定更新成功了.\",\n  \"Return to System Settings\": \"返回系統設定\",\n  \"Search Settings...\": \"查找設置...\",\n  \"Disable mail branding CSS\": \"禁用郵件品牌 CSS\",\n  \"Manage Sites\": \"管理站點\",\n  \"Manage the websites available for this application.\": \"管理可用於此應用程序的網站。\",\n  \"Marketplace\": \"市場\",\n  \"There is no documentation provided.\": \"沒有提供任何文件。\",\n  \"Documentation\": \"文檔\",\n  \"Upgrade Guide\": \"升級指南\",\n  \"License\": \"執照\",\n  \"Attach to Project\": \"加入產品\",\n  \"Manage Updates\": \"管理更新\",\n  \"Software Update\": \"軟件更新\",\n  \"Return to Software Updates\": \"返回系統更新\",\n  \"Try Again\": \"重試\",\n  \"Unpacking application files\": \"解壓縮應用程式\",\n  \"Update Failed\": \"更新失敗\",\n  \"Unpacking plugin: :name\": \"解壓縮外掛: :name\",\n  \"The primary site is used by default and cannot be deleted.\": \"默認使用主站點，不能刪除。\",\n  \"Disabled sites are not shown on the frontend.\": \"禁用的站點不會顯示在前端。\",\n  \"Enabled in the Admin Panel\": \"在管理面板中啟用\",\n  \"Configuration\": \"配置\",\n  \"Use this if you want the site to be enabled in the admin panel.\": \"如果您希望在管理面板中啟用該站點，請使用此選項。\",\n  \"Install\": \"安裝\",\n  \"Sync Project\": \"同步項目\",\n  \"Name\": \"名字\",\n  \"Unique Code\": \"唯一代碼\",\n  \"Theme\": \"主題\",\n  \"Sites\": \"網站\",\n  \"Create Site\": \"創建站點\",\n  \"Base URL\": \"基本網址\",\n  \"Status\": \"狀態\",\n  \"Current default value: :value\": \"當前默認值：:value\",\n  \"Locale\": \"當地的\",\n  \"Timezone\": \"時區\",\n  \"Custom application URL\": \"自定義應用程序 URL\",\n  \"Override the application URL when this site is active.\": \"當此站點處於活動狀態時覆蓋應用程序 URL。\",\n  \"Use a CMS route prefix\": \"使用 CMS 路由前綴\",\n  \"A prefix can identify this site when using a shared hostname.\": \"使用共享主機名時，前綴可以標識此站點。\",\n  \"Define matching hostnames\": \"定義匹配的主機名\",\n  \"Specify domain names and patterns that must be used to serve this site.\": \"指定必須用於服務此站點的域名和模式。\",\n  \"Display a style for this site\": \"顯示此站點的樣式\",\n  \"To help identify this site, display a color in the admin panel.\": \"為了幫助識別此站點，請在管理面板中顯示一種顏色。\",\n  \"Save\": \"節省\",\n  \"Save and Close\": \"保存並關閉\",\n  \"Use Default\": \"默認情況下使用\",\n  \"Use Custom\": \"使用自定義\",\n  \"Specify a custom locale code.\": \"指定自定義語言環境代碼。\",\n  \"Failed\": \"失敗的\",\n  \"or\": \"或者\",\n  \"Code\": \"代碼\",\n  \"October CMS Marketplace\": \"十月 CMS 市場\",\n  \"Visit the :link to add some.\": \"項目沒有插件或主題。訪問 :link 添加一些內容。\",\n  \"Buy Now\": \"立即購買\",\n  \"Updating application files\": \"下載應用程式\",\n  \"Finishing update process\": \"完成更新過程\",\n  \"Installing plugin: :name\": \"下載外掛: :name\",\n  \"Finishing installation process\": \"完成安裝過程\",\n  \"Please specify a Theme name to install.\": \"請輸入要安裝的主題名稱。\",\n  \"Installing theme: :name\": \"下載主題: :name\",\n  \"Please specify a Plugin name to install.\": \"請輸入要安裝的外掛名稱。\",\n  \"Update process complete\": \"更新完成.\",\n  \"Package installed successfully\": \"外掛安裝成功。\",\n  \"View the Dashboard\": \"查看儀表板\",\n  \"Log File\": \"日誌檔案\",\n  \"Sendmail\": \"Sendmail\",\n  \"SMTP\": \"SMTP\",\n  \"Mailgun\": \"Mailgun\",\n  \"Mail Configuration\": \"郵件設定\",\n  \"Manage email configuration.\": \"管理郵件設定.\",\n  \"Sender Name\": \"發送者名稱\",\n  \"Sender Email\": \"發送者郵件\",\n  \"Mail Method\": \"郵件方法\",\n  \"SMTP Address\": \"SMTP 地址\",\n  \"SMTP Port\": \"SMTP 端口\",\n  \"SMTP Authorization Required\": \"需要 SMTP 認證\",\n  \"Use this checkbox if your SMTP server requires authorization.\": \"勾選這個多選框如果您的SMTP伺服器需要認證.\",\n  \"Username\": \"使用者名\",\n  \"Password\": \"密碼\",\n  \"Sendmail Path\": \"Sendmail 路徑\",\n  \"Please specify the path of the sendmail program.\": \"請確認 Sendmail 路徑.\",\n  \"Mailgun Domain\": \"Mailgun 域名\",\n  \"Please specify the Mailgun domain name.\": \"請確認 Mailgun 域名.\",\n  \"Mailgun Secret\": \"Mailgun Secret\",\n  \"Enter your Mailgun API key.\": \"輸入您的 Mailgun API key.\",\n  \"Customize Backend Styles\": \"自訂後台\",\n  \"Mail Templates\": \"郵件模板\",\n  \"Modify the mail templates that are sent to users and administrators, manage email layouts.\": \"編輯發送到使用者和管理員的郵件模板, 管理郵件佈局.\",\n  \"Event Log\": \"事件日誌\",\n  \"View system log messages with their recorded time and details.\": \"查看系統日誌訊息, 包括時間和詳細訊息.\",\n  \"Request Log\": \"請求日誌\",\n  \"View bad or redirected requests, such as Page not found (404).\": \"查看壞的或者重定向的請求, 比如頁面找不到(404).\",\n  \"Test message sent.\": \"測試訊息已經成功發送.\",\n  \"New Layout\": \"新佈局\",\n  \"New Template\": \"新模板\",\n  \"Template\": \"模板\",\n  \"Templates\": \"模板\",\n  \"Layouts\": \"佈局\",\n  \"Layout\": \"佈局\",\n  \"Mail Layouts\": \"郵件佈局\",\n  \"Unique code used to refer to this template\": \"指向這個模板的唯一代碼\",\n  \"HTML\": \"HTML\",\n  \"CSS\": \"CSS\",\n  \"Plaintext\": \"純文字\",\n  \"Subject\": \"標題\",\n  \"Email message subject\": \"郵箱訊息標題\",\n  \"Description\": \"描述\",\n  \"ID\": \"ID\",\n  \"Event ID\": \"事件 ID\",\n  \"Level\": \"等級\",\n  \"Date & Time\": \"時間和日期\",\n  \"Message\": \"訊息\",\n  \"Version\": \"版本\",\n  \"Log ID\": \"登錄ID\",\n  \"Counter\": \"次數\",\n  \"Referers\": \"來源\",\n  \"URL\": \"URL\",\n  \"This log displays a list of potential errors that occur in the application, such as exceptions and debugging information.\": \"日誌顯示了程序中的潛在錯誤, 比如異常和測試訊息.\",\n  \"This log displays a list of browser requests that may require attention. For example, if a visitor opens a CMS page that cannot be found, a record is created with the status code 404.\": \"這個日誌顯示了需要注意的瀏覽器請求. 比如如果一個訪問者打開一個沒有的CMS頁面, 一條返回狀態404的記錄被建立.\",\n  \"Event log emptied\": \"成功清空時間日誌.\",\n  \"Empty Event Log\": \"清空事件日誌\",\n  \"Emptying Event Log...\": \"清空事件日誌...\",\n  \"Return to Event Log\": \"返回時間日誌\",\n  \"Are you sure you want to reset the selected plugins? This will reset each plugin's data, restoring it to the initial install state.\": \"您確定嗎?\",\n  \"Plugin has been removed from the file system.\": \"外掛從檔案系統中移除了.\",\n  \"search plugins to install...\": \"搜尋外掛...\",\n  \"search themes to install...\": \"搜尋主題...\",\n  \"Install Theme\": \"安裝主題\",\n  \"Theme Name\": \"主題名稱\",\n  \"Install Plugin\": \"安裝外掛\",\n  \"Plugin Name\": \"外掛名稱\",\n  \"Name the plugin by its unique code. For example, RainLab.Blog\": \"外掛的唯一名稱，例如：RainLab.Blog\",\n  \"Name the theme by its unique code. For example, RainLab.Vanilla\": \"主題的唯一名稱，例如：RainLab.Vanilla\",\n  \"The combiner file ':name' is not found.\": \"混合檔案 ':name' 沒找到.\"\n}"
  },
  {
    "path": "modules/system/middleware/ActiveSite.php",
    "content": "<?php namespace System\\Middleware;\n\nuse Closure;\nuse Site;\nuse Url;\n\n/**\n * ActiveSite sets the active site based on the request parameters\n */\nclass ActiveSite\n{\n    /**\n     * handle an incoming request.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Closure  $next\n     * @return mixed\n     */\n    public function handle($request, Closure $next)\n    {\n        $site = Site::getSiteFromRequest($request->root(), $this->getRoutedUri($request));\n\n        if ($site && $site->is_enabled) {\n            Site::applyActiveSite($site);\n        }\n\n        return $next($request);\n    }\n\n    /**\n     * getRoutedUri\n     */\n    protected function getRoutedUri($request)\n    {\n        $rootUri = trim(parse_url(Url::to(''), PHP_URL_PATH), '/');\n        $fullUri = trim(parse_url($request->fullUrl(), PHP_URL_PATH), '/');\n\n        return $rootUri === \"\" || starts_with($fullUri, $rootUri)\n            ? trim(substr($fullUri, strlen($rootUri)), '/')\n            : $fullUri;\n    }\n}\n"
  },
  {
    "path": "modules/system/models/EventLog.php",
    "content": "<?php namespace System\\Models;\n\nuse Str;\nuse Model;\nuse System;\nuse Exception;\n\n/**\n * EventLog model for logging system errors and debug trace messages\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass EventLog extends Model\n{\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'system_event_logs';\n\n    /**\n     * @var array jsonable attribute names that are json encoded and decoded from the database\n     */\n    protected $jsonable = ['details'];\n\n    /**\n     * useLogging returns true if this logger should be used\n     */\n    public static function useLogging(): bool\n    {\n        if (defined('OCTOBER_TRACING_SQL') || defined('OCTOBER_NO_EVENT_LOGGING')) {\n            return false;\n        }\n\n        try {\n            return (\n                !defined('OCTOBER_NO_EVENT_LOGGING') &&\n                class_exists('Model') &&\n                Model::getConnectionResolver() &&\n                System::hasDatabase() &&\n                LogSetting::get('log_events')\n            );\n        }\n        catch (Exception $ex) {\n            return false;\n        }\n    }\n\n    /**\n     * add a log record\n     * @param string $message Specifies the message text\n     * @param string $level Specifies the logging level\n     * @param array $details Specifies the error details string\n     */\n    public static function add($message, $level = 'info', $details = null): EventLog\n    {\n        $record = new static;\n        $record->message = $message;\n        $record->level = $level;\n\n        if ($details !== null) {\n            $record->details = (array) $details;\n        }\n\n        try {\n            $record->save();\n        }\n        catch (Exception $ex) {\n        }\n\n        return $record;\n    }\n\n    /**\n     * getLevelAttribute will beautify the \"level\" value\n     * @param  string $level\n     * @return string\n     */\n    public function getLevelAttribute($level)\n    {\n        return ucfirst($level);\n    }\n\n    /**\n     * getSummaryAttribute creates a shorter version of the message attribute,\n     * extracts the exception message or limits by 100 characters.\n     * @return string\n     */\n    public function getSummaryAttribute()\n    {\n        if (preg_match(\"/with message '(.+)' in/\", $this->message, $match)) {\n            return $match[1];\n        }\n\n        // Get first line of message\n        preg_match('/^([^\\n\\r]+)/m', $this->message, $matches);\n\n        return Str::limit($matches[1] ?? '', 500);\n    }\n\n    /**\n     * getMessageFormattedAttribute returns the full message formatted with context data (details)\n     */\n    public function getMessageFormattedAttribute()\n    {\n        $formatted = $this->message;\n\n        if (is_array($this->details) && count($this->details) > 0) {\n            $formatted .= \"\\n\\n\" . json_encode(\n                $this->details,\n                JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_INVALID_UTF8_SUBSTITUTE | JSON_PARTIAL_OUTPUT_ON_ERROR\n            );\n        }\n\n        return $formatted;\n    }\n}\n"
  },
  {
    "path": "modules/system/models/File.php",
    "content": "<?php namespace System\\Models;\n\nuse Url;\nuse Config;\nuse Storage;\nuse Backend\\Controllers\\Files;\nuse October\\Rain\\Database\\Attach\\File as FileBase;\n\n/**\n * File attachment model\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass File extends FileBase\n{\n    /**\n     * @var string table in database used by the model\n     */\n    protected $table = 'system_files';\n\n    /**\n     * {@inheritDoc}\n     */\n    public function getThumbUrl($width, $height, $options = [])\n    {\n        if (!$this->isPublic() && class_exists(Files::class)) {\n            $options = $this->getDefaultThumbOptions($options);\n\n            // Ensure that the thumb exists first\n            parent::getThumbUrl($width, $height, $options);\n\n            // Return the Files controller handler for the URL\n            return Files::getThumbUrl($this, $width, $height, $options);\n        }\n\n        return parent::getThumbUrl($width, $height, $options);\n    }\n\n    /**\n     * {@inheritDoc}\n     */\n    public function getPath($fileName = null)\n    {\n        if (!$this->isPublic() && class_exists(Files::class)) {\n            return Files::getDownloadUrl($this);\n        }\n\n        return parent::getPath($fileName);\n    }\n\n    /**\n     * getLocalRootPath will, if working with local storage, determine the absolute local path\n     */\n    protected function getLocalRootPath()\n    {\n        return Config::get('filesystems.disks.uploads.root', storage_path('app/uploads'));\n    }\n\n    /**\n     * getPublicPath returns the public address for the storage path\n     */\n    public function getPublicPath()\n    {\n        $uploadsPath = Config::get('filesystems.disks.uploads.url', '/storage/app/uploads');\n\n        if ($this->isPublic()) {\n            $uploadsPath .= '/public';\n        }\n        else {\n            $uploadsPath .= '/protected';\n        }\n\n        // Relative links\n        if ($this->isLocalStorage() && Config::get('system.relative_links') === true) {\n            return Url::toRelative($uploadsPath) . '/';\n        }\n\n        return Url::asset($uploadsPath) . '/';\n    }\n\n    /**\n     * isLocalStorage returns true if storage.uploads.disk in config/system.php is \"local\"\n     * @return bool\n     */\n    protected function isLocalStorage()\n    {\n        return Config::get('filesystems.disks.uploads.driver') == 'local';\n    }\n\n    /**\n     * getDisk returns the storage disk the file is stored on\n     * @return FilesystemAdapter\n     */\n    public function getDisk()\n    {\n        return Storage::disk('uploads');\n    }\n}\n"
  },
  {
    "path": "modules/system/models/LogSetting.php",
    "content": "<?php namespace System\\Models;\n\nuse System\\Models\\SettingModel;\n\n/**\n * System log settings\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass LogSetting extends SettingModel\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string settingsCode\n     */\n    public $settingsCode = 'system_log_settings';\n\n    /**\n     * @var mixed settingsFields definitions\n     */\n    public $settingsFields = 'fields.yaml';\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [];\n\n    /**\n     * filterSettingItems\n     */\n    public static function filterSettingItems($manager)\n    {\n        if (!self::isConfigured()) {\n            $manager->removeSettingItem('October.System', 'request_logs');\n            $manager->removeSettingItem('October.Cms', 'theme_logs');\n            return;\n        }\n\n        if (!self::get('log_events')) {\n            $manager->removeSettingItem('October.System', 'event_logs');\n        }\n\n        if (!self::get('log_requests')) {\n            $manager->removeSettingItem('October.System', 'request_logs');\n        }\n\n        if (!self::get('log_theme')) {\n            $manager->removeSettingItem('October.Cms', 'theme_logs');\n        }\n    }\n\n    /**\n     * IinitSettingsData for this model. This only executes when the\n     * model is first created or reset to default.\n     */\n    public function initSettingsData()\n    {\n        $this->log_events = true;\n        $this->log_requests = false;\n        $this->log_theme = false;\n    }\n}\n"
  },
  {
    "path": "modules/system/models/MailBrandSetting.php",
    "content": "<?php namespace System\\Models;\n\nuse App;\nuse Str;\nuse Cache;\nuse Less_Parser;\nuse File as FileHelper;\nuse System\\Models\\SettingModel;\nuse Exception;\n\n/**\n * MailBrandSetting\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailBrandSetting extends SettingModel\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string settingsCode\n     */\n    public $settingsCode = 'system_mail_brand_settings';\n\n    /**\n     * @var mixed settingsFields definitions\n     */\n    public $settingsFields = 'fields.yaml';\n\n    /**\n     * @var string cacheKey to store rendered CSS in the cache under\n     */\n    public $cacheKey = 'system::mailbrand.custom_css';\n\n    const WHITE_COLOR = '#fff';\n    const BODY_BG = '#f5f8fa';\n    const PRIMARY_BG = '#3498db';\n    const POSITIVE_BG = '#31ac5f';\n    const NEGATIVE_BG = '#ab2a1c';\n    const HEADER_COLOR = '#bbbfc3';\n    const HEADING_COLOR = '#2f3133';\n    const TEXT_COLOR = '#74787e';\n    const LINK_COLOR = '#0181b9';\n    const FOOTER_COLOR = '#aeaeae';\n    const BORDER_COLOR = '#edeff2';\n    const SUB_BORDER_COLOR = '#e8e5ef';\n    const PROMOTION_BORDER_COLOR = '#9ba2ab';\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [\n    ];\n\n    /**\n     * initSettingsData for this model. This only executes when the\n     * model is first created or reset to default.\n     * @return void\n     */\n    public function initSettingsData()\n    {\n        $config = App::make('config');\n\n        $vars = static::getCssVars();\n\n        foreach ($vars as $var => $default) {\n            $this->{$var} = $config->get('brand.mail.'.Str::studly($var), $default);\n        }\n    }\n\n    /**\n     * clearCache\n     */\n    public function clearCache()\n    {\n        parent::clearCache();\n\n        Cache::forget($this->cacheKey);\n    }\n\n    /**\n     * @deprecated see clearCache\n     */\n    public function resetCache()\n    {\n        $this->clearCache();\n    }\n\n    /**\n     * renderCss\n     */\n    public static function renderCss()\n    {\n        $cacheKey = self::instance()->cacheKey;\n\n        if ($cache = Cache::memo()->get($cacheKey)) {\n            return $cache;\n        }\n\n        try {\n            $customCss = self::compileCss();\n            Cache::forever($cacheKey, $customCss);\n        }\n        catch (Exception $ex) {\n            $customCss = '/* ' . e($ex->getMessage()) . ' */';\n        }\n\n        return $customCss;\n    }\n\n    /**\n     * getCssVars\n     */\n    protected static function getCssVars()\n    {\n        $vars = [\n            'body_bg' => self::BODY_BG,\n            'content_bg' => self::BODY_BG,\n            'content_inner_bg' => self::WHITE_COLOR,\n            'button_text_color' => self::WHITE_COLOR,\n            'button_primary_bg' => self::PRIMARY_BG,\n            'button_positive_bg' => self::POSITIVE_BG,\n            'button_negative_bg' => self::NEGATIVE_BG,\n            'header_color' => self::HEADER_COLOR,\n            'heading_color' => self::HEADING_COLOR,\n            'text_color' => self::TEXT_COLOR,\n            'link_color' => self::LINK_COLOR,\n            'footer_color' => self::FOOTER_COLOR,\n            'body_border_color' => self::BORDER_COLOR,\n            'subcopy_border_color' => self::SUB_BORDER_COLOR,\n            'table_border_color' => self::SUB_BORDER_COLOR,\n            'panel_bg' => self::BORDER_COLOR,\n            'promotion_bg' => self::WHITE_COLOR,\n            'promotion_border_color' => self::PROMOTION_BORDER_COLOR,\n        ];\n\n        return $vars;\n    }\n\n    protected static function makeCssVars()\n    {\n        $vars = static::getCssVars();\n\n        $result = [];\n\n        foreach ($vars as $var => $default) {\n            // panel_bg -> panel-bg\n            $cssVar = str_replace('_', '-', $var);\n\n            $result[$cssVar] = self::get($var, $default);\n        }\n\n        return $result;\n    }\n\n    public static function compileCss()\n    {\n        $parser = new Less_Parser(['compress' => true]);\n        $basePath = base_path('modules/system/models/mailbrandsetting');\n\n        $parser->ModifyVars(static::makeCssVars());\n\n        $parser->parse(FileHelper::get($basePath . '/custom.less'));\n\n        return $parser->getCss();\n    }\n}\n"
  },
  {
    "path": "modules/system/models/MailLayout.php",
    "content": "<?php namespace System\\Models;\n\nuse View;\nuse Model;\nuse System\\Classes\\MailManager;\nuse October\\Rain\\Mail\\MailParser;\nuse ApplicationException;\nuse File as FileHelper;\n\n/**\n * MailLayout\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailLayout extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'system_mail_layouts';\n\n    /**\n     * @var array guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [\n        'code' => 'required|unique:system_mail_layouts',\n        'name' => 'required',\n        'content_html' => 'required',\n    ];\n\n    /**\n     * @var array jsonable attribute names that are json encoded and decoded from the database\n     */\n    protected $jsonable = [\n        'options'\n    ];\n\n    /**\n     * @var array codeCache\n     */\n    public static $codeCache;\n\n    /**\n     * beforeDelete\n     */\n    public function beforeDelete()\n    {\n        if ($this->is_locked) {\n            throw new ApplicationException('Cannot delete this template because it is locked');\n        }\n    }\n\n    /**\n     * listCodes\n     */\n    public static function listCodes()\n    {\n        if (self::$codeCache !== null) {\n            return self::$codeCache;\n        }\n\n        return self::$codeCache = self::lists('id', 'code');\n    }\n\n    /**\n     * getIdFromCode\n     */\n    public static function getIdFromCode($code)\n    {\n        return array_get(self::listCodes(), $code);\n    }\n\n    /**\n     * findOrMakeLayout\n     */\n    public static function findOrMakeLayout($code)\n    {\n        $layout = self::whereCode($code)->first();\n\n        if (!$layout && View::exists($code)) {\n            $layout = new self;\n            $layout->code = $code;\n            $layout->fillFromView($code);\n        }\n\n        return $layout;\n    }\n\n    /**\n     * createLayouts loops over each mail layout and ensures the system has a layout,\n     * if the layout does not exist, it will create one.\n     * @return void\n     */\n    public static function createLayouts()\n    {\n        $dbLayouts = self::lists('code', 'code');\n\n        $definitions = MailManager::instance()->listRegisteredLayouts();\n        foreach ($definitions as $code => $path) {\n            if (array_key_exists($code, $dbLayouts)) {\n                continue;\n            }\n\n            $layout = new static;\n            $layout->code = $code;\n            $layout->is_locked = true;\n            $layout->fillFromView($path);\n            $layout->save();\n        }\n    }\n\n    /**\n     * fillFromCode\n     */\n    public function fillFromCode($code = null)\n    {\n        $definitions = MailManager::instance()->listRegisteredLayouts();\n\n        if ($code === null) {\n            $code = $this->code;\n        }\n\n        if (!$definition = array_get($definitions, $code)) {\n            throw new ApplicationException('Unable to find a registered layout with code: '.$code);\n        }\n\n        $this->fillFromView($definition);\n    }\n\n    /**\n     * fillFromView\n     */\n    public function fillFromView($path)\n    {\n        $sections = self::getTemplateSections($path);\n\n        $defaultCss = '\n@media only screen and (max-width: 600px) {\n    .inner-body {\n        width: 100% !important;\n    }\n\n    .footer {\n        width: 100% !important;\n    }\n}\n\n@media only screen and (max-width: 500px) {\n    .button {\n        width: 100% !important;\n    }\n}\n        ';\n\n        $this->name = array_get($sections, 'settings.name', '???');\n        $this->options = array_get($sections, 'settings.options', null);\n        $this->content_css = $sections['css'] ?? $defaultCss;\n        $this->content_html =  $sections['html'] ?? '';\n        $this->content_text = $sections['text'] ?? '';\n    }\n\n    /**\n     * getTemplateSections\n     */\n    protected static function getTemplateSections($code)\n    {\n        return MailParser::parse(FileHelper::get(View::make($code)->getPath()));\n    }\n}\n"
  },
  {
    "path": "modules/system/models/MailPartial.php",
    "content": "<?php namespace System\\Models;\n\nuse View;\nuse Model;\nuse System\\Classes\\MailManager;\nuse October\\Rain\\Mail\\MailParser;\nuse ApplicationException;\nuse File as FileHelper;\nuse Exception;\n\n/**\n * Mail partial\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailPartial extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'system_mail_partials';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array Fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array Validation rules\n     */\n    public $rules = [\n        'code' => 'required|unique:system_mail_partials',\n        'name' => 'required',\n        'content_html' => 'required',\n    ];\n\n    /**\n     * afterFetch\n     */\n    public function afterFetch()\n    {\n        if (!$this->is_custom) {\n            try {\n                $this->fillFromCode();\n            }\n            catch (Exception $ex) {\n                return null;\n            }\n        }\n    }\n\n    /**\n     * findOrMakePartial\n     */\n    public static function findOrMakePartial($code)\n    {\n        try {\n            if (!$template = self::whereCode($code)->first()) {\n                $template = new self;\n                $template->code = $code;\n                $template->fillFromCode($code);\n            }\n\n            return $template;\n        }\n        catch (Exception $ex) {\n            return null;\n        }\n    }\n\n    /**\n     * createPartials loops over each mail layout and ensures the system has a layout,\n     * if the layout does not exist, it will create one.\n     * @return void\n     */\n    public static function createPartials()\n    {\n        $dbPartials = self::lists('code', 'code');\n\n        $definitions = MailManager::instance()->listRegisteredPartials();\n        foreach ($definitions as $code => $path) {\n            if (array_key_exists($code, $dbPartials)) {\n                continue;\n            }\n\n            $partial = new static;\n            $partial->code = $code;\n            $partial->is_custom = 0;\n            $partial->fillFromView($path);\n            $partial->save();\n        }\n    }\n\n    /**\n     * fillFromCode\n     */\n    public function fillFromCode($code = null)\n    {\n        $definitions = MailManager::instance()->listRegisteredPartials();\n\n        if ($code === null) {\n            $code = $this->code;\n        }\n\n        if (!$definition = array_get($definitions, $code)) {\n            throw new ApplicationException('Unable to find a registered partial with code: '.$code);\n        }\n\n        $this->fillFromView($definition);\n    }\n\n    /**\n     * fillFromView\n     */\n    public function fillFromView($path)\n    {\n        $sections = self::getTemplateSections($path);\n\n        $this->name = array_get($sections, 'settings.name', '???');\n        $this->content_html =  array_get($sections, 'html');\n        $this->content_text = array_get($sections, 'text');\n    }\n\n    /**\n     * getTemplateSections\n     */\n    protected static function getTemplateSections($code)\n    {\n        return MailParser::parse(FileHelper::get(View::make($code)->getPath()));\n    }\n}\n"
  },
  {
    "path": "modules/system/models/MailSetting.php",
    "content": "<?php namespace System\\Models;\n\nuse App;\nuse Site;\nuse Event;\nuse Config;\nuse System\\Models\\SettingModel;\n\n/**\n * MailSetting model\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailSetting extends SettingModel\n{\n    use \\October\\Rain\\Database\\Traits\\Multisite;\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    const MODE_LOG = 'log';\n    const MODE_SENDMAIL = 'sendmail';\n    const MODE_SMTP = 'smtp';\n    const MODE_MAILGUN = 'mailgun';\n    const MODE_SES = 'ses';\n    const MODE_POSTMARK = 'postmark';\n\n    /**\n     * @var string settingsCode is a unique code for these settings\n     */\n    public $settingsCode = 'system_mail_settings';\n\n    /**\n     * @var mixed settingsFields definitions\n     */\n    public $settingsFields = 'fields.yaml';\n\n    /**\n     * @var array propagatable fields\n     */\n    protected $propagatable = [\n        'sendmail_path',\n        'smtp_address',\n        'smtp_port',\n        'smtp_user',\n        'smtp_password',\n        'smtp_authorization',\n        'smtp_encryption',\n        'smtp_timeout',\n        'mailgun_domain',\n        'mailgun_secret',\n        'ses_key',\n        'ses_secret',\n        'ses_region',\n        'postmark_token',\n    ];\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [\n        'sender_name'  => 'required',\n        'sender_email' => 'required|email'\n    ];\n\n    /**\n     * initSettingsData for this model. This only executes when the\n     * model is first created or reset to default.\n     * @return void\n     */\n    public function initSettingsData()\n    {\n        $config = App::make('config');\n        $this->send_mode = $config->get('mail.default', static::MODE_LOG);\n        $this->sender_name = $config->get('mail.from.name', 'Your Site');\n        $this->sender_email = $config->get('mail.from.address', 'admin@domain.tld');\n        $this->sendmail_path = $config->get('mail.mailers.sendmail.path', '/usr/sbin/sendmail');\n        $this->smtp_address = $config->get('mail.mailers.smtp.host');\n        $this->smtp_port = $config->get('mail.mailers.smtp.port', 587);\n        $this->smtp_user = $config->get('mail.mailers.smtp.username');\n        $this->smtp_password = $config->get('mail.mailers.smtp.password');\n        $this->smtp_authorization = !!strlen($this->smtp_user);\n        $this->smtp_encryption = $config->get('mail.mailers.smtp.encryption');\n        $this->smtp_timeout = $config->get('mail.mailers.smtp.timeout', 30);\n        $this->mailgun_domain = $config->get('services.mailgun.domain');\n        $this->mailgun_secret = $config->get('services.mailgun.secret');\n        $this->ses_key = $config->get('services.ses.key');\n        $this->ses_secret = $config->get('services.ses.secret');\n        $this->ses_region = $config->get('services.ses.region');\n        $this->postmark_token = $config->get('services.postmark.secret');\n    }\n\n    /**\n     * getSendModeOptions\n     */\n    public function getSendModeOptions()\n    {\n        $options =  (array) Config::get('mail.send_mode_options', [\n            static::MODE_LOG => \"Log File\",\n            static::MODE_SENDMAIL => \"Sendmail\",\n            static::MODE_SMTP => \"SMTP\",\n            static::MODE_MAILGUN => \"Mailgun\",\n            static::MODE_SES => \"SES\",\n            static::MODE_POSTMARK => \"Postmark\",\n        ]);\n\n        /**\n         * @event system.mail.getSendModeOptions\n         * Add or remove mailer send mode options.\n         *\n         * The format of the $options variable can be found in\n         * System\\Models\\MailSetting::getSendModeOptions()\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.mail.getSendModeOptions', function(&$options) {\n         *         $options['mydriver'] = 'My Driver';\n         *     });\n         *\n         */\n        Event::fire('system.mail.getSendModeOptions', [&$options]);\n\n        return $options;\n    }\n\n    /**\n     * enableMultisiteMailer uses a just-in-time mail driver to handle mail configuration\n     * for multiple site definitions. A new driver is needed due to the Laravel internals\n     * caching most of the configuration after resolving.\n     */\n    public static function enableMultisiteMailer()\n    {\n        Event::listen('mailer.buildQueueMailable', function ($mailer, $mailable) {\n            $mailable->forceMailer('x_site_mailer_' . Site::getSiteIdFromContext());\n        });\n\n        Event::listen('mailer.beforeResolve', function ($mailer, $name) {\n            if (!str_starts_with($name, 'x_site_mailer_')) {\n                return;\n            }\n\n            // Assuming site context is applied\n            if (static::isConfigured()) {\n                static::applyConfigValues();\n            }\n\n            // Set the unique mailer just in time\n            if ($activeMailer = Config::get('mail.default')) {\n                Config::set(\"mail.mailers.{$name}\", Config::get(\"mail.mailers.{$activeMailer}\"));\n            }\n        });\n    }\n\n    /**\n     * applyConfigValues\n     */\n    public static function applyConfigValues()\n    {\n        $config = App::make('config');\n        $settings = self::instance();\n        $config->set('mail.default', $settings->send_mode);\n        $config->set('mail.from.name', $settings->sender_name);\n        $config->set('mail.from.address', $settings->sender_email);\n\n        switch ($settings->send_mode) {\n            case self::MODE_SMTP:\n                $config->set('mail.mailers.smtp.host', $settings->smtp_address);\n                $config->set('mail.mailers.smtp.port', $settings->smtp_port);\n                if ($settings->smtp_authorization) {\n                    $config->set('mail.mailers.smtp.username', $settings->smtp_user);\n                    $config->set('mail.mailers.smtp.password', $settings->smtp_password);\n                }\n                else {\n                    $config->set('mail.mailers.smtp.username', null);\n                    $config->set('mail.mailers.smtp.password', null);\n                }\n                if ($settings->smtp_encryption) {\n                    $config->set('mail.mailers.smtp.encryption', $settings->smtp_encryption);\n                }\n                else {\n                    $config->set('mail.mailers.smtp.encryption', null);\n                }\n                if ($settings->smtp_timeout) {\n                    $config->set('mail.mailers.smtp.timeout', $settings->smtp_timeout);\n                }\n                break;\n\n            case self::MODE_SENDMAIL:\n                $config->set('mail.mailers.sendmail.path', $settings->sendmail_path);\n                break;\n\n            case self::MODE_MAILGUN:\n                $config->set('services.mailgun.domain', $settings->mailgun_domain);\n                $config->set('services.mailgun.secret', $settings->mailgun_secret);\n                break;\n\n            case self::MODE_SES:\n                $config->set('services.ses.key', $settings->ses_key);\n                $config->set('services.ses.secret', $settings->ses_secret);\n                $config->set('services.ses.region', $settings->ses_region);\n                break;\n\n            case self::MODE_POSTMARK:\n                $config->set('services.postmark.token', $settings->postmark_token);\n                break;\n        }\n\n        /**\n         * @event system.mail.applyConfigValues\n         * Applies configuration values from mail settings\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.mail.applyConfigValues', function($settings) {\n         *         if ($settings->send_mode === 'mydriver') {\n         *             Config::set('services.mydriver.secret', $settings->mydriver_secret);\n         *         }\n         *     });\n         *\n         */\n        Event::fire('system.mail.applyConfigValues', [$settings]);\n    }\n\n    /**\n     * getSmtpEncryptionOptions values\n     * @return array\n     */\n    public function getSmtpEncryptionOptions()\n    {\n        return [\n            '' => \"No encryption\",\n            'tls' => \"TLS\",\n        ];\n    }\n\n    /**\n     * isMultisiteEnabled allows for programmatic toggling\n     * @return bool\n     */\n    public function isMultisiteEnabled()\n    {\n        return Site::hasFeature('backend_mail_setting');\n    }\n}\n"
  },
  {
    "path": "modules/system/models/MailTemplate.php",
    "content": "<?php namespace System\\Models;\n\nuse View;\nuse Model;\nuse System\\Classes\\MailManager;\nuse October\\Rain\\Mail\\MailParser;\nuse File as FileHelper;\n\n/**\n * MailTemplate\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailTemplate extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'system_mail_templates';\n\n    /**\n     * @var array guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [\n        'code' => 'required|unique:system_mail_templates',\n        'subject' => 'required',\n        'description' => 'required',\n        'content_html' => 'required',\n    ];\n\n    public $belongsTo = [\n        'layout' => MailLayout::class\n    ];\n\n    /**\n     * listAllTemplates returns an array of template codes and descriptions.\n     * @return array\n     */\n    public static function listAllTemplates()\n    {\n        // Only return short codes, not views\n        $fileTemplates = (array) MailManager::instance()->listRegisteredTemplates();\n        $fileTemplates = array_keys($fileTemplates);\n        $fileTemplates = array_combine($fileTemplates, $fileTemplates);\n\n        // Short codes are in the db too\n        $dbTemplates = (array) self::lists('code', 'code');\n        $templates = $fileTemplates + $dbTemplates;\n\n        // Sort and return\n        ksort($templates);\n        return $templates;\n    }\n\n    /**\n     * allTemplates returns a list of all mail templates, returns an array of\n     * MailTemplate objects.\n     */\n    public static function allTemplates(): array\n    {\n        $dbTemplates = self::all();\n        $fileReferences = (array) MailManager::instance()->listRegisteredTemplates();\n        $fileTemplates = [];\n\n        // Add missing file-based references\n        foreach ($fileReferences as $code => $view) {\n            if ($dbTemplates->where('code', $code)->count() > 0) {\n                continue;\n            }\n\n            if (View::exists($view)) {\n                $template = new self;\n                $template->code = $code;\n                $template->fillFromView($view);\n                $fileTemplates[] = $template;\n            }\n        }\n\n        if ($fileTemplates) {\n            $dbTemplates->merge($fileTemplates);\n        }\n\n        return $dbTemplates->all();\n    }\n\n    /**\n     * syncAll synchronizes all file templates to the database.\n     * @return void\n     */\n    public static function syncAll()\n    {\n        MailLayout::createLayouts();\n        MailPartial::createPartials();\n\n        $templates = MailManager::instance()->listRegisteredTemplates();\n        $dbTemplates = self::lists('is_custom', 'code');\n        $newTemplates = array_diff_key($templates, $dbTemplates);\n\n        // Clean up non-customized templates\n        foreach ($dbTemplates as $code => $isCustom) {\n            if (!$isCustom && !array_key_exists($code, $templates)) {\n                self::where('code', $code)->delete();\n            }\n        }\n\n        // Create new templates\n        foreach ($newTemplates as $code => $view) {\n            $sections = self::getTemplateSections($view);\n            $layoutCode = array_get($sections, 'settings.layout', 'default');\n            $description = array_get($sections, 'settings.description');\n\n            $template = new self;\n            $template->code = $code;\n            $template->description = $description;\n            $template->is_custom = false;\n            $template->layout_id = MailLayout::getIdFromCode($layoutCode);\n            $template->forceSave();\n        }\n    }\n\n    /**\n     * afterFetch\n     */\n    public function afterFetch()\n    {\n        if (!$this->is_custom) {\n            $viewPath = MailManager::instance()->getViewPathForTemplate($this->code);\n            $this->fillFromView($viewPath ?: $this->code);\n        }\n    }\n\n    /**\n     * fillFromContent\n     */\n    public function fillFromContent($content)\n    {\n        $this->fillFromSections(MailParser::parse($content));\n    }\n\n    /**\n     * fillFromView\n     */\n    public function fillFromView($path)\n    {\n        $this->fillFromSections(self::getTemplateSections($path));\n    }\n\n    /**\n     * fillFromSections\n     */\n    protected function fillFromSections($sections)\n    {\n        $this->content_html = $sections['html'] ?? '';\n        $this->content_text = $sections['text'] ?? '';\n        $this->subject = array_get($sections, 'settings.subject', 'No subject');\n\n        $layoutCode = array_get($sections, 'settings.layout', 'default');\n        $this->layout = MailLayout::findOrMakeLayout($layoutCode);\n    }\n\n    /**\n     * getTemplateSections\n     */\n    protected static function getTemplateSections($view)\n    {\n        return MailParser::parse(FileHelper::get(View::make($view)->getPath()));\n    }\n\n    /**\n     * findOrMakeTemplate\n     */\n    public static function findOrMakeTemplate($code)\n    {\n        $template = self::where('code', $code)->first();\n        if ($template) {\n            return $template;\n        }\n\n        $view = MailManager::instance()->getViewPathForTemplate($code) ?: $code;\n        if (View::exists($view)) {\n            $template = new self;\n            $template->code = $code;\n            $template->fillFromView($view);\n            return $template;\n        }\n\n        return null;\n    }\n\n    /**\n     * canSendTemplate\n     */\n    public static function canSendTemplate($code): bool\n    {\n        if (!$code) {\n            return false;\n        }\n\n        $view = MailManager::instance()->getViewPathForTemplate($code) ?: $code;\n        if (View::exists($view)) {\n            return true;\n        }\n\n        return self::where('code', $code)->exists();\n    }\n}\n"
  },
  {
    "path": "modules/system/models/Parameter.php",
    "content": "<?php namespace System\\Models;\n\nuse Date;\nuse Cache;\nuse System;\nuse October\\Rain\\Database\\Model;\nuse Exception;\n\n/**\n * Parameter model is used for storing internal application parameters.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Parameter extends Model\n{\n    use \\October\\Rain\\Support\\Traits\\KeyParser;\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'system_parameters';\n\n    /**\n     * @var bool timestamps enabled\n     */\n    public $timestamps = false;\n\n    /**\n     * @var array cache is an internal cache of model values.\n     */\n    protected static $cache = [];\n\n    /**\n     * @var array jsonable attribute names that are json encoded and decoded from the database\n     */\n    protected $jsonable = ['value'];\n\n    /**\n     * afterSave clears the cache after saving.\n     */\n    public function afterSave()\n    {\n        $this->clearCache();\n    }\n\n    /**\n     * get returns a setting value by the module (or plugin) name and setting name.\n     * @param string $key Specifies the setting key value, for example 'system:updates.check'\n     * @param mixed $default The default value to return if the setting doesn't exist in the DB.\n     * @return mixed Returns the setting value loaded from the database or the default value.\n     */\n    public static function get($key, $default = null)\n    {\n        if (array_key_exists($key, static::$cache)) {\n            return static::$cache[$key];\n        }\n\n        $record = static::findRecord($key);\n        if (!$record) {\n            return static::$cache[$key] = $default;\n        }\n\n        return static::$cache[$key] = $record->value;\n    }\n\n    /**\n     * getDate returns a date parameter\n     */\n    public static function getDate($key, $default = null)\n    {\n        return Date::parse(static::get($key, $default));\n    }\n\n    /**\n     * set stores a setting value to the database.\n     * @param string $key Specifies the setting key value, for example 'system:updates.check'\n     * @param mixed $value The setting value to store, serializable.\n     * @return bool\n     */\n    public static function set($key, $value = null)\n    {\n        if (is_array($key)) {\n            foreach ($key as $_key => $_value) {\n                static::set($_key, $_value);\n            }\n            return true;\n        }\n\n        $record = static::findRecord($key);\n        if (!$record) {\n            $record = new static;\n            [$namespace, $group, $item] = $record->parseKey($key);\n            $record->namespace = $namespace;\n            $record->group = $group;\n            $record->item = $item;\n        }\n\n        $record->value = $value;\n        $record->save();\n\n        static::$cache[$key] = $value;\n        return true;\n    }\n\n    /**\n     * setDate sets a date parameter\n     */\n    public static function setDate($key, $value = null)\n    {\n        if ($value === null) {\n            $value = Date::now();\n        }\n\n        return static::set($key, $value->format('Y-m-d H:i:s'));\n    }\n\n    /**\n     * reset a setting value by deleting the record.\n     * @param string $key Specifies the setting key value.\n     * @return bool\n     */\n    public function reset($key)\n    {\n        $record = static::findRecord($key);\n        if (!$record) {\n            return false;\n        }\n\n        $record->delete();\n\n        unset(static::$cache[$key]);\n        return true;\n    }\n\n    /**\n     * clearCache\n     */\n    public function clearCache()\n    {\n        Cache::forget($this->getCacheKey());\n    }\n\n    /**\n     * findRecord returns a record with cache\n     * @return self\n     */\n    public static function findRecord($key)\n    {\n        if (!System::hasDatabase()) {\n            return null;\n        }\n\n        $record = new static;\n\n        return $record\n            ->applyKey($key)\n            ->remember(5, $record->getCacheKey($key))\n            ->first()\n        ;\n    }\n\n    /**\n     * scopeApplyKey is a scope to find a setting record for the specified module\n     * (or plugin) name and setting name. Key specifies the setting key value,\n     * for example 'system:updates.check'. The default value to return if the setting\n     * doesn't exist in the DB.\n     * @param string $key\n     * @param mixed $default\n     * @return QueryBuilder\n     */\n    public function scopeApplyKey($query, $key)\n    {\n        [$namespace, $group, $item] = $this->parseKey($key);\n\n        $query = $query\n            ->where('namespace', $namespace)\n            ->where('group', $group)\n            ->where('item', $item)\n        ;\n\n        return $query;\n    }\n\n    /**\n     * getCacheKey returns a cache key for this record.\n     */\n    public function getCacheKey($key = null)\n    {\n        if ($key !== null) {\n            [$namespace, $group, $item] = $this->parseKey($key);\n\n            return implode('-', [$this->table, $namespace, $group, $item]);\n        }\n\n        return implode('-', [$this->table, $this->namespace, $this->group, $this->item]);\n    }\n\n    /**\n     * clearInternalCache of model cache values.\n     * @return void\n     */\n    public static function clearInternalCache()\n    {\n        static::$cache = [];\n    }\n\n    /**\n     * getGatewayServiceData returns system parameters used to filter\n     * gateway and marketplace package requests by the current version\n     */\n    public static function getGatewayServiceData(): array\n    {\n        $serviceData = [];\n\n        // Include time alive time\n        try {\n            if ($sinceTimestamp = self::get('system::core.since')) {\n                $serviceData['since'] = $sinceTimestamp;\n            }\n            else {\n                $serviceData['since'] = PluginVersion::orderBy('created_at')->value('created_at')\n                    ?: Date::now()->format('Y-m-d H:i:s');\n\n                self::set('system::core.since', $serviceData['since']);\n            }\n        }\n        catch (Exception $ex) {\n            $serviceData['since'] = null;\n        }\n\n        // Include birthmark hash\n        try {\n            if ($birthHash = self::get('system::core.bash')) {\n                $serviceData['bash'] = $birthHash;\n            }\n            else {\n                $serviceData['bash'] = md5($serviceData['since'] ?: Date::now()->format('Y-m-d H:i:s')) . str_random(40);\n                self::set('system::core.bash', $serviceData['bash']);\n            }\n        }\n        catch (Exception $ex) {\n            $serviceData['bash'] = '-1';\n        }\n\n        // Check project state\n        try {\n            self::set('system::project.is_stale', !Date::parse($serviceData['since'])->addDays(90)->isFuture());\n        }\n        catch (Exception $ex) {\n            self::set('system::project.is_stale', true);\n        }\n\n        return $serviceData;\n    }\n\n    /**\n     * getProjectStatus\n     */\n    public static function getProjectStatusFlag(): int\n    {\n        $flag = null;\n\n        if (self::get('system::project.is_stale')) {\n            $flag |= 32;\n        }\n\n        if (self::get('system::project.key')) {\n            $flag |= 16;\n        }\n        else {\n            $flag |= 8;\n        }\n\n        if (self::get('system::project.id')) {\n            $flag |= 4;\n        }\n\n        if (self::get('system::project.is_active')) {\n            $flag |= 2;\n        }\n        else {\n            $flag |= 1;\n        }\n\n        return $flag;\n    }\n}\n"
  },
  {
    "path": "modules/system/models/PluginSiteGroup.php",
    "content": "<?php namespace System\\Models;\n\nuse Model;\n\n/**\n * PluginSiteGroup tracks per-site and per-site-group plugin enabled/disabled state.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginSiteGroup extends Model\n{\n    /**\n     * @var string table associated with the model\n     */\n    public $table = 'system_plugin_site_groups';\n\n    /**\n     * @var bool timestamps enabled\n     */\n    public $timestamps = false;\n\n    /**\n     * @var array guarded fields\n     */\n    protected $guarded = ['*'];\n\n    /**\n     * listDisabledForSite returns plugin codes disabled for a given site\n     */\n    public static function listDisabledForSite(int $siteId): array\n    {\n        return static::where('site_id', $siteId)\n            ->where('is_enabled', 0)\n            ->pluck('plugin_code')\n            ->all();\n    }\n\n    /**\n     * listDisabledForGroup returns plugin codes disabled for a given site group\n     */\n    public static function listDisabledForGroup(int $siteGroupId): array\n    {\n        return static::where('site_group_id', $siteGroupId)\n            ->where('is_enabled', 0)\n            ->pluck('plugin_code')\n            ->all();\n    }\n\n    /**\n     * setDisabledForSite disables a plugin for a specific site\n     */\n    public static function setDisabledForSite(string $pluginCode, int $siteId): void\n    {\n        static::updateOrInsert(\n            ['plugin_code' => $pluginCode, 'site_id' => $siteId, 'site_group_id' => null],\n            ['is_enabled' => 0]\n        );\n    }\n\n    /**\n     * setEnabledForSite enables a plugin for a specific site (removes override)\n     */\n    public static function setEnabledForSite(string $pluginCode, int $siteId): void\n    {\n        static::where('plugin_code', $pluginCode)\n            ->where('site_id', $siteId)\n            ->delete();\n    }\n\n    /**\n     * setDisabledForGroup disables a plugin for a specific site group\n     */\n    public static function setDisabledForGroup(string $pluginCode, int $siteGroupId): void\n    {\n        static::updateOrInsert(\n            ['plugin_code' => $pluginCode, 'site_id' => null, 'site_group_id' => $siteGroupId],\n            ['is_enabled' => 0]\n        );\n    }\n\n    /**\n     * setEnabledForGroup enables a plugin for a specific site group (removes override)\n     */\n    public static function setEnabledForGroup(string $pluginCode, int $siteGroupId): void\n    {\n        static::where('plugin_code', $pluginCode)\n            ->where('site_group_id', $siteGroupId)\n            ->delete();\n    }\n}\n"
  },
  {
    "path": "modules/system/models/PluginVersion.php",
    "content": "<?php namespace System\\Models;\n\nuse Lang;\nuse Model;\nuse System\\Classes\\PluginManager;\n\n/**\n * PluginVersion stores information about current plugin versions.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PluginVersion extends Model\n{\n    use \\System\\Models\\PluginVersion\\HasDisabledContext;\n\n    /**\n     * @var string table associated with the model\n     */\n    public $table = 'system_plugin_versions';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = ['*'];\n\n    /**\n     * @var bool timestamps enabled\n     */\n    public $timestamps = false;\n\n    /**\n     * @var bool Plugin has been disabled by a missing dependency.\n     */\n    public $disabledBySystem = false;\n\n    /**\n     * @var bool Plugin has been disabled by the user or configuration.\n     */\n    public $disabledByConfig = false;\n\n    /**\n     * @var bool If true, plugin exists in the database but not the filesystem.\n     */\n    public $orphaned = false;\n\n    /**\n     * @var string Plugin name, sourced from plugin details\n     */\n    public $name;\n\n    /**\n     * @var string Plugin description, sourced from plugin details\n     */\n    public $description;\n\n    /**\n     * @var string Plugin author, sourced from plugin details\n     */\n    public $author;\n\n    /**\n     * @var string Plugin icon, sourced from plugin details\n     */\n    public $icon;\n\n    /**\n     * @var string Plugin homepage, sourced from plugin details\n     */\n    public $homepage;\n\n    /**\n     * The accessors to append to the model's array form.\n     * @var array\n     */\n    protected $appends = ['slug'];\n\n    /**\n     * getAttribute checks for plugin detail properties that exist outside of\n     * the model attributes, since these values are not sourced from the database.\n     */\n    public function getAttribute($key)\n    {\n        if (in_array($key, ['name', 'description', 'author', 'icon', 'homepage'])) {\n            return $this->{$key};\n        }\n\n        return parent::getAttribute($key);\n    }\n\n    /**\n     * afterFetch\n     */\n    public function afterFetch()\n    {\n        // Override the database columns with the plugin details\n        // found in the plugin registration file.\n        $manager = PluginManager::instance();\n        $pluginObj = $manager->findByIdentifier($this->code);\n\n        if (!$pluginObj) {\n            $this->name = $this->code;\n            $this->description = __(\"Plugin has been removed from the file system.\");\n            $this->orphaned = true;\n            return;\n        }\n\n        if ($pluginObj->disabled) {\n            $this->name = $this->code;\n            $this->disabledBySystem = true;\n            $this->disabledByConfig = in_array($this->code, $manager->listDisabledByConfig());\n            $this->description = $this->disabledByConfig || $this->is_disabled\n                ? __(\"Plugin has been disabled by configuration.\")\n                : __(\"Plugin has missing dependencies or disabled by system.\");\n            return;\n        }\n\n        $pluginInfo = $pluginObj->pluginDetails();\n        foreach ($pluginInfo as $attribute => $info) {\n            if (property_exists($this, $attribute)) {\n                $this->{$attribute} = Lang::get($info);\n            }\n        }\n    }\n\n    /**\n     * getIsUpdatableAttribute returns true if the plugin should be updated by the system.\n     * @return bool\n     */\n    public function getIsUpdatableAttribute()\n    {\n        return !$this->is_disabled && !$this->disabledBySystem && !$this->disabledByConfig;\n    }\n\n    /**\n     * scopeApplyEnabled to only include enabled plugins\n     * @param $query\n     * @return mixed\n     */\n    public function scopeApplyEnabled($query)\n    {\n        return $query->where('is_disabled', '!=', 1);\n    }\n\n    /**\n     * getSlugAttribute provides the slug attribute.\n     */\n    public function getSlugAttribute()\n    {\n        return self::makeSlug($this->code);\n    }\n\n    /**\n     * makeSlug generates a slug for the plugin.\n     */\n    public static function makeSlug($code)\n    {\n        return strtolower(str_replace('.', '-', $code));\n    }\n}\n"
  },
  {
    "path": "modules/system/models/RequestLog.php",
    "content": "<?php namespace System\\Models;\n\nuse App;\nuse Model;\nuse Request;\n\n/**\n * Model for logging 404 errors\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RequestLog extends Model\n{\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'system_request_logs';\n\n    /**\n     * @var array The attributes that aren't mass assignable.\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array jsonable attribute names that are json encoded and decoded from the database\n     */\n    protected $jsonable = ['referer'];\n\n    /**\n     * Creates a log record\n     * @return self\n     */\n    public static function add($statusCode = 404)\n    {\n        if (!App::hasDatabase()) {\n            return;\n        }\n\n        if (!LogSetting::get('log_requests')) {\n            return;\n        }\n\n        $record = static::firstOrNew([\n            'url' => substr(Request::fullUrl(), 0, 191),\n            'status_code' => $statusCode,\n        ]);\n\n        if ($referer = Request::header('referer')) {\n            $referers = (array) $record->referer ?: [];\n            $referers[] = $referer;\n            $record->referer = $referers;\n        }\n\n        if (!$record->exists) {\n            $record->count = 1;\n            $record->save();\n        }\n        else {\n            $record->increment('count');\n        }\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "modules/system/models/Revision.php",
    "content": "<?php namespace System\\Models;\n\nuse October\\Rain\\Database\\Models\\Revision as RevisionBase;\n\n/**\n * Revision history model\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Revision extends RevisionBase\n{\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'system_revisions';\n}\n"
  },
  {
    "path": "modules/system/models/SettingModel.php",
    "content": "<?php namespace System\\Models;\n\nuse Log;\nuse Site;\nuse Cache;\nuse System;\nuse Artisan;\nuse October\\Rain\\Database\\ExpandoModel;\nuse Exception;\n\n/**\n * SettingModel base class\n *\n * Add this the model class definition:\n *\n *     public $settingsCode = 'author_plugin_code';\n *     public $settingsFields = 'fields.yaml';\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SettingModel extends ExpandoModel\n{\n    use \\System\\Traits\\ConfigMaker;\n    use \\System\\Models\\SettingModel\\HasMultisite;\n    use \\System\\Models\\SettingModel\\HasMultisiteGroup;\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'system_settings';\n\n    /**\n     * @var bool timestamps enabled\n     */\n    public $timestamps = false;\n\n    /**\n     * @var string expandoColumn name to store the data\n     */\n    protected $expandoColumn = 'value';\n\n    /**\n     * @var array expandoPassthru attributes that should not be serialized\n     */\n    protected $expandoPassthru = ['item', 'site_id', 'site_root_id', 'site_group_id'];\n\n    /**\n     * @var array fieldConfig\n     */\n    protected $fieldConfig;\n\n    /**\n     * @var array instances is an internal cache of model objects.\n     */\n    protected static $instances = [];\n\n    /**\n     * __construct\n     */\n    public function __construct(array $attributes = [])\n    {\n        parent::__construct($attributes);\n\n        $this->bindEvent('model.beforeSave', [$this, 'settingBeforeSave']);\n        $this->bindEvent('model.afterSave', [$this, 'settingAfterSave']);\n    }\n\n    /**\n     * settingBeforeSave\n     */\n    public function settingBeforeSave()\n    {\n        $this->item = $this->settingsCode;\n    }\n\n    /**\n     * settingAfterSave, clear the cached query entry\n     * and restart queue workers so they have the latest settings\n     * @return void\n     */\n    public function settingAfterSave()\n    {\n        $this->clearCache();\n\n        try {\n            Artisan::call('queue:restart');\n        }\n        catch (Exception $e) {\n            Log::warning($e->getMessage());\n        }\n    }\n\n    /**\n     * instance of the settings model\n     */\n    public static function instance()\n    {\n        $model = new static;\n\n        $cacheKey = $model->getCacheKey();\n        if (isset(static::$instances[$cacheKey])) {\n            return static::$instances[$cacheKey];\n        }\n\n        $item = $model->getSettingsRecord();\n        if (!$item) {\n            $model->initSettingsData();\n            $model->fireEvent('model.initSettingsData');\n            $item = $model;\n        }\n\n        return static::$instances[$cacheKey] = $item;\n    }\n\n    /**\n     * isConfigured checks if the model has been set up previously\n     * @return bool\n     */\n    public static function isConfigured()\n    {\n        return (new static)->getSettingsRecord() !== null;\n    }\n\n    /**\n     * set a single or array key pair of values\n     */\n    public static function set($key, $value = null)\n    {\n        $data = is_array($key) ? $key : [$key => $value];\n\n        $obj = static::instance();\n\n        $obj->forceFill($data);\n\n        return $obj->save();\n    }\n\n    /**\n     * get helper\n     */\n    public static function get($key, $default = null)\n    {\n        return array_get(static::instance(), $key, $default);\n    }\n\n    /**\n     * initSettingsData default values to set for this model, method override\n     */\n    public function initSettingsData()\n    {\n    }\n\n    /**\n     * resetDefault, this will delete the record model\n     */\n    public function resetDefault()\n    {\n        if ($record = $this->getSettingsRecord()) {\n            $record->delete();\n        }\n\n        $this->clearCache();\n        unset(self::$instances[$this->settingsCode]);\n    }\n\n    /**\n     * clearCache\n     */\n    public function clearCache()\n    {\n        Cache::forget($this->getCacheKey());\n    }\n\n    /**\n     * getSettingsRecord returns the raw Model record that stores the settings.\n     * @return Model\n     */\n    public function getSettingsRecord()\n    {\n        if (!System::hasDatabase()) {\n            return null;\n        }\n\n        $record = $this->newQuery()\n            ->remember(1440, $this->getCacheKey())\n            ->first();\n\n        return $record ?: null;\n    }\n\n    /**\n     * newQuery applies a local scope\n     */\n    public function newQuery()\n    {\n        $query = $this->registerGlobalScopes($this->newQueryWithoutScopes());\n\n        return $query->where('item', $this->settingsCode);\n    }\n\n    /**\n     * getFieldConfig returns the field configuration used by this model.\n     */\n    public function getFieldConfig()\n    {\n        if ($this->fieldConfig !== null) {\n            return $this->fieldConfig;\n        }\n\n        return $this->fieldConfig = $this->makeConfig($this->settingsFields);\n    }\n\n    /**\n     * getCacheKey returns a cache key for this record.\n     */\n    public function getCacheKey()\n    {\n        $key = 'system::setting.' . $this->settingsCode;\n\n        if (\n            $this->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n            $this->isMultisiteEnabled()\n        ) {\n            $key .= '-' . ($this->site_id ?: Site::getSiteIdFromContext());\n        }\n        elseif (\n            $this->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteGroupInterface::class) &&\n            $this->isMultisiteGroupEnabled()\n        ) {\n            $key .= '-g' . ($this->site_group_id ?: Site::getSiteGroupIdFromContext());\n        }\n\n        return $key;\n    }\n\n    /**\n     * clearInternalCache of model instances.\n     * @return void\n     */\n    public static function clearInternalCache()\n    {\n        static::$instances = [];\n    }\n}\n"
  },
  {
    "path": "modules/system/models/SiteDefinition.php",
    "content": "<?php namespace System\\Models;\n\nuse Url;\nuse Site;\nuse Model;\nuse Cms\\Classes\\Theme;\nuse Backend\\Models\\User;\nuse Backend\\Models\\UserRole;\nuse System\\Helpers\\Preset as PresetHelper;\nuse System\\Classes\\SiteCollection;\nuse ValidationException;\n\n/**\n * SiteDefinition\n *\n * @property int $id\n * @property string $name\n * @property string $code\n * @property int $sort_order\n * @property bool $is_custom_url\n * @property string $app_url\n * @property string $theme\n * @property string $locale\n * @property string $fallback_locale\n * @property string $timezone\n * @property bool $is_host_restricted\n * @property array $allow_hosts\n * @property bool $is_prefixed\n * @property string $route_prefix\n * @property bool $is_styled\n * @property string $color_foreground\n * @property string $color_background\n * @property bool $is_role_restricted\n * @property array $allow_roles\n * @property bool $is_primary\n * @property bool $is_enabled\n * @property bool $is_enabled_edit\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SiteDefinition extends Model\n{\n    use \\System\\Models\\SiteDefinition\\HasModelAttributes;\n    use \\October\\Rain\\Database\\Traits\\Validation;\n    use \\October\\Rain\\Database\\Traits\\Sortable;\n\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'system_site_definitions';\n\n    /**\n     * @var array jsonable are json encoded attributes\n     */\n    protected $jsonable = ['allow_hosts', 'allow_roles'];\n\n    /**\n     * @var array Validation rules\n     */\n    public $rules = [\n        'code' => 'required',\n        'name' => 'required',\n    ];\n\n    /**\n     * @var array belongsTo\n     */\n    public $belongsTo = [\n        'group' => SiteGroup::class\n    ];\n\n    /**\n     * @var bool isFallbackMatch is used when a site is matched by its hostname\n     * but not by its prefix and becomes the basis for a redirect\n     */\n    public $isFallbackMatch = false;\n\n    /**\n     * @var string urlOverride\n     */\n    protected $urlOverride;\n\n    /**\n     * syncPrimarySite\n     */\n    public static function syncPrimarySite()\n    {\n        if (static::count() > 0) {\n            return;\n        }\n\n        $site = new static;\n        $site->name = 'Primary Site';\n        $site->code = 'primary';\n        $site->is_primary = true;\n        $site->is_enabled = true;\n        $site->is_enabled_edit = true;\n        $site->save();\n    }\n\n    /**\n     * makeFallbackInstance returns a non-existent record for instance where\n     * the database is unavailable.\n     */\n    public static function makeFallbackInstance()\n    {\n        $site = new SiteDefinition;\n        $site->attributes = [\n            'id' => 1,\n            'name' => 'Primary Site',\n            'code' => 'english',\n            'is_primary' => true,\n            'is_enabled' => true,\n            'is_enabled_edit' => true,\n            'group_id' => null,\n            'group' => null,\n        ];\n        $site->syncOriginal();\n        return $site;\n    }\n\n    /**\n     * beforeValidate\n     */\n    public function beforeValidate()\n    {\n        if ($this->is_custom_url && !Url::isValidUrl($this->app_url)) {\n            throw new ValidationException(['app_url' => __(\"Please specify a valid URL\")]);\n        }\n\n        if ($this->is_prefixed && (substr($this->route_prefix, 0, 1) !== '/' || $this->route_prefix === '/')) {\n            throw new ValidationException(['route_prefix' => __(\"Route prefix must start with a forward slash (/)\")]);\n        }\n\n        if ($this->is_host_restricted && !$this->isAllowHostsValid()) {\n            throw new ValidationException(['allow_hosts' => __(\"Please specify a valid hostname\")]);\n        }\n\n        $this->fallback_locale = $this->getFallbackLocale($this->locale);\n    }\n\n    /**\n     * getFallbackLocale attempts to extract the fallback language from the locale.\n     * @return string\n     */\n    protected function getFallbackLocale($locale)\n    {\n        if ($position = strpos($locale, '-')) {\n            $target = substr($locale, 0, $position);\n            $available = $this->getLocaleOptions();\n            if (isset($available[$target])) {\n                return $target;\n            }\n        }\n\n        return '';\n    }\n\n    /**\n     * beforeSave\n     */\n    public function beforeSave()\n    {\n        if (!$this->group_id) {\n            $this->group_id = SiteGroup::first()?->id;\n        }\n    }\n\n    /**\n     * afterDelete\n     */\n    public function afterDelete()\n    {\n        PluginSiteGroup::where('site_id', $this->id)->delete();\n\n        Site::resetCache();\n    }\n\n    /**\n     * afterSave\n     */\n    public function afterSave()\n    {\n        Site::resetCache();\n    }\n\n    /**\n     * getStatusNameOptions\n     */\n    public function getStatusCodeOptions()\n    {\n        return [\n            'enabled' => ['Enabled', '#85CB43'],\n            'disabled' => ['Disabled', '#bdc3c7'],\n            'editable' => ['Editable', '#e67e21'],\n        ];\n    }\n\n    /**\n     * setUrlOverride\n     */\n    public function setUrlOverride(string $url)\n    {\n        $this->urlOverride = $url;\n    }\n\n    /**\n     * getAllowHostsAsArray\n     */\n    public function getAllowHostsAsArray(): array\n    {\n        $hosts = [];\n\n        foreach ($this->allow_hosts as $info) {\n            if (isset($info['hostname'])) {\n                $hosts[] = $info['hostname'];\n            }\n        }\n\n        return $hosts;\n    }\n\n    /**\n     * isAllowHostsValid returns true if the allowable host names are valid\n     */\n    protected function isAllowHostsValid(): bool\n    {\n        foreach ($this->getAllowHostsAsArray() as $domain) {\n            if (!preg_match(\n                '/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$/',\n                str_replace('*', 'x', $domain)\n            )) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * matchesBaseUrl matches a URL with the custom app URL, if specified\n     */\n    public function matchesBaseUrl(string $url): bool\n    {\n        if (!$this->is_custom_url) {\n            return true;\n        }\n\n        // @deprecated\n        if (!str_contains($url, '://')) {\n            return $url === parse_url($this->app_url, PHP_URL_HOST);\n        }\n\n        return str_starts_with($url, rtrim($this->app_url, '/'));\n    }\n\n    /**\n     * matchesHostname\n     */\n    public function matchesHostname(string $hostname): bool\n    {\n        if (!$this->is_host_restricted) {\n            return true;\n        }\n\n        $allowHosts = array_map(function($hostPattern) {\n            return $this->applyRegexHelpersToHostname($hostPattern);\n        }, (array) $this->getAllowHostsAsArray());\n\n        foreach ($allowHosts as $pattern) {\n            if (preg_match($pattern, $hostname)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * matchesLocale\n     */\n    public function matchesLocale(string $locale): bool\n    {\n        // Micro optimization\n        if ($this->locale) {\n            return $this->locale === $locale;\n        }\n\n        return $this->hard_locale === $locale;\n    }\n\n    /**\n     * applyRegexHelpersToHostname\n     */\n    protected function applyRegexHelpersToHostname($hostPattern)\n    {\n        // Convert *.host.tld to regex equivalent\n        if (substr($hostPattern, 0, 2) === '*.') {\n            $hostPattern = '^(.+\\.)?'.preg_quote(substr($hostPattern, 2)).'$';\n        }\n        else {\n            $hostPattern = '^'.$hostPattern.'$';\n        }\n\n        return sprintf('{%s}i', $hostPattern);\n    }\n\n    /**\n     * matchesRoutePrefix\n     */\n    public function matchesRoutePrefix(string $uri): bool\n    {\n        if (!$this->is_prefixed) {\n            return true;\n        }\n\n        $uri = ltrim($uri, '/');\n        $prefix = ltrim($this->route_prefix, '/');\n\n        // Exact match\n        if ($uri === $prefix) {\n            return true;\n        }\n\n        // Starts with segment (prefix/)\n        if (str_starts_with($uri, $prefix.'/')) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * removeRoutePrefix removes the route prefix from a uri,\n     * for example en/blog → blog\n     */\n    public function removeRoutePrefix(string $url): string\n    {\n        if (!$this->is_prefixed) {\n            return $url;\n        }\n\n        $url = ltrim($url, '/');\n        $prefix = ltrim($this->route_prefix, '/');\n\n        if (substr($url, 0, strlen($prefix)) === $prefix) {\n            $url = substr($url, strlen($prefix));\n        }\n\n        return $url;\n    }\n\n    /**\n     * attachRoutePrefix\n     */\n    public function attachRoutePrefix(string $url): string\n    {\n        if (!$this->is_prefixed) {\n            return $url;\n        }\n\n        $url = ltrim($url, '/');\n\n        return trim($this->route_prefix.'/'.$url, '/');\n    }\n\n    /**\n     * getThemeOptions returns dropdown options for the active theme\n     */\n    public function getThemeOptions(): array\n    {\n        $result = [\n            '' => '- '.__('Use Default').' -',\n        ];\n\n        foreach (Theme::all() as $theme) {\n            if ($theme->isLocked()) {\n                $label = $theme->getConfigValue('name').' ('.$theme->getDirName().'*)';\n            }\n            else {\n                $label = $theme->getConfigValue('name').' ('.$theme->getDirName().')';\n            }\n\n            $result[$theme->getDirName()] = $label;\n        }\n\n        return $result;\n    }\n\n    /**\n     * getLocaleOptions returns available options for the \"locale\" attribute.\n     * @return array\n     */\n    public function getLocaleOptions()\n    {\n        return [\n            '' => '- '.__('Use Default').' -',\n        ] + PresetHelper::flags() + [\n            'custom' => '- '.__('Use Custom').' -'\n        ];\n    }\n\n    /**\n     * getShortLocaleOptions returns shortened options for the \"locale\" attribute.\n     * @return array\n     */\n    public function getShortLocaleOptions()\n    {\n        return [\n            '' => '- '.__('Use Default').' -',\n        ] + PresetHelper::flags('short') + [\n            'custom' => '- '.__('Use Custom').' -'\n        ];\n    }\n\n    /**\n     * isCustomLocale\n     */\n    public function isCustomLocale($locale)\n    {\n        if (!$locale) {\n            return false;\n        }\n\n        return !isset(PresetHelper::flags()[$locale]);\n    }\n\n    /**\n     * getTimezoneOptions returns all available timezone options.\n     * @return array\n     */\n    public function getTimezoneOptions()\n    {\n        return [\n            '' => '- '.__('Use Default').' -',\n        ] + PresetHelper::timezones();\n    }\n\n    /**\n     * getAllowRolesOptions returns available role options\n     */\n    public function getAllowRolesOptions()\n    {\n        $result = [];\n\n        foreach (UserRole::all() as $role) {\n            $result[$role->id] = $role->name;\n        }\n\n        return $result;\n    }\n\n    /**\n     * matchesRole\n     */\n    public function matchesRole(?User $user): bool\n    {\n        if (!$this->is_role_restricted) {\n            return true;\n        }\n\n        if ($user && $user->is_superuser) {\n            return true;\n        }\n\n        if (!$user || !$user->role_id) {\n            return false;\n        }\n\n        foreach ((array) $this->allow_roles as $roleId) {\n            if ((int) $user->role_id === (int) $roleId) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * newCollection instance.\n     * @return \\System\\Classes\\SiteCollection\n     */\n    public function newCollection(array $models = [])\n    {\n        return new SiteCollection($models);\n    }\n}\n"
  },
  {
    "path": "modules/system/models/SiteGroup.php",
    "content": "<?php namespace System\\Models;\n\nuse Site;\nuse Model;\nuse ValidationException;\n\n/**\n * SiteGroup\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SiteGroup extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'system_site_groups';\n\n    /**\n     * @var array Validation rules\n     */\n    public $rules = [\n        'code' => 'required',\n        'name' => 'required',\n    ];\n\n    /**\n     * @var array hasMany\n     */\n    public $hasMany = [\n        'sites' => [SiteDefinition::class, 'key' => 'group_id'],\n    ];\n\n    /**\n     * isConfigured returns true if a group has been configured\n     */\n    public static function isConfigured()\n    {\n        return static::count() > 1;\n    }\n\n    /**\n     * syncDefaultGroup ensures a default site group exists so site_group_id is never null.\n     * The afterCreate hook will auto-adopt any orphaned sites.\n     */\n    public static function syncDefaultGroup()\n    {\n        if (static::count() > 0) {\n            return;\n        }\n\n        static::create([\n            'name' => 'Default',\n            'code' => 'default',\n        ]);\n    }\n\n    /**\n     * beforeDelete\n     */\n    public function beforeDelete()\n    {\n        if (($count = $this->sites()->count()) > 0) {\n            throw new ValidationException(['name' => __(\"Unable to delete site group because it is being used by existing site definitions (:count).\", ['count' => $count])]);\n        }\n    }\n\n    /**\n     * afterDelete\n     */\n    public function afterDelete()\n    {\n        PluginSiteGroup::where('site_group_id', $this->id)->delete();\n\n        Site::resetCache();\n    }\n\n    /**\n     * afterSave\n     */\n    public function afterSave()\n    {\n        Site::resetCache();\n    }\n}\n"
  },
  {
    "path": "modules/system/models/TranslateAttribute.php",
    "content": "<?php namespace System\\Models;\n\nuse October\\Rain\\Database\\Models\\TranslateAttribute as TranslateAttributeBase;\n\n/**\n * TranslateAttribute model for system translations\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass TranslateAttribute extends TranslateAttributeBase\n{\n    /**\n     * @var string table associated with the model\n     */\n    public $table = 'system_translate_attributes';\n}\n"
  },
  {
    "path": "modules/system/models/eventlog/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    id:\n        label: \"ID\"\n        searchable: true\n        width: 75px\n\n    created_at:\n        label: \"Date & Time\"\n        searchable: true\n        width: 160px\n        type: timetense\n\n    message:\n        label: \"Message\"\n        searchable: true\n        type: partial\n        path: message_column\n        cssClass: column-break-word\n"
  },
  {
    "path": "modules/system/models/eventlog/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    message_formatted:\n        type: partial\n        path: field_message\n        containerAttributes:\n            data-control: exception-beautifier\n"
  },
  {
    "path": "modules/system/models/eventlog/scopes.yaml",
    "content": "# ===================================\n# Filter Scope Definitions\n# ===================================\n\nscopes:\n    created_at:\n        label: Date & Time\n        type: daterange\n        conditions: created_at >= ':after' AND created_at <= ':before'\n"
  },
  {
    "path": "modules/system/models/file/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    title:\n        type: text\n        placeholder: Title\n        span: full\n    description:\n        type: textarea\n        placeholder: Description\n        span: full\n        size: tiny\n"
  },
  {
    "path": "modules/system/models/logsetting/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    defaultTab: \"Logging\"\n    fields:\n        log_requests:\n            label: \"Log Bad Requests\"\n            span: auto\n            type: switch\n            comment: \"Browser requests that may require attention, such as 404 errors.\"\n\n        log_theme:\n            label: \"Log Theme Changes\"\n            span: auto\n            type: switch\n            comment: \"When a change is made to the theme using the backend.\"\n\n        log_events:\n            label: \"Log System Events\"\n            span: auto\n            type: switch\n            comment: \"Store system events in the database in addition to the file-based log.\"\n"
  },
  {
    "path": "modules/system/models/mailbrandsetting/custom.less",
    "content": "/* Base */\n\nbody,\nbody *:not(html):not(style):not(br):not(tr):not(code) {\n    box-sizing: border-box;\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,\n        'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n    position: relative;\n}\n\nbody {\n    -webkit-text-size-adjust: none;\n    background-color: @body-bg;\n    color: @text-color;\n    height: 100%;\n    line-height: 1.4;\n    margin: 0;\n    padding: 0;\n    width: 100% !important;\n}\n\np,\nul,\nol,\nblockquote {\n    line-height: 1.4;\n    text-align: left;\n}\n\na {\n    color: @link-color;\n}\n\na img {\n    border: none;\n}\n\n/* Typography */\n\nh1 {\n    color: @heading-color;\n    font-size: 18px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\nh2 {\n    color: @heading-color;\n    font-size: 16px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\nh3 {\n    color: @heading-color;\n    font-size: 14px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\np {\n    color: @text-color;\n    font-size: 16px;\n    line-height: 1.5em;\n    margin-top: 0;\n    text-align: left;\n}\n\ncode {\n    color: @text-color;\n    font-size: 16px;\n    line-height: 1.5em;\n    word-break: break-all;\n}\n\np.sub {\n    font-size: 12px;\n}\n\nimg {\n    max-width: 100%;\n}\n\n/* Layout */\n\n.wrapper {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    background-color: @body-bg;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n}\n\n.content {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n}\n\n/* Header */\n\n.header {\n    padding: 25px 0;\n    text-align: center;\n}\n\n.header a, .header span {\n    color: @header-color;\n    font-size: 19px;\n    font-weight: bold;\n    text-decoration: none;\n}\n\n/* Body */\n\n.body {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    background-color: @content-bg;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n}\n\n.inner-body {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 570px;\n    background-color: @content-inner-bg;\n    border: 1px solid @body-border-color;\n    border-radius: 2px;\n    box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015);\n    margin: 0 auto;\n    padding: 0;\n    width: 570px;\n\n}\n\n/* Subcopy */\n\n.subcopy {\n    border-top: 1px solid @subcopy-border-color;\n    margin-top: 25px;\n    padding-top: 25px;\n}\n\n.subcopy p {\n    font-size: 14px;\n}\n\n/* Footer */\n\n.footer {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 570px;\n    margin: 0 auto;\n    padding: 0;\n    text-align: center;\n    width: 570px;\n}\n\n.footer p {\n    color: @footer-color;\n    font-size: 12px;\n    text-align: center;\n}\n\n/* Tables */\n\n.table table {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    margin: 30px auto;\n    width: 100%;\n}\n\n.table th {\n    border-bottom: 1px solid @table-border-color;\n    margin: 0;\n    padding-bottom: 8px;\n}\n\n.table td {\n    color: @text-color;\n    font-size: 15px;\n    line-height: 18px;\n    margin: 0;\n    padding: 10px 0;\n}\n\n.content-cell {\n    max-width: 100vw;\n    padding: 32px;\n}\n\n.wrapper.layout-system .content-cell {\n    padding: 35px 0;\n}\n\n/* Buttons */\n\n.action {\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n    margin: 30px auto;\n    padding: 0;\n    text-align: center;\n    width: 100%;\n}\n\n.button {\n    -webkit-text-size-adjust: none;\n    border-radius: 4px;\n    color: @button-text-color;\n    display: inline-block;\n    overflow: hidden;\n    text-decoration: none;\n}\n\n.button-primary {\n    background-color: @button-primary-bg;\n    border-top: 8px solid @button-primary-bg;\n    border-right: 18px solid @button-primary-bg;\n    border-bottom: 8px solid @button-primary-bg;\n    border-left: 18px solid @button-primary-bg;\n}\n\n.button-positive {\n    background-color: @button-positive-bg;\n    border-top: 8px solid @button-positive-bg;\n    border-right: 18px solid @button-positive-bg;\n    border-bottom: 8px solid @button-positive-bg;\n    border-left: 18px solid @button-positive-bg;\n}\n\n.button-negative {\n    background-color: @button-negative-bg;\n    border-top: 8px solid @button-negative-bg;\n    border-right: 18px solid @button-negative-bg;\n    border-bottom: 8px solid @button-negative-bg;\n    border-left: 18px solid @button-negative-bg;\n}\n\n/* Panels */\n\n.panel {\n    margin: 0 0 21px;\n}\n\n.panel-content {\n    background-color: @panel-bg;\n    padding: 16px;\n}\n\n.panel-item {\n    padding: 0;\n}\n\n.panel-item p:last-of-type {\n    margin-bottom: 0;\n    padding-bottom: 0;\n}\n\n/* Promotions */\n\n.promotion {\n    background-color: @promotion-bg;\n    border: 2px dashed @promotion-border-color;\n    margin: 0;\n    margin-bottom: 25px;\n    margin-top: 25px;\n    padding: 24px;\n    width: 100%;\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n}\n\n.promotion h1 {\n    text-align: center;\n}\n\n.promotion p {\n    font-size: 15px;\n    text-align: center;\n}\n\n.promotion p:last-of-type {\n    margin-bottom: 0;\n    padding-bottom: 0;\n}\n\n/* Utilities */\n\n.break-all {\n    word-break: break-all;\n}\n"
  },
  {
    "path": "modules/system/models/mailbrandsetting/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    _mail_preview:\n        type: partial\n        path: field_mail_preview\n\nsecondaryTabs:\n    fields:\n        _section_background:\n            label: Background\n            type: section\n\n        body_bg:\n            label: Body background\n            type: colorpicker\n            availableColors: []\n\n        content_bg:\n            label: Content background\n            type: colorpicker\n            availableColors: []\n\n        content_inner_bg:\n            label: Inner content background\n            type: colorpicker\n            availableColors: []\n\n        _section_buttons:\n            label: Buttons\n            type: section\n\n        button_text_color:\n            label: Button text color\n            type: colorpicker\n            availableColors: []\n\n        button_primary_bg:\n            label: Primary button background\n            type: colorpicker\n            availableColors: []\n\n        button_positive_bg:\n            label: Positive button background\n            type: colorpicker\n            availableColors: []\n\n        button_negative_bg:\n            label: Negative button background\n            type: colorpicker\n            availableColors: []\n\n        _section_type:\n            label: Typography\n            type: section\n\n        header_color:\n            label: Header color\n            type: colorpicker\n            availableColors: []\n\n        heading_color:\n            label: Headings color\n            type: colorpicker\n            availableColors: []\n\n        text_color:\n            label: Text color\n            type: colorpicker\n            availableColors: []\n\n        link_color:\n            label: Link color\n            type: colorpicker\n            availableColors: []\n\n        footer_color:\n            label: Footer color\n            type: colorpicker\n            availableColors: []\n\n        _section_borders:\n            label: Borders\n            type: section\n\n        body_border_color:\n            label: Body border color\n            type: colorpicker\n            availableColors: []\n\n        subcopy_border_color:\n            label: Subcopy border color\n            type: colorpicker\n            availableColors: []\n\n        table_border_color:\n            label: Table border color\n            type: colorpicker\n            availableColors: []\n\n        _section_components:\n            label: Components\n            type: section\n\n        panel_bg:\n            label: Panel background\n            type: colorpicker\n            availableColors: []\n\n        promotion_bg:\n            label: Promotion background\n            type: colorpicker\n            availableColors: []\n\n        promotion_border_color:\n            label: Promotion border color\n            type: colorpicker\n            availableColors: []\n"
  },
  {
    "path": "modules/system/models/mailbrandsetting/sample_template.htm",
    "content": "# {{texts.heading}} 1\n\n{{texts.paragraph|raw}}\n\n## {{texts.heading}} 2\n\n{% partial 'table' body %}\n| {{texts.table.item}}          | {{texts.table.description}}   | {{texts.table.price}}    |\n|:------------- |:-------------:| --------:|\n| {{texts.table.item}} 1        | {{texts.table.centered}}      | $10      |\n| {{texts.table.item}} 2        | {{texts.table.right_aligned}} | $20      |\n{% endpartial %}\n\n### {{texts.heading}} 3\n\n{{texts.paragraph|raw}}\n\n{% partial 'button' url='javascript:;' body %}\n{{texts.buttons.primary}}\n{% endpartial %}\n\n{% partial 'button' type='positive' url='javascript:;' body %}\n{{texts.buttons.positive}}\n{% endpartial %}\n\n{% partial 'button' type='negative' url='javascript:;' body %}\n{{texts.buttons.negative}}\n{% endpartial %}\n\n{% partial 'panel' body %}\n{{texts.panel}}\n{% endpartial %}\n\n{{texts.more}}\n\n{% partial 'promotion' body %}\n{{texts.promotion}}\n{% endpartial %}\n\n{{texts.thanks}},\n{{ appName }}\n\n{% partial 'subcopy' body %}\n{{texts.subcopy}}\n{% endpartial %}\n"
  },
  {
    "path": "modules/system/models/maillayout/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    name:\n        label: \"Name\"\n        searchable: true\n\n    code:\n        label: \"Code\"\n        searchable: true\n"
  },
  {
    "path": "modules/system/models/maillayout/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    code:\n        label: \"Code\"\n        comment: \"Unique code used to refer to this template\"\n        span: left\n        context: create\n\n    name@create:\n        label: \"Name\"\n        span: right\n\n    name@update:\n        label: \"Name\"\n\nsecondaryTabs:\n    fields:\n        content_html:\n            type: codeeditor\n            size: giant\n            tab: \"HTML\"\n            language: html\n            stretch: true\n\n        content_css:\n            type: codeeditor\n            size: giant\n            tab: \"CSS\"\n            language: css\n            stretch: true\n\n        content_text:\n            type: textarea\n            size: giant\n            tab: \"Plaintext\"\n            stretch: true\n\n        options[disable_auto_inline_css]:\n            label: \"Disable automatic inline CSS\"\n            type: checkbox\n            tab: \"Options\"\n            default: false\n\n        options[disable_brand_css]:\n            label: Disable mail branding CSS\n            type: checkbox\n            tab: \"Options\"\n            default: false\n"
  },
  {
    "path": "modules/system/models/mailpartial/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    name:\n        label: \"Name\"\n        searchable: true\n\n    code:\n        label: \"Code\"\n        searchable: true\n"
  },
  {
    "path": "modules/system/models/mailpartial/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    code:\n        label: \"Code\"\n        comment: \"Unique code used to refer to this template\"\n        span: left\n        context: create\n\n    name@create:\n        label: \"Name\"\n        span: right\n\n    name@update:\n        label: \"Name\"\n\nsecondaryTabs:\n    fields:\n        content_html:\n            type: codeeditor\n            size: giant\n            tab: \"HTML\"\n            language: html\n            stretch: true\n\n        content_text:\n            type: textarea\n            size: giant\n            tab: \"Plaintext\"\n            stretch: true\n"
  },
  {
    "path": "modules/system/models/mailsetting/_drivers_hint.php",
    "content": "<?php\n$showHint = true;\n\nif (System\\Classes\\PluginManager::instance()->hasPlugin('October.Drivers')) {\n    $showHint = false;\n}\nelse {\n    $composer = \\October\\Rain\\Composer\\ComposerManager::instance();\n    if (\n        $composer->hasPackage('aws-sdk-php') ||\n        $composer->hasPackage('symfony/mailgun-mailer') ||\n        $composer->hasPackage('symfony/postmark-mailer')\n    ) {\n        $showHint = false;\n    }\n}\n?>\n<?php if ($showHint): ?>\n    <div class=\"callout callout-warning show in no-subheader\">\n        <div class=\"header\">\n            <i class=\"icon-exclamation-circle\"></i>\n            <h3><?= __(\"Drivers Not Installed\") ?></h3>\n        </div>\n        <div class=\"content\">\n            <p><?= e(__(\"This mail method requires the plugin ':plugin' be installed before you can send mail.\", ['plugin' => 'October.Drivers'])) ?></p>\n        </div>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/models/mailsetting/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    fields:\n\n        sender_name:\n            label: Sender Name\n            span: auto\n            tab: General\n\n        sender_email:\n            label: Sender Email\n            span: auto\n            type: email\n            tab: General\n\n        send_mode:\n            label: Mail Method\n            type: dropdown\n            tab: General\n\n        drivers_hint:\n            type: partial\n            path: ~/modules/system/models/mailsetting/_drivers_hint.php\n            tab: General\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[ses][mailgun][postmark]\n\n        smtp_address:\n            label: SMTP Address\n            tab: General\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[smtp]\n\n        smtp_port:\n            label: SMTP Port\n            tab: General\n            span: auto\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[smtp]\n\n        smtp_encryption:\n            type: dropdown\n            label: SMTP Encryption Protocol\n            tab: General\n            span: auto\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[smtp]\n\n        smtp_timeout:\n            label: SMTP Timeout\n            type: number\n            comment: \"Connection timeout in seconds (default: 30)\"\n            tab: General\n            span: auto\n            default: 30\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[smtp]\n\n        smtp_authorization:\n            type: checkbox\n            label: SMTP Authorization Required\n            tab: General\n            comment: Use this checkbox if your SMTP server requires authorization.\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[smtp]\n\n        smtp_user:\n            label: Username\n            tab: General\n            span: left\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[smtp]\n\n        smtp_password:\n            label: Password\n            tab: General\n            type: sensitive\n            span: right\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[smtp]\n\n        sendmail_path:\n            label: Sendmail Path\n            commentAbove: Please specify the path of the sendmail program.\n            tab: General\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[sendmail]\n\n        mailgun_domain:\n            label: Mailgun Domain\n            commentAbove: Please specify the Mailgun domain name.\n            tab: General\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[mailgun]\n\n        mailgun_secret:\n            label: Mailgun Secret\n            commentAbove: Enter your Mailgun API key.\n            tab: General\n            type: sensitive\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[mailgun]\n\n        ses_key:\n            label: SES Key\n            commentAbove: Enter your SES API key\n            tab: General\n            span: left\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[ses]\n\n        ses_secret:\n            label: SES Secret\n            commentAbove: Enter your SES API secret key\n            tab: General\n            type: sensitive\n            span: right\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[ses]\n\n        ses_region:\n            label: SES Region\n            commentAbove: Enter your SES region (e.g. us-east-1)\n            tab: General\n            span: left\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[ses]\n\n        postmark_token:\n            label: Postmark Token\n            commentAbove: Enter your Postmark API secret key\n            type: sensitive\n            tab: General\n            trigger:\n                action: show\n                field: send_mode\n                condition: value[postmark]\n"
  },
  {
    "path": "modules/system/models/mailtemplate/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    code:\n        label: \"Code\"\n        searchable: true\n\n    subject:\n        label: \"Subject\"\n        searchable: true\n\n    description:\n        label: \"Description\"\n        searchable: true\n\n    layout:\n        label: \"Layout\"\n        relation: layout\n        select: name\n        sortable: false"
  },
  {
    "path": "modules/system/models/mailtemplate/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    layout:\n        label: \"Layout\"\n        type: relation\n        emptyOption: \"-- No layout --\"\n\n    code:\n        label: \"Code\"\n        comment: \"Unique code used to refer to this template\"\n        span: left\n        context: create\n\n    subject@create:\n        label: \"Subject\"\n        comment: \"Email message subject\"\n        span: right\n\n    subject@update:\n        label: \"Subject\"\n\n    description:\n        label: \"Description\"\n        type: textarea\n        size: tiny\n\nsecondaryTabs:\n    fields:\n        content_html:\n            type: markdown\n            size: giant\n            tab: \"HTML\"\n            safe: true\n            stretch: true\n\n        content_text:\n            type: textarea\n            size: giant\n            tab: \"Plaintext\"\n            stretch: true\n"
  },
  {
    "path": "modules/system/models/pluginversion/HasDisabledContext.php",
    "content": "<?php namespace System\\Models\\PluginVersion;\n\nuse Site;\nuse System\\Models\\PluginSiteGroup;\nuse System\\Classes\\PluginManager;\n\n/**\n * HasDisabledContext adds per-site and per-site-group disabled state\n * to the PluginVersion model, providing a unified interface for checking\n * and toggling the disabled state based on the current site context.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasDisabledContext\n{\n    /**\n     * @var array|null contextDisabledCodes is a cached list of disabled plugin codes\n     * for the current site context. Shared across all instances per request.\n     */\n    protected static $contextDisabledCodes;\n\n    /**\n     * getContextDisabledAttribute returns true if the plugin is disabled, considering\n     * the current site context. Falls back to global is_disabled when no context.\n     */\n    public function getContextDisabledAttribute()\n    {\n        $codes = static::listContextDisabledCodes();\n\n        if ($codes === null) {\n            return (bool) $this->is_disabled;\n        }\n\n        return in_array($this->code, $codes);\n    }\n\n    /**\n     * setContextDisabled disables this plugin for the current site context,\n     * or globally if no site context is active.\n     */\n    public function setContextDisabled()\n    {\n        $context = static::getPluginSiteContext();\n\n        if ($context) {\n            if ($context['type'] === 'site') {\n                PluginSiteGroup::setDisabledForSite($this->code, $context['id']);\n            }\n            else {\n                PluginSiteGroup::setDisabledForGroup($this->code, $context['id']);\n            }\n\n            // Clear global disable if it was set before per-site features were enabled\n            if ($this->is_disabled) {\n                $this->is_disabled = 0;\n                $this->save();\n            }\n        }\n        else {\n            $this->is_disabled = 1;\n            $this->save();\n            PluginManager::instance()->disablePlugin($this->code, true);\n        }\n    }\n\n    /**\n     * setContextEnabled enables this plugin for the current site context,\n     * or globally if no site context is active.\n     */\n    public function setContextEnabled()\n    {\n        $context = static::getPluginSiteContext();\n\n        if ($context) {\n            if ($context['type'] === 'site') {\n                PluginSiteGroup::setEnabledForSite($this->code, $context['id']);\n            }\n            else {\n                PluginSiteGroup::setEnabledForGroup($this->code, $context['id']);\n            }\n\n            // Clear global disable if it was set before per-site features were enabled\n            if ($this->is_disabled) {\n                $this->is_disabled = 0;\n                $this->save();\n            }\n        }\n        else {\n            $this->is_disabled = 0;\n            $this->save();\n            PluginManager::instance()->enablePlugin($this->code, true);\n        }\n    }\n\n    /**\n     * listContextDisabledCodes returns the list of plugin codes disabled for\n     * the current site context, or null if no site context is active.\n     */\n    protected static function listContextDisabledCodes(): ?array\n    {\n        if (static::$contextDisabledCodes !== null) {\n            return static::$contextDisabledCodes;\n        }\n\n        $context = static::getPluginSiteContext();\n\n        if (!$context) {\n            return static::$contextDisabledCodes = null;\n        }\n\n        return static::$contextDisabledCodes = $context['type'] === 'site'\n            ? PluginSiteGroup::listDisabledForSite($context['id'])\n            : PluginSiteGroup::listDisabledForGroup($context['id']);\n    }\n\n    /**\n     * getPluginSiteContext returns the active site or site group context\n     * for per-site plugin filtering, or null if the feature is not active.\n     */\n    public static function getPluginSiteContext(): ?array\n    {\n        if (Site::hasFeature('system_plugin_sites')) {\n            if ($siteId = Site::getSiteIdFromContext()) {\n                return ['type' => 'site', 'id' => $siteId];\n            }\n        }\n        elseif (Site::hasFeature('system_plugin_site_groups')) {\n            if ($siteGroupId = Site::getSiteGroupIdFromContext()) {\n                return ['type' => 'group', 'id' => $siteGroupId];\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * resetContextDisabledCache clears the cached context disabled codes\n     * so they are re-fetched on the next access.\n     */\n    public static function resetContextDisabledCache()\n    {\n        static::$contextDisabledCodes = null;\n    }\n}\n"
  },
  {
    "path": "modules/system/models/pluginversion/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    name:\n        label: Name\n        sortable: false\n\n    description:\n        label: Description\n        sortable: false\n\n    version:\n        label: Version\n        sortable: false\n        type: partial\n        path: column_version\n\n    latest:\n        label: Latest\n        sortable: false\n        type: partial\n        path: column_latest\n"
  },
  {
    "path": "modules/system/models/pluginversion/columns_manage.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    code:\n        label: Code\n        type: partial\n        path: column_code\n\n    version:\n        label: Version\n        sortable: false\n\n    created_at:\n        label: Installed\n        type: timetense\n\n    is_enabled:\n        label: Enabled\n        type: partial\n        path: column_is_enabled\n        sortable: false\n"
  },
  {
    "path": "modules/system/models/requestlog/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    status_code:\n        label: Status\n        searchable: true\n        width: 100px\n\n    url:\n        label: URL\n        searchable: true\n        cssClass: column-break-word\n\n    count:\n        label: Counter\n        width: 150px\n"
  },
  {
    "path": "modules/system/models/requestlog/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    url:\n        label: URL\n\n    referer:\n        label: Referers\n        type: partial\n        path: referer_field\n"
  },
  {
    "path": "modules/system/models/settingmodel/HasMultisite.php",
    "content": "<?php namespace System\\Models\\SettingModel;\n\n/**\n * HasMultisite concern\n */\ntrait HasMultisite\n{\n    /**\n     * initializeHasMultisite trait for a model.\n     */\n    public function initializeHasMultisite()\n    {\n        if (!$this->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class)) {\n            return;\n        }\n\n        $this->bindEvent('model.beforeSave', [$this, 'settingMultisiteBeforeSave']);\n        $this->bindEvent('model.initSettingsData', [$this, 'settingMultisiteInitSettingsData']);\n    }\n\n    /**\n     * settingMultisiteBeforeSave\n     */\n    public function settingMultisiteBeforeSave()\n    {\n        if ($this->site_root_id) {\n            return;\n        }\n\n        $otherModel = $this->findOtherSettingModel();\n        if (!$otherModel) {\n            return;\n        }\n\n        $this->site_root_id = $otherModel->site_root_id ?: $otherModel->id;\n    }\n\n    /**\n     * settingMultisiteInitSettingsData\n     */\n    public function settingMultisiteInitSettingsData()\n    {\n        if (!$this->isMultisiteEnabled() || !$this->propagatable) {\n            return;\n        }\n\n        $otherModel = $this->findOtherSettingModel();\n        if (!$otherModel) {\n            return;\n        }\n\n        // Reversed logic taken from Multisite trait, propagateToSite method\n        foreach ($this->propagatable as $name) {\n            $relationType = $this->getRelationType($name);\n\n            // Propagate local key relation\n            if ($relationType === 'belongsTo') {\n                $fkName = $this->$name()->getForeignKeyName();\n                $this->$fkName = $otherModel->$fkName;\n            }\n            // Propagate local attribute (not a relation)\n            elseif (!$relationType) {\n                $this->$name = $otherModel->$name;\n            }\n        }\n    }\n\n    /**\n     * findOtherSettingModel\n     */\n    public function findOtherSettingModel()\n    {\n        $query = $this->newQueryWithoutScopes()->where('item', $this->settingsCode);\n\n        if ($this->exists) {\n            $query = $query->where($this->getKeyName(), '<>', $this->getKey());\n        }\n\n        return $query->first();\n    }\n}\n"
  },
  {
    "path": "modules/system/models/settingmodel/HasMultisiteGroup.php",
    "content": "<?php namespace System\\Models\\SettingModel;\n\nuse Site;\n\n/**\n * HasMultisiteGroup concern for SettingModel provides site group (tenant)\n * scoping for settings. Settings using this concern will have different values\n * per tenant, while remaining the same across language variants within a tenant.\n */\ntrait HasMultisiteGroup\n{\n    /**\n     * initializeHasMultisiteGroup trait for a model.\n     */\n    public function initializeHasMultisiteGroup()\n    {\n        if (!$this->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteGroupInterface::class)) {\n            return;\n        }\n\n        $this->bindEvent('model.beforeSave', [$this, 'settingMultisiteGroupBeforeSave']);\n    }\n\n    /**\n     * settingMultisiteGroupBeforeSave sets the site_group_id from context\n     */\n    public function settingMultisiteGroupBeforeSave()\n    {\n        if (Site::hasGlobalContext()) {\n            return;\n        }\n\n        if (!$this->site_group_id) {\n            $this->site_group_id = Site::getSiteGroupIdFromContext();\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/models/sitedefinition/HasModelAttributes.php",
    "content": "<?php namespace System\\Models\\SiteDefinition;\n\nuse Url;\nuse Config;\nuse System\\Helpers\\Preset as PresetHelper;\n\n/**\n * HasModelAttributes are methods assigned for accessing via Twig or PHP\n *\n * @property array $available_countries\n * @property array|null $active_color\n * @property string $status_code\n * @property string $base_url\n * @property string $hard_locale\n * @property string $url\n * @property string $flag_icon\n */\ntrait HasModelAttributes\n{\n    /**\n     * getActiveColorAttribute\n     */\n    public function getActiveColorAttribute()\n    {\n        if ($this->is_styled) {\n            return [$this->color_background, $this->color_foreground];\n        }\n\n        return null;\n    }\n\n    /**\n     * getStatusCodeAttribute\n     */\n    public function getStatusCodeAttribute()\n    {\n        if ($this->is_enabled) {\n            return 'enabled';\n        }\n\n        if ($this->is_enabled_edit) {\n            return 'editable';\n        }\n\n        return 'disabled';\n    }\n\n    /**\n     * getBaseUrlAttribute\n     */\n    public function getBaseUrlAttribute()\n    {\n        $appUrl = $this->is_custom_url ? $this->app_url : Url::to('/');\n        $prefix = $this->is_prefixed ? $this->route_prefix : '';\n\n        return rtrim($appUrl . $prefix, '/');\n    }\n\n    /**\n     * getHardLocaleAttribute will always return a locale code no matter what\n     */\n    public function getHardLocaleAttribute()\n    {\n        if ($this->locale) {\n            return $this->locale;\n        }\n\n        return Config::get('app.original_locale', Config::get('app.locale', 'en'));\n    }\n\n    /**\n     * getUrlAttribute\n     */\n    public function getUrlAttribute()\n    {\n        if ($this->urlOverride !== null) {\n            return $this->urlOverride;\n        }\n\n        return $this->base_url;\n    }\n\n    /**\n     * getFlagIconAttribute\n     */\n    public function getFlagIconAttribute()\n    {\n        if (!$this->locale || $this->locale === 'custom') {\n            return '';\n        }\n\n        return PresetHelper::flags()[$this->locale][1] ?? '';\n    }\n}\n"
  },
  {
    "path": "modules/system/models/sitedefinition/_column_name.php",
    "content": "<span class=\"t-nw\">\n    <strong><?= e($value) ?></strong>\n    <?php if ($record->is_primary): ?>\n        <i class=\"icon-shield small\" title=\"<?= __(\"Primary Site\") ?>\"></i>\n    <?php endif ?>\n</span>\n"
  },
  {
    "path": "modules/system/models/sitedefinition/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    id:\n        label: ID\n        invisible: true\n\n    group:\n        label: Group\n        relation: group\n        select: name\n        invisible: true\n\n    name:\n        label: Name\n        searchable: true\n        type: partial\n        path: column_name\n\n    theme:\n        label: Theme\n        type: selectable\n\n    locale:\n        label: Locale\n        type: selectable\n        optionsMethod: getShortLocaleOptions\n\n    timezone:\n        label: Timezone\n        type: selectable\n\n    base_url:\n        label: Base URL\n        type: linkage\n        sortable: false\n        attributes:\n            target: _blank\n\n    code:\n        label: Code\n        searchable: true\n        invisible: true\n\n    allow_roles:\n        label: Roles\n        type: selectable\n        invisible: true\n\n    created_at:\n        label: Created At\n        invisible: true\n\n    updated_at:\n        label: Updated At\n        invisible: true\n\n    status_code:\n        label: Status\n        type: selectable\n        sortable: false\n\n    active_color:\n        label: Color\n        shortLabel: ''\n        type: colorpicker\n        sortable: false\n        cssClass: text-end\n"
  },
  {
    "path": "modules/system/models/sitedefinition/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    name:\n        label: Name\n        span: left\n\n    code:\n        label: Unique Code\n        span: right\n        preset:\n            field: name\n            type: slug\n\ntabs:\n    defaultTab: Site Definition\n    fields:\n        _primary_site_hint:\n            type: hint\n            comment: The primary site is used by default and cannot be deleted.\n\n        is_enabled:\n            label: Enabled\n            comment: Disabled sites are not shown on the frontend.\n            type: switch\n            span: left\n\n        is_enabled_edit:\n            label: Enabled in the Admin Panel\n            comment: Use this if you want the site to be enabled in the admin panel.\n            type: switch\n            span: right\n            trigger:\n                action: disable|fill\n                field: is_enabled\n                condition: checked\n\n        _ruler1:\n            type: ruler\n\n        group:\n            label: Site Group\n            type: relation\n            required: true\n\n        theme:\n            label: Theme\n            type: dropdown\n            span: full\n            comment: Use the selected theme for this site.\n\n        locale:\n            label: Locale\n            type: dropdown\n            comment: Use this locale code for this site.\n            span: full\n\n        _custom_locale:\n            span: full\n            comment: Specify a custom locale code.\n            cssClass: field-indent\n            trigger:\n                action: show\n                field: locale\n                condition: value[custom]\n\n        timezone:\n            label: Timezone\n            type: dropdown\n            comment: Use this timezone for this site.\n            span: full\n\n        is_custom_url:\n            tab: Configuration\n            label: Custom application URL\n            comment: Override the application URL when this site is active.\n            type: checkbox\n\n        app_url:\n            tab: Configuration\n            span: full\n            placeholder: \"https://\"\n            cssClass: field-indent\n            trigger:\n                action: show\n                field: is_custom_url\n                condition: checked\n\n        is_prefixed:\n            tab: Configuration\n            label: Use a CMS route prefix\n            comment: A prefix can identify this site when using a shared hostname.\n            type: checkbox\n            span: full\n\n        route_prefix:\n            tab: Configuration\n            span: full\n            placeholder: /\n            cssClass: field-indent\n            trigger:\n                action: show\n                field: is_prefixed\n                condition: checked\n\n        is_host_restricted:\n            tab: Configuration\n            label: Define matching hostnames\n            comment: Specify domain names and patterns that must be used to serve this site.\n            tooltip: Wildcards (*) are supported.\n            type: checkbox\n            span: full\n\n        allow_hosts:\n            tab: Configuration\n            type: datatable\n            cssClass: field-indent\n            trigger:\n                action: show\n                field: is_host_restricted\n                condition: checked\n            columns:\n                hostname:\n                    title: Hostname\n\n        is_role_restricted:\n            tab: Configuration\n            label: Define administrator roles\n            comment: Restrict access to this site to only administrator with the following roles.\n            type: checkbox\n\n        allow_roles:\n            tab: Configuration\n            type: taglist\n            cssClass: field-indent\n            options: true\n            useKey: true\n            trigger:\n                action: show\n                field: is_role_restricted\n                condition: checked\n\n        is_styled:\n            tab: Configuration\n            label: Display a style for this site\n            comment: To help identify this site, display a color in the admin panel.\n            type: checkbox\n\n        color_background:\n            tab: Configuration\n            type: colorpicker\n            availableColors: ['#16a085', '#27ae60', '#2980b9', '#8e44ad', '#2b3e50', '#f39c12', '#d35400', '#c0392b', '#bdc3c7', '#7f8c8d']\n            cssClass: field-indent\n            span: left\n            trigger:\n                action: show\n                field: is_styled\n                condition: checked\n\n        color_foreground:\n            tab: Configuration\n            type: colorpicker\n            availableColors: ['#1abc9c', '#2ecc71', '#3498db', '#9b59b6', '#34495e', '#f1c40f', '#e67e22', '#e74c3c', '#ecf0f1', '#95a5a6']\n            span: right\n            trigger:\n                action: show\n                field: is_styled\n                condition: checked\n"
  },
  {
    "path": "modules/system/models/sitegroup/columns.yaml",
    "content": "# ===================================\n#  Column Definitions\n# ===================================\n\ncolumns:\n    name:\n        label: Group Name\n        searchable: true\n\n    code:\n        label: Code\n        searchable: true\n\n    sites:\n        label: Sites\n        type: number\n        relation: sites\n        relationCount: true\n"
  },
  {
    "path": "modules/system/models/sitegroup/fields.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\ntabs:\n    defaultTab: Group\n    fields:\n        name:\n            label: Group Name\n            span: auto\n\n        code:\n            label: Unique Code\n            span: auto\n            preset:\n                field: name\n                type: slug\n"
  },
  {
    "path": "modules/system/package.json",
    "content": "{\n    \"name\": \"octobercms-system\",\n    \"private\": true,\n    \"type\": \"module\",\n    \"scripts\": {\n        \"build\": \"node build.js\"\n    },\n    \"devDependencies\": {\n        \"esbuild\": \"^0.27.4\",\n        \"less\": \"^4.2.0\",\n        \"sass\": \"^1.83.0\"\n    },\n    \"dependencies\": {\n        \"@phosphor-icons/web\": \"^2.1.2\",\n        \"@popperjs/core\": \"^2.11.7\",\n        \"@trevoreyre/autocomplete-vue\": \"^3.0.3\",\n        \"bootstrap\": \"^5.3.3\",\n        \"bootstrap-icons\": \"^1.11.3\",\n        \"chart.js\": \"^4.3.2\",\n        \"chartjs-adapter-moment\": \"^1.0.1\",\n        \"dropzone\": \"^6.0.0-beta.2\",\n        \"jquery\": \"^3.6.0\",\n        \"js-cookie\": \"^3.0.1\",\n        \"mitt\": \"^3.0.1\",\n        \"moment\": \"^2.30.1\",\n        \"moment-timezone\": \"^0.5.46\",\n        \"mustache\": \"^4.2.0\",\n        \"p-queue\": \"^8.0.1\",\n        \"sortablejs\": \"^1.15.0\",\n        \"vue\": \"^3.5.0\",\n        \"vue-multiselect\": \"^3.1.0\",\n        \"vue-router\": \"^4.5.0\"\n    }\n}\n"
  },
  {
    "path": "modules/system/partials/_settings_menu.php",
    "content": "<?php\n    $systemItems = System\\Classes\\SettingsManager::instance()->listItems('system');\n?>\n<?= $this->makePartial('~/modules/system/partials/_settings_menu_items.php', ['items' => $systemItems]) ?>\n"
  },
  {
    "path": "modules/system/partials/_settings_menu_items.php",
    "content": "<?php\n    $context = \\System\\Classes\\SettingsManager::instance()->getContext();\n\n    $collapsedGroups = explode('|',\n        isset($_COOKIE['settingsNavGroupStatus']) ? $_COOKIE['settingsNavGroupStatus'] : ''\n    );\n?>\n<ul class=\"top-level\">\n    <?php foreach ($items as $category => $items): ?>\n        <?php\n            $collapsed = in_array($category, $collapsedGroups);\n            $firstItem = array_first($items);\n        ?>\n        <li data-group-code=\"<?= e($category) ?>\" <?= $collapsed ? 'data-status=\"collapsed\"' : null ?>>\n            <div class=\"group\">\n                <h3>\n                    <span class=\"group-icon\"><i class=\"<?= $firstItem->icon ?? '' ?>\"></i></span>\n                    <?= e(__($category)) ?>\n                    <span class=\"group-collapse\"><i class=\"icon-angle-up\"></i></span>\n                </h3>\n            </div>\n\n            <ul <?= $collapsed ? 'style=\"overflow:visible;height:0;display:none\"' : null ?>>\n                <?php foreach ($items as $item): ?>\n                    <li\n                        class=\"<?= strtolower($item->owner) == $context->owner && strtolower($item->code) == $context->itemCode ? 'active' : false ?>\"\n                        data-keywords=\"<?= e(__($item->keywords ?? '')) ?>\"\n                        <?= Html::attributes($item->attributes) ?>\n                    >\n                        <a href=\"<?= $item->url ?>\" title=\"<?= e(__($item->description ?? '')) ?>\" ontouchstart=\"\">\n                            <span class=\"header\"><?= e(__($item->label ?? '')) ?></span>\n                        </a>\n                    </li>\n                <?php endforeach ?>\n            </ul>\n        </li>\n    <?php endforeach ?>\n</ul>\n"
  },
  {
    "path": "modules/system/partials/_settings_menu_toolbar.php",
    "content": "<div class=\"settings-search-toolbar-item\">\n    <div class=\"position-relative\">\n        <input\n            placeholder=\"<?= __(\"Search Settings...\") ?>\"\n            type=\"text\"\n            name=\"search\"\n            value=\"\"\n            class=\"form-control\"\n            id=\"settings-search-input\"\n            autocomplete=\"off\"\n            data-track-input\n            data-load-indicator\n            data-load-indicator-opaque\n        />\n        <span class=\"input-icon-start input-decoration\">\n            <i class=\"ph ph-magnifying-glass\"></i>\n        </span>\n        <a href=\"javascript:;\" class=\"input-icon-end input-clear-search\" data-clear-search>\n            <i class=\"ph ph-x-circle\"></i>\n        </a>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/system/partials/_system_sidebar.php",
    "content": "<?php Block::put('layout-top-row') ?>\n    <div>\n        <a\n            class=\"system-home-link back-link-other\"\n            href=\"<?= Backend::url('system/settings') ?>\"\n            onclick=\"return sideNavSettingsHomeClick()\">\n            <i></i><?= __('Show All Settings') ?>\n        </a>\n    </div>\n<?php Block::endPut() ?>\n\n<div class=\"control-settings-nav-container\">\n    <div\n        class=\"control-settings-nav\"\n        data-control=\"settings-nav\"\n        data-search-input=\"#settings-search-input\">\n        <div class=\"d-flex flex-column h-100 settings-nav-content\">\n            <div>\n                <?= $this->makePartial('~/modules/system/partials/_settings_menu_toolbar.php') ?>\n            </div>\n\n            <div class=\"flex-grow-1\">\n                <div class=\"position-relative h-100\">\n                    <div class=\"settings-nav-scroll-canvas\">\n                        <div class=\"control-scrollbar\" data-control=\"scrollbar\" data-animation=\"false\">\n                            <?= $this->makePartial('~/modules/system/partials/_settings_menu.php') ?>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <script>\n    function sideNavSettingsHomeClick() {\n        $('body').addClass('settings-nav-expanded');\n        $('#settings-search-input').focus()\n        return false;\n    }\n    </script>\n</div>\n"
  },
  {
    "path": "modules/system/reportwidgets/Status.php",
    "content": "<?php namespace System\\ReportWidgets;\n\nuse Db;\nuse Config;\nuse System;\nuse BackendAuth;\nuse System\\Models\\LogSetting;\nuse System\\Classes\\UpdateManager;\nuse System\\Classes\\PluginManager;\nuse Backend\\Classes\\ReportWidgetBase;\nuse System\\Models\\EventLog;\nuse System\\Models\\RequestLog;\nuse System\\Models\\PluginVersion;\nuse Exception;\n\n/**\n * Status report widget for reporting on the system status\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Status extends ReportWidgetBase\n{\n    /**\n     * @var string defaultAlias is a unique alias to identify this widget.\n     */\n    protected $defaultAlias = 'status';\n\n    /**\n     * render the widget\n     */\n    public function render()\n    {\n        try {\n            $this->loadData();\n        }\n        catch (Exception $ex) {\n            $this->vars['error'] = $ex->getMessage();\n        }\n\n        return $this->makePartial('widget');\n    }\n\n    /**\n     * defineProperties\n     */\n    public function defineProperties()\n    {\n        return [\n            'title' => [\n                'title' => \"Widget title\",\n                'default' => \"System status\",\n                'type' => 'string',\n                'validationPattern' => '^.+$',\n                'validationMessage' => \"The Widget Title is required.\",\n            ]\n        ];\n    }\n\n    /**\n     * loadData\n     */\n    protected function loadData()\n    {\n        $this->vars['canUpdate'] = BackendAuth::userHasAccess('general.backend.perform_updates');\n        $this->vars['updates'] = UpdateManager::instance()->check();\n        $this->vars['warnings'] = $this->getSystemWarnings();\n        $this->vars['coreBuild'] = UpdateManager::instance()->getCurrentVersion();\n\n        $this->vars['eventLog'] = EventLog::count();\n        $this->vars['eventLogMsg'] = LogSetting::get('log_events', false) ? false : true;\n        $this->vars['requestLog'] = RequestLog::count();\n        $this->vars['requestLogMsg'] = LogSetting::get('log_requests', false) ? false : true;\n\n        $this->vars['appBirthday'] = PluginVersion::orderBy('created_at')->value('created_at');\n    }\n\n    /**\n     * onLoadWarningsForm\n     */\n    public function onLoadWarningsForm()\n    {\n        $this->vars['warnings'] = $this->getSystemWarnings();\n        return $this->makePartial('warnings_form');\n    }\n\n    /**\n     * getSystemWarnings\n     */\n    protected function getSystemWarnings()\n    {\n        return array_merge(\n            $this->getSecurityWarnings(),\n            $this->getExtensionWarnings(),\n            $this->getPluginWarnings(),\n            $this->getPathWarnings()\n        );\n    }\n\n    /**\n     * getSecurityWarnings\n     */\n    protected function getSecurityWarnings(): array\n    {\n        $warnings = [];\n\n        if (Config::get('app.debug', true)) {\n            $warnings[] = __(\"Debug mode is enabled. This is not recommended for production installations.\");\n        }\n\n        $backendUris = [\n            'backend',\n            'back-end',\n            'login',\n            'admin',\n            'administration',\n        ];\n\n        $configUri = trim(ltrim((string) Config::get('backend.uri'), '/'));\n        foreach ($backendUris as $uri) {\n            if ($uri === $configUri) {\n                $warnings[] = __(\"The backend URL :name is too generic. Please set to something more unique.\", ['name' => '<strong>/'.$configUri.'</strong>']);\n                break;\n            }\n        }\n\n        $backendLogins = [\n            'guest',\n            'admin',\n            'administrator',\n            'root',\n            'user'\n        ];\n\n        $foundLogins = Db::table('backend_users')->whereIn('login', $backendLogins)->pluck('login')->all();\n        foreach ($foundLogins as $login) {\n            $warnings[] = __(\"An account with a generic login :name was found. Please rename this administrator account.\", ['name' => '<strong>'.$login.'</strong>']);\n        }\n\n        return $warnings;\n    }\n\n    /**\n     * getExtensionWarnings\n     */\n    protected function getExtensionWarnings(): array\n    {\n        $warnings = [];\n        $requiredExtensions = [\n            'GD' => extension_loaded('gd'),\n            'fileinfo' => extension_loaded('fileinfo'),\n            'Zip' => class_exists('ZipArchive'),\n            'cURL' => function_exists('curl_init') && defined('CURLOPT_FOLLOWLOCATION'),\n            'OpenSSL' => function_exists('openssl_random_pseudo_bytes'),\n        ];\n\n        foreach ($requiredExtensions as $extension => $installed) {\n            if (!$installed) {\n                $warnings[] = __(\"The PHP extension :name is not installed. Please install this library and activate the extension.\", ['name' => '<strong>'.$extension.'</strong>']);\n            }\n        }\n\n        return $warnings;\n    }\n\n    /**\n     * getPluginWarnings\n     */\n    protected function getPluginWarnings(): array\n    {\n        $warnings = [];\n        $missingPlugins = PluginManager::instance()->findMissingDependencies();\n\n        foreach ($missingPlugins as $pluginCode) {\n            $warnings[] = __(\"The plugin :name is a dependency but is not installed. Please install this plugin.\", ['name' => '<strong>'.$pluginCode.'</strong>']);\n        }\n\n        return $warnings;\n    }\n\n    /**\n     * getPathWarnings\n     */\n    protected function getPathWarnings(): array\n    {\n        $warnings = [];\n        $writablePaths = [\n            temp_path(),\n            storage_path(),\n            storage_path('app'),\n            storage_path('logs'),\n            storage_path('framework'),\n            storage_path('cms'),\n            storage_path('cms/cache'),\n            storage_path('cms/twig'),\n            storage_path('cms/combiner'),\n        ];\n\n        if (System::hasModule('Cms')) {\n            $writablePaths[] = themes_path();\n        }\n\n        foreach ($writablePaths as $path) {\n            if (!is_writable($path)) {\n                $warnings[] = __(\"Directory :name or its subdirectories is not writable for PHP. Please set corresponding permissions for the webserver on this directory.\", ['name' => '<strong>'.$path.'</strong>']);\n            }\n        }\n\n        return $warnings;\n    }\n}\n"
  },
  {
    "path": "modules/system/reportwidgets/status/partials/_warnings_form.php",
    "content": "<div class=\"modal-header\">\n    <h4 class=\"modal-title\"><?= e(trans('backend::lang.warnings.tips')) ?></h4>\n    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n</div>\n<div class=\"modal-body\">\n    <?php if (count($warnings)): ?>\n        <p><?= e(trans('backend::lang.warnings.tips_description')) ?></p>\n\n        <div class=\"control-simplelist with-icons is-divided\">\n            <ul class=\"mb-0\">\n                <?php foreach ($warnings as $warning): ?>\n                    <li class=\"py-2\">\n                        <i class=\"icon-exclamation-triangle text-danger\"></i>\n                        <?= $warning ?>\n                    </li>\n                <?php endforeach ?>\n            </ul>\n        </div>\n    <?php else: ?>\n        <p>No warnings to display</p>\n    <?php endif ?>\n</div>\n<div class=\"modal-footer\">\n    <button\n        type=\"button\"\n        class=\"btn btn-default\"\n        data-dismiss=\"popup\">\n        <?= e(trans('backend::lang.form.close')) ?>\n    </button>\n</div>\n"
  },
  {
    "path": "modules/system/reportwidgets/status/partials/_widget.php",
    "content": "<div class=\"report-widget\">\n    <h3><?= e(__($this->property('title'))) ?></h3>\n\n    <?php if (!isset($error)): ?>\n        <div class=\"control-status-list\">\n            <ul>\n                <li>\n                    <?php if ($updates): ?>\n                        <span class=\"status-icon warning\"><i class=\"icon-exclamation\"></i></span>\n                        <span class=\"status-text warning\">\n                            <?= e(__(\"Pending Software Updates\")) ?>\n                        </span>\n                        <?php if ($canUpdate): ?>\n                            <a\n                                href=\"<?= Backend::url('system/updates') ?>\"\n                                class=\"status-label btn btn-sm btn-outline-primary\"><?= e(__(\"Update\")) ?></a>\n                        <?php endif ?>\n                    <?php else: ?>\n                        <span class=\"status-icon success\"><i class=\"icon-check\"></i></span>\n                        <span class=\"status-text success\">\n                            <?= e(__(\"Software is Up to Date\")) ?>\n                        </span>\n                    <?php endif ?>\n                </li>\n                <li>\n                    <?php if ($warnings): ?>\n                        <span class=\"status-icon warning\"><i class=\"icon-exclamation\"></i></span>\n                        <span class=\"status-text warning\">\n                            <?= e(__(\"Some Issues Need Attention\")) ?>\n                        </span>\n                        <a\n                            href=\"javascript:;\"\n                            data-control=\"popup\"\n                            data-size=\"large\"\n                            data-handler=\"<?= $this->getEventHandler('onLoadWarningsForm') ?>\"\n                            class=\"status-label btn btn-sm btn-outline-warning\"><?= e(__(\"View\")) ?></a>\n                    <?php else: ?>\n                        <span class=\"status-icon success\"><i class=\"icon-check\"></i></span>\n                        <span class=\"status-text success\">\n                            <?= e(__(\"No Warnings to Display\")) ?>\n                        </span>\n                    <?php endif ?>\n                </li>\n                <?php if ($coreBuild): ?>\n                    <li>\n                        <span class=\"status-icon\"><i class=\"icon-info\"></i></span>\n                        <span class=\"status-text\">\n                            <?= e(__(\"System Build\")) ?>\n                        </span>\n                        <a\n                            class=\"status-label btn btn-sm btn-outline-secondary\"\n                            href=\"<?= Backend::url('system/updates') ?>\">v<?= $coreBuild ?></a>\n                    </li>\n                <?php endif ?>\n                <li>\n                    <span class=\"status-icon\"><i class=\"icon-exclamation-triangle\"></i></span>\n                    <span class=\"status-text\">\n                        <?= e(__(\"Event Log\")) ?>\n                        <?php if ($eventLogMsg): ?>&nbsp;<a href=\"<?= Backend::url('system/settings/update/october/system/log_settings') ?>\"><i class=\"icon-exclamation-triangle text-warning\" title=\"<?= e(__('Disabled')) ?>\" data-toggle=\"tooltip\" data-placement=\"right\"></i></a><?php endif ?>\n                    </span>\n                    <a\n                        class=\"status-label btn btn-sm btn-outline-secondary\"\n                        href=\"<?= Backend::url('system/eventlogs') ?>\"><?= $eventLog ?></a>\n                </li>\n                <li>\n                    <span class=\"status-icon\"><i class=\"icon-file\"></i></span>\n                    <span class=\"status-text\">\n                        <?= e(__(\"Request Log\")) ?>\n                        <?php if ($requestLogMsg): ?>&nbsp;<a href=\"<?= Backend::url('system/settings/update/october/system/log_settings') ?>\"><i class=\"icon-exclamation-triangle text-warning\" title=\"<?= e(__('Disabled')) ?>\" data-toggle=\"tooltip\" data-placement=\"right\"></i></a><?php endif ?>\n                    </span>\n                    <a\n                        class=\"status-label btn btn-sm btn-outline-secondary\"\n                        href=\"<?= Backend::url('system/requestlogs') ?>\"><?= $requestLog ?></a>\n                </li>\n                <?php if ($appBirthday): ?>\n                    <li>\n                        <span class=\"status-icon\"><i class=\"icon-calendar\"></i></span>\n                        <span class=\"status-text\">\n                            <?= e(__(\"Online Since\")) ?>\n                        </span>\n                        <span class=\"status-label link\"><?= Backend::dateTime($appBirthday, ['formatAlias' => 'dateLong']) ?></span>\n                    </li>\n                <?php endif ?>\n            </ul>\n        </div>\n    <?php else: ?>\n        <div class=\"callout callout-warning\">\n            <div class=\"content py-3\"><?= e($error) ?></div>\n        </div>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/system/routes.php",
    "content": "<?php\n\n/**\n * Register System routes before all user routes.\n */\nApp::before(function ($request) {\n    /*\n     * Combine JavaScript and StyleSheet assets\n     */\n    Route::any('combine/{file}', [\\System\\Classes\\SystemController::class, 'combine']);\n\n    /*\n     * Resize image assets\n     */\n    Route::get('resize/{file}', [\\System\\Classes\\SystemController::class, 'resize']);\n});\n"
  },
  {
    "path": "modules/system/tests/PluginTestCase.php",
    "content": "<?php\n\nrequire 'concerns/InteractsWithAuthentication.php';\nrequire 'concerns/PerformsMigrations.php';\nrequire 'concerns/PerformsRegistrations.php';\n\nuse Backend\\Classes\\AuthManager;\nuse October\\Rain\\Database\\Model as ActiveRecord;\n\nabstract class PluginTestCase extends TestCase\n{\n    use \\October\\Tests\\Concerns\\InteractsWithAuthentication;\n    use \\October\\Tests\\Concerns\\PerformsMigrations;\n    use \\October\\Tests\\Concerns\\PerformsRegistrations;\n\n    /**\n     * @var bool autoMigrate performs database migrations upon setup,\n     * for the core and the current plugin and it's dependencies.\n     */\n    protected $autoMigrate = true;\n\n    /**\n     * @var bool autoRegister performs plugin boot and registration.\n     */\n    protected $autoRegister = true;\n\n    /**\n     * Creates the application.\n     * @return Symfony\\Component\\HttpKernel\\HttpKernelInterface\n     */\n    public function createApplication()\n    {\n        $app = require __DIR__.'/../../../bootstrap/app.php';\n        $app->make(\\Illuminate\\Contracts\\Console\\Kernel::class)->bootstrap();\n\n        // Register auth provider\n        $app->singleton('auth', function ($app) {\n            $app['auth.loaded'] = true;\n            return AuthManager::instance();\n        });\n\n        return $app;\n    }\n\n    /**\n     * setUp test case\n     */\n    public function setUp(): void\n    {\n        // Reset locals\n        $this->pluginTestCaseMigratedPlugins = [];\n        $this->pluginTestCaseLoadedPlugins = [];\n\n        // Create application instance\n        parent::setUp();\n\n        // Register and boot the current plugin\n        if ($this->autoRegister === true) {\n            $this->loadCurrentPlugin();\n        }\n\n        // Migrate core and current plugin\n        if ($this->autoMigrate === true) {\n            $this->migrateModules();\n            $this->migrateCurrentPlugin();\n        }\n\n        // Disable mailer\n        Mail::pretend();\n    }\n\n    /**\n     * tearDown test case will flush event listeners and collect garbage.\n     */\n    public function tearDown(): void\n    {\n        $this->flushModelEventListeners();\n        parent::tearDown();\n        unset($this->app);\n    }\n\n    /**\n     * flushModelEventListeners for the models, which in October CMS use a static property\n     * to store their events, these will need to be targeted and reset ready for a new test\n     * cycle. Pivot models are an exception since they are internally managed.\n     * @return void\n     */\n    protected function flushModelEventListeners()\n    {\n        foreach (get_declared_classes() as $class) {\n            if ($class == \\October\\Rain\\Database\\Pivot::class) {\n                continue;\n            }\n\n            $reflectClass = new ReflectionClass($class);\n            if (\n                !$reflectClass->isInstantiable() ||\n                !$reflectClass->isSubclassOf(\\October\\Rain\\Database\\Model::class) ||\n                $reflectClass->isSubclassOf(\\October\\Rain\\Database\\Pivot::class) ||\n                $reflectClass->isSubclassOf(\\PHPUnit\\Framework\\MockObject\\MockObject::class)\n            ) {\n                continue;\n            }\n\n            $class::flushEventListeners();\n        }\n\n        ActiveRecord::flushEventListeners();\n    }\n\n    /**\n     * guessPluginCodeFromTest locates the plugin code based on the test file location.\n     * @return string|bool\n     */\n    protected function guessPluginCodeFromTest()\n    {\n        $reflect = new ReflectionClass($this);\n        $path = $reflect->getFilename();\n        $pluginPath = $this->app->pluginsPath();\n\n        if (strpos($path, $pluginPath) === 0) {\n            $result = ltrim(str_replace('\\\\', '/', substr($path, strlen($pluginPath))), '/');\n            $result = implode('.', array_slice(explode('/', $result), 0, 2));\n            return $result;\n        }\n\n        return false;\n    }\n\n    /**\n     * isAppCodeFromTest determines if this test is running the app directory\n     * @return string|bool\n     */\n    protected function isAppCodeFromTest()\n    {\n        $reflect = new ReflectionClass($this);\n        $path = $reflect->getFilename();\n        $appPath = $this->app->path();\n\n        if (strpos($path, $appPath) === 0) {\n            return 'app';\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/TestCase.php",
    "content": "<?php\n\nuse PHPUnit\\Framework\\Assert;\n\nclass TestCase extends Illuminate\\Foundation\\Testing\\TestCase\n{\n    /**\n     * createApplication\n     * @return \\Illuminate\\Foundation\\Application\n     */\n    public function createApplication()\n    {\n        $app = require __DIR__.'/../../../bootstrap/app.php';\n\n        $app->make(\\Illuminate\\Contracts\\Console\\Kernel::class)->bootstrap();\n\n        $app['cache']->setDefaultDriver('array');\n        $app->setLocale('en');\n\n        return $app;\n    }\n\n    //\n    // Helpers\n    //\n\n    protected static function callProtectedMethod($object, $name, $params = [])\n    {\n        $className = get_class($object);\n        $class = new ReflectionClass($className);\n        $method = $class->getMethod($name);\n        return $method->invokeArgs($object, $params);\n    }\n\n    public static function getProtectedProperty($object, $name)\n    {\n        $className = get_class($object);\n        $class = new ReflectionClass($className);\n        $property = $class->getProperty($name);\n        return $property->getValue($object);\n    }\n\n    public static function setProtectedProperty($object, $name, $value)\n    {\n        $className = get_class($object);\n        $class = new ReflectionClass($className);\n        $property = $class->getProperty($name);\n        return $property->setValue($object, $value);\n    }\n\n    /**\n     * assertFileNotExists allows compatibility with PHPUnit 8 and 9\n     */\n    public static function assertFileNotExists(string $filename, string $message = ''): void\n    {\n        if (method_exists(Assert::class, 'assertFileDoesNotExist')) {\n            Assert::assertFileDoesNotExist($filename, $message);\n            return;\n        }\n\n        Assert::assertFileNotExists($filename, $message);\n    }\n\n    /**\n     * assertRegExp allows compatibility with PHPUnit 8 and 9\n     */\n    public static function assertRegExp(string $pattern, string $string, string $message = ''): void\n    {\n        if (method_exists(Assert::class, 'assertMatchesRegularExpression')) {\n            Assert::assertMatchesRegularExpression($pattern, $string, $message);\n            return;\n        }\n\n        Assert::assertRegExp($pattern, $string, $message);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/bootstrap.php",
    "content": "<?php\n\n/*\n * Common classes\n */\nrequire 'TestCase.php';\nrequire 'PluginTestCase.php';\n\n/*\n * October CMS autoloader\n */\nrequire __DIR__ . '/../../../bootstrap/autoload.php';\n\n/*\n * Fallback autoloader\n */\nOctober\\Rain\\Composer\\ClassLoader::configure(dirname(__DIR__, 3))\n    ->withNamespace('App\\\\', '')\n    ->withDirectories([\n        'modules',\n        'plugins'\n    ])\n    ->register();\n"
  },
  {
    "path": "modules/system/tests/classes/ChangelogWidgetTest.php",
    "content": "<?php\n\nclass ChangelogWidgetTest extends TestCase\n{\n    //\n    // Tests\n    //\n\n    public function testGetPluginVersionFile()\n    {\n        $widget = $this->getMockBuilder(System\\Widgets\\Changelog::class)->disableOriginalConstructor()->getMock();\n\n        $expectedVersions = [\n            '1.0.5' => [\n                'Create blog settings table',\n                'Another update message',\n                'Yet one more update message'\n            ],\n            '1.0.4' => [\n                'Another fix'\n            ],\n            '1.0.3' => [\n                'Bug fix update that uses no scripts'\n            ],\n            '1.0.2' => [\n                'Create blog post comments table',\n                'Multiple update messages are allowed'\n            ],\n            '1.0.1' => [\n                'Added some upgrade file and some seeding',\n                'some_upgrade_file.php', //does not exist\n                'some_seeding_file.php' //does not exist\n            ]\n        ];\n\n        $versions = self::callProtectedMethod(\n            $widget,\n            'getPluginVersionFile',\n            [\n                base_path() . '/modules/system/tests/fixtures/plugins/october/tester/',\n                'updates/version.yaml'\n            ]\n        );\n\n        $this->assertNotNull($versions);\n        $this->assertEquals($expectedVersions, $versions);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/classes/CoreLangTest.php",
    "content": "<?php\n\nclass CoreLangTest extends TestCase\n{\n    public function testValidationTranslator()\n    {\n        $translator = $this->app['translator'];\n        $translator->setLocale('en');\n\n        $validator = Validator::make(\n            ['name' => 'me'],\n            ['name' => 'required|min:5']\n        );\n\n        $this->assertTrue($validator->fails());\n\n        $messages = $validator->messages();\n        $this->assertCount(1, $messages);\n        $this->assertEquals('The name field must be at least 5 characters.', $messages->all()[0]);\n    }\n\n    public function testValidCoreLanguageFiles()\n    {\n        $translator = $this->app['translator'];\n        $locales = $translator->get('system::lang.locale');\n        $this->assertNotEmpty($locales);\n\n        $locales = array_keys($locales);\n        $modules = ['system', 'backend', 'cms'];\n        $files = ['lang.php', 'validation.php', 'client.php'];\n\n        foreach ($modules as $module) {\n            foreach ($locales as $locale) {\n                foreach ($files as $file) {\n                    $srcPath = base_path() . '/modules/'.$module.'/lang/'.$locale.'/'.$file;\n                    if (!file_exists($srcPath)) {\n                        continue;\n                    }\n                    $messages = require $srcPath;\n                    $this->assertNotEmpty($messages);\n                    $this->assertNotCount(0, $messages);\n                }\n\n                $jsonPath = base_path() . '/modules/'.$module.'/lang/'.$locale.'.json';\n                if (file_exists($jsonPath)) {\n                    $jsonOut = json_decode(file_get_contents($jsonPath));\n                    $this->assertNotEmpty($jsonOut, \"Invalid JSON found in [{$locale}.json] for module [{$module}].\");\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/classes/DependencyResolverTest.php",
    "content": "<?php\n\nuse Illuminate\\Http\\Request;\nuse October\\Rain\\Extension\\ExtendableTrait;\nuse System\\Classes\\DependencyResolver;\n\nclass DependencyResolverTest extends TestCase\n{\n    public function testDependencyInjection()\n    {\n        $dependencyResolver = new DependencyResolver;\n        $dependencyTestClass = new DependencyTestClass;\n\n        $result = $dependencyResolver->resolve(\n            $dependencyTestClass,\n            'testDependencyInjection',\n            []\n        );\n\n        $this->assertInstanceOf(Request::class, $result[0]);\n    }\n\n    public function testDependencyInjectionWithParameters()\n    {\n        $dependencyResolver = new DependencyResolver;\n        $dependencyTestClass = new DependencyTestClass;\n\n        $result = $dependencyResolver->resolve(\n            $dependencyTestClass,\n            'testDependencyInjection',\n            ['test']\n        );\n\n        $this->assertInstanceOf(Request::class, $result[0]);\n        $this->assertEquals('test', $result[1]);\n    }\n\n   public function testDependencyInjectionDynamicMethod()\n   {\n       $dependencyResolver = new DependencyResolver;\n       $dependencyTestClass = new DependencyTestClass;\n       $dependencyTestClass->addDynamicMethod('testDynamic', static function (Request $request) {});\n\n       $result = $dependencyResolver->resolve(\n           $dependencyTestClass,\n           'testDynamic',\n           []\n       );\n\n       $this->assertInstanceOf(Request::class, $result[0]);\n   }\n\n   public function testDependencyInjectionDynamicMethodWithParameters()\n   {\n       $dependencyResolver = new DependencyResolver;\n       $dependencyTestClass = new DependencyTestClass;\n       $dependencyTestClass->addDynamicMethod('testDynamic', static function (Request $request) {});\n\n       $result = $dependencyResolver->resolve(\n           $dependencyTestClass,\n           'testDependencyInjection',\n           ['testDynamic']\n       );\n\n       $this->assertInstanceOf(Request::class, $result[0]);\n       $this->assertEquals('testDynamic', $result[1]);\n   }\n}\n\nclass DependencyTestClass\n{\n    use ExtendableTrait;\n\n    public function testDependencyInjection(Request $request)\n    {\n    }\n\n    public function testDependencyInjectionWithParameters(Request $request, string $key)\n    {\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/classes/MarkupExtensionItemTest.php",
    "content": "<?php\n\nuse System\\Classes\\MarkupExtensionItem;\n\nclass MarkupExtensionItemTest extends TestCase\n{\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/october/tester/Plugin.php';\n    }\n\n    //\n    // Tests\n    //\n\n    /**\n     * testOutputEscaping tests that the last argument of a definition can be used\n     * to define the output escaping used in the Twig environment\n    */\n    public function testOutputEscaping()\n    {\n        // Escaped (default)\n        $item = $this->defineMarkupExtensionItem([\n            'name' => 'test_func',\n            'type' => MarkupExtensionItem::TYPE_FILTER,\n            'definition' => 'count'\n        ]);\n\n        $this->assertTrue($item->escapeOutput);\n        $this->assertTrue(is_callable($item->callback));\n\n        // Not escaped\n        $item = $this->defineMarkupExtensionItem([\n            'name' => 'test_func',\n            'type' => MarkupExtensionItem::TYPE_FILTER,\n            'definition' => ['count', false]\n        ]);\n\n        $this->assertFalse($item->escapeOutput);\n        $this->assertTrue(is_callable($item->callback));\n    }\n\n    /**\n     * testIsWildCallable tests if wild callbacks work as they should\n     */\n    public function testIsWildCallable()\n    {\n        $item = $this->defineMarkupExtensionItem([\n            'name' => 'test_func',\n            'type' => MarkupExtensionItem::TYPE_FILTER,\n            'definition' => null\n        ]);\n\n        /*\n         * Negatives\n         */\n        $item->callback = 'something';\n        $this->assertFalse($item->isWildCallable());\n\n        $item->callback = ['Form', 'open'];\n        $this->assertFalse($item->isWildCallable());\n\n        $item->callback = function () {\n            return 'O, Hai!';\n        };\n        $this->assertFalse($item->isWildCallable());\n\n        /*\n         * String\n         */\n        $item->callback = 'something_*';\n        $this->assertTrue($item->isWildCallable());\n        $this->assertEquals('something_delicious', $item->getWildCallback('delicious'));\n\n        /*\n         * Array\n         */\n        $item->callback = ['Class', 'foo_*'];\n        $this->assertTrue($item->isWildCallable());\n\n        $result = $item->getWildCallback('bar');\n        $this->assertArrayHasKey(0, $result);\n        $this->assertArrayHasKey(1, $result);\n        $this->assertEquals('Class', $result[0]);\n        $this->assertEquals('foo_bar', $result[1]);\n\n        $item->callback = ['My*', 'method'];\n        $this->assertTrue($item->isWildCallable());\n\n        $result = $item->getWildCallback('Class');\n        $this->assertArrayHasKey(0, $result);\n        $this->assertArrayHasKey(1, $result);\n        $this->assertEquals('MyClass', $result[0]);\n        $this->assertEquals('method', $result[1]);\n\n        $item->callback = ['My*', 'my*'];\n        $this->assertTrue($item->isWildCallable());\n\n        $result = $item->getWildCallback('Food');\n        $this->assertArrayHasKey(0, $result);\n        $this->assertArrayHasKey(1, $result);\n        $this->assertEquals('MyFood', $result[0]);\n        $this->assertEquals('myFood', $result[1]);\n    }\n\n    /**\n     * defineMarkupExtensionItem\n     */\n    protected function defineMarkupExtensionItem(array $config): MarkupExtensionItem\n    {\n        return (new MarkupExtensionItem)->useConfig($config);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/classes/PluginManagerTest.php",
    "content": "<?php\nuse System\\Classes\\PluginManager;\n\nclass PluginManagerTest extends TestCase\n{\n    public $manager;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $manager = PluginManager::instance();\n        self::callProtectedMethod($manager, 'loadDisabled');\n        $manager->loadPlugins();\n        self::callProtectedMethod($manager, 'loadDependencies');\n\n        $this->manager = $manager;\n    }\n\n    //\n    // Tests\n    //\n\n    public function testLoadPlugins()\n    {\n        $result = $this->manager->loadPlugins();\n\n        $this->assertCount(9, $result);\n        $this->assertArrayHasKey('October.NoUpdates', $result);\n        $this->assertArrayHasKey('October.Sample', $result);\n        $this->assertArrayHasKey('October.Tester', $result);\n        $this->assertArrayHasKey('Database.Tester', $result);\n        $this->assertArrayHasKey('TestVendor.Test', $result);\n        $this->assertArrayHasKey('DependencyTest.Found', $result);\n        $this->assertArrayHasKey('DependencyTest.NotFound', $result);\n        $this->assertArrayHasKey('DependencyTest.WrongCase', $result);\n        $this->assertArrayHasKey('DependencyTest.Dependency', $result);\n\n        $this->assertInstanceOf('October\\NoUpdates\\Plugin', $result['October.NoUpdates']);\n        $this->assertInstanceOf('October\\Sample\\Plugin', $result['October.Sample']);\n        $this->assertInstanceOf('October\\Tester\\Plugin', $result['October.Tester']);\n        $this->assertInstanceOf('Database\\Tester\\Plugin', $result['Database.Tester']);\n        $this->assertInstanceOf('TestVendor\\Test\\Plugin', $result['TestVendor.Test']);\n        $this->assertInstanceOf('DependencyTest\\Found\\Plugin', $result['DependencyTest.Found']);\n        $this->assertInstanceOf('DependencyTest\\NotFound\\Plugin', $result['DependencyTest.NotFound']);\n        $this->assertInstanceOf('DependencyTest\\WrongCase\\Plugin', $result['DependencyTest.WrongCase']);\n        $this->assertInstanceOf('DependencyTest\\Dependency\\Plugin', $result['DependencyTest.Dependency']);\n    }\n\n    public function testGetPluginPath()\n    {\n        $result = $this->manager->getPluginPath('October\\Tester');\n        $basePath = str_replace('\\\\', '/', base_path());\n        $this->assertEquals($basePath . '/modules/system/tests/fixtures/plugins/october/tester', $result);\n    }\n\n    public function testGetPlugins()\n    {\n        $result = $this->manager->getPlugins();\n\n        $this->assertCount(8, $result);\n        $this->assertArrayHasKey('October.NoUpdates', $result);\n        $this->assertArrayHasKey('October.Sample', $result);\n        $this->assertArrayHasKey('October.Tester', $result);\n        $this->assertArrayHasKey('Database.Tester', $result);\n        $this->assertArrayHasKey('TestVendor.Test', $result);\n        $this->assertArrayHasKey('DependencyTest.Found', $result);\n        $this->assertArrayHasKey('DependencyTest.WrongCase', $result);\n        $this->assertArrayHasKey('DependencyTest.Dependency', $result);\n\n        $this->assertArrayNotHasKey('DependencyTest.NotFound', $result);\n\n        $this->assertInstanceOf('October\\NoUpdates\\Plugin', $result['October.NoUpdates']);\n        $this->assertInstanceOf('October\\Sample\\Plugin', $result['October.Sample']);\n        $this->assertInstanceOf('October\\Tester\\Plugin', $result['October.Tester']);\n        $this->assertInstanceOf('Database\\Tester\\Plugin', $result['Database.Tester']);\n        $this->assertInstanceOf('TestVendor\\Test\\Plugin', $result['TestVendor.Test']);\n        $this->assertInstanceOf('DependencyTest\\Found\\Plugin', $result['DependencyTest.Found']);\n        $this->assertInstanceOf('DependencyTest\\WrongCase\\Plugin', $result['DependencyTest.WrongCase']);\n        $this->assertInstanceOf('DependencyTest\\Dependency\\Plugin', $result['DependencyTest.Dependency']);\n    }\n\n    public function testFindByNamespace()\n    {\n        $result = $this->manager->findByNamespace('October\\Tester');\n        $this->assertInstanceOf('October\\Tester\\Plugin', $result);\n    }\n\n    public function testHasPlugin()\n    {\n        $result = $this->manager->hasPlugin('October\\Tester');\n        $this->assertTrue($result);\n\n        $result = $this->manager->hasPlugin('DependencyTest.Found');\n        $this->assertTrue($result);\n\n        $result = $this->manager->hasPlugin('DependencyTest\\WrongCase');\n        $this->assertTrue($result);\n\n        $result = $this->manager->hasPlugin('DependencyTest\\NotFound');\n        $this->assertTrue($result);\n\n        $result = $this->manager->hasPlugin('October\\XXXXX');\n        $this->assertFalse($result);\n\n        $result = $this->manager->hasPlugin('dependencyTest\\Wrongcase');\n        $this->assertTrue($result);\n\n        $result = $this->manager->hasPlugin('dependencyTest.Wrongcase');\n        $this->assertTrue($result);\n    }\n\n    public function testGetPluginNamespaces()\n    {\n        $result = $this->manager->getPluginNamespaces();\n\n        $this->assertCount(9, $result);\n        $this->assertArrayHasKey('october\\noupdates', $result);\n        $this->assertArrayHasKey('october\\sample', $result);\n        $this->assertArrayHasKey('october\\tester', $result);\n        $this->assertArrayHasKey('database\\tester', $result);\n        $this->assertArrayHasKey('testvendor\\test', $result);\n        $this->assertArrayHasKey('dependencytest\\found', $result);\n        $this->assertArrayHasKey('dependencytest\\notfound', $result);\n        $this->assertArrayHasKey('dependencytest\\wrongcase', $result);\n        $this->assertArrayHasKey('dependencytest\\dependency', $result);\n    }\n\n    public function testGetVendorAndPluginNames()\n    {\n        $vendors = $this->manager->getVendorAndPluginNames();\n\n        $this->assertCount(4, $vendors);\n        $this->assertArrayHasKey('october', $vendors);\n        $this->assertArrayHasKey('noupdates', $vendors['october']);\n        $this->assertArrayHasKey('sample', $vendors['october']);\n        $this->assertArrayHasKey('tester', $vendors['october']);\n\n        $this->assertArrayHasKey('database', $vendors);\n        $this->assertArrayHasKey('tester', $vendors['database']);\n\n        $this->assertArrayHasKey('testvendor', $vendors);\n        $this->assertArrayHasKey('test', $vendors['testvendor']);\n\n        $this->assertArrayHasKey('dependencytest', $vendors);\n        $this->assertArrayHasKey('found', $vendors['dependencytest']);\n        $this->assertArrayHasKey('notfound', $vendors['dependencytest']);\n        $this->assertArrayHasKey('wrongcase', $vendors['dependencytest']);\n        $this->assertArrayHasKey('dependency', $vendors['dependencytest']);\n    }\n\n    public function testPluginDetails()\n    {\n        $testPlugin = $this->manager->findByNamespace('October\\XXXXX');\n        $this->assertNull($testPlugin);\n\n        $testPlugin = $this->manager->findByNamespace('October\\Tester');\n        $this->assertNotNull($testPlugin);\n        $pluginDetails = $testPlugin->pluginDetails();\n\n        $this->assertEquals('October Test Plugin', $pluginDetails['name']);\n        $this->assertEquals('Test plugin used by unit tests.', $pluginDetails['description']);\n        $this->assertEquals('Alexey Bobkov, Samuel Georges', $pluginDetails['author']);\n    }\n\n    public function testUnregisterall()\n    {\n        $result = $this->manager->getPlugins();\n        $this->assertCount(8, $result);\n\n        $this->manager->unregisterAll();\n        $this->assertEmpty($this->manager->getPlugins());\n    }\n\n    public function testGetDependencies()\n    {\n        $result = $this->manager->getDependencies('DependencyTest.Found');\n        $this->assertCount(1, $result);\n        $this->assertContains('DependencyTest.Dependency', $result);\n\n        $result = $this->manager->getDependencies('DependencyTest.WrongCase');\n        $this->assertCount(1, $result);\n        $this->assertContains('Dependencytest.dependency', $result);\n\n        $result = $this->manager->getDependencies('DependencyTest.NotFound');\n        $this->assertCount(1, $result);\n        $this->assertContains('DependencyTest.Missing', $result);\n    }\n\n    public function testIsDisabled()\n    {\n        $result = $this->manager->isDisabled('DependencyTest.Found');\n        $this->assertFalse($result);\n\n        $result = $this->manager->isDisabled('DependencyTest.WrongCase');\n        $this->assertFalse($result);\n\n        $result = $this->manager->isDisabled('DependencyTest.NotFound');\n        $this->assertTrue($result);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/classes/SiteManagerTest.php",
    "content": "<?php\n\nuse System\\Classes\\SiteManager;\nuse System\\Classes\\SiteCollection;\nuse System\\Models\\SiteDefinition;\n\nclass SiteManagerTest extends TestCase\n{\n    /**\n     * testHostNameExactMatch\n     */\n    public function testHostNameExactMatch()\n    {\n        $fixture = Model::unguarded(function() {\n            return new SiteCollection([\n                new SiteDefinition([\n                    'id' => 1,\n                    'name' => 'Primary Site',\n                    'code' => 'primary',\n                    'is_primary' => true,\n                    'is_enabled' => true,\n                    'is_enabled_edit' => true,\n                    'is_host_restricted' => true,\n                    'allow_hosts' => [\n                        ['hostname' => 'octobercms.test']\n                    ]\n                ]),\n                new SiteDefinition([\n                    'id' => 2,\n                    'name' => 'English Site',\n                    'code' => 'english',\n                    'is_primary' => false,\n                    'is_enabled' => true,\n                    'is_enabled_edit' => true,\n                    'is_host_restricted' => true,\n                    'allow_hosts' => [\n                        ['hostname' => 'en.octobercms.test'],\n                        ['hostname' => '*.en.octobercms.test'],\n                    ]\n                ])\n            ]);\n        });\n\n        // Testing higher qualified hostname\n        $sites = $fixture->filter(function($site) {\n            return $site->matchesHostname('en.octobercms.test');\n        });\n\n        $this->assertEquals(1, $sites->count());\n        $this->assertEquals('english', $sites->first()->code);\n\n        $manager = SiteManager::instance();\n        $this->setProtectedProperty($manager, 'sites', $fixture);\n\n        // Testing access to a hostname guarded site\n        $site = $manager->getSiteFromRequest('https://bacon-cms.tld/', '/');\n        $this->assertNull($site);\n\n        // Remove guard and try again\n        $primarySite = $manager->getPrimarySite();\n        $primarySite->is_host_restricted = false;\n\n        // Testing access to a hostname guarded site\n        $site = $manager->getSiteFromRequest('https://bacon-cms.tld/', '/');\n        $this->assertEquals(1, $site->id);\n    }\n\n    /**\n     * testHostNameFallbackMatch\n     */\n    public function testHostNameFallbackMatch()\n    {\n        $fixture = Model::unguarded(function() {\n            return new SiteCollection([\n                new SiteDefinition([\n                    'id' => 1,\n                    'name' => 'Primary Site',\n                    'code' => 'primary',\n                    'is_primary' => true,\n                    'is_enabled' => true,\n                    'is_enabled_edit' => true,\n                    'is_custom_url' => true,\n                    'app_url' => 'https://bacon.octobercms.tld',\n                    'allow_hosts' => [],\n                ]),\n                new SiteDefinition([\n                    'id' => 2,\n                    'name' => 'English Site',\n                    'code' => 'english',\n                    'is_primary' => false,\n                    'is_enabled' => true,\n                    'is_enabled_edit' => true,\n                    'is_custom_url' => true,\n                    'app_url' => 'https://eggs.octobercms.tld',\n                    'is_prefixed' => true,\n                    'route_prefix' => '/en',\n                    'allow_hosts' => [],\n                ]),\n                new SiteDefinition([\n                    'id' => 3,\n                    'name' => 'French Site',\n                    'code' => 'french',\n                    'is_primary' => false,\n                    'is_enabled' => true,\n                    'is_enabled_edit' => true,\n                    'is_custom_url' => true,\n                    'app_url' => 'https://eggs.octobercms.tld',\n                    'is_prefixed' => true,\n                    'route_prefix' => '/fr',\n                    'allow_hosts' => [],\n                ])\n            ]);\n        });\n\n        $manager = SiteManager::instance();\n        $this->setProtectedProperty($manager, 'sites', $fixture);\n\n        $site = $manager->getSiteFromRequest('https://bacon.octobercms.tld/', '/');\n        $this->assertEquals(1, $site->id);\n        $this->assertFalse($site->isFallbackMatch);\n\n        $site = $manager->getSiteFromRequest('https://eggs.octobercms.tld/', '/en');\n        $this->assertEquals(2, $site->id);\n        $this->assertFalse($site->isFallbackMatch);\n\n        $site = $manager->getSiteFromRequest('https://eggs.octobercms.tld/', '/fr');\n        $this->assertEquals(3, $site->id);\n        $this->assertFalse($site->isFallbackMatch);\n\n        $site = $manager->getSiteFromRequest('https://eggs.octobercms.tld/', '');\n        $this->assertTrue($site->isFallbackMatch);\n        $this->assertTrue($site->is_prefixed);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/classes/VersionManagerTest.php",
    "content": "<?php\n\nuse System\\Classes\\VersionManager;\n\nclass VersionManagerTest extends TestCase\n{\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path('/modules/system/tests/fixtures/plugins/october/tester/Plugin.php');\n        include_once base_path('/modules/system/tests/fixtures/plugins/october/sample/Plugin.php');\n        include_once base_path('/modules/system/tests/fixtures/plugins/october/noupdates/Plugin.php');\n    }\n\n    //\n    // Tests\n    //\n\n    public function testGetLatestFileVersion()\n    {\n        $manager = VersionManager::instance();\n        $result = self::callProtectedMethod($manager, 'getLatestFileVersion', ['October.Tester']);\n\n        $this->assertNotNull($result);\n        $this->assertEquals('1.0.5', $result);\n    }\n\n    public function testGetFileVersions()\n    {\n        $manager = VersionManager::instance();\n        $result = self::callProtectedMethod($manager, 'getFileVersions', ['October.Tester']);\n\n        $this->assertCount(5, $result);\n        $this->assertArrayHasKey('1.0.1', $result);\n        $this->assertArrayHasKey('1.0.2', $result);\n        $this->assertArrayHasKey('1.0.3', $result);\n        $this->assertArrayHasKey('1.0.4', $result);\n        $this->assertArrayHasKey('1.0.5', $result);\n\n        $sample = $result['1.0.1'];\n        $comment = array_shift($sample);\n        $this->assertEquals(\"Added some upgrade file and some seeding\", $comment);\n\n        // Test junk file\n        $result = self::callProtectedMethod($manager, 'getFileVersions', ['October.Sample']);\n        $this->assertCount(5, $result);\n        $this->assertArrayHasKey('junk', $result);\n        $this->assertArrayHasKey('1', $result);\n        $this->assertArrayHasKey('1.0.*', $result);\n        $this->assertArrayHasKey('1.0.x', $result);\n        $this->assertArrayHasKey('10.3.1', $result);\n\n        $sample = array_shift($result);\n        $comment = array_shift($sample);\n        $this->assertEquals(\"JUNK JUNK JUNK\", $comment);\n\n        // Test empty file\n        $result = self::callProtectedMethod($manager, 'getFileVersions', ['October.NoUpdates']);\n        $this->assertEmpty($result);\n    }\n\n    public function testGetNewFileVersions()\n    {\n        $manager = VersionManager::instance();\n        $result = self::callProtectedMethod($manager, 'getNewFileVersions', ['October.Tester', '1.0.3']);\n\n        $this->assertCount(2, $result);\n        $this->assertArrayHasKey('1.0.4', $result);\n        $this->assertArrayHasKey('1.0.5', $result);\n\n        // When at version 0, should return everything\n        $manager = VersionManager::instance();\n        $result = self::callProtectedMethod($manager, 'getNewFileVersions', ['October.Tester']);\n\n        $this->assertCount(5, $result);\n        $this->assertArrayHasKey('1.0.1', $result);\n        $this->assertArrayHasKey('1.0.2', $result);\n        $this->assertArrayHasKey('1.0.3', $result);\n        $this->assertArrayHasKey('1.0.4', $result);\n        $this->assertArrayHasKey('1.0.5', $result);\n    }\n\n    /**\n     * @dataProvider versionInfoProvider\n     *\n     * @param $versionInfo\n     * @param $expectedComments\n     * @param $expectedScripts\n     */\n    public function testExtractScriptsAndComments($versionInfo, $expectedComments, $expectedScripts)\n    {\n        $manager = VersionManager::instance();\n        [$comments, $scripts] = self::callProtectedMethod($manager, 'extractScriptsAndComments', [$versionInfo]);\n\n        $this->assertIsArray($comments);\n        $this->assertIsArray($scripts);\n\n        $this->assertEquals($expectedComments, $comments);\n        $this->assertEquals($expectedScripts, $scripts);\n    }\n\n    public function versionInfoProvider()\n    {\n        return [\n            [\n                'A single update comment string',\n                [\n                    'A single update comment string'\n                ],\n                []\n            ],\n            [\n                [\n                    'A classic update comment string followed by script',\n                    'update_script.php'\n                ],\n                [\n                    'A classic update comment string followed by script'\n                ],\n                [\n                    'update_script.php'\n                ]\n            ],\n            [\n                [\n                    'scripts_can_go_first.php',\n                    'An update comment string after the script',\n                ],\n                [\n                    'An update comment string after the script'\n                ],\n                [\n                    'scripts_can_go_first.php'\n                ]\n            ],\n            [\n                [\n                    'scripts_can_go_first.php',\n                    'An update comment string after the script',\n                    'scripts_can_go_anywhere.php',\n                ],\n                [\n                    'An update comment string after the script'\n                ],\n                [\n                    'scripts_can_go_first.php',\n                    'scripts_can_go_anywhere.php'\n                ]\n            ],\n            [\n                [\n                    'scripts_can_go_first.php',\n                    'The first update comment',\n                    'scripts_can_go_anywhere.php',\n                    'The second update comment',\n                ],\n                [\n                    'The first update comment',\n                    'The second update comment'\n                ],\n                [\n                    'scripts_can_go_first.php',\n                    'scripts_can_go_anywhere.php'\n                ]\n            ],\n            [\n                [\n                    'file.name.with.dots.php',\n                    'The first update comment',\n                    '1.0.2.scripts_can_go_anywhere.php',\n                    'The second update comment',\n                ],\n                [\n                    'The first update comment',\n                    'The second update comment'\n                ],\n                [\n                    'file.name.with.dots.php',\n                    '1.0.2.scripts_can_go_anywhere.php'\n                ]\n            ],\n            [\n                [\n                    'subdirectory/file.name.with.dots.php',\n                    'The first update comment',\n                    'subdirectory\\1.0.2.scripts_can_go_anywhere.php',\n                    'The second update comment',\n                ],\n                [\n                    'The first update comment',\n                    'The second update comment'\n                ],\n                [\n                    'subdirectory/file.name.with.dots.php',\n                    'subdirectory\\1.0.2.scripts_can_go_anywhere.php'\n                ]\n            ]\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/concerns/InteractsWithAuthentication.php",
    "content": "<?php namespace October\\Tests\\Concerns;\n\nuse Illuminate\\Contracts\\Auth\\Authenticatable as UserContract;\n\ntrait InteractsWithAuthentication\n{\n    /**\n     * Set the currently logged in user for the application.\n     *\n     * @param  \\Illuminate\\Contracts\\Auth\\Authenticatable  $user\n     * @param  string|null  $driver\n     * @return $this\n     */\n    public function actingAs(UserContract $user, $driver = null)\n    {\n        $this->be($user, $driver);\n\n        return $this;\n    }\n\n    /**\n     * Set the currently logged in user for the application.\n     *\n     * @param  \\Illuminate\\Contracts\\Auth\\Authenticatable  $user\n     * @param  string|null  $driver\n     * @return void\n     */\n    public function be(UserContract $user, $driver = null)\n    {\n        $this->app['auth']->setUser($user);\n    }\n\n    /**\n     * Assert that the user is authenticated.\n     *\n     * @param  string|null  $guard\n     * @return $this\n     */\n    public function assertAuthenticated($guard = null)\n    {\n        $this->assertTrue($this->isAuthenticated($guard), 'The user is not authenticated');\n\n        return $this;\n    }\n\n    /**\n     * Assert that the user is not authenticated.\n     *\n     * @param  string|null  $guard\n     * @return $this\n     */\n    public function assertGuest($guard = null)\n    {\n        $this->assertFalse($this->isAuthenticated($guard), 'The user is authenticated');\n\n        return $this;\n    }\n\n    /**\n     * Return true if the user is authenticated, false otherwise.\n     *\n     * @param  string|null  $guard\n     * @return bool\n     */\n    protected function isAuthenticated($guard = null)\n    {\n        return $this->app->make('auth')->guard($guard)->check();\n    }\n\n    /**\n     * Assert that the user is authenticated as the given user.\n     *\n     * @param  \\Illuminate\\Contracts\\Auth\\Authenticatable  $user\n     * @param  string|null  $guard\n     * @return $this\n     */\n    public function assertAuthenticatedAs($user, $guard = null)\n    {\n        $expected = $this->app->make('auth')->guard($guard)->user();\n\n        $this->assertNotNull($expected, 'The current user is not authenticated.');\n\n        $this->assertInstanceOf(\n            get_class($expected),\n            $user,\n            'The currently authenticated user is not who was expected'\n        );\n\n        $this->assertSame(\n            $expected->getAuthIdentifier(),\n            $user->getAuthIdentifier(),\n            'The currently authenticated user is not who was expected'\n        );\n\n        return $this;\n    }\n\n    /**\n     * Assert that the given credentials are valid.\n     *\n     * @param  array  $credentials\n     * @param  string|null  $guard\n     * @return $this\n     */\n    public function assertCredentials(array $credentials, $guard = null)\n    {\n        $this->assertTrue(\n            $this->hasCredentials($credentials, $guard),\n            'The given credentials are invalid.'\n        );\n\n        return $this;\n    }\n\n    /**\n     * Assert that the given credentials are invalid.\n     *\n     * @param  array  $credentials\n     * @param  string|null  $guard\n     * @return $this\n     */\n    public function assertInvalidCredentials(array $credentials, $guard = null)\n    {\n        $this->assertFalse(\n            $this->hasCredentials($credentials, $guard),\n            'The given credentials are valid.'\n        );\n\n        return $this;\n    }\n\n    /**\n     * Return true if the credentials are valid, false otherwise.\n     *\n     * @param  array  $credentials\n     * @param  string|null  $guard\n     * @return bool\n     */\n    protected function hasCredentials(array $credentials, $guard = null)\n    {\n        $provider = $this->app->make('auth')->guard($guard)->getProvider();\n\n        $user = $provider->retrieveByCredentials($credentials);\n\n        return $user && $provider->validateCredentials($user, $credentials);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/concerns/PerformsMigrations.php",
    "content": "<?php namespace October\\Tests\\Concerns;\n\nuse System\\Classes\\UpdateManager;\nuse System\\Classes\\PluginManager;\nuse Tailor\\Classes\\BlueprintIndexer;\n\ntrait PerformsMigrations\n{\n    /**\n     * @var array pluginTestCaseMigratedPlugins is a cache for storing\n     * which plugins have been migrated.\n     */\n    protected $pluginTestCaseMigratedPlugins = [];\n\n    /**\n     * migrateDatabase\n     */\n    protected function migrateDatabase()\n    {\n        // Migrate everything\n        UpdateManager::instance()->update();\n    }\n\n    /**\n     * migrateTailor\n     */\n    protected function migrateTailor()\n    {\n        // Migrate tailor\n        BlueprintIndexer::instance()->migrate();\n    }\n\n    /**\n     * migrateApp\n     */\n    protected function migrateApp()\n    {\n        $manager = UpdateManager::instance();\n\n        $manager->rollbackApp();\n\n        $manager->migrateApp();\n    }\n\n    /**\n     * migrateModules\n     */\n    protected function migrateModules()\n    {\n        // Unregister all the plugins so only the modules migrate\n        PluginManager::instance()->unloadPlugins();\n\n        // Migrate modules\n        UpdateManager::instance()->update();\n\n        // Re-register all plugins\n        PluginManager::instance()->loadPlugins();\n    }\n\n    /**\n     * migrateCurrentPlugin\n     */\n    protected function migrateCurrentPlugin()\n    {\n        // Detect plugin from test and autoload it\n        $pluginCode = $this->guessPluginCodeFromTest();\n        if ($pluginCode !== false) {\n            $this->migratePluginInternal($pluginCode, false);\n        }\n\n        // Current plugin is the app\n        if ($this->isAppCodeFromTest()) {\n            $this->migrateApp();\n        }\n    }\n\n    /**\n     * migratePlugin\n     */\n    protected function migratePlugin($code)\n    {\n        $this->migratePluginInternal($code);\n    }\n\n    /**\n     * migratePlugin since the test environment has loaded all the test plugins\n     * natively, this method will ensure the desired plugin is loaded in the system before\n     * proceeding to migrate it.\n     * @return void\n     */\n    protected function migratePluginInternal($code, $throwException = true)\n    {\n        // Ensure plugin is registered\n        $plugin = $this->loadPluginInternal($code, $throwException);\n\n        // Spin over dependencies and refresh them too\n        $this->pluginTestCaseMigratedPlugins[$code] = $plugin;\n\n        if (!empty($plugin->require)) {\n            foreach ((array) $plugin->require as $dependency) {\n                if (isset($this->pluginTestCaseMigratedPlugins[$dependency])) {\n                    continue;\n                }\n\n                $this->migratePlugin($dependency);\n            }\n        }\n\n        $manager = UpdateManager::instance();\n\n        // Rollback plugin\n        $manager->rollbackPlugin($code);\n\n        // Migrate plugin\n        $manager->migratePlugin($code);\n    }\n\n    /**\n     * runPluginRefreshCommand\n     * @deprecated use migratePlugin()\n     */\n    protected function runPluginRefreshCommand($code, $throwException = true)\n    {\n        $this->migratePlugin($code, $throwException);\n    }\n\n    /**\n     * runOctoberMigrateCommand\n     * @deprecated use migrateDatabase()\n     */\n    protected function runOctoberMigrateCommand()\n    {\n        $this->migrateDatabase();\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/concerns/PerformsRegistrations.php",
    "content": "<?php namespace October\\Tests\\Concerns;\n\nuse System\\Classes\\PluginManager;\nuse Exception;\n\ntrait PerformsRegistrations\n{\n    /**\n     * @var array pluginTestCaseLoadedPlugins is a cache for storing\n     * which plugins have been loaded.\n     */\n    protected $pluginTestCaseLoadedPlugins = [];\n\n    /**\n     * loadCurrentPlugin\n     */\n    protected function loadCurrentPlugin()\n    {\n        // Detect plugin from test\n        $pluginCode = $this->guessPluginCodeFromTest();\n        $toLoad = [];\n\n        if ($pluginCode !== false) {\n            // Load without booting to find dependencies\n            $plugin = $this->loadPluginInternal($pluginCode, false);\n\n            // Load dependencies first\n            if (!empty($plugin->require)) {\n                foreach ((array) $plugin->require as $dependency) {\n                    $toLoad[] = $dependency;\n                }\n            }\n\n            // Load this plugin last\n            $toLoad[] = $pluginCode;\n\n            // Load in correct order\n            $this->loadPlugins($toLoad);\n        }\n\n        return $this->pluginTestCaseLoadedPlugins[$pluginCode] ?? null;\n    }\n\n    /**\n     * loadAllPlugins found in the system\n     */\n    protected function loadAllPlugins()\n    {\n        // Get the plugin manager\n        $pluginManager = PluginManager::instance();\n\n        // Register the plugins to make features like file configuration available\n        $pluginManager->registerAll(true);\n\n        // Boot all the plugins to test with dependencies of this plugin\n        $pluginManager->bootAll(true);\n    }\n\n    /**\n     * loadPlugin loads a single plugin\n     */\n    protected function loadPlugin($code = null)\n    {\n        if ($code === null) {\n            $code = $this->guessPluginCodeFromTest();\n        }\n\n        $this->loadPlugins([$code]);\n\n        return $this->pluginTestCaseLoadedPlugins[$code] ?? null;\n    }\n\n    /**\n     * loadPlugins loads multiple plugins in their correct order\n     */\n    protected function loadPlugins($codes)\n    {\n        $pluginInfo = [];\n        foreach ($codes as $code) {\n            $cached = isset($this->pluginTestCaseLoadedPlugins[$code]);\n\n            if (!$cached) {\n                $plugin = $this->loadPluginInternal($code);\n                $this->pluginTestCaseLoadedPlugins[$code] = $plugin;\n            }\n\n            // Add to array\n            $pluginInfo[] = [$this->pluginTestCaseLoadedPlugins[$code], $code, $cached];\n        }\n\n        // Get the plugin manager\n        $pluginManager = PluginManager::instance();\n\n        // Register plugins first\n        foreach ($pluginInfo as $info)  {\n            [$pluginObj, $pluginCode, $fromCache] = $info;\n\n            // Prevent double load\n            if (!$fromCache) {\n                $pluginManager->registerPlugin($pluginObj, $pluginCode);\n            }\n        }\n\n        // Boot plugins second\n        foreach ($pluginInfo as $info)  {\n            [$pluginObj, $pluginCode, $fromCache] = $info;\n\n            // Prevent double load\n            if (!$fromCache) {\n                $pluginManager->bootPlugin($pluginObj, $pluginCode);\n            }\n        }\n    }\n\n    /**\n     * loadPluginInternal\n     */\n    protected function loadPluginInternal($code, $throwException = true)\n    {\n        if (!preg_match('/^[\\w+]*\\.[\\w+]*$/', $code)) {\n            if (!$throwException) {\n                return;\n            }\n            throw new Exception(sprintf('Invalid plugin code: \"%s\"', $code));\n        }\n\n        $manager = PluginManager::instance();\n        $plugin = $manager->findByIdentifier($code);\n\n        // First time seeing this plugin, load it up\n        if (!$plugin) {\n            $namespace = str_replace('.', '\\\\', strtolower($code));\n            $path = array_get($manager->getPluginNamespaces(), $namespace);\n\n            if (!$path) {\n                if (!$throwException) {\n                    return;\n                }\n                throw new Exception(sprintf('Unable to find plugin with code: \"%s\"', $code));\n            }\n\n            // Register manually with the plugin manager\n            $plugin = $manager->loadPlugin($namespace, plugins_path($path));\n        }\n\n        return $plugin;\n    }\n\n    /**\n     * getPluginObject\n     * @deprecated use loadPlugin()\n     */\n    protected function getPluginObject($code = null)\n    {\n        return $this->loadPlugin($code);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/AttachManyModelTest.php",
    "content": "<?php\n\nuse System\\Models\\File as FileModel;\nuse Database\\Tester\\Models\\User;\n\nclass AttachManyModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/User.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testDeleteFlagDestroyRelationship()\n    {\n        Model::unguard();\n        $user = User::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        Model::reguard();\n\n        $this->assertEmpty($user->photos);\n\n        $user->photos()->createFromFile(base_path('modules/system/tests/fixtures/plugins/database/tester/assets/images/avatar.png'));\n        $user->unsetRelations();\n        $this->assertNotEmpty($user->photos);\n\n        $photo = $user->photos->first();\n        $photoId = $photo->id;\n\n        $user->photos()->remove($photo);\n        $this->assertNull(FileModel::find($photoId));\n    }\n\n    public function testDeleteFlagDeleteModel()\n    {\n        Model::unguard();\n        $user = User::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        Model::reguard();\n\n        $this->assertEmpty($user->photos);\n        $user->photos()->createFromFile(base_path('modules/system/tests/fixtures/plugins/database/tester/assets/images/avatar.png'));\n        $user->unsetRelations();\n        $this->assertNotEmpty($user->photos);\n\n        $photo = $user->photos->first();\n        $this->assertNotNull($photo);\n        $photoId = $photo->id;\n\n        $user->delete();\n        $this->assertNull(FileModel::find($photoId));\n    }\n\n    public function testRemovalProtection()\n    {\n        Model::unguard();\n        $user1 = User::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $user2 = User::create(['name' => 'Jerry', 'email' => 'jerry@email.tld']);\n        Model::reguard();\n\n        $user1->photos()->createFromFile(base_path('modules/system/tests/fixtures/plugins/database/tester/assets/images/avatar.png'));\n        $user2->photos()->createFromFile(base_path('modules/system/tests/fixtures/plugins/database/tester/assets/images/avatar.png'));\n\n        $user1Photo = $user1->photos->first();\n        $user1PhotoId = $user1Photo->id;\n\n        // Attempt to remove user 1's photo from user 2\n        $user2->photos()->remove($user1Photo);\n        $this->assertNotNull(FileModel::find($user1PhotoId));\n\n        $user2Photo = $user2->photos->first();\n        $this->assertNotNull($user2Photo);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/AttachOneModelTest.php",
    "content": "<?php\n\nuse System\\Models\\File as FileModel;\nuse Database\\Tester\\Models\\User;\nuse Database\\Tester\\Models\\SoftDeleteUser;\nuse Symfony\\Component\\HttpFoundation\\File\\UploadedFile;\n\nclass AttachOneModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path('modules/system/tests/fixtures/plugins/database/tester/models/User.php');\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testSetRelationValue()\n    {\n        Model::unguard();\n        $user = User::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $user2 = User::create(['name' => 'Joe', 'email' => 'joe@email.tld']);\n        Model::reguard();\n\n        // Set by model object\n        $file = $user->avatar()->make();\n        $file->fromFile(base_path('modules/system/tests/fixtures/plugins/database/tester/assets/images/avatar.png'));\n        $user->avatar = $file;\n        $user->save();\n\n        $this->assertNotNull($user->avatar);\n        $this->assertEquals('avatar.png', $user->avatar->file_name);\n\n        // Set by Uploaded file\n        $sample = $user->avatar;\n        $upload = new UploadedFile(\n            base_path('modules/system/tests/fixtures/plugins/database/tester/assets/images/avatar.png'),\n            $sample->file_name,\n            $sample->content_type,\n            null,\n            true\n        );\n\n        $user2->avatar = $upload;\n\n        // The file is prepped but not yet committed, this is for validation\n        $this->assertNotNull($user2->avatar);\n        $this->assertEquals($upload, $user2->avatar);\n\n        // Commit the file and it should snap to a File model\n        $user2->save();\n\n        $this->assertNotNull($user2->avatar);\n        $this->assertEquals('avatar.png', $user2->avatar->file_name);\n    }\n\n    public function testDeleteFlagDestroyRelationship()\n    {\n        Model::unguard();\n        $user = User::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        Model::reguard();\n\n        $this->assertNull($user->avatar);\n        $user->avatar()->createFromFile(base_path('modules/system/tests/fixtures/plugins/database/tester/assets/images/avatar.png'));\n        $user->unsetRelations();\n        $this->assertNotNull($user->avatar);\n\n        $avatar = $user->avatar;\n        $avatarId = $avatar->id;\n\n        $user->avatar()->remove($avatar);\n        $this->assertNull(FileModel::find($avatarId));\n    }\n\n    public function testDeleteFlagDeleteModel()\n    {\n        Model::unguard();\n        $user = User::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        Model::reguard();\n\n        $this->assertNull($user->avatar);\n        $user->avatar()->createFromFile(base_path('modules/system/tests/fixtures/plugins/database/tester/assets/images/avatar.png'));\n        $user->unsetRelations();\n        $this->assertNotNull($user->avatar);\n\n        $avatarId = $user->avatar->id;\n        $user->delete();\n        $this->assertNull(FileModel::find($avatarId));\n    }\n\n    public function testDeleteFlagSoftDeleteModel()\n    {\n        Model::unguard();\n        $user = SoftDeleteUser::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        Model::reguard();\n\n        $user->avatar()->createFromFile(base_path('modules/system/tests/fixtures/plugins/database/tester/assets/images/avatar.png'));\n        $this->assertNotNull($user->avatar);\n\n        $avatarId = $user->avatar->id;\n        $user->delete();\n        $this->assertNotNull(FileModel::find($avatarId));\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/BelongsToManyModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Category;\nuse Database\\Tester\\Models\\Post as PostModel;\nuse Database\\Tester\\Models\\Role;\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\Product;\n\nclass BelongsToManyModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path('modules/system/tests/fixtures/plugins/database/tester/models/Role.php');\n        include_once base_path('modules/system/tests/fixtures/plugins/database/tester/models/Author.php');\n        include_once base_path('modules/system/tests/fixtures/plugins/database/tester/models/Category.php');\n        include_once base_path('modules/system/tests/fixtures/plugins/database/tester/models/Post.php');\n        include_once base_path('modules/system/tests/fixtures/plugins/database/tester/models/Product.php');\n        include_once base_path('modules/system/tests/fixtures/plugins/database/tester/models/Tag.php');\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testSetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $role1 = Role::create(['name' => \"Designer\", 'description' => \"Quality\"]);\n        $role2 = Role::create(['name' => \"Programmer\", 'description' => \"Speed\"]);\n        $role3 = Role::create(['name' => \"Manager\", 'description' => \"Budget\"]);\n        Model::reguard();\n\n        // Add/remove to collection\n        $this->assertFalse($author->roles->contains($role1->id));\n        $author->roles()->add($role1);\n        $author->roles()->add($role2);\n        $this->assertTrue($author->roles->contains($role1->id));\n        $this->assertTrue($author->roles->contains($role2->id));\n\n        // Set by Model object\n        $author->roles = $role1;\n        $this->assertEquals(1, $author->roles->count());\n        $this->assertEquals('Designer', $author->roles->first()->name);\n\n        $author->roles = [$role1, $role2, $role3];\n        $this->assertEquals(3, $author->roles->count());\n\n        // Set by primary key\n        $author->roles = $role2->id;\n        $this->assertEquals(1, $author->roles->count());\n        $this->assertEquals([$role2->id], $author->getRelationSimpleValue('roles'));\n        $this->assertEquals('Programmer', $author->roles->first()->name);\n\n        $author->roles = [$role2->id, $role3->id];\n        $this->assertEquals(2, $author->roles->count());\n\n        // Nullify\n        $author->roles = null;\n        $this->assertEquals(0, $author->roles->count());\n\n        // Extra nullify checks (still exists in DB until saved)\n        $author->unsetRelation('roles');\n        $this->assertEquals(2, $author->roles->count());\n        $author->save();\n        $author->unsetRelation('roles');\n        $this->assertEquals(0, $author->roles->count());\n\n        // Deferred in memory\n        $author->roles = [$role2->id, $role3->id];\n        $this->assertEquals(2, $author->roles->count());\n        $this->assertEquals('Programmer', $author->roles->first()->name);\n    }\n\n    public function testGetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $role1 = Role::create(['name' => \"Designer\", 'description' => \"Quality\"]);\n        $role2 = Role::create(['name' => \"Programmer\", 'description' => \"Speed\"]);\n        Model::reguard();\n\n        $author->roles()->add($role1);\n        $author->roles()->add($role2);\n\n        $this->assertEquals([$role1->id, $role2->id], $author->getRelationSimpleValue('roles'));\n    }\n\n    public function testDeferredBinding()\n    {\n        $sessionKey = uniqid('session_key', true);\n\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $role1 = Role::create(['name' => \"Designer\", 'description' => \"Quality\"]);\n        $role2 = Role::create(['name' => \"Programmer\", 'description' => \"Speed\"]);\n        Model::reguard();\n\n        // Deferred add\n        $author->roles()->add($role1, $sessionKey);\n        $author->roles()->add($role2, $sessionKey);\n        $this->assertEmpty($author->roles);\n\n        $this->assertEquals(0, $author->roles()->count());\n        $this->assertEquals(2, $author->roles()->withDeferred($sessionKey)->count());\n\n        // Get simple value (explicit)\n        $author->unsetRelations();\n        $relatedIds = $author->roles()->withDeferred($sessionKey)->pluck('id')->all();\n        $this->assertEquals([$role1->id, $role2->id], $relatedIds);\n\n        // Commit deferred\n        $author->save(['sessionKey' => $sessionKey]);\n        $this->assertEquals(2, $author->roles()->count());\n        $this->assertEquals('Designer', $author->roles->first()->name);\n\n        // New session\n        $sessionKey = uniqid('session_key', true);\n\n        // Deferred remove\n        $author->roles()->remove($role1, $sessionKey);\n        $author->roles()->remove($role2, $sessionKey);\n        $this->assertEquals(2, $author->roles()->count());\n        $this->assertEquals(0, $author->roles()->withDeferred($sessionKey)->count());\n        $this->assertEquals('Designer', $author->roles->first()->name);\n\n        // Commit deferred\n        $author->save(['sessionKey' => $sessionKey]);\n        $this->assertEquals(0, $author->roles()->count());\n        $this->assertEquals(0, $author->roles->count());\n    }\n\n    public function testDeferredBindingWithPivot()\n    {\n        $sessionKey = uniqid('session_key', true);\n\n        Model::unguard();\n        $category = Category::create(['name' => 'News']);\n        $post1 = PostModel::create(['title' => 'First post']);\n        $post2 = PostModel::create(['title' => 'Second post']);\n        Model::reguard();\n\n        // Deferred add\n        $category->posts()->add($post1, $sessionKey, [\n            'category_name' => $category->name . ' in pivot',\n            'post_name' => $post1->title . ' in pivot',\n        ]);\n        $category->posts()->add($post2, $sessionKey, [\n            'category_name' => $category->name . ' in pivot',\n            'post_name' => $post2->title . ' in pivot',\n        ]);\n        $this->assertEmpty($category->posts);\n\n        $this->assertEquals(0, $category->posts()->count());\n        $this->assertEquals(2, $category->posts()->withDeferred($sessionKey)->count());\n\n        // Get simple value (explicit)\n        $category->unsetRelations();\n        $relatedIds = $category->posts()->withDeferred($sessionKey)->pluck('id')->all();\n        $this->assertEquals([$post1->id, $post2->id], $relatedIds);\n\n        // Commit deferred\n        $category->save(['sessionKey' => $sessionKey]);\n        $this->assertEquals(2, $category->posts()->count());\n        $this->assertEquals('First post', $category->posts->first()->title);\n        $this->assertEquals('Second post', $category->posts->last()->title);\n        $this->assertEquals('First post in pivot', $category->posts->first()->pivot->post_name);\n        $this->assertEquals('Second post in pivot', $category->posts->last()->pivot->post_name);\n        $this->assertEquals('News in pivot', $category->posts->first()->pivot->category_name);\n        $this->assertEquals('News in pivot', $category->posts->last()->pivot->category_name);\n\n        // New session\n        $sessionKey = uniqid('session_key', true);\n\n        // Deferred remove\n        $category->posts()->remove($post1, $sessionKey);\n        $category->posts()->remove($post2, $sessionKey);\n        $this->assertEquals(2, $category->posts()->count());\n        $this->assertEquals(0, $category->posts()->withDeferred($sessionKey)->count());\n        $this->assertEquals('First post', $category->posts->first()->title);\n        $this->assertEquals('Second post', $category->posts->last()->title);\n        $this->assertEquals('First post in pivot', $category->posts->first()->pivot->post_name);\n        $this->assertEquals('Second post in pivot', $category->posts->last()->pivot->post_name);\n        $this->assertEquals('News in pivot', $category->posts->first()->pivot->category_name);\n        $this->assertEquals('News in pivot', $category->posts->last()->pivot->category_name);\n\n        // Commit deferred\n        $category->save(['sessionKey' => $sessionKey]);\n        $this->assertEquals(0, $category->posts()->count());\n        $this->assertEquals(0, $category->posts->count());\n    }\n\n    public function testDetachAfterDelete()\n    {\n        // Needed for other \"delete\" events\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/User.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/EventLog.php';\n\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $role1 = Role::create(['name' => \"Designer\", 'description' => \"Quality\"]);\n        $role2 = Role::create(['name' => \"Programmer\", 'description' => \"Speed\"]);\n        $role3 = Role::create(['name' => \"Manager\", 'description' => \"Budget\"]);\n        Model::reguard();\n\n        $author->roles()->add($role1);\n        $author->roles()->add($role2);\n        $author->roles()->add($role3);\n        $this->assertEquals(3, Db::table('database_tester_authors_roles')->where('author_id', $author->id)->count());\n\n        $author->delete();\n        $this->assertEquals(0, Db::table('database_tester_authors_roles')->where('author_id', $author->id)->count());\n    }\n\n    public function testConditionsWithPivotAttributes()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $role1 = Role::create(['name' => \"Designer\", 'description' => \"Quality\"]);\n        $role2 = Role::create(['name' => \"Programmer\", 'description' => \"Speed\"]);\n        $role3 = Role::create(['name' => \"Manager\", 'description' => \"Budget\"]);\n        Model::reguard();\n\n        $author->roles()->add($role1, null, ['is_executive' => 1]);\n        $author->roles()->add($role2, null, ['is_executive' => 1]);\n        $author->roles()->add($role3, null, ['is_executive' => 0]);\n\n        $this->assertEquals([1, 2], $author->executive_authors->pluck('id')->all());\n        $this->assertEquals([1, 2], $author->executive_authors()->pluck('id')->all());\n        $this->assertEquals([1, 2], $author->executive_authors()->get()->pluck('id')->all());\n    }\n\n    public function testCustomPivotKeys()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld', 'code' => 'STEVIE']);\n        $product1 = Product::create(['name' => \"Stevie Goes to the Mall\", 'code' => \"SKU001\"]);\n        $product2 = Product::create(['name' => \"Stevie Goes Camping\", 'code' => \"SKU002\"]);\n        $product3 = Product::create(['name' => \"Stevie Cooks Dinner\", 'code' => \"SKU003\"]);\n        Model::reguard();\n\n        $author->products()->add($product1);\n        $author->products()->add($product2);\n        $author->products()->add($product3);\n\n        $result = Db::table('database_tester_authors_products')->get();\n        $this->assertEquals($result[0]->author_code, 'STEVIE');\n        $this->assertEquals($result[0]->product_code, 'SKU001');\n        $this->assertEquals($result[1]->author_code, 'STEVIE');\n        $this->assertEquals($result[1]->product_code, 'SKU002');\n        $this->assertEquals($result[2]->author_code, 'STEVIE');\n        $this->assertEquals($result[2]->product_code, 'SKU003');\n        $this->assertEquals([1, 2, 3], $author->products->pluck('id')->all());\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/BelongsToModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Post;\nuse Database\\Tester\\Models\\Author;\n\nclass BelongsToModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testSetRelationValue()\n    {\n        Model::unguard();\n        $post = Post::create(['title' => \"First post\", 'description' => \"Yay!!\"]);\n        $author1 = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $author2 = Author::create(['name' => 'Louie', 'email' => 'louie@email.tld']);\n        $author3 = Author::make(['name' => 'Charlie', 'email' => 'charlie@email.tld']);\n        Model::reguard();\n\n        // Set by Model object\n        $post->author = $author1;\n        $this->assertEquals($author1->id, $post->author_id);\n        $this->assertEquals('Stevie', $post->author->name);\n\n        // Set by primary key\n        $post->author = $author2->id;\n        $this->assertEquals($author2->id, $post->author_id);\n        $this->assertEquals($author2->id, $post->author->id);\n        $this->assertEquals('Louie', $post->author->name);\n\n        // Nullify\n        $post->author = null;\n        $this->assertNull($post->author_id);\n        $this->assertNull($post->author);\n\n        // Deferred in memory\n        $post->author = $author3;\n        $this->assertEquals('Charlie', $post->author->name);\n        $this->assertNull($post->author_id);\n        $author3->save();\n        $this->assertEquals($author3->id, $post->author_id);\n    }\n\n    public function testGetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $post = Post::make(['title' => \"First post\", 'author_id' => $author->id]);\n        Model::reguard();\n\n        $this->assertEquals($author->id, $post->getRelationSimpleValue('author'));\n    }\n\n    public function testDeferredBinding()\n    {\n        $sessionKey = uniqid('session_key', true);\n\n        Model::unguard();\n        $post = Post::make(['title' => \"First post\"]);\n        $author = Author::create(['name' => 'Stevie']);\n        Model::reguard();\n\n        // Deferred add\n        $post->author()->add($author, $sessionKey);\n        $this->assertNull($post->author_id);\n        $this->assertNull($post->author);\n\n        $this->assertEquals(0, $post->author()->count());\n        $this->assertEquals(1, $post->author()->withDeferred($sessionKey)->count());\n\n        // Commit deferred\n        $post->save(['sessionKey' => $sessionKey]);\n        $this->assertEquals(1, $post->author()->count());\n        $this->assertEquals($author->id, $post->author_id);\n        $this->assertEquals('Stevie', $post->author->name);\n\n        // New session\n        $sessionKey = uniqid('session_key', true);\n\n        // Deferred remove\n        $post->author()->remove($author, $sessionKey);\n        $this->assertEquals(1, $post->author()->count());\n        $this->assertEquals(0, $post->author()->withDeferred($sessionKey)->count());\n        $this->assertEquals($author->id, $post->author_id);\n        $this->assertEquals('Stevie', $post->author->name);\n\n        // Commit deferred\n        $post->save(['sessionKey' => $sessionKey]);\n        $this->assertEquals(0, $post->author()->count());\n        $this->assertNull($post->author_id);\n        $this->assertNull($post->author);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/DeferredBindingTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Post;\nuse Database\\Tester\\Models\\Author;\nuse October\\Rain\\Database\\Models\\DeferredBinding;\n\nclass DeferredBindingTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testNegatedBinding()\n    {\n        $sessionKey = uniqid('session_key', true);\n        DeferredBinding::truncate();\n\n        Model::unguard();\n        $author = Author::make(['name' => 'Stevie']);\n        $post = Post::create(['title' => \"First post\"]);\n        $post2 = Post::create(['title' => \"Second post\"]);\n        Model::reguard();\n\n        $author->posts()->add($post, $sessionKey);\n        $this->assertEquals(1, DeferredBinding::count());\n\n        // Skip repeat bindings\n        $author->posts()->add($post, $sessionKey);\n        $this->assertEquals(1, DeferredBinding::count());\n\n        // Remove add-delete pairs\n        $author->posts()->remove($post, $sessionKey);\n        $this->assertEquals(0, DeferredBinding::count());\n\n        // Multi ball\n        $sessionKey = uniqid('session_key', true);\n        $author->posts()->add($post, $sessionKey);\n        $author->posts()->add($post, $sessionKey);\n        $author->posts()->add($post, $sessionKey);\n        $author->posts()->add($post, $sessionKey);\n        $author->posts()->add($post2, $sessionKey);\n        $author->posts()->add($post2, $sessionKey);\n        $author->posts()->add($post2, $sessionKey);\n        $author->posts()->add($post2, $sessionKey);\n        $author->posts()->add($post2, $sessionKey);\n        $this->assertEquals(2, DeferredBinding::count());\n\n        // Clean up add-delete pairs\n        $author->posts()->remove($post, $sessionKey);\n        $author->posts()->remove($post2, $sessionKey);\n        $this->assertEquals(0, DeferredBinding::count());\n\n        // Double negative\n        $author->posts()->remove($post, $sessionKey);\n        $author->posts()->remove($post2, $sessionKey);\n        $this->assertEquals(2, DeferredBinding::count());\n\n        // Skip repeat bindings\n        $author->posts()->remove($post, $sessionKey);\n        $author->posts()->remove($post2, $sessionKey);\n        $this->assertEquals(2, DeferredBinding::count());\n\n        // Clean up add-delete pairs again\n        $author->posts()->add($post, $sessionKey);\n        $author->posts()->add($post2, $sessionKey);\n        $this->assertEquals(0, DeferredBinding::count());\n    }\n\n    public function testCancelBinding()\n    {\n        $sessionKey = uniqid('session_key', true);\n        DeferredBinding::truncate();\n\n        Model::unguard();\n        $author = Author::make(['name' => 'Stevie']);\n        $post = Post::create(['title' => \"First post\"]);\n        Model::reguard();\n\n        $author->posts()->add($post, $sessionKey);\n        $this->assertEquals(1, DeferredBinding::count());\n\n        $author->cancelDeferred($sessionKey);\n        $this->assertEquals(0, DeferredBinding::count());\n    }\n\n    public function testCommitBinding()\n    {\n        $sessionKey = uniqid('session_key', true);\n        DeferredBinding::truncate();\n\n        Model::unguard();\n        $author = Author::make(['name' => 'Stevie']);\n        $post = Post::create(['title' => \"First post\"]);\n        Model::reguard();\n\n        $author->posts()->add($post, $sessionKey);\n        $this->assertEquals(1, DeferredBinding::count());\n\n        $author->commitDeferred($sessionKey);\n        $this->assertEquals(0, DeferredBinding::count());\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/DoubleMorphTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Post;\nuse Database\\Tester\\Models\\Role;\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\Category;\n\nclass DoubleMorphTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Role.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Category.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testSetRelationValue()\n    {\n        Model::unguard();\n        $post = Post::create(['title' => 'First post']);\n        $category1 = Category::create(['name' => 'News']);\n        $category2 = Category::create(['name' => 'Great']);\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $role1 = Role::create(['name' => \"Designer\", 'description' => \"Quality\"]);\n        $role2 = Role::create(['name' => \"Actor\", 'description' => \"Excellent\"]);\n        Model::reguard();\n\n        $post->double_categories()->attach($category1, ['host_type' => Post::class, 'entity_type' => Category::class]);\n        $post->double_categories()->attach($category2, ['host_type' => Post::class, 'entity_type' => Category::class]);\n\n        $this->assertEquals(2, $post->double_categories->count());\n        $this->assertTrue($post->double_categories->contains($category1->id));\n        $this->assertTrue($post->double_categories->contains($category2->id));\n\n        $author->double_roles()->attach($role1, ['host_type' => Author::class, 'entity_type' => Role::class]);\n        $author->double_roles()->attach($role2, ['host_type' => Author::class, 'entity_type' => Role::class]);\n\n        $this->assertEquals(2, $author->double_roles->count());\n        $this->assertTrue($author->double_roles->contains($role1->id));\n        $this->assertTrue($author->double_roles->contains($role2->id));\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/HasManyModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\Post;\nuse October\\Rain\\Database\\Collection;\n\nclass HasManyModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testSetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $post1 = Post::create(['title' => \"First post\", 'description' => \"Yay!!\"]);\n        $post2 = Post::create(['title' => \"Second post\", 'description' => \"Woohoo!!\"]);\n        $post3 = Post::create(['title' => \"Third post\", 'description' => \"Yipiee!!\"]);\n        $post4 = Post::make(['title' => \"Fourth post\", 'description' => \"Hooray!!\"]);\n        Model::reguard();\n\n        // Set by Model object\n        $author->posts = new Collection([$post1, $post2]);\n        $author->save();\n        $this->assertEquals($author->id, $post1->author_id);\n        $this->assertEquals($author->id, $post2->author_id);\n        $this->assertEquals([\n            'First post',\n            'Second post'\n        ], $author->posts->pluck('title')->all());\n\n        // Set by primary key\n        $postId = $post3->id;\n        $author->posts = $postId;\n        $author->save();\n        $post3 = Post::find($postId);\n        $this->assertEquals($author->id, $post3->author_id);\n        $this->assertEquals([\n            'Third post'\n        ], $author->posts->pluck('title')->all());\n\n        // Nullify\n        $author->posts = null;\n        $author->save();\n        $post3 = Post::find($postId);\n        $this->assertNull($post3->author_id);\n        $this->assertNull($post3->author);\n\n        // Deferred in memory\n        $author->posts = $post4;\n        $this->assertEquals($author->id, $post4->author_id);\n        $this->assertEquals([\n            'Fourth post'\n        ], $author->posts->pluck('title')->all());\n    }\n\n    public function testGetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $post1 = Post::create(['title' => \"First post\", 'author_id' => $author->id]);\n        $post2 = Post::create(['title' => \"Second post\", 'author_id' => $author->id]);\n        Model::reguard();\n\n        $this->assertEquals([$post1->id, $post2->id], $author->getRelationSimpleValue('posts'));\n    }\n\n    public function testDeferredBinding()\n    {\n        $sessionKey = uniqid('session_key', true);\n\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $post = Post::create(['title' => \"First post\", 'description' => \"Yay!!\"]);\n        Model::reguard();\n\n        $postId = $post->id;\n\n        // Deferred add\n        $author->posts()->add($post, $sessionKey);\n        $this->assertNull($post->author_id);\n        $this->assertEmpty($author->posts);\n\n        $this->assertEquals(0, $author->posts()->count());\n        $this->assertEquals(1, $author->posts()->withDeferred($sessionKey)->count());\n\n        // Commit deferred\n        $author->save(['sessionKey' => $sessionKey]);\n        $post = Post::find($postId);\n        $this->assertEquals(1, $author->posts()->count());\n        $this->assertEquals($author->id, $post->author_id);\n        $this->assertEquals([\n            'First post'\n        ], $author->posts->pluck('title')->all());\n\n        // New session\n        $sessionKey = uniqid('session_key', true);\n\n        // Deferred remove\n        $author->posts()->remove($post, $sessionKey);\n        $this->assertEquals(1, $author->posts()->count());\n        $this->assertEquals(0, $author->posts()->withDeferred($sessionKey)->count());\n        $this->assertEquals($author->id, $post->author_id);\n        $this->assertEquals([\n            'First post'\n        ], $author->posts->pluck('title')->all());\n\n        // Commit deferred\n        $author->save(['sessionKey' => $sessionKey]);\n        $post = Post::find($postId);\n        $this->assertEquals(0, $author->posts()->count());\n        $this->assertNull($post->author_id);\n        $this->assertEmpty($author->posts);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/HasManyThroughModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\Country;\nuse Database\\Tester\\Models\\Post;\nuse October\\Rain\\Database\\Collection;\n\nclass HasManyThroughModelTest extends PluginTestCase\n{\n    public function setUp() : void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Country.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testGet()\n    {\n        Model::unguard();\n        $country = Country::create(['name' => 'Australia']);\n        $author1 = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $author2 = Author::create(['name' => 'Louie', 'email' => 'louie@email.tld']);\n        $post1 = Post::create(['title' => \"First post\", 'description' => \"Yay!!\"]);\n        $post2 = Post::create(['title' => \"Second post\", 'description' => \"Woohoo!!\"]);\n        $post3 = Post::create(['title' => \"Third post\", 'description' => \"Yipiee!!\"]);\n        $post4 = Post::make(['title' => \"Fourth post\", 'description' => \"Hooray!!\"]);\n        Model::reguard();\n\n        // Set data\n        $author1->country = $country;\n        $author2->country = $country;\n\n        $author1->posts = new Collection([$post1, $post2]);\n        $author2->posts = new Collection([$post3, $post4]);\n\n        $author1->save();\n        $author2->save();\n\n        $country = Country::with([\n            'posts'\n        ])->find($country->id);\n\n        $this->assertEquals([\n            $post1->id,\n            $post2->id,\n            $post3->id,\n            $post4->id\n        ], $country->posts->pluck('id')->toArray());\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/HasOneModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\Phone;\n\nclass HasOneModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Phone.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testSetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $phone1 = Phone::create(['number' => '0404040404']);\n        $phone2 = Phone::create(['number' => '0505050505']);\n        $phone3 = Phone::make(['number' => '0606060606']);\n        Model::reguard();\n\n        // Set by Model object\n        $author->phone = $phone1;\n        $author->save();\n        $this->assertEquals($author->id, $phone1->author_id);\n        $this->assertEquals('0404040404', $author->phone->number);\n\n        // Double check\n        $phone1 = Phone::find($phone1->id);\n        $this->assertEquals($author->id, $phone1->author_id);\n\n        // Set by primary key\n        $phoneId = $phone2->id;\n        $author->phone = $phoneId;\n        $author->save();\n        $phone2 = Phone::find($phoneId);\n        $this->assertEquals($author->id, $phone2->author_id);\n        $this->assertEquals('0505050505', $author->phone->number);\n\n        // Ensure relationship is \"stolen\" from first model\n        $phone1 = Phone::find($phone1->id);\n        $this->assertNotEquals($author->id, $phone1->author_id);\n\n        // Nullify\n        $author->phone = null;\n        $author->save();\n        $phone2 = Phone::find($phoneId);\n        $this->assertNull($phone2->author_id);\n        $this->assertNull($phone2->author);\n\n        // Deferred in memory\n        $author->phone = $phone3;\n        $this->assertEquals('0606060606', $author->phone->number);\n        $this->assertEquals($author->id, $phone3->author_id);\n    }\n\n    public function testSetRelationValueTwice()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $phone = Phone::create(['number' => '0505050505']);\n        Model::reguard();\n\n        $phoneId = $phone->id;\n        $author->phone = $phoneId;\n        $author->save();\n\n        $author->phone = $phoneId;\n        $author->save();\n\n        $phone = Phone::find($phoneId);\n        $this->assertEquals($author->id, $phone->author_id);\n        $this->assertEquals('0505050505', $author->phone->number);\n    }\n\n    public function testGetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $phone = Phone::create(['number' => '0404040404', 'author_id' => $author->id]);\n        Model::reguard();\n\n        $this->assertEquals($phone->id, $author->getRelationSimpleValue('phone'));\n    }\n\n    public function testDeferredBinding()\n    {\n        $sessionKey = uniqid('session_key', true);\n\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $phone = Phone::create(['number' => '0404040404']);\n        Model::reguard();\n\n        $phoneId = $phone->id;\n\n        // Deferred add\n        $author->phone()->add($phone, $sessionKey);\n        $this->assertNull($phone->author_id);\n        $this->assertNull($author->phone);\n\n        $this->assertEquals(0, $author->phone()->count());\n        $this->assertEquals(1, $author->phone()->withDeferred($sessionKey)->count());\n\n        // Commit deferred\n        $author->save(['sessionKey' => $sessionKey]);\n        $phone = Phone::find($phoneId);\n        $this->assertEquals(1, $author->phone()->count());\n        $this->assertEquals($author->id, $phone->author_id);\n        $this->assertEquals('0404040404', $author->phone->number);\n\n        // New session\n        $sessionKey = uniqid('session_key', true);\n\n        // Deferred remove\n        $author->phone()->remove($phone, $sessionKey);\n        $this->assertEquals(1, $author->phone()->count());\n        $this->assertEquals(0, $author->phone()->withDeferred($sessionKey)->count());\n        $this->assertEquals($author->id, $phone->author_id);\n        $this->assertEquals('0404040404', $author->phone->number);\n\n        // Commit deferred\n        $author->save(['sessionKey' => $sessionKey]);\n        $phone = Phone::find($phoneId);\n        $this->assertEquals(0, $author->phone()->count());\n        $this->assertNull($phone->author_id);\n        $this->assertNull($author->phone);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/HasOneThroughModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\Phone;\nuse Database\\Tester\\Models\\User;\n\nclass HasOneThroughModelTest extends PluginTestCase\n{\n    public function setUp() : void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/User.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Phone.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testGet()\n    {\n        Model::unguard();\n        $phone = Phone::create(['number' => '08 1234 5678']);\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $user = User::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        Model::reguard();\n\n        // Set data\n        $author->phone = $phone;\n        $author->user = $user;\n        $author->save();\n\n        $user = User::with([\n            'phone'\n        ])->find($user->id);\n\n        $this->assertEquals($phone->id, $user->phone->id);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/ModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Post;\n\nclass ModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testCreateFirstPost()\n    {\n        Post::truncate();\n        $post = new Post;\n        $post->title = \"First post\";\n        $post->description = \"Yay!!\";\n        $post->save();\n        $this->assertEquals(1, $post->id);\n    }\n\n    public function testGuardedAttribute()\n    {\n        $this->expectException(\\Illuminate\\Database\\Eloquent\\MassAssignmentException::class);\n        $this->expectExceptionMessageMatches('/title/');\n\n        Post::create(['title' => 'Hi!', 'slug' => 'authenticity']);\n    }\n\n    public function testAddDynamicProperty()\n    {\n        $post = new Post;\n\n        $post->addDynamicProperty('myDynamicProperty', 'myDynamicPropertyValue');\n\n        // Dynamic property should not hit attributes\n        $this->assertArrayNotHasKey('myDynamicProperty', $post->attributes);\n\n        // Should be a real property\n        $this->assertTrue($post->propertyExists('myDynamicProperty'));\n        $this->assertEquals('myDynamicPropertyValue', $post->myDynamicProperty);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/MorphManyModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Tag;\nuse Database\\Tester\\Models\\Post;\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\EventLog;\nuse October\\Rain\\Database\\Collection;\n\nclass MorphManyModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Tag.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/EventLog.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testSetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $event1 = EventLog::create(['action' => \"user-created\"]);\n        $event2 = EventLog::create(['action' => \"user-updated\"]);\n        $event3 = EventLog::create(['action' => \"user-deleted\"]);\n        $event4 = EventLog::make(['action' => \"user-restored\"]);\n        Model::reguard();\n\n        // Set by Model object\n        $author->event_log = new Collection([$event1, $event2]);\n        $author->save();\n        $this->assertEquals($author->id, $event1->related_id);\n        $this->assertEquals($author->id, $event2->related_id);\n        $this->assertEquals('Database\\Tester\\Models\\Author', $event1->related_type);\n        $this->assertEquals('Database\\Tester\\Models\\Author', $event2->related_type);\n        $this->assertEquals([\n            'user-created',\n            'user-updated'\n        ], $author->event_log->pluck('action')->all());\n\n        // Set by primary key\n        $eventId = $event3->id;\n        $author->event_log = $eventId;\n        $author->save();\n        $event3 = EventLog::find($eventId);\n        $this->assertEquals($author->id, $event3->related_id);\n        $this->assertEquals('Database\\Tester\\Models\\Author', $event3->related_type);\n        $this->assertEquals([\n            'user-deleted'\n        ], $author->event_log->pluck('action')->all());\n\n        // Nullify should delete\n        $author->event_log = null;\n        $author->save();\n        $event3 = EventLog::find($eventId);\n        $this->assertNull($event3);\n\n        // Deferred in memory\n        $author->event_log = $event4;\n        $this->assertEquals($author->id, $event4->related_id);\n        $this->assertEquals('Database\\Tester\\Models\\Author', $event4->related_type);\n        $this->assertEquals([\n            'user-restored'\n        ], $author->event_log->pluck('action')->all());\n    }\n\n    public function testGetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $event1 = EventLog::create(['action' => \"user-created\", 'related_id' => $author->id, 'related_type' => 'Database\\Tester\\Models\\Author']);\n        $event2 = EventLog::create(['action' => \"user-updated\", 'related_id' => $author->id, 'related_type' => 'Database\\Tester\\Models\\Author']);\n        Model::reguard();\n\n        $this->assertEquals([$event1->id, $event2->id], $author->getRelationSimpleValue('event_log'));\n    }\n\n    public function testDeferredBinding()\n    {\n        $sessionKey = uniqid('session_key', true);\n\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $event = EventLog::create(['action' => \"user-created\"]);\n        Model::reguard();\n\n        $eventId = $event->id;\n\n        // Deferred add\n        $author->event_log()->add($event, $sessionKey);\n        $this->assertNull($event->related_id);\n        $this->assertEmpty($author->event_log);\n\n        $this->assertEquals(0, $author->event_log()->count());\n        $this->assertEquals(1, $author->event_log()->withDeferred($sessionKey)->count());\n\n        // Commit deferred\n        $author->save(['sessionKey' => $sessionKey]);\n        $event = EventLog::find($eventId);\n        $this->assertEquals(1, $author->event_log()->count());\n        $this->assertEquals($author->id, $event->related_id);\n        $this->assertEquals([\n            'user-created'\n        ], $author->event_log->pluck('action')->all());\n\n        // New session\n        $sessionKey = uniqid('session_key', true);\n\n        // Deferred remove\n        $author->event_log()->remove($event, $sessionKey);\n        $this->assertEquals(1, $author->event_log()->count());\n        $this->assertEquals(0, $author->event_log()->withDeferred($sessionKey)->count());\n        $this->assertEquals($author->id, $event->related_id);\n        $this->assertEquals([\n            'user-created'\n        ], $author->event_log->pluck('action')->all());\n\n        // Commit deferred (model is deleted as per definition)\n        $author->save(['sessionKey' => $sessionKey]);\n        $event = EventLog::find($eventId);\n        $this->assertEquals(0, $author->event_log()->count());\n        $this->assertNull($event);\n        $this->assertEmpty($author->event_log);\n    }\n\n    public function testDeferredBindingWithPivot()\n    {\n        $sessionKey = uniqid('session_key', true);\n\n        Model::unguard();\n        $event = EventLog::create(['action' => \"user-created\"]);\n        $post = Post::create(['title' => 'Hello world!']);\n        $tagForAuthor = Tag::create(['name' => 'ForAuthor']);\n        $tagForPost = Tag::create(['name' => 'ForPost']);\n        Model::reguard();\n\n        $eventId = $event->id;\n\n        // Deferred add\n        $tagForPost->posts()->add($post, $sessionKey, ['added_by' => 88]);\n        $this->assertEmpty($tagForPost->posts);\n\n        $this->assertEquals(0, $tagForPost->posts()->count());\n        $this->assertEquals(1, $tagForPost->posts()->withDeferred($sessionKey)->count());\n\n        // Commit deferred\n        $tagForPost->save(['sessionKey' => $sessionKey]);\n        $this->assertEquals(1, $tagForPost->posts()->count());\n        $this->assertEquals([$post->id], $tagForPost->posts->pluck('id')->all());\n        $this->assertEquals(88, $tagForPost->posts->first()->pivot->added_by);\n\n        // New session\n        $sessionKey = uniqid('session_key', true);\n\n        // Deferred remove\n        $tagForPost->posts()->remove($post, $sessionKey);\n        $this->assertEquals(1, $tagForPost->posts()->count());\n        $this->assertEquals(0, $tagForPost->posts()->withDeferred($sessionKey)->count());\n        $this->assertEquals([$post->id], $tagForPost->posts->lists('id'));\n        $this->assertEquals(88, $tagForPost->posts->first()->pivot->added_by);\n\n        // Commit deferred (model is deleted as per definition)\n        $this->assertEmpty(0, $tagForPost->posts);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/MorphOneModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\Post;\nuse Database\\Tester\\Models\\Meta;\n\nclass MorphOneModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Phone.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Meta.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testSetRelationValue()\n    {\n        Model::unguard();\n        $post = Post::create(['title' => \"First post\", 'description' => \"Yay!!\"]);\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $meta1 = Meta::create([\n            'meta_title' => 'Question',\n            'meta_description' => 'Industry',\n            'meta_keywords' => 'major',\n            'canonical_url' => 'http://google.com/search/jobs',\n            'redirect_url' => 'http://google.com',\n            'robot_index' => 'index',\n            'robot_follow' => 'follow',\n        ]);\n        $meta2 = Meta::create([\n            'meta_title' => 'Comment',\n            'meta_description' => 'Social',\n            'meta_keywords' => 'startup',\n            'canonical_url' => 'http://facebook.com/search/users',\n            'redirect_url' => 'http://facebook.com',\n            'robot_index' => 'index',\n            'robot_follow' => 'follow',\n        ]);\n        $meta3 = Meta::make([\n            'meta_title' => 'Answer',\n            'meta_description' => 'Employment',\n            'meta_keywords' => 'minor',\n            'canonical_url' => 'http://yahoo.com/search/stats',\n            'redirect_url' => 'http://yahoo.com',\n            'robot_index' => 'index',\n            'robot_follow' => 'follow',\n        ]);\n        Model::reguard();\n\n        // Set by Model object\n        $post->meta = $meta1;\n        $post->save();\n        $this->assertEquals($post->id, $meta1->taggable_id);\n        $this->assertEquals(get_class($post), $meta1->taggable_type);\n        $this->assertEquals('Question', $post->meta->meta_title);\n\n        // Double check\n        $meta1 = Meta::find($meta1->id);\n        $this->assertEquals($post->id, $meta1->taggable_id);\n        $this->assertEquals(get_class($post), $meta1->taggable_type);\n\n        // Set by primary key\n        $metaId = $meta2->id;\n        $author->meta = $metaId;\n        $author->save();\n        $meta2 = Meta::find($metaId);\n        $this->assertEquals($author->id, $meta2->taggable_id);\n        $this->assertEquals(get_class($author), $meta2->taggable_type);\n        $this->assertEquals('Comment', $author->meta->meta_title);\n\n        // Nullify\n        $author->meta = null;\n        $author->save();\n        $meta = Meta::find($metaId);\n        $this->assertNull($meta->taggable_type);\n        $this->assertNull($meta->taggable_id);\n        $this->assertNull($meta->taggable);\n\n        // Deferred in memory\n        $author->meta = $meta3;\n        $this->assertEquals('Answer', $author->meta->meta_title);\n        $this->assertEquals($author->id, $meta3->taggable_id);\n    }\n\n    public function testSetRelationValueTwice()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $meta = Meta::create([\n            'meta_title' => 'Question',\n            'meta_description' => 'Industry',\n            'meta_keywords' => 'major',\n            'canonical_url' => 'http://google.com/search/jobs',\n            'redirect_url' => 'http://google.com',\n            'robot_index' => 'index',\n            'robot_follow' => 'follow',\n        ]);\n        Model::reguard();\n\n        $metaId = $meta->id;\n        $author->meta = $metaId;\n        $author->save();\n\n        $author->meta = $metaId;\n        $author->save();\n\n        $meta = Meta::find($metaId);\n        $this->assertEquals($author->id, $meta->taggable_id);\n        $this->assertEquals(get_class($author), $meta->taggable_type);\n    }\n\n    public function testGetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $meta = Meta::create([\n            'taggable_id' => $author->id,\n            'taggable_type' => get_class($author),\n            'meta_title' => 'Question',\n            'meta_description' => 'Industry',\n            'meta_keywords' => 'major',\n            'canonical_url' => 'http://google.com/search/jobs',\n            'redirect_url' => 'http://google.com',\n            'robot_index' => 'index',\n            'robot_follow' => 'follow',\n        ]);\n        Model::reguard();\n\n        $this->assertEquals($meta->id, $author->getRelationSimpleValue('meta'));\n    }\n\n    public function testDeferredBinding()\n    {\n        $sessionKey = uniqid('session_key', true);\n\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $meta = Meta::create([\n            'meta_title' => 'Comment',\n            'meta_description' => 'Social',\n            'meta_keywords' => 'startup',\n            'canonical_url' => 'http://facebook.com/search/users',\n            'redirect_url' => 'http://facebook.com',\n            'robot_index' => 'index',\n            'robot_follow' => 'follow',\n        ]);\n        Model::reguard();\n\n        $metaId = $meta->id;\n\n        // Deferred add\n        $author->meta()->add($meta, $sessionKey);\n        $this->assertNull($meta->taggable_id);\n        $this->assertNull($author->meta);\n\n        $this->assertEquals(0, $author->meta()->count());\n        $this->assertEquals(1, $author->meta()->withDeferred($sessionKey)->count());\n\n        // Commit deferred\n        $author->save(['sessionKey' => $sessionKey]);\n        $meta = Meta::find($metaId);\n        $this->assertEquals(1, $author->meta()->count());\n        $this->assertEquals($author->id, $meta->taggable_id);\n        $this->assertEquals('Comment', $author->meta->meta_title);\n\n        // New session\n        $sessionKey = uniqid('session_key', true);\n\n        // Deferred remove\n        $author->meta()->remove($meta, $sessionKey);\n        $this->assertEquals(1, $author->meta()->count());\n        $this->assertEquals(0, $author->meta()->withDeferred($sessionKey)->count());\n        $this->assertEquals($author->id, $meta->taggable_id);\n        $this->assertEquals('Comment', $author->meta->meta_title);\n\n        // Commit deferred\n        $author->save(['sessionKey' => $sessionKey]);\n        $meta = Meta::find($metaId);\n        $this->assertEquals(0, $author->meta()->count());\n        $this->assertNull($meta->taggable_id);\n        $this->assertNull($author->meta);\n    }\n\n    public function testRemovalProtection()\n    {\n        Model::unguard();\n        $post = Post::create(['title' => \"First post\", 'description' => \"Yay!!\"]);\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $meta1 = Meta::create([\n            'meta_title' => 'Question',\n            'meta_description' => 'Industry',\n            'meta_keywords' => 'major',\n            'canonical_url' => 'http://google.com/search/jobs',\n            'redirect_url' => 'http://google.com',\n            'robot_index' => 'index',\n            'robot_follow' => 'follow',\n        ]);\n        $meta2 = Meta::create([\n            'meta_title' => 'Comment',\n            'meta_description' => 'Social',\n            'meta_keywords' => 'startup',\n            'canonical_url' => 'http://facebook.com/search/users',\n            'redirect_url' => 'http://facebook.com',\n            'robot_index' => 'index',\n            'robot_follow' => 'follow',\n        ]);\n        Model::reguard();\n\n        $post->meta()->add($meta1);\n        $author->meta()->add($meta2);\n        $meta1Id = $meta1->id;\n\n        // Attempt to remove post's meta from author\n        $author->meta()->remove($meta1);\n\n        // Removal should fail\n        $this->assertNotNull($meta1->taggable_id);\n        $this->assertNotNull($meta1->taggable_type);\n        $this->assertNotNull($post->meta);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/MorphToModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\Post;\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\EventLog;\n\nclass MorphToModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/EventLog.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testSetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $post1 = Post::create(['title' => \"First post\", 'description' => \"Yay!!\"]);\n        $post2 = Post::make(['title' => \"Second post\", 'description' => \"Woohoo!!\"]);\n        $event = EventLog::create(['action' => \"user-created\"]);\n        Model::reguard();\n\n        // Set by Model object\n        $event->related = $author;\n        $event->save();\n        $this->assertEquals($author->id, $event->related_id);\n        $this->assertEquals('Stevie', $event->related->name);\n\n        // Set by primary key\n        $event->related = [$post1->id, get_class($post1)];\n        $this->assertEquals($post1->id, $event->related_id);\n        $this->assertEquals('First post', $event->related->title);\n\n        // Nullify\n        $event->related = null;\n        $this->assertNull($event->related_id);\n        $this->assertNull($event->related);\n\n        // Deferred in memory\n        $event->related = $post2;\n        $this->assertEquals('Second post', $event->related->title);\n        $this->assertNull($event->related_id);\n        $event->save();\n        $this->assertEquals($post2->id, $event->related_id);\n    }\n\n    public function testGetRelationValue()\n    {\n        Model::unguard();\n        $author = Author::create(['name' => 'Stevie']);\n        $event = EventLog::make(['action' => \"user-created\", 'related_id' => $author->id, 'related_type' => get_class($author)]);\n        Model::reguard();\n\n        $this->assertEquals([$author->id, get_class($author)], $event->getRelationSimpleValue('related'));\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/NestedTreeModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\CategoryNested;\n\nclass NestedTreeModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Category.php';\n\n        $this->migratePlugin('Database.Tester');\n        $this->seedSampleTree();\n    }\n\n    public function testGetNested()\n    {\n        $items = CategoryNested::getNested();\n\n        // Eager loaded\n        $items->each(function ($item) {\n            $this->assertTrue($item->relationLoaded('children'));\n        });\n\n        $this->assertEquals(2, $items->count());\n    }\n\n    public function testGetAllRoot()\n    {\n        $items = CategoryNested::getAllRoot();\n\n        // Not eager loaded\n        $items->each(function ($item) {\n            $this->assertFalse($item->relationLoaded('children'));\n        });\n\n        $this->assertEquals(2, $items->count());\n    }\n\n    public function testListsNested()\n    {\n        $array = CategoryNested::listsNested('name', 'id');\n        $this->assertEquals([\n            1 => 'Category Orange',\n            2 => '&nbsp;&nbsp;&nbsp;Autumn Leaves',\n            3 => '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;September',\n            4 => '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;October',\n            5 => '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;November',\n            6 => '&nbsp;&nbsp;&nbsp;Summer Breeze',\n            7 => 'Category Green',\n            8 => '&nbsp;&nbsp;&nbsp;Antarctic Snow',\n            9 => '&nbsp;&nbsp;&nbsp;Spring Trees'\n        ], $array);\n\n        $array = CategoryNested::listsNested('name', 'id', '--');\n        $this->assertEquals([\n            1 => 'Category Orange',\n            2 => '--Autumn Leaves',\n            3 => '----September',\n            4 => '----October',\n            5 => '----November',\n            6 => '--Summer Breeze',\n            7 => 'Category Green',\n            8 => '--Antarctic Snow',\n            9 => '--Spring Trees'\n        ], $array);\n\n        $array = CategoryNested::listsNested('description', 'name', '**');\n        $this->assertEquals([\n            'Category Orange' => 'A root level test category',\n            'Autumn Leaves' => '**Disccusion about the season of falling leaves.',\n            'September' => '****The start of the fall season.',\n            'October' => '****The middle of the fall season.',\n            'November' => '****The end of the fall season.',\n            'Summer Breeze' => '**Disccusion about the wind at the ocean.',\n            'Category Green' => 'A root level test category',\n            'Antarctic Snow' => '**Disccusion about the frosty snow flakes.',\n            'Spring Trees' => '**Disccusion about the blooming gardens.'\n        ], $array);\n    }\n\n    public function testListsNestedFromCollection()\n    {\n        $array = CategoryNested::get()->listsNested('custom_name', 'id', '...');\n        $this->assertEquals([\n            1 => 'Category Orange (#1)',\n            2 => '...Autumn Leaves (#2)',\n            3 => '......September (#3)',\n            4 => '......October (#4)',\n            5 => '......November (#5)',\n            6 => '...Summer Breeze (#6)',\n            7 => 'Category Green (#7)',\n            8 => '...Antarctic Snow (#8)',\n            9 => '...Spring Trees (#9)'\n        ], $array);\n    }\n\n    public function seedSampleTree()\n    {\n        Model::unguard();\n\n        $orange = CategoryNested::create([\n            'name' => 'Category Orange',\n            'description' => 'A root level test category',\n        ]);\n\n        $autumn = $orange->children()->create([\n            'name' => 'Autumn Leaves',\n            'description' => 'Disccusion about the season of falling leaves.'\n        ]);\n\n        $autumn->children()->create([\n            'name' => 'September',\n            'description' => 'The start of the fall season.'\n        ]);\n\n        $october = $autumn->children()->create([\n            'name' => 'October',\n            'description' => 'The middle of the fall season.'\n        ]);\n\n        $autumn->children()->create([\n            'name' => 'November',\n            'description' => 'The end of the fall season.'\n        ]);\n\n        $orange->children()->create([\n            'name' => 'Summer Breeze',\n            'description' => 'Disccusion about the wind at the ocean.'\n        ]);\n\n        $green = CategoryNested::create([\n            'name' => 'Category Green',\n            'description' => 'A root level test category',\n        ]);\n\n        $green->children()->create([\n            'name' => 'Antarctic Snow',\n            'description' => 'Disccusion about the frosty snow flakes.'\n        ]);\n\n        $green->children()->create([\n            'name' => 'Spring Trees',\n            'description' => 'Disccusion about the blooming gardens.'\n        ]);\n\n        Model::reguard();\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/NullableModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\NullablePost;\n\nclass NullableModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testNullifyingFields()\n    {\n        // Save as SQL default\n        $post = NullablePost::create(['author_nickname' => ''])->reload();\n        $this->assertEquals('October', $post->author_nickname);\n\n        // Save as empty string\n        $post->author_nickname = '';\n        $post->save();\n        $this->assertNull($post->author_nickname);\n    }\n\n    public function testNonEmptyValuesAreIgnored()\n    {\n        // Save as value\n        $post = NullablePost::create(['author_nickname' => 'Joe']);\n        $this->assertEquals('Joe', $post->author_nickname);\n\n        // Save as zero integer\n        $post->author_nickname = 0;\n        $post->save();\n        $this->assertNotNull($post->author_nickname);\n        $this->assertEquals(0, $post->author_nickname);\n\n        // Save as zero float\n        $post->author_nickname = 0.0;\n        $post->save();\n        $this->assertNotNull($post->author_nickname);\n        $this->assertEquals(0.0, $post->author_nickname);\n\n        // Save as zero string\n        $post->author_nickname = '0';\n        $post->save();\n        $this->assertNotNull($post->author_nickname);\n        $this->assertEquals('0', $post->author_nickname);\n\n        // Save as false\n        $post->author_nickname = false;\n        $post->save();\n        $this->assertNotNull($post->author_nickname);\n        $this->assertEquals(false, $post->author_nickname);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/RevisionableModelTest.php",
    "content": "<?php\n\nuse Carbon\\Carbon;\nuse Database\\Tester\\Models\\RevisionablePost;\n\nclass RevisionableModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testUpdateNothing()\n    {\n        $post = RevisionablePost::create(['title' => 'Hello World!']);\n        $this->assertEquals('Hello World!', $post->title);\n        $this->assertEquals(0, $post->revision_history()->count());\n\n        $post->revisionsEnabled = false;\n        $post->title = 'Helloooooooooooo!';\n        $post->save();\n        $this->assertEquals(0, $post->revision_history()->count());\n    }\n\n    public function testUpdateSingleField()\n    {\n        $post = RevisionablePost::create(['title' => 'Hello World!']);\n        $this->assertEquals('Hello World!', $post->title);\n        $this->assertEquals(0, $post->revision_history()->count());\n\n        $post->title = 'Helloooooooooooo!';\n        $post->save();\n        $this->assertEquals(1, $post->revision_history()->count());\n\n        $item = $post->revision_history()->first();\n\n        $this->assertEquals('title', $item->field);\n        $this->assertEquals('Hello World!', $item->old_value);\n        $this->assertEquals('Helloooooooooooo!', $item->new_value);\n        $this->assertEquals(7, $item->user_id);\n    }\n\n    public function testUpdateMultipleFields()\n    {\n        $post = RevisionablePost::create([\n            'title' => 'Hello World!',\n            'slug' => 'hello-world',\n            'description' => 'Good day, Commander',\n            'is_published' => true,\n            'published_at' => new DateTime\n        ]);\n\n        $this->assertEquals(0, $post->revision_history()->count());\n\n        $post->title = \"Gday mate\";\n        $post->slug = \"gday-mate\";\n        $post->description = 'Wazzaaaaaaaaaaaaap';\n        $post->is_published = false;\n        $post->published_at = Carbon::now()->addDays(1);\n        $post->save();\n\n        $history = $post->revision_history;\n\n        $this->assertEquals(5, $history->count());\n        $this->assertEquals([\n            'title',\n            'slug',\n            'description',\n            'is_published',\n            'published_at'\n        ], $history->pluck('field')->all());\n    }\n\n    public function testExceedingRevisionLimit()\n    {\n        $post = RevisionablePost::create([\n            'title' => 'Hello World!',\n            'slug' => 'hello-world',\n            'description' => 'Good day, Commander',\n            'is_published' => true,\n            'published_at' => new DateTime\n        ]);\n\n        $this->assertEquals(0, $post->revision_history()->count());\n\n        $post->title = \"Gday mate\";\n        $post->slug = \"gday-mate\";\n        $post->description = 'Wazzaaaaaaaaaaaaap';\n        $post->is_published = false;\n        $post->published_at = Carbon::now()->addDays(1);\n        $post->save();\n\n        $post->title = 'The Boss';\n        $post->slug = 'the-boss';\n        $post->description = 'Paid the cost to be the boss';\n        $post->is_published = true;\n        $post->published_at = Carbon::now()->addDays(10);\n        $post->save();\n\n        // Count 10 changes above, limit is 8\n        $this->assertEquals(8, $post->revision_history()->count());\n    }\n\n    public function testSoftDeletes()\n    {\n        $post = RevisionablePost::create(['title' => 'Hello World!']);\n        $this->assertEquals('Hello World!', $post->title);\n        $this->assertEquals(0, $post->revision_history()->count());\n\n        $post->title = 'Helloooooooooooo!';\n        $post->save();\n        $this->assertEquals(1, $post->revision_history()->count());\n\n        $post->delete();\n        $this->assertEquals(2, $post->revision_history()->count());\n    }\n\n    public function testRevisionDateCast()\n    {\n        $post = RevisionablePost::create([\n            'title' => 'Hello World!',\n            'published_at' => Carbon::now()\n        ]);\n        $this->assertEquals(0, $post->revision_history()->count());\n\n        $post->published_at = Carbon::now()->addDays(1);\n        $post->save();\n\n        $this->assertEquals(1, $post->revision_history()->count());\n\n        $item = $post->revision_history()->first();\n        $this->assertEquals('published_at', $item->field);\n        $this->assertEquals('date', $item->cast);\n        $this->assertInstanceOf('Carbon\\Carbon', $item->old_value);\n        $this->assertInstanceOf('Carbon\\Carbon', $item->new_value);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/SimpleTreeModelTest.php",
    "content": "<?php\n\nuse Carbon\\Carbon;\nuse Database\\Tester\\Models\\CategorySimple;\n\nclass SimpleTreeModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Category.php';\n\n        $this->migratePlugin('Database.Tester');\n        $this->seedSampleTree();\n    }\n\n    public function testGetNested()\n    {\n        $items = CategorySimple::getNested();\n\n        // Eager loaded\n        $items->each(function ($item) {\n            $this->assertTrue($item->relationLoaded('children'));\n        });\n\n        $this->assertEquals(3, $items->count());\n    }\n\n    public function testGetAllRoot()\n    {\n        $items = CategorySimple::getAllRoot();\n\n        // Not eager loaded\n        $items->each(function ($item) {\n            $this->assertFalse($item->relationLoaded('children'));\n        });\n\n        $this->assertEquals(3, $items->count());\n    }\n\n    public function testGetChildren()\n    {\n        // Not eager loaded\n        $item = CategorySimple::first();\n        $this->assertFalse($item->relationLoaded('children'));\n        $this->assertEquals(6, $item->getChildren()->count());\n\n        // Not eager loaded\n        $item = CategorySimple::getAllRoot()->first();\n        $this->assertFalse($item->relationLoaded('children'));\n        $this->assertEquals(6, $item->getChildren()->count());\n\n        // Eager loaded\n        $item = CategorySimple::getNested()->first();\n        $this->assertTrue($item->relationLoaded('children'));\n        $this->assertEquals(6, $item->getChildren()->count());\n    }\n\n    public function testGetChildCount()\n    {\n        // Not eager loaded\n        $item = CategorySimple::first();\n        $this->assertFalse($item->relationLoaded('children'));\n        $this->assertEquals(9, $item->getChildCount());\n\n        // Not eager loaded\n        $item = CategorySimple::getAllRoot()->first();\n        $this->assertFalse($item->relationLoaded('children'));\n        $this->assertEquals(9, $item->getChildCount());\n\n        // Eager loaded\n        $item = CategorySimple::getNested()->first();\n        $this->assertTrue($item->relationLoaded('children'));\n        $this->assertEquals(9, $item->getChildCount());\n    }\n\n    public function testGetAllChildren()\n    {\n        // Not eager loaded\n        $item = CategorySimple::first();\n        $this->assertFalse($item->relationLoaded('children'));\n        $this->assertEquals(9, $item->getAllChildren()->count());\n\n        // Not eager loaded\n        $item = CategorySimple::getAllRoot()->first();\n        $this->assertFalse($item->relationLoaded('children'));\n        $this->assertEquals(9, $item->getAllChildren()->count());\n\n        // Eager loaded\n        $item = CategorySimple::getNested()->first();\n        $this->assertTrue($item->relationLoaded('children'));\n        $this->assertEquals(9, $item->getAllChildren()->count());\n    }\n\n    public function testListsNested()\n    {\n        $array = CategorySimple::listsNested('name', 'id');\n        $this->assertEquals([\n            1 => 'Web development',\n            2 => '&nbsp;&nbsp;&nbsp;HTML5',\n            3 => '&nbsp;&nbsp;&nbsp;CSS3',\n            4 => '&nbsp;&nbsp;&nbsp;jQuery',\n            5 => '&nbsp;&nbsp;&nbsp;Bootstrap',\n            6 => '&nbsp;&nbsp;&nbsp;Laravel',\n            7 => '&nbsp;&nbsp;&nbsp;OctoberCMS',\n            8 => '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;September',\n            9 => '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;October',\n            10 => '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;November',\n            11 => 'Mobile development',\n            12 => '&nbsp;&nbsp;&nbsp;iOS',\n            13 => '&nbsp;&nbsp;&nbsp;iPhone',\n            14 => '&nbsp;&nbsp;&nbsp;iPad',\n            15 => '&nbsp;&nbsp;&nbsp;Android',\n            16 => 'Graphic design',\n            17 => '&nbsp;&nbsp;&nbsp;Photoshop',\n            18 => '&nbsp;&nbsp;&nbsp;Illustrator',\n            19 => '&nbsp;&nbsp;&nbsp;Fireworks'\n        ], $array);\n\n        $array = CategorySimple::listsNested('name', 'id', '--');\n        $this->assertEquals([\n            1 => 'Web development',\n            2 => '--HTML5',\n            3 => '--CSS3',\n            4 => '--jQuery',\n            5 => '--Bootstrap',\n            6 => '--Laravel',\n            7 => '--OctoberCMS',\n            8 => '----September',\n            9 => '----October',\n            10 => '----November',\n            11 => 'Mobile development',\n            12 => '--iOS',\n            13 => '--iPhone',\n            14 => '--iPad',\n            15 => '--Android',\n            16 => 'Graphic design',\n            17 => '--Photoshop',\n            18 => '--Illustrator',\n            19 => '--Fireworks'\n        ], $array);\n\n        $array = CategorySimple::listsNested('id', 'name', '**');\n        $this->assertEquals([\n            'Web development' => '1',\n            'HTML5' => '**2',\n            'CSS3' => '**3',\n            'jQuery' => '**4',\n            'Bootstrap' => '**5',\n            'Laravel' => '**6',\n            'OctoberCMS' => '**7',\n            'September' => '****8',\n            'October' => '****9',\n            'November' => '****10',\n            'Mobile development' => '11',\n            'iOS' => '**12',\n            'iPhone' => '**13',\n            'iPad' => '**14',\n            'Android' => '**15',\n            'Graphic design' => '16',\n            'Photoshop' => '**17',\n            'Illustrator' => '**18',\n            'Fireworks' => '**19'\n        ], $array);\n    }\n\n    public function testListsNestedUnknownColumn()\n    {\n        $this->expectException(\\Exception::class);\n        $this->expectExceptionMessage('Column mismatch in listsNested method');\n\n        CategorySimple::listsNested('custom_name', 'id');\n    }\n\n    public function testListsNestedFromCollection()\n    {\n        $array = CategorySimple::get()->listsNested('custom_name', 'id', '...');\n\n        $this->assertEquals([\n            1 => 'Web development (#1)',\n            2 => '...HTML5 (#2)',\n            3 => '...CSS3 (#3)',\n            4 => '...jQuery (#4)',\n            5 => '...Bootstrap (#5)',\n            6 => '...Laravel (#6)',\n            7 => '...OctoberCMS (#7)',\n            8 => '......September (#8)',\n            9 => '......October (#9)',\n            10 => '......November (#10)',\n            11 => 'Mobile development (#11)',\n            12 => '...iOS (#12)',\n            13 => '...iPhone (#13)',\n            14 => '...iPad (#14)',\n            15 => '...Android (#15)',\n            16 => 'Graphic design (#16)',\n            17 => '...Photoshop (#17)',\n            18 => '...Illustrator (#18)',\n            19 => '...Fireworks (#19)'\n        ], $array);\n    }\n\n\n    public function seedSampleTree()\n    {\n        Model::unguard();\n\n        $webdev = CategorySimple::create([\n            'name' => 'Web development'\n        ]);\n\n        $webdev->children()->create(['name' => 'HTML5']);\n        $webdev->children()->create(['name' => 'CSS3']);\n        $webdev->children()->create(['name' => 'jQuery']);\n        $webdev->children()->create(['name' => 'Bootstrap']);\n        $webdev->children()->create(['name' => 'Laravel']);\n        $october = $webdev->children()->create(['name' => 'OctoberCMS']);\n        $october->children()->create(['name' => 'September']);\n        $october->children()->create(['name' => 'October']);\n        $october->children()->create(['name' => 'November']);\n\n        $mobdev = CategorySimple::create([\n            'name' => 'Mobile development'\n        ]);\n\n        $mobdev->children()->create(['name' => 'iOS']);\n        $mobdev->children()->create(['name' => 'iPhone']);\n        $mobdev->children()->create(['name' => 'iPad']);\n        $mobdev->children()->create(['name' => 'Android']);\n\n        $design = CategorySimple::create([\n            'name' => 'Graphic design'\n        ]);\n\n        $design->children()->create(['name' => 'Photoshop']);\n        $design->children()->create(['name' => 'Illustrator']);\n        $design->children()->create(['name' => 'Fireworks']);\n\n        Model::reguard();\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/SluggableModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\SluggablePost;\n\nclass SluggableModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testFillPost()\n    {\n        $post = SluggablePost::create(['title' => 'Hello World!']);\n        $this->assertEquals('hello-world', $post->slug);\n    }\n\n    public function testSetAttributeOnPost()\n    {\n        $post = new SluggablePost;\n        $post->title = \"Let's go, rock show!\";\n        $post->save();\n\n        $this->assertEquals('lets-go-rock-show', $post->slug);\n    }\n\n    public function testSetSlugAttributeManually()\n    {\n        $post = new SluggablePost;\n        $post->title = 'We parked in a comfortable spot';\n        $post->slug = 'war-is-pain';\n        $post->save();\n\n        $this->assertEquals('war-is-pain', $post->slug);\n    }\n\n    public function testConcatenatedSlug()\n    {\n        $post = new SluggablePost;\n        $post->title = 'Sweetness and Light';\n        $post->description = 'Itchee and Scratchee';\n        $post->save();\n\n        $this->assertEquals('sweetness-and-light-itchee-and-scratchee', $post->long_slug);\n    }\n\n    public function testDuplicateSlug()\n    {\n        $post1 = SluggablePost::create(['title' => 'Pace yourself']);\n        $post2 = SluggablePost::create(['title' => 'Pace yourself']);\n        $post3 = SluggablePost::create(['title' => 'Pace yourself']);\n\n        $this->assertEquals('pace-yourself', $post1->slug);\n        $this->assertEquals('pace-yourself-2', $post2->slug);\n        $this->assertEquals('pace-yourself-3', $post3->slug);\n    }\n\n    public function testCollisionWithSelf()\n    {\n        $post1 = SluggablePost::create(['title' => 'Watch yourself']);\n        $post2 = SluggablePost::create(['title' => 'Watch yourself']);\n        $post3 = SluggablePost::create(['title' => 'Watch yourself']);\n\n        $this->assertEquals('watch-yourself', $post1->slug);\n        $this->assertEquals('watch-yourself-2', $post2->slug);\n        $this->assertEquals('watch-yourself-3', $post3->slug);\n\n        $post3->slugAttributes();\n        $post3->save();\n        $post2->slugAttributes();\n        $post2->save();\n        $post1->slugAttributes();\n        $post1->save();\n\n        $this->assertEquals('watch-yourself', $post1->slug);\n        $this->assertEquals('watch-yourself-2', $post2->slug);\n        $this->assertEquals('watch-yourself-3', $post3->slug);\n    }\n\n    public function testSuffixCollision()\n    {\n        $post1 = SluggablePost::create(['title' => 'Type 1']);\n        $post2 = SluggablePost::create(['title' => 'Type 2']);\n        $post3 = SluggablePost::create(['title' => 'Type 3']);\n        $post4 = SluggablePost::create(['title' => 'Type 3']);\n        $post5 = SluggablePost::create(['title' => 'Type 3']);\n\n        $this->assertEquals('type-1', $post1->slug);\n        $this->assertEquals('type-2', $post2->slug);\n        $this->assertEquals('type-3', $post3->slug);\n        $this->assertEquals('type-3-2', $post4->slug);\n        $this->assertEquals('type-3-3', $post5->slug);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/SoftDeleteModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\User;\nuse Database\\Tester\\Models\\Author;\nuse Database\\Tester\\Models\\UserWithAuthor;\nuse Database\\Tester\\Models\\SoftDeleteAuthor;\nuse Database\\Tester\\Models\\UserWithSoftAuthor;\nuse Database\\Tester\\Models\\UserWithAuthorAndSoftDelete;\nuse Database\\Tester\\Models\\UserWithSoftAuthorAndSoftDelete;\n\nclass SoftDeleteModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/User.php';\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Author.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testDeleteOptionOnHardModel()\n    {\n        Model::unguard();\n        $user = UserWithAuthor::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $author = Author::create(['name' => 'Louie', 'email' => 'louie@email.tld', 'user_id' => $user->id]);\n        Model::reguard();\n\n        $authorId = $author->id;\n        $user->delete(); // Hard\n        $this->assertNull(Author::find($authorId));\n    }\n\n    public function testSoftDeleteOptionOnHardModel()\n    {\n        Model::unguard();\n        $user = UserWithSoftAuthor::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $author = Author::create(['name' => 'Louie', 'email' => 'louie@email.tld', 'user_id' => $user->id]);\n        Model::reguard();\n\n        $authorId = $author->id;\n        $user->delete(); // Hard\n        $this->assertNotNull(Author::find($authorId)); // Do nothing\n    }\n\n    public function testSoftDeleteOptionOnSoftModel()\n    {\n        Model::unguard();\n        $user = UserWithSoftAuthorAndSoftDelete::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $author = SoftDeleteAuthor::create(['name' => 'Louie', 'email' => 'louie@email.tld', 'user_id' => $user->id]);\n        Model::reguard();\n\n        $authorId = $author->id;\n        $user->delete(); // Soft\n        $this->assertNull(SoftDeleteAuthor::find($authorId));\n        $this->assertNotNull(SoftDeleteAuthor::withTrashed()->find($authorId));\n    }\n\n    public function testDeleteOptionOnSoftModel()\n    {\n        Model::unguard();\n        $user = UserWithAuthorAndSoftDelete::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $author = Author::create(['name' => 'Louie', 'email' => 'louie@email.tld', 'user_id' => $user->id]);\n        Model::reguard();\n\n        $authorId = $author->id;\n        $user->delete(); // Soft\n        $this->assertNotNull(Author::find($authorId)); // Do nothing\n\n        $userId = $user->id;\n        $user = UserWithAuthorAndSoftDelete::withTrashed()->find($userId);\n        $user->restore();\n\n        $user->forceDelete(); // Hard\n        $this->assertNull(Author::find($authorId));\n    }\n\n    public function testRestoreSoftDeleteRelation()\n    {\n        Model::unguard();\n        $user = UserWithSoftAuthorAndSoftDelete::create(['name' => 'Stevie', 'email' => 'stevie@email.tld']);\n        $author = SoftDeleteAuthor::create(['name' => 'Louie', 'email' => 'louie@email.tld', 'user_id' => $user->id]);\n        Model::reguard();\n\n        $authorId = $author->id;\n        $user->delete(); // Soft\n        $this->assertNull(SoftDeleteAuthor::find($authorId));\n        $this->assertNotNull(SoftDeleteAuthor::withTrashed()->find($authorId));\n\n        $userId = $user->id;\n        $user = UserWithSoftAuthorAndSoftDelete::withTrashed()->find($userId);\n        $user->restore();\n\n        $this->assertNotNull(SoftDeleteAuthor::find($authorId));\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/database/ValidationModelTest.php",
    "content": "<?php\n\nuse Database\\Tester\\Models\\ValidationPost;\n\nclass ValidationModelTest extends PluginTestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        include_once base_path() . '/modules/system/tests/fixtures/plugins/database/tester/models/Post.php';\n\n        $this->migratePlugin('Database.Tester');\n    }\n\n    public function testUniqueTableValidation()\n    {\n        $this->expectException(\\October\\Rain\\Database\\ModelException::class);\n\n        $post = ValidationPost::create([\n            'title' => 'This is a new post',\n            'slug' => 'post-1',\n            'description' => 'Testing...'\n        ]);\n\n        $this->assertNotFalse($post);\n\n        $post2 = ValidationPost::create([\n            'title' => 'this is another post with the same slug',\n            'slug' => 'post-1',\n            'description' => 'testing....'\n        ]);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/Plugin.php",
    "content": "<?php namespace Database\\Tester;\n\nuse System\\Classes\\PluginBase;\n\nclass Plugin extends PluginBase\n{\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'Database Tester Plugin',\n            'description' => 'Plugin for loading tests that involve the database.',\n            'author' => 'Alexey Bobkov, Samuel Georges'\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/blueprints/author.yaml",
    "content": "uuid: unittest-author-f28b6604\nhandle: UnitTest\\Author\ntype: entry\nname: Author\ndrafts: false\n\nnavigation:\n    parent: UnitTest\\Post\n    icon: icon-user\n    order: 200\n\nfields:\n    avatar:\n        label: Avatar\n        type: mediafinder\n        mode: image\n\n    role:\n        label: Role\n        type: text\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/blueprints/category.yaml",
    "content": "uuid: unittest-category-b022a74b\ntype: structure\nhandle: UnitTest\\Category\nname: Category\ndrafts: false\n\nstructure:\n    maxDepth: 2\n\nnavigation:\n    parent: UnitTest\\Post\n    icon: icon-list-ul\n    order: 150\n\nfields:\n    is_featured:\n        label: Featured\n        type: checkbox\n\n    description:\n        label: Description\n        type: text\n        column:\n            sortableDefault: true\n\n    posts:\n        type: entries\n        source: UnitTest\\Post\n        inverse: categories\n        hidden: true\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/blueprints/post-content.yaml",
    "content": "uuid: unittest-post-content-4d7fd1e4\nhandle: UnitTest\\PostContent\ntype: mixin\nname: Blog Post Content\n\nfields:\n    author:\n        label: Author\n        type: entries\n        maxItems: 1\n        source: UnitTest\\Author\n        column: invisible\n\n    categories:\n        label: Categories\n        type: entries\n        source: UnitTest\\Category\n        displayMode: taglist\n        # conditions: is_featured = true\n        # scope: App\\Classes\\ScopeHelper::applyScope\n        column:\n            relation: categories\n            relationCount: true\n            type: number\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/blueprints/post.yaml",
    "content": "uuid: unittest-post-edcd102e\nhandle: UnitTest\\Post\ntype: stream\nname: Post\ndrafts: true\n\nprimaryNavigation:\n    label: Blog\n    icon: icon-file\n    iconSvg: modules/tailor/assets/images/blog-icon.svg\n    order: 95\n\nnavigation:\n    icon: icon-pencil\n    order: 100\n\ngroups:\n    regular_post:\n        name: Regular Post\n        fields:\n            content:\n                label: Content\n                type: richeditor\n\n            _blog_post_content:\n                type: mixin\n                source: UnitTest\\PostContent\n\n    markdown_post:\n        name: Markdown Post\n        fields:\n            content:\n                label: Content\n                type: markdown\n\n            _blog_post_content:\n                type: mixin\n                source: UnitTest\\PostContent\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/Author.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\nclass Author extends Model\n{\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_authors';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array Relations\n     */\n    public $belongsTo = [\n        'user' => [\n            User::class,\n            'delete' => true\n        ],\n        'country' => Country::class,\n        'user_soft' => [SoftDeleteUser::class, 'key' => 'user_id', 'softDelete' => true],\n    ];\n\n    public $hasMany = [\n        'posts' => Post::class,\n    ];\n\n    public $hasOne = [\n        'phone' => Phone::class,\n    ];\n\n    public $belongsToMany = [\n        'roles' => [\n            Role::class,\n            'table' => 'database_tester_authors_roles'\n        ],\n        'executive_authors' => [\n            Role::class,\n            'table' => 'database_tester_authors_roles',\n            'conditions' => 'is_executive = 1'\n        ],\n        'double_roles' => [\n            Role::class,\n            'table' => 'database_tester_double_joins',\n            'key' => 'host_id',\n            'otherKey' => 'entity_id',\n            'scope' => [self::class, 'applyDoubleJoinClassNames'],\n            'pivot' => ['host_type', 'entity_type']\n        ],\n        'products' => [\n            Product::class,\n            'table' => 'database_tester_authors_products',\n            'key' => 'author_code',\n            'parentKey' => 'code',\n            'otherKey' => 'product_code',\n            'relatedKey' => 'code',\n        ],\n    ];\n\n    public $morphMany = [\n        'event_log' => [\n            EventLog::class,\n            'name' => 'related',\n            'delete' => true,\n            'softDelete' => true\n        ],\n    ];\n\n    public $morphOne = [\n        'meta' => [Meta::class, 'name' => 'taggable'],\n    ];\n\n    public $morphToMany = [\n        'tags' => [\n            Tag::class,\n            'name'  => 'taggable',\n            'table' => 'database_tester_taggables',\n            'pivot' => ['added_by']\n        ],\n    ];\n\n    public static function applyDoubleJoinClassNames($query, $parent, $related)\n    {\n        $query->where('host_type', get_class($parent));\n        $query->where('entity_type', get_class($related));\n    }\n}\n\nclass SoftDeleteAuthor extends Author\n{\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/Category.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\nclass Category extends Model\n{\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_categories';\n\n    public $belongsToMany = [\n        'posts' => [\n            Post::class,\n            'table' => 'database_tester_categories_posts',\n            'pivot' => ['category_name', 'post_name']\n        ]\n    ];\n\n    public function getCustomNameAttribute()\n    {\n        return $this->name.' (#'.$this->id.')';\n    }\n}\n\nclass CategorySimple extends Category\n{\n    use \\October\\Rain\\Database\\Traits\\SimpleTree;\n}\n\nclass CategoryNested extends Category\n{\n    use \\October\\Rain\\Database\\Traits\\NestedTree;\n\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_categories_nested';\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/Country.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\nclass Country extends Model\n{\n\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_countries';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    public $hasMany = [\n        'users' => [\n            User::class,\n        ],\n    ];\n\n    public $hasManyThrough = [\n        'posts' => [\n            Post::class,\n            'through' => Author::class,\n        ]\n    ];\n}\n\nclass SoftDeleteCountry extends Country\n{\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/EventLog.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\nclass EventLog extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_event_log';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = ['*'];\n\n    /**\n     * @var array Fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array Relations\n     */\n    public $morphTo = [\n        'related' => []\n    ];\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/Meta.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\nclass Meta extends Model\n{\n    public $table = 'database_tester_meta';\n\n    public $timestamps = false;\n\n    public $morphTo = [\n        'taggable' => []\n    ];\n\n    public $fillable = [\n        'meta_title',\n        'meta_description',\n        'meta_keywords',\n        'canonical_url',\n        'redirect_url',\n        'robot_index',\n        'robot_follow'\n    ];\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/Phone.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\nclass Phone extends Model\n{\n\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_phones';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = ['*'];\n\n    /**\n     * @var array Fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array Relations\n     */\n    public $belongsTo = [\n        'author' => Author::class,\n    ];\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/Post.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\nclass Post extends Model\n{\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_posts';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = ['*'];\n\n    /**\n     * @var array Fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array Relations\n     */\n    public $belongsTo = [\n        'author' => Author::class,\n    ];\n\n    public $morphMany = [\n        'event_log' => [\n            EventLog::class,\n            'name' => 'related',\n            'delete' => true,\n            'softDelete' => true\n        ],\n    ];\n\n    public $morphOne = [\n        'meta' => [\n            Meta::class,\n            'name' => 'taggable'\n        ],\n    ];\n\n    public $belongsToMany = [\n        'categories' => [\n            Category::class,\n            'table' => 'database_tester_categories_posts',\n            'pivot' => ['category_name', 'post_name']\n        ],\n        'double_categories' => [\n            Category::class,\n            'table' => 'database_tester_double_joins',\n            'key' => 'host_id',\n            'otherKey' => 'entity_id',\n            'scope' => [self::class, 'applyDoubleJoinClassNames'],\n            'pivot' => ['host_type', 'entity_type']\n        ]\n    ];\n\n    public $morphToMany = [\n        'tags' => [\n            Tag::class,\n            'name'  => 'taggable',\n            'table' => 'database_tester_taggables',\n            'pivot' => ['added_by']\n        ],\n    ];\n\n    public static function applyDoubleJoinClassNames($query, $parent, $related)\n    {\n        $query->where('host_type', get_class($parent));\n        $query->where('entity_type', get_class($related));\n    }\n}\n\nclass NullablePost extends Post\n{\n    use \\October\\Rain\\Database\\Traits\\Nullable;\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array List of attributes to nullify\n     */\n    protected $nullable = [\n        'author_nickname',\n    ];\n}\n\nclass SluggablePost extends Post\n{\n    use \\October\\Rain\\Database\\Traits\\Sluggable;\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array List of attributes to automatically generate unique URL names (slugs) for.\n     */\n    protected $slugs = [\n        'slug' => 'title',\n        'long_slug' => ['title', 'description']\n    ];\n}\n\nclass RevisionablePost extends Post\n{\n    use \\October\\Rain\\Database\\Traits\\Revisionable;\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array Dates\n     */\n    protected $dates = ['published_at', 'deleted_at'];\n\n    /**\n     * @var array Monitor these attributes for changes.\n     */\n    protected $revisionable = [\n        'title',\n        'slug',\n        'description',\n        'is_published',\n        'published_at',\n        'deleted_at'\n    ];\n\n    /**\n     * @var int Maximum number of revision records to keep.\n     */\n    public $revisionableLimit = 8;\n\n    /**\n     * @var array Relations\n     */\n    public $morphMany = [\n        'revision_history' => [\n            \\System\\Models\\Revision::class,\n            'name' => 'revisionable'\n        ]\n    ];\n\n    /**\n     * The user who made the revision.\n     */\n    public function getRevisionableUser()\n    {\n        return 7;\n    }\n}\n\nclass ValidationPost extends Post\n{\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    public $rules = [\n        'title' => 'required|min:3|max:255',\n        'slug' => ['required', 'regex:/^[a-z0-9\\/\\:_\\-\\*\\[\\]\\+\\?\\|]*$/i', 'unique:database_tester_posts'],\n    ];\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/Product.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\n/**\n * Product\n */\nclass Product extends Model\n{\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_products';\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/Role.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\n/**\n * Role Model\n */\nclass Role extends Model\n{\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_roles';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array Fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var array Relations\n     */\n    public $belongsToMany = [\n        'authors' => [\n            User::class,\n            'table' => 'database_tester_authors_roles'\n        ],\n    ];\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/Tag.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\n/**\n * Tag\n */\nclass Tag extends Model\n{\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_tags';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array Fillable fields\n     */\n    protected $fillable = [];\n\n    /**\n     * morphedByMany\n     */\n    public $morphedByMany = [\n        'authors' => [\n            Author::class,\n            'name' => 'taggable',\n            'table' => 'database_tester_taggables',\n            'pivot' => ['added_by'],\n        ],\n        'posts' => [\n            Post::class,\n            'name' => 'taggable',\n            'table' => 'database_tester_taggables',\n            'pivot' => ['added_by'],\n        ],\n    ];\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/models/User.php",
    "content": "<?php namespace Database\\Tester\\Models;\n\nuse Model;\n\nclass User extends Model\n{\n    /**\n     * @var string The database table used by the model.\n     */\n    public $table = 'database_tester_users';\n\n    /**\n     * @var array Guarded fields\n     */\n    protected $guarded = [];\n\n    /**\n     * @var array Relations\n     */\n    public $hasOne = [\n        'author' => [\n            Author::class,\n        ]\n    ];\n\n    public $hasOneThrough = [\n        'phone' => [\n            Phone::class,\n            'through' => Author::class,\n        ],\n    ];\n\n    public $attachOne = [\n        'avatar' => \\System\\Models\\File::class\n    ];\n\n    public $attachMany = [\n        'photos' => \\System\\Models\\File::class\n    ];\n}\n\nclass SoftDeleteUser extends User\n{\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n}\n\nclass UserWithAuthor extends User\n{\n    public $hasOne = [\n        'author' => [\n            Author::class,\n            'key' => 'user_id',\n            'delete' => true\n        ],\n    ];\n}\n\nclass UserWithSoftAuthor extends User\n{\n    public $hasOne = [\n        'author' => [\n            SoftDeleteAuthor::class,\n            'key' => 'user_id',\n            'softDelete' => true\n        ],\n    ];\n}\n\nclass UserWithAuthorAndSoftDelete extends UserWithAuthor\n{\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n}\n\nclass UserWithSoftAuthorAndSoftDelete extends UserWithSoftAuthor\n{\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_authors_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateAuthorsTable extends Migration\n{\n    public function up()\n    {\n        Schema::create('database_tester_authors', function ($table) {\n            $table->increments('id');\n            $table->integer('user_id')->unsigned()->index()->nullable();\n            $table->integer('country_id')->unsigned()->index()->nullable();\n            $table->string('name')->nullable();\n            $table->string('email')->nullable();\n            $table->string('code')->nullable();\n            $table->softDeletes();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_authors');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_categories_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateCategoriesTable extends Migration\n{\n\n    public function up()\n    {\n        Schema::create('database_tester_categories', function ($table) {\n            $table->increments('id');\n            $table->integer('parent_id')->nullable();\n            $table->string('name')->nullable();\n            $table->string('slug')->nullable()->index()->unique();\n            $table->string('description')->nullable();\n            $table->integer('company_id')->unsigned()->nullable();\n            $table->string('language', 3)->nullable();\n            $table->timestamps();\n            $table->softDeletes();\n        });\n\n        Schema::create('database_tester_categories_nested', function ($table) {\n            $table->increments('id');\n            $table->integer('parent_id')->nullable();\n            $table->integer('nest_left')->nullable();\n            $table->integer('nest_right')->nullable();\n            $table->integer('nest_depth')->nullable();\n            $table->string('name')->nullable();\n            $table->string('slug')->nullable()->index()->unique();\n            $table->string('description')->nullable();\n            $table->integer('company_id')->unsigned()->nullable();\n            $table->string('language', 3)->nullable();\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_categories');\n        Schema::dropIfExists('database_tester_categories_nested');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_countries_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateCountriesTable extends Migration\n{\n    public function up()\n    {\n        Schema::create('database_tester_countries', function ($table) {\n            $table->increments('id');\n            $table->string('name')->nullable();\n            $table->softDeletes();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_countries');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_double_join_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateDoubleJoinTable extends Migration\n{\n    public function up()\n    {\n        Schema::create('database_tester_double_joins', function ($table) {\n            $table->integer('host_id')->nullable();\n            $table->string('host_type')->nullable();\n            $table->integer('entity_id')->nullable();\n            $table->string('entity_type')->nullable();\n\n            $table->index(['host_id', 'host_type'], 'dtdj_host_master_index');\n            $table->index(['entity_id', 'entity_type'], 'dtdj_entity_master_index');\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_double_joins');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_event_log_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateEventLogTable extends Migration\n{\n\n    public function up()\n    {\n        Schema::create('database_tester_event_log', function ($table) {\n            $table->increments('id');\n            $table->string('action', 30)->nullable();\n            $table->string('related_id')->index()->nullable();\n            $table->string('related_type')->index()->nullable();\n            $table->softDeletes();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_event_log');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_meta_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateMetaTable extends Migration\n{\n\n    public function up()\n    {\n        Schema::create('database_tester_meta', function ($table) {\n            $table->increments('id')->unsigned();\n            $table->integer('taggable_id')->unsigned()->index()->nullable();\n            $table->string('taggable_type')->nullable();\n            $table->string('meta_title')->nullable();\n            $table->string('meta_description')->nullable();\n            $table->string('meta_keywords')->nullable();\n            $table->string('canonical_url')->nullable();\n            $table->string('redirect_url')->nullable();\n            $table->string('robot_index')->nullable();\n            $table->string('robot_follow')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_meta');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_phones_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreatePhonesTable extends Migration\n{\n\n    public function up()\n    {\n        Schema::create('database_tester_phones', function ($table) {\n            $table->increments('id');\n            $table->string('number')->nullable();\n            $table->integer('author_id')->unsigned()->index()->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_phones');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_posts_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreatePostsTable extends Migration\n{\n    public function up()\n    {\n        Schema::create('database_tester_posts', function ($table) {\n            $table->increments('id');\n            $table->string('title')->nullable();\n            $table->string('slug')->nullable()->index();\n            $table->text('long_slug')->nullable();\n            $table->text('description')->nullable();\n            $table->boolean('is_published')->default(false);\n            $table->timestamp('published_at')->nullable();\n            $table->integer('author_id')->unsigned()->index()->nullable();\n            $table->string('author_nickname')->default('October')->nullable();\n            $table->softDeletes();\n            $table->timestamps();\n        });\n\n        Schema::create('database_tester_categories_posts', function ($table) {\n            $table->integer('category_id')->unsigned();\n            $table->integer('post_id')->unsigned();\n            $table->primary(['category_id', 'post_id']);\n            $table->string('category_name')->nullable();\n            $table->string('post_name')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_posts');\n        Schema::dropIfExists('database_tester_categories_posts');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_products_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateProductsTable extends Migration\n{\n    public function up()\n    {\n        Schema::create('database_tester_products', function ($table) {\n            $table->increments('id');\n            $table->string('name')->nullable();\n            $table->string('code')->nullable()->index();\n            $table->timestamps();\n        });\n\n        Schema::create('database_tester_authors_products', function ($table) {\n            $table->string('author_code');\n            $table->string('product_code');\n            $table->primary(['author_code', 'product_code']);\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_products');\n        Schema::dropIfExists('database_tester_authors_products');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_roles_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateRolesTable extends Migration\n{\n    public function up()\n    {\n        Schema::create('database_tester_roles', function ($table) {\n            $table->increments('id');\n            $table->string('name')->nullable();\n            $table->text('description')->nullable();\n            $table->timestamps();\n        });\n\n        Schema::create('database_tester_authors_roles', function ($table) {\n            $table->integer('author_id')->unsigned();\n            $table->integer('role_id')->unsigned();\n            $table->primary(['author_id', 'role_id']);\n            $table->string('clearance_level')->nullable();\n            $table->boolean('is_executive')->default(false);\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_roles');\n        Schema::dropIfExists('database_tester_authors_roles');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_tags_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateTagsTable extends Migration\n{\n    public function up()\n    {\n        Schema::create('database_tester_tags', function ($table) {\n            $table->increments('id');\n            $table->string('name');\n            $table->timestamps();\n        });\n\n        Schema::create('database_tester_taggables', function ($table) {\n            $table->unsignedInteger('tag_id');\n            $table->morphs('taggable', 'testings_taggable');\n            $table->unsignedInteger('added_by')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_taggables');\n        Schema::dropIfExists('database_tester_tags');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/create_users_table.php",
    "content": "<?php namespace Database\\Tester\\Updates;\n\nuse Schema;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nclass CreateUsersTable extends Migration\n{\n    public function up()\n    {\n        Schema::create('database_tester_users', function ($table) {\n            $table->increments('id');\n            $table->string('name')->nullable();\n            $table->string('email')->nullable();\n            $table->softDeletes();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('database_tester_users');\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/database/tester/updates/version.yaml",
    "content": "1.0.1: First version of Tester\n1.0.2:\n    - Create tables\n    - create_posts_table.php\n    - create_authors_table.php\n    - create_phones_table.php\n    - create_categories_table.php\n    - create_roles_table.php\n    - create_users_table.php\n    - create_event_log_table.php\n    - create_meta_table.php\n    - create_countries_table.php\n    - create_tags_table.php\n    - create_double_join_table.php\n    - create_products_table.php\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/dependencytest/dependency/Plugin.php",
    "content": "<?php namespace DependencyTest\\Dependency;\n\nuse System\\Classes\\PluginBase;\n\nclass Plugin extends PluginBase\n{\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'Dependency Test - Dependency',\n            'description' => 'This is a test plugin that will act as a dependency for the other test plugins in this\n                namespace.',\n            'author' => 'Ben Thomson'\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/dependencytest/dependency/updates/version.yaml",
    "content": "1.0.1: Initial version of the plugin\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/dependencytest/found/Plugin.php",
    "content": "<?php namespace DependencyTest\\Found;\n\nuse System\\Classes\\PluginBase;\n\nclass Plugin extends PluginBase\n{\n    public $require = [\n        'DependencyTest.Dependency'\n    ];\n\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'Dependency Test - Found',\n            'description' => 'This is a test plugin with a dependency that exists.',\n            'author' => 'Ben Thomson'\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/dependencytest/found/updates/version.yaml",
    "content": "1.0.1: Initial version of the plugin\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/dependencytest/notfound/Plugin.php",
    "content": "<?php namespace DependencyTest\\NotFound;\n\nuse System\\Classes\\PluginBase;\n\nclass Plugin extends PluginBase\n{\n    public $require = [\n        'DependencyTest.Missing'\n    ];\n\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'Dependency Test - Not Found',\n            'description' => 'This is a test plugin with a dependency that does not exist.',\n            'author' => 'Ben Thomson'\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/dependencytest/notfound/updates/version.yaml",
    "content": "1.0.1: Initial version of the plugin\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/dependencytest/wrongcase/Plugin.php",
    "content": "<?php namespace DependencyTest\\WrongCase;\n\nuse System\\Classes\\PluginBase;\n\nclass Plugin extends PluginBase\n{\n    public $require = [\n        'Dependencytest.dependency'\n    ];\n\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'Dependency Test - Wrong Case',\n            'description' => 'This is a test plugin with a dependency that exists, but is using the wrong letter case.',\n            'author' => 'Ben Thomson'\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/dependencytest/wrongcase/updates/version.yaml",
    "content": "1.0.1: Initial version of the plugin\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/noupdates/Plugin.php",
    "content": "<?php namespace October\\NoUpdates;\n\nuse System\\Classes\\PluginBase;\n\nclass Plugin extends PluginBase\n{\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'October Empty Plugin',\n            'description' => 'Empty plugin used by unit tests.',\n            'author' => 'Alexey Bobkov, Samuel Georges'\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/noupdates/updates/version.yaml",
    "content": ""
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/sample/Plugin.php",
    "content": "<?php namespace October\\Sample;\n\nuse System\\Classes\\PluginBase;\n\nclass Plugin extends PluginBase\n{\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'October Sample Plugin',\n            'description' => 'Sample plugin used by unit tests.',\n            'author' => 'Alexey Bobkov, Samuel Georges'\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/sample/updates/version.yaml",
    "content": "1:\n    - Create blog post comments table\n    - create_comments_table.php\n10.3.1: Bug fix update that uses no scripts\n1.0.x: Another fix\njunk:\n    - JUNK JUNK JUNK\n    - Some more comments that shouldn't be here\n1.0.*:\n    - Create blog settings table\n    - create_blog_settings_table.php\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/Plugin.php",
    "content": "<?php namespace October\\Tester;\n\nuse System\\Classes\\PluginBase;\n\nclass Plugin extends PluginBase\n{\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'October Test Plugin',\n            'description' => 'Test plugin used by unit tests.',\n            'author' => 'Alexey Bobkov, Samuel Georges'\n        ];\n    }\n\n    public function registerComponents()\n    {\n        return [\n            'October\\Tester\\Components\\Archive' => 'testArchive',\n            'October\\Tester\\Components\\Post' => 'testPost',\n            'October\\Tester\\Components\\MainMenu' => 'testMainMenu',\n            'October\\Tester\\Components\\ContentBlock' => 'testContentBlock',\n            'October\\Tester\\Components\\Comments' => 'testComments',\n        ];\n    }\n\n    public function registerFormWidgets()\n    {\n        return [\n            'October\\Tester\\FormWidgets\\Preview' => [\n                'label' => 'Preview',\n                'code'  => 'preview'\n            ]\n        ];\n    }\n\n    public function registerNavigation()\n    {\n        return [\n            'blog' => [\n                'label'       => 'Blog',\n                'url'         => 'http://rainlab.tld/blog/posts',\n                'icon'        => 'icon-pencil',\n                'permissions' => ['rainlab.blog.*'],\n                'order'       => 500,\n\n                'sideMenu' => [\n                    'posts' => [\n                        'label'       => 'Posts',\n                        'icon'        => 'icon-copy',\n                        'url'         => 'http://rainlab.tld/blog/posts',\n                        'permissions' => ['rainlab.blog.access_posts']\n                    ],\n                    'categories' => [\n                        'label'       => 'Categories',\n                        'icon'        => 'icon-list-ul',\n                        'url'         => 'http://rainlab.tld/blog/categories',\n                        'permissions' => ['rainlab.blog.access_categories']\n                    ],\n                ]\n            ]\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/classes/Users.php",
    "content": "<?php namespace October\\Tester\\Classes;\n\nclass Users\n{\n    public function getUsers()\n    {\n        return [\n            'Art Vandelay' => 'Arquitecht and Importer/Exporter',\n            'Carl' => 'where is he?',\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/components/Archive.php",
    "content": "<?php namespace October\\Tester\\Components;\n\nuse Cms\\Classes\\ComponentBase;\nuse Illuminate\\Http\\Request;\n\nclass Archive extends ComponentBase\n{\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Blog Archive Dummy Component',\n            'description' => 'Displays an archive of blog posts.'\n        ];\n    }\n\n    public function defineProperties()\n    {\n        return [\n            'posts-per-page' => [\n                 'description' => 'This will set the posts to display per page',\n                 'default' => 10\n            ],\n            'page-number-param' => [\n                'description' => 'The router parameter for getting the pagination page number',\n                'default' => 'pageNum'\n            ]\n        ];\n    }\n\n    public function posts()\n    {\n        return [\n            ['title' => 'Lorum ipsum', 'content' => 'Post Content #1'],\n            ['title' => 'La Playa Nudista', 'content' => 'Second Post Content']\n        ];\n    }\n\n    public function onTestAjax()\n    {\n        $this->page['var'] = 'page';\n    }\n\n    public function onTestDependencyInjection(Request $request)\n    {\n        return $request->method();\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/components/Categories.php",
    "content": "<?php namespace October\\Tester\\Components;\n\nuse Cms\\Classes\\ComponentBase;\nuse Cms\\Classes\\CodeBase;\n\nclass Categories extends ComponentBase\n{\n    public function __construct(?CodeBase $cmsObject = null, $properties = [])\n    {\n        parent::__construct($cmsObject, $properties);\n    }\n\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Blog Categories Dummy Component',\n            'description' => 'Displays the list of categories in the blog.'\n        ];\n    }\n\n    public function posts()\n    {\n        return [\n            ['title' => 'Lorum ipsum', 'content' => 'Post Content #1'],\n            ['title' => 'La Playa Nudista', 'content' => 'Second Post Content']\n        ];\n    }\n\n    public function onTestAjax()\n    {\n        $this->page['var'] = 'page';\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/components/Comments.php",
    "content": "<?php namespace October\\Tester\\Components;\n\nuse Cms\\Classes\\ComponentBase;\nuse Cms\\Classes\\CodeBase;\nuse October\\Tester\\Classes\\Users;\n\nclass Comments extends ComponentBase\n{\n    private $users;\n\n    public function __construct(?CodeBase $cmsObject = null, $properties = [], Users $users)\n    {\n        parent::__construct($cmsObject, $properties);\n        $this->users = $users;\n    }\n\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Blog Comments Dummy Component',\n            'description' => 'Displays the list of comments on a post.'\n        ];\n    }\n\n    public function posts()\n    {\n        return [\n            ['title' => 'Lorum ipsum', 'content' => 'Post Content #1'],\n            ['title' => 'La Playa Nudista', 'content' => 'Second Post Content']\n        ];\n    }\n\n    public function onTestAjax()\n    {\n        $this->page['var'] = 'page';\n    }\n\n    public function getUsers()\n    {\n        return $this->users;\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/components/ContentBlock.php",
    "content": "<?php namespace October\\Tester\\Components;\n\nuse Cms\\Classes\\ComponentBase;\n\nclass ContentBlock extends ComponentBase\n{\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Content Block Dummy Component',\n            'description' => 'Displays a editable content block.'\n        ];\n    }\n\n    public function onRender()\n    {\n        if ($output = $this->property('output')) {\n            return 'Custom output: '.$output;\n        }\n\n        return 'Pass';\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/components/MainMenu.php",
    "content": "<?php namespace October\\Tester\\Components;\n\nuse Cms\\Classes\\ComponentBase;\n\nclass MainMenu extends ComponentBase\n{\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Menu Dummy Component',\n            'description' => 'Displays a really cool menu.'\n        ];\n    }\n\n    public function menuItems()\n    {\n        return ['Home', 'Blog', 'About', 'Contact'];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/components/Post.php",
    "content": "<?php namespace October\\Tester\\Components;\n\nuse Cms\\Classes\\ComponentBase;\n\nclass Post extends ComponentBase\n{\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Blog Post Dummy Component',\n            'description' => 'Displays a blog post.'\n        ];\n    }\n\n    public function defineProperties()\n    {\n        return [\n            'show-featured' => [\n                 'description' => 'Display the post featured image or not',\n                 'default' => true\n            ]\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/components/mainmenu/default.htm",
    "content": "<h4>DEFAULT MARKUP: Menu</h4>\n<ul>\n{% partial __SELF__ ~ \"::items\" items=__SELF__.menuItems %}\n</ul>\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/components/mainmenu/items.htm",
    "content": "{% for item in items %}\n    <li>DEFAULT: {{ item }}</li>\n{% endfor %}"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/components/post/default.htm",
    "content": "<p>DEFAULT MARKUP: I am a post yay</p>"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/formwidgets/Preview.php",
    "content": "<?php namespace October\\Tester\\FormWidgets;\n\nuse Backend\\Classes\\FormWidgetBase;\n\nclass Preview extends FormWidgetBase\n{\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/updates/create_blog_settings_table.php",
    "content": ""
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/updates/create_comments_table.php",
    "content": ""
  },
  {
    "path": "modules/system/tests/fixtures/plugins/october/tester/updates/version.yaml",
    "content": "1.0.5:\n    - Create blog settings table\n    - Another update message\n    - Yet one more update message\n    - create_blog_settings_table.php\n1.0.4: Another fix\n1.0.3: Bug fix update that uses no scripts\n1.0.2:\n    - Create blog post comments table\n    - Multiple update messages are allowed\n    - create_comments_table.php\n1.0.1:\n    - Added some upgrade file and some seeding\n    - some_upgrade_file.php\n    - some_seeding_file.php\n\n\n\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/testvendor/test/Plugin.php",
    "content": "<?php namespace TestVendor\\Test;\n\nuse System\\Classes\\PluginBase;\n\nclass Plugin extends PluginBase\n{\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'Another Test Plugin',\n            'description' => 'Test plugin used by unit tests with the same name.',\n            'author' => 'Test Vendor'\n        ];\n    }\n\n    public function registerFormWidgets()\n    {\n        return [\n            'TestVendor\\Test\\FormWidgets\\Sample' => [\n                'label' => 'Sample',\n                'code'  => 'sample'\n            ]\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/fixtures/plugins/testvendor/test/formwidgets/Sample.php",
    "content": "<?php namespace TestVendor\\Test\\FormWidgets;\n\nuse Backend\\Classes\\FormWidgetBase;\n\nclass Sample extends FormWidgetBase\n{\n}\n"
  },
  {
    "path": "modules/system/tests/helpers/SystemTest.php",
    "content": "<?php\n\nuse System\\Helpers\\System;\n\nclass SystemTest extends TestCase\n{\n    public function testComposerToOctoberCode()\n    {\n        $helper = new System;\n\n        $code = $helper->composerToOctoberCode('acme.blog');\n        $this->assertEquals('acme.blog', $code);\n\n        $code = $helper->composerToOctoberCode('rainlab/mailchimp-plugin');\n        $this->assertEquals('rainlab.mailchimp', $code);\n\n        $code = $helper->composerToOctoberCode('rainlab/mailchimp-plugin-9999999');\n        $this->assertEquals('rainlab.mailchimp', $code);\n    }\n}\n"
  },
  {
    "path": "modules/system/tests/traits/AssetMakerTest.php",
    "content": "<?php\n\nclass AssetMakerStub\n{\n    use System\\Traits\\AssetMaker;\n\n    // Needed for guessViewPath(), which is used to set default assetPath\n    use System\\Traits\\ViewMaker;\n}\n\nclass AssetMakerTest extends TestCase\n{\n    private $stub;\n\n    public function setUp(): void\n    {\n        $this->createApplication();\n        $this->stub = new AssetMakerStub();\n    }\n\n    //\n    // Tests\n    //\n\n    public function testGetLocalPath()\n    {\n        $basePath = base_path();\n\n        // Default assetPath\n        $assetPath = $this->stub->guessViewPath('/assets', true);\n        $resolvedPath = $this->callProtectedMethod($this->stub, 'getLocalPath', [$assetPath]);\n        $this->assertEquals(realpath($basePath.$assetPath), realpath($resolvedPath));\n\n        // Paths with symbols\n        $resolvedPath = $this->callProtectedMethod($this->stub, 'getLocalPath', ['~/themes/demo/']);\n        $this->assertEquals(realpath($basePath.'/themes/demo/'), realpath($resolvedPath));\n\n        $resolvedPath = $this->callProtectedMethod($this->stub, 'getLocalPath', ['~/plugins/demo/']);\n        $this->assertEquals(realpath($basePath.'/plugins/demo/'), realpath($resolvedPath));\n\n        $resolvedPath = $this->callProtectedMethod($this->stub, 'getLocalPath', ['$/demo/']);\n        $this->assertEquals(realpath($basePath.'/plugins/demo/'), realpath($resolvedPath));\n\n        // Absolute Path\n        $resolvedPath = $this->callProtectedMethod($this->stub, 'getLocalPath', [$basePath.'/some/wild/absolute/path/']);\n        $this->assertEquals(realpath($basePath.'/some/wild/absolute/path/'), realpath($resolvedPath));\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/AssetMaker.php",
    "content": "<?php namespace System\\Traits;\n\nuse App;\nuse Url;\nuse Html;\nuse File;\nuse Event;\nuse Request;\nuse Backend;\nuse System\\Classes\\CombineAssets;\n\n/**\n * AssetMaker Trait\n * Adds asset based methods to a class\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait AssetMaker\n{\n    /**\n     * @var array Collection of assets to display in the layout.\n     */\n    protected $assets = ['js' => [], 'css' => [], 'rss' => []];\n\n    /**\n     * @var array Collection of combined and prioritized assets.\n     */\n    protected $assetBundles = ['js' => [], 'css' => []];\n\n    /**\n     * @var string assetPath specifies the relative path to the asset directory.\n     */\n    public $assetPath;\n\n    /**\n     * @var string assetUrlPath specifies the public path to the asset directory.\n     */\n    public $assetUrlPath;\n\n    /**\n     * @var string assetDefaults is the default attributes for assets.\n     */\n    protected $assetDefaults = ['build' => 'core'];\n\n    /**\n     * flushAssets disables the use, and subsequent broadcast, of assets. This is useful\n     * to call during an AJAX request to speed things up. This method works\n     * by specifically targeting the hasAssetsDefined method.\n     *\n     * @return void\n     */\n    public function flushAssets()\n    {\n        $this->assets = ['js' => [], 'css' => [], 'rss' => []];\n        $this->assetBundles = ['js' => [], 'css' => []];\n    }\n\n    /**\n     * makeAssets outputs `<link>` and `<script>` tags to load assets previously added with addJs and addCss method calls\n     * @param string $type Return an asset collection of a given type (css, rss, js) or null for all.\n     * @return string\n     */\n    public function makeAssets($type = null)\n    {\n        if ($type != null) {\n            $type = strtolower($type);\n        }\n\n        // Prevent duplicates\n        $this->removeDuplicateAssets();\n\n        $result = null;\n\n        // StyleSheet\n        if ($type == null || $type == 'css') {\n            foreach ($this->assets['css'] as $asset) {\n                if ($attributes = $this->renderAssetAttributes('css', $asset)) {\n                    $result .= \"<link {$attributes} />\" . PHP_EOL;\n                }\n            }\n\n            foreach ($this->combineBundledAssets('css') as $asset) {\n                if ($attributes = $this->renderAssetAttributes('css', $asset)) {\n                    $result .= \"<link {$attributes} />\" . PHP_EOL;\n                }\n            }\n        }\n\n        // RSS Feed\n        if ($type == null || $type == 'rss') {\n            foreach ($this->assets['rss'] as $asset) {\n                if ($attributes = $this->renderAssetAttributes('rss', $asset)) {\n                    $result .= \"<link {$attributes} />\" . PHP_EOL;\n                }\n            }\n        }\n\n        // JavaScript\n        if ($type == null || $type == 'js') {\n            foreach ($this->assets['js'] as $asset) {\n                if ($attributes = $this->renderAssetAttributes('js', $asset)) {\n                    $result .= \"<script {$attributes}></script>\" . PHP_EOL;\n                }\n            }\n\n            foreach ($this->combineBundledAssets('js') as $asset) {\n                if ($attributes = $this->renderAssetAttributes('js', $asset)) {\n                    $result .= \"<script {$attributes}></script>\" . PHP_EOL;\n                }\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * addJs includes a JavaScript asset to the asset list\n     */\n    public function addJs($name, $attributes = [])\n    {\n        if (is_array($name)) {\n            $name = $this->combineAssets($name, $this->getLocalPath($this->assetPath));\n        }\n\n        $jsPath = $this->getAssetPath($name);\n        $attributes = $this->processAssetAttributes($attributes);\n\n        if (isset($this->controller)) {\n            $this->controller->addJs($jsPath, $attributes);\n        }\n\n        $jsPath = $this->getAssetScheme($jsPath);\n\n        $this->assets['js'][] = ['path' => $jsPath, 'attributes' => $attributes];\n    }\n\n    /**\n     * addJsBundle includes a JS asset to the bundled combiner pipeline\n     */\n    public function addJsBundle(string $name, $attributes = [])\n    {\n        /**\n         * @event system.assets.beforeBundleAsset\n         * Provides an opportunity to modify adding an js bundle.\n         *\n         * The parameters provided are:\n         * object `$this`: The current asset maker object\n         * string `$type`: The type of the asset being bundled\n         * string `$name`: The name to the asset being bundled\n         * mixed `$attributes`: The array of attributes for the asset being bundled.\n         *\n         * The name and attributes parameters are provided by reference for modification.\n         * This event is also a halting event, so returning false will prevent the\n         * current asset from being bundled.\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.assets.beforeBundleAsset', function (AssetMaker $assetMaker, string $type, string $name, array $attributes) {\n         *         $assetMaker->addJs($name, $attributes);\n         *         return false;\n         *     });\n         *\n         * Or\n         *\n         *     $this->bindEvent('assets.beforeBundleAsset', function (AssetMaker $assetMaker, string $type, string $name, array $attributes) {\n         *         $assetMaker->addJs($name, $attributes);\n         *         return false;\n         *     });\n         *\n         */\n        if (\n            (method_exists($this, 'fireEvent') && ($this->fireEvent('assets.beforeBundleAsset', [$this, 'js', &$name, &$attributes], true) === false)) ||\n            (Event::fire('system.assets.beforeBundleAsset', [$this, 'js', &$name, &$attributes], true) === false)\n        ) {\n            return;\n        }\n\n        $jsPath = $this->getAssetPath($name);\n        $attributes = $this->processAssetAttributes($attributes);\n\n        if (isset($this->controller)) {\n            $this->controller->addJsBundle($jsPath, $attributes);\n        }\n\n        $this->assetBundles['js'][] = ['path' => $jsPath, 'attributes' => $attributes];\n    }\n\n    /**\n     * addCss includes a StyleSheet asset to the asset list\n     */\n    public function addCss($name, $attributes = [])\n    {\n        if (is_array($name)) {\n            $name = $this->combineAssets($name, $this->getLocalPath($this->assetPath));\n        }\n\n        $cssPath = $this->getAssetPath($name);\n        $attributes = $this->processAssetAttributes($attributes);\n\n        if (isset($this->controller)) {\n            $this->controller->addCss($cssPath, $attributes);\n        }\n\n        $cssPath = $this->getAssetScheme($cssPath);\n\n        $this->assets['css'][] = ['path' => $cssPath, 'attributes' => $attributes];\n    }\n\n    /**\n     * addCssBundle includes a CSS asset to the bundled combiner pipeline\n     */\n    public function addCssBundle(string $name, $attributes = [])\n    {\n        /**\n         * @event system.assets.beforeBundleAsset\n         * Provides an opportunity to modify adding an css bundle.\n         *\n         * The parameters provided are:\n         * object `$this`: The current asset maker object\n         * string `$type`: The type of the asset being bundled\n         * string `$name`: The name to the asset being bundled\n         * mixed `$attributes`: The array of attributes for the asset being bundled.\n         *\n         * The name and attributes parameters are provided by reference for modification.\n         * This event is also a halting event, so returning false will prevent the\n         * current asset from being bundled.\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.assets.beforeBundleAsset', function (AssetMaker $assetMaker, string $type, string $name, array $attributes) {\n         *         $assetMaker->addCss($name, $attributes);\n         *         return false;\n         *     });\n         *\n         * Or\n         *\n         *     $this->bindEvent('assets.beforeBundleAsset', function (AssetMaker $assetMaker, string $type, string $name, array $attributes) {\n         *         $assetMaker->addCss($name, $attributes);\n         *         return false;\n         *     });\n         *\n         */\n        if (\n            (method_exists($this, 'fireEvent') && ($this->fireEvent('assets.beforeBundleAsset', [$this, 'css', &$name, &$attributes], true) === false)) ||\n            (Event::fire('system.assets.beforeBundleAsset', [$this, 'css', &$name, &$attributes], true) === false)\n        ) {\n            return;\n        }\n\n        $cssPath = $this->getAssetPath($name);\n        $attributes = $this->processAssetAttributes($attributes);\n\n        if (isset($this->controller)) {\n            $this->controller->addCssBundle($cssPath, $attributes);\n        }\n\n        $this->assetBundles['css'][] = ['path' => $cssPath, 'attributes' => $attributes];\n    }\n\n    /**\n     * addRss adds an RSS link asset to the asset list. Call $this->makeAssets()\n     * in a view to output corresponding markup.\n     */\n    public function addRss($name, $attributes = [])\n    {\n        $rssPath = $this->getAssetPath($name);\n        $attributes = $this->processAssetAttributes($attributes);\n\n        if (isset($this->controller)) {\n            $this->controller->addRss($rssPath, $attributes);\n        }\n\n        $rssPath = $this->getAssetScheme($rssPath);\n\n        $this->assets['rss'][] = ['path' => $rssPath, 'attributes' => $attributes];\n    }\n\n    /**\n     * combineAssets runs asset paths through the Asset Combiner\n     */\n    public function combineAssets(array $assets, $localPath = ''): string\n    {\n        if (empty($assets)) {\n            return '';\n        }\n\n        $assetPath = $localPath ?: base_path($this->assetPath);\n\n        return CombineAssets::combine($assets, $assetPath);\n    }\n\n    /**\n     * getAssetPaths returns an array of all registered asset paths.\n     * @return array\n     */\n    public function getAssetPaths()\n    {\n        $this->removeDuplicateAssets();\n\n        $assets = [];\n\n        foreach ($this->assets as $type => $collection) {\n            $assets[$type] = [];\n            foreach ($collection as $asset) {\n                $assets[$type][] = $this->getAssetEntryBuildPath($asset);\n            }\n        }\n\n        foreach (['js', 'css'] as $bundleType) {\n            foreach ($this->combineBundledAssets($bundleType) as $asset) {\n                $assets[$bundleType][] = $this->getAssetEntryBuildPath($asset);\n            }\n        }\n\n        return $assets;\n    }\n\n    /**\n     * getAssetPathsWithAttributes returns an array of all registered asset paths\n     * with their attributes, suitable for use with ajax()->asset().\n     *\n     * Returns format: ['js' => [path => attributes, ...], 'css' => [...], ...]\n     *\n     * @return array\n     */\n    public function getAssetPathsWithAttributes()\n    {\n        $this->removeDuplicateAssets();\n\n        // Internal attributes to be excluded from output\n        $reserved = ['build'];\n\n        $assets = [];\n\n        foreach ($this->assets as $type => $collection) {\n            $assets[$type] = [];\n            foreach ($collection as $asset) {\n                $path = $this->getAssetEntryBuildPath($asset);\n                $attributes = array_except(array_get($asset, 'attributes', []), $reserved);\n                $assets[$type][$path] = $attributes;\n            }\n        }\n\n        foreach (['js', 'css'] as $bundleType) {\n            foreach ($this->combineBundledAssets($bundleType) as $asset) {\n                $path = $this->getAssetEntryBuildPath($asset);\n                $attributes = array_except(array_get($asset, 'attributes', []), $reserved);\n                $assets[$bundleType][$path] = $attributes;\n            }\n        }\n\n        return $assets;\n    }\n\n    /**\n     * getAssetPath locates a file based on it's definition. If the file starts with\n     * a forward slash, it will be returned in context of the application public path,\n     * otherwise it will be returned in context of the asset path.\n     * @param string $fileName File to load.\n     * @param string $assetPath Explicitly define an asset path.\n     * @return string Relative path to the asset file.\n     */\n    public function getAssetPath($fileName, $assetPath = null)\n    {\n        if (starts_with($fileName, ['//', 'http://', 'https://'])) {\n            return $fileName;\n        }\n\n        if (!$assetPath) {\n            $assetPath = $this->assetPath;\n        }\n\n        if ($assetPath === null || substr($fileName, 0, 1) == '/') {\n            return $fileName;\n        }\n\n        return $assetPath . '/' . $fileName;\n    }\n\n    /**\n     * hasAssetsDefined returns true if assets any have been added\n     */\n    public function hasAssetsDefined(): bool\n    {\n        return count($this->assets, COUNT_RECURSIVE) > 3 ||\n            count($this->assetBundles, COUNT_RECURSIVE) > 2;\n    }\n\n    /**\n     * processAssetAttributes\n     */\n    protected function processAssetAttributes($attributes)\n    {\n        // Attributes can be a scalar when used as a build reference\n        if (is_scalar($attributes)) {\n            $attributes = ['build' => $attributes];\n        }\n\n        // Type check\n        if (!is_array($attributes)) {\n            $attributes = [];\n        }\n\n        // Merge in defaults\n        $attributes = array_merge((array) $this->assetDefaults, $attributes);\n\n        return $attributes;\n    }\n\n    /**\n     * Internal helper, attaches a build code to an asset path\n     * @param  array $asset Stored asset array\n     * @return string\n     */\n    protected function getAssetEntryBuildPath($asset)\n    {\n        $path = $asset['path'];\n\n        // Has build and query string not already included\n        $useBuild = !empty($asset['attributes']['build']) &&\n            strpos($path, '?') === false;\n\n        if ($useBuild) {\n            $build = $asset['attributes']['build'];\n\n            if (!App::runningInBackend()) {\n                $build = '';\n            }\n            else {\n                $build = 'v' . Backend::assetVersion();\n            }\n\n            if (strlen($build)) {\n                $path .= '?' . $build;\n            }\n        }\n\n        return $path;\n    }\n\n    /**\n     * getAssetScheme is an internal helper to get the asset scheme.\n     */\n    protected function getAssetScheme(string $asset): string\n    {\n        if (starts_with($asset, ['//', 'http://', 'https://'])) {\n            return $asset;\n        }\n\n        if (substr($asset, 0, 1) === '/') {\n            $asset = Url::asset($asset);\n        }\n\n        return $asset;\n    }\n\n    /**\n     * removeDuplicateAssets removes duplicate and global assets from the entire collection\n     */\n    protected function removeDuplicateAssets()\n    {\n        $removeFunc = function($group, $removeGlobal) {\n            foreach ($group as &$collection) {\n                $pathCache = [];\n                foreach ($collection as $key => $asset) {\n                    if (!$path = array_get($asset, 'path')) {\n                        continue;\n                    }\n\n                    // Asset is global\n                    if ($removeGlobal && array_get($asset, 'attributes.build') === 'global') {\n                        array_forget($collection, $key);\n                        continue;\n                    }\n\n                    // Already seen asset\n                    if (isset($pathCache[$path])) {\n                        array_forget($collection, $key);\n                        continue;\n                    }\n\n                    $pathCache[$path] = true;\n                }\n            }\n\n            return $group;\n        };\n\n        $isAjax = Request::ajax();\n        $this->assets = $removeFunc($this->assets, $isAjax);\n        $this->assetBundles = $removeFunc($this->assetBundles, $isAjax);\n    }\n\n    /**\n     * renderAssetAttributes takes an asset definition and returns the necessary HTML output\n     */\n    protected function renderAssetAttributes(string $type, array $asset): string\n    {\n        if (!$path = $this->getAssetEntryBuildPath($asset)) {\n            return '';\n        }\n\n        // Internal attributes to be purged\n        // - build: the unique build code for cache busting\n        $reserved = ['build'];\n        $userAttrs = array_except(array_get($asset, 'attributes', []), $reserved);\n\n        /**\n         * @event system.assets.beforeAddAsset\n         * Provides an opportunity to inspect or modify an asset.\n         *\n         * The parameters provided are:\n         * string `$type`: The type of the asset being added\n         * string `$path`: The path to the asset being added\n         * array `$attributes`: The array of attributes for the asset being added.\n         *\n         * All the parameters are provided by reference for modification.\n         * This event is also a halting event, so returning false will prevent the\n         * current asset from being added. Note that duplicates are filtered out\n         * before the event is fired.\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.assets.beforeAddAsset', function (string $type, string $path, array $attributes) {\n         *         if (in_array($path, $blockedAssets)) {\n         *             return false;\n         *         }\n         *     });\n         *\n         * Or\n         *\n         *     $this->bindEvent('assets.beforeAddAsset', function (string $type, string $path, array $attributes) {\n         *         $attributes['special_cdn_flag'] = false;\n         *     });\n         *\n         */\n        if (\n            (method_exists($this, 'fireEvent') && ($this->fireEvent('assets.beforeAddAsset', [&$type, &$path, &$userAttrs], true) === false)) ||\n            (Event::fire('system.assets.beforeAddAsset', [&$type, &$path, &$userAttrs], true) === false)\n        ) {\n            return '';\n        }\n\n        // Determine final attributes\n        $attrs = [];\n        if ($type === 'css') {\n            $attrs['rel'] = 'stylesheet';\n            $attrs['href'] = $path;\n        }\n        elseif ($type === 'js') {\n            $attrs['src'] = $path;\n        }\n        elseif ($type === 'rss') {\n            $attrs['rel'] = 'alternate';\n            $attrs['href'] = $path;\n            $attrs['title'] = 'RSS';\n            $attrs['type'] = 'application/rss+xml';\n        }\n\n        // Generate HTML attribute string\n        return trim(Html::attributes(array_merge($attrs, $userAttrs)));\n    }\n\n    /**\n     * combineBundledAssets spins over every bundle definition and combines them to an asset\n     */\n    protected function combineBundledAssets($type): array\n    {\n        $assets = [];\n        $bundles = [];\n\n        // Split bundles in to builds\n        foreach ($this->assetBundles[$type] as $asset) {\n            $build = $asset['attributes']['build'] ?? 'core';\n            $bundles[$build][] = $asset;\n        }\n\n        // Combine all asset paths and defined attributes\n        foreach ($bundles as $build => $bundle) {\n            $paths = [];\n            $attributes = [];\n            foreach ($bundle as $asset) {\n                $paths[] = $this->getLocalPath($asset['path'] ?? '');\n                $attributes += $asset['attributes'] ?? [];\n            }\n\n            $assets[] = ['path' => $this->combineAssets($paths), 'attributes' => $attributes];\n        }\n\n        return $assets;\n    }\n\n    /**\n     * getLocalPath converts a relative path to a local path\n     */\n    protected function getLocalPath(string $relativePath): string\n    {\n        $relativePath = File::symbolizePath($relativePath);\n\n        if (!str_starts_with($relativePath, base_path())) {\n            $relativePath = base_path($relativePath);\n        }\n\n        return $relativePath;\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/ConfigMaker.php",
    "content": "<?php namespace System\\Traits;\n\nuse Yaml;\nuse File;\nuse Lang;\nuse Event;\nuse System;\nuse stdClass;\nuse SystemException;\nuse October\\Rain\\Html\\Helper as HtmlHelper;\n\n/**\n * ConfigMaker trait adds configuration based methods to a class\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait ConfigMaker\n{\n    /**\n     * @var string configPath specifies a path to the config directory.\n     */\n    protected $configPath;\n\n    /**\n     * makeConfig reads the contents of the supplied file and applies it to this object.\n     * @param mixed $configFile\n     * @param array $requiredConfig\n     * @return object\n     */\n    public function makeConfig($configFile = [], $requiredConfig = [])\n    {\n        if (!$configFile) {\n            $configFile = [];\n        }\n\n        // Config already made\n        if (is_object($configFile)) {\n            $config = $configFile;\n        }\n        // Embedded config\n        elseif (is_array($configFile)) {\n            $config = $this->makeConfigFromArray($configFile);\n        }\n        // Process config from file contents\n        else {\n            if (isset($this->controller) && method_exists($this->controller, 'getConfigPath')) {\n                $configFile = $this->controller->getConfigPath($configFile);\n            }\n            else {\n                $configFile = $this->getConfigPath($configFile);\n            }\n\n            if (!File::isFile($configFile)) {\n                throw new SystemException(Lang::get(\n                    'system::lang.config.not_found',\n                    ['file' => $configFile, 'location' => get_called_class()]\n                ));\n            }\n\n            $config = Yaml::parseFileCached($configFile);\n\n            /**\n             * @event system.extendConfigFile\n             * Provides an opportunity to modify config files\n             *\n             * Example usage:\n             *\n             *     Event::listen('system.extendConfigFile', function ((string) $path, (array) $config) {\n             *         if ($path === '/plugins/author/plugin-name/controllers/mycontroller/config_relation.yaml') {\n             *             unset($config['property_value']['view']['recordUrl']);\n             *             return $config;\n             *         }\n             *     });\n             *\n             */\n            $publicFile = File::localToPublic($configFile);\n            if ($results = Event::fire('system.extendConfigFile', [$publicFile, $config])) {\n                foreach ($results as $result) {\n                    if (!is_array($result)) {\n                        continue;\n                    }\n                    $config = array_merge($config, $result);\n                }\n            }\n\n            $config = $this->makeConfigFromArray($config);\n        }\n\n        // Validate required configuration\n        foreach ($requiredConfig as $property) {\n            if (!property_exists($config, $property)) {\n                throw new SystemException(Lang::get(\n                    'system::lang.config.required',\n                    ['property' => $property, 'location' => get_called_class()]\n                ));\n            }\n        }\n\n        return $config;\n    }\n\n    /**\n     * makeConfigFromArray makes a config object from an array, making the first\n     * level keys properties of a new object.\n     *\n     * @param array $configArray Config array.\n     * @return stdClass The config object\n     */\n    public function makeConfigFromArray($configArray = [])\n    {\n        $object = new stdClass;\n\n        if (!is_array($configArray)) {\n            return $object;\n        }\n\n        foreach ($configArray as $name => $value) {\n            $object->{$name} = $value;\n        }\n\n        return $object;\n    }\n\n    /**\n     * getConfigPath locates a file based on it's definition. If the file starts with\n     * the ~ symbol it will be returned in context of the application base path,\n     * otherwise it will be returned in context of the config path.\n     * @param string $fileName File to load.\n     * @param mixed $configPath Explicitly define a config path.\n     * @return string Full path to the config file.\n     */\n    public function getConfigPath($fileName, $configPath = null)\n    {\n        if (!isset($this->configPath)) {\n            $this->configPath = $this->guessConfigPath();\n        }\n\n        if (!$configPath) {\n            $configPath = $this->configPath;\n        }\n\n        $fileName = File::symbolizePath($fileName);\n\n        if (System::checkBaseDir($fileName)) {\n            return $fileName;\n        }\n\n        if (!is_array($configPath)) {\n            $configPath = [$configPath];\n        }\n\n        foreach ($configPath as $path) {\n            $_fileName = $path . '/' . $fileName;\n            if (File::isFile($_fileName)) {\n                return $_fileName;\n            }\n        }\n\n        return $fileName;\n    }\n\n    /**\n     * guessConfigPath guesses the package path for the called class.\n     * @param string $suffix An extra path to attach to the end\n     * @return string\n     */\n    public function guessConfigPath($suffix = '')\n    {\n        $class = get_called_class();\n        return $this->guessConfigPathFrom($class, $suffix);\n    }\n\n    /**\n     * guessConfigPathFrom guesses the package path from a specified class.\n     * @param string $class Class to guess path from.\n     * @param string $suffix An extra path to attach to the end\n     * @return string\n     */\n    public function guessConfigPathFrom($class, $suffix = '')\n    {\n        $classFolder = strtolower(class_basename($class));\n        $classFile = realpath(dirname(File::fromClass($class)));\n        return $classFile ? $classFile . '/' . $classFolder . $suffix : null;\n    }\n\n    /**\n     * mergeConfig merges two configuration sources, either prepared or not, and returns\n     * them as a single configuration object.\n     * @param mixed $configA\n     * @param mixed $configB\n     * @return stdClass The config object\n     */\n    public function mergeConfig($configA, $configB)\n    {\n        $configA = $this->makeConfig($configA);\n\n        $configB = $this->makeConfig($configB);\n\n        return (object) array_merge((array) $configA, (array) $configB);\n    }\n\n    /**\n     * getConfigValueFrom will apply the config getter convention\n     */\n    protected function getConfigValueFrom(object $configObj, ?string $name = null, $default = null)\n    {\n        // Return all config\n        if ($name === null) {\n            return $configObj;\n        }\n\n        // Array field name, eg: field[key][key2][key3]\n        $keyParts = HtmlHelper::nameToArray($name);\n\n        // First part will be the field name, pop it off\n        $fieldName = array_shift($keyParts);\n        if (!isset($configObj->{$fieldName})) {\n            return $default;\n        }\n\n        $result = $configObj->{$fieldName};\n\n        // Loop the remaining key parts and build a result\n        foreach ($keyParts as $key) {\n            if (!is_array($result) || !array_key_exists($key, $result)) {\n                return $default;\n            }\n\n            $result = $result[$key];\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/DependencyMaker.php",
    "content": "<?php namespace System\\Traits;\n\nuse System\\Classes\\DependencyResolver;\n\n/**\n * DependencyMaker is used for DI injection in method calls.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait DependencyMaker\n{\n    /**\n     * @var DependencyResolver dependencyResolver for AJAX handlers and controller actions.\n     */\n    protected $dependencyResolver;\n\n    /**\n     * makeCallMethod will prepare method args with DI and call the method\n     */\n    protected function makeCallMethod($instance, string $method, array $parameters = [])\n    {\n        if ($this->dependencyResolver === null) {\n            $this->dependencyResolver = new DependencyResolver;\n        }\n\n        $resolvedParams = $this->dependencyResolver->resolve($instance, $method, $parameters);\n\n        return $instance->$method(...$resolvedParams);\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/ElementRenderer.php",
    "content": "<?php namespace System\\Traits;\n\n/**\n * @deprecated\n */\ntrait ElementRenderer\n{\n    /**\n     * setDefaults\n     */\n    protected function setDefaults(): void\n    {\n    }\n\n    /**\n     * renderBody is a helper for dealing with mixed body types\n     */\n    protected function renderBody($body): string\n    {\n        if (is_callable($body)) {\n            return (string) ($body)();\n        }\n\n        if (is_array($body)) {\n            $out = '';\n\n            foreach ($body as $el) {\n                if (is_callable($el)) {\n                    $out .= (string) ($el)();\n                }\n                else {\n                    $out .= (string) $el;\n                }\n            }\n\n            return $out;\n        }\n\n        return (string) $body;\n    }\n\n    /**\n     * renderAsString\n     */\n    public function renderAsString(): string\n    {\n        $this->setDefaults();\n\n        ob_start();\n        $this->render()();\n        return ob_get_clean();\n    }\n\n    /**\n     * __toString\n     */\n    public function __toString()\n    {\n        return $this->renderAsString();\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/EventEmitter.php",
    "content": "<?php namespace System\\Traits;\n\nuse Event;\n\n/**\n * EventEmitter adds system event related features to any class.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\n\ntrait EventEmitter\n{\n    use \\October\\Rain\\Support\\Traits\\Emitter;\n\n    /**\n     * fireSystemEvent fires a combination of local and global events. The first segment is removed\n     * from the event name locally and the local object is passed as the first\n     * argument to the event globally. Halting is also enabled by default.\n     *\n     * For example:\n     *\n     *     $this->fireSystemEvent('backend.list.myEvent', ['my value']);\n     *\n     * Is equivalent to:\n     *\n     *     $this->fireEvent('list.myEvent', ['myvalue'], true);\n     *\n     *     Event::fire('backend.list.myEvent', [$this, 'myvalue'], true);\n     *\n     * @param string $event Event name\n     * @param array $params Event parameters\n     * @param bool $halt Halt after first non-null result\n     * @return mixed\n     */\n    public function fireSystemEvent($event, $params = [], $halt = true)\n    {\n        $result = [];\n\n        $shortEvent = substr($event, strpos($event, '.') + 1);\n\n        $longArgs = array_merge([$this], $params);\n\n        // Local event first\n        if (!is_null($response = $this->fireEvent($shortEvent, $params, $halt))) {\n            if ($halt) {\n                return $response;\n            }\n\n            $result = array_merge($result, $response);\n        }\n\n        // Global event second\n        if (!is_null($response = Event::fire($event, $longArgs, $halt))) {\n            if ($halt) {\n                return $response;\n            }\n\n            $result = array_merge($result, $response);\n        }\n\n        if ($result) {\n            return $result;\n        }\n\n        return $halt ? null : [];\n    }\n\n    /**\n     * fireViewEvent is a special event function used for extending within view files,\n     * allowing HTML to be injected multiple times.\n     *\n     * For example:\n     *\n     *     <?= $this->fireViewEvent('backend.auth.extendSigninView') ?>\n     *\n     * @param string $event Event name\n     * @param array $params Event parameters\n     * @return string\n     */\n    public function fireViewEvent($event, $params = [])\n    {\n        // Add the local object to the first parameter always\n        array_unshift($params, $this);\n\n        if ($result = Event::fire($event, $params)) {\n            return implode(PHP_EOL.PHP_EOL, (array) $result);\n        }\n\n        return '';\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/KeyCodeModel.php",
    "content": "<?php namespace System\\Traits;\n\n/**\n * KeyCodeModel trait adds findByKey and findByCode cached methods to a model\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait KeyCodeModel\n{\n    /**\n     * @var array cacheByKey cache of self, by key.\n     */\n    protected static $cacheByKey = [];\n\n    /**\n     * @var array cacheByCode cache of self, by code.\n     */\n    protected static $cacheByCode = [];\n\n    /**\n     * clearKeyCodeCache clears the static lookup caches\n     */\n    public static function clearKeyCodeCache()\n    {\n        self::$cacheByKey = [];\n        self::$cacheByCode = [];\n    }\n\n    /**\n     * findByKey locates a tax class by its key, cached.\n     */\n    public static function findByKey(?string $key = null): ?self\n    {\n        if (!$key) {\n            return null;\n        }\n\n        if (isset(self::$cacheByKey[$key])) {\n            return self::$cacheByKey[$key];\n        }\n\n        return self::$cacheByKey[$key] = self::find($key);\n    }\n\n    /**\n     * findByCode locates a payment method by its code, cached.\n     */\n    public static function findByCode(?string $code = null): ?self\n    {\n        if (!$code) {\n            return null;\n        }\n\n        if (isset(self::$cacheByCode[$code])) {\n            return self::$cacheByCode[$code];\n        }\n\n        return self::$cacheByCode[$code] = self::where('code', $code)->first();\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/NoteMaker.php",
    "content": "<?php namespace System\\Traits;\n\n/**\n * NoteMaker makes notes as it does work.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait NoteMaker\n{\n    /**\n     * @var \\Illuminate\\Console\\OutputStyle\n     */\n    protected $notesOutput;\n\n    /**\n     * @var \\Illuminate\\Console\\Command\n     */\n    protected $notesCommand;\n\n    /**\n     * note writes a note event for the migrator.\n     * @param  string  $message\n     * @return self\n     */\n    protected function note($message)\n    {\n        if ($this->notesOutput !== null) {\n            $this->notesOutput->writeln($message);\n        }\n\n        return $this;\n    }\n\n    /**\n     * setNotesOutput sets an output stream for writing notes.\n     * @param  \\Illuminate\\Console\\OutputStyle $output\n     */\n    public function setNotesOutput($output)\n    {\n        $this->notesOutput = $output;\n\n        return $this;\n    }\n\n    /**\n     * setNotesCommand sets the fully qualified command for writing notes.\n     * @param  \\Illuminate\\Console\\Command $command\n     */\n    public function setNotesCommand($command)\n    {\n        $this->notesCommand = $command;\n\n        $this->notesOutput = $command->getOutput();\n\n        return $this;\n    }\n\n    /**\n     * getNotesOutput returns the note output, used by command line.\n     * @return \\Illuminate\\Console\\OutputStyle|null\n     */\n    public function getNotesOutput()\n    {\n        return $this->notesOutput;\n    }\n\n    /**\n     * getNotesOutput returns the note command object, if available.\n     * @return \\Illuminate\\Console\\Command|null\n     */\n    public function getNotesCommand()\n    {\n        return $this->notesCommand;\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/PropertyContainer.php",
    "content": "<?php namespace System\\Traits;\n\n/**\n * PropertyContainer adds properties and methods for classes that could define properties,\n * like components or report widgets.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait PropertyContainer\n{\n    /**\n     * @var array properties contains the object property values.\n     */\n    protected $properties = [];\n\n    /**\n     * validateProperties against the defined properties of the class.\n     * This method also sets default properties.\n     * @param array $properties The supplied property values.\n     * @return array The validated property set, with defaults applied.\n     */\n    public function validateProperties(array $properties)\n    {\n        $definedProperties = $this->defineProperties() ?: [];\n\n        // Determine and implement default values\n        $defaultProperties = [];\n\n        foreach ($definedProperties as $name => $information) {\n            if (array_key_exists('default', $information)) {\n                $defaultProperties[$name] = $information['default'];\n            }\n        }\n\n        $properties = array_merge($defaultProperties, $properties);\n\n        return $properties;\n    }\n\n    /**\n     * defineProperties used by this class.\n     * This method should be used as an override in the extended class.\n     */\n    public function defineProperties()\n    {\n        return [];\n    }\n\n    /**\n     * setProperties for multiple values\n     * @param array $properties\n     * @return void\n     */\n    public function setProperties($properties)\n    {\n        $this->properties = $this->validateProperties($properties);\n    }\n\n    /**\n     * setProperty for a single value\n     * @param string $name\n     * @param mixed $value\n     * @return void\n     */\n    public function setProperty($name, $value)\n    {\n        array_set($this->properties, $name, $value);\n    }\n\n    /**\n     * getProperties returns all properties.\n     * @return array\n     */\n    public function getProperties()\n    {\n        return $this->properties;\n    }\n\n    /**\n     * property returns a defined property value or default if one is not set.\n     * @param string $name The property name to look for.\n     * @param ?string $default A default value to return if no name is found.\n     * @return ?string The property value or the default specified.\n     */\n    public function property($name, $default = null)\n    {\n        return array_get($this->properties, $name, $default);\n    }\n\n    /**\n     * getPropertyOptions returns options for multi-option properties (drop-downs, etc.)\n     * @param string $property Specifies the property name\n     * @return array Return an array of option values and descriptions\n     */\n    public function getPropertyOptions($property)\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/ResponseMaker.php",
    "content": "<?php namespace System\\Traits;\n\nuse Response;\nuse Symfony\\Component\\HttpFoundation\\ResponseHeaderBag;\nuse Symfony\\Component\\HttpFoundation\\Response as BaseResponse;\nuse Larajax\\Classes\\AjaxResponse;\n\n/**\n * ResponseMaker stores attributes the can be used to prepare a response from the server.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait ResponseMaker\n{\n    /**\n     * @var int statusCode for the response\n     */\n    protected $statusCode = 200;\n\n    /**\n     * @var mixed responseOverride for the standard controller response.\n     */\n    protected $responseOverride = null;\n\n    /**\n     * @var Symfony\\Component\\HttpFoundation\\ResponseHeaderBag responseHeaderBag\n     */\n    protected $responseHeaderBag = null;\n\n    /**\n     * @var array responseBrowserEvents for the AJAX framework.\n     */\n    protected $responseBrowserEvents = [];\n\n    /**\n     * Sets the status code for the current web response.\n     * @param int $code Status code\n     * @return void\n     */\n    public function setStatusCode($code)\n    {\n        $this->statusCode = (int) $code;\n    }\n\n     /**\n     * getStatusCode returns the status code for the current web response.\n     * @return int Status code\n     */\n    public function getStatusCode()\n    {\n        return $this->statusCode;\n    }\n\n    /**\n     * setResponse for the current page request cycle, this value takes priority\n     * over the standard response prepared by the controller.\n     * @param mixed $response Response object or string\n     * @return void\n     */\n    public function setResponse($response)\n    {\n        $this->responseOverride = $response;\n    }\n\n    /**\n     * setResponseHeader value\n     *\n     * @param  string  $key\n     * @param  array|string  $values\n     * @param  bool    $replace\n     * @return void\n     */\n    public function setResponseHeader($key, $values, $replace = true)\n    {\n        if ($this->responseHeaderBag === null) {\n            $this->responseHeaderBag = new ResponseHeaderBag;\n        }\n\n        $this->responseHeaderBag->set($key, $values, $replace);\n    }\n\n    /**\n     * setResponseCookie adds a cookie to the response.\n     *\n     * @param  \\Symfony\\Component\\HttpFoundation\\Cookie|mixed  $cookie\n     * @return void\n     */\n    public function setResponseCookie($cookie)\n    {\n        if ($this->responseHeaderBag === null) {\n            $this->responseHeaderBag = new ResponseHeaderBag;\n        }\n\n        if (is_string($cookie) && function_exists('cookie')) {\n            $cookie = call_user_func_array('cookie', func_get_args());\n        }\n\n        $this->responseHeaderBag->setCookie($cookie);\n    }\n\n    /**\n     * getResponseHeaders as a response header bag\n     * @return Symfony\\Component\\HttpFoundation\\ResponseHeaderBag|null\n     */\n    public function getResponseHeaders()\n    {\n        return $this->responseHeaderBag;\n    }\n\n    /**\n     * dispatchBrowserEvent queues a browser event\n     */\n    public function dispatchBrowserEvent(string $event, ?array $data = null)\n    {\n        $this->responseBrowserEvents[] = [\n            'event' => $event,\n            'data' => $data,\n            'async' => false\n        ];\n    }\n\n    /**\n     * dispatchBrowserEvent queues a browser event\n     */\n    public function dispatchBrowserEventAsync(string $event, ?array $data = null)\n    {\n        $this->responseBrowserEvents[] = [\n            'event' => $event,\n            'data' => $data,\n            'async' => true\n        ];\n    }\n\n    /**\n     * getBrowserEvents returns the queued browser events\n     */\n    public function getBrowserEvents(): array\n    {\n        return $this->responseBrowserEvents;\n    }\n\n    /**\n     * makeResponse prepares a response that considers overrides and custom responses.\n     * @param mixed $contents\n     * @return mixed\n     */\n    public function makeResponse($contents)\n    {\n        if ($this->responseOverride !== null) {\n            $contents = $this->responseOverride;\n        }\n\n        if (is_string($contents)) {\n            $contents = Response::make($contents, $this->getStatusCode(), ['Content-Type' => 'text/html']);\n        }\n\n        if ($responseHeaders = $this->getResponseHeaders()) {\n            if ($contents instanceof BaseResponse && method_exists($contents, 'withHeaders')) {\n                $contents = $contents->{'withHeaders'}($responseHeaders);\n            }\n            elseif ($contents instanceof AjaxResponse) {\n                $contents->headers($responseHeaders->all());\n            }\n        }\n\n        if ($responseEvents = $this->getBrowserEvents()) {\n            if ($contents instanceof AjaxResponse) {\n                foreach ($responseEvents as $event) {\n                    if ($event['async'] ?? false) {\n                        $contents->browserEvent($event['event'], $event['data']);\n                    }\n                    else {\n                        $contents->browserEventAsync($event['event'], $event['data']);\n                    }\n                }\n            }\n        }\n\n        return $contents;\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/SecurityController.php",
    "content": "<?php namespace System\\Traits;\n\nuse Date;\nuse Crypt;\nuse Config;\nuse Request;\nuse Session;\nuse Symfony\\Component\\HttpFoundation\\Cookie;\n\n/**\n * SecurityController Trait\n * Adds cross-site scripting protection methods to a controller based class\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait SecurityController\n{\n    /**\n     * makeXsrfCookie adds anti-CSRF cookie.\n     * Adds a cookie with a token for CSRF checks to the response.\n     */\n    protected function makeXsrfCookie(): Cookie\n    {\n        $config = Config::get('session');\n\n        return new Cookie(\n            'XSRF-TOKEN',\n            Session::token(),\n            Date::now()->addMinutes((int) $config['lifetime'])->getTimestamp(),\n            $config['path'],\n            $config['domain'],\n            $config['secure'],\n            false,\n            false,\n            $config['same_site'] ?? null\n        );\n    }\n\n    /**\n     * verifyCsrfToken checks if the request requires verification first (not GET, HEAD, OPTIONS) and\n     * then the request data / headers for a valid CSRF token. Returns false if a valid token is not\n     * found. Override this method to disable the check.\n     * @return bool\n     */\n    protected function verifyCsrfToken(): bool\n    {\n        if (!Config::get('system.enable_csrf_protection', true)) {\n            return true;\n        }\n\n        if (in_array(Request::method(), ['HEAD', 'GET', 'OPTIONS'])) {\n            return true;\n        }\n\n        $token = Request::input('_token') ?: Request::header('X-CSRF-TOKEN');\n\n        if (!$token && $header = Request::header('X-XSRF-TOKEN')) {\n            $token = Crypt::decrypt($header, false);\n        }\n\n        if (!is_string($token) || !strlen($token) || !strlen(Session::token())) {\n            return false;\n        }\n\n        return hash_equals(\n            Session::token(),\n            $token\n        );\n    }\n\n    /**\n     * verifyForceSecure checks if the back-end should force a secure protocol\n     * (HTTPS) enabled by config.\n     * @return bool\n     */\n    protected function verifyForceSecure(): bool\n    {\n        if (Request::secure() || Request::ajax()) {\n            return true;\n        }\n\n        return !Config::get('backend.force_secure', false);\n    }\n}\n"
  },
  {
    "path": "modules/system/traits/ViewMaker.php",
    "content": "<?php namespace System\\Traits;\n\nuse File;\nuse Lang;\nuse Block;\nuse System;\nuse SystemException;\nuse Throwable;\n\n/**\n * ViewMaker Trait adds view based methods to a class\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait ViewMaker\n{\n    /**\n     * @var array vars is a list of variables to pass to the page\n     */\n    public $vars = [];\n\n    /**\n     * @var string|array viewPath specifies a path to the views directory\n     */\n    protected $viewPath;\n\n    /**\n     * @var string layoutPath specifies a path to the layout directory\n     */\n    protected $layoutPath;\n\n    /**\n     * @var string layout to use for the view\n     */\n    public $layout;\n\n    /**\n     * @var bool suppressLayout prevents the use of a layout\n     */\n    public $suppressLayout = false;\n\n    /**\n     * @var array viewPathGuessCache remembers path guesses for performance.\n     */\n    protected $viewPathGuessCache = [];\n\n    /**\n     * addViewPath prepends a path on the available view path locations\n     * @param string|array $path\n     * @return void\n     */\n    public function addViewPath($path, $append = false)\n    {\n        $this->viewPath = (array) $this->viewPath;\n\n        if (is_array($path)) {\n            $this->viewPath = $append\n                ? array_merge($this->viewPath, $path)\n                : array_merge($path, $this->viewPath);\n        }\n        else {\n            $append\n                ? array_push($this->viewPath, $path)\n                : array_unshift($this->viewPath, $path);\n        }\n    }\n\n    /**\n     * getViewPaths returns the active view path locations\n     * @return array\n     */\n    public function getViewPaths()\n    {\n        return (array) $this->viewPath;\n    }\n\n    /**\n     * makePartial renders a partial file contents located in the views folder\n     * @param string $partial The view to load.\n     * @param array $params Parameter variables to pass to the view.\n     * @param bool $throwException Throw an exception if the partial is not found.\n     * @return mixed Partial contents or false if not throwing an exception.\n     */\n    public function makePartial($partial, $params = [], $throwException = true)\n    {\n        $notRealPath = realpath($partial) === false || is_dir($partial) === true;\n        if (!File::isPathSymbol($partial) && $notRealPath) {\n            $folder = strpos($partial, '/') !== false ? dirname($partial) . '/' : '';\n            $partial = $folder . '_' . strtolower(basename($partial));\n        }\n\n        $partialPath = $this->getViewPath($partial);\n\n        if (!$partialPath || !File::exists($partialPath)) {\n            if ($throwException) {\n                throw new SystemException(Lang::get('backend::lang.partial.not_found_name', ['name' => $partial]));\n            }\n\n            return false;\n        }\n\n        return $this->makeFileContents($partialPath, $params);\n    }\n\n    /**\n     * makeView loads a view with the name specified. Applies layout if its name is provided\n     * by the parent object. The view file must be situated in the views directory, and has\n     * the extension \"htm\" or \"php\"\n     * @param string $view Specifies the view name, without extension. Eg: \"index\".\n     * @return string\n     */\n    public function makeView($view)\n    {\n        $viewPath = $this->getViewPath(strtolower($view));\n\n        $contents = $this->makeFileContents($viewPath);\n\n        return $this->makeViewContent($contents);\n    }\n\n    /**\n     * makeViewContent renders supplied contents inside a layout\n     * @param string $contents The inner contents as a string.\n     * @param string $layout Specifies the layout name.\n     * @return string\n     */\n    public function makeViewContent($contents, $layout = null)\n    {\n        if ($this->suppressLayout || !$this->layout) {\n            return $contents;\n        }\n\n        // Append any undefined block content to the body block\n        Block::set('undefinedBlock', $contents);\n        Block::append('body', Block::get('undefinedBlock'));\n\n        return $this->makeLayout($layout);\n    }\n\n    /**\n     * makeLayout renders a layout\n     * @param string $name Specifies the layout name.\n     * If this parameter is omitted, the $layout property will be used.\n     * @param array $params Parameter variables to pass to the view.\n     * @param bool $throwException Throw an exception if the layout is not found\n     * @return mixed The layout contents, or false.\n     */\n    public function makeLayout($name = null, $params = [], $throwException = true)\n    {\n        $layout = $name ?? $this->layout;\n        if (!$layout) {\n            return '';\n        }\n\n        $layoutPath = $this->getViewPath($layout, $this->layoutPath);\n\n        if (!File::exists($layoutPath)) {\n            if ($throwException) {\n                throw new SystemException(Lang::get('cms::lang.layout.not_found_name', ['name' => $layoutPath]));\n            }\n\n            return false;\n        }\n\n        return $this->makeFileContents($layoutPath, $params);\n    }\n\n    /**\n     * makeLayoutPartial renders a layout partial\n     * @param string $partial The view to load.\n     * @param array $params Parameter variables to pass to the view.\n     * @return string The layout partial contents\n     */\n    public function makeLayoutPartial($partial, $params = [])\n    {\n        if (!File::isLocalPath($partial) && !File::isPathSymbol($partial)) {\n            $folder = strpos($partial, '/') !== false ? dirname($partial) . '/' : '';\n            $partial = $folder . '_' . strtolower(basename($partial));\n        }\n\n        return $this->makeLayout($partial, $params);\n    }\n\n    /**\n     * getViewPath locates a file based on its definition. The file name can be prefixed\n     * with a symbol (~|$) to return in context of the application or plugin base path,\n     * otherwise it will be returned in context of this object view path.\n     * @param string $fileName\n     * @param mixed $viewPath\n     * @return string\n     */\n    public function getViewPath($fileName, $viewPath = null)\n    {\n        $viewExtensions = ['php', 'htm'];\n\n        if (!isset($this->viewPath)) {\n            $this->viewPath = $this->guessViewPath();\n        }\n\n        if (!$viewPath) {\n            $viewPath = $this->viewPath;\n        }\n\n        if (!is_array($viewPath)) {\n            $viewPath = [$viewPath];\n        }\n\n        // Remove extension from path\n        $fileName = File::anyname($fileName);\n\n        // Check in view paths\n        if (!File::isPathSymbol($fileName)) {\n            foreach ($viewPath as $path) {\n                $fullPath = File::symbolizePath($path);\n\n                foreach ($viewExtensions as $extension) {\n                    $_fileName = $fullPath . '/' . $fileName . '.' . $extension;\n                    if (File::isFile($_fileName)) {\n                        return $_fileName;\n                    }\n                }\n            }\n        }\n\n        // Check in absolute\n        $fileName = File::symbolizePath($fileName);\n        if (strpos($fileName, '/') !== false) {\n            foreach ($viewExtensions as $extension) {\n                $_fileName = $fileName . '.' . $extension;\n                if (System::checkBaseDir($_fileName)) {\n                    return $_fileName;\n                }\n            }\n        }\n\n        return '';\n    }\n\n    /**\n     * makeFileContents includes a file path using output buffering\n     * @param string $filePath Absolute path to the view file.\n     * @param array $extraParams Parameters that should be available to the view.\n     * @return string\n     */\n    public function makeFileContents($filePath, $extraParams = [])\n    {\n        if (!strlen($filePath) || !File::isFile($filePath) || !System::checkBaseDir($filePath)) {\n            return '';\n        }\n\n        if (!is_array($extraParams)) {\n            $extraParams = [];\n        }\n\n        $vars = array_merge(\n            $this->vars,\n            $extraParams,\n            ['_context' => $extraParams]\n        );\n\n        $obLevel = ob_get_level();\n\n        ob_start();\n\n        extract($vars);\n\n        // We'll evaluate the contents of the view inside a try/catch block so we can\n        // flush out any stray output that might get out before an error occurs or\n        // an exception is thrown. This prevents any partial views from leaking.\n        try {\n            include $filePath;\n        }\n        catch (Throwable $e) {\n            $this->handleViewException($e, $obLevel);\n        }\n\n        return ob_get_clean();\n    }\n\n    /**\n     * handleViewException handles a view exception\n     */\n    protected function handleViewException(Throwable $e, int $obLevel): void\n    {\n        while (ob_get_level() > $obLevel) {\n            ob_end_clean();\n        }\n\n        throw $e;\n    }\n\n    /**\n     * guessViewPath guesses the package path for the called class\n     * @param string $suffix An extra path to attach to the end\n     * @param bool $isPublic Returns public path instead of an absolute one\n     * @return string\n     */\n    public function guessViewPath($suffix = '', $isPublic = false)\n    {\n        $class = get_called_class();\n\n        return $this->guessViewPathFrom($class, $suffix, $isPublic);\n    }\n\n    /**\n     * guessViewPathFrom guesses the package path from a specified class, including\n     * an optional suffix to attach at the end, and the option to return a public\n     * path instead of a local one.\n     * @param string $class\n     * @param string $suffix\n     * @param bool $isPublic\n     * @return string\n     */\n    public function guessViewPathFrom($class, $suffix = '', $isPublic = false)\n    {\n        // Pass to the controller to share the cache\n        if (isset($this->controller)) {\n            return $this->controller->guessViewPathFrom($class, $suffix, $isPublic);\n        }\n\n        if (is_object($class)) {\n            $class = get_class($class);\n        }\n\n        if (!array_key_exists($class, $this->viewPathGuessCache)) {\n            $classFolder = strtolower(class_basename($class));\n            $classFile = realpath(dirname(File::fromClass($class)));\n            $this->viewPathGuessCache[$class] = $classFile ? $classFile . '/' . $classFolder : null;\n        }\n\n        $guessedPath = $this->viewPathGuessCache[$class];\n        if ($guessedPath !== null) {\n            $guessedPath .= $suffix;\n        }\n\n        return $isPublic ? File::localToPublic($guessedPath) : $guessedPath;\n    }\n}\n"
  },
  {
    "path": "modules/system/twig/Engine.php",
    "content": "<?php namespace System\\Twig;\n\nuse Twig\\Environment as TwigEnvironment;\nuse Illuminate\\Contracts\\View\\Engine as EngineInterface;\n\n/**\n * View engine used by the system, used for converting .htm files to twig.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Engine implements EngineInterface\n{\n    /**\n     * @var TwigEnvironment\n     */\n    protected $environment;\n\n    /**\n     * @var System\\Twig\\Loader\n     */\n    protected $loader;\n\n    /**\n     * Constructor\n     */\n    public function __construct(TwigEnvironment $environment)\n    {\n        $this->environment = $environment;\n\n        $this->loader = $this->environment->getLoader();\n    }\n\n    public function get($path, array $vars = [])\n    {\n        $this->loader->addCacheItem($path);\n\n        $template = $this->environment->load($path);\n\n        return $template->render($vars);\n    }\n}\n"
  },
  {
    "path": "modules/system/twig/Extension.php",
    "content": "<?php namespace System\\Twig;\n\nuse App;\nuse Url;\nuse Event;\nuse System;\nuse Twig\\Extension\\AbstractExtension as TwigExtension;\nuse Twig\\Environment as TwigEnvironment;\nuse Twig\\Runtime\\EscaperRuntime;\nuse Twig\\TwigFilter as TwigSimpleFilter;\nuse Twig\\TwigFunction as TwigSimpleFunction;\nuse October\\Rain\\Support\\Collection;\nuse System\\Classes\\MarkupManager;\nuse System\\Classes\\PagerElement;\nuse System\\Classes\\ResizeImages;\n\n/**\n * Extension implements common Twig functions and filters for the system twig environment.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Extension extends TwigExtension\n{\n    /**\n     * @var \\System\\Classes\\MarkupManager markupManager reference.\n     */\n    protected $markupManager;\n\n    /**\n     * __construct the extension instance.\n     */\n    public function __construct()\n    {\n        $this->markupManager = MarkupManager::instance();\n    }\n\n    /**\n     * addExtensionToTwig adds this extension to the Twig environment and also\n     * creates a hook for others.\n     */\n    public static function addExtensionToTwig(TwigEnvironment $twig)\n    {\n        $twig->addExtension(new static);\n\n        $twig->getRuntime(EscaperRuntime::class)->addSafeClass(\n            \\Illuminate\\View\\ComponentAttributeBag::class,\n            ['html']\n        );\n\n        /**\n         * @event system.extendTwig\n         * Provides an opportunity to extend the Twig environment used by the system\n         *\n         * Example usage:\n         *\n         *     Event::listen('system.extendTwig', function ((Twig\\Environment) $twig) {\n         *         $twig->addExtension(new \\Twig\\Extension\\StringLoaderExtension);\n         *     });\n         *\n         */\n        Event::fire('system.extendTwig', [$twig]);\n    }\n\n    /**\n     * getFunctions returns a list of functions to add to the existing list.\n     * @return array\n     */\n    public function getFunctions()\n    {\n        $functions = [\n            new TwigSimpleFunction('carbon', [$this, 'carbonFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('pager', [$this, 'pagerFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('ajaxPager', [$this, 'ajaxPagerFunction'], ['is_safe' => ['html']]),\n            new TwigSimpleFunction('collect', [$this, 'collectFunction'], []),\n        ];\n\n        // Disabled by safe mode\n        if (!System::checkSafeMode()) {\n            $functions[] = new TwigSimpleFunction('env', 'env');\n            $functions[] = new TwigSimpleFunction('config', [\\Config::class, 'get']);\n        }\n\n        // Include extensions provided by plugins\n        $functions = $this->markupManager->makeTwigFunctions($functions);\n\n        return $functions;\n    }\n\n    /**\n     * getFilters returns a list of filters this extensions provides.\n     * @return array\n     */\n    public function getFilters()\n    {\n        $filters = [\n            new TwigSimpleFilter('app', [$this, 'appFilter'], ['is_safe' => ['html']]),\n            new TwigSimpleFilter('resize', [$this, 'resizeFilter'], ['is_safe' => ['html']]),\n            new TwigSimpleFilter('trans', '__'),\n            new TwigSimpleFilter('trans_choice', 'trans_choice'),\n            new TwigSimpleFilter('_', '__'),\n            new TwigSimpleFilter('__', 'trans_choice'),\n\n            // @deprecated\n            new TwigSimpleFilter('transchoice', 'trans_choice'),\n        ];\n\n        // Include extensions provided by plugins\n        $filters = $this->markupManager->makeTwigFilters($filters);\n\n        return $filters;\n    }\n\n    /**\n     * getNodeVisitors returns a list of node visitors this extension provides.\n     * @return array\n     */\n    public function getNodeVisitors()\n    {\n        return [\n            new GetAttrAdjuster\n        ];\n    }\n\n    /**\n     * getTokenParsers returns a list of token parsers this extensions provides.\n     * @return array\n     */\n    public function getTokenParsers()\n    {\n        $parsers = [];\n\n        // Include extensions provided by plugins\n        $parsers = $this->markupManager->makeTwigTokenParsers($parsers);\n\n        return $parsers;\n    }\n\n    /**\n     * appFilter converts supplied URL to one relative to the website root.\n     * @param mixed $url Specifies the application-relative URL\n     * @return string\n     */\n    public function appFilter($url)\n    {\n        return Url::to($url);\n    }\n\n    /**\n     * resizeFilter converts supplied input into a URL that will return the desired resized image.\n     * The image can be either a file model, absolute path, or URL.\n     */\n    public function resizeFilter($image, $width = null, $height = null, $options = [])\n    {\n        return ResizeImages::resize($image, $width, $height, $options);\n    }\n\n    /**\n     * carbonFunction returns a Carbon function with timezone preference applied.\n     */\n    public function carbonFunction($value)\n    {\n        if (App::runningInFrontend() && System::hasModule('Cms')) {\n            return \\Cms::makeCarbon($value);\n        }\n\n        return \\System\\Helpers\\DateTime::makeCarbon($value);\n    }\n\n    /**\n     * pagerFunction converts a pagination instance to usable attributes\n     * @param mixed $paginator\n     */\n    public function pagerFunction($paginator, $options = [])\n    {\n        return $paginator ? new PagerElement($paginator, $options) : null;\n    }\n\n    /**\n     * ajaxPagerFunction\n     */\n    public function ajaxPagerFunction($paginator, $options = [])\n    {\n        return $paginator ? new PagerElement($paginator, ['template' => 'ajax'] + $options) : null;\n    }\n\n    /**\n     * collectFunction spawns a new collection\n     * @param mixed $value\n     */\n    public function collectFunction($value = null)\n    {\n        return new Collection($value);\n    }\n}\n"
  },
  {
    "path": "modules/system/twig/GetAttrAdjuster.php",
    "content": "<?php namespace System\\Twig;\n\nuse Twig\\Node\\Node;\nuse Twig\\Environment;\nuse Twig\\Node\\Expression\\GetAttrExpression;\nuse Twig\\NodeVisitor\\NodeVisitorInterface;\nuse Twig\\Node\\Expression\\SupportDefinedTestInterface;\nuse System\\Twig\\Node\\GetAttrNode;\n\n/**\n * GetAttrAdjuster tweaks the get attribute functionality.\n */\nclass GetAttrAdjuster implements NodeVisitorInterface\n{\n    /**\n     * @inheritdoc\n     */\n    public function enterNode(Node $node, Environment $env): Node\n    {\n        if (get_class($node) !== GetAttrExpression::class) {\n            return $node;\n        }\n\n        $nodes = [\n            'node' => $node->getNode('node'),\n            'attribute' => $node->getNode('attribute')\n        ];\n\n        if ($node->hasNode('arguments')) {\n            $nodes['arguments'] = $node->getNode('arguments');\n        }\n\n        $isDefinedTest = $node->isDefinedTestEnabled();\n\n        $attributes = [\n            'type' => $node->getAttribute('type'),\n            'is_defined_test' => $isDefinedTest,\n            'ignore_strict_check' => $node->getAttribute('ignore_strict_check'),\n            'optimizable' => $node->getAttribute('optimizable'),\n        ];\n\n        $getAttrNode = new GetAttrNode($nodes, $attributes, $node->getTemplateLine(), $node->getNodeTag());\n\n        if ($isDefinedTest) {\n            $getAttrNode->enableDefinedTest();\n        }\n\n        return $getAttrNode;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function leaveNode(Node $node, Environment $env): ?Node\n    {\n        return $node;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getPriority()\n    {\n        return 0;\n    }\n}\n"
  },
  {
    "path": "modules/system/twig/Loader.php",
    "content": "<?php namespace System\\Twig;\n\nuse View;\nuse File;\nuse Twig\\Source as TwigSource;\nuse Twig\\Loader\\LoaderInterface as TwigLoaderInterface;\nuse Exception;\n\n/**\n * This class implements a Twig template loader for the core system and backend.\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Loader implements TwigLoaderInterface\n{\n    /**\n     * @var array Cache\n     */\n    protected $cache = [];\n\n    /**\n     * Gets the path of a view file\n     * @param  string $name\n     * @return string\n     */\n    protected function findTemplate(string $name): string\n    {\n        if (isset($this->cache[$name])) {\n            return $this->cache[$name];\n        }\n\n        return $this->cache[$name] = View::getFinder()->find($name);\n    }\n\n    /**\n     * addCache adds a specific item to cache.\n     */\n    public function addCacheItem(string $name): void\n    {\n        $this->cache[$name] = $name;\n    }\n\n    /**\n     * Returns the Twig content string.\n     * This step is cached internally by Twig.\n     */\n    public function getSourceContext(string $name): TwigSource\n    {\n        return new TwigSource(File::get($this->findTemplate($name)), $name);\n    }\n\n    /**\n     * Returns the Twig cache key.\n     */\n    public function getCacheKey(string $name): string\n    {\n        return $this->findTemplate($name);\n    }\n\n    /**\n     * Determines if the content is fresh.\n     */\n    public function isFresh(string $name, int $time): bool\n    {\n        return File::lastModified($this->findTemplate($name)) <= $time;\n    }\n\n    /**\n     * Returns the file name of the loaded template.\n     */\n    public function getFilename($name)\n    {\n        return $this->findTemplate($name);\n    }\n\n    /**\n     * Checks that the template exists.\n     */\n    public function exists(string $name)\n    {\n        try {\n            $this->findTemplate($name);\n            return true;\n        }\n        catch (Exception $exception) {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/twig/SecurityPolicy.php",
    "content": "<?php namespace System\\Twig;\n\nuse Config;\nuse System;\nuse Twig\\Markup;\nuse Twig\\Template;\nuse Twig\\Environment as TwigEnvironment;\nuse Twig\\Sandbox\\SecurityPolicyInterface;\nuse Twig\\Sandbox\\SecurityNotAllowedMethodError;\nuse Twig\\Sandbox\\SecurityNotAllowedPropertyError;\nuse Twig\\Extension\\SandboxExtension;\n\n/**\n * SecurityPolicy is a security policy using an allow-list\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nfinal class SecurityPolicy implements SecurityPolicyInterface\n{\n    /**\n     * @var array blockedClassMethods override list of known forbidden methods on class types\n     * that are included in the allow-list.\n     */\n    protected $blockedClassMethods = [\n        // Block write operations on database query builders\n        \\October\\Rain\\Database\\Attach\\File::class => [\n            'fromPost', 'fromData', 'fromUrl', 'getDisk'\n        ],\n        \\Illuminate\\Database\\Query\\Builder::class => [\n            'insert', 'insertOrIgnore', 'insertGetId', 'insertUsing', 'insertOrIgnoreUsing',\n            'update', 'updateFrom', 'updateOrInsert', 'upsert',\n            'delete', 'truncate',\n            'increment', 'incrementEach', 'decrement', 'decrementEach',\n            'from', 'fromRaw', 'fromSub',\n            'getConnection', 'toRawSql',\n        ],\n        \\Illuminate\\Database\\Eloquent\\Builder::class => [\n            'insert', 'insertOrIgnore', 'insertGetId', 'insertUsing', 'insertOrIgnoreUsing',\n            'update', 'updateOrInsert', 'upsert',\n            'delete', 'truncate', 'forceDelete',\n            'increment', 'incrementEach', 'decrement', 'decrementEach',\n            'create', 'createQuietly', 'forceCreate', 'forceCreateQuietly',\n            'firstOrCreate', 'createOrFirst', 'updateOrCreate', 'incrementOrCreate',\n            'fillAndInsert', 'fillAndInsertOrIgnore', 'fillAndInsertGetId',\n            'touch',\n            'toRawSql',\n        ],\n        \\Illuminate\\Database\\Eloquent\\Model::class => [\n            'insert', 'insertOrIgnore', 'insertGetId', 'insertUsing', 'insertOrIgnoreUsing',\n            'update', 'updateOrFail', 'updateQuietly', 'updateOrInsert', 'upsert',\n            'delete', 'deleteQuietly', 'deleteOrFail', 'forceDelete', 'destroy', 'forceDestroy',\n            'truncate',\n            'increment', 'incrementEach', 'decrement', 'decrementEach',\n            'create', 'createQuietly', 'forceCreate', 'forceCreateQuietly',\n            'firstOrCreate', 'createOrFirst', 'updateOrCreate', 'incrementOrCreate',\n            'save', 'saveQuietly', 'saveOrFail',\n            'push', 'pushQuietly',\n            'fill', 'forceFill',\n            'touch',\n            'getConnection', 'toRawSql',\n        ],\n    ];\n\n    /**\n     * @var array blockMethods is a list of forbidden methods\n     */\n    protected $blockMethods = [\n        // Block PHP\n        '__call',\n        '__callStatic',\n\n        // Block October\\Rain\\Extension\\ExtensionTrait\n        'extend',\n        'extensionExtendCallback',\n\n        // Block October\\Rain\\Extension\\ExtendableTrait\n        'extendableCall',\n        'extendableCallStatic',\n        'extendClassWith',\n        'implementClassWith',\n        'addDynamicMethod',\n        'addDynamicProperty',\n\n        // Block October\\Rain\\Support\\Traits\\Emitter\n        'bindEvent',\n        'bindEventOnce',\n\n        // Block Illuminate\\Support\\Traits\\Macroable\n        'macro',\n        'mixin',\n    ];\n\n    /**\n     * @var array allowMethods is a list of allowed methods\n     */\n    protected $allowMethods = [\n        '__toString',\n        'toArray'\n    ];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        // Convert all methods to lower case\n        foreach ($this->allowMethods as $i => $m) {\n            $this->allowMethods[$i] = strtr($m, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n        }\n\n        foreach ($this->blockMethods as $i => $m) {\n            $this->blockMethods[$i] = strtr($m, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n        }\n\n        foreach ($this->blockedClassMethods as $i => $methods) {\n            foreach ($methods as $ii => $m) {\n                $this->blockedClassMethods[$i][$ii] = strtr($m, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n            }\n        }\n    }\n\n    /**\n     * addExtensionToTwig will add the appropriate policy based on configuration. The policy\n     * only used in safe mode.\n     */\n    public static function addExtensionToTwig(TwigEnvironment $twig)\n    {\n        if (!System::checkSafeMode()) {\n            return;\n        }\n\n        if (Config::get('cms.security_policy_v1', false)) {\n            $twig->addExtension(new SandboxExtension(new SecurityPolicyLegacy, true));\n        }\n        else {\n            $twig->addExtension(new SandboxExtension(new SecurityPolicy, true));\n        }\n    }\n\n    /**\n     * checkSecurity\n     * @throws SecurityError\n     */\n    public function checkSecurity($tags, $filters, $functions): void\n    {\n    }\n\n    /**\n     * checkMethodAllowed\n     * @throws SecurityNotAllowedMethodError\n     */\n    public function checkMethodAllowed($obj, $method): void\n    {\n        if ($obj instanceof Template || $obj instanceof Markup) {\n            return;\n        }\n\n        $this->checkMethodAllowedAllowlist($obj, $method);\n        $this->checkMethodAllowedBlocklist($obj, $method);\n    }\n\n    /**\n     * checkPropertyAllowed\n     * @throws SecurityNotAllowedPropertyError\n     */\n    public function checkPropertyAllowed($obj, $property): void\n    {\n    }\n\n    /**\n     * castMethodObjectToSafeObject casts unsafe objects used by method calls to proxy objects\n     * that protect from arbitrary callable methods, such as using 'passthru' to execute\n     * shell commands.\n     */\n    public function castMethodObjectToSafeObject($object)\n    {\n        if ($object instanceof \\Illuminate\\Support\\Collection) {\n            return new \\October\\Rain\\Support\\SafeCollection($object);\n        }\n\n        return $object;\n    }\n\n    //\n    // Allow-list\n    //\n\n    /**\n     * checkMethodAllowedAllowlist\n     */\n    protected function checkMethodAllowedAllowlist($obj, $method)\n    {\n        // Common internals\n        if (\n            $obj instanceof \\Carbon\\Carbon ||\n            $obj instanceof \\Illuminate\\View\\View ||\n            $obj instanceof \\Illuminate\\Http\\Request ||\n            $obj instanceof \\Illuminate\\Session\\Store ||\n            $obj instanceof \\Illuminate\\Support\\HtmlString ||\n            $obj instanceof \\Illuminate\\Support\\Collection ||\n            $obj instanceof \\Illuminate\\Database\\Query\\Builder ||\n            $obj instanceof \\Illuminate\\Database\\Eloquent\\Model ||\n            $obj instanceof \\Illuminate\\Database\\Eloquent\\Builder ||\n            $obj instanceof \\Illuminate\\Pagination\\AbstractPaginator ||\n            $obj instanceof \\Illuminate\\View\\ComponentAttributeBag ||\n            $obj instanceof \\SimpleXMLElement\n        ) {\n            return;\n        }\n\n        // Contractual allow-list\n        if ($obj instanceof \\October\\Contracts\\Twig\\CallsMethods) {\n            $methodNames = $obj->getTwigMethodNames();\n            if (in_array($method, $methodNames)) {\n                return;\n            }\n        }\n\n        // Contractual wildcard\n        if ($obj instanceof \\October\\Contracts\\Twig\\CallsAnyMethod) {\n            return;\n        }\n\n        // Check general methods\n        $allowMethod = strtr($method, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n        if (in_array($allowMethod, $this->allowMethods)) {\n            return;\n        }\n\n        $className = get_class($obj);\n        throw new SecurityNotAllowedMethodError(sprintf('Calling any method on a \"%s\" object is blocked.', $className), $className, $method);\n    }\n\n    //\n    // Block-list\n    //\n\n    /**\n     * checkMethodAllowedBlocklist\n     */\n    protected function checkMethodAllowedBlocklist($obj, $method)\n    {\n        $blockedMethod = strtr($method, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n\n        // Check objects\n        foreach ($this->blockedClassMethods as $blockedClass => $blockedMethods) {\n            if (is_a($obj, $blockedClass) && in_array($blockedMethod, $blockedMethods)) {\n                throw new SecurityNotAllowedMethodError(sprintf('Calling \"%s\" method on a \"%s\" object is blocked.', $method, $blockedClass), $blockedClass, $method);\n            }\n        }\n\n        // Check general methods\n        if (!in_array($blockedMethod, $this->blockMethods)) {\n            return;\n        }\n\n        $className = get_class($obj);\n        throw new SecurityNotAllowedMethodError(sprintf('Calling \"%s\" method on a \"%s\" object is blocked.', $method, $className), $className, $method);\n    }\n}\n"
  },
  {
    "path": "modules/system/twig/SecurityPolicyLegacy.php",
    "content": "<?php namespace System\\Twig;\n\nuse Twig\\Markup;\nuse Twig\\Template;\nuse Twig\\Sandbox\\SecurityPolicyInterface;\nuse Twig\\Sandbox\\SecurityNotAllowedMethodError;\nuse Twig\\Sandbox\\SecurityNotAllowedPropertyError;\n\n/**\n * SecurityPolicyLegacy is a security policy using a block-list\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nfinal class SecurityPolicyLegacy implements SecurityPolicyInterface\n{\n    /**\n     * @var array blockedClassMethods is a list of forbidden classes and methods\n     */\n    protected $blockedClassMethods = [\n        \\October\\Rain\\Database\\Attach\\File::class => ['fromPost', 'fromData', 'fromUrl', 'getDisk'],\n    ];\n\n    /**\n     * @var array blockedClasses is a list of forbidden classes\n     */\n    protected $blockedClasses = [\n        \\Twig\\Environment::class,\n        \\Illuminate\\Filesystem\\Filesystem::class,\n        \\Illuminate\\Session\\FileSessionHandler::class,\n        \\Illuminate\\Contracts\\Filesystem\\Filesystem::class\n    ];\n\n    /**\n     * @var array blockedProperties is a list of forbidden properties\n     */\n    protected $blockedProperties = [];\n\n    /**\n     * @var array blockedMethods is a list of forbidden methods\n     */\n    protected $blockedMethods = [\n        // Block PHP\n        '__call',\n        '__callStatic',\n\n        // Block October\\Rain\\Extension\\ExtensionTrait\n        'extend',\n        'extensionExtendCallback',\n\n        // Block October\\Rain\\Extension\\ExtendableTrait\n        'extendableCall',\n        'extendableCallStatic',\n        'extendClassWith',\n        'implementClassWith',\n        'addDynamicMethod',\n        'addDynamicProperty',\n\n        // Block October\\Rain\\Support\\Traits\\Emitter\n        'bindEvent',\n        'bindEventOnce',\n\n        // Block Illuminate\\Support\\Traits\\Macroable\n        'macro',\n        'mixin',\n\n        // General write bans\n        'create',\n        'insert',\n        'update',\n        'delete',\n        'write',\n    ];\n\n    /**\n     * __construct\n     */\n    public function __construct()\n    {\n        foreach ($this->blockedMethods as $i => $m) {\n            $this->blockedMethods[$i] = strtr($m, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n        }\n\n        foreach ($this->blockedClassMethods as $i => $methods) {\n            foreach ($methods as $ii => $m) {\n                $this->blockedClassMethods[$i][$ii] = strtr($m, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n            }\n        }\n    }\n\n    /**\n     * checkSecurity\n     * @throws SecurityError\n     */\n    public function checkSecurity($tags, $filters, $functions): void\n    {\n    }\n\n    /**\n     * checkMethodAllowed\n     * @throws SecurityNotAllowedMethodError\n     */\n    public function checkMethodAllowed($obj, $method): void\n    {\n        if ($obj instanceof Template || $obj instanceof Markup) {\n            return;\n        }\n\n        $blockedMethod = strtr($method, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n\n        // Check objects\n        foreach ($this->blockedClassMethods as $blockedClass => $blockedMethods) {\n            if (is_a($obj, $blockedClass) && in_array($blockedMethod, $blockedMethods)) {\n                throw new SecurityNotAllowedMethodError(sprintf('Calling \"%s\" method on a \"%s\" object is blocked.', $method, $blockedClass), $blockedClass, $method);\n            }\n        }\n\n        // Check general classes\n        foreach ($this->blockedClasses as $blockedClass) {\n            if (is_a($obj, $blockedClass)) {\n                throw new SecurityNotAllowedMethodError(sprintf('Calling any method on a \"%s\" object is blocked.', $blockedClass), $blockedClass, $method);\n            }\n        }\n\n        // Check general methods\n        if (in_array($blockedMethod, $this->blockedMethods)) {\n            $class = get_class($obj);\n            throw new SecurityNotAllowedMethodError(sprintf('Calling \"%s\" method on a \"%s\" object is blocked.', $method, $class), $class, $method);\n        }\n    }\n\n    /**\n     * checkPropertyAllowed\n     * @throws SecurityNotAllowedPropertyError\n     */\n    public function checkPropertyAllowed($obj, $property): void\n    {\n        if (in_array($property, $this->blockedProperties)) {\n            $class = get_class($obj);\n            throw new SecurityNotAllowedPropertyError(sprintf('Calling \"%s\" property on a \"%s\" object is blocked.', $property, $class), $class, $property);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/twig/node/GetAttrNode.php",
    "content": "<?php namespace System\\Twig\\Node;\n\nuse Twig\\Source;\nuse Twig\\Template;\nuse Twig\\Node\\Node;\nuse Twig\\Compiler;\nuse Twig\\Environment;\nuse Twig\\Extension\\SandboxExtension;\nuse Twig\\Node\\Expression\\GetAttrExpression;\nuse Twig\\Extension\\CoreExtension;\nuse Twig\\Node\\Expression\\SupportDefinedTestInterface;\nuse Twig\\Node\\Expression\\SupportDefinedTestTrait;\n\n/**\n * GetAttrNode compiles a custom get attribute node.\n * Carbon copy of the parent class with custom get attribute logic.\n */\nclass GetAttrNode extends GetAttrExpression implements SupportDefinedTestInterface\n{\n    use SupportDefinedTestTrait;\n\n    /**\n     * @inheritdoc\n     */\n    public function __construct(array $nodes = [], array $attributes = [], int $lineno = 0)\n    {\n        // Skips parent::__construct()\n        Node::__construct($nodes, $attributes, $lineno);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function compile(Compiler $compiler): void\n    {\n        $env = $compiler->getEnvironment();\n\n        // optimize array calls\n        if (\n            $this->getAttribute('optimizable')\n            && (!$env->isStrictVariables() || $this->getAttribute('ignore_strict_check'))\n            && !$this->isDefinedTestEnabled()\n            && Template::ARRAY_CALL === $this->getAttribute('type')\n        ) {\n            $var = '$'.$compiler->getVarName();\n            $compiler\n                ->raw('(('.$var.' = ')\n                ->subcompile($this->getNode('node'))\n                ->raw(') && is_array(')\n                ->raw($var)\n                ->raw(') || ')\n                ->raw($var)\n                ->raw(' instanceof ArrayAccess ? (')\n                ->raw($var)\n                ->raw('[')\n                ->subcompile($this->getNode('attribute'))\n                ->raw('] ?? null) : null)')\n            ;\n\n            return;\n        }\n\n        // Different from parent logic, call our custom customGetAttribute method\n        $compiler->raw(static::class . '::customGetAttribute($this->env, $this->source, ');\n\n        if ($this->getAttribute('ignore_strict_check')) {\n            $this->getNode('node')->setAttribute('ignore_strict_check', true);\n        }\n\n        $compiler\n            ->subcompile($this->getNode('node'))\n            ->raw(', ')\n            ->subcompile($this->getNode('attribute'))\n        ;\n\n        if ($this->hasNode('arguments')) {\n            $compiler->raw(', ')->subcompile($this->getNode('arguments'));\n        }\n        else {\n            $compiler->raw(', []');\n        }\n\n        $compiler->raw(', ')\n            ->repr($this->getAttribute('type'))\n            ->raw(', ')->repr($this->isDefinedTestEnabled())\n            ->raw(', ')->repr($this->getAttribute('ignore_strict_check'))\n            ->raw(', ')->repr($env->hasExtension(SandboxExtension::class))\n            ->raw(', ')->repr($this->getNode('node')->getTemplateLine())\n            ->raw(')')\n        ;\n    }\n\n    /**\n     * customGetAttribute inherits the logic of CoreExtension::getAttribute\n     */\n    public static function customGetAttribute(Environment $env, Source $source, $object, $item, array $arguments = [], $type = /* Template::ANY_CALL */ 'any', $isDefinedTest = false, $ignoreStrictCheck = false, $sandboxed = false, int $lineno = -1)\n    {\n        // This will basically disable strict attribute checking for models since they contain\n        // dynamic attributes stored in the database or from accessors and should return null\n        if ($type !== Template::METHOD_CALL) {\n            // Model specific\n            if (\n                $object instanceof \\October\\Rain\\Halcyon\\Model ||\n                $object instanceof \\October\\Rain\\Database\\Model\n            ) {\n                if ($isDefinedTest) {\n                    return true;\n                }\n\n                $ignoreStrictCheck = true;\n            }\n\n            // Halcyon relies on fillable to know what is a certain attribute\n            if ($object instanceof \\October\\Rain\\Halcyon\\Model) {\n                if ($object->isFillable($item)) {\n                    return $object->$item;\n                }\n            }\n\n            // Checks if the item is an attribute or a relation, related attributes\n            // are lazy loaded and are therefore always defined\n            if ($object instanceof \\October\\Rain\\Database\\Model) {\n                if (\n                    array_key_exists($item, $object->attributes) ||\n                    $object->hasGetMutator($item) ||\n                    $object->hasRelation($item)\n                ) {\n                    return $object->$item;\n                }\n            }\n        }\n\n        // In sandbox mode, cast objects to safer versions when calling methods\n        if ($sandboxed && $type === Template::METHOD_CALL && $env->hasExtension(SandboxExtension::class)) {\n            $policy = $env->getExtension(SandboxExtension::class)->getSecurityPolicy();\n            if ($policy instanceof \\System\\Twig\\SecurityPolicy) {\n                $object = $policy->castMethodObjectToSafeObject($object);\n            }\n        }\n\n        return CoreExtension::getAttribute(\n            $env,\n            $source,\n            $object,\n            $item,\n            $arguments,\n            $type,\n            $isDefinedTest,\n            $ignoreStrictCheck,\n            $sandboxed,\n            $lineno\n        );\n    }\n}\n"
  },
  {
    "path": "modules/system/twig/node/MailPartialNode.php",
    "content": "<?php namespace System\\Twig\\Node;\n\nuse Twig\\Node\\Node as TwigNode;\nuse Twig\\Compiler as TwigCompiler;\n\n/**\n * MailPartialNode represents a \"partial\" node for email rendering.\n *\n * @package october\\system\n */\n#[\\Twig\\Attribute\\YieldReady]\nclass MailPartialNode extends TwigNode\n{\n    /**\n     * __construct\n     */\n    public function __construct(array $nodes, array $paramNames, ?TwigNode $body, int $lineno)\n    {\n        if ($body) {\n            $nodes['__body'] = $body;\n        }\n\n        parent::__construct($nodes, ['names' => $paramNames], $lineno);\n    }\n\n    /**\n     * Compiles the node to PHP.\n     */\n    public function compile(TwigCompiler $compiler)\n    {\n        $compiler->addDebugInfo($this);\n        $compiler->write(\"\\$systemPartialParams = [];\\n\");\n\n        // Handle body block\n        if ($this->hasNode('__body')) {\n            $compiler\n                ->write(\"\\$systemPartialParams['body'] = implode('', iterator_to_array((function() use (\\$context, \\$blocks, \\$macros) {\\n\")\n                ->subcompile($this->getNode('__body'))\n                ->write(\" return; yield ''; })()));\\n\");\n        }\n\n        // Compile parameters\n        foreach ($this->getAttribute('names') as $paramName) {\n            if ($this->hasNode($paramName)) {\n                $compiler\n                    ->write(\"\\$systemPartialParams['\" . $paramName . \"'] = \")\n                    ->subcompile($this->getNode($paramName))\n                    ->write(\";\\n\");\n            }\n        }\n\n        // Render the mail partial\n        $compiler\n            ->write(\"yield \\System\\Classes\\MailManager::instance()->renderPartial(\")\n            ->subcompile($this->getNode('__partial_name'))\n            ->write(\", array_merge(\\$context, ['__system_partial_params' => \\$systemPartialParams], \\$systemPartialParams));\\n\");\n    }\n}\n"
  },
  {
    "path": "modules/system/twig/tokenparser/MailPartialTokenParser.php",
    "content": "<?php namespace System\\Twig\\TokenParser;\n\nuse Twig\\Token as TwigToken;\nuse Twig\\TokenParser\\AbstractTokenParser as TwigTokenParser;\nuse Twig\\Error\\SyntaxError as TwigErrorSyntax;\nuse System\\Twig\\Node\\MailPartialNode;\n\n/**\n * MailPartialTokenParser for the `{% partial %}` Twig tag.\n *\n * Example usage:\n *\n *     {% partial \"sidebar\" %}\n *     {% partial \"sidebar\" name='John' %}\n *     {% partial \"sidebar\" name='John' year=2013 %}\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MailPartialTokenParser extends TwigTokenParser\n{\n    /**\n     * Parses a token and returns a node.\n     * @return MailPartialNode\n     */\n    public function parse(TwigToken $token)\n    {\n        $lineno = $token->getLine();\n        $stream = $this->parser->getStream();\n\n        $nodes = [];\n        $paramNames = [];\n        $hasBody = false;\n        $body = null;\n\n        // Parse partial name (first argument)\n        $nodes['__partial_name'] = $this->parser->parseExpression();\n\n        // Parse optional parameters\n        while (!$stream->test(TwigToken::BLOCK_END_TYPE)) {\n            $current = $stream->next();\n\n            if ($current->test(TwigToken::NAME_TYPE, 'body') && !$stream->test(TwigToken::OPERATOR_TYPE, '=')) {\n                $hasBody = true;\n                continue;\n            }\n\n            if ($current->test(TwigToken::NAME_TYPE)) {\n                $paramName = $current->getValue();\n                $stream->expect(TwigToken::OPERATOR_TYPE, '=');\n                $nodes[$paramName] = $this->parser->parseExpression();\n                $paramNames[] = $paramName;\n            } else {\n                throw new TwigErrorSyntax(\n                    sprintf('Invalid syntax in the partial tag. Line %s', $lineno),\n                    $stream->getCurrent()->getLine(),\n                    $stream->getSourceContext()\n                );\n            }\n        }\n\n        $stream->expect(TwigToken::BLOCK_END_TYPE);\n\n        if ($hasBody) {\n            $body = $this->parser->subparse([$this, 'decidePartialEnd'], true);\n            $stream->expect(TwigToken::BLOCK_END_TYPE);\n        }\n\n        return new MailPartialNode($nodes, $paramNames, $body, $lineno);\n    }\n\n    /**\n     * Determines if the token marks the end of the partial block.\n     */\n    public function decidePartialEnd(TwigToken $token)\n    {\n        return $token->test('endpartial');\n    }\n\n    /**\n     * Returns the tag name associated with this token parser.\n     * @return string\n     */\n    public function getTag()\n    {\n        return 'partial';\n    }\n}\n"
  },
  {
    "path": "modules/system/views/404.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\">\n    <head>\n        <title><?= Lang::get('system::lang.page.not_found.label') ?></title>\n        <link href=\"<?= Url::asset('/modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <h1><i class=\"icon-chain-broken warning\"></i> <?= Lang::get('system::lang.page.not_found.label') ?></h1>\n            <p class=\"lead\"><?= Lang::get('system::lang.page.not_found.help') ?></p>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/system/views/error.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\">\n    <head>\n        <title><?= Lang::get('system::lang.page.custom_error.label') ?></title>\n        <link href=\"<?= Url::asset('/modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <h1><i class=\"icon-power-off warning\"></i> <?= Lang::get('system::lang.page.custom_error.label') ?></h1>\n            <p class=\"lead\"><?= Lang::get('system::lang.page.custom_error.help') ?></p>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/system/views/exception.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <title>Exception</title>\n        <script src=\"<?= Url::asset('modules/system/assets/vendor/syntaxhighlighter/scripts/shCore.js') ?>\"></script>\n        <script src=\"<?= Url::asset('modules/system/assets/vendor/syntaxhighlighter/scripts/shBrushPhp.js') ?>\"></script>\n        <script src=\"<?= Url::asset('modules/system/assets/vendor/syntaxhighlighter/scripts/shBrushXml.js') ?>\"></script>\n        <link href=\"<?= Url::asset('modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <link href=\"<?= Url::asset('modules/system/assets/vendor/syntaxhighlighter/styles/shCore.css') ?>\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n\n            <h1><i class=\"icon-power-off warning\"></i> Error</h1>\n\n            <p class=\"lead\">We're sorry, but an unhandled error occurred. Please see the details below.</p>\n\n            <div class=\"exception-name-block\">\n                <div><?= e($exception->getMessage()) ?></div>\n                <p><?= $exception->getNiceFile() ?> <span>line</span> <?= $exception->getLine() ?></p>\n            </div>\n\n            <ul class=\"indicators\">\n                <li>\n                    <h3>Type</h3>\n                    <p><?= e($exception->getErrorType()) ?></p>\n                </li>\n                <li>\n                    <h3>Exception</h3>\n                    <p><?= e($exception->getClassName()) ?></p>\n                </li>\n            </ul>\n\n            <pre class=\"brush: php\"><?php foreach ($exception->getHighlightLines() as $line): ?><?= $line ?><?php endforeach ?></pre>\n\n            <h3><i class=\"icon-code-fork warning\"></i> Stack Trace</h3>\n\n            <table class=\"data-table\">\n                <thead>\n                    <tr>\n                        <th class=\"right\">#</th>\n                        <th>Called Code</th>\n                        <th>Document</th>\n                        <th class=\"right\">Line</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <?php foreach ($exception->getCallStack() as $stackItem): ?>\n                        <tr>\n                            <td class=\"right\"><?= $stackItem->id ?></td>\n                            <td>\n                                <?= $stackItem->code ?>(<?php if ($stackItem->args): ?><abbr title=\"<?= $stackItem->args ?>\">&hellip;</abbr><?php endif ?>)\n                            </td>\n                            <td class=\"file-column\"><?= $stackItem->file ?></td>\n                            <td class=\"right\"><?= $stackItem->line ?></td>\n                        </tr>\n                    <?php endforeach ?>\n                </tbody>\n            </table>\n        </div>\n\n        <script>\n            function hotloadHighlightSnippet() {\n                var allScripts = document.querySelectorAll('script[src]')\n                    currentCount = allScripts.length;\n\n                allScripts.forEach(function(script) {\n                    script.addEventListener('load', function() {\n                        if (--currentCount === 0) {\n                            highlightSnippet();\n                        }\n                    });\n                });\n            }\n\n            var highlighted = false;\n            function highlightSnippet() {\n                if (typeof SyntaxHighlighter !== 'undefined' || highlighted) {\n                    SyntaxHighlighter.defaults['toolbar'] = false;\n                    SyntaxHighlighter.defaults['quick-code'] = false;\n                    SyntaxHighlighter.defaults['html-script'] = true;\n                    SyntaxHighlighter.defaults['first-line'] = <?= $exception->getHighlight()->startLine+1 ?>;\n                    SyntaxHighlighter.defaults['highlight'] = <?= $exception->getLine() ?>;\n                    SyntaxHighlighter.highlight();\n                    highlighted = true;\n                }\n            }\n\n            delete require;\n            window.addEventListener('load', highlightSnippet);\n            hotloadHighlightSnippet();\n        </script>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/system/views/mail/layout-default.htm",
    "content": "name = \"Default layout\"\n==\n{{ content|raw }}\n==\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n</head>\n<body>\n    <style type=\"text/css\" media=\"screen\">\n        {{ brandCss|raw }}\n        {{ css|raw }}\n    </style>\n\n    <table class=\"wrapper layout-default\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n\n        <!-- Header -->\n        {% partial 'header' body %}\n            {{ subject|raw }}\n        {% endpartial %}\n\n        <tr>\n            <td align=\"center\">\n                <table class=\"content\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                    <!-- Email Body -->\n                    <tr>\n                        <td class=\"body\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                            <table class=\"inner-body\" align=\"center\" width=\"570\" cellpadding=\"0\" cellspacing=\"0\">\n                                <!-- Body content -->\n                                <tr>\n                                    <td class=\"content-cell\">\n                                        {{ content|raw }}\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n\n        <!-- Footer -->\n        {% partial 'footer' body %}\n            &copy; {{ \"now\"|date(\"Y\") }} {{ appName }}. All rights reserved.\n        {% endpartial %}\n\n    </table>\n\n</body>\n</html>\n"
  },
  {
    "path": "modules/system/views/mail/layout-system.htm",
    "content": "name = \"System layout\"\n==\n{{ content|raw }}\n\n\n---\nThis is an automatic message. Please do not reply to it.\n==\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n</head>\n<body>\n    <style type=\"text/css\" media=\"screen\">\n        {{ brandCss|raw }}\n        {{ css|raw }}\n    </style>\n\n    <table class=\"wrapper layout-system\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n        <tr>\n            <td align=\"center\">\n                <table class=\"content\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                    <!-- Email Body -->\n                    <tr>\n                        <td class=\"body\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                            <table class=\"inner-body\" align=\"center\" width=\"570\" cellpadding=\"0\" cellspacing=\"0\">\n                                <!-- Body content -->\n                                <tr>\n                                    <td class=\"content-cell\">\n                                        {{ content|raw }}\n\n                                        <!-- Subcopy -->\n                                        {% partial 'subcopy' body %}\n                                            **This is an automatic message. Please do not reply to it.**\n                                        {% endpartial %}\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    </table>\n\n</body>\n</html>\n"
  },
  {
    "path": "modules/system/views/mail/partial-button.htm",
    "content": "name = \"Button\"\n==\n{{ body|trim }} <{{ url }}>\n==\n<table class=\"action\" align=\"center\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n    <tr>\n        <td align=\"center\">\n            <table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n                <tr>\n                    <td align=\"center\">\n                        <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n                            <tr>\n                                <td>\n                                    <a href=\"{{ url }}\" class=\"button button-{{ type ?: 'primary' }}\" target=\"_blank\">\n                                        {{ body }}\n                                    </a>\n                                </td>\n                            </tr>\n                        </table>\n                    </td>\n                </tr>\n            </table>\n        </td>\n    </tr>\n</table>\n"
  },
  {
    "path": "modules/system/views/mail/partial-footer.htm",
    "content": "name = \"Footer\"\n==\n-------------------\n{{ body|trim }}\n==\n<tr>\n    <td>\n        <table class=\"footer\" align=\"center\" width=\"570\" cellpadding=\"0\" cellspacing=\"0\">\n            <tr>\n                <td class=\"content-cell\" align=\"center\">\n                    {{ body|md_indent }}\n                </td>\n            </tr>\n        </table>\n    </td>\n</tr>\n"
  },
  {
    "path": "modules/system/views/mail/partial-header.htm",
    "content": "name = \"Header\"\n==\n*** {{ body|trim }} <{{ url }}>\n==\n<tr>\n    <td class=\"header\">\n        {% if url %}\n            <a href=\"{{ url }}\">\n                {{ body }}\n            </a>\n        {% else %}\n            <span>\n                {{ body }}\n            </span>\n        {% endif %}\n    </td>\n</tr>\n"
  },
  {
    "path": "modules/system/views/mail/partial-panel.htm",
    "content": "name = \"Panel\"\n==\n{{ body|trim }}\n==\n<table class=\"panel break-all\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n    <tr>\n        <td class=\"panel-content\">\n            <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                <tr>\n                    <td class=\"panel-item\">\n                        {{ body|md_indent }}\n                    </td>\n                </tr>\n            </table>\n        </td>\n    </tr>\n</table>\n"
  },
  {
    "path": "modules/system/views/mail/partial-promotion.htm",
    "content": "name = \"Promotion\"\n==\n{{ body|trim }}\n==\n<table class=\"promotion break-all\" align=\"center\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n    <tr>\n        <td align=\"center\">\n            {{ body|md_indent }}\n        </td>\n    </tr>\n</table>\n"
  },
  {
    "path": "modules/system/views/mail/partial-subcopy.htm",
    "content": "name = \"Subcopy\"\n==\n-----\n{{ body|trim }}\n==\n<table class=\"subcopy\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n    <tr>\n        <td>\n            {{ body|md_indent }}\n        </td>\n    </tr>\n</table>\n"
  },
  {
    "path": "modules/system/views/mail/partial-table.htm",
    "content": "name = \"Table\"\n==\n{{ body|trim }}\n==\n<div class=\"table\">\n    {{ body|md_indent }}\n</div>\n"
  },
  {
    "path": "modules/system/views/maintenance.php",
    "content": "<!DOCTYPE html>\n<html lang=\"<?= App::getLocale() ?>\">\n    <head>\n        <title><?= Lang::get('system::lang.page.maintenance.label') ?></title>\n        <link href=\"<?= Url::asset('/modules/system/assets/css/styles.css') ?>\" rel=\"stylesheet\" />\n        <script src=\"<?= Url::asset('modules/system/assets/js/framework-bundle.min.js') ?>\"></script>\n        <meta name=\"turbo-visit-control\" content=\"disable\" />\n        <meta charset=\"utf-8\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <h1><i class=\"icon-wrench warning\"></i> <?= Lang::get('system::lang.page.maintenance.label') ?></h1>\n            <p class=\"lead\"><?= Lang::get('system::lang.page.maintenance.help') ?></p>\n            <?php if ($message): ?>\n                <p class=\"lead\">\n                    <strong><?= Lang::get('system::lang.page.maintenance.message') ?></strong>\n                    <?= e($message) ?>\n                </p>\n            <?php endif ?>\n            <?php if ($retryAfter): ?>\n                <p class=\"lead\">\n                    <strong><?= Lang::get('system::lang.page.maintenance.available_at') ?></strong>\n                    <?= now()->addRealSeconds($retryAfter + 1)->diffForHumans() ?>\n                </p>\n            <?php endif ?>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "modules/system/views/pagination/ajax.htm",
    "content": "{% if paginator.hasPages %}\n    {% set handler = handler|default('onAjax') %}\n    <ul class=\"pagination\">\n        {#-- Previous Page Link --#}\n        {% if paginator.onFirstPage %}\n            <li class=\"page-item first disabled\" aria-disabled=\"true\" aria-label=\"{{ 'system::lang.pagination.previous'|trans }}\">\n                <span class=\"page-link\" aria-hidden=\"true\">&larr;</span>\n            </li>\n        {% else %}\n            <li class=\"page-item first\">\n                <a\n                    class=\"page-link\"\n                    href=\"javascript:;\"\n                    data-request=\"{{ handler }}\"\n                    data-request-query=\"{ page: {{ paginator.currentPage - 1 }} }\"\n                    data-request-update=\"{ _self: true }\"\n                    rel=\"prev\"\n                    aria-label=\"{{ 'system::lang.pagination.previous'|trans }}\">&larr;</a>\n            </li>\n        {% endif %}\n\n        {#-- Pagination Elements --#}\n        {% for element in elements %}\n            {% if element is iterable %}\n                {#-- Array Of Links --#}\n                {% for page, url in element %}\n                    {% if page == paginator.currentPage %}\n                        <li class=\"page-item active\" aria-current=\"page\">\n                            <span class=\"page-link\">{{ page }}</span>\n                        </li>\n                    {% else %}\n                        <li class=\"page-item\">\n                            <a\n                                class=\"page-link\"\n                                href=\"javascript:;\"\n                                data-request=\"{{ handler }}\"\n                                data-request-query=\"{ page: {{ page }} }\"\n                                data-request-update=\"{ _self: true }\">{{ page }}</a>\n                        </li>\n                    {% endif %}\n                {% endfor %}\n            {% else %}\n                {#-- \"Three Dots\" Separator --#}\n                <li class=\"page-item middle disabled\" aria-disabled=\"true\"><span class=\"page-link\">{{ element }}</span></li>\n            {% endif %}\n        {% endfor %}\n\n        {#-- Next Page Link --#}\n        {% if paginator.hasMorePages %}\n            <li class=\"page-item last\">\n                <a\n                    class=\"page-link\"\n                    href=\"javascript:;\"\n                    data-request=\"{{ handler }}\"\n                    data-request-query=\"{ page: {{ paginator.currentPage + 1|default(1) }} }\"\n                    data-request-update=\"{ _self: true }\"\n                    rel=\"next\"\n                    aria-label=\"{{ 'system::lang.pagination.next'|trans }}\">&rarr;</a>\n            </li>\n        {% else %}\n            <li class=\"page-item last disabled\" aria-disabled=\"true\" aria-label=\"{{ 'system::lang.pagination.next'|trans }}\">\n                <span class=\"page-link\" aria-hidden=\"true\">&rarr;</span>\n            </li>\n        {% endif %}\n    </ul>\n{% endif %}\n\n"
  },
  {
    "path": "modules/system/views/pagination/default.htm",
    "content": "{% if paginator.hasPages %}\n    <ul class=\"pagination\">\n        {#-- Previous Page Link --#}\n        {% if paginator.onFirstPage %}\n            <li class=\"page-item first disabled\" aria-disabled=\"true\" aria-label=\"{{ 'system::lang.pagination.previous'|trans }}\">\n                <span class=\"page-link\" aria-hidden=\"true\">&larr;</span>\n            </li>\n        {% else %}\n            <li class=\"page-item first\">\n                <a class=\"page-link\" href=\"{{ paginator.previousPageUrl }}\" rel=\"prev\" aria-label=\"{{ 'system::lang.pagination.previous'|trans }}\">&larr;</a>\n            </li>\n        {% endif %}\n\n        {#-- Pagination Elements --#}\n        {% for element in elements %}\n            {% if element is iterable %}\n                {#-- Array Of Links --#}\n                {% for page, url in element %}\n                    {% if page == paginator.currentPage %}\n                        <li class=\"page-item active\" aria-current=\"page\"><span class=\"page-link\">{{ page }}</span></li>\n                    {% else %}\n                        <li class=\"page-item\"><a class=\"page-link\" href=\"{{ url }}\">{{ page }}</a></li>\n                    {% endif %}\n                {% endfor %}\n            {% else %}\n                {#-- \"Three Dots\" Separator --#}\n                <li class=\"page-item middle disabled\" aria-disabled=\"true\"><span class=\"page-link\">{{ element }}</span></li>\n            {% endif %}\n        {% endfor %}\n\n        {#-- Next Page Link --#}\n        {% if paginator.hasMorePages %}\n            <li class=\"page-item last\">\n                <a class=\"page-link\" href=\"{{ paginator.nextPageUrl }}\" rel=\"next\" aria-label=\"{{ 'system::lang.pagination.next'|trans }}\">&rarr;</a>\n            </li>\n        {% else %}\n            <li class=\"page-item last disabled\" aria-disabled=\"true\" aria-label=\"{{ 'system::lang.pagination.next'|trans }}\">\n                <span class=\"page-link\" aria-hidden=\"true\">&rarr;</span>\n            </li>\n        {% endif %}\n    </ul>\n{% endif %}\n"
  },
  {
    "path": "modules/system/views/pagination/simple.htm",
    "content": "{% if paginator.hasPages %}\n    <ul class=\"pagination\">\n        {#-- Previous Page Link --#}\n        {% if paginator.onFirstPage %}\n            <li class=\"page-item disabled\">\n                <span class=\"page-link\">{{ 'system::lang.pagination.previous'|trans }}</span>\n            </li>\n        {% else %}\n            <li class=\"page-item\">\n                <a class=\"page-link\" href=\"{{ paginator.previousPageUrl }}\" rel=\"prev\">{{ 'system::lang.pagination.previous'|trans }}</a>\n            </li>\n        {% endif %}\n\n        {#-- Next Page Link --#}\n        {% if paginator.hasMorePages %}\n            <li class=\"page-item\">\n                <a class=\"page-link\" href=\"{{ paginator.nextPageUrl }}\" rel=\"next\">{{ 'system::lang.pagination.next'|trans }}</a>\n            </li>\n        {% else %}\n            <li class=\"page-item disabled\" aria-disabled=\"true\">\n                <span class=\"page-link\">{{ 'system::lang.pagination.next'|trans }}</span>\n            </li>\n        {% endif %}\n    </ul>\n{% endif %}\n"
  },
  {
    "path": "modules/system/views/ui/button/_hotkey.php",
    "content": "<?php\n/**\n * Shared hotkey processing for button views.\n *\n * Expects $hotkey (string|array) and $label (string) to be set.\n * Produces $hotkeyStr (for data-hotkey) and $tooltipHotkey (for data-tooltip-hotkey).\n */\n$hotkeyStr = '';\n$tooltipHotkey = '';\n\nif ($hotkey) {\n    $hotkeyParts = (array) $hotkey;\n    $hotkeyStr = implode(',', $hotkeyParts);\n\n    $symbolMap = [\n        'ctrl' => \"\\u{2303}\",\n        'cmd' => \"\\u{2318}\",\n        'command' => \"\\u{2318}\",\n        'meta' => \"\\u{2318}\",\n        'shift' => \"\\u{21E7}\",\n        'alt' => \"\\u{2325}\",\n        'option' => \"\\u{2325}\",\n        'enter' => \"\\u{21B5}\",\n        'return' => \"\\u{21B5}\",\n    ];\n\n    $symbols = [];\n    foreach ($hotkeyParts as $part) {\n        $keys = explode('+', trim($part));\n        $sym = '';\n        foreach ($keys as $key) {\n            $key = strtolower(trim($key));\n            if (isset($symbolMap[$key])) {\n                $sym .= $symbolMap[$key];\n            }\n            else {\n                $sym .= strtoupper($key);\n            }\n        }\n        $symbols[] = $sym;\n    }\n\n    $tooltipHotkey = implode(', ', $symbols);\n}\n"
  },
  {
    "path": "modules/system/views/ui/button/ajax-button.php",
    "content": "<?php\n$label ??= '';\n$primary ??= false;\n$secondary ??= false;\n$danger ??= false;\n$icon ??= null;\n$handler ?? null;\n$hotkey ??= '';\n$requestData ??= [];\n\n$classes = ['btn'];\nif ($primary) $classes[] = 'btn-primary';\nelseif ($secondary) $classes[] = 'btn-secondary';\nelseif ($danger) $classes[] = 'btn-danger';\n\n$requestDataStr = $requestData\n    ? json_encode($requestData)\n    : null;\n\ninclude __DIR__.'/_hotkey.php';\n?>\n<button <?= $attributes->merge(array_filter([\n    'class' => implode(' ', $classes),\n    'type' => 'button',\n    'data-request' => $handler,\n    'data-request-data' => $requestDataStr,\n    'data-hotkey' => $hotkeyStr ?: null,\n    'data-tooltip-text' => $hotkeyStr ? $label : null,\n    'data-tooltip-hotkey' => $tooltipHotkey ?: null,\n    'data-tooltip-position' => $hotkeyStr ? 'top' : null,\n])) ?>>\n    <?php if ($icon): ?>\n        <i class=\"<?= e($icon) ?>\"></i>\n    <?php endif ?>\n    <?= e($label) ?>\n</button>\n"
  },
  {
    "path": "modules/system/views/ui/button/dropdown-button.php",
    "content": "<?php\n$label ??= '';\n$primary ??= false;\n$secondary ??= false;\n$caret ??= true;\n$icon ??= null;\n\n$classes = ['btn'];\nif ($caret) $classes[] = 'dropdown-toggle';\nif ($primary) $classes[] = 'btn-primary';\nelseif ($secondary) $classes[] = 'btn-secondary';\n?>\n<div class=\"dropdown dropdown-fixed\">\n    <button <?= $attributes->merge(array_filter([\n        'class' => implode(' ', $classes),\n        'type' => 'button',\n        'data-toggle' => 'dropdown',\n    ])) ?>>\n        <?php if ($icon): ?>\n            <i class=\"<?= e($icon) ?>\"></i>\n        <?php endif ?>\n        <?= e($label) ?>\n    </button>\n    <ul class=\"dropdown-menu\">\n        <?= $slot ?>\n    </ul>\n</div>\n"
  },
  {
    "path": "modules/system/views/ui/button/dropdown-divider.php",
    "content": "<li role=\"separator\" class=\"divider\"></li>\n"
  },
  {
    "path": "modules/system/views/ui/button/dropdown-item.php",
    "content": "<?php\n$label ??= '';\n$handler ??= '';\n$href ??= '';\n$icon ??= null;\n?>\n<li>\n    <a <?= $attributes->merge(array_filter([\n        'href' => $href ?: 'javascript:;',\n        'data-request' => $handler ?: null,\n    ])) ?>>\n        <?php if ($icon): ?>\n            <i class=\"<?= e($icon) ?>\"></i>\n        <?php endif ?>\n        <?= e($label) ?>\n    </a>\n</li>\n"
  },
  {
    "path": "modules/system/views/ui/button/icon-button.php",
    "content": "<?php\n$label ??= '';\n$icon ??= '';\n$primary ??= false;\n$secondary ??= false;\n$hotkey ??= '';\n$handler ??= '';\n$danger ??= false;\n\n$classes = ['btn-icon', $icon];\nif ($danger) $classes[] = 'danger';\n\ninclude __DIR__.'/_hotkey.php';\n?>\n<button <?= $attributes->merge(array_filter([\n    'class' => implode(' ', $classes),\n    'type' => 'button',\n    'title' => $label ?: null,\n    'data-request' => $handler ?: null,\n    'data-hotkey' => $hotkeyStr ?: null,\n    'data-tooltip-text' => $hotkeyStr ? $label : null,\n    'data-tooltip-hotkey' => $tooltipHotkey ?: null,\n    'data-tooltip-position' => $hotkeyStr ? 'top' : null,\n])) ?>></button>\n"
  },
  {
    "path": "modules/system/views/ui/button/popup-button.php",
    "content": "<?php\n$label ??= '';\n$primary ??= false;\n$secondary ??= false;\n$danger ??= false;\n$icon ??= null;\n$handler ?? null;\n$hotkey ??= '';\n$requestData ??= [];\n\n$classes = ['btn'];\nif ($primary) $classes[] = 'btn-primary';\nelseif ($secondary) $classes[] = 'btn-secondary';\nelseif ($danger) $classes[] = 'btn-danger';\n\n$requestDataStr = $requestData\n    ? json_encode($requestData)\n    : null;\n\ninclude __DIR__.'/_hotkey.php';\n?>\n<button <?= $attributes->merge(array_filter([\n    'class' => implode(' ', $classes),\n    'type' => 'button',\n    'data-control' => 'popup',\n    'data-handler' => $handler,\n    'data-request-data' => $requestDataStr,\n    'data-hotkey' => $hotkeyStr ?: null,\n    'data-tooltip-text' => $hotkeyStr ? $label : null,\n    'data-tooltip-hotkey' => $tooltipHotkey ?: null,\n    'data-tooltip-position' => $hotkeyStr ? 'top' : null,\n])) ?>>\n    <?php if ($icon): ?>\n        <i class=\"<?= e($icon) ?>\"></i>\n    <?php endif ?>\n    <?= e($label) ?>\n</button>\n"
  },
  {
    "path": "modules/system/views/ui/button.php",
    "content": "<?php\n$label ??= '';\n$href ??= '';\n$primary ??= false;\n$secondary ??= false;\n$danger ??= false;\n$icon ??= null;\n$hotkey ??= '';\n\n$classes = ['btn'];\nif ($primary) $classes[] = 'btn-primary';\nelseif ($secondary) $classes[] = 'btn-secondary';\nelseif ($danger) $classes[] = 'btn-danger';\n\ninclude __DIR__.'/button/_hotkey.php';\n?>\n<?php if ($href): ?>\n    <a\n        <?= $attributes->merge(array_filter([\n            'href' => $href,\n            'class' => implode(' ', $classes),\n            'type' => 'button',\n            'data-hotkey' => $hotkeyStr ?: null,\n            'data-tooltip-text' => $hotkeyStr ? $label : null,\n            'data-tooltip-hotkey' => $tooltipHotkey ?: null,\n            'data-tooltip-position' => $hotkeyStr ? 'top' : null,\n        ])) ?>>\n        <?php if ($icon): ?>\n            <i class=\"<?= e($icon) ?>\"></i>\n        <?php endif ?>\n        <?= e($label) ?>\n    </a>\n<?php else: ?>\n    <button <?= $attributes->merge(array_filter([\n        'class' => implode(' ', $classes),\n        'type' => 'button',\n        'data-hotkey' => $hotkeyStr ?: null,\n        'data-tooltip-text' => $hotkeyStr ? $label : null,\n        'data-tooltip-hotkey' => $tooltipHotkey ?: null,\n        'data-tooltip-position' => $hotkeyStr ? 'top' : null,\n    ])) ?>>\n        <?php if ($icon): ?>\n            <i class=\"<?= e($icon) ?>\"></i>\n        <?php endif ?>\n        <?= e($label) ?>\n    </button>\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/views/ui/input/search-input.php",
    "content": "<?php\n$name ??= '';\n$placeholder ??= '';\n$value ??= '';\n$handler ??= '';\n\nif ($handler) {\n    $attributes = $attributes->merge([\n        'data-request' => $handler,\n        'data-request-trigger' => 'input changed delay:500',\n        'data-load-indicator' => '',\n        'data-load-indicator-opaque' => true,\n    ]);\n}\n?>\n<div <?= $attributes->only([])->merge([\n    'data-control' => 'search-input',\n    'class' => $attributes->get('outer-class')\n]) ?>>\n    <div class=\"search-input-container storm-icon-pseudo\">\n        <input\n            <?= $attributes->merge([\n                'type' => 'text',\n                'name' => $name,\n                'placeholder' => $placeholder,\n                'value' => $value,\n                'class' => 'form-control',\n                'autocomplete' => 'off',\n                'data-search-input' => true\n            ])->except([\n                'outer-class'\n            ]) ?>\n        />\n        <button\n            class=\"clear-input-text\"\n            type=\"button\"\n            value=\"\"\n            style=\"display:none\"\n            data-search-clear\n        >\n            <i class=\"storm-icon\"></i>\n        </button>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/system/widgets/Changelog.php",
    "content": "<?php namespace System\\Widgets;\n\nuse Yaml;\nuse Lang;\nuse File;\nuse Exception;\nuse SystemException;\nuse ApplicationException;\nuse Backend\\Classes\\WidgetBase;\nuse System\\Classes\\UpdateManager;\nuse System\\Classes\\PluginManager;\n\n/**\n * Changelog widget\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Changelog extends WidgetBase\n{\n    /**\n     * @var string alias used for this widget\n     */\n    public $alias = 'changelog';\n\n    /**\n     * loadAssets adds widget specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/changelog.css');\n        // $this->addJs('js/changelog.js');\n    }\n\n    /**\n     * render renders the widget\n     */\n    public function render(): string\n    {\n        return '';\n    }\n\n    /**\n     * onLoadChangelog displays system changelog information\n     */\n    public function onLoadChangelog()\n    {\n        try {\n            $fetchedContent = UpdateManager::instance()->requestChangelog();\n            $changelog = array_get($fetchedContent, 'history');\n\n            if (!$changelog || !is_array($changelog)) {\n                throw new ApplicationException(\n                    // Empty response from the server.\n                    Lang::get('system::lang.server.response_empty')\n                );\n            }\n\n            $this->vars['changelog'] = $changelog;\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n\n        return $this->makePartial('system_list');\n    }\n\n    /**\n     * onLoadPluginChangelog displays plugin changelog information\n     */\n    public function onLoadPluginChangelog()\n    {\n        try {\n            if (!$code = post('code')) {\n                throw new SystemException('Missing code');\n            }\n\n            $manager = PluginManager::instance();\n            $plugin = $manager->findByIdentifier($code);\n            $path = $manager->getPluginPath($plugin);\n\n            $changelog = null;\n            if ($path) {\n                $changelog = (array) $this->getPluginVersionFile($path, 'updates/version.yaml');\n            }\n\n            $this->vars['changelog'] = $changelog;\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n\n        return $this->makePartial('plugin_list');\n    }\n\n    /**\n     * getPluginVersionFile returns the version file contents for a plugin\n     */\n    protected function getPluginVersionFile(string $path, string $filename): array\n    {\n        $contents = [];\n\n        try {\n            $updates = (array) Yaml::parseFile($path.'/'.$filename);\n\n            foreach ($updates as $version => $details) {\n                if (!is_array($details)) {\n                    $details = (array) $details;\n                }\n\n                // Filter out update scripts\n                $details = array_filter($details, function ($string) use ($path) {\n                    return !preg_match('/^[a-z_\\-0-9]*\\.php$/i', $string) || !File::exists($path . '/updates/' . $string);\n                });\n\n                $contents[$version] = $details;\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        uksort($contents, function ($a, $b) {\n            return version_compare((string) $b, (string) $a);\n        });\n\n        return $contents;\n    }\n}\n"
  },
  {
    "path": "modules/system/widgets/Updater.php",
    "content": "<?php namespace System\\Widgets;\n\nuse Ui;\nuse Log;\nuse Flash;\nuse System;\nuse Backend;\nuse Redirect;\nuse Cms\\Classes\\ThemeManager;\nuse System\\Classes\\UpdateManager;\nuse System\\Models\\PluginVersion;\nuse System\\Classes\\PluginManager;\nuse October\\Rain\\Composer\\ComposerManager;\nuse Backend\\Classes\\WidgetBase;\nuse System\\Helpers\\Cache as CacheHelper;\nuse ApplicationException;\nuse AjaxException;\nuse Exception;\n\n/**\n * Updater widget\n *\n * @package october\\system\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Updater extends WidgetBase\n{\n    /**\n     * @var string Defined alias used for this widget.\n     */\n    public $alias = 'updater';\n\n    /**\n     * loadAssets adds widget specific asset files. Use $this->addJs() and $this->addCss()\n     * to register new assets to include on the page.\n     */\n    protected function loadAssets()\n    {\n        $this->addCss('css/updater.css');\n        $this->addJs('js/updater.js');\n    }\n\n    /**\n     * render renders the widget\n     */\n    public function render(): string\n    {\n        return '';\n    }\n\n    /**\n     * renderWarnings warnings provided by the updater\n     */\n    public function renderWarnings(): string\n    {\n        try {\n            $deps = PluginManager::instance()->findMissingDependencies();\n\n            if (System::hasModule('Cms')) {\n                $themeDeps = ThemeManager::instance()->findMissingDependencies();\n                $deps = array_unique(array_merge($deps, $themeDeps));\n            }\n        }\n        catch (Exception $ex) {\n            return '';\n        }\n\n        if (!$deps) {\n            return '';\n        }\n\n        if (System::checkProjectValid(1|16)) {\n            return (string) Ui::callout()\n                ->info()\n                ->label(__(\"License is unpaid or has expired. Please visit octobercms.com to obtain a license.\"))\n                ->action(\n                    Ui::popupButton(\"Renew License\", 'onRenewOctoberCmsLicense')->success()\n                );\n        }\n\n        return (string) Ui::callout()\n            ->danger()\n            ->label(__('There are missing dependencies needed for the system to run correctly.'))\n            ->action(\n                Ui::popupButton(__('Check Dependencies'), $this->getEventHandler('onCheckDependencies'))\n                    ->attachLoading()\n                    ->danger()\n            );\n    }\n\n    /**\n     * onCheckDependencies for the system\n     */\n    public function onCheckDependencies()\n    {\n        $deps = PluginManager::instance()->findMissingDependencies();\n\n        if (System::hasModule('Cms')) {\n            $themeDeps = ThemeManager::instance()->findMissingDependencies();\n            $deps = array_unique(array_merge($deps, $themeDeps));\n        }\n\n        return $this->makePartial('require_form', ['deps' => $deps]);\n    }\n\n    /**\n     * onInstallDependencies for the system\n     */\n    public function onInstallDependencies()\n    {\n        try {\n            $deps = (array) post('deps', []);\n            $updateSteps = [];\n\n            foreach ($deps as $code) {\n                $updateSteps[] = [\n                    'code' => 'installPlugin',\n                    'label' => __('Installing plugin: :name', ['name' => $code]),\n                    'name' => $code\n                ];\n            }\n\n            $updateSteps[] = [\n                'code' => 'completeUpdate',\n                'label' => __('Finishing update process'),\n                'type' => 'final'\n            ];\n\n            $this->vars['updateSteps'] = $updateSteps;\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n\n        return $this->makePartial('execute');\n    }\n\n    /**\n     * onLoadUpdates spawns the update checker popup\n     */\n    public function onLoadUpdates()\n    {\n        return $this->makePartial('update_form');\n    }\n\n    /**\n     * onCheckForUpdates contacts the update server for a list of necessary updates.\n     */\n    public function onCheckForUpdates()\n    {\n        try {\n            $result = UpdateManager::instance()->requestUpdateList();\n            $result = $this->processUpdateLists($result);\n            $result = $this->processImportantUpdates($result);\n\n            $this->vars['core'] = $result['core'] ?? false;\n            $this->vars['needsLicense'] = $result['canUpdate'] ?? false;\n            $this->vars['hasUpdates'] = $result['hasUpdates'] ?? false;\n            $this->vars['hasImportantUpdates'] = $result['hasImportantUpdates'] ?? false;\n            $this->vars['pluginList'] = $result['plugins'] ?? [];\n            $this->vars['themeList'] = $result['themes'] ?? [];\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n\n        return ['#updateContainer' => $this->makePartial('update_list')];\n    }\n\n    /**\n     * onSyncProject synchronizes plugin packages with local packages\n     */\n    public function onSyncProject()\n    {\n        try {\n            $installPackages = UpdateManager::instance()->syncProjectPackages();\n\n            $updateSteps = [];\n\n            foreach ($installPackages as $code => $installPackage) {\n                $updateSteps[] = [\n                    'code' => 'installPlugin',\n                    'label' => __('Installing plugin: :name', ['name' => $code]),\n                    'name' => $code\n                ];\n            }\n\n            $updateSteps[] = [\n                'code' => 'completeUpdate',\n                'label' => __('Finishing update process'),\n                'type' => 'final'\n            ];\n\n            $this->vars['updateSteps'] = $updateSteps;\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n\n        return $this->makePartial('execute');\n    }\n\n    /**\n     * onApplyUpdates runs the composer update process\n     */\n    public function onApplyUpdates()\n    {\n        try {\n            $updateSteps = [\n                [\n                    'code' => 'updateComposer',\n                    'label' => __('Updating package manager')\n                ],\n                [\n                    'code' => 'updateCore',\n                    'label' => __('Updating application files')\n                ],\n                [\n                    'code' => 'setBuild',\n                    'label' => __('Setting build number')\n                ],\n                [\n                    'code' => 'completeUpdate',\n                    'label' => __('Finishing update process'),\n                    'type' => 'final'\n                ]\n            ];\n\n            $this->vars['updateSteps'] = $updateSteps;\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n        }\n\n        return $this->makePartial('execute');\n    }\n\n    /**\n     * onInstallPlugin validates the plugin code and execute the plugin installation\n     */\n    public function onInstallPlugin()\n    {\n        try {\n            if (!$code = trim(post('code'))) {\n                throw new ApplicationException(__('Please specify a Plugin name to install.'));\n            }\n\n            $updateSteps = [\n                [\n                    'code' => 'installPlugin',\n                    'label' => __('Installing plugin: :name', ['name' => $code]),\n                    'name' => $code\n                ],\n                [\n                    'code' => 'completeInstall',\n                    'label' => __('Finishing installation process'),\n                    'type' => 'final'\n                ]\n            ];\n\n            $this->vars['updateSteps'] = $updateSteps;\n\n            return $this->makePartial('execute');\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n            return $this->makePartial('plugin_form');\n        }\n    }\n\n    /**\n     * onRemovePlugin removes an existing plugin\n     */\n    public function onRemovePlugin()\n    {\n        try {\n            if (!$code = trim(post('code'))) {\n                throw new ApplicationException(__('Please specify a Plugin name to install.'));\n            }\n\n            $updateSteps = [\n                [\n                    'code' => 'removePlugin',\n                    'label' => __('Removing plugin: :name', ['name' => $code]),\n                    'name' => $code\n                ],\n                [\n                    'code' => 'completeUpdate',\n                    'label' => __('Finishing installation process'),\n                    'type' => 'final'\n                ]\n            ];\n\n            $this->vars['updateSteps'] = $updateSteps;\n\n            return $this->makePartial('execute');\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n            return $this->makePartial('plugin_form');\n        }\n    }\n\n    /**\n     * onInstallThemeCheck requests information from the user about how to install the theme\n     */\n    public function onInstallThemeCheck()\n    {\n        try {\n            // Locate theme remotely\n            if (!$code = trim(post('code'))) {\n                throw new ApplicationException(__('Please specify a Theme name to install.'));\n            }\n            $manager = UpdateManager::instance();\n            $details = $manager->requestThemeDetails($code);\n            $deps = $this->findProposedDependencies($details['require'] ?? []);\n\n            // Build form\n            $formWidget = $this->getThemeCheckFormWidget();\n            if (count($deps)) {\n                $formWidget->getField('install_requirements')->hidden(false)->options(array_combine($deps, $deps));\n                $formWidget->getField('_requirements_ruler')->hidden(false);\n            }\n\n            $this->vars['code'] = $code;\n            $this->vars['formWidget'] = $formWidget;\n\n            return $this->makePartial('theme_check_form');\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n            return $this->makePartial('theme_form');\n        }\n    }\n\n    /**\n     * findProposedDependencies checks a response `require` object for missing plugins\n     */\n    protected function findProposedDependencies($require): array\n    {\n        $pluginManager = PluginManager::instance();\n        if (!is_array($require)) {\n            return [];\n        }\n\n        $result = [];\n        foreach ($require as $r) {\n            if (!isset($r['code'])) {\n                continue;\n            }\n\n            if ($pluginManager->hasPlugin($r['code'])) {\n                continue;\n            }\n\n            $result[] = $r['code'];\n        }\n\n        return $result;\n    }\n\n    /**\n     * getThemeCheckFormWidget\n     */\n    protected function getThemeCheckFormWidget()\n    {\n        $config = $this->makeConfig('~/modules/system/widgets/updater/fields-theme-check.yaml');\n        $config->model = new \\Model;\n        $widget = $this->makeWidget(\\Backend\\Widgets\\Form::class, $config);\n        $widget->bindToController();\n        return $widget;\n    }\n\n    /**\n     * onInstallTheme validates the theme code and execute the theme installation\n     */\n    public function onInstallTheme()\n    {\n        try {\n            if (!$code = trim(post('code'))) {\n                throw new ApplicationException(__('Please specify a Theme name to install.'));\n            }\n\n            $updateSteps = [];\n\n            if (post('install_requirements')) {\n                $deps = (array) post('install_requirements', []);\n                foreach ($deps as $pluginCode) {\n                    $updateSteps[] = [\n                        'code' => 'installPlugin',\n                        'label' => __('Installing plugin: :name', ['name' => $pluginCode]),\n                        'name' => $pluginCode\n                    ];\n                }\n            }\n\n            if (post('install_strategy') === 'composer') {\n                $updateSteps[] = [\n                    'code' => 'installTheme',\n                    'label' => __('Installing theme: :name', ['name' => $code]),\n                    'name' => $code\n                ];\n            }\n            else {\n                $updateSteps[] = [\n                    'code' => 'downloadTheme',\n                    'label' => __('Installing theme: :name', ['name' => $code]),\n                    'name' => $code\n                ];\n\n                $updateSteps[] = [\n                    'code' => 'extractTheme',\n                    'label' => __('Extracting theme: :name', ['name' => $code]),\n                    'name' => $code\n                ];\n            }\n\n            if (post('seed_theme_data')) {\n                $updateSteps[] = [\n                    'code' => 'seedTheme',\n                    'label' => __('Seeding theme: :name', ['name' => $code]),\n                    'name' => $code\n                ];\n            }\n\n            $updateSteps[] = [\n                'code' => 'completeInstall',\n                'label' => __('Finishing installation process'),\n                'type' => 'final'\n            ];\n\n            $this->vars['updateSteps'] = $updateSteps;\n\n            return $this->makePartial('execute');\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n            return $this->makePartial('theme_form');\n        }\n    }\n\n    /**\n     * onRemoveTheme removes an existing theme\n     */\n    public function onRemoveTheme()\n    {\n        try {\n            if (!$code = trim(post('code'))) {\n                throw new ApplicationException(__('Please specify a Theme name to install.'));\n            }\n\n            $updateSteps = [\n                [\n                    'code' => 'removeTheme',\n                    'label' => __('Removing theme: :name', ['name' => $code]),\n                    'name' => $code\n                ],\n                [\n                    'code' => 'completeUpdate',\n                    'label' => __('Finishing installation process'),\n                    'type' => 'final'\n                ]\n            ];\n\n            $this->vars['updateSteps'] = $updateSteps;\n\n            return $this->makePartial('execute');\n        }\n        catch (Exception $ex) {\n            $this->handleError($ex);\n            return $this->makePartial('theme_form');\n        }\n    }\n\n    /**\n     * onExecuteStep runs a specific update step\n     */\n    public function onExecuteStep()\n    {\n        // Debugging\n        $useDebug = System::checkDebugMode() && get('debug');\n\n        // Prewarm system\n        $this->prewarmSystem();\n\n        $composer = ComposerManager::instance();\n        $manager = UpdateManager::instance();\n        $stepCode = post('code');\n\n        $composer->setOutputBuffer();\n\n        try {\n            switch ($stepCode) {\n                case 'updateComposer':\n                    try {\n                        $composer->update(['composer/composer']);\n                        $this->clearMetaCache();\n                    }\n                    catch (Exception $ex) {\n                    }\n                    break;\n\n                case 'updateCore':\n                    $composer->update();\n                    $this->clearMetaCache();\n                    break;\n\n                case 'installPlugin':\n                    $manager->installPlugin(post('name'));\n                    $this->clearMetaCache();\n                    break;\n\n                case 'installTheme':\n                    $manager->installTheme(post('name'));\n                    $this->clearMetaCache();\n                    break;\n\n                case 'downloadTheme':\n                    $manager->downloadTheme(post('name'));\n                    $this->clearMetaCache();\n                    break;\n\n                case 'extractTheme':\n                    $manager->extractTheme(post('name'));\n                    $this->clearMetaCache();\n                    break;\n\n                case 'seedTheme':\n                    $manager->seedTheme(post('name'));\n                    $this->clearMetaCache();\n                    break;\n\n                case 'removePlugin':\n                    $manager->uninstallPlugin(post('name'));\n                    $this->clearMetaCache();\n                    break;\n\n                case 'removeTheme':\n                    $manager->uninstallTheme(post('name'));\n                    $this->clearMetaCache();\n                    break;\n\n                case 'setBuild':\n                    $manager->setBuildNumberManually();\n                    break;\n\n                case 'completeUpdate':\n                    $manager->update();\n                    Flash::success(__('Update process complete'));\n                    return Redirect::refresh();\n\n                case 'completeInstall':\n                    $manager->update();\n                    Flash::success(__(\"Package installed successfully\"));\n                    return Redirect::refresh();\n            }\n        }\n        catch (Exception $ex) {\n            if ($useDebug) {\n                Log::error($ex);\n            }\n\n            throw new AjaxException([\n                'error' => $ex->getMessage(),\n                'output' => $composer->getOutputBuffer()\n            ]);\n        }\n\n        if ($useDebug) {\n            Log::info($composer->getOutputBuffer());\n        }\n    }\n\n    /**\n     * clearMetaCache will clear the system meta files that may cause a system\n     * crash if the non-existent classes are referenced.\n     */\n    protected function clearMetaCache()\n    {\n        CacheHelper::instance()->clearMeta();\n    }\n\n    /**\n     * processImportantUpdates loops the update list and checks for actionable updates\n     */\n    protected function processImportantUpdates(array $result): array\n    {\n        $hasImportantUpdates = false;\n\n        // Core\n        if (isset($result['core'])) {\n            $coreImportant = false;\n\n            foreach (array_get($result, 'core.updates', []) as $build => $description) {\n                if (strpos($description, '!!!') === false) {\n                    continue;\n                }\n\n                $detailsUrl = '//octobercms.com/support/articles/release-notes';\n                $description = str_replace('!!!', '', $description);\n                $result['core']['updates'][$build] = [$description, $detailsUrl];\n                $coreImportant = $hasImportantUpdates = true;\n            }\n\n            $result['core']['isImportant'] = $coreImportant ? '1' : '0';\n        }\n\n        // Plugins\n        foreach (array_get($result, 'plugins', []) as $code => $plugin) {\n            $isImportant = false;\n\n            foreach (array_get($plugin, 'updates', []) as $version => $description) {\n                if (strpos($description, '!!!') === false) {\n                    continue;\n                }\n\n                $isImportant = $hasImportantUpdates = true;\n                $detailsUrl = Backend::url('system/market/plugin/'.PluginVersion::makeSlug($code).'/upgrades').'?fetch=1';\n                $description = str_replace('!!!', '', $description);\n                $result['plugins'][$code]['updates'][$version] = [$description, $detailsUrl];\n            }\n\n            $result['plugins'][$code]['isImportant'] = $isImportant ? '1' : '0';\n        }\n\n        $result['hasImportantUpdates'] = $hasImportantUpdates;\n\n        return $result;\n    }\n\n    /**\n     * processUpdateLists reverses the update lists for the core and all plugins.\n     */\n    protected function processUpdateLists(array $result): array\n    {\n        if ($core = array_get($result, 'core')) {\n            $result['core']['updates'] = array_reverse(array_get($core, 'updates', []), true);\n        }\n\n        foreach (array_get($result, 'plugins', []) as $code => $plugin) {\n            $result['plugins'][$code]['updates'] = array_reverse(array_get($plugin, 'updates', []), true);\n        }\n\n        return $result;\n    }\n\n    /**\n     * prewarmSystem\n     */\n    protected function prewarmSystem()\n    {\n        // Address timeout limits\n        @set_time_limit(3600);\n\n        // Error path in case modules are replaced\n        class_exists(\\System\\Classes\\ErrorHandler::class);\n        class_exists(\\System\\Models\\EventLog::class);\n\n        // Cache helper may be encoded by Source Guardian\n        class_exists(\\System\\Helpers\\Cache::class);\n    }\n}\n"
  },
  {
    "path": "modules/system/widgets/changelog/assets/css/changelog.css",
    "content": ".important-update-label{margin:7px 0}.control-updatelist{border:1px solid var(--bs-border-color);border-radius:4px;margin-bottom:20px}.control-updatelist .update-item,.control-updatelist .update-item .item-header{border-bottom:1px solid var(--bs-border-color)}.control-updatelist .update-item .item-header{background-color:var(--bs-tertiary-bg);color:var(--bs-heading-color);padding:0 10px}.control-updatelist .update-item .item-header h5{font-size:13px;margin:0;padding:15px 0;text-transform:uppercase}.control-updatelist .update-item .item-header h5 i{color:var(--bs-heading-color);margin-right:7px}.control-updatelist .update-item .item-header h5 small{float:right;line-height:13px;margin-right:5px;text-transform:none}.control-updatelist .update-item .item-header .important-update{float:right;padding:7px 0 0;width:200px}.control-updatelist .update-item dl{margin-bottom:0;padding:10px}.control-updatelist .update-item dl:after,.control-updatelist .update-item dl:before{content:\" \";display:table}.control-updatelist .update-item dl:after{clear:both}.control-updatelist .update-item dl dd,.control-updatelist .update-item dl dt{float:left;line-height:20px;padding:5px 0}.control-updatelist .update-item dl dd.text-muted,.control-updatelist .update-item dl dt.text-muted{color:var(--bs-secondary-color)!important}.control-updatelist .update-item dl dt{clear:left;color:var(--oc-primary-color);font-size:14px;font-weight:400;width:15%}.control-updatelist .update-item dl dd{color:var(--bs-body-color);font-size:13px;width:85%}.control-updatelist .update-item dl .important-update-label{background-color:#ab2a1c;border-radius:.25em;color:#fff;display:inline-block;font-size:75%;line-height:1;padding:.2em .6em .3em;position:relative;text-align:center;top:-1px;vertical-align:baseline;white-space:nowrap}.control-updatelist .update-item:last-child{border-bottom:none}.control-updatelist .update-item.item-danger .item-header{background-color:#f2dede}.control-updatelist .update-item.item-danger .item-header,.control-updatelist .update-item.item-danger .item-header h5,.control-updatelist .update-item.item-danger .item-header i{color:#a94442}.control-updatelist .update-item.item-success .item-header{background-color:#dff0d8}.control-updatelist .update-item.item-success .item-header,.control-updatelist .update-item.item-success .item-header h5,.control-updatelist .update-item.item-success .item-header i{color:#3c763d}.control-updatelist .update-item.item-muted{border-bottom:none}.control-updatelist .update-item.item-muted .item-header,.control-updatelist .update-item.item-muted .item-header h5,.control-updatelist .update-item.item-muted .item-header i{color:rgba(0,0,0,.35)}.control-updatelist .update-item.item-muted dl{display:none}\n"
  },
  {
    "path": "modules/system/widgets/changelog/assets/less/changelog.less",
    "content": "@import \"../../../../../backend/assets/less/core/boot.less\";\n\n@updatelist-border-color: @border-color;\n@updatelist-header-color: @heading-color;\n@updatelist-header-bg: @tertiary-bg;\n\n@updatelist-color: @text-color;\n@updatelist-label-color: @primary-color;\n\n.important-update-label {\n    margin: 7px 0;\n}\n\n.control-updatelist {\n    margin-bottom: @line-height-computed;\n    border: 1px solid @updatelist-border-color;\n    border-radius: 4px;\n\n    .update-item {\n        border-bottom: 1px solid @updatelist-border-color;\n\n        .item-header {\n            color: @updatelist-header-color;\n            background-color: @updatelist-header-bg;\n            border-bottom: 1px solid @updatelist-border-color;\n            padding: 0 10px;\n\n            h5 {\n                margin: 0;\n                padding: 15px 0;\n                text-transform: uppercase;\n                font-size: 13px;\n\n                i {\n                    margin-right: 7px;\n                    color: @updatelist-header-color;\n                }\n\n                small {\n                    text-transform: none;\n                    float: right;\n                    line-height: 13px;\n                    margin-right: 5px;\n                }\n            }\n\n            .important-update {\n                padding: 7px 0 0 0;\n                float: right;\n                width: 200px;\n            }\n        }\n\n        dl {\n            padding: 10px;\n            margin-bottom: 0;\n            .clearfix();\n\n            dt, dd {\n                float: left;\n                padding: 5px 0;\n                line-height: 20px;\n                &.text-muted {\n                    color: @text-muted !important;\n                }\n            }\n\n            dt {\n                width: 15%;\n                clear: left;\n                font-size: 14px;\n                font-weight: 400;\n                color: @updatelist-label-color;\n            }\n            dd {\n                width: 85%;\n                font-size: 13px;\n                color: @updatelist-color;\n            }\n\n            .important-update-label {\n                position: relative;\n                top: -1px;\n                background-color: #ab2a1c;\n                color: #fff;\n                display: inline-block;\n                padding: .2em .6em .3em;\n                font-size: 75%;\n                line-height: 1;\n                text-align: center;\n                white-space: nowrap;\n                vertical-align: baseline;\n                .border-radius(.25em);\n            }\n        }\n\n        &:last-child {\n            border-bottom: none;\n        }\n\n        &.item-danger {\n            .item-header {\n                background-color: @state-danger-bg;\n                h5, i, & { color: @state-danger-text; }\n            }\n        }\n\n        &.item-success {\n            .item-header {\n                background-color: @state-success-bg;\n                h5, i, & { color: @state-success-text; }\n            }\n        }\n\n        &.item-muted {\n            border-bottom: none;\n\n            .item-header {\n                h5, i, & { color: rgba(0,0,0,.35); }\n            }\n            dl {\n                display: none;\n            }\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "modules/system/widgets/changelog/partials/_plugin_list.php",
    "content": "<div class=\"modal-header\">\n    <h4 class=\"modal-title\"><?= e(trans('system::lang.updates.changelog')) ?></h4>\n    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n</div>\n<div class=\"modal-body\">\n\n    <?php if ($this->fatalError): ?>\n        <p class=\"flash-message static error\"><?= e($fatalError) ?></p>\n    <?php else: ?>\n        <div class=\"control-updatelist\">\n            <div class=\"control-scrollbar\" style=\"height:400px\" data-control=\"scrollbar\">\n                <div class=\"update-item\">\n                    <?php if (!empty($changelog)): ?>\n                        <dl>\n                            <?php foreach ($changelog as $version => $comments): ?>\n                                <?php foreach ($comments as $index => $comment): ?>\n                                    <dt><?= !$index ? e($version): '' ?></dt>\n                                    <dd><?= e($comment) ?></dd>\n                                <?php endforeach ?>\n                            <?php endforeach ?>\n                        </dl>\n                    <?php else: ?>\n                        <p class=\"m-3\"><?= e(trans('system::lang.updates.details_changelog_missing')) ?></p>\n                    <?php endif ?>\n                </div>\n            </div>\n        </div>\n    <?php endif ?>\n</div>\n\n<div class=\"modal-footer\">\n    <button\n        type=\"button\"\n        class=\"btn btn-secondary\"\n        data-dismiss=\"popup\">\n        <?= __(\"Close\") ?>\n    </button>\n</div>\n"
  },
  {
    "path": "modules/system/widgets/changelog/partials/_system_list.php",
    "content": "<div class=\"modal-header\">\n    <h4 class=\"modal-title\"><?= e(trans('system::lang.updates.changelog')) ?></h4>\n    <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n</div>\n<div class=\"modal-body\">\n\n    <?php if ($this->fatalError): ?>\n        <p class=\"flash-message static error\"><?= e($fatalError) ?></p>\n    <?php else: ?>\n        <div class=\"control-updatelist\">\n            <div class=\"control-scrollbar\" style=\"height:400px\" data-control=\"scrollbar\">\n                <div class=\"update-item\">\n                    <dl>\n                        <?php foreach ($changelog as $item): ?>\n                            <?php\n                                $description = array_get($item, 'description');\n                                $versionFull = array_get($item, 'version_full');\n                                $linkUrl = array_get($item, 'link_url');\n                            ?>\n                            <dt>v<?= e($versionFull) ?></dt>\n                            <?php if ($linkUrl): ?>\n                                <dd>\n                                    <?= e($description) ?>\n                                    <a href=\"<?= $linkUrl ?>\" target=\"_blank\">\n                                        <?= e(trans('system::lang.updates.changelog_view_details')) ?>\n                                        <i class=\"icon-external-link\"></i>\n                                    </a>\n                                </dd>\n                            <?php else: ?>\n                                <dd><?= Markdown::parse(e($description)) ?></dd>\n                            <?php endif ?>\n                        <?php endforeach ?>\n                    </dl>\n                </div>\n            </div>\n        </div>\n    <?php endif ?>\n</div>\n\n<div class=\"modal-footer\">\n    <button\n        type=\"button\"\n        class=\"btn btn-default\"\n        data-dismiss=\"popup\">\n        <?= e(trans('backend::lang.form.close')) ?>\n    </button>\n</div>\n"
  },
  {
    "path": "modules/system/widgets/updater/assets/css/updater.css",
    "content": ".control-executeoutput{border:1px solid #ccc;border-radius:4px;margin-bottom:20px;margin-left:20px;margin-right:20px}.control-executeoutput .update-item dl{margin-bottom:0}.control-executeoutput .update-item dl:after,.control-executeoutput .update-item dl:before{content:\" \";display:table}.control-executeoutput .update-item dl:after{clear:both}.control-executeoutput .update-item dl dd,.control-executeoutput .update-item dl dt{float:left;font-size:12px;line-height:20px;margin:0;padding:5px 0}.control-executeoutput .update-item dl dt{clear:left;color:#999;font-family:monospace;font-weight:400;padding-right:1rem;text-align:right;width:8%}.control-executeoutput .update-item dl dd{color:#455152;width:92%}.control-executeoutput .update-item:nth-child(odd){background-color:#f2f2f2}.control-executeoutput .update-item:last-child{border-bottom:none}\n"
  },
  {
    "path": "modules/system/widgets/updater/assets/js/updater.js",
    "content": "/*\n * Updates class\n *\n * Dependencies:\n * - Waterfall plugin (waterfall.js)\n */\n\n+function ($) { \"use strict\";\n\n    var Updater = function () {\n\n        // Init\n        this.init();\n    }\n\n    Updater.prototype.init = function() {\n        this.activeStep = null;\n        this.updateSteps = null;\n        this.outputCount = 0;\n        this.waitLongerTimer = null;\n        this.hasTriedAgain = false;\n        this.unloadEventHandler = (event) => {\n            event.preventDefault();\n            return event.returnValue = $('#executeMessage').data('unload-warning');\n        };\n    }\n\n    Updater.prototype.check = function() {\n        var $form = $('#updateForm'),\n            self = this;\n\n        $form.request('onCheckForUpdates').done(function() {\n            self.evalConfirmedUpdates();\n        });\n\n        $form.on('change', '[data-important-update-select]', function() {\n            var $el = $(this),\n                selectedValue = $el.val(),\n                $updateItem = $el.closest('.update-item');\n\n            $updateItem.removeClass('item-danger item-muted item-success');\n\n            if (selectedValue == 'confirm') {\n                $updateItem.addClass('item-success');\n            }\n            else if (selectedValue == 'ignore' || selectedValue == 'skip') {\n                $updateItem.addClass('item-muted');\n            }\n            else {\n                $updateItem.addClass('item-danger');\n            }\n\n            self.evalConfirmedUpdates();\n        });\n    }\n\n    Updater.prototype.evalConfirmedUpdates = function() {\n        var $form = $('#updateForm'),\n            hasConfirmed = false;\n\n        $('[data-important-update-select]', $form).each(function() {\n            if ($(this).val() == '') {\n                hasConfirmed = true;\n            }\n        })\n\n        if (hasConfirmed) {\n            $('#updateListUpdateButton').prop('disabled', true);\n            $('#updateListImportantLabel').show();\n        }\n        else {\n            $('#updateListUpdateButton').prop('disabled', false);\n            $('#updateListImportantLabel').hide();\n        }\n    }\n\n    Updater.prototype.execute = function(steps) {\n        this.updateSteps = steps;\n        this.resetOutput();\n        this.runUpdate();\n    }\n\n    Updater.prototype.runUpdate = function(fromStep) {\n        var self = this;\n\n        $.waterfall\n            .apply(this, this.buildEventChain(this.updateSteps, fromStep))\n            .fail(function(reason) {\n                if (reason.constructor !== {}.constructor) {\n                    reason = { reason: reason };\n                }\n\n                var template = $('#executeFailed').html(),\n                    html = Mustache.render(template, reason);\n\n                $('#executeActivity').hide();\n                $('#executeStatus').html(html);\n\n                if (self.shouldTryAgain(reason)) {\n                    self.retryUpdate();\n                }\n            })\n            .done(function() {\n                self.setUnloadWarning(false);\n            });\n    }\n\n    Updater.prototype.retryUpdate = function() {\n        $('#executeActivity').show();\n        $('#executeStatus').html('');\n\n        this.resetOutput();\n        this.runUpdate(this.activeStep);\n    }\n\n    Updater.prototype.buildEventChain = function(steps, fromStep) {\n        var self = this,\n            eventChain = [],\n            skipStep = fromStep ? true : false;\n\n        $.each(steps, function(index, step) {\n            if (step == fromStep) {\n                skipStep = false;\n            }\n\n            // Continue\n            if (skipStep) {\n                return true;\n            }\n\n            eventChain.push(function() {\n                var deferred = $.Deferred();\n\n                self.activeStep = step;\n                self.resetOutput();\n                self.setLoadingBar(true, step.label);\n\n                $.request('onExecuteStep', {\n                    data: step,\n                    progressBar: false,\n                    success: function(data) {\n                        setTimeout(function() { deferred.resolve() }, 600);\n\n                        if (step.type == 'final') {\n                            self.setUnloadWarning(false);\n                            this.success(data);\n                        }\n                        else {\n                            self.setLoadingBar(false);\n                        }\n                    },\n                    error: function(data, statusCode) {\n                        self.setLoadingBar(false);\n                        if (data && data.output) {\n                            self.showOutput(data.output);\n                        }\n\n                        if (statusCode == 504) {\n                            self.timeoutRejection(deferred);\n                        }\n                        else if (data) {\n                            deferred.reject(data.error || (data + \"\"));\n                        }\n                        else {\n                            deferred.reject('General Error. Status code: ' + statusCode);\n                        }\n                    }\n                });\n\n                return deferred;\n            });\n        });\n\n        return eventChain;\n    }\n\n    Updater.prototype.timeoutRejection = function(deferred) {\n        var webserverHints = '';\n        [\n            ['Apache', 'https://httpd.apache.org/docs/2.4/mod/core.html#timeout'],\n            ['Nginx', 'http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_read_timeout']\n        ]\n        .forEach(function(webserver, index) {\n            webserverHints += (index !== 0 ? ', ' : '') + '<a target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\" href=\\\"'+ webserver[1] +'\\\">' + webserver[0] +'</a>';\n        });\n\n        var $lang = document.querySelector('#executePopup');\n        deferred.reject({\n            reason: $lang.getAttribute('data-lang-operation-timeout-comment'),\n            advice: $lang.getAttribute('data-lang-operation-timeout-hint').replace(':name', webserverHints)\n        });\n    }\n\n    Updater.prototype.shouldTryAgain = function(reason) {\n        if (this.hasTriedAgain) {\n            return false;\n        }\n        this.hasTriedAgain = true;\n\n        if (!reason || !reason.reason) {\n            return false;\n        }\n        var message = reason.reason;\n\n        // Source Guardian protection from hot swapping classes\n        if (message.includes('SourceGuardian Loader')) {\n            return true;\n        }\n\n        // Composer self updated and nuked itself\n        if (message.includes('Composer') && message.includes('InstalledVersions.php')) {\n            return true;\n        }\n\n        return false;\n    }\n\n    Updater.prototype.setLoadingBar = function(state, message) {\n        var loadingBar = $('#executeLoadingBar'),\n            messageDiv = $('#executeMessage');\n\n        if (state) {\n            loadingBar.removeClass('bar-loaded');\n        }\n        else {\n            loadingBar.addClass('bar-loaded');\n        }\n\n        if (message) {\n            messageDiv.text(message);\n        }\n\n        // Keep waiting message\n        clearTimeout(this.waitLongerTimer);\n        loadingBar.removeClass('fadeCycle');\n\n        if (state) {\n            this.waitLongerTimer = setTimeout(function() {\n                messageDiv.text(messageDiv.data('wait-longer'));\n                loadingBar.addClass('fadeCycle');\n            }, 80 * 1000);\n        }\n\n        // Unload warning\n        this.setUnloadWarning(state);\n    }\n\n    Updater.prototype.setUnloadWarning = function(state) {\n        if (state) {\n            addEventListener('beforeunload', this.unloadEventHandler, { capture: true });\n        }\n        else {\n            removeEventListener('beforeunload', this.unloadEventHandler, { capture: true });\n        }\n    }\n\n    Updater.prototype.showOutput = function(result) {\n        var self = this;\n\n        result.split(/\\r?\\n/).forEach(function(message) {\n            self.outputMessage(message);\n        });\n\n        $('#executeOutput').show();\n\n        // Scroll to bottom\n        var $scrollbar = $('#executeOutput .control-scrollbar:first');\n        $scrollbar.get(0).scrollTop = $scrollbar.get(0).scrollHeight;\n\n        // Trigger scrollbar\n        $(window).trigger('resize');\n    }\n\n    Updater.prototype.outputMessage = function(message) {\n        if (typeof message !== 'string') {\n            return;\n        }\n\n        if (message.trim().length === 0) {\n            return;\n        }\n\n        this.outputCount++;\n\n        var $updateItem = $('<div />').addClass('update-item').append(\n            $('<dl />').append(\n                $('<dt />').html(this.outputCount)\n            ).append(\n                $('<dd />').html(message)\n            )\n        );\n\n        $('#executeOutput [data-output-items]:first').append($updateItem);\n\n        // Trigger scrollbar\n        $(window).trigger('resize');\n    }\n\n    Updater.prototype.resetOutput = function() {\n        $('#executeOutput').hide();\n        $('#executeOutput [data-output-items]:first').empty();\n        this.outputCount = 0;\n    }\n\n    if ($.oc === undefined) {\n        $.oc = {};\n    }\n\n    $.oc.updater = new Updater;\n\n}(window.jQuery);\n"
  },
  {
    "path": "modules/system/widgets/updater/assets/less/updater.less",
    "content": "@import \"../../../../../backend/assets/less/core/boot.less\";\n\n.control-executeoutput {\n    border: 1px solid #ccc;\n    margin-bottom: @line-height-computed;\n    margin-left: 20px;\n    margin-right: 20px;\n    border-radius: 4px;\n\n    .update-item {\n        dl {\n            margin-bottom: 0;\n            .clearfix;\n\n            dt, dd {\n                float: left;\n                padding: 5px 0;\n                margin: 0;\n                font-size: 12px;\n                line-height: 20px;\n            }\n\n            dt {\n                width: 8%;\n                clear: left;\n                font-weight: 400;\n                color: #999;\n                text-align: right;\n                padding-right: 1rem;\n                font-family: monospace;\n            }\n\n            dd {\n                width: 92%;\n                color: #455152;\n            }\n        }\n\n        &:nth-child(odd) {\n            background-color: #f2f2f2;\n        }\n\n        &:last-child {\n            border-bottom: none;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/system/widgets/updater/fields-theme-check.yaml",
    "content": "# ===================================\n#  Field Definitions\n# ===================================\n\nfields:\n    install_strategy:\n        type: radio\n        default: copy\n        cssClass: pb-2\n        options:\n            copy: [\"Make a Copy (Recommended)\", \"Take a copy of this theme to customize it and manually manage future updates.\"]\n            composer: [\"Install with Composer\", \"Extend the theme using a child theme to preserve future updates from the theme author.\"]\n\n    seed_theme_data:\n        label: Seed Theme Data\n        comment: Import the blueprints files, language files and database contents for this theme, if applicable. You can skip this and do it later via the Site Theme settings.\n        type: checkbox\n        default: true\n\n    _requirements_ruler:\n        type: ruler\n        cssClass: pb-3\n        hidden: true\n\n    install_requirements:\n        label: Theme Dependencies\n        commentAbove: Install the plugins used by this theme first. You can skip this and do it later via the Software Updates settings.\n        type: checkboxlist\n        hidden: true\n        defaults: true\n        options: []\n"
  },
  {
    "path": "modules/system/widgets/updater/partials/_execute.php",
    "content": "<?php if (!$this->fatalError): ?>\n\n    <div\n        id=\"executePopup\"\n        data-lang-operation-timeout-comment=\"<?= Lang::get('system::lang.installer.operation_timeout_comment') ?>\"\n        data-lang-operation-timeout-hint=\"<?= Lang::get('system::lang.installer.operation_timeout_hint') ?>\"\n    >\n\n        <div id=\"executeActivity\">\n            <div class=\"modal-body modal-no-header\">\n                <div class=\"progress bar-loading-indicator\" id=\"executeLoadingBar\">\n                    <div class=\"progress-bar\"></div>\n                </div>\n\n                <div class=\"loading-indicator-container\">\n                    <div\n                        id=\"executeMessage\"\n                        data-wait-longer=\"<?= __(\"Just a few more minutes\") ?>...\"\n                        data-unload-warning=\"<?= __(\"Are you sure?\") ?>\"\n                        class=\"mt-2 text-center\"></div>\n                </div>\n            </div>\n        </div>\n\n        <div id=\"executeStatus\"></div>\n\n        <div class=\"control-executeoutput\" id=\"executeOutput\">\n            <div class=\"control-scrollbar\" style=\"height:300px\" data-control=\"scrollbar\">\n                <div data-output-items>\n                    <div class=\"update-item\">\n                        <dl>\n                            <dt><!-- Line number --></dt>\n                            <dd><!-- Message --></dd>\n                        </dl>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <script type=\"text/template\" id=\"executeFailed\">\n        <div class=\"modal-body modal-no-header\">\n            <div class=\"callout callout-danger no-icon\">\n                <div class=\"header\">\n                    <h3><?= __(\"Update Failed\") ?></h3>\n                    <p>{{ reason }}</p>\n                    {{#advice}}<p>{{{ advice }}}</p>{{/advice}}\n                </div>\n            </div>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::button(\n                label: __(\"Try Again\"),\n                primary: true,\n                onclick: '$.oc.updater.retryUpdate()'\n            ) ?>\n            <?= Ui::button(\n                label: __(\"Cancel\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n    </script>\n\n    <script>\n        $('#executePopup').on('popupComplete', function() {\n            $.oc.updater.execute(<?= json_encode($updateSteps) ?>);\n        });\n    </script>\n\n<?php else: ?>\n\n    <div class=\"modal-body modal-no-header\">\n        <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    </div>\n    <div class=\"modal-footer\">\n        <?= Ui::button(\n            label: __(\"Close\"),\n            secondary: true,\n            dataDismiss: 'popup'\n        ) ?>\n    </div>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/widgets/updater/partials/_license_form.php",
    "content": "<div class=\"onboarding-modal\" data-popup-size=\"500\">\n    <div class=\"modal-header\">\n        <div class=\"onboarding-logo oc-logo-white mb-3\"></div>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n    <div class=\"modal-body\">\n        <div class=\"d-flex p-3\">\n            <div class=\"mw-400\">\n                <h4 class=\"mb-4\"><?= __(\"Thank you for using October CMS!\") ?></h4>\n                <p><?= __(\"This is open source software, you can evaluate it freely but for any other purpose you need an active license.\") ?></p>\n                <p><?= __(\"By getting a license, you're helping with its ongoing development, which will make the platform even better!\") ?></p>\n                <p><?= __(\"Grab your license today and you'll receive a registration key that disables this prompt and confirms your support.\") ?></p>\n            </div>\n            <div class=\"ps-4\">\n                <img\n                    src=\"<?= Backend::skinAsset('assets/images/license-support.png') ?>\"\n                    width=\"60\"\n                    alt=\"\" />\n            </div>\n        </div>\n    </div>\n    <div class=\"modal-footer\">\n        <div class=\"px-3 pb-3\">\n            <?= Ui::button(\n                label: __(System::checkProjectValid(1|16) ? \"Renew License\" : \"Get a License\"),\n                href: 'https://octobercms.com/account/project/dashboard',\n                class: 'btn-success btn-lg me-2'\n            ) ?>\n            <?= Ui::button(\n                label: __(\"Later\"),\n                secondary: true,\n                class: 'btn-lg',\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/system/widgets/updater/partials/_plugin_form.php",
    "content": "<?= Form::open(['id' => 'pluginForm']) ?>\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __(\"Install Plugin\") ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n    <div class=\"modal-body\">\n\n        <?php if ($this->fatalError): ?>\n            <p class=\"flash-message static error\"><?= e($fatalError) ?></p>\n        <?php endif ?>\n\n        <div class=\"form-group\">\n            <label class=\"form-label\" for=\"pluginCode\"><?= __(\"Plugin Name\") ?></label>\n            <input\n                name=\"code\"\n                type=\"text\"\n                class=\"form-control\"\n                id=\"pluginCode\"\n                value=\"<?= e(post('code')) ?>\" />\n            <p class=\"form-text\"><?= __(\"Name the plugin by its unique code. For example, RainLab.Blog\") ?></p>\n        </div>\n\n    </div>\n\n    <div class=\"modal-footer\">\n        <button\n            type=\"submit\"\n            class=\"btn btn-primary\"\n            data-dismiss=\"popup\"\n            data-control=\"popup\"\n            data-handler=\"<?= $this->getEventHandler('onInstallPlugin') ?>\">\n            <?= __(\"Install Plugin\") ?>\n        </button>\n        <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            data-dismiss=\"popup\">\n            <?= __(\"Cancel\") ?>\n        </button>\n    </div>\n    <script>\n        setTimeout(\n            function(){ $('#pluginCode').select() },\n            310\n        )\n    </script>\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/system/widgets/updater/partials/_require_form.php",
    "content": "<?php if (!$this->fatalError): ?>\n\n    <?= Form::open() ?>\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= __(\"Check Dependencies\") ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n        <div class=\"modal-body\">\n            <p>\n                <?= __(\"There are missing dependencies needed for the system to run correctly.\") ?>\n            </p>\n            <div class=\"control-simplelist with-checkboxes\" data-control=\"simplelist\">\n                <ul>\n                    <?php foreach ($deps as $idx => $dep): ?>\n                        <li>\n\n                            <div class=\"form-check\">\n                                <input\n                                    class=\"form-check-input\"\n                                    id=\"<?= $this->getId('requireCheckbox-'.$idx) ?>\"\n                                    name=\"deps[]\"\n                                    value=\"<?= e($dep) ?>\"\n                                    checked=\"checked\"\n                                    type=\"checkbox\" />\n                                <label\n                                    class=\"form-check-label\"\n                                    for=\"<?= $this->getId('requireCheckbox-'.$idx) ?>\">\n                                        <?= e($dep) ?>\n                                </label>\n                            </div>\n                        </li>\n                    <?php endforeach ?>\n                </ul>\n            </div>\n        </div>\n        <div class=\"modal-footer\">\n            <button\n                type=\"button\"\n                class=\"btn btn-primary\"\n                data-dismiss=\"popup\"\n                data-control=\"popup\"\n                data-handler=\"<?= $this->getEventHandler('onInstallDependencies') ?>\"\n                data-keyboard=\"false\">\n                <?= __(\"Install Dependencies\") ?>\n            </button>\n            <button\n                type=\"button\"\n                class=\"btn btn-secondary\"\n                data-dismiss=\"popup\">\n                <?= e(trans('backend::lang.form.cancel')) ?>\n            </button>\n        </div>\n    <?= Form::close() ?>\n\n<?php else: ?>\n\n    <div class=\"modal-body\">\n        <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    </div>\n    <div class=\"modal-footer\">\n        <button\n            type=\"button\"\n            class=\"btn btn-default\"\n            data-dismiss=\"popup\">\n            <?= e(trans('backend::lang.form.close')) ?>\n        </button>\n    </div>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/system/widgets/updater/partials/_theme_check_form.php",
    "content": "<?= Form::open(['id' => 'themeCheckForm']) ?>\n    <input name=\"code\" value=\"<?= e($code) ?>\" type=\"hidden\" />\n\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __(\"Select Installation Method\") ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n    <div class=\"modal-body\">\n        <?= $formWidget->render() ?>\n    </div>\n\n    <div class=\"modal-footer\">\n        <button\n            type=\"submit\"\n            class=\"btn btn-primary\"\n            data-dismiss=\"popup\"\n            data-control=\"popup\"\n            data-handler=\"<?= $this->getEventHandler('onInstallTheme') ?>\">\n            <?= __(\"Install Theme\") ?>\n        </button>\n        <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            data-dismiss=\"popup\">\n            <?= __(\"Cancel\") ?>\n        </button>\n    </div>\n    <script>\n        setTimeout(\n            function(){ $('#themeCode').select() },\n            310\n        )\n    </script>\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/system/widgets/updater/partials/_theme_form.php",
    "content": "<?= Form::open(['id' => 'themeForm']) ?>\n    <div class=\"modal-header\">\n        <h4 class=\"modal-title\"><?= __(\"Install Theme\") ?></h4>\n        <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n    </div>\n    <div class=\"modal-body\">\n\n        <?php if ($this->fatalError): ?>\n            <p class=\"flash-message static error\"><?= e($fatalError) ?></p>\n        <?php endif ?>\n\n        <div class=\"form-group\">\n            <label class=\"form-label\" for=\"themeCode\"><?= __(\"Theme Name\") ?></label>\n            <input\n                name=\"code\"\n                type=\"text\"\n                class=\"form-control\"\n                id=\"themeCode\"\n                value=\"<?= e(post('code')) ?>\" />\n            <p class=\"form-text\"><?= __(\"Name the theme by its unique code. For example, RainLab.Vanilla\") ?></p>\n        </div>\n\n    </div>\n\n    <div class=\"modal-footer\">\n        <button\n            type=\"submit\"\n            class=\"btn btn-primary\"\n            data-dismiss=\"popup\"\n            data-control=\"popup\"\n            data-handler=\"<?= $this->getEventHandler('onInstallThemeCheck') ?>\">\n            <?= __(\"Install Theme\") ?>\n        </button>\n        <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            data-dismiss=\"popup\">\n            <?= __(\"Cancel\") ?>\n        </button>\n    </div>\n    <script>\n        setTimeout(\n            function(){ $('#themeCode').select() },\n            310\n        )\n    </script>\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/system/widgets/updater/partials/_update_form.php",
    "content": "<div id=\"checkUpdatesPopup\">\n    <?= Form::open(['id' => 'updateForm']) ?>\n        <div class=\"modal-header\">\n            <h4 class=\"modal-title\"><?= e(__('Software Update')) ?></h4>\n            <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n        </div>\n\n        <div id=\"updateContainer\">\n            <div class=\"modal-body\">\n\n                <div class=\"loading-indicator-container mb-3\">\n                    <p>&nbsp;</p>\n                    <div class=\"loading-indicator is-transparent\">\n                        <div><?= e(trans('system::lang.updates.update_loading')) ?></div>\n                        <span></span>\n                    </div>\n                </div>\n\n            </div>\n            <div class=\"modal-footer\">\n                <?= Ui::button(\n                    label: __(\"Cancel\"),\n                    secondary: true,\n                    dataDismiss: 'popup'\n                ) ?>\n            </div>\n        </div>\n\n    <?= Form::close() ?>\n</div>\n\n<script>\n    $('#checkUpdatesPopup').on('popupComplete', function() {\n        $.oc.updater.check();\n    });\n</script>\n"
  },
  {
    "path": "modules/system/widgets/updater/partials/_update_list.php",
    "content": "<?php if (!$this->fatalError): ?>\n\n    <?php if ($hasUpdates): ?>\n\n        <div class=\"modal-body\">\n            <p>\n                <strong><?= e(trans('system::lang.updates.found.label')) ?></strong>\n                <?= e(trans('system::lang.updates.found.help')) ?>\n            </p>\n\n            <div class=\"control-updatelist\">\n                <div class=\"control-scrollbar\" style=\"height:400px\" data-control=\"scrollbar\">\n                    <?php if ($core): ?>\n                        <div class=\"update-item <?= $core['isImportant'] ? 'item-danger' : '' ?>\">\n                            <div class=\"item-header\">\n                                <?php if ($core['isImportant']): ?>\n                                    <div class=\"important-update form-group form-group-sm\">\n                                        <select\n                                            name=\"core_action\"\n                                            class=\"form-control custom-select select-no-search\"\n                                            data-important-update-select>\n                                            <option value=\"\">-- <?= e(trans('system::lang.updates.important_action.empty')) ?> --</option>\n                                            <option value=\"confirm\"><?= e(trans('system::lang.updates.important_action.confirm')) ?></option>\n                                        </select>\n                                    </div>\n                                <?php endif ?>\n                                <h5>\n                                    <i class=\"icon-cube\"></i>\n                                    <?= e(trans('system::lang.system.name')) ?>\n                                </h5>\n                            </div>\n                            <dl>\n                                <?php foreach (array_get($core, 'updates', []) as $build => $description): ?>\n                                    <dt>v<?= e($build) ?></dt>\n                                    <?php if (is_array($description)): ?>\n                                        <dd>\n                                            <span class=\"important-update-label\">\n                                                <?= e(trans('system::lang.updates.important_action_required')) ?>\n                                            </span>\n                                            <?= e($description[0]) ?>\n                                            <a href=\"<?= $description[1] ?>\" target=\"_blank\">\n                                                <?= e(trans('system::lang.updates.important_view_release_notes')) ?>\n                                                <i class=\"icon-external-link\"></i>\n                                            </a>\n                                        </dd>\n                                    <?php else: ?>\n                                        <dd><?= Markdown::parse(e($description)) ?></dd>\n                                    <?php endif ?>\n                                <?php endforeach ?>\n                                <?php if ($core['old_build']): ?>\n                                    <dt class=\"text-muted\">v<?= e($core['old_build']) ?></dt>\n                                    <dd class=\"text-muted\"><?= e(__('Current Build')) ?></dd>\n                                <?php endif ?>\n                            </dl>\n                        </div>\n                    <?php endif ?>\n\n                    <?php foreach ($themeList as $code => $theme): ?>\n                        <div class=\"update-item\">\n                            <div class=\"item-header\">\n                                <h5>\n                                    <i class=\"icon-photo\"></i>\n                                    <?= e(array_get($theme, 'name', 'Unknown')) ?>\n                                </h5>\n                            </div>\n                            <dl>\n                                <dt>v<?= e(array_get($theme, 'version', '1.0.0')) ?></dt>\n                                <dd><?= e(trans('system::lang.updates.theme_new_install')) ?></dd>\n                            </dl>\n                        </div>\n                    <?php endforeach ?>\n\n                    <?php foreach ($pluginList as $code => $plugin): ?>\n                        <div class=\"update-item <?= $plugin['isImportant'] ? 'item-danger' : '' ?>\">\n                            <div class=\"item-header\">\n                                <?php if ($plugin['isImportant']): ?>\n                                    <div class=\"important-update form-group form-group-sm\">\n                                        <select\n                                            name=\"plugin_actions[]\"\n                                            class=\"form-control custom-select select-no-search\"\n                                            data-important-update-select>\n                                            <option value=\"\">-- <?= e(trans('system::lang.updates.important_action.empty')) ?> --</option>\n                                            <option value=\"confirm\"><?= e(trans('system::lang.updates.important_action.confirm')) ?></option>\n                                        </select>\n                                    </div>\n                                <?php endif ?>\n                                <h5>\n                                    <i class=\"<?= e($plugin['icon'] ?: 'icon-puzzle-piece') ?>\"></i>\n                                    <?= e($plugin['name']) ?>\n                                </h5>\n                            </div>\n                            <dl>\n                                <?php if (!$plugin['old_version']): ?>\n                                    <dt>\n                                        v<?= $plugin['version'] ?>\n                                    </dt>\n                                    <dd>\n                                        <?= e(trans('system::lang.updates.plugin_version_none')) ?>\n                                    </dd>\n                                <?php else: ?>\n                                    <?php foreach (array_get($plugin, 'updates', []) as $version => $description): ?>\n                                        <dt>v<?= e($version) ?></dt>\n                                        <?php if (is_array($description)): ?>\n                                            <dd>\n                                                <span class=\"important-update-label\">\n                                                    <?= e(trans('system::lang.updates.important_action_required')) ?>\n                                                </span>\n                                                <?= e($description[0]) ?>\n                                                <a href=\"<?= $description[1] ?>\" target=\"_blank\">\n                                                    <?= e(trans('system::lang.updates.important_view_guide')) ?>\n                                                    <i class=\"icon-external-link\"></i>\n                                                </a>\n                                            </dd>\n                                        <?php else: ?>\n                                            <dd><?= e($description) ?></dd>\n                                        <?php endif ?>\n                                    <?php endforeach ?>\n\n                                    <dt class=\"text-muted\">\n                                        v<?= e($plugin['old_version']) ?>\n                                    </dt>\n                                    <dd class=\"text-muted\">\n                                        <?= e(trans('system::lang.updates.plugin_current_version')) ?>\n                                    </dd>\n                                <?php endif ?>\n                            </dl>\n                        </div>\n                    <?php endforeach ?>\n\n                </div>\n            </div>\n\n        </div>\n\n        <div class=\"modal-footer\">\n            <?php if ($hasImportantUpdates): ?>\n                <p class=\"text-danger pull-right oc-icon-exclamation important-update-label\" id=\"updateListImportantLabel\">\n                    <?= e(trans('system::lang.updates.important_alert_text')) ?>\n                </p>\n            <?php endif ?>\n            <?= Ui::button(\n                label: e(trans('system::lang.updates.update_label')),\n                primary: true,\n                id: 'updateListUpdateButton',\n                dataDismiss: 'popup',\n                dataControl: 'popup',\n                dataHandler: 'onApplyUpdates',\n                dataKeyboard: 'false'\n            ) ?>\n            <?= Ui::button(\n                label: __(\"Cancel\"),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n        </div>\n\n    <?php else: ?>\n\n        <div class=\"modal-body\">\n            <p><?= e(trans('system::lang.updates.none.help')) ?></p>\n        </div>\n        <div class=\"modal-footer\">\n            <?= Ui::button(\n                label: e(trans('backend::lang.form.close')),\n                secondary: true,\n                dataDismiss: 'popup'\n            ) ?>\n            <?= Ui::button(\n                label: e(trans('system::lang.updates.force_label')),\n                primary: true,\n                dataDismiss: 'popup',\n                dataControl: 'popup',\n                dataHandler: 'onApplyUpdates',\n                dataKeyboard: 'false'\n            ) ?>\n        </div>\n\n    <?php endif ?>\n\n<?php else: ?>\n\n    <div class=\"modal-body\">\n        <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    </div>\n    <div class=\"modal-footer\">\n        <?= Ui::button(\n            label: __(\"Close\"),\n            secondary: true,\n            dataDismiss: 'popup'\n        ) ?>\n    </div>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/ServiceProvider.php",
    "content": "<?php namespace Tailor;\n\nuse Url;\nuse Event;\nuse Backend\\Models\\UserRole;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse October\\Rain\\Support\\ModuleServiceProvider;\n\n/**\n * ServiceProvider for Tailor module\n */\nclass ServiceProvider extends ModuleServiceProvider\n{\n    /**\n     * register the service provider\n     */\n    public function register()\n    {\n        parent::register('tailor');\n\n        $this->registerSingletons();\n        $this->registerEditorEvents();\n        $this->registerConsole();\n        $this->registerRenamedClasses();\n\n        $this->extendDeferredBindingForContent();\n    }\n\n    /**\n     * boot the module events\n     */\n    public function boot()\n    {\n        parent::boot('tailor');\n\n        $this->bootPageManagerEvents();\n    }\n\n    /**\n     * registerComponents\n     */\n    public function registerComponents()\n    {\n        return [\n           \\Tailor\\Components\\GlobalComponent::class => 'global',\n           \\Tailor\\Components\\SectionComponent::class => 'section',\n           \\Tailor\\Components\\CollectionComponent::class => 'collection',\n        ];\n    }\n\n    /**\n     * registerNavigation\n     */\n    public function registerNavigation()\n    {\n        return BlueprintIndexer::instance()->getNavigationMainMenu() +\n            BlueprintIndexer::instance()->getNavigationContentMainMenu();\n    }\n\n    /**\n     * registerSettings\n     */\n    public function registerSettings()\n    {\n        return BlueprintIndexer::instance()->getNavigationSettingsMenu();\n    }\n\n    /**\n     * registerPermissions\n     */\n    public function registerPermissions()\n    {\n        return [\n            // Editor\n            'editor.tailor_blueprints' => [\n                'label' => \"Manage Blueprints\",\n                'tab' => \"Editor\",\n                'roles' => UserRole::CODE_DEVELOPER,\n                'order' => 100\n            ],\n            // Tailor\n            'tailor.entry' => [\n                'label' => \"Manage Entries\",\n                'tab' => \"Tailor\",\n                'order' => 900\n            ],\n            'tailor.global' => [\n                'label' => \"Manage Globals\",\n                'tab' => \"Tailor\",\n                'order' => 910\n            ]\n        ] + BlueprintIndexer::instance()->getPermissionDefinitions();\n    }\n\n    /**\n     * registerSingletons\n     */\n    protected function registerSingletons()\n    {\n        $this->app->singleton('tailor.fields', \\Tailor\\Classes\\FieldManager::class);\n        $this->app->singleton('tailor.record.indexer', \\Tailor\\Classes\\RecordIndexer::class);\n        $this->app->singleton('tailor.blueprint.indexer', \\Tailor\\Classes\\BlueprintIndexer::class);\n        $this->app->singleton('tailor.blueprint.verifier', \\Tailor\\Classes\\BlueprintVerifier::class);\n\n        $this->app->singleton('validation.presence.tailor', function ($app) {\n            return new \\Tailor\\Classes\\PresenceVerifier($app['db']);\n        });\n    }\n\n    /**\n     * registerEditorEvents handles Editor events\n     */\n    protected function registerEditorEvents()\n    {\n        Event::listen('editor.extension.register', function () {\n            return \\Tailor\\Classes\\EditorExtension::class;\n        });\n\n        Event::listen('editor.extension.defineYamlSchemas', function () {\n            return [\n                [\n                    'uri' => Url::asset('modules/tailor/assets/js/blueprint-yaml-schema.json'),\n                    'fileMatch' => ['*-blueprint.yaml']\n                ]\n            ];\n        });\n    }\n\n    /**\n     * registerConsole\n     */\n    protected function registerConsole()\n    {\n        $this->discoverConsoleCommands('tailor');\n    }\n\n    /**\n     * registerContentFields\n     */\n    public function registerContentFields()\n    {\n        return [\n            \\Tailor\\ContentFields\\MixinField::class => 'mixin',\n            \\Tailor\\ContentFields\\EntriesField::class => 'entries',\n            \\Tailor\\ContentFields\\RepeaterField::class => 'repeater',\n            \\Tailor\\ContentFields\\RichEditorField::class => 'richeditor',\n            \\Tailor\\ContentFields\\MarkdownField::class => 'markdown',\n            \\Tailor\\ContentFields\\FileUploadField::class => 'fileupload',\n            \\Tailor\\ContentFields\\MediaFinderField::class => 'mediafinder',\n            \\Tailor\\ContentFields\\PageFinderField::class => 'pagefinder',\n            \\Tailor\\ContentFields\\DataTableField::class => 'datatable',\n            \\Tailor\\ContentFields\\NestedFormField::class => 'nestedform',\n            \\Tailor\\ContentFields\\NestedItemsField::class => 'nesteditems',\n            \\Tailor\\ContentFields\\DatePickerField::class => 'datepicker',\n            \\Tailor\\ContentFields\\NumberField::class => 'number',\n            \\Tailor\\ContentFields\\TagListField::class => 'taglist',\n            \\Tailor\\ContentFields\\RecordFinderField::class => 'recordfinder',\n        ];\n    }\n\n    /**\n     * extendDeferredBindingForContent\n     */\n    protected function extendDeferredBindingForContent()\n    {\n        Event::listen('deferredBinding.newMasterInstance', function($model, $masterObject) {\n            if (\n                $masterObject instanceof \\Tailor\\Models\\EntryRecord ||\n                $masterObject instanceof \\Tailor\\Models\\RepeaterItem ||\n                $masterObject instanceof \\Tailor\\Models\\GlobalRecord\n            ) {\n                $masterObject->extendDeferredContentModel($model);\n            }\n        });\n    }\n\n    /**\n     * bootPageManagerEvents\n     */\n    protected function bootPageManagerEvents()\n    {\n        Event::listen(['cms.pageLookup.listTypes', 'pages.menuitem.listTypes'], function () {\n            return BlueprintIndexer::instance()->listPageManagerTypes();\n        });\n\n        Event::listen(['cms.pageLookup.getTypeInfo', 'pages.menuitem.getTypeInfo'], function ($type) {\n            if (starts_with($type, ['entry-', 'list-entry-'])) {\n                return BlueprintIndexer::instance()->getPageManagerTypeInfo($type);\n            }\n        });\n\n        Event::listen(['cms.pageLookup.resolveItem', 'pages.menuitem.resolveItem'], function ($type, $item, $url, $theme) {\n            if (starts_with($type, ['entry-', 'list-entry-'])) {\n                return BlueprintIndexer::instance()->resolvePageManagerItem($type, $item, $url, $theme);\n            }\n        });\n    }\n\n    /**\n     * registerRenamedClasses\n     */\n    protected function registerRenamedClasses()\n    {\n        $this->app->registerClassAliases([\n            \\Tailor\\Models\\EntryRecordImport::class => \\Tailor\\Models\\RecordImport::class,\n            \\Tailor\\Models\\EntryRecordExport::class => \\Tailor\\Models\\RecordExport::class\n        ]);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/assets/css/tailor.css",
    "content": ".set-item-parent {\n    min-width: 240px;\n\n    .form-group {\n        padding-bottom: 0;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/assets/js/blueprint-yaml-schema.json",
    "content": "{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"definitions\": {\n        \"AnyColumn\": {\n            \"anyOf\": [\n                {\n                    \"$ref\": \"#/definitions/TextColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/NumberColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/ImageColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/SwitchColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/SummaryColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/DateTimeColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/DateColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/TimeColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/TimeSinceColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/TimeTenseColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/SelectableColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/LinkageColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/PartialColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/ColorPickerColumn\"\n                },\n                {\n                    \"$ref\": \"#/definitions/CustomColumn\"\n                }\n            ]\n        },\n        \"AnyField\": {\n            \"anyOf\": [\n                {\n                    \"$ref\": \"#/definitions/CustomField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/TextField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/NumberField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/PasswordField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/EmailField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/TextareaField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/DropdownField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/RadioListField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/BalloonSelectorField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/CheckboxField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/CheckboxListField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/SwitchField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/SectionField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/HintField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/RulerField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/PartialField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/CodeEditorField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/ColorPickerField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/DataTableField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/DatePickerField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/FileUploadField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/MarkdownEditorField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/MediaFinderField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/NestedFormField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/RecordFinderField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/RelationField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/RepeaterField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/RichEditorField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/PageFinderField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/SensitiveField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/TagListField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/BoxesField\"\n                }\n            ]\n        },\n        \"AnyScope\": {\n            \"anyOf\": [\n                {\n                    \"$ref\": \"#/definitions/CheckboxScope\"\n                },\n                {\n                    \"$ref\": \"#/definitions/SwitchScope\"\n                },\n                {\n                    \"$ref\": \"#/definitions/TextScope\"\n                },\n                {\n                    \"$ref\": \"#/definitions/NumberScope\"\n                },\n                {\n                    \"$ref\": \"#/definitions/DropdownScope\"\n                },\n                {\n                    \"$ref\": \"#/definitions/GroupScope\"\n                },\n                {\n                    \"$ref\": \"#/definitions/DateScope\"\n                },\n                {\n                    \"$ref\": \"#/definitions/CustomScope\"\n                }\n            ]\n        },\n        \"BalloonSelectorField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"additionalProperties\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"balloon-selector\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"BoxesField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"boxes\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"CheckboxField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": \"boolean\"\n                },\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"checkbox\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"CheckboxListField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"inlineOptions\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"additionalProperties\": false,\n                            \"patternProperties\": {\n                                \"^[0-9]+$\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": [\n                                                \"string\",\n                                                \"number\"\n                                            ]\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"quickselect\": {\n                    \"type\": \"boolean\"\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"checkboxlist\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"CheckboxScope\": {\n            \"properties\": {\n                \"conditions\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"enum\": [\n                        0,\n                        1,\n                        false,\n                        true\n                    ]\n                },\n                \"dependsOn\": {\n                    \"type\": \"string\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"checkbox\",\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"conditions\",\n                \"label\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"CodeEditorField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"fontSize\": {\n                    \"type\": \"number\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"language\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"showGutter\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"codeeditor\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"wordWrap\": {\n                    \"type\": [\"boolean\", \"string\"]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"ColorPickerColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"colorpicker\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"ColorPickerField\": {\n            \"properties\": {\n                \"allowCustom\": {\n                    \"type\": \"boolean\"\n                },\n                \"allowEmpty\": {\n                    \"type\": \"boolean\"\n                },\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"availableColors\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"showAlpha\": {\n                    \"type\": \"boolean\"\n                },\n                \"showInput\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"colorpicker\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"ColumnsRoot\": {\n            \"properties\": {\n                \"columns\": {\n                    \"additionalProperties\": {\n                        \"$ref\": \"#/definitions/AnyColumn\"\n                    },\n                    \"type\": \"object\"\n                }\n            },\n            \"required\": [\n                \"columns\"\n            ],\n            \"type\": \"object\"\n        },\n        \"CustomColumn\": {\n            \"additionalProperties\": {},\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"CustomField\": {\n            \"additionalProperties\": {},\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"CustomScope\": {\n            \"additionalProperties\": {},\n            \"properties\": {\n                \"dependsOn\": {\n                    \"type\": \"string\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"label\"\n            ],\n            \"type\": \"object\"\n        },\n        \"DataTableField\": {\n            \"properties\": {\n                \"adding\": {\n                    \"type\": \"boolean\"\n                },\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"btnAddRowBelowLabel\": {\n                    \"type\": \"string\"\n                },\n                \"btnAddRowLabel\": {\n                    \"type\": \"string\"\n                },\n                \"btnDeleteRowLabel\": {\n                    \"type\": \"string\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"columns\": {\n                    \"additionalProperties\": {\n                        \"properties\": {\n                            \"options\": {\n                                \"type\": \"string\"\n                            },\n                            \"readOnly\": {\n                                \"type\": \"boolean\"\n                            },\n                            \"title\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": {\n                                \"enum\": [\n                                    \"autocomplete\",\n                                    \"checkbox\",\n                                    \"dropdown\",\n                                    \"string\"\n                                ],\n                                \"type\": \"string\"\n                            },\n                            \"validation\": {\n                                \"properties\": {\n                                    \"float\": {\n                                        \"properties\": {\n                                            \"allowNegative\": {\n                                                \"type\": \"boolean\"\n                                            },\n                                            \"message\": {\n                                                \"type\": \"string\"\n                                            }\n                                        },\n                                        \"required\": [\n                                            \"message\"\n                                        ],\n                                        \"type\": \"object\"\n                                    },\n                                    \"integer\": {\n                                        \"properties\": {\n                                            \"allowNegative\": {\n                                                \"type\": \"boolean\"\n                                            },\n                                            \"message\": {\n                                                \"type\": \"string\"\n                                            }\n                                        },\n                                        \"required\": [\n                                            \"message\"\n                                        ],\n                                        \"type\": \"object\"\n                                    },\n                                    \"length\": {\n                                        \"properties\": {\n                                            \"max\": {\n                                                \"type\": \"number\"\n                                            },\n                                            \"message\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"min\": {\n                                                \"type\": \"number\"\n                                            }\n                                        },\n                                        \"required\": [\n                                            \"max\",\n                                            \"message\",\n                                            \"min\"\n                                        ],\n                                        \"type\": \"object\"\n                                    },\n                                    \"regex\": {\n                                        \"properties\": {\n                                            \"message\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"pattern\": {\n                                                \"type\": \"string\"\n                                            }\n                                        },\n                                        \"required\": [\n                                            \"message\",\n                                            \"pattern\"\n                                        ],\n                                        \"type\": \"object\"\n                                    },\n                                    \"required\": {\n                                        \"properties\": {\n                                            \"message\": {\n                                                \"type\": \"string\"\n                                            }\n                                        },\n                                        \"required\": [\n                                            \"message\"\n                                        ],\n                                        \"type\": \"object\"\n                                    }\n                                },\n                                \"required\": [\n                                    \"required\"\n                                ],\n                                \"type\": \"object\"\n                            },\n                            \"width\": {\n                                \"type\": \"number\"\n                            }\n                        },\n                        \"required\": [\n                            \"title\",\n                            \"type\"\n                        ],\n                        \"type\": \"object\"\n                    },\n                    \"type\": \"object\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"deleting\": {\n                    \"type\": \"boolean\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"dynamicHeight\": {\n                    \"type\": \"boolean\"\n                },\n                \"fieldName\": {\n                    \"type\": \"string\"\n                },\n                \"height\": {\n                    \"anyOf\": [\n                        {\n                            \"const\": false,\n                            \"type\": \"boolean\"\n                        },\n                        {\n                            \"type\": \"number\"\n                        }\n                    ]\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"keyFrom\": {\n                    \"type\": \"number\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"postbackHandlerName\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"recordsPerPage\": {\n                    \"anyOf\": [\n                        {\n                            \"const\": false,\n                            \"type\": \"boolean\"\n                        },\n                        {\n                            \"type\": \"number\"\n                        }\n                    ]\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"searching\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"toolbar\": {\n                    \"items\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"datatable\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"columns\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"DateColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"date\",\n                    \"type\": \"string\"\n                },\n                \"useTimezone\": {\n                    \"type\": \"boolean\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"DatePickerField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"firstDay\": {\n                    \"enum\": [\n                        0,\n                        1,\n                        2,\n                        3,\n                        4,\n                        5,\n                        6\n                    ],\n                    \"type\": \"number\"\n                },\n                \"format\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"maxDate\": {\n                    \"type\": \"string\"\n                },\n                \"minDate\": {\n                    \"type\": \"string\"\n                },\n                \"mode\": {\n                    \"enum\": [\n                        \"date\",\n                        \"datetime\",\n                        \"time\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"showWeekNumber\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"twelveHour\": {\n                    \"type\": \"boolean\"\n                },\n                \"type\": {\n                    \"const\": \"datepicker\",\n                    \"type\": \"string\"\n                },\n                \"useTimezone\": {\n                    \"type\": \"boolean\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"mode\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"DateScope\": {\n            \"properties\": {\n                \"conditions\": {\n                    \"properties\": {\n                        \"after\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        },\n                        \"before\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        },\n                        \"between\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        },\n                        \"equals\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        },\n                        \"notEquals\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        }\n                    },\n                    \"type\": \"object\"\n                },\n                \"default\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"type\": \"string\"\n                },\n                \"firstDay\": {\n                    \"enum\": [\n                        0,\n                        1,\n                        2,\n                        3,\n                        4,\n                        5,\n                        6\n                    ],\n                    \"type\": \"number\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"maxDate\": {\n                    \"type\": \"string\"\n                },\n                \"minDate\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"showWeekNumber\": {\n                    \"type\": \"boolean\"\n                },\n                \"type\": {\n                    \"const\": \"date\",\n                    \"type\": \"string\"\n                },\n                \"useTimezone\": {\n                    \"type\": \"boolean\"\n                }\n            },\n            \"required\": [\n                \"label\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"DateTimeColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"format\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"datetime\",\n                    \"type\": \"string\"\n                },\n                \"useTimezone\": {\n                    \"type\": \"boolean\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"DropdownField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"emptyOption\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"additionalProperties\": false,\n                            \"patternProperties\": {\n                                \"^[0-9]+$\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": [\n                                                \"string\",\n                                                \"number\"\n                                            ]\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"showSearch\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"dropdown\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"DropdownScope\": {\n            \"properties\": {\n                \"conditions\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"type\": \"string\"\n                },\n                \"emptyOption\": {\n                    \"type\": \"string\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"modelClass\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"additionalProperties\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"dropdown\",\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"label\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"EmailField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"email\",\n                    \"type\": \"string\"\n                },\n                \"validation\": {\n                    \"items\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"EntriesField\": {\n            \"properties\": {\n                \"conditions\": {\n                    \"type\": \"string\"\n                },\n                \"customMessages\": {\n                    \"properties\": {\n                        \"buttonAdd\": {\n                            \"type\": \"string\"\n                        },\n                        \"buttonCreate\": {\n                            \"type\": \"string\"\n                        },\n                        \"buttonDelete\": {\n                            \"type\": \"string\"\n                        },\n                        \"buttonDeleteMany\": {\n                            \"type\": \"string\"\n                        },\n                        \"buttonRemove\": {\n                            \"type\": \"string\"\n                        },\n                        \"buttonRemoveMany\": {\n                            \"type\": \"string\"\n                        },\n                        \"confirmDelete\": {\n                            \"type\": \"string\"\n                        },\n                        \"flashAdd\": {\n                            \"type\": \"string\"\n                        },\n                        \"flashCreate\": {\n                            \"type\": \"string\"\n                        },\n                        \"flashDelete\": {\n                            \"type\": \"string\"\n                        },\n                        \"flashUpdate\": {\n                            \"type\": \"string\"\n                        },\n                        \"titleAddForm\": {\n                            \"type\": \"string\"\n                        },\n                        \"titleCreateForm\": {\n                            \"type\": \"string\"\n                        },\n                        \"titleUpdateForm\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    \"type\": \"object\"\n                },\n                \"displayMode\": {\n                    \"enum\": [\n                        \"controller\",\n                        \"recordfinder\",\n                        \"relation\",\n                        \"taglist\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"inverse\": {\n                    \"type\": \"boolean\"\n                },\n                \"maxItems\": {\n                    \"type\": \"number\"\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"source\": {\n                    \"type\": \"string\"\n                },\n                \"toolbarButtons\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"enum\": [\n                                    \"add\",\n                                    \"create\",\n                                    \"delete\",\n                                    \"remove\",\n                                    \"update\"\n                                ],\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"const\": false,\n                            \"type\": \"boolean\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"type\": {\n                    \"const\": \"entries\",\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"source\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"Fields\": {\n            \"additionalProperties\": {\n                \"$ref\": \"#/definitions/AnyField\"\n            },\n            \"type\": \"object\"\n        },\n        \"FieldsRoot\": {\n            \"properties\": {\n                \"fields\": {\n                    \"$ref\": \"#/definitions/Fields\"\n                },\n                \"secondaryTabs\": {\n                    \"$ref\": \"#/definitions/FormTabs\"\n                },\n                \"tabs\": {\n                    \"$ref\": \"#/definitions/FormTabs\"\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"FileUploadField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"deferredBinding\": {\n                    \"type\": \"boolean\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"fileTypes\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"imageHeight\": {\n                    \"type\": \"number\"\n                },\n                \"imageWidth\": {\n                    \"type\": \"number\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"maxFiles\": {\n                    \"type\": \"number\"\n                },\n                \"maxFilesize\": {\n                    \"type\": \"number\"\n                },\n                \"mimeTypes\": {\n                    \"type\": \"string\"\n                },\n                \"mode\": {\n                    \"enum\": [\n                        \"file\",\n                        \"image\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"prompt\": {\n                    \"type\": \"string\"\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"size\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"giant\",\n                        \"huge\",\n                        \"large\",\n                        \"small\",\n                        \"tiny\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"thumbOptions\": {\n                    \"$ref\": \"#/definitions/ThumbsOptions\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"fileupload\",\n                    \"type\": \"string\"\n                },\n                \"useCaption\": {\n                    \"type\": \"boolean\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"FormTabs\": {\n            \"properties\": {\n                \"activeTab\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"defaultTab\": {\n                    \"type\": \"string\"\n                },\n                \"fields\": {\n                    \"$ref\": \"#/definitions/Fields\"\n                },\n                \"icons\": {\n                    \"additionalProperties\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"object\"\n                },\n                \"lazy\": {\n                    \"items\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                },\n                \"linkable\": {\n                    \"type\": \"boolean\"\n                },\n                \"paneCssClass\": {\n                    \"additionalProperties\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"object\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                }\n            },\n            \"required\": [\n                \"fields\"\n            ],\n            \"type\": \"object\"\n        },\n        \"GroupScope\": {\n            \"properties\": {\n                \"conditions\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"items\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                },\n                \"dependsOn\": {\n                    \"type\": \"string\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"modelClass\": {\n                    \"type\": \"string\"\n                },\n                \"nameFrom\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"additionalProperties\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"group\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"label\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"Groups\": {\n            \"additionalProperties\": {\n                \"$ref\": \"#/definitions/RepeaterGroup\"\n            },\n            \"type\": \"object\"\n        },\n        \"HintField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"mode\": {\n                    \"enum\": [\n                        \"danger\",\n                        \"info\",\n                        \"success\",\n                        \"tip\",\n                        \"warning\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"path\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"hint\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"ImageColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"height\": {\n                    \"type\": \"number\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"$ref\": \"#/definitions/ThumbsOptions\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"image\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": \"number\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"LinkageColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"attributes\": {\n                    \"additionalProperties\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"object\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"linkage\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"ListStructure\": {\n            \"properties\": {\n                \"dragRow\": {\n                    \"type\": \"boolean\"\n                },\n                \"maxDepth\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"showReorder\": {\n                    \"type\": \"boolean\"\n                },\n                \"showSorting\": {\n                    \"type\": \"boolean\"\n                },\n                \"showTree\": {\n                    \"type\": \"boolean\"\n                },\n                \"treeExpanded\": {\n                    \"type\": \"boolean\"\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"MarkdownEditorField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"sideBySide\": {\n                    \"type\": \"boolean\"\n                },\n                \"size\": {\n                    \"enum\": [\n                        \"giant\",\n                        \"huge\",\n                        \"large\",\n                        \"small\",\n                        \"tiny\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"markdown\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"MediaFinderField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"imageHeight\": {\n                    \"type\": \"number\"\n                },\n                \"imageWidth\": {\n                    \"type\": \"number\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"maxItems\": {\n                    \"type\": \"number\"\n                },\n                \"mode\": {\n                    \"enum\": [\n                        \"file\",\n                        \"folder\",\n                        \"image\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"thumbOptions\": {\n                    \"$ref\": \"#/definitions/ThumbsOptions\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"mediafinder\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"MixinField\": {\n            \"properties\": {\n                \"source\": {\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"mixin\",\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"source\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"Navigation\": {\n            \"properties\": {\n                \"icon\": {\n                    \"type\": \"string\"\n                },\n                \"iconSvg\": {\n                    \"type\": \"string\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"parent\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"NestedFormField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultCreate\": {\n                    \"type\": \"boolean\"\n                },\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"form\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/FieldsRoot\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"showPanel\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"nestedform\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"form\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"NestedItemsField\": {\n            \"properties\": {\n                \"customMessages\": {\n                    \"properties\": {\n                        \"buttonCreate\": {\n                            \"type\": \"string\"\n                        },\n                        \"buttonDelete\": {\n                            \"type\": \"string\"\n                        },\n                        \"buttonDeleteMany\": {\n                            \"type\": \"string\"\n                        },\n                        \"confirmDelete\": {\n                            \"type\": \"string\"\n                        },\n                        \"flashCreate\": {\n                            \"type\": \"string\"\n                        },\n                        \"flashDelete\": {\n                            \"type\": \"string\"\n                        },\n                        \"flashUpdate\": {\n                            \"type\": \"string\"\n                        },\n                        \"titleCreateForm\": {\n                            \"type\": \"string\"\n                        },\n                        \"titleUpdateForm\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    \"type\": \"object\"\n                },\n                \"form\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/FieldsRoot\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"maxDepth\": {\n                    \"type\": \"number\"\n                },\n                \"type\": {\n                    \"const\": \"nesteditems\",\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"form\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"NumberColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"format\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"number\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"NumberField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"max\": {\n                    \"type\": \"number\"\n                },\n                \"min\": {\n                    \"type\": \"number\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"step\": {\n                    \"type\": \"number\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"number\",\n                    \"type\": \"string\"\n                },\n                \"validation\": {\n                    \"items\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"NumberScope\": {\n            \"properties\": {\n                \"conditions\": {\n                    \"properties\": {\n                        \"between\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        },\n                        \"exact\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        },\n                        \"greater\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        },\n                        \"lesser\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        }\n                    },\n                    \"type\": \"object\"\n                },\n                \"dependsOn\": {\n                    \"type\": \"string\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"modelScope\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"number\",\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"label\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"PageFinder\": {\n            \"properties\": {\n                \"context\": {\n                    \"type\": \"string\"\n                },\n                \"replacements\": {\n                    \"additionalProperties\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"object\"\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"PageFinderField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"singleMode\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"pagefinder\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"PartialColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"path\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"partial\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"PartialField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"path\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"partial\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"PasswordField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"password\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"Preset\": {\n            \"properties\": {\n                \"field\": {\n                    \"type\": \"string\"\n                },\n                \"prefixInput\": {\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"enum\": [\n                        \"camel\",\n                        \"exact\",\n                        \"file\",\n                        \"slug\",\n                        \"url\"\n                    ],\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"field\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"RadioListField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"inlineOptions\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"additionalProperties\": false,\n                            \"patternProperties\": {\n                                \"^[0-9]+$\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": [\n                                                \"string\",\n                                                \"number\"\n                                            ]\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"radio\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"RecordFinderField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"conditions\": {\n                    \"type\": \"string\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"descriptionFrom\": {\n                    \"type\": \"string\"\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"keyFrom\": {\n                    \"type\": \"string\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"list\": {\n                    \"anyOf\": [\n                        {\n                            \"maxItems\": 0,\n                            \"minItems\": 0,\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"$ref\": \"#/definitions/ColumnsRoot\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"modelClass\": {\n                    \"type\": \"string\"\n                },\n                \"nameFrom\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"recordsPerPage\": {\n                    \"type\": \"number\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"searchMode\": {\n                    \"enum\": [\n                        \"all\",\n                        \"any\",\n                        \"exact\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"searchScope\": {\n                    \"type\": \"string\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"title\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"recordfinder\",\n                    \"type\": \"string\"\n                },\n                \"useRelation\": {\n                    \"type\": \"boolean\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"list\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"RelationField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"conditions\": {\n                    \"type\": \"string\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"defaultSort\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"emptyOption\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"nameFrom\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"showSearch\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"relation\",\n                    \"type\": \"string\"\n                },\n                \"useController\": {\n                    \"type\": \"boolean\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"RepeaterField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"displayMode\": {\n                    \"enum\": [\n                        \"accordion\",\n                        \"builder\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"form\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/FieldsRoot\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"groupKeyFrom\": {\n                    \"type\": \"string\"\n                },\n                \"groups\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Groups\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"itemsExpanded\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"maxItems\": {\n                    \"type\": \"number\"\n                },\n                \"minItems\": {\n                    \"type\": \"number\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"prompt\": {\n                    \"type\": \"string\"\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"showDuplicate\": {\n                    \"type\": \"boolean\"\n                },\n                \"showReorder\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"titleFrom\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"repeater\",\n                    \"type\": \"string\"\n                },\n                \"useTabs\": {\n                    \"type\": \"boolean\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"form\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"RepeaterGroup\": {\n            \"properties\": {\n                \"description\": {\n                    \"type\": \"string\"\n                },\n                \"fields\": {\n                    \"$ref\": \"#/definitions/Fields\"\n                },\n                \"groupKeyFrom\": {\n                    \"type\": \"string\"\n                },\n                \"icon\": {\n                    \"type\": \"string\"\n                },\n                \"name\": {\n                    \"type\": \"string\"\n                },\n                \"titleFrom\": {\n                    \"type\": \"string\"\n                },\n                \"useTabs\": {\n                    \"type\": \"boolean\"\n                }\n            },\n            \"required\": [\n                \"fields\",\n                \"name\"\n            ],\n            \"type\": \"object\"\n        },\n        \"RichEditorField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"size\": {\n                    \"enum\": [\n                        \"giant\",\n                        \"huge\",\n                        \"large\",\n                        \"small\",\n                        \"tiny\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"toolbarButtons\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"richeditor\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"RulerField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"ruler\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"SectionField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"section\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"SelectableColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"additionalProperties\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"selectable\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"SensitiveField\": {\n            \"properties\": {\n                \"allowCopy\": {\n                    \"type\": \"boolean\"\n                },\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"hiddenPlaceholder\": {\n                    \"type\": \"string\"\n                },\n                \"hideOnTabChange\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"mode\": {\n                    \"enum\": [\n                        \"text\",\n                        \"textarea\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"sensitive\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"SummaryColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"endChars\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"limitChars\": {\n                    \"type\": \"number\"\n                },\n                \"limitWords\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"summary\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"SwitchColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"items\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"switch\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"SwitchField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": \"boolean\"\n                },\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"switch\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"SwitchScope\": {\n            \"properties\": {\n                \"conditions\": {\n                    \"items\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                },\n                \"default\": {\n                    \"enum\": [\n                        0,\n                        1,\n                        false,\n                        true\n                    ]\n                },\n                \"dependsOn\": {\n                    \"type\": \"string\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"switch\",\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"conditions\",\n                \"label\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"TagListField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"customTags\": {\n                    \"type\": \"boolean\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"mode\": {\n                    \"enum\": [\n                        \"array\",\n                        \"relation\",\n                        \"string\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"nameFrom\": {\n                    \"type\": \"string\"\n                },\n                \"options\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"additionalProperties\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"const\": true,\n                            \"type\": \"boolean\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"separator\": {\n                    \"enum\": [\n                        \"comma\",\n                        \"space\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"taglist\",\n                    \"type\": \"string\"\n                },\n                \"useKey\": {\n                    \"type\": \"boolean\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"TailorField\": {\n            \"anyOf\": [\n                {\n                    \"$ref\": \"#/definitions/MixinField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/EntriesField\"\n                },\n                {\n                    \"$ref\": \"#/definitions/NestedItemsField\"\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/CustomField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/TextField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/NumberField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/PasswordField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/EmailField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/TextareaField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/DropdownField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/RadioListField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/BalloonSelectorField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/CheckboxField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/CheckboxListField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/SwitchField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/SectionField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/HintField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/RulerField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/PartialField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/CodeEditorField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/ColorPickerField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/DataTableField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/DatePickerField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/FileUploadField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/MarkdownEditorField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/MediaFinderField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/NestedFormField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/RecordFinderField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/RelationField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/RepeaterField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/RichEditorField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/PageFinderField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/SensitiveField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/TagListField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                },\n                {\n                    \"allOf\": [\n                        {\n                            \"$ref\": \"#/definitions/BoxesField\"\n                        },\n                        {\n                            \"properties\": {\n                                \"column\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/TextColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ImageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SummaryColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateTimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeSinceColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TimeTenseColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SelectableColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/LinkageColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/PartialColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/ColorPickerColumn\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomColumn\"\n                                        },\n                                        {\n                                            \"enum\": [\n                                                false,\n                                                \"invisible\"\n                                            ]\n                                        }\n                                    ]\n                                },\n                                \"scope\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"$ref\": \"#/definitions/CheckboxScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/SwitchScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/TextScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/NumberScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DropdownScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/GroupScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/DateScope\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/definitions/CustomScope\"\n                                        },\n                                        {\n                                            \"const\": false,\n                                            \"type\": \"boolean\"\n                                        }\n                                    ]\n                                },\n                                \"translatable\": {\n                                    \"type\": \"boolean\"\n                                },\n                                \"validation\": {\n                                    \"anyOf\": [\n                                        {\n                                            \"items\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                        },\n                                        {\n                                            \"type\": \"string\"\n                                        }\n                                    ]\n                                }\n                            },\n                            \"type\": \"object\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"TextColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"text\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"TextField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": \"string\"\n                },\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"text\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"TextScope\": {\n            \"properties\": {\n                \"conditions\": {\n                    \"properties\": {\n                        \"contains\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        },\n                        \"exact\": {\n                            \"type\": [\n                                \"string\",\n                                \"boolean\"\n                            ]\n                        }\n                    },\n                    \"type\": \"object\"\n                },\n                \"dependsOn\": {\n                    \"type\": \"string\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"modelScope\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"scope\": {\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"text\",\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"label\",\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"TextareaField\": {\n            \"properties\": {\n                \"attributes\": {\n                    \"additionalProperties\": true,\n                    \"properties\": {},\n                    \"type\": \"object\"\n                },\n                \"autoFocus\": {\n                    \"type\": \"boolean\"\n                },\n                \"changeHandler\": {\n                    \"type\": \"string\"\n                },\n                \"comment\": {\n                    \"type\": \"string\"\n                },\n                \"commentAbove\": {\n                    \"type\": \"string\"\n                },\n                \"commentHtml\": {\n                    \"type\": \"boolean\"\n                },\n                \"containerAttributes\": {\n                    \"anyOf\": [\n                        {\n                            \"additionalProperties\": true,\n                            \"properties\": {},\n                            \"type\": \"object\"\n                        },\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        }\n                    ]\n                },\n                \"context\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {},\n                \"defaultFrom\": {\n                    \"type\": \"string\"\n                },\n                \"dependsOn\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"disabled\": {\n                    \"type\": \"boolean\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"order\": {\n                    \"type\": \"number\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"placeholder\": {\n                    \"type\": \"string\"\n                },\n                \"preset\": {\n                    \"anyOf\": [\n                        {\n                            \"$ref\": \"#/definitions/Preset\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"readOnly\": {\n                    \"type\": \"boolean\"\n                },\n                \"required\": {\n                    \"type\": \"boolean\"\n                },\n                \"size\": {\n                    \"enum\": [\n                        \"giant\",\n                        \"huge\",\n                        \"large\",\n                        \"small\",\n                        \"tiny\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"span\": {\n                    \"enum\": [\n                        \"adaptive\",\n                        \"auto\",\n                        \"full\",\n                        \"left\",\n                        \"right\",\n                        \"row\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"spanClass\": {\n                    \"type\": \"string\"\n                },\n                \"stretch\": {\n                    \"type\": \"boolean\"\n                },\n                \"tab\": {\n                    \"type\": \"string\"\n                },\n                \"trigger\": {\n                    \"$ref\": \"#/definitions/Trigger\"\n                },\n                \"type\": {\n                    \"const\": \"textarea\",\n                    \"type\": \"string\"\n                },\n                \"value\": {},\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"ThumbsOptions\": {\n            \"properties\": {\n                \"mode\": {\n                    \"enum\": [\n                        \"auto\",\n                        \"crop\",\n                        \"exact\",\n                        \"fit\",\n                        \"landscape\",\n                        \"portrait\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"offset\": {\n                    \"items\": {\n                        \"type\": \"number\"\n                    },\n                    \"type\": \"array\"\n                },\n                \"quality\": {\n                    \"type\": \"number\"\n                },\n                \"sharpen\": {\n                    \"type\": \"number\"\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"TimeColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"time\",\n                    \"type\": \"string\"\n                },\n                \"useTimezone\": {\n                    \"type\": \"boolean\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"TimeSinceColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"timesince\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"TimeTenseColumn\": {\n            \"properties\": {\n                \"align\": {\n                    \"enum\": [\n                        \"center\",\n                        \"left\",\n                        \"right\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"clickable\": {\n                    \"type\": \"boolean\"\n                },\n                \"cssClass\": {\n                    \"type\": \"string\"\n                },\n                \"default\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                },\n                \"displayFrom\": {\n                    \"type\": \"string\"\n                },\n                \"headCssClass\": {\n                    \"type\": \"string\"\n                },\n                \"hidden\": {\n                    \"type\": \"boolean\"\n                },\n                \"invisible\": {\n                    \"type\": \"boolean\"\n                },\n                \"label\": {\n                    \"type\": \"string\"\n                },\n                \"permissions\": {\n                    \"anyOf\": [\n                        {\n                            \"items\": {\n                                \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                },\n                \"relation\": {\n                    \"type\": \"string\"\n                },\n                \"relationCount\": {\n                    \"type\": \"boolean\"\n                },\n                \"searchable\": {\n                    \"type\": \"boolean\"\n                },\n                \"select\": {\n                    \"type\": \"string\"\n                },\n                \"shortLabel\": {\n                    \"type\": \"string\"\n                },\n                \"sortable\": {\n                    \"type\": \"boolean\"\n                },\n                \"sortableDefault\": {\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ],\n                    \"type\": \"string\"\n                },\n                \"type\": {\n                    \"const\": \"timetense\",\n                    \"type\": \"string\"\n                },\n                \"valueFrom\": {\n                    \"type\": \"string\"\n                },\n                \"width\": {\n                    \"type\": [\n                        \"string\",\n                        \"number\"\n                    ]\n                }\n            },\n            \"required\": [\n                \"type\"\n            ],\n            \"type\": \"object\"\n        },\n        \"Trigger\": {\n            \"properties\": {\n                \"action\": {\n                    \"type\": \"string\"\n                },\n                \"condition\": {\n                    \"type\": \"string\"\n                },\n                \"field\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"required\": [\n                \"action\",\n                \"condition\",\n                \"field\"\n            ],\n            \"type\": \"object\"\n        }\n    },\n    \"properties\": {\n        \"columns\": {\n            \"additionalProperties\": {\n                \"$ref\": \"#/definitions/AnyColumn\"\n            },\n            \"type\": \"object\"\n        },\n        \"customMessages\": {\n            \"additionalProperties\": {\n                \"type\": \"string\"\n            },\n            \"type\": \"object\"\n        },\n        \"drafts\": {\n            \"type\": \"boolean\"\n        },\n        \"fields\": {\n            \"additionalProperties\": {\n                \"$ref\": \"#/definitions/TailorField\"\n            },\n            \"type\": \"object\"\n        },\n        \"groups\": {\n            \"additionalProperties\": {\n                \"properties\": {\n                    \"fields\": {\n                        \"additionalProperties\": {\n                            \"$ref\": \"#/definitions/TailorField\"\n                        },\n                        \"type\": \"object\"\n                    },\n                    \"name\": {\n                        \"type\": \"string\"\n                    }\n                },\n                \"required\": [\n                    \"fields\",\n                    \"name\"\n                ],\n                \"type\": \"object\"\n            },\n            \"type\": \"object\"\n        },\n        \"handle\": {\n            \"type\": \"string\"\n        },\n        \"multisite\": {\n            \"enum\": [\n                \"all\",\n                false,\n                \"locale\",\n                \"sync\",\n                true\n            ]\n        },\n        \"name\": {\n            \"type\": \"string\"\n        },\n        \"navigation\": {\n            \"anyOf\": [\n                {\n                    \"$ref\": \"#/definitions/Navigation\"\n                },\n                {\n                    \"const\": false,\n                    \"type\": \"boolean\"\n                }\n            ]\n        },\n        \"pagefinder\": {\n            \"anyOf\": [\n                {\n                    \"$ref\": \"#/definitions/PageFinder\"\n                },\n                {\n                    \"enum\": [\n                        false,\n                        \"item\",\n                        \"list\",\n                        true\n                    ]\n                }\n            ]\n        },\n        \"parentNavigation\": {\n            \"anyOf\": [\n                {\n                    \"$ref\": \"#/definitions/Navigation\"\n                },\n                {\n                    \"const\": false,\n                    \"type\": \"boolean\"\n                }\n            ]\n        },\n        \"scopes\": {\n            \"additionalProperties\": {\n                \"$ref\": \"#/definitions/AnyScope\"\n            },\n            \"type\": \"object\"\n        },\n        \"showExport\": {\n            \"type\": \"boolean\"\n        },\n        \"showImport\": {\n            \"type\": \"boolean\"\n        },\n        \"structure\": {\n            \"$ref\": \"#/definitions/ListStructure\"\n        },\n        \"type\": {\n            \"enum\": [\n                \"entry\",\n                \"global\",\n                \"mixin\",\n                \"single\",\n                \"stream\",\n                \"structure\"\n            ],\n            \"type\": \"string\"\n        },\n        \"uuid\": {\n            \"type\": \"string\"\n        },\n        \"validation\": {\n            \"properties\": {\n                \"attributeNames\": {\n                    \"additionalProperties\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"object\"\n                },\n                \"customMessages\": {\n                    \"additionalProperties\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"object\"\n                },\n                \"rules\": {\n                    \"additionalProperties\": {\n                        \"type\": \"string\"\n                    },\n                    \"type\": \"object\"\n                }\n            },\n            \"required\": [\n                \"attributeNames\",\n                \"customMessages\",\n                \"rules\"\n            ],\n            \"type\": \"object\"\n        }\n    },\n    \"required\": [\n        \"handle\",\n        \"name\"\n    ],\n    \"type\": \"object\"\n}\n"
  },
  {
    "path": "modules/tailor/assets/js/preview-tracker.js",
    "content": "import { modalUtils } from '../../../backend/vuecomponents/modal/assets/js/classes/index.js';\n\nexport class PreviewTracker {\n    scrollTop;\n    scrollLeft;\n    scrollLock;\n    scrollLockBuffer;\n    window;\n    token;\n    url;\n\n    static newTracker() {\n        return new this;\n    }\n\n    openPreview(token, url) {\n        this.token = token;\n        this.url = url;\n        this.window = window.open(this.makeUniqueUrl());\n\n        // Fallback in case window.open was blocked\n        setTimeout(() => {\n            if (!this.window) {\n                modalUtils.showBasic(\n                    $.oc.lang.get('markdowneditor.preview'),\n                    `<div class=\"modal-footer pt-3\">\n                        <a\n                            href=\"${this.makeUniqueUrl()}\"\n                            target=\"_blank\"\n                            onclick=\"this.closest('.modal').querySelector('.btn-close').click()\"\n                            data-default-focus\n                            class=\"btn btn-primary btn-default-action\">${$.oc.lang.get('eventlog.editor.open')}</button>\n                    </div>`\n                );\n            }\n        }, 500);\n    }\n\n    refreshPreview(focus) {\n        this.startScrollLock();\n\n        // Register load event using some hacky logic that works\n        // for unknown reasons. Detect unload, wait 1 tick, detect load\n        this.window.addEventListener(\n            'unload',\n            () => setTimeout(\n                () => this.window.addEventListener(\n                    'load',\n                    () => this.stopScrollLock(),\n                    { once: true }),\n                0),\n            { once: true }\n        );\n\n        this.window.location.assign(this.makeUniqueUrl());\n\n        if (focus) {\n            this.window.focus();\n        }\n    }\n\n    startScrollLock() {\n        this.scrollLeft = this.window.scrollX;\n        this.scrollTop = this.window.scrollY;\n        this.scrollLock = setInterval(() => {\n            this.window.scrollTo({\n                left: this.scrollLeft,\n                top: this.scrollTop,\n                behavior: 'instant'\n            });\n        }, 1);\n\n        // No scroll if page takes longer than 3s\n        this.scrollLockBuffer = setTimeout(() => {\n            clearInterval(this.scrollLock);\n        }, 3000);\n    }\n\n    stopScrollLock() {\n        clearInterval(this.scrollLock);\n        clearInterval(this.scrollLockBuffer);\n    }\n\n    getToken() {\n        return this.token;\n    }\n\n    isPreviewAvailable() {\n        return this.window && !this.window.closed;\n    }\n\n    makeUniqueUrl() {\n        return this.url + '&_preview_nonce=' + this.createNonce();\n    }\n\n    createNonce() {\n        return (Math.random() + '').replace('.', '');\n    }\n}\n\nexport default PreviewTracker;\n"
  },
  {
    "path": "modules/tailor/assets/js/tailor.editor.extension.documentcomponent.base.js",
    "content": "import { DocumentComponentBase } from '../../../editor/assets/js/editor.extension.documentcomponent.base.js';\n\nexport const TailorDocumentComponentBase = {\n    extends: DocumentComponentBase,\n    data: function () {\n        return {\n            savingDocument: false,\n            documentSavedMessage: this.trans('tailor::lang.blueprint.saved'),\n            documentReloadedMessage: this.trans('tailor::lang.blueprint.reloaded'),\n            documentDeletedMessage: this.trans('tailor::lang.blueprint.deleted')\n        };\n    },\n\n    computed: {\n    },\n\n    methods: {\n        monacoLoaded: function monacoLoaded() {\n            // Overwrite this method in subclasses\n        },\n\n        getSaveDocumentData: function getSaveDocumentData(inspectorDocumentData) {\n            const documentData = inspectorDocumentData ? inspectorDocumentData : this.documentData;\n\n            const data = $.oc.vueUtils.getCleanObject(documentData);\n            const result = {\n            };\n\n            // Copy root properties\n            //\n            Object.keys(data).forEach((property) => {\n                    result[property] = data[property];\n            });\n\n            return result;\n        },\n\n\n        getDocumentSavedMessage: function getDocumentSavedMessage(responseData) {\n            return this.documentSavedMessage;\n        },\n\n        onParentTabSelected: function onParentTabSelected() {\n            if (this.$refs.editor) {\n                this.$nextTick(() => this.$refs.editor.layout());\n            }\n        },\n\n        onToolbarCommand: function onToolbarCommand(command, isHotkey) {\n            this.handleBasicDocumentCommands(command, isHotkey);\n        }\n    }\n};\n"
  },
  {
    "path": "modules/tailor/assets/js/tailor.editor.extension.documentcontroller.blueprint.js",
    "content": "import { DocumentControllerBase } from '../../../editor/assets/js/editor.extension.documentcontroller.base.js';\nimport { EditorCommand } from '../../../editor/assets/js/editor.command.js';\nimport { DocumentUri } from '../../../editor/assets/js/editor.documenturi.js';\nimport { FileSystemFunctions } from '../../../editor/assets/js/editor.extension.filesystemfunctions.js';\n\nexport class DocumentControllerBlueprint extends DocumentControllerBase {\n    get documentType() {\n        return 'tailor-blueprint';\n    }\n\n    get vueEditorComponentName() {\n        return 'tailor-editor-component-blueprint-editor';\n    }\n\n    beforeDocumentOpen(commandObj, nodeData) {\n        if (!nodeData.userData) {\n            return false;\n        }\n\n        if (nodeData.userData.isFolder) {\n            return false;\n        }\n\n        if (nodeData.userData.isEditable) {\n            return true;\n        }\n\n        return false;\n    }\n\n    initListeners() {\n        // Controller events\n        this.on(`tailor:${this.documentType}-create-directory`, this.onCreateDirectory);\n        this.on(`tailor:${this.documentType}-delete`, this.onDeleteBlueprintOrDirectory);\n        this.on(`tailor:${this.documentType}-rename`, this.onRenameBlueprintOrDirectory);\n        this.on(`tailor:${this.documentType}-upload`, this.onUploadDocument);\n\n        // Navigator events\n        this.on('tailor:navigator-context-menu-display', this.getNavigatorContextMenuItems);\n        this.on('tailor:navigator-external-drop', this.onNavigatorExternalDrop);\n        this.on('tailor:navigator-node-moved', this.onNavigatorNodeMoved);\n    }\n\n    getNavigatorContextMenuItems(commandObj, payload) {\n        const uri = DocumentUri.parse(payload.nodeData.uniqueKey);\n        const parentPath = payload.nodeData.userData.path;\n\n        // TODO: handle tailor:root item for the Tailor section menus.\n\n        if (uri.documentType !== this.documentType) {\n            return;\n        }\n\n        const blueprintTypes = ['entry', 'single', 'stream', 'structure', 'mixin', 'global'];\n        const blueprintItems = [];\n\n        blueprintTypes.forEach(type => {\n            blueprintItems.push({\n                label: this.trans('tailor::lang.blueprint.' + type),\n                type: 'text',\n                command: new EditorCommand('tailor:create-document@' + this.documentType, {\n                    path: parentPath,\n                    type\n                })\n            });\n        });\n\n        if (payload.nodeData.userData.isFolder || payload.nodeData.userData.topLevel) {\n            payload.menuItems.push({\n                type: 'text',\n                icon: 'icon-create',\n                items: blueprintItems,\n                label: this.trans('tailor::lang.blueprint.new')\n            });\n\n            payload.menuItems.push({\n                type: 'text',\n                icon: 'icon-upload',\n                command: new EditorCommand(`tailor:${this.documentType}-upload@${this.documentType}`, {\n                    path: parentPath\n                }),\n                label: this.trans('tailor::lang.blueprint.upload_files')\n            });\n\n            payload.menuItems.push({\n                type: 'text',\n                icon: 'icon-folder',\n                command: `tailor:${this.documentType}-create-directory@${parentPath}`,\n                label: this.trans('tailor::lang.blueprint.create_directory')\n            });\n\n            if (payload.nodeData.userData.topLevel) {\n                return;\n            }\n\n            payload.menuItems.push({\n                type: 'separator'\n            });\n        }\n\n        payload.menuItems.push({\n            type: 'text',\n            icon: 'icon-terminal',\n            command: new EditorCommand(`tailor:${this.documentType}-rename@${parentPath}`, {\n                fileName: payload.nodeData.userData.fileName\n            }),\n            label: this.trans('tailor::lang.blueprint.rename')\n        });\n\n        payload.menuItems.push({\n            type: 'text',\n            icon: 'icon-delete',\n            command: new EditorCommand(`tailor:${this.documentType}-delete@${parentPath}`, {\n                itemsDetails: payload.itemsDetails\n            }),\n            label: this.trans('tailor::lang.blueprint.delete')\n        });\n    }\n\n    preprocessNewDocumentData(newDocumentData, commandObj) {\n        if (!commandObj.userData.type) {\n            return;\n        }\n\n        const blueprintTemplates = this.parentExtension.state.customData.blueprintTemplates;\n        const blueprintType = commandObj.userData.type;\n        if (!blueprintTemplates[blueprintType]) {\n            return;\n        }\n\n        newDocumentData.document.content = blueprintTemplates[blueprintType];\n    }\n\n    onBeforeDocumentCreated(commandObj, payload, documentData) {\n        let parentPath = '';\n        if (commandObj.userData && commandObj.userData.path) {\n            parentPath = commandObj.userData.path;\n        }\n\n        if (parentPath.length > 0 && parentPath !== '/') {\n            documentData.document.fileName = parentPath + '/' + documentData.document.fileName;\n        }\n    }\n\n    onCreateDirectory(cmd, payload) {\n        const fs = new FileSystemFunctions(this);\n        fs.createDirectoryFromNavigatorMenu('onBlueprintCreateDirectory', cmd, payload, {\n            documentType: this.documentType,\n        });\n    }\n\n    async onDeleteBlueprintOrDirectory(cmd, payload) {\n        const fs = new FileSystemFunctions(this);\n        await fs.deleteFileOrDirectoryFromNavigatorMenu('onBlueprintDelete', cmd, payload, {\n            documentType: this.documentType,\n        });\n    }\n\n    onRenameBlueprintOrDirectory(cmd, payload) {\n        const fs = new FileSystemFunctions(this);\n        fs.renameFileOrDirectoryFromNavigatorMenu('onBlueprintRename', cmd, payload, {\n            documentType: this.documentType,\n        });\n    }\n\n    onUploadDocument(cmd) {\n        const fs = new FileSystemFunctions(this);\n        fs.uploadDocument(['.yaml'], 'onBlueprintUpload', cmd, {\n            documentType: this.documentType\n        });\n    }\n\n    onNavigatorExternalDrop(cmd) {\n        const uri = DocumentUri.parse(cmd.userData.toUniqueKey);\n\n        if (uri.documentType !== this.documentType) {\n            return;\n        }\n\n        const fs = new FileSystemFunctions(this);\n        fs.handleNavigatorExternalDrop('onBlueprintUpload', cmd, {\n            documentType: uri.documentType\n        });\n    }\n\n    async onNavigatorNodeMoved(cmd) {\n        const uri = DocumentUri.parse(cmd.userData.movedToNodeData.uniqueKey);\n\n        if (uri.documentType !== this.documentType) {\n            return;\n        }\n\n        const fs = new FileSystemFunctions(this);\n        await fs.handleNavigatorNodeMove('onBlueprintMove', cmd, {\n            documentType: uri.documentType\n        });\n    }\n}\n"
  },
  {
    "path": "modules/tailor/assets/js/tailor.editor.extension.documentcontroller.theme-blueprint.js",
    "content": "import { DocumentControllerBlueprint } from './tailor.editor.extension.documentcontroller.blueprint.js';\n\nexport class DocumentControllerThemeBlueprint extends DocumentControllerBlueprint {\n    get documentType() {\n        return 'tailor-theme-blueprint';\n    }\n}\n"
  },
  {
    "path": "modules/tailor/assets/js/tailor.editor.extension.js",
    "content": "import { ExtensionBase } from '../../../editor/assets/js/editor.extension.base.js';\nimport { DocumentControllerBlueprint } from './tailor.editor.extension.documentcontroller.blueprint.js';\nimport { DocumentControllerThemeBlueprint } from './tailor.editor.extension.documentcontroller.theme-blueprint.js';\n\nclass TailorEditorExtension extends ExtensionBase {\n    constructor(namespace) {\n        super(namespace);\n    }\n\n    listDocumentControllerClasses() {\n        return [\n            DocumentControllerBlueprint,\n            DocumentControllerThemeBlueprint,\n        ];\n    }\n\n    removeFileExtension(fileName) {\n        return fileName.split('.').slice(0, -1).join('.');\n    }\n\n    onCommand(commandString, payload) {\n        super.onCommand(commandString, payload);\n\n        if (commandString === 'tailor:refresh-navigator') {\n            this.editorStore.refreshExtensionNavigatorNodes(this.editorNamespace).then(() => {});\n\n            return;\n        }\n    }\n}\n\n// Register with the editor extension registry\noc.editorExtensions = oc.editorExtensions || {};\noc.editorExtensions['tailor'] = TailorEditorExtension;\n\nexport { TailorEditorExtension };\n"
  },
  {
    "path": "modules/tailor/assets/js/vue-entry-document.js",
    "content": "import { VueControlBase } from '../../../backend/assets/js/vueapp/vue-control-base.js';\nimport { PreviewTracker } from './preview-tracker.js';\n\nclass VueEntryDocument extends VueControlBase {\n    init() {\n        this.registerState({\n            showDraftNotes: true,\n            toolbarDisabled: false,\n            toolbarExtensionPoint: [],\n            toolbarExtraButtons: [],\n            toolbarElements: []\n        });\n\n        this.registerMethod('onCommand', this.onCommand);\n    }\n\n    connect() {\n        this.initState();\n        this.initListeners();\n        this.refreshToolbarExtraButtons();\n    }\n\n    disconnect() {\n        this.destroyListeners();\n        this.previewTracker = null;\n    }\n\n    initListeners() {\n        // Listen for AJAX\n        $(window).on('oc.updateUi', this.proxy(this.refreshToolbars));\n\n        // Extra check to fix a race condition\n        $(window).one('shown.bs.tab', this.proxy(this.refreshToolbars));\n\n        // Wait for hot controls\n        setTimeout(() => this.refreshToolbars(), 0);\n\n        this.state.eventBus.on('documentloadingstart', () => {\n            this.state.processing = true;\n        });\n\n        this.state.eventBus.on('documentloadingend', () => {\n            this.state.processing = false;\n        });\n    }\n\n    destroyListeners() {\n        $(window).off('oc.updateUi', this.proxy(this.refreshToolbars));\n        $(window).off('shown.bs.tab', this.proxy(this.refreshToolbars));\n    }\n\n    refreshToolbars() {\n        this.state.toolbarExtensionPoint.splice(0);\n        this.state.eventBus.emit('extendapptoolbar');\n    }\n\n    refreshToolbarExtraButtons() {\n        this.state.toolbarExtraButtons.splice(0);\n\n        if (this.isDraftable() && this.state.initial.isDraft && !this.state.initial.isFirstDraft) {\n            this.state.toolbarExtraButtons.push({\n                type: 'button',\n                icon: 'icon-notes-edit',\n                label: oc.lang.get('draft_notes'),\n                pressed: this.state.showDraftNotes,\n                command: 'togglenotes'\n            });\n        }\n    }\n\n    isDraftable() {\n        return this.state.initial.draftable;\n    }\n\n    loadShowDraftNotes() {\n        if (!this.isDraftable()) {\n            return false;\n        }\n\n        let lastDraftId = localStorage.getItem('tailor-display-notes-last-draft-id');\n        if (parseInt(lastDraftId) < this.state.initial.currentDraftId) {\n            return true;\n        }\n\n\n        let item = localStorage.getItem('tailor-draft-display-notes');\n        if (item === null) {\n            return true;\n        }\n\n        return parseInt(item) == 1;\n    }\n\n    saveShowDraftNotes() {\n        localStorage.setItem('tailor-draft-display-notes', this.state.showDraftNotes ? 1 : 0);\n        localStorage.setItem('tailor-display-notes-last-draft-id', this.state.initial.currentDraftId);\n    }\n\n    initState() {\n        if (!this.isDraftable()) {\n            this.state.showDraftNotes = false;\n        }\n\n        this.state.showDraftNotesUI = this.state.initial.isDraft && !this.state.initial.isFirstDraft && this.isDraftable();\n        if (this.state.showDraftNotesUI) {\n            this.state.showDraftNotes = this.loadShowDraftNotes();\n        }\n\n        // Build Toolbar\n        this.state.toolbarElements = [];\n\n        // Save\n        if (this.state.initial.canRestore) {\n                this.state.toolbarElements.push({\n                    type: 'button',\n                    icon: 'icon-refresh',\n                    label: oc.lang.get('form_restore'),\n                    tooltip: oc.lang.get('form_restore'),\n                    hotkey: 'ctrl+enter, cmd+enter',\n                    tooltipHotkey: '⌃S, ⌘S',\n                    command: 'form:onRestore'\n                });\n        }\n        else {\n            this.state.toolbarElements.push(this.makeSaveButton());\n\n            // Save and Close\n            if (!this.state.initial.isSingular && (this.state.initial.canPublish || this.state.initial.isDraft)) {\n                this.state.toolbarElements.push({\n                    type: 'button',\n                    icon: 'icon-keyboard-return',\n                    label: oc.lang.get('form_save_close'),\n                    tooltip: oc.lang.get('form_save_close'),\n                    hotkey: 'ctrl+enter, cmd+enter',\n                    tooltipHotkey: '⌃S, ⌘S',\n                    command: this.state.initial.isDraft ? 'form:onCommitDraft' : 'form:onSave',\n                    customData: {\n                        request: {\n                            browserRedirectBack: true,\n                            data: { close: 1 }\n                        }\n                    }\n                });\n            }\n        }\n\n        // Extras\n        this.state.toolbarElements.push(this.state.toolbarExtraButtons);\n\n        // Delete\n        if (this.state.initial.canDelete && !this.state.initial.isCreateAction) {\n            this.state.toolbarElements.push(this.makeDeleteButton());\n        }\n\n        // Preview\n        if (this.state.initial.hasPreviewPage && !this.state.initial.isCreateAction) {\n            this.state.toolbarElements.push({\n                type: 'button',\n                icon: 'icon-location-target',\n                command: 'onPreview',\n                label: oc.lang.get('preview')\n            });\n        }\n\n        // Extensions\n        this.state.toolbarElements.push(this.state.toolbarExtensionPoint);\n    }\n\n    makeSaveButton() {\n        let saveButtonCommand = 'form:onSave';\n        let saveButtonLabel = oc.lang.get('form_save');\n        let showBadge = false;\n\n        if (this.isDraftable() && this.state.initial.isDraft) {\n            saveButtonCommand = 'form:onCommitDraft';\n            saveButtonLabel = oc.lang.get('save_draft');\n        }\n\n        // Notify user about pending drafts\n        if (this.state.initial.drafts.length && this.state.initial.canPublish) {\n            showBadge = true;\n        }\n\n        // Only allow non-publishers to create drafts\n        if (!this.state.initial.canPublish && !this.state.initial.isDraft) {\n            saveButtonCommand = 'onCreateDraft';\n            saveButtonLabel = oc.lang.get('create_draft');\n        }\n\n        return {\n            type: 'button',\n            icon: 'icon-save-cloud',\n            label: saveButtonLabel,\n            tooltip: saveButtonLabel,\n            hotkey: 'ctrl+s, cmd+s',\n            tooltipHotkey: '⌃S, ⌘S',\n            command: saveButtonCommand,\n            showBadge: showBadge,\n            menuitems: this.makeSaveMenuItems(),\n            customData: {\n                request: {\n                    data: { 'redirect': 0 }\n                }\n            }\n        }\n    }\n\n    makeSaveMenuItems() {\n        if (!this.isDraftable() || !this.state.initial.canPublish) {\n            return null;\n        }\n\n        let result = [];\n\n        if (this.state.initial.isDraft) {\n            result = [\n                {\n                    type: 'text',\n                    label: oc.lang.get('save_apply_draft'),\n                    command: 'form:onPublishDraft'\n                }\n            ];\n        }\n\n        if (this.state.initial.isDraft && !this.state.initial.isFirstDraft) {\n            result.push({\n                type: 'text',\n                href: this.state.initial.primaryRecordUrl,\n                label: oc.lang.get('edit_primary_record')\n            });\n        }\n\n        if (!this.state.initial.isFirstDraft) {\n            if (result.length > 0) {\n                result.push({ type: 'separator' });\n            }\n            result.push({\n                type: 'text',\n                label: oc.lang.get('create_draft'),\n                command: 'onCreateDraft'\n            });\n        }\n\n        if (this.state.initial.drafts.length) {\n            const draftItems = [];\n            const draftItemType = this.state.initial.isDraft && !this.state.initial.isFirstDraft ? 'radiobutton' : 'text';\n\n            this.state.initial.drafts.forEach(draft => {\n                draftItems.push({\n                    type: draftItemType,\n                    href: this.state.initial.primaryRecordUrl + '?draft=' + draft.id,\n                    label: draft.primary_attrs.name,\n                    checked: this.state.initial.currentDraftId == draft.id,\n                    disabled: this.state.initial.currentDraftId == draft.id\n                })\n            });\n\n            result.push(\n                {\n                    type: 'text',\n                    label: oc.lang.get('select_draft'),\n                    items: draftItems\n                }\n            );\n        }\n\n        return result;\n    }\n\n    makeDeleteButton() {\n        let deleteButtonLabel = oc.lang.get('form_delete');\n        let deleteButtonCmd = 'form:onDelete';\n        let deleteButtonConfirm = oc.lang.get('delete_entry_confirm');\n        if (this.state.initial.isDraft) {\n            deleteButtonLabel = oc.lang.get('discard_draft');\n            deleteButtonCmd = this.state.initial.isFirstDraft\n                ? 'form:onForceDelete'\n                : 'form:onDiscardDraft';\n\n            deleteButtonConfirm = oc.lang.get('discard_draft_confirm');\n        }\n        else if (this.state.initial.isDeleted) {\n            deleteButtonLabel = oc.lang.get('force_delete');\n            deleteButtonCmd = 'form:onForceDelete';\n            deleteButtonConfirm = oc.lang.get('force_delete_confirm');\n        }\n\n        return {\n            type: 'button',\n            icon: 'icon-delete',\n            command: deleteButtonCmd,\n            hotkey: 'shift+option+d',\n            label: deleteButtonLabel,\n            fixedRight: true,\n            tooltip: deleteButtonLabel,\n            tooltipHotkey: '⇧⌥D',\n            customData: {\n                confirm: deleteButtonConfirm\n            }\n        };\n    }\n\n    handleFormSaved(data) {\n        this.containers.vueEntryHeaderControls.$refs.publishingControls.updateSavedState();\n        $('#tailor-form').trigger('unchange.oc.changeMonitor');\n\n        this.state.initial.statusCode = data.result.statusCode;\n        this.state.initial.drafts = data.result.drafts;\n        this.state.initial.fullSlug = data.result.fullSlug;\n\n        this.state.toolbarElements[0] = this.makeSaveButton();\n\n        if (this.previewTracker && this.previewTracker.isPreviewAvailable()) {\n            this.previewTracker.refreshPreview();\n        }\n    }\n\n    async onCommand(command, isHotkey, ev, targetElement, customData, throwOnError) {\n        if (command === 'togglenotes') {\n            this.state.showDraftNotes = !this.state.showDraftNotes;\n            this.saveShowDraftNotes();\n            this.refreshToolbarExtraButtons();\n            return;\n        }\n\n        if (command === 'onCreateDraft') {\n            this.onCreateDraft(command, isHotkey, ev, targetElement, customData, throwOnError);\n            return;\n        }\n\n        if (command === 'onPreview') {\n            this.onPreview(targetElement);\n            return;\n        }\n\n        if (!this.app.isFormCommand(command)) {\n            return;\n        }\n\n        this.state.toolbarDisabled = true;\n        $('#tailor-form').trigger('pauseUnloadListener');\n\n        try {\n            let data = await this.app.onCommand(command, isHotkey, ev, targetElement, customData);\n            this.state.toolbarDisabled = false;\n\n            if (command == 'form:onSave' || command == 'form:onCommitDraft') {\n                this.handleFormSaved(data);\n            }\n\n            $('#tailor-form').trigger('resumeUnloadListener');\n        }\n        catch (error) {\n            $('#tailor-form').trigger('resumeUnloadListener');\n            this.state.toolbarDisabled = false;\n            if (throwOnError) {\n                throw error;\n            }\n        }\n    }\n\n    async onPreview(targetElement) {\n        this.state.processing = true;\n        this.state.toolbarDisabled = true;\n\n        if (!this.previewTracker) {\n            this.previewTracker = PreviewTracker.newTracker();\n        }\n\n        try {\n            if (this.previewTracker.isPreviewAvailable()) {\n                await oc.request(targetElement, 'onPreview', {\n                    data: { preview_token: this.previewTracker.getToken() }\n                });\n                this.previewTracker.refreshPreview(true);\n            }\n            else {\n                const data = await oc.request(targetElement, 'onPreview');\n                this.previewTracker.openPreview(data.token, data.url);\n            }\n        }\n        catch (error) {}\n\n        this.state.processing = false;\n        this.state.toolbarDisabled = false;\n    }\n\n    async onCreateDraft(command, isHotkey, ev, targetElement, customData, throwOnError) {\n        if (!$('#tailor-form').hasClass('oc-data-changed')) {\n            this.onCommand('form:onCreateDraft', isHotkey, ev, targetElement, customData, throwOnError);\n            return;\n        }\n\n        try {\n            await oc.confirmPromise(oc.lang.get('confirm_create_draft'));\n\n            this.onCommand('form:onCreateDraft', isHotkey, ev, targetElement, customData, throwOnError);\n        }\n        catch (error) {}\n    }\n}\n\noc.registerControl('vue-entry-document', VueEntryDocument);\n\nexport { VueEntryDocument };\nexport default VueEntryDocument;\n"
  },
  {
    "path": "modules/tailor/assets/js/vue-entry-header-controls.js",
    "content": "import { VueControlBase } from '../../../backend/assets/js/vueapp/vue-control-base.js';\nimport { modalUtils } from '../../../backend/vuecomponents/modal/assets/js/classes/index.js';\n\nclass VueEntryHeaderControls extends VueControlBase {\n    init() {\n        this.registerState({\n            publishingStateChanged: false,\n            entryTypeOptions: []\n        });\n\n        this.registerMethod('onSetEntryType', this.onSetEntryType);\n        this.registerMethod('onPublishDraftClick', this.onPublishDraftClick);\n        this.registerMethod('onRestoreRecordClick', this.onRestoreRecordClick);\n        this.registerMethod('onPublishingControlsBtnClick', this.onPublishingControlsBtnClick);\n        this.registerMethod('onPublishingStateChanged', this.onPublishingStateChanged);\n    }\n\n    connect() {\n        this.state.entryTypeOptions = [];\n        this.state.publishingStateChanged = false;\n        this.makeEntryTypeOptions();\n    }\n\n    disconnect() {\n    }\n\n    makeEntryTypeOptions() {\n        if (!this.state.initial.entryTypeOptions) {\n            return;\n        }\n\n        const options = this.state.initial.entryTypeOptions;\n        const keys = Object.keys(options);\n\n        this.state.entryTypeOptions = [];\n        keys.forEach(key => {\n            this.state.entryTypeOptions.push({\n                type: 'radiobutton',\n                command: key,\n                checked: this.state.initial.contentGroup == key,\n                label: options[key]\n            });\n        })\n    }\n\n    async onCommand(command, isHotkey, ev, targetElement, customData, throwOnError) {\n        var registeredMethod = this.app.getMethod('onCommand');\n        if (registeredMethod) {\n            return registeredMethod(command, isHotkey, ev, targetElement, customData, throwOnError);\n        }\n\n        return this.app.onCommand(command, isHotkey, ev, targetElement);\n    }\n\n    async onSetEntryType(entryType, isHotkey, ev, targetElement) {\n        this.state.processing = true;\n        this.state.toolbarDisabled = true;\n\n        try {\n            await oc.request(targetElement, 'onChangeEntryType', {\n                data: {\n                    EntryRecord: {\n                        content_group: entryType\n                    }\n                }\n            });\n\n            this.state.initial.contentGroup = entryType;\n            this.makeEntryTypeOptions();\n        }\n        catch (response) {\n            modalUtils.showAlert(oc.lang.get('form_error'), response.responseText);\n        }\n\n        this.state.toolbarDisabled = false;\n        this.state.processing = false;\n    }\n\n    async onPublishDraftClick(ev) {\n        try {\n            await this.onCommand('form:onPublishDraft', false, ev, ev.currentTarget, {}, true)\n        }\n        catch (error) {\n            this.containers.vueEntryHeaderControls.$refs.publishingControls.hide();\n        }\n    }\n\n    async onRestoreRecordClick(ev) {\n        try {\n            await this.onCommand('form:onRestore', false, ev, ev.currentTarget, {}, true)\n        }\n        catch (error) {\n            this.containers.vueEntryHeaderControls.$refs.publishingControls.hide();\n        }\n    }\n\n    onPublishingControlsBtnClick(ev) {\n        this.containers.vueEntryHeaderControls.$refs.publishingControls.show(ev.currentTarget);\n    }\n\n    onPublishingStateChanged(changed) {\n        this.state.publishingStateChanged = changed;\n    }\n}\n\noc.registerControl('vue-entry-header-controls', VueEntryHeaderControls);\n\nexport { VueEntryHeaderControls };\nexport default VueEntryHeaderControls;\n"
  },
  {
    "path": "modules/tailor/behaviors/DraftController.php",
    "content": "<?php namespace Tailor\\Behaviors;\n\nuse Flash;\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\ControllerBehavior;\nuse Illuminate\\Database\\Eloquent\\Model as EloquentModel;\nuse Illuminate\\Database\\Eloquent\\Collection as CollectionBase;\nuse Exception;\n\n/**\n * DraftController is a modifier to FormController to enable draft records\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DraftController extends ControllerBehavior\n{\n    use \\Backend\\Traits\\FormModelSaver;\n\n    /**\n     * @var Model model used by the form\n     */\n    protected $primaryModel;\n\n    /**\n     * @var Model model used by the form\n     */\n    protected $model;\n\n    /**\n     * @var string draftId\n     */\n    protected $draftId;\n\n    /**\n     * @var string deleteMethod\n     */\n    protected $deleteMethod = 'delete';\n\n    /**\n     * initDraft\n     */\n    public function initDraft($model, $context = null)\n    {\n        $this->primaryModel = $model;\n\n        if ($model->isClassInstanceOf(\\October\\Contracts\\Database\\SoftDeleteInterface::class)) {\n            $this->deleteMethod = 'forceDelete';\n        }\n\n        if ($this->isDraftMode()) {\n            $draftModel = $this->controller->formFindModelObject($this->getDraftId());\n\n            if ($draftModel->isUnsavedDraftStatus()) {\n                $context = FormField::CONTEXT_CREATE;\n            }\n\n            $this->controller->initForm($draftModel, $context);\n\n            $this->model = $draftModel;\n\n            $this->draftId = $draftModel->getKey();\n        }\n        else {\n            $this->controller->initForm($model, $context);\n\n            $this->model = $model;\n        }\n    }\n\n    /**\n     * Controller \"create\" action used for creating new model records.\n     *\n     * @param string $context Form context\n     * @return void\n     */\n    public function create()\n    {\n        $model = $this->controller->formCreateModelObject();\n\n        $model->saveAsFirstDraft(['name' => __('First Draft')]);\n\n        return $this->makeDraftRedirect(FormField::CONTEXT_UPDATE, $model);\n    }\n\n    /**\n     * Controller \"update\" action used for updating existing model records.\n     *\n     * @param int $recordId Record identifier\n     * @param string $context Form context\n     * @return void\n     */\n    public function update($recordId = null, $context = null)\n    {\n        try {\n            $model = $this->controller->formFindModelObject($recordId);\n            $context = $context ?: FormField::CONTEXT_UPDATE;\n\n            // Multisite\n            if ($this->controller->formHasMultisite($model)) {\n                if ($redirect = $this->makeMultisiteDraftRedirect('create', $model)) {\n                    return $redirect;\n                }\n\n                $this->addHandlerToSiteSwitcher();\n            }\n\n            $this->initDraft($model, $context);\n        }\n        catch (Exception $ex) {\n            $this->controller->handleError($ex);\n        }\n    }\n\n    /**\n     * addHandlerToSiteSwitcher\n     */\n    protected function addHandlerToSiteSwitcher()\n    {\n        $siteSwitcher = $this->getWidget('siteSwitcher');\n        if (!$siteSwitcher) {\n            return;\n        }\n\n        $siteSwitcher->setSwitchHandler('onSwitchSite');\n    }\n\n    /**\n     * onCommitDraft is saving a draft without publishing it\n     */\n    public function onCommitDraft($recordId = null)\n    {\n        $model = $this->controller->formFindModelObject($recordId);\n\n        $this->initDraft($model);\n\n        $draftModel = $this->draftGetDraftModel();\n\n        $draftModel->setDraftCommit((array) post('Draft'));\n\n        $formWidget = $this->controller->formGetWidget();\n\n        $this->controller->formBeforeSave($model);\n\n        $this->performSaveOnModel(\n            $draftModel,\n            $formWidget->getSaveData(),\n            ['sessionKey' => $formWidget->getSessionKey(), 'propagate' => true]\n        );\n\n        $this->controller->formAfterSave($model);\n\n        Flash::success(__('Draft Saved'));\n\n        return $this->makeDraftRedirect(FormField::CONTEXT_UPDATE, $model);\n    }\n\n    /**\n     * onPublishDraft is saving a draft and publishing it\n     */\n    public function onPublishDraft($recordId = null, $context = null)\n    {\n        $model = $this->controller->formFindModelObject($recordId);\n\n        $isFirstDraft = $model->isFirstDraftStatus();\n\n        $this->initDraft($model);\n\n        $model->setDraftPublish();\n\n        $formWidget = $this->controller->formGetWidget();\n\n        $this->controller->formBeforeSave($model);\n\n        $this->performSaveOnModel(\n            $model,\n            $formWidget->getSaveData(),\n            ['sessionKey' => $formWidget->getSessionKey(), 'propagate' => true]\n        );\n\n        $this->controller->formAfterSave($model);\n\n        if (!$isFirstDraft) {\n            $draftModel = $this->draftGetDraftModel();\n            $this->transferModelRelations($draftModel, $model);\n\n            // Clean up stray relations so they are not deleted\n            $draftModel->unsetRelations();\n            $draftModel->{$this->deleteMethod}();\n        }\n\n        Flash::success(__('Draft Applied'));\n\n        return $this->controller->makeRedirect(FormField::CONTEXT_UPDATE, $model);\n    }\n\n    /**\n     * onCreateDraft is creating a new draft from a published record\n     */\n    public function onCreateDraft($recordId = null, $context = null)\n    {\n        $model = $this->controller->formFindModelObject($recordId);\n\n        $this->initDraft($model);\n\n        $draftName = __('Draft').' '.($model->countDrafts() + 1);\n\n        $newModel = $model->createNewDraft([\n            'name' => $draftName,\n            'notes' => $draftName.': '.__('put the draft notes here')\n        ]);\n\n        $this->draftId = $newModel->getKey();\n\n        Flash::success(__('Draft Created'));\n\n        return $this->makeDraftRedirect(FormField::CONTEXT_UPDATE, $model);\n    }\n\n    /**\n     * onDiscardDraft deletes the draft\n     */\n    public function onDiscardDraft($recordId = null, $context = null)\n    {\n        $model = $this->controller->formFindModelObject($recordId);\n\n        $this->initDraft($model);\n\n        if ($draftModel = $this->draftGetDraftModel()) {\n            $draftModel->{$this->deleteMethod}();\n            Flash::success(__('Draft Discarded'));\n        }\n        else {\n            Flash::error('Unable to find draft model');\n        }\n\n        if ($redirect = $this->controller->makeRedirect('update', $model)) {\n            return $redirect;\n        }\n    }\n\n    /**\n     * draftGetPrimaryModel\n     */\n    public function draftGetPrimaryModel()\n    {\n        return $this->primaryModel;\n    }\n\n    /**\n     * draftGetDraftModel\n     */\n    public function draftGetDraftModel()\n    {\n        return $this->model;\n    }\n\n    /**\n     * getDraftId\n     */\n    public function getDraftId(): string\n    {\n        if ($this->draftId) {\n            return $this->draftId;\n        }\n\n        return (string) get('draft');\n    }\n\n    /**\n     * isDraftMode\n     */\n    public function isDraftMode(): bool\n    {\n        return (bool) $this->getDraftId();\n    }\n\n    /**\n     * makeMultisiteDraftRedirect\n     */\n    public function makeMultisiteDraftRedirect($context = null, $model = null)\n    {\n        if ($model->isUnsavedDraftStatus()) {\n            return;\n        }\n\n        return $this->controller->makeMultisiteRedirect($context, $model);\n    }\n\n    /**\n     * makeDraftRedirect\n     */\n    public function makeDraftRedirect($context = null, $model = null, $queryParams = [])\n    {\n        // Escaping draft mode\n        if (post('close')) {\n            return $this->controller->makeRedirect($context, $model);\n        }\n\n        // Redirect back to the same page\n        if ($this->isDraftMode()) {\n            $queryParams += ['draft' => $this->getDraftId()];\n        }\n        elseif ($model->isDraftStatus()) {\n            $queryParams += ['draft' => $model->getKey()];\n        }\n\n        return $this->controller->makeRedirect($context, $model, $queryParams);\n    }\n\n    /**\n     * makeDraftRedirectToClosest\n     */\n    public function makeDraftRedirectToClosest($model)\n    {\n        if ($model->isDraftStatus()) {\n            return;\n        }\n\n        // Find nearest draft model\n        $draftModel = $model->getDraftRecords()->first();\n        if (!$draftModel) {\n            return;\n        }\n\n        return $this->makeDraftRedirect(\n            FormField::CONTEXT_UPDATE,\n            $model,\n            ['draft' => $draftModel->getKey()]\n        );\n    }\n\n    /**\n     * transferModelRelations transfers the relations from one model to another,\n     * both models must be of the same class.\n     */\n    protected function transferModelRelations($fromModel, $toModel)\n    {\n        $definitions = $fromModel->getRelationDefinitions();\n\n        // Empty the existing relations\n        $toSave = false;\n        foreach ($definitions as $type => $relations) {\n            foreach ($relations as $name => $options) {\n                if ($fromModel->isRelationReplicable($name)) {\n                    $toModel->{$name} = null;\n                    $toSave = true;\n                }\n            }\n        }\n\n        if ($toSave) {\n            $toModel->save(['timestamps' => false]);\n        }\n\n        // Populate the new relations from the draft\n        $toSave = false;\n        foreach ($definitions as $type => $relations) {\n            foreach ($relations as $name => $options) {\n                if ($fromModel->isRelationReplicable($name)) {\n                    $models = $fromModel->$name;\n                    if ($models instanceof CollectionBase) {\n                        $models = $models->all();\n                    }\n                    elseif ($models instanceof EloquentModel) {\n                        $models = [$models];\n                    }\n                    else {\n                        $models = (array) $models;\n                    }\n\n                    foreach ($models as $model) {\n                        $toModel->{$name}()->add($model);\n                        $toSave = true;\n                    }\n                }\n            }\n        }\n\n        if ($toSave) {\n            $toModel->save(['timestamps' => false]);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/behaviors/PreviewController.php",
    "content": "<?php namespace Tailor\\Behaviors;\n\nuse Cms;\nuse Url;\nuse Site;\nuse Event;\nuse Cache;\nuse System;\nuse Config;\nuse Cms\\Classes\\Page;\nuse Cms\\Classes\\Theme;\nuse Cms\\Classes\\Controller;\nuse Tailor\\Classes\\Blueprint;\nuse Backend\\Classes\\ControllerBehavior;\nuse Tailor\\Models\\PreviewToken;\nuse ApplicationException;\nuse SystemException;\n\n/**\n * PreviewController adds the ability to preview a record based on a CMS page\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PreviewController extends ControllerBehavior\n{\n    use \\Backend\\Traits\\FormModelSaver;\n\n    /**\n     * @var Page previewPageName\n     */\n    protected $previewPageName;\n\n    /**\n     * @var Blueprint activeSource\n     */\n    protected $activeSource;\n\n    /**\n     * @var string componentName\n     */\n    protected $componentName;\n\n    /**\n     * setPreviewPageContext\n     */\n    public function setPreviewPageContext(string $componentName, Blueprint $activeSource)\n    {\n        $this->componentName = $componentName;\n        $this->activeSource = $activeSource;\n    }\n\n    /**\n     * onPreview previews the record\n     */\n    public function onPreview($recordId = null)\n    {\n        if (!System::hasModule('Cms')) {\n            throw new ApplicationException('Cannot preview without the CMS module installed!');\n        }\n\n        if (!$pageName = $this->getPreviewPageName()) {\n            throw new ApplicationException('There is no page that uses the necessary component');\n        }\n\n        // Get model from page action\n        $model = $this->controller->formGetModel();\n\n        // Update the record for preview\n        $this->performSaveOnModel(\n            $model,\n            $this->controller->formGetWidget()->getSaveData(),\n            $this->controller->formGetWidget()->getSessionKey()\n        );\n\n        // A preview page is already open\n        if ($existingToken = post('preview_token')) {\n            return [\n                'token' => $existingToken,\n            ];\n        }\n\n        // Get the URL from the CMS controller\n        $controller = new Controller(Theme::getEditTheme());\n\n        // Force the custom app URL from the site\n        if (($site = Site::getSiteFromContext()) && $site->is_custom_url) {\n            Url::forceRootUrl($site->app_url);\n        }\n\n        $url = $controller->pageUrl($pageName, $model->makePageUrlParams());\n\n        // Generate preview token\n        $token = PreviewToken::createTokenForUrl($url, [\n            'id' => $model->getKey()\n        ]);\n\n        // Attach to URL\n        $url .= '?' . http_build_query([\n            '_preview_token' => $token->token,\n        ]);\n\n        return [\n            'token' => $token->token,\n            'url' => $url\n        ];\n    }\n\n    /**\n     * hasPreviewPage\n     */\n    public function hasPreviewPage(): bool\n    {\n        return $this->getPreviewPageName() !== null;\n    }\n\n    /**\n     * getPreviewPageName\n     */\n    protected function getPreviewPageName(): ?string\n    {\n        if ($this->previewPageName !== null) {\n            return $this->previewPageName;\n        }\n\n        if (!$blueprint = $this->activeSource) {\n            throw new SystemException('Missing a blueprint source in the controller.');\n        }\n\n        // Find page with component\n        $theme = $this->getTheme();\n        $cacheKey = self::getPreviewPageCacheKey($theme);\n        $lookupKey = \"{$this->componentName}.{$blueprint->handle}\";\n        $result = [];\n\n        // Check cache\n        $cached = Cache::memo()->get($cacheKey, false);\n        if ($cached !== false && ($cached = @unserialize($cached)) !== false && is_array($cached)) {\n            if (array_key_exists($lookupKey, $cached)) {\n                return $cached[$lookupKey];\n            }\n            else {\n                $result = $cached;\n            }\n        }\n\n        $page = $this->lookupPreviewPage($theme, $blueprint->handle);\n\n        $this->previewPageName = $result[$lookupKey] = $page ? $page->getBaseFileName() : null;\n\n        $expiresAt = now()->addMinutes(Config::get('cms.template_cache_ttl', 10));\n        Cache::put($cacheKey, serialize($result), $expiresAt);\n\n        return $result[$lookupKey] ?? null;\n    }\n\n    /**\n     * lookupPreviewPage returns the preview page for a specified handle.\n     */\n    protected function lookupPreviewPage($theme, $handle)\n    {\n        $allPages = Page::listInTheme($theme, true);\n\n        // Try the one flagged as default first\n        $page = $allPages->whereComponent($this->componentName, [\n            'handle' => $handle,\n            'isDefault' => true\n        ])->first();\n\n        // Then try finding anything\n        if (!$page) {\n            $page = $allPages->whereComponent($this->componentName, 'handle', $handle)->first();\n        }\n\n        return $page;\n    }\n\n    /**\n     * getTheme returns the theme to source snippets\n     */\n    protected function getTheme()\n    {\n        return Theme::getEditTheme() ?: Theme::getActiveTheme();\n    }\n\n    /**\n     * getPreviewPageCacheKey returns a cache key for this record.\n     */\n    protected static function getPreviewPageCacheKey($theme)\n    {\n        $key = crc32($theme?->getPath() ?: 1) . 'preview-page-map';\n\n        /**\n         * @event tailor.getPreviewPageCacheKey\n         * Enables modifying the key used to reference cached preview pages\n         *\n         * Example usage:\n         *\n         *     Event::listen('tailor.getPreviewPageCacheKey', function (&$key) {\n         *          $key = $key . '-' . App::getLocale();\n         *     });\n         *\n         */\n        Event::fire('tailor.getPreviewPageCacheKey', [&$key]);\n\n        return $key;\n    }\n\n    /**\n     * clearCache clears front-end run-time cache.\n     * @param \\Cms\\Classes\\Theme $theme Specifies a parent theme.\n     */\n    public static function clearCache($theme)\n    {\n        Cache::forget(self::getPreviewPageCacheKey($theme));\n    }\n}\n"
  },
  {
    "path": "modules/tailor/behaviors/VersionController.php",
    "content": "<?php namespace Tailor\\Behaviors;\n\nuse Flash;\nuse Backend\\Classes\\FormField;\nuse Backend\\Classes\\ControllerBehavior;\nuse Exception;\n\n/**\n * VersionController is a modifier to FormController to enable version records\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass VersionController extends ControllerBehavior\n{\n    use \\Backend\\Traits\\FormModelSaver;\n\n    /**\n     * @var Model model used by the form\n     */\n    protected $primaryModel;\n\n    /**\n     * @var Model model used by the form\n     */\n    protected $model;\n\n    /**\n     * @var string versionId\n     */\n    protected $versionId;\n\n    /**\n     * initVersion\n     */\n    public function initVersion($model)\n    {\n        $this->primaryModel = $model;\n\n        if ($this->isVersionMode()) {\n            $versionModel = $this->controller->formFindModelObject($this->getVersionId());\n\n            $this->controller->initForm($versionModel, FormField::CONTEXT_PREVIEW);\n\n            $this->model = $versionModel;\n\n            $this->versionId = $versionModel->getKey();\n        }\n        else {\n            $this->controller->initForm($model);\n\n            $this->model = $model;\n        }\n    }\n\n    /**\n     * Controller \"update\" action used for updating existing model records.\n     *\n     * @param int $recordId Record identifier\n     * @param string $context Form context\n     * @return void\n     */\n    public function update($recordId = null)\n    {\n        try {\n            $model = $this->controller->formFindModelObject($recordId);\n\n            $this->initVersion($model);\n        }\n        catch (Exception $ex) {\n            $this->controller->handleError($ex);\n        }\n    }\n\n    /**\n     * onRestoreVersion restores a version to the primary model\n     */\n    public function onRestoreVersion($recordId = null)\n    {\n        $model = $this->controller->formFindModelObject($recordId);\n\n        $this->initVersion($model);\n\n        $versionModel = $this->versionGetVersionModel();\n\n        $versionModel->restoreVersionSnapshot($model);\n\n        Flash::success('Version restored');\n\n        return $this->controller->makeRedirect(FormField::CONTEXT_UPDATE, $model);\n    }\n\n    /**\n     * versionBeforeSave\n     */\n    public function versionBeforeSave($model)\n    {\n        $model->saveVersionSnapshot((array) post('Version'));\n    }\n\n    /**\n     * versionGetPrimaryModel\n     */\n    public function versionGetPrimaryModel()\n    {\n        return $this->primaryModel;\n    }\n\n    /**\n     * versionGetVersionModel\n     */\n    public function versionGetVersionModel()\n    {\n        return $this->model;\n    }\n\n    /**\n     * getVersionId\n     */\n    public function getVersionId(): string\n    {\n        if ($this->versionId) {\n            return $this->versionId;\n        }\n\n        return (string) get('version');\n    }\n\n    /**\n     * isVersionMode\n     */\n    public function isVersionMode(): bool\n    {\n        return (bool) $this->getVersionId();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/Blueprint.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Str;\nuse Arr;\nuse File;\nuse Yaml;\nuse Lang;\nuse Cms\\Helpers\\File as FileHelper;\nuse October\\Rain\\Extension\\Extendable;\nuse DirectoryIterator;\nuse ApplicationException;\nuse ValidationException;\nuse SystemException;\nuse Exception;\n\n/**\n * Blueprint represents a blueprint file object\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Blueprint extends Extendable\n{\n    use \\Tailor\\Classes\\Blueprint\\HasDatasources;\n\n    /**\n     * @var array attributes for the template, taken from the config\n     */\n    public $attributes = [];\n\n    /**\n     * @var string typeName of the blueprint\n     */\n    protected $typeName;\n\n    /**\n     * @var string fileName specifies the file name corresponding the Blueprint object\n     */\n    public $fileName;\n\n    /**\n     * @var string originalFileName specifies the file name that the template was originally loaded\n     */\n    protected $originalFileName;\n\n    /**\n     * @var string mtime last modified time\n     */\n    public $mtime;\n\n    /**\n     * @var string content of file\n     */\n    public $content;\n\n    /**\n     * @var array allowedExtensions for template files\n     */\n    protected $allowedExtensions = ['yaml'];\n\n    /**\n     * @var bool exists indicates if the model exists.\n     */\n    public $exists = false;\n\n    /**\n     * @var string defaultDatasource is used by unit tests.\n     */\n    protected static $defaultDatasource;\n\n    /**\n     * @var array booted models\n     */\n    protected static $booted = [];\n\n    /**\n     * __construct\n     */\n    public function __construct(array $attributes = [])\n    {\n        $this->attributes = $attributes;\n\n        $this->bootIfNotBooted();\n    }\n\n    /**\n     * bootIfNotBooted checks if the model needs to be booted and if so, do it.\n     */\n    protected function bootIfNotBooted()\n    {\n        $class = get_class($this);\n\n        if (!isset(static::$booted[$class])) {\n            static::$booted[$class] = true;\n            static::boot();\n        }\n    }\n\n    /**\n     * boot is the \"booting\" method of the model.\n     */\n    protected static function boot()\n    {\n    }\n\n    /**\n     * load the object from a file\n     */\n    public static function load(string $fileName): ?Blueprint\n    {\n        return (new static)->find($fileName);\n    }\n\n    /**\n     * getMtimeByName\n     */\n    public static function getMtimeByName(string $fileName): ?int\n    {\n        $obj = new static;\n        $obj->validateFileName($fileName);\n\n        $filePath = $obj->getFilePath($fileName);\n        if (!file_exists($filePath)) {\n            return null;\n        }\n\n        return File::lastModified($filePath);\n    }\n\n    /**\n     * listInProject lists all blueprints in a project, loaded in priority order:\n     * app, plugins, active theme, then other themes.\n     */\n    public static function listInProject(array $options = []): BlueprintCollection\n    {\n        // 1. App blueprints (highest priority)\n        $results = (new static)->get($options);\n\n        // 2. Plugin blueprints\n        $plugins = array_pull($options, 'plugins', self::getDefaultPlugins());\n\n        foreach ($plugins as $path) {\n            $results = array_merge(\n                static::inDatasource($path)->get($options),\n                $results,\n            );\n        }\n\n        // 3. Active theme blueprints\n        $activeTheme = array_pull($options, 'activeTheme', self::getDefaultActiveTheme());\n\n        foreach ($activeTheme as $dirName => $path) {\n            $results = array_merge(\n                static::inDatasource($path, $dirName)->get($options),\n                $results,\n            );\n        }\n\n        // 4. Other theme blueprints (lowest priority)\n        $themes = array_pull($options, 'themes', self::getDefaultThemes());\n\n        foreach ($themes as $dirName => $path) {\n            $results = array_merge(\n                static::inDatasource($path, $dirName)->get($options),\n                $results,\n            );\n        }\n\n        return static::hydrate($results);\n    }\n\n    /**\n     * newFromIndexer creates a new instance from the indexer\n     */\n    public static function newFromIndexer(array $attributes = [])\n    {\n        $instance = new static($attributes);\n\n        $instance->exists = true;\n\n        $instance = static::blessBlueprint($instance);\n\n        return $instance;\n    }\n\n    /**\n     * hydrate a collection of templates from plain arrays\n     */\n    public static function hydrate(array $items): BlueprintCollection\n    {\n        $result = [];\n\n        foreach ($items as $item) {\n            if ($item['isFolder']) {\n                continue;\n            }\n\n            if (isset($item['datasource'])) {\n                $blueprint = static::inDatasource($item['datasource'], $item['datasourceTheme'] ?? null)->find($item['path']);\n            }\n            else {\n                $blueprint = static::load($item['path']);\n            }\n\n            if ($blueprint !== null) {\n                $result[] = $blueprint;\n            }\n        }\n\n        return (new static)->newCollection($result);\n    }\n\n    /**\n     * get all blueprints and uses simple objects\n     *\n     * Available options:\n     * - recursive: search subfolders and place in 'templates' key\n     * - flatten: produce a flat array instead of a recursive array\n     * - filterPath: only include within an inner path\n     * - filterFiles: only include files\n     * - filterFolders: only include folders\n     * - filterEditable: only show editable templates\n     */\n    public function get(array $options = []): array\n    {\n        extract(array_merge([\n            'recursive' => true,\n            'flatten' => true,\n            'filterPath' => '',\n            'filterFiles' => false,\n            'filterFolders' => false,\n            'filterEditable' => true,\n        ], $options));\n\n        $pathSuffix = $filterPath ? '/'.$filterPath : '';\n        $path = $this->getBasePath().$pathSuffix;\n        $files = $this->getInternal($path);\n\n        $templates = [];\n        foreach ($files as $template) {\n            if ($recursive && $template['isFolder'] && $template['fileName']) {\n                $newFilter = $pathSuffix ? $pathSuffix.'/'.$template['fileName'] : $template['fileName'];\n\n                if ($flatten) {\n                    $templates = array_merge($templates, $this->get(['filterPath' => $newFilter] + $options));\n                }\n                else {\n                    $template['templates'] = $this->get(['filterPath' => $newFilter] + $options);\n                }\n            }\n\n            if ($filterFolders && !$template['isFolder']) {\n                continue;\n            }\n\n            if ($filterEditable && !$template['isEditable'] && !$template['isFolder']) {\n                continue;\n            }\n\n            if ($filterFiles && $template['isFolder']) {\n                continue;\n            }\n\n            if ($this->datasource) {\n                $template['datasource'] = $this->datasource;\n            }\n\n            if ($this->datasourceTheme) {\n                $template['datasourceTheme'] = $this->datasourceTheme;\n            }\n\n            $templates[] = $template;\n        }\n\n        return $templates;\n    }\n\n    /**\n     * getInternal helps the get method\n     */\n    protected function getInternal(string $path): array\n    {\n        if (!file_exists($path)) {\n            return [];\n        }\n\n        $result = [];\n        $iterator = new DirectoryIterator($path);\n\n        foreach ($iterator as $fileInfo) {\n            $fileName = $fileInfo->getFileName();\n            if (substr($fileName, 0, 1) === '.') {\n                continue;\n            }\n\n            if (!$fileInfo->isDir() && !$fileInfo->isFile()) {\n                continue;\n            }\n\n            $fileName = $fileInfo->getFileName();\n            $isFolder = $fileInfo->isDir();\n            $filePath = $this->getRelativePath($fileInfo->getPathname());\n            $isEditable = in_array(strtolower($fileInfo->getExtension()), $this->allowedExtensions);\n\n            $template = [\n                'fileName' => $fileName,\n                'isFolder' => $isFolder ? 1 : 0,\n                'isEditable' => $isEditable,\n                'path' => ltrim(File::normalizePath($filePath), '/')\n            ];\n\n            $result[] = $template;\n        }\n\n        return $result;\n    }\n\n    /**\n     * find a single template by its file name.\n     */\n    public function find(string $fileName)\n    {\n        $this->validateFileName($fileName);\n\n        $filePath = $this->getFilePath($fileName);\n        if (($content = @File::get($filePath)) === false) {\n            return null;\n        }\n\n        $this->fileName = $fileName;\n        $this->originalFileName = $fileName;\n        $this->mtime = File::lastModified($filePath);\n        $this->content = $content;\n        $this->exists = true;\n\n        try {\n            $this->attributes = (array) Yaml::parse($content);\n        }\n        catch (Exception $ex) {\n            $this->attributes = $this->invalidYamlParse($content);\n        }\n\n        // Filter types\n        if ($this->typeName !== null) {\n            if (!isset($this->attributes['type'])) {\n                return null;\n            }\n\n            if ($this->attributes['type'] !== $this->typeName) {\n                return null;\n            }\n        }\n\n        // Default handle is filename\n        if (!isset($this->attributes['handle'])) {\n            $this->attributes['handle'] = File::name($fileName);\n        }\n\n        // Slugify handle for URLs\n        $this->attributes['handleSlug'] = kebab_case(str_replace('\\\\', ' ', $this->handle));\n\n        // Theme for filtering\n        if ($this->datasourceTheme) {\n            $this->attributes['_theme'] = $this->datasourceTheme;\n        }\n\n        return static::blessBlueprint($this);\n    }\n\n    /**\n     * invalidYamlParse\n     */\n    protected function invalidYamlParse($content)\n    {\n        $attrs = [];\n        $content = PHP_EOL.$content;\n\n        // Look for uuid\n        if (preg_match('/\\nuuid:\\s*(\\w+)\\s*\\n/', $content, $matches)) {\n            $attrs['uuid'] = $matches[1];\n        }\n\n        // Look for type\n        if (preg_match('/\\ntype:\\s*(\\w+)\\s*\\n/', $content, $matches)) {\n            $attrs['type'] = $matches[1];\n        }\n\n        return $attrs;\n    }\n\n    /**\n     * blessBlueprint promotes a blueprint class to its specific type, for example,\n     * a global blueprint resolves to the GlobalBlueprint class object, and relevant\n     * attributes are transferred to the new object.\n     */\n    public static function blessBlueprint($blueprint)\n    {\n        $className = null;\n        switch ($blueprint->type) {\n            case 'entry':\n                $className = Blueprint\\EntryBlueprint::class;\n                break;\n            case 'global':\n                $className = Blueprint\\GlobalBlueprint::class;\n                break;\n            case 'mixin':\n                $className = Blueprint\\MixinBlueprint::class;\n                break;\n            case 'single':\n                $className = Blueprint\\SingleBlueprint::class;\n                break;\n            case 'stream':\n                $className = Blueprint\\StreamBlueprint::class;\n                break;\n            case 'structure':\n                $className = Blueprint\\StructureBlueprint::class;\n                break;\n        }\n\n        if ($className === null) {\n            return $blueprint;\n        }\n\n        $newObj = $blueprint->datasource\n            ? $className::inDatasource($blueprint->datasource, $blueprint->datasourceTheme)\n            : new $className;\n\n        $newObj->fileName = $blueprint->fileName;\n        $newObj->originalFileName = $blueprint->originalFileName;\n        $newObj->mtime = $blueprint->mtime;\n        $newObj->content = $blueprint->content;\n        $newObj->attributes = $blueprint->attributes;\n        $newObj->exists = $blueprint->exists;\n\n        return $newObj;\n    }\n\n    /**\n     * save the object to the disk\n     */\n    public function save(?array $options = null)\n    {\n        $fileName = $this->fileName;\n        $fullPath = $this->getFilePath();\n\n        // Validate\n        $forceSave = Arr::get($options, 'force', false);\n        if ($forceSave) {\n            $this->validateFileName($fileName);\n        }\n        else {\n            $this->validate();\n        }\n\n        if (File::isFile($fullPath) && $this->originalFileName !== $fileName) {\n            throw new ApplicationException(Lang::get(\n                'cms::lang.cms_object.file_already_exists',\n                ['name'=>$fileName]\n            ));\n        }\n\n        $dirPath = $this->getBasePath();\n        if (!file_exists($dirPath) || !is_dir($dirPath)) {\n            if (!File::makeDirectory($dirPath, 0755, true, true)) {\n                throw new ApplicationException(Lang::get(\n                    'cms::lang.cms_object.error_creating_directory',\n                    ['name'=>$dirPath]\n                ));\n            }\n        }\n\n        if (strpos($fileName, '/') !== false) {\n            $dirPath = dirname($fullPath);\n\n            if (!is_dir($dirPath) && !File::makeDirectory($dirPath, 0755, true, true)) {\n                throw new ApplicationException(Lang::get(\n                    'cms::lang.cms_object.error_creating_directory',\n                    ['name'=>$dirPath]\n                ));\n            }\n        }\n\n        // Ensure blueprint has uuid\n        if (!$this->uuid) {\n            $this->uuid = Str::uuid()->toString();\n            $newContent = 'uuid: ' . $this->uuid . PHP_EOL;\n            $newContent .= $this->content;\n            $this->content = $newContent;\n        }\n\n        $newFullPath = $fullPath;\n        if (@File::put($fullPath, $this->content) === false) {\n            throw new ApplicationException(Lang::get(\n                'cms::lang.cms_object.error_saving',\n                ['name' => $fileName]\n            ));\n        }\n\n        if (strlen($this->originalFileName) && $this->originalFileName !== $fileName) {\n            $fullPath = $this->getFilePath($this->originalFileName);\n\n            if (File::isFile($fullPath)) {\n                @unlink($fullPath);\n            }\n        }\n\n        clearstatcache();\n\n        $this->mtime = @File::lastModified($newFullPath);\n        $this->originalFileName = $fileName;\n        $this->exists = true;\n    }\n\n    /**\n     * forceSave\n     */\n    public function forceSave()\n    {\n        return $this->save(['force' => true]);\n    }\n\n    /**\n     * delete template\n     */\n    public function delete()\n    {\n        $fileName = $this->fileName;\n        $fullPath = $this->getFilePath($fileName);\n\n        $this->validateFileName($fileName);\n\n        if (File::exists($fullPath)) {\n            if (!@File::delete($fullPath)) {\n                throw new ApplicationException(Lang::get(\n                    'cms::lang.asset.error_deleting_file',\n                    ['name' => $fileName]\n                ));\n            }\n        }\n    }\n\n    /**\n     * validateFileName, extension and path.\n     * @param string $fileName\n     */\n    protected function validateFileName(?string $fileName = null): void\n    {\n        if ($fileName === null) {\n            $fileName = $this->fileName;\n        }\n\n        $fileName = trim($fileName);\n\n        if (!strlen($fileName)) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.file_name_required', [\n                    'allowed' => implode(', ', $this->allowedExtensions),\n                    'invalid' => pathinfo($fileName, PATHINFO_EXTENSION)\n                ])\n            ]);\n        }\n\n        if (!FileHelper::validateExtension($fileName, $this->allowedExtensions, false)) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('cms::lang.cms_object.invalid_file_extension', [\n                    'allowed' => implode(', ', $this->allowedExtensions),\n                    'invalid' => pathinfo($fileName, PATHINFO_EXTENSION)\n                ])\n            ]);\n        }\n\n        if (!FileHelper::validatePath($fileName, null)) {\n            throw new ValidationException(['fileName' =>\n                Lang::get('tailor::lang.blueprint.invalid_file', [\n                    'name' => $fileName\n                ])\n            ]);\n        }\n    }\n\n    /**\n     * validate the blueprint\n     */\n    public function validate()\n    {\n        $this->validateFileName();\n\n        BlueprintVerifier::instance()->verifyBlueprint($this);\n    }\n\n    /**\n     * getMetaData returns meta data for the content schema table\n     */\n    public function getMetaData(): array\n    {\n        return [\n            'blueprint_uuid' => $this->uuid,\n            'blueprint_type' => $this->type\n        ];\n    }\n\n    /**\n     * getMessage looks up a custom message from the blueprint\n     */\n    public function getMessage(string $name, ?string $default = null, array $vars = []): string\n    {\n        $foundKey = $this->customMessages[$name] ?? null;\n\n        if ($foundKey === null) {\n            $foundKey = $default;\n        }\n\n        if ($foundKey === null) {\n            $foundKey = '???';\n        }\n\n        return Lang::get($foundKey, $vars);\n    }\n\n    /**\n     * makeBlueprintTableName where type can be used for content, join or repeater\n     */\n    protected function makeBlueprintTableName($type = 'content'): string\n    {\n        return '';\n    }\n\n    /**\n     * getContentTableName\n     */\n    public function getContentTableName(): string\n    {\n        return $this->makeBlueprintTableName('content');\n    }\n\n    /**\n     * getJoinTableName\n     */\n    public function getJoinTableName(): string\n    {\n        return $this->makeBlueprintTableName('join');\n    }\n\n    /**\n     * getRepeaterTableName\n     */\n    public function getRepeaterTableName(): string\n    {\n        return $this->makeBlueprintTableName('repeater');\n    }\n\n    /**\n     * getModelClassName\n     */\n    public function getModelClassName()\n    {\n        throw new SystemException('Blueprint does not specify a model class to use');\n    }\n\n    /**\n     * getPermissionCodeName\n     */\n    public function getPermissionCodeName($name = null): string\n    {\n        $code = str_replace('-', '', $this->uuid);\n\n        if ($this instanceof \\Tailor\\Classes\\Blueprint\\GlobalBlueprint) {\n            $prefix = 'tailor.global.';\n        }\n        else {\n            $prefix = 'tailor.entry.';\n        }\n\n        $suffix = $name !== null ? '.' . $name : '';\n\n        return $prefix . $code . $suffix;\n    }\n\n    /**\n     * getNavigationCodeName\n     */\n    public function getNavigationCodeName(): string\n    {\n        if ($this instanceof \\Tailor\\Classes\\Blueprint\\GlobalBlueprint) {\n            return \"global_{$this->handleSlug}\";\n        }\n\n        return \"entry_{$this->handleSlug}\";\n    }\n\n    /**\n     * newModelInstance returns a new instance of the model associated with this blueprint\n     */\n    public function newModelInstance()\n    {\n        $modelClass = $this->getModelClassName();\n        $customModelClass = $this->modelClass;\n\n        if (!$customModelClass) {\n            return new $modelClass;\n        }\n\n        if (!is_a($customModelClass, $modelClass, true)) {\n            throw new SystemException(\"Blueprint Model class [{$customModelClass}] must extend the [{$modelClass}] base class\");\n        }\n\n        return new $customModelClass;\n    }\n\n    /**\n     * newCollection instance\n     */\n    public function newCollection(array $templates = []): BlueprintCollection\n    {\n        return new BlueprintCollection($templates);\n    }\n\n    /**\n     * getRelativePath returns path relative to the theme template directory\n     */\n    protected function getRelativePath(string $path): string\n    {\n        $prefix = $this->getBasePath();\n\n        if (substr($path, 0, strlen($prefix)) === $prefix) {\n            $path = substr($path, strlen($prefix));\n        }\n\n        return $path;\n    }\n\n    /**\n     * getFilePath returns the absolute file path of an template\n     */\n    public function getFilePath(?string $fileName = null): string\n    {\n        if ($fileName === null) {\n            $fileName = $this->fileName;\n        }\n\n        return $this->getBasePath().'/'.$fileName;\n    }\n\n    /**\n     * getBasePath returns the base path for these objects\n     */\n    public function getBasePath(): string\n    {\n        if (!static::$defaultDatasource) {\n            static::$defaultDatasource = base_path('app/blueprints');\n        }\n\n        return $this->datasource ?: static::$defaultDatasource;\n    }\n\n    /**\n     * setDefaultDatasource\n     */\n    public static function setDefaultDatasource(string $path)\n    {\n        static::$defaultDatasource = $path;\n    }\n\n    /**\n     * toArray converts this instance to an array\n     */\n    public function toArray(): array\n    {\n        return $this->attributes;\n    }\n\n    /**\n     * __get attributes on the model\n     */\n    public function __get($key)\n    {\n        if (array_key_exists($key, $this->attributes)) {\n            return $this->attributes[$key];\n        }\n    }\n\n    /**\n     * __set attributes on the model\n     */\n    public function __set($key, $value)\n    {\n        $this->attributes[$key] = $value;\n    }\n\n    /**\n     * __isset determines if an attribute exists on the model\n     */\n    public function __isset($key)\n    {\n        return isset($this->attributes[$key]);\n    }\n\n    /**\n     * __unset an attribute on the model\n     */\n    public function __unset($key)\n    {\n        unset($this->attributes[$key]);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/BlueprintCollection.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse October\\Rain\\Support\\Collection as CollectionBase;\n\n/**\n * BlueprintCollection represents a collection of blueprints\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass BlueprintCollection extends CollectionBase\n{\n}\n"
  },
  {
    "path": "modules/tailor/classes/BlueprintErrorData.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Response;\n\n/**\n * BlueprintErrorData wraps information about a blueprint error to be used on the client side.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass BlueprintErrorData\n{\n    /**\n     * @var string message The error message\n     */\n    protected $message;\n\n    /**\n     * @var int line The error line\n     */\n    protected $line;\n\n    /**\n     * @var int pos Position of the error in the line\n     */\n    protected $pos;\n\n    /**\n     * __construct\n     */\n    public function __construct($message, $line = null, $pos = null)\n    {\n        $this->message = $message;\n        $this->line = $line;\n        $this->pos = $pos;\n    }\n\n    /**\n     * fromException\n     */\n    public static function fromException($ex)\n    {\n        return new self($ex->getMessage(), $ex->getLine());\n    }\n\n    /**\n     * toResponse\n     */\n    public function toResponse()\n    {\n        return Response::json($this->asArray(), 406);\n    }\n\n    /**\n     * asArray\n     */\n    protected function asArray()\n    {\n        return [\n            'blueprintError' => [\n                'message' => $this->message,\n                'line' => $this->line,\n                'pos' => $this->pos\n            ]\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/BlueprintException.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Exception;\n\n/**\n * BlueprintException\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass BlueprintException extends Exception\n{\n    /**\n     * __construct the exception class for blueprints\n     * @param string $message Error message.\n     * @param int $code Error code.\n     * @param Exception $previous Previous exception.\n     */\n    public function __construct(Blueprint $blueprint, $message = \"\", $lineNo = 0, ?Exception $previous = null)\n    {\n        parent::__construct($message, 0, $previous);\n\n        $this->line = $lineNo;\n\n        $this->file = $blueprint->getFilePath();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/BlueprintIndexer.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse App;\nuse File;\nuse System;\nuse Cms\\Classes\\Theme;\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse System\\Helpers\\Cache as CacheHelper;\nuse Exception;\n\n/**\n * BlueprintIndexer super class responsible for indexing blueprints\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass BlueprintIndexer\n{\n    use \\System\\Traits\\NoteMaker;\n    use \\Tailor\\Classes\\BlueprintIndexer\\MixinIndex;\n    use \\Tailor\\Classes\\BlueprintIndexer\\GlobalIndex;\n    use \\Tailor\\Classes\\BlueprintIndexer\\SectionIndex;\n    use \\Tailor\\Classes\\BlueprintIndexer\\FieldsetIndex;\n    use \\Tailor\\Classes\\BlueprintIndexer\\PermissionRegistry;\n    use \\Tailor\\Classes\\BlueprintIndexer\\NavigationRegistry;\n    use \\Tailor\\Classes\\BlueprintIndexer\\PageManagerRegistry;\n\n    /**\n     * @var array cache collection\n     */\n    public static $memoryCache = [];\n\n    /**\n     * @var int migrateCount number of migrations that occurred.\n     */\n    protected $migrateCount = 0;\n\n    /**\n     * @var bool debugChecked for the debug cache buster\n     */\n    protected $debugChecked = false;\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('tailor.blueprint.indexer');\n    }\n\n    /**\n     * find\n     */\n    public function find(string $uuid): ?Blueprint\n    {\n        if ($section = $this->findSection($uuid)) {\n            return $section;\n        }\n\n        if ($global = $this->findGlobal($uuid)) {\n            return $global;\n        }\n\n        return null;\n    }\n\n    /**\n     * findByHandle\n     */\n    public function findByHandle(string $handle): ?Blueprint\n    {\n        if ($section = $this->findSectionByHandle($handle)) {\n            return $section;\n        }\n\n        if ($global = $this->findGlobalByHandle($handle)) {\n            return $global;\n        }\n\n        return null;\n    }\n\n    /**\n     * migrate\n     */\n    public function migrate()\n    {\n        static::clearCache();\n\n        $this->migrateCount = 0;\n\n        $this->note('Migrating Content Tables');\n\n        $allBlueprints = Blueprint::listInProject();\n\n        // Clear validation cache before validating all blueprints\n        BlueprintVerifier::instance()->clearCache();\n\n        // Validate blueprints\n        foreach ($allBlueprints as $blueprint) {\n            $blueprint->validate();\n\n            // Saving a blueprint will generate a uuid\n            if (!$blueprint->uuid) {\n                $blueprint->forceSave();\n            }\n        }\n\n        // Output any duplicate handle/UUID warnings\n        $warnings = BlueprintVerifier::instance()->getWarnings();\n        foreach ($warnings as $warning) {\n            $this->note('- <comment>Warning</comment>: ' . $warning['message']);\n        }\n\n        // Migrate blueprints\n        foreach ($allBlueprints as $blueprint) {\n            if ($blueprint instanceof EntryBlueprint) {\n                $this->migrateContentInternal($blueprint);\n            }\n        }\n\n        if ($this->migrateCount === 0) {\n            $this->note('<info>Nothing to migrate.</info>');\n        }\n    }\n\n    /**\n     * migrateBlueprint\n     */\n    public function migrateBlueprint(Blueprint $blueprint)\n    {\n        static::clearCache();\n\n        // Saving a blueprint will generate a uuid\n        if (!$blueprint->uuid) {\n            $blueprint->forceSave();\n        }\n\n        if ($blueprint instanceof EntryBlueprint) {\n            $this->migrateContentInternal($blueprint);\n        }\n    }\n\n    /**\n     * migrateContentInternal\n     */\n    protected function migrateContentInternal(Blueprint $blueprint)\n    {\n        if ($fieldset = $this->findContentFieldset($blueprint->uuid)) {\n            if (SchemaBuilder::migrateBlueprint($blueprint, $fieldset)) {\n                $this->note('- <info>'.$blueprint->name.'</info>: '.$blueprint->handle .' ['.$blueprint->getContentTableName().']');\n                $this->migrateCount++;\n            }\n        }\n    }\n\n    /**\n     * getCache\n     */\n    protected function getCache($name): array\n    {\n        if (App::runningUnitTests()) {\n            return [];\n        }\n\n        if (System::checkDebugMode()) {\n            $this->resetCacheInDebugMode();\n        }\n\n        if (array_key_exists($name, static::$memoryCache)) {\n            return static::$memoryCache[$name];\n        }\n\n        $fileName = $this->makeCacheFile($name);\n\n        if (!File::exists($fileName)) {\n            return [];\n        }\n\n        try {\n            $result = File::getRequire($fileName);\n            if (!is_array($result)) {\n                return [];\n            }\n        }\n        catch (Exception $ex) {\n            return [];\n        }\n\n        return static::$memoryCache[$name] = $result;\n    }\n\n    /**\n     * resetCacheInDebugMode\n     */\n    protected function resetCacheInDebugMode()\n    {\n        if ($this->debugChecked) {\n            return;\n        }\n\n        if (!file_exists(app_path('blueprints'))) {\n            return;\n        }\n\n        // Checking recursive mtime of app directory\n        $currentMtime = 0;\n        $mtime = File::lastModifiedRecursive(app_path('blueprints'));\n\n        // Checking mtime of theme directory\n        if (System::hasModule('Cms')) {\n            $theme = Theme::getEditTheme() ?: Theme::getActiveTheme();\n            if ($theme && file_exists($themePath = $theme->getPath() . '/blueprints')) {\n                $mtime = max($mtime, File::lastModifiedRecursive($themePath));\n            }\n        }\n\n        // Store and compare mtime to clear cache\n        $debugFile = $this->makeCacheFile('debug');\n        try {\n            if (file_exists($debugFile)) {\n                $currentMtime = File::getRequire($debugFile)['mtime'] ?? 0;\n            }\n        }\n        catch (Exception $ex) {\n            $currentMtime = 0;\n        }\n\n        if ($mtime > $currentMtime) {\n            $this->clearCache();\n        }\n\n        try {\n            File::put(\n                $debugFile,\n                '<?php return '.var_export(compact('mtime'), true).';'\n            );\n        }\n        catch (Exception $ex) {\n        }\n\n        $this->debugChecked = true;\n    }\n\n    /**\n     * putCache\n     */\n    protected function putCache($name, array $contents): void\n    {\n        File::put(\n            $this->makeCacheFile($name),\n            '<?php return '.var_export($contents, true).';'\n        );\n    }\n\n    /**\n     * flushCache clears the memory cache\n     */\n    public static function flushCache()\n    {\n        static::$memoryCache = [];\n    }\n\n    /**\n     * makeCacheFile\n     */\n    protected function makeCacheFile($name): string\n    {\n        return cache_path(\"cms/blueprint-{$name}.php\");\n    }\n\n    /**\n     * clearCache clears the disk cache\n     */\n    public static function clearCache()\n    {\n        CacheHelper::instance()->clearBlueprintCache();\n    }\n\n    /**\n     * getActiveThemeDatasource returns the dirname for the active theme, used\n     * to filter blueprint lookups when multiple themes define the same handle.\n     */\n    protected function getActiveThemeDatasource(): ?string\n    {\n        if (!System::hasModule('Cms')) {\n            return null;\n        }\n\n        $theme = Theme::getEditTheme() ?: Theme::getActiveTheme();\n\n        return $theme ? $theme->getDirname() : null;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/BlueprintModel.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Model;\nuse Tailor\\Classes\\Blueprint;\nuse SystemException;\n\n/**\n * BlueprintModel is base class for models that use blueprints\n *\n * @package october\\support\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class BlueprintModel extends Model\n{\n    /**\n     * @var bool isBlueprintExtended prevents multiple extensions\n     */\n    protected $isBlueprintExtended = false;\n\n    /**\n     * getBlueprintDefinition returns the blueprint definition\n     */\n    abstract public function getBlueprintDefinition(): Blueprint;\n\n    /**\n     * getBlueprintAttribute\n     */\n    public function getBlueprintAttribute()\n    {\n        return $this->getBlueprintDefinition();\n    }\n\n    /**\n     * extendWithBlueprint\n     */\n    public function extendWithBlueprint(?string $uuid = null)\n    {\n        if ($this->isBlueprintExtended) {\n            return;\n        }\n\n        if ($uuid !== null) {\n            $this->setBlueprintUuid($uuid);\n        }\n\n        $uuid = $this->blueprint_uuid;\n        if ($uuid === null) {\n            return;\n        }\n\n        $this->setTable($this->getBlueprintDefinition()->getContentTableName());\n\n        $this->getContentFieldsetDefinition()->applyModelExtensions($this);\n\n        $this->isBlueprintExtended = true;\n\n        /**\n         * @event model.extendBlueprint\n         * Called when the model is extended with the blueprint, called once per model instance\n         *\n         * Example usage:\n         *\n         *     $model->bindEvent('model.extendBlueprint', function (string $uuid) use (\\October\\Rain\\Database\\Model $model) {\n         *         // Apply specific uuid actions\n         *         $model->add_status_to_history = true;\n         *     });\n         *\n         */\n        $this->fireEvent('model.extendBlueprint', [$uuid]);\n    }\n\n    /**\n     * getBlueprintUuid\n     */\n    public function getBlueprintUuid(): string\n    {\n        $uuid = $this->blueprint_uuid;\n        if (!$uuid) {\n            throw new SystemException(\"Missing content UUID. Set the attribute 'blueprint_uuid' on the model first.\");\n        }\n\n        return $uuid;\n    }\n\n    /**\n     * setBlueprintUuid\n     */\n    public function setBlueprintUuid($value)\n    {\n        $this->blueprint_uuid = $value;\n    }\n\n    /**\n     * getBlueprintGroupAttribute\n     */\n    public function getBlueprintGroupAttribute(): ?string\n    {\n        return $this->contentGroupFrom ?? null;\n    }\n\n    /**\n     * getBlueprintGroup\n     */\n    public function getBlueprintGroup(): ?string\n    {\n        $groupAttr = $this->getBlueprintGroupAttribute();\n\n        if ($groupAttr === null) {\n            return null;\n        }\n\n        $group = $this->$groupAttr;\n        if (!$group) {\n            return null;\n        }\n\n        return $group;\n    }\n\n    /**\n     * setBlueprintGroup\n     */\n    public function setBlueprintGroup($value): void\n    {\n        $groupAttr = $this->getBlueprintGroupAttribute();\n\n        if ($groupAttr !== null) {\n            $this->$groupAttr = $value;\n        }\n    }\n\n    /**\n     * getFieldsetColumnNames\n     */\n    public function getFieldsetColumnNames(): array\n    {\n        return $this->getContentFieldsetDefinition()->getContentColumnNames();\n    }\n\n    /**\n     * getFieldsetDefinition\n     */\n    public function getFieldsetDefinition(): Fieldset\n    {\n        $fieldset = BlueprintIndexer::instance()->findFieldset(\n            $this->getBlueprintUuid(),\n            $this->getBlueprintGroup()\n        );\n\n        if (!$fieldset) {\n            $fieldset = $this->getContentFieldsetDefinition();\n        }\n\n        return $fieldset;\n    }\n\n    /**\n     * getContentFieldsetDefinition\n     */\n    public function getContentFieldsetDefinition(): Fieldset\n    {\n        $uuid = $this->getBlueprintUuid();\n\n        $fieldset = BlueprintIndexer::instance()->findContentFieldset($uuid);\n\n        if (!$fieldset) {\n            throw new SystemException(\"Unable to find content fieldset definition with UUID of '{$uuid}'.\");\n        }\n\n        return $fieldset;\n    }\n\n    /**\n     * makePageUrlParams returns parameters used when linking to this record as a page\n     */\n    public function makePageUrlParams(): array\n    {\n        return [\n            'id' => $this->id,\n            'code' => $this->code,\n            'slug' => $this->slug,\n            'fullslug' => $this->fullslug\n        ];\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/BlueprintVerifier.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse App;\nuse File;\nuse Yaml;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse Symfony\\Component\\Yaml\\Exception\\ParseException;\n\n/**\n * BlueprintVerifier super class responsible for validating blueprints\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass BlueprintVerifier\n{\n    /**\n     * @var array registeredBlueprints tracks blueprints that have been validated\n     */\n    protected $registeredBlueprints = [];\n\n    /**\n     * @var array warnings collects non-fatal validation warnings\n     */\n    protected $warnings = [];\n\n    /**\n     * @var array|null knownSources stores known blueprint handles and UUIDs for source validation\n     */\n    protected $knownSources;\n\n    /**\n     * @var array reservedFieldNames are field names that cannot be used as field names.\n     * @see Tailor\\Classes\\SchemaBuilder\n     */\n    protected $reservedFieldNames = [\n        // Properties\n        'attributes',\n\n        // Columns\n        'site_id',\n        'site_root_id',\n        'created_user_id',\n        'updated_user_id',\n        'deleted_user_id',\n        'relation_id',\n        'relation_type',\n        'field_name',\n        'nest_left',\n        'nest_right',\n        'nest_depth',\n        'blueprint_uuid',\n        'is_version',\n        'primary_id',\n        'primary_attrs',\n        'content_group',\n\n        // Relations\n        'primaryRecord',\n        'drafts',\n        'versions',\n        'parent',\n        'children',\n    ];\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('tailor.blueprint.verifier');\n    }\n\n    /**\n     * verifyBlueprint\n     */\n    public function verifyBlueprint(Blueprint $blueprint)\n    {\n        $this->validateYamlSyntax($blueprint);\n        $this->validateSupportedTypes($blueprint);\n        $this->validateUniqueBlueprint($blueprint);\n        $this->validateFieldset($blueprint);\n    }\n\n    /**\n     * getWarnings returns collected validation warnings\n     */\n    public function getWarnings(): array\n    {\n        return $this->warnings;\n    }\n\n    /**\n     * clearCache resets all validation caches\n     */\n    public function clearCache(): void\n    {\n        $this->registeredBlueprints = [];\n        $this->warnings = [];\n        $this->knownSources = null;\n    }\n\n    /**\n     * sourceExists checks if a source exists as any blueprint (by handle or UUID)\n     */\n    protected function sourceExists(string $source): bool\n    {\n        $this->loadKnownSources();\n\n        return isset($this->knownSources[$source]);\n    }\n\n    /**\n     * loadKnownSources lazy-loads all blueprint handles and UUIDs for source validation\n     */\n    protected function loadKnownSources(): void\n    {\n        if ($this->knownSources !== null) {\n            return;\n        }\n\n        $this->knownSources = [];\n\n        foreach (Blueprint::listInProject() as $blueprint) {\n            if ($handle = $blueprint->handle) {\n                $this->knownSources[$handle] = true;\n            }\n\n            if ($uuid = $blueprint->uuid) {\n                $this->knownSources[$uuid] = true;\n            }\n        }\n    }\n\n    /**\n     * validateYamlSyntax checks the YAML syntax and parses attributes\n     */\n    protected function validateYamlSyntax(Blueprint $blueprint)\n    {\n        try {\n            $blueprint->attributes = (array) Yaml::parse($blueprint->content);\n        }\n        catch (ParseException $ex) {\n            $this->yamlToBlueprintException($blueprint, $ex);\n        }\n    }\n\n    /**\n     * validateSupportedTypes checks for valid blueprint types\n     */\n    protected function validateSupportedTypes(Blueprint $blueprint)\n    {\n        $supportedTypes = ['entry', 'stream', 'structure', 'single', 'mixin', 'global'];\n\n        if (in_array($blueprint->type, $supportedTypes)) {\n            return;\n        }\n\n        $lineNo = $this->findLineFromKeyValPair($blueprint->content, 'type', $blueprint->type);\n\n        $typeAsString = implode(', ', $supportedTypes);\n        throw new BlueprintException($blueprint, \"Type must be one of: {$typeAsString}.\", $lineNo);\n    }\n\n    /**\n     * validateUniqueBlueprint checks for duplicate handles and UUIDs across blueprints\n     */\n    protected function validateUniqueBlueprint(Blueprint $blueprint)\n    {\n        $filePath = $blueprint->getFilePath();\n        $theme = $blueprint->getDatasourceTheme();\n\n        // Check handle uniqueness (all blueprints share the same namespace)\n        if ($handle = $blueprint->handle) {\n            $this->validateUniqueProperty($blueprint, 'handle', $handle, $filePath, $theme);\n        }\n\n        // Check UUID uniqueness\n        if ($uuid = $blueprint->uuid) {\n            $this->validateUniqueProperty($blueprint, 'uuid', $uuid, $filePath, $theme);\n        }\n    }\n\n    /**\n     * validateUniqueProperty checks a property value is unique across blueprints.\n     * Duplicates are collected as warnings instead of throwing exceptions since\n     * the first registered blueprint (by priority order) takes precedence.\n     */\n    protected function validateUniqueProperty(Blueprint $blueprint, string $property, string $key, string $filePath, ?string $theme = null)\n    {\n        $cacheKey = $property . ':' . $key;\n\n        if (isset($this->registeredBlueprints[$cacheKey])) {\n            $existing = $this->registeredBlueprints[$cacheKey];\n            $existingPath = File::nicePath($existing['path']);\n            $value = $blueprint->$property;\n            $lineNo = $this->findLineFromKeyValPair($blueprint->content, $property, $value);\n\n            $this->warnings[] = [\n                'message' => \"Duplicate {$property} '{$value}'. Already defined in: {$existingPath}\",\n                'line' => $lineNo,\n                'file' => $filePath,\n            ];\n            return;\n        }\n\n        $this->registeredBlueprints[$cacheKey] = ['path' => $filePath, 'theme' => $theme];\n    }\n\n    /**\n     * validateFieldset\n     */\n    protected function validateFieldset(Blueprint $blueprint)\n    {\n        $fields = $blueprint->fields ?? [];\n\n        if ($blueprint instanceof EntryBlueprint && is_array($blueprint->groups)) {\n            foreach ($blueprint->groups as $group) {\n                $fields += $group['fields'] ?? [];\n            }\n        }\n\n        // Validate source references from raw config (before fieldset expansion)\n        $this->validateSourceReferences($blueprint, $fields);\n\n        $fieldset = FieldManager::instance()->makeFieldset(['fields' => $fields]);\n        $fieldset->validate();\n\n        // Check invalid and reserved field names\n        foreach ($fieldset->getAllFields() as $fieldName => $fieldObj) {\n            if (!preg_match('/^[a-zA-Z0-9\\_]+$/', $fieldName)) {\n                $lineNo = $this->findLineFromKeyValPair($blueprint->content, $fieldName, '');\n                throw new BlueprintException($blueprint, \"Invalid field name: {$fieldName}.\", $lineNo);\n            }\n\n            if (in_array($fieldName, $this->reservedFieldNames)) {\n                $lineNo = $this->findLineFromKeyValPair($blueprint->content, $fieldName, '');\n                throw new BlueprintException($blueprint, \"Field name is reserved: {$fieldName}.\", $lineNo);\n            }\n        }\n    }\n\n    /**\n     * validateSourceReferences validates source references in raw field config recursively\n     */\n    protected function validateSourceReferences(Blueprint $blueprint, array $fields)\n    {\n        foreach ($fields as $fieldName => $fieldConfig) {\n            if (!is_array($fieldConfig)) {\n                continue;\n            }\n\n            // Check source at this level\n            $source = $fieldConfig['source'] ?? null;\n            if ($source && !$this->sourceExists($source)) {\n                $lineNo = $this->findLineFromKeyValPair($blueprint->content, 'source', $source);\n                throw new BlueprintException(\n                    $blueprint,\n                    \"Invalid source reference '{$source}'. No blueprint found with this handle or UUID.\",\n                    $lineNo\n                );\n            }\n\n            // Recursively check nested fields in various structures\n            $nestedFields = $fieldConfig['form']['fields']\n                ?? $fieldConfig['fields']\n                ?? null;\n\n            if (is_array($nestedFields)) {\n                $this->validateSourceReferences($blueprint, $nestedFields);\n            }\n        }\n    }\n\n    /**\n     * findLineFromKeyValPair\n     */\n    protected function findLineFromKeyValPair($content, $key, $val)\n    {\n        $content = PHP_EOL.$content;\n        $regex = '/\\n\\s*'.preg_quote($key, '/').':\\s*'.preg_quote($val, '/').'\\s*\\n/';\n\n        if (preg_match($regex, $content, $matches, PREG_OFFSET_CAPTURE)) {\n            $charPos = $matches[0][1];\n\n            // Find line number from char position\n            list($before) = str_split($content, $charPos);\n            return strlen($before) - strlen(str_replace(\"\\n\", \"\", $before)) + 1;\n        }\n\n        return 0;\n    }\n\n    /**\n     * yamlToBlueprintException is a workaround to access protected property `rawMessage`\n     */\n    protected function yamlToBlueprintException($blueprint, $ex)\n    {\n        $lineNo = $ex->getParsedLine();\n        $ex->setSnippet('');\n        $ex->setParsedLine(-1);\n\n        throw new BlueprintException(\n            $blueprint,\n            $ex->getMessage(),\n            $lineNo,\n            $ex\n        );\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/ComponentVariable.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Config;\nuse Cms\\Classes\\ComponentBase;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Pagination\\AbstractPaginator;\nuse October\\Contracts\\Twig\\CallsAnyMethod;\nuse IteratorAggregate;\nuse JsonSerializable;\nuse ArrayAccess;\nuse Traversable;\nuse Exception;\n\n/**\n * ComponentVariable is the read-only default variable for tailor components.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ComponentVariable implements IteratorAggregate, ArrayAccess, CallsAnyMethod, JsonSerializable\n{\n    use \\Illuminate\\Support\\Traits\\ForwardsCalls;\n\n    /**\n     * @var \\Cms\\Classes\\ComponentBase component\n     */\n    protected $component;\n\n    /**\n     * @var \\Model record\n     */\n    protected $record;\n\n    /**\n     * @var bool hasBlueprint will be set to false if the blueprint is missing, and strict\n     * component configuration is disabled.\n     */\n    public $hasBlueprint = true;\n\n    /**\n     * @var bool isRecordLoaded is an internal marker\n     */\n    protected $isRecordLoaded = false;\n\n    /**\n     * __construct\n     */\n    public function __construct(ComponentBase $component)\n    {\n        $this->component = $component;\n    }\n\n    /**\n     * getComponent\n     */\n    public function getComponent()\n    {\n        return $this->component;\n    }\n\n    /**\n     * getRecord\n     */\n    public function getRecord()\n    {\n        if (!$this->isRecordLoaded) {\n            $this->loadRecord();\n        }\n\n        return $this->record;\n    }\n\n    /**\n     * getRecordQuery\n     */\n    public function getRecordQuery()\n    {\n        try {\n            return $this->component->getPrimaryRecordQuery();\n        }\n        catch (Exception $ex) {\n            if (!Config::get('cms.strict_components', false)) {\n                $this->hasBlueprint = false;\n                return null;\n            }\n\n            throw $ex;\n        }\n    }\n\n    /**\n     * loadRecord\n     */\n    protected function loadRecord()\n    {\n        try {\n            $this->record = $this->component->getPrimaryRecord();\n        }\n        catch (Exception $ex) {\n            if (!Config::get('cms.strict_components', false)) {\n                $this->hasBlueprint = false;\n                return null;\n            }\n\n            throw $ex;\n        }\n\n        $this->isRecordLoaded = true;\n    }\n\n    /**\n     * __get attributes on the component\n     */\n    public function __get($key)\n    {\n        if (!$this->isRecordLoaded) {\n            $this->loadRecord();\n        }\n\n        if ($this->record && isset($this->record->$key)) {\n            $value = $this->record->$key;\n            if ($value instanceof Collection) {\n                return $value->count() ? $value : [];\n            }\n\n            return $value;\n        }\n\n        return $this->component->$key;\n    }\n\n    /**\n     * __isset forces explicit method calls\n     */\n    public function __isset($key)\n    {\n        return true;\n    }\n\n    /**\n     * __call\n     */\n    public function __call($method, $parameters)\n    {\n        if ($query = $this->getRecordQuery()) {\n            return $this->forwardCallTo($query->newQuery(), $method, $parameters);\n        }\n\n        return null;\n    }\n\n    /**\n     * getIterator for the records, this allows empty checks.\n     */\n    public function getIterator(): Traversable\n    {\n        if (!$this->isRecordLoaded) {\n            $this->loadRecord();\n        }\n\n        if ($this->record instanceof Collection || $this->record instanceof AbstractPaginator) {\n            return $this->record->getIterator();\n        }\n\n        if ($this->record && $this->record->exists) {\n            return new Collection([$this->record]);\n        }\n\n        return new Collection;\n    }\n\n    /**\n     * offsetExists implementation\n     */\n    public function offsetExists($offset): bool\n    {\n        return isset($this->$offset);\n    }\n\n    /**\n     * offsetGet implementation\n     */\n    public function offsetGet($offset): mixed\n    {\n        return $this->$offset;\n    }\n\n    /**\n     * offsetSet is disabled (read-only)\n     */\n    public function offsetSet($offset, $value): void\n    {\n        return;\n    }\n\n    /**\n     * offsetUnset is disabled (read-only)\n     */\n    public function offsetUnset($offset): void\n    {\n        return;\n    }\n\n    /**\n     * toArray convert the variable to an array.\n     * @return array\n     */\n    public function toArray()\n    {\n        return ($record = $this->getRecord()) ? $record->toArray() : [];\n    }\n\n    /**\n     * jsonSerialize converts the object into something JSON serializable.\n     */\n    public function jsonSerialize(): array\n    {\n        return $this->toArray();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/ContentFieldBase.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\FilterElement;\nuse October\\Rain\\Element\\Form\\FieldDefinition;\n\n/**\n * ContentFieldBase class for content fields\n *\n * @method ContentFieldBase column(array $config) column configuration\n * @method ContentFieldBase scope(array $config) scope configuration\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nabstract class ContentFieldBase extends FieldDefinition\n{\n    /**\n     * defineConfig for the field\n     */\n    public function defineConfig(array $config)\n    {\n    }\n\n    /**\n     * validateConfig for the field\n     */\n    public function validateConfig()\n    {\n    }\n\n    /**\n     * extendModelObject\n     */\n    public function extendModelObject($model)\n    {\n    }\n\n    /**\n     * extendBatchModelObject is used for import/export context\n     */\n    public function extendBatchModelObject($model)\n    {\n    }\n\n    /**\n     * extendDatabaseTable\n     */\n    public function extendDatabaseTable($table)\n    {\n    }\n\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n    }\n\n    /**\n     * defineBatchListColumn is used for import/export context\n     */\n    public function defineBatchListColumn(ListElement $list, $context = null)\n    {\n    }\n\n    /**\n     * defineFormField\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n    }\n\n    /**\n     * defineBatchFormField is used for import/export context\n     */\n    public function defineBatchFormField(FormElement $form, $context = null)\n    {\n    }\n\n    /**\n     * defineFilterScope\n     */\n    public function defineFilterScope(FilterElement $filter, $context = null)\n    {\n    }\n\n    /**\n     * extendModel\n     */\n    public function extendModel($model)\n    {\n        $this->extendModelObject($model);\n        $this->extendModelValidation($model);\n        $this->extendModelMultisite($model);\n    }\n\n    /**\n     * extendModelValidation\n     */\n    public function extendModelValidation($model)\n    {\n        if ($this->validation) {\n            $model->rules[$this->fieldName] = $this->validation;\n        }\n        elseif ($this->validation === false) {\n            unset($model->rules[$this->fieldName]);\n        }\n\n        if ($this->validationName) {\n            $model->attributeNames[$this->fieldName] = $this->validationName;\n        }\n\n        if ($this->validationMessages) {\n            foreach ($this->validationMessages as $rule => $message) {\n                $model->customMessages[$this->fieldName.'.'.$rule] = $message;\n            }\n        }\n    }\n\n    /**\n     * extendModelMultisite flags relations as propagatable and must come after\n     * the extendModelObject call\n     */\n    public function extendModelMultisite($model)\n    {\n        if ($this->translatable === false || $this->propagatable === true) {\n            if (method_exists($model, 'addPropagatable')) {\n                $model->addPropagatable($this->fieldName);\n            }\n        }\n    }\n\n    /**\n     * evalConfig from an array and apply them to the object\n     */\n    public function evalConfig(array $config)\n    {\n        $this->defineConfig($config);\n    }\n\n    /**\n     * validate\n     */\n    public function validate()\n    {\n        $this->validateConfig();\n    }\n\n    /**\n     * transferConfig is used to reuse base configuration on a secondary definition,\n     * such as a list column or filter scope.\n     */\n    protected function transferConfig($toElement, array $transferable)\n    {\n        foreach ($transferable as $name) {\n            if ($this->{$name} !== null) {\n                $toElement->{$name}($this->{$name});\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/EditorExtension.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Lang;\nuse BackendAuth;\nuse Editor\\Classes\\ExtensionBase;\nuse Backend\\VueComponents\\TreeView\\SectionList;\nuse Backend\\VueComponents\\DropdownMenu\\ItemDefinition;\nuse SystemException;\n\n/**\n * EditorExtension adds Tailor objects to October Editor IDE\n */\nclass EditorExtension extends ExtensionBase\n{\n    use \\Tailor\\Classes\\EditorExtension\\HasExtensionState;\n    use \\Tailor\\Classes\\EditorExtension\\HasExtensionCrud;\n\n    const DOCUMENT_TYPE_BLUEPRINT = 'tailor-blueprint';\n    const DOCUMENT_TYPE_THEME_BLUEPRINT = 'tailor-theme-blueprint';\n\n    const ICON_COLOR_BLUEPRINT = '#1563B5';\n\n    const DOCUMENT_TYPE_PERMISSIONS = [\n        EditorExtension::DOCUMENT_TYPE_BLUEPRINT => ['editor.tailor_blueprints'],\n        EditorExtension::DOCUMENT_TYPE_THEME_BLUEPRINT => ['editor.tailor_blueprints']\n    ];\n\n    /**\n     * getNamespace returns unique extension namespace\n     */\n    public function getNamespace(): string\n    {\n        return 'tailor';\n    }\n\n    /**\n     * getExtensionSortOrder affects the extension position in the Editor Navigator\n     */\n    public function getExtensionSortOrder()\n    {\n        return 20;\n    }\n\n    /**\n     * Returns a list of JavaScript files required for the extension.\n     * @return array Returns an associative array of JavaScript file paths and attributes.\n     */\n    public function listJsFiles()\n    {\n        return [\n            '/modules/tailor/assets/js/tailor.editor.extension.js'\n        ];\n    }\n\n    /**\n     * getClientSideLangStrings returns a list of language strings required by the\n     * client-side extension controller.\n     * @return array\n     */\n    public function getClientSideLangStrings()\n    {\n        return [\n            'tailor::lang.blueprint.saved',\n            'tailor::lang.blueprint.reloaded',\n            'tailor::lang.blueprint.deleted',\n            'tailor::lang.blueprint.new',\n            'tailor::lang.blueprint.create_directory',\n            'tailor::lang.blueprint.rename',\n            'tailor::lang.blueprint.delete',\n            'tailor::lang.blueprint.editor_yaml',\n            'tailor::lang.blueprint.upload_files',\n            'tailor::lang.blueprint.migrating',\n            'tailor::lang.blueprint.migrated',\n            'backend::lang.form.save',\n            'backend::lang.form.delete',\n            'tailor::lang.blueprint.apply',\n            'tailor::lang.blueprint.apply_tooltip',\n            'tailor::lang.blueprint.mixin',\n            'tailor::lang.blueprint.entry',\n            'tailor::lang.blueprint.global',\n            'tailor::lang.blueprint.stream',\n            'tailor::lang.blueprint.single',\n            'tailor::lang.blueprint.structure'\n        ];\n    }\n\n    /**\n     * Returns a list of Vue components required for the extension.\n     * @return array Array of Vue component class names\n     */\n    public function listVueComponents()\n    {\n        return [\n            // Important - load modules that use `define()` before Monaco. Monaco pollutes\n            // the global space and breaks `define()`.\n            // See https://github.com/microsoft/vscode-loader/issues/19#issuecomment-439810640\n            //\n            \\Backend\\VueComponents\\RichEditorDocumentConnector::class,\n            \\Tailor\\VueComponents\\BlueprintEditor::class\n        ];\n    }\n\n    /**\n     * listNavigatorSections initializes extension's sidebar Navigator sections.\n     */\n    public function listNavigatorSections(SectionList $sectionList, $documentType = null)\n    {\n        $user = BackendAuth::getUser();\n\n        $tailorSection = $sectionList->addSection(__(\"Tailor\") . ' - ' . __(\"Blueprints\"), 'tailor');\n        $tailorSection->setHasApiMenuItems(true);\n        $tailorSection->setUserDataElement('uniqueKey', 'tailor:root');\n\n        $this->addSectionMenuItems($tailorSection);\n\n        if (\n            EditorExtension::hasAccessToDocType($user, self::DOCUMENT_TYPE_BLUEPRINT) &&\n            (!$documentType || $documentType === self::DOCUMENT_TYPE_BLUEPRINT)\n        ) {\n            $this->addBlueprintsNavigatorNodes($tailorSection);\n        }\n\n        if (\n            EditorExtension::hasAccessToDocType($user, self::DOCUMENT_TYPE_THEME_BLUEPRINT) &&\n            (!$documentType || $documentType === self::DOCUMENT_TYPE_THEME_BLUEPRINT)\n        ) {\n            $this->addThemeBlueprintsNavigatorNodes($tailorSection);\n        }\n    }\n\n    /**\n     * getNewDocumentsData\n     */\n    public function getNewDocumentsData()\n    {\n        return [\n            EditorExtension::DOCUMENT_TYPE_BLUEPRINT => $this->getTailorBlueprintNewDocumentData(),\n            EditorExtension::DOCUMENT_TYPE_THEME_BLUEPRINT => $this->getTailorThemeBlueprintNewDocumentData()\n        ];\n    }\n\n    /**\n     * hasAccessToDocType\n     */\n    public static function hasAccessToDocType($user, $documentType)\n    {\n        if (!array_key_exists($documentType, EditorExtension::DOCUMENT_TYPE_PERMISSIONS)) {\n            throw new SystemException(sprintf('Unknown document type: %s', $documentType));\n        }\n\n        return $user->hasAnyAccess(EditorExtension::DOCUMENT_TYPE_PERMISSIONS[$documentType]);\n    }\n\n    /**\n     * getCustomData returns custom state data required for the extension client-side controller\n     */\n    public function getCustomData(): array\n    {\n        return [\n            'blueprintTemplates' => [\n                'entry' => $this->getBlueprintTemplate('entry'),\n                'single' => $this->getBlueprintTemplate('single'),\n                'stream' => $this->getBlueprintTemplate('stream'),\n                'structure' => $this->getBlueprintTemplate('structure'),\n                'mixin' => $this->getBlueprintTemplate('mixin'),\n                'global' => $this->getBlueprintTemplate('global'),\n            ]\n        ];\n    }\n\n    /**\n     * getBlueprintTemplate\n     */\n    protected function getBlueprintTemplate($type)\n    {\n        $path = __DIR__.'/editorextension/templates/'.$type.'.yaml';\n        if (!is_file($path)) {\n            return;\n        }\n\n        return file_get_contents($path);\n    }\n\n    /**\n     * addSectionMenuItems\n     */\n    protected function addSectionMenuItems($section)\n    {\n        $user = BackendAuth::getUser();\n\n        $section->addMenuItem(ItemDefinition::TYPE_TEXT, Lang::get('tailor::lang.editor.refresh'), 'tailor:refresh-navigator')\n            ->setIcon('icon-refresh');\n\n        $createMenuItem = new ItemDefinition(ItemDefinition::TYPE_TEXT, Lang::get('tailor::lang.editor.create'), 'tailor:create');\n        $createMenuItem->setIcon('icon-create');\n\n        $menuConfiguration = [\n            [\n                'label' => __(\"App Blueprint\"),\n                'permission' => 'editor.tailor_blueprints',\n                'document' => EditorExtension::DOCUMENT_TYPE_BLUEPRINT\n            ],\n            [\n                'label' => __(\"Theme Blueprint\"),\n                'permission' => 'editor.tailor_blueprints',\n                'document' => EditorExtension::DOCUMENT_TYPE_THEME_BLUEPRINT\n            ]\n        ];\n\n        foreach ($menuConfiguration as $itemConfig) {\n            $permission = $itemConfig['permission'];\n            if (!$user->hasAnyAccess([$permission])) {\n                continue;\n            }\n\n            $createMenuItem->addItemObject(\n                $section->addCreateMenuItem(\n                    ItemDefinition::TYPE_TEXT,\n                    Lang::get($itemConfig['label']),\n                    'tailor:create-document@'.$itemConfig['document']\n                )\n            );\n        }\n\n        if ($createMenuItem->hasItems()) {\n            $section->addMenuItemObject($createMenuItem);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/FieldManager.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse App;\nuse Str;\nuse System;\nuse Tailor\\Classes\\Fieldset;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Tailor\\Classes\\ContentFieldBase;\nuse Tailor\\ContentFields\\MixinField;\nuse Tailor\\ContentFields\\GenericField;\nuse Tailor\\ContentFields\\FallbackField;\nuse Tailor\\Classes\\Blueprint\\MixinBlueprint;\nuse System\\Classes\\PluginManager;\n\n/**\n * FieldManager\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FieldManager\n{\n    /**\n     * @var array customFields stored in the form of ['FieldClass' => $fieldInfo].\n     */\n    protected $customFields;\n\n    /**\n     * @var array customFieldCallbacks cache of form widget registration callbacks.\n     */\n    protected $customFieldCallbacks = [];\n\n    /**\n     * @var array customFieldHints keyed by their code/alias.\n     */\n    protected $customFieldHints;\n\n    /**\n     * @var int mixinRewriteCount is an incremental number used for rewriting mixin field names.\n     */\n    protected $mixinRewriteCount = 0;\n\n    /**\n     * @var PluginManager\n     */\n    protected $pluginManager;\n\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('tailor.fields');\n    }\n\n    /**\n     * __construct this singleton.\n     */\n    public function __construct()\n    {\n        $this->pluginManager = PluginManager::instance();\n    }\n\n    /**\n     * makeField makes a custom field or returns a fallback one.\n     */\n    public function makeField(string $name, $config = []): ContentFieldBase\n    {\n        $type = $config['type'] ?? null;\n        $field = $this->makeFallbackField($name, $type);\n        if (!$type) {\n            return $field;\n        }\n\n        $className = $this->getCustomFieldClassName($type);\n        if ($className && class_exists($className)) {\n            $field = new $className(['fieldName' => $name]);\n        }\n\n        return $field;\n    }\n\n    /**\n     * makeFallbackField\n     */\n    protected function makeFallbackField($name, $type): ContentFieldBase\n    {\n        $genericTypes = [\n            'balloon-selector',\n            'checkbox',\n            'checkboxlist',\n            'dropdown',\n            'email',\n            'number',\n            'password',\n            'radio',\n            'switch',\n            'text',\n            'textarea',\n        ];\n\n        if (in_array($type, $genericTypes)) {\n            return new GenericField(['fieldName' => $name]);\n        }\n\n        return new FallbackField(['fieldName' => $name]);\n    }\n\n    /**\n     * listCustomFields returns a list of registered content fields.\n     */\n    public function listCustomFields(): array\n    {\n        if ($this->customFields !== null) {\n            return $this->customFields;\n        }\n\n        $this->customFields = [];\n\n        // Load external fields\n        foreach ($this->customFieldCallbacks as $callback) {\n            $callback($this);\n        }\n\n        // Load module fields\n        foreach (System::listModules() as $module) {\n            if ($provider = App::getProvider($module . '\\\\ServiceProvider')) {\n                $this->loadCustomFieldsFromArray($provider->registerContentFields());\n            }\n        }\n\n        // Load plugin fields\n        $plugins = $this->pluginManager->getPlugins();\n        foreach ($plugins as $plugin) {\n            $this->loadCustomFieldsFromArray($plugin->registerContentFields());\n        }\n\n        // Load app items\n        if ($app = App::getProvider(\\App\\Provider::class)) {\n            $this->loadCustomFieldsFromArray($app->registerContentFields());\n        }\n\n        return $this->customFields;\n    }\n\n    /**\n     * loadExtensionsFromArray helper\n     */\n    protected function loadCustomFieldsFromArray($fields)\n    {\n        if (!is_array($fields)) {\n            return;\n        }\n\n        foreach ($fields as $className => $fieldInfo) {\n            $this->registerCustomField($className, $fieldInfo);\n        }\n    }\n\n    /**\n     * registerCustomField registers a form field.\n     */\n    public function registerCustomField(string $className, $fieldInfo = null): void\n    {\n        if (!is_array($fieldInfo)) {\n            $fieldInfo = ['code' => $fieldInfo];\n        }\n\n        $fieldCode = $fieldInfo['code'] ?? null;\n\n        if (!$fieldCode) {\n            $fieldCode = Str::getClassId($className);\n        }\n\n        $this->customFields[$className] = $fieldInfo;\n        $this->customFieldHints[$fieldCode] = $className;\n    }\n\n    /**\n     * registerCustomFields manually registers form widget for consideration. Usage:\n     *\n     *     FieldManager::registerCustomFields(function ($manager) {\n     *         $manager->registerCustomField(\\Tailor\\ContentFields\\Entries::class, 'entries');\n     *     });\n     *\n     */\n    public function registerCustomFields(callable $definitions)\n    {\n        $this->customFieldCallbacks[] = $definitions;\n    }\n\n    /**\n     * resolveCustomField returns a class name from a custom field code/alias\n     */\n    public function resolveCustomField(string $name): string\n    {\n        return $this->getCustomFieldClassName($name) ?: $name;\n    }\n\n    /**\n     * resolveCustomField returns a class name from a custom field code/alias\n     */\n    protected function getCustomFieldClassName(string $name): ?string\n    {\n        if ($this->customFields === null) {\n            $this->listCustomFields();\n        }\n\n        $hints = $this->customFieldHints;\n\n        if (isset($hints[$name])) {\n            return $hints[$name];\n        }\n\n        $_name = Str::normalizeClassName($name);\n        if (isset($this->customFields[$_name])) {\n            return $_name;\n        }\n\n        return null;\n    }\n\n    //\n    // Fieldsets\n    //\n\n    /**\n     * makeFieldset will add fields to the fieldset based on supplied config\n     */\n    public function makeFieldset($config = []): Fieldset\n    {\n        $fieldset = new Fieldset($config);\n        $manager = BlueprintIndexer::instance();\n\n        // Populate fields\n        $fields = $config['fields'] ?? [];\n        foreach ($fields as $fieldName => $fieldConfig) {\n            $field = $this->makeField($fieldName, $fieldConfig);\n            if (is_array($fieldConfig)) {\n                $field->useConfig($fieldConfig);\n            }\n\n            if ($field instanceof MixinField) {\n                if (($mixinUuid = $manager->hasMixin($field->source)) && ($mixin = $manager->findMixin($mixinUuid))) {\n                    $this->populateFieldsetFromMixin($fieldset, $field, $mixin);\n                }\n            }\n            else {\n                $fieldset->addField($fieldName, $field);\n            }\n        }\n\n        $this->populateFieldsetFromExternalColumns($fieldset, $config);\n        $this->populateFieldsetFromExternalScopes($fieldset, $config);\n        $this->populateFieldsetFromExternalValidation($fieldset, $config);\n\n        return $fieldset;\n    }\n\n    /**\n     * populateFieldsetFromMixin merges the parent field with the referenced\n     * fields then mixes them in to the collection\n     */\n    protected function populateFieldsetFromMixin(Fieldset $fieldset, ContentFieldBase $parentField, MixinBlueprint $mixin): void\n    {\n        $manager = BlueprintIndexer::instance();\n        $fields = $mixin->fields ?? [];\n\n        foreach ($fields as $fieldName => $fieldConfig) {\n            $parentConfig = array_except($parentField->config, ['fieldName', 'valueFrom', 'type']);\n            $field = $this->makeField($fieldName, $fieldConfig);\n            $field->useConfig($fieldConfig + $parentConfig);\n\n            if ($field instanceof MixinField) {\n                if (($mixinUuid = $manager->hasMixin($field->source)) && ($mixin = $manager->findMixin($mixinUuid))) {\n                    $this->populateFieldsetFromMixin($fieldset, $field, $mixin);\n                }\n            }\n            else {\n                $fieldset->addField($fieldName, $field);\n            }\n        }\n    }\n\n    /**\n     * populateFieldsetFromExternalColumns\n     */\n    protected function populateFieldsetFromExternalColumns(Fieldset $fieldset, $config)\n    {\n        if (!isset($config['columns']) || !is_array($config['columns'])) {\n            return;\n        }\n\n        foreach ($fieldset->getAllFields() as $fieldName => $fieldObj) {\n            if (array_key_exists($fieldName, $config['columns'])) {\n                $this->convertExternalConfigForColumn($fieldObj, $config['columns'][$fieldName]);\n            }\n        }\n    }\n\n    /**\n     * convertExternalConfig\n     */\n    protected function convertExternalConfigForColumn($field, $config)\n    {\n        if ($config === false) {\n            $field->column(false);\n        }\n        elseif ($config === 'invisible') {\n            $field->column(['invisible' => true]);\n        }\n        elseif (is_string($config)) {\n            $field->column(['label' => $config]);\n        }\n        elseif (is_array($config)) {\n            $field->column($config);\n        }\n    }\n\n    /**\n     * populateFieldsetFromExternalScopes\n     */\n    protected function populateFieldsetFromExternalScopes(Fieldset $fieldset, $config)\n    {\n        if (!isset($config['scopes']) || !is_array($config['scopes'])) {\n            return;\n        }\n\n        foreach ($fieldset->getAllFields() as $fieldName => $fieldObj) {\n            if (array_key_exists($fieldName, $config['scopes'])) {\n                $this->convertExternalConfigForScope($fieldObj, $config['scopes'][$fieldName]);\n            }\n        }\n    }\n\n    /**\n     * convertExternalConfig\n     */\n    protected function convertExternalConfigForScope($field, $config)\n    {\n        if ($config === false) {\n            $field->scope(false);\n        }\n        elseif (is_string($config)) {\n            $field->scope(['label' => $config]);\n        }\n        elseif (is_array($config)) {\n            $field->scope($config);\n        }\n    }\n\n    /**\n     * populateFieldsetFromExternalValidation\n     */\n    protected function populateFieldsetFromExternalValidation(Fieldset $fieldset, $config)\n    {\n        if (!isset($config['validation']) || !is_array($config['validation'])) {\n            return;\n        }\n\n        foreach ($fieldset->getAllFields() as $fieldName => $fieldObj) {\n            $this->convertExternalConfigForValidation($fieldObj, $config['validation'], $fieldName);\n        }\n    }\n\n    /**\n     * convertExternalConfigForValidation\n     */\n    protected function convertExternalConfigForValidation($field, $config, $fieldName)\n    {\n        $rules = $config['rules'] ?? [];\n        $attributeNames = $config['attributeNames'] ?? [];\n        $customMessages = $config['customMessages'] ?? [];\n\n        if (isset($rules[$fieldName])) {\n            $field->validation($rules[$fieldName]);\n        }\n\n        if (isset($attributeNames[$fieldName])) {\n            $field->validationName($attributeNames[$fieldName]);\n        }\n\n        $validationMessages = [];\n        foreach ($customMessages as $key => $message) {\n            if (starts_with($key, $fieldName.'.')) {\n                $shortKey = substr($key, strlen($fieldName.'.'));\n                $validationMessages[$shortKey] = $message;\n            }\n        }\n\n        if (count($validationMessages) > 0) {\n            $field->validationMessages($validationMessages);\n        }\n    }\n\n    /**\n     * rewriteMixinNames changes the mixin field names to avoid collisions.\n     * Mixins are suffixed with a counter key.\n     */\n    public function rewriteMixinNames(array $fields): array\n    {\n        foreach ($fields as $code => $field) {\n            if (trim(strtolower($field['type'] ?? '')) === 'mixin') {\n                $fields[$code.$this->mixinRewriteCount++] = $field;\n                unset($fields[$code]);\n            }\n        }\n\n        return $fields;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/Fieldset.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Db;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\FilterElement;\nuse October\\Rain\\Element\\Form\\FieldDefinition;\nuse October\\Rain\\Element\\Form\\FieldsetDefinition;\nuse October\\Rain\\Database\\Schema\\Blueprint as DbBlueprint;\nuse SystemException;\n\n/**\n * Fieldset definition is a group of fields and can come from various sources\n *\n * @method Fieldset contentUuid(string $contentUuid) contentUuid\n * @method Fieldset name(string $name) name\n * @method Fieldset handle(string $handle) handle\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Fieldset extends FieldsetDefinition\n{\n    /**\n     * @var array fieldsWithContext captures fields that use context\n     */\n    protected $fieldsWithContext = [];\n\n    /**\n     * addField to the fieldset collection, with context support\n     */\n    public function addField($name, FieldDefinition $field)\n    {\n        if (strpos($name, '@') !== false) {\n            [$name, $context] = explode('@', $name, 2);\n            $field->fieldName($name);\n            $field->context($context);\n            $this->fieldsWithContext[$context][$name] = $field;\n        }\n\n        // Take first field as core definition\n        if (isset($this->fields[$name])) {\n            return;\n        }\n\n        parent::addField($name, $field);\n    }\n\n    /**\n     * getFieldInContext checks if a field exists within a given context\n     */\n    public function getFieldInContext($name, $context)\n    {\n        return $this->fieldsWithContext[$context][$name] ?? null;\n    }\n\n    /**\n     * validate all the fields\n     */\n    public function validate()\n    {\n        foreach ($this->getAllFields() as $field) {\n            $field->validate();\n        }\n    }\n\n    /**\n     * applyModelExtensions\n     */\n    public function applyModelExtensions($model, $context = null)\n    {\n        if (!$model) {\n            throw new SystemException('Cannot extend an empty model.');\n        }\n\n        $fillable = [];\n\n        foreach ($this->getAllFields() as $field) {\n            if (in_array($context, ['export', 'import'])) {\n                $field->extendBatchModelObject($model);\n            }\n            else {\n                $field->extendModel($model);\n            }\n\n            if ($field->guarded !== true) {\n                $fillable[] = $field->fieldName;\n            }\n        }\n\n        if ($fillable) {\n            $model->addFillable($fillable);\n        }\n    }\n\n    /**\n     * applyModelExtensions\n     */\n    public function applyBatchModelExtensions($model)\n    {\n    }\n\n    /**\n     * defineAllFormFields\n     */\n    public function defineAllFormFields(FormElement $form, $options = [])\n    {\n        extract(array_merge([\n            'context' => null,\n            'except' => []\n        ], $options));\n\n        // Set the default tab\n        $form->getFormFieldset()->defaultTab('Content');\n\n        // Define the fields\n        foreach ($this->getAllFields() as $field) {\n            if (in_array($field->fieldName, $except)) {\n                continue;\n            }\n\n            if ($contextField = $this->getFieldInContext($field->fieldName, $context)) {\n                $field = $contextField;\n            }\n\n            if (!$field->matchesContext($context)) {\n                continue;\n            }\n\n            $field->defineFormField($form, $context);\n        }\n    }\n\n    /**\n     * defineAllListColumns\n     */\n    public function defineAllListColumns(ListElement $list, $options = [])\n    {\n        extract(array_merge([\n            'context' => null,\n            'except' => []\n        ], $options));\n\n        foreach ($this->getAllFields() as $field) {\n            if (in_array($field->fieldName, $except)) {\n                continue;\n            }\n\n            if ($field->column === 'invisible') {\n                $field->column = ['invisible' => true];\n            }\n\n            if ($field->column !== false) {\n                if (in_array($context, ['export', 'import'])) {\n                    $field->defineBatchListColumn($list, $context);\n                }\n                else {\n                    $field->defineListColumn($list, $context);\n                }\n            }\n        }\n    }\n\n    /**\n     * defineAllFilterScopes\n     */\n    public function defineAllFilterScopes(FilterElement $filter, $options = [])\n    {\n        extract(array_merge([\n            'context' => null,\n            'except' => []\n        ], $options));\n\n        foreach ($this->getAllFields() as $field) {\n            if (in_array($field->fieldName, $except)) {\n                continue;\n            }\n\n            if ($field->scope !== false) {\n                $field->defineFilterScope($filter, $context);\n            }\n        }\n    }\n\n    /**\n     * getContentColumnNames spins over every field to determine the actual column\n     * names that it uses in the database, as opposed to its field name\n     */\n    public function getContentColumnNames()\n    {\n        $columnNames = [];\n\n        // Lazy load the grammar\n        Db::connection()->getSchemaBuilder();\n\n        $table = new DbBlueprint(Db::connection(), 'temp');\n        foreach ($this->getAllFields() as $name => $fieldObj) {\n            if (!str_starts_with($name, '_')) {\n                $fieldObj->extendDatabaseTable($table);\n            }\n        }\n\n        foreach ($table->getColumns() as $column) {\n            if (isset($column['name'])) {\n                $columnNames[] = $column['name'];\n            }\n        }\n\n        return $columnNames;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/NavigationItem.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Backend;\nuse BackendMenu;\nuse October\\Rain\\Element\\Navigation\\ItemDefinition;\nuse System\\Classes\\SettingsManager;\n\n/**\n * NavigationItem\n *\n * @method NavigationItem mode(string $mode) mode can be: content, settings, primary, secondary\n * @method NavigationItem category(string $category) category is used by settings modes\n * @method NavigationItem description(string $description) description is used by settings modes\n * @method NavigationItem uuid(string $uuid) uuid is uuid sourced from the blueprint\n * @method NavigationItem handle(string $handle) handle sourced from the blueprint\n * @method NavigationItem parent(string $parent) parent is a parent uuid and used by secondary modes\n * @method NavigationItem parentCode(string $parentCode) parentCode is a parent code and used by secondary modes\n * @method NavigationItem permissionCode(string $permissionCode) permissionCode for a secondary item\n * @method NavigationItem itemType(string $itemType) itemType\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass NavigationItem extends ItemDefinition\n{\n    const MODE_CONTENT = 'content';\n    const MODE_SETTINGS = 'settings';\n    const MODE_PRIMARY = 'primary';\n    const MODE_SECONDARY = 'secondary';\n\n    /**\n     * initDefaultValues for this scope\n     */\n    protected function initDefaultValues()\n    {\n        parent::initDefaultValues();\n\n        $this\n            ->icon('icon-copy')\n        ;\n    }\n\n    /**\n     * evalConfig from an array and apply them to the object\n     */\n    public function evalConfig(array $config)\n    {\n        $this->mode = $this->processItemMode($this->config);\n    }\n\n    /**\n     * processItemMode\n     */\n    protected function processItemMode($config)\n    {\n        $parent = $config['parent'] ?? null;\n        if ($parent === static::MODE_SETTINGS || $parent === static::MODE_CONTENT) {\n            return $parent;\n        }\n\n        if ($parent) {\n            return static::MODE_SECONDARY;\n        }\n\n        if ($config['hasPrimary'] ?? false) {\n            return static::MODE_PRIMARY;\n        }\n\n        return $config['mode'] ?? 'content';\n    }\n\n    /**\n     * toBackendMenuArray\n     */\n    public function toBackendMenuArray(): array\n    {\n        $result = [\n            'label' => $this->label,\n            'icon' => $this->icon,\n            'iconSvg' => $this->iconSvg,\n            'url' => Backend::url($this->url),\n            'order' => $this->order,\n            'itemType' => $this->itemType,\n        ];\n\n        if ($this->permissionCode) {\n            $result['permissions'] = (array) $this->permissionCode;\n        }\n\n        return $result;\n    }\n\n    /**\n     * toBackendSettingsArray\n     */\n    public function toBackendSettingsArray(): array\n    {\n        $result = [\n            'label' => $this->label,\n            'description' => $this->description,\n            'category' => $this->category,\n            'icon' => $this->icon,\n            'url' => Backend::url($this->url),\n            'order' => $this->order,\n        ];\n\n        if ($this->permissionCode) {\n            $result['permissions'] = (array) $this->permissionCode;\n        }\n\n        return $result;\n    }\n\n    /**\n     * setBackendControllerContext\n     */\n    public function setBackendControllerContext()\n    {\n        if ($this->mode === static::MODE_SETTINGS) {\n            BackendMenu::setContext('October.System', 'system', 'settings');\n            SettingsManager::setContext('October.Tailor', $this->code);\n        }\n        elseif ($this->mode === static::MODE_CONTENT) {\n            BackendMenu::setContext('October.Tailor', 'tailor', $this->code);\n        }\n        elseif ($this->mode === static::MODE_PRIMARY) {\n            BackendMenu::setContext('October.Tailor', $this->code, $this->code);\n        }\n        elseif ($this->mode === static::MODE_SECONDARY) {\n            BackendMenu::setContext('October.Tailor', $this->parentCode, $this->code);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/PermissionItem.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse October\\Rain\\Element\\ElementBase;\n\n/**\n * PermissionItem\n *\n * @method PermissionItem prefix(string $prefix) code\n * @method PermissionItem label(string $label) label\n * @method PermissionItem baseLabel(string $baseLabel) baseLabel\n * @method PermissionItem permissions(array $permissions) permissions\n * @method PermissionItem uuid(string $uuid) uuid is uuid sourced from the blueprint\n * @method PermissionItem handle(string $handle) handle sourced from the blueprint\n * @method PermissionItem useMulti(bool $useMulti) useMulti\n * @method PermissionItem usePublish(bool $usePublish) usePublish\n * @method PermissionItem useDrafts(bool $useDrafts) useDrafts\n * @method PermissionItem useOwners(bool $useOwners) useOwners\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PermissionItem extends ElementBase\n{\n    /**\n     * toBackendPermissionArray\n     */\n    public function toBackendPermissionArray()\n    {\n        $result = [];\n        $perms = [];\n\n        // Common item\n        $baseCode = $this->prefix;\n        $perms[$baseCode] = $this->baseLabel;\n\n        if ($this->useMulti) {\n            $perms[$baseCode.'.create'] = __('Create Entry');\n        }\n\n        if ($this->usePublish) {\n            $perms[$baseCode.'.publish'] = __('Publish Entry');\n        }\n\n        if ($this->useMulti) {\n            $perms[$baseCode.'.delete'] = __('Delete Entry');\n        }\n\n        if ($this->useOwners) {\n            $perms[$baseCode.'.other_entries'] = __('Update Other Author Entry');\n            $perms[$baseCode.'.other_entries.publish'] = __('Publish Other Author Entry');\n            $perms[$baseCode.'.other_entries.delete'] = __('Delete Other Author Entry');\n\n            if ($this->useDrafts) {\n                $perms[$baseCode.'.other_drafts'] = __('Update Other Author Draft');\n                $perms[$baseCode.'.other_drafts.publish'] = __('Publish Other Author Draft');\n                $perms[$baseCode.'.other_drafts.delete'] = __('Delete Other Author Draft');\n            }\n        }\n\n        foreach ($perms as $perm => $label) {\n            $result[$perm] = [\n                'label' => $label,\n                'tab' => \"Tailor\",\n                'order' => 900\n            ];\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/PresenceVerifier.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Illuminate\\Validation\\DatabasePresenceVerifier;\n\n/**\n * PresenceVerifier adds custom logic to exclude drafts and versions\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PresenceVerifier extends DatabasePresenceVerifier\n{\n    /**\n     * @var string|null draftModeColumn\n     */\n    protected $draftModeColumn = null;\n\n    /**\n     * @var string|null isVersionColumn\n     */\n    protected $isVersionColumn = null;\n\n    /**\n     * @var string|null deletedAtColumn\n     */\n    protected $deletedAtColumn = null;\n\n    /**\n     * setDraftMode\n     */\n    public function setDraftMode($column = null)\n    {\n        $this->draftModeColumn = $column;\n    }\n\n    /**\n     * setIsVersion\n     */\n    public function setIsVersion($column = null)\n    {\n        $this->isVersionColumn = $column;\n    }\n\n    /**\n     * setDeletedAt\n     */\n    public function setDeletedAt($column = null)\n    {\n        $this->deletedAtColumn = $column;\n    }\n\n    /**\n     * addConditions to the query.\n     *\n     * @param  \\Illuminate\\Database\\Query\\Builder  $query\n     * @param  array  $conditions\n     * @return \\Illuminate\\Database\\Query\\Builder\n     */\n    protected function addConditions($query, $conditions)\n    {\n        $query = parent::addConditions($query, $conditions);\n\n        if ($this->draftModeColumn) {\n            $query->where($this->draftModeColumn, \\Tailor\\Classes\\Scopes\\DraftableScope::MODE_PUBLISHED);\n        }\n\n        if ($this->isVersionColumn) {\n            $query->where($this->isVersionColumn, false);\n        }\n\n        if ($this->deletedAtColumn) {\n            $query->whereNull($this->deletedAtColumn);\n        }\n\n        return $query;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/RecordIndexer.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse App;\n\n/**\n * RecordIndexer super class responsible for indexing record models\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RecordIndexer\n{\n    /**\n     * instance creates a new instance of this singleton\n     */\n    public static function instance(): static\n    {\n        return App::make('tailor.record.indexer');\n    }\n\n    /**\n     * process\n     */\n    public function process($model)\n    {\n        if ($model->isEntryStructure()) {\n            $this->processFullSlug($model);\n        }\n    }\n\n    /**\n     * processFullSlug\n     */\n    public function processFullSlug($model)\n    {\n        $proposedSlug = $this->makeFullSlugPath($model);\n\n        if ($model->fullslug != $proposedSlug) {\n            $model->fullslug = $proposedSlug;\n            $model->save();\n        }\n\n        if ($children = $model->children) {\n            foreach ($children as $child) {\n                $this->processFullSlug($child);\n            }\n        }\n    }\n\n    /**\n     * makeFullSlugPath\n     */\n    protected function makeFullSlugPath($model, $fullslug = '')\n    {\n        $fullslug = $model->slug . '/' . $fullslug;\n\n        if ($parent = $model->parent()->withoutGlobalScopes()->first()) {\n            $fullslug = $this->makeFullSlugPath($parent, $fullslug);\n        }\n\n        return rtrim($fullslug, '/');\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/SchemaBuilder.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Db;\nuse Schema;\nuse SystemException;\nuse Tailor\\Classes\\Fieldset;\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Models\\ContentSchema;\nuse Tailor\\Classes\\Blueprint\\StreamBlueprint;\nuse Tailor\\Classes\\Blueprint\\StructureBlueprint;\nuse October\\Rain\\Database\\Schema\\Blueprint as DbBlueprint;\n\n/**\n * SchemaBuilder builds tables for tailor content\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SchemaBuilder\n{\n    use \\Tailor\\Classes\\SchemaBuilder\\HasJoinTable;\n    use \\Tailor\\Classes\\SchemaBuilder\\HasRepeaterTable;\n    use \\Tailor\\Classes\\SchemaBuilder\\HasCommonColumns;\n    use \\Tailor\\Classes\\SchemaBuilder\\HasStreamColumns;\n    use \\Tailor\\Classes\\SchemaBuilder\\HasStructureColumns;\n    use \\Tailor\\Classes\\SchemaBuilder\\HasTablePatches;\n\n    /**\n     * @var Blueprint blueprint\n     */\n    protected $blueprint;\n\n    /**\n     * @var Fieldset fields\n     */\n    protected $fieldset;\n\n    /**\n     * @var ContentSchema contentSchema\n     */\n    protected $contentSchema;\n\n    /**\n     * @var DbBlueprint tableBlueprint for managing the table\n     */\n    protected $tableBlueprint;\n\n    /**\n     * @var string tableName for the blueprint content\n     */\n    protected $tableName;\n\n    /**\n     * @var bool tableExists\n     */\n    protected $tableExists;\n\n    /**\n     * @var array tableColumns\n     */\n    protected $tableColumns;\n\n    /**\n     * @var int actionCount number of actions that occurred.\n     */\n    protected $actionCount = 0;\n\n    /**\n     * @var array reservedFieldNames are field names that cannot be used as database columns.\n     * @see Tailor\\Classes\\FieldManager\n     */\n    protected $reservedFieldNames = [\n        // Properties\n        'attributes',\n\n        // Columns\n        'id',\n        'site_id',\n        'site_root_id',\n        'title',\n        'slug',\n        'fullslug',\n        'is_enabled',\n        'created_user_id',\n        'updated_user_id',\n        'deleted_user_id',\n        'deleted_at',\n        'created_at',\n        'parent_id',\n        'relation_id',\n        'relation_type',\n        'field_name',\n        'nest_left',\n        'nest_right',\n        'nest_depth',\n        'blueprint_uuid',\n        'is_version',\n        'primary_id',\n        'primary_attrs',\n        'content_group',\n        'draft_mode',\n        'published_at',\n        'expired_at',\n\n        // Relations\n        'primaryRecord',\n        'drafts',\n        'versions',\n        'parent',\n        'children',\n    ];\n\n    /**\n     * migrateBlueprint\n     */\n    public static function migrateBlueprint(Blueprint $blueprint, Fieldset $fieldset)\n    {\n        $builder = new self;\n        $builder->initBlueprint($blueprint, $fieldset);\n        return $builder->migrate();\n    }\n\n    /**\n     * initBlueprint\n     */\n    public function initBlueprint(Blueprint $blueprint, Fieldset $fieldset)\n    {\n        $this->fieldset = $fieldset;\n        $this->blueprint = $blueprint;\n        $this->tableName = $blueprint->getContentTableName();\n        $this->tableBlueprint = $this->makeDatabaseBlueprint($fieldset);\n\n        if (!$this->tableName) {\n            throw new SystemException('Blueprint ['.get_class($blueprint).'] does not use a database table.');\n        }\n\n        $this->tableExists = Schema::hasTable($this->tableName);\n        $this->tableColumns = $this->tableExists ? Schema::getColumnListing($this->tableName) : [];\n    }\n\n    /**\n     * migrate\n     */\n    public function migrate()\n    {\n        $this->actionCount = 0;\n\n        $this->migrateFields();\n        $this->migrateJoins();\n        $this->migrateRepeaters();\n        $this->migrateTablePatches();\n\n        if ($this->actionCount > 0) {\n            $this->getContentSchema()->commitChanges();\n        }\n\n        return $this->actionCount;\n    }\n\n    /**\n     * migrateFields\n     */\n    public function migrateFields()\n    {\n        $method = $this->tableExists ? 'table' : 'create';\n\n        Schema::$method($this->tableName, function ($table) {\n            $this->defineStartColumns($table);\n            $this->defineVisibilityColumns($table);\n            $this->defineDraftableColumns($table);\n            $this->defineVersionableColumns($table);\n\n            if ($this->blueprint instanceof StructureBlueprint) {\n                $this->defineStructureColumns($table);\n            }\n\n            if ($this->blueprint instanceof StreamBlueprint) {\n                $this->defineStreamColumns($table);\n            }\n\n            $this->defineFieldColumns($table);\n            $this->defineEndColumns($table);\n\n            // Increment actions\n            if ($table->getColumns() || $table->getCommands()) {\n                $this->defineTableComment($table);\n                $this->actionCount++;\n            }\n        });\n    }\n\n    /**\n     * defineTableComment adds a comment to the table to make it easier to find\n     */\n    protected function defineTableComment($table, $message = null)\n    {\n        if ($message === null) {\n            $message = \"Content for :name [:id].\";\n        }\n\n        // Custom escaping since framework doesn't handle it\n        $blueprintId = str_replace('\\\\', '\\\\\\\\', $this->blueprint->handle ?: $this->blueprint->uuid);\n\n        $table->comment(__($message, [\n            'name' => $this->blueprint->name ?: 'Blueprint',\n            'id' => $blueprintId\n        ]));\n    }\n\n    /**\n     * makeDatabaseBlueprint\n     */\n    protected function makeDatabaseBlueprint($fieldset)\n    {\n        // Lazy load the grammar\n        Db::connection()->getSchemaBuilder();\n\n        $table = new DbBlueprint(Db::connection(), $this->tableName);\n\n        foreach ($fieldset->getAllFields() as $name => $fieldObj) {\n            if (!str_starts_with($name, '_')) {\n                $fieldObj->extendDatabaseTable($table);\n            }\n        }\n\n        return $table;\n    }\n\n    /**\n     * getContentSchema\n     */\n    protected function getContentSchema()\n    {\n        if ($this->contentSchema !== null) {\n            return $this->contentSchema;\n        }\n\n        $schema = ContentSchema::findRecord($this->tableName);\n        $schema->setExistingColumns($this->tableColumns);\n        $schema->proposeChanges($this->tableBlueprint);\n        $schema->setLatestMeta($this->blueprint->getMetaData());\n\n        return $this->contentSchema = $schema;\n    }\n\n    /**\n     * defineFieldColumns\n     */\n    protected function defineFieldColumns($table)\n    {\n        $missingFields = $this->getContentSchema()->getMissingFields();\n\n        foreach ($missingFields as $fieldName => $details) {\n            // Never touch a reserved field\n            if (in_array($fieldName, $this->reservedFieldNames)) {\n                continue;\n            }\n\n            // Invalid field definition\n            $columnType = $details['type'] ?? false;\n            if (!$columnType) {\n                continue;\n            }\n\n            $column = $table->$columnType($fieldName);\n\n            // Assign allowable properties\n            $allowedProps = ['unsigned', 'nullable'];\n            foreach ($allowedProps as $prop) {\n                if (!isset($details[$prop])) {\n                    continue;\n                }\n\n                $column->$prop($details[$prop]);\n            }\n        }\n    }\n\n    /**\n     * hasColumn\n     */\n    protected function hasColumn($column)\n    {\n        return in_array($column, $this->tableColumns);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/SchemaPruner.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Schema;\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Models\\ContentSchema;\n\n/**\n * SchemaPruner prunes tables for tailor content\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SchemaPruner\n{\n    /**\n     * @var array prunedTables\n     */\n    protected $prunedTables = [];\n\n    /**\n     * @var array prunedFields\n     */\n    protected $prunedFields = [];\n\n    /**\n     * getPrunedTables\n     */\n    public function getPrunedTables(): array\n    {\n        return (array) $this->prunedTables;\n    }\n\n    /**\n     * getPrunedFields\n     */\n    public function getPrunedFields(): array\n    {\n        return (array) $this->prunedFields;\n    }\n\n    /**\n     * pruneTables removes tables that have no associated blueprint\n     */\n    public static function pruneTables(): static\n    {\n        $pruner = new self;\n\n        $schemas = ContentSchema::all();\n        foreach ($schemas as $schema) {\n            $pruner->pruneTable($schema);\n        }\n\n        return $pruner;\n    }\n\n    /**\n     * pruneAll unused fields in a blueprint\n     */\n    public static function pruneAll(): static\n    {\n        $pruner = new self;\n\n        $schemas = ContentSchema::all();\n        foreach ($schemas as $schema) {\n            $pruner->pruneFields($schema);\n        }\n\n        return $pruner;\n    }\n\n    /**\n     * pruneBlueprint\n     */\n    public static function pruneBlueprint(Blueprint $blueprint): static\n    {\n        $pruner = new self;\n\n        $tableName = $blueprint->getContentTableName();\n        if (!$tableName) {\n            return null;\n        }\n\n        $schema = ContentSchema::where('table_name', $tableName)->first();\n        if (!$schema) {\n            return null;\n        }\n\n        $pruner->pruneFields($schema);\n\n        return $pruner;\n    }\n\n    /**\n     * pruneFields\n     */\n    public function pruneFields(ContentSchema $schema)\n    {\n        $tableName = $schema->table_name;\n\n        // Table is gone, schema goes too\n        if (!Schema::hasTable($tableName)) {\n            $schema->delete();\n            return;\n        }\n\n        // Prune individual fields\n        $tableColumns = Schema::getColumnListing($tableName);\n        foreach ($schema->getPruneFields() as $fieldName => $details) {\n            Schema::table($schema->table_name, function($table) use ($tableColumns, $fieldName) {\n                if (in_array($fieldName, $tableColumns)) {\n                    $table->dropColumn($fieldName);\n                }\n            });\n\n            $this->prunedFields[$tableName][] = $fieldName;\n            $schema->setPrunedColumn($fieldName);\n        }\n\n        $schema->commitChanges();\n    }\n\n    /**\n     * pruneTable\n     */\n    public function pruneTable(ContentSchema $schema)\n    {\n        // Old schema detected\n        // @deprecated remove if year >= 2025\n        if (!$schema->getMetaData('blueprint_uuid')) {\n            return;\n        }\n\n        // Found blueprint do nothing\n        if ($this->findBlueprintFromSchema($schema)) {\n            return;\n        }\n\n        // Dropping known tables\n        $this->prunedTables[] = $contentTable = $schema->table_name;\n        $this->prunedTables[] = $joinTable = substr($contentTable, 0, -1) . 'j';\n        $this->prunedTables[] = $repeaterTable = substr($contentTable, 0, -1) . 'r';\n\n        Schema::dropIfExists($repeaterTable);\n        Schema::dropIfExists($joinTable);\n        Schema::dropIfExists($contentTable);\n\n        $schema->delete();\n    }\n\n    /**\n     * findBlueprintFromSchema\n     */\n    protected function findBlueprintFromSchema(ContentSchema $schema): ?Blueprint\n    {\n        if ($blueprintUuid = $schema->getMetaData('blueprint_uuid')) {\n            return BlueprintIndexer::instance()->find($blueprintUuid);\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/ThemeBlueprint.php",
    "content": "<?php namespace Tailor\\Classes;\n\nuse Cms\\Classes\\Theme;\n\n/**\n * ThemeBlueprint represents a blueprint file object, residing within a theme.\n * This is needed so the Editor can differentiate between file locations.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ThemeBlueprint extends Blueprint\n{\n    /**\n     * __construct\n     */\n    public function __construct(array $attributes = [])\n    {\n        parent::__construct($attributes);\n\n        if ($theme = Theme::getEditTheme() ?: Theme::getActiveTheme()) {\n            $this->datasource = $theme->getPath() . '/blueprints';\n            $this->themeDatasource = $theme->getDirname();\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprint/EntryBlueprint.php",
    "content": "<?php namespace Tailor\\Classes\\Blueprint;\n\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Classes\\BlueprintCollection;\n\n/**\n * EntryBlueprint\n *\n * @property string handle\n * @property string type\n * @property string name\n * @property array fields\n * @property array groups\n * @property array structure\n * @property bool drafts\n * @property bool softDeletes\n * @property mixed multisite\n * @property string pagefinder\n * @property string defaultSort\n * @property array customMessages\n * @property bool showExport\n * @property bool showImport\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass EntryBlueprint extends Blueprint\n{\n    /**\n     * @var string typeName of the blueprint\n     */\n    protected $typeName = 'entry';\n\n    /**\n     * getModelClassName\n     */\n    public function getModelClassName()\n    {\n        return \\Tailor\\Models\\EntryRecord::class;\n    }\n\n    /**\n     * listInProject is a modified version to find any blueprints that inherit this one\n     */\n    public static function listInProject(array $options = []): BlueprintCollection\n    {\n        $result = [];\n        foreach (Blueprint::listInProject($options) as $blueprint) {\n            if ($blueprint instanceof static) {\n                $result[] = $blueprint;\n            }\n        }\n\n        return (new static)->newCollection($result);\n    }\n\n    /**\n     * getMetaData returns meta data for the content schema table\n     */\n    public function getMetaData(): array\n    {\n        return parent::getMetaData() + [\n            'multisite_sync' => $this->useMultisiteSync(),\n        ];\n    }\n\n    /**\n     * useDrafts determines if this section should use drafts\n     */\n    public function useDrafts(): bool\n    {\n        return (bool) $this->drafts;\n    }\n\n    /**\n     * useSoftDeletes determines if this section should use soft deletion\n     */\n    public function useSoftDeletes(): bool\n    {\n        return $this->softDeletes !== false;\n    }\n\n    /**\n     * useVersions determines if this section should capture version history\n     */\n    public function useVersions(): bool\n    {\n        // @todo version support not finished\n        return false;\n\n        return (bool) $this->versions;\n    }\n\n    /**\n     * useMultisite\n     */\n    public function useMultisite(): bool\n    {\n        return (bool) $this->multisite;\n    }\n\n    /**\n     * useMultisiteSync defaults to false.\n     */\n    public function useMultisiteSync(): bool\n    {\n        // Strict check since multisite can be set to true\n        if (in_array($this->multisite, ['sync', 'locale', 'all', 'group'], true)) {\n            return true;\n        }\n\n        if (!is_array($this->multisite)) {\n            return false;\n        }\n\n        return (bool) array_get($this->multisite, 'sync', false);\n    }\n\n    /**\n     * getMultisiteConfig requests configuration for the multisite implementation, such as\n     * the sync group (all, group, locale) and the general propagation logic.\n     */\n    public function getMultisiteConfig($key, $default = null)\n    {\n        if ($key === 'sync' && is_string($this->multisite)) {\n            return $this->multisite;\n        }\n\n        if (!is_array($this->multisite)) {\n            return $default;\n        }\n\n        return array_get($this->multisite, $key, $default);\n    }\n\n    /**\n     * usePageFinder in a specific context, either item or list. Defaults to true.\n     */\n    public function usePageFinder(string $context = 'item')\n    {\n        if (!$this->pagefinder && $this->pagefinder !== null) {\n            return false;\n        }\n\n        if (is_string($this->pagefinder)) {\n            return $this->pagefinder === $context;\n        }\n\n        if (is_array($this->pagefinder) && isset($this->pagefinder['context'])) {\n            return $this->pagefinder['context'] === $context ||\n                $this->pagefinder['context'] === 'all';\n        }\n\n        return true;\n    }\n\n    /**\n     * getPageReplacements returns the replacements to be included when resolving the page\n     * link. Each replacement key should match a URL parameter name and use a dot notation\n     * path to the attribute value. eg: `[category => categories.0.slug]`\n     */\n    public function getPageFinderReplacements(): array\n    {\n        if (!is_array($this->pagefinder) || !is_array($this->pagefinder['replacements'])) {\n            return [];\n        }\n\n        return $this->pagefinder['replacements'];\n    }\n\n    /**\n     * isEntryEnabledByDefault\n     */\n    public function isEntryEnabledByDefault(): bool\n    {\n        if (\n            !is_array($this->fields) ||\n            !isset($this->fields['is_enabled']) ||\n            !array_key_exists('default', $this->fields['is_enabled'])\n        ) {\n            return true;\n        }\n\n        return $this->fields['is_enabled']['default'];\n    }\n\n    /**\n     * hasMultipleEntryTypes\n     */\n    public function hasMultipleEntryTypes(): bool\n    {\n        return is_array($this->groups) && count($this->groups) > 1;\n    }\n\n    /**\n     * getEntryTypeOptions\n     */\n    public function getEntryTypeOptions(): array\n    {\n        if (!is_array($this->groups)) {\n            return [];\n        }\n\n        $options = [];\n\n        foreach ($this->groups as $handle => $entry) {\n            $options[$handle] = trans($entry['name'] ?? $handle);\n        }\n\n        return $options;\n    }\n\n    /**\n     * makeBlueprintTableName where type can be used for content, join or repeater\n     */\n    protected function makeBlueprintTableName($type = 'content'): string\n    {\n        $code = str_replace('-', '', $this->uuid);\n\n        if (!$code) {\n            return '';\n        }\n\n        if ($type === 'content') {\n            return 'xc_'.$code.'c';\n        }\n\n        if ($type === 'join') {\n            return 'xc_'.$code.'j';\n        }\n\n        if ($type === 'repeater') {\n            return 'xc_'.$code.'r';\n        }\n\n        return '';\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprint/GlobalBlueprint.php",
    "content": "<?php namespace Tailor\\Classes\\Blueprint;\n\nuse Tailor\\Classes\\Blueprint;\n\n/**\n * GlobalBlueprint\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass GlobalBlueprint extends Blueprint\n{\n    /**\n     * @var string typeName of the blueprint\n     */\n    protected $typeName = 'global';\n\n    /**\n     * getModelClassName\n     */\n    public function getModelClassName()\n    {\n        return \\Tailor\\Models\\GlobalRecord::class;\n    }\n\n    /**\n     * makeBlueprintTableName where type can be used for content, join or repeater\n     */\n    protected function makeBlueprintTableName($type = 'content'): string\n    {\n        if ($type === 'content') {\n            return 'tailor_globals';\n        }\n\n        if ($type === 'join') {\n            return 'tailor_global_joins';\n        }\n\n        if ($type === 'repeater') {\n            return 'tailor_global_repeaters';\n        }\n\n        return '';\n    }\n\n    /**\n     * useMultisite\n     */\n    public function useMultisite(): bool\n    {\n        return (bool) $this->multisite;\n    }\n\n    /**\n     * useMultisiteSync defaults to false.\n     */\n    public function useMultisiteSync(): bool\n    {\n        // Strict check since multisite can be set to true\n        if (in_array($this->multisite, ['sync', 'locale', 'all', 'group'], true)) {\n            return true;\n        }\n\n        if (!is_array($this->multisite)) {\n            return false;\n        }\n\n        return (bool) array_get($this->multisite, 'sync', false);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprint/HasDatasources.php",
    "content": "<?php namespace Tailor\\Classes\\Blueprint;\n\nuse System;\nuse Cms\\Classes\\Theme as CmsTheme;\nuse Cms\\Classes\\ThemeManager;\nuse System\\Classes\\PluginManager;\nuse Exception;\n\n/**\n * HasDatasources\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasDatasources\n{\n    /**\n     * @var string datasource is the data source for the model, a directory path.\n     */\n    protected $datasource;\n\n    /**\n     * @var string datasourceTheme is the theme directory name, used to filter blueprints.\n     */\n    protected $datasourceTheme;\n\n    /**\n     * @var array|null resolvedPlugins\n     */\n    protected static $resolvedPlugins = null;\n\n    /**\n     * @var array|null resolvedActiveTheme\n     */\n    protected static $resolvedActiveTheme = null;\n\n    /**\n     * @var array|null resolvedThemes\n     */\n    protected static $resolvedThemes = null;\n\n    /**\n     * inDatasource prepares the datasource for the model.\n     */\n    public static function inDatasource($path, $theme = null)\n    {\n        $obj = new static;\n\n        $obj->datasource = $path;\n\n        if ($theme) {\n            $obj->datasourceTheme = $theme;\n        }\n\n        return $obj;\n    }\n\n    /**\n     * getDatasourceTheme\n     */\n    public function getDatasourceTheme()\n    {\n        return $this->datasourceTheme;\n    }\n\n    /**\n     * getDefaultPlugins\n     */\n    protected static function getDefaultPlugins()\n    {\n        if (self::$resolvedPlugins !== null) {\n            return self::$resolvedPlugins;\n        }\n\n        $result = [];\n\n        try {\n            $plugins = PluginManager::instance()->getPluginPaths();\n            foreach ($plugins as $code => $path) {\n                if (file_exists($bpPath = $path . '/blueprints')) {\n                    $result[$code] = $bpPath;\n                }\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        return self::$resolvedPlugins = $result;\n    }\n\n    /**\n     * getDefaultActiveTheme returns the active theme as a datasource\n     */\n    protected static function getDefaultActiveTheme()\n    {\n        if (self::$resolvedActiveTheme !== null) {\n            return self::$resolvedActiveTheme;\n        }\n\n        $result = [];\n\n        try {\n            if (System::hasModule('Cms')) {\n                $activeCode = CmsTheme::getActiveThemeCode();\n                if ($activeCode) {\n                    $themes = ThemeManager::instance()->getThemePaths();\n                    if (isset($themes[$activeCode])) {\n                        $path = $themes[$activeCode];\n                        if (file_exists($bpPath = $path . '/blueprints')) {\n                            $result[$activeCode] = $bpPath;\n                        }\n                    }\n                }\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        return self::$resolvedActiveTheme = $result;\n    }\n\n    /**\n     * getDefaultThemes returns all non-active themes as datasources\n     */\n    protected static function getDefaultThemes()\n    {\n        if (self::$resolvedThemes !== null) {\n            return self::$resolvedThemes;\n        }\n\n        $result = [];\n\n        try {\n            $activeCode = System::hasModule('Cms') ? CmsTheme::getActiveThemeCode() : null;\n            $themes = System::hasModule('Cms') ? ThemeManager::instance()->getThemePaths() : [];\n            foreach ($themes as $code => $path) {\n                if ($code === $activeCode) {\n                    continue;\n                }\n                if (file_exists($bpPath = $path . '/blueprints')) {\n                    $result[$code] = $bpPath;\n                }\n            }\n        }\n        catch (Exception $ex) {\n        }\n\n        return self::$resolvedThemes = $result;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprint/MixinBlueprint.php",
    "content": "<?php namespace Tailor\\Classes\\Blueprint;\n\nuse Tailor\\Classes\\Blueprint;\n\n/**\n * MixinBlueprint\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MixinBlueprint extends Blueprint\n{\n    /**\n     * @var string typeName of the blueprint\n     */\n    protected $typeName = 'mixin';\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprint/SingleBlueprint.php",
    "content": "<?php namespace Tailor\\Classes\\Blueprint;\n\n/**\n * SingleBlueprint\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SingleBlueprint extends EntryBlueprint\n{\n    /**\n     * @var string typeName of the blueprint\n     */\n    protected $typeName = 'single';\n\n    /**\n     * getModelClassName\n     */\n    public function getModelClassName()\n    {\n        return \\Tailor\\Models\\SingleRecord::class;\n    }\n\n    /**\n     * usePageFinder in a specific context, either item or list.\n     */\n    public function usePageFinder(string $context = 'item')\n    {\n        if ($context === 'list') {\n            return false;\n        }\n\n        return parent::usePageFinder($context);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprint/StreamBlueprint.php",
    "content": "<?php namespace Tailor\\Classes\\Blueprint;\n\n/**\n * StreamBlueprint\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass StreamBlueprint extends EntryBlueprint\n{\n    /**\n     * @var string typeName of the blueprint\n     */\n    protected $typeName = 'stream';\n\n    /**\n     * getModelClassName\n     */\n    public function getModelClassName()\n    {\n        return \\Tailor\\Models\\StreamRecord::class;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprint/StructureBlueprint.php",
    "content": "<?php namespace Tailor\\Classes\\Blueprint;\n\n/**\n * StructureBlueprint\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass StructureBlueprint extends EntryBlueprint\n{\n    /**\n     * @var string typeName of the blueprint\n     */\n    protected $typeName = 'structure';\n\n    /**\n     * getModelClassName\n     */\n    public function getModelClassName()\n    {\n        return \\Tailor\\Models\\StructureRecord::class;\n    }\n\n    /**\n     * hasTree\n     */\n    public function hasTree(): bool\n    {\n        return $this->getMaxDepth() !== 1;\n    }\n\n    /**\n     * getMaxDepth\n     */\n    public function getMaxDepth(): int\n    {\n        return (int) ($this->structure['maxDepth'] ?? 0);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprintindexer/FieldsetIndex.php",
    "content": "<?php namespace Tailor\\Classes\\BlueprintIndexer;\n\nuse Tailor\\Classes\\Blueprint\\GlobalBlueprint;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse Tailor\\Classes\\FieldManager;\nuse Tailor\\Classes\\Fieldset;\n\n/**\n * FieldsetIndex\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait FieldsetIndex\n{\n    /**\n     * @var string fieldsetsCacheKey\n     */\n    protected $fieldsetsCacheKey = 'fieldsets';\n\n    /**\n     * listFieldsets\n     */\n    public function listFieldsets(): array\n    {\n        $manager = FieldManager::instance();\n\n        $result = [];\n        foreach ($this->listFieldsetsRaw() as $attributes) {\n            $result[] = $manager->makeFieldset($attributes);\n        }\n\n        return $result;\n    }\n\n    /**\n     * listFieldsetsRaw without populating the Blueprint object\n     */\n    protected function listFieldsetsRaw(): array\n    {\n        $records = $this->getCache($this->fieldsetsCacheKey);\n\n        if (!$records) {\n            $records = $this->indexFieldsets();\n        }\n\n        return $records;\n    }\n\n    /**\n     * findFieldset\n     */\n    public function findFieldset(string $uuid, ?string $group = null): ?Fieldset\n    {\n        $index = $this->listFieldsetsRaw();\n\n        $uuidKey = $group !== null\n            ? $uuid . ':' . $group\n            : $uuid;\n\n        if (!isset($index[$uuidKey])) {\n            return null;\n        }\n\n        return FieldManager::instance()->makeFieldset($index[$uuidKey]);\n    }\n\n    /**\n     * findContentFieldset creates a compilation of fields based on shared content groups\n     * that is compiled on a first seen basis.\n     */\n    public function findContentFieldset($contentUuid): ?Fieldset\n    {\n        $manager = FieldManager::instance();\n        $fieldset = null;\n        $config = null;\n\n        foreach ($this->listFieldsetsRaw() as $uuid => $attributes) {\n            if (!isset($attributes['contentUuid']) || $attributes['contentUuid'] !== $contentUuid) {\n                continue;\n            }\n\n            if ($config === null) {\n                $config = $attributes;\n            }\n            else {\n                $config['fields'] += $manager->rewriteMixinNames($attributes['fields'] ?? []);\n            }\n        }\n\n        if ($config !== null) {\n            $fieldset = $manager->makeFieldset($config);\n        }\n\n        return $fieldset;\n    }\n\n    /**\n     * indexFieldsets\n     */\n    public function indexFieldsets(): array\n    {\n        $newIndex = $this->findAllFieldsetBlueprints();\n\n        $this->putCache($this->fieldsetsCacheKey, $newIndex);\n\n        return $newIndex;\n    }\n\n    /**\n     * findAllFieldsetBlueprints will spin over all fieldset sources\n     */\n    protected function findAllFieldsetBlueprints(): array\n    {\n        $result = [];\n\n        // Sections\n        foreach (EntryBlueprint::listInProject() as $section) {\n            if (is_array($section->groups)) {\n                foreach ($section->groups as $group => $definition) {\n                    if (is_array($section->fields)) {\n                        $definition['fields'] = $section->fields + $definition['fields'];\n                    }\n                    $uuid = $section->uuid . ':' . $group;\n                    $result[$uuid] = [\n                        'name' => $definition['name'] ?? $section->name,\n                        'handle' => $group,\n                        'contentUuid' => $section->uuid,\n                        'columns' => $section->columns,\n                        'scopes' => $section->scopes,\n                        'validation' => $section->validation\n                    ] + $definition;\n                }\n            }\n            else {\n                $result[$section->uuid] = [\n                    'name' => $section->name,\n                    'handle' => $section->handle,\n                    'contentUuid' => $section->uuid,\n                    'fields' => $section->fields,\n                    'columns' => $section->columns,\n                    'scopes' => $section->scopes,\n                    'validation' => $section->validation\n                ];\n            }\n        }\n\n        // Globals\n        foreach (GlobalBlueprint::listInProject() as $global) {\n            $result[$global->uuid] = [\n                'name' => $global->name,\n                'handle' => $global->handle,\n                'contentUuid' => $global->uuid,\n                'fields' => $global->fields,\n                'validation' => $global->validation\n            ];\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprintindexer/GlobalIndex.php",
    "content": "<?php namespace Tailor\\Classes\\BlueprintIndexer;\n\nuse Tailor\\Classes\\Blueprint\\GlobalBlueprint;\n\n/**\n * GlobalIndex\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait GlobalIndex\n{\n    /**\n     * @var string globalsCacheKey\n     */\n    protected $globalsCacheKey = 'globals';\n\n    /**\n     * listGlobals\n     */\n    public function listGlobals(): array\n    {\n        $result = [];\n\n        foreach ($this->listGlobalsRaw() as $attributes) {\n            $result[] = GlobalBlueprint::newFromIndexer($attributes);\n        }\n\n        return $result;\n    }\n\n    /**\n     * listGlobalsRaw without populating the Blueprint object\n     */\n    protected function listGlobalsRaw(): array\n    {\n        $records = $this->getCache($this->globalsCacheKey);\n\n        if (!$records) {\n            $records = $this->indexGlobals();\n        }\n\n        return $records;\n    }\n\n    /**\n     * findGlobal\n     */\n    public function findGlobal($uuid): ?GlobalBlueprint\n    {\n        $index = $this->listGlobalsRaw();\n\n        if (!isset($index[$uuid])) {\n            return null;\n        }\n\n        return GlobalBlueprint::newFromIndexer($index[$uuid]);\n    }\n\n    /**\n     * findGlobalByHandle\n     */\n    public function findGlobalByHandle(string $handle): ?GlobalBlueprint\n    {\n        $themeDatasource = $this->getActiveThemeDatasource();\n        $result = null;\n\n        foreach ($this->listGlobalsRaw() as $attributes) {\n            if (\n                (isset($attributes['handle']) && $attributes['handle'] === $handle) ||\n                (isset($attributes['handleSlug']) && $attributes['handleSlug'] === $handle)\n            ) {\n                // Skip blueprints from inactive themes\n                $themeCode = $attributes['_theme'] ?? null;\n                if ($themeCode !== null && $themeDatasource && $themeCode !== $themeDatasource) {\n                    continue;\n                }\n\n                $result = GlobalBlueprint::newFromIndexer($attributes);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * indexGlobals\n     */\n    public function indexGlobals(): array\n    {\n        $newIndex = [];\n\n        foreach (GlobalBlueprint::listInProject() as $section) {\n            $newIndex[$section->uuid] = $section->toArray();\n        }\n\n        $this->putCache($this->globalsCacheKey, $newIndex);\n\n        return $newIndex;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprintindexer/MixinIndex.php",
    "content": "<?php namespace Tailor\\Classes\\BlueprintIndexer;\n\nuse Tailor\\Classes\\Blueprint\\MixinBlueprint;\n\n/**\n * MixinIndex\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait MixinIndex\n{\n    /**\n     * @var string fieldsCacheKey\n     */\n    protected $fieldsCacheKey = 'fields';\n\n    /**\n     * listMixins\n     */\n    public function listMixins(): array\n    {\n        $result = [];\n\n        foreach ($this->listMixinsRaw() as $attributes) {\n            $result[] = MixinBlueprint::newFromIndexer($attributes);\n        }\n\n        return $result;\n    }\n\n    /**\n     * listMixinsRaw without populating the Blueprint object\n     */\n    protected function listMixinsRaw(): array\n    {\n        $records = $this->getCache($this->fieldsCacheKey);\n\n        if (!$records) {\n            $records = $this->indexMixins();\n        }\n\n        return $records;\n    }\n\n    /**\n     * hasMixin is a quick way to resolve a mixin to a UUID\n     */\n    public function hasMixin($handleOrUuid): string\n    {\n        $index = $this->listMixinsRaw();\n\n        // UUID found\n        if (isset($index[$handleOrUuid])) {\n            return $handleOrUuid;\n        }\n\n        // Handle found\n        foreach ($index as $attributes) {\n            if (isset($attributes['handle']) && $attributes['handle'] === $handleOrUuid) {\n                return $attributes['uuid'] ?? '';\n            }\n        }\n\n        return '';\n    }\n\n    /**\n     * findMixin\n     */\n    public function findMixin($uuid): ?MixinBlueprint\n    {\n        $index = $this->listMixinsRaw();\n\n        if (!isset($index[$uuid])) {\n            return null;\n        }\n\n        return MixinBlueprint::newFromIndexer($index[$uuid]);\n    }\n\n    /**\n     * indexMixins\n     */\n    public function indexMixins(): array\n    {\n        $newIndex = [];\n\n        foreach (MixinBlueprint::listInProject() as $field) {\n            $newIndex[$field->uuid] = $field->toArray();\n        }\n\n        $this->putCache($this->fieldsCacheKey, $newIndex);\n\n        return $newIndex;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprintindexer/NavigationRegistry.php",
    "content": "<?php namespace Tailor\\Classes\\BlueprintIndexer;\n\nuse Backend;\nuse Tailor\\Classes\\NavigationItem;\nuse System\\Classes\\SettingsManager;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse Tailor\\Classes\\Blueprint\\GlobalBlueprint;\n\n/**\n * NavigationRegistry\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait NavigationRegistry\n{\n    /**\n     * @var string navigationCacheKey\n     */\n    protected $navigationCacheKey = 'navigation';\n\n    /**\n     * listPrimaryNavigation\n     */\n    protected function listPrimaryNavigation(): array\n    {\n        $result = [];\n\n        foreach ($this->listFilteredNavigationRaw()[0] as $attributes) {\n            $result[] = (new NavigationItem)->useConfig($attributes);\n        }\n\n        return $result;\n    }\n\n    /**\n     * listSecondaryNavigation\n     */\n    protected function listSecondaryNavigation(): array\n    {\n        $result = [];\n\n        foreach ($this->listFilteredNavigationRaw()[1] as $attributes) {\n            $result[] = (new NavigationItem)->useConfig($attributes);\n        }\n\n        return $result;\n    }\n\n    /**\n     * listFilteredNavigationRaw applies the site/theme filter to the blueprint navigation\n     * this allows theme-based blueprints to not appear in the menu.\n     */\n    protected function listFilteredNavigationRaw(): array\n    {\n        $records = $this->listNavigationRaw();\n\n        $themeDatasource = $this->getActiveThemeDatasource();\n        if (!$themeDatasource) {\n            return $records;\n        }\n\n        foreach ($records as &$collection) {\n            foreach ($collection as $key => $attributes) {\n                if ($themeCode = $attributes['_theme'] ?? false) {\n                    if ($themeCode === false || $themeCode !== $themeDatasource) {\n                        unset($collection[$key]);\n                    }\n                }\n            }\n        }\n\n        return $records;\n    }\n\n    /**\n     * listNavigationRaw\n     */\n    protected function listNavigationRaw(): array\n    {\n        $records = $this->getCache($this->navigationCacheKey);\n\n        if (!$records) {\n            $records = $this->indexNavigation();\n        }\n\n        return $records;\n    }\n\n    /**\n     * findPrimaryNavigation\n     */\n    public function findPrimaryNavigation($uuid): ?NavigationItem\n    {\n        $index = $this->listNavigationRaw()[0];\n\n        if (!isset($index[$uuid])) {\n            return null;\n        }\n\n        return (new NavigationItem)->useConfig($index[$uuid]);\n    }\n\n    /**\n     * findSecondaryNavigation\n     */\n    public function findSecondaryNavigation($uuid): ?NavigationItem\n    {\n        $index = $this->listNavigationRaw()[1];\n\n        if (!isset($index[$uuid])) {\n            return null;\n        }\n\n        return (new NavigationItem)->useConfig($index[$uuid]);\n    }\n\n    /**\n     * indexNavigation\n     */\n    public function indexNavigation(): array\n    {\n        $newIndex = $this->findAllNavigationBlueprints();\n\n        $this->putCache($this->navigationCacheKey, $newIndex);\n\n        return $newIndex;\n    }\n\n    /**\n     * findAllFieldsetBlueprints will spin over all fieldset sources\n     */\n    protected function findAllNavigationBlueprints(): array\n    {\n        $primary = [];\n        $secondary = [];\n\n        // Sections\n        foreach (EntryBlueprint::listInProject() as $blueprint) {\n            if ($config = $this->buildNavigationConfig($blueprint, true)) {\n                $primary[$blueprint->uuid] = $config;\n            }\n\n            if ($config = $this->buildNavigationConfig($blueprint)) {\n                $secondary[$blueprint->uuid] = $config;\n            }\n\n            if ($config = $this->buildExtraNavigationConfig($blueprint)) {\n                $secondary += $config;\n            }\n        }\n\n        // Globals\n        foreach (GlobalBlueprint::listInProject() as $blueprint) {\n            if ($config = $this->buildNavigationConfig($blueprint, true)) {\n                $primary[$blueprint->uuid] = $config;\n            }\n\n            if ($config = $this->buildNavigationConfig($blueprint)) {\n                $secondary[$blueprint->uuid] = $config;\n            }\n\n            if ($config = $this->buildExtraNavigationConfig($blueprint)) {\n                $secondary += $config;\n            }\n        }\n\n        // Post processing\n        foreach ($secondary as &$item) {\n            if (!isset($item['parent'])) {\n                continue;\n            }\n\n            $parentUuid = $this->findParentConfigUuid($primary, $item['parent']);\n            if (!$parentUuid) {\n                continue;\n            }\n\n            // Set parent code\n            if (isset($primary[$parentUuid]['code'])) {\n                $item['parentCode'] = $primary[$parentUuid]['code'];\n            }\n\n            // Combine permissions\n            if (isset($item['permissionCode'][0])) {\n                $primary[$parentUuid]['permissionCode'][] = $item['permissionCode'][0];\n            }\n        }\n\n        return [$primary, $secondary];\n    }\n\n    /**\n     * findParentConfigUuid\n     */\n    protected function findParentConfigUuid(array $index, string $handleOrUuid): string\n    {\n        // UUID found\n        if (isset($index[$handleOrUuid])) {\n            return $handleOrUuid;\n        }\n\n        // Handle found\n        foreach ($index as $uuid => $attributes) {\n            if (isset($attributes['handle']) && $attributes['handle'] === $handleOrUuid) {\n                return $uuid;\n            }\n        }\n\n        return '';\n    }\n\n    /**\n     * buildNavigationConfig builds navigation config based on blueprint relationships\n     */\n    protected function buildNavigationConfig($blueprint, bool $isPrimary = false): ?array\n    {\n        $prop = $isPrimary ? 'primaryNavigation' : 'navigation';\n        $isDefined = isset($blueprint->$prop);\n\n        // Primary definitions have no default\n        if ($isPrimary && !$isDefined) {\n            return null;\n        }\n\n        // Explicitly disabled by config\n        if ($isDefined && $blueprint->$prop === false) {\n            return null;\n        }\n\n        // Begin building with default values\n        $config = $isDefined ? $blueprint->$prop : [];\n        $config['_theme'] = $blueprint->getDatasourceTheme();\n        $config['uuid'] = $blueprint->uuid;\n        $config['handle'] = $blueprint->handle;\n        $config['hasPrimary'] = (bool) $blueprint->primaryNavigation;\n        $config['code'] = $blueprint->getNavigationCodeName();\n\n        if ($blueprint instanceof EntryBlueprint) {\n            $config['url'] = 'tailor/entries/'.$blueprint->handleSlug;\n            $config['mode'] = $config['mode'] ?? NavigationItem::MODE_CONTENT;\n        }\n\n        if ($blueprint instanceof GlobalBlueprint) {\n            $config['url'] = 'tailor/globals/'.$blueprint->handleSlug;\n            $config['mode'] = $config['mode'] ?? NavigationItem::MODE_SETTINGS;\n            $config['category'] = $config['category'] ?? SettingsManager::CATEGORY_GLOBALS;\n        }\n\n        if (!isset($config['label'])) {\n            $config['label'] = $blueprint->name;\n        }\n\n        if (!isset($config['description'])) {\n            $config['description'] = $blueprint->description;\n        }\n\n        $config['permissionCode'] = [$blueprint->getPermissionCodeName()];\n\n        return $config;\n    }\n\n    /**\n     * buildExtraNavigationConfig used to inject manually specified navigation definitions\n     */\n    protected function buildExtraNavigationConfig($blueprint): ?array\n    {\n        if (!isset($blueprint->extraNavigation) || !is_array($blueprint->extraNavigation)) {\n            return null;\n        }\n\n        $extraConfig = [];\n        foreach ($blueprint->extraNavigation as $code => $definition) {\n            if (!is_array($definition)) {\n                continue;\n            }\n\n            $config = $definition;\n            $config['code'] = $code;\n            $config['uuid'] = $blueprint->uuid;\n            $config['handle'] = $blueprint->handle;\n            $config['hasPrimary'] = (bool) $blueprint->primaryNavigation;\n            $config['permissionCode'] = [$blueprint->getPermissionCodeName()];\n\n            if ($parentReference = $blueprint->navigation['parent'] ?? null) {\n                $config['parent'] = $parentReference;\n            }\n\n            $extraConfig[$blueprint->uuid.$code] = $config;\n        }\n\n        return $extraConfig;\n    }\n\n    /**\n     * getNavigationContentMainMenu\n     */\n    public function getNavigationContentMainMenu(): array\n    {\n        $sideMenu = $this->getNavigationContentSideMenu();\n        if (!$sideMenu) {\n            return [];\n        }\n\n        return [\n            'tailor' => [\n                'label' => 'Content',\n                'icon' => 'icon-pencil-square',\n                'iconSvg' => 'modules/tailor/assets/images/tailor-icon.svg',\n                'url' => Backend::url('tailor/entries'),\n                'order' => 140,\n                'sideMenu' => $sideMenu,\n                'permissions' => $this->buildParentNavigationPermissions($sideMenu),\n            ]\n        ];\n    }\n\n    /**\n     * getNavigationContentMenu\n     */\n    public function getNavigationContentSideMenu(): array\n    {\n        $result = [];\n\n        foreach ($this->listSecondaryNavigation() as $item) {\n            if ($item->mode !== NavigationItem::MODE_CONTENT) {\n                continue;\n            }\n\n            $result[$item->code] = $item->toBackendMenuArray();\n        }\n\n        return $result;\n    }\n\n    /**\n     * getNavigationMainMenu\n     */\n    public function getNavigationMainMenu(): array\n    {\n        $result = [];\n\n        foreach ($this->listPrimaryNavigation() as $item) {\n            $sideMenu = $this->getNavigationSideMenu($item);\n\n            $result[$item->code] = $item->toBackendMenuArray() + [\n                'sideMenu' => $sideMenu,\n                'permissions' => $this->buildParentNavigationPermissions($sideMenu),\n            ];\n        }\n\n        return $result;\n    }\n\n    /**\n     * getNavigationSideMenu\n     */\n    public function getNavigationSideMenu($parentItem): array\n    {\n        $result = [];\n        $primaryItem = false;\n\n        foreach ($this->listSecondaryNavigation() as $item) {\n            if (!in_array($item->mode, [NavigationItem::MODE_PRIMARY, NavigationItem::MODE_SECONDARY])) {\n                continue;\n            }\n\n            if ($item->mode === NavigationItem::MODE_PRIMARY && $item->uuid === $parentItem->uuid) {\n                $result[$item->code] = $item->toBackendMenuArray();\n                $primaryItem = true;\n            }\n\n            if ($item->mode === NavigationItem::MODE_SECONDARY &&\n                ($item->parent === $parentItem->uuid || $item->parent === $parentItem->handle)\n            ) {\n                $result[$item->code] = $item->toBackendMenuArray();\n                $primaryItem = false;\n            }\n        }\n\n        // If there is an orphaned auto generated primary item,\n        // remove it to disable the secondary navigation\n        if ($primaryItem && count($result) === 1) {\n            $result = [];\n        }\n\n        return $result;\n    }\n\n    /**\n     * getNavigationSettingsMenu\n     */\n    public function getNavigationSettingsMenu(): array\n    {\n        $result = [];\n\n        foreach ($this->listSecondaryNavigation() as $item) {\n            if ($item->mode !== NavigationItem::MODE_SETTINGS) {\n                continue;\n            }\n\n            $result[$item->code] = $item->toBackendSettingsArray();\n        }\n\n        return $result;\n    }\n\n    /**\n     * buildParentNavigationPermissions\n     */\n    protected function buildParentNavigationPermissions($items)\n    {\n        $permissions = [];\n\n        foreach ($items as $item) {\n            if (isset($item['permissions']) && is_array($item['permissions'])) {\n                $permissions = array_merge($permissions, $item['permissions']);\n            }\n        }\n\n        return $permissions;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprintindexer/PageManagerRegistry.php",
    "content": "<?php namespace Tailor\\Classes\\BlueprintIndexer;\n\nuse Cms;\nuse Site;\nuse Cms\\Classes\\Page;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse Tailor\\Classes\\BlueprintIndexer;\n\n/**\n * PageManagerRegistry\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait PageManagerRegistry\n{\n    /**\n     * listPrimaryNavigation\n     */\n    public function listPageManagerTypes(): array\n    {\n        $types = [];\n\n        // Sections\n        foreach (EntryBlueprint::listInProject() as $blueprint) {\n            if ($typeCode = $this->pageManagerBlueprintToType($blueprint)) {\n                if ($blueprint->usePageFinder()) {\n                    $types[$typeCode] = $blueprint->getMessage('pagefinderItemType', \":name Entry\", ['name' => $blueprint->name]);\n                }\n\n                if ($blueprint->usePageFinder('list')) {\n                    $types['list-'.$typeCode] = [\n                        $blueprint->getMessage('pagefinderListType', \"All :name Entries\", ['name' => $blueprint->name]),\n                        true\n                    ];\n                }\n            }\n        }\n\n        return $types;\n    }\n\n    /**\n     * getPageManagerTypeInfo\n     */\n    public function getPageManagerTypeInfo($type): array\n    {\n        [$model, $query] = $this->pageManagerTypeToModel($type);\n        if (!$model) {\n            return [];\n        }\n\n        $result = [];\n\n        if (!starts_with($type, 'list-')) {\n            $result['references'] = $this->listRecordOptionsForPageInfo($model, $query);\n        }\n\n        $result['cmsPages'] = $this->listBlueprintCmsPagesForPageInfo($model);\n\n        return $result;\n    }\n\n    /**\n     * listBlueprintCmsPagesForPageInfo\n     */\n    protected function listBlueprintCmsPagesForPageInfo($model)\n    {\n        $handle = $model->blueprint->handle ?? $model->blueprint_uuid;\n        return Page::whereComponent('section', 'handle', $handle)->all();\n    }\n\n    /**\n     * listRecordOptionsForPageInfo\n     */\n    protected function listRecordOptionsForPageInfo($model, $query)\n    {\n        $records = $model->isClassInstanceOf(\\October\\Contracts\\Database\\TreeInterface::class)\n            ? $query->getNested()\n            : $query->get();\n\n        $iterator = function($records) use (&$iterator) {\n            $result = [];\n            $hasMultisite = null;\n            foreach ($records as $record) {\n                $hasMultisite ??= $record->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n                    $record->isMultisiteEnabled();\n\n                $id = $hasMultisite ? $record->getMultisiteKey() : $record->getKey();\n                if (!$record->children) {\n                    $result[$id] = $record->title;\n                }\n                else {\n                    $result[$id] = [\n                        'title' => $record->title,\n                        'items' => $iterator($record->children)\n                    ];\n                }\n            }\n            return $result;\n        };\n\n        return $iterator($records);\n    }\n\n    /**\n     * resolvePageManagerItem\n     */\n    public function resolvePageManagerItem($type, $item, $url, $theme): array\n    {\n        if (starts_with($type, 'list-')) {\n            return $this->resolvePageManagerItemAsList($type, $item, $url, $theme);\n        }\n\n        return $this->resolvePageManagerItemAsReference($type, $item, $url, $theme);\n    }\n\n    /**\n     * resolvePageManagerItemAsList\n     */\n    protected function resolvePageManagerItemAsList($type, $item, $url, $theme): array\n    {\n        [$model, $query] = $this->pageManagerTypeToModel($type);\n        if (!$model) {\n            return [];\n        }\n\n        $result = [];\n\n        $records = $model->isClassInstanceOf(\\October\\Contracts\\Database\\TreeInterface::class)\n            ? $query->getNested()\n            : $query->get();\n\n        $recurse = $model->isEntryStructure() && $item->nesting;\n\n        $result['items'] = $this->resolvePageManagerItemAsChildren($records, $item, $theme, $url, $recurse);\n\n        return $result;\n    }\n\n    /**\n     * resolvePageManagerItemAsReference\n     */\n    protected function resolvePageManagerItemAsReference($type, $item, $url, $theme): array\n    {\n        [$model, $query] = $this->pageManagerTypeToModel($type);\n        if (!$model) {\n            return [];\n        }\n\n        if (\n            $model->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n            $model->isMultisiteEnabled()\n        ) {\n            $record = $query->applyOtherSiteRoot($item->reference)->first();\n        }\n        else {\n            $record = $query->find($item->reference);\n        }\n\n        if (!$record) {\n            return [];\n        }\n\n        $pageUrl = $this->getPageManagerPageUrl($item->cmsPage, $record, $theme, $item);\n\n        $result = [\n            'url' => $pageUrl,\n            'isActive' => $pageUrl == $url,\n            'mtime' => $record->updated_at,\n            'status' => $record->status_code,\n        ];\n\n        if ($item->sites) {\n            $result['sites'] = $this->getPageManagerSites($item->cmsPage, $record, $theme);\n        }\n\n        if (!$model->isEntryStructure() || !$item->nesting) {\n            return $result;\n        }\n\n        $result['items'] = $this->resolvePageManagerItemAsChildren($record->children, $item, $theme, $url);\n\n        return $result;\n    }\n\n    /**\n     * resolvePageManagerItemAsChildren\n     */\n    protected function resolvePageManagerItemAsChildren($children, $item, $theme, $url, $recursive = true)\n    {\n        $branch = [];\n\n        foreach ($children as $child) {\n            $childUrl = $this->getPageManagerPageUrl($item->cmsPage, $child, $theme);\n\n            $childItem = [\n                'url' => $childUrl,\n                'isActive' => $childUrl == $url,\n                'title' => $child->title,\n                'mtime' => $child->updated_at,\n                'status' => $child->status_code,\n            ];\n\n            if ($item->sites) {\n                $childItem['sites'] = $this->getPageManagerSites($item->cmsPage, $child, $theme);\n            }\n\n            if ($recursive && $child->children) {\n                $childItem['items'] = $this->resolvePageManagerItemAsChildren(\n                    $child->children,\n                    $item,\n                    $theme,\n                    $url,\n                    $recursive\n                );\n            }\n\n            $branch[] = $childItem;\n        }\n\n        return $branch;\n    }\n\n    /**\n     * getPageManagerPageUrl\n     */\n    protected function getPageManagerPageUrl($pageCode, $record, $theme, $item = null)\n    {\n        $params = $record->makePageUrlParams();\n\n        if ($item) {\n            $params = array_merge($params, $this->extractItemUrlParams($item));\n        }\n\n        return Cms::pageUrl($pageCode, $params);\n    }\n\n    /**\n     * extractItemUrlParams returns URL-relevant params from a PageLookupItem,\n     * filtering out known metadata keys.\n     */\n    protected function extractItemUrlParams($item): array\n    {\n        return \\Cms\\Models\\PageLookupItem::extractUrlParams($item->attributes);\n    }\n\n    /**\n     * getPageManagerSites\n     */\n    protected function getPageManagerSites($pageCode, $record, $theme): array\n    {\n        if (\n            !Site::hasMultiSite() ||\n            !$record ||\n            !$record->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) ||\n            !$record->isMultisiteEnabled()\n        ) {\n            return [];\n        }\n\n        $page = Page::loadCached($theme, $pageCode);\n        if (!$page) {\n            return [];\n        }\n\n        $result = [];\n        $otherRecords = $record->newOtherSiteQuery()->get();\n        if (!$otherRecords || !$otherRecords->count()) {\n            return [];\n        }\n\n        foreach (Site::listEnabled() as $site) {\n            $otherRecord = $otherRecords->where('site_id', $site->id)->first();\n            if (!$otherRecord) {\n                continue;\n            }\n\n            $url = Cms::siteUrl($page, $site, $otherRecord->makePageUrlParams());\n\n            $result[] = [\n                'url' => $url,\n                'id' => $site->id,\n                'code' => $site->code,\n                'locale' => $site->hard_locale,\n            ];\n        }\n\n        return $result;\n    }\n\n    /**\n     * pageManagerTypeToModel returns the resolved model and its scoped query for a given type\n     */\n    protected function pageManagerTypeToModel(string $typeName)\n    {\n        $model = $query = null;\n\n        $blueprintUuid = $this->getBlueprintUuidFromTypename($typeName);\n\n        if ($blueprint = $this->pageManagerTypeToBlueprint($blueprintUuid)) {\n            $model = $blueprint->getModelClassName()::inSectionUuid($blueprintUuid);\n            $query = $model->applyVisibleFrontend();\n        }\n\n        return [$model, $query];\n    }\n\n    /**\n     * pageManagerBlueprintToType\n     */\n    protected function pageManagerBlueprintToType($blueprint): string\n    {\n        if ($blueprint instanceof EntryBlueprint) {\n            return 'entry-' . $blueprint->uuid;\n        }\n\n        return '';\n    }\n\n    /**\n     * pageManagerTypeToBlueprint\n     */\n    protected function pageManagerTypeToBlueprint($typeName): ?EntryBlueprint\n    {\n        return BlueprintIndexer::instance()->findSection($typeName);\n    }\n\n    /**\n     * getBlueprintUuidFromTypename\n     */\n    protected function getBlueprintUuidFromTypename($typeName)\n    {\n        if (str_starts_with($typeName, 'list-')) {\n            $typeName = substr($typeName, 5);\n        }\n\n        if (str_starts_with($typeName, 'entry-')) {\n            $typeName = substr($typeName, 6);\n        }\n\n        return $typeName;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprintindexer/PermissionRegistry.php",
    "content": "<?php namespace Tailor\\Classes\\BlueprintIndexer;\n\nuse Tailor\\Classes\\PermissionItem;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse Tailor\\Classes\\Blueprint\\SingleBlueprint;\nuse Tailor\\Classes\\Blueprint\\GlobalBlueprint;\n\n/**\n * PermissionRegistry\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait PermissionRegistry\n{\n    /**\n     * @var string permissionCacheKey\n     */\n    protected $permissionCacheKey = 'permission';\n\n    /**\n     * listBlueprintPermissions\n     */\n    protected function listBlueprintPermissions(): array\n    {\n        $result = [];\n\n        foreach ($this->listPermissionsRaw() as $attributes) {\n            $result[] = (new PermissionItem)->useConfig($attributes);\n        }\n\n        return $result;\n    }\n\n    /**\n     * listPermissionsRaw\n     */\n    protected function listPermissionsRaw(): array\n    {\n        $records = $this->getCache($this->permissionCacheKey);\n\n        if (!$records) {\n            $records = $this->indexPermissions();\n        }\n\n        return $records;\n    }\n\n    /**\n     * getPermissionDefinitions\n     */\n    public function getPermissionDefinitions(): array\n    {\n        $result = [];\n\n        foreach ($this->listBlueprintPermissions() as $item) {\n            $result += $item->toBackendPermissionArray();\n        }\n\n        return $result;\n    }\n\n    /**\n     * indexPermissions\n     */\n    public function indexPermissions(): array\n    {\n        $newIndex = $this->findAllPermissionBlueprints();\n\n        $this->putCache($this->permissionCacheKey, $newIndex);\n\n        return $newIndex;\n    }\n\n    /**\n     * findAllFieldsetBlueprints will spin over all fieldset sources\n     */\n    protected function findAllPermissionBlueprints(): array\n    {\n        $result = [];\n\n        // Sections\n        foreach (EntryBlueprint::listInProject() as $blueprint) {\n            if ($config = $this->buildPermissionConfig($blueprint)) {\n                $result[$blueprint->uuid] = $config;\n            }\n        }\n\n        // Globals\n        foreach (GlobalBlueprint::listInProject() as $blueprint) {\n            if ($config = $this->buildPermissionConfig($blueprint)) {\n                $result[$blueprint->uuid] = $config;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * buildPermissionConfig\n     */\n    protected function buildPermissionConfig($blueprint): ?array\n    {\n        $config = [];\n        $config['prefix'] = $blueprint->getPermissionCodeName();\n        $config['uuid'] = $blueprint->uuid;\n        $config['handle'] = $blueprint->handle;\n        $config['label'] = $blueprint->name;\n\n        if ($blueprint instanceof EntryBlueprint) {\n            $config['useMulti'] = true;\n            $config['usePublish'] = true;\n            $config['useDrafts'] = $blueprint->useDrafts();\n            $config['baseLabel'] = __('Update :name Entries', ['name' => $blueprint->name]);\n\n            if ($blueprint instanceof SingleBlueprint) {\n                $config['useMulti'] = false;\n                $config['usePublish'] = true;\n                $config['useDrafts'] = $blueprint->useDrafts();\n                $config['baseLabel'] = __('Update :name', ['name' => $blueprint->name]);\n            }\n        }\n\n        if ($blueprint instanceof GlobalBlueprint) {\n            $config['baseLabel'] = __('Update :name', ['name' => $blueprint->name]);\n        }\n\n        return $config;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/blueprintindexer/SectionIndex.php",
    "content": "<?php namespace Tailor\\Classes\\BlueprintIndexer;\n\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\n\n/**\n * SectionIndex\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait SectionIndex\n{\n    /**\n     * @var string sectionsCacheKey\n     */\n    protected $sectionsCacheKey = 'sections';\n\n    /**\n     * listSections\n     */\n    public function listSections(): array\n    {\n        $result = [];\n\n        foreach ($this->listSectionsRaw() as $attributes) {\n            $result[] = EntryBlueprint::newFromIndexer($attributes);\n        }\n\n        return $result;\n    }\n\n    /**\n     * listSectionsRaw without populating the Blueprint object\n     */\n    protected function listSectionsRaw(): array\n    {\n        $records = $this->getCache($this->sectionsCacheKey);\n\n        if (!$records) {\n            $records = $this->indexSections();\n        }\n\n        return $records;\n    }\n\n    /**\n     * hasSection is a quick way to resolve a section to a UUID\n     */\n    public function hasSection($handleOrUuid): string\n    {\n        $index = $this->listSectionsRaw();\n\n        // UUID found\n        if (isset($index[$handleOrUuid])) {\n            return $handleOrUuid;\n        }\n\n        // Handle found\n        $themeDatasource = $this->getActiveThemeDatasource();\n        foreach ($index as $attributes) {\n            if (isset($attributes['handle']) && $attributes['handle'] === $handleOrUuid) {\n                // Skip blueprints from inactive themes\n                $themeCode = $attributes['_theme'] ?? null;\n                if ($themeCode !== null && $themeDatasource && $themeCode !== $themeDatasource) {\n                    continue;\n                }\n\n                return $attributes['uuid'] ?? '';\n            }\n        }\n\n        return '';\n    }\n\n    /**\n     * findSection\n     */\n    public function findSection($uuid): ?EntryBlueprint\n    {\n        $index = $this->listSectionsRaw();\n\n        if (!isset($index[$uuid])) {\n            return null;\n        }\n\n        return EntryBlueprint::newFromIndexer($index[$uuid]);\n    }\n\n    /**\n     * findSectionByHandle\n     */\n    public function findSectionByHandle(string $handle): ?EntryBlueprint\n    {\n        $themeDatasource = $this->getActiveThemeDatasource();\n        $result = null;\n\n        foreach ($this->listSectionsRaw() as $attributes) {\n            if (\n                (isset($attributes['handle']) && $attributes['handle'] === $handle) ||\n                (isset($attributes['handleSlug']) && $attributes['handleSlug'] === $handle)\n            ) {\n                // Skip blueprints from inactive themes\n                $themeCode = $attributes['_theme'] ?? null;\n                if ($themeCode !== null && $themeDatasource && $themeCode !== $themeDatasource) {\n                    continue;\n                }\n\n                $result = EntryBlueprint::newFromIndexer($attributes);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * indexSections\n     */\n    public function indexSections(): array\n    {\n        $newIndex = [];\n\n        foreach (EntryBlueprint::listInProject() as $blueprint) {\n            $newIndex[$blueprint->uuid] = $blueprint->toArray();\n        }\n\n        $this->putCache($this->sectionsCacheKey, $newIndex);\n\n        return $newIndex;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/editorextension/HasExtensionCrud.php",
    "content": "<?php namespace Tailor\\Classes\\EditorExtension;\n\nuse Lang;\nuse Config;\nuse Request;\nuse BackendAuth;\nuse SystemException;\nuse ApplicationException;\nuse Tailor\\Classes\\EditorExtension;\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Classes\\ThemeBlueprint;\nuse Editor\\Classes\\ApiHelpers;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Tailor\\Classes\\BlueprintVerifier;\nuse Tailor\\Classes\\BlueprintException;\nuse Tailor\\Classes\\BlueprintErrorData;\n\n/**\n * HasExtensionCrud implements CRUD operations for the Tailor Editor Extension\n */\ntrait HasExtensionCrud\n{\n    /**\n     * command_onOpenDocument\n     */\n    protected function command_onOpenDocument()\n    {\n        $documentData = post('documentData');\n        if (!is_array($documentData)) {\n            throw new SystemException('Document data is not provided');\n        }\n\n        $key = ApiHelpers::assertGetKey($documentData, 'key');\n        $documentType = ApiHelpers::assertGetKey($documentData, 'type');\n        $this->assertDocumentTypePermissions($documentType);\n\n        $extraData = $this->getRequestExtraData();\n\n        $isResetFromTemplateFileRequest = isset($extraData['resetFromTemplateFile']);\n        if ($isResetFromTemplateFileRequest) {\n            $this->resetFromTemplateFile($documentType, $key);\n        }\n\n        $template = $this->loadTemplate($documentType, $key);\n        $templateData = [\n            'content' => $template->content,\n            'fileName' => ltrim($template->fileName, '/')\n        ];\n\n        $result = [\n            'document' => $templateData,\n            'metadata' => $this->loadTemplateMetadata($template, $documentData)\n        ];\n\n        return $result;\n    }\n\n    /**\n     * command_onSaveDocument\n     */\n    protected function command_onSaveDocument()\n    {\n        $documentData = $this->getRequestDocumentData();\n        $metadata = $this->getRequestMetadata();\n        $documentType = ApiHelpers::assertGetKey($metadata, 'type');\n        $this->assertDocumentTypePermissions($documentType);\n\n        $templatePath = trim(ApiHelpers::assertGetKey($metadata, 'path'));\n        $template = $this->loadOrCreateTemplate($documentType, $templatePath);\n        $templateData = [];\n\n        $fields = ['fileName', 'content'];\n        foreach ($fields as $field) {\n            if (array_key_exists($field, $documentData)) {\n                $templateData[$field] = $documentData[$field];\n            }\n        }\n\n        $templateData = $this->handleLineEndings($templateData);\n        if ($response = $this->handleMtimeMismatch($template, $metadata)) {\n            return $response;\n        }\n\n        try {\n            $template->content = $templateData['content'];\n            $template->fileName = $templateData['fileName'];\n            $originalContent = $template->content;\n            $template->save();\n        }\n        catch (BlueprintException $ex) {\n            return BlueprintErrorData::fromException($ex)->toResponse();\n        }\n\n        $result = $this->getUpdateResponse($template, $originalContent);\n\n        // Attach any blueprint warnings (e.g. duplicate handles) to the response\n        $warnings = BlueprintVerifier::instance()->getWarnings();\n        if ($warnings) {\n            $result['blueprintWarnings'] = $warnings;\n        }\n\n        return $result;\n    }\n\n    /**\n     * command_onDeleteDocument\n     */\n    protected function command_onDeleteDocument()\n    {\n        $metadata = $this->getRequestMetadata();\n\n        [$template, $documentType] = $this->loadRequestedTemplate($metadata);\n        $this->assertDocumentTypePermissions($documentType);\n\n        $template->delete();\n    }\n\n    /**\n     * command_onMigrateBlueprint\n     */\n    protected function command_onMigrateBlueprint($controller)\n    {\n        $template = $this->loadBlueprintForUpdate();\n\n        BlueprintIndexer::instance()->migrateBlueprint($template);\n\n        return [\n            'mainMenu' => $controller->makeLayoutPartial('mainmenu'),\n            'mainMenuLeft' => $controller->makeLayoutPartial('mainmenu', ['isVerticalMenu'=>true]),\n            'sidenavResponsive' => $controller->makeLayoutPartial('sidenav-responsive')\n        ];\n    }\n\n    /**\n     * command_onBlueprintCreateDirectory\n     */\n    protected function command_onBlueprintCreateDirectory()\n    {\n        $this->assertBlueprintPermissions();\n\n        $documentData = $this->getRequestDocumentData();\n        // $metadata = $this->getRequestMetadata();\n\n        $newName = trim(ApiHelpers::assertGetKey($documentData, 'name'));\n        $parent = ApiHelpers::assertGetKey($documentData, 'parent');\n\n        $this->editorCreateDirectory($this->getBlueprintsPath(), $newName, $parent);\n    }\n\n    /**\n     * command_onBlueprintRename\n     */\n    protected function command_onBlueprintRename()\n    {\n        $this->assertBlueprintPermissions();\n\n        $documentData = $this->getRequestDocumentData();\n\n        $newName = trim(ApiHelpers::assertGetKey($documentData, 'name'));\n        $originalPath = trim(ApiHelpers::assertGetKey($documentData, 'originalPath'));\n        $blueprintExtensions = ['yaml'];\n\n        $this->editorRenameFileOrDirectory($this->getBlueprintsPath(), $newName, $originalPath, $blueprintExtensions);\n    }\n\n    /**\n     * command_onBlueprintDelete\n     */\n    protected function command_onBlueprintDelete()\n    {\n        $this->assertBlueprintPermissions();\n\n        $documentData = $this->getRequestDocumentData();\n        $fileList = ApiHelpers::assertGetKey($documentData, 'files');\n        ApiHelpers::assertIsArray($fileList);\n\n        $this->editorDeleteFileOrDirectory($this->getBlueprintsPath(), $fileList);\n    }\n\n    /**\n     * command_onBlueprintDelete\n     */\n    protected function command_onBlueprintMove()\n    {\n        $this->assertBlueprintPermissions();\n\n        $documentData = $this->getRequestDocumentData();\n\n        $selectedList = ApiHelpers::assertGetKey($documentData, 'source');\n        $destinationDir = ApiHelpers::assertGetKey($documentData, 'destination');\n        $this->editorMoveFilesOrDirectories($this->getBlueprintsPath(), $selectedList, $destinationDir);\n    }\n\n    /**\n     * command_onBlueprintUpload\n     */\n    protected function command_onBlueprintUpload()\n    {\n        $this->assertBlueprintPermissions();\n\n        $this->editorUploadFiles($this->getBlueprintsPath(), ['yaml']);\n    }\n\n    /**\n     * loadTemplate returns an existing template of a given type\n     * @param string $documentType\n     * @param string $path\n     * @return mixed\n     */\n    private function loadTemplate($documentType, $path)\n    {\n        $class = $this->resolveTypeClassName($documentType);\n\n        if (!($template = call_user_func([$class, 'load'], $path))) {\n            throw new ApplicationException(trans('tailor::lang.blueprint.not_found'));\n        }\n\n        return $template;\n    }\n\n    /**\n     * resolveTypeClassName resolves a template type to its class name\n     * @param string $documentType\n     * @return string\n     */\n    private function resolveTypeClassName($documentType)\n    {\n        $types = [\n            EditorExtension::DOCUMENT_TYPE_BLUEPRINT => Blueprint::class,\n            EditorExtension::DOCUMENT_TYPE_THEME_BLUEPRINT => ThemeBlueprint::class\n        ];\n\n        if (!array_key_exists($documentType, $types)) {\n            throw new SystemException(trans('tailor::lang.editor.invalid_type'));\n        }\n\n        return $types[$documentType];\n    }\n\n    /**\n     * makeMetadataForNewTemplate builds meta data for new templates\n     */\n    protected function makeMetadataForNewTemplate(string $documentType): array\n    {\n        return [\n            'mtime' => null,\n            'path' => null,\n            'type' => $documentType,\n            'isNewDocument' => true\n        ];\n    }\n\n    /**\n     * loadTemplateMetadata\n     */\n    private function loadTemplateMetadata($template, $documentData)\n    {\n        $typeNames = [\n            EditorExtension::DOCUMENT_TYPE_BLUEPRINT => Lang::get('tailor::lang.editor.blueprint'),\n            EditorExtension::DOCUMENT_TYPE_THEME_BLUEPRINT => Lang::get('tailor::lang.editor.blueprint')\n        ];\n\n        $documentType = $documentData['type'];\n        if (!array_key_exists($documentType, $typeNames)) {\n            throw new SystemException(sprintf('Document type name is not defined: %s', $documentData['type']));\n        }\n\n        $fileName = ltrim($template->fileName, '/');\n\n        $result = [\n            'mtime' => $template->mtime,\n            'path' => $fileName,\n            'type' => $documentType,\n            'typeName' => $typeNames[$documentType]\n        ];\n\n        return $result;\n    }\n\n    /**\n     * getRequestMetadata\n     */\n    private function getRequestMetadata()\n    {\n        $metadata = Request::input('documentMetadata');\n        if (!is_array($metadata)) {\n            throw new SystemException('Invalid documentMetadata');\n        }\n\n        return $metadata;\n    }\n\n    /**\n     * getRequestExtraData\n     */\n    private function getRequestExtraData()\n    {\n        $extraData = Request::input('extraData');\n        if (!is_array($extraData)) {\n            return [];\n        }\n\n        return $extraData;\n    }\n\n    /**\n     * getRequestDocumentData\n     */\n    private function getRequestDocumentData()\n    {\n        $documentData = Request::input('documentData');\n        if (!is_array($documentData)) {\n            throw new SystemException('Invalid documentData');\n        }\n\n        return $documentData;\n    }\n\n    /**\n     * createTemplate\n     */\n    private function createTemplate($documentType)\n    {\n        $class = $this->resolveTypeClassName($documentType);\n\n        $template = new $class();\n\n        return $template;\n    }\n\n    /**\n     * loadOrCreateTemplate\n     */\n    private function loadOrCreateTemplate($documentType, $templatePath)\n    {\n        if ($templatePath) {\n            return $this->loadTemplate($documentType, $templatePath);\n        }\n\n        return $this->createTemplate($documentType);\n    }\n\n    /**\n     * handleLineEndings\n     */\n    private function handleLineEndings($templateData)\n    {\n        $convertLineEndings = Config::get('system.convert_line_endings', false) === true;\n        if (!$convertLineEndings) {\n            return $templateData;\n        }\n\n        if (!empty($templateData['content'])) {\n            $templateData['content'] = $this->convertLineEndings($templateData['content']);\n        }\n\n        return $templateData;\n    }\n\n    /**\n     * Replaces Windows style (/r/n) line endings with unix style (/n)\n     * line endings.\n     * @param string $markup The markup to convert to unix style endings\n     * @return string\n     */\n    private function convertLineEndings($markup)\n    {\n        $markup = str_replace([\"\\r\\n\", \"\\r\"], \"\\n\", $markup);\n\n        return $markup;\n    }\n\n    /**\n     * handleMtimeMismatch\n     */\n    private function handleMtimeMismatch($template, $metadata)\n    {\n        $requestMtime = ApiHelpers::assertGetKey($metadata, 'mtime');\n\n        if (!$template->mtime) {\n            return;\n        }\n\n        if (post('documentForceSave')) {\n            return;\n        }\n\n        if ($requestMtime != $template->mtime) {\n            return ['mtimeMismatch' => true];\n        }\n    }\n\n    /**\n     * getUpdateResponse\n     */\n    private function getUpdateResponse($template, $originalContent)\n    {\n        $navigatorPath = dirname($template->fileName);\n        if ($navigatorPath == '.') {\n            $navigatorPath = \"\";\n        }\n\n        $result = [\n            'metadata' => [\n                'mtime' => $template->mtime,\n                'path' => $template->fileName,\n                'navigatorPath' => $navigatorPath,\n                'uniqueKey' => $template->fileName,\n                'fileName' => basename($template->fileName)\n            ],\n            'contentChanged' => $originalContent != $template->content\n        ];\n\n        $result['fileName'] = $template->fileName;\n\n        return $result;\n    }\n\n    /**\n     * loadRequestedTemplate\n     */\n    private function loadRequestedTemplate($metadata)\n    {\n        $metadata = $metadata ? $metadata : $this->getRequestMetadata();\n\n        $documentType = ApiHelpers::assertGetKey($metadata, 'type');\n        $templatePath = trim(ApiHelpers::assertGetKey($metadata, 'path'));\n\n        return [\n            $this->loadTemplate($documentType, $templatePath),\n            $documentType\n        ];\n    }\n\n    /**\n     * assertDocumentTypePermissions\n     */\n    private function assertDocumentTypePermissions($documentType)\n    {\n        $user = BackendAuth::getUser();\n\n        if (!EditorExtension::hasAccessToDocType($user, $documentType)) {\n            throw new ApplicationException(Lang::get(\n                'editor::lang.editor.error_no_doctype_permissions',\n                ['doctype' => $documentType]\n            ));\n        }\n    }\n\n    /**\n     * assertBlueprintPermissions checks permissions for blueprint file operations,\n     * resolving the document type from the request.\n     */\n    private function assertBlueprintPermissions()\n    {\n        $type = post('documentType', post('documentMetadata[documentType]'));\n\n        if (!$type) {\n            $type = EditorExtension::DOCUMENT_TYPE_BLUEPRINT;\n        }\n\n        $this->assertDocumentTypePermissions($type);\n    }\n\n    /**\n     * getBlueprintsPath\n     */\n    private function getBlueprintsPath()\n    {\n        if ($type = post('documentType', post('documentMetadata[documentType]'))) {\n            $className = $this->resolveTypeClassName($type);\n            return (new $className)->getBasePath();\n        }\n\n        return (new Blueprint)->getBasePath();\n    }\n\n    /**\n     * loadBlueprintForUpdate\n     */\n    private function loadBlueprintForUpdate()\n    {\n        $metadata = $this->getRequestMetadata();\n        $documentType = ApiHelpers::assertGetKey($metadata, 'type');\n        $this->assertDocumentTypePermissions($documentType);\n\n        $templatePath = trim(ApiHelpers::assertGetKey($metadata, 'path'));\n        return $this->loadTemplate($documentType, $templatePath);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/editorextension/HasExtensionState.php",
    "content": "<?php namespace Tailor\\Classes\\EditorExtension;\n\nuse System;\nuse Cms\\Classes\\Theme;\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Classes\\EditorExtension;\nuse Backend\\VueComponents\\TreeView\\NodeDefinition;\nuse Editor\\Classes\\NewDocumentDescription;\n\n/**\n * HasExtensionState initializes state for the Tailor Editor Extension\n */\ntrait HasExtensionState\n{\n    /**\n     * getTailorBlueprintNewDocumentData\n     */\n    private function getTailorBlueprintNewDocumentData()\n    {\n        $description = new NewDocumentDescription(\n            trans('tailor::lang.blueprint.new'),\n            $this->makeMetadataForNewTemplate(EditorExtension::DOCUMENT_TYPE_BLUEPRINT)\n        );\n\n        $description->setIcon(EditorExtension::ICON_COLOR_BLUEPRINT, 'backend-icon-background entity-small tailor-blueprint');\n        $description->setInitialDocumentData([\n            'fileName' => 'new-blueprint.yaml',\n            'content' => $this->getBlueprintTemplate('entry')\n        ]);\n\n        return $description;\n    }\n\n    /**\n     * addBlueprintsNavigatorNodes\n     */\n    protected function addBlueprintsNavigatorNodes($rootNode)\n    {\n        $blueprintsNode = $rootNode->addNode(__(\"App\"), EditorExtension::DOCUMENT_TYPE_BLUEPRINT);\n        $blueprintsNode\n            ->setSortBy('isFolder:desc,fileName')\n            ->setDragAndDropMode([NodeDefinition::DND_MOVE, NodeDefinition::DND_CUSTOM_EXTERNAL])\n            ->setDisplayMode(NodeDefinition::DISPLAY_MODE_TREE)\n            ->setChildKeyPrefix(EditorExtension::DOCUMENT_TYPE_BLUEPRINT.':')\n            ->setMultiSelect(true)\n            ->setHasApiMenuItems(true)\n            ->setUserData([\n                'path' => '/',\n                'topLevel' => true\n            ])\n        ;\n\n        $this->addDirectoryBlueprintNodes('', $blueprintsNode);\n    }\n\n    /**\n     * getTailorThemeBlueprintNewDocumentData\n     */\n    private function getTailorThemeBlueprintNewDocumentData()\n    {\n        $description = new NewDocumentDescription(\n            trans('tailor::lang.blueprint.new'),\n            $this->makeMetadataForNewTemplate(EditorExtension::DOCUMENT_TYPE_THEME_BLUEPRINT)\n        );\n\n        $description->setIcon(EditorExtension::ICON_COLOR_BLUEPRINT, 'backend-icon-background entity-small tailor-blueprint');\n        $description->setInitialDocumentData([\n            'fileName' => 'new-blueprint.yaml',\n            'content' => $this->getBlueprintTemplate('entry')\n        ]);\n\n        return $description;\n    }\n\n    /**\n     * addBlueprintsNavigatorNodes\n     */\n    protected function addThemeBlueprintsNavigatorNodes($rootNode)\n    {\n        if (!System::hasModule('Cms')) {\n            return;\n        }\n\n        $blueprintsNode = $rootNode->addNode(__(\"Theme\"), EditorExtension::DOCUMENT_TYPE_THEME_BLUEPRINT);\n        $blueprintsNode\n            ->setSortBy('isFolder:desc,fileName')\n            ->setDragAndDropMode([NodeDefinition::DND_MOVE, NodeDefinition::DND_CUSTOM_EXTERNAL])\n            ->setDisplayMode(NodeDefinition::DISPLAY_MODE_TREE)\n            ->setChildKeyPrefix(EditorExtension::DOCUMENT_TYPE_THEME_BLUEPRINT.':')\n            ->setMultiSelect(true)\n            ->setHasApiMenuItems(true)\n            ->setUserData([\n                'path' => '/',\n                'topLevel' => true\n            ])\n        ;\n\n        $this->addDirectoryBlueprintNodes('', $blueprintsNode, true);\n    }\n\n    /**\n     * addDirectoryBlueprintNodes\n     */\n    protected function addDirectoryBlueprintNodes(string $path, $parentNode, $isTheme = false)\n    {\n        $blueprints = new Blueprint;\n        if ($isTheme) {\n            $theme = Theme::getEditTheme() ?: Theme::getActiveTheme();\n            if (!$theme) {\n                return;\n            }\n\n            $blueprints = Blueprint::inDatasource($theme->getPath() . '/blueprints');\n        }\n\n        $blueprints = $blueprints->get([\n            'recursive' => false,\n            'filterPath' => $path\n        ]);\n\n        foreach ($blueprints as $blueprint) {\n            $node = $parentNode\n                ->addNode($blueprint['fileName'], $blueprint['path'])\n                ->setHasApiMenuItems(true)\n                ->setUserData($blueprint)\n            ;\n\n            if ($blueprint['isFolder']) {\n                $node->setFolderIcon();\n                $innerPath = $path ? $path.'/'.$blueprint['fileName'] : $blueprint['fileName'];\n                $this->addDirectoryBlueprintNodes($innerPath, $node, $isTheme);\n            }\n            else {\n                $node->setHideInQuickAccess(!$blueprint['isEditable']);\n                $node->setNoMoveDrop(true);\n                $node->setIcon(EditorExtension::ICON_COLOR_BLUEPRINT, 'backend-icon-background entity-small tailor-blueprint');\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/editorextension/templates/entry.yaml",
    "content": "handle: MyEntry\ntype: entry\nname: Entry\ndrafts: false\n\nprimaryNavigation:\n    label: Entries\n    icon: icon-magic\n    order: 110\n\nnavigation:\n    parent: MyEntry\n    icon: icon-magic\n    order: 10\n\nfields:\n    description:\n        label: Entry description\n        type: textarea\n        size: small\n"
  },
  {
    "path": "modules/tailor/classes/editorextension/templates/global.yaml",
    "content": "handle: MyGlobal\ntype: global\nname: Settings Example\n\nprimaryNavigation:\n    label: Settings\n    icon: icon-magic\n    order: 150\n\nnavigation:\n    parent: MyGlobal\n    icon: icon-magic\n    order: 10\n\nfields:\n    website_name:\n        label: Company Name\n        tab: General\n\n    facebook_url:\n        label: Facebook URL\n        placeholder: \"https://...\"\n        tab: General\n\n    twitter_url:\n        label: Twitter URL\n        placeholder: \"https://...\"\n        tab: General\n\n    github_url:\n        label: GitHub URL\n        placeholder: \"https://...\"\n        tab: General\n\n    linkedin_url:\n        label: LinkedIn URL\n        placeholder: \"https://...\"\n        tab: General\n"
  },
  {
    "path": "modules/tailor/classes/editorextension/templates/mixin.yaml",
    "content": "handle: MyMixin\ntype: mixin\nname: Mixin Example\n\nfields:\n    banner:\n        tab: Manage\n        label: Banner\n        type: fileupload\n        mode: image\n        maxFiles: 1\n\n    is_featured:\n        tab: Featured\n        label: Featured Post\n        comment: Check this box to flag this post as special\n        type: checkbox\n\n    featured_text:\n        tab: Featured\n        label: Featured Text\n        type: textarea\n        size: small\n\n    gallery:\n        label: Gallery\n        type: fileupload\n        mode: image\n        span: adaptive\n        tab: Gallery\n\n    gallery_media:\n        label: Media\n        type: mediafinder\n        mode: image\n        span: adaptive\n        tab: Media\n"
  },
  {
    "path": "modules/tailor/classes/editorextension/templates/single.yaml",
    "content": "handle: MySingle\ntype: single\nname: Single\ndrafts: true\n\nprimaryNavigation:\n    label: Single\n    icon: icon-building\n    order: 120\n\nfields:\n    description:\n        label: Description\n        type: textarea\n        size: small\n"
  },
  {
    "path": "modules/tailor/classes/editorextension/templates/stream.yaml",
    "content": "handle: MyStream\ntype: stream\nname: Records\ndrafts: true\n\nprimaryNavigation:\n    label: Stream\n    icon: icon-bookmark\n    order: 130\n\nnavigation:\n    icon: icon-bookmark\n    parent: MyStream\n    order: 10\n\ngroups:\n    regular_post:\n        name: Regular Post\n        fields:\n            content:\n                tab: Edit\n                label: Content\n                type: richeditor\n                span: adaptive\n\n    markdown_post:\n        name: Markdown Post\n        fields:\n            content:\n                tab: Edit\n                label: Content\n                type: markdown\n                span: adaptive\n"
  },
  {
    "path": "modules/tailor/classes/editorextension/templates/structure.yaml",
    "content": "handle: MyStructure\ntype: structure\nname: Structure\ndrafts: true\n\nstructure:\n    maxDepth: 3\n\nprimaryNavigation:\n    label: Structure\n    icon: icon-tree\n    order: 140\n\nnavigation:\n    icon: icon-tree\n    parent: MyStructure\n    order: 10\n\nfields:\n    content:\n        label: Content\n        tab: Edit\n        type: richeditor\n        span: adaptive\n\n    summary_text:\n        label: Summary Text\n        type: textarea\n        size: small\n\n    gallery:\n        label: Gallery\n        type: fileupload\n        mode: image\n"
  },
  {
    "path": "modules/tailor/classes/relations/CustomFieldHasManyRelation.php",
    "content": "<?php namespace Tailor\\Classes\\Relations;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse October\\Rain\\Database\\Relations\\HasMany;\n\n/**\n * CustomFieldHasManyRelation adds a field name to has many\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CustomFieldHasManyRelation extends HasMany\n{\n    /**\n     * addConstraints on the relation query.\n     */\n    public function addConstraints()\n    {\n        if (static::$constraints) {\n            $this->getRelationQuery()->where('host_field', $this->relationName);\n\n            parent::addConstraints();\n        }\n    }\n\n    /**\n     * addEagerConstraints for an eager load of the relation.\n     */\n    public function addEagerConstraints(array $models)\n    {\n        parent::addEagerConstraints($models);\n\n        $this->getRelationQuery()->where('host_field', $this->relationName);\n    }\n\n    /**\n     * setForeignAttributesForCreate a related model.\n     */\n    protected function setForeignAttributesForCreate(Model $model)\n    {\n        $model->{$this->getForeignKeyName()} = $this->getParentKey();\n\n        $model->host_field = $this->relationName;\n    }\n\n    /**\n     * getRelationExistenceQuery\n     */\n    public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*'])\n    {\n        return parent::getRelationExistenceQuery($query, $parentQuery, $columns)->where(\n            $query->qualifyColumn('host_field'),\n            $this->relationName\n        );\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/relations/CustomFieldHasOneRelation.php",
    "content": "<?php namespace Tailor\\Classes\\Relations;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse October\\Rain\\Database\\Relations\\HasOne;\n\n/**\n * CustomFieldHasOneRelation adds a field name to has many\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CustomFieldHasOneRelation extends HasOne\n{\n    /**\n     * addConstraints on the relation query.\n     */\n    public function addConstraints()\n    {\n        if (static::$constraints) {\n            $this->getRelationQuery()->where('host_field', $this->relationName);\n\n            parent::addConstraints();\n        }\n    }\n\n    /**\n     * addEagerConstraints for an eager load of the relation.\n     */\n    public function addEagerConstraints(array $models)\n    {\n        parent::addEagerConstraints($models);\n\n        $this->getRelationQuery()->where('host_field', $this->relationName);\n    }\n\n    /**\n     * setForeignAttributesForCreate a related model.\n     */\n    protected function setForeignAttributesForCreate(Model $model)\n    {\n        $model->{$this->getForeignKeyName()} = $this->getParentKey();\n\n        $model->host_field = $this->relationName;\n    }\n\n    /**\n     * getRelationExistenceQuery\n     */\n    public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*'])\n    {\n        return parent::getRelationExistenceQuery($query, $parentQuery, $columns)->where(\n            $query->qualifyColumn('host_field'),\n            $this->relationName\n        );\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/relations/CustomMultiJoinRelation.php",
    "content": "<?php namespace Tailor\\Classes\\Relations;\n\nuse Arr;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse October\\Rain\\Database\\Relations\\MorphToMany;\n\n/**\n * CustomMultiJoinRelation is used by tailor records, creating relationships\n * to to other tailor records (entries fields).\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CustomMultiJoinRelation extends MorphToMany\n{\n    /**\n     * @var string fieldName\n     */\n    protected $fieldName;\n\n    /**\n     * __construct is inherited\n     */\n    public function __construct(\n        Builder $query,\n        Model $parent,\n        $name,\n        $table,\n        $foreignKey,\n        $otherKey,\n        $parentKey,\n        $relatedKey,\n        $relationName = null,\n        $inverse = false\n    ) {\n        $foreignKey = $inverse ? 'parent_id' : 'relation_id';\n        $otherKey = $inverse ? 'relation_id' : 'parent_id';\n\n        $this->fieldName = $name;\n\n        parent::__construct(\n            $query,\n            $parent,\n            'relation',\n            $table,\n            $foreignKey,\n            $otherKey,\n            $parentKey,\n            $relatedKey,\n            $relationName,\n            $inverse\n        );\n    }\n\n    /**\n     * addDefinedConstraintsToRelation\n     */\n    public function addDefinedConstraintsToRelation($relation, ?array $args = null)\n    {\n        parent::addDefinedConstraintsToRelation($relation, $args);\n\n        $relation->withPivot(['site_id']);\n    }\n\n    /**\n     * addDefinedConstraintsToQuery\n     */\n    public function addDefinedConstraintsToQuery($query, ?array $args = null)\n    {\n        parent::addDefinedConstraintsToQuery($query, $args);\n    }\n\n    /**\n     * newSimpleRelationQuery\n     */\n    protected function newSimpleRelationQuery(array $ids)\n    {\n        $query = parent::newSimpleRelationQuery($ids);\n\n        parent::addDefinedConstraintsToQuery($query);\n\n        return $query;\n    }\n\n    /**\n     * addWhereConstraints sets the where clause for the relation query\n     */\n    protected function addWhereConstraints(): CustomMultiJoinRelation\n    {\n        parent::addWhereConstraints();\n\n        $this->where($this->qualifyPivotColumn('field_name'), $this->fieldName);\n\n        return $this;\n    }\n\n    /**\n     * addEagerConstraints\n     */\n    public function addEagerConstraints(array $models)\n    {\n        parent::addEagerConstraints($models);\n\n        $this->where($this->qualifyPivotColumn('field_name'), $this->fieldName);\n    }\n\n    /**\n     * baseAttachRecord creates a new pivot attachment record.\n     * @param  int   $id\n     * @param  bool  $timed\n     * @return array\n     */\n    protected function baseAttachRecord($id, $timed)\n    {\n        return Arr::add(\n            parent::baseAttachRecord($id, $timed),\n            'field_name',\n            $this->fieldName\n        );\n    }\n\n    /**\n     * getRelationExistenceQuery\n     */\n    public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*'])\n    {\n        return parent::getRelationExistenceQuery($query, $parentQuery, $columns)->where(\n            $this->table.'.field_name',\n            $this->fieldName\n        );\n    }\n\n    /**\n     * newPivotQuery creates a new query builder for the pivot table.\n     */\n    public function newPivotQuery()\n    {\n        return parent::newPivotQuery()->where($this->table.'.field_name', $this->fieldName);\n    }\n\n    /**\n     * attach a model to the parent\n     */\n    public function attach($id, array $attributes = [], $touch = true)\n    {\n        $attributes += [\n            'relation_type' => $this->morphClass,\n            'field_name' => $this->fieldName\n        ];\n\n        return parent::attach($id, $attributes, $touch);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/relations/CustomNestedJoinRelation.php",
    "content": "<?php namespace Tailor\\Classes\\Relations;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Builder;\nuse October\\Rain\\Database\\Relations\\BelongsToMany;\n\n/**\n * CustomNestedJoinRelation is used by tailor records, creating relationships\n * to nested content joins via the \"tailor_content_joins\" table.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass CustomNestedJoinRelation extends BelongsToMany\n{\n    /**\n     * @var string parentClass is the class name of the parent morph type (inverse)\n     */\n    protected $parentClass;\n\n    /**\n     * @var string morphClass is the class name of the morph type\n     */\n    protected $morphClass;\n\n    /**\n     * __construct is inherited\n     */\n    public function __construct(\n        Builder $query,\n        Model $parent,\n        $table,\n        $foreignPivotKey,\n        $relatedPivotKey,\n        $parentKey,\n        $relatedKey,\n        $relationName = null\n    ) {\n        $foreignPivotKey = 'parent_id';\n        $relatedPivotKey = 'relation_id';\n\n        $this->parentClass = $parent->getMorphClass();\n        $this->morphClass = $query->getModel()->getMorphClass();\n\n        parent::__construct(\n            $query,\n            $parent,\n            $table,\n            $foreignPivotKey,\n            $relatedPivotKey,\n            $parentKey,\n            $relatedKey,\n            $relationName\n        );\n    }\n\n    /**\n     * addDefinedConstraintsToRelation\n     */\n    public function addDefinedConstraintsToRelation($relation, ?array $args = null)\n    {\n        parent::addDefinedConstraintsToRelation($relation, $args);\n\n        $relation->withPivot(['field_name', 'parent_type', 'relation_type', 'site_id']);\n    }\n\n    /**\n     * addDefinedConstraintsToQuery\n     */\n    public function addDefinedConstraintsToQuery($query, ?array $args = null)\n    {\n        parent::addDefinedConstraintsToQuery($query, $args);\n    }\n\n    /**\n     * newSimpleRelationQuery\n     */\n    protected function newSimpleRelationQuery(array $ids)\n    {\n        $query = parent::newSimpleRelationQuery($ids);\n\n        parent::addDefinedConstraintsToQuery($query);\n\n        return $query;\n    }\n\n    /**\n     * addWhereConstraints sets the where clause for the relation query\n     */\n    protected function addWhereConstraints(): CustomNestedJoinRelation\n    {\n        parent::addWhereConstraints();\n\n        $this->where($this->qualifyPivotColumn('parent_type'), $this->parentClass);\n        $this->where($this->qualifyPivotColumn('relation_type'), $this->morphClass);\n        $this->where($this->qualifyPivotColumn('field_name'), $this->relationName);\n\n        return $this;\n    }\n\n    /**\n     * getRelationExistenceQuery\n     */\n    public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*'])\n    {\n        return parent::getRelationExistenceQuery($query, $parentQuery, $columns)\n            ->where($this->qualifyPivotColumn('parent_type'), $this->parentClass)\n            ->where($this->qualifyPivotColumn('relation_type'), $this->morphClass)\n            ->where($this->qualifyPivotColumn('field_name'), $this->relationName)\n        ;\n    }\n\n    /**\n     * attach a model to the parent\n     */\n    public function attach($id, array $attributes = [], $touch = true)\n    {\n        $attributes += [\n            'parent_type' => $this->parentClass,\n            'relation_type' => $this->morphClass,\n            'field_name' => $this->relationName\n        ];\n\n        return parent::attach($id, $attributes, $touch);\n    }\n\n    /**\n     * addEagerConstraints\n     */\n    public function addEagerConstraints(array $models)\n    {\n        parent::addEagerConstraints($models);\n\n        $this->where($this->qualifyPivotColumn('parent_type'), $this->parentClass);\n        $this->where($this->qualifyPivotColumn('relation_type'), $this->morphClass);\n        $this->where($this->qualifyPivotColumn('field_name'), $this->relationName);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/schemabuilder/HasCommonColumns.php",
    "content": "<?php namespace Tailor\\Classes\\SchemaBuilder;\n\n/**\n * HasCommonColumns\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasCommonColumns\n{\n    /**\n     * defineStartColumns\n     */\n    protected function defineStartColumns($table)\n    {\n        if (!$this->hasColumn('id')) {\n            $table->increments('id');\n        }\n\n        if (!$this->hasColumn('site_id')) {\n            $table->integer('site_id')->nullable()->index();\n        }\n\n        if (!$this->hasColumn('site_root_id')) {\n            $table->integer('site_root_id')->nullable()->index();\n        }\n\n        if (!$this->hasColumn('blueprint_uuid')) {\n            $table->string('blueprint_uuid')->nullable()->index();\n        }\n\n        if (!$this->hasColumn('content_group')) {\n            $table->string('content_group')->nullable()->index();\n        }\n\n        if (!$this->hasColumn('title')) {\n            $table->string('title')->nullable();\n        }\n\n        if (!$this->hasColumn('slug')) {\n            $table->string('slug')->nullable()->index();\n        }\n    }\n\n    /**\n     * defineEndColumns\n     */\n    protected function defineEndColumns($table)\n    {\n        if (!$this->hasColumn('created_user_id')) {\n            $table->integer('created_user_id')->unsigned()->nullable();\n        }\n\n        if (!$this->hasColumn('updated_user_id')) {\n            $table->integer('updated_user_id')->unsigned()->nullable();\n        }\n\n        if (!$this->hasColumn('deleted_user_id')) {\n            $table->integer('deleted_user_id')->unsigned()->nullable();\n        }\n\n        if (!$this->hasColumn('deleted_at')) {\n            $table->softDeletes();\n        }\n\n        if (!$this->hasColumn('created_at')) {\n            $table->timestamps();\n        }\n    }\n\n    /**\n     * defineVisibilityColumns\n     */\n    protected function defineVisibilityColumns($table)\n    {\n        if (!$this->hasColumn('is_enabled')) {\n            $table->boolean('is_enabled')->nullable();\n        }\n\n        if (!$this->hasColumn('published_at')) {\n            $table->timestamp('published_at')->nullable();\n        }\n\n        if (!$this->hasColumn('published_at_date')) {\n            $table->timestamp('published_at_date')->nullable();\n        }\n\n        if (!$this->hasColumn('expired_at')) {\n            $table->timestamp('expired_at')->nullable();\n        }\n    }\n\n    /**\n     * defineDraftableColumns\n     */\n    protected function defineDraftableColumns($table)\n    {\n        if (!$this->hasColumn('draft_mode')) {\n            $table->integer('draft_mode')->default(1);\n        }\n\n        if (!$this->hasColumn('primary_id')) {\n            $table->integer('primary_id')->unsigned()->nullable()->index();\n            $this->tableColumns[] = 'primary_id';\n        }\n\n        if (!$this->hasColumn('primary_attrs')) {\n            $table->mediumText('primary_attrs')->nullable();\n            $this->tableColumns[] = 'primary_attrs';\n        }\n    }\n\n    /**\n     * defineVersionableColumns\n     */\n    protected function defineVersionableColumns($table)\n    {\n        if (!$this->hasColumn('is_version')) {\n            $table->boolean('is_version')->default(false);\n        }\n\n        if (!$this->hasColumn('primary_id')) {\n            $table->integer('primary_id')->unsigned()->nullable()->index();\n            $this->tableColumns[] = 'primary_id';\n        }\n\n        if (!$this->hasColumn('primary_attrs')) {\n            $table->mediumText('primary_attrs')->nullable();\n            $this->tableColumns[] = 'primary_attrs';\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/schemabuilder/HasJoinTable.php",
    "content": "<?php namespace Tailor\\Classes\\SchemaBuilder;\n\nuse Schema;\n\n/**\n * HasJoinTable\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasJoinTable\n{\n    /**\n     * migrateJoins\n     */\n    public function migrateJoins()\n    {\n        $tableName = $this->blueprint->getJoinTableName();\n        $tableExists = Schema::hasTable($tableName);\n\n        if ($tableExists) {\n            return;\n        }\n\n        Schema::create($tableName, function ($table) {\n            $this->defineJoinTableColumns($table);\n            $this->defineTableComment($table, \"Joins for :name [:id].\");\n        });\n\n        $this->actionCount++;\n    }\n\n    /**\n     * defineJoinTableColumns\n     */\n    protected function defineJoinTableColumns($table)\n    {\n        $table->integer('parent_id')->nullable();\n        $table->integer('relation_id')->nullable();\n        $table->string('relation_type')->nullable();\n        $table->string('field_name')->nullable()->index();\n        $table->integer('site_id')->nullable()->index();\n\n        $table->index(['parent_id', 'relation_type', 'field_name'], $table->getTable().'_idx');\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/schemabuilder/HasRepeaterTable.php",
    "content": "<?php namespace Tailor\\Classes\\SchemaBuilder;\n\nuse Schema;\n\n/**\n * HasRepeaterTable\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasRepeaterTable\n{\n    /**\n     * migrateRepeaters\n     */\n    public function migrateRepeaters()\n    {\n        $tableName = $this->blueprint->getRepeaterTableName();\n        $tableExists = Schema::hasTable($tableName);\n\n        if ($tableExists) {\n            Schema::table($tableName, function ($table) {\n                $this->patchRepeaterTableColumns($table);\n            });\n            return;\n        }\n\n        Schema::create($tableName, function ($table) {\n            $this->defineRepeaterTableColumns($table);\n            $this->defineTableComment($table, \"Repeaters for :name [:id].\");\n        });\n\n        $this->actionCount++;\n    }\n\n    /**\n     * patchRepeaterTableColumns\n     */\n    protected function patchRepeaterTableColumns($table)\n    {\n        $tableColumns = Schema::getColumnListing($table->getTable());\n\n        // Patch missing columns\n        if (!in_array('parent_id', $tableColumns)) {\n            $table->integer('parent_id')->nullable();\n        }\n\n        // Increment actions\n        if ($table->getColumns() || $table->getCommands()) {\n            $this->defineTableComment($table);\n            $this->actionCount++;\n        }\n    }\n\n    /**\n     * defineRepeaterTableColumns\n     */\n    protected function defineRepeaterTableColumns($table)\n    {\n        $table->increments('id');\n        $table->integer('host_id')->nullable();\n        $table->string('host_field')->nullable();\n        $table->integer('site_id')->nullable()->index();\n        $table->string('content_group')->nullable();\n        $table->mediumText('content_value')->nullable();\n        $table->text('content_spawn_path')->nullable();\n        $table->integer('parent_id')->nullable();\n        $table->integer('sort_order')->nullable();\n        $table->timestamps();\n        $table->index(['host_id', 'host_field'], $table->getTable().'_idx');\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/schemabuilder/HasStreamColumns.php",
    "content": "<?php namespace Tailor\\Classes\\SchemaBuilder;\n\n/**\n * HasStreamColumns\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasStreamColumns\n{\n    /**\n     * defineStreamColumns\n     */\n    protected function defineStreamColumns($table)\n    {\n        if (!$this->hasColumn('published_at_day')) {\n            $table->integer('published_at_day')->nullable();\n        }\n\n        if (!$this->hasColumn('published_at_month')) {\n            $table->integer('published_at_month')->nullable();\n        }\n\n        if (!$this->hasColumn('published_at_year')) {\n            $table->integer('published_at_year')->nullable();\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/schemabuilder/HasStructureColumns.php",
    "content": "<?php namespace Tailor\\Classes\\SchemaBuilder;\n\n/**\n * HasStructureColumns\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasStructureColumns\n{\n    /**\n     * defineStructureColumns\n     */\n    protected function defineStructureColumns($table)\n    {\n        if (!$this->hasColumn('fullslug')) {\n            $table->string('fullslug')->nullable()->index();\n        }\n\n        if (!$this->hasColumn('parent_id')) {\n            $table->integer('parent_id')->nullable();\n        }\n\n        if (!$this->hasColumn('nest_left')) {\n            $table->integer('nest_left')->nullable();\n        }\n\n        if (!$this->hasColumn('nest_right')) {\n            $table->integer('nest_right')->nullable();\n        }\n\n        if (!$this->hasColumn('nest_depth')) {\n            $table->integer('nest_depth')->nullable();\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/schemabuilder/HasTablePatches.php",
    "content": "<?php namespace Tailor\\Classes\\SchemaBuilder;\n\nuse Site;\nuse Schema;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse Tailor\\Classes\\Blueprint\\StructureBlueprint;\nuse Tailor\\Models\\StructureRecord;\nuse Tailor\\Models\\EntryRecord;\nuse Exception;\n\n/**\n * HasTablePatches\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasTablePatches\n{\n    /**\n     * migrateTablePatches when certain conditions change\n     */\n    protected function migrateTablePatches()\n    {\n        $this->migrateRenameColumns();\n        $this->migrateDropColumns();\n        $this->migrateMetaData();\n\n        $this->patchTableWhenBlueprintBecomesStructure();\n        $this->patchTableWhenBlueprintBecomesMultisite();\n    }\n\n    /**\n     * migrateRenameColumns\n     */\n    protected function migrateRenameColumns()\n    {\n        $schemaObj = $this->getContentSchema();\n        $changedFields = $schemaObj->getChangedFields();\n\n        foreach ($changedFields as $fieldName => $details) {\n            // Never touch a reserved field\n            if (in_array($fieldName, $this->reservedFieldNames)) {\n                continue;\n            }\n\n            $wantType = $details['type'] ?? null;\n            if (!$wantType) {\n                continue;\n            }\n\n            try {\n                Schema::table($this->tableName, function($table) use ($fieldName, $wantType) {\n                    $table->$wantType($fieldName)->nullable()->change();\n                });\n            }\n            catch (Exception $ex) {\n                $droppedName = 'x_'.$fieldName.'_'.hash('crc32', str_random());\n\n                Schema::table($this->tableName, function($table) use ($fieldName, $droppedName) {\n                    $table->renameColumn($fieldName, $droppedName);\n                });\n\n                Schema::table($this->tableName, function($table) use ($fieldName, $wantType) {\n                    $table->$wantType($fieldName)->nullable();\n                });\n\n                $schemaObj->setDroppedColumn($fieldName, $droppedName, true);\n            }\n\n            $this->actionCount++;\n        }\n    }\n\n    /**\n     * migrateDropColumns\n     */\n    protected function migrateDropColumns()\n    {\n        $schemaObj = $this->getContentSchema();\n        $droppedFields = $schemaObj->getDroppedFields();\n\n        foreach ($droppedFields as $fieldName => $details) {\n            // Never touch a reserved field\n            if (in_array($fieldName, $this->reservedFieldNames)) {\n                continue;\n            }\n\n            if (!$this->hasColumn($fieldName)) {\n                continue;\n            }\n\n            $droppedName = 'x_'.$fieldName.'_'.hash('crc32', str_random());\n\n            Schema::table($this->tableName, function($table) use ($fieldName, $droppedName) {\n                $table->renameColumn($fieldName, $droppedName);\n            });\n\n            $schemaObj->setDroppedColumn($fieldName, $droppedName);\n\n            $this->actionCount++;\n        }\n    }\n\n    /**\n     * migrateMetaData\n     */\n    protected function migrateMetaData()\n    {\n        if ($this->getContentSchema()->isMetaDirty()) {\n            $this->actionCount++;\n        }\n    }\n\n    /**\n     * patchTableWhenBlueprintBecomesStructure\n     */\n    protected function patchTableWhenBlueprintBecomesStructure()\n    {\n        // Targeting structures\n        if (!$this->blueprint instanceof StructureBlueprint) {\n            return;\n        }\n\n        $schemaObj = $this->getContentSchema();\n\n        // Nothing changed\n        if (!$schemaObj->isMetaDirty('blueprint_type')) {\n            return;\n        }\n\n        // Temporary patch to set the meta without doing the repair\n        // @deprecated this can be removed if year >= 2024\n        if ($schemaObj->getMetaData('blueprint_type') === null) {\n            return;\n        }\n\n        // Reset the nested tree nesting columns\n        StructureRecord::inSectionUuid($this->blueprint->uuid)->resetTreeNesting();\n    }\n\n    /**\n     * patchTableWhenBlueprintBecomesMultisite\n     */\n    protected function patchTableWhenBlueprintBecomesMultisite()\n    {\n        // Targeting structures\n        if (!$this->blueprint instanceof EntryBlueprint) {\n            return;\n        }\n\n        if (!$this->blueprint->useMultisiteSync()) {\n            return;\n        }\n\n        $schemaObj = $this->getContentSchema();\n\n        // Nothing changed\n        if (!$schemaObj->isMetaDirty('multisite_sync')) {\n            return;\n        }\n\n        EntryRecord::inSectionUuid($this->blueprint->uuid)->chunkById(100, function($records) {\n            foreach ($records as $record) {\n                foreach ($record->getMultisiteSyncSites() as $siteId) {\n                    // Context for nested trees and others\n                    Site::withContext($siteId, function() use ($record, $siteId) {\n                        // Context for relational data availability\n                        Site::withGlobalContext(function() use ($record, $siteId) {\n                            $record->propagateToSite($siteId);\n                        });\n                    });\n                }\n            }\n        });\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/scopes/DraftableScope.php",
    "content": "<?php namespace Tailor\\Classes\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Model as ModelBase;\nuse Illuminate\\Database\\Eloquent\\Scope as ScopeInterface;\nuse Illuminate\\Database\\Eloquent\\Builder as BuilderBase;\n\n/**\n * DraftableScope\n *\n * @package october\\database\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DraftableScope implements ScopeInterface\n{\n    /**\n     * @var const MODE_PUBLISHED is the final state for a record\n     */\n    const MODE_PUBLISHED = 1;\n\n    /**\n     * @var const MODE_DRAFT is a draft of an already published record\n     */\n    const MODE_DRAFT = 2;\n\n    /**\n     * @var const MODE_NEW_SAVED is a commited draft for a proposed record\n     */\n    const MODE_NEW_SAVED = 3;\n\n    /**\n     * @var const MODE_NEW_UNSAVED is a temporary draft for a proposed record\n     */\n    const MODE_NEW_UNSAVED = 4;\n\n    /**\n     * @var array extensions to be added to the builder.\n     */\n    protected $extensions = ['WithDrafts', 'WithOnlyDrafts', 'WithSavedDrafts'];\n\n    /**\n     * apply the scope to a given Eloquent query builder.\n     */\n    public function apply(BuilderBase $builder, ModelBase $model)\n    {\n        $builder->where($model->getQualifiedDraftModeColumnName(), static::MODE_PUBLISHED);\n    }\n\n    /**\n     * extend the query builder with the needed functions.\n     */\n    public function extend(BuilderBase $builder)\n    {\n        foreach ($this->extensions as $extension) {\n            $this->{\"add{$extension}\"}($builder);\n        }\n    }\n\n    /**\n     * addWithDrafts removes this scope and includes everything.\n     */\n    protected function addWithDrafts(BuilderBase $builder)\n    {\n        $builder->macro('withDrafts', function (BuilderBase $builder) {\n            return $builder->withoutGlobalScope($this);\n        });\n    }\n\n    /**\n     * addWithOnlyDrafts includes only drafts in the query.\n     */\n    protected function addWithOnlyDrafts(BuilderBase $builder)\n    {\n        $builder->macro('withOnlyDrafts', function (BuilderBase $builder) {\n            $model = $builder->getModel();\n\n            $builder->withoutGlobalScope($this)\n                ->where($model->getQualifiedDraftModeColumnName(), static::MODE_DRAFT)\n            ;\n\n            return $builder;\n        });\n    }\n\n    /**\n     * addWithSavedDrafts will exclude unsaved drafts.\n     */\n    protected function addWithSavedDrafts(BuilderBase $builder)\n    {\n        $builder->macro('withSavedDrafts', function (BuilderBase $builder) {\n            $model = $builder->getModel();\n\n            $builder->withoutGlobalScope($this)->whereNotIn(\n                $model->getQualifiedDraftModeColumnName(),\n                [static::MODE_DRAFT, static::MODE_NEW_UNSAVED]\n            );\n\n            return $builder;\n        });\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/scopes/EntryRecordScope.php",
    "content": "<?php namespace Tailor\\Classes\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Model as ModelBase;\nuse Illuminate\\Database\\Eloquent\\Scope as ScopeInterface;\nuse Illuminate\\Database\\Eloquent\\Builder as BuilderBase;\n\n/**\n * EntryRecordScope\n *\n * @package october\\database\n * @author Alexey Bobkov, Samuel Georges\n */\nclass EntryRecordScope implements ScopeInterface\n{\n    /**\n     * apply the scope to a given Eloquent query builder.\n     */\n    public function apply(BuilderBase $builder, ModelBase $model)\n    {\n        // Placeholder\n    }\n\n    /**\n     * extend the Eloquent query builder.\n     */\n    public function extend(BuilderBase $builder)\n    {\n        $removeOnMethods = ['reorder', 'orderBy', 'groupBy'];\n\n        foreach ($removeOnMethods as $method) {\n            $builder->macro($method, function ($builder, ...$args) use ($method) {\n                $builder\n                    ->withoutGlobalScope($this)\n                    ->getQuery()\n                    ->$method(...$args)\n                ;\n\n                return $builder;\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/scopes/GlobalRecordScope.php",
    "content": "<?php namespace Tailor\\Classes\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Model as ModelBase;\nuse Illuminate\\Database\\Eloquent\\Scope as ScopeInterface;\nuse Illuminate\\Database\\Eloquent\\Builder as BuilderBase;\n\n/**\n * GlobalRecordScope\n *\n * @package october\\database\n * @author Alexey Bobkov, Samuel Georges\n */\nclass GlobalRecordScope implements ScopeInterface\n{\n    /**\n     * apply the scope to a given Eloquent query builder.\n     */\n    public function apply(BuilderBase $builder, ModelBase $model)\n    {\n        if ($blueprintUuid = $model->blueprint_uuid) {\n            $builder->where('blueprint_uuid', $blueprintUuid);\n        }\n    }\n\n    /**\n     * extend the Eloquent query builder.\n     */\n    public function extend(BuilderBase $builder)\n    {\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/scopes/SingleRecordScope.php",
    "content": "<?php namespace Tailor\\Classes\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Model as ModelBase;\nuse Illuminate\\Database\\Eloquent\\Builder as BuilderBase;\n\n/**\n * SingleRecordScope\n *\n * @package october\\database\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SingleRecordScope implements EntryRecordScope\n{\n    /**\n     * apply the scope to a given Eloquent query builder.\n     */\n    public function apply(BuilderBase $builder, ModelBase $model)\n    {\n        // Placeholder\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/scopes/StreamRecordScope.php",
    "content": "<?php namespace Tailor\\Classes\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Model as ModelBase;\nuse Illuminate\\Database\\Eloquent\\Builder as BuilderBase;\n\n/**\n * StreamRecordScope\n *\n * @package october\\database\n * @author Alexey Bobkov, Samuel Georges\n */\nclass StreamRecordScope extends EntryRecordScope\n{\n    /**\n     * apply the scope to a given Eloquent query builder.\n     */\n    public function apply(BuilderBase $builder, ModelBase $model)\n    {\n        $builder->orderBy('published_at_date', 'desc');\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/scopes/StructureRecordScope.php",
    "content": "<?php namespace Tailor\\Classes\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Model as ModelBase;\nuse Illuminate\\Database\\Eloquent\\Builder as BuilderBase;\n\n/**\n * StructureRecordScope\n *\n * @package october\\database\n * @author Alexey Bobkov, Samuel Georges\n */\nclass StructureRecordScope extends EntryRecordScope\n{\n    /**\n     * apply the scope to a given Eloquent query builder.\n     */\n    public function apply(BuilderBase $builder, ModelBase $model)\n    {\n        $builder->orderBy('nest_left');\n    }\n}\n"
  },
  {
    "path": "modules/tailor/classes/scopes/VersionableScope.php",
    "content": "<?php namespace Tailor\\Classes\\Scopes;\n\nuse Illuminate\\Database\\Eloquent\\Model as ModelBase;\nuse Illuminate\\Database\\Eloquent\\Scope as ScopeInterface;\nuse Illuminate\\Database\\Eloquent\\Builder as BuilderBase;\n\n/**\n * VersionableScope\n *\n * @package october\\database\n * @author Alexey Bobkov, Samuel Georges\n */\nclass VersionableScope implements ScopeInterface\n{\n    /**\n     * @var array extensions to be added to the builder.\n     */\n    protected $extensions = ['WithVersions', 'WithOnlyVersions'];\n\n    /**\n     * apply the scope to a given Eloquent query builder.\n     */\n    public function apply(BuilderBase $builder, ModelBase $model)\n    {\n        $builder->where($model->getQualifiedIsVersionColumn(), false);\n    }\n\n    /**\n     * extend the query builder with the needed functions.\n     */\n    public function extend(BuilderBase $builder)\n    {\n        foreach ($this->extensions as $extension) {\n            $this->{\"add{$extension}\"}($builder);\n        }\n    }\n\n    /**\n     * addWithVersions removes this scope and includes everything.\n     */\n    protected function addWithVersions(BuilderBase $builder)\n    {\n        $builder->macro('withVersions', function (BuilderBase $builder) {\n            return $builder->withoutGlobalScope($this);\n        });\n    }\n\n    /**\n     * addWithOnlyVersions includes only drafts in the query.\n     */\n    protected function addWithOnlyVersions(BuilderBase $builder)\n    {\n        $builder->macro('withOnlyVersions', function (BuilderBase $builder) {\n            $model = $builder->getModel();\n\n            $builder->withoutGlobalScope($this)\n                ->where($model->getQualifiedIsVersionColumn(), true)\n            ;\n\n            return $builder;\n        });\n    }\n}\n"
  },
  {
    "path": "modules/tailor/components/CollectionComponent.php",
    "content": "<?php namespace Tailor\\Components;\n\nuse Tailor\\Classes\\ComponentVariable;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Tailor\\Models\\EntryRecord;\nuse Cms\\Classes\\ComponentModuleBase;\n\n/**\n * CollectionComponent displays a collection of records.\n */\nclass CollectionComponent extends ComponentModuleBase\n{\n    /**\n     * @var array primaryRecordCache\n     */\n    protected $primaryRecordCache = false;\n\n    /**\n     * componentDetails\n     */\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Collection',\n            'description' => 'Displays a collection of entries.',\n            'icon' => 'icon-clone'\n        ];\n    }\n\n    /**\n     * defineProperties\n     */\n    public function defineProperties()\n    {\n        return [\n            'handle' => [\n                'title' => 'Handle',\n                'type' => 'dropdown',\n                'showExternalParam' => false\n            ],\n            'recordsPerPage' => [\n                'title' => 'Records Per Page',\n                'description' => 'Number of records to display on a single page. Leave empty to disable pagination.',\n                'type' => 'string',\n                'validationPattern' => '^[0-9]*$',\n                'validationMessage' => 'Invalid format of the records per page value. The value should be a number.',\n                'group' => 'Pagination'\n            ],\n            'pageNumber' => [\n                'title' => 'Page Number',\n                'description' => 'This value is used to determine what page the user is on.',\n                'type' => 'string',\n                'group' => 'Pagination'\n            ],\n            'sortColumn' => [\n                'title' => 'Sort by Column',\n                'description' => 'Model column the records should be ordered by',\n                'type' => 'autocomplete',\n                'group' => 'Sorting',\n                'showExternalParam' => false\n            ],\n            'sortDirection' => [\n                'title' => 'Direction',\n                'type' => 'dropdown',\n                'showExternalParam' => false,\n                'group' => 'Sorting',\n                'options' => [\n                    'asc' => 'Ascending',\n                    'desc' => 'Descending'\n                ]\n            ]\n        ];\n    }\n\n    /**\n     * makePrimaryAccessor returns the PHP object variable for the Twig view layer.\n     */\n    public function makePrimaryAccessor()\n    {\n        return new ComponentVariable($this);\n    }\n\n    /**\n     * getHandleOptions\n     */\n    public function getHandleOptions()\n    {\n        $blueprints = BlueprintIndexer::instance()->listSections();\n\n        $result = [];\n        foreach ($blueprints as $bp) {\n            $result[$bp->handle] = $bp->name . ' ('.$bp->handle.')';\n        }\n\n        return $result;\n    }\n\n    /**\n     * getPrimaryRecord\n     */\n    public function getPrimaryRecord()\n    {\n        if ($this->primaryRecordCache !== false) {\n            return $this->primaryRecordCache;\n        }\n\n        return $this->primaryRecordCache = $this->getPrimaryRecordResult();\n    }\n\n    /**\n     * getPrimaryRecordResult\n     */\n    public function getPrimaryRecordResult()\n    {\n        $query = $this->getPrimaryRecordQuery();\n\n        if ($sortColumn = $this->property('sortColumn')) {\n            $query = $query->orderBy($sortColumn, $this->property('sortDirection', 'desc'));\n        }\n\n        // Return pagination\n        if ($recordsPerPage = $this->property('recordsPerPage')) {\n            return $query->paginateAtPage($recordsPerPage, $this->property('pageNumber'));\n        }\n\n        // Return structure\n        if (!$sortColumn && $query->getModel()->isEntryStructure()) {\n            return $query->getNested();\n        }\n\n        // Return collection\n        return $query->get();\n    }\n\n    /**\n     * getPrimaryRecordQuery\n     */\n    public function getPrimaryRecordQuery()\n    {\n        $handle = $this->property('handle');\n\n        $model = EntryRecord::inSection($handle)->applyVisibleFrontend();\n\n        return $model;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/components/GlobalComponent.php",
    "content": "<?php namespace Tailor\\Components;\n\nuse Tailor\\Classes\\ComponentVariable;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Tailor\\Models\\GlobalRecord;\nuse Cms\\Classes\\ComponentModuleBase;\n\n/**\n * GlobalComponent makes globals available.\n */\nclass GlobalComponent extends ComponentModuleBase\n{\n    /**\n     * @var array primaryRecordCache\n     */\n    protected $primaryRecordCache = false;\n\n    /**\n     * componentDetails\n     */\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Global_',\n            'description' => 'Makes globals available to the page.',\n            'icon' => 'icon-cogs'\n        ];\n    }\n\n    /**\n     * defineProperties\n     */\n    public function defineProperties()\n    {\n        return [\n            'handle' => [\n                'title' => 'Handle',\n                'type' => 'dropdown',\n                'showExternalParam' => false\n            ]\n        ];\n    }\n\n    /**\n     * makePrimaryAccessor returns the PHP object variable for the Twig view layer.\n     */\n    public function makePrimaryAccessor()\n    {\n        return new ComponentVariable($this);\n    }\n\n    /**\n     * getHandleOptions\n     */\n    public function getHandleOptions()\n    {\n        $blueprints = BlueprintIndexer::instance()->listGlobals();\n\n        $result = [];\n        foreach ($blueprints as $bp) {\n            $result[$bp->handle] = $bp->name . ' ('.$bp->handle.')';\n        }\n\n        return $result;\n    }\n\n    /**\n     * getPrimaryRecord\n     */\n    public function getPrimaryRecord()\n    {\n        if ($this->primaryRecordCache !== false) {\n            return $this->primaryRecordCache;\n        }\n\n        return $this->primaryRecordCache = $this->getPrimaryRecordResult();\n    }\n\n    /**\n     * getPrimaryRecordResult\n     */\n    public function getPrimaryRecordResult()\n    {\n        $query = $this->getPrimaryRecordQuery();\n\n        return $query->first();\n    }\n\n    /**\n     * getPrimaryRecordQuery\n     */\n    public function getPrimaryRecordQuery()\n    {\n        $handle = $this->property('handle');\n\n        $model = GlobalRecord::inGlobal($handle);\n\n        return $model;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/components/SectionComponent.php",
    "content": "<?php namespace Tailor\\Components;\n\nuse Event;\nuse Tailor\\Classes\\ComponentVariable;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Tailor\\Models\\EntryRecord;\nuse Tailor\\Models\\PreviewToken;\nuse Cms\\Classes\\ComponentModuleBase;\n\n/**\n * SectionComponent displays a list of records.\n */\nclass SectionComponent extends ComponentModuleBase\n{\n    /**\n     * @var array primaryRecordCache\n     */\n    protected $primaryRecordCache = false;\n\n    /**\n     * @var array otherSiteCache\n     */\n    protected $otherSiteCache;\n\n    /**\n     * @var array otherSiteByIdentifierCache\n     */\n    protected $otherSiteByIdentifierCache = [];\n\n    /**\n     * @var bool multisiteCache\n     */\n    protected $multisiteCache;\n\n    /**\n     * componentDetails\n     */\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Section',\n            'description' => 'Defines a website section with a supporting entry.',\n            'icon' => 'icon-columns'\n        ];\n    }\n\n    /**\n     * defineProperties\n     */\n    public function defineProperties()\n    {\n        return [\n            'handle' => [\n                'title' => 'Handle',\n                'type' => 'dropdown',\n                'showExternalParam' => false\n            ],\n            'identifier' => [\n                'title' => 'Lookup Column',\n                'type' => 'dropdown',\n                'description' => 'Column name (index) to match with the primary record.',\n                'options' => [\n                    'slug' => 'Slug',\n                    'fullslug' => 'Full Slug',\n                    'id' => 'ID (Primary Key)',\n                ]\n            ],\n            'value' => [\n                'title' => 'Lookup Value',\n                'type' => 'string',\n                'description' => 'URL code (slug) used to find the primary record.'\n            ],\n            'isDefault' => [\n                'title' => 'Default View',\n                'type' => 'checkbox',\n                'description' => 'Use this page as a default entry point when previewing the record.',\n                'showExternalParam' => false\n            ],\n        ];\n    }\n\n    /**\n     * makePrimaryAccessor returns the PHP object variable for the Twig view layer.\n     */\n    public function makePrimaryAccessor()\n    {\n        return new ComponentVariable($this);\n    }\n\n    /**\n     * init\n     */\n    public function init()\n    {\n        Event::listen('cms.sitePicker.overrideParams', function($page, $params, $currentSite, $proposedSite) {\n            return $this->handleMultisiteParams($proposedSite, $params);\n        });\n    }\n\n    /**\n     * onRun\n     */\n    public function onRun()\n    {\n        if ($token = get('_preview_token')) {\n            PreviewToken::checkTokenForCurrentUrl($token);\n        }\n    }\n\n    /**\n     * getHandleOptions\n     */\n    public function getHandleOptions()\n    {\n        $blueprints = BlueprintIndexer::instance()->listSections();\n\n        $result = [];\n        foreach ($blueprints as $bp) {\n            $result[$bp->handle] = $bp->name . ' ('.$bp->handle.')';\n        }\n\n        return $result;\n    }\n\n    /**\n     * getPrimaryRecord\n     */\n    public function getPrimaryRecord()\n    {\n        if ($this->primaryRecordCache !== false) {\n            return $this->primaryRecordCache;\n        }\n\n        return $this->primaryRecordCache = $this->getPrimaryRecordResult();\n    }\n\n    /**\n     * getPrimaryRecordResult\n     */\n    public function getPrimaryRecordResult()\n    {\n        $query = $this->getPrimaryRecordQuery();\n\n        // Previewing\n        if ($model = $this->getPreviewModel($query)) {\n            return $model;\n        }\n\n        // Using single section without identifier value\n        if ($query->getModel()->isEntrySingle()) {\n            return $query->first();\n        }\n\n        // Using entry point identifier value\n        if ($model = $this->getEntryPointModel($query)) {\n            return $model;\n        }\n\n        return null;\n    }\n\n    /**\n     * getPrimaryRecordQuery\n     */\n    public function getPrimaryRecordQuery()\n    {\n        $handle = $this->property('handle');\n\n        $model = EntryRecord::inSection($handle)->applyVisibleFrontend();\n\n        return $model;\n    }\n\n    /**\n     * getPreviewModel\n     */\n    protected function getPreviewModel($query)\n    {\n        if (\n            ($token = PreviewToken::getEnabledToken()) &&\n            ($previewId = $token->getRouteParam('id'))\n        ) {\n            return $query->withoutGlobalScopes()->find($previewId);\n        }\n    }\n\n    /**\n     * getEntryPointModel\n     */\n    protected function getEntryPointModel($query)\n    {\n        $slug = $this->getEntryPointIdentifierValue();\n        if (!$slug) {\n            return null;\n        }\n\n        $columnName = $this->getEntryPointIdentifierKey();\n        return $query->where($columnName, $slug)->first();\n    }\n\n    /**\n     * getEntryPointIdentifierKey returns the lookup column name\n     */\n    protected function getEntryPointIdentifierKey(): string\n    {\n        $validColumns = ['id', 'slug', 'fullslug'];\n        $columnName = $this->property('identifier');\n\n        return in_array($columnName, $validColumns) ? $columnName : 'slug';\n    }\n\n    /**\n     * getEntryPointIdentifierValue\n     */\n    protected function getEntryPointIdentifierValue()\n    {\n        if ($value = $this->property('value')) {\n            return $value;\n        }\n\n        return $this->param($this->getEntryPointIdentifierKey());\n    }\n\n    /**\n     * getEntryPointIdentifierParamName\n     */\n    protected function getEntryPointIdentifierParamName()\n    {\n        if ($param = $this->paramName('value')) {\n            return $param;\n        }\n\n        return $this->getEntryPointIdentifierKey();\n    }\n\n    /**\n     * handleMultisiteParams is for multisite\n     */\n    protected function handleMultisiteParams($site, $params)\n    {\n        if (!$this->isMultisiteEnabled()) {\n            return;\n        }\n\n        $otherRecord = $this->findOtherSiteRecord($site, $params);\n        if (!$otherRecord) {\n            return;\n        }\n\n        if ($otherRecord instanceof \\Tailor\\Classes\\BlueprintModel) {\n            $params = array_merge($params, $otherRecord->makePageUrlParams());\n        }\n        else {\n            $params = array_merge($params, [\n                'id' => $otherRecord->id,\n                'code' => $otherRecord->code,\n                'slug' => $otherRecord->slug,\n                'fullslug' => $otherRecord->fullslug,\n            ]);\n        }\n\n        if ($paramName = $this->getEntryPointIdentifierParamName()) {\n            $columnName = $this->getEntryPointIdentifierKey();\n            $params[$paramName] = $otherRecord->$columnName;\n        }\n\n        return $params;\n    }\n\n    /**\n     * findOtherSiteRecord locates the corresponding record on another site,\n     * checking the params to determine if a non-primary record is referenced\n     */\n    protected function findOtherSiteRecord($site, $params)\n    {\n        $columnName = $this->getEntryPointIdentifierKey();\n        $paramName = $this->getEntryPointIdentifierParamName();\n        $paramValue = $params[$paramName] ?? ($params[$columnName] ?? null);\n        $identifierValue = $this->getEntryPointIdentifierValue();\n\n        // Params reference a different record than the primary, look it up directly\n        if ($paramValue && $identifierValue !== $paramValue) {\n            return $this->findOtherSiteRecordByIdentifier($columnName, $paramValue)\n                ->where('site_id', $site->id)\n                ->first();\n        }\n\n        return $this->findPrimaryOtherSiteRecords()->where('site_id', $site->id)->first();\n    }\n\n    /**\n     * findOtherSiteRecordByIdentifier finds other site records for a specific\n     * record identified by its column value, with results cached per value\n     */\n    protected function findOtherSiteRecordByIdentifier($columnName, $value)\n    {\n        if (isset($this->otherSiteByIdentifierCache[$value])) {\n            return $this->otherSiteByIdentifierCache[$value];\n        }\n\n        $record = $this->getPrimaryRecordQuery()\n            ->where($columnName, $value)\n            ->first();\n\n        $otherRecords = $record ? $record->newOtherSiteQuery()->get() : collect();\n\n        return $this->otherSiteByIdentifierCache[$value] = $otherRecords;\n    }\n\n    /**\n     * findPrimaryOtherSiteRecords is for multisite\n     */\n    protected function findPrimaryOtherSiteRecords()\n    {\n        if ($this->otherSiteCache !== null) {\n            return $this->otherSiteCache;\n        }\n\n        $primaryRecord = $this->getPrimaryRecord();\n        $otherRecords = $primaryRecord->newOtherSiteQuery()->get();\n\n        return $this->otherSiteCache = $otherRecords;\n    }\n\n    /**\n     * isMultisiteEnabled\n     */\n    protected function isMultisiteEnabled()\n    {\n        if ($this->multisiteCache !== null) {\n            return $this->multisiteCache;\n        }\n\n        $primaryRecord = $this->getPrimaryRecord();\n\n        return $this->multisiteCache = $primaryRecord && $primaryRecord->isMultisiteEnabled();\n    }\n\n    /**\n     * validateProperties is used to replace older property definitions with new ones\n     */\n    public function validateProperties(array $properties)\n    {\n        $properties = parent::validateProperties($properties);\n\n        // @deprecated in v3.2\n        if (isset($properties['fullSlug'])) {\n            $properties['identifier'] = 'fullslug';\n        }\n\n        // @deprecated in v3.3\n        if (isset($properties['entryColumn'])) {\n            $properties['identifier'] = $properties['entryColumn'];\n        }\n\n        if (isset($properties['entrySlug'])) {\n            $properties['value'] = $properties['entrySlug'];\n        }\n\n        if (isset($properties['entryDefault'])) {\n            $properties['isDefault'] = $properties['entryDefault'];\n        }\n\n        return $properties;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/components/collectioncomponent/default.htm",
    "content": "{% set records = __SELF__ %}\n\n<ul class=\"record-list\">\n    {% for record in records %}\n        <li>\n            {{ record.title }}\n        </li>\n    {% else %}\n        <li class=\"no-data\">Records not found</li>\n    {% endfor %}\n</ul>\n\n{% if records.lastPage > 1 %}\n    <ul class=\"pagination\">\n        {% if records.currentPage > 1 %}\n            <li><a href=\"{{ ''|page({ (pageParam): (records.currentPage-1) }) }}\">&larr; Prev</a></li>\n        {% endif %}\n\n        {% for page in 1..records.lastPage %}\n            <li class=\"{{ records.currentPage == page ? 'active' : null }}\">\n                <a href=\"{{ ''|page({ (pageParam): page }) }}\">{{ page }}</a>\n            </li>\n        {% endfor %}\n\n        {% if records.lastPage > records.currentPage %}\n            <li><a href=\"{{ ''|page({ (pageParam): (records.currentPage+1) }) }}\">Next &rarr;</a></li>\n        {% endif %}\n    </ul>\n{% endif %}\n"
  },
  {
    "path": "modules/tailor/components/sectioncomponent/default.htm",
    "content": "{% set record = __SELF__ %}\n\n{% if record %}\n    {{ record.title }}\n{% else %}\n    Record not found\n{% endif %}\n"
  },
  {
    "path": "modules/tailor/composer.json",
    "content": "{\n    \"name\": \"october/tailor\",\n    \"type\": \"october-module\",\n    \"description\": \"Tailor module for October CMS\",\n    \"homepage\": \"https://octobercms.com\",\n    \"keywords\": [\"october cms\", \"october\", \"tailor\"],\n    \"authors\": [\n        {\n            \"name\": \"Alexey Bobkov\",\n            \"email\": \"aleksey.bobkov@gmail.com\"\n        },\n        {\n            \"name\": \"Samuel Georges\",\n            \"email\": \"daftspunky@gmail.com\"\n        }\n    ]\n}\n"
  },
  {
    "path": "modules/tailor/console/TailorMigrate.php",
    "content": "<?php namespace Tailor\\Console;\n\nuse Log;\nuse Illuminate\\Console\\Command;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Exception;\n\n/**\n * TailorMigrate migrates tailor specific content.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass TailorMigrate extends Command\n{\n    /**\n     * @var string signature of console command\n     */\n    protected $signature = 'tailor:migrate';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Migrate tailor tables.';\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        try {\n            BlueprintIndexer::instance()->setNotesCommand($this)->migrate();\n        }\n        catch (Exception $ex) {\n            Log::error($ex);\n            throw $ex;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/console/TailorPropagate.php",
    "content": "<?php namespace Tailor\\Console;\n\nuse Site;\nuse Illuminate\\Console\\Command;\nuse Tailor\\Models\\EntryRecord;\nuse Tailor\\Classes\\BlueprintIndexer;\n\n/**\n * TailorPropagate propagates multisite records for all tailor records.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass TailorPropagate extends Command\n{\n    /**\n     * @var string signature of console command\n     */\n    protected $signature = 'tailor:propagate\n        {--site= : Site ID for finding source records.}\n        {--blueprint= : Handle name to refresh one blueprint.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Propagates multisite records for tailor records.';\n\n    /**\n     * @var BlueprintIndexer indexer for blueprints\n     */\n    protected $indexer;\n\n    /**\n     * @var \\Tailor\\Classes\\Blueprint|null blueprintObj reference for a single blueprint\n     */\n    protected $blueprintObj;\n\n    /**\n     * @var \\System\\Models\\SiteDefinition|null siteObj reference for a specific site source\n     */\n    protected $siteObj;\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->indexer = BlueprintIndexer::instance()->setNotesCommand($this);\n\n        $this->line('Propagating Blueprint Records');\n\n        if (($handle = $this->option('blueprint')) && !$this->lookupBlueprint($handle)) {\n            return;\n        }\n\n        if (($site = $this->option('site')) && !$this->lookupSite($site)) {\n            return;\n        }\n\n        if ($this->blueprintObj) {\n            $this->propagateBlueprint($this->blueprintObj);\n        }\n        else {\n            foreach ($this->indexer->listSections() as $blueprint) {\n                if ($blueprint->useMultisiteSync()) {\n                    $this->propagateBlueprint($blueprint);\n                }\n            }\n        }\n    }\n\n    /**\n     * propagateBlueprint\n    */\n    public function propagateBlueprint($blueprint)\n    {\n        $otherSites = [];\n\n        if ($this->siteObj) {\n            [$records, $otherSites] = Site::withContext($this->siteObj->id, function() use ($blueprint) {\n                $instance = EntryRecord::inSectionUuid($blueprint->uuid);\n                return [$instance->get(), $instance->getMultisiteSyncSites()];\n            });\n        }\n        else {\n            $instance = EntryRecord::inSectionUuid($blueprint->uuid);\n            $otherSites = $instance->getMultisiteSyncSites();\n            $records = $instance->get();\n        }\n\n        $this->line('- <info>'.$blueprint->name.'</info>: '.$records->count() .' record(s)');\n\n        foreach ($otherSites as $siteId) {\n            Site::withContext($siteId, function() use ($records, $siteId) {\n                $records->each(function($record) use ($siteId) {\n                    $record->findOrCreateForSite($siteId);\n                });\n            });\n        }\n    }\n\n    /**\n     * lookupBlueprint\n     */\n    public function lookupBlueprint($handle): bool\n    {\n        $blueprint = $this->indexer->findSectionByHandle($handle);\n        if (!$blueprint) {\n            $this->error(\"Blueprint for handle '{$handle}' not found\");\n            return false;\n        }\n\n        if (!$blueprint->useMultisiteSync()) {\n            $this->error(\"Blueprint is not using multisite sync mode.\");\n            return false;\n        }\n\n        $this->blueprintObj = $blueprint;\n        return true;\n    }\n\n    /**\n     * lookupSite\n     */\n    public function lookupSite($id): bool\n    {\n        $site = Site::getSiteFromId($id);\n        if (!$site) {\n            $this->error(\"Site with ID '{$id}' not found\");\n            return false;\n        }\n\n        $this->siteObj = $site;\n        return true;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/console/TailorPrune.php",
    "content": "<?php namespace Tailor\\Console;\n\nuse Illuminate\\Console\\Command;\nuse Tailor\\Classes\\SchemaPruner;\nuse Tailor\\Classes\\BlueprintIndexer;\n\n/**\n * TailorPrune removes unused content.\n *\n * As a general rule Tailor will never drop table columns and delete content. This command\n * drops columns that have been removed or renamed and tables that are not used anymore.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass TailorPrune extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature of console command\n     */\n    protected $signature = 'tailor:prune {--f|force : Force the operation to run.}\n        {--tables : Only prune unused tables.}\n        {--fields : Only prune unused fields.}\n        {--blueprint= : Handle name to prune a single blueprint.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Drops unused tables and columns from the database.';\n\n    /**\n     * @var BlueprintIndexer indexer for blueprints\n     */\n    protected $indexer;\n\n    /**\n     * @var \\Tailor\\Classes\\Blueprint|null blueprintObj reference for a single blueprint\n     */\n    protected $blueprintObj;\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->indexer = BlueprintIndexer::instance()->setNotesCommand($this);\n\n        $message = \"This will DESTROY unused content tables and columns for Tailor. Please make sure you have a backup first.\";\n\n        if (!$this->confirmToProceed($message)) {\n            return;\n        }\n\n        if (($handle = $this->option('blueprint')) && !$this->lookupBlueprint($handle)) {\n            return;\n        }\n\n        if ($this->shouldPruneFields()) {\n            $this->line('Pruning Content Fields');\n            $this->handlePruneFields();\n        }\n\n        if ($this->shouldPruneTables()) {\n            $this->line('Pruning Content Tables');\n            $this->handlePruneTables();\n        }\n    }\n\n    /**\n     * handlePruneFields\n     */\n    public function handlePruneFields()\n    {\n        $pruner = $this->blueprintObj\n            ? SchemaPruner::pruneBlueprint($this->blueprintObj)\n            : SchemaPruner::pruneAll();\n\n        $result = $pruner->getPrunedFields();\n        if (!$result) {\n            $this->line('<info>Nothing to prune.</info>');\n        }\n\n        foreach ($result as $table => $fields) {\n            $fieldStr = join(', ', $fields);\n            $this->line(\"<info>- Fields:</info> {$table} [$fieldStr]\");\n        }\n    }\n\n    /**\n     * handlePruneTables\n     */\n    public function handlePruneTables()\n    {\n        if ($this->blueprintObj) {\n            $this->error(\"Cannot specify a blueprint when pruning only tables\");\n            return;\n        }\n\n        $result = SchemaPruner::pruneTables()->getPrunedTables();\n        if (!$result) {\n            $this->line('<info>Nothing to prune.</info>');\n        }\n\n        foreach ($result as $tableName) {\n            $this->line('<info>- Table:</info> ' . $tableName);\n        }\n    }\n\n    /**\n     * shouldPruneFields\n     */\n    public function shouldPruneFields(): bool\n    {\n        if ($this->option('fields')) {\n            return true;\n        }\n\n        if ($this->option('tables')) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * shouldPruneTables\n     */\n    public function shouldPruneTables(): bool\n    {\n        if ($this->option('tables')) {\n            return true;\n        }\n\n        if ($this->option('fields')) {\n            return false;\n        }\n\n        if ($this->blueprintObj) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * lookupBlueprint\n     */\n    public function lookupBlueprint($handle): bool\n    {\n        $blueprint = $this->indexer->findSectionByHandle($handle);\n        if (!$blueprint) {\n            $this->error(\"Blueprint for handle '{$handle}' not found\");\n            return false;\n        }\n\n        $this->blueprintObj = $blueprint;\n        return true;\n    }\n\n    /**\n     * getDefaultConfirmCallback specifies the default confirmation callback\n     */\n    protected function getDefaultConfirmCallback()\n    {\n        return function () {\n            return true;\n        };\n    }\n}\n"
  },
  {
    "path": "modules/tailor/console/TailorRefresh.php",
    "content": "<?php namespace Tailor\\Console;\n\nuse Db;\nuse Schema;\nuse Illuminate\\Console\\Command;\nuse Tailor\\Classes\\BlueprintIndexer;\n\n/**\n * TailorRefresh refreshes tailor content.\n *\n * This destroys all database tables for tailor, then builds them up again.\n * It is a great way for developers to debug and develop with tailor.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass TailorRefresh extends Command\n{\n    use \\Illuminate\\Console\\ConfirmableTrait;\n\n    /**\n     * @var string signature of console command\n     */\n    protected $signature = 'tailor:refresh {--f|force : Force the operation to run.}\n        {--r|rollback : Rollback to the beginning.}\n        {--blueprint= : Handle name to refresh a single blueprint.}';\n\n    /**\n     * @var string description of the console command\n     */\n    protected $description = 'Rollback and migrate database tables for tailor.';\n\n    /**\n     * @var BlueprintIndexer indexer for blueprints\n     */\n    protected $indexer;\n\n    /**\n     * handle executes the console command\n     */\n    public function handle()\n    {\n        $this->indexer = BlueprintIndexer::instance()->setNotesCommand($this);\n\n        $message = \"This will DESTROY all content records for Tailor. Please make sure you have a backup first.\";\n        if ($handle = $this->option('blueprint')) {\n            $message = \"This will DESTROY content records for the [{$handle}] handle.\";\n        }\n\n        if (!$this->confirmToProceed($message)) {\n            return;\n        }\n\n        if ($handle = $this->option('blueprint')) {\n            return $this->handleForBlueprint($handle);\n        }\n\n        $this->handleRollback();\n        if ($this->option('rollback')) {\n            return;\n        }\n\n        $this->indexer->migrate();\n    }\n\n    /**\n     * handleForBlueprint\n     */\n    public function handleForBlueprint($handle)\n    {\n        $blueprint = $this->indexer->findSectionByHandle($handle);\n        if (!$blueprint) {\n            $this->error(\"Blueprint for handle '{$handle}' not found\");\n        }\n\n        $this->handleRollbackBlueprint($blueprint);\n\n        if ($this->option('rollback')) {\n            return;\n        }\n\n        $this->indexer->migrateBlueprint($blueprint);\n    }\n\n    /**\n     * handleRollbackBlueprint performs a database rollback for a single blueprint\n     */\n    protected function handleRollbackBlueprint($blueprint)\n    {\n        $contentTable = $blueprint->getContentTableName();\n        $this->line('<info>Dropped table</info> ' . $contentTable);\n        Schema::dropIfExists($contentTable);\n\n        $joinTable = $blueprint->getJoinTableName();\n        $this->line('<info>Dropped table</info> ' . $joinTable);\n        Schema::dropIfExists($joinTable);\n\n        $repeaterTable = $blueprint->getRepeaterTableName();\n        $this->line('<info>Dropped table</info> ' . $repeaterTable);\n        Schema::dropIfExists($repeaterTable);\n    }\n\n    /**\n     * handleRollback performs a database rollback\n     */\n    protected function handleRollback()\n    {\n        Db::table('tailor_content_schema')->orderBy('id')->chunkById(100, function($tables) {\n            foreach ($tables as $table) {\n                $tablePrefix = substr($table->table_name, 0, -1);\n\n                $contentTable = $tablePrefix.'c';\n                $this->line('<info>Dropped table</info> ' . $contentTable);\n                Schema::dropIfExists($contentTable);\n\n                $joinTable = $tablePrefix.'j';\n                $this->line('<info>Dropped table</info> ' . $joinTable);\n                Schema::dropIfExists($joinTable);\n\n                $repeaterTable = $tablePrefix.'r';\n                $this->line('<info>Dropped table</info> ' . $repeaterTable);\n                Schema::dropIfExists($repeaterTable);\n            }\n        });\n\n        $truncateTables = [\n            'tailor_globals',\n            'tailor_global_joins',\n            'tailor_global_repeaters',\n            'tailor_content_schema',\n            'tailor_preview_tokens',\n        ];\n\n        foreach ($truncateTables as $table) {\n            $this->line('<info>Emptied table</info> ' . $table);\n            Db::table($table)->truncate();\n        }\n    }\n\n    /**\n     * getDefaultConfirmCallback specifies the default confirmation callback\n     */\n    protected function getDefaultConfirmCallback()\n    {\n        return function () {\n            return true;\n        };\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/DataTableField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\n\n/**\n * DataTableField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DataTableField extends FallbackField\n{\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        $model->addJsonable($this->fieldName);\n    }\n\n    /**\n     * extendDatabaseTable adds any required columns to the database.\n     */\n    public function extendDatabaseTable($table)\n    {\n        $table->mediumText($this->fieldName)->nullable();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/DatePickerField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FilterElement;\n\n/**\n * DatePickerField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DatePickerField extends FallbackField\n{\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label)\n            ->displayAs($this->mode ?: 'datetime')\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->column ?: [])\n        ;\n    }\n\n    /**\n     * defineFilterScope\n     */\n    public function defineFilterScope(FilterElement $filter, $context = null)\n    {\n        $filter->defineScope($this->fieldName, $this->label)\n            ->displayAs('date')\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->scope ?: [])\n        ;\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        $model->addDateAttribute($this->fieldName);\n    }\n\n    /**\n     * extendDatabaseTable adds any required columns to the database.\n     */\n    public function extendDatabaseTable($table)\n    {\n        $table->datetime($this->fieldName)->nullable();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/EntriesField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse Tailor\\Models\\EntryRecord;\nuse Tailor\\Models\\RepeaterItem;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Tailor\\Classes\\Blueprint\\StructureBlueprint;\nuse Tailor\\Classes\\Relations\\CustomMultiJoinRelation;\nuse Tailor\\Classes\\Relations\\CustomNestedJoinRelation;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FilterElement;\nuse SystemException;\n\n/**\n * EntriesField allows association to entries\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass EntriesField extends FallbackField\n{\n    /**\n     * @var string source UUID of the section\n     */\n    public $source;\n\n    /**\n     * @var int|null maxItems allowed\n     */\n    public $maxItems;\n\n    /**\n     * @var string inverse the relationship definition, set to the field name\n     */\n    public $inverse;\n\n    /**\n     * @var string displayMode for the relationship\n     */\n    public $displayMode = 'recordfinder';\n\n    /**\n     * @var array controller config for displayMode: controller\n     */\n    public $controller = [];\n\n    /**\n     * @var mixed sourceCache of the source blueprint\n     */\n    protected $sourceCache;\n\n    /**\n     * @var mixed fieldsetCache of the source content fieldset definition\n     */\n    protected $fieldsetCache;\n\n    /**\n     * defineConfig will process the field configuration.\n     */\n    public function defineConfig(array $config)\n    {\n        if (isset($config['source'])) {\n            $this->source = (string) $config['source'];\n        }\n\n        if (isset($config['maxItems'])) {\n            $this->maxItems = (int) $config['maxItems'];\n        }\n\n        if (isset($config['inverse'])) {\n            $this->inverse = (string) $config['inverse'];\n        }\n\n        if (isset($config['displayMode'])) {\n            $this->displayMode = (string) $config['displayMode'];\n        }\n\n        if (isset($config['controller'])) {\n            $this->controller = (array) $config['controller'];\n        }\n    }\n\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $field = $form->addFormField($this->fieldName, $this->label);\n\n        // Content field 'scope' can conflict with Form Widget 'scope'\n        $field->useConfig($this->config + [\n            'nameFrom' => 'title',\n            'scope' => null\n        ]);\n\n        // Singular and multi display modes\n        $supportedDisplays = $this->maxItems === 1\n            ? ['recordfinder']\n            : ['taglist'];\n\n        $field->displayAs(in_array($this->displayMode, $supportedDisplays)\n            ? $this->displayMode\n            : 'relation');\n\n        if ($this->displayMode === 'controller') {\n            $this->defineFormFieldAsRelationController($field);\n        }\n\n        // @deprecated useKey with relation should support primary keys\n        if ($field->type === 'taglist') {\n            $field->useKey(false);\n        }\n    }\n\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $partial = $this->maxItems === 1 ? 'column_single' : 'column_multi';\n\n        $list->defineColumn($this->fieldName, $this->label)\n            ->displayAs('partial')\n            ->path(\"~/modules/tailor/contentfields/entriesfield/partials/_{$partial}.php\")\n            ->clickable(false)\n            ->sortable(false)\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->column ?: [])\n        ;\n    }\n\n    /**\n     * defineFilterScope\n     */\n    public function defineFilterScope(FilterElement $filter, $context = null)\n    {\n        $filter->defineScope($this->fieldName, $this->label)\n            ->displayAs('group')\n            ->nameFrom('title')\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->scope ?: [])\n        ;\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        // Define the relationship\n        if ($this->inverse) {\n            $this->defineInverseModelRelationship($model);\n        }\n        else {\n            $this->defineModelRelationship($model);\n        }\n\n        // For defining list columns and form fields\n        $model->bindEvent('model.afterRelation', function($name, $related) {\n            if ($name === $this->fieldName) {\n                $related->extendWithBlueprint($this->getSourceBlueprint()->uuid);\n            }\n        });\n    }\n\n    /**\n     * extendDatabaseTable\n     */\n    public function extendDatabaseTable($table)\n    {\n        if ($this->maxItems === 1) {\n            $table->integer($this->getSingularKeyName())->unsigned()->nullable();\n        }\n    }\n\n    /**\n     * getSingularKeyName\n     */\n    public function getSingularKeyName()\n    {\n        return $this->fieldName.'_id';\n    }\n\n    /**\n     * defineModelRelationship for the direct relationship. These definitions\n     * rely on multisite modifying the relation definition.\n     *\n     * @see \\October\\Rain\\Database\\Traits\\Multisite::defineMultisiteRelation\n     */\n    protected function defineModelRelationship($model)\n    {\n        $relatedMultisite = $this->getSourceBlueprint()->useMultisite();\n        $relatedModel = $this->getSourceBlueprint()->newModelInstance();\n\n        $isSingular = $this->maxItems === 1;\n        $isNested = $model instanceof RepeaterItem;\n\n        // RepeaterItem doesn't have getBlueprintDefinition, and nested relations\n        // don't participate in dual-multisite propagation\n        $parentMultisite = $isNested ? false : $model->getBlueprintDefinition()->useMultisite();\n\n        // Dual-multisite: both parent and related use multisite, so use actual IDs\n        // and let pivot site_id scoping + propagation handle site separation\n        $isDualMultisite = $parentMultisite && $relatedMultisite;\n\n        if ($isSingular) {\n            $model->belongsTo[$this->fieldName] = [\n                $relatedModel::class,\n                'key' => $this->getSingularKeyName(),\n                'otherKey' => ($relatedMultisite && !$isDualMultisite) ? 'site_root_id' : 'id'\n            ];\n        }\n        elseif ($isNested) {\n            $model->belongsToMany[$this->fieldName] = [\n                $relatedModel::class,\n                'table' => 'tailor_content_joins',\n                'relationClass' => CustomNestedJoinRelation::class,\n                'relatedKey' => $relatedMultisite ? 'site_root_id' : 'id'\n            ];\n        }\n        else {\n            $model->morphedByMany[$this->fieldName] = [\n                $relatedModel::class,\n                'table' => $model->getBlueprintDefinition()->getJoinTableName(),\n                'name' => $this->fieldName,\n                'relationClass' => CustomMultiJoinRelation::class,\n                'relatedKey' => ($relatedMultisite && !$isDualMultisite) ? 'site_root_id' : 'id'\n            ];\n        }\n    }\n\n    /**\n     * defineInverseModelRelationship for the inverse relationship. These definitions\n     * do not rely on multisite via propagatable attribute. Inverse relations do not\n     * replicate and should be treated as read-only.\n     */\n    protected function defineInverseModelRelationship($model)\n    {\n        $otherField = $this->getSourceFieldset()->getField($this->inverse);\n        if (!$otherField || !$otherField instanceof EntriesField) {\n            throw new SystemException(\"Invalid inverse field '{$this->inverse}' for source '{$this->source}' for '{$this->fieldName}'.\");\n        }\n\n        $parentMultisite = $model->getBlueprintDefinition()->useMultisite();\n        $relatedMultisite = $this->getSourceBlueprint()->useMultisite();\n        $relatedModel = $this->getSourceBlueprint()->newModelInstance();\n\n        // Dual-multisite: both parent and related use multisite\n        $isDualMultisite = $parentMultisite && $relatedMultisite;\n\n        $isSingular = $this->maxItems === 1;\n        $otherIsSingular = $otherField->maxItems === 1;\n        $otherIsPropagatable = $relatedMultisite && ($otherField->translatable === false || $otherField->propagatable === true);\n\n        // In dual-multisite, use 'id' for proper site isolation; otherwise use site_root_id for sharing\n        $useRelatedRootKey = $otherIsPropagatable && !$isDualMultisite;\n        $useParentRootKey = $parentMultisite && !$isDualMultisite;\n\n        if ($isSingular) {\n            $model->hasOne[$this->fieldName] = [\n                $relatedModel::class,\n                'key' => $otherField->getSingularKeyName(),\n                'otherKey' => $useRelatedRootKey ? 'site_root_id' : 'id',\n                'replicate' => false\n            ];\n        }\n        elseif ($otherIsSingular) {\n            $model->hasMany[$this->fieldName] = [\n                $relatedModel::class,\n                'key' => $otherField->getSingularKeyName(),\n                'otherKey' => $useRelatedRootKey ? 'site_root_id' : 'id',\n                'replicate' => false\n            ];\n        }\n        else {\n            $model->morphToMany[$this->fieldName] = [\n                $relatedModel::class,\n                'table' => $this->getSourceBlueprint()->getJoinTableName(),\n                'name' => $this->inverse,\n                'relationClass' => CustomMultiJoinRelation::class,\n                'relatedKey' => $useRelatedRootKey ? 'site_root_id' : 'id',\n                'parentKey' => $useParentRootKey ? 'site_root_id' : 'id',\n                'replicate' => false\n            ];\n        }\n    }\n\n    /**\n     * defineFormFieldAsRelationController\n     */\n    protected function defineFormFieldAsRelationController($field)\n    {\n        $blueprint = $this->getSourceBlueprint();\n\n        $customMessages = array_merge((array) $blueprint->customMessages, (array) $this->customMessages);\n\n        $toolbarButtons = $this->toolbarButtons;\n        if (!$toolbarButtons) {\n            $toolbarButtons = $blueprint->navigation ? 'add|remove' : 'create|delete';\n        }\n\n        $fieldConfig = [\n            'label' => $this->label,\n            'list' => [],\n            'form' => [],\n            'customMessages' => $customMessages,\n            'popupSize' => $this->popupSize,\n            'view' => [\n                'toolbarButtons' => $toolbarButtons,\n                'recordsPerPage' => $this->recordsPerPage,\n            ],\n            'manage' => [\n                'recordsPerPage' => $this->recordsPerPage,\n            ]\n        ];\n\n        if ($blueprint instanceof StructureBlueprint) {\n            $fieldConfig['structure'] = [\n                'maxDepth' => $blueprint->getMaxDepth(),\n                'showTree' => $blueprint->hasTree(),\n            ] + ((array) $blueprint->structure);\n        }\n\n        if ($this->span === 'adaptive') {\n            $fieldConfig['externalToolbarAppState'] = 'toolbarExtensionPoint';\n        }\n\n        // Transfer custom configuration\n        $toTransfer = ['label', 'list', 'form', 'view', 'manage'];\n        foreach ($toTransfer as $transfer) {\n            if (isset($this->controller[$transfer])) {\n                $fieldConfig[$transfer] = is_array($this->controller[$transfer])\n                    ? array_merge($fieldConfig[$transfer], (array) $this->controller[$transfer])\n                    : $this->controller[$transfer];\n            }\n        }\n\n        $field->controller($fieldConfig);\n    }\n\n    /**\n     * getSourceBlueprint validates and converts source to a blueprint\n     */\n    protected function getSourceBlueprint()\n    {\n        if ($this->sourceCache !== null) {\n            return $this->sourceCache;\n        }\n\n        if (!$this->source) {\n            throw new SystemException(\"Missing source for '{$this->fieldName}'.\");\n        }\n\n        $indexer = BlueprintIndexer::instance();\n\n        $uuid = $indexer->hasSection($this->source);\n        if (!$uuid) {\n            throw new SystemException(\"Invalid source '{$this->source}' for '{$this->fieldName}'.\");\n        }\n\n        return $this->sourceCache = BlueprintIndexer::instance()->findSection($uuid);\n    }\n\n    /**\n     * getSourceFieldset returns the source fieldset definition for checking inverse relations\n     */\n    protected function getSourceFieldset()\n    {\n        if ($this->fieldsetCache !== null) {\n            return $this->fieldsetCache;\n        }\n\n        return $this->fieldsetCache = BlueprintIndexer::instance()->findContentFieldset($this->getSourceBlueprint()->uuid);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/FallbackField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse Tailor\\Classes\\ContentFieldBase;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FilterElement;\n\n/**\n * FallbackField is used when there is no content field class defined,\n * it passes configuration to the list column and form field directly.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FallbackField extends ContentFieldBase\n{\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $form->addFormField($this->fieldName, $this->label)\n            ->useConfig($this->config)\n        ;\n    }\n\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        if (is_array($this->column)) {\n            $list->defineColumn($this->fieldName, $this->label)\n                ->shortLabel($this->shortLabel)\n                ->useConfig($this->column)\n            ;\n        }\n    }\n\n    /**\n     * defineBatchListColumn\n     */\n    public function defineBatchListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label);\n    }\n\n    /**\n     * defineFilterScope will define how a field is displayed in a filter.\n     */\n    public function defineFilterScope(FilterElement $filter, $context = null)\n    {\n        if (is_array($this->scope)) {\n            $filter->defineScope($this->fieldName, $this->label)\n                ->shortLabel($this->shortLabel)\n                ->useConfig($this->scope)\n            ;\n        }\n    }\n\n    /**\n     * extendDatabaseTable\n     */\n    public function extendDatabaseTable($table)\n    {\n        $table->text($this->fieldName)->nullable();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/FileUploadField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\n\n/**\n * FileUploadField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass FileUploadField extends FallbackField\n{\n    /**\n     * @var int|null maxItems allowed\n     */\n    public $maxFiles;\n\n    /**\n     * defineConfig will process the field configuration.\n     */\n    public function defineConfig(array $config)\n    {\n        if (isset($config['maxFiles'])) {\n            $this->maxFiles = (int) $config['maxFiles'];\n        }\n    }\n\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $config = $this->config;\n\n        if (isset($config['span']) && $config['span'] === 'adaptive') {\n            $config['externalToolbarAppState'] = 'toolbarExtensionPoint';\n        }\n\n        $form->addFormField($this->fieldName, $this->label)->useConfig($config);\n    }\n\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label)\n            ->displayAs($this->mode === 'file' ? 'file' : 'image')\n            ->shortLabel($this->shortLabel)\n            ->clickable($this->mode !== 'file')\n            ->useConfig($this->column ?: [])\n        ;\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        // Define the relationship\n        if ($this->maxFiles === 1) {\n            $model->attachOne[$this->fieldName] = \\System\\Models\\File::class;\n        }\n        else {\n            $model->attachMany[$this->fieldName] = \\System\\Models\\File::class;\n        }\n    }\n\n    /**\n     * extendDatabaseTable\n     */\n    public function extendDatabaseTable($table)\n    {\n        // No column needed\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/GenericField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse Tailor\\Classes\\ContentFieldBase;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FilterElement;\n\n/**\n * GenericField is used for generic form field types, like text, password, etc\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass GenericField extends ContentFieldBase\n{\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $form->addFormField($this->fieldName, $this->label)->useConfig($this->config);\n    }\n\n    /**\n     * defineListColumn will define how a field is displayed in a list.\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $displayAs = $this->getDefaultColumnDisplayType();\n        if (!$displayAs) {\n            return;\n        }\n\n        $column = $list->defineColumn($this->fieldName, $this->label)->displayAs($displayAs);\n\n        $this->transferConfig($column, [\n            'options',\n            'optionsPreset',\n            'optionsMethod',\n            'shortLabel'\n        ]);\n\n        if ($this->isColumnDefaultSearchable()) {\n            $column->searchable();\n        }\n\n        if (is_array($this->column)) {\n            $column->useConfig($this->column);\n        }\n        elseif ($this->isColumnDefaultInvisible()) {\n            $column->invisible();\n        }\n    }\n\n    /**\n     * defineBatchListColumn\n     */\n    public function defineBatchListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label);\n    }\n\n    /**\n     * defineFilterScope will define how a field is displayed in a filter.\n     */\n    public function defineFilterScope(FilterElement $filter, $context = null)\n    {\n        $displayAs = $this->getDefaultScopeDisplayType();\n        if (!$displayAs) {\n            return;\n        }\n\n        $scope = $filter->defineScope($this->fieldName, $this->label)->displayAs($displayAs);\n\n        $this->transferConfig($scope, [\n            'options',\n            'optionsPreset',\n            'optionsMethod',\n            'shortLabel'\n        ]);\n\n        if (is_array($this->scope)) {\n            $scope->useConfig($this->scope);\n        }\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        switch ($this->type) {\n            case 'checkboxlist':\n                $model->addJsonable($this->fieldName);\n                break;\n        }\n    }\n\n    /**\n     * extendDatabaseTable\n     */\n    public function extendDatabaseTable($table)\n    {\n        switch ($this->type) {\n            case 'checkbox':\n            case 'switch':\n                $table->boolean($this->fieldName)->nullable();\n                break;\n\n            case 'textarea':\n            case 'checkboxlist':\n                $table->mediumText($this->fieldName)->nullable();\n                break;\n\n            default:\n                $table->text($this->fieldName)->nullable();\n                break;\n        }\n    }\n\n    /**\n     * getDefaultScopeDisplayType\n     */\n    protected function getDefaultScopeDisplayType()\n    {\n        if (is_array($this->scope) && isset($this->scope['type'])) {\n            return $this->scope['type'];\n        }\n\n        switch ($this->type) {\n            case 'checkbox':\n            case 'switch':\n                return 'switch';\n\n            case 'dropdown':\n            case 'radio':\n                return 'group';\n\n            default:\n                return null;\n        }\n    }\n\n    /**\n     * getDefaultColumnDisplayType\n     */\n    protected function getDefaultColumnDisplayType()\n    {\n        if (is_array($this->column) && isset($this->column['type'])) {\n            return $this->column['type'];\n        }\n\n        switch ($this->type) {\n            case 'checkbox':\n            case 'switch':\n                return 'switch';\n\n            case 'textarea':\n                return 'summary';\n\n            case 'checkboxlist':\n            case 'balloon-selector':\n            case 'dropdown':\n            case 'radio':\n                return 'selectable';\n\n            case 'password':\n                return null;\n\n            default:\n                return 'text';\n        }\n    }\n\n    /**\n     * isColumnDefaultInvisible\n     */\n    protected function isColumnDefaultInvisible()\n    {\n        switch ($this->type) {\n            case 'textarea':\n                return true;\n\n            default:\n                return false;\n        }\n    }\n\n    /**\n     * isColumnDefaultSearchable\n     */\n    protected function isColumnDefaultSearchable()\n    {\n        switch ($this->type) {\n            case 'text':\n            case 'textarea':\n                return true;\n\n            default:\n                return false;\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/MarkdownField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\n\n/**\n * MarkdownField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MarkdownField extends FallbackField\n{\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $config = $this->config;\n\n        if (isset($config['span']) && $config['span'] === 'adaptive') {\n            $config['externalToolbarAppState'] = 'toolbarExtensionPoint';\n\n            if (!array_key_exists('sideBySide', $config)) {\n                $config['sideBySide'] =  true;\n            }\n        }\n\n        $form->addFormField($this->fieldName, $this->label)->useConfig($config);\n    }\n\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label)\n            ->displayAs('summary')\n            ->searchable()\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->column ?: [])\n        ;\n    }\n\n    /**\n     * extendDatabaseTable\n     */\n    public function extendDatabaseTable($table)\n    {\n        $table->mediumText($this->fieldName)->nullable();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/MediaFinderField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\n\n/**\n * MediaFinderField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MediaFinderField extends FallbackField\n{\n    /**\n     * @var int|null maxItems allowed\n     */\n    public $maxItems;\n\n    /**\n     * defineConfig will process the field configuration.\n     */\n    public function defineConfig(array $config)\n    {\n        if (isset($config['maxItems'])) {\n            $this->maxItems = (int) $config['maxItems'];\n        }\n    }\n\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $config = $this->config;\n\n        if (isset($config['span']) && $config['span'] === 'adaptive') {\n            $config['externalToolbarAppState'] = 'toolbarExtensionPoint';\n        }\n\n        $form->addFormField($this->fieldName, $this->label)->useConfig($config);\n    }\n\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label)\n            ->displayAs('image')\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->column ?: [])\n        ;\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        if ($this->maxItems !== 1) {\n            $model->addJsonable($this->fieldName);\n        }\n    }\n\n    /**\n     * extendDatabaseTable\n     */\n    public function extendDatabaseTable($table)\n    {\n        $table->mediumText($this->fieldName)->nullable();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/MixinField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse Tailor\\Classes\\ContentFieldBase;\n\n/**\n * MixinField is a special field used for including other fields.\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass MixinField extends ContentFieldBase\n{\n    /**\n     * @var string uuid\n     */\n    public $source;\n\n    /**\n     * defineConfig\n     */\n    public function defineConfig(array $config)\n    {\n        if (isset($config['source'])) {\n            $this->source = $config['source'];\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/NestedFormField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse Tailor\\Models\\RepeaterItem;\nuse Tailor\\Models\\NestedFormItem;\nuse Tailor\\Classes\\ContentFieldBase;\nuse Tailor\\Classes\\Relations\\CustomFieldHasOneRelation;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\nuse SystemException;\n\n/**\n * NestedFormField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass NestedFormField extends ContentFieldBase\n{\n    /**\n     * @var array fieldsetConfig definition\n     */\n    public $fieldsetConfig;\n\n    /**\n     * defineConfig will process the field configuration.\n     */\n    public function defineConfig(array $config)\n    {\n        if (isset($config['form'])) {\n            $this->fieldsetConfig = (array) $config['form'];\n        }\n    }\n\n    /**\n     * validateConfig\n     */\n    public function validateConfig()\n    {\n        if ($this->fieldsetConfig === null) {\n            throw new SystemException('NestedForm must specify either a \"form\" property for the form fields');\n        }\n    }\n\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $form->addFormField($this->fieldName, $this->label)->defaultCreate()->useConfig($this->getCleanFormConfig());\n    }\n\n    /**\n     * defineBatchListColumn\n     */\n    public function defineBatchListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label);\n    }\n\n    /**\n     * getCleanFormConfig strips fields from the nested form configuration, since they\n     * are provided by the RepeaterItem::defineFormFields model\n     */\n    protected function getCleanFormConfig(): array\n    {\n        $config = $this->config;\n\n        if (isset($config['form'])) {\n            $config['form']['fields'] = [];\n            $config['form']['tabs']['fields'] = [];\n            $config['form']['secondaryTabs']['fields'] = [];\n        }\n\n        return $config;\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        // Define the relationship\n        $model->hasOne[$this->fieldName] = [\n            NestedFormItem::class,\n            'key' => 'host_id',\n            'delete' => true,\n            'relationClass' => CustomFieldHasOneRelation::class\n        ];\n\n        // Pass the fieldset configuration to all related instances\n        $model->bindEvent('model.afterRelation', function($name, $related) use ($model) {\n            if ($name === $this->fieldName) {\n                $related->setBlueprintFieldConfig(\n                    $model,\n                    $this->getRepeaterTableName($model),\n                    $this->fieldName,\n                    $this->fieldsetConfig,\n                    false\n                );\n            }\n        });\n    }\n\n    /**\n     * getRepeaterTableName\n     */\n    protected function getRepeaterTableName($model)\n    {\n        if ($model instanceof RepeaterItem) {\n            return $model->getTable();\n        }\n\n        return $model->getBlueprintDefinition()->getRepeaterTableName();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/NestedItemsField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse Tailor\\Models\\RepeaterItem;\nuse Tailor\\Models\\NestedFormItem;\nuse Tailor\\Classes\\ContentFieldBase;\nuse Tailor\\Classes\\Relations\\CustomFieldHasManyRelation;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\nuse SystemException;\n\n/**\n * NestedItemsField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass NestedItemsField extends ContentFieldBase\n{\n    /**\n     * @var array fieldsetConfig definition\n     */\n    public $fieldsetConfig;\n\n    /**\n     * defineConfig will process the field configuration.\n     */\n    public function defineConfig(array $config)\n    {\n        if (isset($config['form'])) {\n            $this->fieldsetConfig = (array) $config['form'];\n        }\n    }\n\n    /**\n     * validateConfig\n     */\n    public function validateConfig()\n    {\n        if ($this->fieldsetConfig === null) {\n            throw new SystemException('NestedItems must specify either a \"form\" property for the form fields');\n        }\n    }\n\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $fieldConfig = [\n            'label' => $this->label,\n            'list' => [],\n            'form' => [],\n            'customMessages' => (array) $this->customMessages,\n            'popupSize' => $this->popupSize,\n            'view' => [\n                'showSorting' => false,\n                'toolbarButtons' => 'create|delete',\n                'recordsPerPage' => $this->recordsPerPage,\n            ],\n            'structure' => [\n                'showReorder' => true,\n                'maxDepth' => $this->maxDepth !== null ? $this->maxDepth : 1\n            ]\n        ];\n\n        if ($this->span === 'adaptive') {\n            $fieldConfig['externalToolbarAppState'] = 'toolbarExtensionPoint';\n        }\n\n        $form->addFormField($this->fieldName, $this->label)\n            ->useConfig($this->getCleanFormConfig())\n            ->displayAs('relation')\n            ->controller($fieldConfig);\n    }\n\n    /**\n     * defineBatchListColumn\n     */\n    public function defineBatchListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label);\n    }\n\n    /**\n     * getCleanFormConfig strips fields from the nested form configuration, since they\n     * are provided by the RepeaterItem::defineFormFields model\n     */\n    protected function getCleanFormConfig(): array\n    {\n        $config = $this->config;\n\n        if (isset($config['form'])) {\n            $config['form']['fields'] = [];\n            $config['form']['tabs']['fields'] = [];\n            $config['form']['secondaryTabs']['fields'] = [];\n        }\n\n        return $config;\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        // Define the relationship\n        $model->hasMany[$this->fieldName] = [\n            NestedFormItem::class,\n            'key' => 'host_id',\n            'delete' => true,\n            'relationClass' => CustomFieldHasManyRelation::class\n        ];\n\n        // Pass the fieldset configuration to all related instances\n        $model->bindEvent('model.afterRelation', function($name, $related) use ($model) {\n            if ($name === $this->fieldName) {\n                $related->setBlueprintFieldConfig(\n                    $model,\n                    $this->getRepeaterTableName($model),\n                    $this->fieldName,\n                    $this->fieldsetConfig,\n                    false\n                );\n            }\n        });\n    }\n\n    /**\n     * getRepeaterTableName\n     */\n    protected function getRepeaterTableName($model)\n    {\n        if ($model instanceof RepeaterItem) {\n            return $model->getTable();\n        }\n\n        return $model->getBlueprintDefinition()->getRepeaterTableName();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/NumberField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FilterElement;\n\n/**\n * NumberField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass NumberField extends FallbackField\n{\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label)\n            ->displayAs('number')\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->column ?: [])\n        ;\n    }\n\n    /**\n     * defineFilterScope\n     */\n    public function defineFilterScope(FilterElement $filter, $context = null)\n    {\n        $filter->defineScope($this->fieldName, $this->label)\n            ->displayAs('number')\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->scope ?: [])\n        ;\n    }\n\n    /**\n     * extendDatabaseTable adds any required columns to the database.\n     */\n    public function extendDatabaseTable($table)\n    {\n        $table->integer($this->fieldName)->nullable();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/PageFinderField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse October\\Contracts\\Element\\ListElement;\n\n/**\n * PageFinderField is an implementation of the pagefinder form widget\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PageFinderField extends FallbackField\n{\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label)\n            ->displayAs('linkage')\n            ->shortLabel($this->shortLabel)\n            ->attributes([\n                'target' => '_blank'\n            ])\n            ->useConfig($this->column ?: [])\n        ;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/RecordFinderField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse Lang;\nuse Tailor\\Models\\RepeaterItem;\nuse Tailor\\Classes\\Relations\\CustomMultiJoinRelation;\nuse Tailor\\Classes\\Relations\\CustomNestedJoinRelation;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FilterElement;\nuse SystemException;\n\n/**\n * RecordFinderField allows association to models\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RecordFinderField extends FallbackField\n{\n    /**\n     * @var string modelClass of the model to use for listing records\n     */\n    public $modelClass;\n\n    /**\n     * @var int|null maxItems allowed\n     */\n    public $maxItems;\n\n    /**\n     * @var string inverse the relationship definition, set to the field name\n     */\n    public $inverse;\n\n    /**\n     * @var string displayMode for the relationship\n     */\n    public $displayMode = 'recordfinder';\n\n    /**\n     * @var array controller config for displayMode: controller\n     */\n    public $controller = [];\n\n    /**\n     * defineConfig will process the field configuration.\n     */\n    public function defineConfig(array $config)\n    {\n        if (isset($config['modelClass'])) {\n            $this->modelClass = (string) $config['modelClass'];\n        }\n\n        if (isset($config['maxItems'])) {\n            $this->maxItems = (int) $config['maxItems'];\n        }\n\n        if (isset($config['inverse'])) {\n            $this->inverse = (string) $config['inverse'];\n        }\n\n        if (isset($config['displayMode'])) {\n            $this->displayMode = (string) $config['displayMode'];\n        }\n\n        if (isset($config['controller'])) {\n            $this->controller = (array) $config['controller'];\n        }\n    }\n\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $field = $form->addFormField($this->fieldName, $this->label);\n\n        // Content field 'scope' can conflict with Form Widget 'scope'\n        $field->useConfig($this->config + [\n            'nameFrom' => 'title',\n            'scope' => null\n        ]);\n\n        // Singular and multi display modes\n        $supportedDisplays = $this->maxItems === 1\n            ? ['recordfinder']\n            : ['taglist'];\n\n        $field->displayAs(in_array($this->displayMode, $supportedDisplays)\n            ? $this->displayMode\n            : 'relation');\n\n        if ($this->displayMode === 'controller') {\n            $this->defineFormFieldAsRelationController($field);\n        }\n\n        // @deprecated this should be default\n        if ($field->type === 'taglist') {\n            $field->customTags(false);\n        }\n    }\n\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label)\n            ->relation($this->fieldName)\n            ->sqlSelect($this->nameFrom ?: 'title')\n            ->sortable(false)\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->column ?: [])\n        ;\n    }\n\n    /**\n     * defineFilterScope\n     */\n    public function defineFilterScope(FilterElement $filter, $context = null)\n    {\n        $filter->defineScope($this->fieldName, $this->label)\n            ->displayAs('group')\n            ->nameFrom('title')\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->scope ?: [])\n        ;\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        // Define the relationship\n        if ($this->inverse) {\n            $this->defineInverseModelRelationship($model);\n        }\n        else {\n            $this->defineModelRelationship($model);\n        }\n    }\n\n    /**\n     * extendDatabaseTable\n     */\n    public function extendDatabaseTable($table)\n    {\n        if ($this->maxItems === 1) {\n            $table->integer($this->getSingularKeyName())->unsigned()->nullable();\n        }\n    }\n\n    /**\n     * getSingularKeyName\n     */\n    public function getSingularKeyName()\n    {\n        return $this->fieldName.'_id';\n    }\n\n    /**\n     * defineModelRelationship for the direct relationship. These definitions\n     * rely on multisite modifying the relation definition.\n     *\n     * @see \\October\\Rain\\Database\\Traits\\Multisite::defineMultisiteRelation\n     */\n    protected function defineModelRelationship($model)\n    {\n        $relatedModel = $this->getRelatedModel();\n        $relatedMultisite = $relatedModel->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n            $relatedModel->isMultisiteEnabled();\n\n        $isSingular = $this->maxItems === 1;\n        $isNested = $model instanceof RepeaterItem;\n\n        // RepeaterItem doesn't have getBlueprintDefinition, and nested relations\n        // don't participate in dual-multisite propagation\n        $parentMultisite = $isNested ? false : $model->getBlueprintDefinition()->useMultisite();\n\n        // Dual-multisite: both parent and related use multisite, so use actual IDs\n        // and let pivot site_id scoping + propagation handle site separation\n        $isDualMultisite = $parentMultisite && $relatedMultisite;\n\n        if ($isSingular) {\n            $model->belongsTo[$this->fieldName] = [\n                $relatedModel::class,\n                'key' => $this->getSingularKeyName(),\n                'otherKey' => ($relatedMultisite && !$isDualMultisite) ? 'site_root_id' : 'id'\n            ];\n        }\n        elseif ($isNested) {\n            $model->belongsToMany[$this->fieldName] = [\n                $relatedModel::class,\n                'table' => 'tailor_content_joins',\n                'relationClass' => CustomNestedJoinRelation::class,\n                'relatedKey' => $relatedMultisite ? 'site_root_id' : 'id'\n            ];\n        }\n        else {\n            $model->morphedByMany[$this->fieldName] = [\n                $relatedModel::class,\n                'table' => $model->getBlueprintDefinition()->getJoinTableName(),\n                'name' => $this->fieldName,\n                'relationClass' => CustomMultiJoinRelation::class,\n                'relatedKey' => ($relatedMultisite && !$isDualMultisite) ? 'site_root_id' : 'id'\n            ];\n        }\n    }\n\n    /**\n     * defineInverseModelRelationship for the inverse relationship. These definitions\n     * do not rely on multisite via propagatable attribute. Inverse relations do not\n     * replicate and should be treated as read-only.\n     */\n    protected function defineInverseModelRelationship($model)\n    {\n        $relatedModel = $this->getRelatedModel();\n        if (!$relatedModel->hasRelation($this->inverse)) {\n            throw new SystemException(\"Missing relation definition for inverse field '{$this->inverse}' for model class '{$this->modelClass}' for '{$this->fieldName}'.\");\n        }\n\n        $isNested = $model instanceof RepeaterItem;\n\n        // RepeaterItem doesn't have getBlueprintDefinition\n        $parentMultisite = $isNested ? false : $model->getBlueprintDefinition()->useMultisite();\n        $relationDefinition = $relatedModel->getRelationDefinition($this->inverse);\n        $relatedMultisite = $relatedModel->isClassInstanceOf(\\October\\Contracts\\Database\\MultisiteInterface::class) &&\n            $relatedModel->isMultisiteEnabled();\n\n        // Dual-multisite: both parent and related use multisite\n        $isDualMultisite = $parentMultisite && $relatedMultisite;\n\n        $isSingular = $this->maxItems === 1;\n        $otherIsSingular = $relatedModel->isRelationTypeSingular($this->inverse);\n        $otherIsPropagatable = $relatedMultisite ? $relatedModel->isAttributePropagatable($this->inverse) : false;\n\n        // In dual-multisite, use 'id' for proper site isolation; otherwise use site_root_id for sharing\n        $useRelatedRootKey = $otherIsPropagatable && !$isDualMultisite;\n        $useParentRootKey = $parentMultisite && !$isDualMultisite;\n\n        if ($isSingular) {\n            $model->hasOne[$this->fieldName] = [\n                $relatedModel::class,\n                'key' => $relationDefinition['key'] ?? null,\n                'otherKey' => $useRelatedRootKey ? 'site_root_id' : 'id',\n                'replicate' => false\n            ];\n        }\n        elseif ($otherIsSingular) {\n            $model->hasMany[$this->fieldName] = [\n                $relatedModel::class,\n                'key' => $relationDefinition['key'] ?? null,\n                'otherKey' => $useRelatedRootKey ? 'site_root_id' : 'id',\n                'replicate' => false\n            ];\n        }\n        else {\n            $model->morphToMany[$this->fieldName] = [\n                $relatedModel::class,\n                'table' => $relationDefinition['table'] ?? null,\n                'name' => $this->inverse,\n                'relationClass' => CustomMultiJoinRelation::class,\n                'relatedKey' => $useRelatedRootKey ? 'site_root_id' : 'id',\n                'parentKey' => $useParentRootKey ? 'site_root_id' : 'id',\n                'replicate' => false\n            ];\n        }\n    }\n\n    /**\n     * defineFormFieldAsRelationController\n     */\n    protected function defineFormFieldAsRelationController($field)\n    {\n        $customMessages = (array) $this->customMessages;\n\n        $toolbarButtons = $this->toolbarButtons;\n\n        $fieldConfig = [\n            'label' => $this->label,\n            'list' => $this->list ?: [],\n            'form' => $this->form ?: [],\n            'customMessages' => $customMessages,\n            'popupSize' => $this->popupSize,\n            'view' => [\n                'toolbarButtons' => $toolbarButtons,\n                'recordsPerPage' => $this->recordsPerPage,\n            ],\n            'manage' => [\n                'recordsPerPage' => $this->recordsPerPage,\n            ]\n        ];\n\n        // $relatedModel = $this->getRelatedModel();\n        // if ($blueprint instanceof StructureBlueprint) {\n        //     $fieldConfig['structure'] = [\n        //         'maxDepth' => $blueprint->getMaxDepth(),\n        //         'showTree' => $blueprint->hasTree(),\n        //     ] + ((array) $blueprint->structure);\n        // }\n\n        if ($this->span === 'adaptive') {\n            $fieldConfig['externalToolbarAppState'] = 'toolbarExtensionPoint';\n        }\n\n        // Transfer custom configuration\n        $toTransfer = ['label', 'list', 'form', 'view', 'manage'];\n        foreach ($toTransfer as $transfer) {\n            if (isset($this->controller[$transfer])) {\n                $fieldConfig[$transfer] = is_array($this->controller[$transfer])\n                    ? array_merge($fieldConfig[$transfer], (array) $this->controller[$transfer])\n                    : $this->controller[$transfer];\n            }\n        }\n\n        $field->controller($fieldConfig);\n    }\n\n    /**\n     * getRelatedModel returns the related model to use\n     */\n    protected function getRelatedModel()\n    {\n        if (!class_exists($this->modelClass)) {\n            throw new SystemException(Lang::get('backend::lang.recordfinder.invalid_model_class', ['modelClass' => $this->modelClass]));\n        }\n\n        return new $this->modelClass;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/RepeaterField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse Tailor\\Models\\RepeaterItem;\nuse Tailor\\Classes\\ContentFieldBase;\nuse Tailor\\Classes\\Relations\\CustomFieldHasManyRelation;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\nuse SystemException;\n\n/**\n * RepeaterField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RepeaterField extends ContentFieldBase\n{\n    /**\n     * @var array fieldsetConfig definition\n     */\n    public $fieldsetConfig;\n\n    /**\n     * @var bool useGroups\n     */\n    protected $useGroups;\n\n    /**\n     * defineConfig will process the field configuration.\n     */\n    public function defineConfig(array $config)\n    {\n        if (isset($config['form'])) {\n            $this->fieldsetConfig = (array) $config['form'];\n            $this->useGroups = false;\n        }\n\n        if (isset($config['groups'])) {\n            $this->fieldsetConfig = (array) $config['groups'];\n            $this->useGroups = true;\n        }\n    }\n\n    /**\n     * validateConfig\n     */\n    public function validateConfig()\n    {\n        if ($this->fieldsetConfig === null) {\n            throw new SystemException('Repeater must specify either a \"form\" or \"group\" property for the form fields');\n        }\n    }\n\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $config = ['groupKeyFrom' => 'content_group'] + $this->getCleanFormConfig();\n\n        if (isset($config['span']) && $config['span'] === 'adaptive') {\n            $config['externalToolbarAppState'] = 'toolbarExtensionPoint';\n        }\n\n        $form->addFormField($this->fieldName, $this->label)->useConfig($config);\n    }\n\n    /**\n     * defineBatchListColumn\n     */\n    public function defineBatchListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label);\n    }\n\n    /**\n     * getCleanFormConfig strips fields from the repeater configuration, since they\n     * are provided by the RepeaterItem::defineFormFields model\n     */\n    protected function getCleanFormConfig(): array\n    {\n        $config = $this->config;\n\n        if (isset($config['form'])) {\n            $config['form']['fields'] = [];\n        }\n        if (isset($config['groups'])) {\n            foreach ($config['groups'] as &$group) {\n                $group['fields'] = [];\n            }\n        }\n\n        return $config;\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        // Define the relationship\n        $model->hasMany[$this->fieldName] = [\n            RepeaterItem::class,\n            'key' => 'host_id',\n            'delete' => true,\n            'relationClass' => CustomFieldHasManyRelation::class\n        ];\n\n        // Pass the fieldset configuration to all related instances\n        $model->bindEvent('model.afterRelation', function($name, $related) use ($model) {\n            if ($name === $this->fieldName) {\n                $related->setBlueprintFieldConfig(\n                    $model,\n                    $this->getRepeaterTableName($model),\n                    $this->fieldName,\n                    $this->fieldsetConfig,\n                    $this->useGroups\n                );\n            }\n        });\n    }\n\n    /**\n     * getRepeaterTableName\n     */\n    protected function getRepeaterTableName($model)\n    {\n        if ($model instanceof RepeaterItem) {\n            return $model->getTable();\n        }\n\n        return $model->getBlueprintDefinition()->getRepeaterTableName();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/RichEditorField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\ListElement;\n\n/**\n * RichEditorField\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RichEditorField extends FallbackField\n{\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $config = $this->config;\n\n        if (isset($config['span']) && $config['span'] === 'adaptive') {\n            $config['showMargins'] = true;\n            $config['externalToolbarAppState'] = 'toolbarExtensionPoint';\n        }\n\n        $form->addFormField($this->fieldName, $this->label)->useConfig($config);\n    }\n\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        $list->defineColumn($this->fieldName, $this->label)\n            ->displayAs('summary')\n            ->searchable()\n            ->shortLabel($this->shortLabel)\n            ->useConfig($this->column ?: [])\n        ;\n    }\n\n    /**\n     * extendDatabaseTable\n     */\n    public function extendDatabaseTable($table)\n    {\n        $table->mediumText($this->fieldName)->nullable();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/TagListField.php",
    "content": "<?php namespace Tailor\\ContentFields;\n\nuse Backend\\FormWidgets\\TagList;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FilterElement;\nuse October\\Contracts\\Element\\FormElement;\n\n/**\n * TagListField is locked to array mode for JSON query support\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass TagListField extends FallbackField\n{\n    /**\n     * defineFormField will define how a field is displayed in a form.\n     */\n    public function defineFormField(FormElement $form, $context = null)\n    {\n        $form->addFormField($this->fieldName, $this->label)\n            ->useConfig($this->config)\n            ->mode(TagList::MODE_ARRAY)\n        ;\n    }\n\n    /**\n     * defineListColumn\n     */\n    public function defineListColumn(ListElement $list, $context = null)\n    {\n        if (!is_array($this->column)) {\n            return;\n        }\n\n        $column = $list->defineColumn($this->fieldName, $this->label)->displayAs('selectable');\n\n        $this->transferConfig($column, [\n            'options',\n            'optionsPreset',\n            'optionsMethod',\n            'shortLabel'\n        ]);\n\n        $column->useConfig($this->column);\n    }\n\n    /**\n     * defineFilterScope\n     */\n    public function defineFilterScope(FilterElement $filter, $context = null)\n    {\n        if (!is_array($this->scope)) {\n            return;\n        }\n\n        $scope = $filter->defineScope($this->fieldName, $this->label)->displayAs('group');\n\n        // @deprecated move to the filter class. detect list array and combine there (v4)\n        $options = $this->options;\n        if ($options && !$this->useKey) {\n            $options = array_combine($this->options, $this->options);\n        }\n        $scope->options($options);\n\n        $this->transferConfig($scope, [\n            // 'options',\n            'optionsPreset',\n            'optionsMethod',\n            'shortLabel'\n        ]);\n\n        $scope->useConfig($this->scope);\n    }\n\n    /**\n     * extendModelObject will extend the record model.\n     */\n    public function extendModelObject($model)\n    {\n        $model->addJsonable($this->fieldName);\n    }\n\n    /**\n     * extendDatabaseTable adds any required columns to the database.\n     */\n    public function extendDatabaseTable($table)\n    {\n        $table->mediumText($this->fieldName)->nullable();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/contentfields/entriesfield/partials/_column_multi.php",
    "content": "<?php if ($value): ?>\n    <ul class=\"list-link-list\">\n        <?php foreach ($value as $entry): ?>\n            <?php\n                $url = Backend::url('tailor/entries/'.$entry->blueprint->handleSlug.'/'.$entry->id);\n            ?>\n            <li><a href=\"<?= $url ?>\"><?= e($entry->title) ?></a></li>\n        <?php endforeach ?>\n    </ul>\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/contentfields/entriesfield/partials/_column_single.php",
    "content": "<?php if ($value): ?>\n    <ul class=\"list-link-list\">\n        <?php\n            $url = Backend::url('tailor/entries/'.$value->blueprint->handleSlug.'/'.$value->id);\n        ?>\n        <li><a href=\"<?= $url ?>\"><?= e($value->title) ?></a></li>\n    </ul>\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/controllers/BulkActions.php",
    "content": "<?php namespace Tailor\\Controllers;\n\nuse Backend;\nuse BackendMenu;\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Backend\\Classes\\WildcardController;\nuse ForbiddenException;\nuse NotFoundException;\n\n/**\n * BulkActions controller\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass BulkActions extends WildcardController\n{\n    /**\n     * @var array implement extensions\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\ImportExportController::class,\n    ];\n\n    /**\n     * @var string importExportConfig is `ImportExportController` configuration.\n     */\n    public $importExportConfig = 'config_import_export.yaml';\n\n    /**\n     * @var Blueprint activeSource\n     */\n    protected $activeSource;\n\n    /**\n     * @var string actionMethod is the action method to call\n     */\n    protected $actionMethod;\n\n    /**\n     * beforeDisplay\n     */\n    public function beforeDisplay()\n    {\n        // Pop off first parameter as source handle\n        $sourceHandle = array_shift($this->params);\n        $this->makeBlueprintSource($sourceHandle);\n\n        $validMethods = ['export', 'import', 'download'];\n        $slug = $this->params[0] ?? null;\n\n        if (in_array($slug, $validMethods)) {\n            // Pop second parameter as action method\n            $actionMethod = array_shift($this->params);\n\n            $this->actionMethod = $this->actionView = $actionMethod;\n        }\n\n        if (!$this->activeSource) {\n            throw new NotFoundException;\n        }\n\n        $this->checkSourcePermission();\n\n        $this->setNavigationContext();\n\n        if ($this->actionMethod === 'import') {\n            $this->beforeDisplayImport();\n        }\n        elseif ($this->actionMethod === 'export') {\n            $this->beforeDisplayExport();\n        }\n    }\n\n    /**\n     * index action\n     */\n    public function index()\n    {\n        if ($this->hasFatalError()) {\n            return;\n        }\n\n        if ($this->actionMethod) {\n            return $this->{$this->actionMethod}(...$this->params);\n        }\n\n        return Backend::redirect('tailor/entries/'.$this->activeSource->handleSlug);\n    }\n\n    /**\n     * actionUrl returns a URL for this controller and supplied action.\n     */\n    public function actionUrl($action = null, $path = null)\n    {\n        $url = $action === 'download'\n            ? 'tailor/bulkactions/'.$this->activeSource->handleSlug.'/'.$action\n            : 'tailor/entries/'.$this->activeSource->handleSlug;\n\n        if ($path) {\n            $url .= '/'.$path;\n        }\n\n        return Backend::url($url);\n    }\n\n    /**\n     * importExportExtendModel\n     */\n    public function importExportExtendModel($model)\n    {\n        $model->setBlueprintUuid($this->activeSource->uuid);\n\n        $model->extendWithBlueprint();\n\n        return $model;\n    }\n\n    /**\n     * importExportGetFileName\n     */\n    public function importExportGetFileName()\n    {\n        return $this->activeSource->handleSlug;\n    }\n\n    /**\n     * makeBlueprintSource\n     */\n    protected function makeBlueprintSource($activeSource = null): void\n    {\n        $this->activeSource = $activeSource\n            ? BlueprintIndexer::instance()->findByHandle($activeSource)\n            : null;\n    }\n\n    /**\n     * checkSourcePermission\n     */\n    protected function checkSourcePermission()\n    {\n        if (!$this->user->hasAccess($this->activeSource->getPermissionCodeName())) {\n            throw new ForbiddenException;\n        }\n    }\n\n    /**\n     * setNavigationContext\n     */\n    protected function setNavigationContext()\n    {\n        $item = BlueprintIndexer::instance()->findSecondaryNavigation($this->activeSource->uuid);\n        if ($item) {\n            $item->setBackendControllerContext();\n        }\n        else {\n            BackendMenu::setContext('October.Tailor', 'tailor');\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/controllers/Entries.php",
    "content": "<?php namespace Tailor\\Controllers;\n\nuse Arr;\nuse Lang;\nuse Flash;\nuse Backend;\nuse Redirect;\nuse BackendMenu;\nuse Tailor\\Classes\\RecordIndexer;\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Backend\\Classes\\WildcardController;\nuse Tailor\\Classes\\Blueprint\\SingleBlueprint;\nuse Tailor\\Classes\\Blueprint\\StructureBlueprint;\nuse ApplicationException;\nuse ForbiddenException;\nuse NotFoundException;\n\n/**\n * Entries controller\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Entries extends WildcardController\n{\n    /**\n     * @var array implement extensions\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\ListController::class,\n        \\Backend\\Behaviors\\FormController::class,\n        \\Backend\\Behaviors\\RelationController::class,\n        \\Tailor\\Behaviors\\PreviewController::class,\n        \\Tailor\\Behaviors\\VersionController::class,\n        \\Tailor\\Behaviors\\DraftController::class\n    ];\n\n    /**\n     * @var array listConfig is `ListController` configuration.\n     */\n    public $listConfig = 'config_list.yaml';\n\n    /**\n     * @var string formConfig is `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var \\Tailor\\Classes\\Blueprint\\EntryBlueprint activeSource\n     */\n    protected $activeSource;\n\n    /**\n     * @var string actionMethod is the action method to call\n     */\n    protected $actionMethod;\n\n    /**\n     * @var \\Model modelInstance is an instance of the blueprint model\n     */\n    protected $modelInstance;\n\n    /**\n     * @var array customMessages contains default messages that you can override\n     */\n    protected $customMessages = [\n        'buttonCreate' => \"Create :name\",\n        'buttonUpdate' => \"Update :name\",\n        'titleIndexList' => \"Manage :name Entries\",\n        'titlePreviewForm' => \"Preview :name\",\n        'titleCreateForm' => \"Create :name\",\n        'titleUpdateForm' => \"Update :name\",\n    ];\n\n    /**\n     * beforeDisplay\n     */\n    public function beforeDisplay()\n    {\n        // Pop off first parameter as source handle\n        $sourceHandle = array_shift($this->params);\n        $this->makeBlueprintSource($sourceHandle);\n\n        $validMethods = ['create'];\n        $slug = $this->params[0] ?? null;\n\n        if (in_array($slug, $validMethods)) {\n            // Pop second parameter as action method\n            $actionMethod = array_shift($this->params);\n\n            $this->actionMethod = $this->actionView = $actionMethod;\n        }\n        elseif ($this->isSectionSingular() || $slug) {\n            $this->actionMethod = $this->actionView = 'update';\n        }\n\n        if (!$this->activeSource) {\n            throw new NotFoundException;\n        }\n\n        $this->modelInstance = $this->activeSource->newModelInstance();\n\n        $this->checkSourcePermission();\n\n        $this->setNavigationContext();\n\n        $this->setPreviewPageContext('section', $this->activeSource);\n    }\n\n    /**\n     * actionUrl returns a URL for this controller and supplied action.\n     */\n    public function actionUrl($action = null, $path = null)\n    {\n        $url = 'tailor/entries/'.$this->activeSource->handleSlug.'/'.$action;\n        if ($path) {\n            $url .= '/'.$path;\n        }\n\n        return Backend::url($url);\n    }\n\n    /**\n     * index action\n     */\n    public function index()\n    {\n        if ($this->hasFatalError()) {\n            return;\n        }\n\n        if ($this->actionMethod) {\n            $this->addJs('/modules/tailor/assets/js/vue-entry-header-controls.js', ['type' => 'module']);\n            $this->addJs('/modules/tailor/assets/js/vue-entry-document.js', ['type' => 'module']);\n\n            $this->registerVueComponent(\\Backend\\VueComponents\\Document::class);\n            $this->registerVueComponent(\\Backend\\VueComponents\\DropdownMenuButton::class);\n            $this->registerVueComponent(\\Tailor\\VueComponents\\PublishingControls::class);\n            $this->registerVueComponent(\\Tailor\\VueComponents\\PublishButton::class);\n            $this->registerVueComponent(\\Tailor\\VueComponents\\DraftNotes::class);\n\n            return $this->{$this->actionMethod}(...$this->params);\n        }\n\n        $this->asExtension('ListController')->index();\n\n        $this->setPageTitleFromMessage('titleIndexList', \"Manage Entries\");\n\n        $this->prepareVars();\n    }\n\n    /**\n     * index_onBulkAction\n     */\n    public function index_onBulkAction()\n    {\n        if (\n            ($bulkAction = post('action')) &&\n            ($checkedIds = post('checked')) &&\n            is_array($checkedIds) &&\n            count($checkedIds)\n        ) {\n            foreach ($checkedIds as $modelId) {\n                if (!$model = $this->formFindModelObject($modelId)) {\n                    continue;\n                }\n\n                switch ($bulkAction) {\n                    case 'disable':\n                        $this->checkSourcePermission('publish');\n                        $model->is_enabled = false;\n                        $model->save();\n                        Flash::success(__('Entries have been disabled'));\n                        break;\n\n                    case 'enable':\n                        $this->checkSourcePermission('publish');\n                        $model->is_enabled = true;\n                        $model->save();\n                        Flash::success(__('Entries have been enabled'));\n                        break;\n\n                    case 'delete':\n                        $this->checkSourcePermission('delete');\n                        if (!$model->isSoftDeleteEnabled() || !$model->trashed()) {\n                            $model->delete();\n                        }\n                        Flash::success(__('Entries have been deleted'));\n                        break;\n\n                    case 'restore':\n                        $this->checkSourcePermission('delete');\n                        $model->restore();\n                        Flash::success(__('Entries have been restored'));\n                        break;\n\n                    case 'forceDelete':\n                        $this->checkSourcePermission('delete');\n                        $model->forceDelete();\n                        Flash::success(__('Entries have been deleted'));\n                        break;\n\n                    case 'duplicate':\n                        $this->checkSourcePermission('create');\n                        $model->duplicateRecord()->save(['propagate' => true]);\n                        Flash::success(__('Entries have been duplicated'));\n                        break;\n                }\n            }\n        }\n\n        return $this->listRefresh();\n    }\n\n    /**\n     * create action\n     */\n    public function create()\n    {\n        $this->checkSourcePermission('create');\n\n        if ($this->isSectionDraftable()) {\n            return $this->asExtension('DraftController')->create();\n        }\n\n        $this->bodyClass = 'compact-container';\n\n        $this->setPageTitleFromMessage('titleCreateForm', \"Create Entry\");\n\n        $this->asExtension('FormController')->create();\n\n        $this->prepareVars();\n\n        $this->vars['initialState']['isCreateAction'] = true;\n    }\n\n    /**\n     * update action\n     */\n    public function update($recordId = null)\n    {\n        $this->bodyClass = 'compact-container';\n\n        $this->setPageTitleFromMessage('titleUpdateForm', \"Update Entry\");\n\n        if ($this->isVersionMode()) {\n            $response = $this->asExtension('VersionController')->update($recordId);\n        }\n        elseif ($this->isDraftMode()) {\n            $response = $this->asExtension('DraftController')->update($recordId);\n        }\n        else {\n            $response = $this->asExtension('FormController')->update($recordId);\n        }\n\n        if ($response) {\n            return $response;\n        }\n\n        $model = $this->formGetModel();\n\n        // Record not found or some error happened\n        if (!$model) {\n            return;\n        }\n\n        // Helpful redirect to active draft for non-publishers\n        if (!$this->hasSourcePermission('publish') && ($redirect = $this->makeDraftRedirectToClosest($model))) {\n            return $redirect;\n        }\n\n        if ($model->isVersionStatus()) {\n            $this->actionView = 'version';\n        }\n\n        $this->prepareVars();\n    }\n\n    /**\n     * prepareVars\n     */\n    protected function prepareVars()\n    {\n        $model = $this->getPrimaryModel();\n\n        $this->vars['primaryModel'] = $model;\n        $this->vars['entityName'] = $this->activeSource->name ?? '';\n        $this->vars['activeSource'] = $this->activeSource;\n        $this->vars['initialState'] = $this->makeInitialState($model);\n        $this->vars['langState'] = $this->makeLangState();\n    }\n\n    /**\n     * makeInitialState\n     */\n    public function makeInitialState($model): array\n    {\n        if (!$model) {\n            return [];\n        }\n\n        $initialState = [\n            'primaryRecordUrl' => $this->actionUrl($model->getKey()),\n            'entryTypeOptions' => $model->getContentGroupOptions(),\n            'draftable' => $this->isSectionDraftable(),\n            'contentGroup' => $model->content_group,\n            'isDraft' => $this->isSectionDraftable() && $this->formGetModel()->isDraftStatus(),\n            'isSingular' => $this->isSectionSingular(),\n            'isDeleted' => $model->trashed(),\n            'drafts' => $model->getDraftRecords(),\n            'statusCode' => $model->status_code,\n            'hasPreviewPage' => $this->hasPreviewPage(),\n            'statusCodeOptions' => Arr::trans($model->getStatusCodeOptions()),\n            'showTreeControls' => $this->isSectionStructured() && $this->activeSource->hasTree() && !$model->trashed(),\n            'fullSlug' => $model->fullslug,\n            'canDelete' => $this->hasSourcePermission('delete'),\n            'canPublish' => $this->hasSourcePermission('publish'),\n            'canRestore' => $model->trashed(),\n        ];\n\n        if ($initialState['isDraft']) {\n            $formModel = $this->formGetModel();\n            $initialState['isFirstDraft'] = $formModel->isFirstDraftStatus();\n            $initialState['draftNotes'] = $formModel->getDraftNotes();\n            $initialState['draftName'] = $formModel->getDraftName();\n            $initialState['currentDraftId'] = $formModel->getDraftId();\n        }\n\n        $showEntryTypeSelector = isset($initialState['entryTypeOptions']) && $initialState['entryTypeOptions'];\n        if ($initialState['isDraft'] && !$initialState['isFirstDraft']) {\n            $showEntryTypeSelector = false;\n        }\n\n        if ($initialState['isDeleted']) {\n            $showEntryTypeSelector = false;\n        }\n\n        $initialState['showEntryTypeSelector'] = $showEntryTypeSelector;\n\n        return $initialState;\n    }\n\n    /**\n     * makeLangState\n     */\n    public function makeLangState()\n    {\n        return [\n            'form_save' => e(Lang::get('backend::lang.form.save')),\n            'form_delete' => e(Lang::get('backend::lang.form.delete')),\n            'form_restore' => e(Lang::get('backend::lang.form.restore')),\n            'form_error' => e(Lang::get('backend::lang.form.error')),\n            'form_confirm_delete' => e(Lang::get('backend::lang.form.confirm_delete')),\n            'form_save_close' => __(\"Save & Close\"),\n            'force_delete' => __(\"Delete Forever\"),\n            'force_delete_confirm' => __(\"Do you really want to delete this permanently?\"),\n            'save_draft' => __(\"Save Draft\"),\n            'discard_draft' => __(\"Discard Draft\"),\n            'discard_draft_confirm' => __(\"Do you really want to discard the draft?\"),\n            'save_apply_draft' => __(\"Save & Apply Draft\"),\n            'delete_entry_confirm' => __(\"Do you really want to delete the record? It will also delete all drafts if any exist.\"),\n            'create_draft' => __(\"Create New Draft\"),\n            'select_draft' => __(\"Select Draft to Edit\"),\n            'edit_primary_record' => __(\"Edit the Primary Record\"),\n            'draft_notes' => __(\"Notes\"),\n            'confirm_create_draft' => __(\"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\"),\n            'preview' => __(\"Preview\"),\n            'unnamed_draft' => __(\"Unnamed Draft\"),\n        ];\n    }\n\n    /**\n     * prepareAjaxResponseVars\n     */\n    protected function prepareAjaxResponseVars()\n    {\n        $model = $this->formGetModel();\n\n        return [\n            'result' => [\n                'drafts' => $model->getDraftRecords(),\n                'versions' => $model->getVersionRecords(),\n                'statusCode' => $model->status_code,\n                'fullSlug' => $model->fullslug\n            ]\n        ];\n    }\n\n    /**\n     * getPrimaryModel\n     */\n    protected function getPrimaryModel()\n    {\n        if ($this->isVersionMode()) {\n            return $this->versionGetPrimaryModel();\n        }\n\n        if ($this->isDraftMode()) {\n            return $this->draftGetPrimaryModel();\n        }\n\n        return $this->formGetModel();\n    }\n\n    /**\n     * onCommitDraft is saving a draft without publishing it\n     */\n    public function onCommitDraft($recordId = null)\n    {\n        $redirect = $this->asExtension('DraftController')->onCommitDraft($recordId);\n        if (post('close')) {\n            return $redirect;\n        }\n\n        return $this->prepareAjaxResponseVars();\n    }\n\n    /**\n     * onSave\n     */\n    public function onSave($recordId = null)\n    {\n        if ($this->actionMethod === 'update') {\n            $redirect = $this->asExtension('FormController')->update_onSave($recordId);\n            if (post('close')) {\n                return $redirect;\n            }\n\n            return $this->prepareAjaxResponseVars();\n        }\n        else {\n            return $this->asExtension('FormController')->create_onSave();\n        }\n    }\n\n    /**\n     * onDelete\n     */\n    public function onDelete($recordId = null)\n    {\n        $this->checkSourcePermission('delete');\n\n        if ($this->actionMethod === 'update') {\n            return $this->asExtension('FormController')->update_onDelete($recordId);\n        }\n    }\n\n    /**\n     * onRestore\n     */\n    public function onRestore($recordId = null)\n    {\n        $this->checkSourcePermission('publish');\n\n        if ($model = $this->formFindModelObject($recordId)) {\n            $model->restore();\n\n            Flash::success(Lang::get('backend::lang.form.restore_success', [\n                'name' => Lang::get($this->asExtension('FormController')->getConfig('name', 'backend::lang.model.name'))\n            ]));\n\n            return Redirect::refresh();\n        }\n    }\n\n    /**\n     * onForceDelete\n     */\n    public function onForceDelete($recordId = null)\n    {\n        $this->checkSourcePermission('delete');\n\n        if ($model = $this->formFindModelObject($recordId)) {\n            $model->forceDelete();\n\n            Flash::success(__(\":name Deleted\", [\n                'name' => Lang::get($this->asExtension('FormController')->getConfig('name', 'backend::lang.model.name'))\n            ]));\n\n            if ($redirect = $this->makeRedirect('delete', $model)) {\n                return $redirect;\n            }\n        }\n    }\n\n    /**\n     * onChangeEntryType\n     */\n    public function onChangeEntryType()\n    {\n        // Relation Controller\n        if (post('_relation_field')) {\n            $widget = $this->relationGetManageFormWidget();\n            $this->onRelationManageForm();\n            $widget->setFormValues();\n            return ['#'.$widget->getId('managePopup') => $this->relationMakePartial('manage_form')];\n        }\n\n        $this->formGetWidget()->setFormValues();\n        return ['#entryPrimaryTabs' => $this->makePartial('primary_tabs')];\n    }\n\n    /**\n     * onResetStructure\n     */\n    public function onResetStructure()\n    {\n        if (!$this->isSectionStructured()) {\n            throw new ForbiddenException;\n        }\n\n        $model = $this->listGetWidget()->getModel();\n        $model->resetTreeNesting();\n        $model->resetTreeOrphans();\n\n        Flash::success(__(\"Structure has been reset\"));\n\n        return $this->listRefresh();\n    }\n\n    /**\n     * listGetConfig\n     */\n    public function listGetConfig($definition)\n    {\n        $section = $this->activeSource;\n\n        $config = $this->asExtension('ListController')->listGetConfig($definition);\n\n        // Structure config\n        if ($this->isSectionStructured()) {\n            $config->structure = [\n                'maxDepth' => $section->getMaxDepth(),\n                'showTree' => $section->hasTree(),\n            ] + ((array) $section->structure);\n        }\n\n        // Default sorting\n        if ($section->defaultSort) {\n            $config->defaultSort = $section->defaultSort;\n        }\n\n        // Each source needs its own session store\n        $config->widgetAlias = camel_case(\n            $definition . '-' . $section->handleSlug\n        );\n\n        // Model class\n        $config->modelClass = $this->modelInstance::class;\n\n        return $config;\n    }\n\n    /**\n     * relationExtendManageWidget\n     */\n    public function relationExtendManageWidget($widget, $field, $model)\n    {\n        $model = $widget->getModel();\n\n        // Entry type switching, existing records already have content_group\n        if (\n            !$model->exists &&\n            $model instanceof \\Tailor\\Classes\\BlueprintModel &&\n            ($entryType = post('EntryRecord[content_group]'))\n        ) {\n            $model->setBlueprintGroup($entryType);\n        }\n\n        // Disable adaptive fields\n        $widget->bindEvent('form.extendFields', function ($fields) {\n            foreach ($fields as $field) {\n                if ($field->span === 'adaptive') {\n                    $field->span('full')->externalToolbarAppState(null);\n                }\n            }\n        });\n    }\n\n    /**\n     * listExtendModel\n     */\n    public function listExtendModel($model)\n    {\n        $model->extendWithBlueprint($this->activeSource->uuid);\n\n        return $model;\n    }\n\n    /**\n     * listExtendQuery\n     */\n    public function listExtendQuery($query)\n    {\n        if ($this->isSectionDraftable()) {\n            $query->withSavedDrafts();\n        }\n    }\n\n    /**\n     * listExtendRecords\n     */\n    public function listExtendRecords($records)\n    {\n        $this->eagerLoadRelationsForList($this->listGetWidget(), $records);\n    }\n\n    /**\n     * listOverrideRecordUrl\n     */\n    public function listOverrideRecordUrl($record, $definition = null)\n    {\n        return \"tailor/entries/{$this->activeSource->handleSlug}/{$record->id}\";\n    }\n\n    /**\n     * listAfterReorder\n     */\n    public function listAfterReorder($record, $definition = null)\n    {\n        // Reload the new record position\n        $record = $record->newQueryWithoutScopes()->find($record->getKey());\n\n        RecordIndexer::instance()->process($record);\n    }\n\n    /**\n     * listExtendRefreshResults updates bulk actions when the list changes\n     */\n    public function listExtendRefreshResults($filter, $result)\n    {\n        return ['#listBulkActions' => $this->makePartial('list_bulk_actions')];\n    }\n\n    /**\n     * eagerLoadRelations\n     */\n    protected function eagerLoadRelationsForList($list, $models)\n    {\n        if (!$models->count()) {\n            return;\n        }\n\n        $definitions = $models->first()->getRelationDefinitions();\n\n        foreach ($definitions as $type => $relations) {\n            foreach ($relations as $name => $options) {\n                if (!$list->isColumnVisible($name)) {\n                    continue;\n                }\n\n                $models->loadMissing($name);\n            }\n        }\n    }\n\n    /**\n     * formBeforeSave\n     */\n    public function formBeforeSave($model)\n    {\n        if ($this->isSectionVersionable()) {\n            $this->asExtension('VersionController')->versionBeforeSave($model);\n        }\n    }\n\n    /**\n     * formAfterSave\n     */\n    public function formAfterSave($model)\n    {\n        RecordIndexer::instance()->process($model);\n    }\n\n    /**\n     * formFindModelObject\n     */\n    public function formFindModelObject($recordId)\n    {\n        if (!$recordId && $this->isSectionSingular()) {\n            $recordId = $this->findSingularModelObjectWithFallback()->getKey();\n        }\n\n        $model = $this->modelInstance::inSection($this->activeSource->handle);\n\n        // Remove multisite restriction\n        if ($this->formHasMultisite($model)) {\n            $model = $model->withSites();\n        }\n\n        if ($this->isVersionMode()) {\n            $model = $model->withVersions();\n        }\n\n        if ($this->isDraftMode()) {\n            $model = $model->withDrafts();\n        }\n        else {\n            $model = $model->withSavedDrafts();\n        }\n\n        // Include deleted records\n        $model = $model->withTrashed()->find($recordId);\n\n        if (!$model) {\n            throw new ApplicationException(__(\"Form record with an ID of :id could not be found.\", [\n                'class' => $this->modelInstance::class, 'id' => $recordId\n            ]));\n        }\n\n        // Mimic parent method\n        $this->formExtendModel($model);\n\n        return $model;\n    }\n\n    /**\n     * formGetRedirectUrl\n     */\n    public function formGetRedirectUrl($context = null, $model = null): string\n    {\n        if (post('close') || $this->isSectionSingular() || $context === 'delete') {\n            $url = 'tailor/entries/'.$this->activeSource->handleSlug;\n        }\n        else {\n            $url = 'tailor/entries/'.$this->activeSource->handleSlug.'/'.$model->getKey();\n        }\n\n        return $url;\n    }\n\n    /**\n     * formCreateModelObject\n     */\n    public function formCreateModelObject()\n    {\n        $model = $this->modelInstance;\n\n        $model->extendWithBlueprint($this->activeSource->uuid);\n\n        $model->setDefaultContentGroup(get('entry_type'));\n\n        // Without publish permission, enabled should be default false\n        if (!$this->hasSourcePermission('publish')) {\n            $model->is_enabled = false;\n        }\n\n        return $model;\n    }\n\n    /**\n     * formExtendModel\n     */\n    public function formExtendModel($model)\n    {\n        // Entry type switching\n        if ($entryType = post('EntryRecord[content_group]')) {\n            $model->setBlueprintGroup($entryType);\n        }\n    }\n\n    /**\n     * formExtendFields\n     */\n    public function formExtendFields($widget)\n    {\n        if (!$this->hasSourcePermission('publish')) {\n            $widget->getField('is_enabled')->hidden();\n            $widget->getField('published_at')->hidden();\n            $widget->getField('expired_at')->hidden();\n        }\n    }\n\n    /**\n     * isSectionActive\n     */\n    protected function isSectionActive(Blueprint $section): bool\n    {\n        return $this->activeSource->uuid === $section->uuid;\n    }\n\n    /**\n     * isSectionDraftable\n     */\n    protected function isSectionDraftable(): bool\n    {\n        return $this->activeSource && $this->activeSource->useDrafts();\n    }\n\n    /**\n     * isSectionVersionable\n     */\n    protected function isSectionVersionable(): bool\n    {\n        return $this->activeSource && $this->activeSource->useVersions();\n    }\n\n    /**\n     * isSectionSingular\n     */\n    protected function isSectionSingular(): bool\n    {\n        return $this->activeSource && $this->activeSource instanceof SingleBlueprint;\n    }\n\n    /**\n     * isSectionMultisite\n     */\n    protected function isSectionMultisite(): bool\n    {\n        return $this->activeSource && $this->activeSource->useMultisite();\n    }\n\n    /**\n     * isSectionStructure\n     */\n    protected function isSectionStructured(): bool\n    {\n        return $this->activeSource && $this->activeSource instanceof StructureBlueprint;\n    }\n\n    /**\n     * makeBlueprintSource\n     */\n    protected function makeBlueprintSource($activeSource = null): void\n    {\n        $this->activeSource = $activeSource\n            ? BlueprintIndexer::instance()->findSectionByHandle($activeSource)\n            : null;\n    }\n\n    /**\n     * checkSourcePermission\n     */\n    protected function checkSourcePermission($names = null, $throwException = true)\n    {\n        if ($names) {\n            $permissionNames = array_map(function($name) {\n                return $this->activeSource->getPermissionCodeName($name);\n            }, (array) $names);\n        }\n        else {\n            $permissionNames = [$this->activeSource->getPermissionCodeName()];\n        }\n\n        $hasPermission = $this->user->hasAnyAccess($permissionNames);\n\n        if (!$hasPermission && $throwException) {\n            throw new ForbiddenException;\n        }\n\n        return $hasPermission;\n    }\n\n    /**\n     * hasSourcePermission\n     */\n    protected function hasSourcePermission(...$names)\n    {\n        return $this->checkSourcePermission($names, false);\n    }\n\n    /**\n     * setNavigationContext\n     */\n    protected function setNavigationContext()\n    {\n        $item = BlueprintIndexer::instance()->findSecondaryNavigation($this->activeSource->uuid);\n        if ($item) {\n            $item->setBackendControllerContext();\n        }\n        else {\n            BackendMenu::setContext('October.Tailor', 'tailor');\n        }\n    }\n\n    /**\n     * setPageTitleMessage\n     */\n    protected function setPageTitleFromMessage(string $message, string $defaultMessage = 'Tailor')\n    {\n        $section = $this->activeSource;\n\n        if (!$section) {\n            $this->pageTitle = $defaultMessage;\n            return;\n        }\n\n        $vars = [\n            'name' => $section->name\n        ];\n\n        $this->pageTitle = $section->getMessage(\n            $message,\n            $this->customMessages[$message] ?? $defaultMessage,\n            $vars\n        );\n    }\n\n    /**\n     * findSingularModelObjectWithFallback\n     */\n    protected function findSingularModelObjectWithFallback()\n    {\n        $uuid = $this->activeSource->uuid;\n\n        if (!$this->isSectionMultisite()) {\n            return $this->modelInstance::findSingleForSectionUuid($uuid);\n        }\n\n        // Check site context first\n        $record = $this->modelInstance::inSectionUuid($uuid)->first();\n        if ($record) {\n            return $record;\n        }\n\n        // Try by removing the multisite restriction\n        $record = $this->modelInstance::inSectionUuid($uuid)->withSites()->first();\n        if ($record) {\n            return $record;\n        }\n\n        // Time to create a new record\n        return $this->modelInstance::findSingleForSectionUuid($uuid);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/controllers/Globals.php",
    "content": "<?php namespace Tailor\\Controllers;\n\nuse Lang;\nuse Flash;\nuse Backend;\nuse Redirect;\nuse BackendMenu;\nuse Tailor\\Models\\GlobalRecord;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Backend\\Classes\\WildcardController;\nuse Backend\\Classes\\FormField;\nuse ForbiddenException;\nuse NotFoundException;\n\n/**\n * Globals controller\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass Globals extends WildcardController\n{\n    /**\n     * @var array implement extensions\n     */\n    public $implement = [\n        \\Backend\\Behaviors\\FormController::class\n    ];\n\n    /**\n     * @var string formConfig is `FormController` configuration.\n     */\n    public $formConfig = 'config_form.yaml';\n\n    /**\n     * @var \\Tailor\\Classes\\Blueprint\\GlobalBlueprint activeSource\n     */\n    protected $activeSource;\n\n    /**\n     * beforeDisplay\n     */\n    public function beforeDisplay()\n    {\n        // Pop off first parameter as source handle\n        $sourceHandle = array_shift($this->params);\n\n        $this->makeBlueprintSource($sourceHandle);\n\n        if (!$this->activeSource) {\n            throw new NotFoundException;\n        }\n\n        $this->checkSourcePermission();\n\n        $this->setNavigationContext();\n    }\n\n    /**\n     * index action\n     */\n    public function index()\n    {\n        if ($this->hasFatalError()) {\n            return;\n        }\n\n        $this->setPageTitleFromMessage('titleUpdateForm', \"Update Global\");\n        $this->pageSize = Backend::sizeToPixels($this->activeSource->formSize ?? 950) ?: null;\n\n        // Uses \"create\" context to enable default values on newly introduced fields\n        $response = $this->asExtension('FormController')->update(null, FormField::CONTEXT_CREATE);\n        if ($response) {\n            return $response;\n        }\n\n        // Disable site switcher prompt\n        $this->getWidget('siteSwitcher')->setSwitchHandler(null);\n\n        $this->prepareVars();\n    }\n\n    /**\n     * prepareVars\n     */\n    protected function prepareVars()\n    {\n        $this->vars['entityName'] = $this->activeSource->name ?? '';\n        $this->vars['activeSource'] = $this->activeSource;\n    }\n\n    /**\n     * onSave\n     */\n    public function onSave()\n    {\n        return $this->asExtension('FormController')->update_onSave();\n    }\n\n    /**\n     * onCancel\n     */\n    public function onCancel()\n    {\n        $this->asExtension('FormController')->update_onCancel();\n\n        return Redirect::refresh();\n    }\n\n    /**\n     * onResetDefault AJAX handler\n     */\n    public function onResetDefault()\n    {\n        if ($model = $this->findSingularModelObjectWithFallback()) {\n            $model->delete();\n        }\n\n        Flash::success(Lang::get('backend::lang.form.reset_success'));\n\n        return Redirect::refresh();\n    }\n\n    /**\n     * formGetRedirectUrl\n     */\n    public function formGetRedirectUrl($context = null, $model = null): string\n    {\n        return 'tailor/globals/'.$this->activeSource->handleSlug;\n    }\n\n    /**\n     * formFindModelObject\n     */\n    public function formFindModelObject($recordId)\n    {\n        return $this->findSingularModelObjectWithFallback();\n    }\n\n    /**\n     * isGlobalMultisite\n     */\n    protected function isGlobalMultisite(): bool\n    {\n        return $this->activeSource && $this->activeSource->useMultisite();\n    }\n\n    /**\n     * makeBlueprintSource\n     */\n    protected function makeBlueprintSource($activeSource = null)\n    {\n        if (!$activeSource) {\n            $this->activeSource = BlueprintIndexer::instance()->listGlobals()[0] ?? null;\n        }\n        else {\n            $this->activeSource = $activeSource\n                ? BlueprintIndexer::instance()->findGlobalByHandle($activeSource)\n                : null;\n        }\n    }\n\n    /**\n     * checkSourcePermission\n     */\n    protected function checkSourcePermission($permissionName = null, $throwException = true)\n    {\n        $hasPermission = $this->user->hasAnyAccess([$this->activeSource->getPermissionCodeName($permissionName)]);\n\n        if ($throwException && !$hasPermission) {\n            throw new ForbiddenException;\n        }\n\n        return $hasPermission;\n    }\n\n    /**\n     * hasSourcePermission\n     */\n    protected function hasSourcePermission($permissionName = null)\n    {\n        return $this->checkSourcePermission($permissionName, false);\n    }\n\n    /**\n     * setNavigationContext\n     */\n    protected function setNavigationContext()\n    {\n        $item = BlueprintIndexer::instance()->findSecondaryNavigation($this->activeSource->uuid);\n        if ($item) {\n            $item->setBackendControllerContext();\n        }\n        else {\n            BackendMenu::setContext('October.Tailor', 'tailor');\n        }\n    }\n\n    /**\n     * setPageTitleMessage\n     */\n    protected function setPageTitleFromMessage(string $message, string $defaultMessage = 'Tailor')\n    {\n        $global = $this->activeSource;\n\n        if (!$global) {\n            $this->pageTitle = $defaultMessage;\n            return;\n        }\n\n        $vars = [\n            'name' => $global->name\n        ];\n\n        $this->pageTitle = $global->getMessage(\n            $message,\n            $this->customMessages[$message] ?? $defaultMessage,\n            $vars\n        );\n    }\n\n    /**\n     * findSingularModelObjectWithFallback\n     */\n    protected function findSingularModelObjectWithFallback()\n    {\n        $uuid = $this->activeSource->uuid;\n\n        if (!$this->isGlobalMultisite()) {\n            return GlobalRecord::findForGlobalUuid($uuid);\n        }\n\n        // Check site context first\n        $record = GlobalRecord::inGlobalUuid($uuid)->first();\n        if ($record) {\n            return $record;\n        }\n\n        // Try by removing the multisite restriction\n        $record = GlobalRecord::inGlobalUuid($uuid)->withSyncSites()->first();\n        if ($record) {\n            return $record;\n        }\n\n        // Time to create a new record\n        return GlobalRecord::findForGlobalUuid($uuid);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/controllers/bulkactions/config_import_export.yaml",
    "content": "# ===================================\n#  Import/Export Behavior Config\n# ===================================\n\nimport:\n    # Page title\n    title: Import Entries\n\n    # Columns supplied dynamically\n    list: []\n\n    # Fields supplied dynamically\n    form: []\n\n    # Import Model class\n    modelClass: Tailor\\Models\\EntryRecordImport\n\nexport:\n    # Page title\n    title: Export Entries\n\n    # Columns supplied dynamically\n    list: []\n\n    # Export Model class\n    modelClass: Tailor\\Models\\EntryRecordExport\n"
  },
  {
    "path": "modules/tailor/controllers/bulkactions/export.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('tailor/entries/'.$this->activeSource->handleSlug) ?>\"><?= $this->activeSource->name ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= Form::open(['class' => 'layout']) ?>\n\n    <div class=\"layout-row\">\n        <?= $this->exportRender() ?>\n    </div>\n\n    <div class=\"form-buttons\">\n        <div class=\"loading-indicator-container\">\n            <button\n                type=\"submit\"\n                data-control=\"popup\"\n                data-handler=\"onExportLoadForm\"\n                data-keyboard=\"false\"\n                class=\"btn btn-primary\">\n                <?= __(\"Export Entries\") ?>\n            </button>\n        </div>\n    </div>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/tailor/controllers/bulkactions/import.php",
    "content": "<?php Block::put('breadcrumb') ?>\n    <ol class=\"breadcrumb\">\n        <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('tailor/entries/'.$this->activeSource->handleSlug) ?>\"><?= $this->activeSource->name ?></a></li>\n        <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n    </ol>\n<?php Block::endPut() ?>\n\n<?= Form::open(['class' => 'layout']) ?>\n\n    <div class=\"layout-row\">\n        <?= $this->importRender() ?>\n    </div>\n\n    <div class=\"form-buttons\">\n        <button\n            type=\"submit\"\n            data-control=\"popup\"\n            data-handler=\"onImportLoadForm\"\n            data-keyboard=\"false\"\n            class=\"btn btn-primary\">\n            <?= __(\"Import Entries\") ?>\n        </button>\n    </div>\n\n<?= Form::close() ?>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/_edit.php",
    "content": "<?php if (!$this->fatalError): ?>\n    <?= Form::open(['id' => 'tailor-form', 'class' => 'position-relative h-100', 'data-change-monitor' => true]) ?>\n        <div class=\"position-relative h-100\" data-control=\"vue-app\">\n            <div class=\"padded-container d-flex flex-column h-100 form-document-layout\">\n                <div class=\"document-header\">\n                    <div class=\"d-flex\">\n                        <div class=\"flex-grow-1\">\n                            <?= $this->formRender([\n                                'section' => 'outside',\n                                'preview' => $initialState['isDeleted']\n                            ]) ?>\n                        </div>\n                        <div>\n                            <?= $this->makePartial('edit_header_controls', ['model' => $formModel]) ?>\n                        </div>\n                    </div>\n                </div>\n\n                <div data-control=\"vue-entry-document\">\n                    <div class=\"padded-container-inset\" data-vue-template>\n                        <template>\n                            <backend-document\n                                :processing=\"state.processing\"\n                                :toolbar-command-event-bus=\"state.eventBus\">\n                                <template v-slot:toolbar>\n                                    <backend-document-toolbar\n                                        :elements=\"state.toolbarElements\"\n                                        @command=\"onCommand\"\n                                        :disabled=\"state.toolbarDisabled\"\n                                    ></backend-document-toolbar>\n                                </template>\n                                <template v-slot:drawer>\n                                    <tailor-component-draftnotes\n                                        v-if=\"state.showDraftNotesUI\"\n                                        v-show=\"state.showDraftNotes\"\n                                        ref=\"draftNotes\"\n                                        :state=\"state\">\n                                    </tailor-component-draftnotes>\n                                </template>\n                            </backend-document>\n                        </template>\n                    </div>\n\n                    <div style=\"display:none\">\n                        <?php if (!$initialState['isDeleted']): ?>\n                            <?= $this->formRenderSecondaryTabs() ?>\n                        <?php endif ?>\n                    </div>\n                </div>\n\n                <div class=\"flex-grow-1\" id=\"entryPrimaryTabs\">\n                    <?= $this->makePartial('primary_tabs') ?>\n                </div>\n            </div>\n\n            <script type=\"text/template\" data-vue-state=\"initial\"><?= json_encode($initialState) ?></script>\n            <script type=\"text/template\" data-vue-lang><?= json_encode($langState) ?></script>\n        </div>\n    <?= Form::close() ?>\n<?php else: ?>\n    <div class=\"padded-container\">\n        <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n\n        <p><?= Ui::button()->label('Return to Entries')->linkTo('tailor/entries') ?></p>\n    </div>\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/_edit_header_controls.php",
    "content": "<div data-control=\"vue-entry-header-controls\">\n    <div data-vue-template>\n        <div class=\"record-management-controls\">\n            <?php if ($initialState['showEntryTypeSelector']): ?>\n                <backend-dropdown-menu-button\n                    :menuitems=\"state.entryTypeOptions\"\n                    preferable-menu-position=\"bottom-right\"\n                    css-class=\"record-management-button has-menu entry-type-selector\"\n                    :current-label-command=\"state.initial.contentGroup\"\n                    :disabled=\"state.toolbarDisabled\"\n                    @command=\"onSetEntryType\"\n                ></backend-dropdown-menu-button>\n            <?php endif ?>\n\n            <tailor-component-publishbutton\n                @click=\"onPublishingControlsBtnClick\"\n                :state=\"state\"\n            ></tailor-component-publishbutton>\n        </div>\n\n        <tailor-component-publishingcontrols\n            :lang=\"state.lang\"\n            :entry-state=\"state\"\n            model-name=\"<?= class_basename($formModel) ?>\"\n            ref=\"publishingControls\"\n            @statechanged=\"onPublishingStateChanged\"\n            @publishdraftclick=\"onPublishDraftClick\"\n            @restorerecordclick=\"onRestoreRecordClick\"\n        ></tailor-component-publishingcontrols>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/_edit_popup.php",
    "content": "<?php\n    $formModel = $relationManageFormWidget->getModel();\n    if (!$relationManageId) {\n        $formModel->setDefaultContentGroup($formModel->exists ? post('EntryRecord[content_group]') : null);\n    }\n    $initialState = $this->makeInitialState($formModel);\n    $langState = $this->makeLangState();\n?>\n<div\n    id=\"<?= $relationManageFormWidget->getId('managePopup') ?>\"\n    data-popup-size=\"<?= $relationPopupSize ?? 950 ?>\"\n    class=\"tailor-entry-edit-popup\"\n    data-control=\"vue-app\">\n    <?php if ($relationManageId): ?>\n\n        <?= Form::ajax('onRelationManageUpdate', [\n            'sessionKey' => $newSessionKey,\n            'data-popup-load-indicator' => true,\n            'data-request-success' => \"oc.relationBehavior.changed('\" . e($relationField) . \"', 'updated')\",\n        ]) ?>\n            <!-- Passable fields -->\n            <input type=\"hidden\" name=\"_relation_field\" value=\"<?= $relationField ?>\" />\n            <input type=\"hidden\" name=\"_relation_extra_config\" value=\"<?= e(json_encode($relationExtraConfig)) ?>\" />\n            <input type=\"hidden\" name=\"_form_session_key\" value=\"<?= $formSessionKey ?>\" />\n            <input type=\"hidden\" name=\"EntryRecord[content_group]\" value=\"<?= e($formModel->content_group) ?>\"/>\n\n            <div class=\"modal-header\">\n                <div class=\"flex-grow-1\">\n                    <h4 class=\"modal-title\"><?= e($relationManageTitle) ?></h4>\n                </div>\n                <div class=\"me-3\">\n                    <?= $this->makePartial('edit_header_controls', ['initialState' => $initialState, 'formModel' => $formModel]) ?>\n                </div>\n                <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n            </div>\n\n            <div class=\"modal-body\">\n                <?= $relationManageFormWidget->render(['preview' => $relationReadOnly]) ?>\n            </div>\n\n            <div class=\"modal-footer\">\n                <?php if ($relationReadOnly): ?>\n                    <button\n                        type=\"button\"\n                        class=\"btn btn-secondary\"\n                        data-dismiss=\"popup\">\n                        <?= e($this->relationGetMessage('buttonCloseForm')) ?>\n                    </button>\n                <?php else: ?>\n                    <button\n                        type=\"submit\"\n                        class=\"btn btn-primary\">\n                        <?= e($this->relationGetMessage('buttonUpdateForm')) ?>\n                    </button>\n                    <span class=\"btn-text\">\n                        <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                        <a\n                            href=\"javascript:;\"\n                            class=\"btn btn-link p-0\"\n                            data-dismiss=\"popup\">\n                            <?= e($this->relationGetMessage('buttonCancelForm')) ?>\n                        </a>\n                    </span>\n                <?php endif ?>\n            </div>\n        <?= Form::close() ?>\n\n    <?php else: ?>\n\n        <?= Form::ajax('onRelationManageCreate', [\n            'sessionKey' => $newSessionKey,\n            'data-popup-load-indicator' => true,\n            'data-request-success' => \"oc.relationBehavior.changed('\" . e($relationField) . \"', 'created')\",\n        ]) ?>\n            <!-- Passable fields -->\n            <input type=\"hidden\" name=\"_relation_field\" value=\"<?= $relationField ?>\" />\n            <input type=\"hidden\" name=\"_relation_extra_config\" value=\"<?= e(json_encode($relationExtraConfig)) ?>\" />\n            <input type=\"hidden\" name=\"_form_session_key\" value=\"<?= $formSessionKey ?>\" />\n            <input type=\"hidden\" name=\"EntryRecord[content_group]\" value=\"<?= e($formModel->content_group) ?>\"/>\n\n            <div class=\"modal-header\">\n                <div class=\"flex-grow-1\">\n                    <h4 class=\"modal-title\"><?= e($relationManageTitle) ?></h4>\n                </div>\n                <div class=\"me-3\">\n                    <?= $this->makePartial('edit_header_controls', ['initialState' => $initialState, 'formModel' => $formModel]) ?>\n                </div>\n                <button type=\"button\" class=\"btn-close\" data-dismiss=\"popup\"></button>\n            </div>\n\n            <div class=\"modal-body\">\n                <?= $relationManageFormWidget->render() ?>\n            </div>\n\n            <div class=\"modal-footer\">\n                <button\n                    type=\"submit\"\n                    class=\"btn btn-primary\">\n                    <?= e($this->relationGetMessage('buttonCreateForm')) ?>\n                </button>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <a\n                        href=\"javascript:;\"\n                        class=\"btn btn-link p-0\"\n                        data-dismiss=\"popup\">\n                        <?= e($this->relationGetMessage('buttonCancelForm')) ?>\n                    </a>\n                </span>\n            </div>\n        <?= Form::close() ?>\n\n    <?php endif ?>\n\n    <script type=\"text/template\" data-vue-state=\"initial\"><?= json_encode($initialState) ?></script>\n    <script type=\"text/template\" data-vue-lang><?= json_encode($langState) ?></script>\n</div>\n\n<script>\n    oc.popup.bindToPopups('#<?= $relationManageFormWidget->getId(\"managePopup\") ?>', {\n        _relation_field: '<?= $relationField ?>'\n    });\n</script>\n\n<style>\n    .tailor-entry-edit-popup .control-tabs.secondary-tabs {\n        display: none;\n    }\n</style>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/_form_draft_notes.php",
    "content": "<div class=\"form-horizontal\">\n    <div class=\"form-group\">\n        <label class=\"control-label col-md-2\">Draft Name</label>\n        <div class=\"col-md-10\">\n            <!-- Text -->\n            <input\n                type=\"text\"\n                name=\"Draft[name]\"\n                value=\"<?= $formModel->getDraftName() ?>\"\n                placeholder=\"Draft Name\"\n                class=\"form-control\"\n                autocomplete=\"off\"\n                maxlength=\"255\"\n            />\n        </div>\n    </div>\n\n    <div class=\"form-group\">\n        <label class=\"control-label col-md-2\">Draft Notes</label>\n        <div class=\"col-md-10\">\n            <textarea\n                name=\"Draft[notes]\"\n                class=\"form-control field-textarea size-tiny\"\n                placeholder=\"Notes about this draft\"\n                ><?= e($formModel->getDraftNotes()) ?></textarea>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/_form_history_links.php",
    "content": "\n<?php\n    $drafts = $primaryModel->getDraftRecords();\n    $versions = $primaryModel->getVersionRecords();\n?>\n<?php if (count($drafts) || count($versions)): ?>\n    <?= Ui::callout(function() use ($drafts, $versions, $activeSource, $primaryModel) { ?>\n        <p>\n            <a href=\"<?= Backend::url('tailor/entries/'.$activeSource->handle.'/'.$primaryModel->getKey()) ?>\">\n                Current Record\n            </a>\n        </p>\n\n        <?php if (count($drafts)): ?>\n            <h6 class=\"m-t-0\">Drafts</h6>\n            <ul>\n                <?php foreach ($drafts as $draft): ?>\n                    <li>\n                        <div>\n                            <a href=\"?draft=<?= $draft->getDraftId() ?>\">\n                                <?= e($draft->getDraftName()) ?> - by Admin Person\n                            </a>\n                            <span><?= $draft->updated_at ?></span>\n                        </div>\n                    </li>\n                <?php endforeach ?>\n            </ul>\n        <?php endif ?>\n\n        <?php if (count($versions)): ?>\n            <h6 class=\"m-t-0\">Versions</h6>\n            <ul>\n                <?php foreach ($versions as $version): ?>\n                    <li>\n                        <div>\n                            <a href=\"?version=<?= $version->getVersionId() ?>\">\n                                Version <?= e($version->build) ?> - by Admin Person\n                            </a>\n                            <span><?= $version->updated_at ?></span>\n                        </div>\n                    </li>\n                <?php endforeach ?>\n            </ul>\n        <?php endif ?>\n    <?php }) ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/_list_bulk_actions.php",
    "content": "<?php\n    $statusCode = $this->listGetFilterWidget()->getScope('status_code')->value;\n?>\n<?php if ($statusCode === 'deleted'): ?>\n    <?php if ($this->hasSourcePermission('delete')): ?>\n        <?= Ui::ajaxButton(\n            label: __(\"Restore\"),\n            handler: 'onBulkAction',\n            icon: 'icon-refresh',\n            secondary: true,\n            dataRequestData: \"action: 'restore'\",\n            dataRequestConfirm: __(\"Are you sure?\"),\n            dataListCheckedTrigger: true,\n            dataListCheckedRequest: true,\n            dataStripeLoadIndicator: true\n        ) ?>\n\n        <?= Ui::ajaxButton(\n            label: __(\"Delete Forever\"),\n            handler: 'onBulkAction',\n            icon: 'icon-delete',\n            secondary: true,\n            dataRequestData: \"action: 'forceDelete'\",\n            dataRequestConfirm: __(\"Are you sure?\"),\n            dataListCheckedTrigger: true,\n            dataListCheckedRequest: true,\n            dataStripeLoadIndicator: true\n        ) ?>\n    <?php endif ?>\n<?php else: ?>\n    <?php if ($this->hasSourcePermission('publish')): ?>\n        <?php Ui::dropdownButton(\n            label: __(\"Change Status\"),\n            icon: 'oc-icon-angle-down',\n            secondary: true,\n            dataListCheckedTrigger: true\n        )->slot() ?>\n\n            <?= Ui::dropdownItem(\n                label: __(\"Enable\"),\n                handler: 'onBulkAction',\n                icon: 'icon-check',\n                dataRequestData: \"action: 'enable'\",\n                dataRequestConfirm: __(\"Are you sure?\"),\n                dataListCheckedRequest: true\n            ) ?>\n\n            <?= Ui::dropdownItem(\n                label: __(\"Disable\"),\n                handler: 'onBulkAction',\n                icon: 'icon-ban',\n                dataRequestData: \"action: 'disable'\",\n                dataRequestConfirm: __(\"Are you sure?\"),\n                dataListCheckedRequest: true\n            ) ?>\n\n        <?php Ui::end() ?>\n\n        <?= Ui::ajaxButton(\n            label: __(\"Duplicate\"),\n            handler: 'onBulkAction',\n            icon: 'icon-copy',\n            secondary: true,\n            dataRequestData: \"action: 'duplicate'\",\n            dataRequestConfirm: __(\"Are you sure?\"),\n            dataListCheckedTrigger: true,\n            dataListCheckedRequest: true,\n            dataStripeLoadIndicator: true\n        ) ?>\n    <?php endif ?>\n    <?php if ($this->hasSourcePermission('delete')): ?>\n        <?= Ui::ajaxButton(\n            label: __(\"Delete\"),\n            handler: 'onBulkAction',\n            icon: 'icon-delete',\n            secondary: true,\n            dataRequestData: \"action: 'delete'\",\n            dataRequestConfirm: __(\"Are you sure?\"),\n            dataListCheckedTrigger: true,\n            dataListCheckedRequest: true,\n            dataStripeLoadIndicator: true\n        ) ?>\n    <?php endif ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/_list_toolbar.php",
    "content": "<?php\n    $section = $this->activeSource;\n    $showExport = $section->showExport ?? true;\n    $showImport = ($section->showImport ?? true) && $this->hasSourcePermission('create');\n    $showResetStructure = $section instanceof \\Tailor\\Classes\\Blueprint\\StructureBlueprint;\n    $hasDropdown = $showImport || $showExport || $showResetStructure;\n?>\n<div data-control=\"toolbar\" data-list-linkage=\"<?= $this->listGetId() ?>\">\n\n    <?php if ($this->hasSourcePermission('create')): ?>\n        <?= Ui::button(\n            label: $section->getMessage('buttonCreate', \"New :name\", ['name' => e(__($section->name))]),\n            href: Backend::url('tailor/entries/'.$section->handleSlug.'/create'),\n            icon: 'icon-plus',\n            primary: true,\n            labelHtml: true\n        ) ?>\n\n        <div class=\"toolbar-divider\"></div>\n    <?php endif ?>\n\n    <?php if ($this->hasSourcePermission('publish', 'delete')): ?>\n        <div id=\"listBulkActions\" class=\"btn-container\">\n            <?= $this->makePartial('list_bulk_actions') ?>\n        </div>\n    <?php endif ?>\n\n    <?php if ($hasDropdown): ?>\n        <?php Ui::dropdownButton(\n            title: __(\"More Actions\"),\n            icon: 'icon-ellipsis-v',\n            secondary: true,\n            caret: false,\n            class: 'btn-circle'\n        )->slot() ?>\n\n            <?php if ($showImport): ?>\n                <?= Ui::dropdownItem(\n                    label: __(\"Import\"),\n                    href: Backend::url('tailor/bulkactions/'.$section->handleSlug.'/import'),\n                    icon: 'icon-upload'\n                ) ?>\n            <?php endif ?>\n            <?php if ($showExport): ?>\n                <?= Ui::dropdownItem(\n                    label: __(\"Export\"),\n                    href: Backend::url('tailor/bulkactions/'.$section->handleSlug.'/export'),\n                    icon: 'icon-download'\n                ) ?>\n            <?php endif ?>\n            <?php if ($showResetStructure): ?>\n                <?= Ui::dropdownItem(\n                    label: __(\"Reset Structure\"),\n                    handler: 'onResetStructure',\n                    icon: 'icon-set-parent',\n                    dataRequestConfirm: __(\"Are you sure?\")\n                ) ?>\n            <?php endif ?>\n\n        <?php Ui::end() ?>\n    <?php endif ?>\n</div>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/_primary_tabs.php",
    "content": "<div class=\"layout primary-tabs-container\">\n    <?= $this->formRender([\n        'section' => 'primary',\n        'preview' => $initialState['isDeleted']\n    ]) ?>\n    <input type=\"hidden\" name=\"EntryRecord[content_group]\" value=\"<?= e($formModel->content_group) ?>\"/>\n</div>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/_relation_manage_form.php",
    "content": "<?php if ($relationManageFormWidget->getModel() instanceof \\Tailor\\Models\\EntryRecord): ?>\n    <?= $this->makePartial('edit_popup', $_context) ?>\n<?php else: ?>\n    <?= $this->asExtension('RelationController')->makePartial('manage_form', $_context) ?>\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\n# Record name\nname: Entry\n\n# Fields supplied dynamically\nform: []\n\n# Model Class name\nmodelClass: Tailor\\Models\\EntryRecord\n\n# Default redirect location\ndefaultRedirect: tailor/entries\n\n# Create page\ncreate:\n    title: Create Entry\n\n# Update page\nupdate:\n    title: Edit Entry\n\n# Preview page\npreview:\n    title: Preview Entry\n"
  },
  {
    "path": "modules/tailor/controllers/entries/config_list.yaml",
    "content": "# ===================================\n#  List Behavior Config\n# ===================================\n\n# Columns supplied dynamically\nlist: []\n\n# Scopes supplied dynamically\nfilter: []\n\n# Model Class name\nmodelClass: Tailor\\Models\\EntryRecord\n\n# List Title\ntitle: Manage Entries\n\n# Link URL for each record\nrecordUrl: tailor/entries/:source_handle/:id\n\n# Message to display if the list is empty\nnoRecordsMessage: backend::lang.list.no_records\n\n# Records to display per page\nrecordsPerPage: 50\n\n# Display page numbers with pagination, disable to improve performance\nshowPageNumbers: true\n\n# Displays the list column set up button\nshowSetup: true\n\n# Expands the last column\nexpandLastColumn: true\n\n# Displays the sorting link on each column\nshowSorting: true\n\n# Default sorting column\n# defaultSort:\n#     column: created_at\n#     direction: desc\n\n# Display checkboxes next to each record\nshowCheckboxes: true\n\n# Toolbar widget configuration\ntoolbar:\n    # Partial for toolbar buttons\n    buttons: list_toolbar\n\n    # Search widget configuration\n    search:\n        prompt: backend::lang.list.search_prompt\n"
  },
  {
    "path": "modules/tailor/controllers/entries/create.php",
    "content": "<?= $this->makePartial('edit') ?>"
  },
  {
    "path": "modules/tailor/controllers/entries/index.php",
    "content": "<?php if (!$this->fatalError): ?>\n\n    <?= $this->listRender() ?>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/update.php",
    "content": "<?= $this->makePartial('edit') ?>\n"
  },
  {
    "path": "modules/tailor/controllers/entries/version.php",
    "content": "<?php if (!$this->fatalError): ?>\n    <?php Block::put('breadcrumb') ?>\n        <ol class=\"breadcrumb\">\n            <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('tailor/entries/'.$activeSource->handleSlug) ?>\"><?= $activeSource->name ?></a></li>\n            <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n        </ol>\n    <?php Block::endPut() ?>\n\n    <?php Block::put('form-contents') ?>\n\n        <?= $this->makePartial('form_history_links') ?>\n\n        <div class=\"layout-row min-size\">\n            <?= $this->formRenderOutsideFields() ?>\n        </div>\n\n        <div class=\"layout-row\" id=\"entryPrimaryTabs\">\n            <?= $this->formRenderPrimaryTabs() ?>\n        </div>\n\n        <div class=\"form-buttons\">\n            <div data-control=\"loader-container\" class=\"control-loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Restore this Version\"),\n                    handler: 'onRestoreVersion',\n                    primary: true,\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $entityName])\n                ) ?>\n            </div>\n        </div>\n\n    <?php Block::endPut() ?>\n\n    <?php Block::put('form-sidebar') ?>\n        <div class=\"hide-tabs\"><?= $this->formRenderSecondaryTabs() ?></div>\n    <?php Block::endPut() ?>\n\n    <?php Block::put('body') ?>\n        <?= Form::open(['class'=>'layout stretch']) ?>\n            <?= $this->makeLayout('form-with-sidebar') ?>\n        <?= Form::close() ?>\n    <?php Block::endPut() ?>\n\n<?php else: ?>\n\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Entries\"),\n            href: Backend::url('tailor/entries'),\n            secondary: true\n        ) ?>\n    </p>\n\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/controllers/globals/config_form.yaml",
    "content": "# ===================================\n#  Form Behavior Config\n# ===================================\n\n# Record name\nname: Record\n\n# Fields supplied dynamically\nform: []\n\n# Model Class name\nmodelClass: Tailor\\Models\\GlobalRecord\n\n# Default redirect location\ndefaultRedirect: tailor/globals\n\n# Create page\ncreate:\n    title: Create Record\n\n# Update page\nupdate:\n    title: Edit Record\n\n# Preview page\npreview:\n    title: Preview Record\n"
  },
  {
    "path": "modules/tailor/controllers/globals/index.php",
    "content": "<?php if (!$this->fatalError): ?>\n    <?php Block::put('breadcrumb') ?>\n        <ol class=\"breadcrumb\">\n            <li class=\"breadcrumb-item\"><a href=\"<?= Backend::url('tailor/globals/'.$activeSource->handleSlug) ?>\"><?= $activeSource->name ?></a></li>\n            <li class=\"breadcrumb-item active\" aria-current=\"page\"><?= e(__($this->pageTitle)) ?></li>\n        </ol>\n    <?php Block::endPut() ?>\n\n    <?= Form::open(['class' => 'layout design-settings']) ?>\n        <div class=\"layout-row\">\n            <?= $this->formRender() ?>\n        </div>\n\n        <div class=\"form-buttons\">\n            <div data-control=\"loader-container\">\n                <?= Ui::ajaxButton(\n                    label: __(\"Save Changes\"),\n                    handler: 'onSave',\n                    primary: true,\n                    hotkey: ['ctrl+s', 'cmd+s'],\n                    dataRequestData: \"redirect: false\",\n                    dataRequestMessage: __(\"Saving :name...\", ['name' => $entityName])\n                ) ?>\n                <span class=\"btn-text\">\n                    <span class=\"button-separator\"><?= __(\"or\") ?></span>\n                    <?= Ui::ajaxButton(\n                        label: __(\"Cancel\"),\n                        handler: 'onCancel',\n                        class: 'btn-link p-0',\n                        dataRequestMessage: __(\"Loading...\")\n                    ) ?>\n                </span>\n                <span class=\"pull-right btn-text\">\n                    <?= Ui::ajaxButton(\n                        label: __(\"Reset to Default\"),\n                        handler: 'onResetDefault',\n                        class: 'btn-link p-0',\n                        dataRequestData: \"redirect: false\",\n                        dataRequestConfirm: __(\"Are you sure?\"),\n                        dataRequestMessage: __(\"Resetting...\")\n                    ) ?>\n                </span>\n            </div>\n        </div>\n    <?= Form::close() ?>\n\n<?php else: ?>\n    <p class=\"flash-message static error\"><?= e(__($this->fatalError)) ?></p>\n    <p>\n        <?= Ui::button(\n            label: __(\"Return to Globals\"),\n            href: Backend::url('tailor/globals'),\n            secondary: true\n        ) ?>\n    </p>\n<?php endif ?>\n"
  },
  {
    "path": "modules/tailor/database/migrations/2021_05_01_000001_Db_Tailor_Globals.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    /**\n     * up migration\n     */\n    public function up()\n    {\n        Schema::create('tailor_globals', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('site_id')->nullable()->index();\n            $table->integer('site_root_id')->nullable()->index();\n            $table->string('blueprint_uuid')->nullable()->index();\n            $table->longText('content')->nullable();\n            $table->timestamp('deleted_at')->nullable();\n            $table->timestamps();\n        });\n\n        Schema::create('tailor_global_joins', function (Blueprint $table) {\n            $table->integer('parent_id')->nullable();\n            $table->integer('relation_id')->nullable();\n            $table->string('relation_type')->nullable();\n            $table->string('field_name')->nullable()->index();\n            $table->integer('site_id')->nullable()->index();\n\n            $table->index(['relation_id', 'relation_type'], $table->getTable().'_idx');\n        });\n\n        Schema::create('tailor_global_repeaters', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('host_id')->nullable();\n            $table->string('host_field')->nullable();\n            $table->integer('site_id')->nullable()->index();\n            $table->string('content_group')->nullable();\n            $table->mediumText('content_value')->nullable();\n            $table->text('content_spawn_path')->nullable();\n            $table->integer('parent_id')->nullable();\n            $table->integer('sort_order')->nullable();\n            $table->timestamps();\n            $table->index(['host_id', 'host_field'], $table->getTable().'_idx');\n        });\n    }\n\n    /**\n     * down migration\n     */\n    public function down()\n    {\n        Schema::dropIfExists('tailor_globals');\n        Schema::dropIfExists('tailor_global_joins');\n        Schema::dropIfExists('tailor_global_repeaters');\n    }\n};\n"
  },
  {
    "path": "modules/tailor/database/migrations/2021_05_01_000002_Db_Tailor_Content.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('tailor_content_schema', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('table_name')->nullable()->index();\n            $table->mediumText('meta')->nullable();\n            $table->mediumText('fields')->nullable();\n            $table->timestamp('deleted_at')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    public function down()\n    {\n        // Drop all tailor content before losing the schema\n        Db::table('tailor_content_schema')->orderBy('id')->chunkById(100, function($tables) {\n            foreach ($tables as $table) {\n                $tablePrefix = substr($table->table_name, 0, -1);\n                Schema::dropIfExists($tablePrefix.'c');\n                Schema::dropIfExists($tablePrefix.'j');\n                Schema::dropIfExists($tablePrefix.'r');\n            }\n        });\n\n        Schema::dropIfExists('tailor_content_schema');\n    }\n};\n"
  },
  {
    "path": "modules/tailor/database/migrations/2021_06_01_000003_Db_Tailor_PreviewToken.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    /**\n     * up migration\n     */\n    public function up()\n    {\n        Schema::create('tailor_preview_tokens', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('site_id')->nullable()->index();\n            $table->mediumText('route')->nullable();\n            $table->string('token')->nullable()->index();\n            $table->integer('count_use')->default(0);\n            $table->integer('count_limit')->default(0);\n            $table->integer('created_user_id')->unsigned()->nullable();\n            $table->timestamp('expired_at')->nullable();\n            $table->timestamp('deleted_at')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * down migration\n     */\n    public function down()\n    {\n        Schema::dropIfExists('tailor_preview_tokens');\n    }\n};\n"
  },
  {
    "path": "modules/tailor/database/migrations/2023_10_01_000004_Db_Tailor_Content_Joins.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        Schema::create('tailor_content_joins', function (Blueprint $table) {\n            $table->integer('parent_id')->nullable();\n            $table->string('parent_type')->nullable();\n            $table->integer('relation_id')->nullable();\n            $table->string('relation_type')->nullable();\n            $table->string('field_name')->nullable()->index();\n            $table->integer('site_id')->nullable()->index();\n\n            $table->index(['parent_id', 'parent_type', 'field_name'], $table->getTable().'_pidx');\n            $table->index(['relation_id', 'relation_type', 'field_name'], $table->getTable().'_ridx');\n        });\n    }\n\n    public function down()\n    {\n        Schema::dropIfExists('tailor_content_joins');\n    }\n};\n"
  },
  {
    "path": "modules/tailor/database/migrations/2024_10_01_000005_Db_Add_Parent_To_Repeaters.php",
    "content": "<?php\n\nuse October\\Rain\\Database\\Schema\\Blueprint;\nuse October\\Rain\\Database\\Updates\\Migration;\n\nreturn new class extends Migration\n{\n    public function up()\n    {\n        if (Schema::hasColumn('tailor_global_repeaters', 'parent_id')) {\n            return;\n        }\n\n        Schema::table('tailor_global_repeaters', function (Blueprint $table) {\n            $table->integer('parent_id')->nullable();\n        });\n    }\n\n    public function down()\n    {\n    }\n};\n"
  },
  {
    "path": "modules/tailor/lang/ar.json",
    "content": "{\n  \"Manage Entries\": \"إدارة الإدخالات\",\n  \"Create :name Entry\": \"إ:name إدخال الاسم\",\n  \"New :name\": \"جديد: إدخال الاسم\",\n  \"Import Entries\": \"إدخالات الاستيراد\",\n  \"Export Entries\": \"إدخالات التصدير\",\n  \"First Draft\": \"المسودة الأولى\",\n  \"Draft Saved\": \"تم حفظ المسودة\",\n  \"Draft Applied\": \"تم تطبيق المسودة\",\n  \"Draft Created\": \"تم إنشاء المسودة\",\n  \"Draft Discarded\": \"تم تجاهل المسودة\",\n  \"Create Entry\": \"إنشاء الدخول\",\n  \"Publish Entry\": \"نشر الإدخال\",\n  \"Delete Entry\": \"حذف المدخلات\",\n  \"Entries have been disabled\": \"تم تعطيل الإدخالات\",\n  \"Entries have been enabled\": \"تم تمكين الإدخالات\",\n  \"Entries have been deleted\": \"تم حذف الإدخالات\",\n  \"Entries have been restored\": \"تمت استعادة الإدخالات\",\n  \"Entries have been duplicated\": \"تم تكرار الإدخالات\",\n  \"Manage Blueprints\": \"إدارة المخططات\",\n  \"All Entries\": \"كل المقالات\",\n  \"Published Date\": \"تاريخ النشر\",\n  \"Published\": \"نشرت\",\n  \"Expired\": \"منتهي الصلاحية\",\n  \"Scheduled\": \"المقرر\",\n  \"Hidden\": \"مختفي\",\n  \"Draft\": \"مسودة\",\n  \"Deleted\": \"تم الحذف\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"ممكن\",\n  \"Schedule publish date\": \"جدولة تاريخ النشر\",\n  \"Set expiry date\": \"حدد تاريخ انتهاء الصلاحية\",\n  \"View full slug\": \"مشاهدة ملف slug\",\n  \"Apply this Draft\": \"قم بتطبيق هذه المسودة\",\n  \"Remove\": \"إزالة\",\n  \"Drafts are not visible on the website until they are applied.\": \"المسودات غير مرئية على الموقع حتى يتم تطبيقها.\",\n  \"Save Draft\": \"حفظ المسودة\",\n  \"Do you really want to discard the draft?\": \"هل تريد حقًا تجاهل المسودة؟\",\n  \"Discard Draft\": \"مشروع نبذ\",\n  \"Save & Apply Draft\": \"حفظ وتطبيق المسودة\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"هل تريد حقًا حذف السجل؟ سيتم أيضًا حذف جميع المسودات إن وجدت.\",\n  \"Create New Draft\": \"إنشاء مسودة جديدة\",\n  \"Select Draft to Edit\": \"حدد مسودة لتحريرها\",\n  \"Edit the Primary Record\": \"قم بتحرير السجل الأساسي\",\n  \"Unnamed Draft\": \"مشروع بدون اسم\",\n  \"Notes\": \"ملحوظات\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"يحتوي المستند على تغييرات غير محفوظة. هل تريد تجاهلها والمضي قدمًا في إنشاء مسودة جديدة؟\",\n  \"Preview\": \"معاينة\",\n  \"Unsaved\": \"لم يتم الحفظ\",\n  \"put the draft notes here\": \"ضع مسودة الملاحظات هنا\",\n  \"Top Level\": \"افضل مستوى\",\n  \"Draft name: draft notes\": \"اسم المسودة: ملاحظات المسودة\",\n  \"Title\": \"عنوان\",\n  \"Publish Date\": \"تاريخ النشر\",\n  \"Expiry Date\": \"تاريخ انتهاء الصلاحية\",\n  \"Entry Type\": \"نوع الإدخال\",\n  \"Handle\": \"يتعامل\",\n  \"Collection\": \"مجموعة\",\n  \"Displays a collection of entries.\": \"يعرض مجموعة من الإدخالات.\",\n  \"Global_\": \"عالمي\",\n  \"Makes globals available to the page.\": \"يجعل الكرة الأرضية متاحة للصفحة.\",\n  \"Section\": \"الجزء\",\n  \"Defines a website section with a supporting entry.\": \"يحدد قسم موقع الويب بإدخال داعم.\",\n  \"URL code (slug) used to find the primary record.\": \"حدد الارتفاع التقريبي المستخدم للعثور على السجل الأساسي.\",\n  \"Default View\": \"طريقة العرض الافتراضية\",\n  \"Use this page as a default entry point when previewing the record.\": \"تستخدم كنقطة إدخال افتراضية عند معاينة السجل.\",\n  \"Full Slug\": \"سبيكة كاملة\",\n  \"Use the full slug when looking up the record.\": \"استخدم الرابط الكامل عند البحث عن السجل.\",\n  \"Are you sure?\": \"هل أنت متأكد؟\",\n  \"Delete Forever\": \"الحذف للأبد\",\n  \"This record is not visible because it has been deleted.\": \"هذا السجل غير مرئي لأنه تم حذفه.\",\n  \"Restore this Record\": \"قم باستعادة هذا السجل\",\n  \"Do you really want to delete this permanently?\": \"هل تريد حقًا حذف هذا نهائيًا؟\",\n  \"ID (Primary Key)\": \"المعرف (المفتاح الأساسي)\",\n  \"Column name (index) to match with the primary record.\": \"اسم العمود (الفهرس) ليطابق مع السجل الأساسي.\",\n  \"Records Per Page\": \"تسجيلات لكل صفحة\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"عدد السجلات المراد عرضها في صفحة واحدة. اتركه فارغًا لتعطيل ترقيم الصفحات.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"تنسيق غير صالح للسجلات لكل قيمة صفحة. يجب أن تكون القيمة رقمًا.\",\n  \"Pagination\": \"ترقيم الصفحات\",\n  \"Page Number\": \"رقم الصفحة\",\n  \"This value is used to determine what page the user is on.\": \"تُستخدم هذه القيمة لتحديد الصفحة التي يتواجد فيها المستخدم.\",\n  \"Sorting\": \"فرز\",\n  \"Sort by Column\": \"فرز حسب العمود\",\n  \"Model column the records should be ordered by\": \"عمود النموذج يجب أن يتم ترتيب السجلات حسب\",\n  \"Direction\": \"اتجاه\",\n  \"Update :name Entries\": \"تحديث: اسم إدخالات\",\n  \"Update :name\": \"تحديث: الاسم\",\n  \":name Entry\": \": إدخال الاسم\",\n  \"All :name Items\": \"الكل: مداخل الاسم\",\n  \"Update Existing Records\": \"تحديث السجلات الموجودة\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"حدد هذا المربع لتحديث السجلات التي تتطابق مع نفس المعرف أو العنوان أو الرابط الثابت.\",\n  \"Copy\": \"ينسخ\",\n  \"App\": \"برنامج\",\n  \"Blueprints\": \"المخططات\",\n  \"App Blueprint\": \"مخطط التطبيق\",\n  \"Theme Blueprint\": \"مخطط تصميم القالب\",\n  \"Reset Structure\": \"إعادة ضبط الهيكل\",\n  \"Structure has been reset\": \"تمت إعادة ضبط الهيكل\",\n  \"Content\": \"محتوى\"\n}"
  },
  {
    "path": "modules/tailor/lang/be.json",
    "content": "{\n  \"Manage Entries\": \"Кіраванне запісамі\",\n  \"Create :name Entry\": \"Стварыць запіс :name\",\n  \"New :name\": \"Новы запіс :name\",\n  \"Import Entries\": \"Імпартныя запісы\",\n  \"Export Entries\": \"Экспартныя запісы\",\n  \"First Draft\": \"Першы праект\",\n  \"Draft Saved\": \"Чарнавік захаваны\",\n  \"Draft Applied\": \"Чарнавік прыменены\",\n  \"Draft Created\": \"Чарнавік створаны\",\n  \"Draft Discarded\": \"Чарнавік адхілены\",\n  \"Create Entry\": \"Стварыць запіс\",\n  \"Publish Entry\": \"Апублікаваць запіс\",\n  \"Delete Entry\": \"Выдаліць запіс\",\n  \"Entries have been disabled\": \"Запісы былі адключаныя\",\n  \"Entries have been enabled\": \"Запісы былі ўключаны\",\n  \"Entries have been deleted\": \"Запісы выдалены\",\n  \"Entries have been restored\": \"Запісы адноўлены\",\n  \"Entries have been duplicated\": \"Запісы дубляваны\",\n  \"Manage Blueprints\": \"Кіраванне чарцяжамі\",\n  \"All Entries\": \"Усе запісы\",\n  \"Published Date\": \"Дата публікацыі\",\n  \"Published\": \"Апублікавана\",\n  \"Expired\": \"Пратэрмінаваны\",\n  \"Scheduled\": \"Запланаваны\",\n  \"Hidden\": \"Схаваны\",\n  \"Draft\": \"Чарнавік\",\n  \"Deleted\": \"Выдалены\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Уключана\",\n  \"Schedule publish date\": \"Запланаваць дату публікацыі\",\n  \"Set expiry date\": \"Усталюйце тэрмін прыдатнасці\",\n  \"View full slug\": \"Прагледзець поўны смоўж\",\n  \"Apply this Draft\": \"Прымяніць гэты чарнавік\",\n  \"Remove\": \"Зняць\",\n  \"Drafts are not visible on the website until they are applied.\": \"Чарнавікі не будуць бачныя на вэб-сайце, пакуль яны не будуць прыменены.\",\n  \"Save Draft\": \"Захаваць чарнавік\",\n  \"Do you really want to discard the draft?\": \"Вы сапраўды хочаце адкінуць чарнавік?\",\n  \"Discard Draft\": \"Адхіліць чарнавік\",\n  \"Save & Apply Draft\": \"Захаваць і прымяніць чарнавік\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Вы сапраўды хочаце выдаліць запіс? Ён таксама выдаліць усе чарнавікі, калі такія існуюць.\",\n  \"Create New Draft\": \"Стварыць новы чарнавік\",\n  \"Select Draft to Edit\": \"Выберыце Чарнавік для рэдагавання\",\n  \"Edit the Primary Record\": \"Рэдагаваць першасны запіс\",\n  \"Unnamed Draft\": \"Чарнавік без назвы\",\n  \"Notes\": \"Заўвагі\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Дакумент мае незахаваныя змены. Вы хочаце адкінуць іх і працягнуць стварэнне новага чарнавіка?\",\n  \"Preview\": \"Папярэдні прагляд\",\n  \"Unsaved\": \"Незахавана\",\n  \"put the draft notes here\": \"змясціць чарнавікі тут\",\n  \"Top Level\": \"Вышэйшы ўзровень\",\n  \"Draft name: draft notes\": \"Назва чарнавіка: чарнавікі\",\n  \"Title\": \"Назва\",\n  \"Publish Date\": \"Дата публікацыі\",\n  \"Expiry Date\": \"Дата заканчэння тэрміну дзеяння\",\n  \"Entry Type\": \"Тып запісу\",\n  \"Handle\": \"Ручка\",\n  \"Collection\": \"Калекцыя\",\n  \"Displays a collection of entries.\": \"Адлюстроўвае калекцыю запісаў.\",\n  \"Global_\": \"Глабальны\",\n  \"Makes globals available to the page.\": \"Робіць глабальныя дадзеныя даступнымі для старонкі.\",\n  \"Section\": \"Раздзел\",\n  \"Defines a website section with a supporting entry.\": \"Вызначае раздзел вэб-сайта з дапаможным запісам.\",\n  \"URL code (slug) used to find the primary record.\": \"Укажыце смоўж, які выкарыстоўваецца для пошуку асноўнага запісу.\",\n  \"Default View\": \"Выгляд па змаўчанні\",\n  \"Use this page as a default entry point when previewing the record.\": \"Выкарыстоўваецца як кропка ўваходу па змаўчанні пры папярэднім праглядзе запісу.\",\n  \"Full Slug\": \"Поўны смоўж\",\n  \"Use the full slug when looking up the record.\": \"Выкарыстоўвайце поўную лінейку пры пошуку запісу.\",\n  \"Are you sure?\": \"Вы ўпэўнены?\",\n  \"Delete Forever\": \"Выдаліць назаўжды\",\n  \"This record is not visible because it has been deleted.\": \"Гэты запіс не бачны, таму што ён быў выдалены.\",\n  \"Restore this Record\": \"Аднавіць гэты запіс\",\n  \"Do you really want to delete this permanently?\": \"Вы сапраўды хочаце выдаліць гэта назаўсёды?\",\n  \"ID (Primary Key)\": \"ID (першасны ключ)\",\n  \"Column name (index) to match with the primary record.\": \"Назва слупка (індэкс) для супадзення з першасным запісам.\",\n  \"Records Per Page\": \"Запісы на старонку\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Колькасць запісаў для адлюстравання на адной старонцы. Пакіньце пустым, каб адключыць пагінацыю.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Няправільны фармат значэння запісаў на старонку. Значэнне павінна быць лікам.\",\n  \"Pagination\": \"Пагінацыя\",\n  \"Page Number\": \"Нумар старонкі\",\n  \"This value is used to determine what page the user is on.\": \"Гэта значэнне выкарыстоўваецца, каб вызначыць, на якой старонцы знаходзіцца карыстальнік.\",\n  \"Sorting\": \"Сартаванне\",\n  \"Sort by Column\": \"Сартаваць па слупку\",\n  \"Model column the records should be ordered by\": \"Слупок мадэлі, па якім трэба ўпарадкаваць запісы\",\n  \"Direction\": \"Напрамак\",\n  \"Update :name Entries\": \"Абнаўленне: запісы імя\",\n  \"Update :name\": \"Абнаўленне: імя\",\n  \":name Entry\": \":name Запіс\",\n  \"All :name Items\": \"Усе запісы :name\",\n  \"Update Existing Records\": \"Абнавіць існуючыя запісы\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Усталюйце гэты сцяжок, каб абнаўляць запісы, якія адпавядаюць аднолькавым ідэнтыфікатарам, назве або смоўгу.\",\n  \"Copy\": \"Копія\",\n  \"App\": \"Праграма\",\n  \"Blueprints\": \"Чарцяжы\",\n  \"App Blueprint\": \"План прыкладання\",\n  \"Theme Blueprint\": \"План тэмы\",\n  \"Reset Structure\": \"Скінуць структуру\",\n  \"Structure has been reset\": \"Структура была скінута\",\n  \"Content\": \"Змест\"\n}"
  },
  {
    "path": "modules/tailor/lang/bg.json",
    "content": "{\n  \"Manage Entries\": \"Управление на записите\",\n  \"Create :name Entry\": \"Създайте :name Запис\",\n  \"New :name\": \"Нов запис :name\",\n  \"Import Entries\": \"Записи за импортиране\",\n  \"Export Entries\": \"Експортни записи\",\n  \"First Draft\": \"Първа чернова\",\n  \"Draft Saved\": \"Черновата е запазена\",\n  \"Draft Applied\": \"Приложена чернова\",\n  \"Draft Created\": \"Черновата е създадена\",\n  \"Draft Discarded\": \"Черновата е отхвърлена\",\n  \"Create Entry\": \"Създаване на запис\",\n  \"Publish Entry\": \"Публикуване на записа\",\n  \"Delete Entry\": \"Изтриване на записа\",\n  \"Entries have been disabled\": \"Записванията са деактивирани\",\n  \"Entries have been enabled\": \"Записванията са активирани\",\n  \"Entries have been deleted\": \"Записите са изтрити\",\n  \"Entries have been restored\": \"Записите са възстановени\",\n  \"Entries have been duplicated\": \"Записите са дублирани\",\n  \"Manage Blueprints\": \"Управление на чертежи\",\n  \"All Entries\": \"Всички записи\",\n  \"Published Date\": \"Дата на публикуване\",\n  \"Published\": \"Публикувано\",\n  \"Expired\": \"Просрочен\",\n  \"Scheduled\": \"Планиран\",\n  \"Hidden\": \"Скрити\",\n  \"Draft\": \"Чернова\",\n  \"Deleted\": \"Изтрито\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Активирано\",\n  \"Schedule publish date\": \"Планирайте дата на публикуване\",\n  \"Set expiry date\": \"Задайте дата на изтичане\",\n  \"View full slug\": \"Вижте целия плужек\",\n  \"Apply this Draft\": \"Приложете тази чернова\",\n  \"Remove\": \"Премахване\",\n  \"Drafts are not visible on the website until they are applied.\": \"Черновите не се виждат на уебсайта, докато не бъдат приложени.\",\n  \"Save Draft\": \"Чернова\",\n  \"Do you really want to discard the draft?\": \"Наистина ли искате да отхвърлите черновата?\",\n  \"Discard Draft\": \"Отхвърлете черновата\",\n  \"Save & Apply Draft\": \"Запазване и прилагане на чернова\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Наистина ли искате да изтриете записа? Освен това ще изтрие всички чернови, ако има такива.\",\n  \"Create New Draft\": \"Създаване на нова чернова\",\n  \"Select Draft to Edit\": \"Изберете Чернова за редактиране\",\n  \"Edit the Primary Record\": \"Редактирайте първичния запис\",\n  \"Unnamed Draft\": \"Чернова без име\",\n  \"Notes\": \"Бележки\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Документът има незапазени промени. Искате ли да ги отхвърлите и да продължите със създаването на нова чернова?\",\n  \"Preview\": \"Преглед\",\n  \"Unsaved\": \"Незапазени\",\n  \"put the draft notes here\": \"поставете черновите бележки тук\",\n  \"Top Level\": \"Най-високо ниво\",\n  \"Draft name: draft notes\": \"Име на черновата: чернова на бележки\",\n  \"Title\": \"Заглавие\",\n  \"Publish Date\": \"Дата на публикуване\",\n  \"Expiry Date\": \"Срок на годност\",\n  \"Entry Type\": \"Тип вход\",\n  \"Handle\": \"Дръжка\",\n  \"Collection\": \"Колекция\",\n  \"Displays a collection of entries.\": \"Показва колекция от записи.\",\n  \"Global_\": \"Глобално\",\n  \"Makes globals available to the page.\": \"Прави глобалните данни достъпни за страницата.\",\n  \"Section\": \"Раздел\",\n  \"Defines a website section with a supporting entry.\": \"Определя раздел на уебсайт с поддържащ запис.\",\n  \"URL code (slug) used to find the primary record.\": \"Посочете охлюва, използван за намиране на първичния запис.\",\n  \"Default View\": \"Изглед по подразбиране\",\n  \"Use this page as a default entry point when previewing the record.\": \"Използвайте тази страница като входна точка по подразбиране при визуализация на записа.\",\n  \"Full Slug\": \"Пълен плужек\",\n  \"Use the full slug when looking up the record.\": \"Използвайте пълния охлюв, когато търсите записа.\",\n  \"Are you sure?\": \"Сигурен ли си?\",\n  \"Delete Forever\": \"Изтрий завинаги\",\n  \"This record is not visible because it has been deleted.\": \"Този запис не се вижда, защото е изтрит.\",\n  \"Restore this Record\": \"Възстановете този запис\",\n  \"Do you really want to delete this permanently?\": \"Наистина ли искате да изтриете това за постоянно?\",\n  \"ID (Primary Key)\": \"ID (първичен ключ)\",\n  \"Column name (index) to match with the primary record.\": \"Име на колона (индекс), което да съответства на основния запис.\",\n  \"Records Per Page\": \"Записи на страница\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Брой записи за показване на една страница. Оставете празно, за да деактивирате пагинацията.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Невалиден формат на стойността на записите на страница. Стойността трябва да е число.\",\n  \"Pagination\": \"Пагинация\",\n  \"Page Number\": \"Номер на страницата\",\n  \"This value is used to determine what page the user is on.\": \"Тази стойност се използва за определяне на коя страница е потребителят.\",\n  \"Sorting\": \"Сортиране\",\n  \"Sort by Column\": \"Сортиране по колона\",\n  \"Model column the records should be ordered by\": \"Колона модел, по която трябва да бъдат подредени записите\",\n  \"Direction\": \"Посока\",\n  \"Update :name Entries\": \"Актуализация: име на записи\",\n  \"Update :name\": \"Актуализация: име\",\n  \":name Entry\": \": име Вписване\",\n  \"All :name Items\": \"Всички :name записи\",\n  \"Update Existing Records\": \"Актуализиране на съществуващи записи\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Поставете отметка в това квадратче, за да актуализирате записи, които съответстват на същия идентификатор, заглавие или охлюв.\",\n  \"Copy\": \"копие\",\n  \"App\": \"Приложение\",\n  \"Blueprints\": \"Чертежи\",\n  \"App Blueprint\": \"План на приложението\",\n  \"Theme Blueprint\": \"План на темата\",\n  \"Reset Structure\": \"Нулиране на структурата\",\n  \"Structure has been reset\": \"Структурата е нулирана\",\n  \"Content\": \"Съдържание\",\n  \"Global\": \"Глобален\",\n  \"Used as default entry point when previewing the record.\": \"Използва се като входна точка по подразбиране при предварителен преглед на записа.\",\n  \"Unnamed draft\": \"Чернова без име\",\n  \"Top level\": \"Най-високо ниво\"\n}"
  },
  {
    "path": "modules/tailor/lang/ca.json",
    "content": "{\n  \"Manage Entries\": \"Gestiona les entrades\",\n  \"Create :name Entry\": \"Crear :name\",\n  \"New :name\": \"Nou :name\",\n  \"Import Entries\": \"Importa les entrades\",\n  \"Export Entries\": \"Exportar entrades\",\n  \"First Draft\": \"Primer esborrany\",\n  \"Draft Saved\": \"Esborrany desat\",\n  \"Draft Applied\": \"Esborrany aplicat\",\n  \"Draft Created\": \"Esborrany creat\",\n  \"Draft Discarded\": \"Esborrany descartat\",\n  \"Create Entry\": \"Crea entrada\",\n  \"Publish Entry\": \"Publicar entrada\",\n  \"Delete Entry\": \"Suprimeix l'entrada\",\n  \"Entries have been disabled\": \"S'han desactivat les entrades\",\n  \"Entries have been enabled\": \"S'han habilitat les entrades\",\n  \"Entries have been deleted\": \"S'han suprimit les entrades\",\n  \"Entries have been restored\": \"S'han restaurat les entrades\",\n  \"Entries have been duplicated\": \"S'han duplicat les entrades\",\n  \"Manage Blueprints\": \"Gestionar plànols\",\n  \"All Entries\": \"Totes les entrades\",\n  \"Published Date\": \"Data de publicació\",\n  \"Published\": \"Publicat\",\n  \"Expired\": \"Caducat\",\n  \"Scheduled\": \"Programat\",\n  \"Hidden\": \"Ocult\",\n  \"Draft\": \"Esborrany\",\n  \"Deleted\": \"S'ha suprimit\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Habilitat\",\n  \"Schedule publish date\": \"Programa la data de publicació\",\n  \"Set expiry date\": \"Estableix la data de caducitat\",\n  \"View full slug\": \"Veure slug complet\",\n  \"Apply this Draft\": \"Aplica aquest esborrany\",\n  \"Remove\": \"Eliminar\",\n  \"Drafts are not visible on the website until they are applied.\": \"Els esborranys no són visibles al lloc web fins que s'apliquen.\",\n  \"Save Draft\": \"Guardar l'esborrany\",\n  \"Do you really want to discard the draft?\": \"Realment voleu descartar l'esborrany?\",\n  \"Discard Draft\": \"Descarta l'esborrany\",\n  \"Save & Apply Draft\": \"Desa i aplica l'esborrany\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Realment voleu suprimir el registre? També suprimirà tots els esborranys si n'hi ha.\",\n  \"Create New Draft\": \"Crea un nou esborrany\",\n  \"Select Draft to Edit\": \"Seleccioneu Esborrany per editar\",\n  \"Edit the Primary Record\": \"Editeu el registre principal\",\n  \"Unnamed Draft\": \"Esborrany sense nom\",\n  \"Notes\": \"Notes\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"El document té canvis no desats. Vols descartar-los i continuar amb la creació d'un esborrany nou?\",\n  \"Preview\": \"Vista prèvia\",\n  \"Unsaved\": \"No s'ha desat\",\n  \"put the draft notes here\": \"poseu aquí l'esborrany de les notes\",\n  \"Top Level\": \"Nivell més alt\",\n  \"Draft name: draft notes\": \"Nom de l'esborrany: esborrany de notes\",\n  \"Title\": \"Títol\",\n  \"Publish Date\": \"Data de publicació\",\n  \"Expiry Date\": \"Data de caducitat\",\n  \"Entry Type\": \"Tipus d'entrada\",\n  \"Handle\": \"Gestionar\",\n  \"Collection\": \"Col·lecció\",\n  \"Displays a collection of entries.\": \"Mostra una col·lecció d'entrades.\",\n  \"Global_\": \"Global\",\n  \"Makes globals available to the page.\": \"Fa que els globals estiguin disponibles a la pàgina.\",\n  \"Section\": \"Secció\",\n  \"Defines a website section with a supporting entry.\": \"Defineix una secció de lloc web amb una entrada de suport.\",\n  \"URL code (slug) used to find the primary record.\": \"Especifiqueu l'slug utilitzat per trobar el registre principal.\",\n  \"Default View\": \"Vista per defecte\",\n  \"Use this page as a default entry point when previewing the record.\": \"S'utilitza com a punt d'entrada predeterminat quan es previsualitza el registre.\",\n  \"Full Slug\": \"Slug complet\",\n  \"Use the full slug when looking up the record.\": \"Utilitzeu l'slug complet quan busqueu el registre.\",\n  \"Are you sure?\": \"Estàs segur?\",\n  \"Delete Forever\": \"Suprimeix per sempre\",\n  \"This record is not visible because it has been deleted.\": \"Aquest registre no és visible perquè s'ha suprimit.\",\n  \"Restore this Record\": \"Restaura aquest registre\",\n  \"Do you really want to delete this permanently?\": \"Realment voleu suprimir-ho permanentment?\",\n  \"ID (Primary Key)\": \"ID (clau principal)\",\n  \"Column name (index) to match with the primary record.\": \"Nom de la columna (índex) que coincideixi amb el registre principal.\",\n  \"Records Per Page\": \"Registres per pàgina\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Nombre de registres per mostrar en una sola pàgina. Deixeu buit per desactivar la paginació.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Format no vàlid dels registres per valor de pàgina. El valor ha de ser un número.\",\n  \"Pagination\": \"Paginació\",\n  \"Page Number\": \"Número de pàgina\",\n  \"This value is used to determine what page the user is on.\": \"Aquest valor s'utilitza per determinar a quina pàgina es troba l'usuari.\",\n  \"Sorting\": \"Classificació\",\n  \"Sort by Column\": \"Ordena per columna\",\n  \"Model column the records should be ordered by\": \"Columna model per la qual s'han d'ordenar els registres\",\n  \"Direction\": \"Direcció\",\n  \"Update :name Entries\": \"Actualitzar entrades de :name\",\n  \"Update :name\": \"Actualitzar :name\",\n  \":name Entry\": \"Entrada :name\",\n  \"All :name Items\": \"Totes les entrades de :name\",\n  \"Update Existing Records\": \"Actualitzar els registres existents\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Marqueu aquesta casella per actualitzar registres que coincideixin amb el mateix identificador, títol o slug.\",\n  \"Copy\": \"Còpia\",\n  \"App\": \"Aplicació\",\n  \"Blueprints\": \"Plànols\",\n  \"App Blueprint\": \"Pla d'aplicació\",\n  \"Theme Blueprint\": \"Pla temàtic\",\n  \"Reset Structure\": \"Restableix l'estructura\",\n  \"Structure has been reset\": \"L'estructura s'ha reiniciat\",\n  \"Content\": \"Contingut\"\n}"
  },
  {
    "path": "modules/tailor/lang/cs.json",
    "content": "{\n  \"Manage Entries\": \"Spravovat záznamy\",\n  \"Create :name Entry\": \"Vytvořit položku :name\",\n  \"New :name\": \"Nový :name\",\n  \"Import Entries\": \"Importovat záznamy\",\n  \"Export Entries\": \"Exportovat záznamy\",\n  \"First Draft\": \"První návrh\",\n  \"Draft Saved\": \"Koncept uložen\",\n  \"Draft Applied\": \"Koncept použit\",\n  \"Draft Created\": \"Koncept vytvořen\",\n  \"Draft Discarded\": \"Koncept zahozen\",\n  \"Create Entry\": \"Vytvořit položku\",\n  \"Publish Entry\": \"Publikovat záznam\",\n  \"Delete Entry\": \"Smazat záznam\",\n  \"Entries have been disabled\": \"Záznamy byly zakázány\",\n  \"Entries have been enabled\": \"Záznamy byly povoleny\",\n  \"Entries have been deleted\": \"Záznamy byly smazány\",\n  \"Entries have been restored\": \"Záznamy byly obnoveny\",\n  \"Entries have been duplicated\": \"Záznamy byly duplikovány\",\n  \"Manage Blueprints\": \"Spravovat Blueprinty\",\n  \"All Entries\": \"Všechny položky\",\n  \"Published Date\": \"Publikováno\",\n  \"Published\": \"Publikováno\",\n  \"Expired\": \"Expirované\",\n  \"Scheduled\": \"Plánované\",\n  \"Hidden\": \"Skryté\",\n  \"Draft\": \"Koncept\",\n  \"Deleted\": \"Odstraněné\",\n  \"Slug\": \"URL\",\n  \"Enabled\": \"Povoleno\",\n  \"Schedule publish date\": \"Naplánovat datum publikace\",\n  \"Set expiry date\": \"Zadat datum expirace\",\n  \"View full slug\": \"Zobrazit celý slug\",\n  \"Apply this Draft\": \"Použít tento koncept\",\n  \"Remove\": \"Odstranit\",\n  \"Drafts are not visible on the website until they are applied.\": \"Koncepty nejsou viditelné na webových stránkách, dokud nejsou použity.\",\n  \"Save Draft\": \"Uložit koncept\",\n  \"Do you really want to discard the draft?\": \"Opravdu chcete návrh zahodit?\",\n  \"Discard Draft\": \"Zahodit koncept\",\n  \"Save & Apply Draft\": \"Uložit a použít koncept\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Opravdu chcete záznam smazat? Smaže také všechny koncepty, pokud nějaké existují.\",\n  \"Create New Draft\": \"Vytvořit nový koncept\",\n  \"Select Draft to Edit\": \"Vyberte možnost Koncept k úpravě\",\n  \"Edit the Primary Record\": \"Upravte primární záznam\",\n  \"Unnamed Draft\": \"Nejmenovaný koncept\",\n  \"Notes\": \"Poznámky\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokument obsahuje neuložené změny. Chcete je zahodit a pokračovat ve vytváření nového konceptu?\",\n  \"Preview\": \"Náhled\",\n  \"Unsaved\": \"Neuloženo\",\n  \"put the draft notes here\": \"vložte návrhy poznámek sem\",\n  \"Top Level\": \"Nejvyšší úroveň\",\n  \"Draft name: draft notes\": \"Název konceptu: poznámky konceptu\",\n  \"Title\": \"Titul\",\n  \"Publish Date\": \"Datum publikace\",\n  \"Expiry Date\": \"Datum expirace\",\n  \"Entry Type\": \"Typ vstupu\",\n  \"Handle\": \"Rukojeť\",\n  \"Collection\": \"Sbírka\",\n  \"Displays a collection of entries.\": \"Zobrazí kolekci záznamů.\",\n  \"Global_\": \"Globální\",\n  \"Makes globals available to the page.\": \"Zpřístupní stránce globals.\",\n  \"Section\": \"Sekce\",\n  \"Defines a website section with a supporting entry.\": \"Definuje sekci webu s podpůrným záznamem.\",\n  \"URL code (slug) used to find the primary record.\": \"Zadejte slimák použitý k nalezení primárního záznamu.\",\n  \"Default View\": \"Výchozí zobrazení\",\n  \"Use this page as a default entry point when previewing the record.\": \"Tuto stránku použijte jako výchozí vstupní bod při prohlížení náhledu záznamu.\",\n  \"Full Slug\": \"Úplná URL adresa\",\n  \"Use the full slug when looking up the record.\": \"Při vyhledávání záznamu použijte plného slimáka.\",\n  \"Are you sure?\": \"Jsi si jistá?\",\n  \"Delete Forever\": \"Smazat navždy\",\n  \"This record is not visible because it has been deleted.\": \"Tento záznam není viditelný, protože byl smazán.\",\n  \"Restore this Record\": \"Obnovte tento záznam\",\n  \"Do you really want to delete this permanently?\": \"Opravdu to chcete trvale smazat?\",\n  \"ID (Primary Key)\": \"ID (primární klíč)\",\n  \"Column name (index) to match with the primary record.\": \"Název sloupce (index), který se má shodovat s primárním záznamem.\",\n  \"Records Per Page\": \"Počet záznamů na stránku\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Počet záznamů k zobrazení na jedné stránce. Chcete-li stránkování zakázat, ponechte prázdné.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Neplatný formát hodnoty záznamů na stránku. Hodnota by měla být číslo.\",\n  \"Pagination\": \"Stránkování\",\n  \"Page Number\": \"Číslo stránky\",\n  \"This value is used to determine what page the user is on.\": \"Tato hodnota se používá k určení, na které stránce se uživatel nachází.\",\n  \"Sorting\": \"Řazení\",\n  \"Sort by Column\": \"Seřadit podle sloupce\",\n  \"Model column the records should be ordered by\": \"Sloupec modelu, podle kterého by měly být záznamy seřazeny\",\n  \"Direction\": \"Směr\",\n  \"Update :name Entries\": \"Aktualizace :name Záznamy\",\n  \"Update :name\": \"Aktualizace: jméno\",\n  \":name Entry\": \":name Vstup\",\n  \"All :name Items\": \"Všechny položky :name\",\n  \"Update Existing Records\": \"Aktualizovat existující záznamy\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Zaškrtnutím tohoto políčka aktualizujete záznamy, které odpovídají stejnému ID, názvu nebo slimákovi.\",\n  \"Copy\": \"kopírovat\",\n  \"App\": \"Aplikace\",\n  \"Blueprints\": \"Plány\",\n  \"App Blueprint\": \"Plán aplikace\",\n  \"Theme Blueprint\": \"Návrh tématu\",\n  \"Reset Structure\": \"Obnovit strukturu\",\n  \"Structure has been reset\": \"Struktura byla resetována\",\n  \"Content\": \"Obsah\",\n  \"Global\": \"Globální\",\n  \"Used as default entry point when previewing the record.\": \"Používá se jako výchozí vstupní bod při prohlížení náhledu záznamu.\",\n  \"Unnamed draft\": \"Nejmenovaný koncept\",\n  \"Top level\": \"Nejvyšší úroveň\"\n}"
  },
  {
    "path": "modules/tailor/lang/da.json",
    "content": "{\n  \"Manage Entries\": \"Administrer poster\",\n  \"Create :name Entry\": \"Opret :name -indtastning\",\n  \"New :name\": \"Ny :navnindtastning\",\n  \"Import Entries\": \"Importer poster\",\n  \"Export Entries\": \"Eksporter poster\",\n  \"First Draft\": \"Første udkast\",\n  \"Draft Saved\": \"Udkast gemt\",\n  \"Draft Applied\": \"Udkast anvendt\",\n  \"Draft Created\": \"Udkast oprettet\",\n  \"Draft Discarded\": \"Udkast kasseret\",\n  \"Create Entry\": \"Opret indgang\",\n  \"Publish Entry\": \"Udgiv indlæg\",\n  \"Delete Entry\": \"Slet post\",\n  \"Entries have been disabled\": \"Indgange er blevet deaktiveret\",\n  \"Entries have been enabled\": \"Indgange er blevet aktiveret\",\n  \"Entries have been deleted\": \"Indlæg er blevet slettet\",\n  \"Entries have been restored\": \"Indgange er blevet gendannet\",\n  \"Entries have been duplicated\": \"Indlæg er blevet duplikeret\",\n  \"Manage Blueprints\": \"Administrer Blueprints\",\n  \"All Entries\": \"Alle poster\",\n  \"Published Date\": \"Udgivet dato\",\n  \"Published\": \"Udgivet\",\n  \"Expired\": \"Udløbet\",\n  \"Scheduled\": \"Planlagt\",\n  \"Hidden\": \"Skjult\",\n  \"Draft\": \"Udkast\",\n  \"Deleted\": \"Slettet\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Aktiveret\",\n  \"Schedule publish date\": \"Planlæg udgivelsesdato\",\n  \"Set expiry date\": \"Indstil udløbsdato\",\n  \"View full slug\": \"Se hele sneglen\",\n  \"Apply this Draft\": \"Anvend dette udkast\",\n  \"Remove\": \"Fjerne\",\n  \"Drafts are not visible on the website until they are applied.\": \"Udkast er ikke synlige på hjemmesiden, før de er anvendt.\",\n  \"Save Draft\": \"Gem udkast\",\n  \"Do you really want to discard the draft?\": \"Vil du virkelig kassere kladden?\",\n  \"Discard Draft\": \"Kassér udkast\",\n  \"Save & Apply Draft\": \"Gem og anvend kladde\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Vil du virkelig slette posten? Det vil også slette alle kladder, hvis der findes nogen.\",\n  \"Create New Draft\": \"Opret nyt udkast\",\n  \"Select Draft to Edit\": \"Vælg Kladde for at redigere\",\n  \"Edit the Primary Record\": \"Rediger den primære post\",\n  \"Unnamed Draft\": \"Unavngivet udkast\",\n  \"Notes\": \"Noter\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokumentet har ikke-gemte ændringer. Vil du kassere dem og fortsætte med at oprette en ny kladde?\",\n  \"Preview\": \"Forhåndsvisning\",\n  \"Unsaved\": \"Ikke gemt\",\n  \"put the draft notes here\": \"læg udkastet til noter her\",\n  \"Top Level\": \"Højeste niveau\",\n  \"Draft name: draft notes\": \"Kladdenavn: udkast til noter\",\n  \"Title\": \"Titel\",\n  \"Publish Date\": \"Udgivelsesdato\",\n  \"Expiry Date\": \"Udløbsdato\",\n  \"Entry Type\": \"Indgangstype\",\n  \"Handle\": \"Håndtere\",\n  \"Collection\": \"Kollektion\",\n  \"Displays a collection of entries.\": \"Viser en samling af poster.\",\n  \"Global_\": \"Global\",\n  \"Makes globals available to the page.\": \"Gør globaler tilgængelige for siden.\",\n  \"Section\": \"Afsnit\",\n  \"Defines a website section with a supporting entry.\": \"Definerer en hjemmesidesektion med en understøttende indgang.\",\n  \"URL code (slug) used to find the primary record.\": \"Angiv den slug, der bruges til at finde den primære post.\",\n  \"Default View\": \"Standardvisning\",\n  \"Use this page as a default entry point when previewing the record.\": \"Bruges som standardindgangspunkt ved forhåndsvisning af posten.\",\n  \"Full Slug\": \"Fuld Slug\",\n  \"Use the full slug when looking up the record.\": \"Brug den fulde slug, når du slår op i posten.\",\n  \"Are you sure?\": \"Er du sikker?\",\n  \"Delete Forever\": \"Slet for evigt\",\n  \"This record is not visible because it has been deleted.\": \"Denne post er ikke synlig, fordi den er blevet slettet.\",\n  \"Restore this Record\": \"Gendan denne post\",\n  \"Do you really want to delete this permanently?\": \"Vil du virkelig slette dette permanent?\",\n  \"ID (Primary Key)\": \"ID (primær nøgle)\",\n  \"Column name (index) to match with the primary record.\": \"Kolonnenavn (indeks) for at matche med den primære post.\",\n  \"Records Per Page\": \"Optegnelser pr. side\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Antal poster, der skal vises på en enkelt side. Lad være tom for at deaktivere paginering.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Ugyldigt format for registreringerne pr. sideværdi. Værdien skal være et tal.\",\n  \"Pagination\": \"Sideinddeling\",\n  \"Page Number\": \"Sidenummer\",\n  \"This value is used to determine what page the user is on.\": \"Denne værdi bruges til at bestemme, hvilken side brugeren er på.\",\n  \"Sorting\": \"Sortering\",\n  \"Sort by Column\": \"Sorter efter kolonne\",\n  \"Model column the records should be ordered by\": \"Modelkolonne posterne skal sorteres efter\",\n  \"Direction\": \"Retning\",\n  \"Update :name Entries\": \"Opdater :navn-indgange\",\n  \"Update :name\": \"Opdatering :navn\",\n  \":name Entry\": \":navn Indtastning\",\n  \"All :name Items\": \"Alle :navn-indgange\",\n  \"Update Existing Records\": \"Opdater eksisterende poster\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Marker dette felt for at opdatere poster, der matcher det samme id, titel eller slug.\",\n  \"Copy\": \"Kopi\",\n  \"App\": \"Appen\",\n  \"Blueprints\": \"Tegninger\",\n  \"App Blueprint\": \"App-plan\",\n  \"Theme Blueprint\": \"Temaplan\",\n  \"Reset Structure\": \"Nulstil struktur\",\n  \"Structure has been reset\": \"Strukturen er blevet nulstillet\",\n  \"Content\": \"Tilfreds\"\n}"
  },
  {
    "path": "modules/tailor/lang/de/lang.php",
    "content": "<?php return [\n  'permissions' => [\n    'name' => 'Tailor',\n  ],\n  'blueprint' => [\n    'saved' => 'Blueprint gespeichert',\n    'reloaded' => 'Blueprint neu geladen',\n    'deleted' => 'Blueprint gelöscht',\n    'delete' => 'Löschen',\n    'new' => 'Blueprint erstellen',\n    'editor_node_name' => 'Blueprints',\n    'upload_files' => 'Datei(en) hochladen',\n    'rename' => 'Umbenennen',\n    'create_directory' => 'Neues Verzeichnis',\n    'editor_yaml' => 'YAML',\n    'error_loading' => 'Fehler beim Laden des Blueprints',\n    'not_found' => 'Blueprint nicht gefunden',\n    'apply' => 'Speichern & Migrieren',\n    'invalid_file' => 'Ungültiger Dateiname: :name. Dateinamen können nur aus alphanumerischen Zeichen, Unter- oder Bindestrichen und Punkten bestehen. Beispiele korrekter Dateinamen: blueprint.yaml, unterordner/blueprint.yaml',\n    'migrating' => 'Migriere Blueprint',\n    'migrated' => 'Der Blueprint wurde erfolgreich migriert',\n    'mixin' => 'Mixin',\n    'entry' => 'Eintrag',\n    'stream' => 'Stream',\n    'structure' => 'Struktur',\n    'single' => 'Single',\n    'global' => 'Global / Konfiguration',\n  ],\n  'editor' => [\n    'create' => 'Erstellen',\n    'refresh' => 'Neu laden',\n    'blueprint' => 'Blueprint',\n    'invalid_type' => 'Unbekannter Template-Typ.',\n    'error_no_doctype_permissions' => 'Ihnen fehlen die benötigten Berechtigungen um diesen Dokumententyp zu verwalten: :doctype',\n  ],\n];\n"
  },
  {
    "path": "modules/tailor/lang/de.json",
    "content": "{\n  \"Manage Entries\": \"Einträge verwalten\",\n  \"Create :name Entry\": \":name-Eintrag erstellen\",\n  \"New :name\": \":name erstellen\",\n  \"Import Entries\": \"Einträge importieren\",\n  \"Export Entries\": \"Einträge exportieren\",\n  \"First Draft\": \"Erster Entwurf\",\n  \"Draft Saved\": \"Entwurf gespeichert\",\n  \"Draft Applied\": \"Entwurf angewendet\",\n  \"Draft Created\": \"Entwurf erstellt\",\n  \"Draft Discarded\": \"Entwurf verworfen\",\n  \"Create Entry\": \"Eintrag erstellen\",\n  \"Publish Entry\": \"Eintrag veröffentlichen\",\n  \"Delete Entry\": \"Eintrag löschen\",\n  \"Entries have been disabled\": \"Einträge wurden deaktiviert\",\n  \"Entries have been enabled\": \"Einträge wurden aktiviert\",\n  \"Entries have been deleted\": \"Einträge wurden gelöscht\",\n  \"Entries have been restored\": \"Einträge wurden wiederhergestellt\",\n  \"Entries have been duplicated\": \"Einträge wurden dupliziert\",\n  \"Manage Blueprints\": \"Blueprints verwalten\",\n  \"All Entries\": \"Alle Einträge\",\n  \"Published Date\": \"Veröffentlichungsdatum\",\n  \"Published\": \"Veröffentlicht\",\n  \"Expired\": \"Abgelaufen\",\n  \"Scheduled\": \"Geplant\",\n  \"Hidden\": \"Versteckt\",\n  \"Draft\": \"Entwurf\",\n  \"Deleted\": \"Gelöscht\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Aktiv\",\n  \"Schedule publish date\": \"Veröffentlichung planen\",\n  \"Set expiry date\": \"Ablaufdatum setzen\",\n  \"View full slug\": \"Volle URL anzeigen\",\n  \"Apply this Draft\": \"Diesen Entwurf veröffentlichen\",\n  \"Remove\": \"Entfernen\",\n  \"Drafts are not visible on the website until they are applied.\": \"Entwürfe sind auf der Website nicht sichbar, bis sie veröffentlicht wurden.\",\n  \"Save Draft\": \"Entwurf speichern\",\n  \"Do you really want to discard the draft?\": \"Möchten Sie diesen Entwurf wirklich verwerfen?\",\n  \"Discard Draft\": \"Entwurf verwerfen\",\n  \"Save & Apply Draft\": \"Entwurf speichern & veröffentlichen\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Möchten Sie diesen Eintrag wirklich löschen? Existierende Entwürfe werden ebenfalls gelöscht.\",\n  \"Create New Draft\": \"Neuen Entwurf erstellen\",\n  \"Select Draft to Edit\": \"Entwurf zur Bearbeitung auswählen\",\n  \"Edit the Primary Record\": \"Öffentlichen Eintrag bearbeiten\",\n  \"Unnamed Draft\": \"Namenloser Entwurf\",\n  \"Notes\": \"Notizen\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dieses Dokument enthält ungespeicherte Änderungen. Möchten Sie diese verwerfen und einen neuen Entwurf erstellen?\",\n  \"Preview\": \"Vorschau\",\n  \"Unsaved\": \"Nicht gespeichert\",\n  \"put the draft notes here\": \"Notizen hier eingeben\",\n  \"Top Level\": \"Oberste Ebene\",\n  \"Draft name: draft notes\": \"Entwurf-Name: Notizen\",\n  \"Title\": \"Titel\",\n  \"Publish Date\": \"Erscheinungsdatum\",\n  \"Expiry Date\": \"Verfallsdatum\",\n  \"Entry Type\": \"Eintragstyp\",\n  \"Handle\": \"Identifikator\",\n  \"Collection\": \"Sammlung\",\n  \"Displays a collection of entries.\": \"Zeigt eine Sammlung von Einträgen an.\",\n  \"Global_\": \"Global\",\n  \"Makes globals available to the page.\": \"Macht Globals für die Seite verfügbar.\",\n  \"Section\": \"Sektion\",\n  \"Defines a website section with a supporting entry.\": \"Definiert eine Website-Sektion mit einem unterstützenden Eintrag.\",\n  \"URL code (slug) used to find the primary record.\": \"Slug, um einen Datensatz zu suchen.\",\n  \"Default View\": \"Standardansicht\",\n  \"Use this page as a default entry point when previewing the record.\": \"Diese Seite dient als Standardeinstiegspunkt für die Vorschau des Datensatzes.\",\n  \"Full Slug\": \"Vollständiger Slug\",\n  \"Use the full slug when looking up the record.\": \"Vollständigen Slug verwenden, um einen Datensatz zu suchen.\",\n  \"Are you sure?\": \"Sind Sie sicher?\",\n  \"Delete Forever\": \"Unwiderruflich löschen\",\n  \"This record is not visible because it has been deleted.\": \"Dieser Eintrag ist nicht sichtbar, da er gelöscht wurde.\",\n  \"Restore this Record\": \"Diesen Eintrag wiederherstellen\",\n  \"Do you really want to delete this permanently?\": \"Möchtest du diese Datei wirklich endgültig löschen?\",\n  \"ID (Primary Key)\": \"ID (Primärschlüssel)\",\n  \"Column name (index) to match with the primary record.\": \"Spaltenname (Index), der mit dem Primäreintrag übereinstimmt.\",\n  \"Records Per Page\": \"Einträge pro Seite\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Anzahl der auf einer Seite anzuzeigenden Datensätze. Leer lassen, um die Seiteneinstellung zu deaktivieren.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Ungültiges Format der Datensätze pro Seitenwert. Der Wert sollte eine Zahl sein.\",\n  \"Pagination\": \"Blätternavigation\",\n  \"Page Number\": \"Seitennummer\",\n  \"This value is used to determine what page the user is on.\": \"Dieser Wert wird verwendet, um festzustellen, auf welcher Seite der Benutzer ist.\",\n  \"Sorting\": \"Sortierung\",\n  \"Sort by Column\": \"Nach Spalte sortieren\",\n  \"Model column the records should be ordered by\": \"Modellspalte die Datensätze sortiert werden sollen nach\",\n  \"Direction\": \"Richtung\",\n  \"Update :name Entries\": \":name Einträge aktualisieren\",\n  \"Update :name\": \":name aktualisieren\",\n  \":name Entry\": \":name Eintrag\",\n  \"All :name Items\": \"Alle :name Einträge\",\n  \"Update Existing Records\": \"Vorhandene Datensätze aktualisieren\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Aktivieren Sie diese Option, um Datensätze zu aktualisieren, die mit der gleichen ID, Titel oder Slug übereinstimmen.\",\n  \"Copy\": \"Kopie\",\n  \"App\": \"App\",\n  \"Blueprints\": \"Baupläne\",\n  \"App Blueprint\": \"App-Blueprint\",\n  \"Theme Blueprint\": \"Themenplan\",\n  \"Reset Structure\": \"Struktur zurücksetzen\",\n  \"Structure has been reset\": \"Die Struktur wurde zurückgesetzt\",\n  \"Content\": \"Inhalt\",\n  \"Global\": \"Systemweit\",\n  \"Used as default entry point when previewing the record.\": \"Wird als Standardeinstiegspunkt bei der Vorschau des Datensatzes verwendet.\",\n  \"Unnamed draft\": \"Namenloser Entwurf\",\n  \"Top level\": \"Oberste Ebene\"\n}"
  },
  {
    "path": "modules/tailor/lang/el.json",
    "content": "{\n  \"Manage Entries\": \"Διαχείριση εγγραφών\",\n  \"Create :name Entry\": \"Δημιουργία :name Entry\",\n  \"New :name\": \"Νέο :name Καταχώριση\",\n  \"Import Entries\": \"Εισαγωγές\",\n  \"Export Entries\": \"Εξαγωγή καταχωρήσεων\",\n  \"First Draft\": \"Πρώτο σχέδιο\",\n  \"Draft Saved\": \"Το πρόχειρο αποθηκεύτηκε\",\n  \"Draft Applied\": \"Εφαρμόστηκε το σχέδιο\",\n  \"Draft Created\": \"Δημιουργήθηκε το προσχέδιο\",\n  \"Draft Discarded\": \"Το σχέδιο απορρίφθηκε\",\n  \"Create Entry\": \"Δημιουργία Καταχώρισης\",\n  \"Publish Entry\": \"Δημοσίευση καταχώρισης\",\n  \"Delete Entry\": \"Διαγραφή συμμετοχής\",\n  \"Entries have been disabled\": \"Οι καταχωρήσεις έχουν απενεργοποιηθεί\",\n  \"Entries have been enabled\": \"Οι καταχωρήσεις έχουν ενεργοποιηθεί\",\n  \"Entries have been deleted\": \"Οι καταχωρήσεις έχουν διαγραφεί\",\n  \"Entries have been restored\": \"Οι καταχωρήσεις έχουν αποκατασταθεί\",\n  \"Entries have been duplicated\": \"Οι συμμετοχές έχουν αντιγραφεί\",\n  \"Manage Blueprints\": \"Διαχείριση σχεδιαγραμμάτων\",\n  \"All Entries\": \"Όλες οι συμμετοχές\",\n  \"Published Date\": \"Ημερομηνία δημοσίευσης\",\n  \"Published\": \"Δημοσίευσε\",\n  \"Expired\": \"έχει λήξει\",\n  \"Scheduled\": \"Προγραμματισμένος\",\n  \"Hidden\": \"Κρυμμένος\",\n  \"Draft\": \"Προσχέδιο\",\n  \"Deleted\": \"Διαγράφηκε\",\n  \"Slug\": \"Γυμνοσάλιαγκας\",\n  \"Enabled\": \"Ενεργοποιήθηκε\",\n  \"Schedule publish date\": \"Προγραμματίστε ημερομηνία δημοσίευσης\",\n  \"Set expiry date\": \"Ορίστε ημερομηνία λήξης\",\n  \"View full slug\": \"Προβολή πλήρους γυμνοσάλιαγκου\",\n  \"Apply this Draft\": \"Εφαρμόστε αυτό το προσχέδιο\",\n  \"Remove\": \"Αφαιρώ\",\n  \"Drafts are not visible on the website until they are applied.\": \"Τα πρόχειρα δεν είναι ορατά στον ιστότοπο μέχρι να εφαρμοστούν.\",\n  \"Save Draft\": \"Αποθηκεύσετε το σχέδιο\",\n  \"Do you really want to discard the draft?\": \"Θέλετε πραγματικά να απορρίψετε το πρόχειρο;\",\n  \"Discard Draft\": \"Απόρριψη σχεδίου\",\n  \"Save & Apply Draft\": \"Αποθήκευση & Εφαρμογή προσχεδίου\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Θέλετε πραγματικά να διαγράψετε την εγγραφή; Θα διαγράψει επίσης όλα τα προσχέδια εάν υπάρχουν.\",\n  \"Create New Draft\": \"Δημιουργία νέου σχεδίου\",\n  \"Select Draft to Edit\": \"Επιλέξτε Πρόχειρο για επεξεργασία\",\n  \"Edit the Primary Record\": \"Επεξεργαστείτε την κύρια εγγραφή\",\n  \"Unnamed Draft\": \"Προσχέδιο χωρίς όνομα\",\n  \"Notes\": \"Σημειώσεις\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Το έγγραφο έχει μη αποθηκευμένες αλλαγές. Θέλετε να τα απορρίψετε και να προχωρήσετε στη δημιουργία ενός νέου προχείρου;\",\n  \"Preview\": \"Προεπισκόπηση\",\n  \"Unsaved\": \"Μη αποθηκευμένο\",\n  \"put the draft notes here\": \"βάλτε τα προσχέδια σημειώσεων εδώ\",\n  \"Top Level\": \"Κορυφαίο επίπεδο\",\n  \"Draft name: draft notes\": \"Όνομα σχεδίου: προσχέδιο σημειώσεων\",\n  \"Title\": \"Τίτλος\",\n  \"Publish Date\": \"Ημερομηνία δημοσίευσης\",\n  \"Expiry Date\": \"Ημερομηνία λήξης\",\n  \"Entry Type\": \"Τύπος καταχώρισης\",\n  \"Handle\": \"Λαβή\",\n  \"Collection\": \"Συλλογή\",\n  \"Displays a collection of entries.\": \"Εμφανίζει μια συλλογή καταχωρήσεων.\",\n  \"Global_\": \"Παγκόσμια\",\n  \"Makes globals available to the page.\": \"Κάνει τα παγκόσμια διαθέσιμα στη σελίδα.\",\n  \"Section\": \"Ενότητα\",\n  \"Defines a website section with a supporting entry.\": \"Καθορίζει μια ενότητα ιστότοπου με μια υποστηρικτική καταχώρηση.\",\n  \"URL code (slug) used to find the primary record.\": \"Καθορίστε το γυμνοσάλιαγκο που χρησιμοποιείται για την εύρεση της κύριας εγγραφής.\",\n  \"Default View\": \"Προεπιλεγμένη προβολή\",\n  \"Use this page as a default entry point when previewing the record.\": \"Χρησιμοποιείται ως προεπιλεγμένο σημείο εισόδου κατά την προεπισκόπηση της εγγραφής.\",\n  \"Full Slug\": \"Full Slug\",\n  \"Use the full slug when looking up the record.\": \"Χρησιμοποιήστε το πλήρες γυμνοσάλιαγκα όταν αναζητάτε τον δίσκο.\",\n  \"Are you sure?\": \"Είσαι σίγουρος?\",\n  \"Delete Forever\": \"Διαγραφή για πάντα\",\n  \"This record is not visible because it has been deleted.\": \"Αυτή η εγγραφή δεν είναι ορατή επειδή έχει διαγραφεί.\",\n  \"Restore this Record\": \"Επαναφορά αυτής της εγγραφής\",\n  \"Do you really want to delete this permanently?\": \"Θέλετε πραγματικά να το διαγράψετε οριστικά;\",\n  \"ID (Primary Key)\": \"Αναγνωριστικό (πρωτεύον κλειδί)\",\n  \"Column name (index) to match with the primary record.\": \"Όνομα στήλης (ευρετήριο) για αντιστοίχιση με την κύρια εγγραφή.\",\n  \"Records Per Page\": \"Εγγραφές ανά σελίδα\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Αριθμός εγγραφών για εμφάνιση σε μία σελίδα. Αφήστε κενό για να απενεργοποιήσετε τη σελιδοποίηση.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Μη έγκυρη μορφή των εγγραφών ανά τιμή σελίδας. Η τιμή πρέπει να είναι ένας αριθμός.\",\n  \"Pagination\": \"Σελιδοποίηση\",\n  \"Page Number\": \"Αριθμός σελίδας\",\n  \"This value is used to determine what page the user is on.\": \"Αυτή η τιμή χρησιμοποιείται για τον προσδιορισμό της σελίδας στην οποία βρίσκεται ο χρήστης.\",\n  \"Sorting\": \"Ταξινόμηση\",\n  \"Sort by Column\": \"Ταξινόμηση κατά στήλη\",\n  \"Model column the records should be ordered by\": \"Μοντέλο στήλη κατά την οποία θα πρέπει να ταξινομηθούν οι εγγραφές\",\n  \"Direction\": \"Κατεύθυνση\",\n  \"Update :name Entries\": \"Ενημέρωση :name Entries\",\n  \"Update :name\": \"Ενημέρωση :name\",\n  \":name Entry\": \":name Καταχώρηση\",\n  \"All :name Items\": \"Όλες οι καταχωρήσεις :name\",\n  \"Update Existing Records\": \"Ενημέρωση υφιστάμενων αρχείων\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Επιλέξτε αυτό το πλαίσιο για να ενημερώσετε τις εγγραφές που αντιστοιχούν στο ίδιο αναγνωριστικό, τίτλο ή γυμνοσάλιαγκα.\",\n  \"Copy\": \"αντίγραφο\",\n  \"App\": \"Εφαρμογή\",\n  \"Blueprints\": \"Σχέδια\",\n  \"App Blueprint\": \"Σχέδιο εφαρμογής\",\n  \"Theme Blueprint\": \"Σχέδιο θέματος\",\n  \"Reset Structure\": \"Επαναφορά δομής\",\n  \"Structure has been reset\": \"Η δομή έχει επαναφερθεί\",\n  \"Content\": \"Περιεχόμενο\"\n}"
  },
  {
    "path": "modules/tailor/lang/en/lang.php",
    "content": "<?php return [\n  'blueprint' => [\n    'saved' => 'Blueprint saved',\n    'reloaded' => 'Blueprint reloaded',\n    'deleted' => 'Blueprint deleted',\n    'delete' => 'Delete',\n    'new' => 'New Blueprint',\n    'editor_node_name' => 'Blueprints',\n    'upload_files' => 'Upload File(s)',\n    'rename' => 'Rename',\n    'create_directory' => 'New Directory',\n    'editor_yaml' => 'YAML',\n    'error_loading' => 'Error loading blueprint',\n    'not_found' => 'Blueprint not found',\n    'apply' => 'Save & Migrate',\n    'invalid_file' => 'Invalid file name: :name. File names can contain only alphanumeric symbols, underscores, dashes and dots. Some examples of correct file names: blueprint.yaml, subdirectory/blueprint.yaml',\n    'migrating' => 'Migrating blueprint',\n    'migrated' => 'The blueprint was successfully migrated',\n    'mixin' => 'Mixin',\n    'entry' => 'Entry',\n    'stream' => 'Stream',\n    'structure' => 'Structure',\n    'single' => 'Single',\n    'global' => 'Global / Configuration',\n  ],\n  'editor' => [\n    'create' => 'Create',\n    'refresh' => 'Refresh',\n    'blueprint' => 'Blueprint',\n    'invalid_type' => 'Unknown template type.',\n    'error_no_doctype_permissions' => 'You don\\'t have permission to manage the document type: :doctype',\n  ],\n];\n"
  },
  {
    "path": "modules/tailor/lang/en.json",
    "content": "{\n    \"Manage Entries\": \"Manage Entries\",\n    \"Create :name Entry\": \"Create :name Entry\",\n    \"New :name\": \"New :name\",\n    \"Import Entries\": \"Import Entries\",\n    \"Export Entries\": \"Export Entries\",\n    \"First Draft\": \"First Draft\",\n    \"Draft Saved\": \"Draft Saved\",\n    \"Draft Applied\": \"Draft Applied\",\n    \"Draft Created\": \"Draft Created\",\n    \"Draft Discarded\": \"Draft Discarded\",\n    \"Create Entry\": \"Create Entry\",\n    \"Publish Entry\": \"Publish Entry\",\n    \"Delete Entry\": \"Delete Entry\",\n    \"Entries have been disabled\": \"Entries have been disabled\",\n    \"Entries have been enabled\": \"Entries have been enabled\",\n    \"Entries have been deleted\": \"Entries have been deleted\",\n    \"Entries have been restored\": \"Entries have been restored\",\n    \"Entries have been duplicated\": \"Entries have been duplicated\",\n    \"Manage Blueprints\": \"Manage Blueprints\",\n    \"All Entries\": \"All Entries\",\n    \"Published Date\": \"Published Date\",\n    \"Published\": \"Published\",\n    \"Expired\": \"Expired\",\n    \"Scheduled\": \"Scheduled\",\n    \"Hidden\": \"Hidden\",\n    \"Draft\": \"Draft\",\n    \"Deleted\": \"Deleted\",\n    \"Slug\": \"Slug\",\n    \"Enabled\": \"Enabled\",\n    \"Schedule publish date\": \"Schedule publish date\",\n    \"Set expiry date\": \"Set expiry date\",\n    \"View full slug\": \"View full slug\",\n    \"Apply this Draft\": \"Apply this Draft\",\n    \"Remove\": \"Remove\",\n    \"Drafts are not visible on the website until they are applied.\": \"Drafts are not visible on the website until they are applied.\",\n    \"Save Draft\": \"Save Draft\",\n    \"Do you really want to discard the draft?\": \"Do you really want to discard the draft?\",\n    \"Discard Draft\": \"Discard Draft\",\n    \"Save & Apply Draft\": \"Save & Apply Draft\",\n    \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Do you really want to delete the record? It will also delete all drafts if any exist.\",\n    \"Create New Draft\": \"Create New Draft\",\n    \"Select Draft to Edit\": \"Select Draft to Edit\",\n    \"Edit the Primary Record\": \"Edit the Primary Record\",\n    \"Unnamed Draft\": \"Unnamed Draft\",\n    \"Notes\": \"Notes\",\n    \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\",\n    \"Preview\": \"Preview\",\n    \"Unsaved\": \"Unsaved\",\n    \"put the draft notes here\": \"put the draft notes here\",\n    \"Top Level\": \"Top Level\",\n    \"Draft name: draft notes\": \"Draft name: draft notes\",\n    \"Title\": \"Title\",\n    \"Publish Date\": \"Publish Date\",\n    \"Expiry Date\": \"Expiry Date\",\n    \"Entry Type\": \"Entry Type\",\n    \"Handle\": \"Handle\",\n    \"Collection\": \"Collection\",\n    \"Displays a collection of entries.\": \"Displays a collection of entries.\",\n    \"Global_\": \"Global\",\n    \"Makes globals available to the page.\": \"Makes globals available to the page.\",\n    \"Section\": \"Section\",\n    \"Defines a website section with a supporting entry.\": \"Defines a website section with a supporting entry.\",\n    \"URL code (slug) used to find the primary record.\": \"URL code (slug) used to find the primary record.\",\n    \"Default View\": \"Default View\",\n    \"Use this page as a default entry point when previewing the record.\": \"Use this page as a default entry point when previewing the record.\",\n    \"Full Slug\": \"Full Slug\",\n    \"Use the full slug when looking up the record.\": \"Use the full slug when looking up the record.\",\n    \"Are you sure?\": \"Are you sure?\",\n    \"Delete Forever\": \"Delete Forever\",\n    \"This record is not visible because it has been deleted.\": \"This record is not visible because it has been deleted.\",\n    \"Restore this Record\": \"Restore this Record\",\n    \"Do you really want to delete this permanently?\": \"Do you really want to delete this permanently?\",\n    \"ID (Primary Key)\": \"ID (Primary Key)\",\n    \"Column name (index) to match with the primary record.\": \"Column name (index) to match with the primary record.\",\n    \"Records Per Page\": \"Records Per Page\",\n    \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Number of records to display on a single page. Leave empty to disable pagination.\",\n    \"Invalid format of the records per page value. The value should be a number.\": \"Invalid format of the records per page value. The value should be a number.\",\n    \"Pagination\": \"Pagination\",\n    \"Page Number\": \"Page Number\",\n    \"This value is used to determine what page the user is on.\": \"This value is used to determine what page the user is on.\",\n    \"Sorting\": \"Sorting\",\n    \"Sort by Column\": \"Sort by Column\",\n    \"Model column the records should be ordered by\": \"Model column the records should be ordered by\",\n    \"Direction\": \"Direction\",\n    \"Update :name Entries\": \"Update :name Entries\",\n    \"Update :name\": \"Update :name\",\n    \":name Entry\": \":name Entry\",\n    \"All :name Items\": \"All :name Entries\",\n    \"Update Existing Records\": \"Update Existing Records\",\n    \"Check this box to update records that match the same ID, title or slug.\": \"Check this box to update records that match the same ID, title or slug.\",\n    \"Copy\": \"Copy\",\n    \"App\": \"App\",\n    \"Blueprints\": \"Blueprints\",\n    \"App Blueprint\": \"App Blueprint\",\n    \"Theme Blueprint\": \"Theme Blueprint\",\n    \"Reset Structure\": \"Reset Structure\",\n    \"Structure has been reset\": \"Structure has been reset\",\n    \"Content\": \"Content\"\n}\n"
  },
  {
    "path": "modules/tailor/lang/es.json",
    "content": "{\n  \"Manage Entries\": \"Administrar entradas\",\n  \"Create :name Entry\": \"Crear :name\",\n  \"New :name\": \"Crear :name\",\n  \"Import Entries\": \"Importar entradas\",\n  \"Export Entries\": \"Exportar entradas\",\n  \"First Draft\": \"Primer borrador\",\n  \"Draft Saved\": \"Borrador guardado\",\n  \"Draft Applied\": \"Borrador aplicado\",\n  \"Draft Created\": \"Borrador creado\",\n  \"Draft Discarded\": \"Borrador descartado\",\n  \"Create Entry\": \"Crear entrada\",\n  \"Publish Entry\": \"Publicar entrada\",\n  \"Delete Entry\": \"Eliminar la entrada\",\n  \"Entries have been disabled\": \"Las entradas han sido deshabilitadas\",\n  \"Entries have been enabled\": \"Las entradas han sido habilitadas\",\n  \"Entries have been deleted\": \"Se han eliminado las entradas.\",\n  \"Entries have been restored\": \"Las entradas han sido restauradas.\",\n  \"Entries have been duplicated\": \"Las entradas han sido duplicadas\",\n  \"Manage Blueprints\": \"Administrar Blueprints\",\n  \"All Entries\": \"Todas las entradas\",\n  \"Published Date\": \"Fecha de Publicación\",\n  \"Published\": \"Publicado\",\n  \"Expired\": \"Venció\",\n  \"Scheduled\": \"Programado\",\n  \"Hidden\": \"Oculto\",\n  \"Draft\": \"Borrador\",\n  \"Deleted\": \"Eliminado\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Activado\",\n  \"Schedule publish date\": \"Programar fecha de publicación\",\n  \"Set expiry date\": \"Establecer fecha de caducidad\",\n  \"View full slug\": \"Ver slug completo\",\n  \"Apply this Draft\": \"Aplicar este borrador\",\n  \"Remove\": \"Remover\",\n  \"Drafts are not visible on the website until they are applied.\": \"Los borradores no son visibles en el sitio web hasta que se aplican.\",\n  \"Save Draft\": \"Guardar borrador\",\n  \"Do you really want to discard the draft?\": \"¿De verdad quieres descartar el borrador?\",\n  \"Discard Draft\": \"Descartar borrador\",\n  \"Save & Apply Draft\": \"Guardar y aplicar borrador\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"¿Realmente desea eliminar el registro? También eliminará todos los borradores, si los hay.\",\n  \"Create New Draft\": \"Crear nuevo borrador\",\n  \"Select Draft to Edit\": \"Seleccionar borrador para editar\",\n  \"Edit the Primary Record\": \"Editar el registro principal\",\n  \"Unnamed Draft\": \"Borrador sin nombre\",\n  \"Notes\": \"Notas\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"El documento tiene cambios sin guardar. ¿Desea descartarlos y continuar con la creación de un nuevo borrador?\",\n  \"Preview\": \"Vista previa\",\n  \"Unsaved\": \"No guardado\",\n  \"put the draft notes here\": \"poner las notas del borrador aquí\",\n  \"Top Level\": \"Nivel superior\",\n  \"Draft name: draft notes\": \"Nombre del borrador: borrador de notas\",\n  \"Title\": \"Título\",\n  \"Publish Date\": \"Fecha de publicación\",\n  \"Expiry Date\": \"Fecha de caducidad\",\n  \"Entry Type\": \"Tipo de entrada\",\n  \"Handle\": \"Resolver\",\n  \"Collection\": \"Colección\",\n  \"Displays a collection of entries.\": \"Muestra una colección de entradas.\",\n  \"Global_\": \"Global\",\n  \"Makes globals available to the page.\": \"Hace que los globales estén disponibles para la página.\",\n  \"Section\": \"Sección\",\n  \"Defines a website section with a supporting entry.\": \"Define una sección de sitio web con una entrada de apoyo.\",\n  \"URL code (slug) used to find the primary record.\": \"Especifique el slug utilizado para encontrar el registro principal.\",\n  \"Default View\": \"Vista predeterminada\",\n  \"Use this page as a default entry point when previewing the record.\": \"Utilice esta página como punto de entrada predeterminado al obtener una vista previa del registro.\",\n  \"Full Slug\": \"Slug completo\",\n  \"Use the full slug when looking up the record.\": \"Use el slug completo cuando busque el registro.\",\n  \"Are you sure?\": \"¿Está seguro?\",\n  \"Delete Forever\": \"Borrar para siempre\",\n  \"This record is not visible because it has been deleted.\": \"Este registro no está visible porque se ha eliminado.\",\n  \"Restore this Record\": \"Restaurar este registro\",\n  \"Do you really want to delete this permanently?\": \"¿Realmente quieres eliminar esto de forma permanente?\",\n  \"ID (Primary Key)\": \"ID (clave principal)\",\n  \"Column name (index) to match with the primary record.\": \"Nombre de columna (índice) para que coincida con el registro principal.\",\n  \"Records Per Page\": \"Registros por página\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Número de registros para mostrar en una sola página. Deje vacío para deshabilitar la paginación.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Formato no válido de los registros por valor de página. El valor debe ser un número.\",\n  \"Pagination\": \"Paginación\",\n  \"Page Number\": \"Número de página\",\n  \"This value is used to determine what page the user is on.\": \"Este valor se utiliza para determinar en qué página se encuentra el usuario.\",\n  \"Sorting\": \"Clasificación\",\n  \"Sort by Column\": \"Ordenar por columna\",\n  \"Model column the records should be ordered by\": \"Modelo de columna por la que se deben ordenar los registros\",\n  \"Direction\": \"Dirección\",\n  \"Update :name Entries\": \"Actualizar Entradas :name\",\n  \"Update :name\": \"Actualizar: name\",\n  \":name Entry\": \"Entrada :name\",\n  \"All :name Items\": \"Todas las entradas de :name\",\n  \"Update Existing Records\": \"Actualizar registros existentes\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Marque esta casilla para actualizar registros que coincidan con el mismo ID, título o slug.\",\n  \"Copy\": \"Copiar\",\n  \"App\": \"Aplicación\",\n  \"Blueprints\": \"Planos\",\n  \"App Blueprint\": \"Plan de aplicación\",\n  \"Theme Blueprint\": \"Plano temático\",\n  \"Reset Structure\": \"Restablecer estructura\",\n  \"Structure has been reset\": \"La estructura se ha restablecido\",\n  \"Content\": \"Contenido\",\n  \"Global\": \"Global\",\n  \"Used as default entry point when previewing the record.\": \"Se utiliza como punto de entrada predeterminado al obtener una vista previa del registro.\",\n  \"Unnamed draft\": \"Borrador sin nombre\",\n  \"Top level\": \"Nivel superior\"\n}"
  },
  {
    "path": "modules/tailor/lang/et.json",
    "content": "{\n  \"Manage Entries\": \"Kirjete haldamine\",\n  \"Create :name Entry\": \"Loo :name sisestus\",\n  \"New :name\": \"New :name\",\n  \"Import Entries\": \"Kirjete importimine\",\n  \"Export Entries\": \"Ekspordi kirjed\",\n  \"First Draft\": \"Esimene mustand\",\n  \"Draft Saved\": \"Mustand salvestatud\",\n  \"Draft Applied\": \"Eelnõu rakendatud\",\n  \"Draft Created\": \"Mustand loodud\",\n  \"Draft Discarded\": \"Visatud mustand\",\n  \"Create Entry\": \"Loo kirje\",\n  \"Publish Entry\": \"Avalda kirje\",\n  \"Delete Entry\": \"Kustuta kirje\",\n  \"Entries have been disabled\": \"Kirjed on keelatud\",\n  \"Entries have been enabled\": \"Kirjed on lubatud\",\n  \"Entries have been deleted\": \"Kirjed on kustutatud\",\n  \"Entries have been restored\": \"Kirjed on taastatud\",\n  \"Entries have been duplicated\": \"Kirjed on dubleeritud\",\n  \"Manage Blueprints\": \"Hallake jooniseid\",\n  \"All Entries\": \"Kõik sissekanded\",\n  \"Published Date\": \"Avaldamise kuupäev\",\n  \"Published\": \"Avaldatud\",\n  \"Expired\": \"Aegunud\",\n  \"Scheduled\": \"Planeeritud\",\n  \"Hidden\": \"Peidetud\",\n  \"Draft\": \"Mustand\",\n  \"Deleted\": \"Kustutatud\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Lubatud\",\n  \"Schedule publish date\": \"Ajakava avaldamise kuupäev\",\n  \"Set expiry date\": \"Määrake aegumiskuupäev\",\n  \"View full slug\": \"Kuva täielik nälkjas\",\n  \"Apply this Draft\": \"Rakenda see mustand\",\n  \"Remove\": \"Eemalda\",\n  \"Drafts are not visible on the website until they are applied.\": \"Mustandid pole veebisaidil nähtavad enne, kui need on rakendatud.\",\n  \"Save Draft\": \"Salvesta mustand\",\n  \"Do you really want to discard the draft?\": \"Kas soovite tõesti mustandist loobuda?\",\n  \"Discard Draft\": \"Loobu mustand\",\n  \"Save & Apply Draft\": \"Salvesta ja rakenda mustand\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Kas soovite tõesti kirje kustutada? Samuti kustutab see kõik mustandid, kui neid on.\",\n  \"Create New Draft\": \"Loo uus mustand\",\n  \"Select Draft to Edit\": \"Valige redigeerimiseks mustand\",\n  \"Edit the Primary Record\": \"Redigeerige esmast kirjet\",\n  \"Unnamed Draft\": \"Nimetu mustand\",\n  \"Notes\": \"Märkmed\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokumendis on salvestamata muudatusi. Kas soovite neist loobuda ja jätkata uue mustandi loomist?\",\n  \"Preview\": \"Eelvaade\",\n  \"Unsaved\": \"Salvestamata\",\n  \"put the draft notes here\": \"pane märkmete mustand siia\",\n  \"Top Level\": \"Kõrgeim tase\",\n  \"Draft name: draft notes\": \"Mustandi nimi: mustandi märkmed\",\n  \"Title\": \"Pealkiri\",\n  \"Publish Date\": \"Avaldamise kuupäev\",\n  \"Expiry Date\": \"Aegumiskuupäev\",\n  \"Entry Type\": \"Kirje tüüp\",\n  \"Handle\": \"Käepide\",\n  \"Collection\": \"Kollektsioon\",\n  \"Displays a collection of entries.\": \"Kuvab kirjete kogu.\",\n  \"Global_\": \"Globaalne\",\n  \"Makes globals available to the page.\": \"Teeb globaalsed lehele kättesaadavaks.\",\n  \"Section\": \"jaotis\",\n  \"Defines a website section with a supporting entry.\": \"Määrab veebisaidi jaotise koos toetava kirjega.\",\n  \"URL code (slug) used to find the primary record.\": \"Määrake esmase kirje leidmiseks kasutatud nälkjas.\",\n  \"Default View\": \"Vaikevaade\",\n  \"Use this page as a default entry point when previewing the record.\": \"Kasutage seda lehte kirje eelvaate kuvamisel vaikimisi sisenemispunktina.\",\n  \"Full Slug\": \"Täielik nälkjas\",\n  \"Use the full slug when looking up the record.\": \"Kasutage kirje otsimisel täielikku nälkja.\",\n  \"Are you sure?\": \"Oled sa kindel?\",\n  \"Delete Forever\": \"Kustuta igavesti\",\n  \"This record is not visible because it has been deleted.\": \"See kirje pole nähtav, kuna see on kustutatud.\",\n  \"Restore this Record\": \"Taasta see kirje\",\n  \"Do you really want to delete this permanently?\": \"Kas soovite selle tõesti jäädavalt kustutada?\",\n  \"ID (Primary Key)\": \"ID (esmane võti)\",\n  \"Column name (index) to match with the primary record.\": \"Veeru nimi (indeks), et see sobiks põhikirjega.\",\n  \"Records Per Page\": \"Kirjeid lehekülje kohta\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Ühel lehel kuvatavate kirjete arv. Lehekülgede keelamiseks jätke tühjaks.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Kirjete lehekülje väärtuse vale vorming. Väärtus peaks olema arv.\",\n  \"Pagination\": \"Leheküljed\",\n  \"Page Number\": \"Lehekülje number\",\n  \"This value is used to determine what page the user is on.\": \"Seda väärtust kasutatakse selleks, et määrata, millisel lehel kasutaja on.\",\n  \"Sorting\": \"Sorteerimine\",\n  \"Sort by Column\": \"Sorteeri veeru järgi\",\n  \"Model column the records should be ordered by\": \"Mudeli veerg, mille järgi kirjed peavad olema järjestatud\",\n  \"Direction\": \"Suund\",\n  \"Update :name Entries\": \"Värskenda: nimi kirjed\",\n  \"Update :name\": \"Värskendus: nimi\",\n  \":name Entry\": \":nimi Sisenemine\",\n  \"All :name Items\": \"Kõik :name kanded\",\n  \"Update Existing Records\": \"Värskendage olemasolevaid kirjeid\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Märkige see ruut, et värskendada kirjeid, mis vastavad samale ID-le, pealkirjale või nälkjale.\",\n  \"Copy\": \"Kopeeri\",\n  \"App\": \"Rakendus\",\n  \"Blueprints\": \"Plaanid\",\n  \"App Blueprint\": \"Rakenduse plaan\",\n  \"Theme Blueprint\": \"Teema plaan\",\n  \"Reset Structure\": \"Lähtesta struktuur\",\n  \"Structure has been reset\": \"Struktuur on lähtestatud\",\n  \"Content\": \"Sisu\",\n  \"Global\": \"Globaalne\",\n  \"Used as default entry point when previewing the record.\": \"Kasutatakse kirje eelvaate kuvamisel vaikimisi sisenemispunktina.\"\n}"
  },
  {
    "path": "modules/tailor/lang/fa.json",
    "content": "{\n  \"Manage Entries\": \"مدیریت ورودی ها\",\n  \"Create :name Entry\": \"ایجاد :name Entry\",\n  \"New :name\": \"جدید: نام ورودی\",\n  \"Import Entries\": \"ورودی های وارداتی\",\n  \"Export Entries\": \"صادرات ورودی ها\",\n  \"First Draft\": \"پیش نویس اول\",\n  \"Draft Saved\": \"پیش نویس ذخیره شد\",\n  \"Draft Applied\": \"پیش نویس اعمال شد\",\n  \"Draft Created\": \"پیش نویس ایجاد شد\",\n  \"Draft Discarded\": \"پیش نویس حذف شد\",\n  \"Create Entry\": \"ایجاد ورودی\",\n  \"Publish Entry\": \"انتشار ورودی\",\n  \"Delete Entry\": \"حذف ورودی\",\n  \"Entries have been disabled\": \"ورودی ها غیرفعال شده است\",\n  \"Entries have been enabled\": \"ورودی ها فعال شده اند\",\n  \"Entries have been deleted\": \"ورودی ها حذف شده اند\",\n  \"Entries have been restored\": \"ورودی ها بازیابی شده اند\",\n  \"Entries have been duplicated\": \"ورودی ها تکراری شده اند\",\n  \"Manage Blueprints\": \"نقشه ها را مدیریت کنید\",\n  \"All Entries\": \"همه ورودی ها\",\n  \"Published Date\": \"تاریخ انتشار\",\n  \"Published\": \"منتشر شده\",\n  \"Expired\": \"منقضی شده\",\n  \"Scheduled\": \"برنامه ریزی شده است\",\n  \"Hidden\": \"پنهان شده است\",\n  \"Draft\": \"پیش نویس\",\n  \"Deleted\": \"حذف شده\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"فعال شد\",\n  \"Schedule publish date\": \"تاریخ انتشار را برنامه ریزی کنید\",\n  \"Set expiry date\": \"تاریخ انقضا را تنظیم کنید\",\n  \"View full slug\": \"مشاهده راب کامل\",\n  \"Apply this Draft\": \"این پیش نویس را اعمال کنید\",\n  \"Remove\": \"برداشتن\",\n  \"Drafts are not visible on the website until they are applied.\": \"پیش نویس ها تا زمانی که اعمال نشوند در وب سایت قابل مشاهده نیستند.\",\n  \"Save Draft\": \"ذخیره پیش نویس\",\n  \"Do you really want to discard the draft?\": \"آیا واقعاً می‌خواهید پیش‌نویس را کنار بگذارید؟\",\n  \"Discard Draft\": \"دور انداختن پیش نویس\",\n  \"Save & Apply Draft\": \"ذخیره و اعمال پیش نویس\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"آیا واقعاً می خواهید رکورد را حذف کنید؟ همچنین در صورت وجود، تمام پیش‌نویس‌ها را حذف می‌کند.\",\n  \"Create New Draft\": \"پیش نویس جدید ایجاد کنید\",\n  \"Select Draft to Edit\": \"پیش نویس را برای ویرایش انتخاب کنید\",\n  \"Edit the Primary Record\": \"رکورد اولیه را ویرایش کنید\",\n  \"Unnamed Draft\": \"پیش نویس بی نام\",\n  \"Notes\": \"یادداشت\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"سند دارای تغییرات ذخیره نشده است. آیا می‌خواهید آنها را نادیده بگیرید و به ایجاد پیش‌نویس جدید ادامه دهید؟\",\n  \"Preview\": \"پیش نمایش\",\n  \"Unsaved\": \"ذخیره نشده است\",\n  \"put the draft notes here\": \"یادداشت های پیش نویس را اینجا قرار دهید\",\n  \"Top Level\": \"سطح بالا\",\n  \"Draft name: draft notes\": \"نام پیش نویس: یادداشت های پیش نویس\",\n  \"Title\": \"عنوان\",\n  \"Publish Date\": \"تاریخ انتشار\",\n  \"Expiry Date\": \"تاریخ انقضا\",\n  \"Entry Type\": \"نوع ورودی\",\n  \"Handle\": \"رسیدگی\",\n  \"Collection\": \"مجموعه\",\n  \"Displays a collection of entries.\": \"مجموعه ای از ورودی ها را نمایش می دهد.\",\n  \"Global_\": \"جهانی\",\n  \"Makes globals available to the page.\": \"جهانی ها را در دسترس صفحه قرار می دهد.\",\n  \"Section\": \"بخش\",\n  \"Defines a website section with a supporting entry.\": \"یک بخش وب سایت را با یک ورودی پشتیبانی تعریف می کند.\",\n  \"URL code (slug) used to find the primary record.\": \"Slug مورد استفاده برای یافتن رکورد اولیه را مشخص کنید.\",\n  \"Default View\": \"نمای پیش فرض\",\n  \"Use this page as a default entry point when previewing the record.\": \"به عنوان نقطه ورودی پیش فرض هنگام پیش نمایش رکورد استفاده می شود.\",\n  \"Full Slug\": \"حلزون کامل\",\n  \"Use the full slug when looking up the record.\": \"هنگام جستجوی رکورد از اسلگ کامل استفاده کنید.\",\n  \"Are you sure?\": \"مطمئنی؟\",\n  \"Delete Forever\": \"برای همیشه حذف کنید\",\n  \"This record is not visible because it has been deleted.\": \"این رکورد قابل مشاهده نیست زیرا حذف شده است.\",\n  \"Restore this Record\": \"این رکورد را بازیابی کنید\",\n  \"Do you really want to delete this permanently?\": \"آیا واقعاً می خواهید این را برای همیشه حذف کنید؟\",\n  \"ID (Primary Key)\": \"شناسه (کلید اصلی)\",\n  \"Column name (index) to match with the primary record.\": \"نام ستون (شاخص) برای مطابقت با رکورد اولیه.\",\n  \"Records Per Page\": \"رکورد در هر صفحه\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"تعداد رکورد برای نمایش در یک صفحه برای غیرفعال کردن صفحه بندی، خالی بگذارید.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"فرمت رکوردها در هر مقدار صفحه نامعتبر است. مقدار باید یک عدد باشد.\",\n  \"Pagination\": \"صفحه بندی\",\n  \"Page Number\": \"شماره صفحه\",\n  \"This value is used to determine what page the user is on.\": \"این مقدار برای تعیین اینکه کاربر در چه صفحه ای است استفاده می شود.\",\n  \"Sorting\": \"مرتب سازی\",\n  \"Sort by Column\": \"مرتب سازی بر اساس ستون\",\n  \"Model column the records should be ordered by\": \"ستون مدل رکوردها باید بر اساس آن مرتب شوند\",\n  \"Direction\": \"جهت\",\n  \"Update :name Entries\": \"به روز رسانی: نام ورودی ها\",\n  \"Update :name\": \"به روز رسانی :name\",\n  \":name Entry\": \":نام ورودی\",\n  \"All :name Items\": \"همه: ورودی های نام\",\n  \"Update Existing Records\": \"به روز رسانی سوابق موجود\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"برای به‌روزرسانی رکوردهایی که با همان شناسه، عنوان یا اسلاگ مطابقت دارند، این کادر را علامت بزنید.\",\n  \"Copy\": \"کپی 🀄\",\n  \"App\": \"برنامه\",\n  \"Blueprints\": \"طرح‌ها\",\n  \"App Blueprint\": \"طرح اولیه برنامه\",\n  \"Theme Blueprint\": \"طرح اولیه تم\",\n  \"Reset Structure\": \"ساختار را بازنشانی کنید\",\n  \"Structure has been reset\": \"ساختار بازنشانی شده است\",\n  \"Content\": \"محتوا\"\n}"
  },
  {
    "path": "modules/tailor/lang/fi/lang.php",
    "content": "<?php return [\n  'blueprint' => [\n    'saved' => 'Blueprint tallennettu',\n    'reloaded' => 'Blueprint ladattu uudelleen',\n    'deleted' => 'Blueprint poistettu',\n    'delete' => 'Poista',\n    'new' => 'Uusi Blueprint',\n    'editor_node_name' => 'Blueprintit',\n    'upload_files' => 'Siirrä tiedoto(ja)',\n    'rename' => 'Nimeä uudelleen',\n    'create_directory' => 'Uusi kansio',\n    'editor_yaml' => 'YAML',\n    'error_loading' => 'Virhe ladattaessa blueprinttiä',\n    'not_found' => 'Blueprinttiä ei löydy',\n    'apply' => 'Tallenna & ota käyttöön',\n    'invalid_file' => 'Virheellinen tiedostonimi: :name. Nimessä voi olla vain alfanumeerisia symboleita, alaviiva, tavuviiva ja piste. Esimerkkejä löydät: blueprint.yaml, alakansio/blueprint.yaml',\n    'migrating' => 'Otetaan blueprint käyttöön',\n    'migrated' => 'Blueprintin käytöönotto onnistui',\n    'mixin' => 'Mixin',\n    'entry' => 'Entry',\n    'stream' => 'Stream',\n    'structure' => 'Structure',\n    'single' => 'Single',\n    'global' => 'Global / Configuration',\n  ],\n  'editor' => [\n    'create' => 'Luo',\n    'refresh' => 'Päivitä',\n    'blueprint' => 'Blueprint',\n    'invalid_type' => 'Tuntematon pohjan tyyppi.',\n    'error_no_doctype_permissions' => 'Sinulla ei ole hallinnointioikeutta kohteeseen: :doctype',\n  ],\n];\n"
  },
  {
    "path": "modules/tailor/lang/fi.json",
    "content": "{\n  \"Manage Entries\": \"Hallitse tietueita\",\n  \"Create :name Entry\": \"Luo :name -tietue\",\n  \"New :name\": \"Uusi :name\",\n  \"Import Entries\": \"Tuo tietueita\",\n  \"Export Entries\": \"Vie tietueet\",\n  \"First Draft\": \"Ensimmäinen luonnos\",\n  \"Draft Saved\": \"Luonnos tallennettu\",\n  \"Draft Applied\": \"Luonnos otettu käyttöön\",\n  \"Draft Created\": \"Luonnos luotu\",\n  \"Draft Discarded\": \"Luonnos hylätty\",\n  \"Create Entry\": \"Luo merkintä\",\n  \"Publish Entry\": \"Julkaise merkintä\",\n  \"Delete Entry\": \"Poista merkintä\",\n  \"Entries have been disabled\": \"Tietueet on poistettu käytöstä\",\n  \"Entries have been enabled\": \"Tietueet on otettu käyttöön\",\n  \"Entries have been deleted\": \"Tietueet on poistettu\",\n  \"Entries have been restored\": \"Tietueet on palautettu\",\n  \"Entries have been duplicated\": \"Merkinnät on monistettu\",\n  \"Manage Blueprints\": \"Hallitse piirteitä\",\n  \"All Entries\": \"Kaikki tietueet\",\n  \"Published Date\": \"Julkaisupäivämäärä\",\n  \"Published\": \"Julkaistu\",\n  \"Expired\": \"Vanhentunut\",\n  \"Scheduled\": \"Ajastettu\",\n  \"Hidden\": \"Piilotettu\",\n  \"Draft\": \"Luonnos\",\n  \"Deleted\": \"Poistettu\",\n  \"Slug\": \"Polku\",\n  \"Enabled\": \"Käytössä\",\n  \"Schedule publish date\": \"Ajasta julkaisupäivä\",\n  \"Set expiry date\": \"Aseta viimeinen näyttöpäivä\",\n  \"View full slug\": \"Näytä koko polku\",\n  \"Apply this Draft\": \"Julkaise luonnos\",\n  \"Remove\": \"Poista\",\n  \"Drafts are not visible on the website until they are applied.\": \"Luonnokset eivät näy verkkosivustolla ennen kuin ne on julkaistu.\",\n  \"Save Draft\": \"Tallenna luonnos\",\n  \"Do you really want to discard the draft?\": \"Haluatko todella hylätä luonnoksen?\",\n  \"Discard Draft\": \"Hylkää luonnos\",\n  \"Save & Apply Draft\": \"Tallenna luonnos\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Haluatko todella poistaa tietueen? Se myös poistaa kaikki luonnokset, jos sellaisia on.\",\n  \"Create New Draft\": \"Luo uusi luonnos\",\n  \"Select Draft to Edit\": \"Valitse muokattava luonnos\",\n  \"Edit the Primary Record\": \"Muokkaa ensisijaista tietuetta\",\n  \"Unnamed Draft\": \"Nimetön luonnos\",\n  \"Notes\": \"Muistiinpanot\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Asiakirjassa on tallentamattomia muutoksia. Haluatko hylätä ne ja jatkaa uuden luonnoksen luomista?\",\n  \"Preview\": \"Esikatselu\",\n  \"Unsaved\": \"Tallentamaton\",\n  \"put the draft notes here\": \"laita luonnoksen muistiinpanot tänne\",\n  \"Top Level\": \"Ylätaso\",\n  \"Draft name: draft notes\": \"Luonnoksen nimi: luonnosmuistiinpanot\",\n  \"Title\": \"Otsikko\",\n  \"Publish Date\": \"Julkaisupäivämäärä\",\n  \"Expiry Date\": \"Päättymispäivä\",\n  \"Entry Type\": \"Merkinnän tyyppi\",\n  \"Handle\": \"Kahva\",\n  \"Collection\": \"Kokoelma\",\n  \"Displays a collection of entries.\": \"Näyttää kokoelman merkintöjä.\",\n  \"Global_\": \"Globaali\",\n  \"Makes globals available to the page.\": \"Asettaa yleiset käytettäväksi sivulla.\",\n  \"Section\": \"Osio\",\n  \"Defines a website section with a supporting entry.\": \"Määrittää verkkosivuston osion tuetulla merkinnällä.\",\n  \"URL code (slug) used to find the primary record.\": \"Määritä polkutunnus, jota käytetään ensisijaisen tietueen löytämiseen.\",\n  \"Default View\": \"Oletusnäkymä\",\n  \"Use this page as a default entry point when previewing the record.\": \"Käytä tätä sivua oletusarvoisena aloituskohtana tietueen esikatselussa.\",\n  \"Full Slug\": \"Koko polku\",\n  \"Use the full slug when looking up the record.\": \"Käytä koko polkua, kun etsit tietuetta.\",\n  \"Are you sure?\": \"Oletko varma?\",\n  \"Delete Forever\": \"Poista pysyvästi\",\n  \"This record is not visible because it has been deleted.\": \"Tämä tietue ei ole näkyvissä, koska se on poistettu.\",\n  \"Restore this Record\": \"Palauta tämä tietue\",\n  \"Do you really want to delete this permanently?\": \"Haluatko varmasti poistaa tämän pysyvästi?\",\n  \"ID (Primary Key)\": \"ID (pääavain)\",\n  \"Column name (index) to match with the primary record.\": \"Sarakkeen nimi (indeksi) vastaamaan ensisijaiseen tietueeseen.\",\n  \"Records Per Page\": \"Tietueita per sivu\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Tietueiden määrä yhdellä sivulla. Jätä tyhjäksi poistaaksesi sivutuksen.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Virheellinen tietueita per sivu -arvon muoto. Arvon tulisi olla numero.\",\n  \"Pagination\": \"Sivutus\",\n  \"Page Number\": \"Sivunumero\",\n  \"This value is used to determine what page the user is on.\": \"Tämä arvo määrittää millä sivulla käyttäjä on.\",\n  \"Sorting\": \"Lajittelu\",\n  \"Sort by Column\": \"Lajittele sarakkeen mukaan\",\n  \"Model column the records should be ordered by\": \"Mallin sarake, jonka mukaan tietueet pitäisi järjestää\",\n  \"Direction\": \"Suunta\",\n  \"Update :name Entries\": \"Päivitä merkinnät :name\",\n  \"Update :name\": \"Päivitä :name\",\n  \":name Entry\": \":name -merkintä\",\n  \"All :name Items\": \"Kaikki :name -merkinnät\",\n  \"Update Existing Records\": \"Päivitä olemassa olevat tietueet\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Valitse tämä ruutu päivittääksesi tietueet, jotka vastaavat samaa tunnusta, otsikkoa tai slugia.\",\n  \"Copy\": \"Kopioi\",\n  \"App\": \"Sovellus\",\n  \"Blueprints\": \"piirustukset\",\n  \"App Blueprint\": \"Sovellussuunnitelma\",\n  \"Theme Blueprint\": \"Teeman suunnitelma\",\n  \"Reset Structure\": \"Palauta rakenne\",\n  \"Structure has been reset\": \"Rakenne on nollattu\",\n  \"Content\": \"Sisältö\",\n  \"Global\": \"Yleinen\",\n  \"Used as default entry point when previewing the record.\": \"Käytetään oletusmerkintänä tietueen esikatselussa.\",\n  \"Unnamed draft\": \"Nimetön luonnos\",\n  \"Top level\": \"Ylätaso\"\n}"
  },
  {
    "path": "modules/tailor/lang/fr/lang.php",
    "content": "<?php return [\n    'blueprint' => [\n        'saved' => 'Schéma enregistré',\n        'reloaded' => 'Schéma rechargé',\n        'deleted' => 'Schéma supprimé',\n        'delete' => 'Supprimer',\n        'new' => 'Nouveau schéma',\n        'editor_node_name' => 'Schémas',\n        'upload_files' => 'Importer un fichier (s) ',\n        'rename' => 'Renommer',\n        'create_directory' => 'Nouveau répertoire',\n        'editor_yaml' => 'YAML',\n        'error_loading' => 'Erreur de chargement de schéma',\n        'not_found' => 'Schéma introuvable',\n        'apply' => 'Enregistrer et Migréer',\n        'invalid_file' => 'Nom de fichier invalide :name. Les noms de fichiers ne peuvent contenir que des symboles alphanumériques, des tirets, des sous-tirets et des points. Quelques exemples de noms de fichiers corrects : blueprint.yaml, sous-repertoire/blueprint.yaml',\n        'migrating' => 'Migration du schéma',\n        'migrated' => 'Le schéma a été migré avec succès',\n        'mixin' => 'Mixin',\n        'entry' => 'Entrée',\n        'stream' => 'Flux',\n        'structure' => 'Structure',\n        'single' => 'Unique',\n        'global' => 'Global / Configuration',\n    ],\n    'editor' => [\n        'create' => 'Créer',\n        'refresh' => 'Rafraîchir',\n        'blueprint' => 'Schéma',\n        'invalid_type' => 'Type de modèle inconnu.',\n        'error_no_doctype_permissions' => 'Vous n\\'avez pas la permission de gérer le type de document :doctype',\n    ],\n];\n"
  },
  {
    "path": "modules/tailor/lang/fr.json",
    "content": "{\n  \"Manage Entries\": \"Gérer les entrées\",\n  \"Create :name Entry\": \"Créer une nouvelle entrée :name\",\n  \"New :name\": \"Nouveau nom\",\n  \"Import Entries\": \"Importer des entrées\",\n  \"Export Entries\": \"Exporter les entrées\",\n  \"First Draft\": \"Premier brouillon\",\n  \"Draft Saved\": \"Brouillon enregistré\",\n  \"Draft Applied\": \"Brouillon appliqué\",\n  \"Draft Created\": \"Brouillon créé\",\n  \"Draft Discarded\": \"Brouillon rejeté\",\n  \"Create Entry\": \"Créer une entrée\",\n  \"Publish Entry\": \"Publier l'entrée\",\n  \"Delete Entry\": \"Supprimer l'entrée\",\n  \"Entries have been disabled\": \"Les entrées ont été désactivées\",\n  \"Entries have been enabled\": \"Les entrées ont été activées\",\n  \"Entries have been deleted\": \"Les entrées ont été supprimées\",\n  \"Entries have been restored\": \"Les entrées ont été restaurées\",\n  \"Entries have been duplicated\": \"Les entrées ont été dupliquées\",\n  \"Manage Blueprints\": \"Gérer les plans\",\n  \"All Entries\": \"Toutes les entrées\",\n  \"Published Date\": \"Date de publication\",\n  \"Published\": \"Publié\",\n  \"Expired\": \"Expiré\",\n  \"Scheduled\": \"Planifié\",\n  \"Hidden\": \"Masqué\",\n  \"Draft\": \"Brouillon\",\n  \"Deleted\": \"Supprimé\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Activé\",\n  \"Schedule publish date\": \"Planifier la date de publication\",\n  \"Set expiry date\": \"Définir la date d'expiration\",\n  \"View full slug\": \"Voir le slug complet\",\n  \"Apply this Draft\": \"Appliquer ce brouillon\",\n  \"Remove\": \"Supprimer\",\n  \"Drafts are not visible on the website until they are applied.\": \"Les brouillons ne sont pas visibles sur le site Web tant qu'ils n'ont pas été appliqués.\",\n  \"Save Draft\": \"Enregistrer le brouillon\",\n  \"Do you really want to discard the draft?\": \"Voulez-vous vraiment supprimer le brouillon ?\",\n  \"Discard Draft\": \"Supprimer le brouillon\",\n  \"Save & Apply Draft\": \"Enregistrer et appliquer le brouillon\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Voulez-vous vraiment supprimer l'enregistrement ? Il supprimera également tous les brouillons s'il en existe.\",\n  \"Create New Draft\": \"Créer un nouveau brouillon\",\n  \"Select Draft to Edit\": \"Sélectionnez le brouillon à modifier\",\n  \"Edit the Primary Record\": \"Modifier l'enregistrement principal\",\n  \"Unnamed Draft\": \"Brouillon sans nom\",\n  \"Notes\": \"Notes\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Le document contient des modifications non enregistrées. Voulez-vous les supprimer et créer un nouveau brouillon ?\",\n  \"Preview\": \"Prévisualiser\",\n  \"Unsaved\": \"Non enregistré\",\n  \"put the draft notes here\": \"placer les notes de brouillon ici\",\n  \"Top Level\": \"Niveau supérieur\",\n  \"Draft name: draft notes\": \"Nom du brouillon : brouillon de notes\",\n  \"Title\": \"Titre\",\n  \"Publish Date\": \"Date de publication\",\n  \"Expiry Date\": \"Date d'expiration\",\n  \"Entry Type\": \"Type d'entrée\",\n  \"Handle\": \"Gérer\",\n  \"Collection\": \"Collection\",\n  \"Displays a collection of entries.\": \"Affiche une collection d'entrées.\",\n  \"Global_\": \"Mondial\",\n  \"Makes globals available to the page.\": \"Rend les variables globales disponibles pour la page.\",\n  \"Section\": \"Section\",\n  \"Defines a website section with a supporting entry.\": \"Définit une section de site Web avec une entrée donnée.\",\n  \"URL code (slug) used to find the primary record.\": \"Spécifiez le slug utilisé pour trouver l'enregistrement principal.\",\n  \"Default View\": \"Vue par défaut\",\n  \"Use this page as a default entry point when previewing the record.\": \"Utilisez cette page comme point d'entrée par défaut pour prévisualiser l'enregistrement.\",\n  \"Full Slug\": \"Slug complet\",\n  \"Use the full slug when looking up the record.\": \"Utilisez le slug complet lorsque vous recherchez l'enregistrement.\",\n  \"Are you sure?\": \"Êtes-vous certain?\",\n  \"Delete Forever\": \"Supprimer définitivement\",\n  \"This record is not visible because it has been deleted.\": \"Cet enregistrement n'est pas visible car il a été supprimé.\",\n  \"Restore this Record\": \"Restaurer cet enregistrement\",\n  \"Do you really want to delete this permanently?\": \"Êtes-vous certain de vouloir supprimer cet élément de manière définitive?\",\n  \"ID (Primary Key)\": \"ID (Clé primaire)\",\n  \"Column name (index) to match with the primary record.\": \"Nom de la colonne (index) à faire correspondre avec l'enregistrement principal.\",\n  \"Records Per Page\": \"Enregistrements par page\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Nombre d'enregistrements à afficher sur une seule page. Laissez vide pour désactiver la pagination.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Format invalide du nombre d'enregistrements par page. La valeur doit être un nombre.\",\n  \"Pagination\": \"Pagination\",\n  \"Page Number\": \"Numéro de page\",\n  \"This value is used to determine what page the user is on.\": \"Cette valeur est utilisée pour déterminer la page sur laquelle se trouve l'utilisateur.\",\n  \"Sorting\": \"Tri\",\n  \"Sort by Column\": \"Trier par colonne\",\n  \"Model column the records should be ordered by\": \"Colonne du modèle par laquelle les enregistrements doivent être triés\",\n  \"Direction\": \"Direction\",\n  \"Update :name Entries\": \"Mettre à jour les entrées :name\",\n  \"Update :name\": \"Mettre à jour :name\",\n  \":name Entry\": \"Entrée :name\",\n  \"All :name Items\": \"Toutes les entrées :name\",\n  \"Update Existing Records\": \"Mettre à jour les enregistrements existants\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Cochez cette case pour mettre à jour les enregistrements qui correspondent au même ID, titre ou slug.\",\n  \"Copy\": \"Copier\",\n  \"App\": \"Application\",\n  \"Blueprints\": \"Plans\",\n  \"App Blueprint\": \"Plan de l’application\",\n  \"Theme Blueprint\": \"Plan du thème\",\n  \"Reset Structure\": \"Réinitialiser la structure\",\n  \"Structure has been reset\": \"La structure a été réinitialisée\",\n  \"Content\": \"Contenu\",\n  \"Global\": \"Global\",\n  \"Used as default entry point when previewing the record.\": \"Utilisé comme point d'entrée par défaut lors de la prévisualisation de l'enregistrement.\",\n  \"Unnamed draft\": \"Brouillon sans nom\",\n  \"Top level\": \"Niveau supérieur\"\n}"
  },
  {
    "path": "modules/tailor/lang/hu.json",
    "content": "{\n  \"Manage Entries\": \"Bejegyzések kezelése\",\n  \"Create :name Entry\": \"Hozzon létre :name bejegyzést\",\n  \"New :name\": \"New :name\",\n  \"Import Entries\": \"Bejegyzések importálása\",\n  \"Export Entries\": \"Bejegyzések exportálása\",\n  \"First Draft\": \"Első piszkozat\",\n  \"Draft Saved\": \"Piszkozat mentve\",\n  \"Draft Applied\": \"Alkalmazott tervezet\",\n  \"Draft Created\": \"Vázlat létrehozva\",\n  \"Draft Discarded\": \"Piszkozat elvetve\",\n  \"Create Entry\": \"Bejegyzés létrehozása\",\n  \"Publish Entry\": \"Bejegyzés közzététele\",\n  \"Delete Entry\": \"Bejegyzés törlése\",\n  \"Entries have been disabled\": \"A bejegyzések letiltva\",\n  \"Entries have been enabled\": \"A bejegyzések engedélyezve vannak\",\n  \"Entries have been deleted\": \"A bejegyzések törölve\",\n  \"Entries have been restored\": \"A bejegyzések visszaállításra kerültek\",\n  \"Entries have been duplicated\": \"A bejegyzések duplikálva\",\n  \"Manage Blueprints\": \"Tervrajzok kezelése\",\n  \"All Entries\": \"Minden bejegyzés\",\n  \"Published Date\": \"Közzététel dátuma\",\n  \"Published\": \"Közzétett\",\n  \"Expired\": \"Lejárt\",\n  \"Scheduled\": \"Ütemezett\",\n  \"Hidden\": \"Rejtett\",\n  \"Draft\": \"Piszkozat\",\n  \"Deleted\": \"Törölve\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Engedélyezve\",\n  \"Schedule publish date\": \"Ütemezze be a közzététel dátumát\",\n  \"Set expiry date\": \"Állítsa be a lejárati dátumot\",\n  \"View full slug\": \"Teljes csiga megtekintése\",\n  \"Apply this Draft\": \"Alkalmazza ezt a tervezetet\",\n  \"Remove\": \"Távolítsa el\",\n  \"Drafts are not visible on the website until they are applied.\": \"A piszkozatok alkalmazásukig nem láthatók a weboldalon.\",\n  \"Save Draft\": \"Piszkozat mentése\",\n  \"Do you really want to discard the draft?\": \"Tényleg el akarja vetni a piszkozatot?\",\n  \"Discard Draft\": \"Piszkozat elvetése\",\n  \"Save & Apply Draft\": \"Piszkozat mentése és alkalmazása\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Biztosan törölni szeretné a rekordot? Ezenkívül törli az összes piszkozatot, ha van ilyen.\",\n  \"Create New Draft\": \"Új piszkozat létrehozása\",\n  \"Select Draft to Edit\": \"Válassza a Szerkesztendő Piszkozat lehetőséget\",\n  \"Edit the Primary Record\": \"Szerkessze az elsődleges rekordot\",\n  \"Unnamed Draft\": \"Névtelen piszkozat\",\n  \"Notes\": \"Megjegyzések\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"A dokumentum nem mentett módosításokat tartalmaz. Elveti őket, és folytatja az új piszkozat létrehozását?\",\n  \"Preview\": \"Előnézet\",\n  \"Unsaved\": \"Nincs mentve\",\n  \"put the draft notes here\": \"tedd ide a jegyzettervezeteket\",\n  \"Top Level\": \"Legmagasabb szint\",\n  \"Draft name: draft notes\": \"Piszkozat neve: vázlatjegyzet\",\n  \"Title\": \"Cím\",\n  \"Publish Date\": \"Közzététel dátuma\",\n  \"Expiry Date\": \"Lejárati dátum\",\n  \"Entry Type\": \"Bejegyzés típusa\",\n  \"Handle\": \"Fogantyú\",\n  \"Collection\": \"Gyűjtemény\",\n  \"Displays a collection of entries.\": \"Bejegyzések gyűjteményét jeleníti meg.\",\n  \"Global_\": \"Globális\",\n  \"Makes globals available to the page.\": \"Globálisokat tesz elérhetővé az oldal számára.\",\n  \"Section\": \"Szakasz\",\n  \"Defines a website section with a supporting entry.\": \"Meghatároz egy webhelyrészt támogató bejegyzéssel.\",\n  \"URL code (slug) used to find the primary record.\": \"Adja meg az elsődleges rekord megtalálásához használt csigát.\",\n  \"Default View\": \"Alapértelmezett nézet\",\n  \"Use this page as a default entry point when previewing the record.\": \"Használja ezt az oldalt alapértelmezett belépési pontként a rekord előnézetének megtekintésekor.\",\n  \"Full Slug\": \"Teljes slug\",\n  \"Use the full slug when looking up the record.\": \"Használja a teljes csigát, amikor megkeresi a rekordot.\",\n  \"Are you sure?\": \"Biztos benne?\",\n  \"Delete Forever\": \"Végleges törlés\",\n  \"This record is not visible because it has been deleted.\": \"A rekord nem látható, mert törölve lett.\",\n  \"Restore this Record\": \"Rekord visszaállítása\",\n  \"Do you really want to delete this permanently?\": \"Biztosan véglegesen törölni szeretné?\",\n  \"ID (Primary Key)\": \"Azonosító (elsődleges kulcs)\",\n  \"Column name (index) to match with the primary record.\": \"Az oszlop neve (index), amely megegyezik az elsődleges rekorddal.\",\n  \"Records Per Page\": \"Rekord per oldal\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Egy lapon megjelenítendő rekordok száma. Hagyja üresen az oldal lapozás kikapcsolásához.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"A rekord per oldal mező értéke érvénytelen. Az érték kizárólag szám lehet.\",\n  \"Pagination\": \"Oldal lapozás\",\n  \"Page Number\": \"Oldalszám\",\n  \"This value is used to determine what page the user is on.\": \"Az érték meghatározza, hogy a felhasználó melyik oldalon van.\",\n  \"Sorting\": \"Sorba rendezés\",\n  \"Sort by Column\": \"Oszlop szerinti sorba rendezés\",\n  \"Model column the records should be ordered by\": \"A sorbarendezés alapjául szolgáló adatbázis oszlop\",\n  \"Direction\": \"Irány\",\n  \"Update :name Entries\": \":name bejegyzések frissítése\",\n  \"Update :name\": \":name frissítése\",\n  \":name Entry\": \":name bejegyzés\",\n  \"All :name Items\": \"Minden :name bejegyzés\",\n  \"Update Existing Records\": \"Meglévő rekordok frissítése\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Jelöld be a négyzetet az azonos ID-val, címmel vagy sluggal rendelkező rekordok frissítéséhez.\",\n  \"Copy\": \"Másolás\",\n  \"App\": \"Alkalmazás\",\n  \"Blueprints\": \"Tervrajzok\",\n  \"App Blueprint\": \"Alkalmazásterv\",\n  \"Theme Blueprint\": \"Téma tervrajz\",\n  \"Reset Structure\": \"Szerkezet visszaállítása\",\n  \"Structure has been reset\": \"A szerkezet visszaállításra került\",\n  \"Content\": \"Tartalom\",\n  \"Global\": \"Globális\",\n  \"Used as default entry point when previewing the record.\": \"Alapértelmezett belépési pontként használatos a rekord előnézetekor.\",\n  \"Unnamed draft\": \"Névtelen piszkozat\",\n  \"Top level\": \"Legmagasabb szint\"\n}"
  },
  {
    "path": "modules/tailor/lang/id.json",
    "content": "{\n  \"Manage Entries\": \"Kelola Entri\",\n  \"Create :name Entry\": \"Buat :name Entri\",\n  \"New :name\": \"Baru :Nama Entri\",\n  \"Import Entries\": \"Impor Entri\",\n  \"Export Entries\": \"Ekspor Entri\",\n  \"First Draft\": \"Draf pertama\",\n  \"Draft Saved\": \"Draf Disimpan\",\n  \"Draft Applied\": \"Draf Terapan\",\n  \"Draft Created\": \"Draf Dibuat\",\n  \"Draft Discarded\": \"Draf Dibuang\",\n  \"Create Entry\": \"Buat Entri\",\n  \"Publish Entry\": \"Publikasikan Entri\",\n  \"Delete Entry\": \"Hapus Entri\",\n  \"Entries have been disabled\": \"Entri telah dinonaktifkan\",\n  \"Entries have been enabled\": \"Entri telah diaktifkan\",\n  \"Entries have been deleted\": \"Entri telah dihapus\",\n  \"Entries have been restored\": \"Entri telah dipulihkan\",\n  \"Entries have been duplicated\": \"Entri telah digandakan\",\n  \"Manage Blueprints\": \"Kelola Cetak Biru\",\n  \"All Entries\": \"Semua masukan\",\n  \"Published Date\": \"Tanggal publikasi\",\n  \"Published\": \"Diterbitkan\",\n  \"Expired\": \"Kedaluwarsa\",\n  \"Scheduled\": \"Terjadwal\",\n  \"Hidden\": \"Tersembunyi\",\n  \"Draft\": \"Konsep\",\n  \"Deleted\": \"Dihapus\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Diaktifkan\",\n  \"Schedule publish date\": \"Jadwalkan tanggal publikasi\",\n  \"Set expiry date\": \"Tetapkan tanggal kedaluwarsa\",\n  \"View full slug\": \"Lihat siput penuh\",\n  \"Apply this Draft\": \"Terapkan Draf ini\",\n  \"Remove\": \"Menghapus\",\n  \"Drafts are not visible on the website until they are applied.\": \"Draf tidak terlihat di situs web sampai diterapkan.\",\n  \"Save Draft\": \"Menyimpan konsep\",\n  \"Do you really want to discard the draft?\": \"Apakah Anda benar-benar ingin membuang draf?\",\n  \"Discard Draft\": \"Buang Draf\",\n  \"Save & Apply Draft\": \"Simpan & Terapkan Draf\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Apakah Anda benar-benar ingin menghapus catatan? Ini juga akan menghapus semua draf jika ada.\",\n  \"Create New Draft\": \"Buat Draf baru\",\n  \"Select Draft to Edit\": \"Pilih Draf untuk Diedit\",\n  \"Edit the Primary Record\": \"Edit Rekaman Utama\",\n  \"Unnamed Draft\": \"Draf tanpa nama\",\n  \"Notes\": \"Catatan\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokumen memiliki perubahan yang belum disimpan. Apakah Anda ingin membuangnya dan melanjutkan dengan membuat draf baru?\",\n  \"Preview\": \"Pratinjau\",\n  \"Unsaved\": \"Belum disimpan\",\n  \"put the draft notes here\": \"letakkan draft catatan di sini\",\n  \"Top Level\": \"Level tertinggi\",\n  \"Draft name: draft notes\": \"Nama draf: catatan draf\",\n  \"Title\": \"Judul\",\n  \"Publish Date\": \"Tanggal Publikasi\",\n  \"Expiry Date\": \"Tanggal kadaluarsa\",\n  \"Entry Type\": \"Jenis entri\",\n  \"Handle\": \"Menangani\",\n  \"Collection\": \"Koleksi\",\n  \"Displays a collection of entries.\": \"Menampilkan kumpulan entri.\",\n  \"Global_\": \"Global\",\n  \"Makes globals available to the page.\": \"Membuat global tersedia untuk halaman.\",\n  \"Section\": \"Bagian\",\n  \"Defines a website section with a supporting entry.\": \"Mendefinisikan bagian situs web dengan entri pendukung.\",\n  \"URL code (slug) used to find the primary record.\": \"Tentukan slug yang digunakan untuk menemukan record utama.\",\n  \"Default View\": \"Tampilan Default\",\n  \"Use this page as a default entry point when previewing the record.\": \"Digunakan sebagai titik masuk default saat melihat pratinjau rekaman.\",\n  \"Full Slug\": \"Siput Penuh\",\n  \"Use the full slug when looking up the record.\": \"Gunakan siput penuh saat mencari catatan.\",\n  \"Are you sure?\": \"Apa kamu yakin?\",\n  \"Delete Forever\": \"Hapus selamanya\",\n  \"This record is not visible because it has been deleted.\": \"Catatan ini tidak terlihat karena telah dihapus.\",\n  \"Restore this Record\": \"Pulihkan Catatan ini\",\n  \"Do you really want to delete this permanently?\": \"Apakah Anda benar-benar ingin menghapus ini secara permanen?\",\n  \"ID (Primary Key)\": \"ID (Kunci Utama)\",\n  \"Column name (index) to match with the primary record.\": \"Nama kolom (indeks) untuk dicocokkan dengan catatan utama.\",\n  \"Records Per Page\": \"Rekaman Per Halaman\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Jumlah catatan untuk ditampilkan pada satu halaman. Biarkan kosong untuk menonaktifkan paginasi.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Format catatan per nilai halaman tidak valid. Nilainya harus berupa angka.\",\n  \"Pagination\": \"Paginasi\",\n  \"Page Number\": \"Nomor halaman\",\n  \"This value is used to determine what page the user is on.\": \"Nilai ini digunakan untuk menentukan di halaman mana pengguna berada.\",\n  \"Sorting\": \"Penyortiran\",\n  \"Sort by Column\": \"Urutkan berdasarkan Kolom\",\n  \"Model column the records should be ordered by\": \"Model kolom catatan harus dipesan oleh\",\n  \"Direction\": \"Arah\",\n  \"Update :name Entries\": \"Perbarui :nama Entri\",\n  \"Update :name\": \"Perbarui :nama\",\n  \":name Entry\": \": nama Entri\",\n  \"All :name Items\": \"Semua : nama Entri\",\n  \"Update Existing Records\": \"Perbarui Catatan yang Ada\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Centang kotak ini untuk memperbarui rekaman yang cocok dengan ID, judul, atau slug yang sama.\",\n  \"Copy\": \"Menyalin\",\n  \"App\": \"Aplikasi\",\n  \"Blueprints\": \"Cetak Biru\",\n  \"App Blueprint\": \"Rancangan Aplikasi\",\n  \"Theme Blueprint\": \"Rancangan Tema\",\n  \"Reset Structure\": \"Atur Ulang Struktur\",\n  \"Structure has been reset\": \"Struktur telah diatur ulang\",\n  \"Content\": \"Isi\"\n}"
  },
  {
    "path": "modules/tailor/lang/it.json",
    "content": "{\n  \"Manage Entries\": \"Gestisci voci\",\n  \"Create :name Entry\": \"Crea :name voce\",\n  \"New :name\": \"Nuovo :name voce\",\n  \"Import Entries\": \"Importa voci\",\n  \"Export Entries\": \"Esporta voci\",\n  \"First Draft\": \"Prima bozza\",\n  \"Draft Saved\": \"Bozza salvata\",\n  \"Draft Applied\": \"Bozza applicata\",\n  \"Draft Created\": \"Bozza creata\",\n  \"Draft Discarded\": \"Bozza scartata\",\n  \"Create Entry\": \"Crea voce\",\n  \"Publish Entry\": \"Pubblica voce\",\n  \"Delete Entry\": \"Elimina voce\",\n  \"Entries have been disabled\": \"Le voci sono state disabilitate\",\n  \"Entries have been enabled\": \"Le voci sono state abilitate\",\n  \"Entries have been deleted\": \"Le voci sono state cancellate\",\n  \"Entries have been restored\": \"Le voci sono state ripristinate\",\n  \"Entries have been duplicated\": \"Le voci sono state duplicate\",\n  \"Manage Blueprints\": \"Gestisci progetti\",\n  \"All Entries\": \"Tutte le voci\",\n  \"Published Date\": \"Data di pubblicazione\",\n  \"Published\": \"Pubblicato\",\n  \"Expired\": \"È scaduto\",\n  \"Scheduled\": \"Programmato\",\n  \"Hidden\": \"Nascosto\",\n  \"Draft\": \"Brutta copia\",\n  \"Deleted\": \"Eliminato\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Abilitato\",\n  \"Schedule publish date\": \"Pianifica la data di pubblicazione\",\n  \"Set expiry date\": \"Imposta la data di scadenza\",\n  \"View full slug\": \"Visualizza lo slug completo\",\n  \"Apply this Draft\": \"Applica questa bozza\",\n  \"Remove\": \"Rimuovere\",\n  \"Drafts are not visible on the website until they are applied.\": \"Le bozze non sono visibili sul sito finché non vengono applicate.\",\n  \"Save Draft\": \"Salva la bozza\",\n  \"Do you really want to discard the draft?\": \"Vuoi davvero scartare la bozza?\",\n  \"Discard Draft\": \"Scarta bozza\",\n  \"Save & Apply Draft\": \"Salva e applica bozza\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Vuoi davvero eliminare il record? Eliminerà anche tutte le bozze, se presenti.\",\n  \"Create New Draft\": \"Crea una nuova bozza\",\n  \"Select Draft to Edit\": \"Seleziona Bozza da modificare\",\n  \"Edit the Primary Record\": \"Modifica il record principale\",\n  \"Unnamed Draft\": \"Bozza senza nome\",\n  \"Notes\": \"Appunti\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Il documento ha modifiche non salvate. Vuoi scartarli e procedere con la creazione di una nuova bozza?\",\n  \"Preview\": \"Anteprima\",\n  \"Unsaved\": \"Non salvato\",\n  \"put the draft notes here\": \"metti qui la bozza delle note\",\n  \"Top Level\": \"Livello superiore\",\n  \"Draft name: draft notes\": \"Nome della bozza: bozza delle note\",\n  \"Title\": \"Titolo\",\n  \"Publish Date\": \"Data di pubblicazione\",\n  \"Expiry Date\": \"Data di scadenza\",\n  \"Entry Type\": \"Tipo di ingresso\",\n  \"Handle\": \"Maneggiare\",\n  \"Collection\": \"Collezione\",\n  \"Displays a collection of entries.\": \"Visualizza una raccolta di voci.\",\n  \"Global_\": \"Globale\",\n  \"Makes globals available to the page.\": \"Rende disponibili i globali alla pagina.\",\n  \"Section\": \"Sezione\",\n  \"Defines a website section with a supporting entry.\": \"Definisce una sezione del sito Web con una voce di supporto.\",\n  \"URL code (slug) used to find the primary record.\": \"Specificare lo slug utilizzato per trovare il record principale.\",\n  \"Default View\": \"Visualizzazione predefinita\",\n  \"Use this page as a default entry point when previewing the record.\": \"Utilizzato come punto di ingresso predefinito durante l'anteprima del record.\",\n  \"Full Slug\": \"Lumaca piena\",\n  \"Use the full slug when looking up the record.\": \"Usa lo slug pieno quando cerchi il record.\",\n  \"Are you sure?\": \"Sei sicuro?\",\n  \"Delete Forever\": \"Elimina per sempre\",\n  \"This record is not visible because it has been deleted.\": \"Questo record non è visibile perché è stato eliminato.\",\n  \"Restore this Record\": \"Ripristina questo record\",\n  \"Do you really want to delete this permanently?\": \"Vuoi davvero eliminarlo definitivamente?\",\n  \"ID (Primary Key)\": \"ID (chiave primaria)\",\n  \"Column name (index) to match with the primary record.\": \"Nome della colonna (indice) da abbinare al record principale.\",\n  \"Records Per Page\": \"Record per pagina\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Numero di record da visualizzare su una singola pagina. Lascia vuoto per disabilitare l'impaginazione.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Formato non valido dei record per valore di pagina. Il valore dovrebbe essere un numero.\",\n  \"Pagination\": \"Impaginazione\",\n  \"Page Number\": \"Numero di pagina\",\n  \"This value is used to determine what page the user is on.\": \"Questo valore viene utilizzato per determinare su quale pagina si trova l'utente.\",\n  \"Sorting\": \"Ordinamento\",\n  \"Sort by Column\": \"Ordina per colonna\",\n  \"Model column the records should be ordered by\": \"Colonna del modello in base alla quale devono essere ordinati i record\",\n  \"Direction\": \"Direzione\",\n  \"Update :name Entries\": \"Aggiorna: nomina le voci\",\n  \"Update :name\": \"Aggiorna: nome\",\n  \":name Entry\": \":name Voce\",\n  \"All :name Items\": \"Tutte le voci :name\",\n  \"Update Existing Records\": \"Aggiorna record esistenti\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Seleziona questa casella per aggiornare i record che corrispondono allo stesso ID, titolo o slug.\",\n  \"Copy\": \"copia\",\n  \"App\": \"Applicazione\",\n  \"Blueprints\": \"Progetti\",\n  \"App Blueprint\": \"Progetto dell'app\",\n  \"Theme Blueprint\": \"Progetto tematico\",\n  \"Reset Structure\": \"Ripristina struttura\",\n  \"Structure has been reset\": \"La struttura è stata ripristinata\",\n  \"Content\": \"Contenuto\"\n}"
  },
  {
    "path": "modules/tailor/lang/ja.json",
    "content": "{\n  \"Manage Entries\": \"エントリの管理\",\n  \"Create :name Entry\": \":nameエントリを作成します\",\n  \"New :name\": \"新しい :name エントリ\",\n  \"Import Entries\": \"エントリのインポート\",\n  \"Export Entries\": \"エントリのエクスポート\",\n  \"First Draft\": \"最初のドラフト\",\n  \"Draft Saved\": \"ドラフトを保存しました\",\n  \"Draft Applied\": \"ドラフトが適用されました\",\n  \"Draft Created\": \"ドラフトが作成されました\",\n  \"Draft Discarded\": \"ドラフトは破棄されました\",\n  \"Create Entry\": \"エントリの作成\",\n  \"Publish Entry\": \"エントリの公開\",\n  \"Delete Entry\": \"記入を消す\",\n  \"Entries have been disabled\": \"エントリが無効になりました\",\n  \"Entries have been enabled\": \"エントリが有効になりました\",\n  \"Entries have been deleted\": \"エントリが削除されました\",\n  \"Entries have been restored\": \"エントリが復元されました\",\n  \"Entries have been duplicated\": \"エントリが重複しています\",\n  \"Manage Blueprints\": \"ブループリントを管理する\",\n  \"All Entries\": \"すべてのエントリ\",\n  \"Published Date\": \"公開日\",\n  \"Published\": \"公開済み\",\n  \"Expired\": \"期限切れ\",\n  \"Scheduled\": \"予定\",\n  \"Hidden\": \"隠れた\",\n  \"Draft\": \"下書き\",\n  \"Deleted\": \"削除されました\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"有効\",\n  \"Schedule publish date\": \"公開予定日\",\n  \"Set expiry date\": \"有効期限を設定する\",\n  \"View full slug\": \"スラッグ全体を見る\",\n  \"Apply this Draft\": \"このドラフトを適用する\",\n  \"Remove\": \"削除する\",\n  \"Drafts are not visible on the website until they are applied.\": \"下書きは、適用されるまでWebサイトに表示されません。\",\n  \"Save Draft\": \"下書きを保存\",\n  \"Do you really want to discard the draft?\": \"本当に下書きを破棄しますか?\",\n  \"Discard Draft\": \"下書きを破棄\",\n  \"Save & Apply Draft\": \"下書きを保存して適用\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"本当にレコードを削除しますか?また、存在する場合はすべての下書きを削除します。\",\n  \"Create New Draft\": \"新しい下書きを作成\",\n  \"Select Draft to Edit\": \"編集する下書きを選択\",\n  \"Edit the Primary Record\": \"プライマリ レコードを編集する\",\n  \"Unnamed Draft\": \"名前のない下書き\",\n  \"Notes\": \"ノート\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"ドキュメントには保存されていない変更があります。それらを破棄して、新しい下書きの作成を続行しますか?\",\n  \"Preview\": \"プレビュー\",\n  \"Unsaved\": \"未保存\",\n  \"put the draft notes here\": \"ここに下書きメモを入れる\",\n  \"Top Level\": \"トップレベル\",\n  \"Draft name: draft notes\": \"ドラフト名: ドラフトノート\",\n  \"Title\": \"題名\",\n  \"Publish Date\": \"発行日\",\n  \"Expiry Date\": \"有効期限\",\n  \"Entry Type\": \"エントリータイプ\",\n  \"Handle\": \"扱う\",\n  \"Collection\": \"コレクション\",\n  \"Displays a collection of entries.\": \"エントリのコレクションを表示します。\",\n  \"Global_\": \"グローバル\",\n  \"Makes globals available to the page.\": \"ページでグローバルを使用できるようにします。\",\n  \"Section\": \"セクション\",\n  \"Defines a website section with a supporting entry.\": \"サポート エントリを含む Web サイト セクションを定義します。\",\n  \"URL code (slug) used to find the primary record.\": \"プライマリ レコードの検索に使用するスラッグを指定します。\",\n  \"Default View\": \"デフォルトビュー\",\n  \"Use this page as a default entry point when previewing the record.\": \"レコードをプレビューするときのデフォルトのエントリ ポイントとして使用されます。\",\n  \"Full Slug\": \"フルスラッグ\",\n  \"Use the full slug when looking up the record.\": \"レコードを検索するときは、完全なスラッグを使用します。\",\n  \"Are you sure?\": \"本気ですか？\",\n  \"Delete Forever\": \"永久に削除\",\n  \"This record is not visible because it has been deleted.\": \"このレコードは削除されているため表示されません。\",\n  \"Restore this Record\": \"このレコードを復元する\",\n  \"Do you really want to delete this permanently?\": \"本当にこれを完全に削除しますか?\",\n  \"ID (Primary Key)\": \"ID（主キー）\",\n  \"Column name (index) to match with the primary record.\": \"プライマリ レコードと照合する列名 (インデックス)。\",\n  \"Records Per Page\": \"ページあたりのレコード数\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"1 ページに表示するレコードの数。ページネーションを無効にするには、空のままにします。\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"ページごとのレコードの値の形式が無効です。値は数値である必要があります。\",\n  \"Pagination\": \"ページネーション\",\n  \"Page Number\": \"ページ番号\",\n  \"This value is used to determine what page the user is on.\": \"この値は、ユーザーがどのページにいるかを判断するために使用されます。\",\n  \"Sorting\": \"仕分け\",\n  \"Sort by Column\": \"列で並べ替え\",\n  \"Model column the records should be ordered by\": \"レコードの順序付けに必要なモデル列\",\n  \"Direction\": \"方向\",\n  \"Update :name Entries\": \":name エントリを更新\",\n  \"Update :name\": \"更新:名前\",\n  \":name Entry\": \":name エントリ\",\n  \"All :name Items\": \"すべての:name エントリ\",\n  \"Update Existing Records\": \"既存のレコードを更新する\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"同じ ID、タイトル、またはスラッグに一致するレコードを更新するには、このボックスをチェックします。\",\n  \"Copy\": \"コピー\",\n  \"App\": \"アプリ\",\n  \"Blueprints\": \"設計図\",\n  \"App Blueprint\": \"アプリブループリント\",\n  \"Theme Blueprint\": \"テーマブループリント\",\n  \"Reset Structure\": \"構造をリセット\",\n  \"Structure has been reset\": \"構造がリセットされました\",\n  \"Content\": \"コンテンツ\"\n}"
  },
  {
    "path": "modules/tailor/lang/kaa.json",
    "content": "{\n    \"Manage Entries\": \"Jazbalardı basqarıw\",\n    \"Create :name Entry\": \"Jazba jaratıw :name\",\n    \"New :name\": \"New :name\",\n    \"Import Entries\": \"Jazbalardı importlaw\",\n    \"Export Entries\": \"Jazbalardı eksportlaw\",\n    \"First Draft\": \"Birinshi qaralama\",\n    \"Draft Saved\": \"Qaralama saqlandı\",\n    \"Draft Applied\": \"Qaralama qollanıldı\",\n    \"Draft Created\": \"Qaralama jaratıldı\",\n    \"Draft Discarded\": \"Qaralama óshirildi\",\n    \"Create Entry\": \"Jazba jaratıw\",\n    \"Publish Entry\": \"Jazbanı járiyalaw\",\n    \"Delete Entry\": \"Jazbanı óshiriw\",\n    \"Entries have been disabled\": \"Jazbalar óshirildi\",\n    \"Entries have been enabled\": \"Jazbalar qosıldı\",\n    \"Entries have been deleted\": \"Jazbalar óshirildi\",\n    \"Entries have been restored\": \"Jazbalar tiklendi\",\n    \"Entries have been duplicated\": \"Jazbalar nusqalandı\",\n    \"Manage Blueprints\": \"Manage Blueprints\",\n    \"All Entries\": \"Barlıq jazbalar\",\n    \"Published Date\": \"Járiyalanǵan waqtı\",\n    \"Published\": \"Published\",\n    \"Expired\": \"Expired\",\n    \"Scheduled\": \"Rejelestirilgen\",\n    \"Hidden\": \"Jasırın\",\n    \"Draft\": \"Qaralama\",\n    \"Deleted\": \"Óshirildi\",\n    \"Slug\": \"Slug\",\n    \"Enabled\": \"Qosılǵan\",\n    \"Schedule publish date\": \"Járiyalaw waqtın rejelestiriw\",\n    \"Set expiry date\": \"Set expiry date\",\n    \"View full slug\": \"Tolıq slugtı kóriw\",\n    \"Apply this Draft\": \"Apply this Draft\",\n    \"Remove\": \"Óshiriw\",\n    \"Drafts are not visible on the website until they are applied.\": \"Drafts are not visible on the website until they are applied.\",\n    \"Save Draft\": \"Qaralamanı saqlaw\",\n    \"Do you really want to discard the draft?\": \"Bul qaralamanı óshiriwge isenimińiz kámil me?\",\n    \"Discard Draft\": \"Qaralamanı óshiriw\",\n    \"Save & Apply Draft\": \"Qaralamanı saqlaw hám qollanıw\",\n    \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Do you really want to delete the record? It will also delete all drafts if any exist.\",\n    \"Create New Draft\": \"Jańa qaralama jaratıw\",\n    \"Select Draft to Edit\": \"Ózgertiw ushın qaralamanı tańlań\",\n    \"Edit the Primary Record\": \"Tiykarǵı jazbanı ózgertiw\",\n    \"Unnamed Draft\": \"Atamasız qaralama\",\n    \"Notes\": \"Notes\",\n    \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Hújjet saqlanbaǵan ózerislerge iye. Olardı óshirip jańa qaralama jaratıwdı qáleysiz be?\",\n    \"Preview\": \"Aldınnan kóriw\",\n    \"Unsaved\": \"Saqlanbaǵan\",\n    \"put the draft notes here\": \"put the draft notes here\",\n    \"Top Level\": \"Joqarǵı dáreje\",\n    \"Draft name: draft notes\": \"Draft name: draft notes\",\n    \"Title\": \"Baslama\",\n    \"Publish Date\": \"Járiyalaw waqtı\",\n    \"Expiry Date\": \"Expiry Date\",\n    \"Entry Type\": \"Jazba túri\",\n    \"Handle\": \"Handle\",\n    \"Collection\": \"Toplam\",\n    \"Displays a collection of entries.\": \"Jazbalar toplamın kórsetedi.\",\n    \"Global_\": \"Global\",\n    \"Makes globals available to the page.\": \"Makes globals available to the page.\",\n    \"Section\": \"Bólim\",\n    \"Defines a website section with a supporting entry.\": \"Defines a website section with a supporting entry.\",\n    \"URL code (slug) used to find the primary record.\": \"URL code (slug) used to find the primary record.\",\n    \"Default View\": \"Default View\",\n    \"Use this page as a default entry point when previewing the record.\": \"Use this page as a default entry point when previewing the record.\",\n    \"Full Slug\": \"Full Slug\",\n    \"Use the full slug when looking up the record.\": \"Use the full slug when looking up the record.\",\n    \"Are you sure?\": \"Isenimińiz kámil me?\",\n    \"Delete Forever\": \"Mángige óshiriw\",\n    \"This record is not visible because it has been deleted.\": \"This record is not visible because it has been deleted.\",\n    \"Restore this Record\": \"Jazbanı tiklew\",\n    \"Do you really want to delete this permanently?\": \"Bunı pútkilley óshiriwge isenimińiz kámil me?\",\n    \"ID (Primary Key)\": \"ID (Tiykarǵı gilt)\",\n    \"Column name (index) to match with the primary record.\": \"Column name (index) to match with the primary record.\",\n    \"Records Per Page\": \"Records Per Page\",\n    \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Bir bette kórsetiw kerek bolǵan jazbalar sanı. Paginaciyanı óshiriw ushın bos qaldırıń.\",\n    \"Invalid format of the records per page value. The value should be a number.\": \"Invalid format of the records per page value. The value should be a number.\",\n    \"Pagination\": \"Paginaciya\",\n    \"Page Number\": \"Bet nomeri\",\n    \"This value is used to determine what page the user is on.\": \"This value is used to determine what page the user is on.\",\n    \"Sorting\": \"Tártiplestiriw\",\n    \"Sort by Column\": \"Qatar boyınsha tártiplestiriw\",\n    \"Model column the records should be ordered by\": \"Model column the records should be ordered by\",\n    \"Direction\": \"Baǵdar\",\n    \"Update :name Entries\": \"Jazbalardı jańalaw :name\",\n    \"Update :name\": \"Jańalaw :name\",\n    \":name Entry\": \"Jazba :name\",\n    \"All :name Items\": \"Barlıq jazbalar :name\",\n    \"Update Existing Records\": \"Bar jazbalardı jańalaw\",\n    \"Check this box to update records that match the same ID, title or slug.\": \"Check this box to update records that match the same ID, title or slug.\",\n    \"Copy\": \"Kóshirip alıw\"\n}\n"
  },
  {
    "path": "modules/tailor/lang/kk.json",
    "content": "{\n    \"Manage Entries\": \"Жазбаларды басқару\",\n    \"Create :name Entry\": \"Жазба жасау :name\",\n    \"New :name\": \"Жаңа жазба :name\",\n    \"Import Entries\": \"Жазбаларды импорттау\",\n    \"Export Entries\": \"Жазбаларды экспорттау\",\n    \"First Draft\": \"Бірінші жоба\",\n    \"Draft Saved\": \"Жоба сақталды\",\n    \"Draft Applied\": \"Жоба қолданылды\",\n    \"Draft Created\": \"Жоба құрылды\",\n    \"Draft Discarded\": \"Жоба жойылды\",\n    \"Create Entry\": \"Жазба жасау\",\n    \"Publish Entry\": \"Жазбаны жариялау\",\n    \"Delete Entry\": \"Жазбаны жою\",\n    \"Entries have been disabled\": \"Entries have been disabled\",\n    \"Entries have been enabled\": \"Entries have been enabled\",\n    \"Entries have been deleted\": \"Entries have been deleted\",\n    \"Entries have been restored\": \"Entries have been restored\",\n    \"Entries have been duplicated\": \"Entries have been duplicated\",\n    \"Manage Blueprints\": \"Manage Blueprints\",\n    \"All Entries\": \"All Entries\",\n    \"Published Date\": \"Published Date\",\n    \"Published\": \"Published\",\n    \"Expired\": \"Expired\",\n    \"Scheduled\": \"Scheduled\",\n    \"Hidden\": \"Hidden\",\n    \"Draft\": \"Draft\",\n    \"Deleted\": \"Deleted\",\n    \"Slug\": \"Slug\",\n    \"Enabled\": \"Enabled\",\n    \"Schedule publish date\": \"Schedule publish date\",\n    \"Set expiry date\": \"Set expiry date\",\n    \"View full slug\": \"View full slug\",\n    \"Apply this Draft\": \"Apply this Draft\",\n    \"Remove\": \"Remove\",\n    \"Drafts are not visible on the website until they are applied.\": \"Drafts are not visible on the website until they are applied.\",\n    \"Save Draft\": \"Save Draft\",\n    \"Do you really want to discard the draft?\": \"Do you really want to discard the draft?\",\n    \"Discard Draft\": \"Discard Draft\",\n    \"Save & Apply Draft\": \"Save & Apply Draft\",\n    \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Do you really want to delete the record? It will also delete all drafts if any exist.\",\n    \"Create New Draft\": \"Create New Draft\",\n    \"Select Draft to Edit\": \"Select Draft to Edit\",\n    \"Edit the Primary Record\": \"Edit the Primary Record\",\n    \"Unnamed Draft\": \"Unnamed Draft\",\n    \"Notes\": \"Notes\",\n    \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\",\n    \"Preview\": \"Preview\",\n    \"Unsaved\": \"Unsaved\",\n    \"put the draft notes here\": \"put the draft notes here\",\n    \"Top Level\": \"Top Level\",\n    \"Draft name: draft notes\": \"Draft name: draft notes\",\n    \"Title\": \"Title\",\n    \"Publish Date\": \"Publish Date\",\n    \"Expiry Date\": \"Expiry Date\",\n    \"Entry Type\": \"Entry Type\",\n    \"Handle\": \"Handle\",\n    \"Collection\": \"Collection\",\n    \"Displays a collection of entries.\": \"Displays a collection of entries.\",\n    \"Global_\": \"Global\",\n    \"Makes globals available to the page.\": \"Makes globals available to the page.\",\n    \"Section\": \"Section\",\n    \"Defines a website section with a supporting entry.\": \"Defines a website section with a supporting entry.\",\n    \"URL code (slug) used to find the primary record.\": \"URL code (slug) used to find the primary record.\",\n    \"Default View\": \"Default View\",\n    \"Use this page as a default entry point when previewing the record.\": \"Use this page as a default entry point when previewing the record.\",\n    \"Full Slug\": \"Full Slug\",\n    \"Use the full slug when looking up the record.\": \"Use the full slug when looking up the record.\",\n    \"Are you sure?\": \"Are you sure?\",\n    \"Delete Forever\": \"Delete Forever\",\n    \"This record is not visible because it has been deleted.\": \"This record is not visible because it has been deleted.\",\n    \"Restore this Record\": \"Restore this Record\",\n    \"Do you really want to delete this permanently?\": \"Do you really want to delete this permanently?\",\n    \"ID (Primary Key)\": \"ID (Primary Key)\",\n    \"Column name (index) to match with the primary record.\": \"Column name (index) to match with the primary record.\",\n    \"Records Per Page\": \"Records Per Page\",\n    \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Number of records to display on a single page. Leave empty to disable pagination.\",\n    \"Invalid format of the records per page value. The value should be a number.\": \"Invalid format of the records per page value. The value should be a number.\",\n    \"Pagination\": \"Pagination\",\n    \"Page Number\": \"Page Number\",\n    \"This value is used to determine what page the user is on.\": \"This value is used to determine what page the user is on.\",\n    \"Sorting\": \"Sorting\",\n    \"Sort by Column\": \"Sort by Column\",\n    \"Model column the records should be ordered by\": \"Model column the records should be ordered by\",\n    \"Direction\": \"Direction\",\n    \"Update :name Entries\": \"Update :name Entries\",\n    \"Update :name\": \"Update :name\",\n    \":name Entry\": \":name Entry\",\n    \"All :name Items\": \"All :name Entries\",\n    \"Update Existing Records\": \"Update Existing Records\",\n    \"Check this box to update records that match the same ID, title or slug.\": \"Check this box to update records that match the same ID, title or slug.\",\n    \"Copy\": \"Copy\"\n}\n"
  },
  {
    "path": "modules/tailor/lang/ko.json",
    "content": "{\n  \"Manage Entries\": \"항목 관리\",\n  \"Create :name Entry\": \":name 항목 만들기\",\n  \"New :name\": \"새로운 :name 항목\",\n  \"Import Entries\": \"항목 가져오기\",\n  \"Export Entries\": \"항목 내보내기\",\n  \"First Draft\": \"첫 번째 드래프트\",\n  \"Draft Saved\": \"초안이 저장됨\",\n  \"Draft Applied\": \"초안이 적용됨\",\n  \"Draft Created\": \"초안 생성됨\",\n  \"Draft Discarded\": \"폐기된 초안\",\n  \"Create Entry\": \"항목 만들기\",\n  \"Publish Entry\": \"항목 게시\",\n  \"Delete Entry\": \"항목 삭제\",\n  \"Entries have been disabled\": \"항목이 비활성화되었습니다.\",\n  \"Entries have been enabled\": \"항목이 활성화되었습니다.\",\n  \"Entries have been deleted\": \"항목이 삭제되었습니다.\",\n  \"Entries have been restored\": \"항목이 복원되었습니다.\",\n  \"Entries have been duplicated\": \"항목이 중복되었습니다.\",\n  \"Manage Blueprints\": \"청사진 관리\",\n  \"All Entries\": \"모든 항목\",\n  \"Published Date\": \"발행일\",\n  \"Published\": \"게시됨\",\n  \"Expired\": \"만료됨\",\n  \"Scheduled\": \"예정\",\n  \"Hidden\": \"숨겨진\",\n  \"Draft\": \"초안\",\n  \"Deleted\": \"삭제됨\",\n  \"Slug\": \"강타\",\n  \"Enabled\": \"사용\",\n  \"Schedule publish date\": \"게시일 예약\",\n  \"Set expiry date\": \"만료일 설정\",\n  \"View full slug\": \"전체 슬러그 보기\",\n  \"Apply this Draft\": \"이 초안 적용\",\n  \"Remove\": \"제거하다\",\n  \"Drafts are not visible on the website until they are applied.\": \"초안은 적용될 때까지 웹 사이트에 표시되지 않습니다.\",\n  \"Save Draft\": \"임시 보관함에 저장\",\n  \"Do you really want to discard the draft?\": \"초안을 삭제하시겠습니까?\",\n  \"Discard Draft\": \"초안 버리기\",\n  \"Save & Apply Draft\": \"초안 저장 및 적용\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"레코드를 삭제하시겠습니까? 또한 존재하는 경우 모든 초안을 삭제합니다.\",\n  \"Create New Draft\": \"새 초안 만들기\",\n  \"Select Draft to Edit\": \"편집할 초안 선택\",\n  \"Edit the Primary Record\": \"기본 레코드 편집\",\n  \"Unnamed Draft\": \"이름 없는 초안\",\n  \"Notes\": \"노트\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"문서에 저장되지 않은 변경 사항이 있습니다. 삭제하고 새 초안 작성을 계속하시겠습니까?\",\n  \"Preview\": \"시사\",\n  \"Unsaved\": \"저장되지 않은\",\n  \"put the draft notes here\": \"여기에 초안 메모를 넣어\",\n  \"Top Level\": \"최상위\",\n  \"Draft name: draft notes\": \"초안 이름: 초안 메모\",\n  \"Title\": \"제목\",\n  \"Publish Date\": \"게시 날짜\",\n  \"Expiry Date\": \"만료일\",\n  \"Entry Type\": \"항목 유형\",\n  \"Handle\": \"핸들\",\n  \"Collection\": \"수집\",\n  \"Displays a collection of entries.\": \"항목 모음을 표시합니다.\",\n  \"Global_\": \"글로벌\",\n  \"Makes globals available to the page.\": \"페이지에서 전역을 사용할 수 있도록 합니다.\",\n  \"Section\": \"부분\",\n  \"Defines a website section with a supporting entry.\": \"지원 항목이 있는 웹사이트 섹션을 정의합니다.\",\n  \"URL code (slug) used to find the primary record.\": \"기본 레코드를 찾는 데 사용되는 URL 코드(슬러그)입니다.\",\n  \"Default View\": \"기본 보기\",\n  \"Use this page as a default entry point when previewing the record.\": \"레코드를 미리 볼 때 기본 진입점으로 사용됩니다.\",\n  \"Full Slug\": \"풀 슬러그\",\n  \"Use the full slug when looking up the record.\": \"레코드를 조회할 때 전체 슬러그를 사용하십시오.\",\n  \"Are you sure?\": \"확실합니까?\",\n  \"Delete Forever\": \"영구삭제\",\n  \"This record is not visible because it has been deleted.\": \"이 레코드는 삭제되었기 때문에 볼 수 없습니다.\",\n  \"Restore this Record\": \"이 레코드 복원\",\n  \"Do you really want to delete this permanently?\": \"이것을 영구적으로 삭제하시겠습니까?\",\n  \"ID (Primary Key)\": \"ID(기본 키)\",\n  \"Column name (index) to match with the primary record.\": \"기본 레코드와 일치시킬 열 이름(인덱스)입니다.\",\n  \"Records Per Page\": \"페이지당 기록\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"단일 페이지에 표시할 레코드 수입니다. 페이지 매김을 비활성화하려면 비워 두십시오.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"페이지 값당 레코드의 형식이 잘못되었습니다. 값은 숫자여야 합니다.\",\n  \"Pagination\": \"쪽수 매기기\",\n  \"Page Number\": \"페이지 번호\",\n  \"This value is used to determine what page the user is on.\": \"이 값은 사용자가 있는 페이지를 결정하는 데 사용됩니다.\",\n  \"Sorting\": \"정렬\",\n  \"Sort by Column\": \"열로 정렬\",\n  \"Model column the records should be ordered by\": \"레코드를 정렬해야 하는 모델 열\",\n  \"Direction\": \"방향\",\n  \"Update :name Entries\": \"업데이트 :name 항목\",\n  \"Update :name\": \"업데이트 :이름\",\n  \":name Entry\": \":이름 항목\",\n  \"All :name Items\": \"모든 :name 항목\",\n  \"Update Existing Records\": \"기존 레코드 업데이트\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"동일한 ID, 제목 또는 슬러그와 일치하는 레코드를 업데이트하려면 이 상자를 선택하십시오.\",\n  \"Copy\": \"복사\"\n}"
  },
  {
    "path": "modules/tailor/lang/lt.json",
    "content": "{\n  \"Manage Entries\": \"Tvarkyti įrašus\",\n  \"Create :name Entry\": \"Sukurti :name įrašą\",\n  \"New :name\": \"Naujas :vardo įrašas\",\n  \"Import Entries\": \"Importuoti įrašus\",\n  \"Export Entries\": \"Eksportuoti įrašus\",\n  \"First Draft\": \"Pirmas Juodraštis\",\n  \"Draft Saved\": \"Juodraštis išsaugotas\",\n  \"Draft Applied\": \"Taikomas juodraštis\",\n  \"Draft Created\": \"Sukurtas juodraštis\",\n  \"Draft Discarded\": \"Juodraštis atmestas\",\n  \"Create Entry\": \"Sukurti įrašą\",\n  \"Publish Entry\": \"Paskelbti įrašą\",\n  \"Delete Entry\": \"Ištrinti įrašą\",\n  \"Entries have been disabled\": \"Įrašai buvo išjungti\",\n  \"Entries have been enabled\": \"Įrašai įjungti\",\n  \"Entries have been deleted\": \"Įrašai buvo ištrinti\",\n  \"Entries have been restored\": \"Įrašai atstatyti\",\n  \"Entries have been duplicated\": \"Įrašai pasikartoja\",\n  \"Manage Blueprints\": \"Tvarkyti brėžinius\",\n  \"All Entries\": \"Visi įrašai\",\n  \"Published Date\": \"Paskelbimo data\",\n  \"Published\": \"Paskelbta\",\n  \"Expired\": \"Baigėsi galiojimo laikas\",\n  \"Scheduled\": \"Suplanuota\",\n  \"Hidden\": \"Paslėpta\",\n  \"Draft\": \"Juodraštis\",\n  \"Deleted\": \"Ištrinta\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Įjungtas\",\n  \"Schedule publish date\": \"Suplanuokite paskelbimo datą\",\n  \"Set expiry date\": \"Nustatykite galiojimo datą\",\n  \"View full slug\": \"Žiūrėti visą šliužą\",\n  \"Apply this Draft\": \"Taikyti šį juodraštį\",\n  \"Remove\": \"Pašalinti\",\n  \"Drafts are not visible on the website until they are applied.\": \"Juodraščiai svetainėje nematomi, kol jie nėra pritaikyti.\",\n  \"Save Draft\": \"Išsaugoti juodraštį\",\n  \"Do you really want to discard the draft?\": \"Ar tikrai norite atmesti juodraštį?\",\n  \"Discard Draft\": \"Išmesti juodraštį\",\n  \"Save & Apply Draft\": \"Išsaugoti ir taikyti juodraštį\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Ar tikrai norite ištrinti įrašą? Taip pat bus ištrinti visi juodraščiai, jei tokių yra.\",\n  \"Create New Draft\": \"Sukurti naują juodraštį\",\n  \"Select Draft to Edit\": \"Pasirinkite juodraštis, kurį norite redaguoti\",\n  \"Edit the Primary Record\": \"Redaguokite pagrindinį įrašą\",\n  \"Unnamed Draft\": \"Neįvardytas juodraštis\",\n  \"Notes\": \"Pastabos\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokumente yra neišsaugotų pakeitimų. Ar norite juos atmesti ir pradėti kurti naują juodraštį?\",\n  \"Preview\": \"Peržiūra\",\n  \"Unsaved\": \"Neišsaugota\",\n  \"put the draft notes here\": \"įdėti pastabų juodraštį čia\",\n  \"Top Level\": \"Auksciausias lygis\",\n  \"Draft name: draft notes\": \"Juodraščio pavadinimas: užrašų juodraštis\",\n  \"Title\": \"Pavadinimas\",\n  \"Publish Date\": \"Paskelbimo data\",\n  \"Expiry Date\": \"Galiojimo pabaigos data\",\n  \"Entry Type\": \"Įvesties tipas\",\n  \"Handle\": \"Rankena\",\n  \"Collection\": \"Kolekcija\",\n  \"Displays a collection of entries.\": \"Rodo įrašų rinkinį.\",\n  \"Global_\": \"Pasaulinis\",\n  \"Makes globals available to the page.\": \"Padaro pasaulinius puslapiui pasiekiamus.\",\n  \"Section\": \"Skyrius\",\n  \"Defines a website section with a supporting entry.\": \"Apibrėžia svetainės skyrių su pagalbiniu įrašu.\",\n  \"URL code (slug) used to find the primary record.\": \"Nurodykite šliužą, naudojamą pirminiam įrašui rasti.\",\n  \"Default View\": \"Numatytasis vaizdas\",\n  \"Use this page as a default entry point when previewing the record.\": \"Naudojamas kaip numatytasis įėjimo taškas peržiūrint įrašą.\",\n  \"Full Slug\": \"Pilnas šliužas\",\n  \"Use the full slug when looking up the record.\": \"Ieškodami įrašo naudokite visą šliužą.\",\n  \"Are you sure?\": \"Ar tu tuo tikras?\",\n  \"Delete Forever\": \"Ištrinti visam laikui\",\n  \"This record is not visible because it has been deleted.\": \"Šis įrašas nematomas, nes buvo ištrintas.\",\n  \"Restore this Record\": \"Atkurti šį įrašą\",\n  \"Do you really want to delete this permanently?\": \"Ar tikrai norite tai ištrinti visam laikui?\",\n  \"ID (Primary Key)\": \"ID (pirminis raktas)\",\n  \"Column name (index) to match with the primary record.\": \"Stulpelio pavadinimas (indeksas), kad atitiktų pagrindinį įrašą.\",\n  \"Records Per Page\": \"Įrašai per puslapį\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Viename puslapyje rodytinų įrašų skaičius. Palikite tuščią, kad išjungtumėte puslapių rūšiavimą.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Netinkamas vieno puslapio įrašų reikšmės formatas. Reikšmė turi būti skaičius.\",\n  \"Pagination\": \"Puslapių rašymas\",\n  \"Page Number\": \"Puslapio numeris\",\n  \"This value is used to determine what page the user is on.\": \"Ši reikšmė naudojama norint nustatyti, kuriame puslapyje yra vartotojas.\",\n  \"Sorting\": \"Rūšiavimas\",\n  \"Sort by Column\": \"Rūšiuoti pagal stulpelį\",\n  \"Model column the records should be ordered by\": \"Modelio stulpelis, pagal kurį įrašai turi būti rūšiuojami\",\n  \"Direction\": \"Kryptis\",\n  \"Update :name Entries\": \"Atnaujinti: pavadinimo įrašai\",\n  \"Update :name\": \"Atnaujinimas :name\",\n  \":name Entry\": \":vardas Įrašas\",\n  \"All :name Items\": \"Visi :name įrašai\",\n  \"Update Existing Records\": \"Atnaujinkite esamus įrašus\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Pažymėkite šį laukelį, kad atnaujintumėte įrašus, atitinkančius tą patį ID, pavadinimą ar šliužą.\",\n  \"Copy\": \"Kopijuoti\"\n}"
  },
  {
    "path": "modules/tailor/lang/lv.json",
    "content": "{\n  \"Manage Entries\": \"Pārvaldīt ierakstus\",\n  \"Create :name Entry\": \"Izveidot :name ierakstu\",\n  \"New :name\": \"Jauns :name ieraksts\",\n  \"Import Entries\": \"Importēt ierakstus\",\n  \"Export Entries\": \"Eksportēt ierakstus\",\n  \"First Draft\": \"Pirmais melnraksts\",\n  \"Draft Saved\": \"Melnraksts saglabāts\",\n  \"Draft Applied\": \"Pielietots melnraksts\",\n  \"Draft Created\": \"Melnraksts izveidots\",\n  \"Draft Discarded\": \"Melnraksts ir atmests\",\n  \"Create Entry\": \"Izveidot ierakstu\",\n  \"Publish Entry\": \"Ieraksta publicēšana\",\n  \"Delete Entry\": \"Dzēst ierakstu\",\n  \"Entries have been disabled\": \"Ieraksti ir atspējoti\",\n  \"Entries have been enabled\": \"Ieraksti ir iespējoti\",\n  \"Entries have been deleted\": \"Ieraksti ir izdzēsti\",\n  \"Entries have been restored\": \"Ieraksti ir atjaunoti\",\n  \"Entries have been duplicated\": \"Ieraksti ir dublēti\",\n  \"Manage Blueprints\": \"Pārvaldīt rasējumus\",\n  \"All Entries\": \"Visi ieraksti\",\n  \"Published Date\": \"Publicēšanas datums\",\n  \"Published\": \"Publicēts\",\n  \"Expired\": \"Beidzies derīguma termiņš\",\n  \"Scheduled\": \"Plānots\",\n  \"Hidden\": \"Slēpts\",\n  \"Draft\": \"Melnraksts\",\n  \"Deleted\": \"Izdzēsts\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Iespējots\",\n  \"Schedule publish date\": \"Ieplānojiet publicēšanas datumu\",\n  \"Set expiry date\": \"Iestatiet derīguma termiņu\",\n  \"View full slug\": \"Skatīt visu gliemežu\",\n  \"Apply this Draft\": \"Lietot šo melnrakstu\",\n  \"Remove\": \"Noņemt\",\n  \"Drafts are not visible on the website until they are applied.\": \"Melnraksti nav redzami vietnē, kamēr tie nav piemēroti.\",\n  \"Save Draft\": \"Saglabāt melnrakstu\",\n  \"Do you really want to discard the draft?\": \"Vai tiešām vēlaties atmest melnrakstu?\",\n  \"Discard Draft\": \"Atmest melnrakstu\",\n  \"Save & Apply Draft\": \"Saglabāt un lietot melnrakstu\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Vai tiešām vēlaties dzēst ierakstu? Tiks dzēsti arī visi melnraksti, ja tādi ir.\",\n  \"Create New Draft\": \"Izveidot jaunu melnrakstu\",\n  \"Select Draft to Edit\": \"Atlasiet Rediģējamais melnraksts\",\n  \"Edit the Primary Record\": \"Rediģējiet primāro ierakstu\",\n  \"Unnamed Draft\": \"Melnraksts bez nosaukuma\",\n  \"Notes\": \"Piezīmes\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokumentā ir nesaglabātas izmaiņas. Vai vēlaties tos atmest un turpināt veidot jaunu melnrakstu?\",\n  \"Preview\": \"Priekšskatījums\",\n  \"Unsaved\": \"Nesaglabāts\",\n  \"put the draft notes here\": \"ievietojiet piezīmju projektu šeit\",\n  \"Top Level\": \"Augstākais līmenis\",\n  \"Draft name: draft notes\": \"Melnraksta nosaukums: melnraksta piezīmes\",\n  \"Title\": \"Nosaukums\",\n  \"Publish Date\": \"Publicēšanas datums\",\n  \"Expiry Date\": \"Derīguma termiņš\",\n  \"Entry Type\": \"Ieejas veids\",\n  \"Handle\": \"Rokturis\",\n  \"Collection\": \"Kolekcija\",\n  \"Displays a collection of entries.\": \"Parāda ierakstu kolekciju.\",\n  \"Global_\": \"Globāli\",\n  \"Makes globals available to the page.\": \"Padara lapai pieejamus globālos datus.\",\n  \"Section\": \"sadaļa\",\n  \"Defines a website section with a supporting entry.\": \"Definē vietnes sadaļu ar atbalsta ierakstu.\",\n  \"URL code (slug) used to find the primary record.\": \"Norādiet, kas izmantots, lai atrastu primāro ierakstu.\",\n  \"Default View\": \"Noklusējuma skats\",\n  \"Use this page as a default entry point when previewing the record.\": \"Tiek izmantots kā noklusējuma ieejas punkts, priekšskatot ierakstu.\",\n  \"Full Slug\": \"Pilnīga plēksne\",\n  \"Use the full slug when looking up the record.\": \"Meklējot ierakstu, izmantojiet pilnu lodziņu.\",\n  \"Are you sure?\": \"Vai tu esi pārliecināts?\",\n  \"Delete Forever\": \"Dzēst uz visiem laikiem\",\n  \"This record is not visible because it has been deleted.\": \"Šis ieraksts nav redzams, jo tas ir dzēsts.\",\n  \"Restore this Record\": \"Atjaunot šo ierakstu\",\n  \"Do you really want to delete this permanently?\": \"Vai tiešām vēlaties to neatgriezeniski dzēst?\",\n  \"ID (Primary Key)\": \"ID (primārā atslēga)\",\n  \"Column name (index) to match with the primary record.\": \"Kolonnas nosaukums (indekss), lai tas atbilstu primārajam ierakstam.\",\n  \"Records Per Page\": \"Ieraksti vienā lapā\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Ierakstu skaits, kas jāparāda vienā lapā. Atstājiet tukšu, lai atspējotu lappusi.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Nederīgs katras lapas vērtības ierakstu formāts. Vērtībai ir jābūt skaitlim.\",\n  \"Pagination\": \"Lapu šķirošana\",\n  \"Page Number\": \"Lapas numurs\",\n  \"This value is used to determine what page the user is on.\": \"Šo vērtību izmanto, lai noteiktu, kurā lapā lietotājs atrodas.\",\n  \"Sorting\": \"Šķirošana\",\n  \"Sort by Column\": \"Kārtot pēc kolonnas\",\n  \"Model column the records should be ordered by\": \"Modeļa kolonna ieraksti jāsakārto pēc\",\n  \"Direction\": \"Virziens\",\n  \"Update :name Entries\": \"Atjaunināt: name Entries\",\n  \"Update :name\": \"Atjauninājums: nosaukums\",\n  \":name Entry\": \":name Ieraksts\",\n  \"All :name Items\": \"Visi :name ieraksti\",\n  \"Update Existing Records\": \"Atjauniniet esošos ierakstus\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Atzīmējiet šo izvēles rūtiņu, lai atjauninātu ierakstus, kas atbilst vienam un tam pašam ID, nosaukumam vai sliedei.\",\n  \"Copy\": \"Kopēt\"\n}"
  },
  {
    "path": "modules/tailor/lang/nb-no.json",
    "content": "{\n    \"Manage Entries\": \"Behandle innlegg\",\n    \"Create :name Entry\": \"Opprett :name innlegg\",\n    \"New :name\": \"Nytt :name innlegg\",\n    \"Import Entries\": \"Importér innlegg\",\n    \"Export Entries\": \"Eksporter innlegg\",\n    \"First Draft\": \"Første utkast\",\n    \"Draft Saved\": \"Utkast lagret\",\n    \"Draft Applied\": \"Utkast publisert\",\n    \"Draft Created\": \"Utkast opprettet\",\n    \"Draft Discarded\": \"Utkast slettet\",\n    \"Create Entry\": \"Opprett innlegg\",\n    \"Publish Entry\": \"Publisér innlegg\",\n    \"Delete Entry\": \"Slett innlegg\",\n    \"Entries have been disabled\": \"Innlegg er deaktivert\",\n    \"Entries have been enabled\": \"Innlegg er aktivert\",\n    \"Entries have been deleted\": \"Innlegg er slettet\",\n    \"Manage Blueprints\": \"Behandle blueprints\",\n    \"All Entries\": \"Alle innlegg\",\n    \"Published Date\": \"Publisert dato\",\n    \"Published\": \"Publisert\",\n    \"Expired\": \"Utløpt\",\n    \"Scheduled\": \"Planlagt\",\n    \"Hidden\": \"Gjemt\",\n    \"Draft\": \"Utkast\",\n    \"Deleted\": \"Slettet\",\n    \"Slug\": \"Slug\",\n    \"Enabled\": \"Aktivert\",\n    \"Schedule publish date\": \"Planlegg publiseringsdato\",\n    \"Set expiry date\": \"Sett utløpsdato\",\n    \"View full slug\": \"Se full slug\",\n    \"Apply this Draft\": \"Oppdatér med dette utkastet\",\n    \"Remove\": \"Fjern\",\n    \"Drafts are not visible on the website until they are applied.\": \"Utkast er ikke synlige på nettsiden før de publiseres.\",\n    \"Save Draft\": \"Lagre utkast\",\n    \"Do you really want to discard the draft?\": \"Vil du virkelig slette utkastet?\",\n    \"Discard Draft\": \"Fjern utkast\",\n    \"Save & Apply Draft\": \"Lagre og publisér utkast\",\n    \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Vil du virkelig slette innlegget? Det sletter også eventuelle utkast.\",\n    \"Create New Draft\": \"Opprett nytt utkast\",\n    \"Select Draft to Edit\": \"Velg kladd for å redigere\",\n    \"Edit the Primary Record\": \"Rediger opprinnelig innlegg\",\n    \"Unnamed Draft\": \"Utkast uten navn\",\n    \"Notes\": \"Notater\",\n    \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Det er ulagrede endringer, vil du fjerne disse og fortsette med å opprette et nytt utkast?\",\n    \"Preview\": \"Forhåndsvisning\",\n    \"Unsaved\": \"Ikke lagret\",\n    \"put the draft notes here\": \"skriv utkast-notater her\",\n    \"Top Level\": \"Øverste nivå\",\n    \"Draft name: draft notes\": \"Utkast name: notater\",\n    \"Title\": \"Tittel\",\n    \"Publish Date\": \"Publiseringsdato\",\n    \"Expiry Date\": \"Utløpsdato\",\n    \"Entry Type\": \"Type innlegg\"\n}\n"
  },
  {
    "path": "modules/tailor/lang/nl/lang.php",
    "content": "<?php return [\n  'blueprint' => [\n    'saved' => 'Blauwdruk opgeslagen',\n    'reloaded' => 'Blauwdruk vernieuwd',\n    'deleted' => 'Blauwdruk verwijderd',\n    'delete' => 'Verwijder',\n    'new' => 'Nieuwe blauwdruk',\n    'editor_node_name' => 'Blauwdrukken',\n    'upload_files' => 'Upload bestand(en)',\n    'rename' => 'Hernoemen',\n    'create_directory' => 'Nieuwe map',\n    'editor_yaml' => 'YAML',\n    'error_loading' => 'Fout bij laden blauwdruk',\n    'not_found' => 'Blauwdruk niet gevonden',\n    'apply' => 'Opslaan & Migreren',\n    'invalid_file' => 'Ongeldige bestandsnaam: :name. Bestandsname mogen enkel alphanumerieke karakters, streepjes (_ of -) en punten (.) bevatten. Bijvoorbeeld: blauwdruk.yaml, submap/blauwdruk.yaml',\n    'migrating' => 'Blauwdruk migreren',\n    'migrated' => 'De blauwdruk is succesvol gemigreerd',\n    'mixin' => 'Mixin',\n    'entry' => 'Entry',\n    'stream' => 'Stream',\n    'structure' => 'Structure',\n    'single' => 'Single',\n    'global' => 'Global / Configuration',\n  ],\n  'editor' => [\n    'create' => 'Maken',\n    'refresh' => 'Vernieuwen',\n    'blueprint' => 'Blauwdruk',\n    'invalid_type' => 'Onbekend template type.',\n    'error_no_doctype_permissions' => 'Je bent niet gemachtigt om het document te beheren van het type: :doctype',\n  ],\n];\n"
  },
  {
    "path": "modules/tailor/lang/nl.json",
    "content": "{\n  \"Manage Entries\": \"Beheer items\",\n  \"Create :name Entry\": \"Maak :name item\",\n  \"New :name\": \"Nieuwe :name\",\n  \"Import Entries\": \"Importeer items\",\n  \"Export Entries\": \"Exporteer items\",\n  \"First Draft\": \"Eerste concept\",\n  \"Draft Saved\": \"Concept opgeslagen\",\n  \"Draft Applied\": \"Concept toegepast\",\n  \"Draft Created\": \"Concept aangemaakt\",\n  \"Draft Discarded\": \"Concept verworpen\",\n  \"Create Entry\": \"Nieuw item\",\n  \"Publish Entry\": \"Publiceren item\",\n  \"Delete Entry\": \"Verwijder item\",\n  \"Entries have been disabled\": \"Items zijn uitgeschakeld\",\n  \"Entries have been enabled\": \"Items zijn ingeschakeld\",\n  \"Entries have been deleted\": \"Items zijn verwijderd\",\n  \"Entries have been restored\": \"Items zijn hersteld\",\n  \"Entries have been duplicated\": \"Items zijn gedupliceerd\",\n  \"Manage Blueprints\": \"Blauwdrukken beheren\",\n  \"All Entries\": \"Alle items\",\n  \"Published Date\": \"Publicatiedatum\",\n  \"Published\": \"Gepubliceerd\",\n  \"Expired\": \"Verlopen\",\n  \"Scheduled\": \"Gepland\",\n  \"Hidden\": \"Verborgen\",\n  \"Draft\": \"Concept\",\n  \"Deleted\": \"Verwijderd\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Ingeschakeld\",\n  \"Schedule publish date\": \"Agendeer publicatiedatum\",\n  \"Set expiry date\": \"Vervaldatum instellen\",\n  \"View full slug\": \"Volledige slug bekijken\",\n  \"Apply this Draft\": \"Dit concept toepassen\",\n  \"Remove\": \"Verwijder\",\n  \"Drafts are not visible on the website until they are applied.\": \"Een concept is niet zichtbaar op de website, totdat je ze hebt toegepast.\",\n  \"Save Draft\": \"Concept opslaan\",\n  \"Do you really want to discard the draft?\": \"Weet je zeker dat je dit concept wilt verwerpen?\",\n  \"Discard Draft\": \"Verwerp concept\",\n  \"Save & Apply Draft\": \"Concept opslaan en toepassen\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Weet je zeker dat je dit record wilt verwijderen? Alle bestaande concepten zullen verwijderd worden.\",\n  \"Create New Draft\": \"Nieuw concept\",\n  \"Select Draft to Edit\": \"Selecteer concept om te wijzigen\",\n  \"Edit the Primary Record\": \"Wijzig primaire record\",\n  \"Unnamed Draft\": \"Naamloos concept\",\n  \"Notes\": \"Notities\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dit document bevat niet opgeslagen wijzigingen. Wijzigingen verwerpen en verdergaan met een nieuw concept?\",\n  \"Preview\": \"Voorbeeldweergave\",\n  \"Unsaved\": \"Niet opgeslagen\",\n  \"put the draft notes here\": \"plaats hier concept notities\",\n  \"Top Level\": \"Hoogste niveau\",\n  \"Draft name: draft notes\": \"Concept naam: concept notities\",\n  \"Title\": \"Titel\",\n  \"Publish Date\": \"Publicatiedatum\",\n  \"Expiry Date\": \"Vervaldatum\",\n  \"Entry Type\": \"Item type\",\n  \"Handle\": \"Referentie\",\n  \"Collection\": \"Verzameling\",\n  \"Displays a collection of entries.\": \"Weergave van een verzameling items.\",\n  \"Global\": \"Globaal\",\n  \"Makes globals available to the page.\": \"Maakt globals beschikbaar voor de pagina.\",\n  \"Section\": \"Sectie\",\n  \"Defines a website section with a supporting entry.\": \"Definieert een website sectie met een ondersteunend item.\",\n  \"URL code (slug) used to find the primary record.\": \"Geef de slug op van het primaire record.\",\n  \"Default View\": \"Standaardweergave\",\n  \"Used as default entry point when previewing the record.\": \"Wordt gebruikt als standaard ingangspunt bij de voorbeeldweergave van een record.\",\n  \"Full Slug\": \"Volledige slug\",\n  \"Use the full slug when looking up the record.\": \"Gebruik de volledige slug bij het opzoeken van het record.\",\n  \"Are you sure?\": \"Weet je het zeker?\",\n  \"Delete Forever\": \"Verwijderd definitief\",\n  \"This record is not visible because it has been deleted.\": \"Het record is niet zichtbaar omdat het is verwijderd.\",\n  \"Restore this Record\": \"Herstel dit record\",\n  \"Do you really want to delete this permanently?\": \"Wil je dit definitief verwijderen?\",\n  \"ID (Primary Key)\": \"ID (Primaire sleutel)\",\n  \"Column name (index) to match with the primary record.\": \"Kolomnaam (index) die overeenkomt met het primaire record.\",\n  \"Records Per Page\": \"Records per pagina\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Aantal records om weer te geven per pagina. Laat leeg om paginatie uit te schakelen.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Ongeldige waarde voor aantal records per pagina. De waarde zou numeriek moeten zijn.\",\n  \"Pagination\": \"Paginatie\",\n  \"Page Number\": \"Paginanummer\",\n  \"This value is used to determine what page the user is on.\": \"Deze waarde geeft aan op welke pagina de gebruiker zich begeeft.\",\n  \"Sorting\": \"Sortering\",\n  \"Sort by Column\": \"Sorteer op kolom\",\n  \"Model column the records should be ordered by\": \"De kolom van het Model waarop de records gesorteerd moeten worden\",\n  \"Direction\": \"Sorteerrichting\",\n  \"Update :name Entries\": \"Bijwerken :name items\",\n  \"Update :name\": \"Bijwerken :name\",\n  \":name Entry\": \":name item\",\n  \"All :name Items\": \"Alle :name items\",\n  \"Update Existing Records\": \"Bijwerken bestaande records\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Vink aan om de records bij te werken die overeenkomen met dezelfde ID, titel of slug.\",\n  \"Copy\": \"Kopiëren\",\n  \"Unnamed draft\": \"Naamloos concept\",\n  \"Top level\": \"Hoogste niveau\"\n}"
  },
  {
    "path": "modules/tailor/lang/pl.json",
    "content": "{\n  \"Manage Entries\": \"Zarządzaj wpisami\",\n  \"Create :name Entry\": \"Utwórz :name wpisu\",\n  \"New :name\": \"New :name\",\n  \"Import Entries\": \"Importuj wpisy\",\n  \"Export Entries\": \"Eksportuj wpisy\",\n  \"First Draft\": \"Wstępny szkic\",\n  \"Draft Saved\": \"Zapisano wersję roboczą\",\n  \"Draft Applied\": \"Zastosowano wersję roboczą\",\n  \"Draft Created\": \"Utworzono wersję roboczą\",\n  \"Draft Discarded\": \"Wersja robocza odrzucona\",\n  \"Create Entry\": \"Utwórz wpis\",\n  \"Publish Entry\": \"Opublikuj wpis\",\n  \"Delete Entry\": \"Usuń wpis\",\n  \"Entries have been disabled\": \"Wpisy zostały wyłączone\",\n  \"Entries have been enabled\": \"Wpisy zostały włączone\",\n  \"Entries have been deleted\": \"Wpisy zostały usunięte\",\n  \"Entries have been restored\": \"Entries have been restored\",\n  \"Entries have been duplicated\": \"Entries have been duplicated\",\n  \"Manage Blueprints\": \"Zarządzaj projektami\",\n  \"All Entries\": \"Wszystkie wpisy\",\n  \"Published Date\": \"Data publikacji\",\n  \"Published\": \"Opublikowany\",\n  \"Expired\": \"Wygasły\",\n  \"Scheduled\": \"Zaplanowany\",\n  \"Hidden\": \"Ukryty\",\n  \"Draft\": \"Projekt\",\n  \"Deleted\": \"Usunięto\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Włączony\",\n  \"Schedule publish date\": \"Zaplanuj datę publikacji\",\n  \"Set expiry date\": \"Ustaw datę ważności\",\n  \"View full slug\": \"Wyświetl pełny ślimak\",\n  \"Apply this Draft\": \"Zastosuj ten szkic\",\n  \"Remove\": \"Usunąć\",\n  \"Drafts are not visible on the website until they are applied.\": \"Szkice nie są widoczne na stronie, dopóki nie zostaną zastosowane.\",\n  \"Save Draft\": \"Zapisz Projekt\",\n  \"Do you really want to discard the draft?\": \"Czy na pewno chcesz odrzucić wersję roboczą?\",\n  \"Discard Draft\": \"Odrzuć wersję roboczą\",\n  \"Save & Apply Draft\": \"Zapisz i zastosuj wersję roboczą\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Czy na pewno chcesz usunąć rekord? Usunie również wszystkie wersje robocze, jeśli takie istnieją.\",\n  \"Create New Draft\": \"Utwórz nową wersję roboczą\",\n  \"Select Draft to Edit\": \"Wybierz wersję roboczą do edycji\",\n  \"Edit the Primary Record\": \"Edytuj główny rekord\",\n  \"Unnamed Draft\": \"Wersja robocza bez nazwy\",\n  \"Notes\": \"Uwagi\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokument zawiera niezapisane zmiany. Czy chcesz je odrzucić i kontynuować tworzenie nowej wersji roboczej?\",\n  \"Preview\": \"Zapowiedź\",\n  \"Unsaved\": \"Niezapisany\",\n  \"put the draft notes here\": \"umieść szkice notatek tutaj\",\n  \"Top Level\": \"Najwyższy poziom\",\n  \"Draft name: draft notes\": \"Wersja robocza: notatki robocze\",\n  \"Title\": \"Tytuł\",\n  \"Publish Date\": \"Data publikacji\",\n  \"Expiry Date\": \"Data wygaśnięcia\",\n  \"Entry Type\": \"Typ wpisu\",\n  \"Handle\": \"Uchwyt\",\n  \"Collection\": \"Kolekcja\",\n  \"Displays a collection of entries.\": \"Wyświetla kolekcję wpisów.\",\n  \"Global\": \"Światowy\",\n  \"Makes globals available to the page.\": \"Udostępnia dane globalne stronie.\",\n  \"Section\": \"Sekcja\",\n  \"Defines a website section with a supporting entry.\": \"Definiuje sekcję witryny z wpisem pomocniczym.\",\n  \"URL code (slug) used to find the primary record.\": \"Określ informacje o slugu używane do znalezienia rekordu podstawowego.\",\n  \"Default View\": \"Widok domyślny\",\n  \"Used as default entry point when previewing the record.\": \"Używany jako domyślny punkt wejścia podczas przeglądania rekordu.\",\n  \"Full Slug\": \"Pełny ślimak\",\n  \"Use the full slug when looking up the record.\": \"Użyj pełnego ślimaka podczas przeglądania rekordu.\",\n  \"Are you sure?\": \"Jesteś pewien?\",\n  \"Delete Forever\": \"Usuń na zawsze\",\n  \"This record is not visible because it has been deleted.\": \"This record is not visible because it has been deleted.\",\n  \"Restore this Record\": \"Restore this Record\",\n  \"Do you really want to delete this permanently?\": \"Do you really want to delete this permanently?\",\n  \"ID (Primary Key)\": \"ID (Primary Key)\",\n  \"Column name (index) to match with the primary record.\": \"Column name (index) to match with the primary record.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Number of records to display on a single page. Leave empty to disable pagination.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Invalid format of the records per page value. The value should be a number.\",\n  \"Pagination\": \"Pagination\",\n  \"Page Number\": \"Page Number\",\n  \"This value is used to determine what page the user is on.\": \"This value is used to determine what page the user is on.\",\n  \"Sorting\": \"Sorting\",\n  \"Sort by Column\": \"Sort by Column\",\n  \"Model column the records should be ordered by\": \"Model column the records should be ordered by\",\n  \"Direction\": \"Direction\",\n  \"Update :name Entries\": \"Update :name Entries\",\n  \"Update :name\": \"Update :name\",\n  \":name Entry\": \":name Entry\",\n  \"All :name Items\": \"All :name Entries\",\n  \"Update Existing Records\": \"Update Existing Records\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Check this box to update records that match the same ID, title or slug.\",\n  \"Copy\": \"Copy\",\n  \"Unnamed draft\": \"Wersja robocza bez nazwy\",\n  \"Top level\": \"Najwyższy poziom\"\n}"
  },
  {
    "path": "modules/tailor/lang/pt-br/lang.php",
    "content": "<?php return [\n    'blueprint' => [\n        'saved' => 'Planta salva',\n        'reloaded' => 'Planta recarregada',\n        'deleted' => 'Planta excluída',\n        'delete' => 'Excluir',\n        'new' => 'Nova Planta',\n        'editor_node_name' => 'Plantas',\n        'upload_files' => 'Carregar arquivo(s)',\n        'rename' => 'Renomear',\n        'create_directory' => 'Novo diretório',\n        'editor_yaml' => 'YAML',\n        'error_loading' => 'Erro ao carregar a planta',\n        'not_found' => 'Planta não encontrada',\n        'apply' => 'Salvar e migrar',\n        'invalid_file' => 'Nome de arquivo inválido: :name. Os nomes dos arquivos podem conter apenas símbolos alfanuméricos, sublinhados, traços e pontos. Alguns exemplos de nomes de arquivo corretos: blueprint.yaml, subdiretorio/blueprint.yaml',\n        'migrating' => 'Migrando planta',\n        'migrated' => 'A planta foi migrada com sucesso',\n        'mixin' => 'Misturando',\n        'entry' => 'Entrada',\n        'stream' => 'Transmissão',\n        'structure' => 'Estrutura',\n        'single' => 'Único',\n        'global' => 'Global/Configuração',\n    ],\n    'editor' => [\n        'create' => 'Criar',\n        'refresh' => 'Atualizar',\n        'blueprint' => 'PLanta',\n        'invalid_type' => 'Tipo de modelo desconhecido.',\n        'error_no_doctype_permissions' => 'Você não tem permissão para gerenciar o tipo de documento: :doctype',\n    ],\n];\n"
  },
  {
    "path": "modules/tailor/lang/pt-br.json",
    "content": "{\n    \"Manage Entries\": \"Gerenciar entradas\",\n    \"Create :name Entry\": \"Criar :name da entrada\",\n    \"New :name\": \"New :name\",\n    \"Import Entries\": \"Importar entradas\",\n    \"Export Entries\": \"Exportar entradas\",\n    \"First Draft\": \"Primeiro Rascunho\",\n    \"Draft Saved\": \"Rascunho salvo\",\n    \"Draft Applied\": \"Rascunho aplicado\",\n    \"Draft Created\": \"Rascunho criado\",\n    \"Draft Discarded\": \"Rascunho descartado\",\n    \"Create Entry\": \"Criar entrada\",\n    \"Publish Entry\": \"Publicar entrada\",\n    \"Delete Entry\": \"Excluir entrada\",\n    \"Entries have been disabled\": \"As entradas foram desativadas\",\n    \"Entries have been enabled\": \"As entradas foram habilitadas\",\n    \"Entries have been deleted\": \"As entradas foram excluídas\",\n    \"Entries have been restored\": \"Entries have been restored\",\n    \"Entries have been duplicated\": \"Entries have been duplicated\",\n    \"Manage Blueprints\": \"Gerenciar Planta\",\n    \"All Entries\": \"Todas as entradas\",\n    \"Published Date\": \"Data de Publicação\",\n    \"Published\": \"Publicado\",\n    \"Expired\": \"Expirado\",\n    \"Scheduled\": \"Agendado\",\n    \"Hidden\": \"Escondido\",\n    \"Draft\": \"Rascunho\",\n    \"Deleted\": \"Excluído\",\n    \"Slug\": \"Slug\",\n    \"Enabled\": \"Ativado\",\n    \"Schedule publish date\": \"Agendar data de publicação\",\n    \"Set expiry date\": \"Definir data de expiração\",\n    \"View full slug\": \"Ver slug completo\",\n    \"Apply this Draft\": \"Aplicar este Rascunho\",\n    \"Remove\": \"Remover\",\n    \"Drafts are not visible on the website until they are applied.\": \"Rascunhos não são visíveis no site até que sejam aplicados.\",\n    \"Save Draft\": \"Salvar rascunho\",\n    \"Do you really want to discard the draft?\": \"Você realmente deseja descartar o draft?\",\n    \"Discard Draft\": \"Descartar Rascunho\",\n    \"Save & Apply Draft\": \"Salvar e aplicar rascunho\",\n    \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Você realmente deseja excluir o registro? Ele também excluirá todos os rascunhos, se houver algum.\",\n    \"Create New Draft\": \"Criar novo rascunho\",\n    \"Select Draft to Edit\": \"Selecione Rascunho para Editar\",\n    \"Edit the Primary Record\": \"Editar o registro primário\",\n    \"Unnamed Draft\": \"Rascunho sem nome\",\n    \"Notes\": \"Notas\",\n    \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"O documento possui alterações não salvas. Deseja descartá-las e continuar com a criação de um novo rascunho?\",\n    \"Preview\": \"Visualizar\",\n    \"Unsaved\": \"Não salvo\",\n    \"put the draft notes here\": \"coloque o rascunho das notas aqui\",\n    \"Top Level\": \"Nível superior\",\n    \"Draft name: draft notes\": \"Eascunho :name notas de rascunho\",\n    \"Title\": \"Título\",\n    \"Publish Date\": \"Data de Publicação\",\n    \"Expiry Date\": \"Data de validade\",\n    \"Entry Type\": \"Tipo de entrada\",\n    \"Handle\": \"Handle\",\n    \"Collection\": \"Collection\",\n    \"Displays a collection of entries.\": \"Displays a collection of entries.\",\n    \"Global\": \"Global\",\n    \"Makes globals available to the page.\": \"Makes globals available to the page.\",\n    \"Section\": \"Section\",\n    \"Defines a website section with a supporting entry.\": \"Defines a website section with a supporting entry.\",\n    \"URL code (slug) used to find the primary record.\": \"URL code (slug) used to find the primary record.\",\n    \"Default View\": \"Default View\",\n    \"Used as default entry point when previewing the record.\": \"Used as default entry point when previewing the record.\",\n    \"Full Slug\": \"Full Slug\",\n    \"Use the full slug when looking up the record.\": \"Use the full slug when looking up the record.\",\n    \"Are you sure?\": \"Are you sure?\",\n    \"Delete Forever\": \"Delete Forever\",\n    \"This record is not visible because it has been deleted.\": \"This record is not visible because it has been deleted.\",\n    \"Restore this Record\": \"Restore this Record\",\n    \"Do you really want to delete this permanently?\": \"Do you really want to delete this permanently?\",\n    \"ID (Primary Key)\": \"ID (Primary Key)\",\n    \"Column name (index) to match with the primary record.\": \"Column name (index) to match with the primary record.\",\n    \"Records Per Page\": \"Records Per Page\",\n    \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Number of records to display on a single page. Leave empty to disable pagination.\",\n    \"Invalid format of the records per page value. The value should be a number.\": \"Invalid format of the records per page value. The value should be a number.\",\n    \"Pagination\": \"Pagination\",\n    \"Page Number\": \"Page Number\",\n    \"This value is used to determine what page the user is on.\": \"This value is used to determine what page the user is on.\",\n    \"Sorting\": \"Sorting\",\n    \"Sort by Column\": \"Sort by Column\",\n    \"Model column the records should be ordered by\": \"Model column the records should be ordered by\",\n    \"Direction\": \"Direction\",\n    \"Update :name Entries\": \"Update :name Entries\",\n    \"Update :name\": \"Update :name\",\n    \":name Entry\": \":name Entry\",\n    \"All :name Items\": \"All :name Entries\",\n    \"Update Existing Records\": \"Update Existing Records\",\n    \"Check this box to update records that match the same ID, title or slug.\": \"Check this box to update records that match the same ID, title or slug.\",\n    \"Copy\": \"Copy\"\n}\n"
  },
  {
    "path": "modules/tailor/lang/pt-pt.json",
    "content": "{\n    \"Manage Entries\": \"Manage Entries\",\n    \"Create :name Entry\": \"Create :name Entry\",\n    \"New :name\": \"New :name\",\n    \"Import Entries\": \"Import Entries\",\n    \"Export Entries\": \"Export Entries\",\n    \"First Draft\": \"First Draft\",\n    \"Draft Saved\": \"Draft Saved\",\n    \"Draft Applied\": \"Draft Applied\",\n    \"Draft Created\": \"Draft Created\",\n    \"Draft Discarded\": \"Draft Discarded\",\n    \"Create Entry\": \"Create Entry\",\n    \"Publish Entry\": \"Publish Entry\",\n    \"Delete Entry\": \"Delete Entry\",\n    \"Entries have been disabled\": \"Entries have been disabled\",\n    \"Entries have been enabled\": \"Entries have been enabled\",\n    \"Entries have been deleted\": \"Entries have been deleted\",\n    \"Entries have been restored\": \"Entries have been restored\",\n    \"Entries have been duplicated\": \"Entries have been duplicated\",\n    \"Manage Blueprints\": \"Manage Blueprints\",\n    \"All Entries\": \"All Entries\",\n    \"Published Date\": \"Published Date\",\n    \"Published\": \"Published\",\n    \"Expired\": \"Expired\",\n    \"Scheduled\": \"Scheduled\",\n    \"Hidden\": \"Hidden\",\n    \"Draft\": \"Draft\",\n    \"Deleted\": \"Deleted\",\n    \"Slug\": \"Slug\",\n    \"Enabled\": \"Enabled\",\n    \"Schedule publish date\": \"Schedule publish date\",\n    \"Set expiry date\": \"Set expiry date\",\n    \"View full slug\": \"View full slug\",\n    \"Apply this Draft\": \"Apply this Draft\",\n    \"Remove\": \"Remove\",\n    \"Drafts are not visible on the website until they are applied.\": \"Drafts are not visible on the website until they are applied.\",\n    \"Save Draft\": \"Save Draft\",\n    \"Do you really want to discard the draft?\": \"Do you really want to discard the draft?\",\n    \"Discard Draft\": \"Discard Draft\",\n    \"Save & Apply Draft\": \"Save & Apply Draft\",\n    \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Do you really want to delete the record? It will also delete all drafts if any exist.\",\n    \"Create New Draft\": \"Create New Draft\",\n    \"Select Draft to Edit\": \"Select Draft to Edit\",\n    \"Edit the Primary Record\": \"Edit the Primary Record\",\n    \"Unnamed Draft\": \"Unnamed Draft\",\n    \"Notes\": \"Notes\",\n    \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\",\n    \"Preview\": \"Preview\",\n    \"Unsaved\": \"Unsaved\",\n    \"put the draft notes here\": \"put the draft notes here\",\n    \"Top Level\": \"Top Level\",\n    \"Draft name: draft notes\": \"Draft name: draft notes\",\n    \"Title\": \"Title\",\n    \"Publish Date\": \"Publish Date\",\n    \"Expiry Date\": \"Expiry Date\",\n    \"Entry Type\": \"Entry Type\",\n    \"Handle\": \"Handle\",\n    \"Collection\": \"Collection\",\n    \"Displays a collection of entries.\": \"Displays a collection of entries.\",\n    \"Global_\": \"Global\",\n    \"Makes globals available to the page.\": \"Makes globals available to the page.\",\n    \"Section\": \"Section\",\n    \"Defines a website section with a supporting entry.\": \"Defines a website section with a supporting entry.\",\n    \"URL code (slug) used to find the primary record.\": \"URL code (slug) used to find the primary record.\",\n    \"Default View\": \"Default View\",\n    \"Use this page as a default entry point when previewing the record.\": \"Use this page as a default entry point when previewing the record.\",\n    \"Full Slug\": \"Full Slug\",\n    \"Use the full slug when looking up the record.\": \"Use the full slug when looking up the record.\",\n    \"Are you sure?\": \"Are you sure?\",\n    \"Delete Forever\": \"Delete Forever\",\n    \"This record is not visible because it has been deleted.\": \"This record is not visible because it has been deleted.\",\n    \"Restore this Record\": \"Restore this Record\",\n    \"Do you really want to delete this permanently?\": \"Do you really want to delete this permanently?\",\n    \"ID (Primary Key)\": \"ID (Primary Key)\",\n    \"Column name (index) to match with the primary record.\": \"Column name (index) to match with the primary record.\",\n    \"Records Per Page\": \"Records Per Page\",\n    \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Number of records to display on a single page. Leave empty to disable pagination.\",\n    \"Invalid format of the records per page value. The value should be a number.\": \"Invalid format of the records per page value. The value should be a number.\",\n    \"Pagination\": \"Pagination\",\n    \"Page Number\": \"Page Number\",\n    \"This value is used to determine what page the user is on.\": \"This value is used to determine what page the user is on.\",\n    \"Sorting\": \"Sorting\",\n    \"Sort by Column\": \"Sort by Column\",\n    \"Model column the records should be ordered by\": \"Model column the records should be ordered by\",\n    \"Direction\": \"Direction\",\n    \"Update :name Entries\": \"Update :name Entries\",\n    \"Update :name\": \"Update :name\",\n    \":name Entry\": \":name Entry\",\n    \"All :name Items\": \"All :name Entries\",\n    \"Update Existing Records\": \"Update Existing Records\",\n    \"Check this box to update records that match the same ID, title or slug.\": \"Check this box to update records that match the same ID, title or slug.\",\n    \"Copy\": \"Copy\"\n}\n"
  },
  {
    "path": "modules/tailor/lang/ro.json",
    "content": "{\n  \"Manage Entries\": \"Gestionați intrările\",\n  \"Create :name Entry\": \"Creați intrarea :name\",\n  \"New :name\": \"New :name\",\n  \"Import Entries\": \"Importați intrări\",\n  \"Export Entries\": \"Exportați intrări\",\n  \"First Draft\": \"Primul proiect\",\n  \"Draft Saved\": \"Schiță salvată\",\n  \"Draft Applied\": \"Ciornă aplicată\",\n  \"Draft Created\": \"Ciornă creată\",\n  \"Draft Discarded\": \"Ciornă eliminată\",\n  \"Create Entry\": \"Creați intrare\",\n  \"Publish Entry\": \"Publicați intrarea\",\n  \"Delete Entry\": \"Ștergeți intrarea\",\n  \"Entries have been disabled\": \"Intrările au fost dezactivate\",\n  \"Entries have been enabled\": \"Intrările au fost activate\",\n  \"Entries have been deleted\": \"Intrările au fost șterse\",\n  \"Entries have been restored\": \"Intrările au fost restaurate\",\n  \"Entries have been duplicated\": \"Intrările au fost duplicate\",\n  \"Manage Blueprints\": \"Gestionați Blueprints\",\n  \"All Entries\": \"Toate intrările\",\n  \"Published Date\": \"Data Publicării\",\n  \"Published\": \"Publicat\",\n  \"Expired\": \"Expirat\",\n  \"Scheduled\": \"Programat\",\n  \"Hidden\": \"Ascuns\",\n  \"Draft\": \"Proiect\",\n  \"Deleted\": \"Șters\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Activat\",\n  \"Schedule publish date\": \"Programați data publicării\",\n  \"Set expiry date\": \"Setați data de expirare\",\n  \"View full slug\": \"Vedeți melcul complet\",\n  \"Apply this Draft\": \"Aplicați această schiță\",\n  \"Remove\": \"Elimina\",\n  \"Drafts are not visible on the website until they are applied.\": \"Schițele nu sunt vizibile pe site până când nu sunt aplicate.\",\n  \"Save Draft\": \"Salveaza schita\",\n  \"Do you really want to discard the draft?\": \"Chiar vrei să renunți la draft?\",\n  \"Discard Draft\": \"Renunțați la Ciornă\",\n  \"Save & Apply Draft\": \"Salvați și aplicați schița\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Chiar vrei să ștergi înregistrarea? De asemenea, va șterge toate schițele, dacă există.\",\n  \"Create New Draft\": \"Creați o nouă schiță\",\n  \"Select Draft to Edit\": \"Selectați Schiță de editat\",\n  \"Edit the Primary Record\": \"Editați înregistrarea primară\",\n  \"Unnamed Draft\": \"Schiță fără nume\",\n  \"Notes\": \"Note\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Documentul are modificări nesalvate. Doriți să le renunțați și să continuați cu crearea unei noi schițe?\",\n  \"Preview\": \"previzualizare\",\n  \"Unsaved\": \"Nesalvat\",\n  \"put the draft notes here\": \"pune aici schița de note\",\n  \"Top Level\": \"Nivel superior\",\n  \"Draft name: draft notes\": \"Nume schiță: note de schiță\",\n  \"Title\": \"Titlu\",\n  \"Publish Date\": \"Data publicării\",\n  \"Expiry Date\": \"Data de expirare\",\n  \"Entry Type\": \"Tip de intrare\",\n  \"Handle\": \"Mâner\",\n  \"Collection\": \"Colectie\",\n  \"Displays a collection of entries.\": \"Afișează o colecție de intrări.\",\n  \"Global\": \"Global\",\n  \"Makes globals available to the page.\": \"Face să fie disponibile paginilor globale.\",\n  \"Section\": \"Secțiune\",\n  \"Defines a website section with a supporting entry.\": \"Definește o secțiune de site web cu o intrare de sprijin.\",\n  \"URL code (slug) used to find the primary record.\": \"Specificați slug-ul utilizat pentru a găsi înregistrarea primară.\",\n  \"Default View\": \"Vedere standard\",\n  \"Used as default entry point when previewing the record.\": \"Folosit ca punct de intrare implicit la previzualizarea înregistrării.\",\n  \"Full Slug\": \"Slug plin\",\n  \"Use the full slug when looking up the record.\": \"Folosiți slug-ul complet când căutați înregistrarea.\",\n  \"Are you sure?\": \"Esti sigur?\",\n  \"Delete Forever\": \"Sterge pentru totdeauna\",\n  \"This record is not visible because it has been deleted.\": \"Această înregistrare nu este vizibilă deoarece a fost ștearsă.\",\n  \"Restore this Record\": \"Restaurați această înregistrare\",\n  \"Do you really want to delete this permanently?\": \"Chiar doriți să ștergeți acest lucru definitiv?\",\n  \"ID (Primary Key)\": \"ID (cheie primară)\",\n  \"Column name (index) to match with the primary record.\": \"Numele coloanei (index) pentru a se potrivi cu înregistrarea principală.\",\n  \"Records Per Page\": \"Înregistrări pe pagină\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Numărul de înregistrări de afișat pe o singură pagină. Lăsați gol pentru a dezactiva paginarea.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Format nevalid al valorii înregistrărilor pe pagină. Valoarea ar trebui să fie un număr.\",\n  \"Pagination\": \"Paginare\",\n  \"Page Number\": \"Numărul paginii\",\n  \"This value is used to determine what page the user is on.\": \"Această valoare este utilizată pentru a determina pe ce pagină se află utilizatorul.\",\n  \"Sorting\": \"Triere\",\n  \"Sort by Column\": \"Sortați după coloană\",\n  \"Model column the records should be ordered by\": \"Coloana model după care ar trebui să fie ordonate înregistrările\",\n  \"Direction\": \"Direcţie\",\n  \"Update :name Entries\": \"Actualizare:nume intrări\",\n  \"Update :name\": \"Actualizare:nume\",\n  \":name Entry\": \":nume intrare\",\n  \"All :name Items\": \"Toate intrările :nume\",\n  \"Update Existing Records\": \"Actualizați înregistrările existente\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Bifați această casetă pentru a actualiza înregistrările care se potrivesc cu același ID, titlu sau slug.\",\n  \"Copy\": \"Copie\",\n  \"Unnamed draft\": \"Schiță fără nume\",\n  \"Top level\": \"Nivel superior\"\n}"
  },
  {
    "path": "modules/tailor/lang/rs.json",
    "content": "{\n}"
  },
  {
    "path": "modules/tailor/lang/ru/lang.php",
    "content": "<?php return [\n  'blueprint' => [\n    'saved' => 'Чертёж сохранен',\n    'reloaded' => 'Чертёж перезагружен',\n    'deleted' => 'Чертёж удален',\n    'delete' => 'Удалить',\n    'new' => 'Новый чертёж',\n    'editor_node_name' => 'Чертежи',\n    'upload_files' => 'Загрузить файл(ы)',\n    'rename' => 'Переименовать',\n    'create_directory' => 'Новая директория',\n    'editor_yaml' => 'YAML',\n    'error_loading' => 'Ошибка загрузки чертежа',\n    'not_found' => 'Чертёж не найден',\n    'apply' => 'Сохранить и мигрировать',\n    'invalid_file' => 'Некорректное название файла: :name. Название файлов может содержать только буквы, цифры, нижние подчёркивания, дефисы и точки. Примеры правильного названия файла: blueprint.yaml, subdirectory/blueprint.yaml',\n    'migrating' => 'Миграция чертежа',\n    'migrated' => 'Чертёж успешно мигрирован.',\n    'mixin' => 'Mixin',\n    'entry' => 'Entry',\n    'stream' => 'Stream',\n    'structure' => 'Structure',\n    'single' => 'Single',\n    'global' => 'Global / Configuration',\n  ],\n  'editor' => [\n    'create' => 'Создать',\n    'refresh' => 'Обновить',\n    'blueprint' => 'Чертёж',\n    'invalid_type' => 'Неизвестный тип.',\n    'error_no_doctype_permissions' => 'У вас нет доступа к редактированию документа: :doctype',\n  ],\n];\n"
  },
  {
    "path": "modules/tailor/lang/ru.json",
    "content": "{\n  \"Manage Entries\": \"Управление записями\",\n  \"Create :name Entry\": \"Создать запись :name\",\n  \"New :name\": \"Новая запись \\\":name\\\"\",\n  \"Import Entries\": \"Импорт записей\",\n  \"Export Entries\": \"Экспорт записей\",\n  \"First Draft\": \"Первый черновик\",\n  \"Draft Saved\": \"Черновик сохранен\",\n  \"Draft Applied\": \"Черновик применен\",\n  \"Draft Created\": \"Черновик создан\",\n  \"Draft Discarded\": \"Черновик удален\",\n  \"Create Entry\": \"Создать запись\",\n  \"Publish Entry\": \"Опубликовать запись\",\n  \"Delete Entry\": \"Удалить запись\",\n  \"Entries have been disabled\": \"Записи были отключены\",\n  \"Entries have been enabled\": \"Записи были включены\",\n  \"Entries have been deleted\": \"Записи были удалены\",\n  \"Entries have been restored\": \"Записи восстановлены\",\n  \"Entries have been duplicated\": \"Записи дублированы\",\n  \"Manage Blueprints\": \"Управление чертежами\",\n  \"All Entries\": \"Все записи\",\n  \"Published Date\": \"Дата публикации\",\n  \"Published\": \"Опубликовано\",\n  \"Expired\": \"Истекший\",\n  \"Scheduled\": \"Запланированное\",\n  \"Hidden\": \"Скрытый\",\n  \"Draft\": \"Черновик\",\n  \"Deleted\": \"Удалено\",\n  \"Slug\": \"Слаг\",\n  \"Enabled\": \"Включено\",\n  \"Schedule publish date\": \"Запланировать дату публикации\",\n  \"Set expiry date\": \"Дата снятия с публикации\",\n  \"View full slug\": \"Посмотреть полный слаг\",\n  \"Apply this Draft\": \"Применить черновик\",\n  \"Remove\": \"Удалить\",\n  \"Drafts are not visible on the website until they are applied.\": \"Черновики не видны на сайте до тех пор, пока они не опубликованы.\",\n  \"Save Draft\": \"Сохранить черновик\",\n  \"Do you really want to discard the draft?\": \"Вы действительно хотите удалить этот черновик?\",\n  \"Discard Draft\": \"Отбросить черновик\",\n  \"Save & Apply Draft\": \"Сохранить и применить черновик\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Вы действительно хотите удалить эту запись? Это также удалит все ее существующие черновики.\",\n  \"Create New Draft\": \"Создать новый черновик\",\n  \"Select Draft to Edit\": \"Выберите черновик для редактирования\",\n  \"Edit the Primary Record\": \"Редактировать основную запись\",\n  \"Unnamed Draft\": \"Неназванный черновик\",\n  \"Notes\": \"Заметки\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Документ имеет несохраненные изменения. Вы хотите удалить их и создать новый черновик?\",\n  \"Preview\": \"Просмотр\",\n  \"Unsaved\": \"Несохраненно\",\n  \"put the draft notes here\": \"Оставьте заметки о черновике здесь\",\n  \"Top Level\": \"Верхний уровень\",\n  \"Draft name: draft notes\": \"Название черновика: пример заметки\",\n  \"Title\": \"Заголовок\",\n  \"Publish Date\": \"Дата публикации\",\n  \"Expiry Date\": \"Дата окончания\",\n  \"Entry Type\": \"Тип записи\",\n  \"Handle\": \"Псевдоним\",\n  \"Collection\": \"Коллекция\",\n  \"Displays a collection of entries.\": \"Отображает коллекцию записей.\",\n  \"Global\": \"Глобальные\",\n  \"Makes globals available to the page.\": \"Делает глобальные переменные доступными для страницы.\",\n  \"Section\": \"Секция\",\n  \"Defines a website section with a supporting entry.\": \"Определяет раздел веб-сайта со вспомогательной записью.\",\n  \"URL code (slug) used to find the primary record.\": \"Укажите (слаг), используемый для поиска основной записи.\",\n  \"Default View\": \"Вид по умолчанию\",\n  \"Used as default entry point when previewing the record.\": \"Используется как точка входа по умолчанию при предварительном просмотре записи.\",\n  \"Full Slug\": \"Полный слаг\",\n  \"Use the full slug when looking up the record.\": \"Используйте полный слаг при поиске записи.\",\n  \"Are you sure?\": \"Вы уверены?\",\n  \"Delete Forever\": \"Удалить навсегда\",\n  \"This record is not visible because it has been deleted.\": \"Запись не видна, потому что она удалена.\",\n  \"Restore this Record\": \"Восстановить запись\",\n  \"Do you really want to delete this permanently?\": \"Вы действительно хотите удалить это окончательно?\",\n  \"ID (Primary Key)\": \"ID (основной ключ)\",\n  \"Column name (index) to match with the primary record.\": \"Имя столбца (index) совпадает с основной записью.\",\n  \"Records Per Page\": \"Записей на страницу\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Количество записей для отображения на одной странице. Оставьте пустым для отключения пагинации.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Недопустимый формат записей на странице. Значение должно быть числом.\",\n  \"Pagination\": \"Пагинация\",\n  \"Page Number\": \"Номер страницы\",\n  \"This value is used to determine what page the user is on.\": \"Это значение используется для определения страницы, на которой находится пользователь.\",\n  \"Sorting\": \"Сортировка\",\n  \"Sort by Column\": \"Сортировка по столбцу\",\n  \"Model column the records should be ordered by\": \"Столбец модели, по которому должны быть отсортированы записи\",\n  \"Direction\": \"Направление\",\n  \"Update :name Entries\": \"Обновить записи :name\",\n  \"Update :name\": \"Обновить :name\",\n  \":name Entry\": \":name запись\",\n  \"All :name Items\": \"Все записи :name\",\n  \"Update Existing Records\": \"Обновить существующие записи\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Установите этот флажок, чтобы обновить записи, которые соответствуют ID, заголовку или слагу.\",\n  \"Copy\": \"Копировать\",\n  \"Unnamed draft\": \"Неназванный черновик\",\n  \"Top level\": \"Верхний уровень\"\n}"
  },
  {
    "path": "modules/tailor/lang/sk.json",
    "content": "{\n  \"Manage Entries\": \"Spravovať záznamy\",\n  \"Create :name Entry\": \"Vytvoriť :name záznam\",\n  \"New :name\": \"New :name\",\n  \"Import Entries\": \"Importovať položky\",\n  \"Export Entries\": \"Exportovať záznamy\",\n  \"First Draft\": \"Prvý návrh\",\n  \"Draft Saved\": \"Koncept uložený\",\n  \"Draft Applied\": \"Použitý koncept\",\n  \"Draft Created\": \"Koncept vytvorený\",\n  \"Draft Discarded\": \"Koncept vyradený\",\n  \"Create Entry\": \"Vytvoriť položku\",\n  \"Publish Entry\": \"Publikovať položku\",\n  \"Delete Entry\": \"Odstrániť položku\",\n  \"Entries have been disabled\": \"Vstupy boli zakázané\",\n  \"Entries have been enabled\": \"Záznamy boli povolené\",\n  \"Entries have been deleted\": \"Záznamy boli vymazané\",\n  \"Entries have been restored\": \"Záznamy boli obnovené\",\n  \"Entries have been duplicated\": \"Záznamy boli duplikované\",\n  \"Manage Blueprints\": \"Spravujte plány\",\n  \"All Entries\": \"Všetky záznamy\",\n  \"Published Date\": \"Dátum zverejnenia\",\n  \"Published\": \"Uverejnený\",\n  \"Expired\": \"Platnosť vypršala\",\n  \"Scheduled\": \"Naplánovaný\",\n  \"Hidden\": \"Skryté\",\n  \"Draft\": \"Návrh\",\n  \"Deleted\": \"Odstránené\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Povolené\",\n  \"Schedule publish date\": \"Naplánujte dátum zverejnenia\",\n  \"Set expiry date\": \"Nastavte dátum vypršania platnosti\",\n  \"View full slug\": \"Zobraziť celý slimák\",\n  \"Apply this Draft\": \"Použiť tento koncept\",\n  \"Remove\": \"Odstrániť\",\n  \"Drafts are not visible on the website until they are applied.\": \"Koncepty nie sú na webovej lokalite viditeľné, kým sa nepoužijú.\",\n  \"Save Draft\": \"Uložiť koncept\",\n  \"Do you really want to discard the draft?\": \"Naozaj chcete návrh zahodiť?\",\n  \"Discard Draft\": \"Zahodiť koncept\",\n  \"Save & Apply Draft\": \"Uložiť a použiť koncept\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Naozaj chcete vymazať záznam? Vymaže tiež všetky koncepty, ak nejaké existujú.\",\n  \"Create New Draft\": \"Vytvoriť nový koncept\",\n  \"Select Draft to Edit\": \"Vyberte položku Koncept na úpravu\",\n  \"Edit the Primary Record\": \"Upravte primárny záznam\",\n  \"Unnamed Draft\": \"Nepomenovaný koncept\",\n  \"Notes\": \"Poznámky\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokument obsahuje neuložené zmeny. Chcete ich zahodiť a pokračovať vo vytváraní nového konceptu?\",\n  \"Preview\": \"Náhľad\",\n  \"Unsaved\": \"Neuložené\",\n  \"put the draft notes here\": \"vložte návrhy poznámok sem\",\n  \"Top Level\": \"Najvyššia úroveň\",\n  \"Draft name: draft notes\": \"Názov konceptu: koncept poznámok\",\n  \"Title\": \"Názov\",\n  \"Publish Date\": \"Dátum zverejnenia\",\n  \"Expiry Date\": \"Dátum spotreby\",\n  \"Entry Type\": \"Typ vstupu\",\n  \"Handle\": \"Rukoväť\",\n  \"Collection\": \"Zbierka\",\n  \"Displays a collection of entries.\": \"Zobrazí kolekciu záznamov.\",\n  \"Global\": \"globálne\",\n  \"Makes globals available to the page.\": \"Sprístupňuje pre stránku globálne informácie.\",\n  \"Section\": \"oddiel\",\n  \"Defines a website section with a supporting entry.\": \"Definuje sekciu webovej stránky s podporným záznamom.\",\n  \"URL code (slug) used to find the primary record.\": \"Zadajte slimák použitý na nájdenie primárneho záznamu.\",\n  \"Default View\": \"Predvolené zobrazenie\",\n  \"Used as default entry point when previewing the record.\": \"Používa sa ako predvolený vstupný bod pri prezeraní záznamu.\",\n  \"Full Slug\": \"Celý Slug\",\n  \"Use the full slug when looking up the record.\": \"Pri vyhľadávaní záznamu použite úplný slimák.\",\n  \"Are you sure?\": \"Ste si istý?\",\n  \"Delete Forever\": \"Zmazať navždy\",\n  \"This record is not visible because it has been deleted.\": \"Tento záznam nie je viditeľný, pretože bol odstránený.\",\n  \"Restore this Record\": \"Obnoviť záznam\",\n  \"Do you really want to delete this permanently?\": \"Chcete naozaj zmazať tento záznam?\",\n  \"ID (Primary Key)\": \"ID (Primárny kľúč)\",\n  \"Column name (index) to match with the primary record.\": \"Názov stĺpca (index), ktorý sa má zhodovať s primárnym záznamom.\",\n  \"Records Per Page\": \"Záznamov na stránku\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Počet záznamov, ktoré sa majú zobraziť na jednej stránke. Ak chcete zakázať stránkovanie, nechajte prázdne.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Neplatný formát hodnoty záznamov na stránku. Hodnota by musí byť číslo.\",\n  \"Pagination\": \"Stránkovanie\",\n  \"Page Number\": \"Číslo strany\",\n  \"This value is used to determine what page the user is on.\": \"Táto hodnota sa používa na určenie, na ktorej stránke sa používateľ nachádza.\",\n  \"Sorting\": \"Zoradenie\",\n  \"Sort by Column\": \"Zoradiť podľa stĺpca\",\n  \"Model column the records should be ordered by\": \"Modelový stĺpec, podľa ktorého by mali byť záznamy zoradené\",\n  \"Direction\": \"Smer\",\n  \"Update :name Entries\": \"Upraviť :name záznamy\",\n  \"Update :name\": \"Upraviť :name\",\n  \":name Entry\": \":name záznam\",\n  \"All :name Items\": \"Všetky :name položky\",\n  \"Update Existing Records\": \"Upraviť existujúce záznamy\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Začiarknutím tohto políčka aktualizujete záznamy, ktoré sa zhodujú s rovnakým ID, názvom alebo slugom.\",\n  \"Copy\": \"Skopírovať\",\n  \"Unnamed draft\": \"Nepomenovaný koncept\",\n  \"Top level\": \"Najvyššia úroveň\"\n}"
  },
  {
    "path": "modules/tailor/lang/sl.json",
    "content": "{\n  \"Manage Entries\": \"Upravljanje vnosov\",\n  \"Create :name Entry\": \"Ustvari vnos :name\",\n  \"New :name\": \"New :name\",\n  \"Import Entries\": \"Uvoz\",\n  \"Export Entries\": \"Izvoz\",\n  \"First Draft\": \"Prvi osnutek\",\n  \"Draft Saved\": \"Osnutek shranjen\",\n  \"Draft Applied\": \"Osnutek apliciran\",\n  \"Draft Created\": \"Osnutek ustvarjen\",\n  \"Draft Discarded\": \"Osnutek zavržen\",\n  \"Create Entry\": \"Ustvari vnos\",\n  \"Publish Entry\": \"Objavi vnos\",\n  \"Delete Entry\": \"Izbriši vnos\",\n  \"Entries have been disabled\": \"Vnosi so bili onemogočeni\",\n  \"Entries have been enabled\": \"Vnosi so bili omogočeni\",\n  \"Entries have been deleted\": \"Vnosi so bili izbrisani\",\n  \"Entries have been restored\": \"Entries have been restored\",\n  \"Entries have been duplicated\": \"Entries have been duplicated\",\n  \"Manage Blueprints\": \"Upravljanje shem\",\n  \"All Entries\": \"Vsi vnosi\",\n  \"Published Date\": \"Datum objave\",\n  \"Published\": \"Objavljeno\",\n  \"Expired\": \"Pretećeno\",\n  \"Scheduled\": \"Načrtovano\",\n  \"Hidden\": \"Skrito\",\n  \"Draft\": \"Osnutek\",\n  \"Deleted\": \"Izbrisano\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Omogočeno\",\n  \"Schedule publish date\": \"Določi datum objave\",\n  \"Set expiry date\": \"Določi datum poteka\",\n  \"View full slug\": \"Ogled celotne url povezave\",\n  \"Apply this Draft\": \"Apliciraj osnutek\",\n  \"Remove\": \"Odstrani\",\n  \"Drafts are not visible on the website until they are applied.\": \"Osnutki niso vidni na spletni strani, dokler niso aplicirani.\",\n  \"Save Draft\": \"Shrani osnutek\",\n  \"Do you really want to discard the draft?\": \"Ste prepričani, da želite zavreči ta osnutek?\",\n  \"Discard Draft\": \"Zavrzi osnutek\",\n  \"Save & Apply Draft\": \"Shrani in apliciraj osnutek\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Ali res želite izbrisati vnos? Izbrisani bodo tudi vsi obstoječi osnutki.\",\n  \"Create New Draft\": \"Ustvari nov osnutek\",\n  \"Select Draft to Edit\": \"Izberi osnutek za urejanje\",\n  \"Edit the Primary Record\": \"Uredi primarni zapis\",\n  \"Unnamed Draft\": \"Neimenovan osnutek\",\n  \"Notes\": \"Opombe\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokument ima neshranjene spremembe. Ali jih želite zavreči in nadaljevati z ustvarjanjem novega osnutka?\",\n  \"Preview\": \"Predogled\",\n  \"Unsaved\": \"Neshranjeno\",\n  \"put the draft notes here\": \"tukaj vnesite opombe osnutka\",\n  \"Top Level\": \"Najvišji nivo\",\n  \"Draft name: draft notes\": \"Ime osnutka: opombe osnutka\",\n  \"Title\": \"Naziv\",\n  \"Publish Date\": \"Datum objave\",\n  \"Expiry Date\": \"Datum poteka\",\n  \"Entry Type\": \"Vrsta vnosa\",\n  \"Handle\": \"Ročaj\",\n  \"Collection\": \"Zbirka\",\n  \"Displays a collection of entries.\": \"Prikaže zbirko vnosov.\",\n  \"Global\": \"Globalno\",\n  \"Makes globals available to the page.\": \"Omogoči globalne podatke na voljo strani.\",\n  \"Section\": \"Razdelek\",\n  \"Defines a website section with a supporting entry.\": \"Določa razdelek spletnega mesta s podpornim vnosom.\",\n  \"URL code (slug) used to find the primary record.\": \"Določite polž, uporabljen za iskanje primarnega zapisa.\",\n  \"Default View\": \"Privzeti pogled\",\n  \"Used as default entry point when previewing the record.\": \"Uporablja se kot privzeta vstopna točka pri predogledu zapisa.\",\n  \"Full Slug\": \"Poln polž\",\n  \"Use the full slug when looking up the record.\": \"Pri iskanju zapisa uporabite polno črko.\",\n  \"Are you sure?\": \"Are you sure?\",\n  \"Delete Forever\": \"Delete Forever\",\n  \"This record is not visible because it has been deleted.\": \"This record is not visible because it has been deleted.\",\n  \"Restore this Record\": \"Restore this Record\",\n  \"Do you really want to delete this permanently?\": \"Do you really want to delete this permanently?\",\n  \"ID (Primary Key)\": \"ID (Primary Key)\",\n  \"Column name (index) to match with the primary record.\": \"Column name (index) to match with the primary record.\",\n  \"Records Per Page\": \"Records Per Page\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Number of records to display on a single page. Leave empty to disable pagination.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Invalid format of the records per page value. The value should be a number.\",\n  \"Pagination\": \"Pagination\",\n  \"Page Number\": \"Page Number\",\n  \"This value is used to determine what page the user is on.\": \"This value is used to determine what page the user is on.\",\n  \"Sorting\": \"Sorting\",\n  \"Sort by Column\": \"Sort by Column\",\n  \"Model column the records should be ordered by\": \"Model column the records should be ordered by\",\n  \"Direction\": \"Direction\",\n  \"Update :name Entries\": \"Update :name Entries\",\n  \"Update :name\": \"Update :name\",\n  \":name Entry\": \":name Entry\",\n  \"All :name Items\": \"All :name Entries\",\n  \"Update Existing Records\": \"Update Existing Records\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Check this box to update records that match the same ID, title or slug.\",\n  \"Copy\": \"Copy\",\n  \"Unnamed draft\": \"Neimenovan osnutek\",\n  \"Top level\": \"Najvišji nivo\"\n}"
  },
  {
    "path": "modules/tailor/lang/sv.json",
    "content": "{\n  \"Manage Entries\": \"Hantera poster\",\n  \"Create :name Entry\": \"Skapa :name post\",\n  \"New :name\": \"Ny :namnpost\",\n  \"Import Entries\": \"Importera poster\",\n  \"Export Entries\": \"Exportera poster\",\n  \"First Draft\": \"Första utkastet\",\n  \"Draft Saved\": \"Utkast sparat\",\n  \"Draft Applied\": \"Utkast tillämpat\",\n  \"Draft Created\": \"Utkast skapat\",\n  \"Draft Discarded\": \"Utkast kasserat\",\n  \"Create Entry\": \"Skapa post\",\n  \"Publish Entry\": \"Publicera inlägg\",\n  \"Delete Entry\": \"Ta bort inlägg\",\n  \"Entries have been disabled\": \"Inlägg har inaktiverats\",\n  \"Entries have been enabled\": \"Inlägg har aktiverats\",\n  \"Entries have been deleted\": \"Inlägg har raderats\",\n  \"Entries have been restored\": \"Inlägg har återställts\",\n  \"Entries have been duplicated\": \"Inlägg har duplicerats\",\n  \"Manage Blueprints\": \"Hantera ritningar\",\n  \"All Entries\": \"Alla poster\",\n  \"Published Date\": \"Publiceringsdatum\",\n  \"Published\": \"Publicerad\",\n  \"Expired\": \"Utgånget\",\n  \"Scheduled\": \"Schemalagt\",\n  \"Hidden\": \"Dold\",\n  \"Draft\": \"Förslag\",\n  \"Deleted\": \"raderade\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Aktiverad\",\n  \"Schedule publish date\": \"Schemalägg publiceringsdatum\",\n  \"Set expiry date\": \"Ställ in utgångsdatum\",\n  \"View full slug\": \"Se hela snigeln\",\n  \"Apply this Draft\": \"Tillämpa detta utkast\",\n  \"Remove\": \"Ta bort\",\n  \"Drafts are not visible on the website until they are applied.\": \"Utkast är inte synliga på webbplatsen förrän de tillämpas.\",\n  \"Save Draft\": \"Spara utkast\",\n  \"Do you really want to discard the draft?\": \"Vill du verkligen kassera utkastet?\",\n  \"Discard Draft\": \"Släng utkast\",\n  \"Save & Apply Draft\": \"Spara och använd utkast\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Vill du verkligen radera posten? Det kommer också att radera alla utkast om några finns.\",\n  \"Create New Draft\": \"Skapa nytt utkast\",\n  \"Select Draft to Edit\": \"Välj Utkast att redigera\",\n  \"Edit the Primary Record\": \"Redigera den primära posten\",\n  \"Unnamed Draft\": \"Namnlöst utkast\",\n  \"Notes\": \"Anteckningar\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Dokumentet har osparade ändringar. Vill du kassera dem och fortsätta med att skapa ett nytt utkast?\",\n  \"Preview\": \"Förhandsvisning\",\n  \"Unsaved\": \"Ej sparad\",\n  \"put the draft notes here\": \"lägg utkastet till anteckningar här\",\n  \"Top Level\": \"Högsta nivån\",\n  \"Draft name: draft notes\": \"Utkastnamn: utkast till anteckningar\",\n  \"Title\": \"Titel\",\n  \"Publish Date\": \"Utgivningsdatum\",\n  \"Expiry Date\": \"Utgångsdatum\",\n  \"Entry Type\": \"Ingångstyp\",\n  \"Handle\": \"Hantera\",\n  \"Collection\": \"Samling\",\n  \"Displays a collection of entries.\": \"Visar en samling poster.\",\n  \"Global_\": \"Global\",\n  \"Makes globals available to the page.\": \"Gör globaler tillgängliga för sidan.\",\n  \"Section\": \"Sektion\",\n  \"Defines a website section with a supporting entry.\": \"Definierar en webbplatssektion med en stödjande post.\",\n  \"URL code (slug) used to find the primary record.\": \"Ange den slug som används för att hitta den primära posten.\",\n  \"Default View\": \"Standardläget\",\n  \"Use this page as a default entry point when previewing the record.\": \"Används som standardingångspunkt vid förhandsgranskning av posten.\",\n  \"Full Slug\": \"Full Slug\",\n  \"Use the full slug when looking up the record.\": \"Använd hela snigeln när du slår upp posten.\",\n  \"Are you sure?\": \"Är du säker?\",\n  \"Delete Forever\": \"Radera för alltid\",\n  \"This record is not visible because it has been deleted.\": \"Denna post är inte synlig eftersom den har tagits bort.\",\n  \"Restore this Record\": \"Återställ denna post\",\n  \"Do you really want to delete this permanently?\": \"Vill du verkligen ta bort detta permanent?\",\n  \"ID (Primary Key)\": \"ID (primär nyckel)\",\n  \"Column name (index) to match with the primary record.\": \"Kolumnnamn (index) för att matcha den primära posten.\",\n  \"Records Per Page\": \"Rekord per sida\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Antal poster som ska visas på en enda sida. Lämna tomt för att inaktivera paginering.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Ogiltigt format för posterna per sidvärde. Värdet ska vara ett tal.\",\n  \"Pagination\": \"Paginering\",\n  \"Page Number\": \"Sidonummer\",\n  \"This value is used to determine what page the user is on.\": \"Detta värde används för att bestämma vilken sida användaren är på.\",\n  \"Sorting\": \"Sortering\",\n  \"Sort by Column\": \"Sortera efter kolumn\",\n  \"Model column the records should be ordered by\": \"Modellkolumn posterna ska sorteras efter\",\n  \"Direction\": \"Riktning\",\n  \"Update :name Entries\": \"Uppdatera :namnposter\",\n  \"Update :name\": \"Uppdatering :namn\",\n  \":name Entry\": \":namnpost\",\n  \"All :name Items\": \"Alla :namnposter\",\n  \"Update Existing Records\": \"Uppdatera befintliga poster\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Markera den här rutan för att uppdatera poster som matchar samma ID, titel eller snigel.\",\n  \"Copy\": \"Kopiera\"\n}"
  },
  {
    "path": "modules/tailor/lang/th.json",
    "content": "{\n  \"Manage Entries\": \"จัดการรายการ\",\n  \"Create :name Entry\": \"สร้าง :name Entry\",\n  \"New :name\": \"ใหม่ :รายการชื่อ\",\n  \"Import Entries\": \"นำเข้ารายการ\",\n  \"Export Entries\": \"ส่งออกรายการ\",\n  \"First Draft\": \"ร่างแรก\",\n  \"Draft Saved\": \"บันทึกร่างแล้ว\",\n  \"Draft Applied\": \"ฉบับร่างประยุกต์\",\n  \"Draft Created\": \"สร้างร่างแล้ว\",\n  \"Draft Discarded\": \"ร่างทิ้ง\",\n  \"Create Entry\": \"สร้างรายการ\",\n  \"Publish Entry\": \"เผยแพร่รายการ\",\n  \"Delete Entry\": \"ลบรายการ\",\n  \"Entries have been disabled\": \"รายการถูกปิดการใช้งาน\",\n  \"Entries have been enabled\": \"เปิดใช้งานรายการแล้ว\",\n  \"Entries have been deleted\": \"รายการถูกลบ\",\n  \"Entries have been restored\": \"รายการได้รับการกู้คืน\",\n  \"Entries have been duplicated\": \"รายการได้รับการทำซ้ำ\",\n  \"Manage Blueprints\": \"จัดการพิมพ์เขียว\",\n  \"All Entries\": \"รายการทั้งหมด\",\n  \"Published Date\": \"วันที่เผยแพร่\",\n  \"Published\": \"ที่ตีพิมพ์\",\n  \"Expired\": \"หมดอายุ\",\n  \"Scheduled\": \"กำหนดการ\",\n  \"Hidden\": \"ที่ซ่อนอยู่\",\n  \"Draft\": \"ร่าง\",\n  \"Deleted\": \"ถูกลบ\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"เปิดใช้งาน\",\n  \"Schedule publish date\": \"กำหนดวันที่เผยแพร่\",\n  \"Set expiry date\": \"กำหนดวันหมดอายุ\",\n  \"View full slug\": \"ดูทากตัวเต็ม\",\n  \"Apply this Draft\": \"ใช้ร่างนี้\",\n  \"Remove\": \"ลบ\",\n  \"Drafts are not visible on the website until they are applied.\": \"แบบร่างจะไม่ปรากฏบนเว็บไซต์จนกว่าจะมีการนำไปใช้\",\n  \"Save Draft\": \"บันทึกร่าง\",\n  \"Do you really want to discard the draft?\": \"คุณต้องการยกเลิกร่างจดหมายหรือไม่?\",\n  \"Discard Draft\": \"ทิ้งร่างจดหมาย\",\n  \"Save & Apply Draft\": \"บันทึกและใช้ฉบับร่าง\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"คุณต้องการลบบันทึกจริงหรือไม่? นอกจากนี้ยังจะลบฉบับร่างทั้งหมดหากมี\",\n  \"Create New Draft\": \"สร้างฉบับร่างใหม่\",\n  \"Select Draft to Edit\": \"เลือกฉบับร่างเพื่อแก้ไข\",\n  \"Edit the Primary Record\": \"แก้ไขบันทึกหลัก\",\n  \"Unnamed Draft\": \"ร่างไม่มีชื่อ\",\n  \"Notes\": \"หมายเหตุ\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"เอกสารมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก คุณต้องการยกเลิกและดำเนินการสร้างฉบับร่างใหม่หรือไม่?\",\n  \"Preview\": \"ดูตัวอย่าง\",\n  \"Unsaved\": \"ยังไม่ได้บันทึก\",\n  \"put the draft notes here\": \"ใส่ร่างบันทึกย่อที่นี่\",\n  \"Top Level\": \"ระดับสูง\",\n  \"Draft name: draft notes\": \"ชื่อฉบับร่าง: บันทึกย่อฉบับร่าง\",\n  \"Title\": \"ชื่อ\",\n  \"Publish Date\": \"วันที่เผยแพร่\",\n  \"Expiry Date\": \"วันหมดอายุ\",\n  \"Entry Type\": \"ประเภทรายการ\",\n  \"Handle\": \"รับมือ\",\n  \"Collection\": \"ของสะสม\",\n  \"Displays a collection of entries.\": \"แสดงรายการต่างๆ\",\n  \"Global_\": \"ทั่วโลก\",\n  \"Makes globals available to the page.\": \"ทำให้ globals พร้อมใช้งานบนเพจ\",\n  \"Section\": \"ส่วน\",\n  \"Defines a website section with a supporting entry.\": \"กำหนดส่วนเว็บไซต์ที่มีรายการสนับสนุน\",\n  \"URL code (slug) used to find the primary record.\": \"ระบุกระสุนที่ใช้ค้นหาบันทึกหลัก\",\n  \"Default View\": \"มุมมองเริ่มต้น\",\n  \"Use this page as a default entry point when previewing the record.\": \"ใช้เป็นจุดเข้าเริ่มต้นเมื่อดูตัวอย่างเรกคอร์ด\",\n  \"Full Slug\": \"กระสุนเต็ม\",\n  \"Use the full slug when looking up the record.\": \"ใช้กระสุนเต็มเมื่อค้นหาบันทึก\",\n  \"Are you sure?\": \"คุณแน่ใจไหม?\",\n  \"Delete Forever\": \"ลบตลอดไป\",\n  \"This record is not visible because it has been deleted.\": \"บันทึกนี้ไม่สามารถมองเห็นได้เนื่องจากถูกลบไปแล้ว\",\n  \"Restore this Record\": \"กู้คืนบันทึกนี้\",\n  \"Do you really want to delete this permanently?\": \"คุณต้องการลบสิ่งนี้อย่างถาวรหรือไม่\",\n  \"ID (Primary Key)\": \"ID (คีย์หลัก)\",\n  \"Column name (index) to match with the primary record.\": \"ชื่อคอลัมน์ (ดัชนี) เพื่อให้ตรงกับระเบียนหลัก\",\n  \"Records Per Page\": \"บันทึกต่อหน้า\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"จำนวนระเบียนที่จะแสดงบนหน้าเดียว เว้นว่างไว้เพื่อปิดใช้งานการแบ่งหน้า\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"รูปแบบไม่ถูกต้องของระเบียนต่อค่าหน้า ค่าควรเป็นตัวเลข\",\n  \"Pagination\": \"การแบ่งหน้า\",\n  \"Page Number\": \"เลขหน้า\",\n  \"This value is used to determine what page the user is on.\": \"ค่านี้ใช้เพื่อกำหนดว่าผู้ใช้อยู่ในหน้าใด\",\n  \"Sorting\": \"การเรียงลำดับ\",\n  \"Sort by Column\": \"จัดเรียงตามคอลัมน์\",\n  \"Model column the records should be ordered by\": \"คอลัมน์แบบจำลองที่ควรเรียงลำดับเรกคอร์ด\",\n  \"Direction\": \"ทิศทาง\",\n  \"Update :name Entries\": \"อัปเดต: รายการชื่อ\",\n  \"Update :name\": \"อัพเดท : ชื่อ\",\n  \":name Entry\": \": ชื่อรายการ\",\n  \"All :name Items\": \"ทั้งหมด : รายการชื่อ\",\n  \"Update Existing Records\": \"อัปเดตบันทึกที่มีอยู่\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"ทำเครื่องหมายที่ช่องนี้เพื่ออัปเดตระเบียนที่ตรงกับ ID ชื่อเรื่อง หรือ Slug เดียวกัน\",\n  \"Copy\": \"สำเนา\"\n}"
  },
  {
    "path": "modules/tailor/lang/tr.json",
    "content": "{\n  \"Manage Entries\": \"Girişleri Yönet\",\n  \"Create :name Entry\": \"Oluştur :name Girişi\",\n  \"New :name\": \"Yeni :name Girişi\",\n  \"Import Entries\": \"Girişleri İçe Aktar\",\n  \"Export Entries\": \"Girdileri Dışa Aktar\",\n  \"First Draft\": \"İlk taslak\",\n  \"Draft Saved\": \"Taslak Kaydedildi\",\n  \"Draft Applied\": \"Taslak Uygulandı\",\n  \"Draft Created\": \"Taslak Oluşturuldu\",\n  \"Draft Discarded\": \"Taslak Silindi\",\n  \"Create Entry\": \"Giriş Oluştur\",\n  \"Publish Entry\": \"Girişi Yayınla\",\n  \"Delete Entry\": \"Girişi sil\",\n  \"Entries have been disabled\": \"Girişler devre dışı bırakıldı\",\n  \"Entries have been enabled\": \"Girişler etkinleştirildi\",\n  \"Entries have been deleted\": \"girişler silindi\",\n  \"Entries have been restored\": \"Girişler geri yüklendi\",\n  \"Entries have been duplicated\": \"Girişler çoğaltıldı\",\n  \"Manage Blueprints\": \"Planları Yönet\",\n  \"All Entries\": \"Bütün girdiler\",\n  \"Published Date\": \"yayınlanma tarihi\",\n  \"Published\": \"Yayınlanan\",\n  \"Expired\": \"Süresi doldu\",\n  \"Scheduled\": \"zamanlanmış\",\n  \"Hidden\": \"Gizlenmiş\",\n  \"Draft\": \"Taslak\",\n  \"Deleted\": \"silindi\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"Etkinleştirilmiş\",\n  \"Schedule publish date\": \"Yayın tarihini planla\",\n  \"Set expiry date\": \"Son kullanma tarihini ayarla\",\n  \"View full slug\": \"Tam sümüklü böcek görüntüle\",\n  \"Apply this Draft\": \"Bu Taslağı uygula\",\n  \"Remove\": \"Kaldırmak\",\n  \"Drafts are not visible on the website until they are applied.\": \"Taslaklar, uygulanıncaya kadar web sitesinde görünmez.\",\n  \"Save Draft\": \"Taslağı kaydet\",\n  \"Do you really want to discard the draft?\": \"Taslağı gerçekten iptal etmek istiyor musunuz?\",\n  \"Discard Draft\": \"Taslağı Sil\",\n  \"Save & Apply Draft\": \"Taslağı Kaydet ve Uygula\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Kaydı gerçekten silmek istiyor musunuz? Ayrıca varsa tüm taslakları siler.\",\n  \"Create New Draft\": \"Yeni Taslak oluştur\",\n  \"Select Draft to Edit\": \"Düzenlenecek Taslağı Seçin\",\n  \"Edit the Primary Record\": \"Birincil Kaydı Düzenleyin\",\n  \"Unnamed Draft\": \"Adsız taslak\",\n  \"Notes\": \"Notlar\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"Belgede kaydedilmemiş değişiklikler var. Bunları atmak ve yeni bir taslak oluşturmaya devam etmek istiyor musunuz?\",\n  \"Preview\": \"Ön izleme\",\n  \"Unsaved\": \"Kaydedilmemiş\",\n  \"put the draft notes here\": \"taslak notları buraya koy\",\n  \"Top Level\": \"Üst düzey\",\n  \"Draft name: draft notes\": \"Taslak adı: taslak notlar\",\n  \"Title\": \"Başlık\",\n  \"Publish Date\": \"Yayın tarihi\",\n  \"Expiry Date\": \"Son kullanma tarihi\",\n  \"Entry Type\": \"Giriş Türü\",\n  \"Handle\": \"Üstesinden gelmek\",\n  \"Collection\": \"Toplamak\",\n  \"Displays a collection of entries.\": \"Girişlerin bir koleksiyonunu görüntüler.\",\n  \"Global_\": \"küresel\",\n  \"Makes globals available to the page.\": \"Globalleri sayfa için kullanılabilir hale getirir.\",\n  \"Section\": \"Bölüm\",\n  \"Defines a website section with a supporting entry.\": \"Destekleyici bir giriş içeren bir web sitesi bölümü tanımlar.\",\n  \"URL code (slug) used to find the primary record.\": \"Birincil kaydı bulmak için kullanılan bilgi parçasını belirtin.\",\n  \"Default View\": \"Varsayılan görünüm\",\n  \"Use this page as a default entry point when previewing the record.\": \"Kaydı önizlerken varsayılan giriş noktası olarak kullanılır.\",\n  \"Full Slug\": \"Tam Slug\",\n  \"Use the full slug when looking up the record.\": \"Kaydı ararken tam bilgi kullanın.\",\n  \"Are you sure?\": \"Emin misin?\",\n  \"Delete Forever\": \"Sonsuza Kadar Sil\",\n  \"This record is not visible because it has been deleted.\": \"Bu kayıt silindiği için görünmüyor.\",\n  \"Restore this Record\": \"Bu Kaydı Geri Yükle\",\n  \"Do you really want to delete this permanently?\": \"Bunu gerçekten kalıcı olarak silmek istiyor musunuz?\",\n  \"ID (Primary Key)\": \"Kimlik (Birincil Anahtar)\",\n  \"Column name (index) to match with the primary record.\": \"Birincil kayıtla eşleşecek sütun adı (dizin).\",\n  \"Records Per Page\": \"Sayfa başına kayıt\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Tek bir sayfada görüntülenecek kayıt sayısı. Sayfalandırmayı devre dışı bırakmak için boş bırakın.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Sayfa değeri başına kayıtların geçersiz biçimi. Değer bir sayı olmalıdır.\",\n  \"Pagination\": \"sayfalandırma\",\n  \"Page Number\": \"Sayfa numarası\",\n  \"This value is used to determine what page the user is on.\": \"Bu değer, kullanıcının hangi sayfada olduğunu belirlemek için kullanılır.\",\n  \"Sorting\": \"Sıralama\",\n  \"Sort by Column\": \"Sütuna Göre Sırala\",\n  \"Model column the records should be ordered by\": \"Kayıtların sıralanması gereken model sütunu\",\n  \"Direction\": \"Yön\",\n  \"Update :name Entries\": \"Güncelle :name Girişleri\",\n  \"Update :name\": \"Güncelle :name\",\n  \":name Entry\": \":name Girişi\",\n  \"All :name Items\": \"Tüm :name Girişleri\",\n  \"Update Existing Records\": \"Mevcut Kayıtları Güncelle\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Aynı kimlik, başlık veya bilgi ile eşleşen kayıtları güncellemek için bu kutuyu işaretleyin.\",\n  \"Copy\": \"Kopyala\"\n}\n"
  },
  {
    "path": "modules/tailor/lang/uk.json",
    "content": "{\n  \"Manage Entries\": \"Керувати записами\",\n  \"Create :name Entry\": \"Створити запис :name\",\n  \"New :name\": \"Створити :name\",\n  \"Import Entries\": \"Імпорт записів\",\n  \"Export Entries\": \"Експортувати записи\",\n  \"First Draft\": \"Перша чернетка\",\n  \"Draft Saved\": \"Чернетку збережено\",\n  \"Draft Applied\": \"Чернетку застосовано\",\n  \"Draft Created\": \"Чернетка створена\",\n  \"Draft Discarded\": \"Чернетку відхилено\",\n  \"Create Entry\": \"Створити запис\",\n  \"Publish Entry\": \"Опублікувати запис\",\n  \"Delete Entry\": \"Видалити запис\",\n  \"Entries have been disabled\": \"Записи вимкнено\",\n  \"Entries have been enabled\": \"Записи ввімкнено\",\n  \"Entries have been deleted\": \"Записи видалено\",\n  \"Entries have been restored\": \"Записи відновлено\",\n  \"Entries have been duplicated\": \"Записи продубльовано\",\n  \"Manage Blueprints\": \"Керуйте кресленнями\",\n  \"All Entries\": \"Усі записи\",\n  \"Published Date\": \"Дата публікації\",\n  \"Published\": \"Опубліковано\",\n  \"Expired\": \"Термін дії минув\",\n  \"Scheduled\": \"За розкладом\",\n  \"Hidden\": \"Прихований\",\n  \"Draft\": \"Чернетка\",\n  \"Deleted\": \"Видалено\",\n  \"Slug\": \"Посилання\",\n  \"Enabled\": \"Увімкнено\",\n  \"Schedule publish date\": \"Запланувати дату публікації\",\n  \"Set expiry date\": \"Встановіть термін придатності\",\n  \"View full slug\": \"Переглянути повне посиланням\",\n  \"Apply this Draft\": \"Застосувати цю чернетку\",\n  \"Remove\": \"Видалити\",\n  \"Drafts are not visible on the website until they are applied.\": \"Чернетки не відображаються на сайті, доки їх не буде застосовано.\",\n  \"Save Draft\": \"Зберегти чернетку\",\n  \"Do you really want to discard the draft?\": \"Ви справді хочете відхилити чернетку?\",\n  \"Discard Draft\": \"Відхилити чернетку\",\n  \"Save & Apply Draft\": \"Зберегти та застосувати чернетку\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"Ви справді хочете видалити запис? Також буде видалено всі чернетки, якщо такі є.\",\n  \"Create New Draft\": \"Створити нову чернетку\",\n  \"Select Draft to Edit\": \"Виберіть Чернетка для редагування\",\n  \"Edit the Primary Record\": \"Редагувати первинний запис\",\n  \"Unnamed Draft\": \"Чернетка без назви\",\n  \"Notes\": \"Примітки\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"У документі є незбережені зміни. Відкинути їх і продовжити створення нової чернетки?\",\n  \"Preview\": \"Попередній перегляд\",\n  \"Unsaved\": \"Незбережено\",\n  \"put the draft notes here\": \"помістіть чернетки сюди\",\n  \"Top Level\": \"Вищий рівень\",\n  \"Draft name: draft notes\": \"Назва чернетки: чернетки\",\n  \"Title\": \"Назва\",\n  \"Publish Date\": \"Дата публікації\",\n  \"Expiry Date\": \"Термін придатності\",\n  \"Entry Type\": \"Тип запису\",\n  \"Handle\": \"Ручка\",\n  \"Collection\": \"Колекція\",\n  \"Displays a collection of entries.\": \"Відображає колекцію записів.\",\n  \"Global\": \"Глобальний\",\n  \"Makes globals available to the page.\": \"Робить глобальні дані доступними для сторінки.\",\n  \"Section\": \"Розділ\",\n  \"Defines a website section with a supporting entry.\": \"Визначає розділ сайту з допоміжним записом.\",\n  \"URL code (slug) used to find the primary record.\": \"Укажіть посилання, яке використовується для пошуку основного запису.\",\n  \"Default View\": \"Перегляд за умовчанням\",\n  \"Used as default entry point when previewing the record.\": \"Використовується як точка входу за умовчанням під час попереднього перегляду запису.\",\n  \"Full Slug\": \"Повне посиланням\",\n  \"Use the full slug when looking up the record.\": \"Використовуйте повне посилання під час пошуку запису.\",\n  \"Are you sure?\": \"Ви впевнені?\",\n  \"Delete Forever\": \"Видалити назавжди\",\n  \"This record is not visible because it has been deleted.\": \"Цей запис не видно, тому що він був видалений.\",\n  \"Restore this Record\": \"Відновити цей запис\",\n  \"Do you really want to delete this permanently?\": \"Ви дійсно бажаєте остаточно видалити?\",\n  \"ID (Primary Key)\": \"ID (Основний ключ)\",\n  \"Column name (index) to match with the primary record.\": \"Ім'я стовпця (індекс) для відповідності з основним записом.\",\n  \"Records Per Page\": \"Записів на сторінці\",\n  \"Number of records to display on a single page. Leave empty to disable pagination.\": \"Кількість записів для показу на одній сторінці. Залиште порожнім для вимкнення пагінації.\",\n  \"Invalid format of the records per page value. The value should be a number.\": \"Невірний формат кількості записів на сторінку. Значення має бути числом.\",\n  \"Pagination\": \"Пагінація\",\n  \"Page Number\": \"Номер сторінки\",\n  \"This value is used to determine what page the user is on.\": \"Це значення використовується для визначення сторінки, яку використовує користувач.\",\n  \"Sorting\": \"Сортування\",\n  \"Sort by Column\": \"Сортувати за стовпцем\",\n  \"Model column the records should be ordered by\": \"Стовпчик моделі, який потрібно упорядкувати\",\n  \"Direction\": \"Напрямок\",\n  \"Update :name Entries\": \"Оновити :name записи\",\n  \"Update :name\": \"Оновити :name\",\n  \":name Entry\": \":name запис\",\n  \"All :name Items\": \"Всі :name записи\",\n  \"Update Existing Records\": \"Оновити існуючі записи\",\n  \"Check this box to update records that match the same ID, title or slug.\": \"Позначте цей прапорець для оновлення записів з однаковим ID, заголовком або посиланням.\",\n  \"Copy\": \"Копіювати\",\n  \"Unnamed draft\": \"Чернетка без назви\",\n  \"Top level\": \"Вищий рівень\"\n}"
  },
  {
    "path": "modules/tailor/lang/vn.json",
    "content": "{\n}"
  },
  {
    "path": "modules/tailor/lang/zh-cn/lang.php",
    "content": "<?php return [\n  'blueprint' => [\n    'saved' => \"保存蓝图\",\n    'reloaded' => \"重新载入蓝图\",\n    'deleted' => \"蓝图已删除\",\n    'delete' => '删除',\n    'new' => \"新蓝图\",\n    'editor_node_name' => \"蓝图\",\n    'upload_files' => \"上传档案\",\n    'rename' => '重命名',\n    'create_directory' => \"新目录\",\n    'editor_yaml' => 'YAML',\n    'error_loading' => '加载蓝图错误',\n    'not_found' => \"未找到蓝图\",\n    'apply' => \"保存 & 迁移\",\n    'invalid_file' => '无效的文件名: :name 。 文件名只能包含字母数字、下划线、破折号和点。 正确文件名的一些示例：blueprint.yaml, subdirectory/blueprint.yaml',\n    'migrating' => \"迁移蓝图\",\n    'migrated' => \"蓝图已成功迁移\",\n    'mixin' => 'Mixin',\n    'entry' => 'Entry',\n    'stream' => 'Stream',\n    'structure' => 'Structure',\n    'single' => 'Single',\n    'global' => 'Global / Configuration',\n  ],\n  'editor' => [\n    'create' => \"创建\",\n    'refresh' => \"刷新\",\n    'blueprint' => \"蓝图\",\n    'invalid_type' => '未知模板类型。',\n    'error_no_doctype_permissions' => '您没有权限管理文档类型: :doctype',\n  ],\n];\n"
  },
  {
    "path": "modules/tailor/lang/zh-cn.json",
    "content": "{\n    \"Manage Entries\": \"管理条目\",\n    \"Create :name Entry\": \"创建 :name 条目\",\n    \"New :name\": \"新 :name\",\n    \"Import Entries\": \"导入条目\",\n    \"Export Entries\": \"导出条目\",\n    \"First Draft\": \"第一稿\",\n    \"Draft Saved\": \"已保存草稿\",\n    \"Draft Applied\": \"已申请草稿\",\n    \"Draft Created\": \"已创建草稿\",\n    \"Draft Discarded\": \"丢弃草稿\",\n    \"Create Entry\": \"创建条目\",\n    \"Publish Entry\": \"发布条目\",\n    \"Delete Entry\": \"删除条目\",\n    \"Entries have been disabled\": \"条目已被禁用\",\n    \"Entries have been enabled\": \"条目已启用\",\n    \"Entries have been deleted\": \"条目已被删除\",\n    \"Entries have been restored\": \"条目已恢复\",\n    \"Entries have been duplicated\": \"条目已复制\",\n    \"Manage Blueprints\": \"管理蓝图\",\n    \"All Entries\": \"所有项\",\n    \"Published Date\": \"发布日期\",\n    \"Published\": \"已发布\",\n    \"Expired\": \"已到期\",\n    \"Scheduled\": \"预发布\",\n    \"Hidden\": \"隐藏\",\n    \"Draft\": \"草稿\",\n    \"Deleted\": \"已删除\",\n    \"Slug\": \"Slug\",\n    \"Enabled\": \"启用\",\n    \"Schedule publish date\": \"设置发布日期\",\n    \"Set expiry date\": \"设置到期日期\",\n    \"View full slug\": \"查看完整的别名\",\n    \"Apply this Draft\": \"应用此草稿\",\n    \"Remove\": \"移除\",\n    \"Drafts are not visible on the website until they are applied.\": \"在应用之前，草稿在网站上是不可见的。\",\n    \"Save Draft\": \"保存草稿\",\n    \"Do you really want to discard the draft?\": \"你真的要丢弃草稿吗？\",\n    \"Discard Draft\": \"丢弃草稿\",\n    \"Save & Apply Draft\": \"保存并应用草稿\",\n    \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"是否确实要删除记录？它还将删除所有草稿(如果有的话)\",\n    \"Create New Draft\": \"创建新草稿\",\n    \"Select Draft to Edit\": \"选择要编辑的草稿\",\n    \"Edit the Primary Record\": \"编辑主记录\",\n    \"Unnamed Draft\": \"未命名草稿\",\n    \"Notes\": \"注释\",\n    \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"文档有未保存的更改。是否要丢弃它们并继续创建新草稿？\",\n    \"Preview\": \"预览\",\n    \"Unsaved\": \"未保存\",\n    \"put the draft notes here\": \"把草稿注释放在这里\",\n    \"Top Level\": \"顶层\",\n    \"Draft name: draft notes\": \"草稿名称：草稿说明\",\n    \"Title\": \"标题\",\n    \"Publish Date\": \"发布日期\",\n    \"Expiry Date\": \"到期日期\",\n    \"Entry Type\": \"条目类型\",\n    \"Handle\": \"句柄\",\n    \"Collection\": \"条目集合\",\n    \"Displays a collection of entries.\": \"显示条目的集合。\",\n    \"Global\": \"全局变量\",\n    \"Makes globals available to the page.\": \"使全局变量可用于页面。\",\n    \"Section\": \"条目详情\",\n    \"Defines a website section with a supporting entry.\": \"显示条目的详情。\",\n    \"URL code (slug) used to find the primary record.\": \"指定用于查找主记录的URL代码(slug)\",\n    \"Default View\": \"默认视图\",\n    \"Used as default entry point when previewing the record.\": \"预览记录时用作默认入口点。\",\n    \"Full Slug\": \"完整别名\",\n    \"Use the full slug when looking up the record.\": \"查找记录时使用完整的别名。\",\n    \"Are you sure?\": \"你确定吗？\",\n    \"Delete Forever\": \"永远删除\",\n    \"This record is not visible because it has been deleted.\": \"此记录不可见，因为它已被删除。\",\n    \"Restore this Record\": \"恢复此记录\",\n    \"Do you really want to delete this permanently?\": \"真的要永久删除这个吗？\",\n    \"ID (Primary Key)\": \"ID(主键)\",\n    \"Column name (index) to match with the primary record.\": \"与主记录匹配的列名(索引)。\",\n    \"Records Per Page\": \"每页记录数\",\n    \"Number of records to display on a single page. Leave empty to disable pagination.\": \"要在单个页面上显示的记录数。保留为空以禁用分页。\",\n    \"Invalid format of the records per page value. The value should be a number.\": \"每页记录值的格式无效。该值应为数字。\",\n    \"Pagination\": \"分页\",\n    \"Page Number\": \"页码\",\n    \"This value is used to determine what page the user is on.\": \"此值用于确定用户所在的页面。\",\n    \"Sorting\": \"排序\",\n    \"Sort by Column\": \"按列排序\",\n    \"Model column the records should be ordered by\": \"记录应按\",\n    \"Direction\": \"方向\",\n    \"Update :name Entries\": \"更新 :name 条目\",\n    \"Update :name\": \"更新 :name\",\n    \":name Entry\": \":name 条目\",\n    \"All :name Items\": \"所有 :name 条目\",\n    \"Update Existing Records\": \"更新现有记录\",\n    \"Check this box to update records that match the same ID, title or slug.\": \"选中此项以更新匹配相同ID、标题或slug的记录。\",\n    \"Copy\": \"复制\"\n}\n"
  },
  {
    "path": "modules/tailor/lang/zh-tw.json",
    "content": "{\n  \"Manage Entries\": \"管理條目\",\n  \"Create :name Entry\": \"創建 :name 條目\",\n  \"New :name\": \"新 :name 條目\",\n  \"Import Entries\": \"導入條目\",\n  \"Export Entries\": \"導出條目\",\n  \"First Draft\": \"第一稿\",\n  \"Draft Saved\": \"已保存草稿\",\n  \"Draft Applied\": \"已申請草稿\",\n  \"Draft Created\": \"已創建草稿\",\n  \"Draft Discarded\": \"丟棄草稿\",\n  \"Create Entry\": \"創建條目\",\n  \"Publish Entry\": \"發布條目\",\n  \"Delete Entry\": \"刪除條目\",\n  \"Entries have been disabled\": \"條目已被禁用\",\n  \"Entries have been enabled\": \"條目已啟用\",\n  \"Entries have been deleted\": \"條目已被刪除\",\n  \"Manage Blueprints\": \"管理藍圖\",\n  \"All Entries\": \"所有參賽作品\",\n  \"Published Date\": \"發布日期\",\n  \"Published\": \"發表\",\n  \"Expired\": \"已到期\",\n  \"Scheduled\": \"預定的\",\n  \"Hidden\": \"隱\",\n  \"Draft\": \"草稿\",\n  \"Deleted\": \"已刪除\",\n  \"Slug\": \"Slug\",\n  \"Enabled\": \"啟用\",\n  \"Schedule publish date\": \"安排發布日期\",\n  \"Set expiry date\": \"設置到期日\",\n  \"View full slug\": \"查看完整的蛞蝓\",\n  \"Apply this Draft\": \"應用此草稿\",\n  \"Remove\": \"消除\",\n  \"Drafts are not visible on the website until they are applied.\": \"在應用之前，草稿在網站上是不可見的。\",\n  \"Save Draft\": \"保存草稿\",\n  \"Do you really want to discard the draft?\": \"你真的要放棄草稿嗎？\",\n  \"Discard Draft\": \"放棄草稿\",\n  \"Save & Apply Draft\": \"保存並應用草稿\",\n  \"Do you really want to delete the record? It will also delete all drafts if any exist.\": \"真的要刪除記錄嗎？如果存在任何草稿，它還將刪除所有草稿。\",\n  \"Create New Draft\": \"創建新草稿\",\n  \"Select Draft to Edit\": \"選擇要編輯的草稿\",\n  \"Edit the Primary Record\": \"編輯主記錄\",\n  \"Unnamed Draft\": \"未命名草稿\",\n  \"Notes\": \"筆記\",\n  \"The document has unsaved changes. Do you want to discard them and proceed with creating a new draft?\": \"文檔有未保存的更改。是否要丟棄它們並繼續創建新草稿？\",\n  \"Preview\": \"預習\",\n  \"Unsaved\": \"未保存\",\n  \"put the draft notes here\": \"把草稿註釋放在這裡\",\n  \"Top Level\": \"頂層\",\n  \"Draft name: draft notes\": \"草稿名稱：草稿說明\",\n  \"Title\": \"標題\",\n  \"Publish Date\": \"發布日期\",\n  \"Expiry Date\": \"到期日\",\n  \"Entry Type\": \"條目類型\",\n  \"Handle\": \"處理\",\n  \"Collection\": \"收藏\",\n  \"Displays a collection of entries.\": \"顯示條目的集合。\",\n  \"Global_\": \"全球的\",\n  \"Makes globals available to the page.\": \"使全局變量可用於頁面。\",\n  \"Section\": \"部分\",\n  \"Defines a website section with a supporting entry.\": \"使用支持條目定義網站部分。\",\n  \"URL code (slug) used to find the primary record.\": \"指定用於查找主記錄的 slug。\",\n  \"Default View\": \"默認視圖\",\n  \"Use this page as a default entry point when previewing the record.\": \"預覽記錄時用作默認入口點。\",\n  \"Full Slug\": \"全蛞蝓\",\n  \"Use the full slug when looking up the record.\": \"查找記錄時使用完整的 slug。\"\n}"
  },
  {
    "path": "modules/tailor/models/ContentSchema.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse Model;\nuse October\\Rain\\Database\\Schema\\Blueprint as DbBlueprint;\n\n/**\n * ContentSchema record\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass ContentSchema extends Model\n{\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'tailor_content_schema';\n\n    /**\n     * @var array jsonable attribute names that are json encoded and decoded from the database\n     */\n    protected $jsonable = ['meta', 'fields'];\n\n    /**\n     * @var array latestMeta data\n     */\n    protected $latestMeta = [];\n\n    /**\n     * @var array proposedFields\n     */\n    protected $proposedFields = [];\n\n    /**\n     * @var array droppedFields\n     */\n    protected $droppedFields = [];\n\n    /**\n     * @var array existingColumns\n     */\n    protected $existingColumns = [];\n\n    /**\n     * @var array toCreate\n     */\n    protected $toCreate = [];\n\n    /**\n     * @var array droppedFields\n     */\n    protected $toDrop = [];\n\n    /**\n     * @var array changedFields\n     */\n    protected $toChange = [];\n\n    /**\n     * findRecord\n     */\n    public static function findRecord(string $tableName): ContentSchema\n    {\n        $record = self::where('table_name', $tableName)->first();\n\n        if (!$record) {\n            $record = new self;\n            $record->table_name = $tableName;\n            $record->save();\n        }\n\n        return $record;\n    }\n\n    /**\n     * afterFetch\n     */\n    public function afterFetch()\n    {\n        $this->latestMeta = $this->meta ?? [];\n        $this->proposedFields = $this->fields['active'] ?? [];\n        $this->droppedFields = $this->fields['dropped'] ?? [];\n    }\n\n    /**\n     * setExistingColumns\n     */\n    public function setExistingColumns(array $columns)\n    {\n        $this->existingColumns = $columns;\n    }\n\n    /**\n     * setDroppedColumn\n     */\n    public function setDroppedColumn($fieldName, $droppedName, $isRename = false)\n    {\n        if ($isRename) {\n            $this->droppedFields[$droppedName] = [\n                'original' => $fieldName,\n                'renamed' => true,\n                'details' => $this->proposedFields[$fieldName] ?? null\n            ];\n        }\n        else {\n            $this->droppedFields[$droppedName] = [\n                'original' => $fieldName,\n                'details' => $this->proposedFields[$fieldName] ?? null\n            ];\n\n            unset($this->proposedFields[$fieldName]);\n        }\n    }\n\n    /**\n     * proposeChanges returns true if changes are needed\n     */\n    public function proposeChanges(DbBlueprint $table): bool\n    {\n        // Extract fields from blueprint\n        $fields = [];\n        foreach ($table->getColumns() as $column) {\n            if (isset($column['name'])) {\n                $fields[$column['name']] = $column->toArray();\n            }\n        }\n\n        // Compare for existing schema\n        foreach ($this->proposedFields as $fieldName => $details) {\n            if (isset($fields[$fieldName])) {\n                continue;\n            }\n\n            $this->toDrop[$fieldName] = $details;\n        }\n\n        // Propose for new schema\n        foreach ($fields as $fieldName => $details) {\n            if (!in_array($fieldName, $this->existingColumns)) {\n                $this->toCreate[$fieldName] = $this->proposedFields[$fieldName] = $details;\n                continue;\n            }\n\n            $wantType = $details['type'] ?? null;\n            if (!$wantType) {\n                $this->toDrop[$fieldName] = $details;\n                continue;\n            }\n\n            $hasType = $this->proposedFields[$fieldName]['type'] ?? null;\n            if (!$hasType || $wantType !== $hasType) {\n                $this->toChange[$fieldName] = $this->proposedFields[$fieldName] = $details;\n                continue;\n            }\n        }\n\n        return $this->toCreate || $this->toDrop || $this->toChange;\n    }\n\n    /**\n     * commitChanges\n     */\n    public function commitChanges()\n    {\n        $this->fields = [\n            'active' => $this->proposedFields,\n            'dropped' => $this->droppedFields\n        ];\n\n        $this->meta = $this->latestMeta;\n\n        $this->save();\n    }\n\n    /**\n     * getMissingFields returns missing fields as an array\n     * eg: [fieldName => fieldDetails]\n     */\n    public function getMissingFields(): array\n    {\n        return $this->toCreate;\n    }\n\n    /**\n     * getDroppedFields returns fields that should be dropped\n     * eg: [fieldName => fieldDetails]\n     */\n    public function getDroppedFields(): array\n    {\n        return $this->toDrop;\n    }\n\n    /**\n     * getChangedFields returns fields that have a new type\n     */\n    public function getChangedFields(): array\n    {\n        return $this->toChange;\n    }\n\n    /**\n     * setLatestMeta will set the data upon commit\n     */\n    public function setLatestMeta(array $meta)\n    {\n        $this->latestMeta = $meta;\n    }\n\n    /**\n     * getPruneFields returns fields that should be pruned after migration\n     */\n    public function getPruneFields(): array\n    {\n        return $this->droppedFields;\n    }\n\n    /**\n     * setPrunedColumn removes a column after pruning it\n     */\n    public function setPrunedColumn(string $fieldName)\n    {\n        unset($this->droppedFields[$fieldName]);\n    }\n\n    /**\n     * isMetaDirty returns true if there are proposed meta changes\n     */\n    public function isMetaDirty($value = null)\n    {\n        if ($value === null) {\n            return $this->latestMeta !== $this->meta;\n        }\n\n        $newMeta = array_get($this->latestMeta, $value);\n        $oldMeta = array_get($this->meta, $value);\n        return $newMeta !== $oldMeta;\n    }\n\n    /**\n     * getMetaData returns the original meta data value\n     */\n    public function getMetaData($value = null)\n    {\n        if ($value === null) {\n            return $this->meta;\n        }\n\n        return array_get($this->meta, $value);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/EntryRecord.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse App;\nuse Str;\nuse Site;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\FilterElement;\nuse Tailor\\Classes\\BlueprintModel;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Tailor\\Classes\\Scopes\\EntryRecordScope;\nuse SystemException;\n\n/**\n * EntryRecord model for content\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass EntryRecord extends BlueprintModel\n{\n    use \\Tailor\\Traits\\DraftableModel;\n    use \\Tailor\\Traits\\VersionableModel;\n    use \\Tailor\\Traits\\DeferredContentModel;\n    use \\Tailor\\Models\\EntryRecord\\HasDuplication;\n    use \\Tailor\\Models\\EntryRecord\\HasStatusScopes;\n    use \\Tailor\\Models\\EntryRecord\\HasCoreModifiers;\n    use \\Tailor\\Models\\EntryRecord\\HasEntryBlueprint;\n    use \\October\\Rain\\Database\\Traits\\Multisite;\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n    use \\October\\Rain\\Database\\Traits\\Validation;\n    use \\October\\Rain\\Database\\Traits\\UserFootprints;\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [\n        'title' => 'required',\n        'slug' => 'required|unique_site'\n    ];\n\n    /**\n     * @var array fillable fields, in addition to those dynamically added by content fields\n     */\n    protected $fillable = [\n        'title'\n    ];\n\n    /**\n     * @var array attributeNames of custom attributes\n     */\n    public $attributeNames = [];\n\n    /**\n     * @var array customMessages of custom error messages\n     */\n    public $customMessages = [];\n\n    /**\n     * @var string contentGroupFrom attribute\n     */\n    public $contentGroupFrom = 'content_group';\n\n    /**\n     * @var array dates attributes that should be mutated to dates\n     */\n    protected $dates = ['published_at', 'published_at_date', 'expired_at'];\n\n    /**\n     * @var array propagatable list of attributes to propagate to other sites.\n     */\n    protected $propagatable = [];\n\n    /**\n     * @var array fieldModifiers are attributes that are hard coded by the model\n     * but can still extend the model using their content fields.\n     */\n    public $fieldModifiers = [\n        'id',\n        'title',\n        'slug',\n        'fullslug',\n        'entry_type_name',\n        'published_at_date',\n        'status_code',\n        'is_enabled',\n        'published_at',\n        'expired_at',\n        'parent_id',\n        'draft_mode'\n    ];\n\n    /**\n     * defineListColumns\n     */\n    public function defineListColumns(ListElement $host)\n    {\n        $host->defineColumn('id', 'ID')->invisible();\n        $host->defineColumn('title', 'Title')->searchable();\n        $host->defineColumn('slug', 'Slug')->searchable()->invisible();\n        $host->defineColumn('entry_type_name', 'Entry Type')->shortLabel('Type')->invisible()->sortable(false);\n\n        $this->getContentFieldsetDefinition()->defineAllListColumns($host, ['except' => $this->fieldModifiers]);\n\n        $host->defineColumn('published_at_date', 'Published Date')->shortLabel('Published')->displayAs('date')->invisible(true)->sortableDefault(false);\n        $host->defineColumn('status_code', 'Status')->shortLabel('')->displayAs('selectable')->sortable(false)->align('right');\n        $host->defineColumn('created_at', 'Created At')->displayAs('datetime')->invisible();\n        $host->defineColumn('updated_at', 'Updated At')->displayAs('datetime')->invisible();\n        $host->defineColumn('created_user', 'Created By')->relation('created_user')->valueFrom('full_name')->invisible();\n        $host->defineColumn('updated_user', 'Updated By')->relation('updated_user')->valueFrom('full_name')->invisible();\n\n        $this->applyCoreColumnModifiers($host);\n    }\n\n    /**\n     * defineFilterScopes\n     */\n    public function defineFilterScopes(FilterElement $host)\n    {\n        $host->defineScope('status_code', 'Status')->displayAs('dropdown')->options('getStatusCodeOptions')->emptyOption('All Entries')->modelScope('applyStatusFromFilter');\n\n        $this->getContentFieldsetDefinition()->defineAllFilterScopes($host, ['except' => $this->fieldModifiers]);\n\n        $host->defineScope('published_at_date', 'Published Date')->displayAs('date');\n\n        $this->applyCoreScopeModifiers($host);\n    }\n\n    /**\n     * defineFormFields\n     */\n    public function defineFormFields(FormElement $host)\n    {\n        $entryName = $this->getContentFieldsetDefinition()->name ?? '';\n\n        $host->addFormField('title', 'Title')->autoFocus()->cssClass('primary-title-field')->placeholder(__(\"Create :name Entry\", ['name' => __($entryName)]));\n        $this->applyCoreFieldModifiers($host);\n    }\n\n    /**\n     * definePrimaryFormFields\n     */\n    public function definePrimaryFormFields(FormElement $host)\n    {\n        $this->getFieldsetDefinition()->defineAllFormFields($host, [\n            'except' => $this->fieldModifiers,\n            'context' => $host->getFormContext()\n        ]);\n    }\n\n    /**\n     * defineSecondaryFormFields\n     */\n    public function defineSecondaryFormFields(FormElement $host)\n    {\n        $host->addFormField('slug', 'Slug')->preset(['field' => 'title', 'type' => 'slug']);\n        $host->addFormField('is_enabled', 'Enabled')->displayAs('switch')->defaults(true);\n        $host->addFormField('published_at', 'Publish Date')->displayAs('datepicker')->defaultTimeMidnight();\n        $host->addFormField('expired_at', 'Expiry Date')->displayAs('datepicker')->defaultTimeMidnight();\n        $this->applyCoreFieldModifiers($host);\n    }\n\n    /**\n     * afterBoot\n     */\n    public function afterBoot()\n    {\n        static::addGlobalScope(new EntryRecordScope);\n    }\n\n    /**\n     * beforeValidate\n     */\n    public function beforeValidate()\n    {\n        if (!$this->slug) {\n            $this->slug = 'slug-' . Str::random(32);\n        }\n    }\n\n    /**\n     * beforeUpdate\n     */\n    public function beforeUpdate()\n    {\n        $this->setPublishingDates($this->published_at ?: $this->created_at);\n    }\n\n    /**\n     * beforeCreate\n     */\n    public function beforeCreate()\n    {\n        $this->setPublishingDates($this->published_at ?: $this->freshTimestamp());\n    }\n\n    /**\n     * setPublishingDates\n     */\n    protected function setPublishingDates($useDate)\n    {\n        $this->published_at_date = $useDate;\n    }\n\n    /**\n     * inSection\n     */\n    public static function inSection($handle)\n    {\n        $blueprint = BlueprintIndexer::instance()->findSectionByHandle($handle);\n        if (!$blueprint) {\n            throw new SystemException(\"Section handle [{$handle}] not found\");\n        }\n\n        $model = $blueprint->newModelInstance();\n\n        return $model::inSectionUuid($blueprint->uuid);\n    }\n\n    /**\n     * inSectionUuid\n     */\n    public static function inSectionUuid($uuid)\n    {\n        $instance = new static;\n\n        $instance->extendWithBlueprint($uuid);\n\n        return $instance;\n    }\n\n    /**\n     * extendInSection\n     */\n    public static function extendInSection($handle, callable $callback)\n    {\n        $blueprint = BlueprintIndexer::instance()->findSectionByHandle($handle);\n        if (!$blueprint) {\n            throw new SystemException(\"Section handle [{$handle}] not found\");\n        }\n\n        $model = $blueprint->newModelInstance();\n\n        $model::extendInSectionUuid($blueprint->uuid, $callback);\n    }\n\n    /**\n     * extendInSectionUuid\n     */\n    public static function extendInSectionUuid($uuid, callable $callback)\n    {\n        static::extend(function($model) use ($uuid, $callback) {\n            $model->bindEvent('model.extendBlueprint', function($foundUuid) use ($uuid, $callback, $model) {\n                if ($uuid === $foundUuid) {\n                    $callback($model);\n                }\n            });\n        });\n    }\n\n    /**\n     * scopeApplyVisibleFrontend adds visibility to the front end with support\n     * for preview tokens\n     */\n    public function scopeApplyVisibleFrontend($query)\n    {\n        if (PreviewToken::isTokenEnabled()) {\n            return $query;\n        }\n\n        return $query->applyPublishedStatus();\n    }\n\n    /**\n     * getEntryTypeNameAttribute\n     */\n    public function getEntryTypeNameAttribute()\n    {\n        return BlueprintIndexer::instance()\n            ->findFieldset($this->blueprint_uuid, $this->content_group)\n            ->name ?? '';\n        ;\n    }\n\n    /**\n     * getEntryTypeAttribute\n     */\n    public function getEntryTypeAttribute()\n    {\n        return BlueprintIndexer::instance()\n            ->findFieldset($this->blueprint_uuid, $this->content_group)\n            ->handle ?? '';\n        ;\n    }\n\n    /**\n     * setDefaultContentGroup populate the default content group for new records\n     */\n    public function setDefaultContentGroup($defaultGroup = null)\n    {\n        $groupOptions = $this->getContentGroupOptions();\n\n        if (!isset($groupOptions[$defaultGroup])) {\n            $defaultGroup = array_keys($groupOptions)[0] ?? null;\n        }\n\n        if ($defaultGroup) {\n            $this->setBlueprintGroup($defaultGroup);\n        }\n    }\n\n    /**\n     * getContentGroupOptions\n     */\n    public function getContentGroupOptions()\n    {\n        return $this->getBlueprintDefinition()->getEntryTypeOptions();\n    }\n\n    /**\n     * getParentIdOptions\n     */\n    public function getParentIdOptions()\n    {\n        return $this->getParentIdOptionsFromQuery($this->withSavedDrafts());\n    }\n\n    /**\n     * findSingleForSection\n     */\n    public static function findSingleForSection($handle): EntryRecord\n    {\n        $blueprint = BlueprintIndexer::instance()->findSectionByHandle($handle);\n        if (!$blueprint) {\n            throw new SystemException(\"Section handle [{$handle}] not found\");\n        }\n\n        return static::findSingleForSectionUuid($blueprint->uuid);\n    }\n\n    /**\n     * findSingleForSectionUuid\n     */\n    public static function findSingleForSectionUuid($uuid): EntryRecord\n    {\n        // Find existing record\n        $record = static::inSectionUuid($uuid)->first();\n        if ($record) {\n            return $record;\n        }\n\n        // Create new record\n        $entry = new static;\n        $entry->extendWithBlueprint($uuid);\n        $entry->is_enabled = true;\n        $entry->forceSave();\n\n        return $entry;\n    }\n\n    /**\n     * getVersionableTransferAttributes\n     */\n    protected function getVersionableTransferAttributes()\n    {\n        return $this->getFieldsetColumnNames();\n    }\n\n    /**\n     * getMorphClass adds dynamic table support\n     * @return string\n     */\n    public function getMorphClass()\n    {\n        return self::class . '@' . $this->getTable();\n    }\n\n    /**\n     * isSoftDeleteEnabled allows for programmatic toggling\n     * @return bool\n     */\n    public function isSoftDeleteEnabled()\n    {\n        return $this->getBlueprintDefinition()->useSoftDeletes();\n    }\n\n    /**\n     * isMultisiteEnabled allows for programmatic toggling\n     * @return bool\n     */\n    public function isMultisiteEnabled()\n    {\n        return $this->getBlueprintDefinition()->useMultisite();\n    }\n\n    /**\n     * isMultisiteSyncEnabled\n     * @return bool\n     */\n    public function isMultisiteSyncEnabled()\n    {\n        return $this->getBlueprintDefinition()->useMultisiteSync();\n    }\n\n    /**\n     * getMultisiteConfig returns an sync option configured for multisite\n     */\n    public function getMultisiteConfig($key, $default = null)\n    {\n        return $this->getBlueprintDefinition()->getMultisiteConfig($key, $default);\n    }\n\n    /**\n     * makePageUrlParams returns parameters used when linking to this record as a page\n     */\n    public function makePageUrlParams(): array\n    {\n        $replacements = parent::makePageUrlParams();\n\n        // Use context for correct relations\n        Site::withContext($this->site_id, function() use (&$replacements) {\n            $wantReplace = $this->getBlueprintDefinition()->getPageFinderReplacements();\n\n            foreach ($wantReplace as $key => $path) {\n                $replacements[$key] = array_get($this, $path);\n            }\n        });\n\n        return $replacements;\n    }\n\n    /**\n     * getValidationPresenceVerifier\n     * @see \\Tailor\\Classes\\PresenceVerifier\n     */\n    protected function getValidationPresenceVerifier()\n    {\n        $verifier = App::make('validation.presence.tailor');\n\n        $verifier->setConnection($this->getConnectionName());\n\n        $verifier->setDraftMode($this->getDraftModeColumnName());\n\n        $verifier->setIsVersion($this->getIsVersionColumn());\n\n        $verifier->setDeletedAt($this->getDeletedAtColumn());\n\n        return $verifier;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/GlobalRecord.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Rain\\Support\\Date;\nuse Tailor\\Classes\\Scopes\\GlobalRecordScope;\nuse Tailor\\Classes\\BlueprintModel;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse ApplicationException;\nuse Exception;\n\n/**\n * GlobalRecord model for content\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass GlobalRecord extends BlueprintModel\n{\n    use \\Tailor\\Traits\\DeferredContentModel;\n    use \\Tailor\\Models\\GlobalRecord\\HasGlobalBlueprint;\n    use \\October\\Rain\\Database\\Traits\\Multisite;\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'tailor_globals';\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [];\n\n    /**\n     * @var array fillable fields, in addition to those dynamically added by content fields\n     */\n    protected $fillable = [\n        'title'\n    ];\n\n    /**\n     * @var array attributeNames of custom attributes\n     */\n    public $attributeNames = [];\n\n    /**\n     * @var array customMessages of custom error messages\n     */\n    public $customMessages = [];\n\n    /**\n     * @var array jsonable attribute names that are json encoded and decoded from the database\n     */\n    protected $jsonable = ['content'];\n\n    /**\n     * @var array propagatable list of attributes to propagate to other sites.\n     */\n    protected $propagatable = [];\n\n    /**\n     * definePrimaryFormFields\n     */\n    public function definePrimaryFormFields(FormElement $host)\n    {\n        $this->getFieldsetDefinition()->defineAllFormFields($host);\n    }\n\n    /**\n     * afterBoot\n     */\n    public function afterBoot()\n    {\n        static::addGlobalScope(new GlobalRecordScope);\n    }\n\n    /**\n     * findForGlobal\n     */\n    public static function findForGlobal($handle): GlobalRecord\n    {\n        $blueprint = BlueprintIndexer::instance()->findGlobalByHandle($handle);\n        if (!$blueprint) {\n            throw new ApplicationException(\"Global handle [{$handle}] not found\");\n        }\n\n        return static::findForGlobalUuid($blueprint->uuid);\n    }\n\n    /**\n     * findForGlobalUuid\n     */\n    public static function findForGlobalUuid($uuid): GlobalRecord\n    {\n        // Find existing record\n        $record = static::inGlobalUuid($uuid)->first();\n        if ($record) {\n            return $record;\n        }\n\n        // Create new record\n        $global = new static;\n        $global->extendWithBlueprint($uuid);\n        $global->forceSave();\n\n        return $global;\n    }\n\n    /**\n     * inGlobal\n     */\n    public static function inGlobal($handle)\n    {\n        $blueprint = BlueprintIndexer::instance()->findGlobalByHandle($handle);\n        if (!$blueprint) {\n            throw new ApplicationException(\"Global handle [{$handle}] not found\");\n        }\n\n        return static::inGlobalUuid($blueprint->uuid);\n    }\n\n    /**\n     * scopeInGlobalUuid\n     */\n    public static function inGlobalUuid($uuid)\n    {\n        $instance = new static;\n\n        $instance->extendWithBlueprint($uuid);\n\n        return $instance;\n    }\n\n    /**\n     * extendInGlobal\n     */\n    public static function extendInGlobal($handle, callable $callback)\n    {\n        $blueprint = BlueprintIndexer::instance()->findGlobalByHandle($handle);\n        if (!$blueprint) {\n            throw new ApplicationException(\"Global handle [{$handle}] not found\");\n        }\n\n        self::extendInGlobalUuid($blueprint->uuid, $callback);\n    }\n\n    /**\n     * extendInGlobalUuid\n     */\n    public static function extendInGlobalUuid($uuid, callable $callback)\n    {\n        static::extend(function($model) use ($uuid, $callback) {\n            $model->bindEvent('model.extendBlueprint', function($foundUuid) use ($uuid, $callback, $model) {\n                if ($uuid === $foundUuid) {\n                    $callback($model);\n                }\n            });\n        });\n    }\n\n    /**\n     * isMultisiteEnabled allows for programmatic toggling\n     * @return bool\n     */\n    public function isMultisiteEnabled()\n    {\n        return $this->getBlueprintDefinition()->useMultisite();\n    }\n\n    /**\n     * isMultisiteSyncEnabled\n     * @return bool\n     */\n    public function isMultisiteSyncEnabled()\n    {\n        return $this->getBlueprintDefinition()->useMultisiteSync();\n    }\n\n    /**\n     * fromDateTime handles an extra saved datetime type in the db\n     */\n    public function fromDateTime($value)\n    {\n        // @deprecated this method should be removed once the correct\n        // datetime value is stored in the jsonable attribute\n        try {\n            return parent::fromDateTime($value);\n        }\n        catch (Exception $ex) {\n            return Date::parse($value);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/NestedFormItem.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse Tailor\\Classes\\Fieldset;\nuse Tailor\\Classes\\FieldManager;\nuse October\\Contracts\\Element\\FormElement;\n\n/**\n * NestedFormItem stores generic content serialized as JSON\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass NestedFormItem extends RepeaterItem\n{\n    use \\October\\Rain\\Database\\Traits\\SimpleTree;\n\n    /**\n     * defineFormFields\n     */\n    public function defineFormFields(FormElement $host)\n    {\n        $this->getTabbedFieldsetDefinition()->defineAllFormFields($host);\n    }\n\n    /**\n     * definePrimaryFormFields\n     */\n    public function definePrimaryFormFields(FormElement $host)\n    {\n        $this->getTabbedFieldsetDefinition('tabs')->defineAllFormFields($host);\n    }\n\n    /**\n     * defineSecondaryFormFields\n     */\n    public function defineSecondaryFormFields(FormElement $host)\n    {\n        $this->getTabbedFieldsetDefinition('secondaryTabs')->defineAllFormFields($host);\n    }\n\n    /**\n     * getFieldsetDefinition returns a fieldset for the selected content group.\n     */\n    protected function getTabbedFieldsetDefinition($section = null): Fieldset\n    {\n        $config = $section ? ($this->fieldsetConfig[$section] ?? []) : $this->fieldsetConfig;\n\n        $fieldset = FieldManager::instance()->makeFieldset($config);\n\n        $fieldset->validate();\n\n        return $fieldset;\n    }\n\n    /**\n     * getFieldsetDefinition returns a fieldset for the selected content group.\n     */\n    protected function getFieldsetDefinition(): Fieldset\n    {\n        return $this->getContentFieldsetDefinition();\n    }\n\n    /**\n     * getContentFieldsetDefinition returns a merged fieldset for tab sections\n     */\n    protected function getContentFieldsetDefinition(): Fieldset\n    {\n        $config = ['fields'=>[]];\n\n        if (isset($this->fieldsetConfig['fields'])) {\n            $config['fields'] += $this->fieldsetConfig['fields'];\n        }\n\n        if (isset($this->fieldsetConfig['tabs']['fields'])) {\n            $config['fields'] += $this->fieldsetConfig['tabs']['fields'];\n        }\n\n        if (isset($this->fieldsetConfig['secondaryTabs']['fields'])) {\n            $config['fields'] += $this->fieldsetConfig['secondaryTabs']['fields'];\n        }\n\n        return FieldManager::instance()->makeFieldset((array) $config);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/PreviewToken.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse Str;\nuse Url;\nuse Date;\nuse Model;\nuse BackendAuth;\n\n/**\n * PreviewToken is used to provide temporary access to a page\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PreviewToken extends Model\n{\n    use \\October\\Rain\\Database\\Traits\\SoftDelete;\n\n    /**\n     * @var string table associated with the model\n     */\n    protected $table = 'tailor_preview_tokens';\n\n    /**\n     * @var array jsonable fields\n     */\n    protected $jsonable = ['route'];\n\n    /**\n     * @var array dates of datetime attributes to convert to an instance of Carbon/DateTime objects.\n     */\n    protected $dates = ['expired_at'];\n\n    /**\n     * @var PreviewToken enabledToken\n     */\n    protected static $enabledToken;\n\n    /**\n     * createToken for a route, limited by a number of uses and expiry date\n     * as a datetime object.\n     */\n    public static function createToken($route, $limit = null, $expiry = null)\n    {\n        $token = new static;\n        $token->route = $route;\n        $token->token = Str::random(32);\n        $token->expired_at = $expiry ?: Date::now()->addHours(48);\n\n        if ($user = BackendAuth::getUser()) {\n            $token->created_user_id = $user->id;\n        }\n\n        if ($limit) {\n            $token->count_use = 0;\n            $token->count_limit = $limit;\n        }\n\n        $token->save();\n\n        return $token;\n    }\n\n    /**\n     * createTokenForUrl\n     */\n    public static function createTokenForUrl($url, $params = [])\n    {\n        return static::createToken([\n            'uri' => Url::makeRelative($url)\n        ] + $params);\n    }\n\n    /**\n     * getRouteParam\n     */\n    public function getRouteParam($key, $default = null)\n    {\n        return array_get($this->route, $key, $default);\n    }\n\n    /**\n     * checkTokenForUrl\n     */\n    public static function checkTokenForCurrentUrl($token)\n    {\n        $token = static::checkToken($token);\n        if (!$token) {\n            return;\n        }\n\n        $route = $token->route;\n        $expectedUri = $route['uri'] ?? '';\n\n        $uri = Url::makeRelative(Url::current());\n        if ($uri !== $expectedUri) {\n            return;\n        }\n\n        static::$enabledToken = $token;\n    }\n\n    /**\n     * findToken\n     */\n    public static function checkToken($token): ?PreviewToken\n    {\n        static::cleanUpExpired();\n\n        $token = static::where('token', $token)->first();\n\n        if (!$token) {\n            return null;\n        }\n\n        if (!$token->isValid()) {\n            $token->delete();\n            return null;\n        }\n\n        $token->increment('count_use');\n\n        return $token;\n    }\n\n    /**\n     * getEnabledToken\n     */\n    public static function getEnabledToken(): ?PreviewToken\n    {\n        return static::$enabledToken;\n    }\n\n    /**\n     * isTokenEnabled\n     */\n    public static function isTokenEnabled()\n    {\n        return static::$enabledToken !== null;\n    }\n\n    /**\n     * isValid\n     */\n    protected function isValid(): bool\n    {\n        if ($this->count_limit && $this->count_use > $this->count_limit) {\n            return true;\n        }\n\n        if ($this->expired_at->isFuture()) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * cleanUpExpired expired tokens bindings\n     */\n    protected static function cleanUpExpired()\n    {\n        $timestamp = Date::now()->toDateTimeString();\n\n        $tokens = self::where('expired_at', '<', $timestamp)->get();\n\n        foreach ($tokens as $token) {\n            $token->delete();\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/RecordExport.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse Backend\\Models\\ExportModel;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FormElement;\n\n/**\n * RecordExport for exporting records (entries or globals)\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RecordExport extends ExportModel\n{\n    use \\Tailor\\Traits\\BlueprintModel;\n\n    /**\n     * defineListColumns\n     */\n    public function defineListColumns(ListElement $host)\n    {\n        $host->defineColumn('id', 'ID');\n        $host->defineColumn('title', 'Title');\n        $host->defineColumn('slug', 'Slug');\n        $host->defineColumn('is_enabled', 'Enabled');\n        $host->defineColumn('published_at', 'Publish Date');\n        $host->defineColumn('expired_at', 'Expiry Date');\n        $host->defineColumn('content_group', 'Entry Type');\n\n        if ($this->isEntryStructure()) {\n            $host->defineColumn('fullslug', 'Full Slug');\n            $host->defineColumn('parent_id', 'Parent');\n        }\n\n        $this->getContentFieldsetDefinition()->defineAllListColumns($host, ['context' => 'export']);\n    }\n\n    /**\n     * defineFormFields\n     */\n    public function defineFormFields(FormElement $host)\n    {\n    }\n\n    /**\n     * @todo consolidate with HasGeneralBlueprint (v4)\n     */\n    public function extendWithBlueprint()\n    {\n        $this->getContentFieldsetDefinition()->applyModelExtensions($this, 'export');\n    }\n\n    /**\n     * exportData\n     */\n    public function exportData($columns, $sessionKey = null)\n    {\n        $records = $this->resolveBlueprintModel()->get();\n        $result = [];\n\n        foreach ($records as $record) {\n            $item = [];\n            foreach ($columns as $column) {\n                $item[$column] = $this->encodeModelAttribute($record, $column);\n            }\n            $result[] = $item;\n        }\n\n        return $result;\n    }\n\n    /**\n     * encodeModelAttribute\n     */\n    protected function encodeModelAttribute($model, $attr)\n    {\n        if ($model->hasRelation($attr)) {\n            $relationModel = $model->makeRelation($attr);\n            if ($relationModel instanceof RepeaterItem) {\n                $value = $this->encodeRepeaterItems($model, $attr);\n            }\n            else {\n                $value = $model->getRelationSimpleValue($attr);\n            }\n        }\n        else {\n            $value = $model->{$attr};\n        }\n\n        /**\n         * @event model.beforeExportAttribute\n         * Called when the model is exporting an attribute\n         *\n         * Example usage:\n         *\n         *     $model->bindEvent('model.beforeExportAttribute', function (string $attr, mixed &$value) use (\\October\\Rain\\Database\\Model $model) {\n         *         // Apply data transformations\n         *         if ($attr === 'price') {\n         *             $value = number_format($value, 2);\n         *         }\n         *     });\n         *\n         */\n        $this->fireEvent('model.beforeExportAttribute', [$attr, &$value]);\n\n        // Apply native transformations\n        if (is_array($value)) {\n            $value = $this->encodeArrayValue($value);\n        }\n\n        if ($value instanceof \\DateTimeInterface) {\n            $value = $value->format($model->getDateFormat());\n        }\n\n        return $value;\n    }\n\n    /**\n     * encodeRepeaterItems\n     */\n    protected function encodeRepeaterItems($model, $attr)\n    {\n        if ($model->isRelationTypeSingular($attr)) {\n            return $this->encodeRepeaterItem($model->{$attr});\n        }\n\n        $result = [];\n\n        foreach ($model->{$attr} as $item) {\n            $result[] = $this->encodeRepeaterItem($item);\n        }\n\n        return $result;\n    }\n\n    /**\n     * encodeRepeaterItem\n     */\n    protected function encodeRepeaterItem($item)\n    {\n        // Locate attribute and relation names\n        $attrs = array_keys($item->attributes);\n        $definitions = $item->getRelationDefinitions();\n        $usesTree = $item->isClassInstanceOf(\\October\\Contracts\\Database\\TreeInterface::class);\n\n        foreach ($definitions as $type => $relations) {\n            if (in_array($type, ['morphTo'])) {\n                continue;\n            }\n\n            foreach ($relations as $name => $options) {\n                if ($usesTree && in_array($name, ['parent', 'children'])) {\n                    continue;\n                }\n\n                $attrs[] = $name;\n            }\n        }\n\n        // Excluded values\n        $exclude = [\n            'host_id',\n            'host_field',\n            'content_value',\n            'content_spawn_path'\n        ];\n\n        // Trees can be nested and need their identifiers\n        if (!$usesTree) {\n            $exclude = array_merge(['id'], $exclude);\n        }\n\n        // Encode values\n        $values = [];\n\n        foreach ($attrs as $attr) {\n            if (in_array($attr, $exclude)) {\n                continue;\n            }\n\n            $values[$attr] = $this->encodeModelAttribute($item, $attr);\n        }\n\n        return $values;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/RecordImport.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse Site;\nuse Backend\\Models\\ImportModel;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FormElement;\n\n/**\n * RecordImport for importing records (entries or globals)\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RecordImport extends ImportModel\n{\n    use \\Tailor\\Traits\\BlueprintModel;\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [];\n\n    /**\n     * defineListColumns\n     */\n    public function defineListColumns(ListElement $host)\n    {\n        $host->defineColumn('id', 'ID');\n        $host->defineColumn('title', 'Title');\n        $host->defineColumn('slug', 'Slug');\n        $host->defineColumn('is_enabled', 'Enabled');\n        $host->defineColumn('published_at', 'Publish Date');\n        $host->defineColumn('expired_at', 'Expiry Date');\n        $host->defineColumn('content_group', 'Entry Type');\n\n        if ($this->isEntryStructure()) {\n            $host->defineColumn('fullslug', 'Full Slug');\n            $host->defineColumn('parent_id', 'Parent');\n        }\n\n        $this->getContentFieldsetDefinition()->defineAllListColumns($host, ['context' => 'import']);\n    }\n\n    /**\n     * defineFormFields\n     */\n    public function defineFormFields(FormElement $host)\n    {\n        $host->addFormField('update_existing', \"Update Existing Records\")->displayAs('checkbox')->comment(\"Check this box to update records that match the same ID, title or slug.\");\n    }\n\n    /**\n     * @todo consolidate with HasGeneralBlueprint (v4)\n     */\n    public function extendWithBlueprint()\n    {\n        $this->getContentFieldsetDefinition()->applyModelExtensions($this, 'import');\n    }\n\n    /**\n     * importData\n     */\n    public function importData($results, $sessionKey = null)\n    {\n        foreach ($results as $row => $data) {\n            $id = array_get($data, 'id');\n            if (!$id) {\n                $this->logSkipped($row, \"Missing entry ID\");\n                continue;\n            }\n\n            // Find or create\n            $record = $this->findDuplicateRecord($data) ?: $this->resolveBlueprintModel();\n            $exists = $record->exists;\n\n            if ($exists) {\n                if (!$this->update_existing) {\n                    $this->logSkipped($row, \"Record ID already exists\");\n                    continue;\n                }\n\n                if ($record->site_id && $record->site_id !== Site::getSiteIdFromContext()) {\n                    $this->logSkipped($row, \"Record ID exists in another site\");\n                    continue;\n                }\n            }\n\n            // Update record\n            foreach ($data as $attr => $value) {\n                $this->decodeModelAttribute($record, $attr, $value, $sessionKey);\n            }\n            $record->forceSave(null, $sessionKey);\n\n            if ($exists) {\n                $this->logUpdated();\n            }\n            else {\n                $this->logCreated();\n            }\n        }\n    }\n\n    /**\n     * findDuplicateRecord\n     */\n    protected function findDuplicateRecord($data)\n    {\n        $query = $this->resolveBlueprintModel()->newQueryWithoutScopes();\n\n        if ($id = array_get($data, 'id')) {\n            return $query->find($id);\n        }\n\n        $record = $query->where('title', array_get($data, 'title'));\n        if ($slug = array_get($data, 'slug')) {\n            $record->orWhere('slug', $slug);\n        }\n\n        return $record->first();\n    }\n\n    /**\n     * decodeModelAttribute\n     */\n    public function decodeModelAttribute($model, $attr, $value, $sessionKey)\n    {\n        /**\n         * @event model.beforeImportAttribute\n         * Called when the model is importing an attribute\n         *\n         * Example usage:\n         *\n         *     $model->bindEvent('model.beforeImportAttribute', function (string $attr, mixed &$value) use (\\October\\Rain\\Database\\Model $model) {\n         *         // Apply data transformations\n         *         if ($attr === 'price') {\n         *             $value = (int) $value;\n         *         }\n         *     });\n         *\n         */\n        if ($this->fireEvent('model.beforeImportAttribute', [$attr, &$value], true) === false) {\n            return;\n        }\n\n        if ($model->hasRelation($attr)) {\n            $relationModel = $model->makeRelation($attr);\n            if ($relationModel instanceof RepeaterItem) {\n                $this->decodeRepeaterItems($model, $attr, $value, $sessionKey);\n            }\n            else {\n                $model->setRelationSimpleValue($attr, $value);\n            }\n        }\n        else {\n            $model->$attr = $value;\n        }\n    }\n\n    /**\n     * decodeRepeaterItems\n     */\n    protected function decodeRepeaterItems($model, $attr, $values, $sessionKey)\n    {\n        if ($model->isRelationTypeSingular($attr)) {\n            $values = [$values];\n        }\n\n        foreach ($values as $value) {\n            $item = $model->makeRelation($attr);\n            $item->content_group = $value['content_group'] ?? null;\n            $item->extendWithBlueprint();\n\n            $this->decodeRepeaterItem($item, $value, $sessionKey);\n\n            // Repeaters \"has many\" relations are without a session key\n            // and the saving chain is deferred in memory instead\n            $model->$attr()->add($item);\n        }\n    }\n\n    /**\n     * decodeRepeaterItem\n     */\n    protected function decodeRepeaterItem($model, $data, $sessionKey)\n    {\n        foreach ($data as $attr => $value) {\n            $this->decodeModelAttribute($model, $attr, $value, $sessionKey);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/RepeaterItem.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse Tailor\\Classes\\Fieldset;\nuse Tailor\\Classes\\FieldManager;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Rain\\Database\\ExpandoModel;\nuse SystemException;\n\n/**\n * RepeaterItem stores generic content serialized as JSON\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass RepeaterItem extends ExpandoModel\n{\n    use \\Tailor\\Traits\\DeferredContentModel;\n    use \\October\\Rain\\Database\\Traits\\Sortable;\n    use \\October\\Rain\\Database\\Traits\\Validation;\n\n    /**\n     * @var array rules for validation\n     */\n    public $rules = [];\n\n    /**\n     * @var array fillable fields, in addition to those dynamically added by content fields\n     */\n    protected $fillable = [];\n\n    /**\n     * @var string expandoColumn name to store the data\n     */\n    protected $expandoColumn = 'content_value';\n\n    /**\n     * @var array expandoPassthru attributes that should not be serialized\n     */\n    protected $expandoPassthru = [\n        'content_group',\n        'content_spawn_path',\n        'host_id',\n        'host_type',\n        'host_field',\n        'sort_order',\n        'parent_id',\n        'site_id',\n        'created_at',\n        'updated_at',\n    ];\n\n    /**\n     * @var array fieldsetConfig\n     */\n    protected $fieldsetConfig;\n\n    /**\n     * @var bool useFieldsetGroups\n     */\n    protected $useFieldsetGroups;\n\n    /**\n     * @var bool isBlueprintExtended prevents multiple extensions\n     */\n    protected $isBlueprintExtended = false;\n\n    /**\n     * @var array isLazyLoadedRelation\n     */\n    protected $isLazyLoadedRelation = [];\n\n    /**\n     * morphTo\n     */\n    public $morphTo = [\n        'host' => []\n    ];\n\n    /**\n     * getTypeAttribute\n     */\n    public function getTypeAttribute()\n    {\n        return $this->content_group;\n    }\n\n    /**\n     * defineListColumns\n     */\n    public function defineListColumns(ListElement $host)\n    {\n        $this->getFieldsetDefinition()->defineAllListColumns($host);\n    }\n\n    /**\n     * defineFormFields\n     */\n    public function defineFormFields(FormElement $host)\n    {\n        $this->getFieldsetDefinition()->defineAllFormFields($host);\n    }\n\n    /**\n     * afterFetch\n     */\n    protected function afterFetch()\n    {\n        if ($this->fieldsetConfig) {\n            $this->extendWithBlueprint();\n        }\n        else {\n            $this->extendWithBlueprintSpawn($this->content_spawn_path);\n        }\n    }\n\n    /**\n     * beforeValidate\n     */\n    protected function beforeValidate()\n    {\n        // Ensure the model is extended for new records, this is delayed to the\n        // last moment since the fields may depend on a content group being set\n        if (!$this->exists) {\n            $this->extendWithBlueprint();\n        }\n    }\n\n    /**\n     * beforeSave\n     */\n    protected function beforeSave()\n    {\n        if (!$this->content_spawn_path) {\n            $this->content_spawn_path = $this->buildSpawnPath();\n        }\n    }\n\n    /**\n     * beforeReplicate make sure that the model is extended\n     */\n    protected function beforeReplicate()\n    {\n        $this->extendWithBlueprint();\n    }\n\n    /**\n     * extendWithBlueprint\n     */\n    public function extendWithBlueprint()\n    {\n        if ($this->isBlueprintExtended) {\n            return;\n        }\n\n        $this->getFieldsetDefinition()->applyModelExtensions($this);\n\n        $this->isBlueprintExtended = true;\n    }\n\n    /**\n     * extendWithBlueprintSpawn attempts to load from a respawned model, then copies the fieldset\n     * definition across before extending the model.\n     */\n    public function extendWithBlueprintSpawn(string $spawnPath)\n    {\n        $model = $this->spawnFromPath($spawnPath);\n\n        if (!$model) {\n            throw new SystemException(\"Could not spawn from path [{$spawnPath}]\");\n        }\n\n        $this->setFieldsetDefinition($model->getTable(), $model->fieldsetConfig, $model->useFieldsetGroups);\n\n        if ($model->useFieldsetGroups) {\n            $this->content_group = $model->content_group;\n        }\n\n        $this->extendWithBlueprint();\n    }\n\n    /**\n     * setBlueprintFieldConfig\n     */\n    public function setBlueprintFieldConfig($parentModel, string $tableName, string $fieldName, array $fieldConfig, bool $useGroups)\n    {\n        $this->host_field = $fieldName;\n        $this->setRelation('host', $parentModel);\n        $this->setFieldsetDefinition($tableName, $fieldConfig, $useGroups);\n\n        // Extend model now since the fields are static\n        if (!$useGroups) {\n            $this->extendWithBlueprint();\n        }\n\n        // Recursive implementation\n        $this->bindEvent('model.newInstance', function($instance) use ($parentModel, $tableName, $fieldName, $fieldConfig, $useGroups) {\n            $instance->setBlueprintFieldConfig($parentModel, $tableName, $fieldName, $fieldConfig, $useGroups);\n        });\n    }\n\n    /**\n     * getFieldsetDefinition returns a fieldset for the selected content group.\n     */\n    protected function getFieldsetDefinition(): Fieldset\n    {\n        $config = $this->fieldsetConfig;\n\n        if ($this->useFieldsetGroups) {\n            $config = $config[$this->content_group] ?? array_first($config);\n        }\n\n        $fieldset = FieldManager::instance()->makeFieldset($config);\n\n        $fieldset->validate();\n\n        return $fieldset;\n    }\n\n    /**\n     * getContentFieldsetDefinition returns a merged fieldset for all groups\n     * defined by the repeater item.\n     */\n    protected function getContentFieldsetDefinition(): Fieldset\n    {\n        if (!$this->useFieldsetGroups) {\n            return $this->getFieldsetDefinition();\n        }\n\n        $manager = FieldManager::instance();\n\n        $config = null;\n        foreach ($this->fieldsetConfig as $code => $attributes) {\n            if ($config === null) {\n                $config = $attributes;\n            }\n            else {\n                $config['fields'] += $manager->rewriteMixinNames($attributes['fields'] ?? []);\n            }\n        }\n\n        return $manager->makeFieldset((array) $config);\n    }\n\n    /**\n     * extendWithLazyLoadedRelation\n     */\n    protected function extendWithLazyLoadedRelation(string $name)\n    {\n        // No config to use, or relations already defined by extension\n        if (!$this->fieldsetConfig || $this->isBlueprintExtended) {\n            return;\n        }\n\n        // Check already performed once before\n        if (isset($this->isLazyLoadedRelation[$name])) {\n            return;\n        }\n\n        $this->getContentFieldsetDefinition()->getField($name)?->extendModel($this);\n\n        $this->isLazyLoadedRelation[$name] = true;\n    }\n\n    /**\n     * setFieldsetDefinition\n     */\n    public function setFieldsetDefinition(string $tableName, array $fields, bool $useGroups): void\n    {\n        $this->setTable($tableName);\n\n        $this->fieldsetConfig = $fields;\n\n        $this->useFieldsetGroups = $useGroups;\n    }\n\n    /**\n     * buildSpawnPath returns a string that can be used to respawn this related model\n     * from the parent. The syntax is: class@uuid:group.relation:group.relation:group\n     */\n    protected function buildSpawnPath()\n    {\n        $host = $this->host;\n        $chain = $this->host_field;\n        if ($this->content_group) {\n            $chain = $chain.':'.$this->content_group;\n        }\n\n        // Build child relations\n        if ($host instanceof self) {\n            $chain = $host->buildSpawnPath().'.'.$chain;\n        }\n        // Build parent model\n        else {\n            $primaryChain = get_class($host).'@'.$host->getBlueprintUuid();\n\n            if ($group = $host->getBlueprintGroup()) {\n                $primaryChain = $primaryChain.':'.$group;\n            }\n\n            $chain = $primaryChain.'.'.$chain;\n        }\n\n        return $chain;\n    }\n\n    /**\n     * spawnFromPath will respawn this related model from a saved path.\n     * The syntax is: class@uuid:group.relation:group.relation:group\n     */\n    public static function spawnFromPath(string $path)\n    {\n        if (strpos($path, '@') === false) {\n            return;\n        }\n\n        [$className, $parts] = explode('@', $path, 2);\n        $parts = explode('.', $parts);\n\n        if (!class_exists($className)) {\n            return;\n        }\n\n        // Build parent model\n        $parent = new $className;\n        $parentParts = array_shift($parts);\n        $parentParts = explode(':', $parentParts);\n\n        $parent->setBlueprintUuid($parentParts[0]);\n        if (isset($parentParts[1])) {\n            $parent->setBlueprintGroup($parentParts[1]);\n        }\n\n        $parent->extendWithBlueprint();\n\n        // Build child relations\n        $childModel = $parent;\n        foreach ($parts as $part) {\n            $itemParts = explode(':', $part);\n            $fieldName = $itemParts[0];\n            if (!$fieldName) {\n                return;\n            }\n\n            $childModel = $childModel->makeRelation($fieldName);\n            if (!$childModel) {\n                return;\n            }\n\n            if (isset($itemParts[1])) {\n                $childModel->content_group = $itemParts[1];\n            }\n\n            $childModel->extendWithBlueprint();\n        }\n\n        return $childModel;\n    }\n\n    /**\n     * getMorphClass adds dynamic table support\n     * @return string\n     */\n    public function getMorphClass()\n    {\n        return parent::getMorphClass() . '@' . $this->getTable();\n    }\n\n    /**\n     * hasRelation magically pulls relation definitions from any group definition.\n     * This method targets the __call() method to make relations available to the\n     * query builder.\n     */\n    public function hasRelation(string $name): bool\n    {\n        if (parent::hasRelation($name)) {\n            return true;\n        }\n\n        $this->extendWithLazyLoadedRelation($name);\n\n        return parent::hasRelation($name);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/SingleRecord.php",
    "content": "<?php namespace Tailor\\Models;\n\n/**\n * SingleRecord model for single page content\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass SingleRecord extends EntryRecord\n{\n}\n"
  },
  {
    "path": "modules/tailor/models/StreamRecord.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse October\\Contracts\\Element\\ListElement;\nuse Tailor\\Classes\\Scopes\\StreamRecordScope;\n\n/**\n * StreamRecord model for chronological content\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass StreamRecord extends EntryRecord\n{\n    /**\n     * afterBoot\n     */\n    public function afterBoot()\n    {\n        static::addGlobalScope(new StreamRecordScope);\n    }\n\n    /**\n     * defineListColumns\n     */\n    public function defineListColumns(ListElement $host)\n    {\n        $host->defineColumn('id', 'ID')->invisible();\n        $host->defineColumn('title', 'Title')->searchable(true);\n        $host->defineColumn('slug', 'Slug')->searchable(true)->invisible();\n        $host->defineColumn('entry_type_name', 'Entry Type')->shortLabel('Type')->invisible()->sortable(false);\n\n        $this->getContentFieldsetDefinition()->defineAllListColumns($host, ['except' => $this->fieldModifiers]);\n\n        $host->defineColumn('published_at_date', 'Published Date')->shortLabel('Published')->displayAs('date')->invisible(false)->sortableDefault('desc');\n        $host->defineColumn('status_code', 'Status')->shortLabel('')->displayAs('selectable')->sortable(false)->align('right');\n        $this->applyCoreColumnModifiers($host);\n    }\n\n    /**\n     * setPublishingDates\n     */\n    protected function setPublishingDates($useDate)\n    {\n        $this->published_at_day = $useDate->format('d');\n        $this->published_at_month = $useDate->format('m');\n        $this->published_at_year = $useDate->format('Y');\n        $this->published_at_date = $useDate;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/StructureRecord.php",
    "content": "<?php namespace Tailor\\Models;\n\nuse Site;\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FormElement;\nuse Tailor\\Classes\\Scopes\\StructureRecordScope;\n\n/**\n * StructureRecord model for structured content\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\nclass StructureRecord extends EntryRecord\n{\n    use \\Tailor\\Traits\\NestedTreeModel;\n\n    /**\n     * afterBoot\n     */\n    public function afterBoot()\n    {\n        static::addGlobalScope(new StructureRecordScope);\n    }\n\n    /**\n     * defineListColumns\n     */\n    public function defineListColumns(ListElement $host)\n    {\n        $host->defineColumn('id', 'ID')->invisible();\n        $host->defineColumn('title', 'Title')->searchable(true);\n        $host->defineColumn('slug', 'Slug')->searchable(true)->invisible();\n        $host->defineColumn('fullslug', 'Full Slug')->searchable(false)->invisible();\n        $host->defineColumn('entry_type_name', 'Entry Type')->shortLabel('Type')->invisible()->sortable(false);\n\n        $this->getContentFieldsetDefinition()->defineAllListColumns($host, ['except' => $this->fieldModifiers]);\n\n        $host->defineColumn('published_at_date', 'Published Date')->shortLabel('Published')->displayAs('date')->invisible(true)->sortableDefault(false);\n        $host->defineColumn('status_code', 'Status')->shortLabel('')->displayAs('selectable')->sortable(false)->align('right');\n        $this->applyCoreColumnModifiers($host);\n    }\n\n    /**\n     * defineSecondaryFormFields\n     */\n    public function defineSecondaryFormFields(FormElement $host)\n    {\n        $host->addFormField('slug', 'Slug')->preset(['field' => 'title', 'type' => 'slug']);\n        $host->addFormField('is_enabled', 'Enabled')->displayAs('switch')->defaults(true);\n        $host->addFormField('published_at', 'Publish Date')->displayAs('datepicker')->defaultTimeMidnight();\n        $host->addFormField('expired_at', 'Expiry Date')->displayAs('datepicker')->defaultTimeMidnight();\n        $host->addFormField('parent_id', 'Parent')->displayAs('dropdown');\n        $this->applyCoreFieldModifiers($host);\n    }\n\n    /**\n     * useNestedTreeStructure only for primary records\n     */\n    public function useNestedTreeStructure(): bool\n    {\n        return !$this->primary_id;\n    }\n\n    /**\n     * newNestedTreeQuery creates a new query for nested sets\n     */\n    protected function newNestedTreeQuery()\n    {\n        $query = $this->newQuery()->withSavedDrafts();\n\n        // Nested tree query must have context\n        if (Site::hasGlobalContext() && $this->isMultisiteEnabled()) {\n            $query->withSite($this->site_id ?: Site::getSiteIdFromContext());\n        }\n\n        return $query;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/entryrecord/HasCoreModifiers.php",
    "content": "<?php namespace Tailor\\Models\\EntryRecord;\n\nuse October\\Contracts\\Element\\ListElement;\nuse October\\Contracts\\Element\\FormElement;\nuse October\\Contracts\\Element\\FilterElement;\n\n/**\n * HasCoreModifiers modifies specific field properties to core fields,\n * which are fields not defined in a blueprint\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasCoreModifiers\n{\n    /**\n     * applyCoreFieldModifiers will transfer modified attributes from the blueprint\n     * to the core field definition. For example, the title placeholder value or\n     * the is_enabled default state.\n     */\n    protected function applyCoreFieldModifiers(FormElement $host)\n    {\n        $toTransfer = [\n            'column',\n            'comment',\n            'commentAbove',\n            'commentHtml',\n            'default',\n            'dependsOn',\n            'hidden',\n            'label',\n            'placeholder',\n            'readOnly',\n            'scope',\n        ];\n\n        // To remove from validation rules when hidden\n        $toInvalidate = [\n            'title',\n            'slug',\n        ];\n\n        $fieldset = $this->getFieldsetDefinition();\n        $formFields = $host->getFormFieldset();\n\n        foreach ($formFields->getAllFields() as $name => $field) {\n            if ($modifier = $fieldset->getField($name)) {\n                $field->useConfig(array_only($modifier->getConfig(), $toTransfer));\n            }\n\n            // Remove required validation for title field\n            if (in_array($name, $toInvalidate) && $field->hidden) {\n                unset($this->rules[$name]);\n            }\n        }\n    }\n\n    /**\n     * applyCoreColumnModifiers will transfer modified attributes from the blueprint\n     * to the core column definition. For example, the title column.\n     */\n    protected function applyCoreColumnModifiers(ListElement $host)\n    {\n        $coreColumns = [\n            'id',\n            'title',\n            'slug',\n            'fullslug',\n            'entry_type_name',\n            'published_at_date',\n            'status_code',\n            'created_at',\n            'updated_at',\n            'created_user',\n            'updated_user',\n        ];\n\n        $toTransfer = [\n            'label',\n            'shortLabel',\n            'valueFrom',\n            'invisible',\n            'hidden'\n        ];\n\n        $fieldset = $this->getFieldsetDefinition();\n        $listColumns = $host->getColumns();\n\n        foreach ($coreColumns as $columnName) {\n            $column = $listColumns[$columnName] ?? null;\n            $field = $fieldset->getField($columnName);\n\n            // Checking the external scopes definition is needed for core fields\n            // since they are not in the fieldset and not defined in the blueprint\n            $modifier = $field ? $field->column : ($fieldset->columns[$columnName] ?? null);\n            if (!$column || $modifier === null) {\n                continue;\n            }\n\n            if (is_array($modifier)) {\n                $column->useConfig(array_only($modifier, $toTransfer));\n            }\n            elseif (is_string($modifier)) {\n                $column->$modifier();\n            }\n            elseif (($field && $field->hidden) || $modifier === false) {\n                $column->hidden();\n            }\n        }\n    }\n\n    /**\n     * applyCoreScopeModifiers will transfer modified attributes from the blueprint\n     * to the core scope definition. For example, the published_at_date scope.\n     */\n    protected function applyCoreScopeModifiers(FilterElement $host)\n    {\n        $coreScopes = [\n            'published_at_date',\n            'status_code',\n        ];\n\n        $toTransfer = [\n            'label',\n            'hidden'\n        ];\n\n        $fieldset = $this->getFieldsetDefinition();\n        $filterScopes = $host->getScopes();\n\n        foreach ($coreScopes as $scopeName) {\n            $scope = $filterScopes[$scopeName] ?? null;\n            $field = $fieldset->getField($scopeName);\n\n            // Checking the external scopes definition is needed for core fields\n            // since they are not in the fieldset and not defined in the blueprint\n            $modifier = $field ? $field->scope : ($fieldset->scopes[$scopeName] ?? null);\n            if (!$scope || $modifier === null) {\n                continue;\n            }\n\n            if (is_array($modifier)) {\n                $scope->useConfig(array_only($modifier, $toTransfer));\n            }\n            elseif (is_string($modifier)) {\n                $scope->$modifier();\n            }\n            elseif (($field && $field->hidden) || $modifier === false) {\n                $scope->hidden();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/entryrecord/HasDuplication.php",
    "content": "<?php namespace Tailor\\Models\\EntryRecord;\n\n/**\n * HasDuplication\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasDuplication\n{\n    /**\n     * duplicateRecord\n     */\n    public function duplicateRecord()\n    {\n        $copy = $this->duplicateWithRelations();\n        $copy->is_enabled = false;\n\n        if ($this->title) {\n            $copy->title = sprintf(\"%s (%s)\", $this->title, __('Copy'));\n        }\n\n        if ($this->slug) {\n            $copy->slug = $this->slug . '-copy';\n        }\n\n        return $copy;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/entryrecord/HasEntryBlueprint.php",
    "content": "<?php namespace Tailor\\Models\\EntryRecord;\n\nuse Tailor\\Classes\\Blueprint\\SingleBlueprint;\nuse Tailor\\Classes\\Blueprint\\StreamBlueprint;\nuse Tailor\\Classes\\Blueprint\\StructureBlueprint;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse SystemException;\n\n/**\n * HasEntryBlueprint\n *\n * @property string $blueprint_uuid\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasEntryBlueprint\n{\n    /**\n     * @var EntryBlueprint blueprintCache\n     */\n    protected $blueprintCache;\n\n    /**\n     * bootNestedTree constructor\n     */\n    public function initializeHasEntryBlueprint()\n    {\n        $this->bindEvent('model.afterFetch', function() {\n            $this->extendWithBlueprint();\n        });\n\n        $this->bindEvent('model.newInstance', function($model) {\n            $model->extendWithBlueprint($this->blueprint_uuid);\n        });\n    }\n\n    /**\n     * getBlueprintDefinition\n     */\n    public function getBlueprintDefinition(): EntryBlueprint\n    {\n        if ($this->blueprintCache !== null) {\n            return $this->blueprintCache;\n        }\n\n        $uuid = $this->blueprint_uuid;\n        if (!$uuid) {\n            throw new SystemException('Missing section definition. Call EntryRecord::inSection() to set one.');\n        }\n\n        $blueprint = BlueprintIndexer::instance()->findSection($uuid);\n        if (!$blueprint) {\n            throw new SystemException(sprintf('Unable to find section blueprint with ID \"%s\".', $uuid));\n        }\n\n        return $this->blueprintCache = $blueprint;\n    }\n\n    /**\n     * isEntryStructure\n     */\n    public function isEntryStructure(): bool\n    {\n        return $this->getBlueprintDefinition() instanceof StructureBlueprint;\n    }\n\n    /**\n     * isEntryStream\n     */\n    public function isEntryStream(): bool\n    {\n        return $this->getBlueprintDefinition() instanceof StreamBlueprint;\n    }\n\n    /**\n     * isEntrySingle\n     */\n    public function isEntrySingle(): bool\n    {\n        return $this->getBlueprintDefinition() instanceof SingleBlueprint;\n    }\n\n    /**\n     * useDrafts\n     */\n    public function useDrafts(): bool\n    {\n        return $this->getBlueprintDefinition()->useDrafts();\n    }\n\n    /**\n     * useVersions\n     */\n    public function useVersions(): bool\n    {\n        return $this->getBlueprintDefinition()->useVersions();\n    }\n\n    /**\n     * isEntryEnabledByDefault\n     */\n    public function isEntryEnabledByDefault(): bool\n    {\n        return $this->getBlueprintDefinition()->isEntryEnabledByDefault();\n    }\n\n    /**\n     * @deprecated use isMultisiteEnabled\n     */\n    public function useMultisite(): bool\n    {\n        return $this->isMultisiteEnabled();\n    }\n\n    /**\n     * @deprecated use isMultisiteSyncEnabled\n     */\n    public function useMultisiteSync(): bool\n    {\n        return $this->isMultisiteSyncEnabled();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/entryrecord/HasStatusScopes.php",
    "content": "<?php namespace Tailor\\Models\\EntryRecord;\n\nuse Date;\nuse Tailor\\Classes\\Scopes\\DraftableScope;\n\n/**\n * HasStatusScopes\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasStatusScopes\n{\n    /**\n     * getStatusCodeAttribute\n     */\n    public function getStatusCodeAttribute()\n    {\n        if ($this->useDrafts() && $this->isDraftStatus()) {\n            return 'draft';\n        }\n\n        $isEnabled = $this->is_enabled !== null\n            ? $this->is_enabled\n            : $this->isEntryEnabledByDefault();\n\n        if (!$isEnabled) {\n            return 'hidden';\n        }\n\n        if ($this->published_at || $this->expired_at) {\n            $now = Date::now();\n\n            if ($this->published_at && $now < $this->published_at) {\n                return 'scheduled';\n            }\n\n            if ($this->expired_at && $now > $this->expired_at) {\n                return 'expired';\n            }\n        }\n\n        if ($this->trashed()) {\n            return 'deleted';\n        }\n\n        return 'published';\n    }\n\n    /**\n     * getStatusNameOptions\n     */\n    public function getStatusCodeOptions()\n    {\n        $options =  [\n            'published' => ['Published', 'var(--bs-green)'],\n            'expired' => ['Expired', 'var(--bs-red)'],\n            'scheduled' => ['Scheduled', 'var(--bs-indigo)'],\n            'hidden' => ['Hidden', '#bdc3c7'],\n        ];\n\n        if ($this->useDrafts()) {\n            $options += ['draft' => ['Draft', 'var(--bs-orange)']];\n        }\n\n        if ($this->isSoftDeleteEnabled()) {\n            $options += ['deleted' => ['Deleted', '#536061']];\n        }\n\n        return $options;\n    }\n\n    /**\n     * scopeApplyStatusFromFilter\n     */\n    public function scopeApplyStatusFromFilter($query, $scope)\n    {\n        if ($scope->value === 'published') {\n            return $query->applyPublishedStatus();\n        }\n\n        if ($scope->value === 'expired') {\n            return $query->applyExpiredStatus();\n        }\n\n        if ($scope->value === 'scheduled') {\n            return $query->applyScheduledStatus();\n        }\n\n        if ($scope->value === 'draft') {\n            return $query->applyDraftStatus();\n        }\n\n        if ($scope->value === 'hidden') {\n            return $query->applyHiddenStatus();\n        }\n\n        if ($scope->value === 'deleted') {\n            return $query->onlyTrashed();\n        }\n\n        return $query;\n    }\n\n    /**\n     * scopeApplyPublished\n     */\n    public function scopeApplyPublishedStatus($query)\n    {\n        $now = Date::now();\n\n        return $query->where('is_enabled', 1)\n            ->where(function($q) use ($now) {\n                $q->whereNull('published_at');\n                $q->orWhere('published_at', '<', $now);\n            })\n            ->where(function($q) use ($now) {\n                $q->whereNull('expired_at');\n                $q->orWhere('expired_at', '>', $now);\n            })\n        ;\n    }\n\n    /**\n     * scopeApplyPublished\n     */\n    public function scopeApplyScheduledStatus($query)\n    {\n        $now = Date::now();\n\n        return $query->where('is_enabled', true)\n            ->where('published_at', '>', $now)\n        ;\n    }\n\n    /**\n     * scopeApplyPublished\n     */\n    public function scopeApplyExpiredStatus($query)\n    {\n        $now = Date::now();\n\n        return $query->where('is_enabled', true)\n            ->where('expired_at', '<', $now)\n        ;\n    }\n\n    /**\n     * scopeApplyHiddenStatus\n     */\n    public function scopeApplyHiddenStatus($query)\n    {\n        return $query->where('is_enabled', '<>', true)\n            ->where('draft_mode', DraftableScope::MODE_PUBLISHED);\n    }\n\n    /**\n     * scopeApplyPublished\n     */\n    public function scopeApplyDraftStatus($query)\n    {\n        return $query->where('draft_mode', '<>', DraftableScope::MODE_PUBLISHED);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/models/globalrecord/HasGlobalBlueprint.php",
    "content": "<?php namespace Tailor\\Models\\GlobalRecord;\n\nuse Tailor\\Classes\\Blueprint\\GlobalBlueprint;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse DateTimeInterface;\nuse SystemException;\n\n/**\n * HasGlobalBlueprint\n *\n * @property string $blueprint_uuid\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait HasGlobalBlueprint\n{\n    /**\n     * @var GlobalBlueprint blueprintCache\n     */\n    protected $blueprintCache;\n\n    /**\n     * bootNestedTree constructor\n     */\n    public function initializeHasGlobalBlueprint()\n    {\n        $this->bindEvent('model.afterFetch', [$this, 'globalAfterFetchEvent']);\n\n        $this->bindEvent('model.afterSave', [$this, 'globalAfterSave']);\n\n        // Process attributes last for traits with attribute modifiers\n        $this->bindEvent('model.beforeSaveDone', [$this, 'globalBeforeSaveDone'], -1);\n\n        $this->bindEvent('model.newInstance', function($model) {\n            $model->extendWithBlueprint($this->blueprint_uuid);\n        });\n    }\n\n    /**\n     * globalAfterSave\n     */\n    public function globalAfterSave()\n    {\n        $this->attributes = array_merge($this->content, $this->attributes);\n    }\n\n    /**\n     * globalAfterFetchEvent\n     */\n    public function globalAfterFetchEvent()\n    {\n        $this->fetchBlueprintContent();\n        $this->extendWithBlueprint();\n    }\n\n    /**\n     * globalBeforeSaveDone\n     */\n    public function globalBeforeSaveDone()\n    {\n        $this->storeBlueprintContent();\n    }\n\n    /**\n     * getBlueprintDefinition\n     */\n    public function getBlueprintDefinition(): GlobalBlueprint\n    {\n        if ($this->blueprintCache !== null) {\n            return $this->blueprintCache;\n        }\n\n        $uuid = $this->blueprint_uuid;\n        if (!$uuid) {\n            throw new SystemException('Missing global definition. Call GlobalRecord::inGlobal() to set one.');\n        }\n\n        $blueprint = BlueprintIndexer::instance()->findGlobal($uuid);\n        if (!$blueprint) {\n            throw new SystemException(sprintf('Unable to find global blueprint with ID \"%s\".', $uuid));\n        }\n\n        return $this->blueprintCache = $blueprint;\n    }\n\n    /**\n     * fetchBlueprintContent\n     */\n    public function fetchBlueprintContent()\n    {\n        $content = $this->content;\n        $contentColumns = $this->getFieldsetColumnNames();\n\n        // Fetch content attributes\n        foreach ($contentColumns as $key) {\n            if (array_key_exists($key, $content)) {\n                $this->$key = $content[$key];\n            }\n        }\n    }\n\n    /**\n     * storeBlueprintContent\n     */\n    public function storeBlueprintContent()\n    {\n        $content = [];\n        $contentColumns = $this->getFieldsetColumnNames();\n\n        // Save attributes to content, purge from model\n        $toSave = array_only($this->attributes, $contentColumns);\n        foreach ($toSave as $key => $value) {\n            if ($this->isJsonable($key)) {\n                $content[$key] = $this->getAttribute($key);\n            }\n            elseif ($value instanceof DateTimeInterface) {\n                $content[$key] = $value->format($this->getDateFormat());\n            }\n            elseif (is_bool($value)) {\n                $content[$key] = (int) $value;\n            }\n            else {\n                $content[$key] = $value;\n            }\n\n            unset($this->attributes[$key]);\n        }\n\n        $this->content = $content;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/tests/classes/BlueprintIndexerTest.php",
    "content": "<?php\n\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Classes\\BlueprintIndexer;\n\nclass BlueprintIndexerTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n        Blueprint::setDefaultDatasource(base_path('modules/tailor/tests/fixtures/blueprints'));\n    }\n\n    /**\n     * testListingBlueprints\n     */\n    public function testListingBlueprints()\n    {\n        $this->markTestSkipped('Needs refactor to isolate blueprint paths');\n        return;\n\n        $sections = BlueprintIndexer::instance()->listSections();\n        $this->assertCount(8, $sections);\n\n        $mixins = BlueprintIndexer::instance()->listMixins();\n        $this->assertCount(12, $mixins);\n\n        $globals = BlueprintIndexer::instance()->listGlobals();\n        $this->assertCount(1, $globals);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/tests/classes/BlueprintTest.php",
    "content": "<?php\n\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse Tailor\\Classes\\Blueprint\\GlobalBlueprint;\nuse Tailor\\Classes\\Blueprint\\MixinBlueprint;\nuse Tailor\\Classes\\Blueprint\\SingleBlueprint;\nuse Tailor\\Classes\\Blueprint\\StreamBlueprint;\nuse Tailor\\Classes\\Blueprint\\StructureBlueprint;\n\nclass BlueprintTest extends TestCase\n{\n    public function setUp(): void\n    {\n        parent::setUp();\n        Blueprint::setDefaultDatasource(base_path('modules/tailor/tests/fixtures/blueprints'));\n    }\n\n    public function testLoadBlueprints()\n    {\n        $this->markTestSkipped('Needs refactor to isolate blueprint paths');\n        return;\n\n        $blueprint = Blueprint::load('blog/posts.yaml');\n\n        $this->assertInstanceOf(\\Tailor\\Classes\\Blueprint\\EntryBlueprint::class, $blueprint);\n        $this->assertEquals('Posts', $blueprint->name);\n        $this->assertEquals('blog', $blueprint->handle);\n        $this->assertEquals('blog/posts.yaml', $blueprint->fileName);\n    }\n\n    public function testListBlueprints()\n    {\n        $this->markTestSkipped('Needs refactor to isolate blueprint paths');\n        return;\n\n        $blueprints = Blueprint::listInProject();\n        $this->assertArrayIsEqual([\n            'author.yaml',\n            'blog/authors.yaml',\n            'blog/categories.yaml',\n            'blog/config.yaml',\n            'blog/post-content.yaml',\n            'blog/posts.yaml',\n            'category.yaml',\n            'landing/blockbuilder.yaml',\n            'landing/blockbuilder/call-to-action.yaml',\n            'landing/blockbuilder/carousel.yaml',\n            'landing/blockbuilder/common.yaml',\n            'landing/blockbuilder/compare-table.yaml',\n            'landing/blockbuilder/feature-table.yaml',\n            'landing/blockbuilder/featurette.yaml',\n            'landing/blockbuilder/headline-items.yaml',\n            'landing/blockbuilder/headline.yaml',\n            'landing/blockbuilder/pricing-table.yaml',\n            'landing/landing-page.yaml',\n            'october-test/collections/basic.yaml',\n            'october-test/globals/basic.yaml',\n            'october-test/mixins/collection-field.yaml',\n            'october-test/mixins/entry-field.yaml',\n            'october-test/sections/feed-basic.yaml',\n            'october-test/sections/solo-basic.yaml',\n            'october-test/sections/tree-basic.yaml',\n            'post-content.yaml',\n            'post.yaml',\n            'wiki/wiki.yaml'\n        ], $blueprints->pluck('fileName')->all());\n\n        $blueprints = EntryBlueprint::listInProject();\n        $this->assertArrayIsEqual([\n            'author.yaml',\n            'blog/authors.yaml',\n            'blog/categories.yaml',\n            'blog/posts.yaml',\n            'category.yaml',\n            'landing/landing-page.yaml',\n            'post.yaml',\n            'wiki/wiki.yaml'\n        ], $blueprints->pluck('fileName')->all());\n\n        $blueprints = GlobalBlueprint::listInProject();\n        $this->assertArrayIsEqual([\n            \"blog/config.yaml\"\n        ], $blueprints->pluck('fileName')->all());\n\n        $blueprints = MixinBlueprint::listInProject();\n        $this->assertArrayIsEqual([\n            \"blog/post-content.yaml\",\n            \"landing/blockbuilder/call-to-action.yaml\",\n            \"landing/blockbuilder/carousel.yaml\",\n            \"landing/blockbuilder/common.yaml\",\n            \"landing/blockbuilder/compare-table.yaml\",\n            \"landing/blockbuilder/feature-table.yaml\",\n            \"landing/blockbuilder/featurette.yaml\",\n            \"landing/blockbuilder/headline-items.yaml\",\n            \"landing/blockbuilder/headline.yaml\",\n            \"landing/blockbuilder/pricing-table.yaml\",\n            \"landing/blockbuilder.yaml\",\n            \"post-content.yaml\"\n        ], $blueprints->pluck('fileName')->all());\n\n        $blueprints = SingleBlueprint::listInProject();\n        $this->assertArrayIsEqual([\n            \"landing/landing-page.yaml\"\n        ], $blueprints->pluck('fileName')->all());\n\n        $blueprints = StreamBlueprint::listInProject();\n        $this->assertArrayIsEqual([\n            \"blog/posts.yaml\",\n            \"post.yaml\"\n        ], $blueprints->pluck('fileName')->all());\n\n        $blueprints = StructureBlueprint::listInProject();\n        $this->assertArrayIsEqual([\n            \"category.yaml\",\n            \"wiki/wiki.yaml\"\n        ], $blueprints->pluck('fileName')->all());\n    }\n\n    public function testAssignUuid()\n    {\n        $this->markTestSkipped('Needs refactor to isolate blueprint paths');\n        return;\n\n        $fixturesPath = base_path('modules/tailor/tests/fixtures/blueprints/blog/comments.stub');\n        $tempBlueprint = base_path('modules/tailor/tests/fixtures/blueprints/blog/comments.yaml');\n        @unlink($tempBlueprint);\n\n        try {\n            copy($fixturesPath, $tempBlueprint);\n\n            $blueprint = Blueprint::load('blog/comments.yaml');\n            $this->assertEquals('Comments', $blueprint->name);\n            $this->assertEquals('blog/comments.yaml', $blueprint->fileName);\n            $this->assertNull($blueprint->uuid);\n            $blueprint->save();\n\n            $blueprint = Blueprint::load('blog/comments.yaml');\n            $this->assertNotNull($blueprint->uuid);\n        }\n        finally {\n            @unlink($tempBlueprint);\n        }\n    }\n\n    /**\n     * assertArrayIsEqual\n     */\n    protected function assertArrayIsEqual($arr, $exp)\n    {\n        sort($arr);\n        sort($exp);\n\n        $this->assertEquals($exp, $arr);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/tests/database/EntriesFieldModelTest.php",
    "content": "<?php\n\nuse Tailor\\Models\\EntryRecord;\n\nclass EntriesFieldModelTest extends PluginTestCase\n{\n    protected $slugCount = 1;\n\n    public function setUp(): void\n    {\n        parent::setUp();\n\n        $this->migrateTailor();\n    }\n\n    /**\n     * testSetBelongsToRelation\n     */\n    public function testSetBelongsToRelation()\n    {\n        $post = $this->createPost();\n        $author = $this->createAuthor();\n\n        // Test relations\n        $this->assertNotEmpty($post->id);\n        $this->assertNotEmpty($author->id);\n        $this->assertEmpty($post->author);\n\n        // Set author\n        $post->author = $author;\n        $post->save();\n\n        $this->assertEquals($author->id, $post->author_id);\n        $this->assertEquals('Test Author', $post->author->title);\n\n        // Test query\n        $relationSql = <<<SQL\nselect\n  *\nfrom\n  \"xc_unittestauthorf28b6604c\"\nwhere\n  \"xc_unittestauthorf28b6604c\".\"id\" = 1\n  and \"xc_unittestauthorf28b6604c\".\"draft_mode\" = 1\n  and \"xc_unittestauthorf28b6604c\".\"is_version\" = ''\n  and \"xc_unittestauthorf28b6604c\".\"deleted_at\" is null\nSQL;\n\n        $this->assertEquals(\n            $this->cleanSqlSample($relationSql),\n            $this->toSqlWithBindings($post->author()->newQuery())\n        );\n    }\n\n    /**\n     * testSetBelongsToManyRelation\n     */\n    public function testSetBelongsToManyRelation()\n    {\n        $post = $this->createPost();\n        $category = $this->createCategory();\n        $category2 = $this->createCategory();\n\n        // Test relations\n        $this->assertNotEmpty($post->id);\n        $this->assertNotEmpty($category->id);\n        $this->assertNotEmpty($category2->id);\n        $this->assertEmpty($post->categories);\n\n        // Set category\n        $post->categories()->add($category);\n        $post->categories()->add($category2);\n        $post->save();\n\n        $this->assertTrue($post->categories->contains($category->id));\n        $this->assertTrue($post->categories->contains($category2->id));\n\n        $this->assertEquals(2, $post->categories->count());\n        $this->assertEquals('Test Category', $post->categories->first()->title);\n\n        // Test query\n        $relationSql = <<<SQL\nselect\n  *\nfrom\n  \"xc_unittestcategoryb022a74bc\"\n  inner join \"xc_unittestpostedcd102ej\" on \"xc_unittestcategoryb022a74bc\".\"id\" = \"xc_unittestpostedcd102ej\".\"relation_id\"\nwhere\n  \"xc_unittestpostedcd102ej\".\"parent_id\" = 1\n  and \"xc_unittestpostedcd102ej\".\"relation_type\" = 'Tailor\\Models\\EntryRecord@xc_unittestcategoryb022a74bc'\n  and \"xc_unittestpostedcd102ej\".\"field_name\" = 'categories'\n  and \"xc_unittestcategoryb022a74bc\".\"draft_mode\" = 1\n  and \"xc_unittestcategoryb022a74bc\".\"is_version\" = ''\n  and \"xc_unittestcategoryb022a74bc\".\"deleted_at\" is null\n  order by \"nest_left\" asc\nSQL;\n\n        $this->assertEquals(\n            $this->cleanSqlSample($relationSql),\n            $this->toSqlWithBindings($post->categories())\n        );\n\n        $post2 = $this->createPost();\n        $post2->categories()->add($category2);\n        $post2->save();\n\n        $this->assertEquals(2, $category2->posts->count());\n\n        // Test query\n        $relationSql = <<<SQL\nselect\n  *\nfrom\n  \"xc_unittestpostedcd102ec\"\n  inner join \"xc_unittestpostedcd102ej\" on \"xc_unittestpostedcd102ec\".\"id\" = \"xc_unittestpostedcd102ej\".\"parent_id\"\nwhere\n  \"xc_unittestpostedcd102ej\".\"relation_id\" = 1\n  and \"xc_unittestpostedcd102ej\".\"relation_type\" = 'Tailor\\Models\\EntryRecord@xc_unittestcategoryb022a74bc'\n  and \"xc_unittestpostedcd102ej\".\"field_name\" = 'categories'\n  and \"xc_unittestpostedcd102ec\".\"draft_mode\" = 1\n  and \"xc_unittestpostedcd102ec\".\"is_version\" = ''\n  and \"xc_unittestpostedcd102ec\".\"deleted_at\" is null\n  order by \"published_at_date\" desc\nSQL;\n\n        $this->assertEquals(\n            $this->cleanSqlSample($relationSql),\n            $this->toSqlWithBindings($category->posts())\n        );\n    }\n\n    /**\n     * createPost\n     */\n    protected function createPost()\n    {\n        $post = EntryRecord::inSection('UnitTest\\Post');\n        $post->title = 'Test Post';\n        $post->slug = 'post-00' . ++$this->slugCount;\n        $post->save();\n\n        // Test schema\n        $this->assertEquals([\n            'id',\n            'site_id',\n            'site_root_id',\n            'blueprint_uuid',\n            'content_group',\n            'title',\n            'slug',\n            'is_enabled',\n            'published_at',\n            'published_at_date',\n            'expired_at',\n            'draft_mode',\n            'primary_id',\n            'primary_attrs',\n            'is_version',\n            'published_at_day',\n            'published_at_month',\n            'published_at_year',\n            'content',\n            'author_id',\n            'created_user_id',\n            'updated_user_id',\n            'deleted_user_id',\n            'deleted_at',\n            'created_at',\n            'updated_at'\n        ], Schema::getColumnListing($post->getTable()));\n\n        return $post;\n    }\n\n    /**\n     * createAuthor\n     */\n    protected function createAuthor()\n    {\n        $author = EntryRecord::inSection('UnitTest\\Author');\n        $author->title = 'Test Author';\n        $author->slug = 'author-00' . ++$this->slugCount;\n        $author->save();\n\n        $this->assertEquals([\n            'id',\n            'site_id',\n            'site_root_id',\n            'blueprint_uuid',\n            'content_group',\n            'title',\n            'slug',\n            'is_enabled',\n            'published_at',\n            'published_at_date',\n            'expired_at',\n            'draft_mode',\n            'primary_id',\n            'primary_attrs',\n            'is_version',\n            'avatar',\n            'role',\n            'created_user_id',\n            'updated_user_id',\n            'deleted_user_id',\n            'deleted_at',\n            'created_at',\n            'updated_at'\n        ], Schema::getColumnListing($author->getTable()));\n\n        return $author;\n    }\n\n    /**\n     * createCategory\n     */\n    protected function createCategory()\n    {\n        $category = EntryRecord::inSection('UnitTest\\Category');\n        $category->title = 'Test Category';\n        $category->slug = 'category-00' . ++$this->slugCount;\n        $category->save();\n\n        // Test schema\n        $this->assertEquals([\n            'id',\n            'site_id',\n            'site_root_id',\n            'blueprint_uuid',\n            'content_group',\n            'title',\n            'slug',\n            'is_enabled',\n            'published_at',\n            'published_at_date',\n            'expired_at',\n            'draft_mode',\n            'primary_id',\n            'primary_attrs',\n            'is_version',\n            'fullslug',\n            'parent_id',\n            'nest_left',\n            'nest_right',\n            'nest_depth',\n            'is_featured',\n            'description',\n            'created_user_id',\n            'updated_user_id',\n            'deleted_user_id',\n            'deleted_at',\n            'created_at',\n            'updated_at'\n        ], Schema::getColumnListing($category->getTable()));\n\n        return $category;\n    }\n\n    /**\n     * cleanSqlSample\n     */\n    protected function cleanSqlSample($sql)\n    {\n        $sql = trim($sql);\n        $sql = str_replace(\"\\r\\n\", ' ', $sql);\n        $sql = str_replace(\"\\n\", ' ', $sql);\n        $sql = preg_replace('/\\s+/', ' ', $sql);\n        return $sql;\n    }\n\n    /**\n     * toSqlWithBindings\n     */\n    protected function toSqlWithBindings($query)\n    {\n        $bindings = array_map(\n            fn ($value) => is_numeric($value) ? $value : \"'{$value}'\",\n            $query->getBindings()\n        );\n\n        return Str::replaceArray('?', $bindings, $query->toSql());\n    }\n}\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/blog/authors.yaml",
    "content": "uuid: 6947ff28-b660-47d7-9240-24ca6d58aeae\nname: Authors\nhandle: blogAuthors\ntype: entry\n\nnavigation:\n    parent: blog\n    icon: icon-user\n    order: 200\n\nfields:\n    avatar:\n        label: Avatar\n        type: mediafinder\n        mode: image\n\n    about:\n        label: About\n        type: textarea\n\n    facebook_url:\n        label: Facebook URL\n        tab: Social\n        placeholder: \"https://...\"\n\n    twitter_url:\n        label: Twitter URL\n        tab: Social\n        placeholder: \"https://...\"\n\n    github_url:\n        label: GitHub URL\n        tab: Social\n        placeholder: \"https://...\"\n\n    linkedin_url:\n        label: LinkedIn URL\n        tab: Social\n        placeholder: \"https://...\"\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/blog/categories.yaml",
    "content": "uuid: b022a74b-15e6-4c6b-9eb9-17efc5103543\nname: Categories\nhandle: blogCategories\ntype: entry\n\nnavigation:\n    parent: blog\n    icon: icon-star\n    order: 200\n\nfields:\n    description:\n        label: Description\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/blog/comments.stub",
    "content": "name: Comments\nhandle: blogComments\ntype: entry\n\nfields:\n    comment:\n        label: Description\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/blog/config.yaml",
    "content": "uuid: 3328c303-7989-462e-b866-27e7037ba275\nname: Blog Settings\nhandle: blogConfig\ntype: global\n\nnavigation:\n    parent: blog\n    icon: icon-cog\n    order: 200\n\nfields:\n    blog_name:\n        label: Blog Name\n        tab: General\n        placeholder: Latest News\n\n    about_this_blog:\n        label: About This Blog\n        comment: Customize this section to tell your visitors a little bit about your publication, writers, content, or something else entirely. Totally up to you.\n        tab: General\n\n    _section1:\n        label: Social Media\n        type: section\n        tab: General\n\n    facebook_url:\n        label: Facebook URL\n        placeholder: \"https://...\"\n        tab: General\n\n    twitter_url:\n        label: Twitter URL\n        placeholder: \"https://...\"\n        tab: General\n\n    github_url:\n        label: GitHub URL\n        placeholder: \"https://...\"\n        tab: General\n\n    linkedin_url:\n        label: LinkedIn URL\n        placeholder: \"https://...\"\n        tab: General\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/blog/post-content.yaml",
    "content": "uuid: 4d7fd1e4-85f2-48f5-947e-92819fc8664b\nname: Blog Post Content\nhandle: blogPostContent\ntype: mixin\n\nfields:\n    banner:\n        tab: Manage\n        label: Banner\n        type: fileupload\n        mode: image\n        maxFiles: 1\n\n    author:\n        tab: Manage\n        label: Author\n        commentAbove: 'Select the author for this blog post'\n        type: collections\n        maxItems: 1\n        source: blogAuthors\n\n    categories:\n        tab: Manage\n        label: Categories\n        commentAbove: 'Select categories the blog post belongs to'\n        type: collections\n        source: blogCategories\n\n    is_featured:\n        tab: Featured\n        label: Featured Post\n        comment: Check this box to flag this post as special\n        type: checkbox\n\n    featured_text:\n        tab: Featured\n        label: Featured Text\n        type: textarea\n        size: small\n\n    gallery:\n        label: Gallery\n        type: fileupload\n        mode: image\n        span: adaptive\n        tab: Gallery\n\n    gallery_media:\n        label: Media\n        type: mediafinder\n        mode: image\n        span: adaptive\n        tab: Media\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/blog/posts.yaml",
    "content": "uuid: edcd102e-0525-4e4d-b07e-633ae6c18db6\nname: Posts\nhandle: blog\ntype: stream\n\nprimaryNavigation:\n    label: Blog\n    icon: icon-copy\n    order: 95\n\nnavigation:\n    icon: icon-pencil\n    order: 200\n\ngroups:\n    regular_post:\n        name: Regular Post\n        fields:\n            content:\n                tab: Edit\n                label: Content\n                type: richeditor\n                span: adaptive\n\n            blog_post_content:\n                type: mixin\n                source: blogPostContent\n\n    markdown_post:\n        name: Markdown Post\n        fields:\n            content:\n                tab: Edit\n                label: Content\n                type: markdown\n                span: adaptive\n\n            blog_post_content:\n                type: mixin\n                source: blogPostContent\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder/call-to-action.yaml",
    "content": "uuid: 64252bf1-566d-4d47-beee-ff2d890066ec\nname: Call To Action\nhandle: bbCallToAction\ntype: mixin\n\nfields:\n    title:\n        label: Title\n        placeholder: Action example\n        type: text\n\n    description:\n        label: Description\n        placeholder: Something short and leading about the collection below—its contents, the creator, etc. Make it short and sweet, but not too short so folks don’t simply skip over it entirely.\n        type: textarea\n        size: small\n\n    primary_text:\n        label: Primary Text\n        span: auto\n        placeholder: Main call to action\n\n    primary_url:\n        label: Primary URL\n        span: auto\n\n    secondary_text:\n        label: Secondary Text\n        span: auto\n        placeholder: Secondary action\n\n    secondary_url:\n        label: Secondary URL\n        span: auto\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder/carousel.yaml",
    "content": "uuid: 1c0285d4-5c88-4338-92ce-3f9ac8b5020a\nname: Carousel\nhandle: bbCarousel\ntype: mixin\n\nfields:\n    slides:\n        label: Slides\n        type: repeater\n        form:\n            fields:\n                image:\n                    label: Image\n                    type: mediafinder\n                    mode: image\n                    maxItems: 1\n                    span: right\n\n                title:\n                    label: Title\n                    placeholder: Example headline\n                    type: text\n                    span: left\n\n                description:\n                    label: Description\n                    placeholder: Some representative placeholder content for the first slide of the carousel.\n                    type: textarea\n                    size: small\n                    span: left\n\n                align_text:\n                    label: Text Alignment\n                    type: radio\n                    span: full\n                    cssClass: inline-options\n                    options:\n                        left: Left\n                        right: Right\n                        center: Center\n\n                button_text:\n                    label: Button Text\n                    span: auto\n                    placeholder: Coming soon\n\n                button_url:\n                    label: Button URL\n                    span: auto\n                    placeholder: https://\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder/common.yaml",
    "content": "uuid: 4cd99a3b-1589-4e21-90b8-9caca8f35d46\nname: Common Options\nhandle: bbOptions\ntype: mixin\n\nfields:\n    use_container:\n        type: checkbox\n        label: Use Container\n        comment: Wrap this element in a container\n        default: 1\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder/compare-table.yaml",
    "content": "uuid: 0b3e2288-4a82-4cda-a9b2-b345cf086a28\nname: Compare Table\nhandle: bbCompareTable\ntype: mixin\n\nfields:\n    target:\n        label: Link Target\n        type: text\n        span: auto\n    label:\n        label: Button Label\n        type: text\n        span: auto\n    _options:\n        type: mixin\n        source: 4cd99a3b-1589-4e21-90b8-9caca8f35d46"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder/feature-table.yaml",
    "content": "uuid: 579971f9-f6ae-4a64-84ce-f14958c29c1e\nname: Feature Table\nhandle: bbFeatureTable\ntype: mixin\n\nfields:\n    target:\n        label: Link Target\n        type: text\n        span: auto\n    label:\n        label: Button Label\n        type: text\n        span: auto\n    _options:\n        type: mixin\n        source: 4cd99a3b-1589-4e21-90b8-9caca8f35d46"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder/featurette.yaml",
    "content": "uuid: d73c1771-0ab5-4278-9fd0-ed3af944882e\nname: Featurette\nhandle: bbFeaturette\ntype: mixin\n\nfields:\n    features:\n        label: Features\n        type: repeater\n        form:\n            fields:\n                image:\n                    label: Image\n                    type: mediafinder\n                    mode: image\n                    maxItems: 1\n                    span: right\n\n                title:\n                    label: Title\n                    placeholder: First featurette heading. It’ll blow your mind.\n                    type: text\n                    span: left\n\n                description:\n                    label: Description\n                    placeholder: Some great placeholder content for the first featurette here. Imagine some exciting prose here.\n                    type: textarea\n                    size: small\n                    span: left\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder/headline-items.yaml",
    "content": "uuid: 5967a4a3-12b9-462c-bcd2-cf6fcfc68c86\nname: HeadlineItems\nhandle: bbHeadlineItems\ntype: mixin\n\nfields:\n    target:\n        label: Link Target\n        type: text\n        span: auto\n    label:\n        label: Button Label\n        type: text\n        span: auto\n    _options:\n        type: mixin\n        source: 4cd99a3b-1589-4e21-90b8-9caca8f35d46\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder/headline.yaml",
    "content": "uuid: d8f52a6d-b34b-4e43-8e6e-49fb3243c831\nname: Headline\nhandle: bbHeadline\ntype: mixin\n\nfields:\n    title:\n        label: Title\n        placeholder: Punny headline\n        type: text\n\n    description:\n        label: Description\n        placeholder: And an even wittier subheading to boot. Jumpstart your marketing efforts with this example based on Apple’s marketing pages.\n        type: textarea\n        size: small\n\n    button_text:\n        label: Button Text\n        span: auto\n        placeholder: Coming soon\n\n    button_url:\n        label: Button URL\n        span: auto\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder/pricing-table.yaml",
    "content": "uuid: f7074c6c-bbc0-471d-9cf2-bc47e4b97f2a\nname: Pricing Table\nhandle: bbPricingTable\ntype: mixin\n\nfields:\n    target:\n        label: Link Target\n        type: text\n        span: auto\n    label:\n        label: Button Label\n        type: text\n        span: auto\n    _options:\n        type: mixin\n        source: 4cd99a3b-1589-4e21-90b8-9caca8f35d46"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/blockbuilder.yaml",
    "content": "uuid: 7b193500-ac0b-481f-a79c-2a362646364d\nname: Block Builder\nhandle: blockBuilder\ntype: mixin\n\nfields:\n    blocks:\n        label: Blocks\n        type: repeater\n        displayMode: builder\n        span: adaptive\n        tab: Blocks\n        groups:\n            featurette:\n                name: Featurette\n                description: Large list of features with a screenshot\n                icon: icon-diamond\n                fields:\n                    _mixin:\n                        type: mixin\n                        source: bbFeaturette\n\n            headline:\n                name: Big Headline\n                description: Shows a big headline with a link\n                icon: icon-text-h1\n                fields:\n                    _mixin:\n                        type: mixin\n                        source: bbHeadline\n\n            # headline_items:\n            #     name: Headline Items\n            #     description: Usually follows a headline\n            #     icon: icon-quote-right\n            #     fields:\n            #         _mixin:\n            #             type: mixin\n            #             source: bbHeadlineItems\n\n            call_to_action:\n                name: Call To Action\n                description: A block that requests the user do something\n                icon: icon-comment\n                fields:\n                    _mixin:\n                        type: mixin\n                        source: bbCallToAction\n\n            carousel:\n                name: Carousel\n                description: A gallery of images\n                icon: icon-picture\n                fields:\n                    _mixin:\n                        type: mixin\n                        source: bbCarousel\n\n            # feature_table:\n            #     name: Feature Table\n            #     description: Headers with view detail links\n            #     icon: icon-quote-right\n            #     fields:\n            #         _mixin:\n            #             type: mixin\n            #             source: bbFeatureTable\n\n            # pricing_table:\n            #     name: Pricing Table\n            #     description: Display a table of available pricing\n            #     icon: icon-quote-right\n            #     fields:\n            #         _mixin:\n            #             type: mixin\n            #             source: bbPricingTable\n\n            # compare_table:\n            #     name: Compare Table\n            #     description: Compare items in a table\n            #     icon: icon-quote-right\n            #     fields:\n            #         _mixin:\n            #             type: mixin\n            #             source: bbCompareTable\n\n\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/landing/landing-page.yaml",
    "content": "uuid: a63fabaf-7c0b-4c74-b36f-7abf1a3ad1c1\nname: Landing Page\nhandle: landingPage\ntype: single\n\nnavigation:\n    icon: icon-rocket\n\nfields:\n    block_builder:\n        type: mixin\n        source: blockBuilder\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/october-test/collections/basic.yaml",
    "content": "uuid: a69a9c9c-e197-43d6-867d-9dab4be56793\ntype: entry\nname: Basic Collection\nhandle: basicCollection\ndescription: Testing a Collection with Minimum Definition.\n\nnavigation:\n    parent: 03ea35df-c3b6-4a35-b21c-979c9cf372a2\n    icon: icon-futbol-o\n    order: 210\n\nfields:\n    description:\n        label: Description\n        type: textarea\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/october-test/globals/basic.yaml",
    "content": "uuid: 03ea35df-c3b6-4a35-b21c-979c9cf372a2\ntype: entry\nname: Basic Global\nhandle: basicGlobal\ndescription: Testing a Global with Minimum Definition.\n\nprimaryNavigation:\n    label: Playground 2\n    icon: icon-sign-language\n    order: 205\n\nnavigation:\n    icon: icon-futbol-o\n    order: 200\n\nfields:\n    facebook_link:\n        label: Facebook Link\n        type: text\n\n    _include_collection:\n        type: mixin\n        source: 7b193500-ac0b-481f-a79c-2a362646364b\n\n    _include_entry:\n        type: mixin\n        source: 7b193500-ac0b-481f-a79c-2a362646364a\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/october-test/mixins/collection-field.yaml",
    "content": "uuid: 7b193500-ac0b-481f-a79c-2a362646364b\ntype: mixin\nname: Collection Field\nhandle: collectionField\n\nfields:\n    basic_collections:\n        label: Basic Collection\n        type: collections\n        source: a69a9c9c-e197-43d6-867d-9dab4be56793\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/october-test/mixins/entry-field.yaml",
    "content": "uuid: 7b193500-ac0b-481f-a79c-2a362646364a\ntype: mixin\nname: Entry Field\nhandle: entryField\n\nfields:\n    basic_entries:\n        label: Basic Entry\n        type: entries\n        source: e09db3ff-154f-4c48-b25f-a415261308c5\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/october-test/sections/feed-basic.yaml",
    "content": "uuid: e09db3ff-154f-4c48-b25f-a415261308c5\nname: Feed (Basic)\nhandle: feedBasic\ntype: stream\n\nnavigation:\n    parent: 03ea35df-c3b6-4a35-b21c-979c9cf372a2\n    icon: icon-futbol-o\n    order: 210\n\nfields:\n    content:\n        label: Post Content\n        type: richeditor\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/october-test/sections/solo-basic.yaml",
    "content": "uuid: a63fabaf-7c0b-4c74-b36f-7abf1a3ad1c0\nname: Solo (Basic)\nhandle: soloBasic\ntype: single\n\nnavigation:\n    parent: 03ea35df-c3b6-4a35-b21c-979c9cf372a2\n    icon: icon-futbol-o\n    order: 210\n\nfields:\n    welcome_message:\n        label: Welcome Message\n        type: text\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/october-test/sections/tree-basic.yaml",
    "content": "uuid: f9a78eae-fb42-40d3-a8e5-22299da73d0e\nname: Tree (Basic)\nhandle: treeBasic\ntype: structure\n\nnavigation:\n    parent: 03ea35df-c3b6-4a35-b21c-979c9cf372a2\n    icon: icon-futbol-o\n    order: 210\n\nfields:\n    content:\n        label: Article Content\n        type: markdown\n"
  },
  {
    "path": "modules/tailor/tests/fixtures/blueprints/wiki/wiki.yaml",
    "content": "uuid: 339b11b7-69ad-43c4-9be1-6953e7738827\nname: Wiki\nhandle: wiki\ntype: structure\n\nstructure:\n    maxDepth: 3\n\nnavigation:\n    icon: icon-wikipedia-w\n\nfields:\n    content:\n        label: Content\n        tab: Edit\n        type: richeditor\n        span: adaptive\n\n    show_in_toc:\n        label: Show in TOC\n        comment: Include this article in the table of contents\n        type: checkbox\n\n    summary_text:\n        label: Summary Text\n        type: textarea\n        size: small\n\n    gallery:\n        label: Gallery\n        type: fileupload\n        mode: image\n"
  },
  {
    "path": "modules/tailor/traits/BlueprintModel.php",
    "content": "<?php namespace Tailor\\Traits;\n\nuse Tailor\\Models\\EntryRecord;\nuse Tailor\\Models\\GlobalRecord;\nuse Tailor\\Classes\\Fieldset;\nuse Tailor\\Classes\\Blueprint;\nuse Tailor\\Classes\\BlueprintIndexer;\nuse Tailor\\Classes\\Blueprint\\EntryBlueprint;\nuse Tailor\\Classes\\Blueprint\\GlobalBlueprint;\nuse Tailor\\Classes\\Blueprint\\StructureBlueprint;\nuse SystemException;\n\n/**\n * BlueprintModel adds blueprint support to a model\n *\n * Usage:\n *\n * In the model class definition add:\n *\n *   use \\Tailor\\Traits\\BlueprintModel;\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait BlueprintModel\n{\n    /**\n     * @var Blueprint blueprintCache\n     */\n    protected $blueprintCache;\n\n    /**\n     * setBlueprintUuid\n     */\n    public function setBlueprintUuid($value)\n    {\n        $this->blueprint_uuid = $value;\n    }\n\n    /**\n     * getBlueprintDefinition\n     */\n    public function getBlueprintDefinition(): Blueprint\n    {\n        if ($this->blueprintCache !== null) {\n            return $this->blueprintCache;\n        }\n\n        $uuid = $this->blueprint_uuid;\n        if (!$uuid) {\n            throw new SystemException('Missing a blueprint definition in import/export model.');\n        }\n\n        $blueprint = BlueprintIndexer::instance()->find($uuid);\n        if (!$blueprint) {\n            throw new SystemException(sprintf('Unable to find import/export blueprint with ID \"%s\".', $uuid));\n        }\n\n        return $this->blueprintCache = $blueprint;\n    }\n\n    /**\n     * getContentFieldsetDefinition\n     */\n    public function getContentFieldsetDefinition(): Fieldset\n    {\n        $fieldset = BlueprintIndexer::instance()->findContentFieldset($this->blueprint_uuid);\n\n        if (!$fieldset) {\n            throw new SystemException(\"Unable to find content fieldset definition with UUID of '{$this->blueprint_uuid}'.\");\n        }\n\n        return $fieldset;\n    }\n\n    /**\n     * isEntryStructure\n     */\n    public function isEntryStructure(): bool\n    {\n        return $this->getBlueprintDefinition() instanceof StructureBlueprint;\n    }\n\n    /**\n     * resolveBlueprintModel\n     */\n    protected function resolveBlueprintModel()\n    {\n        $blueprint = $this->getBlueprintDefinition();\n\n        if ($blueprint instanceof GlobalBlueprint) {\n            return GlobalRecord::inGlobalUuid($this->blueprint_uuid);\n        }\n\n        if ($blueprint instanceof EntryBlueprint) {\n            return EntryRecord::inSectionUuid($this->blueprint_uuid);\n        }\n\n        throw new SystemException('Unable to find a usable blueprint in import/export model.');\n    }\n}\n"
  },
  {
    "path": "modules/tailor/traits/BlueprintRelationModel.php",
    "content": "<?php namespace Tailor\\Traits;\n\n/**\n * BlueprintRelationModel adds blueprint support for relations\n *\n * Usage:\n *\n * In the model class definition add:\n *\n *   use \\Tailor\\Traits\\BlueprintRelationModel;\n *\n *   public $belongsToMany = [..., 'blueprint' => '6947ff28-b660-47d7-9240-24ca6d58aeae'];\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait BlueprintRelationModel\n{\n    /**\n     * @var array blueprintRelationDefinitions\n     */\n    protected $blueprintRelationDefinitions;\n\n    /**\n     * initializeBlueprintRelationModel trait for the model.\n     */\n    public function initializeBlueprintRelationModel()\n    {\n        $this->bindEvent('model.afterRelation', function ($relationName, $relationModel) {\n            if (isset($this->blueprintRelationDefinitions[$relationName])) {\n                $relationModel->extendWithBlueprint($this->blueprintRelationDefinitions[$relationName]);\n            }\n        });\n\n        $this->defineBlueprintRelationModels();\n    }\n\n    /**\n     * defineBlueprintRelationModels will spin over every relation and check for pivotSortable mode\n     */\n    protected function defineBlueprintRelationModels()\n    {\n        $supportsBlueprints = ['belongsToMany', 'belongsTo', 'hasMany', 'morphedByMany', 'morphToMany'];\n\n        foreach ($supportsBlueprints as $type) {\n            foreach ($this->$type as $name => $definition) {\n                if (!isset($definition['blueprint'])) {\n                    continue;\n                }\n\n                $this->blueprintRelationDefinitions[$name] = $definition['blueprint'];\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/traits/DeferredContentModel.php",
    "content": "<?php namespace Tailor\\Traits;\n\nuse Tailor\\Models\\RepeaterItem;\n\n/**\n * DeferredContentModel modifies deferred binding to support content UUIDs\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait DeferredContentModel\n{\n    /**\n     * bootDeferredContentModel trait for a model.\n     */\n    public function initializeDeferredContentModel()\n    {\n        $this->bindEvent('deferredBinding.newBindInstance', function ($binding) {\n            if ($this instanceof RepeaterItem) {\n                $extraData = ['_contentSpawnPath' => $this->content_spawn_path];\n            }\n            else {\n                $extraData = ['_contentUuid' => $this->blueprint_uuid];\n            }\n\n            $binding->pivot_data = $extraData + $binding->pivot_data;\n        });\n    }\n\n    /**\n     * extendDeferredContentModel\n     */\n    public function extendDeferredContentModel($model)\n    {\n        $pivotData = $model->pivot_data;\n\n        if ($this instanceof RepeaterItem) {\n            $this->extendWithBlueprintSpawn($pivotData['_contentSpawnPath']);\n        }\n        else {\n            $this->extendWithBlueprint($pivotData['_contentUuid']);\n        }\n    }\n}\n"
  },
  {
    "path": "modules/tailor/traits/DraftableModel.php",
    "content": "<?php namespace Tailor\\Traits;\n\nuse Tailor\\Classes\\Scopes\\DraftableScope;\n\n/**\n * DraftableModel trait allows draft versions of models\n *\n * @property int $primary_id\n * @property array $primary_attrs\n * @property \\October\\Rain\\Database\\Model|null $primaryRecord\n * @property \\October\\Rain\\Database\\Collection|null $drafts\n * @method \\October\\Rain\\Database\\Relations\\HasMany drafts()\n * @method \\October\\Rain\\Database\\Relations\\BelongsTo primaryRecord()\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait DraftableModel\n{\n    /**\n     * @var string|null draftableSaveMode for saving the draft.\n     */\n    protected $draftableSaveMode;\n\n    /**\n     * @var array draftableSaveAttrs contains draft notes.\n     */\n    protected $draftableSaveAttrs = [];\n\n    /**\n     * bootDraftableModel trait for a model.\n     */\n    public static function bootDraftableModel()\n    {\n        static::addGlobalScope(new DraftableScope);\n    }\n\n    /**\n     * initializeDraftableModel\n     */\n    public function initializeDraftableModel()\n    {\n        if (!$this->isJsonable('primary_attrs')) {\n            $this->addJsonable('primary_attrs');\n        }\n\n        $this->belongsTo['primaryRecord'] = [\n            static::class,\n            'key' => 'primary_id',\n            'scope' => 'withDrafts',\n            'replicate' => false\n        ];\n\n        $this->hasMany['drafts'] = [\n            static::class,\n            'key' => 'primary_id',\n            'scope' => 'withDrafts',\n            'replicate' => false\n        ];\n\n        $this->bindEvent('model.beforeValidate', function() {\n            if ($this->isDraftStatus()) {\n                $this->removeValidationRule('slug', 'unique_site');\n            }\n        });\n\n        $this->bindEvent('model.afterRelation', function($name, $related) {\n            if (in_array($name, ['drafts', 'primaryRecord'])) {\n                $related->extendWithBlueprint($this->blueprint_uuid);\n            }\n        });\n    }\n\n    /**\n     * getDraftRecords\n     */\n    public function getDraftRecords()\n    {\n        if ($this->primary_id) {\n            return $this->primaryRecord->drafts;\n        }\n        else {\n            return $this->drafts;\n        }\n    }\n\n    /**\n     * getDraftId\n     */\n    public function getDraftId(): string\n    {\n        return $this->getKey();\n    }\n\n    /**\n     * getDraftName\n     */\n    public function getDraftName(): string\n    {\n        $attrs = $this->primary_attrs;\n        return $attrs['name'] ?? '';\n    }\n\n    /**\n     * getDraftNotes\n     */\n    public function getDraftNotes(): string\n    {\n        $attrs = $this->primary_attrs;\n        return $attrs['notes'] ?? '';\n    }\n\n    /**\n     * countDrafts will return the number of available drafts.\n     */\n    public function countDrafts(): int\n    {\n        return $this->drafts()->count();\n    }\n\n    /**\n     * saveAsFirstDraft\n     */\n    public function saveAsFirstDraft(array $attrs = [])\n    {\n        $this->{$this->getDraftModeColumnName()} = DraftableScope::MODE_NEW_UNSAVED;\n\n        $this->primary_attrs = $attrs;\n\n        $this->save(['force' => true]);\n    }\n\n    /**\n     * createNewDraft\n     */\n    public function createNewDraft(array $attrs = [])\n    {\n        $model = $this->replicateWithRelations();\n\n        $model->{$this->getDraftModeColumnName()} = DraftableScope::MODE_DRAFT;\n\n        $model->primary_id = $this->getKey();\n\n        $model->primary_attrs = $attrs;\n\n        $model->save(['force' => true]);\n\n        return $model;\n    }\n\n    /**\n     * setDraftAutosave\n     */\n    public function setDraftAutosave(array $attrs): void\n    {\n        $this->primary_attrs = $attrs;\n    }\n\n    /**\n     * setDraftCommit\n     */\n    public function setDraftCommit(array $attrs): void\n    {\n        // Convert autosave to saved\n        if ($this->getDraftModeColumn() === DraftableScope::MODE_NEW_UNSAVED) {\n            $this->{$this->getDraftModeColumnName()} = DraftableScope::MODE_NEW_SAVED;\n        }\n\n        $this->primary_attrs = $attrs;\n    }\n\n    /**\n     * setDraftPublish\n     */\n    public function setDraftPublish(): void\n    {\n        $this->{$this->getDraftModeColumnName()} = DraftableScope::MODE_PUBLISHED;\n\n        $this->primary_attrs = [];\n    }\n\n    /**\n     * isDraftStatus\n     */\n    public function isDraftStatus(): bool\n    {\n        return $this->getDraftModeColumn() !== DraftableScope::MODE_PUBLISHED;\n    }\n\n    /**\n     * isFirstDraftStatus\n     */\n    public function isFirstDraftStatus(): bool\n    {\n        return in_array($this->getDraftModeColumn(), [\n            DraftableScope::MODE_NEW_SAVED,\n            DraftableScope::MODE_NEW_UNSAVED\n        ]);\n    }\n\n    /**\n     * isUnsavedDraftStatus\n     */\n    public function isUnsavedDraftStatus(): bool\n    {\n        return $this->getDraftModeColumn() === DraftableScope::MODE_NEW_UNSAVED;\n    }\n\n    /**\n     * getDraftModeColumn returns the value of the draft column.\n     */\n    public function getDraftModeColumn(): int\n    {\n        return (int) $this->{$this->getDraftModeColumnName()};\n    }\n\n    /**\n     * getDraftModeColumnName gets the name of the \"draft_mode\" column.\n     */\n    public function getDraftModeColumnName(): string\n    {\n        return 'draft_mode';\n    }\n\n    /**\n     * getQualifiedDraftModeColumnName gets the fully qualified \"draft_mode\" column.\n     */\n    public function getQualifiedDraftModeColumnName(): string\n    {\n        return $this->getTable().'.'.$this->getDraftModeColumnName();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/traits/NestedTreeModel.php",
    "content": "<?php namespace Tailor\\Traits;\n\n/**\n * NestedTreeModel is modified to allow disabling the trait\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait NestedTreeModel\n{\n    use \\October\\Rain\\Database\\Traits\\NestedTree;\n\n    /**\n     * bootNestedTree disables the inherited trait\n     */\n    public static function bootNestedTree()\n    {\n    }\n\n    /**\n     * initializeNestedTree disables the inherited trait\n     */\n    public function initializeNestedTree()\n    {\n    }\n\n    /**\n     * initializeNestedTreeModel constructor\n     */\n    public function initializeNestedTreeModel()\n    {\n        // Define relationships\n        $this->hasMany['children'] = [\n            get_class($this),\n            'key' => $this->getParentColumnName(),\n            'replicate' => false\n        ];\n\n        $this->belongsTo['parent'] = [\n            get_class($this),\n            'key' => $this->getParentColumnName(),\n            'replicate' => false\n        ];\n\n        $this->bindEvent('model.afterRelation', function($name, $related) {\n            if (in_array($name, ['children', 'parent'])) {\n                $related->extendWithBlueprint($this->blueprint_uuid);\n            }\n        });\n\n        // Bind events\n        $this->bindEvent('model.beforeCreate', function () {\n            if (!$this->useNestedTreeStructure()) {\n                return;\n            }\n\n            $this->setDefaultLeftAndRight();\n        });\n\n        $this->bindEvent('model.beforeSave', function () {\n            // This makes the parent column nullable\n            $this->storeNewParent();\n        });\n\n        $this->bindEvent('model.afterSave', function () {\n            if (!$this->useNestedTreeStructure()) {\n                return;\n            }\n\n            $this->moveToNewParent();\n        });\n\n        $this->bindEvent('model.beforeDelete', function () {\n            if (!$this->useNestedTreeStructure()) {\n                return;\n            }\n\n            $this->deleteDescendants();\n        });\n\n        $this->bindEvent('model.beforeRestore', function () {\n            if (!$this->useNestedTreeStructure()) {\n                return;\n            }\n\n            $this->shiftSiblingsForRestore();\n        });\n\n        $this->bindEvent('model.afterRestore', function () {\n            if (!$this->useNestedTreeStructure()) {\n                return;\n            }\n\n            $this->restoreDescendants();\n        });\n    }\n\n    /**\n     * useNestedTreeStructure\n     */\n    public function useNestedTreeStructure(): bool\n    {\n        return true;\n    }\n\n    /**\n     * getParentIdOptionsFromQuery\n     */\n    protected function getParentIdOptionsFromQuery($query)\n    {\n        if (!$this->isEntryStructure()) {\n            return [];\n        }\n\n        $maxDepth = $this->getBlueprintDefinition()->getMaxDepth();\n\n        $query = $query->where($this->getKeyName(), '<>', $this->getKey());\n\n        if ($maxDepth !== 0) {\n            $query->where('nest_depth', '<', $maxDepth - 1);\n        }\n\n        $collection = $query->get()->toNested();\n\n        $buildOptions = function($items) use (&$buildOptions) {\n            $result = [];\n            foreach ($items as $item) {\n                $option = ['label' => $item->title];\n                $children = $item->getChildren();\n                if ($children->count() > 0) {\n                    $option['children'] = $buildOptions($children);\n                }\n                $result[$item->id] = $option;\n            }\n            return $result;\n        };\n\n        $result = ['' => __(\"Top Level\")] + $buildOptions($collection);\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/traits/VersionableModel.php",
    "content": "<?php namespace Tailor\\Traits;\n\nuse Tailor\\Classes\\Scopes\\VersionableScope;\n\n/**\n * VersionableModel trait allows version versions of models\n *\n * @property int $primary_id\n * @property array $primary_attrs\n * @property \\October\\Rain\\Database\\Model|null $primaryRecord\n * @property \\October\\Rain\\Database\\Collection|null $versions\n * @method \\October\\Rain\\Database\\Relations\\HasMany versions()\n * @method \\October\\Rain\\Database\\Relations\\BelongsTo primaryRecord()\n *\n * @package october\\tailor\n * @author Alexey Bobkov, Samuel Georges\n */\ntrait VersionableModel\n{\n    /**\n     * bootVersionableModel trait for a model.\n     */\n    public static function bootVersionableModel()\n    {\n        static::addGlobalScope(new VersionableScope);\n    }\n\n    /**\n     * initializeVersionableModel\n     */\n    public function initializeVersionableModel()\n    {\n        if (!$this->isJsonable('primary_attrs')) {\n            $this->addJsonable('primary_attrs');\n        }\n\n        $this->belongsTo['primaryRecord'] = [\n            static::class,\n            'key' => 'primary_id',\n            'scope' => 'withDrafts',\n            'replicate' => false\n        ];\n\n        $this->hasMany['versions'] = [\n            static::class,\n            'key' => 'primary_id',\n            'replicate' => false\n        ];\n\n        $this->bindEvent('model.afterRelation', function($name, $related) {\n            if (in_array($name, ['versions', 'primaryRecord'])) {\n                $related->extendWithBlueprint($this->blueprint_uuid);\n            }\n        });\n    }\n\n    /**\n     * getVersionRecords\n     */\n    public function getVersionRecords()\n    {\n        if ($this->primary_id) {\n            return $this->primaryRecord->versions;\n        }\n        else {\n            return $this->versions;\n        }\n    }\n\n    /**\n     * getVersionableTransferAttributes override method\n     */\n    protected function getVersionableTransferAttributes()\n    {\n        return [];\n    }\n\n    /**\n     * countVersions will return the number of available versions.\n     */\n    public function countVersions(): int\n    {\n        return $this->versions()->count();\n    }\n\n    /**\n     * saveVersionSnapshot\n     */\n    public function saveVersionSnapshot(array $attrs = [])\n    {\n        $model = $this->newInstance();\n\n        foreach ($this->getVersionableTransferAttributes() as $attr) {\n            $model->$attr = $this->$attr;\n        }\n\n        $model->{$this->getIsVersionColumn()} = true;\n\n        $model->primary_id = $this->getKey();\n\n        $model->primary_attrs = $attrs;\n\n        $model->save(['force' => true]);\n\n        return $model;\n    }\n\n    /**\n     * restoreVersionSnapshot\n     */\n    public function restoreVersionSnapshot($toModel)\n    {\n        $toModel->saveVersionSnapshot();\n\n        foreach ($this->getVersionableTransferAttributes() as $attr) {\n            $toModel->$attr = $this->$attr;\n        }\n\n        $toModel->save(['force' => true]);\n    }\n\n    /**\n     * isVersionStatus\n     */\n    public function isVersionStatus(): bool\n    {\n        return (bool) $this->{$this->getIsVersionColumn()};\n    }\n\n    /**\n     * getIsVersionColumn gets the name of the \"is_version\" column.\n     */\n    public function getIsVersionColumn(): string\n    {\n        return 'is_version';\n    }\n\n    /**\n     * getQualifiedIsVersionColumn gets the fully qualified \"is_version\" column.\n     */\n    public function getQualifiedIsVersionColumn(): string\n    {\n        return $this->getTable().'.'.$this->getIsVersionColumn();\n    }\n}\n"
  },
  {
    "path": "modules/tailor/vuecomponents/BlueprintEditor.php",
    "content": "<?php namespace Tailor\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * BlueprintEditor Vue component\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass BlueprintEditor extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'tailor-editor-component-blueprint-editor';\n\n    /**\n     * @var array require\n     */\n    protected $require = [\n        \\Backend\\VueComponents\\MonacoEditor::class\n    ];\n}\n"
  },
  {
    "path": "modules/tailor/vuecomponents/DraftNotes.php",
    "content": "<?php namespace Tailor\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Tailor draft notes management Vue component.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass DraftNotes extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'tailor-component-draftnotes';\n}\n"
  },
  {
    "path": "modules/tailor/vuecomponents/PublishButton.php",
    "content": "<?php namespace Tailor\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * Tailor entry publish button Vue component.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PublishButton extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'tailor-component-publishbutton';\n}\n"
  },
  {
    "path": "modules/tailor/vuecomponents/PublishingControls.php",
    "content": "<?php namespace Tailor\\VueComponents;\n\nuse Backend\\Classes\\VueComponentBase;\n\n/**\n * PublishingControls for Tailor entry as a Vue component.\n *\n * @package october\\backend\n * @author Alexey Bobkov, Samuel Georges\n */\nclass PublishingControls extends VueComponentBase\n{\n    /**\n     * @var string componentName is the Vue component tag name.\n     */\n    protected $componentName = 'tailor-component-publishingcontrols';\n\n    /**\n     * @var array require\n     */\n    protected $require = [\n        \\Backend\\VueComponents\\Popover::class\n    ];\n}\n"
  },
  {
    "path": "modules/tailor/vuecomponents/blueprinteditor/assets/js/blueprinteditor.js",
    "content": "import { TailorDocumentComponentBase } from '../../../../assets/js/tailor.editor.extension.documentcomponent.base.js';\nimport EditorModelDefinition from '../../../../../backend/vuecomponents/monacoeditor/assets/js/modeldefinition.js';\nimport { modalUtils } from '../../../../../backend/vuecomponents/modal/assets/js/classes/index.js';\n\nexport default {\n    extends: TailorDocumentComponentBase,\n    data: function() {\n        const defMarkup = new EditorModelDefinition(\n            'yaml',\n            this.trans('tailor::lang.blueprint.editor_yaml'),\n            {},\n            'content',\n            'backend-icon-background monaco-document yaml',\n            'blueprint.yaml'\n        );\n\n        return {\n            documentData: {\n            },\n            documentDeletedMessage: this.trans('tailor::lang.blueprint.deleted'),\n            documentTitleProperty: 'fileName',\n            codeEditorModelDefinitions: [defMarkup],\n            defMarkup: defMarkup,\n            autoUpdateNavigatorNodeLabel: false\n        };\n    },\n    computed: {\n        toolbarElements: function computeToolbarElements() {\n            return [\n                {\n                    type: 'button',\n                    icon: 'icon-save-cloud',\n                    label: this.trans('backend::lang.form.save'),\n                    hotkey: 'ctrl+s, cmd+s',\n                    tooltip: this.trans('backend::lang.form.save'),\n                    tooltipHotkey: '⌃S, ⌘S',\n                    command: 'save'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-database-flash',\n                    disabled: this.isNewDocument,\n                    command: 'apply',\n                    hotkey: 'ctrl+enter',\n                    label: this.trans('tailor::lang.blueprint.apply'),\n                    tooltip: this.trans('tailor::lang.blueprint.apply'),\n                    tooltipHotkey: '⌃↵'\n                },\n                {\n                    type: 'separator'\n                },\n                {\n                    type: 'button',\n                    icon: 'icon-delete',\n                    disabled: this.isNewDocument,\n                    command: 'delete',\n                    hotkey: 'shift+option+d',\n                    tooltip: this.trans('backend::lang.form.delete'),\n                    tooltipHotkey: '⇧⌥D'\n                },\n                {\n                    type: 'button',\n                    icon: this.documentHeaderCollapsed ? 'icon-angle-down-arrow' : 'icon-angle-up-arrow',\n                    command: 'document:toggleToolbar',\n                    fixedRight: true,\n                    tooltip: this.trans('editor::lang.common.toggle_document_header')\n                }\n            ];\n        }\n    },\n    methods: {\n        getRootProperties: function() {\n            return ['fileName', 'content'];\n        },\n\n        getMainUiDocumentProperties: function getMainUiDocumentProperties() {\n            return ['fileName', 'content'];\n        },\n\n        updateNavigatorNodeUserData: function updateNavigatorNodeUserData(title) {\n            this.documentNavigatorNode.userData.fileName = this.documentMetadata.fileName;\n            this.documentNavigatorNode.userData.path = this.documentMetadata.navigatorPath;\n        },\n\n        getDocumentSavedMessage: function getDocumentSavedMessage(responseData) {\n            return this.trans('tailor::lang.blueprint.saved');\n        },\n\n        documentLoaded: function documentLoaded(data) {\n            if (this.$refs.editor) {\n                this.$refs.editor.updateValue(this.defMarkup, this.documentData.content);\n                this.$refs.editor.updateLanguage(this.defMarkup, 'yaml');\n                this.$refs.editor.setModelCustomAttribute(this.defMarkup, 'filePath', this.documentData.fileName);\n            }\n            else {\n                this.defMarkup.setModelCustomAttribute('filePath', this.documentData.fileName);\n            }\n        },\n\n        documentSaved: function documentSaved(data, prevData) {\n            if (prevData && prevData.fileName != data.fileName) {\n               this.store.refreshExtensionNavigatorNodes(this.namespace, this.documentType);\n            }\n        },\n\n        documentCreatedOrLoaded: function documentCreatedOrLoaded() {\n            this.defMarkup.setHolderObject(this.documentData);\n        },\n\n        monacoLoaded: function monacoLoaded() {\n            this.$refs.editor.setModelCustomAttribute(this.defMarkup, 'filePath', this.documentData.fileName);\n        },\n\n        applyBlueprint: async function applyBlueprint() {\n            const messageId = oc.snackbar.show(this.trans('tailor::lang.blueprint.migrating'), {\n                timeout: 8000\n            });\n\n            try {\n                await this.saveDocumentAndHandleValidation(true);\n            } catch(error) {\n                oc.snackbar.hide(messageId);\n                return;\n            }\n\n            this.processing = true;\n\n            try {\n                const data = await this.ajaxRequest('onCommand', {\n                    extension: this.namespace,\n                    command: 'onMigrateBlueprint',\n                    documentMetadata: this.documentMetadata,\n                    documentData: this.documentData,\n                });\n\n                this.processing = false;\n                oc.snackbar.show(this.trans('tailor::lang.blueprint.migrated'), { replace: messageId });\n\n                $.oc.mainMenu.reload(data.mainMenu, data.mainMenuLeft, data.sidenavResponsive);\n            } catch (error) {\n                this.processing = false;\n                oc.snackbar.hide(messageId);\n                modalUtils.showAlert(\n                    $.oc.editor.getLangStr('editor::lang.common.error'),\n                    error.responseText\n                );\n            }\n        },\n\n        shouldDisplayDocumentSaveErrorPopup: function shouldDisplayDocumentSaveErrorPopup(error) {\n            if (error.responseJSON && error.responseJSON.blueprintError) {\n                return false;\n            }\n\n            return true;\n        },\n\n        saveDocumentAndHandleValidation: async function saveDocumentAndHandleValidation(noSavedMessage) {\n            try {\n                const data = await this.saveDocument(false, null, null, noSavedMessage);\n                this.$refs.editor.updateDecorations([]);\n\n                // Show warning decorations for duplicate handles/UUIDs\n                if (data.blueprintWarnings && data.blueprintWarnings.length) {\n                    const decorations = data.blueprintWarnings.map(function(warning) {\n                        return {\n                            range: this.$refs.editor.makeRange(warning.line, 1, warning.line, 100),\n                            options: {\n                                isWholeLine: true,\n                                className: 'monaco-warning-line',\n                                glyphMarginClassName: 'monaco-warning-glyph',\n                                hoverMessage: [{ value: warning.message }],\n                                glyphMarginHoverMessage: [{ value: warning.message }]\n                            }\n                        };\n                    }.bind(this));\n                    this.$refs.editor.updateDecorations(decorations);\n                }\n\n                if (data.contentChanged) {\n                    this.processing = true;\n                    try {\n                        const requestData = await this.requestDocumentFromServer({}, true);\n                        this.processing = false;\n                        this.documentCreatedOrLoaded();\n                        this.documentLoaded(requestData);\n                    }\n                    catch (error) {\n                        this.processing = false;\n                        throw error;\n                    }\n                }\n\n                return data;\n            }\n            catch (error) {\n                if (error.responseJSON && error.responseJSON.blueprintError) {\n                    const blueprintError = error.responseJSON.blueprintError;\n\n                    this.$refs.editor.updateDecorations([{\n                        range: this.$refs.editor.makeRange(blueprintError.line, 1, blueprintError.line, 100),\n                        options: {\n                            isWholeLine: true,\n                            className: 'monaco-error-line',\n                            glyphMarginClassName: 'monaco-error-glyph',\n                            hoverMessage: [{ value: blueprintError.message }],\n                            glyphMarginHoverMessage: [{value: blueprintError.message}]\n                        }\n                    }]);\n\n                    this.$refs.editor.editor.revealLineInCenter(blueprintError.line);\n                    this.$refs.editor.editor.setPosition({column: 1, lineNumber: blueprintError.line});\n                }\n\n                throw error;\n            }\n        },\n\n        onBlueprintToolbarCommand: function onBlueprintToolbarCommand(command, isHotkey) {\n            if (command === 'save' && !(isHotkey && !this.canHandleHotkey())) {\n                this.saveDocumentAndHandleValidation().then($.noop, $.noop);;\n                return;\n            }\n\n            this.onToolbarCommand(command, isHotkey);\n\n            if (isHotkey && !this.canHandleHotkey()) {\n                return;\n            }\n\n            if (command === 'apply') {\n                this.applyBlueprint();\n            }\n        }\n    }\n};\n"
  },
  {
    "path": "modules/tailor/vuecomponents/blueprinteditor/partials/_blueprinteditor.php",
    "content": "<backend-document\n    :header-collapsed=\"documentHeaderCollapsed\"\n    :full-screen=\"documentFullScreen\"\n    :loading=\"initializing\"\n    :processing=\"processing\"\n    :error-loading-document=\"errorLoadingDocument\"\n    error-loading-document-header=\"<?= e(trans('tailor::lang.blueprint.error_loading')) ?>\"\n    container-css-class=\"fill-container\"\n>\n    <template v-slot:header>\n        <backend-document-header\n            title-property=\"fileName\"\n            ref=\"documentHeader\"\n            :data=\"documentData\"\n            :disabled=\"processing\"\n        ></backend-document-header>\n    </template>\n\n    <template v-slot:toolbar>\n        <backend-document-toolbar\n            :elements=\"toolbarElements\"\n            @command=\"onBlueprintToolbarCommand\"\n            :disabled=\"processing\"\n        ></backend-document-toolbar>\n    </template>\n\n    <template v-slot:content>\n        <div class=\"flex-layout-column fill-container\">\n            <div class=\"flex-layout-item stretch editor-panel relative\">\n                <backend-monacoeditor\n                    ref=\"editor\"\n                    container-css-class=\"fill-container\"\n                    :model-definitions=\"codeEditorModelDefinitions\"\n                    :glyph-margin=\"true\"\n                >\n                </backend-monacoeditor>\n            </div>\n\n            <editor-component-editorconflictresolver\n                ref=\"conflictResolver\"\n            ></editor-component-editorconflictresolver>\n        </div>\n    </template>\n</backend-document>"
  },
  {
    "path": "modules/tailor/vuecomponents/draftnotes/assets/css/draftnotes.css",
    "content": "div.draftnotes {\n    border-bottom: 1px solid var(--oc-primary-border);\n    background: var(--oc-callout-warning-bg);\n\n    input[type=text] {\n        padding: 10px 20px;\n        border: none;\n        outline: none;\n        background: transparent;\n        width: 100%;\n        display: block;\n        -webkit-appearance: none;\n        appearance: none;\n    }\n}\n"
  },
  {
    "path": "modules/tailor/vuecomponents/draftnotes/assets/js/draftnotes.js",
    "content": "/*\n * Tailor draft notes management Vue component\n */\nexport default {\n    props: {\n        state: Object\n    },\n    data: function() {\n        return {\n        };\n    },\n    computed: {\n        draftName() {\n            let draftNotes = this.state.initial.draftNotes;\n            let initialDraftName = this.state.initial.draftName;\n\n            if (!draftNotes || !draftNotes.length) {\n                if (!initialDraftName || !initialDraftName.length) {\n                    return oc.lang.get('unnamed_draft');\n                }\n\n                return initialDraftName;\n            }\n\n            let parts = draftNotes.split(':');\n            if (parts.length === 1) {\n                let result = draftNotes.substring(0, 30);\n                if (result.length < draftNotes.length) {\n                    result += '...';\n                }\n\n                return result;\n            }\n\n            return parts[0];\n        }\n    },\n    methods: {\n\n    },\n    mounted: function onMounted() {\n    },\n    watch: {\n    }\n};\n"
  },
  {
    "path": "modules/tailor/vuecomponents/draftnotes/partials/_draftnotes.php",
    "content": "<div class=\"draftnotes\">\n    <input type=\"text\" name=\"Draft[notes]\" v-model=\"state.initial.draftNotes\" placeholder=\"<?= __('Draft name: draft notes') ?>\">\n    <input type=\"hidden\" name=\"Draft[name]\" v-bind:value=\"draftName\">\n</div>\n"
  },
  {
    "path": "modules/tailor/vuecomponents/publishbutton/assets/css/publishbutton.css",
    "content": ":root, [data-bs-theme=\"light\"] {\n    --oc-formdocument-select-color: #6a6cf7;\n    --oc-formdocument-select-bg: #e8e8ff;\n}\n\n[data-bs-theme=\"dark\"] {\n    --oc-formdocument-select-color: #e0e0e0;\n    --oc-formdocument-select-bg: #373f47;\n}\n\n.record-management-controls {\n    font-size: 0;\n\n    > div {\n        display: inline-block;\n        margin-right: 10px;\n\n        &:last-child {\n            margin-right: 0;\n        }\n\n        > .record-management-button {\n            margin-right: 0;\n        }\n    }\n\n    .record-management-button {\n        display: inline-block;\n        border: none;\n        background: var(--oc-primary-bg);\n        outline: none;\n        -webkit-appearance: none;\n        font-size: 14px;\n        height: 38px;\n        margin-right: 10px;\n        border-radius: 4px;\n        padding: 0 15px;\n        position: relative;\n        white-space: nowrap;\n\n        &:last-child {\n            margin-right: 0;\n        }\n\n        &[disabled] {\n            cursor: default;\n\n            > i,\n            > span,\n            &:after {\n                opacity: 0.5;\n            }\n        }\n\n        &.has-menu {\n            &:after {\n                font-family: 'octo-icon' !important;\n                speak: none;\n                font-style: normal;\n                font-weight: normal;\n                font-variant: normal;\n                text-transform: none;\n                line-height: 1;\n                -webkit-font-smoothing: antialiased;\n                -moz-osx-font-smoothing: grayscale;\n                content: \"\\e90a\";\n                position: relative;\n                font-size: 16px;\n                vertical-align: middle;\n                margin-left: 3px;\n                margin-right: -4px;\n            }\n        }\n\n        &.record-status-button {\n            padding-left: 35px;\n            border: 1px solid var(--oc-toolbar-border);\n            overflow: hidden;\n\n            span {\n                position: relative;\n            }\n\n            em {\n                color: var(--bs-secondary-color);\n                font-size: 12px;\n                font-style: normal;\n            }\n\n            i {\n                display: block;\n                width: 10px;\n                height: 10px;\n                border-radius: 100%;\n                position: absolute;\n                left: 13px;\n                top: 13px;\n\n                transition: 0.3s width, 0.3s height, 0.3s left, 0.3s top, 0.3s background-color;\n            }\n\n            &.status-published {\n                span, &:after {\n                    color: white;\n                }\n\n                em {\n                    color: rgba(255, 255, 255, 0.7);\n                }\n\n                &:before {\n                    content: '';\n                    display: block;\n                    width: 10px;\n                    height: 10px;\n                    border-radius: 100%;\n                    position: absolute;\n                    left: 13px;\n                    top: 13px;\n                    background: white;\n                    z-index: 1;\n                }\n\n                i {\n                    width: 500px;\n                    height: 500px;\n                    left: -250px;\n                    top: -250px;\n                }\n            }\n\n            &.status-draft {\n                padding-left: 15px;\n\n                i {\n                    width: 500px;\n                    height: 500px;\n                    left: -250px;\n                    top: -250px;\n                }\n\n                span, &:after {\n                    color: white;\n                }\n\n                &:before {\n                    display: none;\n                }\n\n                &.status-initial-draft {\n                    i {\n                        background: #46B3A5!important;\n                    }\n                }\n            }\n        }\n\n        &.entry-type-selector {\n            background: var(--oc-formdocument-select-bg);\n            color: var(--oc-formdocument-select-color);\n        }\n    }\n}\n\n.record-management-controls .record-management-button.record-status-button.status-published,\n.record-management-controls .record-management-button.record-status-button.status-draft {\n    border-color: rgba(255, 255, 255, 0.01);\n}\n\n[data-bs-theme=\"dark\"] {\n    .record-management-controls .record-management-button.record-status-button.status-published,\n    .record-management-controls .record-management-button.record-status-button.status-draft {\n        border-color: rgba(0, 0, 0, 0.6);\n    }\n}\n"
  },
  {
    "path": "modules/tailor/vuecomponents/publishbutton/assets/js/publishbutton.js",
    "content": "/*\n * Tailor entry publish button Vue component\n */\nexport default {\n    props: {\n        state: Object\n    },\n    data: function () {\n        return {\n        };\n    },\n    computed: {\n        currentStatusData() {\n            let statusCode = this.state.initial.statusCode;\n\n            if (this.state.initial.isDraft) {\n                statusCode = 'draft';\n            }\n\n            if (this.state.initial.statusCodeOptions[statusCode]) {\n                return this.state.initial.statusCodeOptions[statusCode];\n            }\n\n            return null;\n        },\n\n        buttonCssClass() {\n            let statusCode = this.state.initial.statusCode;\n            let result = [];\n\n            result.push('status-' + statusCode);\n\n            if (this.state.initial.isFirstDraft) {\n                result.push('status-initial-draft');\n            }\n\n            if (this.state.initial.isDraft) {\n                result.push('status-draft');\n            }\n\n            return result;\n        },\n\n        markerStyle() {\n            let result = {};\n\n            if (this.currentStatusData) {\n                result['background-color'] = this.currentStatusData[1];\n            }\n\n            return result;\n        },\n\n        currentStatusName() {\n            return this.currentStatusData ? this.currentStatusData[0] : 'Unknown';\n        }\n    },\n    methods: {\n        onClick(ev) {\n            this.$emit('click', ev);\n        }\n    },\n    mounted: function onMounted() {\n    },\n    watch: {\n    }\n};\n"
  },
  {
    "path": "modules/tailor/vuecomponents/publishbutton/partials/_publishbutton.php",
    "content": "<button\n    type=\"button\"\n    class=\"record-management-button has-menu record-status-button\"\n    :class=\"buttonCssClass\"\n    @click.prevent=\"onClick($event)\"\n>\n    <i :style=\"markerStyle\"></i>\n    <span><span v-text=\"currentStatusName\"></span> <em v-if=\"state.publishingStateChanged && !state.initial.isDraft\"><?= __('Unsaved') ?></em></span>\n</button>\n"
  },
  {
    "path": "modules/tailor/vuecomponents/publishingcontrols/assets/css/publishingcontrols.css",
    "content": "div.publishing-controls {\n    width: 315px;\n\n    .publishing-controls-popover-body {\n        padding: 15px 20px 0;\n    }\n\n    .enabled-controls {\n        margin-left: -20px;\n        margin-right: -20px;\n        padding: 15px 20px;\n        border-top: 1px solid rgba(149, 165, 166, 0.2);\n    }\n\n    p.publish-notice {\n        margin-bottom: 0;\n        padding-bottom: 15px;\n    }\n\n    .form-group {\n        padding-bottom: 15px;\n    }\n\n    .date-section {\n        margin-bottom: 10px;\n\n        &:last-child {\n            margin-bottom: 0;\n        }\n\n        p {\n            white-space: nowrap;\n            margin-bottom: 0;\n\n            i {\n                position: relative;\n                top: 1px;\n                display: inline-block;\n                margin-right: 6px;\n            }\n\n            span {\n                text-decoration: underline;\n                cursor: pointer;\n            }\n        }\n    }\n\n    .date-section, .slug-section {\n        .label-link {\n            text-decoration: underline;\n            cursor: pointer;\n            float: right;\n            margin-bottom: -20px;\n            position: relative;\n            z-index: 1;\n        }\n\n        .full-slug {\n            display: block;\n            word-wrap: break-word;\n            font-size: 13px;\n            position: relative;\n            margin-bottom: 5px;\n            top: -10px;\n        }\n    }\n\n    a, span {\n        &.js-link {\n            cursor: pointer;\n            color: inherit;\n            text-decoration: underline;\n        }\n    }\n}"
  },
  {
    "path": "modules/tailor/vuecomponents/publishingcontrols/assets/js/domtools.js",
    "content": "class DomTools {\n    form = document;\n    modelName = '';\n\n    setForm(form, modelName) {\n        this.form = form;\n        this.modelName = modelName;\n    }\n\n    makeFieldName(fieldName) {\n        return this.modelName + \"[\" + fieldName + \"]\";\n    }\n\n    findFormField(fieldName) {\n        let elements = this.form.querySelectorAll('[name=\"'+fieldName+'\"]');\n        if (elements.length === 0) {\n            return null;\n        }\n\n        return elements.item(0);\n    }\n\n    findFormGroup(fieldName) {\n        let field = this.findFormField(this.makeFieldName(fieldName));\n        if (field === null) {\n            return null;\n        }\n\n        return $(field).closest('.form-group');\n    }\n\n    static newDomTools() {\n        return new this;\n    }\n}\n\nexport default DomTools;"
  },
  {
    "path": "modules/tailor/vuecomponents/publishingcontrols/assets/js/publishingcontrols.js",
    "content": "import DomTools from './domtools.js';\n\n/*\n * Tailor entry publishing controls Vue component\n */\nexport default {\n    props: {\n        modelName: {\n            type: String,\n            default: \"EntryRecord\"\n        },\n        lang: Object,\n        entryState: Object\n    },\n    data: function () {\n        return {\n            showPublishDate: false,\n            showExpiryDate: false,\n            showFullSlug: false,\n\n            state: {\n                saved: {},\n                current: {}\n            }\n        };\n    },\n    computed: {\n        hasStateChanged() {\n            return JSON.stringify(this.state.saved) != JSON.stringify(this.state.current);\n        },\n\n        isInitialDraft() {\n            return this.entryState.initial.isFirstDraft;\n        },\n\n        isDraft() {\n            return this.entryState.initial.isDraft;\n        },\n\n        isDeleted() {\n            return this.entryState.initial.isDeleted;\n        },\n\n        showTreeControls() {\n            return this.entryState.initial.showTreeControls;\n        },\n\n        fullSlug() {\n            let fullSlug = this.entryState.initial.fullSlug;\n            if (fullSlug === undefined || fullSlug === null) {\n                fullSlug = '';\n            }\n\n            let parts = fullSlug.split('/');\n            let resultArray = parts.slice(0, -1);\n            resultArray.push(this.state.current.slug);\n\n            return resultArray.join('/');\n        }\n    },\n    methods: {\n        show(target) {\n            this.$refs.popover.show(target);\n        },\n\n        hide() {\n            this.$refs.popover.hide();\n        },\n\n        getStateFromDom() {\n            let result = {};\n\n            let enabledFormGroup = this.domTools.findFormGroup('is_enabled');\n            if (enabledFormGroup) {\n                result.enabled = enabledFormGroup.find('input[type=checkbox]').is(':checked');\n            }\n\n            let slugFormGroup = this.domTools.findFormGroup('slug');\n            if (slugFormGroup) {\n                result.slug = slugFormGroup.find('input[type=text]').val().trim();\n            }\n\n            let publishedDateFormGroup = this.domTools.findFormGroup('published_at');\n            let expiryDateFormGroup = this.domTools.findFormGroup('expired_at');\n            if (publishedDateFormGroup && expiryDateFormGroup) {\n                result.publishDate = publishedDateFormGroup.find('input[type=text]').val().trim();\n                result.expiryDate = expiryDateFormGroup.find('input[type=text]').val().trim();\n            }\n\n            if (this.entryState.initial.showTreeControls) {\n                let parentIdFormGroup = this.domTools.findFormGroup('parent_id');\n                if (parentIdFormGroup) {\n                    result.parentId = parentIdFormGroup.find('select').val().trim();\n                }\n            }\n\n            return result;\n        },\n\n        hasDateControls() {\n            return this.domTools.findFormGroup('published_at') &&\n                this.domTools.findFormGroup('expired_at');\n        },\n\n        synchStateFromDom(isInit, ev) {\n            let state = this.getStateFromDom();\n\n            if (isInit) {\n                this.state.saved = $.oc.vueUtils.getCleanObject(state);\n\n                if (this.hasDateControls()) {\n                    this.showPublishDate = this.state.saved.publishDate.length > 0;\n                    this.showExpiryDate = this.state.saved.expiryDate.length > 0;\n                }\n            }\n\n            this.state.current = $.oc.vueUtils.getCleanObject(state);\n        },\n\n        updateSavedState() {\n            this.state.saved = $.oc.vueUtils.getCleanObject(this.getStateFromDom());\n        },\n\n        moveDateControls() {\n            let publishedEl = this.domTools.findFormGroup('published_at');\n            let expiredEl = this.domTools.findFormGroup('expired_at');\n\n            if (expiredEl && publishedEl) {\n                $(this.$refs.publishDate).append(publishedEl);\n                $(this.$refs.expiryDate).append(expiredEl);\n            }\n\n            // Date picker initializes on document.render and triggers the change event\n            // on the inputs. Add change handlers after the date picker finishes initializing.\n            setTimeout(_ => {\n                this.synchStateFromDom(true);\n\n                let slugEl = this.domTools.findFormGroup('slug');\n                if (slugEl) {\n                    slugEl.find('input[type=text]').on('change keyup paste', ev => this.synchStateFromDom(false, ev));\n                }\n\n                if (expiredEl && publishedEl) {\n                    publishedEl.find('input[type=text]').on('change keyup paste', ev => this.synchStateFromDom(false, ev));\n                    expiredEl.find('input[type=text]').on('change keyup paste', _ => this.synchStateFromDom());\n                }\n\n                if (this.entryState.initial.showTreeControls) {\n                    let formGroup = this.domTools.findFormGroup('parent_id');\n                    if (formGroup) {\n                        formGroup.find('select').on('change', _ => this.synchStateFromDom());\n                    }\n                }\n            }, 1)\n        },\n\n        initDomListeners() {\n            this.moveDateControls();\n\n            let formGroup = this.domTools.findFormGroup('is_enabled');\n            if (formGroup) {\n                formGroup.find('input[type=checkbox]').on('change', _ => this.synchStateFromDom());\n            }\n        },\n\n        onRemovePublishDateClick() {\n            this.showPublishDate = false;\n            let formGroup = this.domTools.findFormGroup('published_at');\n            formGroup.find('input[type=text]').val('');\n            formGroup.find('input[type=hidden]').val('');\n            this.synchStateFromDom();\n        },\n\n        onRemoveExpiryDateClick() {\n            this.showExpiryDate = false;\n            let formGroup = this.domTools.findFormGroup('expired_at');\n            formGroup.find('input[type=text]').val('');\n            formGroup.find('input[type=hidden]').val('');\n            this.synchStateFromDom();\n        },\n\n        onShowPublishDateClick() {\n            this.showPublishDate = true;\n            Vue.nextTick(_ => {\n                let formGroup = this.domTools.findFormGroup('published_at');\n                formGroup.find('input[type=text]').trigger('click');\n            });\n        },\n\n        onShowExpiryDateClick() {\n            this.showExpiryDate = true;\n            Vue.nextTick(_ => {\n                let formGroup = this.domTools.findFormGroup('expired_at');\n                formGroup.find('input[type=text]').trigger('click');\n            });\n        },\n\n        onShown() {\n            $(this.$el).find('input[type=text]').first().focus();\n            this.synchStateFromDom();\n        },\n\n        onShowFullSlugClick() {\n            this.showFullSlug = true;\n        }\n    },\n    mounted: function onMounted() {\n        Vue.nextTick(() => {\n            this.domTools = DomTools.newDomTools();\n            this.domTools.setForm(this.$el.closest('form'), this.modelName);\n\n            $(this.$refs.enabled).append(this.domTools.findFormGroup('is_enabled'));\n            $(this.$refs.slug).append(this.domTools.findFormGroup('slug'));\n\n            if (this.entryState.initial.showTreeControls) {\n                $(this.$refs.parentId).append(this.domTools.findFormGroup('parent_id'));\n            }\n\n            this.initDomListeners();\n\n            // Hide publish button when no form fields are available\n            if (!this.$el.querySelector('.form-group')) {\n                this.$el.style.display = 'none';\n                var button = this.$el.parentNode.querySelector('.record-status-button');\n                if (button) {\n                    button.style.display = 'none';\n                }\n            }\n        });\n    },\n    watch: {\n        hasStateChanged(newValue, oldValue) {\n            this.$emit('statechanged', newValue)\n        }\n    }\n};\n"
  },
  {
    "path": "modules/tailor/vuecomponents/publishingcontrols/partials/_publishingcontrols.php",
    "content": "<backend-popover\n    ref=\"popover\"\n    container-css-class=\"publishing-controls\"\n    :always-visible=\"true\"\n    @shown=\"onShown\"\n>\n    <div class=\"publishing-controls-popover-body\">\n        <div ref=\"parentId\"></div>\n        <div class=\"slug-section\">\n            <span class=\"label-link text-muted\" v-if=\"showTreeControls && !showFullSlug\" @click.stop=\"onShowFullSlugClick\"><?= e(__('View full slug')) ?></span>\n            <div ref=\"slug\" class=\"clearfix\"></div>\n            <span class=\"full-slug text-muted\" v-text=\"fullSlug\" v-if=\"showTreeControls && showFullSlug\"></span>\n        </div>\n        <div ref=\"enabled\"></div>\n        <div class=\"clearfix\"></div>\n\n        <p v-if=\"isDraft\" class=\"publish-notice\">\n            <?= e(__('Drafts are not visible on the website until they are applied.')) ?>\n            <span class=\"js-link\" @click=\"$emit('publishdraftclick', $event)\"><?= e(__('Apply this Draft')) ?></span>.\n        </p>\n\n        <p v-if=\"isDeleted\" class=\"publish-notice\">\n            <?= e(__('This record is not visible because it has been deleted.')) ?>\n            <span class=\"js-link\" @click=\"$emit('restorerecordclick', $event)\"><?= e(__('Restore this Record')) ?></span>.\n        </p>\n\n        <div class=\"enabled-controls\" v-show=\"state.current.enabled\">\n            <div class=\"date-section\">\n                <p v-show=\"!showPublishDate\">\n                    <i class=\"icon-calendar-check\"></i>\n                    <span @click=\"onShowPublishDateClick\"><?= e(__('Schedule publish date')) ?></span>\n                </p>\n\n                <span class=\"label-link text-muted\" v-if=\"showPublishDate\" @click.stop=\"onRemovePublishDateClick\"><?= e(__('Remove')) ?></span>\n                <div v-show=\"showPublishDate\" ref=\"publishDate\"></div>\n                <div class=\"clearfix\"></div>\n            </div>\n\n            <div class=\"date-section\">\n                <p v-show=\"!showExpiryDate\">\n                    <i class=\"icon-calendar-disable\"></i>\n                    <span @click=\"onShowExpiryDateClick\"><?= e(__('Set expiry date')) ?></span>\n                </p>\n\n                <span class=\"label-link text-muted\" v-if=\"showExpiryDate\" @click.stop=\"onRemoveExpiryDateClick\"><?= e(__('Remove')) ?></span>\n                <div v-show=\"showExpiryDate\" ref=\"expiryDate\"></div>\n                <div class=\"clearfix\"></div>\n            </div>\n        </div>\n    </div>\n</backend-popover>\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"octobercms\",\n    \"homepage\": \"https://octobercms.com/\",\n    \"description\": \"October CMS is a self-hosted CMS platform based on the Laravel PHP Framework.\",\n    \"scripts\": {\n        \"dev\": \"npm run development\",\n        \"development\": \"mix\",\n        \"watch\": \"mix watch\",\n        \"watch-poll\": \"mix watch -- --watch-options-poll=1000\",\n        \"hot\": \"mix watch --hot\",\n        \"prod\": \"npm run production\",\n        \"production\": \"mix --production\",\n        \"build\": \"npm run production\"\n    },\n    \"devDependencies\": {\n        \"babel-plugin-module-resolver\": \"^4.1.0\",\n        \"laravel-mix\": \"^6.0.39\",\n        \"less\": \"^4.1.2\",\n        \"less-loader\": \"^10.2.0\",\n        \"sass\": \"^1.45.0\",\n        \"sass-loader\": \"^12.1.0\"\n    },\n    \"dependencies\": {\n        \"@phosphor-icons/web\": \"^2.1.2\",\n        \"@popperjs/core\": \"^2.11.7\",\n        \"bluebird\": \"^3.7.2\",\n        \"bootstrap\": \"^5.3.3\",\n        \"bootstrap-icons\": \"^1.10\",\n        \"chart.js\": \"^4.3.2\",\n        \"chartjs-adapter-moment\": \"^1.0.1\",\n        \"dropzone\": \"^6.0.0-beta.2\",\n        \"emmet-monaco-es\": \"^5.3\",\n        \"jquery\": \"^3.6.0\",\n        \"js-cookie\": \"^3.0.1\",\n        \"moment\": \"^2.30.1\",\n        \"moment-timezone\": \"^0.5.46\",\n        \"monaco-editor\": \"^0.46.0\",\n        \"monaco-yaml\": \"^5.1.1\",\n        \"popper.js\": \"^1.16.1\",\n        \"sortablejs\": \"^1.15.0\",\n        \"vue\": \"^2.6.14\",\n        \"vue-router\": \"^3.5.3\"\n    }\n}\n"
  },
  {
    "path": "phpcs.xml",
    "content": "<?xml version=\"1.0\"?>\n<ruleset name=\"October CMS\">\n    <description>The coding standard for October CMS.</description>\n    <rule ref=\"PSR2\">\n        <!--\n        Exceptions to the PSR-2 guidelines as per our Developer Guide:\n        https://octobercms.com/help/guidelines/developer#psr-exceptions\n        -->\n        <exclude name=\"PSR1.Methods.CamelCapsMethodName.NotCamelCaps\" />\n        <exclude name=\"PSR2.ControlStructures.ControlStructureSpacing.SpacingAfterOpenBrace\" />\n        <exclude name=\"Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace\" />\n        <exclude name=\"Squiz.Functions.MultiLineFunctionDeclaration.SpaceAfterFunction\"/>\n        <exclude name=\"Generic.Files.LineLength\"/>\n    </rule>\n\n    <rule ref=\"PSR1.Classes.ClassDeclaration.MissingNamespace\">\n        <!-- Migration files and tests do not need a namespace defined -->\n        <exclude-pattern>*/database/migrations/*\\.php</exclude-pattern>\n    </rule>\n\n    <file>app/</file>\n    <file>config/</file>\n    <file>modules/</file>\n    <file>plugins/october/demo/</file>\n\n    <!-- Ignore vendor files -->\n    <exclude-pattern>*/vendor/*</exclude-pattern>\n\n    <!-- Ignore tests -->\n    <exclude-pattern>*/modules/*/tests/*</exclude-pattern>\n\n    <!-- Ignore views -->\n    <exclude-pattern>*/modules/*/views/*</exclude-pattern>\n\n    <!-- Ignore backend UI -->\n    <exclude-pattern>*/modules/*/elements/*</exclude-pattern>\n\n    <!-- Ignore controllers, layouts -->\n    <exclude-pattern>*/modules/*/layouts/*</exclude-pattern>\n    <exclude-pattern>*/modules/*/controllers/*/*</exclude-pattern>\n\n    <!-- Ignore partial views -->\n    <exclude-pattern>*/modules/**/_*</exclude-pattern>\n</ruleset>\n"
  },
  {
    "path": "phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n         backupStaticAttributes=\"false\"\n         bootstrap=\"modules/system/tests/bootstrap.php\"\n         colors=\"true\"\n         convertErrorsToExceptions=\"true\"\n         convertNoticesToExceptions=\"true\"\n         convertWarningsToExceptions=\"true\"\n         processIsolation=\"false\"\n         stopOnFailure=\"false\"\n>\n    <testsuites>\n        <testsuite name=\"October CMS Test Suite\">\n            <directory>./modules/*/tests</directory>\n        </testsuite>\n    </testsuites>\n\n    <php>\n        <env name=\"APP_ENV\" value=\"testing\" />\n        <env name=\"APP_LOCALE\" value=\"en\" />\n        <env name=\"CACHE_DRIVER\" value=\"array\" />\n        <env name=\"SESSION_DRIVER\" value=\"array\" />\n        <env name=\"ACTIVE_THEME\" value=\"test\" />\n        <env name=\"CONVERT_LINE_ENDINGS\" value=\"true\" />\n        <env name=\"CMS_SAFE_MODE\" value=\"false\" />\n        <env name=\"CMS_ROUTE_CACHE\" value=\"true\" />\n        <env name=\"CMS_TWIG_CACHE\" value=\"false\" />\n        <env name=\"PLUGINS_PATH\" value=\"modules/system/tests/fixtures/plugins\" />\n        <env name=\"THEMES_PATH\" value=\"modules/cms/tests/fixtures/themes\" />\n        <env name=\"ENABLE_CSRF\" value=\"false\" />\n        <env name=\"DB_CONNECTION\" value=\"sqlite\" />\n        <env name=\"DB_DATABASE\" value=\":memory:\" />\n    </php>\n</phpunit>\n"
  },
  {
    "path": "plugins/october/demo/Plugin.php",
    "content": "<?php namespace October\\Demo;\n\nuse System\\Classes\\PluginBase;\n\n/**\n * The plugin.php file (called the plugin initialization script) defines the plugin information class.\n */\nclass Plugin extends PluginBase\n{\n\n    public function pluginDetails()\n    {\n        return [\n            'name' => 'October Demo',\n            'description' => 'Provides features used by the provided demonstration theme.',\n            'author' => 'Alexey Bobkov, Samuel Georges',\n            'icon' => 'icon-leaf'\n        ];\n    }\n\n    public function registerComponents()\n    {\n        return [\n            \\October\\Demo\\Components\\Todo::class => 'demoTodo',\n            \\October\\Demo\\Components\\BackendLink::class => 'backendLink'\n        ];\n    }\n}\n"
  },
  {
    "path": "plugins/october/demo/components/BackendLink.php",
    "content": "<?php namespace October\\Demo\\Components;\n\nuse System;\nuse Backend;\nuse Cms\\Classes\\ComponentBase;\n\n/**\n * BackendLink component\n */\nclass BackendLink extends ComponentBase\n{\n    public function componentDetails()\n    {\n        return [\n            'name' => 'Backend Link',\n            'description' => 'Makes the backend area link available.'\n        ];\n    }\n\n    public function onRun()\n    {\n        $this->page['backendUrl'] = System::checkDebugMode() ? Backend::url('/') : null;\n    }\n}\n"
  },
  {
    "path": "plugins/october/demo/components/Todo.php",
    "content": "<?php namespace October\\Demo\\Components;\n\nuse Cms\\Classes\\ComponentBase;\nuse ApplicationException;\n\n/**\n * Todo component\n */\nclass Todo extends ComponentBase\n{\n    public function componentDetails()\n    {\n        return [\n            'name' => 'To Do List',\n            'description' => 'Implements a simple to-do list.'\n        ];\n    }\n\n    public function defineProperties()\n    {\n        return [\n            'max' => [\n                'description' => 'The most amount of To Do items allowed',\n                'title' => 'Max items',\n                'default' => 10,\n                'type' => 'string',\n                'validationPattern' => '^[0-9]+$',\n                'validationMessage' => 'The Max Items value is required and should be integer.'\n            ],\n            'addDefault' => [\n                'description' => 'Determines if default items must be added to the To Do list',\n                'title' => 'Add default items',\n                'type' => 'checkbox',\n                'default' => 0\n            ]\n        ];\n    }\n\n    public function onRun()\n    {\n        if ($this->property('addDefault')) {\n            $this->page['items'] = ['Learn October CMS'];\n        }\n    }\n\n    public function onAddItem()\n    {\n        $items = post('items', []);\n\n        if (count($items) >= $this->property('max')) {\n            throw new ApplicationException(sprintf('Sorry only %s items are allowed.', $this->property('max')));\n        }\n\n        if (($newItem = post('newItem')) != '') {\n            $items[] = $newItem;\n        }\n\n        $this->page['items'] = $items;\n    }\n}\n"
  },
  {
    "path": "plugins/october/demo/components/todo/default.htm",
    "content": "<form\n    role=\"form\"\n    data-request=\"{{ __SELF__ }}::onAddItem\"\n    data-request-update=\"'{{ __SELF__ }}::list': '#result'\"\n    data-request-success=\"$('#input-item').val('')\"\n    data-request-flash>\n    <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n            <h3 class=\"panel-title\">To Do List</h3>\n        </div>\n        <div class=\"panel-body\">\n            <div class=\"input-group\">\n                <input type=\"text\" id=\"input-item\" class=\"form-control\" value=\"\" name=\"newItem\" placeholder=\"What needs to be done?\">\n                <span class=\"input-group-btn\">\n                    <button type=\"submit\" class=\"btn btn-primary\">Add</button>\n                </span>\n            </div>\n        </div>\n        <ul class=\"list-group\" id=\"result\">\n            {% partial __SELF__ ~ '::list' %}\n        </ul>\n    </div>\n</form>\n"
  },
  {
    "path": "plugins/october/demo/components/todo/list.htm",
    "content": "{% for item in items %}\n    <li class=\"list-group-item\">\n        <input type=\"hidden\" name=\"items[]\" value=\"{{ item }}\" />\n        \n        {{ item }}\n\n        <button type=\"button\" \n            class=\"close pull-right\" \n            aria-hidden=\"true\" \n            onclick=\"$(this).closest('li').remove()\">&times;</button>\n    </li>\n{% endfor %}"
  },
  {
    "path": "plugins/october/demo/composer.json",
    "content": "{\n    \"name\": \"october/demo-plugin\",\n    \"type\": \"october-plugin\",\n    \"description\": \"Demo OctoberCMS plugin\",\n    \"keywords\": [\"october\", \"cms\", \"demo\", \"plugin\"],\n    \"authors\": [\n        {\n            \"name\": \"Alexey Bobkov\",\n            \"email\": \"aleksey.bobkov@gmail.com\",\n            \"role\": \"Co-founder\"\n        },\n        {\n            \"name\": \"Samuel Georges\",\n            \"email\": \"daftspunky@gmail.com\",\n            \"role\": \"Co-founder\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=7.2.9\",\n        \"composer/installers\": \"~1.0\"\n    }\n}\n"
  },
  {
    "path": "plugins/october/demo/updates/version.yaml",
    "content": "1.0.1: First version of Demo"
  },
  {
    "path": "storage/.gitignore",
    "content": "*.sqlite\n"
  },
  {
    "path": "storage/app/.gitignore",
    "content": "*\n!.gitignore\n!media\n!uploads\n!resources\n"
  },
  {
    "path": "storage/app/media/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/app/resources/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/app/uploads/.gitignore",
    "content": "*\n!.gitignore\n!public\n"
  },
  {
    "path": "storage/app/uploads/public/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/cms/.gitignore",
    "content": "*.php\n"
  },
  {
    "path": "storage/cms/cache/.gitignore",
    "content": "*\n!.gitignore"
  },
  {
    "path": "storage/cms/combiner/.gitignore",
    "content": "*\n!.gitignore"
  },
  {
    "path": "storage/cms/twig/.gitignore",
    "content": "*\n!.gitignore"
  },
  {
    "path": "storage/framework/.gitignore",
    "content": "*.php\n"
  },
  {
    "path": "storage/framework/cache/.gitignore",
    "content": "*\n!data/\n!.gitignore\n"
  },
  {
    "path": "storage/framework/sessions/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/views/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/logs/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/temp/.gitignore",
    "content": "*\n!.gitignore\n!public\n"
  },
  {
    "path": "storage/temp/public/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "tests/README.md",
    "content": "# Plugin testing\n\nPlugin unit tests can be performed by running `phpunit` in the base plugin directory.\n\n### Creating plugin tests\n\nPlugins can be tested by creating a file called `phpunit.xml` in the base directory with the following content, for example, in a file **/plugins/acme/blog/phpunit.xml**:\n\n    <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n    <phpunit backupGlobals=\"false\"\n             backupStaticAttributes=\"false\"\n             bootstrap=\"../../../tests/bootstrap.php\"\n             colors=\"true\"\n             convertErrorsToExceptions=\"true\"\n             convertNoticesToExceptions=\"true\"\n             convertWarningsToExceptions=\"true\"\n             processIsolation=\"false\"\n             stopOnFailure=\"false\"\n             syntaxCheck=\"false\"\n    >\n        <testsuites>\n            <testsuite name=\"Plugin Unit Test Suite\">\n                <directory>./tests</directory>\n            </testsuite>\n        </testsuites>\n        <php>\n            <env name=\"APP_ENV\" value=\"testing\"/>\n            <env name=\"CACHE_DRIVER\" value=\"array\"/>\n            <env name=\"SESSION_DRIVER\" value=\"array\"/>\n        </php>\n    </phpunit>\n\nThen a **tests/** directory can be created to contain the test classes. The file structure should mimic the base directory with classes having a `Test` suffix. Using a namespace for the class is also recommended.\n\n    <?php namespace Acme\\Blog\\Tests\\Models;\n\n    use Acme\\Blog\\Models\\Post;\n    use PluginTestCase;\n\n    class PostTest extends PluginTestCase\n    {\n        public function testCreateFirstPost()\n        {\n            $post = Post::create(['title' => 'Hi!']);\n            $this->assertEquals(1, $post->id);\n        }\n    }\n\nThe test class should extend the base class `PluginTestCase` and this is a special class that will set up the October database stored in memory, as part of the `setUp` method. It will also refresh the plugin being tested, along with any of the defined dependencies in the plugin registration file. This is the equivalent of running the following before each test:\n\n    php artisan october:up\n    php artisan plugin:refresh Acme.Blog\n    [php artisan plugin:refresh <dependency>, ...]\n\n> **Note:** If your plugin uses [configuration files](../plugin/settings#file-configuration), then you will need to run `System\\Classes\\PluginManager::instance()->registerAll(true);` in the `setUp` method of your tests. Below is an example of a base test case class that should be used if you need to test your plugin working with other plugins instead of in isolation.\n\n    use System\\Classes\\PluginManager;\n\n    class BaseTestCase extends PluginTestCase\n    {\n        public function setUp(): void\n        {\n            parent::setUp();\n\n            // Get the plugin manager\n            $pluginManager = PluginManager::instance();\n\n            // Register the plugins to make features like file configuration available\n            $pluginManager->registerAll(true);\n\n            // Boot all the plugins to test with dependencies of this plugin\n            $pluginManager->bootAll(true);\n        }\n\n        public function tearDown(): void\n        {\n            parent::tearDown();\n\n            // Get the plugin manager\n            $pluginManager = PluginManager::instance();\n\n            // Ensure that plugins are registered again for the next test\n            $pluginManager->unregisterAll();\n        }\n    }\n\n#### Changing database engine for plugins tests\n\nBy default OctoberCMS uses SQLite stored in memory for the plugin testing environment. If you want to override the default behavior set the `useConfigForTesting` config to `true` in your `/config/database.php` file. When the `APP_ENV` is `testing` and the `useConfigForTesting` is `true` database parameters will be taken from `/config/database.php`.\n\nYou can override the `/config/database.php` file by creating `/config/testing/database.php`. In this case variables from the latter file will be taken.\n\n## System testing\n\nTo perform unit testing on the core October files, you should download a development copy using composer or cloning the git repo. This will ensure you have the `tests/` directory.\n\n### Unit tests\n\nUnit tests can be performed by running `phpunit` in the root directory or inside `/tests/unit`.\n"
  },
  {
    "path": "tests/bootstrap.php",
    "content": "<?php\n\nrequire __DIR__ . '/../modules/system/tests/bootstrap.php';\n"
  },
  {
    "path": "themes/demo/.gitignore",
    "content": "/node_modules\n/vendor\ncomposer.lock\npackage-lock.json\n"
  },
  {
    "path": "themes/demo/README.md",
    "content": "# Demo Theme\n\nOctober CMS demo theme that demonstrates the basic core functionality and utilizes the accompanying demo plugin. It is a great theme to copy when building a site from scratch.\n\nThe theme acts as a reference implementation for default component markup when distributing plugins.\n\nHave fun!\n\n## Combining CSS and JavaScript\n\nThis theme doesn't combine assets for performance reasons. To combine the stylesheets, replace the following lines in the default layout. When combining with this theme, we recommend enabling the config `enable_asset_deep_hashing` in the file **config/cms.php**.\n\nUncombined stylesheets:\n\n```twig\n<link href=\"{{ 'assets/css/vendor.css'|theme }}\" rel=\"stylesheet\">\n<link href=\"{{ 'assets/css/theme.css'|theme }}\" rel=\"stylesheet\">\n```\n\nCombined stylesheets:\n\n```twig\n<link href=\"{{ [\n    '@framework.extras',\n    'assets/css/vendor.css',\n    'assets/css/theme.css'\n]|theme }}\" rel=\"stylesheet\">\n```\n\n> **Note**: October CMS also includes a LESS (`.less`) or SCSS (`.scss`) compiler, if you prefer to use these extensions.\n\nUncombined JavaScript:\n\n```twig\n{% framework extras %}\n<script src=\"{{ 'assets/js/controls/alert-dialog.js'|theme }}\"></script>\n<script src=\"{{ 'assets/js/controls/password-dialog.js'|theme }}\"></script>\n<script src=\"{{ 'assets/js/controls/gallery-slider.js'|theme }}\"></script>\n<script src=\"{{ 'assets/js/controls/card-slider.js'|theme }}\"></script>\n<script src=\"{{ 'assets/js/controls/quantity-input.js'|theme }}\"></script>\n<script src=\"{{ 'assets/js/app.js'|theme }}\"></script>\n```\n\nCombined JavaScript:\n\n```twig\n<script src=\"{{ [\n    '@framework.extras',\n    'assets/js/controls/alert-dialog.js',\n    'assets/js/controls/password-dialog.js',\n    'assets/js/controls/gallery-slider.js',\n    'assets/js/controls/card-slider.js',\n    'assets/js/controls/quantity-input.js',\n    'assets/js/app.js'\n]|theme }}\"></script>\n```\n\n> **Important**: Make sure you keep the `{% styles %}` and `{% scripts %}` placeholder tags as these are used by plugins for injecting assets.\n"
  },
  {
    "path": "themes/demo/assets/css/blocks/hero-image.css",
    "content": ".block-hero-image {\n    background-size: 125%;\n    background-position: 45% 25%;\n    background-repeat: no-repeat;\n    height: 520px;\n    position: relative;\n\n    &:after {\n        content: '';\n        position: absolute;\n        left: 0;\n        bottom: -3px;\n        height: 120px;\n        width: 100%;\n        z-index: 1;\n        background-image: url('../../images/blocks/landing-page-slice.svg');\n        background-repeat: no-repeat;\n        background-position: left bottom;\n        background-size: 100%;\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/blocks/scoreboard-metrics.css",
    "content": ".block-scoreboard-metrics {\n    background: linear-gradient(102.01deg, #eff4fd 0.3%, #f6f2ff 106.31%);\n\n    .metrics {\n        .metric {\n            padding: 60px 0;\n            h3 {\n                font-weight: 700;\n                font-size: 40px;\n                margin-bottom: 5px;\n            }\n\n            text-align: center;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/blocks/team-leaders.css",
    "content": ".block-team-leaders {\n    position: relative;\n\n    .team-leaders {\n        white-space: nowrap;\n\n        .slick-list {\n            padding: 30px;\n            margin-top: -30px;\n            margin-bottom: -30px;\n            margin-left: -30px;\n            margin-right: -30px;\n        }\n\n        .slick-arrow {\n            display: none!important;\n        }\n\n        .team-member-container {\n            padding: 0 15px;\n\n            .team-member {\n                white-space: normal;\n            }\n        }\n\n        .slick-dots {\n            li.slick-active button:before {\n                font-size: 10px;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/controls/card-slider.css",
    "content": ".control-card-slider {\n    position: relative;\n\n    &.type-hero {\n        .slide-item {\n            width: 100%;\n            height: 391px;\n            background-position: center center;\n            background-size: cover;\n            border-radius: 6px;\n        }\n\n        .slick-slide {\n            margin-right: 0rem !important;\n        }\n\n        .slick-dots {\n            position: absolute;\n            bottom: 18px;\n            display: block;\n            li {\n                margin: 0rem;\n            }\n        }\n    }\n\n    &.type-category {\n        margin-left: -.5rem;\n        margin-right: -.5rem;\n\n        .slick-slide {\n            margin-left: .5rem;\n            margin-right: .5rem;\n\n            img {\n                display: inline-block;\n            }\n        }\n\n        .slick-prev,\n        .slick-next {\n            position: absolute;\n            top: 0;\n            left: 97%;\n            padding: 0;\n            transform: translate(0, -50%);\n            cursor: pointer;\n\n            font-size: 18px;\n            height: 32px;\n            width: 32px;\n            display: inline-flex;\n            flex-shrink: 0;\n            justify-content: center;\n            align-items: center;\n            background-color: var(--bs-gray-200);\n            border: 1px solid var(--bs-gray-200);\n            border-radius: 50px;\n            color: var(--bs-gray-500);\n            transition: 0.3s ease-in-out;\n\n            &:before {\n                display: none;\n            }\n\n            &:hover {\n                background-color: var(--bs-primary);\n                border-color: var(--bs-primary);\n                color: var(--bs-white);\n            }\n\n            @media (max-width: 1024px) {\n                left: 94%;\n            }\n            @media (max-width: 390px) {\n                left: 87%;\n            }\n        }\n\n        .slick-prev {\n            margin-top: -38px;\n            margin-left: -40px;\n            &:hover {\n                color: var(--bs-white);\n                outline: none;\n                background: var(--bs-primary);\n            }\n            &:focus {\n                display: none;\n            }\n        }\n\n        .slick-next {\n            margin-top: -38px;\n            &:hover {\n                color: var(--bs-white);\n                outline: none;\n                background: var(--bs-primary);\n            }\n            &:focus {\n                display: none;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/controls/gallery-slider.css",
    "content": ".control-gallery-slider {\n    margin-left: -10px;\n    margin-right: -10px;\n\n    .slick-slide {\n        padding: 10px;\n        outline: none;\n\n        .image-container {\n            a {\n                display: block;\n                overflow: hidden;\n                border-radius: 6px;\n                box-shadow: 0 0 10px rgba(129, 138, 166, 0.21);\n                outline: none;\n\n                img {\n                    max-width: 100%;\n                }\n            }\n        }\n    }\n\n    .slider-nav {\n        .slick-slide.slick-current img {\n            border: 2px solid var(--bs-primary);\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/controls/quantity-input.css",
    "content": ".control-quantity-input {\n    .button-minus,\n    .button-plus {\n        height: 2rem;\n        width: 1.8rem;\n        border-color: var(--bs-gray-200);\n        background-color: transparent;\n        &:hover {\n            background-color: var(--bs-gray-200);\n            border-color: var(--bs-gray-200);\n        }\n    }\n\n    .quantity-field {\n        height: 100%;\n        width: 2.2rem;\n        background: none;\n        min-height: 2rem;\n        text-align: center;\n        border: 1px solid var(--bs-gray-200);\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/buttons.css",
    "content": ".btn:hover, .btn:focus, .btn.focus {\n    text-decoration: none;\n}\n\n.btn {\n    &.btn-pill {\n        border-radius: 100px;\n        padding-left: 25px;\n        padding-right: 25px;\n    }\n\n    &.btn-primary {\n        &:not(:hover):not(:active) {\n            border-color: transparent;\n            background-image: linear-gradient(102.01deg, #5799EB 0.3%, #9F74FB 106.31%);\n        }\n    }\n}\n\n.share-button {\n    display: inline-block;\n\n    .btn {\n        position: relative;\n        padding-left: 47px;\n        padding-right: 25px;\n\n        &:before {\n            content: \"\";\n            position: absolute;\n            left: 17px;\n            top: 12px;\n            width: 14px;\n            height: 14px;\n            background-repeat: no-repeat;\n            background-size: 14px 14px;\n            background-image: url('../../images/icons/icon-share.png');\n        }\n\n        &.btn-sm {\n            padding-left: 37px;\n            padding-right: 15px;\n\n            &:before {\n                left: 12px;\n                top: 7px;\n            }\n        }\n    }\n}\n\n.share-button-popover {\n    padding: 0;\n    margin: -1rem;\n    overflow: hidden;\n    border-radius: 8px;\n\n    .nav-link {\n        padding: 10px 15px;\n\n        color: #343F52;\n        text-decoration: none;\n        > i {\n            margin-right: 5px;\n        }\n\n        &:hover {\n            color: #fff;\n            background: var(--bs-brand-primary);\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/card.css",
    "content": ".card {\n    border-radius: 13px;\n    box-shadow: 0px 0px 22px rgba(0, 0, 0, 0.07);\n    border-color: #EBEBEB;\n    overflow: hidden;\n\n    .card-banner {\n        width: 100%;\n        height: 191px;\n        background-position: center center;\n        background-size: cover;\n\n        &.banner-sm {\n            height: 120px;\n        }\n\n        &.banner-lg {\n            height: 268px;\n        }\n    }\n\n    .card-divider {\n        padding: 1.5rem;\n\n        &:after {\n            content: '';\n            border-bottom: 1px solid #EBEBEB;\n            display: block;\n        }\n    }\n\n    .card-body {\n        padding: 1.5rem;\n\n        &.card-lg {\n            padding-right: 2.5rem;\n            padding-left: 2.5rem;\n        }\n    }\n\n    .card-footer {\n        background-color: #fff;\n        padding: 1rem 1.5rem;\n        border-bottom-left-radius: 13px;\n        border-bottom-right-radius: 13px;\n    }\n\n    .card-title {\n        a {\n            color: #000;\n            text-decoration: none;\n        }\n    }\n\n    .card-links {\n        position: relative;\n        z-index: 2;\n    }\n}\n\n.card-post {\n    &.card-primary {\n        margin-bottom: -25px;\n        position: relative;\n        z-index: 3;\n    }\n\n    .featured-text {\n        p:last-child {\n            margin-bottom: 0;\n        }\n    }\n\n    .share-button {\n        margin-top: -5px;\n    }\n\n    .card-meta {\n        .meta-item {\n            display: inline-block;\n            position: relative;\n            color: #A2A2A2;\n            font-size: 14px;\n        }\n\n        .meta-divider {\n            width: 20px;\n            text-align: center;\n        }\n    }\n}\n\n"
  },
  {
    "path": "themes/demo/assets/css/elements/code.css",
    "content": "pre {\n    padding: 0;\n    background-color: white;\n    border: 1px solid #ECF0F1;\n    border-radius: 6px;\n\n    .CodeMirror {\n        height: auto;\n        color: #2C3E4F;\n    }\n\n    .CodeMirror-gutters {\n        background: transparent;\n        border-right: 1px solid #ECF0F1;\n    }\n\n    .CodeMirror-linenumber {\n        padding-right: 15px;\n        background: white;\n    }\n\n    .CodeMirror-lines {\n        padding: 10px 0;\n    }\n\n    .CodeMirror pre.CodeMirror-line {\n        padding-left: 20px;\n    }\n}\n\n.collapsed-code-block {\n    position: relative;\n\n    .expand-code {\n        display: none;\n    }\n\n    &.collapsed {\n        margin-bottom: 36px;\n\n        > pre {\n            height: 143px;\n            overflow: hidden;\n            position: relative;\n        }\n\n        .expand-code {\n            border-radius: 20px;\n            user-select: none;\n            cursor: pointer;\n            display: block;\n            position: absolute;\n            bottom: -15px;\n            left: 50%;\n            font-size: 14px;\n            background-color: white;\n            border: 1px solid #ECF0F1;\n            z-index: 5;\n            transform: translateX(-50%);\n            padding: 4px 18px;\n            box-shadow: 0 0 0 3px white;\n\n            &:hover {\n                color: white;\n                background-color: #7F8C8D;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/footer.css",
    "content": "/* Extend footer to the entire page */\nbody, .element-footer {\n    background: linear-gradient(97.23deg, #2D8BFF -7.32%, #9F74FB 106.79%);\n}\n\n.element-footer {\n    position: relative;\n    overflow: hidden;\n    min-height: 298px;\n    padding-top: 70px;\n    z-index: 1;\n\n    &:before {\n        content: '';\n        position: absolute;\n        width: 100%;\n        height: 106px;\n        background: url('../../images/waves/footer-wave.svg') repeat-x 0 0;\n        background-repeat: repeat-x;\n        z-index: 1;\n        top: -1px;\n    }\n\n    &.footer-bluezone:before {\n        background: url('../../images/waves/footer-blue-wave.svg') repeat-x 0 0;\n    }\n\n    > .container {\n        position: relative;\n        padding: 30px 0;\n        color: #fff;\n        z-index: 2;\n    }\n\n    /* Decorations */\n    .footer-decoration-1,\n    .footer-decoration-2 {\n        content: '';\n        border-radius: 100%;\n        background-color: #F4F7F8;\n        display: block;\n        position: absolute;\n        z-index: -1;\n    }\n\n    .footer-decoration-1 {\n        width: 524px;\n        height: 524px;\n        left: -42px;\n        top: 120px;\n        opacity: .02;\n    }\n\n    .footer-decoration-2 {\n        width: 524px;\n        height: 524px;\n        right: -150px;\n        top: -160px;\n        opacity: .05;\n    }\n\n    .footer-nav {\n        padding-bottom: 22px;\n\n        .nav {\n            padding-right: 50px;\n\n            .nav-item {\n                font-size: 16px;\n\n                &.nav-item-header > a {\n                    font-weight: 700;\n                }\n\n                > a {\n                    color: #fff;\n                    padding: 4px 0;\n                }\n            }\n        }\n    }\n\n    .footer-brand {\n        padding: 32px 0;\n    }\n\n    .footer-social .nav {\n        .nav-item {\n            &:first-child > a {\n                padding-left: 0;\n            }\n\n            img {\n                height: 28px;\n            }\n        }\n    }\n\n    .footer-copyright {\n        text-align: right;\n        p {\n            margin: 0;\n            padding: 0;\n            line-height: 28px;\n        }\n    }\n\n    @media (max-width: 991px) {\n        padding-left: 20px;\n        padding-right: 20px;\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/form.css",
    "content": "input::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n    appearance: none;\n    margin: 0;\n}\n\n.form-control {\n    border-color: var(--input-border-color);\n    box-shadow: 0px 0px 23px rgba(129, 138, 166, 0.1);\n    border-radius: 0.7rem;\n}\n\n.form-control-search {\n    width: 100%;\n\n    input {\n        padding: 8px 38px 8px 18px;\n        border-radius: 100px;\n    }\n\n    .search-icon {\n        position: absolute;\n        right: 18px;\n        top: 8px;\n        width: 24px;\n        height: 24px;\n        display: block;\n        background-image: url('../../images/icons/icon-search.png');\n        background-size: 24px 24px;\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/how-its-made.css",
    "content": "div.how-its-made {\n    position: fixed;\n    bottom: 50px;\n    width: 800px;\n    max-width: 100%;\n    z-index: 3;\n    padding: 0 30px;\n    margin: 0 0 0 50%;\n    transform: translateX(-50%) scale(1);\n    background-color: transparent;\n    transition: all 0.4s cubic-bezier(.25,-0.59,.35,1.58);\n\n    &.init {\n        opacity: 0;\n        transform: translateX(-50%) scale(0.3);\n    }\n\n    > div {\n        background-color: #FFE297;\n        box-shadow: 14px -8px 52px rgba(129, 138, 166, 0.42);\n        text-align: center;\n        padding: 10px 20px;\n        border-radius: 14px;\n\n        p {\n            margin-bottom: 0;\n\n            a {\n                color: inherit;\n                text-decoration: underline;\n            }\n        }\n    }\n}\n\nhtml[data-turbo-preview] {\n    div.how-its-made {\n        opacity: 0;\n        transform: translateX(-50%) scale(0.3);\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/jumbotron.css",
    "content": "/* Jumbotron */\n.jumbotron {\n    padding-top: var(--jumbotron-padding);\n    padding-bottom: var(--jumbotron-padding);\n    margin-bottom: var(--jumbotron-padding);\n    color: var(--jumbotron-color);\n    background-color: var(--jumbotron-bg);\n\n    h1, .h1 {\n        color: var(--jumbotron-heading-color);\n        position: relative;\n        padding-top: 66px;\n\n        &:before {\n            content: '';\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 46px;\n            height: 46px;\n            background-size: 46px 46px !important;\n        }\n    }\n\n    p {\n        margin-top: 60px;\n        margin-bottom: calc(var(--jumbotron-padding) / 2);\n        font-size: var(--jumbotron-font-size);\n        font-weight: normal;\n    }\n\n    > hr {\n        border-top-color: var(--jumbotron-bg);\n    }\n\n    .container &,\n    .container-fluid & {\n        border-radius: var(--bs-border-radius);\n        padding-left: 15px;\n        padding-right: 15px;\n    }\n\n    @media screen and (min-width: 768px) {\n        & {\n            padding-top: calc(var(--jumbotron-padding) * 1.6);\n            padding-bottom: calc(var(--jumbotron-padding) * 1.6);\n        }\n\n        .container &,\n        .container-fluid & {\n            padding-left: calc(var(--jumbotron-padding) * 2);\n            padding-right: calc(var(--jumbotron-padding) * 2);\n        }\n\n        h1,\n        .h1 {\n            font-size: var(--jumbotron-heading-font-size);\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/lists.css",
    "content": "\nul.bullet-list {\n    &, ul {\n        list-style: none;\n        padding: 0;\n    }\n\n    li {\n        position: relative;\n        padding: 0 0 0 20px;\n        > a {\n            color: #6B7482;\n        }\n        &.active > a {\n            color: #8284F8;\n        }\n    }\n\n    li:before {\n        content: \"\";\n        position: absolute;\n        background-color: #7B61FF;\n        border-radius: 5px;\n        width: 5px;\n        height: 5px;\n        top: 11px;\n        left: 6px;\n    }\n\n    li.collapsible {\n        &:before {\n            display: none;\n        }\n\n        > .collapse-caret {\n            position: absolute;\n            display: block;\n            width: 20px;\n            height: 16px;\n            background-image: url('../../images/icons/icon-collapse.png');\n            background-size: 10px 6px;\n            background-repeat: no-repeat;\n            background-position: center center;\n            top: 6px;\n            left: -1px;\n            &.collapsed {\n                transform: rotate(270deg) translate(0, 0);\n            }\n        }\n    }\n\n    &.list-content {\n        &, ul {\n            padding-left: 10px;\n        }\n\n        a {\n            color: #3097d1;\n            text-decoration: none;\n        }\n\n        a:hover, a:focus {\n            color: #216a94;\n            text-decoration: underline;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/modals.css",
    "content": ".modal-dialog[data-ajax-updating],\n.modal-dialog:not([data-ajax-updating]) + .modal-loading {\n    display: none;\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/nav.css",
    "content": ".nav-line-pills {\n    border-bottom: 1px solid var(--bs-gray-300);\n\n    .nav-item {\n        margin-right: 2rem;\n\n        .nav-link {\n            font-weight: 500;\n            color: var(--bs-gray-600);\n            white-space: nowrap;\n            padding: 16px 0px;\n            margin-bottom: -1px;\n            border-bottom: 2px solid transparent;\n            border-radius: 0px;\n            &.active {\n                color: var(--bs-primary);\n                background-color: transparent;\n                border-bottom: 2px solid var(--bs-primary);\n            }\n            &:hover {\n                color: var(--bs-primary);\n                background-color: transparent;\n                border-bottom: 2px solid var(--bs-primary);\n            }\n        }\n    }\n\n    @media (max-width: 576px) {\n        overflow-x: scroll;\n        flex-wrap: nowrap;\n        overflow-y: hidden;\n        &::-webkit-scrollbar {\n            display: none;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/navbar.css",
    "content": ".navbar {\n    padding-top: 15px;\n    padding-bottom: 15px;\n\n    &.navbar-dark {\n        background-color: transparent;\n    }\n\n    .navbar-brand {\n        margin-top: -5px;\n    }\n\n    a:hover, a:focus, a.focus {\n        text-decoration: none;\n    }\n\n    .dropdown-item.active, .dropdown-item:active {\n        background-color: #6bc48d;\n    }\n}\n\n@media screen and (min-width: 992px) {\n    .navbar {\n        .navbar-nav > li.nav-item {\n            padding: 0 8px;\n\n            > a.btn {\n                padding: 3px 22px;\n                border-radius: 100px;\n                font-size: 14px;\n                margin-top: 7px;\n            }\n\n            > a.nav-link {\n                position: relative;\n                transition: color 0.2s ease 0.05s;\n                color: #fff;\n\n                &:before {\n                    position: absolute;\n                    height: 4px;\n                    bottom: 2px;\n                    content: '';\n                    border-radius: 4px;\n                    z-index: 5;\n                    width: 20px;\n                    left: 50%;\n                    transform: translateX(-50%);\n                    transition: all 0.2s ease 0.05s;\n                }\n\n                &.active:before,\n                &.active:hover:before {\n                    background: #fff;\n                }\n\n                &:hover:before {\n                    background: #fff;\n                }\n            }\n        }\n    }\n}\n\n/* Mobile Nav */\n.navbar-mobile {\n    display: none;\n}\n\n@media (max-width: 991px) {\n    .navbar-mobile {\n        display: block;\n\n        .navbar-collapse {\n            background: #2d3134;\n            position: fixed;\n            z-index: 10001;\n            right: -260px;\n            top: 0;\n            bottom: 0;\n            width: 260px;\n            padding: 20px;\n            height: 100% !important;\n            box-sizing: border-box;\n            overflow-x: hidden;\n            overflow-y: auto;\n            text-align: left;\n            backface-visibility: hidden;\n            transform: translate3d(0, 0, 0);\n            transform-origin: 0 10%;\n            transform: perspective(1000px) scale(1.3);\n            transition: all 0.4s 0s ease-in;\n\n            &.collapsing {\n                transition-duration: 0.1s;\n            }\n\n            &.show {\n                transition: all 0.3s 0s ease-out;\n                transform: perspective(1000px) scale(1) translate3d(-260px, 0, 0);\n            }\n        }\n\n        .navbar-toggler {\n            color: #fff;\n            padding: 10px;\n            opacity: .8;\n\n            &:hover, &:focus {\n                opacity: 1;\n            }\n        }\n\n        .nav-item {\n            .nav-link {\n                color: #e0e0e0;\n                &:hover {\n                    color: #fff;\n                }\n            }\n            .btn {\n                margin-top: 1rem;\n                margin-left: 1rem;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/pagination.css",
    "content": "/* Base Styles */\n.pagination {\n    display: flex;\n    padding-left: 0;\n    list-style: none;\n\n    > .page-item {\n        > .page-link {\n            margin-left: -1px;\n            padding: 5px 15px;\n            color: #666666;\n            background-color: #FFFFFF;\n            border: 1px solid #EBEBEB;\n            text-decoration: none;\n\n            &:hover {\n                background-color: #f0f0f0;\n            }\n        }\n\n        &.active > .page-link {\n            color: #000000;\n            font-weight: bold;\n\n            &:hover {\n                background-color: #FFFFFF;\n            }\n        }\n\n        &.disabled > .page-link {\n            color: #A1A1A1;\n\n            &:hover {\n                background-color: #FFFFFF;\n            }\n        }\n    }\n}\n\n/* Custom Styles */\n.blog-pagination {\n    display: inline-block;\n    .oc-pagination {\n        box-shadow: 0px 0px 22px rgba(0, 0, 0, 0.07);\n    }\n}\n\nul.pagination {\n    > li.page-item > .page-link {\n        padding: 8px 15px;\n        color: #A1A1A1;\n        background: #fff;\n        border-color: #EBEBEB;\n        text-decoration: none;\n\n        &:focus {\n            box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n        }\n    }\n\n    > li.page-item {\n        &.active > .page-link {\n            font-weight: 700;\n            color: #343F52;\n            background: #fff;\n        }\n\n        &.first, &.last {\n            > .page-link {\n                position: relative;\n                color: #fff;\n                width: 44px;\n\n                &:before {\n                    content: '';\n                    display: block;\n                    width: 15px;\n                    height: 12.5px;\n                    background: url('../../images/icons/icon-pagination-arrow.png') no-repeat 0 0;\n                    background-size: 15px 12.5px;\n                    position: absolute;\n                    top: 16px;\n                    left: 14px;\n                }\n            }\n\n            &.disabled > .page-link:before {\n                opacity: .5;\n            }\n        }\n\n        &.first {\n            > .page-link {\n                border-bottom-left-radius: 0.25rem;\n                border-top-left-radius: 0.25rem;\n            }\n\n            > .page-link:before {\n                transform: scaleX(-1);\n            }\n        }\n\n        &.last {\n            > .page-link {\n                border-bottom-right-radius: 0.25rem;\n                border-top-right-radius: 0.25rem;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/popover.css",
    "content": ".popover {\n    border: none;\n    box-shadow: 0px 0px 22px rgba(0, 0, 0, 0.1);\n    border-radius: 8px;\n\n    .popover-arrow {\n        display: none;\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/social-links.css",
    "content": ".element-social-links {\n    .nav {\n        .nav-item {\n            &:first-child > a {\n                padding-left: 0;\n            }\n\n            > a {\n                padding-right: 8px;\n                padding-left: 8px;\n            }\n\n            img {\n                height: 20px;\n            }\n\n            i {\n                position: relative;\n                top: 2px;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/text.css",
    "content": ".text-muted {\n    color: #A2A2A2;\n}\n\n.text-icon {\n    position: relative;\n    display: inline-block;\n    padding-left: 24px;\n    line-height: 16px;\n\n    &:before {\n        content: \"\";\n        position: absolute;\n        left: 0px;\n        top: -1px;\n        width: 16px;\n        height: 16px;\n        background-repeat: no-repeat;\n        background-size: 16px 16px;\n    }\n\n    &.text-icon-date {\n        &:before {\n            background-image: url('../../images/icons/icon-calendar.png');\n        }\n    }\n\n    &.text-icon-author {\n        &:before {\n            background-image: url('../../images/icons/icon-user.png');\n        }\n    }\n}\n\n.text-banner {\n    border-radius: 13px;\n    width: 100%;\n    height: 191px;\n    background-position: center center;\n    background-size: cover;\n\n    &.banner-lg {\n        height: 268px;\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/elements/user-panel.css",
    "content": ".element-user-panel {\n    .user-avatar {\n        padding: 0 25px 20px 0;\n\n        img {\n            width: 85px;\n            height: 85px;\n            border-radius: 100px;\n        }\n    }\n\n    .user-details {\n        padding: 15px 0 0 0;\n\n        p {\n            color: #A1A1A1;\n        }\n\n        p:last-child {\n            margin-bottom: 0;\n        }\n    }\n\n    .user-profile {\n        color: #6B7482;\n\n        p:last-child {\n            margin-bottom: 0;\n        }\n    }\n\n    &.team-panel {\n        .user-avatar {\n            padding-bottom: 0;\n        }\n\n        .user-social {\n            padding-bottom: 15px;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/layouts/blog.css",
    "content": "/* Blog Layout StyleSheet */\nbody.layout-blog {\n    .sidebar-search {\n        padding-bottom: 40px;\n    }\n\n    .sidebar-about {\n        font-size: 16px;\n        padding-bottom: 20px;\n\n        p:last-child {\n            margin-bottom: 0;\n        }\n    }\n\n    .sidebar-social {\n        padding-bottom: 20px;\n    }\n\n    .sidebar-categories {\n        padding-bottom: 20px;\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/layouts/default.css",
    "content": "/* Default Layout (All pages) */\n#layout-header {\n    &, &.navbar {\n        background: linear-gradient(102.01deg, #DB6A26 0.3%, #DBB326 106.31%);\n    }\n\n    .header-extra {\n        color: #fff;\n        padding-top: 40px;\n        padding-bottom: 50px;\n\n        h1 {\n            font-size: 60px;\n        }\n        p.lead {\n            font-size: 22px;\n        }\n    }\n}\n\n#layout-header .navbar {\n    min-height: 155px;\n\n    > .navbar-container.container {\n        position: relative;\n        z-index: 2;\n    }\n}\n\n#layout-nav-decorations {\n    position: absolute;\n    z-index: 1;\n    top: 0;\n    left: 0;\n    right: 0;\n    overflow: hidden;\n    height: 150px;\n\n    /* Decorations */\n    .navbar-decorations {\n        position: absolute;\n        z-index: 1;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n    }\n\n    .navbar-decoration-1,\n    .navbar-decoration-2 {\n        content: '';\n        border-radius: 100%;\n        background-color: #F4F7F8;\n        display: block;\n        position: absolute;\n        z-index: -1;\n    }\n\n    .navbar-decoration-1 {\n        width: 524px;\n        height: 524px;\n        left: -105px;\n        top: -420px;\n        opacity: .04;\n    }\n\n    .navbar-decoration-2 {\n        width: 524px;\n        height: 524px;\n        left: 548px;\n        top: -385px;\n        opacity: .05;\n    }\n}\n\n#layout-content {\n    padding-top: 30px;\n    background: #fff;\n\n    header {\n        padding: 0 0 30px 0;\n    }\n\n    main.header-flush {\n        margin-top: -30px;\n    }\n}\n\nul.list-with-ticks {\n    padding: 0;\n\n    li {\n        list-style: none;\n        position: relative;\n        padding-left: 23px;\n\n        &:before {\n            content: '';\n            display: block;\n            width: 15px;\n            height: 15px;\n            background: url('../../images/icons/icon-tick.png') no-repeat 0 0;\n            background-size: 15px 15px;\n            position: absolute;\n            left: 0;\n            top: 6px;\n        }\n    }\n}\n\n@keyframes fadeIn {\n    0% {\n        opacity: 0;\n    }\n\n    100% {\n        opacity: 1;\n    }\n}\n\nhtml[data-turbo-preview] .fade-in-content {\n    opacity: 0;\n}\n\nhtml:not([data-turbo-preview]) .fade-in-content {\n    animation: fadeIn 0.15s ease-in-out;\n}\n"
  },
  {
    "path": "themes/demo/assets/css/layouts/home.css",
    "content": "/* Home Layout Stylesheet */\nbody.layout-home {\n    #layout-nav.navbar {\n        padding-top: 30px;\n        padding-bottom: 30px;\n\n        /* Fixed top */\n        position: absolute;\n        left: 0;\n        right: 0;\n        top: 0;\n        z-index: 1030;\n    }\n\n    #layout-content {\n        padding-top: 0;\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/layouts/wiki.css",
    "content": "/* Wiki Layout Stylesheet */\nbody.layout-wiki {\n    .sidebar-search {\n        padding-bottom: 40px;\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/pages/404.css",
    "content": ".page-404 {\n    .banner-404 {\n        padding: 40px 0;\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/pages/ajax.css",
    "content": ".page-ajax {\n    /* Calculator form */\n    .panel {\n        border: none;\n        overflow: hidden;\n        box-shadow: 0 0 20px rgba(0, 0, 0, 0.16);\n        margin-bottom: 27px;\n        border-radius: 4px;\n\n        @media (min-width: 992px) {\n            .control-panel {\n                padding-right: 0!important;\n            }\n        }\n    }\n\n    .panel-body {\n        padding: 25px;\n        display: table;\n        width: 100%;\n\n        form {\n            display: table-row;\n\n            .form-group {\n                display: table-cell;\n                vertical-align: top;\n                padding-right: 10px;\n                margin-bottom: 15px;\n                white-space: nowrap;\n\n                &:last-child {\n                    padding-right: 0;\n                    width: 41px;\n\n                    button {\n                        width: 41px;\n                        height: 41px;\n                        background: var(--bs-brand-accent);\n                    }\n                }\n\n                &.operation-buttons {\n                    width: 100px;\n                    text-align: center;\n\n                    label {\n                        display: inline-block;\n                        cursor: pointer;\n                        width: 41px;\n                        height: 41px;\n                        line-height: 41px;\n                        position: relative;\n                        margin: 0 10px 0 0;\n                        vertical-align: top;\n                        text-align: center;\n\n                        &:last-child {\n                            margin-right: 0;\n                        }\n\n                        span {\n                            display: block;\n                            position: absolute;\n                            width: 100%;\n                            height: 100%;\n                            border-radius: var(--bs-border-radius);\n                            background: #ECF0F1;\n                        }\n\n                        input {\n                            display: none;\n\n                            &:checked + span {\n                                background-color: var(--bs-brand-accent);\n                                color: white;\n                            }\n                        }\n                    }\n                }\n            }\n\n            @media (max-width: 767px) {\n                .form-group {\n                    display: block;\n                    padding-right: 0;\n                    width: 100%!important;\n\n                    &:last-child button {\n                        width: 100%;\n                    }\n                }\n            }\n        }\n\n        input.form-control {\n            border: none;\n            display: block;\n            width: 100%;\n            background-color: #ECF0F1;\n            font-size: 14px;\n            text-align: right;\n            border: none;\n            box-shadow: none;\n            height: 41px;\n        }\n    }\n\n    #result {\n        background: var(--bs-brand-accent);\n        color: white;\n        font-size: 54px;\n        padding: 0 15px;\n\n        font-weight: bold;\n        text-align: center;\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n\n    .explanation {\n        background: #f6f2ff;\n        padding: 50px 0 70px;\n        position: relative;\n        overflow: hidden;\n        z-index: 1;\n\n        > .container {\n            position: relative;\n        }\n\n        h3 {\n            font-size: 26px;\n            margin: 60px 0 20px;\n        }\n\n        /* Decorations */\n        .explanation-decoration-1,\n        .explanation-decoration-2 {\n            content: '';\n            border-radius: 100%;\n            background-color: #F4F7F8;\n            display: block;\n            position: absolute;\n            z-index: -1;\n        }\n\n        .explanation-decoration-1 {\n            background-color: #fff;\n            width: 321px;\n            height: 321px;\n            left: -140px;\n            top: -140px;\n            opacity: .5;\n        }\n\n        .explanation-decoration-2 {\n            background-color: #fff;\n            width: 380px;\n            height: 380px;\n            right: -165px;\n            top: -180px;\n            opacity: .5;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/pages/components.css",
    "content": ".page-components {\n    /* TODO list */\n    .panel {\n        margin-bottom: 27px;\n        background-color: #fff;\n    }\n\n    .panel.panel-default {\n        border: 2px solid var(--bs-brand-accent);\n        overflow: hidden;\n        margin-top: 40px;\n        border-radius: 9px;\n        box-shadow: 0 0 20px rgba(0, 0, 0, 0.16);\n\n        .panel-heading {\n            background: transparent;\n            padding: 15px;\n            border-bottom: 1px solid #ddd;\n            color: #333333;\n\n            h3 {\n                position: relative;\n                padding-left: 32px;\n                margin-top: 0;\n                margin-bottom: 0;\n                font-size: 18px;\n\n                &:before {\n                    content: '';\n                    position: absolute;\n                    top: -1px;\n                    left: 0;\n                    width: 24px;\n                    height: 24px;\n                    background: url('../../images/icons/icon-todo.png') no-repeat 0 0;\n                    background-size: 24px 24px !important;\n                }\n            }\n        }\n\n        .panel-body {\n            padding: 0;\n\n            input.form-control {\n                border: none;\n                padding-left: 17px;\n                box-shadow: none;\n            }\n\n            input.form-control, button.btn {\n                height: 41px;\n            }\n\n            .input-group-btn {\n                margin-left: 0 !important;\n            }\n\n            button.btn.btn-primary {\n                background: transparent;\n                border: none;\n                outline: none;\n                box-shadow: none;\n                color: var(--bs-body-color);\n                padding-left: 20px;\n                padding-right: 45px;\n\n                &:before {\n                    content: '';\n                    position: absolute;\n                    top: 9px;\n                    right: 9px;\n                    width: 23px;\n                    height: 23px;\n                    background: url('../../images/icons/icon-keyboard-return.png') no-repeat 0 0;\n                    background-size: 23px 23px !important;\n                }\n            }\n        }\n\n        .list-group {\n            border-radius: 0;\n            li {\n                padding: 10px 15px 10px 37px;\n                position: relative;\n                border-left: none;\n                border-right: none;\n\n                &:last-child {\n                    border-bottom: none;\n                }\n\n                button {\n                    /* Text hide */\n                    font: 0/0 a;\n                    color: transparent;\n                    text-shadow: none;\n                    background-color: transparent;\n                    border: 0;\n\n                    position: absolute;\n                    left: 15px;\n                    top: 16px;\n                    width: 15px;\n                    height: 15px;\n                    opacity: 1;\n                    outline: none!important;\n                    border: 1px solid #BDC3C7;\n                    border-radius: 100%;\n                }\n            }\n        }\n    }\n\n    .explanation {\n        background: #f6f2ff;\n        padding: 90px 0 70px;\n        position: relative;\n        overflow: hidden;\n        z-index: 1;\n\n        > .container {\n            position: relative;\n        }\n\n        h3 {\n            font-size: 26px;\n            margin-bottom: 45px;\n        }\n\n        p.lead {\n            font-weight: 400;\n            font-size: 20px;\n            margin-bottom: 40px;\n        }\n\n        /* Decorations */\n        .explanation-decoration-1,\n        .explanation-decoration-2 {\n            content: '';\n            border-radius: 100%;\n            background-color: #F4F7F8;\n            display: block;\n            position: absolute;\n            z-index: -1;\n        }\n\n        .explanation-decoration-1 {\n            background-color: #fff;\n            width: 321px;\n            height: 321px;\n            left: -140px;\n            top: -140px;\n            opacity: .5;\n        }\n\n        .explanation-decoration-2 {\n            background-color: #fff;\n            width: 380px;\n            height: 380px;\n            right: -165px;\n            top: -180px;\n            opacity: .5;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/pages/contact.css",
    "content": ".page-contact {\n    .contactform {\n        text-align: center;\n        background: #f6f2ff;\n        padding: 70px 0;\n        position: relative;\n        overflow: hidden;\n        z-index: 1;\n\n        > .container {\n            position: relative;\n        }\n\n        h3 {\n            font-weight: 700;\n            font-size: 26px;\n            margin-bottom: 45px;\n        }\n\n        p.lead {\n            font-weight: 400;\n            font-size: 20px;\n            margin-bottom: 40px;\n        }\n\n        /* Decorations */\n        .contactform-decoration-1,\n        .contactform-decoration-2 {\n            content: '';\n            border-radius: 100%;\n            background-color: #F4F7F8;\n            display: block;\n            position: absolute;\n            z-index: -1;\n        }\n\n        .contactform-decoration-1 {\n            background-color: #fff;\n            width: 321px;\n            height: 321px;\n            left: -140px;\n            top: -140px;\n            opacity: .5;\n        }\n\n        .contactform-decoration-2 {\n            background-color: #fff;\n            width: 380px;\n            height: 380px;\n            right: -165px;\n            top: -180px;\n            opacity: .5;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/pages/index.css",
    "content": ".page-index {\n    .jumbotron {\n        background: linear-gradient(102.01deg, #DB6A26 0.3%, #DBB326 106.31%);\n        padding-bottom: 0;\n        position: relative;\n        overflow: hidden;\n        z-index: 1;\n\n        &:before {\n            content: '';\n            position: absolute;\n            width: 100%;\n            height: 186px;\n            background-image: url('../../images/waves/header-wave.svg');\n            background-repeat: repeat-x;\n            z-index: 1;\n            bottom: -1px;\n        }\n\n        > .container {\n            position: relative;\n            z-index: 2;\n        }\n\n        /* Decorations */\n        .jumbotron-decoration-1,\n        .jumbotron-decoration-2 {\n            content: '';\n            border-radius: 100%;\n            background-color: #F4F7F8;\n            display: block;\n            position: absolute;\n            z-index: -1;\n        }\n\n        .jumbotron-decoration-1 {\n            width: 524px;\n            height: 524px;\n            left: -10px;\n            top: -84px;\n            opacity: .04;\n        }\n\n        .jumbotron-decoration-2 {\n            width: 524px;\n            height: 524px;\n            left: 648px;\n            top: 260px;\n            opacity: .05;\n        }\n\n        .jumbotron-intro {\n            padding: 70px 100px;\n            h1 {\n                color: #fff;\n                font-weight: 700;\n            }\n            p {\n                color: #fff;\n                margin-top: 30px;\n            }\n            .btn {\n                &:not(:hover):not(:active) {\n                    border-color: transparent;\n                    background: rgba(255, 216, 170, 0.46);\n                }\n            }\n        }\n\n        .jumbotron-product {\n            padding: 90px 0 35px 0;\n            margin-right: -40px;\n            margin-left: -100px;\n\n            img {\n                position: relative;\n                z-index: 2;\n            }\n        }\n\n        @media (max-width: 1399px) {\n            .jumbotron-intro {\n                h1 { font-size: 45px; }\n            }\n        }\n\n        @media (max-width: 1199px) {\n            .jumbotron-intro {\n                padding-left: 0;\n                h1 { font-size: 45px; }\n            }\n        }\n\n        @media (max-width: 991px) {\n            .jumbotron-intro {\n                padding: 20px 0 0;\n                h1 { font-size: 35px; }\n            }\n            .jumbotron-product {\n                padding-top: 20px;\n            }\n        }\n    }\n\n    .intro {\n        background-image: url('../../images/homepage/about-page.png');\n        background-repeat: no-repeat;\n        background-position: bottom center;\n        background-size: 1427px auto;\n        padding: 25px 0 568px;\n        text-align: center;\n\n        .img-leaf {\n            width: 49px;\n            margin: 35px 0;\n        }\n\n        h2 {\n            font-weight: 700;\n            font-size: 40px;\n            margin: 0;\n            padding-bottom: 40px;\n        }\n\n        p.lead {\n            max-width: 850px;\n            margin: 0 auto;\n            display: block;\n            font-weight: 400;\n            font-size: 20px;\n        }\n    }\n\n    .feature {\n        .feature-content {\n            padding: 50px 0 0;\n        }\n\n        .feature-pill {\n            display: inline-block;\n            background: #FFE9B4;\n            border-radius: 100px;\n            padding: 3px 20px;\n            > span {\n                opacity: 0.45;\n                color: #000;\n                font-weight: 400;\n                font-size: 16px;\n                line-height: 28px;\n            }\n        }\n\n        .feature-image {\n            padding: 0 20px;\n        }\n\n        h3 {\n            font-weight: 700;\n            font-size: 26px;\n            margin-bottom: 30px;\n        }\n\n        p {\n            line-height: 28px;\n            margin-bottom: 30px;\n        }\n\n        @media (max-width: 1199px) {\n            .feature-content {\n                padding-top: 0;\n                padding-bottom: 50px;\n            }\n        }\n\n        @media (max-width: 991px) {\n            .feature-image {\n                display: none;\n            }\n        }\n    }\n\n    .actioncall {\n        text-align: center;\n        background: linear-gradient(102.01deg, #eff4fd 0.3%, #f6f2ff 106.31%);\n        padding: 70px 0;\n        position: relative;\n        overflow: hidden;\n        z-index: 1;\n\n        > .container {\n            position: relative;\n        }\n\n        h3 {\n            font-weight: 700;\n            font-size: 60px;\n            margin-bottom: 45px;\n        }\n\n        p.lead {\n            font-weight: 400;\n            font-size: 20px;\n            margin-bottom: 40px;\n            color: #586667;\n        }\n\n        /* Decorations */\n        .actioncall-decoration-1,\n        .actioncall-decoration-2,\n        .actioncall-decoration-3 {\n            content: '';\n            border-radius: 100%;\n            background-color: #F4F7F8;\n            display: block;\n            position: absolute;\n            z-index: -1;\n        }\n\n        .actioncall-decoration-1 {\n            background-color: #fff;\n            width: 321px;\n            height: 321px;\n            left: -140px;\n            top: -140px;\n            opacity: .5;\n        }\n\n        .actioncall-decoration-2 {\n            background-color: #fff;\n            width: 380px;\n            height: 380px;\n            right: -165px;\n            top: -180px;\n            opacity: .5;\n        }\n\n        .actioncall-decoration-3 {\n            background-color: #fff;\n            width: 493px;\n            height: 493px;\n            left: 235px;\n            bottom: -380px;\n            opacity: .3;\n        }\n\n        @media (max-width: 1199px) {\n            h3 { font-size: 50px; }\n        }\n\n        @media (max-width: 991px) {\n            h3 { font-size: 40px; }\n        }\n    }\n\n    .latestnews {\n        h3 {\n            margin: 50px 0;\n            text-align: center;\n            color: #000;\n            font-weight: 700;\n            font-size: 40px;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/css/theme/common.css",
    "content": "/*\n * Common Styles\n */\na {\n    color: #3097d1;\n    text-decoration: none;\n}\n\na:hover, a:focus {\n    color: #216a94;\n    text-decoration: underline;\n}\n\nh1, .h1 {\n    font-size: 40px;\n}\nh2, .h2 {\n    font-size: 26px;\n}\nh3, .h3 {\n    font-size: 22px;\n}\nh4, .h4 {\n    font-size: 19px;\n}\nh5, .h5 {\n    font-size: 16px;\n}\nh6, .h6 {\n    font-size: 14px;\n}\n\nh1, .h1, h2, .h2 {\n    font-weight: 700;\n}\n\nh1, .h1, h2, .h2, h3, .h3 {\n    margin-bottom: 13.5px;\n}\n\np.lead {\n    font-size: 20px;\n    font-weight: 400;\n}\n\ncode {\n    padding: 2px 4px;\n    font-size: 90%;\n    color: #D35400;\n    background-color: #ECF0F1;\n    border-radius: 4px;\n}\n\n/* Disable collapse animation */\n.collapsing {\n    transition: none;\n}\n"
  },
  {
    "path": "themes/demo/assets/css/theme/variables.css",
    "content": "/*\n * CSS Variables\n */\n:root {\n    /* Common */\n    --bs-body-line-height: 1.7;\n    --bs-body-color: #343F52;\n\n    /* Brands */\n    --bs-brand-primary: #3097d1;\n    --bs-brand-info: #8eb4cb;\n    --bs-brand-success: #4eb76e;\n    --bs-brand-warning: #cbb956;\n    --bs-brand-danger:  #bf5329;\n    --bs-brand-accent: #6A6CF7;\n\n    /* Typography */\n    --bs-body-color: #586667;\n    --bs-border-radius: 4px;\n\n    /* Jumbotron */\n    --jumbotron-padding: 40px;\n    --jumbotron-bg: transparent;\n    --jumbotron-color: #34495E;\n    --jumbotron-font-size: 20px;\n    --jumbotron-heading-font-size: 65px;\n    --jumbotron-heading-color: #2C3E4F;\n\n\n    /* Forms */\n    --input-border-color: #D7D7D7;\n}\n"
  },
  {
    "path": "themes/demo/assets/css/theme.css",
    "content": "/* Common */\n@import \"theme/common.css\";\n@import \"theme/variables.css\";\n\n/* Layouts */\n@import \"layouts/default.css\";\n@import \"layouts/home.css\";\n@import \"layouts/blog.css\";\n@import \"layouts/wiki.css\";\n\n/* Controls */\n@import \"controls/gallery-slider.css\";\n@import \"controls/card-slider.css\";\n@import \"controls/quantity-input.css\";\n\n/* Elements */\n@import \"elements/text.css\";\n@import \"elements/card.css\";\n@import \"elements/nav.css\";\n@import \"elements/navbar.css\";\n@import \"elements/jumbotron.css\";\n@import \"elements/pagination.css\";\n@import \"elements/code.css\";\n@import \"elements/buttons.css\";\n@import \"elements/footer.css\";\n@import \"elements/social-links.css\";\n@import \"elements/user-panel.css\";\n@import \"elements/lists.css\";\n@import \"elements/form.css\";\n@import \"elements/popover.css\";\n@import \"elements/modals.css\";\n@import \"elements/how-its-made.css\";\n"
  },
  {
    "path": "themes/demo/assets/css/vendor.css",
    "content": "/* Bootstrap */\n@import \"../vendor/bootstrap/bootstrap.css\";\n@import \"../vendor/bootstrap-icons/bootstrap-icons.css\";\n\n/* Slick Carousel */\n@import \"../vendor/slick-carousel/slick.css\";\n@import \"../vendor/slick-carousel/slick-theme.css\";\n\n/* Photoswipe */\n@import \"../vendor/photoswipe/photoswipe.css\";\n@import \"../vendor/photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.css\";\n\n/* Code Blocks */\n@import \"../vendor/codeblocks/codeblocks.min.css\";\n"
  },
  {
    "path": "themes/demo/assets/js/app.js",
    "content": "addEventListener('render', function() {\n\n    // Auto Collapsed List\n    $('ul.bullet-list li.active:first').each(function() {\n        $(this).parents('ul.collapse').each(function() {\n            $(this).addClass('show').prevAll('.collapse-caret:first').removeClass('collapsed');\n        });\n    });\n\n    // Tooltips\n    $('[data-bs-toggle=\"tooltip\"]').each(function() {\n        $(this).tooltip();\n    });\n\n    // Popovers\n    $('[data-bs-toggle=\"popover\"]').each(function() {\n        var $el = $(this);\n        if ($el.data('content-target')) {\n            $el\n                .popover({ html: true, content: $($el.data('content-target')).get(0) })\n                .on('shown.bs.popover', function() {\n                    $('input:first', $($el.data('content-target'))).focus();\n                })\n            ;\n        }\n        else {\n            $el.popover();\n        }\n    });\n\n    // How it is made\n    setTimeout(function() {\n        $('.how-its-made').removeClass('init');\n    }, 1);\n\n});\n"
  },
  {
    "path": "themes/demo/assets/js/blocks/team-leaders.js",
    "content": "oc.registerControl('team-leaders', class extends oc.ControlBase {\n    connect() {\n        this.$el = $(this.element);\n        this.connectSlick();\n    }\n\n    disconnect() {\n        this.$el.slick('unslick');\n        this.$el = null;\n    }\n\n    connectSlick() {\n        this.$el.slick({\n            dots: true,\n            infinite: false,\n            speed: 300,\n            slidesToShow: 4,\n            slidesToScroll: 4,\n            responsive: [\n                {\n                    breakpoint: 1200,\n                    settings: {\n                        slidesToShow: 3,\n                        slidesToScroll: 3,\n                        infinite: true,\n                        dots: true\n                    }\n                },\n                {\n                    breakpoint: 992,\n                    settings: {\n                        slidesToShow: 2,\n                        slidesToScroll: 2\n                    }\n                },\n                {\n                    breakpoint: 576,\n                    settings: {\n                        slidesToShow: 1,\n                        slidesToScroll: 1\n                    }\n                }\n            ]\n        });\n    }\n});\n"
  },
  {
    "path": "themes/demo/assets/js/controls/alert-dialog.js",
    "content": ";(function(){\n\n    /**\n     * AlertDialog implements fancy alert and confirm dialog windows.\n     *\n     * - alertMessage(message)\n     * - confirmMessage(message, function(ok))\n     */\n    class AlertDialog extends oc.ControlBase\n    {\n        connect() {\n            addEventListener('ajax:error-message', this.proxy(this.onErrorMessage));\n            addEventListener('ajax:confirm-message', this.proxy(this.onConfirmMessage));\n        }\n\n        disconnect() {\n            removeEventListener('ajax:error-message', this.proxy(this.onErrorMessage));\n            removeEventListener('ajax:confirm-message', this.proxy(this.onConfirmMessage));\n        }\n\n        onErrorMessage(event) {\n            const { message } = event.detail;\n            if (!message) {\n                return;\n            }\n\n            this.alertMessage(message);\n\n            // Prevent the default alert() message\n            event.preventDefault();\n        }\n\n        onConfirmMessage(event) {\n            const { message, promise } = event.detail;\n            if (!message) {\n                return;\n            }\n\n            this.confirmMessage(message, isConfirm => {\n                if (isConfirm) {\n                    promise.resolve();\n                }\n                else {\n                    promise.reject();\n                }\n            });\n\n            // Prevent the default confirm() message\n            event.preventDefault();\n        }\n\n        alertMessage(message) {\n            var popup = this.getDialogElement();\n            document.body.appendChild(popup);\n\n            popup.querySelector('[data-cancel]').remove();\n            popup.querySelector('[data-message]').innerText = message;\n\n            var modal = new bootstrap.Modal(popup);\n            modal.show();\n\n            popup.querySelector('[data-ok]').addEventListener('click', () => {\n                modal.hide();\n            }, { once: true });\n\n            popup.addEventListener('hidden.bs.modal', () => {\n                modal.dispose();\n                popup.remove();\n            }, { once: true });\n\n            popup.querySelector('[data-ok]').focus();\n        }\n\n        confirmMessage(message, callback) {\n            var popup = this.getDialogElement();\n            document.body.appendChild(popup);\n\n            popup.querySelector('[data-message]').innerText = message;\n\n            var modal = new bootstrap.Modal(popup);\n            modal.show();\n\n            popup.querySelector('[data-ok]').addEventListener('click', () => {\n                callback && callback(true);\n                modal.hide();\n            }, { once: true });\n\n            popup.querySelector('[data-cancel]').addEventListener('click', () => {\n                callback && callback(false);\n                modal.hide();\n            }, { once: true });\n\n            popup.addEventListener('hidden.bs.modal', () => {\n                modal.dispose();\n                popup.remove();\n            }, { once: true });\n\n            popup.querySelector('[data-cancel]').focus();\n        }\n\n        getDialogElement() {\n            var template = document.createElement('template');\n            template.innerHTML = this.element.innerHTML.trim();\n            return template.content.firstChild;\n        }\n\n        static alertMessageGlobal(message) {\n            const alertDialog = oc.fetchControl('[data-control=alert-dialog]');\n            if (alertDialog) {\n                alertDialog.alertMessage(message);\n            }\n        }\n\n        static confirmMessageGlobal(message, callback) {\n            const alertDialog = oc.fetchControl('[data-control=alert-dialog]');\n            if (alertDialog) {\n                alertDialog.confirmMessage(message, callback);\n            }\n        }\n    }\n\n    oc.registerControl('alert-dialog', AlertDialog);\n\n    window.alertMessage = AlertDialog.alertMessageGlobal;\n\n    window.confirmMessage = AlertDialog.confirmMessageGlobal;\n\n})();\n"
  },
  {
    "path": "themes/demo/assets/js/controls/card-slider.js",
    "content": ";(function(){\n\n    oc.registerControl('card-slider', class extends oc.ControlBase {\n        init() {\n            this.$el = $(this.element);\n            this.sliderType = this.config.sliderType || 'hero';\n            this.element.classList.add('type-' + this.sliderType);\n        }\n\n        connect() {\n            this.connectSlick();\n        }\n\n        disconnect() {\n            this.$el.slick('unslick');\n            this.$el = null;\n        }\n\n        connectSlick() {\n            this.$el.slick(this.getSlickOptions());\n        }\n\n        getSlickOptions() {\n            if (this.sliderType === 'hero') {\n                return this.getHeroTypeOptions();\n            }\n\n            if (this.sliderType === 'team') {\n                return this.getTeamTypeOptions();\n            }\n\n            if (this.sliderType === 'category') {\n                return this.getCategoryTypeOptions();\n            }\n\n            return {};\n        }\n\n        getHeroTypeOptions() {\n            return {\n                infinite: true,\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                autoplay: true,\n                dots: true,\n                arrows: false,\n            };\n        }\n\n        getTeamTypeOptions() {\n            return {\n                dots: true,\n                infinite: false,\n                speed: 300,\n                slidesToShow: 4,\n                slidesToScroll: 4,\n                responsive: [\n                    {\n                        breakpoint: 1200,\n                        settings: {\n                            slidesToShow: 3,\n                            slidesToScroll: 3,\n                            infinite: true,\n                            dots: true\n                        }\n                    },\n                    {\n                        breakpoint: 992,\n                        settings: {\n                            slidesToShow: 2,\n                            slidesToScroll: 2\n                        }\n                    },\n                    {\n                        breakpoint: 576,\n                        settings: {\n                            slidesToShow: 1,\n                            slidesToScroll: 1\n                        }\n                    }\n                ]\n            };\n        }\n\n        getCategoryTypeOptions() {\n            return {\n                dots: false,\n                infinite: true,\n                slidesToShow: 6,\n                slidesToScroll: 1,\n                autoplay: true,\n                arrows: true,\n                prevArrow: '<span class=\"slick-prev\"><i class=\"bi bi-chevron-left\"></i></span>',\n                nextArrow: '<span class=\"slick-next\"><i class=\"bi bi-chevron-right\"></i></span>',\n                responsive: [\n                    {\n                        breakpoint: 1400,\n                        settings: {\n                            slidesToShow: 4,\n                            slidesToScroll: 4\n                        }\n                    },\n                    {\n                        breakpoint: 820,\n                        settings: {\n                            slidesToShow: 2,\n                            slidesToScroll: 1\n                        }\n                    },\n                    {\n                        breakpoint: 480,\n                        settings: {\n                            slidesToShow: 2,\n                            slidesToScroll: 1\n                        }\n                    }\n                ]\n            };\n        }\n    });\n\n})();\n"
  },
  {
    "path": "themes/demo/assets/js/controls/gallery-slider.js",
    "content": ";(function(){\n\n    oc.registerControl('gallery-slider', class extends oc.ControlBase {\n        init() {\n            this.$thumbs = this.element.querySelector('[data-slider-thumbs]') || this.element;\n            this.$previews = this.element.querySelector('[data-slider-previews]');\n        }\n\n        connect() {\n            this.connectSlickThumbs();\n            if (this.$previews) {\n                this.connectSlickPreviews();\n            }\n\n            this.connectLightbox();\n            setTimeout(() => {\n                this.prepareLightbox();\n            }, 1);\n        }\n\n        disconnect() {\n            if (this.lightbox) {\n                this.lightbox.destroy();\n                this.lightbox = null;\n            }\n\n            $(this.$thumbs).slick('unslick');\n            this.$thumbs = null;\n\n            if (this.$previews) {\n                $(this.$previews).slick('unslick');\n                this.$previews = null;\n            }\n        }\n\n        connectSlickPreviews() {\n            $(this.$previews).slick({\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                arrows: false,\n                fade: true,\n                asNavFor: this.$thumbs\n            });\n        }\n\n        connectSlickThumbs() {\n            $(this.$thumbs).slick({\n                dots: true,\n                infinite: false,\n                speed: 300,\n                slidesToShow: 3,\n                slidesToScroll: 3,\n                focusOnSelect: !!this.$previews,\n                asNavFor: this.$previews,\n                responsive: [\n                    {\n                        breakpoint: 992,\n                        settings: {\n                            slidesToShow: 2,\n                            slidesToScroll: 2\n                        }\n                    },\n                    {\n                        breakpoint: 576,\n                        settings: {\n                            slidesToShow: 1,\n                            slidesToScroll: 1\n                        }\n                    }\n                ]\n            });\n        }\n\n        connectLightbox() {\n            this.lightbox = new PhotoSwipeLightbox({\n                gallery: this.$previews || this.$thumbs,\n                children: '.slick-slide',\n                pswpModule: PhotoSwipeModule,\n                showHideAnimationType: 'none'\n            });\n\n            new PhotoSwipeDynamicCaption(this.lightbox, {\n                type: 'auto'\n            });\n\n            this.lightbox.init();\n        }\n\n        prepareLightbox() {\n            $('.slick-slide a', this.$el).each(function () {\n                var image = new Image(),\n                    link = this;\n\n                image.src = this.getAttribute('href');\n                image.onload = function () {\n                    link.setAttribute('data-pswp-width', image.naturalWidth);\n                    link.setAttribute('data-pswp-height', image.naturalHeight);\n                };\n            });\n        }\n    });\n\n})();\n"
  },
  {
    "path": "themes/demo/assets/js/controls/password-dialog.js",
    "content": ";(function(){\n\n    /**\n     * PasswordDialog implements a password confirmation screen for sensitive actions\n     */\n    class PasswordDialog extends oc.ControlBase {\n        connect() {\n            addEventListener('app:password-confirming', this.proxy(this.onShowPasswordPrompt));\n        }\n\n        disconnect() {\n            removeEventListener('app:password-confirming', this.proxy(this.onShowPasswordPrompt));\n        }\n\n        onShowPasswordPrompt(event) {\n            this.target = event.target;\n            this.popup = this.getDialogElement();\n            this.form = this.popup.querySelector('form');\n\n            document.body.appendChild(this.popup);\n\n            // Create a new modal\n            this.modal = new bootstrap.Modal(this.popup);\n            this.modal.show();\n\n            // Focus the input\n            this.popup.querySelector('input[name=confirmable_password]').focus();\n\n            // Bind events\n            this.popup.querySelector('[data-cancel]').addEventListener('click', () => this.modal.hide(), { once: true });\n            this.popup.addEventListener('hidden.bs.modal', () => this.disposeDialog(), { once: true });\n            this.form.addEventListener('ajax:done', this.proxy(this.onPasswordConfirmed), { once: true });\n\n            // Prevent the update workflow\n            event.preventDefault();\n        }\n\n        onPasswordConfirmed(event) {\n            const { data } = event.detail;\n\n            // Resubmit original AJAX event, skipping confirmation prompts\n            if (data.passwordConfirmed) {\n                oc.request(this.target, null, { confirm: false });\n            }\n\n            this.modal.hide();\n        }\n\n        disposeDialog() {\n            this.modal.dispose();\n            this.form.removeEventListener('ajax:done', this.proxy(this.onPasswordConfirmed), { once: true });\n            this.popup.remove();\n\n            this.form = null;\n            this.popup = null;\n            this.modal = null;\n            this.target = null;\n        }\n\n        getDialogElement() {\n            var template = document.createElement('template');\n            template.innerHTML = this.element.innerHTML.trim();\n            return template.content.firstChild;\n        }\n    }\n\n    oc.registerControl('password-dialog', PasswordDialog);\n\n})();\n"
  },
  {
    "path": "themes/demo/assets/js/controls/quantity-input.js",
    "content": ";(function(){\n\n    oc.registerControl('quantity-input', class extends oc.ControlBase {\n        connect() {\n            this.$qty = this.element.querySelector('input.quantity-field');\n            this.listen('click', '.button-plus', this.onIncrementValue);\n            this.listen('click', '.button-minus', this.onDecrementValue);\n        }\n\n        disconnect() {\n            this.$qty = null;\n        }\n\n        onIncrementValue(ev) {\n            ev.preventDefault();\n            var value = parseInt(this.$qty.value, 10);\n            if (isNaN(value)) {\n                value = 0;\n            }\n\n            this.$qty.value = Math.max(++value, 0);\n        }\n\n        onDecrementValue(ev) {\n            ev.preventDefault();\n            var value = parseInt(this.$qty.value, 10);\n            if (isNaN(value)) {\n                value = 0;\n            }\n\n            this.$qty.value = Math.max(--value, 0);\n        }\n\n    });\n\n})();\n"
  },
  {
    "path": "themes/demo/assets/vendor/bootstrap/bootstrap.css",
    "content": "﻿/*!\n * Bootstrap  v5.3.8 (https://getbootstrap.com/)\n * Copyright 2011-2025 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */:root,[data-bs-theme=light]{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-primary-text-emphasis: #052c65;--bs-secondary-text-emphasis: #2b2f32;--bs-success-text-emphasis: #0a3622;--bs-info-text-emphasis: #055160;--bs-warning-text-emphasis: #664d03;--bs-danger-text-emphasis: #58151c;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #cfe2ff;--bs-secondary-bg-subtle: #e2e3e5;--bs-success-bg-subtle: #d1e7dd;--bs-info-bg-subtle: #cff4fc;--bs-warning-bg-subtle: #fff3cd;--bs-danger-bg-subtle: #f8d7da;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #9ec5fe;--bs-secondary-border-subtle: #c4c8cb;--bs-success-border-subtle: #a3cfbb;--bs-info-border-subtle: #9eeaf9;--bs-warning-border-subtle: #ffe69c;--bs-danger-border-subtle: #f1aeb5;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb: 33, 37, 41;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb: 33, 37, 41;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #0d6efd;--bs-link-color-rgb: 13, 110, 253;--bs-link-decoration: underline;--bs-link-hover-color: #0a58ca;--bs-link-hover-color-rgb: 10, 88, 202;--bs-code-color: #d63384;--bs-highlight-color: #212529;--bs-highlight-bg: #fff3cd;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.375rem;--bs-border-radius-sm: 0.25rem;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(13, 110, 253, 0.25);--bs-form-valid-color: #198754;--bs-form-valid-border-color: #198754;--bs-form-invalid-color: #dc3545;--bs-form-invalid-border-color: #dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: #6ea8fe;--bs-secondary-text-emphasis: #a7acb1;--bs-success-text-emphasis: #75b798;--bs-info-text-emphasis: #6edff6;--bs-warning-text-emphasis: #ffda6a;--bs-danger-text-emphasis: #ea868f;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #031633;--bs-secondary-bg-subtle: #161719;--bs-success-bg-subtle: #051b11;--bs-info-bg-subtle: #032830;--bs-warning-bg-subtle: #332701;--bs-danger-bg-subtle: #2c0b0e;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #084298;--bs-secondary-border-subtle: #41464b;--bs-success-border-subtle: #0f5132;--bs-info-border-subtle: #087990;--bs-warning-border-subtle: #997404;--bs-danger-border-subtle: #842029;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #6ea8fe;--bs-link-hover-color: #8bb9fe;--bs-link-color-rgb: 110, 168, 254;--bs-link-hover-color-rgb: 139, 185, 254;--bs-code-color: #e685b5;--bs-highlight-color: #dee2e6;--bs-highlight-bg: #664d03;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: #75b798;--bs-form-valid-border-color: #75b798;--bs-form-invalid-color: #ea868f;--bs-form-invalid-border-color: #ea868f}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:0.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;line-height:inherit;font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-weight:300;line-height:1.2;font-size:calc(1.625rem + 4.5vw)}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-weight:300;line-height:1.2;font-size:calc(1.575rem + 3.9vw)}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-weight:300;line-height:1.2;font-size:calc(1.525rem + 3.3vw)}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-weight:300;line-height:1.2;font-size:calc(1.475rem + 2.7vw)}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-weight:300;line-height:1.2;font-size:calc(1.425rem + 2.1vw)}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-weight:300;line-height:1.2;font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:\"— \"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: var(--bs-emphasis-color);--bs-table-bg: var(--bs-body-bg);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-emphasis-color);--bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);--bs-table-active-color: var(--bs-emphasis-color);--bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color: var(--bs-emphasis-color);--bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #cfe2ff;--bs-table-border-color: #a6b5cc;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #b5b6b7;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #a7b9b1;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #a6c3ca;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #ccc2a4;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #c6acae;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #c6c7c8;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #4d5154;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + var(--bs-border-width));padding-bottom:calc(0.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + var(--bs-border-width));padding-bottom:calc(0.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + var(--bs-border-width));padding-bottom:calc(0.25rem + var(--bs-border-width));font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0 !important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size=\"1\"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:var(--bs-secondary-bg);border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;max-width:100%;height:100%;padding:1rem .75rem;overflow:hidden;color:rgba(var(--bs-body-color-rgb), 0.65);text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem;padding-left:.75rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>textarea:focus~label::after,.form-floating>textarea:not(:placeholder-shown)~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:\"\";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>textarea:disabled~label::after{background-color:var(--bs-secondary-bg)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(-1 * var(--bs-border-width));border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size=\"1\"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size=\"1\"]{--bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1'/%3e%3c/svg%3e\");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:var(--bs-form-valid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:var(--bs-form-valid-border-color)}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:var(--bs-form-valid-color)}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb), 0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.5em + 0.75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size=\"1\"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size=\"1\"]{--bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:var(--bs-form-invalid-border-color);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:var(--bs-form-invalid-border-color)}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:var(--bs-form-invalid-color)}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb), 0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130, 138, 145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60, 153, 110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11, 172, 204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217, 164, 6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66, 70, 73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13, 110, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108, 117, 125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25, 135, 84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13, 202, 240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255, 193, 7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33, 37, 41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 49, 132, 253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: var(--bs-border-radius-lg)}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: var(--bs-body-color);--bs-dropdown-bg: var(--bs-body-bg);--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: var(--bs-border-radius);--bs-dropdown-border-width: var(--bs-border-width);--bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: var(--bs-box-shadow);--bs-dropdown-link-color: var(--bs-body-color);--bs-dropdown-link-hover-color: var(--bs-body-color);--bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: var(--bs-tertiary-color);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0;border-radius:var(--bs-dropdown-item-border-radius, 0)}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(-1 * var(--bs-border-width))}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(-1 * var(--bs-border-width))}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:nth-child(n+3),.btn-group-vertical>:not(.btn-check)+.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: var(--bs-border-width);--bs-nav-tabs-border-color: var(--bs-border-color);--bs-nav-tabs-border-radius: var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color: var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg: var(--bs-body-bg);--bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0);border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: var(--bs-border-radius);--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-grow:1;flex-basis:0;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25rem;--bs-navbar-toggler-padding-x: 0.75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");--bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius: var(--bs-border-radius);--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-grow:1;flex-basis:100%;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgba(255, 255, 255, 0.55);--bs-navbar-hover-color: rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child)>.card-img-top,.card-group>.card:not(:last-child)>.card-header{border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-img-bottom,.card-group>.card:not(:last-child)>.card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child)>.card-img-top,.card-group>.card:not(:first-child)>.card-header{border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-img-bottom,.card-group>.card:not(:first-child)>.card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: var(--bs-body-color);--bs-accordion-bg: var(--bs-body-bg);--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: var(--bs-border-width);--bs-accordion-border-radius: var(--bs-border-radius);--bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: var(--bs-body-color);--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: var(--bs-primary-text-emphasis);--bs-accordion-active-bg: var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:\"\";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\");--bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: var(--bs-secondary-color);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: var(--bs-body-bg);--bs-pagination-border-width: var(--bs-border-width);--bs-pagination-border-color: var(--bs-border-color);--bs-pagination-border-radius: var(--bs-border-radius);--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: var(--bs-tertiary-bg);--bs-pagination-hover-border-color: var(--bs-border-color);--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: var(--bs-secondary-bg);--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: var(--bs-secondary-color);--bs-pagination-disabled-bg: var(--bs-secondary-bg);--bs-pagination-disabled-border-color: var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(-1 * var(--bs-border-width))}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: var(--bs-border-radius-lg)}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius: var(--bs-border-radius);--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}.progress,.progress-stacked{--bs-progress-height: 1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: var(--bs-secondary-bg);--bs-progress-border-radius: var(--bs-border-radius);--bs-progress-box-shadow: var(--bs-box-shadow-inset);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: var(--bs-body-color);--bs-list-group-bg: var(--bs-body-bg);--bs-list-group-border-color: var(--bs-border-color);--bs-list-group-border-width: var(--bs-border-width);--bs-list-group-border-radius: var(--bs-border-radius);--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: var(--bs-secondary-color);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-tertiary-bg);--bs-list-group-action-active-color: var(--bs-body-color);--bs-list-group-action-active-bg: var(--bs-secondary-bg);--bs-list-group-disabled-color: var(--bs-secondary-color);--bs-list-group-disabled-bg: var(--bs-body-bg);--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, \".\") \". \";counter-increment:section}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:not(.active):hover,.list-group-item-action:not(.active):focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:not(.active):active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e\");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;filter:var(--bs-btn-close-filter);border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%)}:root,[data-bs-theme=light]{--bs-btn-close-filter: }[data-bs-theme=dark]{--bs-btn-close-filter: invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width: var(--bs-border-width);--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: var(--bs-border-radius);--bs-toast-box-shadow: var(--bs-box-shadow);--bs-toast-header-color: var(--bs-secondary-color);--bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color: var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: var(--bs-body-color);--bs-modal-bg: var(--bs-body-bg);--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: var(--bs-border-width);--bs-modal-border-radius: var(--bs-border-radius-lg);--bs-modal-box-shadow: var(--bs-box-shadow-sm);--bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: var(--bs-border-width);--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px);transition:transform .3s ease-out}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin-top:calc(-0.5*var(--bs-modal-header-padding-y));margin-right:calc(-0.5*var(--bs-modal-header-padding-x));margin-bottom:calc(-0.5*var(--bs-modal-header-padding-y));margin-left:auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: var(--bs-body-bg);--bs-tooltip-bg: var(--bs-emphasis-color);--bs-tooltip-border-radius: var(--bs-border-radius);--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:\"\";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: var(--bs-body-bg);--bs-popover-border-width: var(--bs-border-width);--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: var(--bs-border-radius-lg);--bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow: var(--bs-box-shadow);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: var(--bs-secondary-bg);--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: var(--bs-body-color);--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:\"\";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:\"\";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;filter:var(--bs-carousel-control-icon-filter);border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\")*/}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'/%3e%3c/svg%3e\")*/}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:var(--bs-carousel-caption-color);text-align:center}.carousel-dark{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}:root,[data-bs-theme=light]{--bs-carousel-indicator-active-bg: #fff;--bs-carousel-caption-color: #fff;--bs-carousel-control-icon-filter: }[data-bs-theme=dark]{--bs-carousel-indicator-active-bg: #000;--bs-carousel-caption-color: #000;--bs-carousel-control-icon-filter: invert(1) grayscale(100)}.spinner-grow,.spinner-border{display:inline-block;flex-shrink:0;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: var(--bs-body-color);--bs-offcanvas-bg: var(--bs-body-bg);--bs-offcanvas-border-width: var(--bs-border-width);--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media(max-width: 575.98px){.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}}@media(max-width: 575.98px){.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media(max-width: 767.98px){.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}}@media(max-width: 767.98px){.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media(max-width: 991.98px){.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}}@media(max-width: 991.98px){.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media(max-width: 1199.98px){.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}}@media(max-width: 1199.98px){.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media(max-width: 1399.98px){.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}}@media(max-width: 1399.98px){.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y));margin-left:auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:\"\"}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:\"\"}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:\"\"}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:\"\"}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:var(--bs-box-shadow) !important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm) !important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg) !important}.shadow-none{box-shadow:none !important}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}\n"
  },
  {
    "path": "themes/demo/assets/vendor/bootstrap/bootstrap.js",
    "content": "// Importing JavaScript\n//\n// You have two choices for including Bootstrap's JS files—the whole thing,\n// or just the bits that you need.\n\n\n// Option 1\n//\n// Import Bootstrap's bundle (all of Bootstrap's JS + Popper.js dependency)\n\n// import \"../../../node_modules/bootstrap/dist/js/bootstrap.bundle.js\";\n\n\n// Option 2\n//\n// Import just what we need\n\n// If you're importing tooltips or popovers, be sure to include our Popper.js dependency\n// import \"../../../node_modules/popper.js/dist/popper.min.js\";\n\n// import \"../../../node_modules/bootstrap/js/dist/util.js\";\n// import \"../../../node_modules/bootstrap/js/dist/modal.js\";\n\n\n// Option 3\n//\n// Import Bootstrap as ESM module\n\nimport * as Bootstrap from \"../../../node_modules/bootstrap/dist/js/bootstrap.esm.js\";\n\nwindow.bootstrap = Bootstrap;\n"
  },
  {
    "path": "themes/demo/assets/vendor/bootstrap/bootstrap.min.js.LICENSE.txt",
    "content": "/*!\n  * Bootstrap v5.3.0 (https://getbootstrap.com/)\n  * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n"
  },
  {
    "path": "themes/demo/assets/vendor/bootstrap/bootstrap.scss",
    "content": "// Override Bootstrap's Sass default variables\n//\n// Nearly all variables in Bootstrap are written with the `!default` flag.\n// This allows you to override the default values of those variables before\n// you import Bootstrap's source Sass files.\n//\n// Overriding the default variable values is the best way to customize your\n// CSS without writing _new_ styles. For example, change you can either change\n// `$body-color` or write more CSS that override's Bootstrap's CSS like so:\n// `body { color: red; }`.\n\n//\n// Bring in Bootstrap\n//\n\n// Option 1\n//\n// Import all of Bootstrap's CSS\n\n@import \"bootstrap/scss/bootstrap\";\n\n/*\n// Option 2\n//\n// Place variable overrides first, then import just the styles you need. Note that some stylesheets are required no matter what.\n\n// Toggle global options\n$enable-gradients: true;\n$enable-shadows: true;\n\n// Customize some defaults\n$body-color: #333;\n$body-bg: #fff;\n$border-radius: .4rem;\n$success: #7952b3;\n\n@import \"bootstrap/scss/functions\"; // Required\n@import \"bootstrap/scss/variables\"; // Required\n@import \"bootstrap/scss/mixins\"; // Required\n\n@import \"bootstrap/scss/root\"; // Required\n@import \"bootstrap/scss/reboot\"; // Required\n@import \"bootstrap/scss/type\";\n// @import \"bootstrap/scss/images\";\n// @import \"bootstrap/scss/code\";\n@import \"bootstrap/scss/grid\";\n// @import \"bootstrap/scss/tables\";\n// @import \"bootstrap/scss/forms\";\n@import \"bootstrap/scss/buttons\";\n@import \"bootstrap/scss/transitions\";\n// @import \"bootstrap/scss/dropdown\";\n// @import \"bootstrap/scss/button-group\";\n// @import \"bootstrap/scss/input-group\"; // Requires forms\n// @import \"bootstrap/scss/custom-forms\";\n// @import \"bootstrap/scss/nav\";\n// @import \"bootstrap/scss/navbar\"; // Requires nav\n// @import \"bootstrap/scss/card\";\n// @import \"bootstrap/scss/breadcrumb\";\n// @import \"bootstrap/scss/pagination\";\n// @import \"bootstrap/scss/badge\";\n// @import \"bootstrap/scss/jumbotron\";\n// @import \"bootstrap/scss/alert\";\n// @import \"bootstrap/scss/progress\";\n// @import \"bootstrap/scss/media\";\n// @import \"bootstrap/scss/list-group\";\n@import \"bootstrap/scss/close\";\n// @import \"bootstrap/scss/toasts\";\n@import \"bootstrap/scss/modal\"; // Requires transitions\n// @import \"bootstrap/scss/tooltip\";\n// @import \"bootstrap/scss/popover\";\n// @import \"bootstrap/scss/carousel\";\n// @import \"bootstrap/scss/spinners\";\n@import \"bootstrap/scss/utilities\";\n// @import \"bootstrap/scss/print\";\n*/\n"
  },
  {
    "path": "themes/demo/assets/vendor/bootstrap-icons/bootstrap-icons.css",
    "content": "﻿/*!\n * Bootstrap Icons v1.13.1 (https://icons.getbootstrap.com/)\n * Copyright 2019-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE)\n */@font-face{font-display:block;font-family:\"bootstrap-icons\";src:url(\"./fonts/bootstrap-icons.woff2?24e3eb84d0bcaf83d77f904c78ac1f47\") format(\"woff2\"),url(\"./fonts/bootstrap-icons.woff?24e3eb84d0bcaf83d77f904c78ac1f47\") format(\"woff\")}.bi::before,[class^=bi-]::before,[class*=\" bi-\"]::before{display:inline-block;font-family:\"bootstrap-icons\" !important;font-style:normal;font-weight:normal !important;font-variant:normal;text-transform:none;line-height:1;vertical-align:-0.125em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bi-123::before{content:\"\"}.bi-alarm-fill::before{content:\"\"}.bi-alarm::before{content:\"\"}.bi-align-bottom::before{content:\"\"}.bi-align-center::before{content:\"\"}.bi-align-end::before{content:\"\"}.bi-align-middle::before{content:\"\"}.bi-align-start::before{content:\"\"}.bi-align-top::before{content:\"\"}.bi-alt::before{content:\"\"}.bi-app-indicator::before{content:\"\"}.bi-app::before{content:\"\"}.bi-archive-fill::before{content:\"\"}.bi-archive::before{content:\"\"}.bi-arrow-90deg-down::before{content:\"\"}.bi-arrow-90deg-left::before{content:\"\"}.bi-arrow-90deg-right::before{content:\"\"}.bi-arrow-90deg-up::before{content:\"\"}.bi-arrow-bar-down::before{content:\"\"}.bi-arrow-bar-left::before{content:\"\"}.bi-arrow-bar-right::before{content:\"\"}.bi-arrow-bar-up::before{content:\"\"}.bi-arrow-clockwise::before{content:\"\"}.bi-arrow-counterclockwise::before{content:\"\"}.bi-arrow-down-circle-fill::before{content:\"\"}.bi-arrow-down-circle::before{content:\"\"}.bi-arrow-down-left-circle-fill::before{content:\"\"}.bi-arrow-down-left-circle::before{content:\"\"}.bi-arrow-down-left-square-fill::before{content:\"\"}.bi-arrow-down-left-square::before{content:\"\"}.bi-arrow-down-left::before{content:\"\"}.bi-arrow-down-right-circle-fill::before{content:\"\"}.bi-arrow-down-right-circle::before{content:\"\"}.bi-arrow-down-right-square-fill::before{content:\"\"}.bi-arrow-down-right-square::before{content:\"\"}.bi-arrow-down-right::before{content:\"\"}.bi-arrow-down-short::before{content:\"\"}.bi-arrow-down-square-fill::before{content:\"\"}.bi-arrow-down-square::before{content:\"\"}.bi-arrow-down-up::before{content:\"\"}.bi-arrow-down::before{content:\"\"}.bi-arrow-left-circle-fill::before{content:\"\"}.bi-arrow-left-circle::before{content:\"\"}.bi-arrow-left-right::before{content:\"\"}.bi-arrow-left-short::before{content:\"\"}.bi-arrow-left-square-fill::before{content:\"\"}.bi-arrow-left-square::before{content:\"\"}.bi-arrow-left::before{content:\"\"}.bi-arrow-repeat::before{content:\"\"}.bi-arrow-return-left::before{content:\"\"}.bi-arrow-return-right::before{content:\"\"}.bi-arrow-right-circle-fill::before{content:\"\"}.bi-arrow-right-circle::before{content:\"\"}.bi-arrow-right-short::before{content:\"\"}.bi-arrow-right-square-fill::before{content:\"\"}.bi-arrow-right-square::before{content:\"\"}.bi-arrow-right::before{content:\"\"}.bi-arrow-up-circle-fill::before{content:\"\"}.bi-arrow-up-circle::before{content:\"\"}.bi-arrow-up-left-circle-fill::before{content:\"\"}.bi-arrow-up-left-circle::before{content:\"\"}.bi-arrow-up-left-square-fill::before{content:\"\"}.bi-arrow-up-left-square::before{content:\"\"}.bi-arrow-up-left::before{content:\"\"}.bi-arrow-up-right-circle-fill::before{content:\"\"}.bi-arrow-up-right-circle::before{content:\"\"}.bi-arrow-up-right-square-fill::before{content:\"\"}.bi-arrow-up-right-square::before{content:\"\"}.bi-arrow-up-right::before{content:\"\"}.bi-arrow-up-short::before{content:\"\"}.bi-arrow-up-square-fill::before{content:\"\"}.bi-arrow-up-square::before{content:\"\"}.bi-arrow-up::before{content:\"\"}.bi-arrows-angle-contract::before{content:\"\"}.bi-arrows-angle-expand::before{content:\"\"}.bi-arrows-collapse::before{content:\"\"}.bi-arrows-expand::before{content:\"\"}.bi-arrows-fullscreen::before{content:\"\"}.bi-arrows-move::before{content:\"\"}.bi-aspect-ratio-fill::before{content:\"\"}.bi-aspect-ratio::before{content:\"\"}.bi-asterisk::before{content:\"\"}.bi-at::before{content:\"\"}.bi-award-fill::before{content:\"\"}.bi-award::before{content:\"\"}.bi-back::before{content:\"\"}.bi-backspace-fill::before{content:\"\"}.bi-backspace-reverse-fill::before{content:\"\"}.bi-backspace-reverse::before{content:\"\"}.bi-backspace::before{content:\"\"}.bi-badge-3d-fill::before{content:\"\"}.bi-badge-3d::before{content:\"\"}.bi-badge-4k-fill::before{content:\"\"}.bi-badge-4k::before{content:\"\"}.bi-badge-8k-fill::before{content:\"\"}.bi-badge-8k::before{content:\"\"}.bi-badge-ad-fill::before{content:\"\"}.bi-badge-ad::before{content:\"\"}.bi-badge-ar-fill::before{content:\"\"}.bi-badge-ar::before{content:\"\"}.bi-badge-cc-fill::before{content:\"\"}.bi-badge-cc::before{content:\"\"}.bi-badge-hd-fill::before{content:\"\"}.bi-badge-hd::before{content:\"\"}.bi-badge-tm-fill::before{content:\"\"}.bi-badge-tm::before{content:\"\"}.bi-badge-vo-fill::before{content:\"\"}.bi-badge-vo::before{content:\"\"}.bi-badge-vr-fill::before{content:\"\"}.bi-badge-vr::before{content:\"\"}.bi-badge-wc-fill::before{content:\"\"}.bi-badge-wc::before{content:\"\"}.bi-bag-check-fill::before{content:\"\"}.bi-bag-check::before{content:\"\"}.bi-bag-dash-fill::before{content:\"\"}.bi-bag-dash::before{content:\"\"}.bi-bag-fill::before{content:\"\"}.bi-bag-plus-fill::before{content:\"\"}.bi-bag-plus::before{content:\"\"}.bi-bag-x-fill::before{content:\"\"}.bi-bag-x::before{content:\"\"}.bi-bag::before{content:\"\"}.bi-bar-chart-fill::before{content:\"\"}.bi-bar-chart-line-fill::before{content:\"\"}.bi-bar-chart-line::before{content:\"\"}.bi-bar-chart-steps::before{content:\"\"}.bi-bar-chart::before{content:\"\"}.bi-basket-fill::before{content:\"\"}.bi-basket::before{content:\"\"}.bi-basket2-fill::before{content:\"\"}.bi-basket2::before{content:\"\"}.bi-basket3-fill::before{content:\"\"}.bi-basket3::before{content:\"\"}.bi-battery-charging::before{content:\"\"}.bi-battery-full::before{content:\"\"}.bi-battery-half::before{content:\"\"}.bi-battery::before{content:\"\"}.bi-bell-fill::before{content:\"\"}.bi-bell::before{content:\"\"}.bi-bezier::before{content:\"\"}.bi-bezier2::before{content:\"\"}.bi-bicycle::before{content:\"\"}.bi-binoculars-fill::before{content:\"\"}.bi-binoculars::before{content:\"\"}.bi-blockquote-left::before{content:\"\"}.bi-blockquote-right::before{content:\"\"}.bi-book-fill::before{content:\"\"}.bi-book-half::before{content:\"\"}.bi-book::before{content:\"\"}.bi-bookmark-check-fill::before{content:\"\"}.bi-bookmark-check::before{content:\"\"}.bi-bookmark-dash-fill::before{content:\"\"}.bi-bookmark-dash::before{content:\"\"}.bi-bookmark-fill::before{content:\"\"}.bi-bookmark-heart-fill::before{content:\"\"}.bi-bookmark-heart::before{content:\"\"}.bi-bookmark-plus-fill::before{content:\"\"}.bi-bookmark-plus::before{content:\"\"}.bi-bookmark-star-fill::before{content:\"\"}.bi-bookmark-star::before{content:\"\"}.bi-bookmark-x-fill::before{content:\"\"}.bi-bookmark-x::before{content:\"\"}.bi-bookmark::before{content:\"\"}.bi-bookmarks-fill::before{content:\"\"}.bi-bookmarks::before{content:\"\"}.bi-bookshelf::before{content:\"\"}.bi-bootstrap-fill::before{content:\"\"}.bi-bootstrap-reboot::before{content:\"\"}.bi-bootstrap::before{content:\"\"}.bi-border-all::before{content:\"\"}.bi-border-bottom::before{content:\"\"}.bi-border-center::before{content:\"\"}.bi-border-inner::before{content:\"\"}.bi-border-left::before{content:\"\"}.bi-border-middle::before{content:\"\"}.bi-border-outer::before{content:\"\"}.bi-border-right::before{content:\"\"}.bi-border-style::before{content:\"\"}.bi-border-top::before{content:\"\"}.bi-border-width::before{content:\"\"}.bi-border::before{content:\"\"}.bi-bounding-box-circles::before{content:\"\"}.bi-bounding-box::before{content:\"\"}.bi-box-arrow-down-left::before{content:\"\"}.bi-box-arrow-down-right::before{content:\"\"}.bi-box-arrow-down::before{content:\"\"}.bi-box-arrow-in-down-left::before{content:\"\"}.bi-box-arrow-in-down-right::before{content:\"\"}.bi-box-arrow-in-down::before{content:\"\"}.bi-box-arrow-in-left::before{content:\"\"}.bi-box-arrow-in-right::before{content:\"\"}.bi-box-arrow-in-up-left::before{content:\"\"}.bi-box-arrow-in-up-right::before{content:\"\"}.bi-box-arrow-in-up::before{content:\"\"}.bi-box-arrow-left::before{content:\"\"}.bi-box-arrow-right::before{content:\"\"}.bi-box-arrow-up-left::before{content:\"\"}.bi-box-arrow-up-right::before{content:\"\"}.bi-box-arrow-up::before{content:\"\"}.bi-box-seam::before{content:\"\"}.bi-box::before{content:\"\"}.bi-braces::before{content:\"\"}.bi-bricks::before{content:\"\"}.bi-briefcase-fill::before{content:\"\"}.bi-briefcase::before{content:\"\"}.bi-brightness-alt-high-fill::before{content:\"\"}.bi-brightness-alt-high::before{content:\"\"}.bi-brightness-alt-low-fill::before{content:\"\"}.bi-brightness-alt-low::before{content:\"\"}.bi-brightness-high-fill::before{content:\"\"}.bi-brightness-high::before{content:\"\"}.bi-brightness-low-fill::before{content:\"\"}.bi-brightness-low::before{content:\"\"}.bi-broadcast-pin::before{content:\"\"}.bi-broadcast::before{content:\"\"}.bi-brush-fill::before{content:\"\"}.bi-brush::before{content:\"\"}.bi-bucket-fill::before{content:\"\"}.bi-bucket::before{content:\"\"}.bi-bug-fill::before{content:\"\"}.bi-bug::before{content:\"\"}.bi-building::before{content:\"\"}.bi-bullseye::before{content:\"\"}.bi-calculator-fill::before{content:\"\"}.bi-calculator::before{content:\"\"}.bi-calendar-check-fill::before{content:\"\"}.bi-calendar-check::before{content:\"\"}.bi-calendar-date-fill::before{content:\"\"}.bi-calendar-date::before{content:\"\"}.bi-calendar-day-fill::before{content:\"\"}.bi-calendar-day::before{content:\"\"}.bi-calendar-event-fill::before{content:\"\"}.bi-calendar-event::before{content:\"\"}.bi-calendar-fill::before{content:\"\"}.bi-calendar-minus-fill::before{content:\"\"}.bi-calendar-minus::before{content:\"\"}.bi-calendar-month-fill::before{content:\"\"}.bi-calendar-month::before{content:\"\"}.bi-calendar-plus-fill::before{content:\"\"}.bi-calendar-plus::before{content:\"\"}.bi-calendar-range-fill::before{content:\"\"}.bi-calendar-range::before{content:\"\"}.bi-calendar-week-fill::before{content:\"\"}.bi-calendar-week::before{content:\"\"}.bi-calendar-x-fill::before{content:\"\"}.bi-calendar-x::before{content:\"\"}.bi-calendar::before{content:\"\"}.bi-calendar2-check-fill::before{content:\"\"}.bi-calendar2-check::before{content:\"\"}.bi-calendar2-date-fill::before{content:\"\"}.bi-calendar2-date::before{content:\"\"}.bi-calendar2-day-fill::before{content:\"\"}.bi-calendar2-day::before{content:\"\"}.bi-calendar2-event-fill::before{content:\"\"}.bi-calendar2-event::before{content:\"\"}.bi-calendar2-fill::before{content:\"\"}.bi-calendar2-minus-fill::before{content:\"\"}.bi-calendar2-minus::before{content:\"\"}.bi-calendar2-month-fill::before{content:\"\"}.bi-calendar2-month::before{content:\"\"}.bi-calendar2-plus-fill::before{content:\"\"}.bi-calendar2-plus::before{content:\"\"}.bi-calendar2-range-fill::before{content:\"\"}.bi-calendar2-range::before{content:\"\"}.bi-calendar2-week-fill::before{content:\"\"}.bi-calendar2-week::before{content:\"\"}.bi-calendar2-x-fill::before{content:\"\"}.bi-calendar2-x::before{content:\"\"}.bi-calendar2::before{content:\"\"}.bi-calendar3-event-fill::before{content:\"\"}.bi-calendar3-event::before{content:\"\"}.bi-calendar3-fill::before{content:\"\"}.bi-calendar3-range-fill::before{content:\"\"}.bi-calendar3-range::before{content:\"\"}.bi-calendar3-week-fill::before{content:\"\"}.bi-calendar3-week::before{content:\"\"}.bi-calendar3::before{content:\"\"}.bi-calendar4-event::before{content:\"\"}.bi-calendar4-range::before{content:\"\"}.bi-calendar4-week::before{content:\"\"}.bi-calendar4::before{content:\"\"}.bi-camera-fill::before{content:\"\"}.bi-camera-reels-fill::before{content:\"\"}.bi-camera-reels::before{content:\"\"}.bi-camera-video-fill::before{content:\"\"}.bi-camera-video-off-fill::before{content:\"\"}.bi-camera-video-off::before{content:\"\"}.bi-camera-video::before{content:\"\"}.bi-camera::before{content:\"\"}.bi-camera2::before{content:\"\"}.bi-capslock-fill::before{content:\"\"}.bi-capslock::before{content:\"\"}.bi-card-checklist::before{content:\"\"}.bi-card-heading::before{content:\"\"}.bi-card-image::before{content:\"\"}.bi-card-list::before{content:\"\"}.bi-card-text::before{content:\"\"}.bi-caret-down-fill::before{content:\"\"}.bi-caret-down-square-fill::before{content:\"\"}.bi-caret-down-square::before{content:\"\"}.bi-caret-down::before{content:\"\"}.bi-caret-left-fill::before{content:\"\"}.bi-caret-left-square-fill::before{content:\"\"}.bi-caret-left-square::before{content:\"\"}.bi-caret-left::before{content:\"\"}.bi-caret-right-fill::before{content:\"\"}.bi-caret-right-square-fill::before{content:\"\"}.bi-caret-right-square::before{content:\"\"}.bi-caret-right::before{content:\"\"}.bi-caret-up-fill::before{content:\"\"}.bi-caret-up-square-fill::before{content:\"\"}.bi-caret-up-square::before{content:\"\"}.bi-caret-up::before{content:\"\"}.bi-cart-check-fill::before{content:\"\"}.bi-cart-check::before{content:\"\"}.bi-cart-dash-fill::before{content:\"\"}.bi-cart-dash::before{content:\"\"}.bi-cart-fill::before{content:\"\"}.bi-cart-plus-fill::before{content:\"\"}.bi-cart-plus::before{content:\"\"}.bi-cart-x-fill::before{content:\"\"}.bi-cart-x::before{content:\"\"}.bi-cart::before{content:\"\"}.bi-cart2::before{content:\"\"}.bi-cart3::before{content:\"\"}.bi-cart4::before{content:\"\"}.bi-cash-stack::before{content:\"\"}.bi-cash::before{content:\"\"}.bi-cast::before{content:\"\"}.bi-chat-dots-fill::before{content:\"\"}.bi-chat-dots::before{content:\"\"}.bi-chat-fill::before{content:\"\"}.bi-chat-left-dots-fill::before{content:\"\"}.bi-chat-left-dots::before{content:\"\"}.bi-chat-left-fill::before{content:\"\"}.bi-chat-left-quote-fill::before{content:\"\"}.bi-chat-left-quote::before{content:\"\"}.bi-chat-left-text-fill::before{content:\"\"}.bi-chat-left-text::before{content:\"\"}.bi-chat-left::before{content:\"\"}.bi-chat-quote-fill::before{content:\"\"}.bi-chat-quote::before{content:\"\"}.bi-chat-right-dots-fill::before{content:\"\"}.bi-chat-right-dots::before{content:\"\"}.bi-chat-right-fill::before{content:\"\"}.bi-chat-right-quote-fill::before{content:\"\"}.bi-chat-right-quote::before{content:\"\"}.bi-chat-right-text-fill::before{content:\"\"}.bi-chat-right-text::before{content:\"\"}.bi-chat-right::before{content:\"\"}.bi-chat-square-dots-fill::before{content:\"\"}.bi-chat-square-dots::before{content:\"\"}.bi-chat-square-fill::before{content:\"\"}.bi-chat-square-quote-fill::before{content:\"\"}.bi-chat-square-quote::before{content:\"\"}.bi-chat-square-text-fill::before{content:\"\"}.bi-chat-square-text::before{content:\"\"}.bi-chat-square::before{content:\"\"}.bi-chat-text-fill::before{content:\"\"}.bi-chat-text::before{content:\"\"}.bi-chat::before{content:\"\"}.bi-check-all::before{content:\"\"}.bi-check-circle-fill::before{content:\"\"}.bi-check-circle::before{content:\"\"}.bi-check-square-fill::before{content:\"\"}.bi-check-square::before{content:\"\"}.bi-check::before{content:\"\"}.bi-check2-all::before{content:\"\"}.bi-check2-circle::before{content:\"\"}.bi-check2-square::before{content:\"\"}.bi-check2::before{content:\"\"}.bi-chevron-bar-contract::before{content:\"\"}.bi-chevron-bar-down::before{content:\"\"}.bi-chevron-bar-expand::before{content:\"\"}.bi-chevron-bar-left::before{content:\"\"}.bi-chevron-bar-right::before{content:\"\"}.bi-chevron-bar-up::before{content:\"\"}.bi-chevron-compact-down::before{content:\"\"}.bi-chevron-compact-left::before{content:\"\"}.bi-chevron-compact-right::before{content:\"\"}.bi-chevron-compact-up::before{content:\"\"}.bi-chevron-contract::before{content:\"\"}.bi-chevron-double-down::before{content:\"\"}.bi-chevron-double-left::before{content:\"\"}.bi-chevron-double-right::before{content:\"\"}.bi-chevron-double-up::before{content:\"\"}.bi-chevron-down::before{content:\"\"}.bi-chevron-expand::before{content:\"\"}.bi-chevron-left::before{content:\"\"}.bi-chevron-right::before{content:\"\"}.bi-chevron-up::before{content:\"\"}.bi-circle-fill::before{content:\"\"}.bi-circle-half::before{content:\"\"}.bi-circle-square::before{content:\"\"}.bi-circle::before{content:\"\"}.bi-clipboard-check::before{content:\"\"}.bi-clipboard-data::before{content:\"\"}.bi-clipboard-minus::before{content:\"\"}.bi-clipboard-plus::before{content:\"\"}.bi-clipboard-x::before{content:\"\"}.bi-clipboard::before{content:\"\"}.bi-clock-fill::before{content:\"\"}.bi-clock-history::before{content:\"\"}.bi-clock::before{content:\"\"}.bi-cloud-arrow-down-fill::before{content:\"\"}.bi-cloud-arrow-down::before{content:\"\"}.bi-cloud-arrow-up-fill::before{content:\"\"}.bi-cloud-arrow-up::before{content:\"\"}.bi-cloud-check-fill::before{content:\"\"}.bi-cloud-check::before{content:\"\"}.bi-cloud-download-fill::before{content:\"\"}.bi-cloud-download::before{content:\"\"}.bi-cloud-drizzle-fill::before{content:\"\"}.bi-cloud-drizzle::before{content:\"\"}.bi-cloud-fill::before{content:\"\"}.bi-cloud-fog-fill::before{content:\"\"}.bi-cloud-fog::before{content:\"\"}.bi-cloud-fog2-fill::before{content:\"\"}.bi-cloud-fog2::before{content:\"\"}.bi-cloud-hail-fill::before{content:\"\"}.bi-cloud-hail::before{content:\"\"}.bi-cloud-haze-fill::before{content:\"\"}.bi-cloud-haze::before{content:\"\"}.bi-cloud-haze2-fill::before{content:\"\"}.bi-cloud-lightning-fill::before{content:\"\"}.bi-cloud-lightning-rain-fill::before{content:\"\"}.bi-cloud-lightning-rain::before{content:\"\"}.bi-cloud-lightning::before{content:\"\"}.bi-cloud-minus-fill::before{content:\"\"}.bi-cloud-minus::before{content:\"\"}.bi-cloud-moon-fill::before{content:\"\"}.bi-cloud-moon::before{content:\"\"}.bi-cloud-plus-fill::before{content:\"\"}.bi-cloud-plus::before{content:\"\"}.bi-cloud-rain-fill::before{content:\"\"}.bi-cloud-rain-heavy-fill::before{content:\"\"}.bi-cloud-rain-heavy::before{content:\"\"}.bi-cloud-rain::before{content:\"\"}.bi-cloud-slash-fill::before{content:\"\"}.bi-cloud-slash::before{content:\"\"}.bi-cloud-sleet-fill::before{content:\"\"}.bi-cloud-sleet::before{content:\"\"}.bi-cloud-snow-fill::before{content:\"\"}.bi-cloud-snow::before{content:\"\"}.bi-cloud-sun-fill::before{content:\"\"}.bi-cloud-sun::before{content:\"\"}.bi-cloud-upload-fill::before{content:\"\"}.bi-cloud-upload::before{content:\"\"}.bi-cloud::before{content:\"\"}.bi-clouds-fill::before{content:\"\"}.bi-clouds::before{content:\"\"}.bi-cloudy-fill::before{content:\"\"}.bi-cloudy::before{content:\"\"}.bi-code-slash::before{content:\"\"}.bi-code-square::before{content:\"\"}.bi-code::before{content:\"\"}.bi-collection-fill::before{content:\"\"}.bi-collection-play-fill::before{content:\"\"}.bi-collection-play::before{content:\"\"}.bi-collection::before{content:\"\"}.bi-columns-gap::before{content:\"\"}.bi-columns::before{content:\"\"}.bi-command::before{content:\"\"}.bi-compass-fill::before{content:\"\"}.bi-compass::before{content:\"\"}.bi-cone-striped::before{content:\"\"}.bi-cone::before{content:\"\"}.bi-controller::before{content:\"\"}.bi-cpu-fill::before{content:\"\"}.bi-cpu::before{content:\"\"}.bi-credit-card-2-back-fill::before{content:\"\"}.bi-credit-card-2-back::before{content:\"\"}.bi-credit-card-2-front-fill::before{content:\"\"}.bi-credit-card-2-front::before{content:\"\"}.bi-credit-card-fill::before{content:\"\"}.bi-credit-card::before{content:\"\"}.bi-crop::before{content:\"\"}.bi-cup-fill::before{content:\"\"}.bi-cup-straw::before{content:\"\"}.bi-cup::before{content:\"\"}.bi-cursor-fill::before{content:\"\"}.bi-cursor-text::before{content:\"\"}.bi-cursor::before{content:\"\"}.bi-dash-circle-dotted::before{content:\"\"}.bi-dash-circle-fill::before{content:\"\"}.bi-dash-circle::before{content:\"\"}.bi-dash-square-dotted::before{content:\"\"}.bi-dash-square-fill::before{content:\"\"}.bi-dash-square::before{content:\"\"}.bi-dash::before{content:\"\"}.bi-diagram-2-fill::before{content:\"\"}.bi-diagram-2::before{content:\"\"}.bi-diagram-3-fill::before{content:\"\"}.bi-diagram-3::before{content:\"\"}.bi-diamond-fill::before{content:\"\"}.bi-diamond-half::before{content:\"\"}.bi-diamond::before{content:\"\"}.bi-dice-1-fill::before{content:\"\"}.bi-dice-1::before{content:\"\"}.bi-dice-2-fill::before{content:\"\"}.bi-dice-2::before{content:\"\"}.bi-dice-3-fill::before{content:\"\"}.bi-dice-3::before{content:\"\"}.bi-dice-4-fill::before{content:\"\"}.bi-dice-4::before{content:\"\"}.bi-dice-5-fill::before{content:\"\"}.bi-dice-5::before{content:\"\"}.bi-dice-6-fill::before{content:\"\"}.bi-dice-6::before{content:\"\"}.bi-disc-fill::before{content:\"\"}.bi-disc::before{content:\"\"}.bi-discord::before{content:\"\"}.bi-display-fill::before{content:\"\"}.bi-display::before{content:\"\"}.bi-distribute-horizontal::before{content:\"\"}.bi-distribute-vertical::before{content:\"\"}.bi-door-closed-fill::before{content:\"\"}.bi-door-closed::before{content:\"\"}.bi-door-open-fill::before{content:\"\"}.bi-door-open::before{content:\"\"}.bi-dot::before{content:\"\"}.bi-download::before{content:\"\"}.bi-droplet-fill::before{content:\"\"}.bi-droplet-half::before{content:\"\"}.bi-droplet::before{content:\"\"}.bi-earbuds::before{content:\"\"}.bi-easel-fill::before{content:\"\"}.bi-easel::before{content:\"\"}.bi-egg-fill::before{content:\"\"}.bi-egg-fried::before{content:\"\"}.bi-egg::before{content:\"\"}.bi-eject-fill::before{content:\"\"}.bi-eject::before{content:\"\"}.bi-emoji-angry-fill::before{content:\"\"}.bi-emoji-angry::before{content:\"\"}.bi-emoji-dizzy-fill::before{content:\"\"}.bi-emoji-dizzy::before{content:\"\"}.bi-emoji-expressionless-fill::before{content:\"\"}.bi-emoji-expressionless::before{content:\"\"}.bi-emoji-frown-fill::before{content:\"\"}.bi-emoji-frown::before{content:\"\"}.bi-emoji-heart-eyes-fill::before{content:\"\"}.bi-emoji-heart-eyes::before{content:\"\"}.bi-emoji-laughing-fill::before{content:\"\"}.bi-emoji-laughing::before{content:\"\"}.bi-emoji-neutral-fill::before{content:\"\"}.bi-emoji-neutral::before{content:\"\"}.bi-emoji-smile-fill::before{content:\"\"}.bi-emoji-smile-upside-down-fill::before{content:\"\"}.bi-emoji-smile-upside-down::before{content:\"\"}.bi-emoji-smile::before{content:\"\"}.bi-emoji-sunglasses-fill::before{content:\"\"}.bi-emoji-sunglasses::before{content:\"\"}.bi-emoji-wink-fill::before{content:\"\"}.bi-emoji-wink::before{content:\"\"}.bi-envelope-fill::before{content:\"\"}.bi-envelope-open-fill::before{content:\"\"}.bi-envelope-open::before{content:\"\"}.bi-envelope::before{content:\"\"}.bi-eraser-fill::before{content:\"\"}.bi-eraser::before{content:\"\"}.bi-exclamation-circle-fill::before{content:\"\"}.bi-exclamation-circle::before{content:\"\"}.bi-exclamation-diamond-fill::before{content:\"\"}.bi-exclamation-diamond::before{content:\"\"}.bi-exclamation-octagon-fill::before{content:\"\"}.bi-exclamation-octagon::before{content:\"\"}.bi-exclamation-square-fill::before{content:\"\"}.bi-exclamation-square::before{content:\"\"}.bi-exclamation-triangle-fill::before{content:\"\"}.bi-exclamation-triangle::before{content:\"\"}.bi-exclamation::before{content:\"\"}.bi-exclude::before{content:\"\"}.bi-eye-fill::before{content:\"\"}.bi-eye-slash-fill::before{content:\"\"}.bi-eye-slash::before{content:\"\"}.bi-eye::before{content:\"\"}.bi-eyedropper::before{content:\"\"}.bi-eyeglasses::before{content:\"\"}.bi-facebook::before{content:\"\"}.bi-file-arrow-down-fill::before{content:\"\"}.bi-file-arrow-down::before{content:\"\"}.bi-file-arrow-up-fill::before{content:\"\"}.bi-file-arrow-up::before{content:\"\"}.bi-file-bar-graph-fill::before{content:\"\"}.bi-file-bar-graph::before{content:\"\"}.bi-file-binary-fill::before{content:\"\"}.bi-file-binary::before{content:\"\"}.bi-file-break-fill::before{content:\"\"}.bi-file-break::before{content:\"\"}.bi-file-check-fill::before{content:\"\"}.bi-file-check::before{content:\"\"}.bi-file-code-fill::before{content:\"\"}.bi-file-code::before{content:\"\"}.bi-file-diff-fill::before{content:\"\"}.bi-file-diff::before{content:\"\"}.bi-file-earmark-arrow-down-fill::before{content:\"\"}.bi-file-earmark-arrow-down::before{content:\"\"}.bi-file-earmark-arrow-up-fill::before{content:\"\"}.bi-file-earmark-arrow-up::before{content:\"\"}.bi-file-earmark-bar-graph-fill::before{content:\"\"}.bi-file-earmark-bar-graph::before{content:\"\"}.bi-file-earmark-binary-fill::before{content:\"\"}.bi-file-earmark-binary::before{content:\"\"}.bi-file-earmark-break-fill::before{content:\"\"}.bi-file-earmark-break::before{content:\"\"}.bi-file-earmark-check-fill::before{content:\"\"}.bi-file-earmark-check::before{content:\"\"}.bi-file-earmark-code-fill::before{content:\"\"}.bi-file-earmark-code::before{content:\"\"}.bi-file-earmark-diff-fill::before{content:\"\"}.bi-file-earmark-diff::before{content:\"\"}.bi-file-earmark-easel-fill::before{content:\"\"}.bi-file-earmark-easel::before{content:\"\"}.bi-file-earmark-excel-fill::before{content:\"\"}.bi-file-earmark-excel::before{content:\"\"}.bi-file-earmark-fill::before{content:\"\"}.bi-file-earmark-font-fill::before{content:\"\"}.bi-file-earmark-font::before{content:\"\"}.bi-file-earmark-image-fill::before{content:\"\"}.bi-file-earmark-image::before{content:\"\"}.bi-file-earmark-lock-fill::before{content:\"\"}.bi-file-earmark-lock::before{content:\"\"}.bi-file-earmark-lock2-fill::before{content:\"\"}.bi-file-earmark-lock2::before{content:\"\"}.bi-file-earmark-medical-fill::before{content:\"\"}.bi-file-earmark-medical::before{content:\"\"}.bi-file-earmark-minus-fill::before{content:\"\"}.bi-file-earmark-minus::before{content:\"\"}.bi-file-earmark-music-fill::before{content:\"\"}.bi-file-earmark-music::before{content:\"\"}.bi-file-earmark-person-fill::before{content:\"\"}.bi-file-earmark-person::before{content:\"\"}.bi-file-earmark-play-fill::before{content:\"\"}.bi-file-earmark-play::before{content:\"\"}.bi-file-earmark-plus-fill::before{content:\"\"}.bi-file-earmark-plus::before{content:\"\"}.bi-file-earmark-post-fill::before{content:\"\"}.bi-file-earmark-post::before{content:\"\"}.bi-file-earmark-ppt-fill::before{content:\"\"}.bi-file-earmark-ppt::before{content:\"\"}.bi-file-earmark-richtext-fill::before{content:\"\"}.bi-file-earmark-richtext::before{content:\"\"}.bi-file-earmark-ruled-fill::before{content:\"\"}.bi-file-earmark-ruled::before{content:\"\"}.bi-file-earmark-slides-fill::before{content:\"\"}.bi-file-earmark-slides::before{content:\"\"}.bi-file-earmark-spreadsheet-fill::before{content:\"\"}.bi-file-earmark-spreadsheet::before{content:\"\"}.bi-file-earmark-text-fill::before{content:\"\"}.bi-file-earmark-text::before{content:\"\"}.bi-file-earmark-word-fill::before{content:\"\"}.bi-file-earmark-word::before{content:\"\"}.bi-file-earmark-x-fill::before{content:\"\"}.bi-file-earmark-x::before{content:\"\"}.bi-file-earmark-zip-fill::before{content:\"\"}.bi-file-earmark-zip::before{content:\"\"}.bi-file-earmark::before{content:\"\"}.bi-file-easel-fill::before{content:\"\"}.bi-file-easel::before{content:\"\"}.bi-file-excel-fill::before{content:\"\"}.bi-file-excel::before{content:\"\"}.bi-file-fill::before{content:\"\"}.bi-file-font-fill::before{content:\"\"}.bi-file-font::before{content:\"\"}.bi-file-image-fill::before{content:\"\"}.bi-file-image::before{content:\"\"}.bi-file-lock-fill::before{content:\"\"}.bi-file-lock::before{content:\"\"}.bi-file-lock2-fill::before{content:\"\"}.bi-file-lock2::before{content:\"\"}.bi-file-medical-fill::before{content:\"\"}.bi-file-medical::before{content:\"\"}.bi-file-minus-fill::before{content:\"\"}.bi-file-minus::before{content:\"\"}.bi-file-music-fill::before{content:\"\"}.bi-file-music::before{content:\"\"}.bi-file-person-fill::before{content:\"\"}.bi-file-person::before{content:\"\"}.bi-file-play-fill::before{content:\"\"}.bi-file-play::before{content:\"\"}.bi-file-plus-fill::before{content:\"\"}.bi-file-plus::before{content:\"\"}.bi-file-post-fill::before{content:\"\"}.bi-file-post::before{content:\"\"}.bi-file-ppt-fill::before{content:\"\"}.bi-file-ppt::before{content:\"\"}.bi-file-richtext-fill::before{content:\"\"}.bi-file-richtext::before{content:\"\"}.bi-file-ruled-fill::before{content:\"\"}.bi-file-ruled::before{content:\"\"}.bi-file-slides-fill::before{content:\"\"}.bi-file-slides::before{content:\"\"}.bi-file-spreadsheet-fill::before{content:\"\"}.bi-file-spreadsheet::before{content:\"\"}.bi-file-text-fill::before{content:\"\"}.bi-file-text::before{content:\"\"}.bi-file-word-fill::before{content:\"\"}.bi-file-word::before{content:\"\"}.bi-file-x-fill::before{content:\"\"}.bi-file-x::before{content:\"\"}.bi-file-zip-fill::before{content:\"\"}.bi-file-zip::before{content:\"\"}.bi-file::before{content:\"\"}.bi-files-alt::before{content:\"\"}.bi-files::before{content:\"\"}.bi-film::before{content:\"\"}.bi-filter-circle-fill::before{content:\"\"}.bi-filter-circle::before{content:\"\"}.bi-filter-left::before{content:\"\"}.bi-filter-right::before{content:\"\"}.bi-filter-square-fill::before{content:\"\"}.bi-filter-square::before{content:\"\"}.bi-filter::before{content:\"\"}.bi-flag-fill::before{content:\"\"}.bi-flag::before{content:\"\"}.bi-flower1::before{content:\"\"}.bi-flower2::before{content:\"\"}.bi-flower3::before{content:\"\"}.bi-folder-check::before{content:\"\"}.bi-folder-fill::before{content:\"\"}.bi-folder-minus::before{content:\"\"}.bi-folder-plus::before{content:\"\"}.bi-folder-symlink-fill::before{content:\"\"}.bi-folder-symlink::before{content:\"\"}.bi-folder-x::before{content:\"\"}.bi-folder::before{content:\"\"}.bi-folder2-open::before{content:\"\"}.bi-folder2::before{content:\"\"}.bi-fonts::before{content:\"\"}.bi-forward-fill::before{content:\"\"}.bi-forward::before{content:\"\"}.bi-front::before{content:\"\"}.bi-fullscreen-exit::before{content:\"\"}.bi-fullscreen::before{content:\"\"}.bi-funnel-fill::before{content:\"\"}.bi-funnel::before{content:\"\"}.bi-gear-fill::before{content:\"\"}.bi-gear-wide-connected::before{content:\"\"}.bi-gear-wide::before{content:\"\"}.bi-gear::before{content:\"\"}.bi-gem::before{content:\"\"}.bi-geo-alt-fill::before{content:\"\"}.bi-geo-alt::before{content:\"\"}.bi-geo-fill::before{content:\"\"}.bi-geo::before{content:\"\"}.bi-gift-fill::before{content:\"\"}.bi-gift::before{content:\"\"}.bi-github::before{content:\"\"}.bi-globe::before{content:\"\"}.bi-globe2::before{content:\"\"}.bi-google::before{content:\"\"}.bi-graph-down::before{content:\"\"}.bi-graph-up::before{content:\"\"}.bi-grid-1x2-fill::before{content:\"\"}.bi-grid-1x2::before{content:\"\"}.bi-grid-3x2-gap-fill::before{content:\"\"}.bi-grid-3x2-gap::before{content:\"\"}.bi-grid-3x2::before{content:\"\"}.bi-grid-3x3-gap-fill::before{content:\"\"}.bi-grid-3x3-gap::before{content:\"\"}.bi-grid-3x3::before{content:\"\"}.bi-grid-fill::before{content:\"\"}.bi-grid::before{content:\"\"}.bi-grip-horizontal::before{content:\"\"}.bi-grip-vertical::before{content:\"\"}.bi-hammer::before{content:\"\"}.bi-hand-index-fill::before{content:\"\"}.bi-hand-index-thumb-fill::before{content:\"\"}.bi-hand-index-thumb::before{content:\"\"}.bi-hand-index::before{content:\"\"}.bi-hand-thumbs-down-fill::before{content:\"\"}.bi-hand-thumbs-down::before{content:\"\"}.bi-hand-thumbs-up-fill::before{content:\"\"}.bi-hand-thumbs-up::before{content:\"\"}.bi-handbag-fill::before{content:\"\"}.bi-handbag::before{content:\"\"}.bi-hash::before{content:\"\"}.bi-hdd-fill::before{content:\"\"}.bi-hdd-network-fill::before{content:\"\"}.bi-hdd-network::before{content:\"\"}.bi-hdd-rack-fill::before{content:\"\"}.bi-hdd-rack::before{content:\"\"}.bi-hdd-stack-fill::before{content:\"\"}.bi-hdd-stack::before{content:\"\"}.bi-hdd::before{content:\"\"}.bi-headphones::before{content:\"\"}.bi-headset::before{content:\"\"}.bi-heart-fill::before{content:\"\"}.bi-heart-half::before{content:\"\"}.bi-heart::before{content:\"\"}.bi-heptagon-fill::before{content:\"\"}.bi-heptagon-half::before{content:\"\"}.bi-heptagon::before{content:\"\"}.bi-hexagon-fill::before{content:\"\"}.bi-hexagon-half::before{content:\"\"}.bi-hexagon::before{content:\"\"}.bi-hourglass-bottom::before{content:\"\"}.bi-hourglass-split::before{content:\"\"}.bi-hourglass-top::before{content:\"\"}.bi-hourglass::before{content:\"\"}.bi-house-door-fill::before{content:\"\"}.bi-house-door::before{content:\"\"}.bi-house-fill::before{content:\"\"}.bi-house::before{content:\"\"}.bi-hr::before{content:\"\"}.bi-hurricane::before{content:\"\"}.bi-image-alt::before{content:\"\"}.bi-image-fill::before{content:\"\"}.bi-image::before{content:\"\"}.bi-images::before{content:\"\"}.bi-inbox-fill::before{content:\"\"}.bi-inbox::before{content:\"\"}.bi-inboxes-fill::before{content:\"\"}.bi-inboxes::before{content:\"\"}.bi-info-circle-fill::before{content:\"\"}.bi-info-circle::before{content:\"\"}.bi-info-square-fill::before{content:\"\"}.bi-info-square::before{content:\"\"}.bi-info::before{content:\"\"}.bi-input-cursor-text::before{content:\"\"}.bi-input-cursor::before{content:\"\"}.bi-instagram::before{content:\"\"}.bi-intersect::before{content:\"\"}.bi-journal-album::before{content:\"\"}.bi-journal-arrow-down::before{content:\"\"}.bi-journal-arrow-up::before{content:\"\"}.bi-journal-bookmark-fill::before{content:\"\"}.bi-journal-bookmark::before{content:\"\"}.bi-journal-check::before{content:\"\"}.bi-journal-code::before{content:\"\"}.bi-journal-medical::before{content:\"\"}.bi-journal-minus::before{content:\"\"}.bi-journal-plus::before{content:\"\"}.bi-journal-richtext::before{content:\"\"}.bi-journal-text::before{content:\"\"}.bi-journal-x::before{content:\"\"}.bi-journal::before{content:\"\"}.bi-journals::before{content:\"\"}.bi-joystick::before{content:\"\"}.bi-justify-left::before{content:\"\"}.bi-justify-right::before{content:\"\"}.bi-justify::before{content:\"\"}.bi-kanban-fill::before{content:\"\"}.bi-kanban::before{content:\"\"}.bi-key-fill::before{content:\"\"}.bi-key::before{content:\"\"}.bi-keyboard-fill::before{content:\"\"}.bi-keyboard::before{content:\"\"}.bi-ladder::before{content:\"\"}.bi-lamp-fill::before{content:\"\"}.bi-lamp::before{content:\"\"}.bi-laptop-fill::before{content:\"\"}.bi-laptop::before{content:\"\"}.bi-layer-backward::before{content:\"\"}.bi-layer-forward::before{content:\"\"}.bi-layers-fill::before{content:\"\"}.bi-layers-half::before{content:\"\"}.bi-layers::before{content:\"\"}.bi-layout-sidebar-inset-reverse::before{content:\"\"}.bi-layout-sidebar-inset::before{content:\"\"}.bi-layout-sidebar-reverse::before{content:\"\"}.bi-layout-sidebar::before{content:\"\"}.bi-layout-split::before{content:\"\"}.bi-layout-text-sidebar-reverse::before{content:\"\"}.bi-layout-text-sidebar::before{content:\"\"}.bi-layout-text-window-reverse::before{content:\"\"}.bi-layout-text-window::before{content:\"\"}.bi-layout-three-columns::before{content:\"\"}.bi-layout-wtf::before{content:\"\"}.bi-life-preserver::before{content:\"\"}.bi-lightbulb-fill::before{content:\"\"}.bi-lightbulb-off-fill::before{content:\"\"}.bi-lightbulb-off::before{content:\"\"}.bi-lightbulb::before{content:\"\"}.bi-lightning-charge-fill::before{content:\"\"}.bi-lightning-charge::before{content:\"\"}.bi-lightning-fill::before{content:\"\"}.bi-lightning::before{content:\"\"}.bi-link-45deg::before{content:\"\"}.bi-link::before{content:\"\"}.bi-linkedin::before{content:\"\"}.bi-list-check::before{content:\"\"}.bi-list-nested::before{content:\"\"}.bi-list-ol::before{content:\"\"}.bi-list-stars::before{content:\"\"}.bi-list-task::before{content:\"\"}.bi-list-ul::before{content:\"\"}.bi-list::before{content:\"\"}.bi-lock-fill::before{content:\"\"}.bi-lock::before{content:\"\"}.bi-mailbox::before{content:\"\"}.bi-mailbox2::before{content:\"\"}.bi-map-fill::before{content:\"\"}.bi-map::before{content:\"\"}.bi-markdown-fill::before{content:\"\"}.bi-markdown::before{content:\"\"}.bi-mask::before{content:\"\"}.bi-megaphone-fill::before{content:\"\"}.bi-megaphone::before{content:\"\"}.bi-menu-app-fill::before{content:\"\"}.bi-menu-app::before{content:\"\"}.bi-menu-button-fill::before{content:\"\"}.bi-menu-button-wide-fill::before{content:\"\"}.bi-menu-button-wide::before{content:\"\"}.bi-menu-button::before{content:\"\"}.bi-menu-down::before{content:\"\"}.bi-menu-up::before{content:\"\"}.bi-mic-fill::before{content:\"\"}.bi-mic-mute-fill::before{content:\"\"}.bi-mic-mute::before{content:\"\"}.bi-mic::before{content:\"\"}.bi-minecart-loaded::before{content:\"\"}.bi-minecart::before{content:\"\"}.bi-moisture::before{content:\"\"}.bi-moon-fill::before{content:\"\"}.bi-moon-stars-fill::before{content:\"\"}.bi-moon-stars::before{content:\"\"}.bi-moon::before{content:\"\"}.bi-mouse-fill::before{content:\"\"}.bi-mouse::before{content:\"\"}.bi-mouse2-fill::before{content:\"\"}.bi-mouse2::before{content:\"\"}.bi-mouse3-fill::before{content:\"\"}.bi-mouse3::before{content:\"\"}.bi-music-note-beamed::before{content:\"\"}.bi-music-note-list::before{content:\"\"}.bi-music-note::before{content:\"\"}.bi-music-player-fill::before{content:\"\"}.bi-music-player::before{content:\"\"}.bi-newspaper::before{content:\"\"}.bi-node-minus-fill::before{content:\"\"}.bi-node-minus::before{content:\"\"}.bi-node-plus-fill::before{content:\"\"}.bi-node-plus::before{content:\"\"}.bi-nut-fill::before{content:\"\"}.bi-nut::before{content:\"\"}.bi-octagon-fill::before{content:\"\"}.bi-octagon-half::before{content:\"\"}.bi-octagon::before{content:\"\"}.bi-option::before{content:\"\"}.bi-outlet::before{content:\"\"}.bi-paint-bucket::before{content:\"\"}.bi-palette-fill::before{content:\"\"}.bi-palette::before{content:\"\"}.bi-palette2::before{content:\"\"}.bi-paperclip::before{content:\"\"}.bi-paragraph::before{content:\"\"}.bi-patch-check-fill::before{content:\"\"}.bi-patch-check::before{content:\"\"}.bi-patch-exclamation-fill::before{content:\"\"}.bi-patch-exclamation::before{content:\"\"}.bi-patch-minus-fill::before{content:\"\"}.bi-patch-minus::before{content:\"\"}.bi-patch-plus-fill::before{content:\"\"}.bi-patch-plus::before{content:\"\"}.bi-patch-question-fill::before{content:\"\"}.bi-patch-question::before{content:\"\"}.bi-pause-btn-fill::before{content:\"\"}.bi-pause-btn::before{content:\"\"}.bi-pause-circle-fill::before{content:\"\"}.bi-pause-circle::before{content:\"\"}.bi-pause-fill::before{content:\"\"}.bi-pause::before{content:\"\"}.bi-peace-fill::before{content:\"\"}.bi-peace::before{content:\"\"}.bi-pen-fill::before{content:\"\"}.bi-pen::before{content:\"\"}.bi-pencil-fill::before{content:\"\"}.bi-pencil-square::before{content:\"\"}.bi-pencil::before{content:\"\"}.bi-pentagon-fill::before{content:\"\"}.bi-pentagon-half::before{content:\"\"}.bi-pentagon::before{content:\"\"}.bi-people-fill::before{content:\"\"}.bi-people::before{content:\"\"}.bi-percent::before{content:\"\"}.bi-person-badge-fill::before{content:\"\"}.bi-person-badge::before{content:\"\"}.bi-person-bounding-box::before{content:\"\"}.bi-person-check-fill::before{content:\"\"}.bi-person-check::before{content:\"\"}.bi-person-circle::before{content:\"\"}.bi-person-dash-fill::before{content:\"\"}.bi-person-dash::before{content:\"\"}.bi-person-fill::before{content:\"\"}.bi-person-lines-fill::before{content:\"\"}.bi-person-plus-fill::before{content:\"\"}.bi-person-plus::before{content:\"\"}.bi-person-square::before{content:\"\"}.bi-person-x-fill::before{content:\"\"}.bi-person-x::before{content:\"\"}.bi-person::before{content:\"\"}.bi-phone-fill::before{content:\"\"}.bi-phone-landscape-fill::before{content:\"\"}.bi-phone-landscape::before{content:\"\"}.bi-phone-vibrate-fill::before{content:\"\"}.bi-phone-vibrate::before{content:\"\"}.bi-phone::before{content:\"\"}.bi-pie-chart-fill::before{content:\"\"}.bi-pie-chart::before{content:\"\"}.bi-pin-angle-fill::before{content:\"\"}.bi-pin-angle::before{content:\"\"}.bi-pin-fill::before{content:\"\"}.bi-pin::before{content:\"\"}.bi-pip-fill::before{content:\"\"}.bi-pip::before{content:\"\"}.bi-play-btn-fill::before{content:\"\"}.bi-play-btn::before{content:\"\"}.bi-play-circle-fill::before{content:\"\"}.bi-play-circle::before{content:\"\"}.bi-play-fill::before{content:\"\"}.bi-play::before{content:\"\"}.bi-plug-fill::before{content:\"\"}.bi-plug::before{content:\"\"}.bi-plus-circle-dotted::before{content:\"\"}.bi-plus-circle-fill::before{content:\"\"}.bi-plus-circle::before{content:\"\"}.bi-plus-square-dotted::before{content:\"\"}.bi-plus-square-fill::before{content:\"\"}.bi-plus-square::before{content:\"\"}.bi-plus::before{content:\"\"}.bi-power::before{content:\"\"}.bi-printer-fill::before{content:\"\"}.bi-printer::before{content:\"\"}.bi-puzzle-fill::before{content:\"\"}.bi-puzzle::before{content:\"\"}.bi-question-circle-fill::before{content:\"\"}.bi-question-circle::before{content:\"\"}.bi-question-diamond-fill::before{content:\"\"}.bi-question-diamond::before{content:\"\"}.bi-question-octagon-fill::before{content:\"\"}.bi-question-octagon::before{content:\"\"}.bi-question-square-fill::before{content:\"\"}.bi-question-square::before{content:\"\"}.bi-question::before{content:\"\"}.bi-rainbow::before{content:\"\"}.bi-receipt-cutoff::before{content:\"\"}.bi-receipt::before{content:\"\"}.bi-reception-0::before{content:\"\"}.bi-reception-1::before{content:\"\"}.bi-reception-2::before{content:\"\"}.bi-reception-3::before{content:\"\"}.bi-reception-4::before{content:\"\"}.bi-record-btn-fill::before{content:\"\"}.bi-record-btn::before{content:\"\"}.bi-record-circle-fill::before{content:\"\"}.bi-record-circle::before{content:\"\"}.bi-record-fill::before{content:\"\"}.bi-record::before{content:\"\"}.bi-record2-fill::before{content:\"\"}.bi-record2::before{content:\"\"}.bi-reply-all-fill::before{content:\"\"}.bi-reply-all::before{content:\"\"}.bi-reply-fill::before{content:\"\"}.bi-reply::before{content:\"\"}.bi-rss-fill::before{content:\"\"}.bi-rss::before{content:\"\"}.bi-rulers::before{content:\"\"}.bi-save-fill::before{content:\"\"}.bi-save::before{content:\"\"}.bi-save2-fill::before{content:\"\"}.bi-save2::before{content:\"\"}.bi-scissors::before{content:\"\"}.bi-screwdriver::before{content:\"\"}.bi-search::before{content:\"\"}.bi-segmented-nav::before{content:\"\"}.bi-server::before{content:\"\"}.bi-share-fill::before{content:\"\"}.bi-share::before{content:\"\"}.bi-shield-check::before{content:\"\"}.bi-shield-exclamation::before{content:\"\"}.bi-shield-fill-check::before{content:\"\"}.bi-shield-fill-exclamation::before{content:\"\"}.bi-shield-fill-minus::before{content:\"\"}.bi-shield-fill-plus::before{content:\"\"}.bi-shield-fill-x::before{content:\"\"}.bi-shield-fill::before{content:\"\"}.bi-shield-lock-fill::before{content:\"\"}.bi-shield-lock::before{content:\"\"}.bi-shield-minus::before{content:\"\"}.bi-shield-plus::before{content:\"\"}.bi-shield-shaded::before{content:\"\"}.bi-shield-slash-fill::before{content:\"\"}.bi-shield-slash::before{content:\"\"}.bi-shield-x::before{content:\"\"}.bi-shield::before{content:\"\"}.bi-shift-fill::before{content:\"\"}.bi-shift::before{content:\"\"}.bi-shop-window::before{content:\"\"}.bi-shop::before{content:\"\"}.bi-shuffle::before{content:\"\"}.bi-signpost-2-fill::before{content:\"\"}.bi-signpost-2::before{content:\"\"}.bi-signpost-fill::before{content:\"\"}.bi-signpost-split-fill::before{content:\"\"}.bi-signpost-split::before{content:\"\"}.bi-signpost::before{content:\"\"}.bi-sim-fill::before{content:\"\"}.bi-sim::before{content:\"\"}.bi-skip-backward-btn-fill::before{content:\"\"}.bi-skip-backward-btn::before{content:\"\"}.bi-skip-backward-circle-fill::before{content:\"\"}.bi-skip-backward-circle::before{content:\"\"}.bi-skip-backward-fill::before{content:\"\"}.bi-skip-backward::before{content:\"\"}.bi-skip-end-btn-fill::before{content:\"\"}.bi-skip-end-btn::before{content:\"\"}.bi-skip-end-circle-fill::before{content:\"\"}.bi-skip-end-circle::before{content:\"\"}.bi-skip-end-fill::before{content:\"\"}.bi-skip-end::before{content:\"\"}.bi-skip-forward-btn-fill::before{content:\"\"}.bi-skip-forward-btn::before{content:\"\"}.bi-skip-forward-circle-fill::before{content:\"\"}.bi-skip-forward-circle::before{content:\"\"}.bi-skip-forward-fill::before{content:\"\"}.bi-skip-forward::before{content:\"\"}.bi-skip-start-btn-fill::before{content:\"\"}.bi-skip-start-btn::before{content:\"\"}.bi-skip-start-circle-fill::before{content:\"\"}.bi-skip-start-circle::before{content:\"\"}.bi-skip-start-fill::before{content:\"\"}.bi-skip-start::before{content:\"\"}.bi-slack::before{content:\"\"}.bi-slash-circle-fill::before{content:\"\"}.bi-slash-circle::before{content:\"\"}.bi-slash-square-fill::before{content:\"\"}.bi-slash-square::before{content:\"\"}.bi-slash::before{content:\"\"}.bi-sliders::before{content:\"\"}.bi-smartwatch::before{content:\"\"}.bi-snow::before{content:\"\"}.bi-snow2::before{content:\"\"}.bi-snow3::before{content:\"\"}.bi-sort-alpha-down-alt::before{content:\"\"}.bi-sort-alpha-down::before{content:\"\"}.bi-sort-alpha-up-alt::before{content:\"\"}.bi-sort-alpha-up::before{content:\"\"}.bi-sort-down-alt::before{content:\"\"}.bi-sort-down::before{content:\"\"}.bi-sort-numeric-down-alt::before{content:\"\"}.bi-sort-numeric-down::before{content:\"\"}.bi-sort-numeric-up-alt::before{content:\"\"}.bi-sort-numeric-up::before{content:\"\"}.bi-sort-up-alt::before{content:\"\"}.bi-sort-up::before{content:\"\"}.bi-soundwave::before{content:\"\"}.bi-speaker-fill::before{content:\"\"}.bi-speaker::before{content:\"\"}.bi-speedometer::before{content:\"\"}.bi-speedometer2::before{content:\"\"}.bi-spellcheck::before{content:\"\"}.bi-square-fill::before{content:\"\"}.bi-square-half::before{content:\"\"}.bi-square::before{content:\"\"}.bi-stack::before{content:\"\"}.bi-star-fill::before{content:\"\"}.bi-star-half::before{content:\"\"}.bi-star::before{content:\"\"}.bi-stars::before{content:\"\"}.bi-stickies-fill::before{content:\"\"}.bi-stickies::before{content:\"\"}.bi-sticky-fill::before{content:\"\"}.bi-sticky::before{content:\"\"}.bi-stop-btn-fill::before{content:\"\"}.bi-stop-btn::before{content:\"\"}.bi-stop-circle-fill::before{content:\"\"}.bi-stop-circle::before{content:\"\"}.bi-stop-fill::before{content:\"\"}.bi-stop::before{content:\"\"}.bi-stoplights-fill::before{content:\"\"}.bi-stoplights::before{content:\"\"}.bi-stopwatch-fill::before{content:\"\"}.bi-stopwatch::before{content:\"\"}.bi-subtract::before{content:\"\"}.bi-suit-club-fill::before{content:\"\"}.bi-suit-club::before{content:\"\"}.bi-suit-diamond-fill::before{content:\"\"}.bi-suit-diamond::before{content:\"\"}.bi-suit-heart-fill::before{content:\"\"}.bi-suit-heart::before{content:\"\"}.bi-suit-spade-fill::before{content:\"\"}.bi-suit-spade::before{content:\"\"}.bi-sun-fill::before{content:\"\"}.bi-sun::before{content:\"\"}.bi-sunglasses::before{content:\"\"}.bi-sunrise-fill::before{content:\"\"}.bi-sunrise::before{content:\"\"}.bi-sunset-fill::before{content:\"\"}.bi-sunset::before{content:\"\"}.bi-symmetry-horizontal::before{content:\"\"}.bi-symmetry-vertical::before{content:\"\"}.bi-table::before{content:\"\"}.bi-tablet-fill::before{content:\"\"}.bi-tablet-landscape-fill::before{content:\"\"}.bi-tablet-landscape::before{content:\"\"}.bi-tablet::before{content:\"\"}.bi-tag-fill::before{content:\"\"}.bi-tag::before{content:\"\"}.bi-tags-fill::before{content:\"\"}.bi-tags::before{content:\"\"}.bi-telegram::before{content:\"\"}.bi-telephone-fill::before{content:\"\"}.bi-telephone-forward-fill::before{content:\"\"}.bi-telephone-forward::before{content:\"\"}.bi-telephone-inbound-fill::before{content:\"\"}.bi-telephone-inbound::before{content:\"\"}.bi-telephone-minus-fill::before{content:\"\"}.bi-telephone-minus::before{content:\"\"}.bi-telephone-outbound-fill::before{content:\"\"}.bi-telephone-outbound::before{content:\"\"}.bi-telephone-plus-fill::before{content:\"\"}.bi-telephone-plus::before{content:\"\"}.bi-telephone-x-fill::before{content:\"\"}.bi-telephone-x::before{content:\"\"}.bi-telephone::before{content:\"\"}.bi-terminal-fill::before{content:\"\"}.bi-terminal::before{content:\"\"}.bi-text-center::before{content:\"\"}.bi-text-indent-left::before{content:\"\"}.bi-text-indent-right::before{content:\"\"}.bi-text-left::before{content:\"\"}.bi-text-paragraph::before{content:\"\"}.bi-text-right::before{content:\"\"}.bi-textarea-resize::before{content:\"\"}.bi-textarea-t::before{content:\"\"}.bi-textarea::before{content:\"\"}.bi-thermometer-half::before{content:\"\"}.bi-thermometer-high::before{content:\"\"}.bi-thermometer-low::before{content:\"\"}.bi-thermometer-snow::before{content:\"\"}.bi-thermometer-sun::before{content:\"\"}.bi-thermometer::before{content:\"\"}.bi-three-dots-vertical::before{content:\"\"}.bi-three-dots::before{content:\"\"}.bi-toggle-off::before{content:\"\"}.bi-toggle-on::before{content:\"\"}.bi-toggle2-off::before{content:\"\"}.bi-toggle2-on::before{content:\"\"}.bi-toggles::before{content:\"\"}.bi-toggles2::before{content:\"\"}.bi-tools::before{content:\"\"}.bi-tornado::before{content:\"\"}.bi-trash-fill::before{content:\"\"}.bi-trash::before{content:\"\"}.bi-trash2-fill::before{content:\"\"}.bi-trash2::before{content:\"\"}.bi-tree-fill::before{content:\"\"}.bi-tree::before{content:\"\"}.bi-triangle-fill::before{content:\"\"}.bi-triangle-half::before{content:\"\"}.bi-triangle::before{content:\"\"}.bi-trophy-fill::before{content:\"\"}.bi-trophy::before{content:\"\"}.bi-tropical-storm::before{content:\"\"}.bi-truck-flatbed::before{content:\"\"}.bi-truck::before{content:\"\"}.bi-tsunami::before{content:\"\"}.bi-tv-fill::before{content:\"\"}.bi-tv::before{content:\"\"}.bi-twitch::before{content:\"\"}.bi-twitter::before{content:\"\"}.bi-type-bold::before{content:\"\"}.bi-type-h1::before{content:\"\"}.bi-type-h2::before{content:\"\"}.bi-type-h3::before{content:\"\"}.bi-type-italic::before{content:\"\"}.bi-type-strikethrough::before{content:\"\"}.bi-type-underline::before{content:\"\"}.bi-type::before{content:\"\"}.bi-ui-checks-grid::before{content:\"\"}.bi-ui-checks::before{content:\"\"}.bi-ui-radios-grid::before{content:\"\"}.bi-ui-radios::before{content:\"\"}.bi-umbrella-fill::before{content:\"\"}.bi-umbrella::before{content:\"\"}.bi-union::before{content:\"\"}.bi-unlock-fill::before{content:\"\"}.bi-unlock::before{content:\"\"}.bi-upc-scan::before{content:\"\"}.bi-upc::before{content:\"\"}.bi-upload::before{content:\"\"}.bi-vector-pen::before{content:\"\"}.bi-view-list::before{content:\"\"}.bi-view-stacked::before{content:\"\"}.bi-vinyl-fill::before{content:\"\"}.bi-vinyl::before{content:\"\"}.bi-voicemail::before{content:\"\"}.bi-volume-down-fill::before{content:\"\"}.bi-volume-down::before{content:\"\"}.bi-volume-mute-fill::before{content:\"\"}.bi-volume-mute::before{content:\"\"}.bi-volume-off-fill::before{content:\"\"}.bi-volume-off::before{content:\"\"}.bi-volume-up-fill::before{content:\"\"}.bi-volume-up::before{content:\"\"}.bi-vr::before{content:\"\"}.bi-wallet-fill::before{content:\"\"}.bi-wallet::before{content:\"\"}.bi-wallet2::before{content:\"\"}.bi-watch::before{content:\"\"}.bi-water::before{content:\"\"}.bi-whatsapp::before{content:\"\"}.bi-wifi-1::before{content:\"\"}.bi-wifi-2::before{content:\"\"}.bi-wifi-off::before{content:\"\"}.bi-wifi::before{content:\"\"}.bi-wind::before{content:\"\"}.bi-window-dock::before{content:\"\"}.bi-window-sidebar::before{content:\"\"}.bi-window::before{content:\"\"}.bi-wrench::before{content:\"\"}.bi-x-circle-fill::before{content:\"\"}.bi-x-circle::before{content:\"\"}.bi-x-diamond-fill::before{content:\"\"}.bi-x-diamond::before{content:\"\"}.bi-x-octagon-fill::before{content:\"\"}.bi-x-octagon::before{content:\"\"}.bi-x-square-fill::before{content:\"\"}.bi-x-square::before{content:\"\"}.bi-x::before{content:\"\"}.bi-youtube::before{content:\"\"}.bi-zoom-in::before{content:\"\"}.bi-zoom-out::before{content:\"\"}.bi-bank::before{content:\"\"}.bi-bank2::before{content:\"\"}.bi-bell-slash-fill::before{content:\"\"}.bi-bell-slash::before{content:\"\"}.bi-cash-coin::before{content:\"\"}.bi-check-lg::before{content:\"\"}.bi-coin::before{content:\"\"}.bi-currency-bitcoin::before{content:\"\"}.bi-currency-dollar::before{content:\"\"}.bi-currency-euro::before{content:\"\"}.bi-currency-exchange::before{content:\"\"}.bi-currency-pound::before{content:\"\"}.bi-currency-yen::before{content:\"\"}.bi-dash-lg::before{content:\"\"}.bi-exclamation-lg::before{content:\"\"}.bi-file-earmark-pdf-fill::before{content:\"\"}.bi-file-earmark-pdf::before{content:\"\"}.bi-file-pdf-fill::before{content:\"\"}.bi-file-pdf::before{content:\"\"}.bi-gender-ambiguous::before{content:\"\"}.bi-gender-female::before{content:\"\"}.bi-gender-male::before{content:\"\"}.bi-gender-trans::before{content:\"\"}.bi-headset-vr::before{content:\"\"}.bi-info-lg::before{content:\"\"}.bi-mastodon::before{content:\"\"}.bi-messenger::before{content:\"\"}.bi-piggy-bank-fill::before{content:\"\"}.bi-piggy-bank::before{content:\"\"}.bi-pin-map-fill::before{content:\"\"}.bi-pin-map::before{content:\"\"}.bi-plus-lg::before{content:\"\"}.bi-question-lg::before{content:\"\"}.bi-recycle::before{content:\"\"}.bi-reddit::before{content:\"\"}.bi-safe-fill::before{content:\"\"}.bi-safe2-fill::before{content:\"\"}.bi-safe2::before{content:\"\"}.bi-sd-card-fill::before{content:\"\"}.bi-sd-card::before{content:\"\"}.bi-skype::before{content:\"\"}.bi-slash-lg::before{content:\"\"}.bi-translate::before{content:\"\"}.bi-x-lg::before{content:\"\"}.bi-safe::before{content:\"\"}.bi-apple::before{content:\"\"}.bi-microsoft::before{content:\"\"}.bi-windows::before{content:\"\"}.bi-behance::before{content:\"\"}.bi-dribbble::before{content:\"\"}.bi-line::before{content:\"\"}.bi-medium::before{content:\"\"}.bi-paypal::before{content:\"\"}.bi-pinterest::before{content:\"\"}.bi-signal::before{content:\"\"}.bi-snapchat::before{content:\"\"}.bi-spotify::before{content:\"\"}.bi-stack-overflow::before{content:\"\"}.bi-strava::before{content:\"\"}.bi-wordpress::before{content:\"\"}.bi-vimeo::before{content:\"\"}.bi-activity::before{content:\"\"}.bi-easel2-fill::before{content:\"\"}.bi-easel2::before{content:\"\"}.bi-easel3-fill::before{content:\"\"}.bi-easel3::before{content:\"\"}.bi-fan::before{content:\"\"}.bi-fingerprint::before{content:\"\"}.bi-graph-down-arrow::before{content:\"\"}.bi-graph-up-arrow::before{content:\"\"}.bi-hypnotize::before{content:\"\"}.bi-magic::before{content:\"\"}.bi-person-rolodex::before{content:\"\"}.bi-person-video::before{content:\"\"}.bi-person-video2::before{content:\"\"}.bi-person-video3::before{content:\"\"}.bi-person-workspace::before{content:\"\"}.bi-radioactive::before{content:\"\"}.bi-webcam-fill::before{content:\"\"}.bi-webcam::before{content:\"\"}.bi-yin-yang::before{content:\"\"}.bi-bandaid-fill::before{content:\"\"}.bi-bandaid::before{content:\"\"}.bi-bluetooth::before{content:\"\"}.bi-body-text::before{content:\"\"}.bi-boombox::before{content:\"\"}.bi-boxes::before{content:\"\"}.bi-dpad-fill::before{content:\"\"}.bi-dpad::before{content:\"\"}.bi-ear-fill::before{content:\"\"}.bi-ear::before{content:\"\"}.bi-envelope-check-fill::before{content:\"\"}.bi-envelope-check::before{content:\"\"}.bi-envelope-dash-fill::before{content:\"\"}.bi-envelope-dash::before{content:\"\"}.bi-envelope-exclamation-fill::before{content:\"\"}.bi-envelope-exclamation::before{content:\"\"}.bi-envelope-plus-fill::before{content:\"\"}.bi-envelope-plus::before{content:\"\"}.bi-envelope-slash-fill::before{content:\"\"}.bi-envelope-slash::before{content:\"\"}.bi-envelope-x-fill::before{content:\"\"}.bi-envelope-x::before{content:\"\"}.bi-explicit-fill::before{content:\"\"}.bi-explicit::before{content:\"\"}.bi-git::before{content:\"\"}.bi-infinity::before{content:\"\"}.bi-list-columns-reverse::before{content:\"\"}.bi-list-columns::before{content:\"\"}.bi-meta::before{content:\"\"}.bi-nintendo-switch::before{content:\"\"}.bi-pc-display-horizontal::before{content:\"\"}.bi-pc-display::before{content:\"\"}.bi-pc-horizontal::before{content:\"\"}.bi-pc::before{content:\"\"}.bi-playstation::before{content:\"\"}.bi-plus-slash-minus::before{content:\"\"}.bi-projector-fill::before{content:\"\"}.bi-projector::before{content:\"\"}.bi-qr-code-scan::before{content:\"\"}.bi-qr-code::before{content:\"\"}.bi-quora::before{content:\"\"}.bi-quote::before{content:\"\"}.bi-robot::before{content:\"\"}.bi-send-check-fill::before{content:\"\"}.bi-send-check::before{content:\"\"}.bi-send-dash-fill::before{content:\"\"}.bi-send-dash::before{content:\"\"}.bi-send-exclamation-fill::before{content:\"\"}.bi-send-exclamation::before{content:\"\"}.bi-send-fill::before{content:\"\"}.bi-send-plus-fill::before{content:\"\"}.bi-send-plus::before{content:\"\"}.bi-send-slash-fill::before{content:\"\"}.bi-send-slash::before{content:\"\"}.bi-send-x-fill::before{content:\"\"}.bi-send-x::before{content:\"\"}.bi-send::before{content:\"\"}.bi-steam::before{content:\"\"}.bi-terminal-dash::before{content:\"\"}.bi-terminal-plus::before{content:\"\"}.bi-terminal-split::before{content:\"\"}.bi-ticket-detailed-fill::before{content:\"\"}.bi-ticket-detailed::before{content:\"\"}.bi-ticket-fill::before{content:\"\"}.bi-ticket-perforated-fill::before{content:\"\"}.bi-ticket-perforated::before{content:\"\"}.bi-ticket::before{content:\"\"}.bi-tiktok::before{content:\"\"}.bi-window-dash::before{content:\"\"}.bi-window-desktop::before{content:\"\"}.bi-window-fullscreen::before{content:\"\"}.bi-window-plus::before{content:\"\"}.bi-window-split::before{content:\"\"}.bi-window-stack::before{content:\"\"}.bi-window-x::before{content:\"\"}.bi-xbox::before{content:\"\"}.bi-ethernet::before{content:\"\"}.bi-hdmi-fill::before{content:\"\"}.bi-hdmi::before{content:\"\"}.bi-usb-c-fill::before{content:\"\"}.bi-usb-c::before{content:\"\"}.bi-usb-fill::before{content:\"\"}.bi-usb-plug-fill::before{content:\"\"}.bi-usb-plug::before{content:\"\"}.bi-usb-symbol::before{content:\"\"}.bi-usb::before{content:\"\"}.bi-boombox-fill::before{content:\"\"}.bi-displayport::before{content:\"\"}.bi-gpu-card::before{content:\"\"}.bi-memory::before{content:\"\"}.bi-modem-fill::before{content:\"\"}.bi-modem::before{content:\"\"}.bi-motherboard-fill::before{content:\"\"}.bi-motherboard::before{content:\"\"}.bi-optical-audio-fill::before{content:\"\"}.bi-optical-audio::before{content:\"\"}.bi-pci-card::before{content:\"\"}.bi-router-fill::before{content:\"\"}.bi-router::before{content:\"\"}.bi-thunderbolt-fill::before{content:\"\"}.bi-thunderbolt::before{content:\"\"}.bi-usb-drive-fill::before{content:\"\"}.bi-usb-drive::before{content:\"\"}.bi-usb-micro-fill::before{content:\"\"}.bi-usb-micro::before{content:\"\"}.bi-usb-mini-fill::before{content:\"\"}.bi-usb-mini::before{content:\"\"}.bi-cloud-haze2::before{content:\"\"}.bi-device-hdd-fill::before{content:\"\"}.bi-device-hdd::before{content:\"\"}.bi-device-ssd-fill::before{content:\"\"}.bi-device-ssd::before{content:\"\"}.bi-displayport-fill::before{content:\"\"}.bi-mortarboard-fill::before{content:\"\"}.bi-mortarboard::before{content:\"\"}.bi-terminal-x::before{content:\"\"}.bi-arrow-through-heart-fill::before{content:\"\"}.bi-arrow-through-heart::before{content:\"\"}.bi-badge-sd-fill::before{content:\"\"}.bi-badge-sd::before{content:\"\"}.bi-bag-heart-fill::before{content:\"\"}.bi-bag-heart::before{content:\"\"}.bi-balloon-fill::before{content:\"\"}.bi-balloon-heart-fill::before{content:\"\"}.bi-balloon-heart::before{content:\"\"}.bi-balloon::before{content:\"\"}.bi-box2-fill::before{content:\"\"}.bi-box2-heart-fill::before{content:\"\"}.bi-box2-heart::before{content:\"\"}.bi-box2::before{content:\"\"}.bi-braces-asterisk::before{content:\"\"}.bi-calendar-heart-fill::before{content:\"\"}.bi-calendar-heart::before{content:\"\"}.bi-calendar2-heart-fill::before{content:\"\"}.bi-calendar2-heart::before{content:\"\"}.bi-chat-heart-fill::before{content:\"\"}.bi-chat-heart::before{content:\"\"}.bi-chat-left-heart-fill::before{content:\"\"}.bi-chat-left-heart::before{content:\"\"}.bi-chat-right-heart-fill::before{content:\"\"}.bi-chat-right-heart::before{content:\"\"}.bi-chat-square-heart-fill::before{content:\"\"}.bi-chat-square-heart::before{content:\"\"}.bi-clipboard-check-fill::before{content:\"\"}.bi-clipboard-data-fill::before{content:\"\"}.bi-clipboard-fill::before{content:\"\"}.bi-clipboard-heart-fill::before{content:\"\"}.bi-clipboard-heart::before{content:\"\"}.bi-clipboard-minus-fill::before{content:\"\"}.bi-clipboard-plus-fill::before{content:\"\"}.bi-clipboard-pulse::before{content:\"\"}.bi-clipboard-x-fill::before{content:\"\"}.bi-clipboard2-check-fill::before{content:\"\"}.bi-clipboard2-check::before{content:\"\"}.bi-clipboard2-data-fill::before{content:\"\"}.bi-clipboard2-data::before{content:\"\"}.bi-clipboard2-fill::before{content:\"\"}.bi-clipboard2-heart-fill::before{content:\"\"}.bi-clipboard2-heart::before{content:\"\"}.bi-clipboard2-minus-fill::before{content:\"\"}.bi-clipboard2-minus::before{content:\"\"}.bi-clipboard2-plus-fill::before{content:\"\"}.bi-clipboard2-plus::before{content:\"\"}.bi-clipboard2-pulse-fill::before{content:\"\"}.bi-clipboard2-pulse::before{content:\"\"}.bi-clipboard2-x-fill::before{content:\"\"}.bi-clipboard2-x::before{content:\"\"}.bi-clipboard2::before{content:\"\"}.bi-emoji-kiss-fill::before{content:\"\"}.bi-emoji-kiss::before{content:\"\"}.bi-envelope-heart-fill::before{content:\"\"}.bi-envelope-heart::before{content:\"\"}.bi-envelope-open-heart-fill::before{content:\"\"}.bi-envelope-open-heart::before{content:\"\"}.bi-envelope-paper-fill::before{content:\"\"}.bi-envelope-paper-heart-fill::before{content:\"\"}.bi-envelope-paper-heart::before{content:\"\"}.bi-envelope-paper::before{content:\"\"}.bi-filetype-aac::before{content:\"\"}.bi-filetype-ai::before{content:\"\"}.bi-filetype-bmp::before{content:\"\"}.bi-filetype-cs::before{content:\"\"}.bi-filetype-css::before{content:\"\"}.bi-filetype-csv::before{content:\"\"}.bi-filetype-doc::before{content:\"\"}.bi-filetype-docx::before{content:\"\"}.bi-filetype-exe::before{content:\"\"}.bi-filetype-gif::before{content:\"\"}.bi-filetype-heic::before{content:\"\"}.bi-filetype-html::before{content:\"\"}.bi-filetype-java::before{content:\"\"}.bi-filetype-jpg::before{content:\"\"}.bi-filetype-js::before{content:\"\"}.bi-filetype-jsx::before{content:\"\"}.bi-filetype-key::before{content:\"\"}.bi-filetype-m4p::before{content:\"\"}.bi-filetype-md::before{content:\"\"}.bi-filetype-mdx::before{content:\"\"}.bi-filetype-mov::before{content:\"\"}.bi-filetype-mp3::before{content:\"\"}.bi-filetype-mp4::before{content:\"\"}.bi-filetype-otf::before{content:\"\"}.bi-filetype-pdf::before{content:\"\"}.bi-filetype-php::before{content:\"\"}.bi-filetype-png::before{content:\"\"}.bi-filetype-ppt::before{content:\"\"}.bi-filetype-psd::before{content:\"\"}.bi-filetype-py::before{content:\"\"}.bi-filetype-raw::before{content:\"\"}.bi-filetype-rb::before{content:\"\"}.bi-filetype-sass::before{content:\"\"}.bi-filetype-scss::before{content:\"\"}.bi-filetype-sh::before{content:\"\"}.bi-filetype-svg::before{content:\"\"}.bi-filetype-tiff::before{content:\"\"}.bi-filetype-tsx::before{content:\"\"}.bi-filetype-ttf::before{content:\"\"}.bi-filetype-txt::before{content:\"\"}.bi-filetype-wav::before{content:\"\"}.bi-filetype-woff::before{content:\"\"}.bi-filetype-xls::before{content:\"\"}.bi-filetype-xml::before{content:\"\"}.bi-filetype-yml::before{content:\"\"}.bi-heart-arrow::before{content:\"\"}.bi-heart-pulse-fill::before{content:\"\"}.bi-heart-pulse::before{content:\"\"}.bi-heartbreak-fill::before{content:\"\"}.bi-heartbreak::before{content:\"\"}.bi-hearts::before{content:\"\"}.bi-hospital-fill::before{content:\"\"}.bi-hospital::before{content:\"\"}.bi-house-heart-fill::before{content:\"\"}.bi-house-heart::before{content:\"\"}.bi-incognito::before{content:\"\"}.bi-magnet-fill::before{content:\"\"}.bi-magnet::before{content:\"\"}.bi-person-heart::before{content:\"\"}.bi-person-hearts::before{content:\"\"}.bi-phone-flip::before{content:\"\"}.bi-plugin::before{content:\"\"}.bi-postage-fill::before{content:\"\"}.bi-postage-heart-fill::before{content:\"\"}.bi-postage-heart::before{content:\"\"}.bi-postage::before{content:\"\"}.bi-postcard-fill::before{content:\"\"}.bi-postcard-heart-fill::before{content:\"\"}.bi-postcard-heart::before{content:\"\"}.bi-postcard::before{content:\"\"}.bi-search-heart-fill::before{content:\"\"}.bi-search-heart::before{content:\"\"}.bi-sliders2-vertical::before{content:\"\"}.bi-sliders2::before{content:\"\"}.bi-trash3-fill::before{content:\"\"}.bi-trash3::before{content:\"\"}.bi-valentine::before{content:\"\"}.bi-valentine2::before{content:\"\"}.bi-wrench-adjustable-circle-fill::before{content:\"\"}.bi-wrench-adjustable-circle::before{content:\"\"}.bi-wrench-adjustable::before{content:\"\"}.bi-filetype-json::before{content:\"\"}.bi-filetype-pptx::before{content:\"\"}.bi-filetype-xlsx::before{content:\"\"}.bi-1-circle-fill::before{content:\"\"}.bi-1-circle::before{content:\"\"}.bi-1-square-fill::before{content:\"\"}.bi-1-square::before{content:\"\"}.bi-2-circle-fill::before{content:\"\"}.bi-2-circle::before{content:\"\"}.bi-2-square-fill::before{content:\"\"}.bi-2-square::before{content:\"\"}.bi-3-circle-fill::before{content:\"\"}.bi-3-circle::before{content:\"\"}.bi-3-square-fill::before{content:\"\"}.bi-3-square::before{content:\"\"}.bi-4-circle-fill::before{content:\"\"}.bi-4-circle::before{content:\"\"}.bi-4-square-fill::before{content:\"\"}.bi-4-square::before{content:\"\"}.bi-5-circle-fill::before{content:\"\"}.bi-5-circle::before{content:\"\"}.bi-5-square-fill::before{content:\"\"}.bi-5-square::before{content:\"\"}.bi-6-circle-fill::before{content:\"\"}.bi-6-circle::before{content:\"\"}.bi-6-square-fill::before{content:\"\"}.bi-6-square::before{content:\"\"}.bi-7-circle-fill::before{content:\"\"}.bi-7-circle::before{content:\"\"}.bi-7-square-fill::before{content:\"\"}.bi-7-square::before{content:\"\"}.bi-8-circle-fill::before{content:\"\"}.bi-8-circle::before{content:\"\"}.bi-8-square-fill::before{content:\"\"}.bi-8-square::before{content:\"\"}.bi-9-circle-fill::before{content:\"\"}.bi-9-circle::before{content:\"\"}.bi-9-square-fill::before{content:\"\"}.bi-9-square::before{content:\"\"}.bi-airplane-engines-fill::before{content:\"\"}.bi-airplane-engines::before{content:\"\"}.bi-airplane-fill::before{content:\"\"}.bi-airplane::before{content:\"\"}.bi-alexa::before{content:\"\"}.bi-alipay::before{content:\"\"}.bi-android::before{content:\"\"}.bi-android2::before{content:\"\"}.bi-box-fill::before{content:\"\"}.bi-box-seam-fill::before{content:\"\"}.bi-browser-chrome::before{content:\"\"}.bi-browser-edge::before{content:\"\"}.bi-browser-firefox::before{content:\"\"}.bi-browser-safari::before{content:\"\"}.bi-c-circle-fill::before{content:\"\"}.bi-c-circle::before{content:\"\"}.bi-c-square-fill::before{content:\"\"}.bi-c-square::before{content:\"\"}.bi-capsule-pill::before{content:\"\"}.bi-capsule::before{content:\"\"}.bi-car-front-fill::before{content:\"\"}.bi-car-front::before{content:\"\"}.bi-cassette-fill::before{content:\"\"}.bi-cassette::before{content:\"\"}.bi-cc-circle-fill::before{content:\"\"}.bi-cc-circle::before{content:\"\"}.bi-cc-square-fill::before{content:\"\"}.bi-cc-square::before{content:\"\"}.bi-cup-hot-fill::before{content:\"\"}.bi-cup-hot::before{content:\"\"}.bi-currency-rupee::before{content:\"\"}.bi-dropbox::before{content:\"\"}.bi-escape::before{content:\"\"}.bi-fast-forward-btn-fill::before{content:\"\"}.bi-fast-forward-btn::before{content:\"\"}.bi-fast-forward-circle-fill::before{content:\"\"}.bi-fast-forward-circle::before{content:\"\"}.bi-fast-forward-fill::before{content:\"\"}.bi-fast-forward::before{content:\"\"}.bi-filetype-sql::before{content:\"\"}.bi-fire::before{content:\"\"}.bi-google-play::before{content:\"\"}.bi-h-circle-fill::before{content:\"\"}.bi-h-circle::before{content:\"\"}.bi-h-square-fill::before{content:\"\"}.bi-h-square::before{content:\"\"}.bi-indent::before{content:\"\"}.bi-lungs-fill::before{content:\"\"}.bi-lungs::before{content:\"\"}.bi-microsoft-teams::before{content:\"\"}.bi-p-circle-fill::before{content:\"\"}.bi-p-circle::before{content:\"\"}.bi-p-square-fill::before{content:\"\"}.bi-p-square::before{content:\"\"}.bi-pass-fill::before{content:\"\"}.bi-pass::before{content:\"\"}.bi-prescription::before{content:\"\"}.bi-prescription2::before{content:\"\"}.bi-r-circle-fill::before{content:\"\"}.bi-r-circle::before{content:\"\"}.bi-r-square-fill::before{content:\"\"}.bi-r-square::before{content:\"\"}.bi-repeat-1::before{content:\"\"}.bi-repeat::before{content:\"\"}.bi-rewind-btn-fill::before{content:\"\"}.bi-rewind-btn::before{content:\"\"}.bi-rewind-circle-fill::before{content:\"\"}.bi-rewind-circle::before{content:\"\"}.bi-rewind-fill::before{content:\"\"}.bi-rewind::before{content:\"\"}.bi-train-freight-front-fill::before{content:\"\"}.bi-train-freight-front::before{content:\"\"}.bi-train-front-fill::before{content:\"\"}.bi-train-front::before{content:\"\"}.bi-train-lightrail-front-fill::before{content:\"\"}.bi-train-lightrail-front::before{content:\"\"}.bi-truck-front-fill::before{content:\"\"}.bi-truck-front::before{content:\"\"}.bi-ubuntu::before{content:\"\"}.bi-unindent::before{content:\"\"}.bi-unity::before{content:\"\"}.bi-universal-access-circle::before{content:\"\"}.bi-universal-access::before{content:\"\"}.bi-virus::before{content:\"\"}.bi-virus2::before{content:\"\"}.bi-wechat::before{content:\"\"}.bi-yelp::before{content:\"\"}.bi-sign-stop-fill::before{content:\"\"}.bi-sign-stop-lights-fill::before{content:\"\"}.bi-sign-stop-lights::before{content:\"\"}.bi-sign-stop::before{content:\"\"}.bi-sign-turn-left-fill::before{content:\"\"}.bi-sign-turn-left::before{content:\"\"}.bi-sign-turn-right-fill::before{content:\"\"}.bi-sign-turn-right::before{content:\"\"}.bi-sign-turn-slight-left-fill::before{content:\"\"}.bi-sign-turn-slight-left::before{content:\"\"}.bi-sign-turn-slight-right-fill::before{content:\"\"}.bi-sign-turn-slight-right::before{content:\"\"}.bi-sign-yield-fill::before{content:\"\"}.bi-sign-yield::before{content:\"\"}.bi-ev-station-fill::before{content:\"\"}.bi-ev-station::before{content:\"\"}.bi-fuel-pump-diesel-fill::before{content:\"\"}.bi-fuel-pump-diesel::before{content:\"\"}.bi-fuel-pump-fill::before{content:\"\"}.bi-fuel-pump::before{content:\"\"}.bi-0-circle-fill::before{content:\"\"}.bi-0-circle::before{content:\"\"}.bi-0-square-fill::before{content:\"\"}.bi-0-square::before{content:\"\"}.bi-rocket-fill::before{content:\"\"}.bi-rocket-takeoff-fill::before{content:\"\"}.bi-rocket-takeoff::before{content:\"\"}.bi-rocket::before{content:\"\"}.bi-stripe::before{content:\"\"}.bi-subscript::before{content:\"\"}.bi-superscript::before{content:\"\"}.bi-trello::before{content:\"\"}.bi-envelope-at-fill::before{content:\"\"}.bi-envelope-at::before{content:\"\"}.bi-regex::before{content:\"\"}.bi-text-wrap::before{content:\"\"}.bi-sign-dead-end-fill::before{content:\"\"}.bi-sign-dead-end::before{content:\"\"}.bi-sign-do-not-enter-fill::before{content:\"\"}.bi-sign-do-not-enter::before{content:\"\"}.bi-sign-intersection-fill::before{content:\"\"}.bi-sign-intersection-side-fill::before{content:\"\"}.bi-sign-intersection-side::before{content:\"\"}.bi-sign-intersection-t-fill::before{content:\"\"}.bi-sign-intersection-t::before{content:\"\"}.bi-sign-intersection-y-fill::before{content:\"\"}.bi-sign-intersection-y::before{content:\"\"}.bi-sign-intersection::before{content:\"\"}.bi-sign-merge-left-fill::before{content:\"\"}.bi-sign-merge-left::before{content:\"\"}.bi-sign-merge-right-fill::before{content:\"\"}.bi-sign-merge-right::before{content:\"\"}.bi-sign-no-left-turn-fill::before{content:\"\"}.bi-sign-no-left-turn::before{content:\"\"}.bi-sign-no-parking-fill::before{content:\"\"}.bi-sign-no-parking::before{content:\"\"}.bi-sign-no-right-turn-fill::before{content:\"\"}.bi-sign-no-right-turn::before{content:\"\"}.bi-sign-railroad-fill::before{content:\"\"}.bi-sign-railroad::before{content:\"\"}.bi-building-add::before{content:\"\"}.bi-building-check::before{content:\"\"}.bi-building-dash::before{content:\"\"}.bi-building-down::before{content:\"\"}.bi-building-exclamation::before{content:\"\"}.bi-building-fill-add::before{content:\"\"}.bi-building-fill-check::before{content:\"\"}.bi-building-fill-dash::before{content:\"\"}.bi-building-fill-down::before{content:\"\"}.bi-building-fill-exclamation::before{content:\"\"}.bi-building-fill-gear::before{content:\"\"}.bi-building-fill-lock::before{content:\"\"}.bi-building-fill-slash::before{content:\"\"}.bi-building-fill-up::before{content:\"\"}.bi-building-fill-x::before{content:\"\"}.bi-building-fill::before{content:\"\"}.bi-building-gear::before{content:\"\"}.bi-building-lock::before{content:\"\"}.bi-building-slash::before{content:\"\"}.bi-building-up::before{content:\"\"}.bi-building-x::before{content:\"\"}.bi-buildings-fill::before{content:\"\"}.bi-buildings::before{content:\"\"}.bi-bus-front-fill::before{content:\"\"}.bi-bus-front::before{content:\"\"}.bi-ev-front-fill::before{content:\"\"}.bi-ev-front::before{content:\"\"}.bi-globe-americas::before{content:\"\"}.bi-globe-asia-australia::before{content:\"\"}.bi-globe-central-south-asia::before{content:\"\"}.bi-globe-europe-africa::before{content:\"\"}.bi-house-add-fill::before{content:\"\"}.bi-house-add::before{content:\"\"}.bi-house-check-fill::before{content:\"\"}.bi-house-check::before{content:\"\"}.bi-house-dash-fill::before{content:\"\"}.bi-house-dash::before{content:\"\"}.bi-house-down-fill::before{content:\"\"}.bi-house-down::before{content:\"\"}.bi-house-exclamation-fill::before{content:\"\"}.bi-house-exclamation::before{content:\"\"}.bi-house-gear-fill::before{content:\"\"}.bi-house-gear::before{content:\"\"}.bi-house-lock-fill::before{content:\"\"}.bi-house-lock::before{content:\"\"}.bi-house-slash-fill::before{content:\"\"}.bi-house-slash::before{content:\"\"}.bi-house-up-fill::before{content:\"\"}.bi-house-up::before{content:\"\"}.bi-house-x-fill::before{content:\"\"}.bi-house-x::before{content:\"\"}.bi-person-add::before{content:\"\"}.bi-person-down::before{content:\"\"}.bi-person-exclamation::before{content:\"\"}.bi-person-fill-add::before{content:\"\"}.bi-person-fill-check::before{content:\"\"}.bi-person-fill-dash::before{content:\"\"}.bi-person-fill-down::before{content:\"\"}.bi-person-fill-exclamation::before{content:\"\"}.bi-person-fill-gear::before{content:\"\"}.bi-person-fill-lock::before{content:\"\"}.bi-person-fill-slash::before{content:\"\"}.bi-person-fill-up::before{content:\"\"}.bi-person-fill-x::before{content:\"\"}.bi-person-gear::before{content:\"\"}.bi-person-lock::before{content:\"\"}.bi-person-slash::before{content:\"\"}.bi-person-up::before{content:\"\"}.bi-scooter::before{content:\"\"}.bi-taxi-front-fill::before{content:\"\"}.bi-taxi-front::before{content:\"\"}.bi-amd::before{content:\"\"}.bi-database-add::before{content:\"\"}.bi-database-check::before{content:\"\"}.bi-database-dash::before{content:\"\"}.bi-database-down::before{content:\"\"}.bi-database-exclamation::before{content:\"\"}.bi-database-fill-add::before{content:\"\"}.bi-database-fill-check::before{content:\"\"}.bi-database-fill-dash::before{content:\"\"}.bi-database-fill-down::before{content:\"\"}.bi-database-fill-exclamation::before{content:\"\"}.bi-database-fill-gear::before{content:\"\"}.bi-database-fill-lock::before{content:\"\"}.bi-database-fill-slash::before{content:\"\"}.bi-database-fill-up::before{content:\"\"}.bi-database-fill-x::before{content:\"\"}.bi-database-fill::before{content:\"\"}.bi-database-gear::before{content:\"\"}.bi-database-lock::before{content:\"\"}.bi-database-slash::before{content:\"\"}.bi-database-up::before{content:\"\"}.bi-database-x::before{content:\"\"}.bi-database::before{content:\"\"}.bi-houses-fill::before{content:\"\"}.bi-houses::before{content:\"\"}.bi-nvidia::before{content:\"\"}.bi-person-vcard-fill::before{content:\"\"}.bi-person-vcard::before{content:\"\"}.bi-sina-weibo::before{content:\"\"}.bi-tencent-qq::before{content:\"\"}.bi-wikipedia::before{content:\"\"}.bi-alphabet-uppercase::before{content:\"\"}.bi-alphabet::before{content:\"\"}.bi-amazon::before{content:\"\"}.bi-arrows-collapse-vertical::before{content:\"\"}.bi-arrows-expand-vertical::before{content:\"\"}.bi-arrows-vertical::before{content:\"\"}.bi-arrows::before{content:\"\"}.bi-ban-fill::before{content:\"\"}.bi-ban::before{content:\"\"}.bi-bing::before{content:\"\"}.bi-cake::before{content:\"\"}.bi-cake2::before{content:\"\"}.bi-cookie::before{content:\"\"}.bi-copy::before{content:\"\"}.bi-crosshair::before{content:\"\"}.bi-crosshair2::before{content:\"\"}.bi-emoji-astonished-fill::before{content:\"\"}.bi-emoji-astonished::before{content:\"\"}.bi-emoji-grimace-fill::before{content:\"\"}.bi-emoji-grimace::before{content:\"\"}.bi-emoji-grin-fill::before{content:\"\"}.bi-emoji-grin::before{content:\"\"}.bi-emoji-surprise-fill::before{content:\"\"}.bi-emoji-surprise::before{content:\"\"}.bi-emoji-tear-fill::before{content:\"\"}.bi-emoji-tear::before{content:\"\"}.bi-envelope-arrow-down-fill::before{content:\"\"}.bi-envelope-arrow-down::before{content:\"\"}.bi-envelope-arrow-up-fill::before{content:\"\"}.bi-envelope-arrow-up::before{content:\"\"}.bi-feather::before{content:\"\"}.bi-feather2::before{content:\"\"}.bi-floppy-fill::before{content:\"\"}.bi-floppy::before{content:\"\"}.bi-floppy2-fill::before{content:\"\"}.bi-floppy2::before{content:\"\"}.bi-gitlab::before{content:\"\"}.bi-highlighter::before{content:\"\"}.bi-marker-tip::before{content:\"\"}.bi-nvme-fill::before{content:\"\"}.bi-nvme::before{content:\"\"}.bi-opencollective::before{content:\"\"}.bi-pci-card-network::before{content:\"\"}.bi-pci-card-sound::before{content:\"\"}.bi-radar::before{content:\"\"}.bi-send-arrow-down-fill::before{content:\"\"}.bi-send-arrow-down::before{content:\"\"}.bi-send-arrow-up-fill::before{content:\"\"}.bi-send-arrow-up::before{content:\"\"}.bi-sim-slash-fill::before{content:\"\"}.bi-sim-slash::before{content:\"\"}.bi-sourceforge::before{content:\"\"}.bi-substack::before{content:\"\"}.bi-threads-fill::before{content:\"\"}.bi-threads::before{content:\"\"}.bi-transparency::before{content:\"\"}.bi-twitter-x::before{content:\"\"}.bi-type-h4::before{content:\"\"}.bi-type-h5::before{content:\"\"}.bi-type-h6::before{content:\"\"}.bi-backpack-fill::before{content:\"\"}.bi-backpack::before{content:\"\"}.bi-backpack2-fill::before{content:\"\"}.bi-backpack2::before{content:\"\"}.bi-backpack3-fill::before{content:\"\"}.bi-backpack3::before{content:\"\"}.bi-backpack4-fill::before{content:\"\"}.bi-backpack4::before{content:\"\"}.bi-brilliance::before{content:\"\"}.bi-cake-fill::before{content:\"\"}.bi-cake2-fill::before{content:\"\"}.bi-duffle-fill::before{content:\"\"}.bi-duffle::before{content:\"\"}.bi-exposure::before{content:\"\"}.bi-gender-neuter::before{content:\"\"}.bi-highlights::before{content:\"\"}.bi-luggage-fill::before{content:\"\"}.bi-luggage::before{content:\"\"}.bi-mailbox-flag::before{content:\"\"}.bi-mailbox2-flag::before{content:\"\"}.bi-noise-reduction::before{content:\"\"}.bi-passport-fill::before{content:\"\"}.bi-passport::before{content:\"\"}.bi-person-arms-up::before{content:\"\"}.bi-person-raised-hand::before{content:\"\"}.bi-person-standing-dress::before{content:\"\"}.bi-person-standing::before{content:\"\"}.bi-person-walking::before{content:\"\"}.bi-person-wheelchair::before{content:\"\"}.bi-shadows::before{content:\"\"}.bi-suitcase-fill::before{content:\"\"}.bi-suitcase-lg-fill::before{content:\"\"}.bi-suitcase-lg::before{content:\"\"}.bi-suitcase::before{content:\"豈\"}.bi-suitcase2-fill::before{content:\"更\"}.bi-suitcase2::before{content:\"車\"}.bi-vignette::before{content:\"賈\"}.bi-bluesky::before{content:\"\"}.bi-tux::before{content:\"滑\"}.bi-beaker-fill::before{content:\"串\"}.bi-beaker::before{content:\"句\"}.bi-flask-fill::before{content:\"龜\"}.bi-flask-florence-fill::before{content:\"龜\"}.bi-flask-florence::before{content:\"契\"}.bi-flask::before{content:\"金\"}.bi-leaf-fill::before{content:\"喇\"}.bi-leaf::before{content:\"奈\"}.bi-measuring-cup-fill::before{content:\"懶\"}.bi-measuring-cup::before{content:\"癩\"}.bi-unlock2-fill::before{content:\"羅\"}.bi-unlock2::before{content:\"蘿\"}.bi-battery-low::before{content:\"螺\"}.bi-anthropic::before{content:\"裸\"}.bi-apple-music::before{content:\"邏\"}.bi-claude::before{content:\"樂\"}.bi-openai::before{content:\"洛\"}.bi-perplexity::before{content:\"烙\"}.bi-css::before{content:\"珞\"}.bi-javascript::before{content:\"落\"}.bi-typescript::before{content:\"酪\"}.bi-fork-knife::before{content:\"駱\"}.bi-globe-americas-fill::before{content:\"亂\"}.bi-globe-asia-australia-fill::before{content:\"卵\"}.bi-globe-central-south-asia-fill::before{content:\"欄\"}.bi-globe-europe-africa-fill::before{content:\"爛\"}\n"
  },
  {
    "path": "themes/demo/assets/vendor/bootstrap-icons/bootstrap-icons.scss",
    "content": "//\n// Bring in Bootstrap Icons\n//\n\n@import \"bootstrap-icons/font/bootstrap-icons\";\n"
  },
  {
    "path": "themes/demo/assets/vendor/codeblocks/codeblocks.js",
    "content": "/*\n * Code Blocks\n */\nimport $ from 'jquery';\nimport CodeMirror  from 'codemirror';\nimport 'codemirror/lib/codemirror.css';\nimport 'codemirror/theme/twilight.css';\nimport 'codemirror/mode/twig/twig';\nimport 'codemirror/mode/php/php';\nimport 'codemirror/mode/clike/clike';\nimport 'codemirror/mode/xml/xml';\nimport 'codemirror/addon/mode/multiplex';\n\n$(document).on('render', function() {\n    $('.code-block > pre').each(function () {\n        if (this.dataset.disposable) {\n            return;\n        }\n        this.dataset.disposable = true;\n\n        var $pre = $(this),\n            codeValue = $pre.text(),\n            language = $pre.data('language'),\n            modeValue;\n\n        if (language === 'php') {\n            modeValue = 'text/x-php';\n        }\n        else {\n            modeValue = {\n                name: 'twig',\n                base: 'text/html'\n            };\n        }\n\n        $pre.empty();\n\n        new CodeMirror(this, {\n            value: codeValue,\n            mode: modeValue,\n            lineNumbers: true,\n            readOnly: true\n        });\n    });\n\n});\n\n$(document).on('click', '.expand-code', function () {\n    $(this).closest('.collapsed-code-block').removeClass('collapsed');\n});\n"
  },
  {
    "path": "themes/demo/assets/vendor/photoswipe/LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014-2022 Dmitry Semenov, https://dimsemenov.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "themes/demo/assets/vendor/photoswipe/photoswipe.css",
    "content": "/*! PhotoSwipe main CSS by Dmytro Semenov | photoswipe.com */\n\n.pswp {\n  --pswp-bg: #000;\n  --pswp-placeholder-bg: #222;\n  \n\n  --pswp-root-z-index: 100000;\n  \n  --pswp-preloader-color: rgba(79, 79, 79, 0.4);\n  --pswp-preloader-color-secondary: rgba(255, 255, 255, 0.9);\n  \n  /* defined via js:\n  --pswp-transition-duration: 333ms; */\n  \n  --pswp-icon-color: #fff;\n  --pswp-icon-color-secondary: #4f4f4f;\n  --pswp-icon-stroke-color: #4f4f4f;\n  --pswp-icon-stroke-width: 2px;\n\n  --pswp-error-text-color: var(--pswp-icon-color);\n}\n\n\n/*\n\tStyles for basic PhotoSwipe (pswp) functionality (sliding area, open/close transitions)\n*/\n\n.pswp {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: var(--pswp-root-z-index);\n\tdisplay: none;\n\ttouch-action: none;\n\toutline: 0;\n\topacity: 0.003;\n\tcontain: layout style size;\n\t-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/* Prevents focus outline on the root element,\n  (it may be focused initially) */\n.pswp:focus {\n  outline: 0;\n}\n\n.pswp * {\n  box-sizing: border-box;\n}\n\n.pswp img {\n  max-width: none;\n}\n\n.pswp--open {\n\tdisplay: block;\n}\n\n.pswp,\n.pswp__bg {\n\ttransform: translateZ(0);\n\twill-change: opacity;\n}\n\n.pswp__bg {\n  opacity: 0.005;\n\tbackground: var(--pswp-bg);\n}\n\n.pswp,\n.pswp__scroll-wrap {\n\toverflow: hidden;\n}\n\n.pswp__scroll-wrap,\n.pswp__bg,\n.pswp__container,\n.pswp__item,\n.pswp__content,\n.pswp__img,\n.pswp__zoom-wrap {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.pswp__img,\n.pswp__zoom-wrap {\n\twidth: auto;\n\theight: auto;\n}\n\n.pswp--click-to-zoom.pswp--zoom-allowed .pswp__img {\n\tcursor: -webkit-zoom-in;\n\tcursor: -moz-zoom-in;\n\tcursor: zoom-in;\n}\n\n.pswp--click-to-zoom.pswp--zoomed-in .pswp__img {\n\tcursor: move;\n\tcursor: -webkit-grab;\n\tcursor: -moz-grab;\n\tcursor: grab;\n}\n\n.pswp--click-to-zoom.pswp--zoomed-in .pswp__img:active {\n  cursor: -webkit-grabbing;\n  cursor: -moz-grabbing;\n  cursor: grabbing;\n}\n\n/* :active to override grabbing cursor */\n.pswp--no-mouse-drag.pswp--zoomed-in .pswp__img,\n.pswp--no-mouse-drag.pswp--zoomed-in .pswp__img:active,\n.pswp__img {\n\tcursor: -webkit-zoom-out;\n\tcursor: -moz-zoom-out;\n\tcursor: zoom-out;\n}\n\n\n/* Prevent selection and tap highlights */\n.pswp__container,\n.pswp__img,\n.pswp__button,\n.pswp__counter {\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.pswp__item {\n\t/* z-index for fade transition */\n\tz-index: 1;\n\toverflow: hidden;\n}\n\n.pswp__hidden {\n\tdisplay: none !important;\n}\n\n/* Allow to click through pswp__content element, but not its children */\n.pswp__content {\n  pointer-events: none;\n}\n.pswp__content > * {\n  pointer-events: auto;\n}\n\n\n/*\n\n  PhotoSwipe UI\n\n*/\n\n/*\n\tError message appears when image is not loaded\n\t(JS option errorMsg controls markup)\n*/\n.pswp__error-msg-container {\n  display: grid;\n}\n.pswp__error-msg {\n\tmargin: auto;\n\tfont-size: 1em;\n\tline-height: 1;\n\tcolor: var(--pswp-error-text-color);\n}\n\n/*\nclass pswp__hide-on-close is applied to elements that\nshould hide (for example fade out) when PhotoSwipe is closed\nand show (for example fade in) when PhotoSwipe is opened\n */\n.pswp .pswp__hide-on-close {\n\topacity: 0.005;\n\twill-change: opacity;\n\ttransition: opacity var(--pswp-transition-duration) cubic-bezier(0.4, 0, 0.22, 1);\n\tz-index: 10; /* always overlap slide content */\n\tpointer-events: none; /* hidden elements should not be clickable */\n}\n\n/* class pswp--ui-visible is added when opening or closing transition starts */\n.pswp--ui-visible .pswp__hide-on-close {\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n/* <button> styles, including css reset */\n.pswp__button {\n\tposition: relative;\n\tdisplay: block;\n\twidth: 50px;\n\theight: 60px;\n\tpadding: 0;\n\tmargin: 0;\n\toverflow: hidden;\n\tcursor: pointer;\n\tbackground: none;\n\tborder: 0;\n\tbox-shadow: none;\n\topacity: 0.85;\n\t-webkit-appearance: none;\n\t-webkit-touch-callout: none;\n}\n\n.pswp__button:hover,\n.pswp__button:active,\n.pswp__button:focus {\n  transition: none;\n  padding: 0;\n  background: none;\n  border: 0;\n  box-shadow: none;\n  opacity: 1;\n}\n\n.pswp__button:disabled {\n  opacity: 0.3;\n  cursor: auto;\n}\n\n.pswp__icn {\n  fill: var(--pswp-icon-color);\n  color: var(--pswp-icon-color-secondary);\n}\n\n.pswp__icn {\n  position: absolute;\n  top: 14px;\n  left: 9px;\n  width: 32px;\n  height: 32px;\n  overflow: hidden;\n  pointer-events: none;\n}\n\n.pswp__icn-shadow {\n  stroke: var(--pswp-icon-stroke-color);\n  stroke-width: var(--pswp-icon-stroke-width);\n  fill: none;\n}\n\n.pswp__icn:focus {\n\toutline: 0;\n}\n\n/*\n\tdiv element that matches size of large image,\n\tlarge image loads on top of it,\n\tused when msrc is not provided\n*/\ndiv.pswp__img--placeholder,\n.pswp__img--with-bg {\n\tbackground: var(--pswp-placeholder-bg);\n}\n\n.pswp__top-bar {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 60px;\n\tdisplay: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n\tz-index: 10;\n\n\t/* allow events to pass through top bar itself */\n\tpointer-events: none !important;\n}\n.pswp__top-bar > * {\n  pointer-events: auto;\n  /* this makes transition significantly more smooth,\n     even though inner elements are not animated */\n  will-change: opacity;\n}\n\n\n/*\n\n  Close button\n\n*/\n.pswp__button--close {\n  margin-right: 6px;\n}\n\n\n/*\n\n  Arrow buttons\n\n*/\n.pswp__button--arrow {\n  position: absolute;\n  top: 0;\n  width: 75px;\n  height: 100px;\n  top: 50%;\n  margin-top: -50px;\n}\n\n.pswp__button--arrow:disabled {\n  display: none;\n  cursor: default;\n}\n\n.pswp__button--arrow .pswp__icn {\n  top: 50%;\n  margin-top: -30px;\n  width: 60px;\n  height: 60px;\n  background: none;\n  border-radius: 0;\n}\n\n.pswp--one-slide .pswp__button--arrow {\n  display: none;\n}\n\n/* hide arrows on touch screens */\n.pswp--touch .pswp__button--arrow {\n  visibility: hidden;\n}\n\n/* show arrows only after mouse was used */\n.pswp--has_mouse .pswp__button--arrow {\n  visibility: visible;\n}\n\n.pswp__button--arrow--prev {\n  right: auto;\n  left: 0px;\n}\n\n.pswp__button--arrow--next {\n  right: 0px;\n}\n.pswp__button--arrow--next .pswp__icn {\n  left: auto;\n  right: 14px;\n  /* flip horizontally */\n  transform: scale(-1, 1);\n}\n\n/*\n\n  Zoom button\n\n*/\n.pswp__button--zoom {\n  display: none;\n}\n\n.pswp--zoom-allowed .pswp__button--zoom {\n  display: block;\n}\n\n/* \"+\" => \"-\" */\n.pswp--zoomed-in .pswp__zoom-icn-bar-v {\n  display: none;\n}\n\n\n/*\n\n  Loading indicator\n\n*/\n.pswp__preloader {\n  position: relative;\n  overflow: hidden;\n  width: 50px;\n  height: 60px;\n  margin-right: auto;\n}\n\n.pswp__preloader .pswp__icn {\n  opacity: 0;\n  transition: opacity 0.2s linear;\n  animation: pswp-clockwise 600ms linear infinite;\n}\n\n.pswp__preloader--active .pswp__icn {\n  opacity: 0.85;\n}\n\n@keyframes pswp-clockwise {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(360deg); }\n}\n\n\n/*\n\n  \"1 of 10\" counter\n\n*/\n.pswp__counter {\n  height: 30px;\n  margin: 15px 0 0 20px;\n  font-size: 14px;\n  line-height: 30px;\n  color: var(--pswp-icon-color);\n  text-shadow: 1px 1px 3px var(--pswp-icon-color-secondary);\n  opacity: 0.85;\n}\n\n.pswp--one-slide .pswp__counter {\n  display: none;\n}\n"
  },
  {
    "path": "themes/demo/assets/vendor/photoswipe-dynamic-caption-plugin/LICENSE.txt",
    "content": "MIT License\n\nCopyright (c) 2021 Dmitry Semenov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "themes/demo/assets/vendor/photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.css",
    "content": ".pswp__dynamic-caption {\n  color: #fff;\n  position: absolute;\n  width: 100%;\n  left: 0;\n  top: 0;\n  transition: opacity 120ms linear !important; /* override default */\n}\n\n.pswp-caption-content {\n  display: none;\n}\n\n.pswp__dynamic-caption a {\n  color: #fff;\n}\n\n.pswp__dynamic-caption--faded {\n  opacity: 0 !important;\n}\n\n.pswp__dynamic-caption--aside {\n  width: auto;\n  max-width: 300px;\n  padding: 20px 15px 20px 20px;\n  margin-top: 70px;\n}\n\n.pswp__dynamic-caption--below {\n  width: auto;\n  max-width: 700px;\n  padding: 15px 0 0;\n}\n\n.pswp__dynamic-caption--on-hor-edge {\n  padding-left: 15px;\n  padding-right: 15px;\n}\n\n.pswp__dynamic-caption--mobile {\n  width: 100%;\n  top: auto;\n  right: 0;\n  bottom: 0;\n  background: rgba(0,0,0,0.5);\n  padding: 10px 15px;\n}"
  },
  {
    "path": "themes/demo/assets/vendor/photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.esm.js",
    "content": "/**\n * PhotoSwipe Dynamic Caption plugin v1.1.0\n * https://github.com/dimsemenov/photoswipe-dynamic-caption-plugin\n * \n * By https://dimsemenov.com\n */\n\nconst defaultOptions = {\n  captionContent: '.pswp-caption-content',\n  type: 'auto',\n  horizontalEdgeThreshold: 20,\n  mobileCaptionOverlapRatio: 0.3,\n  mobileLayoutBreakpoint: 600,\n};\n\nclass PhotoSwipeDynamicCaption {\n  constructor(lightbox, options) {\n    this.options = {\n      ...defaultOptions,\n      ...options\n    };\n\n    this.lightbox = lightbox;\n\n    this.lightbox.on('init', () => {\n      this.initPlugin();\n    });\n  }\n\n  initPlugin() {\n    this.pswp = this.lightbox.pswp;\n    this.isCaptionHidden = false;\n    this.tempCaption = false;\n    this.captionElement = false;\n\n    this.pswp.on('uiRegister', () => {\n      this.pswp.ui.registerElement({\n        name: 'dynamic-caption',\n        order: 9,\n        isButton: false,\n        appendTo: 'root',\n        html: '',\n        onInit: (el) => {\n          this.captionElement = el;\n          this.initCaption();\n        }\n      });\n    });\n  }\n\n  initCaption() {\n    const { pswp } = this;\n\n    pswp.on('change', () => {\n      this.updateCaptionHTML(); \n      this.updateCurrentCaptionPosition();\n\n      // make sure caption is displayed after slides are switched\n      this.showCaption();\n    });\n\n    pswp.on('calcSlideSize', (e) => this.onCalcSlideSize(e));\n\n    // hide caption if mainscroll is shifted (dragging)\n    pswp.on('moveMainScroll', () => {\n      if (!this.useMobileLayout()) {\n        if (this.pswp.mainScroll.isShifted()) {\n          this.hideCaption();\n        } else {\n          this.showCaption();\n        }\n      }\n    });\n\n    // hide caption if zoomed\n    pswp.on('zoomPanUpdate', () => {\n      if (pswp.currSlide.currZoomLevel > pswp.currSlide.zoomLevels.initial) {\n        this.hideCaption();\n      } else {\n        this.showCaption();\n      }\n    });\n\n    pswp.on('beforeZoomTo', (e) => {\n      const { currSlide } = pswp;\n\n      if (currSlide.__dcAdjustedPanAreaSize) {\n        if (e.destZoomLevel > currSlide.zoomLevels.initial) {\n          currSlide.panAreaSize.x = currSlide.__dcOriginalPanAreaSize.x;\n          currSlide.panAreaSize.y = currSlide.__dcOriginalPanAreaSize.y;\n        } else {\n          // Restore panAreaSize after we zoom back to initial position\n          currSlide.panAreaSize.x = currSlide.__dcAdjustedPanAreaSize.x;\n          currSlide.panAreaSize.y = currSlide.__dcAdjustedPanAreaSize.y;\n        }\n      }\n    });\n  }\n\n  useMobileLayout() {\n    const { mobileLayoutBreakpoint } = this.options;\n\n    if (typeof mobileLayoutBreakpoint === 'function') {\n      return mobileLayoutBreakpoint.call(this);\n    } else if (typeof mobileLayoutBreakpoint === 'number') {\n      if (window.innerWidth < mobileLayoutBreakpoint) {\n        return true;\n      }\n    }\n    \n    return false;\n  }\n\n  hideCaption() {\n    if (!this.isCaptionHidden) {\n      this.isCaptionHidden = true;\n      this.captionElement.classList.add('pswp__dynamic-caption--faded');\n\n      // Disable caption visibility with the delay, so it's not interactable \n      if (this.captionFadeTimeout) {\n        clearTimeout(this.captionFadeTimeout);\n      }\n      this.captionFadeTimeout = setTimeout(() => {\n        this.captionElement.style.visibility = 'hidden';\n        this.captionFadeTimeout = null;\n      }, 400);\n    }\n  }\n\n  showCaption() {\n    if (this.isCaptionHidden) {\n      this.isCaptionHidden = false;\n      this.captionElement.style.visibility = 'visible';\n      \n      clearTimeout(this.captionFadeTimeout);\n      this.captionFadeTimeout = setTimeout(() => {\n        this.captionElement.classList.remove('pswp__dynamic-caption--faded');\n        this.captionFadeTimeout = null;\n      }, 50);\n    }\n  }\n\n  setCaptionPosition(x, y) {\n    const isOnHorizontalEdge = (x <= this.options.horizontalEdgeThreshold);\n    this.captionElement.classList[\n      isOnHorizontalEdge ? 'add' : 'remove'\n    ]('pswp__dynamic-caption--on-hor-edge');\n\n    this.captionElement.style.left = x + 'px';\n    this.captionElement.style.top = y + 'px';\n  }\n\n  setCaptionWidth(captionEl, width) {\n    if (!width) {\n      captionEl.style.removeProperty('width');\n    } else {\n      captionEl.style.width = width + 'px';\n    }\n  }\n\n  setCaptionType(captionEl, type) {\n    const prevType = captionEl.dataset.pswpCaptionType;\n    if (type !== prevType) {\n      captionEl.classList.add('pswp__dynamic-caption--' + type);\n      captionEl.classList.remove('pswp__dynamic-caption--' + prevType);\n      captionEl.dataset.pswpCaptionType = type;\n    }\n  }\n\n  updateCurrentCaptionPosition() {\n    const slide = this.pswp.currSlide;\n\n    if (!slide.dynamicCaptionType) {\n      return;\n    }\n\n    if (slide.dynamicCaptionType === 'mobile') {\n      this.setCaptionType(this.captionElement, slide.dynamicCaptionType);\n      \n      this.captionElement.style.removeProperty('left');\n      this.captionElement.style.removeProperty('top');\n      this.setCaptionWidth(this.captionElement, false);\n      return;\n    }\n\n    const zoomLevel = slide.zoomLevels.initial;\n    const imageWidth = Math.ceil(slide.width * zoomLevel);\n    const imageHeight = Math.ceil(slide.height * zoomLevel);\n\n    \n    this.setCaptionType(this.captionElement, slide.dynamicCaptionType);\n    if (slide.dynamicCaptionType === 'aside') {\n      this.setCaptionPosition(\n        this.pswp.currSlide.bounds.center.x + imageWidth,\n        this.pswp.currSlide.bounds.center.y\n      );\n      this.setCaptionWidth(this.captionElement, false);\n    } else if (slide.dynamicCaptionType === 'below') {\n      this.setCaptionPosition(\n        this.pswp.currSlide.bounds.center.x,\n        this.pswp.currSlide.bounds.center.y + imageHeight\n      );\n      this.setCaptionWidth(this.captionElement, imageWidth);\n    }\n  }\n\n  /**\n   * Temporary caption is used to measure size for the current/next/previous captions,\n   * (it has visibility:hidden)\n   */\n  createTemporaryCaption() {\n    this.tempCaption = document.createElement('div');\n    this.tempCaption.className = 'pswp__dynamic-caption pswp__dynamic-caption--temp';\n    this.tempCaption.style.visibility = 'hidden';\n    this.tempCaption.setAttribute('aria-hidden', 'true');\n    // move caption element, so it's after BG,\n    // so that other controls can freely overlap it\n    this.pswp.bg.after(this.captionElement); \n    this.captionElement.after(this.tempCaption);\n  }\n\n  onCalcSlideSize(e) {\n    const { slide } = e;\n\n    const captionHTML = this.getCaptionHTML(e.slide);\n    let useMobileVersion = false;\n    let captionSize;\n\n    if (!captionHTML) {\n      slide.dynamicCaptionType = false;\n      return;\n    }\n\n    this.storeOriginalPanAreaSize(slide);\n\n    slide.bounds.update(slide.zoomLevels.initial);\n    \n    if (this.useMobileLayout()) {\n      slide.dynamicCaptionType = 'mobile';\n      useMobileVersion = true;\n    } else {\n      if (this.options.type === 'auto') {\n        if (slide.bounds.center.x > slide.bounds.center.y) {\n          slide.dynamicCaptionType = 'aside';\n        } else {\n          slide.dynamicCaptionType = 'below';\n        }\n      } else {\n        slide.dynamicCaptionType = this.options.type;\n      }\n    } \n\n    const imageWidth = Math.ceil(slide.width * slide.zoomLevels.initial);\n    const imageHeight = Math.ceil(slide.height * slide.zoomLevels.initial);\n\n    if (!this.tempCaption) {\n      this.createTemporaryCaption();\n    }\n\n    this.setCaptionType(this.tempCaption, slide.dynamicCaptionType);\n\n    if (slide.dynamicCaptionType === 'aside') {\n      this.tempCaption.innerHTML = this.getCaptionHTML(e.slide);\n      this.setCaptionWidth(this.tempCaption, false);\n      captionSize = this.measureCaptionSize(this.tempCaption, e.slide);\n      const captionWidth = captionSize.x;      \n\n      const horizontalEnding = imageWidth + slide.bounds.center.x;\n      const horizontalLeftover = (slide.panAreaSize.x - horizontalEnding);\n\n      if (horizontalLeftover <= captionWidth) {\n        slide.panAreaSize.x -= captionWidth;\n        this.recalculateZoomLevelAndBounds(slide);\n      } else {\n        // do nothing, caption will fit aside without any adjustments\n      }\n    } else if (slide.dynamicCaptionType === 'below' || useMobileVersion) {\n      this.setCaptionWidth(\n        this.tempCaption, \n        useMobileVersion ? this.pswp.viewportSize.x : imageWidth\n      );\n      this.tempCaption.innerHTML = this.getCaptionHTML(e.slide);\n      captionSize = this.measureCaptionSize(this.tempCaption, e.slide);\n      const captionHeight = captionSize.y;\n\n\n      // vertical ending of the image\n      const verticalEnding = imageHeight + slide.bounds.center.y;\n\n      // height between bottom of the screen and ending of the image\n      // (before any adjustments applied) \n      const verticalLeftover = slide.panAreaSize.y - verticalEnding;\n      const initialPanAreaHeight = slide.panAreaSize.y;\n\n      if (verticalLeftover <= captionHeight) {\n        // lift up the image to give more space for caption\n        slide.panAreaSize.y -= Math.min((captionHeight - verticalLeftover) * 2, captionHeight);\n\n        // we reduce viewport size, thus we need to update zoom level and pan bounds\n        this.recalculateZoomLevelAndBounds(slide);\n\n        const maxPositionX = slide.panAreaSize.x * this.options.mobileCaptionOverlapRatio / 2;\n\n        // Do not reduce viewport height if too few space available\n        if (useMobileVersion \n            && slide.bounds.center.x > maxPositionX) {\n          // Restore the default position\n          slide.panAreaSize.y = initialPanAreaHeight;\n          this.recalculateZoomLevelAndBounds(slide);\n        }\n      }\n\n      \n      \n      // if (this.useMobileLayout && slide.bounds.center.x > 100) {\n      //   // do nothing, caption will overlap the bottom part of the image\n      // } else if (verticalLeftover <= captionHeight) {\n        \n      // } else {\n      //   // do nothing, caption will fit below the image without any adjustments\n      // }\n    } else {\n      // mobile\n    }\n\n    this.storeAdjustedPanAreaSize(slide);\n\n    if (slide === this.pswp.currSlide) {\n      this.updateCurrentCaptionPosition();\n    }\n  }\n\n  measureCaptionSize(captionEl, slide) {\n    const rect = captionEl.getBoundingClientRect();\n    const event = this.pswp.dispatch('dynamicCaptionMeasureSize', {\n      captionEl,\n      slide,\n      captionSize: {\n        x: rect.width,\n        y: rect.height\n      }\n    });\n    return event.captionSize;\n  }\n\n  recalculateZoomLevelAndBounds(slide) {\n    slide.zoomLevels.update(slide.width, slide.height, slide.panAreaSize);\n    slide.bounds.update(slide.zoomLevels.initial);\n  }\n\n  storeAdjustedPanAreaSize(slide) {\n    if (!slide.__dcAdjustedPanAreaSize) {\n      slide.__dcAdjustedPanAreaSize = {};\n    }\n    slide.__dcAdjustedPanAreaSize.x = slide.panAreaSize.x;\n    slide.__dcAdjustedPanAreaSize.y = slide.panAreaSize.y;\n  }\n\n  storeOriginalPanAreaSize(slide) {\n    if (!slide.__dcOriginalPanAreaSize) {\n      slide.__dcOriginalPanAreaSize = {};\n    }\n    slide.__dcOriginalPanAreaSize.x = slide.panAreaSize.x;\n    slide.__dcOriginalPanAreaSize.y = slide.panAreaSize.y;\n  }\n\n  getCaptionHTML(slide) {\n    if (typeof this.options.captionContent === 'function') {\n      return this.options.captionContent.call(this, slide);\n    }\n\n    const currSlideElement = slide.data.element;\n    let captionHTML = '';\n    if (currSlideElement) {\n      const hiddenCaption = currSlideElement.querySelector(this.options.captionContent);\n      if (hiddenCaption) {\n        // get caption from element with class pswp-caption-content\n        captionHTML = hiddenCaption.innerHTML;\n      } else {\n        const img = currSlideElement.querySelector('img');\n        if (img) {\n          // get caption from alt attribute\n          captionHTML = img.getAttribute('alt');\n        }\n      }\n    }\n    return captionHTML;\n  }\n\n  updateCaptionHTML() {\n    const captionHTML = this.getCaptionHTML(pswp.currSlide);\n    this.captionElement.style.visibility = captionHTML ? 'visible' :  'hidden';\n    this.captionElement.innerHTML = captionHTML || '';\n    this.pswp.dispatch('dynamicCaptionUpdateHTML', { \n      captionElement: this.captionElement\n    });\n  }\n}\n\nexport default PhotoSwipeDynamicCaption;\n"
  },
  {
    "path": "themes/demo/assets/vendor/slick-carousel/config.rb",
    "content": "css_dir = \".\"\nsass_dir = \".\"\nimages_dir = \".\"\nfonts_dir = \"fonts\"\nrelative_assets = true\n\noutput_style = :compact\nline_comments = false\n\npreferred_syntax = :scss"
  },
  {
    "path": "themes/demo/assets/vendor/slick-carousel/slick-theme.css",
    "content": "@charset 'UTF-8';\n/* Slider */\n.slick-loading .slick-list\n{\n    background: #fff url('./ajax-loader.gif') center center no-repeat;\n}\n\n/* Icons */\n@font-face\n{\n    font-family: 'slick';\n    font-weight: normal;\n    font-style: normal;\n\n    src: url('./fonts/slick.eot');\n    src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');\n}\n/* Arrows */\n.slick-prev,\n.slick-next\n{\n    font-size: 0;\n    line-height: 0;\n\n    position: absolute;\n    top: 50%;\n\n    display: block;\n\n    width: 20px;\n    height: 20px;\n    padding: 0;\n    -webkit-transform: translate(0, -50%);\n    -ms-transform: translate(0, -50%);\n    transform: translate(0, -50%);\n\n    cursor: pointer;\n\n    color: transparent;\n    border: none;\n    outline: none;\n    background: transparent;\n}\n.slick-prev:hover,\n.slick-prev:focus,\n.slick-next:hover,\n.slick-next:focus\n{\n    color: transparent;\n    outline: none;\n    background: transparent;\n}\n.slick-prev:hover:before,\n.slick-prev:focus:before,\n.slick-next:hover:before,\n.slick-next:focus:before\n{\n    opacity: 1;\n}\n.slick-prev.slick-disabled:before,\n.slick-next.slick-disabled:before\n{\n    opacity: .25;\n}\n\n.slick-prev:before,\n.slick-next:before\n{\n    font-family: 'slick';\n    font-size: 20px;\n    line-height: 1;\n\n    opacity: .75;\n    color: white;\n\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n.slick-prev\n{\n    left: -25px;\n}\n[dir='rtl'] .slick-prev\n{\n    right: -25px;\n    left: auto;\n}\n.slick-prev:before\n{\n    content: '←';\n}\n[dir='rtl'] .slick-prev:before\n{\n    content: '→';\n}\n\n.slick-next\n{\n    right: -25px;\n}\n[dir='rtl'] .slick-next\n{\n    right: auto;\n    left: -25px;\n}\n.slick-next:before\n{\n    content: '→';\n}\n[dir='rtl'] .slick-next:before\n{\n    content: '←';\n}\n\n/* Dots */\n.slick-dotted.slick-slider\n{\n    margin-bottom: 30px;\n}\n\n.slick-dots\n{\n    position: absolute;\n    bottom: -25px;\n\n    display: block;\n\n    width: 100%;\n    padding: 0;\n    margin: 0;\n\n    list-style: none;\n\n    text-align: center;\n}\n.slick-dots li\n{\n    position: relative;\n\n    display: inline-block;\n\n    width: 20px;\n    height: 20px;\n    margin: 0 5px;\n    padding: 0;\n\n    cursor: pointer;\n}\n.slick-dots li button\n{\n    font-size: 0;\n    line-height: 0;\n\n    display: block;\n\n    width: 20px;\n    height: 20px;\n    padding: 5px;\n\n    cursor: pointer;\n\n    color: transparent;\n    border: 0;\n    outline: none;\n    background: transparent;\n}\n.slick-dots li button:hover,\n.slick-dots li button:focus\n{\n    outline: none;\n}\n.slick-dots li button:hover:before,\n.slick-dots li button:focus:before\n{\n    opacity: 1;\n}\n.slick-dots li button:before\n{\n    font-family: 'slick';\n    font-size: 6px;\n    line-height: 20px;\n\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    width: 20px;\n    height: 20px;\n\n    content: '•';\n    text-align: center;\n\n    opacity: .25;\n    color: black;\n\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n.slick-dots li.slick-active button:before\n{\n    opacity: .75;\n    color: black;\n}\n"
  },
  {
    "path": "themes/demo/assets/vendor/slick-carousel/slick-theme.less",
    "content": "@charset \"UTF-8\";\n\n// Default Variables\n\n@slick-font-path: \"./fonts/\";\n@slick-font-family: \"slick\";\n@slick-loader-path: \"./\";\n@slick-arrow-color: white;\n@slick-dot-color: black;\n@slick-dot-color-active: @slick-dot-color;\n@slick-prev-character: \"←\";\n@slick-next-character: \"→\";\n@slick-dot-character: \"•\";\n@slick-dot-size: 6px;\n@slick-opacity-default: 0.75;\n@slick-opacity-on-hover: 1;\n@slick-opacity-not-active: 0.25;\n\n/* Slider */\n.slick-loading .slick-list{\n    background: #fff url('@{slick-loader-path}ajax-loader.gif') center center no-repeat;\n}\n\n/* Arrows */\n.slick-prev,\n.slick-next {\n    position: absolute;\n    display: block;\n    height: 20px;\n    width: 20px;\n    line-height: 0px;\n    font-size: 0px;\n    cursor: pointer;\n    background: transparent;\n    color: transparent;\n    top: 50%;\n    -webkit-transform: translate(0, -50%);\n    -ms-transform: translate(0, -50%);\n    transform: translate(0, -50%);\n    padding: 0;\n    border: none;\n    outline: none;\n    &:hover, &:focus {\n        outline: none;\n        background: transparent;\n        color: transparent;\n        &:before {\n            opacity: @slick-opacity-on-hover;\n        }\n    }\n    &.slick-disabled:before {\n        opacity: @slick-opacity-not-active;\n    }\n}\n\n.slick-prev:before, .slick-next:before {\n    font-family: @slick-font-family;\n    font-size: 20px;\n    line-height: 1;\n    color: @slick-arrow-color;\n    opacity: @slick-opacity-default;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    \n    & when ( @slick-font-family = 'slick' ) {\n        /* Icons */\n        @font-face {\n            font-family: 'slick';\n            font-weight: normal;\n            font-style: normal;\n            src: url('@{slick-font-path}slick.eot');\n            src: url('@{slick-font-path}slick.eot?#iefix') format('embedded-opentype'), url('@{slick-font-path}slick.woff') format('woff'), url('@{slick-font-path}slick.ttf') format('truetype'), url('@{slick-font-path}slick.svg#slick') format('svg');\n        }\n    }\n}\n\n.slick-prev {\n    left: -25px;\n    [dir=\"rtl\"] & {\n        left: auto;\n        right: -25px;\n    }\n    &:before {\n        content: @slick-prev-character;\n        [dir=\"rtl\"] & {\n            content: @slick-next-character;\n        }\n    }\n}\n\n.slick-next {\n    right: -25px;\n    [dir=\"rtl\"] & {\n        left: -25px;\n        right: auto;\n    }\n    &:before {\n        content: @slick-next-character;\n        [dir=\"rtl\"] & {\n            content: @slick-prev-character;\n        }\n    }\n}\n\n/* Dots */\n\n.slick-dotted .slick-slider {\n    margin-bottom: 30px;\n}\n\n.slick-dots {\n    position: absolute;\n    bottom: -25px;\n    list-style: none;\n    display: block;\n    text-align: center;\n    padding: 0;\n    margin: 0;\n    width: 100%;\n    li {\n        position: relative;\n        display: inline-block;\n        height: 20px;\n        width: 20px;\n        margin: 0 5px;\n        padding: 0;\n        cursor: pointer;\n        button {\n            border: 0;\n            background: transparent;\n            display: block;\n            height: 20px;\n            width: 20px;\n            outline: none;\n            line-height: 0px;\n            font-size: 0px;\n            color: transparent;\n            padding: 5px;\n            cursor: pointer;\n            &:hover, &:focus {\n                outline: none;\n                &:before {\n                    opacity: @slick-opacity-on-hover;\n                }\n            }\n            &:before {\n                position: absolute;\n                top: 0;\n                left: 0;\n                content: @slick-dot-character;\n                width: 20px;\n                height: 20px;\n                font-family: @slick-font-family;\n                font-size: @slick-dot-size;\n                line-height: 20px;\n                text-align: center;\n                color: @slick-dot-color;\n                opacity: @slick-opacity-not-active;\n                -webkit-font-smoothing: antialiased;\n                -moz-osx-font-smoothing: grayscale;\n            }\n        }\n        &.slick-active button:before {\n            color: @slick-dot-color-active;\n            opacity: @slick-opacity-default;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/vendor/slick-carousel/slick-theme.scss",
    "content": "@charset \"UTF-8\";\n\n// Default Variables\n\n// Slick icon entity codes outputs the following\n// \"\\2190\" outputs ascii character \"←\"\n// \"\\2192\" outputs ascii character \"→\"\n// \"\\2022\" outputs ascii character \"•\"\n\n$slick-font-path: \"./fonts/\" !default;\n$slick-font-family: \"slick\" !default;\n$slick-loader-path: \"./\" !default;\n$slick-arrow-color: white !default;\n$slick-dot-color: black !default;\n$slick-dot-color-active: $slick-dot-color !default;\n$slick-prev-character: \"\\2190\" !default;\n$slick-next-character: \"\\2192\" !default;\n$slick-dot-character: \"\\2022\" !default;\n$slick-dot-size: 6px !default;\n$slick-opacity-default: 0.75 !default;\n$slick-opacity-on-hover: 1 !default;\n$slick-opacity-not-active: 0.25 !default;\n\n@function slick-image-url($url) {\n    @if function-exists(image-url) {\n        @return image-url($url);\n    }\n    @else {\n        @return url($slick-loader-path + $url);\n    }\n}\n\n@function slick-font-url($url) {\n    @if function-exists(font-url) {\n        @return font-url($url);\n    }\n    @else {\n        @return url($slick-font-path + $url);\n    }\n}\n\n/* Slider */\n\n.slick-list {\n    .slick-loading & {\n        background: #fff slick-image-url(\"ajax-loader.gif\") center center no-repeat;\n    }\n}\n\n/* Icons */\n@if $slick-font-family == \"slick\" {\n    @font-face {\n        font-family: \"slick\";\n        src: slick-font-url(\"slick.eot\");\n        src: slick-font-url(\"slick.eot?#iefix\") format(\"embedded-opentype\"), slick-font-url(\"slick.woff\") format(\"woff\"), slick-font-url(\"slick.ttf\") format(\"truetype\"), slick-font-url(\"slick.svg#slick\") format(\"svg\");\n        font-weight: normal;\n        font-style: normal;\n    }\n}\n\n/* Arrows */\n\n.slick-prev,\n.slick-next {\n    position: absolute;\n    display: block;\n    height: 20px;\n    width: 20px;\n    line-height: 0px;\n    font-size: 0px;\n    cursor: pointer;\n    background: transparent;\n    color: transparent;\n    top: 50%;\n    -webkit-transform: translate(0, -50%);\n    -ms-transform: translate(0, -50%);\n    transform: translate(0, -50%);\n    padding: 0;\n    border: none;\n    outline: none;\n    &:hover, &:focus {\n        outline: none;\n        background: transparent;\n        color: transparent;\n        &:before {\n            opacity: $slick-opacity-on-hover;\n        }\n    }\n    &.slick-disabled:before {\n        opacity: $slick-opacity-not-active;\n    }\n    &:before {\n        font-family: $slick-font-family;\n        font-size: 20px;\n        line-height: 1;\n        color: $slick-arrow-color;\n        opacity: $slick-opacity-default;\n        -webkit-font-smoothing: antialiased;\n        -moz-osx-font-smoothing: grayscale;\n    }\n}\n\n.slick-prev {\n    left: -25px;\n    [dir=\"rtl\"] & {\n        left: auto;\n        right: -25px;\n    }\n    &:before {\n        content: $slick-prev-character;\n        [dir=\"rtl\"] & {\n            content: $slick-next-character;\n        }\n    }\n}\n\n.slick-next {\n    right: -25px;\n    [dir=\"rtl\"] & {\n        left: -25px;\n        right: auto;\n    }\n    &:before {\n        content: $slick-next-character;\n        [dir=\"rtl\"] & {\n            content: $slick-prev-character;\n        }\n    }\n}\n\n/* Dots */\n\n.slick-dotted.slick-slider {\n    margin-bottom: 30px;\n}\n\n.slick-dots {\n    position: absolute;\n    bottom: -25px;\n    list-style: none;\n    display: block;\n    text-align: center;\n    padding: 0;\n    margin: 0;\n    width: 100%;\n    li {\n        position: relative;\n        display: inline-block;\n        height: 20px;\n        width: 20px;\n        margin: 0 5px;\n        padding: 0;\n        cursor: pointer;\n        button {\n            border: 0;\n            background: transparent;\n            display: block;\n            height: 20px;\n            width: 20px;\n            outline: none;\n            line-height: 0px;\n            font-size: 0px;\n            color: transparent;\n            padding: 5px;\n            cursor: pointer;\n            &:hover, &:focus {\n                outline: none;\n                &:before {\n                    opacity: $slick-opacity-on-hover;\n                }\n            }\n            &:before {\n                position: absolute;\n                top: 0;\n                left: 0;\n                content: $slick-dot-character;\n                width: 20px;\n                height: 20px;\n                font-family: $slick-font-family;\n                font-size: $slick-dot-size;\n                line-height: 20px;\n                text-align: center;\n                color: $slick-dot-color;\n                opacity: $slick-opacity-not-active;\n                -webkit-font-smoothing: antialiased;\n                -moz-osx-font-smoothing: grayscale;\n            }\n        }\n        &.slick-active button:before {\n            color: $slick-dot-color-active;\n            opacity: $slick-opacity-default;\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/assets/vendor/slick-carousel/slick.css",
    "content": "/* Slider */\n.slick-slider\n{\n    position: relative;\n\n    display: block;\n    box-sizing: border-box;\n\n    -webkit-user-select: none;\n       -moz-user-select: none;\n        -ms-user-select: none;\n            user-select: none;\n\n    -webkit-touch-callout: none;\n    -khtml-user-select: none;\n    -ms-touch-action: pan-y;\n        touch-action: pan-y;\n    -webkit-tap-highlight-color: transparent;\n}\n\n.slick-list\n{\n    position: relative;\n\n    display: block;\n    overflow: hidden;\n\n    margin: 0;\n    padding: 0;\n}\n.slick-list:focus\n{\n    outline: none;\n}\n.slick-list.dragging\n{\n    cursor: pointer;\n    cursor: hand;\n}\n\n.slick-slider .slick-track,\n.slick-slider .slick-list\n{\n    -webkit-transform: translate3d(0, 0, 0);\n       -moz-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n         -o-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n}\n\n.slick-track\n{\n    position: relative;\n    top: 0;\n    left: 0;\n\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n}\n.slick-track:before,\n.slick-track:after\n{\n    display: table;\n\n    content: '';\n}\n.slick-track:after\n{\n    clear: both;\n}\n.slick-loading .slick-track\n{\n    visibility: hidden;\n}\n\n.slick-slide\n{\n    display: none;\n    float: left;\n\n    height: 100%;\n    min-height: 1px;\n}\n[dir='rtl'] .slick-slide\n{\n    float: right;\n}\n.slick-slide img\n{\n    display: block;\n}\n.slick-slide.slick-loading img\n{\n    display: none;\n}\n.slick-slide.dragging img\n{\n    pointer-events: none;\n}\n.slick-initialized .slick-slide\n{\n    display: block;\n}\n.slick-loading .slick-slide\n{\n    visibility: hidden;\n}\n.slick-vertical .slick-slide\n{\n    display: block;\n\n    height: auto;\n\n    border: 1px solid transparent;\n}\n.slick-arrow.slick-hidden {\n    display: none;\n}\n"
  },
  {
    "path": "themes/demo/assets/vendor/slick-carousel/slick.js",
    "content": "/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.8.1\n  Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n    Docs: http://kenwheeler.github.io/slick\n    Repo: http://github.com/kenwheeler/slick\n  Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n;(function(factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports !== 'undefined') {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n\n}(function($) {\n    'use strict';\n    var Slick = window.Slick || {};\n\n    Slick = (function() {\n\n        var instanceUid = 0;\n\n        function Slick(element, settings) {\n\n            var _ = this, dataSettings;\n\n            _.defaults = {\n                accessibility: true,\n                adaptiveHeight: false,\n                appendArrows: $(element),\n                appendDots: $(element),\n                arrows: true,\n                asNavFor: null,\n                prevArrow: '<button class=\"slick-prev\" aria-label=\"Previous\" type=\"button\">Previous</button>',\n                nextArrow: '<button class=\"slick-next\" aria-label=\"Next\" type=\"button\">Next</button>',\n                autoplay: false,\n                autoplaySpeed: 3000,\n                centerMode: false,\n                centerPadding: '50px',\n                cssEase: 'ease',\n                customPaging: function(slider, i) {\n                    return $('<button type=\"button\" />').text(i + 1);\n                },\n                dots: false,\n                dotsClass: 'slick-dots',\n                draggable: true,\n                easing: 'linear',\n                edgeFriction: 0.35,\n                fade: false,\n                focusOnSelect: false,\n                focusOnChange: false,\n                infinite: true,\n                initialSlide: 0,\n                lazyLoad: 'ondemand',\n                mobileFirst: false,\n                pauseOnHover: true,\n                pauseOnFocus: true,\n                pauseOnDotsHover: false,\n                respondTo: 'window',\n                responsive: null,\n                rows: 1,\n                rtl: false,\n                slide: '',\n                slidesPerRow: 1,\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                speed: 500,\n                swipe: true,\n                swipeToSlide: false,\n                touchMove: true,\n                touchThreshold: 5,\n                useCSS: true,\n                useTransform: true,\n                variableWidth: false,\n                vertical: false,\n                verticalSwiping: false,\n                waitForAnimate: true,\n                zIndex: 1000\n            };\n\n            _.initials = {\n                animating: false,\n                dragging: false,\n                autoPlayTimer: null,\n                currentDirection: 0,\n                currentLeft: null,\n                currentSlide: 0,\n                direction: 1,\n                $dots: null,\n                listWidth: null,\n                listHeight: null,\n                loadIndex: 0,\n                $nextArrow: null,\n                $prevArrow: null,\n                scrolling: false,\n                slideCount: null,\n                slideWidth: null,\n                $slideTrack: null,\n                $slides: null,\n                sliding: false,\n                slideOffset: 0,\n                swipeLeft: null,\n                swiping: false,\n                $list: null,\n                touchObject: {},\n                transformsEnabled: false,\n                unslicked: false\n            };\n\n            $.extend(_, _.initials);\n\n            _.activeBreakpoint = null;\n            _.animType = null;\n            _.animProp = null;\n            _.breakpoints = [];\n            _.breakpointSettings = [];\n            _.cssTransitions = false;\n            _.focussed = false;\n            _.interrupted = false;\n            _.hidden = 'hidden';\n            _.paused = true;\n            _.positionProp = null;\n            _.respondTo = null;\n            _.rowCount = 1;\n            _.shouldClick = true;\n            _.$slider = $(element);\n            _.$slidesCache = null;\n            _.transformType = null;\n            _.transitionType = null;\n            _.visibilityChange = 'visibilitychange';\n            _.windowWidth = 0;\n            _.windowTimer = null;\n\n            dataSettings = $(element).data('slick') || {};\n\n            _.options = $.extend({}, _.defaults, settings, dataSettings);\n\n            _.currentSlide = _.options.initialSlide;\n\n            _.originalSettings = _.options;\n\n            if (typeof document.mozHidden !== 'undefined') {\n                _.hidden = 'mozHidden';\n                _.visibilityChange = 'mozvisibilitychange';\n            } else if (typeof document.webkitHidden !== 'undefined') {\n                _.hidden = 'webkitHidden';\n                _.visibilityChange = 'webkitvisibilitychange';\n            }\n\n            _.autoPlay = $.proxy(_.autoPlay, _);\n            _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n            _.changeSlide = $.proxy(_.changeSlide, _);\n            _.clickHandler = $.proxy(_.clickHandler, _);\n            _.selectHandler = $.proxy(_.selectHandler, _);\n            _.setPosition = $.proxy(_.setPosition, _);\n            _.swipeHandler = $.proxy(_.swipeHandler, _);\n            _.dragHandler = $.proxy(_.dragHandler, _);\n            _.keyHandler = $.proxy(_.keyHandler, _);\n\n            _.instanceUid = instanceUid++;\n\n            // A simple way to check for HTML strings\n            // Strict HTML recognition (must start with <)\n            // Extracted from jQuery v1.11 source\n            _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n\n            _.registerBreakpoints();\n            _.init(true);\n\n        }\n\n        return Slick;\n\n    }());\n\n    Slick.prototype.activateADA = function() {\n        var _ = this;\n\n        _.$slideTrack.find('.slick-active').attr({\n            'aria-hidden': 'false'\n        }).find('a, input, button, select').attr({\n            'tabindex': '0'\n        });\n\n    };\n\n    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            addBefore = index;\n            index = null;\n        } else if (index < 0 || (index >= _.slideCount)) {\n            return false;\n        }\n\n        _.unload();\n\n        if (typeof(index) === 'number') {\n            if (index === 0 && _.$slides.length === 0) {\n                $(markup).appendTo(_.$slideTrack);\n            } else if (addBefore) {\n                $(markup).insertBefore(_.$slides.eq(index));\n            } else {\n                $(markup).insertAfter(_.$slides.eq(index));\n            }\n        } else {\n            if (addBefore === true) {\n                $(markup).prependTo(_.$slideTrack);\n            } else {\n                $(markup).appendTo(_.$slideTrack);\n            }\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slides.each(function(index, element) {\n            $(element).attr('data-slick-index', index);\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.animateHeight = function() {\n        var _ = this;\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.animate({\n                height: targetHeight\n            }, _.options.speed);\n        }\n    };\n\n    Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n        var animProps = {},\n            _ = this;\n\n        _.animateHeight();\n\n        if (_.options.rtl === true && _.options.vertical === false) {\n            targetLeft = -targetLeft;\n        }\n        if (_.transformsEnabled === false) {\n            if (_.options.vertical === false) {\n                _.$slideTrack.animate({\n                    left: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            } else {\n                _.$slideTrack.animate({\n                    top: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            }\n\n        } else {\n\n            if (_.cssTransitions === false) {\n                if (_.options.rtl === true) {\n                    _.currentLeft = -(_.currentLeft);\n                }\n                $({\n                    animStart: _.currentLeft\n                }).animate({\n                    animStart: targetLeft\n                }, {\n                    duration: _.options.speed,\n                    easing: _.options.easing,\n                    step: function(now) {\n                        now = Math.ceil(now);\n                        if (_.options.vertical === false) {\n                            animProps[_.animType] = 'translate(' +\n                                now + 'px, 0px)';\n                            _.$slideTrack.css(animProps);\n                        } else {\n                            animProps[_.animType] = 'translate(0px,' +\n                                now + 'px)';\n                            _.$slideTrack.css(animProps);\n                        }\n                    },\n                    complete: function() {\n                        if (callback) {\n                            callback.call();\n                        }\n                    }\n                });\n\n            } else {\n\n                _.applyTransition();\n                targetLeft = Math.ceil(targetLeft);\n\n                if (_.options.vertical === false) {\n                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n                } else {\n                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n                }\n                _.$slideTrack.css(animProps);\n\n                if (callback) {\n                    setTimeout(function() {\n\n                        _.disableTransition();\n\n                        callback.call();\n                    }, _.options.speed);\n                }\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.getNavTarget = function() {\n\n        var _ = this,\n            asNavFor = _.options.asNavFor;\n\n        if ( asNavFor && asNavFor !== null ) {\n            asNavFor = $(asNavFor).not(_.$slider);\n        }\n\n        return asNavFor;\n\n    };\n\n    Slick.prototype.asNavFor = function(index) {\n\n        var _ = this,\n            asNavFor = _.getNavTarget();\n\n        if ( asNavFor !== null && typeof asNavFor === 'object' ) {\n            asNavFor.each(function() {\n                var target = $(this).slick('getSlick');\n                if(!target.unslicked) {\n                    target.slideHandler(index, true);\n                }\n            });\n        }\n\n    };\n\n    Slick.prototype.applyTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        if (_.options.fade === false) {\n            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n        } else {\n            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n        }\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.autoPlay = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        if ( _.slideCount > _.options.slidesToShow ) {\n            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\n        }\n\n    };\n\n    Slick.prototype.autoPlayClear = function() {\n\n        var _ = this;\n\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n    };\n\n    Slick.prototype.autoPlayIterator = function() {\n\n        var _ = this,\n            slideTo = _.currentSlide + _.options.slidesToScroll;\n\n        if ( !_.paused && !_.interrupted && !_.focussed ) {\n\n            if ( _.options.infinite === false ) {\n\n                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\n                    _.direction = 0;\n                }\n\n                else if ( _.direction === 0 ) {\n\n                    slideTo = _.currentSlide - _.options.slidesToScroll;\n\n                    if ( _.currentSlide - 1 === 0 ) {\n                        _.direction = 1;\n                    }\n\n                }\n\n            }\n\n            _.slideHandler( slideTo );\n\n        }\n\n    };\n\n    Slick.prototype.buildArrows = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true ) {\n\n            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n            if( _.slideCount > _.options.slidesToShow ) {\n\n                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n                if (_.htmlExpr.test(_.options.prevArrow)) {\n                    _.$prevArrow.prependTo(_.options.appendArrows);\n                }\n\n                if (_.htmlExpr.test(_.options.nextArrow)) {\n                    _.$nextArrow.appendTo(_.options.appendArrows);\n                }\n\n                if (_.options.infinite !== true) {\n                    _.$prevArrow\n                        .addClass('slick-disabled')\n                        .attr('aria-disabled', 'true');\n                }\n\n            } else {\n\n                _.$prevArrow.add( _.$nextArrow )\n\n                    .addClass('slick-hidden')\n                    .attr({\n                        'aria-disabled': 'true',\n                        'tabindex': '-1'\n                    });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.buildDots = function() {\n\n        var _ = this,\n            i, dot;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$slider.addClass('slick-dotted');\n\n            dot = $('<ul />').addClass(_.options.dotsClass);\n\n            for (i = 0; i <= _.getDotCount(); i += 1) {\n                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\n            }\n\n            _.$dots = dot.appendTo(_.options.appendDots);\n\n            _.$dots.find('li').first().addClass('slick-active');\n\n        }\n\n    };\n\n    Slick.prototype.buildOut = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slider\n                .children( _.options.slide + ':not(.slick-cloned)')\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        _.$slides.each(function(index, element) {\n            $(element)\n                .attr('data-slick-index', index)\n                .data('originalStyling', $(element).attr('style') || '');\n        });\n\n        _.$slider.addClass('slick-slider');\n\n        _.$slideTrack = (_.slideCount === 0) ?\n            $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n            _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n        _.$list = _.$slideTrack.wrap(\n            '<div class=\"slick-list\"/>').parent();\n        _.$slideTrack.css('opacity', 0);\n\n        if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n            _.options.slidesToScroll = 1;\n        }\n\n        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n        _.setupInfinite();\n\n        _.buildArrows();\n\n        _.buildDots();\n\n        _.updateDots();\n\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        if (_.options.draggable === true) {\n            _.$list.addClass('draggable');\n        }\n\n    };\n\n    Slick.prototype.buildRows = function() {\n\n        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n        newSlides = document.createDocumentFragment();\n        originalSlides = _.$slider.children();\n\n        if(_.options.rows > 0) {\n\n            slidesPerSection = _.options.slidesPerRow * _.options.rows;\n            numOfSlides = Math.ceil(\n                originalSlides.length / slidesPerSection\n            );\n\n            for(a = 0; a < numOfSlides; a++){\n                var slide = document.createElement('div');\n                for(b = 0; b < _.options.rows; b++) {\n                    var row = document.createElement('div');\n                    for(c = 0; c < _.options.slidesPerRow; c++) {\n                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n                        if (originalSlides.get(target)) {\n                            row.appendChild(originalSlides.get(target));\n                        }\n                    }\n                    slide.appendChild(row);\n                }\n                newSlides.appendChild(slide);\n            }\n\n            _.$slider.empty().append(newSlides);\n            _.$slider.children().children().children()\n                .css({\n                    'width':(100 / _.options.slidesPerRow) + '%',\n                    'display': 'inline-block'\n                });\n\n        }\n\n    };\n\n    Slick.prototype.checkResponsive = function(initial, forceUpdate) {\n\n        var _ = this,\n            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\n        var sliderWidth = _.$slider.width();\n        var windowWidth = window.innerWidth || $(window).width();\n\n        if (_.respondTo === 'window') {\n            respondToWidth = windowWidth;\n        } else if (_.respondTo === 'slider') {\n            respondToWidth = sliderWidth;\n        } else if (_.respondTo === 'min') {\n            respondToWidth = Math.min(windowWidth, sliderWidth);\n        }\n\n        if ( _.options.responsive &&\n            _.options.responsive.length &&\n            _.options.responsive !== null) {\n\n            targetBreakpoint = null;\n\n            for (breakpoint in _.breakpoints) {\n                if (_.breakpoints.hasOwnProperty(breakpoint)) {\n                    if (_.originalSettings.mobileFirst === false) {\n                        if (respondToWidth < _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    } else {\n                        if (respondToWidth > _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    }\n                }\n            }\n\n            if (targetBreakpoint !== null) {\n                if (_.activeBreakpoint !== null) {\n                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n                        _.activeBreakpoint =\n                            targetBreakpoint;\n                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                            _.unslick(targetBreakpoint);\n                        } else {\n                            _.options = $.extend({}, _.originalSettings,\n                                _.breakpointSettings[\n                                    targetBreakpoint]);\n                            if (initial === true) {\n                                _.currentSlide = _.options.initialSlide;\n                            }\n                            _.refresh(initial);\n                        }\n                        triggerBreakpoint = targetBreakpoint;\n                    }\n                } else {\n                    _.activeBreakpoint = targetBreakpoint;\n                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                        _.unslick(targetBreakpoint);\n                    } else {\n                        _.options = $.extend({}, _.originalSettings,\n                            _.breakpointSettings[\n                                targetBreakpoint]);\n                        if (initial === true) {\n                            _.currentSlide = _.options.initialSlide;\n                        }\n                        _.refresh(initial);\n                    }\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            } else {\n                if (_.activeBreakpoint !== null) {\n                    _.activeBreakpoint = null;\n                    _.options = _.originalSettings;\n                    if (initial === true) {\n                        _.currentSlide = _.options.initialSlide;\n                    }\n                    _.refresh(initial);\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            }\n\n            // only trigger breakpoints during an actual break. not on initialize.\n            if( !initial && triggerBreakpoint !== false ) {\n                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n            }\n        }\n\n    };\n\n    Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n        var _ = this,\n            $target = $(event.currentTarget),\n            indexOffset, slideOffset, unevenOffset;\n\n        // If target is a link, prevent default action.\n        if($target.is('a')) {\n            event.preventDefault();\n        }\n\n        // If target is not the <li> element (ie: a child), find the <li>.\n        if(!$target.is('li')) {\n            $target = $target.closest('li');\n        }\n\n        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n        switch (event.data.message) {\n\n            case 'previous':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'next':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'index':\n                var index = event.data.index === 0 ? 0 :\n                    event.data.index || $target.index() * _.options.slidesToScroll;\n\n                _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n                $target.children().trigger('focus');\n                break;\n\n            default:\n                return;\n        }\n\n    };\n\n    Slick.prototype.checkNavigable = function(index) {\n\n        var _ = this,\n            navigables, prevNavigable;\n\n        navigables = _.getNavigableIndexes();\n        prevNavigable = 0;\n        if (index > navigables[navigables.length - 1]) {\n            index = navigables[navigables.length - 1];\n        } else {\n            for (var n in navigables) {\n                if (index < navigables[n]) {\n                    index = prevNavigable;\n                    break;\n                }\n                prevNavigable = navigables[n];\n            }\n        }\n\n        return index;\n    };\n\n    Slick.prototype.cleanUpEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots && _.$dots !== null) {\n\n            $('li', _.$dots)\n                .off('click.slick', _.changeSlide)\n                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n            if (_.options.accessibility === true) {\n                _.$dots.off('keydown.slick', _.keyHandler);\n            }\n        }\n\n        _.$slider.off('focus.slick blur.slick');\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);\n                _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);\n            }\n        }\n\n        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n        _.$list.off('click.slick', _.clickHandler);\n\n        $(document).off(_.visibilityChange, _.visibility);\n\n        _.cleanUpSlideEvents();\n\n        if (_.options.accessibility === true) {\n            _.$list.off('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n        }\n\n        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n\n    };\n\n    Slick.prototype.cleanUpSlideEvents = function() {\n\n        var _ = this;\n\n        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\n        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n    };\n\n    Slick.prototype.cleanUpRows = function() {\n\n        var _ = this, originalSlides;\n\n        if(_.options.rows > 0) {\n            originalSlides = _.$slides.children().children();\n            originalSlides.removeAttr('style');\n            _.$slider.empty().append(originalSlides);\n        }\n\n    };\n\n    Slick.prototype.clickHandler = function(event) {\n\n        var _ = this;\n\n        if (_.shouldClick === false) {\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n            event.preventDefault();\n        }\n\n    };\n\n    Slick.prototype.destroy = function(refresh) {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        _.touchObject = {};\n\n        _.cleanUpEvents();\n\n        $('.slick-cloned', _.$slider).detach();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if ( _.$prevArrow && _.$prevArrow.length ) {\n\n            _.$prevArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.prevArrow )) {\n                _.$prevArrow.remove();\n            }\n        }\n\n        if ( _.$nextArrow && _.$nextArrow.length ) {\n\n            _.$nextArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.nextArrow )) {\n                _.$nextArrow.remove();\n            }\n        }\n\n\n        if (_.$slides) {\n\n            _.$slides\n                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\n                .removeAttr('aria-hidden')\n                .removeAttr('data-slick-index')\n                .each(function(){\n                    $(this).attr('style', $(this).data('originalStyling'));\n                });\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slideTrack.detach();\n\n            _.$list.detach();\n\n            _.$slider.append(_.$slides);\n        }\n\n        _.cleanUpRows();\n\n        _.$slider.removeClass('slick-slider');\n        _.$slider.removeClass('slick-initialized');\n        _.$slider.removeClass('slick-dotted');\n\n        _.unslicked = true;\n\n        if(!refresh) {\n            _.$slider.trigger('destroy', [_]);\n        }\n\n    };\n\n    Slick.prototype.disableTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        transition[_.transitionType] = '';\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).css({\n                zIndex: _.options.zIndex\n            });\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 1\n            }, _.options.speed, _.options.easing, callback);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 1,\n                zIndex: _.options.zIndex\n            });\n\n            if (callback) {\n                setTimeout(function() {\n\n                    _.disableTransition(slideIndex);\n\n                    callback.call();\n                }, _.options.speed);\n            }\n\n        }\n\n    };\n\n    Slick.prototype.fadeSlideOut = function(slideIndex) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            }, _.options.speed, _.options.easing);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            });\n\n        }\n\n    };\n\n    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n        var _ = this;\n\n        if (filter !== null) {\n\n            _.$slidesCache = _.$slides;\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.focusHandler = function() {\n\n        var _ = this;\n\n        _.$slider\n            .off('focus.slick blur.slick')\n            .on('focus.slick blur.slick', '*', function(event) {\n\n            event.stopImmediatePropagation();\n            var $sf = $(this);\n\n            setTimeout(function() {\n\n                if( _.options.pauseOnFocus ) {\n                    _.focussed = $sf.is(':focus');\n                    _.autoPlay();\n                }\n\n            }, 0);\n\n        });\n    };\n\n    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n        var _ = this;\n        return _.currentSlide;\n\n    };\n\n    Slick.prototype.getDotCount = function() {\n\n        var _ = this;\n\n        var breakPoint = 0;\n        var counter = 0;\n        var pagerQty = 0;\n\n        if (_.options.infinite === true) {\n            if (_.slideCount <= _.options.slidesToShow) {\n                 ++pagerQty;\n            } else {\n                while (breakPoint < _.slideCount) {\n                    ++pagerQty;\n                    breakPoint = counter + _.options.slidesToScroll;\n                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n                }\n            }\n        } else if (_.options.centerMode === true) {\n            pagerQty = _.slideCount;\n        } else if(!_.options.asNavFor) {\n            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\n        }else {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToScroll;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        }\n\n        return pagerQty - 1;\n\n    };\n\n    Slick.prototype.getLeft = function(slideIndex) {\n\n        var _ = this,\n            targetLeft,\n            verticalHeight,\n            verticalOffset = 0,\n            targetSlide,\n            coef;\n\n        _.slideOffset = 0;\n        verticalHeight = _.$slides.first().outerHeight(true);\n\n        if (_.options.infinite === true) {\n            if (_.slideCount > _.options.slidesToShow) {\n                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n                coef = -1\n\n                if (_.options.vertical === true && _.options.centerMode === true) {\n                    if (_.options.slidesToShow === 2) {\n                        coef = -1.5;\n                    } else if (_.options.slidesToShow === 1) {\n                        coef = -2\n                    }\n                }\n                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;\n            }\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n                    if (slideIndex > _.slideCount) {\n                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n                    } else {\n                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n                    }\n                }\n            }\n        } else {\n            if (slideIndex + _.options.slidesToShow > _.slideCount) {\n                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n            }\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = 0;\n            verticalOffset = 0;\n        }\n\n        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);\n        } else if (_.options.centerMode === true && _.options.infinite === true) {\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n        } else if (_.options.centerMode === true) {\n            _.slideOffset = 0;\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n        }\n\n        if (_.options.vertical === false) {\n            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n        } else {\n            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n        }\n\n        if (_.options.variableWidth === true) {\n\n            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n            } else {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n            }\n\n            if (_.options.rtl === true) {\n                if (targetSlide[0]) {\n                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                } else {\n                    targetLeft =  0;\n                }\n            } else {\n                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n            }\n\n            if (_.options.centerMode === true) {\n                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n                } else {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n                }\n\n                if (_.options.rtl === true) {\n                    if (targetSlide[0]) {\n                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                    } else {\n                        targetLeft =  0;\n                    }\n                } else {\n                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n                }\n\n                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n            }\n        }\n\n        return targetLeft;\n\n    };\n\n    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n        var _ = this;\n\n        return _.options[option];\n\n    };\n\n    Slick.prototype.getNavigableIndexes = function() {\n\n        var _ = this,\n            breakPoint = 0,\n            counter = 0,\n            indexes = [],\n            max;\n\n        if (_.options.infinite === false) {\n            max = _.slideCount;\n        } else {\n            breakPoint = _.options.slidesToScroll * -1;\n            counter = _.options.slidesToScroll * -1;\n            max = _.slideCount * 2;\n        }\n\n        while (breakPoint < max) {\n            indexes.push(breakPoint);\n            breakPoint = counter + _.options.slidesToScroll;\n            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n        }\n\n        return indexes;\n\n    };\n\n    Slick.prototype.getSlick = function() {\n\n        return this;\n\n    };\n\n    Slick.prototype.getSlideCount = function() {\n\n        var _ = this,\n            slidesTraversed, swipedSlide, centerOffset;\n\n        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n        if (_.options.swipeToSlide === true) {\n            _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\n                    swipedSlide = slide;\n                    return false;\n                }\n            });\n\n            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n            return slidesTraversed;\n\n        } else {\n            return _.options.slidesToScroll;\n        }\n\n    };\n\n    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'index',\n                index: parseInt(slide)\n            }\n        }, dontAnimate);\n\n    };\n\n    Slick.prototype.init = function(creation) {\n\n        var _ = this;\n\n        if (!$(_.$slider).hasClass('slick-initialized')) {\n\n            $(_.$slider).addClass('slick-initialized');\n\n            _.buildRows();\n            _.buildOut();\n            _.setProps();\n            _.startLoad();\n            _.loadSlider();\n            _.initializeEvents();\n            _.updateArrows();\n            _.updateDots();\n            _.checkResponsive(true);\n            _.focusHandler();\n\n        }\n\n        if (creation) {\n            _.$slider.trigger('init', [_]);\n        }\n\n        if (_.options.accessibility === true) {\n            _.initADA();\n        }\n\n        if ( _.options.autoplay ) {\n\n            _.paused = false;\n            _.autoPlay();\n\n        }\n\n    };\n\n    Slick.prototype.initADA = function() {\n        var _ = this,\n                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),\n                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {\n                    return (val >= 0) && (val < _.slideCount);\n                });\n\n        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n            'aria-hidden': 'true',\n            'tabindex': '-1'\n        }).find('a, input, button, select').attr({\n            'tabindex': '-1'\n        });\n\n        if (_.$dots !== null) {\n            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n                var slideControlIndex = tabControlIndexes.indexOf(i);\n\n                $(this).attr({\n                    'role': 'tabpanel',\n                    'id': 'slick-slide' + _.instanceUid + i,\n                    'tabindex': -1\n                });\n\n                if (slideControlIndex !== -1) {\n                   var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex\n                   if ($('#' + ariaButtonControl).length) {\n                     $(this).attr({\n                         'aria-describedby': ariaButtonControl\n                     });\n                   }\n                }\n            });\n\n            _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n                var mappedSlideIndex = tabControlIndexes[i];\n\n                $(this).attr({\n                    'role': 'presentation'\n                });\n\n                $(this).find('button').first().attr({\n                    'role': 'tab',\n                    'id': 'slick-slide-control' + _.instanceUid + i,\n                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,\n                    'aria-label': (i + 1) + ' of ' + numDotGroups,\n                    'aria-selected': null,\n                    'tabindex': '-1'\n                });\n\n            }).eq(_.currentSlide).find('button').attr({\n                'aria-selected': 'true',\n                'tabindex': '0'\n            }).end();\n        }\n\n        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {\n          if (_.options.focusOnChange) {\n            _.$slides.eq(i).attr({'tabindex': '0'});\n          } else {\n            _.$slides.eq(i).removeAttr('tabindex');\n          }\n        }\n\n        _.activateADA();\n\n    };\n\n    Slick.prototype.initArrowEvents = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'previous'\n               }, _.changeSlide);\n            _.$nextArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'next'\n               }, _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$prevArrow.on('keydown.slick', _.keyHandler);\n                _.$nextArrow.on('keydown.slick', _.keyHandler);\n            }\n        }\n\n    };\n\n    Slick.prototype.initDotEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n            $('li', _.$dots).on('click.slick', {\n                message: 'index'\n            }, _.changeSlide);\n\n            if (_.options.accessibility === true) {\n                _.$dots.on('keydown.slick', _.keyHandler);\n            }\n        }\n\n        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {\n\n            $('li', _.$dots)\n                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initSlideEvents = function() {\n\n        var _ = this;\n\n        if ( _.options.pauseOnHover ) {\n\n            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\n            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initializeEvents = function() {\n\n        var _ = this;\n\n        _.initArrowEvents();\n\n        _.initDotEvents();\n        _.initSlideEvents();\n\n        _.$list.on('touchstart.slick mousedown.slick', {\n            action: 'start'\n        }, _.swipeHandler);\n        _.$list.on('touchmove.slick mousemove.slick', {\n            action: 'move'\n        }, _.swipeHandler);\n        _.$list.on('touchend.slick mouseup.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n        _.$list.on('touchcancel.slick mouseleave.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n\n        _.$list.on('click.slick', _.clickHandler);\n\n        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n        if (_.options.accessibility === true) {\n            _.$list.on('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(_.setPosition);\n\n    };\n\n    Slick.prototype.initUI = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.show();\n            _.$nextArrow.show();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.show();\n\n        }\n\n    };\n\n    Slick.prototype.keyHandler = function(event) {\n\n        var _ = this;\n         //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n            if (event.keyCode === 37 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'next' :  'previous'\n                    }\n                });\n            } else if (event.keyCode === 39 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'previous' : 'next'\n                    }\n                });\n            }\n        }\n\n    };\n\n    Slick.prototype.lazyLoad = function() {\n\n        var _ = this,\n            loadRange, cloneRange, rangeStart, rangeEnd;\n\n        function loadImages(imagesScope) {\n\n            $('img[data-lazy]', imagesScope).each(function() {\n\n                var image = $(this),\n                    imageSource = $(this).attr('data-lazy'),\n                    imageSrcSet = $(this).attr('data-srcset'),\n                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),\n                    imageToLoad = document.createElement('img');\n\n                imageToLoad.onload = function() {\n\n                    image\n                        .animate({ opacity: 0 }, 100, function() {\n\n                            if (imageSrcSet) {\n                                image\n                                    .attr('srcset', imageSrcSet );\n\n                                if (imageSizes) {\n                                    image\n                                        .attr('sizes', imageSizes );\n                                }\n                            }\n\n                            image\n                                .attr('src', imageSource)\n                                .animate({ opacity: 1 }, 200, function() {\n                                    image\n                                        .removeAttr('data-lazy data-srcset data-sizes')\n                                        .removeClass('slick-loading');\n                                });\n                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n                        });\n\n                };\n\n                imageToLoad.onerror = function() {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                };\n\n                imageToLoad.src = imageSource;\n\n            });\n\n        }\n\n        if (_.options.centerMode === true) {\n            if (_.options.infinite === true) {\n                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n                rangeEnd = rangeStart + _.options.slidesToShow + 2;\n            } else {\n                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n            }\n        } else {\n            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\n            if (_.options.fade === true) {\n                if (rangeStart > 0) rangeStart--;\n                if (rangeEnd <= _.slideCount) rangeEnd++;\n            }\n        }\n\n        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n\n        if (_.options.lazyLoad === 'anticipated') {\n            var prevSlide = rangeStart - 1,\n                nextSlide = rangeEnd,\n                $slides = _.$slider.find('.slick-slide');\n\n            for (var i = 0; i < _.options.slidesToScroll; i++) {\n                if (prevSlide < 0) prevSlide = _.slideCount - 1;\n                loadRange = loadRange.add($slides.eq(prevSlide));\n                loadRange = loadRange.add($slides.eq(nextSlide));\n                prevSlide--;\n                nextSlide++;\n            }\n        }\n\n        loadImages(loadRange);\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-slide');\n            loadImages(cloneRange);\n        } else\n        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n            loadImages(cloneRange);\n        } else if (_.currentSlide === 0) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n            loadImages(cloneRange);\n        }\n\n    };\n\n    Slick.prototype.loadSlider = function() {\n\n        var _ = this;\n\n        _.setPosition();\n\n        _.$slideTrack.css({\n            opacity: 1\n        });\n\n        _.$slider.removeClass('slick-loading');\n\n        _.initUI();\n\n        if (_.options.lazyLoad === 'progressive') {\n            _.progressiveLazyLoad();\n        }\n\n    };\n\n    Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'next'\n            }\n        });\n\n    };\n\n    Slick.prototype.orientationChange = function() {\n\n        var _ = this;\n\n        _.checkResponsive();\n        _.setPosition();\n\n    };\n\n    Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n        _.paused = true;\n\n    };\n\n    Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n        var _ = this;\n\n        _.autoPlay();\n        _.options.autoplay = true;\n        _.paused = false;\n        _.focussed = false;\n        _.interrupted = false;\n\n    };\n\n    Slick.prototype.postSlide = function(index) {\n\n        var _ = this;\n\n        if( !_.unslicked ) {\n\n            _.$slider.trigger('afterChange', [_, index]);\n\n            _.animating = false;\n\n            if (_.slideCount > _.options.slidesToShow) {\n                _.setPosition();\n            }\n\n            _.swipeLeft = null;\n\n            if ( _.options.autoplay ) {\n                _.autoPlay();\n            }\n\n            if (_.options.accessibility === true) {\n                _.initADA();\n\n                if (_.options.focusOnChange) {\n                    var $currentSlide = $(_.$slides.get(_.currentSlide));\n                    $currentSlide.attr('tabindex', 0).focus();\n                }\n            }\n\n        }\n\n    };\n\n    Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'previous'\n            }\n        });\n\n    };\n\n    Slick.prototype.preventDefault = function(event) {\n\n        event.preventDefault();\n\n    };\n\n    Slick.prototype.progressiveLazyLoad = function( tryCount ) {\n\n        tryCount = tryCount || 1;\n\n        var _ = this,\n            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\n            image,\n            imageSource,\n            imageSrcSet,\n            imageSizes,\n            imageToLoad;\n\n        if ( $imgsToLoad.length ) {\n\n            image = $imgsToLoad.first();\n            imageSource = image.attr('data-lazy');\n            imageSrcSet = image.attr('data-srcset');\n            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');\n            imageToLoad = document.createElement('img');\n\n            imageToLoad.onload = function() {\n\n                if (imageSrcSet) {\n                    image\n                        .attr('srcset', imageSrcSet );\n\n                    if (imageSizes) {\n                        image\n                            .attr('sizes', imageSizes );\n                    }\n                }\n\n                image\n                    .attr( 'src', imageSource )\n                    .removeAttr('data-lazy data-srcset data-sizes')\n                    .removeClass('slick-loading');\n\n                if ( _.options.adaptiveHeight === true ) {\n                    _.setPosition();\n                }\n\n                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\n                _.progressiveLazyLoad();\n\n            };\n\n            imageToLoad.onerror = function() {\n\n                if ( tryCount < 3 ) {\n\n                    /**\n                     * try to load the image 3 times,\n                     * leave a slight delay so we don't get\n                     * servers blocking the request.\n                     */\n                    setTimeout( function() {\n                        _.progressiveLazyLoad( tryCount + 1 );\n                    }, 500 );\n\n                } else {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                    _.progressiveLazyLoad();\n\n                }\n\n            };\n\n            imageToLoad.src = imageSource;\n\n        } else {\n\n            _.$slider.trigger('allImagesLoaded', [ _ ]);\n\n        }\n\n    };\n\n    Slick.prototype.refresh = function( initializing ) {\n\n        var _ = this, currentSlide, lastVisibleIndex;\n\n        lastVisibleIndex = _.slideCount - _.options.slidesToShow;\n\n        // in non-infinite sliders, we don't want to go past the\n        // last visible index.\n        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\n            _.currentSlide = lastVisibleIndex;\n        }\n\n        // if less slides than to show, go to start.\n        if ( _.slideCount <= _.options.slidesToShow ) {\n            _.currentSlide = 0;\n\n        }\n\n        currentSlide = _.currentSlide;\n\n        _.destroy(true);\n\n        $.extend(_, _.initials, { currentSlide: currentSlide });\n\n        _.init();\n\n        if( !initializing ) {\n\n            _.changeSlide({\n                data: {\n                    message: 'index',\n                    index: currentSlide\n                }\n            }, false);\n\n        }\n\n    };\n\n    Slick.prototype.registerBreakpoints = function() {\n\n        var _ = this, breakpoint, currentBreakpoint, l,\n            responsiveSettings = _.options.responsive || null;\n\n        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\n\n            _.respondTo = _.options.respondTo || 'window';\n\n            for ( breakpoint in responsiveSettings ) {\n\n                l = _.breakpoints.length-1;\n\n                if (responsiveSettings.hasOwnProperty(breakpoint)) {\n                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n                    // loop through the breakpoints and cut out any existing\n                    // ones with the same breakpoint number, we don't want dupes.\n                    while( l >= 0 ) {\n                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\n                            _.breakpoints.splice(l,1);\n                        }\n                        l--;\n                    }\n\n                    _.breakpoints.push(currentBreakpoint);\n                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n\n                }\n\n            }\n\n            _.breakpoints.sort(function(a, b) {\n                return ( _.options.mobileFirst ) ? a-b : b-a;\n            });\n\n        }\n\n    };\n\n    Slick.prototype.reinit = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slideTrack\n                .children(_.options.slide)\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n            _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.currentSlide = 0;\n        }\n\n        _.registerBreakpoints();\n\n        _.setProps();\n        _.setupInfinite();\n        _.buildArrows();\n        _.updateArrows();\n        _.initArrowEvents();\n        _.buildDots();\n        _.updateDots();\n        _.initDotEvents();\n        _.cleanUpSlideEvents();\n        _.initSlideEvents();\n\n        _.checkResponsive(false, true);\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        _.setPosition();\n        _.focusHandler();\n\n        _.paused = !_.options.autoplay;\n        _.autoPlay();\n\n        _.$slider.trigger('reInit', [_]);\n\n    };\n\n    Slick.prototype.resize = function() {\n\n        var _ = this;\n\n        if ($(window).width() !== _.windowWidth) {\n            clearTimeout(_.windowDelay);\n            _.windowDelay = window.setTimeout(function() {\n                _.windowWidth = $(window).width();\n                _.checkResponsive();\n                if( !_.unslicked ) { _.setPosition(); }\n            }, 50);\n        }\n    };\n\n    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            removeBefore = index;\n            index = removeBefore === true ? 0 : _.slideCount - 1;\n        } else {\n            index = removeBefore === true ? --index : index;\n        }\n\n        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n            return false;\n        }\n\n        _.unload();\n\n        if (removeAll === true) {\n            _.$slideTrack.children().remove();\n        } else {\n            _.$slideTrack.children(this.options.slide).eq(index).remove();\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.setCSS = function(position) {\n\n        var _ = this,\n            positionProps = {},\n            x, y;\n\n        if (_.options.rtl === true) {\n            position = -position;\n        }\n        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n        positionProps[_.positionProp] = position;\n\n        if (_.transformsEnabled === false) {\n            _.$slideTrack.css(positionProps);\n        } else {\n            positionProps = {};\n            if (_.cssTransitions === false) {\n                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n                _.$slideTrack.css(positionProps);\n            } else {\n                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n                _.$slideTrack.css(positionProps);\n            }\n        }\n\n    };\n\n    Slick.prototype.setDimensions = function() {\n\n        var _ = this;\n\n        if (_.options.vertical === false) {\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: ('0px ' + _.options.centerPadding)\n                });\n            }\n        } else {\n            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: (_.options.centerPadding + ' 0px')\n                });\n            }\n        }\n\n        _.listWidth = _.$list.width();\n        _.listHeight = _.$list.height();\n\n\n        if (_.options.vertical === false && _.options.variableWidth === false) {\n            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n        } else if (_.options.variableWidth === true) {\n            _.$slideTrack.width(5000 * _.slideCount);\n        } else {\n            _.slideWidth = Math.ceil(_.listWidth);\n            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n        }\n\n        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n    };\n\n    Slick.prototype.setFade = function() {\n\n        var _ = this,\n            targetLeft;\n\n        _.$slides.each(function(index, element) {\n            targetLeft = (_.slideWidth * index) * -1;\n            if (_.options.rtl === true) {\n                $(element).css({\n                    position: 'relative',\n                    right: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            } else {\n                $(element).css({\n                    position: 'relative',\n                    left: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            }\n        });\n\n        _.$slides.eq(_.currentSlide).css({\n            zIndex: _.options.zIndex - 1,\n            opacity: 1\n        });\n\n    };\n\n    Slick.prototype.setHeight = function() {\n\n        var _ = this;\n\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.css('height', targetHeight);\n        }\n\n    };\n\n    Slick.prototype.setOption =\n    Slick.prototype.slickSetOption = function() {\n\n        /**\n         * accepts arguments in format of:\n         *\n         *  - for changing a single option's value:\n         *     .slick(\"setOption\", option, value, refresh )\n         *\n         *  - for changing a set of responsive options:\n         *     .slick(\"setOption\", 'responsive', [{}, ...], refresh )\n         *\n         *  - for updating multiple values at once (not responsive)\n         *     .slick(\"setOption\", { 'option': value, ... }, refresh )\n         */\n\n        var _ = this, l, item, option, value, refresh = false, type;\n\n        if( $.type( arguments[0] ) === 'object' ) {\n\n            option =  arguments[0];\n            refresh = arguments[1];\n            type = 'multiple';\n\n        } else if ( $.type( arguments[0] ) === 'string' ) {\n\n            option =  arguments[0];\n            value = arguments[1];\n            refresh = arguments[2];\n\n            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\n\n                type = 'responsive';\n\n            } else if ( typeof arguments[1] !== 'undefined' ) {\n\n                type = 'single';\n\n            }\n\n        }\n\n        if ( type === 'single' ) {\n\n            _.options[option] = value;\n\n\n        } else if ( type === 'multiple' ) {\n\n            $.each( option , function( opt, val ) {\n\n                _.options[opt] = val;\n\n            });\n\n\n        } else if ( type === 'responsive' ) {\n\n            for ( item in value ) {\n\n                if( $.type( _.options.responsive ) !== 'array' ) {\n\n                    _.options.responsive = [ value[item] ];\n\n                } else {\n\n                    l = _.options.responsive.length-1;\n\n                    // loop through the responsive object and splice out duplicates.\n                    while( l >= 0 ) {\n\n                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\n\n                            _.options.responsive.splice(l,1);\n\n                        }\n\n                        l--;\n\n                    }\n\n                    _.options.responsive.push( value[item] );\n\n                }\n\n            }\n\n        }\n\n        if ( refresh ) {\n\n            _.unload();\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.setPosition = function() {\n\n        var _ = this;\n\n        _.setDimensions();\n\n        _.setHeight();\n\n        if (_.options.fade === false) {\n            _.setCSS(_.getLeft(_.currentSlide));\n        } else {\n            _.setFade();\n        }\n\n        _.$slider.trigger('setPosition', [_]);\n\n    };\n\n    Slick.prototype.setProps = function() {\n\n        var _ = this,\n            bodyStyle = document.body.style;\n\n        _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n        if (_.positionProp === 'top') {\n            _.$slider.addClass('slick-vertical');\n        } else {\n            _.$slider.removeClass('slick-vertical');\n        }\n\n        if (bodyStyle.WebkitTransition !== undefined ||\n            bodyStyle.MozTransition !== undefined ||\n            bodyStyle.msTransition !== undefined) {\n            if (_.options.useCSS === true) {\n                _.cssTransitions = true;\n            }\n        }\n\n        if ( _.options.fade ) {\n            if ( typeof _.options.zIndex === 'number' ) {\n                if( _.options.zIndex < 3 ) {\n                    _.options.zIndex = 3;\n                }\n            } else {\n                _.options.zIndex = _.defaults.zIndex;\n            }\n        }\n\n        if (bodyStyle.OTransform !== undefined) {\n            _.animType = 'OTransform';\n            _.transformType = '-o-transform';\n            _.transitionType = 'OTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.MozTransform !== undefined) {\n            _.animType = 'MozTransform';\n            _.transformType = '-moz-transform';\n            _.transitionType = 'MozTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.webkitTransform !== undefined) {\n            _.animType = 'webkitTransform';\n            _.transformType = '-webkit-transform';\n            _.transitionType = 'webkitTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.msTransform !== undefined) {\n            _.animType = 'msTransform';\n            _.transformType = '-ms-transform';\n            _.transitionType = 'msTransition';\n            if (bodyStyle.msTransform === undefined) _.animType = false;\n        }\n        if (bodyStyle.transform !== undefined && _.animType !== false) {\n            _.animType = 'transform';\n            _.transformType = 'transform';\n            _.transitionType = 'transition';\n        }\n        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\n    };\n\n\n    Slick.prototype.setSlideClasses = function(index) {\n\n        var _ = this,\n            centerOffset, allSlides, indexOffset, remainder;\n\n        allSlides = _.$slider\n            .find('.slick-slide')\n            .removeClass('slick-active slick-center slick-current')\n            .attr('aria-hidden', 'true');\n\n        _.$slides\n            .eq(index)\n            .addClass('slick-current');\n\n        if (_.options.centerMode === true) {\n\n            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;\n\n            centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n            if (_.options.infinite === true) {\n\n                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n                    _.$slides\n                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    indexOffset = _.options.slidesToShow + index;\n                    allSlides\n                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n                if (index === 0) {\n\n                    allSlides\n                        .eq(allSlides.length - 1 - _.options.slidesToShow)\n                        .addClass('slick-center');\n\n                } else if (index === _.slideCount - 1) {\n\n                    allSlides\n                        .eq(_.options.slidesToShow)\n                        .addClass('slick-center');\n\n                }\n\n            }\n\n            _.$slides\n                .eq(index)\n                .addClass('slick-center');\n\n        } else {\n\n            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n\n                _.$slides\n                    .slice(index, index + _.options.slidesToShow)\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else if (allSlides.length <= _.options.slidesToShow) {\n\n                allSlides\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else {\n\n                remainder = _.slideCount % _.options.slidesToShow;\n                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n\n                    allSlides\n                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    allSlides\n                        .slice(indexOffset, indexOffset + _.options.slidesToShow)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n            }\n\n        }\n\n        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {\n            _.lazyLoad();\n        }\n    };\n\n    Slick.prototype.setupInfinite = function() {\n\n        var _ = this,\n            i, slideIndex, infiniteCount;\n\n        if (_.options.fade === true) {\n            _.options.centerMode = false;\n        }\n\n        if (_.options.infinite === true && _.options.fade === false) {\n\n            slideIndex = null;\n\n            if (_.slideCount > _.options.slidesToShow) {\n\n                if (_.options.centerMode === true) {\n                    infiniteCount = _.options.slidesToShow + 1;\n                } else {\n                    infiniteCount = _.options.slidesToShow;\n                }\n\n                for (i = _.slideCount; i > (_.slideCount -\n                        infiniteCount); i -= 1) {\n                    slideIndex = i - 1;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex - _.slideCount)\n                        .prependTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {\n                    slideIndex = i;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex + _.slideCount)\n                        .appendTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n                    $(this).attr('id', '');\n                });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.interrupt = function( toggle ) {\n\n        var _ = this;\n\n        if( !toggle ) {\n            _.autoPlay();\n        }\n        _.interrupted = toggle;\n\n    };\n\n    Slick.prototype.selectHandler = function(event) {\n\n        var _ = this;\n\n        var targetElement =\n            $(event.target).is('.slick-slide') ?\n                $(event.target) :\n                $(event.target).parents('.slick-slide');\n\n        var index = parseInt(targetElement.attr('data-slick-index'));\n\n        if (!index) index = 0;\n\n        if (_.slideCount <= _.options.slidesToShow) {\n\n            _.slideHandler(index, false, true);\n            return;\n\n        }\n\n        _.slideHandler(index);\n\n    };\n\n    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n            _ = this, navTarget;\n\n        sync = sync || false;\n\n        if (_.animating === true && _.options.waitForAnimate === true) {\n            return;\n        }\n\n        if (_.options.fade === true && _.currentSlide === index) {\n            return;\n        }\n\n        if (sync === false) {\n            _.asNavFor(index);\n        }\n\n        targetSlide = index;\n        targetLeft = _.getLeft(targetSlide);\n        slideLeft = _.getLeft(_.currentSlide);\n\n        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        }\n\n        if ( _.options.autoplay ) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n        if (targetSlide < 0) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n            } else {\n                animSlide = _.slideCount + targetSlide;\n            }\n        } else if (targetSlide >= _.slideCount) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = 0;\n            } else {\n                animSlide = targetSlide - _.slideCount;\n            }\n        } else {\n            animSlide = targetSlide;\n        }\n\n        _.animating = true;\n\n        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n        oldSlide = _.currentSlide;\n        _.currentSlide = animSlide;\n\n        _.setSlideClasses(_.currentSlide);\n\n        if ( _.options.asNavFor ) {\n\n            navTarget = _.getNavTarget();\n            navTarget = navTarget.slick('getSlick');\n\n            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\n                navTarget.setSlideClasses(_.currentSlide);\n            }\n\n        }\n\n        _.updateDots();\n        _.updateArrows();\n\n        if (_.options.fade === true) {\n            if (dontAnimate !== true) {\n\n                _.fadeSlideOut(oldSlide);\n\n                _.fadeSlide(animSlide, function() {\n                    _.postSlide(animSlide);\n                });\n\n            } else {\n                _.postSlide(animSlide);\n            }\n            _.animateHeight();\n            return;\n        }\n\n        if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n            _.animateSlide(targetLeft, function() {\n                _.postSlide(animSlide);\n            });\n        } else {\n            _.postSlide(animSlide);\n        }\n\n    };\n\n    Slick.prototype.startLoad = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.hide();\n            _.$nextArrow.hide();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.hide();\n\n        }\n\n        _.$slider.addClass('slick-loading');\n\n    };\n\n    Slick.prototype.swipeDirection = function() {\n\n        var xDist, yDist, r, swipeAngle, _ = this;\n\n        xDist = _.touchObject.startX - _.touchObject.curX;\n        yDist = _.touchObject.startY - _.touchObject.curY;\n        r = Math.atan2(yDist, xDist);\n\n        swipeAngle = Math.round(r * 180 / Math.PI);\n        if (swipeAngle < 0) {\n            swipeAngle = 360 - Math.abs(swipeAngle);\n        }\n\n        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n            return (_.options.rtl === false ? 'right' : 'left');\n        }\n        if (_.options.verticalSwiping === true) {\n            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n                return 'down';\n            } else {\n                return 'up';\n            }\n        }\n\n        return 'vertical';\n\n    };\n\n    Slick.prototype.swipeEnd = function(event) {\n\n        var _ = this,\n            slideCount,\n            direction;\n\n        _.dragging = false;\n        _.swiping = false;\n\n        if (_.scrolling) {\n            _.scrolling = false;\n            return false;\n        }\n\n        _.interrupted = false;\n        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\n\n        if ( _.touchObject.curX === undefined ) {\n            return false;\n        }\n\n        if ( _.touchObject.edgeHit === true ) {\n            _.$slider.trigger('edge', [_, _.swipeDirection() ]);\n        }\n\n        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\n\n            direction = _.swipeDirection();\n\n            switch ( direction ) {\n\n                case 'left':\n                case 'down':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\n                            _.currentSlide + _.getSlideCount();\n\n                    _.currentDirection = 0;\n\n                    break;\n\n                case 'right':\n                case 'up':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\n                            _.currentSlide - _.getSlideCount();\n\n                    _.currentDirection = 1;\n\n                    break;\n\n                default:\n\n\n            }\n\n            if( direction != 'vertical' ) {\n\n                _.slideHandler( slideCount );\n                _.touchObject = {};\n                _.$slider.trigger('swipe', [_, direction ]);\n\n            }\n\n        } else {\n\n            if ( _.touchObject.startX !== _.touchObject.curX ) {\n\n                _.slideHandler( _.currentSlide );\n                _.touchObject = {};\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.swipeHandler = function(event) {\n\n        var _ = this;\n\n        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n            return;\n        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n            return;\n        }\n\n        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n            event.originalEvent.touches.length : 1;\n\n        _.touchObject.minSwipe = _.listWidth / _.options\n            .touchThreshold;\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.minSwipe = _.listHeight / _.options\n                .touchThreshold;\n        }\n\n        switch (event.data.action) {\n\n            case 'start':\n                _.swipeStart(event);\n                break;\n\n            case 'move':\n                _.swipeMove(event);\n                break;\n\n            case 'end':\n                _.swipeEnd(event);\n                break;\n\n        }\n\n    };\n\n    Slick.prototype.swipeMove = function(event) {\n\n        var _ = this,\n            edgeWasHit = false,\n            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;\n\n        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {\n            return false;\n        }\n\n        curLeft = _.getLeft(_.currentSlide);\n\n        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n        _.touchObject.swipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n        verticalSwipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n\n        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {\n            _.scrolling = true;\n            return false;\n        }\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.swipeLength = verticalSwipeLength;\n        }\n\n        swipeDirection = _.swipeDirection();\n\n        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n            _.swiping = true;\n            event.preventDefault();\n        }\n\n        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n        if (_.options.verticalSwiping === true) {\n            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n        }\n\n\n        swipeLength = _.touchObject.swipeLength;\n\n        _.touchObject.edgeHit = false;\n\n        if (_.options.infinite === false) {\n            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\n                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n                _.touchObject.edgeHit = true;\n            }\n        }\n\n        if (_.options.vertical === false) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        } else {\n            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n        }\n        if (_.options.verticalSwiping === true) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        }\n\n        if (_.options.fade === true || _.options.touchMove === false) {\n            return false;\n        }\n\n        if (_.animating === true) {\n            _.swipeLeft = null;\n            return false;\n        }\n\n        _.setCSS(_.swipeLeft);\n\n    };\n\n    Slick.prototype.swipeStart = function(event) {\n\n        var _ = this,\n            touches;\n\n        _.interrupted = true;\n\n        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n            _.touchObject = {};\n            return false;\n        }\n\n        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n            touches = event.originalEvent.touches[0];\n        }\n\n        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n        _.dragging = true;\n\n    };\n\n    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n        var _ = this;\n\n        if (_.$slidesCache !== null) {\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.unload = function() {\n\n        var _ = this;\n\n        $('.slick-cloned', _.$slider).remove();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n            _.$prevArrow.remove();\n        }\n\n        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n            _.$nextArrow.remove();\n        }\n\n        _.$slides\n            .removeClass('slick-slide slick-active slick-visible slick-current')\n            .attr('aria-hidden', 'true')\n            .css('width', '');\n\n    };\n\n    Slick.prototype.unslick = function(fromBreakpoint) {\n\n        var _ = this;\n        _.$slider.trigger('unslick', [_, fromBreakpoint]);\n        _.destroy();\n\n    };\n\n    Slick.prototype.updateArrows = function() {\n\n        var _ = this,\n            centerOffset;\n\n        centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n        if ( _.options.arrows === true &&\n            _.slideCount > _.options.slidesToShow &&\n            !_.options.infinite ) {\n\n            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            if (_.currentSlide === 0) {\n\n                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.updateDots = function() {\n\n        var _ = this;\n\n        if (_.$dots !== null) {\n\n            _.$dots\n                .find('li')\n                    .removeClass('slick-active')\n                    .end();\n\n            _.$dots\n                .find('li')\n                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n                .addClass('slick-active');\n\n        }\n\n    };\n\n    Slick.prototype.visibility = function() {\n\n        var _ = this;\n\n        if ( _.options.autoplay ) {\n\n            if ( document[_.hidden] ) {\n\n                _.interrupted = true;\n\n            } else {\n\n                _.interrupted = false;\n\n            }\n\n        }\n\n    };\n\n    $.fn.slick = function() {\n        var _ = this,\n            opt = arguments[0],\n            args = Array.prototype.slice.call(arguments, 1),\n            l = _.length,\n            i,\n            ret;\n        for (i = 0; i < l; i++) {\n            if (typeof opt == 'object' || typeof opt == 'undefined')\n                _[i].slick = new Slick(_[i], opt);\n            else\n                ret = _[i].slick[opt].apply(_[i].slick, args);\n            if (typeof ret != 'undefined') return ret;\n        }\n        return _;\n    };\n\n}));\n"
  },
  {
    "path": "themes/demo/assets/vendor/slick-carousel/slick.less",
    "content": "/* Slider */\n\n.slick-slider {\n    position: relative;\n    display: block;\n    box-sizing: border-box;\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -ms-touch-action: pan-y;\n    touch-action: pan-y;\n    -webkit-tap-highlight-color: transparent;\n}\n.slick-list {\n    position: relative;\n    overflow: hidden;\n    display: block;\n    margin: 0;\n    padding: 0;\n\n    &:focus {\n        outline: none;\n    }\n\n    &.dragging {\n        cursor: pointer;\n        cursor: hand;\n    }\n}\n.slick-slider .slick-track,\n.slick-slider .slick-list {\n    -webkit-transform: translate3d(0, 0, 0);\n    -moz-transform: translate3d(0, 0, 0);\n    -ms-transform: translate3d(0, 0, 0);\n    -o-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n}\n\n.slick-track {\n    position: relative;\n    left: 0;\n    top: 0;\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n\n    &:before,\n    &:after {\n        content: \"\";\n        display: table;\n    }\n\n    &:after {\n        clear: both;\n    }\n\n    .slick-loading & {\n        visibility: hidden;\n    }\n}\n.slick-slide {\n    float: left;\n    height: 100%;\n    min-height: 1px;\n    [dir=\"rtl\"] & {\n        float: right;\n    }\n    img {\n        display: block;\n    }\n    &.slick-loading img {\n        display: none;\n    }\n\n    display: none;\n\n    &.dragging img {\n        pointer-events: none;\n    }\n\n    .slick-initialized & {\n        display: block;\n    }\n\n    .slick-loading & {\n        visibility: hidden;\n    }\n\n    .slick-vertical & {\n        display: block;\n        height: auto;\n        border: 1px solid transparent;\n    }\n}\n.slick-arrow.slick-hidden {\n    display: none;\n}\n"
  },
  {
    "path": "themes/demo/assets/vendor/slick-carousel/slick.scss",
    "content": "/* Slider */\n\n.slick-slider {\n    position: relative;\n    display: block;\n    box-sizing: border-box;\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    -ms-touch-action: pan-y;\n    touch-action: pan-y;\n    -webkit-tap-highlight-color: transparent;\n}\n.slick-list {\n    position: relative;\n    overflow: hidden;\n    display: block;\n    margin: 0;\n    padding: 0;\n\n    &:focus {\n        outline: none;\n    }\n\n    &.dragging {\n        cursor: pointer;\n        cursor: hand;\n    }\n}\n.slick-slider .slick-track,\n.slick-slider .slick-list {\n    -webkit-transform: translate3d(0, 0, 0);\n    -moz-transform: translate3d(0, 0, 0);\n    -ms-transform: translate3d(0, 0, 0);\n    -o-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n}\n\n.slick-track {\n    position: relative;\n    left: 0;\n    top: 0;\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n\n    &:before,\n    &:after {\n        content: \"\";\n        display: table;\n    }\n\n    &:after {\n        clear: both;\n    }\n\n    .slick-loading & {\n        visibility: hidden;\n    }\n}\n.slick-slide {\n    float: left;\n    height: 100%;\n    min-height: 1px;\n    [dir=\"rtl\"] & {\n        float: right;\n    }\n    img {\n        display: block;\n    }\n    &.slick-loading img {\n        display: none;\n    }\n\n    display: none;\n\n    &.dragging img {\n        pointer-events: none;\n    }\n\n    .slick-initialized & {\n        display: block;\n    }\n\n    .slick-loading & {\n        visibility: hidden;\n    }\n\n    .slick-vertical & {\n        display: block;\n        height: auto;\n        border: 1px solid transparent;\n    }\n}\n.slick-arrow.slick-hidden {\n    display: none;\n}\n"
  },
  {
    "path": "themes/demo/blueprints/blog/author.yaml",
    "content": "uuid: 6947ff28-b660-47d7-9240-24ca6d58aeae\nhandle: Blog\\Author\ntype: entry\nname: Author\ndrafts: false\n\ndefaultSort:\n    column: title\n    direction: desc\n\ncustomMessages:\n    buttonCreate: New Author\n\nnavigation:\n    label: Authors\n    parent: Blog\\Post\n    icon: octo-icon-user\n    order: 200\n\nfields:\n    avatar:\n        label: Avatar\n        type: mediafinder\n        mode: image\n\n    email:\n        label: Email\n        type: email\n        column:\n            searchable: true\n\n    role:\n        label: Role\n        type: text\n\n    about:\n        label: About\n        type: textarea\n\n    _social_links:\n        type: mixin\n        label: Social Links\n        source: Fields\\SocialLinks\n        tab: Social\n"
  },
  {
    "path": "themes/demo/blueprints/blog/category.yaml",
    "content": "uuid: b022a74b-15e6-4c6b-9eb9-17efc5103543\ntype: structure\nhandle: Blog\\Category\nname: Category\ndrafts: false\n\ncustomMessages:\n    buttonCreate: New Category\n\nstructure:\n    maxDepth: 1\n\nnavigation:\n    label: Categories\n    parent: Blog\\Post\n    icon: octo-icon-list-ul\n    order: 150\n\nfields:\n    description:\n        label: Description\n"
  },
  {
    "path": "themes/demo/blueprints/blog/config.yaml",
    "content": "uuid: 3328c303-7989-462e-b866-27e7037ba275\nhandle: Blog\\Config\ntype: global\nname: Blog Settings\n\ncustomMessages:\n    titleUpdateForm: Update Blog Settings\n\nnavigation:\n    label: Settings\n    parent: Blog\\Post\n    icon: octo-icon-cog\n    order: 200\n\nfields:\n    blog_name:\n        label: Blog Name\n        tab: General\n        placeholder: Latest News\n\n    about_this_blog:\n        label: About This Blog\n        comment: Customize this section to tell your visitors a little bit about your publication, writers, content, or something else entirely. Totally up to you.\n        type: textarea\n        size: small\n        tab: General\n\n    _section1:\n        label: Social Links\n        type: section\n        tab: General\n\n    _social_links:\n        type: mixin\n        source: Fields\\SocialLinks\n        tab: General\n"
  },
  {
    "path": "themes/demo/blueprints/blog/post.yaml",
    "content": "uuid: edcd102e-0525-4e4d-b07e-633ae6c18db6\nhandle: Blog\\Post\ntype: stream\nname: Post\ndrafts: true\n\ncustomMessages:\n    buttonCreate: New Post\n\nprimaryNavigation:\n    label: Blog\n    icon: octo-icon-file\n    iconSvg: modules/tailor/assets/images/blog-icon.svg\n    order: 95\n\nnavigation:\n    label: Posts\n    icon: octo-icon-pencil\n    order: 100\n\ngroups:\n    regular_post:\n        name: Regular Post\n        fields:\n            content:\n                tab: Edit\n                label: Content\n                type: richeditor\n                span: adaptive\n\n            _blog_post_content:\n                type: mixin\n                source: Fields\\BlogContent\n\n    markdown_post:\n        name: Markdown Post\n        fields:\n            content:\n                tab: Edit\n                label: Content\n                type: markdown\n                span: adaptive\n\n            _blog_post_content:\n                type: mixin\n                source: Fields\\BlogContent\n"
  },
  {
    "path": "themes/demo/blueprints/fields/_blocks.yaml",
    "content": "uuid: 7b193500-ac0b-481f-a79c-2a362646364d\nhandle: Fields\\Blocks\ntype: mixin\nname: Page Blocks\n\nfields:\n    blocks:\n        label: Blocks\n        type: repeater\n        displayMode: builder\n        span: adaptive\n        tab: Blocks\n        groups:\n            image_slice:\n                name: Image Slice\n                description: A large image with an angled slice.\n                icon: octo-icon-picture\n                fields:\n                    _mixin:\n                        type: mixin\n                        source: Blocks\\ImageSlice\n\n            paragraph_block:\n                name: Paragraph Block\n                description: Simple paragraph with image\n                icon: octo-icon-text-h1\n                fields:\n                    _mixin:\n                        type: mixin\n                        source: Blocks\\ParagraphBlock\n\n            detailed_block:\n                name: Detailed Block\n                description: Detailed paragraph with image and list\n                icon: octo-icon-diamond\n                fields:\n                    _mixin:\n                        type: mixin\n                        source: Blocks\\DetailedBlock\n\n            scoreboard_metrics:\n                name: Scoreboard Metrics\n                description: Show some impressive metrics about the business.\n                icon: icon-quote-right\n                fields:\n                    _mixin:\n                        type: mixin\n                        source: Blocks\\ScoreboardMetrics\n\n            team_leaders:\n                name: Team Leaders\n                description: Display the team members.\n                icon: octo-icon-comment\n                fields:\n                    _mixin:\n                        type: mixin\n                        source: Blocks\\TeamLeaders\n"
  },
  {
    "path": "themes/demo/blueprints/fields/_blog_content.yaml",
    "content": "uuid: 4d7fd1e4-85f2-48f5-947e-92819fc8664b\nhandle: Fields\\BlogContent\ntype: mixin\nname: Blog Post Content\n\nfields:\n    banner:\n        tab: Manage\n        label: Banner\n        type: fileupload\n        mode: image\n        maxFiles: 1\n\n    author:\n        tab: Manage\n        label: Author\n        commentAbove: 'Select the author for this blog post'\n        type: entries\n        maxItems: 1\n        source: Blog\\Author\n\n    categories:\n        tab: Manage\n        label: Categories\n        commentAbove: 'Select categories the blog post belongs to'\n        type: entries\n        source: Blog\\Category\n\n    featured_text:\n        tab: Featured\n        label: Featured Text\n        type: textarea\n        size: small\n\n    gallery:\n        label: Gallery\n        type: fileupload\n        mode: image\n        span: adaptive\n        tab: Gallery\n\n    gallery_media:\n        label: Media\n        type: mediafinder\n        mode: image\n        span: adaptive\n        tab: Media\n"
  },
  {
    "path": "themes/demo/blueprints/fields/_social_links.yaml",
    "content": "uuid: ae2d2c25-3a0e-4765-8b36-d1666fc0e31f\nname: Social Links\ntype: mixin\nhandle: Fields\\SocialLinks\n\nfields:\n    social_links:\n        type: repeater\n        prompt: Add Link\n        form:\n            fields:\n                platform:\n                    span: auto\n                    label: Platform\n                    type: dropdown\n                    options:\n                        facebook: Facebook\n                        linkedin: LinkedIn\n                        dribbble: Dribbble\n                        twitter: Twitter\n                        youtube: YouTube\n\n                url:\n                    span: auto\n                    label: Social Link\n                    type: text\n                    placeholder: \"https://...\"\n"
  },
  {
    "path": "themes/demo/blueprints/fields/blocks/_detailed-block.yaml",
    "content": "uuid: da034c4f-0e24-4906-94b9-66b26c0549c9\nname: Detailed Block\ntype: mixin\nhandle: Blocks\\DetailedBlock\n\nfields:\n    title:\n        label: Title\n        type: text\n\n    content:\n        label: Description\n        type: richeditor\n        size: small\n\n    list_items:\n        label: List Items\n        type: datatable\n        btnAddRowLabel: Add Item\n        btnDeleteRowLabel: Delete Item\n        columns:\n            text:\n                type: string\n                title: Text\n\n    button_text:\n        label: Button Text\n        span: auto\n        placeholder: Main call to action\n\n    button_url:\n        label: Button URL\n        span: auto\n\n    image:\n        label: Image\n        type: mediafinder\n        mode: image\n        maxItems: 1\n"
  },
  {
    "path": "themes/demo/blueprints/fields/blocks/_image-slice.yaml",
    "content": "uuid: 21aad99b-d3c6-4f5e-b271-15471c81e11b\nname: Image Slice\ntype: mixin\nhandle: Blocks\\ImageSlice\n\nfields:\n    image:\n        label: Image\n        type: mediafinder\n        mode: image\n        maxItems: 1\n"
  },
  {
    "path": "themes/demo/blueprints/fields/blocks/_paragraph-block.yaml",
    "content": "uuid: 015fde4b-23d8-4ba3-8e78-9c6ebfb5fcf7\nname: Paragraph Block\ntype: mixin\nhandle: Blocks\\ParagraphBlock\n\nfields:\n    title:\n        label: Title\n        type: text\n\n    content:\n        label: Description\n        type: richeditor\n        size: small\n\n    image:\n        label: Image\n        type: mediafinder\n        mode: image\n        maxItems: 1\n"
  },
  {
    "path": "themes/demo/blueprints/fields/blocks/_scoreboard-metrics.yaml",
    "content": "uuid: 55615b16-120f-4be9-9429-6ae6dabc523c\nname: Scoreboard Metrics\ntype: mixin\nhandle: Blocks\\ScoreboardMetrics\n\nfields:\n    metrics:\n        label: Metrics\n        type: repeater\n        form:\n            fields:\n                number:\n                    label: Number\n                    type: number\n                    span: row\n                    spanClass: col-md-3\n\n                description:\n                    label: Description\n                    type: text\n                    span: row\n                    spanClass: col-md-9\n\n                icon:\n                    label: Icon\n                    type: radio\n                    cssClass: inline-options\n                    options:\n                        notepad: Notepad\n                        shield: Shield\n                        basket: Basket\n                        briefcase: Briefcase\n"
  },
  {
    "path": "themes/demo/blueprints/fields/blocks/_team-leaders.yaml",
    "content": "uuid: 8c4041cf-f16d-46f8-86be-9372a266ae6d\nname: Team Leaders\ntype: mixin\nhandle: Blocks\\TeamLeaders\n\nfields:\n    members:\n        label: Members\n        type: repeater\n        itemsExpanded: false\n        form:\n            fields:\n                title:\n                    label: Title\n                    span: left\n\n                role:\n                    label: Role\n                    span: right\n\n                description:\n                    label: Description\n                    type: textarea\n                    size: tiny\n\n                avatar:\n                    label: Image\n                    type: mediafinder\n                    mode: image\n                    maxItems: 1\n\n                _social_links:\n                    label: Social Links\n                    type: mixin\n                    source: Fields\\SocialLinks\n"
  },
  {
    "path": "themes/demo/blueprints/pages/about.yaml",
    "content": "uuid: a63fabaf-7c0b-4c74-b36f-7abf1a3ad1c1\nhandle: Page\\About\ntype: single\nname: About Page\ndrafts: true\n\nnavigation:\n    icon: icon-rocket\n    order: 200\n\nfields:\n    _block_builder:\n        type: mixin\n        source: Fields\\Blocks\n"
  },
  {
    "path": "themes/demo/blueprints/pages/article.yaml",
    "content": "uuid: 339b11b7-69ad-43c4-9be1-6953e7738827\nhandle: Page\\Article\ntype: structure\nname: Article\ndrafts: true\n\ncustomMessages:\n    buttonCreate: New Article\n\nstructure:\n    maxDepth: 3\n\nnavigation:\n    label: All Articles\n    icon: icon-wikipedia-w\n    order: 100\n\nfields:\n    content:\n        label: Content\n        tab: Edit\n        type: richeditor\n        span: adaptive\n\n    banner:\n        label: Banner\n        type: fileupload\n        mode: image\n        maxFiles: 1\n\n    show_in_toc:\n        label: Show in TOC\n        comment: Include this article in the table of contents\n        type: checkbox\n\n    summary_text:\n        label: Summary Text\n        type: textarea\n        size: small\n\n    gallery:\n        label: Gallery\n        type: fileupload\n        mode: image\n\n    external_links:\n        label: External Links\n        tab: Links\n        type: repeater\n        form:\n            fields:\n                link_text:\n                    label: Link Text\n                    span: auto\n\n                link_url:\n                    label: Link URL\n                    span: auto\n"
  },
  {
    "path": "themes/demo/blueprints/site/menus/_menu_item.yaml",
    "content": "uuid: 936f26c0-b816-4c78-afaa-0b6977e80213\nhandle: Site\\Menus\\MenuItem\ntype: mixin\nname: Menu Item\n\nfields:\n    is_hidden:\n        label: Hidden\n        comment: Hide this menu item from appearing on the website.\n        type: checkbox\n        tab: Display\n\n    code:\n        label: Code\n        comment: Enter the menu item code if you want to access it with the API.\n        tab: Attributes\n        span: auto\n        type: text\n        preset:\n            field: title\n            type: slug\n\n    css_class:\n        label: CSS Class\n        comment: Enter a CSS class name to give this menu item a custom appearance.\n        tab: Attributes\n        span: auto\n        type: text\n\n    is_external:\n        label: External Link\n        comment: Open links for this menu item in a new window.\n        tab: Attributes\n        type: checkbox\n\n    nesting:\n        label: Include nested items\n        shortLabel: Nesting\n        comment: Nested items could be generated dynamically by supported page references.\n        type: checkbox\n        tab: Reference\n        column: false\n\n    replace:\n        label: Replace this item with its generated children\n        comment: Use this checkbox to push generated menu items to the same level with this item. This item itself will be hidden.\n        type: checkbox\n        tab: Reference\n        column: false\n        scope: false\n        trigger:\n            action: disable|empty\n            field: nesting\n            condition: unchecked\n"
  },
  {
    "path": "themes/demo/blueprints/site/menus/_sitemap_item.yaml",
    "content": "uuid: 5282e203-615f-4f1f-9c23-22b010c49eba\nhandle: Site\\Menus\\SitemapItem\ntype: mixin\nname: Menu Item\n\nfields:\n    priority:\n        label: Priority\n        commentAbove: The priority of this URL relative to other URLs on your site.\n        tab: Sitemap\n        type: radio\n        inlineOptions: true\n        options:\n            '0.1': '0.1'\n            '0.2': '0.2'\n            '0.3': '0.3'\n            '0.4': '0.4'\n            '0.5': '0.5'\n            '0.6': '0.6'\n            '0.7': '0.7'\n            '0.8': '0.8'\n            '0.9': '0.9'\n            '1.0': '1.0'\n\n    changefreq:\n        commentAbove: How frequently the page is likely to change.\n        label: Change Frequency\n        tab: Sitemap\n        type: radio\n        inlineOptions: true\n        options:\n            always: Always\n            hourly: Hourly\n            daily: Daily\n            weekly: Weekly\n            monthly: Monthly\n            yearly: Yearly\n            never: Never\n\n    nesting:\n        label: Include nested items\n        shortLabel: Nesting\n        comment: Nested items could be generated dynamically by supported page references.\n        type: checkbox\n        tab: Reference\n        column: false\n\n    replace:\n        label: Replace this item with its generated children\n        comment: Use this checkbox to push generated menu items to the same level with this item. This item itself will be hidden.\n        type: checkbox\n        tab: Reference\n        column: false\n        scope: false\n        trigger:\n            action: disable|empty\n            field: nesting\n            condition: unchecked\n"
  },
  {
    "path": "themes/demo/blueprints/site/menus.yaml",
    "content": "uuid: 85e471d2-09b9-4f3d-a63b-1ae9d92d2879\nhandle: Site\\Menus\ntype: entry\nname: Menu\ndrafts: false\npagefinder: false\n\ncustomMessages:\n    buttonCreate: New Menu\n\nnavigation:\n    label: Menus\n    icon: icon-sitemap\n    order: 300\n\ncolumns:\n    title:\n        label: Title\n    entry_type_name:\n        label: Menu Type\n        invisible: false\n    slug:\n        label: Code\n        invisible: false\n\nfields:\n    slug:\n        label: Code\n        validation:\n            - required\n\ngroups:\n    regular_menu:\n        name: Regular Menu\n        fields:\n            items:\n                label: Menu Items\n                type: nesteditems\n                span: adaptive\n                maxDepth: 0\n                customMessages:\n                    buttonCreate: Add Item\n                    titleCreateForm: Create Item\n                    titleUpdateForm: Edit Item\n                form:\n                    fields:\n                        title:\n                            label: Title\n                            tab: Reference\n                            default: New Menu Item\n                            span: full\n                            type: text\n                            autoFocus: true\n                            validation:\n                                - required\n\n                        reference:\n                            label: Reference\n                            type: pagefinder\n                            tab: Reference\n                    tabs:\n                        fields:\n                            _menu_item:\n                                type: mixin\n                                source: Site\\Menus\\MenuItem\n\n    sitemap_menu:\n        name: Sitemap Menu\n        fields:\n            sitemap_items:\n                label: Sitemap Items\n                type: nesteditems\n                span: adaptive\n                maxDepth: 1\n                customMessages:\n                    buttonCreate: Add Sitemap Item\n                    titleCreateForm: Create Sitemap Item\n                    titleUpdateForm: Edit Sitemap Item\n                form:\n                    fields:\n                        title:\n                            label: Title\n                            tab: Reference\n                            default: New Menu Item\n                            span: full\n                            type: text\n                            autoFocus: true\n                            validation:\n                                - required\n\n                        reference:\n                            label: Reference\n                            type: pagefinder\n                            tab: Reference\n                    tabs:\n                        fields:\n                            _menu_item:\n                                type: mixin\n                                source: Site\\Menus\\SitemapItem"
  },
  {
    "path": "themes/demo/composer.json",
    "content": "{\n    \"name\": \"october/demo-theme\",\n    \"type\": \"october-theme\",\n    \"description\": \"Demo October CMS theme\",\n    \"keywords\": [\"october\", \"cms\", \"demo\", \"theme\"],\n    \"authors\": [\n        {\n            \"name\": \"Alexey Bobkov\",\n            \"email\": \"aleksey.bobkov@gmail.com\",\n            \"role\": \"Co-founder\"\n        },\n        {\n            \"name\": \"Samuel Georges\",\n            \"email\": \"daftspunky@gmail.com\",\n            \"role\": \"Co-founder\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=5.4\",\n        \"composer/installers\": \"~1.0\"\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"1.0-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "themes/demo/content/ajax/calcresult.txt",
    "content": "{{ result|default(75) }}"
  },
  {
    "path": "themes/demo/content/ajax/form.txt",
    "content": "<form role=\"form\" data-request=\"onTest\" data-request-update=\"calcresult: '#result'\">\n    <input type=\"text\" value=\"15\" name=\"value1\">\n\n    <label><input type=\"radio\" name=\"operation\" value=\"+\"> +</label>\n    <label><input type=\"radio\" name=\"operation\" value=\"-\"> -</label>\n    <label><input type=\"radio\" name=\"operation\" value=\"*\" checked> *</label>\n    <label><input type=\"radio\" name=\"operation\" value=\"/\"> /</label>\n\n    <input type=\"text\" value=\"5\" name=\"value2\">\n    <button type=\"submit\">=</button>\n</form>\n\n<!-- The result -->\n<div id=\"result\">{% partial \"calcresult\" %}\"</div>"
  },
  {
    "path": "themes/demo/content/ajax/handler.txt",
    "content": "function onTest()\n{\n    $value1 = input('value1');\n    $value2 = input('value2');\n    $operation = input('operation');\n\n    switch ($operation) {\n        case '+' : \n            $this['result'] = $value1 + $value2;\n            break;\n        case '-' : \n            $this['result'] = $value1 - $value2;\n            break;\n        case '*' : \n            $this['result'] = $value1 * $value2;\n            break;\n        default : \n            $this['result'] = $value2 != 0 ? round($value1 / $value2, 2) : 'NaN';\n            break;\n    }\n}"
  },
  {
    "path": "themes/demo/esbuild.config.js",
    "content": "import * as esbuild from 'esbuild';\nimport { execSync } from 'child_process';\nimport { copyFileSync, mkdirSync } from 'fs';\n\nconst isProduction = process.argv.includes('--production');\n\nfunction copyDir(src, dest) {\n    execSync(`cp -r \"${src}\" \"${dest}\"`, { stdio: 'inherit' });\n}\n\n// JS Bundling\n// =========================================================================\n\nconsole.log('Bundling JS...');\n\nawait esbuild.build({\n    entryPoints: ['assets/vendor/bootstrap/bootstrap.js'],\n    bundle: true,\n    format: 'iife',\n    outfile: 'assets/vendor/bootstrap/bootstrap.min.js',\n    minify: isProduction,\n    sourcemap: false,\n    target: ['es2020'],\n    external: ['jquery'],\n});\n\nawait esbuild.build({\n    entryPoints: ['assets/vendor/codeblocks/codeblocks.js'],\n    bundle: true,\n    format: 'iife',\n    outfile: 'assets/vendor/codeblocks/codeblocks.min.js',\n    minify: isProduction,\n    sourcemap: false,\n    target: ['es2020'],\n    external: ['jquery'],\n});\n\n// SCSS Compilation\n// =========================================================================\n\nconsole.log('Compiling SCSS...');\n\nconst sassFlags = '--load-path=node_modules --no-source-map' + (isProduction ? ' --style=compressed' : '');\n\nexecSync(`npx sass assets/vendor/bootstrap/bootstrap.scss assets/vendor/bootstrap/bootstrap.css ${sassFlags}`, { stdio: 'inherit' });\nexecSync(`npx sass assets/vendor/bootstrap-icons/bootstrap-icons.scss assets/vendor/bootstrap-icons/bootstrap-icons.css ${sassFlags}`, { stdio: 'inherit' });\n\n// File Copies\n// =========================================================================\n\nconsole.log('Copying vendor files...');\n\ncopyFileSync('node_modules/jquery/dist/jquery.min.js', 'assets/vendor/jquery.min.js');\n\nmkdirSync('assets/vendor/bootstrap-icons/fonts', { recursive: true });\ncopyDir('node_modules/bootstrap-icons/font/fonts/.', 'assets/vendor/bootstrap-icons/fonts/');\n\ncopyDir('node_modules/slick-carousel/slick/.', 'assets/vendor/slick-carousel/');\n\nmkdirSync('assets/vendor/photoswipe', { recursive: true });\ncopyFileSync('node_modules/photoswipe/dist/photoswipe.css', 'assets/vendor/photoswipe/photoswipe.css');\ncopyFileSync('node_modules/photoswipe/dist/photoswipe-lightbox.esm.min.js', 'assets/vendor/photoswipe/photoswipe-lightbox.esm.min.js');\ncopyFileSync('node_modules/photoswipe/dist/photoswipe.esm.min.js', 'assets/vendor/photoswipe/photoswipe.esm.min.js');\n\nmkdirSync('assets/vendor/photoswipe-dynamic-caption-plugin', { recursive: true });\ncopyFileSync('node_modules/photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.esm.js', 'assets/vendor/photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.esm.js');\ncopyFileSync('node_modules/photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.css', 'assets/vendor/photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.css');\n\nconsole.log('Build complete.');\n"
  },
  {
    "path": "themes/demo/layouts/blog.htm",
    "content": "##\ndescription = \"Blog layout\"\n\n[resources]\nvars[activeBlogCategory] = \"\"\n==\n<!DOCTYPE html>\n<html>\n    <head>\n        {% partial 'site/head/head-meta' %}\n        <title>October CMS - {{ this.page.meta_title ?: placeholder('pageTitle') }}</title>\n        <meta name=\"description\" content=\"{{ this.page.meta_description }}\">\n        <meta name=\"title\" content=\"{{ this.page.meta_title }}\">\n        {% partial 'site/head/head-links' %}\n        {% partial 'site/head/head-scripts' %}\n        {% partial 'site/head/analytics-code' %}\n    </head>\n    <body class=\"layout-blog\">\n\n        <!-- Header -->\n        <header id=\"layout-header\">\n            {% partial 'site/header' %}\n        </header>\n\n        {% partial 'site/flash-messages' %}\n\n        <!-- Content -->\n        <section id=\"layout-content\">\n            <div class=\"container\">\n                {% set pageTitle = placeholder('pageTitle') %}\n                {% if pageTitle %}\n                    <header>\n                        <h1>{{ pageTitle }}</h1>\n                    </header>\n                {% endif %}\n                <div class=\"row g-5\">\n                    <div class=\"col-md-8\">\n                        <div class=\"pe-3\">\n                            {% page %}\n                        </div>\n                    </div>\n\n                    <div class=\"col-md-4\">\n                        <div class=\"position-sticky\" style=\"top: 2rem;\">\n                            {% partial 'blog/sidebar' %}\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <!-- Footer -->\n        <footer id=\"layout-footer\">\n            {% partial 'site/footer' %}\n        </footer>\n\n        <!-- Mobile -->\n        {% partial 'site/nav-mobile' %}\n\n        <!-- How the page is made -->\n        {% partial 'site/how-its-made' %}\n    </body>\n</html>\n"
  },
  {
    "path": "themes/demo/layouts/default.htm",
    "content": "##\ndescription = \"Default layout\"\n==\n<!DOCTYPE html>\n<html>\n    <head>\n        {% partial 'site/head/head-meta' %}\n        <title>October CMS - {{ this.page.meta_title ?: placeholder('pageTitle') }}</title>\n        <meta name=\"description\" content=\"{{ this.page.meta_description }}\">\n        <meta name=\"title\" content=\"{{ this.page.meta_title }}\">\n\n        <!-- Open Graph -->\n        <meta property=\"og:title\" content=\"{{ this.page.meta_title ?: placeholder('pageTitle') }}\">\n        <meta property=\"og:description\" content=\"{{ this.page.meta_description }}\">\n        <meta property=\"og:type\" content=\"{{ this.page.meta_type ?: 'website' }}\">\n        {% if this.page.meta_image %}\n            <meta property=\"og:image\" content=\"{{ this.page.meta_image|media }}\">\n        {% endif %}\n        <meta property=\"og:url\" content=\"{{ this.page.url }}\">\n\n        <!-- Twitter Card -->\n        <meta name=\"twitter:card\" content=\"{{ this.page.meta_image ? 'summary_large_image' : 'summary' }}\">\n\n        <!-- Robots -->\n        {% if this.page.meta_robots %}\n            <meta name=\"robots\" content=\"{{ this.page.meta_robots }}\">\n        {% endif %}\n        {% partial 'site/head/head-links' %}\n        {% partial 'site/head/head-scripts' %}\n        {% partial 'site/head/analytics-code' %}\n    </head>\n    <body class=\"{{ 'page-'~this.page.id }}\">\n\n        <!-- Header -->\n        <header id=\"layout-header\">\n            {% partial 'site/header' %}\n        </header>\n\n        {% partial 'site/flash-messages' %}\n\n        <!-- Content -->\n        <section id=\"layout-content\">\n            {% page %}\n        </section>\n\n        <!-- Footer -->\n        <footer id=\"layout-footer\">\n            {% partial 'site/footer' %}\n        </footer>\n\n        <!-- Mobile -->\n        {% partial 'site/nav-mobile' %}\n\n        <!-- How the page is made -->\n        {% partial 'site/how-its-made' %}\n    </body>\n</html>\n"
  },
  {
    "path": "themes/demo/layouts/external.htm",
    "content": "##\ndescription = \"External layout\"\n==\n<!DOCTYPE html>\n<html>\n    <head>\n        {% partial 'site/head/head-meta' %}\n        <title>October CMS - {{ this.page.meta_title ?: placeholder('pageTitle') }}</title>\n        <meta name=\"description\" content=\"{{ this.page.meta_description }}\">\n        <meta name=\"title\" content=\"{{ this.page.meta_title }}\">\n        {% partial 'site/head/head-links' %}\n        {% partial 'site/head/head-scripts' %}\n        {% partial 'site/head/analytics-code' %}\n    </head>\n    <body class=\"{{ 'page-'~this.page.id }}\">\n\n        <!-- Header -->\n        <header id=\"layout-header\">\n            <nav id=\"layout-nav\" class=\"navbar navbar-expand-lg navbar-dark\">\n                <div class=\"navbar-container container\">\n                    <a class=\"navbar-brand\" href=\"{{ 'index'|page }}\">\n                        <img src=\"{{ 'assets/images/logo.svg'|theme }}\" alt=\"October CMS Demo\" width=\"230\" />\n                    </a>\n                </div>\n            </nav>\n        </header>\n\n        {% partial 'site/flash-messages' %}\n\n        <!-- Content -->\n        <section id=\"layout-content\">\n            {% page %}\n        </section>\n\n        <!-- Footer -->\n        <footer id=\"layout-footer\">\n            <div class=\"element-footer\">\n                <div class=\"container\">\n                </div>\n            </div>\n\n            {% partial 'site/modals/alert-dialog' %}\n            {% partial 'site/modals/password-dialog' %}\n            {% partial 'site/modals/ajax-modal' %}\n        </footer>\n    </body>\n</html>\n"
  },
  {
    "path": "themes/demo/layouts/home.htm",
    "content": "##\ndescription = \"Default layout\"\n==\n<!DOCTYPE html>\n<html>\n    <head>\n        {% partial 'site/head/head-meta' %}\n        <title>October CMS - {{ this.page.meta_title ?: placeholder('pageTitle') }}</title>\n        <meta name=\"description\" content=\"{{ this.page.meta_description }}\">\n        <meta name=\"title\" content=\"{{ this.page.meta_title }}\">\n        {% partial 'site/head/head-links' %}\n        {% partial 'site/head/head-scripts' %}\n        {% partial 'site/head/analytics-code' %}\n        <meta name=\"turbo-visit-control\" content=\"reload\" />\n    </head>\n    <body class=\"layout-home\">\n\n        <!-- Nav -->\n        <nav id=\"layout-nav\" class=\"navbar navbar-expand-lg navbar-dark\">\n            <div class=\"container\">\n                <a class=\"navbar-brand\" href=\"{{ 'index'|page }}\">\n                    <img src=\"{{ 'assets/images/logo.svg'|theme }}\" alt=\"October CMS Demo\" width=\"190\" />\n                </a>\n                <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                    <span class=\"navbar-toggler-icon\"></span>\n                </button>\n                <div class=\"collapse navbar-collapse\">\n                    <ul class=\"navbar-nav ms-auto mb-2 mb-lg-0\">\n                        {% partial 'site/nav-links' %}\n                    </ul>\n                </div>\n            </div>\n        </nav>\n\n        {% partial 'site/flash-messages' %}\n\n        <!-- Content -->\n        <section id=\"layout-content\">\n            {% page %}\n        </section>\n\n        <!-- Footer -->\n        <footer id=\"layout-footer\">\n            {% partial 'site/footer' %}\n        </footer>\n\n        <!-- Mobile -->\n        {% partial 'site/nav-mobile' %}\n\n        <!-- How the page is made -->\n        {% partial 'site/how-its-made' %}\n\n    </body>\n</html>\n"
  },
  {
    "path": "themes/demo/layouts/wiki.htm",
    "content": "##\ndescription = \"Wiki layout\"\n==\n<!DOCTYPE html>\n<html>\n    <head>\n        {% partial 'site/head/head-meta' %}\n        <title>October CMS - {{ this.page.meta_title ?: placeholder('pageTitle') }}</title>\n        <meta name=\"description\" content=\"{{ this.page.meta_description }}\">\n        <meta name=\"title\" content=\"{{ this.page.meta_title }}\">\n        {% partial 'site/head/head-links' %}\n        {% partial 'site/head/head-scripts' %}\n        {% partial 'site/head/analytics-code' %}\n    </head>\n    <body class=\"layout-wiki\">\n\n        <!-- Header -->\n        <header id=\"layout-header\">\n            {% partial 'site/header' %}\n        </header>\n\n        {% partial 'site/flash-messages' %}\n\n        <!-- Content -->\n        <section id=\"layout-content\">\n            <div class=\"container\">\n                <div class=\"row g-5\">\n                    <div class=\"col-md-4\">\n                        <div class=\"position-sticky\" style=\"top: 2rem;\">\n                            {% partial 'wiki/sidebar' %}\n                        </div>\n                    </div>\n                    <div class=\"col-md-8\">\n                        {% page %}\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <!-- Footer -->\n        <footer id=\"layout-footer\">\n            {% partial 'site/footer' %}\n        </footer>\n\n        <!-- Mobile -->\n        {% partial 'site/nav-mobile' %}\n\n        <!-- How the page is made -->\n        {% partial 'site/how-its-made' %}\n\n    </body>\n</html>\n"
  },
  {
    "path": "themes/demo/package.json",
    "content": "{\n    \"private\": true,\n    \"type\": \"module\",\n    \"scripts\": {\n        \"dev\": \"node esbuild.config.js\",\n        \"build\": \"node esbuild.config.js --production\"\n    },\n    \"devDependencies\": {\n        \"esbuild\": \"^0.24.0\",\n        \"sass\": \"^1.45.0\"\n    },\n    \"dependencies\": {\n        \"bootstrap\": \"^5.3.0\",\n        \"bootstrap-icons\": \"^1.10\",\n        \"codemirror\": \"^5.64.0\",\n        \"jquery\": \"^3.6.0\",\n        \"slick-carousel\": \"^1.8.1\",\n        \"photoswipe\": \"^5.2.4\",\n        \"photoswipe-dynamic-caption-plugin\": \"^1.1.1\"\n    }\n}\n"
  },
  {
    "path": "themes/demo/pages/404.htm",
    "content": "title = \"Page Not Found (404)\"\nurl = \"/404\"\nlayout = \"default\"\n\n[resources]\ncss[] = \"pages/404.css\"\n==\n{% put meta %}\n    <meta name=\"turbo-visit-control\" content=\"error\">\n{% endput %}\n<div class=\"container page-404\">\n    <div class=\"banner-404\">\n        <h1>Page Not Found</h1>\n        <p>We're sorry, but the page you requested cannot be found.</p>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/pages/about.htm",
    "content": "##\nurl = \"/about\"\nlayout = \"default\"\ntitle = \"About Page\"\nmeta_title = \"{{ aboutpage.title }}\"\n\n[section aboutpage]\nhandle = \"Page\\About\"\n\n[resources]\nvars[activeNavLink] = 'about'\n==\n{% put headerAfter %}\n    <div class=\"container\">\n        <div class=\"header-extra text-center\">\n            <h1 class=\"mb-4\">Hello! This is October CMS!</h1>\n            <p class=\"lead\">A company proving that making websites is not rocket science.</p>\n        </div>\n    </div>\n{% endput %}\n<main class=\"header-flush\">\n    {% for block in aboutpage.blocks %}\n        {% partial 'blocks/' ~ str_slug(block.type) block=block %}\n    {% endfor %}\n</main>\n"
  },
  {
    "path": "themes/demo/pages/ajax.htm",
    "content": "##\ntitle = \"AJAX Framework\"\nurl = \"/ajax\"\nlayout = \"default\"\nmeta_title = \"AJAX Framework\"\n\n[resources]\ncss[] = \"pages/ajax.css\"\nvars[blueFooterStyle] = 1\n==\n<?\nfunction onTest()\n{\n    $value1 = input('value1');\n    $value2 = input('value2');\n    $operation = input('operation');\n\n    switch ($operation) {\n        case '+' :\n            $this['result'] = $value1 + $value2;\n            break;\n        case '-' :\n            $this['result'] = $value1 - $value2;\n            break;\n        case '*' :\n            $this['result'] = $value1 * $value2;\n            break;\n        default :\n            $this['result'] = $value2 != 0 ? round($value1 / $value2, 2) : 'NaN';\n            break;\n    }\n}\n?>\n==\n<div class=\"page-ajax\">\n    <div class=\"container pt-5\">\n        <div class=\"row\">\n            <div class=\"col-md-8 offset-md-2\">\n                <div class=\"text-center py-3\">\n                    <h1 class=\"mb-4\">AJAX Framework</h1>\n                    <p class=\"lead\">The built-in JavaScript framework provides simple but powerful AJAX capabilities. In most cases, you don't need to write JavaScript code to post data to the server and update elements of your page. The <code>data-</code> attributes can solve a lot of typical tasks. For more complex cases you can employ the full power of JavaScript. You can find more information in the <a href=\"https://docs.octobercms.com/3.x/cms/ajax/introduction.html\">documentation</a>. Check out the calculator example below!</p>\n                </div>\n            </div>\n            <div class=\"col-md-6 offset-md-3\">\n                <div class=\"ajax-demo-container pb-5\">\n                    <div class=\"panel\">\n                        <div class=\"row\">\n                            <div class=\"col-lg-9 control-panel\">\n                                <div class=\"panel-body\">\n                                    <form role=\"form\" class=\"form-inline\" data-request=\"onTest\" data-request-update=\"calcresult: '#result'\">\n                                        <div class=\"form-group\">\n                                            <input type=\"text\" class=\"form-control\" value=\"15\" name=\"value1\">\n                                        </div>\n\n                                        <div class=\"form-group operation-buttons\">\n                                            <label><input type=\"radio\" name=\"operation\" value=\"+\"><span>+</span></label>\n                                            <label><input type=\"radio\" name=\"operation\" value=\"-\"><span>-</span></label>\n                                            <label><input type=\"radio\" name=\"operation\" value=\"*\" checked><span>*</span></label>\n                                            <label><input type=\"radio\" name=\"operation\" value=\"/\"><span>/</span></label>\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <input type=\"text\" class=\"form-control\" value=\"5\" name=\"value2\">\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <button type=\"submit\" class=\"btn btn-primary\">=</button>\n                                        </div>\n                                    </form>\n                                </div>\n                            </div>\n                            <div class=\"col-lg-3 ps-0\">\n                                <div id=\"result\">{% partial \"calcresult\" %}</div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <!-- Page Explanation -->\n    <div class=\"explanation\">\n        <div class=\"container\">\n            <div class=\"row\">\n                <div class=\"col-sm-8 offset-sm-2\">\n                    <h3>The HTML markup for that example</h3>\n\n                    <p>The markup defines a form with the inputs for numbers, operation and buttons. Note the <code>data-request</code> and <code>data-request-update</code> attributes on the FORM tag. Those two attributes tell the AJAX framework which PHP function must handle the request and what page element must be updated when the result comes back from the server.</p>\n\n                    <div class=\"code-block collapsed-code-block collapsed\">\n                        <pre>{% content \"ajax/form.txt\" %}</pre>\n                        <div class=\"expand-code\">Expand</div>\n                    </div>\n\n                    <h3>The <em>calcresult</em> partial</h3>\n\n                    <p>The partial is referred in the form's <code>data-request-update</code> attribute together with the ID of the element that must be updated with the AJAX request. The partial is also rendered when the page first loads to display the default value.</p>\n\n                    <div class=\"code-block\">\n                        <pre>{% content \"ajax/calcresult.txt\" %}</pre>\n                    </div>\n\n                    <h3>The <em>onTest</em> PHP function</h3>\n\n                    <p>That PHP function is referred in the form's <code>data-request</code> attribute and acts as the AJAX handler. It loads the submitted values, performs the requested operation, and assigns the calculated value to the <em>result</em> page variable, which is then used in the <em>calcresult</em> partial. The function is defined right in the page file, in the <a href=\"https://docs.octobercms.com/3.x/cms/themes/pages.html#dynamic-pages\">PHP section</a>.</p>\n\n                    <div class=\"code-block collapsed-code-block collapsed\">\n                        <pre data-language=\"php\">{% content \"ajax/handler.txt\" %}</pre>\n                        <div class=\"expand-code\">Expand</div>\n                    </div>\n\n                    <div class=\"explanation-decoration-1\"></div>\n                    <div class=\"explanation-decoration-2\"></div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/pages/blog/archive.htm",
    "content": "##\nurl = \"/blog/archive/:year|(^[0-9]{4}$)/:month|(^0?[1-9]$)|(^1[0-2]$)\"\ntitle = \"Blog Archive\"\nlayout = \"blog\"\n\n[collection blog]\nhandle = \"Blog\\Post\"\n\n[resources]\nvars[activeNavLink] = 'blog'\n==\n{% set dateParsed = date('1-'~this.param.month~'-'~this.param.year) %}\n{% set posts = blog\n    .where('published_at_year', this.param.year)\n    .where('published_at_month', this.param.month)\n    .get()\n%}\n{% put pageTitle = 'Articles from ' ~ dateParsed|date('F Y') %}\n\n<div class=\"blog-featured row row-cols-1 row-cols-xl-2 g-3 pb-5\">\n    {% for post in posts %}\n        {% partial 'blog/post-card' post=post %}\n    {% endfor %}\n</div>\n"
  },
  {
    "path": "themes/demo/pages/blog/author.htm",
    "content": "##\nurl = \"/blog/author/:slug\"\nlayout = \"default\"\ntitle = \"Display a Blog Author\"\n\n[section author]\nhandle = \"Blog\\Author\"\nidentifier = \"slug\"\n\n[collection blog]\nhandle = \"Blog\\Post\"\n\n[resources]\nvars[activeNavLink] = 'blog'\n==\n{% if author is empty %}\n    {% do abort(404) %}\n{% endif %}\n\n{% set authorPosts = blog.whereRelation('author', 'slug', author.slug).paginate(16) %}\n{% put pageTitle = author.title %}\n\n<main class=\"container\">\n    <header>\n        <h1>Posts by {{ author.title }}</h1>\n    </header>\n    <div class=\"blog-featured row mb-2\">\n        <div class=\"col-md-12\">\n            <div class=\"card card-post mb-4\">\n                <div class=\"card-body\">\n                    {% partial 'elements/user-panel-author' user=author hideAllPosts=true %}\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"blog-featured row row-cols-1 row-cols-xl-2 g-3 pb-5\">\n        {% for post in authorPosts %}\n            {% partial 'blog/post-card' post=post %}\n        {% endfor %}\n    </div>\n    <nav class=\"blog-pagination\" aria-label=\"Pagination\">\n        {{ pager(authorPosts) }}\n    </nav>\n</main>\n"
  },
  {
    "path": "themes/demo/pages/blog/category.htm",
    "content": "##\nurl = \"/blog/category/:slug/:id\"\nlayout = \"blog\"\ntitle = \"Display a Blog Category\"\n\n[section category]\nhandle = \"Blog\\Category\"\nidentifier = \"id\"\n\n[collection blog]\nhandle = \"Blog\\Post\"\n\n[resources]\nvars[activeNavLink] = 'blog'\nvars[activeBlogCategory] = \"{{ :slug }}\"\n==\n{% if category is empty %}\n    {% do abort(404) %}\n{% elseif category.slug and category.slug != this.param.slug %}\n    {% do redirect(''|page({ slug: category.slug }), 301) %}\n{% endif %}\n\n{% set posts = blog.whereRelation('categories', 'slug', category.slug).paginate(16) %}\n{% put pageTitle = 'Articles in ' ~ category.title %}\n\n<div class=\"blog-featured row row-cols-1 row-cols-xl-2 g-3 pb-5\">\n    {% for post in posts %}\n        {% partial 'blog/post-card' post=post %}\n    {% endfor %}\n</div>\n<nav class=\"blog-pagination\" aria-label=\"Pagination\">\n    {{ pager(posts) }}\n</nav>\n"
  },
  {
    "path": "themes/demo/pages/blog/index.htm",
    "content": "##\nurl = \"/blog\"\nlayout = \"blog\"\ntitle = \"Blog Homepage\"\n\n[collection blog]\nhandle = \"Blog\\Post\"\n\n[global blogConfig]\nhandle = \"Blog\\Config\"\n\n[resources]\nvars[activeNavLink] = 'blog'\n==\n{% set posts = blog.paginate(5) %}\n{% set archiveDates = blog\n    .selectRaw(\"count(*) as post_count, published_at_month, published_at_year\")\n    .groupBy('published_at_month', 'published_at_year').get()\n%}\n{% put pageTitle = blogConfig.blog_name ?: 'Blog' %}\n\n{% for post in posts %}\n    {% partial 'blog/post-card' post=post bannerCss='banner-lg' %}\n{% endfor %}\n\n<nav class=\"blog-pagination\" aria-label=\"Pagination\">\n    {{ pager(posts) }}\n</nav>\n"
  },
  {
    "path": "themes/demo/pages/blog/post.htm",
    "content": "##\nurl = \"/blog/post/:slug/:id\"\nlayout = \"blog\"\ntitle = \"Display a Blog Post\"\nmeta_title = \"{{ blog.title }} - Blog\"\n\n[section post]\nhandle = \"Blog\\Post\"\nidentifier = \"id\"\n\n[collection blogCategories]\nhandle = \"Blog\\Category\"\n\n[resources]\nvars[activeNavLink] = 'blog'\n==\n{% if post is empty %}\n    {% do abort(404) %}\n{% elseif post.slug and post.slug != this.param.slug %}\n    {% do redirect(''|page({ slug: post.slug }), 301) %}\n{% endif %}\n\n<article class=\"card card-post card-primary\">\n    {% if post.banner %}\n        <div class=\"card-banner banner-lg\" style=\"background-image:url('{{ post.banner.path }}')\"></div>\n    {% else %}\n        <div class=\"card-banner banner-lg\" style=\"background-image:url('{{ partial('site/helpers/random-stock-image') }}')\"></div>\n    {% endif %}\n\n    <div class=\"card-body card-lg\">\n        <h1 class=\"card-title\">\n            {{ post.title }}\n        </h1>\n\n        {% if post.entry_type == 'markdown_post' %}\n            {{ post.content|md|content }}\n        {% else %}\n            {{ post.content|content }}\n        {% endif %}\n\n        <div class=\"blog-post-gallery\">\n            {% partial 'controls/gallery-slider' gallery=post.gallery %}\n        </div>\n\n        <div class=\"row pt-3\">\n            <div class=\"col-md-8\">\n                <div class=\"card-meta\">\n                    {% if post.categories %}\n                        <div class=\"meta-item meta-categories\">\n                            Posted in\n                            {% for category in post.categories %}\n                                <a href=\"{{ 'blog/category'|page({ slug: category.slug, id: category.id }) }}\">{{ category.title }}</a>{{ not loop.last ? ',' }}\n                            {% endfor %}\n                        </div>\n                        <div class=\"meta-item px-2\">\n                            &bull;\n                        </div>\n                    {% endif %}\n                    <div class=\"meta-item text-icon text-icon-date\">\n                        {{ post.published_at_date|date('j M Y') }}\n                    </div>\n                </div>\n            </div>\n            <div class=\"col-md-4 text-end\">\n                <div class=\"share-button\">\n                    {% partial 'elements/share-button' %}\n                </div>\n            </div>\n        </div>\n    </div>\n    {% if post.author %}\n        <div class=\"card-divider\"></div>\n        <div class=\"card-body card-lg\">\n            {% partial 'elements/user-panel-author' user=post.author %}\n        </div>\n    {% endif %}\n    <div class=\"card-divider\"></div>\n    <div class=\"card-body card-lg\">\n        {% partial 'blog/comment-list' %}\n    </div>\n    <div class=\"card-divider\"></div>\n    <div class=\"card-body card-lg\">\n        {% partial 'blog/comment-form' %}\n    </div>\n</article>\n"
  },
  {
    "path": "themes/demo/pages/blog/rss.htm",
    "content": "##\nurl = \"/blog/rss\"\ntitle = \"Blog RSS Feed\"\n\n[collection blog]\nhandle = \"Blog\\Post\"\n\n[resources]\nheaders[Content-Type] = 'text/xml'\n==\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n    <channel>\n        <title>{{ this.page.meta_title ?: this.page.title }}</title>\n        <link>{{ 'blog/index'|page }}</link>\n        <description>{{ this.page.meta_description ?: this.page.description }}</description>\n        <atom:link href=\"{{ 'blog/rss'|page }}\" rel=\"self\" type=\"application/rss+xml\" />\n        {% for post in blog %}<item>\n            <title>{{ post.title }}</title>\n            <link>{{ 'blog/post'|page({ slug: post.slug, id: post.id }) }}</link>\n            <guid>{{ post.slug }}</guid>\n            <pubDate>{{ post.published_at_date.toRfc2822String }}</pubDate>\n            <description>{{ post.featured_text }}</description>\n        </item>\n        {% endfor %}\n    </channel>\n</rss>\n"
  },
  {
    "path": "themes/demo/pages/blog/search.htm",
    "content": "##\nurl = \"/blog/search\"\nlayout = \"default\"\ntitle = \"Search Blog Posts\"\nmeta_title = \"Search - Blog\"\n\n[collection blog]\nhandle = \"Blog\\Post\"\n\n[resources]\nvars[activeNavLink] = 'blog'\n==\n{% set searchTerm = get('term')|trim %}\n{% set posts = blog.searchWhere(searchTerm, ['title', 'content']).paginate(16) %}\n{% put pageTitle=searchTerm ~ ' - Search Results' %}\n\n<div class=\"container\">\n    <header>\n        <h1>{{ searchTerm }} - Search Results</h1>\n    </header>\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <form class=\"mb-5\">\n                <div class=\"input-group\">\n                    <div class=\"form-control-search\">\n                        <input type=\"text\" name=\"term\" class=\"form-control\" placeholder=\"Search\" value=\"{{ searchTerm }}\">\n                        <span class=\"search-icon\"></span>\n                    </div>\n                </div>\n            </form>\n\n            <div class=\"blog-featured row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-xl-4 g-3 pb-5\">\n                {% for post in posts %}\n                    {% partial 'blog/post-card' post=post %}\n                {% endfor %}\n            </div>\n            <nav class=\"blog-pagination\" aria-label=\"Pagination\">\n                {{ pager(posts, { withQuery: true }) }}\n            </nav>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/pages/components.htm",
    "content": "##\ntitle = \"Components Demo\"\nurl = \"/components\"\nlayout = \"default\"\nmeta_title = \"CMS Component Demo\"\n\n[demoTodo]\nmax = 3\naddDefault = 1\n\n[resources]\ncss[] = \"pages/components.css\"\nvars[activeNavLink] = 'demo'\nvars[blueFooterStyle] = 1\n==\n<div class=\"page-components\">\n    <div class=\"container pt-5\">\n        <div class=\"row\">\n            <div class=\"col-md-8 offset-md-2\">\n                <div class=\"text-center py-3\">\n                    <h1 class=\"mb-4\">CMS Component Demo</h1>\n                    <p class=\"lead\">Plugins can provide CMS components, simple building blocks that can enrich pages, layouts, and partials. Check out the To Do example below.</p>\n                </div>\n            </div>\n            <div class=\"col-md-6 offset-md-3\">\n                <div class=\"plugins-component-container pb-5\">\n                    {% component 'demoTodo' %}\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <!-- Page Explanation -->\n    <div class=\"explanation\">\n        <div class=\"container\">\n            <div class=\"row\">\n                <div class=\"col-sm-8 offset-sm-2\">\n                    <h3>HTML Markup for that example</h3>\n\n                    <div class=\"code-block mb-4\">\n                        <pre>{% autoescape %}{{ \"{% component 'demoTodo' %}\" }}{% endautoescape %}</pre>\n                    </div>\n\n                    <p>Wait, only one line is needed? Yes! CMS components are simple building blocks that can be used with a small amount of code. Components encapsulate PHP code and partials and can be included in a page, layout or partial with a single line of code. By sharing plugins between multiple projects, you can reuse CMS components and be more productive. The <code>demoTodo</code> component used here is provided by the plugin called <em>October\\Demo</em>, you can find it in the <em>plugins/october/demo</em> folder.</p>\n\n                    <div class=\"py-4\">\n                        <p>\n                            <a href=\"https://docs.octobercms.com/3.x/cms/themes/components.html\" target=\"_blank\" class=\"btn btn-primary btn-lg btn-pill\">\n                                Learn more about CMS Components\n                            </a>\n                        </p>\n                    </div>\n                    <div class=\"explanation-decoration-1\"></div>\n                    <div class=\"explanation-decoration-2\"></div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/pages/contact.htm",
    "content": "##\ntitle = \"Contact Us\"\nurl = \"/contact\"\nlayout = \"default\"\nmeta_title = \"Get in touch!\"\n\n[resources]\ncss[] = \"pages/contact.css\"\nvars[activeNavLink] = 'contact'\nvars[blueFooterStyle] = 1\n==\n<div class=\"page-contact\">\n    <div class=\"container my-5 py-4\">\n        <div class=\"row\">\n            <div class=\"col-lg-4\">\n                <h1>Ready for something new? Get in touch!</h1>\n                <p class=\"py-4\">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p>\n\n                <div class=\"contact-options\">\n                    <div class=\"option mb-2 d-flex\">\n                        <div class=\"pe-3\">\n                            <img src=\"{{ 'assets/images/icons/icon-address.png'|theme }}\" width=\"42\" alt=\"\" />\n                        </div>\n                        <div>\n                            <h3 class=\"my-1\">Address</h3>\n                            <p>Cupertino, California, United States</p>\n                        </div>\n                    </div>\n                    <div class=\"option mb-2 d-flex\">\n                        <div class=\"pe-3\">\n                            <img src=\"{{ 'assets/images/icons/icon-email.png'|theme }}\" width=\"42\" alt=\"\" />\n                        </div>\n                        <div>\n                            <h3 class=\"my-1\">Email</h3>\n                            <p><a href=\"mailto:example@example.tld\">example@example.tld</a></p>\n                        </div>\n                    </div>\n                    <div class=\"option mb-2 d-flex\">\n                        <div class=\"pe-3\">\n                            <img src=\"{{ 'assets/images/icons/icon-phone.png'|theme }}\" width=\"42\" alt=\"\" />\n                        </div>\n                        <div>\n                            <h3 class=\"my-1\">Phone</h3>\n                            <p>0 (123) 456 7890</p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"col-lg-7 offset-lg-1\">\n                <img src=\"{{ 'assets/images/contact/team.png'|theme }}\" class=\"img-fluid\" alt=\"Team Shot\" />\n            </div>\n        </div>\n    </div>\n\n    <div class=\"contactform\">\n        <div class=\"container\">\n            <div class=\"row\">\n                <div class=\"col-lg-8 offset-lg-2\">\n                    {% ajaxPartial 'about/contact-form' %}\n                    <div class=\"contactform-decoration-1\"></div>\n                    <div class=\"contactform-decoration-2\"></div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/pages/error.htm",
    "content": "title = \"Error Page (500)\"\nurl = \"/error\"\nlayout = \"default\"\n\n[resources]\ncss[] = \"pages/404.css\"\n==\n{% put meta %}\n    <meta name=\"turbo-visit-control\" content=\"error\">\n{% endput %}\n<div class=\"container page-404\">\n    <div class=\"banner-404\">\n        <h1>Error</h1>\n        <p>We're sorry, but something went wrong and the page cannot be displayed.</p>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/pages/index.htm",
    "content": "##\ntitle = \"Demonstration\"\nurl = \"/\"\nlayout = \"home\"\nmeta_title = \"Welcome\"\n\n[collection blog]\nhandle = \"Blog\\Post\"\n\n[resources]\ncss[] = \"pages/index.css\"\n==\n{% set latestPosts = blog.limit(3).get %}\n<div class=\"page-index\">\n    <div class=\"jumbotron\">\n        <div class=\"container\">\n            <div class=\"row\">\n                <div class=\"col-lg-6\">\n                    <div class=\"jumbotron-intro\">\n                        <h1>Welcome to October CMS!</h1>\n                        <p class=\"lead\">\n                            This is the October CMS demo theme that explores the core features. You can use it as a foundation for your new website.\n                        </p>\n                        <p>\n                            {% if backendUrl %}\n                                <a href=\"{{ backendUrl }}\" target=\"backend\" class=\"btn btn-outline-light btn-pill\">\n                                    Explore the Backend Area\n                                </a>\n                            {% else %}\n                                <a href=\"https://octobercms.com/features\" target=\"_blank\" class=\"btn btn-outline-light btn-pill\">\n                                    Explore the Platform Features\n                                </a>\n                            {% endif %}\n                        </p>\n                    </div>\n                </div>\n\n                <div class=\"col-lg-6\">\n                    <div class=\"jumbotron-product\">\n                        <img src=\"{{ 'assets/images/homepage/header-image.png'|theme }}\" class=\"img-fluid\" alt=\"Product Shot\" />\n                    </div>\n                </div>\n            </div>\n            <div class=\"jumbotron-decoration-1\"></div>\n            <div class=\"jumbotron-decoration-2\"></div>\n        </div>\n    </div>\n\n\n    <div class=\"intro\">\n        <div class=\"container\">\n            <img src=\"{{ 'assets/images/logo-leaf.png'|theme }}\" class=\"img-leaf\" alt=\"October CMS\" />\n            <h2>About This Page</h2>\n            <p class=\"lead\">\n                This page demonstrates the basic CMS features. Usually each page built with October CMS is a combination of a layout, page, partials and content blocks, although in simple cases you can just use a page without anything else.\n            </p>\n        </div>\n    </div>\n\n    <div class=\"feature\">\n        <div class=\"container\">\n            <div class=\"row\">\n                <div class=\"col-lg-5 offset-lg-1\">\n                    <div class=\"feature-content\">\n                        <p><div class=\"feature-pill\"><span>CMS Feature</span></div></p>\n                        <h3>Layouts</h3>\n                        <p>Layouts define the page scaffold. Layout files include everything that repeats on each page, such as the HTML, HEAD and BODY tags, CSS and JavaScript references. The page menu and footer in the Demo theme are defined in the layout as well. Layouts are optional — you can define everything right in a page file.</p>\n                        <a href=\"https://docs.octobercms.com/3.x/cms/themes/layouts.html\" target=\"_blank\" class=\"btn btn-outline-primary btn-pill\">Learn more about Layouts</a>\n                    </div>\n                </div>\n                <div class=\"col-lg-6\">\n                    <div class=\"feature-image\">\n                        <img src=\"{{ 'assets/images/homepage/layouts-image.png'|theme }}\" class=\"img-fluid\" alt=\"CMS Layouts\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"feature\">\n        <div class=\"container\">\n            <div class=\"row\">\n                <div class=\"col-lg-6\">\n                    <div class=\"feature-image\">\n                        <img src=\"{{ 'assets/images/homepage/pages-image.png'|theme }}\" class=\"img-fluid\" alt=\"CMS Pages\" />\n                    </div>\n                </div>\n                <div class=\"col-lg-5\">\n                    <div class=\"feature-content\">\n                        <p><div class=\"feature-pill\"><span>Included</span></div></p>\n                        <h3>Pages</h3>\n                        <p>Pages hold the content for each URL. A page file defines the page URL and the page content. Pages are rendered inside layouts with the page tag that should be called in the layout code.</p>\n                        <a href=\"https://docs.octobercms.com/3.x/cms/themes/pages.html\" target=\"_blank\" class=\"btn btn-outline-primary btn-pill\">Learn more about Pages</a>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"feature pb-5\">\n        <div class=\"container\">\n            <div class=\"row\">\n                <div class=\"col-lg-5 offset-lg-1\">\n                    <div class=\"feature-content\">\n                        <p><div class=\"feature-pill\"><span>CMS Feature</span></div></p>\n                        <h3>Partials</h3>\n                        <p>\n                            Partials contain chunks of HTML code that are used anywhere throughout your website. They allow you to simplify the code of complex pages and reuse code in multiple places.\n                            Also, partials are an important part of the <a href=\"https://docs.octobercms.com/3.x/cms/ajax/introduction.html\" target=\"_blank\">built-in AJAX framework</a>.\n                        </p>\n                        <a href=\"https://docs.octobercms.com/3.x/cms/themes/partials.html\" target=\"_blank\" class=\"btn btn-outline-primary btn-pill\">Learn more about Partials</a>\n                    </div>\n                </div>\n                <div class=\"col-lg-6\">\n                    <div class=\"feature-image\">\n                        <img src=\"{{ 'assets/images/homepage/partials-image.png'|theme }}\" class=\"img-fluid\" alt=\"CMS Layouts\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"actioncall\">\n        <div class=\"container\">\n            <h3>There are more great CMS features!</h3>\n            <p class=\"lead\">Visit the October CMS Documentation website to learn everything about the CMS features.</p>\n            <a href=\"https://octobercms.com/features\" target=\"_blank\" class=\"btn btn-primary btn-lg btn-pill\">Learn more about October CMS</a>\n            <div class=\"actioncall-decoration-1\"></div>\n            <div class=\"actioncall-decoration-2\"></div>\n            <div class=\"actioncall-decoration-3\"></div>\n        </div>\n    </div>\n\n    <div class=\"latestnews\">\n        <div class=\"container\">\n            <h3>Latest News</h3>\n\n            <div class=\"blog-featured row row-cols-1 row-cols-md-2 row-cols-xl-3 g-3 pb-5\">\n                {% for post in latestPosts %}\n                    {% partial 'blog/post-card' post=post %}\n                {% endfor %}\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/pages/sitemap.htm",
    "content": "##\ntitle = \"Sitemap\"\nurl = \"/sitemap.xml\"\n\n[resources]\nheaders[Content-Type] = 'application/xml'\n\n[section sitemap]\nhandle = \"Site\\Menus\"\nidentifier = \"slug\"\nvalue = \"sitemap\"\n==\n{#- Look for a specific blueprint code/slug -#}\n{% if sitemap is empty %}\n    {% do abort(500, \"A menu definition with code 'sitemap' was not found. Please create this menu in the Admin Panel using the Content → Menus page.\") %}\n{% endif %}\n\n{#- Function to render a sitemap item, including children -#}\n{% macro render_sitemap_item(item, reference, isRoot) %}\n    {% import _self as nav %}\n    {% set hideRootItem = isRoot and item.replace %}\n    {% if reference.url and not hideRootItem %}\n        <url>\n            <loc>{{ reference.url }}</loc>\n            <lastmod>{{ reference.mtime|date('c') }}</lastmod>\n            <changefreq>{{ item.changefreq }}</changefreq>\n            <priority>{{ item.priority }}</priority>\n\n            {#- Multisite implementation -#}\n            {% if reference.sites %}\n                {% for site in reference.sites %}\n                    <xhtml:link rel=\"alternative\" hreflang=\"{{ site.locale }}\" href=\"{{ site.url }}\" />\n                {% endfor %}\n            {% endif %}\n        </url>\n    {% endif %}\n\n    {#- Render child items -#}\n    {% if reference.items %}\n        {% for child in reference.items %}\n            {{ nav.render_sitemap_item(item, child) }}\n        {% endfor %}\n    {% endif %}\n{% endmacro %}\n{% import _self as nav %}\n<urlset\n    xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n    xmlns:xhtml=\"https://www.w3.org/1999/xhtml\"\n    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n    xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\"\n>\n    {% for item in sitemap.sitemap_items %}\n        {{ nav.render_sitemap_item(\n            item,\n            link(item.reference, { nesting: item.nesting, sites: true }),\n            true\n        ) }}\n    {% endfor %}\n</urlset>\n"
  },
  {
    "path": "themes/demo/pages/wiki/article.htm",
    "content": "##\nurl = \"/wiki/:fullslug*/:id\"\nlayout = \"wiki\"\ntitle = \"Wiki Article\"\nmeta_title = \"{{ wiki.title }}\"\n\n[section wiki]\nhandle = \"Page\\Article\"\nidentifier = \"id\"\n\n[resources]\nvars[activeNavLink] = 'wiki'\n==\n{% set article = wiki %}\n{% if article is empty %}\n    {% do abort(404) %}\n{% elseif article.fullslug and article.fullslug != this.param.fullslug %}\n    {% do redirect(''|page({ fullslug: article.fullslug }), 301) %}\n{% endif %}\n\n<div class=\"container\">\n\n    <div class=\"py-3\">\n        {% partial 'wiki/breadcrumb' article=article %}\n    </div>\n\n    <article class=\"wiki-article pb-3\">\n        <h1 class=\"wiki-article-title mb-3\">{{ article.title }}</h1>\n        <p class=\"lead\">{{ article.summary_text }}</p>\n\n        <div class=\"wiki-banner mb-3\">\n            {% if article.banner %}\n                <div class=\"text-banner\" style=\"background-image:url('{{ article.banner.path }}')\"></div>\n            {% else %}\n                <div class=\"text-banner\" style=\"background-image:url('{{ partial('site/helpers/random-stock-image') }}')\"></div>\n            {% endif %}\n        </div>\n\n        {{ article.content|content }}\n\n        <div class=\"wiki-article-gallery mb-3\">\n            {% partial 'controls/gallery-slider' gallery=article.gallery %}\n        </div>\n    </article>\n\n    {% partial 'wiki/continue' article=article %}\n\n    {% if article.external_links %}\n        <hr />\n        <h2>External Links</h2>\n        <ul class=\"bullet-list list-content\">\n            {% for link in article.external_links %}\n                <li><a href=\"{{ link.link_url }}\">{{ link.link_text }}</a></li>\n            {% endfor %}\n        </ul>\n    {% endif %}\n\n</div>\n"
  },
  {
    "path": "themes/demo/pages/wiki/index.htm",
    "content": "##\nurl = \"/wiki\"\nlayout = \"wiki\"\ntitle = \"Wiki Docs Demo\"\nmeta_title = \"Wiki\"\n\n[collection wiki]\nhandle = \"Page\\Article\"\n\n[resources]\nvars[activeNavLink] = 'wiki'\n==\n{% set article = wiki.first() %}\n\n<div class=\"container\">\n    <article class=\"wiki-article pb-3\">\n        <h1 class=\"wiki-article-title mb-3\">{{ article.title }}</h1>\n        <p class=\"lead\">{{ article.summary_text }}</p>\n\n        <div class=\"wiki-banner mb-3\">\n            {% if article.banner %}\n                <div class=\"text-banner\" style=\"background-image:url('{{ article.banner.path }}')\"></div>\n            {% else %}\n                <div class=\"text-banner\" style=\"background-image:url('{{ partial('site/helpers/random-stock-image') }}')\"></div>\n            {% endif %}\n        </div>\n\n        {{ article.content|raw }}\n    </article>\n\n    {% if article.external_links %}\n        <hr />\n        <h2>External Links</h2>\n        <ul class=\"bullet-list list-content\">\n            {% for link in article.external_links %}\n                <li><a href=\"{{ link.link_url }}\">{{ link.link_text }}</a></li>\n            {% endfor %}\n        </ul>\n    {% endif %}\n</div>\n"
  },
  {
    "path": "themes/demo/pages/wiki/search.htm",
    "content": "##\nurl = \"/wiki/search\"\nlayout = \"default\"\ntitle = \"Search Wiki Articles\"\nmeta_title = \"Search - Wiki\"\n\n[collection wiki]\nhandle = \"Page\\Article\"\n\n[resources]\nvars[activeNavLink] = \"wiki\"\n==\n{% set searchTerm = get('term')|trim %}\n{% set articles = wiki.searchWhere(searchTerm, ['title', 'content']).paginate(4) %}\n{% put pageTitle=searchTerm ~ ' - Search Results' %}\n\n<div class=\"container\">\n    <header>\n        <h1>{{ searchTerm }} - Search Results</h1>\n    </header>\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <form class=\"mb-5\">\n                <div class=\"input-group\">\n                    <div class=\"form-control-search\">\n                        <input type=\"text\" name=\"term\" class=\"form-control\" placeholder=\"Search\" value=\"{{ searchTerm }}\">\n                        <span class=\"search-icon\"></span>\n                    </div>\n                </div>\n            </form>\n\n            <div class=\"pb-3\">\n                {% for article in articles %}\n                    <div class=\"card mb-3\">\n                        <div class=\"card-body pb-0\">\n                            <h5 class=\"wiki-article-title\">\n                                <a href=\"{{ 'wiki/article'|page({ fullslug: article.fullslug, id: article.id }) }}\">{{ article.title }}</a>\n                            </h5>\n                            {{ article.content|html_limit(250)|raw }}\n                        </div>\n                    </div>\n                {% endfor %}\n            </div>\n            <nav class=\"wiki-pagination\" aria-label=\"Pagination\">\n                {{ pager(articles, { withQuery: true }) }}\n            </nav>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/about/contact-form.htm",
    "content": "==\n<?\n// How to activate this form:\n//\n// - 1. Open Admin Panel → Settings → Team → Manage Groups\n// - 2. Create a New Group → Set Code field to \"contact-team\"\n// - 3. Select Users tab → Click Add Users\n// - 4. Click Save\n//\nfunction onSubmitContactForm()\n{\n    // Validate the form\n    // @see https://docs.octobercms.com/4.x/cms/features/validation.html\n    //\n    // - Argument 1 is the attributes and their rules\n    // - Argument 2 is custom error messages for each attribute rule (translated)\n    // - Argument 3 is custom names for each attribute (translated)\n    //\n    $data = Request::validate([\n        'first_name' => 'required|min:2|max:64',\n        'email' => 'required|email|min:2|max:64',\n        'comments' => 'required|min:5',\n    ], [\n        'comments' => ['required' => __(\"Please actually write something to us...\")]\n    ], [\n        'first_name' => __(\"name\"),\n    ]);\n\n    // Notify the 'contact-team' group with 'backend:contact-form' mail template\n    //\n    $group = \\Backend\\Models\\UserGroup::where('code', 'contact-team')->first();\n    if (!$group) {\n        throw new ApplicationException(__(\"Sorry, this contact form is not enabled: We cannot receive emails at the moment, please try using another method.\"));\n    }\n\n    Mail::sendTo(\n        $group->users->pluck('full_name', 'email')->all(),\n        'backend:contact-form',\n        $data\n    );\n\n    $this['isSubmit'] = true;\n    $this['emailAddress'] = post('email');\n}\n?>\n==\n<div class=\"contact-us-form\">\n    <h3 class=\"mb-4\">Drop Us a Line</h3>\n    <p class=\"lead\">Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\n\n    {% if isSubmit %}\n        <div class=\"alert alert-success text-start\" role=\"alert\">\n            <h4 class=\"alert-heading\">Thanks for getting in touch!</h4>\n            <p>Please bear in mind we receive a lot of feedback, it may take several days to process and you may not receive a response.</p>\n            <p class=\"mb-0\">Not to worry though, we have your email <strong>{{ emailAddress }}</strong>, all feedback we receive will be read and action taken if needed.</p>\n        </div>\n    {% else %}\n        <form\n            data-request=\"onSubmitContactForm\"\n            data-request-update=\"{ _self: true }\"\n            data-request-flash>\n            <div class=\"row\">\n                <div class=\"col-md-6\">\n                    <div class=\"form-floating mb-3\">\n                        <input type=\"text\" name=\"first_name\" class=\"form-control\" id=\"commentNameInput\">\n                        <label for=\"commentNameInput\">First Name</label>\n                    </div>\n                </div>\n                <div class=\"col-md-6\">\n                    <div class=\"form-floating mb-3\">\n                        <input type=\"text\" name=\"last_name\" class=\"form-control\" id=\"commentLastNameInput\">\n                        <label for=\"commentLastNameInput\">Last Name</label>\n                    </div>\n                </div>\n            </div>\n            <div class=\"form-floating mb-3\">\n                <input type=\"email\" name=\"email\" class=\"form-control\" id=\"commentEmailInput\">\n                <label for=\"commentEmailInput\">Email address</label>\n            </div>\n            <div class=\"mb-3 form-floating\">\n                <textarea name=\"comments\" style=\"height:125px\" class=\"form-control\" id=\"commentContentTextarea\"></textarea>\n                <label for=\"commentContentTextarea\">Comment</label>\n            </div>\n            <div class=\"form-buttons d-flex pt-2\">\n                <div>\n                    <button\n                        type=\"submit\"\n                        data-attach-loading\n                        class=\"btn btn-primary btn-lg btn-pill\">\n                        Submit\n                    </button>\n                </div>\n            </div>\n        </form>\n    {% endif %}\n</div>\n"
  },
  {
    "path": "themes/demo/partials/blocks/detailed-block.htm",
    "content": "{% set blockImage = block.image ? block.image|media : 'assets/images/blocks/team.png'|theme %}\n\n<div class=\"container py-3\">\n    <div class=\"row\">\n        <div class=\"col-md-6 pt-5\">\n            <h2 class=\"my-4\">{{ block.title }}</h2>\n            {{ block.content|raw }}\n\n            {% if block.list_items %}\n                <ul class=\"list-inline list-with-ticks py-2\">\n                    {% for item in block.list_items %}\n                        <li class=\"list-inline-item\">{{ item.text }}</li>\n                    {% endfor %}\n                </ul>\n            {% endif %}\n\n            <p>\n                <a href=\"{{ block.button_url }}\" class=\"btn btn-primary btn-lg btn-pill\">\n                    {{ block.button_text }}\n                </a>\n            </p>\n        </div>\n        <div class=\"col-md-6\">\n            <img src=\"{{ blockImage }}\" alt=\"\" class=\"img-fluid\" />\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/blocks/image-slice.htm",
    "content": "##\n[resources]\ncss[] = \"blocks/hero-image.css\"\n==\n{% set heroImage = block.image ? block.image|media : 'assets/images/stock/desks-cropped.png'|theme %}\n\n<div class=\"block-hero-image\" style=\"background-image:url('{{ heroImage }}')\"></div>\n<div class=\"pb-5\"></div>\n"
  },
  {
    "path": "themes/demo/partials/blocks/paragraph-block.htm",
    "content": "{% set blockImage = block.image ? block.image|media : 'assets/images/blocks/chart.png'|theme %}\n\n<div class=\"container py-3\">\n    <h1>{{ block.title }}</h1>\n    <div class=\"row\">\n        <div class=\"col-md-9\">\n            {{ block.content|raw }}\n        </div>\n        <div class=\"col-md-3\">\n            <img src=\"{{ blockImage }}\" alt=\"\" class=\"img-fluid\" />\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/blocks/scoreboard-metrics.htm",
    "content": "##\n[resources]\ncss[] = \"blocks/scoreboard-metrics.css\"\n==\n<div class=\"block-scoreboard-metrics mt-3\">\n    <div class=\"container\">\n        <div class=\"metrics d-flex justify-content-between\">\n            {% for metric in block.metrics|default([]) %}\n                <div class=\"metric\">\n                    <img src=\"{{ ('assets/images/icons/icon-' ~ metric.icon|default('notepad') ~ '.png')|theme }}\" width=\"42\" alt=\"\" />\n                    <h3>{{ metric.number }}</h3>\n                    <p>{{ metric.description }}</p>\n                </div>\n            {% endfor %}\n        </div>\n    </div>\n</div>\n<div class=\"pb-3\"></div>\n"
  },
  {
    "path": "themes/demo/partials/blocks/team-leaders.htm",
    "content": "##\n[resources]\ncss[] = \"blocks/team-leaders.css\"\njs[] = \"blocks/team-leaders.js\"\n==\n<div class=\"block-team-leaders\">\n    <div class=\"container py-3\">\n        <div class=\"text-center\">\n            <h2 class=\"pt-5\">Meet the Team!</h2>\n            <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.</p>\n        </div>\n    </div>\n</div>\n\n<div class=\"container py-4\">\n    <div class=\"block-team-leaders\">\n        <div data-control=\"team-leaders\" class=\"team-leaders\">\n            {% for member in block.members|default([]) %}\n                <div class=\"team-member-container\">\n                    <div class=\"team-member card\">\n                        <div class=\"card-body\">\n                            {% partial 'elements/user-panel-team' user=member %}\n                        </div>\n                    </div>\n                </div>\n            {% endfor %}\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/blog/comment-form.htm",
    "content": "<div class=\"blog-post-comment-form\">\n    <h3 class=\"mb-4\">Tell us what you think!</h3>\n\n    <form>\n        <div class=\"row\">\n            <div class=\"col-md-6\">\n                <div class=\"form-floating mb-3\">\n                    <input type=\"text\" class=\"form-control\" id=\"commentNameInput\">\n                    <label for=\"commentNameInput\">Name</label>\n                </div>\n            </div>\n            <div class=\"col-md-6\">\n                <div class=\"form-floating mb-3\">\n                    <input type=\"email\" class=\"form-control\" id=\"commentEmailInput\">\n                    <label for=\"commentEmailInput\">Email address</label>\n                </div>\n            </div>\n        </div>\n        <div class=\"mb-3 form-floating\">\n            <textarea style=\"height:125px\" class=\"form-control\" id=\"commentContentTextarea\"></textarea>\n            <label for=\"commentContentTextarea\">Comment</label>\n        </div>\n        <div class=\"form-buttons d-flex pt-2\">\n            <div>\n                <button type=\"submit\" class=\"btn btn-primary btn-pill\">Submit</button>\n            </div>\n            <p class=\"text-muted ms-3 mt-1\">\n                <small>You are replying to Mary Williams. You can <a href=\"#\">post a new comment instead</a>.</small>\n            </p>\n        </div>\n    </form>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/blog/comment-list.htm",
    "content": "<div class=\"blog-post-comments\">\n    <h2 class=\"mb-5\">2 comments</h2>\n\n    <div class=\"post-comment pb-5\">\n        {% partial 'elements/user-panel' user={ title:'Andy Anderson', role:'', slug:'', avatar:null } %}\n    </div>\n    <div class=\"post-comment\">\n        {% partial 'elements/user-panel' user={ title:'Mary Williams', role:'', slug:'', avatar:null } %}\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/blog/post-card.htm",
    "content": "<div class=\"col {{ cssClass|default('') }}\">\n    <div class=\"card card-post mb-5\">\n        {% if post.banner %}\n            <div class=\"card-banner {{ bannerCss|default('') }}\" style=\"background-image:url('{{ post.banner.path }}')\"></div>\n        {% else %}\n            <div class=\"card-banner {{ bannerCss|default('') }}\" style=\"background-image:url('{{ partial('site/helpers/random-stock-image') }}')\"></div>\n        {% endif %}\n\n        <div class=\"card-body\">\n            {% if post.categories %}\n                <div class=\"blog-post-categories\">\n                    <ul class=\"list-inline\">\n                        {% for category in post.categories %}\n                            <li class=\"list-inline-item\">\n                                &mdash; <a href=\"{{ 'blog/category'|page({ slug: category.slug, id: category.id }) }}\">{{ category.title }}</a>\n                            </li>\n                        {% endfor %}\n                    </ul>\n                </div>\n            {% endif %}\n\n            <h4 class=\"card-title\">\n                <a href=\"{{ 'blog/post'|page({ slug: post.slug, id: post.id }) }}\" class=\"stretched-link\">{{ post.title }}</a>\n            </h4>\n\n            <div class=\"featured-text\">\n                <p>{{ post.featured_text }}</p>\n            </div>\n        </div>\n\n        <div class=\"card-footer\">\n            <div class=\"card-meta\">\n                <div class=\"meta-item meta-date text-icon text-icon-date\">\n                    {{ post.published_at_date|date('j M Y') }}\n                </div>\n                {% if post.author %}\n                    <div class=\"meta-item meta-divider\">\n                        &bull;\n                    </div>\n                    <div class=\"meta-item meta-author text-icon text-icon-author\">\n                        By <a href=\"{{ 'blog/author'|page({ slug: post.author.slug }) }}\">\n                            {{ post.author.title|default('') }}\n                        </a>\n                    </div>\n                {% endif %}\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/blog/sidebar.htm",
    "content": "##\n[collection blog]\nhandle = \"Blog\\Post\"\n\n[collection blogCategories]\nhandle = \"Blog\\Category\"\n\n[global blogConfig]\nhandle = \"Blog\\Config\"\n==\n{% set archiveDates = blog\n    .selectRaw(\"count(*) as post_count, published_at_month, published_at_year\")\n    .groupBy('published_at_month', 'published_at_year').get()\n%}\n\n<div class=\"sidebar-search\">\n    <form action=\"{{ 'blog/search'|page }}\" method=\"get\">\n        <div class=\"form-control-search\">\n            <input type=\"text\" name=\"term\" class=\"form-control\" placeholder=\"Search\" value=\"\">\n            <span class=\"search-icon\"></span>\n        </div>\n    </form>\n</div>\n\n<div class=\"sidebar-about\">\n    <h3>About Us</h3>\n    {% if blogConfig.about_this_blog %}\n        {{ blogConfig.about_this_blog|md_safe }}\n    {% else %}\n        <p class=\"text-secondary\">\n            Customize this section to tell your visitors a little bit about your publication, writers, content, or something else entirely. Totally up to you.\n        </p>\n    {% endif %}\n</div>\n\n<div class=\"sidebar-social\">\n    {% partial 'elements/social-links' links=blogConfig.social_links showRssLink=true %}\n</div>\n\n<div class=\"sidebar-categories\">\n    <h3>Categories</h3>\n    <ul class=\"bullet-list\">\n        {% for category in blogCategories %}\n            <li class=\"{{ activeBlogCategory == category.slug ? 'active' }}\">\n                <a href=\"{{ 'blog/category'|page({ slug: category.slug, id: category.id }) }}\">\n                    {{ category.title }}\n                </a>\n            </li>\n        {% endfor %}\n    </ul>\n</div>\n\n<div class=\"sidebar-archives\">\n    <h3>Archives</h3>\n    <ul class=\"bullet-list\">\n        {% for date in archiveDates %}\n            {% if date.published_at_year %}\n                {% set dateParsed = date('1-'~date.published_at_month~'-'~date.published_at_year) %}\n                <li>\n                    <a\n                        href=\"{{ 'blog/archive'|page({ month: date.published_at_month, year: date.published_at_year }) }}\"\n                    >{{ dateParsed|date('F Y') }}</a>\n                </li>\n            {% endif %}\n        {% endfor %}\n    </ul>\n</div>\n\n"
  },
  {
    "path": "themes/demo/partials/calcresult.htm",
    "content": "{{ result|default(75) }}"
  },
  {
    "path": "themes/demo/partials/controls/gallery-slider.htm",
    "content": "{% set galleryId = 'carousel' ~ random() %}\n{% set width = width|default(640) %}\n{% set height = height|default(640) %}\n\n<div data-control=\"gallery-slider\" class=\"control-gallery-slider\" id=\"{{ galleryId }}\">\n    {% if gallery %}\n        {% for image in gallery %}\n            <div>\n                <div class=\"image-container\">\n                    <a href=\"{{ image|media }}\">\n                        <img src=\"{{ image|resize(width, height, { extension: 'png', mode: 'crop' }) }}\">\n                    </a>\n                    <div class=\"pswp-caption-content\">\n                        <h3>{{ image.title }}</h3>\n                        <p>{{ image.description }}</p>\n                    </div>\n                </div>\n            </div>\n        {% endfor %}\n    {% else %}\n        {% for defaultImage in ['workspace', 'desktop', 'pancakes', 'doughnuts'] %}\n            {% set image = ('assets/images/stock/' ~ defaultImage ~ '.png')|theme %}\n            <div>\n                <div class=\"image-container\">\n                    <a href=\"{{ image }}\">\n                        <img src=\"{{ image|resize(width, height, { extension: 'png', mode: 'crop' }) }}\">\n                    </a>\n                </div>\n            </div>\n        {% endfor %}\n    {% endif %}\n</div>\n"
  },
  {
    "path": "themes/demo/partials/elements/share-button.htm",
    "content": "<div class=\"share-button\">\n    <a\n        class=\"btn btn-primary btn-pill\"\n        href=\"javascript:;\"\n        aria-label=\"Share\"\n        data-bs-toggle=\"popover\"\n        data-bs-trigger=\"focus\"\n        data-bs-placement=\"bottom\"\n        data-content-target=\"#sharePopover\">\n        Share\n    </a>\n    <div style=\"display:none\">\n        <div id=\"sharePopover\" class=\"share-button-popover\">\n            <ul class=\"nav flex-column\">\n                <li class=\"nav-item\">\n                    <a class=\"nav-link\" href=\"http://twitter.com/share?url={{ ''|page }}\" target=\"_blank\"><i class=\"bi-twitter\"></i> Twitter</a>\n                </li>\n                <li class=\"nav-item\">\n                    <a class=\"nav-link\" href=\"https://www.facebook.com/sharer/sharer.php?u={{ ''|page }}\" target=\"_blank\"><i class=\"bi-facebook\"></i> Facebook</a>\n                </li>\n                <li class=\"nav-item\">\n                    <a class=\"nav-link\" href=\"https://www.linkedin.com/sharing/share-offsite/?url={{ ''|page }}\" target=\"_blank\"><i class=\"bi-linkedin\"></i> LinkedIn</a>\n                </li>\n            </ul>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/elements/social-links.htm",
    "content": "<div class=\"element-social-links\">\n    <ul class=\"nav\">\n        {% for link in links|default([]) %}\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" aria-current=\"page\" href=\"{{ link.url }}\" target=\"_blank\" rel=\"nofollow\">\n                    <img src=\"{{ ('assets/images/social-icons/' ~ link.platform ~ '.png')|theme }}\" alt=\"Dribbble\"  />\n                </a>\n            </li>\n        {% endfor %}\n        {% if showRssLink|default(false) %}\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" aria-current=\"page\" href=\"{{ 'blog/rss'|page }}\" target=\"_blank\">\n                    <img src=\"{{ ('assets/images/social-icons/rss.png')|theme }}\" alt=\"RSS Feed\"  />\n                </a>\n            </li>\n        {% endif %}\n    </ul>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/elements/user-panel-author.htm",
    "content": "<div class=\"element-user-panel author-panel\">\n    <div class=\"row\">\n        <div class=\"col-md-8 d-flex\">\n            <div class=\"user-avatar\">\n                {% if user.avatar %}\n                    <img src=\"{{ user.avatar|media }}\" alt=\"{{ user.title }}\" />\n                {% else %}\n                    <img src=\"{{ partial('site/helpers/random-avatar-image') }}\" alt=\"{{ user.title }}\" />\n                {% endif %}\n            </div>\n            <div class=\"user-details\">\n                <h3 class=\"mb-0\">{{ user.title }}</h3>\n                <p>{{ user.role }}</p>\n            </div>\n        </div>\n        {% if not hideAllPosts %}\n        <div class=\"col-md-4 text-end\">\n            <a href=\"{{ 'blog/author'|page({ slug: user.slug }) }}\" class=\"btn btn-secondary btn-pill btn-sm mt-4\">\n                All Posts\n            </a>\n        </div>\n        {% endif %}\n    </div>\n    <div class=\"user-profile\">\n        <p>This is some additional paragraph placeholder content. It has been written to fill the available space and show how a longer snippet of text affects the surrounding content. We'll repeat it often to keep the demonstration flowing, so be on the lookout for this exact same string of text.</p>\n    </div>\n    <div class=\"user-social\">\n        {% partial 'elements/social-links' links=user.social_links %}\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/elements/user-panel-team.htm",
    "content": "<div class=\"element-user-panel team-panel\">\n    <div class=\"user-avatar\">\n        {% if user.avatar %}\n            <img src=\"{{ user.avatar|media }}\" alt=\"{{ user.title }}\" />\n        {% else %}\n            <img src=\"{{ partial('site/helpers/random-avatar-image') }}\" alt=\"{{ user.title }}\" />\n        {% endif %}\n    </div>\n    <div class=\"user-details\">\n        <h3 class=\"mb-0\">{{ user.title }}</h3>\n        <p>\n            {{ user.role }}\n        </p>\n    </div>\n\n    <div class=\"user-social\">\n        {% partial 'elements/social-links' links=user.social_links %}\n    </div>\n\n    <div class=\"user-profile\">\n        <p>{{ user.description }}</p>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/elements/user-panel.htm",
    "content": "<div class=\"element-user-panel\">\n    <div class=\"row\">\n        <div class=\"col-md-8 d-flex\">\n            <div class=\"user-avatar\">\n                {% if user.avatar %}\n                    <img src=\"{{ user.avatar|media }}\" alt=\"{{ user.title }}\" />\n                {% else %}\n                    <img src=\"{{ partial('site/helpers/random-avatar-image') }}\" alt=\"{{ user.title }}\" />\n                {% endif %}\n            </div>\n            <div class=\"user-details\">\n                <h3 class=\"mb-0\">{{ user.title }}</h3>\n                <p class=\"text-icon text-icon-date\">\n                    March 12, 2022\n                </p>\n            </div>\n        </div>\n        <div class=\"col-md-4 text-end\">\n            <a href=\"#\" class=\"btn btn-secondary btn-pill btn-sm mt-4\">\n                Reply\n            </a>\n        </div>\n    </div>\n    <div class=\"user-profile\">\n        <p>This is some additional paragraph placeholder content. It has been written to fill the available space and show how a longer snippet of text affects the surrounding content. We'll repeat it often to keep the demonstration flowing, so be on the lookout for this exact same string of text.</p>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/site/flash-messages.htm",
    "content": "{% flash %}\n    <p\n        data-control=\"flash-message\"\n        data-type=\"{{ type }}\"\n        data-interval=\"5\">\n        {{ message }}\n    </p>\n{% endflash %}\n"
  },
  {
    "path": "themes/demo/partials/site/footer.htm",
    "content": "<div class=\"element-footer {{ blueFooterStyle|default(false) ? 'footer-bluezone' }}\">\n    <div class=\"container\">\n        <div class=\"row\">\n            <div class=\"col-md-10 col-lg-8 col-xl-7\">\n                <div class=\"footer-brand\">\n                    <img src=\"{{ 'assets/images/logo.svg'|theme }}\" alt=\"October CMS Demo\" width=\"270\" />\n                </div>\n                <div class=\"footer-nav\">\n                    {% partial 'site/nav-footer' %}\n                </div>\n            </div>\n        </div>\n        <div class=\"row\">\n            <div class=\"col-sm-6\">\n                <div class=\"footer-social\">\n                    <ul class=\"nav\">\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link\" aria-current=\"page\" href=\"https://dribbble.com/\" target=\"_blank\">\n                                <img src=\"{{ 'assets/images/social-icons-white/dribbble-white.png'|theme }}\" alt=\"Dribbble\"  />\n                            </a>\n                        </li>\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link\" aria-current=\"page\" href=\"https://www.linkedin.com/company/october-cms/\" target=\"_blank\">\n                                <img src=\"{{ 'assets/images/social-icons-white/linkedin-white.png'|theme }}\" alt=\"LinkedIn\"  />\n                            </a>\n                        </li>\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link\" aria-current=\"page\" href=\"https://twitter.com/octobercms\" target=\"_blank\">\n                                <img src=\"{{ 'assets/images/social-icons-white/twitter-white.png'|theme }}\" alt=\"Twitter\" />\n                            </a>\n                        </li>\n                        <li class=\"nav-item\">\n                            <a class=\"nav-link\" aria-current=\"page\" href=\"https://www.facebook.com/octobercms\" target=\"_blank\">\n                                <img src=\"{{ 'assets/images/social-icons-white/facebook-white.png'|theme }}\" alt=\"Facebook\" />\n                            </a>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n            <div class=\"col-sm-6\">\n                <div class=\"footer-copyright\">\n                    <p>&copy; {{ \"now\"|date(\"Y\") }} Your Company Name</p>\n                    <p>All rights reserved</p>\n                </div>\n            </div>\n        </div>\n        <div class=\"footer-decoration-1\"></div>\n        <div class=\"footer-decoration-2\"></div>\n    </div>\n</div>\n\n{% partial 'site/modals/alert-dialog' %}\n{% partial 'site/modals/password-dialog' %}\n{% partial 'site/modals/ajax-modal' %}\n"
  },
  {
    "path": "themes/demo/partials/site/head/analytics-code.htm",
    "content": "\n{#- Place Google Analytics Code Here -#}\n"
  },
  {
    "path": "themes/demo/partials/site/head/head-links.htm",
    "content": "{# Favicon #}\n<link rel=\"icon\" type=\"image/png\" href=\"{{ 'assets/images/favicon.png'|theme }}\">\n\n{# Styles #}\n<link href=\"{{ 'assets/css/vendor.css'|theme }}\" rel=\"stylesheet\">\n<link href=\"{{ 'assets/css/theme.css'|theme }}\" rel=\"stylesheet\">\n\n{# Placeholder #}\n{% styles %}\n"
  },
  {
    "path": "themes/demo/partials/site/head/head-meta.htm",
    "content": "{# Global Meta Tags #}\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n<meta name=\"author\" content=\"October CMS\">\n<meta name=\"generator\" content=\"October CMS\">\n{% meta %}\n"
  },
  {
    "path": "themes/demo/partials/site/head/head-scripts.htm",
    "content": "{# Vendor #}\n<script src=\"{{ 'assets/vendor/jquery.min.js'|theme }}\"></script>\n<script src=\"{{ 'assets/vendor/bootstrap/bootstrap.min.js'|theme }}\"></script>\n<script src=\"{{ 'assets/vendor/codeblocks/codeblocks.min.js'|theme }}\"></script>\n<script src=\"{{ 'assets/vendor/slick-carousel/slick.min.js'|theme }}\"></script>\n\n<script type=\"module\">\n    import PhotoSwipeLightbox from \"{{ 'assets/vendor/photoswipe/photoswipe-lightbox.esm.min.js'|theme }}\";\n    import PhotoSwipeModule from \"{{ 'assets/vendor/photoswipe/photoswipe.esm.min.js'|theme }}\"\n    import PhotoSwipeDynamicCaption from \"{{ 'assets/vendor/photoswipe-dynamic-caption-plugin/photoswipe-dynamic-caption-plugin.esm.js'|theme }}\";\n\n    window.PhotoSwipeLightbox = PhotoSwipeLightbox;\n    window.PhotoSwipeModule = PhotoSwipeModule;\n    window.PhotoSwipeDynamicCaption = PhotoSwipeDynamicCaption;\n</script>\n\n{# App #}\n{% framework extras %}\n<script src=\"{{ 'assets/js/controls/alert-dialog.js'|theme}}\"></script>\n<script src=\"{{ 'assets/js/controls/password-dialog.js'|theme}}\"></script>\n<script src=\"{{ 'assets/js/controls/gallery-slider.js'|theme}}\"></script>\n<script src=\"{{ 'assets/js/controls/card-slider.js'|theme}}\"></script>\n<script src=\"{{ 'assets/js/controls/quantity-input.js'|theme}}\"></script>\n<script src=\"{{ 'assets/js/app.js'|theme}}\"></script>\n\n{# Placeholder #}\n{% scripts %}\n"
  },
  {
    "path": "themes/demo/partials/site/header.htm",
    "content": "<!-- Nav -->\n{% placeholder headerBefore %}\n<nav id=\"layout-nav\" class=\"navbar navbar-expand-lg navbar-dark\">\n    <div class=\"navbar-container container\">\n        <a class=\"navbar-brand\" href=\"{{ 'index'|page }}\">\n            <img src=\"{{ 'assets/images/logo.svg'|theme }}\" alt=\"October CMS Demo\" width=\"230\" />\n        </a>\n        <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n            <span class=\"navbar-toggler-icon\"></span>\n        </button>\n        <div class=\"collapse navbar-collapse\">\n            <ul class=\"navbar-nav ms-auto mb-2 mb-lg-0\">\n                {% partial 'site/nav-links' %}\n            </ul>\n        </div>\n    </div>\n</nav>\n<div id=\"layout-nav-decorations\">\n    <div class=\"navbar-decorations container\">\n        <div class=\"navbar-decoration-1\"></div>\n        <div class=\"navbar-decoration-2\"></div>\n    </div>\n</div>\n{% placeholder headerAfter %}\n"
  },
  {
    "path": "themes/demo/partials/site/helpers/random-avatar-image.htm",
    "content": "{% set images = [\n    'avatar-1',\n    'avatar-2',\n    'avatar-3',\n    'avatar-4',\n    'avatar-5'\n] %}{{ ('assets/images/avatars/' ~ random(images) ~ '.png')|theme }}\n"
  },
  {
    "path": "themes/demo/partials/site/helpers/random-stock-image.htm",
    "content": "{% set images = [\n    'workspace',\n    'desktop',\n    'pancakes',\n    'doughnuts'\n] %}{{ ('assets/images/stock/' ~ random(images) ~ '.png')|theme }}\n"
  },
  {
    "path": "themes/demo/partials/site/how-its-made.htm",
    "content": "[backendLink]\n==\n{% if this.page.id == 'blog-category' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:blog/category.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:blog/category.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/blog_category/' ~ category.id %}\n{% elseif this.page.id == '404' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:404.htm' %}\n{% elseif this.page.id == 'error' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:error.htm' %}\n{% elseif this.page.id == 'about' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:about.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:landing/landing-page.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/page_about' %}\n{% elseif this.page.id == 'ajax' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:ajax.htm' %}\n{% elseif this.page.id == 'components' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:components.htm' %}\n{% elseif this.page.id == 'contact' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:contact.htm' %}\n{% elseif this.page.id == 'index' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:index.htm' %}\n{% elseif this.page.id == 'blog-archive' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:blog/archive.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:blog/post.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/blog_post' %}\n{% elseif this.page.id == 'blog-author' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:blog/author.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:blog/author.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/blog_author/' ~ author.id %}\n{% elseif this.page.id == 'blog-index' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:blog/index.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:blog/post.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/blog_post' %}\n{% elseif this.page.id == 'blog-post' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:blog/post.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:blog/post.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/blog_post/' ~ blog.id %}\n{% elseif this.page.id == 'blog-search' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:blog/search.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:blog/post.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/blog_post' %}\n{% elseif this.page.id == 'wiki-article' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:wiki/article.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:wiki/article.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/page_article/' ~ wiki.id %}\n{% elseif this.page.id == 'wiki-index' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:wiki/index.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:wiki/article.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/page_article' %}\n{% elseif this.page.id == 'wiki-search' %}\n    {% set howItsMadeCmsTemplate = 'cms:cms-page:wiki/search.htm' %}\n    {% set howItsMadeTailorBlueprint = 'tailor:tailor-blueprint:wiki/article.yaml' %}\n    {% set howItsMadeTailorContent = 'entries/page_article' %}\n{% endif %}\n\n{% if backendUrl and howItsMadeCmsTemplate %}\n    <div class=\"how-its-made init\">\n        <div>\n            <p>Wondering how this page is made? View the\n                {% if howItsMadeCmsTemplate|default(false) %}\n                    <a target=\"_blank\" href=\"{{ backendUrl ~ '/editor?open=' ~ howItsMadeCmsTemplate }}\">CMS Template</a>\n                {% endif %}\n                {% if howItsMadeTailorBlueprint|default(false) %}\n                    •  <a target=\"_blank\" href=\"{{ backendUrl ~ '/editor?open=' ~ howItsMadeTailorBlueprint }}\">Tailor Blueprint</a>\n                {% endif %}\n                {% if howItsMadeTailorContent|default(false) %}\n                    •  <a target=\"_blank\" href=\"{{ backendUrl ~ '/tailor/' ~ howItsMadeTailorContent }}\">Tailor Content</a>\n                {% endif %}\n            </p>\n        </div>\n    </div>\n{% endif %}\n"
  },
  {
    "path": "themes/demo/partials/site/modals/ajax-modal.htm",
    "content": "<div class=\"modal\" id=\"siteModal\">\n    <div class=\"modal-dialog modal-dialog-centered\" id=\"siteModalContent\">\n        <!-- Partial Contents Will Go Here -->\n    </div>\n\n    <div class=\"modal-dialog modal-dialog-centered modal-loading\">\n        <div class=\"spinner-border text-light mx-auto\"></div>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/site/modals/alert-dialog.htm",
    "content": "<script type=\"text/template\" data-control=\"alert-dialog\">\n    <div class=\"modal\" data-bs-backdrop=\"static\" data-bs-keyboard=\"false\">\n        <div class=\"modal-dialog modal-dialog-centered\">\n            <div class=\"modal-content\">\n                <div class=\"modal-body\">\n                    <p class=\"modal-title lead\" data-message></p>\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-secondary\" data-cancel>\n                        Cancel\n                    </button>\n                    <button type=\"button\" class=\"btn btn-primary\" data-ok>\n                        OK\n                    </button>\n                </div>\n            </div>\n        </div>\n    </div>\n</script>\n"
  },
  {
    "path": "themes/demo/partials/site/modals/password-dialog.htm",
    "content": "<script type=\"text/template\" data-control=\"password-dialog\">\n    <div class=\"modal\" data-bs-backdrop=\"static\" data-bs-keyboard=\"false\">\n        <div class=\"modal-dialog modal-dialog-centered\">\n            <form method=\"post\" class=\"modal-content\" data-request=\"onConfirmPassword\" data-request-flash>\n                <div class=\"modal-header\">\n                    <h5 class=\"modal-title fs-5\" data-message>Confirm password</h5>\n                </div>\n                <div class=\"modal-body\">\n                    <p>For your security, please confirm your password to continue.</p>\n                    <input\n                        name=\"confirmable_password\"\n                        type=\"password\"\n                        value=\"\"\n                        class=\"form-control\"\n                        placeholder=\"Current password\"\n                    />\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-secondary\" data-cancel>\n                        Cancel\n                    </button>\n                    <button type=\"submit\" class=\"btn btn-primary\" data-confirm data-attach-loading>\n                        Confirm\n                    </button>\n                </div>\n            </form>\n        </div>\n    </div>\n</script>\n"
  },
  {
    "path": "themes/demo/partials/site/nav-footer.htm",
    "content": "##\n[section footerNav]\nhandle = \"Site\\Menus\"\nidentifier = \"slug\"\nvalue = \"footer-nav\"\n==\n<div class=\"row gx-0\">\n    {% for headerItem in footerNav.items.toNested %}\n        <div class=\"col-md-4 mb-3\">\n            <ul class=\"nav flex-column\">\n                <li class=\"nav-item nav-item-header\">\n                    <a class=\"nav-link\" {% if headerItem.reference %}href=\"{{ headerItem.reference|link }}\"{% endif %} {{ item.is_external ? 'target=\"_blank\"' }}>\n                        {{ headerItem.title }}\n                    </a>\n                </li>\n                {% for item in headerItem.children %}\n                    <li class=\"nav-item\">\n                        <a class=\"nav-link\" {% if item.reference %}href=\"{{ item.reference|link }}\"{% endif %} {{ item.is_external ? 'target=\"_blank\"' }}>\n                            {{ item.title }}\n                        </a>\n                    </li>\n                {% endfor %}\n            </ul>\n        </div>\n    {% endfor %}\n</div>\n{# Example Footer Nav Markup\n\n<div class=\"row gx-0\">\n    <div class=\"col-md-4 mb-3\">\n        <ul class=\"nav flex-column\">\n            <li class=\"nav-item nav-item-header\">\n                <a class=\"nav-link\" href=\"{{ 'index'|page }}\">Company</a>\n            </li>\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"{{ 'blog/index'|page }}\">Blog</a>\n            </li>\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"{{ 'wiki/index'|page }}\">Wiki</a>\n            </li>\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"{{ 'about'|page }}\">About</a>\n            </li>\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"{{ 'contact'|page }}\">Contact</a>\n            </li>\n        </ul>\n    </div>\n    <div class=\"col-md-4 mb-3\">\n        <ul class=\"nav flex-column\">\n            <li class=\"nav-item nav-item-header\">\n                <a class=\"nav-link\" href=\"{{ 'index'|page }}\">Technology</a>\n            </li>\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"{{ 'ajax'|page }}\">AJAX Demo</a>\n            </li>\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"{{ 'components'|page }}\">Components Demo</a>\n            </li>\n        </ul>\n    </div>\n    <div class=\"col-md-4 mb-3\">\n        <ul class=\"nav flex-column\">\n            <li class=\"nav-item nav-item-header\">\n                <a class=\"nav-link\" href=\"https://octobercms.com\" target=\"_blank\">October CMS</a>\n            </li>\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"https://docs.octobercms.com\" target=\"_blank\">Documentation</a>\n            </li>\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"https://octobercms.com/pricing\" target=\"_blank\">Buy a License</a>\n            </li>\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"https://www.youtube.com/c/OctoberCMSOfficial\" target=\"_blank\">YouTube Channel</a>\n            </li>\n        </ul>\n    </div>\n</div>\n#}\n"
  },
  {
    "path": "themes/demo/partials/site/nav-links.htm",
    "content": "[backendLink]\n[sitePicker]\n==\n{% set activeNavLink = activeNavLink|default(this.page.id) %}\n\n<li class=\"nav-item\">\n    <a class=\"nav-link {{ activeNavLink == 'blog' ? 'active' }}\" href=\"{{ 'blog/index'|page }}\">Blog</a>\n</li>\n<li class=\"nav-item\">\n    <a class=\"nav-link {{ activeNavLink == 'wiki' ? 'active' }}\" href=\"{{ 'wiki/index'|page }}\">Wiki</a>\n</li>\n<li class=\"nav-item\">\n    <a class=\"nav-link {{ activeNavLink == 'about' ? 'active' }}\" href=\"{{ 'about'|page }}\">About</a>\n</li>\n<li class=\"nav-item\">\n    <a class=\"nav-link {{ activeNavLink == 'contact' ? 'active' }}\" href=\"{{ 'contact'|page }}\">Contact</a>\n</li>\n<li class=\"nav-item\">\n    <a class=\"nav-link {{ activeNavLink == 'components' ? 'active' }}\" href=\"{{ 'components'|page }}\">Components Demo</a>\n</li>\n{% if sitePicker.isEnabled %}\n    <li class=\"nav-item dropdown\">\n        <a class=\"btn btn-outline-light dropdown-toggle\" href=\"{{ this|page }}\" id=\"navbarDropdown\" role=\"button\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n            {{ this.site.name|default('Sites') }}\n        </a>\n        <ul class=\"dropdown-menu\" aria-labelledby=\"navbarDropdown\">\n            {% for site in sitePicker.sites %}\n                <li><a class=\"dropdown-item {{ this.site.code == site.code ? 'active' }}\" href=\"{{ site.url }}\">{{ site.name }}</a></li>\n            {% endfor %}\n            {% if backendUrl %}\n                <li><hr class=\"dropdown-divider\"></li>\n                <li><a class=\"dropdown-item\" href=\"{{ backendUrl }}\">Backend Area</a></li>\n            {% endif %}\n        </ul>\n    </li>\n{% elseif backendUrl %}\n    <li class=\"nav-item\">\n        <a class=\"btn btn-outline-light\" href=\"{{ backendUrl }}\" target=\"backend\">Backend Area</a>\n    </li>\n{% endif %}\n"
  },
  {
    "path": "themes/demo/partials/site/nav-mobile.htm",
    "content": "<div class=\"navbar-mobile\">\n    <div class=\"collapse navbar-collapse\" id=\"navbarSupportedContent\">\n        <div class=\"text-end\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"bi bi-x-circle\"></span>\n            </button>\n        </div>\n        <ul class=\"nav flex-column mb-2 mb-lg-0\">\n            {% partial 'site/nav-links' %}\n        </ul>\n    </div>\n</div>\n"
  },
  {
    "path": "themes/demo/partials/wiki/article-toc.htm",
    "content": "{% macro render_toc(articles) %}\n    {% for article in articles %}\n        <li>\n            <a href=\"{{ 'wiki/article'|page({ fullslug: article.fullslug, id: article.id }) }}\">{{ article.title }}</a>\n            - {{ article.summary_text }}\n            <ul>\n                {% if article.children %}\n                    {{ _self.render_toc(article.children) }}\n                {% endif %}\n            </ul>\n        </li>\n    {% endfor %}\n{% endmacro %}\n\n{% import _self as nav %}\n\n<ul>\n    {{ nav.render_toc(articles) }}\n</ul>\n"
  },
  {
    "path": "themes/demo/partials/wiki/breadcrumb.htm",
    "content": "{% macro render_breadcrumb(article) %}\n    {% if article.parent %}\n        {{ _self.render_breadcrumb(article.parent) }}\n        <li class=\"breadcrumb-item\">\n            <a href=\"{{ 'wiki/article'|page({ fullslug: article.parent.fullslug, id: article.parent.id }) }}\">\n                {{ article.parent.title }}\n            </a>\n        </li>\n    {% endif %}\n{% endmacro %}\n\n{% import _self as nav %}\n\n<nav aria-label=\"breadcrumb\">\n    <ol class=\"breadcrumb mb-0\">\n        {{ nav.render_breadcrumb(article) }}\n        <li class=\"breadcrumb-item active\" aria-current=\"page\">{{ article.title }}</li>\n    </ol>\n</nav>\n"
  },
  {
    "path": "themes/demo/partials/wiki/continue.htm",
    "content": "{% set parent = article.parent %}\n\n<ul class=\"bullet-list list-content\">\n    {% if parent %}\n        {% set prevLink = null %}\n        {% set nextLink = null %}\n        {% for sibling in parent.children %}\n            {% if nextLink == true %}\n                <li class=\"mb-1\">\n                    Next: <a href=\"{{ 'wiki/article'|page({ fullslug: sibling.fullslug, id: sibling.id }) }}\">{{ sibling.title }}</a>\n                </li>\n                {% set nextLink = null %}\n            {% endif %}\n\n            {% if sibling.id == article.id %}\n                {% if prevLink %}\n                    <li class=\"mb-1\">\n                        Previous: <a href=\"{{ 'wiki/article'|page({ fullslug: prevLink.fullslug, id: prevLink.id }) }}\">{{ prevLink.title }}</a>\n                    </li>\n                {% endif %}\n                {% set nextLink = true %}\n            {% endif %}\n            {% set prevLink = sibling %}\n        {% endfor %}\n\n        <li class=\"mb-1\">\n            Return to <a href=\"{{ 'wiki/article'|page({ fullslug: parent.fullslug, id: parent.id }) }}\">{{ parent.title }}</a>\n        </li>\n    {% endif %}\n</ul>\n"
  },
  {
    "path": "themes/demo/partials/wiki/sidebar-toc.htm",
    "content": "{% macro render_toc(articles, activeSlug) %}\n    {% for article in articles %}\n        {% set hasChildren = article.children is not empty %}\n        {% set isActive = article.fullslug == activeSlug %}\n        <li class=\"{{ hasChildren ? 'collapsible' }} {{ isActive ? 'active' }}\">\n            <a href=\"#tocItem{{ article.id }}\" class=\"collapse-caret {{ not isActive ? 'collapsed' }}\" data-bs-toggle=\"collapse\"></a>\n            <a class=\"mb-1 d-block\" href=\"{{ 'wiki/article'|page({ fullslug: article.fullslug, id: article.id }) }}\" class=\"label\">{{ article.title }}</a>\n            {% if hasChildren %}\n                <ul id=\"tocItem{{ article.id }}\" class=\"collapse {{ isActive ? 'show' }}\">\n                    {% if article.children %}\n                        {{ _self.render_toc(article.children, activeSlug) }}\n                    {% endif %}\n                </ul>\n            {% endif %}\n        </li>\n    {% endfor %}\n{% endmacro %}\n\n{% import _self as nav %}\n\n<ul class=\"bullet-list\">\n    {{ nav.render_toc(articles, activeSlug|default(this.param.fullslug|default(''))) }}\n</ul>\n"
  },
  {
    "path": "themes/demo/partials/wiki/sidebar.htm",
    "content": "##\n\n[collection wiki]\nhandle = \"Page\\Article\"\n==\n{% set articles = wiki.getNested() %}\n\n<div class=\"sidebar-search\">\n    <form action=\"{{ 'wiki/search'|page }}\" method=\"get\">\n        <div class=\"form-control-search\">\n            <input type=\"text\" name=\"term\" class=\"form-control\" placeholder=\"Search\" value=\"\">\n            <span class=\"search-icon\"></span>\n        </div>\n    </form>\n</div>\n\n<div class=\"sidebar-toc\">\n    <h3>Table of Contents</h3>\n    {% partial 'wiki/sidebar-toc' articles=articles %}\n</div>\n"
  },
  {
    "path": "themes/demo/seeds/data/blog/author.json",
    "content": "[\n    {\n        \"id\": 1,\n        \"title\": \"John Smith\",\n        \"slug\": \"john-smith\",\n        \"email\": \"john.smith@techinnovators.ltd\",\n        \"is_enabled\": 1,\n        \"role\": \"Manager\",\n        \"about\": \"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\",\n        \"social_links\": [\n            {\n                \"platform\": \"twitter\",\n                \"url\": \"https://twitter.com/octobercms\",\n                \"sort_order\": 1\n            },\n            {\n                \"platform\": \"youtube\",\n                \"url\": \"https://www.youtube.com/c/OctoberCMSOfficial\",\n                \"sort_order\": 2\n            },\n            {\n                \"platform\": \"facebook\",\n                \"url\": \"https://facebook.com/octobercms\",\n                \"sort_order\": 3\n            },\n            {\n                \"platform\": \"linkedin\",\n                \"url\": \"https://www.linkedin.com/company/october-cms/\",\n                \"sort_order\": 4\n            }\n        ]\n    },\n    {\n        \"id\": 2,\n        \"title\": \"Jane Doe\",\n        \"slug\": \"jane-doe\",\n        \"email\": \"jane.doe@devsolutions.ltd\",\n        \"is_enabled\": 1,\n        \"role\": \"Lead Developer\",\n        \"about\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\",\n        \"social_links\": [\n            {\n                \"platform\": \"twitter\",\n                \"url\": \"https://twitter.com/octobercms\",\n                \"sort_order\": 1\n            },\n            {\n                \"platform\": \"youtube\",\n                \"url\": \"https://www.youtube.com/c/OctoberCMSOfficial\",\n                \"sort_order\": 2\n            },\n            {\n                \"platform\": \"facebook\",\n                \"url\": \"https://facebook.com/octobercms\",\n                \"sort_order\": 3\n            },\n            {\n                \"platform\": \"linkedin\",\n                \"url\": \"https://www.linkedin.com/company/october-cms/\",\n                \"sort_order\": 4\n            }\n        ]\n    }\n]\n"
  },
  {
    "path": "themes/demo/seeds/data/blog/category.json",
    "content": "[\n    {\n        \"id\": 1,\n        \"title\": \"Announcements\",\n        \"slug\": \"announcements\",\n        \"is_enabled\": 1,\n        \"description\": \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt molliti\"\n    },\n    {\n        \"id\": 2,\n        \"title\": \"News\",\n        \"slug\": \"news\",\n        \"is_enabled\": 1,\n        \"description\": \"Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.\"\n    },\n    {\n        \"id\": 3,\n        \"title\": \"Startup Ideas\",\n        \"slug\": \"startup-ideas\",\n        \"is_enabled\": 1,\n        \"description\": \"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proide\"\n    },\n    {\n        \"id\": 4,\n        \"title\": \"Updates\",\n        \"slug\": \"updates\",\n        \"is_enabled\": 1,\n        \"description\": \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt molliti\"\n    },\n    {\n        \"id\": 5,\n        \"title\": \"Automation\",\n        \"slug\": \"automation\",\n        \"is_enabled\": 1,\n        \"description\": \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\"\n    }\n]\n"
  },
  {
    "path": "themes/demo/seeds/data/blog/post.json",
    "content": "[\n    {\n        \"id\": 1,\n        \"title\": \"Consectetur adipiscing elit\",\n        \"slug\": \"consectetur-adipiscing-elit\",\n        \"is_enabled\": 1,\n        \"content_group\": \"regular_post\",\n        \"content\": \"<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<\\/p><p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?<\\/p>\",\n        \"author\": 1,\n        \"categories\": [\n            1\n        ],\n        \"featured_text\": \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\"\n    },\n    {\n        \"id\": 2,\n        \"title\": \"Nemo enim ipsam\",\n        \"slug\": \"nemo-enim-ipsam\",\n        \"is_enabled\": 1,\n        \"content_group\": \"regular_post\",\n        \"content\": \"<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<\\/p><p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?<\\/p>\",\n        \"author\": 1,\n        \"categories\": [\n            2\n        ],\n        \"featured_text\": \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga.\"\n    }\n]\n"
  },
  {
    "path": "themes/demo/seeds/data/pages/about.json",
    "content": "[\n    {\n        \"id\": 1,\n        \"title\": \"About Us\",\n        \"slug\": \"about-us\",\n        \"is_enabled\": 1,\n        \"content_group\": null,\n        \"blocks\": [\n            {\n                \"image\": \"\",\n                \"content_group\": \"image_slice\",\n                \"sort_order\": 1\n            },\n            {\n                \"title\": \"Outstanding performance\",\n                \"content\": \"<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.<\\/p>\",\n                \"image\": \"\",\n                \"content_group\": \"paragraph_block\",\n                \"sort_order\": 2\n            },\n            {\n                \"title\": \"Why work with us\",\n                \"content\": \"<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<\\/p>\",\n                \"list_items\": [\n                    {\n                        \"text\": \"Doloremque\"\n                    },\n                    {\n                        \"text\": \"Beatae vitae\"\n                    },\n                    {\n                        \"text\": \"Totam rem aperiam\"\n                    }\n                ],\n                \"button_text\": \"Learn more about our process\",\n                \"button_url\": \"https:\\/\\/octobercms.com\\/features\",\n                \"image\": \"\",\n                \"content_group\": \"detailed_block\",\n                \"sort_order\": 3\n            },\n            {\n                \"content_group\": \"scoreboard_metrics\",\n                \"sort_order\": 4,\n                \"metrics\": [\n                    {\n                        \"number\": 3912,\n                        \"description\": \"Sed ut perspiciatis\",\n                        \"icon\": \"notepad\",\n                        \"content_group\": null,\n                        \"sort_order\": 1\n                    },\n                    {\n                        \"number\": 223,\n                        \"description\": \"Nemo enim ipsam\",\n                        \"icon\": \"shield\",\n                        \"content_group\": null,\n                        \"sort_order\": 2\n                    },\n                    {\n                        \"number\": 863,\n                        \"description\": \"Nam libero tempore\",\n                        \"icon\": \"basket\",\n                        \"content_group\": null,\n                        \"sort_order\": 3\n                    },\n                    {\n                        \"number\": 865,\n                        \"description\": \"Et harum quidem rerum\",\n                        \"icon\": \"briefcase\",\n                        \"content_group\": null,\n                        \"sort_order\": 4\n                    }\n                ]\n            },\n            {\n                \"content_group\": \"team_leaders\",\n                \"sort_order\": 5,\n                \"members\": [\n                    {\n                        \"title\": \"Andy Anderson\",\n                        \"role\": \"Sales Manager\",\n                        \"description\": \"Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam.\",\n                        \"avatar\": \"\",\n                        \"content_group\": null,\n                        \"sort_order\": 1,\n                        \"social_links\": [\n                            {\n                                \"platform\": \"twitter\",\n                                \"url\": \"https:\\/\\/twitter.com\\/octobercms\",\n                                \"sort_order\": 1\n                            },\n                            {\n                                \"platform\": \"linkedin\",\n                                \"url\": \"https:\\/\\/www.linkedin.com\\/company\\/october-cms\\/\",\n                                \"sort_order\": 2\n                            },\n                            {\n                                \"platform\": \"facebook\",\n                                \"url\": \"https:\\/\\/facebook.com\\/octobercms\",\n                                \"sort_order\": 3\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Bob Harris\",\n                        \"role\": \"Product Designer\",\n                        \"description\": \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque.\",\n                        \"avatar\": \"\",\n                        \"content_group\": null,\n                        \"sort_order\": 2,\n                        \"social_links\": [\n                            {\n                                \"platform\": \"twitter\",\n                                \"url\": \"https:\\/\\/twitter.com\\/octobercms\",\n                                \"sort_order\": 1\n                            },\n                            {\n                                \"platform\": \"youtube\",\n                                \"url\": \"https:\\/\\/www.youtube.com\\/c\\/OctoberCMSOfficial\",\n                                \"sort_order\": 2\n                            },\n                            {\n                                \"platform\": \"dribbble\",\n                                \"url\": \"https:\\/\\/www.dribbble.com\",\n                                \"sort_order\": 3\n                            },\n                            {\n                                \"platform\": \"facebook\",\n                                \"url\": \"https:\\/\\/facebook.com\\/octobercms\",\n                                \"sort_order\": 4\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Ann Lewis\",\n                        \"role\": \"Marketing Manager\",\n                        \"description\": \"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla.\",\n                        \"avatar\": \"\",\n                        \"content_group\": null,\n                        \"sort_order\": 3,\n                        \"social_links\": [\n                            {\n                                \"platform\": \"twitter\",\n                                \"url\": \"https:\\/\\/twitter.com\\/octobercms\",\n                                \"sort_order\": 1\n                            },\n                            {\n                                \"platform\": \"linkedin\",\n                                \"url\": \"https:\\/\\/www.linkedin.com\\/company\\/october-cms\\/\",\n                                \"sort_order\": 2\n                            },\n                            {\n                                \"platform\": \"facebook\",\n                                \"url\": \"https:\\/\\/facebook.com\\/octobercms\",\n                                \"sort_order\": 3\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Christina Thompson\",\n                        \"role\": \"System Analyst\",\n                        \"description\": \"Et harum quidem rerum facilis est et expedita distinctio.\",\n                        \"avatar\": \"\",\n                        \"content_group\": null,\n                        \"sort_order\": 4,\n                        \"social_links\": [\n                            {\n                                \"platform\": \"twitter\",\n                                \"url\": \"https:\\/\\/twitter.com\\/octobercms\",\n                                \"sort_order\": 1\n                            },\n                            {\n                                \"platform\": \"youtube\",\n                                \"url\": \"https:\\/\\/www.youtube.com\\/c\\/OctoberCMSOfficial\",\n                                \"sort_order\": 2\n                            },\n                            {\n                                \"platform\": \"dribbble\",\n                                \"url\": \"https:\\/\\/www.dribbble.com\",\n                                \"sort_order\": 3\n                            },\n                            {\n                                \"platform\": \"facebook\",\n                                \"url\": \"https:\\/\\/facebook.com\\/octobercms\",\n                                \"sort_order\": 4\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"John Smith\",\n                        \"role\": \"President\",\n                        \"description\": \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.\",\n                        \"avatar\": \"\",\n                        \"content_group\": null,\n                        \"sort_order\": 5,\n                        \"social_links\": [\n                            {\n                                \"platform\": \"dribbble\",\n                                \"url\": \"https:\\/\\/www.dribbble.com\",\n                                \"sort_order\": 1\n                            },\n                            {\n                                \"platform\": \"linkedin\",\n                                \"url\": \"https:\\/\\/www.linkedin.com\\/company\\/october-cms\\/\",\n                                \"sort_order\": 2\n                            },\n                            {\n                                \"platform\": \"youtube\",\n                                \"url\": \"https:\\/\\/www.youtube.com\\/c\\/OctoberCMSOfficial\",\n                                \"sort_order\": 3\n                            }\n                        ]\n                    }\n                ]\n            }\n        ]\n    }\n]\n"
  },
  {
    "path": "themes/demo/seeds/data/pages/article.json",
    "content": "[\n    {\n        \"id\": 1,\n        \"title\": \"Our Locations\",\n        \"content\": \"<p>The term location generally implies a higher degree of certainty than place, the latter often indicating an entity with an ambiguous boundary, relying more on human or social attributes of place identity and sense of place than on geometry. An absolute location can be designated using a specific pairing of latitude and longitude in a Cartesian coordinate grid (for example, a spherical coordinate system or an ellipsoid-based system such as the World Geodetic System) or similar methods. For instance, the position of Lake Maracaibo in Venezuela can be expressed using the coordinate system as the location 9.80\\u00b0N (latitude), 71.56\\u00b0W (longitude).<\\/p>\",\n        \"slug\": \"our-locations\",\n        \"fullslug\": \"our-locations\",\n        \"is_enabled\": 1,\n        \"content_group\": null,\n        \"parent_id\": null,\n        \"banner\": null,\n        \"show_in_toc\": 1,\n        \"summary_text\": \"In geography, location or place are used to denote a region (point, line, or area) on Earth's surface or elsewhere.\",\n        \"external_links\": []\n    },\n    {\n        \"id\": 2,\n        \"title\": \"Canberra\",\n        \"content\": \"<p>Unusual among Australian cities, it is an entirely planned city. The city is located at the northern end of the Australian Capital Territory[11] at the northern tip of the Australian Alps, the country's highest mountain range. As of June 2020, Canberra's estimated population was 431,380.[12]<\\/p><p>The area chosen for the capital had been inhabited by Indigenous Australians for up to 21,000 years,[13] with the principal group being the Ngunnawal people. European settlement commenced in the first half of the 19th century, as evidenced by surviving landmarks such as St John's Anglican Church and Blundells Cottage. On 1 January 1901, federation of the colonies of Australia was achieved. Following a long dispute over whether Sydney or Melbourne should be the national capital,[14] a compromise was reached: the new capital would be built in New South Wales, so long as it was at least 100 miles (160 km) from Sydney. The capital city was founded and formally named as Canberra in 1913. A blueprint by American architects Walter Burley Griffin and Marion Mahony Griffin was selected after an international design contest, and construction commenced in 1913.[15] The Griffins' plan featured geometric motifs and was centred on axes aligned with significant topographical landmarks such as Black Mountain, Mount Ainslie, Capital Hill and City Hill. Canberra's mountainous location makes it the only mainland Australian city where snow-capped mountains can be seen in winter; although snow in the city itself is rare.<\\/p><p>As the seat of the Government of Australia, Canberra is home to many important institutions of the federal government, national monuments and museums. This includes Parliament House, Government House, the High Court and the headquarters of numerous government agencies. It is the location of many social and cultural institutions of national significance such as the Australian War Memorial, the Australian National University, the Royal Australian Mint, the Australian Institute of Sport, the National Gallery, the National Museum and the National Library. The city is home to many important institutions of the Australian Defence Force including the Royal Military College Duntroon and the Australian Defence Force Academy. It hosts all foreign embassies in Australia as well as regional headquarters of many international organisations, not-for-profit groups, lobbying groups and professional associations.<\\/p>\",\n        \"slug\": \"canberra\",\n        \"fullslug\": \"our-locations/canberra\",\n        \"is_enabled\": 1,\n        \"content_group\": null,\n        \"parent_id\": 1,\n        \"banner\": null,\n        \"show_in_toc\": 1,\n        \"summary_text\": \"Canberra (\\/\\u02c8k\\u00e6nb\\u0259r\\u0259\\/ KAN-b\\u0259-r\\u0259) is the capital city of Australia. Founded following the federation of the colonies of Australia as the seat of government for the new nation, it is Australia's largest inland city and the eighth-largest city overall.\",\n        \"external_links\": [\n            {\n                \"link_text\": \"Canberra travel guide from Wikivoyage\",\n                \"link_url\": \"https:\\/\\/en.wikivoyage.org\\/wiki\\/Canberra\",\n                \"content_group\": null,\n                \"sort_order\": 1\n            },\n            {\n                \"link_text\": \"Official Tourism Website\",\n                \"link_url\": \"https:\\/\\/visitcanberra.com.au\\/\",\n                \"content_group\": null,\n                \"sort_order\": 2\n            },\n            {\n                \"link_text\": \"Canberra 100 \\u2013 Celebrating Canberra's 100th anniversary\",\n                \"link_url\": \"https:\\/\\/www.canberra100.com.au\\/\",\n                \"content_group\": null,\n                \"sort_order\": 3\n            }\n        ]\n    },\n    {\n        \"id\": 3,\n        \"title\": \"Sydney\",\n        \"content\": \"<p>Located on Australia's east coast, the metropolis surrounds Port Jackson and extends about 70 km (43.5 mi) on its periphery towards the Blue Mountains to the west, Hawkesbury to the north, the Royal National Park to the south and Macarthur to the south-west. Sydney is made up of 658 suburbs, spread across 33 local government areas. Residents of the city are known as \\\"Sydneysiders\\\". As of June 2020, Sydney's estimated metropolitan population was 5,361,466, meaning the city is home to approximately 66% of the state's population. Nicknames of the city include the 'Emerald City' and the 'Harbour City'.<\\/p><p>Indigenous Australians have inhabited the Sydney area for at least 30,000 years, and thousands of Aboriginal engravings remain throughout the region. During his first Pacific voyage in 1770, Lieutenant James Cook and his crew became the first Europeans to chart the eastern coast of Australia, making landfall at Botany Bay. In 1788, the First Fleet of convicts, led by Arthur Phillip, founded Sydney as a British penal colony, the first European settlement in Australia. After World War II, it experienced mass migration and became one of the most multicultural cities in the world. Furthermore, 45.4% of the population reported having been born overseas, and the city has the third-largest foreign-born population of any city in the world after London and New York City.<\\/p><p>Despite being one of the most expensive cities in the world, Sydney frequently ranks in the top ten most liveable cities in the world. It is classified as an Alpha global city by the Globalization and World Cities Research Network, indicating its influence in the region and throughout the world. Ranked eleventh in the world for economic opportunity, Sydney has an advanced market economy with strengths in finance, manufacturing and tourism. Established in 1850, the University of Sydney was Australia's first university and is regarded as one of the world's leading universities.<\\/p>\",\n        \"slug\": \"sydney\",\n        \"fullslug\": \"our-locations/sydney\",\n        \"is_enabled\": 1,\n        \"content_group\": null,\n        \"parent_id\": 1,\n        \"banner\": null,\n        \"show_in_toc\": 1,\n        \"summary_text\": \"Sydney is the capital city of the state of New South Wales, and the most populous city in Australia and Oceania.\",\n        \"external_links\": []\n    },\n    {\n        \"id\": 4,\n        \"title\": \"Vancouver\",\n        \"content\": \"<p>As the most populous city in the province, the 2021 census recorded 662,248 people in the city, up from 631,486 in 2016. The Greater Vancouver area had a population of 2,642,825 in 2021, making it the third-largest metropolitan area in Canada. Vancouver has the highest population density in Canada, with over 5,400 people per square kilometre. Vancouver is one of the most ethnically and linguistically diverse cities in Canada: 52 percent of its residents are not native English speakers, 48.9 percent are native speakers of neither English nor French, and 50.6 percent of residents belong to visible minority groups.<\\/p><p>Vancouver is one of the most livable cities in Canada and in the world. In terms of housing affordability, Vancouver is also one of the most expensive cities in Canada and in the world. Vancouver plans to become the greenest city in the world. Vancouverism is the city's urban planning design philosophy.<\\/p><p>Indigenous settlement of Vancouver began more than 10,000 years ago, and the city is on the traditional and unceded territories of the Squamish, Musqueam, and Tsleil-Waututh (Burrard) peoples. The beginnings of the modern city, which was originally named Gastown, grew around the site of a makeshift tavern on the western edges of Hastings Mill that was built on July 1, 1867, and owned by proprietor Gassy Jack. The original site is marked by the Gastown steam clock. Gastown then formally registered as a townsite dubbed Granville, Burrard Inlet. The city was renamed \\\"Vancouver\\\" in 1886, through a deal with the Canadian Pacific Railway (CPR). The Canadian Pacific transcontinental railway was extended to the city by 1887. The city's large natural seaport on the Pacific Ocean became a vital link in the trade between Asia-Pacific, East Asia, Europe, and Eastern Canada.<\\/p>\",\n        \"slug\": \"vancouver\",\n        \"fullslug\": \"our-locations/vancouver\",\n        \"is_enabled\": 1,\n        \"content_group\": null,\n        \"parent_id\": 1,\n        \"banner\": null,\n        \"show_in_toc\": 1,\n        \"summary_text\": \"Vancouver is a major city in western Canada, located in the Lower Mainland region of British Columbia.\",\n        \"external_links\": []\n    },\n    {\n        \"id\": 5,\n        \"title\": \"Knowledge Base\",\n        \"content\": \"<p>Knowledge Base<\\/p>\",\n        \"slug\": \"knowledge-base\",\n        \"fullslug\": \"our-locations/knowledge-base\",\n        \"is_enabled\": 1,\n        \"content_group\": null,\n        \"parent_id\": null,\n        \"banner\": null,\n        \"show_in_toc\": 1,\n        \"summary_text\": \"\",\n        \"external_links\": []\n    }\n]"
  },
  {
    "path": "themes/demo/seeds/data/site/menus.json",
    "content": "[\n    {\n        \"id\": 1,\n        \"title\": \"Footer Menu\",\n        \"slug\": \"footer-nav\",\n        \"is_enabled\": 1,\n        \"content_group\": \"regular_menu\",\n        \"items\": [\n            {\n                \"id\": 1,\n                \"title\": \"Company\",\n                \"reference\": \"\",\n                \"is_hidden\": \"0\",\n                \"code\": \"company\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": null,\n                \"sort_order\": 1\n            },\n            {\n                \"id\": 2,\n                \"title\": \"Blog\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/blog\\/index?title=Blog+Homepage+%28blog%2Findex%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"blog\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": 1,\n                \"sort_order\": 2\n            },\n            {\n                \"id\": 3,\n                \"title\": \"Technology\",\n                \"reference\": \"\",\n                \"is_hidden\": \"0\",\n                \"code\": \"technology\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": null,\n                \"sort_order\": 2\n            },\n            {\n                \"id\": 4,\n                \"title\": \"Wiki\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/wiki\\/index?title=Wiki+Docs+Demo+%28wiki%2Findex%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"wiki\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": 1,\n                \"sort_order\": 3\n            },\n            {\n                \"id\": 5,\n                \"title\": \"AJAX Demo\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/ajax?title=AJAX+Framework+%28ajax%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"ajax-demo\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": 3,\n                \"sort_order\": 3\n            },\n            {\n                \"id\": 6,\n                \"title\": \"October CMS\",\n                \"reference\": \"\",\n                \"is_hidden\": \"0\",\n                \"code\": \"october-cms\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": null,\n                \"sort_order\": 3\n            },\n            {\n                \"id\": 7,\n                \"title\": \"About\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/about?title=About+Page+%28about%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"about\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": 1,\n                \"sort_order\": 4\n            },\n            {\n                \"id\": 8,\n                \"title\": \"Components Demo\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/components?title=Components+Demo+%28components%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"components-demo\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": 3,\n                \"sort_order\": 4\n            },\n            {\n                \"id\": 9,\n                \"title\": \"Documentation\",\n                \"reference\": \"https:\\/\\/docs.octobercms.com\\/\",\n                \"is_hidden\": \"0\",\n                \"code\": \"documentation\",\n                \"css_class\": \"\",\n                \"is_external\": \"1\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": 6,\n                \"sort_order\": 4\n            },\n            {\n                \"id\": 10,\n                \"title\": \"Contact\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/contact?title=Contact+Us+%28contact%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"contact\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": 1,\n                \"sort_order\": 5\n            },\n            {\n                \"id\": 11,\n                \"title\": \"Buy a License\",\n                \"reference\": \"https:\\/\\/octobercms.com\\/pricing\",\n                \"is_hidden\": \"0\",\n                \"code\": \"buy-license\",\n                \"css_class\": \"\",\n                \"is_external\": \"1\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": 6,\n                \"sort_order\": 5\n            },\n            {\n                \"id\": 12,\n                \"title\": \"YouTube Channel\",\n                \"reference\": \"https:\\/\\/www.youtube.com\\/c\\/OctoberCMSOfficial\",\n                \"is_hidden\": \"0\",\n                \"code\": \"youtube-channel\",\n                \"css_class\": \"\",\n                \"is_external\": \"1\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"parent_id\": 6,\n                \"sort_order\": 6\n            }\n        ],\n        \"sitemap_items\": []\n    },\n    {\n        \"id\": 2,\n        \"title\": \"Sitemap\",\n        \"slug\": \"sitemap\",\n        \"is_enabled\": 1,\n        \"content_group\": \"sitemap_menu\",\n        \"items\": [],\n        \"sitemap_items\": [\n            {\n                \"title\": \"Homepage\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/index?title=Demonstration+%28index%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"homepage\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"priority\": \"0.1\",\n                \"changefreq\": \"weekly\",\n                \"parent_id\": null,\n                \"sort_order\": 1\n            },\n            {\n                \"title\": \"Blog\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/blog\\/index?title=Blog+Homepage+%28blog%2Findex%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"blog\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"priority\": \"0.2\",\n                \"changefreq\": \"always\",\n                \"parent_id\": null,\n                \"sort_order\": 2\n            },\n            {\n                \"title\": \"Blog Posts\",\n                \"reference\": \"october:\\/\\/list-entry-edcd102e-0525-4e4d-b07e-633ae6c18db6@link\\/?cms_page=blog%2Fpost\",\n                \"is_hidden\": \"0\",\n                \"code\": \"blog-posts\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"priority\": \"0.3\",\n                \"changefreq\": \"daily\",\n                \"parent_id\": null,\n                \"sort_order\": 3\n            },\n            {\n                \"title\": \"Blog Categories\",\n                \"reference\": \"october:\\/\\/list-entry-b022a74b-15e6-4c6b-9eb9-17efc5103543@link\\/?cms_page=blog%2Fcategory\",\n                \"is_hidden\": \"0\",\n                \"code\": \"blog-categories\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"priority\": \"0.4\",\n                \"changefreq\": \"weekly\",\n                \"parent_id\": null,\n                \"sort_order\": 4\n            },\n            {\n                \"title\": \"Wiki\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/wiki\\/index?title=Wiki+Docs+Demo+%28wiki%2Findex%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"wiki\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"priority\": \"0.2\",\n                \"changefreq\": \"daily\",\n                \"parent_id\": null,\n                \"sort_order\": 5\n            },\n            {\n                \"title\": \"All Articles\",\n                \"reference\": \"october:\\/\\/list-entry-339b11b7-69ad-43c4-9be1-6953e7738827@link\\/?cms_page=wiki%2Farticle\",\n                \"is_hidden\": \"0\",\n                \"code\": \"all-articles\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"1\",\n                \"replace\": \"0\",\n                \"priority\": \"0.3\",\n                \"changefreq\": \"daily\",\n                \"parent_id\": null,\n                \"sort_order\": 6\n            },\n            {\n                \"title\": \"About\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/about?title=About+Page+%28about%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"about\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"priority\": \"0.6\",\n                \"changefreq\": \"weekly\",\n                \"parent_id\": null,\n                \"sort_order\": 7\n            },\n            {\n                \"title\": \"Contact\",\n                \"reference\": \"october:\\/\\/cms-page@link\\/contact?title=Contact+Us+%28contact%29\",\n                \"is_hidden\": \"0\",\n                \"code\": \"contact\",\n                \"css_class\": \"\",\n                \"is_external\": \"0\",\n                \"nesting\": \"0\",\n                \"replace\": \"0\",\n                \"priority\": \"0.6\",\n                \"changefreq\": \"weekly\",\n                \"parent_id\": null,\n                \"sort_order\": 8\n            }\n        ]\n    }\n]"
  },
  {
    "path": "themes/demo/seeds/data.yaml",
    "content": "-\n    name: Blog Category Data\n    class: Tailor\\Models\\RecordImport\n    file: seeds/data/blog/category.json\n    attributes:\n        file_format: json\n        blueprint_uuid: b022a74b-15e6-4c6b-9eb9-17efc5103543\n-\n    name: Blog Author Data\n    class: Tailor\\Models\\RecordImport\n    file: seeds/data/blog/author.json\n    attributes:\n        file_format: json\n        blueprint_uuid: 6947ff28-b660-47d7-9240-24ca6d58aeae\n-\n    name: Blog Post Data\n    class: Tailor\\Models\\RecordImport\n    file: seeds/data/blog/post.json\n    attributes:\n        file_format: json\n        blueprint_uuid: edcd102e-0525-4e4d-b07e-633ae6c18db6\n-\n    name: Pages Data\n    class: Tailor\\Models\\RecordImport\n    file: seeds/data/pages/article.json\n    attributes:\n        file_format: json\n        blueprint_uuid: 339b11b7-69ad-43c4-9be1-6953e7738827\n-\n    name: About Page Data\n    class: Tailor\\Models\\RecordImport\n    file: seeds/data/pages/about.json\n    attributes:\n        file_format: json\n        blueprint_uuid: a63fabaf-7c0b-4c74-b36f-7abf1a3ad1c1\n-\n    name: Menu Data\n    class: Tailor\\Models\\RecordImport\n    file: seeds/data/site/menus.json\n    attributes:\n        file_format: json\n        blueprint_uuid: 85e471d2-09b9-4f3d-a63b-1ae9d92d2879\n"
  },
  {
    "path": "themes/demo/theme.yaml",
    "content": "name: Demo\ndescription: 'Demo October CMS theme. Demonstrates the basic concepts of the front-end theming: layouts, pages, partials, components, content blocks, AJAX framework.'\nauthor: October CMS\nhomepage: 'http://octobercms.com'\ncode: ''\n"
  },
  {
    "path": "webpack.config.js",
    "content": "const webpack = require('webpack');\n\nmodule.exports = {\n    devtool: 'inline-source-map',\n    plugins: [\n        new webpack.ProvidePlugin({\n            $: 'jquery',\n            jQuery: 'jquery',\n            'window.jQuery': 'jquery',\n            'window.$': 'jquery',\n        }),\n    ],\n    externals: {\n        // Use external version of jQuery\n        jquery: 'jQuery'\n    },\n};\n"
  },
  {
    "path": "webpack.helpers.js",
    "content": "/*\n |--------------------------------------------------------------------------\n | Mix Extensions\n |--------------------------------------------------------------------------\n |\n | Adds custom helper functions to the mix object.\n |\n */\n\nconst { lstatSync, readdirSync } = require('fs');\nconst { join } = require('path');\nconst fs = require('fs');\n\nconst isDirectory = (source) => lstatSync(source).isDirectory();\nconst getDirectories = (source) => readdirSync(source).map((name) => join(source, name)).filter(isDirectory);\n\nfunction makeComponentLessList(source) {\n    const componentDirs = getDirectories(source);\n    const result = [];\n\n    componentDirs.forEach((dir) => {\n        const parts = dir.replace(/\\\\/g, '/').split('/');\n        const componentName = parts[parts.length - 1];\n        const lessFile = dir + '/assets/less/' + componentName + '.less';\n\n        if (fs.existsSync(lessFile)) {\n            result.push(componentName);\n        }\n    });\n\n    return result;\n}\n\n// Attach the helpers to the mix object\nmodule.exports = (mix) => {\n\n    // Wildcard helper for components\n    mix.lessList = (path, except = []) => {\n        makeComponentLessList(path)\n            .filter(name => !except.includes(name))\n            .forEach(name => mix.less(`${path}/${name}/assets/less/${name}.less`, `${path}/${name}/assets/css/`))\n        ;\n    };\n\n};\n"
  },
  {
    "path": "webpack.mix.js",
    "content": "const mix = require('laravel-mix');\nconst webpackConfig = require('./webpack.config');\n\n/*\n |--------------------------------------------------------------------------\n | Mix Asset Management\n |--------------------------------------------------------------------------\n |\n | Mix provides a clean, fluent API for defining some Webpack build steps\n | for your theme assets. By default, we are compiling the CSS\n | file for the application as well as bundling up all the JS files.\n |\n */\n\nmix\n    .webpackConfig(webpackConfig)\n    .options({\n        processCssUrls: false,\n        manifest: false,\n        terser: {\n            terserOptions: {\n                mangle: false,\n                compress: true,\n                output: {\n                    comments: false\n                }\n            },\n        },\n    })\n    .setPublicPath('')\n;\n\n// Vendor Mixes\nmix\n    .copy('node_modules/jquery/dist/jquery.min.js', 'modules/system/assets/js/vendor/jquery.min.js')\n    .copy('node_modules/vue-router/dist/vue-router.min.js', 'modules/system/assets/vendor/vue-router/vue.min.js')\n    .copy('node_modules/bluebird/js/browser/bluebird.min.js', 'modules/system/assets/vendor/bluebird/bluebird.min.js')\n    .copy('node_modules/sortablejs/Sortable.min.js', 'modules/backend/assets/vendor/sortablejs/sortable.js')\n    .copy('node_modules/dropzone/dist/dropzone-min.js', 'modules/backend/assets/vendor/dropzone/dropzone.js')\n    .copy('node_modules/js-cookie/dist/js.cookie.js', 'modules/backend/assets/vendor/js-cookie/js.cookie.js')\n;\n\n// Vue dev tools\nif (!mix.inProduction()) {\n    mix.copy('node_modules/vue/dist/vue.js', 'modules/system/assets/vendor/vue/vue.min.js');\n}\nelse {\n    mix.copy('node_modules/vue/dist/vue.min.js', 'modules/system/assets/vendor/vue/vue.min.js');\n}\n\n// Boostrap Mixes\nmix\n    .js('modules/backend/assets/vendor/bootstrap/bootstrap.js', 'modules/backend/assets/vendor/bootstrap/bootstrap.min.js')\n    .sass('modules/backend/assets/vendor/bootstrap/bootstrap.scss', 'modules/backend/assets/vendor/bootstrap/bootstrap.css')\n    .sass('modules/backend/assets/vendor/bootstrap/bootstrap-lite.scss', 'modules/backend/assets/vendor/bootstrap/bootstrap-lite.css')\n    .sass('modules/backend/assets/vendor/bootstrap-icons/bootstrap-icons.scss', 'modules/backend/assets/vendor/bootstrap-icons/bootstrap-icons.css')\n    .copy('node_modules/bootstrap-icons/font/fonts/', 'modules/backend/assets/vendor/bootstrap-icons/fonts/')\n;\n\n// Core Mixes\nrequire('./webpack.helpers')(mix);\nrequire('./modules/system/system.mix')(mix);\nrequire('./modules/backend/backend.mix')(mix);\nrequire('./modules/editor/editor.mix')(mix);\nrequire('./modules/media/media.mix')(mix);\nrequire('./modules/tailor/tailor.mix')(mix);\nrequire('./modules/cms/cms.mix')(mix);\n"
  }
]